From d9cbd165da8c068ad8c8f1527468a2e3bea50cc5 Mon Sep 17 00:00:00 2001 From: szczerba Date: Thu, 2 Jun 2022 15:48:51 +0200 Subject: [PATCH] Initial baseline --- .clang-format | 88 + CMakeLists.txt | 168 + Makefile | 203 + Workspace_msvc/Workspace_msvc.sln | 114 + Workspace_msvc/decoder.vcxproj | 242 + Workspace_msvc/encoder.vcxproj | 256 + Workspace_msvc/lib_com.vcxproj | 362 + Workspace_msvc/lib_com.vcxproj.filters | 551 + Workspace_msvc/lib_debug.vcxproj | 169 + Workspace_msvc/lib_dec.vcxproj | 431 + Workspace_msvc/lib_dec.vcxproj.filters | 650 + Workspace_msvc/lib_enc.vcxproj | 426 + Workspace_msvc/lib_enc.vcxproj.filters | 617 + Workspace_msvc/lib_util.vcxproj | 189 + apps/decoder.c | 1885 + apps/encoder.c | 1878 + lib_com/ACcontextMapping.c | 110 + lib_com/ari.c | 67 + lib_com/ari_hm.c | 303 + lib_com/arith_coder.c | 575 + lib_com/basop32.c | 3206 ++ lib_com/basop32.h | 280 + lib_com/basop_com_lpc.c | 261 + lib_com/basop_lsf_tools.c | 311 + lib_com/basop_mpy.c | 89 + lib_com/basop_mpy.h | 100 + lib_com/basop_proto_func.h | 70 + lib_com/basop_settings.h | 110 + lib_com/basop_tcx_utils.c | 438 + lib_com/basop_util.c | 1109 + lib_com/basop_util.h | 418 + lib_com/bitalloc.c | 1022 + lib_com/bitallocsum.c | 96 + lib_com/bits_alloc.c | 1562 + lib_com/bitstream.c | 2973 ++ lib_com/calc_st_com.c | 310 + lib_com/cb_shape.c | 125 + lib_com/cldfb.c | 1235 + lib_com/cng_exc.c | 621 + lib_com/cnst.h | 2216 + lib_com/codec_tcx_common.c | 335 + lib_com/common_api_types.h | 133 + lib_com/control.h | 82 + lib_com/core_com_config.c | 916 + lib_com/deemph.c | 74 + lib_com/delay_comp.c | 111 + lib_com/disclaimer.c | 56 + lib_com/dlpc_bfi.c | 80 + lib_com/edct.c | 424 + lib_com/enh1632.c | 633 + lib_com/enh1632.h | 508 + lib_com/enh40.c | 1311 + lib_com/enh40.h | 349 + lib_com/enhancer.c | 284 + lib_com/enr_1_az.c | 68 + lib_com/env_adj.c | 168 + lib_com/env_stab.c | 225 + lib_com/env_stab_trans.c | 158 + lib_com/est_tilt.c | 93 + lib_com/fd_cng_com.c | 1161 + lib_com/fft.c | 6768 +++ lib_com/fft_cldfb.c | 1223 + lib_com/fft_rel.c | 303 + lib_com/fill_spectrum.c | 269 + lib_com/findpulse.c | 143 + lib_com/fine_gain_bits.c | 134 + lib_com/frame_ener.c | 131 + lib_com/get_gain.c | 74 + lib_com/gs_bitallocation.c | 935 + lib_com/gs_gains.c | 695 + lib_com/gs_inact_switching.c | 148 + lib_com/gs_noisefill.c | 846 + lib_com/gs_preech.c | 142 + lib_com/guided_plc_util.c | 323 + lib_com/hp50.c | 134 + lib_com/hq2_bit_alloc.c | 1032 + lib_com/hq2_core_com.c | 584 + lib_com/hq2_noise_inject.c | 278 + lib_com/hq_bit_allocation.c | 223 + lib_com/hq_conf.c | 258 + lib_com/hq_tools.c | 1831 + lib_com/hvq_pvq_bitalloc.c | 190 + lib_com/ifft_rel.c | 290 + lib_com/igf_base.c | 741 + lib_com/index_pvq_opt.c | 1247 + lib_com/int_lsp.c | 180 + lib_com/interleave_spectrum.c | 208 + lib_com/interpol.c | 80 + lib_com/isf_dec_amr_wb.c | 289 + lib_com/ivas_agc_com.c | 129 + lib_com/ivas_arith.c | 292 + lib_com/ivas_avq_pos_reorder_com.c | 66 + lib_com/ivas_cnst.h | 1552 + lib_com/ivas_cov_smooth.c | 253 + lib_com/ivas_dirac_com.c | 986 + lib_com/ivas_entropy_coder_common.c | 93 + lib_com/ivas_error.h | 167 + lib_com/ivas_error_utils.h | 96 + lib_com/ivas_fb_mixer.c | 1377 + lib_com/ivas_filters.c | 165 + lib_com/ivas_ism_config.c | 492 + lib_com/ivas_masa_com.c | 390 + lib_com/ivas_mc_com.c | 232 + lib_com/ivas_mc_param_com.c | 505 + lib_com/ivas_mcmasa_com.c | 114 + lib_com/ivas_mct_com.c | 204 + lib_com/ivas_mdct_core_com.c | 81 + lib_com/ivas_mdct_imdct.c | 294 + lib_com/ivas_mdft_imdft.c | 305 + lib_com/ivas_pca_tools.c | 1124 + lib_com/ivas_prot.h | 5474 ++ lib_com/ivas_qmetadata_com.c | 648 + lib_com/ivas_qspherical_com.c | 512 + lib_com/ivas_rom_com.c | 10057 ++++ lib_com/ivas_rom_com.h | 409 + lib_com/ivas_sba_config.c | 296 + lib_com/ivas_sns_com.c | 310 + lib_com/ivas_spar_com.c | 2079 + lib_com/ivas_spar_com_quant_util.c | 396 + lib_com/ivas_spar_foa_br_dist.c | 224 + lib_com/ivas_stat_com.h | 759 + lib_com/ivas_stereo_dft_com.c | 252 + lib_com/ivas_stereo_eclvq_com.c | 106 + lib_com/ivas_stereo_ica_com.c | 227 + lib_com/ivas_stereo_mdct_bands_com.c | 249 + lib_com/ivas_stereo_mdct_stereo_com.c | 59 + lib_com/ivas_stereo_psychlpc_com.c | 163 + lib_com/ivas_stereo_td_bit_alloc.c | 738 + lib_com/ivas_tools.c | 1200 + lib_com/ivas_transient_det.c | 326 + lib_com/lag_wind.c | 167 + lib_com/lerp.c | 183 + lib_com/limit_t0.c | 234 + lib_com/logqnorm.c | 200 + lib_com/longarith.c | 183 + lib_com/low_rate_band_att.c | 195 + lib_com/lpc_tools.c | 336 + lib_com/lsf_dec_bfi.c | 298 + lib_com/lsf_msvq_ma.c | 178 + lib_com/lsf_tools.c | 2360 + lib_com/lsp_conv_poly.c | 664 + lib_com/mime.h | 447 + lib_com/modif_fs.c | 901 + lib_com/move.h | 74 + lib_com/mslvq_com.c | 847 + lib_com/nelp.c | 156 + lib_com/options.h | 152 + lib_com/parameter_bitmaping.c | 263 + lib_com/phase_dispersion.c | 158 + lib_com/ppp.c | 116 + lib_com/pred_lt4.c | 159 + lib_com/preemph.c | 71 + lib_com/prot.h | 10042 ++++ lib_com/pvq_com.c | 975 + lib_com/range_com.c | 112 + lib_com/re8_ppv.c | 214 + lib_com/re8_util.c | 439 + lib_com/realft.c | 201 + lib_com/recovernorm.c | 86 + lib_com/reordvct.c | 81 + lib_com/residu.c | 102 + lib_com/rom_com.c | 22380 ++++++++ lib_com/rom_com.h | 1330 + lib_com/stab_est.c | 234 + lib_com/stat_com.h | 688 + lib_com/stat_noise_uv_mod.c | 241 + lib_com/stl.h | 71 + lib_com/swb_bwe_com.c | 1549 + lib_com/swb_bwe_com_hr.c | 323 + lib_com/swb_bwe_com_lr.c | 2113 + lib_com/swb_tbe_com.c | 2066 + lib_com/syn_12k8.c | 72 + lib_com/syn_filt.c | 173 + lib_com/tcq_position_arith.c | 2198 + lib_com/tcx_ltp.c | 1097 + lib_com/tcx_mdct.c | 255 + lib_com/tcx_mdct_window.c | 263 + lib_com/tcx_utils.c | 1048 + lib_com/tec_com.c | 934 + lib_com/tns_base.c | 850 + lib_com/tools.c | 1754 + lib_com/trans_direct.c | 178 + lib_com/trans_inv.c | 897 + lib_com/typedef.h | 129 + lib_com/vlpc_2st_com.c | 90 + lib_com/weight.c | 370 + lib_com/weight_a.c | 109 + lib_com/wi.c | 1704 + lib_com/window.c | 77 + lib_com/window_ola.c | 607 + lib_com/wtda.c | 451 + lib_debug/debug.c | 849 + lib_debug/debug.h | 239 + lib_debug/mem_count.c | 906 + lib_debug/mem_count.h | 104 + lib_debug/memory.c | 187 + lib_debug/segsnr.c | 103 + lib_debug/snr.c | 320 + lib_debug/spar_debug.c | 283 + lib_debug/spar_debug.h | 60 + lib_debug/wmops.c | 503 + lib_debug/wmops.h | 777 + lib_dec/ACcontextMapping_dec.c | 684 + lib_dec/FEC.c | 580 + lib_dec/FEC_HQ_core.c | 1535 + lib_dec/FEC_HQ_phase_ecu.c | 2221 + lib_dec/FEC_adapt_codebook.c | 496 + lib_dec/FEC_clas_estim.c | 803 + lib_dec/FEC_lsf_estim.c | 93 + lib_dec/FEC_pitch_estim.c | 92 + lib_dec/FEC_scale_syn.c | 444 + lib_dec/LD_music_post_filter.c | 769 + lib_dec/TonalComponentDetection.c | 849 + lib_dec/acelp_core_dec.c | 1448 + lib_dec/acelp_core_switch_dec.c | 640 + lib_dec/amr_wb_dec.c | 863 + lib_dec/ari_dec.c | 666 + lib_dec/ari_hm_dec.c | 168 + lib_dec/arith_coder_dec.c | 224 + lib_dec/avq_dec.c | 427 + lib_dec/bass_psfilter.c | 616 + lib_dec/cng_dec.c | 838 + lib_dec/core_dec_init.c | 821 + lib_dec/core_dec_reconf.c | 195 + lib_dec/core_dec_switch.c | 233 + lib_dec/core_switching_dec.c | 1284 + lib_dec/d_gain2p.c | 292 + lib_dec/dec2t32.c | 134 + lib_dec/dec4t64.c | 1014 + lib_dec/dec_LPD.c | 799 + lib_dec/dec_ace.c | 545 + lib_dec/dec_acelp.c | 368 + lib_dec/dec_acelp_tcx_main.c | 488 + lib_dec/dec_amr_wb.c | 173 + lib_dec/dec_gen_voic.c | 299 + lib_dec/dec_higher_acelp.c | 232 + lib_dec/dec_nelp.c | 104 + lib_dec/dec_pit_exc.c | 344 + lib_dec/dec_post.c | 999 + lib_dec/dec_ppp.c | 111 + lib_dec/dec_prm.c | 1134 + lib_dec/dec_tcx.c | 2003 + lib_dec/dec_tran.c | 200 + lib_dec/dec_uv.c | 168 + lib_dec/decision_matrix_dec.c | 563 + lib_dec/dlpc_avq.c | 324 + lib_dec/dlpc_stoch.c | 137 + lib_dec/er_dec_acelp.c | 726 + lib_dec/er_dec_tcx.c | 682 + lib_dec/er_scale_syn.c | 140 + lib_dec/er_sync_exc.c | 335 + lib_dec/er_util.c | 350 + lib_dec/evs_dec.c | 984 + lib_dec/fd_cng_dec.c | 2220 + lib_dec/gain_dec.c | 699 + lib_dec/gaus_dec.c | 268 + lib_dec/gs_dec.c | 731 + lib_dec/gs_dec_amr_wb.c | 433 + lib_dec/hdecnrm.c | 403 + lib_dec/hf_synth.c | 1174 + lib_dec/hq_classifier_dec.c | 106 + lib_dec/hq_conf_fec.c | 70 + lib_dec/hq_core_dec.c | 629 + lib_dec/hq_env_dec.c | 202 + lib_dec/hq_hr_dec.c | 302 + lib_dec/hq_lr_dec.c | 1398 + lib_dec/igf_dec.c | 1590 + lib_dec/igf_scf_dec.c | 330 + lib_dec/init_dec.c | 799 + lib_dec/inov_dec.c | 195 + lib_dec/ivas_agc_dec.c | 330 + lib_dec/ivas_allrad_dec.c | 207 + lib_dec/ivas_binauralRenderer.c | 811 + lib_dec/ivas_binaural_reverb.c | 498 + lib_dec/ivas_core_dec.c | 872 + lib_dec/ivas_cpe_dec.c | 1040 + lib_dec/ivas_crend.c | 1138 + lib_dec/ivas_dec.c | 582 + lib_dec/ivas_decision_matrix_dec.c | 469 + lib_dec/ivas_dirac_dec.c | 3543 ++ lib_dec/ivas_dirac_dec_binaural_functions.c | 1781 + lib_dec/ivas_dirac_decorr_dec.c | 780 + lib_dec/ivas_dirac_onsets_dec.c | 130 + lib_dec/ivas_dirac_output_synthesis_cov.c | 1053 + lib_dec/ivas_dirac_output_synthesis_dec.c | 2129 + lib_dec/ivas_efap.c | 2228 + lib_dec/ivas_entropy_decoder.c | 560 + lib_dec/ivas_hrtf.c | 261 + lib_dec/ivas_init_dec.c | 2079 + lib_dec/ivas_ism_metadata_dec.c | 540 + lib_dec/ivas_ism_param_dec.c | 1079 + lib_dec/ivas_ism_renderer.c | 224 + lib_dec/ivas_lfe_dec.c | 464 + lib_dec/ivas_lfe_plc.c | 540 + lib_dec/ivas_limiter.c | 382 + lib_dec/ivas_ls_custom_dec.c | 122 + lib_dec/ivas_masa_dec.c | 1359 + lib_dec/ivas_mc_param_dec.c | 2361 + lib_dec/ivas_mct_core_dec.c | 275 + lib_dec/ivas_mct_dec.c | 621 + lib_dec/ivas_mct_dec_mct.c | 340 + lib_dec/ivas_mdct_core_dec.c | 1180 + lib_dec/ivas_mono_dmx_renderer.c | 168 + lib_dec/ivas_objectRenderer.c | 414 + lib_dec/ivas_objectRenderer_hrFilt.c | 1339 + lib_dec/ivas_objectRenderer_mix.c | 345 + lib_dec/ivas_objectRenderer_sfx.c | 1447 + lib_dec/ivas_objectRenderer_sources.c | 741 + lib_dec/ivas_objectRenderer_vec.c | 184 + lib_dec/ivas_orient_trk.c | 313 + lib_dec/ivas_out_setup_conversion.c | 1208 + lib_dec/ivas_output_init.c | 612 + lib_dec/ivas_pca_dec.c | 309 + lib_dec/ivas_post_proc.c | 583 + lib_dec/ivas_qmetadata_dec.c | 3276 ++ lib_dec/ivas_qspherical_dec.c | 102 + lib_dec/ivas_range_uni_dec.c | 511 + lib_dec/ivas_render_config.c | 122 + lib_dec/ivas_reverb.c | 1513 + lib_dec/ivas_reverb_delay_line.c | 255 + lib_dec/ivas_reverb_fft_filter.c | 420 + lib_dec/ivas_reverb_filter_design.c | 783 + lib_dec/ivas_reverb_iir_filter.c | 148 + lib_dec/ivas_reverb_utils.c | 486 + lib_dec/ivas_rom_TdBinauralRenderer.c | 12458 +++++ lib_dec/ivas_rom_TdBinauralRenderer.h | 69 + lib_dec/ivas_rom_binauralRenderer.c | 44077 ++++++++++++++++ lib_dec/ivas_rom_binauralRenderer.h | 77 + lib_dec/ivas_rom_binaural_crend_head.c | 6911 +++ lib_dec/ivas_rom_binaural_crend_head.h | 187 + lib_dec/ivas_rom_dec.c | 1148 + lib_dec/ivas_rom_dec.h | 205 + lib_dec/ivas_rotation.c | 984 + lib_dec/ivas_sba_dec.c | 989 + lib_dec/ivas_sba_dirac_stereo_dec.c | 615 + lib_dec/ivas_sba_rendering.c | 510 + lib_dec/ivas_sce_dec.c | 440 + lib_dec/ivas_sns_dec.c | 210 + lib_dec/ivas_spar_decoder.c | 181 + lib_dec/ivas_spar_foa_dec.c | 1139 + lib_dec/ivas_spar_foa_md_dec.c | 2751 + lib_dec/ivas_stat_dec.h | 2017 + lib_dec/ivas_stereo_adapt_GR_dec.c | 505 + lib_dec/ivas_stereo_cng_dec.c | 1016 + lib_dec/ivas_stereo_dft_dec.c | 3052 ++ lib_dec/ivas_stereo_dft_dec_dmx.c | 347 + lib_dec/ivas_stereo_dft_plc.c | 387 + lib_dec/ivas_stereo_eclvq_dec.c | 225 + lib_dec/ivas_stereo_esf_dec.c | 128 + lib_dec/ivas_stereo_ica_dec.c | 378 + lib_dec/ivas_stereo_icbwe_dec.c | 843 + lib_dec/ivas_stereo_mdct_core_dec.c | 683 + lib_dec/ivas_stereo_mdct_stereo_dec.c | 680 + lib_dec/ivas_stereo_switching_dec.c | 1835 + lib_dec/ivas_stereo_td_dec.c | 556 + lib_dec/ivas_stereo_td_low_rate_dec.c | 317 + lib_dec/ivas_svd_dec.c | 921 + lib_dec/ivas_tcx_core_dec.c | 964 + lib_dec/ivas_td_decorr.c | 425 + lib_dec/ivas_vbap.c | 1804 + lib_dec/jbm_jb4_circularbuffer.c | 473 + lib_dec/jbm_jb4_circularbuffer.h | 76 + lib_dec/jbm_jb4_inputbuffer.c | 361 + lib_dec/jbm_jb4_inputbuffer.h | 76 + lib_dec/jbm_jb4_jmf.c | 327 + lib_dec/jbm_jb4_jmf.h | 61 + lib_dec/jbm_jb4sb.c | 1510 + lib_dec/jbm_jb4sb.h | 107 + lib_dec/jbm_pcmdsp_apa.c | 1343 + lib_dec/jbm_pcmdsp_apa.h | 122 + lib_dec/jbm_pcmdsp_fifo.c | 208 + lib_dec/jbm_pcmdsp_fifo.h | 81 + lib_dec/jbm_pcmdsp_similarityestimation.c | 158 + lib_dec/jbm_pcmdsp_similarityestimation.h | 140 + lib_dec/jbm_pcmdsp_window.c | 126 + lib_dec/jbm_pcmdsp_window.h | 66 + lib_dec/lead_deindexing.c | 283 + lib_dec/lib_dec.c | 2057 + lib_dec/lib_dec.h | 350 + lib_dec/lp_exc_d.c | 103 + lib_dec/lsf_dec.c | 824 + lib_dec/lsf_msvq_ma_dec.c | 282 + lib_dec/nelp_dec.c | 222 + lib_dec/peak_vq_dec.c | 545 + lib_dec/pit_dec.c | 842 + lib_dec/pitch_extr.c | 351 + lib_dec/post_dec.c | 479 + lib_dec/ppp_dec.c | 183 + lib_dec/pvq_core_dec.c | 509 + lib_dec/pvq_decode.c | 112 + lib_dec/range_dec.c | 248 + lib_dec/re8_dec.c | 108 + lib_dec/rom_dec.c | 247 + lib_dec/rom_dec.h | 71 + lib_dec/rst_dec.c | 98 + lib_dec/stat_dec.h | 1350 + lib_dec/stat_noise_uv_dec.c | 112 + lib_dec/swb_bwe_dec.c | 792 + lib_dec/swb_bwe_dec_hr.c | 814 + lib_dec/swb_bwe_dec_lr.c | 311 + lib_dec/swb_tbe_dec.c | 2366 + lib_dec/syn_outp.c | 138 + lib_dec/tcq_core_dec.c | 476 + lib_dec/tcx_utils_dec.c | 303 + lib_dec/tns_base_dec.c | 143 + lib_dec/tonalMDCTconcealment.c | 1115 + lib_dec/transition_dec.c | 769 + lib_dec/updt_dec.c | 760 + lib_dec/vlpc_1st_dec.c | 68 + lib_dec/vlpc_2st_dec.c | 77 + lib_dec/voiced_dec.c | 278 + lib_dec/waveadjust_fec_dec.c | 893 + lib_enc/ACcontextMapping_enc.c | 1532 + lib_enc/FEC_enc.c | 275 + lib_enc/SNR_calc.c | 261 + lib_enc/acelp_core_enc.c | 756 + lib_enc/acelp_core_switch_enc.c | 484 + lib_enc/acelp_enc_util.c | 79 + lib_enc/amr_wb_enc.c | 578 + lib_enc/analy_lp.c | 186 + lib_enc/analy_sp.c | 413 + lib_enc/ari_enc.c | 457 + lib_enc/ari_hm_enc.c | 618 + lib_enc/arith_coder_enc.c | 685 + lib_enc/avq_cod.c | 599 + lib_enc/bass_psfilter_enc.c | 260 + lib_enc/bw_detect.c | 701 + lib_enc/cng_enc.c | 1169 + lib_enc/cod2t32.c | 348 + lib_enc/cod4t64.c | 1020 + lib_enc/cod4t64_fast.c | 754 + lib_enc/cod_ace.c | 441 + lib_enc/cod_tcx.c | 2201 + lib_enc/cod_uv.c | 90 + lib_enc/comvad_decision.c | 875 + lib_enc/cor_shif.c | 72 + lib_enc/core_enc_2div.c | 246 + lib_enc/core_enc_init.c | 768 + lib_enc/core_enc_ol.c | 1192 + lib_enc/core_enc_reconf.c | 241 + lib_enc/core_enc_switch.c | 198 + lib_enc/core_enc_updt.c | 205 + lib_enc/core_switching_enc.c | 567 + lib_enc/corr_xh.c | 77 + lib_enc/decision_matrix_enc.c | 720 + lib_enc/detect_transient.c | 264 + lib_enc/diffcod.c | 152 + lib_enc/dtx.c | 885 + lib_enc/enc_acelp.c | 1521 + lib_enc/enc_acelp_tcx_main.c | 134 + lib_enc/enc_acelpx.c | 501 + lib_enc/enc_amr_wb.c | 241 + lib_enc/enc_gain.c | 271 + lib_enc/enc_gen_voic.c | 327 + lib_enc/enc_gen_voic_rf.c | 401 + lib_enc/enc_higher_acelp.c | 394 + lib_enc/enc_nelp.c | 151 + lib_enc/enc_pit_exc.c | 417 + lib_enc/enc_ppp.c | 208 + lib_enc/enc_prm.c | 924 + lib_enc/enc_tran.c | 345 + lib_enc/enc_uv.c | 246 + lib_enc/energy.c | 287 + lib_enc/eval_pit_contr.c | 368 + lib_enc/evs_enc.c | 717 + lib_enc/ext_sig_ana.c | 477 + lib_enc/fd_cng_enc.c | 1277 + lib_enc/find_tar.c | 123 + lib_enc/find_tilt.c | 216 + lib_enc/find_uv.c | 491 + lib_enc/find_wsp.c | 98 + lib_enc/frame_spec_dif_cor_rate.c | 97 + lib_enc/gain_enc.c | 1048 + lib_enc/gaus_enc.c | 463 + lib_enc/gp_clip.c | 253 + lib_enc/gs_enc.c | 675 + lib_enc/guided_plc_enc.c | 386 + lib_enc/hf_cod_amrwb.c | 343 + lib_enc/hq_classifier_enc.c | 628 + lib_enc/hq_core_enc.c | 332 + lib_enc/hq_env_enc.c | 564 + lib_enc/hq_hr_enc.c | 258 + lib_enc/hq_lr_enc.c | 1779 + lib_enc/hvq_enc.c | 163 + lib_enc/igf_enc.c | 1944 + lib_enc/igf_scf_enc.c | 385 + lib_enc/init_enc.c | 895 + lib_enc/inov_enc.c | 389 + lib_enc/isf_enc_amr_wb.c | 526 + lib_enc/ivas_agc_enc.c | 529 + lib_enc/ivas_core_enc.c | 529 + lib_enc/ivas_core_pre_proc.c | 802 + lib_enc/ivas_core_pre_proc_front.c | 904 + lib_enc/ivas_cpe_enc.c | 1066 + lib_enc/ivas_decision_matrix_enc.c | 514 + lib_enc/ivas_dirac_enc.c | 877 + lib_enc/ivas_enc.c | 375 + lib_enc/ivas_enc_cov_handler.c | 330 + lib_enc/ivas_entropy_coder.c | 575 + lib_enc/ivas_front_vad.c | 503 + lib_enc/ivas_init_enc.c | 989 + lib_enc/ivas_ism_enc.c | 281 + lib_enc/ivas_ism_metadata_enc.c | 760 + lib_enc/ivas_ism_param_enc.c | 434 + lib_enc/ivas_lfe_enc.c | 417 + lib_enc/ivas_masa_enc.c | 1722 + lib_enc/ivas_mc_param_enc.c | 1674 + lib_enc/ivas_mcmasa_enc.c | 1565 + lib_enc/ivas_mct_core_enc.c | 591 + lib_enc/ivas_mct_enc.c | 550 + lib_enc/ivas_mct_enc_mct.c | 917 + lib_enc/ivas_mdct_core_enc.c | 1363 + lib_enc/ivas_pca_enc.c | 601 + lib_enc/ivas_qmetadata_enc.c | 4889 ++ lib_enc/ivas_qspherical_enc.c | 644 + lib_enc/ivas_range_uni_enc.c | 365 + lib_enc/ivas_rom_enc.c | 878 + lib_enc/ivas_rom_enc.h | 133 + lib_enc/ivas_sba_enc.c | 531 + lib_enc/ivas_sce_enc.c | 368 + lib_enc/ivas_sns_enc.c | 549 + lib_enc/ivas_spar_encoder.c | 237 + lib_enc/ivas_spar_foa_enc.c | 804 + lib_enc/ivas_spar_foa_md_enc.c | 1937 + lib_enc/ivas_stat_enc.h | 1087 + lib_enc/ivas_stereo_adapt_GR_enc.c | 590 + lib_enc/ivas_stereo_classifier.c | 1219 + lib_enc/ivas_stereo_cng_enc.c | 487 + lib_enc/ivas_stereo_dft_enc.c | 3430 ++ lib_enc/ivas_stereo_dft_enc_itd.c | 1598 + lib_enc/ivas_stereo_dft_td_itd.c | 425 + lib_enc/ivas_stereo_dmx_evs.c | 812 + lib_enc/ivas_stereo_eclvq_enc.c | 959 + lib_enc/ivas_stereo_ica_enc.c | 1400 + lib_enc/ivas_stereo_icbwe_enc.c | 874 + lib_enc/ivas_stereo_mdct_core_enc.c | 447 + lib_enc/ivas_stereo_mdct_igf_enc.c | 271 + lib_enc/ivas_stereo_mdct_stereo_enc.c | 1240 + lib_enc/ivas_stereo_switching_enc.c | 830 + lib_enc/ivas_stereo_td_analysis.c | 1454 + lib_enc/ivas_stereo_td_enc.c | 825 + lib_enc/ivas_stereo_td_low_rate_enc.c | 353 + lib_enc/ivas_tcx_core_enc.c | 908 + lib_enc/lead_indexing.c | 211 + lib_enc/lib_enc.c | 2073 + lib_enc/lib_enc.h | 349 + lib_enc/long_enr.c | 156 + lib_enc/lp_exc_e.c | 302 + lib_enc/lsf_enc.c | 2132 + lib_enc/lsf_msvq_ma_enc.c | 553 + lib_enc/ltd_stable.c | 133 + lib_enc/mdct_classifier.c | 369 + lib_enc/mdct_selector.c | 292 + lib_enc/mslvq_enc.c | 846 + lib_enc/multi_harm.c | 329 + lib_enc/nelp_enc.c | 447 + lib_enc/nois_est.c | 998 + lib_enc/noise_adjust.c | 119 + lib_enc/normalizecoefs.c | 74 + lib_enc/peak_vq_enc.c | 663 + lib_enc/pit_enc.c | 1388 + lib_enc/pitch_ol.c | 992 + lib_enc/pitch_ol2.c | 337 + lib_enc/plc_enc_ext.c | 137 + lib_enc/ppp_enc.c | 470 + lib_enc/pre_proc.c | 964 + lib_enc/pvq_core_enc.c | 567 + lib_enc/pvq_encode.c | 211 + lib_enc/q_gain2p.c | 390 + lib_enc/qlpc_avq.c | 385 + lib_enc/qlpc_stoch.c | 340 + lib_enc/range_enc.c | 329 + lib_enc/re8_cod.c | 89 + lib_enc/reordernorm.c | 88 + lib_enc/rom_enc.c | 1026 + lib_enc/rom_enc.h | 209 + lib_enc/rst_enc.c | 94 + lib_enc/set_impulse.c | 342 + lib_enc/setmodeindex.c | 85 + lib_enc/sig_clas.c | 418 + lib_enc/spec_center.c | 94 + lib_enc/spec_flatness.c | 131 + lib_enc/speech_music_classif.c | 3087 ++ lib_enc/stat_enc.h | 1575 + lib_enc/stat_noise_uv_enc.c | 107 + lib_enc/subband_fft.c | 213 + lib_enc/swb_bwe_enc.c | 1863 + lib_enc/swb_bwe_enc_hr.c | 508 + lib_enc/swb_bwe_enc_lr.c | 706 + lib_enc/swb_pre_proc.c | 742 + lib_enc/swb_tbe_enc.c | 2858 + lib_enc/tcq_core_enc.c | 505 + lib_enc/tcx_ltp_enc.c | 596 + lib_enc/tcx_utils_enc.c | 1608 + lib_enc/tfa_enc.c | 120 + lib_enc/tns_base_enc.c | 485 + lib_enc/transient_detection.c | 826 + lib_enc/transition_enc.c | 1064 + lib_enc/update_decision.c | 287 + lib_enc/updt_enc.c | 469 + lib_enc/updt_tar.c | 68 + lib_enc/vad.c | 1097 + lib_enc/vad_param_updt.c | 176 + lib_enc/vad_proc.c | 291 + lib_enc/vbr_average_rate.c | 202 + lib_enc/vlpc_1st_cod.c | 163 + lib_enc/vlpc_2st_cod.c | 147 + lib_enc/voiced_enc.c | 1180 + lib_enc/waveadjust_fec_cod.c | 73 + lib_util/audio_file_reader.c | 198 + lib_util/audio_file_reader.h | 68 + lib_util/audio_file_writer.c | 172 + lib_util/audio_file_writer.h | 61 + lib_util/bitstream_reader.c | 331 + lib_util/bitstream_reader.h | 72 + lib_util/bitstream_writer.c | 252 + lib_util/bitstream_writer.h | 67 + lib_util/cmdl_tools.c | 80 + lib_util/cmdl_tools.h | 44 + lib_util/evs_rtp_payload.c | 305 + lib_util/evs_rtp_payload.h | 202 + lib_util/g192.c | 558 + lib_util/g192.h | 100 + lib_util/head_rotation_file_reader.c | 212 + lib_util/head_rotation_file_reader.h | 88 + lib_util/hrtf_file_reader.c | 375 + lib_util/hrtf_file_reader.h | 75 + lib_util/ism_file_reader.c | 161 + lib_util/ism_file_reader.h | 86 + lib_util/ism_file_writer.c | 178 + lib_util/ism_file_writer.h | 70 + lib_util/ivas_prerenderer.c | 1733 + lib_util/ivas_prerenderer.h | 190 + lib_util/ivas_rom_prerenderer.c | 62 + lib_util/ivas_rom_prerenderer.h | 53 + lib_util/jbm_file_writer.c | 293 + lib_util/jbm_file_writer.h | 86 + lib_util/ls_custom_file_reader.c | 404 + lib_util/ls_custom_file_reader.h | 105 + lib_util/masa_file_reader.c | 428 + lib_util/masa_file_reader.h | 85 + lib_util/masa_file_writer.c | 357 + lib_util/masa_file_writer.h | 63 + lib_util/mime_io.c | 658 + lib_util/mime_io.h | 75 + lib_util/render_config_reader.c | 478 + lib_util/render_config_reader.h | 66 + lib_util/rtpdump.c | 383 + lib_util/rtpdump.h | 107 + lib_util/tinywavein_c.h | 556 + lib_util/tinywaveout_c.h | 592 + readme.txt | 401 + scripts/IvasBuildAndRun.py | 141 + scripts/IvasBuildAndRunChecks.py | 201 + scripts/README.md | 644 + scripts/batch_comp_audio.py | 262 + scripts/check-format.sh | 209 + scripts/config/ivas_modes.json | 2753 + scripts/config/ivas_modes_debug.json | 19179 +++++++ scripts/config/self_test.json | 5 + scripts/config/self_test.prm | 821 + scripts/config/self_test_evs.prm | 236 + .../dly_error_profile_1.dat | 3 + .../dly_error_profile_10.dat | 3 + .../dly_error_profile_11.dat | 3 + .../dly_error_profile_2.dat | 3 + .../dly_error_profile_3.dat | 3 + .../dly_error_profile_4.dat | 3 + .../dly_error_profile_5.dat | 3 + .../dly_error_profile_6.dat | 3 + .../dly_error_profile_7.dat | 3 + .../dly_error_profile_8.dat | 3 + .../dly_error_profile_9.dat | 3 + scripts/find_unused_symbols.sh | 104 + scripts/generate_test_items.py | 263 + scripts/ivas_pytests/build_all.bat | 7 + scripts/ivas_pytests/build_all.sh | 4 + scripts/ivas_pytests/clean_all.bat | 7 + scripts/ivas_pytests/clean_all.sh | 3 + scripts/ivas_pytests/conftest.py | 423 + scripts/ivas_pytests/disable_lib_com_optim.py | 23 + scripts/ivas_pytests/endofline.py | 26 + scripts/ivas_pytests/self_test_b.py | 378 + scripts/ivas_pytests/tests/cmp_custom.py | 199 + scripts/ivas_pytests/tests/il2mm.py | 61 + scripts/ivas_pytests/tests/requirements.txt | 4 + .../system_tests/test_spar_foa_bs_dec.py | 186 + .../system_tests/test_spar_foa_bs_dec_plc.py | 263 + .../system_tests/test_spar_foa_bs_enc.py | 682 + .../v16/Solution.VC.db-wal | 0 .../tests/unit_tests/crend/build.bat | 1 + .../tests/unit_tests/crend/clean.bat | 1 + .../unit_tests/crend/ivas_crend_io_parse.h | 124 + .../unit_tests/crend/ivas_crend_public.h | 85 + .../unit_tests/crend/ivas_crend_unit_test.c | 725 + .../unit_tests/crend/ivas_crend_unit_test.h | 57 + .../unit_tests/crend/ivas_crend_unit_test.sln | 49 + .../crend/ivas_crend_unit_test.vcxproj | 192 + .../unit_tests/crend/ivas_crend_utest_utils.c | 1815 + .../unit_tests/crend/ivas_dec_parse_io.h | 133 + .../tests/unit_tests/crend/ivas_prox_mix.c | 229 + .../tests/unit_tests/crend/ivas_prox_mix.h | 71 + .../tests/unit_tests/crend/ivas_result_t.h | 56 + .../tests/unit_tests/test_crend_unittest.py | 576 + scripts/ls_layouts/16ch_8+4+4.txt | 3 + scripts/ls_layouts/4d0.txt | 2 + scripts/ls_layouts/4d4.txt | 2 + scripts/ls_layouts/cicp1.txt | 2 + scripts/ls_layouts/cicp12.txt | 3 + scripts/ls_layouts/cicp13.txt | 3 + scripts/ls_layouts/cicp14.txt | 3 + scripts/ls_layouts/cicp15.txt | 3 + scripts/ls_layouts/cicp16.txt | 3 + scripts/ls_layouts/cicp17.txt | 3 + scripts/ls_layouts/cicp18.txt | 3 + scripts/ls_layouts/cicp19.txt | 3 + scripts/ls_layouts/cicp2.txt | 2 + scripts/ls_layouts/cicp20.txt | 3 + scripts/ls_layouts/cicp3.txt | 2 + scripts/ls_layouts/cicp4.txt | 2 + scripts/ls_layouts/cicp5.txt | 2 + scripts/ls_layouts/cicp6.txt | 3 + scripts/ls_layouts/cicp7.txt | 3 + scripts/ls_layouts/custom1.txt | 2 + scripts/ls_layouts/itu_0+2+0.txt | 2 + scripts/ls_layouts/itu_0+5+0.txt | 3 + scripts/ls_layouts/itu_0+7+0.txt | 3 + scripts/ls_layouts/itu_2+5+0.txt | 3 + scripts/ls_layouts/itu_3+7+0.txt | 3 + scripts/ls_layouts/itu_4+5+0.txt | 3 + scripts/ls_layouts/itu_4+5+1.txt | 3 + scripts/ls_layouts/itu_4+7+0.txt | 3 + scripts/ls_layouts/itu_4+9+0.txt | 3 + scripts/ls_layouts/itu_9+10+3.txt | 3 + scripts/ls_layouts/t_design_1.txt | 2 + scripts/ls_layouts/t_design_2.txt | 2 + scripts/ls_layouts/t_design_3.txt | 2 + scripts/ls_layouts/t_design_4.txt | 2 + .../ls_layouts/test_anglewrapping_dedupe.txt | 3 + scripts/parse_options_h.sh | 167 + scripts/parse_selftest_summary.py | 54 + scripts/prepare_instrumentation.sh | 113 + scripts/prerenderer/Makefile | 175 + .../Workspace_msvc_prerenderer.sln | 48 + .../Workspace_msvc/prerenderer.vcxproj | 189 + .../prerenderer.vcxproj.filters | 50 + scripts/prerenderer/prerenderer.c | 1547 + .../IVAS_ISM_metadata_-30_0.csv | 50 + .../IVAS_ISM_metadata_0_0.csv | 50 + .../IVAS_ISM_metadata_30_0.csv | 50 + .../IVAS_ISM_metadata_circle.csv | 50 + .../ism1_ivas_mtdt_config.txt | 5 + .../ism1_shorthand_config.txt | 55 + .../ism2_ivas_mtdt_config.txt | 8 + .../ism2_shorthand_config.txt | 59 + .../ism3_ivas_mtdt_config.txt | 16 + .../ism3_shorthand_config.txt | 67 + .../ism4_ivas_mtdt_config.txt | 20 + .../ism4_shorthand_config.txt | 71 + .../mixed_ivas_mtdt_config.txt | 14 + .../mixed_ivas_mtdt_gain_config.txt | 16 + .../mixed_shorthand_config.txt | 16 + .../mixed_shorthand_gain_config.txt | 18 + .../mixed_shorthand_limiter_config.txt | 20 + .../prerenderer_config_format_readme.txt | 141 + ...BRIR_officialMPEG_222UC_VIRTUALLS_SBA3.mat | 3 + .../IIS_BRIR_officialMPEG_222UC_combined.mat | 3 + .../IIS_BRIR_officialMPEG_222UC_full.mat | 3 + .../HRIRs_mat/ORANGE_HRIR_53_48000_SBA3.mat | 3 + .../ORANGE_HRIR_53_48000_combined.mat | 3 + .../HRIRs_mat/ORANGE_HRIR_53_48000_full.mat | 3 + scripts/pyaudio3dtools/__init__.py | 52 + scripts/pyaudio3dtools/audio3dtools.py | 281 + scripts/pyaudio3dtools/audioarray.py | 409 + scripts/pyaudio3dtools/audiofile.py | 742 + scripts/pyaudio3dtools/binauralRef.py | 342 + scripts/pyaudio3dtools/binauralrenderer.py | 329 + scripts/pyaudio3dtools/hoadecoder.py | 162 + scripts/pyaudio3dtools/prerenderer.py | 255 + .../pyaudio3dtools/quaternions/__init__.py | 44 + .../pyaudio3dtools/quaternions/functions.py | 159 + scripts/pyaudio3dtools/rotateHOA.py | 253 + scripts/pyaudio3dtools/rotateISM.py | 79 + scripts/pyaudio3dtools/spatialaudioconvert.py | 389 + scripts/pyaudio3dtools/spatialaudioformat.py | 428 + scripts/pyaudio3dtools/spatialmetadata.py | 450 + scripts/pyivastest/IvasBaseClass.py | 428 + scripts/pyivastest/IvasModeAnalyzer.py | 998 + scripts/pyivastest/IvasModeCollector.py | 543 + scripts/pyivastest/IvasModeRunner.py | 1787 + scripts/pyivastest/IvasScriptsCommon.py | 722 + scripts/pyivastest/IvasSvnBuilder.py | 1500 + scripts/pyivastest/__init__.py | 51 + scripts/pyivastest/constants.py | 72 + scripts/pyivastest/ivas_svn.py | 188 + scripts/pyprocessing/__init__.py | 45 + scripts/pyprocessing/evs.py | 245 + scripts/pyprocessing/ivas.py | 208 + scripts/pyprocessing/prepost_processing.py | 225 + scripts/pyprocessing/processing.py | 123 + scripts/pyprocessing/processing_configs.py | 375 + scripts/pyprocessing/utils.py | 148 + scripts/runIvasCodec.py | 149 + scripts/self_test.py | 1957 + scripts/switchPaths/sw_13k2_512k.bin | 3 + scripts/switchPaths/sw_13k2_to_128k_10fr.bin | 3 + scripts/switchPaths/sw_amrwb.bin | 3 + scripts/switchPaths/sw_amrwb_evs.bin | 3 + scripts/switchPaths/sw_amrwb_evs2.bin | 3 + scripts/switchPaths/sw_highest.bin | 3 + scripts/switchPaths/sw_nb1.bin | 3 + scripts/switchPaths/sw_nb5.bin | 3 + scripts/switchPaths/sw_swb1.bin | 3 + scripts/switchPaths/sw_wb1.bin | 3 + scripts/switchPaths/sw_wb5.bin | 3 + scripts/switchPaths/swb_high1.bin | 3 + scripts/switchPaths/swb_low1.bin | 3 + scripts/switchPaths/wb_high1.bin | 3 + scripts/switchPaths/wb_low1.bin | 3 + .../Orange_53/hrfilter_model_v002_16kHz.bin | 3 + .../Orange_53/hrfilter_model_v002_32kHz.bin | 3 + .../Orange_53/hrfilter_model_v002_48kHz.bin | 3 + .../metadata/create_metadata_v3.m | 433 + .../metadata/csv/t01_ch1.csv | 1000 + .../metadata/csv/t02_ch1.csv | 1000 + .../metadata/csv/t03_ch1.csv | 1000 + .../metadata/csv/t04_ch1.csv | 1000 + .../metadata/csv/t05_ch1.csv | 1000 + .../metadata/csv/t05_ch2.csv | 1000 + .../metadata/csv/t05_ch3.csv | 1000 + .../metadata/csv/t05_ch4.csv | 1000 + .../metadata/csv/t06_ch1.csv | 1000 + .../metadata/csv/t06_ch2.csv | 1000 + .../metadata/csv/t06_ch3.csv | 1000 + .../metadata/csv/t07_ch1.csv | 1000 + .../metadata/csv/t08_ch1.csv | 1000 + .../metadata/csv/t09_ch1.csv | 1000 + .../metadata/csv/t10_ch1.csv | 1000 + .../metadata/csv/t11_ch1.csv | 1000 + .../metadata/csv/t11_ch2.csv | 1000 + .../object_renderer_standalone/Makefile | 180 + .../object_renderer_standalone.sln | 60 + .../object_renderer_standalone.vcxproj | 118 + ...object_renderer_standalone.vcxproj.filters | 22 + .../renderer_standalone.c | 602 + .../td_object_renderer_readme.txt | 71 + scripts/testv/FEC_6pct.bin | 3 + scripts/testv/bwidth_cntl.txt | 6 + scripts/testv/config_renderer.cfg | 32 + scripts/testv/headrot.csv | 8100 +++ scripts/testv/headrot_case00_3000_q.csv | 3000 ++ scripts/testv/headrot_case01_3000_q.csv | 3000 ++ scripts/testv/headrot_case02_3000_q.csv | 3000 ++ scripts/testv/headrot_case03_3000_q.csv | 3000 ++ scripts/testv/just_reverb.cfg | 2 + scripts/testv/ls_setup_16ch_8+4+4.txt | 3 + scripts/testv/stv16c.pcm | 0 scripts/testv/stv16n.pcm | 0 scripts/testv/stv1ISM48s.pcm | 0 scripts/testv/stv2ISM48s.pcm | 0 scripts/testv/stv2OA32c.pcm | 0 scripts/testv/stv2OA48c.pcm | 0 scripts/testv/stv32c.pcm | 0 scripts/testv/stv32n.pcm | 0 scripts/testv/stv3ISM48s.pcm | 0 scripts/testv/stv3OA32c.pcm | 0 scripts/testv/stv3OA48c.pcm | 0 scripts/testv/stv48c.pcm | 0 scripts/testv/stv4ISM48s.pcm | 0 scripts/testv/stv512MC48c.pcm | 0 scripts/testv/stv51MC48c.pcm | 0 scripts/testv/stv714MC48c.pcm | 0 scripts/testv/stv8c.pcm | 0 scripts/testv/stv8n.pcm | 0 scripts/testv/stvFOA16c.pcm | 0 scripts/testv/stvFOA32c.pcm | 0 scripts/testv/stvFOA48c.pcm | 0 scripts/testv/stvISM1.csv | 1500 + scripts/testv/stvISM2.csv | 1500 + scripts/testv/stvISM3.csv | 1500 + scripts/testv/stvISM4.csv | 1500 + scripts/testv/stvST16c.pcm | 0 scripts/testv/stvST16n.pcm | 0 scripts/testv/stvST32c.pcm | 0 scripts/testv/stvST32n.pcm | 0 scripts/testv/stvST48c.pcm | 0 scripts/testv/stvST48n.pcm | 0 scripts/testv/stv_IVASMASA_1dir1TC.met | 3 + scripts/testv/stv_IVASMASA_1dir1TC.pcm | 0 scripts/testv/stv_IVASMASA_1dir1TC_DTX.met | 3 + scripts/testv/stv_IVASMASA_1dir1TC_DTX.pcm | 0 scripts/testv/stv_IVASMASA_1dir2TC.met | 3 + scripts/testv/stv_IVASMASA_1dir2TC.pcm | 0 scripts/testv/stv_IVASMASA_1dir2TC_DTX.met | 3 + scripts/testv/stv_IVASMASA_1dir2TC_DTX.pcm | 0 scripts/testv/stv_IVASMASA_2dir1TC.met | 3 + scripts/testv/stv_IVASMASA_2dir1TC.pcm | 0 scripts/testv/stv_IVASMASA_2dir2TC.met | 3 + scripts/testv/stv_IVASMASA_2dir2TC.pcm | 0 .../azi+2-ele+2-every-100-frames-Euler.csv | 12000 +++++ .../azi+2-ele+2-every-100-frames.csv | 12000 +++++ .../trajectories/circle-with-up-down-15s.csv | 3000 ++ scripts/trajectories/const000.csv | 4 + scripts/trajectories/const030.csv | 4 + scripts/trajectories/const090.csv | 4 + scripts/trajectories/const120.csv | 4 + scripts/trajectories/const180.csv | 4 + scripts/trajectories/const240.csv | 4 + scripts/trajectories/const250.csv | 4 + scripts/trajectories/const270.csv | 4 + scripts/trajectories/const320.csv | 4 + scripts/trajectories/full-circle-15s.csv | 3000 ++ .../trajectories/full-circle-T15.0-w0.0.csv | 3000 ++ .../trajectories/full-circle-T15.0-w0.2.csv | 3000 ++ .../trajectories/full-circle-T15.0-w0.4.csv | 3000 ++ .../trajectories/full-circle-T15.0-w1.0.csv | 3000 ++ .../trajectories/full_circle_in_15s-Euler.csv | 3000 ++ scripts/trajectories/full_circle_in_15s.csv | 3000 ++ .../half-circle-front-over-top-15s.csv | 3000 ++ .../trajectories/half-circle-over-top-15s.csv | 3000 ++ scripts/trajectories/headrot-1.5s-Euler.csv | 8100 +++ scripts/trajectories/headrot-1.5s.csv | 8100 +++ scripts/trajectories/headrot-15s.csv | 8100 +++ .../linear-ypr-T15.0-w0.1-Euler.csv | 3000 ++ .../trajectories/linear-ypr-T15.0-w0.1.csv | 3000 ++ .../trajectories/rotate_yaw_pitch_roll1.csv | 2401 + .../trajectories/rotate_yaw_pitch_roll2.csv | 2401 + scripts/wmc_tool.exe | 3 + work_in_progress/IVAS-MP-HOA.zip | 3 + work_in_progress/readme.txt | 38 + 930 files changed, 681228 insertions(+) create mode 100644 .clang-format create mode 100644 CMakeLists.txt create mode 100644 Makefile create mode 100644 Workspace_msvc/Workspace_msvc.sln create mode 100644 Workspace_msvc/decoder.vcxproj create mode 100644 Workspace_msvc/encoder.vcxproj create mode 100644 Workspace_msvc/lib_com.vcxproj create mode 100644 Workspace_msvc/lib_com.vcxproj.filters create mode 100644 Workspace_msvc/lib_debug.vcxproj create mode 100644 Workspace_msvc/lib_dec.vcxproj create mode 100644 Workspace_msvc/lib_dec.vcxproj.filters create mode 100644 Workspace_msvc/lib_enc.vcxproj create mode 100644 Workspace_msvc/lib_enc.vcxproj.filters create mode 100644 Workspace_msvc/lib_util.vcxproj create mode 100644 apps/decoder.c create mode 100644 apps/encoder.c create mode 100644 lib_com/ACcontextMapping.c create mode 100644 lib_com/ari.c create mode 100644 lib_com/ari_hm.c create mode 100644 lib_com/arith_coder.c create mode 100644 lib_com/basop32.c create mode 100644 lib_com/basop32.h create mode 100644 lib_com/basop_com_lpc.c create mode 100644 lib_com/basop_lsf_tools.c create mode 100644 lib_com/basop_mpy.c create mode 100644 lib_com/basop_mpy.h create mode 100644 lib_com/basop_proto_func.h create mode 100644 lib_com/basop_settings.h create mode 100644 lib_com/basop_tcx_utils.c create mode 100644 lib_com/basop_util.c create mode 100644 lib_com/basop_util.h create mode 100644 lib_com/bitalloc.c create mode 100644 lib_com/bitallocsum.c create mode 100644 lib_com/bits_alloc.c create mode 100644 lib_com/bitstream.c create mode 100644 lib_com/calc_st_com.c create mode 100644 lib_com/cb_shape.c create mode 100644 lib_com/cldfb.c create mode 100644 lib_com/cng_exc.c create mode 100644 lib_com/cnst.h create mode 100644 lib_com/codec_tcx_common.c create mode 100644 lib_com/common_api_types.h create mode 100644 lib_com/control.h create mode 100644 lib_com/core_com_config.c create mode 100644 lib_com/deemph.c create mode 100644 lib_com/delay_comp.c create mode 100644 lib_com/disclaimer.c create mode 100644 lib_com/dlpc_bfi.c create mode 100644 lib_com/edct.c create mode 100644 lib_com/enh1632.c create mode 100644 lib_com/enh1632.h create mode 100644 lib_com/enh40.c create mode 100644 lib_com/enh40.h create mode 100644 lib_com/enhancer.c create mode 100644 lib_com/enr_1_az.c create mode 100644 lib_com/env_adj.c create mode 100644 lib_com/env_stab.c create mode 100644 lib_com/env_stab_trans.c create mode 100644 lib_com/est_tilt.c create mode 100644 lib_com/fd_cng_com.c create mode 100644 lib_com/fft.c create mode 100644 lib_com/fft_cldfb.c create mode 100644 lib_com/fft_rel.c create mode 100644 lib_com/fill_spectrum.c create mode 100644 lib_com/findpulse.c create mode 100644 lib_com/fine_gain_bits.c create mode 100644 lib_com/frame_ener.c create mode 100644 lib_com/get_gain.c create mode 100644 lib_com/gs_bitallocation.c create mode 100644 lib_com/gs_gains.c create mode 100644 lib_com/gs_inact_switching.c create mode 100644 lib_com/gs_noisefill.c create mode 100644 lib_com/gs_preech.c create mode 100644 lib_com/guided_plc_util.c create mode 100644 lib_com/hp50.c create mode 100644 lib_com/hq2_bit_alloc.c create mode 100644 lib_com/hq2_core_com.c create mode 100644 lib_com/hq2_noise_inject.c create mode 100644 lib_com/hq_bit_allocation.c create mode 100644 lib_com/hq_conf.c create mode 100644 lib_com/hq_tools.c create mode 100644 lib_com/hvq_pvq_bitalloc.c create mode 100644 lib_com/ifft_rel.c create mode 100644 lib_com/igf_base.c create mode 100644 lib_com/index_pvq_opt.c create mode 100644 lib_com/int_lsp.c create mode 100644 lib_com/interleave_spectrum.c create mode 100644 lib_com/interpol.c create mode 100644 lib_com/isf_dec_amr_wb.c create mode 100644 lib_com/ivas_agc_com.c create mode 100644 lib_com/ivas_arith.c create mode 100644 lib_com/ivas_avq_pos_reorder_com.c create mode 100644 lib_com/ivas_cnst.h create mode 100644 lib_com/ivas_cov_smooth.c create mode 100644 lib_com/ivas_dirac_com.c create mode 100644 lib_com/ivas_entropy_coder_common.c create mode 100644 lib_com/ivas_error.h create mode 100644 lib_com/ivas_error_utils.h create mode 100644 lib_com/ivas_fb_mixer.c create mode 100644 lib_com/ivas_filters.c create mode 100644 lib_com/ivas_ism_config.c create mode 100644 lib_com/ivas_masa_com.c create mode 100644 lib_com/ivas_mc_com.c create mode 100644 lib_com/ivas_mc_param_com.c create mode 100644 lib_com/ivas_mcmasa_com.c create mode 100644 lib_com/ivas_mct_com.c create mode 100644 lib_com/ivas_mdct_core_com.c create mode 100644 lib_com/ivas_mdct_imdct.c create mode 100644 lib_com/ivas_mdft_imdft.c create mode 100644 lib_com/ivas_pca_tools.c create mode 100644 lib_com/ivas_prot.h create mode 100644 lib_com/ivas_qmetadata_com.c create mode 100644 lib_com/ivas_qspherical_com.c create mode 100644 lib_com/ivas_rom_com.c create mode 100644 lib_com/ivas_rom_com.h create mode 100644 lib_com/ivas_sba_config.c create mode 100644 lib_com/ivas_sns_com.c create mode 100644 lib_com/ivas_spar_com.c create mode 100644 lib_com/ivas_spar_com_quant_util.c create mode 100644 lib_com/ivas_spar_foa_br_dist.c create mode 100644 lib_com/ivas_stat_com.h create mode 100644 lib_com/ivas_stereo_dft_com.c create mode 100644 lib_com/ivas_stereo_eclvq_com.c create mode 100644 lib_com/ivas_stereo_ica_com.c create mode 100644 lib_com/ivas_stereo_mdct_bands_com.c create mode 100644 lib_com/ivas_stereo_mdct_stereo_com.c create mode 100644 lib_com/ivas_stereo_psychlpc_com.c create mode 100644 lib_com/ivas_stereo_td_bit_alloc.c create mode 100644 lib_com/ivas_tools.c create mode 100644 lib_com/ivas_transient_det.c create mode 100644 lib_com/lag_wind.c create mode 100644 lib_com/lerp.c create mode 100644 lib_com/limit_t0.c create mode 100644 lib_com/logqnorm.c create mode 100644 lib_com/longarith.c create mode 100644 lib_com/low_rate_band_att.c create mode 100644 lib_com/lpc_tools.c create mode 100644 lib_com/lsf_dec_bfi.c create mode 100644 lib_com/lsf_msvq_ma.c create mode 100644 lib_com/lsf_tools.c create mode 100644 lib_com/lsp_conv_poly.c create mode 100644 lib_com/mime.h create mode 100644 lib_com/modif_fs.c create mode 100644 lib_com/move.h create mode 100644 lib_com/mslvq_com.c create mode 100644 lib_com/nelp.c create mode 100644 lib_com/options.h create mode 100644 lib_com/parameter_bitmaping.c create mode 100644 lib_com/phase_dispersion.c create mode 100644 lib_com/ppp.c create mode 100644 lib_com/pred_lt4.c create mode 100644 lib_com/preemph.c create mode 100644 lib_com/prot.h create mode 100644 lib_com/pvq_com.c create mode 100644 lib_com/range_com.c create mode 100644 lib_com/re8_ppv.c create mode 100644 lib_com/re8_util.c create mode 100644 lib_com/realft.c create mode 100644 lib_com/recovernorm.c create mode 100644 lib_com/reordvct.c create mode 100644 lib_com/residu.c create mode 100644 lib_com/rom_com.c create mode 100644 lib_com/rom_com.h create mode 100644 lib_com/stab_est.c create mode 100644 lib_com/stat_com.h create mode 100644 lib_com/stat_noise_uv_mod.c create mode 100644 lib_com/stl.h create mode 100644 lib_com/swb_bwe_com.c create mode 100644 lib_com/swb_bwe_com_hr.c create mode 100644 lib_com/swb_bwe_com_lr.c create mode 100644 lib_com/swb_tbe_com.c create mode 100644 lib_com/syn_12k8.c create mode 100644 lib_com/syn_filt.c create mode 100644 lib_com/tcq_position_arith.c create mode 100644 lib_com/tcx_ltp.c create mode 100644 lib_com/tcx_mdct.c create mode 100644 lib_com/tcx_mdct_window.c create mode 100644 lib_com/tcx_utils.c create mode 100644 lib_com/tec_com.c create mode 100644 lib_com/tns_base.c create mode 100644 lib_com/tools.c create mode 100644 lib_com/trans_direct.c create mode 100644 lib_com/trans_inv.c create mode 100644 lib_com/typedef.h create mode 100644 lib_com/vlpc_2st_com.c create mode 100644 lib_com/weight.c create mode 100644 lib_com/weight_a.c create mode 100644 lib_com/wi.c create mode 100644 lib_com/window.c create mode 100644 lib_com/window_ola.c create mode 100644 lib_com/wtda.c create mode 100644 lib_debug/debug.c create mode 100644 lib_debug/debug.h create mode 100644 lib_debug/mem_count.c create mode 100644 lib_debug/mem_count.h create mode 100644 lib_debug/memory.c create mode 100644 lib_debug/segsnr.c create mode 100644 lib_debug/snr.c create mode 100644 lib_debug/spar_debug.c create mode 100644 lib_debug/spar_debug.h create mode 100644 lib_debug/wmops.c create mode 100644 lib_debug/wmops.h create mode 100644 lib_dec/ACcontextMapping_dec.c create mode 100644 lib_dec/FEC.c create mode 100644 lib_dec/FEC_HQ_core.c create mode 100644 lib_dec/FEC_HQ_phase_ecu.c create mode 100644 lib_dec/FEC_adapt_codebook.c create mode 100644 lib_dec/FEC_clas_estim.c create mode 100644 lib_dec/FEC_lsf_estim.c create mode 100644 lib_dec/FEC_pitch_estim.c create mode 100644 lib_dec/FEC_scale_syn.c create mode 100644 lib_dec/LD_music_post_filter.c create mode 100644 lib_dec/TonalComponentDetection.c create mode 100644 lib_dec/acelp_core_dec.c create mode 100644 lib_dec/acelp_core_switch_dec.c create mode 100644 lib_dec/amr_wb_dec.c create mode 100644 lib_dec/ari_dec.c create mode 100644 lib_dec/ari_hm_dec.c create mode 100644 lib_dec/arith_coder_dec.c create mode 100644 lib_dec/avq_dec.c create mode 100644 lib_dec/bass_psfilter.c create mode 100644 lib_dec/cng_dec.c create mode 100644 lib_dec/core_dec_init.c create mode 100644 lib_dec/core_dec_reconf.c create mode 100644 lib_dec/core_dec_switch.c create mode 100644 lib_dec/core_switching_dec.c create mode 100644 lib_dec/d_gain2p.c create mode 100644 lib_dec/dec2t32.c create mode 100644 lib_dec/dec4t64.c create mode 100644 lib_dec/dec_LPD.c create mode 100644 lib_dec/dec_ace.c create mode 100644 lib_dec/dec_acelp.c create mode 100644 lib_dec/dec_acelp_tcx_main.c create mode 100644 lib_dec/dec_amr_wb.c create mode 100644 lib_dec/dec_gen_voic.c create mode 100644 lib_dec/dec_higher_acelp.c create mode 100644 lib_dec/dec_nelp.c create mode 100644 lib_dec/dec_pit_exc.c create mode 100644 lib_dec/dec_post.c create mode 100644 lib_dec/dec_ppp.c create mode 100644 lib_dec/dec_prm.c create mode 100644 lib_dec/dec_tcx.c create mode 100644 lib_dec/dec_tran.c create mode 100644 lib_dec/dec_uv.c create mode 100644 lib_dec/decision_matrix_dec.c create mode 100644 lib_dec/dlpc_avq.c create mode 100644 lib_dec/dlpc_stoch.c create mode 100644 lib_dec/er_dec_acelp.c create mode 100644 lib_dec/er_dec_tcx.c create mode 100644 lib_dec/er_scale_syn.c create mode 100644 lib_dec/er_sync_exc.c create mode 100644 lib_dec/er_util.c create mode 100644 lib_dec/evs_dec.c create mode 100644 lib_dec/fd_cng_dec.c create mode 100644 lib_dec/gain_dec.c create mode 100644 lib_dec/gaus_dec.c create mode 100644 lib_dec/gs_dec.c create mode 100644 lib_dec/gs_dec_amr_wb.c create mode 100644 lib_dec/hdecnrm.c create mode 100644 lib_dec/hf_synth.c create mode 100644 lib_dec/hq_classifier_dec.c create mode 100644 lib_dec/hq_conf_fec.c create mode 100644 lib_dec/hq_core_dec.c create mode 100644 lib_dec/hq_env_dec.c create mode 100644 lib_dec/hq_hr_dec.c create mode 100644 lib_dec/hq_lr_dec.c create mode 100644 lib_dec/igf_dec.c create mode 100644 lib_dec/igf_scf_dec.c create mode 100644 lib_dec/init_dec.c create mode 100644 lib_dec/inov_dec.c create mode 100644 lib_dec/ivas_agc_dec.c create mode 100644 lib_dec/ivas_allrad_dec.c create mode 100644 lib_dec/ivas_binauralRenderer.c create mode 100644 lib_dec/ivas_binaural_reverb.c create mode 100644 lib_dec/ivas_core_dec.c create mode 100644 lib_dec/ivas_cpe_dec.c create mode 100644 lib_dec/ivas_crend.c create mode 100644 lib_dec/ivas_dec.c create mode 100644 lib_dec/ivas_decision_matrix_dec.c create mode 100644 lib_dec/ivas_dirac_dec.c create mode 100644 lib_dec/ivas_dirac_dec_binaural_functions.c create mode 100644 lib_dec/ivas_dirac_decorr_dec.c create mode 100644 lib_dec/ivas_dirac_onsets_dec.c create mode 100644 lib_dec/ivas_dirac_output_synthesis_cov.c create mode 100644 lib_dec/ivas_dirac_output_synthesis_dec.c create mode 100644 lib_dec/ivas_efap.c create mode 100644 lib_dec/ivas_entropy_decoder.c create mode 100644 lib_dec/ivas_hrtf.c create mode 100644 lib_dec/ivas_init_dec.c create mode 100644 lib_dec/ivas_ism_metadata_dec.c create mode 100644 lib_dec/ivas_ism_param_dec.c create mode 100644 lib_dec/ivas_ism_renderer.c create mode 100644 lib_dec/ivas_lfe_dec.c create mode 100644 lib_dec/ivas_lfe_plc.c create mode 100644 lib_dec/ivas_limiter.c create mode 100644 lib_dec/ivas_ls_custom_dec.c create mode 100644 lib_dec/ivas_masa_dec.c create mode 100644 lib_dec/ivas_mc_param_dec.c create mode 100644 lib_dec/ivas_mct_core_dec.c create mode 100644 lib_dec/ivas_mct_dec.c create mode 100644 lib_dec/ivas_mct_dec_mct.c create mode 100644 lib_dec/ivas_mdct_core_dec.c create mode 100644 lib_dec/ivas_mono_dmx_renderer.c create mode 100644 lib_dec/ivas_objectRenderer.c create mode 100644 lib_dec/ivas_objectRenderer_hrFilt.c create mode 100644 lib_dec/ivas_objectRenderer_mix.c create mode 100644 lib_dec/ivas_objectRenderer_sfx.c create mode 100644 lib_dec/ivas_objectRenderer_sources.c create mode 100644 lib_dec/ivas_objectRenderer_vec.c create mode 100644 lib_dec/ivas_orient_trk.c create mode 100644 lib_dec/ivas_out_setup_conversion.c create mode 100644 lib_dec/ivas_output_init.c create mode 100644 lib_dec/ivas_pca_dec.c create mode 100644 lib_dec/ivas_post_proc.c create mode 100644 lib_dec/ivas_qmetadata_dec.c create mode 100644 lib_dec/ivas_qspherical_dec.c create mode 100644 lib_dec/ivas_range_uni_dec.c create mode 100644 lib_dec/ivas_render_config.c create mode 100644 lib_dec/ivas_reverb.c create mode 100644 lib_dec/ivas_reverb_delay_line.c create mode 100644 lib_dec/ivas_reverb_fft_filter.c create mode 100644 lib_dec/ivas_reverb_filter_design.c create mode 100644 lib_dec/ivas_reverb_iir_filter.c create mode 100644 lib_dec/ivas_reverb_utils.c create mode 100644 lib_dec/ivas_rom_TdBinauralRenderer.c create mode 100644 lib_dec/ivas_rom_TdBinauralRenderer.h create mode 100644 lib_dec/ivas_rom_binauralRenderer.c create mode 100644 lib_dec/ivas_rom_binauralRenderer.h create mode 100644 lib_dec/ivas_rom_binaural_crend_head.c create mode 100644 lib_dec/ivas_rom_binaural_crend_head.h create mode 100644 lib_dec/ivas_rom_dec.c create mode 100644 lib_dec/ivas_rom_dec.h create mode 100644 lib_dec/ivas_rotation.c create mode 100644 lib_dec/ivas_sba_dec.c create mode 100644 lib_dec/ivas_sba_dirac_stereo_dec.c create mode 100644 lib_dec/ivas_sba_rendering.c create mode 100644 lib_dec/ivas_sce_dec.c create mode 100644 lib_dec/ivas_sns_dec.c create mode 100644 lib_dec/ivas_spar_decoder.c create mode 100644 lib_dec/ivas_spar_foa_dec.c create mode 100644 lib_dec/ivas_spar_foa_md_dec.c create mode 100644 lib_dec/ivas_stat_dec.h create mode 100644 lib_dec/ivas_stereo_adapt_GR_dec.c create mode 100644 lib_dec/ivas_stereo_cng_dec.c create mode 100644 lib_dec/ivas_stereo_dft_dec.c create mode 100644 lib_dec/ivas_stereo_dft_dec_dmx.c create mode 100644 lib_dec/ivas_stereo_dft_plc.c create mode 100644 lib_dec/ivas_stereo_eclvq_dec.c create mode 100644 lib_dec/ivas_stereo_esf_dec.c create mode 100644 lib_dec/ivas_stereo_ica_dec.c create mode 100644 lib_dec/ivas_stereo_icbwe_dec.c create mode 100644 lib_dec/ivas_stereo_mdct_core_dec.c create mode 100644 lib_dec/ivas_stereo_mdct_stereo_dec.c create mode 100644 lib_dec/ivas_stereo_switching_dec.c create mode 100644 lib_dec/ivas_stereo_td_dec.c create mode 100644 lib_dec/ivas_stereo_td_low_rate_dec.c create mode 100644 lib_dec/ivas_svd_dec.c create mode 100644 lib_dec/ivas_tcx_core_dec.c create mode 100644 lib_dec/ivas_td_decorr.c create mode 100644 lib_dec/ivas_vbap.c create mode 100644 lib_dec/jbm_jb4_circularbuffer.c create mode 100644 lib_dec/jbm_jb4_circularbuffer.h create mode 100644 lib_dec/jbm_jb4_inputbuffer.c create mode 100644 lib_dec/jbm_jb4_inputbuffer.h create mode 100644 lib_dec/jbm_jb4_jmf.c create mode 100644 lib_dec/jbm_jb4_jmf.h create mode 100644 lib_dec/jbm_jb4sb.c create mode 100644 lib_dec/jbm_jb4sb.h create mode 100644 lib_dec/jbm_pcmdsp_apa.c create mode 100644 lib_dec/jbm_pcmdsp_apa.h create mode 100644 lib_dec/jbm_pcmdsp_fifo.c create mode 100644 lib_dec/jbm_pcmdsp_fifo.h create mode 100644 lib_dec/jbm_pcmdsp_similarityestimation.c create mode 100644 lib_dec/jbm_pcmdsp_similarityestimation.h create mode 100644 lib_dec/jbm_pcmdsp_window.c create mode 100644 lib_dec/jbm_pcmdsp_window.h create mode 100644 lib_dec/lead_deindexing.c create mode 100644 lib_dec/lib_dec.c create mode 100644 lib_dec/lib_dec.h create mode 100644 lib_dec/lp_exc_d.c create mode 100644 lib_dec/lsf_dec.c create mode 100644 lib_dec/lsf_msvq_ma_dec.c create mode 100644 lib_dec/nelp_dec.c create mode 100644 lib_dec/peak_vq_dec.c create mode 100644 lib_dec/pit_dec.c create mode 100644 lib_dec/pitch_extr.c create mode 100644 lib_dec/post_dec.c create mode 100644 lib_dec/ppp_dec.c create mode 100644 lib_dec/pvq_core_dec.c create mode 100644 lib_dec/pvq_decode.c create mode 100644 lib_dec/range_dec.c create mode 100644 lib_dec/re8_dec.c create mode 100644 lib_dec/rom_dec.c create mode 100644 lib_dec/rom_dec.h create mode 100644 lib_dec/rst_dec.c create mode 100644 lib_dec/stat_dec.h create mode 100644 lib_dec/stat_noise_uv_dec.c create mode 100644 lib_dec/swb_bwe_dec.c create mode 100644 lib_dec/swb_bwe_dec_hr.c create mode 100644 lib_dec/swb_bwe_dec_lr.c create mode 100644 lib_dec/swb_tbe_dec.c create mode 100644 lib_dec/syn_outp.c create mode 100644 lib_dec/tcq_core_dec.c create mode 100644 lib_dec/tcx_utils_dec.c create mode 100644 lib_dec/tns_base_dec.c create mode 100644 lib_dec/tonalMDCTconcealment.c create mode 100644 lib_dec/transition_dec.c create mode 100644 lib_dec/updt_dec.c create mode 100644 lib_dec/vlpc_1st_dec.c create mode 100644 lib_dec/vlpc_2st_dec.c create mode 100644 lib_dec/voiced_dec.c create mode 100644 lib_dec/waveadjust_fec_dec.c create mode 100644 lib_enc/ACcontextMapping_enc.c create mode 100644 lib_enc/FEC_enc.c create mode 100644 lib_enc/SNR_calc.c create mode 100644 lib_enc/acelp_core_enc.c create mode 100644 lib_enc/acelp_core_switch_enc.c create mode 100644 lib_enc/acelp_enc_util.c create mode 100644 lib_enc/amr_wb_enc.c create mode 100644 lib_enc/analy_lp.c create mode 100644 lib_enc/analy_sp.c create mode 100644 lib_enc/ari_enc.c create mode 100644 lib_enc/ari_hm_enc.c create mode 100644 lib_enc/arith_coder_enc.c create mode 100644 lib_enc/avq_cod.c create mode 100644 lib_enc/bass_psfilter_enc.c create mode 100644 lib_enc/bw_detect.c create mode 100644 lib_enc/cng_enc.c create mode 100644 lib_enc/cod2t32.c create mode 100644 lib_enc/cod4t64.c create mode 100644 lib_enc/cod4t64_fast.c create mode 100644 lib_enc/cod_ace.c create mode 100644 lib_enc/cod_tcx.c create mode 100644 lib_enc/cod_uv.c create mode 100644 lib_enc/comvad_decision.c create mode 100644 lib_enc/cor_shif.c create mode 100644 lib_enc/core_enc_2div.c create mode 100644 lib_enc/core_enc_init.c create mode 100644 lib_enc/core_enc_ol.c create mode 100644 lib_enc/core_enc_reconf.c create mode 100644 lib_enc/core_enc_switch.c create mode 100644 lib_enc/core_enc_updt.c create mode 100644 lib_enc/core_switching_enc.c create mode 100644 lib_enc/corr_xh.c create mode 100644 lib_enc/decision_matrix_enc.c create mode 100644 lib_enc/detect_transient.c create mode 100644 lib_enc/diffcod.c create mode 100644 lib_enc/dtx.c create mode 100644 lib_enc/enc_acelp.c create mode 100644 lib_enc/enc_acelp_tcx_main.c create mode 100644 lib_enc/enc_acelpx.c create mode 100644 lib_enc/enc_amr_wb.c create mode 100644 lib_enc/enc_gain.c create mode 100644 lib_enc/enc_gen_voic.c create mode 100644 lib_enc/enc_gen_voic_rf.c create mode 100644 lib_enc/enc_higher_acelp.c create mode 100644 lib_enc/enc_nelp.c create mode 100644 lib_enc/enc_pit_exc.c create mode 100644 lib_enc/enc_ppp.c create mode 100644 lib_enc/enc_prm.c create mode 100644 lib_enc/enc_tran.c create mode 100644 lib_enc/enc_uv.c create mode 100644 lib_enc/energy.c create mode 100644 lib_enc/eval_pit_contr.c create mode 100644 lib_enc/evs_enc.c create mode 100644 lib_enc/ext_sig_ana.c create mode 100644 lib_enc/fd_cng_enc.c create mode 100644 lib_enc/find_tar.c create mode 100644 lib_enc/find_tilt.c create mode 100644 lib_enc/find_uv.c create mode 100644 lib_enc/find_wsp.c create mode 100644 lib_enc/frame_spec_dif_cor_rate.c create mode 100644 lib_enc/gain_enc.c create mode 100644 lib_enc/gaus_enc.c create mode 100644 lib_enc/gp_clip.c create mode 100644 lib_enc/gs_enc.c create mode 100644 lib_enc/guided_plc_enc.c create mode 100644 lib_enc/hf_cod_amrwb.c create mode 100644 lib_enc/hq_classifier_enc.c create mode 100644 lib_enc/hq_core_enc.c create mode 100644 lib_enc/hq_env_enc.c create mode 100644 lib_enc/hq_hr_enc.c create mode 100644 lib_enc/hq_lr_enc.c create mode 100644 lib_enc/hvq_enc.c create mode 100644 lib_enc/igf_enc.c create mode 100644 lib_enc/igf_scf_enc.c create mode 100644 lib_enc/init_enc.c create mode 100644 lib_enc/inov_enc.c create mode 100644 lib_enc/isf_enc_amr_wb.c create mode 100644 lib_enc/ivas_agc_enc.c create mode 100644 lib_enc/ivas_core_enc.c create mode 100644 lib_enc/ivas_core_pre_proc.c create mode 100644 lib_enc/ivas_core_pre_proc_front.c create mode 100644 lib_enc/ivas_cpe_enc.c create mode 100644 lib_enc/ivas_decision_matrix_enc.c create mode 100644 lib_enc/ivas_dirac_enc.c create mode 100644 lib_enc/ivas_enc.c create mode 100644 lib_enc/ivas_enc_cov_handler.c create mode 100644 lib_enc/ivas_entropy_coder.c create mode 100644 lib_enc/ivas_front_vad.c create mode 100644 lib_enc/ivas_init_enc.c create mode 100644 lib_enc/ivas_ism_enc.c create mode 100644 lib_enc/ivas_ism_metadata_enc.c create mode 100644 lib_enc/ivas_ism_param_enc.c create mode 100644 lib_enc/ivas_lfe_enc.c create mode 100644 lib_enc/ivas_masa_enc.c create mode 100644 lib_enc/ivas_mc_param_enc.c create mode 100644 lib_enc/ivas_mcmasa_enc.c create mode 100644 lib_enc/ivas_mct_core_enc.c create mode 100644 lib_enc/ivas_mct_enc.c create mode 100644 lib_enc/ivas_mct_enc_mct.c create mode 100644 lib_enc/ivas_mdct_core_enc.c create mode 100644 lib_enc/ivas_pca_enc.c create mode 100644 lib_enc/ivas_qmetadata_enc.c create mode 100644 lib_enc/ivas_qspherical_enc.c create mode 100644 lib_enc/ivas_range_uni_enc.c create mode 100644 lib_enc/ivas_rom_enc.c create mode 100644 lib_enc/ivas_rom_enc.h create mode 100644 lib_enc/ivas_sba_enc.c create mode 100644 lib_enc/ivas_sce_enc.c create mode 100644 lib_enc/ivas_sns_enc.c create mode 100644 lib_enc/ivas_spar_encoder.c create mode 100644 lib_enc/ivas_spar_foa_enc.c create mode 100644 lib_enc/ivas_spar_foa_md_enc.c create mode 100644 lib_enc/ivas_stat_enc.h create mode 100644 lib_enc/ivas_stereo_adapt_GR_enc.c create mode 100644 lib_enc/ivas_stereo_classifier.c create mode 100644 lib_enc/ivas_stereo_cng_enc.c create mode 100644 lib_enc/ivas_stereo_dft_enc.c create mode 100644 lib_enc/ivas_stereo_dft_enc_itd.c create mode 100644 lib_enc/ivas_stereo_dft_td_itd.c create mode 100644 lib_enc/ivas_stereo_dmx_evs.c create mode 100644 lib_enc/ivas_stereo_eclvq_enc.c create mode 100644 lib_enc/ivas_stereo_ica_enc.c create mode 100644 lib_enc/ivas_stereo_icbwe_enc.c create mode 100644 lib_enc/ivas_stereo_mdct_core_enc.c create mode 100644 lib_enc/ivas_stereo_mdct_igf_enc.c create mode 100644 lib_enc/ivas_stereo_mdct_stereo_enc.c create mode 100644 lib_enc/ivas_stereo_switching_enc.c create mode 100644 lib_enc/ivas_stereo_td_analysis.c create mode 100644 lib_enc/ivas_stereo_td_enc.c create mode 100644 lib_enc/ivas_stereo_td_low_rate_enc.c create mode 100644 lib_enc/ivas_tcx_core_enc.c create mode 100644 lib_enc/lead_indexing.c create mode 100644 lib_enc/lib_enc.c create mode 100644 lib_enc/lib_enc.h create mode 100644 lib_enc/long_enr.c create mode 100644 lib_enc/lp_exc_e.c create mode 100644 lib_enc/lsf_enc.c create mode 100644 lib_enc/lsf_msvq_ma_enc.c create mode 100644 lib_enc/ltd_stable.c create mode 100644 lib_enc/mdct_classifier.c create mode 100644 lib_enc/mdct_selector.c create mode 100644 lib_enc/mslvq_enc.c create mode 100644 lib_enc/multi_harm.c create mode 100644 lib_enc/nelp_enc.c create mode 100644 lib_enc/nois_est.c create mode 100644 lib_enc/noise_adjust.c create mode 100644 lib_enc/normalizecoefs.c create mode 100644 lib_enc/peak_vq_enc.c create mode 100644 lib_enc/pit_enc.c create mode 100644 lib_enc/pitch_ol.c create mode 100644 lib_enc/pitch_ol2.c create mode 100644 lib_enc/plc_enc_ext.c create mode 100644 lib_enc/ppp_enc.c create mode 100644 lib_enc/pre_proc.c create mode 100644 lib_enc/pvq_core_enc.c create mode 100644 lib_enc/pvq_encode.c create mode 100644 lib_enc/q_gain2p.c create mode 100644 lib_enc/qlpc_avq.c create mode 100644 lib_enc/qlpc_stoch.c create mode 100644 lib_enc/range_enc.c create mode 100644 lib_enc/re8_cod.c create mode 100644 lib_enc/reordernorm.c create mode 100644 lib_enc/rom_enc.c create mode 100644 lib_enc/rom_enc.h create mode 100644 lib_enc/rst_enc.c create mode 100644 lib_enc/set_impulse.c create mode 100644 lib_enc/setmodeindex.c create mode 100644 lib_enc/sig_clas.c create mode 100644 lib_enc/spec_center.c create mode 100644 lib_enc/spec_flatness.c create mode 100644 lib_enc/speech_music_classif.c create mode 100644 lib_enc/stat_enc.h create mode 100644 lib_enc/stat_noise_uv_enc.c create mode 100644 lib_enc/subband_fft.c create mode 100644 lib_enc/swb_bwe_enc.c create mode 100644 lib_enc/swb_bwe_enc_hr.c create mode 100644 lib_enc/swb_bwe_enc_lr.c create mode 100644 lib_enc/swb_pre_proc.c create mode 100644 lib_enc/swb_tbe_enc.c create mode 100644 lib_enc/tcq_core_enc.c create mode 100644 lib_enc/tcx_ltp_enc.c create mode 100644 lib_enc/tcx_utils_enc.c create mode 100644 lib_enc/tfa_enc.c create mode 100644 lib_enc/tns_base_enc.c create mode 100644 lib_enc/transient_detection.c create mode 100644 lib_enc/transition_enc.c create mode 100644 lib_enc/update_decision.c create mode 100644 lib_enc/updt_enc.c create mode 100644 lib_enc/updt_tar.c create mode 100644 lib_enc/vad.c create mode 100644 lib_enc/vad_param_updt.c create mode 100644 lib_enc/vad_proc.c create mode 100644 lib_enc/vbr_average_rate.c create mode 100644 lib_enc/vlpc_1st_cod.c create mode 100644 lib_enc/vlpc_2st_cod.c create mode 100644 lib_enc/voiced_enc.c create mode 100644 lib_enc/waveadjust_fec_cod.c create mode 100644 lib_util/audio_file_reader.c create mode 100644 lib_util/audio_file_reader.h create mode 100644 lib_util/audio_file_writer.c create mode 100644 lib_util/audio_file_writer.h create mode 100644 lib_util/bitstream_reader.c create mode 100644 lib_util/bitstream_reader.h create mode 100644 lib_util/bitstream_writer.c create mode 100644 lib_util/bitstream_writer.h create mode 100644 lib_util/cmdl_tools.c create mode 100644 lib_util/cmdl_tools.h create mode 100644 lib_util/evs_rtp_payload.c create mode 100644 lib_util/evs_rtp_payload.h create mode 100644 lib_util/g192.c create mode 100644 lib_util/g192.h create mode 100644 lib_util/head_rotation_file_reader.c create mode 100644 lib_util/head_rotation_file_reader.h create mode 100644 lib_util/hrtf_file_reader.c create mode 100644 lib_util/hrtf_file_reader.h create mode 100644 lib_util/ism_file_reader.c create mode 100644 lib_util/ism_file_reader.h create mode 100644 lib_util/ism_file_writer.c create mode 100644 lib_util/ism_file_writer.h create mode 100644 lib_util/ivas_prerenderer.c create mode 100644 lib_util/ivas_prerenderer.h create mode 100644 lib_util/ivas_rom_prerenderer.c create mode 100644 lib_util/ivas_rom_prerenderer.h create mode 100644 lib_util/jbm_file_writer.c create mode 100644 lib_util/jbm_file_writer.h create mode 100644 lib_util/ls_custom_file_reader.c create mode 100644 lib_util/ls_custom_file_reader.h create mode 100644 lib_util/masa_file_reader.c create mode 100644 lib_util/masa_file_reader.h create mode 100644 lib_util/masa_file_writer.c create mode 100644 lib_util/masa_file_writer.h create mode 100644 lib_util/mime_io.c create mode 100644 lib_util/mime_io.h create mode 100644 lib_util/render_config_reader.c create mode 100644 lib_util/render_config_reader.h create mode 100644 lib_util/rtpdump.c create mode 100644 lib_util/rtpdump.h create mode 100644 lib_util/tinywavein_c.h create mode 100644 lib_util/tinywaveout_c.h create mode 100644 readme.txt create mode 100644 scripts/IvasBuildAndRun.py create mode 100644 scripts/IvasBuildAndRunChecks.py create mode 100644 scripts/README.md create mode 100644 scripts/batch_comp_audio.py create mode 100644 scripts/check-format.sh create mode 100644 scripts/config/ivas_modes.json create mode 100644 scripts/config/ivas_modes_debug.json create mode 100644 scripts/config/self_test.json create mode 100644 scripts/config/self_test.prm create mode 100644 scripts/config/self_test_evs.prm create mode 100644 scripts/dly_error_profiles/dly_error_profile_1.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_10.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_11.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_2.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_3.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_4.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_5.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_6.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_7.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_8.dat create mode 100644 scripts/dly_error_profiles/dly_error_profile_9.dat create mode 100644 scripts/find_unused_symbols.sh create mode 100644 scripts/generate_test_items.py create mode 100644 scripts/ivas_pytests/build_all.bat create mode 100644 scripts/ivas_pytests/build_all.sh create mode 100644 scripts/ivas_pytests/clean_all.bat create mode 100644 scripts/ivas_pytests/clean_all.sh create mode 100644 scripts/ivas_pytests/conftest.py create mode 100644 scripts/ivas_pytests/disable_lib_com_optim.py create mode 100644 scripts/ivas_pytests/endofline.py create mode 100644 scripts/ivas_pytests/self_test_b.py create mode 100644 scripts/ivas_pytests/tests/cmp_custom.py create mode 100644 scripts/ivas_pytests/tests/il2mm.py create mode 100644 scripts/ivas_pytests/tests/requirements.txt create mode 100644 scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec.py create mode 100644 scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec_plc.py create mode 100644 scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_enc.py create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/.vs/ivas_crend_unit_test/v16/Solution.VC.db-wal create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/build.bat create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/clean.bat create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_io_parse.h create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_public.h create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.h create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.sln create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.vcxproj create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_dec_parse_io.h create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.h create mode 100644 scripts/ivas_pytests/tests/unit_tests/crend/ivas_result_t.h create mode 100644 scripts/ivas_pytests/tests/unit_tests/test_crend_unittest.py create mode 100644 scripts/ls_layouts/16ch_8+4+4.txt create mode 100644 scripts/ls_layouts/4d0.txt create mode 100644 scripts/ls_layouts/4d4.txt create mode 100644 scripts/ls_layouts/cicp1.txt create mode 100644 scripts/ls_layouts/cicp12.txt create mode 100644 scripts/ls_layouts/cicp13.txt create mode 100644 scripts/ls_layouts/cicp14.txt create mode 100644 scripts/ls_layouts/cicp15.txt create mode 100644 scripts/ls_layouts/cicp16.txt create mode 100644 scripts/ls_layouts/cicp17.txt create mode 100644 scripts/ls_layouts/cicp18.txt create mode 100644 scripts/ls_layouts/cicp19.txt create mode 100644 scripts/ls_layouts/cicp2.txt create mode 100644 scripts/ls_layouts/cicp20.txt create mode 100644 scripts/ls_layouts/cicp3.txt create mode 100644 scripts/ls_layouts/cicp4.txt create mode 100644 scripts/ls_layouts/cicp5.txt create mode 100644 scripts/ls_layouts/cicp6.txt create mode 100644 scripts/ls_layouts/cicp7.txt create mode 100644 scripts/ls_layouts/custom1.txt create mode 100644 scripts/ls_layouts/itu_0+2+0.txt create mode 100644 scripts/ls_layouts/itu_0+5+0.txt create mode 100644 scripts/ls_layouts/itu_0+7+0.txt create mode 100644 scripts/ls_layouts/itu_2+5+0.txt create mode 100644 scripts/ls_layouts/itu_3+7+0.txt create mode 100644 scripts/ls_layouts/itu_4+5+0.txt create mode 100644 scripts/ls_layouts/itu_4+5+1.txt create mode 100644 scripts/ls_layouts/itu_4+7+0.txt create mode 100644 scripts/ls_layouts/itu_4+9+0.txt create mode 100644 scripts/ls_layouts/itu_9+10+3.txt create mode 100644 scripts/ls_layouts/t_design_1.txt create mode 100644 scripts/ls_layouts/t_design_2.txt create mode 100644 scripts/ls_layouts/t_design_3.txt create mode 100644 scripts/ls_layouts/t_design_4.txt create mode 100644 scripts/ls_layouts/test_anglewrapping_dedupe.txt create mode 100644 scripts/parse_options_h.sh create mode 100644 scripts/parse_selftest_summary.py create mode 100644 scripts/prepare_instrumentation.sh create mode 100644 scripts/prerenderer/Makefile create mode 100644 scripts/prerenderer/Workspace_msvc/Workspace_msvc_prerenderer.sln create mode 100644 scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj create mode 100644 scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj.filters create mode 100644 scripts/prerenderer/prerenderer.c create mode 100644 scripts/prerenderer_configs/IVAS_ISM_metadata_-30_0.csv create mode 100644 scripts/prerenderer_configs/IVAS_ISM_metadata_0_0.csv create mode 100644 scripts/prerenderer_configs/IVAS_ISM_metadata_30_0.csv create mode 100644 scripts/prerenderer_configs/IVAS_ISM_metadata_circle.csv create mode 100644 scripts/prerenderer_configs/ism1_ivas_mtdt_config.txt create mode 100644 scripts/prerenderer_configs/ism1_shorthand_config.txt create mode 100644 scripts/prerenderer_configs/ism2_ivas_mtdt_config.txt create mode 100644 scripts/prerenderer_configs/ism2_shorthand_config.txt create mode 100644 scripts/prerenderer_configs/ism3_ivas_mtdt_config.txt create mode 100644 scripts/prerenderer_configs/ism3_shorthand_config.txt create mode 100644 scripts/prerenderer_configs/ism4_ivas_mtdt_config.txt create mode 100644 scripts/prerenderer_configs/ism4_shorthand_config.txt create mode 100644 scripts/prerenderer_configs/mixed_ivas_mtdt_config.txt create mode 100644 scripts/prerenderer_configs/mixed_ivas_mtdt_gain_config.txt create mode 100644 scripts/prerenderer_configs/mixed_shorthand_config.txt create mode 100644 scripts/prerenderer_configs/mixed_shorthand_gain_config.txt create mode 100644 scripts/prerenderer_configs/mixed_shorthand_limiter_config.txt create mode 100644 scripts/prerenderer_configs/prerenderer_config_format_readme.txt create mode 100644 scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_VIRTUALLS_SBA3.mat create mode 100644 scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_combined.mat create mode 100644 scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_full.mat create mode 100644 scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_SBA3.mat create mode 100644 scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_combined.mat create mode 100644 scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_full.mat create mode 100644 scripts/pyaudio3dtools/__init__.py create mode 100644 scripts/pyaudio3dtools/audio3dtools.py create mode 100644 scripts/pyaudio3dtools/audioarray.py create mode 100644 scripts/pyaudio3dtools/audiofile.py create mode 100644 scripts/pyaudio3dtools/binauralRef.py create mode 100644 scripts/pyaudio3dtools/binauralrenderer.py create mode 100644 scripts/pyaudio3dtools/hoadecoder.py create mode 100644 scripts/pyaudio3dtools/prerenderer.py create mode 100644 scripts/pyaudio3dtools/quaternions/__init__.py create mode 100644 scripts/pyaudio3dtools/quaternions/functions.py create mode 100644 scripts/pyaudio3dtools/rotateHOA.py create mode 100644 scripts/pyaudio3dtools/rotateISM.py create mode 100644 scripts/pyaudio3dtools/spatialaudioconvert.py create mode 100644 scripts/pyaudio3dtools/spatialaudioformat.py create mode 100644 scripts/pyaudio3dtools/spatialmetadata.py create mode 100644 scripts/pyivastest/IvasBaseClass.py create mode 100644 scripts/pyivastest/IvasModeAnalyzer.py create mode 100644 scripts/pyivastest/IvasModeCollector.py create mode 100644 scripts/pyivastest/IvasModeRunner.py create mode 100644 scripts/pyivastest/IvasScriptsCommon.py create mode 100644 scripts/pyivastest/IvasSvnBuilder.py create mode 100644 scripts/pyivastest/__init__.py create mode 100644 scripts/pyivastest/constants.py create mode 100644 scripts/pyivastest/ivas_svn.py create mode 100644 scripts/pyprocessing/__init__.py create mode 100644 scripts/pyprocessing/evs.py create mode 100644 scripts/pyprocessing/ivas.py create mode 100644 scripts/pyprocessing/prepost_processing.py create mode 100644 scripts/pyprocessing/processing.py create mode 100644 scripts/pyprocessing/processing_configs.py create mode 100644 scripts/pyprocessing/utils.py create mode 100644 scripts/runIvasCodec.py create mode 100644 scripts/self_test.py create mode 100644 scripts/switchPaths/sw_13k2_512k.bin create mode 100644 scripts/switchPaths/sw_13k2_to_128k_10fr.bin create mode 100644 scripts/switchPaths/sw_amrwb.bin create mode 100644 scripts/switchPaths/sw_amrwb_evs.bin create mode 100644 scripts/switchPaths/sw_amrwb_evs2.bin create mode 100644 scripts/switchPaths/sw_highest.bin create mode 100644 scripts/switchPaths/sw_nb1.bin create mode 100644 scripts/switchPaths/sw_nb5.bin create mode 100644 scripts/switchPaths/sw_swb1.bin create mode 100644 scripts/switchPaths/sw_wb1.bin create mode 100644 scripts/switchPaths/sw_wb5.bin create mode 100644 scripts/switchPaths/swb_high1.bin create mode 100644 scripts/switchPaths/swb_low1.bin create mode 100644 scripts/switchPaths/wb_high1.bin create mode 100644 scripts/switchPaths/wb_low1.bin create mode 100644 scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin create mode 100644 scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin create mode 100644 scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin create mode 100644 scripts/td_object_renderer/metadata/create_metadata_v3.m create mode 100644 scripts/td_object_renderer/metadata/csv/t01_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t02_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t03_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t04_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t05_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t05_ch2.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t05_ch3.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t05_ch4.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t06_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t06_ch2.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t06_ch3.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t07_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t08_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t09_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t10_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t11_ch1.csv create mode 100644 scripts/td_object_renderer/metadata/csv/t11_ch2.csv create mode 100644 scripts/td_object_renderer/object_renderer_standalone/Makefile create mode 100644 scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.sln create mode 100644 scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj create mode 100644 scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj.filters create mode 100644 scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c create mode 100644 scripts/td_object_renderer/td_object_renderer_readme.txt create mode 100644 scripts/testv/FEC_6pct.bin create mode 100644 scripts/testv/bwidth_cntl.txt create mode 100644 scripts/testv/config_renderer.cfg create mode 100644 scripts/testv/headrot.csv create mode 100644 scripts/testv/headrot_case00_3000_q.csv create mode 100644 scripts/testv/headrot_case01_3000_q.csv create mode 100644 scripts/testv/headrot_case02_3000_q.csv create mode 100644 scripts/testv/headrot_case03_3000_q.csv create mode 100644 scripts/testv/just_reverb.cfg create mode 100644 scripts/testv/ls_setup_16ch_8+4+4.txt create mode 100644 scripts/testv/stv16c.pcm create mode 100644 scripts/testv/stv16n.pcm create mode 100644 scripts/testv/stv1ISM48s.pcm create mode 100644 scripts/testv/stv2ISM48s.pcm create mode 100644 scripts/testv/stv2OA32c.pcm create mode 100644 scripts/testv/stv2OA48c.pcm create mode 100644 scripts/testv/stv32c.pcm create mode 100644 scripts/testv/stv32n.pcm create mode 100644 scripts/testv/stv3ISM48s.pcm create mode 100644 scripts/testv/stv3OA32c.pcm create mode 100644 scripts/testv/stv3OA48c.pcm create mode 100644 scripts/testv/stv48c.pcm create mode 100644 scripts/testv/stv4ISM48s.pcm create mode 100644 scripts/testv/stv512MC48c.pcm create mode 100644 scripts/testv/stv51MC48c.pcm create mode 100644 scripts/testv/stv714MC48c.pcm create mode 100644 scripts/testv/stv8c.pcm create mode 100644 scripts/testv/stv8n.pcm create mode 100644 scripts/testv/stvFOA16c.pcm create mode 100644 scripts/testv/stvFOA32c.pcm create mode 100644 scripts/testv/stvFOA48c.pcm create mode 100644 scripts/testv/stvISM1.csv create mode 100644 scripts/testv/stvISM2.csv create mode 100644 scripts/testv/stvISM3.csv create mode 100644 scripts/testv/stvISM4.csv create mode 100644 scripts/testv/stvST16c.pcm create mode 100644 scripts/testv/stvST16n.pcm create mode 100644 scripts/testv/stvST32c.pcm create mode 100644 scripts/testv/stvST32n.pcm create mode 100644 scripts/testv/stvST48c.pcm create mode 100644 scripts/testv/stvST48n.pcm create mode 100644 scripts/testv/stv_IVASMASA_1dir1TC.met create mode 100644 scripts/testv/stv_IVASMASA_1dir1TC.pcm create mode 100644 scripts/testv/stv_IVASMASA_1dir1TC_DTX.met create mode 100644 scripts/testv/stv_IVASMASA_1dir1TC_DTX.pcm create mode 100644 scripts/testv/stv_IVASMASA_1dir2TC.met create mode 100644 scripts/testv/stv_IVASMASA_1dir2TC.pcm create mode 100644 scripts/testv/stv_IVASMASA_1dir2TC_DTX.met create mode 100644 scripts/testv/stv_IVASMASA_1dir2TC_DTX.pcm create mode 100644 scripts/testv/stv_IVASMASA_2dir1TC.met create mode 100644 scripts/testv/stv_IVASMASA_2dir1TC.pcm create mode 100644 scripts/testv/stv_IVASMASA_2dir2TC.met create mode 100644 scripts/testv/stv_IVASMASA_2dir2TC.pcm create mode 100644 scripts/trajectories/azi+2-ele+2-every-100-frames-Euler.csv create mode 100644 scripts/trajectories/azi+2-ele+2-every-100-frames.csv create mode 100644 scripts/trajectories/circle-with-up-down-15s.csv create mode 100644 scripts/trajectories/const000.csv create mode 100644 scripts/trajectories/const030.csv create mode 100644 scripts/trajectories/const090.csv create mode 100644 scripts/trajectories/const120.csv create mode 100644 scripts/trajectories/const180.csv create mode 100644 scripts/trajectories/const240.csv create mode 100644 scripts/trajectories/const250.csv create mode 100644 scripts/trajectories/const270.csv create mode 100644 scripts/trajectories/const320.csv create mode 100644 scripts/trajectories/full-circle-15s.csv create mode 100644 scripts/trajectories/full-circle-T15.0-w0.0.csv create mode 100644 scripts/trajectories/full-circle-T15.0-w0.2.csv create mode 100644 scripts/trajectories/full-circle-T15.0-w0.4.csv create mode 100644 scripts/trajectories/full-circle-T15.0-w1.0.csv create mode 100644 scripts/trajectories/full_circle_in_15s-Euler.csv create mode 100644 scripts/trajectories/full_circle_in_15s.csv create mode 100644 scripts/trajectories/half-circle-front-over-top-15s.csv create mode 100644 scripts/trajectories/half-circle-over-top-15s.csv create mode 100644 scripts/trajectories/headrot-1.5s-Euler.csv create mode 100644 scripts/trajectories/headrot-1.5s.csv create mode 100644 scripts/trajectories/headrot-15s.csv create mode 100644 scripts/trajectories/linear-ypr-T15.0-w0.1-Euler.csv create mode 100644 scripts/trajectories/linear-ypr-T15.0-w0.1.csv create mode 100644 scripts/trajectories/rotate_yaw_pitch_roll1.csv create mode 100644 scripts/trajectories/rotate_yaw_pitch_roll2.csv create mode 100644 scripts/wmc_tool.exe create mode 100644 work_in_progress/IVAS-MP-HOA.zip create mode 100644 work_in_progress/readme.txt diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000..0e8b84b3af --- /dev/null +++ b/.clang-format @@ -0,0 +1,88 @@ +Language: Cpp +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignConsecutiveMacros: true +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never # "false" for clang-format version < 9, "Never" for newer versions +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +BinPackArguments: true +BinPackParameters: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Allman +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 0 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false # "true" would drop newline before closing curly bracket in array definitions, see lib_com/rom_com.c +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"options.h' + Priority: -2 + - Regex: '^"debug.h' + Priority: -1 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: true +IndentPPDirectives: None # not supported in clang-format version < 9 +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: None +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +ReflowComments: true +SortIncludes: false +SortUsingDeclarations: true +SpaceAfterCStyleCast: true +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements # should be "Never" for current code, but "ControlStatements" seems cleaner +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: true +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..ad70b85844 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,168 @@ +# CMake file for IVAS +# +# Usage with Unix Makefiles (Linux, OS/X): +# # create build directory +# mkdir build ; cd build +# # call CMake to generate build system, e.g. one of the following: +# cmake -D CMAKE_BUILD_TYPE=Debug ../ +# cmake -D CMAKE_BUILD_TYPE=Release ../ +# cmake -D CMAKE_BUILD_TYPE=Debug -D TARGET_PLATFORM=x86_64 ../ +# # build project +# make -j8 +# +# Usage with Visual Studio +# 1) download CMake from https://cmake.org/download/, don't use the Cygwin version! +# 2.1) build project using IDE +# In CMake GUI select the source dir (root of stereo-evs) and a new binary directory +# and press "Configure" and "Generate". Then open the Visual Studio solution file generated +# in the build directory. +# 2.2) build project using command line +# # create build directory +# mkdir build ; cd build +# # call CMake to generate build system, e.g. one of the following: +# cmake ../ +# cmake -G "Visual Studio 12 2013" ../ +# cmake -G "Visual Studio 12 2013 Win64" ../ +# # open the Visual Studio solution file generated in the build directory +# # or build on command line, e.g.: +# cmake --build . --config Debug +# cmake --build . --config Release + + +cmake_minimum_required(VERSION 3.1) + +set(CMAKE_C_STANDARD 99) + + +# configuration options for UNIX +if(UNIX) + set(TARGET_PLATFORM "" CACHE STRING "i686 / x86_64") + set(CLANG "" CACHE STRING "1=msan / 2=asan / 3=usan") + set(GCOV OFF CACHE BOOL "enable GCOV") + set(STRIP OFF CACHE BOOL "enable STRIP") + + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "") + endif() + # TARGET_PLATFORM + if("${TARGET_PLATFORM}" MATCHES "i386" OR + "${TARGET_PLATFORM}" MATCHES "i586" OR + "${TARGET_PLATFORM}" MATCHES "i686" + ) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") + elseif("${TARGET_PLATFORM}" MATCHES "x86_64") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m64") + endif() + # C compiler flags + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wcast-qual -Wall -W -Wextra -Wno-long-long") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror-implicit-function-declaration -Wno-unused-parameter -Wno-unused-function") + # CLANG + if(CLANG) + find_program(clangBin NAMES /home/amm-archiv/soft/Linux/clang/current/bin/clang clang REQUIRED) + set(CMAKE_C_COMPILER "${clangBin}" CACHE STRING "") + if("${CLANG}" MATCHES "1" OR "${CLANG}" MATCHES "msan") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=memory") + elseif("${CLANG}" MATCHES "2" OR "${CLANG}" MATCHES "asan") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") + elseif("${CLANG}" MATCHES "3" OR "${CLANG}" MATCHES "usan") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") + endif() + endif() + # GCOV + if(GCOV) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage") + endif() + # STRIP + if(STRIP) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdata-sections -ffunction-sections") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-gc-sections -static") + endif() + + message("CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}") + message("CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}") + # write settings in CMake cache + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "") + set(CMAKE_C_FLAGS_DEBUG "-O0 -g3" CACHE STRING "") + set(CMAKE_C_FLAGS_RELEASE "-O2 -DRELEASE" CACHE STRING "") # TODO should contain -DNDEBUG to disable assert() +elseif(WIN32) + # MSVC compiler flags + add_definitions( + -D_CRT_SECURE_NO_WARNINGS + /MP + ) + # CMake sets /W3 by default, until CMake version 3.15. Instead of setting /W4 separately, replace in existing settings + string(REGEX REPLACE "/W3" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +endif() + +# configuration options for all platforms +set(WMOPS OFF CACHE BOOL "enable WMOPS") +if(WMOPS) + add_definitions("-DWMOPS=1") +endif() + + +project(stereo-evs) +set_property(GLOBAL PROPERTY USE_FOLDERS ON) # make Visual Studio projects look nicer +include(CTest) + +include_directories( + lib_com + lib_debug + lib_dec + lib_enc + lib_util +) + +file(GLOB libComSrcs "lib_com/*.c") +file(GLOB libComHeaders "lib_com/*.h") +add_library(lib_com ${libComSrcs} ${libComHeaders}) +if(UNIX) + target_link_libraries(lib_com m) +endif() + +file(GLOB libDebugSrcs "lib_debug/*.c") +file(GLOB libDebugHeaders "lib_debug/*.h") +add_library(lib_debug ${libDebugSrcs} ${libDebugHeaders}) + +file(GLOB libEncSrcs "lib_enc/*.c") +file(GLOB libEncHeaders "lib_enc/*.h") +add_library(lib_enc ${libEncSrcs} ${libEncHeaders}) +target_link_libraries(lib_enc lib_com lib_debug) + +file(GLOB libDecSrcs "lib_dec/*.c") +file(GLOB libDecHeaders "lib_dec/*.h") +add_library(lib_dec ${libDecSrcs} ${libDecHeaders}) +target_link_libraries(lib_dec lib_com lib_debug) + +file(GLOB libUtilSrcs "lib_util/*.c") +file(GLOB libUtilHeaders "lib_util/*.h") +add_library(lib_util ${libUtilSrcs} ${libUtilHeaders}) + +add_executable(IVAS_cod apps/encoder.c) +target_link_libraries(IVAS_cod lib_enc lib_util) +if(WIN32) + target_link_libraries(IVAS_cod Ws2_32) +endif() + +add_executable(IVAS_dec apps/decoder.c) +target_link_libraries(IVAS_dec lib_dec lib_util) +if(WIN32) + target_link_libraries(IVAS_dec Ws2_32) +endif() + +if(${IVAS_BUILD_PRERENDERER}) + add_executable(IVAS_prerenderer + scripts/prerenderer/prerenderer.c + ${libEncSrcs} + ${libDecSrcs} + ) + target_link_libraries(IVAS_prerenderer lib_com lib_dec lib_debug lib_util) +endif() diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..0514bf0a09 --- /dev/null +++ b/Makefile @@ -0,0 +1,203 @@ +# GNU Makefile + +# Paths +SRC_LIBCOM = lib_com +SRC_LIBDEBUG = lib_debug +SRC_LIBDEC = lib_dec +SRC_LIBENC = lib_enc +SRC_LIBUTIL = lib_util +SRC_APP = apps +BUILD = build +OBJDIR = obj + +# Dirs for python unittests +UTESTS_SCRIPT_DIR = scripts/ivas_pytests +UTESTS_DIR = $(UTESTS_SCRIPT_DIR)/tests/unit_tests +UTESTS_CREND_DIR = $(UTESTS_DIR)/crend + +# Source paths for python unittests +SRC_UTESTS = $(UTESTS_CREND_DIR) + + +SRC_DIRS = $(sort -u $(SRC_LIBCOM) $(SRC_LIBDEBUG) $(SRC_LIBDEC) $(SRC_LIBENC) $(SRC_LIBUTIL) $(SRC_APP) $(SRC_UTESTS)) + +# Name of CLI binaries +CLI_APIDEC ?= IVAS_dec +CLI_APIENC ?= IVAS_cod +LIB_LIBCOM ?= libivascom.a +LIB_LIBDEBUG ?= libivasdebug.a +LIB_LIBDEC ?= libivasdec.a +LIB_LIBENC ?= libivasenc.a +LIB_LIBUTIL ?= libivasutil.a + +CLI_UTESTS_CREND ?= IVAS_crend_unit_test + +# Default tool settings +CC ?= gcc +RM ?= rm -f +AR ?= ar + +# Detect system +UNAME_S := $(shell uname -s) + +# Switches for cross-platform builds (i.e. build 32 bit code on 64 bit platforms) +ifneq "$(TARGET_PLATFORM)" "" +ifeq ("$(TARGET_PLATFORM)", "$(findstring $(TARGET_PLATFORM), i386 i586 i686)") + CFLAGS += -m32 + LDFLAGS += -m32 +endif + +ifeq ("$(TARGET_PLATFORM)", "$(findstring $(TARGET_PLATFORM), x86_64)") + CFLAGS += -m64 + LDFLAGS += -m64 +endif +endif + +ifndef VERBOSE +QUIET_CC = @echo ' ' Compiling $<; +QUIET_LINK= @echo ' ' Linking $@; +QUIET_AR = @echo ' ' Archiving $@; +QUIET = @ +endif + +# C compiler flags +CFLAGS += -std=c99 -pedantic -Wcast-qual -Wall -W -Wextra -Wno-long-long \ + -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ + -Werror-implicit-function-declaration \ + -Wno-unused-function -Wno-implicit-fallthrough + +# libs to link +LDLIBS += -lm + +# Clang sanitizer compiler options +CCCLANG = clang +ifeq "$(CLANG)" "1" +CC = $(CCCLANG) +CFLAGS += -fsanitize=memory +LDFLAGS += -fsanitize=memory +endif +ifeq "$(CLANG)" "2" +CC = $(CCCLANG) +CFLAGS += -fsanitize=address +LDFLAGS += -fsanitize=address +endif +ifeq "$(CLANG)" "3" +CC = $(CCCLANG) +CFLAGS += -fsanitize=undefined +LDFLAGS += -fsanitize=undefined +endif + +ifeq "$(RELEASE)" "1" +CFLAGS += -DRELEASE +OPTIM ?= 2 +endif + +ifneq "$(DEBUG)" "0" +CFLAGS += -g3 +LDFLAGS += -g3 +endif + +ifeq "$(GCOV)" "1" +CFLAGS += -fprofile-arcs -ftest-coverage +LDFLAGS += -fprofile-arcs -ftest-coverage +endif + +ifeq "$(STRIP)" "1" +CFLAGS += -fdata-sections -ffunction-sections +ifneq ($(UNAME_S),Darwin) +LDFLAGS += -Wl,-gc-sections -static +else +LDFLAGS += -Wl,-dead_strip +endif +endif + +OPTIM ?= 0 +CFLAGS += -O$(OPTIM) + +CFLAGS += $(foreach DIR,$(SRC_DIRS),-I$(DIR)) + +# Source file search paths +VPATH = $(SRC_DIRS) + +############################################################################### + +SRCS_LIBCOM = $(foreach DIR,$(SRC_LIBCOM),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBDEBUG = $(foreach DIR,$(SRC_LIBDEBUG),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBDEC = $(foreach DIR,$(SRC_LIBDEC),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBENC = $(foreach DIR,$(SRC_LIBENC),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBUTIL = $(foreach DIR,$(SRC_LIBUTIL),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) + +SRCS_UTESTS_CREND = $(foreach DIR,$(UTESTS_CREND_DIR),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) + +OBJS_LIBCOM = $(addprefix $(OBJDIR)/,$(SRCS_LIBCOM:.c=.o)) +OBJS_LIBDEBUG = $(addprefix $(OBJDIR)/,$(SRCS_LIBDEBUG:.c=.o)) +OBJS_LIBDEC = $(addprefix $(OBJDIR)/,$(SRCS_LIBDEC:.c=.o)) +OBJS_LIBENC = $(addprefix $(OBJDIR)/,$(SRCS_LIBENC:.c=.o)) +OBJS_LIBUTIL = $(addprefix $(OBJDIR)/,$(SRCS_LIBUTIL:.c=.o)) +OBJS_CLI_APIDEC = $(OBJDIR)/decoder.o +OBJS_CLI_APIENC = $(OBJDIR)/encoder.o + +OBJS_CLI_UTESTS_CREND = $(addprefix $(OBJDIR)/,$(SRCS_UTESTS_CREND:.c=.o)) + +OBJS_UTESTS = $(OBJS_CLI_UTESTS_CREND) + + +DEPS = $(addprefix $(OBJDIR)/,$(SRCS_LIBCOM:.c=.P) $(SRCS_LIBDEBUG:.c=.P) $(SRCS_LIBDEC:.c=.P) \ + $(SRCS_LIBENC:.c=.P) $(SRCS_LIBUTIL:.c=.P)) + +############################################################################### + +.PHONY: all clean clean_unittests clean_all +.NOTPARALLEL: clean clean_unittests clean_all + +all: $(CLI_APIENC) $(CLI_APIDEC) + +$(OBJDIR): + $(QUIET)mkdir -p $(OBJDIR) + +$(LIB_LIBCOM): $(OBJS_LIBCOM) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBDEC): $(OBJS_LIBDEC) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBDEBUG): $(OBJS_LIBDEBUG) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBENC): $(OBJS_LIBENC) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBUTIL): $(OBJS_LIBUTIL) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(CLI_APIENC): $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBUTIL) $(OBJS_CLI_APIENC) + $(QUIET_LINK)$(CC) $(LDFLAGS) $(OBJS_CLI_APIENC) -L. -livasutil -livasenc -livascom -livasdebug $(LDLIBS) -o $(CLI_APIENC) + +$(CLI_APIDEC): $(LIB_LIBDEC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBUTIL) $(OBJS_CLI_APIDEC) + $(QUIET_LINK)$(CC) $(OBJS_CLI_APIDEC) $(LDFLAGS) -L. -livasutil -livasdec -livascom -livasdebug $(LDLIBS) -o $(CLI_APIDEC) + +$(CLI_UTESTS_CREND): $(LIB_LIBDEC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBENC) $(LIB_LIBUTIL) $(OBJS_CLI_UTESTS_CREND) + $(QUIET_LINK)$(CC) $(OBJS_CLI_UTESTS_CREND) $(LDFLAGS) -L. -livasutil -livasdec -livascom -livasdebug $(LDLIBS) -o $(UTESTS_CREND_DIR)/$(CLI_UTESTS_CREND) + +unittests: $(CLI_UTESTS_CREND) + +libs: $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBDEC) $(LIB_LIBUTIL) + +clean: clean_unittests + $(QUIET)$(RM) $(OBJS_LIBENC) $(OBJS_LIBDEC) $(DEPS) + $(QUIET)$(RM) $(DEPS:.P=.d) + $(QUIET)test ! -d $(OBJDIR) || rm -rf $(OBJDIR) + $(QUIET)$(RM) $(CLI_APIENC) $(CLI_APIDEC) $(CLI_PRD) $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBDEC) $(LIB_LIBUTIL) + +clean_unittests: + $(QUIET)$(RM) $(OBJS_UTESTS) + $(QUIET)$(RM) $(UTESTS_CREND_DIR)/$(CLI_UTESTS_CREND) + +$(OBJDIR)/%.o : %.c | $(OBJDIR) + $(QUIET_CC)$(CC) $(CFLAGS) -c -MD -o $@ $< + @cp $(OBJDIR)/$*.d $(OBJDIR)/$*.P; \ + sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ + -e '/^$$/ d' -e 's/$$/ :/' < $(OBJDIR)/$*.d >> $(OBJDIR)/$*.P; \ + $(RM) $(OBJDIR)/$*.d + +-include $(DEPS) diff --git a/Workspace_msvc/Workspace_msvc.sln b/Workspace_msvc/Workspace_msvc.sln new file mode 100644 index 0000000000..be693e81cc --- /dev/null +++ b/Workspace_msvc/Workspace_msvc.sln @@ -0,0 +1,114 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.902 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_dec", "lib_dec.vcxproj", "{E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_enc", "lib_enc.vcxproj", "{824DA4CF-06F0-45C9-929A-8792F0E19C3E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_com", "lib_com.vcxproj", "{39EC200D-7795-4FF8-B214-B24EDA5526AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_util", "lib_util.vcxproj", "{2FA8F384-0775-F3B7-F8C3-85209222FC70}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_debug", "lib_debug.vcxproj", "{54509728-928B-44D9-A118-A6F92F08B34F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "decoder", "decoder.vcxproj", "{E3DCBC31-7FC9-D127-E000-529F8460D5FD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "encoder", "encoder.vcxproj", "{B3FC9DFC-7268-8660-7C0D-B60BAF02C554}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{51160D4C-55C9-4C16-A792-D94507225746}" + ProjectSection(SolutionItems) = preProject + ..\.clang-format = ..\.clang-format + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ivas_crend_unit_test", "..\scripts\ivas_pytests\tests\unit_tests\crend\ivas_crend_unit_test.vcxproj", "{32354377-ACA7-40F9-9A0E-87FC956F0B78}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Unittests|Win32 = Unittests|Win32 + Unittests|x64 = Unittests|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.Build.0 = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.ActiveCfg = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.Build.0 = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|x64.ActiveCfg = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Unittests|Win32.Build.0 = Unittests|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Unittests|x64.ActiveCfg = Unittests|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Debug|Win32.ActiveCfg = Debug|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Debug|Win32.Build.0 = Debug|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Debug|x64.ActiveCfg = Debug|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Release|Win32.ActiveCfg = Release|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Release|Win32.Build.0 = Release|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Release|x64.ActiveCfg = Release|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Unittests|Win32.Build.0 = Unittests|Win32 + {824DA4CF-06F0-45C9-929A-8792F0E19C3E}.Unittests|x64.ActiveCfg = Unittests|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.Build.0 = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|x64.ActiveCfg = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.ActiveCfg = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.Build.0 = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|x64.ActiveCfg = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Unittests|Win32.Build.0 = Unittests|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Unittests|x64.ActiveCfg = Unittests|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.ActiveCfg = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.Build.0 = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|x64.ActiveCfg = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.ActiveCfg = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.Build.0 = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|x64.ActiveCfg = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Unittests|Win32.Build.0 = Unittests|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Unittests|x64.ActiveCfg = Unittests|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.ActiveCfg = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.Build.0 = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|x64.ActiveCfg = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.ActiveCfg = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.Build.0 = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|x64.ActiveCfg = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Unittests|Win32.Build.0 = Unittests|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Unittests|x64.ActiveCfg = Unittests|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Debug|Win32.ActiveCfg = Debug|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Debug|Win32.Build.0 = Debug|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Debug|x64.ActiveCfg = Debug|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Release|Win32.ActiveCfg = Release|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Release|Win32.Build.0 = Release|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Release|x64.ActiveCfg = Release|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Unittests|Win32.Build.0 = Unittests|Win32 + {E3DCBC31-7FC9-D127-E000-529F8460D5FD}.Unittests|x64.ActiveCfg = Unittests|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Debug|Win32.ActiveCfg = Debug|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Debug|Win32.Build.0 = Debug|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Debug|x64.ActiveCfg = Debug|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Release|Win32.ActiveCfg = Release|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Release|Win32.Build.0 = Release|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Release|x64.ActiveCfg = Release|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Unittests|Win32.Build.0 = Unittests|Win32 + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554}.Unittests|x64.ActiveCfg = Unittests|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Debug|Win32.ActiveCfg = Debug|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Debug|x64.ActiveCfg = Debug|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Release|Win32.ActiveCfg = Release|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Release|x64.ActiveCfg = Release|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Unittests|Win32.ActiveCfg = Release|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Unittests|Win32.Build.0 = Release|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Unittests|x64.ActiveCfg = Release|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Unittests|x64.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {74E3E3B8-3E51-4003-816B-8ED3057AAC21} + EndGlobalSection +EndGlobal diff --git a/Workspace_msvc/decoder.vcxproj b/Workspace_msvc/decoder.vcxproj new file mode 100644 index 0000000000..8a71725962 --- /dev/null +++ b/Workspace_msvc/decoder.vcxproj @@ -0,0 +1,242 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Unittests + Win32 + + + + decoder + {E3DCBC31-7FC9-D127-E000-529F8460D5FD} + decoder + 10.0.17763.0 + + + + Application + v141 + false + MultiByte + + + Application + v141 + false + MultiByte + + + Application + v141 + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + ..\ + .\Debug_$(ProjectName)\ + false + false + IVAS_dec + + + ..\ + .\Debug_$(ProjectName)\ + false + false + IVAS_dec + + + ..\ + .\Release_$(ProjectName)\ + false + false + IVAS_dec + + + + + + + $(IntDir)$(ProjectName).tlb + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;$(Macros);%(PreprocessorDefinitions) + + EnableFastChecks + MultiThreadedDebug + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + + $(OutDir)$(TargetName).exe + true + + true + $(IntDir)$(ProjectName).pdb + Console + false + + MachineX86 + + + + + + + + + $(IntDir)$(ProjectName).tlb + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;$(Macros);%(PreprocessorDefinitions) + + + EnableFastChecks + MultiThreadedDebug + false + + + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + + + $(OutDir)$(TargetName).exe + true + + + true + $(IntDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + $(IntDir)$(ProjectName).tlb + + + + MaxSpeed + AnySuitable + false + Neither + false + false + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + Precise + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + + Default + %(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + $(OutDir)$(TargetName).exe + true + + false + $(IntDir)$(ProjectName).pdb + Console + false + + MachineX86 + libcmtd.lib + + + + + + + + {e822ddaf-0f5f-4cd0-a694-38ae69de74d3} + false + + + {2fa8f384-0775-f3b7-f8c3-85209222fc70} + false + + + + + + + + + + + \ No newline at end of file diff --git a/Workspace_msvc/encoder.vcxproj b/Workspace_msvc/encoder.vcxproj new file mode 100644 index 0000000000..755e404b67 --- /dev/null +++ b/Workspace_msvc/encoder.vcxproj @@ -0,0 +1,256 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Unittests + Win32 + + + + encoder + {B3FC9DFC-7268-8660-7C0D-B60BAF02C554} + encoder + 10.0.17763.0 + + + + Application + v141 + false + MultiByte + + + Application + v141 + false + MultiByte + + + Application + v141 + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + ..\ + .\Debug_$(ProjectName)\ + false + false + IVAS_cod + + + ..\ + .\Debug_$(ProjectName)\ + false + false + IVAS_cod + + + ..\ + .\Release_$(ProjectName)\ + false + false + IVAS_cod + + + + + + + $(IntDir)$(ProjectName).tlb + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;$(Macros);%(PreprocessorDefinitions) + + EnableFastChecks + MultiThreadedDebug + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + + $(OutDir)$(TargetName).exe + true + + false + true + $(IntDir)$(ProjectName).pdb + Console + + false + + MachineX86 + + + + + + + + + + + + $(IntDir)$(ProjectName).tlb + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;$(Macros);%(PreprocessorDefinitions) + + + EnableFastChecks + MultiThreadedDebug + false + + + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + + + $(OutDir)$(TargetName).exe + true + + + false + true + $(IntDir)$(ProjectName).pdb + Console + + + false + + + MachineX86 + + + + + + + + + + + + $(IntDir)$(ProjectName).tlb + + + + MaxSpeed + AnySuitable + false + Neither + false + false + ..\lib_enc;..\lib_dec;..\lib_com;..\lib_util;..\lib_debug;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + Precise + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + + Default + %(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + $(OutDir)$(TargetName).exe + true + + false + $(IntDir)$(ProjectName).pdb + Console + false + + MachineX86 + + + + + + + + {824da4cf-06f0-45c9-929a-8792f0e19c3e} + false + + + {2fa8f384-0775-f3b7-f8c3-85209222fc70} + false + + + + + + + + + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_com.vcxproj b/Workspace_msvc/lib_com.vcxproj new file mode 100644 index 0000000000..a8063b8498 --- /dev/null +++ b/Workspace_msvc/lib_com.vcxproj @@ -0,0 +1,362 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Unittests + Win32 + + + + {39EC200D-7795-4FF8-B214-B24EDA5526AE} + common + 10.0.17763.0 + + + + StaticLibrary + v141 + false + MultiByte + + + StaticLibrary + v141 + false + MultiByte + + + StaticLibrary + v141 + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + libivascom + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + libivascom + + + .\Release_$(ProjectName)\ + .\Release_$(ProjectName)\ + libivascom + + + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) + + EnableFastChecks + MultiThreadedDebug + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) + + + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + MaxSpeed + AnySuitable + false + Neither + false + false + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + + + $(IntDir)$(ProjectName).pdb + Level4 + true + + Default + %(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_com.vcxproj.filters b/Workspace_msvc/lib_com.vcxproj.filters new file mode 100644 index 0000000000..c33a360403 --- /dev/null +++ b/Workspace_msvc/lib_com.vcxproj.filters @@ -0,0 +1,551 @@ + + + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_evs_c + + + common_evs_c + + + common_evs_c + + + common_evs_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_all_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_evs_c + + + common_evs_c + + + common_evs_c + + + common_evs_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + common_ivas_c + + + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + common_h + + + + common_h + + + + + + {890c2f45-9385-4fce-859b-6a65469e8dc0} + + + {201ea764-9626-4dca-9cc4-5b4106f8b8b2} + + + {fbb860e2-79d0-45b1-ada1-c3a0a369ce2c} + + + {b95b7bed-a666-4a00-9332-2b528638503e} + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_debug.vcxproj b/Workspace_msvc/lib_debug.vcxproj new file mode 100644 index 0000000000..58dbb6aab7 --- /dev/null +++ b/Workspace_msvc/lib_debug.vcxproj @@ -0,0 +1,169 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Unittests + Win32 + + + + {54509728-928B-44D9-A118-A6F92F08B34F} + debug + 10.0.17763.0 + + + + StaticLibrary + v141 + MultiByte + + + StaticLibrary + v141 + MultiByte + + + StaticLibrary + v141 + MultiByte + true + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + libivasdebug + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + libivasdebug + + + .\Release_$(ProjectName)\ + .\Release_$(ProjectName)\ + libivasdebug + + + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) + false + + EnableFastChecks + MultiThreadedDebug + false + $(IntDir)$(ProjectName).pdb + Level4 + OldStyle + Default + %(DisableSpecificWarnings) + + + $(OutDir)$(TargetName).lib + + + + + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) + false + + + EnableFastChecks + MultiThreadedDebug + false + $(IntDir)$(ProjectName).pdb + Level4 + OldStyle + Default + %(DisableSpecificWarnings) + + + $(OutDir)$(TargetName).lib + + + + + + + + MaxSpeed + AnySuitable + false + false + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + $(IntDir)$(ProjectName).pdb + Level4 + + Default + %(DisableSpecificWarnings) + + + $(OutDir)$(TargetName).lib + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_dec.vcxproj b/Workspace_msvc/lib_dec.vcxproj new file mode 100644 index 0000000000..94abc50aeb --- /dev/null +++ b/Workspace_msvc/lib_dec.vcxproj @@ -0,0 +1,431 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Unittests + Win32 + + + + lib_dec + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3} + evs_dec + 10.0.17763.0 + + + StaticLibrary + v141 + false + MultiByte + + + StaticLibrary + v141 + false + MultiByte + + + + StaticLibrary + v141 + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + false + false + libivasdec + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + false + false + libivasdec + + + .\Release_$(ProjectName)\ + .\Release_$(ProjectName)\ + false + false + libivasdec + + + + + + + .\Debug\$(ProjectName).tlb + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) + + EnableFastChecks + MultiThreadedDebug + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + + .\Debug\$(ProjectName).tlb + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) + + + EnableFastChecks + MultiThreadedDebug + false + + + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + $(IntDir)$(ProjectName).tlb + + + + MaxSpeed + AnySuitable + false + Neither + false + false + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + + Default + %(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {39ec200d-7795-4ff8-b214-b24eda5526ae} + false + + + {54509728-928b-44d9-a118-a6f92f08b34f} + false + + + + + + + + + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_dec.vcxproj.filters b/Workspace_msvc/lib_dec.vcxproj.filters new file mode 100644 index 0000000000..13ac1ed646 --- /dev/null +++ b/Workspace_msvc/lib_dec.vcxproj.filters @@ -0,0 +1,650 @@ + + + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_evs_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_all_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_evs_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + dec_h + + + + dec_h + + + dec_h + + + + + {9d223c16-7845-4b37-b6fe-30de409ab87b} + + + {0df7c383-e6a6-4d1c-a261-eea34adef2fc} + + + {71a041e7-3b8b-4642-ab14-2b6a79aeb0a8} + + + {e4a97be1-bcf8-43d3-b941-594f39f2d41b} + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_enc.vcxproj b/Workspace_msvc/lib_enc.vcxproj new file mode 100644 index 0000000000..7eb81ef8e2 --- /dev/null +++ b/Workspace_msvc/lib_enc.vcxproj @@ -0,0 +1,426 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Unittests + Win32 + + + + lib_enc + {824DA4CF-06F0-45C9-929A-8792F0E19C3E} + evs_enc + 10.0.17763.0 + + + + StaticLibrary + v141 + false + MultiByte + + + StaticLibrary + v141 + false + MultiByte + + + StaticLibrary + v141 + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + false + false + libivasenc + + + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + false + false + libivasenc + + + .\Release_$(ProjectName)\ + .\Release_$(ProjectName)\ + false + false + libivasenc + + + + + + + $(IntDir)$(ProjectName).tlb + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) + + EnableFastChecks + MultiThreadedDebug + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + + + + + $(IntDir)$(ProjectName).tlb + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) + + + EnableFastChecks + MultiThreadedDebug + false + + + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + %(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + + + + + $(IntDir)$(ProjectName).tlb + + + + MaxSpeed + AnySuitable + false + Neither + false + false + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + Precise + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + + Default + %(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + WS2_32.lib; %(AdditionalDependencies) + $(OutDir)$(TargetName).lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {39ec200d-7795-4ff8-b214-b24eda5526ae} + false + + + {54509728-928b-44d9-a118-a6f92f08b34f} + false + + + + + + + + + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_enc.vcxproj.filters b/Workspace_msvc/lib_enc.vcxproj.filters new file mode 100644 index 0000000000..5874c4a627 --- /dev/null +++ b/Workspace_msvc/lib_enc.vcxproj.filters @@ -0,0 +1,617 @@ + + + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_evs_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_all_c + + + enc_evs_c + + + enc_evs_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_all_c + + + enc_evs_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + enc_ivas_c + + + + + enc_h + + + enc_h + + + enc_h + + + enc_h + + + + + + {b7ee0526-8b79-4554-a3ec-04e51d38475f} + + + {dabed049-70a2-48f2-9da6-3b81a3664033} + + + {5717f1cb-c593-400b-b23a-45c422fd95c8} + + + {6cccabbe-510f-43d3-90e1-8ed5ea3837d7} + + + \ No newline at end of file diff --git a/Workspace_msvc/lib_util.vcxproj b/Workspace_msvc/lib_util.vcxproj new file mode 100644 index 0000000000..ae4cb9ef3c --- /dev/null +++ b/Workspace_msvc/lib_util.vcxproj @@ -0,0 +1,189 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Unittests + Win32 + + + + {2FA8F384-0775-F3B7-F8C3-85209222FC70} + utility + 10.0.17763.0 + + + + StaticLibrary + v141 + MultiByte + + + StaticLibrary + v141 + MultiByte + + + StaticLibrary + v141 + MultiByte + true + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + true + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + libivasutil + + + true + .\Debug_$(ProjectName)\ + .\Debug_$(ProjectName)\ + libivasutil + + + false + .\Release_$(ProjectName)\ + .\Release_$(ProjectName)\ + libivasutil + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);ZLIB_WINAPI;%(PreprocessorDefinitions) + false + + EnableFastChecks + MultiThreadedDebug + false + $(IntDir)$(ProjectName).pdb + Level4 + OldStyle + Default + %(DisableSpecificWarnings) + + + $(OutDir)$(TargetName).lib + + + + + Disabled + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);ZLIB_WINAPI;%(PreprocessorDefinitions) + false + + + EnableFastChecks + MultiThreadedDebug + false + $(IntDir)$(ProjectName).pdb + Level4 + OldStyle + Default + %(DisableSpecificWarnings) + + + $(OutDir)$(TargetName).lib + + + + + MaxSpeed + AnySuitable + false + false + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;$(Macros);ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + $(IntDir)$(ProjectName).pdb + Level4 + + Default + %(DisableSpecificWarnings) + + + $(OutDir)$(TargetName).lib + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/decoder.c b/apps/decoder.c new file mode 100644 index 0000000000..73ba2ab622 --- /dev/null +++ b/apps/decoder.c @@ -0,0 +1,1885 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "lib_dec.h" +#include "cmdl_tools.h" +#include "audio_file_writer.h" +#include "bitstream_reader.h" +#include "masa_file_writer.h" +#include "ism_file_writer.h" +#include "ls_custom_file_reader.h" +#include "hrtf_file_reader.h" +#include "head_rotation_file_reader.h" +#include "jbm_file_writer.h" +#include "evs_rtp_payload.h" +#include +#include +#ifdef WMOPS +#include "PROM_Size_lib_com.h" +#include "PROM_Size_lib_dec.h" +#include "wmops.h" +#endif +#ifdef RAM_COUNTING_TOOL +#include "mem_count.h" +#else +#include +#endif +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "render_config_reader.h" + +#define WMC_TOOL_MAN + +/*------------------------------------------------------------------------------------------* + * Local constants, enums, structures + *------------------------------------------------------------------------------------------*/ + +#if !defined( DEBUGGING ) && !defined( WMOPS ) +static +#endif + int32_t frame = 0; /* Counter of frames */ + +#define MIN_NUM_BITS_ACTIVE_FRAME 56 +#define NUM_BITS_SID_IVAS_4K4 88 +#define NUM_BITS_SID_IVAS_7K8 156 +#define NUM_BITS_SID_IVAS_9K3 186 +#define NUM_BITS_SID_IVAS_10K2 204 +#define META_LINE_LENGTH 200 +#define MAX_FRAME_SIZE ( 48000 / 50 ) +#define MAX_NUM_OUTPUT_CHANNELS 16 +#define MAX_OUTPUT_PCM_BUFFER_SIZE ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE ) + +#define IVAS_PUBLIC_ORIENT_TRK_REF 0 +#define IVAS_PUBLIC_ORIENT_TRK_AVG 1 + + +typedef struct +{ + char *inputBitstreamFilename; + char *outputWavFilename; + IVAS_DEC_MODE decMode; + int32_t output_Fs; + IVAS_DEC_AUDIO_CONFIG outputFormat; + bool quietModeEnabled; + bool delayCompensationEnabled; + bool voipMode; + bool enableHeadRotation; + char *headrotTrajFileName; +#ifdef SUPPORT_JBM_TRACEFILE + char *jbmTraceFilename; +#endif + char *jbmOffsetFilename; + char *FEPatterFileName; + float FER; + bool hrtfReaderEnabled; + char *hrtfFileName; + IVAS_DEC_INPUT_FORMAT inputFormat; +#ifdef DEBUGGING + bool forceSubframeBinauralization; + IVAS_DEC_FORCED_REND_MODE forcedRendMode; +#endif + bool customLsOutputEnabled; + char *customLsSetupFilename; + int16_t orientation_tracking; + float no_diegetic_pan; + bool renderConfigEnabled; + char *renderConfigFilename; +#ifdef DEBUG_FOA_AGC + FILE *agcBitstream; /* temporary */ +#endif + +} DecArguments; + + +/*------------------------------------------------------------------------------------------* + * Local functions prototypes + *------------------------------------------------------------------------------------------*/ + +static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg ); +static void usage_dec( void ); +#ifdef DEBUGGING +static int16_t app_own_random( int16_t *seed ); +#endif +static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); +static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec ); +#ifdef DEBUGGING +static IVAS_DEC_FORCED_REND_MODE parseForcedRendModeDec( char *forcedRendModeChar ); +#endif + + +#ifdef WMOPS +/*------------------------------------------------------------------------------------------* + * Function to print complexity & memory estimates at the decoder + *------------------------------------------------------------------------------------------*/ + +extern int16_t *ptr_base_stack; +extern int16_t *ptr_base_stack; +extern int16_t *ptr_max_stack; +extern int32_t wc_frame; +extern char location_max_stack[256]; +void print_stack_call_tree( void ); + +static void print_mem_dec( size_t SRAM_size ) +{ + fprintf( stdout, "\n\n --- Decoder memory usage --- \n\n" ); + + fprintf( stdout, "PROM size (decoder): %d words (or instructions)\n", PROM_Size_lib_dec ); + fprintf( stdout, "PROM size (common): %d words (or instructions)\n", PROM_Size_lib_com ); + fprintf( stdout, "Stack size (decoder): %ld words in %s() in frame #%d\n", ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) / sizeof( float ), location_max_stack, wc_frame ); + fprintf( stdout, "Table ROM size (decoder): %ld words\n", ( Const_Data_Size_rom_dec() + Const_Data_Size_ivas_rom_dec() ) / sizeof( float ) ); + fprintf( stdout, "Table ROM size (binaural renderer): %ld words\n", ( Const_Data_Size_ivas_rom_binauralRen() + Const_Data_Size_ivas_rom_TdBinauralR() + Const_Data_Size_ivas_rom_binaural_cr() ) / sizeof( float ) ); + fprintf( stdout, "Table ROM size (common): %ld words\n", ( Const_Data_Size_rom_com() + Const_Data_Size_ivas_rom_com() ) / sizeof( float ) ); +#ifdef RAM_COUNTING_TOOL + fprintf( stdout, "Static RAM size (decoder): %ld words\n\n", SRAM_size ); +#endif + print_stack_call_tree(); + + fprintf( stdout, "Note: this is an optimistic estimate of the memory consumption assuming\n" ); + fprintf( stdout, " that each variable (short, long or float) in the codec requires\n" ); + fprintf( stdout, " 32 bits of memory and may therefore be represented by 1 word.\n" ); + fprintf( stdout, " The following formula is used: sizeof('memory array')/sizeof(float)\n\n" ); +} +#endif + + +/*------------------------------------------------------------------------------------------* + * main() + * + * Main IVAS decoder function for command-line interface + *------------------------------------------------------------------------------------------*/ + +int main( + int argc, + char *argv[] ) +{ + bool mainFailed = true; /* Assume main failed until cleanup is reached without errors */ + DecArguments arg; + IVAS_DEC_HANDLE hIvasDec = NULL; + BS_READER_HANDLE hBsReader = NULL; + LsCustomFileReader *hLsCustomReader = NULL; + hrtfFileReader *hrtfReader = NULL; + HeadRotFileReader *headRotReader = NULL; + ivas_error error = IVAS_ERR_UNKNOWN; + int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE]; + RenderConfigReader *renderConfigReader = NULL; +#ifdef DEBUGGING + int32_t noClipping; + int32_t cnt_frames_limited; +#endif + +#ifdef WMOPS + size_t SRAM_size = 0; + reset_stack(); + reset_wmops(); +#endif + +#ifdef DEBUGGING + dbgargs( &argc, argv ); +#endif + +#ifdef RAM_COUNTING_TOOL + mem_count_init( 0, USE_32BITS ); +#endif + + /*------------------------------------------------------------------------------------------* + * Parse command-line arguments + *------------------------------------------------------------------------------------------*/ + + IVAS_DEC_PrintDisclaimer(); + + if ( !parseCmdlIVAS_dec( (int16_t) argc, argv, &arg ) ) + { + /* Error printout done in parseCmdlIVAS_dec() */ + goto cleanup; + } + + /*------------------------------------------------------------------------------------------* + * Open decoder handle + *------------------------------------------------------------------------------------------*/ + + if ( ( error = IVAS_DEC_Open( &hIvasDec, arg.decMode, arg.orientation_tracking, arg.no_diegetic_pan ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Open failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + /*------------------------------------------------------------------------------------------* + * Open input bitstream file + *------------------------------------------------------------------------------------------*/ + + if ( arg.inputFormat == IVAS_DEC_INPUT_FORMAT_G192 || arg.inputFormat == IVAS_DEC_INPUT_FORMAT_MIME ) + { + BS_READER_FORMAT bsReaderFormat = BS_READER_FORMAT_G192; + + if ( arg.inputFormat == IVAS_DEC_INPUT_FORMAT_MIME ) + { + bsReaderFormat = BS_READER_FORMAT_MIME; + } + + if ( BS_Reader_Open_filename( &hBsReader, arg.inputBitstreamFilename, bsReaderFormat ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nUnable to open %s\n\n", arg.inputBitstreamFilename ); + goto cleanup; + } + else + { + fprintf( stdout, "Input bitstream file: %s\n", arg.inputBitstreamFilename ); + } + } + + fprintf( stdout, "Output synthesis file: %s\n", arg.outputWavFilename ); + + /*------------------------------------------------------------------------------------------* + * Open HRTF file + *------------------------------------------------------------------------------------------*/ + + if ( arg.hrtfReaderEnabled ) + { + if ( ( ( error = hrtfFileReader_open( arg.hrtfFileName, &hrtfReader ) ) != IVAS_ERR_OK ) ) + { + fprintf( stderr, "\nError: Can't open HRTF binary file %s \n\n", arg.hrtfFileName ); + goto cleanup; + } + } + + /*------------------------------------------------------------------------------------------* + * Open head-rotation file + *------------------------------------------------------------------------------------------*/ + + if ( arg.enableHeadRotation ) + { + if ( ( error = HeadRotationFileReader_open( arg.headrotTrajFileName, &headRotReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Can't open head-rotation file %s \n\n", arg.headrotTrajFileName ); + goto cleanup; + } + } + + /*------------------------------------------------------------------------------------------* + * Open custom loudspeaker layout file + *------------------------------------------------------------------------------------------*/ + + if ( arg.customLsOutputEnabled ) + { + if ( ( error = CustomLsReader_open( arg.customLsSetupFilename, &hLsCustomReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Can't open Custom loudspeaker setup file %s \n\n", arg.customLsSetupFilename ); + goto cleanup; + } + } + + /*------------------------------------------------------------------------------------------* + * Open renderer configuration reader file + *------------------------------------------------------------------------------------------*/ + + if ( arg.renderConfigEnabled ) + { + if ( ( error = RenderConfigReader_open( arg.renderConfigFilename, &renderConfigReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Can't open Renderer configuration file %s \n\n", arg.renderConfigFilename ); + goto cleanup; + } + } + + /*------------------------------------------------------------------------------------------* + * Configure the decoder + *------------------------------------------------------------------------------------------*/ + +#ifdef DEBUGGING + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.forceSubframeBinauralization ) ) != IVAS_ERR_OK ) +#else + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation ) ) != IVAS_ERR_OK ) +#endif + { + fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + +#ifdef DEBUGGING + /*-----------------------------------------------------------------* + * Preview bitstream and print config information + *-----------------------------------------------------------------*/ + + if ( arg.voipMode ) + { + IVAS_DEC_PrintConfig( hIvasDec, arg.quietModeEnabled, arg.voipMode ); + } + else + { + uint16_t bit_stream[IVAS_MAX_BITS_PER_FRAME + 4 * 8]; + int16_t num_bits; + int16_t bfi = 0; + do + { + if ( BS_Reader_ReadFrame_short( hBsReader, bit_stream, &num_bits, &bfi ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: input bitstream file %s couldn't be read\n\n", arg.inputBitstreamFilename ); + goto cleanup; + } + } while ( bfi || num_bits < MIN_NUM_BITS_ACTIVE_FRAME || num_bits == NUM_BITS_SID_IVAS_4K4 || num_bits == NUM_BITS_SID_IVAS_7K8 || num_bits == NUM_BITS_SID_IVAS_9K3 || num_bits == NUM_BITS_SID_IVAS_10K2 ); + + BS_Reader_Rewind( hBsReader ); + + IVAS_DEC_PrintConfigWithBitstream( hIvasDec, arg.quietModeEnabled, bit_stream, num_bits ); + } + + /*------------------------------------------------------------------------------------------* + * Binaural rendering mode: set and print info + *------------------------------------------------------------------------------------------*/ + + if ( arg.forcedRendMode != IVAS_DEC_FORCE_REND_UNFORCED ) + { + if ( ( error = IVAS_DEC_SetForcedRendMode( hIvasDec, arg.forcedRendMode ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Forcing binaural rendering mode failed (only TDREND and CLDFBREND are expected).\n\n" ); + goto cleanup; + } + + if ( arg.forcedRendMode == IVAS_DEC_FORCE_REND_TD_RENDERER ) + { + fprintf( stdout, "Forcing rendering to: TD renderer\n" ); + } + else if ( arg.forcedRendMode == IVAS_DEC_FORCE_REND_CLDFB_RENDERER ) + { + fprintf( stdout, "Forcing rendering to: CLDFB renderer\n" ); + } + } + + /*-----------------------------------------------------------------* + * Open Error pattern file for simulation + *-----------------------------------------------------------------*/ + + if ( arg.FEPatterFileName != NULL ) + { + if ( ( FEC_pattern = fopen( arg.FEPatterFileName, "rb" ) ) == NULL ) + { + fprintf( stderr, "Error: Missing or incorrect FEC filename specification\n\n" ); + usage_dec(); + goto cleanup; + } + } + + /*-----------------------------------------------------------------* + * Print information about FEC + *-----------------------------------------------------------------*/ + + if ( !arg.voipMode && ( arg.FEPatterFileName != NULL || arg.FER > 0 ) ) + { + if ( arg.FEPatterFileName != NULL ) + { + fprintf( stdout, "FEC: %s\n", arg.FEPatterFileName ); + } + else + { + fprintf( stdout, "FEC: %.2f %%\n", arg.FER ); + } + } +#else + IVAS_DEC_PrintConfig( hIvasDec, 1, arg.voipMode ); +#endif + + /*-------------------------------------------------------------------* + * Load renderer configuration from file + *--------------------------------------------------------------------*/ + + if ( arg.renderConfigEnabled ) + { + IVAS_RENDER_CONFIG_DATA renderConfig; + + /* sanity check */ + if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM ) + { + fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n" ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_GetRenderConfig( hIvasDec, &renderConfig ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_GetRenderConfig failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( RenderConfigReader_read( renderConfigReader, &renderConfig ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Failed to read renderer configuration from file %s\n", arg.renderConfigFilename ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_FeedRenderConfig( hIvasDec, renderConfig ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + /*------------------------------------------------------------------------------------------* + * Load custom loudspeaker layout data + *------------------------------------------------------------------------------------------*/ + + if ( arg.customLsOutputEnabled ) + { + IVAS_CUSTOM_LS_DATA hLsCustomData; + LS_CUSTOM_FILEREADER_ERROR lsCustomError; + + if ( ( lsCustomError = CustomLsFileReading( hLsCustomReader, &hLsCustomData ) ) != LS_CUSTOM_FILEREADER_NO_ERROR ) + { + fprintf( stderr, "\nError in reading Custom loudspeaker file %s: %s\n\n", arg.customLsSetupFilename, CustomLoudspeakerLayout_getError( lsCustomError ) ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_FeedCustomLsData( hIvasDec, hLsCustomData ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_FeedCustomLsData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + /*------------------------------------------------------------------------------------------* + * Load HRTF binary file data + *------------------------------------------------------------------------------------------*/ + + if ( arg.hrtfReaderEnabled ) + { + IVAS_DEC_HRTF_HANDLE hHrtfTD; + + IVAS_DEC_GetHrtfHandle( hIvasDec, &hHrtfTD ); + + if ( ( error = load_HRTF_binary( hHrtfTD, hrtfReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in loading HRTF binary file %s \n\n", arg.hrtfFileName ); + goto cleanup; + } + } + + /*-----------------------------------------------------------------* + * Decoding + *-----------------------------------------------------------------*/ + + if ( arg.voipMode ) + { + if ( arg.decMode != IVAS_DEC_MODE_EVS ) + { + fprintf( stderr, "\nError: VoIP not yet supported for decMode: %d\n\n", arg.decMode ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_EnableVoIP( hIvasDec, 60, arg.inputFormat ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nCould not enable VOIP: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + error = decodeVoIP( arg, hBsReader, hIvasDec ); + } + else + { + error = decodeG192( arg, hBsReader, headRotReader, hIvasDec, pcmBuf ); + } + + if ( error == IVAS_ERR_OK || error == IVAS_ERR_END_OF_FILE ) + { + if ( arg.quietModeEnabled ) + { + fprintf( stdout, "Decoding finished\n\n" ); + } + else + { + fprintf( stdout, "\nDecoding of %d frames finished\n\n", frame ); + } + } + else + { + fprintf( stdout, "Decoding finished prematurely\n\n" ); + goto cleanup; + } + +#ifdef DEBUGGING + if ( ( cnt_frames_limited = IVAS_DEC_GetCntFramesLimited( hIvasDec ) ) > 0 ) + { + fprintf( stdout, "Limiter applied in %d frames.\n\n", cnt_frames_limited ); + } + if ( ( noClipping = IVAS_DEC_GetNoCLipping( hIvasDec ) ) > 0 ) + { + fprintf( stdout, "Clipping (saturation) detected: %d samples clipped!!!\n\n", noClipping ); + } +#endif + + /*------------------------------------------------------------------------------------------* + * Close files and deallocate resources + *------------------------------------------------------------------------------------------*/ + + mainFailed = false; /* This will stay set to true if cleanup is reached via a goto due to an error */ + +cleanup: + + IVAS_DEC_Close( &hIvasDec ); + CustomLsReader_close( &hLsCustomReader ); + hrtfFileReader_close( &hrtfReader ); + HeadRotationFileReader_close( &headRotReader ); + + RenderConfigReader_close( &renderConfigReader ); + + if ( BS_Reader_Close( &hBsReader ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError while closing file: %s\nContinuing...\n\n", arg.inputBitstreamFilename ); + } + +#ifdef RAM_COUNTING_TOOL +#ifdef WMOPS + SRAM_size = +#endif + mem_count_summary( USE_DEFAULT ); +#endif +#ifdef WMOPS + print_wmops(); + print_mem_dec( SRAM_size ); +#endif + + if ( !arg.quietModeEnabled ) + { + printf( "\n" ); + } + +#ifdef DEBUGGING + dbgclose(); +#endif + + return mainFailed ? -1 : 0; +} + + +/*---------------------------------------------------------------------* + * cmdline2config() + * + * Translate command-line argument to output configuration + *---------------------------------------------------------------------*/ + +static IVAS_DEC_AUDIO_CONFIG cmdline2config( + char *argv ) +{ + IVAS_DEC_AUDIO_CONFIG output_config; + + char argv_to_upper[FILENAME_MAX]; + + strncpy( argv_to_upper, argv, sizeof( argv_to_upper ) - 1 ); + to_upper( argv_to_upper ); + + if ( strcmp( argv_to_upper, "EXT" ) == 0 ) /* external renderer */ + { + output_config = IVAS_DEC_OUTPUT_EXT; + } + else if ( strcmp( argv_to_upper, "MONO" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_MONO; + } + else if ( strcmp( argv_to_upper, "STEREO" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_STEREO; + } + else if ( strcmp( argv_to_upper, "5_1" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_5_1; + } + else if ( strcmp( argv_to_upper, "7_1" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_7_1; + } + else if ( strcmp( argv_to_upper, "5_1_2" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_5_1_2; + } + else if ( strcmp( argv_to_upper, "5_1_4" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_5_1_4; + } + else if ( strcmp( argv_to_upper, "7_1_4" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_7_1_4; + } + else if ( strcmp( argv_to_upper, "FOA" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_FOA; + } + else if ( strcmp( argv_to_upper, "HOA2" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_HOA2; + } + else if ( strcmp( argv_to_upper, "HOA3" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_HOA3; + } + else if ( strcmp( argv_to_upper, "BINAURAL" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_BINAURAL; + } + else if ( strcmp( argv_to_upper, "BINAURAL_ROOM" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_BINAURAL_ROOM; + } + else + { + output_config = IVAS_DEC_OUTPUT_LS_CUSTOM; + } + + return output_config; +} + + +/*---------------------------------------------------------------------* + * parseCmdlIVAS_dec() + * + * Decoder command-line parsing + *---------------------------------------------------------------------*/ + +static bool parseCmdlIVAS_dec( + int16_t argc, + char **argv, + DecArguments *arg ) +{ + int16_t i; + char argv_to_upper[FILENAME_MAX]; +#ifdef DEBUGGING + float ftmp; + char stmp[FILENAME_MAX]; + + arg->forcedRendMode = IVAS_DEC_FORCE_REND_UNFORCED; + arg->forceSubframeBinauralization = false; +#endif + arg->output_Fs = 48000; + arg->outputFormat = IVAS_DEC_OUTPUT_MONO; + arg->decMode = IVAS_DEC_MODE_IVAS; + arg->quietModeEnabled = false; + arg->delayCompensationEnabled = true; + arg->voipMode = false; + + arg->enableHeadRotation = false; + arg->headrotTrajFileName = NULL; + arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF; + +#ifdef SUPPORT_JBM_TRACEFILE + arg->jbmTraceFilename = NULL; +#endif + arg->jbmOffsetFilename = NULL; + + arg->FER = 0.f; + arg->FEPatterFileName = NULL; + + arg->hrtfReaderEnabled = false; + arg->hrtfFileName = NULL; + + arg->customLsOutputEnabled = false; + arg->customLsSetupFilename = NULL; + + arg->renderConfigEnabled = false; + arg->renderConfigFilename = NULL; + + arg->inputFormat = IVAS_DEC_INPUT_FORMAT_G192; + arg->no_diegetic_pan = 0.f; +#ifdef DEBUG_FOA_AGC + arg->agcBitstream = NULL; +#endif + + /*-----------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + if ( argc < 4 ) + { + fprintf( stderr, "Error: Not enough input parameters. Exiting!\n\n" ); + usage_dec(); + return false; + } + + /*-----------------------------------------------------------------* + * Optional input arguments + *-----------------------------------------------------------------*/ + + i = 1; + + while ( argv[i][0] == '-' ) + { + strncpy( argv_to_upper, argv[i], sizeof( argv_to_upper ) - 1 ); + to_upper( argv_to_upper ); + + if ( strcmp( argv_to_upper, "-VOIP" ) == 0 ) + { + arg->voipMode = 1; + i++; + } + else if ( strcmp( to_upper( argv[i] ), "-VOIP_HF_ONLY=0" ) == 0 ) + { + arg->voipMode = 1; + arg->inputFormat = IVAS_DEC_INPUT_FORMAT_RTPDUMP; + i++; + } + else if ( strcmp( to_upper( argv[i] ), "-VOIP_HF_ONLY=1" ) == 0 ) + { + arg->voipMode = 1; + arg->inputFormat = IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF; + i++; + } +#ifdef SUPPORT_JBM_TRACEFILE + else if ( strcmp( argv_to_upper, "-TRACEFILE" ) == 0 ) + { + i++; + if ( argc - i <= 3 || argv[i][0] == '-' ) + { + fprintf( stderr, "Error: JBM Trace file name not specified!\n\n" ); + usage_dec(); + return false; + } + + arg->jbmTraceFilename = argv[i]; + i++; + } +#endif + else if ( strcmp( argv_to_upper, "-FEC_CFG_FILE" ) == 0 ) + { + i++; + if ( argc - i <= 3 || argv[i][0] == '-' ) + { + fprintf( stderr, "Error: JBM config. file name not specified!\n\n" ); + usage_dec(); + return false; + } + + arg->jbmOffsetFilename = argv[i]; + i++; + } +#ifdef DEBUGGING + else if ( strcmp( argv_to_upper, "-FEC" ) == 0 ) + { + ftmp = 0.0f; + if ( sscanf( argv[i + 1], "%f", &ftmp ) != 1 ) + { + arg->FEPatterFileName = argv[i + 1]; + } + else + { + arg->FER = ftmp; + } + i += 2; + } +#endif + else if ( strcmp( argv_to_upper, "-Q" ) == 0 ) + { + arg->quietModeEnabled = true; + i++; + } + else if ( strcmp( argv_to_upper, "-NO_DELAY_CMP" ) == 0 ) + { + arg->delayCompensationEnabled = false; + i++; + } + else if ( strcmp( argv_to_upper, "-HRTF" ) == 0 ) + { + i++; + arg->hrtfReaderEnabled = true; + if ( i < argc - 3 ) + { + arg->hrtfFileName = argv[i]; + i++; + } + } +#ifdef DEBUGGING + else if ( strcmp( argv_to_upper, "-FORCE" ) == 0 ) + { + i++; + if ( i < argc - 3 ) + { + strncpy( stmp, argv[i], sizeof( stmp ) ); + arg->forcedRendMode = parseForcedRendModeDec( stmp ); + i++; + } + } +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + /*-----------------------------------------------------------------* + * Define additional subfolder for debug info output in ./res + *-----------------------------------------------------------------*/ + else if ( strcmp( argv_to_upper, "-INFO" ) == 0 ) + { + extern char infoFolder[FILENAME_MAX]; + strncpy( infoFolder, argv[i + 1], sizeof( infoFolder ) ); + i += 2; + } +#endif /* #ifdef DEBUG_MODE_INFO_TWEAK */ +#endif /* #ifdef DEBUG_MODE_INFO */ +#endif /* #ifdef DEBUGGING */ + + else if ( strcmp( argv_to_upper, "-MIME" ) == 0 ) + { + arg->inputFormat = IVAS_DEC_INPUT_FORMAT_MIME; + i++; + } + else if ( strcmp( argv_to_upper, "-T" ) == 0 ) + { + arg->enableHeadRotation = true; + i++; + + if ( argc - i <= 4 || argv[i][0] == '-' ) + { + fprintf( stderr, "Error: Head rotation file name not specified!\n\n" ); + usage_dec(); + return false; + } + + arg->headrotTrajFileName = argv[i]; + i++; + } + else if ( strcmp( argv_to_upper, "-OTR" ) == 0 ) + { + if ( strlen( argv[i + 1] ) > 3 ) + { + fprintf( stderr, "Error: Invalid orientation tracking type %s \n\n", argv[i + 1] ); + usage_dec(); + return false; + } + char tmp[4]; + strcpy( tmp, argv[i + 1] ); + if ( strcmp( to_upper( tmp ), "REF" ) == 0 ) + { + arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF; + } + else if ( strcmp( to_upper( tmp ), "AVG" ) == 0 ) + { + arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_AVG; + } + else + { + fprintf( stderr, "Error: Invalid orientation tracking type %s \n\n", tmp ); + usage_dec(); + return false; + } + i += 2; + } + else if ( strcmp( argv_to_upper, "-RENDER_CONFIG" ) == 0 ) + { + arg->renderConfigEnabled = true; + arg->renderConfigFilename = argv[i + 1]; + + if ( arg->renderConfigFilename[0] == '\0' ) + { + fprintf( stderr, "Error: Renderer configuration file path not specified\n\n" ); + usage_dec(); + return false; + } + i += 2; + } + else if ( strcmp( argv_to_upper, "-NO_DIEGETIC_PAN" ) == 0 ) + { + i++; + + if ( argc - i <= 4 || argv[i][0] == '-' ) + { + fprintf( stderr, "Error: Argument for panning option not specified!\n\n" ); + usage_dec(); + return false; + } + + char *param = to_upper( argv[i] ); + if ( ( strcmp( param, "CENTER" ) == 0 ) || ( strchr( param, 'C' ) != NULL ) ) + { + arg->no_diegetic_pan = 0.f; + } + else if ( ( strcmp( param, "LEFT" ) == 0 ) || ( strchr( param, 'L' ) != NULL ) ) + { + arg->no_diegetic_pan = -1.f; + } + else if ( ( strcmp( param, "RIGHT" ) == 0 ) || ( strchr( param, 'R' ) != NULL ) ) + { + arg->no_diegetic_pan = 1.f; + } + else + { + arg->no_diegetic_pan = (float) atof( param ); + + if ( arg->no_diegetic_pan > 1.0f || arg->no_diegetic_pan < -1.0f ) + { + fprintf( stderr, "Error: Incorrect value for panning option argument specified!\n\n" ); + usage_dec(); + return false; + } + } + i++; + } +#ifdef DEBUGGING + else if ( strcmp( argv_to_upper, "-FORCE_SUBFRAME_BIN" ) == 0 ) /* Force binauralization to subframe (5 ms) resolution */ + { + arg->forceSubframeBinauralization = true; + i++; + } +#endif + + /*-----------------------------------------------------------------* + * Option not recognized + *-----------------------------------------------------------------*/ + + else + { + fprintf( stderr, "Error: Unknown option %s or wrong number of parameters!\n\n", argv[i] ); + usage_dec(); + return false; + } + + } /* end of while */ + + + /*-----------------------------------------------------------------* + * Mandatory input arguments + *-----------------------------------------------------------------*/ + + if ( i < argc - 3 ) + { + arg->outputFormat = cmdline2config( argv[i] ); + if ( arg->outputFormat == IVAS_DEC_OUTPUT_LS_CUSTOM ) + { + arg->customLsOutputEnabled = true; + arg->customLsSetupFilename = argv[i]; + } + i++; + } + else + { + arg->outputFormat = IVAS_DEC_OUTPUT_MONO; + arg->decMode = IVAS_DEC_MODE_EVS; + } + + /*-----------------------------------------------------------------* + * Output sampling frequency + *-----------------------------------------------------------------*/ + + if ( i < argc - 2 ) + { + arg->output_Fs = (int32_t) atoi( argv[i] ) * 1000; + i++; + } + else + { + fprintf( stderr, "Error: Sampling rate is not specified\n\n" ); + usage_dec(); + return false; + } + + /*-----------------------------------------------------------------* + * Input bitstream file + *-----------------------------------------------------------------*/ + + if ( i < argc - 1 ) + { + arg->inputBitstreamFilename = argv[i]; + i++; + } + else + { + fprintf( stderr, "Error: no input bitstream file specified\n\n" ); + usage_dec(); + return false; + } + + /*-----------------------------------------------------------------* + * Output synthesis file name + *-----------------------------------------------------------------*/ + + if ( i < argc ) + { + arg->outputWavFilename = argv[i]; + i++; + } + else + { + fprintf( stderr, "Error: no output synthesis file specified\n\n" ); + usage_dec(); + return false; + } + + return true; +} + + +/*---------------------------------------------------------------------* + * usage_dec() + * + * Print the usage of the "ivas_dec" program + *---------------------------------------------------------------------*/ + +static void usage_dec( void ) +{ + fprintf( stdout, "Usage for EVS: IVAS_dec.exe [Options] Fs bitstream_file output_file\n" ); + fprintf( stdout, "Usage for IVAS: IVAS_dec.exe [Options] OutputConf Fs bitstream_file output_file\n\n" ); + + fprintf( stdout, "Mandatory parameters:\n" ); + fprintf( stdout, "---------------------\n" ); + fprintf( stdout, "OutputConf : Output configuration: MONO, STEREO, 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4, FOA,\n" ); + fprintf( stdout, " HOA2, HOA3, BINAURAL, BINAURAL_ROOM, EXT\n" ); + fprintf( stdout, " By default, channel order and loudspeaker positions are equal to the\n" ); + fprintf( stdout, " encoder. For loudspeaker outputs, OutputConf can be a custom loudspeaker\n" ); + fprintf( stdout, " layout file. See readme.txt for details.\n" ); + fprintf( stdout, " Parameter is only used when decoding IVAS bitstream.\n" ); + fprintf( stdout, "Fs : Output sampling rate in kHz (8, 16, 32 or 48)\n" ); + fprintf( stdout, "bitstream_file : Input bitstream filename or RTP packet filename (in VOIP mode)\n" ); + fprintf( stdout, "output_file : Output audio filename \n\n" ); + + fprintf( stdout, "Options:\n" ); + fprintf( stdout, "--------\n" ); + fprintf( stdout, "-VOIP : VoIP mode: RTP in G192\n" ); + fprintf( stdout, "-VOIP_hf_only=0 : VoIP mode: EVS RTP Payload Format hf_only=0 in rtpdump\n" ); + fprintf( stdout, "-VOIP_hf_only=1 : VoIP mode: EVS RTP Payload Format hf_only=1 in rtpdump\n" ); + fprintf( stdout, " The decoder may read rtpdump files containing TS26.445 Annex A.2.2\n" ); + fprintf( stdout, " EVS RTP Payload Format. The SDP parameter hf_only is required.\n" ); + fprintf( stdout, " Reading RFC4867 AMR/AMR-WB RTP payload format is not supported.\n" ); +#ifdef SUPPORT_JBM_TRACEFILE + fprintf( stdout, "-Tracefile TF : VoIP mode: Generate trace file named TF\n" ); +#endif + fprintf( stdout, "-fec_cfg_file : Optimal channel aware configuration computed by the JBM \n" ); + fprintf( stdout, " as described in Section 6.3.1 of TS26.448. The output is \n" ); + fprintf( stdout, " written into a .txt file. Each line contains the FER indicator \n" ); + fprintf( stdout, " (HI|LO) and optimal FEC offset. \n" ); + fprintf( stdout, "-no_delay_cmp : Turn off delay compensation\n" ); + fprintf( stdout, "-mime : Mime bitstream file format\n" ); + fprintf( stdout, " The decoder may read both TS26.445 Annex.2.6 and RFC4867 Mime Storage\n" ); + fprintf( stdout, " Format files, the magic word in the mime file is used to determine\n" ); + fprintf( stdout, " which of the two supported formats is in use.\n" ); + fprintf( stdout, " default bitstream file format is G.192\n" ); + fprintf( stdout, "-T File : Head rotation specified by external trajectory File\n" ); + fprintf( stdout, "-hrtf File : HRTF filter File used in ISm format and BINAURAL output configuration\n" ); +#ifdef DEBUGGING + fprintf( stdout, "-force_subframe_bin : Forces parametric binauralizer code to use 5 ms time resolution even when\n" ); + fprintf( stdout, " output time resolution is larger.\n" ); + fprintf( stdout, "-FEC X : Insert frame erasures, X = 0-10 is the percentage\n" ); + fprintf( stdout, " of erased frames, or X may be the name of binary file or \n" ); + fprintf( stdout, " file with G192 headers indicating GOOD FRAME or BAD FRAME\n" ); + fprintf( stdout, " containing FEC pattern (short values of 0 (good) or 1 (bad))\n" ); + fprintf( stdout, " default is OFF, if this option is not used\n" ); + fprintf( stdout, "-force R : Force specific binaural rendering mode, R = (TDREND, CLDFBREND),\n" ); +#endif + fprintf( stdout, "-otr tracking_type : head orientation tracking type: 'ref' or 'avg' (only for binaural rendering)\n" ); + fprintf( stdout, "-render_config file : Renderer configuration file\n" ); + fprintf( stdout, "-no_diegetic_pan : panning mono no dietic sound to stereo -1<= pan <=1,\n" ); + fprintf( stdout, " left or l or 1->left, right or r or -1->right, center or c or 0->middle\n" ); + fprintf( stdout, "-q : Quiet mode, no frame counter\n" ); + fprintf( stdout, " default is deactivated\n" ); + fprintf( stdout, "\n" ); + + return; +} + +#ifdef DEBUGGING +/*---------------------------------------------------------------------* + * app_own_random() + * + * Generator of random numbers + *---------------------------------------------------------------------*/ + +static int16_t app_own_random( int16_t *seed ) +{ + *seed = (int16_t) ( *seed * 31821L + 13849L ); + + return ( *seed ); +} +#endif + +/*---------------------------------------------------------------------* + * decodeG192() + * + * Read G.192 bitstream and decode in regular decoder + *---------------------------------------------------------------------*/ + +static ivas_error decodeG192( + DecArguments arg, + BS_READER_HANDLE hBsReader, + HeadRotFileReader *headRotReader, + IVAS_DEC_HANDLE hIvasDec, + int16_t *pcmBuf ) + +{ + bool decodingFailed = true; /* Assume failure until cleanup is reached without errors */ + uint16_t bit_stream[IVAS_MAX_BITS_PER_FRAME + 4 * 8]; + int16_t i, j, num_bits; + int16_t bfi = 0; +#ifdef DEBUGGING + int16_t fec_seed = 12558; /* FEC_SEED */ +#endif + AudioFileWriter *afWriter = NULL; + MasaFileWriter *masaWriter = NULL; + bool decodedGoodFrame = false; + int16_t numInitialBadFrames = 0; /* Number of bad frames received until first good frame is decoded */ + int16_t nOutChannels = 0; + int16_t delayNumSamples = -1; + int16_t delayNumSamples_orig = 0; + int16_t zeroPad = 0; + int16_t nOutSamples = 0; + int32_t delayTimeScale = 0; + ivas_error error = IVAS_ERR_UNKNOWN; + uint16_t numObj = 0; + IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN; + + IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; + for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) + { + ismWriters[i] = NULL; + } + + if ( !arg.quietModeEnabled ) + { + fprintf( stdout, "\n------ Running the decoder ------\n\n" ); + fprintf( stdout, "Frames processed: " ); + } + else + { + fprintf( stdout, "\n-- Start the decoder (quiet mode) --\n\n" ); + } + +#ifdef WMOPS + reset_stack(); + reset_wmops(); +#endif + + /*------------------------------------------------------------------------------------------* + * Loop for every packet (frame) of bitstream data + * - Read the bitstream packet + * - Run the decoder + * - Write the synthesized signal into output file + *------------------------------------------------------------------------------------------*/ + + while ( 1 ) + { + /* Read next frame */ + if ( ( error = BS_Reader_ReadFrame_short( hBsReader, bit_stream, &num_bits, &bfi ) ) != IVAS_ERR_OK ) + { + if ( error == IVAS_ERR_END_OF_FILE ) + { + break; + } + fprintf( stderr, "\nError: input bitstream file couldn't be read: %s \n\n", arg.inputBitstreamFilename ); + goto cleanup; + } + +#ifdef DEBUGGING + /* Random FEC simulation */ + if ( arg.FER > 0.0f ) + { + float ftmp = (float) app_own_random( &fec_seed ) + 32768.0f; + if ( ftmp <= arg.FER / 100.0f * 65535.0f ) + { + bfi = 1; + } + else + { + bfi = 0; + } + } +#endif + + /* Feed into decoder */ + if ( ( error = IVAS_DEC_FeedFrame_Serial( hIvasDec, bit_stream, num_bits, bfi ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: could not feed frame to decoder: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + /* Head-tracking input simulation */ + if ( arg.enableHeadRotation ) + { + IVAS_QUATERNION Quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; + + if ( ( error = HeadRotationFileReading( headRotReader, Quaternions, frame ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + /* Run decoder for one frame (get rendered output) */ + if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: could not get samples from decoder: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + /* Continue checking for first good frame until it is found */ + if ( !decodedGoodFrame ) + { + if ( ( error = IVAS_DEC_HasDecodedFirstGoodFrame( hIvasDec, &decodedGoodFrame ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_HasDecodedFirstGoodFrame, code: %d\n", error ); + goto cleanup; + } + + /* Once good frame decoded, catch up */ + if ( decodedGoodFrame ) + { + /* Now number of output channels and frame size are known */ + if ( ( error = IVAS_DEC_GetNumOutputChannels( hIvasDec, &nOutChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetNumOutputChannels, code: %d\n", error ); + goto cleanup; + } + + int32_t pcmFrameSize; + + if ( ( error = IVAS_DEC_GetPcmFrameSize( hIvasDec, &pcmFrameSize ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetPcmFrameSize, error code: %d\n", error ); + goto cleanup; + } + + /* Open audio writer and write all previously skipped bad frames now that frame size is known */ + if ( ( error = AudioFileWriter_open( &afWriter, arg.outputWavFilename, arg.output_Fs, nOutChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nUnable to open output file %s\n", arg.outputWavFilename ); + goto cleanup; + } + + int16_t *zeroBuf = malloc( pcmFrameSize * sizeof( int16_t ) ); + memset( zeroBuf, 0, pcmFrameSize * sizeof( int16_t ) ); + + for ( i = 0; i < numInitialBadFrames; ++i ) + { + if ( delayNumSamples < nOutSamples ) + { + if ( ( error = AudioFileWriter_write( afWriter, zeroBuf, nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + goto cleanup; + } + delayNumSamples = 0; + } + else + { + delayNumSamples -= nOutSamples; + } + } + + free( zeroBuf ); + + /* Open other output files if EXT output config - now details about ISM or MASA are known */ + if ( arg.outputFormat == IVAS_DEC_OUTPUT_EXT ) + { + if ( ( error = IVAS_DEC_GetFormat( hIvasDec, &bsFormat ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetFormat, code: %d\n", error ); + goto cleanup; + } + + /* If outputting ISM, get number of objects, open output files and write zero metadata for initial bad frames */ + if ( bsFormat == IVAS_DEC_BS_OBJ ) + { + if ( ( error = IVAS_DEC_GetNumObjects( hIvasDec, &numObj ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetNumObjects: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + for ( i = 0; i < numObj; ++i ) + { + if ( ( error = IsmFileWriter_open( arg.outputWavFilename, i, &ismWriters[i] ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Error opening ISM decoded metadata file %s\n", IsmFileWriter_getFilePath( ismWriters[i] ) ); + goto cleanup; + } + } + + for ( j = 0; j < numInitialBadFrames; ++j ) + { + /* write zero metadata */ + for ( i = 0; i < numObj; ++i ) + { + IVAS_ISM_METADATA IsmMetadata; + + if ( ( error = IVAS_DEC_GetObjectMetadata( hIvasDec, &IsmMetadata, 1, i ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetObjectMetadata: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( ( IsmFileWriter_writeFrame( IsmMetadata, ismWriters[i] ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError writing ISM metadata to file %s\n", IsmFileWriter_getFilePath( ismWriters[i] ) ); + goto cleanup; + } + } + } + } + /* If outputting MASA, open output file and write metadata for initial bad frames */ + else if ( bsFormat == IVAS_DEC_BS_MASA ) + { + if ( ( error = MasaFileWriter_open( arg.outputWavFilename, &masaWriter ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Error opening MASA decoded metadata file %s\n", MasaFileWriter_getFilePath( masaWriter ) ); + goto cleanup; + } + + /* Duplicate good first frame metadata to fill the beginning of stream. */ + IVAS_MASA_QMETADATA_HANDLE qMetadata = NULL; + if ( ( error = IVAS_DEC_GetMasaMetadata( hIvasDec, &qMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetMasaMetadata: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + for ( j = 0; j < numInitialBadFrames; ++j ) + { + if ( ( MasaFileWriter_writeFrame( masaWriter, qMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError writing MASA metadata to file: %s\n", MasaFileWriter_getFilePath( masaWriter ) ); + goto cleanup; + } + } + } + } + } + else + { + ++numInitialBadFrames; + } + } + + if ( delayNumSamples == -1 ) + { + if ( arg.delayCompensationEnabled ) + { + if ( ( error = IVAS_DEC_GetDelay( hIvasDec, &delayNumSamples, &delayTimeScale ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nUnable to get delay of decoder: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + delayNumSamples_orig = delayNumSamples; + } + else + { + delayNumSamples = 0; + } + zeroPad = delayNumSamples; + } + + /* Write current frame */ + if ( decodedGoodFrame ) + { + if ( delayNumSamples < nOutSamples ) + { + if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + goto cleanup; + } + delayNumSamples = 0; + } + else + { + delayNumSamples -= nOutSamples; + } + } + + /* Write ISm metadata to external file(s) */ + if ( decodedGoodFrame && arg.outputFormat == IVAS_DEC_OUTPUT_EXT ) + { + if ( bsFormat == IVAS_DEC_BS_OBJ ) + { + if ( ( error = IVAS_DEC_GetNumObjects( hIvasDec, &numObj ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetNumObjects: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + for ( i = 0; i < numObj; ++i ) + { + IVAS_ISM_METADATA IsmMetadata; + + if ( ( error = IVAS_DEC_GetObjectMetadata( hIvasDec, &IsmMetadata, 0, i ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetObjectMetadata: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( ( IsmFileWriter_writeFrame( IsmMetadata, ismWriters[i] ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError writing ISM metadata to file %s\n", IsmFileWriter_getFilePath( ismWriters[i] ) ); + goto cleanup; + } + } + } + else if ( bsFormat == IVAS_DEC_BS_MASA ) + { + IVAS_MASA_QMETADATA_HANDLE qMetadata; + if ( ( error = IVAS_DEC_GetMasaMetadata( hIvasDec, &qMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetMasaMetadata: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( ( error = MasaFileWriter_writeFrame( masaWriter, qMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError writing MASA metadata to file: %s\n", MasaFileWriter_getFilePath( masaWriter ) ); + goto cleanup; + } + } + } + + frame++; + if ( !arg.quietModeEnabled ) + { + fprintf( stdout, "%-8d\b\b\b\b\b\b\b\b", frame ); +#ifdef DEBUGGING + if ( IVAS_DEC_GetBerDetectFlag( hIvasDec ) ) + { + fprintf( stdout, "\n Decoding error: BER detected in frame %d !!!!!\n", frame - 1 ); + } +#endif + } +#ifdef WMOPS + update_wmops(); +#endif + } + + /*------------------------------------------------------------------------------------------* + * Printouts after decoding has finished + *------------------------------------------------------------------------------------------*/ + + if ( !arg.quietModeEnabled ) + { + fprintf( stdout, "\nDecoder delay: %-5u [samples] - Timescale: %5u\n", delayNumSamples_orig, delayTimeScale ); + } + + /* Print output metadata file name(s) */ + if ( arg.outputFormat == IVAS_DEC_OUTPUT_EXT ) + { + if ( bsFormat == IVAS_DEC_BS_OBJ ) + { + for ( i = 0; i < numObj; i++ ) + { + fprintf( stdout, "\nOutput metadata file: %s", IsmFileWriter_getFilePath( ismWriters[i] ) ); + } + fprintf( stdout, "\n" ); + } + else if ( bsFormat == IVAS_DEC_BS_MASA ) + { + fprintf( stdout, "\nOutput metadata file: %s\n", MasaFileWriter_getFilePath( masaWriter ) ); + } + } + + /* add zeros at the end to have equal length of synthesized signals */ + memset( pcmBuf, 0, zeroPad * nOutChannels * sizeof( int16_t ) ); + if ( ( error = AudioFileWriter_write( afWriter, pcmBuf, zeroPad * nOutChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + goto cleanup; + } + + /*------------------------------------------------------------------------------------------* + * Close files and deallocate resources + *------------------------------------------------------------------------------------------*/ + + decodingFailed = false; /* This will stay set to true if cleanup is reached via a goto due to an error */ + +cleanup: + + AudioFileWriter_close( &afWriter ); + MasaFileWriter_close( &masaWriter ); + for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; i++ ) + { + IsmFileWriter_close( &ismWriters[i] ); + } + + if ( decodingFailed && error == IVAS_ERR_OK ) + { + return IVAS_ERR_UNKNOWN; + } + + return error; +} + + +/*---------------------------------------------------------------------* + * decodeVoIP() + * + * Read G.192 bitstream and decode in VOIP + *---------------------------------------------------------------------*/ + +static ivas_error decodeVoIP( + DecArguments arg, + BS_READER_HANDLE hBsReader, + IVAS_DEC_HANDLE hIvasDec ) +{ + bool decodingFailed = true; /* Assume failure until cleanup is reached without errors */ + ivas_error error = IVAS_ERR_OK; + + uint32_t nextPacketRcvTime_ms = 0; + uint32_t systemTime_ms = 0; + int32_t nFramesFed = 0; + + uint8_t au[( IVAS_MAX_BITS_PER_FRAME + 7 ) >> 3]; + int16_t auSize; + uint16_t rtpSequenceNumber; + uint32_t rtpTimeStamp; + + /* For now always assume output with one channel. When adding VoIP to IVAS, + * initialization of the memory for jitter buffer etc. needs to happen after + * first good frame has been decoded because for some configs (such as EXT + * renderer) only then the number of output channels is known.*/ + const int16_t nOutChannels = 1; + AudioFileWriter *afWriter = NULL; +#ifdef SUPPORT_JBM_TRACEFILE + JbmTraceFileWriter *jbmTraceWriter = NULL; +#endif + JbmOffsetFileWriter *jbmOffsetWriter = NULL; + const uint32_t pcmBufSizeWithSampleBasedTimeScaling = 3 * MAX_FRAME_SIZE; + int16_t pcmBuf[3 * MAX_FRAME_SIZE]; + + int16_t delayNumSamples_orig = -1; + int16_t delayNumSamples = -1; + int32_t delayTimeScale = -1; + int16_t zeroPad = 0; + + FILE *f_rtpstream = NULL; + EVS_RTPDUMP_DEPACKER rtpdumpDepacker; + EVS_RTPDUMP_DEPACKER_ERROR rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_NO_ERROR; + uint8_t *auPtr = NULL; + bool isAMRWB_IOmode; + uint16_t frameTypeIndex; + bool qBit; + + memset( pcmBuf, 0, pcmBufSizeWithSampleBasedTimeScaling ); + + rtpdumpDepacker.rtpdump = NULL; + switch ( arg.inputFormat ) + { + case IVAS_DEC_INPUT_FORMAT_RTPDUMP: + case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF: + f_rtpstream = fopen( arg.inputBitstreamFilename, "r" ); + + if ( f_rtpstream == NULL ) + { + fprintf( stderr, "could not open: %s\n", arg.inputBitstreamFilename ); + goto cleanup; + } + + rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_open( &rtpdumpDepacker, f_rtpstream, arg.inputFormat == IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF ); + if ( rtpdumpDepackerError != EVS_RTPDUMP_DEPACKER_NO_ERROR ) + { + fprintf( stderr, "error in EVS_RTPDUMP_DEPACKER_open(): %d\n", rtpdumpDepackerError ); + goto cleanup; + } + break; + case IVAS_DEC_INPUT_FORMAT_G192: + auPtr = au; + break; + default: + fprintf( stderr, "Unsupported format of input bitstream" ); + goto cleanup; + } + + if ( ( error = AudioFileWriter_open( &afWriter, arg.outputWavFilename, arg.output_Fs, nOutChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nUnable to open output file %s\n", arg.outputWavFilename ); + goto cleanup; + } + +#ifdef SUPPORT_JBM_TRACEFILE + if ( arg.jbmTraceFilename != NULL ) + { + if ( ( error = JbmTraceFileWriter_open( arg.jbmTraceFilename, &jbmTraceWriter ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open: %s\n", arg.jbmTraceFilename ); + goto cleanup; + } + fprintf( stdout, "JBM trace file: %s\n", arg.jbmTraceFilename ); + } +#endif + + if ( arg.jbmOffsetFilename != NULL ) + { + if ( ( error = JbmOffsetFileWriter_open( arg.jbmOffsetFilename, &jbmOffsetWriter ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open CA offset file: %s\n", arg.jbmOffsetFilename ); + goto cleanup; + } + fprintf( stdout, "JBM CA offset file: %s\n", arg.jbmOffsetFilename ); + } + + /* read first packet */ + if ( arg.inputFormat == IVAS_DEC_INPUT_FORMAT_G192 ) + { + error = BS_Reader_ReadVoipFrame_compact( hBsReader, au, &auSize, &rtpSequenceNumber, &rtpTimeStamp, &nextPacketRcvTime_ms ); + if ( !evsPayload_getFrameTypeFromSize( auSize, &isAMRWB_IOmode, &frameTypeIndex ) ) + { + error = IVAS_ERR_BITSTREAM_READER_INVALID_DATA; + } + qBit = 1; /* good q_bit for INPUT_FORMAT_G192 */ + } + else + { + auPtr = au; /* might have been set to RTP packet in prev call */ + rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_readNextFrame( &rtpdumpDepacker, &rtpSequenceNumber, &rtpTimeStamp, + &nextPacketRcvTime_ms, + &isAMRWB_IOmode, &frameTypeIndex, &qBit, + &auPtr, (uint16_t *) &auSize ); + /* EVS RTP payload format has timescale 16000, JBM uses 1000 internally */ + rtpTimeStamp = rtpTimeStamp / 16; + } + if ( error != IVAS_ERR_OK || rtpdumpDepackerError != EVS_RTPDUMP_DEPACKER_NO_ERROR ) + { + fprintf( stderr, "failed to read first RTP packet\n" ); + goto cleanup; + } + + if ( !arg.quietModeEnabled ) + { + fprintf( stdout, "\n------ Running the decoder ------\n\n" ); + fprintf( stdout, "Frames processed: " ); + } + else + { + fprintf( stdout, "\n-- Start the decoder (quiet mode) --\n\n" ); + } + +#ifdef WMOPS + reset_stack(); + reset_wmops(); +#endif + + /*------------------------------------------------------------------------------------------* + * Main receiving/decoding loop + *------------------------------------------------------------------------------------------*/ + + while ( 1 ) + { + int16_t nOutSamples = 0; + + /* read all packets with a receive time smaller than the system time */ + while ( nextPacketRcvTime_ms <= systemTime_ms ) + { + /* feed the previous read packet into the receiver now */ + error = IVAS_DEC_VoIP_FeedFrame( hIvasDec, auPtr, auSize, rtpSequenceNumber, rtpTimeStamp, nextPacketRcvTime_ms, isAMRWB_IOmode, frameTypeIndex, qBit ); + if ( error != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_VoIP_FeedFrame: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + ++nFramesFed; + + /* read the next packet */ + if ( arg.inputFormat == IVAS_DEC_INPUT_FORMAT_G192 ) + { + error = BS_Reader_ReadVoipFrame_compact( hBsReader, au, &auSize, &rtpSequenceNumber, &rtpTimeStamp, &nextPacketRcvTime_ms ); + + if ( !evsPayload_getFrameTypeFromSize( auSize, &isAMRWB_IOmode, &frameTypeIndex ) ) + { + error = IVAS_ERR_BITSTREAM_READER_INVALID_DATA; + } + qBit = 1; /* good q_bit for VOIP_G192_RTP */ + } + else + { + auPtr = au; /* might have been set to RTP packet in prev call */ + rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_readNextFrame( &rtpdumpDepacker, &rtpSequenceNumber, &rtpTimeStamp, + &nextPacketRcvTime_ms, + &isAMRWB_IOmode, &frameTypeIndex, &qBit, + &auPtr, (uint16_t *) &auSize ); + /* EVS RTP payload format has timescale 16000, JBM uses 1000 internally */ + rtpTimeStamp = rtpTimeStamp / 16; + } + if ( error == IVAS_ERR_END_OF_FILE || rtpdumpDepackerError == EVS_RTPDUMP_DEPACKER_EOF ) + { + /* finished reading */ + nextPacketRcvTime_ms = (uint32_t) -1; + } + else if ( error != IVAS_ERR_OK || rtpdumpDepackerError != EVS_RTPDUMP_DEPACKER_NO_ERROR ) + { + fprintf( stderr, "\nError in BS_Reader_ReadVoipFrame_compact, error code: %d\n", error ); + goto cleanup; + } + } + + /* we are finished when all packets have been received and jitter buffer is empty */ + /* also stop when the input file contains less than two frames, because JBM cannot calculate a delay value and won't start decoding */ + if ( nextPacketRcvTime_ms == (uint32_t) ( -1 ) && ( IVAS_DEC_VoIP_IsEmpty( hIvasDec ) || nFramesFed < 2 ) ) + { + break; + } + + /* decode and get samples */ + if ( ( error = IVAS_DEC_VoIP_GetSamples( hIvasDec, &nOutSamples, pcmBuf, pcmBufSizeWithSampleBasedTimeScaling, systemTime_ms ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_VoIP_GetSamples: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + +#ifdef SUPPORT_JBM_TRACEFILE + /* write JBM trace file entry - only done for EVS testing */ + if ( jbmTraceWriter != NULL ) + { + IVAS_JBM_TRACE_DATA JbmTraceData; + + if ( ( error = IVAS_DEC_GetJbmData( hIvasDec, &JbmTraceData ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_GetJbmData: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( ( JbmTraceFileWriter_writeFrame( &JbmTraceData, jbmTraceWriter ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError writing JBM Trace data to file %s\n", arg.jbmTraceFilename ); + goto cleanup; + } + } +#endif + + /* write JBM Offset file entry */ + if ( jbmOffsetWriter != NULL ) + { + int16_t optimum_offset, FEC_hi; + + if ( ( error = IVAS_DEC_VoIP_Get_CA_offset( hIvasDec, &optimum_offset, &FEC_hi ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in IVAS_DEC_VoIP_Get_CA_offset: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( ( JbmOffsetFileWriter_writeFrame( FEC_hi, optimum_offset, jbmOffsetWriter ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError writing JBM Offset data to file %s\n", arg.jbmOffsetFilename ); + goto cleanup; + } + } + + if ( delayNumSamples == -1 ) + { + if ( arg.delayCompensationEnabled ) + { + if ( ( error = IVAS_DEC_GetDelay( hIvasDec, &delayNumSamples, &delayTimeScale ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nUnable to get delay of decoder: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + delayNumSamples_orig = delayNumSamples; + } + else + { + delayNumSamples = 0; + } + zeroPad = delayNumSamples; + } + + if ( delayNumSamples < nOutSamples ) + { + if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + goto cleanup; + } + delayNumSamples = 0; + } + else + { + delayNumSamples -= nOutSamples; + } + + if ( !arg.quietModeEnabled ) + { + fprintf( stdout, "%-8d\b\b\b\b\b\b\b\b", frame ); + } + + frame++; + systemTime_ms += 20; + +#ifdef WMOPS + update_wmops(); +#endif + } + + + /* add zeros at the end to have equal length of synthesized signals */ + memset( pcmBuf, 0, zeroPad * nOutChannels * sizeof( int16_t ) ); + AudioFileWriter_write( afWriter, pcmBuf, zeroPad * nOutChannels ); + + /*------------------------------------------------------------------------------------------* + * Printouts after decoding has finished + *------------------------------------------------------------------------------------------*/ + + if ( !arg.quietModeEnabled ) + { + printf( "\nDecoder delay: %5u [samples] - Timescale: %5u\n", delayNumSamples_orig, delayTimeScale ); + } + + /*------------------------------------------------------------------------------------------* + * Close files and deallocate resources + *------------------------------------------------------------------------------------------*/ + + decodingFailed = false; /* This will stay set to true if cleanup is reached via a goto due to an error */ + +cleanup: + + AudioFileWriter_close( &afWriter ); + JbmOffsetFileWriter_close( &jbmOffsetWriter ); +#ifdef SUPPORT_JBM_TRACEFILE + JbmTraceFileWriter_close( &jbmTraceWriter ); +#endif + + if ( decodingFailed && error == IVAS_ERR_OK ) + { + return IVAS_ERR_UNKNOWN; + } + + return error; +} + + +#ifdef DEBUGGING +/*---------------------------------------------------------------------* + * parseForcedRendModeDec() + * + * + *---------------------------------------------------------------------*/ + +static IVAS_DEC_FORCED_REND_MODE parseForcedRendModeDec( + char *forcedRendModeChar ) +{ + if ( ( strcmp( to_upper( forcedRendModeChar ), "TDREND" ) == 0 ) ) + { + return IVAS_DEC_FORCE_REND_TD_RENDERER; + } + if ( ( strcmp( to_upper( forcedRendModeChar ), "CLDFBREND" ) == 0 ) ) + { + return IVAS_DEC_FORCE_REND_CLDFB_RENDERER; + } + + return IVAS_DEC_FORCE_REND_UNDEFINED; +} +#endif diff --git a/apps/encoder.c b/apps/encoder.c new file mode 100644 index 0000000000..205457858c --- /dev/null +++ b/apps/encoder.c @@ -0,0 +1,1878 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "lib_enc.h" +#include "cmdl_tools.h" +#include "audio_file_reader.h" +#include "bitstream_writer.h" +#include "masa_file_reader.h" +#include "ism_file_reader.h" +#include +#include +#ifdef WMOPS +#include "PROM_Size_lib_com.h" +#include "PROM_Size_lib_enc.h" +#include "wmops.h" +#endif +#ifdef RAM_COUNTING_TOOL +#include "mem_count.h" +#else +#include +#endif +#ifdef DEBUGGING +#include "debug.h" +#ifdef DEBUG_SPAR_FOA +#include "ivas_cnst.h" +#include "spar_debug.h" +#endif +#endif + + +#define WMC_TOOL_MAN + +/*------------------------------------------------------------------------------------------* + * Local constants, enums, structures + *------------------------------------------------------------------------------------------*/ + +#if !defined( DEBUGGING ) && !defined( WMOPS ) +static +#endif + int32_t frame = 0; /* Counter of frames */ + +#define DEFAULT_FIXED_SID_RATE 8 /* DTX SID rate */ + +/* Additional config info for each input format */ +typedef union _EncInputFormatConfig +{ + /* MONO details */ + bool stereoToMonoDownmix; +#ifdef DEBUGGING + /* STEREO details */ + IVAS_ENC_STEREO_MODE stereoMode; +#endif + + /* ISM details */ + struct EncIsmConfig + { + int16_t numObjects; + const char *metadataFiles[IVAS_MAX_NUM_OBJECTS]; + } ism; + /* SBA details */ + struct EncSbaConfig + { + IVAS_ENC_SBA_ORDER order; + bool isPlanar; + } sba; + /* MASA details */ + IVAS_ENC_MASA_VARIANT masaVariant; + /* MC details */ + IVAS_ENC_MC_LAYOUT mcLayout; +} EncInputFormatConfig; + +/* Struct for storing cmdln arguments */ +typedef struct +{ + char *inputWavFilename; + char *outputBitstreamFilename; + int32_t inputFs; + IVAS_ENC_INPUT_FORMAT inputFormat; + EncInputFormatConfig inputFormatConfig; + bool max_bwidth_user; + IVAS_ENC_BANDWIDTH maxBandwidth; + const char *bandwithProfileFile; + IVAS_ENC_DTX_CONFIG dtxConfig; + int32_t initBitrate; + const char *bitrateProfileFile; + bool quietModeEnabled; + bool delayCompensationEnabled; + const char *masaMetadataFile; +#ifdef DEBUGGING + IVAS_ENC_FORCED_MODE forcedMode; + const char *forcedModeFile; +#endif + IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig; + const char *ca_config_file; + bool mimeOutput; + + bool agc; + bool pca; +#ifdef DEBUG_FOA_AGC + FILE *agcBitstream; /* temporary */ +#endif +#ifdef DEBUG_SPAR_FOA + const char *dbg_file_tag; +#endif + +} EncArguments; + + +/*------------------------------------------------------------------------------------------* + * Local functions prototypes + *------------------------------------------------------------------------------------------*/ + +static void initArgStruct( EncArguments *arg ); +static bool parseCmdlIVAS_enc( int16_t argc, char *argv[], EncArguments *arg ); +static void usage_enc( void ); +static ivas_error readChannelAwareConfig( FILE *file, IVAS_ENC_CHANNEL_AWARE_CONFIG *caConfig ); +static bool readBandwidth( FILE *file, IVAS_ENC_BANDWIDTH *bandwidth, int32_t *bandwidthFrameCounter ); +static bool readBitrate( FILE *file, int32_t *bitrate ); +#ifdef DEBUGGING +static ivas_error readForcedMode( FILE *file, IVAS_ENC_FORCED_MODE *forcedMode, int32_t *forceFrameCounter ); +static IVAS_ENC_FORCED_MODE parseForcedMode( char *forcedModeChar ); +#endif + + +#ifdef WMOPS +/*------------------------------------------------------------------------------------------* + * Function to print complexity & memory estimates at the encoder + *------------------------------------------------------------------------------------------*/ + +extern int16_t *ptr_base_stack; +extern int16_t *ptr_base_stack; +extern int16_t *ptr_max_stack; +extern int32_t wc_frame; +extern char location_max_stack[256]; +void print_stack_call_tree( void ); + +static void print_mem_enc( size_t SRAM_size ) +{ + fprintf( stdout, "\n\n --- Encoder memory usage --- \n\n" ); + + fprintf( stdout, "PROM size (encoder): %d words (or instructions)\n", PROM_Size_lib_enc ); + fprintf( stdout, "PROM size (common): %d words (or instructions)\n", PROM_Size_lib_com ); + fprintf( stdout, "Stack size (encoder): %ld words in %s() in frame #%d\n", ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) / sizeof( float ), location_max_stack, wc_frame ); + fprintf( stdout, "Table ROM size (encoder): %ld words\n", ( Const_Data_Size_rom_enc() + Const_Data_Size_ivas_rom_enc() ) / sizeof( float ) ); + fprintf( stdout, "Table ROM size (common): %ld words\n", ( Const_Data_Size_rom_com() + Const_Data_Size_ivas_rom_com() ) / sizeof( float ) ); +#ifdef RAM_COUNTING_TOOL + fprintf( stdout, "Static RAM size (encoder): %ld words\n\n", SRAM_size ); +#endif + print_stack_call_tree(); + + fprintf( stdout, "Note: this is an optimistic estimate of the memory consumption assuming\n" ); + fprintf( stdout, " that each variable (short, long or float) in the codec requires\n" ); + fprintf( stdout, " 32 bits of memory and may therefore be represented by 1 word.\n" ); + fprintf( stdout, " The following formula is used: sizeof('memory array')/sizeof(float)\n\n" ); +} +#endif + + +/*------------------------------------------------------------------------------------------* + * main() + * + * Main IVAS encoder function for command-line interface + *------------------------------------------------------------------------------------------*/ + +int main( + int argc, + char *argv[] ) +{ + bool mainFailed = true; /* Assume main failed until cleanup is reached without errors */ + EncArguments arg; + int16_t i = 0; + ivas_error error = IVAS_ERR_UNKNOWN; + + /* Any handles that require cleanup must be declared here and initialized to NULL */ + IVAS_ENC_HANDLE hIvasEnc = NULL; + BS_WRITER_HANDLE hBsWriter = NULL; + AudioFileReader *audioReader = NULL; + FILE *f_bitrateProfile = NULL; + FILE *f_bwProfile = NULL; + FILE *f_caProfile = NULL; + MasaFileReader *masaReader = NULL; + IsmFileReader *ismReaders[IVAS_MAX_NUM_OBJECTS]; + for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) + { + ismReaders[i] = NULL; + } + int16_t *pcmBuf = NULL; +#ifdef DEBUGGING + FILE *f_forcedModeProfile = NULL; +#endif + +#ifdef DEBUG_SPAR_FOA + spar_debug_t dbg_params; +#endif +#ifdef WMOPS + size_t SRAM_size = 0; +#endif + +#ifdef WMOPS + reset_wmops(); + reset_stack(); +#endif + +#ifdef DEBUGGING + dbgargs( &argc, argv ); +#endif + +#ifdef RAM_COUNTING_TOOL + mem_count_init( 0, USE_32BITS ); +#endif + + initArgStruct( &arg ); + + /*------------------------------------------------------------------------------------------* + * Parse command-line arguments + *------------------------------------------------------------------------------------------*/ + + IVAS_ENC_PrintDisclaimer(); + + if ( !parseCmdlIVAS_enc( (int16_t) argc, argv, &arg ) ) + { + /* Error printout done internally in parseCmdlIVAS_enc() */ + goto cleanup; + } + +#ifdef DEBUG_SPAR_FOA + dbg_params.agc = (int16_t) arg.agc; + dbg_params.dtx_on = (int16_t) arg.dtxConfig.enabled; + dbg_params.file_tag = arg.dbg_file_tag; + dbg_params.ivas_total_brate = arg.initBitrate; +#ifdef DEBUG_AGC + ivas_open_agc_debug_files( &dbg_params ); +#endif + ivas_open_debug_files( &dbg_params ); +#endif + + + /*------------------------------------------------------------------------------------------* + * Open and initialize IVAS encoder + *------------------------------------------------------------------------------------------*/ + + if ( ( error = IVAS_ENC_Open( &hIvasEnc ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Opening IVAS encoder failed: %s\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + /*------------------------------------------------------------------------------------------* + * Open input audio file + *------------------------------------------------------------------------------------------*/ + + if ( AudioFileReader_open( &audioReader, arg.inputWavFilename, arg.inputFs ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nCan't open %s\n\n", arg.inputWavFilename ); + goto cleanup; + } + + /*------------------------------------------------------------------------------------------* + * Open output bitstream file + *------------------------------------------------------------------------------------------*/ + + const BS_WRITER_FORMAT bsWriterFormat = arg.mimeOutput ? BS_WRITER_FORMAT_MIME : BS_WRITER_FORMAT_G192; + + if ( BS_Writer_Open_filename( &hBsWriter, arg.outputBitstreamFilename, bsWriterFormat ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nCan't open %s\n\n", arg.outputBitstreamFilename ); + goto cleanup; + } + + /*------------------------------------------------------------------------------------------* + * Print out file names + *------------------------------------------------------------------------------------------*/ + + if ( arg.inputFormat == IVAS_ENC_INPUT_ISM ) + { + for ( i = 0; i < arg.inputFormatConfig.ism.numObjects; i++ ) + { + fprintf( stdout, "Object %d input metadata: %s\n", i + 1, arg.inputFormatConfig.ism.metadataFiles[i] ); + } + } + + if ( arg.masaMetadataFile != NULL ) + { + fprintf( stdout, "MASA inp. metadata file: %s\n", arg.masaMetadataFile ); + } + + fprintf( stdout, "Input audio file: %s\n", arg.inputWavFilename ); + fprintf( stdout, "Output bitstream file: %s\n\n", arg.outputBitstreamFilename ); + + /*------------------------------------------------------------------------------------------* + * Open auxiliary input files + *------------------------------------------------------------------------------------------*/ + + int32_t totalBitrate = arg.initBitrate; + + if ( arg.bitrateProfileFile ) + { + if ( ( f_bitrateProfile = fopen( arg.bitrateProfileFile, "rb" ) ) == NULL ) + { + fprintf( stderr, "Error: bitrate profile file %s could not be opened\n\n", arg.bitrateProfileFile ); + usage_enc(); + goto cleanup; + } + + if ( !readBitrate( f_bitrateProfile, &totalBitrate ) ) + { + fprintf( stderr, "Error: bitrate profile file %s could not be read\n\n", arg.bitrateProfileFile ); + goto cleanup; + } + rewind( f_bitrateProfile ); + + fprintf( stdout, "Bitrate switching file: %s\n", arg.bitrateProfileFile ); + } + + int32_t bandwidthFrameCounter = 0; + IVAS_ENC_BANDWIDTH bandwidth = arg.maxBandwidth; + + if ( arg.bandwithProfileFile ) + { + if ( ( f_bwProfile = fopen( arg.bandwithProfileFile, "rb" ) ) == NULL ) + { + fprintf( stderr, "Error: incorrect bandwidth specification or the bandwidth profile file could not be opened: %s\n\n", arg.bandwithProfileFile ); + usage_enc(); + goto cleanup; + } + fprintf( stdout, "Bandwidth switching file: %s\n", arg.bandwithProfileFile ); + + if ( !readBandwidth( f_bwProfile, &bandwidth, &bandwidthFrameCounter ) ) + { + fprintf( stderr, "Error: bandwidth switching file %s could not be read\n\n", arg.bandwithProfileFile ); + goto cleanup; + } + rewind( f_bwProfile ); + bandwidthFrameCounter = 0; + } + else + { + if ( bandwidth == IVAS_ENC_BANDWIDTH_NB && arg.inputFormat != IVAS_ENC_INPUT_MONO ) + { + fprintf( stdout, "\nNB coding not supported in IVAS. Switching to WB.\n" ); + } + + switch ( bandwidth ) + { + case IVAS_ENC_BANDWIDTH_UNDEFINED: + break; + case IVAS_ENC_BANDWIDTH_NB: + fprintf( stdout, "Max. encoded bandwidth: NB\n" ); + break; + case IVAS_ENC_BANDWIDTH_WB: + fprintf( stdout, "Max. encoded bandwidth: WB\n" ); + break; + case IVAS_ENC_BANDWIDTH_SWB: + fprintf( stdout, "Max. encoded bandwidth: SWB\n" ); + break; + case IVAS_ENC_BANDWIDTH_FB: + fprintf( stdout, "Max. encoded bandwidth: FB\n" ); + break; + default: + fprintf( stderr, "Error: Invalid bandwidth value\n" ); + usage_enc(); + goto cleanup; + } + } + + IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig = arg.caConfig; + + if ( arg.ca_config_file ) + { + if ( ( f_caProfile = fopen( arg.ca_config_file, "rb" ) ) == NULL ) + { + fprintf( stderr, "\nError: Channel aware configuration file could not be opened: %s\n\n", arg.ca_config_file ); + usage_enc(); + goto cleanup; + } + else + { + fprintf( stdout, "\nChannel-aware mode: ON, Channel-aware config file name: %s \n\n", arg.ca_config_file ); + } + } + else if ( arg.caConfig.channelAwareModeEnabled ) + { + fprintf( stdout, "\nChannel-aware mode: ON, FEC indicator : %s FEC offset: %d \n\n", ( caConfig.fec_indicator == IVAS_ENC_FEC_LO ) ? "LO" : "HI", caConfig.fec_offset ); + } + + /*------------------------------------------------------------------------------------------* + * Configure and initialize (allocate memory for static variables) the encoder + *------------------------------------------------------------------------------------------*/ + + switch ( arg.inputFormat ) + { + case IVAS_ENC_INPUT_MONO: + if ( ( error = IVAS_ENC_ConfigureForMono( hIvasEnc, arg.inputFs, totalBitrate, arg.max_bwidth_user, bandwidth, arg.dtxConfig, caConfig, arg.inputFormatConfig.stereoToMonoDownmix ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_ConfigureForMono failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + break; + case IVAS_ENC_INPUT_STEREO: +#ifdef DEBUGGING + if ( ( error = IVAS_ENC_ConfigureForStereo( hIvasEnc, arg.inputFs, totalBitrate, arg.max_bwidth_user, bandwidth, arg.dtxConfig, arg.inputFormatConfig.stereoMode ) ) != IVAS_ERR_OK ) +#else + if ( ( error = IVAS_ENC_ConfigureForStereo( hIvasEnc, arg.inputFs, totalBitrate, arg.max_bwidth_user, bandwidth, arg.dtxConfig ) ) != IVAS_ERR_OK ) +#endif + { + fprintf( stderr, "\nIVAS_ENC_ConfigureForStereo failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + break; + case IVAS_ENC_INPUT_ISM: + if ( ( error = IVAS_ENC_ConfigureForObjects( hIvasEnc, arg.inputFs, totalBitrate, arg.max_bwidth_user, bandwidth, arg.dtxConfig, arg.inputFormatConfig.ism.numObjects ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_ConfigureForObjects failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + break; + case IVAS_ENC_INPUT_SBA: + if ( ( error = IVAS_ENC_ConfigureForAmbisonics( hIvasEnc, arg.inputFs, totalBitrate, arg.max_bwidth_user, bandwidth, arg.dtxConfig, arg.inputFormatConfig.sba.order, arg.inputFormatConfig.sba.isPlanar, arg.agc, arg.pca ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_ConfigureForAmbisonics failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + break; + case IVAS_ENC_INPUT_MASA: + if ( ( error = IVAS_ENC_ConfigureForMasa( hIvasEnc, arg.inputFs, totalBitrate, arg.max_bwidth_user, bandwidth, arg.dtxConfig, arg.inputFormatConfig.masaVariant ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_ConfigureForMasa failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + break; + case IVAS_ENC_INPUT_MC: + if ( ( error = IVAS_ENC_ConfigureForMultichannel( hIvasEnc, arg.inputFs, totalBitrate, arg.max_bwidth_user, bandwidth, arg.dtxConfig, arg.inputFormatConfig.mcLayout ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_ConfigureForMultichannel failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + break; + default: + fprintf( stderr, "\nInvalid input type\n\n" ); + goto cleanup; + } + + IVAS_ENC_PrintConfig( hIvasEnc ); + + /*------------------------------------------------------------------------------------------* + * Open input metadata files + *------------------------------------------------------------------------------------------*/ + + if ( arg.masaMetadataFile ) + { + if ( ( masaReader = MasaFileReader_open( arg.masaMetadataFile ) ) == NULL ) + { + fprintf( stderr, "\nError: MASA input metadata file %s could not be opened\n\n", arg.masaMetadataFile ); + usage_enc(); + goto cleanup; + } + } + + const int16_t numIsmInputs = arg.inputFormat == IVAS_ENC_INPUT_ISM ? arg.inputFormatConfig.ism.numObjects : 0; + + for ( i = 0; i < numIsmInputs; ++i ) + { + if ( arg.inputFormatConfig.ism.metadataFiles[i] != NULL ) + { + if ( ( ismReaders[i] = IsmFileReader_open( arg.inputFormatConfig.ism.metadataFiles[i] ) ) == NULL ) + { + fprintf( stderr, "\nError: ISM input metadata file %s could not be opened\n\n", arg.inputFormatConfig.ism.metadataFiles[i] ); + usage_enc(); + goto cleanup; + } + } + } + +#ifdef DEBUGGING + IVAS_ENC_FORCED_MODE forcedMode = arg.forcedMode; + int32_t force_profile_cnt = 0; + + if ( arg.forcedModeFile ) + { + if ( ( f_forcedModeProfile = fopen( arg.forcedModeFile, "rb" ) ) == NULL ) + { + fprintf( stderr, "\nError: Incorrect mode specification or the profile file could not be opened: %s\n\n", arg.forcedModeFile ); + usage_enc(); + goto cleanup; + } + } +#endif + + /*------------------------------------------------------------------------------------------* + * Compensate for encoder delay (bitstream aligned with input signal) + *------------------------------------------------------------------------------------------*/ + + int16_t encDelayInSamples; + if ( ( error = IVAS_ENC_GetDelay( hIvasEnc, &encDelayInSamples ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nGetDelay failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + int16_t numInputChannels; + if ( ( error = IVAS_ENC_GetNumInputChannels( hIvasEnc, &numInputChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nGetNumInputChannels failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + int16_t pcmBufSize; + if ( ( error = IVAS_ENC_GetInputBufferSize( hIvasEnc, &pcmBufSize ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nGetInputBufferSize failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + pcmBuf = malloc( pcmBufSize * sizeof( int16_t ) ); + + if ( arg.delayCompensationEnabled && encDelayInSamples ) + { + /* read samples and throw them away */ + int16_t numSamplesRead = 0; + if ( ( error = AudioFileReader_read( audioReader, pcmBuf, encDelayInSamples, &numSamplesRead ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + int16_t numSamplesRead = 0; + uint16_t bitStream[IVAS_MAX_BITS_PER_FRAME]; + uint16_t numBits = 0; + + if ( !arg.quietModeEnabled ) + { + fprintf( stdout, "\n------ Running the encoder ------\n\n" ); + fprintf( stdout, "Frames processed: " ); + } + else + { + fprintf( stdout, "\n\n-- Start the encoder (quiet mode) --\n\n" ); + } + +#ifdef WMOPS + reset_stack(); + reset_wmops(); +#endif + + /*------------------------------------------------------------------------------------------* + * Loop for every frame of input data + * - Read the input data + * - Process switching files + * - Read input metadata + * - Run the encoder + * - Write the parameters into output bitstream file + *------------------------------------------------------------------------------------------*/ + + while ( 1 ) + { + /* Read the input data */ + if ( ( error = AudioFileReader_read( audioReader, pcmBuf, pcmBufSize, &numSamplesRead ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( numSamplesRead == 0 ) + { + /* end of input data */ + break; + } + + /* Zero-pad if not enough samples were read (expected in last frame) */ + if ( numSamplesRead < pcmBufSize ) + { + for ( i = numSamplesRead; i < pcmBufSize; ++i ) + { + pcmBuf[i] = 0; + } + } + + /* Process switching files */ + if ( f_bitrateProfile ) + { + if ( !readBitrate( f_bitrateProfile, &totalBitrate ) ) + { + fprintf( stderr, "Error: bitrate profile file %s could not be read\n\n", arg.bitrateProfileFile ); + goto cleanup; + } + + if ( ( error = IVAS_ENC_SetBitrate( hIvasEnc, totalBitrate ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_SetBitrate failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + if ( f_bwProfile ) + { + if ( !readBandwidth( f_bwProfile, &bandwidth, &bandwidthFrameCounter ) ) + { + fprintf( stderr, "Error: bandwidth switching file %s could not be read\n\n", arg.bandwithProfileFile ); + goto cleanup; + } + + if ( ( error = IVAS_ENC_SetBandwidth( hIvasEnc, bandwidth ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_SetBandwidth failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + if ( f_caProfile ) + { + if ( ( error = readChannelAwareConfig( f_caProfile, &caConfig ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "readChannelAwareConfig failed: %s\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + if ( ( error = IVAS_ENC_SetChannelAwareConfig( hIvasEnc, caConfig ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "IVAS_ENC_SetChannelAwareConfig failed: %s\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } + +#ifdef DEBUGGING + if ( f_forcedModeProfile ) + { + if ( ( error = readForcedMode( f_forcedModeProfile, &forcedMode, &force_profile_cnt ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError reading from file: %s\n%s\n", arg.forcedModeFile, IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + /* Force mode not set when configuring, set in first frame even if not reading from file */ + if ( f_forcedModeProfile || frame == 0 ) + { + if ( ( error = IVAS_ENC_SetForcedMode( hIvasEnc, forcedMode ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_ENC_SetForcedMode failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } +#endif + + /* Read ISm input metadata */ + for ( i = 0; i < numIsmInputs; ++i ) + { + if ( ismReaders[i] == NULL ) + { + continue; + } + + IVAS_ISM_METADATA ismMetadata; + if ( ( error = IsmFileReader_readNextFrame( ismReaders[i], &ismMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError (%s) while reading ism metadata from: %s\n\n", IVAS_ENC_GetErrorMessage( error ), IsmFileReader_getFilePath( ismReaders[i] ) ); + goto cleanup; + } + + if ( ( error = IVAS_ENC_FeedObjectMetadata( hIvasEnc, i, ismMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nfeed_ISM_metadata failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + /* Read MASA input metadata */ + if ( masaReader ) + { + if ( ( error = MasaFileReader_readNextFrame( masaReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError (%s) while reading masa metadata from: %s\n\n", IVAS_ENC_GetErrorMessage( error ), arg.masaMetadataFile ); + goto cleanup; + } + IVAS_MASA_METADATA_HANDLE hMetadata = MasaFileReader_getMetadataHandle( masaReader ); + + if ( ( error = IVAS_ENC_FeedMasaMetadata( hIvasEnc, hMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nfeed_MASA_frame failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + } + + /* *** Encode one frame *** */ + if ( ( error = IVAS_ENC_EncodeFrameToSerial( hIvasEnc, pcmBuf, pcmBufSize, bitStream, &numBits ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nencodeFrame failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); + goto cleanup; + } + + /* write bitstream */ + if ( ( error = BS_Writer_WriteFrame_short( hBsWriter, bitStream, numBits, totalBitrate ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nBS_Writer_WriteFrame_short failed, error code %d\n\n", error ); + goto cleanup; + } + + frame++; + if ( !arg.quietModeEnabled ) + { + fprintf( stdout, "%-8d\b\b\b\b\b\b\b\b", frame ); + } + +#ifdef WMOPS + update_wmops(); +#endif + } + + if ( arg.quietModeEnabled ) + { + fprintf( stdout, "Encoding finished\n" ); + } + else + { + fprintf( stdout, "\n\nEncoding of %d frames finished\n", frame ); + } + +#ifdef DEBUGGING + print_snr(); +#endif + + /*------------------------------------------------------------------------------------------* + * Close files and deallocate resources + *------------------------------------------------------------------------------------------*/ + + mainFailed = false; /* This will stay set to true if cleanup is reached via a goto due to an error */ + +cleanup: + + free( pcmBuf ); + + if ( ( error = BS_Writer_Close( &hBsWriter ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Can't close bitstream writer, error code %d\n", error ); + mainFailed = true; + } + + AudioFileReader_close( &audioReader ); + + for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) + { + if ( ismReaders[i] != NULL ) + { + IsmFileReader_close( &ismReaders[i] ); + } + } + + if ( masaReader ) + { + MasaFileReader_close( &masaReader ); + } + + if ( f_bwProfile ) + { + fclose( f_bwProfile ); + } + + if ( f_bitrateProfile ) + { + fclose( f_bitrateProfile ); + } + + if ( f_caProfile ) + { + fclose( f_caProfile ); + } + +#ifdef DEBUGGING + if ( f_forcedModeProfile ) + { + fclose( f_forcedModeProfile ); + } +#endif + + IVAS_ENC_Close( &hIvasEnc ); + +#ifdef RAM_COUNTING_TOOL +#ifdef WMOPS + SRAM_size = +#endif + mem_count_summary( USE_DEFAULT ); +#endif +#ifdef WMOPS + print_wmops(); + print_mem_enc( SRAM_size ); +#endif + +#ifdef DEBUGGING + dbgclose(); +#endif + +#ifdef DEBUG_SPAR_FOA + ivas_close_remove_debug_files(); +#ifdef DEBUG_AGC + ivas_close_agc_debug_files( &io_params ); +#endif +#endif + + return mainFailed ? -1 : 0; +} + + +/*-------------------------------------------------------------------* + * Local functions + *-------------------------------------------------------------------*/ + +#define IVAS_DEFAULT_AGC ( 0 ) + +static void initArgStruct( EncArguments *arg ) +{ + /* Set default values here */ + arg->inputWavFilename = NULL; + arg->outputBitstreamFilename = NULL; + arg->inputFs = 0; + arg->inputFormat = IVAS_ENC_INPUT_MONO; + arg->inputFormatConfig.stereoToMonoDownmix = false; + arg->max_bwidth_user = false; + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_UNDEFINED; + arg->bandwithProfileFile = NULL; + arg->dtxConfig = IVAS_ENC_GetDefaultDtxConfig(); + arg->initBitrate = 0; + arg->bitrateProfileFile = NULL; + arg->quietModeEnabled = false; + arg->delayCompensationEnabled = true; + arg->masaMetadataFile = NULL; +#ifdef DEBUGGING + arg->forcedMode = IVAS_ENC_FORCE_UNFORCED; + arg->forcedModeFile = NULL; +#endif + arg->caConfig = IVAS_ENC_GetDefaultChannelAwareConfig(); + arg->ca_config_file = NULL; + arg->mimeOutput = false; + + arg->agc = IVAS_DEFAULT_AGC; + arg->pca = false; +#ifdef DEBUG_FOA_AGC + arg->agcBitstream = NULL; +#endif +#ifdef DEBUG_SPAR_FOA + arg->dbg_file_tag = NULL; +#endif + + return; +} + + +/*---------------------------------------------------------------------* + * parseCmdlIVAS_enc() + * + * Encoder command-line parsing + *---------------------------------------------------------------------*/ + +static bool parseCmdlIVAS_enc( + int16_t argc, + char *argv[], + EncArguments *arg ) +{ + int16_t i, j; + char argv_to_upper[FILENAME_MAX]; + char stmp[FILENAME_MAX]; + int32_t tmp; + + if ( argc < 5 ) + { + fprintf( stderr, "Error: Not enough input parameters. Exiting!\n\n" ); + usage_enc(); + return false; + } + + /*-----------------------------------------------------------------* + * Optional input arguments + *-----------------------------------------------------------------*/ + + i = 1; + while ( i < argc - 4 ) + { + strncpy( argv_to_upper, argv[i], sizeof( argv_to_upper ) - 1 ); + to_upper( argv_to_upper ); + /*-----------------------------------------------------------------* + * Bandwidth limitation + *-----------------------------------------------------------------*/ + + if ( strcmp( argv_to_upper, "-MAX_BAND" ) == 0 ) + { + arg->max_bwidth_user = true; + + strncpy( stmp, argv[i + 1], sizeof( stmp ) - 1 ); + to_upper( stmp ); + + if ( strcmp( stmp, "-NB" ) == 0 || strcmp( stmp, "NB" ) == 0 ) + { + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_NB; + } + else if ( strcmp( stmp, "-WB" ) == 0 || strcmp( stmp, "WB" ) == 0 ) + { + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_WB; + } + else if ( strcmp( stmp, "-SWB" ) == 0 || strcmp( stmp, "SWB" ) == 0 ) + { + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_SWB; + } + else if ( strcmp( stmp, "-FB" ) == 0 || strcmp( stmp, "FB" ) == 0 ) + { + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_FB; + } + else + { + arg->bandwithProfileFile = argv[i + 1]; + } + + i += 2; + } + + /*-----------------------------------------------------------------* + * Quiet mode + *-----------------------------------------------------------------*/ + + else if ( strcmp( argv_to_upper, "-Q" ) == 0 ) + { + i++; + arg->quietModeEnabled = true; + } + + /*-----------------------------------------------------------------* + * DTX/CNG + *-----------------------------------------------------------------*/ + + else if ( strcmp( argv_to_upper, "-DTX" ) == 0 ) + { + i++; + if ( i < argc - 4 ) + { + if ( sscanf( argv[i], "%d", &tmp ) <= 0 ) + { + tmp = DEFAULT_FIXED_SID_RATE; + } + else + { + i++; + } + } + else + { + tmp = DEFAULT_FIXED_SID_RATE; + } + + arg->dtxConfig.enabled = true; + + if ( tmp == 0 ) + { + arg->dtxConfig.variable_SID_rate = true; + arg->dtxConfig.SID_interval = 0; + } + else if ( tmp >= 3 && tmp <= 100 ) + { + arg->dtxConfig.variable_SID_rate = false; + arg->dtxConfig.SID_interval = (int16_t) tmp; + } + else + { + fprintf( stderr, "Error: Incorrect SID update interval specified: %d (supported 3-100)\n\n", tmp ); + usage_enc(); + return false; + } + } + +#ifdef DEBUGGING + /*-----------------------------------------------------------------* + * Force specific mode + *-----------------------------------------------------------------*/ + + else if ( strcmp( argv_to_upper, "-FORCE" ) == 0 ) + { + strncpy( stmp, argv[i + 1], sizeof( stmp ) ); + + arg->forcedMode = parseForcedMode( stmp ); + + if ( arg->forcedMode == IVAS_ENC_FORCE_UNDEFINED ) + { + arg->forcedModeFile = argv[i + 1]; + fprintf( stdout, "Force switching file: %s\n", argv[i + 1] ); + } + else + { + fprintf( stdout, "Forcing codec to: %s\n", argv[i + 1] ); + } + + i += 2; + } +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + /*-----------------------------------------------------------------* + * Define additional subfolder for debug info output in ./res + *-----------------------------------------------------------------*/ + else if ( strcmp( argv_to_upper, "-INFO" ) == 0 ) + { + extern char infoFolder[FILENAME_MAX]; + strncpy( infoFolder, argv[i + 1], sizeof( infoFolder ) ); + i += 2; + } +#endif /* #ifdef DEBUG_MODE_INFO_TWEAK */ +#endif /* #ifdef DEBUG_MODE_INFO */ +#endif /* #ifdef DEBUGGING */ + + /*-----------------------------------------------------------------* + * deactivate delay compensation + *-----------------------------------------------------------------*/ + + else if ( strcmp( argv_to_upper, "-NO_DELAY_CMP" ) == 0 ) + { + arg->delayCompensationEnabled = false; + i++; + } + + /*-----------------------------------------------------------------* + * Activate channel-aware mode + *-----------------------------------------------------------------*/ + + else if ( strcmp( argv_to_upper, "-RF" ) == 0 ) + { + arg->caConfig.channelAwareModeEnabled = true; + i++; + + if ( i < argc - 4 ) + { + to_upper( argv[i] ); + if ( strcmp( argv[i], "LO" ) == 0 ) + { + arg->caConfig.fec_indicator = IVAS_ENC_FEC_LO; + } + else if ( strcmp( argv[i], "HI" ) == 0 ) + { + arg->caConfig.fec_indicator = IVAS_ENC_FEC_HI; + } + else + { + arg->ca_config_file = argv[i]; + } + i++; + + + if ( ( sscanf( argv[i], "%d", &tmp ) == 1 ) && ( i < argc - 4 ) ) + { + if ( tmp == 0 ) + { + arg->caConfig.channelAwareModeEnabled = false; + arg->caConfig.fec_offset = 0; + i++; + } + else + { + arg->caConfig.fec_offset = (int16_t) tmp; + i++; + } + } + } + else + { + arg->caConfig.fec_indicator = IVAS_ENC_FEC_HI; + } + } + + /*-----------------------------------------------------------------* + * MIME output file format + *-----------------------------------------------------------------*/ + + else if ( strcmp( argv_to_upper, "-MIME" ) == 0 ) + { + arg->mimeOutput = true; + fprintf( stdout, "Output bitstream file format: MIME\n" ); + ++i; + } + + /*-----------------------------------------------------------------* + * IVAS Formats + *-----------------------------------------------------------------*/ + + else if ( strcmp( argv_to_upper, "-STEREO" ) == 0 ) + { + i++; + arg->inputFormat = IVAS_ENC_INPUT_STEREO; + +#ifdef DEBUGGING + if ( ( i < argc - 4 ) && argv[i][0] != 45 ) /* note: 45 corresponds to "-" */ + { + if ( sscanf( argv[i], "%d", &tmp ) > 0 ) + { + if ( tmp == 1 ) + { + arg->inputFormatConfig.stereoMode = IVAS_ENC_STEREO_MODE_DFT; + i++; + } + else if ( tmp == 2 ) + { + arg->inputFormatConfig.stereoMode = IVAS_ENC_STEREO_MODE_TD; + i++; + } + else if ( tmp == 3 ) + { + arg->inputFormatConfig.stereoMode = IVAS_ENC_STEREO_MODE_MDCT_DECISION; +#ifdef DEBUG_FORCE_MDCT_STEREO_MODE + i++; + + /* force mdct stereo mode for debugging purposes */ + if ( i < argc - 4 ) + { + if ( sscanf( argv[i], "%d", &tmp ) > 0 ) + { + if ( tmp == 0 ) + { + /* keep "DECISION" */ + arg->inputFormatConfig.stereoMode = IVAS_ENC_STEREO_MODE_MDCT_DECISION; + i++; + } + else if ( tmp == 1 ) + { + arg->inputFormatConfig.stereoMode = IVAS_ENC_STEREO_MODE_MDCT_FORCE_LR; + i++; + } + else if ( tmp == 2 ) + { + arg->inputFormatConfig.stereoMode = IVAS_ENC_STEREO_MODE_MDCT_FORCE_MS; + i++; + } + else + { + fprintf( stderr, "Error: Incorrect mdct stereo coding method (%d) specified\n\n", tmp ); + usage_enc(); + return false; + } + } + } +#endif + } + else + { + fprintf( stderr, "Error: Incorrect stereo mode (%d) specified\n\n", tmp ); + usage_enc(); + return false; + } + } + else + { + fprintf( stderr, "Error: Stereo mode not specified.\n\n" ); /* in the debugging stage */ + usage_enc(); + return false; + } + } + else + { + arg->inputFormatConfig.stereoMode = IVAS_ENC_STEREO_MODE_UNIFIED; + } +#endif /* DEBUGGING */ + } + else if ( strcmp( argv_to_upper, "-ISM" ) == 0 ) + { + arg->inputFormat = IVAS_ENC_INPUT_ISM; + i++; + + if ( i < argc - 5 ) + { + if ( sscanf( argv[i], "%d", &tmp ) > 0 ) + { + i++; + } + + if ( tmp <= 0 ) + { + fprintf( stderr, "Error: Too low number of ISM channels specified!\n\n" ); + usage_enc(); + return false; + } + else + { + arg->inputFormatConfig.ism.numObjects = (int16_t) tmp; + } + } + else + { + fprintf( stderr, "Error: Number of ISM channels not specified!\n\n" ); + usage_enc(); + return false; + } + + /* read input metadata files */ + for ( j = 0; j < arg->inputFormatConfig.ism.numObjects; j++ ) + { + if ( i < argc - 4 ) + { + if ( strcmp( argv[i], "NULL" ) == 0 || strcmp( argv[i], "null" ) == 0 ) + { + /* no metadata input file -> encode only audio streams */ + arg->inputFormatConfig.ism.metadataFiles[j] = NULL; + } + else + { + arg->inputFormatConfig.ism.metadataFiles[j] = argv[i]; + } + + i++; + } + else + { + fprintf( stderr, "Error: not enough arguments\n\n" ); + usage_enc(); + return false; + } + } + } + else if ( strcmp( argv_to_upper, "-SBA" ) == 0 ) + { + i++; + arg->inputFormat = IVAS_ENC_INPUT_SBA; + + /* SBA configuration */ + if ( i < argc - 4 ) + { + if ( sscanf( argv[i], "%d", &tmp ) > 0 ) + { + i++; + } + } + else + { + tmp = -1; /* this is to avoid a compilation warning */ + fprintf( stderr, "Error: SBA order not specified!\n\n" ); + usage_enc(); + return false; + } + + arg->inputFormatConfig.sba.isPlanar = ( tmp < 0 ); + + tmp = abs( tmp ); + switch ( tmp ) + { + case 1: + arg->inputFormatConfig.sba.order = IVAS_ENC_SBA_FOA; + break; + case 2: + arg->inputFormatConfig.sba.order = IVAS_ENC_SBA_HOA2; + break; + case 3: + arg->inputFormatConfig.sba.order = IVAS_ENC_SBA_HOA3; + break; + default: + fprintf( stderr, "Error: Wrong SBA order specified!\n\n" ); + usage_enc(); + return false; + } + } + else if ( strcmp( argv_to_upper, "-MASA" ) == 0 ) + { + arg->inputFormat = IVAS_ENC_INPUT_MASA; + i++; + + if ( i < argc - 4 ) + { + if ( sscanf( argv[i], "%d", &tmp ) > 0 ) + { + i++; + } + + switch ( tmp ) + { + case 1: + arg->inputFormatConfig.masaVariant = IVAS_ENC_MASA_1CH; + break; + case 2: + arg->inputFormatConfig.masaVariant = IVAS_ENC_MASA_2CH; + break; + default: + fprintf( stderr, "Error: MASA channels must for the moment be 1 or 2.\n\n" ); + usage_enc(); + return false; + } + } + + if ( i < argc - 4 ) + { + arg->masaMetadataFile = argv[i]; + i++; + } + else + { + fprintf( stderr, "Error: not enough MASA arguments\n\n" ); + usage_enc(); + return false; + } + } + else if ( strcmp( argv_to_upper, "-MC" ) == 0 ) + { + i++; + arg->inputFormat = IVAS_ENC_INPUT_MC; + + if ( i < argc - 4 ) + { + + if ( strcmp( to_upper( argv[i] ), "5_1" ) == 0 ) + { + arg->inputFormatConfig.mcLayout = IVAS_ENC_MC_5_1; + } + else if ( strcmp( to_upper( argv[i] ), "7_1" ) == 0 ) + { + arg->inputFormatConfig.mcLayout = IVAS_ENC_MC_7_1; + } + else if ( strcmp( to_upper( argv[i] ), "5_1_2" ) == 0 ) + { + arg->inputFormatConfig.mcLayout = IVAS_ENC_MC_5_1_2; + } + else if ( strcmp( to_upper( argv[i] ), "5_1_4" ) == 0 ) + { + arg->inputFormatConfig.mcLayout = IVAS_ENC_MC_5_1_4; + } + else if ( strcmp( to_upper( argv[i] ), "7_1_4" ) == 0 ) + { + arg->inputFormatConfig.mcLayout = IVAS_ENC_MC_7_1_4; + } + else + { + fprintf( stderr, "Error: Incorrect input configuration specified for Multi-channel\n\n" ); + usage_enc(); + return false; + } + i++; + } + else + { + fprintf( stderr, "Error: Multi-channel configuration not specified!\n\n" ); + usage_enc(); + return false; + } + } + else if ( strcmp( argv_to_upper, "-STEREO_DMX_EVS" ) == 0 ) + { + arg->inputFormat = IVAS_ENC_INPUT_MONO; + arg->inputFormatConfig.stereoToMonoDownmix = true; + i++; + } + else if ( strcmp( argv_to_upper, "-AGC" ) == 0 ) + { + i++; + if ( i < argc - 4 ) + { + arg->agc = (int16_t) atoi( argv[i] ); + if ( argv[i] == NULL || atoi( argv[i] ) < 0 || atoi( argv[i] ) > 1 ) + { + fprintf( stderr, "Error: wrong adaptive gain control option specified (%d), expected 0 or 1\n\n", (int32_t) atoi( argv[i] ) ); + usage_enc(); + return false; + } + i++; + } + else + { + fprintf( stderr, "Error: unspecified adaptive gain control option\n\n" ); + usage_enc(); + return false; + } + } + else if ( strcmp( argv_to_upper, "-BYPASS" ) == 0 ) // VE: should be renamed to "-pca" + { + i++; + if ( i < argc - 4 ) + { + switch ( atoi( argv[i] ) ) + { + case 1: + { + arg->pca = 0; + break; + } + case 2: + { + arg->pca = 1; + break; + } + default: + { + fprintf( stderr, "Error: SBA PCA bypass argument is out of range (%d), expected 1 or 2\n", (int32_t) atoi( argv[i] ) ); + usage_enc(); + return false; + } + } + i++; + } + else + { + fprintf( stderr, "Error: SBA unspecified PCA BYPASS value \n\n" ); + usage_enc(); + return false; + } + } +#ifdef DEBUG_SPAR_FOA + /*-----------------------------------------------------------------* + * IVAS SPAR debug files tag + *-----------------------------------------------------------------*/ + else if ( strcmp( argv_to_upper, "-TAG" ) == 0 ) + { + i++; + if ( i < argc - 4 ) + { + arg->dbg_file_tag = argv[i]; + ++i; + } + else + { + fprintf( stderr, "Error: [IVAS SPAR Encoder] unspecified tag value \n\n" ); + usage_enc(); + return false; + } + } +#endif + + /*-----------------------------------------------------------------* + * Option not recognized + *-----------------------------------------------------------------*/ + else + { + fprintf( stderr, "Error: option not recognized, %s\n\n", argv[i] ); + usage_enc(); + return false; + } + } /* end of while */ + + /*-----------------------------------------------------------------* + * Mandatory input arguments + *-----------------------------------------------------------------*/ + + /*-----------------------------------------------------------------* + * Bitrate + *-----------------------------------------------------------------*/ + + if ( i < argc - 2 ) + { + /* check if profile file has been entered instead of a fixed bitrate */ + if ( !is_digits_only( argv[i] ) ) + { + arg->bitrateProfileFile = argv[i]; + } + else + { + arg->initBitrate = atoi( argv[i] ); + } + + i++; + } + else + { + fprintf( stderr, "Error: no bitrate specified\n\n" ); + usage_enc(); + return false; + } + + /*-----------------------------------------------------------------* + * Input sampling frequency + *-----------------------------------------------------------------*/ + + if ( i < argc - 2 ) + { + arg->inputFs = atoi( argv[i] ) * 1000; + i++; + } + else + { + fprintf( stderr, "Error: no input sampling frequency specified\n\n" ); + usage_enc(); + return false; + } + + /* for EVS mono, restore default behavior, i.e. SWB as default maxBandwidth if not set by the user otherwise */ + if ( arg->max_bwidth_user == false ) + { + arg->maxBandwidth = IVAS_ENC_GetDefaultBandwidth( ( arg->inputFormat == IVAS_ENC_INPUT_MONO ) ? true : false ); + } + + /* Prevent maxBandwidth from being higher than inputFs/2 */ + if ( arg->inputFs == 8000 && arg->maxBandwidth > IVAS_ENC_BANDWIDTH_NB ) + { + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_NB; + } + else if ( arg->inputFs == 16000 && arg->maxBandwidth > IVAS_ENC_BANDWIDTH_WB ) + { + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_WB; + } + else if ( arg->inputFs == 32000 && arg->maxBandwidth > IVAS_ENC_BANDWIDTH_SWB ) + { + arg->maxBandwidth = IVAS_ENC_BANDWIDTH_SWB; + } + + /*-----------------------------------------------------------------* + * Input file + *-----------------------------------------------------------------*/ + + if ( i < argc - 1 ) + { + arg->inputWavFilename = argv[i]; + i++; + } + else + { + fprintf( stderr, "Error: no input file specified\n\n" ); + usage_enc(); + return false; + } + + /*-----------------------------------------------------------------* + * Output bitstream file + *-----------------------------------------------------------------*/ + + if ( i < argc ) + { + arg->outputBitstreamFilename = argv[i]; + i++; + } + else + { + fprintf( stderr, "Error: no output bitstream file specified\n\n" ); + usage_enc(); + return false; + } + + return true; +} + + +/*---------------------------------------------------------------------* + * usage_enc() + * + * Print the usage of the "ivas_cod" program + *---------------------------------------------------------------------*/ + +static void usage_enc( void ) +{ + fprintf( stdout, "Usage: IVAS_cod.exe [Options] R Fs input_file bitstream_file\n\n" ); + + fprintf( stdout, "Mandatory parameters:\n" ); + fprintf( stdout, "---------------------\n" ); + + fprintf( stdout, "R : Bitrate in bps, \n" ); + fprintf( stdout, " for EVS native modes R = (5900*, 7200, 8000, 9600, 13200, 16400,\n" ); + fprintf( stdout, " 24400, 32000, 48000, 64000, 96000, 128000) \n" ); + fprintf( stdout, " *VBR mode (average bitrate),\n" ); + fprintf( stdout, " for AMR-WB IO modes R = (6600, 8850, 12650, 14250, 15850, 18250,\n" ); + fprintf( stdout, " 19850, 23050, 23850) \n" ); + fprintf( stdout, " for IVAS stereo & ISm R =(13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); + fprintf( stdout, " 96000, 128000, 160000, 192000, 256000) \n" ); + fprintf( stdout, " for IVAS SBA, MASA, MC R=(13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); + fprintf( stdout, " 96000, 128000, 160000, 192000, 256000, 384000, 512000) \n" ); + fprintf( stdout, " Alternatively, R can be a bitrate switching file which consists of R values\n" ); + fprintf( stdout, " indicating the bitrate for each frame in bps. These values are stored in\n" ); + fprintf( stdout, " binary format using 4 bytes per value\n" ); + fprintf( stdout, "Fs : Input sampling rate in kHz, Fs = (8, 16, 32 or 48) \n" ); + + fprintf( stdout, "input_file : Input audio filename \n" ); + fprintf( stdout, "bitstream_file : Output bitstream filename \n\n" ); + + fprintf( stdout, "Options:\n" ); + fprintf( stdout, "--------\n" ); + fprintf( stdout, "EVS mono is default, for IVAS choose one of the following: -stereo, -ism, -sba, -masa, -mc\n" ); + fprintf( stdout, "-stereo [Mode] : Stereo format, default is unified stereo \n" ); + fprintf( stdout, " optional for Mode: 1: DFT Stereo, 2: TD Stereo, 3: MDCT Stereo\n" ); + fprintf( stdout, "-ism Channels Files : ISm format \n" ); + fprintf( stdout, " where Channels specifies the number of ISms (1-4)\n" ); + fprintf( stdout, " and Files specify input files containing metadata, one file per object\n" ); + fprintf( stdout, " (use NULL for no input metadata)\n" ); + fprintf( stdout, "-sba +/-Order : Scene Based Audio input format (Ambisonics ACN/SN3D),\n" ); + fprintf( stdout, " where Order specifies the Ambisionics order (1-3),\n" ); + fprintf( stdout, " where positive (+) means full 3D and negative (-) only 2D/planar components to be coded\n" ); + fprintf( stdout, "-masa Ch File : MASA format \n" ); + fprintf( stdout, " where Ch specifies the number of input/transport channels (1 or 2): \n" ); + fprintf( stdout, " and File specifies input file containing parametric metadata \n" ); + fprintf( stdout, "-mc InputConf : Multi-channel format\n" ); + fprintf( stdout, " where InputConf specifies the channel configuration: 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4\n" ); + fprintf( stdout, " Loudspeaker positions are assumed to have azimuth and elevation as per \n" ); + fprintf( stdout, " ISO/IEC 23091-3:2018 Table 3. Channel order is as per ISO/IEC 23008-3:2015 Table 95.\n" ); + fprintf( stdout, " See readme.txt for details.\n" ); + fprintf( stdout, "-dtx D : Activate DTX mode, D = (0, 3-100) is the SID update rate\n" ); + fprintf( stdout, " where 0 = adaptive, 3-100 = fixed in number of frames,\n" ); + fprintf( stdout, " default is deactivated\n" ); + fprintf( stdout, "-dtx : Activate DTX mode with a SID update rate of 8 frames\n" ); + fprintf( stdout, " Note: DTX is currently supported in EVS, DFT/TD stereo, 1 ISm, \n" ); + fprintf( stdout, " SBA (up to 128kbps) and MASA (up to 128kbps)\n" ); + fprintf( stdout, "-rf p o : Activate channel-aware mode for WB and SWB signal at 13.2kbps, \n" ); + fprintf( stdout, " where FEC indicator, p: LO or HI, and FEC offset, o: 2, 3, 5, or 7 in number of frames.\n" ); + fprintf( stdout, " Alternatively p and o can be replaced by a rf configuration file with each line \n" ); + fprintf( stdout, " contains the values of p and o separated by a space, \n" ); + fprintf( stdout, " default is deactivated \n" ); + fprintf( stdout, "-max_band B : Activate bandwidth limitation, B = (NB, WB, SWB or FB)\n" ); + fprintf( stdout, " alternatively, B can be a text file where each line contains \"nb_frames B\"\n" ); + fprintf( stdout, "-no_delay_cmp : Turn off delay compensation\n" ); + fprintf( stdout, "-stereo_dmx_evs : Activate stereo downmix function for EVS.\n" ); + fprintf( stdout, "-mime : Mime output bitstream file format\n" ); + fprintf( stdout, " The encoder produces TS26.445 Annex.2.6 Mime Storage Format, (not RFC4867 Mime Format).\n" ); + fprintf( stdout, " default output bitstream file format is G.192\n" ); + +#ifdef DEBUG_SPAR_FOA + fprintf( stdout, "-tag : Tag name for intermediate debug files\n" ); +#endif + fprintf( stdout, "-agc op : SBA Adaptive gain control, op = (0, 1), by default op is 0 or deactivated\n" ); + fprintf( stdout, "-bypass mode : SBA PCA by-pass, mode = (1, 2), 1 = PCA off, 2 = signal adaptive, default is 1\n" ); +#ifdef DEBUGGING + fprintf( stdout, "-force T : Force specific mode, T = (speech, music, ACELP, GSC, TCX, HQ),\n" ); + fprintf( stdout, " alternatively, T can be a text file where each line contains \"nb_frames T\"\n" ); +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + fprintf( stdout, "-info : specify subfolder name for debug output\n" ); +#endif +#endif +#endif + fprintf( stdout, "-q : Quiet mode, no frame counters\n" ); + fprintf( stdout, " default is deactivated\n" ); + fprintf( stdout, "\n" ); + + return; +} + + +/*---------------------------------------------------------------------* + * readChannelAwareConfig() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error readChannelAwareConfig( + FILE *file, + IVAS_ENC_CHANNEL_AWARE_CONFIG *caConfig ) +{ + char rline[10], str[4]; + int16_t tmp; + + /* Initialize */ + caConfig->fec_offset = 0; + caConfig->fec_indicator = IVAS_ENC_FEC_HI; + + while ( fgets( rline, 10, file ) == NULL && feof( file ) ) + { + rewind( file ); + } + + if ( sscanf( rline, "%s %hd", str, &tmp ) != 2 ) + { + fprintf( stderr, "Error in the RF configuration file. There is no proper configuration line.\n" ); + return IVAS_ERR_INVALID_FEC_CONFIG; + } + + /* Read RF FEC indicator */ + to_upper( str ); + + if ( strcmp( str, "HI" ) == 0 ) + { + caConfig->fec_indicator = IVAS_ENC_FEC_HI; + } + else if ( strcmp( str, "LO" ) == 0 ) + { + caConfig->fec_indicator = IVAS_ENC_FEC_LO; + } + else + { + fprintf( stderr, "Error: Incorrect FEC indicator string. Exiting the encoder.\n" ); + return IVAS_ERR_INVALID_FEC_CONFIG; + } + + /* Read RF FEC offset */ + if ( tmp == 0 || tmp == 2 || tmp == 3 || tmp == 5 || tmp == 7 ) + { + caConfig->fec_offset = tmp; + } + else + { + fprintf( stderr, "Error: incorrect FEC offset specified in the RF configuration file; RF offset can be 2, 3, 5, or 7. \n" ); + return IVAS_ERR_INVALID_FEC_CONFIG; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * readBandwidth() + * + * + *---------------------------------------------------------------------*/ + +static bool readBandwidth( + FILE *file, + IVAS_ENC_BANDWIDTH *bandwidth, + int32_t *bandwidthFrameCounter ) +{ + int16_t res; + char stmp[4]; + + if ( *bandwidthFrameCounter == 0 ) + { + /* read next bandwidth value and number of frames from the profile file */ + while ( ( res = (int16_t) fscanf( file, "%d %3s", bandwidthFrameCounter, stmp ) ) != 2 && feof( file ) ) + { + rewind( file ); + } + + ( *bandwidthFrameCounter )--; + + to_upper( stmp ); + + if ( strcmp( stmp, "NB" ) == 0 ) + { + *bandwidth = IVAS_ENC_BANDWIDTH_NB; + } + else if ( strcmp( stmp, "WB" ) == 0 ) + { + *bandwidth = IVAS_ENC_BANDWIDTH_WB; + } + else if ( strcmp( stmp, "SWB" ) == 0 ) + { + *bandwidth = IVAS_ENC_BANDWIDTH_SWB; + } + else if ( strcmp( stmp, "FB" ) == 0 ) + { + *bandwidth = IVAS_ENC_BANDWIDTH_FB; + } + else + { + fprintf( stderr, "Error: incorrect bandwidth specified (only NB, WB, SWB and FB are supported)\n\n" ); + usage_enc(); + return false; + } + } + else + { + /* current profile still active, only decrease the counter */ + ( *bandwidthFrameCounter )--; + } + + return true; +} + + +/*---------------------------------------------------------------------* + * readBitrate() + * + * + *---------------------------------------------------------------------*/ + +static bool readBitrate( + FILE *file, + int32_t *bitrate ) +{ + for ( int32_t i = 0; i < 2; ++i ) + { + if ( fread( bitrate, sizeof( int32_t ), 1, file ) == 1 ) + { + return true; + } + + rewind( file ); + } + + fprintf( stderr, "Error: cannot read the bitrate profile file\n\n" ); + usage_enc(); + return false; +} + + +#ifdef DEBUGGING +/*---------------------------------------------------------------------* + * parseForcedMode() + * + * + *---------------------------------------------------------------------*/ + +static IVAS_ENC_FORCED_MODE parseForcedMode( + char *forcedModeChar ) +{ + to_upper( forcedModeChar ); + + if ( ( strcmp( forcedModeChar, "SPEECH" ) == 0 ) || ( strcmp( forcedModeChar, "'SPEECH'" ) == 0 ) || + ( strcmp( forcedModeChar, "0" ) == 0 ) ) + { + return IVAS_ENC_FORCE_SPEECH; + } + if ( ( strcmp( forcedModeChar, "MUSIC" ) == 0 ) || ( strcmp( forcedModeChar, "'MUSIC'" ) == 0 ) || ( strcmp( forcedModeChar, "AUDIO" ) == 0 ) || ( strcmp( forcedModeChar, "'AUDIO'" ) == 0 ) || ( strcmp( forcedModeChar, "1" ) == 0 ) ) + { + return IVAS_ENC_FORCE_MUSIC; + } + if ( ( strcmp( forcedModeChar, "ACELP" ) == 0 ) || ( strcmp( forcedModeChar, "'ACELP'" ) == 0 ) ) + { + return IVAS_ENC_FORCE_ACELP; + } + if ( ( strcmp( forcedModeChar, "GSC" ) == 0 ) || ( strcmp( forcedModeChar, "'GSC'" ) == 0 ) ) + { + return IVAS_ENC_FORCE_GSC; + } + if ( ( strcmp( forcedModeChar, "TCX" ) == 0 ) || ( strcmp( forcedModeChar, "'TCX'" ) == 0 ) ) + { + return IVAS_ENC_FORCE_TCX; + } + if ( ( strcmp( forcedModeChar, "HQ" ) == 0 ) || ( strcmp( forcedModeChar, "'HQ'" ) == 0 ) ) + { + return IVAS_ENC_FORCE_HQ; + } + + return IVAS_ENC_FORCE_UNDEFINED; +} + + +/*---------------------------------------------------------------------* + * readForcedMode() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error readForcedMode( + FILE *file, + IVAS_ENC_FORCED_MODE *forcedMode, + int32_t *forceFrameCounter ) +{ + int16_t res; + char stmp[8]; + + if ( *forceFrameCounter == 0 ) + { + /* read next force and number of frames from the profile file */ + while ( ( res = (int16_t) fscanf( file, "%d %7s", forceFrameCounter, stmp ) ) != 2 && feof( file ) ) + { + rewind( file ); + } + + *forcedMode = parseForcedMode( stmp ); + + if ( *forcedMode == IVAS_ENC_FORCE_UNDEFINED ) + { + fprintf( stderr, "Error: incorect mode specification or the force profile file could not be opened: %s\n\n", stmp ); + return IVAS_ERR_WRONG_PARAMS; + } + + if ( res != 2 && !feof( file ) ) + { + fprintf( stderr, "Error: incorrect format of the force profile file (please ensure that it does not contain any empty lines)\n\n" ); + return IVAS_ERR_WRONG_PARAMS; + } + } + + /* current profile still active, only decrease the counter */ + ( *forceFrameCounter )--; + + return IVAS_ERR_OK; +} +#endif diff --git a/lib_com/ACcontextMapping.c b/lib_com/ACcontextMapping.c new file mode 100644 index 0000000000..27c51eb179 --- /dev/null +++ b/lib_com/ACcontextMapping.c @@ -0,0 +1,110 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * get_next_coeff_mapped() + * + * + *-------------------------------------------------------------------*/ + +/*! r: index of next coefficient */ +int16_t get_next_coeff_mapped( + int16_t ii[2], /* i/o: coefficient indexes */ + int32_t *pp, /* o : peak(1)/hole(0) indicator */ + int16_t *idx, /* o : index in unmapped domain */ + CONTEXT_HM_CONFIG *hm_cfg /* i : HM configuration */ +) +{ + uint32_t p; + + p = ( ii[1] - hm_cfg->numPeakIndices ) & ( hm_cfg->indexBuffer[ii[1]] - hm_cfg->indexBuffer[ii[0]] ); + p >>= sizeof( p ) * 8 - 1; + *pp = p; + *idx = ii[p]; + ii[p]++; + + return hm_cfg->indexBuffer[*idx]; +} + + +/*-------------------------------------------------------------------* + * get_next_coeff_unmapped() + * + * + *-------------------------------------------------------------------*/ + +/*! r: index of next coefficient */ +int16_t get_next_coeff_unmapped( + int16_t *ii, /* i/o: coefficient indexes */ + int16_t *idx /* o : index in unmapped domain */ +) +{ + *idx = *ii; + ( *ii )++; + + return *idx; +} + +/*-------------------------------------------------------------------* + * update_mixed_context() + * + * + *-------------------------------------------------------------------*/ + +int32_t update_mixed_context( + int32_t ctx, + int16_t a ) +{ + int32_t t; + + t = 1 - 13 + ( a & ~1 ) * ( ( a >> 2 ) + 1 ); + + if ( t > 0 ) + { + t = min( ( a >> 3 ), 2 ); + } + + return ( ctx & 0xf ) * 16 + t + 13; +} diff --git a/lib_com/ari.c b/lib_com/ari.c new file mode 100644 index 0000000000..3b7ccfd9a4 --- /dev/null +++ b/lib_com/ari.c @@ -0,0 +1,67 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "basop_util.h" +#include "cnst.h" +#include "wmops.h" + + +/*--------------------------------------------------------------- + Ari 14 bits common routines + -------------------------------------------------------------*/ + +/** + * \brief Integer Multiply + * + * \param[i] r + * \param[i] c + * + * \return r*c + */ +int32_t mul_sbc_14bits( + int32_t r, + int32_t c ) +{ + int32_t temp; + /*function in line*/ + temp = ( ( (int32_t) r ) * ( (int32_t) c ) ) >> stat_bitsnew; + return temp; + + /*function in line*/ +} diff --git a/lib_com/ari_hm.c b/lib_com/ari_hm.c new file mode 100644 index 0000000000..78e639ea91 --- /dev/null +++ b/lib_com/ari_hm.c @@ -0,0 +1,303 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "stl.h" +#include "basop_util.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * UnmapIndex() + * + * + *-------------------------------------------------------------------*/ + +void UnmapIndex( + const int16_t PeriodicityIndex, + const int16_t Bandwidth, + const int16_t LtpPitchLag, + const int16_t SmallerLags, + int16_t *FractionalResolution, + int32_t *Lag ) +{ + if ( ( LtpPitchLag > 0 ) && ( PeriodicityIndex & kLtpHmFlag ) ) + { + int16_t LtpPitchIndex, Multiplier; + LtpPitchIndex = PeriodicityIndex >> 9; + Multiplier = PeriodicityIndex & 0xff; + assert( 0 <= LtpPitchIndex && LtpPitchIndex <= 16 ); + assert( 1 <= Multiplier && Multiplier <= ( 1 << NumRatioBits[Bandwidth][LtpPitchIndex] ) ); + *FractionalResolution = kLtpHmFractionalResolution; + *Lag = ( LtpPitchLag * (int32_t) ( 4 * Ratios[Bandwidth][LtpPitchIndex][Multiplier - 1] ) ) >> 2; + } + else + { + if ( PeriodicityIndex < 16 ) + { + *FractionalResolution = 3; + *Lag = PeriodicityIndex + GET_ADJ( 0, 6 ); + } + else if ( PeriodicityIndex < 80 ) + { + *FractionalResolution = 4; + *Lag = PeriodicityIndex + GET_ADJ( 16, 8 ); + } + else if ( PeriodicityIndex < 208 ) + { + *FractionalResolution = 3; + *Lag = PeriodicityIndex + GET_ADJ( 80, 12 ); + } + else if ( PeriodicityIndex < 224 || SmallerLags ) + { + *FractionalResolution = 1; + *Lag = PeriodicityIndex + GET_ADJ( 208, 28 ); + } + else + { + *FractionalResolution = 0; + *Lag = PeriodicityIndex + GET_ADJ( 224, 188 ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ConfigureContextHm() + * + * + *-------------------------------------------------------------------*/ + +void ConfigureContextHm( + const int16_t NumCoeffs, /* (I) Number of coefficients */ + const int16_t TargetBits, /* (I) Target bit budget (excl. Done flag) */ + const int16_t PeriodicityIndex, /* (I) Pitch related index */ + const int16_t LtpPitchLag, /* (I) TCX-LTP pitch in F.D. */ + CONTEXT_HM_CONFIG *hm_cfg /* (O) Context-based harmonic model configuration */ +) +{ + int16_t Bandwidth, SmallerLags; + int32_t i, Lag; + int16_t j, FractionalResolution; + int32_t Limit; + int16_t Index; + int16_t *tmp; + + Bandwidth = 0; + if ( NumCoeffs >= 256 ) + { + Bandwidth = 1; + } + + SmallerLags = 0; + + if ( TargetBits <= kSmallerLagsTargetBitsThreshold || Bandwidth == 0 ) + { + SmallerLags = 1; + } + + UnmapIndex( PeriodicityIndex, Bandwidth, LtpPitchLag, SmallerLags, &FractionalResolution, &Lag ); + + /* Set up and fill peakIndices */ + hm_cfg->peakIndices = hm_cfg->indexBuffer; + tmp = hm_cfg->peakIndices; + Limit = ( NumCoeffs - 1 ) << FractionalResolution; + + for ( i = Lag; i < Limit; i += Lag ) + { + Index = (int16_t) ( i >> FractionalResolution ); + *tmp++ = Index - 1; + *tmp++ = Index; + *tmp++ = Index + 1; + } + hm_cfg->numPeakIndices = (int16_t) ( tmp - hm_cfg->indexBuffer ); + + /* Set up and fill holeIndices */ + hm_cfg->holeIndices = hm_cfg->indexBuffer + hm_cfg->numPeakIndices; + tmp = hm_cfg->holeIndices; + Index = 0; + + for ( j = 0; j < hm_cfg->numPeakIndices; j += 3 ) + { + for ( ; Index < hm_cfg->peakIndices[j]; ++Index ) + { + *tmp++ = Index; + } + Index += 3; /* Skip the peak */ + } + + for ( ; Index < NumCoeffs; ++Index ) + { + *tmp++ = Index; + } + hm_cfg->numHoleIndices = (int16_t) ( tmp - hm_cfg->holeIndices ); + /* Add extremal element signaling the end of the buffer */ + *tmp++ = NumCoeffs; + + return; +} + + +/*-------------------------------------------------------------------* + * CountIndexBits() + * + * + *-------------------------------------------------------------------*/ + +int16_t CountIndexBits( + const int16_t Bandwidth, + const int16_t PeriodicityIndex ) +{ + if ( PeriodicityIndex & kLtpHmFlag ) + { + int16_t LtpPitchIndex = PeriodicityIndex >> 9; + return NumRatioBits[Bandwidth][LtpPitchIndex]; + } + + return 8; +} + +#define WMC_TOOL_MAN + +/*-------------------------------------------------------------------* + * tcx_hm_render() + * + * + *-------------------------------------------------------------------*/ + +int16_t tcx_hm_render( + const int16_t lag, /* i : pitch lag */ + const int16_t fract_res, /* i : fractional resolution of the lag */ + Word16 p[] /* o : harmonic model (Q13) */ +) +{ + int16_t k; + Word32 f0, tmp32; + Word16 height, PeakDeviation, tmp; + + /* Set up overall shape */ + + f0 = L_shl( lag, sub( 15, fract_res ) ); /* Q15 */ + + tmp32 = Mpy_32_16( f0, -26474 ); + tmp32 = L_shr_r( BASOP_Util_InvLog2( L_shl( tmp32, 7 ) ), 2 ); + tmp32 = L_sub( 603979776L, tmp32 ); + tmp32 = L_add( L_add( tmp32, tmp32 ), Mpy_32_16( tmp32, 26214 ) ); + height = round_fx( tmp32 ); /* Q13 */ + + tmp32 = Mpy_32_16( f0, -18910 ); + tmp32 = L_shr_r( BASOP_Util_InvLog2( L_shl( tmp32, 7 ) ), 2 ); + tmp32 = L_sub( 1395864371L, tmp32 ); + PeakDeviation = round_fx( tmp32 ); /* Q14 */ + + IF( sub( 13915, PeakDeviation ) > 0 ) + { + /* A bit error was encountered */ + return 1; + } + ELSE + { + div_s( &tmp, 13915, PeakDeviation ); + tmp = mult_r( tmp, tmp ); /* Q15 */ + } + + /* Render the prototype peak */ + p[kTcxHmParabolaHalfWidth] = height; + + for ( k = 1; k <= kTcxHmParabolaHalfWidth; ++k ) + { + p[kTcxHmParabolaHalfWidth + k] = round_fx( Mpy_32_16( BASOP_Util_InvLog2( L_shl( L_mult0( mult0( negate( k ), k ), tmp ), 10 ) ), height ) ); + } + /* Mirror */ + for ( k = -kTcxHmParabolaHalfWidth; k < 0; ++k ) + { + p[kTcxHmParabolaHalfWidth + k] = p[kTcxHmParabolaHalfWidth - k]; + } + + return 0; +} + + +/*-------------------------------------------------------------------* + * tcx_hm_modify_envelope() + * + * + *-------------------------------------------------------------------*/ + +void tcx_hm_modify_envelope( + const Word16 gain, /* i : HM gain (Q11) */ + const int16_t lag, + const int16_t fract_res, + const Word16 p[], /* i : harmonic model (Q13) */ + Word32 env[], /* i/o: envelope (Q16) */ + const int16_t L_frame /* i : number of spectral lines */ +) +{ + int16_t k, h, x; + Word16 inv_shape[2 * kTcxHmParabolaHalfWidth + 1]; /* Q15 */ + + if ( gain == 0 ) + { + return; + } + + for ( k = 0; k < 2 * kTcxHmParabolaHalfWidth + 1; ++k ) + { + div_s( &inv_shape[k], 512, add( 512, round_fx( L_mult( gain, p[k] ) ) ) ); + } + + h = 1; + k = lag >> fract_res; + + while ( k <= L_frame + kTcxHmParabolaHalfWidth - 1 ) + { + + for ( x = max( 0, k - kTcxHmParabolaHalfWidth ); x <= min( k + kTcxHmParabolaHalfWidth, L_frame - 1 ); ++x ) + { + env[x] = Mpy_32_16( env[x], inv_shape[x - k + kTcxHmParabolaHalfWidth] ); + } + ++h; + k = ( h * lag ) >> fract_res; + } + + return; +} diff --git a/lib_com/arith_coder.c b/lib_com/arith_coder.c new file mode 100644 index 0000000000..e534a23e04 --- /dev/null +++ b/lib_com/arith_coder.c @@ -0,0 +1,575 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + + +#define WMC_TOOL_MAN +/*-------------------------------------------------------* + * expfp() + * + * Fixed point implementation of exp() + *-------------------------------------------------------*/ + +/*! r: Q15 */ +Word16 expfp( + const Word16 x, /* i : mantissa Q15-e */ + const Word16 x_e /* i : exponent Q0 */ +) +{ + Word16 xi, xf, tmp; + Word16 b0, b1, b2, b3; + Word32 y, L_tmp; + + assert( x <= 0 ); + + L_tmp = L_negate( L_shl( L_deposit_h( x ), sub( x_e, 15 ) ) ); + + /* split into integer and fractional parts */ + xi = round_fx( L_tmp ); + xf = extract_l( L_tmp ); + + BASOP_SATURATE_WARNING_OFF; + xf = negate( xf ); + BASOP_SATURATE_WARNING_ON; + + /* Fractional part */ + /* y = 65536 + + xf + + ((xf*xf) / (2*65536)) + + ((((((xf*xf) / (2*65536))*xf) / 65536)*65536/3) / 65536) + + ((((((((xf*xf) / (2*65536))*xf) / 65536)*65536/3) / 65536)*xf) / (4*65536)); */ + y = L_mac0( 65536, xf, 1 ); + tmp = shr( mult( xf, xf ), 2 ); + y = L_mac0( y, tmp, 1 ); + tmp = shr( mult( shr( mult( tmp, xf ), 1 ), 65536 / 3 ), 1 ); + y = L_mac0( y, tmp, 1 ); + tmp = shr( mult( tmp, xf ), 3 ); + y = L_mac0( y, tmp, 1 ); + + /* Integer part */ + b0 = s_and( xi, 1 ); + b1 = s_and( xi, 2 ); + b2 = s_and( xi, 4 ); + b3 = s_and( xi, 8 ); + + if ( b0 != 0 ) + y = Mpy_32_16( y, 24109 ); /* exp(-1) in -1Q16 */ + if ( b1 != 0 ) + y = Mpy_32_16( y, 17739 ); /* exp(-2) in -2Q17 */ + if ( b2 != 0 ) + y = Mpy_32_16( y, 19205 ); /* exp(-4) in -5Q20 */ + if ( b3 != 0 ) + y = Mpy_32_16( y, 22513 ); /* exp(-8) in -11Q26 */ + + /* scaling: -1*b0 - 2*b1 -5*b2 -11*b3 */ + y = L_shr( y, add( add( xi, shr( xi, 2 ) ), shr( b3, 3 ) ) ); + + /* zero for xi >= 16 */ + if ( shr( xi, 4 ) > 0 ) + { + y = L_deposit_l( 0 ); + move16(); + } + + return round_fx( L_shl( y, 15 ) ); +} + + +/*-------------------------------------------------------* + * powfp_odd2() + * + * Fixed point implementation of pow(), where base is fixed point (16/16) and exponent a small *odd* integer + *-------------------------------------------------------*/ +/* + * + * Returns: *pout1 = ( (base/65536)^(2*exp - 1) ) * 65536 + * *pout2 = ( (base/65536)^(2*exp + 1) ) * 65536 + * + * NOTE: This function must be in sync with ari_decode_14bits_pow() */ + +void powfp_odd2( + const Word16 base, /* Q15 */ + const Word16 exp, /* Q0 */ + Word16 *pout1, /* Q15 */ + Word16 *pout2 /* Q15 */ +) +{ + /* this version is in sync with ari_enc_14bits_pow() + * that is, we have to start multiplication from the largest power-of-two, in order to + * get the rounding errors to appear at the same places */ + Word16 pows[12]; /* powers of two exponents*/ + Word16 exp2; + Word16 out, out2; + Word16 k, h, maxk; + + assert( exp >= 0 ); + + out = base; + move16(); + out2 = 0x7FFF; + move16(); + IF( exp != 0 ) + { + exp2 = sub( exp, 1 ); + maxk = sub( 15, norm_s( exp ) ); + assert( maxk < 12 ); + + pows[0] = base; + move16(); + FOR( k = 0; k < maxk; k++ ) + { + pows[k + 1] = mult_r( pows[k], pows[k] ); + move16(); + } + k = sub( k, 1 ); + h = shl( 1, k ); /* highest bit of exp2 */ + out2 = base; + move16(); + out = mult_r( out, pows[k + 1] ); /* we already know that "exp" has the highest bit set to one since we calculated .. */ + /* .. the effective length of "exp" earlier on, thus we omit the branch for out2 */ + if ( s_and( exp2, h ) != 0 ) + { + out2 = mult_r( out2, pows[k + 1] ); + } + + h = shr( h, 1 ); + FOR( k = sub( k, 1 ); k >= 0; k-- ) + { + if ( s_and( exp, h ) != 0 ) + { + out = mult_r( out, pows[k + 1] ); + } + + if ( s_and( exp2, h ) != 0 ) + { + out2 = mult_r( out2, pows[k + 1] ); + } + + h = shr( h, 1 ); + } + } + + *pout1 = out2; + move16(); + *pout2 = out; + move16(); + + return; +} + + +/*------------------------------------------------------------------------ + * Function: tcx_arith_scale_envelope + * + * For optimal performance of the arithmetic coder, the envelope shape must + * be scaled such that the expected bit-consumption of a signal that + * follows the scaled shape coincides with the target bitrate. + * This function calculates a first-guess scaling and then uses the bi-section + * search to find the optimal scaling. + * + * We assume that lines follow the Laplacian distribution, whereby the expected + * bit-consumption would be log2(2*e*s[k]), where s[k] is the envelope value + * for the line in question. However, this theoretical formula assumes that + * all lines are encoded with magnitude+sign. Since the sign is unnecessary + * for 0-values, that estimate of bit-consumption is biased when s[k] is small. + * Analytical solution of the expectation for small s[k] is difficult, whereby + * we use the approximation log2(2*e*s[k] + 0.15 + 0.035 / s[k]) which is accurate + * on the range 0.08 to 1.0. + * + * NOTE: This function must be bit-exact on all platforms such that encoder + * and decoder remain synchronized. + *-------------------------------------------------------------------------*/ + +void tcx_arith_scale_envelope( + const Word16 L_spec_core, /* i : number of lines to scale Q0 */ + Word16 L_frame, /* i : number of lines Q0 */ + const Word32 env[], /* i : unscaled envelope Q16 */ + Word16 target_bits, /* i : number of available bits Q0 */ + const Word16 low_complexity, /* i : low-complexity Q0 */ + Word16 s_env[], /* o : scaled envelope Q15-e */ + Word16 *s_env_e /* o : scaled envelope exponent Q0 */ +) +{ + Word32 ienv[N_MAX_ARI]; + Word16 scale, iscale, iscale_e, a_e, b, b_e; + Word16 lob, hib, adjust; + Word16 k, iter, max_iter, lob_bits, hib_bits; + Word16 statesi, bits; + Word32 mean, a, s, L_tmp; + Word16 mean_e, tmp, tmp2; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + + lob_bits = 0; + move16(); + hib_bits = 0; + move16(); + + /* Boosting to account for expected spectrum truncation (kMax) */ + /* target_bits = (int16_t)(target_bits * (1.2f - 0.00045f * target_bits + 0.00000025f * target_bits * target_bits)); */ + L_tmp = L_shr( Mpy_32_16( L_mult0( target_bits, target_bits ), 17180 ), 6 ); /* Q15; 17180 -> 0.00000025f (Q36) */ + L_tmp = L_sub( L_tmp, L_shr( L_mult0( target_bits, 30199 ), 11 ) ); /* Q15; 30199 -> 0.00045f (Q26) */ + L_tmp = L_add( L_tmp, 39322 ); /* Q15; 39322 -> 1.2f (Q15) */ + L_tmp = Mpy_32_16( L_tmp, target_bits ); /* Q0 */ + assert( L_tmp < 32768 ); + target_bits = extract_l( L_tmp ); + + /* Calculate inverse envelope and find initial scale guess based on mean */ + mean = L_deposit_l( 0 ); + FOR( k = 0; k < L_frame; k++ ) + { + /* ienv[k] = 1.0f / env[k]; + mean += ienv[k]; */ + + tmp = norm_l( env[k] ); + tmp2 = sub( 15, tmp ); +#ifndef BASOP_NOGLOB + tmp = Inv16( round_fx( L_shl( env[k], tmp ) ), &tmp2 ); +#else /* BASOP_NOGLOB */ + tmp = Inv16( round_fx_o( L_shl( env[k], tmp ), &Overflow ), &tmp2 ); +#endif /* BASOP_NOGLOB */ + ienv[k] = L_shl( L_deposit_h( tmp ), sub( tmp2, 15 ) ); /* Q16 */ + move32(); + mean = L_add( mean, ienv[k] ); + } + tmp = norm_s( L_frame ); + div_s( &tmp2, 8192, shl( L_frame, tmp ) ); + tmp = shl( tmp2, sub( tmp, 7 ) ); + mean = L_shr( Mpy_32_16( mean, tmp ), 6 ); /* Q16 */ + + /* Rate dependent compensation to get closer to the target on average */ + /* mean = powf(mean, (float)L_frame / target_bits * 0.357f); */ + tmp = BASOP_Util_Divide1616_Scale( L_frame, target_bits, &tmp2 ); + tmp = mult_r( tmp, FL2WORD16( 0.357f ) ); + mean = BASOP_Util_fPow( mean, 15, L_deposit_h( tmp ), tmp2, &mean_e ); + + /* Find first-guess scaling coefficient "scale" such that if "mean" is the + * mean of the envelope, then the mean bit-consumption is approximately + * + * log2(2*e*mean*scale + 0.15 + 0.035/(mean*scale)) * L_frame = target_bits + */ + /* a = 2*2.71828183f*mean*mean; */ + tmp = round_fx( mean ); + a = L_mult( mult_r( tmp, FL2WORD16_SCALE( 2.71828183f, 2 ) ), tmp ); + a_e = add( shl( mean_e, 1 ), 3 ); + + /* b = (0.15f - powf(2.0f, target_bits/(float)L_frame)) * mean; */ + tmp = BASOP_Util_Divide1616_Scale( target_bits, L_frame, &tmp2 ); + tmp = round_fx( BASOP_util_Pow2( L_deposit_h( tmp ), tmp2, &tmp2 ) ); + b_e = BASOP_Util_Add_MantExp( FL2WORD16( 0.15f ), 0, negate( tmp ), tmp2, &b ); + b = mult_r( b, round_fx( mean ) ); + b_e = add( b_e, mean_e ); + + /* scale = (-b + sqrtf(b*b - 4.0f*a*0.035f)) / (2.0f * a); */ +#ifndef BASOP_NOGLOB + tmp = round_fx( BASOP_Util_Add_Mant32Exp( L_mult( b, b ), shl( b_e, 1 ), Mpy_32_16( a, FL2WORD16( -4.0f * 0.035f ) ), a_e, &tmp2 ) ); +#else + tmp = round_fx_o( BASOP_Util_Add_Mant32Exp( L_mult( b, b ), shl( b_e, 1 ), Mpy_32_16( a, FL2WORD16( -4.0f * 0.035f ) ), a_e, &tmp2 ), &Overflow ); +#endif + + IF( tmp <= 0 ) + { + tmp = 0; + + FOR( k = 0; k < L_frame; k++ ) + { + s_env[k] = 0; + move16(); + } + } + ELSE + { + tmp = Sqrt16( tmp, &tmp2 ); + } + + tmp2 = BASOP_Util_Add_MantExp( negate( b ), b_e, tmp, tmp2, &scale ); + scale = BASOP_Util_Divide1616_Scale( scale, round_fx( a ), &tmp ); +#ifndef BASOP_NOGLOB + scale = shl( scale, sub( sub( add( tmp, tmp2 ), a_e ), 1 ) ); /* Q15 */ +#else + scale = shl_o( scale, sub( sub( add( tmp, tmp2 ), a_e ), 1 ), &Overflow ); /* Q15 */ +#endif + + /* iscale = 1.0f / scale; */ + iscale_e = 0; + move16(); + iscale = Inv16( s_max( 1, scale ), &iscale_e ); + + lob = 0; + move16(); + hib = 0; + move16(); + + max_iter = 2; + move16(); + if ( low_complexity ) + { + max_iter = 1; + move16(); + } + + FOR( iter = 0; iter < max_iter; iter++ ) + { + statesi = 0x7FFF; + move16(); + bits = 0; + move16(); + + FOR( k = 0; k < L_frame; k++ ) + { + s = Mpy_32_16( ienv[k], scale ); /* Q16 */ + + IF( L_sub( s, FL2WORD32_SCALE( 0.08f, 15 ) ) <= 0 ) + { + /* If s = 0.08, the expected bit-consumption is log2(1.0224). Below 0.08, the bit-consumption + estimate function becomes inaccurate, so use log2(1.0224) for all values below 0.08. */ + /* round(state * 1.0224 * 32768) */ + statesi = mult_r( statesi, FL2WORD16_SCALE( 1.0224, 1 ) ); + tmp = norm_s( statesi ); + statesi = shl( statesi, tmp ); + bits = add( bits, sub( 1, tmp ) ); + } + ELSE IF( L_sub( s, FL2WORD32_SCALE( 255.0, 15 ) ) <= 0 ) + { + /* a = 5.436564f * s + 0.15f + 0.035f * env[k] * iscale; */ + L_tmp = L_shl( Mpy_32_16( s, FL2WORD16_SCALE( 5.436564f, 3 ) ), 3 ); + L_tmp = L_add( L_tmp, FL2WORD32_SCALE( 0.15f, 15 ) ); + L_tmp = L_add( L_tmp, L_shl( Mpy_32_16( env[k], mult_r( FL2WORD16( 0.035f ), iscale ) ), iscale_e ) ); + + tmp = norm_l( L_tmp ); +#ifndef BASOP_NOGLOB + statesi = mult_r( statesi, round_fx( L_shl( L_tmp, tmp ) ) ); +#else /* BASOP_NOGLOB */ + statesi = mult_r( statesi, round_fx_o( L_shl( L_tmp, tmp ), &Overflow ) ); +#endif /* BASOP_NOGLOB */ + bits = add( bits, sub( 15, tmp ) ); + + tmp = norm_s( statesi ); + statesi = shl( statesi, tmp ); + bits = sub( bits, tmp ); + } + ELSE + { + /* for large envelope values, s > 255, bit consumption is approx log2(2*e*s) + * further, we use round(log2(x)) = floor(log2(x)+0.5) = floor(log2(x*sqrt(2))) */ + /* a = 5.436564f * s; */ + L_tmp = Mpy_32_16( s, FL2WORD16_SCALE( 5.436564f * 1.4142f, 3 ) ); /* Q13 */ + bits = add( bits, sub( 17, norm_l( L_tmp ) ) ); + } + } + + IF( sub( bits, target_bits ) <= 0 ) + { + /* Bits leftover => scale is too small */ + lob = scale; + move16(); + lob_bits = bits; + move16(); + + IF( hib > 0 ) /* Bisection search */ + { + div_s( &adjust, sub( hib_bits, target_bits ), sub( hib_bits, lob_bits ) ); + scale = add( mult_r( sub( lob, hib ), adjust ), hib ); + } + ELSE + { + /* Initial scale adaptation */ + /* adjust = 1.05f * target_bits / (float)bits; + scale *= adjust; */ + adjust = mult_r( FL2WORD16_SCALE( 1.05f, 1 ), target_bits ); + adjust = BASOP_Util_Divide1616_Scale( adjust, bits, &tmp ); + scale = shl( mult_r( scale, adjust ), add( 1, tmp ) ); + } + } + ELSE + { + /* Ran out of bits => scale is too large */ + hib = scale; + move16(); + hib_bits = bits; + move16(); + + IF( lob > 0 ) /* Bisection search */ + { + div_s( &adjust, sub( hib_bits, target_bits ), sub( hib_bits, lob_bits ) ); + scale = add( mult_r( sub( lob, hib ), adjust ), hib ); + } + ELSE + { /* Initial scale adaptation */ + test(); + IF( target_bits <= 0 || bits <= 0 ) /* safety check in case of bit errors */ + { + adjust = 0; + move16(); + + FOR( k = 0; k < L_frame; k++ ) + { + s_env[k] = 0; + move16(); + } + } + ELSE + { + div_s( &adjust, mult_r( 31130 /*0.95f Q15*/, target_bits ), bits ); + } + scale = mult_r( scale, adjust ); + } + } + iscale_e = 0; + move16(); + + IF( scale == 0 ) /* safety check in case of bit errors */ + { + iscale = 0; + move16(); + + FOR( k = 0; k < L_frame; k++ ) + { + s_env[k] = 0; + move16(); + } + } + ELSE + { + iscale = Inv16( scale, &iscale_e ); + } + } + L_frame = L_spec_core; + move16(); + + tmp = getScaleFactor32( env, L_frame ); + *s_env_e = sub( add( 15, iscale_e ), tmp ); + move16(); + BASOP_SATURATE_WARNING_OFF; +#ifndef BASOP_NOGLOB + a = L_shl( 1265000, sub( 15, *s_env_e ) ); +#else /* BASOP_NOGLOB */ + a = L_shl_o( 1265000, sub( 15, *s_env_e ), &Overflow ); +#endif /* BASOP_NOGLOB */ + BASOP_SATURATE_WARNING_ON; + + FOR( k = 0; k < L_frame; k++ ) + { + L_tmp = Mpy_32_16( L_shl( env[k], tmp ), iscale ); + L_tmp = L_min( L_tmp, a ); + s_env[k] = round_fx( L_tmp ); + move16(); + } + + return; +} + + +/*------------------------------------------------------------------------ + * Function: tcx_arith_render_envelope + * + * Calculate the envelope of the spectrum based on the LPC shape. The + * envelope is used in a perceptual domain, whereby the LPC shape has to + * be multiplied by the perceptual model. + * Operations that are performed on the spectrum, which change the magnitude + * expectation of lines, such as low-frequency emphasis, are included in the + * envelope shape. + * NOTE: This function must be bit-exact on all platforms such that encoder + * and decoder remain synchronized. + *-------------------------------------------------------------------------*/ + +void tcx_arith_render_envelope( + const Word16 A_ind[], /* i : LPC coefficients of signal envelope */ + const Word16 L_frame, /* i : number of spectral lines */ + const Word16 L_spec, /* i : length of the coded spectrum */ + const Word16 preemph_fac, /* i : pre-emphasis factor */ + const Word16 gamma_w, /* i : A_ind -> weighted envelope factor */ + const Word16 gamma_uw, /* i : A_ind -> non-weighted envelope factor */ + Word32 env[] /* o : shaped signal envelope */ +) +{ + Word16 k; + Word16 tmpA[M + 2]; + Word16 signal_env[FDNS_NPTS], signal_env_e[FDNS_NPTS]; + Word16 gainlpc[FDNS_NPTS], gainlpc_e[FDNS_NPTS]; + + /* Compute perceptual LPC envelope, transform it into freq.-domain gains */ + basop_weight_a( A_ind, tmpA, gamma_w ); + basop_lpc2mdct( tmpA, M, NULL, NULL, gainlpc, gainlpc_e ); + + /* Add pre-emphasis tilt to LPC envelope, transform LPC into MDCT gains */ + basop_weight_a_inv( A_ind, signal_env, gamma_uw ); + basop_E_LPC_a_add_tilt( signal_env, tmpA, preemph_fac ); + basop_lpc2mdct( tmpA, M + 1, signal_env, signal_env_e, NULL, NULL ); + + /* Compute weighted signal envelope in perceptual domain */ + FOR( k = 0; k < FDNS_NPTS; k++ ) + { + signal_env[k] = mult_r( signal_env[k], gainlpc[k] ); + move16(); + signal_env_e[k] = add( signal_env_e[k], gainlpc_e[k] ); + move16(); + } + + /* Adaptive low frequency emphasis */ + FOR( k = 0; k < L_frame; k++ ) + { + env[k] = 0x10000; + move32(); + } + + basop_PsychAdaptLowFreqDeemph( env, gainlpc, gainlpc_e, NULL ); + + /* Scale from FDNS_NPTS to L_frame and multiply LFE gains */ + basop_mdct_noiseShaping_interp( env, L_frame, signal_env, signal_env_e ); + + FOR( k = L_frame; k < L_spec; ++k ) + { + env[k] = env[k - 1]; + move32(); + } + + return; +} diff --git a/lib_com/basop32.c b/lib_com/basop32.c new file mode 100644 index 0000000000..b12e336e9c --- /dev/null +++ b/lib_com/basop32.c @@ -0,0 +1,3206 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* WMC_TOOL_SKIP_FILE (basic ops file) */ +/* v.2.3 - 30.Nov.2009 + ============================================================================= + + U U GGG SSSS TTTTT + U U G S T + U U G GG SSSS T + U U G G S T + UUU GG SSS T + + ======================================== + ITU-T - USER'S GROUP ON SOFTWARE TOOLS + ======================================== + + ============================================================= + COPYRIGHT NOTE: This source code, and all of its derivations, + is subject to the "ITU-T General Public License". Please have + it read in the distribution disk, or in the ITU-T + Recommendation G.191 on "SOFTWARE TOOLS FOR SPEECH AND AUDIO + CODING STANDARDS". + ============================================================= + +MODULE: BASOP32, BASIC OPERATORS + +ORIGINAL BY: + Incorporated from anonymous contributions for + ETSI Standards as well as G.723.1, G.729, and G.722.1 + +DESCRIPTION: + This file contains the definition of 16- and 32-bit basic + operators to be used in the implementation of signal + processing algorithms. The basic operators try to resemble + assembly language instructions that are commonly found in + digital signal processor (DSP) CPUs, thus allowing algorithm + C-code implementations more directly mapeable to DSP assembly + code. + + ********************************************************* + NOTE: so far, this module does not have a demo program! + ********************************************************* + +FUNCTIONS: + Defined in basop32.h. Self-documentation within each function. + +HISTORY: + 26.Jan.00 v1.0 Incorporated to the STL from updated G.723.1/G.729 + basic operator library (based on basicop2.c) and + G.723.1's basop.c [L_mls(), div_l(), i_mult()] + + 05.Jul.00 v1.1 Added 32-bit shiftless accumulation basic + operators (L_msu0, L_mac0, L_mult0). Improved + documentation for i_mult(). + + 03 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + norm_s() weight reduced from 15 to 1. + norm_l() weight reduced from 30 to 1. + L_abs() weight reduced from 2 to 1. + L_add() weight reduced from 2 to 1. + L_negate() weight reduced from 2 to 1. + L_shl() weight reduced from 2 to 1. + L_shr() weight reduced from 2 to 1. + L_sub() weight reduced from 2 to 1. + mac_r() weight reduced from 2 to 1. + msu_r() weight reduced from 2 to 1. + mult_r() weight reduced from 2 to 1. + L_deposit_h() weight reduced from 2 to 1. + L_deposit_l() weight reduced from 2 to 1. + L_mls() weight of 5. + div_l() weight of 32. + i_mult() weight of 3. + + 30 Nov 09 v2.3 round() function is now round_fx(). + saturate() is not referencable from outside application + ============================================================================= +*/ + + +/*___________________________________________________________________________ + | | + | Basic arithmetic operators. | + | | + | | + | | + | saturate() | + | add() | + | sub() | + | abs_s() | + | divide_s() | + | extract_h() | + | extract_l() | + | L_abs() | + | L_add() | + | L_deposit_h() | + | L_deposit_l() | + | L_mac() | + | L_msu() | + | L_mult() | + | L_negate() | + | L_shl() | + | L_shr() | + | L_sub() | + | mac_r() | + | msu_r() | + | mult() | + | mult_r() | + | negate() | + | norm_l() | + | norm_s() | + | round_fx() | + | shl() | + | shr() | + |___________________________________________________________________________| +*/ + + +/*___________________________________________________________________________ + | | + | Include-Files | + |___________________________________________________________________________| +*/ +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include +#include "stl.h" +#ifdef BASOP_NOGLOB +#include +#endif /* BASOP_NOGLOB */ +#include "ivas_error.h" +#include "ivas_error_utils.h" + +#ifdef _MSC_VER +#pragma warning( disable : 4310 ) +#endif + +/*___________________________________________________________________________ + | | + | Local Functions | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +static Word16 saturate_o( Word32 L_var1, Flag *Overflow ); +#endif /* BASOP_NOGLOB */ +static Word16 saturate( Word32 L_var1 ); + + +/*___________________________________________________________________________ + | | + | Constants and Globals | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Flag Overflow = 0; +Flag Carry = 0; + +#else /* BASOP_NOGLOB */ +/* +Flag BASOP_Overflow = 0; +Flag BASOP_Carry = 0; +*/ +#endif /* BASOP_NOGLOB */ + +/*___________________________________________________________________________ + | | + | Functions | + |___________________________________________________________________________| +*/ + +#define PRINT_STACK_ID_ALL "*" + + +/*___________________________________________________________________________ + | | + | Function Name : saturate | + | | + | Purpose : | + | | + | Limit the 32 bit input to the range of a 16 bit word. Must NOT be | + | referenced from outside applications. | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +static Word16 saturate( Word32 L_var1 ) +#else /* BASOP_NOGLOB */ +static Word16 saturate_o( Word32 L_var1, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + Word16 var_out; + + if ( L_var1 > 0X00007fffL ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + var_out = MAX_16; + } + else if ( L_var1 < (Word32) 0xffff8000L ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + var_out = MIN_16; + } + else + { + var_out = extract_l( L_var1 ); + } + + BASOP_CHECK(); + + return ( var_out ); +} + +#ifdef BASOP_NOGLOB +static Word16 saturate( Word32 L_var1 ) +{ + Word16 var_out; + + if ( L_var1 > 0X00007fffL ) + { + assert( 0 ); + var_out = MAX_16; + } + else if ( L_var1 < (Word32) 0xffff8000L ) + { + assert( 0 ); + var_out = MIN_16; + } + else + { + var_out = extract_l( L_var1 ); + } + + BASOP_CHECK(); + + return ( var_out ); +} +#endif /* BASOP_NOGLOB */ + +/*___________________________________________________________________________ + | | + | Function Name : add | + | | + | Purpose : | + | | + | Performs the addition (var1+var2) with overflow control and saturation;| + | the 16 bit result is set at +32767 when overflow occurs or at -32768 | + | when underflow occurs. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word16 add_o( Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word16 var_out; + Word32 L_sum; + + L_sum = (Word32) var1 + var2; + var_out = saturate_o( L_sum, Overflow ); + + + return ( var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word16 add( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + Word32 L_sum; + + L_sum = (Word32) var1 + var2; + var_out = saturate( L_sum ); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : sub | + | | + | Purpose : | + | | + | Performs the subtraction (var1+var2) with overflow control and satu- | + | ration; the 16 bit result is set at +32767 when overflow occurs or at | + | -32768 when underflow occurs. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word16 sub_o( Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word16 var_out; + Word32 L_diff; + + L_diff = (Word32) var1 - var2; + var_out = saturate_o( L_diff, Overflow ); + + return ( var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word16 sub( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + Word32 L_diff; + + L_diff = (Word32) var1 - var2; + var_out = saturate( L_diff ); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : abs_s | + | | + | Purpose : | + | | + | Absolute value of var1; abs_s(-32768) = 32767. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +Word16 abs_s( Word16 var1 ) +{ + Word16 var_out; + + if ( var1 == (Word16) MIN_16 ) + { + var_out = MAX_16; + } + else + { + if ( var1 < 0 ) + { + var_out = -var1; + } + else + { + var_out = var1; + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : shl | + | | + | Purpose : | + | | + | Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill| + | the var2 LSB of the result. If var2 is negative, arithmetically shift | + | var1 right by -var2 with sign extension. Saturate the result in case of | + | underflows or overflows. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word16 shl( Word16 var1, Word16 var2 ) +#else /* BASOP_NOGLOB */ +Word16 shl_o( Word16 var1, Word16 var2, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + Word16 var_out; + Word32 result; + + if ( var2 < 0 ) + { + if ( var2 < -16 ) + var2 = -16; + var2 = -var2; + var_out = shr( var1, var2 ); + } + else + { + result = (Word32) var1 * ( (Word32) 1 << var2 ); + + if ( ( var2 > 15 && var1 != 0 ) || ( result != (Word32) ( (Word16) result ) ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + var_out = ( var1 > 0 ) ? MAX_16 : MIN_16; + } + else + { + var_out = extract_l( result ); + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} + +#ifdef BASOP_NOGLOB +Word16 shl( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + Word32 result; + + if ( var2 < 0 ) + { + if ( var2 < -16 ) + var2 = -16; + var2 = -var2; + var_out = shr( var1, var2 ); + } + else + { + result = (Word32) var1 * ( (Word32) 1 << var2 ); + + if ( ( var2 > 15 && var1 != 0 ) || ( result != (Word32) ( (Word16) result ) ) ) + { + assert( 0 ); + var_out = ( var1 > 0 ) ? MAX_16 : MIN_16; + } + else + { + var_out = extract_l( result ); + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} +#endif /* BASOP_NOGLOB */ + +/*___________________________________________________________________________ + | | + | Function Name : shr | + | | + | Purpose : | + | | + | Arithmetically shift the 16 bit input var1 right var2 positions with | + | sign extension. If var2 is negative, arithmetically shift var1 left by | + | -var2 with sign extension. Saturate the result in case of underflows or | + | overflows. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +Word16 shr( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + if ( var2 < 0 ) + { +#ifdef BASOP_NOGLOB + assert( 0 ); +#endif /* BASOP_NOGLOB */ + if ( var2 < -16 ) + var2 = -16; + var2 = -var2; + var_out = shl( var1, var2 ); + } + else + { + if ( var2 >= 15 ) + { + var_out = ( var1 < 0 ) ? -1 : 0; + } + else + { + if ( var1 < 0 ) + { + var_out = ~( ( ~var1 ) >> var2 ); + } + else + { + var_out = var1 >> var2; + } + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : mult | + | | + | Purpose : | + | | + | Performs the multiplication of var1 by var2 and gives a 16 bit result | + | which is scaled i.e.: | + | mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and | + | mult(-32768,-32768) = 32767. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word16 mult_o( Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word16 var_out; + Word32 L_product; + + L_product = (Word32) var1 * (Word32) var2; + + L_product = ( L_product & (Word32) 0xffff8000L ) >> 15; + + if ( L_product & (Word32) 0x00010000L ) + L_product = L_product | (Word32) 0xffff0000L; + + var_out = saturate_o( L_product, Overflow ); + + + return ( var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word16 mult( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + Word32 L_product; + + L_product = (Word32) var1 * (Word32) var2; + + L_product = ( L_product & (Word32) 0xffff8000L ) >> 15; + + if ( L_product & (Word32) 0x00010000L ) + L_product = L_product | (Word32) 0xffff0000L; + + var_out = saturate( L_product ); + + + return ( var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | | + | Function Name : L_mult | + | | + | Purpose : | + | | + | L_mult is the 32 bit result of the multiplication of var1 times var2 | + | with one shift left i.e.: | + | L_mult(var1,var2) = L_shl((var1 times var2),1) and | + | L_mult(-32768,-32768) = 2147483647. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_mult( Word16 var1, Word16 var2 ) +#else /* BASOP_NOGLOB */ +Word32 L_mult_o( Word16 var1, Word16 var2, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + + L_var_out = (Word32) var1 * (Word32) var2; + + if ( L_var_out != (Word32) 0x40000000L ) + { + L_var_out *= 2; + } + else + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + L_var_out = MAX_32; + } + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( L_var_out ); +} + +#ifdef BASOP_NOGLOB +Word32 L_mult( Word16 var1, Word16 var2 ) +{ + Word32 L_var_out; + + L_var_out = (Word32) var1 * (Word32) var2; + + if ( L_var_out != (Word32) 0x40000000L ) + { + L_var_out *= 2; + } + else + { + assert( 0 ); + L_var_out = MAX_32; + } + + BASOP_CHECK(); + + return ( L_var_out ); +} +#endif /* BASOP_NOGLOB */ + +/*___________________________________________________________________________ + | | + | Function Name : negate | + | | + | Purpose : | + | | + | Negate var1 with saturation, saturate in the case where input is -32768:| + | negate(var1) = sub(0,var1). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +Word16 negate( Word16 var1 ) +{ + Word16 var_out; + + var_out = ( var1 == MIN_16 ) ? MAX_16 : -var1; + + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : extract_h | + | | + | Purpose : | + | | + | Return the 16 MSB of L_var1. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32 ) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +Word16 extract_h( Word32 L_var1 ) +{ + Word16 var_out; + + var_out = (Word16) ( L_var1 >> 16 ); + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : extract_l | + | | + | Purpose : | + | | + | Return the 16 LSB of L_var1. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32 ) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +Word16 extract_l( Word32 L_var1 ) +{ + Word16 var_out; + + var_out = (Word16) L_var1; + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : round_fx | + | | + | Purpose : | + | | + | Round the lower 16 bits of the 32 bit input number into the MS 16 bits | + | with saturation. Shift the resulting bits right by 16 and return the 16 | + | bit number: | + | round_fx(L_var1) = extract_h(L_add(L_var1,32768)) | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32 ) whose value falls in the | + | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word16 round_fx_o( Word32 L_var1, Flag *Overflow ) +{ + Word16 var_out; + Word32 L_rounded; + + BASOP_SATURATE_WARNING_OFF + L_rounded = L_add_o( L_var1, (Word32) 0x00008000L, Overflow ); + BASOP_SATURATE_WARNING_ON + var_out = extract_h( L_rounded ); + + BASOP_CHECK(); + + return ( var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word16 round_fx( Word32 L_var1 ) +{ + Word16 var_out; + Word32 L_rounded; + + BASOP_SATURATE_WARNING_OFF + L_rounded = L_add( L_var1, (Word32) 0x00008000L ); + BASOP_SATURATE_WARNING_ON + var_out = extract_h( L_rounded ); + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | | + | Function Name : L_mac | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | + | result to L_var3 with saturation, return a 32 bit result: | + | L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word32 L_mac_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult_o( var1, var2, Overflow ); + L_var_out = L_add_o( L_var3, L_product, Overflow ); + + BASOP_CHECK(); + + return ( L_var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word32 L_mac( Word32 L_var3, Word16 var1, Word16 var2 ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult( var1, var2 ); + L_var_out = L_add( L_var3, L_product ); + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( L_var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | | + | Function Name : L_msu | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | + | bit result from L_var3 with saturation, return a 32 bit result: | + | L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word32 L_msu_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult_o( var1, var2, Overflow ); + L_var_out = L_sub_o( L_var3, L_product, Overflow ); + + BASOP_CHECK(); + + return ( L_var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word32 L_msu( Word32 L_var3, Word16 var1, Word16 var2 ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult( var1, var2 ); + L_var_out = L_sub( L_var3, L_product ); + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( L_var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | | + | Function Name : L_macNs | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | + | result to L_var3 without saturation, return a 32 bit result. Generate | + | carry and overflow values : | + | L_macNs(L_var3,var1,var2) = L_add_c(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | +#ifndef BASOP_NOGLOB + | In some cases the Carry flag has to be cleared or set before using | +#else + | In some cases the BASOP_Carry flag has to be cleared or set before using | +#endif + | operators which take into account its value. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_macNs( Word32 L_var3, Word16 var1, Word16 var2 ) +#else /* BASOP_NOGLOB */ +Word32 DEPR_L_macNs( Word32 L_var3, Word16 var1, Word16 var2, Flag *Carry ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + + L_var_out = L_mult( var1, var2 ); +#ifndef BASOP_NOGLOB + L_var_out = L_add_c( L_var3, L_var_out ); +#else /* BASOP_NOGLOB */ + L_var_out = DEPR_L_add_c( L_var3, L_var_out, Carry ); +#endif /* BASOP_NOGLOB */ + + /* BASOP_CHECK(); Do not check for overflow here, function produces the carry bit instead */ + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_msuNs | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | + | bit result from L_var3 without saturation, return a 32 bit result. Ge- | + | nerate carry and overflow values : | + | L_msuNs(L_var3,var1,var2) = L_sub_c(L_var3,L_mult(var1,var2)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | +#ifndef BASOP_NOGLOB + | In some cases the Carry flag has to be cleared or set before using | +#else + | In some cases the BASOP_Carry flag has to be cleared or set before using | +#endif + | operators which take into account its value. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_msuNs( Word32 L_var3, Word16 var1, Word16 var2 ) +#else /* BASOP_NOGLOB */ +Word32 DEPR_L_msuNs( Word32 L_var3, Word16 var1, Word16 var2, Flag *Carry ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + + L_var_out = L_mult( var1, var2 ); +#ifndef BASOP_NOGLOB + L_var_out = L_sub_c( L_var3, L_var_out ); +#else /* BASOP_NOGLOB */ + L_var_out = DEPR_L_sub_c( L_var3, L_var_out, Carry ); +#endif /* BASOP_NOGLOB */ + + /* BASOP_CHECK(); Do not check for overflow here, function produces the carry bit instead */ + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_add | + | | + | Purpose : | + | | + | 32 bits addition of the two 32 bits variables (L_var1+L_var2) with | + | overflow control and saturation; the result is set at +2147483647 when | + | overflow occurs or at -2147483648 when underflow occurs. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_add( Word32 L_var1, Word32 L_var2 ) +#else /* BASOP_NOGLOB */ +Word32 L_add_o( Word32 L_var1, Word32 L_var2, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + + L_var_out = L_var1 + L_var2; + + if ( ( ( L_var1 ^ L_var2 ) & MIN_32 ) == 0 ) + { + if ( ( L_var_out ^ L_var1 ) & MIN_32 ) + { + L_var_out = ( L_var1 < 0 ) ? MIN_32 : MAX_32; +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#ifdef BASOP_NOGLOB +Word32 L_add( Word32 L_var1, Word32 L_var2 ) +{ + Word32 L_var_out; + + L_var_out = L_var1 + L_var2; + + if ( ( ( L_var1 ^ L_var2 ) & MIN_32 ) == 0 ) + { + if ( ( L_var_out ^ L_var1 ) & MIN_32 ) + { + L_var_out = ( L_var1 < 0 ) ? MIN_32 : MAX_32; + assert( 0 ); + } + } + + return ( L_var_out ); +} +#endif /* BASOP_NOGLOB */ + +/*___________________________________________________________________________ + | | + | Function Name : L_sub | + | | + | Purpose : | + | | + | 32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with | + | overflow control and saturation; the result is set at +2147483647 when | + | overflow occurs or at -2147483648 when underflow occurs. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_sub( Word32 L_var1, Word32 L_var2 ) +#else /* BASOP_NOGLOB */ +Word32 L_sub_o( Word32 L_var1, Word32 L_var2, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + + L_var_out = L_var1 - L_var2; + + if ( ( ( L_var1 ^ L_var2 ) & MIN_32 ) != 0 ) + { + if ( ( L_var_out ^ L_var1 ) & MIN_32 ) + { + L_var_out = ( L_var1 < 0L ) ? MIN_32 : MAX_32; +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + } + } + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( L_var_out ); +} + +#ifdef BASOP_NOGLOB +Word32 L_sub( Word32 L_var1, Word32 L_var2 ) +{ + Word32 L_var_out; + + L_var_out = L_var1 - L_var2; + + if ( ( ( L_var1 ^ L_var2 ) & MIN_32 ) != 0 ) + { + if ( ( L_var_out ^ L_var1 ) & MIN_32 ) + { + L_var_out = ( L_var1 < 0L ) ? MIN_32 : MAX_32; + assert( 0 ); + } + } + + BASOP_CHECK(); + + return ( L_var_out ); +} +#endif /* BASOP_NOGLOB */ + +/*___________________________________________________________________________ + | | + | Function Name : L_add_c | + | | + | Purpose : | + | | + | Performs 32 bits addition of the two 32 bits variables (L_var1+L_var2+C)| +#ifndef BASOP_NOGLOB + | with carry. No saturation. Generate carry and Overflow values. The car- | +#else + | with carry. No saturation. Generate carry and BASOP_Overflow values. The car- | +#endif + | ry and overflow values are binary variables which can be tested and as- | + | signed values. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | +#ifndef BASOP_NOGLOB + | In some cases the Carry flag has to be cleared or set before using | +#else + | In some cases the BASOP_Carry flag has to be cleared or set before using | +#endif + | operators which take into account its value. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_add_c( Word32 L_var1, Word32 L_var2 ) +#else /* BASOP_NOGLOB */ +Word32 DEPR_L_add_c( Word32 L_var1, Word32 L_var2, Flag *Carry ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + Word32 L_test; + Flag carry_int = 0; + +#ifndef BASOP_NOGLOB + L_var_out = L_var1 + L_var2 + Carry; +#else /* BASOP_NOGLOB */ + L_var_out = L_var1 + L_var2 + *Carry; +#endif /* BASOP_NOGLOB */ + + L_test = L_var1 + L_var2; + + if ( ( L_var1 > 0 ) && ( L_var2 > 0 ) && ( L_test < 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#endif /* ! BASOP_NOGLOB */ + carry_int = 0; + } + else + { + if ( ( L_var1 < 0 ) && ( L_var2 < 0 ) ) + { + if ( L_test >= 0 ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#endif /* ! BASOP_NOGLOB */ + carry_int = 1; + } + else + { +#ifndef BASOP_NOGLOB + Overflow = 0; +#endif /* ! BASOP_NOGLOB */ + carry_int = 1; + } + } + else + { + if ( ( ( L_var1 ^ L_var2 ) < 0 ) && ( L_test >= 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 0; +#endif /* ! BASOP_NOGLOB */ + carry_int = 1; + } + else + { +#ifndef BASOP_NOGLOB + Overflow = 0; +#endif /* ! BASOP_NOGLOB */ + carry_int = 0; + } + } + } + +#ifndef BASOP_NOGLOB + if ( Carry ) +#else /* BASOP_NOGLOB */ + if ( *Carry ) +#endif /* BASOP_NOGLOB */ + { + if ( L_test == MAX_32 ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + Carry = carry_int; +#else /* BASOP_NOGLOB */ + *Carry = carry_int; +#endif /* BASOP_NOGLOB */ + } + else + { + if ( L_test == (Word32) 0xFFFFFFFFL ) + { +#ifndef BASOP_NOGLOB + Carry = 1; +#else /* BASOP_NOGLOB */ + *Carry = 1; +#endif /* BASOP_NOGLOB */ + } + else + { +#ifndef BASOP_NOGLOB + Carry = carry_int; +#else /* BASOP_NOGLOB */ + *Carry = carry_int; +#endif /* BASOP_NOGLOB */ + } + } + } + else + { +#ifndef BASOP_NOGLOB + Carry = carry_int; +#else /* BASOP_NOGLOB */ + *Carry = carry_int; +#endif /* BASOP_NOGLOB */ + } + + /* BASOP_CHECK(); Do not check for overflow here, function produces the carry bit instead */ + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_sub_c | + | | + | Purpose : | + | | + | Performs 32 bits subtraction of the two 32 bits variables with carry | +#ifndef BASOP_NOGLOB + | (borrow) : L_var1-L_var2-C. No saturation. Generate carry and Overflow | +#else + | (borrow) : L_var1-L_var2-C. No saturation. Generate carry and BASOP_Overflow | +#endif + | values. The carry and overflow values are binary variables which can | + | be tested and assigned values. | + | | + | Complexity weight : 2 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | L_var2 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + | | + | Caution : | + | | +#ifndef BASOP_NOGLOB + | In some cases the Carry flag has to be cleared or set before using | +#else + | In some cases the BASOP_Carry flag has to be cleared or set before using | +#endif + | operators which take into account its value. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_sub_c( Word32 L_var1, Word32 L_var2 ) +#else /* BASOP_NOGLOB */ +Word32 DEPR_L_sub_c( Word32 L_var1, Word32 L_var2, Flag *Carry ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + Word32 L_test; + Flag carry_int = 0; + +#ifndef BASOP_NOGLOB + if ( Carry ) +#else /* BASOP_NOGLOB */ + if ( *Carry ) +#endif /* BASOP_NOGLOB */ + { +#ifndef BASOP_NOGLOB + Carry = 0; +#else /* BASOP_NOGLOB */ + *Carry = 0; +#endif /* BASOP_NOGLOB */ + if ( L_var2 != MIN_32 ) + { +#ifndef BASOP_NOGLOB + L_var_out = L_add_c( L_var1, -L_var2 ); +#else /* BASOP_NOGLOB */ + L_var_out = DEPR_L_add_c( L_var1, -L_var2, Carry ); +#endif /* BASOP_NOGLOB */ + } + else + { + L_var_out = L_var1 - L_var2; + if ( L_var1 > 0L ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + Carry = 0; +#else /* BASOP_NOGLOB */ + *Carry = 0; +#endif /* BASOP_NOGLOB */ + } + } + } + else + { + L_var_out = L_var1 - L_var2 - (Word32) 0X00000001L; + L_test = L_var1 - L_var2; + + if ( ( L_test < 0 ) && ( L_var1 > 0 ) && ( L_var2 < 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#endif /* ! BASOP_NOGLOB */ + carry_int = 0; + } + else if ( ( L_test > 0 ) && ( L_var1 < 0 ) && ( L_var2 > 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#endif /* ! BASOP_NOGLOB */ + carry_int = 1; + } + else if ( ( L_test > 0 ) && ( ( L_var1 ^ L_var2 ) > 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 0; +#endif /* ! BASOP_NOGLOB */ + carry_int = 1; + } + if ( L_test == MIN_32 ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + Carry = carry_int; +#else /* BASOP_NOGLOB */ + *Carry = carry_int; +#endif /* BASOP_NOGLOB */ + } + else + { +#ifndef BASOP_NOGLOB + Carry = carry_int; +#else /* BASOP_NOGLOB */ + *Carry = carry_int; +#endif /* BASOP_NOGLOB */ + } + } + + /* BASOP_CHECK(); Do not check for overflow here, function produces the carry bit instead */ + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_negate | + | | + | Purpose : | + | | + | Negate the 32 bit variable L_var1 with saturation; saturate in the case | + | where input is -2147483648 (0x8000 0000). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +Word32 L_negate( Word32 L_var1 ) +{ + Word32 L_var_out; + + L_var_out = ( L_var1 == MIN_32 ) ? MAX_32 : -L_var1; + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : mult_r | + | | + | Purpose : | + | | + | Same as mult with rounding, i.e.: | + | mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and | + | mult_r(-32768,-32768) = 32767. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x8000 <= var_out <= 0x7fff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word16 mult_ro( Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word16 var_out; + Word32 L_product_arr; + + L_product_arr = (Word32) var1 * (Word32) var2; /* product */ + L_product_arr += (Word32) 0x00004000L; /* round */ + L_product_arr &= (Word32) 0xffff8000L; + L_product_arr >>= 15; /* shift */ + + if ( L_product_arr & (Word32) 0x00010000L ) /* sign extend when necessary */ + { + L_product_arr |= (Word32) 0xffff0000L; + } + var_out = saturate_o( L_product_arr, Overflow ); + + + return ( var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word16 mult_r( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + Word32 L_product_arr; + + L_product_arr = (Word32) var1 * (Word32) var2; /* product */ + L_product_arr += (Word32) 0x00004000L; /* round */ + L_product_arr &= (Word32) 0xffff8000L; + L_product_arr >>= 15; /* shift */ + + if ( L_product_arr & (Word32) 0x00010000L ) /* sign extend when necessary */ + { + L_product_arr |= (Word32) 0xffff0000L; + } + var_out = saturate( L_product_arr ); + + + return ( var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | | + | Function Name : L_shl | + | | + | Purpose : | + | | + | Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero | + | fill the var2 LSB of the result. If var2 is negative, arithmetically | + | shift L_var1 right by -var2 with sign extension. Saturate the result in | + | case of underflows or overflows. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_shl( Word32 L_var1, Word16 var2 ) +#else /* BASOP_NOGLOB */ +Word32 L_shl_o( Word32 L_var1, Word16 var2, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + + Word32 L_var_out = 0L; + + if ( var2 <= 0 ) + { + if ( var2 < -32 ) + var2 = -32; + var2 = -var2; + L_var_out = L_shr( L_var1, var2 ); + } + else + { + for ( ; var2 > 0; var2-- ) + { + if ( L_var1 > (Word32) 0X3fffffffL ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + L_var_out = MAX_32; + break; + } + else + { + if ( L_var1 < (Word32) 0xc0000000L ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + L_var_out = MIN_32; + break; + } + } + L_var1 *= 2; + L_var_out = L_var1; + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#ifdef BASOP_NOGLOB +Word32 L_shl( Word32 L_var1, Word16 var2 ) +{ + + Word32 L_var_out = 0L; + + if ( var2 <= 0 ) + { + if ( var2 < -32 ) + var2 = -32; + var2 = -var2; + L_var_out = L_shr( L_var1, var2 ); + } + else + { + for ( ; var2 > 0; var2-- ) + { + if ( L_var1 > (Word32) 0X3fffffffL ) + { + assert( 0 ); + L_var_out = MAX_32; + break; + } + else + { + if ( L_var1 < (Word32) 0xc0000000L ) + { + assert( 0 ); + L_var_out = MIN_32; + break; + } + } + L_var1 *= 2; + L_var_out = L_var1; + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} +#endif /* BASOP_NOGLOB */ + +/*___________________________________________________________________________ + | | + | Function Name : L_shr | + | | + | Purpose : | + | | + | Arithmetically shift the 32 bit input L_var1 right var2 positions with | + | sign extension. If var2 is negative, arithmetically shift L_var1 left | + | by -var2 and zero fill the -var2 LSB of the result. Saturate the result | + | in case of underflows or overflows. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word32 L_shr_o( Word32 L_var1, Word16 var2, Flag *Overflow ) +{ + Word32 L_var_out; + + if ( var2 < 0 ) + { + if ( var2 < -32 ) + var2 = -32; + var2 = -var2; + L_var_out = L_shl_o( L_var1, var2, Overflow ); + } + else + { + if ( var2 >= 31 ) + { + L_var_out = ( L_var1 < 0L ) ? -1 : 0; + } + else + { + if ( L_var1 < 0 ) + { + L_var_out = ~( ( ~L_var1 ) >> var2 ); + } + else + { + L_var_out = L_var1 >> var2; + } + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word32 L_shr( Word32 L_var1, Word16 var2 ) +{ + Word32 L_var_out; + + if ( var2 < 0 ) + { + if ( var2 < -32 ) + var2 = -32; + var2 = -var2; + L_var_out = L_shl( L_var1, var2 ); + } + else + { + if ( var2 >= 31 ) + { + L_var_out = ( L_var1 < 0L ) ? -1 : 0; + } + else + { + if ( L_var1 < 0 ) + { + L_var_out = ~( ( ~L_var1 ) >> var2 ); + } + else + { + L_var_out = L_var1 >> var2; + } + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | | + | Function Name : shr_r | + | | + | Purpose : | + | | + | Same as shr(var1,var2) but with rounding. Saturate the result in case of| + | underflows or overflows : | + | - If var2 is greater than zero : | + | if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1)))) | + | is equal to zero | + | then | + | shr_r(var1,var2) = shr(var1,var2) | + | else | + | shr_r(var1,var2) = add(shr(var1,var2),1) | + | - If var2 is less than or equal to zero : | + | shr_r(var1,var2) = shr(var1,var2). | + | | + | Complexity weight : 3 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +Word16 shr_r( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + if ( var2 > 15 ) + { + var_out = 0; + } + else + { + var_out = shr( var1, var2 ); + + if ( var2 > 0 ) + { + if ( ( var1 & ( (Word16) 1 << ( var2 - 1 ) ) ) != 0 ) + { + var_out++; + } + } + } + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : mac_r | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | + | result to L_var3 with saturation. Round the LS 16 bits of the result | + | into the MS 16 bits with saturation and shift the result right by 16. | + | Return a 16 bit result. | + | mac_r(L_var3,var1,var2) = round_fx(L_mac(L_var3,var1,var2)) | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word16 mac_ro( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word16 var_out; + + L_var3 = L_mac_o( L_var3, var1, var2, Overflow ); + L_var3 = L_add_o( L_var3, (Word32) 0x00008000L, Overflow ); + var_out = extract_h( L_var3 ); + + BASOP_CHECK(); + + + return ( var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word16 mac_r( Word32 L_var3, Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + L_var3 = L_mac( L_var3, var1, var2 ); + L_var3 = L_add( L_var3, (Word32) 0x00008000L ); + var_out = extract_h( L_var3 ); + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : msu_r | + | | + | Purpose : | + | | + | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | + | bit result from L_var3 with saturation. Round the LS 16 bits of the res-| + | ult into the MS 16 bits with saturation and shift the result right by | + | 16. Return a 16 bit result. | + | msu_r(L_var3,var1,var2) = round_fx(L_msu(L_var3,var1,var2)) | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var3 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word16 msu_ro( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word16 var_out; + + L_var3 = L_msu_o( L_var3, var1, var2, Overflow ); + L_var3 = L_add_o( L_var3, (Word32) 0x00008000L, Overflow ); + var_out = extract_h( L_var3 ); + + BASOP_CHECK(); + + return ( var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word16 msu_r( Word32 L_var3, Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + L_var3 = L_msu( L_var3, var1, var2 ); + L_var3 = L_add( L_var3, (Word32) 0x00008000L ); + var_out = extract_h( L_var3 ); + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return ( var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | | + | Function Name : L_deposit_h | + | | + | Purpose : | + | | + | Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The | + | 16 LS bits of the output are zeroed. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var_out <= 0x7fff 0000. | + |___________________________________________________________________________| +*/ +Word32 L_deposit_h( Word16 var1 ) +{ + Word32 L_var_out; + + L_var_out = (Word32) var1 << 16; + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_deposit_l | + | | + | Purpose : | + | | + | Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The | + | 16 MS bits of the output are sign extended. | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0xFFFF 8000 <= var_out <= 0x0000 7fff. | + |___________________________________________________________________________| +*/ +Word32 L_deposit_l( Word16 var1 ) +{ + Word32 L_var_out; + + L_var_out = (Word32) var1; + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_shr_r | + | | + | Purpose : | + | | + | Same as L_shr(L_var1,var2) but with rounding. Saturate the result in | + | case of underflows or overflows : | + | - If var2 is greater than zero : | + | if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))| + | is equal to zero | + | then | + | L_shr_r(L_var1,var2) = L_shr(L_var1,var2) | + | else | + | L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1) | + | - If var2 is less than or equal to zero : | + | L_shr_r(L_var1,var2) = L_shr(L_var1,var2). | + | | + | Complexity weight : 3 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +Word32 L_shr_r( Word32 L_var1, Word16 var2 ) +{ + Word32 L_var_out; + + if ( var2 > 31 ) + { + L_var_out = 0; + } + else + { + L_var_out = L_shr( L_var1, var2 ); + + if ( var2 > 0 ) + { + if ( ( L_var1 & ( (Word32) 1 << ( var2 - 1 ) ) ) != 0 ) + { + L_var_out++; + } + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_abs | + | | + | Purpose : | + | | + | Absolute value of L_var1; Saturate in case where the input is | + | -214783648 | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +Word32 L_abs( Word32 L_var1 ) +{ + Word32 L_var_out; + + if ( L_var1 == MIN_32 ) + { + L_var_out = MAX_32; + } + else + { + if ( L_var1 < 0 ) + { + L_var_out = -L_var1; + } + else + { + L_var_out = L_var1; + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : L_sat | + | | + | Purpose : | + | | + | 32 bit L_var1 is set to 2147483647 if an overflow occured or to | + | -2147483648 if an underflow occured on the most recent L_add_c, | + | L_sub_c, L_macNs or L_msuNs operations. The carry and overflow values | + | are binary values which can be tested and assigned values. | + | | + | Complexity weight : 4 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | L_var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word32 L_sat( Word32 L_var1 ) +#else /* BASOP_NOGLOB */ +Word32 DEPR_L_sat_co( Word32 L_var1, Flag Overflow, Flag Carry ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + + L_var_out = L_var1; + + if ( Overflow ) + { + + if ( Carry ) + { + L_var_out = MIN_32; + } + else + { + L_var_out = MAX_32; + } +#ifndef BASOP_NOGLOB + + Carry = 0; + Overflow = 0; +#endif /* ! BASOP_NOGLOB */ + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : norm_s | + | | + | Purpose : | + | | + | Produces the number of left shift needed to normalize the 16 bit varia- | + | ble var1 for positive values on the interval with minimum of 16384 and | + | maximum of 32767, and for negative values on the interval with minimum | + | of -32768 and maximum of -16384; in order to normalize the result, the | + | following operation must be done : | + | norm_var1 = shl(var1,norm_s(var1)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 000f. | + |___________________________________________________________________________| +*/ +Word16 norm_s( Word16 var1 ) +{ + Word16 var_out; + + if ( var1 == 0 ) + { + var_out = 0; + } + else + { + if ( var1 == (Word16) 0xffff ) + { + var_out = 15; + } + else + { + if ( var1 < 0 ) + { + var1 = ~var1; + } + for ( var_out = 0; var1 < 0x4000; var_out++ ) + { + var1 <<= 1; + } + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/*___________________________________________________________________________ + | | + | Function Name : div_s | + | | + | Purpose : | + | | + | Produces a result which is the fractional integer division of var1 by | + | var2; var1 and var2 must be positive and var2 must be greater or equal | + | to var1; the result is positive (leading bit equal to 0) and truncated | + | to 16 bits. | + | If var1 = var2 then div(var1,var2) = 32767. | + | | + | Complexity weight : 18 | + | | + | Inputs : | + | | + | var1 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var1 <= var2 and var2 != 0. | + | | + | var2 | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : var1 <= var2 <= 0x0000 7fff and var2 != 0. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | + | It's a Q15 value (point between b15 and b14). | + |___________________________________________________________________________| +*/ +ivas_error div_s( Word16 *result, Word16 var1, Word16 var2 ) +{ + Word16 var_out = 0; + Word16 iteration; + Word32 L_num; + Word32 L_denom; + + if ( ( var1 > var2 ) || ( var1 < 0 ) || ( var2 < 0 ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Division Error var1=%d var2=%d in div_s", var1, var2 ); + } + if ( var2 == 0 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Division by 0 in div_s" ); + } + if ( var1 == 0 ) + { + var_out = 0; + } + else + { + if ( var1 == var2 ) + { + var_out = MAX_16; + } + else + { + L_num = L_deposit_l( var1 ); + L_denom = L_deposit_l( var2 ); + + for ( iteration = 0; iteration < 15; iteration++ ) + { + var_out <<= 1; + L_num <<= 1; + + if ( L_num >= L_denom ) + { + L_num = L_sub( L_num, L_denom ); + var_out = add( var_out, 1 ); + } + } + } + } + + BASOP_CHECK(); + + *result = var_out; + return IVAS_ERR_OK; +} + + +/*___________________________________________________________________________ + | | + | Function Name : norm_l | + | | + | Purpose : | + | | + | Produces the number of left shifts needed to normalize the 32 bit varia-| + | ble L_var1 for positive values on the interval with minimum of | + | 1073741824 and maximum of 2147483647, and for negative values on the in-| + | terval with minimum of -2147483648 and maximum of -1073741824; in order | + | to normalize the result, the following operation must be done : | + | norm_L_var1 = L_shl(L_var1,norm_l(L_var1)). | + | | + | Complexity weight : 1 | + | | + | Inputs : | + | | + | L_var1 | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x0000 0000 <= var_out <= 0x0000 001f. | + |___________________________________________________________________________| +*/ +Word16 norm_l( Word32 L_var1 ) +{ + Word16 var_out; + + if ( L_var1 == 0 ) + { + var_out = 0; + } + else + { + if ( L_var1 == (Word32) 0xffffffffL ) + { + var_out = 31; + } + else + { + if ( L_var1 < 0 ) + { + L_var1 = ~L_var1; + } + for ( var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++ ) + { + L_var1 <<= 1; + } + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} + +/* + ****************************************************************************** + * Additional operators extracted from the G.723.1 Library + * Adapted for WMOPS calculations + ****************************************************************************** + */ + +/*___________________________________________________________________________ + | | + | Function Name : L_mls | + | | + | Purpose : | + | | + | Multiplies a 16 bit word v by a 32 bit word Lv and returns a 32 bit | + | word (multiplying 16 by 32 bit words gives 48 bit word; the function | + | extracts the 32 MSB and shift the result to the left by 1). | + | | + | A 32 bit word can be written as | + | Lv = a + b * 2^16 | + | where a= unsigned 16 LSBs and b= signed 16 MSBs. | + | The function returns v * Lv / 2^15 which is equivalent to | + | a*v / 2^15 + b*v*2 | + | | + | Complexity weight : 5 | + | | + | Inputs : | + | | + | Lv | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | + | v | + | 16 bit short signed integer (Word16) whose value falls in the | + | range : 0x8000 <= var1 <= 0x7fff. | + | | + | Outputs : | + | | + | none | + | | + | Return Value : | + | | + | var_out | + | 32 bit long signed integer (Word32) whose value falls in the | + | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | + | | + |___________________________________________________________________________| +*/ +#ifdef BASOP_NOGLOB +Word32 L_mls_o( Word32 Lv, Word16 v, Flag *Overflow ) +{ + Word32 Temp; + + Temp = Lv & (Word32) 0x0000ffff; + Temp = Temp * (Word32) v; + Temp = L_shr( Temp, (Word16) 15 ); + Temp = L_mac_o( Temp, v, extract_h( Lv ), Overflow ); + + BASOP_CHECK(); + + return Temp; +} + +#endif /* BASOP_NOGLOB */ +Word32 L_mls( Word32 Lv, Word16 v ) +{ + Word32 Temp; + + Temp = Lv & (Word32) 0x0000ffff; + Temp = Temp * (Word32) v; + Temp = L_shr( Temp, (Word16) 15 ); + Temp = L_mac( Temp, v, extract_h( Lv ) ); + + BASOP_CHECK(); + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + return Temp; +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*__________________________________________________________________________ +| | +| Function Name : div_l | +| | +| Purpose : | +| | +| Produces a result which is the fractional integer division of L_var1 by | +| var2; L_var1 and var2 must be positive and var2 << 16 must be greater or| +| equal to L_var1; the result is positive (leading bit equal to 0) and | +| truncated to 16 bits. | +| If L_var1 == var2 << 16 then div_l(L_var1,var2) = 32767. | +| | +| Complexity weight : 32 | +| | +| Inputs : | +| | +| L_var1 | +| 32 bit long signed integer (Word32) whose value falls in the | +| range : 0x0000 0000 <= var1 <= (var2 << 16) and var2 != 0. | +| L_var1 must be considered as a Q.31 value | +| | +| var2 | +| 16 bit short signed integer (Word16) whose value falls in the | +| range : var1 <= (var2<< 16) <= 0x7fff0000 and var2 != 0. | +| var2 must be considered as a Q.15 value | +| | +| Outputs : | +| | +| none | +| | +| Return Value : | +| | +| var_out | +| 16 bit short signed integer (Word16) whose value falls in the | +| range : 0x0000 0000 <= var_out <= 0x0000 7fff. | +| It's a Q15 value (point between b15 and b14). | +|___________________________________________________________________________| +*/ +ivas_error div_l( Word16 *result, Word32 L_num, Word16 den ) +{ + Word16 var_out = (Word16) 0; + Word32 L_den; + Word16 iteration; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( den == (Word16) 0 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Division by 0 in div_l, Fatal error in div_l" ); + } + + if ( ( L_num < (Word32) 0 ) || ( den < (Word16) 0 ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Division Error in div_l, Fatal error in div_l" ); + } + + L_den = L_deposit_h( den ); + + if ( L_num >= L_den ) + { + BASOP_CHECK(); + *result = MAX_16; + return error; + } + else + { + L_num = L_shr( L_num, (Word16) 1 ); + L_den = L_shr( L_den, (Word16) 1 ); + for ( iteration = (Word16) 0; iteration < (Word16) 15; iteration++ ) + { + var_out = shl( var_out, (Word16) 1 ); + L_num = L_shl( L_num, (Word16) 1 ); + if ( L_num >= L_den ) + { + L_num = L_sub( L_num, L_den ); + var_out = add( var_out, (Word16) 1 ); + } + } + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + BASOP_CHECK(); + + *result = var_out; + return error; + } +} + + +/*__________________________________________________________________________ +| | +| Function Name : i_mult | +| | +| Purpose : | +| | +| Integer 16-bit multiplication with overflow control. | +| No overflow protection is performed if ORIGINAL_G7231 is defined. | +| | +| Complexity weight : 3 (it is performing something equivalent to | +| extract_h( L_shl( L_mult0( v1, v2), 16)) | +| | +| Inputs : | +| | +| a | +| 16 bit short signed integer (Word16). | +| | +| b | +| 16 bit short signed integer (Word16). | +| | +| Outputs : | +| | +| none | +| | +| Return Value : | +| | +| 16 bit short signed integer (Word16). No overflow checks | +| are performed if ORIGINAL_G7231 is defined. | +|___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +Word16 i_mult( Word16 a, Word16 b ) +#else /* BASOP_NOGLOB */ +Word16 DEPR_i_mult( Word16 a, Word16 b ) +#endif /* BASOP_NOGLOB */ +{ +#ifdef ORIGINAL_G7231 + return a * b; +#else + Word32 /*register*/ c = a * b; + return saturate( c ); +#endif +} + + +/* + ****************************************************************************** + * The following three operators are not part of the original + * G.729/G.723.1 set of basic operators and implement shiftless + * accumulation operation. + ****************************************************************************** + */ + +/*___________________________________________________________________________ + | + | Function Name : L_mult0 + | + | Purpose : + | + | L_mult0 is the 32 bit result of the multiplication of var1 times var2 + | without one left shift. + | + | Complexity weight : 1 + | + | Inputs : + | + | var1 16 bit short signed integer (Word16) whose value falls in the + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. + | + | var2 16 bit short signed integer (Word16) whose value falls in the + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. + | + | Return Value : + | + | L_var_out + | 32 bit long signed integer (Word32) whose value falls in the + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + |___________________________________________________________________________ +*/ +Word32 L_mult0( Word16 var1, Word16 var2 ) +{ + Word32 L_var_out; + + L_var_out = (Word32) var1 * (Word32) var2; + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/*___________________________________________________________________________ + | + | Function Name : L_mac0 + | + | Purpose : + | + | Multiply var1 by var2 (without left shift) and add the 32 bit result to + | L_var3 with saturation, return a 32 bit result: + | L_mac0(L_var3,var1,var2) = L_add(L_var3,(L_mult0(var1,var2)). + | + | Complexity weight : 1 + | + | Inputs : + | + | L_var3 32 bit long signed integer (Word32) whose value falls in the + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. + | + | var1 16 bit short signed integer (Word16) whose value falls in the + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. + | + | var2 16 bit short signed integer (Word16) whose value falls in the + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. + | + | Return Value : + | + | L_var_out + | 32 bit long signed integer (Word32) whose value falls in the + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + |___________________________________________________________________________ +*/ +#ifdef BASOP_NOGLOB +Word32 L_mac0_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult0( var1, var2 ); + L_var_out = L_add_o( L_var3, L_product, Overflow ); + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word32 L_mac0( Word32 L_var3, Word16 var1, Word16 var2 ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult0( var1, var2 ); + L_var_out = L_add( L_var3, L_product ); + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +/*___________________________________________________________________________ + | + | Function Name : L_msu0 + | + | Purpose : + | + | Multiply var1 by var2 (without left shift) and subtract the 32 bit + | result to L_var3 with saturation, return a 32 bit result: + | L_msu0(L_var3,var1,var2) = L_sub(L_var3,(L_mult0(var1,var2)). + | + | Complexity weight : 1 + | + | Inputs : + | + | L_var3 32 bit long signed integer (Word32) whose value falls in the + | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. + | + | var1 16 bit short signed integer (Word16) whose value falls in the + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. + | + | var2 16 bit short signed integer (Word16) whose value falls in the + | range : 0xffff 8000 <= var1 <= 0x0000 7fff. + | + | Return Value : + | + | L_var_out + | 32 bit long signed integer (Word32) whose value falls in the + | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + |___________________________________________________________________________ +*/ +#ifdef BASOP_NOGLOB +Word32 L_msu0_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult0( var1, var2 ); + L_var_out = L_sub_o( L_var3, L_product, Overflow ); + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word32 L_msu0( Word32 L_var3, Word16 var1, Word16 var2 ) +{ + Word32 L_var_out; + Word32 L_product; + + L_product = L_mult0( var1, var2 ); + L_var_out = L_sub( L_var3, L_product ); + + BASOP_CHECK(); + + + return ( L_var_out ); +} +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ + +/* end of file */ diff --git a/lib_com/basop32.h b/lib_com/basop32.h new file mode 100644 index 0000000000..f1bd65bc8e --- /dev/null +++ b/lib_com/basop32.h @@ -0,0 +1,280 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* + =========================================================================== + File: BASOP32.H v.2.3 - 30.Nov.2009 + =========================================================================== + + ITU-T STL BASIC OPERATORS + + GLOBAL FUNCTION PROTOTYPES + + History: + 26.Jan.00 v1.0 Incorporated to the STL from updated G.723.1/G.729 + basic operator library (based on basic_op.h) and + G.723.1's basop.h. + 05.Jul.00 v1.1 Added 32-bit shiftless mult/mac/msub operators + + 03 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + norm_s() weight reduced from 15 to 1. + norm_l() weight reduced from 30 to 1. + L_abs() weight reduced from 2 to 1. + L_add() weight reduced from 2 to 1. + L_negate() weight reduced from 2 to 1. + L_shl() weight reduced from 2 to 1. + L_shr() weight reduced from 2 to 1. + L_sub() weight reduced from 2 to 1. + mac_r() weight reduced from 2 to 1. + msu_r() weight reduced from 2 to 1. + mult_r() weight reduced from 2 to 1. + L_deposit_h() weight reduced from 2 to 1. + L_deposit_l() weight reduced from 2 to 1. + L_mls() weight of 5. + div_l() weight of 32. + i_mult() weight of 3. + + 30 Nov 09 v2.3 round() function is now round_fx(). + saturate() is not referencable from outside application + + 13 Mar 12 Add Overflow2 flag for additional overflow checking. + ============================================================================ +*/ + + +#ifndef _BASIC_OP_H +#define _BASIC_OP_H + +#include "typedef.h" +#include "ivas_error.h" +#ifndef BASOP_NOGLOB + +#endif /* ! BASOP_NOGLOB */ +#define BASOP_OVERFLOW2 + +/*___________________________________________________________________________ + | | + | Constants and Globals | + |___________________________________________________________________________| +*/ +#ifndef BASOP_NOGLOB +extern Flag Overflow, Overflow2; +extern Flag Carry; + +#else /* BASOP_NOGLOB */ +/* DISABLED TO AVOID GLOBAL VARIABLES */ +/* +extern Flag BASOP_Overflow, BASOP_Overflow2; +extern Flag BASOP_Carry; +*/ +#endif /* BASOP_NOGLOB */ +#define BASOP_SATURATE_WARNING_ON +#define BASOP_SATURATE_WARNING_OFF +#define BASOP_SATURATE_ERROR_ON +#define BASOP_SATURATE_ERROR_OFF +#define BASOP_CHECK() + + +#define MAX_32 (Word32) 0x7fffffffL +#define MIN_32 (Word32) 0x80000000L + +#define MAX_16 (Word16) 0x7fff +#define MIN_16 (Word16) 0x8000 + +/*___________________________________________________________________________ + | | + | Prototypes for basic arithmetic operators | + |___________________________________________________________________________| +*/ + +#ifndef BASOP_NOGLOB +Word16 add( Word16 var1, Word16 var2 ); /* Short add, 1 */ +Word16 sub( Word16 var1, Word16 var2 ); /* Short sub, 1 */ +Word16 abs_s( Word16 var1 ); /* Short abs, 1 */ +Word16 shl( Word16 var1, Word16 var2 ); /* Short shift left, 1 */ +Word16 shr( Word16 var1, Word16 var2 ); /* Short shift right, 1 */ +Word16 mult( Word16 var1, Word16 var2 ); /* Short mult, 1 */ +Word32 L_mult( Word16 var1, Word16 var2 ); /* Long mult, 1 */ +Word16 negate( Word16 var1 ); /* Short negate, 1 */ +Word16 extract_h( Word32 L_var1 ); /* Extract high, 1 */ +Word16 extract_l( Word32 L_var1 ); /* Extract low, 1 */ +Word16 round_fx( Word32 L_var1 ); /* Round, 1 */ +Word32 L_mac( Word32 L_var3, Word16 var1, Word16 var2 ); /* Mac, 1 */ +Word32 L_msu( Word32 L_var3, Word16 var1, Word16 var2 ); /* Msu, 1 */ +Word32 L_macNs( Word32 L_var3, Word16 var1, Word16 var2 ); /* Mac without + sat, 1 */ +#else /* BASOP_NOGLOB */ +Word16 add( Word16 var1, Word16 var2 ); /* Short add, 1 */ +Word16 sub( Word16 var1, Word16 var2 ); /* Short sub, 1 */ +Word16 abs_s( Word16 var1 ); /* Short abs, 1 */ +Word16 shl( Word16 var1, Word16 var2 ); /* Short shift left, 1 */ +Word16 shr( Word16 var1, Word16 var2 ); /* Short shift right, 1 */ +Word16 mult( Word16 var1, Word16 var2 ); /* Short mult, 1 */ +Word32 L_mult( Word16 var1, Word16 var2 ); /* Long mult, 1 */ +Word16 negate( Word16 var1 ); /* Short negate, 1 */ +Word16 extract_h( Word32 L_var1 ); /* Extract high, 1 */ +Word16 extract_l( Word32 L_var1 ); /* Extract low, 1 */ +Word16 round_fx( Word32 L_var1 ); /* Round, 1 */ +Word32 L_mac( Word32 L_var3, Word16 var1, Word16 var2 ); /* Mac, 1 */ +Word32 L_msu( Word32 L_var3, Word16 var1, Word16 var2 ); /* Msu, 1 */ +Word32 DEPR_L_macNs( Word32 L_var3, Word16 var1, Word16 var2, Flag *Carry ); /* Mac without + sat, 1 */ +#endif /* BASOP_NOGLOB */ + +#ifndef BASOP_NOGLOB +Word32 L_msuNs( Word32 L_var3, Word16 var1, Word16 var2 ); /* Msu without + sat, 1 */ +#else /* BASOP_NOGLOB */ +Word32 DEPR_L_msuNs( Word32 L_var3, Word16 var1, Word16 var2, Flag *Carry ); /* Msu without + sat, 1 */ +#endif /* BASOP_NOGLOB */ +#ifndef BASOP_NOGLOB +Word32 L_add( Word32 L_var1, Word32 L_var2 ); /* Long add, 1 */ +Word32 L_sub( Word32 L_var1, Word32 L_var2 ); /* Long sub, 1 */ +Word32 L_add_c( Word32 L_var1, Word32 L_var2 ); /* Long add with c, 2 */ +Word32 L_sub_c( Word32 L_var1, Word32 L_var2 ); /* Long sub with c, 2 */ +Word32 L_negate( Word32 L_var1 ); /* Long negate, 1 */ +Word16 mult_r( Word16 var1, Word16 var2 ); /* Mult with round, 1 */ +Word32 L_shl( Word32 L_var1, Word16 var2 ); /* Long shift left, 1 */ +Word32 L_shr( Word32 L_var1, Word16 var2 ); /* Long shift right, 1 */ +Word16 shr_r( Word16 var1, Word16 var2 ); /* Shift right with + round, 2 */ +#else /* BASOP_NOGLOB */ +Word32 L_add( Word32 L_var1, Word32 L_var2 ); /* Long add, 1 */ +Word32 L_sub( Word32 L_var1, Word32 L_var2 ); /* Long sub, 1 */ +Word32 DEPR_L_add_c( Word32 L_var1, Word32 L_var2, Flag *Carry ); /* Long add with c, 2 */ +Word32 DEPR_L_sub_c( Word32 L_var1, Word32 L_var2, Flag *Carry ); /* Long sub with c, 2 */ +Word32 L_negate( Word32 L_var1 ); /* Long negate, 1 */ +Word16 mult_r( Word16 var1, Word16 var2 ); /* Mult with round, 1 */ +Word32 L_shl( Word32 L_var1, Word16 var2 ); /* Long shift left, 1 */ +Word32 L_shr( Word32 L_var1, Word16 var2 ); /* Long shift right, 1 */ +Word16 shr_r( Word16 var1, Word16 var2 ); /* Shift right with + round, 2 */ +#endif /* BASOP_NOGLOB */ + +#ifndef BASOP_NOGLOB +Word16 mac_r( Word32 L_var3, Word16 var1, Word16 var2 ); /* Mac with + rounding, 1 */ +#else /* BASOP_NOGLOB */ +Word16 mac_r( Word32 L_var3, Word16 var1, Word16 var2 ); /* Mac with + rounding, 1 */ +#endif /* BASOP_NOGLOB */ +#ifndef BASOP_NOGLOB +Word16 msu_r( Word32 L_var3, Word16 var1, Word16 var2 ); /* Msu with + rounding, 1 */ +#else /* BASOP_NOGLOB */ +Word16 msu_r( Word32 L_var3, Word16 var1, Word16 var2 ); /* Msu with + rounding, 1 */ +#endif /* BASOP_NOGLOB */ +#ifndef BASOP_NOGLOB +Word32 L_deposit_h( Word16 var1 ); /* 16 bit var1 -> MSB, 1 */ +Word32 L_deposit_l( Word16 var1 ); /* 16 bit var1 -> LSB, 1 */ +#else /* BASOP_NOGLOB */ +Word32 L_deposit_h( Word16 var1 ); /* 16 bit var1 -> MSB, 1 */ +Word32 L_deposit_l( Word16 var1 ); /* 16 bit var1 -> LSB, 1 */ +#endif /* BASOP_NOGLOB */ + +#ifndef BASOP_NOGLOB +Word32 L_shr_r( Word32 L_var1, Word16 var2 ); /* Long shift right with + round, 3 */ +#else /* BASOP_NOGLOB */ +Word32 L_shr_r( Word32 L_var1, Word16 var2 ); /* Long shift right with + round, 3 */ +#endif /* BASOP_NOGLOB */ +#ifndef BASOP_NOGLOB +Word32 L_abs( Word32 L_var1 ); /* Long abs, 1 */ +Word32 L_sat( Word32 L_var1 ); /* Long saturation, 4 */ +Word16 norm_s( Word16 var1 ); /* Short norm, 1 */ +ivas_error div_s( Word16 *result, Word16 var1, Word16 var2 ); /* Short division, 18 */ +Word16 norm_l( Word32 L_var1 ); /* Long norm, 1 */ +#else /* BASOP_NOGLOB */ +Word32 L_abs( Word32 L_var1 ); /* Long abs, 1 */ +Word32 DEPR_L_sat_co( Word32 L_var1, Flag Overflow, Flag Carry ); /* Long saturation, 4 */ +Word16 norm_s( Word16 var1 ); /* Short norm, 1 */ +ivas_error div_s( Word16 *result, Word16 var1, Word16 var2 ); /* Short division, 18 */ +Word16 norm_l( Word32 L_var1 ); /* Long norm, 1 */ +#endif /* BASOP_NOGLOB */ + + +/* + * Additional G.723.1 operators + */ +#ifndef BASOP_NOGLOB +Word32 L_mls( Word32, Word16 ); /* Weight FFS; currently assigned 5 */ +ivas_error div_l( Word16 *result, Word32, Word16 ); /* Weight FFS; currently assigned 32 */ +Word16 i_mult( Word16 a, Word16 b ); /* Weight FFS; currently assigned 3 */ +#else /* BASOP_NOGLOB */ +Word32 L_mls( Word32, Word16 ); /* Weight FFS; currently assigned 5 */ +ivas_error div_l( Word16 *result, Word32, Word16 ); /* Weight FFS; currently assigned 32 */ +Word16 DEPR_i_mult( Word16 a, Word16 b ); /* Weight FFS; currently assigned 3 */ +#endif /* BASOP_NOGLOB */ + +/* + * New shiftless operators, not used in G.729/G.723.1 + */ +Word32 L_mult0( Word16 v1, Word16 v2 ); /* 32-bit Multiply w/o shift 1 */ +Word32 L_mac0( Word32 L_v3, Word16 v1, Word16 v2 ); /* 32-bit Mac w/o shift 1 */ +Word32 L_msu0( Word32 L_v3, Word16 v1, Word16 v2 ); /* 32-bit Msu w/o shift 1 */ +#ifdef BASOP_NOGLOB + +/* + * Overflowing operators + */ +Word16 add_o( Word16 var1, Word16 var2, Flag *Overflow ); +Word16 sub_o( Word16 var1, Word16 var2, Flag *Overflow ); +Word16 shl_o( Word16 var1, Word16 var2, Flag *Overflow ); +Word16 mult_o( Word16 var1, Word16 var2, Flag *Overflow ); +Word32 L_mult_o( Word16 var1, Word16 var2, Flag *Overflow ); +Word16 round_fx_o( Word32 L_var1, Flag *Overflow ); +Word32 L_mac_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ); +Word32 L_msu_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ); +Word32 L_add_o( Word32 L_var1, Word32 L_var2, Flag *Overflow ); +Word32 L_sub_o( Word32 L_var1, Word32 L_var2, Flag *Overflow ); +Word32 L_shr_o( Word32 L_var1, Word16 var2, Flag *Overflow ); +Word32 L_shl_o( Word32 L_var1, Word16 var2, Flag *Overflow ); +Word32 L_mls_o( Word32 Lv, Word16 v, Flag *Overflow ); +Word32 L_mac0_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ); +Word32 L_msu0_o( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ); +Word16 mult_ro( Word16 var1, Word16 var2, Flag *Overflow ); +Word16 mac_ro( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ); +Word16 msu_ro( Word32 L_var3, Word16 var1, Word16 var2, Flag *Overflow ); +#endif /* BASOP_NOGLOB */ + + +#endif /* ifndef _BASIC_OP_H */ + + +/* end of file */ diff --git a/lib_com/basop_com_lpc.c b/lib_com/basop_com_lpc.c new file mode 100644 index 0000000000..a24c100d54 --- /dev/null +++ b/lib_com/basop_com_lpc.c @@ -0,0 +1,261 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include +#include +#include "options.h" +#include "typedef.h" +#include "basop_proto_func.h" +#include "cnst.h" + +#include "basop_util.h" +#include "stl.h" + +#define UNROLL_CHEBYSHEV_INNER_LOOP +#define NC_MAX 8 +#define GUESS_TBL_SZ 256 + +#define Madd_32_16( accu, x, y ) L_add( accu, Mpy_32_16( x, y ) ) +#define Msub_32_16( accu, x, y ) L_sub( accu, Mpy_32_16( x, y ) ) + + +/* + * weight_a + * + * Parameters: + * a I: LP filter coefficients Q12 + * ap O: weighted LP filter coefficients Q12 + * gamma I: weighting factor Q15 + * + * Function: + * Weighting of LP filter coefficients, ap[i] = a[i] * (gamma^i). + * + * Returns: + * void + */ +void basop_weight_a( const Word16 *a, Word16 *ap, const Word16 gamma ) +{ + Word16 i, fac; + Word32 Amax; + Word16 shift; + + + fac = gamma; + Amax = L_mult( 16384, a[0] ); + FOR( i = 1; i < M; i++ ) + { + Amax = L_max( Amax, L_abs( L_mult0( fac, a[i] ) ) ); + fac = mult_r( fac, gamma ); + } + Amax = L_max( Amax, L_abs( L_mult0( fac, a[M] ) ) ); + shift = norm_l( Amax ); + fac = gamma; + ap[0] = shl( a[0], sub( shift, 1 ) ); + move16(); + FOR( i = 1; i < M; i++ ) + { + ap[i] = round_fx( L_shl( L_mult0( a[i], fac ), shift ) ); + move16(); + fac = mult_r( fac, gamma ); + } + ap[M] = round_fx( L_shl( L_mult0( a[M], fac ), shift ) ); + move16(); + + + return; +} + +/* + * weight_a_inv + * + * Parameters: + * a I: LP filter coefficients Q12 + * ap O: weighted LP filter coefficients Q12 + * inv_gamma I: inverse weighting factor Q14 + * + * Function: + * Weighting of LP filter coefficients, ap[i] = a[i] * (inv_gamma^i). + * + * Returns: + * void + */ +void basop_weight_a_inv( const Word16 *a, Word16 *ap, const Word16 inv_gamma ) +{ + Word16 i; + static const Word16 inv_gamma_tab_12k8[16] = { 17809, 19357, 21041, 22870, 24859, 27020, 29370, 31924, /* Q14 */ + 17350, 18859, 20499, 22281, 24219, 26325, 28614, 31102 }; /* Q13 */ + static const Word16 inv_gamma_tab_16k[16] = { 17430, 18542, 19726, 20985, 22324, 23749, 25265, 26878, /* Q14 */ + 14297, 15209, 16180, 17213, 18312, 19480, 20724, 22047 }; /* Q13 */ + const Word16 *inv_gamma_tab; + Word32 L_tmp; + Word32 Amax; + Word16 shift; + + + IF( inv_gamma == 16384 ) + { + FOR( i = 0; i <= M; i++ ) + { + ap[i] = a[i]; + move16(); + } + return; + } + + assert( inv_gamma == GAMMA1_INV || inv_gamma == GAMMA16k_INV ); + + inv_gamma_tab = inv_gamma_tab_12k8; + move16(); + if ( sub( inv_gamma, GAMMA16k_INV ) == 0 ) + { + inv_gamma_tab = inv_gamma_tab_16k; + move16(); + } + + Amax = L_mult( 16384, a[0] ); + FOR( i = 1; i < 9; i++ ) + { + Amax = L_max( Amax, L_abs( L_mult( a[i], inv_gamma_tab[i - 1] ) ) ); + } + FOR( i = 9; i < 17; i++ ) + { + Amax = L_max( Amax, L_abs( L_shl( L_mult( a[i], inv_gamma_tab[i - 1] ), 1 ) ) ); + } + shift = norm_l( Amax ); + ap[0] = shl( a[0], sub( shift, 1 ) ); + move16(); + FOR( i = 1; i < 9; i++ ) + { + L_tmp = L_mult( a[i], inv_gamma_tab[i - 1] ); + ap[i] = round_fx( L_shl( L_tmp, shift ) ); + move16(); + } + shift = add( shift, 1 ); + FOR( i = 9; i < 17; i++ ) + { + L_tmp = L_mult( a[i], inv_gamma_tab[i - 1] ); + ap[i] = round_fx( L_shl( L_tmp, shift ) ); + move16(); + } + + + return; +} + +/* + * basop_E_LPC_a_add_tilt + * + * Parameters: + * a I: LP filter coefficients (m+1 coeffs) + * ap O: modified LP filter coefficients (m+2 coeffs) + * gamma I: tilt factor + * + * Function: + * Modified LP filter by adding 1st order pre-premphasis, Ap(z)=A(z).(1-gamma.z^(-1)) + * + * Returns: + * void + */ +void basop_E_LPC_a_add_tilt( const Word16 *a, Word16 *ap, Word16 gamma ) +{ + Word16 i; + Word32 Amax, Atmp[M + 2]; + Word16 shift; + + + Amax = L_mult( 16384, a[0] ); + FOR( i = 1; i <= M; i++ ) + { + Atmp[i] = L_sub( L_mult( 16384, a[i] ), L_mult0( gamma, a[i - 1] ) ); + move32(); + Amax = L_max( Amax, L_abs( Atmp[i] ) ); + } + Atmp[M + 1] = L_negate( L_mult0( gamma, a[M] ) ); + move32(); + Amax = L_max( Amax, L_abs( Atmp[M + 1] ) ); + shift = norm_l( Amax ); + ap[0] = shl( a[0], sub( shift, 1 ) ); + move16(); + FOR( i = 1; i <= M; i++ ) + { + ap[i] = round_fx( L_shl( Atmp[i], shift ) ); + move16(); + } + ap[M + 1] = round_fx( L_shl( Atmp[M + 1], shift ) ); + move16(); + + return; +} + + +static Word16 xsf_to_xsp( Word16 xsf ) +{ + /* xsp = cos(xsf * 3.1415/6400); */ + return getCosWord16R2( xsf ); +} + +/* + * lsf2lsp + * + * Parameters: + * lsf I: lsf[m] normalized (range: 0 <= val <= 0.5) x2.56 + * lsp O: lsp[m] (range: -1 <= val < 1) Q15 + * + * Function: + * Transformation lsf to lsp + * + * LSF are line spectral pair in frequency domain (0 to 6400). + * LSP are line spectral pair in cosine domain (-1 to 1). + * + * Returns: + * void + */ +void basop_lsf2lsp( const Word16 lsf[], Word16 lsp[] ) +{ + Word16 i; + + + /* convert ISFs to the cosine domain */ + FOR( i = 0; i < M; i++ ) + { + *lsp++ = xsf_to_xsp( *lsf++ ); + move16(); + } + + + return; +} diff --git a/lib_com/basop_lsf_tools.c b/lib_com/basop_lsf_tools.c new file mode 100644 index 0000000000..7a7e655f81 --- /dev/null +++ b/lib_com/basop_lsf_tools.c @@ -0,0 +1,311 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include +#include +#include "options.h" +#include "basop_proto_func.h" +#include "control.h" +#include "basop_util.h" + +#define NC_MAX 8 + +static Word16 E_LPC_f_lsp_pol_get( const Word16 lsp[], Word32 f[], const Word16 n, const Word16 past_Ovf, const Word16 isMODE1 ); + + +/* + * E_LPC_f_lsp_a_conversion + * + * Parameters: + * lsp I: Line spectral pairs Q15 + * a O: Predictor coefficients (order = m) Qx (The Q factor of the output to be deduced from a(0)) + * m I: order of LP filter + * + * Function: + * Convert ISPs to predictor coefficients a[] + * + * Returns: + * void + */ +void basop_E_LPC_f_lsp_a_conversion( + const Word16 *lsp, + Word16 *a, + const Word16 m ) +{ + Word16 i, j, k; + Word32 f1[NC_MAX + 1], f2[NC_MAX + 1]; + Word16 nc; + Word32 t0; + Word16 Ovf, Ovf2; + + + /*-----------------------------------------------------* + * Find the polynomials F1(z) and F2(z) * + *-----------------------------------------------------*/ + + nc = shr( m, 1 ); + + assert( m == 16 || m == 10 ); + + Ovf = 0; + move16(); + Ovf = E_LPC_f_lsp_pol_get( &lsp[0], f1, nc, Ovf, 1 ); + Ovf2 = E_LPC_f_lsp_pol_get( &lsp[1], f2, nc, Ovf, 1 ); + IF( sub( Ovf2, Ovf ) != 0 ) + { + /* to ensure similar scaling for f1 and f2 in case + an overflow would be detected only in f2, + but this case never happen on my dtb */ + E_LPC_f_lsp_pol_get( &lsp[0], f1, nc, s_max( Ovf2, Ovf ), 1 ); + } + /*-----------------------------------------------------* + * Multiply F1(z) by (1+z^-1) and F2(z) by (1-z^-1) * + *-----------------------------------------------------*/ + /*modification*/ + k = sub( nc, 1 ); + FOR( i = 0; i <= k; i++ ) + { + f1[nc - i] = L_add( f1[nc - i], f1[nc - i - 1] ); + move32(); + f2[nc - i] = L_sub( f2[nc - i], f2[nc - i - 1] ); + move32(); + } + + /*-----------------------------------------------------* + * A(z) = (F1(z)+F2(z))/2 * + * F1(z) is symmetric and F2(z) is antisymmetric * + *-----------------------------------------------------*/ + + t0 = L_deposit_l( 0 ); + FOR( i = 1; i <= nc; i++ ) + { + t0 = L_max( t0, L_abs( L_add( f1[i], f2[i] ) ) ); + t0 = L_max( t0, L_abs( L_sub( f1[i], f2[i] ) ) ); + } + k = s_min( norm_l( t0 ), 6 ); + a[0] = shl( 256, k ); + move16(); + test(); + IF( Ovf || Ovf2 ) + { + a[0] = shl( 256, sub( k, Ovf ) ); + move16(); + } + j = m; + FOR( i = 1; i <= nc; i++ ) + { + /* a[i] = 0.5*(f1[i] + f2[i]) */ + t0 = L_add( f1[i], f2[i] ); + t0 = L_shl( t0, k ); + a[i] = round_fx( t0 ); /* from Q23 to Qx and * 0.5 */ + + /* a[j] = 0.5*(f1[i] - f2[i]) */ + t0 = L_sub( f1[i], f2[i] ); + t0 = L_shl( t0, k ); + a[j] = round_fx( t0 ); /* from Q23 to Qx and * 0.5 */ + j--; + } + + return; +} + + +/*--------------------------------------------------------------------------- + * procedure reorder_lsf() + * + * To make sure that the lsfs are properly ordered and to keep a certain + * minimum distance between consecutive lsfs. + *--------------------------------------------------------------------------*/ +void basop_reorder_lsf( + Word16 *lsf, /* i/o: LSFs in the frequency domain (0..0.5) Q(x2.56)*/ + const Word16 min_dist, /* i : minimum required distance x2.56*/ + const Word16 n, /* i : LPC order */ + const Word32 Fs /* i : sampling frequency */ +) +{ + Word16 i, lsf_min, n_m_1; + Word16 lsf_max; + + lsf_min = min_dist; + move16(); + + /*-----------------------------------------------------------------------* + * Verify the LSF ordering and minimum GAP + *-----------------------------------------------------------------------*/ + + FOR( i = 0; i < n; i++ ) + { + if ( sub( lsf[i], lsf_min ) < 0 ) + { + lsf[i] = lsf_min; + move16(); + } + lsf_min = add( lsf[i], min_dist ); + } + + /*-----------------------------------------------------------------------* + * Reverify the LSF ordering and minimum GAP in the reverse order (security) + *-----------------------------------------------------------------------*/ + + lsf_max = round_fx( L_sub( L_shr( L_mult0( extract_l( L_shr( Fs, 1 ) ), 1311 ), 9 - 16 ), L_deposit_h( min_dist ) ) ); /* Q0 + Q9 , 1311 is 2.56 in Q9 */ + + n_m_1 = sub( n, 1 ); + IF( sub( lsf[n_m_1], lsf_max ) > 0 ) /* If danger of unstable filter in case of resonance in HF */ + { + FOR( i = n_m_1; i >= 0; i-- ) /* Reverify the minimum LSF gap in the reverse direction */ + { + if ( sub( lsf[i], lsf_max ) > 0 ) + { + lsf[i] = lsf_max; + move16(); + } + lsf_max = sub( lsf[i], min_dist ); + } + } + + return; +} + + +/* + * E_LPC_f_lsp_pol_get + * + * Parameters: + * lsp/isp I: Line spectral pairs (cosine domaine) Q15 + * f O: the coefficients of F1 or F2 Q23 + * n I: no of coefficients (m/2) + * == NC for F1(z); == NC-1 for F2(z) + * fact I: scaling factor + * + *-----------------------------------------------------------* + * procedure E_LPC_f_lsp_pol_get: * + * ~~~~~~~~~~~ * + * Find the polynomial F1(z) or F2(z) from the LSPs. * + * This is performed by expanding the product polynomials: * + * * + * F1(z) = product ( 1 - 2 LSF_i z^-1 + z^-2 ) * + * i=0,2,4,6,8 * + * F2(z) = product ( 1 - 2 LSF_i z^-1 + z^-2 ) * + * i=1,3,5,7,9 * + * * + * where LSP_i are the LSPs in the cosine domain. * + * * + *-----------------------------------------------------------* + * R.A.Salami October 1990 * + *-----------------------------------------------------------* + */ +static Word16 E_LPC_f_lsp_pol_get( + const Word16 lsp[], + Word32 f[], + const Word16 n, + const Word16 past_Ovf, + const Word16 isMODE1 ) +{ + /* All computation in Q23 */ + const Word16 *plsp; + Word16 i, j; + Word16 b; + Word32 b32; + Word16 Ovf = 0; + Word16 Q_out; + Word16 m2; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + + Q_out = 31 - 23; + move16(); + Ovf = past_Ovf; + move16(); + + test(); + if ( past_Ovf && isMODE1 ) /* Currently this feature is implemented only in MODE1 */ + { + /* In some NB cases, overflow where detectected + in f1 or f2 polynomial computation when it + happen we reduce the precision of the computing + to limit the risk of saturation*/ + Q_out = add( Q_out, past_Ovf ); + } + Overflow = 0; + move16(); + plsp = lsp; + f[0] = L_shl( 1, sub( 31, Q_out ) ); + move32(); + /*b = -2.0f * *plsp;*/ + b = *plsp; + move16(); + m2 = shl( -2, sub( 15, Q_out ) ); + f[1] = L_mult( b, m2 ); + move32(); + + FOR( i = 2; i <= n; i++ ) + { + plsp += 2; + /*b = 2.0f * *plsp;*/ + move16(); + b = *plsp; + b32 = L_mult( b, m2 ); + + /*f[i] = -b*f[i-1] + 2.0f*f[i-2];*/ + move32(); + f[i] = L_shl( L_sub( f[i - 2], Mpy_32_16( f[i - 1], b ) ), 1 ); + + FOR( j = i - 1; j > 1; j-- ) + { + /*f[j] += b*f[j-1] + f[j-2];*/ + move32(); + f[j] = L_add( f[j], L_sub( f[j - 2], L_shl( Mpy_32_16( f[j - 1], b ), 1 ) ) ); + } + move32(); + f[1] = L_add( f[1], b32 ); + } + + + test(); + IF( Overflow > 0 && isMODE1 ) + { +#ifdef BASOP_NOGLOB + assert( 0 ); +#endif /* BASOP_NOGLOB */ + /* If an overflow is detected, redo the computation with 1 bit less */ + Ovf = add( Ovf, 1 ); + Ovf = E_LPC_f_lsp_pol_get( lsp, f, n, Ovf, isMODE1 ); + } + return Ovf; +} diff --git a/lib_com/basop_mpy.c b/lib_com/basop_mpy.c new file mode 100644 index 0000000000..478dff4cfe --- /dev/null +++ b/lib_com/basop_mpy.c @@ -0,0 +1,89 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include "basop_mpy.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +Word32 Mpy_32_16_1( Word32 x, Word16 y ) +{ + Word32 mh; + UWord16 ml; + + Mpy_32_16_ss( x, y, &mh, &ml ); + + return ( mh ); +} + +Word32 Mpy_32_16( Word32 x, Word16 y ) +{ + Word32 mh; + UWord16 ml; + + Mpy_32_16_ss( x, y, &mh, &ml ); + + return ( mh ); +} + +Word32 Mpy_32_16_r( Word32 x, Word16 y ) +{ + Word32 mh; + UWord16 ml; + + Mpy_32_16_ss( x, y, &mh, &ml ); + + if ( s_and( ml, -32768 /* 0x8000 */ ) ) + { + mh = L_add( mh, 1 ); + } + + return ( mh ); +} + + +Word32 Mpy_32_32( Word32 x, Word32 y ) +{ + Word32 mh; + UWord32 ml; + + Mpy_32_32_ss( x, y, &mh, &ml ); + + return ( mh ); +} diff --git a/lib_com/basop_mpy.h b/lib_com/basop_mpy.h new file mode 100644 index 0000000000..699039dd15 --- /dev/null +++ b/lib_com/basop_mpy.h @@ -0,0 +1,100 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef __BASOP_MPY_H +#define __BASOP_MPY_H + +#include "stl.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +/** + * \brief 32*16 Bit fractional Multiplication using 40 bit OPS + * Performs a multiplication of a 32-bit variable x by + * a 16-bit variable y, returning a 32-bit value. + * + * \param[i] x + * \param[i] y + * + * \return x*y + */ +Word32 Mpy_32_16_1( Word32 x, Word16 y ); + + +/** + * \brief 32*16 Bit fractional Multiplication using 40 bit OPS + * Performs a multiplication of a 32-bit variable x by + * a 16-bit variable y, returning a 32-bit value. + * + * \param[i] x + * \param[i] y + * + * \return x*y + */ +Word32 Mpy_32_16( Word32 x, Word16 y ); + + +/** + * \brief 32*16 Bit fractional Multiplication using 40 bit OPS + * Performs a multiplication of a 32-bit variable x by + * a 16-bit variable y including rounding, returning a 32-bit value. + * + * \param[i] x + * \param[i] y + * + * \return x*y + */ +Word32 Mpy_32_16_r( Word32 x, Word16 y ); + + +/** + * \brief 32*32 Bit fractional Multiplication using 40 bit OPS + * + * Performs a multiplication of a 32-bit variable x by + * a 32-bit variable y, returning a 32-bit value. + * + * \param[i] x + * \param[i] y + * + * \return x*y + */ + +Word32 Mpy_32_32( Word32 x, Word32 y ); + +#endif /* __BASOP_SETTINGS_H */ diff --git a/lib_com/basop_proto_func.h b/lib_com/basop_proto_func.h new file mode 100644 index 0000000000..19337e9a52 --- /dev/null +++ b/lib_com/basop_proto_func.h @@ -0,0 +1,70 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef BASOP_PROTO_FUNC_H +#define BASOP_PROTO_FUNC_H + +#include +#include "options.h" +#include "stl.h" +#include "basop_util.h" + + +/* tcx_lpc_cdk.h */ +#define LSF_GAP_VAL( x ) ( Word16 )( (x) *2.0f * 1.28f ) +#define LSFM( x ) FL2WORD16_SCALE( x * 1.28, 15 - 1 ) /* 14Q1*1.28 */ + +/* cnst.h */ +#define GAMMA1_INV 17809 /* weighting factor (numerator) default:0.92 (1Q14format) */ +#define GAMMA16k_INV 17430 /* weighting factor (numerator) default:0.94 (1Q14format) */ +#define INT_FS_FX 12800 /* internal sampling frequency */ + +void basop_lsp2a_stab( const Word16 *lsp, Word16 *a ); +void basop_lsf2lsp( const Word16 lsf[], Word16 lsp[] ); +void basop_weight_a( const Word16 *a, Word16 *ap, const Word16 gamma ); +void basop_weight_a_inv( const Word16 *a, Word16 *ap, const Word16 inv_gamma ); +void basop_E_LPC_a_add_tilt( const Word16 *a, Word16 *ap, Word16 gamma ); +void basop_reorder_lsf( Word16 *lsf, const Word16 min_dist, const Word16 n, const Word32 fs ); +void basop_E_LPC_f_lsp_a_conversion( const Word16 *lsp, Word16 *a, const Word16 m ); + +/* tcx_utils.c */ +void basop_lpc2mdct( Word16 *lpcCoeffs, Word16 lpcOrder, Word16 *mdct_gains, Word16 *mdct_gains_exp, Word16 *mdct_inv_gains, Word16 *mdct_inv_gains_exp ); + +void basop_PsychAdaptLowFreqDeemph( Word32 x[], const Word16 lpcGains[], const Word16 lpcGains_e[], Word16 lf_deemph_factors[] ); +void basop_mdct_noiseShaping_interp( Word32 x[], Word16 lg, Word16 gains[], Word16 gains_exp[] ); + + +#endif diff --git a/lib_com/basop_settings.h b/lib_com/basop_settings.h new file mode 100644 index 0000000000..0689fa419d --- /dev/null +++ b/lib_com/basop_settings.h @@ -0,0 +1,110 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef __BASOP_SETTINGS_H +#define __BASOP_SETTINGS_H + +#include +#include "options.h" +#include "stl.h" +#include "basop_mpy.h" + +#define WORD32_BITS 32 +#define MAXVAL_WORD32 ( (int32_t) 0x7FFFFFFF ) +#define MINVAL_WORD32 ( (int32_t) 0x80000000 ) +#define WORD32_FIX_SCALE ( (int64_t) ( 1 ) << ( WORD32_BITS - 1 ) ) + +#define WORD16_BITS 16 +#define MAXVAL_WORD16 ( ( (int32_t) 0x7FFFFFFF ) >> 16 ) +#define MINVAL_WORD16 ( ( (int32_t) 0x80000000 ) >> 16 ) +#define WORD16_FIX_SCALE ( (int64_t) ( 1 ) << ( WORD16_BITS - 1 ) ) + +#ifdef _MSC_VER +#pragma warning( disable : 4310 ) +#endif + +/*! + \def Macro converts a float < 1 to Word32 fixed point with saturation and rounding +*/ +#define FL2WORD32( val ) \ + ( Word32 )( ( ( val ) >= 0 ) ? ( ( ( (double) ( val ) * ( WORD32_FIX_SCALE ) + 0.5 ) >= (double) ( MAXVAL_WORD32 ) ) ? (int32_t) ( MAXVAL_WORD32 ) : (int32_t) ( (double) ( val ) * (double) ( WORD32_FIX_SCALE ) + 0.5 ) ) : ( ( ( (double) ( val ) * (WORD32_FIX_SCALE) -0.5 ) <= (double) ( MINVAL_WORD32 ) ) ? (int32_t) ( MINVAL_WORD32 ) : (int32_t) ( (double) ( val ) * (double) (WORD32_FIX_SCALE) -0.5 ) ) ) + +/*! + \def Macro converts a float < 1 to Word16 fixed point with saturation and rounding +*/ +#define FL2WORD16( val ) \ + ( Word16 )( ( ( val ) >= 0 ) ? ( ( ( (double) ( val ) * ( WORD16_FIX_SCALE ) + 0.5 ) >= (double) ( MAXVAL_WORD16 ) ) ? (int32_t) ( MAXVAL_WORD16 ) : (int32_t) ( (double) ( val ) * (double) ( WORD16_FIX_SCALE ) + 0.5 ) ) : ( ( ( (double) ( val ) * (WORD16_FIX_SCALE) -0.5 ) <= (double) ( MINVAL_WORD16 ) ) ? (int32_t) ( MINVAL_WORD16 ) : (int32_t) ( (double) ( val ) * (double) (WORD16_FIX_SCALE) -0.5 ) ) ) + +/*! + \def Macro converts a Word32 fixed point to Word16 fixed point <1 with saturation +*/ +#define WORD322WORD16( val ) \ + ( ( ( ( ( ( val ) >> ( WORD32_BITS - WORD16_BITS - 1 ) ) + 1 ) > ( ( (int32_t) 1 << WORD16_BITS ) - 1 ) ) && ( (int32_t) ( val ) > 0 ) ) ? (Word16) (int16_t) ( ( (int32_t) 1 << ( WORD16_BITS - 1 ) ) - 1 ) : (Word16) (int16_t) ( ( ( ( val ) >> ( WORD32_BITS - WORD16_BITS - 1 ) ) + 1 ) >> 1 ) ) + +/*! + \def Macro converts a Word32 fixed point < 1 to float shifts result left by scale +*/ +#define WORD322FL_SCALE( x, scale ) ( ( (float) ( (int32_t) ( x ) ) ) / ( (int64_t) 1 << ( WORD32_BITS - 1 - ( scale ) ) ) ) + +/*! + \def Macro converts a float < 1 to Word32 fixed point with saturation and rounding, shifts result right by scale +*/ +/* Note: Both x and scale must be constants at compile time, scale must be in range -31..31 */ +#define FL2WORD32_SCALE( x, scale ) FL2WORD32( (double) ( x ) * ( (int64_t) 1 << ( WORD32_BITS - 1 - ( scale ) ) ) / ( (int64_t) 1 << ( WORD32_BITS - 1 ) ) ) + +/*! + \def Macro converts a Word16 fixed point < 1 to float shifts result left by scale +*/ +#define WORD162FL_SCALE( x, scale ) ( ( (float) ( (int32_t) ( x ) ) ) / ( (int64_t) 1 << ( WORD16_BITS - 1 - ( scale ) ) ) ) + +/*! + \def Macro converts a float < 1 to Word16 fixed point with saturation and rounding, shifts result right by scale +*/ +/* Note: At compile time, x must be a float constant and scale must be an integer constant in range -15..15 */ +#define FL2WORD16_SCALE( x, scale ) FL2WORD16( (float) ( x ) * ( (int64_t) 1 << ( WORD16_BITS - 1 - ( scale ) ) ) / ( (int64_t) 1 << ( WORD16_BITS - 1 ) ) ) + + +/* Word16 Packed Type */ +typedef struct +{ + struct + { + Word16 re; + Word16 im; + } v; +} PWord16; + +#endif /* __BASOP_SETTINGS_H */ diff --git a/lib_com/basop_tcx_utils.c b/lib_com/basop_tcx_utils.c new file mode 100644 index 0000000000..ea306d34b2 --- /dev/null +++ b/lib_com/basop_tcx_utils.c @@ -0,0 +1,438 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "basop_proto_func.h" +#include "stl.h" +#include "prot.h" +#include "rom_com.h" + +/* compare two positive normalized 16 bit mantissa/exponent values */ +/* return value: positive if first value greater, negative if second value greater, zero if equal */ +static Word16 compMantExp16Unorm( Word16 m1, Word16 e1, Word16 m2, Word16 e2 ) +{ + Word16 tmp; + + assert( ( m1 >= 0x4000 ) && ( m2 >= 0x4000 ) ); /* comparisons below work only for normalized mantissas */ + + tmp = sub( e1, e2 ); + if ( tmp == 0 ) + tmp = sub( m1, m2 ); + + return tmp; +} + +void basop_lpc2mdct( Word16 *lpcCoeffs, Word16 lpcOrder, Word16 *mdct_gains, Word16 *mdct_gains_exp, Word16 *mdct_inv_gains, Word16 *mdct_inv_gains_exp ) +{ + Word32 RealData[FDNS_NPTS]; + Word32 ImagData[FDNS_NPTS]; + Word16 i, j, k, step, scale, s, tmp16; + Word16 g, g_e, ig, ig_e; + Word32 tmp32; + const PWord16 *ptwiddle; + + + /* short-cut, to avoid calling of BASOP_getTables() */ + ptwiddle = SineTable512_fx; + step = 8; + + /*ODFT*/ + assert( lpcOrder < FDNS_NPTS ); + + /* pre-twiddle */ + FOR( i = 0; i <= lpcOrder; i++ ) + { + RealData[i] = L_mult( lpcCoeffs[i], ptwiddle->v.re ); + move32(); + ImagData[i] = L_negate( L_mult( lpcCoeffs[i], ptwiddle->v.im ) ); + move32(); + ptwiddle += step; + } + + /* zero padding */ + FOR( ; i < FDNS_NPTS; i++ ) + { + RealData[i] = 0; + move32(); + ImagData[i] = 0; + move32(); + } + + /* half length FFT */ + scale = add( norm_s( lpcCoeffs[0] ), 1 ); + move16(); + BASOP_cfft( RealData, ImagData, 1, &scale ); /* sizeOfFft == FDNS_NPTS == 8 */ + + + /*Get amplitude*/ + j = FDNS_NPTS - 1; + k = 0; + move16(); + + FOR( i = 0; i < FDNS_NPTS / 2; i++ ) + { + s = sub( norm_l( L_max( L_abs( RealData[i] ), L_abs( ImagData[i] ) ) ), 1 ); + + tmp16 = extract_h( L_shl( RealData[i], s ) ); + tmp32 = L_mult( tmp16, tmp16 ); + + tmp16 = extract_h( L_shl( ImagData[i], s ) ); + tmp16 = mac_r( tmp32, tmp16, tmp16 ); + + s = shl( sub( scale, s ), 1 ); + + if ( tmp16 == 0 ) + { + s = -16; + move16(); + } + if ( tmp16 == 0 ) + { + tmp16 = 1; + move16(); + } + + BASOP_Util_Sqrt_InvSqrt_MantExp( tmp16, s, &g, &g_e, &ig, &ig_e ); + + if ( mdct_gains != NULL ) + { + mdct_gains[k] = g; + move16(); + } + + if ( mdct_gains_exp != NULL ) + { + mdct_gains_exp[k] = g_e; + move16(); + } + + if ( mdct_inv_gains != NULL ) + { + mdct_inv_gains[k] = ig; + move16(); + } + + if ( mdct_inv_gains_exp != NULL ) + { + mdct_inv_gains_exp[k] = ig_e; + move16(); + } + + k = add( k, 1 ); + + + s = sub( norm_l( L_max( L_abs( RealData[j] ), L_abs( ImagData[j] ) ) ), 1 ); + + tmp16 = extract_h( L_shl( RealData[j], s ) ); + tmp32 = L_mult( tmp16, tmp16 ); + + tmp16 = extract_h( L_shl( ImagData[j], s ) ); + tmp16 = mac_r( tmp32, tmp16, tmp16 ); + + s = shl( sub( scale, s ), 1 ); + + if ( tmp16 == 0 ) + { + s = -16; + move16(); + } + if ( tmp16 == 0 ) + { + tmp16 = 1; + move16(); + } + + BASOP_Util_Sqrt_InvSqrt_MantExp( tmp16, s, &g, &g_e, &ig, &ig_e ); + + if ( mdct_gains != NULL ) + { + mdct_gains[k] = g; + move16(); + } + + if ( mdct_gains_exp != NULL ) + { + mdct_gains_exp[k] = g_e; + move16(); + } + + if ( mdct_inv_gains != NULL ) + { + mdct_inv_gains[k] = ig; + move16(); + } + + if ( mdct_inv_gains_exp != NULL ) + { + mdct_inv_gains_exp[k] = ig_e; + move16(); + } + + j = sub( j, 1 ); + k = add( k, 1 ); + } +} + + +void basop_mdct_noiseShaping_interp( Word32 x[], Word16 lg, Word16 gains[], Word16 gains_exp[] ) +{ + Word16 i, j, jp, jn, k, l; + Word16 g, pg, ng, e, tmp; + + + assert( lg % FDNS_NPTS == 0 ); + k = shr( lg, 6 ); /* FDNS_NPTS = 64 */ + + IF( gains != NULL ) + { + /* Linear interpolation */ + IF( sub( k, 4 ) == 0 ) + { + jp = 0; + move16(); + j = 0; + move16(); + jn = 1; + move16(); + + FOR( i = 0; i < lg; i += 4 ) + { + pg = gains[jp]; + move16(); + g = gains[j]; + move16(); + ng = gains[jn]; + move16(); + + /* common exponent for pg and g */ + tmp = sub( gains_exp[j], gains_exp[jp] ); + if ( tmp > 0 ) + pg = shr( pg, tmp ); + if ( tmp < 0 ) + g = shl( g, tmp ); + e = s_max( gains_exp[j], gains_exp[jp] ); + + tmp = mac_r( L_mult( pg, FL2WORD16( 0.375f ) ), g, FL2WORD16( 0.625f ) ); + x[i] = L_shl( Mpy_32_16( x[i], tmp ), e ); + move32(); + + tmp = mac_r( L_mult( pg, FL2WORD16( 0.125f ) ), g, FL2WORD16( 0.875f ) ); + x[i + 1] = L_shl( Mpy_32_16( x[i + 1], tmp ), e ); + move32(); + + /* common exponent for g and ng */ + g = gains[j]; + move16(); + tmp = sub( gains_exp[j], gains_exp[jn] ); + if ( tmp > 0 ) + ng = shr( ng, tmp ); + if ( tmp < 0 ) + g = shl( g, tmp ); + e = s_max( gains_exp[j], gains_exp[jn] ); + + tmp = mac_r( L_mult( g, FL2WORD16( 0.875f ) ), ng, FL2WORD16( 0.125f ) ); + x[i + 2] = L_shl( Mpy_32_16( x[i + 2], tmp ), e ); + move32(); + + tmp = mac_r( L_mult( g, FL2WORD16( 0.625f ) ), ng, FL2WORD16( 0.375f ) ); + x[i + 3] = L_shl( Mpy_32_16( x[i + 3], tmp ), e ); + move32(); + + jp = j; + move16(); + j = jn; + move16(); + jn = s_min( add( jn, 1 ), FDNS_NPTS - 1 ); + } + } + ELSE IF( sub( k, 5 ) == 0 ) + { + jp = 0; + move16(); + j = 0; + move16(); + jn = 1; + move16(); + + FOR( i = 0; i < lg; i += 5 ) + { + pg = gains[jp]; + move16(); + g = gains[j]; + move16(); + ng = gains[jn]; + move16(); + + /* common exponent for pg and g */ + tmp = sub( gains_exp[j], gains_exp[jp] ); + if ( tmp > 0 ) + pg = shr( pg, tmp ); + if ( tmp < 0 ) + g = shl( g, tmp ); + e = s_max( gains_exp[j], gains_exp[jp] ); + + tmp = mac_r( L_mult( pg, FL2WORD16( 0.40f ) ), g, FL2WORD16( 0.60f ) ); + x[i] = L_shl( Mpy_32_16( x[i], tmp ), e ); + move32(); + + tmp = mac_r( L_mult( pg, FL2WORD16( 0.20f ) ), g, FL2WORD16( 0.80f ) ); + x[i + 1] = L_shl( Mpy_32_16( x[i + 1], tmp ), e ); + move32(); + + + x[i + 2] = L_shl( Mpy_32_16( x[i + 2], gains[j] ), gains_exp[j] ); + move32(); + + /* common exponent for g and ng */ + g = gains[j]; + move16(); + tmp = sub( gains_exp[j], gains_exp[jn] ); + if ( tmp > 0 ) + ng = shr( ng, tmp ); + if ( tmp < 0 ) + g = shl( g, tmp ); + e = s_max( gains_exp[j], gains_exp[jn] ); + + tmp = mac_r( L_mult( g, FL2WORD16( 0.80f ) ), ng, FL2WORD16( 0.20f ) ); + x[i + 3] = L_shl( Mpy_32_16( x[i + 3], tmp ), e ); + move32(); + + tmp = mac_r( L_mult( g, FL2WORD16( 0.60f ) ), ng, FL2WORD16( 0.40f ) ); + x[i + 4] = L_shl( Mpy_32_16( x[i + 4], tmp ), e ); + move32(); + + jp = j; + move16(); + j = jn; + move16(); + jn = s_min( add( jn, 1 ), FDNS_NPTS - 1 ); + } + } + ELSE /* no interpolation */ + { + FOR( i = 0; i < FDNS_NPTS; i++ ) + { + FOR( l = 0; l < k; l++ ) + { + *x = L_shl( Mpy_32_16( *x, *gains ), *gains_exp ); + move32(); + x++; + } + + gains++; + gains_exp++; + } + } + } +} + + +void basop_PsychAdaptLowFreqDeemph( Word32 x[], const Word16 lpcGains[], const Word16 lpcGains_e[], Word16 lf_deemph_factors[] ) +{ + Word16 i; + Word16 max_val, max_e, fac, min_val, min_e, tmp, tmp_e; + Word32 L_tmp; + + + assert( lpcGains[0] >= 0x4000 ); + + max_val = lpcGains[0]; + move16(); + max_e = lpcGains_e[0]; + move16(); + min_val = lpcGains[0]; + move16(); + min_e = lpcGains_e[0]; + move16(); + + /* find minimum (min) and maximum (max) of LPC gains in low frequencies */ + FOR( i = 1; i < 9; i++ ) + { + IF( compMantExp16Unorm( lpcGains[i], lpcGains_e[i], min_val, min_e ) < 0 ) + { + min_val = lpcGains[i]; + move16(); + min_e = lpcGains_e[i]; + move16(); + } + + IF( compMantExp16Unorm( lpcGains[i], lpcGains_e[i], max_val, max_e ) > 0 ) + { + max_val = lpcGains[i]; + move16(); + max_e = lpcGains_e[i]; + move16(); + } + } + + min_e = add( min_e, 5 ); /* min *= 32.0f; */ + + test(); + IF( ( compMantExp16Unorm( max_val, max_e, min_val, min_e ) < 0 ) && ( min_val > 0 ) ) + { + /* fac = tmp = (float)pow(max / min, 0.0078125f); */ + tmp_e = min_e; + move16(); + tmp = Inv16( min_val, &tmp_e ); + L_tmp = L_shl( L_mult( tmp, max_val ), add( tmp_e, max_e ) ); /* Q31 */ + L_tmp = BASOP_Util_Log2( L_tmp ); /* Q25 */ + L_tmp = L_shr( L_tmp, 7 ); /* 0.0078125f = 1.f/(1<<7) */ + L_tmp = BASOP_Util_InvLog2( L_tmp ); /* Q31 */ + tmp = round_fx( L_tmp ); /* Q15 */ + fac = tmp; /* Q15 */ + move16(); + + /* gradual lowering of lowest 32 bins; DC is lowered by (max/tmp)^1/4 */ + FOR( i = 31; i >= 0; i-- ) + { + x[i] = Mpy_32_16( x[i], fac ); + move32(); + if ( lf_deemph_factors != NULL ) + { + lf_deemph_factors[i] = mult_r( lf_deemph_factors[i], fac ); + move16(); + } + fac = mult_r( fac, tmp ); + } + } +} diff --git a/lib_com/basop_util.c b/lib_com/basop_util.c new file mode 100644 index 0000000000..71feed1276 --- /dev/null +++ b/lib_com/basop_util.c @@ -0,0 +1,1109 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "basop_util.h" +#include "rom_com.h" +#include "basop_settings.h" +#include "basop_mpy.h" +#include "control.h" +#include "cnst.h" + +extern const Word32 SqrtTable[32]; +extern const Word16 SqrtDiffTable[32]; + +extern const Word32 ISqrtTable[32]; +extern const Word16 ISqrtDiffTable[32]; + +extern const Word32 InvTable[32]; +extern const Word16 InvDiffTable[32]; + + +Word32 BASOP_Util_Log2( + Word32 x ) +{ + Word32 exp; + Word16 exp_e; + Word16 nIn; + Word16 accuSqr; + Word32 accuRes; + + assert( x >= 0 ); + + if ( x == 0 ) + { + return ( (Word32) MIN_32 ); + } + + /* normalize input, calculate integer part */ + exp_e = norm_l( x ); + x = L_shl( x, exp_e ); + exp = L_deposit_l( exp_e ); + + /* calculate (1-normalized_input) */ + nIn = extract_h( L_sub( MAX_32, x ) ); + + /* approximate ln() for fractional part (nIn *c0 + nIn^2*c1 + nIn^3*c2 + ... + nIn^8 *c7) */ + + /* iteration 1, no need for accumulation */ + accuRes = L_mult( nIn, ldCoeff[0] ); /* nIn^i * coeff[0] */ + accuSqr = mult( nIn, nIn ); /* nIn^2, nIn^3 .... */ + + /* iteration 2 */ + accuRes = L_mac( accuRes, accuSqr, ldCoeff[1] ); /* nIn^i * coeff[1] */ + accuSqr = mult( accuSqr, nIn ); /* nIn^2, nIn^3 .... */ + + /* iteration 3 */ + accuRes = L_mac( accuRes, accuSqr, ldCoeff[2] ); /* nIn^i * coeff[2] */ + accuSqr = mult( accuSqr, nIn ); /* nIn^2, nIn^3 .... */ + + /* iteration 4 */ + accuRes = L_mac( accuRes, accuSqr, ldCoeff[3] ); /* nIn^i * coeff[3] */ + accuSqr = mult( accuSqr, nIn ); /* nIn^2, nIn^3 .... */ + + /* iteration 5 */ + accuRes = L_mac( accuRes, accuSqr, ldCoeff[4] ); /* nIn^i * coeff[4] */ + accuSqr = mult( accuSqr, nIn ); /* nIn^2, nIn^3 .... */ + + /* iteration 6 */ + accuRes = L_mac( accuRes, accuSqr, ldCoeff[5] ); /* nIn^i * coeff[5] */ + accuSqr = mult( accuSqr, nIn ); /* nIn^2, nIn^3 .... */ + + /* iteration 7, no need to calculate accuSqr any more */ + accuRes = L_mac( accuRes, accuSqr, ldCoeff[6] ); /* nIn^i * coeff[6] */ + + /* ld(fractional part) = ln(fractional part)/ln(2), 1/ln(2) = (1 + 0.44269504) */ + accuRes = L_mac0( L_shr( accuRes, 1 ), extract_h( accuRes ), 14506 ); + + accuRes = L_shr( accuRes, LD_DATA_SCALE - 1 ); /* fractional part/LD_DATA_SCALE */ + exp = L_shl( exp, ( 31 - LD_DATA_SCALE ) ); /* integer part/LD_DATA_SCALE */ + accuRes = L_sub( accuRes, exp ); /* result = integer part + fractional part */ + + return ( accuRes ); +} + + +Word32 BASOP_Util_InvLog2( + Word32 x ) +{ + Word16 frac; + Word16 exp; + Word32 retVal; + UWord32 index3; + UWord32 index2; + UWord32 index1; + UWord32 lookup3f; + UWord32 lookup12; + UWord32 lookup; + + if ( x < FL2WORD32( -31.0 / 64.0 ) ) + { + return 0; + } + test(); + if ( ( L_sub( x, FL2WORD32( 31.0 / 64.0 ) ) >= 0 ) || ( x == 0 ) ) + { + return 0x7FFFFFFF; + } + + frac = extract_l( L_and( x, 0x3FF ) ); + + index3 = L_and( L_shr( x, 10 ), 0x1F ); + index2 = L_and( L_shr( x, 15 ), 0x1F ); + index1 = L_and( L_shr( x, 20 ), 0x1F ); + + exp = extract_l( L_shr( x, 25 ) ); + if ( x > 0 ) + { + exp = sub( 31, exp ); + } + if ( x < 0 ) + { + exp = negate( exp ); + } + + lookup3f = L_add( exp2x_tab_long[index3], L_shr( Mpy_32_16( 0x0016302F, frac ), 1 ) ); + lookup12 = Mpy_32_32( exp2_tab_long[index1], exp2w_tab_long[index2] ); + lookup = Mpy_32_32( lookup12, lookup3f ); + + retVal = L_shr( lookup, sub( exp, 3 ) ); + + return retVal; +} + + +Word16 BASOP_Util_Add_MantExp /*!< Exponent of result */ + ( Word16 a_m, /*!< Mantissa of 1st operand a */ + Word16 a_e, /*!< Exponent of 1st operand a */ + Word16 b_m, /*!< Mantissa of 2nd operand b */ + Word16 b_e, /*!< Exponent of 2nd operand b */ + Word16 *ptrSum_m ) /*!< Mantissa of result */ +{ + Word32 L_lm, L_hm; + Word16 shift; + + /* Compare exponents: the difference is limited to +/- 15 + The Word16 mantissa of the operand with higher exponent is moved into the low + part of a Word32 and shifted left by the exponent difference. Then, the + unshifted mantissa of the operand with the lower exponent is added to the lower + 16 bits. The addition result is normalized and the upper Word16 of the result represents + the mantissa to return. The returned exponent takes into account all shift operations + including the final 16-bit extraction. + Note: The resulting mantissa may be inaccurate in the case, where the mantissa of the operand + with higher exponent is not really left-aligned, while the mantissa of the operand with + lower exponent is so. If in such a case, the difference in exponents is more than 15, + an inaccuracy is introduced. + Example: + A: a_e = 20, a_m = 0x0001 + B: b_e = 0, b_m = 0x4000 + correct: A+B=1*2^20+1*2^14=0x0010.0000+0x0000.4000=0x0010.4000=0x4100*2^6 + previously: A+B=1*2^20+1*2^14=0x0001+0x0000=0x0001*2^20 + this version: A+B=1*2^20+1*2^14=0x0000.8000+0x0000.4000=0x6000*2^6 + */ + + shift = sub( a_e, b_e ); + if ( shift >= 0 ) + shift = s_min( 15, shift ); + + if ( shift < 0 ) + shift = s_max( -15, shift ); + a_e = s_max( a_e, b_e ); + L_hm = L_deposit_l( a_m ); /* mantissa belonging to higher exponent */ + L_lm = L_deposit_l( a_m ); /* mantissa belonging to lower exponent */ + if ( shift >= 0 ) + L_lm = L_deposit_l( b_m ); + if ( shift < 0 ) + L_hm = L_deposit_l( b_m ); + + if ( shift > 0 ) + shift = negate( shift ); + + L_hm = L_shr( L_hm, shift ); /* shift left due to negative shift parameter */ + a_e = add( a_e, shift ); + L_hm = L_add( L_hm, L_lm ); + shift = norm_l( L_hm ); + L_hm = L_shl( L_hm, shift ); + *ptrSum_m = extract_h( L_hm ); + move16(); + + a_e = sub( a_e, shift ); + if ( L_hm ) + a_e = add( a_e, 16 ); + + return ( a_e ); +} + + +/* local function for Sqrt16 */ +static Word16 Sqrt16_common( + Word16 m, + Word16 e ) +{ + Word16 index, frac; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + assert( ( m >= 0x4000 ) || ( m == 0 ) ); + + /* get table index (upper 6 bits minus 32) */ + /* index = (m >> 9) - 32; */ + index = mac_r( -32768 - ( 32 << 16 ), m, 1 << 6 ); + + /* get fractional part for interpolation (lower 9 bits) */ + frac = s_and( m, 0x1FF ); /* Q9 */ + + /* interpolate */ + if ( m != 0 ) + { + BASOP_SATURATE_WARNING_OFF; +#ifndef BASOP_NOGLOB + m = mac_r( SqrtTable[index], SqrtDiffTable[index], frac ); +#else /* BASOP_NOGLOB */ + m = mac_ro( SqrtTable[index], SqrtDiffTable[index], frac, &Overflow ); +#endif /* BASOP_NOGLOB */ + BASOP_SATURATE_WARNING_ON; + } + + /* handle odd exponents */ + if ( s_and( e, 1 ) != 0 ) + m = mult_r( m, 0x5a82 ); + + return m; +} + + +Word16 Sqrt16( /*!< output mantissa */ + Word16 mantissa, /*!< input mantissa */ + Word16 *exponent /*!< pointer to exponent */ +) +{ + Word16 preShift, e; + + assert( mantissa >= 0 ); + + /* normalize */ + preShift = norm_s( mantissa ); + + e = sub( *exponent, preShift ); + mantissa = shl( mantissa, preShift ); + + /* calc mantissa */ + mantissa = Sqrt16_common( mantissa, e ); + + /* e = (e + 1) >> 1 */ + *exponent = mult_r( e, 1 << 14 ); + move16(); + + return mantissa; +} + +Word16 Inv16( /*!< output mantissa */ + Word16 mantissa, /*!< input mantissa */ + Word16 *exponent /*!< pointer to exponent */ +) +{ + Word16 index, frac; + Word16 preShift; + Word16 m, e; + + assert( mantissa != 0 ); + + /* absolute */ + BASOP_SATURATE_WARNING_OFF; + m = abs_s( mantissa ); + BASOP_SATURATE_WARNING_ON; + + /* normalize */ + preShift = norm_s( m ); + + e = sub( *exponent, preShift ); + m = shl( m, preShift ); + + /* get table index (upper 6 bits minus 32) */ + /* index = (m >> 9) - 32; */ + index = mac_r( -32768 - ( 32 << 16 ), m, 1 << 6 ); + + /* get fractional part for interpolation (lower 9 bits) */ + frac = shl( s_and( m, 0x1FF ), 1 ); /* Q10 */ + + /* interpolate */ + m = msu_r( InvTable[index], InvDiffTable[index], frac ); + + /* restore sign */ + if ( mantissa < 0 ) + m = negate( m ); + + /* e = 1 - e */ + *exponent = sub( 1, e ); + move16(); + + return m; +} + + +void BASOP_Util_Sqrt_InvSqrt_MantExp( + Word16 mantissa, /*!< mantissa */ + Word16 exponent, /*!< expoinent */ + Word16 *sqrt_mant, /*!< Pointer to sqrt mantissa */ + Word16 *sqrt_exp, /*!< Pointer to sqrt exponent */ + Word16 *isqrt_mant, /*!< Pointer to 1/sqrt mantissa */ + Word16 *isqrt_exp /*!< Pointer to 1/sqrt exponent */ +) +{ + Word16 index, frac; + Word16 preShift; + Word16 m, mi, e_odd; + + assert( mantissa > 0 ); + + /* normalize */ + preShift = norm_s( mantissa ); + + exponent = sub( exponent, preShift ); + mantissa = shl( mantissa, preShift ); + + /* get table index (upper 6 bits minus 32) */ + /* index = (m >> 9) - 32; */ + index = mac_r( -32768 - ( 32 << 16 ), mantissa, 1 << 6 ); + + /* get fractional part for interpolation (lower 9 bits) */ + frac = s_and( mantissa, 0x1FF ); /* Q9 */ + + /* interpolate */ + BASOP_SATURATE_WARNING_OFF; + m = mac_r( SqrtTable[index], SqrtDiffTable[index], frac ); + mi = msu_r( ISqrtTable[index], ISqrtDiffTable[index], frac ); + BASOP_SATURATE_WARNING_ON; + + /* handle even/odd exponents */ + e_odd = s_and( exponent, 1 ); + if ( e_odd != 0 ) + m = mult_r( m, 0x5a82 ); + if ( e_odd == 0 ) + mi = mult_r( mi, 0x5a82 ); + + /* e = (e + 1) >> 1 */ + *sqrt_exp = mult_r( exponent, 1 << 14 ); + move16(); + + /* e = (2 - e) >> 1 */ + *isqrt_exp = msu_r( 1L << 15, exponent, 1 << 14 ); + move16(); + + /* Write result */ + *sqrt_mant = m; + move16(); + *isqrt_mant = mi; + move16(); +} + +/********************************************************************/ +/*! + \brief Calculates the scalefactor needed to normalize input array + + The scalefactor needed to normalize the Word32 input array is returned
+ If the input array contains only '0', a scalefactor 0 is returned
+ Scaling factor is determined wrt a normalized target x: 1073741824 <= x <= 2147483647 for positive x
+ and -2147483648 <= x <= -1073741824 for negative x +*/ + +/*! r: measured headroom in range [0..31], 0 if all x[i] == 0 */ +Word16 getScaleFactor32( + const Word32 *x, /* i : array containing 32-bit data */ + const Word16 len_x ) /* i : length of the array to scan */ +{ + Word16 i, i_min, i_max; + Word32 x_min, x_max; + + x_max = L_add( 0, 0 ); + x_min = L_add( 0, 0 ); + FOR( i = 0; i < len_x; i++ ) + { + if ( x[i] >= 0 ) + x_max = L_max( x_max, x[i] ); + if ( x[i] < 0 ) + x_min = L_min( x_min, x[i] ); + } + + i_max = 0x20; + move16(); + i_min = 0x20; + move16(); + + if ( x_max != 0 ) + i_max = norm_l( x_max ); + + if ( x_min != 0 ) + i_min = norm_l( x_min ); + + i = s_and( s_min( i_max, i_min ), 0x1F ); + + return i; +} + + +Word16 BASOP_Util_Divide1616_Scale( + Word16 x, + Word16 y, + Word16 *s ) +{ + Word16 z; + Word16 sx; + Word16 sy; + Word16 sign; + + /* assert (x >= (Word16)0); */ + assert( y != (Word16) 0 ); + + sign = 0; + move16(); + + IF( x < 0 ) + { + x = negate( x ); + sign = s_xor( sign, 1 ); + } + + IF( y < 0 ) + { + y = negate( y ); + sign = s_xor( sign, 1 ); + } + + IF( x == (Word16) 0 ) + { + move16(); + *s = 0; + + return ( (Word16) 0 ); + } + + sx = norm_s( x ); + x = shl( x, sx ); + x = shr( x, 1 ); + move16(); + *s = sub( 1, sx ); + + sy = norm_s( y ); + y = shl( y, sy ); + move16(); + *s = add( *s, sy ); + + div_s( &z, x, y ); + + if ( sign != 0 ) + { + z = negate( z ); + } + + return z; +} + + +void set_val_Word16( + Word16 X[], + const Word16 val, + Word16 n ) +{ + Word16 i; + + + FOR( i = 0; i < n; i++ ) + { + X[i] = val; + move16(); + } + + + return; +} + +void set_val_Word32( + Word32 X[], + const Word32 val, + Word16 n ) +{ + Word16 i; + + + FOR( i = 0; i < n; i++ ) + { + X[i] = val; + move32(); + } + + + return; +} + +Word16 mult0( + Word16 x, + Word16 y ) +{ + return extract_l( L_mult0( x, y ) ); +} + + +#define SINETAB SineTable512_fx +#define LD 9 + +/* + * Calculates coarse lookup values for sine/cosine and residual angle. + * \param x angle in radians with exponent = 2 or as radix 2 with exponent = 0. + * \param scale shall always be 2 + * \param sine pointer to where the sine lookup value is stored into + * \param cosine pointer to where the cosine lookup value is stored into + * \param flag_radix2 flag indicating radix 2 angle if non-zero. + */ +static Word16 fixp_sin_cos_residual_16( + Word16 x, + const Word16 scale, + Word16 *sine, + Word16 *cosine, + Word8 flag_radix2 ) +{ + Word16 residual; + Word16 s; + Word16 ssign; + Word16 csign; + Word16 tmp, cl = 0, sl = 0; + const Word16 shift = 15 - LD - 1 - scale; + + if ( flag_radix2 == 0 ) + { + x = mult_r( x, FL2WORD16( 1.0 / EVS_PI ) ); + } + s = shr( x, shift ); + + residual = s_and( x, ( 1 << shift ) - 1 ); + /* We assume "2+scale" is a constant */ + residual = shl( residual, 2 + scale ); + residual = mult_r( residual, FL2WORD16( EVS_PI / 4.0 ) ); + + /* Sine sign symmetry */ + ssign = s_and( s, ( 1 << LD ) << 1 ); + + /* Cosine sign symmetry */ + csign = s_and( add( s, ( 1 << LD ) ), ( 1 << LD ) << 1 ); + + /* Modulo EVS_PI */ + s = s_and( s, ( 2 << LD ) - 1 ); + + /* EVS_PI/2 symmetry */ + s = s_min( s, sub( 2 << LD, s ) ); + + { + tmp = s_min( sub( 1 << LD, s ), s ); + s = sub( tmp, s ); + + if ( !s ) + { + move16(); + sl = SINETAB[tmp].v.im; + } + if ( !s ) + { + move16(); + cl = SINETAB[tmp].v.re; + } + if ( s ) + { + move16(); + sl = SINETAB[tmp].v.re; + } + if ( s ) + { + move16(); + cl = SINETAB[tmp].v.im; + } + + if ( ssign ) + { + sl = negate( sl ); + } + if ( csign ) + { + cl = negate( cl ); + } + + move16(); + move16(); + *sine = sl; + *cosine = cl; + } + + return residual; +} + + +Word16 getCosWord16R2( + Word16 theta ) +{ + Word16 result, residual, sine, cosine; + + residual = fixp_sin_cos_residual_16( theta, 1, &sine, &cosine, 1 ); + /* This negation prevents the subsequent addition from overflow */ + /* The negation cannot overflow, sine is in range [0x0..0x7FFF] */ + BASOP_SATURATE_WARNING_OFF + sine = negate( sine ); + result = msu_r( L_mult( sine, residual ), cosine, -32768 ); + BASOP_SATURATE_WARNING_ON + + return result; +} + + +Word16 idiv1616U( + Word16 x, + Word16 y ) +{ + Word16 s; + Word16 tmp; + + /* make y > x */ + s = add( sub( norm_s( y ), norm_s( x ) ), 1 ); + s = s_max( s, 0 ); + + BASOP_SATURATE_WARNING_OFF + y = shl( y, s ); + BASOP_SATURATE_WARNING_ON + + /* divide and shift */ + div_s( &tmp, x, y ); + y = shr( tmp, sub( 15, s ) ); + + return y; +} + +Word32 BASOP_util_Pow2( + const Word32 exp_m, + const Word16 exp_e, + Word16 *result_e ) +{ + static const Word16 pow2Coeff[8] = { + FL2WORD16( 0.693147180559945309417232121458177 ), /* ln(2)^1 /1! */ + FL2WORD16( 0.240226506959100712333551263163332 ), /* ln(2)^2 /2! */ + FL2WORD16( 0.0555041086648215799531422637686218 ), /* ln(2)^3 /3! */ + FL2WORD16( 0.00961812910762847716197907157365887 ), /* ln(2)^4 /4! */ + FL2WORD16( 0.00133335581464284434234122219879962 ), /* ln(2)^5 /5! */ + FL2WORD16( 1.54035303933816099544370973327423e-4 ), /* ln(2)^6 /6! */ + FL2WORD16( 1.52527338040598402800254390120096e-5 ), /* ln(2)^7 /7! */ + FL2WORD16( 1.32154867901443094884037582282884e-6 ) /* ln(2)^8 /8! */ + }; + + Word32 frac_part = 0, tmp_frac, result_m; + Word16 int_part = 0; + + IF( exp_e > 0 ) + { + /* "+ 1" compensates L_shr(,1) of the polynomial evaluation at the loop end. */ + + int_part = add( 1, extract_l( L_shr( exp_m, sub( 31, exp_e ) ) ) ); + frac_part = L_lshl( exp_m, exp_e ); + frac_part = L_and( 0x7FFFFFFF, frac_part ); + } + if ( exp_e <= 0 ) + frac_part = L_shl( exp_m, exp_e ); + if ( exp_e <= 0 ) + { + int_part = 1; + move16(); + } + + /* Best accuracy is around 0, so try to get there with the fractional part. */ + IF( ( tmp_frac = L_sub( frac_part, FL2WORD32( 0.5 ) ) ) >= 0 ) + { + int_part = add( int_part, 1 ); + frac_part = L_sub( tmp_frac, FL2WORD32( 0.5 ) ); + } + ELSE IF( ( tmp_frac = L_add( frac_part, FL2WORD32( 0.5 ) ) ) < 0 ) + { + int_part = sub( int_part, 1 ); + frac_part = L_add( tmp_frac, FL2WORD32( 0.5 ) ); + } + + /* Evaluate taylor polynomial which approximates 2^x */ + { + Word32 p; + Word16 i; + + + /* First taylor series coefficient a_0 = 1.0, scaled by 0.5 due to L_shr(,1). */ + result_m = L_add( FL2WORD32( 1.0 / 2.0 ), L_shr( Mpy_32_16( frac_part, pow2Coeff[0] ), 1 ) ); + p = Mpy_32_32( frac_part, frac_part ); + FOR( i = 1; i < 7; i++ ) + { + /* next taylor series term: a_i * x^i, x=0 */ + result_m = L_add( result_m, L_shr( Mpy_32_16( p, pow2Coeff[i] ), 1 ) ); + p = Mpy_32_32( p, frac_part ); + } + result_m = L_add( result_m, L_shr( Mpy_32_16( p, pow2Coeff[i] ), 1 ) ); + } + *result_e = int_part; + move16(); + + return result_m; +} + +/*! r: result of division x/y, not normalized */ +Word16 BASOP_Util_Divide3216_Scale( + Word32 x, /* i : numerator, signed */ + Word16 y, /* i : denominator, signed */ + Word16 *s ) /* o : scaling, 0, if x==0 */ +{ + Word16 z; + Word16 sx; + Word16 sy; + Word16 sign; + + /*assert (x > (Word32)0); + assert (y >= (Word16)0);*/ + + /* check, if numerator equals zero, return zero then */ + IF( x == (Word32) 0 ) + { + *s = 0; + move16(); + + return ( (Word16) 0 ); + } + + sign = s_xor( extract_h( x ), y ); /* just to exor the sign bits */ + BASOP_SATURATE_WARNING_OFF + x = L_abs( x ); + y = abs_s( y ); + BASOP_SATURATE_WARNING_ON + sx = sub( norm_l( x ), 1 ); + x = L_shl( x, sx ); + sy = norm_s( y ); + y = shl( y, sy ); + *s = sub( sy, sx ); + move16(); + + div_s( &z, round_fx( x ), y ); + + if ( sign < 0 ) /* if sign bits differ, negate the result */ + { + z = negate( z ); + } + + return z; +} + + +static const Word16 table_pow2[32] = { + 16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911, + 20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726, + 25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706, + 31379, 32066 +}; +/* table of table_pow2[i+1] - table_pow2[i] */ +static const Word16 table_pow2_diff_x32[32] = { + 11488, 11712, 12000, 12256, 12512, 12800, 13056, 13376, 13664, 13952, + 14240, 14560, 14912, 15200, 15552, 15872, 16256, 16576, 16960, 17344, + 17696, 18080, 18496, 18880, 19328, 19712, 20192, 20576, 21056, 21536, + 21984, 22432 +}; + +Word32 Pow2( /* o Q0 : result (range: 0<=val<=0x7fffffff) */ + Word16 exponant, /* i Q0 : Integer part. (range: 0<=val<=30) */ + Word16 fraction /* i Q15 : Fractional part. (range: 0.0<=val<1.0) */ +) +{ + Word16 exp, i, a; + Word32 L_x; + + i = mac_r( -32768, fraction, 32 ); /* Extract b10-b16 of fraction */ + a = s_and( fraction, 0x3ff ); /* Extract b0-b9 of fraction */ + + L_x = L_deposit_h( table_pow2[i] ); /* table[i] << 16 */ + L_x = L_mac( L_x, table_pow2_diff_x32[i], a ); /* L_x -= diff*a*2 */ + + exp = sub( 30, exponant ); + + L_x = L_shr_r( L_x, exp ); + + return L_x; +} + +/************************************************************************* + * + * FUNCTION: Log2_norm() + * + * PURPOSE: Computes log2(L_x, exp), where L_x is positive and + * normalized, and exp is the normalisation exponent + * If L_x is negative or zero, the result is 0. + * + * DESCRIPTION: + * The function Log2(L_x) is approximated by a table and linear + * interpolation. The following steps are used to compute Log2(L_x) + * + * 1- exponent = 30-norm_exponent + * 2- i = bit25-b31 of L_x; 32<=i<=63 (because of normalization). + * 3- a = bit10-b24 + * 4- i -=32 + * 5- fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2 + * + *************************************************************************/ + +static const Word32 L_table[32] = { + -32768L, 95322112L, 187793408L, 277577728L, + 364871680L, 449740800L, 532381696L, 612859904L, + 691306496L, 767787008L, 842432512L, 915308544L, + 986546176L, 1056210944L, 1124302848L, 1190887424L, + 1256095744L, 1319993344L, 1382580224L, 1443921920L, + 1504083968L, 1563131904L, 1621000192L, 1677885440L, + 1733722112L, 1788510208L, 1842380800L, 1895399424L, + 1947435008L, 1998618624L, 2049015808L, 2098626560L +}; + +static const Word16 table_diff[32] = { + 1455, 1411, 1370, 1332, 1295, 1261, 1228, 1197, + 1167, 1139, 1112, 1087, 1063, 1039, 1016, 995, + 975, 955, 936, 918, 901, 883, 868, 852, + 836, 822, 809, 794, 781, 769, 757, 744 +}; + +Word16 Log2_norm_lc( /* o : Fractional part of Log2. (range: 0<=val<1) */ + Word32 L_x /* i : input value (normalized) */ +) +{ + Word16 i, a; + Word16 y; + + + L_x = L_shr( L_x, 9 ); + a = extract_l( L_x ); /* Extract b10-b24 of fraction */ + a = lshr( a, 1 ); + + i = mac_r( L_x, -32 * 2 - 1, 16384 ); /* Extract b25-b31 minus 32 */ + + y = mac_r( L_table[i], table_diff[i], a ); /* table[i] << 16 - diff*a*2 */ + + + return y; +} + + +Word32 BASOP_Util_fPow( + Word32 base_m, + Word16 base_e, + Word32 exp_m, + Word16 exp_e, + Word16 *result_e ) +{ + + Word16 ans_lg2_e, base_lg2_e; + Word32 base_lg2_m, ans_lg2_m, result_m; + Word16 shift; + + test(); + IF( ( base_m == 0 ) && ( exp_m != 0 ) ) + { + *result_e = 0; + move16(); + return 0; + } + /* Calc log2 of base */ + shift = norm_l( base_m ); + base_m = L_shl( base_m, shift ); + base_e = sub( base_e, shift ); + base_lg2_m = BASOP_Util_Log2( base_m ); + + /* shift: max left shift such that neither base_e or base_lg2_m saturate. */ + shift = sub( s_min( norm_s( base_e ), WORD16_BITS - 1 - LD_DATA_SCALE ), 1 ); + /* Compensate shift into exponent of result. */ + base_lg2_e = sub( WORD16_BITS - 1, shift ); + base_lg2_m = L_add( L_shr( base_lg2_m, sub( WORD16_BITS - 1 - LD_DATA_SCALE, shift ) ), L_deposit_h( shl( base_e, shift ) ) ); + + /* Prepare exp */ + shift = norm_l( exp_m ); + exp_m = L_shl( exp_m, shift ); + exp_e = sub( exp_e, shift ); + + /* Calc base pow exp */ + ans_lg2_m = Mpy_32_32( base_lg2_m, exp_m ); + ans_lg2_e = add( exp_e, base_lg2_e ); + + /* Calc antilog */ + result_m = BASOP_util_Pow2( ans_lg2_m, ans_lg2_e, result_e ); + + return result_m; +} + +Word32 BASOP_Util_Add_Mant32Exp /* o : normalized result mantissa */ + ( Word32 a_m, /* i : Mantissa of 1st operand a */ + Word16 a_e, /* i : Exponent of 1st operand a */ + Word32 b_m, /* i : Mantissa of 2nd operand b */ + Word16 b_e, /* i : Exponent of 2nd operand b */ + Word16 *ptr_e ) /* o : exponent of result */ +{ + Word32 L_tmp; + Word16 shift; + + /* Compare exponents: the difference is limited to +/- 30 + The Word32 mantissa of the operand with lower exponent is shifted right by the exponent difference. + Then, the unshifted mantissa of the operand with the higher exponent is added. The addition result + is normalized and the result represents the mantissa to return. The returned exponent takes into + account all shift operations. + */ + + if ( !a_m ) + a_e = add( b_e, 0 ); + + if ( !b_m ) + b_e = add( a_e, 0 ); + + shift = sub( a_e, b_e ); + shift = s_max( -31, shift ); + shift = s_min( 31, shift ); + if ( shift < 0 ) + { + /* exponent of b is greater than exponent of a, shr a_m */ + a_m = L_shl( a_m, shift ); + } + if ( shift > 0 ) + { + /* exponent of a is greater than exponent of b */ + b_m = L_shr( b_m, shift ); + } + a_e = add( s_max( a_e, b_e ), 1 ); + L_tmp = L_add( L_shr( a_m, 1 ), L_shr( b_m, 1 ) ); + shift = norm_l( L_tmp ); + if ( shift ) + L_tmp = L_shl( L_tmp, shift ); + if ( L_tmp == 0 ) + a_e = add( 0, 0 ); + if ( L_tmp != 0 ) + a_e = sub( a_e, shift ); + *ptr_e = a_e; + + return ( L_tmp ); +} + +static const Word32 L_table_isqrt[48] = { + 2147418112L, 2083389440L, 2024669184L, 1970667520L, + 1920794624L, 1874460672L, 1831403520L, 1791098880L, + 1753415680L, 1717960704L, 1684602880L, 1653145600L, + 1623326720L, 1595080704L, 1568276480L, 1542782976L, + 1518469120L, 1495334912L, 1473183744L, 1451950080L, + 1431633920L, 1412169728L, 1393491968L, 1375469568L, + 1358168064L, 1341521920L, 1325465600L, 1309933568L, + 1294991360L, 1280507904L, 1266548736L, 1252982784L, + 1239875584L, 1227161600L, 1214775296L, 1202847744L, + 1191182336L, 1179910144L, 1168965632L, 1158283264L, + 1147863040L, 1137770496L, 1127940096L, 1118306304L, + 1108934656L, 1099825152L, 1090912256L, 1082261504L +}; +/* table of table_isqrt[i] - table_isqrt[i+1] */ +static const Word16 table_isqrt_diff[48] = { + 977, 896, 824, 761, 707, 657, 615, 575, + 541, 509, 480, 455, 431, 409, 389, 371, + 353, 338, 324, 310, 297, 285, 275, 264, + 254, 245, 237, 228, 221, 213, 207, 200, + 194, 189, 182, 178, 172, 167, 163, 159, + 154, 150, 147, 143, 139, 136, 132, 130 +}; + +static const Word16 shift[] = { 9, 10 }; + +Word32 Isqrt_lc1( + Word32 frac, /* i : Q31: normalized value (1.0 < frac <= 0.5) */ + Word16 *exp /* i/o: exponent (value = frac x 2^exponent) */ +) +{ + Word16 i, a; + Word32 L_tmp; + + IF( frac <= (Word32) 0 ) + { + *exp = 0; + move16(); + return 0x7fffffff; /*0x7fffffff*/ + } + + /* If exponant odd -> shift right by 10 (otherwise 9) */ + L_tmp = L_shr( frac, shift[s_and( *exp, 1 )] ); + + /* 1) -16384 to shift left and change sign */ + /* 2) 32768 to Add 1 to Exponent like it was divided by 2 */ + /* 3) We let the mac_r add another 0.5 because it imitates */ + /* the behavior of shr on negative number that should */ + /* not be rounded towards negative infinity. */ + /* It replaces: */ + /* *exp = negate(shr(sub(*exp, 1), 1)); move16(); */ + *exp = mac_r( 32768, *exp, -16384 ); + move16(); + + a = extract_l( L_tmp ); /* Extract b10-b24 */ + a = lshr( a, 1 ); + + i = mac_r( L_tmp, -16 * 2 - 1, 16384 ); /* Extract b25-b31 minus 16 */ + + L_tmp = L_msu( L_table_isqrt[i], table_isqrt_diff[i], a ); /* table[i] << 16 - diff*a*2 */ + + return L_tmp; +} + +static const Word16 sqrt_table[49] = { + 16384, 16888, 17378, 17854, 18318, 18770, 19212, + 19644, 20066, 20480, 20886, 21283, 21674, 22058, + 22435, 22806, 23170, 23530, 23884, 24232, 24576, + 24915, 25249, 25580, 25905, 26227, 26545, 26859, + 27170, 27477, 27780, 28081, 28378, 28672, 28963, + 29251, 29537, 29819, 30099, 30377, 30652, 30924, + 31194, 31462, 31727, 31991, 32252, 32511, 32767 +}; + +/*! r: output value, Q31 */ +Word32 Sqrt_l( + Word32 L_x, /* i : input value, Q31 */ + Word16 *exp /* o : right shift to be applied to result, Q1 */ +) +{ + /* + y = sqrt(x) + + x = f * 2^-e, 0.5 <= f < 1 (normalization) + + y = sqrt(f) * 2^(-e/2) + + a) e = 2k --> y = sqrt(f) * 2^-k (k = e div 2, + 0.707 <= sqrt(f) < 1) + b) e = 2k+1 --> y = sqrt(f/2) * 2^-k (k = e div 2, + 0.5 <= sqrt(f/2) < 0.707) + */ + + Word16 e, i, a, tmp; + Word32 L_y; + + if ( L_x <= 0 ) + { + *exp = 0; + move16(); + return L_deposit_l( 0 ); + } + +#if 0 /* original version creates an overflow warning */ + e = s_and(norm_l(L_x), 0xFFFE); /* get next lower EVEN norm. exp */ +#else + e = s_and( norm_l( L_x ), 0x7FFE ); /* get next lower EVEN norm. exp */ +#endif + L_x = L_shl( L_x, e ); /* L_x is normalized to [0.25..1) */ + *exp = e; + move16(); /* return 2*exponent (or Q1) */ + + L_x = L_shr( L_x, 9 ); + a = extract_l( L_x ); /* Extract b10-b24 */ + a = lshr( a, 1 ); + + i = mac_r( L_x, -16 * 2 - 1, 16384 ); /* Extract b25-b31 minus 16 */ + + L_y = L_deposit_h( sqrt_table[i] ); /* table[i] << 16 */ + tmp = sub( sqrt_table[i], sqrt_table[i + 1] ); /* table[i] - table[i+1]) */ + L_y = L_msu( L_y, tmp, a ); /* L_y -= tmp*a*2 */ + + /* L_y = L_shr (L_y, *exp); */ /* denormalization done by caller */ + + return ( L_y ); +} diff --git a/lib_com/basop_util.h b/lib_com/basop_util.h new file mode 100644 index 0000000000..3ab5615034 --- /dev/null +++ b/lib_com/basop_util.h @@ -0,0 +1,418 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef __BASOP_UTIL_H__ +#define __BASOP_UTIL_H__ + +#include +#include "options.h" +#include "basop_settings.h" +#include "typedef.h" +#include "basop32.h" +#include "basop_mpy.h" + + +#define LD_DATA_SCALE ( 6 ) + +#define LD_DATA_SHIFT_I5 ( 7 ) + +#define modDiv2( x ) sub( x, shl( shr( x, 1 ), 1 ) ) +#define modDiv8( x ) L_sub( x, L_shl( L_shr( x, 3 ), 3 ) ) + +#ifndef CHEAP_NORM_SIZE +#define CHEAP_NORM_SIZE 161 +#endif + +static __inline Word16 limitScale16( Word16 s ) +{ + /* It is assumed, that s is calculated just before, therefore we can switch upon sign */ + if ( s >= 0 ) + s = s_min( s, WORD16_BITS - 1 ); + if ( s < 0 ) + s = s_max( s, 1 - WORD16_BITS ); + return ( s ); +} + +static __inline Word16 limitScale32( Word16 s ) +{ + /* It is assumed, that s is calculated just before, therefore we can switch upon sign */ + if ( s >= 0 ) + s = s_min( s, WORD32_BITS - 1 ); + if ( s < 0 ) + s = s_max( s, 1 - WORD32_BITS ); + return ( s ); +} + + +/*!********************************************************************** + \brief Add two values given by mantissa and exponent. + + Mantissas are in 16-bit-fractional format with values between 0 and 1.
+ The base for exponents is 2. Example: \f$ a = a\_m * 2^{a\_e} \f$
+ +************************************************************************/ +Word16 BASOP_Util_Add_MantExp /*!< Exponent of result */ + ( Word16 a_m, /*!< Mantissa of 1st operand a */ + Word16 a_e, /*!< Exponent of 1st operand a */ + Word16 b_m, /*!< Mantissa of 2nd operand b */ + Word16 b_e, /*!< Exponent of 2nd operand b */ + Word16 *ptrSum_m ); /*!< Mantissa of result */ + + +/************************************************************************/ +/*! + \brief Calculate the squareroot of a number given by mantissa and exponent + + Mantissa is in 16/32-bit-fractional format with values between 0 and 1.
+ For *norm versions mantissa has to be between 0.5 and 1.
+ The base for the exponent is 2. Example: \f$ a = a\_m * 2^{a\_e} \f$
+ The exponent is addressed via pointers and will be overwritten with the result. +*/ +Word16 Sqrt16( /*!< output mantissa */ + Word16 mantissa, /*!< input mantissa */ + Word16 *exponent /*!< pointer to exponent */ +); + +/*****************************************************************************/ +/*! + \brief Calculate the inverse of a number given by mantissa and exponent + + Mantissa is in 16-bit-fractional format with values between 0 and 1.
+ The base for the exponent is 2. Example: \f$ a = a\_m * 2^{a\_e} \f$
+ The operand is addressed via pointers and will be overwritten with the result. + + The function uses a table lookup and a newton iteration. +*/ +Word16 Inv16( /*!< output mantissa */ + Word16 mantissa, /*!< input mantissa */ + Word16 *exponent /*!< pointer to exponent */ +); + +/******************************************************************************/ +/*! + \brief Calculate the squareroot and inverse of squareroot of a number given by mantissa and exponent + + Mantissa is in 16-bit-fractional format with values between 0 and 1.
+ The base for the exponent is 2. Example: \f$ a = a\_m * 2^{a\_e} \f$
+*/ +void BASOP_Util_Sqrt_InvSqrt_MantExp( Word16 mantissa, /*!< mantissa */ + Word16 exponent, /*!< expoinent */ + Word16 *sqrt_mant, /*!< Pointer to sqrt mantissa */ + Word16 *sqrt_exp, /*!< Pointer to sqrt exponent */ + Word16 *isqrt_mant, /*!< Pointer to 1/sqrt mantissa */ + Word16 *isqrt_exp /*!< Pointer to 1/sqrt exponent */ +); + + +/********************************************************************/ +/*! + \brief Calculates the scalefactor needed to normalize input array + + The scalefactor needed to normalize the Word32 input array is returned
+ If the input array contains only '0', a scalefactor 0 is returned
+ Scaling factor is determined wrt a normalized target x: 1073741824 <= x <= 2147483647 for positive x
+ and -2147483648 <= x <= -1073741824 for negative x +*/ + +/*! r: measured headroom in range [0..31], 0 if all x[i] == 0 */ +Word16 getScaleFactor32( + const Word32 *x, /* i : array containing 32-bit data */ + const Word16 len_x ); /* i : length of the array to scan */ + +/************************************************************************/ +/*! + \brief Binary logarithm with 7 iterations + + \param x + + \return log2(x)/64 + */ +/************************************************************************/ +Word32 BASOP_Util_Log2( Word32 x ); + + +/****************************************************************************/ +/*! + \brief Does fractional division of Word16 arg1 by Word16 arg2 + + + \return fractional Q15 Word16 z = arg1(Q15)/arg2(Q15) with scaling s +*/ +Word16 BASOP_Util_Divide1616_Scale( Word16 x, /* i : Numerator*/ + Word16 y, /* i : Denominator*/ + Word16 *s ); /* o : Additional scalefactor difference*/ + +/****************************************************************************/ +/*! + \brief Does fractional integer division of Word32 arg1 by Word16 arg2 + + + \return fractional Word16 integer z = arg1(32bits)/arg2(16bits), z not normalized +*/ +Word16 BASOP_Util_Divide3216_Scale( Word32 x, /*!< i : Numerator */ + Word16 y, /*!< i : Denominator*/ + Word16 *s ); /*!< o : Additional scalefactor difference*/ + + +/************************************************************************/ +/*! + * \brief Binary logarithm with 5 iterations + * + * \param[i] val + * + * \return basop_log2(val)/128 + */ +/************************************************************************/ +Word32 BASOP_Util_log2_i5( Word32 val ); + +/************************************************************************/ +/*! + \brief Binary power + + Date: 06-JULY-2012 Arthur Tritthart, IIS Fraunhofer Erlangen + + Version with 3 table lookup and 1 linear interpolations + + Algorithm: compute power of 2, argument x is in Q7.25 format + result = 2^(x/64) + We split exponent (x/64) into 5 components: + integer part: represented by b31..b25 (exp) + fractional part 1: represented by b24..b20 (lookup1) + fractional part 2: represented by b19..b15 (lookup2) + fractional part 3: represented by b14..b10 (lookup3) + fractional part 4: represented by b09..b00 (frac) + => result = (lookup1*lookup2*(lookup3+C1*frac)<<3)>>exp + + Due to the fact, that all lookup values contain a factor 0.5 + the result has to be shifted by 3 to the right also. + Table exp2_tab_long contains the log2 for 0 to 1.0 in steps + of 1/32, table exp2w_tab_long the log2 for 0 to 1/32 in steps + of 1/1024, table exp2x_tab_long the log2 for 0 to 1/1024 in + steps of 1/32768. Since the 2-logarithm of very very small + negative value is rather linear, we can use interpolation. + + Limitations: + + For x <= 0, the result is fractional positive + For x > 0, the result is integer in range 1...7FFF.FFFF + For x < -31/64, we have to clear the result + For x = 0, the result is ~1.0 (0x7FFF.FFFF) + For x >= 31/64, the result is 0x7FFF.FFFF + + \param x + + \return pow(2,(x/64)) + */ +/************************************************************************/ +Word32 BASOP_Util_InvLog2( Word32 x ); + + +/****************************************************************************/ +/*! + \brief Sets Array Word16 arg1 to value Word16 arg2 for Word16 arg3 elements +*/ +void set_val_Word16( Word16 X[], /*!< Address of array */ + const Word16 val, /*!< Value to copy into array */ + Word16 n ); /*!< Number of elements to process */ + + +/****************************************************************************/ +/*! + \brief Sets Array Word32 arg1 to value Word32 arg2 for Word16 arg3 elements +*/ +void set_val_Word32( Word32 X[], /*!< Address of array */ + const Word32 val, /*!< Value to copy into array */ + Word16 n ); /*!< Number of elements to process */ + +/****************************************************************************/ +/*! + \brief Does a multiplication of Word16 input values + + \return z16 = x16 * y16 +*/ +Word16 mult0( Word16 x, /* i : Multiplier */ + Word16 y ); /* i : Multiplicand */ + +/** + * \brief calculate cosine of angle. Tuned for ISF domain. + * \param theta Angle normalized to radix 2, theta = (angle in radians)*2.0/pi + * \return result with exponent 0. + */ +Word16 getCosWord16R2( Word16 theta ); + +/****************************************************************************/ +/*! + \brief 16/16->16 unsigned integer division + + x and y have to be positive, x has to be < 16384 + + \return 16/16->16 integer + */ + +Word16 idiv1616U( Word16 x, Word16 y ); + + +/** + * \brief return 2 ^ (exp * 2^exp_e) + * \param exp_m mantissa of the exponent to 2.0f + * \param exp_e exponent of the exponent to 2.0f + * \param result_e pointer to a INT where the exponent of the result will be stored into + * \return mantissa of the result + */ +Word32 BASOP_util_Pow2( + const Word32 exp_m, + const Word16 exp_e, + Word16 *result_e ); + + +Word32 Isqrt_lc1( + Word32 frac, /* i : Q31: normalized value (1.0 < frac <= 0.5) */ + Word16 *exp /* i/o: exponent (value = frac x 2^exponent) */ +); + +/*****************************************************************************/ +/*! + + \brief Calculates pow(2,x) + ___________________________________________________________________________ + | | + | Function Name : Pow2() | + | | + | L_x = pow(2.0, exponant.fraction) (exponent = interger part) | + | = pow(2.0, 0.fraction) << exponent | + |---------------------------------------------------------------------------| + | Algorithm: | + | | + | The function Pow2(L_x) is approximated by a table and linear | + | interpolation. | + | | + | 1- i = bit10-b15 of fraction, 0 <= i <= 31 | + | 2- a = bit0-b9 of fraction | + | 3- L_x = table[i]<<16 - (table[i] - table[i+1]) * a * 2 | + | 4- L_x = L_x >> (30-exponant) (with rounding) | + |___________________________________________________________________________| +*/ +Word32 Pow2( /* o : Q0 : result (range: 0<=val<=0x7fffffff) */ + Word16 exponant, /* i : Q0 : Integer part. (range: 0<=val<=30) */ + Word16 fraction /* i : Q15 : Fractionnal part. (range: 0.0<=val<1.0) */ +); + +/************************************************************************* + * + * FUNCTION: Log2_norm() + * + * PURPOSE: Computes log2(L_x, exp), where L_x is positive and + * normalized, and exp is the normalisation exponent + * If L_x is negative or zero, the result is 0. + * + * DESCRIPTION: + * The function Log2(L_x) is approximated by a table and linear + * interpolation. The following steps are used to compute Log2(L_x) + * + * 1- exponent = 30-norm_exponent + * 2- i = bit25-b31 of L_x; 32<=i<=63 (because of normalization). + * 3- a = bit10-b24 + * 4- i -=32 + * 5- fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2 + * + *************************************************************************/ + +Word16 Log2_norm_lc( /* o : Fractional part of Log2. (range: 0<=val<1) */ + Word32 L_x /* i : input value (normalized) */ +); + +/************************************************************************* + * + * FUNCTION: BASOP_Util_fPow() + */ +/** + * \brief BASOP_Util_fPow + * + * PURPOSE: Computes pow(base_m, base_e, exp_m, exp_e), where base_m and base_e + * specify the base, and exp_m and exp_e specify the exponent. + * The result is returned in a mantissa and exponent representation. + * + * DESCRIPTION: + * The function BASOP_Util_fPow(L_x) calculates the power function by + * calculating 2 ^ (log2(base)*exp) + * + * \param base_m mantissa of base + * \param base_e exponent of base + * \param exp_m mantissa of exponent + * \param exp_e exponent of exponent + * \param result_e pointer to exponent of result + * \return Word32 mantissa of result + * + *************************************************************************/ + +Word32 BASOP_Util_fPow( /* o : mantissa of result */ + Word32 base_m, + Word16 base_e, /* i : input value for base (mantissa and exponent) */ + Word32 exp_m, + Word16 exp_e, /* i : input value for exponent (mantissa and exponent) */ + Word16 *result_e /* o : output pointer to exponent of result */ +); + +/*!********************************************************************** + \brief Add two values given by mantissa and exponent. + + Mantissas are in 32-bit-fractional format with values between 0 and 1.
+ The base for exponents is 2. Example: \f$ a = a\_m * 2^{a\_e} \f$
+ +************************************************************************/ +Word32 BASOP_Util_Add_Mant32Exp /* o : normalized result mantissa */ + ( Word32 a_m, /* i : Mantissa of 1st operand a */ + Word16 a_e, /* i : Exponent of 1st operand a */ + Word32 b_m, /* i : Mantissa of 2nd operand b */ + Word16 b_e, /* i : Exponent of 2nd operand b */ + Word16 *ptr_e ); /* o : exponent of result */ + +/****************************************************************************/ +/*! + \brief Accumulates multiplications + + Accumulates the elementwise multiplications of Word32 Array X with Word16 Array Y + pointed to by arg1 and arg2 with specified headroom. Length of to be multiplied arrays is arg3, + headroom with has to be taken into account is specified in arg4 + + \return Word32 result of accumulated multiplications over Word32 array arg1 and Word16 array arg2 and Word16 pointer + to exponent correction factor which needs to be added to the exponent of the result vector +*/ +Word32 dotWord32_16_guards( const Word32 *X, const Word16 *Y, Word16 n, Word16 hr, Word16 *shift ); + +Word32 Sqrt_l( Word32 L_x, Word16 *exp ); + +#endif /* __BASOP_UTIL_H__ */ diff --git a/lib_com/bitalloc.c b/lib_com/bitalloc.c new file mode 100644 index 0000000000..97acd28c58 --- /dev/null +++ b/lib_com/bitalloc.c @@ -0,0 +1,1022 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * bitalloc() + * + * Adaptive bit allocation for 20kHz audio codec + *--------------------------------------------------------------------------*/ + +void bitalloc( + int16_t *y, /* i : reordered norm of sub-vectors */ + int16_t *idx, /* i : reordered sub-vector indices */ + int16_t sum, /* i : number of available bits */ + int16_t N, /* i : number of norms */ + int16_t K, /* i : maximum number of bits per dimension */ + int16_t *r, /* o : bit-allacation vector */ + const int16_t *sfmsize, /* i : band length */ + const int16_t hqswb_clas /* i : signal classification flag */ +) +{ + int16_t i, j, k, n, m, v, im; + int16_t diff, temp; + int16_t fac; + int16_t ii; + int16_t SFM_thr = SFM_G1G2; + + N -= 1; + + if ( hqswb_clas == HQ_HARMONIC ) + { + SFM_thr = 22; + } + + fac = 3; + K -= 2; + im = 1; + diff = sum; + n = sum >> 3; + for ( i = 0; i < n; i++ ) + { + k = 0; + temp = y[0]; + for ( m = 1; m < im; m++ ) + { + if ( temp < y[m] ) + { + temp = y[m]; + k = m; + } + } + + if ( temp < y[m] ) + { + k = m; + if ( im < N ) + { + im++; + } + } + + j = idx[k]; + if ( sum >= sfmsize[j] && r[j] < K ) + { + y[k] -= fac; + r[j]++; + if ( r[j] >= K ) + { + y[k] = MIN16B; + } + sum -= sfmsize[j]; + } + else + { + y[k] = MIN16B; + k++; + if ( k == im && im < N ) + { + im++; + } + } + + if ( sum < sfmsize[SFM_G1 - 1] || diff == sum ) /* sfmsize[SFM_G1-1] matches WID_G1, but also allows for extended BWs used in ACELP->HQ switching. */ + { + break; + } + + diff = sum; + v = N - 1; + + if ( k > v ) + { + for ( ii = 0; ii <= N; ii++ ) + { + if ( y[ii] > MIN16B ) + { + if ( ii < N ) + { + im = ii + 1; + } + + break; + } + } + } + } + + if ( sum >= sfmsize[SFM_G1] ) /* sfmsize[SFM_G1] matches WID_G2, but also allows for extended BWs used in ACELP->HQ switching. */ + { + for ( i = 0; i <= N; i++ ) + { + j = idx[i]; + if ( j >= SFM_G1 && j < SFM_thr && r[j] == 0 ) + { + r[j] = 1; + sum -= sfmsize[j]; + if ( sum < sfmsize[SFM_G1] ) + { + break; + } + } + } + } + + if ( sum >= sfmsize[SFM_G1] ) + { + for ( i = 0; i <= N; i++ ) + { + j = idx[i]; + if ( j >= SFM_G1 && j < SFM_thr && r[j] == 1 ) + { + r[j] = 2; + sum -= sfmsize[j]; + if ( sum < sfmsize[SFM_G1] ) + { + break; + } + } + } + } + + if ( sum >= sfmsize[SFM_G1 - 1] ) + { + for ( i = 0; i <= N; i++ ) + { + j = idx[i]; + if ( j < SFM_G1 && r[j] == 0 ) + { + r[j] = 1; + sum -= sfmsize[j]; + if ( sum < sfmsize[SFM_G1 - 1] ) + { + break; + } + } + } + } + + if ( sum >= sfmsize[SFM_G1 - 1] ) + { + for ( i = 0; i <= N; i++ ) + { + j = idx[i]; + if ( j < SFM_G1 && r[j] == 1 ) + { + r[j] = 2; + sum -= sfmsize[j]; + if ( sum < sfmsize[SFM_G1 - 1] ) + { + break; + } + } + } + } + + return; +} + + +#define WMC_TOOL_MAN +/*-------------------------------------------------------------------* + * BitAllocF() + * + * Fractional bit allocation + *-------------------------------------------------------------------*/ + +/*! r: Integer (truncated) number of allocated bits */ +int16_t BitAllocF( + int16_t *y, /* i : norm of sub-vectors */ + int32_t bit_rate, /* i : bitrate */ + int16_t B, /* i : number of available bits */ + int16_t N, /* i : number of sub-vectors */ + int16_t *R, /* o : bit-allocation indicator */ + int16_t *Rsubband, /* o : sub-band bit-allocation vector (Q3) */ + const int16_t hqswb_clas, /* i : hq swb class */ + const int16_t num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE */ +) +{ + Word16 fac; + Word16 i, n, Nmin, Bits, bs, low_rate = 0; + + Word16 m_fx; + Word32 t_fx, B_fx; + Word32 L_tmp1, L_tmp2; + Word16 tmp, exp1, exp2; + Word32 Rsubband_w32_fx[NB_SFM]; /* Q15 */ + Word16 B_w16_fx; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + set_l( Rsubband_w32_fx, 0, NB_SFM ); + + fac = 3; + if ( L_sub( bit_rate, 32000 ) < 0 ) + { + bs = 2; + } + else + { + bs = 3; + } + low_rate = 1; + + Nmin = N; + if ( sub( Nmin, SFM_N ) > 0 ) + { + Nmin = SFM_N; + } + + /* Initial bits distribution */ + if ( sub( hqswb_clas, HQ_GEN_SWB ) == 0 || sub( hqswb_clas, HQ_GEN_FB ) == 0 ) + { + /* Initial bits distribution */ + L_tmp1 = 0; + m_fx = 0; + for ( i = 0; i < num_env_bands; i++ ) + { + L_tmp1 = L_mac0( L_tmp1, Nb[i], y[i] ); + } + L_tmp1 = L_msu0( L_tmp1, fac, B ); + + t_fx = 0; + n = 0; + tmp = add( band_end_HQ[num_env_bands - 1], shl( band_end_HQ[num_env_bands - 1], 1 ) ); + exp1 = norm_s( tmp ); + div_s( &tmp, 16384, shl( tmp, exp1 ) ); /*15 + 14 - exp1*/ + exp2 = norm_s( tmp ); + tmp = shl( tmp, exp2 ); + exp1 = add( 29, sub( exp2, exp1 ) ); + + for ( i = 0; i < N; i++ ) + { + L_tmp2 = L_sub( L_mult0( y[i], band_end_HQ[num_env_bands - 1] ), L_tmp1 ); + Rsubband_w32_fx[i] = L_mult0( extract_l( L_tmp2 ), Nb[i] ); + move32(); /*Q0*/ + if ( Rsubband_w32_fx[i] > 0 ) + { + n = add( n, Nb[i] ); + Rsubband_w32_fx[i] = Mpy_32_16( Rsubband_w32_fx[i], tmp ); + move32(); /*exp1 - 15*/ + Rsubband_w32_fx[i] = L_shl( Rsubband_w32_fx[i], sub( 30, exp1 ) ); /*Q15*/ + + t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /*Q0*/ + } + else + { + Rsubband_w32_fx[i] = 0; + move32(); + } + } + } + else + { + /* Initial bits distribution */ + L_tmp1 = 0; + m_fx = 0; + for ( i = 0; i < N; i++ ) + { + L_tmp1 = L_mac0( L_tmp1, Nb[i], y[i] ); + } + L_tmp1 = L_msu0( L_tmp1, fac, B ); + + + t_fx = 0; + n = 0; + tmp = add( band_end_HQ[N - 1], shl( band_end_HQ[N - 1], 1 ) ); + exp1 = norm_s( tmp ); + div_s( &tmp, 16384, shl( tmp, exp1 ) ); /*15 + 14 - exp1*/ + exp2 = norm_s( tmp ); + tmp = shl( tmp, exp2 ); + exp1 = add( 29, sub( exp2, exp1 ) ); + for ( i = 0; i < N; i++ ) + { + L_tmp2 = L_sub( L_mult0( y[i], band_end_HQ[N - 1] ), L_tmp1 ); + Rsubband_w32_fx[i] = L_mult0( extract_l( L_tmp2 ), Nb[i] ); + move32(); /*Q0*/ + if ( Rsubband_w32_fx[i] > 0 ) + { + n = add( n, Nb[i] ); + Rsubband_w32_fx[i] = Mpy_32_16( Rsubband_w32_fx[i], tmp ); + move32(); /*exp1 - 15*/ + Rsubband_w32_fx[i] = L_shl( Rsubband_w32_fx[i], sub( 30, exp1 ) ); /*Q15*/ + + t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /*Q0*/ + } + else + { + Rsubband_w32_fx[i] = 0; + move32(); + } + } + } + + /* Distribute the remaining bits to subbands with non-zero bits */ + B_fx = L_shl( B, 15 ); + WHILE( L_sub( L_shr( L_add( t_fx, 16384 ), 15 ), B ) != 0 ) + { + L_tmp1 = L_sub( t_fx, B_fx ); + exp1 = sub( norm_l( L_tmp1 ), 1 ); + exp2 = norm_s( n ); + div_s( &tmp, extract_h( L_shl( L_tmp1, exp1 ) ), shl( n, exp2 ) ); /*15 + 15 + exp1 - 16 - exp2*/ +#ifndef BASOP_NOGLOB + m_fx = shl( tmp, sub( exp2, exp1 ) ); /*Q14*/ +#else + m_fx = shl_o( tmp, sub( exp2, exp1 ), &Overflow ); /*Q14*/ +#endif + + t_fx = 0; + n = 0; + for ( i = 0; i < N; i++ ) + { + if ( Rsubband_w32_fx[i] > 0 ) + { + Rsubband_w32_fx[i] = L_msu( Rsubband_w32_fx[i], m_fx, Nb[i] ); + move32(); + + if ( Rsubband_w32_fx[i] > 0 ) + { + n = add( n, Nb[i] ); + + t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); + } + else + { + Rsubband_w32_fx[i] = 0; + move32(); + } + } + } + } + Bits = B; + + /* Impose bit-constraints to subbands with less than minimum bits*/ + t_fx = 0; + n = 0; + for ( i = 0; i < N; i++ ) + { + if ( Rsubband_w32_fx[i] > 0 ) + { + test(); + test(); + if ( ( L_sub( Rsubband_w32_fx[i], L_shl( add( bs, LNb[i] ), 15 ) ) < 0 ) && ( sub( low_rate, 1 ) == 0 ) ) + { + Rsubband_w32_fx[i] = 0; + move32(); + } + else if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) <= 0 ) + { + B = sub( B, Nb[i] ); + Rsubband_w32_fx[i] = L_shl( Nb[i], 15 ); + move32(); + } + else + { + n = add( n, Nb[i] ); + t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); + } + } + } + + /* Distribute the remaining bits to subbands with more than 1-bit per sample */ + WHILE( L_sub( L_shr( L_add( t_fx, 16384 ), 15 ), B ) != 0 ) + { + L_tmp1 = L_sub( t_fx, L_shl( B, 15 ) ); + L_tmp2 = L_abs( L_tmp1 ); + + if ( n > 0 ) + { + exp1 = sub( norm_l( L_tmp2 ), 1 ); + exp2 = norm_s( n ); + div_s( &tmp, extract_h( L_shl( L_tmp2, exp1 ) ), shl( n, exp2 ) ); /*15 + 15 + exp1 - 16 - exp2*/ +#ifndef BASOP_NOGLOB + m_fx = shl( tmp, sub( exp2, exp1 ) ); /*Q14*/ +#else /* BASOP_NOGLOB */ + m_fx = shl_o( tmp, sub( exp2, exp1 ), &Overflow ); /*Q14*/ +#endif /* BASOP_NOGLOB */ + if ( L_tmp1 < 0 ) + { + m_fx = negate( m_fx ); + } + + t_fx = 0; + n = 0; + for ( i = 0; i < N; i++ ) + { + if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) > 0 ) + { + Rsubband_w32_fx[i] = L_msu( Rsubband_w32_fx[i], m_fx, Nb[i] ); + if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) > 0 ) + { + n = add( n, Nb[i] ); + + t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); + } + else + { + B = sub( B, Nb[i] ); + + Rsubband_w32_fx[i] = L_shl( Nb[i], 15 ); + move32(); + } + } + } + } + /*In case no subband has enough bits more than 1-bit per sample, take bits off the higher subbands */ + if ( t_fx == 0 ) + { + for ( i = N - 1; i >= 0; i-- ) + { + if ( Rsubband_w32_fx[i] > 0 ) + { + B = add( B, Nb[i] ); + Rsubband_w32_fx[i] = 0; + move32(); + if ( B >= 0 ) + { + BREAK; + } + } + } + BREAK; + } + } + + /* fine redistribution of over-allocated or under-allocated bits */ + tmp = 0; + for ( i = 0; i < N; i++ ) + { + Rsubband[i] = extract_l( L_shr( Rsubband_w32_fx[i], 12 ) ); + tmp = add( tmp, Rsubband[i] ); + } + + B = Bits; + B_w16_fx = shl( B, 3 ); + if ( sub( tmp, B_w16_fx ) > 0 ) + { + tmp = sub( tmp, B_w16_fx ); + for ( i = 0; i < N; i++ ) + { + if ( sub( Rsubband[i], add( shl( Nb[i], 3 ), tmp ) ) >= 0 ) + { + Rsubband[i] = sub( Rsubband[i], tmp ); + BREAK; + } + } + } + else + { + tmp = sub( tmp, B_w16_fx ); + for ( i = 0; i < N; i++ ) + { + if ( Rsubband[i] > 0 ) + { + Rsubband[i] = sub( Rsubband[i], tmp ); + BREAK; + } + } + } + + /* Calculate total used bits and initialize R to be used for Noise Filling */ + tmp = 0; + for ( i = 0; i < N; i++ ) + { + tmp = add( tmp, Rsubband[i] ); + R[i] = shr( Rsubband[i], 3 ); + } + + return shr( tmp, 3 ); +} + +/*-------------------------------------------------------------------* + * Bit_group() + * + * bit allocation in group + *-------------------------------------------------------------------*/ +static void Bit_group_fx( + Word16 *y, /* i : norm of sub-band Q0*/ + Word16 start_band, /* i : start band indices Q0*/ + Word16 end_band, /* i : end band indices Q0*/ + Word16 Bits, /* i : number of allocation bits in group Q0*/ + Word16 thr, /* i : smallest bit number for allocation in group Q0*/ + Word32 *Rsubband_fx, /* o : bit allocation of sub-band Q21*/ + Word16 *fac_fx /* i : weight factor for norm of sub-band Q13*/ +) +{ + Word16 i, j, k, m, y_index[16], index[16], bit_band, band_num, norm_sum; + Word16 tmp, exp; + Word16 factor_fx; + Word32 R_temp_fx[16], R_sum_fx = 0, R_sum_org_fx = 0, Bits_avg_fx = 0; + Word32 L_tmp; + UWord32 lo; + + /* initialization for bit allocation in one group*/ + tmp = 6554; + move16(); /*Q15 1/5 */ + IF( sub( thr, 5 ) == 0 ) + { + tmp = 6554; + move16(); /*Q15 1/5 */ + } + IF( sub( thr, 6 ) == 0 ) + { + tmp = 5462; + move16(); /*Q15 1/6 */ + } + IF( sub( thr, 7 ) == 0 ) + { + tmp = 4682; + move16(); /*Q15 1/7 */ + } + bit_band = mult( tmp, Bits ); /*0+15-15=0, Q0 */ + band_num = sub( end_band, start_band ); + + FOR( i = 0; i < band_num; i++ ) + { + y_index[i] = y[add( i, start_band )]; + move16(); + index[i] = i; + move16(); + } + + /* Rearrange norm vector in decreasing order */ + reordvct( y_index, band_num, index ); + /* norm vector modification */ + + div_s( &factor_fx, 1, band_num ); /*Q15 */ + IF( sub( thr, 5 ) > 0 ) + { + FOR( i = 0; i < band_num; i++ ) + { + L_tmp = L_mult( i, factor_fx ); /*Q16 */ + tmp = extract_h( L_shl( L_tmp, 13 ) ); /*Q13 */ + tmp = sub( fac_fx[1], tmp ); /*Q13 */ + L_tmp = L_mult( y_index[i], tmp ); /*Q14 */ + y_index[i] = extract_h( L_shl( L_tmp, 2 ) ); /*Q0 */ + } + } + ELSE + { + FOR( i = 0; i < band_num; i++ ) + { + L_tmp = L_mult( i, factor_fx ); /*Q16 */ + tmp = extract_h( L_shl( L_tmp, 13 ) ); /*Q13 */ + tmp = sub( fac_fx[0], tmp ); /*Q13 */ + L_tmp = L_mult( y_index[i], tmp ); /*Q14 */ + y_index[i] = extract_h( L_shl( L_tmp, 2 ) ); /*Q0 */ + } + } + + /* bit allocation based on modified norm */ + L_tmp = L_mult( band_num, 24576 ); /*Q16 */ + tmp = extract_h( L_shl( L_tmp, 7 ) ); /*Q7 */ + IF( sub( shl( bit_band, 7 ), tmp ) >= 0 ) + { + FOR( j = 0; j < band_num; j++ ) + { + IF( y_index[j] < 0 ) + { + y_index[j] = 0; + move16(); + } + R_temp_fx[j] = 2097152; + move16(); /*Q21 = 1 move16(); */ + } + + i = sub( band_num, 1 ); + norm_sum = 0; /*Q0 */ + FOR( k = 0; k <= i; k++ ) + { + norm_sum = add( norm_sum, y_index[k] ); + } + + FOR( j = 0; j < band_num; j++ ) + { + IF( norm_sum == 0 ) + { + FOR( k = 0; k <= i; k++ ) + { + R_temp_fx[k] = 0; + move32(); /*Q21 */ + } + } + ELSE + { + exp = norm_s( norm_sum ); + tmp = shl( norm_sum, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp) */ + Bits_avg_fx = L_mult( tmp, Bits ); /*Q(30-exp) */ + + FOR( k = 0; k <= i; k++ ) + { + L_tmp = L_shl( L_deposit_l( y_index[k] ), 24 ); + Mpy_32_32_ss( Bits_avg_fx, L_tmp, &L_tmp, &lo ); + + R_temp_fx[k] = L_shl( L_tmp, sub( exp, 2 ) ); + move32(); /*Q21 */ + } + } + + L_tmp = L_shl( L_deposit_l( thr ), 21 ); /*Q21 */ + IF( L_sub( R_temp_fx[i], L_tmp ) < 0 ) + { + R_temp_fx[i] = 0; + move32(); + norm_sum = sub( norm_sum, y_index[i] ); + i--; + } + ELSE + { + BREAK; + } + } + } + ELSE + { + FOR( j = 0; j < bit_band; j++ ) + { + IF( y_index[j] < 0 ) + { + y_index[j] = 0; + move16(); + } + R_temp_fx[j] = 2097152; + move32(); /*Q21 = 1 */ + } + + FOR( j = bit_band; j < band_num; j++ ) + { + R_temp_fx[j] = 0; + move32(); + } + + norm_sum = 0; + FOR( k = 0; k < bit_band; k++ ) + { + norm_sum = add( norm_sum, y_index[k] ); + } + + i = bit_band; + FOR( j = 0; j < bit_band; j++ ) + { + IF( norm_sum == 0 ) + { + FOR( k = 0; k < i; k++ ) + { + R_temp_fx[k] = 0; + move32(); /*Q21 */ + } + } + ELSE + { + exp = norm_s( norm_sum ); + tmp = shl( norm_sum, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp) */ + Bits_avg_fx = L_mult( tmp, Bits ); /*Q(30-exp) */ + FOR( k = 0; k < i; k++ ) + { + L_tmp = L_shl( L_deposit_l( y_index[k] ), 24 ); + Mpy_32_32_ss( Bits_avg_fx, L_tmp, &L_tmp, &lo ); + R_temp_fx[k] = L_shl( L_tmp, sub( exp, 2 ) ); + move32(); /*Q21 */ + } + } + R_sum_fx = 0; + L_tmp = L_shl( L_deposit_l( thr ), 21 ); /*Q21 */ + FOR( k = 0; k < i; k++ ) + { + IF( L_sub( R_temp_fx[k], L_tmp ) < 0 ) + { + FOR( m = k; m < i; m++ ) + { + norm_sum = sub( norm_sum, y_index[m] ); + R_temp_fx[m] = 0; + move32(); /*Q21 */ + } + i = k; + BREAK; + } + ELSE + { + R_sum_fx = L_add( R_sum_fx, R_temp_fx[k] ); + } + } + IF( L_sub( R_sum_fx, R_sum_org_fx ) == 0 ) + { + BREAK; + } + + R_sum_org_fx = R_sum_fx; + } + } + + /* index comeback */ + FOR( k = 0; k < band_num; k++ ) + { + j = index[k]; + move16(); + Rsubband_fx[add( j, start_band )] = R_temp_fx[k]; + move32(); + } + + return; +} + +/*-------------------------------------------------------------------* + * BitAllocWB() + * + * WB bit allocation + *-------------------------------------------------------------------*/ + +/*! r: Integer (truncated) number of allocated bits */ +int16_t BitAllocWB( + int16_t *y, /* i : norm of sub-vectors */ + int16_t B, /* i : number of available bits */ + int16_t N, /* i : number of sub-vectors */ + int16_t *R, /* o : bit-allocation indicator */ + int16_t *Rsubband /* o : sub-band bit-allocation vector (Q3) */ +) +{ + Word16 t_fx; + Word16 i, j, k, B1, B2, B3, B_saved; + Word16 Rsum_fx, Rsum_sub_fx[3]; + Word32 Ravg_sub_32_fx[3], R_diff_32_fx[2]; + Word16 factor_fx[2]; /*Q13 */ + Word16 BANDS; + Word16 tmp, exp; + Word32 L_tmp, L_tmp1; + Word32 Rsubband_buf[NB_SFM]; + UWord16 lo; + + BANDS = N; + move16(); + IF( sub( BANDS, SFM_N ) > 0 ) + { + BANDS = SFM_N; + move16(); + } + /* Init Rsubband to non-zero values for bands to be allocated bits */ + FOR( k = 0; k < BANDS; k++ ) + { + Rsubband_buf[k] = 2097152; + move32(); /*Q21 */ + } + /* Calculate the norm sum and average of sub-band */ + Rsum_sub_fx[0] = 0; + FOR( j = 0; j < SFM_G1; j++ ) + { + IF( y[j] > 0 ) + { + Rsum_sub_fx[0] = add( Rsum_sub_fx[0], y[j] ); + move16(); /*Q0 */ + } + } + Ravg_sub_32_fx[0] = L_mult( Rsum_sub_fx[0], 2048 ); + move32(); /*Q16 0+15+1, q15 1/16 =2048 */ + + Rsum_sub_fx[1] = 0; + move32(); + FOR( j = SFM_G1; j < SFM_G1G2; j++ ) + { + IF( y[j] > 0 ) + { + Rsum_sub_fx[1] = add( Rsum_sub_fx[1], y[j] ); + move16(); /*Q0 */ + } + } + Ravg_sub_32_fx[1] = L_mult( Rsum_sub_fx[1], 4096 ); /*16 0+15+1, q15 1/8 =4096 */ + + Rsum_sub_fx[2] = 0; + move16(); + FOR( j = SFM_G1G2; j < BANDS; j++ ) + { + IF( y[j] > 0 ) + { + Rsum_sub_fx[2] = add( Rsum_sub_fx[2], y[j] ); + move16(); /*Q0 */ + } + } + div_s( &tmp, 1, BANDS - SFM_G1G2 ); /*Q15 */ + Ravg_sub_32_fx[2] = L_mult( Rsum_sub_fx[2], tmp ); + move32(); /*Q16 */ + + /* Bit allocation for every group */ + tmp = add( Rsum_sub_fx[0], Rsum_sub_fx[1] ); + Rsum_fx = add( tmp, Rsum_sub_fx[2] ); /*Q0 */ + + factor_fx[0] = 16384; /*Q13 move16(); */ + factor_fx[1] = 24576; /*Q13 move16(); */ + { + R_diff_32_fx[0] = L_sub( Ravg_sub_32_fx[0], Ravg_sub_32_fx[1] ); + move32(); /*Q16 */ + R_diff_32_fx[1] = L_sub( Ravg_sub_32_fx[1], Ravg_sub_32_fx[2] ); + move32(); /*Q16 */ + + IF( L_sub( R_diff_32_fx[0], 393216 ) < 0 && L_sub( R_diff_32_fx[1], 245760 ) < 0 ) + { + IF( Rsum_fx == 0 ) + { + B1 = 0; + move16(); + B2 = 0; + move16(); + B3 = 0; + move16(); + } + ELSE + { + exp = norm_s( Rsum_fx ); + tmp = shl( Rsum_fx, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp) */ + L_tmp1 = L_mult( B, Rsum_sub_fx[0] ); /*Q1 */ + Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo ); + B1 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */ + IF( L_sub( L_tmp1, L_mult( B1, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B1, 1 ), Rsum_fx ) ) >= 0 ) + { + B1 = add( B1, 1 ); + } + L_tmp1 = L_mult( B, Rsum_sub_fx[1] ); /*Q1 */ + Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo ); + B2 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */ + IF( L_sub( L_tmp1, L_mult( B2, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B2, 1 ), Rsum_fx ) ) >= 0 ) + { + B2 = add( B2, 1 ); + } + L_tmp1 = L_mult( B, Rsum_sub_fx[2] ); /*Q1 */ + Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo ); + B3 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */ + IF( L_sub( L_tmp1, L_mult( B3, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B3, 1 ), Rsum_fx ) ) >= 0 ) + { + B3 = add( B3, 1 ); + } + } + IF( L_sub( Ravg_sub_32_fx[2], 786432 ) > 0 ) + { + B_saved = 0; + move16(); + IF( sub( B1, 288 ) > 0 ) + { + B_saved = sub( B1, 288 ); + B1 = 288; + move16(); + } + + IF( sub( B2, 256 ) > 0 ) + { + tmp = sub( B2, 256 ); + B_saved = add( B_saved, tmp ); + B2 = 256; + move16(); + } + + IF( sub( B3, 96 ) > 0 ) + { + tmp = sub( B3, 96 ); + B_saved = add( B_saved, tmp ); + B3 = 96; + move16(); + } + + IF( B_saved > 0 ) + { + IF( sub( B1, 288 ) == 0 ) + { + tmp = shr( B_saved, 1 ); + B2 = add( B2, tmp ); + tmp = sub( B, B1 ); + B3 = sub( tmp, B2 ); + } + ELSE + { + tmp = shr( B_saved, 1 ); + B1 = add( B1, tmp ); + IF( sub( B2, 256 ) == 0 ) + { + tmp = sub( B, B1 ); + B3 = sub( tmp, B2 ); + } + ELSE + { + tmp = sub( B, B1 ); + B2 = sub( tmp, B3 ); + } + } + } + } + + factor_fx[0] = 16384; + move16(); /*Q13 */ + factor_fx[1] = 12288; + move16(); /*Q13 */ + } + ELSE + { + IF( Rsum_fx == 0 ) + { + B1 = 0; + move16(); + B2 = 0; + move16(); + B3 = B; + move16(); + } + ELSE + { + exp = norm_s( Rsum_fx ); + tmp = shl( Rsum_fx, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp) */ + L_tmp1 = L_mult( B, Rsum_sub_fx[0] ); /*Q1 */ + Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo ); + B1 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */ + IF( L_sub( L_tmp1, L_mult( B1, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B1, 1 ), Rsum_fx ) ) >= 0 ) + { + B1 = add( B1, 1 ); + } + Mpy_32_16_ss( 1975684956, shl( B, 5 ), &L_tmp1, &lo ); + Mpy_32_16_ss( L_tmp1, shl( Rsum_sub_fx[1], 7 ), &L_tmp1, &lo ); + Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo ); + B2 = extract_h( L_shl( L_tmp, sub( exp, 11 ) ) ); /*Q0 */ + IF( L_sub( L_tmp1, L_shl( L_mult( B2, Rsum_fx ), 12 ) ) > 0 && L_sub( L_add( L_tmp1, 2 ), L_shl( L_mult( add( B2, 1 ), Rsum_fx ), 12 ) ) >= 0 ) + { + B2 = add( B2, 1 ); + } + tmp = sub( B, B1 ); + B3 = sub( tmp, B2 ); + } + } + } + + IF( sub( Rsum_sub_fx[2], 3 ) < 0 ) + { + B2 = add( B2, B3 ); + B3 = 0; + move16(); + } + + /* Bit allocation in group */ + Bit_group_fx( y, 0, SFM_G1, B1, 5, Rsubband_buf, factor_fx ); + Bit_group_fx( y, SFM_G1, SFM_G1G2, B2, 6, Rsubband_buf, factor_fx ); + Bit_group_fx( y, SFM_G1G2, BANDS, B3, 7, Rsubband_buf, factor_fx ); + FOR( i = 0; i < BANDS; i++ ) + { + Rsubband[i] = extract_l( L_shr( Rsubband_buf[i], 18 ) ); + move16(); + } + + /* Calcuate total used bits and initialize R to be used for Noise Filling */ + L_tmp = 0; + move32(); + FOR( i = 0; i < N; i++ ) + { + L_tmp = L_add( L_tmp, Rsubband_buf[i] ); /*Q21 */ + R[i] = extract_h( L_shr( Rsubband_buf[i], 5 ) ); /*Q0 */ + } + t_fx = extract_h( L_shr( L_tmp, 5 ) ); /*Q0 */ + + return (Word16) t_fx; +} diff --git a/lib_com/bitallocsum.c b/lib_com/bitallocsum.c new file mode 100644 index 0000000000..124bf69fe5 --- /dev/null +++ b/lib_com/bitallocsum.c @@ -0,0 +1,96 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * bitallocsum() + * + * Calculate the total number of bits allocated over frame + *--------------------------------------------------------------------------*/ + +void bitallocsum( + int16_t *R, /* i : bit-allocation vector */ + const int16_t nb_sfm, /* i : number of sub-vectors */ + int16_t *sum, /* o : total number of bits allocated */ + int16_t *Rsubband, /* o : rate per subband (Q3) */ + const int16_t num_bits, /* i : number of bits */ + const int16_t length, /* i : length of spectrum */ + const int16_t *sfmsize /* i : band length */ +) +{ + int16_t i; + int16_t total, tmp; + int16_t diff; + + total = 0; + for ( i = 0; i < nb_sfm; i++ ) + { + tmp = R[i] * sfmsize[i]; + Rsubband[i] = tmp * 8; + total += tmp; + } + *sum = total; + + if ( length <= L_FRAME32k ) + { + diff = num_bits - *sum; + i = 0; + while ( diff > 0 ) + { + if ( R[i] > 0 ) + { + Rsubband[i] += 8; + diff -= 1; + *sum += 1; + } + i++; + if ( i >= nb_sfm ) + { + i = 0; + } + } + } + + return; +} diff --git a/lib_com/bits_alloc.c b/lib_com/bits_alloc.c new file mode 100644 index 0000000000..3673a4f5fe --- /dev/null +++ b/lib_com/bits_alloc.c @@ -0,0 +1,1562 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "rom_com.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------*/ + +static int16_t BITS_ALLOC_adjust_acelp_fixed_cdk( const int16_t bits_frame, int16_t *fixed_cdk_index, const int16_t nb_subfr ); + +static int16_t allocate_unused( const int32_t core_brate, const int16_t coder_type, const int16_t unused_bits, const int16_t nb_prm, const int16_t subfr, const int16_t prm_type, int16_t *prm_bit_mode ); + +typedef enum +{ + GAINSPRM = 0x0, + PITCHPRM = 0x1, + MID_LSFSPRM = 0x3, + LSFPRM = 0x4 +} PRM_TYPES; + +/*-------------------------------------------------------------------* + * BITS_ALLOC_init_config_acelp() + * + * initial configuration for Mode 2 ACELP + *--------------------------------------------------------------------*/ + +void BITS_ALLOC_init_config_acelp( + const int32_t bit_rate, + const int16_t narrowBand, + const int16_t nb_subfr, + ACELP_config *acelp_cfg /* o : configuration structure of ACELP */ +) +{ + int16_t rate_mode_index; + + if ( bit_rate <= ACELP_9k60 ) + { + rate_mode_index = 0; + } + else + { + rate_mode_index = 1; + } + + acelp_cfg->mode_index = rate_mode_index; + + /*LPC: midLpc should be swithced off?*/ + acelp_cfg->midLpc_enable = 1; + + /*ACELP ICB config*/ + if ( ( rate_mode_index == 0 ) || ( narrowBand == 1 ) ) + { + acelp_cfg->pre_emphasis = 1; + acelp_cfg->formant_enh = 1; + acelp_cfg->formant_enh_num = FORMANT_SHARPENING_G1; + acelp_cfg->formant_enh_den = FORMANT_SHARPENING_G2; + acelp_cfg->formant_tilt = 0; + acelp_cfg->voice_tilt = 0; + } + else + { + acelp_cfg->pre_emphasis = 0; + acelp_cfg->formant_enh = 1; + acelp_cfg->formant_enh_num = FORMANT_SHARPENING_G1; + acelp_cfg->formant_enh_den = FORMANT_SHARPENING_G2; + acelp_cfg->formant_tilt = 1; + acelp_cfg->voice_tilt = 1; + } + + /*Wide band @ 16kHz*/ + if ( nb_subfr == NB_SUBFR16k ) + { + acelp_cfg->pre_emphasis = 1; + acelp_cfg->formant_enh = 1; + acelp_cfg->formant_enh_num = FORMANT_SHARPENING_G1_16k; + acelp_cfg->formant_enh_den = FORMANT_SHARPENING_G2_16k; + acelp_cfg->formant_tilt = 0; + acelp_cfg->voice_tilt = 2; + } + + return; +} + +/*-------------------------------------------------------------------* + * BITS_ALLOC_config_acelp() + * + * configure all Mode 2 ACELP coder types and allocate the bits + *--------------------------------------------------------------------*/ + +int16_t BITS_ALLOC_config_acelp( + const int16_t bits_frame, /* i : remaining bit budget for the frame */ + const int16_t coder_type, /* i : acelp coder type */ + ACELP_config *acelp_cfg, /* i/o: configuration structure of ACELP */ + const int16_t narrowBand, /* i : narrowband flag */ + const int16_t nb_subfr /* i : number of subframes */ +) +{ + int16_t mode_index; + int16_t band_index; + int16_t i; + int16_t remaining_bits, bits; + + /*Sanity check*/ + + mode_index = acelp_cfg->mode_index; + band_index = ( narrowBand == 0 ); + bits = 0; + + if ( band_index == 0 ) + { + if ( coder_type == INACTIVE ) + { + acelp_cfg->formant_enh = 0; + } + else + { + acelp_cfg->formant_enh = 1; + } + } + + if ( band_index == 1 && nb_subfr == NB_SUBFR ) + { + + if ( coder_type == INACTIVE ) + { + acelp_cfg->pre_emphasis = 0; + acelp_cfg->formant_enh = 0; + acelp_cfg->formant_enh_num = FORMANT_SHARPENING_G1_16k; + acelp_cfg->formant_tilt = 1; + acelp_cfg->voice_tilt = 1; + } + else + { + acelp_cfg->pre_emphasis = 1; + acelp_cfg->formant_enh = 1; + acelp_cfg->formant_enh_num = FORMANT_SHARPENING_G1; + acelp_cfg->formant_tilt = 0; + acelp_cfg->voice_tilt = 0; + } + } + + if ( coder_type == UNVOICED ) + { + if ( ACELP_GAINS_MODE[mode_index][band_index][coder_type] == 6 ) + { + acelp_cfg->pitch_sharpening = 0; + acelp_cfg->phase_scrambling = 1; + } + else + { + acelp_cfg->pitch_sharpening = 0; + acelp_cfg->phase_scrambling = 0; + } + } + else + { + acelp_cfg->pitch_sharpening = 1; + acelp_cfg->phase_scrambling = 0; + } + + if ( coder_type > ACELP_MODE_MAX ) + { + /* keep pitch sharpening for RF_ALLPRED mode */ + acelp_cfg->pitch_sharpening = 0; + acelp_cfg->phase_scrambling = 0; + } + + /*Allocate bits and different modes*/ + acelp_cfg->bpf_mode = ACELP_BPF_MODE[mode_index][band_index][coder_type]; + bits += ACELP_BPF_BITS[acelp_cfg->bpf_mode]; + + acelp_cfg->nrg_mode = ACELP_NRG_MODE[mode_index][band_index][coder_type]; + acelp_cfg->nrg_bits = ACELP_NRG_BITS[acelp_cfg->nrg_mode]; + bits += acelp_cfg->nrg_bits; + + acelp_cfg->ltp_mode = ACELP_LTP_MODE[mode_index][band_index][coder_type]; + acelp_cfg->ltp_bits = 0; + acelp_cfg->ltf_mode = ACELP_LTF_MODE[mode_index][band_index][coder_type]; + acelp_cfg->ltf_bits = ACELP_LTF_BITS[acelp_cfg->ltf_mode]; + + if ( nb_subfr == NB_SUBFR16k && acelp_cfg->ltf_bits == 4 ) + { + acelp_cfg->ltf_bits++; + } + bits += acelp_cfg->ltf_bits; + + + for ( i = 0; i < nb_subfr; i++ ) + { + acelp_cfg->gains_mode[i] = ACELP_GAINS_MODE[mode_index][band_index][coder_type]; + + /* skip subframe 1, 3 gain encoding, and use from subframe 0, and 3, respectively */ + if ( coder_type >= ACELP_MODE_MAX && ( i == 1 || i == 3 ) ) + { + acelp_cfg->gains_mode[i] = 0; + } + + bits += ACELP_GAINS_BITS[acelp_cfg->gains_mode[i]]; + bits += ACELP_LTP_BITS_SFR[acelp_cfg->ltp_mode][i]; + acelp_cfg->ltp_bits += ACELP_LTP_BITS_SFR[acelp_cfg->ltp_mode][i]; + } + + /*Innovation*/ + if ( bits_frame < bits ) + { + printf( "\nWarning: bits per frame too low\n" ); + return -1; + } + + if ( coder_type == RF_ALLPRED ) + { + set_s( acelp_cfg->fixed_cdk_index, -1, nb_subfr ); + } + else if ( coder_type == RF_GENPRED ) + { + acelp_cfg->fixed_cdk_index[0] = 0; /* 7 bits */ + acelp_cfg->fixed_cdk_index[1] = -1; + acelp_cfg->fixed_cdk_index[2] = 0; /* 7 bits */ + acelp_cfg->fixed_cdk_index[3] = -1; + acelp_cfg->fixed_cdk_index[4] = -1; + bits += 14; + } + else if ( coder_type == RF_NOPRED ) + { + set_s( acelp_cfg->fixed_cdk_index, 0, nb_subfr ); + bits += 28; + } + else + { + bits += BITS_ALLOC_adjust_acelp_fixed_cdk( bits_frame - bits, acelp_cfg->fixed_cdk_index, nb_subfr ); + } + + remaining_bits = bits_frame - bits; + + /*Sanity check*/ + if ( remaining_bits < 0 ) + { + bits = -1; + } + + + return ( bits ); +} + +/*-------------------------------------------------------------------* + * BITS_ALLOC_adjust_acelp_fixed_cdk() + * + * + *--------------------------------------------------------------------*/ + +static int16_t BITS_ALLOC_adjust_acelp_fixed_cdk( + const int16_t bits_frame, /* i : bit budget */ + int16_t *fixed_cdk_index, + const int16_t nb_subfr ) +{ + int16_t bits_subframe2; + int16_t sfr, k, bitsused, bits_currsubframe; + + bits_subframe2 = bits_frame; + + if ( bits_subframe2 < ACELP_FIXED_CDK_BITS( 0 ) * nb_subfr ) + { + return ( bits_frame + 1 ); /* Not enough bits for lowest mode. -> trigger alarm*/ + } + + /* search cdk-index for first subframe */ + for ( k = 0; k < ACELP_FIXED_CDK_NB - 1; k++ ) + { + if ( ACELP_FIXED_CDK_BITS( k ) * nb_subfr > bits_subframe2 ) + { + k--; /* previous mode did not exceed bit-budget */ + break; + } + } + + if ( ACELP_FIXED_CDK_BITS( k ) * nb_subfr > bits_subframe2 ) + { + k--; /* previous mode did not exceed bit-budget */ + } + fixed_cdk_index[0] = k; + + bitsused = ACELP_FIXED_CDK_BITS( k ); + + for ( sfr = 1; sfr < nb_subfr; sfr++ ) + { + bits_currsubframe = ( sfr * bits_subframe2 + bits_subframe2 ) - bitsused * nb_subfr; + + /* try increasing mode while below threshold */ + while ( ( k < ACELP_FIXED_CDK_NB - 1 ) && ( ACELP_FIXED_CDK_BITS( k + 1 ) * nb_subfr <= bits_currsubframe ) ) + { + k++; + } + + /* try decreasing mode until below threshold */ + while ( ACELP_FIXED_CDK_BITS( k ) * nb_subfr > bits_currsubframe ) + { + k--; + if ( k == 0 ) + { + break; + } + } + + /* store mode */ + fixed_cdk_index[sfr] = k; + bitsused += ACELP_FIXED_CDK_BITS( k ); + } + + return bitsused; +} + + +/*-------------------------------------------------------------------* + * fcb_table() + * + * Selection of fixed innovation codebook bitbudget table + *--------------------------------------------------------------------*/ + +static int16_t fcb_table( + const int16_t n, + const int16_t L_subfr ) +{ + int16_t out; + + out = PulseConfTable[n].bits; + if ( L_subfr > L_SUBFR ) + { + out = fast_FCB_bits_2sfr[n]; + } + + return ( out ); +} + +/*-------------------------------------------------------------------* + * acelp_FCB_allocator() + * + * Routine to allocate fixed innovation codebook bit-budget + *--------------------------------------------------------------------*/ + +static ivas_error acelp_FCB_allocator( + int16_t *nBits, /* i/o: available bit-budget */ + int16_t fixed_cdk_index[], /* o : codebook index */ + int16_t nb_subfr, /* i : number of subframes */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t coder_type, /* i : coder type */ + const int16_t tc_subfr, /* i : TC subframe index */ + const int16_t fix_first /* i : flag to indicate whether the first subframe bit-budget was fixed */ +) +{ + int16_t cdbk, sfr, step; + int16_t nBits_tmp; + int16_t *p_fixed_cdk_index; + ivas_error error; + + error = IVAS_ERR_OK; + + cdbk = coder_type; /* just to avoid warning when DEBUGGING is deactivated */ + + p_fixed_cdk_index = fixed_cdk_index; + + /* TRANSITION coding: first subframe bit-budget was already fixed, glottal pulse not in the first subframe */ + if ( tc_subfr >= L_SUBFR && fix_first ) + { + int16_t i; + + for ( i = 0; i < nb_subfr; i++ ) + { + *nBits -= ACELP_FIXED_CDK_BITS( fixed_cdk_index[i] ); + } + return error; + } + + /* TRANSITION coding: first subframe bit-budget was already fixed, glottal pulse in the first subframe */ + sfr = 0; + if ( fix_first ) + { + *nBits -= ACELP_FIXED_CDK_BITS( fixed_cdk_index[0] ); + sfr = 1; + p_fixed_cdk_index++; + nb_subfr = 3; + } + + /* distribute the bit-budget equally between subframes */ + cdbk = 0; + while ( fcb_table( cdbk, L_subfr ) * nb_subfr <= *nBits ) + { + cdbk++; + } + cdbk--; + +#ifdef DEBUGGING + if ( cdbk < 0 && coder_type != TRANSITION ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Too low bit-budget for fixed innovation codebook (frame = %d). Exiting! \n", frame ); + } + if ( ( L_subfr == L_SUBFR && cdbk >= ACELP_FIXED_CDK_NB ) || ( L_subfr == 2 * L_SUBFR && fcb_table( cdbk, L_subfr ) == 128 /*stop value*/ ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Too high bit-budget for fixed innovation codebook (frame = %d). Exiting! \n", frame ); + } +#endif + + set_s( p_fixed_cdk_index, cdbk, nb_subfr ); + nBits_tmp = 0; + if ( cdbk >= 0 ) + { + nBits_tmp = fcb_table( cdbk, L_subfr ); + } + else + { + nBits_tmp = 0; + } + *nBits -= nBits_tmp * nb_subfr; + + /* try to increase the FCB bit-budget of the first subframe(s) */ + step = fcb_table( cdbk + 1, L_subfr ) - nBits_tmp; + while ( *nBits >= step ) + { + ( *p_fixed_cdk_index )++; + *nBits -= step; + p_fixed_cdk_index++; + } + + /* try to increase the FCB of the first subframe in cases when the next step is lower than the current step */ + step = fcb_table( fixed_cdk_index[sfr] + 1, L_subfr ) - fcb_table( fixed_cdk_index[sfr], L_subfr ); + if ( *nBits >= step && cdbk >= 0 ) + { + fixed_cdk_index[sfr]++; + *nBits -= step; + + if ( *nBits >= step && fixed_cdk_index[sfr + 1] == fixed_cdk_index[sfr] - 1 ) + { + sfr++; + fixed_cdk_index[sfr]++; + *nBits -= step; + } + } + + /* TRANSITION coding: allocate highest FCBQ bit-budget to the subframe with the glottal-shape codebook */ + if ( tc_subfr >= L_SUBFR ) + { + int16_t tempr; + + SWAP( fixed_cdk_index[0], fixed_cdk_index[tc_subfr / L_SUBFR] ); + + /* TRANSITION coding: allocate second highest FCBQ bit-budget to the last subframe */ + if ( tc_subfr / L_SUBFR < nb_subfr - 1 ) + { + SWAP( fixed_cdk_index[( tc_subfr - L_SUBFR ) / L_SUBFR], fixed_cdk_index[nb_subfr - 1] ); + } + } + + /* when subframe length > L_SUBFR, number of bits instead of codebook index is signalled */ + if ( L_subfr > L_SUBFR ) + { + int16_t i, j; + for ( i = 0; i < nb_subfr; i++ ) + { + j = fixed_cdk_index[i]; + fixed_cdk_index[i] = fast_FCB_bits_2sfr[j]; + } + } + + return error; +} + + +/*-------------------------------------------------------------------* + * config_acelp1() + * + * Configure ACELP bit allocation + * - should be in range of <6700; 24350> for ACELP@12.8kHz + * - per channel bitrate minimum is 13250 kbps for ACELP@16kHz + *--------------------------------------------------------------------*/ + +ivas_error config_acelp1( + const int16_t enc_dec, /* i : encoder/decoder flag */ + const int32_t total_brate, /* i : total bitrate */ + const int32_t core_brate_inp, /* i : core bitrate */ + const int16_t core, /* i : core */ + const int16_t extl, /* i : extension layer */ + const int32_t extl_brate, /* i : extension layer bitrate */ + const int16_t L_frame, /* i : frame length at internal Fs */ + const int16_t GSC_noisy_speech, /* i : GSC on SWB noisy speech flag */ + ACELP_config *acelp_cfg, /* i : ACELP bit-allocation */ + const int16_t signalling_bits, /* i : number of signalling bits */ + const int16_t coder_type, /* i : coder type */ + const int16_t tc_subfr, /* i : TC subfr ID */ + const int16_t tc_call, /* i : TC call number (0,1,2,3,5(DEC)) */ + int16_t *nBits_es_Pred, /* o : number of bits for Es_pred Q */ + int16_t *unbits, /* o : number of unused bits */ + const int16_t element_mode, /* i : element mode */ + int16_t *uc_two_stage_flag, /* o : flag undicating two-stage UC */ + const int16_t tdm_lp_reuse_flag, /* i : LPC reuse flag (can be 1 only with secondary channel */ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ + const int16_t idchan, /* i : stereo channel ID */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag*/ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +) +{ + int16_t i, bits, nb_subfr; + int16_t flag_hardcoded, coder_type_sw, fix_first; + int32_t core_brate; +#ifdef DEBUGGING + int32_t core_brate_inpI = core_brate_inp; +#endif + ivas_error error; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * Set the flag indicating two-stage Unvoiced (UC) frame + *-----------------------------------------------------------------*/ + + *uc_two_stage_flag = 0; + if ( coder_type == UNVOICED ) + { + if ( total_brate >= MIN_UNVOICED_TWO_STAGE_BRATE && element_mode > EVS_MONO && ( idchan == 0 || ( ( total_brate >= 8500 || extl_brate == 0 ) && tdm_LRTD_flag == 1 ) ) ) + { + *uc_two_stage_flag = 1; + } + } + + /*-----------------------------------------------------------------* + * Set the number of subframes + *-----------------------------------------------------------------*/ + + if ( L_frame == L_FRAME ) + { + nb_subfr = NB_SUBFR; + +#ifdef DEBUGGING + if ( ( ( core_brate_inp < 5900 && coder_type > UNVOICED ) && !( core_brate_inp < MIN_TC_BRATE && coder_type == TRANSITION ) ) && !( idchan > 0 && element_mode == IVAS_CPE_TD ) && !( element_mode == IVAS_SCE && tdm_low_rate_mode ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Too low bitrate (%d bps) for ACELP@12k8 in frame %d. Exiting!\n", core_brate_inpI, frame ); + } + + if ( core_brate_inp > ACELP_12k8_HIGH_LIMIT && core == ACELP_CORE ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Too high bitrate (%d bps) for ACELP@12k8 in frame %d. Exiting!\n", core_brate_inpI, frame ); + } +#endif + } + else /* L_frame == L_FRAME16k */ + { + nb_subfr = NB_SUBFR16k; + +#ifdef DEBUGGING + if ( core_brate_inp < ACELP_16k_LOW_LIMIT && core == ACELP_CORE ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Too low bitrate (%d bps) for ACELP@16k in frame %d. Exiting!\n", core_brate_inpI, frame ); + } +#endif + } + + coder_type_sw = coder_type; + if ( core != ACELP_CORE ) + { + /* used in acelp_core_switch_enc() */ + nb_subfr = 1; + if ( L_frame == L_FRAME ) + { + coder_type_sw = TRANSITION; + } + } + + /*-----------------------------------------------------------------* + * Check if the core_brate is hard coded (to keep BE for mono core) or not + *-----------------------------------------------------------------*/ + + flag_hardcoded = 0; + i = 0; + + while ( i < SIZE_BRATE_INTERMED_TBL ) + { + if ( core_brate_inp == brate_intermed_tbl[i] ) + { + flag_hardcoded = 1; + break; + } + + if ( core_brate_inp < brate_intermed_tbl[i] ) + { + flag_hardcoded = 0; + break; + } + + i++; + } + + if ( element_mode == IVAS_CPE_TD && coder_type == AUDIO && + core_brate_inp <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ + { + i--; + } + + core_brate = brate_intermed_tbl[i]; + + if ( element_mode > EVS_MONO ) + { + flag_hardcoded = 0; /* use automatic and flexible ACELP bit-budget allocation */ + } + + if ( core != ACELP_CORE && element_mode == EVS_MONO ) /* needed for mode1 core switching in EVS mono */ + { + flag_hardcoded = 1; + } + + /*-----------------------------------------------------------------* + * ACELP bit allocation + *-----------------------------------------------------------------*/ + + if ( !( coder_type == TRANSITION && tc_subfr != -1 ) || enc_dec == DEC ) + { + /* Set the bit-budget */ + bits = (int16_t) ( core_brate_inp / FRAMES_PER_SEC ); + + if ( coder_type == TRANSITION && enc_dec == DEC && tc_call == 1 ) + { + bits += *nBits_es_Pred; /* equalize for 4th signaling bit estimated at the encoder in TC_0_192 */ + } + + /* Subtract signalling bits */ + if ( enc_dec == DEC && idchan == 1 && element_mode > EVS_MONO ) + { + bits -= TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; + + if ( tdm_LRTD_flag == 1 ) + { + bits += STEREO_BITS_TCA; + } + + /* subtract TBE/BWE flag */ + if ( extl_brate > 0 && ( extl == WB_TBE || extl == SWB_TBE || extl == FB_TBE || extl == WB_BWE || extl == SWB_BWE || extl == FB_BWE ) ) + { + bits--; + } + } + else + { + /* Subtract signalling bits */ + bits -= signalling_bits; + } + + if ( extl_brate > 0 && ( extl == WB_TBE || extl == SWB_TBE || extl == FB_TBE || extl == WB_BWE || extl == SWB_BWE || extl == FB_BWE ) ) + { + /* extension layer signalling bit is counted in the extension layer bitbudget */ + bits++; + } + + /*-----------------------------------------------------------------* + * LSF Q bit-budget + *-----------------------------------------------------------------*/ + + if ( !tdm_lp_reuse_flag || idchan == 0 ) + { + /* LSF Q bit-budget */ + acelp_cfg->lsf_bits = LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; + + if ( !flag_hardcoded ) + { + if ( L_frame == L_FRAME ) + { + if ( element_mode == IVAS_SCE && tdm_low_rate_mode ) + { + acelp_cfg->lsf_bits = LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; + } + else if ( ( total_brate < 7200 || coder_type == INACTIVE || coder_type == AUDIO ) && idchan == 1 ) + { + /* TD stereo, secondary channel: do nothing */ + acelp_cfg->lsf_bits = LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; + } + else if ( element_mode > EVS_MONO && coder_type == AUDIO && brate_intermed_tbl[i] < ACELP_9k60 ) + { + /* primary channel: do nothing */ + } + else if ( element_mode > EVS_MONO && coder_type == AUDIO /*&& brate_intermed_tbl[i] >= ACELP_9k60*/ ) + { + acelp_cfg->lsf_bits = 42; + } + else if ( total_brate <= 9600 || coder_type == UNVOICED ) + { + acelp_cfg->lsf_bits = 31; + } + else if ( total_brate <= 20000 ) + { + acelp_cfg->lsf_bits = 36; + } + else + { + acelp_cfg->lsf_bits = 41; + } + } + else /* L_frame == L_FRAME16k */ + { + acelp_cfg->lsf_bits = 41; /* TBV: currently LSFQ @16kHz is not flexible (only 31/41 bits supported */ + } + } + + bits -= acelp_cfg->lsf_bits; + + /* mid-LSF Q bit-budget */ + acelp_cfg->mid_lsf_bits = mid_LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; + + if ( element_mode > EVS_MONO && coder_type == AUDIO /*&& brate_intermed_tbl[i] < ACELP_9k60*/ ) + { + acelp_cfg->mid_lsf_bits = 5; + /* primary channel: do nothing */ + } + + bits -= acelp_cfg->mid_lsf_bits; + } +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE + else if ( tdm_lp_reuse_flag == 1 && idchan == 1 ) + { + bits -= TDM_IC_LSF_PRED_BITS; + } +#endif + /* gain Q bit-budget - part 1 */ + if ( ( coder_type != UNVOICED && coder_type != AUDIO && coder_type != INACTIVE && !( core_brate <= ACELP_8k00 && coder_type != TRANSITION ) ) || ( coder_type == INACTIVE && total_brate > MAX_GSC_INACTIVE_BRATE ) ) + { + *nBits_es_Pred = Es_pred_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, -1, -1 )]; + bits -= *nBits_es_Pred; + } + else if ( *uc_two_stage_flag ) + { + *nBits_es_Pred = 4; + bits -= *nBits_es_Pred; + } + } + else + { + bits = *unbits; + } + + if ( coder_type == TRANSITION && tc_call == 0 ) + { + *unbits = bits; + return error; + } + + /*-----------------------------------------------------------------* + * Low-rate mode - bits are allocated in tdm_low_rate_enc() + *-----------------------------------------------------------------*/ + + if ( element_mode == IVAS_SCE && tdm_low_rate_mode ) + { + acelp_cfg->FEC_mode = 0; + acelp_cfg->ltf_mode = FULL_BAND; + *nBits_es_Pred = 0; + *unbits = 0; + acelp_cfg->ubits = 0; + + return error; + } + + /*-----------------------------------------------------------------* + * Supplementary information for FEC + *-----------------------------------------------------------------*/ + + acelp_cfg->FEC_mode = 0; + if ( core_brate >= ACELP_11k60 && ( idchan == 0 || element_mode == EVS_MONO ) ) + { + acelp_cfg->FEC_mode = 1; + + if ( coder_type > UNVOICED && coder_type < AUDIO && coder_type != VOICED ) + { + bits -= FEC_BITS_CLS; + } + + if ( coder_type != TRANSITION ) + { + if ( total_brate >= ACELP_16k40 ) + { + acelp_cfg->FEC_mode = 2; + + if ( coder_type > UNVOICED && coder_type < AUDIO ) + { + bits -= FEC_BITS_ENR; + } + } + + if ( total_brate >= ACELP_32k ) + { + acelp_cfg->FEC_mode = 3; + + if ( coder_type > UNVOICED && coder_type < AUDIO ) + { + bits -= FEC_BITS_POS; + } + } + } + } + + /*-----------------------------------------------------------------* + * LP filtering of the adaptive excitation + *-----------------------------------------------------------------*/ + + if ( idchan > 0 && element_mode > EVS_MONO ) + { + acelp_cfg->ltf_mode = FULL_BAND; + } + else if ( coder_type == UNVOICED ) + { + acelp_cfg->ltf_mode = FULL_BAND; + } + else if ( ( coder_type == GENERIC || coder_type == TRANSITION ) && core_brate < ACELP_11k60 ) + { + acelp_cfg->ltf_mode = LOW_PASS; + } + else if ( core_brate >= ACELP_11k60 && ( coder_type != AUDIO && !( coder_type == INACTIVE && L_frame == L_FRAME ) ) ) + { + if ( coder_type == INACTIVE && L_frame == L_FRAME16k && total_brate <= MAX_GSC_INACTIVE_BRATE ) /* GSC Inactive @16kHz */ + { + acelp_cfg->ltf_mode = FULL_BAND; + } + else + { + acelp_cfg->ltf_mode = NORMAL_OPERATION; + if ( coder_type != TRANSITION ) + { + bits -= nb_subfr; + } + } + } + else + { + acelp_cfg->ltf_mode = FULL_BAND; + } + + /*-----------------------------------------------------------------* + * UC bit-budget + *-----------------------------------------------------------------*/ + + if ( ( ( coder_type == UNVOICED && !( *uc_two_stage_flag ) ) || ( coder_type == INACTIVE && core_brate <= ACELP_9k60 ) ) && ( idchan == 0 || element_mode == EVS_MONO ) ) + { + bits -= NBITS_NOISENESS; /* noiseness */ + } + if ( coder_type == UNVOICED && !( *uc_two_stage_flag ) ) + { + bits -= ( 3 * NB_SUBFR ); /* tilt factor */ + } + + /*-----------------------------------------------------------------* + * TC bit-budget + *-----------------------------------------------------------------*/ + + fix_first = 0; + if ( coder_type == TRANSITION ) + { + if ( tc_call == 2 ) + { + fix_first = 1; + } + + /* TC signalling */ + if ( L_frame == L_FRAME ) + { + if ( tc_subfr == TC_0_0 ) + { + if ( enc_dec == ENC ) + { + bits -= 1; /* TC signalling */ + } + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + bits -= 3; /* LP filtering flag */ + } + } + else if ( tc_subfr == TC_0_64 ) + { + if ( enc_dec == ENC ) + { + bits -= 4; /* TC signalling */ + } + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + bits -= 3; /* LP filtering flag */ + } + } + else if ( tc_subfr == TC_0_128 ) + { + if ( enc_dec == ENC ) + { + bits -= 4; /* TC signalling */ + } + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + bits -= 2; /* LP filtering flag */ + } + } + else if ( tc_subfr == TC_0_192 ) + { + if ( enc_dec == ENC ) + { + bits -= 3; /* TC signalling */ + } + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + bits -= 1; /* LP filtering flag */ + } + } + else if ( tc_subfr == L_SUBFR ) + { + if ( enc_dec == ENC ) + { + bits -= 3; /* TC signalling */ + } + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + bits -= ( L_FRAME - tc_subfr - L_SUBFR ) / L_SUBFR; /* LP filtering flag */ + } + } + else + { + if ( enc_dec == ENC ) + { + bits -= 4; /* TC signalling */ + } + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + bits -= ( L_FRAME - tc_subfr - L_SUBFR ) / L_SUBFR; /* LP filtering flag */ + } + } + } + else /* L_frame == L_FRAME16k */ + { + if ( enc_dec == ENC ) + { + if ( tc_subfr <= 2 * L_SUBFR ) + { + bits -= 2; /* TC signalling */ + } + else + { + bits -= 3; /* TC signalling */ + } + } + + bits -= ( L_FRAME16k - tc_subfr - L_SUBFR ) / L_SUBFR; /* LP filtering flag */ + } + + /* glottal-shape codebook bits */ + bits -= ( 3 + 6 + 1 + 3 ); + } + + /*-----------------------------------------------------------------* + * pitch, innovation, gains bit-budget + *-----------------------------------------------------------------*/ + + acelp_cfg->fcb_mode = 0; + + if ( element_mode == IVAS_CPE_TD && tdm_low_rate_mode == 1 && coder_type != INACTIVE && coder_type != UNVOICED ) /* GENERIC low rate mode for secondary channel */ + { + set_s( acelp_cfg->pitch_bits, 0, NB_SUBFR16k ); + set_s( acelp_cfg->gains_mode, 0, NB_SUBFR16k ); + + for ( i = 0; i < 2; i++ ) + { + acelp_cfg->pitch_bits[i] = 0; + if ( tdm_Pitch_reuse_flag == 0 ) + { + acelp_cfg->pitch_bits[i] = ACB_bits_tbl[BIT_ALLOC_IDX( ACELP_7k20, GENERIC, 2 * i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; + bits -= acelp_cfg->pitch_bits[i]; + } + acelp_cfg->gains_mode[i] = gain_bits_tbl[BIT_ALLOC_IDX( ACELP_7k20, GENERIC, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; + bits -= acelp_cfg->gains_mode[i]; + } + acelp_cfg->fcb_mode = 1; + +#ifdef DEBUGGING + if ( bits >= 55 ) + { + printf( "too much bits -> %d, LPC = %d and pitch = %d\n", bits, tdm_lp_reuse_flag, tdm_Pitch_reuse_flag ); + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, 2, 2 * L_SUBFR, GENERIC, -1, 0 ); + } + else +#endif + if ( bits >= 16 ) + { + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, 2, 2 * L_SUBFR, GENERIC, -1, 0 ); + } + else + { + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, 2, 2 * L_SUBFR, GENERIC, -1, 0 ); + acelp_cfg->fixed_cdk_index[1] = -1; + } + acelp_cfg->fixed_cdk_index[2] = -1; + acelp_cfg->fixed_cdk_index[3] = -1; + } + else if ( ( coder_type != INACTIVE && nb_subfr == NB_SUBFR && coder_type != AUDIO ) || ( nb_subfr == NB_SUBFR16k && ( total_brate > MAX_GSC_INACTIVE_BRATE || coder_type != INACTIVE ) ) || core == HQ_CORE ) + { + /* pitch Q & gain Q bit-budget - part 2*/ + for ( i = 0; i < nb_subfr; i++ ) + { + if ( L_frame == L_FRAME ) + { + if ( tdm_Pitch_reuse_flag == 1 && idchan == 1 ) + { + acelp_cfg->pitch_bits[i] = 0; + } + else + { + acelp_cfg->pitch_bits[i] = ACB_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; + } + acelp_cfg->gains_mode[i] = gain_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type_sw, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; + } + else /* L_frame == L_FRAME16k */ + { + if ( tdm_Pitch_reuse_flag == 1 && idchan == 1 ) + { + acelp_cfg->pitch_bits[i] = 0; + } + else + { + acelp_cfg->pitch_bits[i] = ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; + } + acelp_cfg->gains_mode[i] = gain_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type_sw, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; + } + + bits -= acelp_cfg->pitch_bits[i]; + + if ( coder_type == INACTIVE && acelp_cfg->gains_mode[i] == 6 /* VQ vs. SQ threshold @32 kbps */ ) + { + bits -= 5; + } + else + { + if ( *uc_two_stage_flag == 1 ) + { + acelp_cfg->gains_mode[i] = 7; + } + + bits -= acelp_cfg->gains_mode[i]; + } + } + + /* algebraic codebook bit-budget */ + if ( flag_hardcoded || ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) + { + for ( i = 0; i < nb_subfr; i++ ) + { + if ( L_frame == L_FRAME ) + { + acelp_cfg->fixed_cdk_index[i] = FCB_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; + } + else /* L_frame == L_FRAME16k */ + { + acelp_cfg->fixed_cdk_index[i] = FCB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; + } + bits -= acelp_cfg->fixed_cdk_index[i]; + } + } + else if ( !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) + { + if ( coder_type == UNVOICED && !( *uc_two_stage_flag ) ) + { + i = bits / NB_SUBFR; + if ( i % 2 == 0 ) + { + i--; /* must be odd */ + } + i = min( i, 13 ); +#ifdef DEBUG_MODE_TD + if ( i < 0 ) + IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR::: UC negative index should not happen at frame %d\n", frame ); +#endif + i = max( i, 0 ); /* If i == 0-> random noise generator will be used as FCB */ + set_s( acelp_cfg->fixed_cdk_index, i, NB_SUBFR ); + bits -= ( i * NB_SUBFR ); + } + else + { + + acelp_cfg->fcb_mode = 1; + if ( element_mode == IVAS_CPE_TD ) + { + if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) * ( nb_subfr ) ) /* enough bits for all fcb */ + { + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr, L_SUBFR, coder_type, tc_subfr, fix_first ); + } + else if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) * ( nb_subfr - 1 ) ) + { + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr - 1, L_SUBFR, coder_type, tc_subfr, fix_first ); + acelp_cfg->fixed_cdk_index[3] = -1; + } + else if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) * ( nb_subfr - 2 ) ) + { + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr - 2, L_SUBFR, coder_type, tc_subfr, fix_first ); + acelp_cfg->fixed_cdk_index[2] = acelp_cfg->fixed_cdk_index[1]; + acelp_cfg->fixed_cdk_index[1] = -1; + acelp_cfg->fixed_cdk_index[3] = -1; + } + else if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) ) + { + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, 1, L_SUBFR, coder_type, tc_subfr, fix_first ); + acelp_cfg->fixed_cdk_index[1] = acelp_cfg->fixed_cdk_index[0]; + acelp_cfg->fixed_cdk_index[0] = -1; + acelp_cfg->fixed_cdk_index[2] = -1; + acelp_cfg->fixed_cdk_index[3] = -1; + } + else /* No FCB */ + { +#ifdef DEBUGGING + IVAS_ERROR( IVAS_ERR_INTERNAL, "WARNING!!!, No bit allocated to FCB, check frame %d\n", frame ); +#endif + acelp_cfg->fixed_cdk_index[0] = -1; + acelp_cfg->fixed_cdk_index[1] = -1; + acelp_cfg->fixed_cdk_index[2] = -1; + acelp_cfg->fixed_cdk_index[3] = -1; + } + } + else if ( element_mode != IVAS_CPE_TD && GSC_IVAS_mode > 0 && L_frame == L_FRAME16k ) + { + bits = 100; /* 9 kbps for fcb */ + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr, L_SUBFR, coder_type, tc_subfr, fix_first ); + } + else + { + acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr, L_SUBFR, coder_type, tc_subfr, fix_first ); + } + } + } + + /* AVQ codebook */ + if ( ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) + { + for ( i = 0; i < nb_subfr; i++ ) + { + if ( flag_hardcoded ) + { + acelp_cfg->AVQ_cdk_bits[i] = AVQ_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; + { + bits -= acelp_cfg->AVQ_cdk_bits[i]; + } + } + + bits -= G_AVQ_BITS; + } + + if ( core_brate_inp >= MIN_BRATE_AVQ_EXC && core_brate_inp <= MAX_BRATE_AVQ_EXC_TD && coder_type == GENERIC ) + { + /* harm. flag ACELP AVQ */ + bits--; + } + + if ( !flag_hardcoded ) + { + int16_t bit_tmp; + + bit_tmp = bits / nb_subfr; + set_s( acelp_cfg->AVQ_cdk_bits, bit_tmp, nb_subfr ); + bits -= bit_tmp * nb_subfr; + + bit_tmp = bits % nb_subfr; + acelp_cfg->AVQ_cdk_bits[0] += bit_tmp; + bits -= bit_tmp; + } + } + } + else if ( ( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) || ( ( coder_type == INACTIVE || coder_type == AUDIO ) && nb_subfr == NB_SUBFR ) || ( coder_type == INACTIVE && total_brate <= MAX_GSC_INACTIVE_BRATE ) ) + { + int32_t Local_BR, Pitch_BR; + int16_t Pitch_CT; + + /* as defined at the beginning of [enc,dec]_pit_exc() */ + if ( GSC_IVAS_mode > 0 && ( GSC_noisy_speech || core_brate > GSC_H_RATE_STG ) ) + { + Local_BR = ACELP_8k00; + Pitch_CT = GENERIC; + Pitch_BR = ACELP_8k00; + if ( L_frame == L_FRAME16k ) + { + Local_BR = ACELP_14k80; + if ( GSC_IVAS_mode > 0 && core_brate < IVAS_24k4 ) + { + Local_BR = ACELP_9k60; + } + Pitch_BR = core_brate; + } + } + else if ( GSC_noisy_speech ) + { + Local_BR = ACELP_7k20; + Pitch_CT = GENERIC; + Pitch_BR = ACELP_7k20; + if ( L_frame == L_FRAME16k ) + { + Pitch_BR = core_brate; + } + } + else + { + Local_BR = ACELP_7k20; + Pitch_CT = AUDIO; + Pitch_BR = core_brate; + + if ( L_frame == L_FRAME16k ) + { + Local_BR = ACELP_13k20; + Pitch_CT = GENERIC; + } + } + + for ( i = 0; i < nb_subfr; i++ ) + { + if ( L_frame == L_FRAME16k ) + { + acelp_cfg->pitch_bits[i] = ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( Pitch_BR, Pitch_CT, i * L_SUBFR, 0 )]; + acelp_cfg->fixed_cdk_index[i] = FCB_bits_tbl[BIT_ALLOC_IDX( Local_BR, LOCAL_CT, i * L_SUBFR, 0 )]; + } + else + { + acelp_cfg->pitch_bits[i] = ACB_bits_tbl[BIT_ALLOC_IDX( Pitch_BR, Pitch_CT, i * L_SUBFR, 0 )]; + acelp_cfg->fixed_cdk_index[i] = FCB_bits_tbl[BIT_ALLOC_IDX( Local_BR, LOCAL_CT, i * L_SUBFR, 0 )]; + acelp_cfg->gains_mode[i] = gain_bits_tbl[BIT_ALLOC_IDX( ACELP_7k20, LOCAL_CT, i * L_SUBFR, 0 )]; + } + } + } + + if ( coder_type == TRANSITION && ( tc_call == 1 && tc_subfr == 0 && L_frame == L_FRAME ) ) + { + return error; + } + + /*-----------------------------------------------------------------* + * unused bits handling + *-----------------------------------------------------------------*/ + + acelp_cfg->ubits = 0; /* these bits could be reused for something else */ + + if ( flag_hardcoded && core_brate != PPP_NELP_2k80 ) + { + /* unused bits */ + if ( coder_type == AUDIO || ( coder_type == INACTIVE && core_brate <= ACELP_24k40 ) ) + { + acelp_cfg->ubits = 0; + } + else if ( L_frame == L_FRAME ) + { + acelp_cfg->ubits = reserved_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, -1, TC_SUBFR2IDX( tc_subfr ) )]; + } + else + { + acelp_cfg->ubits = 0; + } + + bits -= acelp_cfg->ubits; + } + + /* sanity check */ + if ( ( coder_type != INACTIVE && nb_subfr == NB_SUBFR && coder_type != AUDIO ) || nb_subfr == NB_SUBFR16k ) + { + if ( ( L_frame == L_FRAME16k && coder_type == INACTIVE && total_brate <= MAX_GSC_INACTIVE_BRATE ) || ( GSC_IVAS_mode > 0 && L_frame == L_FRAME16k ) ) /* GSC Inactive @16kHz */ + { + acelp_cfg->ubits = 0; + } + else if ( flag_hardcoded && core == ACELP_CORE && bits != 0 ) + { +#ifdef DEBUGGING + IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d.\n", (int32_t) bits, frame ); +#endif + } + else if ( bits > 0 && !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) + { + if ( idchan > 0 && element_mode == IVAS_CPE_TD ) + { +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + if ( !tdm_lp_reuse_flag ) + { + acelp_cfg->lsf_bits += bits; /* increase LSF Q bits */ + bits = 0; + } + else + { + int16_t nb_prm = 4; + if ( tdm_low_rate_mode == 1 ) + { + nb_prm = 2; + } + /* First add remaining bits on gains */ + bits -= allocate_unused( core_brate, coder_type, bits, nb_prm, 0, GAINSPRM, acelp_cfg->gains_mode ); + + /* Then, Increase pitch bit budget */ + if ( tdm_Pitch_reuse_flag == 0 && bits > 0 ) + { + bits -= allocate_unused( core_brate, coder_type, bits, nb_prm, 0, PITCHPRM, acelp_cfg->pitch_bits ); + } + + /* Increase mid-lsf bit budget */ + if ( tdm_lp_reuse_flag == 0 && bits > 0 ) + { + bits -= allocate_unused( core_brate, coder_type, bits, 1, 0, MID_LSFSPRM, &acelp_cfg->mid_lsf_bits ); + bits -= allocate_unused( core_brate, coder_type, bits, 1, 0, LSFPRM, &acelp_cfg->lsf_bits ); + } + } +#else + int16_t nb_prm = 4; + + if ( tdm_low_rate_mode == 1 ) + { + nb_prm = 2; + } + + /* First add remaining bits on gains */ + if ( !( *uc_two_stage_flag ) ) + { + bits -= allocate_unused( core_brate, coder_type, bits, nb_prm, 0, GAINSPRM, acelp_cfg->gains_mode ); + } + + /* Then, Increase pitch bit budget */ + if ( tdm_Pitch_reuse_flag == 0 && bits > 0 ) + { + bits -= allocate_unused( core_brate, coder_type, bits, nb_prm, 0, PITCHPRM, acelp_cfg->pitch_bits ); + } + + /* Increase mid-lsf bit budget */ + if ( tdm_lp_reuse_flag == 0 && bits > 0 ) + { + bits -= allocate_unused( core_brate, coder_type, bits, 1, 0, MID_LSFSPRM, &acelp_cfg->mid_lsf_bits ); + bits -= allocate_unused( core_brate, coder_type, bits, 1, 0, LSFPRM, &acelp_cfg->lsf_bits ); + } +#endif +#ifdef DEBUGGING + if ( idchan > 0 && bits > 0 && ( coder_type > UNVOICED || tdm_low_rate_mode == 0 ) ) + { + IVAS_ERROR( IVAS_ERR_INTERNAL, "WARNING !! Unused bits in secondary channel at frame %d\n", frame ); + } +#endif + } + + else if ( core == ACELP_CORE && coder_type >= UNVOICED && coder_type <= GENERIC && L_frame == L_FRAME ) + { + acelp_cfg->lsf_bits += bits; /* increase LSF Q bits */ + + if ( acelp_cfg->lsf_bits > 46 ) + { + acelp_cfg->ubits = acelp_cfg->lsf_bits - 46; + acelp_cfg->lsf_bits = 46; + } + else if ( acelp_cfg->lsf_bits > 42 && L_frame == L_FRAME ) /* TBV: verify maximum supported LSF Q bitbudget (for some reason 43 bits LSFQ decreases segSNR by 0.7 dB) */ + { + acelp_cfg->ubits = acelp_cfg->lsf_bits - 42; + acelp_cfg->lsf_bits = 42; + } + } + else + { + acelp_cfg->ubits = bits; + } + } + else if ( bits < 0 && !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) + { +#ifdef DEBUGGING + IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d.\n", (int32_t) bits, frame ); +#endif + } + } + + return error; +} + +/*-------------------------------------------------------------------* + * allocate_unused() + * + * Allocate unused bits + *--------------------------------------------------------------------*/ + +static int16_t allocate_unused( + const int32_t core_brate, + const int16_t coder_type, + const int16_t unused_bits, + const int16_t nb_prm, + const int16_t subfr, + const int16_t prm_type, + int16_t *prm_bit_mode ) +{ + int16_t max_bit_per_pos = 0, bit_added = 0; + + if ( prm_type == GAINSPRM ) + { + max_bit_per_pos = 6; + if ( core_brate > ACELP_8k00 ) + { + max_bit_per_pos = 7; + } + else if ( coder_type != UNVOICED ) + { + if ( subfr >= 1 ) + { + max_bit_per_pos = 7; + } + else if ( subfr == 0 ) + { + max_bit_per_pos = 8; + } + } + else if ( coder_type == UNVOICED ) + { + max_bit_per_pos = 9; /* No real limit on UC gain bit budget of the secondary channel */ + } + } + else if ( prm_type == PITCHPRM ) + { + max_bit_per_pos = 6; + if ( subfr == 0 || subfr == 2 || nb_prm == 2 ) + { + max_bit_per_pos = 10; + } + + if ( coder_type == UNVOICED ) + { + max_bit_per_pos = 0; /* Should not allocate bits in case of unvoiced coder type */ + } + } + else if ( prm_type == MID_LSFSPRM ) + { + max_bit_per_pos = 5; + } + else if ( prm_type == LSFPRM ) + { + max_bit_per_pos = 42; + } + else + { +#ifdef DEBUG_MODE_TD + IVAS_ERROR( IVAS_ERR_WRONG_MODE, "unknown mode in bit_alloc.c" ); +#endif + } + + max_bit_per_pos = min( unused_bits, max_bit_per_pos - prm_bit_mode[subfr] ); + if ( max_bit_per_pos < 0 ) + { + return 0; + } + else if ( max_bit_per_pos >= 0 && subfr == ( nb_prm - 1 ) ) + { + prm_bit_mode[subfr] += max_bit_per_pos; + } + else + { + prm_bit_mode[subfr] += max_bit_per_pos; + bit_added += allocate_unused( core_brate, coder_type, unused_bits - max_bit_per_pos, nb_prm, subfr + 1, prm_type, &prm_bit_mode[0] ); + } + + return bit_added + max_bit_per_pos; +} + + +/*-------------------------------------------------------------------* + * set_ACELP_flag() + * + * set ACELP@16kHz flag + *--------------------------------------------------------------------*/ + +/*! r: ACELP16k flag */ +int16_t set_ACELP_flag( + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int32_t total_brate, /* i : total bitrate per channel */ + const int16_t idchan, /* i : Channel id */ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t cng_type /* i : CNG type */ +) +{ + if ( element_mode == IVAS_CPE_DFT && idchan == 0 && total_brate <= SID_2k40 && bwidth == WB && cng_type == LP_CNG ) + { + + return 1; + } + else if ( element_mode == IVAS_CPE_TD ) + { + if ( element_brate >= IVAS_24k4 && idchan == 0 && ( tdm_LRTD_flag == 0 || element_brate > IVAS_24k4 ) ) + { + return 1; + } + else + { + return 0; + } + } + else if ( element_mode == IVAS_CPE_DFT ) + { + if ( element_brate >= IVAS_24k4 ) + { + return 1; + } + else + { + return 0; + } + } + else if ( element_mode == IVAS_SCE ) + { + if ( element_brate >= SCE_CORE_16k_LOW_LIMIT ) + { + return 1; + } + else + { + return 0; + } + } + else if ( total_brate >= ACELP_16k_LOW_LIMIT ) /* EVS_MONO */ + { + return 1; + } + else + { + return 0; + } +} diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c new file mode 100644 index 0000000000..1e36dbb535 --- /dev/null +++ b/lib_com/bitstream.c @@ -0,0 +1,2973 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "stat_enc.h" +#include "stat_dec.h" +#include "rom_com.h" +#include "mime.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "wmops.h" + +#ifdef DEBUGGING + +#define FEC_SEED 12558 + +/*-------------------------------------------------------------------* + * Global variables + *--------------------------------------------------------------------*/ + +FILE *FEC_pattern = NULL; /* FEC pattern file (for simulation of FEC) */ +#endif + +/*-------------------------------------------------------------------* + * pack_bit() + * + * insert a bit into packed octet + *-------------------------------------------------------------------*/ + +static void pack_bit( + const Word16 bit, /* i : bit to be packed */ + UWord8 **pt, /* i/o: pointer to octet array into which bit will be placed */ + UWord8 *omask /* i/o: output mask to indicate where in the octet the bit is to be written */ +) +{ + if ( *omask == 0x80 ) + { + **pt = 0; + } + if ( bit != 0 ) + { + **pt = **pt | *omask; + } + *omask >>= 1; + if ( *omask == 0 ) + { + *omask = 0x80; + ( *pt )++; + } + + return; +} + +/*-------------------------------------------------------------------* + * unpack_bit() + * + * unpack a bit from packed octet + *-------------------------------------------------------------------*/ + +static Word16 unpack_bit( + UWord8 **pt, /* i/o: pointer to octet array from which bit will be read */ + UWord8 *mask /* i/o: mask to indicate the bit in the octet */ +) +{ + Word16 bit; + + bit = ( **pt & *mask ) != 0; + *mask >>= 1; + if ( *mask == 0 ) + { + *mask = 0x80; + ( *pt )++; + } + + return bit; +} + +/*-------------------------------------------------------------------* + * rate2AMRWB_IOmode() + * + * lookup AMRWB IO mode + *-------------------------------------------------------------------*/ + +static Word16 rate2AMRWB_IOmode( + Word32 brate /* i : bitrate */ +) +{ + switch ( brate ) + { + /* EVS AMR-WB IO modes */ + case SID_1k75: + return AMRWB_IO_SID; + case ACELP_6k60: + return AMRWB_IO_6600; + case ACELP_8k85: + return AMRWB_IO_8850; + case ACELP_12k65: + return AMRWB_IO_1265; + case ACELP_14k25: + return AMRWB_IO_1425; + case ACELP_15k85: + return AMRWB_IO_1585; + case ACELP_18k25: + return AMRWB_IO_1825; + case ACELP_19k85: + return AMRWB_IO_1985; + case ACELP_23k05: + return AMRWB_IO_2305; + case ACELP_23k85: + return AMRWB_IO_2385; + default: + break; + } + + return -1; +} + +/*-------------------------------------------------------------------* + * rate2EVSmode() + * + * lookup EVS mode + *-------------------------------------------------------------------*/ +Word16 rate2EVSmode( + const Word32 brate, /* i : bitrate */ + int16_t *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */ +) +{ + if ( is_amr_wb != NULL ) + { + *is_amr_wb = 0; + } + + switch ( brate ) + { + /* EVS Primary modes */ + case FRAME_NO_DATA: + return NO_DATA_RECEIVED; + case SID_2k40: + return PRIMARY_SID; + case PPP_NELP_2k80: + return PRIMARY_2800; + case ACELP_7k20: + return PRIMARY_7200; + case ACELP_8k00: + return PRIMARY_8000; + case ACELP_9k60: + return PRIMARY_9600; + case ACELP_13k20: + return PRIMARY_13200; + case ACELP_16k40: + return PRIMARY_16400; + case ACELP_24k40: + return PRIMARY_24400; + case ACELP_32k: + return PRIMARY_32000; + case ACELP_48k: + return PRIMARY_48000; + case ACELP_64k: + return PRIMARY_64000; + case HQ_96k: + return PRIMARY_96000; + case HQ_128k: + return PRIMARY_128000; + default: + break; + } + + if ( is_amr_wb != NULL ) + { + *is_amr_wb = 1; + } + + return rate2AMRWB_IOmode( brate ); +} + +/*-------------------------------------------------------------------* + * push_indice() + * + * Push a new indice into the buffer + *-------------------------------------------------------------------*/ + +#ifdef DEBUG_BS_READ_WRITE +ivas_error push_indice_( +#else +ivas_error push_indice( +#endif + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t id, /* i : ID of the indice */ + uint16_t value, /* i : value of the quantized indice */ + int16_t nb_bits /* i : number of bits used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +) +{ + int16_t i; + ivas_error error; + + error = IVAS_ERR_OK; + +#ifdef DEBUG_BS_READ_WRITE + printf( "%s: %d: %d: %d\n", func, line, nb_bits, value ); +#endif +#ifdef DEBUGGING + if ( nb_bits < ( 32 - 1 ) && ( value >> nb_bits ) > 0 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Indice ID = %d with value %d exceeds the range of %d bits (frame %d) !\n", id, value, nb_bits, frame ); + } + +#if 0 + /* mul, 2020-11-19: to be de-activated until proper solution found */ + if ( nb_bits < 1 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, " Trying to push indice ID = %d with value %d that has %d bits (frame %d) !\n", id, value, nb_bits, frame ); + } + else +#endif + if ( nb_bits > 16 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Indice ID = %d with value %d is trying to allocate %d bits which exceeds 16 bits (frame %d) !\n", id, value, nb_bits, frame ); + } + + if ( id >= MAX_NUM_INDICES ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Indice ID = %d exceeds the total number of indices: %d (frame %d) !\n", id, MAX_NUM_INDICES, frame ); + } +#endif + + if ( hBstr->last_ind == id ) + { + /* indice with the same name as the previous one */ + i = hBstr->next_ind; + } + else + { + /* new indice - find an empty slot in the list */ + i = id; + while ( hBstr->ind_list[i].nb_bits != -1 ) + { + i++; + } + } + +#ifdef DEBUGGING + if ( hBstr->ind_list[i].nb_bits > 0 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Indice ID = %d with value %d is trying to re-write an existing indice (frame %d) !\n", id, value, frame ); + } +#endif + + /* store the new indice in the list */ + hBstr->ind_list[i].value = value; + hBstr->ind_list[i].nb_bits = nb_bits; + + /* updates */ + hBstr->next_ind = i + 1; + hBstr->last_ind = id; + hBstr->nb_bits_tot += nb_bits; + + return error; +} + +/*-------------------------------------------------------------------* + * push_next_indice() + * + * Push a new indice into the buffer at the next position + *-------------------------------------------------------------------*/ + +#ifdef DEBUG_BS_READ_WRITE +ivas_error push_next_indice_( +#else +ivas_error push_next_indice( +#endif + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + uint16_t value, /* i : value of the quantized indice */ + int16_t nb_bits /* i : number of bits used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + +#ifdef DEBUG_BS_READ_WRITE + printf( "%s: %d: %d: %d\n", func, line, nb_bits, value ); +#endif +#ifdef DEBUGGING + if ( nb_bits < ( 32 - 1 ) && ( value >> nb_bits ) > 0 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Indice with value %d exceeds the range of %d bits (frame %d) !\n", value, nb_bits, frame ); + } + + if ( nb_bits > 16 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Indice with value %d is trying to allocate %d bits which exceeds 16 bits !\n", value, nb_bits ); + } + + if ( hBstr->next_ind >= MAX_NUM_INDICES ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Total number of indices exceeded: %d !\n", MAX_NUM_INDICES ); + } + + if ( hBstr->ind_list[hBstr->next_ind].nb_bits > 0 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Indice with value %d is trying to re-write an existing indice (frame %d) !\n", value, frame ); + } +#endif + + /* store the values in the list */ + hBstr->ind_list[hBstr->next_ind].value = value; + hBstr->ind_list[hBstr->next_ind].nb_bits = nb_bits; + hBstr->next_ind++; + + /* update the total number of bits already written */ + hBstr->nb_bits_tot += nb_bits; + + + return error; +} + + +/*-------------------------------------------------------------------* + * push_next_bits() + * Push a bit buffer into the buffer at the next position + *-------------------------------------------------------------------*/ + +#ifdef DEBUG_BS_READ_WRITE +void push_next_bits_( +#else +void push_next_bits( +#endif + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const uint16_t bits[], /* i : bit buffer to pack, sequence of single bits */ + const int16_t nb_bits /* i : number of bits to pack */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +) +{ + uint16_t code; + int16_t i, nb_bits_m15; + Indice *ptr; +#ifdef DEBUG_BS_READ_WRITE + printf( "%s: %d: %d\n", func, line, nb_bits ); +#endif + ptr = &hBstr->ind_list[hBstr->next_ind]; + nb_bits_m15 = nb_bits - 15; + + for ( i = 0; i < nb_bits_m15; i += 16 ) + { + code = (uint16_t) ( ( bits[i] << 15 ) | ( ( bits[i + 1] << 14 ) | ( ( bits[i + 2] << 13 ) | ( ( bits[i + 3] << 12 ) | ( ( bits[i + 4] << 11 ) | ( ( bits[i + 5] << 10 ) | ( ( bits[i + 6] << 9 ) | ( ( bits[i + 7] << 8 ) | ( ( bits[i + 8] << 7 ) | ( ( bits[i + 9] << 6 ) | ( ( bits[i + 10] << 5 ) | ( ( bits[i + 11] << 4 ) | ( ( bits[i + 12] << 3 ) | ( ( bits[i + 13] << 2 ) | ( ( bits[i + 14] << 1 ) | bits[i + 15] ) ) ) ) ) ) ) ) ) ) ) ) ) ) ); + + ptr->value = code; +#ifdef DEBUG_BS_READ_WRITE + printf( "code: %d\n", code ); +#endif + ptr->nb_bits = 16; + ++ptr; + } + for ( ; i < nb_bits; ++i ) + { + ptr->value = bits[i]; +#ifdef DEBUG_BS_READ_WRITE + printf( "value: %d\n", ptr->value ); +#endif + ptr->nb_bits = 1; + ++ptr; + } + hBstr->next_ind = (int16_t) ( ptr - hBstr->ind_list ); + hBstr->nb_bits_tot = hBstr->nb_bits_tot + nb_bits; + + return; +} + + +/*-------------------------------------------------------------------* + * get_next_indice() + * + * Get the next indice from the buffer + *-------------------------------------------------------------------*/ + +/*! r: value of the indice */ +#ifdef DEBUG_BS_READ_WRITE +uint16_t get_next_indice_( +#else +uint16_t get_next_indice( +#endif + Decoder_State *st, /* i/o: decoder state structure */ + int16_t nb_bits /* i : number of bits that were used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +) +{ + uint16_t value; + int16_t i; + int32_t nbits_total; + + assert( nb_bits <= 16 ); + + nbits_total = st->total_brate / FRAMES_PER_SEC; + /* detect corrupted bitstream */ + if ( st->next_bit_pos + nb_bits > nbits_total ) + { + st->BER_detect = 1; + return ( 0 ); + } + + value = 0; + for ( i = 0; i < nb_bits; i++ ) + { + value <<= 1; + value += st->bit_stream[st->next_bit_pos + i]; + } +#ifdef DEBUG_BS_READ_WRITE + printf( "%s: %d: %d: %d\n", func, line, nb_bits, value ); +#endif + + /* update the position in the bitstream */ + st->next_bit_pos += nb_bits; + + return value; +} + +/*-------------------------------------------------------------------* + * get_next_indice_1() + * + * Get the next 1-bit indice from the buffer + *-------------------------------------------------------------------*/ + +/*! r: value of the indice */ +uint16_t get_next_indice_1( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + int32_t nbits_total; + nbits_total = st->total_brate / FRAMES_PER_SEC; + /* detect corrupted bitstream */ + if ( ( st->next_bit_pos + 1 > nbits_total && st->codec_mode == MODE1 ) || + ( ( st->next_bit_pos + 1 > nbits_total + ( 2 * 8 ) ) && st->codec_mode == MODE2 ) /* add two zero bytes for arithmetic coder flush */ + ) + { + st->BER_detect = 1; + return ( 0 ); + } + + return st->bit_stream[st->next_bit_pos++]; +} + +/*-------------------------------------------------------------------* + * get_next_indice_tmp() + * + * update the total number of bits and the position in the bitstream + *-------------------------------------------------------------------*/ + +void get_next_indice_tmp( + Decoder_State *st, /* o : decoder state structure */ + int16_t nb_bits /* i : number of bits that were used to quantize the indice */ +) +{ + /* update the position in the bitstream */ + st->next_bit_pos += nb_bits; + + return; +} + +/*-------------------------------------------------------------------* + * get_indice() + * + * Get indice at specific position in the buffer + *-------------------------------------------------------------------*/ + +/*! r: value of the indice */ +#ifdef DEBUG_BS_READ_WRITE +uint16_t get_indice_( +#else +uint16_t get_indice( +#endif + Decoder_State *st, /* i/o: decoder state structure */ + int16_t pos, /* i : absolute position in the bitstream (update after the read) */ + int16_t nb_bits /* i : number of bits that were used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +) +{ + uint16_t value; + int16_t i; + + assert( nb_bits <= 16 ); + int32_t nbits_total; + nbits_total = st->total_brate / FRAMES_PER_SEC; + /* detect corrupted bitstream */ + if ( pos + nb_bits > nbits_total ) + { + st->BER_detect = 1; + return ( 0 ); + } + + value = 0; + for ( i = 0; i < nb_bits; i++ ) + { + value <<= 1; + value += st->bit_stream[pos + i]; + } +#ifdef DEBUG_BS_READ_WRITE + printf( "%s: %d: %d: %d\n", func, line, nb_bits, value ); +#endif + return value; +} + +/*-------------------------------------------------------------------* + * get_indice_st() + * + * Get indice at specific position in the buffer + *-------------------------------------------------------------------*/ + +/*! r: value of the indice */ +uint16_t get_indice_st( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t pos, /* i : absolute position in the bitstream */ + const int16_t nb_bits /* i : number of bits to quantize the indice */ +) +{ + uint16_t value; + int16_t i; + + assert( nb_bits <= 16 ); + + /* detect corrupted bitstream */ + if ( pos + nb_bits > element_brate / FRAMES_PER_SEC ) + { + st->BER_detect = 1; + return ( 0 ); + } + + value = 0; + for ( i = 0; i < nb_bits; i++ ) + { + value <<= 1; + value += st->bit_stream[pos + i]; + } + + return value; +} + +/*-------------------------------------------------------------------* + * get_indice_1() + * + * Get a 1-bit indice at specific position in the buffer + *-------------------------------------------------------------------*/ + +/*! r: value of the indice */ +uint16_t get_indice_1( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t pos /* i : absolute position in the bitstream (update after the read) */ +) +{ + int32_t nbits_total; + nbits_total = st->total_brate / FRAMES_PER_SEC; + /* detect corrupted bitstream */ + if ( pos + 1 > nbits_total ) + { + st->BER_detect = 1; + return ( 0 ); + } + + return st->bit_stream[pos]; +} + +#define WMC_TOOL_MAN + +/*-------------------------------------------------------------------* + * reset_indices_enc() + * + * Reset the buffer of encoder indices + *-------------------------------------------------------------------*/ + +void reset_indices_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t max_num_indices /* i : max number of indices */ +) +{ + int16_t i; + + hBstr->nb_bits_tot = 0; + hBstr->next_ind = 0; + hBstr->last_ind = -1; + + for ( i = 0; i < max_num_indices; i++ ) + { + hBstr->ind_list[i].nb_bits = -1; + } + + return; +} + +/*-------------------------------------------------------------------* + * reset_indices_dec() + * + * Reset the buffer of decoder indices + *-------------------------------------------------------------------*/ + +void reset_indices_dec( + Decoder_State *st ) +{ + st->next_bit_pos = 0; + + return; +} + +/*-------------------------------------------------------------------* + * write_indices_to_stream() + * + * writing forward or backward to a serial stream + *-------------------------------------------------------------------*/ + +static int16_t write_indices_to_stream( + Indice *ind_list_metadata, + uint16_t **pt_stream, + const int16_t inc, + const int16_t num_indices ) +{ + int16_t i, k; + int16_t value, nb_bits; + uint16_t mask; +#ifdef ENABLE_BITRATE_VERIFICATION + int16_t total_nb_bits = 0; +#endif + + for ( i = 0; i < num_indices; i++ ) + { + value = ind_list_metadata[i].value; + nb_bits = ind_list_metadata[i].nb_bits; + + if ( nb_bits > 0 ) + { +#ifdef ENABLE_BITRATE_VERIFICATION + total_nb_bits += nb_bits; +#endif + /* mask from MSB to LSB */ + mask = 1 << ( nb_bits - 1 ); + + /* write bit by bit */ + for ( k = 0; k < nb_bits; k++ ) + { + if ( value & mask ) + { + **pt_stream = 1; + *pt_stream += inc; + } + else + { + **pt_stream = 0; + *pt_stream += inc; + } + + mask >>= 1; + } + } +#ifdef DEBUGGING + else if ( nb_bits == 0 ) + { + /* fprintf( stderr, "Warning: %s: nb_bits == 0!\n", __func__ ); */ + } +#endif + } +#ifdef ENABLE_BITRATE_VERIFICATION + return total_nb_bits; +#else + return 0; +#endif +} + +/*-------------------------------------------------------------------* + * write_indices_element() + * + * Bitstream writing function of one element (one SCE or one CPE) + *-------------------------------------------------------------------*/ + +static ivas_error write_indices_element( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + uint16_t **pt_stream, /* i : pointer to bitstream buffer */ + const int16_t is_SCE, /* i : flag to distingusih SCE and CPE */ + const int16_t element_id /* i : id of the SCE or CPE */ +) +{ + int16_t ch; + Encoder_State **sts = NULL; + uint16_t *pt_stream_loc; + uint16_t *pt_stream_backup; + uint16_t *pt_stream_end; + int16_t nb_bits_tot_metadata; + Indice *ind_list_metadata; + int16_t n, n_channels; +#ifdef ENABLE_BITRATE_VERIFICATION + int16_t total_nb_bits; +#endif + ivas_error error; + + error = IVAS_ERR_OK; + + ind_list_metadata = NULL; + + if ( st_ivas->hEncoderConfig->ivas_format == MONO_FORMAT ) + { + sts = st_ivas->hSCE[0]->hCoreCoder; + nb_bits_tot_metadata = 0; + } + else + { + nb_bits_tot_metadata = 0; + if ( is_SCE && st_ivas->hSCE[element_id] != NULL ) + { + sts = st_ivas->hSCE[element_id]->hCoreCoder; + + if ( st_ivas->hSCE[element_id]->hMetaData != NULL ) + { + nb_bits_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_bits_tot; + ind_list_metadata = st_ivas->hSCE[element_id]->hMetaData->ind_list; + } + } + else if ( !is_SCE && st_ivas->hCPE[element_id] != NULL ) + { + sts = st_ivas->hCPE[element_id]->hCoreCoder; + + if ( st_ivas->hCPE[element_id]->hMetaData != NULL ) + { + nb_bits_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_bits_tot; + ind_list_metadata = st_ivas->hCPE[element_id]->hMetaData->ind_list; + } + } +#ifdef DEBUGGING + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Bitstream writing error in frame %d. Exiting!\n", frame ); + } +#endif + } + + n_channels = 1; + if ( sts[0]->element_mode > IVAS_CPE_DFT ) + { + n_channels = CPE_CHANNELS; + } + + /*----------------------------------------------------------------* + * Bitstream packing (conversion of individual indices into a serial stream) + *----------------------------------------------------------------*/ + + pt_stream_loc = *pt_stream; + pt_stream_end = pt_stream_loc; + + for ( n = 0; n < n_channels; n++ ) + { + /* write the metadata buffer */ + if ( n == 0 && nb_bits_tot_metadata != 0 ) + { + pt_stream_backup = pt_stream_loc; + + for ( ch = 0; ch < n_channels; ch++ ) + { + pt_stream_loc += sts[ch]->hBstr->nb_bits_tot; + } + pt_stream_loc += nb_bits_tot_metadata - 1; + pt_stream_end = pt_stream_loc + 1; + +#ifdef ENABLE_BITRATE_VERIFICATION + total_nb_bits = +#endif + write_indices_to_stream( ind_list_metadata, &pt_stream_loc, -1, MAX_BITS_METADATA ); + +#ifdef ENABLE_BITRATE_VERIFICATION + if ( total_nb_bits != nb_bits_tot_metadata ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Bitstream write size mismatch! Written bits: %d vs. Reference bits: %d\n", total_nb_bits, nb_bits_tot_metadata ); + } +#endif + /* restore previous pointer position */ + pt_stream_loc = pt_stream_backup; + } + + /* TODO implemented only for MCT for now */ + if ( ( st_ivas->hEncoderConfig->ivas_format == MC_FORMAT ) && ( st_ivas->mc_mode == MC_MODE_MCT ) && ( element_id * CPE_CHANNELS + n == LFE_CHANNEL ) ) + { + continue; + } +#ifdef ENABLE_BITRATE_VERIFICATION + total_nb_bits = +#endif + write_indices_to_stream( sts[n]->hBstr->ind_list, &pt_stream_loc, 1, MAX_NUM_INDICES ); + +#ifdef ENABLE_BITRATE_VERIFICATION + if ( total_nb_bits != sts[n]->hBstr->nb_bits_tot ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Bitstream write size mismatch! Written bits: %d vs. Reference bits: %d\n", total_nb_bits, sts[n]->hBstr->nb_bits_tot ); + } +#endif + if ( pt_stream_loc > pt_stream_end ) + { + pt_stream_end = pt_stream_loc; + } + } + + /*----------------------------------------------------------------* + * Clearing of indices + * Reset index pointers + *----------------------------------------------------------------*/ + + if ( is_SCE ) /* EVS and SCE */ + { + if ( st_ivas->hSCE[element_id]->hMetaData != NULL ) + { + reset_indices_enc( st_ivas->hSCE[element_id]->hMetaData, MAX_BITS_METADATA ); + } + + reset_indices_enc( sts[0]->hBstr, MAX_NUM_INDICES ); + } + else + { + if ( st_ivas->hCPE[element_id]->hMetaData != NULL ) + { + reset_indices_enc( st_ivas->hCPE[element_id]->hMetaData, MAX_BITS_METADATA ); + } + + for ( n = 0; n < n_channels; n++ ) + { + if ( ( st_ivas->hEncoderConfig->ivas_format == MC_FORMAT ) && ( st_ivas->mc_mode == MC_MODE_MCT ) && ( element_id * CPE_CHANNELS + n == LFE_CHANNEL ) ) + { + continue; + } + reset_indices_enc( sts[n]->hBstr, MAX_NUM_INDICES ); + } + } + + /* update pointer */ + *pt_stream = pt_stream_end; + + return error; +} + +/*-------------------------------------------------------------------* + * write_indices_ivas() + * + * Write the buffer of indices to a serial bitstream buffer, + * each bit represented as a uint16_t of value 0 or 1 + *-------------------------------------------------------------------*/ + +ivas_error write_indices_ivas( + Encoder_Struct *st_ivas, /* i/o: encoder state structure */ + uint16_t *bit_stream, /* i/o: output bitstream */ + uint16_t *num_bits /* i : number of indices written to output */ +) +{ + int16_t i, n; + uint16_t *pt_stream; +#ifdef ENABLE_BITRATE_VERIFICATION + Encoder_State **sts; + int32_t ivas_total_brate; + int16_t ch; +#endif + ivas_error error; + + error = IVAS_ERR_OK; + + pt_stream = bit_stream; + for ( i = 0; i < MAX_BITS_PER_FRAME; ++i ) + { + bit_stream[i] = 0; + } + +#ifdef ENABLE_BITRATE_VERIFICATION + i = 0; + + for ( n = 0; n < st_ivas->nSCE; n++ ) + { + sts = st_ivas->hSCE[n]->hCoreCoder; + i += sts[0]->hBstr->nb_bits_tot; + if ( st_ivas->hSCE[n]->hMetaData != NULL ) + { + i += st_ivas->hSCE[n]->hMetaData->nb_bits_tot; + } + } + + for ( n = 0; n < st_ivas->nCPE; n++ ) + { + sts = st_ivas->hCPE[n]->hCoreCoder; + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + i += sts[ch]->hBstr->nb_bits_tot; + } + if ( st_ivas->hCPE[n]->hMetaData != NULL ) + { + i += st_ivas->hCPE[n]->hMetaData->nb_bits_tot; + } + } + + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + if ( st_ivas->hEncoderConfig->Opt_SC_VBR ) + { + ivas_total_brate = st_ivas->hSCE[0]->hCoreCoder[0]->total_brate; + } + + if ( i * FRAMES_PER_SEC != ivas_total_brate && i >= ACELP_11k60 / FRAMES_PER_SEC ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Bitstream write size mismatch! Actual bitrate: %ld vs. Reference bitrate: %d\n", i * 50L, ivas_total_brate ); + } +#endif + /*-----------------------------------------------------------------* + * Encode Payload + *-----------------------------------------------------------------*/ + + for ( n = 0; n < st_ivas->nSCE; n++ ) + { + write_indices_element( st_ivas, &pt_stream, 1, n ); + } + + for ( n = 0; n < st_ivas->nCPE; n++ ) + { + write_indices_element( st_ivas, &pt_stream, 0, n ); + } + + *num_bits = (uint16_t) ( pt_stream - bit_stream ); + + return error; +} + + +/*-------------------------------------------------------------------* + * indices_to_serial_generic() + * + * pack indices into serialized payload format + *-------------------------------------------------------------------*/ + +void indices_to_serial_generic( + const Indice *ind_list, /* i : indices list */ + const Word16 num_indices, /* i : number of indices to write */ + UWord8 *pFrame, /* o : byte array with bit packet and byte aligned coded speech data */ + Word16 *pFrame_size /* i/o: number of bits in the binary encoded access unit [bits] */ +) +{ + Word16 i, k, j; + Word32 mask; + UWord8 omask; + UWord8 *pt_pFrame = pFrame; + Word16 nb_bits_tot = 0; + + omask = ( 0x80 >> ( *pFrame_size & 0x7 ) ); + pt_pFrame += *pFrame_size >> 3; + + /*----------------------------------------------------------------* + * Bitstream packing (conversion of individual indices into a serial stream) + *----------------------------------------------------------------*/ + + j = 0; + for ( i = 0; i < num_indices; i++ ) + { + if ( ind_list[i].nb_bits > 0 ) + { + /* mask from MSB to LSB */ + mask = 1 << ( ind_list[i].nb_bits - 1 ); + + /* write bit by bit */ + for ( k = 0; k < ind_list[i].nb_bits; k++ ) + { + pack_bit( ind_list[i].value & mask, &pt_pFrame, &omask ); + j++; + mask >>= 1; + } + nb_bits_tot += ind_list[i].nb_bits; + } + } + + *pFrame_size += nb_bits_tot; + + return; +} + +/*---------------------------------------------------------------------* + * convertSerialToBytestream( ) + * + * convert 16-bit short serial streams with 0x0000 and 0x0001 to a bytstream + *---------------------------------------------------------------------*/ + +void convertSerialToBytestream( + const uint16_t *const serial, /* i : input serial bitstream with values 0 and 1 */ + const uint16_t num_bits, /* i : number of bits in the input bitstream */ + uint8_t *const bytestream /* o : output compact bitstream (bytestream) */ +) +{ + uint32_t i; + uint8_t bit, bitinbyte; + + for ( i = 0; i < num_bits; ++i ) + { + bit = ( serial[i] == 0x0001 ) ? 1 : 0; + bitinbyte = bit << ( 7 - ( i & 0x7 ) ); + if ( !( i & 0x7 ) ) + { + bytestream[i >> 3] = 0; + } + bytestream[i >> 3] |= bitinbyte; + } + + return; +} + +/*---------------------------------------------------------------------* + * convertBytestreamToSerial( ) + * + * convert bytestream to 16-bit short serial streams with 0x0000 and 0x0001 + *---------------------------------------------------------------------*/ + +void convertBytestreamToSerial( + const uint8_t *const bytestream, /* i : input compact bitstream (bytestream) */ + const uint16_t num_bits, /* i : number of bits in the input bitstream */ + uint16_t *const serial /* o : output serial bitstream with values 0 and 1 */ +) +{ + uint32_t i; + + for ( i = 0; i < num_bits; ++i ) + { + serial[i] = ( bytestream[( i >> 3 )] >> ( 7 - ( i & 7 ) ) ) & 0x1; + } +} + +/*-------------------------------------------------------------------* + * decoder_selectCodec() + * + * + *-------------------------------------------------------------------*/ + +static void decoder_selectCodec( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bit0 /* i : first bit */ +) +{ + /* set the AMR-WB IO flag */ + if ( rate2AMRWB_IOmode( total_brate ) != -1 ) + { + st->Opt_AMR_WB = 1; + } + else if ( total_brate != FRAME_NO_DATA ) + { + st->Opt_AMR_WB = 0; + } + + if ( st->Opt_AMR_WB ) + { + st->codec_mode = MODE1; + } + else + { + st->codec_mode = get_codec_mode( total_brate ); + + if ( st->codec_mode == -1 ) + { + switch ( total_brate ) + { + case 0: + st->codec_mode = st->last_codec_mode; + break; + case 2400: + st->codec_mode = st->last_codec_mode; + break; + case 2800: + st->codec_mode = MODE1; + break; + default: /* validate that total_brate (derived from RTP packet or a file header) is one of the defined bitrates */ +#ifdef DEBUGGING + IVAS_ERROR( IVAS_ERR_INTERNAL, "Error illegal total bitrate (= %d) \n", total_brate ); +#endif + st->codec_mode = st->last_codec_mode; + st->bfi = 1; + break; + } + } + } + + if ( st->ini_frame == 0 ) + { + if ( st->codec_mode == -1 ) + { + st->codec_mode = MODE1; + } + st->last_codec_mode = st->codec_mode; + } + + /* set SID/CNG type */ + if ( total_brate == SID_2k40 ) + { + if ( bit0 == 0 ) + { + st->cng_type = LP_CNG; + + /* force MODE1 when selecting LP_CNG */ + st->codec_mode = MODE1; + } + else if ( bit0 == 1 ) + { + st->cng_type = FD_CNG; + if ( st->last_codec_mode == MODE2 && st->last_total_brate == ACELP_13k20 ) + { + st->codec_mode = MODE1; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * dec_prm_core() + * + * + *-------------------------------------------------------------------*/ + +static void dec_prm_core( + Decoder_State *st ) +{ + int16_t n, frame_size_index = -1; + + st->core = -1; + + if ( st->total_brate == FRAME_NO_DATA ) + { + st->m_frame_type = ZERO_FRAME; + } + else if ( st->total_brate == SID_2k40 ) + { + st->m_frame_type = SID_FRAME; + } + else + { + st->m_frame_type = ACTIVE_FRAME; + for ( n = 0; n < FRAME_SIZE_NB; ++n ) + { + if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) + { + frame_size_index = n; + break; + } + } +#ifdef DEBUGGING + if ( n == FRAME_SIZE_NB ) + { + assert( !"Bitrate not supported: not part of EVS" ); + } +#endif + + /* Get audio bandwidth info */ + st->bwidth = get_next_indice( st, FrameSizeConfig[frame_size_index].bandwidth_bits ); + st->bwidth += FrameSizeConfig[frame_size_index].bandwidth_min; + if ( st->bwidth > FB ) + { + st->bwidth = FB; + st->BER_detect = 1; + } + + if ( st->bwidth > SWB && st->total_brate < ACELP_16k40 ) + { + st->bwidth = SWB; + st->BER_detect = 1; + } + /* Skip reserved bit */ + get_next_indice_tmp( st, FrameSizeConfig[frame_size_index].reserved_bits ); + + if ( get_next_indice_1( st ) ) /* TCX */ + { + if ( get_next_indice_1( st ) ) + { + st->core = HQ_CORE; + } + else + { + st->core = TCX_20_CORE; + } + } + else /* ACELP */ + { + st->core = ACELP_CORE; + } + } + + return; +} + +/*-----------------------------------------------------------------* + * decision_matrix_core_dec() + * + * Read core signalling bits from the bitstream + * Set st->core, and st->bwidth if signalled together with the core. + *-----------------------------------------------------------------*/ + +static void decision_matrix_core_dec( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + int16_t start_idx; + int32_t ind; + int16_t nBits; + + assert( st->bfi != 1 ); + + st->core = -1; + st->bwidth = -1; + + if ( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) + { + st->core = ACELP_CORE; + } + /* SC-VBR */ + else if ( st->total_brate == PPP_NELP_2k80 ) + { + st->core = ACELP_CORE; + return; + } + + /*---------------------------------------------------------------------* + * ACELP/HQ core selection + *---------------------------------------------------------------------*/ + + if ( st->total_brate < ACELP_24k40 ) + { + st->core = ACELP_CORE; + } + else if ( st->total_brate >= ACELP_24k40 && st->total_brate <= ACELP_64k ) + { + /* read the ACELP/HQ core selection bit */ + st->core = get_next_indice( st, 1 ) * HQ_CORE; + } + else + { + st->core = HQ_CORE; + } + + /*-----------------------------------------------------------------* + * Read ACELP signalling bits from the bitstream + *-----------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + start_idx = 0; + while ( acelp_sig_tbl[start_idx] != st->total_brate ) + { + start_idx++; +#ifdef DEBUGGING + assert( ( start_idx < 194 ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" ); +#endif + } + + /* skip the bitrate */ + start_idx += 1; + + /* retrieve the number of bits */ + nBits = (int16_t) acelp_sig_tbl[start_idx++]; + + /* retrieve the signalling indice */ + ind = acelp_sig_tbl[start_idx + get_next_indice( st, nBits )]; + st->bwidth = ( ind >> 3 ) & 0x7; + + /* convert signalling indice into signalling information */ + if ( ( ind & 0x7 ) == LR_MDCT ) + { + st->core = HQ_CORE; + } + } + + /*-----------------------------------------------------------------* + * Read HQ signalling bits from the bitstream + * Set HQ core type + *-----------------------------------------------------------------*/ + + if ( st->core == HQ_CORE ) + { + /* read the HQ/TCX core switching flag */ + if ( get_next_indice( st, 1 ) ) + { + st->core = TCX_20_CORE; + } + + /* For TCX: read/set band-width (needed for different I/O sampling rate support) */ + if ( st->core == TCX_20_CORE && st->total_brate > ACELP_16k40 ) + { + ind = get_next_indice( st, 2 ); + + if ( ind == 0 ) + { + st->bwidth = NB; + } + else if ( ind == 1 ) + { + st->bwidth = WB; + } + else if ( ind == 2 ) + { + st->bwidth = SWB; + } + else + { + st->bwidth = FB; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * mdct_switching_dec() + * + * Set up MDCT core switching if indicated in the bitstream + *-------------------------------------------------------------------*/ + +void mdct_switching_dec( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + if ( !st->bfi ) + { + + if ( st->Opt_AMR_WB ) + { + return; + } + + + if ( st->total_brate == ACELP_13k20 || st->total_brate == ACELP_32k ) + { + st->mdct_sw_enable = MODE1; + } + else if ( ACELP_16k40 <= st->total_brate && st->total_brate <= ACELP_24k40 ) + { + st->mdct_sw_enable = MODE2; + } + + if ( st->codec_mode == MODE1 && st->mdct_sw_enable == MODE1 ) + { + /* Read ahead core signaling */ + int16_t next_bit_pos_save = st->next_bit_pos; + int16_t core_save = st->core; + int16_t bwidth_save = st->bwidth; + + decision_matrix_core_dec( st ); /* sets st->core */ + + if ( st->core == TCX_20_CORE ) + { + /* Trigger TCX */ + st->codec_mode = MODE2; + st->mdct_sw = MODE1; + } + else + { + /* Rewind bitstream */ + st->next_bit_pos = next_bit_pos_save; + if ( st->bfi ) + { + st->core = core_save; + st->bwidth = bwidth_save; + } + } + } + else if ( st->codec_mode == MODE2 && st->mdct_sw_enable == MODE2 ) + { + /* Read ahead core signaling */ + int16_t next_bit_pos_save = st->next_bit_pos; + int16_t core_save = st->core; + int16_t bwidth_save = st->bwidth; + + dec_prm_core( st ); /* sets st->core */ + + if ( st->core == HQ_CORE ) + { + /* Trigger HQ_CORE */ + st->codec_mode = MODE1; + st->mdct_sw = MODE2; + } + else + { + /* Rewind bitstream */ + st->next_bit_pos = next_bit_pos_save; + if ( st->bfi ) + { + st->core = core_save; + } + /* always reset bwidth, to not interfere with BER logic */ + st->bwidth = bwidth_save; + } + } + } + + return; +} + +#ifdef DEBUGGING +#ifdef ALLOW_BYTE_EP +/*-------------------------------------------------------------------* + * ep_type_check() + * + * + *-------------------------------------------------------------------*/ +static Word16 ep_type_check() +{ + static int16_t ep_type = -1; /* 0=G192 (0x6b21 or 0x6b20), 1=byte(0x21 or 0x20) , + 2=ascii "0xa30" or "0xa31" , 3=short( 0x0000 or 0x0001) */ + int16_t tmp; + + if ( ep_type < 0 ) + { + tmp = 0; + + if ( fread( &tmp, sizeof( int16_t ), 1, FEC_pattern ) != 1 ) + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading first two bytes from the FEC pattern file !" ); + } + else + { + switch ( tmp ) + { + case G192_SYNC_BAD_FRAME: + case G192_SYNC_GOOD_FRAME: + ep_type = 0; /* G192 */ + break; + case 0x2020: /* BAD,BAD */ + case 0x2021: /* BAD,SYNC */ + case 0x2120: /* SYNC,BAD */ + case 0x2121: /* SYNC,SYNC */ + ep_type = 1; /* byte */ + break; + case 0xa31: + case 0xa30: + ep_type = 2; /* ascii */ + break; + case 0x0000: + case 0x0001: + ep_type = 3; /* short */ + break; + default: + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading the FEC pattern file :: illegal format of the first two byte word=0x%02x ", tmp ); + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Allowed formats are G192(0x6b20,0x6b21), byte(0x20,0x21), ASCII(\"0\n\" \"1\n\") or short(0x0000, 0x0001) \n" ); + break; + } + + fseek( FEC_pattern, 0L, SEEK_SET ); /* rewind */ + } + } + return ep_type; +} + +/*-------------------------------------------------------------------* + * ep_flag_check_apply() + * + * + *-------------------------------------------------------------------*/ + +static Word16 ep_flag_check_apply( + Word16 ep_type, + Word16 tmp, + Word16 bfi_so_far ) +{ + if ( ep_type == 0 && ( tmp == G192_SYNC_GOOD_FRAME || tmp == G192_SYNC_BAD_FRAME ) ) + { /* g192 validity check */ + if ( tmp == G192_SYNC_BAD_FRAME ) + { + return 1; + } + } + else if ( ep_type == 1 && ( tmp == 0x0021 || tmp == 0x0020 ) ) + { /* byte validity check*/ + if ( tmp == 0x0020 ) + { + return 1; + } + } + else if ( ep_type == 2 && ( tmp == 0x0a31 || tmp == 0x0a30 ) ) + { /* ascii validity check */ + if ( tmp == 0x0a31 ) + { + return 1; + } + } + else if ( ep_type == 3 && ( tmp == 0 || tmp == 1 ) ) + { /* short validity check */ + if ( tmp == 0x0001 ) + { + return 1; + } + } + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading the FEC pattern flag 0x%02x from the type %d FEC pattern file , frame=%d", tmp, ep_type, frame ); + } + + return bfi_so_far; /* no change */ +} + +/*-------------------------------------------------------------------* + * read_error_flag ( ) + * + * + *-------------------------------------------------------------------*/ + +static Word16 read_error_flag( + Word16 bfi_so_far ) +{ + Word16 tmp; + Word16 ep_type; + Word16 wrap; + wrap = 0; + + ep_type = ep_type_check(); + tmp = 0; + + if ( ( ep_type == 1 ) ? ( fread( &tmp, sizeof( int8_t ), 1, FEC_pattern ) != 1 ) /* read byte directly stored in short variable */ + : ( fread( &tmp, sizeof( int16_t ), 1, FEC_pattern ) != 1 ) ) + { + if ( feof( FEC_pattern ) != 0 ) + { + wrap = 1; /* wrap event flag */ + fseek( FEC_pattern, 0L, SEEK_SET ); +#ifndef WRAP_AS_EIDXOR + /* good frame injected in wrap event */ + switch ( ep_type ) + { + case 0: + tmp = SYNC_GOOD_FRAME; + break; + case 1: + tmp = 0x21; + break; + case 2: + tmp = 0x0a30; + break; + default: + tmp = 0; + break; /* 4: short */ + } +#endif + } + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading the FEC pattern file !" ); + } + } +#ifdef WRAP_AS_EIDXOR + if ( wrap != 0 ) /* wrap file and read again, try to get the next flag , */ + { + tmp = 0; /* needed for byte re-reading */ + if ( ( ep_type == 1 ) ? ( fread( &tmp, sizeof( int8_t ), 1, FEC_pattern ) != 1 ) /* read byte directly stored in short variable */ + : ( fread( &tmp, sizeof( int16_t ), 1, FEC_pattern ) != 1 ) ) + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading the wrapped FEC pattern file !" ); + } + } + + return ep_flag_check_apply( ep_type, tmp, bfi_so_far ); +#else + if ( wrap == 0 ) + { + return ep_flag_check_apply( ep_type, tmp, bfi_so_far ); + } + else + { + return bfi_so_far; + } +#endif +} +#endif +#endif + + +#ifdef DEBUGGING +/*-------------------------------------------------------------------* + * file_read_FECpattern() + * + * Simulate packet losses by reading FEC pattern from external file + *-------------------------------------------------------------------*/ + +static ivas_error file_read_FECpattern( + int16_t *bfi ) +{ + ivas_error error; + + error = IVAS_ERR_OK; + *bfi = 0; + + /* FEC pattern file provided */ + if ( FEC_pattern != NULL ) + { + int16_t tmp = 0; + if ( fread( &tmp, sizeof( int16_t ), 1, FEC_pattern ) != 1 ) + { + if ( feof( FEC_pattern ) != 0 ) + { +#ifdef WRAP_AS_EIDXOR + fseek( FEC_pattern, 0L, SEEK_SET ); + fread( &tmp, sizeof( int16_t ), 1, FEC_pattern ); +#else + tmp = 0; + fseek( FEC_pattern, 0L, SEEK_SET ); +#endif + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading the FEC pattern file !" ); + } + } + + if ( tmp == 2609 || tmp == 1 || tmp == (uint16_t) 0x6B20 /* == G192_SYNC_BAD_FRAME */ ) + { + *bfi = 1; + } + else + { + *bfi = 0; + } + } + + return error; +} +#endif + + +/*-------------------------------------------------------------------* + * reset_elements() + * + * Simulate packet losses by reading FEC pattern from external file + *-------------------------------------------------------------------*/ + +Decoder_State **reset_elements( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t k, n; + Decoder_State **sts = NULL; /* to avoid compilation warning */ + + for ( k = 0; k < st_ivas->nSCE; k++ ) + { + sts = st_ivas->hSCE[k]->hCoreCoder; + + sts[0]->bfi = 0; + sts[0]->BER_detect = 0; + sts[0]->mdct_sw_enable = 0; + sts[0]->mdct_sw = 0; + + reset_indices_dec( sts[0] ); + } + + for ( k = 0; k < st_ivas->nCPE; k++ ) + { + sts = st_ivas->hCPE[k]->hCoreCoder; + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + sts[n]->bfi = 0; + sts[n]->BER_detect = 0; + sts[n]->mdct_sw_enable = 0; + sts[n]->mdct_sw = 0; + + reset_indices_dec( sts[n] ); + } + } + + return sts; /* return last decoder state */ +} + + +/*-------------------------------------------------------------------* + * ivas_set_bitstream_pointers() + * + * Set bitstream pointers for every SCE/CPE Core-Decoder + *-------------------------------------------------------------------*/ + +void ivas_set_bitstream_pointers( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t k, num_bits; + Decoder_State **sts; + + num_bits = 0; + + /* set bitstream pointers for SCEs */ + for ( k = 0; k < st_ivas->nSCE; k++ ) + { + sts = st_ivas->hSCE[k]->hCoreCoder; + sts[0]->bit_stream = st_ivas->bit_stream + num_bits; + num_bits += (int16_t) ( st_ivas->hSCE[k]->element_brate / FRAMES_PER_SEC ); + } + + /* set bitstream pointers for CPEs */ + for ( k = 0; k < st_ivas->nCPE; k++ ) + { + sts = st_ivas->hCPE[k]->hCoreCoder; + sts[0]->bit_stream = st_ivas->bit_stream + num_bits; + num_bits += (int16_t) ( st_ivas->hCPE[k]->element_brate / FRAMES_PER_SEC ); + } + + return; +} + + +#ifdef DEBUGGING +/*-------------------------------------------------------------------* + * preview_indices() + * + * Read indices from serial bitstream to the buffer to print out info + * about technologies. + * + * !!The read parmeters are temporary only and not used for decoding!! + *-------------------------------------------------------------------*/ + +ivas_error preview_indices( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + uint16_t bit_stream[], /* i : bitstream buffer */ + UWord16 num_bits /* i : number of bits in bitstream */ +) +{ + int16_t k, idx; + int32_t total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + /* convert the frame length to total bitrate */ + total_brate = (int32_t) ( num_bits * FRAMES_PER_SEC ); + + if ( st_ivas->ivas_format != MONO_FORMAT && is_DTXrate( total_brate ) == 0 ) + { + /* read IVAS format */ + k = 0; + if ( bit_stream[0] == 1 ) + { + k = 1; + } + k <<= 1; + if ( bit_stream[1] == 1 ) + { + k += 1; + } + + switch ( k ) + { + case 0: + st_ivas->ivas_format = STEREO_FORMAT; + break; + case 1: + st_ivas->ivas_format = MC_FORMAT; + break; + case 2: + st_ivas->ivas_format = ISM_FORMAT; + break; + case 3: + if ( bit_stream[2] == 0 ) + { + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->sba_mode = ivas_sba_mode_select( total_brate ); + } + else + { + st_ivas->ivas_format = MASA_FORMAT; + } + break; + } + } + else if ( total_brate == IVAS_SID_4k4 ) + { + /* read SID format */ + st_ivas->sid_format = 0; + if ( bit_stream[0] == 1 ) + { + st_ivas->sid_format += 4; + } + if ( bit_stream[1] == 1 ) + { + st_ivas->sid_format += 2; + } + if ( bit_stream[2] == 1 ) + { + st_ivas->sid_format += 1; + } + + switch ( st_ivas->sid_format ) + { + case SID_DFT_STEREO: + st_ivas->element_mode_init = IVAS_CPE_DFT; + st_ivas->ivas_format = STEREO_FORMAT; + break; + case SID_MDCT_STEREO: + st_ivas->element_mode_init = IVAS_CPE_MDCT; + st_ivas->ivas_format = STEREO_FORMAT; + break; + case SID_ISM: + st_ivas->ivas_format = ISM_FORMAT; + /* temporary hack to make mode signalling work with the current 1-object ISM DTX: read padding bits */ + /* Todo: how to apply this here? maybe pt_stream += ... would work? */ + /* st->bit_stream += ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; */ + break; + case SID_MULTICHANNEL: + st_ivas->ivas_format = MC_FORMAT; + break; + case SID_SBA_1TC: + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->element_mode_init = IVAS_SCE; + break; + case SID_SBA_2TC: + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->element_mode_init = IVAS_CPE_MDCT; + break; + case SID_MASA_1TC: + st_ivas->ivas_format = MASA_FORMAT; + st_ivas->element_mode_init = IVAS_SCE; + break; + case SID_MASA_2TC: + st_ivas->ivas_format = MASA_FORMAT; + if ( bit_stream[total_brate / FRAMES_PER_SEC - 1] == 1 ) + { + st_ivas->element_mode_init = IVAS_CPE_MDCT; + } + else + { + st_ivas->element_mode_init = IVAS_CPE_DFT; + } + break; + default: + /* This should actually be impossible, since only 3 bits are read, so if this happens something is broken */ + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Invalid value %c found in SID format field.", st_ivas->sid_format ); + } + } + else if ( total_brate == IVAS_SID_5k ) + { + /* SBA SID frame */ + st_ivas->sid_format = SID_SBA_1TC; + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->sba_mode = SBA_MODE_SPAR; + st_ivas->element_mode_init = IVAS_SCE; + } + + /* only read element mode from active frames */ + if ( is_DTXrate( total_brate ) == 0 ) + { + /* read element_mode - needed in init_decoder() */ + if ( st_ivas->ivas_format == STEREO_FORMAT || st_ivas->ivas_format == MC_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) + { + if ( st_ivas->ivas_format == MASA_FORMAT ) + { + /* read number of MASA transport channels */ + if ( bit_stream[num_bits - 1] == 1 ) + { + st_ivas->nchan_transport = 2; + } + else + { + st_ivas->nchan_transport = 1; + } + } + + if ( st_ivas->ivas_format == MC_FORMAT ) + { + /* read MC configuration */ + idx = 0; + for ( k = 0; k < MC_LS_SETUP_BITS; k++ ) + { + if ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS + k] == 1 ) + { + idx += ( 1 << ( MC_LS_SETUP_BITS - 1 - k ) ); + } + } + st_ivas->transport_config = ivas_mc_map_ls_setup_to_output_config( (MC_LS_SETUP) idx ); + } + + if ( !( st_ivas->ivas_format == MASA_FORMAT && st_ivas->nchan_transport == 1 ) && st_ivas->ivas_format != MC_FORMAT ) + { + /* read stereo technology info */ + k = IVAS_FORMAT_SIGNALING_NBITS; + if ( st_ivas->ivas_format == MASA_FORMAT ) + { + k = IVAS_FORMAT_SIGNALING_NBITS_SBA; + } + + if ( total_brate < MIN_BRATE_MDCT_STEREO ) + { + /* 1 bit */ + if ( bit_stream[k] == 1 ) + { + st_ivas->element_mode_init = 1 + IVAS_CPE_DFT; + } + else + { + st_ivas->element_mode_init = 0 + IVAS_CPE_DFT; + } + } + else + { + st_ivas->element_mode_init = IVAS_CPE_MDCT; + } + } + } + else if ( st_ivas->ivas_format == ISM_FORMAT ) + { + /* read number of objects from the bitstream */ + st_ivas->nchan_transport = 1; + + if ( total_brate != SID_2k40 && total_brate != FRAME_NO_DATA ) + { + k = (int16_t) ( ( total_brate / FRAMES_PER_SEC ) - 1 ); + while ( bit_stream[k] == 1 && st_ivas->hDecoderConfig->nchan_out < MAX_NUM_OBJECTS ) + { + st_ivas->nchan_transport++; + k--; + } + } + + st_ivas->transport_config = AUDIO_CONFIG_EXTERNAL + st_ivas->nchan_transport; + + st_ivas->ism_mode = ivas_ism_mode_select( st_ivas->nchan_transport, total_brate ); + st_ivas->nSCE = st_ivas->nchan_transport; + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + if ( ( st_ivas->sba_mode != SBA_MODE_SPAR ) || ( ( st_ivas->sba_mode == SBA_MODE_SPAR ) && ( total_brate >= IVAS_256k ) ) ) + { + /* Read SBA planar flag and SBA order */ + st_ivas->sba_planar = ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA] == 1 ); + st_ivas->sba_order = ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA + 2] == 1 ); + st_ivas->sba_order += 2 * ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA + 1] == 1 ); + } + else + { + st_ivas->sba_planar = 0; + st_ivas->sba_order = 1; + } + + ivas_sba_config( total_brate, st_ivas->sba_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &( st_ivas->nSCE ), &( st_ivas->nCPE ), &( st_ivas->element_mode_init ), st_ivas->sba_mode ); + } + } + + st_ivas->hDecoderConfig->ivas_total_brate = total_brate; + + return error; +} +#endif + + +/*-------------------------------------------------------------------* + * read_indices() + * + * Read indices from an ITU-T G.192 bitstream to the buffer + * Simulate packet losses by inserting frame erasures + *-------------------------------------------------------------------*/ + +/*! r: 1 = reading OK, 0 = problem */ +ivas_error read_indices( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + uint16_t bit_stream[], /* i : bitstream buffer */ + UWord16 num_bits, /* i : number of bits in bitstream */ + int16_t *prev_ft_speech, + int16_t *CNG, + int16_t bfi /* i : bad frame indicator */ +) +{ + int16_t k; + Decoder_State **sts; + int32_t total_brate = 0; + int16_t curr_ft_good_sp, curr_ft_bad_sp; + int16_t g192_sid_first, sid_upd_bad, sid_update; + int16_t speech_bad, speech_lost; + int16_t n; + ivas_error error; + + error = IVAS_ERR_OK; + + st_ivas->BER_detect = 0; + sts = reset_elements( st_ivas ); + +#ifdef DEBUGGING + file_read_FECpattern( &st_ivas->bfi ); + st_ivas->bfi |= bfi; + + if ( bfi ) + { + for ( k = 0; k < num_bits; k++ ) + { + bit_stream[k] = 0; + } + } +#else + st_ivas->bfi = bfi; +#endif + + /* convert the frame length to total bitrate */ + total_brate = (int32_t) ( num_bits * FRAMES_PER_SEC ); + + /* verify that a valid num bits value is present in the G.192 file */ + /* only AMRWB, EVS or IVAS bitrates or 0(NO DATA) are allowed in G.192 file frame reading */ + if ( st_ivas->ivas_format != MONO_FORMAT ) + { + k = 0; + while ( k < SIZE_IVAS_BRATE_TBL && total_brate != ivas_brate_tbl[k] ) + { + k++; + } + + if ( st_ivas->ivas_format == ISM_FORMAT && ( k < SIZE_IVAS_BRATE_TBL || total_brate <= SID_2k40 ) ) + { + st_ivas->element_mode_init = IVAS_SCE; + } + else if ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) && ( total_brate <= SID_2k40 ) ) + { + st_ivas->element_mode_init = IVAS_SCE; + } + else if ( k == SIZE_IVAS_BRATE_TBL ) + { + /*temp change for spar DTX*/ + if ( total_brate == IVAS_SID_5k ) + { + st_ivas->element_mode_init = -1; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) in the G.192 frame ! Exiting ! \n", total_brate ); + } + } + else + { + st_ivas->element_mode_init = -1; + } + } + else /* AMRWB or EVS */ + { + st_ivas->element_mode_init = EVS_MONO; + + if ( rate2EVSmode( total_brate, NULL ) < 0 ) /* negative value means that a valid rate was not found */ + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) in the G.192 frame ! Exiting ! \n", total_brate ); + } + } + + /* G.192 RX DTX handler*/ + /* handle SID_FIRST, SID_BAD, SPEECH_LOST, NO_DATA as properly as possible for the ITU-T G.192 format */ + /* (total_brate, bfi , st_CNG) = rx_handler(received frame type, [previous frame type], past CNG state, past core) */ + curr_ft_good_sp = 0; + curr_ft_bad_sp = 0; + + if ( is_DTXrate( total_brate ) == 0 ) + { + if ( st_ivas->bfi == 0 ) + { + curr_ft_good_sp = 1; + } + else + { + curr_ft_bad_sp = 1; + } + } + + sid_update = 0; + sid_upd_bad = 0; + if ( is_SIDrate( total_brate ) == 1 ) + { + if ( st_ivas->bfi == 0 ) + { + sid_update = 1; + } + else + { + sid_upd_bad = 1; /* this frame type may happen in ETSI/3GPP CS cases , a corrupt sid frames */ + } + } + + /* all zero indices/bits iSP AMRWB SID_update results in a valid LP filter with extremely high LP-filter-gain */ + /* all zero indices/bits may be a result of CS bit errors and/or erroneously injected by gateways or by a bad dejitter handlers */ + if ( total_brate == SID_1k75 && sid_update == 1 ) + { + /* valid sid_update received, check for very risky but formally valid content */ + int16_t sum = 0; + for ( k = 0; k < num_bits; ++k ) + { + sum += ( bit_stream[k] == 1 ); /* check of 35 zeroes */ + } + if ( sum == 0 ) + { /* all zeros */ + sid_upd_bad = 1; /* initial signal as corrupt (BER likely) */ + } + } + + /* AMRWB 26.173 G.192 file reader (read_serial) does not declare/use SID_BAD ft, + it declares every bad synch marked frame initially as a lost_speech frame, + and then the RXDTX handler CNG state decides the decoding mode CNG/SPEECH. + While In the AMRWB ETSI/3GPP format eid a CRC error in a detected SID_UPDATE frames triggers SID_BAD. + + Here we inhibit use of the SID-length info, even though it is available in the G.192 file format after STL/EID-XOR . + */ + if ( sid_upd_bad ) + { + sid_upd_bad = 0; + total_brate = FRAME_NO_DATA; /* treat SID_BAD as a stolen signaling frame --> SPEECH LOST */ + } + + g192_sid_first = 0; + if ( st_ivas->ivas_format == MONO_FORMAT && sts[0]->core == AMR_WB_CORE && *prev_ft_speech && total_brate == FRAME_NO_DATA && st_ivas->bfi == 0 ) + { + g192_sid_first = 1; /* SID_FIRST detected for previous AMRWB/AMRWBIO active frames only */ + /* It is not possible to perfectly simulate rate switching conditions EVS->AMRWBIO where: + the very first SID_FIRST detection is based on a past EVS active frame + and a good length 0 "SID_FIRST"(NO_DATA) frame is sent in AMRWBIO, + due to the one frame state memory in the AMRWB legacy G.192 SID_FIRST encoding + */ + } + + speech_bad = 0; + if ( st_ivas->bfi != 0 && ( is_DTXrate( total_brate ) == 0 ) ) + { + speech_bad = 1; /* initial ft assumption, CNG_state decides what to do */ + } + + speech_lost = 0; + if ( total_brate == FRAME_NO_DATA && st_ivas->bfi != 0 ) /* unsent NO_DATA or stolen NO_DATA/signaling frame */ + { + speech_lost = 1; /* initial ft assumption, CNG_state decides what to do */ + } + + /* Do not allow decoder to enter CNG-synthesis for any instantly received GOOD+LENGTH==0 frame + as this frame was never transmitted, one can not know it is good and has a a length of zero ) */ + if ( *CNG != 0 ) + { + /* We were in CNG synthesis */ + if ( curr_ft_good_sp != 0 ) + { + /* only a good speech frame makes you leave CNG synthesis */ + *CNG = 0; + } + } + else + { + /* We were in SPEECH synthesis */ + /* only a received/detected SID frame can make the decoder enter into CNG synthsis */ + if ( g192_sid_first || sid_update || sid_upd_bad ) + { + *CNG = 1; + } + } + + /* set bfi, total_brate pair for proper decoding */ + /* handle the G.192 _simulated_ untransmitted NO_DATA frame, setting for decoder SPEECH synthesis */ + if ( *CNG == 0 && total_brate == FRAME_NO_DATA && st_ivas->bfi == 0 ) + { + st_ivas->bfi = 1; /* SPEECH PLC code will now become active as in a real system */ + /* total_brate= 0 */ + } + + /* handle bad/lost speech frame(and CS bad sid frame) in the decoders CNG synthesis settings pair (total_brate, bfi) */ + if ( ( ( *CNG != 0 ) && ( ( speech_bad != 0 ) || ( speech_lost != 0 ) ) ) || /* SP_BAD or SPEECH_LOST) --> stay in CNG */ + ( sid_upd_bad != 0 ) ) /* SID_UPD_BAD --> start CNG */ + { + st_ivas->bfi = 0; /* bfi=0 needed to activate CNG code */ + total_brate = FRAME_NO_DATA; + } + + /* update for next frame's G.192 file format's odd SID_FIRST detection (primarily for AMRWBIO) */ + *prev_ft_speech = ( ( curr_ft_good_sp != 0 ) || ( curr_ft_bad_sp != 0 ) ); + + /* st->total brate= total_brate; updated in a good frame below */ + + for ( k = 0; k < st_ivas->nCPE; k++ ) + { + sts = st_ivas->hCPE[k]->hCoreCoder; + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + sts[n]->bfi = st_ivas->bfi; + } + } + + for ( k = 0; k < st_ivas->nSCE; k++ ) + { + sts = st_ivas->hSCE[k]->hCoreCoder; + sts[0]->bfi = st_ivas->bfi; + } + + if ( st_ivas->bfi == 0 ) + { + /* select Mode 1 or Mode 2 */ + if ( st_ivas->ivas_format == MONO_FORMAT ) /* EVS mono */ + { + decoder_selectCodec( sts[0], total_brate, bit_stream[0] ); + st_ivas->hDecoderConfig->Opt_AMR_WB = sts[0]->Opt_AMR_WB; + } + else /* IVAS */ + { + st_ivas->codec_mode = MODE1; + st_ivas->hDecoderConfig->Opt_AMR_WB = 0; + } + } + + /* GOOD frame */ + if ( st_ivas->bfi == 0 ) + { + /* GOOD frame - convert ITU-T G.192 words to short values */ + st_ivas->hDecoderConfig->ivas_total_brate = total_brate; + } + + st_ivas->bit_stream = bit_stream; + + if ( st_ivas->ivas_format == MONO_FORMAT ) + { + ivas_set_bitstream_pointers( st_ivas ); + } + + return error; +} + +/*-------------------------------------------------------------------* + * read_indices_mime_handle_dtx() + * + * Handle DTX for MIME and RTP_DUMP decoding. + * Returns the actual total_brate. + *-------------------------------------------------------------------*/ + +static Word32 read_indices_mime_handle_dtx( + Decoder_State *st, + int16_t *CNG, + const Word16 isAMRWB_IOmode, + const Word16 core_mode, + Word32 total_brate, + const Word16 sti, + const Word16 speech_lost, + Word16 no_data, + const Word16 amrwb_rfc4867_flag ) +{ + Word16 curr_ft_good_sp = 0; + Word16 speech_bad = 0; + Word16 sid_upd_bad = 0, sid_update = 0; + Word16 amrwb_sid_first = 0; /* derived from sti SID_FIRST indicator in AMRWB payload */ + + /* keep st->CNG , st_bfi and total_brate updated for proper synthesis in DTX and FER */ + if ( total_brate > SID_2k40 ) + { + if ( st->bfi != 1 ) /* so far derived from q bit in AMRWB/AMRWBIO cases */ + { + curr_ft_good_sp = 1; + } + } + + /* handle q_bit and lost_sp clash , assume worst case */ + if ( speech_lost != 0 ) /* overrides a good q_bit */ + { + curr_ft_good_sp = 0; + st->bfi = 1; /* override qbit */ + } + + /* now_bfi_fx has been set based on q_bit and ToC fields */ + + /* SID_UPDATE check */ + if ( total_brate == SID_1k75 || total_brate == SID_2k40 ) + { + if ( st->bfi == 0 ) + { + /* typically from q bit */ + sid_update = 1; + } + else + { + sid_upd_bad = 1; /* may happen in saving from e.g. a CS-connection */ + } + } + + if ( isAMRWB_IOmode && total_brate == 0 && sti == 0 ) + { + if ( st->bfi ) + { + sid_upd_bad = 1; /* corrupt sid_first, signaled as bad sid */ + } + else + { + amrwb_sid_first = 1; /* 1-sti */ + } + } + + if ( sid_upd_bad != 0 && ( ( isAMRWB_IOmode != 0 && st->Opt_AMR_WB == 0 ) || /* switch to AMRWBIO */ + ( isAMRWB_IOmode != 1 && st->Opt_AMR_WB == 1 ) /* switch from AMRWBIO */ + ) ) + { + /* do not allow a normal start of CNG synthesis if this SID(with BER or FER) is a switch to/from AMRWBIO */ + sid_upd_bad = 0; /* revert this detection due to AMRWBIO/EVS mode switch */ + total_brate = 0; + no_data = 1; + assert( st->bfi == 1 ); /* bfi stays 1 */ + } + + if ( total_brate > SID_2k40 && st->bfi == 1 ) /* typically from q bit */ + { + speech_bad = 1; /* initial assumption, CNG synt state decides what to actually do */ + } + /* all frame types decoded */ + + /* update CNG synthesis state */ + /* Decoder can only enter CNG-synthesis for CNG frame types (sid_upd, sid_bad, sid_first) */ + if ( *CNG != 0 ) + { + /* We were in CNG synthesis */ + if ( curr_ft_good_sp != 0 ) + { + /* only a good speech frame makes decoder leave CNG synthesis */ + *CNG = 0; + } + } + else + { + /* We were in SPEECH synthesis */ + /* only a received SID frame can make the decoder enter into CNG synthesis */ + if ( amrwb_sid_first || sid_update || sid_upd_bad ) + { + *CNG = 1; + } + } + + /* Now modify bfi flag for the decoder's SPEECH/CNG synthesis logic */ + /* in SPEECH synthesis, make sure to activate speech PLC for a received NO_DATA frame, + no_data frames may be injected by the network or by the dejitter buffer */ + /* modify bfi_flag to stay/move into the correct decoder PLC section */ + if ( ( *CNG == 0 ) && ( no_data != 0 ) ) + { + /* treat NO_DATA received in speech synthesis as SP_LOST frames, SPEECH PLC code will now become active */ + st->bfi = 1; + /* total_brate= 0; always zero for no_data */ + } + + /* in CNG */ + /* handle bad speech frame(and bad sid frame) in the decoders CNG synthesis settings pair (total_brate, bfi) */ + if ( ( *CNG != 0 && ( speech_bad || speech_lost || no_data ) ) || /* SP_BAD or SPEECH_LOST) --> stay in CNG */ + sid_upd_bad ) /* SID_UPD_BAD --> start/stay CNG */ + { + st->bfi = 0; /* mark as good to not start speech PLC */ + total_brate = 0; /* this zeroing needed for speech_bad, sid_bad frames */ + } + + + /* now bfi, total_brate are set by RX-DTX handler:: + bfi==0, total_brate!=0 CNG or speech pending bitrate + bfi==0, total_brate==0 CNG will continue or start(sid_first, sid_bad) + bfi==1, total_brate!=0 speech PLC + bfi==1, total_brate==0 , speech PLC */ + + /* handle available AMRWB/AMRWBIO MIME header ToC rate-info at startup */ + if ( ( st->bfi == 1 && st->ini_frame == 0 ) && ( ( amrwb_rfc4867_flag != 0 ) || ( amrwb_rfc4867_flag == 0 && isAMRWB_IOmode != 0 ) ) ) /*AMRWB ToC */ + { + Word32 init_rate; + + init_rate = total_brate; /* default , may have been modified from original ToC value */ + if ( speech_lost != 0 || no_data != 0 ) + { + init_rate = ACELP_12k65; /* make sure the decoder starts up in a selected AMRWB mode */ + } + else if ( speech_bad != 0 ) + { + init_rate = AMRWB_IOmode2rate[core_mode]; /* read from from ToC */ + } + st->total_brate = init_rate; /* not updated on bfi as decoderSelectCodec is not called below */ + st->core_brate = init_rate; + } + + return total_brate; +} + + +/*-------------------------------------------------------------------* + * read_indices_mime_handle_sti_and_all_zero_bits() + * + * Handle STI and frames with all zero bits for MIME and RTP_DUMP decoding. + *-------------------------------------------------------------------*/ +static void read_indices_mime_handle_sti_and_all_zero_bits( + Decoder_State *st, + Word32 *total_brate, + Word16 sti ) +{ + Word16 k, sum = 0; + + if ( sti == 0 ) + { + *total_brate = 0; /* signal received SID_FIRST as a good frame with no bits */ + for ( k = 0; k < 35; k++ ) + { + st->bfi |= st->bit_stream[k]; /* partity check of 35 zeroes, any single 1 gives BFI */ + } + } + /* all zero bit SID_update results in a valid LP filter with extremely high LP-filter-gain */ + /* all zero bits signal may be a result of CS bit errors or erronesouly injected by gateways or bad dejitter handlers */ + if ( sti == 1 ) + { /*sid_update received */ + for ( k = 0; k < 35; k++ ) + { + sum += st->bit_stream[k]; /* check of 35 zeroes */ + } + + if ( sum == 0 ) + { + st->bfi = 1; /* eventually becomes SID_UPD_BAD */ + } + } +} + + +/*-------------------------------------------------------------------* + * get_rfFrameType() + * + * Extract the RF frame type + *-------------------------------------------------------------------*/ + +static void get_rfFrameType( + Decoder_State *st, /* i : decoder state structure */ + int16_t *rf_frame_type /* o : RF frame type */ +) +{ + int16_t num_bits; + num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + if ( st->rf_flag == 1 ) + { + /* the last three bits in a packet is the RF frame type */ + *rf_frame_type = get_indice( st, num_bits - 3, 3 ); + } + else + { + *rf_frame_type = 0; + } + + return; +} + +/*-------------------------------------------------------------------* + * get_rfFlag() + * + * Check if RF flag is present in the bitstream + *-------------------------------------------------------------------*/ + +static void get_rfFlag( + Decoder_State *st, /* i : decoder state structure */ + int16_t *rf_flag, /* o : check for the RF flag */ + int16_t *nBits, + int32_t *ind ) +{ + int16_t start_idx, nBits_tmp; + int32_t ind_tmp; + + /* Init */ + *rf_flag = 0; + + /* check for rf_flag in the packet and extract the rf_frame_type and rf_fec_offset */ + if ( st->total_brate == ACELP_13k20 && ( st->bfi == FRAMEMODE_NORMAL || st->bfi == FRAMEMODE_FUTURE ) ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + start_idx = 0; + while ( acelp_sig_tbl[start_idx] != st->total_brate ) + { + start_idx++; + assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" ); + } + + /* skip the bitrate */ + start_idx += 1; + + /* retrieve the number of bits */ + nBits_tmp = (int16_t) acelp_sig_tbl[start_idx++]; + + /* retrieve the signalling indice */ + ind_tmp = acelp_sig_tbl[start_idx + get_indice( st, 0, nBits_tmp )]; + + /* convert signalling indice into RF flag. */ + *rf_flag = ( ind_tmp >> 7 ) & 0x1; + + if ( ind ) + { + *ind = ind_tmp; + } + + if ( nBits ) + { + *nBits = nBits_tmp; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * get_rf_fec_offset() + * + * Extract the FEC offset + *-------------------------------------------------------------------*/ + +static void get_rf_fec_offset( + Decoder_State *st, /* i : decoder state structure */ + int16_t *rf_fec_offset /* o : RF FEC offset */ +) +{ + int16_t num_bits, tmp; + num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + if ( st->rf_flag == 1 ) + { + /* the two bits before the RF frame type contains the FEC offset */ + tmp = get_indice( st, num_bits - 5, 2 ); + + if ( tmp == 0 ) + { + *rf_fec_offset = 2; + } + else + { + *rf_fec_offset = 2 * tmp + 1; + } + } + else + { + *rf_fec_offset = 0; + } + + return; +} + +/*-------------------------------------------------------------------* + * get_rfTargetBits() + * + * Return the number of RF target bits + *-------------------------------------------------------------------*/ + +static void get_rfTargetBits( + int16_t rf_frame_type, /* i : RF frame type */ + int16_t *rf_target_bits /* o : Number of RF target bits */ +) +{ + /* Number of RF bits for different RF coder types */ + + switch ( rf_frame_type ) + { + case RF_NO_DATA: + *rf_target_bits = 5; + break; + case RF_TCXFD: + *rf_target_bits = 27; + break; + case RF_TCXTD1: + *rf_target_bits = 16; + break; + case RF_TCXTD2: + *rf_target_bits = 16; + break; + case RF_ALLPRED: + /* Es_pred bits 3 bits, LTF: 1, pitch: 8,5,5,5, FCB: 0, gain: 7,0,7,0, Diff GFr: 4*/ + *rf_target_bits = 63; + break; + case RF_NOPRED: + /* Es_pred bits 3 bits, LTF: 0, pitch: 0, FCB: 7,7,7,7, gain: 6,0,6,0, Diff GFr: 2*/ + *rf_target_bits = 66; + break; + case RF_GENPRED: + /* Es_pred bits 3 bits, LTF: 1, pitch: 8,0,8,0, FCB: 6,7,5,5, gain: 5,0,5,0, Diff GFr: 0*/ + *rf_target_bits = 70; + break; + case RF_NELP: + /* gain: 19, Diff GFr: 5 */ + *rf_target_bits = 45; + break; + } + + return; +} + +/*-------------------------------------------------------------------* + * berCheck() + * + * Check for bit errors in channel aware signalling. + *-------------------------------------------------------------------*/ + +static void berCheck( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + /* In case of RF flag = 1, and valid RF packet with primary and partial copy */ + if ( st->bwidth == NB || st->bwidth == FB || st->coder_type >= TRANSITION ) + { + if ( st->use_partial_copy == 1 ) + { + st->use_partial_copy = 0; + } + + st->bfi = 1; + st->bwidth = st->last_bwidth; + st->BER_detect = 1; + st->coder_type = GENERIC; + } + + return; +} + +/*-------------------------------------------------------------------* + * getPartialCopyInfo() + * + * Check if the frame includes a partial copy for channel aware processing. + *-------------------------------------------------------------------*/ + +void getPartialCopyInfo( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *sharpFlag ) +{ + int16_t nBits = 0; + int32_t ind = 0; + + /* check the RF flag in the packet */ + get_rfFlag( st, &( st->rf_flag ), &nBits, &ind ); + + /* get RF frame type info */ + get_rfFrameType( st, &( st->rf_frame_type ) ); + + /* Get the FEC offset info */ + get_rf_fec_offset( st, &( st->rf_fec_offset ) ); + + /* reset number of target bits in case of rate switching */ + st->rf_target_bits = 0; + + /* Get the number of bits used for RF*/ + if ( st->rf_flag == 1 ) + { + st->coder_type = ind & 0x7; + st->bwidth = ( ind >> 3 ) & 0x7; + *sharpFlag = ( ind >> 6 ) & 0x1; + st->codec_mode = MODE2; + get_rfTargetBits( st->rf_frame_type, &( st->rf_target_bits ) ); + + if ( st->bfi == FRAMEMODE_FUTURE ) + { + st->use_partial_copy = 1; + /* now set the frame mode to normal mode */ + if ( st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) + { + st->bfi = 1; + st->core = TCX_20_CORE; + } + else + { + st->bfi = FRAMEMODE_NORMAL; + st->core = ACELP_CORE; + } + } + + /* check for bit errors */ + berCheck( st ); + + get_next_indice_tmp( st, nBits ); + } + + return; +} + +/*-------------------------------------------------------------------* + * get_NextCoderType() + * + * Extract the coder type of next frame + *-------------------------------------------------------------------*/ + +void get_NextCoderType( + uint8_t *bitstream, /* i : bitstream */ + int16_t *next_coder_type /* o : next coder type */ +) +{ + int16_t k; + int16_t start_idx; + int8_t bit_stream[ACELP_13k20 / FRAMES_PER_SEC]; + int32_t tmp; + int16_t nBits_tmp; + + + for ( k = 0; k < ACELP_13k20 / FRAMES_PER_SEC; k++ ) + { + bit_stream[k] = ( bitstream[k / 8] >> ( 7 - ( k % 8 ) ) ) & 0x1; + } + start_idx = 0; + while ( acelp_sig_tbl[start_idx] != ACELP_13k20 ) + { + start_idx++; + assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" ); + } + + /* skip the bitrate */ + start_idx += 1; + + tmp = 0; + nBits_tmp = (int16_t) acelp_sig_tbl[start_idx++]; + for ( k = 0; k < nBits_tmp; k++ ) + { + tmp <<= 1; + tmp += bit_stream[k]; + } + + /* retrieve the signalling indice */ + *next_coder_type = acelp_sig_tbl[start_idx + tmp] & 0x7; + + return; +} + +/*-------------------------------------------------------------------* + * read_indices_from_djb() + * + * Read indices from the de-jitter buffer payload (works also for AMR-WB IO mode) + *-------------------------------------------------------------------*/ +void read_indices_from_djb( + Decoder_State *st, /* i/o: decoder state structure */ + uint8_t *pt_stream, /* i : bitstream file */ + int16_t *CNG, + const int16_t num_bits, /* i : input frame length in bits */ + const Word16 isAMRWB_IOmode, + const Word16 core_mode, + const Word16 qbit, + const Word16 bitstreamformat, + const Word16 amrwb_rfc4867_flag, + const int16_t partialframe, /* i : partial frame information */ + const int16_t next_coder_type /* i : next coder type information */ +) +{ + int16_t k; + UWord8 mask = 0x80; + Word16 no_data = 0; + Word16 sti = -1; + uint16_t *bit_stream_ptr; + int32_t total_brate; + int16_t speech_lost = 0; + + st->bfi = 0; + st->BER_detect = 0; + st->mdct_sw_enable = 0; + st->mdct_sw = 0; + reset_indices_dec( st ); + + st->bfi = !qbit; + total_brate = (Word32) (num_bits) *50; + + if ( num_bits == 0 ) /* guess type of missing frame for SP_LOST and NO_DATA */ + { + speech_lost = *CNG == 0; + no_data = *CNG != 0; + } + + if ( partialframe || st->prev_use_partial_copy ) + { + st->next_coder_type = next_coder_type; + } + else + { + st->next_coder_type = INACTIVE; + } + + if ( partialframe == 1 ) + { + st->bfi = 2; + } + + /* unpack speech data */ + bit_stream_ptr = st->bit_stream; + /* convert bitstream from compact bytes to short values and store it in decoder state */ + for ( k = 0; k < num_bits; k++ ) + { + if ( bitstreamformat == VOIP_RTPDUMP && isAMRWB_IOmode ) + { + st->bit_stream[sort_ptr[core_mode][k]] = unpack_bit( &pt_stream, &mask ); + bit_stream_ptr++; + } + else + { + *bit_stream_ptr++ = unpack_bit( &pt_stream, &mask ); + } + } + + /* unpack auxiliary bits */ + if ( isAMRWB_IOmode && total_brate == SID_1k75 ) + { + if ( bitstreamformat == VOIP_RTPDUMP ) + { + /* A.2.2.1.3: AMR-WB SID_1k75 frame is followed by STI bit and CMI bits */ + sti = unpack_bit( &pt_stream, &mask ); + } + else + { + /* VOIP_G192_RTP does not contain STI and CMI */ + sti = 1; + } + read_indices_mime_handle_sti_and_all_zero_bits( st, &total_brate, sti ); + } + + /* add two zero bytes for arithmetic coder flush */ + for ( k = 0; k < 8 * 2; ++k ) + { + *bit_stream_ptr++ = 0; + } + + total_brate = read_indices_mime_handle_dtx( st, CNG, isAMRWB_IOmode, core_mode, total_brate, sti, speech_lost, no_data, amrwb_rfc4867_flag ); + /* st->CNG set inside */ + + if ( st->bfi != 1 ) + { + /* select Mode 1 or Mode 2 */ + decoder_selectCodec( st, total_brate, *st->bit_stream ? 1 : 0 ); + + /* a change of the total bitrate should not be known to the decoder, if the received frame was truly lost */ + st->total_brate = total_brate; + + mdct_switching_dec( st ); + } + + return; +} + +/*-------------------------------------------------------------------* + * get_indice_preview() + * + * Indices preview to parse for the presence of partial copy + *-------------------------------------------------------------------*/ + +static uint16_t get_indice_preview( + uint8_t *bitstream, + const int16_t bitstreamSize, + const int16_t pos, + const int16_t nb_bits ) +{ + uint16_t value; + int16_t i; + uint16_t bitstreamShort[MAX_BITS_PER_FRAME + 16]; + uint16_t *bitstreamShortPtr; + + /* convert bitstream from compact bytes to short values */ + bitstreamShortPtr = bitstreamShort; + for ( i = 0; i < bitstreamSize; i++ ) + { + *bitstreamShortPtr++ = ( bitstream[i / 8] >> ( 7 - ( i % 8 ) ) ) & 0x1; + } + + assert( nb_bits <= 16 ); + value = 0; + for ( i = 0; i < nb_bits; i++ ) + { + value <<= 1; + value += bitstreamShort[pos + i]; + } + return value; +} + + +/*-------------------------------------------------------------------* + * evs_dec_previewFrame() + * + * Signalling index preview for JBM + *-------------------------------------------------------------------*/ + +void evs_dec_previewFrame( + uint8_t *bitstream, + int16_t bitstreamSize, + int16_t *partialCopyFrameType, + int16_t *partialCopyOffset ) +{ + int32_t total_brate; + int16_t start_idx, nBits; + int32_t ind; + int16_t rf_flag; + + rf_flag = 0; + *partialCopyFrameType = 0; + *partialCopyOffset = 0; + total_brate = bitstreamSize * FRAMES_PER_SEC; + + if ( total_brate == ACELP_13k20 ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + start_idx = 0; + while ( acelp_sig_tbl[start_idx] != total_brate ) + { + start_idx++; + assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" ); + } + + /* skip the bitrate */ + start_idx += 1; + /* retrieve the number of bits */ + nBits = (int16_t) acelp_sig_tbl[start_idx++]; + + /* retrieve the signalling indice */ + ind = acelp_sig_tbl[start_idx + get_indice_preview( bitstream, bitstreamSize, 0, nBits )]; + + /* convert signalling indice into RF flag. */ + rf_flag = ( ind >> 7 ) & 0x1; + if ( rf_flag != 0 ) + { + /* read the FEC offset at which the partial copy is received */ + ind = get_indice_preview( bitstream, bitstreamSize, ( bitstreamSize - 5 ), 2 ); + if ( ind == 0 ) + { + *partialCopyOffset = 2; + } + else if ( ind == 1 ) + { + *partialCopyOffset = 3; + } + else if ( ind == 2 ) + { + *partialCopyOffset = 5; + } + else if ( ind == 3 ) + { + *partialCopyOffset = 7; + } + /* the last three bits in a packet is the RF frame type */ + *partialCopyFrameType = get_indice_preview( bitstream, bitstreamSize, bitstreamSize - 3, 3 ); + } + } + + return; +} + + +#undef WMC_TOOL_MAN diff --git a/lib_com/calc_st_com.c b/lib_com/calc_st_com.c new file mode 100644 index 0000000000..5f1c3776d9 --- /dev/null +++ b/lib_com/calc_st_com.c @@ -0,0 +1,310 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------------- + * calc_rc0_h() + * + * computes 1st parcor from composed filter impulse response + *---------------------------------------------------------------------------*/ + +static void calc_rc0_h( + const float *h, /* i : impulse response of composed filter */ + float *rc0 /* o : 1st parcor */ +) +{ + float acf0, acf1; + float temp, temp2; + const float *ptrs; + int16_t i; + + /* computation of the autocorrelation function acf */ + temp = 0.0f; + for ( i = 0; i < LONG_H_ST; i++ ) + { + temp += h[i] * h[i]; + } + acf0 = temp; + + temp = 0.0f; + ptrs = h; + for ( i = 0; i < LONG_H_ST - 1; i++ ) + { + temp2 = *ptrs++; + temp += temp2 * ( *ptrs ); + } + acf1 = temp; + + /* Initialisation of the calculation */ + if ( acf0 == 0.0f ) + { + *rc0 = 0.0f; + return; + } + + /* Compute 1st parcor */ + if ( acf0 < (float) fabs( acf1 ) ) + { + *rc0 = 0.0f; + return; + } + *rc0 = -acf1 / acf0; + + return; +} + + +/*---------------------------------------------------------------------------- + * calc_st_filt() + * + * computes impulse response of A(gamma2) / A(gamma1) + * controls gain : computation of energy impulse response as + * SUMn (abs (h[n])) and computes parcor0 + *---------------------------------------------------------------------------- */ + +void calc_st_filt( + const float *apond2, /* i : coefficients of numerator */ + const float *apond1, /* i : coefficients of denominator */ + float *parcor0, /* o : 1st parcor calcul. on composed filter */ + float *sig_ltp_ptr, /* i/o: input of 1/A(gamma1) : scaled by 1/g0 */ + float *mem_zero, /* i/o: All zero memory */ + const int16_t L_subfr, /* i : the length of subframe */ + const int16_t extl /* i : extension layer info */ + +) +{ + float h[LONG_H_ST]; + float g0, temp; + int16_t i; + + /* compute i.r. of composed filter apond2 / apond1 */ + if ( extl == SWB_TBE ) + { + syn_filt( apond1, LPC_SHB_ORDER, apond2, h, LONG_H_ST, mem_zero, 0 ); + } + else + { + syn_filt( apond1, M, apond2, h, LONG_H_ST, mem_zero, 0 ); + } + + /* compute 1st parcor */ + calc_rc0_h( h, parcor0 ); + + /* compute g0 */ + g0 = 0.0f; + for ( i = 0; i < LONG_H_ST; i++ ) + { + g0 += (float) fabs( h[i] ); + } + + /* Scale signal input of 1/A(gamma1) */ + if ( g0 > 1.0f ) + { + temp = 1.0f / g0; + + for ( i = 0; i < L_subfr; i++ ) + { + sig_ltp_ptr[i] = sig_ltp_ptr[i] * temp; + } + } + + return; +} + + +/*---------------------------------------------------------------------------- + * filt_mu() + * + * tilt filtering with : (1 + mu z-1) * (1/1-|mu|) + * computes y[n] = (1/1-|mu|) (x[n]+mu*x[n-1]) + *---------------------------------------------------------------------------*/ + +void filt_mu( + const float *sig_in, /* i : signal (beginning at sample -1) */ + float *sig_out, /* o : output signal */ + const float parcor0, /* i : parcor0 (mu = parcor0 * gamma3) */ + const int16_t L_subfr, /* i : the length of subframe */ + const int16_t extl /* i : extension layer info */ +) +{ + int16_t n; + float mu, ga, temp; + const float *ptrs; + + if ( extl == SWB_TBE ) + { + if ( parcor0 > 0.0f ) + { + mu = parcor0 * GAMMA3_PLUS_WB; + } + else + { + mu = parcor0 * GAMMA3_MINUS_WB; + } + } + else + { + if ( parcor0 > 0.0f ) + { + mu = parcor0 * GAMMA3_PLUS; + } + else + { + mu = parcor0 * GAMMA3_MINUS; + } + } + + ga = (float) 1. / ( (float) 1. - (float) fabs( mu ) ); + + ptrs = sig_in; /* points on sig_in(-1) */ + + for ( n = 0; n < L_subfr; n++ ) + { + temp = mu * ( *ptrs++ ); + temp += ( *ptrs ); + sig_out[n] = ga * temp; + } + + return; +} + + +/*---------------------------------------------------------------------------- + * scale_st() + * + * control of the subframe gain + * gain[n] = AGC_FAC_FX * gain[n-1] + (1 - AGC_FAC_FX) g_in/g_out + *---------------------------------------------------------------------------*/ + +void scale_st( + const float *sig_in, /* i : postfilter input signal */ + float *sig_out, /* i/o: postfilter output signal */ + float *gain_prec, /* i/o: last value of gain for subframe */ + const int16_t L_subfr, /* i : the length of subframe */ + const int16_t extl /* i : extension layer info */ +) +{ + int16_t i; + float gain_in, gain_out; + float g0, gain; + float agc_fac1_para = 0.0f; + float agc_fac_para = 0.0f; + + if ( extl == SWB_TBE ) + { + agc_fac1_para = AGC_FAC1_WB; + agc_fac_para = AGC_FAC_WB; + } + else + { + agc_fac1_para = AGC_FAC1; + agc_fac_para = AGC_FAC; + } + + /* compute input gain */ + gain_in = 0.0f; + for ( i = 0; i < L_subfr; i++ ) + { + gain_in += (float) fabs( sig_in[i] ); + } + + if ( gain_in == 0.0f ) + { + g0 = 0.0f; + } + else + { + /* Compute output gain */ + gain_out = 0.0f; + for ( i = 0; i < L_subfr; i++ ) + { + gain_out += (float) fabs( sig_out[i] ); + } + + if ( gain_out == 0.0f ) + { + *gain_prec = 0.0f; + return; + } + + g0 = gain_in / gain_out; + g0 *= agc_fac1_para; + } + + /* compute gain(n) = AGC_FAC gain(n-1) + (1-AGC_FAC)gain_in/gain_out */ + /* sig_out(n) = gain(n) sig_out(n) */ + gain = *gain_prec; + for ( i = 0; i < L_subfr; i++ ) + { + gain *= agc_fac_para; + gain += g0; + sig_out[i] *= gain; + } + + *gain_prec = gain; + + return; +} + +void blend_subfr2( + float *sigIn1, + float *sigIn2, + float *sigOut ) +{ + float fac1 = 1.f - ( 1.f / L_SUBFR ); + float fac2 = 0.f + ( 1.f / L_SUBFR ); + float step = 1.f / ( L_SUBFR / 2 ); + int16_t i; + + for ( i = 0; i < L_SUBFR / 2; i++ ) + { + sigOut[i] = fac1 * sigIn1[i] + fac2 * sigIn2[i]; + fac1 -= step; + fac2 += step; + } + + return; +} diff --git a/lib_com/cb_shape.c b/lib_com/cb_shape.c new file mode 100644 index 0000000000..b44c46ab0f --- /dev/null +++ b/lib_com/cb_shape.c @@ -0,0 +1,125 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * cb_shape() + * + * pre-emphasis, pitch sharpening and formant sharpening of the algebraic codebook + *-------------------------------------------------------------------*/ + +void cb_shape( + const int16_t preemphFlag, /* i : flag for pre-emphasis */ + const int16_t pitchFlag, /* i : flag for pitch sharpening */ + const int16_t scramblingFlag, /* i : flag for phase scrambling */ + const int16_t formantFlag, /* i : flag for formant sharpening */ + const int16_t formantTiltFlag, /* i : flag for formant tilt */ + const float g1, /* i : formant sharpening numerator weighting */ + const float g2, /* i : formant sharpening denominator weighting */ + const float *p_Aq, /* i : LP filter coefficients */ + float *code, /* i/o: signal to shape */ + const float tilt_code, /* i : tilt of code */ + const float pt_pitch, /* i : pointer to current subframe fractional pitch */ + const int16_t L_subfr /* i : subfframe length */ +) +{ + float buff[M + 2 * L_SUBFR], A_num[M + 1], A_den[M + 1]; + float tmp, tilt; + int16_t i, round_T0; + + /* pre-emphasize the algebraic codebook */ + if ( preemphFlag ) + { + tmp = 0.0f; + preemph( code, tilt_code, L_subfr, &tmp ); + } + + /* pitch sharpening */ + if ( pitchFlag ) + { + round_T0 = (int16_t) ( pt_pitch + 0.4f ); + for ( i = round_T0; i < L_subfr; i++ ) + { + code[i] += code[i - round_T0] * PIT_SHARP; + } + } + + /* phase scrambling filter */ + if ( scramblingFlag ) + { + buff[0] = code[0]; + for ( i = 1; i < L_subfr; i++ ) + { + buff[i] = code[i]; + code[i] = 0.7f * buff[i] + buff[i - 1] - 0.7f * code[i - 1]; + } + } + + /* formant sharpening (only on active speech) */ + if ( formantFlag || formantTiltFlag ) + { + weight_a( p_Aq, A_num, g1, M ); + weight_a( p_Aq, A_den, g2, M ); + + set_f( buff, 0, M + L_subfr ); + + /* formant tilt */ + if ( formantTiltFlag ) + { + mvr2r( A_num, buff + M, M + 1 ); + syn_filt( A_den, M, buff + M, buff + M, L_subfr, buff, 0 ); + tilt = get_gain( buff + M + 1, buff + M, L_subfr - 1, NULL ); + tmp = 0.0; + preemph( code, 0.5f * tilt_code - 0.25f * tilt, L_subfr, &tmp ); + } + else + { + mvr2r( code, buff + M, L_subfr ); + residu( A_num, M, buff + M, code, L_subfr ); + syn_filt( A_den, M, code, code, L_subfr, buff, 0 ); + } + } + + return; +} diff --git a/lib_com/cldfb.c b/lib_com/cldfb.c new file mode 100644 index 0000000000..1d9fefcebb --- /dev/null +++ b/lib_com/cldfb.c @@ -0,0 +1,1235 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "stat_dec.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +#if __STDC_VERSION__ >= 199901L +#if defined __ICL +#define restrict __restrict +#endif +#else +#define restrict +#endif + + +/*-------------------------------------------------------------------* + * Local prototypes + *--------------------------------------------------------------------*/ + +static void cldfb_init_proto_and_twiddles( HANDLE_CLDFB_FILTER_BANK hs ); + +static float GetEnergyCldfb( float *energyValuesSum, float *energyLookahead, float **realValues, float **imagValues, const int16_t numberBands, int16_t numberCols, TEC_ENC_HANDLE hTecEnc ); + +/*-------------------------------------------------------------------* + * cplxMult() + * + * Conduct complex multiplication + *--------------------------------------------------------------------*/ + +static void cplxMult( + float *yr, /* o : real output */ + float *yi, /* o : imag output */ + const float xr, /* i : real input 1*/ + const float xi, /* i : imag input 1*/ + const float cr, /* i : real input 1*/ + const float ci /* i : imag input 1*/ +) +{ + *yr = xr * cr - xi * ci; + *yi = xr * ci + xi * cr; + + return; +} + + +/*-------------------------------------------------------------------* + * cldfbAnalysis() + * + * Conduct multiple overlap complex low delay MDCT + *--------------------------------------------------------------------*/ + +void cldfbAnalysis( + const float *timeIn, /* i : time buffer */ + float **realBuffer, /* o : real value buffer */ + float **imagBuffer, /* o : imag value buffer */ + const int16_t samplesToProcess, /* i : samples to process */ + HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filterbank state */ +) +{ + int16_t i, k; + int16_t L2, M1, M2, M4; + int16_t no_col = h_cldfb->no_col; + + float r1, r2, rr12, ir12; + float i1, i2, ri12, ii12; + float rBuffer[2 * CLDFB_NO_CHANNELS_MAX]; + float iBuffer[2 * CLDFB_NO_CHANNELS_MAX]; + const float *rot_vctr_re; + const float *rot_vctr_im; + const float *ptr_pf; + float *timeBuffer, buffer[( CLDFB_NO_CHANNELS_MAX * CLDFB_NO_COL_MAX ) + ( 9 * CLDFB_NO_CHANNELS_MAX )]; + int16_t offset, frameSize; + + offset = h_cldfb->p_filter_length - h_cldfb->no_channels; + frameSize = h_cldfb->no_channels * h_cldfb->no_col; + + assert( h_cldfb->prototype == CLDFB_PROTOTYPE_1_25MS ); + /* prepare input buffer */ + timeBuffer = buffer; + mvr2r( h_cldfb->cldfb_state, timeBuffer, offset ); + + if ( samplesToProcess > -1 ) + { + mvr2r( timeIn, timeBuffer + offset, samplesToProcess ); + set_f( timeBuffer + offset + samplesToProcess, 0.0f, ( frameSize - samplesToProcess ) ); + } + else + { + mvr2r( timeIn, timeBuffer + offset, frameSize ); + } + + /* only process needed cols */ + if ( samplesToProcess > -1 ) + { + no_col = min( no_col, ( samplesToProcess + h_cldfb->no_channels - 1 ) / h_cldfb->no_channels ); + } + + M1 = h_cldfb->no_channels; + M2 = M1 >> 1; + M4 = M1 >> 2; + L2 = M1 << 1; + + if ( M2 & 1 ) + { + M4 += 1; + } + + rot_vctr_re = h_cldfb->rot_vec_ana_re; + rot_vctr_im = h_cldfb->rot_vec_ana_im; + + ptr_pf = h_cldfb->p_filter; + + for ( i = 0; i < no_col; i++ ) + { + for ( k = 0; k < M4; k++ ) + { + /* prototype filter */ + r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; + + r2 = 0 - ptr_pf[( L2 - M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 0 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 1 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 2 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 3 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 4 * L2]; + + i1 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; + + i2 = 0 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2]; + + /* folding + pre modulation of DST IV */ + rr12 = r1 - r2; + ri12 = -i1 - i2; + cplxMult( &rBuffer[2 * k], &rBuffer[2 * k + 1], rr12, ri12, rot_vctr_re[k], rot_vctr_im[k] ); + + /* folding + pre modulation of DCT IV */ + ir12 = r1 + r2; + ii12 = i1 - i2; + cplxMult( &iBuffer[2 * k], &iBuffer[2 * k + 1], ir12, ii12, rot_vctr_re[k], rot_vctr_im[k] ); + } + + for ( k = M4; k < M2; k++ ) + { + /* prototype filter */ + r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; + + r2 = 0 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 0 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 1 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 2 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 3 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 4 * L2]; + + i1 = 0 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 0 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 1 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 2 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 3 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 4 * L2]; + + i2 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; + + /* folding + pre modulation of DST IV */ + rr12 = r1 + r2; + ri12 = i1 - i2; + cplxMult( &rBuffer[2 * k], &rBuffer[2 * k + 1], rr12, ri12, rot_vctr_re[k], rot_vctr_im[k] ); + + /* folding + pre modulation of DCT IV */ + ir12 = r1 - r2; + ii12 = i1 + i2; + cplxMult( &iBuffer[2 * k], &iBuffer[2 * k + 1], ir12, ii12, rot_vctr_re[k], rot_vctr_im[k] ); + } + + /* FFT of DST IV */ + fft_cldfb( rBuffer, M2 ); + + /* post modulation of DST IV */ + for ( k = 0; k < M2; k++ ) + { + cplxMult( &realBuffer[i][M1 - 1 - ( 2 * k )], &realBuffer[i][2 * k], rBuffer[2 * k], rBuffer[2 * k + 1], rot_vctr_re[k], rot_vctr_im[k] ); + } + + /* FFT of DCT IV */ + fft_cldfb( iBuffer, M2 ); + + /* post modulation of DCT IV */ + for ( k = 0; k < M2; k++ ) + { + /* do it inplace */ + cplxMult( &imagBuffer[i][2 * k], &imagBuffer[i][M1 - 1 - ( 2 * k )], iBuffer[2 * k], iBuffer[2 * k + 1], rot_vctr_re[k], rot_vctr_im[k] ); + } + + timeBuffer += L2 * 5; + timeBuffer += h_cldfb->no_channels - h_cldfb->p_filter_length; + } + + /* update memory */ + mvr2r( buffer + frameSize, h_cldfb->cldfb_state, offset ); + + return; +} + +/*-------------------------------------------------------------------* + * cldfbAnalysis_ts() + * + * + *--------------------------------------------------------------------*/ + +void cldfbAnalysis_ts( + const float *timeIn, /* i : time buffer */ + float realBuffer[CLDFB_NO_CHANNELS_MAX], /* o : real value buffer */ + float imagBuffer[CLDFB_NO_CHANNELS_MAX], /* o : imag value buffer */ + const int16_t samplesToProcess, /* i : samples to process */ + HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filterbank state */ +) +{ + int16_t i, k; + int16_t L2, M1, M2, M4; + int16_t no_col = h_cldfb->no_col; + + float r1, r2, rr12, ir12; + float i1, i2, ri12, ii12; + float rBuffer[2 * CLDFB_NO_CHANNELS_MAX]; + float iBuffer[2 * CLDFB_NO_CHANNELS_MAX]; + const float *rot_vctr_re; + const float *rot_vctr_im; + const float *rot_vctr_delay_re; + const float *rot_vctr_delay_im; + const float *ptr_pf; + float *timeBuffer, buffer[( CLDFB_NO_CHANNELS_MAX * CLDFB_NO_COL_MAX ) + ( 9 * CLDFB_NO_CHANNELS_MAX )]; + int16_t offset, frameSize; + + offset = h_cldfb->p_filter_length - h_cldfb->no_channels; + frameSize = h_cldfb->no_channels * h_cldfb->no_col; + + /* prepare input buffer */ + timeBuffer = buffer; + mvr2r( h_cldfb->cldfb_state, timeBuffer, offset ); + + if ( samplesToProcess > -1 ) + { + mvr2r( timeIn, timeBuffer + offset, samplesToProcess ); + set_f( timeBuffer + offset + samplesToProcess, 0.0f, ( frameSize - samplesToProcess ) ); + } + else + { + mvr2r( timeIn, timeBuffer + offset, frameSize ); + } + + /* only process needed cols */ + if ( samplesToProcess > -1 ) + { + no_col = min( no_col, ( samplesToProcess + h_cldfb->no_channels - 1 ) / h_cldfb->no_channels ); + assert( no_col == 1 ); + } + + M1 = h_cldfb->no_channels; + M2 = M1 >> 1; + M4 = M1 >> 2; + L2 = M1 << 1; + + if ( M2 & 1 ) + { + M4 += 1; + } + + rot_vctr_re = h_cldfb->rot_vec_ana_re; + rot_vctr_im = h_cldfb->rot_vec_ana_im; + rot_vctr_delay_re = h_cldfb->rot_vec_ana_delay_re; + rot_vctr_delay_im = h_cldfb->rot_vec_ana_delay_im; + + ptr_pf = h_cldfb->p_filter; + + for ( i = 0; i < no_col; i++ ) + { + for ( k = 0; k < M4; k++ ) + { + /* prototype filter */ + r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; + + r2 = 0 - ptr_pf[( L2 - M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 0 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 1 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 2 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 3 * L2]; + r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 4 * L2]; + + i1 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; + i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; + + i2 = 0 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2]; + + /* folding + pre modulation of DST IV */ + rr12 = r1 - r2; + ri12 = -i1 - i2; + /*cplxMult(&rBuffer[2*k],&rBuffer[2*k+1],rr12,ri12,rot_vctr_re[k],rot_vctr_im[k]);*/ + rBuffer[2 * k] = rr12 * rot_vctr_re[k] - ri12 * rot_vctr_im[k]; + rBuffer[2 * k + 1] = rr12 * rot_vctr_im[k] + ri12 * rot_vctr_re[k]; + + /* folding + pre modulation of DCT IV */ + ir12 = r1 + r2; + ii12 = i1 - i2; + /*cplxMult(&iBuffer[2*k],&iBuffer[2*k+1],ir12,ii12,rot_vctr_re[k],rot_vctr_im[k]);*/ + iBuffer[2 * k] = ir12 * rot_vctr_re[k] - ii12 * rot_vctr_im[k]; + iBuffer[2 * k + 1] = ir12 * rot_vctr_im[k] + ii12 * rot_vctr_re[k]; + } + + for ( k = M4; k < M2; k++ ) + { + /* prototype filter */ + r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; + r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; + + r2 = 0 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 0 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 1 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 2 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 3 * L2]; + r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 4 * L2]; + + i1 = 0 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 0 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 1 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 2 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 3 * L2]; + i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 4 * L2]; + + i2 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; + i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; + + /* folding + pre modulation of DST IV */ + rr12 = r1 + r2; + ri12 = i1 - i2; + /*cplxMult(&rBuffer[2*k],&rBuffer[2*k+1],rr12,ri12,rot_vctr_re[k],rot_vctr_im[k]);*/ + rBuffer[2 * k] = rr12 * rot_vctr_re[k] - ri12 * rot_vctr_im[k]; + rBuffer[2 * k + 1] = rr12 * rot_vctr_im[k] + ri12 * rot_vctr_re[k]; + + /* folding + pre modulation of DCT IV */ + ir12 = r1 - r2; + ii12 = i1 + i2; + /*cplxMult(&iBuffer[2*k],&iBuffer[2*k+1],ir12,ii12,rot_vctr_re[k],rot_vctr_im[k]);*/ + iBuffer[2 * k] = ir12 * rot_vctr_re[k] - ii12 * rot_vctr_im[k]; + iBuffer[2 * k + 1] = ir12 * rot_vctr_im[k] + ii12 * rot_vctr_re[k]; + } + + /* FFT of DST IV */ + fft_cldfb( rBuffer, M2 ); + + /* post modulation of DST IV */ + for ( k = 0; k < M2; k++ ) + { + /*cplxMult(&realBuffer[M1-1-(2*k)],&realBuffer[2*k],rBuffer[2*k],rBuffer[2*k+1],rot_vctr_re[k],rot_vctr_im[k]);*/ + realBuffer[M1 - 1 - ( 2 * k )] = rBuffer[2 * k] * rot_vctr_re[k] - rBuffer[2 * k + 1] * rot_vctr_im[k]; + realBuffer[2 * k] = rBuffer[2 * k] * rot_vctr_im[k] + rBuffer[2 * k + 1] * rot_vctr_re[k]; + } + + /* FFT of DCT IV */ + fft_cldfb( iBuffer, M2 ); + + /* post modulation of DCT IV */ + for ( k = 0; k < M2; k++ ) + { + /* do it inplace */ + /*cplxMult(&imagBuffer[2*k],&imagBuffer[M1-1-(2*k)],iBuffer[2*k],iBuffer[2*k+1],rot_vctr_re[k],rot_vctr_im[k]);*/ + imagBuffer[2 * k] = iBuffer[2 * k] * rot_vctr_re[k] - iBuffer[2 * k + 1] * rot_vctr_im[k]; + imagBuffer[M1 - 1 - ( 2 * k )] = iBuffer[2 * k] * rot_vctr_im[k] + iBuffer[2 * k + 1] * rot_vctr_re[k]; + } + + if ( h_cldfb->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + /* rotation due to delay*/ + /*if(h_cldfb->da != M1)*/ + if ( rot_vctr_delay_re != NULL ) + { + for ( k = 0; k < M1; k++ ) + { + float cplx_aux; + /* delay */ + /*cplxMult(&rBuffer[k], &iBuffer[k], realBuffer[i][k], imagBuffer[i][k], cos((EVS_PI/M1)*(k+0.5)*((h_cldfb->da-M1)*0.5)), + sin((EVS_PI/M1)*(k+0.5)*((h_cldfb->da-M1)*0.5)));*/ + /*cplxMult(&rBuffer[k], &iBuffer[k], realBuffer[k], imagBuffer[k], rot_vctr_delay_re[k], rot_vctr_delay_im[k]);*/ + /*cplxMult(&realBuffer[k], &imagBuffer[k], realBuffer[k], imagBuffer[k], rot_vctr_delay_re[k], rot_vctr_delay_im[k]);*/ + /*realBuffer[k] = rBuffer[k]; + imagBuffer[k] = iBuffer[k];*/ + cplx_aux = realBuffer[k] * rot_vctr_delay_re[k] - imagBuffer[k] * rot_vctr_delay_im[k]; + imagBuffer[k] = realBuffer[k] * rot_vctr_delay_im[k] + imagBuffer[k] * rot_vctr_delay_re[k]; + realBuffer[k] = cplx_aux; + } + } + } + + timeBuffer += L2 * 5; + timeBuffer += h_cldfb->no_channels - h_cldfb->p_filter_length; + } + + /* update memory */ + if ( samplesToProcess > -1 ) + { + mvr2r( buffer + samplesToProcess, h_cldfb->cldfb_state, offset ); + } + else + { + mvr2r( buffer + frameSize, h_cldfb->cldfb_state, offset ); + } + + return; +} + +/*-------------------------------------------------------------------* + * cldfbSynthesis() + * + * Conduct inverse multple overlap cmplex low delay MDCT + *--------------------------------------------------------------------*/ + +void cldfbSynthesis( + float **realBuffer, /* i : real values */ + float **imagBuffer, /* i : imag values */ + float *timeOut, /* o : output time domain samples */ + const int16_t samplesToProcess, /* i : number of processed samples */ + HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filter bank state */ +) +{ + int16_t i; + int16_t k; + int16_t L2; + int16_t M1; + int16_t M2; + int16_t M41; + int16_t M42; + int16_t Mz; + + float rBuffer[2 * CLDFB_NO_CHANNELS_MAX]; + float iBuffer[2 * CLDFB_NO_CHANNELS_MAX]; + const float *rot_vctr_re; + const float *rot_vctr_im; + const float *rot_vctr_delay_re; + const float *rot_vctr_delay_im; + float rr12, ir12; + float ri12, ii12; + + float *synthesisBuffer, buffer[( CLDFB_NO_CHANNELS_MAX * CLDFB_NO_COL_MAX ) + ( 10 * CLDFB_NO_CHANNELS_MAX )]; + float new_samples[2 * CLDFB_NO_CHANNELS_MAX]; + + float *ptr_time_out; + const float *p_filter; + + float accu0, accu1, accu2, accu3, accu4; + int16_t no_col = h_cldfb->no_col; + + M1 = h_cldfb->no_channels; + L2 = M1 << 1; + M2 = M1 >> 1; + M41 = M2 >> 1; + M42 = M2 - M41; + Mz = M1 - h_cldfb->bandsToZero; + + /* only process needed cols */ + if ( samplesToProcess > -1 ) + { + no_col = min( no_col, ( samplesToProcess + h_cldfb->no_channels - 1 ) / h_cldfb->no_channels ); + } + + rot_vctr_re = h_cldfb->rot_vec_syn_re; + rot_vctr_im = h_cldfb->rot_vec_syn_im; + + rot_vctr_delay_re = h_cldfb->rot_vec_syn_delay_re; + rot_vctr_delay_im = h_cldfb->rot_vec_syn_delay_im; + + synthesisBuffer = buffer; + mvr2r( h_cldfb->cldfb_state, synthesisBuffer + ( M1 * no_col ), h_cldfb->p_filter_length ); + + p_filter = h_cldfb->p_filter; + ptr_time_out = timeOut; + + /*synthesisBuffer += M1 * h_cldfb->no_col;*/ + synthesisBuffer += M1 * no_col; + + for ( k = 0; k < no_col; k++ ) + { + if ( h_cldfb->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + /* rotation due to delay*/ + /*if(h_cldfb->ds != M1)*/ + if ( rot_vctr_delay_re != NULL ) + { + for ( i = 0; i < M1; i++ ) + { + float cplx_aux; + /* delay */ + /*cplxMult(&rBuffer[i], &iBuffer[i], realBuffer[k][i], imagBuffer[k][i], cos((EVS_PI/M1)*(i+0.5)*(-(h_cldfb->ds-M1)*0.5)), + sin((EVS_PI/M1)*(i+0.5)*(-(h_cldfb->ds-M1)*0.5)));*/ + /*cplxMult(&rBuffer[i], &iBuffer[i], realBuffer[k][i], imagBuffer[k][i], rot_vctr_delay_re[i], rot_vctr_delay_im[i]);*/ + /*cplxMult(&realBuffer[k][i], &imagBuffer[k][i], realBuffer[k][i], imagBuffer[k][i], rot_vctr_delay_re[i], rot_vctr_delay_im[i]);*/ + cplx_aux = realBuffer[k][i] * rot_vctr_delay_re[i] - imagBuffer[k][i] * rot_vctr_delay_im[i]; + imagBuffer[k][i] = realBuffer[k][i] * rot_vctr_delay_im[i] + imagBuffer[k][i] * rot_vctr_delay_re[i]; + realBuffer[k][i] = cplx_aux; + /*realBuffer[k][i] = rBuffer[i]; + imagBuffer[k][i] = iBuffer[i];*/ + } + } + } + for ( i = Mz; i < M1; i++ ) + { + realBuffer[k][i] = 0.0f; + imagBuffer[k][i] = 0.0f; + } + + for ( i = 0; i < M2; i++ ) + { + /* pre modulation of DST IV */ + /*cplxMult(&rBuffer[2*i], &rBuffer[2*i+1], realBuffer[k][2*i], realBuffer[k][M1-1-2*i], rot_vctr_re[i], rot_vctr_im[i]);*/ + rBuffer[2 * i] = realBuffer[k][2 * i] * rot_vctr_re[i] - realBuffer[k][M1 - 1 - 2 * i] * rot_vctr_im[i]; + rBuffer[2 * i + 1] = realBuffer[k][2 * i] * rot_vctr_im[i] + realBuffer[k][M1 - 1 - 2 * i] * rot_vctr_re[i]; + + /* pre modulation of DCT IV */ + /*cplxMult(&iBuffer[2*i], &iBuffer[2*i+1],-imagBuffer[k][2*i], imagBuffer[k][M1-1-2*i], rot_vctr_re[i], rot_vctr_im[i]);*/ + iBuffer[2 * i] = ( -( imagBuffer[k][2 * i] ) ) * rot_vctr_re[i] - imagBuffer[k][M1 - 1 - 2 * i] * rot_vctr_im[i]; + iBuffer[2 * i + 1] = ( -( imagBuffer[k][2 * i] ) ) * rot_vctr_im[i] + imagBuffer[k][M1 - 1 - 2 * i] * rot_vctr_re[i]; + } + + /* FFT of DST IV */ + fft_cldfb( rBuffer, M2 ); + + /* FFT of DCT IV */ + fft_cldfb( iBuffer, M2 ); + + /* folding */ + for ( i = 0; i < M41; i++ ) + { + /* post modulation of DST IV */ + rr12 = rBuffer[M1 - 2 - 2 * i] * rot_vctr_re[M2 - 1 - i] - rBuffer[M1 - 1 - 2 * i] * rot_vctr_im[M2 - 1 - i]; + ri12 = rBuffer[M1 - 2 - 2 * i] * rot_vctr_im[M2 - 1 - i] + rBuffer[M1 - 1 - 2 * i] * rot_vctr_re[M2 - 1 - i]; + + /* post modulation of DCT IV */ + ir12 = iBuffer[M1 - 2 - 2 * i] * rot_vctr_re[M2 - 1 - i] - iBuffer[M1 - 1 - 2 * i] * rot_vctr_im[M2 - 1 - i]; + ii12 = iBuffer[M1 - 2 - 2 * i] * rot_vctr_im[M2 - 1 - i] + iBuffer[M1 - 1 - 2 * i] * rot_vctr_re[M2 - 1 - i]; + + new_samples[M1 + M2 + 1 + 2 * i] = -rr12 - ii12; + new_samples[M2 - 2 - 2 * i] = -ri12 - ir12; + + new_samples[M1 + M2 - 2 - 2 * i] = rr12 - ii12; + new_samples[M2 + 1 + 2 * i] = ir12 - ri12; + } + + for ( i = 0; i < M42; i++ ) + { + /* post modulation of DST IV */ + rr12 = rBuffer[2 * i] * rot_vctr_re[i] - rBuffer[2 * i + 1] * rot_vctr_im[i]; + ri12 = rBuffer[2 * i] * rot_vctr_im[i] + rBuffer[2 * i + 1] * rot_vctr_re[i]; + + /* post modulation of DCT IV */ + ir12 = iBuffer[2 * i] * rot_vctr_re[i] - iBuffer[2 * i + 1] * rot_vctr_im[i]; + ii12 = iBuffer[2 * i] * rot_vctr_im[i] + iBuffer[2 * i + 1] * rot_vctr_re[i]; + + new_samples[M1 + M2 + 2 * i] = ri12 + ir12; + new_samples[M2 - 1 - 2 * i] = rr12 + ii12; + + new_samples[M1 + M2 - 1 - 2 * i] = ir12 - ri12; + new_samples[M2 + 2 * i] = rr12 - ii12; + } + + /* synthesis prototype filter */ + for ( i = 0; i < L2; i++ ) + { + accu0 = synthesisBuffer[0 * L2 + i] + p_filter[( 0 * L2 + i )] * new_samples[L2 - 1 - i]; + accu1 = synthesisBuffer[1 * L2 + i] + p_filter[( 1 * L2 + i )] * new_samples[L2 - 1 - i]; + accu2 = synthesisBuffer[2 * L2 + i] + p_filter[( 2 * L2 + i )] * new_samples[L2 - 1 - i]; + accu3 = synthesisBuffer[3 * L2 + i] + p_filter[( 3 * L2 + i )] * new_samples[L2 - 1 - i]; + accu4 = synthesisBuffer[4 * L2 + i] + p_filter[( 4 * L2 + i )] * new_samples[L2 - 1 - i]; + + synthesisBuffer[0 * L2 + i] = accu0; + synthesisBuffer[1 * L2 + i] = accu1; + synthesisBuffer[2 * L2 + i] = accu2; + synthesisBuffer[3 * L2 + i] = accu3; + synthesisBuffer[4 * L2 + i] = accu4; + } + + for ( i = 0; i < M1; i++ ) + { + ptr_time_out[M1 - 1 - i] = synthesisBuffer[4 * L2 + M1 + i]; + } + + ptr_time_out += M1; + + synthesisBuffer -= M1; + + set_f( synthesisBuffer, 0, M1 ); + } + + /* update memory */ + mvr2r( buffer, h_cldfb->cldfb_state, h_cldfb->p_filter_length ); + + return; +} + +/*-------------------------------------------------------------------* + * configureClfdb() + * + * configures a CLDFB handle + *--------------------------------------------------------------------*/ + +void configureCldfb( + HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ + const int32_t sampling_rate /* i : sampling rate */ +) +{ + + h_cldfb->no_col = CLDFB_NO_COL_MAX; + h_cldfb->bandsToZero = 0; + h_cldfb->nab = 0; + + h_cldfb->no_channels = (int16_t) ( sampling_rate * INV_CLDFB_BANDWIDTH + 0.5f ); + h_cldfb->p_filter_length = 10 * h_cldfb->no_channels; + + cldfb_init_proto_and_twiddles( h_cldfb ); + + return; +} + +/*-------------------------------------------------------------------* + * openClfdb() + * + * open and configures a CLDFB handle + *--------------------------------------------------------------------*/ + +ivas_error openCldfb( + HANDLE_CLDFB_FILTER_BANK *h_cldfb, /* i/o: filter bank handle */ + CLDFB_TYPE type, /* i : analysis or synthesis */ + const int32_t sampling_rate, /* i : sampling rate */ + CLDFB_PROTOTYPE prototype /* i : CLDFB version (1.25ms/5ms delay) */ +) +{ + HANDLE_CLDFB_FILTER_BANK hs; + int16_t buf_len; + + hs = (HANDLE_CLDFB_FILTER_BANK) count_malloc( sizeof( CLDFB_FILTER_BANK ) ); + if ( hs == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); + } + + hs->type = type; + hs->prototype = prototype; + + configureCldfb( hs, sampling_rate ); + hs->memory = NULL; + hs->memory_length = 0; + + if ( type == CLDFB_ANALYSIS ) + { + buf_len = hs->p_filter_length - hs->no_channels; + } + else + { + buf_len = hs->p_filter_length; + } + + hs->cldfb_state = (float *) count_malloc( buf_len * sizeof( float ) ); + if ( hs->cldfb_state == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); + } + + set_f( hs->cldfb_state, 0.0f, buf_len ); + + *h_cldfb = hs; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * resampleCldfb() + * + * Change sample rate of filter bank + *--------------------------------------------------------------------*/ + +void resampleCldfb( + HANDLE_CLDFB_FILTER_BANK hs, /* i/o: filter bank handle */ + const int32_t newSamplerate ) +{ + int16_t timeOffset; + + /* keep old parameters before switching*/ + int16_t timeOffsetold = hs->p_filter_length - hs->no_channels; + + /* new settings */ + configureCldfb( hs, newSamplerate ); + timeOffset = hs->p_filter_length - hs->no_channels; + + /*low complexity-resampling only stored previous samples that are needed for next frame modulation */ + lerp( hs->cldfb_state, hs->cldfb_state, timeOffset, timeOffsetold ); + + return; +} + +/*-------------------------------------------------------------------* + * analysisCLDFBEncoder() + * + * Encoder CLDFB analysis + energy stage + *--------------------------------------------------------------------*/ + +void analysisCldfbEncoder( + Encoder_State *st, /* i/o: encoder state structure */ + const float *timeIn, + const int16_t samplesToProcess, + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float *ppBuf_Ener ) +{ + int16_t i; + float *ppBuf_Real[CLDFB_NO_COL_MAX]; + float *ppBuf_Imag[CLDFB_NO_COL_MAX]; + + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + ppBuf_Real[i] = &realBuffer[i][0]; + ppBuf_Imag[i] = &imagBuffer[i][0]; + } + + cldfbAnalysis( timeIn, ppBuf_Real, ppBuf_Imag, samplesToProcess, st->cldfbAnaEnc ); + + st->currEnergyHF = GetEnergyCldfb( ppBuf_Ener, &st->currEnergyLookAhead, ppBuf_Real, ppBuf_Imag, st->cldfbAnaEnc->no_channels, st->cldfbAnaEnc->no_col, st->hTECEnc ); + + return; +} + +/*-------------------------------------------------------------------* + * GetEnergyCldfb() + * + * Conduct energy from complex data + *--------------------------------------------------------------------*/ + +static float GetEnergyCldfb( + float *energyValuesSum, /* o : the result of the operation */ + float *energyLookahead, /* o : the result in the core look-ahead slot */ + float **realValues, /* i : the real part of the subsamples */ + float **imagValues, /* i : the imaginary part of the subsamples */ + const int16_t numberBands, /* i : number of bands */ + int16_t numberCols, /* i : number of subsamples */ + TEC_ENC_HANDLE hTecEnc /* i/o: TEC handle */ +) +{ + int16_t j, k; + float energyValues[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + int16_t numLookahead = 1; + + for ( k = 0; k < numberCols; k++ ) + { + for ( j = 0; j < numberBands; j++ ) + { + energyValues[k][j] = realValues[k][j] * realValues[k][j] + + imagValues[k][j] * imagValues[k][j]; + } + } + + if ( numberBands >= freqTable[1] && hTecEnc != NULL ) + { + float *tempEnergyValuesArry[CLDFB_NO_COL_MAX]; + + assert( numberCols == CLDFB_NO_COL_MAX ); + for ( j = 0; j < numberCols; j++ ) + { + tempEnergyValuesArry[j] = &energyValues[j][0]; + } + + calcHiEnvLoBuff( numberCols, freqTable, 1, tempEnergyValuesArry, hTecEnc->loBuffer, hTecEnc->hiTempEnv ); + } + + for ( j = 0; j < numberBands; j++ ) + { + energyValuesSum[j] = 0; + for ( k = 0; k < CLDFB_NO_COL_MAX; k++ ) + { + energyValuesSum[j] += energyValues[k][j]; + } + } + + if ( numberBands > 20 ) + { + float energyHF = *energyLookahead; /* energy above 8 kHz */ + numberCols -= numLookahead; + *energyLookahead = 6.1e-5f; /* process look-ahead region */ + + for ( j = 20; j < min( 40, numberBands ); j++ ) + { + energyHF += energyValuesSum[j]; + + for ( k = numberCols; k < CLDFB_NO_COL_MAX; k++ ) + { + energyHF -= energyValues[k][j]; + *energyLookahead += energyValues[k][j]; + } + } + + return energyHF * OUTMAX_SQ_INV; + } + + return 65535.0f; +} + + +/*-------------------------------------------------------------------* + * GetEnergyCldfb() + * + * Remove handle + *--------------------------------------------------------------------*/ + +void deleteCldfb( + HANDLE_CLDFB_FILTER_BANK *h_cldfb /* i/o: filter bank handle */ +) +{ + HANDLE_CLDFB_FILTER_BANK hs = *h_cldfb; + + if ( hs ) + { + if ( hs->cldfb_state ) + { + count_free( hs->cldfb_state ); + } + count_free( hs ); + *h_cldfb = NULL; + } + + return; +} + + +/*-------------------------------------------------------------------* + * cldfb_init_proto_and_twiddles() + * + * Initializes rom pointer + *--------------------------------------------------------------------*/ + +static void cldfb_init_proto_and_twiddles( + HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ +) +{ + /*find appropriate set of rotVecs*/ + switch ( hs->no_channels ) + { + case 10: + hs->rot_vec_ana_re = rot_vec_ana_re_L10; + hs->rot_vec_ana_im = rot_vec_ana_im_L10; + hs->rot_vec_syn_re = rot_vec_syn_re_L10; + hs->rot_vec_syn_im = rot_vec_syn_im_L10; + + if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + { + hs->p_filter = CLDFB80_10; + hs->scale = CLDFB80_10_SCALE; + hs->ds = 10; + hs->da = 10; + hs->rot_vec_ana_delay_re = NULL; + hs->rot_vec_ana_delay_im = NULL; + hs->rot_vec_syn_delay_re = NULL; + hs->rot_vec_syn_delay_im = NULL; + } + else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + hs->p_filter = LDQMF_10; + hs->scale = LDQMF_10_SCALE; + hs->ds = 40; + hs->da = -20; + hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; + hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; + } + break; + + case 16: + hs->rot_vec_ana_re = rot_vec_ana_re_L16; + hs->rot_vec_ana_im = rot_vec_ana_im_L16; + hs->rot_vec_syn_re = rot_vec_syn_re_L16; + hs->rot_vec_syn_im = rot_vec_syn_im_L16; + if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + { + hs->p_filter = CLDFB80_16; + hs->scale = CLDFB80_16_SCALE; + hs->ds = 20; + hs->da = 20; + hs->rot_vec_ana_delay_re = NULL; + hs->rot_vec_ana_delay_im = NULL; + hs->rot_vec_syn_delay_re = NULL; + hs->rot_vec_syn_delay_im = NULL; + } + else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + hs->p_filter = LDQMF_16; + hs->scale = LDQMF_16_SCALE; + hs->ds = 80; + hs->da = -40; + hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; + hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; + } + break; + + case 20: + hs->rot_vec_ana_re = rot_vec_ana_re_L20; + hs->rot_vec_ana_im = rot_vec_ana_im_L20; + hs->rot_vec_syn_re = rot_vec_syn_re_L20; + hs->rot_vec_syn_im = rot_vec_syn_im_L20; + if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + { + hs->p_filter = CLDFB80_20; + hs->scale = CLDFB80_20_SCALE; + hs->ds = 20; + hs->da = 20; + hs->rot_vec_ana_delay_re = NULL; + hs->rot_vec_ana_delay_im = NULL; + hs->rot_vec_syn_delay_re = NULL; + hs->rot_vec_syn_delay_im = NULL; + } + else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + hs->p_filter = LDQMF_20; + hs->scale = LDQMF_20_SCALE; + hs->ds = 80; + hs->da = -40; + hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; + hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; + } + break; + + case 30: + hs->rot_vec_ana_re = rot_vec_ana_re_L30; + hs->rot_vec_ana_im = rot_vec_ana_im_L30; + hs->rot_vec_syn_re = rot_vec_syn_re_L30; + hs->rot_vec_syn_im = rot_vec_syn_im_L30; + if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + { + hs->p_filter = CLDFB80_30; + hs->scale = CLDFB80_30_SCALE; + hs->ds = 30; + hs->da = 30; + hs->rot_vec_ana_delay_re = NULL; + hs->rot_vec_ana_delay_im = NULL; + hs->rot_vec_syn_delay_re = NULL; + hs->rot_vec_syn_delay_im = NULL; + } + else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + hs->p_filter = LDQMF_30; + hs->scale = LDQMF_30_SCALE; + hs->ds = 120; + hs->da = -60; + hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; + hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; + } + break; + + case 32: + hs->rot_vec_ana_re = rot_vec_ana_re_L32; + hs->rot_vec_ana_im = rot_vec_ana_im_L32; + hs->rot_vec_syn_re = rot_vec_syn_re_L32; + hs->rot_vec_syn_im = rot_vec_syn_im_L32; + if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + { + hs->p_filter = CLDFB80_32; + hs->scale = CLDFB80_32_SCALE; + hs->ds = 32; + hs->da = 32; + hs->rot_vec_ana_delay_re = NULL; + hs->rot_vec_ana_delay_im = NULL; + hs->rot_vec_syn_delay_re = NULL; + hs->rot_vec_syn_delay_im = NULL; + } + else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + hs->p_filter = LDQMF_32; + hs->scale = LDQMF_32_SCALE; + hs->ds = 160; + hs->da = -80; + hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; + hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; + } + break; + + case 40: + hs->rot_vec_ana_re = rot_vec_ana_re_L40; + hs->rot_vec_ana_im = rot_vec_ana_im_L40; + hs->rot_vec_syn_re = rot_vec_syn_re_L40; + hs->rot_vec_syn_im = rot_vec_syn_im_L40; + if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + { + hs->p_filter = CLDFB80_40; + hs->scale = CLDFB80_40_SCALE; + hs->ds = 40; + hs->da = 40; + hs->rot_vec_ana_delay_re = NULL; + hs->rot_vec_ana_delay_im = NULL; + hs->rot_vec_syn_delay_re = NULL; + hs->rot_vec_syn_delay_im = NULL; + } + else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + hs->p_filter = LDQMF_40; + hs->scale = LDQMF_40_SCALE; + hs->ds = 160; + hs->da = -80; + hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; + hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; + } + break; + + case 60: + hs->rot_vec_ana_re = rot_vec_ana_re_L60; + hs->rot_vec_ana_im = rot_vec_ana_im_L60; + hs->rot_vec_syn_re = rot_vec_syn_re_L60; + hs->rot_vec_syn_im = rot_vec_syn_im_L60; + if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + { + hs->p_filter = CLDFB80_60; + hs->scale = CLDFB80_60_SCALE; + hs->ds = 60; + hs->da = 60; + hs->rot_vec_ana_delay_re = NULL; + hs->rot_vec_ana_delay_im = NULL; + hs->rot_vec_syn_delay_re = NULL; + hs->rot_vec_syn_delay_im = NULL; + } + else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + { + hs->p_filter = LDQMF_60; + hs->scale = LDQMF_60_SCALE; + hs->ds = 240; + hs->da = -120; + hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; + hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; + hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; + } + break; + } + + return; +} + + +/*-------------------------------------------------------------------* + * cldfb_save_memory() + * + * Save the memory of filter; to be restored with cldfb_restore_memory() + *--------------------------------------------------------------------*/ + +ivas_error cldfb_save_memory( + HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ +) +{ + uint16_t offset = hs->p_filter_length - hs->no_channels; + + if ( hs->memory != NULL || hs->memory_length != 0 ) + { + /* memory already stored; Free memory first */ + return IVAS_ERR_OK; + } + + if ( hs->type == CLDFB_ANALYSIS ) + { + hs->memory_length = offset; + } + else + { + hs->memory_length = hs->p_filter_length; + } + + hs->memory = (float *) count_malloc( hs->memory_length * sizeof( float ) ); + if ( hs->memory == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB\n" ); + } + + /* save the memory */ + mvr2r( hs->cldfb_state, hs->memory, hs->memory_length ); + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * cldfb_restore_memory() + * + * Restores the memory of filter; memory to be save by cldfb_save_memory() + *--------------------------------------------------------------------*/ + +void cldfb_restore_memory( + HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ +) +{ + uint16_t offset = hs->p_filter_length - hs->no_channels; + uint16_t size; + + if ( hs->memory == NULL || hs->memory_length == 0 ) + { + /* memory not allocated */ + return; + } + + if ( hs->type == CLDFB_ANALYSIS ) + { + size = offset; + } + else + { + size = hs->p_filter_length; + } + + /* read the memory */ + mvr2r( hs->memory, hs->cldfb_state, hs->memory_length ); + + /* adjust sample rate if it was changed in the meanwhile */ + if ( hs->memory_length != size ) + { + lerp( hs->cldfb_state, hs->cldfb_state, size, hs->memory_length ); + } + + hs->memory_length = 0; + count_free( hs->memory ); + hs->memory = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * cldfb_reset_memory() + * + * Resets the memory of filter. + *--------------------------------------------------------------------*/ + +void cldfb_reset_memory( + HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ +) +{ + uint16_t offset = hs->p_filter_length - hs->no_channels; + int16_t memory_length; + + if ( hs->type == CLDFB_ANALYSIS ) + { + memory_length = offset; + } + else + { + memory_length = hs->p_filter_length; + } + + /* save the memory */ + set_f( hs->cldfb_state, 0, memory_length ); + + return; +} diff --git a/lib_com/cng_exc.c b/lib_com/cng_exc.c new file mode 100644 index 0000000000..62955ee955 --- /dev/null +++ b/lib_com/cng_exc.c @@ -0,0 +1,621 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define A2 0.2f +#define GAIN_VAR 0.000011f + +/*-------------------------------------------------------* + * CNG_exc() + * + * Comfort noise generation routine + *-------------------------------------------------------*/ + +void CNG_exc( + const int32_t core_brate, /* i : core bitrate */ + const int16_t L_frame, /* i : length of the frame */ + float *Enew, /* i/o: decoded SID energy */ + int16_t *seed, /* i/o: random generator seed */ + float exc[], /* o : current non-enhanced excitation */ + float exc2[], /* o : current enhanced excitation */ + float *lp_ener, /* i/o: LP filtered E */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + int16_t *first_CNG, /* i/o: first CNG frame flag for energy init. */ + int16_t *cng_ener_seed, /* i/o: random generator seed for CNG energy */ + float bwe_exc[], /* o : excitation for SWB TBE */ + const int16_t allow_cn_step, /* i : allow CN step */ + int16_t *last_allow_cn_step, /* i/o: last allow step */ + const int16_t num_ho, /* i : number of selected hangover frames */ + float q_env[], + float *lp_env, + float *old_env, + float *exc_mem, + float *exc_mem1, + int16_t *sid_bw, + int16_t *cng_ener_seed1, + float exc3[], + const int16_t Opt_AMR_WB, /* i : AMR-WB interop flag */ + const int16_t element_mode /* i : IVAS Element mode */ +) +{ + float enr; + int16_t i; + float ener_lp; + int16_t i_subfr; + int16_t pit_max; + float ftmp; + float *ptR, *ptI; + float fft_io[L_FRAME16k]; + float itmp[129]; + float env[NUM_ENV_CNG]; + float enr1; + float denv[NUM_ENV_CNG]; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + if ( L_frame == L_FRAME ) + { + pit_max = PIT_MAX; + } + else /* L_frame == L_FRAME16k */ + { + pit_max = PIT16k_MAX; + } + + /*---------------------------------------------------------------------* + * Initialization of CNG energy for the first CNG frame + *---------------------------------------------------------------------*/ + + if ( *first_CNG == 0 ) + { + if ( core_brate == FRAME_NO_DATA ) + { + /* needed only in decoder when the very first SID frame was erased and this frame is FRAME_NO_DATA frame */ + *Enew = dotp( exc - pit_max, exc - pit_max, pit_max ) / pit_max; + } + + if ( element_mode == EVS_MONO ) + { + *lp_ener = *Enew; + } + } + + /*---------------------------------------------------------------------* + * Update CNG energy + *---------------------------------------------------------------------*/ + + if ( last_core_brate != SID_1k75 && last_core_brate != FRAME_NO_DATA && last_core_brate != SID_2k40 ) + { + /* Partially reset CNG energy after active speech period */ + if ( allow_cn_step == 0 && *last_allow_cn_step == 0 ) + { + if ( num_ho < 3 || *Enew < 1.5f * *lp_ener ) + { + *lp_ener = 0.8f * *lp_ener + 0.2f * *Enew; + } + else + { + *lp_ener = 0.95f * *lp_ener + 0.05f * *Enew; + } + } + else + { + *lp_ener = *Enew; + *last_allow_cn_step = 0; + } + } + else + { + /* normal CNG update */ + if ( *last_allow_cn_step == 0 ) + { + *lp_ener = (float) ( A2 * *Enew + ( 1 - A2 ) * *lp_ener ); + } + else + { + if ( core_brate == SID_1k75 || core_brate == SID_2k40 ) + { + *last_allow_cn_step = 0; + } + + *lp_ener = *Enew; + } + } + + if ( allow_cn_step == 1 ) + { + *last_allow_cn_step = 1; + } + + /* If not mono, skip CNG here */ + if ( element_mode > IVAS_SCE ) + { + return; + } + + /*---------------------------------------------------------------------* + * Generate white noise vector + *---------------------------------------------------------------------*/ + + for ( i = 0; i < L_frame; i++ ) + { + exc2[i] = (float) own_random( seed ); + } + + /*------------------------------------------------------------* + * Insert random variation for excitation energy + * (random variation is scaled according to *lp_ener value) + *------------------------------------------------------------*/ + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + ener_lp = ( ( own_random( cng_ener_seed ) * ( *lp_ener ) ) * GAIN_VAR ) + ( *lp_ener ); + + if ( ener_lp < 0.0f ) + { + ener_lp = 0.01f; + } + enr = dotp( &exc2[i_subfr], &exc2[i_subfr], L_SUBFR ) + 0.01f; + + enr = (float) sqrt( ener_lp * L_SUBFR / enr ); + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i_subfr + i] *= enr; + } + } + + if ( Opt_AMR_WB != 1 ) + { + mvr2r( exc2, exc3, L_FRAME16k ); + + enr1 = (float) log10( *Enew * L_frame + 0.1f ) / (float) log10( 2.0f ); + + if ( core_brate == SID_2k40 ) + { + if ( *sid_bw == 0 ) + { + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + /* get quantized envelope */ + env[i] = powf( 2.0f, ( enr1 - q_env[i] ) ); + } + } + + /* initialize CNG envelope */ + if ( *first_CNG == 0 && *sid_bw == 0 ) + { + mvr2r( env, lp_env, NUM_ENV_CNG ); + } + + if ( *sid_bw == 0 ) + { + mvr2r( env, old_env, NUM_ENV_CNG ); + } + } + + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + /* get AR low-passed envelope */ + lp_env[i] = 0.9f * lp_env[i] + ( 1 - 0.9f ) * old_env[i]; + } + + /* calculate the spectrum of random excitation signal */ + mvr2r( exc2, fft_io, L_frame ); + + if ( L_frame == L_FRAME16k ) + { + modify_Fs( fft_io, L_FRAME16k, 16000, fft_io, 12800, exc_mem1, 0 ); + } + + fft_rel( fft_io, L_FFT, LOG2_L_FFT ); + ptR = &fft_io[1]; + ptI = &fft_io[L_FFT - 1]; + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + env[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; + ptR++; + ptI--; + } + + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + denv[i] = lp_env[i] + 2 * ( *lp_ener ) - env[i]; + + if ( denv[i] < 0 ) + { + denv[i] = 0; + } + } + set_f( itmp, 0.0f, NUM_ENV_CNG ); + + set_f( fft_io, 0.0f, L_FFT ); + ptR = &fft_io[1]; + ptI = &fft_io[L_FFT - 1]; + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + *ptR = own_random( cng_ener_seed1 ); + *ptI = own_random( cng_ener_seed1 ); + + env[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; + ptR++; + ptI--; + } + + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + itmp[i] += own_random( cng_ener_seed1 ) * denv[i] * 0.000011f + denv[i]; + + if ( itmp[i] < 0.0f ) + { + itmp[i] = 0; + } + } + + ptR = &fft_io[1]; + ptI = &fft_io[L_FFT - 1]; + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + *ptR = (float) ( *ptR * sqrt( itmp[i] / env[i] ) ); + *ptI = (float) ( *ptI * sqrt( itmp[i] / env[i] ) ); + + ptR++; + ptI--; + } + + ifft_rel( fft_io, L_FFT, LOG2_L_FFT ); + + if ( L_frame == L_FRAME16k ) + { + modify_Fs( fft_io, L_FFT, 12800, fft_io, 16000, exc_mem, 0 ); + } + + enr1 = dotp( fft_io, fft_io, L_frame ) / L_frame; + + /* add time domain randomization */ + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + enr = dotp( &fft_io[i_subfr], &fft_io[i_subfr], L_SUBFR ) + 0.01f; + ener_lp = ( ( own_random( cng_ener_seed1 ) * ( enr1 ) ) * 0.000011f ) + ( enr1 ); + ener_lp *= L_SUBFR; + enr = (float) sqrt( ener_lp / enr ); + + if ( last_core_brate != SID_2k40 && last_core_brate != SID_1k75 && last_core_brate != FRAME_NO_DATA && core_brate == SID_2k40 ) + { + if ( enr > 1 ) + { + enr = 1; + } + } + + for ( i = 0; i < L_SUBFR; i++ ) + { + fft_io[i_subfr + i] *= enr; + } + } + + for ( i = 0; i < L_frame; i++ ) + { + fft_io[i] = 0.75f * fft_io[i] + exc2[i]; + } + + enr = ( dotp( fft_io, fft_io, L_frame ) / L_frame ) + 0.01f; + enr = ( *lp_ener ) / enr; + + if ( enr > 1 ) + { + enr = 1; + } + + ftmp = sqrtf( enr ); + for ( i = 0; i < L_frame; i++ ) + { + fft_io[i] *= ftmp; + } + + mvr2r( fft_io, exc2, L_frame ); + } + if ( Opt_AMR_WB != 1 ) + { + mvr2r( exc3, exc, L_frame ); + } + else + { + mvr2r( exc2, exc, L_frame ); + } + + if ( L_frame == L_FRAME ) + { + interp_code_5over2( exc2, bwe_exc, L_frame ); + } + else + { + interp_code_4over2( exc2, bwe_exc, L_frame ); + } + + return; +} + + +/*-------------------------------------------------------* + * cng_params_postupd + * + * Post-update of CNG parameters + *-------------------------------------------------------*/ + +void cng_params_postupd( + const int16_t ho_circ_ptr, /* i : pointer for CNG averaging buffers */ + int16_t *cng_buf_cnt, /* i/o: counter for CNG store buffers */ + const float *cng_exc2_buf, /* i : Excitation buffer */ + const int32_t *cng_brate_buf, /* i : bitrate buffer */ + float ho_env_circ[], /* i/o: Envelope buffer */ + const int16_t element_mode, /* i : Element mode */ + const int16_t bwidth /* i : Audio bandwidth */ +) +{ + int16_t i, j; + const float *exc2; + float fft_io[L_FFT]; + float sp[129]; + float *ptR, *ptI; + float env[NUM_ENV_CNG]; + int16_t CNG_mode; + int16_t ptr; + float att; + int32_t last_active_brate; + + ptr = ho_circ_ptr - *cng_buf_cnt + 1; + if ( ptr < 0 ) + { + ptr += HO_HIST_SIZE; + } + + for ( j = 0; j < *cng_buf_cnt; j++ ) + { + exc2 = &cng_exc2_buf[ptr * L_FFT]; + last_active_brate = cng_brate_buf[ptr]; + + /* calculate the spectrum of residual signal */ + /* calculate the spectrum of residual signal */ + mvr2r( exc2, fft_io, L_FFT ); + + fft_rel( fft_io, L_FFT, LOG2_L_FFT ); + + ptR = &fft_io[1]; + ptI = &fft_io[L_FFT - 1]; + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + sp[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; + ptR++; + ptI--; + } + + mvr2r( sp, env, NUM_ENV_CNG ); + + if ( element_mode == IVAS_SCE || element_mode == IVAS_CPE_DFT ) + { + att = 0.0f; + apply_scale( &att, bwidth, last_active_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); + att = powf( 10, att / 10.0f ); + } + else + { + CNG_mode = get_cng_mode( last_active_brate ); + att = (float) ( 1 / pow( 2, ENR_ATT[CNG_mode] ) ); + } + + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + env[i] *= att; + } + + /* update the circular buffer of old residual envelope */ + mvr2r( env, &( ho_env_circ[(ho_circ_ptr) *NUM_ENV_CNG] ), NUM_ENV_CNG ); + + ptr++; + if ( ptr == HO_HIST_SIZE ) + { + ptr = 0; + } + } + + *cng_buf_cnt = 0; + + return; +} + + +/*-------------------------------------------------------* + * cng_params_upd() + * + * update CNG parameters + *-------------------------------------------------------*/ + +void cng_params_upd( + const float lsp_new[], /* i : LSP parameters */ + const float exc2[], /* i : current enhanced excitation */ + const int16_t L_frame, /* i : frame length */ + int16_t *ho_circ_ptr, /* i/o: pointer for CNG averaging buffers */ + float ho_ener_circ[], /* o : energy buffer for CNG averaging */ + int16_t *ho_circ_size, /* i/o: size of DTX hangover history buffer for averaging */ + float ho_lsp_circ[], /* o : old LSP buffer for CNG averaging */ + const int16_t enc_dec_flag, /* i : Flag indicating encoder or decoder (ENC,DEC) */ + float ho_env_circ[], /* i/o: Envelope buffer */ + int16_t *cng_buf_cnt, /* i/o: Counter of postponed FFT-processing instances */ + float cng_exc2_buf[], /* i/o: Excitation buffer */ + int32_t cng_brate_buf[], /* i/o: last_active_brate buffer */ + const int32_t last_active_brate, /* i : Last active bitrate */ + const int16_t element_mode, /* i : element mode */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + float enr; + float fft_io[L_FRAME16k]; + float sp[129]; + float *ptR, *ptI; + float env[NUM_ENV_CNG]; + int16_t i; + int16_t CNG_mode; + float att; + + /* update the pointer to circular buffer of old LSP vectors */ + ( *ho_circ_ptr )++; + if ( *ho_circ_ptr == HO_HIST_SIZE ) + { + *ho_circ_ptr = 0; + } + + /* update the circular buffer of old LSP vectors with the new LSP vector */ + mvr2r( lsp_new, &( ho_lsp_circ[( *ho_circ_ptr ) * M] ), M ); + + /* calculate the residual signal energy */ + enr = dotp( exc2, exc2, L_frame ) / L_frame; + + /* update the circular buffer of old energies */ + ho_ener_circ[*ho_circ_ptr] = enr; + + if ( enc_dec_flag == ENC ) + { + /* Store residual signal for postponed FFT-processing*/ + ( *cng_buf_cnt )++; + if ( *cng_buf_cnt > HO_HIST_SIZE ) + { + *cng_buf_cnt = HO_HIST_SIZE; + } + mvr2r( exc2, &( cng_exc2_buf[( *ho_circ_ptr ) * L_FFT] ), L_FFT ); + cng_brate_buf[*ho_circ_ptr] = last_active_brate; + } + else + { + + /* calculate the spectrum of residual signal */ + mvr2r( exc2, fft_io, L_frame ); + + fft_rel( fft_io, L_FFT, LOG2_L_FFT ); + + ptR = &fft_io[1]; + ptI = &fft_io[L_FFT - 1]; + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + sp[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; + ptR++; + ptI--; + } + + mvr2r( sp, env, NUM_ENV_CNG ); + + if ( element_mode == IVAS_SCE || element_mode == IVAS_CPE_DFT ) + { + att = 0.0f; + apply_scale( &att, bwidth, last_active_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); + att = powf( 10, att / 10.0f ); + } + else + { + CNG_mode = get_cng_mode( last_active_brate ); + att = (float) ( 1 / pow( 2, ENR_ATT[CNG_mode] ) ); + } + + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + env[i] *= att; + } + + /* update the circular buffer of old residual envelope */ + mvr2r( env, &( ho_env_circ[( *ho_circ_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); + } + + ( *ho_circ_size )++; + if ( *ho_circ_size > HO_HIST_SIZE ) + { + *ho_circ_size = HO_HIST_SIZE; + } + + return; +} + + +/*---------------------------------------------------------------------* + * get_cng_mode() + * + * + *---------------------------------------------------------------------*/ + +int16_t get_cng_mode( + const int32_t last_active_brate /* i : last active bitrate */ +) +{ + int16_t CNG_mode; + + if ( last_active_brate > ACELP_13k20 ) + { + CNG_mode = 4; + } + else if ( last_active_brate > ACELP_9k60 ) + { + CNG_mode = 3; + } + else if ( last_active_brate > ACELP_8k00 ) + { + CNG_mode = 2; + } + else if ( last_active_brate > ACELP_7k20 ) + { + CNG_mode = 1; + } + else + { + CNG_mode = 0; + } + + return ( CNG_mode ); +} diff --git a/lib_com/cnst.h b/lib_com/cnst.h new file mode 100644 index 0000000000..c591110109 --- /dev/null +++ b/lib_com/cnst.h @@ -0,0 +1,2216 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef CNST_H +#define CNST_H + +#include +#include "options.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * General constants + *----------------------------------------------------------------------------------*/ + +#define MODE1 1 +#define MODE2 2 + +#define EVS_PI 3.14159265358979323846264338327950288f + +#define PI2 ( 2 * EVS_PI ) +#define RANDOM_INITSEED 21845 /* Seed for random generators */ +#ifndef FLT_MIN +#define FLT_MIN ( 1.175494351e-38F ) +#endif +#ifndef FLT_MAX +#define FLT_MAX ( 3.402823466e+38F ) +#endif +#define TRUE 1 +#define FALSE 0 + +#define MAX16B 32767 +#define MIN16B ( -32768 ) +#define MAX16B_FLT 32767.0f +#define MIN16B_FLT ( -32768.0f ) +#define PCM16_TO_FLT_FAC 32768.0f + + +#define MAX_FRAME_COUNTER 200 +#define MAX_BITS_PER_FRAME 10240 /* Bits per frame for max. bitrate 512kbps */ + +#define ENC 0 /* Index for "encoder" */ +#define DEC 1 /* Index for "decoder" */ + +#define DEC_IVAS 2 /* Index for IVAS decoder */ + +#ifdef DEBUGGING +#define FORCE_SPEECH 100 /* debugging - force speech on the command line */ +#define FORCE_MUSIC 101 /* debugging - force music on the command line */ +#define FORCE_ACELP 102 /* debugging - force ACELP core on the command line */ +#define FORCE_GSC 103 /* debugging - force GSC core on the command line */ +#define FORCE_TCX 104 /* debugging - force TCX core on the command line */ +#define FORCE_HQ 105 /* debugging - force HQ core on the command line */ +#define FORCE_TD_RENDERER 201 +#define FORCE_CLDFB_RENDERER 202 +#endif + +enum{ + NB = 0, /* Indicator of 4 kHz bandwidth */ + WB = 1, /* Indicator of 8 kHz bandwidth */ + SWB = 2, /* Indicator of 14 kHz bandwidth */ + FB = 3 /* Indicator of 20 kHz bandwidth */ +}; + +/* Conversion of bandwidth string into numerical constant */ +#define CONV_BWIDTH( bw ) ( !strcmp( bw, "NB" ) ? NB : !strcmp( bw, "WB" ) ? WB : !strcmp( bw, "SWB" ) ? SWB : !strcmp( bw, "FB" ) ? FB : -1 ) + +#define L_FRAME48k 960 /* Frame size in samples at 48kHz */ +#define L_FRAME32k 640 /* Frame size in samples at 32kHz */ +#define L_FRAME25_6k 512 /* Frame size in samples at 25.6kHz */ +#define L_FRAME16k 320 /* Frame size in samples at 16kHz */ +#define L_FRAME8k 160 /* Frame size in samples at 8kHz */ +#define L_FRAME4k 80 /* Frame size in samples at 4kHz */ + +#define L_SPEC48k 800 /* HQ spectrum length at 48kHz */ +#define L_SPEC32k 640 /* HQ spectrum length at 32kHz */ +#define L_SPEC16k 320 /* HQ spectrum length at 16kHz */ +#define L_SPEC8k 160 /* HQ spectrum length at 8kHz */ +#define L_SPEC48k_EXT 1000 /* Extended HQ spectrum length at 48kHz, for ACELP->HQ switching */ +#define L_SPEC32k_EXT 800 /* Extended HQ spectrum length at 32kHz, for ACELP->HQ switching */ +#define L_SPEC16k_EXT 400 /* Extended HQ spectrum length at 16kHz, for ACELP->HQ switching */ +#define L_FRAME48k_EXT 1200 /* Extended MDCT frame size in samples at 48kHz */ + +/* Conversion of ns to samples for a given sampling frequency */ +#define NS2SA( fs, x ) ( int16_t )( ( ( ( int32_t )( fs ) / 100L ) * ( ( x ) / 100L ) ) / 100000L ) + +#define ACTIVE_FRAME 0xFF +#define SID_FRAME 0xFA +#define ZERO_FRAME 0xF0 +#define FRAME_SIZE_NB 13 + +#define RATE_MODE_MAX 2 /* Number of rate mode */ +#define BANDWIDTH_MODE_MAX 2 /* Number of different bandwidth (NB/WB-FB) */ + +#define MIN_LOG_60dB 0.000001f +#define MIN_LOG_VAL_60dB -60.0f + +#define INV_LOG_2 1.442695040888963f /* 1/log(2) */ +#define INV_SQRT_2 0.70710676908493f /* 1/sqrt(2) */ + +#define MAX_V_MULT_MAT 100 /* maximum array length for the function v_mult_mat() */ + +#define G192_BIN0 (uint16_t) 0x007F +#define G192_BIN1 (uint16_t) 0x0081 + + +/*----------------------------------------------------------------------------------* + * Layers + *----------------------------------------------------------------------------------*/ + +#define ACELP_CORE 0 /* ACELP core layer */ +#define TCX_20_CORE 1 /* TCX 20ms core layer */ +#define TCX_10_CORE 2 /* TCX 10ms core layer */ +#define HQ_CORE 3 /* HQ core layer */ +#define AMR_WB_CORE 4 /* AMR-WB IO core */ + + +#define WB_TBE 5 /* WB TBE layer (16/32/48kHz signals) */ +#define WB_BWE 6 /* WB BWE layer optimized for music (16/32/48kHz signals) */ + +#define SWB_CNG 7 /* SWB CNG layer (32/48kHz signals) */ +#define SWB_TBE 8 /* SWB TBE layer optimized for speech (32/48kHz signals) */ +#define SWB_BWE 9 /* SWB BWE layer optimized for music (32/48kHz signals) */ +#define SWB_BWE_HIGHRATE 10 /* SWB BWE layer optimized for highrate speech (32/48kHz) */ + +#define FB_TBE 11 /* FB TBE layer (48kHz signals) */ +#define FB_BWE 12 /* FB BWE layer optimized for music (48kHz) */ +#define FB_BWE_HIGHRATE 13 /* FB BWE layer optimized for highrate speech (48kHz) */ + +#define IGF_BWE 14 /* IGF layer for music (16.4 and 24.4kbps), 32kHz signals */ + +#define LP_CNG 0 /* LP-based CNG in DTX operation */ +#define FD_CNG 1 /* FD-based CNG in DTX operation */ + +/*----------------------------------------------------------------------------------* + * Bitrates + *----------------------------------------------------------------------------------*/ + +#define FRAME_NO_DATA 0 /* Frame with no data */ +#define SID_1k75 1750 /* SID at 1.75 kbps (used only in AMR-WB IO mode */ +#define SID_2k40 2400 /* SID at 2.40 kbps */ +#define PPP_NELP_2k80 2800 /* PPP and NELP at 2.80 kbps (used only for SC-VBR) */ +#define ACELP_5k90 5900 /* ACELP core layer at average bitrate of 5.90 kbps (used only in SC-VBR mode) */ +#define ACELP_5k00 5000 /* ACELP core layer at 5.00 kbps (used only in TD stereo secondary channel) */ +#define ACELP_6k15 6150 /* ACELP core layer at 6.15 kbps (used only in TD stereo secondary channel) */ +#define ACELP_6k60 6600 /* ACELP core layer at 6.60 kbps (used only in AMR-WB IO mode) */ +#define ACELP_7k20 7200 /* ACELP core layer at 7.20 kbps */ +#define ACELP_8k00 8000 /* ACELP core layer at 8 kbps */ +#define ACELP_8k85 8850 /* ACELP core layer at 8.85 kbps (used only in AMR-WB IO mode) */ +#define ACELP_9k60 9600 /* ACELP core layer at 9.60 kbps */ +#define ACELP_11k60 11600 /* ACELP core layer at 11.60 kbps (used for SWB TBE) */ +#define ACELP_12k15 12150 /* ACELP core layer at 12.15 kbps (used for WB TBE) */ +#define ACELP_12k65 12650 /* ACELP core layer at 12.65 kbps (used only in AMR-WB IO mode) */ +#define ACELP_12k85 12850 /* ACELP core layer at 12.85 kbps (used for WB BWE) */ +#define ACELP_13k20 13200 /* ACELP core layer at 13.20 kbps */ +#define ACELP_14k25 14250 /* ACELP core layer at 14.25 kbps (used only in AMR-WB IO mode) */ +#define ACELP_14k80 14800 /* ACELP core layer at 14.80 kbps (used only in core switching) */ +#define ACELP_15k85 15850 /* ACELP core layer at 15.85 kbps (used only in AMR-WB IO mode) */ +#define ACELP_16k40 16400 /* ACELP core layer at 16.40 kbps */ +#define ACELP_18k25 18250 /* ACELP core layer at 18.25 kbps (used only in AMR-WB IO mode) */ +#define ACELP_19k85 19850 /* ACELP core layer at 19.85 kbps (used only in AMR-WB IO mode) */ +#define ACELP_22k60 22600 /* ACELP core layer at 22.60 kbps (used only in core switching) */ +#define ACELP_23k05 23050 /* ACELP core layer at 23.05 kbps (used only in AMR-WB IO mode) */ +#define ACELP_23k85 23850 /* ACELP core layer at 23.85 kbps (used only in AMR-WB IO mode) */ +#define ACELP_24k40 24400 /* ACELP core layer at 24.40 kbps */ +#define ACELP_29k00 29000 /* ACELP core layer at 29.00 kbps (used for FB + SWB TBE) */ +#define ACELP_29k20 29200 /* ACELP core layer at 29.20 kbps (used for SWB TBE) */ +#define ACELP_30k20 30200 /* ACELP core layer at 30.20 kbps (used for FB + SWB BWE) */ +#define ACELP_30k40 30400 /* ACELP core layer at 30.40 kbps (used for SWB BWE) */ +#define ACELP_32k 32000 /* ACELP core layer at 32 kbps */ +#define ACELP_48k 48000 /* ACELP core layer at 48 kbps */ +#define ACELP_64k 64000 /* ACELP core layer at 64 kbps */ + +#define HQ_16k40 16400 /* HQ core at 16.4 kbps */ +#define HQ_13k20 13200 /* HQ core at 13.2 kbps */ +#define HQ_24k40 24400 /* HQ core at 24.4 kbps */ +#define HQ_32k 32000 /* HQ core at 32 kbps */ +#define HQ_48k 48000 /* HQ core at 48 kbps */ +#define HQ_64k 64000 /* HQ core at 64 kbps */ +#define HQ_96k 96000 /* HQ core at 96 kbps */ +#define HQ_128k 128000 /* HQ core at 128 kbps */ + +#define WB_TBE_0k35 350 /* WB TBE layer (used only at 9.6 kbps on top of ACELP@12k8 core for 16kHz signals) */ +#define WB_BWE_0k35 350 /* WB BWE layer (used only on top of ACELP@12k8 core for 16kHz signals) */ +#define WB_TBE_1k05 1050 /* WB TBE layer (used only on top of ACELP@12k8 core for 16kHz signals) */ +#define SWB_TBE_0k95 950 /* SWB TBE layer (used in low SWB bitrates) */ +#define SWB_TBE_1k10 1100 /* SWB TBE layer in LRTD stereo */ +#define SWB_TBE_1k75 1750 /* SWB TBE layer in LRTD stereo */ +#define SWB_TBE_1k6 1600 /* SWB TBE layer */ +#define SWB_BWE_1k6 1600 /* SWB BWE layer */ +#define FB_TBE_1k8 1800 /* SWB+FB TBE layer (used only for 48kHz signals) */ +#define FB_BWE_1k8 1800 /* SWB+FB BWE layer (used only for 48kHz signals) */ +#define SWB_TBE_2k8 2800 /* SWB TBE layer @32kbps */ +#define FB_TBE_3k0 3000 /* SWB+FB TBE layer @32kbps (used only for 48kHz signals) */ +#define SWB_BWE_16k 16000 /* SWB BWE layer for highrate SWB speech */ + +#define GSC_LRES_GAINQ_LIMIT 3000 /* Bitrate where the low resolution quantization starts for the GSC */ +#define GSC_LRES_NB_NITS 10 /* Number of bits gained by using the low resolution quantization */ + +#define SIZE_BRATE_TBL 11 +#define SIZE_BRATE_INTERMED_TBL 22 + +#define BRATE2IDX( brate ) ( brate == ACELP_5k00 ? 0 : brate == ACELP_6k15 ? 1 : brate == ACELP_7k20 ? 2 : brate == ACELP_8k00 ? 3 : brate == ACELP_9k60 ? 4 : brate == ACELP_11k60 ? 5 : brate == ACELP_12k15 ? 6 : brate == ACELP_12k85 ? 7 : brate == ACELP_13k20 ? 8 : brate == ACELP_14k80 ? 9 : brate == ACELP_16k40 ? 10 : brate == ACELP_22k60 ? 11 : brate == ACELP_24k40 ? 12 : brate == ACELP_29k00 ? 13 : brate == ACELP_29k20 ? 14 : brate == ACELP_30k20 ? 15 : brate == ACELP_30k40 ? 16 : brate == ACELP_32k ? 17 : brate == ACELP_48k ? 18 : brate == ACELP_64k ? 19 : brate == HQ_96k ? 20 : brate == HQ_128k ? 21 : -1 ) + +#define BRATE2IDX16k( brate ) ( brate == ACELP_8k00 ? 0 : brate == ACELP_14k80 || brate == ACELP_16k40 ? 1 : brate == ACELP_22k60 ? 2 : brate == ACELP_24k40 ? 3 : brate == ACELP_29k00 ? 4 : brate == ACELP_29k20 ? 5 : brate == ACELP_30k20 ? 6 : brate == ACELP_30k40 ? 7 : brate == ACELP_32k ? 8 : brate == ACELP_48k ? 9 : brate == ACELP_64k ? 10 : -1 ) + +/* Combine parameters into a single index (used to retrieve number of bits from bit allocation tables) */ +#define LSF_BIT_ALLOC_IDX( brate, ctype ) ( 6 * BRATE2IDX( brate ) + ( ctype ) ) + +#define BIT_ALLOC_IDX( brate, ctype, sfrm, tc ) \ + ( ( sfrm != -1 ? NB_SUBFR : 1 ) * \ + ( ( tc == -1 ? 4 : 10 ) * BRATE2IDX( brate ) + ( ctype == INACTIVE ? GENERIC : ctype ) - 1 + ( tc == -1 ? 0 : tc ) ) + \ + ( sfrm != -1 ? sfrm / L_SUBFR : 0 ) ) + +#define BIT_ALLOC_IDX_16KHZ( brate, ctype, sfrm, tc ) \ + ( ( sfrm > -1 ? NB_SUBFR16k : 1 ) * \ + ( ( tc == -1 ? 3 : 7 ) * BRATE2IDX16k( brate ) + ( ctype == TRANSITION ? 2 : ( ctype == GENERIC ? 1 : 0 ) ) + ( tc == -1 ? 0 : tc ) ) + \ + ( sfrm != -1 ? sfrm / L_SUBFR : 0 ) ) + +/* Combine coder_type, bandwidth, formant sharpening flag, and channel-aware flag into one indice */ +#define SIG2IND( ctype, bw, sf, ca_rf ) ( ctype | ( bw << 3 ) | ( sf << 6 ) | ( ca_rf << 7 ) ) + +#define MAX_ACELP_SIG 100 + +/*----------------------------------------------------------------------------------* + * Bitstream indices + *----------------------------------------------------------------------------------*/ + +#define MAX_PVQ_PUSH_IND 320 /* Maximum number of (fwd+reverse) calls to push_indices for the PVQ_range encoder */ + +enum +{ + IND_IVAS_FORMAT, + IND_SMODE, + IND_SID_TYPE, + IND_BWIDTH, + IND_CORE, + IND_PPP_NELP_MODE, + IND_ACELP_16KHZ, + IND_ACELP_SIGNALLING, + IND_SHARP_FLAG, + IND_MDCT_CORE, + IND_TCX_CORE, + IND_BWE_FLAG, + IND_HQ_SWITCHING_FLG, + IND_LAST_L_FRAME, + IND_VAD_FLAG, + IND_HQ_BWIDTH, + IND_TC_SUBFR, + IND_GSC_IVAS_SP = IND_TC_SUBFR + 4, + IND_LSF_PREDICTOR_SELECT_BIT, + IND_LSF, + IND_MID_FRAME_LSF_INDEX = IND_LSF + 17, + + IND_ISF_0_0, + IND_ISF_0_1, + IND_ISF_0_2, + IND_ISF_0_3, + IND_ISF_0_4, + IND_ISF_1_0, + IND_ISF_1_1, + IND_ISF_1_2, + IND_ISF_1_3, + IND_ISF_1_4, +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + IND_IC_LSF_PRED, +#endif + IND_GSC_ATTACK, + IND_GSC_SWB_SPEECH, + IND_NOISE_LEVEL, + IND_HF_NOISE, + IND_PIT_CONTR_IDX, + IND_FEC_CLAS, + IND_FEC_ENR, + IND_FEC_POS, + IND_ES_PRED, + IND_HARM_FLAG_ACELP, + + /* ------------- Loop for alg. codebook indices at 24.4 kbps (special case) -------------- */ + TAG_ALG_CDBK_4T64_24KBIT_START, + IND_ALG_CDBK_4T64_1_24KBIT = TAG_ALG_CDBK_4T64_24KBIT_START, + IND_ALG_CDBK_4T64_2_24KBIT = TAG_ALG_CDBK_4T64_24KBIT_START, + TAG_ALG_CDBK_4T64_24KBIT_END = TAG_ALG_CDBK_4T64_24KBIT_START + 40, + /* ------------------------------------------------ */ + + /* ------------- ACELP subframe loop -------------- */ + TAG_ACELP_SUBFR_LOOP_START, + IND_PITCH = TAG_ACELP_SUBFR_LOOP_START, + IND_LP_FILT_SELECT = TAG_ACELP_SUBFR_LOOP_START, + IND_ALG_CDBK_1T64 = TAG_ACELP_SUBFR_LOOP_START, + IND_ALG_CDBK_2T32 = TAG_ACELP_SUBFR_LOOP_START, + IND_ALG_CDBK_4T64 = TAG_ACELP_SUBFR_LOOP_START, + IND_ALG_CDBK_4T64_1 = TAG_ACELP_SUBFR_LOOP_START, + IND_ALG_CDBK_4T64_2 = TAG_ACELP_SUBFR_LOOP_START, + IND_ALG_CDBK_4T64_1BIT = TAG_ACELP_SUBFR_LOOP_START, + IND_GAUS_CDBK_INDEX = TAG_ACELP_SUBFR_LOOP_START, + IND_TILT_FACTOR = TAG_ACELP_SUBFR_LOOP_START, + IND_GAIN = TAG_ACELP_SUBFR_LOOP_START, + IND_GAIN_CODE = TAG_ACELP_SUBFR_LOOP_START, + IND_TC_IMP_SHAPE = TAG_ACELP_SUBFR_LOOP_START, + IND_TC_IMP_POS = TAG_ACELP_SUBFR_LOOP_START, + IND_TC_IMP_SIGN = TAG_ACELP_SUBFR_LOOP_START, + IND_TC_IMP_GAIN = TAG_ACELP_SUBFR_LOOP_START, + IND_GAIN_PIT = TAG_ACELP_SUBFR_LOOP_START, + IND_PIT_IDX = TAG_ACELP_SUBFR_LOOP_START, + IND_AVQ_GAIN = TAG_ACELP_SUBFR_LOOP_START, + IND_I = TAG_ACELP_SUBFR_LOOP_START, + IND_KV = TAG_ACELP_SUBFR_LOOP_START, + IND_NQ = TAG_ACELP_SUBFR_LOOP_START, + IND_HF_GAIN_MODIFICATION = TAG_ACELP_SUBFR_LOOP_START, + TAG_ACELP_SUBFR_LOOP_END = TAG_ACELP_SUBFR_LOOP_START + 300, + /* ------------------------------------------------ */ + + IND_MEAN_GAIN2, + IND_Y_GAIN_TMP = IND_MEAN_GAIN2 + 32, + IND_Y_GAIN_HF = IND_Y_GAIN_TMP + 32, + IND_HQ_VOICING_FLAG, + IND_HQ_SWB_CLAS, + IND_NF_IDX, + IND_LC_MODE, + IND_YNRM, + IND_HQ_SWB_EXC_SP_CLAS = IND_YNRM + 44, + IND_HQ_SWB_EXC_CLAS = IND_HQ_SWB_EXC_SP_CLAS, + IND_SWB_FENV_HQ = IND_HQ_SWB_EXC_CLAS, + IND_FB_FENV_HQ = IND_SWB_FENV_HQ + 5, + IND_DELTA_ENV_HQ = IND_FB_FENV_HQ + 5, + IND_HVQ_BWE_NL, + IND_NUM_PEAKS = IND_HVQ_BWE_NL + 2, + IND_POS_IDX, + IND_FLAGN = IND_POS_IDX + 280, + IND_PG_IDX, + IND_HVQ_PEAKS = IND_PG_IDX + 35, + IND_HVQ_NF_GAIN = IND_HVQ_PEAKS + 70, + IND_HQ2_SWB_CLAS = IND_HVQ_NF_GAIN + 2, + IND_HQ2_DENG_MODE, + IND_HQ2_DENG_8SMODE, + IND_HQ2_DENG_8SMODE_N0, + IND_HQ2_DENG_8SMODE_N1, + IND_HQ2_DENG_8SPOS, + IND_HQ2_DENG_8SDEPTH, + IND_HQ2_DENG_HMODE, + IND_HQ2_DIFF_ENERGY, + IND_HQ2_P2A_FLAGS = IND_HQ2_DIFF_ENERGY + 100, + IND_HQ2_LAST_BA_MAX_BAND = IND_HQ2_P2A_FLAGS + 60, + IND_RC_START = IND_HQ2_LAST_BA_MAX_BAND + 2, + IND_RC_END = IND_RC_START + MAX_PVQ_PUSH_IND, + IND_HVQ_PVQ_GAIN = IND_RC_END + 1, + IND_NOISINESS = IND_HVQ_PVQ_GAIN + 8, + IND_ENERGY, + IND_CNG_HO, + IND_SID_BW, + IND_CNG_ENV1, + IND_WB_FENV, + IND_WB_CLASS, + IND_IG1, + IND_IG2A, + IND_IG2B, + IND_NELP_FID, + IND_DELTALAG, + IND_POWER, + IND_AMP0, + IND_AMP1, + IND_GLOBAL_ALIGNMENT, + IND_PVQ_FINE_GAIN, + IND_UV_FLAG, + IND_SHB_SUBGAIN = IND_PVQ_FINE_GAIN + 44, + IND_SHB_FRAMEGAIN, + IND_STEREO_ICBWE_MSFLAG, + IND_SHB_ENER_SF, + IND_SHB_RES_GS, + IND_SHB_VF = IND_SHB_RES_GS + 5, + IND_SHB_LSF, + IND_SHB_MIRROR = IND_SHB_LSF + 5, + IND_SHB_GRID, + IND_SWB_CLASS, + IND_SWB_TENV, + IND_SWB_FENV = IND_SWB_TENV + 4, + IND_SHB_CNG_GAIN = IND_SWB_FENV + 4, + IND_DITHERING, + IND_FB_SLOPE, + + IND_HQ2_SPT_SHORTEN, + IND_HQ2_SUBBAND_TCQ, + IND_HQ2_SUBBAND_GAIN = IND_HQ2_SUBBAND_TCQ + 100, + IND_HQ2_DUMMY = IND_HQ2_SUBBAND_GAIN + 20, + + IND_LAGINDICES, + IND_NOISEG, + IND_AUDIO_GAIN, + IND_AUDIO_DELAY, + + /* ------------- HR SWB BWE loop -------------- */ + TAG_HR_BWE_LOOP_START = IND_AUDIO_DELAY + 4, + IND_HR_IS_TRANSIENT = TAG_HR_BWE_LOOP_START, + IND_HR_GAIN = TAG_HR_BWE_LOOP_START, + IND_HR_ENVELOPE = TAG_HR_BWE_LOOP_START, + IND_HR_HF_GAIN = TAG_HR_BWE_LOOP_START, + IND_I2 = TAG_HR_BWE_LOOP_START, + IND_KV2 = TAG_HR_BWE_LOOP_START, + IND_NQ2 = TAG_HR_BWE_LOOP_START, + TAG_HR_BWE_LOOP_END = TAG_HR_BWE_LOOP_START + 200, + /* ------------------------------------------------ */ + + IND_CORE_SWITCHING_CELP_SUBFRAME, + IND_CORE_SWITCHING_AUDIO_DELAY = IND_CORE_SWITCHING_CELP_SUBFRAME + 20, + IND_CORE_SWITCHING_AUDIO_GAIN, + + IND_STEREO_ICBWE_REF, + IND_STEREO_ICBWE_SP, + IND_STEREO_ICBWE_GS, + IND_STEREO_REFCHAN, + IND_STEREO_CORRSTATS, + IND_STEREO_GD, + IND_STEREO_LRTD_FLAG, + IND_STEREO_LPC_REUSE, + IND_STEREO_TD_ALPHA, + IND_STEREO_2ND_CODER_T, + + IND_UNUSED, + MAX_NUM_INDICES = IND_UNUSED + 772 /* Total 2640 in line with MAX_BITS_METADATA */ +}; + +/*----------------------------------------------------------------------------------* + * Delays + *----------------------------------------------------------------------------------*/ + +#define FRAMES_PER_SEC 50 + +#define FRAME_SIZE_NS 20000000L + +#define ACELP_LOOK_NS 8750000L +#define DELAY_FIR_RESAMPL_NS 937500L +#define DELAY_CLDFB_NS 1250000L + +#define DELAY_SWB_TBE_12k8_NS 1250000L +#define DELAY_SWB_TBE_16k_NS 1125000L +#define MAX_DELAY_TBE_NS 1312500L +#define DELAY_BWE_TOTAL_NS 2312500L +#define DELAY_FD_BWE_ENC_12k8_NS ( DELAY_BWE_TOTAL_NS - ( MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ) ) +#define DELAY_FD_BWE_ENC_16k_NS ( DELAY_BWE_TOTAL_NS - ( MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ) ) +#define DELAY_FD_BWE_ENC_NS 2250000L + +#define L_LOOK_12k8 NS2SA( INT_FS_12k8, ACELP_LOOK_NS ) /* look-ahead length at 12.8kHz */ +#define L_LOOK_16k NS2SA( INT_FS_16k, ACELP_LOOK_NS ) /* look-ahead length at 16kHz */ + +/* core switching constants @16kHz */ +#define SWITCH_GAP_LENGTH_NS 6250000L /* length of ACELP->HQ switching gap in ms */ +#define HQ_DELAY_COMP NS2SA( 8000, DELAY_CLDFB_NS ) +#define HQ_DELTA_MAX 6 /* maximum multiplication factor (==48kHz/8kHz) for core switching modules */ + +#define N_ZERO_MDCT_NS 5625000L /* number of zeros in ms for MDCT */ +#define NL_BUFF_OFFSET 12 + +#define N_WS2N_FRAMES 40 /* number of frames for attenuation during the band-width switching */ +#define N_NS2W_FRAMES 20 /* number of frames for attenuation during the band-width switching */ + +/*----------------------------------------------------------------------------------* + * Coder types (only for ACELP core when not running in AMR-WB IO mode) + *----------------------------------------------------------------------------------*/ + +#define INACTIVE 0 /* inactive */ +#define UNVOICED 1 /* unvoiced */ +#define VOICED 2 /* purely voiced */ +#define GENERIC 3 /* generic */ +#define TRANSITION 4 /* transition */ +#define AUDIO 5 /* audio (GSC) */ +#define LR_MDCT 6 /* low-rate MDCT core */ + + +/*--------------------------------------------------* + * Partial copy frame types (only for ACELP core ) + *--------------------------------------------------*/ + +#define ACELP_MODE_MAX 4 +#define RF_MODE_MAX 4 + +/* TCX partial copy frame types */ +#define RF_NO_DATA 0 +#define RF_TCXFD 1 +#define RF_TCXTD1 2 +#define RF_TCXTD2 3 + +/* ACELP partial copy frame types */ +#define RF_ALLPRED ACELP_MODE_MAX +#define RF_NOPRED ACELP_MODE_MAX + 1 +#define RF_GENPRED ACELP_MODE_MAX + 2 +#define RF_NELP ACELP_MODE_MAX + 3 + + +/*--------------------------------------------------------------* + * Frame length constants in mode 2 + *---------------------------------------------------------------*/ + +#define ACELP_TCX_TRANS_NS 1250000 /* Duration of the ACELP->TCX overlap - 1.25 ms */ +#define L_FRAME_MAX L_FRAME48k /* Max 20ms frame size @48kHz */ +#define L_FRAME_PLUS 1200 /* Max frame size (long TCX frame) */ +#define L_MDCT_OVLP_MAX NS2SA( 48000, ACELP_LOOK_NS ) /* = Max mdct overlap */ +#define N_TCX10_MAX 480 /* Max size of TCX10 MDCT spectrum */ +#define BITS_TEC 1 /* number of bits for TEC */ +#define BITS_TFA 1 /* number of bits for TTF */ +#define N_TEC_TFA_SUBFR 16 /* number of subframes of TEC/TFA */ +#define L_TEC_TFA_SUBFR16k ( L_FRAME16k / N_TEC_TFA_SUBFR ) /* TEC/TFA subframe size @ 16kHz*/ +#define MAX_TEC_SMOOTHING_DEG 6 /* max degree of smoothing for TEC */ +#define N_MAX 1200 /* Max size of MDCT spectrum = 25ms @ 48kHz */ +#define N_MAX_TCX 1000 /* Max size of TCX/IGF coded lines */ +#define IGF_START_MN 144 /* MDCT lines not used by IGF*/ +#define IGF_START_MX 800 /* max. MDCT lines used by IGF*/ +#define MAX_IGF_SFB_LEN 160 /* max width of an IGF SFB */ +#define NUM_DCT_LENGTH 24 + +#define NB_DIV 2 /* number of division (subframes) per 20ms frame */ +#define L_MDCT_HALF_OVLP_MAX L_MDCT_OVLP_MAX - 48000 / 200 /* Size of HALF overlap window slope @ 48 kHz */ +#define L_MDCT_MIN_OVLP_MAX 60 /* Size of the MDCT minimal overlap @ 48 kHz - 1.25ms */ +#define L_MDCT_TRANS_OVLP_MAX NS2SA( 48000, ACELP_TCX_TRANS_NS ) /* Size of the ACELP->MDCT transition overlap - 1.25ms */ + +#define L_NEXT_MAX_16k NS2SA( 16000, ACELP_LOOK_NS ) /* 140 */ /* maximum encoder lookahead at 16kHz */ +#define L_NEXT_MAX_32k NS2SA( 32000, ACELP_LOOK_NS ) /* 280 */ /* maximum encoder lookahead at 32kHz */ +#define L_PAST_MAX_32k 360 /* maximum encoder past samples at 32kHz */ + +#define L_MDCT_OVLP_MAX_CORE_FS L_NEXT_MAX_32k /* 280, 2/3 * L_MDCT_OVLP_MAX */ +#define L_MDCT_HALF_OVLP_MAX_CORE_FS 2 * ( L_MDCT_HALF_OVLP_MAX ) / 3 /* 2/3 * L_MDCT_HALF_OVLP_MAX */ +#define L_MDCT_MIN_OVLP_MAX_CORE_FS 2 * ( L_MDCT_MIN_OVLP_MAX ) / 3 /* 2/3 * L_MDCT_MIN_OVLP_MAX */ +#define L_ALDO_WIN1_MAX_CORE_FS 460 /* ALDO1 maximum window length for max core fs */ +#define L_ALDO_WIN1_FB_MAX 690 /* ALDO1 maximum window length */ + +/*----------------------------------------------------------------------------------* + * ACELP core constants + *----------------------------------------------------------------------------------*/ + +#define SAFETY_NET 0 +#define MOVING_AVERAGE 1 +#define AUTO_REGRESSIVE 2 + +#define INT_FS_12k8 12800 /* internal sampling frequency */ +#define M 16 /* order of the LP filter @ 12.8kHz */ +#define L_FRAME 256 /* frame size at 12.8kHz */ +#define NB_SUBFR 4 /* number of subframes per frame */ +#define L_SUBFR ( L_FRAME / NB_SUBFR ) /* subframe size */ +#define L_INP_MEM ( L_LOOK_16k + ( ( L_LP_16k - ( NS2SA( INT_FS_16k, ACELP_LOOK_NS ) + L_SUBFR16k / 2 ) ) - 3 * L_SUBFR16k / 2 ) ) /*=240 samples length of memory of input signal, given by the Look-Ahead + the past memory (max needed for the LP window at 16 kHz) */ +#define L_INP_12k8 ( L_INP_MEM + L_FRAME ) /* length of input signal buffer @12.8kHz */ +#define L_INP ( L_INP_MEM + L_FRAME32k ) /* length of input signal buffer @32kHz */ + +#define L_EXC_MEM L_FRAME16k /* length of memory of excitation signal @16kHz */ +#define L_EXC_MEM_12k8 ( PIT_MAX + L_INTERPOL ) /* length of memory of excitation signal @12.8kHz */ +#define L_EXC_MEM_DEC ( 3 * L_FRAME16k / 2 ) /*Half-frame needed for PLC in case of TCX->ACELP*/ +#define L_EXC ( L_EXC_MEM + L_FRAME16k + 1 ) /* length of encoder excitation signal buffer @16kHz*/ +#define L_EXC_DEC ( L_EXC_MEM_DEC + L_FRAME16k + 1 + L_SUBFR ) /* length of decoder excitation signal buffer @16kHz*/ +#define L_SYN_MEM NS2SA( 48000, DELAY_CLDFB_NS ) /* synthesis memory length, 1.25ms @ 48kHz */ +#define L_SYN ( L_SYN_MEM + L_FRAME16k ) /* length of synthesis signal buffer @16kHz */ +#define L_WSP_MEM ( PIT_MAX + L_INTERPOL ) /* length of memory for weighted input signal @12.8kHz*/ +#define L_WSP ( L_WSP_MEM + L_FRAME + L_LOOK_12k8 ) /* length of weighted input signal buffer @12.8kHz*/ + +#define OLD_SYNTH_SIZE_DEC ( 2 * L_FRAME_MAX ) /* decoder past synthesis; needed for LTP, PLC and rate switching*/ +#define OLD_SYNTH_INTERNAL_DEC ( 2 * L_FRAME32k ) /* decoder past synthesis @ internal sampling rate; needed for LTP, PLC and rate switching*/ +#define OLD_SYNTH_SIZE_ENC L_FRAME32k + L_FRAME32k / 4 /* encoder synth memory */ +#define OLD_EXC_SIZE_DEC ( 3 * L_FRAME_MAX / 2 + 2 * L_FIR_FER2 ) /*old excitation needed for decoder for PLC*/ + +#define TILT_CODE 0.3f /* ACELP code preemphasis factor */ + +#define L_SUBFR16k ( L_FRAME16k / NB_SUBFR ) /* subframe size at 16kHz */ +#define L_HALFR16k ( 2 * L_SUBFR16k ) /* half-frame size at 16kHz */ + +#define L_INTERPOL2 16 /* Length of filter for interpolation */ +#define L_INTERPOL ( L_INTERPOL2 + 1 ) /* Length of filter for interpolation */ +#define TILT_FAC 0.68f /* tilt factor (denominator) */ +#define M16k 20 /* order of the LP filter @ 16kHz */ +#define PIT_SHARP 0.85f /* pitch sharpening factor */ +#define PIT_UP_SAMP 4 /* upsampling factor for 1/4 interpolation filter */ +#define PIT_L_INTERPOL2 16 +#define PIT_FIR_SIZE2 ( PIT_UP_SAMP * PIT_L_INTERPOL2 + 1 ) +#define PIT_UP_SAMP6 6 +#define PIT_L_INTERPOL6_2 17 +#define PIT_FIR_SIZE6_2 ( PIT_UP_SAMP6 * PIT_L_INTERPOL6_2 + 1 ) +#define E_MIN 0.0035f /* minimum allowable energy */ +#define STEP_DELTA 0.0625f /* quantization step for tilt compensation of gaussian cb. excitation */ +#define GAMMA_EV 0.92f /* weighting factor for core synthesis error weighting */ +#define FORMANT_SHARPENING_NOISE_THRESHOLD 21.0f /* lp_noise level above which formant sharpening is deactivated */ +#define LP_NOISE_THRESH 20.f + +#define L_FILT_UP8k 24 /* Resampling - delay of filter for 8 kHz output signals (at 12.8 kHz sampling rate) */ +#define LEN_WIN_SSS 120 +#define L_FILT 12 /* Resampling - delay of the resampling low-pass filter @12.8kHz */ +#define L_FILT16k 15 /* Resampling - delay of filter for 16 kHz input signals (at 16kHz sampling rate) */ +#define L_FILT32k 30 /* Resampling - delay of filter for 32 kHz input signals (at 32kHz sampling rate) */ +#define L_FILT48k 45 /* Resampling - delay of filter for 48 kHz input signals (at 48kHz sampling rate) */ +#define L_FILT_UP16k 12 /* Resampling - delay of filter for 16 kHz output signals (at 12.8 kHz sampling rate) */ +#define L_FILT_UP32k 12 /* Resampling - delay of filter for 32 kHz output signals (at 12.8 kHz sampling rate) */ +#define L_FILT_UP48k 12 /* Resampling - delay of filter for 48 kHz output signals (at 12.8 kHz sampling rate) */ +#define L_FILT_MAX L_FILT48k /* Resampling - maximum length of all filters - for memories */ +#define RS_INV_FAC 0x8000 /* Resampling - flag needed in rom_com and modif_fs to allow pre-scaled and non pre-scaled filters */ + +#define L_HP20_MEM 4 /* HP20 filter memory length */ + +#define CLDFB_NO_CHANNELS_MAX 60 /* CLDFB resampling - max number of CLDFB channels */ +#define CLDFB_NO_COL_MAX 16 /* CLDFB resampling - max number of CLDFB col. */ +#define CLDFB_NO_COL_MAX_SWITCH 6 /* CLDFB resampling - max number of CLDFB col. for switching */ +#define CLDFB_NO_COL_MAX_SWITCH_BFI 10 /* CLDFB resampling - max number of CLDFB col. for switching, BFI */ +#define CLDFB_OVRLP_MIN_SLOTS 3 /* CLDFB resampling - minimize processing to minimum required for transition frame ACELP->TCX/HQ */ +#define INV_CLDFB_BANDWIDTH ( 1.f / 800.f ) + +#define L_FILT_2OVER3 12 +#define L_FILT_2OVER3_LP 3 + +typedef enum +{ + CLDFB_ANALYSIS, + CLDFB_SYNTHESIS +} CLDFB_TYPE; + +typedef enum +{ + CLDFB_PROTOTYPE_1_25MS, + CLDFB_PROTOTYPE_5_00MS +} CLDFB_PROTOTYPE; + +/* pre-calculated scale values for the cldfb filter prototypes + values are calculated like this: sqrt( 6400 / no_cldfb_channels * sum(filter[k]**2)) */ +#define CLDFB80_10_SCALE 88.293854f +#define CLDFB80_16_SCALE 88.299622f +#define CLDFB80_20_SCALE 88.300926f +#define CLDFB80_30_SCALE 88.234489f +#define CLDFB80_32_SCALE 88.303848f +#define CLDFB80_40_SCALE 88.304726f +#define CLDFB80_60_SCALE 88.028412f + +#define LDQMF_10_SCALE 84.567841f +#define LDQMF_16_SCALE 84.567932f +#define LDQMF_20_SCALE 84.567963f +#define LDQMF_30_SCALE 84.501907f +#define LDQMF_32_SCALE 84.568001f +#define LDQMF_40_SCALE 84.567986f +#define LDQMF_60_SCALE 84.303284f + +#define L_FFT 256 /* Spectral analysis - length of the FFT */ +#define LOG2_L_FFT 8 /* Spectral analysis - log2 of L_FFT */ + +#define BIN ( INT_FS_12k8 / L_FFT ) /* Spectral analysis - Width of one frequency bin in Hz */ +#define NB_BANDS 20 /* Spectral analysis - number of frequency bands */ +#define VOIC_BINS 74 /* Spectral analysis - max number of frequency bins considered as voiced (related to VOIC_BAND and L_FFT) */ +#define VOIC_BAND 17 /* Spectral analysis - number of critical bands considered as voiced (related to VOIC_BINS) */ +#define VOIC_BINS_8k 115 /* Spectral analysis - max number of frequency bins considered as voiced in NB (related to VOIC_BAND_8k and L_FFT) */ +#define VOIC_BAND_8k 17 /* Spectral analysis - number of critical bands considered as voiced in NB (related to VOIC_BINS_8k) */ + +#define M_ALPHA 0.9f /* Multi-harm analysis - forgetting factor of LT correlation map */ +#define M_GAMMA 0.99f /* Multi-harm analysis - forgetting factor of active speech decision predictor */ +#define THR_CORR 56 /* Multi-harm analysis - starting threshold of multi-harm. correlation */ + +#define L_LP 320 /* LP analysis - LP window size */ +#define L_LP_16k 400 /* LP analysis @16kHz - LP window size for 16kHz */ +#define L_LP_AMR_WB 384 /* LP analysis - windows size (only for AMR-WB IO mode) */ +#define GRID50_POINTS 51 /* LP analysis - half-number of points to evaluate Chebyshev polynomials used in the LP coefs. conversion */ +#define GRID40_POINTS 41 /* LP analysis - half-number of points to evaluate Chebyshev polynomials used in the LP coefs. conversion */ +#define GRID100_POINTS 100 /* LP analysis - number of points to evaluate Chebyshev polynomials */ + +#define PIT_MIN 34 /* OL pitch analysis - Minimum pitch lag */ +#define PIT_MAX 231 /* OL pitch analysis - Maximum pitch lag */ +#define PIT_MIN_EXTEND 20 /* OL pitch analysis - Minimum pitch lag of extended range */ +#define PIT_MIN_DOUBLEEXTEND 17 /* OL pitch analysis - Minimum pitch lag of double-extended range */ +#define OPL_DECIM 2 /* OL pitch analysis - decimation factor */ +#define L_INTERPOL1 4 /* OL pitch analysis - interval to compute normalized correlation */ +#define FIR_SIZE1 ( PIT_UP_SAMP * L_INTERPOL1 + 1 ) /* OL pitch analysis - total length of the 1/4 interpolation filter */ + +#define PIT_MIN_SHORTER 29 /* OL pitch analysis - minimum for wider pitch */ + +#define PIT_MIN_12k8 29 /* Minimum pitch lag with resolution 1/4 */ +#define PIT_FR2_12k8 121 /* Minimum pitch lag with resolution 1/2 */ +#define PIT_FR1_12k8 154 /* Minimum pitch lag with resolution 1 */ +#define PIT_MAX_12k8 231 /* Maximum pitch lag */ +#define PIT_FR1_8b_12k8 82 /* Minimum pitch lag with resolution 1 for low bitrate pitch delay codings*/ +#define PIT_MIN_16k 36 +#define PIT_FR2_16k 36 +#define PIT_FR1_16k 165 +#define PIT_FR1_8b_16k 165 +#define PIT_MIN_25k6 58 +#define PIT_FR2_25k6 58 +#define PIT_FR1_25k6 164 +#define PIT_MAX_25k6 463 +#define PIT_FR1_8b_25k6 164 +#define PIT_MIN_32k 72 +#define PIT_FR2_32k 72 +#define PIT_FR1_32k 75 +#define PIT_MAX_32k 577 +#define PIT_FR1_8b_32k 75 +#define PIT_MAX_MAX PIT_MAX_32k + +#define PIT_FR1_8b 92 /* Pitch encoding - Minimum pitch lag with resolution 1 */ +#define PIT_FR2_9b 128 /* Pitch encoding - Minimum pitch lag with resolution 1/2 */ +#define PIT_FR1_9b 160 /* Pitch encoding - Minimum pitch lag with resolution 1 */ +#define PIT_FR1_EXTEND_8b 64 /* Pitch encoding - Minimum pitch lag with resolution 1 of extended range */ +#define PIT_FR2_EXTEND_9b 116 /* Pitch encoding - Minimum pitch lag with resolution 1/2 of extended range */ +#define PIT_FR1_EXTEND_9b 128 /* Pitch encoding - Minimum pitch lag with resolution 1 of extended range */ +#define PIT_FR1_DOUBLEEXTEND_8b 58 /* Pitch encoding - Minimum pitch lag with resolution 1 of double-extended range */ +#define PIT_FR2_DOUBLEEXTEND_9b 112 /* Pitch encoding - Minimum pitch lag with resolution 1/2 of double-extended range */ +#define PIT_FR1_DOUBLEEXTEND_9b 124 /* Pitch encoding - Minimum pitch lag with resolution 1 of double-extended range */ + +#define LOW_PASS 0 /* LP filtering - flag for low-pass filtering of the excitation */ +#define FULL_BAND 1 /* LP filtering - flag for no low-pass filtering of the excitation */ +#define NORMAL_OPERATION 2 /* LP filtering - flag for selecting the best of the two above */ + +#define NB_TRACK_FCB_2T 2 /* Algebraic codebook - number of tracks in algebraic fixed codebook search with 2 tracks */ +#define NB_POS_FCB_2T 32 /* Algebraic codebook - number of positions in algebraic fixed codebook search with 2 tracks */ +#define NB_TRACK_FCB_4T 4 /* Algebraic codebook - number of tracks in algebraic fixed codebook search with 4 tracks */ +#define NB_POS_FCB_4T 16 /* Algebraic codebook - number of positions in algebraic fixed codebook search with 4 tracks */ +#define NB_POS_FCB_2T_128 64 /* Algebraic codebook - number of positions in algebraic fixed codebook search with 2 tracks and L_subfr = 128 */ +#define NB_POS_FCB_4T_128 32 /* Algebraic codebook - number of positions in algebraic fixed codebook search with 4 tracks and L_subfr = 128 */ +#define NB_PULSE_MAX 36 +#define MAX_IDX_LEN 9 +#define NPMAXPT ( ( NB_PULSE_MAX + NB_TRACK_FCB_4T - 1 ) / NB_TRACK_FCB_4T ) /* used in search as well */ + +#define GAIN_PRED_ORDER 4 /* Gain quantization - prediction order for gain quantizer (only for AMR-WB IO mode) */ +#define MEAN_ENER 30 /* Gain quantization - average innovation energy */ + +#define DTX_HIST_SIZE 8 /* CNG & DTX - number of last signal frames used for CNG averaging */ +#define CNG_ISF_FACT 0.9f /* CNG & DTX - CNG spectral envelope smoothing factor */ +#define STEP_AMR_WB_SID 2.625f /* CNG & DTX - CNG energy quantization step */ +#define HO_HIST_SIZE 8 /* CNG & DTX - maximal number of hangover frames used for averaging */ +#define NUM_ENV_CNG 20 +#define BUF_L_NRG 0.7f /* CNG & DTX - lower threshold factor for hangover updates */ +#define BUF_H_NRG 1.03f /* CNG & DTX - higher threshold factor for hangover updates */ +#define CNG_TYPE_HO 20 /* CNG & DTX - hangover for switching between CNG types */ + +#define BUF_DEC_RATE 25 /* CNG & DTX - buffer size decrease rate for active frames */ +#define STEP_SID 5.25f /* CNG & DTX - CNG energy quantization step */ + +#define MIN_ACT_CNG_UPD 20 /* DTX - Minimum number of consecutive active frames for CNG mode update */ +#define FIXED_SID_RATE 8 /* DTX SID rate */ + +#define TOTALNOISE_HIST_SIZE 4 + +#define UNKNOWN_NOISE 0 /* unknown noisy type */ +#define SILENCE 1 /* speech with high SNR */ +#define CLDFBVAD_NB_ID 1 +#define CLDFBVAD_WB_ID 2 +#define CLDFBVAD_SWB_ID 3 +#define CLDFBVAD_FB_ID 4 +#define SP_CENTER_NUM 4 /* number of spectral centroid */ +#define TONA_NUM 3 /* number of tonal */ +#define PRE_SNR_NUM 32 /* number of snr to calculate average SNR of all sub-bands */ +#define POWER_NUM 56 /* number of energy of several frames*/ +#define PRE_SPEC_DIF_NUM 56 /* number of energy of several frames*/ + +#define MAX_SUBBAND_NUM 12 /* max number of sub-band divided non-uniformly*/ +#define BG_ENG_NUM MAX_SUBBAND_NUM /* number of energy of sub-band divided non-uniformly*/ +#define MIN_AMP_ID 5 +#define MAX_AMP_ID 64 +#define SPEC_AMP_NUM ( MAX_AMP_ID - MIN_AMP_ID + 1 ) +#define STABLE_NUM 4 /* number of time-domain stable rate*/ +#define SFM_NUM 3 /* number of spectral flatness */ + +#define START_NG 5 /* Stationary noise UV modification */ +#define FULL_NG 10 /* Stationary noise UV modification */ +#define ISP_SMOOTHING_QUANT_A1 0.9f /* Stationary noise UV modification */ + +#define FEC_BITS_CLS 2 /* FEC - number of bits for clas information */ +#define FEC_BITS_ENR 5 /* FEC - number of bits for energy information */ +#define FEC_ENR_STEP ( 96.0f / ( 1 << FEC_BITS_ENR ) ) +#define FEC_ENR_QLIMIT ( ( 1 << FEC_BITS_ENR ) - 1 ) +#define FEC_BITS_POS 8 /* FEC - number of bits for glottal pulse position */ +#define L_SYN_MEM_CLAS_ESTIM ( 2 * PIT16k_MAX - L_FRAME16k ) /* FEC - memory of the synthesis signal for frame class estimation */ +#define L_SYN_CLAS_ESTIM ( L_SYN_MEM_CLAS_ESTIM + L_FRAME16k ) /* FEC - length of the synthesis signal buffer for frame class estimation */ + +#define FRAME_COUNT_HF_SYNTH 100 /* Threshold of frame counter in HF synthesis */ + +#define AUDIO_COUNTER_INI 200 /* Counter initialization */ +#define AUDIO_COUNTER_STEP 10 /* Counter increase on each audio frame */ +#define AUDIO_COUNTER_MAX 1000 /* Counter saturation */ + +#define BWD_TOTAL_WIDTH 320 /* BWD width */ +#define BWD_COUNT_MAX 100 /* maximum value of BWD counter */ +#define BWD_N_BINS_MAX 13 /* maximum number of BWD bins */ +#define BWS_TRAN_PERIOD 5 /* BWS - number of frames for transition period */ + +#define PREEMPH_FAC 0.68f /* preemphasis factor at 12.8kHz */ +#define PREEMPH_FAC_16k 0.72f +#define PREEMPH_FAC_SWB 0.9f /* preemphasis factor for super wide band */ +#define GAMMA1 0.92f /* weighting factor (numerator) default:0.92 */ +#define GAMMA16k 0.94f + +#define FORMANT_SHARPENING_G1 0.75f /* Formant sharpening numerator weighting at 12.8kHz */ +#define FORMANT_SHARPENING_G2 0.9f /* Formant sharpening denominator weighting at 12.8kHz */ +#define FORMANT_SHARPENING_G1_16k 0.8f /* Formant sharpening numerator weighting at 16kHz */ +#define FORMANT_SHARPENING_G2_16k 0.92f /* Formant sharpening denominator weighting at 16kHz */ + +#define FSCALE_DENOM 512 +#define ACELP_FIXED_CDK_NB 41 +#define ACELP_FIXED_CDK_BITS( n ) PulseConfTable[n].bits + +#define L_FIR 31 + +enum TRACKPOS +{ + TRACKPOS_FIXED_FIRST = 0, /* Fill tracks from left */ + TRACKPOS_FIXED_EVEN = 1, /* Even tracks */ + TRACKPOS_FIXED_FIRST_TWO = 2, /* One track of 32 */ + TRACKPOS_FIXED_TWO = 3, /* Two tracks of 32 instead of four of 16 */ + TRACKPOS_FREE_ONE = 4, /* One freely moving track with extra pulse */ + TRACKPOS_FREE_THREE = 6, /* Three freely moving tracks with single extra pulses */ + TRACKPOS_GRADIENT = 7 +}; + +enum +{ + LAGW_WEAK, /* weak lag window */ + LAGW_MEDIUM, /* medium strength lag window */ + LAGW_STRONG, /* strong lag window */ + + NUM_LAGW_STRENGTHS +}; + +#define NBITS_NOISENESS 5 /* number of bits for coding noiseness in UV frames */ + +/*----------------------------------------------------------------------------------* + * ACELP@16kHz core constants + *----------------------------------------------------------------------------------*/ + +#define NB_SUBFR16k 5 /* number of subframes per frame @16kHz */ +#define INT_FS_16k 16000 /* CELP core internal sampling frequency @16kHz */ + +#define PIT16k_MIN 42 /* Minimum pitch lag @16kHz */ +#define PIT16k_MAX 289 /* Maximum pitch lag @16kHz */ +#define PIT16k_FR2_TC0_2SUBFR 83 /* Minimum pitch lag with resolution 1/2 @16kHz for TC02, 2nd subframe */ +#define PIT16k_MIN_EXTEND 21 /* Minimum pitch lag of extended range @16kHz */ +#define PIT16k_FR2_EXTEND_9b 88 /* Minimum 9 bit pitch lag with resolution 1/2 of extended range @16kHz */ +#define PIT16k_FR1_EXTEND_9b 130 /* Minimum 9 bit pitch lag with resolution 1 of extended range @16kHz */ +#define PIT16k_FR2_EXTEND_10b 264 /* Minimum 10 bit pitch lag with resolution 1/2 of extended range @16kHz */ + +#define WIDTH_BAND 8 /* sub-band width in AVQ coding */ +#define G_AVQ_MIN 0.80f /* lower limit for gain Q in higher-rate ACELP contribution */ +#define G_AVQ_MAX 96.0f /* upper limit for gain Q in higher-rate ACELP contribution */ +#define FAC_PRE_AVQ 0.3f /* preemhasis factor in ACELP pre-quantizer */ + +#define G_AVQ_MIN_INACT 0.70f /* lower limit for gain Q in higher-rate ACELP contribution, inactive segments */ +#define G_AVQ_MAX_INACT 4.1f /* upper limit for gain Q in higher-rate ACELP contribution, inactive segments */ +#define G_AVQ_MIN_INACT_48k 0.35f /* lower limit for gain Q in higher-rate ACELP contribution, inactive segments, 48 kbps */ +#define G_AVQ_MAX_INACT_48k 2.8f /* upper limit for gain Q in higher-rate ACELP contribution, inactive segments, 48 kbps */ +#define G_AVQ_MIN_INACT_64k 0.25f /* lower limit for gain Q in higher-rate ACELP contribution, inactive segments, 64 kbps */ +#define G_AVQ_MAX_INACT_64k 1.5f /* upper limit for gain Q in higher-rate ACELP contribution, inactive segments, 64 kbps */ +#define G_AVQ_DELTA_INACT_48k ( G_AVQ_MAX_INACT_48k - G_AVQ_MIN_INACT_48k ) / ( ( 1 << G_AVQ_BITS ) - 1 ) +#define G_AVQ_DELTA_INACT_64k ( G_AVQ_MAX_INACT_64k - G_AVQ_MIN_INACT_64k ) / ( ( 1 << G_AVQ_BITS ) - 1 ) +#define G_AVQ_BITS 6 /* number of bits to quantize the AVQ gain in higher-rate ACELP contribtuion */ +#define G_AVQ_DELTA ( G_AVQ_MAX - G_AVQ_MIN ) / ( ( 1 << G_AVQ_BITS ) - 1 ) +#define G_AVQ_DELTA_INACT ( G_AVQ_MAX_INACT - G_AVQ_MIN_INACT ) / ( ( 1 << G_AVQ_BITS ) - 1 ) + +#define G_PITCH_MIN 0.00f /* SQ of gains: pitch gain lower limit */ +#define G_PITCH_MAX 1.22f /* SQ of gains: pitch gain upper limit */ +#define G_CODE_MIN 0.02f /* SQ of gains: code gain lower limit */ +#define G_CODE_MAX 5.00f /* SQ of gains: code gain upper limit */ + +#define G_PITCH_MIN_TC192 0.1f +#define G_PITCH_MAX_TC192 0.95f +#define G_CODE_MIN_TC192 0.6f +#define G_CODE_MAX_TC192 41.0f + +#define BIT_SAVING_LOW_THR 10 +#define BIT_SAVING_HIGH_THR 80 + +/*--------------------------------------------------------------* + * TCX constants + *---------------------------------------------------------------*/ + +#define NBITS_TCX_GAIN 7 + +#define NOISE_FILL_RANGES 1 +#define NBITS_NOISE_FILL_LEVEL 3 /* Number of bits used for coding noise filling level for each range */ +#define NF_GAIN_BITS ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ) +#define MIN_NOISE_FILLING_HOLE 8 +#define HOLE_SIZE_FROM_LTP( gain ) ( 4 + ( int16_t )( 2.0f * gain * ( 4.0f / 0.625f ) ) ) +#define FDNS_NPTS 64 +#define AVG_TCX20_LSF_BITS 40 +#define AVG_TCX10_LSF_BITS 59 +#define LTPSIZE 3 +#define TCXLTP_DELAY_NS 250000 +#define TCXLTP_MAX_DELAY NS2SA( 48000, TCXLTP_DELAY_NS ) +#define TCXLTP_LTP_ORDER 24 +#define TCX_RES_Q_BITS_GAIN 3 + +/* Use arithmetic coder with LPC shaping also at high (i.e. TCX-only) bitrates */ +#define LPC_SHAPED_ARI_MAX_RATE_CPE ACELP_13k20 +#define LPC_SHAPED_ARI_MAX_RATE ACELP_9k60 +#define N_MAX_ARI 800 + +#define N_LTP_GAIN_MEMS 4 + +#define N_TCX_STARTLINE_NOISE_WB 11 +#define N_TCX_STARTLINE_NOISE_SWB 9 + +/*----------------------------------------------------------------------------------* + * TNS constants + *----------------------------------------------------------------------------------*/ + +#define R1_48 690 +#define R2_48 420 +#define R1_16 230 +#define R2_16 140 +#define R1_25 368 +#define R2_25 224 +#define TNS_MAX_NUM_OF_FILTERS 2 /* TNS maximum number of filters */ +#define TNS_MAX_FILTER_ORDER 8 /* TNS maximum filter order */ +#define ITF_MAX_FILTER_ORDER 16 /* ITF maximum filter order */ +#define TNS_FILTER_OFF 0 +#define TNS_FILTER_ON_ZERO 1 +#define TNS_FILTER_ON 2 +#define NPRM_TNS ( 3 + TNS_MAX_NUM_OF_FILTERS * ( 3 + TNS_MAX_FILTER_ORDER ) ) /* TNS total number of quantized parameters */ +#define NPRM_RESQ 100 /* Maximum number of parameter for residual Q in TCX */ +#define NPRM_CTX_HM 3 /* Number of Parameters for Context HM : flag+index*/ +#define NPRM_DIV ( 2 + NPRM_TNS + N_MAX / 2 + NPRM_RESQ + NPRM_CTX_HM ) /* Total number of quantized parameter in 1 division */ +#define DEC_NPRM_DIV NPRM_DIV /* Total number of quantized parameter in 1 division (decoder side) */ +#define NPRM_LPC_NEW 2 * ( 4 + 2 * NB_SPHERE ) /* LPC total number of quantized parameters */ + +#define BITBUFSIZE ( IVAS_BRATE_MAX / FRAMES_PER_SEC ) +#define IGF_BITBUFSIZE ( HQ_128k / FRAMES_PER_SEC ) + +#define TNS_COEF_RES 4 /* Bit resolution of the coefficients. */ +#define INDEX_SHIFT ( 1 << ( TNS_COEF_RES - 1 ) ) /* For shifting the index so that index 0 points to 0. */ + +/*----------------------------------------------------------------------------------* + * LSF quantization constants + *----------------------------------------------------------------------------------*/ + +#define GENERIC_MA_LIMIT ACELP_9k60 /* crossover limit, for Generic WB mode, < use SN/AR, >= use MA-predictor */ + +#define NC16k ( M16k / 2 ) +#define NO_ITER 4 /* number of iterations for tracking the root */ +#define SPC 0.0234952f +#define SPC_plus SPC * 1.001f +#define ALPHA_SQ ( ( 0.5f / PI2 ) * ( 0.5f / PI2 ) ) + +#define NC M / 2 +#define LSF_GAP 50.0f +#define LSF_BITS_CNG 29 + +#define MU_MA ( 1.0f / 3.0f ) /* original prediction factor (only for AMR-WB IO mode) */ +#define ISF_GAP 50 /* Minimum ISF separation for end-frame ISFs (only in AMR-WB IO mode) */ +#define LSF_GAP_MID 80.0f /* Minimum LSF separation for mid-frame LSFs */ +#define MODE1_LSF_GAP 70.0f /* Minimum LSF separation for end-frame ISFs */ +#define PREFERSFNET 1.05 +#define SFNETLOWLIMIT_WB 35000 /* new sampling rate dependent thresholds used in LSF codebook decision logic, WB case */ +#define SFNETLOWLIMIT_NB 38000 /* new sampling rate dependent thresholds used in LSF codebook decision logic, NB case */ +#define LSFMBEST 2 /* number of survivors from one stage to another */ +#define STREAKLEN 3 /* Allow this many predictive frames, before starting limiting */ +#define STREAKMULT 0.8f /* Exponential limiting multiplier */ + +#define LSFMBEST_MAX 16 + +#define TCXLPC_NUMSTAGES 3 +#define TCXLPC_NUMBITS 13 +#define TCXLPC_IND_NUMSTAGES 1 +#define TCXLPC_IND_NUMBITS 2 +#define TCXLPC_LSF_GAP 80.0f + +#define MAX_VQ_STAGES 4 +#define MAX_VQ_STAGES_USED 9 /* this is the maximum number of stages currently used and changing this will affect the memory allocated \ + MAX_VQ_STAGES is also used as offset for addressing some arrays, so this should NOT be changed*/ +#define MIDLSF_NBITS 5 +#define ENDLSF_NBITS 31 + +#define LEN_INDICE 15 +#define LATTICE_DIM 8 +#define NO_LEADERS 49 +#define MAX_NO_BR_LVQ 28 +#define MAX_NO_SCALES 3 +#define MAX_NO_VALS 4 +#define WB_LIMIT_LSF 6350 +#define CNG_LVQ_MODES 16 +#define MAX_NO_MODES 169 +#define START_CNG MAX_NO_MODES - CNG_LVQ_MODES +#define MAX_NO_MODES_p 237 +#define NO_CODING_MODES 6 +#define LVQ_COD_MODES 18 + +#define LIMIT_LEADER 19 +#define DELTA_LEADER 256 + +/* BC-TCVQ */ +#define N_STAGE_VQ 8 +#define N_DIM 2 +#define NUM_SUBSET 8 +#define OP_LOOP_THR_HVO 3784536.3f /* 80% : Open-loop Threshold */ +#define NUM_STATE 16 /* BC-TCQ - Number of state of the Trellis */ +#define N_STAGE 16 /* BC-TCQ - Smaple number in a frame */ + +#define SIZE_BK1 256 +#define SIZE_BK2 256 +#define SIZE_BK21 64 +#define SIZE_BK22 128 +#define SIZE_BK23 128 +#define SIZE_BK24 32 +#define SIZE_BK25 32 +#define SIZE_BK21_36b 128 +#define SIZE_BK22_36b 128 +#define SIZE_BK23_36b 64 + +#define NB_QUA_GAIN5B 32 /* Number of quantization level */ +#define NB_QUA_GAIN6B 64 /* Number of quantization level */ +#define NB_QUA_GAIN7B 128 /* Number of quantization level */ + +/*----------------------------------------------------------------------------------* + * TCX transient detection + *----------------------------------------------------------------------------------*/ + +#define NSUBBLOCKS 8 /* Number of subblocks per frame, one transient per a sub-block can be found */ +#define MAX_TD_DELAY 2 * NSUBBLOCKS /* Maximum allowed delay (in number of subblocks) of the transient detection, affects required memory */ +#define NSUBBLOCKS_SHIFT 3 /* Number of subblocks which are shifter betwen TD dectector and TCX-LTP */ + +#define NO_TCX 0 +#define TCX_20 1 +#define TCX_10 2 +#define TCX_5 3 + +#define TRANSITION_OVERLAP ( -2 ) +#define RECTANGULAR_OVERLAP ( -1 ) +#define FULL_OVERLAP 0 +#define NOT_SUPPORTED 1 +#define MIN_OVERLAP 2 +#define HALF_OVERLAP 3 +#define ALDO_WINDOW 4 + +#define SWITCH_OVERLAP_8k 15 /* == NS2SA(8000, SWITCH_GAP_LENGTH_NS) - NS2SA(8000, 10000000.0f - N_ZERO_MDCT_NS) */ +#define SWITCH_GAP_LENGTH_8k 50 + +/*----------------------------------------------------------------------------------* + * TCX transform kernel switching + *----------------------------------------------------------------------------------*/ + +#define MDCT_IV 0 +#define MDST_II 1 +#define MDCT_II 2 +#define MDST_IV 3 + +/*----------------------------------------------------------------------------------* + * FEC constants + *----------------------------------------------------------------------------------*/ + +#define UNVOICED_CLAS 0 /* Unvoiced, silence, noise, voiced offset */ +#define UNVOICED_TRANSITION 1 /* Transition from unvoiced to voiced components - possible onset, but too small */ +#define VOICED_TRANSITION 2 /* Transition from voiced - still voiced, but with very weak voiced characteristics */ +#define VOICED_CLAS 3 /* Voiced frame, previous frame was also voiced or ONSET */ +#define ONSET 4 /* Voiced onset sufficiently well built to follow with a voiced concealments */ +#define SIN_ONSET 5 /* Artificial harmonic+noise onset (used only in decoder) */ +#define INACTIVE_CLAS 6 /* Inactive frame (used only in decoder) */ +#define AUDIO_CLAS 7 /* Audio frame (used only in AMR-WB IO mode) */ + +#define BETA_FEC 0.75f /* FEC - weighting factor for LSF estimation in FER */ +#define STAB_FAC_LIMIT 0.25f /* FEC - limit at which safety net is forced for next frame */ + +#define MODE1_L_FIR_FER 5 /* FEC - impulse response length for low- and high-pass filters in FEC */ +#define L_FIR_FER 3 /* impulse response length for low- & high-pass filters in FER concealment */ +#define L_FIR_FER2 11 /* new filter tuning: 11*/ +#define MAX_UPD_CNT 5 /* FEC - maximum number of frames since last pitch update */ +#define ALPHA_S 0.6f /* FEC - damping factor for SIN_ONSET frames */ +#define ALPHA_V 1.0f /* FEC - damping factor for VOICED_CLAS frames */ +#define ALPHA_VT 0.4f /* FEC - damping factor for VOICED_TRANSITION frames */ +#define ALPHA_UT 0.8f /* FEC - damping factor for UNVOICED_TRANSITION frames */ +#define ALPHA_U 0.4f /* FEC - damping factor for UNVOICED_CLAS frames */ +#define ALPHA_UU 1.0f /* FEC - damping factor for UNVOICED_CLAS frames */ + +#define AGC 0.98f + +#define PLC_MIN_CNG_LEV 0.01f /* minimum background level */ +#define PLC_MIN_STAT_BUFF_SIZE 50 /* buffer size for minimum statistics */ +#define PLC_MIN_CNG_LEV 0.01f +#define G_LPC_RECOVERY_BITS 1 + +/*----------------------------------------------------------------------------------* + * Transition mode (TC) constants + *----------------------------------------------------------------------------------*/ + +/* Conversion of tc_subfr to index */ +#define TC_SUBFR2IDX( x ) ( x == 0 ? 0 : x == 1 ? 0 : x == 2 ? 1 : x == 3 ? 2 : x == 4 ? 3 : x == 64 ? 4 : x == 128 ? 5 : x == 192 ? 6 : x == 256 ? 7 : 0 ) + +#define TC_SUBFR2IDX_16KHZ( x ) ( x == 0 ? 0 : x == 64 ? 1 : x == 128 ? 2 : x == 192 ? 3 : x == 256 ? 4 : 0 ) + +#define L_IMPULSE 17 /* TC - length of one prototype impulse */ +#define L_IMPULSE2 8 /* TC - half-length of one prototype impulse == floor(L_IMPULSE/2) */ +#define NUM_IMPULSE 8 /* TC - number of prototype impulses */ +#define N_GAIN_CODE_TC 8 /* TC - number of levels for gain_code quantization for subrames without glot. impulse(s) - */ +#define N_GAIN_TC 8 /* TC - number of levels for gain_trans quantization */ + +/* TC - attention: DO NOT CHANGE the following constants - needed for correct bit-allocations */ +#define TC_0_0 1 /* TC - subframe ID for TC: first glottal impulse in the 1st subframe, second in the 1st subframe */ +#define TC_0_64 2 /* TC - subframe ID for TC: first glottal impulse in the 1st subframe, second in the 2nd subframe */ +#define TC_0_128 3 /* TC - subframe ID for TC: first glottal impulse in the 1st subframe, second in the 3rd subframe */ +#define TC_0_192 4 /* TC - subframe ID for TC: first glottal impulse in the 1st subframe, second in the 4th subframe */ + +/*----------------------------------------------------------------------------------* + * AVQ constants + *----------------------------------------------------------------------------------*/ + +/* RE8 constants */ +#define NB_LDQ3 9 +#define NB_SPHERE 32 +#define NB_LEADER 36 +#define NB_LDQ4 27 +#define FAC_LOG2 3.321928095f + +#define NSV_MAX 34 /* maximal number of sub-vectors used by the AVQ */ + +/*----------------------------------------------------------------------------------* + * Arithmetic coder + *----------------------------------------------------------------------------------*/ + +#define A_THRES_SHIFT 2 +#define A_THRES ( 1 << A_THRES_SHIFT ) +#define VAL_ESC 16 +#define NBITS_CONTEXT 8 +#define NBITS_RATEQ 2 + +#define cbitsnew 16 +#define stat_bitsnew 14 + +#define ari_q4new ( ( (int32_t) 1 << cbitsnew ) - 1 ) +#define ari_q1new ( ari_q4new / 4 + 1 ) +#define ari_q2new ( 2 * ari_q1new ) +#define ari_q3new ( 3 * ari_q1new ) + +#define kLtpHmFractionalResolution 7 +#define kLtpHmFlag ( 1 << 8 ) + +#define MAX_LENGTH L_FRAME_MAX + +/*----------------------------------------------------------------------------------* + * TCQ constants + *----------------------------------------------------------------------------------*/ + +#define MAX_PULSES 560 + +#define NORMAL_HQ_CORE 0 /* Signal use of Normal HQ core */ +#define LOW_RATE_HQ_CORE 1 /* Signal use of Low Rate MDCT core */ +#define LOW_RATE_HQ_CORE_TRAN 2 /* Signal use of Low Rate MDCT core Tran SWB */ +#define NORM_MDCT_FACTOR L_FRAME8k /* Normalize Low Rate MDCT coefficients to this frame size */ +#define BANDS_MAX ( 4 * 8 ) +#define MAX_GQLEVS 32 /* Max fine gain levels */ +#define BITS_DE_CMODE 1 +#define BITS_DE_HMODE 1 +#define BITS_DE_8SMODE 1 +#define MAXIMUM_ENERGY_LOWBRATE 255 +#define MINIMUM_ENERGY_LOWBRATE -256 +#define BITS_ABS_ENG 7 +#define ABS_ENG_OFFSET 64 +#define BITS_MAX_DEPTH 3 +#define BITS_DE_8SMODE_N0 1 +#define BITS_DE_8SMODE_N1 1 +#define BITS_DE_8SPOS 5 +#define BITS_DE_FCOMP 5 +#define BITS_DE_LSB 1 +#define DE_OFFSET0 46 +#define DE_OFFSET1 32 +#define DE_LIMIT 64 +#define LRMDCT_BE_OFFSET 15 +#define LRMDCT_BE_LIMIT 31 + +#define HQCORE_NB_MIN_RATE 7200 /* NB LR MDCT coding down to this bitrate */ +#define HQCORE_WB_MIN_RATE 13200 /* WB LR MDCT coding down to this bitrate */ +#define HQCORE_SWB_MIN_RATE 13200 /* SWB LR MDCT coding down to this bitrate */ + +#define LRMDCT_CROSSOVER_POINT 16400 /* Use LR MDCT core at this rate and below */ + +#define HTH_NORM 17 +#define LTH_NORM 13 +#define OFFSET_NORM 3 + + +/*----------------------------------------------------------------------------------* + * SWB TBE constants + *----------------------------------------------------------------------------------*/ + +#define STEPSNUM 4 /* Number of steps in a2lsp routine for SHB LPC */ +#define ALLPASSSECTIONS_STEEP 3 /* Size of all pass filters for interpolation and decimation by a factor of 2 */ +#define INTERP_3_1_MEM_LEN 13 /* Size of all pass filters for interpolation and decimation by a factor of 3:1 */ +#define INTERP_3_2_MEM_LEN 15 +#define L_SHB_LAHEAD 20 /* Size of lookahead for SHB */ +#define NUM_SHB_SUBFR 16 +#define LPC_SHB_ORDER 10 +#define LPC_WHTN_ORDER 4 /* Order of whitening filter for SHB excitation */ +#define SHB_OVERLAP_LEN ( L_FRAME16k - L_SHB_LAHEAD ) / ( NUM_SHB_SUBFR - 1 ) +#define QUANT_DIST_INIT ( 10000000000.0f ) /* Quantiser search distance initialisation */ +#define HIBND_ACB_L_FAC 5 / 2 /* SHB Interpolation Factor */ +#define NUM_HILBERTS 2 +#define HILBERT_ORDER1 5 +#define HILBERT_ORDER2 4 +#define HILBERT_MEM_SIZE ( HILBERT_ORDER1 + ( 2 * HILBERT_ORDER2 ) + ( 2 * HILBERT_ORDER2 ) ) + +#define L_SHB_TRANSITION_LENGTH ( 2 * NS2SA( 48000, DELAY_BWE_TOTAL_NS ) ) + +#define NUM_BITS_SHB_SubGain 6 +#define NUM_BITS_SHB_FrameGain 6 + +#define NUM_BITS_SHB_FrameGain_LBR_WB 4 +#define RECIP_ROOT_EIGHT 0.3535534f /* 1.0 / sqrt(8.0) - constant Gain Shape over TD BWE subframes */ + +#define LPC_SHB_ORDER_WB 6 +#define LPC_WHTN_ORDER_WB 2 /* Order of whitening filter for WB excitation */ +#define NUM_BITS_WB_LSF 8 +#define LPC_SHB_ORDER_LBR_WB 4 +#define NUM_BITS_LBR_WB_LSF 2 + +#define COMP_FIL_ORDER 19 +#define MAX_BIQ_N L_FRAME32k + +#define NUM_SHB_SUBGAINS 4 /* Number of subframe gains */ +#define NUM_BITS_SHB_SUBGAINS 5 /* Number of bits for subframe gains for SWB */ +#define NUM_BITS_SHB_FRAMEGAIN 5 /* Number of bits for framegain for SWB */ +#define NUM_BITS_SHB_FRAMEGAIN_1k75 6 /* Number of bits for framegain for SWB */ +#define NUM_BITS_SHB_ENER_SF 6 +#define NUM_BITS_SHB_RES_GS 3 +#define NUM_BITS_SHB_VF 3 +#define NUM_BITS_SHB_SUBGAINS_RF 5 /* Number of bits for subframe gains for SWB in RF */ +#define SHB_GAIN_QLOW -1.0f /* SHB gain lowest scalar quantizer value */ +#define SHB_GAIN_QDELTA 0.15f /* SHB gain scalar quantizer stepsize */ +#define SHB_GAIN_QLOW_1k75 0.0f /* SHB gain lowest scalar quantizer value */ +#define SHB_GAIN_QDELTA_1k75 0.08f /* SHB gain scalar quantizer stepsize */ +#define NUM_Q_LSF 5 /* Number of quantized LSFs */ +#define MIRROR_POINT_BITS 2 /* Number of bits used to quantize mirror point */ +#define MIRROR_POINT_Q_CB_SIZE 4 /* Size of codebook used to quantize mirror point */ +#define MAX_LSF 0.5f /* Maximum value of the LSFs */ +#define NUM_MAP_LSF 5 /* Number of mapped LSFs */ +#define NUM_LSF_GRIDS 4 /* Number of LSF grids */ +#define NUM_LSF_GRID_BITS 2 /* Number of bits used for the LSF grids */ +#define NUM_BITS_SHB_MSLVQ 20 /* Number of bits for the MSLVQ quantizer */ + +#define VF_0th_PARAM 0.34f +#define VF_1st_PARAM 0.5f +#define VF_2nd_PARAM ( VF_1st_PARAM - VF_0th_PARAM ) + +#define GAMMA0 0.65f /* Mean value of gamma1/gamma2 for formant PF */ +#define GAMMA_SHARP 0.15f /* Largest sharpening for gamma1/gamma2 (0.83/0.67)*/ +#define SWB_NOISE_MIX_FAC 0.15f /* Noise mixing adjustment factor for active PF */ +#define SWB_TILT_LOW 1.0f /* Lower threshold for PF tilt adaptation */ +#define SWB_TILT_HIGH 2.0f /* Higher threshold for PF tilt adaptation */ +#define SWB_TILT_DELTA ( 1.0f / ( SWB_TILT_HIGH - SWB_TILT_LOW ) ) /* Inclination between thresholds */ +#define GAMMA3_PLUS_WB 0.65f /* WB post-filter */ +#define GAMMA3_MINUS_WB 0.85f /* WB post-filter */ +#define AGC_FAC_WB 0.85f /* WB post-filter - gain adjustment factor */ +#define AGC_FAC1_WB ( 1.0f - AGC_FAC_WB ) /* WB post-filter - gain adjustment factor complement */ + +#define MAX_LEN_MA_FILTER 20 /* maximum length of the MA filter for SHB TD envelope calculation */ +#define TABLE_CUMSUM_MAX_N 320 /* maximum length of cumsum(i) and cumsum(i*i) tables */ + +/*----------------------------------------------------------------------------------* + * SWB BWE constants + *----------------------------------------------------------------------------------*/ + +#define INV_L_SUBFR16k 0.0125f +#define SWB_L_SUBFR 160 +#define FB_L_SUBFR 240 +#define SWB_FENV 14 +#define FB_GAIN_QLOW 0.0f +#define FB_GAIN_QDELTA 0.03125f +#define FB_MAX_GAIN_VAR 0.5f + + +#define NUM_BITS_FB_FRAMEGAIN 4 /* Number of bits for framegain for FB */ +#define FB_BAND_BEGIN 620 /* == 15.5 kHz */ +#define FB_BAND_BEGIN_12k8 560 /* == 14 kHz */ +#define FB_BAND_END 800 /* == 20 kHz */ +#define FB_BAND_WIDTH 180 /* == 4.5 kHz */ +#define N_CAND 2 +#define N_CB11 32 /* 5bits */ +#define N_CB1ST 128 /* 7bits */ +#define N_CB2ND 64 /* 6bits */ +#define N_CB3RD 32 /* 5bits */ +#define N_CB4TH 64 /* 6bits */ +#define DIM1ST 3 +#define DIM2ND 4 +#define DIM3RD 3 +#define DIM4TH 4 +#define DIM11 ( DIM1ST + DIM2ND ) +#define DIM12 ( DIM3RD + DIM4TH ) +#define N_CAND_TR 3 +#define N_CB_TR1 128 +#define N_CB_TR2 64 +#define DIM_TR1 2 +#define DIM_TR2 2 +#define SWB_FENV_TRANS 4 +#define SWB_TENV 4 +#define NUM_SHARP 9 +#define SHARP_WIDTH 32 + +#define HARMONIC 3 +#define NORMAL 2 +#define TRANSIENT 1 +#define NOISE 0 + +/*----------------------------------------------------------------------------------* + * HR SWB BWE constants + *----------------------------------------------------------------------------------*/ + +#define NSV_OVERLAP 2 /* number of sub-bands overlaping with lower-band (0-8kHz) */ /* note that NSV_MAX >= END_FREQ_BWE_FULL/(8*50) + NSV_OVERLAP ! */ +#define N_BANDS_BWE_HR 4 /* number of frequency bands in non-transient frame */ +#define N_BANDS_TRANS_BWE_HR 2 /* number of frequency bands in transient frame */ +#define END_FREQ_BWE 14400 /* maximum frequency coded by AVQ */ +#define END_FREQ_BWE_FULL 16000 /* maximum frequency coded by HR SWB BWE */ +#define END_FREQ_BWE_FULL_FB 20000 /* maximum frequency coded by HR FB BWE */ + +#define NBITS_GLOB_GAIN_BWE_HR 5 /* number of bits of the global gain quantizer */ +#define MIN_GLOB_GAIN_BWE_HR 3 /* minimum value of the global gain quantizer */ +#define MAX_GLOB_GAIN_BWE_HR 500 /* maximum value of the global gain quantizer */ + +#define NBITS_ENVELOPE_BWE_HR1 6 /* number of bits for envelope VQ - first two subbands in non-transient frame */ +#define NBITS_ENVELOPE_BWE_HR2 5 /* number of bits for envelope VQ - second two subbands in non-transient frame */ +#define NBITS_ENVELOPE_BWE_HR_TR 4 /* number of bits for envelope VQ - two subbands in transient frame */ +#define NUM_ENVLOPE_CODE_HR1 64 /* dimension of envelope VQ - first two subbands in non-transient frame */ +#define NUM_ENVLOPE_CODE_HR2 32 /* dimension of envelope VQ - second two subbands in non-transient frame */ +#define NUM_ENVLOPE_CODE_HR_TR 16 /* dimension of envelope VQ - two subbands in transient frame */ +#define NUM_ENVLOPE_CODE_HR_TR2 8 /* dimension of envelope VQ - two subbands in transient frame */ + +#define NUM_NONTRANS_START_FREQ_COEF ( L_FRAME32k / 2 - NSV_OVERLAP * WIDTH_BAND ) /* start frequency coefficient (==7.6kHz) in non-transient frame */ +#define NUM_NONTRANS_END_FREQ_COEF ( L_FRAME32k * END_FREQ_BWE / END_FREQ_BWE_FULL ) /* end frequency coefficient (==14.4kHz) in non-transient frame */ +#define NUM_TRANS_START_FREQ_COEF ( NUM_NONTRANS_START_FREQ_COEF / NUM_TIME_SWITCHING_BLOCKS ) /* start frequency coefficient (==7.6kHz) in transient frame */ +#define NUM_TRANS_END_FREQ_COEF ( NUM_NONTRANS_END_FREQ_COEF / NUM_TIME_SWITCHING_BLOCKS ) /* end frequency coefficient (==14.4kHz) in transient frame */ +#define NUM_TRANS_END_FREQ_COEF_EFF 140 +#define WIDTH_NONTRANS_FREQ_COEF ( ( NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF ) / N_BANDS_BWE_HR ) /* number of coefficients per band in non-transient frame */ +#define WIDTH_TRANS_FREQ_COEF ( ( NUM_TRANS_END_FREQ_COEF - NUM_TRANS_START_FREQ_COEF ) / N_BANDS_TRANS_BWE_HR ) /* number of coefficients per band in transient frame */ + +#define NBITS_THRESH_BWE_HR 400 /* BWE HR number of bits threshold */ + +#define NBITS_HF_GAIN_BWE_HR 2 /* number of bits for HF (noncoded) energy estimation */ +#define BWE_HR_TRANS_EN_LIMIT1 0.1f /* HF (noncoded) energy equalization limit 1, transient frames */ +#define BWE_HR_TRANS_EN_LIMIT2 0.3f /* HF (noncoded) energy equalization limit 2, transient frames */ +#define BWE_HR_TRANS_EN_LIMIT3 0.5f /* HF (noncoded) energy equalization limit 3, transient frames */ +#define BWE_HR_NONTRANS_EN_LIMIT1 0.5f /* HF (noncoded) energy equalization limit 1, non-transient frames */ +#define BWE_HR_NONTRANS_EN_LIMIT2 1.2f /* HF (noncoded) energy equalization limit 2, non-transient frames */ +#define BWE_HR_NONTRANS_EN_LIMIT3 0.8f /* HF (noncoded) energy equalization limit 3, non-transient frames */ + +/*----------------------------------------------------------------------------------* + * FD CNG + *----------------------------------------------------------------------------------*/ + +#define SIZE_SCALE_TABLE_MONO 20 +#define SIZE_SCALE_TABLE_STEREO 27 +#define SIZE_SCALE_TABLE_CN 18 +#define SIZE_SCALE_TABLE_CN_AMRWB 3 +#define SIZE_SCALE_TABLE_TCX 13 + +#define SIZE_SIDPARTS_ENC_NOISE_EST 24 + +#define FD_CNG_maxN_37bits 24 +#define FD_CNG_maxC_37bits 8 +#define FD_CNG_stages_37bits 6 +#define FD_CNG_JOINT_stages_25bits 4 + +#define OUTMAX_INV 0.000030517578125f /* 1/2^15 */ +#define OUTMAX_SQ 1073741824.f /* 2^30 */ +#define OUTMAX_SQ_INV 0.00000000093132257461547852f /* 1/2^30 */ +#define DELTA ( 1e-20f ) + +#define CLDFB_SCALING ( 1.5f ) + +#define FFTLEN 640 +#define FFTLEN2 ( FFTLEN / 2 ) +#define CORECLDFBLEN 20 +#define TOTCLDFBLEN 40 +#define FFTCLDFBLEN ( FFTLEN2 + TOTCLDFBLEN - CORECLDFBLEN ) +#define PERIODOGLEN ( FFTLEN2 - 2 ) +#define NPART 24 +#define NPARTCLDFB 10 +#define NPART_SHAPING 62 + +#define MSSUBFRLEN 12 +#define MSNUMSUBFR 6 +#define MSBUFLEN 5 +#define MSALPHACORALPHA 0.7f +#define MSALPHACORMAX 0.3f +#define MSALPHAMAX 0.96f +#define MSALPHAHATMIN 0.05f /* It is used for all bands except the first one to get a stable bass */ +#define MSQEQINVMAX ( 1.f / 5.f ) +#define MSAV 2.12f +#define MSBETAMAX 0.8f +#define MSSNREXP ( -0.02f / 0.064f ) + +#define NB_LAST_BAND_SCALE 0.8f +#define SWB_13k2_LAST_BAND_SCALE 0.8f + +#define CNG_LOG_SCALING 512.f /*2^9*/ + +#define M_MAX 32 +#define N_GAIN_MIN 4 +#define N_GAIN_MAX 17 + +#define CHEAP_NORM_SIZE 161 + +#define CNA_MAX_BRATE ACELP_13k20 +#define MAX_CNA_NBANDS 12 + +#define GAIN_Q_OFFSET_EVS 60.f +#define GAIN_Q_OFFSET_IVAS 45.f + +/*----------------------------------------------------------------------------------* + * Bass post-filter constants + *----------------------------------------------------------------------------------*/ + +#define NBPSF_PIT_MAX ( PIT16k_MAX + 1 ) /* maximum pitch value for bass post-filter */ +#define L_TRACK_HIST 10 + +/*----------------------------------------------------------------------------------* + * NB post-filter constants + *----------------------------------------------------------------------------------*/ + +#define THRESCRIT 0.5f /* NB post-filter - threshold LT pst switch off */ +#define AGC_FAC 0.9875f /* NB post-filter - gain adjustment factor */ +#define AGC_FAC1 ( 1.0f - AGC_FAC ) /* NB post-filter - gain adjustment factor complement */ +#define LONG_H_ST 20 /* NB post-filter - impulse response length */ +#define POST_G1 0.75f /* NB post-filter - denominator weighting factor 12kbps */ +#define POST_G2 0.7f /* NB post-filter - numerator weighting factor 12kbps */ +#define GAMMA1_PST 0.7f /* denominator weighting factor */ +#define GAMMA2_PST 0.55f /* numerator weighting factor */ +#define GAMMA3_PLUS 0.2f /* NB post-filter - tilt weighting factor when k1>0 */ +#define GAMMA3_MINUS 0.9f /* NB post-filter - tilt weighting factor when k1<0 */ +#define F_UP_PST 8 /* NB post-filter - resolution for fractionnal delay */ +#define LH2_S 4 /* NB post-filter - length of INT16 interp. subfilters */ +#define LH2_L 16 /* NB post-filter - length of long interp. subfilters */ +#define MIN_GPLT ( 1.0f / 1.5f ) /* NB post-filter - LT gain minimum */ +#define LH_UP_S ( LH2_S / 2 ) +#define LH_UP_L ( LH2_L / 2 ) +#define LH2_L_P1 ( LH2_L + 1 ) +#define DECMEM_RES2 ( PIT16k_MAX + 2 + LH_UP_L ) +#define SIZ_RES2 ( DECMEM_RES2 + L_SUBFR ) +#define SIZ_Y_UP ( ( F_UP_PST - 1 ) * ( L_SUBFR + 1 ) ) +#define SIZ_TAB_HUP_L ( ( F_UP_PST - 1 ) * LH2_L ) +#define SIZ_TAB_HUP_S ( ( F_UP_PST - 1 ) * LH2_S ) +#define POST_G1_MIN 0.65f +#define POST_G2_MIN 0.55f +#define POST_G1_NOIS 0.15f +#define POST_G2_NOIS 0.10f +#define BG1 ( -0.01f ) +#define BG2 ( -0.05f ) +#define CG1 0.9f +#define CG2 1.45f +#define C_LP_NOISE ( 0.1f / 4.0f ) +#define K_LP_NOISE 15.0f +#define LP_NOISE_THR 25.0f + +/*----------------------------------------------------------------------------------* + * Stability estimation + *----------------------------------------------------------------------------------*/ + +#define NB_BFI_THR 2 /* threshold for counter of last bad frames */ +#define MAX_LT 40 +#define INV_MAX_LT ( 1.0f / MAX_LT ) + +#define TH_0_MIN 2.5f +#define TH_1_MIN 1.875f +#define TH_2_MIN 1.5625f +#define TH_3_MIN 1.3125f + +/*----------------------------------------------------------------------------------* + * Speech/music classifier constants + *----------------------------------------------------------------------------------*/ + +#define SPEECH 0 /* S/M classifier's final decision is pure speech */ +#define SPEECH_OR_MUSIC 1 /* S/M classifier's final decision is unclear, i.e. speech or music */ +#define MUSIC 2 /* S/M classifier's final decision is pure music */ + +#define N_FEATURES 12 /* number of features */ +#define N_MIXTURES 6 /* number of mixtures */ + +#define NB_MEL_BANDS 40 /* number of mel filter bands */ +#define NB_MEL_COEF 13 /* number of mel filter coefficients */ +#define N_SMC_FEATURES 15 /* number of features */ +#define N_SMC_MIXTURES 6 /* number of mixtures */ +#define N_PCA_COEF 12 /* number of PCA components */ +#define SMC_ST_MEAN_FACT 0.5 /* forgetting factor of short-term IIR mean filter */ + +#define M_LSP_SPMUS 6 /* number of LSPs used in speech/music classifier */ +#define NB_BANDS_SPMUS 15 +#define START_BAND_SPMUS 2 +#define N_OLD_BIN_E 42 /* == (L_FFT/2-2)/3 */ + +#define LOWEST_FBIN 3 /* lowest frequency bin for feature vector preparation */ +#define HIGHEST_FBIN 70 /* highest frequency bin for feature vector preparation */ +#define HANG_LEN_INIT 8 /* number of frames for hang-over (causes delay of decision) */ +#define HANG_LEN 8 +#define BUF_LEN 60 +#define L_OVR 8 + +#define ATT_NSEG 32 /* strong attack detection - number of time blocks */ + +#define TOD_NSPEC 80 /* number of spectral bins of the tonal detector */ +#define TOD_THR_MASS 0.86f /* initial value for the adaptive threshold of the tonal detector */ +#define P2A_FACT 0.9f /* long-term averaging factor for peak-to-average ratio */ +#define THR_P2A 80.0f /* threshold to detect strongly peaky signals */ + +/*----------------------------------------------------------------------------------* + * LD music post-filter constants + *----------------------------------------------------------------------------------*/ + +#define TH_0_MIN2 1.875f +#define TH_1_MIN2 1.25f +#define TH_2_MIN2 0.9375f +#define TH_3_MIN2 0.625f + +#define DCT_L_POST 640 +#define OFFSET2 192 + +#define VOIC_BINS_HR 640 +#define BIN_16kdct ( 6400.0f / DCT_L_POST ) +#define NB_LIMIT_BAND 16 +#define MBANDS_GN_LD 20 /* number of bands for gain coding in the postfilter */ + +/*----------------------------------------------------------------------------------* + * AC mode (GSC) constants + *----------------------------------------------------------------------------------*/ + +#define NOISE_LEVEL_SP0 8 +#define NOISE_LEVEL_SP1a 9 +#define NOISE_LEVEL_SP1 10 +#define NOISE_LEVEL_SP2 12 +#define NOISE_LEVEL_SP3 14 + +#define MAX_DYNAMIC 82 +#define MIN_DYNAMIC 50 +#define DYNAMIC_RANGE ( MAX_DYNAMIC - MIN_DYNAMIC ) +#define MAX_GSC_NF_BITS 3 +#define GSC_NF_STEPS ( 1 << MAX_GSC_NF_BITS ) + +#define CRIT_NOIS_BAND 23 + +#define SSF 32 /* Sub-subframe length for energy estimation in UC decision */ +#define NB_SSF ( L_FRAME / SSF ) /* number of sub-subframes per frame */ + +#define MBANDS_GN16k 18 /* Number of band for gain coding in GSC */ +#define MBANDS_GN 16 /* Number of band for gain coding in GSC */ +#define MBANDS_GN_BITALLOC16k 20 /* Number of band for gain coding in GSC */ +#define BAND1k2 3 +#define DSR_NB_PULSE ( 4.5f ) +#define MAX_EQ_LF 1.0f +#define MBANDS_LOC ( MBANDS_GN - 1 ) +#define BIN_SIZE 25.0f +#define SWNB_SUBFR 1 + +#define MIN_RATE_4SBFR ACELP_16k40 +#define MIN_RATE_FCB ACELP_22k60 + +#define VAR_COR_LEN 10 + +#define CFREQ_BITRATE ACELP_11k60 + +#define LT_UV_THR 100 +#define LT_UV_THRMID 70 + +#define PIT_EXC_L_SUBFR L_FRAME16k + +#define LOCAL_CT VOICED + +/*----------------------------------------------------------------------------------* + * Core switching constants + *----------------------------------------------------------------------------------*/ + +#define SWITCH_MAX_GAP 360 /* 6.25 + 1.25 of filter mem max == NS2SA(48000, SWITCH_GAP_LENGTH_NS+DELAY_CLDFB_NS) */ + +/*----------------------------------------------------------------------------------* + * HQ core constants + *----------------------------------------------------------------------------------*/ + +#define HQ_NORMAL 0 +#define HQ_TRANSIENT 1 +#define HQ_HARMONIC 2 +#define HQ_HVQ 3 +#define HQ_GEN_SWB 4 +#define HQ_GEN_FB 5 + +#define PREECHO_SMOOTH_LEN 20 +#define INV_PREECHO_SMOOTH_LENP1 ( 1 / ( PREECHO_SMOOTH_LEN + 1.0 ) ); + +#define EPSILON 0.000000000000001f + +#define MAX_SEGMENT_LENGTH 480 +#define NUM_TIME_SWITCHING_BLOCKS 4 +#define NUM_MAP_BANDS 20 +#define NUM_MAP_BANDS_HQ_24k4 17 +#define NUM_MAP_BANDS_HQ_32k 18 +#define FREQ_LENGTH 800 + +#define STOP_BAND 800 + +#define SFM_G1 16 +#define SFM_G1G2 24 +#define SFM_N_NB 18 +#define SFM_N_WB 26 +#define SFM_N_STA_8k 27 +#define SFM_N_STA_10k 30 +#define SFM_N_ENV_STAB SFM_N_STA_8k /* Number of bands for env_stab stability measure */ +#define SFM_N_ENV_STAB_WB SFM_N_WB /* Number of bands for env_stab stability measure used in HQPLC decision for WB signals */ +#define SFM_N_HARMONIC 39 +#define SFM_N 36 + +#define L_HQ_WB_BWE 20 /* == band_end_wb[SFM_N_WB-1] - (band_start_wb[SFM_N_WB-1]+12) */ +#define N_INTL_GRP_16 2 /* Number of interleaving band groups at 16kHz sampling rate */ +#define N_INTL_GRP_32 2 /* Number of interleaving band groups at 32kHz sampling rate */ +#define N_INTL_GRP_48 3 /* Number of interleaving band groups at 48kHz sampling rate */ +#define SFM_N_SWB 39 +#define SFM_N_HARM 31 +#define SFM_N_HARM_FB 33 +#define NB_SFM 44 +#define NB_SFM_MAX 58 +#define WID_G1 8 +#define WID_G2 16 +#define WID_G3 24 +#define WID_GX 32 +#define NUMC_N 544 +#define HQ_MAX_BAND_LEN 96 /* Largest bandwidth in HQ mode (band_len_harm[32]) */ +#define HVQ_PVQ_BUF_LEN ( HVQ_PVQ_COEFS * ( MAX_PVQ_BANDS - 1 ) + HQ_MAX_BAND_LEN ) /* 24*7+96 = 216 */ + +#define QBIT_MAX2 9 + +#define FLAGN_BITS 1 +#define GAIN0_BITS 5 +#define GAINI_BITS 5 + +#define FLAGS_BITS 2 +#define FLAGS_BITS_FB 3 +#define NORM0_BITS 5 +#define NORMI_BITS 5 +#define NUMNRMIBITS_SWB_STA_8k 5 * ( SFM_N_STA_8k - 1 ) +#define NUMNRMIBITS_SWB_STA_10k 5 * ( SFM_N_STA_10k - 1 ) +#define NUMNRMIBITS_SWB_HARMONIC 185 +#define NUMNRMIBITS_SWB 190 +#define NUMNRMIBITS 215 +#define NUMNRMIBITS_WB 125 + +#define NOHUFCODE 0 +#define HUFCODE 1 +#define HUFF_THR 10 +#define NOSUPERPOSITION 40 + +#define MAXVALUEOFFIRSTGAIN 2.5f +#define MINVALUEOFFIRSTGAIN -2.5f +#define NOOFGAINBITS1 6 + +#define AUDIODELAYBITS 6 +#define DELTAOFFIRSTGAIN (float) ( MAXVALUEOFFIRSTGAIN - MINVALUEOFFIRSTGAIN ) / (float) ( ( 1 << NOOFGAINBITS1 ) - 1 ) + +#define MAX_D1M_16k ( ( L_FRAME16k >> 1 ) - NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) - 16 ) +#define MAX_D1M_12k8 ( ( L_FRAME16k >> 1 ) - NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) - 20 ) + +#define MAX_P_ATT 40 /* Maximum number of pulses for gain attenuation factor */ +#define NB_G 4 /* Number of band groups */ +#define MAX_GAIN_BITS 5 /* Maximum number of gain bits */ + +#define ENV_ADJ_START 6 /* Number of consecutive bands for which the attenuation is maximum */ +#define ENV_ADJ_INCL 5 /* Inclination for mapping between attenuation region width and attenuation limit */ + +#define ENV_SMOOTH_FAC 0.1f /* Smoothing factor for envelope stability measure */ +#define L_STAB_TBL 10 /* Number of elements in stability transition table */ +#define M_STAB_TBL_FX ( (Word16) 21068 ) /* Q13, 2.571756 */ +#define D_STAB_TBL_FX ( (Word16) 845 ) /* Q13 0.1013138 */ +#define HALF_D_STAB_TBL_FX ( (Word16) 422 ) /* Q13 0.1013138/2.0 */ +#define NUM_ENV_STAB_PLC_STATES 2 /* Number of states of markov model */ + +#define ATT_LIM_HANGOVER 150 /* Number of hangover frames for disabling stability dependent attenuation */ +#define DELTA_TH 5.0f /* Delta energy threshold for transient detection for envelope stability */ +#define ENERGY_TH 100.0f /* Energy threshold for transient detection */ +#define ENERGY_LT_BETA 0.93f /* Smoothing factor for long-term energy measure */ + +#define START_EXC 60 +#define L_HARMONIC_EXC 202 + +#define HQ_GENERIC_OFFSET 2 +#define HQ_GENERIC_END_FREQ 560 +#define HQ_GENERIC_END_FREQ_14P2KHZ 568 +#define HQ_GENERIC_END_FREQ_16P0KHZ 640 + +#define HQ_GENERIC_FOFFSET_24K4 80 +#define HQ_GENERIC_FOFFSET_32K 144 +#define HQ_GENERIC_SWB_NBITS 31 +#define HQ_GENERIC_SWB_NBITS2 30 +#define HQ_GENERIC_FB_NBITS 5 + +#define HQ_GENERIC_ST_FREQ 224 +#define HQ_GENERIC_LOW0 80 +#define HQ_GENERIC_HIGH0 240 +#define HQ_GENERIC_HIGH1 368 +#define HQ_GENERIC_HIGH2 496 +#define HQ_GENERIC_LEN0 128 +#define HQ_GENERIC_NVQIDX 6 + +#define HQ_GENERIC_EXC0 0 +#define HQ_GENERIC_EXC1 1 +#define HQ_GENERIC_SP_EXC 2 + +#define LF_EMP_FAC 1.2f + +#define DIM_FB 3 +#define HQ_FB_FENV SWB_FENV + DIM_FB +#define N_CB_FB 32 + +#define HVQ_THRES_BIN_24k 224 +#define HVQ_THRES_SFM_24k 22 +#define HVQ_THRES_BIN_32k 320 +#define HVQ_THRES_SFM_32k 25 +#define HVQ_MIN_PEAKS 2 +#define HVQ_MAX_PEAKS_32k 23 +#define HVQ_MAX_PEAKS_24k 17 +#define HVQ_MAX_PEAKS_24k_CLAS 20 /* Limit for HVQ mode */ +#define HVQ_MAX_PEAKS ( HVQ_MAX_PEAKS_32k + 1 + 11 ) /* Allowing HVQ at max 48 kbps */ +#define HVQ_PEAKS_BPS_DELTA ( HQ_32k - HQ_24k40 ) +#define HVQ_PEAKS_PER_DELTA ( HVQ_MAX_PEAKS_32k - HVQ_MAX_PEAKS_24k ) +#define HVQ_PEAKS_PER_DELTA_THR ( HVQ_MAX_PEAKS_32k - HVQ_MAX_PEAKS_24k_CLAS ) +#define HVQ_PEAKS_PER_DELTA_OFFS ( HVQ_MAX_PEAKS_24k * HVQ_PEAKS_BPS_DELTA - HQ_24k40 * HVQ_PEAKS_PER_DELTA ) +#define HVQ_PEAKS_PER_DELTA_THR_OFFS ( HVQ_MAX_PEAKS_24k_CLAS * HVQ_PEAKS_BPS_DELTA - HQ_24k40 * HVQ_PEAKS_PER_DELTA_THR ) +#define HVQ_NUM_SFM_24k ( SFM_N_HARMONIC - 1 - HVQ_THRES_SFM_24k ) +#define HVQ_NUM_SFM_32k ( SFM_N_HARMONIC - 1 - HVQ_THRES_SFM_32k ) +#define HVQ_E_PEAK_SMOOTH_FAC ( 0.3f ) + +#define HVQ_MAX_RATE 32000 + +#define NUMNRMIBITS_SWB_HVQ_24k 35 +#define NUMNRMIBITS_SWB_HVQ_32k 25 + +#define MAX_PVQ_BANDS 8 +#define HVQ_MAX_PVQ_WORDS ( ( HVQ_MAX_RATE / FRAMES_PER_SEC ) / 16 + MAX_PVQ_BANDS ) +#define HVQ_MAX_POS_WORDS 40 +#define HVQ_PVQ_COEFS 24 +#define HVQ_BAND_MIN_PULSES 2 +#define HVQ_BAND_MAX_BITS_24k 80 +#define HVQ_BAND_MAX_BITS_32k 95 +#define HVQ_NEW_BAND_BIT_THR 30 + +#define HVQ_NF_GROUPS 2 +#define HVQ_NF_WEIGHT1 0.9578f /* HVQ Classifier - Noise floor estimate weight 1 */ +#define HVQ_NF_WEIGHT2 0.6472f /* HVQ Classifier - Noise floor estimate weight 2 */ +#define HVQ_PE_WEIGHT1 0.42237f /* HVQ Classifier - Peak envelope estimate weight 1 */ +#define HVQ_PE_WEIGHT2 0.80285f /* HVQ Classifier - Peak envelope estimate weight 2 */ +#define HVQ_THR_POW 0.88f /* HVQ Classifier power factor for threshold calc */ +#define HVQ_SHARP_THRES 9 /* HVQ Classifier - Sharpness threshold */ + +#define HVQ_PA_FAC 0.7071f /* HVQ Classifier peak allocation factor */ +#define HVQ_PA_PEAKS_SHARP1 9 /* HVQ Classifier - Maximum number of peaks for band with high sharpness */ +#define HVQ_PA_PEAKS_SHARP2 3 /* HVQ Classifier - Maximum number of peaks for band with medium sharpness */ +#define HVQ_PA_PEAKS_SHARP3 2 /* HVQ Classifier - Maximum number of peaks for band with low sharpness */ +#define HVQ_PA_SHARP_THRES2 16.0f /* HVQ Classifier - Sharpness threshold for band with medium sharpness */ +#define HVQ_PA_SHARP_THRES3 12.0f /* HVQ Classifier - Sharpness threshold for band with low sharpness */ + +#define HVQ_BW 32 /* HVQ Classifier subband bandwidth */ +#define HVQ_NSUB_32k 10 +#define HVQ_NSUB_24k 7 /* HVQ Classifier number of subbands */ + +#define HQ_CREST_THRESHOLD 7.0f /* HQ harmonic high band classifier, crest threshold */ +#define HQ_CREST_MOD_THRESHOLD 2.128f /* HQ harmonic high band classifier, modified crest threshold */ +#define HQ_CREST_FAC_SM 0.97f /* HQ harmonic high band classifier, smoothing factor */ + +#define HVQ_BWE_NOISE_BANDS 2 /* Number of BWE noise bands */ +#define HVQ_BWE_WEIGHT1 0.95f +#define HVQ_BWE_WEIGHT2 0.2f +#define HVQ_NFPE_FACTOR 6.4f +#define HVQ_LB_NFPE_FACTOR 3.2f + +#define HVQ_VQ_DIM 5 /* HVQ peak VQ dimension */ +#define HVQ_PVQ_GAIN_BITS 5 /* Number of bits to encode PVQ gains in HVQ */ +#define HVQ_NUM_CLASS 4 /* Number of codebook classes */ +#define HVQ_CB_SIZE 256 + +#define NUM_PG_HUFFLEN 9 /* Number of Huffman codewords for peak gains */ +#define MAX_PG_HUFFLEN 12 /* Length of the longest codeword for peak gain Huffman coding */ + +#define HVQ_CP_HUFF_OFFSET 3 /* HVQ Code Pos - Delta offset */ +#define HVQ_CP_HUFF_MAX 51 /* HVQ Code Pos - Maximum delta for huffman coding */ +#define HVQ_CP_HUFF_MAX_CODE 13 /* HVQ Code Pos - Size of largest code word */ +#define HVQ_CP_HUFF_NUM_LEN 11 /* HVQ Code Pos - Number of different huffman lengths */ +#define HVQ_CP_L2_MAX 64 /* HVQ Code Pos - Layer 2 maximum size */ +#define HVQ_CP_L1_LEN 5 /* HVQ Code Pos - Layer 1 block size */ +#define HVQ_CP_MAP_LEN 8 /* HVQ Code Pos - Mapping table size */ +#define HVQ_CP_MAP_IDX_LEN 3 /* HVQ Code Pos - Mapping index size */ +#define HVQ_CP_DELTA 0 /* HVQ Code Pos - Use Delta coding */ +#define HVQ_CP_SPARSE 1 /* HVQ Code Pos - Use Sparse coding */ + +#define MAX_SPLITS 10 /* Maximum number of PVQ band splits */ +#define QUANTAQ3OFFSET 1 + +enum QuantaMode +{ + PVQ_NEAREST = 0, + PVQ_CONS +}; + +#define DS_INDEX_LINEAR_END 21 +#define PYR_OFFSET 1 +#define RCF_INIT_SHIFT 14 +#define THR_ADD_SPLIT 7 /* Threshold for using additional split */ +#define PVQ_MAX_BAND_SIZE 64 /* Maxiumum supported band size for PVQ search */ +#define MIN_BAND_SIZE 1 /* Minimum supported band size for PVQ search */ +#define RC_BITS_RESERVED 1 +#define MAX_PVQ_BITS_PER_COEFFICIENT 80 /* Maximum bits per coefficient allocated per PVQ band. Q3. */ +#define MAX_SRT_LEN NB_SFM_MAX /* Maximum length of input for srt_vec_ind() */ + +/* index_pvq constants */ +#define KMAX 512 +#define KMAX_NON_DIRECT 96 /* max K for non-direct indexing recursion rows */ +#define ODD_DIV_SIZE 48 /* ind0=1/1 ind1 =1/3 ... ind47=1/95 */ + +/* TCQ */ +#define TCQ_MAX_BAND_SIZE 120 /* Maxiumum supported band size for TCQ+USQ search */ +#define STATES 8 +#define MAX_AR_FREQ 16383 +#define AR_BITS 16 +#define STATES_LSB 4 +#define TCQ_LSB_SIZE 24 +#define TCQ_AMP 10 +#define QTCQ ( 0.2f ) + +#define AR_FIRST ( AR_TOP / 4 + 1 ) +#define AR_TOP ( ( 1 << AR_BITS ) - 1 ) +#define AR_HALF ( 2 * AR_FIRST ) +#define AR_THIRD ( 3 * AR_FIRST ) + +#define MAX_SIZEBUF_PBITSTREAM 1024 + +/*----------------------------------------------------------------------------------* + * SWB BWE for LR MDCT core + *----------------------------------------------------------------------------------*/ + +#define G1_RANGE 4 +#define G1G2_RANGE 15 +#define GRP_SB 4 /*Maximum subband groups*/ +#define THR1 4 /* Bit allocation threshold value */ +#define THR2 5 /* Bit allocation threshold value */ +#define THR3 6 /* Bit allocation threshold value */ + +#define NB_SWB_SUBBANDS 4 /* maximum number of subbands in normal2 subband coding */ +#define SWB_SB_LEN0_12KBPS 55 /* length of subband number X in lowest bitrate operation */ +#define SWB_SB_LEN1_12KBPS 68 +#define SWB_SB_LEN2_12KBPS 84 +#define SWB_SB_LEN3_12KBPS 105 +#define SWB_HIGHBAND_12KBPS ( SWB_SB_LEN0_12KBPS + SWB_SB_LEN1_12KBPS + SWB_SB_LEN2_12KBPS + SWB_SB_LEN3_12KBPS ) +#define SWB_LOWBAND_12KBPS ( HQ_GENERIC_END_FREQ_14P2KHZ - SWB_HIGHBAND_12KBPS ) +#define SWB_HIGHBAND_MAX SWB_HIGHBAND_12KBPS +#define SWB_LOWBAND_MAX SWB_LOWBAND_12KBPS + +#define SWB_SB_OFF0_12KBPS 0 /* subband offsets are based on the subband lengths */ +#define SWB_SB_OFF1_12KBPS ( SWB_SB_OFF0_12KBPS + SWB_SB_LEN0_12KBPS ) +#define SWB_SB_OFF2_12KBPS ( SWB_SB_OFF1_12KBPS + SWB_SB_LEN1_12KBPS ) +#define SWB_SB_OFF3_12KBPS ( SWB_SB_OFF2_12KBPS + SWB_SB_LEN2_12KBPS ) +#define SWB_SB_OFF4_12KBPS ( SWB_SB_OFF3_12KBPS + SWB_SB_LEN3_12KBPS ) + +/* 16.4 kbps */ +#define SWB_SB_LEN0_16KBPS 59 /* length of subband number X in lowest bitrate operation */ +#define SWB_SB_LEN1_16KBPS 74 +#define SWB_SB_LEN2_16KBPS 92 +#define SWB_SB_LEN3_16KBPS 115 +#define SWB_HIGHBAND_16KBPS ( SWB_SB_LEN0_16KBPS + SWB_SB_LEN1_16KBPS + SWB_SB_LEN2_16KBPS + SWB_SB_LEN3_16KBPS ) +#define SWB_LOWBAND_16KBPS ( HQ_GENERIC_END_FREQ_16P0KHZ - SWB_HIGHBAND_16KBPS ) + +#define SWB_SB_OFF0_16KBPS 0 /* subband offsets are based on the subband lengths */ +#define SWB_SB_OFF1_16KBPS ( SWB_SB_OFF0_16KBPS + SWB_SB_LEN0_16KBPS ) +#define SWB_SB_OFF2_16KBPS ( SWB_SB_OFF1_16KBPS + SWB_SB_LEN1_16KBPS ) +#define SWB_SB_OFF3_16KBPS ( SWB_SB_OFF2_16KBPS + SWB_SB_LEN2_16KBPS ) +#define SWB_SB_OFF4_16KBPS ( SWB_SB_OFF3_16KBPS + SWB_SB_LEN3_16KBPS ) + +/* SpectrumSmoothing */ +#define L_SB 12 /* subband length for SpectrumSmoothing */ + +/* SpectrumSmoothing for NSS */ +#define L_SB_NSS 8 +#define L_SB_NSS_HALF ( L_SB_NSS / 2 ) +#define NUM_SUBBAND_SMOOTH_MAX ( SWB_HIGHBAND_12KBPS / L_SB_NSS + 1 ) +#define MA_LEN 7 + +/* Harmonic mode */ +#define NB_SWB_SUBBANDS_HAR_SEARCH_SB 2 /* search number of subbands in harmonic subband coding */ +#define NB_SWB_SUBBANDS_HAR 4 /* maximum number of subbands in harmonic subband coding */ +#define N_NBIGGEST_PULSEARCH 18 +#define N_NBIGGEST_SEARCH_LRG_B 32 + + +/* 13.2 kbps */ +#define SWB_SB_BW_LEN0_12KBPS_HAR 56 /* Group 1 length for BWE */ +#define SWB_SB_BW_LEN1_12KBPS_HAR 100 /* Group 2 Length for BWE */ +#define SWB_SB_BW_LEN2_12KBPS_HAR SWB_SB_BW_LEN1_12KBPS_HAR +#define SWB_SB_BW_LEN3_12KBPS_HAR SWB_SB_BW_LEN0_12KBPS_HAR + +/* 16.4 kbps */ +#define SWB_SB_BW_LEN0_16KBPS_HAR 60 /* Group 1 length for BWE */ +#define SWB_SB_BW_LEN1_16KBPS_HAR 110 /* Group 2 Length for BWE */ +#define SWB_SB_BW_LEN2_16KBPS_HAR SWB_SB_BW_LEN1_16KBPS_HAR +#define SWB_SB_BW_LEN3_16KBPS_HAR SWB_SB_BW_LEN0_16KBPS_HAR + +#define SWB_SB_OFF0_SUB5_12KBPS_HAR 0 /* subband offsets are based on the subband lengths */ +#define SWB_SB_OFF1_SUB5_12KBPS_HAR ( SWB_SB_OFF0_SUB5_12KBPS_HAR + SWB_SB_BW_LEN0_12KBPS_HAR ) +#define SWB_SB_OFF2_SUB5_12KBPS_HAR ( SWB_SB_OFF1_SUB5_12KBPS_HAR + SWB_SB_BW_LEN1_12KBPS_HAR ) +#define SWB_SB_OFF3_SUB5_12KBPS_HAR ( SWB_SB_OFF2_SUB5_12KBPS_HAR + SWB_SB_BW_LEN2_12KBPS_HAR ) + +#define SWB_SB_OFF0_SUB5_16KBPS_HAR 0 /* subband offsets are based on the subband lengths */ +#define SWB_SB_OFF1_SUB5_16KBPS_HAR ( SWB_SB_OFF0_SUB5_16KBPS_HAR + SWB_SB_BW_LEN0_16KBPS_HAR ) +#define SWB_SB_OFF2_SUB5_16KBPS_HAR ( SWB_SB_OFF1_SUB5_16KBPS_HAR + SWB_SB_BW_LEN1_16KBPS_HAR ) +#define SWB_SB_OFF3_SUB5_16KBPS_HAR ( SWB_SB_OFF2_SUB5_16KBPS_HAR + SWB_SB_BW_LEN2_16KBPS_HAR ) + +#define LR_BLK_LEN 16 +#define LR_HLF_PK_BLK_LEN 8 +#define LR_LOWBAND_DIF_PK_LEN 10 +#define SWB_HAR_RAN1 80 +#define SWB_HAR_RAN2 140 +#define SWB_HAR_RAN3 200 +#define SPT_SHORTEN_SBNUM 4 + +/* LRMDCT fix precision */ +#define SWB_BWE_LR_Qs 12 +#define SWB_BWE_LR_Qbe 14 +#define SWB_BWE_LR_QRk 16 + + +/*----------------------------------------------------------------------------------* + * FEC for HQ core + *----------------------------------------------------------------------------------*/ + +#define MAX_PGF 7 +#define MAX_ROW 2 + +#define MAX_SB_NB 3 + +#define NELP_LP_ORDER 8 +#define NUM_NELP_GAINS 10 + +#define MINIMUM_RATE_TO_ENCODE_VOICING_FLAG 45000 +#define FRAC_BWE_SMOOTH 2.0f /* >= 1 */ +#define FRAMECTTOSTART_MDCT 3 + +/*----------------------------------------------------------------------------------* + * Channel aware mode (FEC) + *----------------------------------------------------------------------------------*/ + +#define FEC_OFFSET 3 +#define MAX_RF_FEC_OFFSET 9 + + +/*----------------------------------------------------------------------------------* + * HQ FEC + *----------------------------------------------------------------------------------*/ + +#define POST_HQ_DELAY_NS DELAY_BWE_TOTAL_NS /* delay of post processing after core HQ coding */ +#define PH_ECU_ALDO_OLP2_NS ( ACELP_LOOK_NS / 2 ) /* half length of ALDO WINDOW overlap */ +#define PH_ECU_LOOKAHEAD_NS ( 11 * ACELP_LOOK_NS / ( 7 * 2 ) ) /* Number of nanoseconds look-ahead ahead from the end of the past synthesized frame */ +#define PH_ECU_MEM_NS ( ( L_PROT48k / 48 - 20 ) * 1000000 - PH_ECU_LOOKAHEAD_NS ) /* Number of nanoseconds memory for Phase ECU before the old_synthFB_fx pointer */ + +#define N_LEAD_NB 70 /* (N_LEAD_MDCT*(L_FRAME8k/20)) */ +#define N_ZERO_NB 45 /* (N_ZERO_MDCT*(L_FRAME8k/20)) */ +#define N_LEAD_O_NB 90 /* (20.f-N_LEAD_MDCT)*(L_FRAME8k/20) */ +#define N_ZERO_O_NB 35 /* (10.f-N_ZERO_MDCT)*(L_FRAME8k/20) */ +#define N_Z_L_NB 115 /* (N_Z_L_MDCT*(float)(L/20)) = N_ZERO_NB + N_LEAD_NB*/ +#define N_Z_L_O_NB 205 /* (N_Z_L_O_MDCT*(float)(L/20)) = N_ZERO_NB + N_LEAD_NB + N_LEAD_O_NB */ + +#define L_PROT32k 1024 /* HQ phase ECU prototype frame length */ +#define MAX_PLOCS L_PROT48k / 4 + 1 /* maximum number of spectral peaks to be searched */ +#define QUOT_LPR_LTR 4 +#define LGW_MAX 9 /* maximum number frequency group widths */ +#define BETA_MUTE_FAC_INI 0.5f /* initial noise attenuation factor */ +#define L_TRANA32k ( L_PROT32k / QUOT_LPR_LTR ) /* transient analysis frame length */ +#define L_TRANA16k ( L_TRANA32k / 2 ) +#define L_TRANA8k ( L_TRANA32k / 4 ) +#define L_PROT_HAMM_LEN2_48k NS2SA( 48000, 6000000L ) +#define L_PROT_HAMM_LEN2_32k NS2SA( 32000, 6000000L ) +#define L_PROT_HAMM_LEN2_16k NS2SA( 16000, 6000000L ) +#define L_PROT48k L_PROT32k * 3 / 2 /* HQ phase ECU prototype frame length */ +#define L_PROT48k_2 L_PROT48k / 2 +#define L_TRANA48k ( L_PROT48k / QUOT_LPR_LTR ) /* transient analysis frame length */ +#define PH_ECU_SPEC_SIZE L_PROT48k +#define T_SIN_PI_2 ( PH_ECU_SPEC_SIZE / 4 ) +#define HQ_FEC_SIGN_SFM 16 +#define OFF_FRAMES_LIMIT 30 /* HQ phase ECU, burst length for muting to zero */ +#define PH_ECU_MUTE_START 15 /* HQ phase ECU, burst length to start steep muting */ + +#define SCALE_DOWN_3dB 0.7071f +#define MAX_TILT 0.f +#define ED_THRES 1.0f + +#define ED_THRES_12P 0.032209f +#define ED_THRES_50P 0.159063f +#define ED_THRES_90P 0.532669 +#define MAXDELAY_FEC 224 + +#define RANDOM_START 1 +#define HQ_FEC_SIGN_THRES 6 +#define HQ_FEC_SIGN_THRES_TRANS 3 +#define HQ_FEC_BAND_SIZE 4 + + +/*--------------------------------------------------------------* + * Tonal MDCT PLC + *---------------------------------------------------------------*/ + +#define MAX_NUMBER_OF_IDX 30 +#define GROUP_LENGTH 7 +#define MAX_PEAKS_FROM_PITCH 10 +#define LAST_HARMONIC_POS_TO_CHECK 128 /* 128 because we check harmonics only up to 3.2 kHz */ +#define ALLOWED_SIDE_LOBE_FLUCTUATION 3.0f /* 4.8 dB */ +#define LEVEL_ABOVE_ENVELOPE 7.59f /* 8.8 dB */ +#define UNREACHABLE_THRESHOLD 16.0f /* 12 dB Increase of LEVEL_ABOVE_ENVELOPE so that the threshold is not reached */ +#define SMALL_THRESHOLD 1.10f /* 0.41 dB Increase of LEVEL_ABOVE_ENVELOPE for the peak detection at a definitive peak in the estimated spectrum */ +#define BIG_THRESHOLD 1.5f /* 1.76 dB Increase of LEVEL_ABOVE_ENVELOPE for the peak detection at a probable peak in the estimated spectrum */ + +#define kSmallerLagsTargetBitsThreshold 150 +#define kCtxHmOlRSThr 2.6f + + +#define kTcxHmNumGainBits 2 /* Number of bits for the gain index */ +#define kTcxHmParabolaHalfWidth 4 /* Parabola half width */ +#define kLtpHmGainThr 0.46f /* Use the LTP pitch lag in the harmonic model? */ + +#define LOWRATE_TCXLPC_MAX_BR_CPE ACELP_13k20 +#define LOWRATE_TCXLPC_MAX_BR ACELP_9k60 + +/*--------------------------------------------------------------* + * Waveform-adjustment MDCT PLC + *---------------------------------------------------------------*/ + +#define DEC_STATE_LEN 10 +#define MAX_POST_LEN 3 +#define TCX_TONALITY_INIT_CNT 7 + +#define TCX_NONTONAL 0 +#define TCX_TONAL 1 + +/*---------------------------------------------------------------* + * IGF * + *---------------------------------------------------------------*/ + +#define IGF_MAX_TILES 10 +#define IGF_MAX_GRANULE_LEN 1200 +#define IGF_TRANS_FAK 2 +#define IGF_MAX_SFB 23 +#define IGF_NOF_GRIDS 3 +#define IGF_MAX_SUBFRAMES 2 +#define IGF_PAST_SFM_LEN 5 +#define IGF_MID_WHITENING_LEVEL 7 +#define IGF_MID_WHITENING_LEVEL2 9 + +#define IGF_MODE_WB 1 +#define IGF_MODE_SWB 2 +#define IGF_MODE_FB 3 + +enum +{ + IGF_BITRATE_WB_9600, + IGF_BITRATE_RF_WB_13200, + IGF_BITRATE_SWB_9600, + IGF_BITRATE_SWB_13200, + IGF_BITRATE_RF_SWB_13200, + IGF_BITRATE_SWB_16400, + IGF_BITRATE_SWB_24400, + IGF_BITRATE_SWB_32000, + IGF_BITRATE_SWB_48000, + IGF_BITRATE_SWB_64000, + IGF_BITRATE_FB_16400, + IGF_BITRATE_FB_24400, + IGF_BITRATE_FB_32000, + IGF_BITRATE_FB_48000, + IGF_BITRATE_FB_64000, + IGF_BITRATE_FB_96000, + IGF_BITRATE_FB_128000, + IGF_BITRATE_WB_13200_CPE, + IGF_BITRATE_WB_16400_CPE, + IGF_BITRATE_SWB_13200_CPE, + IGF_BITRATE_SWB_16400_CPE, + IGF_BITRATE_SWB_24400_CPE, + IGF_BITRATE_SWB_32000_CPE, + IGF_BITRATE_SWB_48000_CPE, + IGF_BITRATE_SWB_48000_CPE_TCX10, + IGF_BITRATE_SWB_64000_CPE, + IGF_BITRATE_SWB_80000_CPE, + IGF_BITRATE_SWB_96000_CPE, + IGF_BITRATE_FB_24400_CPE, + IGF_BITRATE_FB_32000_CPE, + IGF_BITRATE_FB_48000_CPE, + IGF_BITRATE_FB_48000_CPE_TCX10, + IGF_BITRATE_FB_64000_CPE, + IGF_BITRATE_FB_80000_CPE, + IGF_BITRATE_FB_96000_CPE, + IGF_BITRATE_FB_128000_CPE, + IGF_BITRATE_UNKNOWN +}; + +#define IGF_WHITENING_OFF 0 +#define IGF_WHITENING_MID 1 +#define IGF_WHITENING_STRONG 2 + +#define IGF_GRID_LB_NORM 0 +#define IGF_GRID_LB_TRAN 1 +#define IGF_GRID_LB_SHORT 2 + +/* constants for IGFSCFDecoder and IGFSCFEncoder */ +#define IGF_CTX_OFFSET 3 /* offset added to make the context values nonnegative, for array indexing */ +#define IGF_CTX_COUNT ( 2 * IGF_CTX_OFFSET + 1 ) /* number of contexts for the AC statistical model */ +#define IGF_MIN_ENC_SEPARATE -12 /* minimum residual value coded separately, without escape coding */ +#define IGF_MAX_ENC_SEPARATE +12 /* maximum residual value coded separately, without escape coding */ +#define IGF_SYMBOLS_IN_TABLE ( 1 + ( IGF_MAX_ENC_SEPARATE - IGF_MIN_ENC_SEPARATE + 1 ) + 1 ) /* alphabet size */ + +/*----------------------------------------------------------------------------------* + * SC-VBR + *----------------------------------------------------------------------------------*/ + +#define UVG1_CBSIZE 32 /* NELP unvoiced gain-1 codebook size */ +#define UVG2_CBSIZE 64 /* NELP unvoiced gain-2 codebook size */ + +/* PPP constants */ +#define NUM_ERB_WB 24 /* Number of ERB bands in wideband */ +#define NUM_ERB_NB 22 /* Number of ERB bands in narrowband */ + +#define CUTFREE_ABS_RANGE 6 +#define CUTFREE_REL_RANGE 0.25 + +#define VBR_ADR_MAX_TARGET 6.15f /* max target ADR for VBR. This rate is used in the closed loop rate control */ +#define PPP_LAG_THRLD 180 /* max lag allowed for PPP coding */ + +#define MAXLAG_WI ( PPP_LAG_THRLD / 2 + 12 ) /* Maximum lag used in waveform interpolation */ +#define MAX_LAG_PIT ( PPP_LAG_THRLD + 21 ) /* Max possible pitch lag after adding delta lag */ + +/*----------------------------------------------------------------------------------* + * JBM + *----------------------------------------------------------------------------------*/ + +#define MAX_JBM_SLOTS 100 /* every primary copy and partial copy stored in JBM needs one slot */ +#define MAX_AU_SIZE ( ( MAX_BITS_PER_FRAME + 7 ) / 8 ) /* max frame size in bytes */ + +/*----------------------------------------------------------------------------------* + * TEC/TFA + *----------------------------------------------------------------------------------*/ + +#define DELAY_TEMP_ENV_BUFF_TEC 9 +#define EXT_DELAY_HI_TEMP_ENV 2 + + +/*----------------------------------------------------------------------------------* + * BASOP ROM Tables + *----------------------------------------------------------------------------------*/ + +#define LD_INT_TAB_LEN 120 +#define INV_TABLE_SIZE 256 +#define SQRT_TABLE_SIZE 256 + + +/*----------------------------------------------------------------------------------* + * Decoder modes + *----------------------------------------------------------------------------------*/ + +enum +{ + PRIMARY_2800, + PRIMARY_7200, + PRIMARY_8000, + PRIMARY_9600, + PRIMARY_13200, + PRIMARY_16400, + PRIMARY_24400, + PRIMARY_32000, + PRIMARY_48000, + PRIMARY_64000, + PRIMARY_96000, + PRIMARY_128000, + PRIMARY_SID, + PRIMARY_FUT1, + SPEECH_LOST, + NO_DATA_RECEIVED +}; + +enum +{ + AMRWB_IO_6600, + AMRWB_IO_8850, + AMRWB_IO_1265, + AMRWB_IO_1425, + AMRWB_IO_1585, + AMRWB_IO_1825, + AMRWB_IO_1985, + AMRWB_IO_2305, + AMRWB_IO_2385, + AMRWB_IO_SID /*, + AMRWB_IO_FUT1, + AMRWB_IO_FUT2, + AMRWB_IO_FUT3, + AMRWB_IO_FUT4, + SPEECH_LOST, + NO_DATA_RECEIVED */ +}; + +enum +{ + G192, + MIME, + VOIP_G192_RTP, + VOIP_RTPDUMP +}; + +/* clang-format on */ +#endif /* CNST_H */ diff --git a/lib_com/codec_tcx_common.c b/lib_com/codec_tcx_common.c new file mode 100644 index 0000000000..98a2fb4bd0 --- /dev/null +++ b/lib_com/codec_tcx_common.c @@ -0,0 +1,335 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------* + * tcxGetNoiseFillingTilt() + * + * + *-------------------------------------------------------------------*/ + +int16_t tcxGetNoiseFillingTilt( + const float A[], + const int16_t L_frame, + const int16_t mode, + float *noiseTiltFactor ) +{ + int16_t firstLine; + + if ( mode ) + { + firstLine = L_frame / 6; + *noiseTiltFactor = 0.5625f; + } + else + { + firstLine = L_frame / 8; + *noiseTiltFactor = get_gain( A + 1, A, M, NULL ); + *noiseTiltFactor = min( 1.0f, ( *noiseTiltFactor ) + 0.09375f ); + } + + return firstLine; +} + +/*-------------------------------------------------------------------* + * tcxFormantEnhancement() + * + * + *-------------------------------------------------------------------*/ + +void tcxFormantEnhancement( + float xn_buf[], + const float *gainlpc, + float spectrum[], + const int16_t L_frame ) +{ + int16_t k, i, j, l = 0; + float fac, step; + + k = L_frame / FDNS_NPTS; + + /* Formant enhancement via square root of the LPC gains */ + xn_buf[0] = (float) sqrt( gainlpc[0] ); + xn_buf[1] = (float) sqrt( gainlpc[1] ); + fac = 1.0f / min( xn_buf[0], xn_buf[1] ); + + for ( i = 1; i < FDNS_NPTS - 1; i++ ) + { + xn_buf[i + 1] = (float) sqrt( gainlpc[i + 1] ); + + if ( ( xn_buf[i - 1] <= xn_buf[i] ) && ( xn_buf[i + 1] <= xn_buf[i] ) ) + { + step = max( xn_buf[i - 1], xn_buf[i + 1] ); + step = ( 1.0f / step - fac ) / (float) ( i - l ); + xn_buf[l] = 1.0f; + fac += step; + for ( j = l + 1; j < i; j++ ) + { + xn_buf[j] = min( 1.0f, xn_buf[j] * fac ); + fac += step; + } + l = i; + } + } + + /* i = hTcxCfg->fdns_npts - 1; Completing changes to gains */ + step = min( xn_buf[i - 1], xn_buf[i] ); + step = ( 1.0f / step - fac ) / (float) ( i - l ); + xn_buf[l] = 1.0f; + fac += step; + for ( j = l + 1; j < i; j++ ) + { + xn_buf[j] = min( 1.0f, xn_buf[j] * fac ); + fac += step; + } + xn_buf[i] = 1.0f; + + /* Application of changed gains onto decoded MDCT lines */ + for ( i = j = 0; i < L_frame; j++ ) + { + for ( l = 0; l < k; i++, l++ ) + { + spectrum[i] *= xn_buf[j]; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * tcxInvertWindowGrouping() + * + * + *-------------------------------------------------------------------*/ + +void tcxInvertWindowGrouping( + TCX_CONFIG_HANDLE hTcxCfg, + float xn_buf[], + float spectrum[], + const int16_t L_frame, + const int16_t fUseTns, + const int16_t last_core, + const int16_t index, + const int16_t frame_cnt, + const int16_t bfi ) +{ + int16_t i, w, t_integer; + int16_t L_win, L_spec; + + if ( frame_cnt && !bfi && last_core != ACELP_CORE ) + { + /* fix sub-window overlap */ + hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; + } + + if ( ( ( !bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || + ( ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( index == 0 ) ) ) ) || + ( ( bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && + !( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) ) ) + { + + /* ungroup sub-windows: deinterleave MDCT bins into separate windows */ + for ( t_integer = w = 0; w < 2; w++ ) + { + for ( i = w; i < L_frame; i += 2 ) + { + xn_buf[t_integer++] = spectrum[i]; + } + } + + mvr2r( xn_buf, spectrum, L_frame ); + + if ( hTcxCfg->fIsTNSAllowed && !bfi && fUseTns ) + { + L_win = L_frame >> 1; + L_spec = hTcxCfg->tnsConfig[0][0].iFilterBorders[0]; + + /* rearrange LF sub-window lines prior to TNS synthesis filtering */ + if ( L_spec < L_frame ) + { + mvr2r( spectrum + 8, spectrum + 16, L_spec / 2 - 8 ); + mvr2r( spectrum + L_frame / 2, spectrum + 8, 8 ); + mvr2r( spectrum + L_frame / 2 + 8, spectrum + L_spec / 2 + 8, L_spec / 2 - 8 ); + } + else + { + mvr2r( spectrum + 8, xn_buf, L_win ); + mvr2r( xn_buf, spectrum + 16, L_win - 8 ); + mvr2r( xn_buf + L_win - 8, spectrum + 8, 8 ); + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * tcx5SpectrumInterleaving() + * + * + *-------------------------------------------------------------------*/ + +void tcx5SpectrumInterleaving( + const int16_t tcx5Size, + float *spectrum ) +{ + int16_t i; + float interleaveBuf[N_TCX10_MAX]; + + set_f( interleaveBuf, 0.0f, N_TCX10_MAX ); + + /* group sub-windows: interleave bins according to their frequencies */ + for ( i = 0; i < tcx5Size; i++ ) + { + interleaveBuf[2 * i] = spectrum[i]; + interleaveBuf[2 * i + 1] = spectrum[tcx5Size + i]; + } + + mvr2r( interleaveBuf, spectrum, 2 * tcx5Size ); + + return; +} + + +/*-------------------------------------------------------------------* + * tcx5SpectrumDeinterleaving() + * + * + *-------------------------------------------------------------------*/ + +void tcx5SpectrumDeinterleaving( + const int16_t tcx5Size, + float *spectrum ) +{ + int16_t i; + float interleaveBuf[N_TCX10_MAX]; + + set_f( interleaveBuf, 0.0f, N_TCX10_MAX ); + + /* ungroup sub-windows: interleave bins according to their frequencies */ + for ( i = 0; i < tcx5Size; i++ ) + { + interleaveBuf[i] = spectrum[2 * i]; + interleaveBuf[tcx5Size + i] = spectrum[2 * i + 1]; + } + + mvr2r( interleaveBuf, spectrum, 2 * tcx5Size ); + + return; +} + + +/*-------------------------------------------------------------------* + * tcx5TnsGrouping() + * + * + *-------------------------------------------------------------------*/ + +void tcx5TnsGrouping( + const int16_t L_frame, /* i : frame length (TCX5) */ + const int16_t L_spec, /* i : coded spec length (TCX5, derived from filter borders*/ + float *spectrum ) +{ + /* rearrange LF sub-window lines prior to TNS synthesis filtering */ + if ( L_spec < L_frame ) + { + mvr2r( spectrum + 8, spectrum + 16, L_spec - 8 ); + mvr2r( spectrum + L_frame, spectrum + 8, 8 ); + mvr2r( spectrum + L_frame + 8, spectrum + L_spec + 8, L_spec - 8 ); + } + else + { + float buff[8]; /* Buffer for the rearrangement of LF TCX5 */ + mvr2r( spectrum + L_spec, buff, 8 ); + mvr2r( spectrum + 8, spectrum + 16, L_spec - 8 ); + mvr2r( buff, spectrum + 8, 8 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * tcx5TnsUngrouping() + * + * + *-------------------------------------------------------------------*/ + +void tcx5TnsUngrouping( + const int16_t L_frame, /* i : frame length (TCX5) */ + const int16_t L_spec, /* i : coded spec length (TCX5, derived from filter borders*/ + float *spectrum, + const int16_t enc_dec /* i : 0: encoder, else decoder */ +) +{ + /* undo rearrangement of LF sub-window lines prior to TNS analysis */ + if ( L_spec < L_frame ) + { + mvr2r( spectrum + L_spec + 8, spectrum + L_frame + 8, L_spec - 8 ); + mvr2r( spectrum + 8, spectrum + L_frame, 8 ); + mvr2r( spectrum + 16, spectrum + 8, L_spec - 8 ); + set_zero( spectrum + L_spec, L_frame - L_spec ); + set_zero( spectrum + L_frame + L_spec, L_frame - L_spec ); + } + else + { + float buff[8]; /* Buffer for the rearrangement of LF TCX5 */ + + mvr2r( spectrum + 8, buff, 8 ); + + if ( enc_dec == ENC ) + { + mvr2r( spectrum + 16, spectrum + 8, L_frame - 8 ); + mvr2r( buff, spectrum + L_frame, 8 ); + } + else + { + mvr2r( spectrum + 16, spectrum + 8, L_spec - 8 ); + mvr2r( buff, spectrum + L_spec, 8 ); + } + } + + return; +} diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h new file mode 100644 index 0000000000..b504d89731 --- /dev/null +++ b/lib_com/common_api_types.h @@ -0,0 +1,133 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef COMMON_API_TYPES_H +#define COMMON_API_TYPES_H + +/* options.h needed for debugging/development features + * It should be stripped for delivery along with debugging switches */ +#include "options.h" +#include +#include + +/*----------------------------------------------------------------------------------* + * Common API constants + *----------------------------------------------------------------------------------*/ + +#define IVAS_MAX_BITS_PER_FRAME ( 512000 / 50 ) +#define IVAS_MAX_NUM_OBJECTS 4 +#define IVAS_MAX_OUTPUT_CHANNELS 16 +#define IVAS_CLDFB_NO_CHANNELS_MAX ( 60 ) +/*----------------------------------------------------------------------------------* + * Common API structures + *----------------------------------------------------------------------------------*/ + +typedef struct _IVAS_ISM_METADATA +{ + float azimuth; + float elevation; + float radius; + float spread; + float gainFactor; +} IVAS_ISM_METADATA; + +typedef struct _IVAS_QUATERNION +{ + float w, x, y, z; + +} IVAS_QUATERNION; + +typedef struct ivas_masa_metadata_frame_struct *IVAS_MASA_METADATA_HANDLE; +typedef struct ivas_masa_qmetadata_frame_struct *IVAS_MASA_QMETADATA_HANDLE; + +typedef struct TDREND_HRFILT_FiltSet_struct *IVAS_DEC_HRTF_HANDLE; + +#ifdef DEBUGGING +typedef enum +{ + IVAS_RENDER_TYPE_OVERRIDE_NONE, + IVAS_RENDER_TYPE_OVERRIDE_CREND, + IVAS_RENDER_TYPE_OVERRIDE_FASTCONV +} IVAS_RENDER_TYPE_OVERRIDE; +#endif + +typedef struct _IVAS_ROOM_ACOUSTICS_CONFIG +{ + int16_t override; + int16_t use_brir; + int16_t late_reverb_on; + int16_t nBands; /* Number of frequency bands for which reverb properties are provided, integer, range [2..256] */ + float pFc_input[IVAS_CLDFB_NO_CHANNELS_MAX]; /* Center frequencies for which following values are provided: */ + float pAcoustic_rt60[IVAS_CLDFB_NO_CHANNELS_MAX]; /* - The room's T60 per center frequency */ + float pAcoustic_dsr[IVAS_CLDFB_NO_CHANNELS_MAX]; /* - The room's Diffuse to Source Ratio per center frequency */ + float acousticPreDelay; /* Time elapsed between input signal and late reverberation start, float, range [0.001..10] */ + float inputPreDelay; /* Offset in seconds from where DSR is computed in the RIR (0 = at source), float, range [0.001..10] */ +} IVAS_ROOM_ACOUSTICS_CONFIG_DATA; + +typedef struct _IVAS_RENDER_CONFIG +{ +#ifdef DEBUGGING + IVAS_RENDER_TYPE_OVERRIDE renderer_type_override; +#endif + IVAS_ROOM_ACOUSTICS_CONFIG_DATA room_acoustics; +} IVAS_RENDER_CONFIG_DATA, *IVAS_RENDER_CONFIG_HANDLE; + +typedef struct _IVAS_LS_CUSTOM_LAYOUT +{ + int16_t num_spk; + float azimuth[IVAS_MAX_OUTPUT_CHANNELS]; + float elevation[IVAS_MAX_OUTPUT_CHANNELS]; + int16_t num_lfe; + int16_t lfe_idx[IVAS_MAX_OUTPUT_CHANNELS]; + +} IVAS_CUSTOM_LS_DATA; + +typedef struct ivas_LS_setup_custom *IVAS_LSSETUP_CUSTOM_HANDLE; +typedef struct ivas_LS_setup_custom IVAS_LSSETUP_CUSTOM_STRUCT; + + +typedef struct _IVAS_JBM_TRACE_DATA +{ + double playTime; + int16_t partialCopyOffset; + uint16_t sequenceNumber; + uint32_t timeStamp; + uint32_t rcvTime; + + int16_t lastDecodedWasActive; + int16_t partial_frame_flag; + int16_t dataUnit_flag; + +} IVAS_JBM_TRACE_DATA; + + +#endif /* COMMON_API_TYPES_H */ diff --git a/lib_com/control.h b/lib_com/control.h new file mode 100644 index 0000000000..2b3f92b535 --- /dev/null +++ b/lib_com/control.h @@ -0,0 +1,82 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef _CONTROL_H +#define _CONTROL_H + +/* BASOP -> FLC brigde: flow control instructions */ + +#include "stl.h" + +#define FOR( a ) \ + if ( incrFor(), 0 ) \ + ; \ + else \ + for ( a ) +static __inline void incrFor( void ) +{ +} + +#define WHILE( a ) \ + if ( incrFlcWhile(), 0 ) \ + ; \ + else \ + while ( a ) +static __inline void incrFlcWhile( void ) +{ +} + +#define DO do + +#define IF( a ) if ( incrIf(), a ) +static __inline void incrIf( void ) +{ +} + +#define ELSE else + +#define SWITCH( a ) switch ( incrSwitch(), a ) +static __inline void incrSwitch( void ) +{ +} + +#define CONTINUE continue + +#define BREAK break + +#define GOTO goto + +#endif /* _CONTROL_H */ diff --git a/lib_com/core_com_config.c b/lib_com/core_com_config.c new file mode 100644 index 0000000000..5f5103a03f --- /dev/null +++ b/lib_com/core_com_config.c @@ -0,0 +1,916 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_prot.h" + + +/*-------------------------------------------------------------------* + * is_EVS_bitrate() + * + * check if the bitrate is EVS supported active bitrate + *-------------------------------------------------------------------*/ + +/*! r: flag indicating a valid bitrate */ +int16_t is_EVS_bitrate( + const int32_t ivas_total_brate, /* i : EVS total bitrate */ + int16_t *Opt_AMR_WB /* i : AMR-WB IO flag */ +) +{ + int16_t j; + + j = 0; + while ( j < SIZE_BRATE_TBL && ivas_total_brate != brate_tbl[j] ) + { + j++; + } + + /* AMR-WB IO mode/EVS primary mode determination */ + if ( j >= SIZE_BRATE_TBL ) + { + switch ( ivas_total_brate ) + { + case ACELP_6k60: + case ACELP_8k85: + case ACELP_12k65: + case ACELP_14k25: + case ACELP_15k85: + case ACELP_18k25: + case ACELP_19k85: + case ACELP_23k05: + case ACELP_23k85: + break; + default: + { + return 0; + } + break; + } + + *Opt_AMR_WB = 1; + } + else + { + *Opt_AMR_WB = 0; + } + + return 1; +} + + +/*-------------------------------------------------------------------* + * get_codec_mode() + * + * Get codec_mode (MODE1 or MODE2) + *-------------------------------------------------------------------*/ + +/*! r: codec mode */ +int16_t get_codec_mode( + const int32_t total_brate /* i : total bitrate */ +) +{ + int16_t codec_mode = -1; + + switch ( total_brate ) + { + case 5900: + codec_mode = MODE1; + break; + case 7200: + codec_mode = MODE1; + break; + case 8000: + codec_mode = MODE1; + break; + case 9600: + codec_mode = MODE2; + break; + case 13200: + codec_mode = MODE1; + break; + case 16400: + codec_mode = MODE2; + break; + case 24400: + codec_mode = MODE2; + break; + case 32000: + codec_mode = MODE1; + break; + case 48000: + codec_mode = MODE2; + break; + case 64000: + codec_mode = MODE1; + break; + case 96000: + codec_mode = MODE2; + break; + case 128000: + codec_mode = MODE2; + break; + } + + return codec_mode; +} + + +/*-------------------------------------------------------------------* + * getTcxonly() + * + * + *-------------------------------------------------------------------*/ + +int16_t getTcxonly( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t is_mct /* i : MCT mode flag */ +) +{ + int16_t tcxonly = 0; + + switch ( element_mode ) + { + case EVS_MONO: + if ( total_brate > ACELP_32k ) + { + tcxonly = 1; + } + break; + case IVAS_SCE: + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( total_brate > MAX_ACELP_BRATE ) + { + tcxonly = 1; + } + break; + case IVAS_CPE_MDCT: + if ( total_brate >= ( is_mct ? IVAS_32k : IVAS_48k ) ) + { + tcxonly = 1; + } + break; + } + + return tcxonly; +} + + +/*-------------------------------------------------------------------* + * getCtxHm() + * + * + *-------------------------------------------------------------------*/ + +int16_t getCtxHm( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t rf_flag /* i : flag to signal the RF mode */ +) +{ + int16_t ctx_hm = 0; + + if ( ( ( element_mode <= IVAS_SCE && total_brate > LPC_SHAPED_ARI_MAX_RATE ) || ( element_mode > IVAS_SCE && total_brate > LPC_SHAPED_ARI_MAX_RATE_CPE ) ) && !rf_flag && ( ( total_brate <= IVAS_64k && element_mode != IVAS_CPE_DFT ) || ( total_brate < 24400 && element_mode == IVAS_CPE_DFT ) ) && element_mode != IVAS_CPE_MDCT ) + { + ctx_hm = 1; + } + + return ctx_hm; +} + +/*-------------------------------------------------------------------* + * getResq() + * + * + *-------------------------------------------------------------------*/ + +int16_t getResq( + const int32_t total_brate /* i : total bitrate */ +) +{ + int16_t resq = 0; + + if ( total_brate <= IVAS_64k ) + { + resq = 1; + } + + return resq; +} + +/*-------------------------------------------------------------------* + * getTnsAllowed() + * + * + *-------------------------------------------------------------------*/ + +int16_t getTnsAllowed( + const int32_t total_brate, /* i : total bitrate */ + const int16_t igf, /* i : flag indicating IGF activity*/ + const int16_t element_mode, /* i : IVAS element mode */ + const MCT_CHAN_MODE mct_chan_mode /* i : MCT channel mode */ +) +{ + int16_t tnsAllowed = 0; + + if ( mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( igf ) + { + if ( total_brate > HQ_16k40 || ( ( total_brate > HQ_13k20 ) && element_mode == IVAS_CPE_DFT ) ) + { + tnsAllowed = 1; + } + } + else if ( total_brate > HQ_32k ) + { + tnsAllowed = 1; + } + } + + return tnsAllowed; +} + +/*-------------------------------------------------------------------* + * getRestrictedMode() + * + * + *-------------------------------------------------------------------*/ + +int16_t getRestrictedMode( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +) +{ + int16_t restrictedMode = 3; + + if ( !Opt_AMR_WB && ( total_brate > HQ_32k && element_mode != IVAS_SCE ) ) + { + restrictedMode = 6; + } + else if ( !Opt_AMR_WB && ( total_brate > HQ_48k && element_mode == IVAS_SCE ) ) + { + restrictedMode = 6; + } + else if ( Opt_AMR_WB ) + { + restrictedMode = 1; + } + + return restrictedMode; +} + +/*-------------------------------------------------------------------* + * getMdctWindowLength() + * + * + *-------------------------------------------------------------------*/ + +int16_t getMdctWindowLength( + const int16_t fscale ) +{ + int16_t mdctWindowLength; + + mdctWindowLength = ( L_LOOK_12k8 * fscale ) / FSCALE_DENOM; + + return mdctWindowLength; +} + +/*-------------------------------------------------------------------* + * sr2fscale() + * + * + *-------------------------------------------------------------------*/ + +int16_t sr2fscale( + const int32_t sr_core /* i : internal sampling rate */ +) +{ + + return (int16_t) ( ( FSCALE_DENOM * sr_core ) / 12800 ); +} + +/*-------------------------------------------------------------------* + * getCoreSamplerateMode2() + * + * + *-------------------------------------------------------------------*/ + +int32_t getCoreSamplerateMode2( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + int32_t sr_core = 0; + + if ( bwidth == NB ) + { + sr_core = INT_FS_12k8; + } + else if ( element_mode == EVS_MONO && ( ( bwidth == WB && total_brate < ACELP_13k20 ) || ( bwidth == SWB && total_brate <= ACELP_13k20 ) || ( rf_mode == 1 ) ) ) + { + sr_core = INT_FS_12k8; + } + else if ( element_mode > EVS_MONO && flag_ACELP16k == 0 ) + { + sr_core = INT_FS_12k8; + } + else if ( bwidth == WB || ( bwidth == SWB && total_brate <= ACELP_32k ) || ( bwidth == FB && total_brate <= ACELP_32k ) ) + { + sr_core = INT_FS_16k; + } + else if ( ( bwidth == SWB && total_brate <= MAX_ACELP_BRATE && element_mode == IVAS_SCE ) || ( bwidth == FB && total_brate <= MAX_ACELP_BRATE && element_mode == IVAS_SCE ) ) + { + sr_core = INT_FS_16k; + } + else if ( ( ( bwidth == SWB || bwidth == FB ) && element_mode == EVS_MONO && total_brate <= HQ_64k ) || ( element_mode > IVAS_SCE && ( ( bwidth == SWB && total_brate <= IVAS_96k ) || ( bwidth == FB && total_brate <= IVAS_96k ) ) ) ) + { + sr_core = 25600; + } + else if ( bwidth == SWB || bwidth == FB ) + { + sr_core = 32000; + } + + return sr_core; +} + +/*-------------------------------------------------------------------* + * getTcxBandwidth() + * + * + *-------------------------------------------------------------------*/ + +float getTcxBandwidth( + const int16_t bwidth /* i : audio bandwidth */ +) +{ + float tcxBandwidth = 0.5f; + + if ( bwidth == NB ) + { + tcxBandwidth = 0.3125f; + } + + return tcxBandwidth; +} + +/*-------------------------------------------------------------------* + * getIgfPresent() + * + * + *-------------------------------------------------------------------*/ + +int16_t getIgfPresent( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t rf_mode, /* i : flag to signal the RF mode */ + const int16_t mct_chan_mode /* i : MCT channel mode */ +) +{ + int16_t igfPresent = 0; + + if ( mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + return igfPresent; + } + + if ( bwidth == SWB ) + { + switch ( element_mode ) + { + case EVS_MONO: + case IVAS_SCE: + if ( total_brate <= HQ_64k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( total_brate <= HQ_48k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_MDCT: + if ( total_brate <= IVAS_96k ) + { + igfPresent = 1; + } + break; + } + } + else if ( bwidth == FB ) + { + switch ( element_mode ) + { + case EVS_MONO: + case IVAS_SCE: + if ( total_brate <= IVAS_128k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( total_brate <= IVAS_48k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_MDCT: + if ( total_brate <= IVAS_128k ) + { + igfPresent = 1; + } + break; + } + } + else if ( bwidth == WB ) + { + switch ( element_mode ) + { + case EVS_MONO: + case IVAS_SCE: + if ( total_brate <= ACELP_9k60 ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + case IVAS_CPE_MDCT: + if ( total_brate <= ACELP_13k20 ) + { + igfPresent = 1; + } + break; + } + } + + if ( ( ( bwidth == WB ) || ( bwidth == SWB ) ) && ( rf_mode == 1 ) && ( total_brate == ACELP_13k20 ) ) + { + igfPresent = 1; + } + + return igfPresent; +} + +/*-------------------------------------------------------------------* + * getCnaPresent() + * + * + *-------------------------------------------------------------------*/ + +int16_t getCnaPresent( + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t flag_cna = 0; + + if ( element_mode == IVAS_CPE_DFT && element_brate <= CNA_MAX_BRATE_DFT_STEREO ) + { + flag_cna = 1; + } + else + { + if ( bwidth == NB && total_brate <= ACELP_13k20 ) + { + flag_cna = 1; + } + + if ( bwidth == WB && total_brate <= ACELP_13k20 ) + { + flag_cna = 1; + } + + if ( bwidth == SWB && total_brate <= ACELP_13k20 ) + { + flag_cna = 1; + } + } + + return flag_cna; +} + +/*-------------------------------------------------------------------* + * getTcxLtp() + * + * + *-------------------------------------------------------------------*/ + +int16_t getTcxLtp( + const int32_t sr_core /* i : internal sampling rate */ +) +{ + int16_t tcxltp = 0; + + if ( sr_core <= 25600 ) + { + tcxltp = 1; + } + + return tcxltp; +} + +/*-------------------------------------------------------------------* + * initPitchLagParameters() + * + * + *-------------------------------------------------------------------*/ + +int16_t initPitchLagParameters( + const int32_t sr_core, + int16_t *pit_min, + int16_t *pit_fr1, + int16_t *pit_fr1b, + int16_t *pit_fr2, + int16_t *pit_max ) +{ + int16_t pit_res_max; + + if ( sr_core == INT_FS_12k8 ) + { + *pit_min = PIT_MIN_12k8; + *pit_max = PIT_MAX_12k8; + *pit_fr2 = PIT_FR2_12k8; + *pit_fr1 = PIT_FR1_12k8; + *pit_fr1b = PIT_FR1_8b_12k8; + pit_res_max = 4; + } + else if ( sr_core == INT_FS_16k ) + { + *pit_min = PIT_MIN_16k; + *pit_max = PIT16k_MAX; + *pit_fr2 = PIT_FR2_16k; + *pit_fr1 = PIT_FR1_16k; + *pit_fr1b = PIT_FR1_8b_16k; + pit_res_max = 6; + } + else if ( sr_core == 25600 ) + { + *pit_min = PIT_MIN_25k6; + *pit_max = PIT_MAX_25k6; + *pit_fr2 = PIT_FR2_25k6; + *pit_fr1 = PIT_FR1_25k6; + *pit_fr1b = PIT_FR1_8b_25k6; + pit_res_max = 4; + } + else /* sr_core==32000 */ + { + *pit_min = PIT_MIN_32k; + *pit_max = PIT_MAX_32k; + *pit_fr2 = PIT_FR2_32k; + *pit_fr1 = PIT_FR1_32k; + *pit_fr1b = PIT_FR1_8b_32k; + pit_res_max = 6; + } + + return pit_res_max; +} + +/*-------------------------------------------------------------------* + * getNumTcxCodedLines() + * + * + *-------------------------------------------------------------------*/ + +int16_t getNumTcxCodedLines( + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t tcx_coded_lines; + + switch ( bwidth ) + { + case NB: + tcx_coded_lines = 160; + break; + case WB: + tcx_coded_lines = 320; + break; + case SWB: + tcx_coded_lines = 640; + break; + case FB: + tcx_coded_lines = 960; + break; + default: + tcx_coded_lines = 0; + break; + } + + return tcx_coded_lines; +} + +/*-------------------------------------------------------------------* + * getTcxLpcShapedAri() + * + * + *-------------------------------------------------------------------*/ + +int16_t getTcxLpcShapedAri( + const int32_t total_brate, /* i : total bitrate */ + const int16_t rf_mode, /* i : flag to signal the RF mode */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + int16_t tcx_lpc_shaped_ari = 0; + + if ( ( ( element_mode <= IVAS_SCE && total_brate <= LPC_SHAPED_ARI_MAX_RATE ) || ( element_mode > IVAS_SCE && total_brate <= LPC_SHAPED_ARI_MAX_RATE_CPE ) ) || rf_mode ) + { + tcx_lpc_shaped_ari = 1; + } + + return tcx_lpc_shaped_ari; +} + + +/*-----------------------------------------------------------------------* + * init_tcx_window_cfg() + * + * Initialization of TCX windows + *-----------------------------------------------------------------------*/ + +void init_tcx_window_cfg( + TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX Config handle */ + const int32_t sr_core, /* i : SR core */ + const int32_t input_Fs, /* i : input/output SR */ + const int16_t L_frame, /* i : L_frame at sr_core */ + const int16_t L_frameTCX, /* i : L_frame at i/o SR */ + const int16_t encoderLookahead_enc, /* i : encoder LA at sr_core */ + const int16_t encoderLookahead_FB, /* i : encoder LA at i/o SR */ + const int16_t mdctWindowLength, /* i : window length at sr_core */ + const int16_t mdctWindowLengthFB, /* i : window length at i/o SR */ + const int16_t element_mode /* i : mode of CPE/SCE */ +) +{ + /* Symmetric window = sine LD window*/ + hTcxCfg->tcx_mdct_window_delay = mdctWindowLength; + hTcxCfg->tcx_mdct_window_delayFB = mdctWindowLengthFB; + hTcxCfg->tcx_mdct_window_length = mdctWindowLength; + hTcxCfg->tcx_mdct_window_lengthFB = mdctWindowLengthFB; + + mdct_window_sine( hTcxCfg->tcx_mdct_window, sr_core, hTcxCfg->tcx_mdct_window_length, FULL_OVERLAP, element_mode ); + if ( hTcxCfg->tcx_mdct_window_length == hTcxCfg->tcx_mdct_window_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window, hTcxCfg->tcx_mdct_windowFB, hTcxCfg->tcx_mdct_window_length ); + } + else + { + mdct_window_sine( hTcxCfg->tcx_mdct_windowFB, input_Fs, hTcxCfg->tcx_mdct_window_lengthFB, FULL_OVERLAP, element_mode ); + } + + /*ALDO windows for MODE2*/ + mdct_window_aldo( hTcxCfg->tcx_aldo_window_1, hTcxCfg->tcx_aldo_window_2, L_frame ); + mdct_window_aldo( hTcxCfg->tcx_aldo_window_1_FB, hTcxCfg->tcx_aldo_window_2_FB, NS2SA( input_Fs, FRAME_SIZE_NS ) ); + hTcxCfg->tcx_aldo_window_1_trunc = hTcxCfg->tcx_aldo_window_1 + NS2SA( sr_core, N_ZERO_MDCT_NS ); + hTcxCfg->tcx_aldo_window_1_FB_trunc = hTcxCfg->tcx_aldo_window_1_FB + NS2SA( input_Fs, N_ZERO_MDCT_NS ); + + /*1.25ms transition window for ACELP->TCX*/ + hTcxCfg->tcx_mdct_window_trans_length = NS2SA( sr_core, ACELP_TCX_TRANS_NS ); + mdct_window_sine( hTcxCfg->tcx_mdct_window_trans, sr_core, hTcxCfg->tcx_mdct_window_trans_length, TRANSITION_OVERLAP, element_mode ); + hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA( input_Fs, ACELP_TCX_TRANS_NS ); + if ( hTcxCfg->tcx_mdct_window_trans_length == hTcxCfg->tcx_mdct_window_trans_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_trans_length ); + } + else + { + mdct_window_sine( hTcxCfg->tcx_mdct_window_transFB, input_Fs, hTcxCfg->tcx_mdct_window_trans_lengthFB, TRANSITION_OVERLAP, element_mode ); + } + + /*Mid-OLA*/ + /*compute minimum length for "half" window: lookahead - 5ms. It must be also multiple of 2*/ + hTcxCfg->tcx_mdct_window_half_length = 2 * ( ( encoderLookahead_enc - (int16_t) ( 0.005f * sr_core + 0.5f ) ) >> 1 ); + hTcxCfg->tcx_mdct_window_half_lengthFB = 2 * ( ( encoderLookahead_FB - (int16_t) ( 0.005f * input_Fs + 0.5f ) ) >> 1 ); + assert( ( hTcxCfg->tcx_mdct_window_half_length > 16 ) && "Half window can not be large enough!" ); + + mdct_window_sine( hTcxCfg->tcx_mdct_window_half, sr_core, hTcxCfg->tcx_mdct_window_half_length, HALF_OVERLAP, element_mode ); + if ( hTcxCfg->tcx_mdct_window_half_length == hTcxCfg->tcx_mdct_window_half_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_half, hTcxCfg->tcx_mdct_window_halfFB, hTcxCfg->tcx_mdct_window_half_length ); + } + else + { + mdct_window_sine( hTcxCfg->tcx_mdct_window_halfFB, input_Fs, hTcxCfg->tcx_mdct_window_half_lengthFB, HALF_OVERLAP, element_mode ); + } + + /* minimum overlap 1.25 ms */ + hTcxCfg->tcx_mdct_window_min_length = (int16_t) ( sr_core * INV_CLDFB_BANDWIDTH ); + hTcxCfg->tcx_mdct_window_min_lengthFB = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH ); + /* save complexity by copying the small windows if they have the same length */ + /* TODO: is this always the case ? */ + if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_trans_length ) + { + mvr2r( hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_minimum, hTcxCfg->tcx_mdct_window_min_length ); + } + else + { + mdct_window_sine( hTcxCfg->tcx_mdct_window_minimum, sr_core, hTcxCfg->tcx_mdct_window_min_length, MIN_OVERLAP, element_mode ); + } + + if ( hTcxCfg->tcx_mdct_window_min_lengthFB == hTcxCfg->tcx_mdct_window_trans_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_minimumFB, hTcxCfg->tcx_mdct_window_min_lengthFB ); + } + else if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_min_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_minimum, hTcxCfg->tcx_mdct_window_minimumFB, hTcxCfg->tcx_mdct_window_min_lengthFB ); + } + else + { + mdct_window_sine( hTcxCfg->tcx_mdct_window_minimumFB, input_Fs, hTcxCfg->tcx_mdct_window_min_lengthFB, MIN_OVERLAP, element_mode ); + } + + /* TCX Offset */ + hTcxCfg->tcx_offset = ( hTcxCfg->tcx_mdct_window_delay >> 1 ); + hTcxCfg->tcx_offsetFB = ( hTcxCfg->tcx_mdct_window_delayFB >> 1 ); + /*<0 rectangular transition with optimized window size = L_frame+L_frame/4*/ + hTcxCfg->lfacNext = hTcxCfg->tcx_offset - L_frame / 4; + hTcxCfg->lfacNextFB = hTcxCfg->tcx_offsetFB - L_frameTCX / 4; + + return; +} + +/*-----------------------------------------------------------------------* + * init_tcx() + * + * Initialization of TCX + *-----------------------------------------------------------------------*/ + +void init_tcx_cfg( + TCX_CONFIG_HANDLE hTcxCfg, + const int32_t total_brate, + const int32_t sr_core, + const int32_t input_Fs, + const int16_t L_frame, + const int16_t bwidth, + const int16_t L_frameTCX, + const int16_t fscale, + const int16_t encoderLookahead_enc, + const int16_t encoderLookahead_FB, + const float preemph_fac, + const int16_t tcxonly, + const int16_t rf_mode, + const int16_t igf, + const int16_t infoIGFStopFreq, + const int16_t element_mode, + const int16_t ini_frame, + const int16_t is_mct, + const MCT_CHAN_MODE mct_chan_mode /* i : MDCT channel mode */ +) +{ + int16_t i; + int16_t mdctWindowLength; + int16_t mdctWindowLengthFB; + int16_t na_scale_bwidth; + + hTcxCfg->preemph_fac = preemph_fac; + hTcxCfg->tcx5Size = NS2SA( sr_core, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ + hTcxCfg->tcx5SizeFB = NS2SA( input_Fs, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ + + hTcxCfg->tcx_mdct_window_length_old = hTcxCfg->tcx_mdct_window_length; + mdctWindowLength = getMdctWindowLength( fscale ); + mdctWindowLengthFB = (int16_t) ( mdctWindowLength * input_Fs / sr_core ); + + init_tcx_window_cfg( hTcxCfg, sr_core, input_Fs, L_frame, L_frameTCX, encoderLookahead_enc, encoderLookahead_FB, mdctWindowLength, mdctWindowLengthFB, element_mode ); + + /* SQ deadzone & memory quantization*/ + hTcxCfg->sq_rounding = 0.375f; /*deadzone of 1.25->rounding=1-1.25/2 (No deadzone=0.5)*/ + + /* TCX rate loop */ + hTcxCfg->tcxRateLoopOpt = ( tcxonly ) ? 2 : 0; + hTcxCfg->tcxRateLoopOpt = ( element_mode == IVAS_CPE_MDCT ) ? 3 : hTcxCfg->tcxRateLoopOpt; + + /* TCX bandwidth */ + hTcxCfg->bandwidth = getTcxBandwidth( bwidth ); + + /* set number of coded lines */ + hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); + + if ( mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + hTcxCfg->tcx_coded_lines = MCT_LFE_MAX_LINE; + } + /* TNS in TCX */ + hTcxCfg->pCurrentTnsConfig = NULL; + hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, igf, element_mode, mct_chan_mode ); + + if ( hTcxCfg->fIsTNSAllowed ) + { + InitTnsConfigs( bwidth, hTcxCfg->tcx_coded_lines, hTcxCfg->tnsConfig, infoIGFStopFreq, total_brate, element_mode, is_mct ); + + SetAllowTnsOnWhite( hTcxCfg->tnsConfig, element_mode == IVAS_CPE_MDCT ); + } + + if ( ini_frame == 0 ) + { + hTcxCfg->tcx_curr_overlap_mode = hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + hTcxCfg->last_aldo = 1; + } + + /* Context HM*/ + hTcxCfg->ctx_hm = getCtxHm( element_mode, total_brate, rf_mode ); + + /* Residual Coding*/ + hTcxCfg->resq = getResq( total_brate ); + hTcxCfg->tcxRateLoopOpt = ( hTcxCfg->resq && !tcxonly ) ? 1 : hTcxCfg->tcxRateLoopOpt; + + /*Set bandwidth scale*/ + if ( bwidth == NB ) + { + na_scale_bwidth = NB; + } + else if ( sr_core <= INT_FS_16k ) + { + na_scale_bwidth = WB; + } + else + { + na_scale_bwidth = SWB; + } + + /* Scale TCX for non-active frames to adjust loudness with ACELP*/ + hTcxCfg->na_scale = 1.f; + + if ( na_scale_bwidth < SWB && !tcxonly ) + { + for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) + { + if ( ( na_scale_bwidth == scaleTcxTable[i].bwmode ) && + ( total_brate >= scaleTcxTable[i].bitrateFrom ) && + ( total_brate < scaleTcxTable[i].bitrateTo ) ) + { + if ( rf_mode ) + { + i--; + } + hTcxCfg->na_scale = scaleTcxTable[i].scale; + break; + } + } + } + + if ( tcxonly ) + { + InitPsychLPC( sr_core, L_frame, hTcxCfg ); + } + else + { + hTcxCfg->psychParamsCurrent = NULL; + } + + return; +} diff --git a/lib_com/deemph.c b/lib_com/deemph.c new file mode 100644 index 0000000000..20b5c43719 --- /dev/null +++ b/lib_com/deemph.c @@ -0,0 +1,74 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * deemph() + * + * Deemphasis: filtering through 1/(1-mu z^-1) + *-------------------------------------------------------------------*/ + +void deemph( + float *signal, /* i/o: signal */ + const float mu, /* i : deemphasis factor */ + const int16_t L, /* i : vector size */ + float *mem /* i/o: memory (y[-1]) */ +) +{ + int16_t i; + + signal[0] = signal[0] + mu * ( *mem ); + for ( i = 1; i < L; i++ ) + { + signal[i] = signal[i] + mu * signal[i - 1]; + } + + *mem = signal[L - 1]; + + if ( ( *mem < 1e-10 ) & ( *mem > -1e-10 ) ) + { + *mem = 0; + } + + return; +} diff --git a/lib_com/delay_comp.c b/lib_com/delay_comp.c new file mode 100644 index 0000000000..a957150b93 --- /dev/null +++ b/lib_com/delay_comp.c @@ -0,0 +1,111 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "ivas_cnst.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * get_delay() + * + * Function returns various types of delays in the codec in ns. + *--------------------------------------------------------------------------*/ + +/*! r: delay value in ns */ +float get_delay( + const int16_t what_delay, /* i : what delay? (ENC or DEC) */ + const int32_t io_fs, /* i : input/output sampling frequency */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + HANDLE_CLDFB_FILTER_BANK hCldfb, /* i : Handle of Cldfb analysis */ + RENDERER_TYPE renderer_type, /* i : IVAS rendering type */ + const int32_t binaural_latency_ns /* i : binaural renderer HRTF delay in ns */ +) +{ + float delay = 0; + + if ( what_delay == ENC ) + { + if ( ivas_format == MONO_FORMAT ) /* EVS mono */ + { + delay = ( DELAY_FIR_RESAMPL_NS + ACELP_LOOK_NS ); + } + else /* IVAS */ + { + delay = IVAS_ENC_DELAY_NS; + } + + if ( ivas_format == SBA_FORMAT ) + { + /* compensate for DirAC/SPAR filterbank delay */ + delay += IVAS_FB_ENC_DELAY_NS; + } + } + else + { + if ( ivas_format == MONO_FORMAT ) /* EVS mono */ + { + if ( io_fs == 8000 ) + { + delay = DELAY_CLDFB_NS; + } + else + { + delay = DELAY_BWE_TOTAL_NS; + } + } + else /* IVAS */ + { + delay = IVAS_DEC_DELAY_NS; + + if ( hCldfb != NULL || renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + { + delay += IVAS_FB_DEC_DELAY_NS; + } + + /* compensate for Binaural renderer HRTF delay */ + { + delay += binaural_latency_ns; + } + } + } + + return delay; +} diff --git a/lib_com/disclaimer.c b/lib_com/disclaimer.c new file mode 100644 index 0000000000..163610a8c7 --- /dev/null +++ b/lib_com/disclaimer.c @@ -0,0 +1,56 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" + +int16_t print_disclaimer( FILE *fPtr ) +{ + + fprintf( fPtr, "\n==================================================================================================\n" ); + fprintf( fPtr, " Final Baseline Candidate for PC on IVAS Extension to EVS Codec, 2022-05-30\n" ); + fprintf( fPtr, " \n" ); + fprintf( fPtr, " Based on EVS Codec (Floating Point) 3GPP TS26.443 Nov 04, 2021,\n" ); + fprintf( fPtr, " Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0\n" ); + fprintf( fPtr, "==================================================================================================\n\n" ); + + return 0; +} diff --git a/lib_com/dlpc_bfi.c b/lib_com/dlpc_bfi.c new file mode 100644 index 0000000000..33ba286c3c --- /dev/null +++ b/lib_com/dlpc_bfi.c @@ -0,0 +1,80 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * routine: dlpc_bfi() + * + * + *---------------------------------------------------------------------*/ + +void dlpc_bfi( + const int16_t L_frame, + float *lsf_q, /* o : quantized lsfs */ + const float *lsfold, /* i : past quantized lsf */ + const int16_t last_good, /* i : last good received frame */ + const int16_t nbLostCmpt, /* i : counter of consecutive bad frames */ + float mem_MA[], /* i/o: quantizer memory for MA model */ + float *mem_AR, /* i/o: quantizer memory for AR model */ + float *stab_fac, /* i : lsf stability factor */ + float *lsf_adaptive_mean, /* i : lsf adaptive mean, updated when BFI==0 */ + const int16_t numlpc, /* i : Number of division per superframe */ + float lsf_cng[], + const int16_t plcBackgroundNoiseUpdated, + float *lsf_q_cng, /* o : quantized lsfs of background noise */ + float *old_lsf_q_cng, /* o : old quantized lsfs for background noise */ + const float lsfBase[] /* i : base for differential lsf coding */ +) +{ + lsf_dec_bfi( MODE2, &lsf_q[0], lsfold, lsf_adaptive_mean, lsfBase, mem_MA, mem_AR, *stab_fac, 0, L_frame, last_good, nbLostCmpt, plcBackgroundNoiseUpdated, lsf_q_cng, lsf_cng, old_lsf_q_cng, 0, 0, 0 ); + + if ( numlpc == 2 ) + { + /* Decode the second LPC */ + lsf_dec_bfi( MODE2, &lsf_q[M], &lsf_q[0], lsf_adaptive_mean, lsfBase, mem_MA, mem_AR, *stab_fac, 0, L_frame, last_good, nbLostCmpt + 1, plcBackgroundNoiseUpdated, lsf_q_cng, lsf_cng, old_lsf_q_cng, 0, 0, 0 ); + } + + return; +} diff --git a/lib_com/edct.c b/lib_com/edct.c new file mode 100644 index 0000000000..8fe84049a6 --- /dev/null +++ b/lib_com/edct.c @@ -0,0 +1,424 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" +#include /* for cosf, sinf */ + +static ivas_error get_edct_table( + const float **edct_table, + const int16_t length ) +{ + ivas_error error; + + error = IVAS_ERR_OK; + *edct_table = NULL; + + switch ( length ) + { + case 1200: + *edct_table = edct_table_600; + break; + case 960: + *edct_table = edct_table_480; + break; + case 640: + *edct_table = edct_table_320; + break; + case 320: + *edct_table = edct_table_160; + break; + case 256: + *edct_table = edct_table_128; + break; + case 240: + *edct_table = edct_table_120; + break; + case 200: + *edct_table = edct_table_100; + break; + case 160: + *edct_table = edct_table_80; + break; + case 40: + *edct_table = edct_table_20; + break; + case 800: + *edct_table = edct_table_400; + break; + case 512: + *edct_table = edct_table_256; + break; + case 480: + *edct_table = edct_table_240; + break; + case 400: + *edct_table = edct_table_200; + break; + case 128: + *edct_table = edct_table_64; + break; + case 80: + *edct_table = edct_table_40; + break; +#ifdef DEBUGGING + default: + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "edct/edst(): length is not in table!" ); +#endif + } + + return error; +} + + +/*-----------------------------------------------------------------* + * edct() + * + * DCT-IV transform + *-----------------------------------------------------------------*/ + +void edct( + const float *x, /* i : input signal */ + float *y, /* o : output transform */ + const int16_t length, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + int16_t i; + float re[L_FRAME_PLUS / 2]; + float im[L_FRAME_PLUS / 2]; + const float *edct_table = 0; + float local; + + get_edct_table( &edct_table, length ); + + /* Twiddling and Pre-rotate */ + for ( i = 0; i < length / 2; i++ ) + { + re[i] = x[2 * i] * edct_table[i] + x[length - 1 - 2 * i] * edct_table[length / 2 - 1 - i]; + im[i] = x[length - 1 - 2 * i] * edct_table[i] - x[2 * i] * edct_table[length / 2 - 1 - i]; + } + + if ( element_mode == EVS_MONO ) + { + DoFFT( re, im, length / 2 ); + } + else + { + fft( re, im, length / 2, 1 ); + } + + local = ( 0.75f * EVS_PI ) / length; + + for ( i = 0; i < length / 2; i++ ) + { + float tmp; + tmp = re[i] - im[i] * local; /* 3*pi/(4*length) is a constant */ + im[i] = im[i] + re[i] * local; + re[i] = tmp; + } + + /* Post-rotate and obtain the output data */ + for ( i = 0; i < length / 2; i++ ) + { + y[2 * i] = re[i] * edct_table[i] + im[i] * edct_table[length / 2 - 1 - i]; + y[length - 1 - 2 * i] = re[i] * edct_table[length / 2 - 1 - i] - im[i] * edct_table[i]; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * edst() + * + * DST-IV transform + *-------------------------------------------------------------------------*/ + +void edst( + const float *x, /* i : input signal */ + float *y, /* o : output transform */ + const int16_t length, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + int16_t i; + float re[L_FRAME_PLUS / 2]; + float im[L_FRAME_PLUS / 2]; + const float *edct_table = 0; + float local; + + get_edct_table( &edct_table, length ); + + /* Twiddling and Pre-rotate */ + for ( i = 0; i < length / 2; i++ ) + { + re[i] = x[length - 1 - 2 * i] * edct_table[i] + x[2 * i] * edct_table[length / 2 - 1 - i]; + im[i] = x[2 * i] * edct_table[i] - x[length - 1 - 2 * i] * edct_table[length / 2 - 1 - i]; + } + + if ( element_mode == EVS_MONO ) + { + DoFFT( re, im, length / 2 ); + } + else + { + fft( re, im, length / 2, 1 ); + } + + local = ( 0.75f * EVS_PI ) / length; + + for ( i = 0; i < length / 2; i++ ) + { + float tmp; + tmp = re[i] - im[i] * local; /* 3*pi/(4*length) is a constant */ + im[i] = im[i] + re[i] * local; + re[i] = tmp; + } + + /* Post-rotate and obtain the output data */ + for ( i = 0; i < length / 2; i++ ) + { + y[2 * i] = re[i] * edct_table[i] + im[i] * edct_table[length / 2 - 1 - i]; + y[length - 1 - 2 * i] = im[i] * edct_table[i] - re[i] * edct_table[length / 2 - 1 - i]; + } + + return; +} + +#define FAST_EDXT /* optimized FFT-based DCT/DST algorithm */ + +/*-------------------------------------------------------------------------* + * edxt() + * + * DCT/DST-II or III transform (currently also calculates DCT-IV and DST-IV) + *-------------------------------------------------------------------------*/ + +void edxt( + const float *x, /* i : input signal */ + float *y, /* o : output transform */ + const int16_t length, /* i : length */ + const uint16_t kernelType, /* i : kernel type (0 - 3) */ + const uint16_t synthesis /* i : nonzero for inverse */ +) +{ + const float pi_len = EVS_PI / length; + int16_t k, m; + +#ifdef FAST_EDXT + if ( kernelType == MDST_II || kernelType == MDCT_II ) + { + const int16_t Nm1 = length - 1; + const float xSign = 2.f * ( kernelType >> 1 ) - 1.f; + const float scale = 0.5f * pi_len; + float re[L_FRAME_PLUS]; + float im[L_FRAME_PLUS]; + + if ( !synthesis ) + { + for ( k = Nm1 >> 1; k >= 0; k-- ) /* pre-modulation of audio input */ + { + re[k] = x[2 * k]; + re[Nm1 - k] = x[2 * k + 1] * xSign; + im[k] = im[Nm1 - k] = 0.f; + } + + if ( length == 512 ) + { + DoRTFTn( re, im, 512 ); + } + else /* fft() doesn't support 512 */ + { + fft( re, im, length, 1 ); + } + + if ( kernelType >> 1 ) + { + for ( k = Nm1 >> 1; k > 0; k-- ) + { + const float wRe = cosf( scale * k ); + const float wIm = sinf( scale * k ); + + y[k] /*pt 1*/ = wRe * re[k] + wIm * im[k]; + y[length - k] = wIm * re[k] - wRe * im[k]; + } + y[length >> 1] = re[length >> 1] * sqrtf( 0.5f ); + } + else /* forw. DST-II */ + { + for ( k = Nm1 >> 1; k > 0; k-- ) + { + const float wRe = cosf( scale * k ); + const float wIm = sinf( scale * k ); + + y[Nm1 - k] = wRe * re[k] + wIm * im[k]; + y[k - 1] = wIm * re[k] - wRe * im[k]; + } + y[Nm1 >> 1] = re[length >> 1] * sqrtf( 0.5f ); + } + + y[Nm1 - Nm1 * ( kernelType >> 1 )] = re[0] * 0.5f; + } + else /* inverse II = III */ + { + if ( kernelType >> 1 ) + { + for ( k = Nm1 >> 1; k > 0; k-- ) + { + const float wRe = cosf( scale * k ) * 0.5f; + const float wIm = sinf( scale * k ) * 0.5f; + + re[k] = wRe * x[k] + wIm * x[length - k]; + im[k] = wRe * x[length - k] - wIm * x[k]; + } + re[length >> 1] = x[length >> 1] * sqrtf( 0.5f ); + } + else /* DST type III */ + { + for ( k = Nm1 >> 1; k > 0; k-- ) + { + const float wRe = cosf( scale * k ) * 0.5f; + const float wIm = sinf( scale * k ) * 0.5f; + + re[k] = wRe * x[Nm1 - k] + wIm * x[k - 1]; + im[k] = wRe * x[k - 1] - wIm * x[Nm1 - k]; + } + re[length >> 1] = x[Nm1 >> 1] * sqrtf( 0.5f ); + } + + re[0] = x[Nm1 - Nm1 * ( kernelType >> 1 )]; + im[0] = im[length >> 1] = 0.f; + for ( k = Nm1 >> 1; k > 0; k-- ) + { + re[length - k] = re[k]; + im[length - k] = -im[k]; + } + + if ( length == 512 ) + { + DoRTFTn( re, im, 512 ); + } + else /* fft() doesn't support 512 */ + { + fft( re, im, length, 1 ); + } + + for ( k = Nm1 >> 1; k >= 0; k-- ) /* post-modulation of FFT output */ + { + y[2 * k] = re[k]; + y[2 * k + 1] = re[Nm1 - k] * xSign; + } + } + } + else +#endif + if ( kernelType & 1 ) /* DST */ + { + const float offK = ( kernelType == MDST_II && synthesis ? 0.5f : 1.0f - 0.5f * ( kernelType >> 1 ) ); + const float offM = ( kernelType == MDST_II && synthesis ? 1.0f : 0.5f ); + + for ( k = 0; k < length; k++ ) + { + y[k] = 0.f; + for ( m = 0; m < length; m++ ) + { + y[k] += x[m] * sinf( pi_len * ( m + offM ) * ( k + offK ) ); + } + } + if ( offK == 1.f ) + { + y[length - 1] *= 0.5f; /* scale Nyquist sample */ + } + } + else /* kernelType 0, 2: DCT */ + { + const float offK = ( kernelType == MDCT_II && synthesis ? 0.5f : 0.5f - 0.5f * ( kernelType >> 1 ) ); + const float offM = ( kernelType == MDCT_II && synthesis ? 0.0f : 0.5f ); + + for ( k = 0; k < length; k++ ) + { + y[k] = 0.f; + for ( m = 0; m < length; m++ ) + { + y[k] += x[m] * cosf( pi_len * ( m + offM ) * ( k + offK ) ); + } + } + if ( offK == 0.f ) + { + y[0] *= 0.5f; /* scale lowest (i.e. DC) sample */ + } + } + + v_multc( y, ( kernelType == MDCT_II ? -1.f : 1.f ) * sqrtf( 2.f / length ), y, length ); + + return; +} + +/*-----------------------------------------------------------------* + * iedct_short() + * + * Inverse EDCT for short frames + *-----------------------------------------------------------------*/ + +void iedct_short( + const float *in, /* i : input vector */ + float *out, /* o : output vector */ + const int16_t segment_length, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + float alias[MAX_SEGMENT_LENGTH]; + int16_t i; + + edct( in, alias, segment_length / 2, element_mode ); + + for ( i = 0; i < segment_length / 4; i++ ) + { + out[i] = alias[segment_length / 4 + i]; + out[segment_length / 4 + i] = -alias[segment_length / 2 - 1 - i]; + out[segment_length / 2 + i] = -alias[segment_length / 4 - 1 - i]; + out[3 * segment_length / 4 + i] = -alias[i]; + } + + return; +} diff --git a/lib_com/enh1632.c b/lib_com/enh1632.c new file mode 100644 index 0000000000..985398eec9 --- /dev/null +++ b/lib_com/enh1632.c @@ -0,0 +1,633 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* WMC_TOOL_SKIP_FILE (basic ops file) */ +/* + =========================================================================== + File: ENH1632.C v.2.3 - 30.Nov.2009 + =========================================================================== + + ITU-T STL BASIC OPERATORS + + ENHANCED 16-BIT & 32-BIT ARITHMETIC OPERATORS + + History: + 07 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + + ============================================================================ +*/ + + +/***************************************************************************** + * + * Enhanced 16/32 bit operators : + * s_max() + * s_min() + * L_max() + * L_min() + * shl_r() + * L_shl_r() + * L_mac0() + * L_mult0() + * L_msu0() + * s_and() + * s_or() + * s_xor() + * L_and() + * L_or() + * lshl() + * lshr() + * L_lshl() + * L_lshr() + * rotr() + * rotl() + * L_rotr() + * L_rotl() + * + *****************************************************************************/ + + +/***************************************************************************** + * + * Include-Files + * + *****************************************************************************/ + +#include +#include +#include "stl.h" + +/***************************************************************************** + * + * Constants and Globals + * + *****************************************************************************/ + + +/***************************************************************************** + * + * Functions + * + *****************************************************************************/ + + +/***************************************************************************** + * + * Function Name : lshl + * + * Purpose : + * + * Logically shifts left var1 by var2 positions. + * - If var2 is negative, var1 is shifted to the LSBits by (-var2) + * positions with insertion of 0 at the MSBit. + * - If var2 is positive, var1 is shifted to the MSBits by (var2) + * positions. + * + * Complexity weight : 1 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value: + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +Word16 lshl( Word16 var1, Word16 var2 ) +{ + Word16 var_out = 0; + + if ( var2 < 0 ) + { + var2 = -var2; + var_out = lshr( var1, var2 ); + } + else + { + if ( var2 == 0 || var1 == 0 ) + { + var_out = var1; + } + else if ( var2 >= 16 ) + { + var_out = 0; + } + else + { + var_out = var1 << var2; + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} + +/***************************************************************************** + * + * Function Name : lshr + * + * Purpose : + * + * Logically shifts right var1 by var2 positions. + * - If var2 is positive, var1 is shifted to the LSBits by (var2) + * positions with insertion of 0 at the MSBit. + * - If var2 is negative, var1 is shifted to the MSBits by (-var2) + * positions. + * + * Complexity weight : 1 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value: + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +Word16 lshr( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + if ( var2 < 0 ) + { + var2 = -var2; + var_out = lshl( var1, var2 ); + } + else + { + if ( var2 == 0 || var1 == 0 ) + { + var_out = var1; + } + else if ( var2 >= 16 ) + { + var_out = 0; + } + else + { + var_out = var1 >> 1; + var_out = var_out & 0x7fff; + var_out = var_out >> ( var2 - 1 ); + } + } + + BASOP_CHECK(); + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_lshl + * + * Purpose : + * + * Logically shifts left L_var1 by var2 positions. + * - If var2 is negative, L_var1 is shifted to the LSBits by (-var2) + * positions with insertion of 0 at the MSBit. + * - If var2 is positive, L_var1 is shifted to the MSBits by (var2) + * positions. + * + * Complexity weight : 1 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in + * the range 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value: + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in + * the range 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +Word32 L_lshl( Word32 L_var1, Word16 var2 ) +{ + Word32 L_var_out = 0; + + if ( var2 < 0 ) + { + var2 = -var2; + L_var_out = L_lshr( L_var1, var2 ); + } + else + { + if ( var2 == 0 || L_var1 == 0 ) + { + L_var_out = L_var1; + } + else if ( var2 >= 32 ) + { + L_var_out = 0; + } + else + { + L_var_out = L_var1 << var2; + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_lshr + * + * Purpose : + * + * Logically shifts right L_var1 by var2 positions. + * - If var2 is positive, L_var1 is shifted to the LSBits by (var2) + * positions with insertion of 0 at the MSBit. + * - If var2 is negative, L_var1 is shifted to the MSBits by (-var2) + * positions. + * + * Complexity weight : 1 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in + * the range 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value: + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in + * the range 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +Word32 L_lshr( Word32 L_var1, Word16 var2 ) +{ + Word32 L_var_out; + + if ( var2 < 0 ) + { + var2 = -var2; + L_var_out = L_lshl( L_var1, var2 ); + } + else + { + if ( var2 == 0 || L_var1 == 0 ) + { + L_var_out = L_var1; + } + else if ( var2 >= 32 ) + { + L_var_out = 0; + } + else + { + L_var_out = L_var1 >> 1; + L_var_out = L_var_out & 0x7fffffff; + L_var_out = L_var_out >> ( var2 - 1 ); + } + } + + BASOP_CHECK(); + + + return ( L_var_out ); +} + + +/***************************************************************************** + * + * Function Name : shl_r + * + * Purpose : + * + * Identical to shl( var1, var2) but with rounding. Saturates the result + * in case of underflows or overflows. + * + * Complexity weight : 3 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +Word16 shl_r( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + if ( var2 >= 0 ) + { + var_out = shl( var1, var2 ); + } + else + { + var2 = -var2; + var_out = shr_r( var1, var2 ); + } + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_shl_r + * + * Purpose : + * + * Same as L_shl( var1, var2) but with rounding. Saturates the result in + * case of underflows or overflows. + * + * Complexity weight : 3 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= var_out <= 0x7fff ffff. + * + *****************************************************************************/ +Word32 L_shl_r( Word32 L_var1, Word16 var2 ) +{ + Word32 var_out; + + if ( var2 >= 0 ) + { + var_out = L_shl( L_var1, var2 ); + } + else + { + var2 = -var2; + var_out = L_shr_r( L_var1, var2 ); + } + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : rotr + * + * Purpose : + * + * Performs a 16-bit logical rotation of var1 by 1 bit to the LSBits. The + * MSBit is set to var2 bit 0. The LSBit of var1 is kept in *var3 bit 0. + * + * Complexity weight : 3 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value must be 0 + * or 1. + * + * Outputs : + * + * *var3 Points on a 16 bit short signed integer (Word16) whose + * value will be 0 or 1. + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +Word16 rotr( Word16 var1, Word16 var2, Word16 *var3 ) +{ + Word16 var_out; + + *var3 = s_and( var1, 0x1 ); + var_out = s_or( lshr( var1, 1 ), lshl( var2, 15 ) ); + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : rotl + * + * Purpose : + * + * Performs a 16-bit logical rotation of var1 by 1 bit to the MSBits. The + * LSBit is set to var2 bit 0. The MSBit of var1 is kept in *var3 bit 0. + * + * Complexity weight : 3 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value must be 0 + * or 1. + * + * Outputs : + * + * *var3 Points on a 16 bit short signed integer (Word16) whose + * value will be 0 or 1. + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +Word16 rotl( Word16 var1, Word16 var2, Word16 *var3 ) +{ + Word16 var_out; + + *var3 = lshr( var1, 15 ); + + var_out = s_or( lshl( var1, 1 ), s_and( var2, 0x1 ) ); + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_rotr + * + * Purpose : + * + * Performs a 32-bit logical rotation of L_var1 by 1 bit to the LSBits. The + * MSBit is set to var2 bit 0. The LSBit of L_var1 is kept in *var3 bit 0. + * + * Complexity weight : 3 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * var2 16 bit short signed integer (Word16) whose value must be 0 + * or 1. + * + * Outputs : + * + * *var3 Points on a 16 bit short signed integer (Word16) whose + * value will be 0 or 1. + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +Word32 L_rotr( Word32 L_var1, Word16 var2, Word16 *var3 ) +{ + Word32 L_var_out; + + *var3 = s_and( extract_l( L_var1 ), 0x1 ); + + L_var_out = L_or( L_lshr( L_var1, 1 ), L_lshl( L_deposit_l( var2 ), 31 ) ); + + + return ( L_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_rotl + * + * Purpose : + * + * Performs a 32-bit logical rotation of L_var1 by 1 bit to the MSBits. The + * LSBit is set to var2 bit 0. The MSBit of L_var1 is kept in *var3 bit 0. + * + * Complexity weight : 3 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * var2 16 bit short signed integer (Word16) whose value must be 0 + * or 1. + * + * Outputs : + * + * *var3 Points on a 16 bit short signed integer (Word16) whose + * value will be 0 or 1. + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +Word32 L_rotl( Word32 L_var1, Word16 var2, Word16 *var3 ) +{ + Word32 L_var_out; + + *var3 = extract_l( L_lshr( L_var1, 31 ) ); + + L_var_out = L_or( L_lshl( L_var1, 1 ), L_deposit_l( s_and( var2, 0x1 ) ) ); + + + return ( L_var_out ); +} + + +/* end of file */ diff --git a/lib_com/enh1632.h b/lib_com/enh1632.h new file mode 100644 index 0000000000..a46fb8dbe7 --- /dev/null +++ b/lib_com/enh1632.h @@ -0,0 +1,508 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* + =========================================================================== + File: ENH1632.H v.2.3 - 30.Nov.2009 + =========================================================================== + + ITU-T STL BASIC OPERATORS + + ENHANCED 16-BIT & 32-BIT ARITHMETIC OPERATORS + + History: + 07 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + March 06 v2.1 Changed to improve portability. + Some counters incrementations were missing (s_and, + s_or, s_xor). + 30 Nov 09 v2.3 saturate() removed + + ============================================================================ +*/ + + +#ifndef _ENH1632_H +#define _ENH1632_H + + +/***************************************************************************** + * + * Constants and Globals + * + *****************************************************************************/ + + +#include "stl.h" + + +/***************************************************************************** + * + * Prototypes for enhanced 16/32 bit arithmetic operators + * + *****************************************************************************/ +Word16 shl_r( Word16 var1, Word16 var2 ); +Word32 L_shl_r( Word32 L_var1, Word16 var2 ); + + +Word16 lshl( Word16 var1, Word16 var2 ); +Word16 lshr( Word16 var1, Word16 var2 ); +Word32 L_lshl( Word32 L_var1, Word16 var2 ); +Word32 L_lshr( Word32 L_var1, Word16 var2 ); + +Word16 rotr( Word16 var1, Word16 var2, Word16 *var3 ); +Word16 rotl( Word16 var1, Word16 var2, Word16 *var3 ); +Word32 L_rotr( Word32 var1, Word16 var2, Word16 *var3 ); +Word32 L_rotl( Word32 var1, Word16 var2, Word16 *var3 ); + + +/***************************************************************************** + * + * Functions + * + *****************************************************************************/ + +/***************************************************************************** + * + * Function Name : s_max + * + * Purpose : + * + * Compares var1 and var2 and returns the maximum value. + * + * Complexity weight : 1 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value falls in + * the range : 0x8000 <= var1 <= 0x7fff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : 0x8000 <= var2 <= 0x7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range : 0x8000 <= L_var_out <= 0x7fff. + * + *****************************************************************************/ +static __inline Word16 s_max( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + if ( var1 >= var2 ) + var_out = var1; + else + var_out = var2; + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : s_min + * + * Purpose : + * + * Compares var1 and var2 and returns the minimum value. + * + * Complexity weight : 1 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value falls in + * the range : 0x8000 <= var1 <= 0x7fff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : 0x8000 <= var2 <= 0x7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range : 0x8000 <= var_out <= 0x7fff. + * + *****************************************************************************/ +static __inline Word16 s_min( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + if ( var1 <= var2 ) + var_out = var1; + else + var_out = var2; + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_max + * + * Purpose : + * + * Compares L_var1 and L_var2 and returns the maximum value. + * + * Complexity weight : 1 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * L_var2 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var2 <= 0x7fff ffff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +static __inline Word32 L_max( Word32 L_var1, Word32 L_var2 ) +{ + Word32 L_var_out; + + if ( L_var1 >= L_var2 ) + L_var_out = L_var1; + else + L_var_out = L_var2; + + + return ( L_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_min + * + * Purpose : + * + * Compares L_var1 and L_var2 and returns the minimum value. + * + * Complexity weight : 1 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * L_var2 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var2 <= 0x7fff ffff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +static __inline Word32 L_min( Word32 L_var1, Word32 L_var2 ) +{ + Word32 L_var_out; + + if ( L_var1 <= L_var2 ) + L_var_out = L_var1; + else + L_var_out = L_var2; + + + return ( L_var_out ); +} + + +/***************************************************************************** + * + * Function Name : s_and + * + * Purpose : + * + * Performs logical AND of the two 16 bit input variables. + * var_out = var1 & var2 + * + * Complexity weight : 1 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +static __inline Word16 s_and( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + var_out = var1 & var2; + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_and + * + * Purpose : + * + * Performs logical AND of the two 32 bit input variables. + * L_var_out = L_var1 & L_var2 + * + * Complexity weight : 1 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * L_var2 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var2 <= 0x7fff ffff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +static __inline Word32 L_and( Word32 L_var1, Word32 L_var2 ) +{ + Word32 L_var_out; + + L_var_out = L_var1 & L_var2; + + + return ( L_var_out ); +} + + +/***************************************************************************** + * + * Function Name : s_or + * + * Purpose : + * + * Performs logical OR of the two 16 bit input variables. + * var_out = var1 | var2 + * + * Complexity weight : 1 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +static __inline Word16 s_or( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + var_out = var1 | var2; + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_or + * + * Purpose : + * + * Performs logical OR of the two 32 bit input variables. + * L_var_out = L_var1 | L_var2 + * + * Complexity weight : 1 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * L_var2 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var2 <= 0x7fff ffff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +static __inline Word32 L_or( Word32 L_var1, Word32 L_var2 ) +{ + + Word32 L_var_out; + + L_var_out = L_var1 | L_var2; + + + return ( L_var_out ); +} + + +/***************************************************************************** + * + * Function Name : s_xor + * + * Purpose : + * + * Performs logical XOR of the two 16 bit input variables. + * var_out = var1 ^ var2 + * + * Complexity weight : 1 + * + * Inputs : + * + * var1 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var1 <= 0x0000 7fff. + * + * var2 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value + * falls in the range 0xffff 8000 <= var_out <= 0x0000 7fff. + * + *****************************************************************************/ +static __inline Word16 s_xor( Word16 var1, Word16 var2 ) +{ + Word16 var_out; + + var_out = var1 ^ var2; + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_xor + * + * Purpose : + * + * Performs logical OR of the two 32 bit input variables. + * L_var_out = L_var1 ^ L_var2 + * + * Complexity weight : 1 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * L_var2 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var2 <= 0x7fff ffff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value + * falls in the range 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +static __inline Word32 L_xor( Word32 L_var1, Word32 L_var2 ) +{ + Word32 L_var_out; + + L_var_out = L_var1 ^ L_var2; + + + return ( L_var_out ); +} + + +#endif /*_ENH1632_H*/ + +/* end of file */ diff --git a/lib_com/enh40.c b/lib_com/enh40.c new file mode 100644 index 0000000000..777bfffd8f --- /dev/null +++ b/lib_com/enh40.c @@ -0,0 +1,1311 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* WMC_TOOL_SKIP_FILE (basic ops file) */ +/* + =========================================================================== + File: ENH40.C v.2.3 - 30.Nov.2009 + =========================================================================== + + ITU-T STL BASIC OPERATORS + + 40-BIT ARITHMETIC OPERATORS + + History: + 07 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + + ============================================================================ +*/ + + +/***************************************************************************** + * + * Enhanced 40 bit operators : + * + * L40_add() + * L40_sub() + * L40_abs() + * L40_negate() + * L40_max() + * L40_min() + * L40_shr() + * L40_shr_r() + * L40_shl() + * L40_shl_r() + * norm_L40() + * L40_mult() + * L40_mac() + * L40_msu() + * mac_r40() + * msu_r40() + * Mpy_32_16_ss() + * Mpy_32_32_ss() + * L40_lshl() + * L40_lshr() + * L40_round() + * L_saturate40() + * L40_set() + * Extract40_H() + * Extract40_L() + * L_Extract40() + * L40_deposit_h() + * L40_deposit_l() + * L40_deposit32() + * + *****************************************************************************/ + + +/***************************************************************************** + * + * Include-Files + * + *****************************************************************************/ +#include +#include +#include "stl.h" +#ifdef BASOP_NOGLOB +#include +#endif /* BASOP_NOGLOB */ + +#ifdef _MSC_VER +#pragma warning( disable : 4310 ) +#endif + +/***************************************************************************** + * + * Local Functions + * + *****************************************************************************/ + + +/***************************************************************************** + * + * Constants and Globals + * + *****************************************************************************/ + + +/***************************************************************************** + * + * Functions + * + *****************************************************************************/ + +/***************************************************************************** + * + * Function Name : L40_shl + * + * Purpose : + * + * Arithmetically shifts left L40_var1 by var2 positions. + * - If var2 is negative, L40_var1 is shifted to the LSBits by (-var2) + * positions with extension of the sign bit. + * - If var2 is positive, L40_var1 is shifted to the MSBits by (var2) + * positions. + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : MIN_16 <= var2 <= MAX_16. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +#ifndef BASOP_NOGLOB +Word40 L40_shl( Word40 L40_var1, Word16 var2 ) +#else /* BASOP_NOGLOB */ + +Word40 L40_shl_o( Word40 L40_var1, Word16 var2, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + + Word40 L40_var_out; + Word40 L40_constant; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + L40_constant = L40_set( 0xc000000000 ); +#else + L40_constant = L40_set( 0xc000000000LL ); +#endif + + if ( var2 < 0 ) + { + var2 = -var2; + L40_var_out = L40_shr( L40_var1, var2 ); + } + + else + { + L40_var_out = L40_var1; + + for ( ; var2 > 0; var2-- ) + { +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( L40_var_out > 0x003fffffffff ) + { +#else + if ( L40_var_out > 0x003fffffffffLL ) + { +#endif +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 1 ); + /* L40_var_out = L40_OVERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + *Overflow = 1; + L40_var_out = MAX_40; +#endif /* BASOP_NOGLOB */ + break; + } + + else if ( L40_var_out < L40_constant ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 2 ); + /* L40_var_out = L40_UNDERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + *Overflow = 1; + L40_var_out = MIN_40; +#endif /* BASOP_NOGLOB */ + break; + } + + else + { + L40_var_out = L40_var_out << 1; + } + } + } + + BASOP_CHECK(); + + + return ( L40_var_out ); +} + +#ifdef BASOP_NOGLOB +Word40 L40_shl( Word40 L40_var1, Word16 var2 ) +{ + + Word40 L40_var_out; + Word40 L40_constant; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + L40_constant = L40_set( 0xc000000000 ); +#else + L40_constant = L40_set( 0xc000000000LL ); +#endif + + if ( var2 < 0 ) + { + var2 = -var2; + L40_var_out = L40_shr( L40_var1, var2 ); + } + + else + { + L40_var_out = L40_var1; + + for ( ; var2 > 0; var2-- ) + { +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( L40_var_out > 0x003fffffffff ) + { +#else + if ( L40_var_out > 0x003fffffffffLL ) + { +#endif + assert( 0 ); + L40_var_out = MAX_40; + break; + } + + else if ( L40_var_out < L40_constant ) + { + assert( 0 ); + L40_var_out = MIN_40; + break; + } + + else + { + L40_var_out = L40_var_out << 1; + } + } + } + + BASOP_CHECK(); + + + return ( L40_var_out ); +} +#endif /* BASOP_NOGLOB */ + +/***************************************************************************** + * + * Function Name : L40_shr + * + * Purpose : + * + * Arithmetically shifts right L40_var1 by var2 positions. + * - If var2 is positive, L40_var1 is shifted to the LSBits by (var2) + * positions with extension of the sign bit. + * - If var2 is negative, L40_var1 is shifted to the MSBits by (-var2) + * positions. + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : MIN_16 <= var2 <= MAX_16. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_shr( Word40 L40_var1, Word16 var2 ) +{ + Word40 L40_var_out; + + if ( var2 < 0 ) + { + var2 = -var2; + L40_var_out = L40_shl( L40_var1, var2 ); + } + else + { + L40_var_out = L40_var1 >> var2; + } + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_negate + * + * Purpose : + * + * Negates L40_var1. + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_negate( Word40 L40_var1 ) +{ + Word40 L40_var_out; + + L40_var_out = L40_add( ~L40_var1, 0x01 ); + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_add + * + * Purpose : + * + * Adds L40_var1 and L40_var2 and returns the 40-bit result. + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * L40_var2 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var2 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +#ifdef BASOP_NOGLOB + +Word40 L40_add_o( Word40 L40_var1, Word40 L40_var2, Flag *Overflow ) +{ + Word40 L40_var_out; + + L40_var_out = L40_var1 + L40_var2; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) == 0 ) ) + { + *Overflow = 1; + L40_var_out = MIN_40; + } + else if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) != 0 ) ) + { + *Overflow = 1; + L40_var_out = MAX_40; + } +#else + if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) == 0 ) ) + { + *Overflow = 1; + L40_var_out = MIN_40; + } + else if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) != 0 ) ) + { + *Overflow = 1; + L40_var_out = MAX_40; + } +#endif + + BASOP_CHECK(); + + + return ( L40_var_out ); +} + +#endif /* BASOP_NOGLOB */ +Word40 L40_add( Word40 L40_var1, Word40 L40_var2 ) +{ + Word40 L40_var_out; + + L40_var_out = L40_var1 + L40_var2; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) == 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 2 ); + /* L40_var_out = L40_UNDERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + assert( 0 ); + L40_var_out = MIN_40; +#endif /* BASOP_NOGLOB */ + } + else if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) != 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 1 ); + /* L40_var_out = L40_OVERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + assert( 0 ); + L40_var_out = MAX_40; +#endif /* BASOP_NOGLOB */ + } +#else + if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) == 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 2 ); + /* L40_var_out = L40_UNDERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + assert( 0 ); + L40_var_out = MIN_40; +#endif /* BASOP_NOGLOB */ + } + else if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) != 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 1 ); + /* L40_var_out = L40_OVERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + assert( 0 ); + L40_var_out = MAX_40; +#endif /* BASOP_NOGLOB */ + } +#endif + + BASOP_CHECK(); + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_sub + * + * Purpose : + * + * Subtracts L40_var2 from L40_var1. + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * L40_var2 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var2 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +#ifndef BASOP_NOGLOB +Word40 L40_sub( Word40 L40_var1, Word40 L40_var2 ) +#else /* BASOP_NOGLOB */ + +Word40 L40_sub_o( Word40 L40_var1, Word40 L40_var2, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + Word40 L40_var_out; + + L40_var_out = L40_var1 - L40_var2; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) == 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 2 ); + /* L40_var_out = L40_UNDERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + *Overflow = 1; + L40_var_out = MIN_40; +#endif /* BASOP_NOGLOB */ + } + else if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) != 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 1 ); + /* L40_var_out = L40_OVERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + *Overflow = 1; + L40_var_out = MAX_40; +#endif /* BASOP_NOGLOB */ + } +#else + if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) == 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 2 ); + /* L40_var_out = L40_UNDERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + *Overflow = 1; + L40_var_out = MIN_40; +#endif /* BASOP_NOGLOB */ + } + else if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) != 0 ) ) + { +#ifndef BASOP_NOGLOB + Overflow = 1; + exit( 1 ); + /* L40_var_out = L40_OVERFLOW_OCCURED( L40_var_out); */ +#else /* BASOP_NOGLOB */ + *Overflow = 1; + L40_var_out = MAX_40; +#endif /* BASOP_NOGLOB */ + } +#endif + + BASOP_CHECK(); + + + return ( L40_var_out ); +} + +#ifdef BASOP_NOGLOB +Word40 L40_sub( Word40 L40_var1, Word40 L40_var2 ) +{ + Word40 L40_var_out; + + L40_var_out = L40_var1 - L40_var2; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) == 0 ) ) + { + assert( 0 ); + L40_var_out = MIN_40; + } + else if ( ( ( ( L40_var1 & 0x8000000000 ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000 ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000 ) >> 39 ) != 0 ) ) + { + assert( 0 ); + L40_var_out = MAX_40; + } +#else + if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) == 0 ) ) + { + assert( 0 ); + L40_var_out = MIN_40; + } + else if ( ( ( ( L40_var1 & 0x8000000000LL ) >> 39 ) == 0 ) && ( ( ( L40_var2 & 0x8000000000LL ) >> 39 ) != 0 ) && ( ( ( L40_var_out & 0x8000000000LL ) >> 39 ) != 0 ) ) + { + assert( 0 ); + L40_var_out = MAX_40; + } +#endif + + BASOP_CHECK(); + + + return ( L40_var_out ); +} +#endif /* BASOP_NOGLOB */ + +/***************************************************************************** + * + * Function Name : L40_abs + * + * Purpose : + * + * Returns the absolute value of L40_var1. + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : 0x00 0000 0000 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_abs( Word40 L40_var1 ) +{ + Word40 L40_var_out; + + if ( L40_var1 < 0 ) + { + L40_var_out = L40_negate( L40_var1 ); + } + else + { + L40_var_out = L40_var1; + } + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_max + * + * Purpose : + * + * Compares L40_var1 and L40_var2 and returns the maximum value. + * + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * L40_var2 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var2 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_max( Word40 L40_var1, Word40 L40_var2 ) +{ + Word40 L40_var_out; + + if ( L40_var1 < L40_var2 ) + L40_var_out = L40_var2; + else + L40_var_out = L40_var1; + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_min + * + * Purpose : + * + * Compares L40_var1 and L40_var2 and returns the minimum value. + * + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * L40_var2 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var2 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_min( Word40 L40_var1, Word40 L40_var2 ) +{ + Word40 L40_var_out; + + if ( L40_var1 < L40_var2 ) + L40_var_out = L40_var1; + else + L40_var_out = L40_var2; + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L_saturate40 + * + * Purpose : + * + * If L40_var1 is greater than MAX_32, returns MAX_32. + * If L40_var1 is lower than MIN_32, returns MIN_32. + * If not, returns L_Extract40( L40_var1). + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * L_var_out 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. + * + *****************************************************************************/ +#ifndef BASOP_NOGLOB +Word32 L_saturate40( Word40 L40_var1 ) +#else /* BASOP_NOGLOB */ + +Word32 L_saturate40_o( Word40 L40_var1, Flag *Overflow ) +#endif /* BASOP_NOGLOB */ +{ + Word32 L_var_out; + + Word40 UNDER_L40_var2 = ( Word40 ) ~( ( ( (Word40) 1 ) << 31 ) - (Word40) 1 ); + Word40 OVER_L40_var2 = (Word40) ( ( ( (Word40) 1 ) << 31 ) - (Word40) 1 ); + + if ( L40_var1 < UNDER_L40_var2 ) + { + L40_var1 = UNDER_L40_var2; +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + } + + if ( L40_var1 > OVER_L40_var2 ) + { + L40_var1 = OVER_L40_var2; +#ifndef BASOP_NOGLOB + Overflow = 1; +#else /* BASOP_NOGLOB */ + *Overflow = 1; +#endif /* BASOP_NOGLOB */ + } + + L_var_out = L_Extract40( L40_var1 ); + + BASOP_CHECK(); + + + return ( L_var_out ); +} + +#ifdef BASOP_NOGLOB +Word32 L_saturate40( Word40 L40_var1 ) +{ + Word32 L_var_out; + + Word40 UNDER_L40_var2 = ( Word40 ) ~( ( ( (Word40) 1 ) << 31 ) - (Word40) 1 ); + Word40 OVER_L40_var2 = (Word40) ( ( ( (Word40) 1 ) << 31 ) - (Word40) 1 ); + + if ( L40_var1 < UNDER_L40_var2 ) + { + L40_var1 = UNDER_L40_var2; + assert( 0 ); + } + + if ( L40_var1 > OVER_L40_var2 ) + { + L40_var1 = OVER_L40_var2; + assert( 0 ); + } + + L_var_out = L_Extract40( L40_var1 ); + + BASOP_CHECK(); + + + return ( L_var_out ); +} +#endif /* BASOP_NOGLOB */ + +/***************************************************************************** + * + * Function Name : Mpy_32_16_ss + * + * Purpose : + * + * Multiplies the 2 signed values L_var1 and var2 with saturation control + * on 48-bit. The operation is performed in fractional mode : + * - L_var1 is supposed to be in 1Q31 format. + * - var2 is supposed to be in 1Q15 format. + * - The result is produced in 1Q47 format : L_varout_h points to the + * 32 MSBits while varout_l points to the 16 LSBits. + * + * Complexity weight : 2 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * *L_varout_h 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_varout_h <= 0x7fff ffff. + * + * *varout_l 16 bit short unsigned integer (UWord16) whose value falls in + * the range : 0x0000 0000 <= varout_l <= 0x0000 ffff. + * + * Return Value : + * + * none + * + *****************************************************************************/ +void Mpy_32_16_ss( Word32 L_var1, Word16 var2, Word32 *L_varout_h, UWord16 *varout_l ) +{ + Word16 var1_h; + UWord16 uvar1_l; + Word40 L40_var1; + + if ( ( L_var1 == (Word32) 0x80000000 ) && ( var2 == (Word16) 0x8000 ) ) + { + *L_varout_h = 0x7fffffff; + *varout_l = (UWord16) 0xffff; + } + else + { + uvar1_l = extract_l( L_var1 ); + var1_h = extract_h( L_var1 ); + + /* Below line can not overflow, so we can use << instead of L40_shl. */ + L40_var1 = ( (Word40) ( (Word32) var2 * (Word32) uvar1_l ) ) << 1; + + *varout_l = Extract40_L( L40_var1 ); + + L40_var1 = L40_shr( L40_var1, 16 ); + L40_var1 = L40_mac( L40_var1, var2, var1_h ); + + *L_varout_h = L_Extract40( L40_var1 ); + } + + + return; +} + + +/***************************************************************************** + * + * Function Name : Mpy_32_32_ss + * + * Purpose : + * + * Multiplies the 2 signed values L_var1 and L_var2 with saturation control + * on 64-bit. The operation is performed in fractional mode : + * - L_var1 and L_var2 are supposed to be in 1Q31 format. + * - The result is produced in 1Q63 format : L_varout_h points to the + * 32 MSBits while L_varout_l points to the 32 LSBits. + * + * Complexity weight : 4 + * + * Inputs : + * + * L_var1 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. + * + * L_var2 32 bit long signed integer (Word32) whose value falls in the + * range : 0x8000 0000 <= L_var2 <= 0x7fff ffff. + * + * Outputs : + * + * *L_varout_h 32 bit long signed integer (Word32) whose value falls in + * the range : 0x8000 0000 <= L_varout_h <= 0x7fff ffff. + * + * *L_varout_l 32 bit short unsigned integer (UWord32) whose value falls in + * the range : 0x0000 0000 <= L_varout_l <= 0xffff ffff. + * + * + * Return Value : + * + * none + * + *****************************************************************************/ +void Mpy_32_32_ss( Word32 L_var1, Word32 L_var2, Word32 *L_varout_h, UWord32 *L_varout_l ) +{ + UWord16 uvar1_l, uvar2_l; + Word16 var1_h, var2_h; + Word40 L40_var1; + + if ( ( L_var1 == (Word32) 0x80000000 ) && ( L_var2 == (Word32) 0x80000000 ) ) + { + *L_varout_h = 0x7fffffff; + *L_varout_l = (UWord32) 0xffffffff; + } + else + { + + uvar1_l = extract_l( L_var1 ); + var1_h = extract_h( L_var1 ); + uvar2_l = extract_l( L_var2 ); + var2_h = extract_h( L_var2 ); + + /* Below line can not overflow, so we can use << instead of L40_shl. */ + L40_var1 = ( (Word40) ( (UWord32) uvar2_l * (UWord32) uvar1_l ) ) << 1; + + *L_varout_l = 0x0000ffff & L_Extract40( L40_var1 ); + + L40_var1 = L40_shr( L40_var1, 16 ); + L40_var1 = L40_add( L40_var1, ( (Word40) ( (Word32) var2_h * (Word32) uvar1_l ) ) << 1 ); + L40_var1 = L40_add( L40_var1, ( (Word40) ( (Word32) var1_h * (Word32) uvar2_l ) ) << 1 ); + *L_varout_l |= ( L_Extract40( L40_var1 ) ) << 16; + + L40_var1 = L40_shr( L40_var1, 16 ); + L40_var1 = L40_mac( L40_var1, var1_h, var2_h ); + + *L_varout_h = L_Extract40( L40_var1 ); + } + + + return; +} + + +/***************************************************************************** + * + * Function Name : L40_lshl + * + * Purpose : + * + * Logically shifts left L40_var1 by var2 positions. + * - If var2 is negative, L40_var1 is shifted to the LSBits by (-var2) + * positions with insertion of 0 at the MSBit. + * - If var2 is positive, L40_var1 is shifted to the MSBits by (var2) + * positions. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : MIN_16 <= var2 <= MAX_16. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_lshl( Word40 L40_var1, Word16 var2 ) +{ + Word40 L40_var_out; + + if ( var2 <= 0 ) + { + var2 = -var2; + L40_var_out = L40_lshr( L40_var1, var2 ); + } + else + { + if ( var2 >= 40 ) + L40_var_out = 0x0000000000; + else + { + L40_var_out = L40_var1 << var2; + } + L40_var_out = L40_set( L40_var_out ); + } + + BASOP_CHECK(); + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_lshr + * + * Purpose : + * + * Logically shifts right L40_var1 by var2 positions. + * - If var2 is positive, L40_var1 is shifted to the LSBits by (var2) + * positions with insertion of 0 at the MSBit. + * - If var2 is negative, L40_var1 is shifted to the MSBits by (-var2) + * positions. + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : MIN_16 <= var2 <= MAX_16. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_lshr( Word40 L40_var1, Word16 var2 ) +{ + Word40 L40_var_out; + + if ( var2 < 0 ) + { + var2 = -var2; + L40_var_out = L40_lshl( L40_var1, var2 ); + } + else + { + if ( var2 >= 40 ) + L40_var_out = 0x0000000000; + else + { +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + L40_var_out = ( L40_var1 & 0xffffffffff ) >> var2; +#else + L40_var_out = ( L40_var1 & 0xffffffffffLL ) >> var2; +#endif + } + } + + BASOP_CHECK(); + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : norm_L40 + * + * Purpose : + * + * Produces the number of left shifts needed to normalize in 32 bit format + * the 40 bit variable L40_var1. This returned value can be used to scale + * L_40_var1 into the following intervals : + * - [(MAX_32+1)/2 .. MAX_32 ] for positive values. + * - [ MIN_32 .. (MIN_32/2)+1 ] for negative values. + * - [ 0 .. 0 ] for null values. + * In order to normalize the result, the following operation must be done : + * normelized_L40_var1 = L40_shl( L40_var1, norm_L40( L40_var1)) + * + * Complexity weight : 1 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * Outputs : + * + * none + * + * Return Value : + * + * var_out 16 bit short signed integer (Word16) whose value falls in + * the range : -8 <= var_out <= 31. + * + *****************************************************************************/ +Word16 norm_L40( Word40 L40_var1 ) +{ + Word16 var_out; + + var_out = 0; + + if ( L40_var1 != 0 ) + { + while ( ( L40_var1 > (Word32) 0x80000000L ) && ( L40_var1 < (Word32) 0x7fffffffL ) ) + { + + L40_var1 = L40_shl( L40_var1, 1 ); + var_out++; + } + + while ( ( L40_var1 < (Word32) 0x80000000L ) || ( L40_var1 > (Word32) 0x7fffffffL ) ) + { + + L40_var1 = L40_shl( L40_var1, -1 ); + var_out--; + } + } + + + return ( var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_shr_r + * + * Purpose : + * + * Arithmetically shifts right L40_var1 by var2 positions and rounds the + * result. It is equivalent to L40_shr( L40_var1, var2) except that if the + * last bit shifted out to the LSBit is 1, then the shifted result is + * incremented by 1. + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 3 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_shr_r( Word40 L40_var1, Word16 var2 ) +{ + Word40 L40_var_out; + + if ( var2 > 39 ) + { + L40_var_out = 0; + } + else + { + L40_var_out = L40_shr( L40_var1, var2 ); + + if ( var2 > 0 ) + { + if ( ( L40_var1 & ( (Word40) 1 << ( var2 - 1 ) ) ) != 0 ) + { + /* below line can not generate overflows on 40-bit */ + L40_var_out++; + } + } + } + + BASOP_CHECK(); + + + return ( L40_var_out ); +} + + +/***************************************************************************** + * + * Function Name : L40_shl_r + * + * Purpose : + * + * Arithmetically shifts left L40_var1 by var2 positions and rounds the + * result. It is equivalent to L40_shl( L40_var1, var2) except if var2 is + * negative. In that case, it does the same as + * L40_shr_r( L40_var1, (-var2)). + * Calls the macro L40_UNDERFLOW_OCCURED() in case of underflow on 40-bit. + * Calls the macro L40_OVERFLOW_OCCURED() in case of overflow on 40-bit. + * + * Complexity weight : 3 + * + * Inputs : + * + * L40_var1 40 bit long signed integer (Word40) whose value falls in the + * range : MIN_40 <= L40_var1 <= MAX_40. + * + * var2 16 bit short signed integer (Word16) whose value falls in + * the range : 0xffff 8000 <= var2 <= 0x0000 7fff. + * + * Outputs : + * + * none + * + * Return Value : + * + * L40_var_out 40 bit long signed integer (Word40) whose value falls in + * the range : MIN_40 <= L40_var_out <= MAX_40. + * + *****************************************************************************/ +Word40 L40_shl_r( Word40 L40_var1, Word16 var2 ) +{ + Word40 L40_var_out; + + if ( var2 >= 0 ) + { + L40_var_out = L40_shl( L40_var1, var2 ); + } + else + { + var2 = -var2; + L40_var_out = L40_shr_r( L40_var1, var2 ); + } + + + return ( L40_var_out ); +} + + +/* end of file */ diff --git a/lib_com/enh40.h b/lib_com/enh40.h new file mode 100644 index 0000000000..d2a84652d4 --- /dev/null +++ b/lib_com/enh40.h @@ -0,0 +1,349 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* + =========================================================================== + File: ENH40.H v.2.3 - 30.Nov.2009 + =========================================================================== + + ITU-T STL BASIC OPERATORS + + 40-BIT ARITHMETIC OPERATORS + + History: + 07 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + March 06 v2.1 Changed to improve portability. + + ============================================================================ +*/ + + +#ifndef _ENH40_H +#define _ENH40_H + + +#include "stl.h" + +#if defined( BASOP_NOGLOB ) || defined( _MSC_VER ) +#define MAX_40 ( 0x0000007fffffffff ) +#define MIN_40 ( 0xffffff8000000000 ) +#endif + + +#define L40_OVERFLOW_OCCURED( L40_var1 ) ( Overflow = 1, exit( 1 ), L40_var1 ) +#define L40_UNDERFLOW_OCCURED( L40_var1 ) ( Overflow = 1, exit( 2 ), L40_var1 ) + + +/***************************************************************************** + * + * Prototypes for enhanced 40 bit arithmetic operators + * + *****************************************************************************/ +Word40 L40_shr( Word40 L40_var1, Word16 var2 ); +Word40 L40_shr_r( Word40 L40_var1, Word16 var2 ); +Word40 L40_shl( Word40 L40_var1, Word16 var2 ); +Word40 L40_shl_r( Word40 L40_var1, Word16 var2 ); + +static __inline Word40 L40_mult( Word16 var1, Word16 var2 ); + +static __inline Word40 L40_mac( Word40 L40_var1, Word16 var1, Word16 var2 ); +static __inline Word16 mac_r40( Word40 L40_var1, Word16 var1, Word16 var2 ); + +static __inline Word40 L40_msu( Word40 L40_var1, Word16 var1, Word16 var2 ); +static __inline Word16 msu_r40( Word40 L40_var1, Word16 var1, Word16 var2 ); + + +void Mpy_32_16_ss( Word32 L_var1, Word16 var2, Word32 *L_varout_h, UWord16 *varout_l ); +void Mpy_32_32_ss( Word32 L_var1, Word32 L_var2, Word32 *L_varout_h, UWord32 *L_varout_l ); + + +Word40 L40_lshl( Word40 L40_var1, Word16 var2 ); +Word40 L40_lshr( Word40 L40_var1, Word16 var2 ); + +static __inline Word40 L40_set( Word40 L40_var1 ); +static __inline UWord16 Extract40_H( Word40 L40_var1 ); +static __inline UWord16 Extract40_L( Word40 L40_var1 ); +static __inline UWord32 L_Extract40( Word40 L40_var1 ); + +static __inline Word40 L40_deposit_h( Word16 var1 ); +static __inline Word40 L40_deposit_l( Word16 var1 ); +static __inline Word40 L40_deposit32( Word32 L_var1 ); + +static __inline Word40 L40_round( Word40 L40_var1 ); +static __inline Word16 round40( Word40 L40_var1 ); + + +Word40 L40_add( Word40 L40_var1, Word40 L40_var2 ); +Word40 L40_sub( Word40 L40_var1, Word40 L40_var2 ); +Word40 L40_abs( Word40 L40_var1 ); +Word40 L40_negate( Word40 L40_var1 ); +Word40 L40_max( Word40 L40_var1, Word40 L40_var2 ); +Word40 L40_min( Word40 L40_var1, Word40 L40_var2 ); +Word32 L_saturate40( Word40 L40_var1 ); +Word16 norm_L40( Word40 L40_var1 ); + +#ifdef BASOP_NOGLOB +/* + * Overflowing operators + */ +Word40 L40_shl_o( Word40 L40_var1, Word16 var2, Flag *Overflow ); +Word40 L40_add_o( Word40 L40_var1, Word40 L40_var2, Flag *Overflow ); +Word40 L40_sub_o( Word40 L40_var1, Word40 L40_var2, Flag *Overflow ); +Word32 L_saturate40_o( Word40 L40_var1, Flag *Overflow ); +#endif /* BASOP_NOGLOB */ + +/*#ifdef _MSC_VER*/ +static __inline Word40 L40_set( Word40 L40_var1 ) +{ + Word40 L40_var_out; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + L40_var_out = L40_var1 & 0x000000ffffffffff; + + if ( L40_var1 & 0x8000000000 ) + L40_var_out = L40_var_out | 0xffffff0000000000; +#else + L40_var_out = L40_var1 & 0x000000ffffffffffLL; + + if ( L40_var1 & 0x8000000000LL ) + L40_var_out = L40_var_out | 0xffffff0000000000LL; +#endif + + + return ( L40_var_out ); +} +/*#endif*/ /* ifdef _MSC_VER */ + + +static __inline UWord16 Extract40_H( Word40 L40_var1 ) +{ + UWord16 var_out; + + var_out = (UWord16) ( L40_var1 >> 16 ); + + + return ( var_out ); +} + + +static __inline UWord16 Extract40_L( Word40 L40_var1 ) +{ + UWord16 var_out; + + var_out = (UWord16) ( L40_var1 ); + + + return ( var_out ); +} + + +static __inline UWord32 L_Extract40( Word40 L40_var1 ) +{ + UWord32 L_var_out; + + L_var_out = (UWord32) L40_var1; + + + return ( L_var_out ); +} + + +static __inline Word40 L40_deposit_h( Word16 var1 ) +{ + Word40 L40_var_out; + + L40_var_out = ( (Word40) var1 ) << 16; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( var1 & 0x8000 ) + { + L40_var_out = L40_set( L40_var_out | 0xff00000000 ); +#else + if ( var1 & 0x8000 ) + { + L40_var_out = L40_set( L40_var_out | 0xff00000000LL ); +#endif + } + + + return ( L40_var_out ); +} + + +static __inline Word40 L40_deposit_l( Word16 var1 ) +{ + Word40 L40_var_out; + + L40_var_out = var1; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( var1 & 0x8000 ) + { + L40_var_out = L40_set( L40_var_out | 0xffffff0000 ); +#else + if ( var1 & 0x8000 ) + { + L40_var_out = L40_set( L40_var_out | 0xffffff0000LL ); +#endif + } + + + return ( L40_var_out ); +} + + +static __inline Word40 L40_deposit32( Word32 L_var1 ) +{ + Word40 L40_var_out; + + L40_var_out = (Word40) L_var1; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + if ( L_var1 & 0x80000000 ) + { + L40_var_out = L40_set( L40_var_out | 0xff00000000 ); +#else + if ( L_var1 & 0x80000000 ) + { + L40_var_out = L40_set( L40_var_out | 0xff00000000LL ); +#endif + } + + + return ( L40_var_out ); +} + + +static __inline Word40 L40_round( Word40 L40_var1 ) +{ + Word40 L40_var_out; + Word40 L40_constant; + +#if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) + L40_constant = L40_set( 0xffffff0000 ); +#else + L40_constant = L40_set( 0xffffff0000LL ); +#endif + + L40_var_out = L40_add( 0x8000, L40_var1 ); + L40_var_out = L40_var_out & L40_constant; + + + return ( L40_var_out ); +} + + +static __inline Word16 round40( Word40 L40_var1 ) +{ + Word16 var_out; + + var_out = extract_h( L_saturate40( L40_round( L40_var1 ) ) ); + + + return ( var_out ); +} + + +static __inline Word40 L40_mult( Word16 var1, Word16 var2 ) +{ + Word32 L_var_out; + Word40 L40_var_out; + + L_var_out = (Word32) var1 * (Word32) var2; + L40_var_out = (Word40) L_var_out; + + /* Below line can not overflow, so we can use << instead of L40_shl. */ + L40_var_out = L40_var_out << 1; + + + return ( L40_var_out ); +} + + +static __inline Word40 L40_mac( Word40 L40_var1, Word16 var2, Word16 var3 ) +{ + Word40 L40_var_out; + + L40_var_out = L40_mult( var2, var3 ); + L40_var_out = L40_add( L40_var1, L40_var_out ); + + + return ( L40_var_out ); +} + + +static __inline Word16 mac_r40( Word40 L40_var1, Word16 var2, Word16 var3 ) +{ + Word40 L40_var_out; + Word16 var_out; + + L40_var_out = L40_mac( L40_var1, var2, var3 ); + var_out = round40( L40_var_out ); + + + return ( var_out ); +} + + +static __inline Word40 L40_msu( Word40 L40_var1, Word16 var2, Word16 var3 ) +{ + Word40 L40_var_out; + + L40_var_out = L40_mult( var2, var3 ); + L40_var_out = L40_sub( L40_var1, L40_var_out ); + + + return ( L40_var_out ); +} + + +static __inline Word16 msu_r40( Word40 L40_var1, Word16 var2, Word16 var3 ) +{ + Word40 L40_var_out; + Word16 var_out; + + L40_var_out = L40_msu( L40_var1, var2, var3 ); + var_out = round40( L40_var_out ); + + + return ( var_out ); +} + + +#endif /*_ENH40_H*/ + + +/* end of file */ diff --git a/lib_com/enhancer.c b/lib_com/enhancer.c new file mode 100644 index 0000000000..2ed4271c05 --- /dev/null +++ b/lib_com/enhancer.c @@ -0,0 +1,284 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void agc2( const float *sig_in, float *sig_out, const int16_t l_trm ); + +/*---------------------------------------------------------------------* + * enhancer() + * + * Enhancement of the excitation signal before synthesis + *---------------------------------------------------------------------*/ + +void enhancer( + const int16_t codec_mode, /* i : flag indicating Codec Mode */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t cbk_index, /* i : */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t coder_type, /* i : coding type */ + const int16_t L_frame, /* i : frame size */ + const float voice_fac, /* i : subframe voicing estimation */ + const float stab_fac, /* i : LP filter stablility measure */ + const float norm_gain_code, /* i : normalized innovative cb. gain */ + const float gain_inov, /* i : gain of the unscaled innovation */ + float *gc_threshold, /* i/o: code threshold */ + float *code, /* i/o: innovation */ + float *pt_exc2, /* i/o: adapt. excitation/total exc. */ + const float gain_pit, /* i : Quantized pitch gain */ + float *dispMem /* i/o: Phase dispersion algorithm memory */ +) +{ + float tmp, gain_code, new_norm_gain_code, fac; + int16_t i; + float pit_sharp; + float excp[L_SUBFR]; + + pit_sharp = gain_pit; + + /*-----------------------------------------------------------------* + * Phase dispersion + * + * Enhance noise at low bitrates + *-----------------------------------------------------------------*/ + + i = 2; /* no dispersion */ + if ( Opt_AMR_WB ) + { + if ( core_brate <= ACELP_6k60 ) + { + i = 0; /* high dispersion */ + } + else if ( core_brate <= ACELP_8k85 ) + { + i = 1; /* low dispersion */ + } + } + else if ( codec_mode == MODE1 && coder_type != UNVOICED ) + { + if ( core_brate <= ACELP_7k20 ) + { + i = 0; /* high dispersion */ + } + else if ( ( coder_type == GENERIC || coder_type == TRANSITION || coder_type == AUDIO || coder_type == INACTIVE ) && core_brate <= ACELP_9k60 ) + { + i = 1; /* low dispersion */ + } + } + else if ( codec_mode == MODE2 ) + { + if ( ( ( coder_type != VOICED ) && cbk_index <= 2 ) || ( ( coder_type == UNVOICED ) && L_frame == L_FRAME && cbk_index <= 10 ) || ( ( coder_type == UNVOICED ) && L_frame == L_FRAME16k && cbk_index <= 14 ) ) + { + i = 0; /* high dispersion */ + } + else if ( ( coder_type != VOICED ) && ( cbk_index <= 7 ) ) + { + i = 1; /* low dispersion */ + } + } + else if ( codec_mode == MODE1 && coder_type == UNVOICED && cbk_index /*uc_two_stage_flag*/ ) + { + i = 0; /* high dispersion */ + } + + phase_dispersion( norm_gain_code, gain_pit, code, i, dispMem ); + + /*------------------------------------------------------------ + * Noise enhancer + * + * Enhance excitation on noise (modify code gain). If signal is noisy and LPC filter is stable, + * move code gain 1.5 dB towards its threshold. This decreases by 3 dB noise energy variation. + *-----------------------------------------------------------*/ + + if ( norm_gain_code < *gc_threshold ) + { + new_norm_gain_code = (float) ( norm_gain_code * 1.19f ); + if ( new_norm_gain_code > *gc_threshold ) + { + new_norm_gain_code = *gc_threshold; + } + } + else + { + new_norm_gain_code = (float) ( norm_gain_code / 1.19f ); + if ( new_norm_gain_code < *gc_threshold ) + { + new_norm_gain_code = *gc_threshold; + } + } + *gc_threshold = new_norm_gain_code; + + /* calculate new code gain */ + fac = stab_fac * ( 0.5f * ( 1.0f - voice_fac ) ); /* 1 = unvoiced, 0 = voiced */ + gain_code = fac * new_norm_gain_code + ( 1.0f - fac ) * norm_gain_code; + gain_code *= gain_inov; + + for ( i = 0; i < L_SUBFR; i++ ) + { + code[i] *= gain_code; + } + + /*------------------------------------------------------------* + * Pitch enhancer + * + * Enhance excitation on voiced (HP filtering of code). On voiced signal, filter code by a smooth HP + * filter to decrease the energy of code at low frequency + *------------------------------------------------------------*/ + + if ( !Opt_AMR_WB && codec_mode == MODE1 && coder_type == UNVOICED ) + { + mvr2r( code, pt_exc2, L_SUBFR ); + } + else + { + if ( Opt_AMR_WB && ( core_brate == ACELP_8k85 || core_brate == ACELP_6k60 ) ) + { + pit_sharp = gain_pit; + if ( pit_sharp > 1.0 ) + { + pit_sharp = 1.0; + } + + if ( pit_sharp > 0.5 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + excp[i] = pt_exc2[i] * pit_sharp * 0.25f; + } + } + } + + /*----------------------------------------------------------------- + * Do a simple noncasual "sharpening": effectively an FIR + * filter with coefs [-tmp 1.0 -tmp] where tmp = 0 ... 0.25 + * This is applied to code and added to exc2 + *-----------------------------------------------------------------*/ + if ( L_frame == L_FRAME16k ) + { + tmp = (float) ( 0.150f * ( 1.0f + voice_fac ) ); /* 0.30=voiced, 0=unvoiced */ + } + else + { + tmp = (float) ( 0.125f * ( 1.0f + voice_fac ) ); /* 0.25=voiced, 0=unvoiced */ + } + pt_exc2[0] += code[0] - ( tmp * code[1] ); + for ( i = 1; i < L_SUBFR - 1; i++ ) + { + pt_exc2[i] += code[i] - ( tmp * code[i - 1] ) - ( tmp * code[i + 1] ); + } + pt_exc2[L_SUBFR - 1] += code[L_SUBFR - 1] - ( tmp * code[L_SUBFR - 2] ); + + if ( Opt_AMR_WB && ( core_brate == ACELP_8k85 || core_brate == ACELP_6k60 ) ) + { + if ( pit_sharp > 0.5f ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + excp[i] += pt_exc2[i]; + } + + agc2( pt_exc2, excp, L_SUBFR ); + mvr2r( excp, pt_exc2, L_SUBFR ); + } + } + } + + return; +} + +/*-----------------------------------------------------------------------* + * agc2() + * + * Adaptive gain control + *-----------------------------------------------------------------------*/ + +static void agc2( + const float *sig_in, /* i : postfilter input signal */ + float *sig_out, /* i/o: postfilter output signal */ + const int16_t l_trm /* i : subframe size */ +) +{ + int16_t i; + float gain_in, gain_out; + float g0, gain; + + + gain_out = 0.0f; + for ( i = 0; i < l_trm; i++ ) + { + gain_out += sig_out[i] * sig_out[i]; + } + + if ( gain_out == 0.0f ) + { + return; + } + + gain_in = 0.0f; + for ( i = 0; i < l_trm; i++ ) + { + gain_in += sig_in[i] * sig_in[i]; + } + if ( gain_in == 0.0f ) + { + g0 = 0.0f; + } + else + { + g0 = (float) sqrt( gain_in / gain_out ); + } + + gain = g0; + for ( i = 0; i < l_trm; i++ ) + { + sig_out[i] *= gain; + } + + return; +} diff --git a/lib_com/enr_1_az.c b/lib_com/enr_1_az.c new file mode 100644 index 0000000000..f5f88ed55c --- /dev/null +++ b/lib_com/enr_1_az.c @@ -0,0 +1,68 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * enr_1_Az() + * + * Find Energy of the 1/A(z) impulse response + *-------------------------------------------------------------------*/ + +/*! r: impulse response energy */ +float enr_1_Az( + const float Aq[], /* i : LP filter coefs */ + const int16_t len /* i : impulse response length */ +) +{ + float enr_LP, h1[2 * L_SUBFR], mem[M]; + + + set_f( h1, 0, len ); /* Find the impulse response */ + set_f( mem, 0, M ); + h1[0] = 1.0f; + syn_filt( Aq, M, h1, h1, len, mem, 0 ); + enr_LP = dotp( h1, h1, len ) + 0.01f; /* Find the impulse response energy */ + + return enr_LP; +} diff --git a/lib_com/env_adj.c b/lib_com/env_adj.c new file mode 100644 index 0000000000..a169311615 --- /dev/null +++ b/lib_com/env_adj.c @@ -0,0 +1,168 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * env_adj() + * + * Adjust the band energies of noise-fill and low resolution bands + *--------------------------------------------------------------------------*/ + +void env_adj( + const int16_t *pulses, /* i : number of pulses per band */ + const int16_t length, /* i : length of spectrum */ + const int16_t last_sfm, /* i : index of the last band */ + float *adj, /* o : adjustment factors for the envelope */ + const float env_stab, /* i : Envelope stability parameter */ + const int16_t *sfmsize /* i : Band widths */ +) +{ + int16_t i, j, group; + int16_t npul; + int16_t att_state; + int16_t start, len; + float tmp; + float gain_adj; + int16_t idx; + + att_state = 0; + len = 0; + start = 0; + + /* Find attenuation levels */ + for ( i = 0; i <= last_sfm; i++ ) + { + group = ( sfmsize[i] >> 3 ) - 1; + npul = pulses[i]; + + if ( length == L_FRAME32k ) + { + if ( npul == 0 ) + { + /* Noise filled band */ + if ( group <= 1 ) + { + if ( i > 0 && pulses[i - 1] != 0 && pulses[i + 1] != 0 ) + { + adj[i] = 0.36f; + } + else if ( i > 0 && ( pulses[i - 1] == 0 || pulses[i + 1] == 0 ) ) + { + adj[i] = 0.54f; + } + else + { + adj[i] = 0.72f; + } + } + else if ( i < last_sfm ) + { + if ( pulses[i - 1] != 0 && pulses[i + 1] != 0 ) + { + adj[i] = 0.54f; + } + else + { + adj[i] = 0.72f; + } + } + else + { + adj[i] = 0.72f; + } + + if ( att_state == 0 ) + { + start = i; + } + + len++; + att_state = 1; + } + else + { + adj[i] = 1.0f; + if ( att_state == 1 ) /* End of attenuation region found */ + { + tmp = min( 1, max( 0, len - ENV_ADJ_START ) * ( 1.0f / ENV_ADJ_INCL ) ); + for ( j = start; j < i; j++ ) + { + adj[j] = max( tmp + ( 1 - tmp ) * adj[j], env_stab ); + } + len = 0; + att_state = 0; + } + } + } + /* length == L_FRAME16k */ + else + { + /* Calculate low accuracy band attenuation */ + gain_adj = 1.0f; + if ( npul > 0 && npul < MAX_P_ATT ) + { + idx = (int16_t) ( npul * att_step[group] + 0.5f ) - 1; + if ( idx < MAX_P_ATT ) + { + gain_adj = gain_att[idx]; + } + } + adj[i] = gain_adj; + } + } + + /* Check if the sequence ended with an attenuation region */ + if ( att_state == 1 ) + { + tmp = min( 1, max( 0, len - ENV_ADJ_START ) * ( 1.0f / ENV_ADJ_INCL ) ); + + for ( j = start; j < i; j++ ) + { + adj[j] = max( tmp + ( 1 - tmp ) * adj[j], env_stab ); + } + } + + return; +} diff --git a/lib_com/env_stab.c b/lib_com/env_stab.c new file mode 100644 index 0000000000..abe93eddce --- /dev/null +++ b/lib_com/env_stab.c @@ -0,0 +1,225 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" +#ifdef DEBUGGING +#include "assert.h" +#endif + +/*--------------------------------------------------------------------------* + * Local constants + *--------------------------------------------------------------------------*/ + +#define ENV_STAB_SMO_HO 10 /* number of hangover frames when switching from music to speech state */ + + +/*--------------------------------------------------------------------------*/ +/* Function env_stability() */ +/* ~~~~~~~~~~~~~~~~~~~~~~~~~ */ +/* */ +/* Envelope stability measure */ +/*--------------------------------------------------------------------------*/ + +float env_stability( + const int16_t *ynrm, /* i : Norm vector for current frame */ + const int16_t nb_sfm, /* i : Number of sub-bands */ + int16_t *mem_norm, /* i/o: Norm vector memory from past frame */ + int16_t *mem_env_delta /* i/o: Envelope stability memory for smoothing*/ +) +{ + Word16 env_delta; + Word16 env_stab; + Word16 tmp, tmp_stab; + Word16 i; + + Word16 exp, exp2; + Word32 L_tmp, L_env_delta; + Word16 inv_nb_sfm; + float env_stab_f; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + /* Calculate envelope stability parameter */ + L_env_delta = L_deposit_l( 0 ); + for ( i = 0; i < nb_sfm; i++ ) + { + tmp = sub( mem_norm[i], ynrm[i] ); + L_env_delta = L_mac0( L_env_delta, tmp, tmp ); + mem_norm[i] = ynrm[i]; + } + +#ifdef DEBUGGING + assert( nb_sfm == 27 || nb_sfm == 26 ); +#endif + inv_nb_sfm = 19418; /* Q19 */ + if ( nb_sfm == 26 ) + { + inv_nb_sfm = 20165; /* Q19 */ + } + exp = norm_l( L_env_delta ); + L_env_delta = Mult_32_16( L_shl( L_env_delta, exp ), inv_nb_sfm ); /* 0+exp+19-15 */ + + L_tmp = Sqrt_l( L_env_delta, &exp2 ); /* exp+4+31+exp2 */ + + exp = add( 35, add( exp, exp2 ) ); + if ( sub( s_and( exp, 1 ), 1 ) == 0 ) + { + L_tmp = Mult_32_16( L_tmp, 23170 ); /* 1/sqrt(2) in Q15 */ + } + exp = shr( exp, 1 ); + +#ifndef BASOP_NOGLOB + env_delta = round_fx( L_shl( L_tmp, sub( 26, exp ) ) ); /* Q10 */ + L_tmp = L_mult0( 26214, env_delta ); /* 26214 is 0.1 in Q18. Q28 */ + L_tmp = L_mac( L_tmp, 29491, *mem_env_delta ); /* 29491 is 0.9 in Q15. Q28 */ + *mem_env_delta = round_fx( L_tmp ); /* Q12 */ +#else /* BASOP_NOGLOB */ + env_delta = round_fx_o( L_shl_o( L_tmp, sub( 26, exp ), &Overflow ), &Overflow ); /* Q10 */ + L_tmp = L_mult0( 26214, env_delta ); /* 26214 is 0.1 in Q18. Q28 */ + L_tmp = L_mac_o( L_tmp, 29491, *mem_env_delta, &Overflow ); /* 29491 is 0.9 in Q15. Q28 */ + *mem_env_delta = round_fx_o( L_tmp, &Overflow ); /* Q12 */ +#endif /* BASOP_NOGLOB */ + Overflow = 0; +#ifndef BASOP_NOGLOB + env_delta = round_fx( L_shl( L_tmp, 1 ) ); /* Q13 */ +#else /* BASOP_NOGLOB */ + env_delta = round_fx_o( L_shl_o( L_tmp, 1, &Overflow ), &Overflow ); /* Q13 */ +#endif /* BASOP_NOGLOB */ + + if ( Overflow != 0 ) /* Saturated due to the above up-shifting operation. */ + { + env_stab = stab_trans_fx[L_STAB_TBL - 1]; /* The highest quantized index. */ + env_stab_f = ( (float) env_stab ) / PCM16_TO_FLT_FAC; /* Convert env_stab(Q15) to float */ + return env_stab_f; + } + + /* If tmp_stab > (D_STAB_TBL*L_STAB_TBL + M_STAB_TBL), i.e., 0.103138*10+2.51757=3.603137, + * the quantized index is equal to 9. Hence, we only need to worry about any tmpStab < 4. + * In this case, Q13 is good enough. + */ + tmp_stab = sub( env_delta, M_STAB_TBL_FX ); /* in Q13 */ + tmp_stab = abs_s( tmp_stab ); + + /* Table lookup for smooth transitions + * First, find the quantization level, i, of tmpStab. */ +#if L_STAB_TBL > 10 +#error env_stability_fx: Use more efficient usquant() +#endif + tmp_stab = sub( tmp_stab, HALF_D_STAB_TBL_FX ); /* in Q13 */ + for ( i = 0; i < L_STAB_TBL - 1; i++ ) + { + if ( tmp_stab < 0 ) + { + break; + } + else + { + tmp_stab = sub( tmp_stab, D_STAB_TBL_FX ); /* in Q13 */ + } + } + + env_stab = stab_trans_fx[i]; + if ( sub( env_delta, M_STAB_TBL_FX ) < 0 ) + { + env_stab = sub( 0x7FFF, stab_trans_fx[i] ); + } + + env_stab_f = ( (float) env_stab ) / PCM16_TO_FLT_FAC; /* Convert env_stab(Q15) to float */ + + return env_stab_f; +} + +/*--------------------------------------------------------------------------* + * env_stab_smo_fx() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: New speech/music state */ +float env_stab_smo( + float env_stab, /* i : env_stab value */ + float *env_stab_state_p, /* i/o: env_stab state probabilities */ + int16_t *ho_cnt /* i/o: hangover counter for speech state */ +) +{ + int16_t state, prev_state; + float maxval, pp[NUM_ENV_STAB_PLC_STATES], pa[NUM_ENV_STAB_PLC_STATES]; + /* get previous state */ + prev_state = maximum( env_stab_state_p, NUM_ENV_STAB_PLC_STATES, &maxval ); + + /* assume two states: speech(0), music(1) */ + /* set a posteriori likelihoods for the two states according to env_stab */ + env_stab = ( env_stab - stab_trans[L_STAB_TBL - 1] ) / ( 1 - 2 * stab_trans[L_STAB_TBL - 1] ); + pp[0] = 1.0f - env_stab; + pp[1] = env_stab; + + /* calculate a priori likelihoods */ + pa[0] = dotp( env_stab_tp[0], env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); + pa[1] = dotp( env_stab_tp[1], env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); + + /* multiply elementwise with a posteriori likelihoods */ + v_mult( pa, pp, env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); + + /* renormalize state probabilities */ + v_multc( env_stab_state_p, 1.0f / sum_f( env_stab_state_p, NUM_ENV_STAB_PLC_STATES ), env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); + + /* find maximum index as return value */ + state = maximum( env_stab_state_p, NUM_ENV_STAB_PLC_STATES, &maxval ); + + /* apply some hangover for speech */ + if ( state == 0 && prev_state == 1 ) + { + *ho_cnt = ENV_STAB_SMO_HO; + } + if ( *ho_cnt > 0 ) + { + pp[0] = 1; + pp[1] = 0; + ( *ho_cnt )--; + } + + return state; +} diff --git a/lib_com/env_stab_trans.c b/lib_com/env_stab_trans.c new file mode 100644 index 0000000000..6a8ca2b266 --- /dev/null +++ b/lib_com/env_stab_trans.c @@ -0,0 +1,158 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * env_stab_transient_detect() + * + * Transient detector for envelope stability measure + *--------------------------------------------------------------------------*/ + +void env_stab_transient_detect( + const int16_t is_transient, /* i : Transient flag */ + const int16_t length, /* i : Length of spectrum (32 or 48 kHz) */ + const int16_t norm[], /* i : quantization indices for norms */ + int16_t *no_att_hangover, /* i/o: Frame counter for attenuation hangover */ + float *energy_lt, /* i/o: Long-term energy measure for transient detection */ + const int16_t HQ_mode, /* i : HQ coding mode */ + const int16_t bin_th, /* i : HVQ cross-over frequency bin */ + const float *coeff /* i : Coded spectral coefficients */ +) +{ + float d_max; + float e_frame; + int16_t blk; + int16_t i; + float E_sub[4]; + float delta_e_sub; + int16_t norm_ind; + + int16_t num_subframes = 4; + int16_t bands_per_subframe = 9; + + if ( HQ_mode == HQ_HVQ ) + { + e_frame = 0.0f; + + for ( i = 0; i < bin_th; i++ ) + { + e_frame += coeff[i] * coeff[i]; + } + + e_frame = (float) sqrt( e_frame / bin_th ); + + if ( e_frame > ENERGY_TH ) + { + *energy_lt = ENERGY_LT_BETA * ( *energy_lt ) + ( 1 - ENERGY_LT_BETA ) * e_frame; + } + + if ( *no_att_hangover > 0 ) + { + ( *no_att_hangover )--; + } + } + else + { + d_max = 0.0f; + e_frame = 0.0f; + if ( is_transient && length == L_FRAME32k ) + { + /* Measure subframe energies */ + for ( blk = 0; blk < num_subframes; blk++ ) + { + E_sub[blk] = 0.0f; + for ( i = 0; i < bands_per_subframe; i++ ) + { + norm_ind = subf_norm_groups[blk][i]; + E_sub[blk] += dicn[norm[norm_ind]]; + } + E_sub[blk] = E_sub[blk] / bands_per_subframe; + e_frame += E_sub[blk]; + } + /* Test for transient */ + if ( e_frame > ENERGY_TH * num_subframes ) + { + for ( blk = 0; blk < num_subframes - 1; blk++ ) + { + delta_e_sub = ( E_sub[blk + 1] - E_sub[blk] ) / *energy_lt; + if ( delta_e_sub > d_max ) + { + d_max = delta_e_sub; + } + } + } + } + else + { + /* Update long-term energy measure */ + e_frame = 0.0f; + + for ( i = 0; i < SFM_N_ENV_STAB; i++ ) + { + e_frame += dicn[norm[i]]; + } + + e_frame = e_frame / SFM_N_ENV_STAB; + + if ( e_frame > ENERGY_TH ) + { + *energy_lt = ENERGY_LT_BETA * ( *energy_lt ) + ( 1 - ENERGY_LT_BETA ) * e_frame; + } + } + + /* Add hang-over for conservative application of stability-dependent attenuation */ + if ( d_max > DELTA_TH ) + { + *no_att_hangover = ATT_LIM_HANGOVER; + } + else if ( *no_att_hangover > 0 ) + { + ( *no_att_hangover )--; + } + } + + return; +} diff --git a/lib_com/est_tilt.c b/lib_com/est_tilt.c new file mode 100644 index 0000000000..e126f761f8 --- /dev/null +++ b/lib_com/est_tilt.c @@ -0,0 +1,93 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * est_tilt() + * + * Estimate spectral tilt based on the relative E of adaptive + * and innovative excitations + *-------------------------------------------------------------------*/ + +/*! r: tilt of the code */ +float est_tilt( + const float *adpt_exc, /* i : adaptive excitation vector */ + const float gain_pit, /* i : adaptive gain */ + const float *fixe_exc, /* i : algebraic exctitation vector */ + const float gain_code, /* i : algebraic code gain */ + float *voice_fac, /* o : voicing factor */ + const int16_t L_subfr, /* i : subframe size */ + const int16_t flag_tilt /* i : flag for special tilt */ +) +{ + float ener, tmp, tilt_code; + + ener = dotp( adpt_exc, adpt_exc, L_subfr ); + ener *= gain_pit * gain_pit; /* energy of pitch excitation */ + + tmp = dotp( fixe_exc, fixe_exc, L_subfr ); + tmp *= gain_code * gain_code; /* energy of innovative code excitation */ + + /* find voice factor (1=voiced, -1=unvoiced) */ + *voice_fac = (float) ( ( ener - tmp ) / ( ener + tmp + 0.01f ) ); + + /* find tilt of code for next subframe */ + if ( flag_tilt == 0 ) + { + /*Between 0 (=unvoiced) and 0.5 (=voiced)*/ + tilt_code = (float) ( 0.25f * ( 1.0f + *voice_fac ) ); + } + else if ( flag_tilt == 1 ) + { + /*Between 0.25 (=unvoiced) and 0.5 (=voiced)*/ + tilt_code = (float) ( 0.25f + ( *voice_fac + 1.0f ) * 0.125f ); + } + else + { + /*Between 0.28 (=unvoiced) and 0.56 (=voiced)*/ + tilt_code = (float) ( 0.28f + ( *voice_fac + 1.0f ) * 0.14f ); + } + + return tilt_code; +} diff --git a/lib_com/fd_cng_com.c b/lib_com/fd_cng_com.c new file mode 100644 index 0000000000..98b5a3df75 --- /dev/null +++ b/lib_com/fd_cng_com.c @@ -0,0 +1,1161 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + + +/*------------------------------------------------------------------- + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void mhvals( const int16_t d, float *m ); + +static void getmidbands( int16_t *part, const int16_t npart, int16_t *midband, float *psize, float *psize_inv ); + + +/*------------------------------------------------------------------- + * createFdCngCom() + * + * Create an instance of type FD_CNG_COM + *-------------------------------------------------------------------*/ + +ivas_error createFdCngCom( + HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +) +{ + HANDLE_FD_CNG_COM hs; + + /* Allocate memory */ + hs = (HANDLE_FD_CNG_COM) count_malloc( sizeof( FD_CNG_COM ) ); + + if ( hs == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD CNG COM" ); + } + + *hFdCngCom = hs; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------- + * initFdCngCom() + * + * + *-------------------------------------------------------------------*/ + +void initFdCngCom( + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const float scale ) +{ + /* Calculate FFT scaling factor */ + hFdCngCom->scalingFactor = 1 / ( scale * scale * 8.f ); + + /* Initialize the overlap-add */ + set_f( hFdCngCom->timeDomainBuffer, 0.0f, L_FRAME16k ); + set_f( hFdCngCom->olapBufferAna, 0.0f, FFTLEN ); + set_f( hFdCngCom->olapBufferSynth, 0.0f, FFTLEN ); + set_f( hFdCngCom->olapBufferSynth2, 0.0f, FFTLEN ); + + /* Initialize the comfort noise generation */ + set_f( hFdCngCom->fftBuffer, 0.0f, FFTLEN ); + set_f( hFdCngCom->cngNoiseLevel, 0.0f, FFTCLDFBLEN ); + + /* Initialize quantizer */ + set_f( hFdCngCom->sidNoiseEst, 0.0f, NPART ); + set_f( hFdCngCom->A_cng, 0.0f, M + 1 ); + hFdCngCom->A_cng[0] = 1.f; + + /* Set some counters and flags */ + hFdCngCom->inactive_frame_counter = 0; /* Either SID or zero frames */ + hFdCngCom->active_frame_counter = 0; + hFdCngCom->frame_type_previous = ACTIVE_FRAME; + hFdCngCom->flag_noisy_speech = 0; + hFdCngCom->likelihood_noisy_speech = 0.f; + hFdCngCom->numCoreBands = 0; + hFdCngCom->stopBand = 0; + hFdCngCom->startBand = 0; + hFdCngCom->stopFFTbin = 0; + hFdCngCom->frameSize = 0; + hFdCngCom->fftlen = 0; + hFdCngCom->seed = 0; + hFdCngCom->seed2 = 1; + hFdCngCom->seed3 = 2; + hFdCngCom->CngBitrate = -1; + + /* Initialize noise estimation algorithm */ + set_f( hFdCngCom->periodog, 0.0f, PERIODOGLEN ); + mhvals( MSNUMSUBFR * MSSUBFRLEN, &( hFdCngCom->msM_win ) ); + mhvals( MSSUBFRLEN, &( hFdCngCom->msM_subwin ) ); + set_f( hFdCngCom->msPeriodogSum, 0.0f, 2 ); + set_f( hFdCngCom->msPsdSum, 0.0f, 2 ); + set_f( hFdCngCom->msSlope, 0.0f, 2 ); + set_f( hFdCngCom->msQeqInvAv, 0.0f, 2 ); + hFdCngCom->msFrCnt_init_counter = 0; + hFdCngCom->msFrCnt_init_thresh = 1; + hFdCngCom->init_old = 0; + hFdCngCom->offsetflag = 0; + hFdCngCom->msFrCnt = MSSUBFRLEN; + hFdCngCom->msMinBufferPtr = 0; + set_f( hFdCngCom->msAlphaCor, 0.3f, 2 ); + + hFdCngCom->coherence = 0.5f; + + return; +} + + +/*------------------------------------------------------------------- + * deleteFdCngCom() + * + * Delete an instance of type FD_CNG_COM + *-------------------------------------------------------------------*/ + +void deleteFdCngCom( + HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +) +{ + HANDLE_FD_CNG_COM hsCom = *hFdCngCom; + + if ( hsCom != NULL ) + { + count_free( hsCom ); + *hFdCngCom = NULL; + } + + return; +} + + +/*------------------------------------------------------------------- + * initPartitions() + * + * Initialize the spectral partitioning + *-------------------------------------------------------------------*/ + +void initPartitions( + const int16_t *part_in, + const int16_t npart_in, + const int16_t startBand, + const int16_t stopBand, + int16_t *part_out, + int16_t *npart_out, + int16_t *midband, + float *psize, + float *psize_inv, + const int16_t stopBandFR ) +{ + int16_t i, j, len_out; + + if ( part_in != NULL ) + { + if ( stopBandFR > startBand ) + { + len_out = stopBandFR - startBand; /*part_out*/ + for ( i = 0; i < len_out; i++ ) + { + part_out[i] = i; + } + } + else + { + len_out = 0; + } /*npart_in,part_out*/ + for ( j = 0; j < npart_in && part_in[j] < stopBand; j++ ) + { + if ( part_in[j] >= stopBandFR && part_in[j] >= startBand ) + { + part_out[len_out++] = part_in[j] - startBand; + } + } + } + else + { + len_out = stopBand - startBand; /*part_out*/ + for ( i = 0; i < len_out; i++ ) + { + part_out[i] = i; + } + } + + *npart_out = len_out; + getmidbands( part_out, len_out, midband, psize, psize_inv ); + + return; +} + + +/*------------------------------------------------------------------- + * compress_range() + * + * Apply some dynamic range compression based on the log + *-------------------------------------------------------------------*/ + +void compress_range( + float *in, + float *out, + const int16_t len ) +{ + float *ptrIn = in; + float *ptrOut = out; + int16_t i; + + /* out = log2( 1 + in ) */ + for ( i = 0; i < len; i++ ) + { + *ptrOut = (float) log10( *ptrIn + 1.f ); + ptrIn++; + ptrOut++; + } + v_multc( out, 1.f / (float) log10( 2.f ), out, len ); + + /* Quantize to simulate a fixed-point representation 6Q9 */ + v_multc( out, CNG_LOG_SCALING, out, len ); + for ( ptrOut = out; ptrOut < out + len; ptrOut++ ) + { + *ptrOut = (float) ( (int16_t) ( *ptrOut + 0.5f ) ); + if ( *ptrOut == 0.f ) + { + *ptrOut = 1.f; + } + } + v_multc( out, 1. / CNG_LOG_SCALING, out, len ); + + return; +} + + +/*------------------------------------------------------------------- + * expand_range() + * + * Apply some dynamic range expansion to undo the compression + *-------------------------------------------------------------------*/ + +void expand_range( + float *in, + float *out, + const int16_t len ) +{ + float *ptrIn = in; + float *ptrOut = out; + int16_t i; + + /* out = (2^(in) - 1) */ + for ( i = 0; i < len; i++ ) + { + *ptrOut = (float) pow( 2.f, *ptrIn ) - 1.f; + if ( *ptrOut < 0.0003385080526823181f ) + { + *ptrOut = 0.0003385080526823181f; + } + ptrIn++; + ptrOut++; + } + + return; +} + + +/*------------------------------------------------------------------- + * minimum_statistics() + * + * Noise estimation using Minimum Statistics (MS) + *-------------------------------------------------------------------*/ + +void minimum_statistics( + const int16_t len, /* i : Vector length */ + const int16_t lenFFT, /* i : Length of the FFT part of the vectors */ + float *psize, + float *msPeriodog, /* i : Periodograms */ + float *msNoiseFloor, + float *msNoiseEst, /* o : Noise estimates */ + float *msAlpha, + float *msPsd, + float *msPsdFirstMoment, + float *msPsdSecondMoment, + float *msMinBuf, + float *msBminWin, + float *msBminSubWin, + float *msCurrentMin, + float *msCurrentMinOut, + float *msCurrentMinSubWindow, + int16_t *msLocalMinFlag, + int16_t *msNewMinFlag, + float *msPeriodogBuf, + int16_t *msPeriodogBufPtr, + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const int16_t enc_dec, /* i : encoder/decoder indicator */ + const int16_t element_mode /* i : IVAS element mode type */ +) +{ + float msM_win = hFdCngCom->msM_win; + float msM_subwin = hFdCngCom->msM_subwin; + float *msPsdSum = hFdCngCom->msPsdSum; + float *msPeriodogSum = hFdCngCom->msPeriodogSum; + float slope; + float *ptr; + float msAlphaCorAlpha = MSALPHACORALPHA; + float msAlphaCorAlpha2 = 1.f - MSALPHACORALPHA; + + int16_t i, j, k; + float scalar, scalar2, scalar3; + float snr, BminCorr, QeqInv, QeqInvAv; + float beta; + float msAlphaHatMin2; + int16_t len2 = MSNUMSUBFR * len; + int16_t current_len; + int16_t start, stop, cnt; + int16_t totsize; + const float inv_buflen = 1.f / MSBUFLEN; + + /* No minimum statistics at initialization */ + if ( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) + { + mvr2r( msPeriodog, msPsd, len ); + mvr2r( msPeriodog, msNoiseFloor, len ); + mvr2r( msPeriodog, msNoiseEst, len ); + mvr2r( msPeriodog, msPsdFirstMoment, len ); + set_f( msPsdSecondMoment, 0.0f, len ); + msPeriodogSum[0] = dotp( msPeriodog, psize, lenFFT ); + msPsdSum[0] = msPeriodogSum[0]; + if ( lenFFT < len ) + { + msPeriodogSum[1] = dotp( msPeriodog + lenFFT, psize + lenFFT, len - lenFFT ); + msPsdSum[1] = msPeriodogSum[1]; + } + + /* Increment frame counter at initialization */ + /* Some frames are sometimes zero at initialization => ignore them */ + if ( msPeriodog[0] < hFdCngCom->init_old ) + { + set_f( msCurrentMinOut, FLT_MAX, len ); + set_f( msCurrentMin, FLT_MAX, len ); + set_f( msMinBuf, FLT_MAX, len2 ); + set_f( msCurrentMinSubWindow, FLT_MAX, len ); + hFdCngCom->msFrCnt_init_counter++; + } + hFdCngCom->init_old = msPeriodog[0]; + } + else + { + + /* Consider the FFT and CLDFB bands separately + - first iteration for FFT bins, + - second one for CLDFB bands in SWB mode */ + start = 0; + stop = lenFFT; + totsize = hFdCngCom->stopFFTbin - hFdCngCom->startBand; + cnt = 0; /*msAlphaCor*/ + while ( stop > start ) + { + current_len = stop - start; + + /* Compute smoothed correction factor for PSD smoothing */ + msPeriodogSum[cnt] = dotp( msPeriodog + start, psize + start, current_len ); + scalar = msPeriodogSum[cnt] * msPeriodogSum[cnt] + DELTA; + scalar2 = msPsdSum[cnt] - msPeriodogSum[cnt]; + scalar = max( scalar / ( scalar + scalar2 * scalar2 ), MSALPHACORMAX ); + hFdCngCom->msAlphaCor[cnt] = msAlphaCorAlpha * hFdCngCom->msAlphaCor[cnt] + msAlphaCorAlpha2 * scalar; + + /* Compute SNR */ + snr = dotp( msNoiseFloor + start, psize + start, current_len ); + snr = ( msPsdSum[cnt] + DELTA ) / ( snr + DELTA ); + snr = (float) pow( snr, MSSNREXP ); + msAlphaHatMin2 = min( MSALPHAHATMIN, snr ); + scalar = MSALPHAMAX * hFdCngCom->msAlphaCor[cnt]; /*msAlpha,msPsd,msPeriodog,msNoiseFloor*/ + for ( j = start; j < stop; j++ ) + { + /* Compute optimal smoothing parameter for PSD estimation */ + scalar2 = msNoiseFloor[j] + DELTA; + scalar2 *= scalar2; + scalar3 = msPsd[j] - msNoiseFloor[j]; + msAlpha[j] = max( ( scalar * scalar2 ) / ( scalar2 + scalar3 * scalar3 ), msAlphaHatMin2 ); + + /* Compute the PSD (smoothed periodogram) in each band */ + msPsd[j] = msAlpha[j] * msPsd[j] + ( 1.f - msAlpha[j] ) * msPeriodog[j]; + } + msPsdSum[cnt] = dotp( msPsd + start, psize + start, current_len ); + QeqInvAv = 0; + scalar = ( (float) ( MSNUMSUBFR * MSSUBFRLEN ) - 1.f ) * ( 1.f - msM_win ); + scalar2 = ( (float) MSSUBFRLEN - 1.f ) * ( 1.f - msM_subwin ); /*msAlpha,msPsd,msPsdFirstMoment,msPsdSecondMoment,msNoiseFloor,msBminSubWin,msBminWin,psize*/ + for ( j = start; j < stop; j++ ) + { + /* Compute variance of PSD */ + beta = min( msAlpha[j] * msAlpha[j], MSBETAMAX ); + scalar3 = msPsd[j] - msPsdFirstMoment[j]; + msPsdFirstMoment[j] = beta * msPsdFirstMoment[j] + ( 1.f - beta ) * msPsd[j]; + msPsdSecondMoment[j] = beta * msPsdSecondMoment[j] + ( 1.f - beta ) * scalar3 * scalar3; + /* Compute inverse of amount of degrees of freedom */ + QeqInv = min( ( msPsdSecondMoment[j] + DELTA ) / ( 2.f * msNoiseFloor[j] * msNoiseFloor[j] + DELTA ), MSQEQINVMAX ); + QeqInvAv += QeqInv * psize[j]; + + /* Compute bias correction Bmin */ + msBminWin[j] = 1.f + scalar * QeqInv / ( 0.5f - msM_win * QeqInv ); + msBminSubWin[j] = 1.f + scalar2 * QeqInv / ( 0.5f - msM_subwin * QeqInv ); + } + QeqInvAv /= totsize; + hFdCngCom->msQeqInvAv[cnt] = QeqInvAv; + + /* New minimum? */ + BminCorr = 1.f + MSAV * (float) sqrt( QeqInvAv ); /*msPsd,msBminWin,msNewMinFlag,msCurrentMin,msCurrentMinSubWindow*/ + for ( j = start; j < stop; j++ ) + { + scalar = BminCorr * msPsd[j]; + scalar2 = scalar * msBminWin[j]; + if ( scalar2 < msCurrentMin[j] ) + { + msNewMinFlag[j] = 1; + msCurrentMin[j] = scalar2; + msCurrentMinSubWindow[j] = scalar * msBminSubWin[j]; + } + else + { + msNewMinFlag[j] = 0; + } + } + + /* This is used later to identify local minima */ + if ( hFdCngCom->msFrCnt >= MSSUBFRLEN ) + { + i = 0; + while ( i < 3 ) + { + if ( hFdCngCom->msQeqInvAv[cnt] < msQeqInvAv_thresh[i] ) + { + break; + } + else + { + i++; + } + } + hFdCngCom->msSlope[cnt] = msNoiseSlopeMax[i]; + } + + /* Consider the FFT and CLDFB bands separately */ + start = stop; + stop = len; + totsize = hFdCngCom->stopBand - hFdCngCom->stopFFTbin; + cnt++; + } /*while (stop > start)*/ + + /* Update minimum between sub windows */ + if ( hFdCngCom->msFrCnt > 1 && hFdCngCom->msFrCnt < MSSUBFRLEN ) + { + /*msNewMinFlag,msCurrentMinSubWindow,msCurrentMinOut*/ + for ( j = 0; j < len; j++ ) + { + if ( msNewMinFlag[j] > 0 ) + { + msLocalMinFlag[j] = 1; + } + if ( msCurrentMinSubWindow[j] < msCurrentMinOut[j] ) + { + msCurrentMinOut[j] = msCurrentMinSubWindow[j]; + } + } + /* Get the current noise floor */ + mvr2r( msCurrentMinOut, msNoiseFloor, len ); + } + + /* sub window complete */ + else + { + if ( hFdCngCom->msFrCnt >= MSSUBFRLEN ) + { + /* Collect buffers */ + mvr2r( msCurrentMinSubWindow, msMinBuf + len * hFdCngCom->msMinBufferPtr, len ); + + /* Compute minimum among all buffers */ + mvr2r( msMinBuf, msCurrentMinOut, len ); + ptr = msMinBuf + len; + for ( i = 1; i < MSNUMSUBFR; i++ ) + { + /*msCurrentMinOut*/ + for ( j = 0; j < len; j++ ) + { + if ( *ptr < msCurrentMinOut[j] ) + { + msCurrentMinOut[j] = *ptr; + } + ptr++; + } + } + + /* Take over local minima */ + slope = hFdCngCom->msSlope[0]; /*msLocalMinFlag,msNewMinFlag,msCurrentMinSubWindow,msCurrentMinOut*/ + for ( j = 0; j < len; j++ ) + { + if ( j == lenFFT ) + { + slope = hFdCngCom->msSlope[1]; + } + if ( msLocalMinFlag[j] && !msNewMinFlag[j] && + msCurrentMinSubWindow[j] < slope * msCurrentMinOut[j] && + msCurrentMinSubWindow[j] > msCurrentMinOut[j] ) + { + msCurrentMinOut[j] = msCurrentMinSubWindow[j]; + i = j; + for ( k = 0; k < MSNUMSUBFR; k++ ) + { + msMinBuf[i] = msCurrentMinOut[j]; + i += len; + } + } + } + + /* Reset */ + set_s( msLocalMinFlag, 0, len ); + set_f( msCurrentMin, FLT_MAX, len ); + + /* Get the current noise floor */ + mvr2r( msCurrentMinOut, msNoiseFloor, len ); + } + } + + /* Detect sudden offsets based on the FFT bins (core bandwidth) */ + if ( msPsdSum[0] > 50.f * msPeriodogSum[0] ) + { + if ( hFdCngCom->offsetflag > 0 ) + { + mvr2r( msPeriodog, msPsd, len ); + mvr2r( msPeriodog, msCurrentMinOut, len ); + set_f( hFdCngCom->msAlphaCor, 1.0f, cnt ); + set_f( msAlpha, 0.0f, len ); + mvr2r( msPeriodog, msPsdFirstMoment, len ); + set_f( msPsdSecondMoment, 0.0f, len ); + msPsdSum[0] = dotp( msPeriodog, psize, lenFFT ); + if ( lenFFT < len ) + { + msPsdSum[1] = dotp( msPeriodog + lenFFT, psize + lenFFT, len - lenFFT ); + } + } + hFdCngCom->offsetflag = 1; + } + else + { + hFdCngCom->offsetflag = 0; + } + + /* Increment frame counter */ + if ( hFdCngCom->msFrCnt == MSSUBFRLEN ) + { + hFdCngCom->msFrCnt = 1; + hFdCngCom->msMinBufferPtr++; + if ( hFdCngCom->msMinBufferPtr == MSNUMSUBFR ) + { + hFdCngCom->msMinBufferPtr = 0; + } + } + else + { + ( hFdCngCom->msFrCnt )++; + } + + /* Smooth noise estimate during CNG phases */ /*msNoiseEst,msNoiseFloor*/ + for ( j = 0; j < len; j++ ) + { + msNoiseEst[j] = 0.95f * msNoiseEst[j] + 0.05f * msNoiseFloor[j]; + } + } + + if ( enc_dec == DEC && element_mode == IVAS_CPE_TD ) + { + v_multc( msNoiseEst, 1.4125f, msNoiseEst, NPART_SHAPING ); + } + + /* Collect buffers */ + mvr2r( msPeriodog, msPeriodogBuf + len * ( *msPeriodogBufPtr ), len ); + + ( *msPeriodogBufPtr )++; + if ( ( *msPeriodogBufPtr ) == MSBUFLEN ) + { + ( *msPeriodogBufPtr ) = 0; + } + + /* Upper limit the noise floors with the averaged input energy */ /*msNoiseEst*/ + for ( j = 0; j < len; j++ ) + { + scalar = msPeriodogBuf[j]; + for ( i = j + len; i < MSBUFLEN * len; i += len ) + { + scalar += msPeriodogBuf[i]; + } /*division by a constant = multiplication by its (constant) inverse */ + scalar *= inv_buflen; + if ( msNoiseEst[j] > scalar ) + { + msNoiseEst[j] = scalar; + } + assert( msNoiseEst[j] >= 0 ); + } + + return; +} + + +/*------------------------------------------------------------------- + * apply_scale() + * + * Apply bitrate-dependent scale + *-------------------------------------------------------------------*/ + +void apply_scale( + float *scale, /* o : scalefactor */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t brate, /* i : Bit rate */ + const SCALE_SETUP *scaleTable, /* i : Scale table */ + const int16_t scaleTableSize /* i : Size of scale table */ +) +{ + int16_t i; + + for ( i = 0; i < scaleTableSize; i++ ) + { + if ( ( bwidth == scaleTable[i].bwmode ) && + ( brate >= scaleTable[i].bitrateFrom ) && + ( brate < scaleTable[i].bitrateTo ) ) + { + break; + } + } + + assert( i < scaleTableSize ); + + *scale += scaleTable[i].scale; + + return; +} + + +/*------------------------------------------------------------------- + * bandcombinepow() + * + * Compute the power for each partition + *-------------------------------------------------------------------*/ + +void bandcombinepow( + const float *bandpow, /* i : Power for each band */ + const int16_t nband, /* i : Number of bands */ + int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ + const int16_t npart, /* i : Number of partitions */ + const float *psize_inv, /* i : Inverse partition sizes */ + float *partpow /* o : Power for each partition */ +) +{ + int16_t i, p; + float temp; + + if ( nband == npart ) + { + mvr2r( bandpow, partpow, nband ); + } + else + { + /* Compute the power in each partition */ + i = 0; /*part,partpow,psize_inv*/ + for ( p = 0; p < npart; p++ ) + { + /* Arithmetic averaging of power for all bins in partition */ + temp = 0; + for ( ; i <= part[p]; i++ ) + { + temp += bandpow[i]; + } + partpow[p] = temp * psize_inv[p]; + } + } + + return; +} + + +/*------------------------------------------------------------------- + * scalebands() + * + * Scale partitions (with smoothing) + *-------------------------------------------------------------------*/ + +void scalebands( + const float *partpow, /* i : Power for each partition */ + int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ + const int16_t npart, /* i : Number of partitions */ + int16_t *midband, /* i : Central band of each partition */ + const int16_t nFFTpart, /* i : Number of FFT partitions */ + const int16_t nband, /* i : Number of bands */ + float *bandpow, /* o : Power for each band */ + const int16_t flag_fft_en ) +{ + int16_t i, j = 0, nint, startBand, startPart, stopPart; + float val, delta = 0.f; + + /* Interpolate the bin/band-wise levels from the partition levels */ + if ( nband == npart ) + { + mvr2r( partpow, bandpow, npart ); + } + else + { + startBand = 0; + startPart = 0; + stopPart = nFFTpart; + while ( startBand < nband ) + { + if ( flag_fft_en || startPart >= nFFTpart ) + { + + /* first half partition */ + j = startPart; + val = partpow[j]; + for ( i = startBand; i <= midband[j]; i++ ) + { + bandpow[i] = val; + } + j++; + + delta = 1; + /* inner partitions */ + for ( ; j < stopPart; j++ ) + { + nint = midband[j] - midband[j - 1]; + /* log-linear interpolation */ /* Only one new LOG needs to be computed per loop iteration */ + delta = (float) exp( ( log( partpow[j] + DELTA ) - log( partpow[j - 1] + DELTA ) ) * normReciprocal[nint] ); + val = partpow[j - 1]; + for ( ; i < midband[j]; i++ ) + { + val *= delta; + bandpow[i] = val; + } + bandpow[i++] = partpow[j]; + } + if ( delta > 1.f ) + { + delta = 1.f; + } + + /* last half partition */ + val = partpow[stopPart - 1]; + for ( ; i <= part[stopPart - 1]; i++ ) + { + val *= delta; + bandpow[i] = val; + } + } + startBand = part[stopPart - 1] + 1; + startPart = stopPart; + stopPart = npart; + } + } + + return; +} + + +/*------------------------------------------------------------------- + * getmidbands() + * + * Get central band for each partition + *-------------------------------------------------------------------*/ + +static void getmidbands( + int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ + const int16_t npart, /* i : Number of partitions */ + int16_t *midband, /* o : Central band of each partition */ + float *psize, /* o : Partition sizes */ + float *psize_inv /* o : Inverse of partition sizes */ +) +{ + int16_t j; + + /* first half partition */ + midband[0] = part[0]; + psize[0] = (float) part[0] + 1.f; + psize_inv[0] = normReciprocal[part[0] + 1]; + + /* inner partitions */ /*part,midband,psize_inv*/ + for ( j = 1; j < npart; j++ ) + { + midband[j] = ( part[j - 1] + 1 + part[j] ) >> 1; + psize[j] = (float) ( part[j] - part[j - 1] ); + psize_inv[j] = normReciprocal[part[j] - part[j - 1]]; + } + + return; +} + + +/*------------------------------------------------------------------- + * AnalysisSTFT() + * + * STFT analysis filterbank + *-------------------------------------------------------------------*/ + +void AnalysisSTFT( + const float *timeDomainInput, + float *fftBuffer, /* o : FFT bins */ + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +) +{ + float *olapBuffer = hFdCngCom->olapBufferAna; + const float *olapWin = hFdCngCom->olapWinAna; + + /* Shift and cascade for overlap-add */ + mvr2r( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->fftlen - hFdCngCom->frameSize ); + mvr2r( timeDomainInput, olapBuffer + hFdCngCom->fftlen - hFdCngCom->frameSize, hFdCngCom->frameSize ); + + /* Window the signal */ + v_mult( olapBuffer, olapWin, fftBuffer, hFdCngCom->fftlen ); + + /* Perform FFT */ + RFFTN( fftBuffer, hFdCngCom->fftSineTab, hFdCngCom->fftlen, -1 ); + + return; +} + + +/*------------------------------------------------------------------- + * SynthesisSTFT() + * + * STFT synthesis filterbank + *-------------------------------------------------------------------*/ + +void SynthesisSTFT( + float *fftBuffer, /* i : FFT bins */ + float *timeDomainOutput, + float *olapBuffer, + const float *olapWin, + const int16_t tcx_transition, + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const int16_t element_mode, /* i : element mode */ + const int16_t nchan_out /* i : number of output channels */ +) +{ + int16_t i; + float buf[M + 1 + 320], tmp; + + /* Perform IFFT */ + RFFTN( fftBuffer, hFdCngCom->fftSineTab, hFdCngCom->fftlen, 1 ); + + /* Handle overlap in P/S domain for stereo */ + if ( ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) && nchan_out == 2 ) + { + mvr2r( olapBuffer + 3 * hFdCngCom->frameSize / 4 - ( M + 1 ), buf, hFdCngCom->frameSize + M + 1 ); + set_f( olapBuffer, 0.0f, hFdCngCom->fftlen ); + } + else + { + mvr2r( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize ); + set_f( olapBuffer + hFdCngCom->frameSize, 0.0f, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/ + } + + if ( tcx_transition ) + { + for ( i = 0; i < 5 * hFdCngCom->frameSize / 4; i++ ) + { + olapBuffer[i] = fftBuffer[i]; + } + } + else + { + for ( i = hFdCngCom->frameSize / 4; i < 3 * hFdCngCom->frameSize / 4; i++ ) + { + olapBuffer[i] += fftBuffer[i] * olapWin[i - hFdCngCom->frameSize / 4]; + } + for ( ; i < 5 * hFdCngCom->frameSize / 4; i++ ) + { + olapBuffer[i] = fftBuffer[i]; + } + } + for ( ; i < 7 * hFdCngCom->frameSize / 4; i++ ) + { + olapBuffer[i] = fftBuffer[i] * olapWin[i - 3 * hFdCngCom->frameSize / 4]; + } + + for ( ; i < hFdCngCom->fftlen; i++ ) + { + olapBuffer[i] = 0; + } + + /* Get time-domain signal */ + v_multc( olapBuffer + hFdCngCom->frameSize / 4, (float) ( hFdCngCom->fftlen / 2 ), timeDomainOutput, hFdCngCom->frameSize ); + + /* Get excitation */ + if ( ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) && nchan_out == 2 ) + { + for ( i = 0; i < hFdCngCom->frameSize / 2; i++ ) + { + buf[i + ( M + 1 )] += olapBuffer[i + hFdCngCom->frameSize / 4]; + } + v_multc( buf, (float) ( hFdCngCom->fftlen / 2 ), buf, M + 1 + hFdCngCom->frameSize ); + } + else + { + v_multc( olapBuffer + hFdCngCom->frameSize / 4 - ( M + 1 ), (float) ( hFdCngCom->fftlen / 2 ), buf, M + 1 + hFdCngCom->frameSize ); + } + + tmp = buf[0]; + preemph( buf + 1, PREEMPH_FAC, M + hFdCngCom->frameSize, &tmp ); + residu( hFdCngCom->A_cng, M, buf + 1 + M, hFdCngCom->exc_cng, hFdCngCom->frameSize ); + + return; +} + + +/*------------------------------------------------------------------- + * mhvals() + * + * Compute some values used in the bias correction of the minimum statistics algorithm + *-------------------------------------------------------------------*/ + +static void mhvals( + const int16_t d, + float *m ) +{ + int16_t i, j; + float qi, qj, q; + int16_t len = SIZE_SCALE_TABLE_CN; + + i = 0; + for ( i = 0; i < len; i++ ) + { + if ( d <= d_array[i] ) + { + break; + } + } + if ( i == len ) + { + i = len - 1; + j = i; + } + else + { + j = i - 1; + } + if ( d == d_array[i] ) + { + *m = m_array[i]; + } + else + { + qj = (float) sqrt( (float) d_array[i - 1] ); /*interpolate using sqrt(d)*/ + qi = (float) sqrt( (float) d_array[i] ); + q = (float) sqrt( (float) d ); + *m = m_array[i] + ( qi * qj / q - qj ) * ( m_array[j] - m_array[i] ) / ( qi - qj ); + } + + return; +} + +/*------------------------------------------------------------------- + * rand_gauss() + * + * Random generator with Gaussian distribution with mean 0 and std 1 + *-------------------------------------------------------------------*/ + +float rand_gauss( + float *x, + int16_t *seed ) +{ + float temp; + + temp = (float) own_random( seed ); + temp += (float) own_random( seed ); + temp += (float) own_random( seed ); + temp *= OUTMAX_INV; + + *x = temp; + + return temp; +} + + +/*------------------------------------------------------------------- + * lpc_from_spectrum() + * + * + *-------------------------------------------------------------------*/ + +void lpc_from_spectrum( + HANDLE_FD_CNG_COM hFdCngCom, + const int16_t start, + const int16_t stop, + const float preemph_fac ) +{ + int16_t i; + float r[32], nf; + float fftBuffer[FFTLEN], *ptr, *pti; + + float *powspec = hFdCngCom->cngNoiseLevel; + int16_t fftlen = hFdCngCom->fftlen; + const float *fftSineTab = hFdCngCom->fftSineTab; + float *A = hFdCngCom->A_cng; + + /* Power Spectrum */ + ptr = fftBuffer; + pti = fftBuffer + 1; + nf = 1e-3f; + for ( i = 0; i < start; i++ ) + { + *ptr = nf; + *pti = 0.f; + ptr += 2; + pti += 2; + } + for ( ; i < stop; i++ ) + { + *ptr = max( nf, powspec[i - start] ); + *pti = 0.f; + ptr += 2; + pti += 2; + } + for ( ; i < fftlen / 2; i++ ) + { + *ptr = nf; + *pti = 0.f; + ptr += 2; + pti += 2; + } + fftBuffer[1] = nf; + + /* Pre-emphasis */ + ptr = fftBuffer; + for ( i = 0; i < fftlen / 2; i++ ) + { + *ptr *= ( 1.f + preemph_fac * preemph_fac - 2.0f * preemph_fac * (float) cos( -2.0f * EVS_PI * (float) i / (float) fftlen ) ); + + ptr += 2; + } + fftBuffer[1] *= ( 1.f + preemph_fac * preemph_fac + 2.0f * preemph_fac ); + + /* Autocorrelation */ + RFFTN( fftBuffer, fftSineTab, fftlen, 1 ); + for ( i = 0; i <= M; i++ ) + { + r[i] = fftBuffer[i] * ( fftlen / 2 ) * ( fftlen / 2 ); + } + if ( r[0] < 100.f ) + { + r[0] = 100.f; + } + + r[0] *= 1.0005f; + + /* LPC */ + lev_dur( A, r, M, NULL ); + + return; +} + + +/*------------------------------------------------------------------- + * FdCng_exc() + * + * Generate FD-CNG as LP excitation + *-------------------------------------------------------------------*/ + +void FdCng_exc( + HANDLE_FD_CNG_COM hFdCngCom, + int16_t *CNG_mode, + const int16_t L_frame, + const float *lsp_old, + const int16_t first_CNG, + float *lspCNG, + float *Aq, /* o : LPC coeffs */ + float *lsp_new, /* o : lsp */ + float *lsf_new, /* o : lsf */ + float *exc, /* o : LP excitation */ + float *exc2, /* o : LP excitation */ + float *bwe_exc /* o : LP excitation for BWE */ +) +{ + int16_t i; + *CNG_mode = -1; + + /*Get excitation */ + for ( i = 0; i < L_frame / L_SUBFR; i++ ) + { + mvr2r( hFdCngCom->A_cng, Aq + i * ( M + 1 ), M + 1 ); + } + + a2lsp_stab( Aq, lsp_new, lsp_old ); + + if ( first_CNG == 0 ) + { + mvr2r( lsp_old, lspCNG, M ); + } + + for ( i = 0; i < M; i++ ) + { + /* AR low-pass filter */ + lspCNG[i] = CNG_ISF_FACT * lspCNG[i] + ( 1 - CNG_ISF_FACT ) * lsp_new[i]; + } + + if ( L_frame == L_FRAME16k ) + { + lsp2lsf( lsp_new, lsf_new, M, INT_FS_16k ); + } + else + { + lsp2lsf( lsp_new, lsf_new, M, INT_FS_12k8 ); + } + + mvr2r( hFdCngCom->exc_cng, exc, L_frame ); + mvr2r( hFdCngCom->exc_cng, exc2, L_frame ); + + if ( bwe_exc ) + { + if ( L_frame == L_FRAME ) + { + interp_code_5over2( exc2, bwe_exc, L_frame ); + } + else + { + interp_code_4over2( exc2, bwe_exc, L_frame ); + } + } + + return; +} diff --git a/lib_com/fft.c b/lib_com/fft.c new file mode 100644 index 0000000000..ed0d6604e6 --- /dev/null +++ b/lib_com/fft.c @@ -0,0 +1,6768 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +#ifdef _MSC_VER +#pragma warning( disable : 4310 ) +#endif + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define FFT_15PONIT_WNK1 0.55901699f /* EDCT & EMDCT constants */ +#define FFT_15PONIT_WNK2 0.95105652f /* EDCT & EMDCT constants */ +#define FFT_15PONIT_WNK3 0.58778525f /* EDCT & EMDCT constants */ +#define FFT_15PONIT_WNK4 0.86602540f /* EDCT & EMDCT constants */ +#define FFT_15PONIT_WNK5 0.25000000f /* EDCT & EMDCT constants */ + +/* FFT constants */ +#define FFT_C31 -0.8660254037f +#define FFT_C51 0.9510565195f +#define FFT_C52 -1.5388417989f +#define FFT_C53 -0.3632712597f +#define FFT_C54 0.5590169895f +#define FFT_C55 -1.2500000000f +#define FFT_C61 0.8660254036f +#define FFT_C81 0.7071067811f +#define FFT_C82 -0.7071067811f +#define FFT_C161 0.7071067811f +#define FFT_C162 -0.7071067811f +#define FFT_C163 0.9238795325f +#define FFT_C164 -0.9238795325f +#define FFT_C165 0.3826834323f +#define FFT_C166 -0.3826834323f + + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void cdftForw( int16_t n, float *a, const int16_t *ip, const float *w ); +static void bitrv2_SR( int16_t n, const int16_t *ip, float *a ); +static void cftfsub( int16_t n, float *a, const float *w ); +static void cft1st( int16_t n, float *a, const float *w ); +static void cftmdl( int16_t n, int16_t l, float *a, const float *w ); +static void fft16( float *x, float *y, const int16_t *Idx ); +static void fft5_shift1( int16_t n1, float *zRe, float *zIm, const int16_t *Idx ); +static void fft8( float *x, float *y, const int16_t *Idx ); +static void fft15_shift2( int16_t n1, float *zRe, float *zIm, const int16_t *Idx ); +static void fft15_shift8( int16_t n1, float *zRe, float *zIm, const int16_t *Idx ); +static void fft5_shift4( int16_t n1, float *zRe, float *zIm, const int16_t *Idx ); +static void fft5_32( float *zRe, float *zIm, const int16_t *Idx ); +static void fft64( float *x, float *y, const int16_t *Idx ); +static void fft32_15( float *x, float *y, const int16_t *Idx ); +static void fft32_5( float *x, float *y, const int16_t *Idx ); +static void fft8_5( float *x, float *y, const int16_t *Idx ); +static void fft5_8( int16_t n1, float *zRe, float *zIm, const int16_t *Idx ); +static void fft4_5( float *x, float *y, const int16_t *Idx ); +static void fft5_4( int16_t n1, float *zRe, float *zIm, const int16_t *Idx ); + +static float fmac( float a, float b, float c ) +{ + return ( ( ( a ) * ( b ) ) + ( c ) ); +} + +static float fnms( float a, float b, float c ) +{ + return ( ( c ) - ( ( a ) * ( b ) ) ); +} + +/*-----------------------------------------------------------------* + * fft15_shift2() + * 15-point FFT with 2-point circular shift + *-----------------------------------------------------------------*/ + +static void fft15_shift2( + int16_t n1, /* i : length of data */ + float *zRe, /* i/o: real part of input and output data */ + float *zIm, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t in0, in8, in16, in24, in32, in1, in9, in17, in25, in33, in2, in10, in18, in26, in34; + float fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8, fi9, fi10, fi11, fi12, fi13, fi14, fi15; + float fi16, fi17, fi18, fi19, fi20, fi21, fi22, fi23, fi24, fi25, fi26, fi27, fi28, fi29, fi30; + float f2i1, f2i2, f2i3, f2i4, f2i5, f2i6, f2i7, f2i8, f2i9, f2i10, f2i11, f2i12; + float f2i13, f2i14, f2i15, f2i16, f2i17, f2i18, f2i19, f2i20, f2i21, f2i22, f2i23, f2i24; + float f3i1, f3i2, f3i3, f3i4, f3i5, f3i6, f3i7, f3i8, f3i9, f3i10, f3i11, f3i12, f3i13, f3i14, f3i15; + float f4i1, f4i2, f4i3, f4i4, f4i5, f4i6, f4i7, f4i8, f4i9; + float f4i10, f4i11, f4i12, f4i13, f4i14, f4i15, f4i16, f4i17, f4i18, f4i19, f4i20, fo1, fo2, fo3, fo4; + float fo5, fo6, fo7, fo8, fo9, fo10, fo11, fo12, fo13, fo14, fo15, fo16, fo17, fo18; + float f2o1, f2o2, f2o3, f2o4, f2o5, f2o6, f2o7, f2o8, f2o9, f2o10, f2o11, f2o12, f2o13; + float f2o14, f2o15, f3o1, f3o2, f3o3, f3o4, f3o5, f3o6, f3o7, f3o8, f3o9, f3o10, f3o11; + float f3o12, f3o13, f3o14, f3o15, f4o1, f4o2, f4o3, f4o4, f4o5, f4o6; + float f4o7, f4o8, f4o9, f4o10, f4o11, f4o12, f4o13, f4o14, f4o15, f4o16, f4o17, f4o18, f4o19; + + in0 = Idx[0]; + in8 = Idx[n1]; + in16 = Idx[n1 * 2]; + in24 = Idx[n1 * 3]; + in32 = Idx[n1 * 4]; + in1 = Idx[n1 * 5]; + in9 = Idx[n1 * 6]; + in17 = Idx[n1 * 7]; + in25 = Idx[n1 * 8]; + in33 = Idx[n1 * 9]; + in2 = Idx[n1 * 10]; + in10 = Idx[n1 * 11]; + in18 = Idx[n1 * 12]; + in26 = Idx[n1 * 13]; + in34 = Idx[n1 * 14]; + + f2i13 = zRe[in0]; + f2i14 = zIm[in0]; + f2i21 = zRe[in1]; + f2i22 = zRe[in2]; + f2i23 = zIm[in1]; + f2i24 = zIm[in2]; + + f2i15 = f2i21 + f2i22; + f2i16 = FFT_15PONIT_WNK4 * ( f2i22 - f2i21 ); + f2i17 = FFT_15PONIT_WNK4 * ( f2i23 - f2i24 ); + f2i18 = f2i23 + f2i24; + fi1 = f2i13 + f2i15; + fi2 = f2i14 + f2i18; + + f2i19 = fnms( 0.5f, f2i15, f2i13 ); + f2i20 = fnms( 0.5f, f2i18, f2i14 ); + fi3 = f2i19 - f2i17; + fi4 = f2i19 + f2i17; + fi5 = f2i16 + f2i20; + fi6 = f2i20 - f2i16; + + f3i1 = zRe[in9]; + f4i2 = zRe[in10]; + f4i3 = zRe[in8]; + f3i2 = f4i2 + f4i3; + f3i3 = fnms( 0.5f, f3i2, f3i1 ); + f3i4 = FFT_15PONIT_WNK4 * ( f4i3 - f4i2 ); + + f3i5 = zIm[in9]; + f4i4 = zIm[in10]; + f4i5 = zIm[in8]; + f3i6 = f4i4 + f4i5; + f3i7 = FFT_15PONIT_WNK4 * ( f4i4 - f4i5 ); + f3i8 = fnms( 0.5f, f3i6, f3i5 ); + + f3i9 = zRe[in33]; + f4i6 = zRe[in34]; + f4i7 = zRe[in32]; + f3i10 = f4i6 + f4i7; + f3i11 = fnms( 0.5f, f3i10, f3i9 ); + f3i12 = FFT_15PONIT_WNK4 * ( f4i7 - f4i6 ); + + f3i13 = zIm[in33]; + f4i8 = zIm[in34]; + f4i9 = zIm[in32]; + f3i14 = f4i8 + f4i9; + f3i15 = FFT_15PONIT_WNK4 * ( f4i8 - f4i9 ); + f4i1 = fnms( 0.5f, f3i14, f3i13 ); + + fi7 = f3i1 + f3i2; + fi8 = f3i9 + f3i10; + fi9 = fi7 + fi8; + fi10 = f3i3 - f3i7; + fi11 = f3i11 - f3i15; + fi12 = fi10 + fi11; + fi13 = f3i5 + f3i6; + fi14 = f3i13 + f3i14; + fi15 = fi13 + fi14; + fi16 = f3i8 - f3i4; + fi17 = f4i1 - f3i12; + fi18 = fi16 + fi17; + fi19 = f3i4 + f3i8; + fi20 = f3i12 + f4i1; + fi21 = fi19 + fi20; + fi22 = f3i3 + f3i7; + fi23 = f3i11 + f3i15; + fi24 = fi22 + fi23; + + f4i10 = zRe[in24]; + fo6 = zRe[in25]; + fo7 = zRe[in26]; + f4i11 = fo6 + fo7; + f4i12 = fnms( 0.5f, f4i11, f4i10 ); + f4i13 = FFT_15PONIT_WNK4 * ( fo7 - fo6 ); + + f4i14 = zIm[in24]; + fo8 = zIm[in25]; + fo9 = zIm[in26]; + f4i15 = fo8 + fo9; + f4i16 = FFT_15PONIT_WNK4 * ( fo8 - fo9 ); + f4i17 = fnms( 0.5f, f4i15, f4i14 ); + + f4i18 = zRe[in18]; + f2o10 = zRe[in16]; + f2o11 = zRe[in17]; + f4i19 = f2o10 + f2o11; + f4i20 = fnms( 0.5f, f4i19, f4i18 ); + fo1 = FFT_15PONIT_WNK4 * ( f2o11 - f2o10 ); + + fo2 = zIm[in18]; + f2o12 = zIm[in16]; + f2o13 = zIm[in17]; + fo3 = f2o12 + f2o13; + fo4 = FFT_15PONIT_WNK4 * ( f2o12 - f2o13 ); + fo5 = fnms( 0.5f, fo3, fo2 ); + + fi25 = f4i10 + f4i11; + fi26 = f4i18 + f4i19; + fi27 = fi25 + fi26; + fi28 = f4i12 - f4i16; + fi29 = f4i20 - fo4; + fi30 = fi28 + fi29; + f2i1 = f4i14 + f4i15; + f2i2 = fo2 + fo3; + f2i3 = f2i1 + f2i2; + f2i4 = f4i17 - f4i13; + f2i5 = fo5 - fo1; + f2i6 = f2i4 + f2i5; + f2i7 = f4i13 + f4i17; + f2i8 = fo1 + fo5; + f2i9 = f2i7 + f2i8; + f2i10 = f4i12 + f4i16; + f2i11 = f4i20 + fo4; + f2i12 = f2i10 + f2i11; + + fo10 = FFT_15PONIT_WNK1 * ( fi27 - fi9 ); + fo11 = fi27 + fi9; + fo12 = fnms( FFT_15PONIT_WNK5, fo11, fi1 ); + fo15 = fi13 - fi14; + fo16 = f2i1 - f2i2; + fo13 = fnms( FFT_15PONIT_WNK3, fo16, FFT_15PONIT_WNK2 * fo15 ); + fo14 = fmac( FFT_15PONIT_WNK2, fo16, FFT_15PONIT_WNK3 * fo15 ); + + zRe[in0] = fi1 + fo11; + fo17 = fo10 + fo12; + zRe[in18] = fo17 - fo14; + zRe[in24] = fo17 + fo14; + fo18 = fo12 - fo10; + zRe[in9] = fo18 - fo13; + zRe[in33] = fo18 + fo13; + + f2o1 = FFT_15PONIT_WNK1 * ( f2i3 - fi15 ); + f2o2 = f2i3 + fi15; + f2o3 = fnms( FFT_15PONIT_WNK5, f2o2, fi2 ); + f2o6 = fi7 - fi8; + f2o7 = fi25 - fi26; + f2o4 = fnms( FFT_15PONIT_WNK3, f2o7, FFT_15PONIT_WNK2 * f2o6 ); + f2o5 = fmac( FFT_15PONIT_WNK2, f2o7, FFT_15PONIT_WNK3 * f2o6 ); + zIm[in0] = fi2 + f2o2; + f2o8 = f2o1 + f2o3; + zIm[in24] = f2o8 - f2o5; + zIm[in18] = f2o5 + f2o8; + f2o9 = f2o3 - f2o1; + zIm[in33] = f2o9 - f2o4; + zIm[in9] = f2o4 + f2o9; + + f2o14 = FFT_15PONIT_WNK1 * ( fi30 - fi12 ); + f2o15 = fi30 + fi12; + f3o1 = fnms( FFT_15PONIT_WNK5, f2o15, fi3 ); + f3o4 = fi16 - fi17; + f3o5 = f2i4 - f2i5; + f3o2 = fnms( FFT_15PONIT_WNK3, f3o5, FFT_15PONIT_WNK2 * f3o4 ); + f3o3 = fmac( FFT_15PONIT_WNK2, f3o5, FFT_15PONIT_WNK3 * f3o4 ); + zRe[in2] = fi3 + f2o15; + f3o6 = f2o14 + f3o1; + zRe[in17] = f3o6 - f3o3; + zRe[in26] = f3o6 + f3o3; + f3o7 = f3o1 - f2o14; + zRe[in8] = f3o7 - f3o2; + zRe[in32] = f3o7 + f3o2; + + f3o8 = FFT_15PONIT_WNK1 * ( f2i6 - fi18 ); + f3o9 = f2i6 + fi18; + f3o10 = fnms( FFT_15PONIT_WNK5, f3o9, fi6 ); + f3o13 = fi10 - fi11; + f3o14 = fi28 - fi29; + f3o11 = fnms( FFT_15PONIT_WNK3, f3o14, FFT_15PONIT_WNK2 * f3o13 ); + f3o12 = fmac( FFT_15PONIT_WNK2, f3o14, FFT_15PONIT_WNK3 * f3o13 ); + zIm[in2] = fi6 + f3o9; + f3o15 = f3o8 + f3o10; + zIm[in26] = f3o15 - f3o12; + zIm[in17] = f3o12 + f3o15; + f4o1 = f3o10 - f3o8; + zIm[in8] = f3o11 + f4o1; + zIm[in32] = f4o1 - f3o11; + + f4o2 = FFT_15PONIT_WNK1 * ( f2i9 - fi21 ); + f4o3 = f2i9 + fi21; + f4o4 = fnms( FFT_15PONIT_WNK5, f4o3, fi5 ); + f4o7 = f2i10 - f2i11; + f4o8 = fi22 - fi23; + f4o5 = fmac( FFT_15PONIT_WNK2, f4o7, FFT_15PONIT_WNK3 * f4o8 ); + f4o6 = fnms( FFT_15PONIT_WNK3, f4o7, FFT_15PONIT_WNK2 * f4o8 ); + zIm[in1] = fi5 + f4o3; + f4o9 = f4o4 - f4o2; + f4o10 = f4o2 + f4o4; + + zIm[in10] = f4o6 + f4o9; + zIm[in34] = f4o9 - f4o6; + zIm[in25] = f4o10 - f4o5; + zIm[in16] = f4o5 + f4o10; + + f4o11 = FFT_15PONIT_WNK1 * ( f2i12 - fi24 ); + f4o12 = f2i12 + fi24; + f4o13 = fnms( FFT_15PONIT_WNK5, f4o12, fi4 ); + f4o16 = f2i7 - f2i8; + f4o17 = fi19 - fi20; + f4o14 = fmac( FFT_15PONIT_WNK2, f4o16, FFT_15PONIT_WNK3 * f4o17 ); + f4o15 = fnms( FFT_15PONIT_WNK3, f4o16, FFT_15PONIT_WNK2 * f4o17 ); + zRe[in1] = fi4 + f4o12; + f4o18 = f4o13 - f4o11; + f4o19 = f4o11 + f4o13; + + zRe[in10] = f4o18 - f4o15; + zRe[in34] = f4o18 + f4o15; + zRe[in16] = f4o19 - f4o14; + zRe[in25] = f4o19 + f4o14; + + return; +} + +/*-----------------------------------------------------------------* + * fft15_shift8() + * 15-point FFT with 8-point circular shift + *-----------------------------------------------------------------*/ + +static void fft15_shift8( + int16_t n1, /* i : length of data */ + float *zRe, /* i/o: real part of input and output data */ + float *zIm, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t in0, in8, in16, in24, in32, in1, in9, in17, in25, in33, in2, in10, in18, in26, in34; + float fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8, fi9, fi10, fi11, fi12, fi13, fi14, fi15; + float fi16, fi17, fi18, fi19, fi20, fi21, fi22, fi23, fi24, fi25, fi26, fi27, fi28, fi29, fi30; + float f2i1, f2i2, f2i3, f2i4, f2i5, f2i6, f2i7, f2i8, f2i9, f2i10, f2i11, f2i12; + float f2i13, f2i14, f2i15, f3i1, f3i2, f3i3, f3i4, f3i5, f3i6, f3i7, f3i8, f3i9; + float f3i10, f3i11, f3i12, f3i13, f3i14, f3i15, f4i1, f4i2, f4i3, f4i4, f4i5, f4i6, f4i7, f4i8, f4i9; + float f4i10, f4i11, f4i12, f4i13, f4i14, f4i15, fo1, fo2, fo3, fo4, fo5, fo6; + float fo7, fo8, fo9, fo10, fo11, fo12, fo13, fo14, fo15, f2o1, f2o2, f2o3, f2o4; + float f2o5, f2o6, f2o7, f2o8, f2o9, f2o10, f2o11, f2o12, f2o13, f2o14, f2o15; + float f3o1, f3o2, f3o3, f3o4, f3o5, f3o6, f3o7, f3o8, f3o9, f3o10, f3o11, f3o12; + float f3o13, f3o14, f3o15, f4o1, f4o2, f4o3, f4o4, f4o5, f4o6, f4o7, f4o8, f4o9; + float f4o10, f4o11, f4o12, f4o13, f4o14, f4o15, f5o1, f5o2, f5o3, f5o4, f5o5, f5o6, f5o7; + float f5o8, f5o9, f5o10, f5o11, f5o12, f5o13, f5o14, f5o15, f5o16, f5o17, f5o18, f5o19, f5o21, f5o22; + + in0 = Idx[0]; + in8 = Idx[n1]; + in16 = Idx[n1 * 2]; + in24 = Idx[n1 * 3]; + in32 = Idx[n1 * 4]; + in1 = Idx[n1 * 5]; + in9 = Idx[n1 * 6]; + in17 = Idx[n1 * 7]; + in25 = Idx[n1 * 8]; + in33 = Idx[n1 * 9]; + in2 = Idx[n1 * 10]; + in10 = Idx[n1 * 11]; + in18 = Idx[n1 * 12]; + in26 = Idx[n1 * 13]; + in34 = Idx[n1 * 14]; + + f2i13 = zRe[in0]; + f2i14 = zIm[in0]; + f3i6 = zRe[in1]; + f3i7 = zRe[in2]; + f3i8 = zIm[in1]; + f3i9 = zIm[in2]; + + f2i15 = f3i6 + f3i7; + f3i1 = FFT_15PONIT_WNK4 * ( f3i7 - f3i6 ); + f3i2 = FFT_15PONIT_WNK4 * ( f3i8 - f3i9 ); + f3i3 = f3i8 + f3i9; + + fi1 = f2i13 + f2i15; + fi2 = f2i14 + f3i3; + f3i4 = fnms( 0.5f, f2i15, f2i13 ); + fi3 = f3i4 - f3i2; + fi4 = f3i4 + f3i2; + f3i5 = fnms( 0.5f, f3i3, f2i14 ); + fi5 = f3i1 + f3i5; + fi6 = f3i5 - f3i1; + + f3i10 = zRe[in9]; + f4i11 = zRe[in10]; + f4i12 = zRe[in8]; + f3i14 = zIm[in9]; + f4i13 = zIm[in10]; + f4i14 = zIm[in8]; + f4i3 = zRe[in33]; + f4i15 = zRe[in34]; + fo1 = zRe[in32]; + f4i7 = zIm[in33]; + fo2 = zIm[in34]; + fo3 = zIm[in32]; + + + f3i11 = f4i11 + f4i12; + f3i12 = fnms( 0.5f, f3i11, f3i10 ); + f3i13 = FFT_15PONIT_WNK4 * ( f4i12 - f4i11 ); + f3i15 = f4i13 + f4i14; + f4i1 = FFT_15PONIT_WNK4 * ( f4i13 - f4i14 ); + f4i2 = fnms( 0.5f, f3i15, f3i14 ); + f4i4 = f4i15 + fo1; + f4i5 = fnms( 0.5f, f4i4, f4i3 ); + f4i6 = FFT_15PONIT_WNK4 * ( fo1 - f4i15 ); + f4i8 = fo2 + fo3; + f4i9 = FFT_15PONIT_WNK4 * ( fo2 - fo3 ); + f4i10 = fnms( 0.5f, f4i8, f4i7 ); + + fi7 = f3i10 + f3i11; + fi8 = f4i3 + f4i4; + fi9 = fi7 + fi8; + fi10 = f3i12 - f4i1; + fi11 = f4i5 - f4i9; + fi12 = fi10 + fi11; + fi13 = f3i14 + f3i15; + fi14 = f4i7 + f4i8; + fi15 = fi13 + fi14; + fi16 = f4i2 - f3i13; + fi17 = f4i10 - f4i6; + fi18 = fi16 + fi17; + fi19 = f3i13 + f4i2; + fi20 = f4i6 + f4i10; + fi21 = fi19 + fi20; + fi22 = f3i12 + f4i1; + fi23 = f4i5 + f4i9; + fi24 = fi22 + fi23; + + fo4 = zRe[in24]; + f2o5 = zRe[in25]; + f2o6 = zRe[in26]; + fo8 = zIm[in24]; + f2o7 = zIm[in25]; + f2o8 = zIm[in26]; + fo12 = zRe[in18]; + f2o9 = zRe[in16]; + f2o10 = zRe[in17]; + f2o1 = zIm[in18]; + f2o11 = zIm[in16]; + f2o12 = zIm[in17]; + + + fo5 = f2o5 + f2o6; + fo6 = fnms( 0.5f, fo5, fo4 ); + fo7 = FFT_15PONIT_WNK4 * ( f2o6 - f2o5 ); + fo9 = f2o7 + f2o8; + fo10 = FFT_15PONIT_WNK4 * ( f2o7 - f2o8 ); + fo11 = fnms( 0.5f, fo9, fo8 ); + fo13 = f2o9 + f2o10; + fo14 = fnms( 0.5f, fo13, fo12 ); + fo15 = FFT_15PONIT_WNK4 * ( f2o10 - f2o9 ); + f2o2 = f2o11 + f2o12; + f2o3 = FFT_15PONIT_WNK4 * ( f2o11 - f2o12 ); + f2o4 = fnms( 0.5f, f2o2, f2o1 ); + + fi25 = fo4 + fo5; + fi26 = fo12 + fo13; + fi27 = fi25 + fi26; + fi28 = fo6 - fo10; + fi29 = fo14 - f2o3; + fi30 = fi28 + fi29; + f2i1 = fo8 + fo9; + f2i2 = f2o1 + f2o2; + f2i3 = f2i1 + f2i2; + f2i4 = fo11 - fo7; + f2i5 = f2o4 - fo15; + f2i6 = f2i4 + f2i5; + f2i7 = fo7 + fo11; + f2i8 = fo15 + f2o4; + f2i9 = f2i7 + f2i8; + f2i10 = fo6 + fo10; + f2i11 = fo14 + f2o3; + f2i12 = f2i10 + f2i11; + + f2o13 = FFT_15PONIT_WNK1 * ( fi27 - fi9 ); + f2o14 = fi27 + fi9; + f2o15 = fnms( FFT_15PONIT_WNK5, f2o14, fi1 ); + f3o3 = fi13 - fi14; + f3o4 = f2i1 - f2i2; + f3o1 = fnms( FFT_15PONIT_WNK3, f3o4, FFT_15PONIT_WNK2 * f3o3 ); + f3o2 = fmac( FFT_15PONIT_WNK2, f3o4, FFT_15PONIT_WNK3 * f3o3 ); + zRe[in0] = fi1 + f2o14; + f3o5 = f2o13 + f2o15; + zRe[in24] = f3o5 - f3o2; + zRe[in18] = f3o5 + f3o2; + f3o6 = f2o15 - f2o13; + zRe[in33] = f3o6 - f3o1; + zRe[in9] = f3o6 + f3o1; + + f3o7 = FFT_15PONIT_WNK1 * ( f2i3 - fi15 ); + f3o8 = f2i3 + fi15; + f3o9 = fnms( FFT_15PONIT_WNK5, f3o8, fi2 ); + f3o12 = fi7 - fi8; + f3o13 = fi25 - fi26; + f3o10 = fnms( FFT_15PONIT_WNK3, f3o13, FFT_15PONIT_WNK2 * f3o12 ); + f3o11 = fmac( FFT_15PONIT_WNK2, f3o13, FFT_15PONIT_WNK3 * f3o12 ); + zIm[in0] = fi2 + f3o8; + f3o14 = f3o7 + f3o9; + zIm[in18] = f3o14 - f3o11; + zIm[in24] = f3o11 + f3o14; + f3o15 = f3o9 - f3o7; + zIm[in9] = f3o15 - f3o10; + zIm[in33] = f3o10 + f3o15; + + f4o1 = FFT_15PONIT_WNK1 * ( fi30 - fi12 ); + f4o2 = fi30 + fi12; + f4o3 = fnms( FFT_15PONIT_WNK5, f4o2, fi3 ); + f4o6 = fi16 - fi17; + f4o7 = f2i4 - f2i5; + f4o4 = fnms( FFT_15PONIT_WNK3, f4o7, FFT_15PONIT_WNK2 * f4o6 ); + f4o5 = fmac( FFT_15PONIT_WNK2, f4o7, FFT_15PONIT_WNK3 * f4o6 ); + zRe[in2] = fi3 + f4o2; + f4o8 = f4o1 + f4o3; + zRe[in26] = f4o8 - f4o5; + zRe[in17] = f4o8 + f4o5; + f4o9 = f4o3 - f4o1; + zRe[in32] = f4o9 - f4o4; + zRe[in8] = f4o9 + f4o4; + + f4o10 = FFT_15PONIT_WNK1 * ( f2i6 - fi18 ); + f4o11 = f2i6 + fi18; + f4o12 = fnms( FFT_15PONIT_WNK5, f4o11, fi6 ); + f4o15 = fi10 - fi11; + f5o1 = fi28 - fi29; + f4o13 = fnms( FFT_15PONIT_WNK3, f5o1, FFT_15PONIT_WNK2 * f4o15 ); + f4o14 = fmac( FFT_15PONIT_WNK2, f5o1, FFT_15PONIT_WNK3 * f4o15 ); + zIm[in2] = fi6 + f4o11; + f5o2 = f4o10 + f4o12; + zIm[in17] = f5o2 - f4o14; + zIm[in26] = f4o14 + f5o2; + f5o3 = f4o12 - f4o10; + zIm[in32] = f4o13 + f5o3; + zIm[in8] = f5o3 - f4o13; + + f5o4 = FFT_15PONIT_WNK1 * ( f2i9 - fi21 ); + f5o5 = f2i9 + fi21; + f5o6 = fnms( FFT_15PONIT_WNK5, f5o5, fi5 ); + f5o9 = f2i10 - f2i11; + f5o10 = fi22 - fi23; + f5o7 = fmac( FFT_15PONIT_WNK2, f5o9, FFT_15PONIT_WNK3 * f5o10 ); + f5o8 = fnms( FFT_15PONIT_WNK3, f5o9, FFT_15PONIT_WNK2 * f5o10 ); + zIm[in1] = fi5 + f5o5; + f5o11 = f5o6 - f5o4; + f5o12 = f5o4 + f5o6; + zIm[in34] = f5o8 + f5o11; + zIm[in10] = f5o11 - f5o8; + + zIm[in16] = f5o12 - f5o7; + zIm[in25] = f5o7 + f5o12; + + f5o13 = FFT_15PONIT_WNK1 * ( f2i12 - fi24 ); + f5o14 = f2i12 + fi24; + f5o15 = fnms( FFT_15PONIT_WNK5, f5o14, fi4 ); + f5o18 = f2i7 - f2i8; + f5o19 = fi19 - fi20; + f5o16 = fmac( FFT_15PONIT_WNK2, f5o18, FFT_15PONIT_WNK3 * f5o19 ); + f5o17 = fnms( FFT_15PONIT_WNK3, f5o18, FFT_15PONIT_WNK2 * f5o19 ); + zRe[in1] = fi4 + f5o14; + f5o21 = f5o15 - f5o13; + f5o22 = f5o13 + f5o15; + + zRe[in34] = f5o21 - f5o17; + zRe[in10] = f5o21 + f5o17; + zRe[in25] = f5o22 - f5o16; + zRe[in16] = f5o22 + f5o16; + + return; +} + +/*-----------------------------------------------------------------* + * fft5_shift1() + * 5-point FFT with 1-point circular shift + *-----------------------------------------------------------------*/ + +static void fft5_shift1( + int16_t n1, /* i : length of data */ + float *zRe, /* i/o: real part of input and output data */ + float *zIm, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + float fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8; + float fo1, fo2, fo3, fo4, fo5, fo6, fo7, fo8; + int16_t in1, in2, in3, in4, in5; + + in1 = Idx[0]; + in2 = Idx[n1]; + in3 = Idx[n1 * 2]; + in4 = Idx[n1 * 3]; + in5 = Idx[n1 * 4]; + + fi1 = zRe[in1]; + fi2 = zIm[in1]; + fo3 = zRe[in2]; + fo4 = zRe[in5]; + fo6 = zRe[in3]; + fo7 = zRe[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi3 = fo5 + fo8; + fi4 = fo6 - fo7; + fi5 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + fi6 = fo3 - fo4; + + fo3 = zIm[in2]; + fo4 = zIm[in5]; + fo6 = zIm[in3]; + fo7 = zIm[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi7 = fo3 - fo4; + fi8 = fo5 + fo8; + fo1 = fo6 - fo7; + fo2 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + + zRe[in1] = fi1 + fi3; + zIm[in1] = fi2 + fi8; + + fo3 = FFT_15PONIT_WNK2 * fi7 + FFT_15PONIT_WNK3 * fo1; + fo4 = FFT_15PONIT_WNK2 * fo1 - FFT_15PONIT_WNK3 * fi7; + fo7 = fi1 - fi3 / 4; + fo5 = fi5 + fo7; + fo6 = fo7 - fi5; + + zRe[in2] = fo5 + fo3; + zRe[in3] = fo6 - fo4; + zRe[in4] = fo6 + fo4; + zRe[in5] = fo5 - fo3; + + fo3 = FFT_15PONIT_WNK2 * fi6 + FFT_15PONIT_WNK3 * fi4; + fo4 = FFT_15PONIT_WNK2 * fi4 - FFT_15PONIT_WNK3 * fi6; + fo7 = fi2 - fi8 / 4; + fo5 = fo2 + fo7; + fo6 = fo7 - fo2; + + zIm[in2] = fo5 - fo3; + zIm[in3] = fo4 + fo6; + zIm[in4] = fo6 - fo4; + zIm[in5] = fo3 + fo5; + + return; +} + +/*-----------------------------------------------------------------* + * fft5_shift4() + * 5-point FFT with 4-point circular shift + *-----------------------------------------------------------------*/ + +static void fft5_shift4( + int16_t n1, /* i : length of data */ + float *zRe, /* i/o: real part of input and output data */ + float *zIm, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + float fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8; + float fo1, fo2, fo3, fo4, fo5, fo6, fo7, fo8; + int16_t in1, in2, in3, in4, in5; + + in1 = Idx[0]; + in2 = Idx[n1]; + in3 = Idx[n1 * 2]; + in4 = Idx[n1 * 3]; + in5 = Idx[n1 * 4]; + + fi1 = zRe[in1]; + fi2 = zIm[in1]; + fo3 = zRe[in2]; + fo4 = zRe[in5]; + fo6 = zRe[in3]; + fo7 = zRe[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi3 = fo5 + fo8; + fi4 = fo6 - fo7; + fi5 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + fi6 = fo3 - fo4; + + fo3 = zIm[in2]; + fo4 = zIm[in5]; + fo6 = zIm[in3]; + fo7 = zIm[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi7 = fo3 - fo4; + fi8 = fo5 + fo8; + fo1 = fo6 - fo7; + fo2 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + + zRe[in1] = fi1 + fi3; + zIm[in1] = fi2 + fi8; + + fo3 = FFT_15PONIT_WNK2 * fi7 + FFT_15PONIT_WNK3 * fo1; + fo4 = FFT_15PONIT_WNK2 * fo1 - FFT_15PONIT_WNK3 * fi7; + fo7 = fi1 - fi3 / 4; + fo5 = fi5 + fo7; + fo6 = fo7 - fi5; + zRe[in2] = fo5 - fo3; + zRe[in4] = fo6 - fo4; + zRe[in3] = fo6 + fo4; + zRe[in5] = fo5 + fo3; + + fo3 = FFT_15PONIT_WNK2 * fi6 + FFT_15PONIT_WNK3 * fi4; + fo4 = FFT_15PONIT_WNK2 * fi4 - FFT_15PONIT_WNK3 * fi6; + fo7 = fi2 - fi8 / 4; + fo5 = fo2 + fo7; + fo6 = fo7 - fo2; + + zIm[in3] = fo6 - fo4; + zIm[in2] = fo3 + fo5; + zIm[in4] = fo4 + fo6; + zIm[in5] = fo5 - fo3; + + return; +} + +/*-----------------------------------------------------------------* + * fft5_32() + * 5-point FFT called for 32 times + *-----------------------------------------------------------------*/ + +static void fft5_32( + float *zRe, /* i/o: real part of input and output data */ + float *zIm, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + float fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8; + float fo1, fo2, fo3, fo4, fo5, fo6, fo7, fo8; + int16_t in1, in2, in3, in4, in5; + + in1 = Idx[0]; + in2 = Idx[32]; + in3 = Idx[64]; + in4 = Idx[96]; + in5 = Idx[128]; + + fi1 = zRe[in1]; + fi2 = zIm[in1]; + fo3 = zRe[in2]; + fo4 = zRe[in5]; + fo6 = zRe[in3]; + fo7 = zRe[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi3 = fo5 + fo8; + fi4 = fo6 - fo7; + fi5 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + fi6 = fo3 - fo4; + + fo3 = zIm[in2]; + fo4 = zIm[in5]; + fo6 = zIm[in3]; + fo7 = zIm[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi7 = fo3 - fo4; + fi8 = fo5 + fo8; + fo1 = fo6 - fo7; + fo2 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + + zRe[in1] = fi1 + fi3; + zIm[in1] = fi2 + fi8; + + fo3 = FFT_15PONIT_WNK2 * fi7 + FFT_15PONIT_WNK3 * fo1; + fo4 = FFT_15PONIT_WNK2 * fo1 - FFT_15PONIT_WNK3 * fi7; + fo7 = fi1 - fi3 / 4; + fo5 = fi5 + fo7; + fo6 = fo7 - fi5; + + zRe[in2] = fo6 + fo4; + zRe[in3] = fo5 + fo3; + zRe[in4] = fo5 - fo3; + zRe[in5] = fo6 - fo4; + + fo3 = FFT_15PONIT_WNK2 * fi6 + FFT_15PONIT_WNK3 * fi4; + fo4 = FFT_15PONIT_WNK2 * fi4 - FFT_15PONIT_WNK3 * fi6; + fo7 = fi2 - fi8 / 4; + fo5 = fo2 + fo7; + fo6 = fo7 - fo2; + + zIm[in2] = fo6 - fo4; + zIm[in3] = fo5 - fo3; + zIm[in4] = fo3 + fo5; + zIm[in5] = fo4 + fo6; + + return; +} + +/*-----------------------------------------------------------------* + * fft64() + * 64-point FFT + *-----------------------------------------------------------------*/ + +static void fft64( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t i, id, jd; + float z[128]; + for ( i = 0; i < 64; i++ ) + { + id = Idx[i]; + z[2 * i] = x[id]; + z[2 * i + 1] = y[id]; + } + + cdftForw( 128, z, Ip_fft64, w_fft64 ); + + for ( i = 0; i < 64; i++ ) + { + jd = Odx_fft64[i]; + id = Idx[jd]; + x[id] = z[2 * i]; + y[id] = z[2 * i + 1]; + } + + return; +} + + +/*-----------------------------------------------------------------* + * fft32_15() + * 32-point FFT called for 15 times + *-----------------------------------------------------------------*/ + +static void fft32_15( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t i, id, jd; + float z[64]; + + for ( i = 0; i < 32; i++ ) + { + id = Idx[i]; + z[2 * i] = x[id]; + z[2 * i + 1] = y[id]; + } + + cdftForw( 64, z, Ip_fft32, w_fft32 ); + + for ( i = 0; i < 32; i++ ) + { + jd = Odx_fft32_15[i]; + id = Idx[jd]; + x[id] = z[2 * i]; + y[id] = z[2 * i + 1]; + } + + return; +} + +/*-----------------------------------------------------------------* + * fft32_5() + * 32-point FFT called for 5 times + *-----------------------------------------------------------------*/ + +static void fft32_5( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t i, id, jd; + float z[64]; + + for ( i = 0; i < 32; i++ ) + { + id = Idx[i]; + z[2 * i] = x[id]; + z[2 * i + 1] = y[id]; + } + + cdftForw( 64, z, Ip_fft32, w_fft32 ); + + for ( i = 0; i < 32; i++ ) + { + jd = Odx_fft32_5[i]; + id = Idx[jd]; + x[id] = z[2 * i]; + y[id] = z[2 * i + 1]; + } + + return; +} + +/*-----------------------------------------------------------------* + * fft16() + * 16-point FFT + *-----------------------------------------------------------------*/ + +static void fft16( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t i, id, jd; + float z[32]; + + for ( i = 0; i < 16; i++ ) + { + id = Idx[i]; + z[2 * i] = x[id]; + z[2 * i + 1] = y[id]; + } + + cdftForw( 32, z, Ip_fft16, w_fft16 ); + + for ( i = 0; i < 16; i++ ) + { + jd = Odx_fft16[i]; + id = Idx[jd]; + x[id] = z[2 * i]; + y[id] = z[2 * i + 1]; + } + + return; +} + +/*-----------------------------------------------------------------* + * fft8() + * 8-point FFT + *-----------------------------------------------------------------*/ + +static void fft8( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t i, id; + float z[16]; + + for ( i = 0; i < 8; i++ ) + { + id = Idx[i]; + z[2 * i] = x[id]; + z[2 * i + 1] = y[id]; + } + + cdftForw( 16, z, Ip_fft8, w_fft8 ); + + for ( i = 0; i < 8; i++ ) + { + id = Idx[i]; + x[id] = z[2 * i]; + y[id] = z[2 * i + 1]; + } + + return; +} + +/*-----------------------------------------------------------------* + * fft8_5() + * 8-point FFT with shift 5 + *-----------------------------------------------------------------*/ + +static void fft8_5( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t i, id, jd; + float z[16]; + + for ( i = 0; i < 8; i++ ) + { + id = Idx[i]; + z[2 * i] = x[id]; + z[2 * i + 1] = y[id]; + } + + cdftForw( 16, z, Ip_fft8, w_fft8 ); + + for ( i = 0; i < 8; i++ ) + { + jd = Odx_fft8_5[i]; + id = Idx[jd]; + x[id] = z[2 * i]; + y[id] = z[2 * i + 1]; + } + return; +} + +/*-----------------------------------------------------------------* + * fft5_8() + * 5-point FFT with shift 2 + *-----------------------------------------------------------------*/ + +static void fft5_8( + int16_t n1, /* i : length of data */ + float *zRe, /* i/o: real part of input and output data */ + float *zIm, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + float fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8; + float fo1, fo2, fo3, fo4, fo5, fo6, fo7, fo8; + int16_t in1, in2, in3, in4, in5; + + in1 = Idx[0]; + in2 = Idx[n1]; + in3 = Idx[n1 * 2]; + in4 = Idx[n1 * 3]; + in5 = Idx[n1 * 4]; + + fi1 = zRe[in1]; + fi2 = zIm[in1]; + fo3 = zRe[in2]; + fo4 = zRe[in5]; + fo6 = zRe[in3]; + fo7 = zRe[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi3 = fo5 + fo8; + fi4 = fo6 - fo7; + fi5 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + fi6 = fo3 - fo4; + + fo3 = zIm[in2]; + fo4 = zIm[in5]; + fo6 = zIm[in3]; + fo7 = zIm[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi7 = fo3 - fo4; + fi8 = fo5 + fo8; + fo1 = fo6 - fo7; + fo2 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + + zRe[in1] = fi1 + fi3; + zIm[in1] = fi2 + fi8; + + fo3 = FFT_15PONIT_WNK2 * fi7 + FFT_15PONIT_WNK3 * fo1; + fo4 = FFT_15PONIT_WNK2 * fo1 - FFT_15PONIT_WNK3 * fi7; + fo7 = fi1 - fi3 / 4; + fo5 = fi5 + fo7; + fo6 = fo7 - fi5; + + zRe[in2] = fo6 - fo4; + zRe[in3] = fo5 - fo3; + zRe[in5] = fo6 + fo4; + zRe[in4] = fo5 + fo3; + + fo3 = FFT_15PONIT_WNK2 * fi6 + FFT_15PONIT_WNK3 * fi4; + fo4 = FFT_15PONIT_WNK2 * fi4 - FFT_15PONIT_WNK3 * fi6; + fo7 = fi2 - fi8 / 4; + fo5 = fo2 + fo7; + fo6 = fo7 - fo2; + + zIm[in2] = fo4 + fo6; + zIm[in3] = fo3 + fo5; + zIm[in4] = fo5 - fo3; + zIm[in5] = fo6 - fo4; + + return; +} + +/*-----------------------------------------------------------------* + * fft4_5() + * 8-point FFT with shift 1 + *-----------------------------------------------------------------*/ + +static void fft4_5( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t *Idx /* i : pointer of the address table */ +) +{ + int16_t i, id, jd; + float z[8]; + + for ( i = 0; i < 4; i++ ) + { + id = Idx[i]; + z[2 * i] = x[id]; + z[2 * i + 1] = y[id]; + } + + cdftForw( 8, z, Ip_fft4, w_fft4 ); + + for ( i = 0; i < 4; i++ ) + { + jd = Odx_fft4_5[i]; + id = Idx[jd]; + x[id] = z[2 * i]; + y[id] = z[2 * i + 1]; + } + return; +} + +/*-----------------------------------------------------------------* + * fft5_4() + * 5-point FFT with shift 4 + *-----------------------------------------------------------------*/ + +static void fft5_4( + int16_t n1, + float *zRe, + float *zIm, + const int16_t *Idx ) +{ + float fi1, fi2, fi3, fi4, fi5, fi6, fi7, fi8; + float fo1, fo2, fo3, fo4, fo5, fo6, fo7, fo8; + int16_t in1, in2, in3, in4, in5; + + in1 = Idx[0]; + in2 = Idx[n1]; + in3 = Idx[n1 * 2]; + in4 = Idx[n1 * 3]; + in5 = Idx[n1 * 4]; + + fi1 = zRe[in1]; + fi2 = zIm[in1]; + fo3 = zRe[in2]; + fo4 = zRe[in5]; + fo6 = zRe[in3]; + fo7 = zRe[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi3 = fo5 + fo8; + fi4 = fo6 - fo7; + fi5 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + fi6 = fo3 - fo4; + + fo3 = zIm[in2]; + fo4 = zIm[in5]; + fo6 = zIm[in3]; + fo7 = zIm[in4]; + + fo5 = fo3 + fo4; + fo8 = fo6 + fo7; + fi7 = fo3 - fo4; + fi8 = fo5 + fo8; + fo1 = fo6 - fo7; + fo2 = FFT_15PONIT_WNK1 * ( fo5 - fo8 ); + + zRe[in1] = fi1 + fi3; + zIm[in1] = fi2 + fi8; + + fo3 = FFT_15PONIT_WNK2 * fi7 + FFT_15PONIT_WNK3 * fo1; + fo4 = FFT_15PONIT_WNK2 * fo1 - FFT_15PONIT_WNK3 * fi7; + fo7 = fi1 - fi3 / 4; + fo5 = fi5 + fo7; + fo6 = fo7 - fi5; + + zRe[in2] = fo5 - fo3; + zRe[in4] = fo6 - fo4; + zRe[in3] = fo6 + fo4; + zRe[in5] = fo5 + fo3; + + fo3 = FFT_15PONIT_WNK2 * fi6 + FFT_15PONIT_WNK3 * fi4; + fo4 = FFT_15PONIT_WNK2 * fi4 - FFT_15PONIT_WNK3 * fi6; + fo7 = fi2 - fi8 / 4; + fo5 = fo2 + fo7; + fo6 = fo7 - fo2; + + zIm[in2] = fo3 + fo5; + zIm[in3] = fo6 - fo4; + zIm[in4] = fo4 + fo6; + zIm[in5] = fo5 - fo3; + + return; +} + + +/*-----------------------------------------------------------------* + * DoRTFT80() + * a low complexity 2-dimensional DFT of 80 points + *-----------------------------------------------------------------*/ + +void DoRTFT80( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + int16_t j; + + /* Applying 16-point FFT for 5 times based on the address table Idx_dortft80 */ + for ( j = 0; j < 5; j++ ) + { + fft16( x, y, Idx_dortft80 + 16 * j ); + } + + /* Applying 5-point FFT for 16 times based on the address table Idx_dortft80 */ + for ( j = 0; j < 16; j++ ) + { + fft5_shift1( 16, x, y, Idx_dortft80 + j ); + } + + return; +} + +/*-----------------------------------------------------------------* + * DoRTFT120() + * a low complexity 2-dimensional DFT of 120 points + *-----------------------------------------------------------------*/ + +void DoRTFT120( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + int16_t j; + + /* Applying 8-point FFT for 15 times based on the address table Idx_dortft120 */ + for ( j = 0; j < 15; j++ ) + { + fft8( x, y, Idx_dortft120 + 8 * j ); + } + + /* Applying 15-point FFT for 8 times based on the address table Idx_dortft120 */ + for ( j = 0; j < 8; j++ ) + { + fft15_shift2( 8, x, y, Idx_dortft120 + j ); + } + + return; +} + +/*-----------------------------------------------------------------* + * DoRTFT160() + * a low complexity 2-dimensional DFT of 160 points + *-----------------------------------------------------------------*/ + +void DoRTFT160( + float x[], /* i/o: real part of input and output data */ + float y[] /* i/o: imaginary part of input and output data */ +) +{ + int16_t j; + + /* Applying 32-point FFT for 5 times based on the address table Idx_dortft160 */ + for ( j = 0; j < 5; j++ ) + { + fft32_5( x, y, Idx_dortft160 + 32 * j ); + } + + /* Applying 5-point FFT for 32 times based on the address table Idx_dortft160 */ + for ( j = 0; j < 32; j++ ) + { + fft5_32( x, y, Idx_dortft160 + j ); + } + + return; +} + +/*-----------------------------------------------------------------* + * DoRTFT320() + * a low complexity 2-dimensional DFT of 320 points + *-----------------------------------------------------------------*/ + +void DoRTFT320( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + int16_t j; + + /* Applying 64-point FFT for 5 times based on the address table Idx_dortft160 */ + for ( j = 0; j < 5; j++ ) + { + fft64( x, y, Idx_dortft320 + 64 * j ); + } + + /* Applying 5-point FFT for 64 times based on the address table Idx_dortft160 */ + for ( j = 0; j < 64; j++ ) + { + fft5_shift4( 64, x, y, Idx_dortft320 + j ); + } + + return; +} + +/*-----------------------------------------------------------------* + * DoRTFT480() + * a low complexity 2-dimensional DFT of 480 points + *-----------------------------------------------------------------*/ + +void DoRTFT480( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + int16_t j; + + /* Applying 32-point FFT for 15 times based on the address table Idx_dortft160 */ + for ( j = 0; j < 15; j++ ) + { + fft32_15( x, y, Idx_dortft480 + 32 * j ); + } + + /* Applying 5-point FFT for 32 times based on the address table Idx_dortft160 */ + for ( j = 0; j < 32; j++ ) + { + fft15_shift8( 32, x, y, Idx_dortft480 + j ); + } + + return; +} + +/*-----------------------------------------------------------------* + * DoRTFT40() + * a low complexity 2-dimensional DFT of 40 points + *-----------------------------------------------------------------*/ + +void DoRTFT40( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + int16_t j; + /* Applying 8-point FFT for 5 times based on the address table Idx_dortft40 */ + for ( j = 0; j < 5; j++ ) + { + fft8_5( x, y, Idx_dortft40 + 8 * j ); + } + + /* Applying 5-point FFT for 8 times based on the address table Idx_dortft40 */ + for ( j = 0; j < 8; j++ ) + { + fft5_8( 8, x, y, Idx_dortft40 + j ); + } + + return; +} + +/*-----------------------------------------------------------------* + * DoRTFT20() + * a low complexity 2-dimensional DFT of 20 points + *-----------------------------------------------------------------*/ + +void DoRTFT20( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + int16_t j; + + /* Applying 4-point FFT for 5 times based on the address table Idx_dortft20 */ + for ( j = 0; j < 5; j++ ) + { + fft4_5( x, y, Idx_dortft20 + 4 * j ); + } + + /* Applying 5-point FFT for 4 times based on the address table Idx_dortft20 */ + for ( j = 0; j < 4; j++ ) + { + fft5_4( 4, x, y, Idx_dortft20 + j ); + } + + return; +} + +/*-----------------------------------------------------------------* + * DoRTFT128() + * FFT with 128 points + *-----------------------------------------------------------------*/ + +void DoRTFT128( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + + int16_t i; + float z[256]; + + for ( i = 0; i < 128; i++ ) + { + z[2 * i] = x[i]; + z[2 * i + 1] = y[i]; + } + + cdftForw( 256, z, Ip_fft128, w_fft128 ); + + x[0] = z[0]; + y[0] = z[1]; + for ( i = 1; i < 128; i++ ) + { + x[128 - i] = z[2 * i]; + y[128 - i] = z[2 * i + 1]; + } + + return; +} + +/*-----------------------------------------------------------------* + * cdftForw() + * Main fuction of Complex Discrete Fourier Transform + *-----------------------------------------------------------------*/ + +static void cdftForw( + int16_t n, /* i : data length of real and imag */ + float *a, /* i/o: input/output data */ + const int16_t *ip, /* i : work area for bit reversal */ + const float *w /* i : cos/sin table */ +) +{ + /* bit reversal */ + bitrv2_SR( n, ip + 2, a ); + + /* Do FFT */ + cftfsub( n, a, w ); +} + +/*-----------------------------------------------------------------* + * bitrv2_SR() + * Bit reversal + *-----------------------------------------------------------------*/ + +static void bitrv2_SR( + int16_t n, /* i : data length of real and imag */ + const int16_t *ip, /* i/o: work area for bit reversal */ + float *a /* i/o: input/output data */ +) +{ + int16_t j, j1, k, k1, m, m2; + int16_t l; + float xr, xi, yr, yi; + + if ( n == 64 ) + { + m = 4; + l = -1; + } + else if ( n == 256 ) + { + m = 8; + l = -1; + } + else if ( n == 16 ) + { + m = 2; + l = -1; + } + else + { + l = n; + m = 1; + + while ( ( m << 3 ) < l ) + { + l >>= 1; + m <<= 1; + } + l -= m * 8; + } + + m2 = 2 * m; + + if ( l == 0 ) + { + for ( k = 0; k < m; k++ ) + { + for ( j = 0; j < k; j++ ) + { + j1 = 2 * j + ip[k]; + k1 = 2 * k + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += m2; + k1 += 2 * m2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += m2; + k1 -= m2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += m2; + k1 += 2 * m2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + + j1 = 2 * k + m2 + ip[k]; + k1 = j1 + m2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + else + { + for ( k = 1; k < m; k++ ) + { + for ( j = 0; j < k; j++ ) + { + j1 = 2 * j + ip[k]; + k1 = 2 * k + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += m2; + k1 += m2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } + + return; +} + +/*-----------------------------------------------------------------* + * cftfsub() + * Complex Discrete Fourier Transform + *-----------------------------------------------------------------*/ + +static void cftfsub( + int16_t n, /* i : data length of real and imag */ + float *a, /* i/o: input/output data */ + const float *w /* i : cos/sin table */ +) +{ + int16_t j, j1, j2, j3, l; + float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + l = 2; + if ( n > 8 ) + { + cft1st( n, a, w ); + + l = 8; + while ( ( l << 2 ) < n ) + { + cftmdl( n, l, a, w ); + l <<= 2; + } + } + + if ( ( l << 2 ) == n ) + { + for ( j = 0; j < l; j += 2 ) + { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x0r - x2r; + a[j2 + 1] = x0i - x2i; + a[j1] = x1r - x3i; + a[j1 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + } + } + else + { + for ( j = 0; j < l; j += 2 ) + { + j1 = j + l; + x0r = a[j] - a[j1]; + x0i = a[j + 1] - a[j1 + 1]; + a[j] += a[j1]; + a[j + 1] += a[j1 + 1]; + a[j1] = x0r; + a[j1 + 1] = x0i; + } + } + + return; +} + +/*-----------------------------------------------------------------* + * cft1st() + * Subfunction of Complex Discrete Fourier Transform + *-----------------------------------------------------------------*/ + +static void cft1st( + int16_t n, /* i : data length of real and imag */ + float *a, /* i/o: input/output data */ + const float *w /* i : cos/sin table */ +) +{ + int16_t j, k1, k2; + float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + x0r = a[0] + a[2]; + x0i = a[1] + a[3]; + x1r = a[0] - a[2]; + x1i = a[1] - a[3]; + x2r = a[4] + a[6]; + x2i = a[5] + a[7]; + x3r = a[4] - a[6]; + x3i = a[5] - a[7]; + a[0] = x0r + x2r; + a[1] = x0i + x2i; + a[4] = x0r - x2r; + a[5] = x0i - x2i; + a[2] = x1r - x3i; + a[3] = x1i + x3r; + a[6] = x1r + x3i; + a[7] = x1i - x3r; + wk1r = w[2]; + x0r = a[8] + a[10]; + x0i = a[9] + a[11]; + x1r = a[8] - a[10]; + x1i = a[9] - a[11]; + x2r = a[12] + a[14]; + x2i = a[13] + a[15]; + x3r = a[12] - a[14]; + x3i = a[13] - a[15]; + a[8] = x0r + x2r; + a[9] = x0i + x2i; + a[12] = x2i - x0i; + a[13] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[10] = wk1r * ( x0r - x0i ); + a[11] = wk1r * ( x0r + x0i ); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[14] = wk1r * ( x0i - x0r ); + a[15] = wk1r * ( x0i + x0r ); + k1 = 0; + + for ( j = 16; j < n; j += 16 ) + { + k1 += 2; + k2 = 2 * k1; + wk2r = w[k1]; + wk2i = w[k1 + 1]; + wk1r = w[k2]; + wk1i = w[k2 + 1]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + x0r = a[j] + a[j + 2]; + x0i = a[j + 1] + a[j + 3]; + x1r = a[j] - a[j + 2]; + x1i = a[j + 1] - a[j + 3]; + x2r = a[j + 4] + a[j + 6]; + x2i = a[j + 5] + a[j + 7]; + x3r = a[j + 4] - a[j + 6]; + x3i = a[j + 5] - a[j + 7]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j + 4] = wk2r * x0r - wk2i * x0i; + a[j + 5] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j + 2] = wk1r * x0r - wk1i * x0i; + a[j + 3] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j + 6] = wk3r * x0r - wk3i * x0i; + a[j + 7] = wk3r * x0i + wk3i * x0r; + wk1r = w[k2 + 2]; + wk1i = w[k2 + 3]; + wk3r = wk1r - 2 * wk2r * wk1i; + wk3i = 2 * wk2r * wk1r - wk1i; + x0r = a[j + 8] + a[j + 10]; + x0i = a[j + 9] + a[j + 11]; + x1r = a[j + 8] - a[j + 10]; + x1i = a[j + 9] - a[j + 11]; + x2r = a[j + 12] + a[j + 14]; + x2i = a[j + 13] + a[j + 15]; + x3r = a[j + 12] - a[j + 14]; + x3i = a[j + 13] - a[j + 15]; + a[j + 8] = x0r + x2r; + a[j + 9] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j + 12] = -wk2i * x0r - wk2r * x0i; + a[j + 13] = -wk2i * x0i + wk2r * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j + 10] = wk1r * x0r - wk1i * x0i; + a[j + 11] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j + 14] = wk3r * x0r - wk3i * x0i; + a[j + 15] = wk3r * x0i + wk3i * x0r; + } + + return; +} + +/*-----------------------------------------------------------------* + * cftmdl() + * Subfunction of Complex Discrete Fourier Transform + *-----------------------------------------------------------------*/ + +static void cftmdl( + int16_t n, /* i : data length of real and imag */ + int16_t l, /* i : initial shift for processing */ + float *a, /* i/o: input/output data */ + const float *w /* i : cos/sin table */ +) +{ + int16_t j, j1, j2, j3, k, k1, k2, m, m2; + float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + m = l << 2; + for ( j = 0; j < l; j += 2 ) + { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x0r - x2r; + a[j2 + 1] = x0i - x2i; + a[j1] = x1r - x3i; + a[j1 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + } + + wk1r = w[2]; + for ( j = m; j < l + m; j += 2 ) + { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x2i - x0i; + a[j2 + 1] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * ( x0r - x0i ); + a[j1 + 1] = wk1r * ( x0r + x0i ); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[j3] = wk1r * ( x0i - x0r ); + a[j3 + 1] = wk1r * ( x0i + x0r ); + } + + k1 = 0; + m2 = 2 * m; + for ( k = m2; k < n; k += m2 ) + { + k1 += 2; + k2 = 2 * k1; + wk2r = w[k1]; + wk2i = w[k1 + 1]; + wk1r = w[k2]; + wk1i = w[k2 + 1]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + for ( j = k; j < l + k; j += 2 ) + { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2] = wk2r * x0r - wk2i * x0i; + a[j2 + 1] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * x0r - wk1i * x0i; + a[j1 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r - wk3i * x0i; + a[j3 + 1] = wk3r * x0i + wk3i * x0r; + } + + wk1r = w[k2 + 2]; + wk1i = w[k2 + 3]; + wk3r = wk1r - 2 * wk2r * wk1i; + wk3i = 2 * wk2r * wk1r - wk1i; + for ( j = k + m; j < l + ( k + m ); j += 2 ) + { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2] = -wk2i * x0r - wk2r * x0i; + a[j2 + 1] = -wk2i * x0i + wk2r * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * x0r - wk1i * x0i; + a[j1 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r - wk3i * x0i; + a[j3 + 1] = wk3r * x0i + wk3i * x0r; + } + } + + return; +} + +static void cftbsub( + int16_t n, + float *a, + const float *w /* i : cos/sin table */ +) +{ + int16_t j, j1, j2, j3, l; + float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + l = 2; + if ( n > 8 ) + { + cft1st( n, a, w ); + l = 8; + + while ( ( l << 2 ) < n ) + { + cftmdl( n, l, a, w ); + l <<= 2; + } + } + + if ( ( l << 2 ) == n ) + { + for ( j = 0; j < l; j += 2 ) + { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = -a[j + 1] - a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = -a[j + 1] + a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i - x2i; + a[j2] = x0r - x2r; + a[j2 + 1] = x0i + x2i; + a[j1] = x1r - x3i; + a[j1 + 1] = x1i - x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i + x3r; + } + } + else + { + for ( j = 0; j < l; j += 2 ) + { + j1 = j + l; + x0r = a[j] - a[j1]; + x0i = -a[j + 1] + a[j1 + 1]; + a[j] += a[j1]; + a[j + 1] = -a[j + 1] - a[j1 + 1]; + a[j1] = x0r; + a[j1 + 1] = x0i; + } + } + + return; +} + +static void rftfsub( + int16_t n, + float *a, + int16_t nc, + const float *c ) +{ + int16_t j, k, kk, ks, m; + float wkr, wki, xr, xi, yr, yi; + + m = n >> 1; + ks = 2 * nc / m; + kk = 0; + for ( j = 2; j < m; j += 2 ) + { + k = n - j; + kk += ks; + wkr = 0.5f - c[nc - kk]; + wki = c[kk]; + xr = a[j] - a[k]; + xi = a[j + 1] + a[k + 1]; + yr = wkr * xr - wki * xi; + yi = wkr * xi + wki * xr; + a[j] -= yr; + a[j + 1] -= yi; + a[k] += yr; + a[k + 1] -= yi; + } + + return; +} + + +static void rftbsub( + int16_t n, + float *a, + int16_t nc, + const float *c ) +{ + int16_t j, k, kk, ks, m; + float wkr, wki, xr, xi, yr, yi; + + a[1] = -a[1]; + m = n >> 1; + ks = 2 * nc / m; + kk = 0; + for ( j = 2; j < m; j += 2 ) + { + k = n - j; + kk += ks; + wkr = 0.5f - c[nc - kk]; + wki = c[kk]; + xr = a[j] - a[k]; + xi = a[j + 1] + a[k + 1]; + yr = wkr * xr + wki * xi; + yi = wkr * xi - wki * xr; + a[j] -= yr; + a[j + 1] = yi - a[j + 1]; + a[k] += yr; + a[k + 1] = yi - a[k + 1]; + } + a[m + 1] = -a[m + 1]; + + return; +} + + +static void dctsub( + int16_t n, + float *a, + int16_t nc, + const float *c ) +{ + int16_t j, k, kk, ks, m; + float wkr, wki, xr; + + m = n >> 1; + ks = nc / n; + kk = 0; + for ( j = 1; j < m; j++ ) + { + k = n - j; + kk += ks; + wkr = c[kk] - c[nc - kk]; + wki = c[kk] + c[nc - kk]; + xr = wki * a[j] - wkr * a[k]; + a[j] = wkr * a[j] + wki * a[k]; + a[k] = xr; + } + a[m] *= c[0]; + + return; +} + + +/*-----------------------------------------------------------------* + * edct2() + * + * Transformation of the signal to DCT domain + * OR Inverse EDCT-II for short frames + *-----------------------------------------------------------------*/ + +void edct2( + const int16_t n, + const int16_t isgn, + float *in, + float *a, + const int16_t *ip, + const float *w ) +{ + int16_t j, nw, nc; + float xr; + + mvr2r( in, a, n ); + + nw = ip[0]; + if ( n > ( nw << 2 ) ) + { + nw = n >> 2; + } + + nc = ip[1]; + if ( n > nc ) + { + nc = n; + } + + if ( isgn < 0 ) + { + xr = a[n - 1]; + for ( j = n - 2; j >= 2; j -= 2 ) + { + a[j + 1] = a[j] - a[j - 1]; + a[j] += a[j - 1]; + } + a[1] = a[0] - xr; + a[0] += xr; + + if ( n > 4 ) + { + rftbsub( n, a, nc, w + nw ); + bitrv2_SR( n, ip + 2, a ); + cftbsub( n, a, w ); + } + else if ( n == 4 ) + { + cftfsub( n, a, w ); + } + } + + if ( isgn >= 0 ) + { + a[0] *= 0.5f; + } + + dctsub( n, a, nc, w + nw ); + + if ( isgn >= 0 ) + { + if ( n > 4 ) + { + bitrv2_SR( n, ip + 2, a ); + cftfsub( n, a, w ); + rftfsub( n, a, nc, w + nw ); + } + else if ( n == 4 ) + { + cftfsub( n, a, w ); + } + xr = a[0] - a[1]; + a[0] += a[1]; + for ( j = 2; j < n; j += 2 ) + { + a[j - 1] = a[j] - a[j + 1]; + a[j] += a[j + 1]; + } + a[n - 1] = xr; + + for ( j = 0; j < n; j++ ) + { + a[j] /= 32.0f; + } + } +} + + +void DoRTFTn( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t n /* i : size of the FFT up to 1024 */ +) +{ + + int16_t i; + float z[2048]; + + for ( i = 0; i < n; i++ ) + { + z[2 * i] = x[i]; + z[2 * i + 1] = y[i]; + } + + switch ( n ) + { + case ( 16 ): + cdftForw( 2 * n, z, Ip_fft16, w_fft16 ); + break; + case ( 32 ): + cdftForw( 2 * n, z, Ip_fft32, w_fft32 ); + break; + case ( 64 ): + cdftForw( 2 * n, z, Ip_fft64, w_fft64 ); + break; + case ( 128 ): + cdftForw( 2 * n, z, Ip_fft128, w_fft128 ); + break; + case ( 256 ): + cdftForw( 2 * n, z, Ip_fft256, w_fft256 ); + break; + case ( 512 ): + cdftForw( 2 * n, z, Ip_fft512, w_fft512 ); + break; + default: + assert( 0 ); + } + + x[0] = z[0]; + y[0] = z[1]; + for ( i = 1; i < n; i++ ) + { + x[n - i] = z[2 * i]; + y[n - i] = z[2 * i + 1]; + } + + return; +} + + +void fft3( + const float X[], + float Y[], + const int16_t n ) +{ + float Z[PH_ECU_SPEC_SIZE]; + float *Z0, *Z1, *Z2; + float *z0, *z1, *z2; + const float *x; + const float *t_sin = sincos_t_rad3; + int16_t m, step, order; + int16_t i, j; + int16_t c1_ind, s1_ind, c2_ind, s2_ind; + int16_t c1_step, s1_step, c2_step, s2_step; + float *RY, *IY, *RZ0, *IZ0, *RZ1, *IZ1, *RZ2, *IZ2; + + /* Determine the order of the transform, the length of decimated */ + /* transforms m, and the step for the sine and cosine tables. */ + switch ( n ) + { + case 1536: + order = 9; + m = 512; + step = 1; + break; + case 384: + order = 7; + m = 128; + step = 4; + break; + default: + order = 9; + m = 512; + step = 1; + } + + /* Compose decimated sequences X[3i], X[3i+1],X[3i+2] */ + /* compute their FFT of length m. */ + Z0 = &Z[0]; + z0 = &Z0[0]; + Z1 = &Z0[m]; + z1 = &Z1[0]; /* Z1 = &Z[ m]; */ + Z2 = &Z1[m]; + z2 = &Z2[0]; /* Z2 = &Z[2m]; */ + x = &X[0]; + for ( i = 0; i < n / 3; i++ ) + { + *z0++ = *x++; /* Z0[i] = X[3i]; */ + *z1++ = *x++; /* Z1[i] = X[3i+1]; */ + *z2++ = *x++; /* Z2[i] = X[3i+2]; */ + } + + fft_rel( &Z0[0], m, order ); + fft_rel( &Z1[0], m, order ); + fft_rel( &Z2[0], m, order ); + + /* Butterflies of order 3. */ + /* pointer initialization */ + RY = &Y[0]; + IY = &Y[n]; + RZ0 = &Z0[0]; + IZ0 = &Z0[m]; + RZ1 = &Z1[0]; + IZ1 = &Z1[m]; + RZ2 = &Z2[0]; + IZ2 = &Z2[m]; + + c1_step = -step; + s1_step = step; + c2_step = -2 * step; + s2_step = 2 * step; + c1_ind = T_SIN_PI_2 + c1_step; + s1_ind = s1_step; + c2_ind = T_SIN_PI_2 + c2_step; + s2_ind = s2_step; + + /* special case: i = 0 */ + RY[0] = RZ0[0] + RZ1[0] + RZ2[0]; + + /* first 3/12 */ + for ( i = 1; i < 3 * m / 8; i++, c1_ind += c1_step, s1_ind += s1_step, c2_ind += c2_step, s2_ind += s2_step ) + { + RY[i] = RZ0[i] + RZ1[i] * t_sin[c1_ind] + IZ1[-i] * t_sin[s1_ind] + RZ2[i] * t_sin[c2_ind] + IZ2[-i] * t_sin[s2_ind]; + IY[-i] = IZ0[-i] - RZ1[i] * t_sin[s1_ind] + IZ1[-i] * t_sin[c1_ind] - RZ2[i] * t_sin[s2_ind] + IZ2[-i] * t_sin[c2_ind]; + } + + /* next 1/12 */ + for ( ; i < 4 * m / 8; i++, c1_ind += c1_step, s1_ind += s1_step, c2_ind -= c2_step, s2_ind -= s2_step ) + { + RY[i] = RZ0[i] + RZ1[i] * t_sin[c1_ind] + IZ1[-i] * t_sin[s1_ind] - RZ2[i] * t_sin[c2_ind] + IZ2[-i] * t_sin[s2_ind]; + IY[-i] = IZ0[-i] - RZ1[i] * t_sin[s1_ind] + IZ1[-i] * t_sin[c1_ind] - RZ2[i] * t_sin[s2_ind] - IZ2[-i] * t_sin[c2_ind]; + } + + /* special case: i = m/2 i.e. 1/3 */ + RY[i] = RZ0[i] + RZ1[i] * t_sin[c1_ind] - RZ2[i] * t_sin[c2_ind]; + IY[-i] = -RZ1[i] * t_sin[s1_ind] - RZ2[i] * t_sin[s2_ind]; + i++; + + c1_ind += c1_step, s1_ind += s1_step, c2_ind -= c2_step, s2_ind -= s2_step; + + /* next 2/12 */ + for ( j = i - 2; i < 6 * m / 8; i++, j--, c1_ind += c1_step, s1_ind += s1_step, c2_ind -= c2_step, s2_ind -= s2_step ) + { + RY[i] = RZ0[j] + RZ1[j] * t_sin[c1_ind] - IZ1[-j] * t_sin[s1_ind] - RZ2[j] * t_sin[c2_ind] - IZ2[-j] * t_sin[s2_ind]; + IY[-i] = -IZ0[-j] - RZ1[j] * t_sin[s1_ind] - IZ1[-j] * t_sin[c1_ind] - RZ2[j] * t_sin[s2_ind] + IZ2[-j] * t_sin[c2_ind]; + } + + /*--------------------------half--------------------------*/ + /* next 2/12 */ + for ( ; i < 8 * m / 8; i++, j--, c1_ind -= c1_step, s1_ind -= s1_step, c2_ind += c2_step, s2_ind += s2_step ) + { + RY[i] = RZ0[j] - RZ1[j] * t_sin[c1_ind] - IZ1[-j] * t_sin[s1_ind] - RZ2[j] * t_sin[c2_ind] + IZ2[-j] * t_sin[s2_ind]; + IY[-i] = -IZ0[-j] - RZ1[j] * t_sin[s1_ind] + IZ1[-j] * t_sin[c1_ind] + RZ2[j] * t_sin[s2_ind] + IZ2[-j] * t_sin[c2_ind]; + } + + /* special case: i = m, i.e 2/3 */ + RY[i] = RZ0[j] - RZ1[j] * t_sin[c1_ind] - RZ2[j] * t_sin[c2_ind]; + IY[-i++] = -RZ1[j] * t_sin[s1_ind] + RZ2[j] * t_sin[s2_ind]; + c1_ind -= c1_step, s1_ind -= s1_step, c2_ind += c2_step, s2_ind += s2_step; + + /* next 1/12 */ + for ( j = 1; i < 9 * m / 8; i++, j++, c1_ind -= c1_step, s1_ind -= s1_step, c2_ind += c2_step, s2_ind += s2_step ) + { + RY[i] = RZ0[j] - RZ1[j] * t_sin[c1_ind] + IZ1[-j] * t_sin[s1_ind] - RZ2[j] * t_sin[c2_ind] - IZ2[-j] * t_sin[s2_ind]; + IY[-i] = IZ0[-j] - RZ1[j] * t_sin[s1_ind] - IZ1[-j] * t_sin[c1_ind] + RZ2[j] * t_sin[s2_ind] - IZ2[-j] * t_sin[c2_ind]; + } + + /* last 3/12 */ + for ( ; i < 12 * m / 8; i++, j++, c1_ind -= c1_step, s1_ind -= s1_step, c2_ind -= c2_step, s2_ind -= s2_step ) + { + RY[i] = RZ0[j] - RZ1[j] * t_sin[c1_ind] + IZ1[-j] * t_sin[s1_ind] + RZ2[j] * t_sin[c2_ind] - IZ2[-j] * t_sin[s2_ind]; + IY[-i] = IZ0[-j] - RZ1[j] * t_sin[s1_ind] - IZ1[-j] * t_sin[c1_ind] + RZ2[j] * t_sin[s2_ind] + IZ2[-j] * t_sin[c2_ind]; + } + + /* special case: i = 3*m/2 */ + RY[i] = RZ0[j] - RZ1[j] * t_sin[c1_ind] + RZ2[j] * t_sin[c2_ind]; + + return; +} + +void ifft3( + const float Z[], + float X[], + const int16_t n ) +{ + float Y[PH_ECU_SPEC_SIZE]; + const float *t_sin = sincos_t_rad3; + int16_t m, step, step2, order; + int16_t i; + int16_t c0_ind, s0_ind, c1_ind, s1_ind, c2_ind, s2_ind; + float scale; + const float *RZ0, *IZ0, *RZ1, *IZ1, *RZ2, *IZ2; + float *RY0, *IY0, *RY1, *IY1, *RY2, *IY2, *y0, *y1, *y2; + + /* Determine the order of the transform, the length of decimated */ + /* transforms m, and the step for the sine and cosine tables. */ + switch ( n ) + { + case 1536: + order = 9; + m = 512; + step = 1; + break; + case 384: + order = 7; + m = 128; + step = 4; + break; + default: + order = 9; + m = 512; + step = 1; + } + + /* pointer initialization */ + RY0 = &Y[0]; + IY0 = &RY0[m]; + RY1 = &RY0[m]; + IY1 = &RY1[m]; + RY2 = &RY1[m]; + IY2 = &RY2[m]; + + RZ0 = &Z[0]; + RZ1 = RZ0 + m; + RZ2 = RZ0 + n / 2 - m / 2; + IZ0 = &Z[n]; + IZ1 = IZ0 - m; + IZ2 = IZ0 - n / 2 + m / 2; + + /* Inverse butterflies of order 3. */ + + /* Construction of Y0 */ + RY0[0] = RZ0[0] + RZ1[0] + RZ2[0]; + for ( i = 1; i < m / 2; i++ ) + { + RY0[i] = RZ0[i] + RZ1[i] + RZ2[-i]; + IY0[-i] = IZ0[-i] + IZ1[-i] - IZ2[i]; + } + + /* m/2 */ + RY0[i] = RZ0[i] + RZ1[i] + RZ2[-i]; + + /* Construction of Y1 */ + c0_ind = T_SIN_PI_2; + s0_ind = 0; + c1_ind = T_SIN_PI_2 * 1 / 3; + s1_ind = T_SIN_PI_2 * 2 / 3; + c2_ind = T_SIN_PI_2 * 1 / 3; + s2_ind = T_SIN_PI_2 * 2 / 3; + + RY1[0] = RZ0[0] * t_sin[c0_ind] - RZ1[0] * t_sin[c1_ind] - RZ2[0] * t_sin[c2_ind] - IZ1[0] * t_sin[s1_ind] - IZ2[0] * t_sin[s2_ind]; + + c0_ind -= step, s0_ind += step, c1_ind += step, s1_ind -= step, c2_ind -= step, s2_ind += step; + for ( i = 1; i < m / 4; i++, c0_ind -= step, s0_ind += step, c1_ind += step, s1_ind -= step, c2_ind -= step, s2_ind += step ) + { + RY1[i] = RZ0[i] * t_sin[c0_ind] - RZ1[i] * t_sin[c1_ind] - RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] - IZ1[-i] * t_sin[s1_ind] - IZ2[i] * t_sin[s2_ind]; + IY1[-i] = IZ0[-i] * t_sin[c0_ind] - IZ1[-i] * t_sin[c1_ind] + IZ2[i] * t_sin[c2_ind] + RZ0[i] * t_sin[s0_ind] + RZ1[i] * t_sin[s1_ind] - RZ2[-i] * t_sin[s2_ind]; + } + + for ( ; i < m / 2; i++, c0_ind -= step, s0_ind += step, c1_ind += step, s1_ind -= step, c2_ind += step, s2_ind -= step ) + { + RY1[i] = RZ0[i] * t_sin[c0_ind] - RZ1[i] * t_sin[c1_ind] + RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] - IZ1[-i] * t_sin[s1_ind] - IZ2[i] * t_sin[s2_ind]; + IY1[-i] = IZ0[-i] * t_sin[c0_ind] - IZ1[-i] * t_sin[c1_ind] - IZ2[i] * t_sin[c2_ind] + RZ0[i] * t_sin[s0_ind] + RZ1[i] * t_sin[s1_ind] - RZ2[-i] * t_sin[s2_ind]; + } + + /* m/2 */ + RY1[i] = RZ0[i] * t_sin[c0_ind] - RZ1[i] * t_sin[c1_ind] + RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] - IZ1[-i] * t_sin[s1_ind] - IZ2[i] * t_sin[s2_ind]; + + /* Construction of Y2 */ + c0_ind = T_SIN_PI_2; + s0_ind = 0; + c1_ind = T_SIN_PI_2 * 1 / 3; + s1_ind = T_SIN_PI_2 * 2 / 3; + c2_ind = T_SIN_PI_2 * 1 / 3; + s2_ind = T_SIN_PI_2 * 2 / 3; + step2 = 2 * step; + RY2[0] = RZ0[0] * t_sin[c0_ind] - RZ1[0] * t_sin[c1_ind] - RZ2[0] * t_sin[c2_ind] + IZ1[0] * t_sin[s1_ind] + IZ2[0] * t_sin[s2_ind]; + + c0_ind -= step2, s0_ind += step2, c1_ind -= step2, s1_ind += step2, c2_ind += step2, s2_ind -= step2; + for ( i = 1; i < m / 8; i++, c0_ind -= step2, s0_ind += step2, c1_ind -= step2, s1_ind += step2, c2_ind += step2, s2_ind -= step2 ) + { + RY2[i] = RZ0[i] * t_sin[c0_ind] - RZ1[i] * t_sin[c1_ind] - RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] + IZ1[-i] * t_sin[s1_ind] + IZ2[i] * t_sin[s2_ind]; + IY2[-i] = IZ0[-i] * t_sin[c0_ind] - IZ1[-i] * t_sin[c1_ind] + IZ2[i] * t_sin[c2_ind] + RZ0[i] * t_sin[s0_ind] - RZ1[i] * t_sin[s1_ind] + RZ2[-i] * t_sin[s2_ind]; + } + + for ( ; i < m / 4; i++, c0_ind -= step2, s0_ind += step2, c1_ind += step2, s1_ind -= step2, c2_ind += step2, s2_ind -= step2 ) + { + RY2[i] = RZ0[i] * t_sin[c0_ind] + RZ1[i] * t_sin[c1_ind] - RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] + IZ1[-i] * t_sin[s1_ind] + IZ2[i] * t_sin[s2_ind]; + IY2[-i] = IZ0[-i] * t_sin[c0_ind] + IZ1[-i] * t_sin[c1_ind] + IZ2[i] * t_sin[c2_ind] + RZ0[i] * t_sin[s0_ind] - RZ1[i] * t_sin[s1_ind] + RZ2[-i] * t_sin[s2_ind]; + } + + for ( ; i < 3 * m / 8; i++, c0_ind -= step2, s0_ind += step2, c1_ind += step2, s1_ind -= step2, c2_ind -= step2, s2_ind += step2 ) + { + RY2[i] = RZ0[i] * t_sin[c0_ind] + RZ1[i] * t_sin[c1_ind] - RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] + IZ1[-i] * t_sin[s1_ind] - IZ2[i] * t_sin[s2_ind]; + IY2[-i] = IZ0[-i] * t_sin[c0_ind] + IZ1[-i] * t_sin[c1_ind] + IZ2[i] * t_sin[c2_ind] + RZ0[i] * t_sin[s0_ind] - RZ1[i] * t_sin[s1_ind] - RZ2[-i] * t_sin[s2_ind]; + } + + for ( ; i < m / 2; i++, c0_ind += step2, s0_ind -= step2, c1_ind += step2, s1_ind -= step2, c2_ind -= step2, s2_ind += step2 ) + { + RY2[i] = -RZ0[i] * t_sin[c0_ind] + RZ1[i] * t_sin[c1_ind] - RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] + IZ1[-i] * t_sin[s1_ind] - IZ2[i] * t_sin[s2_ind]; + IY2[-i] = -IZ0[-i] * t_sin[c0_ind] + IZ1[-i] * t_sin[c1_ind] + IZ2[i] * t_sin[c2_ind] + RZ0[i] * t_sin[s0_ind] - RZ1[i] * t_sin[s1_ind] - RZ2[-i] * t_sin[s2_ind]; + } + + /* m/2 */ + RY2[i] = -RZ0[i] * t_sin[c0_ind] + RZ1[i] * t_sin[c1_ind] - RZ2[-i] * t_sin[c2_ind] - IZ0[-i] * t_sin[s0_ind] + IZ1[-i] * t_sin[s1_ind] - IZ2[i] * t_sin[s2_ind]; + + /* Compute the inverse FFT for all 3 blocks. */ + ifft_rel( RY0, m, order ); + ifft_rel( RY1, m, order ); + ifft_rel( RY2, m, order ); + + y0 = RY0; + y1 = RY1; + y2 = RY2; + + /* Interlacing and scaling, scale = 1/3 */ + scale = 1.0f / 3; + for ( i = 0; i < n; ) + { + X[i++] = ( *y0++ ) * scale; + X[i++] = ( *y1++ ) * scale; + X[i++] = ( *y2++ ) * scale; + } + + return; +} + + +static void rfft_post( + const float *sine_table, + float *buf, + const int16_t len ) +{ + float tmp1, tmp2, tmp3, tmp4, s, c; + int16_t i = 0; + + tmp1 = buf[0] + buf[1]; + buf[1] = buf[0] - buf[1]; + buf[0] = tmp1; + + for ( i = 1; i <= ( len + 2 ) / 4; i++ ) + { + s = sine_table[i]; /* sin(pi*i/(len/2)) */ + c = sine_table[i + len / 4]; /* cos(pi*i/(len/2)) */ + + tmp1 = buf[2 * i] - buf[len - 2 * i]; + tmp2 = buf[2 * i + 1] + buf[len - 2 * i + 1]; + tmp3 = s * tmp1 - c * tmp2; /* real part of j*W(k,N)*[T(k) - T'(N-k)] */ + tmp4 = c * tmp1 + s * tmp2; /* imag part of j*W(k,N)*[T(k) - T'(N-k)] */ + tmp1 = buf[2 * i] + buf[len - 2 * i]; + tmp2 = buf[2 * i + 1] - buf[len - 2 * i + 1]; + + buf[2 * i] = 0.5f * ( tmp1 - tmp3 ); + buf[2 * i + 1] = 0.5f * ( tmp2 - tmp4 ); + buf[len - 2 * i] = 0.5f * ( tmp1 + tmp3 ); + buf[len - 2 * i + 1] = -0.5f * ( tmp2 + tmp4 ); + } +} + +static void rfft_pre( + const float *sine_table, + float *buf, + const int16_t len ) +{ + const float scale = 1.0f / len; + float tmp1, tmp2, tmp3, tmp4, s, c; + int16_t i = 0; + + tmp1 = buf[0] + buf[1]; + buf[1] = scale * ( buf[0] - buf[1] ); + buf[0] = scale * tmp1; + + for ( i = 1; i <= ( len + 2 ) / 4; i++ ) + { + s = sine_table[i]; /* sin(pi*i/(len/2)) */ + c = sine_table[i + len / 4]; /* cos(pi*i/(len/2)) */ + + tmp1 = buf[2 * i] - buf[len - 2 * i]; + tmp2 = buf[2 * i + 1] + buf[len - 2 * i + 1]; + tmp3 = s * tmp1 + c * tmp2; /* real part of j*W(k,N)*[T(k) - T'(N-k)] */ + tmp4 = -c * tmp1 + s * tmp2; /* imag part of j*W(k,N)*[T(k) - T'(N-k)] */ + tmp1 = buf[2 * i] + buf[len - 2 * i]; + tmp2 = buf[2 * i + 1] - buf[len - 2 * i + 1]; + + buf[2 * i] = scale * ( tmp1 + tmp3 ); + buf[2 * i + 1] = -scale * ( tmp2 + tmp4 ); + buf[len - 2 * i] = scale * ( tmp1 - tmp3 ); + buf[len - 2 * i + 1] = scale * ( tmp2 - tmp4 ); + } + + return; +} + +int16_t RFFTN( + float *data, + const float *sine_table, + const int16_t len, + const int16_t sign ) +{ + assert( len <= 640 && len > 0 ); + + if ( len == 640 ) + { + float x[320], y[320]; + int16_t i; + + if ( sign != -1 ) + { + rfft_pre( sine_table, data, len ); + } + + for ( i = 0; i < 320; i++ ) + { + x[i] = data[2 * i]; + y[i] = data[2 * i + 1]; + } + DoRTFT320( x, y ); + for ( i = 0; i < 320; i++ ) + { + data[2 * i] = x[i]; + data[2 * i + 1] = y[i]; + } + + if ( sign == -1 ) + { + rfft_post( sine_table, data, len ); + } + } + else + { + if ( len == 512 ) + { + int16_t i; + const int16_t log2 = 9; + float reordered_data[512]; + + if ( sign == -1 ) + { + fft_rel( data, len, log2 ); + reordered_data[0] = data[0]; + reordered_data[1] = data[len / 2]; + for ( i = 1; i < len / 2; i++ ) + { + reordered_data[2 * i] = data[i]; + reordered_data[2 * i + 1] = data[len - i]; + } + } + else + { + reordered_data[0] = data[0]; + reordered_data[len / 2] = data[1]; + for ( i = 1; i < len / 2; i++ ) + { + reordered_data[i] = data[2 * i]; + reordered_data[len - i] = data[2 * i + 1]; + } + ifft_rel( reordered_data, len, log2 ); + } + mvr2r( reordered_data, data, len ); + } + else + { + assert( !"Not supported FFT length!" ); + } + } + + return 0; +} + +static void butterfly( + const float a, + const float b, + float *aPlusb, + float *aMinusb ) +{ + *aPlusb = a + b; + *aMinusb = a - b; + + return; +} + +static void fft2( + float *pInOut ) +{ + /* FFT MATRIX: + 1.0000 1.0000 + 1.0000 -1.0000 + */ + float re1, im1; + float re2, im2; + + re1 = pInOut[0]; + im1 = pInOut[1]; + re2 = pInOut[2]; + im2 = pInOut[3]; + pInOut[0] = re1 + re2; + pInOut[1] = im1 + im2; + + pInOut[2] = re1 - re2; + pInOut[3] = im1 - im2; + + return; +} + +static const float C31 = 0.5f; /* cos(PI/3); sin(2*PI/3) */ +static const float C32 = 0.866025403784439f; /* cos(PI/3); sin(2*PI/3) */ + +static void fft3_2( + float *pInOut ) +{ + float re1, im1; + float re2, im2; + float re3, im3; + + float tmp1, tmp2; + float tmp3, tmp4; + + re1 = pInOut[0]; + im1 = pInOut[1]; + re2 = pInOut[2]; + im2 = pInOut[3]; + re3 = pInOut[4]; + im3 = pInOut[5]; + + /* FFT MATRIX: + 1.0000 1.0000 1.0000 + C31 C32 + 1.0000 -0.5000 - 0.8660i -0.5000 + 0.8660i + 1.0000 -0.5000 + 0.8660i -0.5000 - 0.8660i + */ + tmp1 = re2 + re3; + tmp3 = im2 + im3; + tmp2 = re2 - re3; + tmp4 = im2 - im3; + pInOut[0] = re1 + tmp1; + pInOut[1] = im1 + tmp3; + pInOut[2] = re1 - C31 * tmp1 + C32 * tmp4; + pInOut[4] = re1 - C31 * tmp1 - C32 * tmp4; + + pInOut[3] = im1 - C32 * tmp2 - C31 * tmp3; + pInOut[5] = im1 + C32 * tmp2 - C31 * tmp3; +} + + +static void fft4( + float *pInOut ) +{ + float re1, im1; + float re2, im2; + float re3, im3; + float re4, im4; + + float tmp1, tmp2; + float tmp3, tmp4; + float tmp5, tmp6; + float tmp7, tmp8; + + re1 = pInOut[0]; + im1 = pInOut[1]; + re2 = pInOut[2]; + im2 = pInOut[3]; + re3 = pInOut[4]; + im3 = pInOut[5]; + re4 = pInOut[6]; + im4 = pInOut[7]; + + /* + 1.0000 1.0000 1.0000 1.0000 + 1.0000 -1.0000i -1.0000 1.0000i + 1.0000 -1.0000 1.0000 -1.0000 + 1.0000 1.0000i -1.0000 -1.0000i + */ + tmp1 = re1 + re3; + tmp3 = re2 + re4; + tmp5 = im1 + im3; + tmp7 = im2 + im4; + pInOut[0] = tmp1 + tmp3; + pInOut[4] = tmp1 - tmp3; + + pInOut[1] = tmp5 + tmp7; + pInOut[5] = tmp5 - tmp7; + tmp2 = re1 - re3; + tmp4 = re2 - re4; + tmp6 = im1 - im3; + tmp8 = im2 - im4; + pInOut[2] = tmp2 + tmp8; + pInOut[6] = tmp2 - tmp8; + + pInOut[3] = -tmp4 + tmp6; + pInOut[7] = tmp4 + tmp6; + + return; +} + +static const float C51 = 0.309016994374947f; /* cos(2*PI/5); */ +static const float C52 = 0.951056516295154f; /* sin(2*PI/5); */ +static const float C53 = 0.809016994374947f; /* cos( PI/5); */ +static const float C54 = 0.587785252292473f; /* sin( PI/5); */ + +static void fft5( + float *pInOut ) +{ + float re1, im1; + float re2, im2; + float re3, im3; + float re4, im4; + float re5, im5; + + float tmp1, tmp2; + float tmp3, tmp4; + float tmp5, tmp6; + float tmp7, tmp8; + + + re1 = pInOut[0]; + im1 = pInOut[1]; + re2 = pInOut[2]; + im2 = pInOut[3]; + re3 = pInOut[4]; + im3 = pInOut[5]; + re4 = pInOut[6]; + im4 = pInOut[7]; + re5 = pInOut[8]; + im5 = pInOut[9]; + + /* + 1.0000 1.0000 1.0000 1.0000 1.0000 + C51 C52 C53 C54 + 1.0000 0.3090 - 0.9511i -0.8090 - 0.5878i -0.8090 + 0.5878i 0.3090 + 0.9511i + 1.0000 -0.8090 - 0.5878i 0.3090 + 0.9511i 0.3090 - 0.9511i -0.8090 + 0.5878i + 1.0000 -0.8090 + 0.5878i 0.3090 - 0.9511i 0.3090 + 0.9511i -0.8090 - 0.5878i + 1.0000 0.3090 + 0.9511i -0.8090 + 0.5878i -0.8090 - 0.5878i 0.3090 - 0.9511i + */ + tmp1 = re2 + re5; + tmp2 = re2 - re5; + tmp3 = im2 + im5; + tmp4 = im2 - im5; + tmp5 = re3 + re4; + tmp6 = re3 - re4; + tmp7 = im3 + im4; + tmp8 = im3 - im4; + + + pInOut[0] = re1 + tmp1 + tmp5; + pInOut[1] = im1 + tmp3 + tmp7; + + pInOut[2] = re1 + C51 * tmp1 - C53 * tmp5 + C52 * tmp4 + C54 * tmp8; + pInOut[8] = re1 + C51 * tmp1 - C53 * tmp5 - C52 * tmp4 - C54 * tmp8; + pInOut[3] = im1 - C52 * tmp2 - C54 * tmp6 + C51 * tmp3 - C53 * tmp7; + pInOut[9] = im1 + C52 * tmp2 + C54 * tmp6 + C51 * tmp3 - C53 * tmp7; + pInOut[4] = re1 - C53 * tmp1 + C51 * tmp5 + C54 * tmp4 - C52 * tmp8; + pInOut[6] = re1 - C53 * tmp1 + C51 * tmp5 - C54 * tmp4 + C52 * tmp8; + pInOut[5] = im1 - C54 * tmp2 + C52 * tmp6 - C53 * tmp3 + C51 * tmp7; + pInOut[7] = im1 + C54 * tmp2 - C52 * tmp6 - C53 * tmp3 + C51 * tmp7; + + return; +} + +static const float C81 = 0.707106781186548f; /* cos(PI/4); */ + +static void fft8_2( + float *pInOut ) +{ + float re0, im0, re4, im4; + + float re1_7p, re1_7m; + float im1_7p, im1_7m; + float re2_6p, re2_6m; + float im2_6p, im2_6m; + float re3_5p, re3_5m; + float im3_5p, im3_5m; + + re0 = pInOut[0]; + im0 = pInOut[1]; + re4 = pInOut[8]; + im4 = pInOut[9]; + butterfly( pInOut[1 * 2], pInOut[7 * 2], &re1_7p, &re1_7m ); + butterfly( pInOut[1 * 2 + 1], pInOut[7 * 2 + 1], &im1_7p, &im1_7m ); + butterfly( pInOut[2 * 2], pInOut[6 * 2], &re2_6p, &re2_6m ); + butterfly( pInOut[2 * 2 + 1], pInOut[6 * 2 + 1], &im2_6p, &im2_6m ); + butterfly( pInOut[3 * 2], pInOut[5 * 2], &re3_5p, &re3_5m ); + butterfly( pInOut[3 * 2 + 1], pInOut[5 * 2 + 1], &im3_5p, &im3_5m ); + + /* + 0: 1 + 0i 1 + 0i 1 + 0i 1 + 0i 1 + 0i 1 + 0i 1 + 0i 1 + 0i + 1: 1 + 0i C81 - C81i 0 - 1i -C81 - C81i -1 - 0i -C81 + C81i - 0 + 1i C81 + C81i + 2: 1 + 0i 0 - 1i -1 - 0i - 0 + 1i 1 + 0i 0 - 1i - 1 - 0i - 0 + 1i + 3: 1 + 0i -C81 - C81i -0 + 1i C81 - C81i -1 - 0i C81 + C81i 0 - 1i -C81 + C81i + 4: 1 + 0i - 1 - 0i 1 + 0i - 1 - 0i 1 + 0i - 1 - 0i 1 + 0i - 1 - 0i + 5: 1 + 0i -C81 + C81i 0 - 1i C81 + C81i -1 - 0i C81 - C81i - 0 + 1i -C81 - C81i + 6: 1 + 0i - 0 + 1i -1 - 0i 0 - 1i 1 + 0i - 0 + 1i - 1 - 0i - 0 - 1i + 7: 1 + 0i C81 + C81i -0 + 1i -C81 + C81i -1 - 0i -C81 - C81i - 0 - 1i C81 - C81i + */ + pInOut[0] = re0 + re4 + re1_7p + re2_6p + re3_5p; + pInOut[1] = im0 + im4 + im1_7p + im2_6p + im3_5p; + + pInOut[2] = re0 + C81 * ( re1_7p - re3_5p ) - re4 + C81 * ( im1_7m + im3_5m ) + im2_6m; + pInOut[3] = im0 + C81 * ( im1_7p - im3_5p ) - im4 - C81 * ( re1_7m + re3_5m ) - re2_6m; + + pInOut[4] = re0 - re2_6p + re4 + im1_7m - im3_5m; + pInOut[5] = im0 - im2_6p + im4 - re1_7m + re3_5m; + + pInOut[6] = re0 + C81 * ( -re1_7p + re3_5p ) - re4 + C81 * ( im1_7m + im3_5m ) - im2_6m; + pInOut[7] = im0 + C81 * ( -im1_7p + im3_5p ) - im4 - C81 * ( re1_7m + re3_5m ) + re2_6m; + + pInOut[8] = re0 - re1_7p + re2_6p - re3_5p + re4; + pInOut[9] = im0 - im1_7p + im2_6p - im3_5p + im4; + + pInOut[10] = re0 + C81 * ( -re1_7p + re3_5p ) - re4 - C81 * ( im1_7m + im3_5m ) + im2_6m; + pInOut[11] = im0 + C81 * ( -im1_7p + im3_5p ) - im4 + C81 * ( re1_7m + re3_5m ) - re2_6m; + + pInOut[12] = re0 - re2_6p + re4 - im1_7m + im3_5m; + pInOut[13] = im0 - im2_6p + im4 + re1_7m - re3_5m; + + pInOut[14] = re0 + C81 * ( re1_7p - re3_5p ) - re4 - C81 * ( im1_7m + im3_5m ) - im2_6m; + pInOut[15] = im0 + C81 * ( im1_7p - im3_5p ) - im4 + C81 * ( re1_7m + re3_5m ) + re2_6m; + + return; +} + +static void nextFFT( + float *x, + const int16_t length ) +{ + switch ( length ) + { + case 2: + fft2( x ); + break; + case 3: + fft3_2( x ); + break; + case 4: + fft4( x ); + break; + case 5: + fft5( x ); + break; + case 8: + fft8_2( x ); + break; + default: + assert( !"length not supported" ); + break; + } + + return; +} + +static const int16_t CTFFTfactors[] = { 9, 8, 7, 5, 4, 3, 2, 0 }; + +static __inline int16_t findFactor( + const int16_t length ) +{ + int16_t i = 0; + int16_t factor = 0; + + while ( CTFFTfactors[i] != 0 ) + { + if ( 0 == ( length % CTFFTfactors[i] ) ) + { + factor = CTFFTfactors[i]; + break; + } + i++; + } + return factor; +} + +static __inline void twiddle( + float *x, + const int16_t length, + const int16_t n1, + const int16_t n2 ) +{ + int16_t i, ii; + double pi = 4. * atan( 1. ); + float sinValOrg, cosValOrg; + float sinVal = 0.f, cosVal = 1.f; + float twReal = 0.f, twImag = 1.f; + + cosValOrg = (float) cos( -2 * pi * 1. / (double) length ); + sinValOrg = (float) sin( -2 * pi * 1. / (double) length ); + for ( i = 1; i < n1; i++ ) + { + float tmp; + twReal = 1.f; + twImag = 0.f; + tmp = cosVal * cosValOrg - sinVal * sinValOrg; + sinVal = sinVal * cosValOrg + cosVal * sinValOrg; + cosVal = tmp; + for ( ii = 1; ii < n2; ii++ ) + { + float xRe, xIm, tmpReal; + /* cos(x+y) = cos(x)*cos(y) - sin(x)*sin(y); */ + /* sin(x+y) = sin(x)*cos(y) + sin(y)*cos(x); */ + tmpReal = twReal * cosVal - twImag * sinVal; + twImag = twImag * cosVal + sinVal * twReal; + twReal = tmpReal; + xRe = x[2 * ( i * n2 + ii )]; + xIm = x[2 * ( i * n2 + ii ) + 1]; + x[2 * ( i * n2 + ii )] = twReal * xRe - twImag * xIm; + x[2 * ( i * n2 + ii ) + 1] = twImag * xRe + twReal * xIm; + } + tmp = cosVal; + } + + return; +} + +static void cooleyTukeyFFT( + float *x, + const int16_t length, + float *scratch ) +{ + int16_t factor; + int16_t i, ii; + int16_t n1, n2; + int16_t cnt = 0; + float *src, *dest; + + switch ( length ) + { + case 1: + break; + case 2: + fft2( x ); + break; + case 3: + fft3_2( x ); + break; + case 4: + fft4( x ); + break; + case 5: + fft5( x ); + break; + case 8: + fft8_2( x ); + break; + default: + { + factor = findFactor( length ); + if ( factor > 0 && ( length / factor > 1 ) ) + { + n1 = factor; + n2 = length / factor; + + /* DATA Resorting for stage1 */ + dest = scratch; + for ( i = 0; i < 2 * n1; i += 2 ) + { + src = x + i; + for ( ii = 0; ii < n2; ii++ ) + { + /* *dest++ = x[2*(i+ii*n1)]; */ + /* *dest++ = x[2*(i+ii*n1)+1]; */ + *dest++ = *src; + *dest++ = *( src + 1 ); + src += 2 * n1; + } + } + src = scratch; + dest = x; + for ( i = 0; i < length; i++ ) + { + *dest++ = *src++; + *dest++ = *src++; + } + /* perform n1 ffts of length n2 */ + for ( i = 0; i < n1; i++ ) + { + cooleyTukeyFFT( x + 2 * i * n2, n2, scratch + 2 * i * n2 ); + } + /*data twiddeling */ + twiddle( x, length, n1, n2 ); + /* DATA Resorting for stage2 */ + cnt = 0; + for ( i = 0; i < n2; i++ ) + { + for ( ii = 0; ii < n1; ii++ ) + { + scratch[2 * cnt] = x[2 * ( i + ii * n2 )]; + scratch[2 * cnt + 1] = x[2 * ( i + ii * n2 ) + 1]; + cnt++; + } + } + /* perform n2 ffts of length n1 */ + for ( i = 0; i < n2; i++ ) + { + nextFFT( scratch + 2 * i * n1, n1 ); + } + cnt = 0; + for ( i = 0; i < n1; i++ ) + { + for ( ii = 0; ii < n2; ii++ ) + { + x[2 * cnt] = scratch[2 * ( i + ii * n1 )]; + x[2 * cnt + 1] = scratch[2 * ( i + ii * n1 ) + 1]; + cnt++; + } + } + } + else + { + assert( !"length not supported" ); + } + } + } + + return; +} + +static void pfaDFT( + float *x, + const int16_t length, + float *scratch1, + const int16_t numFactors, + const int16_t *factor ) +{ + int16_t i, ii; + int16_t cnt; + + if ( numFactors > 1 ) + { + float *tmp = scratch1; + int16_t n1_inv = 1, n2_inv = 1; + int16_t n2 = factor[0 /*idx*/]; + int16_t n1 = length / n2; + int16_t idx, incr; + + while ( ( ( n1_inv * n1 ) % n2 ) != 1 ) + { + n1_inv++; + } + while ( ( ( n2_inv * n2 ) % n1 ) != 1 ) + { + n2_inv++; + } + idx = 0; + incr = n1 * n1_inv; + cnt = 0; + for ( i = 0; i < n1; i++ ) + { + for ( ii = 0; ii < n2 - 1; ii++ ) + { + tmp[cnt++] = x[2 * idx]; + tmp[cnt++] = x[2 * idx + 1]; + + idx += incr; + if ( idx > length ) + { + idx -= length; + } + } + tmp[cnt++] = x[2 * idx]; + tmp[cnt++] = x[2 * idx + 1]; + idx++; + } + for ( cnt = 0; cnt < length; cnt += n2 ) + { + cooleyTukeyFFT( tmp + 2 * cnt, n2, x + 2 * cnt ); + } + for ( cnt = 0; cnt < n1; cnt++ ) + { + for ( i = 0; i < n2; i++ ) + { + x[2 * ( cnt + i * n1 )] = tmp[2 * ( cnt * n2 + i )]; + x[2 * ( cnt + i * n1 ) + 1] = tmp[2 * ( cnt * n2 + i ) + 1]; + } + } + for ( cnt = 0; cnt < length; cnt += n1 ) + { + pfaDFT( x + 2 * cnt, n1, tmp, numFactors - 1, &factor[1] ); + } + idx = 0; + cnt = 0; + for ( i = 0; i < n2; i++ ) + { + idx = i * n1; + for ( ii = 0; ii < n1; ii++ ) + { + tmp[2 * idx] = x[cnt++]; + tmp[2 * idx + 1] = x[cnt++]; + idx += n2; + if ( idx > length ) + { + idx -= length; + } + } + } + for ( cnt = 0; cnt < length; cnt++ ) + { + x[2 * cnt] = tmp[2 * cnt]; + x[2 * cnt + 1] = tmp[2 * cnt + 1]; + } + } + else + { + cooleyTukeyFFT( x, length, scratch1 ); + } + + return; +} + +static void fftf_interleave( + float *re, + float *im, + float *out, + const int16_t len ) +{ + int16_t i = 0; + + for ( i = 0; i < len; i++ ) + { + *out++ = *re++; + *out++ = *im++; + } + + return; +} + +static void fftf_deinterleave( + float *in, + float *re, + float *im, + const int16_t len ) +{ + int16_t i = 0; + + for ( i = 0; i < len; i++ ) + { + *re++ = *in++; + *im++ = *in++; + } + + return; +} + +static void DoRTFT600( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + float scratch[1200], cmplx[1200]; + int16_t factors[3] = { 25, 8, 3 }; + + fftf_interleave( x, y, cmplx, 600 ); + pfaDFT( cmplx, 600, scratch, 3, factors ); + fftf_deinterleave( cmplx, x, y, 600 ); + + return; +} + +static void DoRTFT400( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + float scratch[800], cmplx[800]; + int16_t factors[2] = { 25, 16 }; + + fftf_interleave( x, y, cmplx, 400 ); + pfaDFT( cmplx, 400, scratch, 2, factors ); + fftf_deinterleave( cmplx, x, y, 400 ); + + + return; +} + +static void DoRTFT240( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + float scratch[480], cmplx[480]; + int16_t factors[3] = { 16, 5, 3 }; + + fftf_interleave( x, y, cmplx, 240 ); + pfaDFT( cmplx, 240, scratch, 3, factors ); + fftf_deinterleave( cmplx, x, y, 240 ); + + return; +} + +static void DoRTFT200( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + float scratch[400], cmplx[400]; + int16_t factors[2] = { 25, 8 }; + + fftf_interleave( x, y, cmplx, 200 ); + pfaDFT( cmplx, 200, scratch, 2, factors ); + fftf_deinterleave( cmplx, x, y, 200 ); + + return; +} + +static void DoRTFT100( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +) +{ + float scratch[200], cmplx[200]; + int16_t factors[2] = { 25, 4 }; + + fftf_interleave( x, y, cmplx, 100 ); + pfaDFT( cmplx, 100, scratch, 2, factors ); + fftf_deinterleave( cmplx, x, y, 100 ); + + return; +} + + +void DoFFT( + float *re2, + float *im2, + const int16_t length ) +{ + switch ( length ) + { + case 600: + DoRTFT600( re2, im2 ); + break; + case 480: + DoRTFT480( re2, im2 ); + break; + case 400: + DoRTFT400( re2, im2 ); + break; + case 320: + DoRTFT320( re2, im2 ); + break; + case 256: + DoRTFTn( re2, im2, 256 ); + break; + case 240: + DoRTFT240( re2, im2 ); + break; + case 200: + DoRTFT200( re2, im2 ); + break; + case 160: + DoRTFT160( re2, im2 ); + break; + case 128: + DoRTFT128( re2, im2 ); + break; + case 120: + DoRTFT120( re2, im2 ); + break; + case 100: + DoRTFT100( re2, im2 ); + break; + case 80: + DoRTFT80( re2, im2 ); + break; + case 64: + DoRTFTn( re2, im2, 64 ); + break; + case 40: + DoRTFT40( re2, im2 ); + break; + case 20: + DoRTFT20( re2, im2 ); + break; + default: + assert( !"fft is not supported!" ); + } + + return; +} + +/*-----------------------------------------------------------------* + * Low-complexity implementation of FFT + *-----------------------------------------------------------------*/ + +static void fft_len5( + float *re, + float *im, + const int16_t s ) +{ + float x0, x1, x2, x3, x4; + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float t; + + x0 = re[s * 0]; + x1 = re[s * 1]; + x2 = re[s * 2]; + x3 = re[s * 3]; + x4 = re[s * 4]; + + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + re[0] = ( x0 + r1 ); + + r1 = ( re[0] + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( r4 + r2 ) * FFT_C51 ); + + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + x0 = im[s * 0]; + x1 = im[s * 1]; + x2 = im[s * 2]; + x3 = im[s * 3]; + x4 = im[s * 4]; + + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + im[0] = ( x0 + s1 ); + + s1 = ( im[0] + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + re[s * 1] = ( r1 + s2 ); + re[s * 4] = ( r1 - s2 ); + re[s * 2] = ( r3 - s4 ); + re[s * 3] = ( r3 + s4 ); + + im[s * 1] = ( s1 - r2 ); + im[s * 4] = ( s1 + r2 ); + im[s * 2] = ( s3 + r4 ); + im[s * 3] = ( s3 - r4 ); + + return; +} + +static void fft_len8( + float *re, + float *im, + const int16_t s ) +{ + float x00, x01, x02, x03, x04, x05, x06, x07; + float x08, x09, x10, x11, x12, x13, x14, x15; + float t00, t01, t02, t03, t04, t05, t06, t07; + float t08, t09, t10, t11, t12, t13, t14, t15; + float s00, s01, s02, s03, s04, s05, s06, s07; + float s08, s09, s10, s11, s12, s13, s14, s15; + + x00 = re[s * 0]; + x01 = im[s * 0]; + x02 = re[s * 1]; + x03 = im[s * 1]; + x04 = re[s * 2]; + x05 = im[s * 2]; + x06 = re[s * 3]; + x07 = im[s * 3]; + x08 = re[s * 4]; + x09 = im[s * 4]; + x10 = re[s * 5]; + x11 = im[s * 5]; + x12 = re[s * 6]; + x13 = im[s * 6]; + x14 = re[s * 7]; + x15 = im[s * 7]; + + t00 = ( x00 + x08 ); + t02 = ( x00 - x08 ); + t01 = ( x01 + x09 ); + t03 = ( x01 - x09 ); + t04 = ( x02 + x10 ); + t06 = ( x02 - x10 ); + t05 = ( x03 + x11 ); + t07 = ( x03 - x11 ); + t08 = ( x04 + x12 ); + t10 = ( x04 - x12 ); + t09 = ( x05 + x13 ); + t11 = ( x05 - x13 ); + t12 = ( x06 + x14 ); + t14 = ( x06 - x14 ); + t13 = ( x07 + x15 ); + t15 = ( x07 - x15 ); + + s00 = ( t00 + t08 ); + s04 = ( t00 - t08 ); + s01 = ( t01 + t09 ); + s05 = ( t01 - t09 ); + s08 = ( t02 - t11 ); + s10 = ( t02 + t11 ); + s09 = ( t03 + t10 ); + s11 = ( t03 - t10 ); + s02 = ( t04 + t12 ); + s07 = ( t04 - t12 ); + s03 = ( t05 + t13 ); + s06 = ( t13 - t05 ); + + t01 = ( t06 + t14 ); + t02 = ( t06 - t14 ); + t00 = ( t07 + t15 ); + t03 = ( t07 - t15 ); + + s12 = ( ( t00 + t02 ) * FFT_C81 ); + s14 = ( ( t00 - t02 ) * FFT_C81 ); + s13 = ( ( t03 - t01 ) * FFT_C81 ); + s15 = ( ( t01 + t03 ) * FFT_C82 ); + + re[s * 0] = ( s00 + s02 ); + re[s * 4] = ( s00 - s02 ); + im[s * 0] = ( s01 + s03 ); + im[s * 4] = ( s01 - s03 ); + re[s * 2] = ( s04 - s06 ); + re[s * 6] = ( s04 + s06 ); + im[s * 2] = ( s05 - s07 ); + im[s * 6] = ( s05 + s07 ); + re[s * 3] = ( s08 + s14 ); + re[s * 7] = ( s08 - s14 ); + im[s * 3] = ( s09 + s15 ); + im[s * 7] = ( s09 - s15 ); + re[s * 1] = ( s10 + s12 ); + re[s * 5] = ( s10 - s12 ); + im[s * 1] = ( s11 + s13 ); + im[s * 5] = ( s11 - s13 ); + + return; +} + +static void fft_len10( + float *re, + float *im, + const int16_t s ) +{ + float t; + float x0, x1, x2, x3, x4; + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float y00, y01, y02, y03, y04, y05, y06, y07, y08, y09; + float y10, y11, y12, y13, y14, y15, y16, y17, y18, y19; + + x0 = re[s * 0]; + x1 = re[s * 2]; + x2 = re[s * 4]; + x3 = re[s * 6]; + x4 = re[s * 8]; + + r1 = ( x3 + x2 ); + r4 = ( x3 - x2 ); + r3 = ( x1 + x4 ); + r2 = ( x1 - x4 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y00 = ( x0 + r1 ); + r1 = ( y00 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + x0 = im[s * 0]; + x1 = im[s * 2]; + x2 = im[s * 4]; + x3 = im[s * 6]; + x4 = im[s * 8]; + + s1 = ( x3 + x2 ); + s4 = ( x3 - x2 ); + s3 = ( x1 + x4 ); + s2 = ( x1 - x4 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y01 = ( x0 + s1 ); + s1 = ( y01 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y04 = ( r1 + s2 ); + y16 = ( r1 - s2 ); + y08 = ( r3 - s4 ); + y12 = ( r3 + s4 ); + + y05 = ( s1 - r2 ); + y17 = ( s1 + r2 ); + y09 = ( s3 + r4 ); + y13 = ( s3 - r4 ); + + x0 = re[s * 5]; + x1 = re[s * 1]; + x2 = re[s * 3]; + x3 = re[s * 7]; + x4 = re[s * 9]; + + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x3 + x2 ); + r2 = ( x3 - x2 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y02 = ( x0 + r1 ); + r1 = ( y02 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + x0 = im[s * 5]; + x1 = im[s * 1]; + x2 = im[s * 3]; + x3 = im[s * 7]; + x4 = im[s * 9]; + + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x3 + x2 ); + s2 = ( x3 - x2 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y03 = ( x0 + s1 ); + s1 = ( y03 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y06 = ( r1 + s2 ); + y18 = ( r1 - s2 ); + y10 = ( r3 - s4 ); + y14 = ( r3 + s4 ); + + y07 = ( s1 - r2 ); + y19 = ( s1 + r2 ); + y11 = ( s3 + r4 ); + y15 = ( s3 - r4 ); + + re[s * 0] = ( y00 + y02 ); + im[s * 0] = ( y01 + y03 ); + re[s * 5] = ( y00 - y02 ); + im[s * 5] = ( y01 - y03 ); + + re[s * 2] = ( y04 + y06 ); + im[s * 2] = ( y05 + y07 ); + re[s * 7] = ( y04 - y06 ); + im[s * 7] = ( y05 - y07 ); + + re[s * 4] = ( y08 + y10 ); + im[s * 4] = ( y09 + y11 ); + re[s * 9] = ( y08 - y10 ); + im[s * 9] = ( y09 - y11 ); + + re[s * 6] = ( y12 + y14 ); + im[s * 6] = ( y13 + y15 ); + re[s * 1] = ( y12 - y14 ); + im[s * 1] = ( y13 - y15 ); + + re[s * 8] = ( y16 + y18 ); + im[s * 8] = ( y17 + y19 ); + re[s * 3] = ( y16 - y18 ); + im[s * 3] = ( y17 - y19 ); + + return; +} + +static void fft_len15( + float *re, + float *im, + const int16_t s ) +{ + float t; + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float x00, x01, x02, x03, x04, x05, x06, x07, x08, x09; + float x10, x11, x12, x13, x14, x15, x16, x17, x18, x19; + float x20, x21, x22, x23, x24, x25, x26, x27, x28, x29; + float y00, y01, y02, y03, y04, y05, y06, y07, y08, y09; + float y10, y11, y12, y13, y14, y15, y16, y17, y18, y19; + float y20, y21, y22, y23, y24, y25, y26, y27, y28, y29; + + x00 = re[s * 0]; + x01 = im[s * 0]; + x02 = re[s * 3]; + x03 = im[s * 3]; + x04 = re[s * 6]; + x05 = im[s * 6]; + x06 = re[s * 9]; + x07 = im[s * 9]; + x08 = re[s * 12]; + x09 = im[s * 12]; + + x10 = re[s * 5]; + x11 = im[s * 5]; + x12 = re[s * 8]; + x13 = im[s * 8]; + x14 = re[s * 11]; + x15 = im[s * 11]; + x16 = re[s * 14]; + x17 = im[s * 14]; + x18 = re[s * 2]; + x19 = im[s * 2]; + + x20 = re[s * 10]; + x21 = im[s * 10]; + x22 = re[s * 13]; + x23 = im[s * 13]; + x24 = re[s * 1]; + x25 = im[s * 1]; + x26 = re[s * 4]; + x27 = im[s * 4]; + x28 = re[s * 7]; + x29 = im[s * 7]; + + r1 = ( x02 + x08 ); + r4 = ( x02 - x08 ); + r3 = ( x04 + x06 ); + r2 = ( x04 - x06 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y00 = ( x00 + r1 ); + r1 = ( y00 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x03 + x09 ); + s4 = ( x03 - x09 ); + s3 = ( x05 + x07 ); + s2 = ( x05 - x07 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y01 = ( x01 + s1 ); + s1 = ( y01 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y02 = ( r1 + s2 ); + y08 = ( r1 - s2 ); + y04 = ( r3 - s4 ); + y06 = ( r3 + s4 ); + + y03 = ( s1 - r2 ); + y09 = ( s1 + r2 ); + y05 = ( s3 + r4 ); + y07 = ( s3 - r4 ); + + r1 = ( x12 + x18 ); + r4 = ( x12 - x18 ); + r3 = ( x14 + x16 ); + r2 = ( x14 - x16 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y10 = ( x10 + r1 ); + r1 = ( y10 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x13 + x19 ); + s4 = ( x13 - x19 ); + s3 = ( x15 + x17 ); + s2 = ( x15 - x17 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y11 = ( x11 + s1 ); + s1 = ( y11 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y12 = ( r1 + s2 ); + y18 = ( r1 - s2 ); + y14 = ( r3 - s4 ); + y16 = ( r3 + s4 ); + + y13 = ( s1 - r2 ); + y19 = ( s1 + r2 ); + y15 = ( s3 + r4 ); + y17 = ( s3 - r4 ); + + r1 = ( x22 + x28 ); + r4 = ( x22 - x28 ); + r3 = ( x24 + x26 ); + r2 = ( x24 - x26 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y20 = ( x20 + r1 ); + r1 = ( y20 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x23 + x29 ); + s4 = ( x23 - x29 ); + s3 = ( x25 + x27 ); + s2 = ( x25 - x27 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y21 = ( x21 + s1 ); + s1 = ( y21 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y22 = ( r1 + s2 ); + y28 = ( r1 - s2 ); + y24 = ( r3 - s4 ); + y26 = ( r3 + s4 ); + + y23 = ( s1 - r2 ); + y29 = ( s1 + r2 ); + y25 = ( s3 + r4 ); + y27 = ( s3 - r4 ); + + r1 = ( y10 + y20 ); + r2 = ( ( y10 - y20 ) * FFT_C31 ); + re[s * 0] = ( y00 + r1 ); + r1 = ( y00 - r1 * 0.5f ); + + s1 = ( y11 + y21 ); + s2 = ( ( y11 - y21 ) * FFT_C31 ); + im[s * 0] = ( y01 + s1 ); + s1 = ( y01 - s1 * 0.5f ); + + re[s * 10] = ( r1 - s2 ); + re[s * 5] = ( r1 + s2 ); + im[s * 10] = ( s1 + r2 ); + im[s * 5] = ( s1 - r2 ); + + r1 = ( y12 + y22 ); + r2 = ( ( y12 - y22 ) * FFT_C31 ); + re[s * 6] = ( y02 + r1 ); + r1 = ( y02 - r1 * 0.5f ); + + s1 = ( y13 + y23 ); + s2 = ( ( y13 - y23 ) * FFT_C31 ); + im[s * 6] = ( y03 + s1 ); + s1 = ( y03 - s1 * 0.5f ); + + re[s * 1] = ( r1 - s2 ); + re[s * 11] = ( r1 + s2 ); + im[s * 1] = ( s1 + r2 ); + im[s * 11] = ( s1 - r2 ); + + r1 = ( y14 + y24 ); + r2 = ( ( y14 - y24 ) * FFT_C31 ); + re[s * 12] = ( y04 + r1 ); + r1 = ( y04 - r1 * 0.5f ); + + s1 = ( y15 + y25 ); + s2 = ( ( y15 - y25 ) * FFT_C31 ); + im[s * 12] = ( y05 + s1 ); + s1 = ( y05 - s1 * 0.5f ); + + re[s * 7] = ( r1 - s2 ); + re[s * 2] = ( r1 + s2 ); + im[s * 7] = ( s1 + r2 ); + im[s * 2] = ( s1 - r2 ); + + r1 = ( y16 + y26 ); + r2 = ( ( y16 - y26 ) * FFT_C31 ); + re[s * 3] = ( y06 + r1 ); + r1 = ( y06 - r1 * 0.5f ); + + s1 = ( y17 + y27 ); + s2 = ( ( y17 - y27 ) * FFT_C31 ); + im[s * 3] = ( y07 + s1 ); + s1 = ( y07 - s1 * 0.5f ); + + re[s * 13] = ( r1 - s2 ); + re[s * 8] = ( r1 + s2 ); + im[s * 13] = ( s1 + r2 ); + im[s * 8] = ( s1 - r2 ); + + r1 = ( y18 + y28 ); + r2 = ( ( y18 - y28 ) * FFT_C31 ); + re[s * 9] = ( y08 + r1 ); + r1 = ( y08 - r1 * 0.5f ); + + s1 = ( y19 + y29 ); + s2 = ( ( y19 - y29 ) * FFT_C31 ); + im[s * 9] = ( y09 + s1 ); + s1 = ( y09 - s1 * 0.5f ); + + re[s * 4] = ( r1 - s2 ); + re[s * 14] = ( r1 + s2 ); + im[s * 4] = ( s1 + r2 ); + im[s * 14] = ( s1 - r2 ); + + return; +} + +static void fft_len16( + float *re, + float *im, + const int16_t s ) +{ + float x0, x1, x2, x3, x4, x5, x6, x7; + float t0, t1, t2, t3, t4, t5, t6, t7; + float y00, y01, y02, y03, y04, y05, y06, y07; + float y08, y09, y10, y11, y12, y13, y14, y15; + float y16, y17, y18, y19, y20, y21, y22, y23; + float y24, y25, y26, y27, y28, y29, y30, y31; + + x0 = re[s * 0]; + x1 = im[s * 0]; + x2 = re[s * 4]; + x3 = im[s * 4]; + x4 = re[s * 8]; + x5 = im[s * 8]; + x6 = re[s * 12]; + x7 = im[s * 12]; + + t0 = ( x0 + x4 ); + t2 = ( x0 - x4 ); + t1 = ( x1 + x5 ); + t3 = ( x1 - x5 ); + t4 = ( x2 + x6 ); + t7 = ( x2 - x6 ); + t5 = ( x7 + x3 ); + t6 = ( x7 - x3 ); + + y00 = ( t0 + t4 ); + y01 = ( t1 + t5 ); + y02 = ( t2 - t6 ); + y03 = ( t3 - t7 ); + y04 = ( t0 - t4 ); + y05 = ( t1 - t5 ); + y06 = ( t2 + t6 ); + y07 = ( t3 + t7 ); + + x0 = re[s * 1]; + x1 = im[s * 1]; + x2 = re[s * 5]; + x3 = im[s * 5]; + x4 = re[s * 9]; + x5 = im[s * 9]; + x6 = re[s * 13]; + x7 = im[s * 13]; + + t0 = ( x0 + x4 ); + t2 = ( x0 - x4 ); + t1 = ( x1 + x5 ); + t3 = ( x1 - x5 ); + t4 = ( x2 + x6 ); + t7 = ( x2 - x6 ); + t5 = ( x7 + x3 ); + t6 = ( x7 - x3 ); + + y08 = ( t0 + t4 ); + y09 = ( t1 + t5 ); + y10 = ( t2 - t6 ); + y11 = ( t3 - t7 ); + y12 = ( t0 - t4 ); + y13 = ( t1 - t5 ); + y14 = ( t2 + t6 ); + y15 = ( t3 + t7 ); + + x0 = re[s * 2]; + x1 = im[s * 2]; + x2 = re[s * 6]; + x3 = im[s * 6]; + x4 = re[s * 10]; + x5 = im[s * 10]; + x6 = re[s * 14]; + x7 = im[s * 14]; + + t0 = ( x0 + x4 ); + t2 = ( x0 - x4 ); + t1 = ( x1 + x5 ); + t3 = ( x1 - x5 ); + t4 = ( x2 + x6 ); + t7 = ( x2 - x6 ); + t5 = ( x7 + x3 ); + t6 = ( x7 - x3 ); + + y16 = ( t0 + t4 ); + y17 = ( t1 + t5 ); + y18 = ( t2 - t6 ); + y19 = ( t3 - t7 ); + y20 = ( t1 - t5 ); + y21 = ( t4 - t0 ); + y22 = ( t2 + t6 ); + y23 = ( t3 + t7 ); + + x0 = re[s * 3]; + x1 = im[s * 3]; + x2 = re[s * 7]; + x3 = im[s * 7]; + x4 = re[s * 11]; + x5 = im[s * 11]; + x6 = re[s * 15]; + x7 = im[s * 15]; + + t0 = ( x0 + x4 ); + t2 = ( x0 - x4 ); + t1 = ( x1 + x5 ); + t3 = ( x1 - x5 ); + t4 = ( x2 + x6 ); + t7 = ( x2 - x6 ); + t5 = ( x7 + x3 ); + t6 = ( x7 - x3 ); + + y24 = ( t0 + t4 ); + y25 = ( t1 + t5 ); + y26 = ( t2 - t6 ); + y27 = ( t3 - t7 ); + y28 = ( t0 - t4 ); + y29 = ( t1 - t5 ); + y30 = ( t2 + t6 ); + y31 = ( t3 + t7 ); + + x0 = ( y22 * FFT_C162 ); + x1 = ( y23 * FFT_C162 ); + y22 = ( x0 - x1 ); + y23 = ( x0 + x1 ); + + x0 = ( y28 * FFT_C162 ); + x1 = ( y29 * FFT_C162 ); + y28 = ( x0 - x1 ); + y29 = ( x0 + x1 ); + + x0 = ( y12 * FFT_C161 ); + x1 = ( y13 * FFT_C161 ); + y12 = ( x0 + x1 ); + y13 = ( x1 - x0 ); + + x0 = ( y18 * FFT_C161 ); + x1 = ( y19 * FFT_C161 ); + y18 = ( x0 + x1 ); + y19 = ( x1 - x0 ); + + x0 = ( y10 * FFT_C163 ); + x1 = ( y11 * FFT_C166 ); + x2 = ( y10 * FFT_C166 ); + x3 = ( y11 * FFT_C163 ); + y10 = ( x0 - x1 ); + y11 = ( x2 + x3 ); + + x0 = ( y14 * FFT_C165 ); + x1 = ( y15 * FFT_C164 ); + x2 = ( y14 * FFT_C164 ); + x3 = ( y15 * FFT_C165 ); + y14 = ( x0 - x1 ); + y15 = ( x2 + x3 ); + + x0 = ( y26 * FFT_C165 ); + x1 = ( y27 * FFT_C164 ); + x2 = ( y26 * FFT_C164 ); + x3 = ( y27 * FFT_C165 ); + y26 = ( x0 - x1 ); + y27 = ( x2 + x3 ); + + x0 = ( y30 * FFT_C164 ); + x1 = ( y31 * FFT_C165 ); + x2 = ( y30 * FFT_C165 ); + x3 = ( y31 * FFT_C164 ); + y30 = ( x0 - x1 ); + y31 = ( x2 + x3 ); + + t0 = ( y00 + y16 ); + t2 = ( y00 - y16 ); + t1 = ( y01 + y17 ); + t3 = ( y01 - y17 ); + t4 = ( y08 + y24 ); + t7 = ( y08 - y24 ); + t5 = ( y25 + y09 ); + t6 = ( y25 - y09 ); + + re[s * 0] = ( t0 + t4 ); + im[s * 0] = ( t1 + t5 ); + re[s * 4] = ( t2 - t6 ); + im[s * 4] = ( t3 - t7 ); + re[s * 8] = ( t0 - t4 ); + im[s * 8] = ( t1 - t5 ); + re[s * 12] = ( t2 + t6 ); + im[s * 12] = ( t3 + t7 ); + + t0 = ( y02 + y18 ); + t2 = ( y02 - y18 ); + t1 = ( y03 + y19 ); + t3 = ( y03 - y19 ); + t4 = ( y10 + y26 ); + t7 = ( y10 - y26 ); + t5 = ( y27 + y11 ); + t6 = ( y27 - y11 ); + + re[s * 1] = ( t0 + t4 ); + im[s * 1] = ( t1 + t5 ); + re[s * 5] = ( t2 - t6 ); + im[s * 5] = ( t3 - t7 ); + re[s * 9] = ( t0 - t4 ); + im[s * 9] = ( t1 - t5 ); + re[s * 13] = ( t2 + t6 ); + im[s * 13] = ( t3 + t7 ); + + t0 = ( y04 + y20 ); + t2 = ( y04 - y20 ); + t1 = ( y05 + y21 ); + t3 = ( y05 - y21 ); + t4 = ( y12 + y28 ); + t7 = ( y12 - y28 ); + t5 = ( y29 + y13 ); + t6 = ( y29 - y13 ); + + re[s * 2] = ( t0 + t4 ); + im[s * 2] = ( t1 + t5 ); + re[s * 6] = ( t2 - t6 ); + im[s * 6] = ( t3 - t7 ); + re[s * 10] = ( t0 - t4 ); + im[s * 10] = ( t1 - t5 ); + re[s * 14] = ( t2 + t6 ); + im[s * 14] = ( t3 + t7 ); + + t0 = ( y06 + y22 ); + t2 = ( y06 - y22 ); + t1 = ( y07 + y23 ); + t3 = ( y07 - y23 ); + t4 = ( y14 + y30 ); + t7 = ( y14 - y30 ); + t5 = ( y31 + y15 ); + t6 = ( y31 - y15 ); + + re[s * 3] = ( t0 + t4 ); + im[s * 3] = ( t1 + t5 ); + re[s * 7] = ( t2 - t6 ); + im[s * 7] = ( t3 - t7 ); + re[s * 11] = ( t0 - t4 ); + im[s * 11] = ( t1 - t5 ); + re[s * 15] = ( t2 + t6 ); + im[s * 15] = ( t3 + t7 ); + + return; +} + +static void fft_len20( + float *re, + float *im, + const int16_t s ) +{ + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float x0, x1, x2, x3, x4; + float t, t0, t1, t2, t3, t4, t5, t6, t7; + float y00, y01, y02, y03, y04, y05, y06, y07, y08, y09; + float y10, y11, y12, y13, y14, y15, y16, y17, y18, y19; + float y20, y21, y22, y23, y24, y25, y26, y27, y28, y29; + float y30, y31, y32, y33, y34, y35, y36, y37, y38, y39; + + x0 = re[s * 0]; + x1 = re[s * 16]; + x2 = re[s * 12]; + x3 = re[s * 8]; + x4 = re[s * 4]; + + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y00 = ( x0 + r1 ); + r1 = ( y00 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + x0 = im[s * 0]; + x1 = im[s * 16]; + x2 = im[s * 12]; + x3 = im[s * 8]; + x4 = im[s * 4]; + + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y01 = ( x0 + s1 ); + s1 = ( y01 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y08 = ( r1 + s2 ); + y32 = ( r1 - s2 ); + y16 = ( r3 - s4 ); + y24 = ( r3 + s4 ); + + y09 = ( s1 - r2 ); + y33 = ( s1 + r2 ); + y17 = ( s3 + r4 ); + y25 = ( s3 - r4 ); + + x0 = re[s * 5]; + x1 = re[s * 1]; + x2 = re[s * 17]; + x3 = re[s * 13]; + x4 = re[s * 9]; + + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y02 = ( x0 + r1 ); + r1 = ( y02 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + x0 = im[s * 5]; + x1 = im[s * 1]; + x2 = im[s * 17]; + x3 = im[s * 13]; + x4 = im[s * 9]; + + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y03 = ( x0 + s1 ); + s1 = ( y03 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y10 = ( r1 + s2 ); + y34 = ( r1 - s2 ); + y18 = ( r3 - s4 ); + y26 = ( r3 + s4 ); + + y11 = ( s1 - r2 ); + y35 = ( s1 + r2 ); + y19 = ( s3 + r4 ); + y27 = ( s3 - r4 ); + + x0 = re[s * 10]; + x1 = re[s * 6]; + x2 = re[s * 2]; + x3 = re[s * 18]; + x4 = re[s * 14]; + + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y04 = ( x0 + r1 ); + r1 = ( y04 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + x0 = im[s * 10]; + x1 = im[s * 6]; + x2 = im[s * 2]; + x3 = im[s * 18]; + x4 = im[s * 14]; + + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y05 = ( x0 + s1 ); + s1 = ( y05 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y12 = ( r1 + s2 ); + y36 = ( r1 - s2 ); + y20 = ( r3 - s4 ); + y28 = ( r3 + s4 ); + + y13 = ( s1 - r2 ); + y37 = ( s1 + r2 ); + y21 = ( s3 + r4 ); + y29 = ( s3 - r4 ); + + x0 = re[s * 15]; + x1 = re[s * 11]; + x2 = re[s * 7]; + x3 = re[s * 3]; + x4 = re[s * 19]; + + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y06 = ( x0 + r1 ); + r1 = ( y06 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + x0 = im[s * 15]; + x1 = im[s * 11]; + x2 = im[s * 7]; + x3 = im[s * 3]; + x4 = im[s * 19]; + + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y07 = ( x0 + s1 ); + s1 = ( y07 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y14 = ( r1 + s2 ); + y38 = ( r1 - s2 ); + y22 = ( r3 - s4 ); + y30 = ( r3 + s4 ); + + y15 = ( s1 - r2 ); + y39 = ( s1 + r2 ); + y23 = ( s3 + r4 ); + y31 = ( s3 - r4 ); + + t0 = ( y00 + y04 ); + t2 = ( y00 - y04 ); + t1 = ( y01 + y05 ); + t3 = ( y01 - y05 ); + t4 = ( y02 + y06 ); + t7 = ( y02 - y06 ); + t5 = ( y07 + y03 ); + t6 = ( y07 - y03 ); + + re[s * 0] = ( t0 + t4 ); + im[s * 0] = ( t1 + t5 ); + re[s * 5] = ( t2 - t6 ); + im[s * 5] = ( t3 - t7 ); + re[s * 10] = ( t0 - t4 ); + im[s * 10] = ( t1 - t5 ); + re[s * 15] = ( t2 + t6 ); + im[s * 15] = ( t3 + t7 ); + + t0 = ( y08 + y12 ); + t2 = ( y08 - y12 ); + t1 = ( y09 + y13 ); + t3 = ( y09 - y13 ); + t4 = ( y10 + y14 ); + t7 = ( y10 - y14 ); + t5 = ( y15 + y11 ); + t6 = ( y15 - y11 ); + + re[s * 4] = ( t0 + t4 ); + im[s * 4] = ( t1 + t5 ); + re[s * 9] = ( t2 - t6 ); + im[s * 9] = ( t3 - t7 ); + re[s * 14] = ( t0 - t4 ); + im[s * 14] = ( t1 - t5 ); + re[s * 19] = ( t2 + t6 ); + im[s * 19] = ( t3 + t7 ); + + t0 = ( y16 + y20 ); + t2 = ( y16 - y20 ); + t1 = ( y17 + y21 ); + t3 = ( y17 - y21 ); + t4 = ( y18 + y22 ); + t7 = ( y18 - y22 ); + t5 = ( y23 + y19 ); + t6 = ( y23 - y19 ); + + re[s * 8] = ( t0 + t4 ); + im[s * 8] = ( t1 + t5 ); + re[s * 13] = ( t2 - t6 ); + im[s * 13] = ( t3 - t7 ); + re[s * 18] = ( t0 - t4 ); + im[s * 18] = ( t1 - t5 ); + re[s * 3] = ( t2 + t6 ); + im[s * 3] = ( t3 + t7 ); + + t0 = ( y24 + y28 ); + t2 = ( y24 - y28 ); + t1 = ( y25 + y29 ); + t3 = ( y25 - y29 ); + t4 = ( y26 + y30 ); + t7 = ( y26 - y30 ); + t5 = ( y31 + y27 ); + t6 = ( y31 - y27 ); + + re[s * 12] = ( t0 + t4 ); + im[s * 12] = ( t1 + t5 ); + re[s * 17] = ( t2 - t6 ); + im[s * 17] = ( t3 - t7 ); + re[s * 2] = ( t0 - t4 ); + im[s * 2] = ( t1 - t5 ); + re[s * 7] = ( t2 + t6 ); + im[s * 7] = ( t3 + t7 ); + + t0 = ( y32 + y36 ); + t2 = ( y32 - y36 ); + t1 = ( y33 + y37 ); + t3 = ( y33 - y37 ); + t4 = ( y34 + y38 ); + t7 = ( y34 - y38 ); + t5 = ( y39 + y35 ); + t6 = ( y39 - y35 ); + + re[s * 16] = ( t0 + t4 ); + im[s * 16] = ( t1 + t5 ); + re[s * 1] = ( t2 - t6 ); + im[s * 1] = ( t3 - t7 ); + re[s * 6] = ( t0 - t4 ); + im[s * 6] = ( t1 - t5 ); + re[s * 11] = ( t2 + t6 ); + im[s * 11] = ( t3 + t7 ); + + return; +} + +static void fft_len30( + float *re, + float *im, + const int16_t s ) +{ + float t; + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float x00, x01, x02, x03, x04, x05, x06, x07, x08, x09; + float x10, x11, x12, x13, x14, x15, x16, x17, x18, x19; + float x20, x21, x22, x23, x24, x25, x26, x27, x28, x29; + + float y00, y01, y02, y03, y04, y05, y06, y07, y08, y09; + float y10, y11, y12, y13, y14, y15, y16, y17, y18, y19; + float y20, y21, y22, y23, y24, y25, y26, y27, y28, y29; + + float z00, z01, z02, z03, z04, z05, z06, z07, z08, z09; + float z10, z11, z12, z13, z14, z15, z16, z17, z18, z19; + float z20, z21, z22, z23, z24, z25, z26, z27, z28, z29; + float z30, z31, z32, z33, z34, z35, z36, z37, z38, z39; + float z40, z41, z42, z43, z44, z45, z46, z47, z48, z49; + float z50, z51, z52, z53, z54, z55, z56, z57, z58, z59; + + float *rel, *reh, *iml, *imh; + + rel = &re[s * 0]; + reh = &re[s * 15]; + iml = &im[s * 0]; + imh = &im[s * 15]; + + x00 = re[s * 0]; + x01 = im[s * 0]; + x02 = re[s * 18]; + x03 = im[s * 18]; + x04 = re[s * 6]; + x05 = im[s * 6]; + x06 = re[s * 24]; + x07 = im[s * 24]; + x08 = re[s * 12]; + x09 = im[s * 12]; + + x10 = re[s * 20]; + x11 = im[s * 20]; + x12 = re[s * 8]; + x13 = im[s * 8]; + x14 = re[s * 26]; + x15 = im[s * 26]; + x16 = re[s * 14]; + x17 = im[s * 14]; + x18 = re[s * 2]; + x19 = im[s * 2]; + + x20 = re[s * 10]; + x21 = im[s * 10]; + x22 = re[s * 28]; + x23 = im[s * 28]; + x24 = re[s * 16]; + x25 = im[s * 16]; + x26 = re[s * 4]; + x27 = im[s * 4]; + x28 = re[s * 22]; + x29 = im[s * 22]; + + r1 = ( x02 + x08 ); + r4 = ( x02 - x08 ); + r3 = ( x04 + x06 ); + r2 = ( x04 - x06 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y00 = ( x00 + r1 ); + r1 = ( y00 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x03 + x09 ); + s4 = ( x03 - x09 ); + s3 = ( x05 + x07 ); + s2 = ( x05 - x07 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y01 = ( x01 + s1 ); + s1 = ( y01 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y02 = ( r1 + s2 ); + y08 = ( r1 - s2 ); + y04 = ( r3 - s4 ); + y06 = ( r3 + s4 ); + + y03 = ( s1 - r2 ); + y09 = ( s1 + r2 ); + y05 = ( s3 + r4 ); + y07 = ( s3 - r4 ); + + r1 = ( x12 + x18 ); + r4 = ( x12 - x18 ); + r3 = ( x14 + x16 ); + r2 = ( x14 - x16 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y10 = ( x10 + r1 ); + r1 = ( y10 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x13 + x19 ); + s4 = ( x13 - x19 ); + s3 = ( x15 + x17 ); + s2 = ( x15 - x17 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y11 = ( x11 + s1 ); + s1 = ( y11 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y12 = ( r1 + s2 ); + y18 = ( r1 - s2 ); + y14 = ( r3 - s4 ); + y16 = ( r3 + s4 ); + + y13 = ( s1 - r2 ); + y19 = ( s1 + r2 ); + y15 = ( s3 + r4 ); + y17 = ( s3 - r4 ); + + r1 = ( x22 + x28 ); + r4 = ( x22 - x28 ); + r3 = ( x24 + x26 ); + r2 = ( x24 - x26 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y20 = ( x20 + r1 ); + r1 = ( y20 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x23 + x29 ); + s4 = ( x23 - x29 ); + s3 = ( x25 + x27 ); + s2 = ( x25 - x27 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y21 = ( x21 + s1 ); + s1 = ( y21 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y22 = ( r1 + s2 ); + y28 = ( r1 - s2 ); + y24 = ( r3 - s4 ); + y26 = ( r3 + s4 ); + + y23 = ( s1 - r2 ); + y29 = ( s1 + r2 ); + y25 = ( s3 + r4 ); + y27 = ( s3 - r4 ); + + r1 = ( y10 + y20 ); + r2 = ( ( y10 - y20 ) * FFT_C31 ); + z00 = ( y00 + r1 ); + r1 = ( y00 - r1 * 0.5f ); + + s1 = ( y11 + y21 ); + s2 = ( ( y11 - y21 ) * FFT_C31 ); + z01 = ( y01 + s1 ); + s1 = ( y01 - s1 * 0.5f ); + + z20 = ( r1 - s2 ); + z10 = ( r1 + s2 ); + z21 = ( s1 + r2 ); + z11 = ( s1 - r2 ); + + r1 = ( y12 + y22 ); + r2 = ( ( y12 - y22 ) * FFT_C31 ); + z12 = ( y02 + r1 ); + r1 = ( y02 - r1 * 0.5f ); + + s1 = ( y13 + y23 ); + s2 = ( ( y13 - y23 ) * FFT_C31 ); + z13 = ( y03 + s1 ); + s1 = ( y03 - s1 * 0.5f ); + + z02 = ( r1 - s2 ); + z22 = ( r1 + s2 ); + z03 = ( s1 + r2 ); + z23 = ( s1 - r2 ); + + r1 = ( y14 + y24 ); + r2 = ( ( y14 - y24 ) * FFT_C31 ); + z24 = ( y04 + r1 ); + r1 = ( y04 - r1 * 0.5f ); + + s1 = ( y15 + y25 ); + s2 = ( ( y15 - y25 ) * FFT_C31 ); + z25 = ( y05 + s1 ); + s1 = ( y05 - s1 * 0.5f ); + + z14 = ( r1 - s2 ); + z04 = ( r1 + s2 ); + z15 = ( s1 + r2 ); + z05 = ( s1 - r2 ); + + r1 = ( y16 + y26 ); + r2 = ( ( y16 - y26 ) * FFT_C31 ); + z06 = ( y06 + r1 ); + r1 = ( y06 - r1 * 0.5f ); + + s1 = ( y17 + y27 ); + s2 = ( ( y17 - y27 ) * FFT_C31 ); + z07 = ( y07 + s1 ); + s1 = ( y07 - s1 * 0.5f ); + + z26 = ( r1 - s2 ); + z16 = ( r1 + s2 ); + z27 = ( s1 + r2 ); + z17 = ( s1 - r2 ); + + r1 = ( y18 + y28 ); + r2 = ( ( y18 - y28 ) * FFT_C31 ); + z18 = ( y08 + r1 ); + r1 = ( y08 - r1 * 0.5f ); + + s1 = ( y19 + y29 ); + s2 = ( ( y19 - y29 ) * FFT_C31 ); + z19 = ( y09 + s1 ); + s1 = ( y09 - s1 * 0.5f ); + + z08 = ( r1 - s2 ); + z28 = ( r1 + s2 ); + z09 = ( s1 + r2 ); + z29 = ( s1 - r2 ); + + x00 = re[s * 15]; + x01 = im[s * 15]; + x02 = re[s * 3]; + x03 = im[s * 3]; + x04 = re[s * 21]; + x05 = im[s * 21]; + x06 = re[s * 9]; + x07 = im[s * 9]; + x08 = re[s * 27]; + x09 = im[s * 27]; + + x10 = re[s * 5]; + x11 = im[s * 5]; + x12 = re[s * 23]; + x13 = im[s * 23]; + x14 = re[s * 11]; + x15 = im[s * 11]; + x16 = re[s * 29]; + x17 = im[s * 29]; + x18 = re[s * 17]; + x19 = im[s * 17]; + + x20 = re[s * 25]; + x21 = im[s * 25]; + x22 = re[s * 13]; + x23 = im[s * 13]; + x24 = re[s * 1]; + x25 = im[s * 1]; + x26 = re[s * 19]; + x27 = im[s * 19]; + x28 = re[s * 7]; + x29 = im[s * 7]; + + r1 = ( x02 + x08 ); + r4 = ( x02 - x08 ); + r3 = ( x04 + x06 ); + r2 = ( x04 - x06 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y00 = ( x00 + r1 ); + r1 = ( y00 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x03 + x09 ); + s4 = ( x03 - x09 ); + s3 = ( x05 + x07 ); + s2 = ( x05 - x07 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y01 = ( x01 + s1 ); + s1 = ( y01 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y02 = ( r1 + s2 ); + y08 = ( r1 - s2 ); + y04 = ( r3 - s4 ); + y06 = ( r3 + s4 ); + + y03 = ( s1 - r2 ); + y09 = ( s1 + r2 ); + y05 = ( s3 + r4 ); + y07 = ( s3 - r4 ); + + r1 = ( x12 + x18 ); + r4 = ( x12 - x18 ); + r3 = ( x14 + x16 ); + r2 = ( x14 - x16 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y10 = ( x10 + r1 ); + r1 = ( y10 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x13 + x19 ); + s4 = ( x13 - x19 ); + s3 = ( x15 + x17 ); + s2 = ( x15 - x17 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y11 = ( x11 + s1 ); + s1 = ( y11 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y12 = ( r1 + s2 ); + y18 = ( r1 - s2 ); + y14 = ( r3 - s4 ); + y16 = ( r3 + s4 ); + + y13 = ( s1 - r2 ); + y19 = ( s1 + r2 ); + y15 = ( s3 + r4 ); + y17 = ( s3 - r4 ); + + r1 = ( x22 + x28 ); + r4 = ( x22 - x28 ); + r3 = ( x24 + x26 ); + r2 = ( x24 - x26 ); + t = ( ( r1 - r3 ) * FFT_C54 ); + r1 = ( r1 + r3 ); + y20 = ( x20 + r1 ); + r1 = ( y20 + ( ( r1 * FFT_C55 ) ) ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( ( ( r4 + r2 ) ) * FFT_C51 ); + r4 = ( t + ( r4 * FFT_C52 ) ); + r2 = ( t + ( r2 * FFT_C53 ) ); + + s1 = ( x23 + x29 ); + s4 = ( x23 - x29 ); + s3 = ( x25 + x27 ); + s2 = ( x25 - x27 ); + t = ( ( s1 - s3 ) * FFT_C54 ); + s1 = ( s1 + s3 ); + y21 = ( x21 + s1 ); + s1 = ( y21 + ( s1 * FFT_C55 ) ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( ( s4 + s2 ) * FFT_C51 ); + s4 = ( t + ( s4 * FFT_C52 ) ); + s2 = ( t + ( s2 * FFT_C53 ) ); + + y22 = ( r1 + s2 ); + y28 = ( r1 - s2 ); + y24 = ( r3 - s4 ); + y26 = ( r3 + s4 ); + + y23 = ( s1 - r2 ); + y29 = ( s1 + r2 ); + y25 = ( s3 + r4 ); + y27 = ( s3 - r4 ); + + r1 = ( y10 + y20 ); + r2 = ( ( y10 - y20 ) * FFT_C31 ); + z30 = ( y00 + r1 ); + r1 = ( y00 - r1 * 0.5f ); + + s1 = ( y11 + y21 ); + s2 = ( ( y11 - y21 ) * FFT_C31 ); + z31 = ( y01 + s1 ); + s1 = ( y01 - s1 * 0.5f ); + + z50 = ( r1 - s2 ); + z40 = ( r1 + s2 ); + z51 = ( s1 + r2 ); + z41 = ( s1 - r2 ); + + r1 = ( y12 + y22 ); + r2 = ( ( y12 - y22 ) * FFT_C31 ); + z42 = ( y02 + r1 ); + r1 = ( y02 - r1 * 0.5f ); + + s1 = ( y13 + y23 ); + s2 = ( ( y13 - y23 ) * FFT_C31 ); + z43 = ( y03 + s1 ); + s1 = ( y03 - s1 * 0.5f ); + + z32 = ( r1 - s2 ); + z52 = ( r1 + s2 ); + z33 = ( s1 + r2 ); + z53 = ( s1 - r2 ); + + r1 = ( y14 + y24 ); + r2 = ( ( y14 - y24 ) * FFT_C31 ); + z54 = ( y04 + r1 ); + r1 = ( y04 - r1 * 0.5f ); + + s1 = ( y15 + y25 ); + s2 = ( ( y15 - y25 ) * FFT_C31 ); + z55 = ( y05 + s1 ); + s1 = ( y05 - s1 * 0.5f ); + + z44 = ( r1 - s2 ); + z34 = ( r1 + s2 ); + z45 = ( s1 + r2 ); + z35 = ( s1 - r2 ); + + r1 = ( y16 + y26 ); + r2 = ( ( y16 - y26 ) * FFT_C31 ); + z36 = ( y06 + r1 ); + r1 = ( y06 - r1 * 0.5f ); + + s1 = ( y17 + y27 ); + s2 = ( ( y17 - y27 ) * FFT_C31 ); + z37 = ( y07 + s1 ); + s1 = ( y07 - s1 * 0.5f ); + + z56 = ( r1 - s2 ); + z46 = ( r1 + s2 ); + z57 = ( s1 + r2 ); + z47 = ( s1 - r2 ); + + r1 = ( y18 + y28 ); + r2 = ( ( y18 - y28 ) * FFT_C31 ); + z48 = ( y08 + r1 ); + r1 = ( y08 - r1 * 0.5f ); + + s1 = ( y19 + y29 ); + s2 = ( ( y19 - y29 ) * FFT_C31 ); + z49 = ( y09 + s1 ); + s1 = ( y09 - s1 * 0.5f ); + + z38 = ( r1 - s2 ); + z58 = ( r1 + s2 ); + z39 = ( s1 + r2 ); + z59 = ( s1 - r2 ); + + r1 = z00; + r2 = z30; + r3 = z01; + r4 = z31; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z16; + r2 = z46; + r3 = z17; + r4 = z47; + *reh = ( r1 + r2 ); + *rel = ( r1 - r2 ); + *imh = ( r3 + r4 ); + *iml = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z02; + r2 = z32; + r3 = z03; + r4 = z33; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z18; + r2 = z48; + r3 = z19; + r4 = z49; + *reh = ( r1 + r2 ); + *rel = ( r1 - r2 ); + *imh = ( r3 + r4 ); + *iml = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z04; + r2 = z34; + r3 = z05; + r4 = z35; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z20; + r2 = z50; + r3 = z21; + r4 = z51; + *reh = ( r1 + r2 ); + *rel = ( r1 - r2 ); + *imh = ( r3 + r4 ); + *iml = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z06; + r2 = z36; + r3 = z07; + r4 = z37; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z22; + r2 = z52; + r3 = z23; + r4 = z53; + *reh = ( r1 + r2 ); + *rel = ( r1 - r2 ); + *imh = ( r3 + r4 ); + *iml = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z08; + r2 = z38; + r3 = z09; + r4 = z39; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z24; + r2 = z54; + r3 = z25; + r4 = z55; + *reh = ( r1 + r2 ); + *rel = ( r1 - r2 ); + *imh = ( r3 + r4 ); + *iml = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z10; + r2 = z40; + r3 = z11; + r4 = z41; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z26; + r2 = z56; + r3 = z27; + r4 = z57; + *reh = ( r1 + r2 ); + *rel = ( r1 - r2 ); + *imh = ( r3 + r4 ); + *iml = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z12; + r2 = z42; + r3 = z13; + r4 = z43; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z28; + r2 = z58; + r3 = z29; + r4 = z59; + *reh = ( r1 + r2 ); + *rel = ( r1 - r2 ); + *imh = ( r3 + r4 ); + *iml = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + r1 = z14; + r2 = z44; + r3 = z15; + r4 = z45; + *rel = ( r1 + r2 ); + *reh = ( r1 - r2 ); + *iml = ( r3 + r4 ); + *imh = ( r3 - r4 ); + rel += s, reh += s, iml += s; + imh += s; + + return; +} + +static void fft_len32( + float *re, + float *im, + const int16_t s ) +{ + float as, bs; + float x00, x01, x02, x03, x04, x05, x06, x07; + float x08, x09, x10, x11, x12, x13, x14, x15; + float t00, t01, t02, t03, t04, t05, t06, t07; + float t08, t09, t10, t11, t12, t13, t14, t15; + float s00, s01, s02, s03, s04, s05, s06, s07; + float s08, s09, s10, s11, s12, s13, s14, s15; + + float y00, y01, y02, y03, y04, y05, y06, y07; + float y08, y09, y10, y11, y12, y13, y14, y15; + float y16, y17, y18, y19, y20, y21, y22, y23; + float y24, y25, y26, y27, y28, y29, y30, y31; + float y32, y33, y34, y35, y36, y37, y38, y39; + float y40, y41, y42, y43, y44, y45, y46, y47; + float y48, y49, y50, y51, y52, y53, y54, y55; + float y56, y57, y58, y59, y60, y61, y62, y63; + + x00 = re[s * 0]; + x01 = im[s * 0]; + x02 = re[s * 4]; + x03 = im[s * 4]; + x04 = re[s * 8]; + x05 = im[s * 8]; + x06 = re[s * 12]; + x07 = im[s * 12]; + x08 = re[s * 16]; + x09 = im[s * 16]; + x10 = re[s * 20]; + x11 = im[s * 20]; + x12 = re[s * 24]; + x13 = im[s * 24]; + x14 = re[s * 28]; + x15 = im[s * 28]; + + t00 = ( x00 + x08 ); + t02 = ( x00 - x08 ); + t01 = ( x01 + x09 ); + t03 = ( x01 - x09 ); + t04 = ( x02 + x10 ); + t06 = ( x02 - x10 ); + t05 = ( x03 + x11 ); + t07 = ( x03 - x11 ); + t08 = ( x04 + x12 ); + t10 = ( x04 - x12 ); + t09 = ( x05 + x13 ); + t11 = ( x05 - x13 ); + t12 = ( x06 + x14 ); + t14 = ( x06 - x14 ); + t13 = ( x07 + x15 ); + t15 = ( x07 - x15 ); + + s00 = ( t00 + t08 ); + s04 = ( t00 - t08 ); + s01 = ( t01 + t09 ); + s05 = ( t01 - t09 ); + s08 = ( t02 - t11 ); + s10 = ( t02 + t11 ); + s09 = ( t03 + t10 ); + s11 = ( t03 - t10 ); + s02 = ( t04 + t12 ); + s07 = ( t04 - t12 ); + s03 = ( t05 + t13 ); + s06 = ( t13 - t05 ); + t01 = ( t06 + t14 ); + t02 = ( t06 - t14 ); + t00 = ( t07 + t15 ); + t03 = ( t07 - t15 ); + + { + s12 = ( ( t00 + t02 ) * FFT_C81 ); + s14 = ( ( t00 - t02 ) * FFT_C81 ); + s13 = ( ( t03 - t01 ) * FFT_C81 ); + s15 = ( ( t01 + t03 ) * FFT_C82 ); + }; + + y00 = ( s00 + s02 ); + y08 = ( s00 - s02 ); + y01 = ( s01 + s03 ); + y09 = ( s01 - s03 ); + y04 = ( s04 - s06 ); + y12 = ( s04 + s06 ); + y05 = ( s05 - s07 ); + y13 = ( s05 + s07 ); + y06 = ( s08 + s14 ); + y14 = ( s08 - s14 ); + y07 = ( s09 + s15 ); + y15 = ( s09 - s15 ); + y02 = ( s10 + s12 ); + y10 = ( s10 - s12 ); + y03 = ( s11 + s13 ); + y11 = ( s11 - s13 ); + + x00 = re[s * 1]; + x01 = im[s * 1]; + x02 = re[s * 5]; + x03 = im[s * 5]; + x04 = re[s * 9]; + x05 = im[s * 9]; + x06 = re[s * 13]; + x07 = im[s * 13]; + x08 = re[s * 17]; + x09 = im[s * 17]; + x10 = re[s * 21]; + x11 = im[s * 21]; + x12 = re[s * 25]; + x13 = im[s * 25]; + x14 = re[s * 29]; + x15 = im[s * 29]; + + t00 = ( x00 + x08 ); + t02 = ( x00 - x08 ); + t01 = ( x01 + x09 ); + t03 = ( x01 - x09 ); + t04 = ( x02 + x10 ); + t06 = ( x02 - x10 ); + t05 = ( x03 + x11 ); + t07 = ( x03 - x11 ); + t08 = ( x04 + x12 ); + t10 = ( x04 - x12 ); + t09 = ( x05 + x13 ); + t11 = ( x05 - x13 ); + t12 = ( x06 + x14 ); + t14 = ( x06 - x14 ); + t13 = ( x07 + x15 ); + t15 = ( x07 - x15 ); + + s00 = ( t00 + t08 ); + s04 = ( t00 - t08 ); + s01 = ( t01 + t09 ); + s05 = ( t01 - t09 ); + s08 = ( t02 - t11 ); + s10 = ( t02 + t11 ); + s09 = ( t03 + t10 ); + s11 = ( t03 - t10 ); + s02 = ( t04 + t12 ); + s07 = ( t04 - t12 ); + s03 = ( t05 + t13 ); + s06 = ( t13 - t05 ); + t01 = ( t06 + t14 ); + t02 = ( t06 - t14 ); + t00 = ( t07 + t15 ); + t03 = ( t07 - t15 ); + + { + s12 = ( ( t00 + t02 ) * FFT_C81 ); + s14 = ( ( t00 - t02 ) * FFT_C81 ); + s13 = ( ( t03 - t01 ) * FFT_C81 ); + s15 = ( ( t01 + t03 ) * FFT_C82 ); + }; + + y16 = ( s00 + s02 ); + y24 = ( s00 - s02 ); + y17 = ( s01 + s03 ); + y25 = ( s01 - s03 ); + y20 = ( s04 - s06 ); + y28 = ( s04 + s06 ); + y21 = ( s05 - s07 ); + y29 = ( s05 + s07 ); + y22 = ( s08 + s14 ); + y30 = ( s08 - s14 ); + y23 = ( s09 + s15 ); + y31 = ( s09 - s15 ); + y18 = ( s10 + s12 ); + y26 = ( s10 - s12 ); + y19 = ( s11 + s13 ); + y27 = ( s11 - s13 ); + + x00 = re[s * 2]; + x01 = im[s * 2]; + x02 = re[s * 6]; + x03 = im[s * 6]; + x04 = re[s * 10]; + x05 = im[s * 10]; + x06 = re[s * 14]; + x07 = im[s * 14]; + x08 = re[s * 18]; + x09 = im[s * 18]; + x10 = re[s * 22]; + x11 = im[s * 22]; + x12 = re[s * 26]; + x13 = im[s * 26]; + x14 = re[s * 30]; + x15 = im[s * 30]; + + t00 = ( x00 + x08 ); + t02 = ( x00 - x08 ); + t01 = ( x01 + x09 ); + t03 = ( x01 - x09 ); + t04 = ( x02 + x10 ); + t06 = ( x02 - x10 ); + t05 = ( x03 + x11 ); + t07 = ( x03 - x11 ); + t08 = ( x04 + x12 ); + t10 = ( x04 - x12 ); + t09 = ( x05 + x13 ); + t11 = ( x05 - x13 ); + t12 = ( x06 + x14 ); + t14 = ( x06 - x14 ); + t13 = ( x07 + x15 ); + t15 = ( x07 - x15 ); + + s00 = ( t00 + t08 ); + s04 = ( t00 - t08 ); + s01 = ( t01 + t09 ); + s05 = ( t01 - t09 ); + s08 = ( t02 - t11 ); + s10 = ( t02 + t11 ); + s09 = ( t03 + t10 ); + s11 = ( t03 - t10 ); + s02 = ( t04 + t12 ); + s07 = ( t04 - t12 ); + s03 = ( t05 + t13 ); + s06 = ( t13 - t05 ); + t01 = ( t06 + t14 ); + t02 = ( t06 - t14 ); + t00 = ( t07 + t15 ); + t03 = ( t07 - t15 ); + + { + s12 = ( ( t00 + t02 ) * FFT_C81 ); + s14 = ( ( t00 - t02 ) * FFT_C81 ); + s13 = ( ( t03 - t01 ) * FFT_C81 ); + s15 = ( ( t01 + t03 ) * FFT_C82 ); + }; + + y32 = ( s00 + s02 ); + y40 = ( s00 - s02 ); + y33 = ( s01 + s03 ); + y41 = ( s01 - s03 ); + y36 = ( s04 - s06 ); + y44 = ( s04 + s06 ); + y37 = ( s05 - s07 ); + y45 = ( s05 + s07 ); + y38 = ( s08 + s14 ); + y46 = ( s08 - s14 ); + y39 = ( s09 + s15 ); + y47 = ( s09 - s15 ); + y34 = ( s10 + s12 ); + y42 = ( s10 - s12 ); + y35 = ( s11 + s13 ); + y43 = ( s11 - s13 ); + + x00 = re[s * 3]; + x01 = im[s * 3]; + x02 = re[s * 7]; + x03 = im[s * 7]; + x04 = re[s * 11]; + x05 = im[s * 11]; + x06 = re[s * 15]; + x07 = im[s * 15]; + x08 = re[s * 19]; + x09 = im[s * 19]; + x10 = re[s * 23]; + x11 = im[s * 23]; + x12 = re[s * 27]; + x13 = im[s * 27]; + x14 = re[s * 31]; + x15 = im[s * 31]; + + t00 = ( x00 + x08 ); + t02 = ( x00 - x08 ); + t01 = ( x01 + x09 ); + t03 = ( x01 - x09 ); + t04 = ( x02 + x10 ); + t06 = ( x02 - x10 ); + t05 = ( x03 + x11 ); + t07 = ( x03 - x11 ); + t08 = ( x04 + x12 ); + t10 = ( x04 - x12 ); + t09 = ( x05 + x13 ); + t11 = ( x05 - x13 ); + t12 = ( x06 + x14 ); + t14 = ( x06 - x14 ); + t13 = ( x07 + x15 ); + t15 = ( x07 - x15 ); + + s00 = ( t00 + t08 ); + s04 = ( t00 - t08 ); + s01 = ( t01 + t09 ); + s05 = ( t01 - t09 ); + s08 = ( t02 - t11 ); + s10 = ( t02 + t11 ); + s09 = ( t03 + t10 ); + s11 = ( t03 - t10 ); + s02 = ( t04 + t12 ); + s07 = ( t04 - t12 ); + s03 = ( t05 + t13 ); + s06 = ( t13 - t05 ); + t01 = ( t06 + t14 ); + t02 = ( t06 - t14 ); + t00 = ( t07 + t15 ); + t03 = ( t07 - t15 ); + + { + s12 = ( ( t00 + t02 ) * FFT_C81 ); + s14 = ( ( t00 - t02 ) * FFT_C81 ); + s13 = ( ( t03 - t01 ) * FFT_C81 ); + s15 = ( ( t01 + t03 ) * FFT_C82 ); + }; + + y48 = ( s00 + s02 ); + y56 = ( s00 - s02 ); + y49 = ( s01 + s03 ); + y57 = ( s01 - s03 ); + y52 = ( s04 - s06 ); + y60 = ( s04 + s06 ); + y53 = ( s05 - s07 ); + y61 = ( s05 + s07 ); + y54 = ( s08 + s14 ); + y62 = ( s08 - s14 ); + y55 = ( s09 + s15 ); + y63 = ( s09 - s15 ); + y50 = ( s10 + s12 ); + y58 = ( s10 - s12 ); + y51 = ( s11 + s13 ); + y59 = ( s11 - s13 ); + + + { + as = y18; + bs = y19; + y18 = ( ( as * FFT_RotVector_32[2 * 0 + 0] ) - ( bs * FFT_RotVector_32[2 * 0 + 1] ) ); + y19 = ( ( as * FFT_RotVector_32[2 * 0 + 1] ) + ( bs * FFT_RotVector_32[2 * 0 + 0] ) ); + }; + { + as = y20; + bs = y21; + y20 = ( ( as * FFT_RotVector_32[2 * 1 + 0] ) - ( bs * FFT_RotVector_32[2 * 1 + 1] ) ); + y21 = ( ( as * FFT_RotVector_32[2 * 1 + 1] ) + ( bs * FFT_RotVector_32[2 * 1 + 0] ) ); + }; + { + as = y22; + bs = y23; + y22 = ( ( as * FFT_RotVector_32[2 * 2 + 0] ) - ( bs * FFT_RotVector_32[2 * 2 + 1] ) ); + y23 = ( ( as * FFT_RotVector_32[2 * 2 + 1] ) + ( bs * FFT_RotVector_32[2 * 2 + 0] ) ); + }; + { + as = y24; + bs = y25; + y24 = ( ( as * FFT_RotVector_32[2 * 3 + 0] ) - ( bs * FFT_RotVector_32[2 * 3 + 1] ) ); + y25 = ( ( as * FFT_RotVector_32[2 * 3 + 1] ) + ( bs * FFT_RotVector_32[2 * 3 + 0] ) ); + }; + { + as = y26; + bs = y27; + y26 = ( ( as * FFT_RotVector_32[2 * 4 + 0] ) - ( bs * FFT_RotVector_32[2 * 4 + 1] ) ); + y27 = ( ( as * FFT_RotVector_32[2 * 4 + 1] ) + ( bs * FFT_RotVector_32[2 * 4 + 0] ) ); + }; + { + as = y28; + bs = y29; + y28 = ( ( as * FFT_RotVector_32[2 * 5 + 0] ) - ( bs * FFT_RotVector_32[2 * 5 + 1] ) ); + y29 = ( ( as * FFT_RotVector_32[2 * 5 + 1] ) + ( bs * FFT_RotVector_32[2 * 5 + 0] ) ); + }; + { + as = y30; + bs = y31; + y30 = ( ( as * FFT_RotVector_32[2 * 6 + 0] ) - ( bs * FFT_RotVector_32[2 * 6 + 1] ) ); + y31 = ( ( as * FFT_RotVector_32[2 * 6 + 1] ) + ( bs * FFT_RotVector_32[2 * 6 + 0] ) ); + }; + { + as = y34; + bs = y35; + y34 = ( ( as * FFT_RotVector_32[2 * 7 + 0] ) - ( bs * FFT_RotVector_32[2 * 7 + 1] ) ); + y35 = ( ( as * FFT_RotVector_32[2 * 7 + 1] ) + ( bs * FFT_RotVector_32[2 * 7 + 0] ) ); + }; + { + as = y36; + bs = y37; + y36 = ( ( as * FFT_RotVector_32[2 * 8 + 0] ) - ( bs * FFT_RotVector_32[2 * 8 + 1] ) ); + y37 = ( ( as * FFT_RotVector_32[2 * 8 + 1] ) + ( bs * FFT_RotVector_32[2 * 8 + 0] ) ); + }; + { + as = y38; + bs = y39; + y38 = ( ( as * FFT_RotVector_32[2 * 9 + 0] ) - ( bs * FFT_RotVector_32[2 * 9 + 1] ) ); + y39 = ( ( as * FFT_RotVector_32[2 * 9 + 1] ) + ( bs * FFT_RotVector_32[2 * 9 + 0] ) ); + }; + { + as = y42; + bs = y43; + y42 = ( ( as * FFT_RotVector_32[2 * 10 + 0] ) - ( bs * FFT_RotVector_32[2 * 10 + 1] ) ); + y43 = ( ( as * FFT_RotVector_32[2 * 10 + 1] ) + ( bs * FFT_RotVector_32[2 * 10 + 0] ) ); + }; + { + as = y44; + bs = y45; + y44 = ( ( as * FFT_RotVector_32[2 * 11 + 0] ) - ( bs * FFT_RotVector_32[2 * 11 + 1] ) ); + y45 = ( ( as * FFT_RotVector_32[2 * 11 + 1] ) + ( bs * FFT_RotVector_32[2 * 11 + 0] ) ); + }; + { + as = y46; + bs = y47; + y46 = ( ( as * FFT_RotVector_32[2 * 12 + 0] ) - ( bs * FFT_RotVector_32[2 * 12 + 1] ) ); + y47 = ( ( as * FFT_RotVector_32[2 * 12 + 1] ) + ( bs * FFT_RotVector_32[2 * 12 + 0] ) ); + }; + { + as = y50; + bs = y51; + y50 = ( ( as * FFT_RotVector_32[2 * 13 + 0] ) - ( bs * FFT_RotVector_32[2 * 13 + 1] ) ); + y51 = ( ( as * FFT_RotVector_32[2 * 13 + 1] ) + ( bs * FFT_RotVector_32[2 * 13 + 0] ) ); + }; + { + as = y52; + bs = y53; + y52 = ( ( as * FFT_RotVector_32[2 * 14 + 0] ) - ( bs * FFT_RotVector_32[2 * 14 + 1] ) ); + y53 = ( ( as * FFT_RotVector_32[2 * 14 + 1] ) + ( bs * FFT_RotVector_32[2 * 14 + 0] ) ); + }; + { + as = y54; + bs = y55; + y54 = ( ( as * FFT_RotVector_32[2 * 15 + 0] ) - ( bs * FFT_RotVector_32[2 * 15 + 1] ) ); + y55 = ( ( as * FFT_RotVector_32[2 * 15 + 1] ) + ( bs * FFT_RotVector_32[2 * 15 + 0] ) ); + }; + { + as = y56; + bs = y57; + y56 = ( ( as * FFT_RotVector_32[2 * 16 + 0] ) - ( bs * FFT_RotVector_32[2 * 16 + 1] ) ); + y57 = ( ( as * FFT_RotVector_32[2 * 16 + 1] ) + ( bs * FFT_RotVector_32[2 * 16 + 0] ) ); + }; + { + as = y58; + bs = y59; + y58 = ( ( as * FFT_RotVector_32[2 * 17 + 0] ) - ( bs * FFT_RotVector_32[2 * 17 + 1] ) ); + y59 = ( ( as * FFT_RotVector_32[2 * 17 + 1] ) + ( bs * FFT_RotVector_32[2 * 17 + 0] ) ); + }; + { + as = y60; + bs = y61; + y60 = ( ( as * FFT_RotVector_32[2 * 18 + 0] ) - ( bs * FFT_RotVector_32[2 * 18 + 1] ) ); + y61 = ( ( as * FFT_RotVector_32[2 * 18 + 1] ) + ( bs * FFT_RotVector_32[2 * 18 + 0] ) ); + }; + { + as = y62; + bs = y63; + y62 = ( ( as * FFT_RotVector_32[2 * 19 + 0] ) - ( bs * FFT_RotVector_32[2 * 19 + 1] ) ); + y63 = ( ( as * FFT_RotVector_32[2 * 19 + 1] ) + ( bs * FFT_RotVector_32[2 * 19 + 0] ) ); + }; + + t00 = ( y00 + y32 ); + t02 = ( y00 - y32 ); + t01 = ( y01 + y33 ); + t03 = ( y01 - y33 ); + t04 = ( y16 + y48 ); + t07 = ( y16 - y48 ); + t05 = ( y49 + y17 ); + t06 = ( y49 - y17 ); + + re[s * 0] = ( t00 + t04 ); + im[s * 0] = ( t01 + t05 ); + re[s * 8] = ( t02 - t06 ); + im[s * 8] = ( t03 - t07 ); + re[s * 16] = ( t00 - t04 ); + im[s * 16] = ( t01 - t05 ); + re[s * 24] = ( t02 + t06 ); + im[s * 24] = ( t03 + t07 ); + + t00 = ( y02 + y34 ); + t02 = ( y02 - y34 ); + t01 = ( y03 + y35 ); + t03 = ( y03 - y35 ); + t04 = ( y18 + y50 ); + t07 = ( y18 - y50 ); + t05 = ( y51 + y19 ); + t06 = ( y51 - y19 ); + + re[s * 1] = ( t00 + t04 ); + im[s * 1] = ( t01 + t05 ); + re[s * 9] = ( t02 - t06 ); + im[s * 9] = ( t03 - t07 ); + re[s * 17] = ( t00 - t04 ); + im[s * 17] = ( t01 - t05 ); + re[s * 25] = ( t02 + t06 ); + im[s * 25] = ( t03 + t07 ); + + t00 = ( y04 + y36 ); + t02 = ( y04 - y36 ); + t01 = ( y05 + y37 ); + t03 = ( y05 - y37 ); + t04 = ( y20 + y52 ); + t07 = ( y20 - y52 ); + t05 = ( y53 + y21 ); + t06 = ( y53 - y21 ); + + re[s * 2] = ( t00 + t04 ); + im[s * 2] = ( t01 + t05 ); + re[s * 10] = ( t02 - t06 ); + im[s * 10] = ( t03 - t07 ); + re[s * 18] = ( t00 - t04 ); + im[s * 18] = ( t01 - t05 ); + re[s * 26] = ( t02 + t06 ); + im[s * 26] = ( t03 + t07 ); + + t00 = ( y06 + y38 ); + t02 = ( y06 - y38 ); + t01 = ( y07 + y39 ); + t03 = ( y07 - y39 ); + t04 = ( y22 + y54 ); + t07 = ( y22 - y54 ); + t05 = ( y55 + y23 ); + t06 = ( y55 - y23 ); + + re[s * 3] = ( t00 + t04 ); + im[s * 3] = ( t01 + t05 ); + re[s * 11] = ( t02 - t06 ); + im[s * 11] = ( t03 - t07 ); + re[s * 19] = ( t00 - t04 ); + im[s * 19] = ( t01 - t05 ); + re[s * 27] = ( t02 + t06 ); + im[s * 27] = ( t03 + t07 ); + + t00 = ( y08 + y41 ); + t02 = ( y08 - y41 ); + t01 = ( y09 - y40 ); + t03 = ( y09 + y40 ); + t04 = ( y24 + y56 ); + t07 = ( y24 - y56 ); + t05 = ( y57 + y25 ); + t06 = ( y57 - y25 ); + + re[s * 4] = ( t00 + t04 ); + im[s * 4] = ( t01 + t05 ); + re[s * 12] = ( t02 - t06 ); + im[s * 12] = ( t03 - t07 ); + re[s * 20] = ( t00 - t04 ); + im[s * 20] = ( t01 - t05 ); + re[s * 28] = ( t02 + t06 ); + im[s * 28] = ( t03 + t07 ); + + t00 = ( y10 + y42 ); + t02 = ( y10 - y42 ); + t01 = ( y11 + y43 ); + t03 = ( y11 - y43 ); + t04 = ( y26 + y58 ); + t07 = ( y26 - y58 ); + t05 = ( y59 + y27 ); + t06 = ( y59 - y27 ); + + re[s * 5] = ( t00 + t04 ); + im[s * 5] = ( t01 + t05 ); + re[s * 13] = ( t02 - t06 ); + im[s * 13] = ( t03 - t07 ); + re[s * 21] = ( t00 - t04 ); + im[s * 21] = ( t01 - t05 ); + re[s * 29] = ( t02 + t06 ); + im[s * 29] = ( t03 + t07 ); + + t00 = ( y12 + y44 ); + t02 = ( y12 - y44 ); + t01 = ( y13 + y45 ); + t03 = ( y13 - y45 ); + t04 = ( y28 + y60 ); + t07 = ( y28 - y60 ); + t05 = ( y61 + y29 ); + t06 = ( y61 - y29 ); + + re[s * 6] = ( t00 + t04 ); + im[s * 6] = ( t01 + t05 ); + re[s * 14] = ( t02 - t06 ); + im[s * 14] = ( t03 - t07 ); + re[s * 22] = ( t00 - t04 ); + im[s * 22] = ( t01 - t05 ); + re[s * 30] = ( t02 + t06 ); + im[s * 30] = ( t03 + t07 ); + + t00 = ( y14 + y46 ); + t02 = ( y14 - y46 ); + t01 = ( y15 + y47 ); + t03 = ( y15 - y47 ); + t04 = ( y30 + y62 ); + t07 = ( y30 - y62 ); + t05 = ( y63 + y31 ); + t06 = ( y63 - y31 ); + + re[s * 7] = ( t00 + t04 ); + im[s * 7] = ( t01 + t05 ); + re[s * 15] = ( t02 - t06 ); + im[s * 15] = ( t03 - t07 ); + re[s * 23] = ( t00 - t04 ); + im[s * 23] = ( t01 - t05 ); + re[s * 31] = ( t02 + t06 ); + im[s * 31] = ( t03 + t07 ); + + return; +} + +static void fft_lenN( + float *re, + float *im, + const float *W, + const int16_t len, + const int16_t dim1, + const int16_t dim2, + const int16_t sx, + const int16_t sc, + const int16_t Woff ) +{ + int16_t i, j; + float x[L_FRAME_MAX * 2]; + + for ( i = 0; i < dim2; i++ ) + { + for ( j = 0; j < dim1; j++ ) + { + x[2 * i * dim1 + 2 * j] = re[sx * i + sx * j * dim2]; + x[2 * i * dim1 + 2 * j + 1] = im[sx * i + sx * j * dim2]; + } + } + + switch ( dim1 ) + { + case 5: + for ( i = 0; i < dim2; i++ ) + { + fft_len5( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + + case 8: + for ( i = 0; i < dim2; i++ ) + { + fft_len8( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + + case 10: + for ( i = 0; i < dim2; i++ ) + { + fft_len10( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + + case 15: + for ( i = 0; i < dim2; i++ ) + { + fft_len15( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + + case 16: + for ( i = 0; i < dim2; i++ ) + { + fft_len16( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + + case 20: + for ( i = 0; i < dim2; i++ ) + { + fft_len20( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + + case 30: + for ( i = 0; i < dim2; i++ ) + { + fft_len30( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + + case 32: + for ( i = 0; i < dim2; i++ ) + { + fft_len32( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + break; + } + + switch ( dim2 ) + { + + case 8: + { + float x00, x01, x02, x03, x04, x05, x06, x07, x08, x09, x10, x11, x12, x13, x14, x15; + float t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15; + float s00, s01, s02, s03, s04, s05, s06, s07, s08, s09, s10, s11, s12, s13, s14, s15; + + if ( dim1 == 30 || dim1 == 20 || dim1 == 15 || dim1 == 10 || dim1 == 5 ) + { + for ( i = 0; i < dim1; i++ ) + { + { + x00 = x[2 * i + 2 * 0 * dim1]; + x01 = x[2 * i + 2 * 0 * dim1 + 1]; + }; + if ( i == 0 ) + { + { + x02 = x[2 * i + 2 * 1 * dim1]; + x03 = x[2 * i + 2 * 1 * dim1 + 1]; + }; + { + x04 = x[2 * i + 2 * 2 * dim1]; + x05 = x[2 * i + 2 * 2 * dim1 + 1]; + }; + { + x06 = x[2 * i + 2 * 3 * dim1]; + x07 = x[2 * i + 2 * 3 * dim1 + 1]; + }; + { + x08 = x[2 * i + 2 * 4 * dim1]; + x09 = x[2 * i + 2 * 4 * dim1 + 1]; + }; + { + x10 = x[2 * i + 2 * 5 * dim1]; + x11 = x[2 * i + 2 * 5 * dim1 + 1]; + }; + { + x12 = x[2 * i + 2 * 6 * dim1]; + x13 = x[2 * i + 2 * 6 * dim1 + 1]; + }; + { + x14 = x[2 * i + 2 * 7 * dim1]; + x15 = x[2 * i + 2 * 7 * dim1 + 1]; + }; + } + else + { + { + x02 = ( x[2 * i + 2 * 1 * dim1] * W[sc * i + sc * 1 * dim1 * 2 - Woff] ) - ( x[2 * i + 2 * 1 * dim1 + 1] * W[sc * i + sc * 1 * dim1 * 2 + 1 - Woff] ); + x03 = ( x[2 * i + 2 * 1 * dim1] * W[sc * i + sc * 1 * dim1 * 2 + 1 - Woff] ) + ( x[2 * i + 2 * 1 * dim1 + 1] * W[sc * i + sc * 1 * dim1 * 2 - Woff] ); + }; + { + x04 = ( x[2 * i + 2 * 2 * dim1] * W[sc * i + sc * 2 * dim1 * 2 - Woff] ) - ( x[2 * i + 2 * 2 * dim1 + 1] * W[sc * i + sc * 2 * dim1 * 2 + 1 - Woff] ); + x05 = ( x[2 * i + 2 * 2 * dim1] * W[sc * i + sc * 2 * dim1 * 2 + 1 - Woff] ) + ( x[2 * i + 2 * 2 * dim1 + 1] * W[sc * i + sc * 2 * dim1 * 2 - Woff] ); + }; + { + x06 = ( x[2 * i + 2 * 3 * dim1] * W[sc * i + sc * 3 * dim1 * 2 - Woff] ) - ( x[2 * i + 2 * 3 * dim1 + 1] * W[sc * i + sc * 3 * dim1 * 2 + 1 - Woff] ); + x07 = ( x[2 * i + 2 * 3 * dim1] * W[sc * i + sc * 3 * dim1 * 2 + 1 - Woff] ) + ( x[2 * i + 2 * 3 * dim1 + 1] * W[sc * i + sc * 3 * dim1 * 2 - Woff] ); + }; + { + x08 = ( x[2 * i + 2 * 4 * dim1] * W[sc * i + sc * 4 * dim1 * 2 - Woff] ) - ( x[2 * i + 2 * 4 * dim1 + 1] * W[sc * i + sc * 4 * dim1 * 2 + 1 - Woff] ); + x09 = ( x[2 * i + 2 * 4 * dim1] * W[sc * i + sc * 4 * dim1 * 2 + 1 - Woff] ) + ( x[2 * i + 2 * 4 * dim1 + 1] * W[sc * i + sc * 4 * dim1 * 2 - Woff] ); + }; + { + x10 = ( x[2 * i + 2 * 5 * dim1] * W[sc * i + sc * 5 * dim1 * 2 - Woff] ) - ( x[2 * i + 2 * 5 * dim1 + 1] * W[sc * i + sc * 5 * dim1 * 2 + 1 - Woff] ); + x11 = ( x[2 * i + 2 * 5 * dim1] * W[sc * i + sc * 5 * dim1 * 2 + 1 - Woff] ) + ( x[2 * i + 2 * 5 * dim1 + 1] * W[sc * i + sc * 5 * dim1 * 2 - Woff] ); + }; + { + x12 = ( x[2 * i + 2 * 6 * dim1] * W[sc * i + sc * 6 * dim1 * 2 - Woff] ) - ( x[2 * i + 2 * 6 * dim1 + 1] * W[sc * i + sc * 6 * dim1 * 2 + 1 - Woff] ); + x13 = ( x[2 * i + 2 * 6 * dim1] * W[sc * i + sc * 6 * dim1 * 2 + 1 - Woff] ) + ( x[2 * i + 2 * 6 * dim1 + 1] * W[sc * i + sc * 6 * dim1 * 2 - Woff] ); + }; + { + x14 = ( x[2 * i + 2 * 7 * dim1] * W[sc * i + sc * 7 * dim1 * 2 - Woff] ) - ( x[2 * i + 2 * 7 * dim1 + 1] * W[sc * i + sc * 7 * dim1 * 2 + 1 - Woff] ); + x15 = ( x[2 * i + 2 * 7 * dim1] * W[sc * i + sc * 7 * dim1 * 2 + 1 - Woff] ) + ( x[2 * i + 2 * 7 * dim1 + 1] * W[sc * i + sc * 7 * dim1 * 2 - Woff] ); + }; + } + + t00 = ( x00 + x08 ); + t02 = ( x00 - x08 ); + t01 = ( x01 + x09 ); + t03 = ( x01 - x09 ); + t04 = ( x02 + x10 ); + t06 = ( x02 - x10 ); + t05 = ( x03 + x11 ); + t07 = ( x03 - x11 ); + t08 = ( x04 + x12 ); + t10 = ( x04 - x12 ); + t09 = ( x05 + x13 ); + t11 = ( x05 - x13 ); + t12 = ( x06 + x14 ); + t14 = ( x06 - x14 ); + t13 = ( x07 + x15 ); + t15 = ( x07 - x15 ); + + s00 = ( t00 + t08 ); + s04 = ( t00 - t08 ); + s01 = ( t01 + t09 ); + s05 = ( t01 - t09 ); + s08 = ( t02 - t11 ); + s10 = ( t02 + t11 ); + s09 = ( t03 + t10 ); + s11 = ( t03 - t10 ); + s02 = ( t04 + t12 ); + s07 = ( t04 - t12 ); + s03 = ( t05 + t13 ); + s06 = ( t13 - t05 ); + + t01 = ( t06 + t14 ); + t02 = ( t06 - t14 ); + t00 = ( t07 + t15 ); + t03 = ( t07 - t15 ); + + s12 = ( ( t00 + t02 ) * FFT_C81 ); + s14 = ( ( t00 - t02 ) * FFT_C81 ); + s13 = ( ( t03 - t01 ) * FFT_C81 ); + s15 = ( ( t01 + t03 ) * FFT_C82 ); + + re[sx * i + sx * 0 * dim1] = ( s00 + s02 ); + im[sx * i + sx * 0 * dim1] = ( s01 + s03 ); + re[sx * i + sx * 1 * dim1] = ( s10 + s12 ); + im[sx * i + sx * 1 * dim1] = ( s11 + s13 ); + re[sx * i + sx * 2 * dim1] = ( s04 - s06 ); + im[sx * i + sx * 2 * dim1] = ( s05 - s07 ); + re[sx * i + sx * 3 * dim1] = ( s08 + s14 ); + im[sx * i + sx * 3 * dim1] = ( s09 + s15 ); + re[sx * i + sx * 4 * dim1] = ( s00 - s02 ); + im[sx * i + sx * 4 * dim1] = ( s01 - s03 ); + re[sx * i + sx * 5 * dim1] = ( s10 - s12 ); + im[sx * i + sx * 5 * dim1] = ( s11 - s13 ); + re[sx * i + sx * 6 * dim1] = ( s04 + s06 ); + im[sx * i + sx * 6 * dim1] = ( s05 + s07 ); + re[sx * i + sx * 7 * dim1] = ( s08 - s14 ); + im[sx * i + sx * 7 * dim1] = ( s09 - s15 ); + } + } + else + { + for ( i = 0; i < dim1; i++ ) + { + { + x00 = x[2 * i + 2 * 0 * dim1]; + x01 = x[2 * i + 2 * 0 * dim1 + 1]; + }; + if ( i == 0 ) + { + { + x02 = x[2 * i + 2 * 1 * dim1]; + x03 = x[2 * i + 2 * 1 * dim1 + 1]; + }; + { + x04 = x[2 * i + 2 * 2 * dim1]; + x05 = x[2 * i + 2 * 2 * dim1 + 1]; + }; + { + x06 = x[2 * i + 2 * 3 * dim1]; + x07 = x[2 * i + 2 * 3 * dim1 + 1]; + }; + { + x08 = x[2 * i + 2 * 4 * dim1]; + x09 = x[2 * i + 2 * 4 * dim1 + 1]; + }; + { + x10 = x[2 * i + 2 * 5 * dim1]; + x11 = x[2 * i + 2 * 5 * dim1 + 1]; + }; + { + x12 = x[2 * i + 2 * 6 * dim1]; + x13 = x[2 * i + 2 * 6 * dim1 + 1]; + }; + { + x14 = x[2 * i + 2 * 7 * dim1]; + x15 = x[2 * i + 2 * 7 * dim1 + 1]; + }; + } + else + { + { + x02 = ( x[2 * i + 2 * 1 * dim1] * W[sc * i + sc * 1 * dim1 - Woff] ) - ( x[2 * i + 2 * 1 * dim1 + 1] * W[sc * i + sc * 1 * dim1 + 1 - Woff] ); + x03 = ( x[2 * i + 2 * 1 * dim1] * W[sc * i + sc * 1 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * 1 * dim1 + 1] * W[sc * i + sc * 1 * dim1 - Woff] ); + }; + { + x04 = ( x[2 * i + 2 * 2 * dim1] * W[sc * i + sc * 2 * dim1 - Woff] ) - ( x[2 * i + 2 * 2 * dim1 + 1] * W[sc * i + sc * 2 * dim1 + 1 - Woff] ); + x05 = ( x[2 * i + 2 * 2 * dim1] * W[sc * i + sc * 2 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * 2 * dim1 + 1] * W[sc * i + sc * 2 * dim1 - Woff] ); + }; + { + x06 = ( x[2 * i + 2 * 3 * dim1] * W[sc * i + sc * 3 * dim1 - Woff] ) - ( x[2 * i + 2 * 3 * dim1 + 1] * W[sc * i + sc * 3 * dim1 + 1 - Woff] ); + x07 = ( x[2 * i + 2 * 3 * dim1] * W[sc * i + sc * 3 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * 3 * dim1 + 1] * W[sc * i + sc * 3 * dim1 - Woff] ); + }; + { + x08 = ( x[2 * i + 2 * 4 * dim1] * W[sc * i + sc * 4 * dim1 - Woff] ) - ( x[2 * i + 2 * 4 * dim1 + 1] * W[sc * i + sc * 4 * dim1 + 1 - Woff] ); + x09 = ( x[2 * i + 2 * 4 * dim1] * W[sc * i + sc * 4 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * 4 * dim1 + 1] * W[sc * i + sc * 4 * dim1 - Woff] ); + }; + { + x10 = ( x[2 * i + 2 * 5 * dim1] * W[sc * i + sc * 5 * dim1 - Woff] ) - ( x[2 * i + 2 * 5 * dim1 + 1] * W[sc * i + sc * 5 * dim1 + 1 - Woff] ); + x11 = ( x[2 * i + 2 * 5 * dim1] * W[sc * i + sc * 5 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * 5 * dim1 + 1] * W[sc * i + sc * 5 * dim1 - Woff] ); + }; + { + x12 = ( x[2 * i + 2 * 6 * dim1] * W[sc * i + sc * 6 * dim1 - Woff] ) - ( x[2 * i + 2 * 6 * dim1 + 1] * W[sc * i + sc * 6 * dim1 + 1 - Woff] ); + x13 = ( x[2 * i + 2 * 6 * dim1] * W[sc * i + sc * 6 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * 6 * dim1 + 1] * W[sc * i + sc * 6 * dim1 - Woff] ); + }; + { + x14 = ( x[2 * i + 2 * 7 * dim1] * W[sc * i + sc * 7 * dim1 - Woff] ) - ( x[2 * i + 2 * 7 * dim1 + 1] * W[sc * i + sc * 7 * dim1 + 1 - Woff] ); + x15 = ( x[2 * i + 2 * 7 * dim1] * W[sc * i + sc * 7 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * 7 * dim1 + 1] * W[sc * i + sc * 7 * dim1 - Woff] ); + }; + } + + t00 = ( x00 + x08 ); + t02 = ( x00 - x08 ); + t01 = ( x01 + x09 ); + t03 = ( x01 - x09 ); + t04 = ( x02 + x10 ); + t06 = ( x02 - x10 ); + t05 = ( x03 + x11 ); + t07 = ( x03 - x11 ); + t08 = ( x04 + x12 ); + t10 = ( x04 - x12 ); + t09 = ( x05 + x13 ); + t11 = ( x05 - x13 ); + t12 = ( x06 + x14 ); + t14 = ( x06 - x14 ); + t13 = ( x07 + x15 ); + t15 = ( x07 - x15 ); + + s00 = ( t00 + t08 ); + s04 = ( t00 - t08 ); + s01 = ( t01 + t09 ); + s05 = ( t01 - t09 ); + s08 = ( t02 - t11 ); + s10 = ( t02 + t11 ); + s09 = ( t03 + t10 ); + s11 = ( t03 - t10 ); + s02 = ( t04 + t12 ); + s07 = ( t04 - t12 ); + s03 = ( t05 + t13 ); + s06 = ( t13 - t05 ); + + t01 = ( t06 + t14 ); + t02 = ( t06 - t14 ); + t00 = ( t07 + t15 ); + t03 = ( t07 - t15 ); + + s12 = ( ( t00 + t02 ) * FFT_C81 ); + s14 = ( ( t00 - t02 ) * FFT_C81 ); + s13 = ( ( t03 - t01 ) * FFT_C81 ); + s15 = ( ( t01 + t03 ) * FFT_C82 ); + + re[sx * i + sx * 0 * dim1] = ( s00 + s02 ); + im[sx * i + sx * 0 * dim1] = ( s01 + s03 ); + re[sx * i + sx * 1 * dim1] = ( s10 + s12 ); + im[sx * i + sx * 1 * dim1] = ( s11 + s13 ); + re[sx * i + sx * 2 * dim1] = ( s04 - s06 ); + im[sx * i + sx * 2 * dim1] = ( s05 - s07 ); + re[sx * i + sx * 3 * dim1] = ( s08 + s14 ); + im[sx * i + sx * 3 * dim1] = ( s09 + s15 ); + re[sx * i + sx * 4 * dim1] = ( s00 - s02 ); + im[sx * i + sx * 4 * dim1] = ( s01 - s03 ); + re[sx * i + sx * 5 * dim1] = ( s10 - s12 ); + im[sx * i + sx * 5 * dim1] = ( s11 - s13 ); + re[sx * i + sx * 6 * dim1] = ( s04 + s06 ); + im[sx * i + sx * 6 * dim1] = ( s05 + s07 ); + re[sx * i + sx * 7 * dim1] = ( s08 - s14 ); + im[sx * i + sx * 7 * dim1] = ( s09 - s15 ); + } + } + break; + } + + case 10: + { + float y[2 * 10]; + for ( j = 0; j < dim2; j++ ) + { + { + y[2 * j] = x[2 * 0 + 2 * j * dim1]; + y[2 * j + 1] = x[2 * 0 + 2 * j * dim1 + 1]; + }; + } + fft_len10( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * 0 + sx * j * dim1] = y[2 * j]; + im[sx * 0 + sx * j * dim1] = y[2 * j + 1]; + } + + for ( i = 1; i < dim1; i++ ) + { + { + y[2 * ( 0 + 0 )] = x[2 * i + 2 * ( 0 + 0 ) * dim1]; + y[2 * ( 0 + 0 ) + 1] = x[2 * i + 2 * ( 0 + 0 ) * dim1 + 1]; + } + + for ( j = 1; j < dim2; j++ ) + { + { + y[2 * ( j + 0 )] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + sc * j * dim1 - Woff] ) - ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + sc * j * dim1 + 1 - Woff] ); + y[2 * ( j + 0 ) + 1] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + sc * j * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + sc * j * dim1 - Woff] ); + } + } + fft_len10( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * i + sx * j * dim1] = y[2 * j]; + im[sx * i + sx * j * dim1] = y[2 * j + 1]; + } + } + break; + } + + case 16: + { + float y[2 * 16]; + for ( j = 0; j < dim2; j++ ) + { + { + y[2 * j] = x[2 * 0 + 2 * j * dim1]; + y[2 * j + 1] = x[2 * 0 + 2 * j * dim1 + 1]; + }; + } + fft_len16( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * 0 + sx * j * dim1] = y[2 * j]; + im[sx * 0 + sx * j * dim1] = y[2 * j + 1]; + } + + for ( i = 1; i < dim1; i++ ) + { + { + y[2 * ( 0 + 0 )] = x[2 * i + 2 * ( 0 + 0 ) * dim1]; + y[2 * ( 0 + 0 ) + 1] = x[2 * i + 2 * ( 0 + 0 ) * dim1 + 1]; + } + + for ( j = 1; j < dim2; j++ ) + { + { + y[2 * ( j + 0 )] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + sc * j * dim1 - Woff] ) - ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + sc * j * dim1 + 1 - Woff] ); + y[2 * ( j + 0 ) + 1] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + sc * j * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + sc * j * dim1 - Woff] ); + } + } + fft_len16( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * i + sx * j * dim1] = y[2 * j]; + im[sx * i + sx * j * dim1] = y[2 * j + 1]; + } + } + break; + } + + case 20: + { + float y[2 * 20]; + for ( j = 0; j < dim2; j++ ) + { + { + y[2 * j] = x[2 * 0 + 2 * j * dim1]; + y[2 * j + 1] = x[2 * 0 + 2 * j * dim1 + 1]; + }; + } + fft_len20( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * 0 + sx * j * dim1] = y[2 * j]; + im[sx * 0 + sx * j * dim1] = y[2 * j + 1]; + } + + for ( i = 1; i < dim1; i++ ) + { + { + y[2 * ( 0 + 0 )] = x[2 * i + 2 * ( 0 + 0 ) * dim1]; + y[2 * ( 0 + 0 ) + 1] = x[2 * i + 2 * ( 0 + 0 ) * dim1 + 1]; + } + { + y[2 * ( 0 + 1 )] = ( x[2 * i + 2 * ( 0 + 1 ) * dim1] * W[len + sc * i + 0 * dim1 - Woff] ) - ( x[2 * i + 2 * ( 0 + 1 ) * dim1 + 1] * W[len + sc * i + 0 * dim1 + 1 - Woff] ); + y[2 * ( 0 + 1 ) + 1] = ( x[2 * i + 2 * ( 0 + 1 ) * dim1] * W[len + sc * i + 0 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( 0 + 1 ) * dim1 + 1] * W[len + sc * i + 0 * dim1 - Woff] ); + } + + for ( j = 2; j < dim2; j = j + 2 ) + { + { + y[2 * ( j + 0 )] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + j * dim1 - Woff] ) - ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + j * dim1 + 1 - Woff] ); + y[2 * ( j + 0 ) + 1] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + j * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + j * dim1 - Woff] ); + } + { + y[2 * ( j + 1 )] = ( x[2 * i + 2 * ( j + 1 ) * dim1] * W[len + sc * i + j * dim1 - Woff] ) - ( x[2 * i + 2 * ( j + 1 ) * dim1 + 1] * W[len + sc * i + j * dim1 + 1 - Woff] ); + y[2 * ( j + 1 ) + 1] = ( x[2 * i + 2 * ( j + 1 ) * dim1] * W[len + sc * i + j * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( j + 1 ) * dim1 + 1] * W[len + sc * i + j * dim1 - Woff] ); + } + } + fft_len20( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * i + sx * j * dim1] = y[2 * j]; + im[sx * i + sx * j * dim1] = y[2 * j + 1]; + } + } + break; + } + + case 32: + { + float y[2 * 32]; + for ( j = 0; j < dim2; j++ ) + { + { + y[2 * j] = x[2 * 0 + 2 * j * dim1]; + y[2 * j + 1] = x[2 * 0 + 2 * j * dim1 + 1]; + }; + } + fft_len32( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * 0 + sx * j * dim1] = y[2 * j]; + im[sx * 0 + sx * j * dim1] = y[2 * j + 1]; + } + + for ( i = 1; i < dim1; i++ ) + { + { + y[2 * ( 0 + 0 )] = x[2 * i + 2 * ( 0 + 0 ) * dim1]; + y[2 * ( 0 + 0 ) + 1] = x[2 * i + 2 * ( 0 + 0 ) * dim1 + 1]; + } + { + y[2 * ( 0 + 1 )] = ( x[2 * i + 2 * ( 0 + 1 ) * dim1] * W[len + sc * i + 0 * dim1 - Woff] ) - ( x[2 * i + 2 * ( 0 + 1 ) * dim1 + 1] * W[len + sc * i + 0 * dim1 + 1 - Woff] ); + y[2 * ( 0 + 1 ) + 1] = ( x[2 * i + 2 * ( 0 + 1 ) * dim1] * W[len + sc * i + 0 * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( 0 + 1 ) * dim1 + 1] * W[len + sc * i + 0 * dim1 - Woff] ); + } + + for ( j = 2; j < dim2; j = j + 2 ) + { + { + y[2 * ( j + 0 )] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + j * dim1 - Woff] ) - ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + j * dim1 + 1 - Woff] ); + y[2 * ( j + 0 ) + 1] = ( x[2 * i + 2 * ( j + 0 ) * dim1] * W[sc * i + j * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( j + 0 ) * dim1 + 1] * W[sc * i + j * dim1 - Woff] ); + } + { + y[2 * ( j + 1 )] = ( x[2 * i + 2 * ( j + 1 ) * dim1] * W[len + sc * i + j * dim1 - Woff] ) - ( x[2 * i + 2 * ( j + 1 ) * dim1 + 1] * W[len + sc * i + j * dim1 + 1 - Woff] ); + y[2 * ( j + 1 ) + 1] = ( x[2 * i + 2 * ( j + 1 ) * dim1] * W[len + sc * i + j * dim1 + 1 - Woff] ) + ( x[2 * i + 2 * ( j + 1 ) * dim1 + 1] * W[len + sc * i + j * dim1 - Woff] ); + } + } + fft_len32( &y[0], &y[1], 2 ); + for ( j = 0; j < dim2; j++ ) + { + re[sx * i + sx * j * dim1] = y[2 * j]; + im[sx * i + sx * j * dim1] = y[2 * j + 1]; + } + } + break; + } + } + + return; +} + + +/*-----------------------------------------------------------------* + * fft() + * + * Complex-value FFT + *-----------------------------------------------------------------*/ + +void fft( + float *re, /* i/o: real part */ + float *im, /* i/o: imag part */ + const int16_t length, /* i : length of fft */ + const int16_t s /* i : sign */ +) +{ + switch ( length ) + { + case 20: + fft_len20( re, im, s ); + break; + case 40: + fft_lenN( re, im, FFT_RotVector_640, 640, 5, 8, s, 8, 40 ); + break; + case 64: + fft_lenN( re, im, FFT_RotVector_256, 256, 8, 8, s, 8, 64 ); + break; + case 80: + fft_lenN( re, im, FFT_RotVector_640, 640, 10, 8, s, 4, 40 ); + break; + case 100: + fft_lenN( re, im, FFT_RotVector_400, 400, 10, 10, s, 4, 40 ); + break; + case 120: + fft_lenN( re, im, FFT_RotVector_960, 960, 15, 8, s, 4, 60 ); + break; + case 128: + fft_lenN( re, im, FFT_RotVector_256, 256, 16, 8, s, 4, 64 ); + break; + case 160: + fft_lenN( re, im, FFT_RotVector_640, 640, 20, 8, s, 2, 40 ); + break; + case 200: + fft_lenN( re, im, FFT_RotVector_400, 400, 20, 10, s, 2, 40 ); + break; + case 240: + fft_lenN( re, im, FFT_RotVector_960, 960, 30, 8, s, 2, 60 ); + break; + case 256: + fft_lenN( re, im, FFT_RotVector_256, 256, 32, 8, s, 2, 64 ); + break; + case 320: + fft_lenN( re, im, FFT_RotVector_640, 640, 20, 16, s, 2, 40 ); + break; + case 400: + fft_lenN( re, im, FFT_RotVector_400, 400, 20, 20, s, 2, 40 ); + break; + case 480: + fft_lenN( re, im, FFT_RotVector_960, 960, 30, 16, s, 2, 60 ); + break; + case 600: + fft_lenN( re, im, FFT_RotVector_600, 600, 30, 20, s, 2, 60 ); + break; + case 640: + fft_lenN( re, im, FFT_RotVector_640, 640, 20, 32, s, 2, 40 ); + break; + case 960: + fft_lenN( re, im, FFT_RotVector_960, 960, 30, 32, s, 2, 60 ); + break; + default: + assert( !"fft length is not supported!" ); + } + + return; +} + + +/*-----------------------------------------------------------------* + * rfft() + * + * Real-value FFT + *-----------------------------------------------------------------*/ + +void rfft( + float *x, /* i/o: values */ + const float *w, /* i : window */ + const int16_t length, /* i : length of fft */ + const int16_t isign /* i : sign */ +) +{ + int16_t i, sizeOfFft2, sizeOfFft4; + float tmp, t1, t2, t3, t4, s1, s2; + + sizeOfFft2 = length >> 1; + sizeOfFft4 = length >> 2; + s1 = 1.f / (float) sizeOfFft2; + s2 = -1.f / (float) sizeOfFft2; + + switch ( isign ) + { + + case -1: + + fft( x, x + 1, sizeOfFft2, 2 ); + + tmp = x[0] + x[1]; + x[1] = x[0] - x[1]; + x[0] = tmp; + + for ( i = 1; i <= sizeOfFft4; i++ ) + { + t1 = x[2 * i] - x[length - 2 * i]; + t2 = x[2 * i + 1] + x[length - 2 * i + 1]; + t3 = w[i] * t1 - w[i + sizeOfFft4] * t2; + t4 = w[i + sizeOfFft4] * t1 + w[i] * t2; + t1 = x[2 * i] + x[length - 2 * i]; + t2 = x[2 * i + 1] - x[length - 2 * i + 1]; + + x[2 * i] = ( t1 - t3 ) * 0.5f; + x[2 * i + 1] = ( t2 - t4 ) * 0.5f; + x[length - 2 * i] = ( t1 + t3 ) * 0.5f; + x[length - 2 * i + 1] = -( t2 + t4 ) * 0.5f; + } + + break; + + case +1: + + tmp = ( x[0] + x[1] ) * 0.5f; + x[1] = ( x[1] - x[0] ) * 0.5f; + x[0] = tmp; + + for ( i = 1; i <= sizeOfFft4; i++ ) + { + t1 = x[2 * i] - x[length - 2 * i]; + t2 = x[2 * i + 1] + x[length - 2 * i + 1]; + t3 = w[i] * t1 + w[i + sizeOfFft4] * t2; + t4 = -w[i + sizeOfFft4] * t1 + w[i] * t2; + t1 = x[2 * i] + x[length - 2 * i]; + t2 = x[2 * i + 1] - x[length - 2 * i + 1]; + + x[2 * i] = ( t1 - t3 ) * 0.5f; + x[2 * i + 1] = ( t4 - t2 ) * 0.5f; + x[length - 2 * i] = ( t1 + t3 ) * 0.5f; + x[length - 2 * i + 1] = ( t2 + t4 ) * 0.5f; + } + + fft( x, x + 1, sizeOfFft2, 2 ); + + for ( i = 0; i < length; i += 2 ) + { + x[i] *= s1; + x[i + 1] *= s2; + } + + break; + } + + return; +} + + +#define WMC_TOOL_MAN + +#define SCALEFACTOR8 ( 4 ) +#define SCALEFACTOR64 ( 7 ) +#define SCALEFACTORN2 ( 3 ) + +#define SHC( x ) ( (Word16) x ) +#define FFTC( x ) WORD322WORD16( (Word32) x ) + +#define C81_FX ( FFTC( 0x5a82799a ) ) /* FL2WORD32( 7.071067811865475e-1) */ +#define C82_FX ( FFTC( 0xa57d8666 ) ) /* FL2WORD32(-7.071067811865475e-1) */ + +#define cplxMpy4_8_0( re, im, a, b, c, d ) \ + re = L_shr( L_sub( Mpy_32_16( a, c ), Mpy_32_16( b, d ) ), 1 ); \ + im = L_shr( L_add( Mpy_32_16( a, d ), Mpy_32_16( b, c ) ), 1 ); + +#define cplxMpy4_8_1( re, im, a, b ) \ + re = L_shr( a, 1 ); \ + im = L_shr( b, 1 ); + + +/** + * \brief Twiddle factors are unscaled + */ +static const Word16 RotVector_256[2 * ( 256 - 32 )] = { + SHC( 0x7fff ), SHC( 0x0000 ), SHC( 0x7ff6 ), SHC( 0xfcdc ), SHC( 0x7fd9 ), SHC( 0xf9b8 ), SHC( 0x7fa7 ), SHC( 0xf695 ), + SHC( 0x7f62 ), SHC( 0xf374 ), SHC( 0x7f0a ), SHC( 0xf055 ), SHC( 0x7e9d ), SHC( 0xed38 ), SHC( 0x7e1e ), SHC( 0xea1e ), + SHC( 0x7d8a ), SHC( 0xe707 ), SHC( 0x7ce4 ), SHC( 0xe3f4 ), SHC( 0x7c2a ), SHC( 0xe0e6 ), SHC( 0x7b5d ), SHC( 0xdddc ), + SHC( 0x7a7d ), SHC( 0xdad8 ), SHC( 0x798a ), SHC( 0xd7d9 ), SHC( 0x7885 ), SHC( 0xd4e1 ), SHC( 0x776c ), SHC( 0xd1ef ), + SHC( 0x7642 ), SHC( 0xcf04 ), SHC( 0x7505 ), SHC( 0xcc21 ), SHC( 0x73b6 ), SHC( 0xc946 ), SHC( 0x7255 ), SHC( 0xc673 ), + SHC( 0x70e3 ), SHC( 0xc3a9 ), SHC( 0x6f5f ), SHC( 0xc0e9 ), SHC( 0x6dca ), SHC( 0xbe32 ), SHC( 0x6c24 ), SHC( 0xbb85 ), + SHC( 0x6a6e ), SHC( 0xb8e3 ), SHC( 0x68a7 ), SHC( 0xb64c ), SHC( 0x66d0 ), SHC( 0xb3c0 ), SHC( 0x64e9 ), SHC( 0xb140 ), + SHC( 0x62f2 ), SHC( 0xaecc ), SHC( 0x60ec ), SHC( 0xac65 ), SHC( 0x5ed7 ), SHC( 0xaa0a ), SHC( 0x5cb4 ), SHC( 0xa7bd ), + SHC( 0x7fff ), SHC( 0x0000 ), SHC( 0x7fd9 ), SHC( 0xf9b8 ), SHC( 0x7f62 ), SHC( 0xf374 ), SHC( 0x7e9d ), SHC( 0xed38 ), + SHC( 0x7d8a ), SHC( 0xe707 ), SHC( 0x7c2a ), SHC( 0xe0e6 ), SHC( 0x7a7d ), SHC( 0xdad8 ), SHC( 0x7885 ), SHC( 0xd4e1 ), + SHC( 0x7642 ), SHC( 0xcf04 ), SHC( 0x73b6 ), SHC( 0xc946 ), SHC( 0x70e3 ), SHC( 0xc3a9 ), SHC( 0x6dca ), SHC( 0xbe32 ), + SHC( 0x6a6e ), SHC( 0xb8e3 ), SHC( 0x66d0 ), SHC( 0xb3c0 ), SHC( 0x62f2 ), SHC( 0xaecc ), SHC( 0x5ed7 ), SHC( 0xaa0a ), + SHC( 0x5a82 ), SHC( 0xa57e ), SHC( 0x55f6 ), SHC( 0xa129 ), SHC( 0x5134 ), SHC( 0x9d0e ), SHC( 0x4c40 ), SHC( 0x9930 ), + SHC( 0x471d ), SHC( 0x9592 ), SHC( 0x41ce ), SHC( 0x9236 ), SHC( 0x3c57 ), SHC( 0x8f1d ), SHC( 0x36ba ), SHC( 0x8c4a ), + SHC( 0x30fc ), SHC( 0x89be ), SHC( 0x2b1f ), SHC( 0x877b ), SHC( 0x2528 ), SHC( 0x8583 ), SHC( 0x1f1a ), SHC( 0x83d6 ), + SHC( 0x18f9 ), SHC( 0x8276 ), SHC( 0x12c8 ), SHC( 0x8163 ), SHC( 0x0c8c ), SHC( 0x809e ), SHC( 0x0648 ), SHC( 0x8027 ), + SHC( 0x7fff ), SHC( 0x0000 ), SHC( 0x7fa7 ), SHC( 0xf695 ), SHC( 0x7e9d ), SHC( 0xed38 ), SHC( 0x7ce4 ), SHC( 0xe3f4 ), + SHC( 0x7a7d ), SHC( 0xdad8 ), SHC( 0x776c ), SHC( 0xd1ef ), SHC( 0x73b6 ), SHC( 0xc946 ), SHC( 0x6f5f ), SHC( 0xc0e9 ), + SHC( 0x6a6e ), SHC( 0xb8e3 ), SHC( 0x64e9 ), SHC( 0xb140 ), SHC( 0x5ed7 ), SHC( 0xaa0a ), SHC( 0x5843 ), SHC( 0xa34c ), + SHC( 0x5134 ), SHC( 0x9d0e ), SHC( 0x49b4 ), SHC( 0x9759 ), SHC( 0x41ce ), SHC( 0x9236 ), SHC( 0x398d ), SHC( 0x8dab ), + SHC( 0x30fc ), SHC( 0x89be ), SHC( 0x2827 ), SHC( 0x8676 ), SHC( 0x1f1a ), SHC( 0x83d6 ), SHC( 0x15e2 ), SHC( 0x81e2 ), + SHC( 0x0c8c ), SHC( 0x809e ), SHC( 0x0324 ), SHC( 0x800a ), SHC( 0xf9b8 ), SHC( 0x8027 ), SHC( 0xf055 ), SHC( 0x80f6 ), + SHC( 0xe707 ), SHC( 0x8276 ), SHC( 0xdddc ), SHC( 0x84a3 ), SHC( 0xd4e1 ), SHC( 0x877b ), SHC( 0xcc21 ), SHC( 0x8afb ), + SHC( 0xc3a9 ), SHC( 0x8f1d ), SHC( 0xbb85 ), SHC( 0x93dc ), SHC( 0xb3c0 ), SHC( 0x9930 ), SHC( 0xac65 ), SHC( 0x9f14 ), + SHC( 0x7fff ), SHC( 0x0000 ), SHC( 0x7f62 ), SHC( 0xf374 ), SHC( 0x7d8a ), SHC( 0xe707 ), SHC( 0x7a7d ), SHC( 0xdad8 ), + SHC( 0x7642 ), SHC( 0xcf04 ), SHC( 0x70e3 ), SHC( 0xc3a9 ), SHC( 0x6a6e ), SHC( 0xb8e3 ), SHC( 0x62f2 ), SHC( 0xaecc ), + SHC( 0x5a82 ), SHC( 0xa57e ), SHC( 0x5134 ), SHC( 0x9d0e ), SHC( 0x471d ), SHC( 0x9592 ), SHC( 0x3c57 ), SHC( 0x8f1d ), + SHC( 0x30fc ), SHC( 0x89be ), SHC( 0x2528 ), SHC( 0x8583 ), SHC( 0x18f9 ), SHC( 0x8276 ), SHC( 0x0c8c ), SHC( 0x809e ), + SHC( 0x0000 ), SHC( 0x8000 ), SHC( 0xf374 ), SHC( 0x809e ), SHC( 0xe707 ), SHC( 0x8276 ), SHC( 0xdad8 ), SHC( 0x8583 ), + SHC( 0xcf04 ), SHC( 0x89be ), SHC( 0xc3a9 ), SHC( 0x8f1d ), SHC( 0xb8e3 ), SHC( 0x9592 ), SHC( 0xaecc ), SHC( 0x9d0e ), + SHC( 0xa57e ), SHC( 0xa57e ), SHC( 0x9d0e ), SHC( 0xaecc ), SHC( 0x9592 ), SHC( 0xb8e3 ), SHC( 0x8f1d ), SHC( 0xc3a9 ), + SHC( 0x89be ), SHC( 0xcf04 ), SHC( 0x8583 ), SHC( 0xdad8 ), SHC( 0x8276 ), SHC( 0xe707 ), SHC( 0x809e ), SHC( 0xf374 ), + SHC( 0x7fff ), SHC( 0x0000 ), SHC( 0x7f0a ), SHC( 0xf055 ), SHC( 0x7c2a ), SHC( 0xe0e6 ), SHC( 0x776c ), SHC( 0xd1ef ), + SHC( 0x70e3 ), SHC( 0xc3a9 ), SHC( 0x68a7 ), SHC( 0xb64c ), SHC( 0x5ed7 ), SHC( 0xaa0a ), SHC( 0x539b ), SHC( 0x9f14 ), + SHC( 0x471d ), SHC( 0x9592 ), SHC( 0x398d ), SHC( 0x8dab ), SHC( 0x2b1f ), SHC( 0x877b ), SHC( 0x1c0c ), SHC( 0x831c ), + SHC( 0x0c8c ), SHC( 0x809e ), SHC( 0xfcdc ), SHC( 0x800a ), SHC( 0xed38 ), SHC( 0x8163 ), SHC( 0xdddc ), SHC( 0x84a3 ), + SHC( 0xcf04 ), SHC( 0x89be ), SHC( 0xc0e9 ), SHC( 0x90a1 ), SHC( 0xb3c0 ), SHC( 0x9930 ), SHC( 0xa7bd ), SHC( 0xa34c ), + SHC( 0x9d0e ), SHC( 0xaecc ), SHC( 0x93dc ), SHC( 0xbb85 ), SHC( 0x8c4a ), SHC( 0xc946 ), SHC( 0x8676 ), SHC( 0xd7d9 ), + SHC( 0x8276 ), SHC( 0xe707 ), SHC( 0x8059 ), SHC( 0xf695 ), SHC( 0x8027 ), SHC( 0x0648 ), SHC( 0x81e2 ), SHC( 0x15e2 ), + SHC( 0x8583 ), SHC( 0x2528 ), SHC( 0x8afb ), SHC( 0x33df ), SHC( 0x9236 ), SHC( 0x41ce ), SHC( 0x9b17 ), SHC( 0x4ec0 ), + SHC( 0x7fff ), SHC( 0x0000 ), SHC( 0x7e9d ), SHC( 0xed38 ), SHC( 0x7a7d ), SHC( 0xdad8 ), SHC( 0x73b6 ), SHC( 0xc946 ), + SHC( 0x6a6e ), SHC( 0xb8e3 ), SHC( 0x5ed7 ), SHC( 0xaa0a ), SHC( 0x5134 ), SHC( 0x9d0e ), SHC( 0x41ce ), SHC( 0x9236 ), + SHC( 0x30fc ), SHC( 0x89be ), SHC( 0x1f1a ), SHC( 0x83d6 ), SHC( 0x0c8c ), SHC( 0x809e ), SHC( 0xf9b8 ), SHC( 0x8027 ), + SHC( 0xe707 ), SHC( 0x8276 ), SHC( 0xd4e1 ), SHC( 0x877b ), SHC( 0xc3a9 ), SHC( 0x8f1d ), SHC( 0xb3c0 ), SHC( 0x9930 ), + SHC( 0xa57e ), SHC( 0xa57e ), SHC( 0x9930 ), SHC( 0xb3c0 ), SHC( 0x8f1d ), SHC( 0xc3a9 ), SHC( 0x877b ), SHC( 0xd4e1 ), + SHC( 0x8276 ), SHC( 0xe707 ), SHC( 0x8027 ), SHC( 0xf9b8 ), SHC( 0x809e ), SHC( 0x0c8c ), SHC( 0x83d6 ), SHC( 0x1f1a ), + SHC( 0x89be ), SHC( 0x30fc ), SHC( 0x9236 ), SHC( 0x41ce ), SHC( 0x9d0e ), SHC( 0x5134 ), SHC( 0xaa0a ), SHC( 0x5ed7 ), + SHC( 0xb8e3 ), SHC( 0x6a6e ), SHC( 0xc946 ), SHC( 0x73b6 ), SHC( 0xdad8 ), SHC( 0x7a7d ), SHC( 0xed38 ), SHC( 0x7e9d ), + SHC( 0x7fff ), SHC( 0x0000 ), SHC( 0x7e1e ), SHC( 0xea1e ), SHC( 0x7885 ), SHC( 0xd4e1 ), SHC( 0x6f5f ), SHC( 0xc0e9 ), + SHC( 0x62f2 ), SHC( 0xaecc ), SHC( 0x539b ), SHC( 0x9f14 ), SHC( 0x41ce ), SHC( 0x9236 ), SHC( 0x2e11 ), SHC( 0x8894 ), + SHC( 0x18f9 ), SHC( 0x8276 ), SHC( 0x0324 ), SHC( 0x800a ), SHC( 0xed38 ), SHC( 0x8163 ), SHC( 0xd7d9 ), SHC( 0x8676 ), + SHC( 0xc3a9 ), SHC( 0x8f1d ), SHC( 0xb140 ), SHC( 0x9b17 ), SHC( 0xa129 ), SHC( 0xaa0a ), SHC( 0x93dc ), SHC( 0xbb85 ), + SHC( 0x89be ), SHC( 0xcf04 ), SHC( 0x831c ), SHC( 0xe3f4 ), SHC( 0x8027 ), SHC( 0xf9b8 ), SHC( 0x80f6 ), SHC( 0x0fab ), + SHC( 0x8583 ), SHC( 0x2528 ), SHC( 0x8dab ), SHC( 0x398d ), SHC( 0x9930 ), SHC( 0x4c40 ), SHC( 0xa7bd ), SHC( 0x5cb4 ), + SHC( 0xb8e3 ), SHC( 0x6a6e ), SHC( 0xcc21 ), SHC( 0x7505 ), SHC( 0xe0e6 ), SHC( 0x7c2a ), SHC( 0xf695 ), SHC( 0x7fa7 ), + SHC( 0x0c8c ), SHC( 0x7f62 ), SHC( 0x2224 ), SHC( 0x7b5d ), SHC( 0x36ba ), SHC( 0x73b6 ), SHC( 0x49b4 ), SHC( 0x68a7 ) +}; + +/*-----------------------------------------------------------------* + * BASOP_fft8() + * + * Function performs a complex 8-point FFT + * The FFT is performed inplace. The result of the FFT + * is scaled by SCALEFACTOR8 bits. + * + * WOPS with 32x16 bit multiplications: 108 cycles + *-----------------------------------------------------------------*/ + +static void BASOP_fft8( + Word32 *re, + Word32 *im, + Word16 s ) +{ + Word32 x00, x01, x02, x03, x04, x05, x06, x07; + Word32 x08, x09, x10, x11, x12, x13, x14, x15; + Word32 t00, t01, t02, t03, t04, t05, t06, t07; + Word32 t08, t09, t10, t11, t12, t13, t14, t15; + Word32 s00, s01, s02, s03, s04, s05, s06, s07; + Word32 s08, s09, s10, s11, s12, s13, s14, s15; + + + /* Pre-additions */ + + x00 = L_shr( re[s * 0], SCALEFACTOR8 ); + x01 = L_shr( im[s * 0], SCALEFACTOR8 ); + x02 = L_shr( re[s * 1], SCALEFACTOR8 ); + x03 = L_shr( im[s * 1], SCALEFACTOR8 ); + x04 = L_shr( re[s * 2], SCALEFACTOR8 ); + x05 = L_shr( im[s * 2], SCALEFACTOR8 ); + x06 = L_shr( re[s * 3], SCALEFACTOR8 ); + x07 = L_shr( im[s * 3], SCALEFACTOR8 ); + x08 = L_shr( re[s * 4], SCALEFACTOR8 ); + x09 = L_shr( im[s * 4], SCALEFACTOR8 ); + x10 = L_shr( re[s * 5], SCALEFACTOR8 ); + x11 = L_shr( im[s * 5], SCALEFACTOR8 ); + x12 = L_shr( re[s * 6], SCALEFACTOR8 ); + x13 = L_shr( im[s * 6], SCALEFACTOR8 ); + x14 = L_shr( re[s * 7], SCALEFACTOR8 ); + x15 = L_shr( im[s * 7], SCALEFACTOR8 ); + + t00 = L_add( x00, x08 ); + t02 = L_sub( x00, x08 ); + t01 = L_add( x01, x09 ); + t03 = L_sub( x01, x09 ); + t04 = L_add( x02, x10 ); + t06 = L_sub( x02, x10 ); + t05 = L_add( x03, x11 ); + t07 = L_sub( x03, x11 ); + t08 = L_add( x04, x12 ); + t10 = L_sub( x04, x12 ); + t09 = L_add( x05, x13 ); + t11 = L_sub( x05, x13 ); + t12 = L_add( x06, x14 ); + t14 = L_sub( x06, x14 ); + t13 = L_add( x07, x15 ); + t15 = L_sub( x07, x15 ); + + /* Pre-additions and core multiplications */ + + s00 = L_add( t00, t08 ); + s04 = L_sub( t00, t08 ); + s01 = L_add( t01, t09 ); + s05 = L_sub( t01, t09 ); + s08 = L_sub( t02, t11 ); + s10 = L_add( t02, t11 ); + s09 = L_add( t03, t10 ); + s11 = L_sub( t03, t10 ); + s02 = L_add( t04, t12 ); + s07 = L_sub( t04, t12 ); + s03 = L_add( t05, t13 ); + s06 = L_sub( t13, t05 ); + + t01 = L_add( t06, t14 ); + t02 = L_sub( t06, t14 ); + t00 = L_add( t07, t15 ); + t03 = L_sub( t07, t15 ); + + s12 = Mpy_32_16( L_add( t00, t02 ), C81_FX ); + s14 = Mpy_32_16( L_sub( t00, t02 ), C81_FX ); + s13 = Mpy_32_16( L_sub( t03, t01 ), C81_FX ); + s15 = Mpy_32_16( L_add( t01, t03 ), C82_FX ); + + /* Post-additions */ + + re[s * 0] = L_add( s00, s02 ); + move32(); + re[s * 4] = L_sub( s00, s02 ); + move32(); + im[s * 0] = L_add( s01, s03 ); + move32(); + im[s * 4] = L_sub( s01, s03 ); + move32(); + re[s * 2] = L_sub( s04, s06 ); + move32(); + re[s * 6] = L_add( s04, s06 ); + move32(); + im[s * 2] = L_sub( s05, s07 ); + move32(); + im[s * 6] = L_add( s05, s07 ); + move32(); + re[s * 3] = L_add( s08, s14 ); + move32(); + re[s * 7] = L_sub( s08, s14 ); + move32(); + im[s * 3] = L_add( s09, s15 ); + move32(); + im[s * 7] = L_sub( s09, s15 ); + move32(); + re[s * 1] = L_add( s10, s12 ); + move32(); + re[s * 5] = L_sub( s10, s12 ); + move32(); + im[s * 1] = L_add( s11, s13 ); + move32(); + im[s * 5] = L_sub( s11, s13 ); + move32(); + + return; +} + + +/*-----------------------------------------------------------------* + * fftN2() + * + * Combined FFT + *-----------------------------------------------------------------*/ + +static void BASOP_fftN2( + Word32 *re, /* i/o: real part */ + Word32 *im, /* i/o: imag part */ + const Word16 *W, /* i : rotation factor */ + Word16 dim1, /* i : length of fft1 */ + Word16 dim2, /* i : length of fft2 */ + Word16 sx, /* i : stride real and imag part */ + Word16 sc, /* i : stride phase rotation coefficients */ + Word32 *x, /* tmp: 32-bit workbuffer */ + Word16 Woff /* i : offset for addressing the rotation vector table */ +) +{ + Word16 i, j; + Word32 x00, x01, x02, x03, x04, x05, x06, x07, x08, x09, x10, x11, x12, x13, x14, x15; + Word32 t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15; + Word32 s00, s01, s02, s03, s04, s05, s06, s07, s08, s09, s10, s11, s12, s13, s14, s15; + + FOR( i = 0; i < dim2; i++ ) + { + FOR( j = 0; j < dim1; j++ ) + { + x[2 * i * dim1 + 2 * j] = re[sx * i + sx * j * dim2]; + move32(); + x[2 * i * dim1 + 2 * j + 1] = im[sx * i + sx * j * dim2]; + move32(); + } + } + + /* dim1 == 8 */ + FOR( i = 0; i < dim2; i++ ) + { + BASOP_fft8( &x[i * 2 * dim1], &x[i * 2 * dim1 + 1], 2 ); + } + + /* dim2 == 8 */ + FOR( i = 0; i < dim1; i++ ) + { + cplxMpy4_8_1( x00, x01, x[2 * i + 2 * 0 * dim1], x[2 * i + 2 * 0 * dim1 + 1] ); + + IF( i == 0 ) + { + cplxMpy4_8_1( x02, x03, x[2 * i + 2 * 1 * dim1], x[2 * i + 2 * 1 * dim1 + 1] ); + cplxMpy4_8_1( x04, x05, x[2 * i + 2 * 2 * dim1], x[2 * i + 2 * 2 * dim1 + 1] ); + cplxMpy4_8_1( x06, x07, x[2 * i + 2 * 3 * dim1], x[2 * i + 2 * 3 * dim1 + 1] ); + cplxMpy4_8_1( x08, x09, x[2 * i + 2 * 4 * dim1], x[2 * i + 2 * 4 * dim1 + 1] ); + cplxMpy4_8_1( x10, x11, x[2 * i + 2 * 5 * dim1], x[2 * i + 2 * 5 * dim1 + 1] ); + cplxMpy4_8_1( x12, x13, x[2 * i + 2 * 6 * dim1], x[2 * i + 2 * 6 * dim1 + 1] ); + cplxMpy4_8_1( x14, x15, x[2 * i + 2 * 7 * dim1], x[2 * i + 2 * 7 * dim1 + 1] ); + } + ELSE + { + cplxMpy4_8_0( x02, x03, x[2 * i + 2 * 1 * dim1], x[2 * i + 2 * 1 * dim1 + 1], W[sc * i + sc * 1 * dim1 - Woff], W[sc * i + sc * 1 * dim1 + 1 - Woff] ); + cplxMpy4_8_0( x04, x05, x[2 * i + 2 * 2 * dim1], x[2 * i + 2 * 2 * dim1 + 1], W[sc * i + sc * 2 * dim1 - Woff], W[sc * i + sc * 2 * dim1 + 1 - Woff] ); + cplxMpy4_8_0( x06, x07, x[2 * i + 2 * 3 * dim1], x[2 * i + 2 * 3 * dim1 + 1], W[sc * i + sc * 3 * dim1 - Woff], W[sc * i + sc * 3 * dim1 + 1 - Woff] ); + cplxMpy4_8_0( x08, x09, x[2 * i + 2 * 4 * dim1], x[2 * i + 2 * 4 * dim1 + 1], W[sc * i + sc * 4 * dim1 - Woff], W[sc * i + sc * 4 * dim1 + 1 - Woff] ); + cplxMpy4_8_0( x10, x11, x[2 * i + 2 * 5 * dim1], x[2 * i + 2 * 5 * dim1 + 1], W[sc * i + sc * 5 * dim1 - Woff], W[sc * i + sc * 5 * dim1 + 1 - Woff] ); + cplxMpy4_8_0( x12, x13, x[2 * i + 2 * 6 * dim1], x[2 * i + 2 * 6 * dim1 + 1], W[sc * i + sc * 6 * dim1 - Woff], W[sc * i + sc * 6 * dim1 + 1 - Woff] ); + cplxMpy4_8_0( x14, x15, x[2 * i + 2 * 7 * dim1], x[2 * i + 2 * 7 * dim1 + 1], W[sc * i + sc * 7 * dim1 - Woff], W[sc * i + sc * 7 * dim1 + 1 - Woff] ); + } + t00 = L_shr( L_add( x00, x08 ), SCALEFACTORN2 - 1 ); + t02 = L_shr( L_sub( x00, x08 ), SCALEFACTORN2 - 1 ); + t01 = L_shr( L_add( x01, x09 ), SCALEFACTORN2 - 1 ); + t03 = L_shr( L_sub( x01, x09 ), SCALEFACTORN2 - 1 ); + t04 = L_shr( L_add( x02, x10 ), SCALEFACTORN2 - 1 ); + t06 = L_sub( x02, x10 ); + t05 = L_shr( L_add( x03, x11 ), SCALEFACTORN2 - 1 ); + t07 = L_sub( x03, x11 ); + t08 = L_shr( L_add( x04, x12 ), SCALEFACTORN2 - 1 ); + t10 = L_shr( L_sub( x04, x12 ), SCALEFACTORN2 - 1 ); + t09 = L_shr( L_add( x05, x13 ), SCALEFACTORN2 - 1 ); + t11 = L_shr( L_sub( x05, x13 ), SCALEFACTORN2 - 1 ); + t12 = L_shr( L_add( x06, x14 ), SCALEFACTORN2 - 1 ); + t14 = L_sub( x06, x14 ); + t13 = L_shr( L_add( x07, x15 ), SCALEFACTORN2 - 1 ); + t15 = L_sub( x07, x15 ); + + s00 = L_add( t00, t08 ); + s04 = L_sub( t00, t08 ); + s01 = L_add( t01, t09 ); + s05 = L_sub( t01, t09 ); + s08 = L_sub( t02, t11 ); + s10 = L_add( t02, t11 ); + s09 = L_add( t03, t10 ); + s11 = L_sub( t03, t10 ); + s02 = L_add( t04, t12 ); + s07 = L_sub( t04, t12 ); + s03 = L_add( t05, t13 ); + s06 = L_sub( t13, t05 ); + + t01 = L_shr( L_add( t06, t14 ), SCALEFACTORN2 - 1 ); + t02 = L_shr( L_sub( t06, t14 ), SCALEFACTORN2 - 1 ); + t00 = L_shr( L_add( t07, t15 ), SCALEFACTORN2 - 1 ); + t03 = L_shr( L_sub( t07, t15 ), SCALEFACTORN2 - 1 ); + + s12 = Mpy_32_16( L_add( t00, t02 ), C81_FX ); + s14 = Mpy_32_16( L_sub( t00, t02 ), C81_FX ); + s13 = Mpy_32_16( L_sub( t03, t01 ), C81_FX ); + s15 = Mpy_32_16( L_add( t01, t03 ), C82_FX ); + + re[sx * i + sx * 0 * dim1] = L_add( s00, s02 ); + move32(); + im[sx * i + sx * 0 * dim1] = L_add( s01, s03 ); + move32(); + re[sx * i + sx * 1 * dim1] = L_add( s10, s12 ); + move32(); + im[sx * i + sx * 1 * dim1] = L_add( s11, s13 ); + move32(); + re[sx * i + sx * 2 * dim1] = L_sub( s04, s06 ); + move32(); + im[sx * i + sx * 2 * dim1] = L_sub( s05, s07 ); + move32(); + re[sx * i + sx * 3 * dim1] = L_add( s08, s14 ); + move32(); + im[sx * i + sx * 3 * dim1] = L_add( s09, s15 ); + move32(); + re[sx * i + sx * 4 * dim1] = L_sub( s00, s02 ); + move32(); + im[sx * i + sx * 4 * dim1] = L_sub( s01, s03 ); + move32(); + re[sx * i + sx * 5 * dim1] = L_sub( s10, s12 ); + move32(); + im[sx * i + sx * 5 * dim1] = L_sub( s11, s13 ); + move32(); + re[sx * i + sx * 6 * dim1] = L_add( s04, s06 ); + move32(); + im[sx * i + sx * 6 * dim1] = L_add( s05, s07 ); + move32(); + re[sx * i + sx * 7 * dim1] = L_sub( s08, s14 ); + move32(); + im[sx * i + sx * 7 * dim1] = L_sub( s09, s15 ); + move32(); + } + + return; +} + + +/*-----------------------------------------------------------------* + * BASOP_cfft() + * + * Complex valued FFT + *-----------------------------------------------------------------*/ + +void BASOP_cfft( + Word32 *re, /* i/o: real part */ + Word32 *im, /* i/o: imag part */ + Word16 s, /* i : stride real and imag part */ + Word16 *scale /* i : scalefactor */ +) +{ + Word32 x[2 * 64]; + + /* FFT for len = FDNS_NPTS */ + BASOP_fftN2( re, im, RotVector_256, 8, 8, s, 8, x, 64 ); + s = add( *scale, SCALEFACTOR64 ); + + *scale = s; + move16(); + + return; +} diff --git a/lib_com/fft_cldfb.c b/lib_com/fft_cldfb.c new file mode 100644 index 0000000000..6967f87bcd --- /dev/null +++ b/lib_com/fft_cldfb.c @@ -0,0 +1,1223 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "ivas_cnst.h" +#include "wmops.h" + +#if __STDC_VERSION__ >= 199901L +#if defined __ICL +#define restrict __restrict +#endif +#else +#define restrict +#endif + + +static void fft8( float *vec ); +static void fft10( float *vec ); +static void fft16( float *vec ); +static void fft20( float *vec ); +static void fft30( float *vec ); +static void fft5s( float *x, const int16_t stride ); + + +#define COS_PI_DIV8 9.238795325112867e-1f +#define COS_3PI_DIV8 3.826834323650898e-1f +#define SQRT2PLUS1 2.414213562373095f +#define SQRT2MINUS1 4.142135623730952e-1f + + +/******************************************************************************* + Functionname: fft8 + ******************************************************************************* + + Description: 8-point FFT. Complex-valued input takes 52 real additions + and 4 real multiplications. + + Arguments: vec - pointer to data (interleaved real / imaginary parts) + + Return: none + +*******************************************************************************/ +static void fft8( float *restrict vec ) +{ + float temp1[16]; + float temp2[16]; + + + /* Pre-additions */ + temp1[0] = vec[0] + vec[8]; + temp1[2] = vec[0] - vec[8]; + temp1[1] = vec[1] + vec[9]; + temp1[3] = vec[1] - vec[9]; + temp1[4] = vec[2] + vec[10]; + temp1[6] = vec[2] - vec[10]; + temp1[5] = vec[3] + vec[11]; + temp1[7] = vec[3] - vec[11]; + temp1[8] = vec[4] + vec[12]; + temp1[10] = vec[4] - vec[12]; + temp1[9] = vec[5] + vec[13]; + temp1[11] = vec[5] - vec[13]; + temp1[12] = vec[6] + vec[14]; + temp1[14] = vec[6] - vec[14]; + temp1[13] = vec[7] + vec[15]; + temp1[15] = vec[7] - vec[15]; + + /* Pre-additions and core multiplications */ + temp2[0] = temp1[0] + temp1[8]; + temp2[4] = temp1[0] - temp1[8]; + temp2[1] = temp1[1] + temp1[9]; + temp2[5] = temp1[1] - temp1[9]; + temp2[8] = temp1[2] - temp1[11]; + temp2[10] = temp1[2] + temp1[11]; + temp2[9] = temp1[3] + temp1[10]; + temp2[11] = temp1[3] - temp1[10]; + temp2[2] = temp1[4] + temp1[12]; + temp2[7] = temp1[4] - temp1[12]; + temp2[3] = temp1[5] + temp1[13]; + temp2[6] = temp1[13] - temp1[5]; + + temp1[1] = temp1[6] + temp1[14]; + temp1[2] = temp1[6] - temp1[14]; + temp1[0] = temp1[7] + temp1[15]; + temp1[3] = temp1[7] - temp1[15]; + + temp2[12] = ( temp1[0] + temp1[2] ) * INV_SQRT2; + temp2[14] = ( temp1[0] - temp1[2] ) * INV_SQRT2; + temp2[13] = ( temp1[3] - temp1[1] ) * INV_SQRT2; + temp2[15] = ( temp1[1] + temp1[3] ) * -INV_SQRT2; + + /* Post-additions */ + vec[0] = temp2[0] + temp2[2]; + vec[8] = temp2[0] - temp2[2]; + vec[1] = temp2[1] + temp2[3]; + vec[9] = temp2[1] - temp2[3]; + vec[4] = temp2[4] - temp2[6]; + vec[12] = temp2[4] + temp2[6]; + vec[5] = temp2[5] - temp2[7]; + vec[13] = temp2[5] + temp2[7]; + vec[6] = temp2[8] + temp2[14]; + vec[14] = temp2[8] - temp2[14]; + vec[7] = temp2[9] + temp2[15]; + vec[15] = temp2[9] - temp2[15]; + vec[2] = temp2[10] + temp2[12]; + vec[10] = temp2[10] - temp2[12]; + vec[3] = temp2[11] + temp2[13]; + vec[11] = temp2[11] - temp2[13]; + + return; +} + + +/******************************************************************************* + Functionname: fft16 + ******************************************************************************* + + Description: 16-point FFT. Complex-valued input takes 144 real additions and + 24 real multiplications. + + Arguments: vec - pointer to data (interleaved real / imaginary parts) + + Return: none + +*******************************************************************************/ +/* fast implementation, completely unrolled and inlined */ +static void fft16( float *restrict vec ) +{ + float temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, + temp18, temp19, temp110, temp111, temp112, temp113, temp114, temp115; + float temp20, temp21, temp22, temp23, temp24, temp25, temp26, temp27, + temp28, temp29, temp210, temp211, temp212, temp213, temp214, temp215; + float vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, + vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; + + + /* even */ + vec0 = vec[0] + vec[16]; + vec1 = vec[1] + vec[17]; + vec2 = vec[2] + vec[18]; + vec3 = vec[3] + vec[19]; + vec4 = vec[4] + vec[20]; + vec5 = vec[5] + vec[21]; + vec6 = vec[6] + vec[22]; + vec7 = vec[7] + vec[23]; + vec8 = vec[8] + vec[24]; + vec9 = vec[9] + vec[25]; + vec10 = vec[10] + vec[26]; + vec11 = vec[11] + vec[27]; + vec12 = vec[12] + vec[28]; + vec13 = vec[13] + vec[29]; + vec14 = vec[14] + vec[30]; + vec15 = vec[15] + vec[31]; + + /* Pre-additions */ + temp10 = vec0 + vec8; + temp12 = vec0 - vec8; + temp11 = vec1 + vec9; + temp13 = vec1 - vec9; + temp14 = vec2 + vec10; + temp16 = vec2 - vec10; + temp15 = vec3 + vec11; + temp17 = vec3 - vec11; + temp18 = vec4 + vec12; + temp110 = vec4 - vec12; + temp19 = vec5 + vec13; + temp111 = vec5 - vec13; + temp112 = vec6 + vec14; + temp114 = vec6 - vec14; + temp113 = vec7 + vec15; + temp115 = vec7 - vec15; + + /* Pre-additions and core multiplications */ + temp20 = temp10 + temp18; + temp24 = temp10 - temp18; + temp21 = temp11 + temp19; + temp25 = temp11 - temp19; + temp28 = temp12 - temp111; + temp210 = temp12 + temp111; + temp29 = temp13 + temp110; + temp211 = temp13 - temp110; + temp22 = temp14 + temp112; + temp27 = temp14 - temp112; + temp23 = temp15 + temp113; + temp26 = temp113 - temp15; + + temp11 = temp16 + temp114; + temp12 = temp16 - temp114; + temp10 = temp17 + temp115; + temp13 = temp17 - temp115; + + temp212 = ( temp10 + temp12 ) * INV_SQRT2; + temp214 = ( temp10 - temp12 ) * INV_SQRT2; + temp213 = ( temp13 - temp11 ) * INV_SQRT2; + temp215 = ( temp11 + temp13 ) * -INV_SQRT2; + + + /* odd */ + vec0 = vec[0] - vec[16]; + vec1 = vec[1] - vec[17]; + vec2 = vec[2] - vec[18]; + vec3 = vec[3] - vec[19]; + vec4 = vec[4] - vec[20]; + vec5 = vec[5] - vec[21]; + vec6 = vec[6] - vec[22]; + vec7 = vec[7] - vec[23]; + vec8 = vec[8] - vec[24]; + vec9 = vec[9] - vec[25]; + vec10 = vec[10] - vec[26]; + vec11 = vec[11] - vec[27]; + vec12 = vec[12] - vec[28]; + vec13 = vec[13] - vec[29]; + vec14 = vec[14] - vec[30]; + vec15 = vec[15] - vec[31]; + + /* Pre-additions and core multiplications */ + temp19 = ( vec2 + vec14 ) * -COS_3PI_DIV8; + temp110 = ( vec2 - vec14 ) * COS_PI_DIV8; + temp18 = ( vec3 + vec15 ) * COS_3PI_DIV8; + temp111 = ( vec3 - vec15 ) * COS_PI_DIV8; + temp15 = ( vec4 + vec12 ) * -INV_SQRT2; + temp16 = ( vec4 - vec12 ) * INV_SQRT2; + temp14 = ( vec5 + vec13 ) * INV_SQRT2; + temp17 = ( vec5 - vec13 ) * INV_SQRT2; + temp113 = ( vec6 + vec10 ) * -COS_PI_DIV8; + temp114 = ( vec6 - vec10 ) * COS_3PI_DIV8; + temp112 = ( vec7 + vec11 ) * COS_PI_DIV8; + temp115 = ( vec7 - vec11 ) * COS_3PI_DIV8; + + /* Core multiplications */ + vec2 = temp18 * SQRT2PLUS1 - temp112 * SQRT2MINUS1; + vec3 = temp19 * SQRT2PLUS1 - temp113 * SQRT2MINUS1; + vec4 = temp110 * SQRT2MINUS1 - temp114 * SQRT2PLUS1; + vec5 = temp111 * SQRT2MINUS1 - temp115 * SQRT2PLUS1; + + /* Post-additions */ + temp18 += temp112; + temp19 += temp113; + temp110 += temp114; + temp111 += temp115; + + vec6 = vec0 + temp14; + vec10 = vec0 - temp14; + vec7 = vec1 + temp15; + vec11 = vec1 - temp15; + + vec12 = temp16 - vec9; + vec14 = temp16 + vec9; + vec13 = vec8 + temp17; + vec15 = vec8 - temp17; + + temp10 = vec6 - vec14; + temp12 = vec6 + vec14; + temp11 = vec7 + vec15; + temp13 = vec7 - vec15; + temp14 = vec10 + vec12; + temp16 = vec10 - vec12; + temp15 = vec11 + vec13; + temp17 = vec11 - vec13; + + vec10 = temp18 + temp110; + temp110 = temp18 - temp110; + vec11 = temp19 + temp111; + temp111 = temp19 - temp111; + + temp112 = vec2 + vec4; + temp114 = vec2 - vec4; + temp113 = vec3 + vec5; + temp115 = vec3 - vec5; + + + /* Post-additions */ + *vec++ = temp20 + temp22; + *vec++ = temp21 + temp23; + *vec++ = temp12 + vec10; + *vec++ = temp13 + vec11; + *vec++ = temp210 + temp212; + *vec++ = temp211 + temp213; + *vec++ = temp10 + temp112; + *vec++ = temp11 + temp113; + *vec++ = temp24 - temp26; + *vec++ = temp25 - temp27; + *vec++ = temp16 + temp114; + *vec++ = temp17 + temp115; + *vec++ = temp28 + temp214; + *vec++ = temp29 + temp215; + *vec++ = temp14 + temp110; + *vec++ = temp15 + temp111; + *vec++ = temp20 - temp22; + *vec++ = temp21 - temp23; + *vec++ = temp12 - vec10; + *vec++ = temp13 - vec11; + *vec++ = temp210 - temp212; + *vec++ = temp211 - temp213; + *vec++ = temp10 - temp112; + *vec++ = temp11 - temp113; + *vec++ = temp24 + temp26; + *vec++ = temp25 + temp27; + *vec++ = temp16 - temp114; + *vec++ = temp17 - temp115; + *vec++ = temp28 - temp214; + *vec++ = temp29 - temp215; + *vec++ = temp14 - temp110; + *vec++ = temp15 - temp111; + + return; +} + + +/******************************************************************************* + Functionname: fft15 + ******************************************************************************* + + Description: 15-point FFT. Complex-valued input takes 176 real additions + and 34 real multiplications. + + Arguments: vec - pointer to data (interleaved real / imaginary parts) + + Return: none + +*******************************************************************************/ +static void fft15( float *restrict vec ) +{ + + float r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17; + float i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17; + float tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, + tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17, tmp18, tmp19, + tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27, tmp28, tmp29; + + + /* Pre-additions real part */ + r1 = vec[2] + vec[8]; + r2 = vec[2] - vec[8]; + r3 = vec[4] + vec[16]; + r4 = vec[4] - vec[16]; + r5 = vec[6] + vec[24]; + r6 = vec[6] - vec[24]; + r7 = vec[10] + vec[20]; + r8 = vec[10] - vec[20]; + r9 = vec[12] + vec[18]; + r10 = vec[12] - vec[18]; + r11 = vec[14] + vec[26]; + r12 = vec[14] - vec[26]; + r13 = vec[22] + vec[28]; + r14 = vec[22] - vec[28]; + + tmp2 = r1 + r3; + tmp4 = r1 - r3; + tmp6 = r2 + r14; + tmp8 = r2 - r14; + tmp10 = r4 + r12; + tmp12 = r4 - r12; + tmp14 = r5 + r9; + tmp16 = r5 - r9; + tmp18 = r11 + r13; + tmp20 = r11 - r13; + + /* Pre-additions imaginary part */ + i1 = vec[3] + vec[9]; + i2 = vec[3] - vec[9]; + i3 = vec[5] + vec[17]; + i4 = vec[5] - vec[17]; + i5 = vec[7] + vec[25]; + i6 = vec[7] - vec[25]; + i7 = vec[11] + vec[21]; + i8 = vec[11] - vec[21]; + i9 = vec[13] + vec[19]; + i10 = vec[13] - vec[19]; + i11 = vec[15] + vec[27]; + i12 = vec[15] - vec[27]; + i13 = vec[23] + vec[29]; + i14 = vec[23] - vec[29]; + + tmp3 = i1 + i3; + tmp5 = i1 - i3; + tmp7 = i2 + i14; + tmp9 = i2 - i14; + tmp11 = i4 + i12; + tmp13 = i4 - i12; + tmp15 = i5 + i9; + tmp17 = i5 - i9; + tmp19 = i11 + i13; + tmp21 = i11 - i13; + + + /* Pre-additions and core multiplications */ + tmp28 = tmp4 + tmp20; + tmp29 = tmp5 + tmp21; + r4 = tmp2 + tmp18; + i4 = tmp3 + tmp19; + r3 = ( r4 + tmp14 ) * -1.25f; + i3 = ( i4 + tmp15 ) * -1.25f; + r2 = ( tmp29 - i8 ) * -8.660254037844387e-1f; + i2 = ( tmp28 - r8 ) * 8.660254037844387e-1f; + r1 = r4 + r7; + i1 = i4 + i7; + r0 = r1 + vec[0] + tmp14; + i0 = i1 + vec[1] + tmp15; + r7 = tmp4 - tmp20; + i7 = tmp5 - tmp21; + r8 = ( tmp3 - tmp19 ) * -4.841229182759272e-1f; + i8 = ( tmp2 - tmp18 ) * 4.841229182759272e-1f; + tmp0 = tmp6 + r10; + tmp1 = tmp7 + i10; + tmp2 = r6 - tmp10; + tmp3 = i6 - tmp11; + r10 = tmp7 * -2.308262652881440f; + i10 = tmp6 * 2.308262652881440f; + r11 = tmp8 * 1.332676064001459f; + i11 = tmp9 * 1.332676064001459f; + r6 = ( r7 - tmp16 ) * 5.590169943749475e-1f; + i6 = ( i7 - tmp17 ) * 5.590169943749475e-1f; + r12 = ( tmp1 + tmp3 ) * 5.877852522924733e-1f; + i12 = ( tmp0 + tmp2 ) * -5.877852522924733e-1f; + r13 = ( tmp7 - tmp11 ) * -8.816778784387098e-1f; + i13 = ( tmp6 - tmp10 ) * 8.816778784387098e-1f; + r14 = ( tmp8 + tmp12 ) * 5.090369604551274e-1f; + i14 = ( tmp9 + tmp13 ) * 5.090369604551274e-1f; + r16 = tmp11 * 5.449068960040204e-1f; + i16 = tmp10 * -5.449068960040204e-1f; + r17 = tmp12 * 3.146021430912046e-1f; + i17 = tmp13 * 3.146021430912046e-1f; + + r4 *= 1.875f; + i4 *= 1.875f; + r1 *= -1.5f; + i1 *= -1.5f; + r7 *= -8.385254915624212e-1f; + i7 *= -8.385254915624212e-1f; + r5 = tmp29 * 1.082531754730548f; + i5 = tmp28 * -1.082531754730548f; + r9 = tmp1 * 1.538841768587627f; + i9 = tmp0 * -1.538841768587627f; + r15 = tmp3 * 3.632712640026803e-1f; + i15 = tmp2 * -3.632712640026803e-1f; + + + /* Post-additions real part */ + tmp2 = r0 + r1; + tmp4 = r3 + r6; + tmp6 = r3 - r6; + tmp8 = r4 + r5; + tmp10 = r4 - r5; + tmp12 = r7 + r8; + tmp14 = r7 - r8; + tmp16 = r13 + r16; + tmp18 = r14 + r17; + tmp20 = r10 - r13; + tmp22 = r11 - r14; + tmp24 = r12 + r15; + tmp26 = r12 - r9; + + r1 = tmp2 + r2; + r2 = tmp2 - r2; + r3 = tmp4 + tmp26; + r4 = tmp4 - tmp26; + r5 = tmp6 + tmp24; + r6 = tmp6 - tmp24; + r7 = tmp16 + tmp18; + r8 = tmp16 - tmp18; + r9 = tmp20 - tmp22; + r10 = tmp20 + tmp22; + r11 = r1 + tmp8; + r12 = r2 + tmp10; + r13 = r11 - tmp12; + r14 = r12 - tmp14; + r15 = r12 + tmp14; + r16 = r11 + tmp12; + + /* Post-additions imaginary part */ + tmp3 = i0 + i1; + tmp5 = i3 + i6; + tmp7 = i3 - i6; + tmp9 = i4 + i5; + tmp11 = i4 - i5; + tmp13 = i7 + i8; + tmp15 = i7 - i8; + tmp17 = i13 + i16; + tmp19 = i14 + i17; + tmp21 = i10 - i13; + tmp23 = i11 - i14; + tmp25 = i12 + i15; + tmp27 = i12 - i9; + + i1 = tmp3 + i2; + i2 = tmp3 - i2; + i3 = tmp5 + tmp27; + i4 = tmp5 - tmp27; + i5 = tmp7 + tmp25; + i6 = tmp7 - tmp25; + i7 = tmp17 + tmp19; + i8 = tmp17 - tmp19; + i9 = tmp21 - tmp23; + i10 = tmp21 + tmp23; + i11 = i1 + tmp9; + i12 = i2 + tmp11; + i13 = i11 - tmp13; + i14 = i12 - tmp15; + i15 = i12 + tmp15; + i16 = i11 + tmp13; + + *vec++ = r0; + *vec++ = i0; + *vec++ = r13 + r5 + r7; + *vec++ = i13 + i5 + i7; + *vec++ = r15 + r3 - r9; + *vec++ = i15 + i3 - i9; + *vec++ = r0 + r4; + *vec++ = i0 + i4; + *vec++ = r13 + r6 - r7; + *vec++ = i13 + i6 - i7; + *vec++ = r2; + *vec++ = i2; + *vec++ = r0 + r5; + *vec++ = i0 + i5; + *vec++ = r16 + r3 - r10; + *vec++ = i16 + i3 - i10; + *vec++ = r15 + r4 + r9; + *vec++ = i15 + i4 + i9; + *vec++ = r0 + r6; + *vec++ = i0 + i6; + *vec++ = r1; + *vec++ = i1; + *vec++ = r14 + r5 + r8; + *vec++ = i14 + i5 + i8; + *vec++ = r0 + r3; + *vec++ = i0 + i3; + *vec++ = r16 + r4 + r10; + *vec++ = i16 + i4 + i10; + *vec++ = r14 + r6 - r8; + *vec++ = i14 + i6 - i8; + + return; +} + +/******************************************************************************* + Functionname: fft5s + ******************************************************************************* + + Description: 5-point FFT. + + Arguments: x - pointer to input data (interleaved real / imaginary parts) + stride - stride for input data + + Return: none + +*******************************************************************************/ +static const float C51 = 0.9510565162951535f; +static const float C52 = -1.5388417685876270f; +static const float C53 = -0.3632712640026803f; +static const float C54 = 0.5590169943749475f; +static const float C55 = -1.25f; + +static void fft5s( float *x, const int16_t stride ) +{ + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float t; + /* real part */ + r1 = x[1 * stride] + x[4 * stride]; + r4 = x[1 * stride] - x[4 * stride]; + r3 = x[2 * stride] + x[3 * stride]; + r2 = x[2 * stride] - x[3 * stride]; + t = ( r1 - r3 ) * C54; + r1 = r1 + r3; + x[0] = x[0] + r1; + r1 = x[0] + ( r1 * C55 ); + r3 = r1 - t; + r1 = r1 + t; + t = ( r4 + r2 ) * C51; + r4 = t + ( r4 * C52 ); + r2 = t + ( r2 * C53 ); + + /* imaginary part */ + s1 = x[1 * stride + 1] + x[4 * stride + 1]; + s4 = x[1 * stride + 1] - x[4 * stride + 1]; + s3 = x[2 * stride + 1] + x[3 * stride + 1]; + s2 = x[2 * stride + 1] - x[3 * stride + 1]; + t = ( s1 - s3 ) * C54; + s1 = s1 + s3; + x[1] = x[1] + s1; + s1 = x[1] + ( s1 * C55 ); + s3 = s1 - t; + s1 = s1 + t; + t = ( s4 + s2 ) * C51; + s4 = t + ( s4 * C52 ); + s2 = t + ( s2 * C53 ); + + /* combination */ + x[1 * stride] = r1 + s2; + x[4 * stride] = r1 - s2; + x[2 * stride] = r3 - s4; + x[3 * stride] = r3 + s4; + + x[1 * stride + 1] = s1 - r2; + x[4 * stride + 1] = s1 + r2; + x[2 * stride + 1] = s3 + r4; + x[3 * stride + 1] = s3 - r4; +} + + +/** + * \brief Function performs a complex 10-point FFT + * The FFT is performed inplace. The result of the FFT + * is scaled by SCALEFACTOR10 bits. + * + * WOPS FLC version: 1093 cycles + * WOPS with 32x16 bit multiplications: 196 cycles + * + * \param [i/o] re real input / output + * \param [i/o] im imag input / output + * \param [i ] s stride real and imag input / output + * + * \return void + */ +static void fft10( float *restrict vec ) +{ + float t; + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float y00, y01, y02, y03, y04, y05, y06, y07, y08, y09; + float y10, y11, y12, y13, y14, y15, y16, y17, y18, y19; + + /* 2 fft5 stages */ + + /* real part */ + r1 = vec[12] + vec[8]; + r4 = vec[12] - vec[8]; + r3 = vec[4] + vec[16]; + r2 = vec[4] - vec[16]; + t = ( r1 - r3 ) * C54; + r1 = r1 + r3; + y00 = vec[0] + r1; + r1 = y00 + ( r1 * C55 ); + r3 = r1 - t; + r1 = r1 + t; + t = ( r4 + r2 ) * C51; + r4 = t + ( r4 * C52 ); + r2 = t + ( r2 * C53 ); + + /* imaginary part */ + s1 = vec[13] + vec[9]; + s4 = vec[13] - vec[9]; + s3 = vec[5] + vec[17]; + s2 = vec[5] - vec[17]; + t = ( s1 - s3 ) * C54; + s1 = s1 + s3; + y01 = vec[1] + s1; + s1 = y01 + ( s1 * C55 ); + s3 = s1 - t; + s1 = s1 + t; + t = ( s4 + s2 ) * C51; + s4 = t + ( s4 * C52 ); + s2 = t + ( s2 * C53 ); + + /* combination */ + y04 = r1 + s2; + y16 = r1 - s2; + y08 = r3 - s4; + y12 = r3 + s4; + y05 = s1 - r2; + y17 = s1 + r2; + y09 = s3 + r4; + y13 = s3 - r4; + + /* real part */ + r1 = vec[2] + vec[18]; + r4 = vec[2] - vec[18]; + r3 = vec[14] + vec[6]; + r2 = vec[14] - vec[6]; + t = ( r1 - r3 ) * C54; + r1 = r1 + r3; + y02 = vec[10] + r1; + r1 = y02 + ( r1 * C55 ); + r3 = r1 - t; + r1 = r1 + t; + t = ( r4 + r2 ) * C51; + r4 = t + ( r4 * C52 ); + r2 = t + ( r2 * C53 ); + + /* imaginary part */ + s1 = vec[3] + vec[19]; + s4 = vec[3] - vec[19]; + s3 = vec[15] + vec[7]; + s2 = vec[15] - vec[7]; + t = ( s1 - s3 ) * C54; + s1 = s1 + s3; + y03 = vec[11] + s1; + s1 = y03 + ( s1 * C55 ); + s3 = s1 - t; + s1 = s1 + t; + t = ( s4 + s2 ) * C51; + s4 = t + ( s4 * C52 ); + s2 = t + ( s2 * C53 ); + + /* combination */ + y06 = r1 + s2; + y18 = r1 - s2; + y10 = r3 - s4; + y14 = r3 + s4; + y07 = s1 - r2; + y19 = s1 + r2; + y11 = s3 + r4; + y15 = s3 - r4; + + /* 5 fft2 stages */ + vec[0] = y00 + y02; + vec[1] = y01 + y03; + vec[2] = y12 - y14; + vec[3] = y13 - y15; + vec[4] = y04 + y06; + vec[5] = y05 + y07; + vec[6] = y16 - y18; + vec[7] = y17 - y19; + vec[8] = y08 + y10; + vec[9] = y09 + y11; + vec[10] = y00 - y02; + vec[11] = y01 - y03; + vec[12] = y12 + y14; + vec[13] = y13 + y15; + vec[14] = y04 - y06; + vec[15] = y05 - y07; + vec[16] = y16 + y18; + vec[17] = y17 + y19; + vec[18] = y08 - y10; + vec[19] = y09 - y11; + + return; +} + +/** + * \brief Function performs a complex 20-point FFT + * The FFT is performed inplace. The result of the FFT + * is scaled by SCALEFACTOR20 bits. + * + * WOPS FLC version: 1509 cycles + * WOPS with 32x16 bit multiplications: 432 cycles + * + * \param [i/o] re real input / output + * \param [i/o] im imag input / output + * \param [i ] s stride real and imag input / output + * + * \return void + */ +static void fft20( float *signal ) +{ + const int16_t s = 2; + float *re = signal, *im = signal + 1; + float r1, r2, r3, r4; + float s1, s2, s3, s4; + float x0, x1, x2, x3, x4; + float t, t0, t1, t2, t3, t4, t5, t6, t7; + float y00, y01, y02, y03, y04, y05, y06, y07, y08, y09; + float y10, y11, y12, y13, y14, y15, y16, y17, y18, y19; + float y20, y21, y22, y23, y24, y25, y26, y27, y28, y29; + float y30, y31, y32, y33, y34, y35, y36, y37, y38, y39; + + /* 1. FFT5 stage */ + + /* real part */ + x0 = re[s * 0]; + x1 = re[s * 16]; + x2 = re[s * 12]; + x3 = re[s * 8]; + x4 = re[s * 4]; + r1 = x1 + x4; + r4 = x1 - x4; + r3 = x2 + x3; + r2 = x2 - x3; + t = ( r1 - r3 ) * C54; + r1 = r1 + r3; + y00 = x0 + r1; + r1 = y00 + ( r1 * C55 ); + r3 = r1 - t; + r1 = r1 + t; + t = ( r4 + r2 ) * C51; + r4 = t + ( r4 * C52 ); + r2 = t + ( r2 * C53 ); + + /* imaginary part */ + x0 = im[s * 0]; + x1 = im[s * 16]; + x2 = im[s * 12]; + x3 = im[s * 8]; + x4 = im[s * 4]; + s1 = x1 + x4; + s4 = x1 - x4; + s3 = x2 + x3; + s2 = x2 - x3; + t = ( s1 - s3 ) * C54; + s1 = ( s1 + s3 ); + y01 = ( x0 + s1 ); + s1 = y01 + ( s1 * C55 ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( s4 + s2 ) * C51; + s4 = t + ( s4 * C52 ); + s2 = t + ( s2 * C53 ); + + /* combination */ + y08 = ( r1 + s2 ); + y32 = ( r1 - s2 ); + y16 = ( r3 - s4 ); + y24 = ( r3 + s4 ); + + y09 = ( s1 - r2 ); + y33 = ( s1 + r2 ); + y17 = ( s3 + r4 ); + y25 = ( s3 - r4 ); + + /* 2. FFT5 stage */ + + /* real part */ + x0 = re[s * 5]; + x1 = re[s * 1]; + x2 = re[s * 17]; + x3 = re[s * 13]; + x4 = re[s * 9]; + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( r1 - r3 ) * C54; + r1 = ( r1 + r3 ); + y02 = ( x0 + r1 ); + r1 = y02 + ( r1 * C55 ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( r4 + r2 ) * C51; + r4 = t + ( r4 * C52 ); + r2 = t + ( r2 * C53 ); + + /* imaginary part */ + x0 = im[s * 5]; + x1 = im[s * 1]; + x2 = im[s * 17]; + x3 = im[s * 13]; + x4 = im[s * 9]; + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( s1 - s3 ) * C54; + s1 = ( s1 + s3 ); + y03 = ( x0 + s1 ); + s1 = y03 + ( s1 * C55 ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( s4 + s2 ) * C51; + s4 = t + ( s4 * C52 ); + s2 = t + ( s2 * C53 ); + + /* combination */ + y10 = ( r1 + s2 ); + y34 = ( r1 - s2 ); + y18 = ( r3 - s4 ); + y26 = ( r3 + s4 ); + + y11 = ( s1 - r2 ); + y35 = ( s1 + r2 ); + y19 = ( s3 + r4 ); + y27 = ( s3 - r4 ); + + /* 3. FFT5 stage */ + + /* real part */ + x0 = re[s * 10]; + x1 = re[s * 6]; + x2 = re[s * 2]; + x3 = re[s * 18]; + x4 = re[s * 14]; + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( r1 - r3 ) * C54; + r1 = ( r1 + r3 ); + y04 = ( x0 + r1 ); + r1 = y04 + ( r1 * C55 ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( r4 + r2 ) * C51; + r4 = t + ( r4 * C52 ); + r2 = t + ( r2 * C53 ); + + /* imaginary part */ + x0 = im[s * 10]; + x1 = im[s * 6]; + x2 = im[s * 2]; + x3 = im[s * 18]; + x4 = im[s * 14]; + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( s1 - s3 ) * C54; + s1 = ( s1 + s3 ); + y05 = ( x0 + s1 ); + s1 = y05 + ( s1 * C55 ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( s4 + s2 ) * C51; + s4 = t + ( s4 * C52 ); + s2 = t + ( s2 * C53 ); + + /* combination */ + y12 = ( r1 + s2 ); + y36 = ( r1 - s2 ); + y20 = ( r3 - s4 ); + y28 = ( r3 + s4 ); + + y13 = ( s1 - r2 ); + y37 = ( s1 + r2 ); + y21 = ( s3 + r4 ); + y29 = ( s3 - r4 ); + + /* 4. FFT5 stage */ + + /* real part */ + x0 = re[s * 15]; + x1 = re[s * 11]; + x2 = re[s * 7]; + x3 = re[s * 3]; + x4 = re[s * 19]; + r1 = ( x1 + x4 ); + r4 = ( x1 - x4 ); + r3 = ( x2 + x3 ); + r2 = ( x2 - x3 ); + t = ( r1 - r3 ) * C54; + r1 = ( r1 + r3 ); + y06 = ( x0 + r1 ); + r1 = y06 + ( r1 * C55 ); + r3 = ( r1 - t ); + r1 = ( r1 + t ); + t = ( r4 + r2 ) * C51; + r4 = t + ( r4 * C52 ); + r2 = t + ( r2 * C53 ); + + /* imaginary part */ + x0 = im[s * 15]; + x1 = im[s * 11]; + x2 = im[s * 7]; + x3 = im[s * 3]; + x4 = im[s * 19]; + s1 = ( x1 + x4 ); + s4 = ( x1 - x4 ); + s3 = ( x2 + x3 ); + s2 = ( x2 - x3 ); + t = ( s1 - s3 ) * C54; + s1 = ( s1 + s3 ); + y07 = ( x0 + s1 ); + s1 = y07 + ( s1 * C55 ); + s3 = ( s1 - t ); + s1 = ( s1 + t ); + t = ( s4 + s2 ) * C51; + s4 = t + ( s4 * C52 ); + s2 = t + ( s2 * C53 ); + + /* combination */ + y14 = ( r1 + s2 ); + y38 = ( r1 - s2 ); + y22 = ( r3 - s4 ); + y30 = ( r3 + s4 ); + + y15 = ( s1 - r2 ); + y39 = ( s1 + r2 ); + y23 = ( s3 + r4 ); + y31 = ( s3 - r4 ); + + + /* 1. FFT4 stage */ + + /* Pre-additions */ + t0 = ( y00 + y04 ); + t2 = ( y00 - y04 ); + t1 = ( y01 + y05 ); + t3 = ( y01 - y05 ); + t4 = ( y02 + y06 ); + t7 = ( y02 - y06 ); + t5 = ( y07 + y03 ); + t6 = ( y07 - y03 ); + + /* Post-additions */ + re[s * 0] = ( t0 + t4 ); + im[s * 0] = ( t1 + t5 ); + re[s * 5] = ( t2 - t6 ); + im[s * 5] = ( t3 - t7 ); + re[s * 10] = ( t0 - t4 ); + im[s * 10] = ( t1 - t5 ); + re[s * 15] = ( t2 + t6 ); + im[s * 15] = ( t3 + t7 ); + + /* 2. FFT4 stage */ + + /* Pre-additions */ + t0 = ( y08 + y12 ); + t2 = ( y08 - y12 ); + t1 = ( y09 + y13 ); + t3 = ( y09 - y13 ); + t4 = ( y10 + y14 ); + t7 = ( y10 - y14 ); + t5 = ( y15 + y11 ); + t6 = ( y15 - y11 ); + + /* Post-additions */ + re[s * 4] = ( t0 + t4 ); + im[s * 4] = ( t1 + t5 ); + re[s * 9] = ( t2 - t6 ); + im[s * 9] = ( t3 - t7 ); + re[s * 14] = ( t0 - t4 ); + im[s * 14] = ( t1 - t5 ); + re[s * 19] = ( t2 + t6 ); + im[s * 19] = ( t3 + t7 ); + + + /* 3. FFT4 stage */ + + /* Pre-additions */ + t0 = ( y16 + y20 ); + t2 = ( y16 - y20 ); + t1 = ( y17 + y21 ); + t3 = ( y17 - y21 ); + t4 = ( y18 + y22 ); + t7 = ( y18 - y22 ); + t5 = ( y23 + y19 ); + t6 = ( y23 - y19 ); + + /* Post-additions */ + re[s * 8] = ( t0 + t4 ); + im[s * 8] = ( t1 + t5 ); + re[s * 13] = ( t2 - t6 ); + im[s * 13] = ( t3 - t7 ); + re[s * 18] = ( t0 - t4 ); + im[s * 18] = ( t1 - t5 ); + re[s * 3] = ( t2 + t6 ); + im[s * 3] = ( t3 + t7 ); + + /* 4. FFT4 stage */ + + /* Pre-additions */ + t0 = ( y24 + y28 ); + t2 = ( y24 - y28 ); + t1 = ( y25 + y29 ); + t3 = ( y25 - y29 ); + t4 = ( y26 + y30 ); + t7 = ( y26 - y30 ); + t5 = ( y31 + y27 ); + t6 = ( y31 - y27 ); + + /* Post-additions */ + re[s * 12] = ( t0 + t4 ); + im[s * 12] = ( t1 + t5 ); + re[s * 17] = ( t2 - t6 ); + im[s * 17] = ( t3 - t7 ); + re[s * 2] = ( t0 - t4 ); + im[s * 2] = ( t1 - t5 ); + re[s * 7] = ( t2 + t6 ); + im[s * 7] = ( t3 + t7 ); + + /* 5. FFT4 stage */ + + /* Pre-additions */ + t0 = ( y32 + y36 ); + t2 = ( y32 - y36 ); + t1 = ( y33 + y37 ); + t3 = ( y33 - y37 ); + t4 = ( y34 + y38 ); + t7 = ( y34 - y38 ); + t5 = ( y39 + y35 ); + t6 = ( y39 - y35 ); + + /* Post-additions */ + re[s * 16] = ( t0 + t4 ); + im[s * 16] = ( t1 + t5 ); + re[s * 1] = ( t2 - t6 ); + im[s * 1] = ( t3 - t7 ); + re[s * 6] = ( t0 - t4 ); + im[s * 6] = ( t1 - t5 ); + re[s * 11] = ( t2 + t6 ); + im[s * 11] = ( t3 + t7 ); + + return; +} + +/******************************************************************************* + Functionname: fft30 + ******************************************************************************* + + Description: 30-point FFT. + + Arguments: in - pointer to data (interleaved real / imaginary parts) + + Return: none + +*******************************************************************************/ + +static void fft30( float *restrict in ) +{ + int16_t i; + float temp[60]; + float *temp_l = temp; + float *temp_lu = temp + 2 * 8; + float *temp_h = temp + 2 * 15; + float *temp_hu = temp + 2 * 15 + 2 * 8; + float *in_l = in + 2 * 0; + float *in_h = in + 2 * 15; + for ( i = 0; i < 7; i++ ) + { + *temp_l++ = *in_l++; + *temp_l++ = *in_l++; + *temp_h++ = *in_h++; + *temp_h++ = *in_h++; + *temp_l++ = *in_h++; + *temp_l++ = *in_h++; + *temp_h++ = *in_l++; + *temp_h++ = *in_l++; + } + *temp_l++ = *in_l++; + *temp_l++ = *in_l++; + *temp_h++ = *in_h++; + *temp_h++ = *in_h++; + temp_l = temp; + temp_h = temp + 30; + fft15( temp_l ); + fft15( temp_h ); + + in_l = in + 2 * 0; + in_h = in + 2 * 15; + for ( i = 0; i < 7; i++ ) + { + *in_l++ = *temp_l + *temp_h; + *in_h++ = *temp_l++ - *temp_h++; + *in_l++ = *temp_l + *temp_h; + *in_h++ = *temp_l++ - *temp_h++; + + *in_h++ = *temp_lu + *temp_hu; + *in_l++ = *temp_lu++ - *temp_hu++; + *in_h++ = *temp_lu + *temp_hu; + *in_l++ = *temp_lu++ - *temp_hu++; + } + *in_l++ = *temp_l + *temp_h; + *in_h++ = *temp_l++ - *temp_h++; + *in_l++ = *temp_l + *temp_h; + *in_h++ = *temp_l++ - *temp_h++; + + return; +} + +/*-------------------------------------------------------------------* + * fft_cldfb() + * + * Interface functions FFT subroutines + *--------------------------------------------------------------------*/ +void fft_cldfb( + float *data, /* i/o: input/output vector */ + const int16_t size /* size of fft operation */ +) +{ + + switch ( size ) + { + case 5: + fft5s( data, 2 ); + break; + case 8: + fft8( data ); + break; + case 10: + fft10( data ); + break; + case 16: + fft16( data ); + break; + case 20: + fft20( data ); + break; + case 30: + fft30( data ); + break; + + default: + assert( 0 ); + break; + } + + return; +} diff --git a/lib_com/fft_rel.c b/lib_com/fft_rel.c new file mode 100644 index 0000000000..a8b96e8217 --- /dev/null +++ b/lib_com/fft_rel.c @@ -0,0 +1,303 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define N_MAX_FFT 1024 +#define N_MAX_DIV2 ( N_MAX_FFT >> 1 ) +#define N_MAX_DIV4 ( N_MAX_DIV2 >> 1 ) + +/*---------------------------------------------------------------------* + * fft_rel() + * + * Computes the split-radix FFT in place for the real-valued + * signal x of length n. The algorithm has been ported from + * the Fortran code of [1]. + * + * The function needs sine and cosine tables t_sin and t_cos, + * and the constant N_MAX_FFT. The table entries are defined as + * sin(2*pi*i) and cos(2*pi*i) for i = 0, 1, ..., N_MAX_FFT-1. The + * implementation assumes that any entry will not be needed + * outside the tables. Therefore, N_MAX_FFT and n must be properly + * set. The function has been tested with the values n = 16, + * 32, 64, 128, 256, and N_MAX_FFT = 1280. + * + * References + * [1] H.V. Sorensen, D.L. Jones, M.T. Heideman, C.S. Burrus, + * "Real-valued fast Fourier transform algorithm," IEEE + * Trans. on Signal Processing, Vol.35, No.6, pp 849-863, + * 1987. + * + * OUTPUT + * x[0:n-1] Transform coeffients in the order re[0], re[1], + * ..., re[n/2], im[n/2-1], ..., im[1]. + *---------------------------------------------------------------------*/ + +void fft_rel( + float x[], /* i/o: input/output vector */ + const int16_t n, /* i : vector length */ + const int16_t m /* i : log2 of vector length */ +) +{ + int16_t i, j, k, n1, n2, n4; + int16_t step; + float xt, t1, t2; + float *x0, *x1, *x2; + float *xi2, *xi3, *xi4, *xi1; + const float *s, *c; + const int16_t *idx; + + /* !!!! NMAX = 256 is hardcoded here (similar optimizations should be done for NMAX > 256) !!! */ + + float *x2even, *x2odd; + float temp[512]; + + if ( n == 128 || n == 256 || n == 512 ) + { + idx = fft256_read_indexes; + + /* Combined Digit reverse counter & Length two butterflies */ + if ( n == 128 ) + { + x2 = temp; + for ( i = 0; i < 64; i++ ) + { + j = *idx++; + k = *idx++; + + *x2++ = x[j >> 1] + x[k >> 1]; + *x2++ = x[j >> 1] - x[k >> 1]; + } + } + else if ( n == 256 ) + { + x2 = temp; + for ( i = 0; i < 128; i++ ) + { + j = *idx++; + k = *idx++; + + *x2++ = x[j] + x[k]; + *x2++ = x[j] - x[k]; + } + } + else if ( n == 512 ) + { + x2even = temp; + x2odd = temp + 256; + + for ( i = 0; i < 128; i++ ) + { + j = 2 * *idx++; + k = 2 * *idx++; + + *x2even++ = x[j] + x[k]; + *x2even++ = x[j] - x[k]; + *x2odd++ = x[++j] + x[++k]; + *x2odd++ = x[j] - x[k]; + } + } + + /*-----------------------------------------------------------------* + * 1st Stage Loop has been Unrolled because n4 is '1' and that + * allows the elimination of the 'for_ (j = 1; j < n4; j++)' loop + * and the associated pointers initialization. + * Also, it allows to Put the Data from 'temp' back into 'x' due + * to the previous Combined Digit Reverse and Length two butterflies + *-----------------------------------------------------------------*/ + + /*for_ (k = 2; k < 3; k++)*/ + { + x0 = temp; + x1 = x0 + 2; + x2 = x; + + for ( i = 0; i < n; i += 4 ) + { + *x2++ = *x0++ + *x1; /* x[i] = xt + x[i+n2]; */ + *x2++ = *x0; + *x2++ = *--x0 - *x1++; /* x[i+n2] = xt - x[i+n2]; */ + *x2++ = -*x1; /* x[i+n2+n4] = -x[i+n2+n4]; */ + + x0 += 4; + x1 += 3; /* x1 has already advanced */ + } + } + } + else + { + /*-----------------------------------------------------------------* + * Digit reverse counter + *-----------------------------------------------------------------*/ + + j = 0; + x0 = &x[0]; + for ( i = 0; i < n - 1; i++ ) + { + if ( i < j ) + { + xt = x[j]; + x[j] = *x0; + *x0 = xt; + } + x0++; + k = n / 2; + while ( k <= j ) + { + j -= k; + k = k >> 1; + } + j += k; + } + + /*-----------------------------------------------------------------* + * Length two butterflies + *-----------------------------------------------------------------*/ + + x0 = &x[0]; + x1 = &x[1]; + for ( i = 0; i < n / 2; i++ ) + { + *x1 = *x0 - *x1; + *x0 = *x0 * 2 - *x1; + + x0++; + x0++; + x1++; + x1++; + } + + /*-----------------------------------------------------------------* + * 1st Stage Loop has been Unrolled because n4 is '1' and that + * allows the elimination of the 'for_ (j = 1; j < n4; j++)' loop + * and the associated pointers initialization. + *-----------------------------------------------------------------*/ + + /* for_ (k = 2; k < 3; k++) */ + { + x0 = x; + x1 = x0 + 2; + + for ( i = 0; i < n; i += 4 ) + { + *x1 = *x0 - *x1; /* x[i+n2] = xt - x[i+n2]; */ + *x0 = *x0 * 2 - *x1++; /* x[i] = xt + x[i+n2]; */ + *x1 = -*x1; /* x[i+n2+n4] = -x[i+n2+n4]; */ + + x0 += 4; + x1 += 3; /* x1 has already advanced */ + } + } + } + + /*-----------------------------------------------------------------* + * Other butterflies + * + * The implementation described in [1] has been changed by using + * table lookup for evaluating sine and cosine functions. The + * variable ind and its increment step are needed to access table + * entries. Note that this implementation assumes n4 to be so + * small that ind will never exceed the table. Thus the input + * argument n and the constant N_MAX_FFT must be set properly. + *-----------------------------------------------------------------*/ + + n4 = 1; + n2 = 2; + n1 = 4; + + step = N_MAX_DIV4; + + for ( k = 3; k <= m; k++ ) + { + step >>= 1; + n4 <<= 1; + n2 <<= 1; + n1 <<= 1; + + x0 = x; + x1 = x0 + n2; + x2 = x1 + n4; + + for ( i = 0; i < n; i += n1 ) + { + *x1 = *x0 - *x1; /* x[i+n2] = xt - x[i+n2]; */ + *x0 = *x0 * 2 - *x1; /* x[i] = xt + x[i+n2]; */ + *x2 = -*x2; /* x[i+n2+n4] = -x[i+n2+n4]; */ + + s = sincos_t_ext; + c = s + N_MAX_FFT / 4; /* 1024/4 = 256, 256/4=64 */ + xi1 = x0; + xi3 = xi1 + n2; + xi2 = xi3; + x0 += n1; + xi4 = x0; + + for ( j = 1; j < n4; j++ ) + { + xi3++; + xi1++; + xi4--; + xi2--; + c += step; + s += step; /* autoincrement by ar0 */ + + t1 = *xi3 * *c + *xi4 * *s; /* t1 = *xi3**(pt_c+ind) + *xi4**(pt_s+ind); */ + t2 = *xi3 * *s - *xi4 * *c; /* t2 = *xi3**(pt_s+ind) - *xi4**(pt_c+ind); */ + + *xi4 = *xi2 - t2; + *xi2 = *xi1 - t1; + *xi1 = *xi1 * 2 - *xi2; + *xi3 = -2 * t2 - *xi4; + } + + x1 += n1; + x2 += n1; + } + } + + return; +} diff --git a/lib_com/fill_spectrum.c b/lib_com/fill_spectrum.c new file mode 100644 index 0000000000..9b743a5f1c --- /dev/null +++ b/lib_com/fill_spectrum.c @@ -0,0 +1,269 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * fill_spectrum() + * + * Apply spectral filling by + * - filling zero-bit bands below BWE region + * - applying BWE above transition frequency + *--------------------------------------------------------------------------*/ + +void fill_spectrum( + float *coeff, /* i/o: normalized MLT spectrum / nf spectrum */ + int16_t *R, /* i : number of pulses per band */ + const int16_t is_transient, /* i : transient flag */ + int16_t norm[], /* i : quantization indices for norms */ + const float *hq_generic_fenv, /* i : HQ GENERIC envelope */ + const int16_t hq_generic_offset, /* i : HQ GENERIC offset */ + const int16_t nf_idx, /* i : noise fill index */ + const int16_t length, /* i : Length of spectrum (32 or 48 kHz) */ + const float env_stab, /* i : Envelope stability measure [0..1] */ + int16_t *no_att_hangover, /* i/o: Frame counter for attenuation hangover */ + float *energy_lt, /* i/o: Long-term energy measure for transient detection */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + const int16_t hq_generic_exc_clas, /* i : HQ generic hf excitation class */ + const int16_t core_sfm, /* i : index of the end band for core */ + int16_t HQ_mode, /* i : HQ mode */ + float noise_level[], /* i : noise levels for harmonic modes */ + int32_t core_brate, /* i : target bitrate */ + float prev_noise_level[], /* i/o: noise factor in previous frame */ + int16_t *prev_R, /* i/o: bit allocation info. in previous frame */ + float *prev_coeff_out, /* i/o: decoded spectrum in previous frame */ + const int16_t *peak_idx, /* i : HVQ peak indices */ + const int16_t Npeaks, /* i : Number of HVQ peaks */ + const int16_t *npulses, /* i : Number of assigned pulses per band */ + int16_t prev_is_transient, /* i : previous transient flag */ + float *prev_normq, /* i : previous norms */ + float *prev_env, /* i : previous noise envelopes */ + int16_t prev_bfi, /* i : previous bad frame indicator */ + const int16_t *sfmsize, /* i : Length of bands */ + const int16_t *sfm_start, /* i : Start of bands */ + const int16_t *sfm_end, /* i : End of bands */ + int16_t *prev_L_swb_norm, /* i/o: last normalize length for harmonic mode */ + int16_t prev_hq_mode, /* i : previous HQ mode */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t num_env_bands, /* i : Number of envelope bands */ + const int16_t element_mode /* i : element mode */ +) +{ + float CodeBook[FREQ_LENGTH]; + int16_t cb_size = 0; + int16_t last_sfm; + float CodeBook_mod[FREQ_LENGTH]; + float norm_adj[NB_SFM]; + int16_t high_sfm = 23; + int16_t flag_32K_env_hangover; + int16_t bin_th = 0; + int16_t peak_pos[L_HARMONIC_EXC]; + int16_t bwe_peaks[L_FRAME48k]; + float normq_v[NB_SFM]; + float coeff_fine[L_SPEC48k_EXT]; + float coeff_out[L_SPEC48k_EXT]; + + set_s( peak_pos, 0, L_HARMONIC_EXC ); + set_s( bwe_peaks, 0, L_FRAME48k ); + set_f( norm_adj, 1.0f, num_sfm ); + set_f( coeff_out, 0.0f, L_FRAME48k ); + + if ( HQ_mode == HQ_TRANSIENT ) + { + last_sfm = num_sfm - 1; + } + else if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) + { + last_sfm = max( core_sfm, num_env_bands - 1 ); + } + else + { + last_sfm = core_sfm; + } + + if ( HQ_mode == HQ_HARMONIC ) + { + high_sfm = ( core_brate < HQ_BWE_CROSSOVER_BRATE ) ? HVQ_THRES_SFM_24k - 1 : HVQ_THRES_SFM_32k - 1; + + if ( last_sfm < high_sfm ) + { + last_sfm = high_sfm; + } + } + else if ( HQ_mode == HQ_HVQ ) + { + bin_th = sfm_end[last_sfm]; + } + + /* Transient analysis for envelope stability measure */ + if ( length == L_FRAME32k ) + { + env_stab_transient_detect( is_transient, length, norm, no_att_hangover, energy_lt, HQ_mode, bin_th, coeff ); + } + + if ( length == L_FRAME16k || ( ( length == L_FRAME32k && HQ_mode != HQ_HARMONIC && HQ_mode != HQ_HVQ ) && *no_att_hangover == 0 ) ) + { + /* Norm adjustment function */ + env_adj( npulses, length, last_sfm, norm_adj, env_stab, sfmsize ); + } + + flag_32K_env_hangover = ( length == L_FRAME32k && ( ( env_stab < 0.5f && *no_att_hangover == 0 ) || HQ_mode == HQ_HVQ ) ); + + /*----------------------------------------------------------------* + * Build noise-fill codebook + *----------------------------------------------------------------*/ + + if ( HQ_mode != HQ_HVQ ) + { + cb_size = build_nf_codebook( flag_32K_env_hangover, coeff, sfm_start, sfmsize, sfm_end, last_sfm, R, CodeBook, CodeBook_mod ); + } + + /*----------------------------------------------------------------* + * Prepare fine structure for Harmonic and HVQ + *----------------------------------------------------------------*/ + + if ( HQ_mode == HQ_HARMONIC ) + { + harm_bwe_fine( R, last_sfm, high_sfm, num_sfm, norm, sfm_start, sfm_end, prev_L_swb_norm, coeff, coeff_out, coeff_fine ); + } + else if ( HQ_mode == HQ_HVQ ) + { + hvq_bwe_fine( last_sfm, num_sfm, sfm_end, peak_idx, Npeaks, peak_pos, prev_L_swb_norm, coeff, bwe_peaks, coeff_fine ); + } + + /*----------------------------------------------------------------* + * Apply noise-fill + *----------------------------------------------------------------*/ + + if ( HQ_mode != HQ_HVQ && cb_size > 0 ) + { + apply_noisefill_HQ( R, length, flag_32K_env_hangover, core_brate, last_sfm, CodeBook, CodeBook_mod, cb_size, sfm_start, sfm_end, sfmsize, coeff ); + } + + /*----------------------------------------------------------------* + * Normal mode BWE + *----------------------------------------------------------------*/ + + if ( HQ_mode == HQ_NORMAL ) + { + hq_fold_bwe( last_sfm, sfm_end, num_sfm, coeff ); + } + + /*----------------------------------------------------------------* + * Apply noise-fill adjustment + *----------------------------------------------------------------*/ + + if ( ( length >= L_FRAME32k || core_brate > HQ_32k || core_brate < HQ_24k40 ) && HQ_mode != HQ_HVQ ) + { + apply_nf_gain( nf_idx, last_sfm, R, sfm_start, sfm_end, coeff ); + } + + /*----------------------------------------------------------------* + * Prepare fine strucutre for HQ GENERIC + *----------------------------------------------------------------*/ + if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) + { + hq_generic_fine( coeff, last_sfm, sfm_start, sfm_end, bwe_seed, coeff_fine ); + } + + /*----------------------------------------------------------------* + * Apply envelope + *----------------------------------------------------------------*/ + + if ( HQ_mode != HQ_HARMONIC && HQ_mode != HQ_HVQ ) + { + apply_envelope( coeff, norm, norm_adj, num_sfm, last_sfm, HQ_mode, length, sfm_start, sfm_end, normq_v, coeff_out, coeff_fine ); + } + + /*----------------------------------------------------------------* + * Harmonic BWE, HVQ BWE and HQ SWB BWE + *----------------------------------------------------------------*/ + + if ( HQ_mode == HQ_HARMONIC ) + { + harm_bwe( coeff_fine, coeff, num_sfm, sfm_start, sfm_end, last_sfm, high_sfm, R, prev_hq_mode, norm, noise_level, prev_noise_level, bwe_seed, coeff_out, element_mode ); + } + else if ( HQ_mode == HQ_HVQ ) + { + hvq_bwe( coeff, coeff_fine, sfm_start, sfm_end, sfmsize, last_sfm, prev_hq_mode, bwe_peaks, bin_th, num_sfm, core_brate, R, norm, noise_level, prev_noise_level, bwe_seed, coeff_out ); + } + else if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) + { + hq_generic_bwe( HQ_mode, coeff_fine, hq_generic_fenv, coeff_out, hq_generic_offset, prev_L_swb_norm, hq_generic_exc_clas, sfm_end, num_sfm, num_env_bands, R ); + } + + /*----------------------------------------------------------------* + * HQ WB BWE refinements + *----------------------------------------------------------------*/ + + if ( length == L_FRAME16k && core_brate <= HQ_32k ) + { + hq_wb_nf_bwe( coeff, is_transient, prev_bfi, normq_v, num_sfm, sfm_start, sfm_end, sfmsize, last_sfm, R, prev_is_transient, prev_normq, prev_env, bwe_seed, prev_coeff_out, prev_R, coeff_out ); + } + + /*----------------------------------------------------------------* + * Update memories + *----------------------------------------------------------------*/ + + if ( HQ_mode != HQ_HARMONIC && HQ_mode != HQ_HVQ ) + { + prev_noise_level[0] = 0.1f; + prev_noise_level[1] = 0.1f; + } + if ( !( length == L_FRAME16k && core_brate <= HQ_32k ) ) + { + set_f( prev_env, 0, SFM_N_WB ); + set_f( prev_normq, 0, SFM_N_WB ); + } + + if ( length == L_FRAME32k && core_brate <= HQ_32k ) + { + *prev_R = R[SFM_N_WB - 1]; + mvr2r( coeff_out + L_FRAME16k - L_HQ_WB_BWE, prev_coeff_out, L_HQ_WB_BWE ); + } + + mvr2r( coeff_out, coeff, length ); + + return; +} diff --git a/lib_com/findpulse.c b/lib_com/findpulse.c new file mode 100644 index 0000000000..e26980d225 --- /dev/null +++ b/lib_com/findpulse.c @@ -0,0 +1,143 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + +/*----------------------------------------------------------------------------------* + * findpulse() + * + * Find first pitch pulse in a frame + *----------------------------------------------------------------------------------*/ + +/*! r: pulse position */ +int16_t findpulse( + const int16_t L_frame, /* i : length of the frame */ + const float res[], /* i : residual signal */ + const int16_t T0, /* i : integer pitch */ + const int16_t enc_dec, /* i : flag enc/dec, 0 - enc, 1 - dec */ + int16_t *sign /* i/o: sign of the maximum */ +) +{ + const float *ptr; + float val, maxval; + int16_t i, maxi; + float resf[L_FRAME16k]; /* Low pass filtered residual */ + + if ( enc_dec == ENC ) + { + /*-----------------------------------------------------------------* + * Very simple LP filter + *-----------------------------------------------------------------*/ + + resf[0] = 0.50f * res[0] + 0.25f * res[1]; + for ( i = 1; i < L_frame - 1; i++ ) + { + resf[i] = 0.25f * res[i - 1] + 0.5f * res[i] + 0.25f * res[i + 1]; + } + resf[L_frame - 1] = 0.25f * res[L_frame - 2] + 0.50f * res[L_frame - 1]; + + /*-----------------------------------------------------------------* + * Find "biggest" pulse in the last pitch section + *-----------------------------------------------------------------*/ + + ptr = resf + L_frame - 1; + maxval = 0; + maxi = 0; + for ( i = 0; i < T0; i++ ) + { + val = (float) fabs( *ptr ); + if ( val > maxval ) + { + maxval = val; + maxi = i; + if ( *ptr >= 0 ) + { + *sign = 0; + } + else + { + *sign = 1; + } + } + ptr--; + } + } + else + { + /*-----------------------------------------------------------------* + * Find "biggest" pulse in the last pitch section according to the sign + *-----------------------------------------------------------------*/ + + ptr = res; + maxval = 0; + maxi = 0; + + if ( *sign == 0 ) + { + for ( i = 1; i <= T0; i++ ) + { + val = *ptr++; + if ( val >= maxval ) + { + maxval = val; + maxi = i; + } + } + } + else + { + for ( i = 1; i <= T0; i++ ) + { + val = *ptr++; + if ( val <= maxval ) + { + maxval = val; + maxi = i; + } + } + } + } + + return ( maxi ); +} diff --git a/lib_com/fine_gain_bits.c b/lib_com/fine_gain_bits.c new file mode 100644 index 0000000000..240b174bef --- /dev/null +++ b/lib_com/fine_gain_bits.c @@ -0,0 +1,134 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "rom_com.h" +#include "prot.h" +#include +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * subband_gain_bits() + * + * HQ core encoder + *--------------------------------------------------------------------------*/ + +static void subband_gain_bits( + const int16_t *Rk, /* i : bit allocation per band (Q3)*/ + const int16_t N, /* i : number of bands */ + int16_t *bits, /* o : gain bits per band */ + const int16_t *sfmsize /* i : Size of bands */ +) +{ + int16_t i, b, tot; + int16_t bps; + + tot = 0; + + for ( i = 0; i < N; i++ ) + { + bps = ( Rk[i] * fg_inv_tbl_fx[sfmsize[i] >> 3] ) >> 18; + if ( ( ( sfmsize[i] * ( bps + 1 ) ) << 3 ) - Rk[i] == 0 ) + { /* correct approx. division result, to obtain exact integer division output */ + bps++; + } + bps = min( 7, bps ); + + b = fine_gain_bits[bps]; + bits[i] = b; + tot += b; + } + + if ( tot == 0 ) + { + /* If no gain bits were assigned, use one bit anyway for potential PVQ overage */ + bits[0] = 1; + } + + return; +} + +/*--------------------------------------------------------------------------* + * assign_gain_bits() + * + * Assign gain adjustment bits and update bit budget + *--------------------------------------------------------------------------*/ + +/*! r: Number of assigned gain bits */ +int16_t assign_gain_bits( + const int16_t core, /* i : HQ core */ + const int16_t BANDS, /* i : Number of bands */ + const int16_t *band_width, /* i : Sub band bandwidth */ + int16_t *Rk, /* i/o: Bit allocation/Adjusted bit alloc. (Q3) */ + int16_t *gain_bits_array, /* o : Assigned gain bits */ + int16_t *Rcalc /* o : Bit budget for shape quantizer (Q3) */ +) +{ + int16_t subband_cnt; + int16_t gain_bits_tot; + int16_t i; + + /* Allocate gain bits for every subband used, based on bitrate and bandwidth */ + if ( core == HQ_CORE ) + { + subband_gain_bits( Rk, BANDS, gain_bits_array, band_width ); + } + else + { + set_s( gain_bits_array, 0, BANDS ); + } + + /* Re-adjust bit budget for gain quantization */ + subband_cnt = 0; + gain_bits_tot = 0; + *Rcalc = 0; + for ( i = 0; i < BANDS; i++ ) + { + if ( Rk[i] > 0 ) + { + subband_cnt++; + Rk[i] -= gain_bits_array[i] * 8; + gain_bits_tot += gain_bits_array[i]; + *Rcalc += Rk[i]; + } + } + + return gain_bits_tot; +} diff --git a/lib_com/frame_ener.c b/lib_com/frame_ener.c new file mode 100644 index 0000000000..d5c38e6640 --- /dev/null +++ b/lib_com/frame_ener.c @@ -0,0 +1,131 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*----------------------------------------------------------------------------------* + * fer_energy() + * + * Estimation of pitch-synchronous (voiced sounds) or half-frame energy + *----------------------------------------------------------------------------------*/ + +void fer_energy( + const int16_t L_frame, /* i : frame length */ + const int16_t clas, /* i : frame classification */ + const float *synth, /* i : synthesized speech at Fs = 12k8 Hz */ + const float pitch, /* i : pitch period */ + float *enr, /* o : pitch-synchronous or half_frame energy */ + const int16_t offset /* i : speech pointer offset (0 or L_frame) */ +) +{ + int16_t len; + const float *pt_synth; + + if ( clas == VOICED_CLAS || clas == ONSET || clas == SIN_ONSET ) /* Voiced or Onset current frame */ + { + len = (int16_t) ( pitch + 0.5f ); /* pitch value */ + + pt_synth = synth; + if ( offset != 0 ) + { + pt_synth = synth + L_frame - len; + } + + emaximum( pt_synth, len, enr ); /* pitch synchronous E */ + } + else + { + pt_synth = synth; + if ( offset != 0 ) + { + pt_synth = synth + L_frame / 2; + } + + *enr = dotp( pt_synth, pt_synth, L_frame / 2 ); + *enr /= (float) ( L_frame / 2 ); + } + return; +} + + +/*------------------------------------------------------------------------* + * frame_energy() + * + * Compute pitch-synchronous energy at the frame end + *------------------------------------------------------------------------*/ + +float frame_energy( + const int16_t L_frame, /* i : length of the frame */ + const float *pitch, /* i : pitch values for each subframe */ + const float *speech, /* i : pointer to speech signal for E computation */ + const float lp_speech, /* i : long-term active speech energy average */ + float *frame_ener /* o : pitch-synchronous energy at frame end */ +) +{ + float enern; + const float *pt1; + int16_t len; + float dotProd; + + len = (int16_t) ( 0.5f * ( pitch[2] + pitch[3] ) + 0.5f ); + if ( len < L_SUBFR ) + { + len *= 2; + } + + pt1 = speech + L_frame - len; + + dotProd = dotp( pt1, pt1, len ); + if ( 0 == dotProd ) + { + *frame_ener = MIN_LOG_VAL_60dB; + } + else + { + *frame_ener = 10.0f * (float) log10( dotProd / (float) len ); + } + enern = *frame_ener - lp_speech; + + return enern; +} diff --git a/lib_com/get_gain.c b/lib_com/get_gain.c new file mode 100644 index 0000000000..320d5ad12c --- /dev/null +++ b/lib_com/get_gain.c @@ -0,0 +1,74 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*----------------------------------------------------------------------------------* + * get_gain() + * + * + *----------------------------------------------------------------------------------*/ + +/*! r: codebook gain (adaptive or fixed) */ +float get_gain( + const float x[], /* i : target signal */ + const float y[], /* i : filtered codebook excitation */ + const int16_t n, /* i : segment length */ + float *en_y /* o : energy of y (sum of y[]^2, optional) */ +) +{ + float corr = 0.0f, ener = 1e-6f; + int16_t i; + + for ( i = 0; i < n; i++ ) + { + corr += x[i] * y[i]; + ener += y[i] * y[i]; + } + + if ( en_y ) + { + *en_y = ener; + } + + return ( corr / ener ); +} diff --git a/lib_com/gs_bitallocation.c b/lib_com/gs_bitallocation.c new file mode 100644 index 0000000000..8c98bf27d9 --- /dev/null +++ b/lib_com/gs_bitallocation.c @@ -0,0 +1,935 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static float Find_bit_frac( const int16_t nb_band, const int16_t remaining_bits ); + +static void reajust_bits( float *bits_per_bands, const int16_t st_band, const int16_t end_band, const int16_t sum_bit_in, const int16_t bit_bdgt_in ); + + +/*-------------------------------------------------------------------* + * bands_and_bit_alloc() + * + * AC mode (GSC) bands and bits allocation + *-------------------------------------------------------------------*/ + +void bands_and_bit_alloc( + const int16_t cor_strong_limit, /* i : HF correlation */ + const int16_t noise_lev, /* i : dwn scaling factor */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ + const int16_t bits_used, /* i : Number of bit used before frequency Q */ + int16_t *bit, /* i/o: Number of bit allowed for frequency quantization */ + float *Ener_per_bd_iQ, /* i/o: Quantized energy vector */ + int16_t *max_ener_band, /* o : Sorted order */ + int16_t *bits_per_bands_s, /* i/o: Number of bit allowed per allowed subband (Q3) */ + int16_t *nb_subbands, /* o : Number of subband allowed */ + const float *exc_diff, /* i : Difference signal to quantize (encoder side only) */ + float *concat_in, /* o : Concatened PVQ's input vector (encoder side only) */ + int16_t *pvq_len, /* o : Number of bin covered with the PVQ */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t GSC_noisy_speech, /* i : GSC noisy speech flag */ + const int16_t L_frame, /* i : frame length */ + const int16_t element_mode, /* i : element mode */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +) +{ + int16_t bandoffset, i, j, nb_bands_max, bit_new_bands, bit_tmp, st_band, nb_bands; + float bit_fracf, etmp; + float sum_bit; + float ener_vec[MBANDS_GN_BITALLOC16k]; + int16_t nb_tot_bands; + int16_t bit_index, bit_index_mem, imax; + int16_t pos, band; + float SWB_bit_budget; + float bits_per_bands[MBANDS_GN_BITALLOC16k]; + float fzero_val, mp, mb, nb_bands_adj, bit_adj; + int16_t nb_pulse_per_band[MBANDS_GN_BITALLOC16k]; + + /* initializations */ + nb_tot_bands = 16; + set_f( bits_per_bands, 0.0f, MBANDS_GN_BITALLOC16k ); + + if ( L_frame == L_FRAME16k ) + { + nb_tot_bands = MBANDS_GN_BITALLOC16k; + } + + /* To adapt current energy band to PVQ freq band for sorting*/ + ener_vec[0] = Ener_per_bd_iQ[0] + Ener_per_bd_iQ[1]; + mvr2r( Ener_per_bd_iQ + 1, ener_vec, 15 ); + ener_vec[15] = ener_vec[14]; + + if ( L_frame == L_FRAME16k ) + { + ener_vec[16] = Ener_per_bd_iQ[16]; + ener_vec[17] = ( Ener_per_bd_iQ[16] + Ener_per_bd_iQ[17] ) * 0.5f; + ener_vec[18] = Ener_per_bd_iQ[17]; + ener_vec[19] = Ener_per_bd_iQ[17] * 0.8f; + } + + for ( i = 0; i < nb_tot_bands; i++ ) + { + ener_vec[i] = (float) ( (int16_t) ( ener_vec[i] * 4096.f + 0.5f ) ); + } + + /*------------------------------------------------------------------------ + * Determination of the number of bits available to the frequency domain + * Allocation of a maximum number of band to be encoded + *-----------------------------------------------------------------------*/ + + nb_bands_max = nb_tot_bands; + bit_new_bands = 5; + + if ( core_brate > ACELP_16k40 && L_frame == L_FRAME16k ) + { + bit_new_bands = 7; + } + + i = 0; + while ( i < SIZE_BRATE_INTERMED_TBL ) + { + if ( core_brate <= brate_intermed_tbl[i] ) + { + break; + } + + if ( brate_intermed_tbl[i] == ACELP_24k40 ) + { + break; + } + + i++; + } + + if ( element_mode > EVS_MONO && coder_type == AUDIO && + core_brate <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ + { + i--; + } + + bit_index = BRATE2IDX( brate_intermed_tbl[i] ) * 17; + + bit_index_mem = bit_index; + + if ( ( coder_type == AUDIO || coder_type == INACTIVE ) && bwidth == NB ) + { + if ( core_brate >= ACELP_9k60 ) + { + *bit = (int16_t) ( core_brate * ( 1.0f / FRAMES_PER_SEC ) + 0.5f ) - bits_used - 25; + } + else + { + *bit = (int16_t) ( core_brate * ( 1.0f / FRAMES_PER_SEC ) + 0.5f ) - bits_used - 21; + } + + nb_tot_bands = 10; + } + else + { + *bit = (int16_t) ( core_brate * ( 1.0f / FRAMES_PER_SEC ) + 0.5f ) - bits_used - GSC_freq_bits[bit_index]; + } + + if ( L_frame == L_FRAME16k ) + { + *bit -= 8; + } + + if ( coder_type == INACTIVE && core_brate <= GSC_LRES_GAINQ_LIMIT ) /* can happen only for 2nd channel inactive */ + { + *bit += GSC_LRES_NB_NITS; + } + + if ( *bit > 0 ) + { + if ( GSC_IVAS_mode > 0 ) + { + SWB_bit_budget = *bit; + st_band = 5; + + set_f( bits_per_bands, 0, MBANDS_GN_BITALLOC16k ); + + /* 2- Decide the pourcentage of bits allocated to LF (between 50-75%) depending of the temporal contribution in GSC */ + bit_fracf = ( -0.125f * Diff_len + 76.0f ) / 100; + check_bounds( &bit_fracf, 0.50f, 0.75f ); + + /* Adjusment of the bitrate between LF and HF base on the content type */ + /* 1 = new GSC bit alloc + 2 = GSC bit alloc for tc frame + 3 = more music like (should not happen often given music is coded with dft) */ + + if ( GSC_IVAS_mode <= 3 ) + { + nb_bands_max -= 6; + } + + if ( GSC_IVAS_mode == 2 ) + { + bit_fracf += 0.1f; + nb_bands_max--; + } + + if ( GSC_IVAS_mode == 3 ) + { + bit_fracf -= 0.1f; + nb_bands_max += 3; + } + + /* First find how much we want to share between LF and HF, at low bitrate, a miminum of bits is needed in LF by limitating the number of bands*/ + /* Adjust the number of band based on the content type and bitrate */ + nb_bands_adj = 1.0f; + if ( GSC_IVAS_mode == 1 && core_brate < GSC_L_RATE_STG ) + { + nb_bands_adj = 0.0125f * SWB_bit_budget - 0.75f; + } + else if ( GSC_IVAS_mode != 2 && core_brate > GSC_H_RATE_STG ) + { + nb_bands_adj = 0.02f * SWB_bit_budget - 1.2f; + } + nb_bands_max = (int16_t) ( nb_bands_max * nb_bands_adj + 0.5f ); + check_bounds_s( &nb_bands_max, 5, nb_tot_bands ); + + bit_fracf *= SWB_bit_budget; + + /* Estimation of the number of bit used in HF */ + /* with only the first weigthing The number of bits in max_ener_band[st_band-1] = 17% of bit_fracf */ + mb = .17f * bit_fracf; + mp = ( 2.0f * DSR_NB_PULSE ); + if ( core_brate < GSC_L_RATE_STG && GSC_IVAS_mode == 3 ) + { + mp = 1.5f * DSR_NB_PULSE; + } + else if ( core_brate < GSC_L_RATE_STG ) + { + mp = DSR_NB_PULSE; + } + + /* We want max_ener_band[st_band] <= max_ener_band[st_band-1] and max_ener_band[nb_bands_max-1] <= max_ener_band[st_band]*/ + /* We will estimate the number of bits to allocate of HF and put the remaining bits, if any, back on LF */ + /* compute the total possible number of band to be coded */ + nb_tot_bands = (int16_t) ( ( SWB_bit_budget - bit_fracf ) / ( mp + ( mb - mp ) / 2.0f ) ); + mp = min( mp, mb ); + if ( nb_tot_bands + st_band > nb_bands_max ) + { + bit_adj = ( ( mb + mp ) / 2 ) * ( nb_tot_bands + st_band - nb_bands_max ); + bit_adj = max( 0, bit_adj ); + nb_tot_bands = nb_bands_max - st_band; + bit_fracf += bit_adj; + } + nb_tot_bands += st_band; + + /* Allocate bits to LF */ + etmp = 0.23f; + for ( j = 0; j < st_band; j++ ) + { + i = j; + max_ener_band[j] = i; + ener_vec[i] = MIN16B; + bits_per_bands[j] = etmp * bit_fracf; + etmp -= 0.015f; + } + + SWB_bit_budget -= bit_fracf; + + /* Find low energy band in HF */ + set_s( nb_pulse_per_band, 2, MBANDS_GN_BITALLOC16k ); + for ( i = st_band + 2; i < nb_tot_bands - 1; i++ ) + { + if ( ener_vec[i] < ener_vec[i - 1] && ener_vec[i] < ener_vec[i + 1] ) + { + nb_pulse_per_band[i] = 1; + } + } + for ( j = st_band; j < nb_tot_bands; j++ ) + { + if ( j > 6 ) + { + i = maximum( ener_vec, nb_tot_bands, &etmp ); + } + else + { + i = j; + } + + max_ener_band[j] = i; + ener_vec[i] = MIN16B; + } + + /* Recompute the final bit distribution for HF */ + if ( nb_tot_bands > st_band ) + { + bit_fracf = DSR_NB_PULSE; + mb = ( SWB_bit_budget * 2 / ( nb_tot_bands - st_band ) ) - mp; + bit_fracf = ( mb - mp ) / ( nb_tot_bands - st_band ); + mb -= bit_fracf; + /* Do the distribution */ + for ( j = st_band; j < nb_tot_bands; j++ ) + { + if ( nb_pulse_per_band[max_ener_band[j]] > 1 ) + { + bits_per_bands[max_ener_band[j]] = mb; + } + else + { + bits_per_bands[max_ener_band[j]] = 4.5f; + } + mb -= bit_fracf; + SWB_bit_budget -= bits_per_bands[max_ener_band[j]]; + } + } + + /* Series of verification in case bit allocated != the budget */ + if ( SWB_bit_budget > 0 ) + { + i = st_band - 1; + while ( SWB_bit_budget > 0 ) + { + bits_per_bands[i]++; + SWB_bit_budget--; + i--; + if ( i == -1 ) + { + i = st_band - 1; + } + } + } + + nb_bands = nb_tot_bands; + + sum_bit = 0; + j = 0; + for ( i = 0; i < nb_bands; i++ ) + { + if ( bits_per_bands[i] > 112 ) + { + sum_bit += bits_per_bands[i] - 112; + bits_per_bands[i] = 112; + j = i + 1; + } + + /* safety check for overage bit reallocation */ + else if ( bits_per_bands[i] + sum_bit / 3 > 112 ) + { + j = i + 1; + } + } + + if ( sum_bit != 0 ) + { + sum_bit /= ( nb_bands - j ); + for ( i = j; i < nb_bands; i++ ) + { + bits_per_bands[i] += sum_bit; + } + } + } + else if ( GSC_noisy_speech ) + { + SWB_bit_budget = *bit; + nb_bands = 5; + + fzero_val = 0.0f; + if ( element_mode > EVS_MONO ) + { + fzero_val = MIN16B_FLT; + } + + if ( coder_type == UNVOICED && element_mode > EVS_MONO ) + { + nb_bands = 3; + if ( SWB_bit_budget > 20 ) + { + nb_bands = 5; + } + } + else if ( bwidth < SWB ) + { + nb_bands = 7; + } + + st_band = nb_bands; + + set_f( bits_per_bands, 0, MBANDS_GN ); + + bit_fracf = Find_bit_frac( nb_bands, (int16_t) SWB_bit_budget ); /* Supplementary bits distributed only on first bands */ + + nb_tot_bands = nb_bands_max - 6; + + if ( nb_tot_bands > 16 ) + { + nb_tot_bands = 16; + } + + for ( j = 0; j < 2; j++ ) + { + i = j; + max_ener_band[j] = i; + ener_vec[i] = fzero_val; + } + + if ( bwidth < SWB ) + { + if ( coder_type == UNVOICED && element_mode > EVS_MONO ) + { + nb_tot_bands = 5; + } + + for ( ; j < nb_bands; j++ ) + { + i = maximum( ener_vec, nb_tot_bands, &etmp ); + max_ener_band[j] = i; + ener_vec[i] = fzero_val; + } + } + else + { + for ( ; j < nb_bands; j++ ) + { + i = maximum( ener_vec, nb_tot_bands, &etmp ); + max_ener_band[j] = i; + ener_vec[i] = fzero_val; + } + } + + set_f( bits_per_bands, bit_fracf, nb_bands ); + } + else + { + bit_index++; + bit_tmp = *bit - GSC_freq_bits[bit_index]; + bit_index++; + nb_bands_max += GSC_freq_bits[bit_index]; + bit_index++; + + *pvq_len = 112; + st_band = 7; + + if ( L_frame == L_FRAME16k && core_brate > ACELP_16k40 ) + { + *pvq_len = 160; + st_band = 10; + nb_bands = *pvq_len / 16; + bit_tmp -= 35; + bit_new_bands = 5; + } + + if ( core_brate <= ACELP_9k60 ) + { + *pvq_len = 80; + st_band = 5; + if ( Diff_len == 0 ) + { + nb_bands_max += 2; + bit_tmp -= 13; + } + } + else if ( Diff_len == 0 ) + { + nb_bands_max += 2; + bit_tmp -= 17; + } + + nb_bands = *pvq_len / 16; + nb_bands_max = min( nb_bands_max, MBANDS_GN_BITALLOC16k ); + + /*------------------------------------------------------------------------ + * Adjustement of the maximum number of bands in function of the + * dynamics of the spectrum (more or less speech like) + *-----------------------------------------------------------------------*/ + + if ( coder_type == INACTIVE || noise_lev >= NOISE_LEVEL_SP3 ) + { + /* Probably classification error -> concentrate bits on LF */ + if ( L_frame == L_FRAME16k && core_brate >= ACELP_24k40 ) + { + nb_bands_max = nb_tot_bands - 2; + } + else if ( core_brate >= ACELP_16k40 ) + { + nb_bands_max = nb_bands + 2; + } + else if ( core_brate >= ACELP_8k00 ) + { + nb_bands_max = nb_bands + 1; + } + else + { + nb_bands_max = nb_bands; + } + } + else if ( noise_lev >= NOISE_LEVEL_SP2 || ( core_brate <= ACELP_13k20 && core_brate >= ACELP_9k60 && cor_strong_limit == 0 ) ) /* Very low dynamic, tend to speech, do not try to code HF at all */ + { + nb_bands_max -= 2; + } + else if ( noise_lev >= NOISE_LEVEL_SP1 ) /* Very low dynamic, tend to speech, code less HF */ + { + nb_bands_max -= 1; + } + + if ( L_frame == L_FRAME16k ) + { + if ( core_brate < ACELP_24k40 ) + { + nb_bands_max -= 4; + } + else if ( core_brate < ACELP_32k ) + { + if ( Diff_len > 0 || noise_lev >= NOISE_LEVEL_SP2 ) + { + nb_bands_max -= 2; + bit_new_bands *= 2; + } + } + else if ( core_brate >= ACELP_32k ) + { + bit_new_bands *= 2; + } + } + + if ( bwidth == NB && nb_bands_max > 10 ) + { + nb_bands_max = 10; + } + + /*------------------------------------------------------------------------ + * Find extra number of band to code according to bitrate availables + *-----------------------------------------------------------------------*/ + + while ( bit_tmp >= bit_new_bands && nb_bands <= nb_bands_max - 1 ) + { + bit_tmp -= bit_new_bands; + nb_bands++; + } + + /*------------------------------------------------------------------------ + * Fractional bits to distribute on the first x bands + *-----------------------------------------------------------------------*/ + + if ( L_frame == L_FRAME16k && core_brate > ACELP_32k ) + { + bit_fracf = 0; + } + else + { + bit_fracf = Find_bit_frac( st_band, bit_tmp ); /* Supplementary bits distributed only on first bands */ + } + + /*------------------------------------------------------------------------ + * Complete the bit allocation per frequency band + *-----------------------------------------------------------------------*/ + + imax = 5; + if ( core_brate > ACELP_9k60 ) + { + imax = 7; + } + + for ( i = 0; i < imax; i++ ) + { + bits_per_bands[i] = GSC_freq_bits[bit_index] + bit_fracf; + bit_index++; + } + + if ( L_frame == L_FRAME16k && core_brate > ACELP_16k40 ) + { + bit_index = 0; + i = imax - 1; + bits_per_bands[i] += Compl_GSC_freq_bits[bit_index]; + i++; + bit_index++; + + for ( ; i < 10; i++ ) + { + bits_per_bands[i] += Compl_GSC_freq_bits[bit_index] + bit_fracf; + bit_index++; + } + } + + if ( Diff_len == 0 ) + { + bit_index = bit_index_mem + 10; + for ( i = 0; i < 7; i++ ) + { + bits_per_bands[i] += GSC_freq_bits[bit_index]; + bit_index++; + } + } + + if ( bit_fracf < 0 ) + { + for ( j = 0; j < nb_tot_bands; j++ ) + { + bits_per_bands[j] = max( bits_per_bands[j], 0 ); + } + } + + /*-------------------------------------------------------------------------- + * Complete the bit allocation per frequency band for 16kHz high brate mode + *--------------------------------------------------------------------------*/ + + if ( L_frame == L_FRAME16k && core_brate > ACELP_32k ) /* TBV if applicable */ + { + for ( j = st_band; j < nb_bands; j++ ) + { + bits_per_bands[j] = bit_new_bands; + } + + bit_fracf = ( 1.0f / nb_bands ) * ( bit_tmp ); + + etmp = 2.0f * bit_fracf / ( nb_bands + 1 ); + bit_fracf = etmp; + for ( j = nb_bands - 1; j >= 0; j-- ) + { + bits_per_bands[j] += etmp; + etmp += bit_fracf; + } + } + else + { + for ( j = st_band; j < nb_bands; j++ ) + { + bits_per_bands[j] = bit_new_bands; + } + } + + /*-------------------------------------------------------------------------- + * Compute a maximum band (band offset) for the search on maximal energy + * This is function of the spectral dynamic and the bitrate + *--------------------------------------------------------------------------*/ + + bandoffset = nb_tot_bands - ( nb_bands + 2 ); + + if ( noise_lev <= NOISE_LEVEL_SP1a ) + { + bandoffset--; + } + else if ( ( core_brate <= ACELP_13k20 && ( coder_type == INACTIVE || noise_lev >= NOISE_LEVEL_SP3 ) ) || ( core_brate <= ACELP_13k20 && core_brate >= ACELP_9k60 && cor_strong_limit == 0 ) ) + { + bandoffset++; + } + + if ( bandoffset < 0 ) + { + bandoffset = 0; + } + + /*-------------------------------------------------------------------------- + * Initiazed sorted vector + * For the first x bands to be included in th final sorted vector + * Sort the remaining bands in decrease energy order + *--------------------------------------------------------------------------*/ + + for ( j = 0; j < nb_tot_bands; j++ ) + { + max_ener_band[j] = -10; + } + + for ( j = 0; j < st_band; j++ ) + { + max_ener_band[j] = j; + ener_vec[j] = -10; + } + + pos = st_band; + for ( ; j < nb_bands; j++ ) + { + i = maximum( ener_vec, nb_tot_bands - bandoffset, &etmp ); + if ( i > pos ) + { + pos = i; + } + max_ener_band[j] = i; + ener_vec[i] = -10; + } + + /* re-allocate bits to the frames such that the highest band with allocated bits is higher than the threshold */ + if ( nb_tot_bands - bandoffset > nb_bands && ( pos > 7 && core_brate == ACELP_8k00 ) && bwidth == WB ) + { + band = nb_tot_bands - bandoffset - nb_bands; + for ( j = 0; j < band; j++ ) + { + i = maximum( ener_vec, nb_tot_bands - bandoffset, &etmp ); + max_ener_band[nb_bands + j] = i; + ener_vec[i] = -10; + bits_per_bands[nb_bands + j] = 5; + } + nb_bands += band; + + bit_tmp = 5 * band; + if ( band <= 2 ) + { + for ( j = st_band - 1; j < nb_bands; j++ ) + { + bits_per_bands[j] += 1; + } + bit_tmp += nb_bands - st_band + 1; + } + + i = 0; + j = 0; + while ( bit_tmp > 0 ) + { + bits_per_bands[j] -= 1; + + if ( j == st_band - 1 - i ) + { + j = 0; + } + else + { + ++j; + } + + if ( j == 0 && i < st_band - 1 ) + { + i++; + } + + bit_tmp -= 1; + } + } + + /*-------------------------------------------------------------------------- + * Bit sum verification for GSC inactive at very high rate + * The maximum number of bits per band of length 16 is 112 + * Redistribute the overage bits if needed + *--------------------------------------------------------------------------*/ + + sum_bit = 0; + j = 0; + for ( i = 0; i < nb_bands; i++ ) + { + if ( bits_per_bands[i] > 112 ) + { + sum_bit += bits_per_bands[i] - 112; + bits_per_bands[i] = 112; + j = i + 1; + } + + /* safety check for overage bit reallocation */ + else if ( bits_per_bands[i] + sum_bit / 3 > 112 ) + { + j = i + 1; + } + } + + if ( sum_bit != 0 ) + { + sum_bit /= ( nb_bands - j ); + for ( i = j; i < nb_bands; i++ ) + { + bits_per_bands[i] += sum_bit; + } + } + } + + /*-------------------------------------------------------------------------- + * second step of bit sum verification, normally sum_bit == *bit + *--------------------------------------------------------------------------*/ + + sum_bit = 0.00f; + for ( i = 0; i < nb_bands; i++ ) + { + bits_per_bands[i] = (float) floor( bits_per_bands[i] ); + sum_bit += bits_per_bands[i]; + } + + if ( GSC_IVAS_mode != 0 && sum_bit < *bit ) /* If we need to add bits, we are doing it on the LF */ + { + reajust_bits( bits_per_bands, 0, nb_bands, (int16_t) sum_bit, *bit ); + } + else + { + reajust_bits( bits_per_bands, nb_bands - 1, 0, (int16_t) sum_bit, *bit ); + } + + /*-------------------------------------------------------------------------- + * Recompute the real number/length of frequency bands to encode + *--------------------------------------------------------------------------*/ + + *nb_subbands = nb_bands; + *pvq_len = *nb_subbands * 16; + + /*-------------------------------------------------------------------------- + * Concatenate bands (encoder only) + *--------------------------------------------------------------------------*/ + + if ( exc_diff != NULL ) + { + for ( j = 0; j < nb_bands; j++ ) + { + mvr2r( exc_diff + max_ener_band[j] * 16, concat_in + j * 16, 16 ); + } + } + + set_s( bits_per_bands_s, 0, nb_tot_bands ); + + for ( j = 0; j < nb_bands; j++ ) + { + bits_per_bands_s[j] = ( (int16_t) bits_per_bands[j] ) << 3; + } + } + else /* *bit == 0 */ + { + set_s( bits_per_bands_s, 0, nb_tot_bands ); + *nb_subbands = 0; + *pvq_len = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * reajust_bits() + * + * + *-------------------------------------------------------------------*/ + +static void reajust_bits( + float *bits_per_bands, + const int16_t st_band, + const int16_t end_band, + const int16_t sum_bit_in, + const int16_t bit_bdgt_in ) +{ + int16_t i, amount_to_add, incr; + int16_t bit_bdgt, sum_bit; + + incr = 1; + if ( end_band < st_band ) + { + incr = -1; + } + + if ( bit_bdgt_in < sum_bit_in ) + { + amount_to_add = -1; + bit_bdgt = sum_bit_in; + sum_bit = bit_bdgt_in; + } + else + { + bit_bdgt = bit_bdgt_in; + sum_bit = sum_bit_in; + amount_to_add = 1; + } + + i = st_band; + while ( bit_bdgt > sum_bit ) + { + if ( amount_to_add > 0 || ( amount_to_add < 0 && bits_per_bands[i] > 1 ) ) + { + bits_per_bands[i] += amount_to_add; + sum_bit += (int16_t) abs( amount_to_add ); + } + + i += incr; + if ( i == end_band ) + { + i = st_band; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Find_bit_frac() + * + * Computes the fraction of the remaining bit budget to allocate to the bands + *-------------------------------------------------------------------*/ + +static float Find_bit_frac( + const int16_t nb_band, + const int16_t remaining_bits ) +{ + float var_out; + int16_t inv_bandQ15; + int32_t L_num; + + inv_bandQ15 = 6553; + if ( nb_band == 7 ) + { + inv_bandQ15 = 4681; + } + else if ( nb_band == 3 ) + { + inv_bandQ15 = 10922; + } + else if ( nb_band == 4 ) + { + inv_bandQ15 = 8192; + } + else if ( nb_band == 5 ) + { + inv_bandQ15 = 6536; + } + else if ( nb_band == 10 ) + { + inv_bandQ15 = 3277; + } + else + { + inv_bandQ15 = (int16_t) ( ( 1.0f / nb_band ) * 32678 + 0.5f ); +#ifdef DEBUGGING + printf( "1/%d NOT DEFINED in Find_bit_frac\n", nb_band ); +#endif + } + + L_num = inv_bandQ15 * remaining_bits; + L_num *= 8; + var_out = L_num / 262144.0f; + + return ( var_out ); +} diff --git a/lib_com/gs_gains.c b/lib_com/gs_gains.c new file mode 100644 index 0000000000..ea23b27781 --- /dev/null +++ b/lib_com/gs_gains.c @@ -0,0 +1,695 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static int16_t VDQ_vec( float *Qvec_out, const float *mean_dic, const float *dic, const int16_t index, const int16_t vec_en ); + +/*-------------------------------------------------------------------* + * Comp_and_apply_gain() + * + * Compute and apply the quantized per band gain + *-------------------------------------------------------------------*/ + +void Comp_and_apply_gain( + float exc_diffQ[], /* i/o: Quantized excitation */ + float Ener_per_bd_iQ[], /* o : Target ener per band */ + float Ener_per_bd_yQ[], /* o : Ener per band for norm vector */ + int16_t Mbands_gn, /* i : number of bands */ + const int16_t ReUseGain /* i : Reuse the gain in Ener_per_bd_yQ */ +) +{ + int16_t i, i_band; + int16_t StartBin, NB_Qbins; + float y_gain; + + /* Recreate excitation for local synthesis and decoder */ + StartBin = 0; + NB_Qbins = 0; + for ( i_band = 0; i_band < Mbands_gn; i_band++ ) + { + StartBin += NB_Qbins; + NB_Qbins = mfreq_bindiv_loc[i_band]; + if ( ReUseGain == 1 ) + { + y_gain = Ener_per_bd_yQ[i_band]; + } + else + { + y_gain = (float) pow( 10, ( Ener_per_bd_iQ[i_band] - Ener_per_bd_yQ[i_band] ) ); + Ener_per_bd_yQ[i_band] = y_gain; + } + + for ( i = StartBin; i < NB_Qbins + StartBin; i++ ) + { + exc_diffQ[i] *= y_gain; + } + } + + return; +} + + +/*------------------------------------------------------------------* + * Ener_per_band_comp() + * + * Compute the energy per band in log domain for quantization purposes + * Loops are decomposed to accomodate the PVQ quantization + *------------------------------------------------------------------*/ + +void Ener_per_band_comp( + const float exc_diff[], /* i : target signal */ + float y_gain4[], /* o : Energy per band to quantize */ + const int16_t Mband, /* i : Max band */ + const int16_t Eflag, /* i : flag of highest band */ + const int16_t L_frame /* i : frame length */ +) +{ + float etmp; + const float *pt; + int16_t i, j; + + pt = exc_diff; + for ( j = 0; j < 2; j++ ) + { + y_gain4[j] = 0; + etmp = 0.02f; + + pt = exc_diff + j * 8; + for ( i = 0; i < 8; i++ ) + { + etmp += ( *pt * *pt ); + pt++; + } + + /* normalized to 16 bins to easy the quantization */ + y_gain4[j] = (float) log10( sqrt( 2 * etmp ) ); + } + + for ( j = 1; j < Mband - 2; j++ ) + { + etmp = 0.01f; + + pt = exc_diff + j * 16; + for ( i = 0; i < 16; i++ ) + { + etmp += ( *pt * *pt ); + pt++; + } + + y_gain4[j + 1] = (float) log10( sqrt( etmp ) ); + } + + if ( Eflag == 1 ) + { + etmp = 0.01f; + + pt = exc_diff + j * 16; + for ( i = 0; i < 32; i++ ) + { + etmp += ( *pt * *pt ); + pt++; + } + + y_gain4[j + 1] = (float) log10( sqrt( etmp / 2 ) ); + } + + if ( L_frame == L_FRAME16k ) + { + etmp = 0.01f; + + for ( i = 0; i < 32; i++ ) + { + etmp += ( *pt * *pt ); + pt++; + } + + y_gain4[j + 2] = (float) log10( sqrt( etmp / 2 ) ); + + for ( i = 0; i < 32; i++ ) + { + etmp += ( *pt * *pt ); + pt++; + } + + y_gain4[j + 3] = (float) log10( sqrt( etmp / 2 ) ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * GSC_gain_DQ() + * + * Form the final vector after gain quantization/Dequantization + * Common to both encoder and decoder + *-------------------------------------------------------------------*/ + +static void GSC_gain_DQ( + const int16_t element_mode, /* i : element mode */ + const int16_t enc_dec, /* i : encoder/decoder flag */ + const int16_t coder_type, /* i : Coder type */ + const int16_t Mbands_gn, /* i : Number of band */ + const int32_t core_brate, /* i : Core bitrate */ + const float mean_g, /* i : Average gain */ + const float *Gain_in, /* i : Unquantized gain vector */ + float *Gain_out /* o : Level adjusted unquantized gain vector */ +) +{ + float Gain_off; + int16_t i; + + /* Gain adjustment to fit ACELP generic inactive coding gain at low rate */ + Gain_off = 0.0f; + if ( coder_type == INACTIVE || coder_type == UNVOICED ) + { + if ( core_brate <= ACELP_5k00 && coder_type == UNVOICED ) + { + Gain_off = 9.f; + } + else if ( core_brate <= ACELP_7k20 ) + { + Gain_off = 8.f; /* 0 dB */ + } + else if ( core_brate <= ACELP_8k00 ) + { + Gain_off = 6.6f; /* ~-3.3 dB */ + } + else if ( core_brate <= ACELP_9k60 ) + { + Gain_off = 4.8f; /* ~-2.4 dB */ + } + else if ( core_brate <= ACELP_11k60 ) + { + Gain_off = 3.5f; /* ~-2.4 dB */ + } + else if ( core_brate <= ACELP_13k20 ) + { + Gain_off = 3.0f; /* ~-2.4 dB */ + } + } + + if ( coder_type != INACTIVE && coder_type != UNVOICED ) + { + for ( i = 0; i < Mbands_gn; i++ ) + { + Gain_out[i] = Gain_in[i] + mean_g; + } + } + else + { + /*mimic ACELP decay of energy for low rates*/ + if ( element_mode == EVS_MONO && enc_dec == DEC ) + { + /* This is to keep EVS mono bit-exact with the standard (there might be a small desynchronization between encoder and decoder but there is no real quality or interop. issue) */ + for ( i = 0; i < Mbands_gn; i++ ) + { + Gain_out[i] += mean_g - i * ( Gain_off / 20.f ) / ( (float) Mbands_gn ); + } + } + else + { + for ( i = 0; i < Mbands_gn; i++ ) + { + Gain_out[i] = Gain_in[i] + mean_g - ( i * ( Gain_off / 20.f ) / ( (float) Mbands_gn ) ); + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * gsc_gainQ() + * + * Quantization of the energy per band + *-------------------------------------------------------------------*/ + +float gsc_gainQ( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t element_mode, /* i : element mode */ + const int16_t idchan, /* i : channel ID */ + const float y_gain4[], /* i : Energy per band */ + float y_gainQ[], /* o : quantized energy per band */ + const int32_t core_brate, /* i : Core rate */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t L_frame, /* i : frame length */ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int32_t core_brate_inp /* i : true core bitrate */ +) +{ + float y_gain_tmp[MBANDS_GN16k], y_gain_tmp2[MBANDS_GN16k]; + int16_t i, idx_g = 0; + float mean_4g[1], ftmp1; + int16_t Mbands_gn = MBANDS_GN; + float y_gain_tmp3[MBANDS_GN]; + + if ( L_frame == L_FRAME16k ) + { + Mbands_gn = MBANDS_GN16k; + } + + mean_4g[0] = 0; + + if ( ( coder_type == AUDIO || coder_type == INACTIVE ) && bwidth == NB ) + { + ftmp1 = mean( y_gain4, 10 ) - 0.6f; + for ( i = 0; i < Mbands_gn; i++ ) + { + if ( y_gain4[i] < ftmp1 ) + { + y_gain_tmp2[i] = ftmp1; + } + else + { + y_gain_tmp2[i] = y_gain4[i]; + } + } + + /* Quantized mean gain without clipping */ + mean_4g[0] = mean( y_gain_tmp2, 10 ); + idx_g = (int16_t) vquant( mean_4g, Gain_meanNB, mean_4g, Gain_mean_dicNB, 1, 64 ); + push_indice( hBstr, IND_MEAN_GAIN2, idx_g, 6 ); + + for ( i = 0; i < Mbands_gn; i++ ) + { + y_gain_tmp[i] = y_gain_tmp2[i] - mean_4g[0]; + } + + if ( y_gain_tmp[9] < -0.3f ) + { + y_gain_tmp[9] = -0.3f; + } + + set_f( y_gain_tmp + 10, 0.0f, MBANDS_GN - 10 ); + idx_g = (int16_t) vquant( y_gain_tmp, Mean_dic_NB, y_gain_tmp, Gain_dic1_NB, 3, 64 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 6 ); + + if ( core_brate < ACELP_9k60 ) + { + idx_g = vquant( y_gain_tmp + 3, Mean_dic_NB + 3, y_gain_tmp + 3, Gain_dic2_NB, 3, 32 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 5 ); + + idx_g = vquant( y_gain_tmp + 6, Mean_dic_NB + 6, y_gain_tmp + 6, Gain_dic3_NB, 4, 16 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 4 ); + } + else + { + idx_g = vquant( y_gain_tmp + 3, Mean_dic_NB + 3, y_gain_tmp + 3, Gain_dic2_NBHR, 3, 64 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 6 ); + + idx_g = vquant( y_gain_tmp + 6, Mean_dic_NB + 6, y_gain_tmp + 6, Gain_dic3_NBHR, 4, 128 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 7 ); + } + + if ( core_brate <= ACELP_9k60 && coder_type == INACTIVE ) + { + /* Some energy is needed in high band for stat_noise_uv_enc() to be functional in inactive speech */ + y_gain_tmp[10] = mean( y_gain_tmp + 6, 3 ); + y_gain_tmp[11] = mean( y_gain_tmp + 7, 3 ); + y_gain_tmp[12] = mean( y_gain_tmp + 8, 3 ); + y_gain_tmp[13] = mean( y_gain_tmp + 9, 3 ); + y_gain_tmp[14] = mean( y_gain_tmp + 10, 3 ); + y_gain_tmp[15] = mean( y_gain_tmp + 11, 3 ); + } + else + { + set_f( y_gain_tmp + 10, 0, MBANDS_GN - 10 ); + } + } + else + { + ftmp1 = mean( y_gain4, 16 ); + for ( i = 0; i < Mbands_gn; i++ ) + { + if ( y_gain4[i] < ftmp1 - 0.6f ) + { + y_gain_tmp2[i] = ftmp1 - .6f; + } + else if ( y_gain4[i] > ftmp1 + 0.6f ) + { + y_gain_tmp2[i] = ftmp1 + 0.6f; + } + else + { + y_gain_tmp2[i] = y_gain4[i]; + } + } + + mean_4g[0] = mean( y_gain_tmp2, 16 ); + idx_g = vquant( mean_4g, mean_m, mean_4g, mean_gain_dic, 1, 64 ); + push_indice( hBstr, IND_MEAN_GAIN2, idx_g, 6 ); + + /* Subtraction of the average gain */ + for ( i = 0; i < Mbands_gn; i++ ) + { + y_gain_tmp[i] = y_gain_tmp2[i] - mean_4g[0]; + } + + if ( core_brate < ACELP_9k60 ) + { + /* prediction and quantization of the average gain */ + + /*--------------------------------------------------------------------------------------* + * Quantization of the first 8 bands + * Keep only 4 bands out of the last 8 bands + *--------------------------------------------------------------------------------------*/ + + mvr2r( y_gain_tmp, y_gain_tmp2, 8 ); + + y_gain_tmp2[8] = y_gain_tmp[8]; + y_gain_tmp2[9] = y_gain_tmp[10]; + y_gain_tmp2[10] = y_gain_tmp[12]; + y_gain_tmp2[11] = y_gain_tmp[14]; + + idx_g = 0; + idx_g = vquant( y_gain_tmp2, YGain_mean_LR, y_gain_tmp2, YGain_dic1_LR, 3, 32 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 5 ); + + if ( !( coder_type == INACTIVE && tdm_LRTD_flag == 0 && idchan == 1 ) || core_brate_inp > GSC_LRES_GAINQ_LIMIT ) + { + idx_g = vquant( y_gain_tmp2 + 3, YGain_mean_LR + 3, y_gain_tmp2 + 3, YGain_dic2_LR, 4, 32 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 5 ); + + /*----------------------------------------------------------------------* + * Vector quantization of the first 8 bands + quantization of the 4 bands out of the last 8 + * Interpolation of the last 4 bands Q to create bands 8-16 + *----------------------------------------------------------------------*/ + + idx_g = vquant( y_gain_tmp2 + 7, YGain_mean_LR + 7, y_gain_tmp2 + 7, YGain_dic3_LR, 5, 32 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 5 ); + + set_f( y_gain_tmp2 + 12, 0, MBANDS_GN - 12 ); + + /* Update to quantized vector */ + mvr2r( y_gain_tmp2, y_gain_tmp, 8 ); + + mvr2r( y_gain_tmp2 + 8, y_gain_tmp3, 4 ); + set_f( y_gain_tmp + 8, 0, 8 ); + fft_rel( y_gain_tmp2 + 8, 4, 2 ); + + mvr2r( y_gain_tmp2 + 8, y_gain_tmp + 8, 3 ); + y_gain_tmp[15] = y_gain_tmp2[11]; + ifft_rel( y_gain_tmp + 8, 8, 3 ); + + for ( i = 8; i < 16; i++ ) + { + y_gain_tmp[i] *= 1.41f; + } + + y_gain_tmp[8] = y_gain_tmp3[0]; + y_gain_tmp[10] = y_gain_tmp3[1]; + y_gain_tmp[12] = y_gain_tmp3[2]; + y_gain_tmp[14] = y_gain_tmp3[3]; + } + else + { + mvr2r( y_gain_tmp2, y_gain_tmp, 3 ); + set_f( y_gain_tmp + 3, 0.0f, MBANDS_GN16k - 3 ); + } + } + else + { + if ( L_frame == L_FRAME ) + { + idx_g = vquant( y_gain_tmp, YG_mean16, y_gain_tmp, YG_dicMR_1, 4, 64 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 6 ); + + idx_g = vquant( y_gain_tmp + 4, YG_mean16 + 4, y_gain_tmp + 4, YG_dicMR_2, 4, 32 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 5 ); + + idx_g = vquant( y_gain_tmp + 8, YG_mean16 + 8, y_gain_tmp + 8, YG_dicMR_3, 4, 32 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 5 ); + + idx_g = vquant( y_gain_tmp + 12, YG_mean16 + 12, y_gain_tmp + 12, YG_dicMR_4, 4, 16 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 4 ); + } + else + { + idx_g = vquant( y_gain_tmp, YG_mean16HR, y_gain_tmp, YG_dicHR_1, 4, 128 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 7 ); + + idx_g = vquant( y_gain_tmp + 4, YG_mean16HR + 4, y_gain_tmp + 4, YG_dicHR_2, 4, 64 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 6 ); + + idx_g = vquant( y_gain_tmp + 8, YG_mean16HR + 8, y_gain_tmp + 8, YG_dicHR_3, 4, 64 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 6 ); + + idx_g = vquant( y_gain_tmp + 12, YG_mean16HR_16kHz, y_gain_tmp + 12, YG_dicHR_4_16kHz, 4, 64 ); + push_indice( hBstr, IND_Y_GAIN_TMP, idx_g, 6 ); + + idx_g = vquant( y_gain_tmp + 16, YG_meanL2G_16kHz, y_gain_tmp + 16, YG_dicL2G_16kHz, 2, 8 ); + push_indice( hBstr, IND_Y_GAIN_HF, idx_g, 3 ); + } + } + } + + GSC_gain_DQ( element_mode, ENC, coder_type, Mbands_gn, core_brate, mean_4g[0], y_gain_tmp, y_gainQ ); + + return mean_4g[0]; +} + +/*-------------------------------------------------------------------* + * gsc_gaindec() + * + * Generic signal frequency band decoding and application + *-------------------------------------------------------------------*/ + +/*! r: average frequency gain */ +float gsc_gaindec( + Decoder_State *st, /* i/o: decoder state structure */ + float y_gainQ[], /* o : quantized gain per band */ + const int32_t core_brate, /* i : core used */ + float old_y_gain[], /* i/o: AR gain quantizer for low rate */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth /* i : input signal bandwidth */ +) +{ + int16_t idx_g, i; + float mean_4g; + int16_t Mbands_gn = MBANDS_GN; + float y_gain_tmp3[MBANDS_GN]; + + if ( st->L_frame == L_FRAME16k ) + { + Mbands_gn = MBANDS_GN16k; + } + + if ( ( coder_type == AUDIO || coder_type == INACTIVE ) && bwidth == NB ) + { + idx_g = get_next_indice( st, 6 ); + VDQ_vec( &mean_4g, Gain_meanNB, Gain_mean_dicNB, idx_g, 1 ); + + idx_g = get_next_indice( st, 6 ); + VDQ_vec( y_gainQ, Mean_dic_NB, Gain_dic1_NB, idx_g, 3 ); + + if ( core_brate < ACELP_9k60 ) + { + idx_g = get_next_indice( st, 5 ); + VDQ_vec( y_gainQ + 3, Mean_dic_NB + 3, Gain_dic2_NB, idx_g, 3 ); + + idx_g = get_next_indice( st, 4 ); + VDQ_vec( y_gainQ + 6, Mean_dic_NB + 6, Gain_dic3_NB, idx_g, 4 ); + } + else + { + idx_g = get_next_indice( st, 6 ); + VDQ_vec( y_gainQ + 3, Mean_dic_NB + 3, Gain_dic2_NBHR, idx_g, 3 ); + + idx_g = get_next_indice( st, 7 ); + VDQ_vec( y_gainQ + 6, Mean_dic_NB + 6, Gain_dic3_NBHR, idx_g, 4 ); + } + + if ( core_brate <= ACELP_9k60 && coder_type == INACTIVE ) + { + /* Some energy is needed in high band for stat_noise_uv_enc to be functional in inactive speech */ + y_gainQ[10] = mean( y_gainQ + 6, 3 ); + y_gainQ[11] = mean( y_gainQ + 7, 3 ); + y_gainQ[12] = mean( y_gainQ + 8, 3 ); + y_gainQ[13] = mean( y_gainQ + 9, 3 ); + y_gainQ[14] = mean( y_gainQ + 10, 3 ); + y_gainQ[15] = mean( y_gainQ + 11, 3 ); + } + else + { + set_f( y_gainQ + 10, 0, MBANDS_GN - 10 ); + } + } + else + { + idx_g = get_next_indice( st, 6 ); + VDQ_vec( &mean_4g, mean_m, mean_gain_dic, idx_g, 1 ); + + if ( core_brate < ACELP_9k60 ) + { + /*--------------------------------------------------------------------------------------* + * UQ of the first 8 bands and half of the last 8 bands + *--------------------------------------------------------------------------------------*/ + + idx_g = get_next_indice( st, 5 ); + VDQ_vec( y_gainQ, YGain_mean_LR, YGain_dic1_LR, idx_g, 3 ); + + if ( !( coder_type == INACTIVE && st->tdm_LRTD_flag == 0 && st->idchan == 1 ) || st->core_brate > GSC_LRES_GAINQ_LIMIT ) + { + idx_g = get_next_indice( st, 5 ); + VDQ_vec( y_gainQ + 3, YGain_mean_LR + 3, YGain_dic2_LR, idx_g, 4 ); + + /*----------------------------------------------------------------------* + * Interpolation of the last 4 Q bands to create bands 8-16 + * And scaling + *----------------------------------------------------------------------*/ + + idx_g = get_next_indice( st, 5 ); + VDQ_vec( y_gainQ + 7, YGain_mean_LR + 7, YGain_dic3_LR, idx_g, 5 ); + + mvr2r( y_gainQ + 8, y_gain_tmp3, 4 ); + set_f( y_gainQ + 12, 0.0f, 4 ); + + fft_rel( y_gainQ + 8, 4, 2 ); + + y_gainQ[15] = y_gainQ[11]; + y_gainQ[11] = 0.0f; + + ifft_rel( y_gainQ + 8, 8, 3 ); + + for ( i = 8; i < 16; i++ ) + { + y_gainQ[i] *= 1.41f; + } + + /*----------------------------------------------------------------------* + * Copy the true Q values in the specific bands + *----------------------------------------------------------------------*/ + + y_gainQ[8] = y_gain_tmp3[0]; + y_gainQ[10] = y_gain_tmp3[1]; + y_gainQ[12] = y_gain_tmp3[2]; + y_gainQ[14] = y_gain_tmp3[3]; + } + else + { + set_f( y_gainQ + 3, 0.0f, MBANDS_GN16k - 3 ); + } + } + else + { + if ( st->L_frame == L_FRAME ) + { + idx_g = get_next_indice( st, 6 ); + VDQ_vec( y_gainQ, YG_mean16, YG_dicMR_1, idx_g, 4 ); + + idx_g = get_next_indice( st, 5 ); + VDQ_vec( y_gainQ + 4, YG_mean16 + 4, YG_dicMR_2, idx_g, 4 ); + + idx_g = get_next_indice( st, 5 ); + VDQ_vec( y_gainQ + 8, YG_mean16 + 8, YG_dicMR_3, idx_g, 4 ); + + idx_g = get_next_indice( st, 4 ); + VDQ_vec( y_gainQ + 12, YG_mean16 + 12, YG_dicMR_4, idx_g, 4 ); + } + else + { + idx_g = get_next_indice( st, 7 ); + VDQ_vec( y_gainQ, YG_mean16HR, YG_dicHR_1, idx_g, 4 ); + + idx_g = get_next_indice( st, 6 ); + VDQ_vec( y_gainQ + 4, YG_mean16HR + 4, YG_dicHR_2, idx_g, 4 ); + + idx_g = get_next_indice( st, 6 ); + VDQ_vec( y_gainQ + 8, YG_mean16HR + 8, YG_dicHR_3, idx_g, 4 ); + + idx_g = get_next_indice( st, 6 ); + VDQ_vec( y_gainQ + 12, YG_mean16HR_16kHz, YG_dicHR_4_16kHz, idx_g, 4 ); + + idx_g = get_next_indice( st, 3 ); + VDQ_vec( y_gainQ + 16, YG_meanL2G_16kHz, YG_dicL2G_16kHz, idx_g, 2 ); + } + } + } + + mvr2r( y_gainQ, old_y_gain, Mbands_gn ); + + GSC_gain_DQ( st->element_mode, DEC, coder_type, Mbands_gn, core_brate, mean_4g, y_gainQ, y_gainQ ); + + return mean_4g; +} + + +/*-------------------------------------------------------------------* + * VDQ_vec() + * + * Return the dequantized vector of index + *-------------------------------------------------------------------*/ + +static int16_t VDQ_vec( + float *Qvec_out, /* o : Quanitzed vector */ + const float *mean_dic, /* i : average codebook */ + const float *dic, /* i : codebook */ + const int16_t index, /* i : index of codebook*/ + const int16_t vec_en /* i : vector length */ +) +{ + int16_t i, j; + + j = index * vec_en; + for ( i = 0; i < vec_en; i++ ) + { + Qvec_out[i] = dic[j++]; + } + + for ( i = 0; i < vec_en; i++ ) + { + Qvec_out[i] += mean_dic[i]; + } + + return index; +} diff --git a/lib_com/gs_inact_switching.c b/lib_com/gs_inact_switching.c new file mode 100644 index 0000000000..a9d2a80046 --- /dev/null +++ b/lib_com/gs_inact_switching.c @@ -0,0 +1,148 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define ALPHA0 0.5f +#define BETA0 ( 1.0f - ALPHA0 ) + +/*-------------------------------------------------------------------* + * inact_switch_ematch() + * + * Apply energy matching when swithcing to INACTIVE frame coded by the GSC technology + *-------------------------------------------------------------------*/ + +void inact_switch_ematch( + float exc2[], /* i/o: CELP/GSC excitation buffer */ + float dct_exc_tmp[], /* i : GSC excitation in DCT domain */ + float lt_ener_per_band[], /* i/o: Long term energy per band */ + const int16_t coder_type, /* i : Coder type */ + const int16_t L_frame, /* i : Frame length */ + const int32_t total_brate, /* i : Total bitrate */ + const int16_t bfi, /* i : frame lost indicator */ + const int16_t last_core, /* i : Last core used */ + const int16_t last_codec_mode, /* i : Last codec mode */ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag*/ + const int16_t element_mode /* i : element mode */ +) +{ + float Ener_per_bd[MBANDS_GN16k]; + float ftmp; + float *pt_exc; + int16_t j, i; + + + /*-------------------------------------------------------------------------- + * average energy per band + *--------------------------------------------------------------------------*/ + + if ( ( coder_type == AUDIO || ( coder_type == UNVOICED && tdm_low_rate_mode == 1 ) ) && bfi == 0 ) + { + Ener_per_band_comp( dct_exc_tmp, Ener_per_bd, MBANDS_GN, 1, L_frame ); + + /* reset long-term energy per band */ + for ( i = 0; i < MBANDS_GN; i++ ) + { + lt_ener_per_band[i] = Ener_per_bd[i]; + } + } + else if ( coder_type == VOICED || coder_type == GENERIC || coder_type == TRANSITION || last_core != ACELP_CORE || last_codec_mode != MODE1 || ( element_mode > EVS_MONO && coder_type == UNVOICED ) ) + { + /* Find spectrum and energy per band for GC and VC frames */ + edct( exc2, dct_exc_tmp, L_frame, element_mode ); + + Ener_per_band_comp( dct_exc_tmp, Ener_per_bd, MBANDS_GN, 1, L_frame ); + + /* reset long-term energy per band */ + for ( i = 0; i < MBANDS_GN; i++ ) + { + lt_ener_per_band[i] = Ener_per_bd[i]; + } + } + else if ( coder_type == INACTIVE && total_brate <= MAX_GSC_INACTIVE_BRATE ) + { + /* Find spectrum and energy per band for inactive frames */ + edct( exc2, dct_exc_tmp, L_frame, element_mode ); + + Ener_per_band_comp( dct_exc_tmp, Ener_per_bd, MBANDS_GN, 1, L_frame ); + + /* More agressive smoothing in the first 50 frames */ + pt_exc = dct_exc_tmp; + for ( i = 0; i < MBANDS_GN; i++ ) + { + /* Compute smoothing gain to apply with gain limitation */ + lt_ener_per_band[i] = ALPHA0 * lt_ener_per_band[i] + BETA0 * Ener_per_bd[i]; + + ftmp = lt_ener_per_band[i] - Ener_per_bd[i]; + ftmp = (float) pow( 10, ftmp ); + + if ( i < 2 ) + { + for ( j = 0; j < 8; j++ ) + { + *pt_exc *= ftmp; + pt_exc++; + } + } + else + { + for ( j = 0; j < 16; j++ ) + { + *pt_exc *= ftmp; + pt_exc++; + } + } + } + + /* Going back to time */ + edct( dct_exc_tmp, exc2, L_frame, element_mode ); + } + + return; +} diff --git a/lib_com/gs_noisefill.c b/lib_com/gs_noisefill.c new file mode 100644 index 0000000000..2885f324ca --- /dev/null +++ b/lib_com/gs_noisefill.c @@ -0,0 +1,846 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * gs_noisf() + * + * Noise fill-in function + *-------------------------------------------------------------------*/ + +static void gs_noisf( + const int16_t Start_BIN, /* i : First bin for noise fill */ + const int16_t NB_Qbins, /* i : Number of bin per band */ + const float Noise_fac, /* i : Noise level */ + const float *y_norm, /* i : Quantized pulses */ + float *exc_diffQ, /* o : Quantized pulses with noise added */ + int16_t *seed_tcx, /* i : Random generator seed */ + const int16_t coder_type /* i : coder type */ +) +{ + float ftmp; + int16_t i, k; + int16_t NB_zer = NB_Qbins / 2; + + if ( coder_type == INACTIVE ) + { + NB_zer = 2; + } + + /*----------------------------------------------* + * noise fill-in on unquantized subvector * + * injected only from 1066Hz to 6400Hz. * + *----------------------------------------------*/ + + for ( k = Start_BIN; k < NB_Qbins + Start_BIN; k += NB_zer ) + { + ftmp = 0.0; + for ( i = k; i < k + NB_zer; i++ ) + { + exc_diffQ[i] = (float) y_norm[i]; + ftmp += exc_diffQ[i] * exc_diffQ[i]; + } + + if ( ftmp < .5 ) + { + for ( i = k; i < k + NB_zer; i++ ) + { + exc_diffQ[i] += Noise_fac * ( (float) own_random( seed_tcx ) / PCM16_TO_FLT_FAC ); + } + } + else + { + /* This is added only to keep the seed in sync between different compilers */ + for ( i = k; i < k + NB_zer; i++ ) + { + own_random( seed_tcx ); + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * EstimateNoiseLevel_inner() + * + * Estimate noise level from the power spectrum + *-------------------------------------------------------------------*/ + +static void EstimateNoiseLevel_inner( + float *noisepb, /* o : Noise per band */ + const int32_t bitrate, /* i : Bitrate of the codec */ + const int16_t i_band, /* i : First band to compute the noise */ + const int16_t Mbands_gn /* i : number of bands */ +) +{ + int16_t i; + float noise_offset; + + noise_offset = 0.25f; + if ( bitrate > ACELP_24k40 ) + { + noise_offset = .2f; + } + else if ( bitrate >= ACELP_22k60 ) + { + noise_offset = .3f; + } + else if ( bitrate >= ACELP_9k60 ) + { + noise_offset = 0.35f; + } + else + { + noise_offset = .4f; + } + + set_f( noisepb + i_band, noise_offset, Mbands_gn - i_band ); + + for ( i = i_band; i < 5; i++ ) + { + if ( noisepb[i] > 0.2f ) + { + noisepb[i] = 0.2f; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * EstimateNoiseLevel() + * + * + *-------------------------------------------------------------------*/ + +static void EstimateNoiseLevel( + float *noisepb, /* o : Noise per band */ + const int32_t bitrate, /* i : Bitrate of the codec */ + const int16_t Diff_len, /* i : number of bin before cut-off frequency */ + const int16_t Mbands_gn, /* i : number of bands */ + const int16_t coder_type, /* i : coder type */ + const int16_t noise_lev, /* i : pulses dynamic */ + const int16_t pit_band_idx, /* i : bin position of the cut-off frequency */ + const int16_t last_bin, /* i : the last bin of bit allocation */ + const int16_t bwidth, + const int16_t L_frame /* i : frame length */ +) +{ + int16_t i_band; + + i_band = 0; + + if ( Diff_len < L_frame ) + { + EstimateNoiseLevel_inner( noisepb, bitrate, i_band, Mbands_gn ); + + if ( coder_type != INACTIVE ) + { + if ( ( bitrate == ACELP_8k00 && last_bin > 8 ) && bwidth != NB ) + { + while ( Mbands_gn > i_band ) + { + noisepb[i_band] *= 2.0f; + i_band++; + } + } + else + { + while ( pit_band_idx > i_band ) + { + noisepb[i_band] /= 2.0f; + i_band++; + } + } + } + } + + if ( ( coder_type == INACTIVE || noise_lev >= NOISE_LEVEL_SP3 ) && L_frame == L_FRAME ) + { + for ( i_band = 9; i_band < Mbands_gn; i_band++ ) + { + noisepb[i_band] *= 1.15f; + } + } + else if ( L_frame == L_FRAME16k ) + { + if ( bitrate == ACELP_13k20 ) + { + set_f( noisepb, .45f, Mbands_gn ); + } + + if ( coder_type == INACTIVE ) + { + for ( ; i_band < Mbands_gn; i_band++ ) + { + noisepb[i_band] = .4f; + } + } + else if ( ( noise_lev <= NOISE_LEVEL_SP1 ) && bitrate > ACELP_16k40 ) + { + for ( ; i_band < Mbands_gn - 4; i_band++ ) + { + noisepb[i_band] *= .6f; + } + } + else if ( ( noise_lev <= NOISE_LEVEL_SP2 ) && bitrate > ACELP_16k40 ) + { + for ( ; i_band < Mbands_gn - 4; i_band++ ) + { + noisepb[i_band] *= .8f; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Apply_NoiseFill() + * + * + *-------------------------------------------------------------------*/ + +static void Apply_NoiseFill( + float *exc_diffQ, /* i/o: Noise per band */ + int16_t *seed_tcx, /* i : Seed for noise */ + const float *noisepb, /* i : Noise per band */ + const int16_t Diff_len, /* i : number of bin before cut-off frequency */ + const int16_t Mbands_gn, /* i : number of bands */ + const int16_t coder_type, /* i : coder type */ + const int16_t *freq_nsbin_per_band /* i : bin per bands tables */ +) +{ + int16_t StartBin, NB_Qbins, i_band; + StartBin = 0; + NB_Qbins = 0; + + for ( i_band = 0; i_band < Mbands_gn; i_band++ ) + { + StartBin += NB_Qbins; + NB_Qbins = freq_nsbin_per_band[i_band]; + + if ( Diff_len < L_FRAME ) + { + gs_noisf( StartBin, NB_Qbins, noisepb[i_band], exc_diffQ, exc_diffQ, seed_tcx, coder_type ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * freq_dnw_scaling() + * + * + *-------------------------------------------------------------------*/ + +void freq_dnw_scaling( + const int16_t cor_strong_limit, /* i : HF correlation */ + const int16_t coder_type, /* i : coder type */ + const int16_t noise_lev, /* i : Noise level */ + const int32_t core_brate, /* i : Core bitrate */ + float fy_norm[], /* i/o: Frequency quantized parameter */ + const int16_t L_frame /* i : frame length */ +) +{ + float sc_dyn; + int16_t start_sc, i; + + sc_dyn = 1.0f; + start_sc = L_frame; + + if ( core_brate <= ACELP_8k00 && coder_type == INACTIVE ) + { + sc_dyn *= .15f; + start_sc = 64; + } + else if ( coder_type == INACTIVE ) + { + sc_dyn *= .25f; + start_sc = 80; + } + else + { + sc_dyn = (float) ( NOISE_LEVEL_SP3 - noise_lev ) / 10.0f + 0.4f; + start_sc = 112 + ( NOISE_LEVEL_SP3 - noise_lev ) * 16; + + if ( noise_lev == NOISE_LEVEL_SP0 ) + { + start_sc = L_FRAME; + } + } + + if ( L_frame == L_FRAME16k && core_brate <= ACELP_24k40 ) + { + sc_dyn += 0.125f; + if ( sc_dyn > 1.0f ) + { + sc_dyn = 1.0f; + } + } + + for ( i = start_sc; i < L_frame; i++ ) + { + fy_norm[i] *= sc_dyn; + } + + if ( ( core_brate < ACELP_13k20 && cor_strong_limit == 0 ) || core_brate < ACELP_9k60 ) + { + for ( i = 160; i < L_frame; i++ ) + { + if ( fy_norm[i] > 1.0f ) + { + fy_norm[i] = 1.0f; + } + + if ( fy_norm[i] < -1.0f ) + { + fy_norm[i] = -1.0f; + } + } + } + else if ( core_brate < ACELP_22k60 ) + { + for ( i = 160; i < L_frame; i++ ) + { + if ( fy_norm[i] > 1.5f ) + { + fy_norm[i] = 1.5f; + } + + if ( fy_norm[i] < -1.5f ) + { + fy_norm[i] = -1.5f; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Decreas_freqPeak() + * + * + *-------------------------------------------------------------------*/ + +static void Decreas_freqPeak( + const float *lsf_new, /* i : ISFs at the end of the frame */ + float *exc_diffQ, /* i/o: frequency coefficients of per band */ + float thr_rat /* i : threshold of ratio between consecutive lsf_new_diff */ +) +{ + int16_t i, j, k; + int16_t last_bin = 0; + int16_t pos = 0; + float *src; + float avrg, max_val; + float lsf_new_diff[M]; + lsf_new_diff[0] = 0; /* prevent unitialized value */ + for ( j = 1; j < ( M - 1 ); j++ ) + { + lsf_new_diff[j] = lsf_new[j] - lsf_new[j - 1]; + } + + avrg = 0.0f; + /* This is to prevent a possible div by 0 in the '*(src) = (*src > 0) ?...' + loop. The value of 'max' is not important because it will be mutiplied + by 'avrg' and the result will be close to 0. The 'fabs(*src)/max' + div by 0 error will be avoided. */ + max_val = 0.001f; + for ( i = 160; i < L_FRAME; i++ ) + { + if ( fabs( exc_diffQ[i] ) > max_val ) + { + max_val = (float) fabs( exc_diffQ[i] ); + pos = i; + } + avrg += (float) fabs( exc_diffQ[i] ); + } + avrg /= 96; + last_bin = M - 1; /* When the search is false, should equate the end of the vector, not the beginning */ + for ( i = 0; i < ( M - 1 ); i++ ) + { + if ( lsf_new[i] > 4000 ) + { + last_bin = i; + break; + } + } + + for ( i = last_bin; i < 14; i++ ) + { + if ( lsf_new_diff[i] < thr_rat * lsf_new_diff[i - 1] ) + { + src = &exc_diffQ[( i - 1 ) * 16]; + for ( j = 0; j < 2; j++ ) + { + for ( k = 0; k < 16; k++ ) + { + if ( fabs( *src ) > 2.0f * avrg ) + { + *( src ) = ( *src > 0 ) ? (float) ( avrg * ( 2.0f - fabs( *src ) / max_val ) ) : (float) ( -avrg * ( 2.0f - fabs( *src ) / max_val ) ); + } + src++; + } + } + } + } + + if ( fabs( exc_diffQ[pos] ) == max_val && max_val > 4.0f * avrg ) + { + for ( i = pos - 1; i < pos + 2; i++ ) + { + exc_diffQ[pos] *= 0.5f; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * envelop_modify() + * + * + *-------------------------------------------------------------------*/ + +static void envelop_modify( + float *exc_diffQ, /* i/o: frequency coefficients of per band */ + int16_t *seed_tcx, /* i : Seed for noise */ + int16_t last_bin, /* i : last bin of bit allocation */ + float *Ener_per_bd_iQ /* i : Quantized energy of targeted vector */ +) +{ + int16_t i, j, end_band; + float Ener, Ener1, *src; + float weight = 1.0f; + + end_band = L_FRAME; + Ener = 0.1f; + for ( i = last_bin * 16; i < end_band; i++ ) + { + Ener += exc_diffQ[i] * exc_diffQ[i]; + } + Ener = (float) sqrt( ( end_band - last_bin * 16 ) / Ener ); + + weight = 0.5f; + + src = &exc_diffQ[16 * last_bin]; + for ( i = last_bin; i < last_bin + 4; i++ ) + { + Ener1 = (float) ( 0.4f * pow( 10, Ener_per_bd_iQ[i + 1] ) ); + for ( j = 0; j < 16; j++ ) + { + *src = Ener1 * ( weight * ( *src ) * Ener + ( 1.0f - weight ) * own_random( seed_tcx ) / PCM16_TO_FLT_FAC ); + src++; + } + } + + Ener1 = (float) ( 0.4f * pow( 10, Ener_per_bd_iQ[15] ) ); + + src = &exc_diffQ[224]; + for ( j = 0; j < 32; j++ ) + { + *src = Ener1 * ( weight * ( *src ) * Ener + ( 1.0f - weight ) * own_random( seed_tcx ) / PCM16_TO_FLT_FAC ); + src++; + } + + return; +} + + +/*-------------------------------------------------------------------* + * highband_exc_dct_in() + * + * + *-------------------------------------------------------------------*/ + +void highband_exc_dct_in( + const int32_t core_brate, /* i : core bitrate */ + const int16_t *mfreq_bindiv, /* i : bin per bands tables */ + int16_t last_bin, /* i : last bin of bit allocation */ + int16_t Diff_len, /* i : number of bin before cut-off frequency */ + int16_t noise_lev, /* i : pulses dynamic */ + int16_t pit_band_idx, /* i : bin position of the cut-off frequency */ + float *exc_diffQ, /* i : frequency coefficients of per band */ + int16_t *seed_tcx, /* i : Seed for noise */ + float *Ener_per_bd_iQ, /* i : Quantized energy of targeted vector */ + int16_t nb_subfr, /* i : Number of subframe considered */ + float *exc_dct_in, /* o : dct of residual signal */ + int16_t last_coder_type, /* i : coding type of last frame */ + int16_t *bitallocation_band, /* i : bit allocation flag of each band */ + const float *lsf_new, /* i : LSFs at the end of the frame */ + float *last_exc_dct_in, /* i : dct of residual signal of last frame */ + float *last_ener, /* i : frequency energy of last frame */ + int16_t *last_bitallocation_band, /* i : bit allocation flag of each band of last frame */ + int16_t *bitallocation_exc, /* i : flag of decoded coefficients */ + const int16_t bfi, /* i : bad frame indicator */ + const int16_t coder_type, /* i : coder type */ + const int16_t bwidth, /* i : audio bandwidth */ + float *exc_wo_nf, /* o : temporal excitation (in f domain) without noisefill */ + const int16_t GSC_noisy_speech, /* i : GSC noisy speech flag */ + float *lt_ener_per_band, /* i/o: Average per band energy */ + const int16_t L_frame, /* i : frame length */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +) +{ + int16_t i, j; + int16_t MAX_Bin = 0; + int16_t last_bin_tmp; + float noisepb[MBANDS_GN16k]; + float Ener_per_bd_yQ[MBANDS_GN16k]; + float *src, *dst, *end; + float ener = 0.0f; + int16_t length_bin, bwe_flag = 0; + + for ( j = 10; j < MBANDS_GN; j++ ) + { + ener += (float) pow( 10, Ener_per_bd_iQ[j] ); + } + + if ( core_brate == ACELP_8k00 && bwidth != NB ) + { + if ( last_coder_type != AUDIO ) + { + *last_ener = ener; + } + + if ( ( last_bin > 8 || Diff_len != 0 ) && last_coder_type == AUDIO ) + { + MAX_Bin = 10; + bwe_flag = 1; + } + else + { + MAX_Bin = 15; + } + + last_bin_tmp = last_bin; + if ( last_bin < MAX_Bin ) + { + last_bin = MAX_Bin; + } + last_bin += 1; + } + else + { + if ( L_frame == L_FRAME16k ) + { + last_bin = MBANDS_GN16k; + } + else + { + last_bin = MBANDS_GN; + } + last_bin_tmp = last_bin; + } + + + if ( bfi || core_brate < 6000 || ( core_brate < 8600 && coder_type == UNVOICED ) ) + { + set_f( noisepb, 0.4f, MBANDS_GN ); + } + else if ( GSC_IVAS_mode == 3 || ( GSC_IVAS_mode > 0 && GSC_noisy_speech == 1 ) ) + { + set_f( noisepb, 0.4f, MBANDS_GN16k ); + } + else + { + EstimateNoiseLevel( noisepb, core_brate, Diff_len, last_bin, coder_type, noise_lev, pit_band_idx, last_bin_tmp, bwidth, L_frame ); + } + + if ( exc_wo_nf != NULL ) + { + mvr2r( exc_diffQ, exc_wo_nf, L_frame ); + } + + if ( GSC_IVAS_mode == 0 && GSC_noisy_speech && !bfi && element_mode <= IVAS_SCE ) + { + set_f( noisepb, 0.1f, MBANDS_GN ); + } + + if ( core_brate < 6000 && coder_type <= UNVOICED ) + { + for ( i = 0; i < L_frame; i++ ) + { + if ( exc_diffQ[i] == 0.0f ) + { + exc_diffQ[i] += 2.0f * noisepb[0] * ( (float) own_random( seed_tcx ) / PCM16_TO_FLT_FAC ); + } + } + } + else + { + Apply_NoiseFill( exc_diffQ, seed_tcx, noisepb, Diff_len, last_bin, coder_type, mfreq_bindiv ); + } + + /*--------------------------------------------------------------------------------------* + * Quantize average gain + * Subtract Q averaged gain + * VQ of remaining gain per band + *--------------------------------------------------------------------------------------*/ + + if ( core_brate == ACELP_8k00 && bwidth != NB ) + { + Ener_per_band_comp( exc_diffQ, Ener_per_bd_yQ, last_bin + 1, 0, L_frame ); + } + else + { + Ener_per_band_comp( exc_diffQ, Ener_per_bd_yQ, MBANDS_GN, 1, L_frame ); + + if ( nb_subfr < 4 && L_frame < L_FRAME16k ) + { + for ( i = L_FRAME - 16; i < L_FRAME; i++ ) + { + exc_diffQ[i] *= ( 0.067f * i - 15.0f ); + } + } + } + + /*--------------------------------------------------------------------------------------* + * Check potential energy excitation overshoot + *--------------------------------------------------------------------------------------*/ + + if ( bfi ) + { + if ( GSC_noisy_speech == 0 && coder_type > UNVOICED ) /* Here coder_type == last_coder_type because of the bfi */ + { + for ( i = 0; i < last_bin; i++ ) + { + Ener_per_bd_iQ[i] = min( Ener_per_bd_iQ[i], ( lt_ener_per_band[i] - 0.0376f ) - Ener_per_bd_yQ[i] ); + lt_ener_per_band[i] -= 0.0188f; + } + for ( ; i < MBANDS_GN; i++ ) + { + Ener_per_bd_iQ[i] = min( Ener_per_bd_iQ[i], ( lt_ener_per_band[i] - 0.0376f ) ); + lt_ener_per_band[i] -= 0.0188f; + } + } + else + { + for ( i = 0; i < last_bin; i++ ) + { + Ener_per_bd_iQ[i] = min( Ener_per_bd_iQ[i], ( lt_ener_per_band[i] + 0.3f ) - Ener_per_bd_yQ[i] ); + lt_ener_per_band[i] -= 0.0188f; + } + for ( ; i < MBANDS_GN; i++ ) + { + Ener_per_bd_iQ[i] = min( Ener_per_bd_iQ[i], ( lt_ener_per_band[i] + 0.3f ) ); + lt_ener_per_band[i] -= 0.0188f; + } + } + } + + /*--------------------------------------------------------------------------------------* + * Apply decoded gain onto the difference signal + *--------------------------------------------------------------------------------------*/ + + if ( GSC_IVAS_mode >= 1 ) + { + float scale_factLF = 0.9f; + float scale_factHF = 0.9f; + + if ( GSC_IVAS_mode == 1 && GSC_noisy_speech == 0 ) + { + scale_factHF = 0.8f; + } + else if ( GSC_IVAS_mode == 2 || GSC_noisy_speech == 1 ) + { + scale_factHF = 0.71f; + } + else if ( GSC_IVAS_mode == 3 ) + { + scale_factHF = 0.9f; + } + for ( i = 0; i < pit_band_idx * 16; i++ ) + { + exc_diffQ[i] *= scale_factLF; + } + for ( ; i < L_frame; i++ ) + { + exc_diffQ[i] *= scale_factHF; + } + } + else if ( GSC_noisy_speech ) + { + float scale_fact = 0.9f; + + if ( element_mode == IVAS_CPE_TD ) + { + if ( coder_type == INACTIVE ) + { + scale_fact = 1.0f; + } + else + { + scale_fact = 0.95f; + } + } + else if ( element_mode > IVAS_SCE ) + { + scale_fact = 0.71f; + } + + for ( i = 0; i < L_frame; i++ ) + { + exc_diffQ[i] *= scale_fact; + } + } + + if ( GSC_noisy_speech && element_mode > IVAS_SCE && core_brate < ACELP_7k20 ) + { + for ( i = 80; i < L_frame; i++ ) + { + exc_diffQ[i] *= ( +0.0024f * (float) i + 1.192f ); + } + } + + Comp_and_apply_gain( exc_diffQ, Ener_per_bd_iQ, Ener_per_bd_yQ, last_bin, 0 ); + + if ( exc_wo_nf != NULL ) + { + Comp_and_apply_gain( exc_wo_nf, Ener_per_bd_iQ, Ener_per_bd_yQ, last_bin, 1 ); + + v_add( exc_dct_in, exc_wo_nf, exc_wo_nf, L_frame ); + } + + /*--------------------------------------------------------------------------------------* + * add the correction layer to the LF bins, + * and add the quantized pulses or the noise for the higher part of the spectrum + * (non valuable temporal content already zeroed) + * DC is Zeroed + *--------------------------------------------------------------------------------------*/ + + v_add( exc_dct_in, exc_diffQ, exc_dct_in, L_frame ); + + if ( core_brate == ACELP_8k00 && bwidth != NB ) + { + if ( bwe_flag == 1 ) + { + last_bin -= 1; + src = &exc_diffQ[L_FRAME - 1]; + dst = &exc_dct_in[MAX_Bin * 16 - 1]; + end = &exc_diffQ[last_bin * 16 - 1]; + + while ( src > end ) + { + *src-- = *dst--; + } + + if ( ( bitallocation_exc[0] != 0 || bitallocation_exc[1] != 0 ) && core_brate == ACELP_8k00 ) + { + exc_diffQ[160] = 0.0f; + } + + envelop_modify( exc_diffQ, seed_tcx, last_bin, Ener_per_bd_iQ ); + + mvr2r( &exc_diffQ[last_bin * 16], &exc_dct_in[last_bin * 16], L_FRAME - last_bin * 16 ); + } + + if ( nb_subfr < 4 ) + { + for ( i = L_FRAME - 16; i < L_FRAME; i++ ) + { + exc_dct_in[i] *= ( 0.067f * i - 15.f ); + } + } + + if ( ener < 2 * ( *last_ener ) && ener > 0.5f * ( *last_ener ) ) + { + length_bin = 6; + if ( last_coder_type != AUDIO ) + { + set_s( last_bitallocation_band, 0, 6 ); + mvr2r( &exc_dct_in[( 4 + length_bin ) * 16], &last_exc_dct_in[( 4 + length_bin ) * 16], length_bin * 16 ); + } + + for ( i = 4; i < ( 4 + length_bin ); i++ ) + { + if ( !( bitallocation_band[i] == 0 && last_bitallocation_band[i - 4] == 0 ) ) + { + src = &exc_dct_in[( i + length_bin ) * 16]; + dst = &last_exc_dct_in[( i + length_bin ) * 16]; + for ( j = 0; j < 16; j++ ) + { + if ( fabs( *src ) > 3.0f * fabs( *dst ) ) + { + *src = ( *src > 0 ) ? (float) ( 0.5f * ( *src + fabs( *dst ) ) ) : (float) ( 0.5f * ( *src - fabs( *dst ) ) ); + } + else if ( fabs( *dst ) > 3.0f * fabs( *src ) ) + { + *src = ( *src > 0 ) ? (float) ( 0.7f * ( *src ) + 0.3f * fabs( *dst ) ) : (float) ( 0.7f * ( *src ) - 0.3f * fabs( *dst ) ); + } + src++; + dst++; + } + } + } + } + + if ( bwe_flag == 1 ) + { + Decreas_freqPeak( lsf_new, exc_dct_in, 0.3f ); + } + else + { + Decreas_freqPeak( lsf_new, exc_dct_in, 0.5f ); + } + } + + mvr2r( &exc_dct_in[64], &last_exc_dct_in[64], L_frame - 64 ); + mvs2s( &bitallocation_band[4], last_bitallocation_band, 6 ); + *last_ener = ener; + + return; +} diff --git a/lib_com/gs_preech.c b/lib_com/gs_preech.c new file mode 100644 index 0000000000..b7ab89a879 --- /dev/null +++ b/lib_com/gs_preech.c @@ -0,0 +1,142 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define ATT_LENGHT16k 80 +#define INV_L_FRAME16k ( 1.0f / L_FRAME16k ) +#define ATT_LENGHT 64 +#define ATT_SEG_LEN ( L_FRAME / ATT_LENGHT ) +#define INV_ATT_SEG_LEN ( 1.0f / ATT_SEG_LEN ) +#define INV_L_FRAME ( 1.0f / L_FRAME ) + + +/*-------------------------------------------------------------------* + * pre_echo_att() + * + * Attenuation of the pre-echo when encoder specifies an attack + *-------------------------------------------------------------------*/ + +void pre_echo_att( + float *Last_frame_ener, /* i/o: Energy of the last frame */ + float *exc, /* i/o: Excitation of the current frame */ + const int16_t attack_flag, /* i : attack flag (GSC or TC) */ + const int16_t last_coder_type, /* i : Last coder type */ + const int16_t L_frame /* i : frame length */ +) +{ + float etmp; + float etmp1; + float finc[ATT_LENGHT16k], ratio, inv_l_frame; + int16_t att_len; + int16_t attack_pos, i; + + if ( attack_flag > 0 && last_coder_type == AUDIO ) + { + /*-------------------------------------------------------------------------* + * Find where the onset (attack) occurs by computing the energy per section + * The inverse weighting aims to favor the first maxima in case of + * gradual onset + *-------------------------------------------------------------------------*/ + + att_len = ATT_LENGHT; + if ( L_frame == L_FRAME16k ) + { + att_len = ATT_LENGHT16k; + } + for ( i = 0; i < att_len; i++ ) + { + finc[i] = sum2_f( exc + i * ATT_SEG_LEN, ATT_SEG_LEN ) * ( (float) ( att_len - i ) / ( att_len ) ); + } + etmp = -1; + attack_pos = maximum( finc, att_len, &etmp ); + + /* Scaled the maximum energy and allowed 6 dB increase*/ + etmp *= INV_ATT_SEG_LEN; + etmp1 = etmp; + *Last_frame_ener *= 4.0f; + + /* If the maximum normalized energy > last frame energy + 6dB */ + if ( etmp > *Last_frame_ener && attack_pos > 0 ) + { + /* Find the average energy before the attack */ + etmp = sum_f( finc, attack_pos ) + 0.01f; + etmp /= ( attack_pos * ATT_SEG_LEN ); + + /* Find the correction factor and apply it before the attack */ + ratio = (float) sqrt( *Last_frame_ener / etmp ); + + + /* Pre-echo atttenuation should never increase the energy */ + ratio = min( ratio, 1.0f ); + for ( i = 0; i < attack_pos * ATT_SEG_LEN; i++ ) + { + exc[i] *= ratio; + } + } + *Last_frame_ener = etmp1; + } + else + { + /*-------------------------------------------------------* + * In normal cases, just compute the energy of the frame + *-------------------------------------------------------*/ + + etmp = sum2_f( exc, L_frame ) + 0.01f; + inv_l_frame = INV_L_FRAME; + if ( L_frame == L_FRAME16k ) + { + inv_l_frame = INV_L_FRAME16k; + } + etmp *= inv_l_frame; + *Last_frame_ener = etmp; + } + + return; +} diff --git a/lib_com/guided_plc_util.c b/lib_com/guided_plc_util.c new file mode 100644 index 0000000000..cb14c503c8 --- /dev/null +++ b/lib_com/guided_plc_util.c @@ -0,0 +1,323 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void reorder_lsfs( float *lsf, float min_dist, const int16_t n, const int32_t sr_core ); + + +/*-------------------------------------------------------------------* + * getLookAheadResSig() + * + * + *-------------------------------------------------------------------*/ + +void getLookAheadResSig( + float *speechLookAhead, + const float *A, + float *res, + const int16_t L_frame, + const int16_t L_subfr, + const int16_t m, + const int16_t numSubFrame ) +{ + const float *p_A; + int16_t i_subfr; + int16_t subfr_len[2]; + + subfr_len[0] = L_subfr; + subfr_len[1] = L_frame < L_FRAME16k ? (int16_t) ( 0.75 * L_subfr ) : L_subfr; + + p_A = A; + for ( i_subfr = 0; i_subfr < numSubFrame * L_subfr; i_subfr += L_subfr ) + { + residu( p_A, m, &speechLookAhead[i_subfr], &res[i_subfr], subfr_len[i_subfr / L_subfr] ); + p_A += ( m + 1 ); + } + + return; +} + +/*-------------------------------------------------------------------* + * updatelsfForConcealment() + * + * + *-------------------------------------------------------------------*/ + +void updatelsfForConcealment( + PLC_ENC_EVS_HANDLE decState, + float *lsf ) +{ + int16_t i; + + for ( i = 0; i < M; i++ ) + { + decState->lsf_adaptive_mean[i] = ( decState->lsfoldbfi1[i] + decState->lsfoldbfi0[i] + lsf[i] ) / 3; + decState->lsfoldbfi1[i] = decState->lsfoldbfi0[i]; + decState->lsfoldbfi0[i] = lsf[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * getConcealedLP() + * + * + *-------------------------------------------------------------------*/ + +void getConcealedLP( + PLC_ENC_EVS_HANDLE memDecState, + float *AqCon, + const float lsfBase[], + const int32_t sr_core, + const int16_t last_good, + const int16_t L_frame ) +{ + float *lsf = memDecState->lsf_con; + float lsp[( NB_DIV + 1 ) * M]; + int16_t k; + + dlpc_bfi( L_frame, &lsf[0], memDecState->lsfold, last_good, 1 /* assumes packet loss */, memDecState->mem_MA, memDecState->mem_AR, &( memDecState->stab_fac ), memDecState->lsf_adaptive_mean, 1, NULL, 0, NULL, NULL, lsfBase ); + + mvr2r( memDecState->lspold, lsp, M ); + + for ( k = 0; k < 1; k++ ) + { + lsf2lsp( &lsf[k * M], &lsp[( k + 1 ) * M], M, sr_core ); + } + + int_lsp( L_FRAME, &lsp[0], &lsp[M], AqCon, M, interpol_frac_12k8, 0 ); + + return; +} + +/*-------------------------------------------------------------------* + * RecLpcSpecPowDiffuseLc() + * + * + *-------------------------------------------------------------------*/ + +void RecLpcSpecPowDiffuseLc( + float *lspq, + float *lsp_old, + float *lsfq, + Decoder_State *st, + const int16_t reset_q ) +{ + const float *means; + float lsf_old[M]; + int16_t i; + + means = PlcGetlsfBase( st->lpcQuantization, st->narrowBand, st->sr_core ); + + mvr2r( st->lsf_old, lsf_old, M ); + + modify_lsf( lsf_old, M, st->sr_core, reset_q ); + + lsf2lsp( lsf_old, lsp_old, M, st->sr_core ); + + if ( reset_q ) + { + for ( i = 0; i < M; i++ ) + { + lsfq[i] = st->mem_MA[i] + means[i]; + } + + v_sort( lsfq, 0, M - 1 ); + + reorder_lsfs( lsfq, LSF_GAP, M, st->sr_core ); + + lsf2lsp( lsfq, lspq, M, st->sr_core ); + } + else + { + modify_lsf( lsfq, M, st->sr_core, reset_q ); + + lsf2lsp( lsfq, lspq, M, st->sr_core ); + } + + + return; +} + + +/*-------------------------------------------------------------------* + * modify_lsf() + * + * + *-------------------------------------------------------------------*/ + +void modify_lsf( + float *lsf, + const int16_t n, + const int32_t sr_core, + const int16_t reset_q ) +{ + int16_t i, k; + float gap; + float th; + + th = 1900; + + if ( reset_q == 0 ) + { + th = 800; + } + + if ( sr_core == INT_FS_16k ) + { + th *= 1.25; + } + + + i = 1; + + while ( lsf[i] < th && i < n ) + { + i++; + } + gap = lsf[i - 1] / i; + + for ( k = 0; k < i - 1; k++ ) + { + lsf[k] = gap * ( k + 1 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * reorder_lsfs() + * + * + *-------------------------------------------------------------------*/ + +static void reorder_lsfs( + float *lsf, /* i/o: vector of lsfs in the frequency domain (0..0.5)*/ + float min_dist, /* i : minimum required distance */ + const int16_t n, /* i : LPC order */ + const int32_t sr_core ) +{ + int16_t i; + float lsf_min; + float lsf_max; + float fac; + float th1, th2; + + th1 = 1000.0f; + th2 = 1900.0f; + + if ( sr_core == INT_FS_16k ) + { + min_dist *= 1.25; + th1 *= 1.25; + th2 *= 1.25; + } + + /*-----------------------------------------------------------------* + * Verify the LSF ordering and minimum GAP + *-----------------------------------------------------------------*/ + fac = 3.0; + + lsf_min = min_dist * fac; + for ( i = 0; i < n; i++ ) + { + + if ( lsf[i] > th1 ) + { + fac = 2.0; + } + else + { + if ( lsf[i] > 1900.0 ) + { + fac = 1.0; + } + } + + if ( lsf[i] < lsf_min ) + { + lsf[i] = lsf_min; + } + + lsf_min = lsf[i] + min_dist * fac; + } + + /*------------------------------------------------------------------------------------------* + * Reverify the LSF ordering and minimum GAP in the reverse order (security) + *------------------------------------------------------------------------------------------*/ + + lsf_max = (float) ( sr_core ) / 2.0f - min_dist * fac; + + if ( lsf[n - 1] > lsf_max ) /* If danger of unstable filter in case of resonance in HF */ + { + for ( i = n - 1; i >= 0; i-- ) /* Reverify the minimum LSF gap in the reverse sens */ + { + + if ( lsf[i] <= th2 ) + { + fac = 2.0; + } + else + { + if ( lsf[i] <= th1 ) + { + fac = 3.0; + } + } + + if ( lsf[i] > lsf_max ) + { + lsf[i] = lsf_max; + } + + lsf_max = lsf[i] - min_dist * fac; + } + } + + return; +} diff --git a/lib_com/hp50.c b/lib_com/hp50.c new file mode 100644 index 0000000000..58b15a4211 --- /dev/null +++ b/lib_com/hp50.c @@ -0,0 +1,134 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include "typedef.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + + +/* + * hp20 + * + * Function: + * 2nd order high pass filter with nominal cut off frequency at 20 Hz. + * + * Returns: + * void + */ + +void hp20( + Float32 signal[], + const Word16 lg, + Float32 mem[], + const Word32 Fs ) +{ + Word16 i; + Float32 x0, x1, x2, y0, y1, y2; + Float32 a1, a2, b1, b2; + + y1 = mem[0]; + y2 = mem[1]; + x0 = mem[2]; + x1 = mem[3]; + + if ( Fs == 8000 ) + { + /* hp filter 20Hz at 3dB for 8000KHz input sampling rate + [b,a] = butter(2, 20.0/4000.0, 'high'); + b = [0.988954248067140 -1.977908496134280 0.988954248067140] + a =[1.000000000000000 -1.977786483776764 0.978030508491796]*/ + a1 = 1.977786483776764f; + a2 = -0.978030508491796f; + b1 = -1.977908496134280f; + b2 = 0.988954248067140f; + } + else if ( Fs == 16000 ) + { + /* hp filter 20Hz at 3dB for 16000KHz sampling rate + [b,a] = butter(2, 20.0/8000.0, 'high'); + b =[ 0.994461788958195 -1.988923577916390 0.994461788958195] + a =[1.000000000000000 -1.988892905899653 0.988954249933127] */ + a1 = 1.988892905899653f; + a2 = -0.988954249933127f; + b1 = -1.988923577916390f; + b2 = 0.994461788958195f; + } + else if ( Fs == 32000 ) + { + /* hp filter 20Hz at 3dB for 32000KHz sampling rate + [b,a] = butter(2, 20.0/16000.0, 'high'); + b =[0.997227049904470 -1.994454099808940 0.997227049904470] + a =[1.000000000000000 -1.994446410541927 0.994461789075954]*/ + a1 = 1.994446410541927f; + a2 = -0.994461789075954f; + b1 = -1.994454099808940f; + b2 = 0.997227049904470f; + } + else + { + /* hp filter 20Hz at 3dB for 48000KHz sampling rate + [b,a] = butter(2, 20.0/24000.0, 'high'); + b =[ 0.998150511190452 -1.996301022380904 0.998150511190452] + a =[1.000000000000000 -1.996297601769122 0.996304442992686]*/ + a1 = 1.996297601769122f; + a2 = -0.996304442992686f; + b1 = -1.996301022380904f; + b2 = 0.998150511190452f; + } + + for ( i = 0; i < lg; i++ ) + { + x2 = x1; + x1 = x0; + x0 = signal[i]; + y0 = ( y1 * a1 ) + ( y2 * a2 ) + ( x0 * b2 ) + ( x1 * b1 ) + ( x2 * b2 ); + signal[i] = y0; + y2 = y1; + y1 = y0; + } + + mem[0] = ( ( y1 > 1e-10 ) | ( y1 < -1e-10 ) ) ? y1 : 0; + mem[1] = ( ( y2 > 1e-10 ) | ( y2 < -1e-10 ) ) ? y2 : 0; + mem[2] = ( ( x0 > 1e-10 ) | ( x0 < -1e-10 ) ) ? x0 : 0; + mem[3] = ( ( x1 > 1e-10 ) | ( x1 < -1e-10 ) ) ? x1 : 0; + + return; +} diff --git a/lib_com/hq2_bit_alloc.c b/lib_com/hq2_bit_alloc.c new file mode 100644 index 0000000000..b46f54480e --- /dev/null +++ b/lib_com/hq2_bit_alloc.c @@ -0,0 +1,1032 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "basop_util.h" +#include "basop_mpy.h" +#include "stl.h" +#include "wmops.h" + +#define WMC_TOOL_MAN + +/*------------------------------------------------------------------- + * Local constants + *-------------------------------------------------------------------*/ + +#define MIN_BITS_FIX 0 +#define HQ_16k40_BIT ( HQ_16k40 / FRAMES_PER_SEC ) /* 16400/50=328, FOR FIX TMP */ +#define C1_QRk ( 1 << SWB_BWE_LR_QRk ) /* 1 */ +#define Qbf 14 +#define C1_Qbf ( 1 << Qbf ) /* 1 */ +#define BITS_FACT_1p10 ( Word16 )( 1.10f * (float) pow( 2, Qbf ) + 0.5f ) +#define BITS_FACT_1p05 ( Word16 )( 1.05f * (float) pow( 2, Qbf ) + 0.5f ) +#define BITS_FACT_1p00 ( Word16 )( 1.00f * (float) pow( 2, Qbf ) + 0.5f ) +#define BITS_FACT_0p97 ( Word16 )( 0.97f * (float) pow( 2, Qbf ) + 0.5f ) +#define BITS_FACT_0p92 ( Word16 )( 0.92f * (float) pow( 2, Qbf ) + 0.5f ) + +#define L_Comp( hi, lo ) L_mac( L_deposit_h( hi ), lo, 1 ) + +/*------------------------------------------------------------------- + * div_s_ss() + * + * + *-------------------------------------------------------------------*/ + +/*! r: result of division (Word16 Q0) */ +static Word16 div_s_ss( + const Word16 n, /* i : numerator (Word16 Q0 */ + const Word16 d /* i : denominator (Word16 Q0) */ +) +{ + Word16 norm_n, norm_d; + Word16 ns, ds; + Word16 res; + Word16 tmp; + + test(); + IF( n == 0 || d == 0 ) + { + return 0; + } + + norm_n = norm_s( n ); + norm_n = sub( norm_n, 1 ); + ns = shl( n, norm_n ); + + norm_d = norm_s( d ); + ds = shl( d, norm_d ); + + div_s( &tmp, ns, ds ); + res = shr( tmp, add( sub( norm_n, norm_d ), 15 ) ); + + return res; +} + + +/*-------------------------------------------------------------------* + * Bits2indvsb() + * + * Bit allocation to individual SB's in a group + *-------------------------------------------------------------------*/ +static void Bits2indvsb_fx( + const Word32 *L_be, /* i : Qbe Band Energy of sub-band */ + const Word16 start_band, /* i : Q0 start band indices */ + const Word16 end_band, /* i : Q0 end band indices */ + const Word16 Bits, /* i : Q0 Total number of bits allocated to a group */ + const Word32 L_Bits_needed, /* i : QRk smallest bit number for allocation in group */ + Word32 *L_Rsubband, /* o : QRk bit allocation of sub-band */ + Word16 *p2aflags_fx /* i/o: Q0 peaky/noise subband flag */ +) +{ + Word16 i, j, k; + Word32 L_R_temp[14]; /* QRk = QL_Rsubband; */ + Word16 Ravg_fx; + Word16 QRavg; + + const Word32 *L_y_ptr; + Word32 *L_R_ptr; + + Word16 Bits_avg_fx; + Word16 QBavg; + Word16 scale_fact_fx; + + Word16 band_num_fx; + Word16 index_fx[14]; + + Word16 y_index_fx[14]; + + Word16 be_sum_fx; /* Q0 */ + + Word16 exp_normn, exp_normd; + Word16 enr_diffcnt_fx; + Word16 th_5_fx; + Word16 Rcnt_fx; + + Word16 be_cnt_fx; + Word16 *p2aflags_fx_ptr; + + Word32 L_temp1; + Word32 L_temp2; + + band_num_fx = sub( end_band, start_band ); + L_y_ptr = L_be + start_band; + L_R_ptr = L_Rsubband + start_band; + p2aflags_fx_ptr = p2aflags_fx + start_band; + + FOR( i = 0; i < band_num_fx; i++ ) + { + y_index_fx[i] = extract_h( L_shr( L_y_ptr[i], sub( SWB_BWE_LR_Qbe, 16 ) ) ); + move16(); + index_fx[i] = i; + move16(); + } + + + /* Rearrange norm vector in decreasing order */ + reordvct( y_index_fx, band_num_fx, index_fx ); + + be_sum_fx = 0; + move16(); + be_cnt_fx = 0; + move16(); + FOR( j = 0; j < band_num_fx; j++ ) + { + test(); + IF( y_index_fx[j] <= 0 || p2aflags_fx_ptr[index_fx[j]] == 0 ) + { + y_index_fx[j] = 0; + move16(); + L_R_temp[j] = 0x0L; + move32(); + } + ELSE + { + L_R_temp[j] = C1_QRk; + move32(); /* filled not zero value */ + be_cnt_fx = add( be_cnt_fx, 1 ); + } + } + + i = sub( be_cnt_fx, 1 ); + FOR( k = 0; k <= i; k++ ) + { + test(); + if ( L_R_temp[k] > 0 ) + { + be_sum_fx = add( be_sum_fx, y_index_fx[k] ); + } + } + QBavg = 0; + move16(); + + /*Ravg = (float) be_sum/be_cnt;*/ + Ravg_fx = 0; + move16(); + QRavg = 0; + move16(); + IF( be_cnt_fx != 0x0 ) + { + exp_normn = norm_s( be_sum_fx ); + exp_normn = sub( exp_normn, 1 ); + exp_normd = norm_s( be_cnt_fx ); + div_s( &Ravg_fx, shl( be_sum_fx, exp_normn ), shl( be_cnt_fx, exp_normd ) ); + + Ravg_fx = shr( Ravg_fx, 2 ); /* safe shift */ + QRavg = add( sub( exp_normn, exp_normd ), 15 - 2 ); + } + + enr_diffcnt_fx = 0; + move16(); + th_5_fx = shl( 5, QRavg ); + FOR( j = 0; j < be_cnt_fx; j++ ) + { + IF( sub( abs_s( sub( Ravg_fx, shl( y_index_fx[j], QRavg ) ) ), th_5_fx ) > 0 ) + { + enr_diffcnt_fx = add( enr_diffcnt_fx, 1 ); + } + } + + IF( enr_diffcnt_fx > 0 ) + { + scale_fact_fx = 11468; + move16(); /* 0.35f 11468.8(Q15) */ + } + ELSE + { + scale_fact_fx = 19661; + move16(); /* 0.60f 19660.8(Q15) */ + } + + /* Bits allocation to individual SB's in a group based on Band Energies */ + FOR( j = 0; j < be_cnt_fx; j++ ) + { + Rcnt_fx = add( i, 1 ); + + /* Ravg = (float) be_sum/Rcnt; */ + exp_normn = norm_s( be_sum_fx ); + exp_normn = sub( exp_normn, 1 ); + exp_normd = norm_s( Rcnt_fx ); + div_s( &Ravg_fx, shl( be_sum_fx, exp_normn ), shl( Rcnt_fx, exp_normd ) ); + Ravg_fx = shr( Ravg_fx, 2 ); /* safe shift */ + QRavg = add( sub( exp_normn, exp_normd ), 15 - 2 ); + + test(); + if ( be_sum_fx <= 0 ) + { + be_sum_fx = 1; + move16(); + } + + /* Bits_avg = (float) Bits/(be_sum+EPSILON); */ + Bits_avg_fx = 0; + move16(); + QBavg = 0; + move16(); + IF( Bits != 0 ) + { + exp_normn = norm_s( Bits ); + exp_normn = sub( exp_normn, 1 ); + exp_normd = norm_s( be_sum_fx ); + div_s( &Bits_avg_fx, shl( Bits, exp_normn ), shl( be_sum_fx, exp_normd ) ); + Bits_avg_fx = shr( Bits_avg_fx, 2 ); /* safe_shift */ + QBavg = add( sub( exp_normn, exp_normd ), 15 - 2 ); + } + FOR( k = 0; k <= i; k++ ) + { + IF( L_R_temp[k] > 0 ) /* Rtemp -> SWB_BWE_LR_QRk */ + { + /* Allocate more bits to SB, if SB bandenergy is higher than average energy */ + /* R_temp[k] = (float)( Bits_avg * y_index[k]+( scale_fact * (y_index[k] - Ravg))); */ + L_temp1 = L_mult( Bits_avg_fx, y_index_fx[k] ); /* QBavg+1 */ + L_temp2 = L_mult( scale_fact_fx, sub( shl( y_index_fx[k], QRavg ), Ravg_fx ) ); /* 15+QRavg+1 */ + L_R_temp[k] = L_add( L_shr( L_temp1, sub( add( QBavg, 1 ), SWB_BWE_LR_QRk ) ), L_shr( L_temp2, sub( add( QRavg, 16 ), SWB_BWE_LR_QRk ) ) ); /* SWB_BWE_LR_QRk */ + } + } + IF( L_sub( L_R_temp[i], L_Bits_needed ) < 0 ) + { + L_R_temp[i] = 0x0L; + move32(); + + p2aflags_fx_ptr[index_fx[i]] = 0; + move16(); + + /* be_sum -= y_index[i]; */ + be_sum_fx = sub( be_sum_fx, y_index_fx[i] ); + + i = sub( i, 1 ); + } + ELSE + { + BREAK; + } + } + + /* Rearrange the bit allocation to align with original */ + FOR( k = 0; k < band_num_fx; k++ ) + { + j = index_fx[k]; + move16(); + L_R_ptr[j] = L_R_temp[k]; + move32(); + } + + return; +} + +/*-------------------------------------------------------------------* + * hq2_bit_alloc_har() + * + * Bit allocation mechanism for HQ_HARMONIC mode + *-------------------------------------------------------------------*/ + +void hq2_bit_alloc_har( + float *y, /* i : band energy of sub-vectors */ + int16_t B_fx, /* i : number of available bits */ + int16_t N_fx, /* i : number of sub-vectors */ + Word32 *L_Rsubband, + int16_t p2a_bands_fx, + int32_t L_core_brate, /* i : core bitrate */ + int16_t p2a_flags_fx[], + int16_t band_width_fx[] ) +{ + Word16 i, j, k; + + Word32 L_norm_sum; /* Qbe */ + Word32 L_Ravg_sub[GRP_SB]; /* Qbe */ + Word32 L_temp_band_energy[BANDS_MAX]; /* Qbe */ + + Word16 j_fx, k_fx, Bits_grp_fx[GRP_SB]; + + Word32 L_temp_band_energydiff[BANDS_MAX]; + Word16 G1_BE_DIFF_POS_fx; /* Q0 */ + Word32 L_G1_BE_DIFF_VAL; /* Qbe Word32 */ + Word16 final_gr_fact_pos_fx, gmax_range_fx[2], temp_fx; + Word16 bits_fact_fx, bits_fact1_fx; /* Q? */ + Word16 grp_rngmax_fx[2]; + Word16 index_fx[NB_SWB_SUBBANDS_HAR], y_index_fx[NB_SWB_SUBBANDS_HAR], esthf_bits_fx, grp_bit_avg_fx, harmonic_band_fx; + Word32 L_norm_sum_avg; + Word32 L_norm_diff; /* Qbe */ + Word16 bits_allocweigh_fx; /* Q15 */ + Word16 grp_bound_fx[5]; + Word32 L_grp_thr[GRP_SB]; /* not require Word32 precission */ + Word16 lf_hf_ge_r_fx; /* Q15 */ + Word32 L_avg_enhf_en_diff; /* Qbe */ + + Word16 B_norm_fx; + + Word32 L_temp, L_temp2; + Word16 exp, frac; + + Word32 L_THR1, L_THR2, L_THR3; + + Word16 exp_norm; + Word16 norm_sum_fx; + Word16 Qns; /* Q value for norm_sum_fx */ + Word16 Inv_norm_sum_fx; /* 1/norm_sum */ + Word16 QIns; /* Q value for Inv_norm_sum_fx */ + + Word16 exp_normn, exp_normd; + Word16 div_fx; + + Word16 Inv_p2a_bands_fx; + Word16 QIpb; + + Word16 exp_shift; + + Word32 L_y[BANDS_MAX]; + + grp_rngmax_fx[0] = 0; + grp_rngmax_fx[1] = 0; + + for ( i = 0; i < N_fx; i++ ) + { + L_y[i] = (Word32) ( y[i] * (float) pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + L_THR1 = L_shl( L_deposit_l( THR1 ), SWB_BWE_LR_QRk ); + L_THR2 = L_shl( L_deposit_l( THR2 ), SWB_BWE_LR_QRk ); + L_THR3 = L_shl( L_deposit_l( THR3 ), SWB_BWE_LR_QRk ); + + set_val_Word16( Bits_grp_fx, 0, GRP_SB ); + + /* Initialize subbands bits allocation vector based on harmonic bands */ + harmonic_band_fx = add( sub( N_fx, p2a_bands_fx ), 1 ); + /*printf("harmonic_band= %d %d\n", harmonic_band, harmonic_band_fx);*/ + FOR( k = 0; k < N_fx; k++ ) + { + L_Rsubband[k] = (Word32) ( C1_QRk ); + move32(); /* Constant Value */ + L_temp_band_energy[k] = L_y[k]; + move32(); /* SWB_BWE_LR_Qbe */ + } + final_gr_fact_pos_fx = 2; + move16(); + bits_fact_fx = C1_Qbf; + move16(); + bits_fact1_fx = C1_Qbf; + move16(); + + gmax_range_fx[0] = G1_RANGE; + move16(); + gmax_range_fx[1] = G1G2_RANGE; + move16(); + + IF( L_sub( L_core_brate, HQ_16k40 ) == 0 ) + { + gmax_range_fx[1] = add( gmax_range_fx[1], 2 ); + move16(); + } + + /* decide each group range, for grouping spectral coefficients */ + grp_rngmax_fx[1] = 16; + move16(); + grp_rngmax_fx[0] = 7; + move16(); + temp_fx = 0; + move16(); + FOR( i = 0; i < 2; i++ ) + { + j_fx = gmax_range_fx[i]; + move16(); + k_fx = 0; + move16(); + test(); + WHILE( L_sub( L_temp_band_energy[gmax_range_fx[i] - 1], L_temp_band_energy[j_fx] ) >= 0x0L && sub( j_fx, grp_rngmax_fx[i] ) < 0x0 ) + { + test(); + k_fx = add( k_fx, 1 ); + j_fx = add( j_fx, 1 ); + } + + temp_fx = k_fx; + move16(); + IF( sub( temp_fx, 1 ) > 0 ) + { + FOR( temp_fx = 2; temp_fx <= k_fx; ) + { + IF( L_sub( L_temp_band_energy[gmax_range_fx[i] + temp_fx - 1], L_temp_band_energy[gmax_range_fx[i] + temp_fx] ) < 0 ) + { + BREAK; + } + ELSE IF( L_sub( L_temp_band_energy[gmax_range_fx[i] + temp_fx - 1], L_temp_band_energy[gmax_range_fx[i] + temp_fx] ) >= 0 ) + { + temp_fx = add( temp_fx, 1 ); + IF( sub( temp_fx, k_fx ) > 0 ) + { + temp_fx = sub( temp_fx, 1 ); + BREAK; + } + } + } + + gmax_range_fx[i] = add( gmax_range_fx[i], temp_fx ); + } + ELSE + { + gmax_range_fx[i] = add( gmax_range_fx[i], temp_fx ); + } + } + + grp_bound_fx[0] = 0; + move16(); + FOR( i = 1; i < GRP_SB - 1; i++ ) + { + grp_bound_fx[i] = gmax_range_fx[i - 1]; + move16(); + } + grp_bound_fx[i] = harmonic_band_fx; + move16(); + grp_bound_fx[i + 1] = N_fx; + move16(); + + + FOR( i = 0; i < GRP_SB; i++ ) + { + L_Ravg_sub[i] = 0x0L; + move32(); + FOR( j = grp_bound_fx[i]; j < grp_bound_fx[i + 1]; j++ ) + { + IF( L_temp_band_energy[j] > 0x0L ) + { + L_Ravg_sub[i] = L_add( L_Ravg_sub[i], L_temp_band_energy[j] ); + move32(); + } + } + } + + L_temp_band_energydiff[0] = L_temp_band_energy[0]; + move32(); + FOR( j = 1; j < harmonic_band_fx; j++ ) + { + L_temp_band_energydiff[j] = L_abs( L_sub( L_temp_band_energy[j], L_temp_band_energy[j - 1] ) ); + move32(); + } + + G1_BE_DIFF_POS_fx = 0; + move16(); + L_G1_BE_DIFF_VAL = 0x0L; + move32(); + + FOR( j = 1; j < harmonic_band_fx; j++ ) + { + IF( L_sub( L_temp_band_energydiff[j], L_G1_BE_DIFF_VAL ) > 0 ) + { + G1_BE_DIFF_POS_fx = j; + move16(); + L_G1_BE_DIFF_VAL = L_temp_band_energydiff[j]; + move32(); + } + } + + test(); + test(); + IF( sub( G1_BE_DIFF_POS_fx, gmax_range_fx[0] ) < 0 && G1_BE_DIFF_POS_fx > 0 ) + { + final_gr_fact_pos_fx = 0; + move16(); + } + ELSE IF( sub( G1_BE_DIFF_POS_fx, gmax_range_fx[0] ) >= 0 && sub( G1_BE_DIFF_POS_fx, gmax_range_fx[1] ) < 0 ) + { + final_gr_fact_pos_fx = 1; + move16(); + } + ELSE + { + final_gr_fact_pos_fx = 2; + move16(); + } + + test(); + IF( final_gr_fact_pos_fx == 0 || sub( final_gr_fact_pos_fx, 1 ) == 0 ) + { + IF( L_sub( L_core_brate, HQ_16k40 ) == 0 ) + { + bits_fact_fx = BITS_FACT_1p10; + move16(); /* 1.10f; */ /* G1 */ + bits_fact1_fx = BITS_FACT_0p92; + move16(); /* 0.92f; */ /* G3 */ + } + ELSE + { + bits_fact_fx = BITS_FACT_1p05; + move16(); /* 1.05f; */ /* G1 */ + bits_fact1_fx = BITS_FACT_0p97; + move16(); /* 0.97f; */ /* G3 */ + } + } + ELSE + { + IF( L_sub( L_core_brate, HQ_16k40 ) == 0 ) + { + bits_fact_fx = BITS_FACT_0p97; + move16(); /* 0.97f; */ /* G1 */ + bits_fact1_fx = BITS_FACT_1p00; + move16(); /* 1.00f; */ /* G3 */ + } + ELSE + { + bits_fact_fx = BITS_FACT_0p92; + move16(); /* 0.92f; */ /* G1 */ + bits_fact1_fx = BITS_FACT_1p00; + move16(); /* 1.00f; */ /* G3 */ + } + } + + FOR( i = 0; i < sub( N_fx, harmonic_band_fx ); i++ ) + { + y_index_fx[i] = extract_h( L_shl( L_temp_band_energy[harmonic_band_fx + i], sub( 16, SWB_BWE_LR_Qbe ) ) ); + move16(); + index_fx[i] = add( harmonic_band_fx, i ); + move16(); + } + + reordvct( y_index_fx, sub( N_fx, harmonic_band_fx ), index_fx ); + + /* Log2 */ + L_temp = L_deposit_l( band_width_fx[index_fx[0]] ); + exp = norm_l( L_temp ); + frac = Log2_norm_lc( L_shl( L_temp, exp ) ); + exp = sub( 30, exp ); + L_temp = L_Comp( exp, frac ); + /* ceil */ + if ( L_and( 0x0000ffff, L_temp ) > 0 ) + { + L_temp = L_add( L_temp, 0x00010000 ); + } + esthf_bits_fx = extract_h( L_temp ); + + L_grp_thr[0] = L_THR1; + move32(); + L_grp_thr[1] = L_THR2; + move32(); + L_grp_thr[2] = L_THR3; + move32(); + L_grp_thr[3] = L_shl( L_deposit_l( esthf_bits_fx ), SWB_BWE_LR_QRk ); + move16(); + + L_norm_sum = 1; + move32(); + FOR( i = 0; i < 3; i++ ) + { + L_norm_sum = L_add( L_norm_sum, L_Ravg_sub[i] ); + move32(); + } + + /*reserve bits for HF coding */ + L_temp = L_add( L_norm_sum, L_Ravg_sub[GRP_SB - 1] ); + exp_normn = norm_l( L_temp ); + exp_normn = sub( exp_normn, 1 ); + exp_normd = norm_s( N_fx ); + + div_l( &div_fx, L_shl( L_temp, exp_normn ), shl( N_fx, exp_normd ) ); /* (Qbe+exp_normn)-(0+exp_normd)-1) */ + L_norm_sum_avg = L_shr( L_deposit_h( div_fx ), add( sub( exp_normn, exp_normd ), 15 ) ); /* -> Qbe */ + + exp_norm = norm_l( L_norm_sum ); + norm_sum_fx = extract_h( L_shl( L_norm_sum, exp_norm ) ); /* SWB_BWE_LR_Qbe+exp_norm-16 */ + Qns = sub( add( SWB_BWE_LR_Qbe, exp_norm ), 16 ); + + div_s( &Inv_norm_sum_fx, 0x4000 /* Q15 */, norm_sum_fx ); + QIns = sub( 31, exp_norm ); /* 14 - (14+exp_norm-16) + 15 */ + + grp_bit_avg_fx = div_s_ss( B_fx, GRP_SB ); /* Q0 */ + + exp_normd = norm_s( p2a_bands_fx ); + div_s( &Inv_p2a_bands_fx, 0x3fff, shl( p2a_bands_fx, exp_normd ) ); /* 14-exp_normd+15 */ + QIpb = sub( 29, exp_normd ); + + L_temp = L_shl( Mpy_32_16( L_Ravg_sub[GRP_SB - 1], Inv_p2a_bands_fx ), sub( SWB_BWE_LR_Qbe, sub( QIpb, 1 ) ) ); + L_norm_diff = L_sub( L_temp, L_norm_sum_avg ); /* Qbe */ + + L_temp = Mpy_32_16( L_Ravg_sub[GRP_SB - 1], sub( GRP_SB, 1 ) ); /* Qbe+0+1 */ + L_temp = Mpy_32_16( L_temp, Inv_norm_sum_fx ); /* Qbe+1+QIpb+1 */ + lf_hf_ge_r_fx = round_fx( L_shl( L_temp, sub( 15 + 16, sub( add( SWB_BWE_LR_Qbe, QIns ), 30 ) ) ) ); + + exp_normn = norm_s( norm_sum_fx ); + exp_normn = sub( exp_normn, 1 ); + exp_normd = norm_s( harmonic_band_fx ); + + div_s( &div_fx, shl( norm_sum_fx, exp_normn ), shl( harmonic_band_fx, exp_normd ) ); + L_avg_enhf_en_diff = L_sub( L_temp_band_energy[index_fx[0]], L_shl( L_deposit_h( div_fx ), sub( sub( SWB_BWE_LR_Qbe, ( add( Qns, sub( exp_normn, exp_normd ) ) ) ), 31 ) ) ); /* Qbe - (Qns+exp_normn-(exp_normd)+15) -16 */ + + IF( sub( lf_hf_ge_r_fx, 26214 ) > 0x0 && L_sub( L_avg_enhf_en_diff, (Word32) ( 8 << SWB_BWE_LR_Qbe ) ) > 0x0L ) /* 0.8=26214.4(Q15) 8.0f=131072(Qbe) */ + { + bits_allocweigh_fx = 6554; + move16(); /* 0.2 6553.6(Q15) */ + IF( L_norm_diff < 0x0L ) + { + bits_allocweigh_fx = 13107; + move16(); /* 0.4 13107.2(Q15) */ + } + + /*allocate bits*/ + /*Bits_grp[GRP_SB-1] = (int16_t)min((grp_bit_avg/p2a_bands + bits_allocweigh*norm_diff),10);*/ + L_temp = L_mult( grp_bit_avg_fx, Inv_p2a_bands_fx ); /* Q0+QIpb+1 */ + L_temp2 = Mpy_32_16( L_norm_diff, bits_allocweigh_fx ); /* Qbe+Q15-15 */ + + L_temp = L_shr( L_temp, add( QIpb, 1 ) ); + L_temp = L_add( L_shl( L_temp, SWB_BWE_LR_Qbe ), L_temp2 ); + + Bits_grp_fx[GRP_SB - 1] = extract_h( L_shl( L_temp, sub( 16, SWB_BWE_LR_Qbe ) ) ); + Bits_grp_fx[GRP_SB - 1] = s_min( Bits_grp_fx[GRP_SB - 1], 10 ); + + test(); + if ( sub( Bits_grp_fx[GRP_SB - 1], esthf_bits_fx ) < 0 ) + { + Bits_grp_fx[GRP_SB - 1] = 0; + move16(); + } + B_fx = sub( B_fx, Bits_grp_fx[GRP_SB - 1] ); + } + + exp_shift = sub( add( SWB_BWE_LR_Qbe, QIns ), 47 ); /* (SWB_BWE_LR_Qbe+14+1+QIns-15-16) */ + exp_norm = norm_s( B_fx ); + B_norm_fx = shl( B_fx, exp_norm ); + exp_shift = add( exp_shift, exp_norm ); + + IF( sub( final_gr_fact_pos_fx, 1 ) == 0 ) + { + L_temp = Mpy_32_16( L_Ravg_sub[1], extract_h( L_mult( bits_fact_fx, B_norm_fx ) ) ); + L_temp = Mpy_32_16( L_temp, Inv_norm_sum_fx ); + Bits_grp_fx[1] = extract_h( L_shr( L_temp, exp_shift ) ); + + L_temp = Mpy_32_16( L_Ravg_sub[2], extract_h( L_mult( bits_fact1_fx, B_norm_fx ) ) ); + L_temp = Mpy_32_16( L_temp, Inv_norm_sum_fx ); + Bits_grp_fx[2] = extract_h( L_shr( L_temp, exp_shift ) ); + + Bits_grp_fx[0] = sub( sub( B_fx, Bits_grp_fx[1] ), Bits_grp_fx[2] ); + } + ELSE + { + L_temp = Mpy_32_16( L_Ravg_sub[0], extract_h( L_mult( bits_fact_fx, B_norm_fx ) ) ); + L_temp = Mpy_32_16( L_temp, Inv_norm_sum_fx ); + Bits_grp_fx[0] = extract_h( L_shr( L_temp, exp_shift ) ); + + L_temp = Mpy_32_16( L_Ravg_sub[2], extract_h( L_mult( bits_fact1_fx, B_norm_fx ) ) ); + L_temp = Mpy_32_16( L_temp, Inv_norm_sum_fx ); + Bits_grp_fx[2] = extract_h( L_shr( L_temp, exp_shift ) ); + + Bits_grp_fx[1] = sub( sub( B_fx, Bits_grp_fx[0] ), Bits_grp_fx[2] ); + } + + IF( sub( Bits_grp_fx[2], THR2 ) < 0 ) + { + Bits_grp_fx[1] = add( Bits_grp_fx[1], Bits_grp_fx[2] ); + move16(); + Bits_grp_fx[2] = 0; + move16(); + } + + FOR( i = 0; i < GRP_SB; i++ ) + { + IF( Bits_grp_fx[i] > 0 ) + { + Bits2indvsb_fx( L_temp_band_energy, grp_bound_fx[i], grp_bound_fx[i + 1], Bits_grp_fx[i], L_grp_thr[i], L_Rsubband, p2a_flags_fx ); + } + ELSE + { + set_val_Word32( L_Rsubband + grp_bound_fx[i], 0x0L, sub( grp_bound_fx[i + 1], grp_bound_fx[i] ) ); + IF( sub( i, GRP_SB - 1 ) == 0 ) + { + set_val_Word16( p2a_flags_fx + grp_bound_fx[i], 0, sub( grp_bound_fx[i + 1], grp_bound_fx[i] ) ); + } + } + } + return; +} + +void hq2_bit_alloc( + const float band_energy[], /* i : band energy of each subband */ + const int16_t bands, /* i : total number of subbands in a frame */ + Word32 L_Rk[], /* i/o: Bit allocation/Adjusted bit alloc. */ + int16_t *bit_budget_fx, /* i/o: bit bugdet */ + int16_t *p2a_flags, /* i : HF tonal indicator */ + const Word16 weight_fx, /* i : weight (Q13) */ + const int16_t band_width[], /* i : Sub band bandwidth */ + const int16_t num_bits, /* i : available bits */ + const int16_t hqswb_clas, /* i : HQ2 class information */ + const int16_t bwidth, /* i : input bandwidth */ + const int16_t is_transient /* i : indicator HQ_TRANSIENT or not */ +) +{ + Word16 j, k; + Word16 tmp; + Word16 bit_budget_norm_fx; + + Word32 L_Rcalc, L_Ravg, L_Rcalc1; + + Word16 exp_normn, exp_normd; + + Word16 Rcnt_fx; + + Word16 div_fx; + Word16 Qdiv; + + Word32 L_tmp; + Word16 tmp_fx; + + Word32 L_maxxy; + Word16 maxdex_fx; + Word32 L_dummy; + + Word16 bit_budget_temp_fx; + + Word16 negflag; + + Word32 L_THR1, L_THR2, L_THR3; + + Word32 L_band_energy[BANDS_MAX]; + + for ( k = 0; k < bands; k++ ) + { + L_band_energy[k] = (Word32) ( band_energy[k] * (float) pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + L_THR1 = L_shl( L_deposit_l( THR1 ), SWB_BWE_LR_QRk ); + L_THR2 = L_shl( L_deposit_l( THR2 ), SWB_BWE_LR_QRk ); + L_THR3 = L_shl( L_deposit_l( THR3 ), SWB_BWE_LR_QRk ); + + /* Init Rk to non-zero values for bands to be allocated bits */ + IF( sub( num_bits, HQ_16k40_BIT ) <= 0 ) + { + set_val_Word32( L_Rk, (Word32) ( C1_QRk ), bands ); /* 1< 0 ) + { + L_Ravg = L_add( L_Ravg, L_shl( L_band_energy[k], sub( SWB_BWE_LR_QRk, SWB_BWE_LR_Qbe ) ) ); /* SWB_BWE_LR_QRk-SWB_BWE_LR_Qbe */ + Rcnt_fx = add( Rcnt_fx, 1 ); + } + } + /* Ravg Qband_energy */ + + /*L_Ravg /= Rcnt; */ + exp_normd = norm_l( L_Ravg ); + exp_normd = sub( exp_normd, 1 ); + exp_normn = norm_s( Rcnt_fx ); + + tmp = shl( Rcnt_fx, exp_normn ); + tmp = s_max( tmp, 1 ); + IF( L_Ravg > 0 ) + { + div_l( &div_fx, L_shl( L_Ravg, exp_normd ), tmp ); /* Qdiv = 14+exp_normd-(exp_normn)-1 */ + } + ELSE + { + div_l( &div_fx, L_shl( L_abs( L_Ravg ), exp_normd ), tmp ); /* Qdiv = 14+exp_normd-(exp_normn)-1 */ + div_fx = negate( div_fx ); + } + + /*Qdiv = QRk+exp_normd-(exp_normn)-1; */ + Qdiv = sub( sub( add( SWB_BWE_LR_QRk, exp_normd ), exp_normn ), 1 ); + + L_Ravg = L_shr( L_deposit_l( div_fx ), sub( Qdiv, SWB_BWE_LR_QRk ) ); + + exp_normd = norm_s( *bit_budget_fx ); + exp_normd = sub( exp_normd, 1 ); + bit_budget_norm_fx = shl( *bit_budget_fx, exp_normd ); + div_fx = 0; + move16(); + + test(); + IF( bit_budget_norm_fx > 0 && sub( bit_budget_norm_fx, tmp ) < 0 ) + { + div_s( &div_fx, bit_budget_norm_fx, tmp ); + } + Qdiv = add( sub( exp_normd, exp_normn ), 15 ); + + FOR( k = 0; k < bands; k++ ) + { + IF( L_Rk[k] > 0 ) + { + /*Rk[k] = ((float) *bit_budget / Rcnt + weight * (band_energy[k] - Ravg)); */ + + L_tmp = Mpy_32_16( L_sub( L_shl( L_band_energy[k], sub( SWB_BWE_LR_QRk, SWB_BWE_LR_Qbe ) ), L_Ravg ), weight_fx ); /* SWB_BWE_LR_QRk + Q13 - 15 */ + L_tmp = L_shl( L_tmp, 2 ); /* -> SWB_BWE_LR_QRk */ + + L_Rk[k] = L_add( L_shr( L_deposit_l( div_fx ), sub( Qdiv, SWB_BWE_LR_QRk ) ), L_tmp ); + } + } + + negflag = 0; + move16(); + L_Rcalc = 0; + move32(); + FOR( k = 0; k < bands; k++ ) + { + IF( L_sub( L_Rk[k], MIN_BITS_FIX ) < 0 ) + { + L_Rk[k] = 0x0L; + move32(); + negflag = 1; + move16(); + } + L_Rcalc = L_add( L_Rcalc, L_Rk[k] ); /*SWB_BWE_LR_QRk */ + } + + /* prune noiselike bands with low allocation */ + IF( sub( num_bits, HQ_16k40_BIT ) <= 0 && negflag == 0 ) + { + L_maxxy = 0; + move32(); + maxdex_fx = -1; + move16(); + L_Rcalc = 0; + move32(); + + /* find worst under-allocation */ + FOR( k = sub( bands, 1 ); k >= 0; k-- ) + { + /* dummy = ((float) min (band_width[k], max (12, band_width[k] / 4))) - Rk[k]; */ + tmp_fx = s_min( band_width[k], s_max( 12, shr( band_width[k], 2 ) ) ); + L_dummy = L_sub( L_shl( L_deposit_l( tmp_fx ), SWB_BWE_LR_QRk ), L_Rk[k] ); /*SWB_BWE_LR_QRk */ + test(); + test(); + test(); + IF( p2a_flags[k] == 0 && L_sub( L_dummy, L_maxxy ) > 0 && L_Rk[k] > 0 ) + { + maxdex_fx = k; + move16(); + L_maxxy = L_dummy; + move32(); /*SWB_BWE_LR_QRk */ + } + } + + /* prune worst allocation and recalculate total allocation */ + IF( sub( maxdex_fx, -1 ) > 0 ) + { + L_Rk[maxdex_fx] = 0; + move32(); + } + FOR( k = 0; k < bands; k++ ) + { + L_Rcalc = L_add( L_Rcalc, L_Rk[k] ); /*SWB_BWE_LR_QRk */ + } + } + test(); + IF( L_sub( L_Rcalc, L_Rcalc1 ) == 0 && sub( bwidth, SWB ) == 0 ) + { + /* Reallocate bits to individual subbands for HQ_NORMAL mode */ + /* if bits allocated to subbands areless than predefined threshold */ + IF( sub( hqswb_clas, HQ_NORMAL ) == 0 && sub( num_bits, HQ_16k40_BIT ) < 0 ) + { + L_dummy = 0x0L; + move32(); + FOR( k = 0; k < bands; k++ ) + { + test(); + test(); + test(); + test(); + test(); + IF( sub( k, 11 ) < 0 && L_sub( L_Rk[k], L_THR1 ) < 0 ) + { + L_Rk[k] = 0x0L; + move32(); + } + ELSE IF( sub( k, 11 ) >= 0 && sub( k, 16 ) < 0 && L_sub( L_Rk[k], L_THR2 ) < 0 ) + { + L_Rk[k] = 0x0L; + move32(); + } + ELSE IF( sub( k, 16 ) >= 0 && sub( k, bands ) < 0 && L_sub( L_Rk[k], L_THR3 ) < 0 ) + { + L_Rk[k] = 0x0L; + move32(); + } + + L_dummy = L_add( L_dummy, L_Rk[k] ); + } + + IF( L_sub( L_dummy, L_Rcalc ) == 0 ) + { + test(); + IF( sub( hqswb_clas, HQ_NORMAL ) == 0 && sub( num_bits, HQ_16k40_BIT ) < 0 ) + { + bit_budget_temp_fx = *bit_budget_fx; + move16(); + FOR( k = 0; k < NB_SWB_SUBBANDS; k++ ) + { + IF( p2a_flags[bands - NB_SWB_SUBBANDS + k] == 1 && L_Rk[bands - NB_SWB_SUBBANDS + k] == 0.0f ) + { + p2a_flags[bands - NB_SWB_SUBBANDS + k] = 0; + move16(); + bit_budget_temp_fx = sub( bit_budget_temp_fx, bits_lagIndices_modeNormal[k] ); + } + } + + IF( sub( bit_budget_temp_fx, *bit_budget_fx ) < 0 ) + { + *bit_budget_fx = bit_budget_temp_fx; + move16(); + /* a negative *bit_budget_fx may occur here due to Bit Errors */ + /* handled outside this function to properly set flag: st_fx->BER_detect */ + } + ELSE IF( sub( bit_budget_temp_fx, *bit_budget_fx ) == 0 ) + { + BREAK; + } + } + ELSE + { + BREAK; + } + } + } + ELSE + { + BREAK; + } + } + ELSE IF( L_sub( L_Rcalc, L_Rcalc1 ) == 0 && sub( bwidth, SWB ) != 0 ) + { + BREAK; + } + + L_Rcalc1 = L_Rcalc; + move32(); + } + return; +} diff --git a/lib_com/hq2_core_com.c b/lib_com/hq2_core_com.c new file mode 100644 index 0000000000..33411f9334 --- /dev/null +++ b/lib_com/hq2_core_com.c @@ -0,0 +1,584 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * mdct_spectrum_denorm() + * + * + *--------------------------------------------------------------------------*/ + +void mdct_spectrum_denorm( + const int32_t inp_vector[], + float y2[], + const int16_t band_start[], + const int16_t band_end[], + const int16_t band_width[], + const float band_energy[], + const int16_t npulses[], + const int16_t bands, + const float ld_slope, + const float pd_thresh ) +{ + int16_t i, k; + float Eyy, gamma, pd, gain_tweak; + + for ( k = 0; k < bands; k++ ) + { + Eyy = 0; + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + Eyy += (float) inp_vector[i] * inp_vector[i]; + } + + if ( Eyy > 0.0f ) + { + /* Set gamma to be pulse gain which results in perfect quantized subband energy */ + gamma = (float) sqrt( pow( 2.0f, band_energy[k] ) / Eyy ); + + /* Adjust gamma based on pulse density (0 bit MSE gain estimator) */ + pd = (float) npulses[k] / band_width[k]; + if ( pd < pd_thresh ) + { + gain_tweak = (float) pow( 2.0f, ( ld_slope * log2_f( pd / pd_thresh ) ) ); + gamma *= gain_tweak; + } + + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + y2[i] = gamma * inp_vector[i]; + } + } + } + + return; +} +/*--------------------------------------------------------------------------* + * hq2_core_configure() + * + * + *--------------------------------------------------------------------------*/ + +void hq2_core_configure( + const int16_t frame_length, /* i : frame length */ + const int16_t num_bits, /* i : number of bits */ + const int16_t is_transient, /* i : transient flag */ + int16_t *bands, + int16_t *length, + int16_t band_width[], + int16_t band_start[], + int16_t band_end[], + Word32 *L_qint, + Word16 *eref_fx, + Word16 *bit_alloc_weight_fx, + int16_t *gqlevs, + int16_t *Ngq, + int16_t *p2a_bands, + float *p2a_th, + float *pd_thresh, + float *ld_slope, + float *ni_coef, + float *ni_pd_th, + int32_t bwe_br ) +{ + const Xcore_Config *xcore_config; + + int16_t i, k; + int16_t bands_sh; + + if ( frame_length == L_FRAME8k ) + { + if ( is_transient ) + { + if ( num_bits <= ACELP_7k20 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_8kHz_007200bps_short; + } + else if ( num_bits <= ACELP_8k00 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_8kHz_008000bps_short; + } + else if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_8kHz_013200bps_short; + } + else + { + xcore_config = &xcore_config_8kHz_016400bps_short; + } + } + else + { + if ( num_bits <= ACELP_7k20 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_8kHz_007200bps_long; + } + else if ( num_bits <= ACELP_8k00 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_8kHz_008000bps_long; + } + else if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_8kHz_013200bps_long; + } + else + { + xcore_config = &xcore_config_8kHz_016400bps_long; + } + } + } + else if ( frame_length == L_FRAME16k ) + { + if ( is_transient ) + { + if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_16kHz_013200bps_short; + } + else + { + xcore_config = &xcore_config_16kHz_016400bps_short; + } + } + else + { + if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) + { + xcore_config = &xcore_config_16kHz_013200bps_long; + } + else + { + xcore_config = &xcore_config_16kHz_016400bps_long; + } + } + } + else /* (bwidth == SWB) */ + { + if ( is_transient ) + { + if ( bwe_br == ACELP_13k20 ) + { + xcore_config = &xcore_config_32kHz_013200bps_short; + } + else + { + xcore_config = &xcore_config_32kHz_016400bps_short; + } + } + else + { + if ( bwe_br == ACELP_13k20 ) + { + xcore_config = &xcore_config_32kHz_013200bps_long; + } + else + { + xcore_config = &xcore_config_32kHz_016400bps_long; + } + } + } + + *bands = xcore_config->bands; + *length = xcore_config->bw; + *L_qint = xcore_config->L_qint; + *eref_fx = xcore_config->eref_fx; + *bit_alloc_weight_fx = xcore_config->bit_alloc_weight_fx; + *gqlevs = xcore_config->gqlevs; + *Ngq = xcore_config->Ngq; + + *p2a_bands = xcore_config->p2a_bands; + *p2a_th = xcore_config->p2a_th; + + *pd_thresh = xcore_config->pd_thresh; + *ld_slope = xcore_config->ld_slope; + *ni_coef = xcore_config->ni_coef; + *ni_pd_th = xcore_config->ni_pd_th; + + mvs2s( xcore_config->band_width, band_width, *bands ); + + /* Expand band_width[] table for short windows */ + if ( is_transient ) + { + bands_sh = *bands; + *bands = NUM_TIME_SWITCHING_BLOCKS * bands_sh; + *length *= NUM_TIME_SWITCHING_BLOCKS; + + for ( i = 1; i <= 3; i++ ) + { + for ( k = 0; k < bands_sh; k++ ) + { + band_width[i * bands_sh + k] = band_width[k]; + } + } + } + + /* Formulate band_start and band_end tables from band_width table */ + band_start[0] = 0; + band_end[0] = band_width[0] - 1; + for ( k = 1; k < *bands; k++ ) + { + band_start[k] = band_start[k - 1] + band_width[k - 1]; + band_end[k] = band_start[k] + band_width[k] - 1; + } + + return; +} + +/*--------------------------------------------------------------------------* + * reverse_transient_frame_energies() + * + * + *--------------------------------------------------------------------------*/ + +void reverse_transient_frame_energies( + float band_energy[], /* o : band energies */ + const int16_t bands /* i : number of bands */ +) +{ + int16_t k, k1, k2; + float be; + + k1 = bands / 4; + k2 = bands / 2 - 1; + for ( k = 0; k < bands / 8; k++ ) + { + be = band_energy[k1]; + band_energy[k1] = band_energy[k2]; + band_energy[k2] = be; + k1++, k2--; + } + + k1 = 3 * bands / 4; + k2 = bands - 1; + for ( k = 0; k < bands / 8; k++ ) + { + be = band_energy[k1]; + band_energy[k1] = band_energy[k2]; + band_energy[k2] = be; + k1++, k2--; + } + + return; +} + +#define WMC_TOOL_MAN +void bit_allocation_second_fx( + Word32 *Rk, + Word32 *Rk_sort, + Word16 BANDS, + const Word16 *band_width, + Word16 *k_sort, + Word16 *k_num, + const Word16 *p2a_flags, + const Word16 p2a_bands, + const Word16 *last_bitalloc, + const Word16 input_frame ) +{ + Word16 k, k2 = 0; + Word16 ever_bits[BANDS_MAX], ever_sort[BANDS_MAX]; /*Q12 */ + Word16 class_flag = 0; + Word16 rk_temp = 32767, ever_temp = 32767; /*Q12 */ + Word16 exp; + Word16 tmp; + Word32 L_tmp; + + for ( k = 0; k < BANDS; k++ ) + { + if ( ( ( sub( k_sort[k], sub( BANDS, p2a_bands ) ) >= 0 ) && ( sub( p2a_flags[k_sort[k]], 1 ) == 0 ) ) || + ( ( sub( k_sort[k], sub( BANDS, 2 ) ) >= 0 ) && ( sub( last_bitalloc[sub( k_sort[k], sub( BANDS, 2 ) )], 1 ) == 0 ) ) ) + { + exp = norm_s( band_width[k_sort[k]] ); + tmp = shl( band_width[k_sort[k]], exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp = 29-exp) */ + L_tmp = Mult_32_16( Rk_sort[k], tmp ); /* Q(16+29-exp-15 = 30-exp) */ + tmp = sub( 18, exp ); + ever_bits[k] = extract_l( L_shr( L_tmp, tmp ) ); /*Q12 */ + if ( sub( ever_bits[k], rk_temp ) < 0 ) + { + rk_temp = ever_bits[k]; + k2 = k; + } + class_flag = 1; + } + } + if ( class_flag == 0 || sub( input_frame, L_FRAME8k ) == 0 ) + { + for ( k = 0; k < BANDS; k++ ) + { + if ( sub( k_sort[k], sub( BANDS, p2a_bands ) ) < 0 && Rk_sort[k] > 0 ) + { + exp = norm_s( band_width[k_sort[k]] ); + tmp = shl( band_width[k_sort[k]], exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp = 29-exp) */ + L_tmp = Mult_32_16( Rk_sort[k], tmp ); /* Q(16+29-exp-15 = 30-exp) */ + tmp = sub( 18, exp ); + ever_sort[k] = extract_l( L_shr( L_tmp, tmp ) ); /*Q12 */ + IF( sub( ever_sort[k], ever_temp ) < 0 ) + { + ever_temp = ever_sort[k]; + k2 = k; + } + } + } + } + + k_num[0] = k2; + if ( sub( k_sort[k2], sub( BANDS, 1 ) ) == 0 ) + { + for ( k = 0; k < BANDS; k++ ) + { + if ( sub( k_sort[k], sub( k_sort[k2], 1 ) ) == 0 ) + { + k_num[1] = k; + } + } + } + else if ( k_sort[k2] == 0 ) + { + for ( k = 0; k < BANDS; k++ ) + { + if ( sub( k_sort[k], add( k_sort[k2], 1 ) ) == 0 ) + { + k_num[1] = k; + } + } + } + else + { + if ( L_sub( Rk[sub( k_sort[k2], 1 )], Rk[add( k_sort[k2], 1 )] ) < 0 ) + { + for ( k = 0; k < BANDS; k++ ) + { + if ( sub( k_sort[k], sub( k_sort[k2], 1 ) ) == 0 ) + { + k_num[1] = k; + } + } + } + else + { + for ( k = 0; k < BANDS; k++ ) + { + if ( sub( k_sort[k], add( k_sort[k2], 1 ) ) == 0 ) + { + k_num[1] = k; + } + } + } + } + + return; +} + +#undef WMC_TOOL_MAN + +/*--------------------------------------------------------------------------* + * spt_shorten_domain_pre() + * + * Compute shorten subband if previous frame has spectral peak. + *--------------------------------------------------------------------------*/ + +void spt_shorten_domain_pre( + const int16_t band_start[], /* i : Starting position of sub band */ + const int16_t band_end[], /* i : End position of sub band */ + const int16_t prev_SWB_peak_pos[], /* i : Spectral peak */ + const int16_t BANDS, /* i : total number of bands */ + const int32_t bwe_br, /* i : bitrate information */ + int16_t new_band_start[], /* o : Starting position of new shorten sub band */ + int16_t new_band_end[], /* o : End position of new shorten sub band */ + int16_t new_band_width[] /* o : new sub band bandwidth */ +) +{ + int16_t j, k, kpos; + + int16_t new_band_width_half; + const int16_t *p_bw_SPT_tbl; /* pointer of bw_SPT_tbl */ + + p_bw_SPT_tbl = bw_SPT_tbl[0]; + if ( bwe_br == HQ_16k40 ) + { + p_bw_SPT_tbl = bw_SPT_tbl[1]; + } + + kpos = 0; + j = 0; + for ( k = BANDS - SPT_SHORTEN_SBNUM; k < BANDS; k++ ) + { + if ( prev_SWB_peak_pos[kpos] != 0 ) + { + new_band_width[j] = p_bw_SPT_tbl[j]; + + /*shorten the bandwidth for pulse resolution*/ + new_band_width_half = new_band_width[j] / 2; + new_band_start[j] = prev_SWB_peak_pos[kpos] - new_band_width_half; + new_band_end[j] = prev_SWB_peak_pos[kpos] + new_band_width_half; + + if ( new_band_start[j] < band_start[k] ) + { + new_band_start[j] = band_start[k]; + new_band_end[j] = new_band_start[j] + ( new_band_width[j] - 1 ); + } + else if ( new_band_end[j] > band_end[k] ) + { + new_band_end[j] = band_end[k]; + new_band_start[j] = new_band_end[j] - ( new_band_width[j] - 1 ); + } + } + else + { + new_band_width[j] = p_bw_SPT_tbl[j]; + + /*shorten the bandwidth for pulse resolution*/ + new_band_width_half = new_band_width[j] / 2; + new_band_start[j] = ( band_start[k] + band_end[k] ) / 2 - new_band_width_half; + new_band_end[j] = ( band_start[k] + band_end[k] ) / 2 + new_band_width_half; + } + + kpos++; + j++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * spt_shorten_domain_band_save() + * + * Store the original subband information + *--------------------------------------------------------------------------*/ + +void spt_shorten_domain_band_save( + const int16_t bands, /* i : total subband */ + const int16_t band_start[], /* i : starting position of subband */ + const int16_t band_end[], /* i : end position of subband */ + const int16_t band_width[], /* i : band width of subband */ + int16_t org_band_start[], /* o : starting position of subband */ + int16_t org_band_end[], /* o : end position of subband */ + int16_t org_band_width[] /* o : band width of subband */ +) +{ + int16_t k, kpos; + + kpos = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + org_band_start[kpos] = band_start[k]; + org_band_end[kpos] = band_end[k]; + org_band_width[kpos] = band_width[k]; + kpos++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * spt_shorten_domain_band_restore() + * + * Restrore the subband information + *--------------------------------------------------------------------------*/ + +void spt_shorten_domain_band_restore( + const int16_t bands, /* i : total subband */ + int16_t band_start[], /* i/o: starting position of subband */ + int16_t band_end[], /* i/o: end position of subband */ + int16_t band_width[], /* i/o: band width of subband */ + const int16_t org_band_start[], /* o : starting position of subband */ + const int16_t org_band_end[], /* o : end position of subband */ + const int16_t org_band_width[] /* o : band width of subband */ +) +{ + int16_t k, kpos; + + kpos = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + band_start[k] = org_band_start[kpos]; + band_end[k] = org_band_end[kpos]; + band_width[k] = org_band_width[kpos]; + kpos++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * spt_swb_peakpos_tmp_save + * + * Save Peak position for every higher subband + *--------------------------------------------------------------------------*/ + +void spt_swb_peakpos_tmp_save( + const float y2[], /* i : coded spectral information */ + const int16_t bands, /* i : total number of bands */ + const int16_t band_start[], /* i : starting position of subband */ + const int16_t band_end[], /* i : end position of subband */ + int16_t prev_SWB_peak_pos_tmp[] /* o : spectral peaks */ +) +{ + + int16_t i, j, k; + float peak_max; + + j = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + peak_max = 0; + prev_SWB_peak_pos_tmp[j] = 0; + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( peak_max < fabs( y2[i] ) ) + { + peak_max = (float) fabs( y2[i] ); + prev_SWB_peak_pos_tmp[j] = i; + } + } + j++; + } + + return; +} diff --git a/lib_com/hq2_noise_inject.c b/lib_com/hq2_noise_inject.c new file mode 100644 index 0000000000..3eac77d81b --- /dev/null +++ b/lib_com/hq2_noise_inject.c @@ -0,0 +1,278 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hq2_noise_inject() + * + * HQ2 noise injection for WB signals + *--------------------------------------------------------------------------*/ + +void hq2_noise_inject( + float y2hat[], + const int16_t band_start[], + const int16_t band_end[], + const int16_t band_width[], + float Ep[], + float Rk[], + const int16_t npulses[], + int16_t ni_seed, + const int16_t bands, + const int16_t ni_start_band, + const int16_t bw_low, + const int16_t bw_high, + const float enerL, + const float enerH, + float last_ni_gain[], + float last_env[], + int16_t *last_max_pos_pulse, + int16_t *p2a_flags, + int16_t p2a_bands, + const int16_t hqswb_clas, + const int16_t bwidth, + const int32_t bwe_br ) +{ + int16_t i, j, k, ni_end_band, satur = 0, count[BANDS_MAX], max_pos_pulse, pos; + float ni_gain[BANDS_MAX], pd[BANDS_MAX], rand, peak[BANDS_MAX], fac, env[BANDS_MAX]; + int16_t sb = bands; + + if ( ( hqswb_clas == HQ_HARMONIC || hqswb_clas == HQ_NORMAL ) && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && bwidth == SWB ) + { + sb = ( bwe_br == HQ_16k40 ) ? 19 : 17; + } + + /* calculate the envelopes/ the decoded peak coeff./number of the decoded coeff./ the last subbands of the bit-allocated/saturation of bit-allocation */ + ni_end_band = bands; + max_pos_pulse = bands; + for ( k = ni_start_band; k < ni_end_band; k++ ) + { + pd[k] = (float) Rk[k] / band_width[k]; + env[k] = (float) sqrt( Ep[k] / band_width[k] ); + + peak[k] = 0.0f; + count[k] = 0; + if ( npulses[k] != 0 ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + Ep[k] -= y2hat[i] * y2hat[i]; + if ( fabs( y2hat[i] ) > peak[k] ) + { + peak[k] = (float) fabs( y2hat[i] ); + } + + if ( y2hat[i] != 0 ) + { + count[k]++; + } + } + + max_pos_pulse = k; + Ep[k] = Ep[k] > 0 ? (float) sqrt( Ep[k] / band_width[k] ) : 0.0f; + } + else + { + Ep[k] = env[k]; + } + } + + for ( k = ni_start_band; k < ni_end_band; k++ ) + { + /* calculate the noise gain */ + satur = ( pd[k] >= 0.8f ) ? 1 : 0; + if ( satur == 0 && Ep[k] > 0 ) + { + if ( npulses[k] != 0 ) + { + if ( bwidth == SWB ) + { + if ( hqswb_clas != HQ_TRANSIENT ) + { + if ( hqswb_clas == HQ_HARMONIC ) + { + fac = ( k <= sb ) ? 6.0f * ( 1.5f - pd[k] ) * env[k] * Ep[k] / ( peak[k] * peak[k] ) : 1.5f * Ep[k] / peak[k]; + } + else + { + fac = ( k <= sb ) ? 5.0f * ( 1.5f - pd[k] ) * Ep[k] / ( peak[k] ) : 4.0f * Ep[k] / peak[k]; + } + } + else + { + fac = 1.1f; + } + } + else + { + fac = 20.0f * min( 1.0f, ( 1.5f - pd[k] ) ) * env[k] * Ep[k] / ( peak[k] * peak[k] ); + if ( k > 1 && k < ni_end_band - 1 ) + { + if ( count[k + 1] == 0 && env[k] > 0.5f * env[k + 1] && env[k] < 2.0f * env[k - 1] ) + { + fac = 1.5f * env[k + 1] / env[k]; + } + else if ( count[k - 1] == 0 && peak[k] > 2.0f * env[k] ) + { + fac = env[k - 1] / env[k]; + } + } + + if ( k >= ni_end_band - p2a_bands && bwidth == WB ) + { + if ( bw_low * enerH > bw_high * enerL && peak[k] < 2.0f * env[k] ) + { + fac *= ( 2.0f - Ep[k] / peak[k] ); + } + + if ( p2a_flags[k] == 0 && fac > 0 ) + { + fac *= min( 1.25f * env[k] / ( Ep[k] * fac ), 1.5f ); + } + } + } + } + else + { + fac = ( hqswb_clas == HQ_HARMONIC && bwidth == SWB ) ? 0.8f : 1.1f; + } + + ni_gain[k] = fac * Ep[k]; + } + else + { + ni_gain[k] = 0.0; + } + + /* smooth the noise gain between the current frame and the previous frame */ + pos = bwidth == SWB ? ni_end_band - 1 : max( max_pos_pulse, *last_max_pos_pulse ); + + if ( k <= pos ) + { + if ( k > 0 && k < ni_end_band - 1 ) + { + if ( ( env[k] > 0.5f * last_env[k] && env[k] < 2.0f * last_env[k] ) || + ( ( ( env[k] + env[k - 1] + env[k + 1] ) > 0.5f * ( last_env[k] + last_env[k - 1] + last_env[k + 1] ) ) && + ( ( env[k] + env[k - 1] + env[k + 1] ) < 2.0f * ( last_env[k] + last_env[k - 1] + last_env[k + 1] ) ) ) ) + { + if ( ni_gain[k] > last_ni_gain[k] ) + { + ni_gain[k] = 0.2f * ni_gain[k] + 0.8f * last_ni_gain[k]; + } + else + { + ni_gain[k] = 0.6f * ni_gain[k] + 0.4f * last_ni_gain[k]; + } + } + } + else if ( k == ni_end_band - 1 ) + { + if ( ( env[k] > 0.5f * last_env[k] && env[k] < 2.0f * last_env[k] ) || + ( ( env[k] + env[k - 1] ) > 0.5f * ( last_env[k] + last_env[k - 1] ) && + ( env[k] + env[k - 1] ) < 2.0f * ( last_env[k] + last_env[k - 1] ) ) ) + { + if ( ni_gain[k] > last_ni_gain[k] ) + { + ni_gain[k] = 0.2f * ni_gain[k] + 0.8f * last_ni_gain[k]; + } + else + { + ni_gain[k] = 0.6f * ni_gain[k] + 0.4f * last_ni_gain[k]; + } + } + } + } + + /* inject noise into the non-decoded coeffs */ + if ( k >= ni_end_band - p2a_bands && p2a_flags[k] == 0 && bwidth != SWB ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( y2hat[i] != 0 ) + { + y2hat[i] *= 0.8f; + } + } + } + + if ( k == max_pos_pulse && k < bands - p2a_bands && satur != 1 && bwidth != SWB ) + { + j = 0; + if ( ni_gain[k] < 0.01f ) + { + fac = 0.0f; + } + else + { + fac = max( Ep[k] / ni_gain[k], 1.0f ); + } + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( y2hat[i] == 0 ) + { + rand = own_random( &ni_seed ) / PCM16_TO_FLT_FAC; + y2hat[i] += ( fac - ( ( fac - 1.0f ) * j ) / band_width[k] ) * ni_gain[k] * rand; + } + + j++; + } + } + else + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( y2hat[i] == 0 ) + { + rand = own_random( &ni_seed ) / PCM16_TO_FLT_FAC; + y2hat[i] += ni_gain[k] * rand; + } + } + } + } + + mvr2r( env, last_env, ni_end_band ); + mvr2r( ni_gain, last_ni_gain, ni_end_band ); + *last_max_pos_pulse = max_pos_pulse; + + return; +} diff --git a/lib_com/hq_bit_allocation.c b/lib_com/hq_bit_allocation.c new file mode 100644 index 0000000000..fbb655e4f3 --- /dev/null +++ b/lib_com/hq_bit_allocation.c @@ -0,0 +1,223 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hq_bit_allocation() + * + * Assign bits for HQ fine structure coding with PVQ + *--------------------------------------------------------------------------*/ + +void hq_bit_allocation( + const int32_t core_brate, /* i : Core bitrate */ + const int16_t length, /* i : Frame length */ + const int16_t hqswb_clas, /* i : HQ class */ + int16_t *num_bits, /* i/o: Remaining bit budget */ + const int16_t *normqlg2, /* i : Quantized norms */ + const int16_t nb_sfm, /* i : Number sub bands to be encoded */ + const int16_t *sfmsize, /* i : Sub band bandwidths */ + float *noise_level, /* o : HVQ noise level */ + int16_t *R, /* o : Bit allocation per sub band */ + int16_t *Rsubband, /* o : Fractional bit allocation (Q3) */ + int16_t *sum, /* o : Sum of allocated shape bits */ + int16_t *core_sfm, /* o : Last coded band in core */ + const int16_t num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE */ +) +{ + int16_t sfm_limit = nb_sfm; + int16_t i; + int16_t idx[NB_SFM]; + int16_t wnorm[NB_SFM]; + int16_t avrg_wnorm; + int16_t E_low; + int16_t E_hb_mean; + int16_t E_max; + int16_t i_max; + + + set_s( R, 0, NB_SFM ); + for ( i = 0; i < nb_sfm; i++ ) + { + idx[i] = i; + } + if ( hqswb_clas != HQ_TRANSIENT && hqswb_clas != HQ_HVQ && !( length == L_FRAME16k && core_brate <= HQ_32k ) ) + { + /* 'nf_idx' 2-bits index written later */ + *num_bits -= 2; + } + + if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) + { + if ( core_brate >= HQ_32k ) + { + *num_bits -= HQ_GENERIC_SWB_NBITS2; + } + else + { + *num_bits -= HQ_GENERIC_SWB_NBITS; + } + + if ( length == L_SPEC48k ) + { + *num_bits -= HQ_GENERIC_FB_NBITS; + } + } + + if ( ( length == L_SPEC48k ) && ( hqswb_clas != HQ_HARMONIC ) && ( hqswb_clas != HQ_HVQ ) ) + { + map_quant_weight( normqlg2, wnorm, hqswb_clas == HQ_TRANSIENT ); + } + else + { + mvs2s( normqlg2, wnorm, nb_sfm ); + } + + + if ( hqswb_clas == HQ_HARMONIC ) + { + /* classification and limit bandwidth for bit allocation */ + sfm_limit -= 2; + limit_band_noise_level_calc( wnorm, &sfm_limit, core_brate, noise_level ); + + /* Detect important band in high frequency region */ + E_low = sum_s( wnorm, SFM_G1 ); + i_max = 0; + E_max = MIN16B; + E_hb_mean = 0; + for ( i = SFM_G1; i < nb_sfm; i++ ) + { + E_hb_mean += wnorm[i]; + if ( wnorm[i] > E_max ) + { + E_max = wnorm[i]; + i_max = i; + } + } + E_hb_mean = E_hb_mean >> 4; /* Truncated division by SFM_G1 */ + if ( E_max * 15 < E_low || E_max * 0.67 < E_hb_mean || i_max < sfm_limit ) + { + i_max = 0; + } + + set_s( wnorm + sfm_limit, -20, nb_sfm - sfm_limit ); + if ( i_max > 0 ) + { + wnorm[i_max] = E_max; + } + } + + if ( hqswb_clas == HQ_HVQ ) + { + *sum = 0; + } + else if ( hqswb_clas == HQ_GEN_SWB || ( hqswb_clas == HQ_TRANSIENT && length == L_FRAME32k && core_brate <= HQ_32k ) ) + { + *sum = BitAllocF( wnorm, core_brate, *num_bits, nb_sfm, R, Rsubband, hqswb_clas, num_env_bands ); + } + else if ( length == L_FRAME16k && core_brate <= HQ_32k ) + { + if ( hqswb_clas != HQ_TRANSIENT ) + { + avrg_wnorm = wnorm[10]; + for ( i = 11; i < 18; i++ ) + { + avrg_wnorm += wnorm[i]; + } + + avrg_wnorm /= 8; + for ( i = 0; i < 4; i++ ) + { + if ( wnorm[i] < avrg_wnorm ) + { + wnorm[i] = avrg_wnorm; + } + } + + /* Estimate number of bits per band */ + *sum = BitAllocWB( wnorm, *num_bits, nb_sfm, R, Rsubband ); + } + else + { + reordvct( wnorm, nb_sfm, idx ); + bitalloc( wnorm, idx, *num_bits, nb_sfm, QBIT_MAX2, R, sfmsize, hqswb_clas ); + bitallocsum( R, nb_sfm, sum, Rsubband, *num_bits, length, sfmsize ); + } + } + else + { + reordvct( wnorm, nb_sfm, idx ); + + /* enlarge the wnorm value so that more bits can be allocated to (sfm_limit/2 ~ sfm_limit) range */ + if ( hqswb_clas == HQ_HARMONIC ) + { + for ( i = sfm_limit / 2; i < sfm_limit; i++ ) + { + wnorm[i] = wnorm[sfm_limit / 2 - 1]; + } + } + + bitalloc( wnorm, idx, *num_bits, nb_sfm, QBIT_MAX2, R, sfmsize, hqswb_clas ); + bitallocsum( R, nb_sfm, sum, Rsubband, *num_bits, length, sfmsize ); + } + + /* Find last coded core band */ + *core_sfm = nb_sfm - 1; + if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) + { + *core_sfm = find_last_band( R, nb_sfm ); + } + else if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) + { + *core_sfm = find_last_band( R, nb_sfm ); + if ( *core_sfm < num_env_bands ) + { + *core_sfm = num_env_bands - 1; + } + } + + *num_bits -= *sum; + + return; +} diff --git a/lib_com/hq_conf.c b/lib_com/hq_conf.c new file mode 100644 index 0000000000..ed548171a1 --- /dev/null +++ b/lib_com/hq_conf.c @@ -0,0 +1,258 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hq_configure() + * + * Configuration routine for HQ mode + *--------------------------------------------------------------------------*/ + +void hq_configure( + const int16_t length, /* i : Frame length */ + const int16_t hqswb_clas, /* i : HQ SWB class */ + const int32_t core_brate, /* i : Codec bitrate */ + int16_t *num_sfm, /* o : Total number of subbands */ + int16_t *nb_sfm, /* o : Total number of coded bands */ + int16_t *start_norm, /* o : First norm to be SDE encoded */ + int16_t *num_env_bands, /* o : Number coded envelope bands */ + int16_t *numnrmibits, /* o : Number of bits in fall-back norm encoding */ + int16_t *hq_generic_offset, /* o : Freq offset for HQ GENERIC */ + int16_t *sfmsize, /* o : Subband bandwidths */ + int16_t *sfm_start, /* o : Subband start coefficients */ + int16_t *sfm_end /* o : Subband end coefficients */ +) +{ + const int16_t *p_sfmsize; + const int16_t *p_sfm_start; + const int16_t *p_sfm_end; + int16_t i, bw_ext; + + bw_ext = 0; + *start_norm = 0; + + if ( length == L_SPEC48k ) + { + if ( hqswb_clas == HQ_GEN_FB ) + { + *num_sfm = NB_SFM; + p_sfmsize = band_len_HQ; + p_sfm_start = band_start_HQ; + p_sfm_end = band_end_HQ; + + if ( core_brate >= HQ_32k ) + { + *hq_generic_offset = HQ_GENERIC_FOFFSET_32K; + /* setting start frequency of FD BWE */ + *num_env_bands = SFM_N_STA_10k; + } + else + { + *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4; + *num_env_bands = SFM_N_STA_8k; + } + + *nb_sfm = *num_sfm; + } + else + { + if ( hqswb_clas == HQ_HARMONIC ) + { + *num_sfm = SFM_N_HARM_FB; + *nb_sfm = SFM_N_HARM_FB; + *num_env_bands = SFM_N_HARM_FB; + + p_sfmsize = band_len_harm; + p_sfm_start = band_start_harm; + p_sfm_end = band_end_harm; + } + else if ( hqswb_clas == HQ_HVQ ) + { + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + *num_sfm = SFM_N_HARM_FB; + *nb_sfm = HVQ_THRES_SFM_24k; + *num_env_bands = *num_sfm - *nb_sfm; + *start_norm = HVQ_THRES_SFM_24k; + } + else + { + *num_sfm = SFM_N_HARM_FB; + *nb_sfm = HVQ_THRES_SFM_32k; + *num_env_bands = *num_sfm - *nb_sfm; + *start_norm = HVQ_THRES_SFM_32k; + } + + p_sfmsize = band_len_harm; + p_sfm_start = band_start_harm; + p_sfm_end = band_end_harm; + } + else + { + *num_sfm = NB_SFM; + *nb_sfm = *num_sfm; + *num_env_bands = NB_SFM; + + p_sfmsize = band_len_HQ; + p_sfm_start = band_start_HQ; + p_sfm_end = band_end_HQ; + } + } + } + else if ( length == L_SPEC32k ) + { + if ( hqswb_clas == HQ_HARMONIC ) + { + *num_sfm = SFM_N_HARM; + *nb_sfm = SFM_N_HARM; + *num_env_bands = SFM_N_HARM; + + p_sfmsize = band_len_harm; + p_sfm_start = band_start_harm; + p_sfm_end = band_end_harm; + } + else if ( hqswb_clas == HQ_HVQ ) + { + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + *num_sfm = SFM_N_HARM; + *nb_sfm = HVQ_THRES_SFM_24k; + *num_env_bands = *num_sfm - *nb_sfm; + *start_norm = HVQ_THRES_SFM_24k; + } + else + { + *num_sfm = SFM_N_HARM; + *nb_sfm = HVQ_THRES_SFM_32k; + *num_env_bands = *num_sfm - *nb_sfm; + *start_norm = HVQ_THRES_SFM_32k; + } + + p_sfmsize = band_len_harm; + p_sfm_start = band_start_harm; + p_sfm_end = band_end_harm; + } + else if ( hqswb_clas == HQ_GEN_SWB ) + { + *num_sfm = SFM_N_SWB; + p_sfmsize = band_len_HQ; + p_sfm_start = band_start_HQ; + p_sfm_end = band_end_HQ; + + if ( core_brate >= HQ_32k ) + { + *hq_generic_offset = HQ_GENERIC_FOFFSET_32K; + /* setting start frequency of FD BWE */ + *num_env_bands = SFM_N_STA_10k; + } + else + { + *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4; + /* setting start frequency of FD BWE */ + *num_env_bands = SFM_N_STA_8k; + } + *nb_sfm = *num_sfm; + } + else + { + /* HQ_NORMAL and HQ_TRANSIENT */ + *num_sfm = SFM_N_SWB; + *nb_sfm = *num_sfm; + *num_env_bands = SFM_N_SWB; + + p_sfmsize = band_len_HQ; + p_sfm_start = band_start_HQ; + p_sfm_end = band_end_HQ; + } + } + else if ( length == L_SPEC48k_EXT ) + { + bw_ext = 1; + p_sfmsize = band_len_HQ; + p_sfm_start = band_start_HQ; + p_sfm_end = band_end_HQ; + *num_sfm = NB_SFM; + } + else if ( length == L_SPEC16k_EXT ) + { + bw_ext = 1; + p_sfmsize = band_len_wb; + p_sfm_start = band_start_wb; + p_sfm_end = band_end_wb; + *num_sfm = SFM_N_WB; + } + else + { + *num_sfm = SFM_N_WB; + *nb_sfm = *num_sfm; + *num_env_bands = SFM_N_WB; + + p_sfmsize = band_len_wb; + p_sfm_start = band_start_wb; + p_sfm_end = band_end_wb; + } + + if ( bw_ext ) + { + for ( i = 0; i < *num_sfm; i++ ) + { + sfmsize[i] = (int16_t) ( 1.25f * p_sfmsize[i] ); + sfm_start[i] = (int16_t) ( 1.25f * p_sfm_start[i] ); + sfm_end[i] = (int16_t) ( 1.25f * p_sfm_end[i] ); + } + *nb_sfm = *num_sfm; + *num_env_bands = *num_sfm; + } + else + { + mvs2s( p_sfmsize, sfmsize, *num_sfm ); + mvs2s( p_sfm_start, sfm_start, *num_sfm ); + mvs2s( p_sfm_end, sfm_end, *num_sfm ); + } + + *numnrmibits = ( *num_env_bands - 1 ) * NORMI_BITS; + + return; +} diff --git a/lib_com/hq_tools.c b/lib_com/hq_tools.c new file mode 100644 index 0000000000..7a154a00a6 --- /dev/null +++ b/lib_com/hq_tools.c @@ -0,0 +1,1831 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------------*/ + +static void overlap_hq_bwe( const float *hq_swb_overlap_buf, float *coeff_out1, const int16_t n_swb_overlap_offset, const int16_t n_swb_overlap, const int16_t *R, const int16_t num_env_bands, const int16_t num_sfm, const int16_t *sfm_end ); + +/*--------------------------------------------------------------------------* + * hq_swb_harmonic_calc_norm_envelop() + * + * Calculate normalization envelop + *--------------------------------------------------------------------------*/ + +static void hq_swb_harmonic_calc_norm_envelop( + float *SWB_signal, /* i : input signal */ + float *envelope, /* o : output envelope */ + const int16_t L_swb_norm, /* i : length of normaliztion */ + const int16_t SWB_flength /* i : length of input signal */ +) +{ + int16_t i, lookback, env_index; + int16_t n_freq, n_lag_now, n_lag; + + lookback = L_swb_norm / 2; + env_index = 0; + for ( n_freq = 0; n_freq < lookback; n_freq++ ) + { + n_lag_now = lookback + n_freq; + + /* Apply MA filter */ + envelope[env_index] = EPSILON; + for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) + { + envelope[env_index] += (float) fabs( SWB_signal[n_lag] ); + } + env_index++; + } + + n_lag_now = L_swb_norm; + + for ( n_freq = 0; n_freq < SWB_flength - L_swb_norm; n_freq++ ) + { + /* Apply MA filter */ + envelope[env_index] = EPSILON; + for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) + { + envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); + } + env_index++; + } + + for ( n_freq = SWB_flength - L_swb_norm, i = 0; n_freq < SWB_flength - lookback; n_freq++, i++ ) + { + n_lag_now = L_swb_norm - i; + + /* Apply MA filter */ + envelope[env_index] = EPSILON; + for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) + { + envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); + } + env_index++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * noise_level_calc() + * + * Calculate noise level and limited band + *--------------------------------------------------------------------------*/ + +void limit_band_noise_level_calc( + const int16_t *wnorm, /* i : reordered norm of sub-vectors */ + int16_t *limit, /* o : highest band of bit allocation */ + const int32_t core_brate, /* i : core bitrate */ + float *noise_level /* o : noise level */ +) +{ + float ener_limit, ener_sum, fact; + int16_t i; + int16_t nb_sfm; + + nb_sfm = *limit; + ener_limit = 1e-5f; + *noise_level = 0.0f; + for ( i = 0; i < 10; i++ ) + { + ener_limit += wnorm[i]; + *noise_level += (float) abs( wnorm[i + 1] - wnorm[i] ); + } + ener_sum = ener_limit; + + for ( i = 10; i < ( nb_sfm - 1 ); i++ ) + { + ener_sum += wnorm[i]; + *noise_level += (float) abs( wnorm[i + 1] - wnorm[i] ); + } + ener_sum += wnorm[nb_sfm - 1]; + + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + fact = 0.885f; + } + else + { + fact = 0.942f; + } + + i = 9; + while ( ener_limit < ener_sum * fact && i + 1 < nb_sfm ) + { + ener_limit += wnorm[++i]; + } + *limit = i; + + /* calculate noise level for spectrum filling */ + *noise_level /= ener_sum; + if ( *noise_level < 0 ) + { + *noise_level = 0.25f; + } + + *noise_level = 0.25f - *noise_level; + + if ( *noise_level < 0.0f ) + { + *noise_level = 0.0f; + } + + return; +} + +/*--------------------------------------------------------------------------* + * build_nf_codebook() + * + * Build noise-fill codebook for HQ mode + *--------------------------------------------------------------------------*/ + +/*! r: Number of coefficients in nf codebook */ +int16_t build_nf_codebook( + const int16_t flag_32K_env_ho, /* i : Envelope attenuation hangover flag */ + const float *coeff, /* i : Coded spectral coefficients */ + const int16_t *sfm_start, /* i : Subband start indices */ + const int16_t *sfmsize, /* i : Subband widths */ + const int16_t *sfm_end, /* i : Subband end indices */ + const int16_t last_sfm, /* i : Last coded band */ + const int16_t *R, /* i : Per-band bit allocation */ + float *CodeBook, /* o : Noise-fill codebook */ + float *CodeBook_mod /* o : Densified noise-fill codebook */ +) +{ + int16_t sfm_base; + int16_t sfm; + int16_t E_cb_vec; + int16_t i, j; + int16_t cb_size; + + /* Build codebook */ + cb_size = 0; + for ( sfm = 0; sfm <= last_sfm; sfm++ ) + { + if ( R[sfm] != 0 ) + { + if ( flag_32K_env_ho ) + { + /* Build compressed (+/- 1) noise-fill codebook */ + sfm_base = sfm_start[sfm]; + for ( i = 0; i < sfmsize[sfm] / 8; i++ ) + { + E_cb_vec = 0; + for ( j = sfm_base + i * 8; j < sfm_base + ( i + 1 ) * 8; j++ ) + { + if ( coeff[j] > 0.0f ) + { + CodeBook_mod[cb_size] = 1.0f; + E_cb_vec++; + } + else if ( coeff[j] < 0.0f ) + { + CodeBook_mod[cb_size] = -1.0f; + E_cb_vec++; + } + else + { + CodeBook_mod[cb_size] = 0.0f; + } + cb_size++; + } + + if ( E_cb_vec < 2 ) + { + cb_size -= 8; + } + } + } + else + { + for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) + { + CodeBook[cb_size] = coeff[j]; + cb_size++; + } + } + } + } + + if ( flag_32K_env_ho ) + { + for ( j = 0; j < cb_size; j++ ) + { + if ( CodeBook_mod[j] != 0.0f ) + { + /* Densify codebook */ + CodeBook[j] = sign( CodeBook_mod[j] ) * ( CodeBook_mod[j] * CodeBook_mod[j] + CodeBook_mod[cb_size - j - 1] * CodeBook_mod[cb_size - j - 1] ); + } + else + { + CodeBook[j] = CodeBook_mod[cb_size - j - 1]; + } + } + } + + return cb_size; +} + +/*--------------------------------------------------------------------------* + * find_last_band() + * + * Find the last band which has bits allocated + *--------------------------------------------------------------------------*/ + +/*! r: index of last band */ +int16_t find_last_band( + const int16_t *bitalloc, /* i : bit allocation */ + const int16_t nb_sfm /* i : number of possibly coded bands */ +) +{ + int16_t sfm, core_sfm; + + core_sfm = nb_sfm - 1; + + for ( sfm = nb_sfm - 1; sfm >= 0; sfm-- ) + { + if ( bitalloc[sfm] != 0 ) + { + core_sfm = sfm; + break; + } + } + + return core_sfm; +} + +/*--------------------------------------------------------------------------* + * apply_noisefill_HQ() + * + * Inject noise in non-coded bands + *--------------------------------------------------------------------------*/ + +void apply_noisefill_HQ( + const int16_t *R, /* i : bit allocation */ + const int16_t length, /* i : input frame length */ + const int16_t flag_32K_env_ho, /* i : envelope stability hangover flag */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t last_sfm, /* i : last coded subband */ + const float *CodeBook, /* i : Noise-fill codebook */ + const float *CodeBook_mod, /* i : Densified noise-fill codebook */ + const int16_t cb_size, /* i : Codebook length */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfmsize, /* i : Subband band width */ + float *coeff /* i/o: coded/noisefilled spectrum */ +) +{ + int16_t sfm; + int16_t cb_pos; + float E_cb_vec; + float E_corr; + float cb_buff[64]; + int16_t i, j; + + if ( length >= L_FRAME32k || core_brate != HQ_32k ) + { + /* Read from codebook */ + cb_pos = 0; + + for ( sfm = 0; sfm <= last_sfm; sfm++ ) + { + if ( R[sfm] == 0 ) + { + if ( flag_32K_env_ho ) + { + E_cb_vec = 0.0f; + if ( sfm < 20 ) + { + for ( i = 0; i < sfmsize[sfm]; i++ ) + { + cb_buff[i] = CodeBook_mod[cb_pos]; + E_cb_vec += cb_buff[i] * cb_buff[i]; + cb_pos++; + if ( cb_pos >= cb_size ) + { + cb_pos = 0; + } + } + } + else + { + for ( i = 0; i < sfmsize[sfm]; i++ ) + { + cb_buff[i] = CodeBook[cb_pos]; + E_cb_vec += cb_buff[i] * cb_buff[i]; + cb_pos++; + if ( cb_pos >= cb_size ) + { + cb_pos = 0; + } + } + } + + E_corr = E_cb_vec / ( (float) sfmsize[sfm] ); + E_corr = 1.0f / (float) sqrt( E_corr ); + + for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) + { + coeff[j] = cb_buff[j - sfm_start[sfm]] * E_corr; + } + } + else + { + for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) + { + coeff[j] = CodeBook[cb_pos]; + cb_pos++; + cb_pos = ( cb_pos >= cb_size ) ? 0 : cb_pos; + } + } + } + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * harm_bwe_fine() + * + * Prepare harmonic BWE fine structure + *--------------------------------------------------------------------------*/ + +void harm_bwe_fine( + const int16_t *R, /* i : bit allocation */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t high_sfm, /* i : higher transition band to BWE */ + const int16_t num_sfm, /* i : total number of bands */ + const int16_t *norm, /* i : quantization indices for norms */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + float *coeff, /* i/o: coded/noisefilled normalized spectrum */ + float *coeff_out, /* o : coded/noisefilled spectrum */ + float *coeff_fine /* o : BWE fine structure */ +) +{ + int16_t sfm; + int16_t i; + float normq; + float SWB_signal[L_HARMONIC_EXC]; + float envelope[L_HARMONIC_EXC]; + float *src, *dst, *end; + + int16_t norm_width = 64; + + /* shape the spectrum */ + for ( sfm = 0; sfm <= last_sfm; sfm++ ) + { + if ( R[sfm] != 0 ) + { + normq = dicn[norm[sfm]]; + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff_out[i] = coeff[i] * normq; + } + } + else + { + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff_out[i] = 0.0f; + } + } + } + + /* excitation replication */ + mvr2r( coeff_out, SWB_signal, L_HARMONIC_EXC ); + calc_normal_length( HQ_CORE, coeff_out, HQ_HARMONIC, -1, &norm_width, prev_L_swb_norm ); + hq_swb_harmonic_calc_norm_envelop( SWB_signal, envelope, norm_width, L_HARMONIC_EXC ); + + /* Normalize with envelope */ + for ( i = 0; i < L_HARMONIC_EXC; i++ ) + { + SWB_signal[i] = SWB_signal[i] / envelope[i]; + } + + dst = coeff_fine + sfm_end[last_sfm]; + end = coeff_fine + sfm_end[num_sfm - 1]; + + if ( ( sfm_end[last_sfm] - sfm_end[high_sfm] ) <= L_HARMONIC_EXC - START_EXC ) + { + src = SWB_signal + START_EXC + ( sfm_end[last_sfm] - sfm_end[high_sfm] ); + } + else + { + src = SWB_signal + L_HARMONIC_EXC - 1; + } + + while ( dst < end ) + { + while ( dst < end && src < &SWB_signal[L_HARMONIC_EXC] ) + { + *dst++ = *src++; + } + src--; + + while ( dst < end && src >= &SWB_signal[START_EXC] ) + { + *dst++ = *src--; + } + src++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * hvq_bwe_fine() + * + * Prepare HVQ BWE fine structure + *--------------------------------------------------------------------------*/ + +void hvq_bwe_fine( + const int16_t last_sfm, /* i : last coded subband */ + const int16_t num_sfm, /* i : total number of bands */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *peak_idx, /* i : Peak index */ + const int16_t Npeaks, /* i : Number of peaks */ + int16_t *peak_pos, /* i/o: Peak positions */ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + float *coeff, /* i/o: coded/noisefilled normalized spectrum */ + int16_t *bwe_peaks, /* o : Positions of peaks in BWE */ + float *coeff_fine /* o : HVQ BWE fine structure */ +) +{ + int16_t i, j; + float SWB_signal[L_HARMONIC_EXC]; + float envelope[L_HARMONIC_EXC]; + float *src, *dst, *end; + int16_t *peak_dst, *peak_src; + int16_t norm_width = 64; + + /* excitation replication */ + mvr2r( coeff, SWB_signal, L_HARMONIC_EXC ); + calc_normal_length( HQ_CORE, coeff, HQ_HVQ, -1, &norm_width, prev_L_swb_norm ); + + hq_swb_harmonic_calc_norm_envelop( SWB_signal, envelope, norm_width, L_HARMONIC_EXC ); + + /* Normalize with envelope */ + for ( i = 0; i < L_HARMONIC_EXC; i++ ) + { + SWB_signal[i] = SWB_signal[i] / envelope[i]; + } + + dst = coeff_fine; + end = coeff_fine + sfm_end[num_sfm - 1] - sfm_end[last_sfm]; + + src = SWB_signal + START_EXC; + peak_src = peak_pos + START_EXC; + + for ( i = 0; i < Npeaks; i++ ) + { + if ( peak_idx[i] < L_HARMONIC_EXC ) + { + peak_pos[peak_idx[i]] = 1; + } + } + + i = L_HARMONIC_EXC - 1; + while ( i-- > 0 ) + { + if ( peak_pos[i] == 1 ) + { + break; + } + } + + if ( i < 180 ) + { + i = 180; + } + + for ( j = L_HARMONIC_EXC - 1; j > i + 1; j-- ) + { + SWB_signal[j] = 0.0f; + } + + peak_dst = bwe_peaks + sfm_end[last_sfm]; + while ( dst < end ) + { + while ( dst < end && src < &SWB_signal[L_HARMONIC_EXC] ) + { + *dst++ = *src++; + *peak_dst++ = *peak_src++; + } + peak_src--; + src--; + + while ( dst < end && src >= &SWB_signal[START_EXC] ) + { + *dst++ = *src--; + *peak_dst++ = *peak_src--; + } + peak_src++; + src++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * hq_fold_bwe() + * + * HQ mode folding BWE + *--------------------------------------------------------------------------*/ + +void hq_fold_bwe( + const int16_t last_sfm, /* i : last coded subband */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t num_sfm, /* i : Number of subbands */ + float *coeff /* i/o: coded/noisefilled normalized spectrum */ +) +{ + int16_t low_coeff; + int16_t first_coeff; + float *src, *dst, *end; + + /* Find replication range for BWE */ + low_coeff = sfm_end[last_sfm] >> 1; + src = coeff + sfm_end[last_sfm] - 1; + + first_coeff = sfm_end[last_sfm]; + dst = coeff + sfm_end[last_sfm]; + end = coeff + sfm_end[num_sfm - 1]; + + /* Generate BWE with spectral folding */ + while ( dst < end ) + { + while ( dst < end && src >= &coeff[low_coeff] ) + { + *dst++ = *src--; + } + + src++; + + while ( dst < end && src < &coeff[first_coeff] ) + { + *dst++ = *src++; + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * apply_nf_gain() + * + * Apply noise fill gain + *--------------------------------------------------------------------------*/ + +void apply_nf_gain( + const int16_t nf_idx, /* i : noise fill gain index */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t *R, /* i : bit allocation */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + float *coeff /* i/o: coded/noisefilled normalized spectrum */ +) +{ + int16_t sfm; + int16_t j; + float nf_scale; + + nf_scale = 1.0f / ( 1 << nf_idx ); + for ( sfm = 0; sfm <= last_sfm; sfm++ ) + { + if ( R[sfm] == 0 ) + { + for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) + { + /* Scale NoiseFill */ + coeff[j] = coeff[j] * nf_scale; + } + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * hq_generic_fine() + * + * Prepare HQ SWB BWE fine structure + *--------------------------------------------------------------------------*/ + +void hq_generic_fine( + float *coeff, /* i : coded/noisefilled normalized spectrum */ + const int16_t last_sfm, /* i : Last coded band */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *coeff_out1 /* o : HQ SWB BWE input */ +) +{ + int16_t sfm; + int16_t i; + float multi; + + multi = 1.0f; + for ( sfm = 0; sfm <= last_sfm; sfm++ ) + { + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + if ( coeff[i] == 0.f ) + { + coeff_out1[i] = (float) multi * ( own_random( bwe_seed ) > 0 ? 1.0f : -1.0f ) * 0.5f; + } + else + { + coeff_out1[i] = coeff[i]; + } + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * harm_bwe() + * + * HQ Harmonic BWE + *--------------------------------------------------------------------------*/ + +void harm_bwe( + const float *coeff_fine, /* i : fine structure for BWE */ + const float *coeff, /* i : coded/noisefilled normalized spectrum */ + const int16_t num_sfm, /* i : Number of subbands */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t high_sfm, /* i : higher transition band to BWE */ + const int16_t *R, /* i : bit allocation */ + const int16_t prev_hq_mode, /* i : previous hq mode */ + int16_t *norm, /* i/o: quantization indices for norms */ + float *noise_level, /* i/o: noise levels for harmonic modes */ + float *prev_noise_level, /* i/o: noise factor in previous frame */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *coeff_out, /* o : coded/noisefilled spectrum */ + const int16_t element_mode /* i : element mode */ +) +{ + int16_t i, j; + int16_t sfm; + float normq; + float norm_adj; + float E_L; + + float alfa = 0.5f; + float alpha, beta; + int16_t idx; + float fac; + float *src, *dst; + + for ( sfm = 0; sfm <= last_sfm; sfm++ ) + { + if ( R[sfm] == 0 ) + { + normq = dicn[norm[sfm]]; + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff_out[i] = coeff[i] * normq; + } + } + } + noise_level[1] = noise_level[0]; + + /* shaping the BWE spectrum further by envelopes and noise factors */ + noise_level[0] = 0.9f * prev_noise_level[0] + 0.1f * noise_level[0]; + noise_level[1] = 0.9f * prev_noise_level[1] + 0.1f * noise_level[1]; + + if ( prev_hq_mode == HQ_NORMAL || prev_hq_mode == HQ_GEN_SWB ) + { + if ( noise_level[0] < 0.25f ) + { + noise_level[0] *= 4.0f; + } + + if ( noise_level[1] < 0.25f ) + { + noise_level[1] *= 4.0f; + } + } + + E_L = EPSILON; + for ( i = last_sfm + 1; i < num_sfm; i++ ) + { + E_L = EPSILON; + for ( j = sfm_start[i]; j < sfm_end[i]; j++ ) + { + E_L += coeff_fine[j] * coeff_fine[j]; + } + E_L = (float) sqrt( ( sfm_end[i] - sfm_start[i] ) / E_L ); + + normq = dicn[norm[i]]; + norm_adj = normq * E_L; + alfa = ( i > 27 ) ? noise_level[1] : noise_level[0]; + beta = (float) sqrt( 1.0f - alfa ); + if ( element_mode > EVS_MONO ) + { + alpha = (float) sqrt( alfa ); + } + else + { + alpha = (float) sqrt( alfa ) * 0.5f; + } + + for ( sfm = sfm_start[i]; sfm < sfm_end[i]; sfm++ ) + { + coeff_out[sfm] = ( beta * coeff_fine[sfm] * norm_adj + alpha * own_random( bwe_seed ) / PCM16_TO_FLT_FAC * normq ); + } + } + + prev_noise_level[0] = noise_level[0]; + prev_noise_level[1] = noise_level[1]; + idx = 16; + src = &coeff_out[sfm_end[high_sfm] + L_HARMONIC_EXC - START_EXC]; + dst = src - 1; + + for ( i = 0; i < idx; i++ ) + { + fac = i / ( 2.0f * idx ); + *src++ *= 0.5f + fac; + *dst-- *= 0.5f + fac; + } + if ( num_sfm == 33 ) + { + set_f( &coeff_out[800], 0, 160 ); + } + return; +} + +/*--------------------------------------------------------------------------* + * HVQ_bwe() + * + * HQ HVQ BWE + *--------------------------------------------------------------------------*/ + +void hvq_bwe( + const float *coeff, /* i : coded/noisefilled spectrum */ + const float *coeff_fine, /* i : BWE fine structure */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfm_len, /* i : Subband length */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t prev_hq_mode, /* i : previous hq mode */ + const int16_t *bwe_peaks, /* i : HVQ bwe peaks */ + const int16_t bin_th, /* i : HVQ transition bin */ + const int16_t num_sfm, /* i : Number of bands */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t *R, /* i : Bit allocation */ + int16_t *norm, /* i/o: quantization indices for norms */ + float *noise_level, /* i/o: noise levels for harmonic modes */ + float *prev_noise_level, /* i/o: noise factor in previous frame */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *coeff_out /* o : coded/noisefilled spectrum */ +) +{ + int16_t i, j; + int16_t N; + float normq; + float E_L; + + int16_t bwe_noise_th = 0; + int16_t peak_band, low, high, sel_norm; + int16_t norm_ind; + float tmp_norm = 0; + int16_t idx; + float fac; + float *src, *dst; + int16_t istart, iend; + int16_t offset = sfm_end[last_sfm]; + + mvr2r( coeff, coeff_out, L_FRAME48k ); + + bwe_noise_th = bin_th + ( sfm_end[num_sfm - 1] - bin_th ) / HVQ_BWE_NOISE_BANDS; + logqnorm( &coeff_out[sfm_start[last_sfm]], &norm[last_sfm], 40, sfm_len[last_sfm], thren_HQ ); + + /* shaping the BWE spectrum further by envelopes and noise factors */ + noise_level[0] = 0.9f * prev_noise_level[0] + 0.1f * noise_level[0]; + noise_level[1] = 0.9f * prev_noise_level[1] + 0.1f * noise_level[1]; + + if ( prev_hq_mode == HQ_NORMAL || prev_hq_mode == HQ_GEN_SWB ) + { + if ( noise_level[0] < 0.25f ) + { + noise_level[0] *= 4.0f; + } + + if ( noise_level[1] < 0.25f ) + { + noise_level[1] *= 4.0f; + } + } + + norm_ind = last_sfm + 1; + + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + peak_band = 0; + E_L = EPSILON; + for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind + 1]; i++ ) + { + if ( bwe_peaks[i] ) + { + peak_band = 1; + } + E_L += coeff_fine[i - offset] * coeff_fine[i - offset]; + } + E_L = (float) sqrt( ( sfm_end[norm_ind + 1] - sfm_start[norm_ind] ) / E_L ); + + normq = 0.1f * dicn[norm[norm_ind - 1]] + 0.8f * dicn[norm[norm_ind]] + 0.1f * dicn[norm[norm_ind + 1]]; + tmp_norm = 0.1f * dicn[norm[norm_ind]] + 0.8f * dicn[norm[norm_ind + 1]] + 0.1f * dicn[norm[norm_ind + 2]]; + + istart = sfm_start[norm_ind]; + iend = istart + sfm_len[norm_ind] / 2; + for ( i = istart; i < iend; i++ ) + { + coeff_out[i] = ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ) * normq; + } + + j = 0; + N = sfm_len[norm_ind] / 2 + sfm_len[norm_ind + 1] / 2 - 1; + istart = iend; + iend = sfm_start[norm_ind + 1] + sfm_len[norm_ind + 1] / 2; + for ( i = istart; i < iend; i++ ) + { + coeff_out[i] = ( (float) ( N - j ) / N * normq + (float) j / N * tmp_norm ) * ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ); + j++; + } + + istart = iend; + iend = sfm_end[norm_ind + 1]; + for ( i = istart; i < iend; i++ ) + { + coeff_out[i] = ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ) * tmp_norm; + } + + norm_ind += 2; + } + + for ( ; norm_ind < num_sfm; norm_ind++ ) + { + if ( R[norm_ind] == 0 ) + { + peak_band = 0; + E_L = EPSILON; + + for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind]; i++ ) + { + if ( bwe_peaks[i] ) + { + peak_band = 1; + break; + } + } + + istart = sfm_start[norm_ind]; + iend = sfm_end[norm_ind]; + + if ( peak_band == 1 && norm_ind > last_sfm + 1 && norm_ind < num_sfm - 1 ) + { + istart -= sfm_len[norm_ind - 1] / 2; + iend += sfm_len[norm_ind + 1] / 2; + } + + for ( i = istart; i < iend; i++ ) + { + E_L += coeff_fine[i - offset] * coeff_fine[i - offset]; + } + E_L = (float) sqrt( ( iend - istart ) / E_L ); + + if ( peak_band ) + { + if ( norm_ind + 1 > num_sfm - 1 ) + { + normq = 0.15f * dicn[norm[norm_ind - 1]] + 0.85f * dicn[norm[norm_ind]]; + } + else + { + normq = 0.1f * dicn[norm[norm_ind - 1]] + 0.8f * dicn[norm[norm_ind]] + 0.1f * dicn[norm[norm_ind + 1]]; + } + } + else + { + low = norm_ind; + high = min( norm_ind + 1, num_sfm - 1 ); + sel_norm = norm[norm_ind - 1]; + for ( j = low; j <= high; j++ ) + { + if ( norm[j] > sel_norm ) + { + sel_norm = norm[j]; + } + } + normq = dicn[sel_norm]; + } + + for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind]; i++ ) + { + coeff_out[i] = ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ) * normq; + } + } + else /* R[norm_ind] > 0 */ + { + for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind]; i++ ) + { + coeff_out[i] = coeff[i]; /* Scaling already applied */ + } + } + } + + prev_noise_level[0] = noise_level[0]; + prev_noise_level[1] = noise_level[1]; + idx = 16; + src = &coeff_out[sfm_end[last_sfm] + L_HARMONIC_EXC - START_EXC]; + dst = src - 1; + + for ( i = 0; i < idx; i++ ) + { + fac = i / ( 2.0f * idx ); + *src++ *= 0.5f + fac; + *dst-- *= 0.5f + fac; + } + + return; +} + + +/*-------------------------------------------------------------------* + * hvq_concat_bands() + * + * Compute the band limits for concatenated bands for PVQ target signal in HVQ + *--------------------------------------------------------------------------*/ + +void hvq_concat_bands( + const int16_t pvq_bands, /* i : Number of bands in concatenated PVQ target */ + const int16_t *sel_bnds, /* i : Array of selected high bands */ + const int16_t n_sel_bnds, /* i : Number of selected high bands */ + int16_t *hvq_band_start, /* o : Band start indices */ + int16_t *hvq_band_width, /* o : Band widths */ + int16_t *hvq_band_end /* o : Band end indices */ +) +{ + int16_t k; + int16_t s; + + s = 0; + + for ( k = 0; k < pvq_bands; k++ ) + { + + if ( k >= pvq_bands - n_sel_bnds ) + { + hvq_band_start[k] = hvq_band_end[k - 1]; + hvq_band_width[k] = band_len_harm[sel_bnds[s]]; + hvq_band_end[k] = hvq_band_end[k - 1] + band_len_harm[sel_bnds[s]]; + s++; + } + else + { + hvq_band_start[k] = k * HVQ_PVQ_COEFS; + hvq_band_width[k] = HVQ_PVQ_COEFS; + hvq_band_end[k] = ( k + 1 ) * HVQ_PVQ_COEFS; + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * map_hq_generic_fenv_norm() + * + * mapping high frequency envelope to high band norm + *--------------------------------------------------------------------------*/ + +void map_hq_generic_fenv_norm( + const int16_t hqswb_clas, /* i : signal classification flag */ + const float *hq_generic_fenv, /* i : HQ GENERIC envelope */ + int16_t *ynrm, /* o : high band norm indices */ + int16_t *normqlg2, /* o : high band norm values */ + const int16_t num_env_bands, /* i : Number coded envelope bands */ + const int16_t nb_sfm, /* i : Number of envelope bands */ + const int16_t hq_generic_offset /* i : Freq offset for HQ GENERIC */ +) +{ + float env_fl[17]; + int16_t i, idx; + + set_f( env_fl, 0, 17 ); + if ( hq_generic_offset == 144 ) + { + env_fl[0] = hq_generic_fenv[1]; + env_fl[1] = hq_generic_fenv[2] * 0.6640625f + hq_generic_fenv[3] * 0.3359375f; + env_fl[2] = hq_generic_fenv[3] * 0.6640625f + hq_generic_fenv[4] * 0.3359375f; + env_fl[3] = hq_generic_fenv[4] * 0.3359375f + hq_generic_fenv[5] * 0.6640625f; + env_fl[4] = hq_generic_fenv[5] * 0.3359375f + hq_generic_fenv[6] * 0.6640625f; + env_fl[5] = hq_generic_fenv[7]; + env_fl[6] = hq_generic_fenv[8] * 0.75f + hq_generic_fenv[9] * 0.25f; + env_fl[7] = hq_generic_fenv[9] * 0.75f + hq_generic_fenv[10] * 0.25f; + env_fl[8] = hq_generic_fenv[10] * 0.25f + hq_generic_fenv[11] * 0.75f; + } + else + { + env_fl[0] = hq_generic_fenv[0] * 0.3359375f + hq_generic_fenv[1] * 0.6640625f; + env_fl[1] = hq_generic_fenv[1] * 0.3359375f + hq_generic_fenv[2] * 0.6640625f; + env_fl[2] = hq_generic_fenv[3]; + env_fl[3] = hq_generic_fenv[4] * 0.6640625f + hq_generic_fenv[5] * 0.3359375f; + env_fl[4] = hq_generic_fenv[5] * 0.6640625f + hq_generic_fenv[6] * 0.3359375f; + env_fl[5] = hq_generic_fenv[6] * 0.3359375f + hq_generic_fenv[7] * 0.6640625f; + env_fl[6] = hq_generic_fenv[7] * 0.3359375f + hq_generic_fenv[8] * 0.6640625f; + env_fl[7] = hq_generic_fenv[8] * 0.3359375f + hq_generic_fenv[9] * 0.6640625f; + env_fl[8] = hq_generic_fenv[9] * 0.3359375f + hq_generic_fenv[10] * 0.6640625f; + env_fl[9] = hq_generic_fenv[10] * 0.25f + hq_generic_fenv[11] * 0.75f; + env_fl[10] = hq_generic_fenv[12]; + env_fl[11] = hq_generic_fenv[13]; + } + + if ( hqswb_clas == HQ_GEN_FB ) + { + if ( hq_generic_offset == 144 ) + { + env_fl[9] = hq_generic_fenv[12]; + env_fl[10] = hq_generic_fenv[12] * 0.25f + hq_generic_fenv[13] * 0.75f; + env_fl[11] = hq_generic_fenv[13] * 0.5f + hq_generic_fenv[14] * 0.5f; + env_fl[12] = hq_generic_fenv[14]; + env_fl[13] = hq_generic_fenv[14]; + } + else + { + env_fl[12] = hq_generic_fenv[14]; + env_fl[13] = hq_generic_fenv[14] * 0.25f + hq_generic_fenv[15] * 0.75f; + env_fl[14] = hq_generic_fenv[15] * 0.5f + hq_generic_fenv[16] * 0.5f; + env_fl[15] = hq_generic_fenv[16]; + env_fl[16] = hq_generic_fenv[16]; + } + } + + logqnorm_2( env_fl, 40, num_env_bands, nb_sfm, ynrm + num_env_bands, normqlg2 + num_env_bands, thren_HQ ); + + for ( i = num_env_bands; i < nb_sfm; ++i ) + { + idx = min( ynrm[i] + 10, 39 ); + normqlg2[i] = dicnlg2[idx]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * update_rsubband() + * + * Update subband bit allocation + *--------------------------------------------------------------------------*/ + +static void update_rsubband( + const int16_t nb_sfm, /* i : Number of sub-bands */ + int16_t *Rsubband, /* o : Sub-bands bit allocation */ + int16_t b_add_bits_denv /* i/o: Bits to redistribute */ +) +{ + int16_t i; + + /* updating bit allocation */ + while ( b_add_bits_denv > 0 ) + { + i = nb_sfm - 1; + while ( b_add_bits_denv > 0 && i >= 0 ) + { + if ( Rsubband[i] > 24 ) + { + Rsubband[i] -= 8; + b_add_bits_denv--; + } + i--; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * get_nor_delta_hf() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: Number of bits consumed for the delta coding */ +int16_t get_nor_delta_hf( + Decoder_State *st, /* i/o: Decoder state */ + int16_t *ynrm, /* i/o: norm indices */ + int16_t *Rsubband, /* i/o: sub-band bit allocation */ + const int16_t num_env_bands, /* i : Number coded envelope bands */ + const int16_t nb_sfm, /* i : Number of envelope bands */ + const int16_t core_sfm ) /* i : index of the end band for core */ +{ + int16_t i; + int16_t delta, bitsforDelta, add_bits_denv; + + add_bits_denv = 0; + if ( core_sfm >= num_env_bands ) + { + bitsforDelta = get_next_indice( st, 2 ); + bitsforDelta += 2; + add_bits_denv += 2; + + for ( i = num_env_bands; i < nb_sfm; ++i ) + { + if ( Rsubband[i] != 0 ) + { + delta = get_next_indice( st, bitsforDelta ); + ynrm[i] += delta - ( 1 << ( bitsforDelta - 1 ) ); + + /* safety check in case of bit errors */ + if ( ynrm[i] < 0 || ynrm[i] > 39 ) + { + ynrm[i] = 39; + st->BER_detect = 1; + } + add_bits_denv += bitsforDelta; + } + } + + update_rsubband( nb_sfm, Rsubband, add_bits_denv ); + } + + return add_bits_denv; +} + + +/*-------------------------------------------------------------------* + * calc_nor_delta_hf() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: Number of bits consumed for the delta coding */ +int16_t calc_nor_delta_hf( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *t_audio, /* i : transform-domain coefficients */ + int16_t *ynrm, /* i/o: norm indices */ + int16_t *Rsubband, /* i/o: sub-band bit allocation */ + const int16_t num_env_bands, /* i : Number coded envelope bands */ + const int16_t nb_sfm, /* i : Number of envelope bands */ + const int16_t *sfmsize, /* i : band length */ + const int16_t *sfm_start, /* i : Start index of bands */ + const int16_t core_sfm /* i : index of the end band for core */ +) +{ + int16_t i; + int16_t ynrm_t[44], normqlg2_t[44]; + int16_t delta, max_delta, min_delta, bitsforDelta, add_bits_denv; + int16_t temp_num = 0; + + max_delta = -100; + calc_norm( t_audio, ynrm_t, normqlg2_t, 0, nb_sfm, sfmsize, sfm_start ); + add_bits_denv = 0; + for ( i = num_env_bands; i < nb_sfm; ++i ) + { + if ( Rsubband[i] != 0 ) + { + delta = ynrm_t[i] - ynrm[i]; + if ( delta > 0 ) + { + delta += 1; + } + else + { + delta = -delta; + } + if ( delta > max_delta ) + { + max_delta = delta; + } + } + } + if ( core_sfm >= num_env_bands ) + { + if ( max_delta < 16 ) + { + bitsforDelta = 2; + while ( max_delta >= 2 ) + { + bitsforDelta++; + max_delta >>= 1; + } + } + else + { + bitsforDelta = 5; + } + max_delta = ( 1 << ( bitsforDelta - 1 ) ) - 1; + min_delta = ( max_delta + 1 ) * ( -1 ); + + /* updating norm & storing delta norm */ + add_bits_denv = 2; + push_indice( hBstr, IND_DELTA_ENV_HQ, bitsforDelta - 2, 2 ); + for ( i = num_env_bands; i < nb_sfm; ++i ) + { + if ( Rsubband[i] != 0 ) + { + delta = ynrm_t[i] - ynrm[i]; + if ( delta > max_delta ) + { + delta = max_delta; + } + else if ( delta < min_delta ) + { + delta = min_delta; + } + push_indice( hBstr, IND_DELTA_ENV_HQ, delta - min_delta, bitsforDelta ); + ynrm[i] += delta; + add_bits_denv += bitsforDelta; + + + temp_num++; + } + } + + /* updating bit allocation */ + update_rsubband( nb_sfm, Rsubband, add_bits_denv ); + } + + return add_bits_denv; +} + +/*-------------------------------------------------------------------* + * hq_generic_bwe() + * + * HQ GENERIC BWE + *--------------------------------------------------------------------------*/ + +void hq_generic_bwe( + const int16_t HQ_mode, /* i : HQ mode */ + float *coeff_out1, /* i/o: BWE input & temporary buffer */ + const float *hq_generic_fenv, /* i : SWB frequency envelopes */ + float *coeff_out, /* o : SWB signal in MDCT domain */ + const int16_t hq_generic_offset, /* i : frequency offset for representing hq generic*/ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + const int16_t hq_generic_exc_clas, /* i : hq generic hf excitation class */ + const int16_t *sfm_end, /* i : End of bands */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t num_env_bands, /* i : Number of coded envelope bands */ + const int16_t *R /* i : Bit allocation */ +) +{ + int16_t n_swb_overlap_offset, n_swb_overlap; + float hq_swb_overlap_buf[640]; + + n_swb_overlap_offset = swb_bwe_subband[0] + hq_generic_offset; + + n_swb_overlap = sfm_end[num_env_bands - 1] - n_swb_overlap_offset; + mvr2r( &coeff_out[n_swb_overlap_offset], hq_swb_overlap_buf, n_swb_overlap + sfm_end[num_sfm - 1] - sfm_end[num_env_bands - 1] ); + + hq_generic_hf_decoding( HQ_mode, coeff_out1, hq_generic_fenv, coeff_out, hq_generic_offset, prev_L_swb_norm, hq_generic_exc_clas, R ); + + overlap_hq_bwe( hq_swb_overlap_buf, coeff_out, n_swb_overlap_offset, n_swb_overlap, R, num_env_bands, num_sfm, sfm_end ); + + return; +} + + +/*--------------------------------------------------------------------------* + * hq_wb_nf_bwe() + * + * HQ WB noisefill and BWE + *--------------------------------------------------------------------------*/ + +void hq_wb_nf_bwe( + const float *coeff, /* i : coded/noisefilled normalized spectrum */ + const int16_t is_transient, /* i : is transient flag */ + const int16_t prev_bfi, /* i : previous bad frame indicator */ + const float *normq_v, /* i : norms */ + const int16_t num_sfm, /* i : Number of subbands */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfmsize, /* i : Subband band width */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t *R, /* i : bit allocation */ + const int16_t prev_is_transient, /* i : previous transient flag */ + float *prev_normq, /* i/o: previous norms */ + float *prev_env, /* i/o: previous noise envelopes */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *prev_coeff_out, /* i/o: decoded spectrum in previous frame */ + int16_t *prev_R, /* i/o: bit allocation info. in previous frame */ + float *coeff_out /* o : coded/noisefilled spectrum */ +) +{ + int16_t i; + int16_t sfm; + int16_t total_bit; + int16_t num; + + float bitalloc_var; + float sharp; + float mean; + float peak; + float fabs_coeff_out; + float harm_para; + float alfa = 0.5; + float env; + float step; + float min_coef; + float avrg_norm; + float prev_avrg_norm; + + if ( is_transient == 0 ) + { + if ( prev_bfi == 1 ) + { + mvr2r( normq_v, prev_normq, SFM_N_WB ); + } + + /* the variance of bit allocation */ + total_bit = 0; + bitalloc_var = 0.0f; + for ( sfm = 8; sfm <= last_sfm; sfm++ ) + { + bitalloc_var += (float) abs( R[sfm] - R[sfm - 1] ); + total_bit += R[sfm]; + } + bitalloc_var = ( last_sfm > 8 && total_bit > 0 ) ? ( bitalloc_var / total_bit ) : 0; + + /* calculate the peak-average ratio of saturable subbands */ + num = 0; + sharp = EPSILON; + for ( sfm = last_sfm; sfm >= 8; sfm-- ) + { + if ( R[sfm] >= rat[sfm] * sfmsize[sfm] ) + { + peak = 0.0f; + mean = EPSILON; + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + fabs_coeff_out = (float) fabs( coeff_out[i] ); + mean += fabs_coeff_out; + if ( fabs_coeff_out > peak ) + { + peak = fabs_coeff_out; + } + } + sharp += sfmsize[sfm] * peak / mean; + num++; + } + } + + sharp = ( num != 0 ) ? 2.0f * num / sharp : 1.0f; + harm_para = sharp; + if ( last_sfm == 0 ) + { + step = 0; + } + else + { + step = 5.0f * sharp / last_sfm; + } + alfa = 2.5f; + + /* fill noise for the insaturable subbands */ + for ( sfm = 0; sfm < num_sfm; sfm++ ) + { + env = 0.0f; + if ( R[sfm] != 0 && R[sfm] < 1.5f * sfmsize[sfm] ) + { + /* calculate the energy of the undecoded coefficients */ + peak = 0.0f; + min_coef = FLT_MAX; + env = normq_v[sfm] * normq_v[sfm] * sfmsize[sfm]; + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + fabs_coeff_out = (float) fabs( coeff_out[i] ); + if ( fabs_coeff_out < min_coef && coeff_out[i] != 0 ) + { + min_coef = fabs_coeff_out; + } + if ( fabs_coeff_out > peak ) + { + peak = fabs_coeff_out; + } + env -= coeff_out[i] * coeff_out[i]; + } + + if ( env > 0 ) + { + if ( sfm == 0 ) + { + avrg_norm = normq_v[0] + normq_v[1] + normq_v[2]; + prev_avrg_norm = prev_normq[0] + prev_normq[1] + prev_normq[2]; + } + else if ( sfm == 25 ) + { + avrg_norm = normq_v[23] + normq_v[24] + normq_v[25]; + prev_avrg_norm = prev_normq[23] + prev_normq[24] + prev_normq[25]; + } + else + { + avrg_norm = normq_v[sfm - 1] + normq_v[sfm] + normq_v[sfm + 1]; + prev_avrg_norm = prev_normq[sfm - 1] + prev_normq[sfm] + prev_normq[sfm + 1]; + } + + if ( bitalloc_var > 0.3f || 4.0f * normq_v[sfm] < peak ) + { + /* calculate the noise magnitude of harmonic signal */ + env = (float) ( avrg_norm * harm_para * sqrt( env / sfmsize[sfm] ) / peak ); + } + else + { + /* calculate the noise magnitude of normal signal */ + env = sharp * (float) sqrt( env / sfmsize[sfm] ); + if ( alfa * normq_v[sfm] < peak ) + { + env *= env / peak; + } + sharp += step; + } + if ( env > 0.5f * min_coef ) + { + env = 0.5f * min_coef; + } + + if ( prev_bfi == 1 ) + { + prev_env[sfm] = env; + } + /* smooth the noise magnitudes between inter-frame */ + if ( prev_avrg_norm > 0.5f * avrg_norm && prev_avrg_norm < 2.0f * avrg_norm && prev_is_transient == 0 ) + { + env = 0.5f * env + 0.5f * prev_env[sfm]; + } + + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + if ( coeff[i] == 0 ) + { + coeff_out[i] = (float) ( own_random( bwe_seed ) ) / PCM16_TO_FLT_FAC; + coeff_out[i] *= env; + } + } + } + else + { + env = 0.0f; + } + } + else if ( R[sfm] == 0 ) + { + /* fill random noise for 0 bit subbands */ + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + if ( coeff[i] == 0 ) + { + coeff_out[i] = (float) ( own_random( bwe_seed ) ) / PCM16_TO_FLT_FAC; + coeff_out[i] *= normq_v[sfm]; + } + } + + env = normq_v[sfm]; + } + if ( sfm == SFM_N_WB - 1 && prev_is_transient == 0 && prev_normq[sfm] > 0.5f * normq_v[sfm] && prev_normq[sfm] < 2.0f * normq_v[sfm] && bitalloc_var <= 0.3f ) + { + float *p_prev_coeff_out = prev_coeff_out; + for ( i = sfm_start[sfm] + 12; i < sfm_end[sfm]; i++ ) + { + if ( fabs( coeff_out[i] ) > 4.0f * fabs( *p_prev_coeff_out ) || + fabs( coeff_out[i] ) < 0.25f * fabs( *p_prev_coeff_out ) || + ( R[sfm] * ( *prev_R ) == 0 && R[sfm] + ( *prev_R ) != 0 ) ) + { + coeff_out[i] = ( coeff_out[i] > 0 ) ? (float) ( 0.5f * ( fabs( coeff_out[i] ) + fabs( *p_prev_coeff_out ) ) ) : (float) ( -0.5f * ( fabs( coeff_out[i] ) + fabs( *p_prev_coeff_out ) ) ); + } + p_prev_coeff_out++; + } + } + + prev_env[sfm] = env; + } + } + else + { + /* fill random noise for 0 bit subbands of transient frame */ + for ( sfm = 0; sfm < num_sfm; sfm++ ) + { + if ( R[sfm] == 0 ) + { + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff_out[i] = (float) ( own_random( bwe_seed ) ) / PCM16_TO_FLT_FAC; + coeff_out[i] *= normq_v[sfm]; + } + } + } + + set_f( prev_env, 0, SFM_N_WB ); + } + + mvr2r( normq_v, prev_normq, SFM_N_WB ); + mvr2r( coeff_out + L_FRAME16k - L_HQ_WB_BWE, prev_coeff_out, L_HQ_WB_BWE ); + *prev_R = R[SFM_N_WB - 1]; + + return; +} + + +/*--------------------------------------------------------------------------* + * enforce_zero_for_min_envelope() + * + * Detect minimum level of envelope and set corresponding bands to zero + *--------------------------------------------------------------------------*/ + +void enforce_zero_for_min_envelope( + const int16_t hqswb_clas, /* i : HQ coding mode */ + const int16_t *ynrm, /* i : Envelope indices */ + float *coefsq, /* i/o: Quantized spectrum/zeroed spectrum */ + int16_t nb_sfm, /* i : Number of coded sub bands */ + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end /* i : Sub band end indices */ +) +{ + int16_t i, j; + + /* prevent non-zero output for all-zero input */ + if ( hqswb_clas != HQ_HVQ ) + { + if ( ynrm[0] == 31 ) + { + for ( j = sfm_start[0]; j < sfm_end[0]; j++ ) + { + coefsq[j] = 0.0f; + } + } + + for ( i = 1; i < nb_sfm; i++ ) + { + if ( ynrm[i] == 39 ) + { + for ( j = sfm_start[i]; j < sfm_end[i]; j++ ) + { + coefsq[j] = 0.0f; + } + } + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * overlap_hq_bwe() + * + * Overlapping at the boundary between HQ core and BWE + *--------------------------------------------------------------------------*/ + +static void overlap_hq_bwe( + const float *hq_swb_overlap_buf, /* i : spectrum from HQ core */ + float *coeff_out, /* i/o: spectrum from BWE, overlapped output */ + const int16_t n_swb_overlap_offset, /* i : starting offset of overlapping */ + const int16_t n_swb_overlap, /* i : length of overlapping */ + const int16_t *R, /* i : Bit allocation */ + const int16_t num_env_bands, /* i : Number of coded envelope bands */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t *sfm_end /* i : Band end indices */ +) +{ + int16_t i; + float step; + float weighting; + int16_t n_band; + + if ( R[num_env_bands - 1] != 0 ) + { + mvr2r( hq_swb_overlap_buf, &coeff_out[n_swb_overlap_offset], n_swb_overlap ); + } + else + { + /*weighting = 0.8f;*/ + step = 1.0f / (float) n_swb_overlap; + weighting = 1.0f; + for ( i = 0; i < n_swb_overlap; i++ ) + { + coeff_out[n_swb_overlap_offset + i] = hq_swb_overlap_buf[i] * weighting + coeff_out[n_swb_overlap_offset + i] * ( 1.0f - weighting ); + weighting -= step; + } + } + + + for ( n_band = num_env_bands; n_band < num_sfm; n_band++ ) + { + if ( R[n_band] != 0 ) + { + for ( i = sfm_end[n_band - 1]; i < sfm_end[n_band]; ++i ) + { + coeff_out[i] = hq_swb_overlap_buf[i - n_swb_overlap_offset]; + } + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * apply_envelope() + * + * Apply spectral envelope with envelope adjustments + *--------------------------------------------------------------------------*/ + +void apply_envelope( + const float *coeff, /* i/o: Coded/noisefilled normalized spectrum */ + const int16_t *norm, /* i : Envelope */ + const float *norm_adj, /* i : Envelope adjustment */ + const int16_t num_sfm, /* i : Total number of bands */ + const int16_t last_sfm, /* i : Last coded band */ + const int16_t HQ_mode, /* i : HQ mode */ + const int16_t length, /* i : Frame length */ + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end, /* i : Sub band end indices */ + float *normq_v, /* o : Envelope with adjustment */ + float *coeff_out, /* o : coded/noisefilled spectrum */ + float *coeff_out1 /* o : noisefilled spectrum for HQ SWE BWE */ +) +{ + int16_t i; + int16_t sfm; + float normq; + int16_t len; + + len = num_sfm; + if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) + { + len = last_sfm + 1; + } + + if ( length == L_FRAME16k ) + { + for ( sfm = 0; sfm < num_sfm; sfm++ ) + { + normq_v[sfm] = dicn[norm[sfm]]; + normq = normq_v[sfm] * norm_adj[sfm]; + + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff_out[i] = coeff[i] * normq; + } + } + } + else + { + for ( sfm = 0; sfm < len; sfm++ ) + { + normq_v[sfm] = dicn[norm[sfm]]; + normq_v[sfm] *= norm_adj[sfm]; + + normq = normq_v[sfm]; + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff_out[i] = coeff[i] * normq; + } + } + + if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) + { + for ( sfm = 0; sfm <= last_sfm; sfm++ ) + { + normq = normq_v[sfm]; + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff_out1[i] = coeff_out1[i] * normq; + } + } + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * apply_envelope_enc() + * + * Apply spectral envelope without envelope adjustments and noisefill + *--------------------------------------------------------------------------*/ + +void apply_envelope_enc( + float *coeff, /* i/o: Normalized/scaled normalized spectrum */ + const int16_t *norm, /* i : Envelope */ + const int16_t num_sfm, /* i : Total number of bands */ + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end /* i : Sub band end indices */ +) +{ + int16_t sfm; + int16_t i; + float normq; + + for ( sfm = 0; sfm < num_sfm; sfm++ ) + { + normq = dicn[norm[sfm]]; + + for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) + { + coeff[i] *= normq; + } + } + + return; +} + + +/*----------------------------------------------------------------------------- + * floating_point_add() + * + * Add two floating point numbers in integer representation: x <- x + y + * Ported from BASOP code to ensure interoperability + *----------------------------------------------------------------------------*/ + +void floating_point_add( + int32_t *mx, /* i/o: mantissa of the addend Q31 */ + int16_t *ex, /* i/o: exponent of the addend Q0 */ + const int32_t my, /* i : mantissa of the adder Q31 */ + const int16_t ey /* i : exponent of the adder Q0 */ +) +{ + Word32 accX, accY; + Word16 align, expo; + + accX = *mx >> 1; + accY = my >> 1; + align = *ex - ey; + if ( align < 0 ) + { + if ( align > -32 ) /* If align < -32, (accY >> (-align) = 0 */ + { + accX = accX + ( accY >> ( -align ) ); + } + } + else + { + if ( align < 32 ) /* If align > 32, (accX >> align) = 0 */ + { + accX = accY + ( accX >> align ); + } + else + { + accX = accY; + } + *ex = ey; + } + expo = norm_l( accX ); /* aligned to BASOP */ + *mx = accX << expo; + *ex = *ex + expo - 1; + + return; +} diff --git a/lib_com/hvq_pvq_bitalloc.c b/lib_com/hvq_pvq_bitalloc.c new file mode 100644 index 0000000000..9357a37964 --- /dev/null +++ b/lib_com/hvq_pvq_bitalloc.c @@ -0,0 +1,190 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------*/ +/* Function hvq_pvq_bitalloc */ +/* ~~~~~~~~~~~~~~~~~~~~~~~~ */ +/* */ +/* Calculate the number of PVQ bands to code and allocate bits based on */ +/* the number of available bits. */ +/*--------------------------------------------------------------------------*/ + +/*! r: Number of low frequency bands */ +int16_t hvq_pvq_bitalloc( + int16_t num_bits, /* i/o: Number of available bits (including gain bits)*/ + const int32_t core_brate, /* i : core bitrate */ + const int16_t bwidth, /* i : Encoded bandwidth */ + const int16_t *ynrm, /* i : Envelope coefficients */ + const int32_t manE_peak, /* i : Peak energy mantissa */ + const int16_t expE_peak, /* i : Peak energy exponent */ + int16_t *Rk, /* o : bit allocation for concatenated vector */ + int16_t *R, /* i/o: Global bit allocation */ + int16_t *sel_bands, /* o : Selected bands for encoding */ + int16_t *n_sel_bands /* o : No. of selected bands for encoding */ +) +{ + int16_t num_bands, k, band_max_bits; + int16_t k_max; + int16_t k_start; + float E_max; + int32_t E_max5; + int16_t expo; + int16_t align; + int32_t acc; + float tmp; + int32_t env_mean; + int16_t reciprocal; + int16_t num_sfm; + int16_t bit_cost; + + if ( bwidth == FB ) + { + num_sfm = SFM_N_HARM_FB; + } + else + { + num_sfm = SFM_N_HARM; + } + + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + band_max_bits = HVQ_BAND_MAX_BITS_24k; + k_start = HVQ_THRES_SFM_24k; + if ( bwidth == FB ) + { + reciprocal = 2731; + } + else + { + reciprocal = 3277; + } + } + else + { + band_max_bits = HVQ_BAND_MAX_BITS_32k; + k_start = HVQ_THRES_SFM_32k; + if ( bwidth == FB ) + { + reciprocal = 3641; + } + else + { + reciprocal = 4681; + } + } + + num_bands = num_bits / band_max_bits; + num_bits = num_bits - num_bands * band_max_bits; + + if ( num_bits >= HVQ_NEW_BAND_BIT_THR ) + { + num_bands++; + } + else + { + num_bits += band_max_bits; + } + + /* safety check in case of bit errors */ + if ( num_bands < 1 ) + { + return 0; + } + + *n_sel_bands = 0; + env_mean = 0; + E_max = 0; + k_max = k_start; + for ( k = k_start; k < num_sfm; k++ ) + { + tmp = dicn[ynrm[k]]; + env_mean += ynrm[k]; + if ( tmp > E_max ) + { + E_max = tmp; + k_max = k; + } + } + env_mean = 2 * ( env_mean * reciprocal ); + + if ( band_len_harm[k_max] == 96 ) + { + bit_cost = 61; + } + else + { + QuantaPerDsDirac( band_len_harm[k_max], 1, hBitsN, &bit_cost ); + } + + + expo = max( 0, ynrm[k_max] - 1 ) >> 1; + E_max5 = E_max5_tbl[ynrm[k_max]]; + align = expo - expE_peak; + align = align + ( 19 - 14 ) - ( 31 - 2 * 12 ); + if ( align < 0 ) + { + acc = E_max5 - ( manE_peak >> -align ); + } + else + { + acc = ( E_max5 >> align ) - manE_peak; + } + if ( acc > 0 && ( ( env_mean - ( ynrm[k_max] << 16 ) ) > 0x30000L ) && num_bands > 1 && ( num_bits - HVQ_PVQ_GAIN_BITS ) << 3 >= bit_cost ) + { + sel_bands[*n_sel_bands] = k_max; + ( *n_sel_bands )++; + R[k_max] = 1; /* Mark that the band has been encoded for fill_spectrum */ + } + + /* Allocate bits */ + for ( k = 0; k < num_bands - 1; k++ ) + { + Rk[k] = band_max_bits - HVQ_PVQ_GAIN_BITS; + } + Rk[num_bands - 1] = num_bits - HVQ_PVQ_GAIN_BITS; + + return num_bands; +} diff --git a/lib_com/ifft_rel.c b/lib_com/ifft_rel.c new file mode 100644 index 0000000000..d0200f87be --- /dev/null +++ b/lib_com/ifft_rel.c @@ -0,0 +1,290 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define N_MAX_FFT 1024 + +/*---------------------------------------------------------------------* + * ifft_rel() + * + * Calculate the inverse FFT of a real signal + * + * Based on the FORTRAN code from the article "Real-valued Fast Fourier Transform Algorithms" + * by Sorensen, ... in IEEE Trans. on ASSP, Vol. ASSP-35, No. June 6th 1987. + * + * Input: the io[] signal containing the spectrum in the following order : + * + * Re[0], Re[1], .. Re[n/2], Im[n/2-1], .. Im[1] + *---------------------------------------------------------------------*/ + +void ifft_rel( + float io[], /* i/o: input/output vector */ + const int16_t n, /* i : vector length */ + const int16_t m /* i : log2 of vector length */ +) +{ + int16_t i, j, k; + int16_t step; + int16_t n2, n4, n8, i0; + int16_t is, id; + float *x, *xi0, *xi1, *xi2, *xi3, *xi4, *xup1, *xdn6, *xup3, *xdn8; + float xt; + float r1; + float t1, t2, t3, t4, t5; + float cc1, cc3, ss1, ss3; + const float *s, *s3, *c, *c3; + const int16_t *idx; + float temp[512]; + float n_inv; + + n_inv = 1.0f / n; + + /*-----------------------------------------------------------------* + * IFFT + *-----------------------------------------------------------------*/ + + x = &io[-1]; + n2 = 2 * n; + for ( k = 1; k < m; k++ ) + { + is = 0; + id = n2; + n2 = n2 >> 1; + n4 = n2 >> 2; + n8 = n4 >> 1; + while ( is < n - 1 ) + { + xi1 = x + is + 1; + xi2 = xi1 + n4; + xi3 = xi2 + n4; + xi4 = xi3 + n4; + + for ( i = is; i < n; i += id ) + { + t1 = *xi1 - *xi3; + *xi1 += *xi3; + *xi2 = 2.0f * *xi2; + *xi3 = t1 - 2.0f * *xi4; + *xi4 = t1 + 2.0f * *xi4; + if ( n4 != 1 ) + { + t1 = ( *( xi2 + n8 ) - *( xi1 + n8 ) ) * INV_SQRT_2; + t2 = ( *( xi4 + n8 ) + *( xi3 + n8 ) ) * INV_SQRT_2; + + *( xi1 + n8 ) += *( xi2 + n8 ); + *( xi2 + n8 ) = *( xi4 + n8 ) - *( xi3 + n8 ); + *( xi3 + n8 ) = (float) ( 2.0f * ( -t2 - t1 ) ); + *( xi4 + n8 ) = (float) ( 2.0f * ( -t2 + t1 ) ); + } + xi1 += id; + xi2 += id; + xi3 += id; + xi4 += id; + } + is = 2 * id - n2; + id = 4 * id; + } + step = N_MAX_FFT / n2; + + s = sincos_t_ext + step; + c = s + N_MAX_FFT / 4; + s3 = sincos_t_ext + 3 * step; + c3 = s3 + N_MAX_FFT / 4; + for ( j = 2; j <= n8; j++ ) + { + cc1 = *c; + ss1 = *s; + cc3 = *c3; + ss3 = *s3; + + is = 0; + id = 2 * n2; + + c += step; + s += step; + + c3 += 3 * step; + s3 += 3 * step; + while ( is < n - 1 ) + { + xup1 = x + j + is; + xup3 = xup1 + 2 * n4; + xdn6 = xup3 - 2 * j + 2; + xdn8 = xdn6 + 2 * n4; + + for ( i = is; i < n; i += id ) + { + t1 = *xup1 - *xdn6; + *xup1 = *xup1 + *xdn6; + xup1 += n4; + xdn6 -= n4; + + t2 = *xdn6 - *xup1; + *xdn6 = *xup1 + *xdn6; + + xdn6 += n4; + t3 = *xdn8 + *xup3; + *xdn6 = *xdn8 - *xup3; + + xup3 += n4; + xdn8 -= n4; + + t4 = *xup3 + *xdn8; + *xup1 = *xup3 - *xdn8; + + t5 = t1 - t4; + t1 = t1 + t4; + t4 = t2 - t3; + t2 = t2 + t3; + *xup3 = t1 * cc3 - t2 * ss3; + xup3 -= n4; + *xup3 = t5 * cc1 + t4 * ss1; + *xdn8 = -t4 * cc1 + t5 * ss1; + + xdn8 += n4; + *xdn8 = t2 * cc3 + t1 * ss3; + + xup1 -= n4; + xup1 += id; + xup3 += id; + xdn6 += id; + xdn8 += id; + } + is = 2 * id - n2; + id = 4 * id; + } + } + } + + /*-----------------------------------------------------------------* + * Length two butterflies + *-----------------------------------------------------------------*/ + + is = 1; + id = 4; + while ( is < n ) + { + xi0 = x + is; + xi1 = xi0 + 1; + + for ( i0 = is; i0 <= n; i0 += id ) + { + r1 = *xi0; + *xi0 = r1 + *xi1; + *xi1 = r1 - *xi1; + xi0 += id; + xi1 += id; + } + is = 2 * id - 1; + id = 4 * id; + } + + /*-----------------------------------------------------------------* + * Digit reverse counter + *-----------------------------------------------------------------*/ + + idx = fft256_read_indexes; + xi0 = temp - 1; + if ( n == 128 ) + { + for ( i = 0; i < n; i++ ) + { + j = *idx++; + temp[i] = x[1 + ( j >> 1 )]; + } + } + else if ( n == 256 ) + { + for ( i = 0; i < n; i++ ) + { + j = *idx++; + temp[i] = x[1 + j]; + } + } + else if ( n == 512 ) + { + for ( i = 0; i < 256; i++ ) + { + j = *idx++; + temp[i] = x[1 + 2 * j]; + temp[i + 256] = x[2 + 2 * j]; + } + } + else + { + xi0 = x; + j = 1; + for ( i = 1; i < n; i++ ) + { + if ( i < j ) + { + xt = x[j]; + x[j] = x[i]; + x[i] = xt; + } + k = n >> 1; + while ( k < j ) + { + j = j - k; + k = k >> 1; + } + j = j + k; + } + } + + /*-----------------------------------------------------------------* + * Normalization + *-----------------------------------------------------------------*/ + + for ( i = 1; i <= n; i++ ) + { + x[i] = xi0[i] * n_inv; + } + + return; +} diff --git a/lib_com/igf_base.c b/lib_com/igf_base.c new file mode 100644 index 0000000000..70b202770a --- /dev/null +++ b/lib_com/igf_base.c @@ -0,0 +1,741 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * IGF_ApplyTransFac() + * + * + *---------------------------------------------------------------------*/ + +/*! r: | multiplication factor */ +int16_t IGF_ApplyTransFac( + const int16_t val, /* i : Q15 | input value for multiplication, Q15 */ + const float transFac /* i : Q14 | multiplicator for variable val, Q14: 1.25f=0x5000, 1.0f=0x4000, 0.5f=0x2000 */ +) +{ + int16_t ret = val; + + if ( transFac != 1.f ) + { + ret = (int16_t) round_f( val * transFac ); + ret += ( ret & 1 ); + } + + return ret; +} + + +/*---------------------------------------------------------------------* + * IGF_MapBitRateToIndex() + * + * maps a given bitrate to the IGF_BITRATE index + *---------------------------------------------------------------------*/ + +/*! r: bitrate index */ +int16_t IGF_MapBitRateToIndex( + const int32_t brate, /* i : bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : element mode */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + int16_t bitRateIndex = IGF_BITRATE_UNKNOWN; + + /* Stereo/CPE modes */ + if ( element_mode > IVAS_SCE ) + { + switch ( bwidth ) + { + case IGF_MODE_WB: + if ( brate <= IVAS_13k2 && rf_mode == 1 ) + { + bitRateIndex = IGF_BITRATE_RF_WB_13200; + } + else if ( brate <= ACELP_9k60 ) + { + bitRateIndex = IGF_BITRATE_WB_13200_CPE; + } + else if ( brate <= IVAS_13k2 ) + { + bitRateIndex = IGF_BITRATE_WB_16400_CPE; + } + break; + case IGF_MODE_SWB: + /* DFT and TD Stereo bitrates */ + if ( brate <= ACELP_9k60 ) + { + bitRateIndex = IGF_BITRATE_SWB_13200_CPE; + } + else if ( brate <= IVAS_13k2 ) + { + if ( rf_mode == 1 ) + { + bitRateIndex = IGF_BITRATE_RF_SWB_13200; + } + else + { + bitRateIndex = IGF_BITRATE_SWB_16400_CPE; + } + } + else if ( brate <= IVAS_16k4 ) + { + bitRateIndex = IGF_BITRATE_SWB_24400_CPE; + } + else if ( brate <= IVAS_24k4 ) + { + bitRateIndex = IGF_BITRATE_SWB_32000_CPE; + } + else if ( brate <= IVAS_32k ) + { + bitRateIndex = IGF_BITRATE_SWB_32000; + } + /* MDCT Stereo bitrates */ + else if ( brate <= IVAS_48k ) + { + bitRateIndex = IGF_BITRATE_SWB_48000_CPE; + } + else if ( brate <= IVAS_64k ) + { + bitRateIndex = IGF_BITRATE_SWB_64000_CPE; + } + else if ( brate <= IVAS_80k ) + { + bitRateIndex = IGF_BITRATE_SWB_80000_CPE; + } + else if ( brate <= IVAS_96k ) + { + bitRateIndex = IGF_BITRATE_SWB_96000_CPE; + } + break; + case IGF_MODE_FB: + /* DFT and TD Stereo bitrates */ + if ( brate <= IVAS_16k4 ) + { + bitRateIndex = IGF_BITRATE_FB_24400_CPE; + } + else if ( brate <= IVAS_24k4 ) + { + bitRateIndex = IGF_BITRATE_FB_32000_CPE; + } + else if ( brate <= IVAS_32k ) + { + bitRateIndex = IGF_BITRATE_FB_32000; + } + /* MDCT Stereo bitrates */ + else if ( brate <= IVAS_48k ) + { + bitRateIndex = IGF_BITRATE_FB_48000_CPE; + } + else if ( brate <= IVAS_64k ) + { + bitRateIndex = IGF_BITRATE_FB_64000_CPE; + } + else if ( brate <= IVAS_80k ) + { + bitRateIndex = IGF_BITRATE_FB_80000_CPE; + } + else if ( brate <= IVAS_96k ) + { + bitRateIndex = IGF_BITRATE_FB_96000_CPE; + } + else if ( brate <= IVAS_128k ) + { + bitRateIndex = IGF_BITRATE_FB_128000_CPE; + } + break; + } + } + /* SCE modes: use tunings done for DFT stereo bitrates also for according SCE bitrates, otherwise same config as mono modes */ + else if ( element_mode == IVAS_SCE ) + { + switch ( bwidth ) + { + case IGF_MODE_WB: + if ( brate <= IVAS_13k2 && rf_mode == 1 ) + { + bitRateIndex = IGF_BITRATE_RF_WB_13200; + } + else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */ + { + bitRateIndex = IGF_BITRATE_WB_9600; + } + break; + case IGF_MODE_SWB: + if ( brate <= ACELP_9k60 ) + { + bitRateIndex = IGF_BITRATE_SWB_13200_CPE; + } + else if ( brate <= IVAS_13k2 ) + { + if ( rf_mode == 1 ) + { + bitRateIndex = IGF_BITRATE_RF_SWB_13200; + } + else + { + bitRateIndex = IGF_BITRATE_SWB_16400_CPE; + } + } + else if ( brate <= IVAS_16k4 ) + { + bitRateIndex = IGF_BITRATE_SWB_24400_CPE; + } + else if ( brate <= IVAS_24k4 ) + { + bitRateIndex = IGF_BITRATE_SWB_32000_CPE; + } + else if ( brate <= IVAS_32k ) + { + bitRateIndex = IGF_BITRATE_SWB_32000; + } + else if ( brate <= IVAS_48k ) + { + bitRateIndex = IGF_BITRATE_SWB_48000; + } + else if ( brate <= IVAS_64k ) + { + bitRateIndex = IGF_BITRATE_SWB_64000; + } + break; + case IGF_MODE_FB: + if ( brate <= IVAS_16k4 ) + { + bitRateIndex = IGF_BITRATE_FB_24400_CPE; + } + else if ( brate <= IVAS_24k4 ) + { + bitRateIndex = IGF_BITRATE_FB_32000_CPE; + } + else if ( brate <= IVAS_32k ) + { + bitRateIndex = IGF_BITRATE_FB_32000; + } + else if ( brate <= IVAS_48k ) + { + bitRateIndex = IGF_BITRATE_FB_48000; + } + else if ( brate <= IVAS_64k ) + { + bitRateIndex = IGF_BITRATE_FB_64000; + } + else if ( brate <= IVAS_96k ) + { + bitRateIndex = IGF_BITRATE_FB_96000; + } + else if ( brate <= IVAS_128k ) + { + bitRateIndex = IGF_BITRATE_FB_128000; + } + break; + } + } + /* EVS mono */ + else + { + switch ( bwidth ) + { + case IGF_MODE_WB: + if ( brate <= ACELP_13k20 && rf_mode == 1 ) + { + bitRateIndex = IGF_BITRATE_RF_WB_13200; + } + else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */ + { + bitRateIndex = IGF_BITRATE_WB_9600; + } + break; + case IGF_MODE_SWB: + if ( brate <= ACELP_9k60 ) + { + bitRateIndex = IGF_BITRATE_SWB_9600; + } + else if ( brate <= ACELP_13k20 ) + { + if ( rf_mode == 1 ) + { + bitRateIndex = IGF_BITRATE_RF_SWB_13200; + } + else + { + bitRateIndex = IGF_BITRATE_SWB_13200; + } + } + else if ( brate <= ACELP_16k40 ) + { + bitRateIndex = IGF_BITRATE_SWB_16400; + } + else if ( brate <= ACELP_24k40 ) + { + bitRateIndex = IGF_BITRATE_SWB_24400; + } + else if ( brate <= ACELP_32k ) + { + bitRateIndex = IGF_BITRATE_SWB_32000; + } + else if ( brate <= ACELP_48k ) + { + bitRateIndex = IGF_BITRATE_SWB_48000; + } + else if ( brate <= ACELP_64k ) + { + bitRateIndex = IGF_BITRATE_SWB_64000; + } + break; + case IGF_MODE_FB: + if ( brate <= ACELP_16k40 ) + { + bitRateIndex = IGF_BITRATE_FB_16400; + } + else if ( brate <= ACELP_24k40 ) + { + bitRateIndex = IGF_BITRATE_FB_24400; + } + else if ( brate <= ACELP_32k ) + { + bitRateIndex = IGF_BITRATE_FB_32000; + } + else if ( brate <= ACELP_48k ) + { + bitRateIndex = IGF_BITRATE_FB_48000; + } + else if ( brate <= ACELP_64k ) + { + bitRateIndex = IGF_BITRATE_FB_64000; + } + else if ( brate <= HQ_96k ) + { + bitRateIndex = IGF_BITRATE_FB_96000; + } + else if ( brate <= HQ_128k ) + { + bitRateIndex = IGF_BITRATE_FB_128000; + } + break; + } + } + + return bitRateIndex; +} + + +/*---------------------------------------------------------------------* + * IGF_gridSetUp() + * + * IGF grid setup + *---------------------------------------------------------------------*/ + +static void IGF_gridSetUp( + H_IGF_GRID hGrid, /* o : IGF grid handle */ + int16_t bitRateIndex, /* i : IGF bitrate index */ + const int32_t sampleRate, /* i : sample rate */ + int16_t frameLength, /* i : frame length */ + const float transFac, /* i : transFac */ + const int16_t igfMinFq /* i : IGF minimum frequency indicating lower start frequency for copy up */ +) +{ + int16_t t, k; + int16_t sfb; + int16_t swb_offset_len; + const int16_t *swb_offset; + float bandwidth; + const int16_t *igf_tile_offset; + + /* inits */ + swb_offset = NULL; + swb_offset_len = 0; + if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_SWB_48000_CPE ) + { + bitRateIndex = IGF_BITRATE_SWB_48000_CPE_TCX10; + } + else if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_FB_48000_CPE ) + { + bitRateIndex = IGF_BITRATE_FB_48000_CPE_TCX10; + } + + if ( bitRateIndex != IGF_BITRATE_UNKNOWN ) + { + swb_offset = &swb_offset_LB_new[bitRateIndex][1]; + swb_offset_len = swb_offset_LB_new[bitRateIndex][0]; + mvr2r( &igf_whitening_TH[bitRateIndex][0][0], &hGrid->whiteningThreshold[0][0], IGF_MAX_TILES * 2 ); + } + else + { + assert( 0 ); + } + + for ( sfb = 0; sfb < swb_offset_len; sfb++ ) + { + hGrid->swb_offset[sfb] = IGF_ApplyTransFac( swb_offset[sfb], transFac ); + } + for ( sfb = swb_offset_len; sfb < IGF_MAX_SFB; sfb++ ) + { + hGrid->swb_offset[sfb] = 0; + } + + hGrid->infoIsRefined = 0; + frameLength = IGF_ApplyTransFac( frameLength, transFac ); + bandwidth = (float) sampleRate / 2.0f / (float) frameLength; + hGrid->swb_offset_len = swb_offset_len; + hGrid->startSfb = 0; + hGrid->stopSfb = hGrid->swb_offset_len - 1; + hGrid->startLine = hGrid->swb_offset[hGrid->startSfb]; + hGrid->stopLine = hGrid->swb_offset[hGrid->stopSfb]; + hGrid->startFrequency = (int16_t) round_f( bandwidth * hGrid->startLine ); + hGrid->stopFrequency = (int16_t) round_f( bandwidth * hGrid->stopLine ); + hGrid->minSrcSubband = (int16_t) round_f( ( igfMinFq * ( frameLength ) ) / ( sampleRate >> 1 ) ); + hGrid->minSrcSubband += hGrid->minSrcSubband % 2; + hGrid->minSrcFrequency = (int16_t) round_f( bandwidth * hGrid->minSrcSubband ); + hGrid->infoGranuleLen = frameLength; + hGrid->sfbWrap[0] = 0; + hGrid->tile[0] = hGrid->startLine; + + igf_tile_offset = &igf_tile_offset_table[bitRateIndex][1]; + hGrid->nTiles = igf_tile_offset_table[bitRateIndex][0]; + hGrid->tile[0] = hGrid->startLine; + hGrid->sfbWrap[0] = 0; + for ( k = 0; k < hGrid->nTiles; k++ ) + { + hGrid->sfbWrap[k + 1] = igf_tile_offset[2 * k]; + hGrid->sbWrap[k] = hGrid->minSrcSubband + IGF_ApplyTransFac( igf_tile_offset[2 * k + 1], transFac ); + hGrid->tile[k + 1] = hGrid->swb_offset[igf_tile_offset[2 * k]]; + } + for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ ) + { + hGrid->tile[t] = 0; + hGrid->sbWrap[t - 1] = 0; + hGrid->sfbWrap[t] = 0; + } + + /* adapt level envelope: */ + switch ( bitRateIndex ) + { + case IGF_BITRATE_RF_WB_13200: + case IGF_BITRATE_WB_9600: + case IGF_BITRATE_WB_13200_CPE: + case IGF_BITRATE_WB_16400_CPE: + hGrid->gFactor = 0.800f; + hGrid->fFactor = 0.70f; + hGrid->lFactor = 0.60f; + break; + case IGF_BITRATE_SWB_13200: + case IGF_BITRATE_SWB_16400_CPE: + case IGF_BITRATE_FB_16400: + case IGF_BITRATE_SWB_16400: + case IGF_BITRATE_FB_24400_CPE: + case IGF_BITRATE_SWB_24400_CPE: + hGrid->gFactor = 0.930f; + hGrid->fFactor = 0.20f; + hGrid->lFactor = 0.85f; + break; + case IGF_BITRATE_FB_24400: + case IGF_BITRATE_SWB_24400: + case IGF_BITRATE_FB_32000_CPE: + case IGF_BITRATE_SWB_32000_CPE: + case IGF_BITRATE_FB_32000: + case IGF_BITRATE_SWB_32000: + case IGF_BITRATE_SWB_48000_CPE: + case IGF_BITRATE_SWB_64000_CPE: + hGrid->gFactor = 0.965f; + hGrid->fFactor = 0.20f; + hGrid->lFactor = 0.85f; + break; + case IGF_BITRATE_FB_48000: + case IGF_BITRATE_SWB_48000: + case IGF_BITRATE_FB_64000: + case IGF_BITRATE_SWB_64000: + case IGF_BITRATE_SWB_80000_CPE: + case IGF_BITRATE_SWB_96000_CPE: + hGrid->gFactor = 1.000f; + hGrid->fFactor = 0.20f; + hGrid->lFactor = 1.000f; + break; + case IGF_BITRATE_SWB_9600: + case IGF_BITRATE_SWB_13200_CPE: + case IGF_BITRATE_RF_SWB_13200: + default: + hGrid->gFactor = 1.000f; + hGrid->fFactor = 0.00f; + hGrid->lFactor = 1.000f; + } + + for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ ) + { + hGrid->tile[t] = 0; + hGrid->sbWrap[t - 1] = 0; + hGrid->sfbWrap[t] = 0; + } + + return; +} + + +/*---------------------------------------------------------------------* + * IGFCommonFuncsIGFConfiguration() + * + * changes the IGF configuration + *---------------------------------------------------------------------*/ + +/*! r: error value: 0 -> error, 1 -> ok */ +int16_t IGFCommonFuncsIGFConfiguration( + const int32_t total_brate, /* i : bitrate in bs e.g. 9600 for 9.6kbs */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : element mode */ + H_IGF_INFO hIGFInfo, /* o : IGF info handle */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + H_IGF_GRID hGrid; + int16_t retValue; + int32_t sampleRate; + int16_t frameLength; + int16_t igfMinFq; + int16_t maxHopsize; + + retValue = 0; /* bitrate index is unknown -> error! */ + + /* interface call for reading in settings */ + hIGFInfo->bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode ); + + if ( hIGFInfo->bitRateIndex != IGF_BITRATE_UNKNOWN ) + { + retValue = 1; /* no error */ + + /* mapping to local values */ + sampleRate = igfMode[hIGFInfo->bitRateIndex].sampleRate; + frameLength = igfMode[hIGFInfo->bitRateIndex].frameLength; + igfMinFq = igfMode[hIGFInfo->bitRateIndex].igfMinFq; + maxHopsize = igfMode[hIGFInfo->bitRateIndex].maxHopsize; + + /* basic information */ + hIGFInfo->sampleRate = sampleRate; + hIGFInfo->frameLength = frameLength; + hIGFInfo->maxHopsize = maxHopsize; + hIGFInfo->nfSeedBuf[0] = 0; + hIGFInfo->nfSeedBuf[1] = 0; + hIGFInfo->nfSeed = &hIGFInfo->nfSeedBuf[0]; + + /* set up regular IGF grid for TCX 20 (transfac = 1.f) */ + hGrid = &hIGFInfo->grid[IGF_GRID_LB_NORM]; + IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.00f, igfMinFq ); + + /* set up IGF grid for CELP->TCX 20 transitions (transfac = 1.25) */ + hGrid = &hIGFInfo->grid[IGF_GRID_LB_TRAN]; + IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.25f, igfMinFq ); + + /* set up IGF grid for TCX 10 (transfac = 0.5) */ + hGrid = &hIGFInfo->grid[IGF_GRID_LB_SHORT]; + IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 0.50f, igfMinFq ); + } + + return retValue; +} + + +/*---------------------------------------------------------------------* + * IGFCommonFuncsIGFGetCFTables() + * + * selects cumulative frequency tables and offsets for the IGF SCF arithmetic coder + *---------------------------------------------------------------------*/ + +/*! r: error value: 0 -> error, 1 -> ok */ +int16_t IGFCommonFuncsIGFGetCFTables( + const int32_t total_brate, /* i : bitrate in bs e.g. 9600 for 9.6kbs */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : element mode */ + const int16_t rf_mode, /* i : flag to signal the RF mode */ + const uint16_t **cf_se00, /* o : CF table for t == 0 and f == 0 */ + const uint16_t **cf_se01, /* o : CF table for t == 0 and f == 1 */ + int16_t *cf_off_se01, /* o : offset for CF table above */ + const uint16_t **cf_se02, /* o : CF tables for t == 0 and f >= 2 */ + const int16_t **cf_off_se02, /* o : offsets for CF tables above */ + const uint16_t **cf_se10, /* o : CF table for t == 1 and f == 0 */ + int16_t *cf_off_se10, /* o : offset for CF table above */ + const uint16_t **cf_se11, /* o : CF tables for t == 1 and f >= 1 */ + const int16_t **cf_off_se11 /* o : offsets for CF tables above */ +) +{ + int16_t retValue; + int16_t bitRateIndex; + + retValue = 0; /* bitrate index is unknown -> error! */ + + bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode ); + + if ( bitRateIndex != IGF_BITRATE_UNKNOWN ) + { + retValue = 1; /* no error */ + + switch ( bitRateIndex ) + { + case IGF_BITRATE_WB_13200_CPE: + bitRateIndex = IGF_BITRATE_WB_9600; + break; + case IGF_BITRATE_WB_16400_CPE: + bitRateIndex = IGF_BITRATE_WB_9600; + break; + case IGF_BITRATE_SWB_13200_CPE: + bitRateIndex = IGF_BITRATE_SWB_9600; + break; + case IGF_BITRATE_SWB_16400_CPE: + bitRateIndex = IGF_BITRATE_SWB_13200; + break; + case IGF_BITRATE_SWB_24400_CPE: + bitRateIndex = IGF_BITRATE_SWB_16400; + break; + case IGF_BITRATE_FB_24400_CPE: + bitRateIndex = IGF_BITRATE_FB_16400; + break; + case IGF_BITRATE_SWB_32000_CPE: + bitRateIndex = IGF_BITRATE_SWB_24400; + break; + case IGF_BITRATE_FB_32000_CPE: + bitRateIndex = IGF_BITRATE_FB_24400; + break; + case IGF_BITRATE_FB_48000_CPE: + case IGF_BITRATE_FB_64000_CPE: + bitRateIndex = IGF_BITRATE_FB_32000; + break; + } + + switch ( bitRateIndex ) + { + case IGF_BITRATE_WB_9600: + case IGF_BITRATE_RF_WB_13200: + case IGF_BITRATE_SWB_9600: + case IGF_BITRATE_SWB_13200: + case IGF_BITRATE_RF_SWB_13200: + case IGF_BITRATE_SWB_16400: + case IGF_BITRATE_SWB_24400: + case IGF_BITRATE_SWB_32000: + case IGF_BITRATE_SWB_48000: + case IGF_BITRATE_SWB_64000: + *cf_se00 = cf_se00_tab; + *cf_se01 = cf_se01_tab[bitRateIndex]; + *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; + *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; + *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; + *cf_se10 = &cf_se10_tab[0]; + *cf_off_se10 = cf_off_se10_tab; + *cf_se11 = &cf_se11_tab[0][0][0]; + *cf_off_se11 = &cf_off_se11_tab[0][0]; + break; + case IGF_BITRATE_FB_16400: + case IGF_BITRATE_FB_24400: + case IGF_BITRATE_FB_32000: + bitRateIndex = bitRateIndex - IGF_BITRATE_FB_16400 + IGF_BITRATE_SWB_16400; + *cf_se00 = cf_se00_tab; + *cf_se01 = cf_se01_tab[bitRateIndex]; + *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; + *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; + *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; + *cf_se10 = &cf_se10_tab[0]; + *cf_off_se10 = cf_off_se10_tab; + *cf_se11 = &cf_se11_tab[0][0][0]; + *cf_off_se11 = &cf_off_se11_tab[0][0]; + break; + case IGF_BITRATE_FB_48000: + case IGF_BITRATE_FB_64000: + bitRateIndex = bitRateIndex - IGF_BITRATE_FB_48000 + IGF_BITRATE_SWB_48000; + *cf_se00 = cf_se00_tab; + *cf_se01 = cf_se01_tab[bitRateIndex]; + *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; + *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; + *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; + *cf_se10 = &cf_se10_tab[0]; + *cf_off_se10 = cf_off_se10_tab; + *cf_se11 = &cf_se11_tab[0][0][0]; + *cf_off_se11 = &cf_off_se11_tab[0][0]; + break; + case IGF_BITRATE_FB_96000: + case IGF_BITRATE_FB_128000: + case IGF_BITRATE_FB_80000_CPE: + case IGF_BITRATE_FB_96000_CPE: + case IGF_BITRATE_FB_128000_CPE: + bitRateIndex = IGF_BITRATE_SWB_48000; + *cf_se00 = cf_se00_tab; + *cf_se01 = cf_se01_tab[bitRateIndex]; + *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; + *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; + *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; + *cf_se10 = &cf_se10_tab[0]; + *cf_off_se10 = cf_off_se10_tab; + *cf_se11 = &cf_se11_tab[0][0][0]; + *cf_off_se11 = &cf_off_se11_tab[0][0]; + break; + case IGF_BITRATE_SWB_48000_CPE: + bitRateIndex = IGF_BITRATE_SWB_16400; + *cf_se00 = cf_se00_tab; + *cf_se01 = cf_se01_tab[bitRateIndex]; + *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; + *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; + *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; + *cf_se10 = &cf_se10_tab[0]; + *cf_off_se10 = cf_off_se10_tab; + *cf_se11 = &cf_se11_tab[0][0][0]; + *cf_off_se11 = &cf_off_se11_tab[0][0]; + break; + case IGF_BITRATE_SWB_64000_CPE: + case IGF_BITRATE_SWB_80000_CPE: + case IGF_BITRATE_SWB_96000_CPE: + bitRateIndex = IGF_BITRATE_SWB_48000; /*bitRateIndex-IGF_BITRATE_SWB_56000+IGF_BITRATE_SWB_48000;*/ + *cf_se00 = cf_se00_tab; + *cf_se01 = cf_se01_tab[bitRateIndex]; + *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; + *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; + *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; + *cf_se10 = &cf_se10_tab[0]; + *cf_off_se10 = cf_off_se10_tab; + *cf_se11 = &cf_se11_tab[0][0][0]; + *cf_off_se11 = &cf_off_se11_tab[0][0]; + break; + case IGF_BITRATE_UNKNOWN: + default: + assert( 0 ); + } + } + + return retValue; +} diff --git a/lib_com/index_pvq_opt.c b/lib_com/index_pvq_opt.c new file mode 100644 index 0000000000..e09c831dab --- /dev/null +++ b/lib_com/index_pvq_opt.c @@ -0,0 +1,1247 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * LOCAL DEFINITIONS + *-------------------------------------------------------------------*/ + +#define N_OPT 5 /* complexity setting, direct functional calculation limit */ +#define TABLE_LIM_OPT 96 /* odd divisor table recursion limit setting, due to dim 6 */ + +/* local typedefs for optimized pvq indexing, used only in this c-file to vectorize common function calls for c-code clarity */ +typedef void ( *VEC2INDFUNCM )( const int16_t *, int16_t *, uint32_t *, uint32_t * ); +typedef uint32_t ( *NFUNCM )( int16_t ); +typedef uint32_t ( *H_FUNCM )( uint32_t ); +typedef void ( *IND2VECFUNCM )( int16_t, int16_t, uint32_t, int16_t * ); +typedef void ( *NDIM_FUNCM )( int16_t, int16_t, uint32_t, int16_t * ); + +/* local constants for indexing functions c-code clarity */ +#ifndef ONE_U + +#define ZERO 0 +#define ONE 1 +#define ONE_U 1u +#define TWO 2 +#define SIGNBIT 0x80000000u + +#define MAXBIT 0x40000000L /* if Word32 */ +#define MINNEG 0xffffffffL + +#define UDIVBY3 2863311531U + + +/*-------------------------------------------------------------------* + * local_norm_l_opt + * + * rewritten version of STL norm_l for integer fixed point normalization + * in floating point c-code. + *-------------------------------------------------------------------*/ + +/*! r: shifts needed for normalization */ +static int16_t local_norm_l_opt( + int32_t l32var /* i/o: signed 32-bit input value */ +) +{ + int16_t l32res; + +#define WMC_TOOL_MAN + MAC( 1 ); + + if ( l32var == (int32_t) MINNEG ) + { + return ( 32 - ONE ); + } + else + { + if ( l32var == ZERO ) + { + return ZERO; + } + else + { + if ( l32var < ZERO ) + { + l32var = ~l32var; + } + + for ( l32res = ZERO; l32var < (int32_t) MAXBIT; l32res++ ) + { + l32var <<= ONE; + } + } + } +#undef WMC_TOOL_MAN + + return ( l32res ); +} + + +/*-------------------------------------------------------------------* + * floor_sqrt_exact() + * returns x = floor(sqrt(input)); where (x*x) <= input + *-------------------------------------------------------------------*/ + +/*! r: floor(sqrt(input)) */ +uint32_t floor_sqrt_exact( + const uint32_t input /* i : unsigned input [0.. UINT_MAX/4] */ +) +{ + double _tmp; + uint32_t x; + if ( input == ZERO ) + { + return ZERO; + } + + _tmp = (double) input; + x = (uint32_t) ( sqrt( _tmp ) ); /* floor is a part of the cast */ + + return x; +} + +/*-------------------------------------------------------------------* + * f_odd_exact_div_opt() + * + * find 1/(den1*2+1) * ( num1p*num2p - num3) , + * if the result is known a priori to be exactly a 32bit unsigned integer + *-------------------------------------------------------------------*/ + +/*! r: see Eq. */ +static uint32_t f_odd_exact_div_opt( + const int16_t num1p, /* i : see Eq. */ + const uint32_t num2p, /* i : see Eq. */ + const uint32_t num3, /* i : see Eq. */ + const int16_t den1 /* i : see Eq. */ +) +{ + uint32_t tmp; + tmp = exactdivodd[den1] * ( num1p * num2p - num3 ); + + return ( tmp ); +} + +/*---------------------------------------------------------------------------* + * f_even_exact_div_opt() + * + * returns (num1p*num2p - num3 )/ den1 + * if the result is known a priori to be exactly a 32bit unsigned integer + *--------------------------------------------------------------------------*/ + +/*! r: see Eq. */ +static uint32_t f_even_exact_div_opt( + const int16_t num1p, /* i : see Eq. */ + const uint32_t num2p, /* i : see Eq. range should be larger than num1p */ + const uint32_t num3, /* i : see Eq. */ + const int16_t den1 /* i : see Eq. */ +) +{ + uint32_t tmp1, oddfactor, UL_tmp; + int16_t den1_m1; + int16_t even_sh; + uint32_t UL_tmp_h; + uint64_t ULL_tmp; + + den1_m1 = den1 - ONE; /* remove top bit */ + even_sh = ( 31 ) - local_norm_l_opt( ( den1_m1 ) ^ den1 ); /* NB STL operation defined for signed positive 32 bit variable */ + oddfactor = exactdivodd[den1_m1 >> even_sh]; + even_sh -= ONE; + + ULL_tmp = (uint64_t) num1p * (uint64_t) num2p; /* use STL Mpy_32_32_uu functionality */ + UL_tmp_h = (uint32_t) ( ULL_tmp >> 32 ); /* high output from basicop */ + UL_tmp = (uint32_t) ( ULL_tmp ); /* low output from basicop */ + + if ( num3 > UL_tmp ) + { + UL_tmp_h = UL_tmp_h - ONE_U; + } + UL_tmp = ( UL_tmp - num3 ); /* can and should underflow */ + UL_tmp = ( UL_tmp_h << ( 32 - even_sh ) ) | ( UL_tmp >> even_sh ); /* bitwise OR */ + + /* use tabled modular multiplicative inverse for the odd part division */ + tmp1 = UL_tmp * oddfactor; + + return tmp1; +} + +/*-------------------------------------------------------------------* + * a_three() + *-------------------------------------------------------------------*/ + +/*! r: offset for dim 3 */ +static uint32_t a_three( + const uint32_t k_val /* i : nb unit pulses; k_val may be higher than 16 bit signed */ +) +{ + if ( k_val ) + { + return ( ONE_U + k_val * ( ( k_val - ONE_U ) << ONE ) ); + } + else + { + return ZERO; + } +} + +/*-------------------------------------------------------------------* + * a_four() + *-------------------------------------------------------------------*/ + +/*! r: offset for dim 4 */ +static uint32_t a_four( + const uint32_t k_val /* i : nb unit pulses */ +) +{ + if ( k_val ) + { + return UDIVBY3 * ( ( k_val << ONE ) * ( 4 + ( ( k_val << ONE ) - 3 ) * k_val ) - 3 ); + } + + return ZERO; +} + +/*-------------------------------------------------------------------* + * a_five() + *-------------------------------------------------------------------*/ + +/*! r: offset for dim 5 */ +static uint32_t a_five( + const uint32_t k_val /* i : nb unit pulses */ +) +{ + uint32_t offset; + + if ( k_val == 0 ) + { + offset = 0; + } + else if ( k_val == 1 ) + { + offset = 1; + } + else + { + offset = ( ONE_U + ( ( ( ( ( ( k_val - TWO ) * k_val + 5 ) * k_val - 4 ) * k_val ) * ( UDIVBY3 ) ) << ONE ) ); + } + return offset; +} + +/*-------------------------------------------------------------------* + * direct_msize() + *-------------------------------------------------------------------*/ +/*! r: Enumeration size */ +static uint32_t direct_msize( + const int16_t dim_in, /* i : Number of dimensions */ + const int16_t k_in ) /* i : Number of pulses */ +{ + uint32_t msize, k, ksq; + + msize = ONE_U; /* k==0 or dim==1, and base */ + if ( k_in ) + { + k = (uint32_t) k_in; + ksq = k * k; + switch ( dim_in ) + { + case ( 5 ): + /* k*k = 238*238 < 2^16 */ + msize += ( ( ( ksq * ( 5 + ksq ) ) * UDIVBY3 ) << ONE ); + break; + case ( 4 ): + msize = ( ( k * ( ksq + 2 ) ) * UDIVBY3 ) << TWO; + break; + case ( 3 ): + msize += ( ( ksq ) << ONE ); + break; + case ( 2 ): + msize = k << ONE; + break; + } + } + + return msize; +} + + +/*-------------------------------------------------------------------* + * initOffsets() + * + * update h_mem[0.. k_val_in+1] , with starting offsets for A+U recursion + *-------------------------------------------------------------------*/ + +static void initOffsets( + const int16_t dim_in, /* i : Number of dimensions */ + uint32_t *h_mem, /* o : offsets */ + const int16_t k_val_in /* i : Number of pulses */ +) +{ + int16_t k_val_curr, k_val_prev; + int16_t k_val; + h_mem[0] = ZERO; /* % A(=>0,k=0) */ + h_mem[1] = ONE_U; /* % A(*,k=1) */ + + if ( dim_in == 2 ) + { + for ( k_val = TWO; k_val <= k_val_in; k_val++ ) + { + h_mem[k_val] = (uint32_t) ( ( k_val << ONE ) - ONE ); /* A(2, 2 .. k ) */ + } + h_mem[k_val] = (uint32_t) ( k_val_in ); /* U(2,k+1) */ + } + else if ( dim_in == 3 ) + { + k_val_prev = ONE; + for ( k_val_curr = TWO; k_val_curr <= k_val_in; k_val_curr++ ) + { + h_mem[k_val_curr] = ( ONE_U + k_val_curr * ( k_val_prev << ONE ) ); + k_val_prev = k_val_curr; + } + h_mem[k_val_curr] = k_val_curr * k_val_prev; + } + else if ( dim_in == 4 ) + { + for ( k_val_curr = TWO; k_val_curr <= k_val_in; k_val_curr++ ) + { + h_mem[k_val_curr] = UDIVBY3 * ( ( k_val_curr << ONE ) * ( 4 + ( ( k_val_curr << ONE ) - 3 ) * k_val_curr ) - 3 ); + } + h_mem[k_val_curr] = ( UDIVBY3 * ( ( k_val_curr << ONE ) * ( 4 + ( ( k_val_curr << ONE ) - 3 ) * k_val_curr ) - 3 ) ) >> 1; + } + + return; +} + + +/*-------------------------------------------------------------------* + * a_fwd() + * + * create offsets for A(n,k) from lower A(n-1,k) + *-------------------------------------------------------------------*/ + +static void a_fwd( + uint32_t *a_in, /* i/o: offsets */ + const int16_t n_items /* i : items, k's */ +) +{ + uint32_t a_1; + int16_t i, i_prev; + uint32_t a_in0; /* i : start column value */ + + a_in0 = ONE_U; + i_prev = ZERO; + for ( i = ONE; i <= n_items; i++ ) /*basic A fwd row recursion */ + { + a_1 = a_in0 + a_in[i_prev] + a_in[i]; /* a_in addressed in at least two locations */ + a_in[i_prev] = a_in0; + a_in0 = a_1; + i_prev = i; /* no real need to count as it is a ptr update */ + } + a_in[i_prev] = a_in0; + + return; +} + +/*-------------------------------------------------------------------* + * a_bwd() + * + * create offsets for A(n,k) from higher A(n+1,k) + *-------------------------------------------------------------------*/ + +static void a_bwd( + uint32_t *a_in, /* i/o: offsets */ + const int16_t n_items /* i : n_items */ +) +{ + uint32_t a_1; + uint32_t a_in0; + int16_t i; + int16_t i_prev; + + a_in0 = ZERO; + i_prev = ZERO; + for ( i = ONE; i <= n_items; i++ ) /*basic A reverse row recursion */ + { + a_1 = a_in[i] - a_in0 - a_in[i_prev]; + a_in[i_prev] = a_in0; + a_in0 = a_1; + i_prev = i; + } + a_in[i_prev] = a_in0; + + return; +} + +/*-------------------------------------------------------------------* + * direct_row_A2U_rec_calc() + * + * + *-------------------------------------------------------------------*/ + +static uint32_t direct_row_A2U_rec_calc( + const int16_t dim_in, /* i : Number of dimensions */ + const int16_t k_val_in, /* i : Number of pulses */ + const uint32_t a_km2, /* i : Recursion for k-2 (see Eq below) */ + const uint32_t a_km1 /* i : Recursion for k-1 (see Eq below) */ +) +{ + + /* U(n,k) = (A(n,k-2)-1)/2 + ((2*n-1)*A(n,k-1) - A(n,k-2) )/2*(k-1) */ + /* U(n,k) = floor(A(n,k-2)/2) + (n*A(n,k-1) - floor(A(n,k-1)/2) - floor(A(n,k-2)/2) +1 )/(k-1) */ + /* U(n,k) = floor(A(n,k-2)/2) + (n*A(n,k-1) - (floor(A(n,k-1)/2) + floor(A(n,k-2)/2) +1) ) /(k-1) */ + + uint32_t km2_size, result; + int16_t divisor; + + divisor = k_val_in - ONE; + km2_size = ( a_km1 >> ONE ) + ( a_km2 >> ONE ) + ONE_U; + + if ( divisor & ONE ) + { + /* odd */ + result = ( ( a_km2 >> ONE ) + f_odd_exact_div_opt( dim_in, a_km1, km2_size, divisor >> ONE ) ); + } + else + { + /* even divisor */ + result = ( ( a_km2 >> ONE ) + f_even_exact_div_opt( dim_in, a_km1, km2_size, divisor ) ); + } + + return result; +} + +/*-------------------------------------------------------------------* + * a_u_fwd() + * + * + *-------------------------------------------------------------------*/ + +static void a_u_fwd( + uint32_t *a_u_in, /* o : auxiliary array a_u */ + const int16_t k_val_in, /* i : number of pulses */ + const int16_t mem_size_m1 /* i : length of a_u_in */ +) +{ + uint32_t u_kp1_prev; + uint32_t a_k_prev; + + /* mem_size_m1 = 1 + k_val_in */ + u_kp1_prev = a_u_in[mem_size_m1]; /* previous n U (n,k+1) value*/ + a_k_prev = a_u_in[k_val_in]; /* previous n A(n,k) value*/ + + a_fwd( &a_u_in[ONE], k_val_in ); /* a_u_in[k==ZERO] = zero if n>0 */ + + /* low dynamic last offset entry mixed recursion */ + /* used for size calculation */ + /* U(n,k+1) = 1 + U(n-1,k+1) + U(n-1,k) + U(n,k) */ + /* U(n,k+1) = 1 + U(n-1,k+1) + (A(n-1,k)-1)/2 + (A(n,k)-1)/2 */ + /* Note, A(n,k) always odd for k>0, subtracted one always shifted out */ + /* assert(a_k_prev>0, a_k-curr>0) */ + + a_u_in[mem_size_m1] = ONE_U + u_kp1_prev + ( a_k_prev >> ONE ) + ( a_u_in[k_val_in] >> ONE ); + + return; +} + +/*-------------------------------------------------------------------* + * nm_h_prep_opt() + * + * find and return N_MPVQ(n,k) and also offsets A(n, 0 to k ) and U(n,k+1). + *-------------------------------------------------------------------*/ + +/*! r: msize for dim */ +static uint32_t nm_h_prep_opt( + const int16_t dim_in, /* i : dimension */ + int16_t k_val_in, /* i : nb unit pulses */ + uint32_t *h /* o : A/U offsets array */ +) +{ + int16_t mem_size_m1, k_val; + int16_t dim_tmp, d_start; + uint32_t h_saveA, h_saveB; /* registers for alternating A(n,k-1), A(n,k-2)*/ + int16_t numDsub1; /* k_val_curr, k_val_prev*/ + + mem_size_m1 = k_val_in + ONE; + + if ( k_val_in > TABLE_LIM_OPT ) + { + if ( dim_in >= 3 ) + { + d_start = 3; + } + else + { + d_start = 2; + } + initOffsets( d_start, h, k_val_in ); + + for ( dim_tmp = d_start; dim_tmp < dim_in; dim_tmp++ ) + { + a_u_fwd( h, k_val_in, mem_size_m1 ); + } + } + else + { + h[ZERO] = ZERO; + h[ONE] = ONE_U; + numDsub1 = ( ( dim_in << ONE ) - ONE ); + h[TWO] = numDsub1; + + /* interleaved odd even calls */ + h_saveA = numDsub1; + h_saveB = ONE_U; + for ( k_val = 3; k_val < ( mem_size_m1 ); k_val++ ) + { + /* A(n,k) = A(n,k-2) + ((2*n-1)*A(n,k-1)-A(n,k-2)) /(k-1) */ + /* first odd k, even divisor */ + h_saveB += f_even_exact_div_opt( numDsub1, h_saveA, h_saveB, k_val - ONE ); + h[k_val] = h_saveB; + + k_val++; /* next even k, odd divisor */ + if ( k_val >= ( mem_size_m1 ) ) + { + break; + } + h_saveA += f_odd_exact_div_opt( numDsub1, h_saveB, h_saveA, ( k_val - ONE ) >> ONE ); + h[k_val] = h_saveA; + } + /* always do the last (k+1) recursion based on U(n,k+1) = func( A(n-2,k+1), A(n-1,k+1) ) */ + h[mem_size_m1] = direct_row_A2U_rec_calc( dim_in, mem_size_m1, h[mem_size_m1 - 2], h[k_val_in] ); + } + + /* N_MPVQ(n,k) = 1 + U(n,k+1) + U(n,k) = 1 + U(n,k+1) + (A(n,k)-1)/2; */ /* A(n,k) always odd */ + return ( ONE + h[mem_size_m1] + ( h[k_val_in] >> ONE ) ); +} + + +/*-------------------------------------------------------------------* + * find_amp_split_offset_func_mem() + * + * find first offset in range 0..k_val_in that is less than ind_in + * using a tree search with direct function calls or memory iteration + *-------------------------------------------------------------------*/ + +static int16_t find_amp_split_offset_func_mem( + const uint32_t ind_in, /* i : input index */ + const int16_t k_val_in, /* i : number of pulses */ + H_FUNCM h_func_ptr, /* i : offset function pointer */ + const uint32_t *const h_mem, /* i : offsets */ + uint32_t *tmp_offset /* o : offset found */ +) +{ + int16_t not_ready, low, high; + int16_t k_test; + + k_test = -1; /* init to eliminate compiler warning */ + low = 0; + high = k_val_in; + /* split over A(n,k)= h_mem(k), or use direct function */ + not_ready = ONE; + while ( not_ready ) + { + k_test = ( low + high ) >> ONE; /*% split range in half */ + + if ( h_mem ) + { + *tmp_offset = h_mem[k_test]; /* memory search */ + } + else + { + *tmp_offset = ( *h_func_ptr )( (uint32_t) k_test ); /* function search. NB only line difference to the memory search*/ + } + + if ( ind_in > *tmp_offset ) + { + if ( k_test < high ) + { + low = 1 + k_test; + } + else + { + not_ready = 0; + } + } + else + { + if ( *tmp_offset == ind_in ) + { + not_ready = 0; + } + else + { + high = k_test - 1; + } + } + } + + return k_test; +} + +/*-------------------------------------------------------------------* + * get_lead_sign() + * + * update index and return leading sign + *-------------------------------------------------------------------*/ + +/*! r: leading sign [-1,1] */ +static int16_t get_lead_sign( + uint32_t *ind /* i/o: Current index */ +) +{ + int16_t leading_sign; + + if ( ( *ind ) & ONE_U ) /* leading sign stored in LSB */ + { + leading_sign = -1; + } + else + { + leading_sign = 1; + } + ( *ind ) = ( *ind ) >> ONE; + + return leading_sign; +} + + +/*-------------------------------------------------------------------* + * mind2vec_one() + *-------------------------------------------------------------------*/ + +static void mind2vec_one( + const int16_t k_val_in, /* i : nb unit pulses */ + const int16_t leading_sign, /* i : leading sign */ + const uint32_t ind, /* i : index */ + int16_t *vec_out /* o : pulse train */ +) +{ + + vec_out[ind] = ( leading_sign * k_val_in ); /* NB input k_val_in can be zero */ + + return; +} + +/*-------------------------------------------------------------------* + * mind2vec_two() + *-------------------------------------------------------------------*/ + +static void mind2vec_two( + const int16_t k_val_in, /* i : nb unit pulses */ + const int16_t leading_sign, /* i : leading sign */ + const uint32_t ind_in, /* i : index */ + int16_t *vec_out /* o : pulse train */ +) +{ + uint32_t ind_tmp; + int16_t val1; + + if ( k_val_in > 0 ) /* k_val_in check */ + { + if ( ind_in == 0 ) + { + vec_out[0] = ( leading_sign * k_val_in ); + vec_out[1] = 0; + } + else if ( ind_in == ( (uint32_t) ( k_val_in << ONE ) - ONE_U ) ) + { + vec_out[0] = 0; + vec_out[1] = ( leading_sign * k_val_in ); + } + else + { + ind_tmp = ind_in - ONE_U; + val1 = (int16_t) ( ONE_U + ( ind_tmp >> ONE ) ); + vec_out[0] = leading_sign * ( k_val_in - val1 ); + + if ( ind_tmp & ONE_U ) + { + vec_out[1] = -val1; + } + else + { + vec_out[1] = val1; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * setval_update_sign() + * + * + *-------------------------------------------------------------------*/ + +/*! r: max k */ +static int16_t setval_update_sign( + const int16_t k_delta, /* i : Delta-K */ + int16_t k_max_local, /* i/o: Maximum K */ + int16_t *leading_sign, /* o : Leading sign */ + uint32_t *ind_in, /* i/o: Index/index with leading sign excluded */ + int16_t *vec_out /* o : Output vector */ +) +{ + if ( k_delta != 0 ) + { + *vec_out = ( *leading_sign ) * k_delta; + *leading_sign = get_lead_sign( ind_in ); + k_max_local = k_max_local - k_delta; + } + + return k_max_local; +} + +/*-------------------------------------------------------------------* + * mind2vec_three() + *-------------------------------------------------------------------*/ + +static void mind2vec_three( + int16_t k_max_local, /* i : nb unit pulses */ + int16_t leading_sign, /* i : leading sign */ + uint32_t ind_in, /* i : index */ + int16_t *vec_out /* o : pulse train */ +) +{ + int16_t k_delta; + uint32_t acc_val; + + /* + use direct calculation of first amplitude + (to find amplitudes faster than using split or linear iteration) + */ + if ( ind_in == 0 ) + { + vec_out[0] = leading_sign * k_max_local; + } + else + { + acc_val = ( ( ONE_U + floor_sqrt_exact( ( ind_in << ONE ) - ONE_U ) ) >> ONE ); /* in BASOP use approximation + search for exact sqrt )*/ + + k_delta = k_max_local - (int16_t) acc_val; + ind_in -= a_three( acc_val ); /* remove amplitude offset A(n,k_acc) */ + + k_max_local = setval_update_sign( k_delta, k_max_local, &leading_sign, &ind_in, vec_out ); + + mind2vec_two( k_max_local, leading_sign, ind_in, &vec_out[1] ); + } + + return; +} + +/*-------------------------------------------------------------------* + * mind2vec_direct() + * + * general function for direct decoding using direct functions + * (no memory recursion) + *-------------------------------------------------------------------*/ + +static void mind2vec_direct( + int16_t k_max_local, /* i : nb unit pulses */ + int16_t leading_sign, /* i : leading sign */ + uint32_t ind, /* i : index */ + H_FUNCM h_func_ptr, /* i : offset function */ + NDIM_FUNCM nd_func_ptr, /* i : next dimension function */ + int16_t *vec_out /* o : pulse train */ +) +{ + int16_t k_delta, k_test = 0; + uint32_t tmp_offset; + + if ( ind == 0 ) + { + vec_out[0] = leading_sign * k_max_local; + } + else + { + k_test = find_amp_split_offset_func_mem( ind, k_max_local, h_func_ptr, NULL, &tmp_offset ); + + k_delta = k_max_local - k_test; + ind = ind - tmp_offset; /* % remove amplitude offset A(n,k_acc) */ + k_max_local = setval_update_sign( k_delta, k_max_local, &leading_sign, &ind, vec_out ); + ( *nd_func_ptr )( k_max_local, leading_sign, ind, &vec_out[1] ); + } + + return; +} + +/*-------------------------------------------------------------------* + * mind2vec_four() + *-------------------------------------------------------------------*/ + +static void mind2vec_four( + int16_t k_val_in, /* i : nb unit pulses */ + int16_t leading_sign, /* i : leading sign */ + uint32_t ind_in, /* i : index */ + int16_t *vec_out /* o : pulse train */ +) +{ + mind2vec_direct( k_val_in, leading_sign, ind_in, a_four, mind2vec_three, vec_out ); + + return; +} + +/*-------------------------------------------------------------------* + * mind2vec_five() + *-------------------------------------------------------------------*/ + +static void mind2vec_five( + int16_t k_val_in, /* i : nb unit pulses */ + int16_t leading_sign, /* i : leading sign */ + uint32_t ind_in, /* i : index */ + int16_t *vec_out /* o : pulse train */ +) +{ + mind2vec_direct( k_val_in, leading_sign, ind_in, a_five, mind2vec_four, vec_out ); + + return; +} + + +/*-------------------------------------------------------------------* + * mind2vec() + *-------------------------------------------------------------------*/ + +static void mind2vec( + int16_t dim_in, /* i : dimension */ + int16_t k_max_local, /* i : nb unit pulses */ + int16_t leading_sign, /* i : leading sign */ + uint32_t ind, /* i : index */ + int16_t *vec_out, /* o : pulse train */ + uint32_t *h_in /* i : offset vector A=1+2U */ +) +{ + int16_t pos; + int16_t k_acc, k_delta; + uint32_t tmp_offset; + + k_acc = k_max_local; + + pos = ZERO; + while ( pos < dim_in ) /* first to last position decoding */ + { + if ( ind == 0 ) + { + vec_out[pos] = leading_sign * k_max_local; + break; /* "fast" recursion exit */ + } + else + { + { + /* linear magnitude search */ + k_acc = k_max_local; + tmp_offset = h_in[k_acc]; + while ( tmp_offset > ind ) + { + k_acc = k_acc - 1; + tmp_offset = h_in[k_acc]; + } + } + k_delta = k_max_local - k_acc; /* amplitude decoding */ + } + ind = ind - tmp_offset; /* remove amplitude index offset A(n,k_acc) */ + + k_max_local = setval_update_sign( k_delta, k_max_local, &leading_sign, &ind, &vec_out[pos] ); + + /* move from A(n,kmax) to A(n-1, k_max_local), */ + a_bwd( h_in, k_max_local + 1 ); /* [0..k_max_local], no need to calculate U(n,k_max_local+1) in index decoding */ + pos = pos + 1; + } + + return; +} + + +/*-------------------------------------------------------------------* + * vec2mind_one() + *-------------------------------------------------------------------*/ + +static void vec2mind_one( + const int16_t *vec_in, /* i : PVQ abs pulse train */ + int16_t *k_val_out_ptr, /* o : number of unit pulses */ + uint32_t *next_sign_ind, /* i/o: next sign ind */ + uint32_t *ind /* o : MPVQ index */ +) +{ + *k_val_out_ptr = -1; /* just to avoid compiler warnings */ + + *ind = ZERO; + /* *k_val_out_ptr = (int16_t)abs(*vec_in); */ /* dim==1, function not called recursively */ + *next_sign_ind = (uint32_t) ( *vec_in < ZERO ); /* single sign always pushed out of MPVQ */ + return; +} + +/*-------------------------------------------------------------------* + * vec2mind_two() + *-------------------------------------------------------------------*/ + +static void vec2mind_two( + const int16_t *vec_in, /* i : PVQ pulse train */ + int16_t *k_val_out_ptr, /* o : number of unit pulses */ + uint32_t *next_sign_ind, /* i/o: next sign ind */ + uint32_t *ind /* o : MPVQ index */ +) +{ + uint32_t lead_sign_ind; + int16_t abs0, abs1, abs01; + + abs0 = (int16_t) abs( vec_in[0] ); + abs1 = (int16_t) abs( vec_in[1] ); + + abs01 = abs0 + abs1; + *k_val_out_ptr = abs01; + + if ( abs01 == 0 ) /* zeroes can happen in a recursive encoding call */ + { + *next_sign_ind = SIGNBIT; + *ind = ZERO; + } + else + { + *next_sign_ind = 0; + if ( abs1 == 0 ) + { + *ind = ZERO; + } + else if ( abs0 == 0 ) + { + *ind = (uint32_t) ( abs1 << ONE ) - ONE_U; + *next_sign_ind = 1; + } + else + { + lead_sign_ind = (uint32_t) ( vec_in[1] < 0 ); /*% sign always shifted to first pos */ + *ind = ONE_U + ( (uint32_t) ( abs1 - 1 ) << ONE ) + lead_sign_ind; + } + *next_sign_ind = (uint32_t) ( vec_in[*next_sign_ind] < 0 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * vec2mind_gen345( vec_in kval, next_dim_func, offset_func,....) + * generic call saves PROM , + *-------------------------------------------------------------------*/ + +static void vec2mind_gen345( + const int16_t *vec_in, /* i : PVQ abs pulse train */ + int16_t *k_val_out_ptr, /* o : number of unit pulses */ + uint32_t *next_sign_ind, /* i/o: next sign ind */ + uint32_t *index, /* o : MPVQ index */ + VEC2INDFUNCM vec2indfunc_ptr, /* i : */ + H_FUNCM a_func_ptr /* i : offset function */ +) +{ + int16_t tmp_val; + + tmp_val = vec_in[ZERO]; + ( *vec2indfunc_ptr )( &vec_in[ONE], k_val_out_ptr, next_sign_ind, index ); + + if ( ( ( *next_sign_ind & SIGNBIT ) == 0 && tmp_val != 0 ) != ZERO ) + { + *index = ( *index << ONE ) + *next_sign_ind; + } + + if ( tmp_val != 0 ) /* push sign */ + { + *next_sign_ind = (uint32_t) ( tmp_val < 0 ); + } + + *index += ( *a_func_ptr )( (uint32_t) *k_val_out_ptr ); + if ( tmp_val > 0 ) + { + *k_val_out_ptr += tmp_val; + } + else + { + *k_val_out_ptr -= tmp_val; + } + + return; +} + + +/*-------------------------------------------------------------------* + * vec2mind_three() + *-------------------------------------------------------------------*/ + +static void vec2mind_three( + const int16_t *vec_in, /* i : PVQ pulse train */ + int16_t *k_val_out_ptr, /* o : number of unit pulses */ + uint32_t *next_sign_ind, /* i/o: next sign ind */ + uint32_t *index /* o : MPVQ index */ +) +{ + vec2mind_gen345( vec_in, k_val_out_ptr, next_sign_ind, index, vec2mind_two, a_three ); + + return; +} + +/*-------------------------------------------------------------------* + * vec2mind_four() + *-------------------------------------------------------------------*/ + +static void vec2mind_four( + const int16_t *vec_in, /* i : PVQ pulse train */ + int16_t *k_val_out_ptr, /* o : number of unit pulses */ + uint32_t *next_sign_ind, /* i/o: next sign ind */ + uint32_t *index /* o : MPVQ index */ +) +{ + vec2mind_gen345( vec_in, k_val_out_ptr, next_sign_ind, index, vec2mind_three, a_four ); + + return; +} + +/*-------------------------------------------------------------------* + * vec2mind_five() + *-------------------------------------------------------------------*/ + +static void vec2mind_five( + const int16_t *vec_in, /* i : PVQ abs pulse train */ + int16_t *k_val_out_ptr, /* o : number of unit pulses */ + uint32_t *next_sign_ind, /* i/o: next sign ind */ + uint32_t *index /* o : MPVQ index */ +) +{ + vec2mind_gen345( vec_in, k_val_out_ptr, next_sign_ind, index, vec2mind_four, a_five ); + + return; +} + + +/*-------------------------------------------------------------------* + * vec2mind() + *-------------------------------------------------------------------*/ + +static void vec2mind( + int16_t dim_in, /* i : dim */ + int16_t k_val_in, /* i : number of unit pulses */ + const int16_t *vec_in, /* i : PVQ pulse train */ + uint32_t *next_sign_ind, /* o : pushed leading sign */ + uint32_t *index, /* o : MPVQ index */ + uint32_t *N_MPVQ_ptr, /* o : size(N_MPVQ(dim,K_val_in))*/ + uint32_t *h_mem /* o : offsets */ +) +{ + int16_t pos, mem_size_m1; + int16_t k_val_acc; + int16_t tmp_val; + + mem_size_m1 = k_val_in + ONE; + + *next_sign_ind = SIGNBIT; /* % should always be 0 or 1 out, highest bit set signals no sign found yet*/ + + pos = dim_in - 2; /* % address 2nd last sample */ + vec2mind_two( &vec_in[pos], &k_val_acc, next_sign_ind, index ); + initOffsets( 3, h_mem, k_val_in ); + + for ( pos--; pos >= 0; pos-- ) + { + /* + % Check if the leading sign 'bit' is to be added + */ + tmp_val = vec_in[pos]; + if ( ( ( *next_sign_ind & SIGNBIT ) == 0 && ( tmp_val != 0 ) ) ) + { + *index = ( *index << ONE ) + ( *next_sign_ind ); + } + + /* % push sign fwd, for encoding in the next non_zero position */ + if ( tmp_val != 0 ) + { + *next_sign_ind = (uint32_t) ( tmp_val < 0 ); + } + + /*% add indexing offset up to this reverse (r_l) accumulated amplitude point */ + *index += h_mem[k_val_acc]; /* % k_val_acc==0 ==>0 */ + + k_val_acc += (int16_t) abs( tmp_val ); /*% now increase acc k value for next N */ + + if ( pos ) + { + a_u_fwd( h_mem, k_val_in, mem_size_m1 ); + /*% update A(n,k=1:k_val_in) and U(n,k_val_in+1), NB here (k_val_in + 2 elements always has to be updated */ + } + } + + /* size is needed for the subseqent arithmetic encoding/transmission of the index. */ + /* use relation N_MPVQ(n,K) = 1 + (A(n, K)-1)/2 + U(n, 1 + K) */ + /* = N_MPVQ(n,K) = 1 + (A(n, K)>>1) + U(n, 1 + K), as A(n,K) is odd) */ + + *N_MPVQ_ptr = ONE_U + ( h_mem[k_val_acc] >> ONE ) + h_mem[mem_size_m1]; /* total size size */ + + return; +} + +/*--------------------------------------------------------------------------* + * mpvq_encode_vec() + * + * returns struct with leading sign index, MPVQ-index, dim and N_MPVQ + *-------------------------------------------------------------------------*/ + +/*! r: leading_sign_index, index, size, k_val */ +PvqEntry mpvq_encode_vec( + const int16_t *vec_in, /* i : signed pulse train */ + const int16_t dim_in, /* i : dimension */ + int16_t k_val_local /* i/o: nb unit pulses */ +) +{ + PvqEntry result; + uint32_t h_mem[1 + KMAX_NON_DIRECT + 1]; /* allocate max offset memory for dim 6 */ + /* OPT: actually only 1+k_val_in+1 needed ) */ + uint32_t lead_sign_ind; + + VEC2INDFUNCM vec2mind_f[1 + N_OPT] = { NULL, vec2mind_one, vec2mind_two, vec2mind_three, vec2mind_four, vec2mind_five }; + /* VEC2INDFUNCM can be a static global */ + + + result.k_val = k_val_local; + result.dim = dim_in; + + /* NB, k_val_local may be changed in some sub encoding routines */ + if ( dim_in > N_OPT ) /* use the generic dimension function */ + { + vec2mind( dim_in, k_val_local, vec_in, &lead_sign_ind, &result.index, &result.size, h_mem ); + } + else /* if (dim_in<=N_OPT) */ + { + ( vec2mind_f[dim_in] )( vec_in, &k_val_local, &lead_sign_ind, &result.index ); + result.size = direct_msize( dim_in, k_val_local ); /* k_val_local not used for dim==1 */ + } + result.lead_sign_ind = (int16_t) lead_sign_ind; + + return result; +} + +/*-------------------------------------------------------------------* + * get_size_mpvq_calc_offset() + * + * uint32_t h_mem[1 + KMAX +1 ]; + * example using fixed size of offset vector input help variable + *-------------------------------------------------------------------*/ + +/*! r: size, dim, k_val */ +PvqEntry get_size_mpvq_calc_offset( + const int16_t dim_in, /* i : dimension */ + const int16_t k_val_in, /* i : nb unit pulses */ + uint32_t *h_mem /* o : offsets */ +) +{ + PvqEntry entry; + + entry.dim = dim_in; + entry.k_val = k_val_in; + entry.index = 0U; /* avoid gcc warning in struct passing */ + entry.lead_sign_ind = 0; /* avoid gcc warning in struct passing */ + if ( dim_in > N_OPT ) /* non-direct solutions, use A+U relation */ + { + entry.size = nm_h_prep_opt( entry.dim, entry.k_val, h_mem ); + } + else + { + entry.size = direct_msize( dim_in, entry.k_val ); /* ues equations, h_mem is not used */ + } + + + return entry; +} + +/*-------------------------------------------------------------------* + * mpvq_decode_vec() + *-------------------------------------------------------------------*/ + +/*! r: void */ +void mpvq_decode_vec( + const PvqEntry *entry, /* i : sign_ind, index, dim, k_val */ + uint32_t *h_mem, /* i : A/U offsets */ + int16_t *vec_out /* o : pulse train */ +) +{ + int16_t i, leading_sign; + IND2VECFUNCM mind2vec_f[N_OPT + 1] = { NULL, mind2vec_one, mind2vec_two, mind2vec_three, mind2vec_four, mind2vec_five }; + /*IND2VECFUNCM vector can be static global */ + + for ( i = 0; i < entry->dim; i++ ) + { + vec_out[i] = ZERO; /* set all of short output vector to zero */ + } + + leading_sign = 1; + if ( entry->lead_sign_ind ) + { + leading_sign = -1; + } + + if ( entry->k_val != 0 ) + { + if ( entry->dim > N_OPT ) /* N_OPT */ + { + /* generic */ + mind2vec( entry->dim, entry->k_val, leading_sign, entry->index, vec_out, h_mem ); + } + else + { + /* specialized functions */ + ( mind2vec_f[entry->dim] )( entry->k_val, leading_sign, entry->index, vec_out ); + } + } + return; +} + +#ifdef ONE_U +#undef ZERO +#undef ONE +#undef ONE_U +#undef TWO +#undef MAXBIT +#undef MINNEG +#undef SIGNBIT +#undef UDIVBY3 +#endif + +#endif diff --git a/lib_com/int_lsp.c b/lib_com/int_lsp.c new file mode 100644 index 0000000000..5e1175ab1e --- /dev/null +++ b/lib_com/int_lsp.c @@ -0,0 +1,180 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * int_lsp() + * + * Find the interpolated LSP parameters for all subframes + *---------------------------------------------------------------------*/ + +void int_lsp( + const int16_t L_frame, /* i : length of the frame */ + const float lsp_old[], /* i : LSPs from past frame */ + const float lsp_new[], /* i : LSPs from present frame */ + float *Aq, /* o : LP coefficients in both subframes */ + const int16_t m, /* i : order of LP filter */ + const float *int_coeffs, /* i : interpolation coefficients */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +) +{ + float lsp[M], fnew, fold; + int16_t i, k; + const float *pt_int_coeffs; + + if ( L_frame == L_FRAME ) + { + pt_int_coeffs = int_coeffs; + } + else /* L_frame == L_FRAME16k */ + { + pt_int_coeffs = interpol_frac_16k; + } + + for ( k = 0; k < L_frame / L_SUBFR; k++ ) + { + fnew = pt_int_coeffs[k]; + fold = (float) ( 1.0f - fnew ); + + for ( i = 0; i < m; i++ ) + { + lsp[i] = lsp_old[i] * fold + lsp_new[i] * fnew; + } + + if ( Opt_AMR_WB ) + { + isp2a( lsp, Aq, m ); + } + else + { + lsp2a_stab( lsp, Aq, m ); + } + + Aq += ( m + 1 ); + } + + return; +} + +/*---------------------------------------------------------------------* + * int_lsp4() + * + * Interpolate LSPs find the A[z] parameters for all subframes by interpolating between + * old end-frame LSPs, current mid-frame LSPs and current end-frame LSPs + *---------------------------------------------------------------------*/ + +void int_lsp4( + const int16_t L_frame, /* i : length of the frame */ + const float lsp_old[], /* i : LSPs from past frame */ + const float lsp_mid[], /* i : LSPs from mid-frame */ + const float lsp_new[], /* i : LSPs from present frame */ + float *Aq, /* o : LP coefficients in both subframes */ + const int16_t m, /* i : order of LP filter */ + int16_t relax_prev_lsf_interp /* i : relax prev frame lsf interp after erasure */ +) +{ + float lsp[M]; + int16_t i; + int16_t j; + const float *pt_int_coeffs; + + if ( L_frame == L_FRAME ) + { + if ( relax_prev_lsf_interp == 1 ) + { + pt_int_coeffs = interpol_frac_mid_relaxprev_12k8; + } + else if ( relax_prev_lsf_interp == 2 ) + { + pt_int_coeffs = interpol_frac_mid_FEC; + } + else if ( relax_prev_lsf_interp == -1 ) + { + pt_int_coeffs = interpol_frac_mid_relaxprev_pred_12k8; + } + else if ( relax_prev_lsf_interp == -2 ) + { + pt_int_coeffs = interpol_frac2_mid; + } + else + { + pt_int_coeffs = interpol_frac_mid; + } + } + else /* L_frame == L_FRAME16k */ + { + if ( relax_prev_lsf_interp == 1 ) + { + pt_int_coeffs = interpol_frac_mid_relaxprev_16k; + } + else if ( relax_prev_lsf_interp == 2 ) + { + pt_int_coeffs = interpol_frac_mid_16k_FEC; + } + else if ( relax_prev_lsf_interp == -1 ) + { + pt_int_coeffs = interpol_frac_mid_relaxprev_pred_16k; + } + else + { + pt_int_coeffs = interpol_frac_mid_16k; + } + } + + for ( j = 0; j < L_frame / L_SUBFR; j++ ) + { + for ( i = 0; i < m; i++ ) + { + lsp[i] = lsp_old[i] * ( *pt_int_coeffs ) + lsp_mid[i] * ( *( pt_int_coeffs + 1 ) ) + lsp_new[i] * ( *( pt_int_coeffs + 2 ) ); + } + pt_int_coeffs += 3; + + lsp2a_stab( lsp, Aq, m ); + + Aq += ( m + 1 ); + } + + return; +} diff --git a/lib_com/interleave_spectrum.c b/lib_com/interleave_spectrum.c new file mode 100644 index 0000000000..ae1432a1eb --- /dev/null +++ b/lib_com/interleave_spectrum.c @@ -0,0 +1,208 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * interleave_spectrum() + * + * Interleave the spectrum + *--------------------------------------------------------------------------*/ + +void interleave_spectrum( + float *coefs, /* i/o: input and output coefficients */ + const int16_t length /* i : length of spectrum */ +) +{ + int16_t i, j, k; + float *p1, *p2, *p3, *p4; + float *p_out; + float coefs_out[STOP_BAND]; + int16_t sublen; + int16_t grps; + const int16_t *bw; + const int16_t *cnt; + int16_t l_frame; + + l_frame = length; + + if ( length == L_SPEC48k ) + { + bw = intl_bw_48; + cnt = intl_cnt_48; + grps = N_INTL_GRP_48; + l_frame = L_FRAME48k; + } + else if ( length == L_SPEC32k ) + { + bw = intl_bw_32; + cnt = intl_cnt_32; + grps = N_INTL_GRP_32; + } + else /* length == L_SPEC16k */ + { + bw = intl_bw_16; + cnt = intl_cnt_16; + grps = N_INTL_GRP_16; + } + + sublen = l_frame / 4; + p1 = coefs; + p2 = coefs + sublen; + p3 = coefs + sublen * 2; + p4 = coefs + sublen * 3; + p_out = coefs_out; + + for ( i = 0; i < grps; i++ ) + { + for ( j = 0; j < cnt[i]; j++ ) + { + for ( k = 0; k < bw[i]; k++ ) + { + *p_out++ = *p1++; + } + + for ( k = 0; k < bw[i]; k++ ) + { + *p_out++ = *p2++; + } + + for ( k = 0; k < bw[i]; k++ ) + { + *p_out++ = *p3++; + } + + for ( k = 0; k < bw[i]; k++ ) + { + *p_out++ = *p4++; + } + } + } + + /* For FB the interleaved spectrum is 800 samples */ + mvr2r( coefs_out, coefs, (int16_t) ( p_out - coefs_out ) ); + + return; +} + + +/*--------------------------------------------------------------------------* + * de_interleave_spectrum() + * + * Deinterleave the spectrum + *--------------------------------------------------------------------------*/ + +void de_interleave_spectrum( + float *coefs, /* i/o: input and output coefficients */ + int16_t length /* i : length of spectrum */ +) +{ + int16_t i, j, k; + float *p1, *p2, *p3, *p4; + float *p_in; + float coefs_out[L_FRAME48k]; + int16_t sublen; + int16_t grps; + const int16_t *bw; + const int16_t *cnt; + int16_t l_frame; + + l_frame = length; + + if ( length == L_SPEC48k ) + { + bw = intl_bw_48; + cnt = intl_cnt_48; + grps = N_INTL_GRP_48; + l_frame = L_FRAME48k; + } + else if ( length == L_FRAME32k ) + { + bw = intl_bw_32; + cnt = intl_cnt_32; + grps = N_INTL_GRP_32; + } + else /* length == L_FRAME16k */ + { + bw = intl_bw_16; + cnt = intl_cnt_16; + grps = N_INTL_GRP_16; + } + + set_f( coefs_out, 0, L_FRAME48k ); + + sublen = l_frame / 4; + p1 = coefs_out; + p2 = coefs_out + sublen; + p3 = coefs_out + sublen * 2; + p4 = coefs_out + sublen * 3; + p_in = coefs; + + for ( i = 0; i < grps; i++ ) + { + for ( j = 0; j < cnt[i]; j++ ) + { + for ( k = 0; k < bw[i]; k++ ) + { + *p1++ = *p_in++; + } + for ( k = 0; k < bw[i]; k++ ) + { + *p2++ = *p_in++; + } + for ( k = 0; k < bw[i]; k++ ) + { + *p3++ = *p_in++; + } + for ( k = 0; k < bw[i]; k++ ) + { + *p4++ = *p_in++; + } + } + } + + mvr2r( coefs_out, coefs, l_frame ); + + return; +} diff --git a/lib_com/interpol.c b/lib_com/interpol.c new file mode 100644 index 0000000000..da4b41a9f9 --- /dev/null +++ b/lib_com/interpol.c @@ -0,0 +1,80 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * interpolation() + * + * Fractional interpolation of signal at position (frac/resol) + *-------------------------------------------------------------------*/ + +/*! r: interpolated value */ +float interpolation( + const float *x, /* i : input vector */ + const float *win, /* i : interpolation window */ + const int16_t frac, /* i : fraction */ + const int16_t up_samp, /* i : upsampling factor */ + const int16_t nb_coef /* i : nb of filter coef */ +) +{ + int16_t i; + float s; + const float *x1, *x2, *c1, *c2; + + x1 = &x[0]; + x2 = &x[1]; + c1 = &win[frac]; + c2 = &win[up_samp - frac]; + s = 0.0f; + + for ( i = 0; i < nb_coef; i++ ) + { + s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); +#define WMC_TOOL_MAN + c1 += up_samp; + c2 += up_samp; +#undef WMC_TOOL_MAN + } + + return s; +} diff --git a/lib_com/isf_dec_amr_wb.c b/lib_com/isf_dec_amr_wb.c new file mode 100644 index 0000000000..79eeda7b54 --- /dev/null +++ b/lib_com/isf_dec_amr_wb.c @@ -0,0 +1,289 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * isf_dec_amr_wb() + * + * Decoding of ISF parameters in AMR-WB IO mode + *---------------------------------------------------------------------*/ + +void isf_dec_amr_wb( + Decoder_State *st, /* i/o: State structure */ + float *Aq, /* o : quantized A(z) for 4 subframes */ + float *isf_new, /* o : de-quantized ISF vector */ + float *isp_new /* o : de-quantized ISP vector */ +) +{ + int16_t i; + int16_t indice[7]; + + set_s( indice, -1, 7 ); + + /*---------------------------------* + * ISF de-quantization of SID frames + *---------------------------------*/ + + if ( st->core_brate == SID_1k75 ) + { + indice[0] = get_next_indice( st, 6 ); + indice[1] = get_next_indice( st, 6 ); + indice[2] = get_next_indice( st, 6 ); + indice[3] = get_next_indice( st, 5 ); + indice[4] = get_next_indice( st, 5 ); + + disf_ns_28b( indice, isf_new ); + + reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); + + isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); + + /* return if SID frame (conversion to A(z) done in the calling function) */ + return; + } + + /*-----------------------------------------------------------------* + * ISF de-quantization of all other frames + *-----------------------------------------------------------------*/ + + if ( st->core_brate == ACELP_6k60 ) + { + indice[0] = get_next_indice( st, 8 ); + indice[1] = get_next_indice( st, 8 ); + indice[2] = get_next_indice( st, 7 ); + indice[3] = get_next_indice( st, 7 ); + indice[4] = get_next_indice( st, 6 ); + + disf_2s_36b( indice, isf_new, st->mem_AR, st->mem_MA ); + } + else + { + indice[0] = get_next_indice( st, 8 ); + indice[1] = get_next_indice( st, 8 ); + indice[2] = get_next_indice( st, 6 ); + indice[3] = get_next_indice( st, 7 ); + indice[4] = get_next_indice( st, 7 ); + indice[5] = get_next_indice( st, 5 ); + indice[6] = get_next_indice( st, 5 ); + + disf_2s_46b( indice, isf_new, st->mem_AR, st->mem_MA ); + } + + reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); + + /* convert quantized ISFs to ISPs */ + isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); + + /*-------------------------------------------------------------------------------------* + * FEC - update adaptive mean ISF vector + *-------------------------------------------------------------------------------------*/ + + for ( i = 0; i < M; i++ ) + { + st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + isf_new[i] ) / 3; + } + + /*-------------------------------------------------------------------------------------* + * ISP interpolation + * A(z) calculation + *-------------------------------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + /*extrapolation instead of interpolation*/ + mvr2r( isp_new, st->lsp_old, M ); + mvr2r( isf_new, st->lsf_old, M ); + } + + /* ISP interpolation and A(z) calculation */ + int_lsp( L_FRAME, st->lsp_old, isp_new, Aq, M, interpol_isp_amr_wb, 1 ); + + /*------------------------------------------------------------------* + * Check ISF stability : distance between old ISF and current ISF + *------------------------------------------------------------------*/ + + st->stab_fac = lsf_stab( isf_new, st->lsf_old, 1, st->L_frame ); + + return; +} + +/*-------------------------------------------------------------------* + * disf_ns_28b() + * + * ISF de-quantizer for SID_1k75 frames (only for AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +void disf_ns_28b( int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ + float *isf_q /* o : ISF in the frequency domain (0..6400) */ +) +{ + int16_t i; + + for ( i = 0; i < 2; i++ ) + { + isf_q[i] = dico1_ns_28b[indice[0] * 2 + i]; + } + + for ( i = 0; i < 3; i++ ) + { + isf_q[i + 2] = dico2_ns_28b[indice[1] * 3 + i]; + isf_q[i + 5] = dico3_ns_28b[indice[2] * 3 + i]; + } + + for ( i = 0; i < 4; i++ ) + { + isf_q[i + 8] = dico4_ns_28b[indice[3] * 4 + i]; + isf_q[i + 12] = dico5_ns_28b[indice[4] * 4 + i]; + } + + for ( i = 0; i < M; i++ ) + { + isf_q[i] += mean_isf_noise_amr_wb[i]; + } + + return; +} + +/*-------------------------------------------------------------------* + * disf_2s_46b() + * + * ISF de-quantizer for 46b. codebooks (only for AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +void disf_2s_46b( + int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ + float *isf_q, /* o : quantized ISFs in the cosine domain */ + float *mem_AR, /* o : quantizer memory for AR model */ + float *mem_MA /* i/o: quantizer memory for MA model */ +) +{ + int16_t i; + + for ( i = 0; i < 9; i++ ) + { + isf_q[i] = dico1_isf[indice[0] * 9 + i]; + } + + for ( i = 0; i < 7; i++ ) + { + isf_q[i + 9] = dico2_isf[indice[1] * 7 + i]; + } + + for ( i = 0; i < 3; i++ ) + { + isf_q[i] += dico21_isf_46b[indice[2] * 3 + i]; + isf_q[i + 3] += dico22_isf_46b[indice[3] * 3 + i]; + isf_q[i + 6] += dico23_isf_46b[indice[4] * 3 + i]; + isf_q[i + 9] += dico24_isf_46b[indice[5] * 3 + i]; + } + + for ( i = 0; i < 4; i++ ) + { + isf_q[i + 12] += dico25_isf_46b[indice[6] * 4 + i]; + } + + for ( i = 0; i < M; i++ ) + { + mem_AR[i] = (float) ( isf_q[i] + MU_MA * mem_MA[i] ); /* Update with quantized ISF vector for AR model */ + mem_MA[i] = isf_q[i]; /* Update with quantized prediction error for MA model */ + isf_q[i] = mem_AR[i] + mean_isf_amr_wb[i]; /* Quantized ISFs */ + } + + return; +} + + +/*-------------------------------------------------------------------* + * disf_2s_36b() + * + * ISF de-quantizer for 36b. codebooks (only for AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +void disf_2s_36b( + int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ + float *isf_q, /* o : quantized ISFs in the cosine domain */ + float *mem_AR, /* i/o: quantizer memory for AR model */ + float *mem_MA /* i/o: quantizer memory for MA model */ +) +{ + int16_t i; + const float *pt_dico1; + + pt_dico1 = dico1_isf; /* Pointer of the 1st stage, 1st plit */ + + for ( i = 0; i < 9; i++ ) + { + isf_q[i] = pt_dico1[indice[0] * 9 + i]; + } + + for ( i = 0; i < 7; i++ ) + { + isf_q[i + 9] = dico2_isf[indice[1] * 7 + i]; + } + + for ( i = 0; i < 5; i++ ) + { + isf_q[i] += dico21_isf_36b[indice[2] * 5 + i]; + } + + for ( i = 0; i < 4; i++ ) + { + isf_q[i + 5] += dico22_isf_36b[indice[3] * 4 + i]; + } + + for ( i = 0; i < 7; i++ ) + { + isf_q[i + 9] += dico23_isf_36b[indice[4] * 7 + i]; + } + + for ( i = 0; i < M; i++ ) + { + mem_AR[i] = (float) ( isf_q[i] + MU_MA * mem_MA[i] ); /* Update with quantized ISF vector for AR model */ + mem_MA[i] = isf_q[i]; /* Update with quantized prediction error for MA model */ + isf_q[i] = mem_AR[i] + mean_isf_amr_wb[i]; /* Quantized ISFs */ + } + + return; +} diff --git a/lib_com/ivas_agc_com.c b/lib_com/ivas_agc_com.c new file mode 100644 index 0000000000..d7a174fe65 --- /dev/null +++ b/lib_com/ivas_agc_com.c @@ -0,0 +1,129 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "wmops.h" + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define SQRKMAX ( 1.5f ) +#define NBITS_DIFFG ( 2 ) + +/*-----------------------------------------------------------------------------------------* + * Function ivas_agc_initWindowFunc() + * + * Get a window function + *-----------------------------------------------------------------------------------------*/ + +void ivas_agc_initWindowFunc( + float *pWinFunc, + const int16_t length ) +{ + int16_t i; + float N; + + N = (float) ( length - 1 ); + + for ( i = 0; i < length; i++ ) + { + pWinFunc[i] = 0.75f + 0.25f * cosf( EVS_PI * i / N ); + } + + return; +} + +/*-----------------------------------------------------------------------------------------* + * Function ivas_agc_calcGainParams() + * + * Calculate gain parameters + *-----------------------------------------------------------------------------------------*/ + +void ivas_agc_calcGainParams( + uint16_t *absEmin, + uint16_t *betaE, + uint16_t *maxAttExp, + const int16_t numCoeffs ) +{ + int16_t totExp; + int16_t Bm; + int16_t nbits; + + nbits = NBITS_DIFFG; + + *absEmin = (uint16_t) ceilf( logf( ceilf( SQRKMAX * numCoeffs ) ) * INV_LOG_2 ); + + totExp = *absEmin + AGC_EMAX + 1; + *betaE = (uint16_t) ceilf( logf( totExp ) * INV_LOG_2 ); + + Bm = (uint16_t) ceilf( logf( ( AGC_EMAX + 1 + 1 ) ) * INV_LOG_2 ); + + if ( nbits > 0 ) + { + Bm = NBITS_DIFFG; + } + + *maxAttExp = ( (uint16_t) powf( 2, Bm ) ) - 2; + + return; +} + +#ifdef DEBUG_AGC +/*-----------------------------------------------------------------------------------------* + * Function ivas_agc_debug_inout() + * + * + *-----------------------------------------------------------------------------------------*/ +int16_t ivas_agc_debug_inout( FILE *inStream, float **in, int16_t n_channels, int16_t frame_len ) +{ + if ( inStream == NULL ) + { + return TRUE; + } + + for ( int16_t i = 0; i < n_channels; i++ ) + { + fwrite( &in[i][0], sizeof( float ), frame_len, inStream ); + } + + return FALSE; +} +#endif diff --git a/lib_com/ivas_arith.c b/lib_com/ivas_arith.c new file mode 100644 index 0000000000..9edbf5f53c --- /dev/null +++ b/lib_com/ivas_arith.c @@ -0,0 +1,292 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "prot.h" +#include "ivas_prot.h" +#include "stat_dec.h" + +/*-----------------------------------------------------------------------------------------* + * Function ivas_ari_start_decoding_14bits_ext_1_lfe() + * + * Start arithemetic coding + * + * Similar to ari_start_decoding_14bits(), but do not read past frame boundary. + *-----------------------------------------------------------------------------------------*/ + +void ivas_ari_start_decoding_14bits_ext_1_lfe( + Decoder_State *st, + Tastat *s, + int16_t *extra_bits_read ) +{ + int32_t val; + + if ( st->bits_frame >= ( st->next_bit_pos + cbitsnew ) ) + { + val = get_next_indice( st, cbitsnew ); + } + else + { + int16_t rem_bits; + rem_bits = st->bits_frame - st->next_bit_pos; + val = get_next_indice( st, rem_bits ); + val = ( val << ( cbitsnew - rem_bits ) ); + *extra_bits_read = *extra_bits_read + ( cbitsnew - rem_bits ); + } + + s->low = 0; + s->high = ari_q4new; + s->value = val; + + return; +} + + +/* Helper function to determine the symbol. */ +static uint16_t ivas_ari_get_symbol( + const uint16_t *p, + uint32_t range, + uint32_t cum ) +{ + uint16_t symbol; + + symbol = 0; + + while ( ( p[symbol + 1] * range ) > cum ) + { + symbol = symbol + 1; + } + + return symbol; +} + + +uint16_t ivas_ari_decode_14bits_bit_ext_1_lfe( + Decoder_State *st, + Tastat *s, + const uint16_t *cum_freq, + int16_t *extra_bits_read ) +{ + uint16_t symbol; + uint32_t low, high, range, value; + uint32_t cum; + + /* read s->low,high,value sequentially */ + low = s->low; + high = s->high; + value = s->value; + + range = high - low + 1; + cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); + + symbol = ivas_ari_get_symbol( cum_freq, range, cum ); + + high = low + mul_sbc_14bits( range, cum_freq[symbol] ) - 1; + low += mul_sbc_14bits( range, cum_freq[symbol + 1] ); + + for ( ;; ) + { + if ( high >= ari_q2new ) + { + if ( low >= ari_q2new ) + { + value -= ari_q2new; + low -= ari_q2new; + high -= ari_q2new; + } + else + { + if ( low >= ari_q1new && high < ari_q3new ) + { + value -= ari_q1new; + low -= ari_q1new; + high -= ari_q1new; + } + else + { + break; + } + } + } + low += low; + high += high + 1; + + if ( st->next_bit_pos >= st->bits_frame ) + { + value = ( value << 1 ); + *extra_bits_read = *extra_bits_read + 1; + } + else + { + value = ( value << 1 ) | get_next_indice_1( st ); + } + } + + s->low = low; + s->high = high; + s->value = value; + + return symbol; +} + + +void ivas_ari_done_decoding_14bits_ext_1_lfe( + Decoder_State *st, + const int16_t extra_bits_read ) +{ + get_next_indice_tmp( st, -( cbitsnew - 2 - extra_bits_read ) ); + + return; +} + + +/*--------------------------------------------------------------- + * Function ivas_ari_done_encoding_14bits() + * + * Arith encoding of last table entry + *-------------------------------------------------------------*/ + +void ivas_ari_done_encoding_14bits( + BSTR_ENC_HANDLE hBstr, + Tastat *s ) +{ + int32_t low; + int32_t bits_to_follow; + + /* not needed, s points to s->low */ + low = s->low; + bits_to_follow = s->bits_to_follow + 1; + + if ( low < ari_q1new ) + { + push_next_indice( hBstr, 0, 1 ); /*send a zero*/ + + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + push_next_indice( hBstr, 1, 1 ); /*send a one*/ + } + } + else + { + push_next_indice( hBstr, 1, 1 ); /*send a one*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + push_next_indice( hBstr, 0, 1 ); /*send a zero*/ + } + } + + /*It is done so no need to save values-> no counting*/ + /*s->low = low; + s->bits_to_follow = bits_to_follow;*/ + + return; +} + +/*--------------------------------------------------------------- + * Function ivas_ari_encode_14bits_ext() + * + * Arith encode function for extended proba tables + *-------------------------------------------------------------*/ + +void ivas_ari_encode_14bits_ext( + BSTR_ENC_HANDLE hBstr, + Tastat *s, + int32_t symbol, + const uint16_t *cum_freq ) +{ + int32_t low, high, range; + int32_t bits_to_follow; + + /*for all operation using bit_ptr=&ptr[bp] */ + /* for reading s->high,low,bits_to_follow sequentially */ + high = s->high; + low = s->low; + range = high - low + 1; + + high = low + mul_sbc_14bits( range, cum_freq[symbol] ) - 1; + low += mul_sbc_14bits( range, cum_freq[symbol + 1] ); + + bits_to_follow = s->bits_to_follow; + + for ( ;; ) + { + if ( high < ari_q2new ) + { + push_next_indice( hBstr, 0, 1 ); /*send a zero*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + push_next_indice( hBstr, 1, 1 ); /*send a one*/ + } + } + else + { + if ( low >= ari_q2new ) + { + push_next_indice( hBstr, 1, 1 ); /*send a one*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + push_next_indice( hBstr, 0, 1 ); /*send a zero*/ + } + low -= ari_q2new; + high -= ari_q2new; /* Subtract offset to top. */ + } + else + { + /* Output an opposite bit */ + if ( low >= ari_q1new && high < ari_q3new ) /* Output an opposite bit */ + { + /* later if in middle half. */ + bits_to_follow += 1; + low -= ari_q1new; /* Subtract offset to middle*/ + high -= ari_q1new; + } + else + { + break; /* Otherwise exit loop. */ + } + } + } + low += low; + high += high + 1; /* Scale up code range. */ + } + + s->low = low; + s->high = high; + s->bits_to_follow = bits_to_follow; + + return; +} diff --git a/lib_com/ivas_avq_pos_reorder_com.c b/lib_com/ivas_avq_pos_reorder_com.c new file mode 100644 index 0000000000..66152d26fd --- /dev/null +++ b/lib_com/ivas_avq_pos_reorder_com.c @@ -0,0 +1,66 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * ordr_esti() + * + * + *-----------------------------------------------------------------*/ + +void ordr_esti( + const int16_t svLength, /* i : sub-vector index */ + int16_t *Mpos, /* i/o: dominant sub-vector position from ACV */ + int16_t svOrder[], /* i/o: AVQ sub-vecotr order */ + const int16_t Nsv /* i : total sub-vectors in a sub-frames */ +) +{ + int16_t i, tmp; + + tmp = svOrder[0]; + svOrder[0] = *Mpos; + *Mpos = Nsv - 1; + + for ( i = 1; i < svLength; tmp++, i++ ) + { + svOrder[i] = tmp; + } + + return; +} diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h new file mode 100644 index 0000000000..f7f69ae3ea --- /dev/null +++ b/lib_com/ivas_cnst.h @@ -0,0 +1,1552 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_CNST_H +#define IVAS_CNST_H + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_error.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * mathematical constants + *----------------------------------------------------------------------------------*/ + +#define PI_OVER_2 ( EVS_PI / 2.0f ) +#define PI_OVER_180 ( EVS_PI / 180.0f ) +#define _180_OVER_PI ( 180.0f / EVS_PI ) + +#define SQRT2 1.414213562373095f + +#define INV_SQRT2 7.071067811865475e-1f /* 1/sqrt(2) */ +#define INV_SQRT3 0.577350269189626f /* 1/sqrt(3) */ + +#define LOG_10 2.30258509299f + +#define SQRT2_OVER_2 (SQRT2 / 2.0f) + +#define ALIGN8(x) ((((x)+7) >> 3) << 3) + +/*----------------------------------------------------------------------------------* + * IVAS formats + *----------------------------------------------------------------------------------*/ + +typedef enum +{ + UNDEFINED_FORMAT, + MONO_FORMAT, /* EVS mono processing */ + STEREO_FORMAT, /* IVAS stereo format */ + ISM_FORMAT, /* IVAS ISM (objects-coding) format */ + SBA_FORMAT, /* IVAS SBA (ambisonics) format */ + MASA_FORMAT, /* IVAS MASA format */ + MC_FORMAT, /* IVAS multi-channel format */ + +} IVAS_FORMAT; + + +/*----------------------------------------------------------------------------------* + * IVAS format signaling + *----------------------------------------------------------------------------------*/ + +#define IVAS_FORMAT_SIGNALING_NBITS 2 /* number of bits for signaling the IVAS format */ +#define IVAS_FORMAT_SIGNALING_NBITS_SBA ( IVAS_FORMAT_SIGNALING_NBITS + 1 ) + + +/*----------------------------------------------------------------------------------* + * IVAS output audio configurations + *----------------------------------------------------------------------------------*/ + +typedef enum +{ + AUDIO_CONFIG_INVALID, + AUDIO_CONFIG_MONO, /* mono output */ + AUDIO_CONFIG_STEREO, /* stereo output */ + AUDIO_CONFIG_5_1, /* 5.1 speakers layout CICP6 */ + AUDIO_CONFIG_7_1, /* 7.1 speakers layout CICP12 */ + AUDIO_CONFIG_5_1_2, /* 5.1+2 speakers layout CICP14 */ + AUDIO_CONFIG_5_1_4, /* 5.1+4 speakers layout CICP16 */ + AUDIO_CONFIG_7_1_4, /* 7.1+4 speakers layout CICP19 */ + AUDIO_CONFIG_LS_CUSTOM, /* custom loudspeaker layout */ + AUDIO_CONFIG_FOA, /* ambisonics, order 1 */ + AUDIO_CONFIG_HOA2, /* ambisonics, order 2 */ + AUDIO_CONFIG_HOA3, /* ambisonics, order 3 */ + AUDIO_CONFIG_OBA, /* object based audio */ + AUDIO_CONFIG_BINAURAL, /* binaural with HRIR */ + AUDIO_CONFIG_BINAURAL_ROOM, /* binaural with HRIR and BRIR */ + AUDIO_CONFIG_ISM1, /* ISM1 */ + AUDIO_CONFIG_ISM2, /* ISM2 */ + AUDIO_CONFIG_ISM3, /* ISM3 */ + AUDIO_CONFIG_ISM4, /* ISM4 */ + AUDIO_CONFIG_EXTERNAL /* external renderer */ + +} AUDIO_CONFIG; + +#ifdef DEBUGGING +typedef enum +{ + RENDER_TYPE_OVERRIDE_NONE, + RENDER_TYPE_OVERRIDE_CREND, + RENDER_TYPE_OVERRIDE_FASTCONV +} ivas_renderTypeOverride; +#endif + +/*----------------------------------------------------------------------------------* + * IVAS rendering configurations + *----------------------------------------------------------------------------------*/ + +/* Rendering convention rules: + * 1) "st_ivas->renderer_type" reflects always the last rendering stage in the processing + * 2) in some configurations, more rendering stages are used + * - renderers at the last stage, like RENDERER_BINAURAL_xxx, consider uniquely "st_ivas->hOutputSetup" + * - renderers that can be followed by an additional rendering stage, e.g. RENDERER_DIRAC, consider uniquely "st_ivas->hIntSetup" + * 3) in case of a single rendering stage: "hIntSetup=hOutputSetup" + * 4) In case of no rendering stage: "hTransSetup=hIntSetup=hOutputSetup" */ + +typedef enum +{ + RENDERER_DISABLE, + RENDERER_TD_PANNING, + RENDERER_BINAURAL_FASTCONV, + RENDERER_BINAURAL_FASTCONV_ROOM, + RENDERER_BINAURAL_PARAMETRIC, + RENDERER_BINAURAL_PARAMETRIC_ROOM, + RENDERER_BINAURAL_OBJECTS_TD, + RENDERER_DIRAC, + RENDERER_MC, + RENDERER_MC_PARAMMC, + RENDERER_SBA_LINEAR_DEC, + RENDERER_SBA_LINEAR_ENC, + RENDERER_STEREO_PARAMETRIC, + RENDERER_MONO_DOWNMIX, + RENDERER_MCMASA_MONO_STEREO, + RENDERER_PARAM_ISM, + RENDERER_BINAURAL_MIXER_CONV, + RENDERER_BINAURAL_MIXER_CONV_ROOM + +} RENDERER_TYPE; + +/*----------------------------------------------------------------------------------* + * IVAS general constants + *----------------------------------------------------------------------------------*/ + +#define MAX_INPUT_CHANNELS 16 /* Maximum number of input channels */ +#define MAX_TRANSPORT_CHANNELS 12 /* Maximum number of transport channels */ +#define MAX_INTERN_CHANNELS 16 /* Maximum number of intern channels (HOA 3rd order) */ +#define HEAD_ROTATION_HOA_ORDER 3 /* HOA 3rd order */ +#define MAX_CICP_CHANNELS 16 /* max channels for loudspeaker layouts (16 for custom layouts)*/ +#define MAX_OUTPUT_CHANNELS 16 /* Maximum number of output channels (HOA 3rd order) */ +#define IVAS_MAX_NUM_CH 16 /* == MAX_OUTPUT_CHANNELS */ + +#define FOA_CHANNELS 4 /* number of FOA channels */ + +#define BINAURAL_CHANNELS 2 /* number of channels for binaural output configuration */ +#define CPE_CHANNELS 2 /* number of CPE (stereo) channels */ +#define MAX_NUM_OBJECTS 4 /* max. number of audio objects */ + +#define MAX_SCE MAX_NUM_OBJECTS /* max. number of SCEs */ +#define MAX_CPE ( MAX_TRANSPORT_CHANNELS / CPE_CHANNELS ) /* max. number of CPEs */ + +#define MAX_BITS_METADATA 2640 /* max. bit-budget of metadata, one channel */ /* IVAS_fmToDo: to be confirmed for final value once mature */ +#define MAX_NUM_METADATA max( 2, MAX_NUM_OBJECTS ) /* number of max. metadata (now only 2 for DirAC) */ + + +#define IVAS_ENC_DELAY_NS ACELP_LOOK_NS +#define IVAS_DEC_DELAY_NS 3250000L /* 3.25 ms: IVAS decoder delay (without renderer delay) */ + +#define DELAY_FB_1_NS 1000000L /* 1.00 ms: filter-bank delay */ +#define DELAY_FB_4_NS 4000000L /* 4.00 ms: filter-bank delay */ + +#define IVAS_FB_ENC_DELAY_NS DELAY_FB_1_NS /* 1.00 ms: IVAS encoder filter-bank delay */ +#define IVAS_FB_DEC_DELAY_NS 5000000L /* 5.00 ms: IVAS decoder/renderer filter-bank delay */ + +#define IVAS_MAX_SBA_ORDER 3 /* Maximum supported Ambisonics order */ + + +/*----------------------------------------------------------------------------------* + * IVAS Bitrates + *----------------------------------------------------------------------------------*/ + +#define IVAS_SID_4k4 4400 /* SID frame bitrate */ +#define IVAS_SID_5k 5000 /* SBA SID frame bitrate */ +#define IVAS_13k2 13200 +#define IVAS_16k4 16400 +#define IVAS_24k4 24400 +#define IVAS_32k 32000 +#define IVAS_48k 48000 +#define IVAS_64k 64000 +#define IVAS_80k 80000 +#define IVAS_96k 96000 +#define IVAS_128k 128000 +#define IVAS_160k 160000 +#define IVAS_192k 192000 +#define IVAS_256k 256000 +#define IVAS_384k 384000 +#define IVAS_512k 512000 + +#define IVAS_BRATE_MAX IVAS_512k + +#define SIZE_IVAS_BRATE_TBL 17 +#define IVAS_NUM_ACTIVE_BRATES (SIZE_IVAS_BRATE_TBL - 3) + +/*----------------------------------------------------------------------------------* + * IVAS modes : IVAS SCE, IVAS CPE modes (DFT, TD, MDCT stereo) + *----------------------------------------------------------------------------------*/ + +#define EVS_MONO 0 /* EVS Mono BE operating mode */ +#define IVAS_SCE 1 /* IVAS SCE */ +#define IVAS_CPE_DFT 2 /* IVAS CPE: DFT-based parametric stereo */ +#define IVAS_CPE_TD 3 /* IVAS CPE: TD stereo */ +#define IVAS_CPE_MDCT 4 /* IVAS CPE: MDCT-based stereo */ + +#define MIN_BRATE_MDCT_STEREO IVAS_48k /* min. CPE bitrate where MDCT stereo is supported in stereo format coding */ + +#define PCA_BRATE IVAS_256k /* PCA supported bitrate */ + +#define NBITS_ELEMENT_MODE 1 /* number of bits to encode the stereo element mode */ +#define NBITS_BWIDTH 2 /* number of bits to encode all audio bandwidths */ + +/* format signalling in SID frames */ +#define SID_FORMAT_NBITS 3 /* Bit 0 | Bit 1 | Bit 2 */ + /*-------|-------|------ */ +#define SID_DFT_STEREO 0x0 /* 0| 0| 0 */ +#define SID_MDCT_STEREO 0x1 /* 1| 0| 0 */ +#define SID_ISM 0x2 /* 0| 1| 0 */ +#define SID_MASA_1TC 0x3 /* 1| 1| 0 */ +#define SID_MULTICHANNEL 0x4 /* 0| 0| 1 */ +#define SID_SBA_1TC 0x5 /* 1| 0| 1 */ +#define SID_SBA_2TC 0x6 /* 0| 1| 1 */ +#define SID_MASA_2TC 0x7 /* 1| 1| 1 */ + +/*----------------------------------------------------------------------------------* + * IVAS ACELP core constants + *----------------------------------------------------------------------------------*/ + +#define MIN_UNVOICED_TWO_STAGE_BRATE 7050 /* min. per channel bitrate where two stages UNVOICED is supported */ +#define MAX_UNVOICED_BRATE ACELP_13k20 /* max. per channel bitrate where UNVOICED is supported */ +#define MAX_VOICED_BRATE ACELP_13k20 /* max. per channel bitrate where VOICED is supported */ +#define MIN_TC_BRATE 6450 /* min. per channel bitrate where TRANSITION is supported */ +#define MAX_ACELP_BRATE 48000 /* max. per channel bitrate where ACELP core is supported */ + +#define ACELP_12k8_HIGH_LIMIT 24350 /* max. per channel bitrate where the ACELP@12.8kHz is supported */ +#define ACELP_16k_LOW_LIMIT 13250 /* min. per channel bitrate where the ACELP@16kHz is supported */ +#define SCE_CORE_16k_LOW_LIMIT 17000 /* min. SCE bitrate where the ACELP@16kHz is supported; must be >= (ACELP_16k_LOW_LIMIT + SWB_TBE_1k6) */ +#define MIN_BRATE_AVQ_EXC ACELP_29k00 /* min. per channel bitrate where the AVQ excitation stage is supported */ +#define MAX_BRATE_AVQ_EXC_TD 40000 /* max. per channel bitrate where the AVQ excitation stage in time domain is supported */ + +#define MAX_GSC_INACTIVE_BRATE 28000 /* max. per channel bitrate where GSC Inactive (@16kHz) is supported (max. 31950 to ensure BE with EVS mono) */ + +#define FRMT_SHP_MIN_BRATE_IVAS 18000 /* min. bitrate where formant-sharpening flag is transmitted; applies both to SCE and CPE */ + +#define CNA_MAX_BRATE_STEREO IVAS_16k4 /* max. stereo bitrate where CNA is supported */ +#define CNA_MAX_BRATE_DFT_STEREO IVAS_32k /* max. stereo bitrate where CNA is supported in DFT stereo */ + +#define MIN_BRATE_WB_BWE 7150 /* min. per channel bitrate where WB BWE info is encoded */ +#define MIN_BRATE_SWB_BWE 7800 /* min. per channel bitrate where SWB BWE info is encoded */ + +#define MIN_BRATE_GSC_NOISY_FLAG 12000 /* min. per channel bitrate where gsc_noisy_flag in SWB is supported */ +#define GSC_L_RATE_STG 15000 /* bitrate below will use low rate GSC settings */ +#define GSC_H_RATE_STG 20000 /* bitrates above will use high rate GSC settings */ + +#define MIN_BRATE_SWB_SCE ACELP_9k60 /* min. SCE bitrate where SWB is supported */ +#define MIN_BRATE_SWB_STEREO IVAS_13k2 /* min. stereo bitrate where SWB is supported */ +#define MIN_BRATE_FB_STEREO IVAS_32k /* min. SCE and stereo bitrate where FB is supported */ + +#define MIN_TDM_BRATE_WB_TBE_1k05 12000 /* min. per channel bitrate where WB TBE @1.05 kbps is supported (0.35kbs at lower bitrates) */ +#define MIN_BRATE_WB_TBE_1k05 9650 /* min. per channel bitrate where WB TBE @1.05 kbps is supported (0.35kbs at lower bitrates) */ +#define MIN_BRATE_SWB_TBE_1k60 13200 /* min. per channel bitrate where SWB TBE @1.60 kbps is supported (0.95 kbps at lower bitrates) */ +#define MIN_BRATE_SWB_TBE_2k80 24400 /* min. per channel bitrate where SWB TBE @2.80 kbps is supported */ +#define MIN_MIN_BRATE_LRTD_SWB_BWE 5000 + +#define STEREO_TCX_MIN_RATE 9000 /* TCX coding down to this per channel bitrate */ +#define STEREO_GSC_BIT_RATE_ALLOC 9200 +#define HQ_MDCTCLASS_CROSSOVER_BRATE 32000 /* MDCT classifier crossover bitrate between 24.4 and 32 kbps tunings*/ +#define HQ_BWE_CROSSOVER_BRATE 26000 /* HQ crossover bitrate between 24.4 and 32 kbps BWE tunings */ + + +/*----------------------------------------------------------------------------------* + * ISm Constants + *----------------------------------------------------------------------------------*/ + +#define META_LINE_LENGTH 200 /* max number of characters at one line of metadata input/output file */ + +#define ISM_NB_BITS_METADATA_NOMINAL ( ( SCE_CORE_16k_LOW_LIMIT - ACELP_16k_LOW_LIMIT ) / FRAMES_PER_SEC ) /* nominal number of metadata bits - used for configuration of Core-Coder modules */ + +#define ISM_METADATA_VAD_FLAG_BITS 1 +#define ISM_METADATA_FLAG_BITS 2 + +#define ISM_NO_META 0 +#define ISM_LOW_IMP 1 +#define ISM_MEDIUM_IMP 2 +#define ISM_HIGH_IMP 3 + +#define ISM_AZIMUTH_NBITS 7 +#define ISM_AZIMUTH_MIN -180.0f +#define ISM_AZIMUTH_MAX 180.0f +#define ISM_AZIMUTH_LOW_BORDER -140.0f +#define ISM_AZIMUTH_HIGH_BORDER 135.0f + +#define ISM_ELEVATION_NBITS 6 +#define ISM_ELEVATION_MIN -90.0f +#define ISM_ELEVATION_MAX 90.0f +#define ISM_ELEVATION_LOW_BORDER -70.0f +#define ISM_ELEVATION_HIGH_BORDER 65.0f +#define ISM_Q_STEP 2.5f +#define ISM_Q_STEP_BORDER 5.0f + +/* Parametric ISM */ +#define MAX_PARAM_ISM_NBANDS 11 +#define MAX_PARAM_ISM_NBANDS_WB 9 +#define MAX_PARAM_ISM_NBANDS_NB 7 +#define PARAM_ISM_MDFT_NO_SLOTS 4 +#define MAX_PARAM_ISM_NBLOCKS 1 +#define MAX_PARAM_ISM_WAVE 2 +#define PARAM_ISM_OBJ_IND_NBITS 2 +#define PARAM_ISM_POW_RATIO_NBITS 3 +#define PARAM_ISM_MAX_DMX 2 +#define PARAM_ISM_MAX_CHAN 16 +#define PARAM_ISM_HYS_BUF_SIZE 10 + +typedef enum +{ + ISM_MODE_NONE, + ISM_MODE_DISC, /* discrete ISM */ + ISM_MODE_PARAM /* parametric ISM */ +} ISM_MODE; + + +/* ISm metadata bitstream */ +enum +{ + IND_ISM_NUM_OBJECTS, + IND_ISM_METADATA_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS, + IND_ISM_VAD_FLAG = IND_ISM_METADATA_FLAG + MAX_NUM_OBJECTS, + + /* ------------- loop for objects -------------- */ + TAG_ISM_LOOP_START = IND_ISM_VAD_FLAG + MAX_NUM_OBJECTS, + IND_ISM_AZIMUTH_DIFF_FLAG = TAG_ISM_LOOP_START, + IND_ISM_AZIMUTH = TAG_ISM_LOOP_START, + IND_ISM_ELEVATION_DIFF_FLAG = TAG_ISM_LOOP_START, + IND_ISM_ELEVATION = TAG_ISM_LOOP_START, + TAG_ISM_LOOP_END = TAG_ISM_LOOP_START + 100, /* IVAS_fmToDo: to be reviewed once the final metadata are defined */ + /* --------- end of loop for objects ----------- */ + + ISM_MAX_NUM_INDICES +}; + + +/*----------------------------------------------------------------------------------* + * DFT Stereo Constants + *----------------------------------------------------------------------------------*/ + +/* Coding configurations*/ +#define STEREO_DFT_DMX_ACTIVE 1 /* Enable true spatialization */ + +/* residual coding modes */ +#define STEREO_DFT_RES_COD_OFF 0 +#define STEREO_DFT_RES_COD_1kHz 1 /* use residual coding up to 1 kHz */ +#define STEREO_DFT_RES_COD_1_6kHz 2 /* use residual coding up to 1.6 kHz */ + +/* residual prediction modes */ +#define STEREO_DFT_RESPRED_OFF 0 +#define STEREO_DFT_RESPRED_STEFI 1 /* full-band stereo filling (above residual) */ +#define STEREO_DFT_RESPRED_ESF 2 /* enhanced stereo filling in LB, regular stereo filling in HB */ + +/* band resolution */ +#define STEREO_DFT_BAND_RES_HIGH 1 /* use higher band resolution following ERB4 scale */ +#define STEREO_DFT_BAND_RES_LOW 2 /* use lower band resolution following ERB8 scale */ + +/* Processing constants*/ +#define STEREO_DFT_OVL_NS ACELP_LOOK_NS /* 8.75ms */ +#define STEREO_DFT_ZP_NS 3125000L /* 3.125ms */ +#define STEREO_DFT_HOP_NS 10000000L /* 10ms */ +#define STEREO_DFT_N_NS ( STEREO_DFT_HOP_NS + ACELP_LOOK_NS + 2 * STEREO_DFT_ZP_NS ) + +#define STEREO_DFT_ZP_NS_ENC 5625000L /* 5.625ms */ +#define STEREO_DFT_HOP_NS_ENC FRAME_SIZE_NS /* 20ms */ +#define STEREO_DFT_N_NS_ENC ( STEREO_DFT_HOP_NS_ENC + ACELP_LOOK_NS + 2 * STEREO_DFT_ZP_NS_ENC ) + +#define STEREO_DFT_OVL_MAX NS2SA( 48000, ACELP_LOOK_NS ) +#define STEREO_DFT_HOP_MAX NS2SA( 48000, STEREO_DFT_HOP_NS ) + +#define STEREO_DFT_ZP_MAX_ENC NS2SA( 48000, STEREO_DFT_ZP_NS_ENC ) +#define STEREO_DFT_HOP_MAX_ENC NS2SA( 48000, STEREO_DFT_HOP_NS_ENC ) +#define STEREO_DFT_N_MAX_ENC NS2SA( 48000, STEREO_DFT_N_NS_ENC ) + +#define STEREO_DFT_OVL_32k NS2SA( 32000, ACELP_LOOK_NS ) + +#define STEREO_DFT_ZP_32k_ENC NS2SA( 32000, STEREO_DFT_ZP_NS_ENC ) +#define STEREO_DFT_HOP_32k_ENC NS2SA( 32000, STEREO_DFT_HOP_NS_ENC ) +#define STEREO_DFT_N_32k_ENC NS2SA( 32000, STEREO_DFT_N_NS_ENC ) + +#define STEREO_DFT_OVL_16k NS2SA( 16000, ACELP_LOOK_NS ) + +#define STEREO_DFT_ZP_16k_ENC NS2SA( 16000, STEREO_DFT_ZP_NS_ENC ) +#define STEREO_DFT_HOP_16k_ENC NS2SA( 16000, STEREO_DFT_HOP_NS_ENC ) +#define STEREO_DFT_N_16k_ENC NS2SA( 16000, STEREO_DFT_N_NS_ENC ) + +#define STEREO_DFT_OVL_12k8 NS2SA( 12800, ACELP_LOOK_NS ) + +#define STEREO_DFT_ZP_12k8_ENC NS2SA( 12800, STEREO_DFT_ZP_NS_ENC ) +#define STEREO_DFT_HOP_12k8_ENC NS2SA( 12800, STEREO_DFT_HOP_NS_ENC ) +#define STEREO_DFT_N_12k8_ENC NS2SA( 12800, STEREO_DFT_N_NS_ENC ) + +#define STEREO_DFT_OVL_8k NS2SA( 8000, ACELP_LOOK_NS ) +#define STEREO_DFT_N_8k NS2SA( 8000, STEREO_DFT_N_NS ) + +#define STEREO_DFT_ZP_8k_ENC NS2SA( 8000, STEREO_DFT_ZP_NS_ENC ) +#define STEREO_DFT_HOP_8k_ENC NS2SA( 8000, STEREO_DFT_HOP_NS_ENC ) +#define STEREO_DFT_N_8k_ENC NS2SA( 8000, STEREO_DFT_N_NS_ENC ) + +#define STEREO_DFT32MS_N_NS FRAME_SIZE_NS /* 20 ms */ +#define STEREO_DFT32MS_OVL_NS 3125000L /* 3.125ms - Overlap for the outer edges of windows on decoder */ +#define STEREO_DFT32MS_OVL2_NS 9375000L /* 9.375ms - Overlap for the inner edges of windows on decoder */ +#define STEREO_DFT32MS_WIN_CENTER_NS ( int32_t )( ( FRAME_SIZE_NS + STEREO_DFT32MS_OVL_NS ) * 0.5f ) /* 11.5625ms - mid point of the two windows wrt the left edge of overlap */ +#if defined( DEBUG_MODE_DFT ) || defined( DEBUG_STEREO_DFT_NOCORE ) +#define STEREO_DFT32MS_HOP_NS 10000000L /* 10ms */ +#endif +#define STEREO_DFT32MS_ZP_NS ( int32_t )( 0.5f * ( STEREO_DFT32MS_N_NS - STEREO_DFT32MS_WIN_CENTER_NS - ( STEREO_DFT32MS_OVL2_NS * 0.5f ) ) ) /* 2 sided zp calculated such that window size is satisfied */ + +#define STEREO_DFT32MS_OVL_MAX NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) +#define STEREO_DFT32MS_OVL2_MAX NS2SA( 48000, STEREO_DFT32MS_OVL2_NS ) +#define STEREO_DFT32MS_N_MAX NS2SA( 48000, STEREO_DFT32MS_N_NS ) + +#define STEREO_DFT32MS_N_32k NS2SA( 32000, STEREO_DFT32MS_N_NS ) + +#define STEREO_DFT32MS_OVL_16k NS2SA( 16000, STEREO_DFT32MS_OVL_NS ) +#define STEREO_DFT32MS_OVL2_16k NS2SA( 16000, STEREO_DFT32MS_OVL2_NS ) +#define STEREO_DFT32MS_N_16k NS2SA( 16000, STEREO_DFT32MS_N_NS ) + +#define STEREO_DFT32MS_OVL_12k8 NS2SA( 12800, STEREO_DFT32MS_OVL_NS ) +#define STEREO_DFT32MS_OVL2_12k8 NS2SA( 12800, STEREO_DFT32MS_OVL2_NS ) +#define STEREO_DFT32MS_N_12k8 NS2SA( 12800, STEREO_DFT32MS_N_NS ) + +#define STEREO_DFT32MS_OVL_8k NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) +#define STEREO_DFT32MS_OVL2_8k NS2SA( 8000, STEREO_DFT32MS_OVL2_NS ) +#define STEREO_DFT32MS_N_8k NS2SA( 8000, STEREO_DFT32MS_N_NS ) + +#define STEREO_DFT32MS_STEP 3 /* STEREO_DFT32MS_OVL2_NS / STEREO_DFT32MS_OVL_NS */ +#define STEREO_DFT_TRIGO_DEC_STEP 2 +#define STEREO_DFT_TRIGO_SRATE_8k_STEP 4 +#define STEREO_DFT_TRIGO_SRATE_12k8_STEP 1 +#define STEREO_DFT_TRIGO_SRATE_16k_STEP 2 +#define STEREO_DFT_TRIGO_SRATE_32k_STEP 1 +#define STEREO_DFT_TRIGO_SRATE_48k_STEP 1 + +#define STEREO_DFT_OFFSET 1 +#define STEREO_DFT_NBDIV 2 + +#define STEREO_DFT_DELAY_DEC_BWE_NS ( STEREO_DFT_OFFSET * STEREO_DFT_HOP_NS - ACELP_LOOK_NS ) /* 1.25ms/2.5ms: max delay for core decoder*/ + +#define STEREO_DFT_ENC_DFT_NB ( STEREO_DFT_OFFSET + 1 ) /*frame + lookahead*/ +#define STEREO_DFT_DEC_DFT_NB ( STEREO_DFT_NBDIV + STEREO_DFT_OFFSET ) /*frame + lookahead*/ + +#define STEREO_CNA_LR_CORR_LT_FILT 0.95f /* long-term averaging factor for L/R correlation estimation */ +#define STEREO_CNA_ILD_LT_FILT 0.9f /* long-term averaging factor for ILD estimation */ + +typedef enum +{ + DFT_STEREO_DEC_ANA_NOCORE = -1, /*-1: signal read from file (DEBUG mode)*/ + DFT_STEREO_DEC_ANA_FB, /* 0: full-band signal (e.g. HQ-CORE/TCX (M), residual (S))*/ + DFT_STEREO_DEC_ANA_FB_ADD, /* 1: full-band signal to add (e.g High-band signal of TD-BWE)*/ + DFT_STEREO_DEC_ANA_BPF, /* 2: Bass-post-filter error signal, to add and weight*/ + DFT_STEREO_DEC_ANA_LB, /* 3: low-band signal (e.g. ACELP (M), resiudal signal (S))*/ + DFT_STEREO_DEC_ANA_LB_ADD, /* 4: low-band signal to add (e.g. LB-TCX)*/ + DFT_STEREO_DEC_ANA_HB_ADD /* 5: high-band signal to add (e.g. transition to ACELP in MDCT->DFT switching) */ +} DFT_STEREO_DEC_ANA_TYPE; + +/*Stereo parameters*/ + +#define STEREO_DFT_ERB4_BANDS 14 +#define STEREO_DFT_ERB8_BANDS 8 +#define STEREO_DFT_BAND_MAX ( STEREO_DFT_ERB4_BANDS - 1 ) /*Maximum number of parameter bands*/ +#define STEREO_DFT_BUF_MAX STEREO_DFT32MS_N_MAX * STEREO_DFT_NBDIV + +#define STEREO_DFT_NRG_PAST_LEN 3 + +/*ITD*/ +#define STEREO_DFT_ITD_FS 32000 +#define STEREO_DFT_ITD_MAX 160 /*samples @ 32000*/ +#define STEREO_DFT_ITD_MAX_ANA 200 +#define STEREO_DFT_ITD_MIN max( STEREO_DFT_ITD_MAX - 256 + 1, 1 ) /*STEREO_DFT_ITD_MAX-pow(2,STEREO_DFT_ITD_NBITS-1)+1*/ +#define STEREO_DFT_ITD_NBITS 9 /* 1 bit for sign, the rest for the absolute value*/ +#define STEREO_DFT_ITD_MODE_NBITS 1 + +#define STEREO_DFT_SID_ITD_NBITS 4 /* Number of ITD bits SID frames */ +#define STEREO_DFT_SID_ITD_FAC 1 /* Quantization step reduction factor */ + +#define STEREO_DFT_FLAG_BITS 1 +#define STEREO_DFT_SIDEGAIN_NBITS 5 +#define STEREO_DFT_FEC_THRESHOLD 10 +#define STEREO_DFT_BITDIFF_LP_FAC (0.06f) /* Low-pass filter coefficient for filtering bit difference between absolute and differential coding */ +#define STEREO_DFT_BITDIFF_ABS_SELECT (0.8f) /* Constant to set tendency for selecting absolute coding mode */ +#define STEREO_DFT_BITDIFF_INIT (12.0f) /* Init value for low-pass bit difference */ + +#define STEREO_DFT_SIDE_GAIN_NBITS 5 +#define STEREO_DFT_IPD_NBITS 3 +#define STEREO_DFT_GIPD_NBITS 4 + +#define STEREO_DFT_ITD_VAD_BAND_NUM 20 + +#define STEREO_DFT_XCORR_LB_MAX 24 + +#define STEREO_DFT_N_COH_PRED 4 /* Number of intra-frame predictors for coherence vector */ +#define STEREO_DFT_COH_PRED_COEFFS 15 /* Number of coefficients per predictor */ +#define STEREO_DFT_PRED_NBITS 2 /* Bits to signal predictor (log_2(4) = 2) */ +#define STEREO_DFT_N_COH_ALPHA_STEPS 5 +#define STEREO_DFT_N_COH_ALPHA_LEVELS 2 +#define STEREO_DFT_N_COH_ALPHA_BITS 1 +#define STEREO_DFT_SG_ACT_CNT_MAX 1500 +#define STEREO_DFT_COH_MAXBAND 6 +#define STEREO_DFT_SID_GIPD_NBITS 2 +#define STEREO_DFT_FD_FILT 0.9f + +/*Residual prediction*/ +#define STEREO_DFT_PAST_MAX 4 +#define STEREO_DFT_RES_PRED_BAND_MAX 12 + +#define STEREO_DFT_REVERB_MODE_NBITS 1 +#define STEREO_DFT_RES_PRED_BAND_MIN 0 +#define STEREO_DFT_RES_PRED_BAND_MIN_RED 3 +#define STEREO_DFT_RES_PRED_BAND_MIN_CONST 3 + +#define STEREO_DFT_ALLPASS_BUFFERLEN 256 +#define STEREO_DFT_ALLPASS_FADELEN_12k8 32 +#define STEREO_DFT_ALLPASS_FADELEN_16k 40 +#define STEREO_DFT_CORE_HIST_MAX ( STEREO_DFT_PAST_MAX + 3 ) / 2 +#define STEREO_DFT_TD_STEFI_DELAY_NS FRAME_SIZE_NS + IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS +#define STEREO_DFT_TD_STEFI_SUBFR_DELAY 2 + +/*Residual coding*/ +#define STEREO_DFT_N_MAX_RES 800 /* Maximum of lines coded in residual coding */ +#define STEREO_DFT_RES_GLOBAL_GAIN_BITS 7 +#define STEREO_DFT_RES_GAINS_BITS 3 + +#define STEREO_DFT_RES_COD_SNR_MIN 10 +#define STEREO_DFT_RES_COD_SNR_MAX 40 +#define STEREO_DFT_L_SUBFR_8k 32 +#define STEREO_DFT_NBPSF_PIT_MAX_8k NBPSF_PIT_MAX / 2 + +/* Residual coding BPF */ +#define STEREO_DFT_BPF_ADAPT_ALPHA (0.61f) +#define STEREO_DFT_BPF_ADAPT_BETA (0.68f) + +/* Golomb-Rice encoding */ +#define NO_SYMB_GR_SIDE_G 31 +#define NO_SYMB_GR_PRED_G 8 + +#define STEREO_DFT_RES_BW_MAX 66 /*Maximum number of bin for residual signal in each frame (res_cod_band_max == 6 in 48kHz)*/ +#define SBA_DIRAC_STEREO_NUM_BANDS 5 +#define SBA_DIRAC_NRG_SMOOTH_LONG 10 +#define SBA_DIRAC_NRG_SMOOTH_SHORT 3 + +/* PLC for DFT Stereo residual */ +#define STEREO_DFT_RES_N_PEAKS_MAX 15 /*Maximum number of peaks within residual signal in each frame (res_cod_band_max == 6 in 48kHz)*/ + +/* MDCT to DFT Stereo switching */ +#define STEREO_MDCT2DFT_FADE_LEN_48k L_FRAME48k / 8 + +/* DFT stereo side-info bitstream*/ +enum +{ + IND_STEREO_DFT_ATTACK_PRESENT, + IND_STEREO_DFT_RES_COD, + IND_STEREO_DFT_SIDEGAIN_FLAG, + + IND_STEREO_DFT_SIDEGAINS, + IND_STEREO_DFT_ITD_MODE = IND_STEREO_DFT_SIDEGAINS + 4 * STEREO_DFT_BAND_MAX + 72, + + IND_STEREO_DFT_ITD_HUFF, + IND_STEREO_DFT_ITD_NEG, + IND_STEREO_DFT_ITD_COD, + + IND_STEREO_DFT_NO_IPD_FLAG, + IND_STEREO_DFT_GIPD, + + IND_STEREO_DFT_IPD_FLAG, + IND_STEREO_DFT_IPD_COD, + + IND_STEREO_DFT_REVERB_MODE = IND_STEREO_DFT_IPD_COD + 4 * STEREO_DFT_BAND_MAX + 2, /* max number for GR order 2 */ + + IND_STEREO_DFT_RES_PRED_FLAG, + IND_STEREO_DFT_PRED_GAIN_COD, + + IND_STEREO_DFT_NON_USED = IND_STEREO_DFT_PRED_GAIN_COD + 4 * STEREO_DFT_RES_PRED_BAND_MAX + 2, /* max number for GR order 2 */ + + /* residual coding */ + IND_STEREO_DFT_RESIDUAL_GLOBAL_GAIN, + IND_STEREO_DFT_RESIDUAL_COD, + IND_STEREO_DFT_SID_COH = IND_STEREO_DFT_RESIDUAL_COD + 56, /* max possible number of indices for residual coding */ + + STEREO_DFT_MAX_NUM_INDICES = IND_STEREO_DFT_SID_COH + 6 /* max possible number of indices for coherence encoding */ +}; + + +/*----------------------------------------------------------------------------------* + * Range coder constants + *----------------------------------------------------------------------------------*/ + +#define RANGE_UNI_BUFFER_BYTES_MAX 1024 +#define RANGE_N_CONTEXT 64 +#define RANGE_N_SYMBOLS 17 + + +/*----------------------------------------------------------------------------------* + * ECLVQ Stereo constants + *----------------------------------------------------------------------------------*/ + +#define ECSQ_VECTOR_SIZE_MAX 256 +#define ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO 127 /* indicates that all values in the vector are zero */ + +#define ECLVQ_GLOBAL_GAIN_FACTOR ( 20.0f * 127.0f / 90.0f ) +#define ECLVQ_INV_GLOBAL_GAIN_FACTOR ( 1.0f / ( 20.0f * 127.0f / 90.0f ) ) + +/* the currently defined configuration indexes are: + 0: un-optimized using uniform 4 bit parameters (reserved) + 1: optimized for 32 kbps target SNR + 2: optimized for 32 kbps target bits + 3: optimized for 48 kbps target SNR + 4: optimized for 48 kbps target bits + 5: optimized for 64 kbps target SNR + 6: optimized for 64 kbps target bits +*/ + +#define ECSQ_CONFIG_COUNT 7 /* number of different configurations, such as bitrates or profiles */ +#define ECSQ_PARAM_COUNT 16 /* number of different coding distributions, the first indicates only zero values */ +#define ECSQ_ALL_ZERO_PARAM -1 /* the integer exponent of the first parameter indicating only zero values */ +#define ECSQ_PROB_BITS 14 /* number of bits used for representing the probabilities in the actual AC */ +#define ECSQ_PROB_TOTAL ( 1 << ECSQ_PROB_BITS ) /* total count used for representing the probabilities in the actual AC */ + +#define ECSQ_TAB_VALS_SIZE 16 /* 0, 1, 2, 3, ... */ +#define ECSQ_SEGMENT_SIZE 8 +#define ECSQ_log2TB_SIZE 13 +#define ECSQ_PARAM_SEARCH_RANGE 1 +#define ECSQ_NONZERO_MAX 3 + + +/*----------------------------------------------------------------------------------* + * UNCLR & cross-talk stereo classifiers + *----------------------------------------------------------------------------------*/ + +#define XTALK_SCORE_BUF_LEN 5 + +#define SSC_MAX_NFEA 58 /* Maximum number of features for stereo scene classification */ +#define SIZE_UNCLR_ISEL_TD 10 +#define SIZE_UNCLR_ISEL_DFT 8 + +#define SIZE_XTALK_ISEL_TD 17 +#define SIZE_XTALK_ISEL_DFT 11 + +#define UNCLR_L_ETOT 3 +#define UNCLR_L_RELE 10 +#define UNCLR_RC_ORDER 20 +#define MAX_UV_CNT 100 + +#define XTALK_PHAT_LEN 200 + +enum fea_names +{ + E_d_clas, E_d_pitch, E_d_voicing, E_sum_d_LSF, E_d_lepsP_13, E_d_cor_map_sum, E_d_dE1, E_d_nchar, + E_d_non_sta, E_d_ps_sta, E_d_ps_diff, E_d_sp_div, E_clas, E_pitch, E_voicing, E_lsf_1, + E_lsf_4, E_lsf_9, E_lsf_14, E_lepsP_13, E_cor_map_sum, E_dE1, E_nchar, E_non_sta, + E_ps_sta, E_ps_diff, E_sp_div, E_corrLagStats0, E_ica_corr_value0, E_ica_instTargetGain, + E_diff_corrLM_corrRM, E_tdm_LT_es_em, E_sum_prod, E_tdm_es_em, E_m_corrL_corrR, E_d_corrL_corrR, E_corrEst0, E_corrLagMax, + E_d_corrLagMax, E_corrEstMax, E_corrEst_ncorr,E_sum_xcorr, E_es_em, E_cohSNR, E_d_prodL_prodR, E_xcorr_itd_value, + E_angle_rot, E_g_pred, E_g_side, E_gainILD, E_gainIPD, E_IPD, E_d_IPD, E_ITD, + E_gphat_d_itd2, E_gphat_itd1_flip, E_gphat_ratio_m1_m2, E_gphat_m2_m2 +}; + + +/*----------------------------------------------------------------------------------* + * ICA Stereo constants + *----------------------------------------------------------------------------------*/ + +#define L_CH_INDX 0 +#define R_CH_INDX 1 +#define CORR_INTER_FS 8000 +#define L_NCSHIFT_NS 5000000L +#define L_MEM_RECALC_NS ( L_NCSHIFT_NS * 3 ) / 2 +#define L_MEM_RECALC_TBE_NS ( L_NCSHIFT_NS + L_SAMPLES_LA_NS ) +#define L_NCSHIFTMAX NS2SA( 48000, L_NCSHIFT_NS ) +#define L_DEC_MEM_LEN_ICA L_NCSHIFTMAX + ( N_MAX_SHIFT_CHANGE + 1 ) + SINC_ORDER1 / INTERP_FACTOR1 +#define L_FRAME_DS NS2SA( CORR_INTER_FS, FRAME_SIZE_NS ) +#define L_XCORRMEM_DS NS2SA( CORR_INTER_FS, 2 * ( ACELP_LOOK_NS ) ) +#define L_NCSHIFT_DS ( int16_t )( ( ( int32_t )(CORR_INTER_FS) *L_NCSHIFTMAX ) / 48000L ) +#define L_SAMPLES_LA_NS 625000L + +#define L_MEM_RECALC_TBE_16K NS2SA( 16000, L_MEM_RECALC_TBE_NS ) +#define L_MEM_RECALC_48K NS2SA( 48000, L_MEM_RECALC_NS ) +#define L_MEM_RECALC_12K8 NS2SA( 12800, L_MEM_RECALC_NS ) +#define L_MEM_RECALC_16K NS2SA( 16000, L_MEM_RECALC_NS ) +#define N_MAX_SHIFT_CHANGE 20 + +#define L_MEM_RECALC_SCH_NS ( ACELP_LOOK_NS + DELAY_FIR_RESAMPL_NS - L_MEM_RECALC_NS ) +#define L_MEM_RECALC_48k_SCH NS2SA( 48000, L_MEM_RECALC_SCH_NS ) + +#define INTERP_FACTOR1 2 +#define SINC_ORDER1 24 +#define L_SHIFT_ADAPT_MAX 596 /* must be a multiple of 2 */ +#define L_SHIFT_ADAPT_16k 290 /* must be a multiple of 2 */ + +#define STEREO_BITS_TCA_CHAN 1 /* ref/target channel index */ +#define STEREO_BITS_TCA_CORRSTATS 5 /* target corrStats */ +#define STEREO_BITS_TCA_GD 5 /* target gain */ +#define STEREO_TCA_GDMIN -1.0f +#define STEREO_TCA_GDSTEP 0.05f +#define STEREO_BITS_TCA ( STEREO_BITS_TCA_CHAN + STEREO_BITS_TCA_CORRSTATS + STEREO_BITS_TCA_GD ) + +#define STEREO_ICBWE_MSFLAG_BITS 1 /* BWE Multi Source flag */ + +#define STEREO_ICBWE_REFBITS 1 +#define STEREO_ICBWE_SPBITS 2 +#define STEREO_ICBWE_GSBITS 4 +#define STEREO_BITS_ICBWE ( STEREO_ICBWE_SPBITS + STEREO_ICBWE_GSBITS + STEREO_ICBWE_REFBITS ) + +#define STEREO_ICBWE_SPBITS_DFT 2 +#define STEREO_ICBWE_GSBITS_DFT 7 +#define STEREO_BITS_ICBWE_DFT ( STEREO_ICBWE_SPBITS_DFT + STEREO_ICBWE_GSBITS_DFT + STEREO_ICBWE_REFBITS ) + +#define MAX_DELAYREGLEN 12 /* max regression length */ +#define INV_MAX_DELAYREGLEN 0.083333333333333f /* (1/MAX_DELAYREGLEN) */ +#define MAX_INTERPOLATE 11 +#define ADDED_MEM_DS 40 + +#define STEREO_L_TCA_OVLP_NS 5000000L /* overlap length of the ICA gain scaling */ + + +/*----------------------------------------------------------------------------------* + * TD Stereo Constants + *----------------------------------------------------------------------------------*/ + +#define TDM_NQ ( 32 - 1 ) /* number of quantization steps of mixing factor */ +#define LRTD_STEREO_LEFT_IS_PRIM ( TDM_NQ - 1 ) /* Ratio index value indicating that left channel is coded as primary channel */ +#define LRTD_STEREO_RIGHT_IS_PRIM 0 /* Ratio index value indicating that right channel is coded as primary channel */ +#define LRTD_STEREO_QUARTER_RANGE ( ( TDM_NQ + 1 ) / 4 ) /* Ratio index value */ +#define LRTD_STEREO_MID_IS_PRIM ( ( TDM_NQ - 1 ) / 2 ) /* Ratio index value */ + +#define TDM_L_NOVA_NS 5000000L /* mixing overlap length */ + +#define TDM_SECONDARY_SIGNALLING 3 /* number of bits to code the signalling for secondary channel */ +#define TDM_RATIO_BITS 5 /* number of bits to code the correlation ratio */ +#define TDM_LP_REUSE_BITS 1 /* number of bits to code LP reuse flag for secondary channel */ +#define TDM_LR_CONTENT_BITS 1 /* number of bits to code flag when the content is LR or not */ +#define TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS ( TDM_SECONDARY_SIGNALLING + TDM_RATIO_BITS + TDM_LP_REUSE_BITS + TDM_LR_CONTENT_BITS + STEREO_BITS_TCA ) +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE +#define TDM_IC_LSF_PRED_BITS 1 /* Number of bits to code the inter channel lsf prediction mode */ +#endif +#endif + + +/*----------------------------------------------------------------------------------* + * MDCT Stereo Constants + *----------------------------------------------------------------------------------*/ + +/* MDCT stereo modes */ +#define SMDCT_MS_DECISION 0 +#ifdef DEBUG_FORCE_MDCT_STEREO_MODE +#define SMDCT_FORCE_LR 1 +#define SMDCT_FORCE_MS 2 +#endif + +#define MAX_SFB 70 /* Maximum number of stereo frequency bands = 64 + 6 for TCX after ACELP */ + +#define SMDCT_DUAL_MONO 0 /* Dual-mono MDCT Stereo */ +#define SMDCT_MS_FULL 1 /* MS MDCT Stereo */ +#define SMDCT_BW_MS 2 /* Band-wise MS MDCT Stereo */ + +#define SMDCT_MINIMUM_ARITH_BITS 17 /* Minimum bits to reserve for the arithmetic coder */ +#define SMDCT_GLOBAL_ILD_BITS 4 +#define SMDCT_ILD_RANGE ( 1 << SMDCT_GLOBAL_ILD_BITS ) /* Range of the coded ILD */ +#define SMDCT_NBBITS_SPLIT_RATIO 3 +#define SMDCT_BITRATE_RATIO_RANGE ( 1 << SMDCT_NBBITS_SPLIT_RATIO ) /* Range of the coded bitrate distribution ratio */ +#define SMDCT_EQUAL_RATIO_RANGE ( SMDCT_BITRATE_RATIO_RANGE >> 1 ) + +#define SMDCT_MAX_STEREO_BANDS_TCX20 44 +#define SMDCT_MAX_STEREO_BANDS_TCX10 33 + +#define MAX_MDCT_ITD_BRATE IVAS_64k + +#define SNS_LOW_BR_MODE -1 +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +#define SNS_NPTS 16 /* Number of downsampled SNS parameters */ + +#define MDCT_ST_PLC_FADEOUT_START_FRAME 3 + +typedef enum { + EQUAL_CORES, + TCX10_IN_0_TCX20_IN_1, + TCX20_IN_0_TCX10_IN_1, +} TONALMDCTCONC_NOISE_GEN_MODE; +#endif + + +/*----------------------------------------------------------------------------------* + * MDFT FB Constants + *----------------------------------------------------------------------------------*/ + +#define MDFT_FB_BANDS_240 240 +#define CLDFB_TO_MDFT_FAC 4 +#define MDFT_NO_COL_MAX 4 + +/*----------------------------------------------------------------------------------* + * General Parametric Coding Constants + *----------------------------------------------------------------------------------*/ +// VE: this should be renamed to e.g. N_SPATIAL_SUBFRAMES +#define MAX_PARAM_SPATIAL_SUBFRAMES 4 /* Maximum number of subframes for parameteric spatial coding */ + + +/*----------------------------------------------------------------------------------* + * SBA Constants + *----------------------------------------------------------------------------------*/ + +#define SBA_PLANAR_BITS 1 +#define SBA_ORDER_BITS 2 +#define SBA_NHARM_HOA3 16 + +typedef enum +{ + SBA_MODE_NONE, + SBA_MODE_DIRAC, + SBA_MODE_SPAR, +} SBA_MODE; + + +/*----------------------------------------------------------------------------------* + * DirAC Constants + *----------------------------------------------------------------------------------*/ + +#define DIRAC_MAX_ANA_CHANS 4 /* Maximum number of channels for DirAC analysis */ +#define DIRAC_MAX_TRANS_CHANS 8 /* Maximum number of transport channels for DirAC */ + +#define DIRAC_MIN_BITRATE_8_TRANS_CHAN IVAS_384k +#define DIRAC_MIN_BITRATE_6_TRANS_CHAN IVAS_256k +#define DIRAC_MIN_BITRATE_4_TRANS_CHAN IVAS_160k /* minimum bitrate for sending 4 transport channels (FOA) */ +#define DIRAC_MIN_BITRATE_2_TRANS_CHAN IVAS_48k /* minimum bitrate for sending 2 transport channels (Stereo) */ + +#define DIRAC_NUM_DIMS 3 /* number of directions to estimate (X,Y,Z) */ +#define DIRAC_MAX_NBANDS 12 /* Maximum number of frequency bands for the DirAC Side Parameter decoding */ +#define DIRAC_LOW_BANDRES_STEP 2 /* always combine two bands for low band resolution in the DirAC parameter coding */ +#define DIRAC_NO_COL_AVG_DIFF 32 /* Number of slots for averaging intensity vector for diffuseness computation */ +#define DIRAC_DIFFUSE_LEVELS 8 /* Size of the diffuseness alphabet (constant value) */ +#define DIRAC_DITH_SEED 29680 +#define DIRAC_MAX_BITS 512 /* Maximum number of bits for DirAC side information per frame */ +#define MAX_NUM_ENC_CLDFB_INSTANCES 8 /* Maximum Cldfb instances in DirAC encoder */ +#define DIRAC_NO_COL_AVG_DIFF_NS 40000000L +#define DIRAC_NO_FB_BANDS_MAX MDFT_FB_BANDS_240 +#define DELAY_DIRAC_ENC_CMP_NS_PARAM_ISM ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) /* == 12 ms */ + + +/* DirAC renderer setup */ +typedef enum +{ + DIRAC_SYNTHESIS_INVALID, + DIRAC_SYNTHESIS_PSD_LS, /* PSD renderer in loudspeakers domain */ + DIRAC_SYNTHESIS_GAIN_SHD, /* Gain renderer in Spherical Harmonic Domain*/ + DIRAC_SYNTHESIS_PSD_SHD, /* PSD renderer in Spherical Harmonic Domain*/ + DIRAC_SYNTHESIS_MONO, + DIRAC_SYNTHESIS_COV_MC_LS +} DIRAC_SYNTHESIS_CONFIG; + +/* DirAC renderer panning setup */ +typedef enum +{ + DIRAC_PANNING_INVALID, + DIRAC_PANNING_HOA3, /* HOA3 */ + DIRAC_PANNING_VBAP /* VBAP */ +} DIRAC_PANNING_CONFIG; + +#define DIRAC_DIFF_NUM_AMBI_COMP 4 +#define DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS 8 +#define DIRAC_GAIN_LIMIT 31.622776601683793f /* 30db gain limitiation */ +#define DIRAC_MAX_NUM_DECORR_FILTERS 22 +#define DIRAC_MAX_DECORR_FILTER_LEN 20 +#define DIRAC_DECORR_NUM_SPLIT_BANDS 3 +#define DIRAC_DECORR_FILTER_LEN_1 15 +#define DIRAC_DECORR_FILTER_LEN_2 6 +#define DIRAC_DECORR_FILTER_LEN_3 3 +#define DIRAC_ONSET_ALPHA 0.95f +#define DIRAC_ONSET_BETA 0.995f +#define DIRAC_ONSET_GAIN 4.0f + +#define DELAY_DIRAC_ENC_CMP_NS 9500000L /* Delay to be compensated on DirAC encoder */ +#define DELAY_DIRAC_SPAR_ENC_CMP_NS 500000L /* here we may set the 24 samples (at 48 kHz) additional delay to something else, leave as is for now*/ +#define DELAY_DIRAC_PARAM_DEC_SFR 2 /* Delay to be compensation for DirAC parameters in the decoder (subframes) */ + +#define DIRAC_SLOT_NS 1250000L /* time duration of a time slot, 1.25ms (==DELAY_RENERER_NS/MAX_PARAM_SPATIAL_SUBFRAMES) */ +#define DIRAC_SLOT_ENC_NS 5000000L + +typedef enum +{ + DIRAC_OPEN, /* initialize to default value */ + DIRAC_RECONFIGURE /* HOA3 */ +} DIRAC_CONFIG_FLAG; + + +/*----------------------------------------------------------------------------------* + * SPAR constants + *----------------------------------------------------------------------------------*/ + +#define SPAR_CONFIG_BW FB + +#define IVAS_SPAR_MAX_CH (2*IVAS_MAX_SBA_ORDER + 2) /* FOA + planar HOA */ + +#define IVAS_SPAR_P_LOWERTRI ((IVAS_SPAR_MAX_CH - 1) * (IVAS_SPAR_MAX_CH - 2)) >> 1 +#define IVAS_SPAR_MAX_C_COEFF (IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS) * ( IVAS_SPAR_MAX_DMX_CHS - 1) + +#define IVAS_SPAR_HOA3_NP_CHS 8 /* number of higher order non-planar channels */ + +#define SPAR_NUM_CODING_STRAT_BITS ( 3 ) + +/* AGC constants */ +#define AGC_BITS_PER_CH 3 +#define AGC_EMAX 0 + +/* Common SPAR metadata constants */ +#define IVAS_ACTIVEW_DM_F_SCALE 0.5f +#define IVAS_ACTIVEW_DM_F_SCALE_DTX 0.25f +#define IVAS_SPAR_FOA_DFLT_FREQ_PER_CHAN 24000 + +#define MAX_QUANT_STRATS 3 +#define MAX_CODING_STRATS 3 +#define IVAS_NUM_PROB_MODELS 4 +#define IVAS_MAX_INPUT_LEN ( IVAS_MAX_NUM_BANDS * ( IVAS_SPAR_P_LOWERTRI ) ) +#define IVAS_MAX_QUANT_LEVELS 32 +#define BRATE_SPAR_Q_STRAT IVAS_256k + +#define SPAR_SID_BITS_TAR_PER_BAND 18 + +typedef enum +{ + WYXZ = 0, + WY = 0, + WX, + WZ, + WYiX, +} ivas_spar_foa_pmx_strings_t; + +#define NUM_MD_Q_COEFS_SET 4 + +#define IVAS_RED_BAND_FACT 2 + +typedef enum +{ + PRED_COEFF = 0, + DRCT_COEFF, + DECD_COEFF, + DECX_COEFF +} ivas_coeffs_type_t; + +#define IVAS_SPAR_BR_TABLE_LEN 18 + +/* TD decorr */ +enum +{ + IVAS_TD_DECORR_OUT_1CH = 1, + IVAS_TD_DECORR_OUT_2CH, + IVAS_TD_DECORR_OUT_3CH, + IVAS_TD_DECORR_OUT_4CH, + IVAS_TD_DECORR_OUT_5CH, + IVAS_TD_DECORR_OUT_6CH, + IVAS_TD_DECORR_OUT_7CH, + IVAS_TD_DECORR_OUT_8CH, + IVAS_TD_DECORR_OUT_9CH, + IVAS_TD_DECORR_OUT_10CH, + IVAS_TD_DECORR_OUT_11CH, + IVAS_TD_DECORR_OUT_12CH, + IVAS_TD_DECORR_OUT_13CH, + IVAS_TD_DECORR_OUT_14CH, + IVAS_TD_DECORR_OUT_15CH, + IVAS_TD_DECORR_OUT_16CH +}; + +#define IVAS_SPAR_MAX_DMX_CHS 4 +#define IVAS_MAX_DECORR_CHS IVAS_TD_DECORR_OUT_15CH +#define IVAS_MAX_DECORR_APD_SECTIONS 16 +#define IVAS_APD_2_SECT 2 +#define IVAS_APD_4_SECT 4 +#define IVAS_APD_8_SECT 8 +#define IVAS_APD_16_SECT 16 + +#define IVAS_DECORR_PARM_LOOKAHEAD_TAU 2e-3f +#define IVAS_DECORR_PARM_APD_TAU 20e-3f + +/* IVAS PCA */ +#define IVAS_PCA_NB_SUBR 20 /* 80 -> 0.25 ms, 40 -> 0.5 ms... */ +#define IVAS_PCA_COV_THRES 1e-9f +#define IVAS_PCA_QUAT_EPS 1e-7f +#define IVAS_PCA_QBITS 19 +#define IVAS_PCA_N1 91 +#define IVAS_PCA_N1_EQ ( (IVAS_PCA_N1-1)/2 ) +#define IVAS_PCA_BIT_LEN ( 1 + ( IVAS_PCA_QBITS - 1 + IVAS_PCA_QBITS ) ) +#define IVAS_PCA_INTERP 4 /* 4D (Quaternion) dimension */ +#define IVAS_PCA_N_SLOTS 40 //20 +#define IVAS_PCA_LEN_INTERP_Q ( IVAS_PCA_INTERP * IVAS_PCA_N_SLOTS ) +#define IVAS_PCA_DELAY_CMP 24 // 12 +#define IVAS_PCA_LEN_INTERP_EIG_DEC ( (IVAS_PCA_N_SLOTS+IVAS_PCA_DELAY_CMP)*16) +#define IVAS_PCA_THRES_MIN_DOT 0.8f +#define IVAS_PCA_THRES_MIN_DOT2 0.0f +#define IVAS_PCA_THRES_DIST_ALT 6.0f + +typedef enum +{ + PCA_MODE_ACTIVE = 0, + PCA_MODE_INACTIVE = 1 +} ivas_pca_bypass_mode; + + +/*----------------------------------------------------------------------------------* + * MASA constants + *----------------------------------------------------------------------------------*/ + +#define MAX_NO_THETA 19 +#define NO_THETA16_MAX 122 /* number of theta values for 16 bits */ +#define NO_SPHERICAL_GRIDS 11 /* number of spherical grid structures */ + +#define MASA_FREQUENCY_BANDS 24 +#define MASA_MAXIMUM_CODING_SUBBANDS 24 +#define MASA_MAXIMUM_DIRECTIONS 2 +#define MASA_MAX_TRANSPORT_CHANNELS 2 +#define MASA_ENC_DELAY_SLOTS 7 +#define MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS 5 + +#define MASA_DELTA_AZI_DCT0 30 +#define MASA_DELTA_AZI_DCT 10 + +#define MASA_TRANSP_BITS 1 +#define MASA_HEADER_BITS 2 +#define MASA_SUBFRAME_BITS 1 +#define MASA_LOWBITRATE_MODE_BITS 1 +#define MASA_FACTOR_CV_COH 6 + +#define MASA_GR_ORD_EL 1 +#define MASA_GR_ORD_AZ 2 + +#define MASA_DIRECTION_MAX_BITS 11 +#define MASA_NO_INDEX 32767 +#define MASA_BITS_ER 3 +#define MASA_MIN_BITS_TF 4 +#define MASA_LIMIT_2D 2 +#define MASA_NO_CV_COH 8 +#define MASA_NO_CV_COH1 5 +#define MASA_MAX_NO_CV_SUR_COH 8 +#define MASA_NO_CB_SUR_COH 7 +#define MASA_MIN_BITS_SURR_COH 12 + +#define MASA_SUM_FREQ_RANGE_BINS 25 /* Constant for MASA transport signal type detection */ +#define MASA_HI_FREQ_START_BIN 14 /* Constant for MASA transport signal type detection */ +#define MASA_STEREO_INTERPOLATION_SLOTS 16 /* The number of slots to interpolate when changing MASA transport signal type */ +#define MASA_SUM_PROTO_START_BIN 7 /* Constant for Ambisonics rendering from MASA */ + +#define QMETADATA_MAXBIT_REQ_MASA 900 /* max bit-bit/direction for avoiding requantization in MASA path */ +#define QMETADATA_MAXBIT_REQ_SBA 400 /* max bit-bit/direction for avoiding requantization in SBA path */ +#define MASA_COH_LIMIT_2IDX 144 /* limit for sum of values across components for having two joint indexes */ +#define QMETADATA_MAX_NO_DIRECTIONS 2 +#define MASA_MAX_BITS 1300 /* max. bit-budget for MASA metadata */ +#define LIMIT_ER_ELEVATION_ENC 4 +#define LIMIT_ER_SIMPLE_ENC 6 +#define LIMIT_USE_COMMON 3 + +#define MASA_COHERENCE_TOLERANCE 0.1f +#define MASA_COHERENCE_THRESHOLD 0.1f +#define MASA_RATIO_TOLERANCE 0.1f +#define MASA_RATIO_THRESHOLD 0.1f +#define MASA_ANGLE_TOLERANCE 0.5f +#define MASA_LIMIT_NO_BANDS_SUR_COH 8 +#define MINIMUM_BIT_BUDGET_NORMAL_META 100 +#define DIFF_DFRATIO_2BIT_LIMIT_IDX 3 +#define DIFF_DFRATIO_1BIT_LIMIT_IDX 6 +#define DIFF_EC_HUFF_BAND_LIMIT 8 +#define DIFF_EC_HUFF_GR0_LIMIT 8 +#define VAR_AZI_THRESH 25 +#define MASA_LIMIT_IDX_AVG_AZI 4 + +#define MASA_NO_POINTS_EQUATOR 430 +#define MASA_NO_CIRCLES 121 +#define MASA_ASIN_OFFSET 0.0064471690266724975f +#define MASA_NTOT2_FAC 32768.00566947353f +#define MASA_ANGLE_AT_EQUATOR 0.012894427382667f +#define MASA_ANGLE_AT_EQUATOR_DEG 0.738796268264740f +#define MASA_INV_ANGLE_AT_EQUATOR_DEG 1.353553128183453f +#define MASA_STEREO_MIN_BITRATE IVAS_24k4 + +#define MASA_BIT_REDUCT_PARAM 10 + +typedef enum +{ + MASA_STEREO_NOT_DEFINED, + MASA_STEREO_SPACED_MICS, + MASA_STEREO_DOWNMIX +} MASA_TRANSPORT_SIGNAL_TYPE; + + +/*----------------------------------------------------------------------------------* + * Multichannel format + *----------------------------------------------------------------------------------*/ + +#define MC_LS_SETUP_BITS 3 /* number of bits for writing the MC LS configuration */ +#define LS_SETUP_CONVERSION_NUM_MAPPINGS 35 /* number of mappings for LS setup conversion */ + +typedef enum +{ + MC_MODE_NONE, + MC_MODE_MCT, + MC_MODE_PARAMMC, + MC_MODE_MCMASA +} MC_MODE; + +typedef enum +{ + MC_LS_SETUP_5_1, + MC_LS_SETUP_7_1, + MC_LS_SETUP_5_1_2, + MC_LS_SETUP_5_1_4, + MC_LS_SETUP_7_1_4, + MC_LS_SETUP_INVALID +} MC_LS_SETUP; + + +/*----------------------------------------------------------------------------------* + * McMASA constants + *----------------------------------------------------------------------------------*/ + +#define MCMASA_SEPARATE_BRATE IVAS_64k /* minimum bitrate from which separated channel coding is supported */ + +#define MCMASA_MAX_ANA_CHANS 11 /* Maximum number of channels currently used in analysis of multichannel formats */ +#define MCMASA_MONOBITRATIO 0.3f +#define MCMASA_MONOBITRATIO_64k 0.25f +#define MC_MASA_THR_ELEVATION 40 + +#define MCMASA_LFE_QLOW -6.5f +#define MCMASA_LFE_DELTA 1.0f +#define MCMASA_LFE_1BIT_THRES 0.03f +#define MCMASA_LFE_ALPHA 0.67f +#define MCMASA_LFE_BETA 0.09f +#define MCMASA_LFE_THETA 1.3f +#define MCMASA_LFE_SYNTH_ALPHA 0.95f /* Smoothing coefficient for LFE synthesis */ + +#define NUM_ELEVATED_SPEAKERS 4 + +#define MCMASA_MIN_SPEAKERS_SEPARATE_CENTER 4 + +/*----------------------------------------------------------------------------------* + * MCT constants + *----------------------------------------------------------------------------------*/ + +#define LFE_CHANNEL 3 + +#define MIN_LFE_NRG 0.5f +#define MCT_MAX_CHANNELS MAX_TRANSPORT_CHANNELS +#define MCT_MAX_BLOCKS ( MCT_MAX_CHANNELS / CPE_CHANNELS ) /* max. number of channel pairs (MCT_MAX_CHANNELS/2) within MCT*/ + +#define MAX_NUM_DATA max( MCT_MAX_CHANNELS, 4 ) + +#define NBBITS_MCT_RATIO 4 +#define BITRATE_MCT_RATIO_RANGE ( 1 << NBBITS_MCT_RATIO ) /* Range of the coded bitrate distribution ratio */ + +#define LFE_BITS 180 + +#define MCT_LFE_MAX_LINE 24 +#define MCT_NUM_BLOCK_DATA_BITS 4 + +typedef enum +{ + MCT_CHAN_MODE_REGULAR, + MCT_CHAN_MODE_LFE, + MCT_CHAN_MODE_IGNORE +} MCT_CHAN_MODE; + + +/*----------------------------------------------------------------------------------* + * Parametric MC Constants + *----------------------------------------------------------------------------------*/ + +typedef enum +{ + PARAM_MC_SYNTH_DIRECT, /* synthesis to the transport format */ + PARAM_MC_SYNTH_LS_CONV_COV, /* loudspeaker format conversion in the covariance domain */ + PARAM_MC_SYNTH_LS_CONV_CLDFB, /* loudspeaker format conversion in the CLDFB domain */ + PARAM_MC_SYNTH_MONO_STEREO /* synthesis to mono or stereo */ +} PARAM_MC_SYNTHESIS_CONF; + +#define PARAM_MC_REG_SX (0.2f) /* Regularization factor for mixing matrix calculation */ +#define PARAM_MC_REG_GHAT (0.001f) /* Regularization factor for mixing matrix calculation */ +#define PARAM_MC_MAX_PARAMETER_BANDS 20 /* Maximum number of parameter bands */ +#define PARAM_MC_MAX_PARAMETER_BANDS_RES 14 /* Maximum number of parameter bands with decorrelation */ +#define PARAM_MC_MAX_NSLOTS 16 /* Maximum number of CLDFB slots in a frame */ +#define PARAM_MC_MAX_NSLOTS_IN_SUBFRAME 4 /* Maximum number of CLDFB slots in a subframe */ +#define PARAM_MC_NSUBFRAMES_DEC 4 /* Number of subframes for the synthesis in the decoder */ +#define PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND 30 /* Maximum number of CLDFB frequency bands within a parameter band */ +#define PARAM_MC_PARAMETER_FRAMES 2 /* Number of frames a parameter set for a parameter band is used*/ +#define PARAM_MC_ICC_ERROR_BIAS_FAC (1.15f) /* factor for favouring past ICC maps in the adaptive ICC map decision */ +#define PARAM_MC_TRANSIENT_BAND_STEP 2 /* Number of parameter bands combined in case of a transient frame*/ +#define PARAM_MC_MAX_DECORR_CLDFB_BANDS 20 /* Maximum number of CLDFB bands with decorrelation */ +#define PARAM_MC_MAX_TRANSPORT_CHANS 4 /* Number of down mix channels */ +#define PARAM_MC_MAX_ILD_REF_CHANNELS 2 /* Maximum number of reference channels for a coded ILD */ +#define PARAM_MC_NUM_CONFIGS 15 /* Number of available Parametric MC configurations */ +#define PARAM_MC_MAX_BAND_LFE 1 /* Number of parameter bands for LFE coding */ +#define PARAM_MC_SZ_ICC_MAP 11 /* Maximum number of transmitted ICCs per parameter band */ +#define PARAM_MC_SZ_ILD_MAP 12 /* Maximum number of transmitted channel energies per band*/ +#define PARAM_MC_MAX_VAL_MAP_SIZE 12 /* Maximum number of transmitted parameters per band */ +#define PARAM_MC_RANGE_CODER_TOT_SHIFT 16 /* resolution of the range coder frequency tables */ +#define PARAM_MC_SZ_ICC_QUANTIZER 8 /* Length of the ICC quantizer for Parametric MC */ +#define PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT 3 /* Number of bits for ICC uniform coding */ +#define PARAM_MC_SZ_ILD_QUANTIZER_4BITS 16 /* Length of the ILD quantizer for Parametric MC */ +#define PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT 4 /* Number of bits for ILD uniform coding */ +#define PARAM_MC_DEFAULT_MIN_ILD (-92.0f) /* Default relative channel level for untransmitted channel energies */ +#define PARAM_MC_MAX_BITS 1024 /* Maximum number of bits for the Parametric MC metadata */ +#define PARAM_MC_MAX_BAND_ABS_COV_ENC 10 +#define PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC 10 +#define PARAM_MC_MAX_BAND_ABS_COV_DEC 10 +#define PARAM_MC_ENER_LIMIT_INTRAFRAME (1.5f) +#define PARAM_MC_ENER_LIMIT_INTERFRAME (2.0f) +#define PARAM_MC_LFE_ON_THRESH (8000.0f) +#define PARAM_MC_BAND_TO_MDCT_BAND_RATIO 16 /* Ratio of resolution of CLDFB Bands to MDCT Bands */ +#define PARAM_MC_SLOT_ENC_NS 2500000L +#define PARAM_MC_MDFT_NO_SLOTS 8 + +/*----------------------------------------------------------------------------------* + * LFE Coding Constants + *----------------------------------------------------------------------------------*/ + +#define IVAS_LFE_ID_BITS 1 + +typedef enum +{ + IVAS_FILTER_STAGE_0, + IVAS_FILTER_STAGE_1, + IVAS_FILTER_MAX_STAGES /* this becomes array len while declaring the array */ +} LFE_FILTERS_STAGES; + +/* IIR filter orders */ +typedef enum +{ + IVAS_FILTER_ORDER_1 = 1, + IVAS_FILTER_ORDER_2 = 2, + IVAS_FILTER_ORDER_4 = 4, +} ivas_filter_order; + +#define IVAS_BIQUAD_FILT_LEN 3 +#define IVAS_LFE_FADE_LEN_48K 384 +#define IVAS_LFE_FADE_LEN_32K 256 +#define IVAS_LFE_FADE_LEN_16K 128 +#define IVAS_LFE_FADE_LEN_8K 64 +#define IVAS_LFE_SHIFTS_PER_DOUBLE 4 +#define IVAS_LFE_NUM_COEFFS_IN_SUBGRP 2 +#define IVAS_LFE_MAX_NUM_DCT_PASS_BINS 8 +#define IVAS_LFE_MAX_NUM_DCT_COEFFS (IVAS_LFE_MAX_NUM_DCT_PASS_BINS * IVAS_LFE_NUM_COEFFS_IN_SUBGRP) +#define IVAS_LFE_FADE_LEN_SEC_FLOAT ((float)0.008) +#define IVAS_MAX_NUM_QUANT_STRATS 2 +#define IVAS_MAX_NUM_DCT_COEF_GROUPS 4 +#define IVAS_LFE_SHIFT_BITS 5 +#define IVAS_LFE_BITRATE_5000 5000 +#define IVAS_LFE_ABS_SUM_FLT_THR (0.000001f) +#define IVAS_ZERO_PAD_LEN_MULT_FAC (0.5f) + +/* LFE PLC */ +#define LFE_PLC_BUFLEN 240 +#define LFE_PLC_FS 1600 +#define L_FRAME_1k6 ( 20 * LFE_PLC_FS / 1000 ) +#define LFE_PLC_LENANA LFE_PLC_BUFLEN +#define LFE_PLC_FDEL 300 + + +/*----------------------------------------------------------------------------------* + * Amplitude Panning (EFAP, VBAP) constants + *----------------------------------------------------------------------------------*/ + +#define PANNING_AZI_RESOLUTION 2 +#define PANNING_ELE_RESOLUTION 5 + +#define EFAP_MAX_CHAN_NUM 5 /* Maximum number of channels that constitute a polygon, 4 or 5 */ +#define EFAP_MAX_POLY_SET 70 /* Upper bound on number of polygons; with a Speaker setup of 26.0, we obtain 54 polygons/triangles in the matlab implementation. */ + +#define EFAP_MODE_EFAP 0 /* EFAP Panning */ +#define EFAP_MODE_EFIP 1 /* EFIP Panning */ + +typedef enum +{ + EFAP_DMX_NONE, + EFAP_DMX_AMPLITUDE, + EFAP_DMX_INTENSITY +} EFAP_VTX_DMX_TYPE; + +#define VBAP_NUM_SEARCH_SECTORS 4 + +/*----------------------------------------------------------------------------------* + * Binaural Rendering Constants + *----------------------------------------------------------------------------------*/ + +#define BINAURAL_MAXBANDS 60 /* Max number of bands */ +#define BINAURAL_CONVBANDS 50 /* Bands upto which convolution is performed */ +#define BINAURAL_NTAPS_MAX 96 + +#define HRTF_SH_ORDER 3 +#define HRTF_SH_CHANNELS 16 +#define HRTF_NUM_BINS 60 +#define REVERB_PREDELAY_MAX 20 /* Max input delay for reverb module */ +#define GAIN_LFE 1.88364911f /* Gain applied to LFE during renderering */ +#define LOW_BIT_RATE_BINAURAL_EQ_BINS 17 /* Number of bins in an EQ applied at low bit rates in binauralization */ +#define LOW_BIT_RATE_BINAURAL_EQ_OFFSET 14 /* Offset of bins where the low-bit-rate EQ starts*/ + +#define BINAURAL_COHERENCE_DIFFERENCE_BINS 9 /* Number of bins for direction-dependent diffuse-field binaural coherence */ + + +/*----------------------------------------------------------------------------------* + * TD Binaural Object renderer + *----------------------------------------------------------------------------------*/ + +#define MAX_NUM_TDREND_CHANNELS 11 /* max. number of channels in TD renderer (objects or loudspeaker channels) */ + +#define SFX_SPAT_BIN_MAX_NO_OF_OUTPUT_SAMPLES 288 /* 288 = 6 msec @ 48 kHz. */ +#define HRTF_MODEL_N_SECTIONS 3 /* No. sections used in approximate evaluation of model */ +#define HRTF_MODEL_BSPLINE_NUM_COEFFS 4 /* No. BSpline coefficients, including zeroth order e.g. cubic -> 4 */ +#define HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ 16 /* Square of HRTF_MODEL_BSPLINE_NUM_COEFFS */ +#define SFX_SPAT_BIN_MAX_FILTER_LENGTH 256 + +#define SPAT_BIN_MAX_INPUT_CHANNELS 1 /* Max number of input channels per source/object. Mono for now, but stereo objects may be considered. */ + +#define BINAURAL_TD_LATENCY_S 0.00675f /* Binaural TD renderer latency in second == 324 samples in between 333 and 315 */ + +/* ----- Enums - TD Renderer ----- */ + +typedef enum +{ + TDREND_DIST_ATTEN_MODEL_INV_DIST, + TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED +} TDREND_DistAttenModel_t; + +typedef enum +{ + TDREND_POSTYPE_ABSOLUTE, /* The source position is in absolute coordinates */ + TDREND_POSTYPE_RELATIVE_TO_LISTENER /* The source position is relative to the listener */ +} TDREND_PosType_t; + +typedef enum +{ + TDREND_PLAYSTATUS_INITIAL, + TDREND_PLAYSTATUS_PLAYING +} TDREND_PlayStatus_t; + +typedef enum +{ + TDREND_DeallocIndex_None, + TDREND_DeallocIndex_Signal, + TDREND_DeallocIndex_Source +} TDREND_DeallocFnIndex; + +typedef enum +{ + TDREND_HRFILT_Method_BSplineModel +#ifdef TDREND_HRTF_TABLE_METHODS + , + TDREND_HRFILT_Method_Table_F, + TDREND_HRFILT_Method_Table_S +#endif +} TDREND_HRFILT_Method_t; + +typedef enum +{ + SFX_ON, + SFX_TRANSIENT, + SFX_OFF +} SFX_OpMode_t; + + +/*----------------------------------------------------------------------------------* + * Crend constants + *----------------------------------------------------------------------------------*/ + +#define IVAS_REV_MAX_NR_BRANCHES 8 /* setup is for maximum */ + +#define IVAS_REV_MAX_IIR_FILTER_LENGTH 4 /* maximum nr of taps - MUST BE EVEN! */ + +#define RV_FILTER_MAX_FFT_SIZE ( 512 ) +#define RV_FILTER_MAX_HISTORY ( 512 - 160 ) /* for longest history */ + +#define RV_LENGTH_NR_FC ( RV_FILTER_MAX_FFT_SIZE / 2 ) + 1 + + +/* Orientation tracking types */ +#define IVAS_ORIENT_TRK_REF 0 +#define IVAS_ORIENT_TRK_AVG 1 + +typedef enum +{ + OTR_TRACKING_NONE = IVAS_ORIENT_TRK_REF-1, /* track orientation relative to external reference orientation (default: yaw=pitch=roll=0) */ + OTR_TRACKING_REF_ORIENT = IVAS_ORIENT_TRK_REF, /* track orientation relative to external reference orientation (default: yaw=pitch=roll=0) */ + OTR_TRACKING_AVG_ORIENT = IVAS_ORIENT_TRK_AVG /* track orientation relative to average orientation */ +} OTR_TRACKING_T; + + + +/*----------------------------------------------------------------------------------* + * Reverberator constants + *----------------------------------------------------------------------------------*/ + +#define IVAS_REVERB_DEFAULT_N_BANDS 31 +#define IVAS_REVERB_DEFAULT_PRE_DELAY 0.016f +#define IVAS_REVERB_DEFAULT_INPUT_DELAY 0.1f + + +/*----------------------------------------------------------------------------------* + * FB mixer constants + *----------------------------------------------------------------------------------*/ + +#define IVAS_ONE_BY_960 0.001041666666666666f +#define IVAS_ONE_BY_640 0.0015625f +#define IVAS_ONE_BY_320 0.003125f +#define IVAS_ONE_BY_240 0.004166666666666667f +#define IVAS_ONE_BY_160 0.00625f +#define IVAS_ONE_BY_80 0.0125f + +#define IVAS_960_PT_LEN 960 +#define IVAS_640_PT_LEN 640 +#define IVAS_480_PT_LEN 480 +#define IVAS_320_PT_LEN 320 +#define IVAS_240_PT_LEN 240 +#define IVAS_160_PT_LEN 160 +#define IVAS_80_PT_LEN 80 +#define IVAS_40_PT_LEN 40 + +#define IVAS_NUM_SUPPORTED_FS 3 + +/* FB windows ovlp */ +#define IVAS_FB_4MS_48K_SAMP 192 +#define IVAS_FB_1MS_48K_SAMP 48 +#define IVAS_FB_4MS_32K_SAMP 128 +#define IVAS_FB_1MS_32K_SAMP 32 +#define IVAS_FB_4MS_16K_SAMP 64 +#define IVAS_FB_1MS_16K_SAMP 16 + +#define IVAS_MAX_FB_MIXER_OUT_CH IVAS_SPAR_MAX_CH +#define IVAS_MAX_SPAR_FB_MIXER_IN_CH IVAS_SPAR_MAX_CH +#define IVAS_MAX_FB_MIXER_IN_CH MAX_CICP_CHANNELS + +#define MAX_NUM_BANDS_DIFF_NON48K 3 + +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_0 ( 0 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_1 ( 0 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_2 ( 0 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_3 ( 0 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_4 ( 0 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_5 ( 9 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_6 ( 7 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_7 ( 0 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_8 ( 0 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_9 ( 49 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_10 ( 172 ) +#define IVAS_FB_12_1MS_48K_START_OFFSET_BAND_11 ( 377 ) + +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_0 ( 179 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_1 ( 160 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_2 ( 215 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_3 ( 200 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_4 ( 186 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_5 ( 196 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_6 ( 230 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_7 ( 351 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_8 ( 456 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_9 ( 617 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_10 ( 892 ) +#define IVAS_FB_12_1MS_48K_END_BINS_BAND_11 ( 960 ) + +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_0 ( 0 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_1 ( 0 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_2 ( 0 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_3 ( 0 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_4 ( 0 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_5 ( 9 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_6 ( 7 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_7 ( 0 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_8 ( 0 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_9 ( 49 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_10 ( 172 ) +#define IVAS_FB_12_1MS_32K_START_OFFSET_BAND_11 ( 377 ) + +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_0 ( 179 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_1 ( 160 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_2 ( 215 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_3 ( 200 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_4 ( 186 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_5 ( 196 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_6 ( 230 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_7 ( 351 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_8 ( 456 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_9 ( 617 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_10 ( 640 ) +#define IVAS_FB_12_1MS_32K_END_BINS_BAND_11 ( 640 ) + +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_0 ( 0 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_1 ( 0 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_2 ( 0 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_3 ( 0 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_4 ( 0 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_5 ( 9 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_6 ( 7 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_7 ( 0 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_8 ( 0 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_9 ( 49 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_10 ( 172 ) +#define IVAS_FB_12_1MS_16K_START_OFFSET_BAND_11 ( 320 ) + +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_0 ( 179 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_1 ( 160 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_2 ( 215 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_3 ( 200 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_4 ( 186 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_5 ( 196 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_6 ( 230 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_7 ( 320 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_8 ( 320 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_9 ( 320 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_10 ( 320 ) +#define IVAS_FB_12_1MS_16K_END_BINS_BAND_11 ( 320 ) + +#define IVAS_FB_BANDS_12 12 +#define IVAS_FB_BANDS_20 20 +#define IVAS_MAX_NUM_BANDS IVAS_FB_BANDS_12 +#define IVAS_MAX_NUM_FB_BANDS IVAS_FB_BANDS_20 +#define IVAS_FB_12_1MS_LEN ( IVAS_FB_12_1MS_48K_END_BINS_BAND_0 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_0 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_1 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_1 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_2 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_2 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_3 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_3 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_4 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_4 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_5 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_5 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_6 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_6 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_7 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_7 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_8 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_8 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_9 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_9 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_10 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_10 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_11 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_11 ) +#define IVAS_16K_12BANDS_ACTIVE_BANDS 10 + +#define SPAR_DIRAC_SPLIT_START_BAND 8 +#define SPAR_DTX_BANDS 2 +#define DIRAC_DTX_BANDS 2 +#define SPAR_DIRAC_DTX_BANDS ( SPAR_DTX_BANDS + DIRAC_DTX_BANDS ) +#define CLDFB_PAR_WEIGHT_START_BAND 7 + +#endif +/* clang-format on */ +/* IVAS_CNST_H */ diff --git a/lib_com/ivas_cov_smooth.c b/lib_com/ivas_cov_smooth.c new file mode 100644 index 0000000000..a01b35d26b --- /dev/null +++ b/lib_com/ivas_cov_smooth.c @@ -0,0 +1,253 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_prot.h" +#include "wmops.h" +#include "prot.h" + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_set_up_cov_smoothing() + * + * Setup for covariance smoothing + *-----------------------------------------------------------------------------------------*/ + +static void ivas_set_up_cov_smoothing( + ivas_cov_smooth_state_t *pState, + ivas_filterbank_t *pFb, + const float max_update_rate, + const int16_t min_pool_size ) +{ + int16_t j, k; + + for ( j = 0; j < pFb->filterbank_num_bands; j++ ) + { + float update_factor = 0.0f; + + for ( k = 0; k < pFb->fb_bin_to_band.pFb_active_bins_per_band[j]; k++ ) + { + update_factor += pFb->fb_bin_to_band.pFb_bin_to_band[j][k]; + } + + pState->pSmoothing_factor[j] = update_factor / min_pool_size; + + if ( pState->pSmoothing_factor[j] > max_update_rate ) + { + pState->pSmoothing_factor[j] = max_update_rate; + } + } + + pState->prior_bank_idx = -1; + return; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_covar_smooth_enc_open() + * + * Allocate and initialize SPAR Covar. smoothing handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_covar_smooth_enc_open( + ivas_cov_smooth_state_t **hCovState_out, /* i/o: SPAR Covar. smoothing handle */ + const ivas_cov_smooth_cfg_t *cov_smooth_cfg, /* i : SPAR config. handle */ + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int16_t nchan_inp /* i : number of input channels */ +) +{ + ivas_cov_smooth_state_t *hCovState; + int16_t i, j; + + if ( ( hCovState = (ivas_cov_smooth_state_t *) count_malloc( sizeof( ivas_cov_smooth_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); + } + + if ( ( hCovState->pSmoothing_factor = (float *) count_malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); + } + + for ( i = 0; i < nchan_inp; i++ ) + { + for ( j = 0; j < nchan_inp; j++ ) + { + if ( ( hCovState->pPrior_cov_real[i][j] = (float *) count_malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); + } + set_zero( hCovState->pPrior_cov_real[i][j], cov_smooth_cfg->max_bands ); + } + } + + ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size ); + + *hCovState_out = hCovState; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_covar_smooth_enc_close() + * + * Deallocate SPAR Covar. smoothing handle + *------------------------------------------------------------------------*/ + +void ivas_spar_covar_smooth_enc_close( + ivas_cov_smooth_state_t **hCovState_out, /* i/o: SPAR Covar. smoothing handle */ + const int16_t nchan_inp /* i : number of input channels */ +) +{ + ivas_cov_smooth_state_t *hCovState; + int16_t i, j; + + hCovState = *hCovState_out; + + if ( hCovState != NULL ) + { + count_free( hCovState->pSmoothing_factor ); + hCovState->pSmoothing_factor = NULL; + + for ( i = 0; i < nchan_inp; i++ ) + { + for ( j = 0; j < nchan_inp; j++ ) + { + count_free( hCovState->pPrior_cov_real[i][j] ); + hCovState->pPrior_cov_real[i][j] = NULL; + } + } + + count_free( hCovState ); + hCovState_out = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_compute_smooth_cov() + * + * Compute smooth covariance real/imag. + *-----------------------------------------------------------------------------------------*/ + +static void ivas_compute_smooth_cov( + ivas_cov_smooth_state_t *hCovState, + ivas_cov_smooth_in_buf_t *pIn_buf, + ivas_filterbank_t *pFb, + float *pCov_buf[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float *pPrior_cov_buf[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const float fac, + const int16_t start_band, + const int16_t end_band ) +{ + int16_t i, j, k; + int16_t prev_idx = hCovState->prior_bank_idx; + int16_t num_ch = pIn_buf->num_ch; + float factor = 0; + + assert( end_band <= pFb->filterbank_num_bands ); + + if ( prev_idx == -1 || pIn_buf->reset_cov == 1 ) + { + for ( i = 0; i < num_ch; i++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + pCov_buf[i][i][k] += ( hCovState->pSmoothing_factor[k] * fac ); + } + } + } + else if ( prev_idx == 0 ) + { + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + if ( i == j ) + { + factor = fac; + } + else + { + factor = 0.0f; + } + + for ( k = start_band; k < end_band; k++ ) + { + pCov_buf[i][j][k] = pPrior_cov_buf[i][j][k] + ( hCovState->pSmoothing_factor[k] * ( pCov_buf[i][j][k] - pPrior_cov_buf[i][j][k] + factor ) ); + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_cov_smooth_process() + * + * Covariance smoothing process + *-----------------------------------------------------------------------------------------*/ + +void ivas_cov_smooth_process( + ivas_cov_smooth_state_t *hCovState, /* i/o: Covariance state handle */ + ivas_cov_smooth_in_buf_t *pIn_buf, + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int16_t start_band, + const int16_t end_band ) +{ + int16_t i, j; + int16_t num_ch = pIn_buf->num_ch; + int16_t num_bands = end_band - start_band; + + ivas_compute_smooth_cov( hCovState, pIn_buf, pFb, pIn_buf->cov_real, hCovState->pPrior_cov_real, 1e-20f, start_band, end_band ); + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + mvr2r( &pIn_buf->cov_real[i][j][start_band], &hCovState->pPrior_cov_real[i][j][start_band], num_bands ); + } + } + + hCovState->prior_bank_idx = 0; + + return; +} diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c new file mode 100644 index 0000000000..a7e3680ba9 --- /dev/null +++ b/lib_com/ivas_dirac_com.c @@ -0,0 +1,986 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static uint16_t deindex_sph_idx_general( const int16_t idx_sph, const int16_t no_bits, float *theta_dec, float *phi_dec, uint16_t *p_id_phi, const MC_LS_SETUP mc_format ); + +/*------------------------------------------------------------------------- + * ivas_dirac_sba_config() + * + * DirAC Configuration function; used also in MASA decoder + *------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_config( + void *st_ivas, /* i/o: IVAS encoder/decoder state structure */ + const int16_t enc_dec /* i : encoder or decoder flag */ +) +{ + IVAS_FORMAT ivas_format; + int16_t sba_order, sba_planar; + int16_t *nSCE, *nCPE, *element_mode, *nchan_transport; + int32_t ivas_total_brate; + DIRAC_CONFIG_DATA_HANDLE hConfig; + IVAS_QMETADATA_HANDLE hQMetaData; + int32_t Fs; + int16_t *band_grouping; + ivas_error error; + int16_t spar_dirac_split_band; + IVAS_FB_MIXER_HANDLE hFbMdft; + SBA_MODE sba_mode; + int16_t *dirac_to_spar_md_bands; + + error = IVAS_ERR_OK; + + if ( enc_dec == ENC ) + { + ivas_format = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_format; + nSCE = &( ( (Encoder_Struct *) st_ivas )->nSCE ); + nCPE = &( (Encoder_Struct *) st_ivas )->nCPE; + element_mode = &( (Encoder_Struct *) st_ivas )->hEncoderConfig->element_mode_init; + nchan_transport = &( (Encoder_Struct *) st_ivas )->nchan_transport; + sba_order = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->sba_order; + sba_planar = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->sba_planar; + ivas_total_brate = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_total_brate; + Fs = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->input_Fs; + band_grouping = ( (Encoder_Struct *) st_ivas )->hDirAC->band_grouping; + hConfig = ( (Encoder_Struct *) st_ivas )->hDirAC->hConfig; + hQMetaData = ( (Encoder_Struct *) st_ivas )->hQMetaData; + sba_mode = ( (Encoder_Struct *) st_ivas )->sba_mode; + if ( ( (Encoder_Struct *) st_ivas )->hSpar != NULL ) + { + hFbMdft = ( (Encoder_Struct *) st_ivas )->hSpar->hSparFoa->hFbMixer; + } + else + { + hFbMdft = NULL; + } + dirac_to_spar_md_bands = ( (Encoder_Struct *) st_ivas )->hDirAC->dirac_to_spar_md_bands; + } + else + { + ivas_format = ( (Decoder_Struct *) st_ivas )->ivas_format; + nSCE = &( (Decoder_Struct *) st_ivas )->nSCE; + nCPE = &( (Decoder_Struct *) st_ivas )->nCPE; + element_mode = &( (Decoder_Struct *) st_ivas )->element_mode_init; + nchan_transport = &( (Decoder_Struct *) st_ivas )->nchan_transport; + sba_order = ( (Decoder_Struct *) st_ivas )->sba_order; + sba_planar = ( (Decoder_Struct *) st_ivas )->sba_planar; + ivas_total_brate = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->ivas_total_brate; + Fs = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->output_Fs; + band_grouping = ( (Decoder_Struct *) st_ivas )->hDirAC->band_grouping; + hConfig = ( (Decoder_Struct *) st_ivas )->hDirAC->hConfig; + hQMetaData = ( (Decoder_Struct *) st_ivas )->hQMetaData; + sba_mode = ( (Decoder_Struct *) st_ivas )->sba_mode; + if ( ( (Decoder_Struct *) st_ivas )->hSpar != NULL ) + { + hFbMdft = ( (Decoder_Struct *) st_ivas )->hSpar->hSparFoa->hFbMixer; + } + else + { + hFbMdft = NULL; + } + ( (Decoder_Struct *) st_ivas )->hDirAC->hFbMdft = hFbMdft; + dirac_to_spar_md_bands = ( (Decoder_Struct *) st_ivas )->hDirAC->dirac_to_spar_md_bands; + } + + if ( sba_mode == SBA_MODE_SPAR ) + { + hConfig->nbands = IVAS_MAX_NUM_BANDS; + spar_dirac_split_band = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); + } + else + { + hConfig->nbands = 5; + spar_dirac_split_band = 0; + } + hConfig->enc_param_start_band = 0; + hConfig->dec_param_estim = FALSE; + + if ( ivas_format == SBA_FORMAT ) /* skip for MASA decoder */ + { + if ( ( error = ivas_dirac_sba_config( hQMetaData, nchan_transport, nSCE, nCPE, element_mode, ivas_total_brate, sba_order, sba_planar, + sba_mode, hConfig->nbands - spar_dirac_split_band ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hQMetaData != NULL ) + { + if ( enc_dec == ENC || sba_mode != SBA_MODE_SPAR ) + { + hConfig->nbands = hQMetaData->q_direction[0].cfg.nbands; + } + hConfig->enc_param_start_band = hQMetaData->q_direction[0].cfg.start_band + spar_dirac_split_band; + } + + + if ( sba_mode == SBA_MODE_SPAR ) + { + hConfig->dec_param_estim = TRUE; + if ( hConfig->dec_param_estim == TRUE ) + { + hConfig->enc_param_start_band = spar_dirac_split_band; + } + } + else + { + if ( *nchan_transport > 2 ) + { + hConfig->dec_param_estim = TRUE; + } + } + } + + if ( sba_mode == SBA_MODE_SPAR ) + { + ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), + dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, + hFbMdft ); + } + else + { + ivas_dirac_config_bands( band_grouping, hConfig->nbands, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), + NULL, 0, 0, + hFbMdft ); + } + + + return error; +} + +/*------------------------------------------------------------------------- + * ivas_dirac_sba_config_bands() + * + * DirAC Configuration freq. band function; used also in MASA decoder + *------------------------------------------------------------------------*/ + +void ivas_dirac_config_bands( + int16_t *band_grouping, /* o : band grouping */ + const int16_t nbands, /* i : number of bands */ + const int16_t max_band, /* i : maximal band index +1 */ + int16_t *dirac_to_spar_md_bands, + const int8_t useLowerBandRes, + const int16_t enc_param_start_band, + IVAS_FB_MIXER_HANDLE hFbMdft ) +{ + int16_t i; + { + if ( nbands == 5 ) + { + mvs2s( DirAC_band_grouping_5, band_grouping, 5 + 1 ); + } + else if ( nbands == 6 ) + { + mvs2s( DirAC_band_grouping_6, band_grouping, 6 + 1 ); + } + else if ( nbands == 12 ) + { + int16_t band; + for ( band = 0; band < DIRAC_MAX_NBANDS; band++ ) + { + dirac_to_spar_md_bands[band] = band; + } + if ( hFbMdft != NULL ) + { + int16_t sb, idx1, idx2, b; + + idx1 = -1; + sb = 0; + for ( b = 0; b < max_band; b++ ) + { + idx2 = hFbMdft->pFb->fb_bin_to_band.p_cldfb_map_to_spar_band[b]; + if ( idx2 > idx1 ) + { + band_grouping[sb++] = b; + idx1 = idx2; + } + } + band_grouping[sb] = max_band; + + /* set the remaining bands to max_band to avoid problems for the DirAC parameter estimation with bw < FB */ + for ( b = sb; b <= nbands; b++ ) + { + band_grouping[b] = max_band; + } + } + else + { + mvs2s( DirAC_band_grouping_12, band_grouping, 12 + 1 ); + } + + if ( useLowerBandRes ) + { + int16_t step = DIRAC_LOW_BANDRES_STEP; + int16_t reduced_band; + for ( band = enc_param_start_band + 2, reduced_band = enc_param_start_band + 1; band <= DIRAC_MAX_NBANDS; band += step, reduced_band++ ) + { + band_grouping[reduced_band] = band_grouping[band]; + } + for ( ; reduced_band <= DIRAC_MAX_NBANDS; reduced_band++ ) + { + band_grouping[reduced_band] = max_band; + } + for ( band = enc_param_start_band + 1; band < DIRAC_MAX_NBANDS; band++ ) + { + dirac_to_spar_md_bands[band] = dirac_to_spar_md_bands[band - 1]; + } + } + else + { + /* always code the last two fb bands together */ + band_grouping[DIRAC_MAX_NBANDS - 1] = max_band; + dirac_to_spar_md_bands[DIRAC_MAX_NBANDS - 1] = DIRAC_MAX_NBANDS - 2; + } + } + else + { + assert( 0 && "nbands must be 5 or 6!" ); + } + } + + /* Limit the band range to band max */ + for ( i = 0; i < nbands + 1; i++ ) + { + if ( band_grouping[i] > max_band ) + { + band_grouping[i] = max_band; + } + } + + return; +} + +/*------------------------------------------------------------------------- + * ivas_dirac_sba_config() + * + * DirAC Configuration function for SBA + *------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_sba_config( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + int16_t *nchan_transport, /* o : number of transport channel needed for MASA format */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE, /* o : number of CPEs */ + int16_t *element_mode, /* i/o: element mode of the core coder */ + int32_t sba_total_brate, /* i : SBA total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t sba_planar, /* i : SBA planar flag */ + const SBA_MODE sba_mode, /* i : SBA mode */ + const int16_t nbands /* i : number of frequency bands */ +) +{ + int16_t i; + int16_t nbands_wb; + int16_t nbands_coded; + ivas_error error; + + error = IVAS_ERR_OK; + hQMetaData->is_masa_type_format = 0; + + if ( sba_mode == SBA_MODE_SPAR ) + { + /*map the bitrate for SID frame*/ + if ( sba_total_brate == IVAS_SID_5k ) + { + if ( *element_mode == IVAS_SCE ) + { + sba_total_brate = ACELP_24k40; + } + else + { + sba_total_brate = ACELP_48k; + } + } + ivas_set_qmetadata_maxbit_req( hQMetaData, SBA_FORMAT ); + if ( sba_total_brate <= IVAS_16k4 ) + { + hQMetaData->useLowerRes = 1; + } + else + { + hQMetaData->useLowerRes = 0; + } + + nbands_coded = nbands; + if ( sba_total_brate <= (int32_t) ( (float) IVAS_192k / (float) SPAR_DIRAC_SPLIT_START_BAND ) ) + { + hQMetaData->useLowerBandRes = 1; + nbands_coded = nbands / 2 + nbands % 2; + } + else + { + hQMetaData->useLowerBandRes = 0; + nbands_coded = nbands - 1; /* always combine the last two bands */ + } + + if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, nbands_coded, 1, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( sba_total_brate <= IVAS_13k2 ) + { + hQMetaData->bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 70; + } + else if ( sba_total_brate <= IVAS_16k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 80; + } + else if ( sba_total_brate <= IVAS_24k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 106; + } + else if ( sba_total_brate <= IVAS_32k ) + { + hQMetaData->bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 214; + } + else if ( sba_total_brate <= IVAS_48k ) + { + hQMetaData->bits_frame_nominal = IVAS_48k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 240; + } + else if ( sba_total_brate <= IVAS_64k ) + { + hQMetaData->bits_frame_nominal = IVAS_64k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_80k ) + { + hQMetaData->bits_frame_nominal = IVAS_80k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_96k ) + { + hQMetaData->bits_frame_nominal = IVAS_96k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_128k ) + { + hQMetaData->bits_frame_nominal = IVAS_128k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 250; + } + else + { + hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->metadata_max_bits = MAX16B; /* no limit */ + } + + hQMetaData->metadata_max_bits = (int16_t) ceilf( (float) hQMetaData->metadata_max_bits * hQMetaData->q_direction[0].cfg.nbands / 5 ); + hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA >> 1; + + return error; + } + + if ( sba_total_brate > IVAS_SID_4k4 ) + { + *nchan_transport = ivas_dirac_getNumTransportChannels( sba_total_brate, sba_order, sba_planar ); + } + else if ( sba_total_brate == IVAS_SID_4k4 ) + { + switch ( *element_mode ) + { + case IVAS_CPE_MDCT: + *nchan_transport = 2; + break; + case IVAS_SCE: + *nchan_transport = 1; + break; + default: + assert( !"Wrong initial element mode for SBA SID!" ); + break; + } + } + + if ( hQMetaData != NULL ) + { + ivas_set_qmetadata_maxbit_req( hQMetaData, SBA_FORMAT ); + if ( sba_total_brate <= IVAS_16k4 ) + { + hQMetaData->useLowerRes = 1; + } + else + { + hQMetaData->useLowerRes = 0; + } + if ( sba_total_brate >= IVAS_96k ) + { + if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, 6, 1, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + nbands_wb = 4; + } + else + { + if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, 5, 1, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + nbands_wb = 4; + } + for ( i = 0; i < hQMetaData->no_directions; i++ ) + { + hQMetaData->q_direction[i].cfg.start_band = 0; + } + + if ( *nchan_transport > 2 && *nchan_transport <= 8 ) + { + *nCPE = ( ( *nchan_transport + 1 ) / 2 ); + *nSCE = 0; + + hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + + hQMetaData->metadata_max_bits = MAX16B; /* no limit */ + for ( i = 0; i < hQMetaData->no_directions; i++ ) + { + hQMetaData->q_direction[i].cfg.search_effort = 1; + hQMetaData->q_direction[i].cfg.start_band = nbands_wb; + } + + *element_mode = IVAS_CPE_MDCT; + } + else if ( *nchan_transport == 2 ) + { + *nCPE = 1; + *nSCE = 0; + + if ( sba_total_brate <= IVAS_48k ) + { + hQMetaData->bits_frame_nominal = IVAS_48k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 120; + } + else if ( sba_total_brate <= IVAS_64k ) + { + hQMetaData->bits_frame_nominal = IVAS_64k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_80k ) + { + hQMetaData->bits_frame_nominal = IVAS_80k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_96k ) + { + hQMetaData->bits_frame_nominal = IVAS_96k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else + { + hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->metadata_max_bits = 250; + } + + *element_mode = IVAS_CPE_MDCT; + } + else if ( *nchan_transport == 1 ) + { + *nCPE = 0; + *nSCE = 1; + + if ( sba_total_brate <= IVAS_13k2 ) + { + hQMetaData->bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 70; + } + else if ( sba_total_brate <= IVAS_16k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 80; + } + else if ( sba_total_brate <= IVAS_24k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 160; + } + else if ( sba_total_brate <= IVAS_32k ) + { + } + else + { + hQMetaData->bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 176; + } + + *element_mode = IVAS_SCE; + } + else + { + assert( !"SBA number of transport channels must be 8 or lower" ); + } + } + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_getNumTransportChannels() + * + * + *------------------------------------------------------------------------*/ + +/*! r: number of IVAS transport channels */ +int16_t ivas_dirac_getNumTransportChannels( + const int32_t sba_total_brate, /* i : SBA total bitrate */ + const int16_t sba_order, /* i : SBA order */ + const int16_t sba_planar /* i : SBA planar flag */ +) +{ + int16_t num_channels; + + num_channels = 0; + + if ( sba_total_brate >= DIRAC_MIN_BITRATE_8_TRANS_CHAN ) + { + switch ( sba_order ) + { + case 3: + num_channels = sba_planar ? 7 : 8; + break; + case 2: + num_channels = sba_planar ? 5 : 6; + break; + case 1: + num_channels = sba_planar ? 3 : 4; + break; + default: + assert( 0 && "Order not supported!" ); + } + } + else if ( sba_total_brate >= DIRAC_MIN_BITRATE_6_TRANS_CHAN ) + { + switch ( sba_order ) + { + case 3: + case 2: + num_channels = sba_planar ? 5 : 6; + break; + case 1: + num_channels = sba_planar ? 3 : 4; + break; + default: + assert( 0 && "Order not supported!" ); + } + } + else if ( sba_total_brate >= DIRAC_MIN_BITRATE_4_TRANS_CHAN ) + { + if ( sba_planar ) + { + num_channels = 3; + } + else + { + num_channels = 4; + } + } + else if ( sba_total_brate >= DIRAC_MIN_BITRATE_2_TRANS_CHAN ) + { + num_channels = 2; + } + else + { + num_channels = 1; + } + + return num_channels; +} + + +/*------------------------------------------------------------------------- + * computeDirectionVectors() + * + * + *------------------------------------------------------------------------*/ + +void computeDirectionVectors( + float *intensity_real_x, + float *intensity_real_y, + float *intensity_real_z, + const int16_t enc_param_start_band, + const int16_t num_frequency_bands, + float *direction_vector_x, + float *direction_vector_y, + float *direction_vector_z ) +{ + int16_t i; + float intensityNorm; + + for ( i = enc_param_start_band; i < enc_param_start_band + num_frequency_bands; ++i ) + { + intensityNorm = *( intensity_real_x ) * *( intensity_real_x ) + + *( intensity_real_y ) * *( intensity_real_y ) + + *( intensity_real_z ) * *( intensity_real_z ); + + if ( intensityNorm <= EPSILON ) + { + intensityNorm = 1.0f; + *( direction_vector_x++ ) = 1.0f; + *( direction_vector_y++ ) = 0.0f; + *( direction_vector_z++ ) = 0.0f; + intensity_real_x++; + intensity_real_y++; + intensity_real_z++; + } + else + { + intensityNorm = sqrtf( 1.f / intensityNorm ); + *( direction_vector_x++ ) = *( intensity_real_x++ ) * intensityNorm; + *( direction_vector_y++ ) = *( intensity_real_y++ ) * intensityNorm; + *( direction_vector_z++ ) = *( intensity_real_z++ ) * intensityNorm; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * computeDiffuseness() + * + * + *------------------------------------------------------------------------*/ + +void computeDiffuseness( + float *buffer_intensity[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF], + const float *buffer_energy, + const int16_t num_freq_bands, + float *diffuseness ) +{ + float intensity_slow[DIRAC_NUM_DIMS * CLDFB_NO_CHANNELS_MAX]; + float intensity_slow_abs[CLDFB_NO_CHANNELS_MAX]; + float energy_slow[CLDFB_NO_CHANNELS_MAX]; + int16_t i, j, k; + float tmp = 0; + float *p_tmp; + const float *p_tmp_c; + + /* Compute Intensity slow and energy slow */ + + set_f( intensity_slow, 0.0f, DIRAC_NUM_DIMS * CLDFB_NO_CHANNELS_MAX ); + set_f( intensity_slow_abs, 0.0f, CLDFB_NO_CHANNELS_MAX ); + set_f( energy_slow, 0.0f, CLDFB_NO_CHANNELS_MAX ); + + for ( i = 0; i < DIRAC_NO_COL_AVG_DIFF; ++i ) + { + /* Energy slow */ + p_tmp_c = buffer_energy + i * num_freq_bands; + for ( k = 0; k < num_freq_bands; k++ ) + { + energy_slow[k] += *( p_tmp_c++ ); + } + + /* Intensity slow */ + for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) + { + p_tmp = buffer_intensity[j][i]; + + for ( k = 0; k < num_freq_bands; k++ ) + { + intensity_slow[j * num_freq_bands + k] += *( p_tmp++ ); + } + } + } + + /* intensity_slow.^2 + intensity_slow_abs*/ + for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) + { + p_tmp = intensity_slow + j * num_freq_bands; + + for ( k = 0; k < num_freq_bands; k++ ) + { + *( p_tmp ) *= ( *p_tmp ); + intensity_slow_abs[k] += *( p_tmp++ ); + } + } + + /* Compute Diffuseness */ + p_tmp = intensity_slow_abs; + for ( i = 0; i < num_freq_bands; ++i ) + { + tmp = sqrtf( *( p_tmp++ ) ) / ( energy_slow[i] + EPSILON ); + tmp = 1.0f - tmp; + diffuseness[i] = ( ( tmp < 1.0f ) ? ( ( tmp < 0.0f ) ? 0.f : tmp ) : 1.0f ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * deindex_azimuth() + * + * Deindex one azimuth index + *-------------------------------------------------------------------*/ + +/*! r: azimuth value */ +float deindex_azimuth( + int16_t id_phi, /* i : index */ + const int16_t no_bits, /* i : number of bits for the spherical grid */ + const int16_t id_th, /* i : elevation index */ + const int16_t remap, /* i : remapping flag */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + int16_t flag_delta; + float dd, delta_phi; + float phi_hat; + + if ( ( mc_format != MC_LS_SETUP_INVALID ) && ( no_bits == 2 ) ) + { + if ( id_phi % 2 == 0 ) + { + phi_hat = cb_azi_chan[id_phi / 2]; + } + else + { + phi_hat = -cb_azi_chan[( id_phi + 1 ) / 2]; + } + return phi_hat; + } + flag_delta = ( id_th % 2 == 1 ); + + if ( remap ) + { + id_phi = ivas_qmetadata_dereorder_generic( id_phi ) + ( no_phi_masa[no_bits - 1][id_th] >> 1 ); + } + + delta_phi = 360 / (float) ( no_phi_masa[no_bits - 1][id_th] ); + if ( ( flag_delta == 1 ) && ( no_phi_masa[no_bits - 1][id_th] > 2 ) && mc_format == MC_LS_SETUP_INVALID ) + { + dd = delta_phi / 2.0f; + } + else + { + dd = 0; + } + + id_phi -= ( ( no_phi_masa[no_bits - 1][id_th] ) >> 1 ); + phi_hat = id_phi * delta_phi + dd + 180 - 180; + if ( mc_format != MC_LS_SETUP_INVALID ) + { + phi_hat = companding_azimuth( phi_hat, mc_format, ( id_th * delta_theta_masa[no_bits - 3] > MC_MASA_THR_ELEVATION ), -1 ); + } + + return phi_hat; +} + + +/*---------------------------------------------------------------- + * deindex_spherical_component() + * + * decoding the spherical index for one tile + *-----------------------------------------------------------------*/ + +void deindex_spherical_component( + const uint16_t sph_idx, /* i : spherical index */ + float *az, /* o : decoded azimuth value */ + float *el, /* o : decoded elevation value */ + uint16_t *az_idx, /* o : azimuth index */ + uint16_t *el_idx, /* o : elevation index */ + const uint16_t no_bits, /* i : number of bits for the spherical grid */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + assert( sph_idx < ( 1 << no_bits ) ); + switch ( no_bits ) + { + case 0: + *az = 0; + *el = 0; + *az_idx = 0; + *el_idx = 0; + break; + case 1: + *az_idx = sph_idx; + *az = ( *az_idx ) * ( -180.f ); + *el = 0; + *el_idx = 0; + break; + case 2: + *el = 0; + *el_idx = 0; + *az_idx = sph_idx; + *az = deindex_azimuth( *az_idx, no_bits, 0, 0, mc_format ); + break; + default: + *el_idx = deindex_sph_idx_general( sph_idx, no_bits, el, az, az_idx, mc_format ); + break; + } + + return; +} + + +/*-----------------------------------------------------------------------* + * Local functions + *-----------------------------------------------------------------------*/ + + +/*-------------------------------------------------------------------* + * deindex_sph_idx_general() + * + * deindex the spherical index for more than 2 bits for the spherical grid + *----------------------------------------------------------------------*/ + +/* !r: decoded elevation index */ +static uint16_t deindex_sph_idx_general( + const int16_t idx_sph, /* i : spherical index */ + const int16_t no_bits, /* i : number of bits in the spherical grid*/ + float *theta_dec, /* o : decoded elevation value */ + float *phi_dec, /* o : decoded azimuth value */ + uint16_t *p_id_phi, /* o : decoded azimuth index */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + int16_t i; + uint16_t id_th; + int16_t sign_theta; + int16_t id_phi; + int16_t cum_n[250]; + int16_t no_th; + const int16_t *n; + + id_th = 0; + id_phi = 0; + sign_theta = 1; + + no_th = no_theta_masa[no_bits - 3]; + n = no_phi_masa[no_bits - 1]; + if ( mc_format != MC_LS_SETUP_INVALID ) + { + /* indexing */ + + cum_n[0] = n[0]; + if ( idx_sph >= cum_n[0] ) + { + for ( i = 1; i < no_th; i++ ) + { + cum_n[i] = cum_n[i - 1] + n[i]; + if ( idx_sph < cum_n[i] ) + { + id_th = i; + id_phi = idx_sph - cum_n[i - 1]; + break; + } + } + } + } + else + { + /* Starting from Equator, alternating positive and negative */ + cum_n[0] = n[0]; + if ( idx_sph >= cum_n[0] ) + { + for ( i = 1; i < no_th; i++ ) + { + cum_n[2 * i - 1] = cum_n[2 * i - 2] + n[i]; + + if ( idx_sph < cum_n[2 * i - 1] ) + { + id_th = i; + sign_theta = 1; + id_phi = idx_sph - cum_n[2 * i - 2]; + break; + } + + cum_n[2 * i] = cum_n[2 * i - 1] + n[i]; + + if ( idx_sph < cum_n[2 * i] ) + { + id_th = i; + sign_theta = -1; + id_phi = idx_sph - cum_n[2 * i - 1]; + break; + } + + if ( i == ( no_th - 1 ) ) + { + id_th = i; + sign_theta = -1; + id_phi = 0; /* idx_sph - cum_n[2*i-1]; */ + break; + } + } + } + } + + if ( id_th == 0 ) + { + id_phi = idx_sph; + } + else + { + if ( ( id_th == no_th - 1 ) && ( no_bits > 4 ) ) + { + id_phi = 0; + } + } + + *theta_dec = id_th * delta_theta_masa[no_bits - 3]; + + if ( *theta_dec >= 90 ) + { + *theta_dec = 90.f * sign_theta; + *phi_dec = 0; + *p_id_phi = 0; + } + else + { + *theta_dec *= sign_theta; + + *phi_dec = deindex_azimuth( id_phi, no_bits, id_th, 0, mc_format ); + *p_id_phi = id_phi; + } + + return id_th; +} diff --git a/lib_com/ivas_entropy_coder_common.c b/lib_com/ivas_entropy_coder_common.c new file mode 100644 index 0000000000..6e71b44d0a --- /dev/null +++ b/lib_com/ivas_entropy_coder_common.c @@ -0,0 +1,93 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_prot.h" +#include "wmops.h" + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_wrap_arround) + * + * wrap around + *-----------------------------------------------------------------------------------------*/ + +void ivas_wrap_arround( + int16_t *pArr, + const int16_t min_val, + const int16_t max_val, + const int16_t length ) +{ + int16_t i; + + for ( i = 0; i < length; i++ ) + { + if ( pArr[i] < min_val ) + { + pArr[i] = max_val - min_val + pArr[i] + 1; + } + if ( pArr[i] > max_val ) + { + pArr[i] = min_val + pArr[i] - max_val - 1; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_cum_freq_model() + * + * get cumulative frequency model + *-----------------------------------------------------------------------------------------*/ + +void ivas_get_cum_freq_model( + const int16_t *pFreq_model, + const int16_t length, + int16_t *pCum_freq_model ) +{ + int16_t i; + + pCum_freq_model[length] = 0; + + for ( i = length; i > 0; i-- ) + { + pCum_freq_model[i - 1] = pCum_freq_model[i] + pFreq_model[i]; + } + + return; +} diff --git a/lib_com/ivas_error.h b/lib_com/ivas_error.h new file mode 100644 index 0000000000..58c45ee5ee --- /dev/null +++ b/lib_com/ivas_error.h @@ -0,0 +1,167 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/* options.h needed for debugging/development features + * It should be stripped for delivery along with debugging switches */ +#include "options.h" + +#ifndef IVAS_ERROR_H +#define IVAS_ERROR_H + +typedef enum +{ + /*----------------------------------------* + * no error * + *----------------------------------------*/ + IVAS_ERR_OK = 0x0000, + + /*----------------------------------------* + * API errors * + *----------------------------------------*/ + IVAS_ERR_INVALID_BANDWIDTH = 0x1000, + IVAS_ERR_INVALID_DTX_UPDATE_RATE, + IVAS_ERR_INVALID_SAMPLING_RATE, + IVAS_ERR_NOT_CONFIGURED, + IVAS_ERR_INVALID_STEREO_MODE, + IVAS_ERR_INVALID_CICP_INDEX, + IVAS_ERR_INVALID_BITRATE, + IVAS_ERR_INVALID_MASA_CONFIG, + IVAS_ERR_TOO_MANY_OBJECT_INPUTS, + IVAS_ERR_INDEX_OUT_OF_BOUNDS, + IVAS_ERR_RECONFIGURE_NOT_SUPPORTED, + IVAS_ERR_INVALID_FEC_CONFIG, + IVAS_ERR_INVALID_FEC_OFFSET, + IVAS_ERR_INVALID_INPUT_BUFFER_SIZE, + IVAS_ERR_DTX_NOT_SUPPORTED, + IVAS_ERR_UNEXPECTED_NULL_POINTER, + IVAS_ERR_METADATA_NOT_EXPECTED, + IVAS_ERR_INVALID_SPAR_CONFIG, + IVAS_ERR_WRONG_PARAMS, + IVAS_ERR_INIT_ERROR, + IVAS_ERR_DECODER_ERROR, + IVAS_ERR_WRONG_MODE, + IVAS_ERR_INVALID_OUTPUT_FORMAT, + IVAS_ERR_HEAD_ROTATION_NOT_SUPPORTED, + IVAS_ERR_INVALID_HRTF, + IVAS_ERR_INVALID_INPUT_FORMAT, + IVAS_ERR_INVALID_INDEX, + IVAS_ERR_NOT_SUPPORTED_OPTION, + IVAS_ERR_NOT_IMPLEMENTED, +#ifdef DEBUGGING + IVAS_ERR_INVALID_FORCE_MODE, +#endif + IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH, + IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT, + IVAS_ERR_INVALID_MASA_FORMAT_METADATA_FILE, + + /*----------------------------------------* + * input data errors * + *----------------------------------------*/ + IVAS_ERR_INVALID_BITSTREAM = 0x2000, + + /*----------------------------------------* + * hardware errors * + *----------------------------------------*/ + IVAS_ERR_FAILED_ALLOC = 0x3000, + + /*----------------------------------------* + * internal errors * + *----------------------------------------*/ + IVAS_ERR_INTERNAL = 0x4000, + IVAS_ERR_INTERNAL_FATAL, + + /*----------------------------------------* + * file I/O errors (lib_util only) * + *----------------------------------------*/ + IVAS_ERR_FAILED_FILE_OPEN = 0x5000, + IVAS_ERR_FAILED_FILE_WRITE, + IVAS_ERR_FAILED_FILE_READ, + IVAS_ERR_FAILED_FILE_PARSE, + IVAS_ERR_END_OF_FILE, + IVAS_ERR_BITSTREAM_WRITER_INVALID_FORMAT, + IVAS_ERR_BITSTREAM_READER_INVALID_DATA, + IVAS_ERR_BITSTREAM_READER_INVALID_FORMAT, + + /*----------------------------------------* + * unknown error * + *----------------------------------------*/ + IVAS_ERR_UNKNOWN = 0xF000, /* fallback error code */ + +} ivas_error; + + +static inline const char *ivas_error_to_string( ivas_error error_code ) +{ + /* For error categories that are likely to still have many changes to + * specific error codes, return one string per category */ + if ( ( error_code & 0xF000 ) == 0x1000 ) + { + return "API error"; + } + if ( ( error_code & 0xF000 ) == 0x2000 ) + { + return "data error"; + } + + /* For categories that are unlikely to change, use more specific strings */ + switch ( error_code ) + { + case IVAS_ERR_OK: + return "No error"; + case IVAS_ERR_FAILED_ALLOC: + return "Failed allocation error"; + case IVAS_ERR_INTERNAL: + return "Internal error"; + case IVAS_ERR_INTERNAL_FATAL: + return "Internal fatal error"; + case IVAS_ERR_FAILED_FILE_OPEN: + return "File open error"; + case IVAS_ERR_FAILED_FILE_WRITE: + return "File write error"; + case IVAS_ERR_FAILED_FILE_READ: + return "File read error"; + case IVAS_ERR_FAILED_FILE_PARSE: + return "Parse error"; + case IVAS_ERR_END_OF_FILE: + return "End of file"; + default: + break; + } + + return "Unknown error"; +} + +#endif /* IVAS_ERROR_H */ diff --git a/lib_com/ivas_error_utils.h b/lib_com/ivas_error_utils.h new file mode 100644 index 0000000000..412bd075b4 --- /dev/null +++ b/lib_com/ivas_error_utils.h @@ -0,0 +1,96 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "options.h" + +#include +#include +#include + +#include "ivas_error.h" + +#ifdef DEBUGGING +#include +#endif + +#ifndef IVAS_ERROR_UTILS_H +#define IVAS_ERROR_UTILS_H + +/* + * Usage: + * + * IVAS_ERROR( error_code, decription_fmt, ... ); + * + * where: + * - error_code is of type enum ivas_error + * - decription_fmt is a description string with printf-like formatting + * - ... are (optional) printf-like arguments to place in the description format string + * + * Examples: + * + * IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for XXX" ); + * + * IVAS_ERROR( IVAS_ERR_INTERNAL, "Unexpected value %f in frame %d", var, frame ); + * + * Note: Contrary to printf, this macro is not able to verify at build time that the + * placeholders (e.g. "%f") in the format string match the types of provided arguments. + * If unexpected values are printed or the macro causes a crash, double check that the + * format specifiers are correct. + */ +#ifdef DEBUGGING +#define IVAS_ERROR( error_code, ... ) ivas_error_wrapper( error_code, __func__, __FILE__, __LINE__, __VA_ARGS__ ) +#else +#define IVAS_ERROR( error_code, ... ) ivas_error_wrapper( error_code ) +#endif + +#ifdef DEBUGGING +static inline ivas_error ivas_error_wrapper( const ivas_error error_code, const char *function, const char *file, int32_t line, const char *description, ... ) +{ + fprintf( stderr, "\n%s: ", ivas_error_to_string( error_code ) ); + + va_list args; + va_start( args, description ); + vfprintf( stderr, description, args ); + va_end( args ); + + fprintf( stderr, "\n\nIn function: %s(), %s:%d\n\n", function, file, line ); + // assert( 0 ); + return error_code; +} +#else +static inline ivas_error ivas_error_wrapper( const ivas_error error_code ) +{ + return error_code; +} +#endif + +#endif /* IVAS_ERROR_UTILS_H */ diff --git a/lib_com/ivas_fb_mixer.c b/lib_com/ivas_fb_mixer.c new file mode 100644 index 0000000000..e9032d274d --- /dev/null +++ b/lib_com/ivas_fb_mixer.c @@ -0,0 +1,1377 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Static functions declarations + *------------------------------------------------------------------------------------------*/ + +static void ivas_get_active_bins( const int16_t **pActive_bins, const int16_t **pActive_bins_abs, const int16_t **pStart_offset, const int16_t **pStart_offset_ab, const int32_t sampling_rate ); +static void ivas_get_ld_fb_resp( float **ppIdeal_FRs_re, float **ppIdeal_FRs_im, float **ppNew_FRs_re, float **ppNew_FRs_im, const int16_t *pActive_bins, const int16_t *pStart_offset, const int16_t num_bands, const int16_t delay, const int32_t sampling_rate ); +static int16_t ivas_fb_mixer_get_band_diff_non48k( const int32_t sampling_rate, const float delay_ms ); +static const float *ivas_get_cheby_ramp( const int16_t delay ); +static void ivas_get_hanning_win( const int16_t len, float *pH_win ); +static ivas_error ivas_filterbank_setup( IVAS_FB_MIXER_HANDLE hFbMixer, const int32_t sampling_rate ); +static ivas_error ivas_fb_mixer_get_window( const int16_t fade_len, const int32_t sampling_rate, const float **pWindow ); + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_num_bands_from_bw_idx() + * + * Get number of bands from BW index + *-----------------------------------------------------------------------------------------*/ + +/* !r: number of spectral bands */ +int16_t ivas_get_num_bands_from_bw_idx( + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t num_active_bands; + + assert( bwidth > 0 ); /*NB BW is not supported*/ + num_active_bands = ivas_num_active_bands[bwidth - 1]; + + return num_active_bands; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_num_bands() + * + * Get number of bands depending on the sampling rates + *-----------------------------------------------------------------------------------------*/ + +static int16_t ivas_get_num_bands( + const int32_t sampling_rate ) +{ + int16_t bwidth = ivas_get_bw_idx_from_sample_rate( sampling_rate ); + int16_t num_active_bands = ivas_get_num_bands_from_bw_idx( bwidth ); + + return num_active_bands; +} + + +/*---------------------------------------------------------------------* + * Function ivas_fb_set_cfg() + * + * Set default configs for FB mixer + *---------------------------------------------------------------------*/ + +ivas_error ivas_fb_set_cfg( + IVAS_FB_CFG **pFb_cfg_out, /* o : FB config. handle */ + const int16_t ivas_format, /* i : IVAS format */ + const SBA_MODE sba_mode, /* i : SBA mode */ + const int16_t num_in_chans, /* i : number of FB input channels */ + const int16_t num_out_chans, /* i : number of FB output channels*/ + const int16_t active_w_mixing, /* i : active_w_mixing flag */ + const int32_t sampling_rate /* i : sampling rate */ +) +{ + IVAS_FB_CFG *pFb_cfg; + + if ( ( pFb_cfg = (IVAS_FB_CFG *) count_malloc( sizeof( IVAS_FB_CFG ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer config" ); + } + + pFb_cfg->num_in_chans = num_in_chans; + pFb_cfg->num_out_chans = num_out_chans; + + pFb_cfg->pcm_offset = 0; /* note: in SPAR decoder, this parameter is overwritten later */ + pFb_cfg->active_w_mixing = active_w_mixing; + pFb_cfg->windowed_fr_offset = 0; + + if ( ivas_format == ISM_FORMAT ) + { + pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_4_NS ); + pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_4_NS ); + pFb_cfg->prior_input_length = NS2SA( sampling_rate, DELAY_DIRAC_ENC_CMP_NS_PARAM_ISM ) + NS2SA( sampling_rate, DIRAC_SLOT_ENC_NS ); + } + else if ( ivas_format == SBA_FORMAT ) + { + pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_1_NS ); + + if ( sba_mode == SBA_MODE_SPAR ) + { + pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_4_NS ); + pFb_cfg->prior_input_length = NS2SA( sampling_rate, FRAME_SIZE_NS ); + pFb_cfg->windowed_fr_offset = (int16_t) ( (float) ( sampling_rate / FRAMES_PER_SEC ) * 3.0f / 4.0f ) - NS2SA( sampling_rate, DELAY_DIRAC_SPAR_ENC_CMP_NS ); + } + else /* SBA_MODE_DIRAC */ + { + pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_1_NS ); + pFb_cfg->prior_input_length = NS2SA( sampling_rate, DELAY_DIRAC_ENC_CMP_NS ) + NS2SA( sampling_rate, DIRAC_SLOT_ENC_NS ); + /* extra SPAR/DirAC synchro delay */ + pFb_cfg->prior_input_length += NS2SA( sampling_rate, DELAY_FB_1_NS ); + } + } + else if ( ivas_format == MASA_FORMAT ) + { + pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_1_NS ); + pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_1_NS ); + pFb_cfg->prior_input_length = NS2SA( sampling_rate, DELAY_DIRAC_ENC_CMP_NS ) + NS2SA( sampling_rate, DIRAC_SLOT_ENC_NS ); + } + else if ( ivas_format == MC_FORMAT ) + { + pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_1_NS ); + pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_1_NS ); + pFb_cfg->prior_input_length = NS2SA( sampling_rate, DELAY_DIRAC_ENC_CMP_NS ) + 3 * NS2SA( sampling_rate, PARAM_MC_SLOT_ENC_NS ); + } + + *pFb_cfg_out = pFb_cfg; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_FB_mixer_open() + * + * Allocate and initialize FB mixer handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_FB_mixer_open( + IVAS_FB_MIXER_HANDLE *hFbMixer_out, /* i/o: FB mixer handle */ + const int32_t sampling_rate, /* i : sampling rate */ + IVAS_FB_CFG *fb_cfg /* i : FB config. handle */ +) +{ + IVAS_FB_MIXER_HANDLE hFbMixer; + int16_t i, j, frame_len, num_bands; + int16_t num_chs_alloc; + ivas_error error; + + error = IVAS_ERR_OK; + + frame_len = (int16_t) ( sampling_rate / FRAMES_PER_SEC ); + + if ( ( hFbMixer = (IVAS_FB_MIXER_HANDLE) count_malloc( sizeof( IVAS_FB_MIXER_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + + if ( ( hFbMixer->pFb = (ivas_filterbank_t *) count_malloc( sizeof( ivas_filterbank_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + + if ( fb_cfg->active_w_mixing == -1 ) + { + num_chs_alloc = 0; + } + else if ( fb_cfg->active_w_mixing ) + { + num_chs_alloc = fb_cfg->num_in_chans; + } + else + { + num_chs_alloc = fb_cfg->num_out_chans; + } + + for ( i = 0; i < num_chs_alloc; i++ ) + { + if ( fb_cfg->num_out_chans == 0 ) + { + hFbMixer->ppFilterbank_inFR_re[i] = NULL; + hFbMixer->ppFilterbank_inFR_im[i] = NULL; + } + else + { + j = fb_cfg->remix_order[i]; + + if ( ( hFbMixer->ppFilterbank_inFR_re[j] = (float *) count_malloc( sizeof( float ) * frame_len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + + if ( ( hFbMixer->ppFilterbank_inFR_im[j] = (float *) count_malloc( sizeof( float ) * frame_len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + } + } + + if ( fb_cfg->active_w_mixing == -1 ) + { + num_chs_alloc = 0; + } + else + { + num_chs_alloc = fb_cfg->num_in_chans; + } + for ( i = 0; i < num_chs_alloc; i++ ) + { + if ( ( hFbMixer->ppFilterbank_prior_input[i] = (float *) count_malloc( sizeof( float ) * fb_cfg->prior_input_length ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + set_f( hFbMixer->ppFilterbank_prior_input[i], 0, fb_cfg->prior_input_length ); + } + + if ( ( fb_cfg->active_w_mixing != -1 ) && ( fb_cfg->num_out_chans > 0 ) ) + { + float *pTemp_mem; + + if ( ( pTemp_mem = (float *) count_malloc( sizeof( float ) * fb_cfg->num_out_chans * fb_cfg->num_in_chans * IVAS_MAX_NUM_BANDS ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer" ); + } + for ( i = 0; i < fb_cfg->num_out_chans; i++ ) + { + for ( j = 0; j < fb_cfg->num_in_chans; j++ ) + { + hFbMixer->prior_mixer[i][j] = pTemp_mem; + pTemp_mem += IVAS_MAX_NUM_BANDS; + set_f( hFbMixer->prior_mixer[i][j], 0, IVAS_MAX_NUM_BANDS ); + } + } + } + + if ( fb_cfg->num_out_chans > 0 ) + { + const int16_t *pActive_bins_per_band, *pActive_bins_per_band_abs, *pStart_offset, *pStart_offset_abs; + + num_bands = ivas_get_num_bands( sampling_rate ); + + ivas_get_active_bins( &pActive_bins_per_band, &pActive_bins_per_band_abs, &pStart_offset, &pStart_offset_abs, sampling_rate ); + + for ( i = 0; i < num_bands; i++ ) + { + if ( ( hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] = (float *) count_malloc( sizeof( float ) * pActive_bins_per_band_abs[i] ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + } + + if ( sampling_rate != 48000 ) + { + int16_t num_diff_bands, start_diff_band_non48k; + + num_diff_bands = MAX_NUM_BANDS_DIFF_NON48K; + start_diff_band_non48k = num_bands - num_diff_bands; + + hFbMixer->num_diff_bands = num_diff_bands; + + for ( j = start_diff_band_non48k; j < num_bands; j++ ) + { + if ( ( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] = (float *) count_malloc( sizeof( float ) * pActive_bins_per_band[j] ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + + if ( ( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] = (float *) count_malloc( sizeof( float ) * pActive_bins_per_band[j] ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); + } + } + } + } + else + { + int16_t k; + + /* ignore all the deeper filter bank stuff for now */ + hFbMixer->num_diff_bands = 0; + hFbMixer->pFb->fb_consts.pFilterbank_bins_per_band = NULL; + hFbMixer->pFb->fb_consts.pFilterbank_bins_start_offset = NULL; + + for ( i = 0; i < 2; i++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hFbMixer->pFb->fb_consts.ppFilterbank_FRs[i][k] = NULL; + hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[i][k] = NULL; + } + } + + for ( i = 0; i < IVAS_MAX_NUM_FB_BANDS; i++ ) + { + hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] = NULL; + } + } + + hFbMixer->fb_cfg = fb_cfg; + + if ( ( error = ivas_filterbank_setup( hFbMixer, sampling_rate ) ) != IVAS_ERR_OK ) + { + return error; + } + + *hFbMixer_out = hFbMixer; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_FB_mixer_close() + * + * Deallocate FB mixer handle + *------------------------------------------------------------------------*/ + +void ivas_FB_mixer_close( + IVAS_FB_MIXER_HANDLE *hFbMixer_in, /* i/o: FB mixer handle */ + const int32_t sampling_rate /* i : sampling rate in Hz */ +) +{ + IVAS_FB_MIXER_HANDLE hFbMixer; + IVAS_FB_CFG *fb_cfg; + int16_t i, j, num_bands; + int16_t num_chs_alloc; + + hFbMixer = *hFbMixer_in; + fb_cfg = hFbMixer->fb_cfg; + + if ( fb_cfg->active_w_mixing == -1 ) + { + num_chs_alloc = 0; + } + else if ( fb_cfg->active_w_mixing ) + { + num_chs_alloc = fb_cfg->num_in_chans; + } + else + { + num_chs_alloc = fb_cfg->num_out_chans; + } + + if ( hFbMixer != NULL ) + { + for ( i = 0; i < num_chs_alloc; i++ ) + { + if ( fb_cfg->num_out_chans > 0 ) + { + j = fb_cfg->remix_order[i]; + + count_free( hFbMixer->ppFilterbank_inFR_re[j] ); + hFbMixer->ppFilterbank_inFR_re[j] = NULL; + + count_free( hFbMixer->ppFilterbank_inFR_im[j] ); + hFbMixer->ppFilterbank_inFR_im[j] = NULL; + } + } + + if ( fb_cfg->active_w_mixing == -1 ) + { + num_chs_alloc = 0; + } + else + { + num_chs_alloc = fb_cfg->num_in_chans; + } + for ( i = 0; i < num_chs_alloc; i++ ) + { + count_free( hFbMixer->ppFilterbank_prior_input[i] ); + hFbMixer->ppFilterbank_prior_input[i] = NULL; + } + + if ( ( fb_cfg->active_w_mixing != -1 ) && ( fb_cfg->num_out_chans > 0 ) ) + { + count_free( hFbMixer->prior_mixer[0][0] ); + hFbMixer->prior_mixer[0][0] = NULL; + } + + if ( fb_cfg->num_out_chans > 0 ) + { + num_bands = hFbMixer->pFb->filterbank_num_bands; + + for ( i = 0; i < num_bands; i++ ) + { + count_free( hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] ); + hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] = NULL; + } + + if ( sampling_rate != 48000 ) + { + int16_t start_diff_band_non48k; + start_diff_band_non48k = num_bands - hFbMixer->num_diff_bands; + + for ( j = start_diff_band_non48k; j < num_bands; j++ ) + { + count_free( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] ); + hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] = NULL; + + count_free( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] ); + hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] = NULL; + } + } + } + + if ( hFbMixer->pFb != NULL ) + { + count_free( hFbMixer->pFb ); + hFbMixer->pFb = NULL; + } + + if ( hFbMixer->fb_cfg != NULL ) + { + count_free( hFbMixer->fb_cfg ); + hFbMixer->fb_cfg = NULL; + } + + count_free( hFbMixer ); + hFbMixer = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fb_mixer_pcm_ingest() + * + * PCM ingest block + *-----------------------------------------------------------------------------------------*/ + +void ivas_fb_mixer_pcm_ingest( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float pcm_in[][L_FRAME48k], /* i : input audio channels */ + float **ppOut_pcm, /* o : output audio channels */ + const int16_t frame_len /* i : frame length */ +) +{ + int16_t i; + int16_t num_chs_ingest; + IVAS_FB_CFG *fb_cfg = hFbMixer->fb_cfg; + + if ( fb_cfg->active_w_mixing ) + { + num_chs_ingest = fb_cfg->num_in_chans; + } + else + { + num_chs_ingest = fb_cfg->num_out_chans; + } + + for ( i = 0; i < fb_cfg->num_in_chans; i++ ) + { + mvr2r( &hFbMixer->ppFilterbank_prior_input[i][fb_cfg->prior_input_length - frame_len], ppOut_pcm[i], frame_len ); + mvr2r( pcm_in[i], &ppOut_pcm[i][frame_len], frame_len ); + } + + for ( i = 0; i < num_chs_ingest; i++ ) + { + ivas_mdft( ppOut_pcm[fb_cfg->remix_order[i]], hFbMixer->ppFilterbank_inFR_re[fb_cfg->remix_order[i]], hFbMixer->ppFilterbank_inFR_im[fb_cfg->remix_order[i]], frame_len << 1, frame_len ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fb_mixer_update_prior_input() + * + * + *-----------------------------------------------------------------------------------------*/ + +void ivas_fb_mixer_update_prior_input( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float *pcm_in[], /* i : input audio channels */ + const int16_t length /* i : length of time slot */ +) +{ + int16_t i; + + for ( i = 0; i < hFbMixer->fb_cfg->num_in_chans; i++ ) + { + mvr2r( &hFbMixer->ppFilterbank_prior_input[i][length], hFbMixer->ppFilterbank_prior_input[i], hFbMixer->fb_cfg->prior_input_length - length ); + mvr2r( pcm_in[i], &hFbMixer->ppFilterbank_prior_input[i][hFbMixer->fb_cfg->prior_input_length - length], length ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fb_mixer_get_windowed_fr() + * + * + *-----------------------------------------------------------------------------------------*/ + +void ivas_fb_mixer_get_windowed_fr( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float *pcm_in[], /* i : input audio channels */ + float *frame_f_real[], /* o : real freq domain values */ + float *frame_f_imag[], /* o : imag freq domain values */ + const int16_t length, /* i : number of new samples in time slot */ + const int16_t mdft_len /* i : MDFT frame length */ +) +{ + int16_t ch_idx, j, offset, rev_offset; + int16_t n_old_samples; + int16_t n_new_samples; + float fr_in_block[L_FRAME48k * 2]; + const float *win_ptr; + + n_old_samples = min( ( hFbMixer->fb_cfg->prior_input_length - hFbMixer->fb_cfg->windowed_fr_offset ), ( 2 * mdft_len ) ); + n_new_samples = max( 0, 2 * length - n_old_samples ); + offset = (int16_t) ( 2 * mdft_len - length - hFbMixer->ana_window_offset ); + rev_offset = (int16_t) ( 2 * mdft_len - hFbMixer->ana_window_offset ); + set_zero( fr_in_block, offset ); + + for ( ch_idx = 0; ch_idx < hFbMixer->fb_cfg->num_in_chans; ch_idx++ ) + { + mvr2r( &hFbMixer->ppFilterbank_prior_input[ch_idx][offset + hFbMixer->fb_cfg->windowed_fr_offset], &fr_in_block[offset], n_old_samples - offset ); + mvr2r( pcm_in[ch_idx], &fr_in_block[n_old_samples], n_new_samples ); + win_ptr = hFbMixer->pAna_window; + + for ( j = offset; j < 2 * mdft_len - length; j++ ) + { + fr_in_block[j] *= ( *( win_ptr++ ) ); + } + + for ( j = rev_offset; j < 2 * mdft_len; j++ ) + { + fr_in_block[j] *= ( *( --win_ptr ) ); + } + + ivas_mdft( fr_in_block, frame_f_real[ch_idx], frame_f_imag[ch_idx], mdft_len << 1, mdft_len ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fb_mixer_cross_fading() + * + * FB Mixer cross fading + *-----------------------------------------------------------------------------------------*/ + +static void ivas_fb_mixer_cross_fading( + IVAS_FB_MIXER_HANDLE hFbMixer, + float **ppOut_pcm, + float *pMdft_out_old, + float *pMdft_out_new, + const int16_t ch, + const int16_t frame_len ) +{ + int16_t k, fade_start_offset, fade_end_offset; + + if ( hFbMixer->first_frame[ch] == 0 ) + { + fade_start_offset = (int16_t) hFbMixer->cross_fade_start_offset; + fade_end_offset = (int16_t) hFbMixer->cross_fade_end_offset; + + for ( k = 0; k < fade_start_offset; k++ ) + { + ppOut_pcm[ch][k] = pMdft_out_old[k + frame_len]; + } + + for ( k = fade_start_offset; k < fade_end_offset; k++ ) + { + ppOut_pcm[ch][k] = pMdft_out_new[k + frame_len] * hFbMixer->pFilterbank_cross_fade[k - fade_start_offset] + pMdft_out_old[k + frame_len] * ( 1.0f - hFbMixer->pFilterbank_cross_fade[k - fade_start_offset] ); + } + + for ( k = fade_end_offset; k < frame_len; k++ ) + { + ppOut_pcm[ch][k] = pMdft_out_new[k + frame_len]; + } + } + else + { + hFbMixer->first_frame[ch] = 0; + + for ( k = 0; k < frame_len; k++ ) + { + ppOut_pcm[ch][k] = pMdft_out_new[k + frame_len]; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fb_mixer_process() + * + * Filter bank process + *-----------------------------------------------------------------------------------------*/ + +void ivas_fb_mixer_process( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float ***mixer_mat, /* i : mixer matrix */ + float **ppOut_pcm, /* o : output audio channels */ + const int16_t frame_len, /* i : frame length in samples */ + int16_t in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i/o: mixing mapping */ +) +{ + ivas_filterbank_t *pFb = hFbMixer->pFb; + int16_t num_bands = pFb->filterbank_num_bands; + int16_t i, j, k, ch, hist; + const float *pFilterbank_bin_to_band_re; + const float *pFilterbank_bin_to_band_im; + float *pMdft_out[2], *pOut_fr_re, *pOut_fr_im; + float Out_fr_re[L_FRAME48k], Out_fr_im[L_FRAME48k]; + float Mdft_out_0[L_FRAME48k * 2], Mdft_out_1[L_FRAME48k * 2]; + + pOut_fr_re = Out_fr_re; + pOut_fr_im = Out_fr_im; + pMdft_out[0] = Mdft_out_0; + pMdft_out[1] = Mdft_out_1; + + for ( ch = ( hFbMixer->fb_cfg->active_w_mixing == 0 ); ch < hFbMixer->fb_cfg->num_out_chans; ch++ ) + { + /* Run a loop of 2 to calculate current frame's filterbank output and prev frame's output */ + for ( hist = 0; hist < 2; hist++ ) + { + set_zero( pOut_fr_re, frame_len ); + set_zero( pOut_fr_im, frame_len ); + + for ( j = 0; j < hFbMixer->fb_cfg->num_in_chans; j++ ) + { + if ( in_out_mixer_map[ch][j] != 0 ) + { + float filterbank_mixer_bins_re[L_FRAME48k]; + float filterbank_mixer_bins_im[L_FRAME48k]; + float *pFb_inFR_re = hFbMixer->ppFilterbank_inFR_re[j]; + float *pFb_inFR_im = hFbMixer->ppFilterbank_inFR_im[j]; + + set_zero( filterbank_mixer_bins_re, frame_len ); + set_zero( filterbank_mixer_bins_im, frame_len ); + + for ( i = 0; i < num_bands; i++ ) + { + int16_t start_offset = pFb->fb_consts.pFilterbank_bins_start_offset[i]; + int16_t num_bins = pFb->fb_consts.pFilterbank_bins_per_band[i]; + float mixer_const = hFbMixer->prior_mixer[ch][j][i]; + + pFilterbank_bin_to_band_re = pFb->fb_consts.ppFilterbank_FRs[0][i]; + pFilterbank_bin_to_band_im = pFb->fb_consts.ppFilterbank_FRs[1][i]; + + for ( k = start_offset; k < num_bins + start_offset; k++ ) + { + filterbank_mixer_bins_re[k] += *pFilterbank_bin_to_band_re++ * mixer_const; + filterbank_mixer_bins_im[k] += *pFilterbank_bin_to_band_im++ * mixer_const; + } + hFbMixer->prior_mixer[ch][j][i] = mixer_mat[ch][j][i]; + } + + for ( k = 0; k < frame_len; k++ ) + { + float temp_out_re, temp_out_im; + + IVAS_CMULT_FLOAT( filterbank_mixer_bins_re[k], filterbank_mixer_bins_im[k], pFb_inFR_re[k], + pFb_inFR_im[k], temp_out_re, temp_out_im ); + + pOut_fr_re[k] += temp_out_re; + pOut_fr_im[k] += temp_out_im; + } + } + } + + ivas_imdft( pOut_fr_re, pOut_fr_im, pMdft_out[hist], frame_len ); + } + + ivas_fb_mixer_cross_fading( hFbMixer, ppOut_pcm, pMdft_out[0], pMdft_out[1], ch, frame_len ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fb_mixer_get_in_out_mapping() + * + * + *-----------------------------------------------------------------------------------------*/ + +void ivas_fb_mixer_get_in_out_mapping( + const IVAS_FB_CFG *fb_cfg, /* i : FB config. handle */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t enc_dec_flag, /* i : encoder or decoder flag */ + const int16_t *order, /* i : downmix order */ + int16_t in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i/o: mixing mapping */ +) +{ + int16_t i, j; + + set_s( (int16_t *) in_out_mixer_map, 0, IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH ); + + if ( enc_dec_flag == ENC ) + { + if ( fb_cfg->active_w_mixing ) + { + for ( i = 0; i < fb_cfg->num_out_chans; i++ ) + { + for ( j = 0; j < fb_cfg->num_in_chans; j++ ) + { + in_out_mixer_map[i][j] = 1; + } + } + } + else + { + in_out_mixer_map[0][0] = 1; /* W depends on only W input*/ + for ( i = 1; i < fb_cfg->num_out_chans; i++ ) + { + in_out_mixer_map[i][0] = 1; + in_out_mixer_map[i][order[i]] = 1; + } + } + } + else + { + in_out_mixer_map[0][0] = 1; /* W depends on only W input*/ + for ( i = 1; i < nchan_transport; i++ ) + { + in_out_mixer_map[order[i]][0] = 1; + in_out_mixer_map[order[i]][i] = 1; + } + if ( nchan_transport == 1 ) + { + /* no cross predicitons in 1 ch dmx*/ + for ( i = nchan_transport; i < fb_cfg->num_out_chans; i++ ) + { + in_out_mixer_map[order[i]][0] = 1; + in_out_mixer_map[order[i]][i] = 1; + } + } + else + { + /* handle the cross predictions and decorrelation*/ + for ( i = nchan_transport; i < fb_cfg->num_out_chans; i++ ) + { + for ( j = 0; j < nchan_transport; j++ ) + { + in_out_mixer_map[order[i]][j] = 1; + } + in_out_mixer_map[order[i]][i] = 1; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_calculate_abs_fr() + * + * Function to calculate number of active bands + *-----------------------------------------------------------------------------------------*/ + +static int16_t ivas_calculate_abs_fr( + ivas_filterbank_t *pFb, + const int32_t sampling_rate ) +{ + int16_t frame_len; + float ppFilterbank_FRs_s[L_FRAME48k]; + int16_t bands = pFb->filterbank_num_bands; + int16_t i, j, num_active_bands = 0; + int16_t idx_short_stride_bin_to_band = 0; + + for ( i = 0; i < bands; i++ ) + { + const float *long_mdft_ptr_re = pFb->fb_consts.ppFilterbank_FRs[0][i]; + const float *long_mdft_ptr_im = pFb->fb_consts.ppFilterbank_FRs[1][i]; + int16_t start_offset = pFb->fb_consts.pFilterbank_bins_start_offset[i]; + int16_t num_bins = pFb->fb_consts.pFilterbank_bins_per_band[i]; + int16_t short_mdft_start_bin = -1; + float short_stride_pow_spec[MDFT_FB_BANDS_240]; + float short_stride_nrg = 0.0f; + float cldfb_nrg = 0.0f; + int16_t short_stride = pFb->fb_bin_to_band.short_stride; + const int16_t num_bins_per_short_stride_bin = ( const int16_t )( ( sampling_rate / FRAMES_PER_SEC ) / short_stride ); + const int16_t num_bins_per_cldfb_band = ( const int16_t )( ( sampling_rate / FRAMES_PER_SEC ) / pFb->fb_bin_to_band.num_cldfb_bands ); + float short_stride_max_per_spar_band = 1e-9f; + + /*loop over all stored Filter Bank Response MDFT coefficients*/ + set_f( short_stride_pow_spec, 0, MDFT_FB_BANDS_240 ); + for ( j = start_offset; j < num_bins + start_offset; j++ ) + { + float sq_abs; + + /*calculate bin energy */ + IVAS_CALCULATE_SQ_ABS( *long_mdft_ptr_re, *long_mdft_ptr_im, sq_abs ); + long_mdft_ptr_re++; + long_mdft_ptr_im++; + + /* accumulate bin energies within a short stride bin */ + short_stride_nrg += sq_abs; + if ( !( ( j + 1 ) % num_bins_per_short_stride_bin ) ) + { /* new short stride bin */ + short_stride_pow_spec[j / num_bins_per_short_stride_bin] = short_stride_nrg; /* energy rather than magnitude works better for covariance weighting*/ + short_stride_max_per_spar_band = max( short_stride_nrg, short_stride_max_per_spar_band ); /*compute highest magnitude per band*/ + short_stride_nrg = 0.0f; + } + + /* accumulate bin energies within a CLDFB band */ + cldfb_nrg += sq_abs; + if ( !( ( j + 1 ) % num_bins_per_cldfb_band ) ) + { + pFb->fb_bin_to_band.pp_cldfb_weights_per_spar_band[j / num_bins_per_cldfb_band][i] = sqrtf( cldfb_nrg ); + cldfb_nrg = 0.0f; + } + } + + /*loop over the short MDFT bins*/ + for ( j = 0; j < short_stride; j++ ) + { + /* normalize and sparsify the energies */ + short_stride_pow_spec[j] /= short_stride_max_per_spar_band; + short_stride_pow_spec[j] = max( short_stride_pow_spec[j] - 0.3f, 0.0f ) / 0.7f; + if ( short_stride_pow_spec[j] > 0.0f ) + { + assert( idx_short_stride_bin_to_band < 2 * MDFT_FB_BANDS_240 ); /* array size of p_short_stride_bin_to_band */ + if ( short_mdft_start_bin == -1 ) + { + short_mdft_start_bin = j; + pFb->fb_bin_to_band.p_short_stride_start_bin_per_band[i] = j; + pFb->fb_bin_to_band.pp_short_stride_bin_to_band[i] = &pFb->fb_bin_to_band.p_short_stride_bin_to_band[idx_short_stride_bin_to_band]; + } + pFb->fb_bin_to_band.p_short_stride_bin_to_band[idx_short_stride_bin_to_band++] = short_stride_pow_spec[j]; + pFb->fb_bin_to_band.p_short_stride_num_bins_per_band[i]++; + } + } + } + + /*loop over CLDFB bands*/ + for ( j = 0; j < pFb->fb_bin_to_band.num_cldfb_bands; j++ ) + { + float sum_over_spar_bands = 0.0f; + float max_spar_band_contribution = 0.0f; + int16_t spar_start = 0; + int16_t any_non_zero = 0; + + for ( i = 0; i < bands; i++ ) + { + sum_over_spar_bands += pFb->fb_bin_to_band.pp_cldfb_weights_per_spar_band[j][i]; + if ( pFb->fb_bin_to_band.pp_cldfb_weights_per_spar_band[j][i] > max_spar_band_contribution ) + { + max_spar_band_contribution = pFb->fb_bin_to_band.pp_cldfb_weights_per_spar_band[j][i]; + pFb->fb_bin_to_band.p_cldfb_map_to_spar_band[j] = i; + } + } + sum_over_spar_bands = max( sum_over_spar_bands, EPSILON ); + for ( i = 0; i < bands; i++ ) + { + if ( pFb->fb_bin_to_band.pp_cldfb_weights_per_spar_band[j][i] == 0.0f && !any_non_zero ) + { + spar_start++; + } + else + { + any_non_zero = 1; + } + pFb->fb_bin_to_band.pp_cldfb_weights_per_spar_band[j][i] /= sum_over_spar_bands; + } + pFb->fb_bin_to_band.p_spar_start_bands[j] = spar_start; + } + + frame_len = (int16_t) ( sampling_rate / FRAMES_PER_SEC ); + + set_f( ppFilterbank_FRs_s, 0, frame_len ); + + /*Commented logic is for calculating number of active bands, can be removed if not needed */ + for ( i = 0; i < bands; i++ ) + { + const float *pFilterbank_bin_to_band_re = pFb->fb_consts.ppFilterbank_FRs[0][i]; + const float *pFilterbank_bin_to_band_im = pFb->fb_consts.ppFilterbank_FRs[1][i]; + + int16_t start_offset = pFb->fb_consts.pFilterbank_bins_start_offset[i]; + int16_t num_bins = pFb->fb_consts.pFilterbank_bins_per_band[i]; + int16_t idx = 0; + int16_t abs_active_bins = pFb->fb_bin_to_band.pFb_active_bins_per_band[i]; + int16_t abs_start_offset = pFb->fb_bin_to_band.pFb_start_bin_per_band[i]; + + for ( j = start_offset; j < num_bins + start_offset; j++ ) + { + float temp = 0; + + IVAS_CALCULATE_ABS( *pFilterbank_bin_to_band_re, *pFilterbank_bin_to_band_im, temp ); + + pFilterbank_bin_to_band_re++; + pFilterbank_bin_to_band_im++; + + temp -= 0.3f; + + if ( temp < 0.0f ) + { + temp = 0; + } + + if ( j < ( abs_active_bins + abs_start_offset ) && j >= abs_start_offset ) + { + pFb->fb_bin_to_band.pFb_bin_to_band[i][idx++] = temp; + } + + ppFilterbank_FRs_s[j] += temp; + } + } + + for ( i = 0; i < frame_len; i++ ) + { + if ( ppFilterbank_FRs_s[i] < 0.1f ) + { + ppFilterbank_FRs_s[i] = 0.1f; + } + } + + for ( j = 0; j < bands; j++ ) + { + int16_t abs_active_bins = pFb->fb_bin_to_band.pFb_active_bins_per_band[j]; + int16_t abs_start_offset = pFb->fb_bin_to_band.pFb_start_bin_per_band[j]; + + for ( i = 0; i < abs_active_bins; i++ ) + { + pFb->fb_bin_to_band.pFb_bin_to_band[j][i] /= ppFilterbank_FRs_s[i + abs_start_offset]; + /*if(pFb->fb_bin_to_band.pFb_bin_to_band[j][i] > 0.5f) + { + num_active_bands = j + 1; + break; + }*/ + } + } + + return num_active_bands; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_active_bins() + * + * + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_active_bins( + const int16_t **pActive_bins, + const int16_t **pActive_bins_abs, + const int16_t **pStart_offset, + const int16_t **pStart_offset_abs, + const int32_t sampling_rate ) +{ + int16_t sr_idx; + + if ( sampling_rate == 32000 ) + { + sr_idx = 1; + } + else if ( sampling_rate == 16000 ) + { + sr_idx = 2; + } + else + { + sr_idx = 0; + } + + *pActive_bins_abs = ivas_fb_abs_bins_per_band_12band_1ms[sr_idx]; + *pActive_bins = ivas_fb_bins_per_band_12band_1ms[sr_idx]; + *pStart_offset_abs = ivas_fb_abs_bins_start_offset_12band_1ms[sr_idx]; + *pStart_offset = ivas_fb_bins_start_offset_12band_1ms[sr_idx]; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_filterbank_setup() + * + * Filterbank setup, initialization + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_filterbank_setup( + IVAS_FB_MIXER_HANDLE hFbMixer, + const int32_t sampling_rate ) +{ + int16_t i, j; + const float *pAll_fb_fr[2]; + const int16_t *pAll_bins_start_offset = NULL; + const int16_t *pAll_bins_per_band = NULL; + const int16_t *pAll_bins_start_offset_abs = NULL; + const int16_t *pAll_bins_per_band_abs = NULL; + const int16_t *pAll_bins_per_band_48k = NULL; + ivas_error error; + IVAS_FB_CFG *pCfg = hFbMixer->fb_cfg; + + error = IVAS_ERR_OK; + + set_s( hFbMixer->first_frame, 1, pCfg->num_out_chans ); + set_s( hFbMixer->first_frame + pCfg->num_out_chans, 0, IVAS_SPAR_MAX_CH - pCfg->num_out_chans ); + + + if ( pCfg->num_out_chans > 0 ) + { + hFbMixer->pFb->filterbank_num_bands = ivas_get_num_bands( sampling_rate ); + + ivas_get_active_bins( &pAll_bins_per_band, &pAll_bins_per_band_abs, &pAll_bins_start_offset, &pAll_bins_start_offset_abs, sampling_rate ); + + if ( pCfg->fb_latency == NS2SA( sampling_rate, DELAY_FB_1_NS ) ) + { + pAll_fb_fr[0] = ivas_fb_fr_12band_1ms_re; + pAll_fb_fr[1] = ivas_fb_fr_12band_1ms_im; + pAll_bins_per_band_48k = ivas_fb_bins_per_band_12band_1ms[0]; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong FB in ivas_filterbank_setup()!" ); + } + } + else + { + hFbMixer->pFb->filterbank_num_bands = 0; + } + + hFbMixer->cross_fade_end_offset = pCfg->fade_len + pCfg->pcm_offset; + hFbMixer->cross_fade_start_offset = hFbMixer->cross_fade_end_offset - pCfg->fade_len; + hFbMixer->ana_window_offset = pCfg->fb_latency + pCfg->pcm_offset; + + if ( ( error = ivas_fb_mixer_get_window( pCfg->fb_latency, sampling_rate, &( hFbMixer->pAna_window ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_fb_mixer_get_window( pCfg->fade_len, sampling_rate, &( hFbMixer->pFilterbank_cross_fade ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( pCfg->num_out_chans > 0 ) + { + ivas_filterbank_t *pFb = hFbMixer->pFb; + int16_t offset = 0; + + pFb->fb_consts.pFilterbank_bins_per_band = pAll_bins_per_band; + pFb->fb_consts.pFilterbank_bins_start_offset = pAll_bins_start_offset; + pFb->fb_bin_to_band.pFb_active_bins_per_band = pAll_bins_per_band_abs; + pFb->fb_bin_to_band.pFb_start_bin_per_band = pAll_bins_start_offset_abs; + + /* Initialization for short stride Parameter calculation and SPAR CLDFB reconstruction */ + pFb->fb_bin_to_band.num_cldfb_bands = (int16_t) ( sampling_rate * INV_CLDFB_BANDWIDTH + 0.5f ); + /*pFb->fb_bin_to_band.cldfb_stride = ( int16_t )( ( sampling_rate / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX );*/ /* equals num_cldfb_bands*/ + pFb->fb_bin_to_band.short_stride = (int16_t) ( ( sampling_rate / FRAMES_PER_SEC ) / 4 ); + set_f( pFb->fb_bin_to_band.p_short_stride_bin_to_band, 0.0f, 2 * MDFT_FB_BANDS_240 ); + set_s( pFb->fb_bin_to_band.p_cldfb_map_to_spar_band, 0, CLDFB_NO_CHANNELS_MAX ); + set_s( pFb->fb_bin_to_band.p_spar_start_bands, 0, CLDFB_NO_CHANNELS_MAX ); + + for ( j = 0; j < IVAS_MAX_NUM_FB_BANDS; j++ ) + { + pFb->fb_bin_to_band.p_short_stride_num_bins_per_band[j] = 0; /* aka num_active_bins per spar band */ + pFb->fb_bin_to_band.p_short_stride_start_bin_per_band[j] = 0; /* first considered bin index per spar band */ + pFb->fb_bin_to_band.pp_short_stride_bin_to_band[j] = NULL; + for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) + { + pFb->fb_bin_to_band.pp_cldfb_weights_per_spar_band[i][j] = 0.0f; + } + } + if ( sampling_rate == 48000 ) + { + for ( j = 0; j < pFb->filterbank_num_bands; j++ ) + { + pFb->fb_consts.ppFilterbank_FRs[0][j] = &pAll_fb_fr[0][offset]; + pFb->fb_consts.ppFilterbank_FRs[1][j] = &pAll_fb_fr[1][offset]; + offset += pFb->fb_consts.pFilterbank_bins_per_band[j]; + } + + ivas_calculate_abs_fr( pFb, sampling_rate ); + } + else + { + float *ppFilterbank_FRs_re_temp[MAX_NUM_BANDS_DIFF_NON48K]; + float *ppFilterbank_FRs_im_temp[MAX_NUM_BANDS_DIFF_NON48K]; + int16_t active_bins_temp[MAX_NUM_BANDS_DIFF_NON48K]; + int16_t start_offset_temp[MAX_NUM_BANDS_DIFF_NON48K]; + int16_t num_diff_bands, start_diff_band_non48k; + + num_diff_bands = MAX_NUM_BANDS_DIFF_NON48K; + start_diff_band_non48k = pFb->filterbank_num_bands - num_diff_bands; + + pFb->fb_consts.pFilterbank_bins_per_band = pAll_bins_per_band; + pFb->fb_consts.pFilterbank_bins_start_offset = pAll_bins_start_offset; + + for ( j = 0; j < pFb->filterbank_num_bands; j++ ) + { + int16_t num_active_bins = pFb->fb_consts.pFilterbank_bins_per_band[j]; + + if ( j < start_diff_band_non48k ) + { + pFb->fb_consts.ppFilterbank_FRs[0][j] = &pAll_fb_fr[0][offset]; + pFb->fb_consts.ppFilterbank_FRs[1][j] = &pAll_fb_fr[1][offset]; + } + else + { + mvr2r( &pAll_fb_fr[0][offset], pFb->fb_consts.ppFilterbank_FRs_non48k[0][j], num_active_bins ); + mvr2r( &pAll_fb_fr[1][offset], pFb->fb_consts.ppFilterbank_FRs_non48k[1][j], num_active_bins ); + } + + offset += pAll_bins_per_band_48k[j]; + } + + for ( j = start_diff_band_non48k; j < pFb->filterbank_num_bands; j++ ) + { + ppFilterbank_FRs_re_temp[j - start_diff_band_non48k] = pFb->fb_consts.ppFilterbank_FRs_non48k[0][j]; + ppFilterbank_FRs_im_temp[j - start_diff_band_non48k] = pFb->fb_consts.ppFilterbank_FRs_non48k[1][j]; + active_bins_temp[j - start_diff_band_non48k] = pFb->fb_consts.pFilterbank_bins_per_band[j]; + start_offset_temp[j - start_diff_band_non48k] = pFb->fb_consts.pFilterbank_bins_start_offset[j]; + } + + ivas_get_ld_fb_resp( ppFilterbank_FRs_re_temp, ppFilterbank_FRs_im_temp, ppFilterbank_FRs_re_temp, ppFilterbank_FRs_im_temp, + active_bins_temp, start_offset_temp, num_diff_bands, pCfg->fb_latency, sampling_rate ); + + for ( j = start_diff_band_non48k; j < pFb->filterbank_num_bands; j++ ) + { + pFb->fb_consts.ppFilterbank_FRs[0][j] = (const float *) pFb->fb_consts.ppFilterbank_FRs_non48k[0][j]; + pFb->fb_consts.ppFilterbank_FRs[1][j] = (const float *) pFb->fb_consts.ppFilterbank_FRs_non48k[1][j]; + } + + ivas_calculate_abs_fr( pFb, sampling_rate ); + } + } + + return error; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fb_mixer_get_window() + * + * + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_fb_mixer_get_window( + const int16_t fade_len, /* i : window fading length in samples */ + const int32_t sampling_rate, /* i : sampling rate */ + const float **pWindow /* o : pointer to the window coefficents */ +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + + if ( fade_len == NS2SA( sampling_rate, DELAY_FB_4_NS ) ) + { + switch ( sampling_rate ) + { + case 48000: + *pWindow = ivas_fb_cf_4ms_48k; + break; + case 32000: + *pWindow = ivas_fb_cf_4ms_32k; + break; + case 16000: + *pWindow = ivas_fb_cf_4ms_16k; + break; + default: + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unsupported Sampling frequency!" ); + } + } + else if ( fade_len == NS2SA( sampling_rate, DELAY_FB_1_NS ) ) + { + switch ( sampling_rate ) + { + case 48000: + *pWindow = ivas_fb_cf_1ms_48k; + break; + case 32000: + *pWindow = ivas_fb_cf_1ms_32k; + break; + case 16000: + *pWindow = ivas_fb_cf_1ms_16k; + break; + default: + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unsupported Sampling frequency!" ); + } + } + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Incorrect FB window fade len (%f ms)\n", ( fade_len / 1000000.f ) ); + } + + return error; +} + + +static const float *ivas_get_cheby_ramp( + const int16_t delay ) +{ + const float *pCheby = NULL; + + switch ( delay ) + { + case IVAS_FB_1MS_32K_SAMP: + pCheby = ivas_fb_resp_cheby_ramp_32del; + break; + case IVAS_FB_1MS_16K_SAMP: + pCheby = ivas_fb_resp_cheby_ramp_16del; + break; + default: + assert( !"Unsupported cheby ramp length!" ); + } + + return pCheby; +} + + +/*get first half of the hanning window*/ +static void ivas_get_hanning_win( + const int16_t len, + float *pH_win ) +{ + int16_t i; + + for ( i = 0; i < len; i++ ) + { + pH_win[i] = 0.5f * ( 1.0f - cosf( ( PI2 * ( i + 1 ) ) / ( ( 2 * len ) + 1 ) ) ); + } + + return; +} + + +static void ivas_get_ld_fb_resp( + float **ppIdeal_FRs_re, + float **ppIdeal_FRs_im, + float **ppNew_FRs_re, + float **ppNew_FRs_im, + const int16_t *pActive_bins, + const int16_t *pStart_offset, + const int16_t num_bands, + const int16_t delay, + const int32_t sampling_rate ) +{ + int16_t b, s, frame_len; + const float *pCheby; + + /*common scratch buffers for computing impulse/frequency responses, + pre-ring, post-ring and circular shifted outputs to optimize stack*/ + float scratch1[L_FRAME32k * 2]; + float scratch2[L_FRAME32k * 2]; + float han_win[L_FRAME32k]; + + frame_len = (int16_t) ( sampling_rate / FRAMES_PER_SEC ); + pCheby = ivas_get_cheby_ramp( delay ); + b = 0; + s = 0; + + assert( sampling_rate == 32000 || sampling_rate == 16000 ); + + ivas_get_hanning_win( frame_len, han_win ); + for ( b = 0; b < num_bands; b++ ) + { + set_f( scratch2, 0, frame_len << 1 ); + mvr2r( ppIdeal_FRs_re[b], &scratch2[pStart_offset[b]], pActive_bins[b] ); + mvr2r( ppIdeal_FRs_im[b], &scratch2[frame_len + pStart_offset[b]], pActive_bins[b] ); + ivas_imdft( scratch2, &scratch2[frame_len], scratch1, frame_len ); + + /*apply circular shift and hanning window*/ + + for ( s = delay; s < frame_len + delay; s++ ) + { + scratch2[s - delay] = scratch1[s] * ( 1 - han_win[s - delay] ); + } + + for ( ; s < 2 * frame_len; s++ ) + { + scratch2[s - delay] = scratch1[s] * han_win[s - ( frame_len + delay )]; + } + + for ( s = 0; s < delay; s++ ) + { + scratch2[2 * frame_len - delay + s] = -1 * scratch1[s] * han_win[frame_len - delay + s]; + } + + /*apply heavy/cheby ramp window and compute pre ring*/ + + for ( s = 0; s < delay + 1; s++ ) + { + scratch1[s] = scratch2[s] * pCheby[delay - s]; + } + + for ( ; s < frame_len; s++ ) + { + scratch1[s] = 0; + } + + for ( ; s < 2 * frame_len - delay; s++ ) + { + scratch1[s] = scratch2[s]; + } + + for ( ; s < 2 * frame_len; s++ ) + { + scratch1[s] = scratch2[s] * ( 1 - pCheby[s - ( 2 * frame_len - delay )] ); + } + + /*IR - pre ring + post ring*/ + for ( s = 1; s < 2 * frame_len; s++ ) + { + scratch2[s] = scratch2[s] /*pre ring*/ - scratch1[s] /*post ring*/ - scratch1[( 2 * frame_len ) - s]; + } + + for ( s = 0; s < 2 * frame_len - delay; s++ ) + { + scratch1[s + delay] = scratch2[s]; + } + + for ( ; s < 2 * frame_len; s++ ) + { + scratch1[s - ( 2 * frame_len - delay )] = -1 * ( scratch2[s] ); + } + + /* apply final window*/ + for ( s = 0; s < delay; s++ ) + { + scratch1[s] = scratch1[s] * sinf( ( EVS_PI * ( s + 1 ) ) / ( 2 * delay ) ); + } + + for ( s = 2 * delay; s < frame_len + 1; s++ ) + { + scratch1[s] = scratch1[s] * sinf( ( EVS_PI * ( frame_len - s ) ) / ( 2 * ( frame_len + 1 - ( 2 * delay ) ) ) ); + } + + for ( ; s < 2 * frame_len; s++ ) + { + scratch1[s] = 0; + } + + /*compute frequency response*/ + ivas_mdft( scratch1, scratch2, &scratch2[frame_len], frame_len << 1, frame_len ); + + mvr2r( &scratch2[pStart_offset[b]], ppNew_FRs_re[b], pActive_bins[b] ); + mvr2r( &scratch2[frame_len + pStart_offset[b]], ppNew_FRs_im[b], pActive_bins[b] ); + } + + return; +} diff --git a/lib_com/ivas_filters.c b/lib_com/ivas_filters.c new file mode 100644 index 0000000000..96148e5ca3 --- /dev/null +++ b/lib_com/ivas_filters.c @@ -0,0 +1,165 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_stat_com.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Static functions declaration + *------------------------------------------------------------------------------------------*/ + +static void ivas_iir_2_filter( ivas_filters_process_state_t *filter_state, float *pIn_Out, const int16_t length, const int16_t stage ); + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_filters_init() + * + * Initialisation call for filtering a signal + *-----------------------------------------------------------------------------------------*/ + +void ivas_filters_init( + ivas_filters_process_state_t *filter_state, + const float *filt_coeff, + const int16_t order ) +{ + int16_t i; + filter_state->order = order; + + if ( order == IVAS_FILTER_ORDER_2 || order == IVAS_FILTER_ORDER_1 ) + { + filter_state->filt_len = order + 1; + + for ( i = 0; i < IVAS_BIQUAD_FILT_LEN; i++ ) + { + filter_state->num[IVAS_FILTER_STAGE_0][i] = filt_coeff[i]; + filter_state->den[IVAS_FILTER_STAGE_0][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN]; + } + + filter_state->state[0][0] = 0.0f; + filter_state->state[0][1] = 0.0f; + filter_state->state[0][2] = 0.0f; + } + else + { + filter_state->filt_len = IVAS_BIQUAD_FILT_LEN; + + for ( i = 0; i < IVAS_BIQUAD_FILT_LEN; i++ ) + { + filter_state->num[IVAS_FILTER_STAGE_0][i] = filt_coeff[i]; + filter_state->den[IVAS_FILTER_STAGE_0][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN]; + filter_state->num[IVAS_FILTER_STAGE_1][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN * 2]; + filter_state->den[IVAS_FILTER_STAGE_1][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN * 3]; + } + + filter_state->state[0][0] = 0.0f; + filter_state->state[0][1] = 0.0f; + filter_state->state[0][2] = 0.0f; + filter_state->state[1][0] = 0.0f; + filter_state->state[1][1] = 0.0f; + filter_state->state[1][2] = 0.0f; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_filter_process() + * + * Process call for selecting the type filter + *-----------------------------------------------------------------------------------------*/ + +void ivas_filter_process( + ivas_filters_process_state_t *filter_state, + float *pIn_Out, + const int16_t length ) +{ + + switch ( filter_state->order ) + { + case IVAS_FILTER_ORDER_1: + case IVAS_FILTER_ORDER_2: + ivas_iir_2_filter( filter_state, pIn_Out, length, IVAS_FILTER_STAGE_0 ); + break; + case IVAS_FILTER_ORDER_4: + /* biquad-1 */ + ivas_iir_2_filter( filter_state, pIn_Out, length, IVAS_FILTER_STAGE_0 ); + /* biquad-2 */ + ivas_iir_2_filter( filter_state, pIn_Out, length, IVAS_FILTER_STAGE_1 ); + break; + default: + break; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_iir_2_filter() + * + * Process call for filtering a signal + *-----------------------------------------------------------------------------------------*/ + +static void ivas_iir_2_filter( + ivas_filters_process_state_t *filter_state, + float *pIn_Out, + const int16_t length, + const int16_t stage ) +{ + int16_t i, j; + float *pIn = pIn_Out; + float *pOut = pIn_Out; + float tmp_pIn_buf_i; + + for ( i = 0; i < length; i++ ) + { + tmp_pIn_buf_i = pIn[i]; + pOut[i] = filter_state->state[stage][0] + pIn[i] * filter_state->num[stage][0]; + + for ( j = 1; j < filter_state->filt_len; j++ ) + { + filter_state->state[stage][j - 1] = filter_state->state[stage][j] + filter_state->num[stage][j] * tmp_pIn_buf_i - + filter_state->den[stage][j] * pOut[i]; + } + } + + return; +} diff --git a/lib_com/ivas_ism_config.c b/lib_com/ivas_ism_config.c new file mode 100644 index 0000000000..abd955ce18 --- /dev/null +++ b/lib_com/ivas_ism_config.c @@ -0,0 +1,492 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define FRMS_PER_SECOND ( 1000000000 / FRAME_SIZE_NS ) + +#define BRATE_ISM_INACTIVE 2450 /* CoreCoder bitrate in ISm inactive frames */ +#define BITS_ISM_INACTIVE ( BRATE_ISM_INACTIVE / FRMS_PER_SECOND ) + +#define BETA_ISM_LOW_IMP 0.6f +#define BETA_ISM_MEDIUM_IMP 0.8f + + +/*-------------------------------------------------------------------* + * bitbudget_to_brate() + * + * Convert bit-budget to bitrate + *-------------------------------------------------------------------*/ + +static void bitbudget_to_brate( + const int16_t x[], /* i : bitbudgets */ + int32_t y[], /* o : bitrates */ + const int16_t N /* i : number of entries to be converted */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = FRMS_PER_SECOND * x[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_ism_config() + * + * Configure audio objects coding + *-------------------------------------------------------------------*/ + +ivas_error ivas_ism_config( + const int32_t ism_total_brate, /* i : ISms total bitrate */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t num_obj, /* i : number of objects */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + const int16_t localVAD[MAX_NUM_OBJECTS], /* i : local VAD flag */ + const int16_t ism_imp[], /* i : ISM importance flags */ + int32_t element_brate[], /* o : element bitrate per object */ + int32_t total_brate[], /* o : total bitrate per object */ + int16_t nb_bits_metadata[] /* i/o: number of metadata bits */ +) +{ + int16_t ch; + int16_t bits_element[MAX_NUM_OBJECTS], bits_CoreCoder[MAX_NUM_OBJECTS]; + int16_t bits_ism, bits_side; + int16_t limit_high = 0; /* just to avoid compilation warning */ + int16_t tmp; + int16_t ism_metadata_flag_global; + int16_t n_ISms; + ivas_error error; + + error = IVAS_ERR_OK; + + n_ISms = nchan_transport; + + /* initialization */ + ism_metadata_flag_global = 0; + bits_side = 0; + if ( hIsmMeta != NULL ) + { + for ( ch = 0; ch < n_ISms; ch++ ) + { + ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; + } + } + + /* decision about bitrates per channel - constant during the session (at one ivas_total_brate) */ + bits_ism = (int16_t) ( ism_total_brate / FRMS_PER_SECOND ); + set_s( bits_element, bits_ism / n_ISms, n_ISms ); + bits_element[n_ISms - 1] += bits_ism % n_ISms; + bitbudget_to_brate( bits_element, element_brate, n_ISms ); + + /* count ISm common signalling bits */ + if ( hIsmMeta != NULL ) + { + nb_bits_metadata[0] += n_ISms * ISM_METADATA_FLAG_BITS + num_obj; + + for ( ch = 0; ch < n_ISms; ch++ ) + { + if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) + { + nb_bits_metadata[0] += ISM_METADATA_VAD_FLAG_BITS; + } + } + } + + /* split metadata bitbudget equally between channels */ + if ( nb_bits_metadata != NULL ) + { + bits_side = sum_s( nb_bits_metadata, n_ISms ); + set_s( nb_bits_metadata, bits_side / n_ISms, n_ISms ); + nb_bits_metadata[n_ISms - 1] += bits_side % n_ISms; + v_sub_s( bits_element, nb_bits_metadata, bits_CoreCoder, n_ISms ); + bitbudget_to_brate( bits_CoreCoder, total_brate, n_ISms ); + + mvs2s( nb_bits_metadata, nb_bits_metadata, n_ISms ); + } + + /* assign less CoreCoder bit-budget to inactive streams (at least one stream must be active) */ + if ( ism_metadata_flag_global ) + { + int16_t diff, n_higher, flag_higher[MAX_NUM_OBJECTS]; + + set_s( flag_higher, 1, MAX_NUM_OBJECTS ); + + diff = 0; + for ( ch = 0; ch < n_ISms; ch++ ) + { + if ( hIsmMeta[ch]->ism_metadata_flag == 0 && localVAD[ch] == 0 ) + { + diff += bits_CoreCoder[ch] - BITS_ISM_INACTIVE; + bits_CoreCoder[ch] = BITS_ISM_INACTIVE; + flag_higher[ch] = 0; + } + } + + n_higher = sum_s( flag_higher, n_ISms ); + + if ( diff > 0 && n_higher > 0 ) + { + tmp = diff / n_higher; + for ( ch = 0; ch < n_ISms; ch++ ) + { + if ( flag_higher[ch] ) + { + bits_CoreCoder[ch] += tmp; + } + } + + tmp = diff % n_higher; + ch = 0; + while ( flag_higher[ch] == 0 ) + { + ch++; + } + bits_CoreCoder[ch] += tmp; + } + + bitbudget_to_brate( bits_CoreCoder, total_brate, n_ISms ); + + diff = 0; + for ( ch = 0; ch < n_ISms; ch++ ) + { + int32_t limit; + + limit = MIN_BRATE_SWB_BWE / FRMS_PER_SECOND; + if ( element_brate[ch] < MIN_BRATE_SWB_STEREO ) /* replicate function set_bw() -> check the coded audio band-width */ + { + limit = MIN_BRATE_WB_BWE / FRMS_PER_SECOND; + } + else if ( element_brate[ch] >= SCE_CORE_16k_LOW_LIMIT ) /* replicate function set_ACELP_flag() -> it is not intended to switch the ACELP internal sampling rate within an object */ + { + /*limit = SCE_CORE_16k_LOW_LIMIT;*/ + limit = ( ACELP_16k_LOW_LIMIT + SWB_TBE_1k6 ) / FRMS_PER_SECOND; + } + + if ( ism_imp[ch] == ISM_NO_META && localVAD[ch] == 0 ) + { + tmp = BITS_ISM_INACTIVE; + } + else if ( ism_imp[ch] == ISM_LOW_IMP ) + { + tmp = (int16_t) ( BETA_ISM_LOW_IMP * bits_CoreCoder[ch] ); + tmp = (int16_t) max( limit, bits_CoreCoder[ch] - tmp ); + } + else if ( ism_imp[ch] == ISM_MEDIUM_IMP ) + { + tmp = (int16_t) ( BETA_ISM_MEDIUM_IMP * bits_CoreCoder[ch] ); + tmp = (int16_t) max( limit, bits_CoreCoder[ch] - tmp ); + } + else /* ism_imp[ch] == ISM_HIGH_IMP */ + { + tmp = bits_CoreCoder[ch]; + } + + diff += bits_CoreCoder[ch] - tmp; + bits_CoreCoder[ch] = tmp; + } + + if ( diff > 0 && n_higher > 0 ) + { + tmp = diff / n_higher; + for ( ch = 0; ch < n_ISms; ch++ ) + { + if ( flag_higher[ch] ) + { + bits_CoreCoder[ch] += tmp; + } + } + + tmp = diff % n_higher; + ch = 0; + while ( flag_higher[ch] == 0 ) + { + ch++; + } + bits_CoreCoder[ch] += tmp; + } + + /* verify for the maximum bitrate @12.8kHz core */ + diff = 0; + for ( ch = 0; ch < n_ISms; ch++ ) + { + limit_high = IVAS_512k / FRMS_PER_SECOND; + if ( element_brate[ch] < SCE_CORE_16k_LOW_LIMIT ) /* replicate function set_ACELP_flag() -> it is not intended to switch the ACELP internal sampling rate within an object */ + { + limit_high = ACELP_12k8_HIGH_LIMIT / FRMS_PER_SECOND; + } + + tmp = (int16_t) min( bits_CoreCoder[ch], limit_high ); + + diff += bits_CoreCoder[ch] - tmp; + bits_CoreCoder[ch] = tmp; + } + + if ( diff > 0 ) + { + ch = 0; + for ( ch = 0; ch < n_ISms; ch++ ) + { + if ( flag_higher[ch] == 0 ) + { + if ( diff > limit_high ) + { + diff += bits_CoreCoder[ch] - limit_high; + bits_CoreCoder[ch] = limit_high; + } + else + { + bits_CoreCoder[ch] += diff; +#ifdef DEBUGGING + if ( bits_CoreCoder[ch] == SID_2k40 / FRAMES_PER_SEC ) + { + printf( "\nWarning: ISm bitbudget equal to SID!\n" ); + } +#endif + break; + } + } + } + } + + bitbudget_to_brate( bits_CoreCoder, total_brate, n_ISms ); + } + +#ifdef DEBUGGING + if ( nb_bits_metadata != NULL ) + { + int32_t tmpL; + tmpL = sum_l( total_brate, n_ISms ) + bits_side * FRMS_PER_SECOND; + if ( sum_l( element_brate, n_ISms ) != tmpL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "\nError: Mismatch in ISm bit-budget distribution. Exiting!\n" ); + } + } +#endif + + return error; +} + + +/*-------------------------------------------------------------------* + * ivas_ism_reset_metadata() + * + * Reset ISm metadata parameters + *-------------------------------------------------------------------*/ + +void ivas_ism_reset_metadata( + ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ +) +{ + hIsmMeta->azimuth = 0.0f; + hIsmMeta->elevation = 0.0f; + + return; +} + +/*-------------------------------------------------------------------* + * ivas_ism_reset_metadata_API() + * + * Reset ISm metadata parameters + *-------------------------------------------------------------------*/ +void ivas_ism_reset_metadata_API( + ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ +) +{ + hIsmMeta->ism_metadata_flag = 0; + ivas_ism_reset_metadata( hIsmMeta ); + + return; +} + +/*-------------------------------------------------------------------* + * ism_quant_meta() + * + * three-level uniform scalar quantizer for ISM metadata + *-------------------------------------------------------------------*/ + +/*! r: index of the winning codeword */ +int16_t ism_quant_meta( + const float val, /* i : scalar value to quantize */ + float *valQ, /* o : quantized value */ + const float borders[], /* i : level borders */ + const int16_t cbsize /* i : codebook size */ +) +{ + int16_t idx, idx_start; + float qlow, step; + + if ( val <= borders[1] ) + { + qlow = borders[0]; + idx_start = 0; + step = ISM_Q_STEP_BORDER; + } + else if ( val <= borders[2] ) + { + qlow = borders[1]; + idx_start = (int16_t) ( ( borders[1] - borders[0] ) / ISM_Q_STEP_BORDER ); + step = ISM_Q_STEP; + } + else + { + qlow = borders[2]; + idx_start = (int16_t) ( cbsize - 1 - ( borders[3] - borders[2] ) / ISM_Q_STEP_BORDER ); + step = ISM_Q_STEP_BORDER; + } + + idx = idx_start + (int16_t) max( 0.f, min( cbsize - 1, ( ( val - qlow ) / step + 0.5f ) ) ); + *valQ = ( idx - idx_start ) * step + qlow; + + return idx; +} + + +/*-------------------------------------------------------------------* + * ism_dequant_meta() + * + * three-level uniform scalar dequantizer for ISM metadata + *-------------------------------------------------------------------*/ + +/*! r: dequantized value */ +float ism_dequant_meta( + const int16_t idx, /* i : quantizer index */ + const float borders[], /* i : level borders */ + const int16_t cbsize /* i : codebook size */ +) +{ + int16_t idx_start; + float qlow, step, valQ; + + if ( idx <= ( borders[1] - borders[0] ) / ISM_Q_STEP_BORDER ) + { + qlow = borders[0]; + idx_start = 0; + step = ISM_Q_STEP_BORDER; + } + else if ( idx <= cbsize - 1 - ( borders[3] - borders[2] ) / ISM_Q_STEP_BORDER ) + { + qlow = borders[1]; + idx_start = (int16_t) ( ( borders[1] - borders[0] ) / ISM_Q_STEP_BORDER ); + step = ISM_Q_STEP; + } + else + { + qlow = borders[2]; + idx_start = (int16_t) ( cbsize - 1 - ( borders[3] - borders[2] ) / ISM_Q_STEP_BORDER ); + step = ISM_Q_STEP_BORDER; + } + + valQ = ( idx - idx_start ) * step + qlow; + + return valQ; +} + + +/*--------------------------------------------------------------- + * ivas_param_ism_config() + * + * + * ---------------------------------------------------------------*/ + +void ivas_param_ism_config( + PARAM_ISM_CONFIG_HANDLE hParamIsm /* i/o: IVAS Param ISM Config Structure */ +) +{ + int16_t i, num_obj; + + hParamIsm->nbands = MAX_PARAM_ISM_NBANDS; + num_obj = hParamIsm->num_obj; + + for ( i = 0; i < hParamIsm->nbands; i++ ) + { + hParamIsm->nblocks[i] = MAX_PARAM_ISM_NBLOCKS; + } + + /* for elevation zero compute the max azi quantization indices */ + for ( i = 0; i < num_obj; i++ ) + { + hParamIsm->last_az_diff[i] = 0; + hParamIsm->last_az_sgn[i] = 1; + hParamIsm->last_el_diff[i] = 0; + hParamIsm->last_el_sgn[i] = 1; + } + + return; +} + + +/*--------------------------------------------------------------- + * ivas_ism_mode_select() + * + * selects the ISM mode base on bitrate and number of objects + * ---------------------------------------------------------------*/ + +/*! r : ISM format mode */ +ISM_MODE ivas_ism_mode_select( + const int16_t nchan_inp, /* i : number of input objects */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + ISM_MODE ism_mode = ISM_MODE_NONE; + + if ( nchan_inp > 2 && ivas_total_brate <= ACELP_32k ) + { + ism_mode = ISM_MODE_PARAM; + } + else + { + ism_mode = ISM_MODE_DISC; + } + + return ism_mode; +} diff --git a/lib_com/ivas_masa_com.c b/lib_com/ivas_masa_com.c new file mode 100644 index 0000000000..f98dcd8414 --- /dev/null +++ b/lib_com/ivas_masa_com.c @@ -0,0 +1,390 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "prot.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*--------------------------------------------------------------- + * Local constants + *---------------------------------------------------------------*/ + +#define MASA_EXTRA_BAND_META_BITS 40 +#define MASA_SMALL_INC_META_BITS 10 + + +/*--------------------------------------------------------------- + * ivas_masa_setup() + * + * Set-up MASA coding elements and bitrates + *---------------------------------------------------------------*/ + +void ivas_masa_set_elements( + const int32_t ivas_total_brate, /* i : codec total bitrate */ + const int16_t mc_mode, /* i : MC format mode */ + const int16_t nchan_transport, /* i : number of MASA input/transport channels */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + int16_t *element_mode, /* o : element mode */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE /* o : number of CPEs */ +) +{ + if ( nchan_transport == 2 ) + { + if ( ivas_total_brate >= MCMASA_SEPARATE_BRATE && mc_mode == MC_MODE_MCMASA ) + { + *nCPE = 1; + *nSCE = 1; + + *element_mode = IVAS_SCE; /* This is needed for the initialization phase to initialize codec mode to SCE, since it is written first to the file*/ + } + else + { + *nCPE = 1; + *nSCE = 0; + + if ( ivas_total_brate > IVAS_48k ) + { + *element_mode = IVAS_CPE_MDCT; + } + } + hQMetaData->bits_frame_nominal = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ); + } + else if ( nchan_transport == 1 ) + { + *nCPE = 0; + *nSCE = 1; + + if ( ivas_total_brate == IVAS_13k2 ) + { + hQMetaData->bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; + } + else if ( ivas_total_brate <= IVAS_16k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; + } + else if ( ivas_total_brate <= IVAS_24k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; + } + else if ( ivas_total_brate <= IVAS_32k ) + { + hQMetaData->bits_frame_nominal = ACELP_24k40 / FRAMES_PER_SEC; + } + else + { + hQMetaData->bits_frame_nominal = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ); + } + *element_mode = IVAS_SCE; + } + else + { + assert( !"MASA number of transport channels must be 1, or 2" ); + } + + return; +} + + +/*--------------------------------------------------------------- + * generate_gridEq() + * + * generate Spherical grid + *---------------------------------------------------------------*/ + +void generate_gridEq( + SPHERICAL_GRID_DATA *data /* o : data structure for grid */ +) +{ + + int32_t cum_n, cum_n_prev; + float theta; + int16_t i; + int16_t *n; + + n = data->no_phi; + n[0] = MASA_NO_POINTS_EQUATOR; + + cum_n_prev = 0; + + for ( i = 1; i < MASA_NO_CIRCLES; i++ ) + { + theta = MASA_ANGLE_AT_EQUATOR * (float) ( i + 0.5f ); + if ( i == 1 ) + { + cum_n = 2 * (int32_t) ceilf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); + } + else + { + cum_n = 2 * (int32_t) roundf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); + } + n[i] = (int16_t) ( ( cum_n - cum_n_prev ) >> 1 ); + cum_n_prev = cum_n; + } + n[i] = 1; + data->no_theta = i + 1; + + return; +} + + +/*--------------------------------------------------------------- + * ivas_masa_set_coding_config() + * + * Sets MASA codec parameters based on bitrate, number of directions, + * and other metadata properties. + *---------------------------------------------------------------*/ + +void ivas_masa_set_coding_config( + MASA_CODEC_CONFIG *config, /* i/o: MASA coding config structure */ + int16_t *band_mapping, /* o : Band mapping used */ + const int32_t ivas_total_brate, /* i : codec total bitrate */ + const int16_t nchan_transport, /* i : number of transport channels (mono/stereo) */ + const uint8_t isMcMasa /* i : toggle for selecting mcMASA specific config */ +) +{ + int16_t i; + uint8_t nbands; + uint8_t nTwoDirBands; + const int16_t *masa_bits_table; + + /* When coming into this function, these values should be already set: + * joinedSubframes; + * useCoherence; + * numberOfDirections; + */ + + /* Setup coding parameters based on the bitrate, transport channel count, subframe metadata information, + * and number of directions in metadata. */ + nbands = 0; + nTwoDirBands = 0; + i = 0; + + /* First select correct bit budget table */ + masa_bits_table = masa_bits; + if ( isMcMasa ) + { + masa_bits_table = mcmasa_bits; + } + else if ( ivas_total_brate < IVAS_48k && nchan_transport == 2 ) + { + masa_bits_table = masa_bits_LR_stereo; + } + + while ( nbands == 0 && i < IVAS_NUM_ACTIVE_BRATES ) + { + if ( ivas_total_brate <= ivas_brate_tbl[i + SIZE_IVAS_BRATE_TBL - IVAS_NUM_ACTIVE_BRATES] ) + { + int16_t idx_bands; + idx_bands = i; + + if ( config->numberOfDirections > 1 ) + { + nTwoDirBands = config->joinedSubframes ? masa_twodir_bands_joined[i] : masa_twodir_bands[i]; + + if ( ( ivas_total_brate > IVAS_96k && !config->joinedSubframes ) || ( ivas_total_brate > IVAS_80k && config->joinedSubframes ) ) + { + idx_bands--; + } + } + + if ( config->joinedSubframes ) + { + nbands = masa_joined_nbands[idx_bands]; + } + else + { + nbands = masa_nbands[idx_bands]; + } + + config->max_metadata_bits = masa_bits_table[i]; + + if ( ivas_total_brate == IVAS_64k && config->numberOfDirections > 1 ) + { + /* At 64k, we increase metadata bit budget when there is two directions present. */ + config->max_metadata_bits += MASA_EXTRA_BAND_META_BITS; + } + + if ( ( ( ivas_total_brate == IVAS_32k && nchan_transport == 2 ) || ivas_total_brate == IVAS_48k ) && config->joinedSubframes ) + { + /* At 32k and 48k, we increase metadata bit budget when joinedSubframes. */ + config->max_metadata_bits += ( MASA_SMALL_INC_META_BITS ); + } + } + i++; + } + config->numCodingBands = nbands; + config->numTwoDirBands = nTwoDirBands; + +#ifdef DEBUGGING + assert( nbands > 0 ); +#endif + if ( config->joinedSubframes == TRUE ) + { + config->mergeRatiosOverSubframes = FALSE; + } + else + { + config->mergeRatiosOverSubframes = TRUE; + } + + /* Setup frequency band mapping based on the number of used coding bands */ + switch ( config->numCodingBands ) + { + case 5: + mvs2s( MASA_band_mapping_24_to_5, band_mapping, 5 + 1 ); + break; + case 8: + mvs2s( MASA_band_mapping_24_to_8, band_mapping, 8 + 1 ); + break; + case 12: + mvs2s( MASA_band_mapping_24_to_12, band_mapping, 12 + 1 ); + break; + case 18: + mvs2s( MASA_band_mapping_24_to_18, band_mapping, 18 + 1 ); + break; + case MASA_FREQUENCY_BANDS: + /* With input count of bands, no mapping is needed but for unified processing later, we store normal mapping */ + for ( i = 0; i < MASA_FREQUENCY_BANDS + 1; i++ ) + { + band_mapping[i] = i; + } + break; + default: + assert( 0 && "Error: The number of MASA coding bands is not supported" ); + } + + config->useCoherence = TRUE; + if ( ( !isMcMasa && ivas_total_brate < IVAS_48k ) || ( isMcMasa && ivas_total_brate < IVAS_16k4 ) ) + { + config->useCoherence = FALSE; + } + + return; +} + +/*--------------------------------------------------------------- + * masa_sample_rate_band_correction() + * + * + *---------------------------------------------------------------*/ + +void masa_sample_rate_band_correction( + MASA_CODEC_CONFIG *config, /* i/o: MASA codec config */ + int16_t *band_mapping, /* i/o: Band mapping used and modified */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: QMetadata structure for modification */ + const int32_t sampling_rate /* i : Sampling rate */ +) +{ + uint8_t band, sf; + int16_t maxBin, highBand, maxBand; + uint8_t numBands48k; + + if ( sampling_rate == 48000 ) + { + return; + } + + /* Find maximum band usable at this sample rate */ + maxBin = (int16_t) ( CLDFB_NO_CHANNELS_MAX * sampling_rate / 48000 ); + maxBand = 0; + while ( MASA_band_grouping_24[maxBand] <= maxBin ) + { + maxBand++; + } + maxBand--; + + numBands48k = config->numCodingBands; + + for ( band = 1; band < config->numCodingBands + 1; band++ ) + { + highBand = band_mapping[band]; + + if ( highBand >= maxBand ) + { + config->numCodingBands = band; + hQMetaData->numCodingBands = band; + band_mapping[band] = maxBand; + break; + } + } + + /* Set rest of the bands to zero in qmetadata. */ + for ( ; band < numBands48k; band++ ) + { + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + hQMetaData->q_direction[0].band_data[band].azimuth[sf] = 0.0f; + hQMetaData->q_direction[0].band_data[band].elevation[sf] = 0.0f; + hQMetaData->q_direction[0].band_data[band].energy_ratio[sf] = 0.0f; + + if ( hQMetaData->coherence_flag && hQMetaData->q_direction[0].coherence_band_data != NULL ) + { + hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = 0u; + } + + if ( hQMetaData->no_directions == 2 ) + { + hQMetaData->q_direction[1].band_data[band].azimuth[sf] = 0.0f; + hQMetaData->q_direction[1].band_data[band].elevation[sf] = 0.0f; + hQMetaData->q_direction[1].band_data[band].energy_ratio[sf] = 0.0f; + + if ( hQMetaData->coherence_flag && hQMetaData->q_direction[1].coherence_band_data != NULL ) + { + hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf] = 0u; + } + } + + if ( hQMetaData->coherence_flag && hQMetaData->surcoh_band_data != NULL ) + { + hQMetaData->surcoh_band_data[band].surround_coherence[sf] = 0u; + } + } + + if ( hQMetaData->no_directions == 2 ) + { + hQMetaData->twoDirBands[band] = 0; + } + } + + return; +} diff --git a/lib_com/ivas_mc_com.c b/lib_com/ivas_mc_com.c new file mode 100644 index 0000000000..a6ee0069ff --- /dev/null +++ b/lib_com/ivas_mc_com.c @@ -0,0 +1,232 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + + +/*--------------------------------------------------------------- + * ivas_mc_mode_select() + * + * selects the multichannel mode base on bitrate and LS setup + * ---------------------------------------------------------------*/ + +/*! r : MC format mode */ +MC_MODE ivas_mc_mode_select( + const MC_LS_SETUP mc_ls_setup, /* i : MC loudspeaker setup */ + const int32_t total_brate /* i : IVAS total bitrate */ +) +{ + MC_MODE mc_mode = MC_MODE_MCT; + + switch ( mc_ls_setup ) + { + case MC_LS_SETUP_5_1: + if ( total_brate < IVAS_48k ) + { + mc_mode = MC_MODE_MCMASA; + } + else if ( total_brate < IVAS_96k ) + { + mc_mode = MC_MODE_PARAMMC; + } + break; + case MC_LS_SETUP_7_1: + if ( total_brate < IVAS_48k ) + { + mc_mode = MC_MODE_MCMASA; + } + else if ( total_brate < IVAS_128k ) + { + mc_mode = MC_MODE_PARAMMC; + } + break; + case MC_LS_SETUP_5_1_2: + if ( total_brate < IVAS_48k ) + { + mc_mode = MC_MODE_MCMASA; + } + else if ( total_brate < IVAS_128k ) + { + mc_mode = MC_MODE_PARAMMC; + } + break; + case MC_LS_SETUP_5_1_4: + if ( total_brate < IVAS_96k ) + { + mc_mode = MC_MODE_MCMASA; + } + else if ( total_brate < IVAS_160k ) + { + mc_mode = MC_MODE_PARAMMC; + } + break; + case MC_LS_SETUP_7_1_4: + if ( total_brate < IVAS_128k ) + { + mc_mode = MC_MODE_MCMASA; + } + else if ( total_brate < IVAS_192k ) + { + mc_mode = MC_MODE_PARAMMC; + } + break; + default: + assert( 0 && "LS Setup not supported or defined for MC mode!\n" ); + } + + return mc_mode; +} + +/*--------------------------------------------------------------- + * ivas_mc_setup_get_num_channels() + * + * returns the number of channels (including the LFE) for a MC LS setup + * ---------------------------------------------------------------*/ + +/*! r : number of loudspeaker channels */ +int16_t ivas_mc_ls_setup_get_num_channels( + const MC_LS_SETUP mc_ls_setup /* i : multi channel loudspeaker setup */ +) +{ + int16_t nchan; + + nchan = 0; + + switch ( mc_ls_setup ) + { + case MC_LS_SETUP_5_1: + nchan = 6; + break; + case MC_LS_SETUP_7_1: + nchan = 8; + break; + case MC_LS_SETUP_5_1_2: + nchan = 8; + break; + case MC_LS_SETUP_5_1_4: + nchan = 10; + break; + case MC_LS_SETUP_7_1_4: + nchan = 12; + break; + default: + assert( 0 && "LS Setup not supported or defined for MC mode!\n" ); + } + + return nchan; +} + +/*--------------------------------------------------------------- + * ivas_mc_map_output_config_to_mc_ls_setup() + * + * maps output configuration multi channel loudspeaker setup + * ---------------------------------------------------------------*/ + +/*! r : multi channel loudspeaker setup */ +MC_LS_SETUP ivas_mc_map_output_config_to_mc_ls_setup( + const AUDIO_CONFIG output_config /* i : output audio configuration */ +) +{ + MC_LS_SETUP mc_ls_setup; + + mc_ls_setup = MC_LS_SETUP_INVALID; + + switch ( output_config ) + { + case AUDIO_CONFIG_5_1: + mc_ls_setup = MC_LS_SETUP_5_1; + break; + case AUDIO_CONFIG_7_1: + mc_ls_setup = MC_LS_SETUP_7_1; + break; + case AUDIO_CONFIG_5_1_2: + mc_ls_setup = MC_LS_SETUP_5_1_2; + break; + case AUDIO_CONFIG_5_1_4: + mc_ls_setup = MC_LS_SETUP_5_1_4; + break; + case AUDIO_CONFIG_7_1_4: + mc_ls_setup = MC_LS_SETUP_7_1_4; + break; + default: + assert( 0 && "Output config is not a valid MC loudspeaker setup!\n" ); + } + + return mc_ls_setup; +} + +/*--------------------------------------------------------------- + * ivas_mc_map_ls_setup_to_output_config + * + * maps multi channel loudspeaker setup to audio configuration + * ---------------------------------------------------------------*/ + +/*! r: audio configuration*/ +AUDIO_CONFIG ivas_mc_map_ls_setup_to_output_config( + const MC_LS_SETUP mc_ls_setup /* i : multi channel loudspeaker setup*/ +) +{ + AUDIO_CONFIG audio_config; + audio_config = AUDIO_CONFIG_INVALID; + + switch ( mc_ls_setup ) + { + case MC_LS_SETUP_5_1: + audio_config = AUDIO_CONFIG_5_1; + break; + case MC_LS_SETUP_7_1: + audio_config = AUDIO_CONFIG_7_1; + break; + case MC_LS_SETUP_5_1_2: + audio_config = AUDIO_CONFIG_5_1_2; + break; + case MC_LS_SETUP_5_1_4: + audio_config = AUDIO_CONFIG_5_1_4; + break; + case MC_LS_SETUP_7_1_4: + audio_config = AUDIO_CONFIG_7_1_4; + break; + default: + assert( 0 && "MC loudspeaker setup is not valid!\n" ); + } + + return audio_config; +} diff --git a/lib_com/ivas_mc_param_com.c b/lib_com/ivas_mc_param_com.c new file mode 100644 index 0000000000..3690c1219f --- /dev/null +++ b/lib_com/ivas_mc_param_com.c @@ -0,0 +1,505 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_com.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_set_coding_scheme( const MC_LS_SETUP mc_ls_setup, const int32_t ivas_total_brate, HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC ); + + +/*------------------------------------------------------------------------- + * ivas_param_mc_get_configuration_index() + * + * + *------------------------------------------------------------------------*/ + +uint16_t ivas_param_mc_get_configuration_index( + const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + uint16_t cur_idx; + + for ( cur_idx = 0; cur_idx < PARAM_MC_NUM_CONFIGS; cur_idx++ ) + { + if ( ivas_param_mc_conf[cur_idx].mc_ls_setup == mc_ls_setup && ivas_param_mc_conf[cur_idx].ivas_total_brate == ivas_total_brate ) + { + return cur_idx; + } + } +#ifdef DEBUGGING + assert( 0 && "No Parametric MC configuration for this bitrate/channel setup!" ); +#endif + return PARAM_MC_NUM_CONFIGS; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_metadata_open() + * + * Parametric MC parameter coding state open function + *------------------------------------------------------------------------*/ + +void ivas_param_mc_metadata_open( + const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ + const int16_t lfe_index, /* i : channel index of LFE */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* o : handle for the Parametric MC parameter coding state */ +) +{ + int16_t i; + uint16_t config_index; + int16_t nchan_setup; + + nchan_setup = ivas_mc_ls_setup_get_num_channels( mc_ls_setup ); + + /* get coding band mappings */ + set_s( hMetadataPMC->coding_band_mapping, 0, PARAM_MC_MAX_PARAMETER_BANDS ); + + /* set coding scheme */ + ivas_param_mc_set_coding_scheme( mc_ls_setup, ivas_total_brate, hMetadataPMC ); + + /* get configuration index */ + config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); + if ( config_index == PARAM_MC_NUM_CONFIGS ) + { + assert( 0 && "ParamMC configuration index not found!" ); + } + + /* Band Grouping */ + if ( hMetadataPMC->num_parameter_bands == 20 ) + { + mvs2s( param_mc_coding_band_mapping_20, hMetadataPMC->coding_band_mapping, 20 ); + } + else if ( hMetadataPMC->num_parameter_bands == 14 ) + { + mvs2s( param_mc_coding_band_mapping_14, hMetadataPMC->coding_band_mapping, 14 ); + } + else if ( hMetadataPMC->num_parameter_bands == 10 ) + { + mvs2s( param_mc_coding_band_mapping_10, hMetadataPMC->coding_band_mapping, 10 ); + } + else + { + assert( 0 && "nbands must be 20 or 14!" ); + } + + /* create map of all possible ICCs */ + ivas_param_mc_create_full_icc_mapping( nchan_setup, lfe_index, hMetadataPMC->icc_map_full, &hMetadataPMC->icc_map_size_full ); + hMetadataPMC->icc_mapping_conf = ivas_param_mc_conf[config_index].icc_mapping_conf; + hMetadataPMC->ild_mapping_conf = ivas_param_mc_conf[config_index].ild_mapping_conf; + hMetadataPMC->ild_factors = ivas_param_mc_conf[config_index].ild_factors; + + /* set default ICC maps */ + for ( i = 0; i < PARAM_MC_PARAMETER_FRAMES; i++ ) + { + ivas_param_mc_default_icc_map( hMetadataPMC->icc_mapping_conf, hMetadataPMC->icc_mapping[i] ); + } + + + /* init remaining flags and indices */ + hMetadataPMC->param_frame_idx = 0; + hMetadataPMC->flag_use_adaptive_icc_map = 0; + hMetadataPMC->bAttackPresent = 0; + hMetadataPMC->attackIndex = 0; + hMetadataPMC->lfe_on = 1; + + /* set coded bwidth to FB at the beginning */ + hMetadataPMC->coded_bwidth = FB; + hMetadataPMC->last_coded_bwidth = FB; + + ivas_param_mc_set_coded_bands( hMetadataPMC ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_set_coded_bands() + * + * Parametric MC: set number of actually coded parameters bands based on the + * coded band width + *------------------------------------------------------------------------*/ + +void ivas_param_mc_set_coded_bands( + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: handle for the Parametric MC parameter coding state */ +) +{ + int16_t i; + + /* set number of coded bands*/ + switch ( hMetadataPMC->num_parameter_bands ) + { + case 20: + hMetadataPMC->nbands_coded = param_mc_bands_coded_20[hMetadataPMC->coded_bwidth]; + break; + case 14: + hMetadataPMC->nbands_coded = param_mc_bands_coded_14[hMetadataPMC->coded_bwidth]; + break; + case 10: + hMetadataPMC->nbands_coded = param_mc_bands_coded_10[hMetadataPMC->coded_bwidth]; + } + + /* set number of bands per parameter frame set */ + for ( i = 0; i < PARAM_MC_PARAMETER_FRAMES; i++ ) + { + hMetadataPMC->nbands_in_param_frame[i] = 0; + } + + for ( i = 0; i < hMetadataPMC->nbands_coded; i++ ) + { + hMetadataPMC->nbands_in_param_frame[hMetadataPMC->coding_band_mapping[i]]++; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_metadata_close() + * + * Parametric MC parameter coding state close function + *------------------------------------------------------------------------*/ + +void ivas_param_mc_metadata_close( + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: handle for the Parametric MC parameter coding state */ +) +{ + uint16_t i; + + + /* adaptive ICC mapping */ + for ( i = 0; i < 2; i++ ) + { + if ( hMetadataPMC->icc_map_full[i] ) + { + count_free( hMetadataPMC->icc_map_full[i] ); + hMetadataPMC->icc_map_full[i] = NULL; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_getNumTransportChannels() + * + * + *------------------------------------------------------------------------*/ + +/* r : number of IVAS transport channels */ +int16_t ivas_param_mc_getNumTransportChannels( + const int32_t ivas_total_bitrate, /* i : IVAS total bitrate */ + const MC_LS_SETUP mc_ls_setup /* i : MC ls setup */ +) +{ + int16_t nchan_transport; + int16_t config_index; + + config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_bitrate ); + + nchan_transport = ivas_param_mc_conf[config_index].num_transport_chan; + + return nchan_transport; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_create_full_icc_mapping() + * + * create the map of all possible ICCs for a certain internal setup + * indicated by the number of channels and LFE index + *------------------------------------------------------------------------*/ + +void ivas_param_mc_create_full_icc_mapping( + const int16_t n_channels, /* i : number of channels with LFE for the internal setup */ + const int16_t lfe_index, /* i : channel index of the LFE */ + int16_t *icc_map[2], /* o : map of all possible ICCs */ + int16_t *icc_map_size_full /* o : number of all possible ICCs */ +) +{ + int16_t i, k, l; + + l = 0; + + /* number of all possible ICCs is the number of non-diagonal upper elements of a + * ICC matrix for all channels not including the LFE plus one static ICC for the + * combination (LFE/center) */ + *icc_map_size_full = ( n_channels - 2 ) * ( n_channels - 1 ) / 2 + 1; + + /* allocate memory for the map */ + for ( i = 0; i < 2; i++ ) + { + icc_map[i] = (int16_t *) count_malloc( *icc_map_size_full * sizeof( int16_t ) ); + } + + /* create map (non-LFE ICCs) */ + for ( i = 0; i < n_channels; i++ ) + { + if ( i != lfe_index ) + { + for ( k = i + 1; k < n_channels; k++ ) + { + if ( k != lfe_index ) + { + icc_map[0][l] = i; + icc_map[1][l] = k; + l++; + } + } + } + } + + /* last one is the fixed mapping center -> LFE */ + assert( l == *icc_map_size_full - 1 ); + + icc_map[0][l] = 2; + icc_map[1][l] = lfe_index; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_default_icc_map() + * + * get the default ICC map for a certain internal setup + * indicated by the number of channels from the table ROM + *------------------------------------------------------------------------*/ + +void ivas_param_mc_default_icc_map( + const PARAM_MC_ICC_MAPPING *hIccMapping, /* i : ICC mapping table */ + int16_t icc_map[PARAM_MC_SZ_ICC_MAP][2] /* o : copy of map from ROM table */ +) +{ + int16_t i; + + for ( i = 0; i < hIccMapping->icc_map_size_lfe; i++ ) + { + icc_map[i][0] = hIccMapping->icc_mapping[i][0]; + icc_map[i][1] = hIccMapping->icc_mapping[i][1]; + } + + return; +} + + +/*------------------------------------------------------------------------- + * Local functions + *------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------- + * ivas_param_mc_set_coding_scheme() + * + * set Parametric MC parameter coding tables based on format and bitrate + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_set_coding_scheme( + const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: Parametric MC metadata handle */ +) +{ + + /* quantizer and coding tables */ + switch ( mc_ls_setup ) + { + case MC_LS_SETUP_5_1: + /* ICC */ + hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_cicp6_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_cicp6_48_16bits[0]; + hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_cicp6_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_cicp6_48_16bits[0]; + hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; + hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; + hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; + /* ILD */ + hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_cicp6_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_cicp6_48_16bits[0]; + hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_cicp6_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_cicp6_48_16bits[0]; + hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; + hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; + hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; + break; + case MC_LS_SETUP_7_1: + /* ICC */ + hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_cicp12_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_cicp12_48_16bits[0]; + hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_cicp12_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_cicp12_48_16bits[0]; + hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; + hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; + hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; + /* ILD */ + hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_cicp12_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_cicp12_48_16bits[0]; + hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_cicp12_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_cicp12_48_16bits[0]; + hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; + hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; + hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; + break; + case MC_LS_SETUP_5_1_2: + /* ICC */ + hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_cicp14_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_cicp14_48_16bits[0]; + hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_cicp14_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_cicp14_48_16bits[0]; + hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; + hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; + hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; + /* ILD */ + hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_cicp14_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_cicp14_48_16bits[0]; + hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_cicp14_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_cicp14_48_16bits[0]; + hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; + hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; + hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; + break; + case MC_LS_SETUP_5_1_4: + case MC_LS_SETUP_7_1_4: + /* ICC */ + hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_combined_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_combined_48_16bits[0]; + hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_combined_48_16bits[0]; + hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_combined_48_16bits[0]; + hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; + hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; + hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; + /* ILD */ + hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_combined_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_combined_48_16bits[0]; + hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_combined_48_16bits[0]; + hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_combined_48_16bits[0]; + hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; + hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; + hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; + break; + default: + assert( 0 && "PARAM_MC: channel configuration not supported!" ); + } + + /* parameter bands */ + switch ( mc_ls_setup ) + { + case MC_LS_SETUP_5_1: + switch ( ivas_total_brate ) + { + case IVAS_48k: + hMetadataPMC->num_parameter_bands = 10; + break; + case IVAS_64k: + case IVAS_80k: + hMetadataPMC->num_parameter_bands = 14; + break; + default: + assert( 0 && "PARAM_MC: bitrate for CICP6 not supported!" ); + } + break; + + case MC_LS_SETUP_7_1: + switch ( ivas_total_brate ) + { + case IVAS_48k: + hMetadataPMC->num_parameter_bands = 10; + break; + case IVAS_64k: + case IVAS_80k: + hMetadataPMC->num_parameter_bands = 14; + break; + case IVAS_96k: + hMetadataPMC->num_parameter_bands = 20; + break; + } + break; + case MC_LS_SETUP_5_1_2: + switch ( ivas_total_brate ) + { + case IVAS_48k: + hMetadataPMC->num_parameter_bands = 10; + break; + case IVAS_64k: + case IVAS_80k: + hMetadataPMC->num_parameter_bands = 14; + break; + case IVAS_96k: + hMetadataPMC->num_parameter_bands = 20; + break; + } + break; + case MC_LS_SETUP_5_1_4: + switch ( ivas_total_brate ) + { + case IVAS_96k: + hMetadataPMC->num_parameter_bands = 14; + break; + case IVAS_128k: + hMetadataPMC->num_parameter_bands = 20; + break; + } + break; + case MC_LS_SETUP_7_1_4: + switch ( ivas_total_brate ) + { + case IVAS_128k: + hMetadataPMC->num_parameter_bands = 20; + break; + case IVAS_160k: + hMetadataPMC->num_parameter_bands = 20; + break; + } + break; + default: + assert( 0 && "PARAM_MC: channel configuration not supportet!" ); + } + + return; +} diff --git a/lib_com/ivas_mcmasa_com.c b/lib_com/ivas_mcmasa_com.c new file mode 100644 index 0000000000..2441cf7973 --- /dev/null +++ b/lib_com/ivas_mcmasa_com.c @@ -0,0 +1,114 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*--------------------------------------------------------------------------* + * ivas_mcmasa_setNumTransportChannels() + * + * Set number of transport channels in McMASA + *--------------------------------------------------------------------------*/ + +void ivas_mcmasa_setNumTransportChannels( + int16_t *nchan_transport, /* o : Pointer to number of transport channels to be set */ + int16_t *element_mode, /* o : Pointer to element mode to be set */ + const int32_t ivas_total_brate /* i : Total bitrate of IVAS */ +) +{ + if ( ivas_total_brate >= IVAS_48k ) + { + *nchan_transport = 2; + *element_mode = IVAS_CPE_MDCT; + } + else + { + *nchan_transport = 1; + *element_mode = IVAS_SCE; + } + + return; +} + +/*--------------------------------------------------------------------------* + * ivas_mcmasa_set_separate_channel_mode() + * + * Set separate channel parameters in McMASA based on bitrate + *--------------------------------------------------------------------------*/ + +void ivas_mcmasa_set_separate_channel_mode( + uint8_t *separateChannelEnabled, /* o : Pointer to separate channel toggle */ + int16_t *separateChannelIndex, /* o : Pointer to separate channel index */ + const int32_t ivas_total_brate /* i : Total bitrate of IVAS */ +) +{ + if ( ivas_total_brate >= MCMASA_SEPARATE_BRATE ) + { + *separateChannelEnabled = 1; + *separateChannelIndex = 2; /* Center channel */ + } + else + { + *separateChannelEnabled = 0; + *separateChannelIndex = 0; + } + + return; +} + +/*--------------------------------------------------------------------------* + * ivas_mcmasa_mono_brate() + * + * Set SCE bitrate for McMASA mono separated channel + *--------------------------------------------------------------------------*/ + +/*! r: McMASA SCE bitrate */ +int32_t ivas_mcmasa_mono_brate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + /* 25% of total bitrate is used for SCE below 96 kb/s (separated mono channel), otherwise 30% */ + if ( ivas_total_brate < IVAS_96k ) + { + return ( const int32_t )( MCMASA_MONOBITRATIO_64k * ivas_total_brate ); + } + else + { + return ( const int32_t )( MCMASA_MONOBITRATIO * ivas_total_brate ); + } +} diff --git a/lib_com/ivas_mct_com.c b/lib_com/ivas_mct_com.c new file mode 100644 index 0000000000..97d7636a03 --- /dev/null +++ b/lib_com/ivas_mct_com.c @@ -0,0 +1,204 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" +#include + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define MIN_SAFETY_BITS_LFE 30 +#define MIN_SAFETY_BITS_MC 5 + + +/*-------------------------------------------------------------------* + * splitAvailableBitsMCT() + * + * split available TCX bits among channels + *-------------------------------------------------------------------*/ + +void splitAvailableBitsMCT( + void **sts, /* i/o: encoder/decoder state structure */ + const int16_t total_bits, /* i : total number of available bits */ + const int16_t split_ratio[MCT_MAX_CHANNELS], /* i : ratio for splitting the bits */ + const int16_t enc_dec, /* i : encoder or decoder flag */ + const int16_t nchan /* i : number of channels */ +) +{ + int16_t i, k, nSubframes, diff, bits_split, max_chn, tmp; + int16_t *bits_frame_channel; + int16_t min_chan_bits[MCT_MAX_CHANNELS], min_bits_tot, remaining_bits; + int16_t core[MCT_MAX_CHANNELS]; + MCT_CHAN_MODE mct_chan_mode[MCT_MAX_CHANNELS]; + int16_t num_lfe; + int16_t lfe_channel; + + num_lfe = 0; + lfe_channel = -1; + min_bits_tot = 0; + + for ( i = 0; i < nchan; i++ ) + { + if ( enc_dec == ENC ) + { + mct_chan_mode[i] = ( (Encoder_State *) sts[i] )->mct_chan_mode; + core[i] = ( (Encoder_State *) sts[i] )->core; + } + else + { + mct_chan_mode[i] = ( (Decoder_State *) sts[i] )->mct_chan_mode; + core[i] = ( (Decoder_State *) sts[i] )->core; + } + + if ( mct_chan_mode[i] == MCT_CHAN_MODE_LFE ) + { + num_lfe++; + lfe_channel = i; + assert( lfe_channel == LFE_CHANNEL ); + } + } + + + for ( i = 0; i < nchan; i++ ) + { + if ( mct_chan_mode[i] != MCT_CHAN_MODE_LFE && mct_chan_mode[i] != MCT_CHAN_MODE_IGNORE ) + { + min_chan_bits[i] = 0; + + nSubframes = ( core[i] == TCX_20_CORE ) ? 1 : NB_DIV; + + for ( k = 0; k < nSubframes; k++ ) + { + min_chan_bits[i] += SMDCT_MINIMUM_ARITH_BITS + MIN_SAFETY_BITS_MC; + } + min_bits_tot += min_chan_bits[i]; + } + } + + remaining_bits = total_bits - min_bits_tot; + + /*initial value of bits already given*/ + bits_split = 0; + + tmp = 0; + max_chn = 0; + for ( i = 0; i < nchan; i++ ) + { + if ( enc_dec == ENC ) + { + bits_frame_channel = &( (Encoder_State *) sts[i] )->bits_frame_channel; + } + else /* DEC */ + { + bits_frame_channel = &( (Decoder_State *) sts[i] )->bits_frame_channel; + } + + if ( mct_chan_mode[i] != MCT_CHAN_MODE_LFE && mct_chan_mode[i] != MCT_CHAN_MODE_IGNORE ) + { + assert( split_ratio[i] >= 1 && split_ratio[i] < BITRATE_MCT_RATIO_RANGE ); + *bits_frame_channel = split_ratio[i] * remaining_bits / BITRATE_MCT_RATIO_RANGE + min_chan_bits[i]; + bits_split += *bits_frame_channel; + + /*determine channel with most bits (energy)*/ + if ( *bits_frame_channel > tmp ) + { + tmp = *bits_frame_channel; + max_chn = i; + } + } + } + + /*if bits distributed are more than available bits, substract the proportional amount of bits from all channels*/ + if ( bits_split != total_bits ) + { + diff = bits_split - total_bits; + + /*re-count bits distributed to each channel*/ + bits_split = 0; + + for ( i = 0; i < nchan; i++ ) + { + if ( enc_dec == ENC ) + { + bits_frame_channel = &( (Encoder_State *) sts[i] )->bits_frame_channel; + } + else /* DEC */ + { + bits_frame_channel = &( (Decoder_State *) sts[i] )->bits_frame_channel; + } + + if ( mct_chan_mode[i] != MCT_CHAN_MODE_LFE && mct_chan_mode[i] != MCT_CHAN_MODE_IGNORE ) + { + *bits_frame_channel -= diff * split_ratio[i] / BITRATE_MCT_RATIO_RANGE; + *bits_frame_channel = max( min_chan_bits[i], *bits_frame_channel ); + bits_split += *bits_frame_channel; + } + } + } + + /*if there any bits left assign them to the channel with the maximum energy (or more bits)*/ + if ( total_bits != bits_split ) + { + if ( enc_dec == ENC ) + { + bits_frame_channel = &( (Encoder_State *) sts[max_chn] )->bits_frame_channel; + } + else /* DEC */ + { + bits_frame_channel = &( (Decoder_State *) sts[max_chn] )->bits_frame_channel; + } + + *bits_frame_channel += ( total_bits - bits_split ); + + /*if all channels are silent assign bits to ch 0*/ + if ( enc_dec == ENC ) + { + if ( ( (Encoder_State *) sts[max_chn] )->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + assert( bits_split == 0 ); + + ( (Encoder_State *) sts[max_chn] )->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + ( (Encoder_State *) sts[max_chn] )->side_bits_frame_channel = ( ( (Encoder_State *) sts[max_chn] )->core ) * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); + *bits_frame_channel -= ( (Encoder_State *) sts[max_chn] )->side_bits_frame_channel; + } + } + } + + return; +} diff --git a/lib_com/ivas_mdct_core_com.c b/lib_com/ivas_mdct_core_com.c new file mode 100644 index 0000000000..fd80b2d054 --- /dev/null +++ b/lib_com/ivas_mdct_core_com.c @@ -0,0 +1,81 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * ivas_mdct_tcx10_bit_distribution() + * + * + *--------------------------------------------------------------------------*/ + +void ivas_mdct_tcx10_bit_distribution( + int16_t target_bitsTCX10[NB_DIV], /* o : target bit distribution */ + const int16_t nbits_tcx, /* i : TCX bits */ + const int16_t nTnsBitsTCX10[NB_DIV] /* i : TNS bits */ +) +{ + int16_t k; + int16_t min_required_bits = NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS; + + for ( k = 0; k < 2; k++ ) + { + if ( nbits_tcx & 1 ) + { + target_bitsTCX10[k] = nbits_tcx / 2 + ( k == 0 ? 1 : 0 ) - nTnsBitsTCX10[k]; + } + else + { + target_bitsTCX10[k] = nbits_tcx / 2 - nTnsBitsTCX10[k]; + } + } + + if ( target_bitsTCX10[0] < min_required_bits ) + { + /*redistribute bits*/ + target_bitsTCX10[1] -= ( min_required_bits - target_bitsTCX10[0] ); + target_bitsTCX10[0] = min_required_bits; + } + else if ( target_bitsTCX10[1] < min_required_bits ) + { + /*redistribute bits*/ + target_bitsTCX10[0] -= ( min_required_bits - target_bitsTCX10[1] ); + target_bitsTCX10[1] = min_required_bits; + } + + return; +} diff --git a/lib_com/ivas_mdct_imdct.c b/lib_com/ivas_mdct_imdct.c new file mode 100644 index 0000000000..cc343410c2 --- /dev/null +++ b/lib_com/ivas_mdct_imdct.c @@ -0,0 +1,294 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_stat_com.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ +#define IVAS_IMDCT_SCALING_GAIN 2115.165304808f + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_tda() + * + * Time domain alias implementation + *-----------------------------------------------------------------------------------------*/ + +void ivas_tda( + const float *pIn, /* i : time domain buffer of size 2*length */ + float *pOut, /* o : time domain buffer of size length */ + const int16_t length /* i : length of time alised signal buffer */ +) +{ + int16_t i; + int16_t len_by_2 = length >> 1; + + for ( i = 0; i < len_by_2; i++ ) + { + pOut[i] = -pIn[len_by_2 - i - 1] + pIn[len_by_2 + i]; + pOut[len_by_2 + i] = pIn[length * 2 - i - 1] + pIn[length + i]; + } +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_dct_windowing() + * + * Windowing block, input is passed through Fielder window + *-----------------------------------------------------------------------------------------*/ + +void ivas_dct_windowing( + const int16_t fade_len, + const int16_t full_len, + const int16_t dct_len, + const int16_t zero_pad_len, + const float *pWindow_coeffs, + const int16_t frame_len, + float *pOut_buf, + float *pBuffer_prev, + float *pTemp_lfe ) +{ + int16_t i; + int16_t rem_len = 0; + + mvr2r( pBuffer_prev, pOut_buf + zero_pad_len, fade_len ); + + mvr2r( pTemp_lfe, ( pOut_buf + fade_len + zero_pad_len ), dct_len ); + + for ( i = 0; i < zero_pad_len; i++ ) + { + pOut_buf[i] = 0.0f; + } + + mvr2r( ( pOut_buf + full_len - fade_len ), pBuffer_prev, fade_len ); + + for ( i = 0; i < fade_len; i++ ) + { + pOut_buf[zero_pad_len + i] = pOut_buf[zero_pad_len + i] * pWindow_coeffs[i]; + } + + rem_len = full_len - ( zero_pad_len * 3 + fade_len ); + + for ( i = 0; i < rem_len; i++ ) + { + pOut_buf[zero_pad_len * 3 + fade_len + i] = pOut_buf[zero_pad_len * 3 + fade_len + i] * pWindow_coeffs[fade_len - i - 1]; + } + + for ( i = 0; i < frame_len - full_len; i++ ) + { + pOut_buf[full_len + i] = 0.0f; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_mdct() + * + * MDCT implementation + *-----------------------------------------------------------------------------------------*/ + +void ivas_mdct( + const float *pIn, + float *pOut, + const int16_t length ) +{ + const float *pTwid_re, *pTwid_im; + int16_t len_by_2 = length >> 1; + float re[IVAS_480_PT_LEN]; + float im[IVAS_480_PT_LEN]; + float ivas_mdct_scaling_gain = ivas_get_mdct_scaling_gain( len_by_2 ); + int16_t i; + + ivas_get_twid_factors( length, &pTwid_re, &pTwid_im ); + + for ( i = 0; i < len_by_2; i++ ) + { + pOut[i] = -pIn[len_by_2 - i - 1] + pIn[len_by_2 + i]; + pOut[len_by_2 + i] = pIn[length * 2 - i - 1] + pIn[length + i]; + } + + for ( i = 0; i < len_by_2; i++ ) + { + re[i] = -( pOut[2 * i] * pTwid_re[i] + pOut[length - 1 - 2 * i] * pTwid_im[i] ); + im[i] = pOut[length - 1 - 2 * i] * pTwid_re[i] - pOut[2 * i] * pTwid_im[i]; + } + + DoFFT( &re[0], &im[0], len_by_2 ); + + for ( i = 0; i < len_by_2; i++ ) + { + re[i] = re[i] * ivas_mdct_scaling_gain; + im[i] = im[i] * ivas_mdct_scaling_gain; + } + + for ( i = 0; i < len_by_2; i++ ) + { + float tmp; + tmp = re[i] * pTwid_re[i] - im[i] * pTwid_im[i]; + im[i] = im[i] * pTwid_re[i] + re[i] * pTwid_im[i]; + re[i] = tmp; + } + + for ( i = 0; i < len_by_2; i++ ) + { + pOut[length - 2 * i - 1] = re[i]; + pOut[2 * i] = im[i]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_ifft_cplx() + * + * Complex IFFT implementation using DoFFT + *-----------------------------------------------------------------------------------------*/ + +static void ivas_ifft_cplx( + float *re, + float *im, + const int16_t length ) +{ + int16_t i; + float ivas_imdct_one_by_powergain = IVAS_IMDCT_SCALING_GAIN; + /*re-arrange inputs to use fft as ifft */ + re[0] = re[0] * ivas_imdct_one_by_powergain; + im[0] = im[0] * ivas_imdct_one_by_powergain; + + for ( i = 1; i <= length >> 1; i++ ) + { + float tmp = re[length - i] * ivas_imdct_one_by_powergain; + re[length - i] = re[i] * ivas_imdct_one_by_powergain; + re[i] = tmp; + + tmp = im[length - i] * ivas_imdct_one_by_powergain; + im[length - i] = im[i] * ivas_imdct_one_by_powergain; + im[i] = tmp; + } + + DoFFT( re, im, (int16_t) length ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_itda() + * + * Inverse time domain alias implementation + *-----------------------------------------------------------------------------------------*/ + +void ivas_itda( + const float *re, /* i : time alised signal after IDCT */ + float *pOut, /* o : time domain buffer of size 2*length */ + const int16_t length /* i : length of time alised signal buffer */ +) +{ + int16_t i; + int16_t len_by_2 = length >> 1; + + for ( i = 0; i < len_by_2; i++ ) + { + pOut[i] = -re[len_by_2 - i - 1]; + pOut[len_by_2 + i] = re[i]; + pOut[length + i] = re[len_by_2 + i]; + pOut[3 * len_by_2 + i] = re[length - i - 1]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_imdct() + * + * IMDCT implementation + *-----------------------------------------------------------------------------------------*/ + +void ivas_imdct( + const float *pIn, + float *pOut, + const int16_t length ) +{ + const float *pTwid_re, *pTwid_im; + int16_t len_by_2 = length >> 1; + int16_t i; + float re[IVAS_480_PT_LEN]; + float im[IVAS_480_PT_LEN]; + + ivas_get_twid_factors( length, &pTwid_re, &pTwid_im ); + + for ( i = 0; i < len_by_2; i++ ) + { + re[i] = pIn[length - 2 * i - 1] * pTwid_re[i] + pIn[2 * i] * pTwid_im[i]; /*stl_arr_index*/ + im[i] = -pIn[length - 2 * i - 1] * pTwid_im[i] + pIn[2 * i] * pTwid_re[i]; /*stl_arr_index*/ + } + + ivas_ifft_cplx( &re[0], &im[0], len_by_2 ); + + for ( i = 0; i < len_by_2; i++ ) + { + float tmp; + tmp = re[i] * pTwid_re[i] + im[i] * pTwid_im[i]; + im[i] = -re[i] * pTwid_im[i] + im[i] * pTwid_re[i]; + re[i] = tmp; + } + + for ( i = ( len_by_2 - 1 ); i >= 0; i-- ) + { + re[2 * i + 1] = im[( len_by_2 - 1 ) - i]; + re[2 * i] = -re[i]; + } + + for ( i = 0; i < len_by_2; i++ ) + { + pOut[i] = -re[len_by_2 - i - 1]; + pOut[len_by_2 + i] = re[i]; + pOut[length + i] = re[len_by_2 + i]; + pOut[3 * len_by_2 + i] = re[length - i - 1]; + } + + return; +} diff --git a/lib_com/ivas_mdft_imdft.c b/lib_com/ivas_mdft_imdft.c new file mode 100644 index 0000000000..ddabf624f4 --- /dev/null +++ b/lib_com/ivas_mdft_imdft.c @@ -0,0 +1,305 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_rom_com.h" +#include +#include "wmops.h" + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_mdft_twid_factors() + * + * get twiddle tables for MDFT + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_mdft_twid_factors( + const int16_t length, + const float **ppTwid_re, + const float **ppTwid_im ) +{ + switch ( length ) + { + case L_FRAME48k: + *ppTwid_re = &ivas_mdft_coeff_cos_twid_960[0]; + *ppTwid_im = &ivas_mdft_coeff_sin_twid_960[0]; + break; + case L_FRAME32k: + *ppTwid_re = &ivas_mdft_coeff_cos_twid_640[0]; + *ppTwid_im = &ivas_mdft_coeff_sin_twid_640[0]; + break; + case L_FRAME16k: + *ppTwid_re = &ivas_mdft_coeff_cos_twid_320[0]; + *ppTwid_im = &ivas_mdft_coeff_sin_twid_320[0]; + break; + case IVAS_240_PT_LEN: + *ppTwid_re = &ivas_mdft_coeff_cos_twid_240[0]; + *ppTwid_im = &ivas_mdft_coeff_sin_twid_240[0]; + break; + case IVAS_160_PT_LEN: + *ppTwid_re = &ivas_mdft_coeff_cos_twid_160[0]; + *ppTwid_im = &ivas_mdft_coeff_sin_twid_160[0]; + break; + case IVAS_80_PT_LEN: + *ppTwid_re = &ivas_mdft_coeff_cos_twid_80[0]; + *ppTwid_im = &ivas_mdft_coeff_sin_twid_80[0]; + break; + case IVAS_40_PT_LEN: + *ppTwid_re = &ivas_mdft_coeff_cos_twid_40[0]; + *ppTwid_im = &ivas_mdft_coeff_sin_twid_40[0]; + break; + + default: + assert( !"Not supported FFT length!" ); + break; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_imdft_twid_factors() + * + * get twiddle tables for IMDFT + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_imdft_twid_factors( + const int16_t length, + const float **ppTwid ) +{ + switch ( length ) + { + case L_FRAME48k: + *ppTwid = ivas_mdft_coeff_cos_twid_960; + break; + case L_FRAME32k: + *ppTwid = ivas_mdft_coeff_cos_twid_640; + break; + case L_FRAME16k: + *ppTwid = ivas_mdft_coeff_cos_twid_320; + break; + case 240: + *ppTwid = ivas_mdft_coeff_cos_twid_240; + break; + case 160: + *ppTwid = ivas_mdft_coeff_cos_twid_160; + break; + case 80: + *ppTwid = ivas_mdft_coeff_cos_twid_80; + break; + default: + assert( !"Not supported FFT length!" ); + } + + return; +} + + +static void get_one_by_length( + float *one_by_length, + const int16_t length ) +{ + if ( length == L_FRAME48k ) + { + *one_by_length = IVAS_ONE_BY_960; + } + else if ( length == L_FRAME32k ) + { + *one_by_length = IVAS_ONE_BY_640; + } + else if ( length == L_FRAME16k ) + { + *one_by_length = IVAS_ONE_BY_320; + } + else if ( length == IVAS_240_PT_LEN ) + { + *one_by_length = IVAS_ONE_BY_240; + } + else if ( length == IVAS_160_PT_LEN ) + { + *one_by_length = IVAS_ONE_BY_160; + } + else if ( length == IVAS_80_PT_LEN ) + { + *one_by_length = IVAS_ONE_BY_80; + } + else + { + assert( !"Not supported FFT length!" ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_ifft_cplx1() + * + * Complex IFFT implementation using fft() + *-----------------------------------------------------------------------------------------*/ + +static void ivas_ifft_cplx1( + float *re, + float *im, + const int16_t length ) +{ + int16_t i; + float one_by_length, tmp; + + get_one_by_length( &one_by_length, length ); + + /* re-arrange inputs to use fft as ifft */ + re[0] = re[0] * one_by_length; + im[0] = im[0] * one_by_length; + + for ( i = 1; i <= length >> 1; i++ ) + { + tmp = re[length - i] * one_by_length; /*stl_arr_index*/ + re[length - i] = re[i] * one_by_length; /*stl_arr_index*/ + re[i] = tmp; + + tmp = im[length - i] * one_by_length; /*stl_arr_index*/ + im[length - i] = im[i] * one_by_length; /*stl_arr_index*/ + im[i] = tmp; + } + + fft( re, im, length, 1 ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* +* Function ivas_mdft() + +* MDFT implementation +*-----------------------------------------------------------------------------------------*/ + +void ivas_mdft( + const float *pIn, /* i : input time-domain signal */ + float *pOut_re, /* o : Real part of MDFT signal */ + float *pOut_im, /* o : Imag. part of MDFT signal */ + const int16_t input_length, /* i : signal length */ + const int16_t mdft_length /* i : MDFT length */ +) +{ + float re[L_FRAME48k]; + float im[L_FRAME48k]; + int16_t j, len_by_2; + const float *pTwid_re, *pTwid_im; + + len_by_2 = mdft_length >> 1; + + ivas_get_mdft_twid_factors( mdft_length, &pTwid_re, &pTwid_im ); + + if ( mdft_length == input_length ) + { + for ( j = 0; j < mdft_length; j++ ) + { + re[j] = pIn[j] * pTwid_re[j]; + im[j] = -pIn[j] * pTwid_im[j]; + } + } + else + { + for ( j = 0; j < mdft_length; j++ ) + { + re[j] = pIn[j] * pTwid_re[j] - pIn[j + mdft_length] * pTwid_im[j]; + im[j] = -pIn[j] * pTwid_im[j] - pIn[j + mdft_length] * pTwid_re[j]; + } + } + + fft( re, im, mdft_length, 1 ); + + for ( j = 0; j < len_by_2; j++ ) + { + pOut_re[2 * j] = re[j]; + pOut_re[2 * j + 1] = re[mdft_length - j - 1]; + + pOut_im[2 * j] = im[j]; + pOut_im[2 * j + 1] = -im[mdft_length - j - 1]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_imdft() + * + * iMDFT implementation + * out buffer needs to have 2*length worth memory + *-----------------------------------------------------------------------------------------*/ + +void ivas_imdft( + const float *pRe, /* i : Real part of MDFT signal */ + const float *pIm, /* i : Imag. part of MDFT signal */ + float *pOut, /* o : output time-domain signal */ + const int16_t length /* i : signal length */ +) +{ + float *re_tmp = pOut; + float *im_tmp = pOut + length; + float tmp; + int16_t j; + int16_t len_by_2 = length >> 1; + const float *pTwid; + + ivas_get_imdft_twid_factors( length, &pTwid ); + + for ( j = 0; j < len_by_2; j++ ) + { + re_tmp[j] = pRe[2 * j]; + re_tmp[j + len_by_2] = pRe[length - 2 * j - 1]; + + im_tmp[j] = pIm[2 * j]; + im_tmp[j + len_by_2] = -pIm[length - 2 * j - 1]; + } + + ivas_ifft_cplx1( re_tmp, im_tmp, length ); + + for ( j = 0; j < length; j++ ) + { + tmp = re_tmp[j] * pTwid[j] - im_tmp[j] * pTwid[length - j]; + im_tmp[j] = -( re_tmp[j] * pTwid[length - j] + im_tmp[j] * pTwid[j] ); + re_tmp[j] = tmp; + } + + return; +} diff --git a/lib_com/ivas_pca_tools.c b/lib_com/ivas_pca_tools.c new file mode 100644 index 0000000000..ba6fdfea7c --- /dev/null +++ b/lib_com/ivas_pca_tools.c @@ -0,0 +1,1124 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include +#include "ivas_rom_com.h" +#include "wmops.h" +#include "prot.h" + + +/*---------------------------------------------------------------------* + * eye_matrix() + * + *---------------------------------------------------------------------*/ + +void eye_matrix( + float *mat, + const int16_t n, + const float d ) +{ + int16_t i; + + for ( i = 0; i < n * n; i++ ) + { + mat[i] = 0.0f; + } + for ( i = 0; i < n; i++ ) + { + mat[i * n + i] = d; + } + + return; +} + + +/*---------------------------------------------------------------------* + * cov() + * + * Compute covariance of input channels + *---------------------------------------------------------------------*/ + +void cov_subfr( + float **ptr_sig, + float *r, + const int16_t n_channels, + const int16_t len ) +{ + float s; + int16_t j, k, l; + float *t, *tt; + + /* Compute diagonal r[k][k] */ + for ( k = 0; k < n_channels; k++ ) + { + t = &ptr_sig[k][0]; + s = t[0] * t[0]; + for ( j = 1; j < len; j++ ) + { + s += t[j] * t[j]; + } + r[k * n_channels + k] = s; + } + + /* Compute off-diagonal r[k][l] = r[l][k] */ + for ( k = 0; k < ( n_channels - 1 ); k++ ) + { + t = &ptr_sig[k][0]; + for ( l = k + 1; l < n_channels; l++ ) + { + tt = &ptr_sig[l][0]; + s = t[0] * tt[0]; + for ( j = 1; j < len; j++ ) + { + s += t[j] * tt[j]; + } + r[k * n_channels + l] = s; + r[l * n_channels + k] = s; + } + } + + return; +} + + +static void house_refl( + float *px, + const int16_t sizex, + float *pu, + float *normu ) +{ + int16_t i; + + mvr2r( px, pu, sizex ); + ( *normu ) = dotp( pu, pu, sizex ); + ( *normu ) = sqrtf( *normu ); + + if ( ( *normu ) == 0.f ) + { + pu[0] = SQRT2; + } + else + { + float _rcp = 1.f / ( *normu ); + + for ( i = 0; i < sizex; i++ ) + { + pu[i] *= _rcp; + } + if ( pu[0] >= 0.f ) + { + pu[0] += 1; + ( *normu ) = -( *normu ); + } + else + { + pu[0] -= 1; + } + + _rcp = 1.f / sqrtf( fabsf( pu[0] ) ); + + for ( i = 0; i < sizex; i++ ) + { + pu[i] *= _rcp; + } + } + + return; +} + + +static void house_qr( + const float *pA, + float *pQ, + float *pR, + const int16_t n ) +{ + int16_t n_rows = FOA_CHANNELS; + float A[FOA_CHANNELS * FOA_CHANNELS]; + float U[FOA_CHANNELS * FOA_CHANNELS]; + float pu[FOA_CHANNELS]; + float pa[FOA_CHANNELS]; + float pv[FOA_CHANNELS]; + int16_t i, j, k, c, s, r; + + mvr2r( pA, A, FOA_CHANNELS * FOA_CHANNELS ); + set_zero( U, FOA_CHANNELS * FOA_CHANNELS ); + set_zero( pR, FOA_CHANNELS * FOA_CHANNELS ); + + for ( k = 0; k < n_rows; k++ ) + { + for ( i = 0; i < n_rows; i++ ) + { + pa[i] = A[i * n + k]; + } + + house_refl( &pa[k], n_rows - k, pu, &pR[k * n_rows + k] ); + U[k * n_rows + k] = pu[0]; + for ( c = k + 1; c < n_rows; c++ ) + { + for ( i = 0; i < n_rows; i++ ) + { + pa[i] = A[i * n + c]; + } + pv[c - k - 1] = dotp( pu, &pa[k], n_rows - k ); + U[c * n_rows + k] = pu[c - k]; + } + + i = 0; + for ( s = k; s < n_rows; s++ ) + { + j = 0; + for ( r = k + 1; r < n_rows; r++ ) + { + A[s * n_rows + r] -= ( pu[i] * pv[j] ); + j++; + } + i++; + } + + for ( r = k + 1; r < n_rows; r++ ) + { + pR[k * n_rows + r] = A[k * n_rows + r]; + } + } + + eye_matrix( pQ, FOA_CHANNELS, 1.0f ); + + for ( k = FOA_CHANNELS - 1; k >= 0; k-- ) + { + for ( i = 0; i < n_rows; i++ ) + { + pu[i] = U[i * n + k]; + } + + for ( s = k; s < n_rows; s++ ) + { + for ( i = 0; i < n_rows; i++ ) + { + pa[i] = pQ[i * n + s]; + } + pv[s - k] = dotp( &pu[k], &pa[k], n_rows - k ); + } + for ( s = k; s < n_rows; s++ ) + { + for ( r = k; r < n_rows; r++ ) + { + pQ[s * n_rows + r] -= U[s * n_rows + k] * pv[r - k]; + } + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * eig_qr() + * + * Compute eigenvalue decomposition by QR method + *---------------------------------------------------------------------*/ +void eig_qr( + float *A, + const int16_t num_iter, + float *EV, + float *Vals, + const int16_t n ) +{ + int16_t i; + int16_t breakcnd, iter_num; + float Ak[FOA_CHANNELS * FOA_CHANNELS], Qk[FOA_CHANNELS * FOA_CHANNELS], Rk[FOA_CHANNELS * FOA_CHANNELS], D[FOA_CHANNELS * FOA_CHANNELS], d; + + assert( n <= FOA_CHANNELS ); + breakcnd = 1; + iter_num = 0; + + /* check zero matrix */ + d = dotp( A, A, n * n ); + if ( d != 0. ) + { + breakcnd = 0; + } + + /* duplicate */ + mvr2r( A, Ak, n * n ); + + /* identity */ + set_zero( EV, n * n ); + for ( i = 0; i < n; i++ ) + { + EV[i * n + i] = 1.0f; + } + + set_zero( Vals, n ); + + while ( breakcnd == 0 ) + { + iter_num++; + mvr2r( Ak, D, n * n ); + + /* set diagonal */ + for ( i = 0; i < n; i++ ) + { + D[i * n + i] = Vals[i]; + } + + /* stop condition */ + d = dotp( D, D, n * n ); + d = sqrtf( d ); /* Frobenius norm */ + + if ( ( d < 1e-10f ) || ( iter_num >= num_iter ) ) + { + breakcnd = 1; + } + + house_qr( Ak, Qk, Rk, n ); + + matrix_product( Qk, n, n, 0, Rk, n, n, 0, Ak ); + matrix_product( Qk, n, n, 0, EV, n, n, 0, D ); + + mvr2r( D, EV, n * n ); + } + + /* get diagonal */ + for ( i = 0; i < n; i++ ) + { + Vals[i] = Ak[i * n + i]; + } + + return; +} + + +/*---------------------------------------------------------------------* + * exhst_4x4() + * + * Find optimal permutation of eigenvectors + *---------------------------------------------------------------------*/ + +void exhst_4x4( + float *cost_mtx, + int16_t *path, + const int16_t maximize ) +{ + int16_t i, j, k, l; + float opt_val, cost; + + if ( maximize == 0 ) + { + opt_val = 1e30f; + } + else + { + opt_val = -1e30f; + } + + for ( i = 0; i < 1; i++ ) + { + for ( j = 0; j < 4; j++ ) + { + if ( j != i ) + { + for ( k = 0; k < 4; k++ ) + { + if ( ( k != i ) && ( k != j ) ) + { + for ( l = 0; l < 4; l++ ) + { + if ( ( l != i ) && ( l != j ) && ( l != k ) ) + { + cost = cost_mtx[0 * 4 + i] + cost_mtx[1 * 4 + j] + cost_mtx[2 * 4 + k] + cost_mtx[3 * 4 + l]; + if ( ( ( maximize == 0 ) && ( opt_val > cost ) ) || ( ( maximize != 0 ) && ( opt_val < cost ) ) ) + { + opt_val = cost; + path[0] = i; + path[1] = j; + path[2] = k; + path[3] = l; + } + } + } + } + } + } + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * mat2dquat() + * + * Convert 4D matrix -> double quaternion + *---------------------------------------------------------------------*/ +void mat2dquat( + const float *a, + float *ql, + float *qr ) +{ + float AM[16], M2[16], tmp_l, tmp_r, temp, ql_max, qr_max; + int16_t i, j, k, i_ql, i_qr; + + /* compute associate matrix */ + AM[0 * 4 + 0] = ( a[0 * 4 + 0] + a[1 * 4 + 1] + a[2 * 4 + 2] + a[3 * 4 + 3] ) / 4.0f; + AM[1 * 4 + 0] = ( a[1 * 4 + 0] - a[0 * 4 + 1] + a[3 * 4 + 2] - a[2 * 4 + 3] ) / 4.0f; + AM[2 * 4 + 0] = ( a[2 * 4 + 0] - a[3 * 4 + 1] - a[0 * 4 + 2] + a[1 * 4 + 3] ) / 4.0f; + AM[3 * 4 + 0] = ( a[3 * 4 + 0] + a[2 * 4 + 1] - a[1 * 4 + 2] - a[0 * 4 + 3] ) / 4.0f; + AM[0 * 4 + 1] = ( a[1 * 4 + 0] - a[0 * 4 + 1] - a[3 * 4 + 2] + a[2 * 4 + 3] ) / 4.0f; + AM[1 * 4 + 1] = ( -a[0 * 4 + 0] - a[1 * 4 + 1] + a[2 * 4 + 2] + a[3 * 4 + 3] ) / 4.0f; + AM[2 * 4 + 1] = ( -a[3 * 4 + 0] - a[2 * 4 + 1] - a[1 * 4 + 2] - a[0 * 4 + 3] ) / 4.0f; + AM[3 * 4 + 1] = ( a[2 * 4 + 0] - a[3 * 4 + 1] + a[0 * 4 + 2] - a[1 * 4 + 3] ) / 4.0f; + AM[0 * 4 + 2] = ( a[2 * 4 + 0] + a[3 * 4 + 1] - a[0 * 4 + 2] - a[1 * 4 + 3] ) / 4.0f; + AM[1 * 4 + 2] = ( a[3 * 4 + 0] - a[2 * 4 + 1] - a[1 * 4 + 2] + a[0 * 4 + 3] ) / 4.0f; + AM[2 * 4 + 2] = ( -a[0 * 4 + 0] + a[1 * 4 + 1] - a[2 * 4 + 2] + a[3 * 4 + 3] ) / 4.0f; + AM[3 * 4 + 2] = ( -a[1 * 4 + 0] - a[0 * 4 + 1] - a[3 * 4 + 2] - a[2 * 4 + 3] ) / 4.0f; + AM[0 * 4 + 3] = ( a[3 * 4 + 0] - a[2 * 4 + 1] + a[1 * 4 + 2] - a[0 * 4 + 3] ) / 4.0f; + AM[1 * 4 + 3] = ( -a[2 * 4 + 0] - a[3 * 4 + 1] - a[0 * 4 + 2] - a[1 * 4 + 3] ) / 4.0f; + AM[2 * 4 + 3] = ( a[1 * 4 + 0] + a[0 * 4 + 1] - a[3 * 4 + 2] - a[2 * 4 + 3] ) / 4.0f; + AM[3 * 4 + 3] = ( -a[0 * 4 + 0] + a[1 * 4 + 1] + a[2 * 4 + 2] - a[3 * 4 + 3] ) / 4.0f; + + /* compute squared matrix */ + for ( i = 0; i < 16; i++ ) + { + M2[i] = AM[i] * AM[i]; + } + + /* determine (absolute) left and right terms */ + i_ql = 0; + i_qr = 0; + ql_max = -1; + qr_max = -1; + + for ( i = 0; i < 4; i++ ) + { + tmp_l = 0.f; + tmp_r = 0.f; + for ( j = 0; j < 4; j++ ) + { + /* sum over row */ + tmp_l += M2[i * 4 + j]; + /* sum over column */ + tmp_r += M2[j * 4 + i]; + } + + ql[i] = sqrtf( tmp_l ); + if ( ql[i] > ql_max ) + { + ql_max = ql[i]; + i_ql = i; + } + + qr[i] = sqrtf( tmp_r ); + if ( qr[i] > qr_max ) + { + qr_max = qr[i]; + i_qr = i; + } + } + + /* set signs */ + for ( k = 0; k < 4; k++ ) + { + if ( AM[i_ql * 4 + k] < 0 ) + { + qr[k] = -qr[k]; + } + } + + for ( k = 0; k < 4; k++ ) + { + temp = AM[k * 4 + i_qr] * ( ql[k] * qr[i_qr] ); + if ( temp < 0 ) + { + ql[k] = -ql[k]; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * dquat2mat() + * + * Convert double quaternion -> 4D matrix + *---------------------------------------------------------------------*/ +void dquat2mat( + const float *ql, + const float *qr, + float *m ) +{ + float a, b, c, d; + float w, x, y, z; + float aw, ax, ay, az; + float bw, bx, by, bz; + float cw, cx, cy, cz; + float dw, dx, dy, dz; + + a = ql[0]; + b = ql[1]; + c = ql[2]; + d = ql[3]; + w = qr[0]; + x = qr[1]; + y = qr[2]; + z = qr[3]; + aw = a * w; + ax = a * x; + ay = a * y; + az = a * z; + bw = b * w; + bx = b * x; + by = b * y; + bz = b * z; + cw = c * w; + cx = c * x; + cy = c * y; + cz = c * z; + dw = d * w; + dx = d * x; + dy = d * y; + dz = d * z; + m[0] = aw - bx - cy - dz; + m[1] = -ax - bw + cz - dy; + m[2] = -ay - bz - cw + dx; + m[3] = -az + by - cx - dw; + m[4] = bw + ax - dy + cz; + m[5] = -bx + aw + dz + cy; + m[6] = -by + az - dw - cx; + m[7] = -bz - ay - dx + cw; + m[8] = cw + dx + ay - bz; + m[9] = -cx + dw - az - by; + m[10] = -cy + dz + aw + bx; + m[11] = -cz - dy + ax - bw; + m[12] = dw - cx + by + az; + m[13] = -dx - cw - bz + ay; + m[14] = -dy - cz + bw - ax; + m[15] = -dz + cy + bx + aw; + + return; +} + + +/*---------------------------------------------------------------------* + * quat_shortestpath() + * + * Shortest path verification (prior to quaternion interpolation) + *---------------------------------------------------------------------*/ +void quat_shortestpath( + const float *q00, + float *q01, + const float *q10, + float *q11 ) +{ + float d0, d1; + int16_t res, i; + + d0 = dotp( q00, q01, IVAS_PCA_INTERP ); + d1 = dotp( q10, q11, IVAS_PCA_INTERP ); + + res = 0; + if ( ( d0 < 0. ) && ( d1 < 0. ) ) + { + res = 1; + } + else + { + if ( d0 < 0. ) + { + if ( ( -d0 ) > d1 ) + { + res = 1; + } + } + else + { + if ( d1 < 0. ) + { + if ( ( -d1 ) > d0 ) + { + res = 1; + } + } + } + } + + if ( res ) + { + for ( i = 0; i < IVAS_PCA_INTERP; i++ ) + { + q01[i] = -q01[i]; + q11[i] = -q11[i]; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * mat_det4() + * + * Compute determinant of 4D matrix - brute-force version + *---------------------------------------------------------------------*/ + +float mat_det4( float *m ) +{ + float d; + +#define a11 m[0] +#define a12 m[1] +#define a13 m[2] +#define a14 m[3] +#define a21 m[4] +#define a22 m[5] +#define a23 m[6] +#define a24 m[7] +#define a31 m[8] +#define a32 m[9] +#define a33 m[10] +#define a34 m[11] +#define a41 m[12] +#define a42 m[13] +#define a43 m[14] +#define a44 m[15] + + /* 4! = 24 terms -> complexity = 24x(4 INDIRECT + 3 MULT) + 23 ADD */ + d = a11 * a22 * a33 * a44 + a11 * a24 * a32 * a43 + a11 * a23 * a34 * a42 - a11 * a24 * a33 * a42 - a11 * a22 * a34 * a43 - + a11 * a23 * a32 * a44 - a12 * a21 * a33 * a44 - a12 * a23 * a34 * a41 - a12 * a24 * a31 * a43 + a12 * a24 * a33 * a41 + + a12 * a21 * a34 * a43 + a12 * a23 * a31 * a44 + a13 * a21 * a32 * a44 + a13 * a22 * a34 * a41 + a13 * a24 * a31 * a42 - + a13 * a24 * a32 * a41 - a13 * a21 * a34 * a42 - a13 * a22 * a31 * a44 - a14 * a21 * a32 * a43 - a14 * a22 * a33 * a41 - + a14 * a23 * a31 * a42 + a14 * a23 * a32 * a41 + a14 * a21 * a33 * a42 + a14 * a22 * a31 * a43; + + return d; +} + + +static void norm_quat( + float *q ) +{ + float norm_q = 0.0f; + int16_t i; + + for ( i = 0; i < 4; i++ ) + { + norm_q += q[i] * q[i]; + } + + norm_q = 1 / sqrtf( norm_q ); + + for ( i = 0; i < 4; i++ ) + { + q[i] *= norm_q; + } + + return; +} + + +static void quat_nlerp_preproc( + const float *q0, + const float *q1, + const float alpha, + float *q_slerp ) +{ + int16_t i; + + for ( i = 0; i < 4; i++ ) + { + q_slerp[i] = alpha * q0[i] + ( 1.0f - alpha ) * q1[i]; + } + + norm_quat( q_slerp ); + + return; +} + + +void pca_interp_preproc( + const float *prev_ql, + const float *prev_qr, + const float *ql, + const float *qr, + const int16_t len, + float *ql_interp, + float *qr_interp ) +{ + float alpha; + int16_t j; + + for ( j = 0; j < len; j++ ) + { + alpha = (float) j / (float) ( len - 1 ); // the increment can be updated by simple delta + alpha = 0.5f * ( 1.f - cosf( EVS_PI * alpha ) ); + alpha = 1 - alpha; + quat_nlerp_preproc( prev_ql, ql, alpha, &ql_interp[j * IVAS_PCA_INTERP] ); + quat_nlerp_preproc( prev_qr, qr, alpha, &qr_interp[j * IVAS_PCA_INTERP] ); + } + + return; +} + + +static float acos_clip( + float v ) +{ + float ph; + + if ( v > 1.0 ) + { + v = 1.0; + } + if ( v < -1.0 ) + { + v = -1.0; + } + ph = acosf( v ); + + return ph; +} + + +static void sp2cart( + const float ph1, + const float ph2, + const float ph3, + float *q ) +{ + float s1, s2, s1s2; + + s1 = sinf( ph1 ); + s2 = sinf( ph2 ); + s1s2 = s1 * s2; + q[3] = sinf( ph3 ) * s1s2; + q[2] = cosf( ph3 ) * s1s2; + q[1] = cosf( ph2 ) * s1; + q[0] = cosf( ph1 ); + + return; +} + +static int16_t calc_n2( + const float ph1 ) +{ + int16_t n2; + + n2 = (int16_t) roundf( 90.f * sinf( ph1 ) ); + + if ( n2 % 2 == 0 ) + { + n2++; + } + + return n2; +} + + +static int16_t calc_n3( + const float ph1, + const float ph2 ) +{ + int16_t n3; + + n3 = (int16_t) roundf( 180.f * sinf( ph1 ) * sinf( ph2 ) ); + + if ( n3 == 0 ) + { + n3 = 1; + } + else + { + if ( ( n3 % 2 ) == 1 ) + { + n3++; + } + } + + return n3; +} + + +static void q_ang_2surv( + const float a, + const int16_t N, + float *a_q, + int16_t *index ) +{ + float d, v; + int16_t temp; + + if ( N == 1 ) + { + a_q[0] = 0.f; + a_q[1] = 0.f; + index[0] = 0; + index[1] = 0; + return; + } + d = EVS_PI / ( N - 1 ); + if ( a >= EVS_PI ) + { + index[0] = N - 1; + index[1] = N - 2; + } + else + { + if ( a <= 0 ) + { + index[0] = 0; + index[1] = 1; + } + else + { + v = a / d; + index[0] = (int16_t) floorf( v ); + index[1] = (int16_t) ceilf( v ); + + if ( index[0] == index[1] ) + { + /*printf("warning: identical indices\n"); */ + } + else + { + if ( ( v - index[0] ) < ( index[1] - v ) ) + { + temp = index[1]; + index[1] = index[0]; + index[0] = temp; + } + } + } + } + a_q[0] = index[0] * d; + a_q[1] = index[1] * d; + + return; +} + + +static void q_ang_circ( + float a, + const int16_t N, + float *a_q, + int16_t *index ) +{ + float d; + if ( N == 1 ) + { + *a_q = 0.f; + *index = 0; + + return; + } + + d = PI2 / N; + + if ( a >= PI2 ) + { + *index = N; + } + else + { + if ( a <= 0.f ) + { + *index = 0; + } + else + { + *index = (int16_t) roundf( a / d ); + } + } + + if ( *index == N ) + { + *index = 0; + } + + assert( ( *index >= 0 ) && ( *index <= ( N - 1 ) ) ); + *a_q = *index * d; + + return; +} + + +static int16_t sel_q( + const float *q, + float *q_cand, + const int16_t n ) +{ + int16_t i, i_min, j; + float d, d_min, *p, temp; + + i_min = -1; + d_min = 1e30f; + p = q_cand; + + for ( i = 0; i < n; i++ ) + { + d = 0.f; + for ( j = 0; j < 4; j++ ) + { + temp = q[j] - p[j]; + d += temp * temp; + } + + if ( d < d_min ) + { + d_min = d; + i_min = i; + } + p += 4; + } + assert( i_min >= 0 ); + + return i_min; +} + + +static int16_t get_pca_offset_n2( + const int16_t index1 ) +{ + int16_t index2; + + if ( index1 <= IVAS_PCA_N1_EQ ) + { + index2 = ivas_pca_offset_n2[index1]; + } + else + { + index2 = ivas_pca_offset_n2[IVAS_PCA_N1 - 1 - index1]; + } + + return index2; +} + + +/*---------------------------------------------------------------------* + * pca_enc_s3() + * + * + *---------------------------------------------------------------------*/ + +void pca_enc_s3( + float *q, + int32_t *index ) +{ + float ph1, ph2, ph3, r, v; + float ph1_q[2], ph2_q[4], ph3_q[4]; + int16_t n1, n2[2], n3[4]; + int16_t ind1[2], ind2[4], ind3[4], index1, index2, index3; + int16_t i, j; + float q_cand[4 * 4]; + + n1 = IVAS_PCA_N1; + ph1 = acos_clip( q[0] ); + if ( fabsf( fabsf( q[0] ) - 1.0f ) < IVAS_PCA_QUAT_EPS ) + { + if ( q[0] > 0 ) + { + *ph1_q = 0.f; + index1 = 0; + } + else + { + *ph1_q = EVS_PI; + index1 = n1 - 1; + } + + sp2cart( *ph1_q, 0.f, 0.f, q ); + + *index = ivas_pca_offset_index1[index1]; + + return; + } + + q_ang_2surv( ph1, n1, ph1_q, ind1 ); + + r = sqrtf( q[1] * q[1] + q[2] * q[2] + q[3] * q[3] ); + + v = q[1] / r; + ph2 = acos_clip( v ); + + if ( fabs( fabs( v ) - 1.0f ) < IVAS_PCA_QUAT_EPS ) + { + for ( i = 0; i < 2; i++ ) + { + n2[i] = calc_n2( ph1_q[i] ); + if ( v > 0 ) + { + ph2_q[i] = 0; + ind2[i] = 0; + } + else + { + ph2_q[i] = EVS_PI; + ind2[i] = n2[i] - 1; + } + + sp2cart( ph1_q[i], ph2_q[i], 0, &q_cand[4 * i] ); + } + + j = sel_q( q, q_cand, 2 ); + + mvr2r( q_cand + 4 * j, q, 4 ); + index1 = ind1[j]; + index2 = ind2[j]; + + index2 += get_pca_offset_n2( index1 ); + + *index = ivas_pca_offset_index1[index1] + ivas_pca_offset_index2[index2]; + + return; + } + + for ( i = 0; i < 2; i++ ) + { + n2[i] = calc_n2( ph1_q[i] ); + q_ang_2surv( ph2, n2[i], ph2_q + 2 * i, ind2 + 2 * i ); + } + r = sqrtf( q[2] * q[2] + q[3] * q[3] ); + v = q[2] / r; + ph3 = acos_clip( v ); + + if ( q[3] < 0 ) + { + ph3 = PI2 - ph3; + } + + for ( i = 0; i < 4; i++ ) + { + n3[i] = calc_n3( ph1_q[i >> 1], ph2_q[i] ); + q_ang_circ( ph3, n3[i], ph3_q + i, ind3 + i ); + sp2cart( ph1_q[i >> 1], ph2_q[i], ph3_q[i], q_cand + ( 4 * i ) ); + } + + j = sel_q( q, q_cand, 4 ); + + mvr2r( q_cand + 4 * j, q, 4 ); + + index1 = ind1[j >> 1]; + index2 = ind2[j]; + index3 = ind3[j]; + index2 += get_pca_offset_n2( index1 ); + + *index = ivas_pca_offset_index1[index1] + ivas_pca_offset_index2[index2] + index3; + + return; +} + +/*---------------------------------------------------------------------* + * pca_dec_s3() + * + * + *---------------------------------------------------------------------*/ + +void pca_dec_s3( + const int32_t index, + float *q ) +{ + float ph1_q, ph2_q, ph3_q; + int32_t j; + int16_t i; + int16_t n1, n2, n3; + int16_t index1, index2, index3; + float d; + + j = index; + index1 = -1; + for ( i = 0; i < IVAS_PCA_N1; i++ ) + { + if ( j < ivas_pca_offset_index1[i + 1] ) + { + index1 = i; + break; + } + } + + assert( index1 > -1 ); + + n1 = IVAS_PCA_N1; + d = EVS_PI / ( n1 - 1 ); + ph1_q = index1 * d; + n2 = calc_n2( ph1_q ); + + j -= ivas_pca_offset_index1[index1]; + index2 = -1; + + for ( i = 0; i < n2; i++ ) + { + if ( j < ivas_pca_offset_index2[i + get_pca_offset_n2( index1 ) + 1] ) + { + index2 = i; + break; + } + } + + assert( index2 > -1 ); + + if ( n2 == 1 ) + { + ph2_q = 0; + } + else + { + d = EVS_PI / ( n2 - 1 ); + ph2_q = index2 * d; + } + + j -= ivas_pca_offset_index2[index2 + get_pca_offset_n2( index1 )]; + + index3 = (int16_t) j; + + n3 = calc_n3( ph1_q, ph2_q ); + + if ( n3 == 1 ) + { + ph3_q = 0; + } + else + { + d = PI2 / n3; + ph3_q = d * index3; + } + sp2cart( ph1_q, ph2_q, ph3_q, q ); + + return; +} diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h new file mode 100644 index 0000000000..b297a7e727 --- /dev/null +++ b/lib_com/ivas_prot.h @@ -0,0 +1,5474 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_PROT_H +#define IVAS_PROT_H + +#include +#include "options.h" +#include +#include "typedef.h" +#include "stat_enc.h" +#include "stat_dec.h" +#include "stat_com.h" +#include "ivas_stat_enc.h" +#include "ivas_stat_dec.h" +#include "ivas_stat_com.h" +#include "ivas_error_utils.h" + + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * General IVAS prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_enc( + Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ + const int16_t *data, /* i : input signal */ + const int16_t n_samples /* i : number of input samples */ +); + +void stereo_dmx_evs_enc( + STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS, /* i/o: Stereo downmix for EVS encoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + int16_t data[CPE_CHANNELS * L_FRAME48k], /* i/o: input signal */ + const int16_t n_samples /* i : number of input samples */ +); + +/*! r: number of channels to be analysed */ +int16_t getNumChanAnalysis( + Encoder_Struct *st_ivas /* i : IVAS encoder structure */ +); + +void copy_encoder_config( + Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ + Encoder_State *st, /* o : encoder state structure */ + const int16_t flag_all /* i : flag 1==update all, 0=partial update */ +); + +void ivas_write_format( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +void ivas_write_format_sid( + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int16_t element_mode, /* i : element bitrate */ + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +); + +ivas_error create_sce_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t sce_id, /* i : SCE # identifier */ + const int32_t element_brate /* i : element bitrate */ +); + +ivas_error create_cpe_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + const int32_t element_brate /* i : element bitrate */ +); + +ivas_error create_mct_enc( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +ivas_error mct_enc_reconfigure( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const uint16_t b_nchan_change /* i : flag indicating different channel count */ +); + +ivas_error ivas_sba_enc_reconfigure( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +void destroy_sce_enc( + SCE_ENC_HANDLE hSCE /* i/o: SCE encoder structure */ +); + +void destroy_cpe_enc( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +); + +ivas_error ivas_sce_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t sce_id, /* i : SCE # identifier */ + const float data_f[], /* i : input signal for single channel */ + const int16_t input_frame, /* i : input frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +ivas_error ivas_cpe_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + const float data_f_ch0[], /* i : input signal for channel 0 */ + const float data_f_ch1[], /* i : input signal for channel 1 */ + const int16_t input_frame, /* i : input frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +ivas_error ivas_mct_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data[MCT_MAX_CHANNELS][L_FRAME48k], /* i : input signals */ + const int16_t input_frame, /* i : input frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +ivas_error pre_proc_front_ivas( + SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int32_t element_brate, /* i : SCE/CPE element bitrate */ + const int16_t nb_bits_metadata, /* i : number of metadata bits */ + const int16_t input_frame, /* i : frame length */ + const int16_t n, /* i : channel number */ + float old_inp_12k8[], /* o : buffer of old input signal */ + float old_inp_16k[], /* o : buffer of old input signal @16kHz */ + float *Etot, /* o : total energy */ + float *ener, /* o : residual energy from Levinson-Durbin */ + float *relE, /* o : frame relative energy */ + float A[NB_SUBFR16k * ( M + 1 )], /* o : A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* o : weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* o : LP prediction errors */ + float lsp_new[M], /* o : LSPs at the end of the frame */ + float lsp_mid[M], /* o : LSPs in the middle of the frame */ + int16_t *vad_hover_flag, /* o : VAD hangover flag */ + int16_t *attack_flag, /* o : flag signalling attack */ + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ + float old_wsp[], /* o : weighted input signal buffer */ + float pitch_fr[NB_SUBFR], /* o : fractional pitch values */ + float voicing_fr[NB_SUBFR], /* o : fractional pitch gains */ + int16_t *loc_harm, /* o : harmonicity flag */ + float *cor_map_sum, /* o : speech/music clasif. parameter */ + int16_t *vad_flag_dtx, /* o : HE-SAD flag with additional DTX HO */ + float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* o : energy buffer */ + float fft_buff[2 * L_FFT], /* o : FFT buffer */ + const float tdm_A_PCh[M + 1], /* i : unq. LP coeff. of primary channel */ + const float tdm_lsp_new_PCh[M], /* i : unq. LSPs of primary channel */ + const float currFlatness, /* i : flatness parameter */ + const int16_t tdm_ratio_idx, /* i : Current Ratio_L index */ + float fr_bands_LR[CPE_CHANNELS][2 * NB_BANDS], /* i : energy in frequency bands */ + const float Etot_LR[CPE_CHANNELS], /* i : total energy Left & Right channel */ + float lf_E_LR[CPE_CHANNELS][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ + const int16_t localVAD_HE_SAD_LR[CPE_CHANNELS], /* i : HE-SAD flag without hangover, LR channels */ + float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN */ + const int16_t flag_16k_smc, /* i : flag to indicate if the OL SMC is run at 16 kHz */ + const int16_t spar_front_vad_flag, /* i : front-VAD flag to overwrite VAD decision */ + const int16_t spar_force_front_vad, /* i : flag to force VAD decision */ + const int16_t spar_front_vad_dtx_flag /* i : front-VAD DTX flag to overwrite VAD decision*/ +); + +ivas_error pre_proc_ivas( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t last_element_mode, /* i : last element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t input_frame, /* i : frame length */ + float old_inp_12k8[], /* i/o: buffer of old input signal */ + float old_inp_16k[], /* i/o: buffer of old input signal @ 16kHz */ + float **inp, /* o : ptr. to inp. signal in the current frame*/ + float *ener, /* o : residual energy from Levinson-Durbin */ + float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* i/o: LP prediction errors */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + float lsp_mid[M], /* i/o: LSPs in the middle of the frame */ + float *new_inp_resamp16k, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + int16_t *Voicing_flag, /* o : voicing flag for HQ FEC */ + const float old_wsp[], /* i : weighted input signal buffer */ + const int16_t loc_harm, /* i : harmonicity flag */ + const float cor_map_sum, /* i : speech/music clasif. parameter */ + const int16_t vad_flag_dtx, /* i : HE-SAD flag with additional DTX HO */ + const float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ + const float fft_buff[2 * L_FFT], /* i : FFT buffer */ + const int16_t is_mct, /* i : MCT mode flag */ + const int16_t vad_hover_flag, /* i : VAD hangover flag */ + const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ +); + +ivas_error ivas_compute_core_buffers( + Encoder_State *st, /* i/o: encoder state structure */ + float **inp16k_out, /* o : ptr. to inp. signal in the current frame*/ + float *old_inp_16k, /* i/o: buffer of old input signal @ 16kHz */ + float new_inp_resamp16k[], /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + const int16_t input_frame, /* i : frame length */ + const int16_t last_element_mode, /* i : last element mode */ + const int32_t sr_core, /* i : core-coder sampling rate */ + float *ener, /* o : residual energy from Levinson-Durbin */ + float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* i/o: LP prediction errors */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + float lsp_mid[M] /* i/o: LSPs in the middle of the frame */ +); + +/*! r: number of clipped samples */ +uint32_t ivas_syn_output( + float synth[][L_FRAME48k], /* i/o: float synthesis signal */ + const int16_t output_frame, /* i : output frame length (one channel) */ + const int16_t n_channels, /* i : number of output channels */ + int16_t *synth_out /* o : integer 16 bits synthesis signal */ +); + +ivas_error ivas_init_encoder( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + Indice ind_list[][MAX_NUM_INDICES], /* i : indices list */ + Indice ind_list_metadata[][MAX_BITS_METADATA] /* i : indices list metadata */ +); + +void destroy_core_enc( + ENC_CORE_HANDLE hCoreCoder /* i/o: core encoder structure */ +); + +void ivas_destroy_enc( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +ivas_error ivas_init_decoder_front( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error ivas_init_decoder( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error stereo_dmx_evs_init_encoder( + STEREO_DMX_EVS_ENC_HANDLE *hStereoDmxEVS, /* o : Stereo downmix for EVS encoder handle */ + const int32_t input_Fs /* i : input sampling rate */ +); + +void stereo_dmx_evs_close_encoder( + STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS /* i/o: Stereo downmix for EVS encoder handle */ +); + +ivas_error ivas_dec( + Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ + int16_t *data /* o : output synthesis signal */ +); + +ivas_error ivas_dec_setup( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error create_sce_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t cpe_id, /* i : SCE # identifier */ + const int32_t element_brate /* i : element bitrate */ +); + +ivas_error create_cpe_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + const int32_t element_brate /* i : element bitrate */ +); + +ivas_error create_mct_dec( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +); + +ivas_error mct_dec_reconfigure( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const uint16_t b_nchan_change /* i : flag indicating different channel count */ +); + +void destroy_sce_dec( + SCE_DEC_HANDLE hSCE /* i/o: SCE decoder structure */ +); + +void destroy_cpe_dec( + CPE_DEC_HANDLE hCPE /* i/o: CPE decoder structure */ +); + +void ivas_mct_dec_close( + MCT_DEC_HANDLE *hMCT /* i/o: MCT decoder structure */ +); + +ivas_error ivas_sce_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t sce_id, /* i : SCE # identifier */ + float output[1][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +ivas_error ivas_cpe_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + float output[CPE_CHANNELS][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +ivas_error ivas_mct_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output[][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +/*! r: number of channels to be synthesised */ +int16_t getNumChanSynthesis( + Decoder_Struct *st_ivas /* i : IVAS decoder structure */ +); + +void copy_decoder_config( + Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ + Decoder_State *st /* o : decoder state structure */ +); + +void destroy_core_dec( + DEC_CORE_HANDLE hCoreCoder /* i/o: core decoder structure */ +); + +void ivas_destroy_dec( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_initialize_handles_dec( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error ivas_core_enc( + SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + const int16_t n_CoreChannels, /* i : number of core channels to be coded */ + float old_inp_12k8[CPE_CHANNELS][L_INP_12k8], /* i : buffer of old input signal */ + float old_inp_16k[CPE_CHANNELS][L_INP], /* i : buffer of old input signal */ + const float Etot[CPE_CHANNELS], /* i : total energy */ + float ener[CPE_CHANNELS], /* i : residual energy from Levinson-Durbin */ + float A[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes */ + float Aw[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquantized for subframes */ + float epsP[CPE_CHANNELS][M + 1], /* i : LP prediction errors */ + float lsp_new[CPE_CHANNELS][M], /* i : LSPs at the end of the frame */ + float lsp_mid[CPE_CHANNELS][M], /* i : LSPs in the middle of the frame */ + const int16_t vad_hover_flag[CPE_CHANNELS], /* i : VAD hanglover flag */ + int16_t attack_flag[CPE_CHANNELS], /* i : attack flag (GSC or TC) */ + float realBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ + float imagBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ + float old_wsp[CPE_CHANNELS][L_WSP], /* i : weighted input signal buffer */ + const int16_t loc_harm[CPE_CHANNELS], /* i : harmonicity flag */ + const float cor_map_sum[CPE_CHANNELS], /* i : speech/music clasif. parameter */ + const int16_t vad_flag_dtx[CPE_CHANNELS], /* i : HE-SAD flag with additional DTX HO */ + float enerBuffer[CPE_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ + float fft_buff[CPE_CHANNELS][2 * L_FFT], /* i : FFT buffer */ + const int16_t tdm_SM_flag, /* i : channel combination scheme flag */ + const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ +); + +ivas_error ivas_core_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + const int16_t n_channels, /* i : number of channels to be decoded */ + float output[CPE_CHANNELS][L_FRAME48k], /* o : output synthesis signal */ + float outputHB[CPE_CHANNELS][L_FRAME48k], /* o : output HB synthesis signal */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void encod_gen_2sbfr( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : LP coefficients */ + const float *res, /* i : residual signal */ + float *syn, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ +); + +void decod_gen_2sbfr( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const float *Aq, /* i : LP filter coefficient */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* o : excitation for SWB TBE */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ +); + +void synchro_synthesis( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output synthesis signal */ + const int16_t output_frame, /* i : Number of samples */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void stereo_tcx_init_enc( + Encoder_State *st /* i/o: encoder state structure */ +); + +void stereo_tcx_core_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float new_samples_12k8[], /* i : buffer of input signal @12.8 kHz */ + const float new_samples_16k[], /* i : buffer of input signal @16 kHz */ + const float Aw[], /* i : weighted A(z) unquant. for subframes */ + float lsp_new[], /* i : LSPs at the end of the frame */ + float lsp_mid[], /* i : LSPs in the middle of the frame */ + float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ + const int16_t last_element_mode, /* i : last element mode */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void stereo_tcx_core_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const FRAME_MODE frameMode, /* i : Decoder frame mode */ + float *signal_out, /* o : synthesis @internal_Fs */ + float *signal_outFB, /* o : synthesis @output_Fs */ + float pitch_buf[], /* o : floating pitch for each subframe */ + const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ + const int16_t last_element_mode, /* i : last element mode */ + const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i : Stereo CNG handle */ + const int16_t nchan_out /* i : number of output channels */ +); + +void stereo_tcx_init_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t is_mct, /* i : MCT mode flag */ + const int16_t last_element_mode /* i : element mode of previous frame */ +); + +/*! r: S/M decision (0 = speech or noise, 1 = unclear, 2 = music) */ +int16_t ivas_smc_gmm( + Encoder_State *st, /* i/o: encoder state structure */ + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ + const float Etot, /* i : total frame energy */ + const float lsp_new[M], /* i : LSPs in current frame */ + const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ + const float epsP[M + 1], /* i : LP prediciton error */ + const float PS[], /* i : energy spectrum */ + const float non_sta, /* i : unbound non-stationarity */ + const float relE, /* i : relative frame energy */ + int16_t *high_lpn_flag, /* i/o: sp/mus LPN flag */ + const int16_t flag_spitch /* i : flag to indicate very short stable pitch */ +); + +void ivas_smc_mode_selection( + Encoder_State *st, /* i/o: encoder state structure */ + const int32_t element_brate, /* i : element bitrate */ + int16_t smc_dec, /* i : raw decision of the 1st stage classifier */ + const float relE, /* i : relative frame energy */ + const float Etot, /* i : total frame energy */ + int16_t *attack_flag, /* i/o: attack flag (GSC or TC) */ + const float *inp, /* i : input signal */ + const float S_map[], /* i : short-term correlation map */ + const int16_t flag_spitch /* i : flag to indicate very short stable pitch */ +); + +/*! r: S/M decision (0=speech or noise,1=unclear,2=music) */ +int16_t ivas_acelp_tcx20_switching( + Encoder_State *st, /* i/o: encoder state structure */ + const float *inp, /* i : new input signal */ + const float *wsp, /* i : input weighted signal */ + const float non_staX, /* i : unbound non-stationarity for sp/mu clas */ + const float *pitch_fr, /* i : fraction pitch values */ + const float *voicing_fr, /* i : fractional voicing values */ + const float currFlatness, /* i : flatness */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + const float stab_fac, /* i : LP filter stability */ + float *res_cod_SNR_M, + const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ +); + +void ivas_decision_matrix_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int32_t element_brate, /* i : element bitrate */ + const float fft_buff[], /* i : FFT buffer */ + const float enerBuffer[], /* i : energy buffer */ + const int16_t last_element_mode /* i : last element mode */ +); + +void ivas_signalling_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t is_MCT, /* i : MCT enabled */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t tdm_SM_flag, /* i : channel combination scheme flag in TD stereo */ + const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag in TD stereo*/ +); + +void ivas_decision_matrix_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *sharpFlag, /* o : formant sharpening flag */ + int16_t *core_switching_flag, /* o : ACELP->HQ switching frame flag */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t nchan_out /* i : Number of output channels */ +); + +void set_bw_stereo( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structures */ +); + +/*! r: flag indicating whether the coded BW has changed */ +int16_t set_bw_mct( + CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE encoder structures */ + const int16_t nCPE /* i : number of CPEs */ +); + +void acelp_fast( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t cdk_index, /* i : codebook index */ + const float dn_orig[L_SUBFR], /* i : corr. between target and h[]. */ + const float cn[L_SUBFR], /* i : residual after long term prediction */ + const float H[L_SUBFR], /* i : impulse response of weighted synt.filter*/ + float code[L_SUBFR], /* o : algebraic (fixed) codebook excitation */ + float y[], /* o : filtered fixed codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +); + +void dec_acelp_fast( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t cdk_index, /* i : codebook index */ + float code[], /* o : algebraic (fixed) codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +); + +void set_transient_stereo( + CPE_ENC_HANDLE hCPE, /* i : CPE structure */ + float currFlatness[] /* i/o: current flatness */ +); + +void ivas_post_proc( + SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int16_t n, /* i : channel number */ + float synth[], /* i/o: output synthesis signal */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output synthesis signal */ + const int16_t output_frame, /* i : output frame length */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void ivas_renderer_select( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error ivas_mc_enc_config( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +ivas_error ivas_mc_dec_config( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t idx /* i : LS config. index */ +); + +/*! r: MC format mode (MCT, McMASA, ParamMC) */ +MC_MODE ivas_mc_mode_select( + const MC_LS_SETUP mc_ls_setup, /* i : loudspeaker setup (CICP) */ + const int32_t total_brate /* i : IVAS total bitrate */ +); + +/*! r: number of loudspeaker channels */ +int16_t ivas_mc_ls_setup_get_num_channels( + const MC_LS_SETUP mc_ls_setup /* i : loudspeaker setup (CICP) */ +); + +/*! r: output configuration*/ +AUDIO_CONFIG ivas_mc_map_ls_setup_to_output_config( + const MC_LS_SETUP mc_ls_setup /* i : multi channel loudspeaker setup */ +); + +/*! r: multi channel loudspeaker setup */ +MC_LS_SETUP ivas_mc_map_output_config_to_mc_ls_setup( + const AUDIO_CONFIG output_config /* i : output audio configuration */ +); + +/*! r: limiter struct handle */ +IVAS_LIMITER_HANDLE ivas_limiter_open( + const int16_t num_channels, /* i : number of I/O channels */ + const int32_t sampling_rate /* i : sampling rate for processing */ +); + +void ivas_limiter_close( + IVAS_LIMITER_HANDLE* phLimiter /* i/o: pointer to limiter handle, can be NULL */ +); + +void ivas_limiter_dec +( + IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ + float output[MAX_OUTPUT_CHANNELS][L_FRAME48k], /* i/o: input/output buffer */ + const int16_t num_channels, /* i : number of channels to be processed */ + const int16_t output_frame, /* i : number of samples per channel in the buffer */ + const int16_t BER_detect /* i : BER detect flag */ +); + +void limiter_process( + IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ + const int16_t output_frame, /* i : number of samples to be processed per channel in the I/O buffer */ + const float threshold, /* i : signal amplitude above which limiting starts to be applied */ + const int16_t BER_detect, /* i : BER detect flag */ + int16_t *strong_saturation_cnt /* i/o: counter of strong saturations (can be NULL) */ +); + +void smooth_dft2td_transition( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: synthesis @external Fs */ + const int16_t output_frame /* i : output frame length */ +); + +#ifdef DEBUG_MODE_INFO +void output_debug_mode_info_dec( + Decoder_State **sts, + const int16_t n_channels, + const int16_t output_frame, + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k] +); +#endif + +/*! r: flag indicating a valid bitrate */ +int16_t is_IVAS_bitrate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +int16_t is_DTXrate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +int16_t is_SIDrate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +void ivas_mdft( + const float *pIn, /* i : input time-domain signal */ + float *pOut_re, /* o : Real part of MDFT signal */ + float *pOut_im, /* o : Imag. part of MDFT signal */ + const int16_t length, /* i : signal length */ + const int16_t mdft_length /* i : MDFT length */ +); + +void ivas_imdft( + const float *pRe, /* i : Real part of MDFT signal */ + const float *pIm, /* i : Imag. part of MDFT signal */ + float *pOut, /* o : output time-domain signal */ + const int16_t length /* i : signal length */ +); + + +/*----------------------------------------------------------------------------------* + * ISm prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_ism_config( + const int32_t ism_total_brate, /* i : ISms total bitrate */ + const int16_t num_trans_ch, /* i : number of trans channels */ + const int16_t num_obj, /* i : number of objects */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + const int16_t localVAD[MAX_NUM_OBJECTS], /* i : local VAD flag */ + const int16_t ism_imp[], /* i : ISM importance flags */ + int32_t element_brate[], /* o : element bitrate per object */ + int32_t total_brate[], /* o : total bitrate per object */ + int16_t nb_bits_metadata[] /* i/o: number of metadata bits */ +); + +void ivas_ism_reset_metadata( + ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handles */ +); + +void ivas_ism_reset_metadata_API( + ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handles */ +); + +/*! r: index of the winning codeword */ +int16_t ism_quant_meta( + const float val, /* i : scalar value to quantize */ + float *valQ, /* o : quantized value */ + const float borders[], /* i : level borders */ + const int16_t cbsize /* i : codebook size */ +); + +/*! r: dequantized value */ +float ism_dequant_meta( + const int16_t idx, /* i : quantizer index */ + const float borders[], /* i : level borders */ + const int16_t cbsize /* i : codebook size */ +); + +ivas_error set_ism_metadata( + ISM_METADATA_HANDLE hIsmMeta, /* i/o: ISM metadata handle */ + float azimuth, /* i : azimuth */ + float elevation /* i : elevation */ +); + +ivas_error create_ism_metadata_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t n_ISms, /* i : number of objects */ + int32_t element_brate_tmp[] /* o : element bitrate per object */ +); + +ivas_error create_ism_metadata_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t n_ISms, /* i : number of objects */ + int32_t element_brate_tmp[] /* o : element bitrate per object */ +); + +ivas_error ivas_ism_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data[MAX_NUM_OBJECTS][L_FRAME48k], /* i : input signal */ + const int16_t input_frame, /* i : input frame length per channel */ + int16_t *nb_bits_metadata /* i : number of metadata bits */ +); + +ivas_error ivas_ism_metadata_enc( + const int32_t ism_total_brate, /* i : ISms total bitrate */ + const int16_t nchan_transport, /* i : number of transport channels */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + SCE_ENC_HANDLE hSCE[], /* i/o: SCE encoder handles */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t nb_bits_metadata[], /* o : number of metadata bits */ + const int16_t localVAD[], /* i : VAD flag */ + const int16_t ism_mode, /* i : ISM mode */ + const PARAM_ISM_CONFIG_HANDLE hParamIsm /* i : Param ISM Config Handle */ +); + +ivas_error ivas_ism_metadata_dec( + const int32_t ism_total_brate, /* i : ISms total bitrate */ + int16_t *nchan_transport, /* o : number of transport channels */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ + const int16_t bfi, /* i : bfi flag */ + int16_t nb_bits_metadata[], /* o : number of metadata bits */ + ISM_MODE ism_mode, /* i : ISM mode */ + const PARAM_ISM_CONFIG_HANDLE hParamIsm /* i : Param ISM Config Handle */ +); + + +/*----------------------------------------------------------------------------------* + * Parametric ISM prototypes + *----------------------------------------------------------------------------------*/ + +/*! r: ISM format mode */ +ISM_MODE ivas_ism_mode_select( + const int16_t nchan_inp, /* i : number of input objects */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +ivas_error ivas_param_ism_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +void ivas_param_ism_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data[MAX_NUM_OBJECTS][L_FRAME48k], /* i : input signal */ + const int16_t input_frame /* i : input frame length per channel */ +); + +void ivas_param_ism_enc_close( + DIRAC_ENC_HANDLE hDirAC /* i/o: encoder DirAC handle */ + ,const int32_t input_Fs /* i : input sampling_rate */ +); + +void ivas_param_ism_stereo_dmx( + Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ + float data[MAX_NUM_OBJECTS][L_FRAME48k], /* i/o: input signal/stereo dmx */ + const int16_t input_frame /* i : Length of input frame */ +); + +void ivas_param_ism_config( + PARAM_ISM_CONFIG_HANDLE hParamIsm /* i/o: IVAS Param ISM Config Structure */ +); + +ivas_error ivas_ism_enc_config( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +ivas_error ivas_ism_dec_config( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t num_obj /* i : number of objects in the bitstream */ +); + +ivas_error ivas_param_ism_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_param_ism_dec_close( + DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ + const AUDIO_CONFIG output_config /* i : output audio configuration */ +); + +void ivas_param_ism_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ +); + +void ivas_param_ism_params_to_masa_param_mapping( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +/*----------------------------------------------------------------------------------* + * DFT Stereo prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error stereo_dft_enc_create( + STEREO_DFT_ENC_DATA_HANDLE *hStereoDft, /* o : encoder DFT stereo handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t max_bwidth /* i : maximum encoded bandwidth */ +); + +void stereo_dft_enc_reset( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft /* i/o: encoder stereo handle */ +); + +void stereo_enc_itd_init( + ITD_DATA_HANDLE hItd /* i/o: encoder ITD handle */ +); + +void stereo_dft_enc_update( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ + const int16_t max_bwidth /* i : maximum encoded bandwidth */ +#ifdef DEBUG_MODE_DFT + , + const int16_t res_code_bits /* i : bits for residual coding */ +#endif +); + +void stereo_dft_enc_destroy( + STEREO_DFT_ENC_DATA_HANDLE *hStereoDft /* i/o: encoder DFT stereo handle */ +); + +void stereo_dft_enc_analyze( + Encoder_State **sts, /* i/o: encoder state structure */ + const int16_t n_channels, /* i : number of input channels */ + const int16_t input_frame, /* i : input frame length */ + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: encoder MDCT stereo handle */ + float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC], /* o : DFT buffers */ + float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ +); + +float stereo_dft_enc_synthesize( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ + float *output, /* o : output synthesis */ + const int16_t chan, /* i : channel number */ + const int32_t input_Fs, /* i : input sampling rate */ + const int32_t output_sampling_rate, /* i : output sampling rate */ + const int16_t L_frame /* i : frame length at internal Fs */ +); + +void stereo_dft_enc_process( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int16_t input_frame /* i : input frame length */ +); + +void stereo_dft_enc_res( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ + const float *input_8k, /* i : input buffer sampled at 8kHz */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t *nb_bits, /* o : number of bits written */ + const int16_t max_bits +); + +void stereo_dft_enc_write_BS( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + int16_t *nb_bits /* o : number of bits written */ +); + +void stereo_dtf_cng( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ + const int16_t output_frame /* i : output frame size */ +); + +void stereo_dft_cng_side_gain( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo encoder handle */ + STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ + const int32_t core_brate, /* i : core bitrate */ + const int32_t last_core_brate, /* i : last core bitrate */ + const int16_t bwidth /* i : audio band-width */ +); + +void stereo_dft_quantize_res_gains( + const float *g, + const float *r, + float *gq, + float *rq, + int16_t *ig, + int16_t *ir +); + +void stereo_dft_dequantize_itd( + int16_t *ind, + float *out, + const int32_t output_Fs +); + +void stereo_dft_enc_sid_calc_coh( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ + float coh_crossfade[STEREO_DFT_BAND_MAX / 2], /* i/o: Coherence crossfade memory */ + int16_t *td_active, /* i/o: TD stereo mode indicator */ + int16_t *first_SID, /* i/o: First SID indicator */ + float *cohBand /* i/o: Coherence per band */ +); + +void stereo_dft_enc_sid_coh( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + float *mem_cohBand, /* i/o: Coherence memory */ + const int16_t nbands, /* i : number of DFT stereo bands */ + int16_t *nb_bits, /* i/o: number of bits written */ + float *cohBand /* i/o: Coherence per band */ +); + +void stereo_dft_dec_sid_coh( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t nbands, /* i : number of DFT stereo bands */ + float *coh, /* i/o: coherence */ + int16_t *nb_bits /* i/o: number of bits read */ +); + +ivas_error stereo_dft_dec_create( + STEREO_DFT_DEC_DATA_HANDLE *hStereoDft, /* i/o: decoder DFT stereo handle */ + const int32_t element_brate, /* i : element bitrate */ + const int32_t output_Fs, /* i : output sampling rate */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void stereo_dft_dec_reset( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: decoder DFT stereo handle */ +); + +void stereo_dft_dec_update( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const int16_t output_frame, /* i : output frame length */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void stereo_dft_dec_destroy( + STEREO_DFT_DEC_DATA_HANDLE *hStereoDft /* i/o: decoder DFT stereo handle */ +); + +void stereo_dft_dec_analyze( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const float *input, /* i : input signal */ + float out_DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ + const int16_t chan, /* i : channel number */ + const int16_t input_frame, /* i : input frame size */ + const int16_t output_frame, /* i : output frame size */ + const DFT_STEREO_DEC_ANA_TYPE ana_type, /* i : signal type to analyze */ + const int16_t k_offset, /* i : offset of DFT */ + const int16_t delay /* i : delay in samples for input signal */ +); + +void stereo_dft_dec_synthesize( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i : DFT buffers */ + const int16_t chan, /* i : channel number */ + float output[L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame /* i : output frame length */ +); + +void stereo_dft_dec( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + Decoder_State *st0, /* i/o: decoder state structure */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ + float *input_mem, /* i/o: mem of buffer DFT analysis */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void stereo_dft_res_ecu( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ + float *pDFT_RES, /* i/o: residual signal */ + float *const DFT_PRED_RES, /* i/o: residual prediction signal */ + const int16_t k, /* i : Subframe index */ + const int16_t output_frame, /* i : Output frame length */ + const int16_t prev_bfi, /* i : Previous BFI */ + const float dmx_nrg, /* i : Down-mix energy */ + int16_t *num_plocs, /* i/o: Number of peak locations */ + int16_t *plocs, /* i/o: Peak locations (bin) */ + float *plocsi, /* i/o: Peak locations (fractional) */ + float *input_mem /* o : Residual DFT buffer input mem */ +); + +void stereo_dft_res_subst_spec( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ + float *pDFT_RES, /* i/o: residual signal */ + const float *const DFT_PRED_RES, /* i : residual prediction signal */ + const int16_t time_offs, /* i : Time offset for phase adjustm. */ + const int16_t L_res, /* i : bandwidth of residual signal */ + const int16_t L_ana, /* i : Length of FFT analysis */ + const int16_t k, /* i : Subframe index */ + int16_t *num_plocs, /* i/o: Number of peak locations */ + int16_t *plocs, /* i/o: Peak locations (bin) */ + float *plocsi, /* i/o: Peak locations (fractional) */ + const int16_t analysis_flag /* i : Flag for running peak analysis */ +); + +void stereo_dft_res_ecu_burst_att( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ + float *pDFT_RES, /* i/o: residual signal /att. residual */ + const float dmx_nrg, /* i : dmx energy of current frame */ + const int16_t L_res, /* i : Bandwidth of residual */ + const int16_t L_ana /* i : Length of FFT analysis */ +); + +/*! r: total energy of downmix with maximum swb bandwidth max */ +float stereo_dft_dmx_swb_nrg( + const float *dmx_k0, /* i : first subframe spectrum */ + const float *dmx_k1, /* i : second subframe spectrum */ + const int16_t frame_length /* i : frame lanegth */ +); + +int16_t stereo_dft_sg_recovery( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: Decoder DFT stereo handle */ +); + +void stereo_dft_dec_res( + CPE_DEC_HANDLE hCPE, /* i/o: decoder CPE handle */ + float res_buf[STEREO_DFT_BUF_MAX], /* i : residual buffer */ + float *output /* o : output frame */ +); + +/*! r: Decision to enable or disable BPF on DFT stereo residual */ +int16_t res_bpf_adapt( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo decoder handle */ + const float *bpf_error_signal_8k, /* i : BPF modification signal */ + float res_buf[STEREO_DFT_BUF_MAX] /* i : residual buffer */ +); + +void bpf_pitch_coherence( + Decoder_State *st, /* i/o: decoder state structure */ + const float pitch_buf[] /* i : pitch for each subframe [0,1,2,3] */ +); + +void stereo_dft_dec_read_BS( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int32_t element_brate, /* i : element bitrate */ + int32_t *total_brate, /* o : total bitrate */ + Decoder_State *st, /* i/o: decoder state structure */ + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const int16_t bwidth, /* i : bandwidth */ + const int16_t output_frame, /* i : output frame length */ + float res_buf[STEREO_DFT_BUF_MAX], /* o : residual buffer */ + int16_t *nb_bits, /* o : number of bits read */ + float *coh, /* i/o: Coherence */ + const int16_t ivas_format /* i : ivas format */ +); + +void stereo_dft_dec_smooth_parameters( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const int16_t prev_sid_nodata /* i : Previous SID/No data indicator */ +); + +void stereo_dft_generate_res_pred( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const float samp_ratio, /* i : sampling ratio */ + float *pDFT_DMX, /* i : downmix signal */ + float *DFT_PRED_RES, /* o : residual prediction signal */ + float *pPredGain, /* i : residual prediction gains */ + const int16_t k, /* i : subframe index */ + float *ap_filt_DMX, /* i : enhanced stereo filling signal */ + int16_t *stop, /* o : last FD stereo filling bin */ + const int16_t bfi /* i : BFI flag */ +); + +void stereo_dft_dec_core_switching( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[], /* i/o: synthesis @internal Fs */ + float synth[], /* i : synthesis @output Fs */ + float hb_synth[], /* i/o: hb synthesis */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ + const int16_t output_frame, /* i : output frame length */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t sba_dirac_stereo_dtx_flag /* i : DTX indicator for SBA DirAC stereo */ +); + +void init_basic_allpass( + basic_allpass_t *ap, /* i/o: basic allpass structure */ + const float *gains, /* i : allpass filter gains */ + const int16_t *delays /* i : allpass filter delays */ +); + +void filter_with_allpass( + const float *sig, /* i : allpass input signal */ + float *out, /* o : filtered output */ + const int16_t len, /* i : length of input */ + basic_allpass_t *ap /* i/o: basic allpass structure */ +); + +/*! r: used GR order */ +int16_t write_bitstream_adapt_GR( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t Indice, /* i : identifier for bitstream index */ + const int16_t *in, /* i : values to be written in bitstream */ + const int16_t len, /* i : values vector length */ + const int16_t GR_ord, /* i : GR order to be used */ + const int16_t sp_aud_decision /* i : speech/music 0/1 */ +); + +/*! r: used GR order */ +int16_t adapt_GR_ief( + const int16_t *in, /* i : vector to encode */ + int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ + const int16_t *prev, /* i : previous frame data */ + const int16_t len, /* i : input vector length */ + const int16_t no_symb, /* i : number of symbols */ + int16_t *nbits, /* o : number of used bits */ + int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ + const int16_t *map0, /* i : mapping array */ + const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ + int16_t *nbits_diff, /* o : number bits in diff encoding */ + const int16_t side_gain_counter, /* i : number of frames since last abs coding */ + float *side_gain_bitdiff_lp, /* i/o: LP-filtered bit difference between abs/diff */ + const int16_t try_diff /* i : diff coding allowed 1/0 */ +); + +/*! r: used GR order */ +int16_t adapt_GR_rpg1_ief( + const int16_t *in, /* i : res pred gains input vector */ + int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ + const int16_t *prev, /* i : previous frame data */ + const int16_t len, /* i : input vector length */ + const int16_t no_symb, /* i : number of symbols */ + int16_t *nbits, /* o : number of used bits */ + int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ + const int16_t *maps, /* i : mapping array */ + int16_t *nbits_diff, /* o : estimated no of bits for differential encoding */ + const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ + const int16_t try_diff /* i : diff coding allowed 1/0 */ +); + +/*! r: number of bits written */ +int16_t write_GR1( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : input vector */ + const int16_t len /* i : vector length */ +); + +/*! r: number of bits written */ +int16_t write_bitstream_GR( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : input date to be written */ + const int16_t len, /* i : input data length */ + const int16_t GR_ord /* i : GR order to be used */ +); + +/*! r: number of bits read */ +int16_t read_flag_EC_DFT( + const uint16_t *bit_stream, /* i : bitstream */ + int16_t *flag /* o : flag value */ +); + +/*! r: number of bits read */ +int16_t read_BS_GR( + const uint16_t *bit_stream, /* i : bitstream to be read */ + const int16_t nb, /* i : starting point in bitstream */ + int16_t *ind1, /* o : data array read */ + const int16_t len, /* i : number of params to be read */ + int16_t *GR_ord /* o : GR order to be used */ +); + +/*! r: number of bits read */ +int16_t read_BS_adapt_GR_rpg( + const uint16_t *bit_stream, /* i : bitstream to be read */ + const int16_t nb, /* i : starting point in bitstream */ + int16_t *ind1_pred, /* o : decoded res pred gains */ + const int16_t start, /* i : starting subband */ + const int16_t total_no, /* i : number of params to be read */ + int16_t *GR_ord /* o : GR order - read */ +); + +/*! r: value read on nbits from bitstream */ +int16_t get_value( + const uint16_t *bit_stream, /* i : bitstream */ + const int16_t nbits /* i : number of bits to be read */ +); + +/*! r: number of bits read */ +int16_t read_itd( + Decoder_State *st, /* i : decoder state */ + int16_t *pI /* o : decoded ITD value */ +); + +/*! r: number of bits read */ +int16_t read_BS_adapt_GR_sg( + const uint16_t *bit_stream, /* i : bitstream to be read */ + const int16_t nb, /* i : starting position to be read */ + int16_t *ind1, /* o : decoded side gain values */ + const int16_t len, /* i : number of params to be read */ + int16_t *GR_ord, /* o : GR order to be used */ + const int16_t *map0 /* i : mapping array for side gains */ +); + +void stereo_dft_hybrid_ITD_flag( + STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ + const int32_t input_Fs /* i : CPE element sampling rate */ +); + +void stereo_dft_enc_compute_itd( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + float *DFT_L, + float *DFT_R, + const int16_t k_offset, + const int16_t input_frame, + float *bin_nrgL, + float *bin_nrgR +); + +void stereo_dft_config( + STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ + const int32_t brate, /* i : IVAS/CPE/nominal total bitrate */ + int16_t *bits_frame_nominal, /* o : primary channel nominal bits per frame */ + int16_t *bits_frame_nominal_2 /* o : secondary channel nominal bits per frame*/ +); + +int16_t stereo_dft_band_config( + int16_t *band_limits, /* o : DFT band limits */ + const int16_t band_res, /* i : DFT band resolution */ + const int16_t NFFT, /* i : analysis/synthesis window length */ + const int16_t enc_dec /* i : flag to indicate enc vs dec */ +); + +void stereo_td_itd( + ITD_DATA *hITD, /* i/o: ITD data structure */ + float input_mem_itd[CPE_CHANNELS][STEREO_DFT_OVL_MAX], /* o : ITD memory (only used in DFT Stereo) */ + const int16_t hybrid_itd_flag, /* i : flag for hybrid TD/FD ITD processing */ +#ifdef DEBUG_MODE_DFT + const int16_t itd_mode, /* i : main ITD processing flag */ +#endif + const int16_t dft_ovl, /* i : size of DFT overlap */ + Encoder_State **sts, /* i/o: Encoder state structure */ + const int16_t input_frame, /* i : input frame length */ + float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ +); + +void stereo_dft_dmx_out_reset( + STEREO_DFT_DMX_DATA_HANDLE hStereoDftDmx /* i/o: DFT stereo DMX decoder */ +); + +void stereo_dft_unify_dmx( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder stereo handle */ + Decoder_State *st0, /* i/o: decoder state structure */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ + float *input_mem, /* i/o: mem of buffer DFT analysis */ + const int16_t prev_sid_nodata /* i : Previous SID/No data indicator */ +); + +void add_HB_to_mono_dmx( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[L_FRAME48k], /* i/o: output synthesis */ + float outputHB[L_FRAME48k], /* i : HB synthesis */ + const int16_t last_core, /* i : last core, primary channel */ + const int16_t output_frame /* i : frame length */ +); + +/*----------------------------------------------------------------------------------* + * Range Coder prototypes + *----------------------------------------------------------------------------------*/ + +void rc_uni_enc_init( + RangeUniEncState *rc_st_enc /* i/o: RC state handle */ +); + +void rc_uni_enc_encode_fast( + RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ + const uint16_t cum_freq, /* i : Cumulative frequency up to symbol */ + const uint16_t sym_freq, /* i : Symbol frequency */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +); + +void rc_uni_enc_encode_symbol_fastS( + RangeUniEncState *rc_st_enc, /* i/o: Encoder state */ + const uint16_t symbol, /* i : Symbol to encode */ + const uint16_t cum_freq[], /* i : Cumulative frequency up to symbol */ + const uint16_t sym_freq[], /* i : Symbol frequency */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +); + +void rc_uni_enc_encode_bits( + RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ + const uint16_t value, /* i : Value to encode */ + const int16_t bits /* i : Number of bits */ +); + +/*! r: Total number of bits produced */ +int16_t rc_uni_enc_virtual_finish( + RangeUniEncState *rc_st_enc /* i : RC state handle */ +); + +/*! r: Total number of bits produced */ +int16_t rc_uni_enc_finish( + RangeUniEncState *rc_st_enc /* i/o: RC state handle */ +); + +void rc_uni_dec_init( + RangeUniDecState *rc_st_dec, /* i/o: RC state handle */ + uint16_t *bit_buffer, /* i : Bit buffer */ + const int16_t max_available_bits /* i : Total maximum bits available */ +); + +/*! r: Read symbol */ +uint16_t rc_uni_dec_read_symbol_fastS( + RangeUniDecState *rc_st_dec, /* i/o: Decoder State */ + const uint16_t cum_freq_table[], /* i : Cumulative frequency up to symbol */ + const uint16_t sym_freq_table[], /* i : Symbol frequency */ + const uint16_t alphabet_size, /* i : Number of symbols in the alphabet */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +); + +/*! r: Read bit */ +uint16_t rc_uni_dec_read_bit( + RangeUniDecState *rc_st_dec /* i/o: RC state handle */ +); + +/*! r: Read bit */ +uint16_t rc_uni_dec_read_bit_prob_fast( + RangeUniDecState *rc_st_dec, /* i/o: RC state handle */ + const int16_t freq0, /* i : Frequency for symbol 0 */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +); + +/*! r: Read bits */ +uint16_t rc_uni_dec_read_bits( + RangeUniDecState *rc_st_dec, /* i/o: RC state handle */ + const int16_t bits /* i : Number of bits */ +); + +/*! r: Total number of bits consumed */ +int16_t rc_uni_dec_virtual_finish( + RangeUniDecState *rc_st_dec /* i/o: RC state handle */ +); + +/*! r: Total number of bits consumed */ +int16_t rc_uni_dec_finish( + RangeUniDecState *rc_st_dec /* i/o: RC state handle */ +); + + +/*----------------------------------------------------------------------------------* + * ECLVQ Stereo prototypes + *----------------------------------------------------------------------------------*/ + +float ECSQ_dequantize_gain( + const int16_t index +); + +void ECSQ_quantize_vector( + const float *input, + const float global_gain, + const int16_t N, + int16_t *output +); + +float ECSQ_compute_optimal_gain( + const float *input, + const int16_t N, + const int16_t *output +); + +void ECSQ_init_instance( + ECSQ_instance *ecsq_inst, + const int16_t config_index, + void *ac_handle +); + +int32_t ECSQ_encode_target_SNR( + ECSQ_instance *ecsq_inst, + const float *input, + const int16_t N, + const float target_SNR, + const int16_t max_bits, + float *output, + int16_t *global_gain_index_output +); + +void ECSQ_decode( + ECSQ_instance *ecsq_inst, + const int16_t N, + int16_t *output +); + +void ECSQ_dequantize_vector( + const int16_t *input, + const float global_gain, + const int16_t N, + float *output +); + + +/*----------------------------------------------------------------------------------* + * ICA Stereo prototypes + *----------------------------------------------------------------------------------*/ + +void stereo_tca_init_enc( + STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA encoder handle */ + const int32_t input_Fs /* i : input sampling frequency */ +); + +void stereo_tca_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int16_t input_frame /* i : length of a frame per channel */ +); + +void stereo_tca_init_dec( + STEREO_TCA_DEC_HANDLE hStereoTCA /* i/o: Stereo TCA handle */ +); + +void stereo_tca_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float synth[CPE_CHANNELS][L_FRAME48k], /* i/o: output synth */ + const int16_t output_frame /* i : length of a frame per channel */ +); + +void stereo_tca_scale_R_channel( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[L_FRAME48k], /* i/o: output synthesis, R channel */ + const int16_t output_frame /* i : frame length */ +); + +void adjustTargetSignal( + float *target, + const int16_t prevShift, + const int16_t currShift, + const int16_t L_shift_adapt, + const int16_t method +); + + +/*----------------------------------------------------------------------------------* + * IC-BWE Stereo prototypes + *----------------------------------------------------------------------------------*/ + +void stereo_icBWE_init_enc( + STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ +); + +void spectral_balancer( + float *signal, + float *mem, + const int16_t lg, + const int16_t coeff_set +); + +void stereo_icBWE_preproc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int16_t input_frame, /* i : input frame length */ + float shb_speech_nonref[] /* o : SHB speech non-ref channel */ +); + +void stereo_icBWE_enc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const float shb_speech_ref[], /* i : SHB speech ref channel */ + float shb_speech_nonref[], /* i/o: SHB speech non-ref channel */ + const float *voice_factors /* i : voicing factors */ +); + +void stereo_icBWE_init_dec( + STEREO_ICBWE_DEC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ +); + +void stereo_icBWE_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float *synthRef, /* i/o: Reference channel HB synthesis at output Fs */ + float *synth, /* o : Non reference channel HB synthesis at output Fs */ + const float *fb_synth_ref, /* i : ref. high-band synthesis 16-20 kHz */ + const float *voice_factors, /* i : voicing factors */ + const int16_t output_frame /* i : frame length */ +); + +void stereo_icBWE_decproc( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output symthesis */ + float outputHB[CPE_CHANNELS][L_FRAME48k], /* i : HB synthesis */ + const int16_t last_core, /* i : last core, primary channel */ + const int16_t last_bwidth, /* i : last bandwidth */ + const int16_t output_frame /* i : frame length */ +); + + +/*----------------------------------------------------------------------------------* + * Stereo classifiers prototypes + *----------------------------------------------------------------------------------*/ + +/*! r: element mode */ +int16_t select_stereo_mode( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int32_t ivas_total_brate /* i : IVAS total brate */ +); + +void stereo_classifier_init( + STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier structure */ +); + +void stereo_classifier_features( + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + const int16_t idchan, /* i : channel ID */ + const int16_t element_mode, /* i : element mode */ + const int16_t vad_flag, /* i : VAD flag */ + const float lsf_new[], /* i : LSFs at the end of the frame */ + const float epsP[], /* i : LP analysis residual energies for each iteration*/ + const int16_t pitch[], /* i : open-loop pitch values for quantiz. */ + const float voicing[], /* i : OL maximum normalized correlation */ + const float cor_map_sum, /* i : speech/music clasif. parameter */ + const float non_staX, /* i : unbound non-stationarity for sp/mu clas. */ + const float sp_div, /* i : spectral diversity feature */ + const int16_t clas /* i : signal class */ +); + +void unclr_classifier_dft( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +); + +void unclr_classifier_td( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +); + +void xtalk_classifier_dft( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int16_t itd, /* i : ITD from DFT stereo - used as a feature */ + const float gcc_phat[] /* i : GPHAT cross-channel correlation function */ +); + +void xtalk_classifier_td( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +); + + +/*----------------------------------------------------------------------------------* + * TD Stereo prototypes + *----------------------------------------------------------------------------------*/ + +void stereo_td_init_enc( + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ + const int16_t last_element_mode /* i : last element mode */ +); + +ivas_error stereo_set_tdm( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int16_t input_frame /* i : input frame length per channel */ +); +void stereo_tdm_prep_dwnmx ( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const float *input1, /* i : right channel input */ + const int16_t input_frame /* i : frame lenght */ +); +int16_t stereo_tdm_ener_analysis( + CPE_ENC_HANDLE hCPE, /* i : CPE structure */ + const int16_t input_frame, /* i : Number of samples */ + int16_t *tdm_SM_or_LRTD_Pri, /* o : channel combination scheme flag in TD stereo OR LRTD primary channel */ + int16_t *tdm_ratio_idx_SM /* o : TDM ratio index for SM mode */ +); + +void stereo_tdm_downmix( + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i : TD stereo IVAS encoder structure */ + float *Left_in, /* i/o: Left channel -> Primary channel */ + float *Right_in, /* i/o: Right channel -> Secondary channel */ + const int16_t input_frame, /* i : Number of samples */ + const int16_t tdm_ratio_idx, /* i : TDM ratio index */ + const int16_t tdm_SM_flag, /* i : channel combination scheme flag */ + const int16_t tdm_ratio_idx_SM /* i : TDM ratio index for SM mode */ +); + +void stereo_td_init_dec( + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ + const int16_t last_element_mode /* i : last element mode */ +); + +void tdm_configure_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + int16_t *tdm_ratio_idx, /* o : ratio index */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +void tdm_upmix_plain( + float Left[], /* o : left channel */ + float Right[], /* o : right channel */ + const float PCh_2_L[], /* i : primary channel */ + const float SCh_2_R[], /* i : secondary channel */ + const float LR_ratio, /* i : mixing ratio */ + const float inv_den_LR_ratio, /* i : inverse mixing ration */ + const int16_t start_index, /* i : start index */ + const int16_t end_index, /* i : end index */ + const int16_t plus_minus_flag /* i : plus/minus flag */ +); + +void stereo_tdm_combine( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float *PCh_2_L, /* i/o: Primary channel -> output as L channel */ + float *SCh_2_R, /* i/o: Seconday channel -> output as R channel */ + const int16_t output_frame, /* i : Number of samples */ + const int16_t flag_HB, /* i : flag to distinguish between core (0) and HB (1) synthesis */ + const int16_t tdm_ratio_idx /* i : TDM ratio index */ +); + +/*! r: replication decision; 1 = Use old LP */ +int16_t tdm_lp_comparison( + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + Encoder_State *st, /* i/o: Encoder structure */ + const float *speech, /* i : Current speech frame */ + const float *A_Pch, /* i : primary channel LP coefficients */ + const float *A_SCh, /* i : secondary channel LP coefficients */ + const int16_t m, /* i : filter length */ + const float *isp_PCh, /* i : primary channel LSPs */ + const float *isp_SCh, /* i : secondary channel LSPs */ + const int16_t L_frame, /* i : frame length */ + const int32_t element_brate_wo_meta /* i : element bitrate without metadata */ +); + +/*! r: replication decision; 1 = Use old LP */ +void tdm_ol_pitch_comparison( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + float pitch_fr[CPE_CHANNELS][NB_SUBFR], /* i/o: fractional pitch values */ + float voicing_fr[CPE_CHANNELS][NB_SUBFR] /* i/o: fractional pitch gains */ +); + +void tdm_configure_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag in TD stereo OR LRTD primary channel */ + const int16_t tdm_ratio_idx, /* i : ratio index */ + const int16_t tdm_ratio_idx_SM, /* i : ratio index in SM mode */ + const int16_t attack_flag, /* i : Primary channel attack flag */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +ivas_error signalling_enc_secondary( + Encoder_State *st, /* i/o: Encoder structure */ + const int16_t tdm_SM_flag, /* i : channel combination scheme flag */ + const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag */ +); + +void tdm_bit_alloc( + const int32_t element_brate_wo_meta, /* i : element bitrate without metadata */ + const int16_t tdm_lp_reuse_flag, /* i : LPC reusage flag */ + int32_t *total_brate_pri, /* o : Allocated primary channel bitrate */ + int32_t *total_brate_sec, /* o : Allocated secondary channel bitrate */ + int16_t *tdm_low_rate_mode, /* o : secondary channel low rate mode flag */ + const int16_t coder_type, /* i : secondary channel coder type */ + const int16_t ener_ratio_idx, /* i : correlation ratio indexe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const int16_t bwidth_pri, /* i : bandwidth of the primary channel */ + const int16_t bwidth_sec, /* i : bandwidth of the secondary channel */ + const int16_t flag_ACELP16k_pri, /* i : ACELP@16kHz core flag, primary chan. */ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int16_t coder_type0, /* i : coder type (temporary in the encoder, from bitstream in decoder) */ + const int16_t tdm_inst_ratio_idx /* i : instantaneous correlation ratio index */ +); + +void td_stereo_param_updt( + const float lsp_old_PCh[], /* i : primary channel old LSPs */ + const float lsf_old_PCh[], /* i : primary channel old LSFs */ + const float pitch_buf_PCh[], /* i : primary channel pitch buffer */ + float tdm_lspQ_PCh[], /* o : Q LSPs for primary channel */ + float tdm_lsfQ_PCh[], /* o : Q LSFs for primary channel */ + float tdm_Pri_pitch_buf[], /* o : pitch values for primary channel */ + const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ + const int16_t tdm_use_IAWB_Ave_lpc /* i : flag to indicate the usage of mean inactive LP coefficients */ +); + +void gsc_enc( + Encoder_State *st, /* i/o: State structure */ + float res_dct_in[], /* i : dct of residual signal */ + float exc_dct_in[], /* i/o: dct of pitch-only excitation / total excitation */ + const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ + const int16_t bits_used, /* i : Number of bit used before frequency Q */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + const float *lsf_new, /* i : ISFs at the end of the frame */ + float *exc_wo_nf, /* o : excitation (in f domain) w/o noisefill */ + float *tmp_noise /* o : long-term noise energy */ +); + +void tdm_low_rate_enc( + Encoder_State *st, /* i/o: State structure */ + const float Aq[], /* i : 12k8 Lp coefficient */ + const float *res, /* i : residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t attack_flag, /* i : attck flag */ + const float *lsf_new, /* i : current frame ISF vector */ + float *tmp_noise /* o : long-term noise energy */ +); + +/*! r: value of the indice */ +uint16_t get_indice_st( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t pos, /* i : absolute position in the bitstream */ + const int16_t nb_bits /* i : number of bits to quantize the indice */ +); + +void tdm_low_rate_dec( + Decoder_State *st, /* i/o: decoder static memory */ + float dct_epit[], /* o : GSC excitation in DCT domain */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const float *lsf_new /* i : ISFs at the end of the frame */ +); + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +void tdm_SCh_LSF_intra_pred( + const int32_t element_brate, /* i : element bitrate */ + const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ + float *pred_lsf_secondary /* o : predicted secondary channel LSFs */ +); + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE +void tdm_SCh_lsf_reuse( + const int16_t enc_dec, /* i : encoder/decoder flag */ + const int32_t element_brate, /* i : element bitrate */ + float lsf_new[M], /* i/o: LSFs at the end of the frame */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + const float tdm_lsfQ_PCh[M], /* i : primary channel LSFs */ + const float lsf_wgts[M], /* i : LSF weights */ + int16_t beta_index[] /* i/o: quantization index */ +); +#endif +#endif + +void first_VQstages( + const float *const *cb, + const float u[], /* i : vector to be encoded (prediction and mean removed) */ + const int16_t *levels, /* i : number of levels in each stage */ + const int16_t stagesVQ, /* i : number of stages */ + const float w[], /* i : weights */ + const int16_t N, /* i : vector dimension */ + const int16_t max_inner, /* i : maximum number of swaps in inner loop */ + int16_t indices_VQstage[] +); + +UWord32 index_lvq_SHB( + const int16_t idx_lead, + const int16_t idx_scale, + const int16_t nbits, + float *lat_cv, + const int16_t mode +); + +void deindex_lvq_SHB( + UWord32 index, + float *out, + const int16_t nbits, + const int16_t mode +); + +/*----------------------------------------------------------------------------------* + * MDCT Stereo prototypes + *----------------------------------------------------------------------------------*/ + +void stereo_td_itd_mdct_stereo( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder handle */ + const int16_t input_frame /* i : frame length */ +); + +void QuantizeTCXSpectrum( + Encoder_State *st, /* i : state handle */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + const float *x_orig, /* i : shaped MDCT spectrum */ + const float *gainlpc, /* i : FDNS gains */ + const Word16 *Aqind, /* i : frame-independent quantized coefficients (M+1) */ + const int16_t tnsSize, /* i : number of tns parameters put into prm */ + const int16_t nb_bits, /* i : bit budget */ + const int16_t vad_hover_flag, /* i : VAD hangover flag */ + int16_t *pL_frameTCX, /* o : full frame length */ + int16_t *pL_frame, /* o : frame length */ + int16_t *pL_spec, /* o : length of the coded spectrum */ + int16_t *ptcx_offset, /* o : folding point offset relative to the end of the previous frame */ + int16_t *pnoiseFillingBorder, /* o : noise filling border */ + float spectrum[], /* o : quantized MDCT spectrum */ + CONTEXT_HM_CONFIG *hm_cfg, /* o : Context-based harmonic model configuration */ + int16_t *hm_active, /* o : flag indicating if the harmonic model is active */ + float lf_deemph_fact[], /* o : low frequency deemphasis factors */ + int16_t *nf_seed, /* o : noise filling random seed */ + float *ener, /* o : energy of the quantized spectrum */ + float *gain_tcx, /* o : global gain */ + int16_t prm[] /* o : tcx parameters */ +); + +void EstimateStereoTCXNoiseLevel( + Encoder_State **sts, /* i : state handle */ + float *q_spectrum[CPE_CHANNELS][NB_DIV], /* i : quantized MDCT spectrum */ + float gain_tcx[][NB_DIV], /* i : global gain */ + int16_t L_frame[][NB_DIV], /* i : frame length */ + int16_t noiseFillingBorder[][NB_DIV], /* i : noise filling border */ + int16_t hm_active[][NB_DIV], /* i : flag indicating if the harmonic model is active */ + const int16_t ignore_chan[], /* i : flag indicating whether the channel should be ignored */ + float fac_ns[][NB_DIV], /* o : noise filling level */ + int16_t param_core[][NB_DIV * NPRM_DIV], /* o : quantized noise filling level */ + const int16_t is_mct /* i : is mct flag */ +); + +void TNSAnalysisStereo( + Encoder_State **sts, /* i : state handle */ + float *mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* o : MDST spectrum */ + const int16_t bWhitenedDomain, /* i : whitened domain flag */ + int16_t tnsSize[MCT_MAX_CHANNELS][NB_DIV], /* i : number of tns parameters put into prm */ + int16_t tnsBits[MCT_MAX_CHANNELS][NB_DIV], /* i : number of tns bits in the frame */ + int16_t param_core[][NB_DIV * NPRM_DIV], /* o : quantized noise filling level */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +); + +void InternalTCXDecoder( + Encoder_State *st, /* i/o: state handle */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + const int16_t L_frameTCX, /* i : full frame length */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_spec, /* i : length of the coded spectrum */ + const int16_t tcx_offset, /* i : folding point offset relative to the end of the previous frame */ + const int16_t noiseFillingBorder, /* i : noise filling border */ + const float *x_quant, /* i : quantized spectrum */ + const float ener, /* i : energy of the quantized spectrum */ + float lf_deemph_fact[], /* i/o: low frequency deemphasis factors */ + const float fac_ns, /* i : noise filling level */ + const int16_t nf_seed, /* i : noise filling random seed */ + const float *A, /* i : LPC representation of the FDNS gains */ + float *gainlpc, /* i/o: FDNS gains */ + const int16_t hm_active, /* i : flag indicating if the harmonic model is active */ + float gain_tcx, /* i/o: global gain / quantized global gain */ + float spectrum[], /* o : dequantized spectrum */ + float synth[], /* o : time domain signal */ + int16_t *gain_tcx_q /* o : quantized global gain (at low bitrates) */ +); + +void stereo_mdct_core_enc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + float new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ + float old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe */ +); + +void initMdctStereoEncData( + STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t bwidth, /* i : bandwidth */ + const int16_t igf, /* i : flag indicating IGF activity */ + const H_IGF_GRID hIgfGrid, /* i : IGF grid setup */ + const int16_t mem_init /* i : initialize memory after malloc */ +); + +ivas_error initMdctItdHandling( + STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ + const int32_t input_Fs /* i : input sampling rate */ +); + +void stereo_mdct_enc_destroy( + STEREO_MDCT_ENC_DATA_HANDLE *hStereoMdct /* i/o: encoder MDCT stereo handle */ +); + +void initMdctStereoDecData( + STEREO_MDCT_DEC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ + const int16_t igf, /* i : flag indicating IGF activity */ + const H_IGF_GRID igfGrid, /* i : IGF grid configuration */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void stereo_mdct_init_bands( + const int16_t L_frame, /* i : frame length */ + const int16_t tmp_tcx_mode, /* i : tcx mode (TCX10, TCX 20), -1 if transition frame */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t igf, /* i : flag indicating if IGF is used */ + const H_IGF_GRID hIgfGrid, /* i : IGF grid setup */ + int16_t *sfbOffset, /* o : sfb offset table */ + int16_t *sfbCnt /* o : number of sfbs */ +); + +void stereo_mdct_init_igf_start_band( + STEREO_MDCT_BAND_PARAMETERS *stbParams, /* i/o: stereo frequency band parameters */ + const float transFac, /* i : transform factor */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t element_brate /* i : element bitrate */ +); + +void init_tcx_enc_info( + Encoder_State *st, /* i : coder memory state */ + int16_t *L_frame, + int16_t *L_frameTCX, + int16_t *L_spec +); + +void decoder_tcx_invQ( + Decoder_State *st, /* i/o: coder memory state */ + int16_t prm[], /* i : parameters */ + float A[], /* i : coefficients NxAz[M+1] */ + Word16 Aind[], /* i : frame-independent coefficients Az[M+1] */ + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + float x[], + float gainlpc2[], + float xn_buf[], + int16_t *fUseTns, /* o : flag that is set if TNS data is present */ + STnsData *tnsData, + float *gain_tcx, + const int16_t **prm_sqQ, + int16_t *nf_seed, + const int16_t bfi, /* i : Bad frame indicator */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t isMCT, +#endif + const int16_t frame_cnt /* i : frame counter in the super frame */ +); + +void decoder_tcx_noisefilling( + Decoder_State *st, /* i/o: coder memory state */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float concealment_noise[L_FRAME48k], +#endif + const float A[], /* i : coefficients NxAz[M+1] */ + const int16_t L_frameTCX_glob, + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + float x[], + float gainlpc2[], + int16_t *temp_concealment_method, + const float gain_tcx, + const int16_t *prm_sqQ, + int16_t nf_seed, + const int16_t bfi, /* i : Bad frame indicator */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t isMCT, +#endif + const int16_t frame_cnt /* i : frame counter in the super frame */ +); + +void decoder_tcx_noiseshaping_igf( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t left_rect, + float x[], + const float gainlpc2[], + int16_t *temp_concealment_method, + const int16_t bfi /* i : Bad frame indicator */ +); + +void decoder_tcx_tns( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_frame_glob, + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + float x[N_MAX], + const int16_t fUseTns, /* i : flag that is set if TNS data is present */ + STnsData *tnsData, + const int16_t bfi, /* i : Bad frame indicator */ + const int16_t frame_cnt, /* i : frame counter in the super frame */ + const int16_t whitenedDomain +); + +void decoder_tcx_imdct( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_frame_glob, /* i : frame length */ + const int16_t L_frameTCX_glob, + const int16_t L_spec, + const int16_t tcx_offset, + const int16_t tcx_offsetFB, + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t left_rect, + float x[N_MAX], + float xn_buf[], + const uint16_t kernelType, /* i : TCX transform kernel type */ + const int16_t fUseTns, /* i : flag that is set if TNS data is present */ + float synth[], /* i/o: synth[-M..L_frame] */ + float synthFB[], + const int16_t bfi, /* i : Bad frame indicator */ + const int16_t frame_cnt, /* i : frame counter in the super frame */ + const int16_t isLFE, /* i : is LFE */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void init_tcx_info( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_frame_glob, /* i : global frame length */ + const int16_t L_frameTCX_glob, /* i : FB global frame length */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + const int16_t bfi, /* i : bad frame indicator */ + int16_t *tcx_offset, /* o : folding point offset relative to the end of the previous frame */ + int16_t *tcx_offsetFB, /* o : FB folding point offset relative to the end of the previous frame*/ + int16_t *L_frame, /* o : frame length */ + int16_t *L_frameTCX, /* o : TCX frame length */ + int16_t *left_rect, /* o : left part is rectangular */ + int16_t *L_spec /* o : spectrum length */ +); + +void decoder_tcx_IGF_mono( + Decoder_State *st, /* i/o: coder memory state */ + float x[], /* o : de-quatized coefficients */ + const int16_t L_frame, /* i : frame length */ + const int16_t left_rect, /* i : left part is rectangular */ + const int16_t bfi, /* i : bad frame indicator */ + const int16_t frame_cnt /* i : frame counter in the super_frame */ +); + +void decoder_tcx_IGF_stereo( + Decoder_State **sts, /* i/o: coder memory states */ + STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + float *x[CPE_CHANNELS][NB_DIV], /* o : de-quatized coefficients */ + const int16_t L_frame, /* i : frame length */ + const int16_t left_rect, /* i : left part is rectangular */ + const int16_t k, /* i : Subframe index */ + const int16_t bfi /* i : bad frame indicator */ +); + +void ms_processing( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT encoder structure */ + Encoder_State **sts, /* i/o: Encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + const int16_t iSubframe, /* i : subframe number */ + float x_0[], /* i/o: spectrum 1 */ + float x_1[], /* i/o: spectrum 2 */ + int16_t maxSfb /* i : number of stereo frequency bands */ +); + +void ms_inv_mask_processing( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT encoder structure */ + Encoder_State **sts, /* i/o: Encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + const int16_t iSubframe, /* i : subframe number */ + const float x_0[], /* i : spectrum 1 */ + const float x_1[], /* i : spectrum 2 */ + float x_inv_0[], /* o : inverse spectrum 1 */ + float x_inv_1[], /* o : inverse spectrum 2 */ + int16_t maxSfb /* i : number of stereo frequency bands */ +); + +void IGFDecApplyStereo( + const IGF_DEC_INSTANCE_HANDLE hIGFDecL, /* i : instance handle of IGF Decoder */ + const IGF_DEC_INSTANCE_HANDLE hIGFDecR, /* i : instance handle of IGF Decoder */ + float *spectrumL, /* i/o: L MDCT spectrum */ + float *spectrumR, /* i/o: R MDCT spectrum */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t *coreMsMask, + const int16_t restrict_hopsize, + const int16_t bfi /* i : frame loss == 1, frame good == 0 */ +); + +void IGFEncStereoEncoder( + STEREO_MDCT_BAND_PARAMETERS *sfbParam, /* i/o: sfb parameters for the right channel */ + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : IGF handle */ + const float *mdctSpectrumL, /* i : left spectrum */ + const float *mdctSpectrumR, /* i : right spectrum */ + int16_t *msMask, /* i/o: MS mask */ + int16_t *igfStereoMode, /* o : IGF stereo mode */ + const int16_t mdct_stereo_mode, /* i : MDCT stereo mode */ + const int16_t isTCX20, /* i : flag for indicating TCX20 */ + const int16_t isTransition /* i : flag for transtition */ +); + +void IGFDecReplicateTCX10State( + IGF_DEC_INSTANCE_HANDLE hIGFDec /* i/o: instance handle of IGF Decoder */ +); + +void InitPsychLPC( + const int32_t sr_core, /* i : sampling rate of core-coder */ + const int16_t L_frame, /* i : frame length */ + const TCX_CONFIG_HANDLE hTcxCfg /* i : TCX configuration handle */ +); + +void SetCurrentPsychParams( + const int16_t core, + const int16_t last_frame_was_concealed_cng, + TCX_CONFIG_HANDLE hTcxCfg +); + +void stereo_coder_tcx( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + float *mdst_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: MDST spectrum */ + float *inv_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: inverse spectrum */ + float *inv_mdst_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: inverse MDST spectrum */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +); + +void stereo_decoder_tcx( + STEREO_MDCT_DEC_DATA *hStereoMdct, /* i/o: MDCT stereo decoder structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + float *spec_r_0[NB_DIV], /* i/o: spectrum right channel */ + float *spec_l[NB_DIV], /* i/o: spectrum left channel */ + float *spec_r[NB_DIV], /* i/o: spectrum right channel */ + const int16_t mdct_stereo_mode[], /* i : stereo mode (FB/band wise MS, dual mono */ + const int16_t core_l, /* i : core for left channel (TCX20/TCX10) */ + const int16_t core_r, /* i : core for right channel (TCX20/TCX10) */ + const int16_t igf, /* i : flag for IGF activity */ + const int16_t L_frame, /* i : TCX frame length */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ + const int16_t last_core_l, /* i : last core for left channel */ + const int16_t last_core_r, /* i : last core for right channel */ + const int16_t tmp_plc_upmix /* i : indicates temp upmix for PLC decision */ +); + +void stereo_mdct_core_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float signal_out[CPE_CHANNELS][L_FRAME48k], /* o : synthesis @internal_FS */ + float signal_outFB[CPE_CHANNELS][L_FRAME48k] /* o : synthesis @output_FS */ +); + +void splitAvailableBits( + const int16_t total_bits, /* i : total available bits for TCX coding */ + const int16_t split_ratio, /* i : split ratio */ + int16_t *bits_ch0, /* o : bits for channel 0 */ + int16_t *bits_ch1 /* o : bits for channel 1 */ +); + +int16_t write_stereo_to_bitstream +( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ + Encoder_State **sts, /* i/o: Encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ + BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ +); + +void parse_stereo_from_bitstream( + STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo decoder structure */ + Decoder_State **sts, /* i/o: decoder state structure */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ + Decoder_State *st0, /* i/o: decoder state structure for Bstr */ + int16_t ms_mask[NB_DIV][MAX_SFB] /* o : bandwise MS mask */ +); + +void FindSplitRatio( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + Encoder_State **sts /* i/o: Encoder state structure */ +); + +void ComputeSpectrumNoiseMeasure( + const float *powerSpec, + const int16_t L_frame, + const int16_t startLine, + const int16_t resetMemory, + int16_t *noiseFlags, + const int16_t lowpassLine +); + +void IGFSaveSpectrumForITF( + IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i/o: instance handle of IGF Encoder */ + const int16_t igfGridIdx, /* i : IGF grid index */ + const float *pITFSpectrum /* i : MDCT spectrum */ +); + +void convert_coeffs_to_higher_res( + const float *in1, /* i : first subframe input */ + const float *in2, /* i : second subframe input */ + float *out, /* o : converted output */ + const int16_t len /* i : length of subframes */ +); + +void sns_compute_scf( + float spectrum[], + const PsychoacousticParameters *pPsychParams, + const int16_t L_frame, + float *scf +); + +void sns_interpolate_scalefactors( + float *scf_int, /* o : interpolated scalefactors for spectrum shaping */ + const float *scf, /* i : sns scalefactors as derived from the signal or read from the bitstream */ + int16_t encoder_side /* i : flag, if scalefactors have to be inverted */ +); + +void sns_shape_spectrum( + float spectrum[], /* i/o: spectrum to be shaped */ + const PsychoacousticParameters *pPsychParams, /* i : psychoacoustic parameters used to get the frequency bands */ + const float *scf_int, /* i : already interpolated SNS scalefactors */ + const int16_t L_frame /* i : frame length */ +); + +void sns_avq_cod( + const float *sns, /* i : Input sns vectors */ + const float *snsmid, /* i : Input mid-sns vectors */ + float *sns_q, /* o : Quantized LFS vectors */ + float *snsmid_q, /* o : Quantized mid-LFS vectors */ + int16_t *index, /* o : Quantization indices */ + const int16_t core, /* i : core */ + const int16_t low_brate_mode /* i : flag low bit operating mode */ +); + +void sns_avq_cod_stereo( + const float *snsl, /* i : Input sns vector (left channel) */ + const float *snsr, /* i : Input sns vector (right channel) */ + float *snsl_q, /* o : Quantized sns vector (left channel) */ + float *snsr_q, /* o : Quantized sns vector (right channel) */ + int16_t *indexl, /* o : Quantization indices (left channel) */ + int16_t *indexr /* o : Quantization indices (right channel) */ +); + +void sns_avq_dec( + int16_t *index, /* i : Quantization indices */ + float *SNS_Q, /* o : Quantized SNS vectors */ + const int16_t numlpc /* i : Number of sets of lpc */ +); + +void sns_avq_dec_stereo( + int16_t *indexl, /* i : Quantization indices (left channel) */ + int16_t *indexr, /* i : Quantization indices (right channe) */ + float *SNS_Ql, /* o : Quantized SNS vectors (left channel) */ + float *SNS_Qr /* o : Quantized SNS vectors (right channe) */ +); + +void convertToMS( + const int16_t L_frame, /* i : frame length */ + float x0[], /* i/o: mid/left channel coefficients */ + float x1[], /* i/o: side/right channel coefficients */ + const float norm_fac /* i : normalization factor */ +); + +void inverseMS( + const int16_t L_frame, /* i : frame length */ + float x0[], /* i/o: mid/left channel coefficients */ + float x1[], /* i/o: side/right channel coefficients */ + const float norm_fac /* i : normalization factor */ +); + +void stereoFdCngCoherence( + Encoder_State **sts, /* i/o: core encoder structures */ + const int16_t last_element_mode, /* i : last element mode */ + float fft_buff[CPE_CHANNELS][2 * L_FFT] /* i : fft buffers for L and R channels */ +); + +void FdCngEncodeMDCTStereoSID( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ +); + +void FdCngDecodeMDCTStereoSID( + CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ +); + +ivas_error initMdctStereoDtxData( + CPE_DEC_HANDLE hCPE /* i/o: CPE decoder handle */ +); + +void synchonize_channels_mdct_sid( + Decoder_State *sts[CPE_CHANNELS], /* i/o: decoder state structure */ + const int16_t n /* i : channel number */ +); + +void updateBuffersForDmxMdctStereo( + CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ + const int16_t output_frame, /* i : output frame length */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: decoder output */ + float synth[CPE_CHANNELS][L_FRAME48k] /* i/o: decoder synthesis */ +); + +void applyDmxMdctStereo( + const CPE_DEC_HANDLE hCPE, /* i : CPE handle */ + float output[CPE_CHANNELS][L_FRAME48k], /* o : output from core decoder */ + const int16_t output_frame /* i : output frame length */ +); + + +/*----------------------------------------------------------------------------------* + * Front-VAD prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error front_vad_create( + FRONT_VAD_ENC_HANDLE *hFrontVad, /* i/o: front-VAD handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +); + +void front_vad_destroy( + FRONT_VAD_ENC_HANDLE *hFrontVad /* i/o: front-VAD handle */ +); + +ivas_error front_vad( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure, nullable */ + Encoder_State *st, /* i/o: encoder state structure */ + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + FRONT_VAD_ENC_HANDLE *hFrontVads, /* i/o: front-VAD handles */ + const int16_t hMCT_flag, /* i : hMCT handle allocated (1) or not (0) */ + const int16_t input_frame, /* i : frame length */ + int16_t vad_flag_dtx[], /* o : HE-SAD flag with additional DTX HO */ + float fr_bands[][2 * NB_BANDS], /* i : energy in frequency bands */ + float Etot_LR[], /* o : total energy Left & Right channel */ + float lf_E[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ + int16_t localVAD_HE_SAD[], /* o : HE-SAD flag without hangover, LR channels */ + int16_t vad_hover_flag[], /* o : VAD hangover flag */ + float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN */ + float *PS_out, /* o : energy spectrum */ + float *Bin_E_out /* o : log-energy spectrum of the current frame*/ +); + +ivas_error front_vad_spar( + SPAR_ENC_HANDLE hSpar, /* i/o: SPAR encoder structure */ + const float *omni_in, /* i : omnidirectional input signal */ + ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : encoder configuration handle */ + const int16_t input_frame /* i : input frame length */ +); + + +/*----------------------------------------------------------------------------------* + * Stereo CNG prototypes + *----------------------------------------------------------------------------------*/ + +void stereo_enc_cng_init( + STEREO_CNG_ENC_HANDLE hStereoCng /* i/o: stereo CNG encoder structure */ +); + +void stereo_cng_upd_counters( + STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ + const int32_t element_mode, /* i : element mode */ + const int16_t nbands, /* i : Number of bands in active */ + const float sidSideGain[], /* i : SID side gains */ + const int16_t burst_ho_count /* i : Hang-over count */ +); + +void stereo_cng_init_dec( + STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: stereo CNG decoder structure */ + const int16_t *frameSize /* i : pointer to frameSize of channel 0 to be used for channel 1 */ +); + +void stereo_cng_compute_PScorr( + float output[CPE_CHANNELS][L_FRAME48k], /* i : Output signal */ + float *c_PS_LT, /* i/o: Correlation */ + const int16_t L_frame_0, /* i : L_frame channel 0 */ + const int16_t L_frame_1 /* i : L_frame channel 1 */ +); + +void stereo_cng_dec_update( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +void stereo_cna_update_params( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i : Output signal */ + const int16_t output_frame, /* i : Output frame length */ + const int16_t tdm_ratio_idx /* i : TDM ratio index */ +); + +void dtx_enc_init( + Encoder_State *st, /* i : Encoder state handle */ + const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */ + const int16_t interval_SID /* i : interval for SID update */ +); + + +/*----------------------------------------------------------------------------------* + * Framework general prototypes + *----------------------------------------------------------------------------------*/ + +void mvr2r_inc( + const float x[], /* i : input vector */ + const int16_t x_inc, /* i : increment for vector x[] */ + float y[], /* o : output vector */ + const int16_t y_inc, /* i : increment for vector y[] */ + const int16_t n /* i : vector size */ +); + +void v_add_inc( + const float x1[], /* i : Input vector 1 */ + const int16_t x_inc, /* i : Increment for input vector 1 */ + const float x2[], /* i : Input vector 2 */ + const int16_t x2_inc, /* i : Increment for input vector 2 */ + float y[], /* o : Output vector that contains vector 1 + vector 2 */ + const int16_t y_inc, /* i : increment for vector y[] */ + const int16_t N /* i : Vector length */ +); + +void v_mult_inc( + const float x1[], /* i : Input vector 1 */ + const int16_t x1_inc, /* i : Increment for input vector 1 */ + const float x2[], /* i : Input vector 2 */ + const int16_t x2_inc, /* i : Increment for input vector 1 */ + float y[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t y_inc, /* i : increment for vector y[] */ + const int16_t N /* i : Vector length */ +); + +void v_addc( + const float x[], /* i : Input vector */ + const float c, /* i : Constant */ + float y[], /* o : Output vector that contains c*x */ + const int16_t N /* i : Vector length */ +); + +void v_min( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t N /* i : Vector length */ +); + +void v_sqrt( + const float x[], /* i : Input vector */ + float y[], /* o : Output vector that contains sqrt(x) */ + const int16_t N /* i : Vector length */ +); + +/*! r: sum abs of all vector elements */ +float sumAbs( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +); + +void mvc2c( + const uint8_t x[], /* i : input vector */ + uint8_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +); + +/*! r: the dot product x'*A*A'*x */ +float dot_product_cholesky( + const float *x, /* i : vector x */ + const float *A, /* i : Cholesky matrix A */ + const int16_t N /* i : vector & matrix size */ +); + +void v_mult_mat( + float *y, /* o : the product x*A */ + const float *x, /* i : vector x */ + const float *A, /* i : matrix A */ + const int16_t N, /* i : number of rows */ + const int16_t C /* i : number of columns */ +); + +/*! r: log(sum(exp(X)) of the input array X */ +float logsumexp( + const float X[], /* i : input array X */ + const int16_t N /* i : number of elements in array X */ +); + +/*! r: mapped output value */ +float lin_interp( + const float x, /* i : the value to be mapped */ + const float x1, /* i : source range interval: low end */ + const float y1, /* i : source range interval: high end */ + const float x2, /* i : target range interval: low */ + const float y2, /* i : target range interval: high */ + const int16_t flag_sat /* i : flag to indicate whether to apply saturation */ +); + +void check_bounds( + float *value, /* i/o: Input value / Adjusted value */ + const float low, /* i : Low limit */ + const float high /* i : High limit */ +); + +void check_bounds_s( + int16_t *value, /* i/o: Input value / Adjusted value */ + const int16_t low, /* i : Low limit */ + const int16_t high /* i : High limit */ +); + +ivas_error stereo_memory_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t max_bwidth, /* i : maximum audio bandwidth */ + float *tdm_last_ratio, /* o : TD stereo last ratio */ + const IVAS_FORMAT ivas_format /* i : IVAS format */ +); + +ivas_error stereo_memory_dec( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + CPE_DEC_HANDLE hCPE, /* i : CPE decoder structure */ + const int16_t nb_bits_metadata, /* i : number of metadata bits */ + const int32_t output_Fs, /* i : output sampling rate */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int16_t nchan_transport /* i : number of transport channels */ +); + +void stereo_switching_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE structure */ + float old_input_signal_pri[], /* i : old input signal of primary channel */ + const int16_t input_frame /* i : input frame length */ +); + +void stereo_switching_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +void stereo_td2dft_update( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int16_t n, /* i : channel number */ + float output[], /* i/o: synthesis @internal Fs */ + float synth[], /* i/o: synthesis @output Fs */ + float hb_synth[], /* i/o: hb synthesis */ + const int16_t output_frame /* i : frame length */ +); + +void stereo_mdct2dft_update( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output0[], /* i/o: synthesis @internal Fs, ch0 */ + float synth0[] /* i/o: synthesis @output Fs, ch0 */ +); + +/*! r: number of bits written */ +int16_t write_GR0( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : data to be encoded */ + const int16_t len /* i : input data length */ +); + +/*! r: number of bits read */ +int16_t read_GR0( + const uint16_t *bit_stream, /* i : bitstream to be read */ + int16_t *ind, /* o : parameters read */ + const int16_t len /* i : number of params to be read */ +); + + +/*----------------------------------------------------------------------------------* + * MCT prototypes + *----------------------------------------------------------------------------------*/ + +void ivas_mdct_core_whitening_enc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + float new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ + float old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe */ + float *mdst_spectrum_long[CPE_CHANNELS], /* o : buffer for MDST spectrum */ + int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* o : buffer TNS bits */ + float *orig_spectrum_long[CPE_CHANNELS], /* o : origingal spectrum w/o whitening */ + int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* o : size of TNS */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* o : pointer to parameter array */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *LFE_off, /* o : flag if LFE has content */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ + const int16_t nChannels /* i : total number of coded channels */ +); + +void ivas_mct_core_enc( + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE encoder structures */ + const int16_t nChannels, /* i : number of channels to be coded */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t switch_bw, /* i : flag bandwidth switch occurance */ + const int16_t lfe_bits, /* i : bits spent for LFE */ + const SBA_MODE sba_mode /* i : SBA mode */ +#ifdef FIX_I1_113 + , + const int16_t sba_order +#endif +); + +void ivas_mdct_quant_coder( + CPE_ENC_HANDLE hCPE, /* i/o: Encoder CPE handle */ + const int16_t LFE_off, /* i : flag if LFE has content */ + int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* i : bits needed for TNS parameters */ + int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* i : size of TNS */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to parameter array */ + const int16_t is_mct /* i : is mct flag */ +); + +void apply_MCT_enc( + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + float *mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: MDST spectrum */ + float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: inverse spectrum */ + float *inv_mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: inverse MDST spectrum */ + const int16_t nchan /* i : number of channels */ +); + +void write_mct_bitstream( + Encoder_State **sts, /* i/o: encoder state structure */ + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + const int16_t nchan /* i : number of channels */ +); + +void splitAvailableBitsMCT( + void **sts, /* i/o: encoder/decoder state structure */ + const int16_t total_bits, /* i : total number of available bits */ + const int16_t split_ratio[MCT_MAX_CHANNELS], /* i : ratio for splitting the bits */ + const int16_t enc_dec, /* i : encoder or decoder flag */ + const int16_t nchan /* i : number of channels */ +); + +void getChannelEnergies( + Encoder_State **sts, /* i : Encoder state structure */ + float nrg[MCT_MAX_CHANNELS], /* o : energies */ + const int16_t nchan /* i : number of channels */ +); + +void mctStereoIGF_enc( + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + float *orig_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : MDCT spectrum for ITF */ + float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ + float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV], /* i : same as above but for inverse spect.*/ + float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : inverse spectrum */ + const int16_t sp_aud_decision0[MCT_MAX_CHANNELS] /* i : speech audio decision */ +); + +void ivas_mdct_dec_side_bits_frame_channel( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + int16_t param_lpc[MCT_MAX_CHANNELS][NPRM_LPC_NEW], /* o : lpc_parameters */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* o : pointer to param buffer */ + Decoder_State *st0, /* i : pointer to bitstream handle */ + int16_t *LFE_off, /* o : flag if LFE has content */ + int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* o : number of bits for TNS */ + int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i/o: parameters buffer */ + const int16_t MCT_flag, /* i : MCT tool active(1) or deactive (0) */ + const int16_t odd_channel_cpe /* i : flag cpe with odd nb of tc channels */ +); + +void ivas_mct_side_bits( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ + const int16_t nCPE, /* i : number of CPEs */ + Decoder_State *st0, /* i : decoder handle for Bstr */ + const int16_t bfi, /* i : BFI flag */ + uint16_t *bitstream, /* o : bitstream indices */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +); + +void ivas_mdct_core_invQ( + CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ + const int16_t LFE_off, /* i : flag if LFE content */ + int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* i : number of TNS bits */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to param buffer */ + int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW], /* i : lpc parameters */ + int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i : param buffer */ + int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : flag TNS enabled */ + STnsData tnsData[CPE_CHANNELS][NB_DIV], /* i : TNS parameter */ + float *x_0[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ + float *x[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ + float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* i : LP coefficients */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : M/S mask */ + const int16_t isMCT /* i : MCT flag */ +); + +void ivas_mdct_core_reconstruct( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float *x[][NB_DIV], /* i/o: pointers to synthesis @internal_FS */ + float signal_outFB[CPE_CHANNELS][L_FRAME_PLUS], /* o : synthesis @output_FS */ + const int16_t LFE_off, /* i : flag if LFE content */ + int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : flage TNS enabled */ + const int16_t isMCT /* i : MCT flag */ +); + +void ivas_mdct_core_tns_ns( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int16_t LFE_off, /* i : flag if LFE has content */ + int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : two entries for each channel in TCX10*/ + STnsData tnsData[CPE_CHANNELS][NB_DIV], /* o : TNS parameter */ + float *x[CPE_CHANNELS][NB_DIV], /* o : synthesis @internal_FS */ + float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* o : LP coefficients */ + const int16_t isMCT /* i : MCT flag */ +); + +void ivas_mct_core_dec( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ + const int16_t nCPE, /* i : number of CPEs */ + float signal_out[][L_FRAME48k] /* o : synthesis @internal_FS */ +); + +void ivas_mct_dec_mct( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + Decoder_State **sts, /* i/o: decoder state structure */ + const int16_t nchan /* i : number of channels */ +); + +void apply_MCT_dec( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + Decoder_State **sts, /* i/o: decoder state structure */ + float *x[MCT_MAX_CHANNELS][NB_DIV] /* i/o: decoded and dequan. spect. input to MCT */ +); + +void mctStereoIGF_dec( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + Decoder_State **sts, /* i/o: decoder state structure */ + float *x[MCT_MAX_CHANNELS][NB_DIV], /* i/o: decoded and dequantized spectrum */ + const int16_t bfi /* i : bad frame flag */ +); + +void ivas_mct_enc_close( + MCT_ENC_HANDLE hMCT /* i/o: MCT encoder structure */ +); + +void ivas_mdct_tcx10_bit_distribution( + int16_t target_bitsTCX10[NB_DIV], /* o : target bit distribution */ + const int16_t bits_frame_channel, /* i : bits frame channel */ + const int16_t nTnsBitsTCX10[NB_DIV] /* i : TNS bits */ +); + +void enc_prm_igf_mdct( + Encoder_State *st, /* i : Encoder state handle */ + BSTR_ENC_HANDLE hBstr /* i/o: Bitstream handle */ +); + +void mdct_read_IGF_bits( + Decoder_State *st, /* i/o: Encoder state handle */ + Decoder_State *st0 /* i : pointer to handle where bstr is read */ +); + + +/*----------------------------------------------------------------------------------* + * Q Metadata prototypes for DirAC and MASA + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_qmetadata_enc_encode( + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + IVAS_QMETADATA *hQMetaData /* i/o: q_metadata handle */ +); + +void reset_metadata_spatial( + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + const int32_t element_brate, /* i : element bitrate */ + int32_t *total_brate, /* o : total bitrate */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t nb_bits_metadata, /* i : number of meatdata bits */ + const SBA_MODE sba_mode, /* i : SBA mode */ + const int16_t element_mode /* i : element mode */ +); + +/*! r: number of bits written */ +void ivas_qmetadata_enc_sid_encode( + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ + const int16_t masa_sid_descriptor, /* i : description of MASA SID coding structure*/ + const int16_t ivas_format, /* i : ivas format */ + const SBA_MODE sba_mode /* i : SBA mode */ +); + +/*! r: number of bits read */ +int16_t ivas_qmetadata_dec_decode( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + uint16_t *bitstream, /* i : bitstream */ + int16_t *index /* i/o: bitstream position */ +); + +/*! r: number of bits read */ +int16_t ivas_qmetadata_dec_sid_decode( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + uint16_t *bitstream, /* i : bitstream */ + int16_t *index, /* i/o: bitstream position */ + const int16_t nchan_transport, /* i : number of transport channels */ + int16_t *element_mode, /* o : element mode */ + const int16_t ivas_format, /* i : IVAS format */ + const SBA_MODE sba_mode /* i : SBA mode */ +); + +void ivas_qmetadata_to_dirac( + const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ + DIRAC_DEC_HANDLE hDirAC, /* o : DirAC decoder structure */ + MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const SBA_MODE sba_mode, /* i : SBA mode */ + int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +); + +ivas_error ivas_qmetadata_open( + IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ +); + +ivas_error ivas_qmetadata_allocate_memory( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + const int16_t nbands, /* i : new number of frequency bands */ + const int16_t ndirs, /* i : new number of directions */ + const int16_t coherence_flag /* i : new coherence coding status */ +); + +void ivas_qmetadata_close( + IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ +); + +void restore_metadata_buffer( + BSTR_ENC_HANDLE hMetaData, + const int16_t next_ind_start, + const int16_t last_ind_start, + const int16_t bit_pos_start +); + +/* !r: codeword index */ +int16_t masa_sq( + const float in, /* i : input value */ + const float *threshold, /* i : partition */ + const int16_t cb_sz /* i : codebook size */ +); + +void ivas_qmetadata_azimuth_elevation_to_direction_vector( + const float az, /* i : azimuth */ + const float el, /* i : elevation */ + float *dv /* o : direction vector */ +); + +void ivas_qmetadata_direction_vector_to_azimuth_elevation( + const float *dv, /* i : direction vector */ + float *az, /* o : azimuth */ + float *el /* o : elevation */ +); + +ivas_error only_reduce_bits_direction( + int16_t *reduce_bits_out, + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + int16_t reduce_bits, + const int16_t coding_subbands, + const int16_t no_subframes, + int16_t *ind_order +); + +void quantize_direction_frame( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES] +); + +/* !r: quantized spherical index */ +uint16_t quantize_direction( + const float theta, /* i : input elevation value */ + float phi, /* i : input azimuth value */ + const int16_t no_bits, /* i : number of bits */ + float *theta_q, /* o : quantized elevation */ + float *phi_q, /* o : quantized azimuth */ + uint16_t *index_theta, /* o : quantized elevation index */ + uint16_t *index_phi, /* o : quantized azimuth index */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +); + +int16_t quantize_direction2D( + float phi, /* i : input azimuth value */ + const int16_t no_cw, /* i : number of bits */ + float *phi_q, /* o : quantized azimuth value */ + uint16_t *index_phi, /* o : quantized azimuth index */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +); + +/* !r :companded azimuth value */ +float companding_azimuth( + const float azi, /* i : input azimuth value */ + const MC_LS_SETUP mc_format, /* i : input channel format */ + const int16_t theta_flag, /* i : zero/non zero elevation flag */ + const int16_t direction /* i : direction of companding (direct or inverse)*/ +); + +/* !r: index azimuth */ +int16_t quantize_phi_chan_lbr( + const float phi, /* i : azimuth value */ + float *phi_hat, /* o : quantized azimuth */ + const int16_t n /* i : azimuth codebook size */ +); + +/* !r: index azimuth */ +int16_t quantize_phi_chan_compand( + float phi, /* i : azimuth value */ + float *phi_hat, /* o : quantized azimuth */ + const int16_t n, /* i : azimuth codebook size */ + const int16_t theta_flag, /* i : flag signalling high elevation */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +); + +void quantize_direction_frame2D( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], /* i : input azimuth values */ + float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES] /* i : input elevation values */ +); + +void small_requantize_direction_frame( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], /* i : input azimuth values */ + float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], /* i : input elevation values */ + const int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], /* i : raw/EC encoding mode for each subband */ + int16_t bits_dir_bands[MASA_MAXIMUM_CODING_SUBBANDS], /* i/o: number of bits per subband */ + int16_t *diff /* i/o: number of bits to be reduced */ +); + +/*!r : index azimuth */ +int16_t quantize_phi( + float phi, /* i : azimuth value */ + const int16_t flag_delta, /* i : flag indicating if the azimuth codebook is translated or not */ + float *phi_hat, /* o : quantized azimuth */ + const int16_t n /* i : azimuth codebook size */ +); + +/*! r: decoded elevation value */ +float deindex_elevation( + uint16_t *id_th, /* i : input index */ + const int16_t no_bits, /* i : number of bits for the spherical grid */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +); + +float deindex_azimuth( + int16_t id_phi, /* i : index */ + const int16_t no_bits, /* i : number of bits for the spherical grid */ + const int16_t id_th, /* i : elevation index */ + const int16_t remap, /* i : remapping flag */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +); + +void deindex_spherical_component( + const uint16_t sph_idx, /* i : spherical index */ + float *az, /* o : decoded azimuth value */ + float *el, /* o : decoded elevation value */ + uint16_t *az_idx, /* o : azimuth index */ + uint16_t *el_idx, /* o : elevation index */ + const uint16_t no_bits, /* i : number of bits for the spherical grid */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +); + +void small_reduction_direction( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + uint16_t bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], /* i : bit allocation in tF tiles */ + const int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], /* i : raw/EC coding indicator for each subband*/ + int16_t *diff /* i/o: number of bits that need to be reduced */ +); + +uint16_t ivas_qmetadata_reorder_generic( + const int16_t signed_value +); + +int16_t ivas_qmetadata_dereorder_generic( + const uint16_t uns_value /* i : unsigned value to reorder */ +); + +/*! r: projected azimuth index */ +int16_t ivas_dirac_project_azimuth_index( + const int16_t az_idx, /* i : azimuth index */ + const int16_t az_alph, /* i : number of azimuth symbols */ + const int16_t az_alph_proj /* i : size of projected alphabet */ +); + +/*! r: projected elevation index */ +int16_t ivas_dirac_project_elevation_index( + const int16_t el_idx, /* i : elevation index */ + const int16_t el_alph, /* i : number of elevation symbols */ + const int16_t el_alph_proj /* i : size of projected alphabet */ +); + +/*! r: projected index in channel mode */ +int16_t ivas_chan_project_elevation_index( + const int16_t el_idx, /* i : elevation index */ + const int16_t el_alph, /* i : number of elevation symbols */ + const int16_t el_alph_proj /* i : size of projected alphabet */ +); + +void ivas_dirac_param_est_enc( + DIRAC_ENC_HANDLE hDirAC, + IVAS_QDIRECTION *q_direction, + const uint8_t useLowerRes, + float data_f[][L_FRAME48k], + float **pp_fr_real, + float **pp_fr_imag, + const int16_t input_frame + ); + +/*----------------------------------------------------------------------------------* + * SBA mode prototypes + *----------------------------------------------------------------------------------*/ + +/*! r: SBA format mode */ +int16_t ivas_sba_mode_select( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +void ivas_sba_config( + const int32_t sba_total_brate, /* i : SBA total bitrate */ + int16_t sba_order, /* i : Ambisonic (SBA) order */ + int16_t nb_channels, /* i : Number of Ambisonic (SBA) channels */ + int16_t *nchan_transport, /* o : number of transport channels */ + const int16_t sba_planar, /* i : SBA planar flag */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE, /* o : number of CPEs */ + int16_t *element_mode, /* o : element mode of the core coder */ + const SBA_MODE sba_mode /* i : SBA mode */ +); + +ivas_error ivas_sba_dec_reconfigure( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_init_dec_get_num_cldfb_instances( + Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ + int16_t *numCldfbAnalyses, /* o : number of CLDFB analysis instances */ + int16_t *numCldfbSyntheses /* o : number of CLDFB synthesis instances */ +); + +int16_t ivas_sba_get_order( + const int16_t nb_channels, /* i : Number of ambisonic channels */ + const int16_t sba_planar /* i : SBA planar flag */ +); + +int16_t ivas_sba_get_order_transport( + const int16_t nchan_transport /* i : Number of transport channels */ +); + +int16_t ivas_sba_get_nchan( + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t sba_planar /* i : SBA planar flag */ +); + +/*! r: number of ambisonics metadata channels */ +int16_t ivas_sba_get_nchan_metadata( + const int16_t sba_order /* i : Ambisonic (SBA) order */ +); + +void ivas_sba_zero_vert_comp( + float sba_data[][L_FRAME48k], /* i/o: SBA data frame */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t sba_planar, /* i : SBA planar flag */ + const int16_t input_frame /* i : input frame length */ +); + +void ivas_sba_getTCs( + float sba_data[][L_FRAME48k], /* i : SBA signals */ + Encoder_Struct *st_ivas, /* i/o: Encoder struct */ + const int16_t input_frame /* i : frame length */ +); + +ivas_error ivas_sba_linear_renderer( + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nchan_in, /* i : number of input ambisonics channels */ + const AUDIO_CONFIG output_config, /* i : output audio configuration */ + const IVAS_OUTPUT_SETUP output_setup, /* i : output format setup */ + const float hoa_dec_mtx[] /* i : hoa decoding mtx */ +); + +int16_t ivas_sba_remapTCs( + float sba_data[][L_FRAME48k], /* i/o: SBA signals */ + Decoder_Struct *st_ivas, /* i/o: decoder struct */ + const int16_t output_frame /* i : frame length */ +); + +void ivas_sba_dirac_stereo_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame /* i : output frame length per channel */ +); + +void ivas_sba_dirac_stereo_config( + STEREO_DFT_CONFIG_DATA_HANDLE hConfig /* o : DFT stereo configuration */ +); + +void ivas_sba_dirac_stereo_smooth_parameters( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: encoder DFT stereo handle */ +); + +ivas_error ivas_sba_get_hoa_dec_matrix( + const IVAS_OUTPUT_SETUP hOutSetup, /* i : target output setup */ + float **hoa_dec_mtx, /* o : ALLRAD decoder matrix */ + const int16_t ambisonics_order /* i : Ambisonics order */ +); + +/*----------------------------------------------------------------------------------* + * DirAC prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +); + +ivas_error ivas_dirac_enc_reconfigure( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +); + +void ivas_dirac_enc_close( + DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ + const int32_t input_Fs /* i : input sampling_rate */ +); + +void ivas_dirac_enc( + DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + int16_t *nb_bits_metadata, /* o : number of metadata bits written */ + const int16_t Opt_DTX_ON, /* i : flag signalling DTX on */ + float data_f[][L_FRAME48k], /* i/o: input: ACN/SN3D, output: omni, stereo DMX or FOA */ + const int16_t input_frame, /* i : input frame length */ + const int16_t sba_planar /* i : SBA planar flag */ +); + +ivas_error ivas_dirac_config( + void *st_ivas, /* i/o: IVAS encoder/decoder state structure */ + const int16_t enc_dec /* i : encoder or decoder flag */ +); + +void ivas_dirac_config_bands( + int16_t *band_grouping, /* o : band grouping */ + const int16_t nbands, /* i : number of bands */ + const int16_t max_band, /* i : maximal band index +1 */ + int16_t *dirac_to_spar_md_bands, /* o : mapping of DirAC parameter band index to SPAR FB band index */ + const int8_t useLowerBandRes, /* i : flag indicating lower band resolution for DirAC */ + const int16_t enc_param_start_band, /* i : band index of first DirAC parameter band */ + IVAS_FB_MIXER_HANDLE hFbMdft +); + +ivas_error ivas_dirac_sba_config( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + int16_t *nchan_transport, /* o : number of transport channel needed for MASA format */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE, /* o : number of CPEs */ + int16_t *element_mode, /* o : element mode of the core coder */ + int32_t sba_total_brate, /* i : SBA total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t sba_planar, /* i : SBA planar flag */ + const SBA_MODE sba_mode, /* i : SBA mode */ + const int16_t nbands /* i : number of frequency bands */ +); + +/*! r: number of IVAS transport channels */ +int16_t ivas_dirac_getNumTransportChannels( + const int32_t sba_total_brate, /* i : SBA total bitrate */ + const int16_t sba_order, /* i : SBA order */ + const int16_t sba_planar /* i : SBA Planar flag */ +); + +ivas_error ivas_dirac_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error ivas_dirac_dec_config( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const DIRAC_CONFIG_FLAG flag_configopen /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ +); + +void ivas_dirac_dec_close( + DIRAC_DEC_HANDLE hDirAC /* i/o: decoder DirAC handle */ +); + +void ivas_dirac_dec_read_BS( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + Decoder_State *st, /* i/o: decoder Core state structure */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q metadata */ + int16_t *nb_bits, /* o : number of bits read */ + const SBA_MODE sba_mode, /* i : SBA mode */ + int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +); + +void ivas_dirac_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int16_t nchan_transport, /* i : number of transport channels */ + float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], + float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], + const int16_t i_sf +); + +ivas_error ivas_dirac_dec_init_binaural_data( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_dirac_dec_close_binaural_data( + DIRAC_DEC_BIN_HANDLE *hBinaural /* i/o: decoder DirAC binaural data handle */ +); + +void ivas_dirac_dec_binaural( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int16_t nchan_transport /* i : number of transport channels */ +); + +ivas_error ivas_binaural_reverb_open( + REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ + const int16_t numBins, /* i : number of CLDFB bins */ + const int16_t numCldfbSlotsPerFrame /* i : number of CLDFB slots per frame, i.e., reverberator block size */ +); + +void ivas_binaural_reverb_close( + REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ +); + +void ivas_binaural_reverb_setReverbTimes( + REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ + const int32_t output_Fs, /* i : sampling_rate */ + const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ + const float *revEnes /* i : spectrum for reverberated sound at each CLDFB bin */ +); + +void ivas_binaural_reverb_setPreDelay( + REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ + const int16_t delaySamples /* i : reverb pre-delay in CLDFB slots */ +); + +void ivas_binaural_reverb_processFrame( + REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ + const int16_t numInChannels, /* i : num input channels to be processed */ + float inReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : input CLDFB data real */ + float inImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : input CLDFB data imag */ + float outReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : output CLDFB data real */ + float outImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : output CLDFB data imag */ + const uint8_t offsetSamplesIO /* i : number of offset samples */ +); + +void computeDiffuseness_mdft( + float **buffer_intensity[DIRAC_NUM_DIMS], + const float *buffer_energy, + const int16_t num_freq_bands, + const uint16_t no_col_avg_diff, + float *diffuseness +); + +void computeDirectionVectors( + float *intensity_real_x, + float *intensity_real_y, + float *intensity_real_z, + const int16_t enc_param_start_band, + const int16_t num_frequency_bands, + float *direction_vector_x, + float *direction_vector_y, + float *direction_vector_z +); + +void computeDiffuseness( + float *buffer_intensity[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF], + const float *buffer_energy, + const int16_t num_freq_bands, + float *diffuseness +); + +void ivas_dirac_dec_onset_detection_open( + const int16_t num_channels, + const int16_t num_freq_bands, + const int16_t max_band_decorr, + DIRAC_ONSET_DETECTION_PARAMS *ph_dirac_onset_detection_params, + DIRAC_ONSET_DETECTION_STATE *ph_dirac_onset_detection_state +); + +void ivas_dirac_dec_onset_detection_process( + const float *input_power_f, + float *onset_filter, + const int16_t num_protos_diff, + DIRAC_ONSET_DETECTION_PARAMS h_dirac_onset_detection_params, + DIRAC_ONSET_DETECTION_STATE h_dirac_onset_detection_state +); + +void ivas_dirac_dec_decorr_open( + DIRAC_DECORR_PARAMS **ph_freq_domain_decorr_ap_params, + DIRAC_DECORR_STATE **ph_freq_domain_decorr_ap_state, + const int16_t num_freq_bands, + int16_t num_outputs_diff, + const int16_t num_protos_diff, + const DIRAC_SYNTHESIS_CONFIG synthesisConf, + float *frequency_axis, + const int16_t nchan_transport, /* i : number of transport channels */ + const int32_t output_Fs /* i : output sampling rate */ +); + +void ivas_dirac_dec_decorr_process( + const int16_t num_freq_bands, + int16_t num_channels, + const int16_t num_protos_diff, + const DIRAC_SYNTHESIS_CONFIG synthesisConf, + const int16_t nchan_transport, /* i : number of transport channels */ + const float *input_frame_f, + const int16_t num_protos_dir, + const int16_t *proto_index_dir, + float *frame_dec_f, + float *onset_filter, + HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params, + HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state +); + +void ivas_dirac_dec_decorr_close( + HANDLE_DIRAC_DECORR_PARAMS *ph_dirac_decorr_params, + HANDLE_DIRAC_DECORR_STATE *ph_dirac_decorr_state +); + + +void ivas_dirac_dec_output_synthesis_open( + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const RENDERER_TYPE renderer_type, /* i : renderer type */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int32_t output_Fs /* i : output sampling rate */ +); + +void ivas_dirac_dec_output_synthesis_init( + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const int16_t nchan_out_woLFE /* i : number of output audio channels without LFE */ +); + +void ivas_dirac_dec_output_synthesis_close( + DIRAC_DEC_HANDLE hDirAC /* i/o: DirAC handle */ +); + +void ivas_dirac_dec_output_synthesis_process_slot( + const float *reference_power, /* i : Estimated power */ + const float *onset, /* i : onset filter */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const float *p_Rmat, /* i : rotation matrix */ + const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ + const IVAS_OUTPUT_SETUP hOutSetup, /* i : output setup structure */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t index_slot +); + +void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const int16_t nchan_transport, /* i : number of transport channels */ + const float *onset_filter +); + +void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + float *reference_power_smooth + , float qualityBasedSmFactor +); + +void ivas_dirac_dec_get_response( + const int16_t azimuth, + const int16_t elevation, + float *response, + const int16_t ambisonics_order +); + +void compute_hoa_encoder_mtx( + const float *azimuth, + const float *elevation, + float *response, + const int16_t num_responses, + const int16_t ambisonics_order ); + +void ivas_dirac_dec_compute_gain_factors( + const int16_t num_freq_bands, + const float *diffuseness, + const int16_t max_band_decorr, + float *direct_gain_factor, + float *diffuse_gain_factor +); + +void ivas_dirac_dec_compute_power_factors( + const int16_t num_freq_bands, + const float *diffuseness, + const int16_t max_band_decorr, + float *direct_power_factor, + float *diffuse_power_factor +); + +void ivas_dirac_dec_compute_directional_responses( + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ + const MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ + const int16_t direction_idx, /* i : index for direction (azi and ele) */ + const int16_t subframe_idx, /* i : subframe index */ + const float *surCohRatio, + const int16_t shd_rot_max_order, /* i : split-order rotation method */ + const float *p_Rmat /* i : rotation matrix */ +); + +void ivas_dirac_dec_get_frequency_axis( + float *frequency_axis, /* o : array of center frequencies of a real filter bank */ + const int32_t output_Fs, /* i : sampling frequency */ + const int16_t num_freq_bands ); /* i : number of frequency bands */ + +void ivas_param_mc_metadata_open( + const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ + const int16_t lfe_index, /* i : channel index of LFE */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* o : handle for the Parametric MC parameter coding state */ +); + +void ivas_param_mc_set_coded_bands( + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: handle for the Parametric MC parameter coding state */ +); + +void ivas_param_mc_metadata_close( + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: handle for the Parametric MC parameter coding state */ +); + +void ivas_param_mc_create_full_icc_mapping( + const int16_t n_channels, /* i : number of channels with LFE for the internal setup */ + const int16_t lfe_index, /* i : channel index of the LFE */ + int16_t *icc_map[2], /* o : map of all possible ICCs */ + int16_t *icc_map_size_full /* o : number of all possible ICCs */ +); + +/*! r: number of IVAS transport channels */ +int16_t ivas_param_mc_getNumTransportChannels( + const int32_t ivas_total_bitrate, /* i : IVAS total bitrate */ + const MC_LS_SETUP mc_ls_setup /* i : MC ls setup */ +); + +ivas_error ivas_param_mc_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +); + +void ivas_param_mc_enc_close( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + const int32_t input_Fs /* i : input sampling rate */ +); + +void ivas_param_mc_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ + float data_f[][L_FRAME48k], /* i/o: input: CICP6, CICP12, CICP14, CICP16 or CICP19 MC data */ + const int16_t input_frame /* i : input frame length */ +); + +ivas_error ivas_param_mc_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_param_mc_dec_close( + PARAM_MC_DEC_HANDLE *hParamMC /* i/o: Parametric MC decoder handle */ +); + +void ivas_param_mc_dec_read_BS( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + Decoder_State *st, /* i/o: decoder state structure */ + PARAM_MC_DEC_HANDLE hParamMC, /* i/o: decoder ParamMC handle */ + int16_t *nb_bits /* o : number of bits written */ +); + +void ivas_param_mc_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ +); + +void ivas_param_mc_default_icc_map( + const PARAM_MC_ICC_MAPPING * hIccMapping, /* i : handle to ICC mapping configuration */ + int16_t icc_map[PARAM_MC_SZ_ICC_MAP][2] /* o : copy of map from the configuration */ +); + +/*! r: number of cldfb synthesis instances */ +int16_t param_mc_get_num_cldfb_syntheses( + Decoder_Struct *st_ivas /* i : IVAS decoder structure */ +); + +/*! r: index into the ParamMC configuration tables */ +uint16_t ivas_param_mc_get_configuration_index( + const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ + const int32_t ivas_total_brate /* i : total bitrate */ +); + +int16_t matrix_product( + const float *X, /* i : left hand matrix */ + const int16_t rowsX, /* i : number of rows of the left hand matrix */ + const int16_t colsX, /* i : number of columns of the left hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the left hand matrix prior to the multiplication */ + const float *Y, /* i : right hand matrix */ + const int16_t rowsY, /* i : number of rows of the right hand matrix */ + const int16_t colsY, /* i : number of columns of the right hand matrix */ + const int16_t transpY, /* i : flag indicating the transposition of the right hand matrix prior to the multiplication */ + float *Z /* o : resulting matrix after the matrix multiplication */ +); + +void mat2svdMat( + const float *mat, /* i : matrix as column ordered vector */ + float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* o : matrix as two-dimensional arry */ + const int16_t nRows, /* i : number of rows of the matrix */ + const int16_t mCols, /* i : number of columns of the matrix */ + const int16_t transpose /* i : flag indication transposition */ +); + +void svdMat2mat( + float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* i : matrix as two-dimensional arry */ + float *mat, /* o : matrix as column ordered vector */ + const int16_t nRows, /* i : number of rows of the matrix */ + const int16_t mCols /* i : number of columns of the matrix */ +); + +int16_t matrix_diag_product( + const float *X, /* i : left hand matrix */ + const int16_t rowsX, /* i : number of rows of the left hand matrix */ + const int16_t colsX, /* i : number of columns of the left hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the left hand matrix prior to the multiplication */ + const float *Y, /* i : right hand diagonal matrix as vector containing the diagonal elements */ + const int16_t entriesY, /* i : number of entries in the diagonal */ + float *Z /* o : resulting matrix after the matrix multiplication */ +); + +int16_t diag_matrix_product( + const float *Y, /* i : left hand diagonal matrix as vector containing the diagonal elements */ + const int16_t entriesY, /* i : length of the diagonal of the left hand matrix */ + const float *X, /* i : right hand matrix */ + const int16_t rowsX, /* i : number of rows of the right hand matrix */ + const int16_t colsX, /* i : number of columns of the right hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the right hand matrix prior to the multiplication */ + float *Z /* o : resulting matrix after the matrix multiplication */ +); + +int16_t matrix_product_diag( + const float *X, /* i : left hand matrix */ + const int16_t rowsX, /* i : number of rows of the left hand matrix */ + const int16_t colsX, /* i : number of columns of the left hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the left hand matrix prior to the multiplication */ + const float *Y, /* i : right hand matrix */ + const int16_t rowsY, /* i : number of rows of the right hand matrix */ + const int16_t colsY, /* i : number of columns of the right hand matrix */ + const int16_t transpY, /* i : flag indicating the transposition of the right hand matrix prior to the multiplication */ + float *Z /* o : resulting matrix after the matrix multiplication */ +); + +void cmplx_matrix_square( + const float *realX, /* i : real part of the matrix */ + const float *imagX, /* i : imaginary part of the matrix */ + const int16_t mRows, /* i : number of rows of the matrix */ + const int16_t nCols, /* i : number of columns of the matrix */ + float *realZ, /* o : real part of the resulting matrix */ + float *imagZ /* o : imaginary part of the resulting matrix */ +); + +int16_t computeMixingMatrices( + const int16_t num_inputs, /* i : number of input channels */ + const int16_t num_outputs, /* i : number of output channels */ + const float *Cx, /* i : input channel covariance matrix */ + const float *Cy, /* i : target covariance matrix */ + const float *Q, /* i : prototype matrix (usually a upmix matrix) */ + const int16_t energy_compensation_flag, /* i : flag indicating that the energy compensation should be performed (i.e. no residual mixing matrix will follow) */ + const float reg_Sx, /* i : regularization factor for the input channel singular values */ + const float reg_ghat, /* i : regularization factor for the normalization matrix */ + float *mixing_matrix, /* o : resulting mixing matrix */ + float *Cr /* o : residual covariance matrix */ +); + +int16_t computeMixingMatricesResidual( + const int16_t num_outputs, /* i : number of output channels */ + const float *Cx, /* i : vector containing the diagonal diffuse prototype covariance */ + const float *Cy, /* i : matrix containing the missing cov (Cr from computeMixingMatrices()) */ + const float reg_Sx, /* i : regularization factor for the input channel singular values */ + const float reg_ghat, /* i : regularization factor for the normalization matrix */ + float *mixing_matrix /* o : resulting residual mixing matrix */ +); + +/* !r: error or success */ +int16_t svd( + float InputMatrix[][MAX_OUTPUT_CHANNELS], /* i : matrix to be decomposed (M) */ + float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* o : left singular vectors (U) */ + float singularValues[MAX_OUTPUT_CHANNELS], /* o : singular values vector (S) */ + float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* o : right singular vectors (V) */ + const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ + const int16_t nChannelsC /* i : number of columns in the matrix to be decomposed */ +); + +void ivas_dirac_dec_output_synthesis_cov_open( + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i/o: handle for the covariance synthesis parameters */ + DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: handle for the covariance synthesis state */ + const int16_t max_band_decorr, /* i : uppermost frequency band where decorrelation is applied */ + const int16_t interp_length, /* i : length for interpolating the mixing matrices in time slots */ + const int16_t num_param_bands, /* i : number of parameter bands */ + const int16_t num_param_bands_residual, /* i : number of parameter bands with a residual mixing matrix (i.e. decorrelation */ + const int16_t nchan_in, /* i : number of input (transport) channels */ + const int16_t nchan_out, /* i : number of output channels */ + const float *proto_matrix /* i : the prototype (upmix) matrix (only used if mode == 1) */ +); + +void ivas_dirac_dec_output_synthesis_cov_init( + DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: pointer to the state of the covariance synthesis */ + const int16_t nchan_in, /* i : number of input (tranport) channels */ + const int16_t nchan_out, /* i : number of output channels */ + const int16_t n_param_bands, /* i : number of total parameter bands */ + const int16_t n_param_bands_res /* i : number of parameter bands with a residual mixing matrix (i.e. decorrelation */ +); + +void ivas_dirac_dec_output_synthesis_cov_close( + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i : handle for the covariance synthesis parameters */ + DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state /* i/o: handle for the covariance synthesis state */ +); + +void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot( + float RealBuffer[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (real part) */ + float ImagBuffer[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (imaginary part */ + float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (real part) */ + float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (imaginary part) */ + PARAM_MC_DEC_HANDLE hParamMC, /* i : handle to Parametric MC state */ + const int16_t nchan_in, /* i : number of input channels */ + const int16_t idx_slot /* i : index of the slot to be added to the input covariance */ +); + +void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot( + float Cldfb_RealBuffer_in[][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (real part) */ + float Cldfb_ImagBuffer_in[][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (imaginary part) */ + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : output channel filter bank samples (real part) */ + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : output channel filter bank samples (imaginary part) */ + float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], /* i : parameter band wise mixing matrices (direct part) */ + float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], /* i : parameter band wise mixing matrices (residual part) */ + const uint16_t slot_idx_sfr, /* i : time slot index for the current slot within the current subframe */ + const uint16_t slot_idx_tot, /* i : time slot index for the current slot within the frame */ + const int16_t nX, /* i : number of input channels */ + const int16_t nY, /* i : number of output channels */ + PARAM_MC_DEC_HANDLE hMetadataPMC /* i : handle to the Parametric MC decoder state */ +); + +int16_t computeMixingMatricesISM( + const int16_t num_inputs, + const int16_t num_responses, + const int16_t num_outputs, + const float *responses, + const float *ener, + const float *Cx_diag, + const float *Cy_diag, + const float *Q, + const int16_t energy_compensation_flag, + const float reg_Sx, + const float reg_ghat, + float *mixing_matrix +); + +void FdCngEncodeDiracMDCTStereoSID( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ +); + +void FdCngDecodeDiracMDCTStereoSID( + CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ +); + + +/*----------------------------------------------------------------------------------* + * SPAR prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_spar_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +); + +void ivas_spar_enc_close( + SPAR_ENC_HANDLE hSpar, /* i/o: SPAR encoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +); + +ivas_error ivas_spar_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data_f[][L_FRAME48k], /* i/o: input/transport audio channels */ + const int16_t input_frame, /* i : input frame length */ + int16_t *nb_bits_metadata, /* i : number of MD bits written */ + BSTR_ENC_HANDLE hMetaData /* o : MetaData handle */ +); + +ivas_error ivas_spar_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +); + +void ivas_spar_dec_close( + SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ + const int32_t output_Fs /* i : output sampling rate */ +); + +ivas_error ivas_spar_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + int16_t *nb_bits_read /* o : number of MD bits read */ +); + +void ivas_spar_config( + int32_t ivas_total_brate, /* i : codec total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + int16_t *nchan_transport, /* o : number of transport channels */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE, /* o : number of CPEs */ + int32_t *core_nominal_brate, /* o : core-coding nominal bitrate */ + const int16_t sid_format /* i : IVAS format indicator from SID frame */ +); + +void ivas_sba_upmixer_renderer( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float output[][L_FRAME48k], /* i/o: transport/output audio channels */ + const int16_t nchan_remapped, /* i : num channels after remapping of TCs */ + const int16_t output_frame /* i : output frame length */ +); + +void ivas_sba_mix_matrix_determiner( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float in_out[][L_FRAME48k], /* i/o: transport/output audio channels */ + const int16_t nchan_remapped, /* i : num channels after remapping of TCs */ + const int16_t output_frame /* i : output frame length */ +); + +void ivas_sba_prototype_renderer( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i: Input audio in CLDFB domain, real */ + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i: Input audio in CLDFB domain, imag */ + const int16_t firstSubframe, /* i: First subframe to map */ + const int16_t nSubframes /* i: Number of subframes to map */ +); + +/* AGC */ +ivas_error ivas_spar_agc_enc_open( + ivas_agc_enc_state_t **hAgcEnc, /* i/o: AGC decoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +); + +void ivas_spar_agc_enc_close( + ivas_agc_enc_state_t **hAgcEnc /* i/o: AGC encoder handle */ +); + +void ivas_agc_enc_process( + ivas_agc_enc_state_t *hAgcEnc, /* i/o: AGC encoder handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + float **ppPcm_in, /* i : input audio channels */ + float **ppPcm_out, /* o : output audio channels */ + const int16_t n_channels, /* i : number of channels */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +); + +ivas_error ivas_spar_agc_dec_open( + ivas_agc_dec_state_t **hAgcDec, /* i/o: AGC decoder handle */ + const int32_t output_Fs /* i : output sampling rate */ +); + +void ivas_spar_agc_dec_close( + ivas_agc_dec_state_t **hAgcDec /* i/o: AGC decoder handle */ +); + +void ivas_agc_dec_process( + ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ + float pcm_in[][L_FRAME48k], /* i : input audio channels */ + float pcm_out[][L_FRAME48k], /* o : output audio channels */ + const int16_t n_channels, /* i : number of channels */ + const int16_t output_Fs /* i : output sampling rate */ +); + +void ivas_agc_read_bits( + ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const int16_t n_channels, /* i : number of channels */ + const int16_t AGC_flag /* i : AGC on/off flag */ +); + +void ivas_agc_initWindowFunc( + float *pWinFunc, + const int16_t length +); + +void ivas_agc_calcGainParams( + uint16_t *absEmin, + uint16_t *betaE, + uint16_t *maxAttExp, + const int16_t numCoeffs +); + +float ivas_get_mdct_scaling_gain( + const int16_t dct_len_by_2 +); + +void ivas_get_twid_factors( + const int16_t length, + const float **pTwid_re, + const float **pTwid_im +); + +int16_t ivas_get_bw_idx_from_sample_rate( + const int32_t sampling_rate /* i : sampling rate */ +); + +/* !r: config. table index */ +int16_t ivas_get_spar_table_idx( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order, /* i : IVAS SBA order */ + const int16_t bwidth, /* i : audio bandwidth */ + int16_t *bitlen, /* o : number of bits */ + int16_t *ind /* o : indice */ +); + +int16_t ivas_get_spar_num_TCs( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order /* i : IVAS SBA order */ +); + +void ivas_spar_set_bitrate_config( + ivas_spar_foa_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ + const int16_t table_idx, /* i : config. table index */ + const int16_t num_bands /* i : number of bands */ +); + +#ifdef FIX_I1_113 +void ivas_spar_bitrate_dist( + int32_t core_brates_act[], /* o : bitrates per core-coder */ + const int16_t nAvailBits, /* i : number of available bits */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t bwidth /* i : audio bandwidth */ +); +#endif + +void ivas_mdct( const float *pIn, float *pOut, const int16_t length ); +void ivas_dct_windowing( const int16_t fade_len, const int16_t full_len, const int16_t dct_len, const int16_t zero_pad_len, const float *pWindow_coeffs, const int16_t frame_len, float *pOut_buf, float *pBuffer_prev, float *pTemp_lfe ); +void ivas_tda( const float *pIn, float *pOut, const int16_t length ); +void ivas_imdct( const float *pIn, float *pOut, const int16_t length ); +void ivas_itda( const float *re, float *pOut, const int16_t length ); + +/* FOA module */ +ivas_error ivas_spar_foa_enc_open( + ivas_spar_foa_enc_state_t **hSparFoa, /* i/o: SPAR FOA encoder handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +); + +void ivas_spar_foa_enc_close( + ivas_spar_foa_enc_state_t **hSparFoa, /* i/o: SPAR FOA encoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +); + +ivas_error ivas_spar_foa_enc_process( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + const int16_t front_vad_flag, /* i : front-VAD decision */ + float ppPcm_in[][L_FRAME48k] /* i/o: input/transport audio channels */ +); + +ivas_error ivas_spar_foa_dec_open( + ivas_spar_foa_dec_state_t **hSparFoa, /* i/o: SPAR FOA decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t nchan_internal /* i : number of internal channels */ +); + +void ivas_spar_get_cldfb_gains( + ivas_spar_foa_dec_state_t *hSparFoa, + HANDLE_CLDFB_FILTER_BANK cldfbAnaDec0, + HANDLE_CLDFB_FILTER_BANK cldfbSynDec0, + const DECODER_CONFIG_HANDLE hDecoderConfig +); + +void ivas_spar_foa_dec_close( + ivas_spar_foa_dec_state_t **hSparFoa, /* i/o: SPAR FOA decoder handle */ + const int32_t output_Fs /* i : output sampling rate */ +); + +/* !r: 1 if prediction residual channel */ +int16_t ivas_is_res_channel( + const int16_t ch, /* i : ch index in WYZX ordering */ + const int16_t nchan_transport /* i : number of transport channels (1-4) */ +); + +void ivas_spar_foa_dec_upmixer( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output[][L_FRAME48k], /* i/o: input/output audio channels */ + const int16_t nchan_internal, /* i : number of internal channels */ + const int16_t output_frame /* i : output frame length */ +); + +/* FOA MD module */ +ivas_error ivas_spar_foa_md_enc_open( + ivas_spar_foa_md_enc_state_t **hMdEnc, /* i/o: SPAR MD encoder handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +); + +void ivas_spar_foa_md_enc_close( + ivas_spar_foa_md_enc_state_t **hMdEnc /* i/o: SPAR MD encoder handle */ +); + +ivas_error ivas_spar_foa_md_enc_process( + ivas_spar_foa_md_enc_state_t *hMdEnc, /* i/o: SPAR MD encoder handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + ivas_spar_foa_md_enc_in_buf_t *pIn_buf, + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + const int16_t dtx_silence_mode +); + +void ivas_compute_spar_params( + float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + const int16_t i_ts, + float ***mixer_mat, + const int16_t start_band, + const int16_t end_band, + const int16_t dtx_vad, + const int16_t num_ch, + const int16_t bands_bw, + const int16_t active_w, + ivas_spar_foa_md_com_cfg *hSparCfg, + ivas_spar_md_t *hSparMd, + float *pWscale, + const int16_t from_dirac +); + +void ivas_create_fullr_dmx_mat( + float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + float dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + float ***mixer_mat, + const int16_t in_chans, + const int16_t start_band, + const int16_t end_band, + const int16_t active_w, + ivas_spar_foa_md_com_cfg *hMdCfg +); + +void ivas_calc_c_p_coeffs( + ivas_spar_md_t *pSparMd, + float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const int16_t i_ts, + float ***mixer_mat, + const int16_t num_ch, + const int16_t num_dmx, + const int16_t band_idx, + const int16_t dtx_vad, + const int16_t compute_p_flag, + const int16_t planarCP +); + +void ivas_get_spar_md_from_dirac( + float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float diffuseness[IVAS_MAX_NUM_BANDS], + const int16_t n_ts, + float ***mixer_mat, + ivas_spar_md_t *hSpar_md, + ivas_spar_foa_md_com_cfg *hSpar_md_cfg, + const int16_t start_band, + const int16_t end_band, + const int16_t order, + const int16_t dtx_vad, + float Wscale_d[IVAS_MAX_NUM_BANDS] +); + +ivas_error ivas_spar_foa_md_dec_open( + ivas_spar_foa_md_dec_state_t **hMdDec_out, /* i/o: SPAR MD decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t num_channels /* i : number of internal channels */ +); + +void ivas_spar_foa_md_dec_close( + ivas_spar_foa_md_dec_state_t **hMdDec /* i/o: SPAR MD decoder handle */ +); + +void ivas_spar_foa_dec_MD( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + Decoder_State *st0 /* i/o: decoder state structure - for bitstream handling*/ +); + +void ivas_spar_get_parameters( + ivas_spar_foa_dec_state_t *hSparFoa, /* i/o: SPAR FOA decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t ts, /* i : time slot index */ + const int16_t num_ch_out, /* i : number of channels out */ + const int16_t num_ch_in, /* i : number of channels in */ + const int16_t num_spar_bands, /* i : number of SPAR bands */ + float par_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS] /* o : mixing matrix */ +); + +ivas_error ivas_spar_foa_md_dec_init( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t num_channels /* i : number of internal channels */ +); + +void ivas_spar_foa_md_dec_process( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const int16_t num_bands_out, /* i : number of output bands */ + const int16_t sba_order /* i : SBA order */ +); + +void ivas_spar_to_dirac( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t dtx_vad, /* i : DTX frame flag */ + const int16_t num_bands_out /* i : number of output bands */ +); + +void ivas_spar_foa_update_md_hist( + ivas_spar_foa_md_dec_state_t *hMdDec /* i/o: SPAR MD decoder handle */ +); + +void ivas_spar_foa_smooth_md_dtx( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t num_bands_out /* i : number of output bands */ +); + +void ivas_spar_foa_setup_md_smoothing( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t num_bands_out /* i : number of output bands */ +); + +void ivas_spar_foa_dec_gen_umx_mat( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t num_bands_out, /* i : number of output bands */ + const int16_t bfi /* i : bad frame indicator */ +); + +/* Covariance module */ +ivas_error ivas_spar_covar_enc_open( + ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +); + +void ivas_spar_covar_enc_close( + ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ + const int16_t nchan_inp /* i : number of input channels */ +); + +void ivas_enc_cov_handler_process( + ivas_enc_cov_handler_state_t *hCovEnc, /* i/o: SPAR Covar. encoder handle */ + ivas_enc_cov_handler_in_buf_t *pIn_buf, + float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int16_t start_band, + const int16_t end_band ); + +ivas_error ivas_spar_covar_smooth_enc_open( + ivas_cov_smooth_state_t **hCovState, /* i/o: SPAR Covar. smoothing handle */ + const ivas_cov_smooth_cfg_t *cov_smooth_cfg, /* i : SPAR config. handle */ + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int16_t nchan_inp /* i : number of input channels */ +); + +void ivas_spar_covar_smooth_enc_close( + ivas_cov_smooth_state_t **hCovState, /* i/o: SPAR Covar. encoder handle */ + const int16_t nchan_inp /* i : number of input channels */ +); + +void ivas_cov_smooth_process( + ivas_cov_smooth_state_t *hCovState, /* i/o: Covariance state handle */ + ivas_cov_smooth_in_buf_t *pIn_buf, + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int16_t start_band, + const int16_t end_band +); + +/* Transient detector module */ +ivas_error ivas_spar_transient_det_open( + ivas_trans_det_state_t **hTranDet, /* i/o: SPAR TD handle */ + const int32_t sampling_rate /* i : sampling rate */ +); + +void ivas_spar_transient_det_close( + ivas_trans_det_state_t **hTranDet /* i/o: SPAR TD handle */ +); + +int16_t ivas_transient_det_process( + ivas_trans_det_state_t *hTranDet, /* i/o: SPAR TD handle */ + float *pIn_pcm, /* i : input audio channels */ + const int16_t frame_len /* i : frame length in samples */ +); + +void ivas_td_decorr_get_ducking_gains( + ivas_trans_det_state_t *hTranDet, /* i/o: SPAR TD handle */ + float *pIn_pcm, + float *pIn_duck_gains, + float *pOut_duck_gains, + const int16_t frame_len, + const int16_t tdet_flag +); + +ivas_error ivas_spar_td_decorr_dec_open( + ivas_td_decorr_state_t **hTdDecorr, /* i/o: SPAR Covar. decoder handle */ + const int32_t output_Fs, /* i : output sampling rate */ + const int16_t nchan_internal, /* i : number of internal channels */ + const int16_t ducking_flag /* i : ducking flag */ +); + +void ivas_spar_td_decorr_dec_close( + ivas_td_decorr_state_t **hTdDecorr /* i/o: SPAR Covar. decoder handle */ +); + +void ivas_td_decorr_process( + ivas_td_decorr_state_t *hTdDecorr, /* i/o: SPAR Covar. decoder handle */ + float pcm_in[][L_FRAME48k], /* i : input audio channels */ + float **ppOut_pcm, /* o : output audio channels */ + const int16_t output_frame /* i : output frame length */ +); + + +#define IVAS_CMULT_FLOAT( in1_re, in1_im, in2_re, in2_im, out1_re, out1_im ) \ + out1_re = ( in1_re * in2_re ) - ( in1_im * in2_im ); MAC(1); MULT(1); \ + out1_im = ( in1_re * in2_im ) + ( in2_re * in1_im ); MAC(1); MULT(1); + +#define IVAS_CALCULATE_ABS( re, im, out ) \ + out = (float) sqrt( ( re * re ) + ( im * im ) ); MAC(1); MULT(1); SQRT(1); + +#define IVAS_CALCULATE_RABS( re, out ) \ + out = (float) sqrt( re * re ); MULT(1); SQRT(1); + +#define IVAS_CALCULATE_SQ_ABS( re, im, out ) \ + out = (float) ( ( re * re ) + ( im * im ) ); MAC(1); MULT(1); + +#define IVAS_RMULT_DOUBLE( in1_re, in2_re, out1_re ) \ + out1_re = ( in1_re * in2_re ); DMULT(1); \ + +#define IVAS_CALCULATE_SQ_ABS_N( re, out ) \ + out = (float) ( re * re ); MULT(1); + +#define IVAS_RMULT_FLOAT( in1_re, in2_re, out1_re ) \ + out1_re = ( in1_re * in2_re ); MULT(1); + + +/* PCA */ +void init_pca_enc( + PCA_ENC_STATE *hPCA /* i/o: PCA encoder structure */ +); + +void ivas_pca_enc( + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + PCA_ENC_STATE *hPCA, /* i : PCA encoder structure */ + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + float *data_f[8], /* i : input/transformed audio channels */ + const int16_t input_frame, /* i : input frame length */ + const int16_t n_channels /* i : number of channels */ +); + +void ivas_pca_read_bits( + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + PCA_DEC_STATE *hPCA /* i/o: PCA encoder structure */ +); + +void init_pca_dec( + PCA_DEC_STATE *hPCA /* i/o: PCA decoder structure */ +); + +void ivas_pca_dec( + PCA_DEC_STATE *hPCA, /* i/o: PCA decoder structure */ + const int16_t n_samples, /* i : output frame length */ + const int16_t n_channels, /* i : number of channels */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int32_t last_ivas_total_brate, /* i : last IVAS total bitrate */ + const int16_t bfi, /* i : bad frame indicator */ + float pcm_out[][L_FRAME48k] /* o : output audio channels */ +); + +/* PCA utilities */ +void eye_matrix( + float *mat, + const int16_t n, + const float d +); + +void cov_subfr( + float **ptr_sig, + float *r, + const int16_t n_channels, + const int16_t len +); + +void eig_qr( + float *A, + const int16_t num_iter, + float *EV, float *Vals, + const int16_t n +); + +void exhst_4x4( + float *cost_mtx, + int16_t *path, + const int16_t maximize +); + +float mat_det4( + float *m +); + +/* quaternion utilities */ +void mat2dquat( + const float *a, + float *ql, + float *qr +); + +void dquat2mat( + const float *ql, + const float *qr, + float *m +); + +void quat_shortestpath( + const float *q00, + float *q01, + const float *q10, + float *q11 +); + +void pca_interp_preproc( + const float *prev_ql, + const float *prev_qr, + const float *ql, + const float *qr, + const int16_t len, + float *ql_interp, + float *qr_interp +); + +void pca_enc_s3( + float *q, + int32_t *index +); + +void pca_dec_s3( + const int32_t index, + float *q +); + +int16_t ivas_get_bits_to_encode( + int32_t val +); + +void ivas_huffman_encode( ivas_huffman_cfg_t *huff_cfg, int16_t in, int16_t *hcode, int16_t *hlen ); +void ivas_huff_coeffs_enc_init( ivas_huff_coeffs_t *pHuff_coeffs, const int16_t table_idx ); +void ivas_arith_coeffs_enc_init( ivas_arith_coeffs_t *pArith_coeffs, ivas_spar_foa_md_com_cfg *pSpar_cfg, const int16_t table_idx ); +void ivas_arith_encode_cmplx_cell_array(ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, const int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_old_re, ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, const int16_t any_diff); +ivas_error ivas_huffman_decode( ivas_huffman_cfg_t *huff_cfg, Decoder_State *st0, int16_t *dec_out ); +void ivas_arith_decode_cmplx_cell_array( ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, Decoder_State *st0, ivas_cell_dim_t *pCell_dims, int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_re_old ); +void ivas_arith_coeffs_dec_init( ivas_arith_coeffs_t *pArith_coeffs, ivas_spar_foa_md_com_cfg *pSpar_cfg, const int16_t table_idx ); +void ivas_huff_coeffs_dec_init( ivas_huff_coeffs_t *pHuff_coeffs, ivas_spar_foa_md_com_cfg *pSpar_cfg, const int16_t table_idx ); + +void ivas_ari_start_decoding_14bits_ext_1_lfe( Decoder_State *st, Tastat *s, int16_t *extra_bits_read ); +uint16_t ivas_ari_decode_14bits_bit_ext_1_lfe( Decoder_State *st, Tastat *s, const uint16_t *cum_freq, int16_t *extra_bits_read ); +void ivas_ari_done_decoding_14bits_ext_1_lfe( Decoder_State *st, const int16_t extra_bits_read ); +void ivas_ari_done_encoding_14bits( BSTR_ENC_HANDLE hBstr, Tastat *s ); +void ivas_ari_encode_14bits_ext( BSTR_ENC_HANDLE hBstr, Tastat *s, int32_t symbol, const uint16_t *cum_freq ); + +void ivas_wrap_arround( int16_t *pArr, const int16_t min_val, const int16_t max_val, const int16_t length ); +void ivas_get_cum_freq_model( const int16_t *pFreq_model, const int16_t length, int16_t *pCum_freq_model ); + +/* Quantization utilities */ +void ivas_quantise_real_values( + float **values, + const int16_t q_levels, + const float min_value, + const float max_value, + int16_t **index, + float **quant, + const int16_t dim1, + const int16_t dim2 +); + +void ivas_spar_foa_get_uniform_quant_strat( + ivas_spar_foa_md_com_cfg *pSpar_md_com_cfg, + const int16_t table_idx +); + +void ivas_spar_quant_dtx_init( + ivas_spar_md_t *spar_md, + float *min_max +); + +void ivas_map_prior_coeffs_quant( + ivas_spar_md_prev_t *pSpar_md_prior, + ivas_spar_foa_md_com_cfg *pSpar_md_cfg, + const int16_t qsi, + const int16_t nB +); + +void ivas_copy_band_coeffs_idx_to_arr( + ivas_band_coeffs_ind_t *pBands_idx, + const int16_t nB, + int16_t *pSymbol_re, + ivas_cell_dim_t *pCell_dims, + const ivas_coeffs_type_t coeff_type, + const int16_t planarCP +); + +void ivas_clear_band_coeffs( + ivas_band_coeffs_t *pband_coeffs, + const uint16_t num_bands +); + +void ivas_clear_band_coeff_idx( + ivas_band_coeffs_ind_t *pband_coeff_idx, + const uint16_t num_bands +); + + +/*----------------------------------------------------------------------------------* + * MASA prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_masa_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +); + +void ivas_masa_dec_close( + MASA_DECODER_HANDLE hMasa /* i/o: MASA metadata structure */ +); + +ivas_error ivas_masa_decode( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *nb_bits_read /* o : number of bits read */ +); + +void generate_gridEq( + SPHERICAL_GRID_DATA *data /* o : data structure for grid */ +); + +ivas_error ivas_masa_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +); + +void ivas_masa_enc_close( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA metadata structure */ + const int16_t nchan_transport, /* i : Number of transport channels */ + const IVAS_FORMAT ivas_format /* i : IVAS format */ +); + +void ivas_masa_enc_reconfigure( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); + +ivas_error ivas_masa_dec_reconfigure( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_masa_encode( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + int16_t *nb_bits_metadata, /* o : number of metadata bits written */ + const int16_t nchan_transport, /* i : number of MASA input/transport channels */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t Opt_DTX_ON, /* i : DTX on flag */ + const int16_t element_mode /* i : element mode */ +); + +void ivas_masa_estimate_energy( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ + float data_f[][L_FRAME48k], /* i : Input audio channels */ + const int16_t input_frame, /* i : frame length */ + const int16_t nchan_transport /* i : number of MASA input/transport channels */ +); + +ivas_error ivas_masa_enc_config( + Encoder_Struct* st_ivas /* i/o: IVAS encoder structure */ +); + +void ivas_masa_set_elements( + const int32_t ivas_total_brate, /* i : codec total bitrate */ + const int16_t mc_mode, /* i : MC format mode */ + const int16_t nchan_transport, /* i : number of MASA input/transport channels */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + int16_t *element_mode, /* o : element mode */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE /* o : number of CPEs */ +); + +void ivas_masa_set_coding_config( + MASA_CODEC_CONFIG* config, /* i/o: MASA coding config structure */ + int16_t* band_mapping, /* o : Band mapping used */ + const int32_t ivas_total_brate, /* i : codec total bitrate */ + const int16_t nchan_transport, /* i : number of transport channel (mono/stereo) */ + const uint8_t isMcMasa /* i : toggle for selecting McMASA specific config */ +); + +/*! r: Surround coherence significant flag */ +uint8_t ivas_masa_surrcoh_signicant( + float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Surround coherence */ + float diffuse_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Diffuse to total ratio */ + const int16_t nSubFrames, /* i : Number of sub frames */ + const int16_t nBands /* i : Number of frequency bands */ +); + +void masa_compensate_two_dir_energy_ratio_index( + const int16_t ratio_index_1, /* i : Input ratio for direction 1 */ + const int16_t ratio_index_2, /* i : Input ratio for direction 2 */ + int16_t *ratio_index_mod1, /* o : Output modified ratio for direction 1 */ + int16_t *ratio_index_mod2 /* o : Output modified ratio for direction 2 */ +); + +void ivas_set_qmetadata_maxbit_req( + IVAS_QMETADATA_HANDLE hQMetaData, /* o : qmetadata structure where the requirement value is set */ + const IVAS_FORMAT ivas_format /* i : IVAS format */ +); + +/*! r: Bits to be used for quantizing distribution ratio of direct-to-total ratios */ +int16_t ivas_get_df_ratio_bits( + int16_t index_diff /* i : Index of quantized diffuse-to-total ratio */ +); + +void masa_sample_rate_band_correction( + MASA_CODEC_CONFIG *config, /* i/o: MASA codec config */ + int16_t *band_mapping, /* i/o: Band mapping used and modified */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: QMetadata structure for modification */ + const int32_t sampling_rate /* i : sampling rate */ +); + +void invdct4_transform( + float *v, /* i : input vector */ + uint8_t *invdct_v /* o : transformed vector */ +); + +void update_bits_next_block( + IVAS_QDIRECTION *q_direction, /* i/o: qdirection */ + int16_t *p_diff, /* i/o: bits to be transferred */ + const int16_t j, /* i : current subband index */ + const int16_t max_i, /* i : max number of subands */ + const int16_t max_k /* i : max number of subframe */ +); + +void ivas_masa_prerender( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output[][L_FRAME48k], /* i/o: synthesized core-coder transport channels */ + const int16_t output_frame /* i : output frame length per channel */ +); + +void ivas_spar_param_to_masa_param_mapping( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i: Input audio in CLDFB domain, real */ + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i: Input audio in CLDFB domain, imag */ + const int16_t firstSubframe, /* i: First subframe to map */ + const int16_t nSubframes /* i: Number of subframes to map */ +); + + +/*----------------------------------------------------------------------------------* + * output setup prototypes + *----------------------------------------------------------------------------------*/ + +/*! r: number of output channels */ +int16_t audioCfg2channels( + const AUDIO_CONFIG output_config /* i : output audio configuration */ +); + +void ivas_output_init( + IVAS_OUTPUT_SETUP *hOutSetup, /* o : output setup structure */ + const AUDIO_CONFIG output_config /* i : output audio configuration */ +); + + +/*---------------------------------------------------------------------------------* + * Binaural Renderer Prototypes +*-----------------------------------------------------------------------------------*/ + +ivas_error ivas_binRenderer_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_binRenderer_close( + BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: decoder binaural renderer handle */ +); + +void ivas_binaural_cldfb( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ +); + +void ivas_binRenderer( + BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: fastconv binaural renderer handle */ + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ + float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ + float Cldfb_ImagBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ +); + +void ivas_binaural_add_LFE( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + int16_t output_frame, /* i : length of input frame */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ +); + +void QuatToRotMat( + const Quaternion quat, /* i : quaternion describing the rotation */ + float Rmat[3][3] /* o : real-space rotation matrix for this rotation */ +); + +void Quat2Euler( + const Quaternion quat, /* i : quaternion describing the rotation */ + float *yaw, /* o : yaw */ + float *pitch, /* o : pitch */ + float *roll /* o : roll */ +); + +void rotateAziEle( + float azi_in, /* i : output elevation */ + float ele_in, /* i : input elevation */ + int16_t *azi, /* o : rotated azimuth */ + int16_t *ele, /* o : rotated elevation */ + float Rmat[3][3], /* i : real-space rotation matrix */ + const int16_t isPlanar /* i : is roation planar and elevation meaningless? */ +); + +void rotateAziEle_DirAC( + int16_t *azi, /* i/o: array of azimuth values */ + int16_t *ele, /* i/o: array of elevation values */ + const int16_t band1, /* i : bands to work on (lower limit) */ + const int16_t band2, /* i : bands to work on (upper bound) */ + const float *p_Rmat /* i : pointer to real-space rotation matrix */ +); + +ivas_error ivas_headTrack_open( + HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* o : head track handle */ +); + +void rotateFrame_shd( + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i : head track handle */ + float output[][L_FRAME48k], /* i/o: unrotated HOA3 signal buffer in TD */ + const int32_t output_fs, /* i : output sampling frequency */ + const int16_t subframe_len, /* i : subframe length per channel */ + const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ + const int16_t subframe_idx /* i : subframe index */ +); + +void rotateFrame_sd( + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i : head track handle */ + float output[][L_FRAME48k], /* i/o: unrotated SD signal buffer in TD */ + const int32_t output_fs, /* i : output sampling frequency */ + const int16_t subframe_len, /* i : subframe length per channel */ + const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ + const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ + const int16_t subframe_idx /* i : subframe index */ +); + +void rotateFrame_shd_cldfb( + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ + float Rmat[3][3], /* i : real-space rotation matrix */ + const int16_t nInChannels, /* i : number of channels */ + const int16_t shd_rot_max_order /* i : split-order rotation method */ +); + +void rotateFrame_sd_cldfb( + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i : head track handle */ + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ + const IVAS_OUTPUT_SETUP_HANDLE hOutputSetup, /* i : output format setup number of channels */ + const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ + const int16_t nb_band /* i : number of CLDFB bands to process */ +); + + +/*----------------------------------------------------------------------------------* + * renderer prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_ism_renderer_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_ism_render( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: core-coder transport channels/object output */ + const int16_t output_frame /* i : output frame length per channel */ +); + +void ivas_mc2sba( + IVAS_OUTPUT_SETUP hIntSetup, /* i : Format of decoder output */ + float buffer_td[][L_FRAME48k], /* i/o: MC signals (on input) and the HOA3 (on output) */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t sba_order, /* i : SBA order */ + const float gain_lfe /* i : gain for LFE, 0=ignore LFE */ +); + +void ivas_sba2mc_cldfb( + IVAS_OUTPUT_SETUP hInSetup, /* i : Format of input layout */ + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb real part */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb imag part */ + const int16_t nb_channels_out, /* i : nb of output channels */ + const int16_t nb_bands, /* i : nb of CLDFB bands to process */ + const float *hoa_dec_mtx /* i : hoa decoding mtx */ +); + +void ivas_ism2sba( + float buffer_td[][L_FRAME48k], /* i/o: TD signal buffers */ + ISM_RENDERER_HANDLE hIsmRendererData, /* i/o: renderer data */ + const ISM_METADATA_HANDLE hIsmMetaData[], /* i : object metadata */ + const int16_t num_objects, /* i : number of objects */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t sba_order /* i : SBA order */ +); + + +/*----------------------------------------------------------------------------------* + * Amplitude Panning (EFAP, VBAP) prototypes + *----------------------------------------------------------------------------------*/ + +void panning_wrap_angles( + const float azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ + const float ele_deg, /* i : elevation in degrees for panning direction (positive up) */ + float *azi_wrapped, /* o : wrapped azimuth component */ + float *ele_wrapped /* o : wrapped elevation component */ +); + +ivas_error efap_init_data( + EFAP_HANDLE *hEFAPdata, /* i/o: handle for EFAP data structure that will be initialized */ + const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ + const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ + const int16_t num_speaker_nodes, /* i : number of speaker nodes in the set */ + const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ +); + +void efap_free_data( + EFAP_HANDLE *hEFAPdata /* i/o: EFAP handle to be freed */ +); + +void efap_determine_gains( + EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ + float *gains, /* o : gain vector for speaker nodes for given direction */ + const float azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ + const float ele_deg, /* i : elevation in degrees for panning direction (positive up) */ + const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ +); + +ivas_error vbap_init_data( + VBAP_HANDLE *hVBAPdata, /* i/o: handle for VBAP data structure that will be initialized */ + const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ + const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ + const int16_t num_speaker_nodes /* i : number of speaker nodes in the set */ +); + +void vbap_free_data( + VBAP_HANDLE *hVBAPdata /* i/o: VBAP handle to be freed */ +); + +void vbap_determine_gains( + const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ + float *gains, /* o : gain vector for speaker nodes for given direction */ + const int16_t azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ + const int16_t ele_deg /* i : elevation in degrees for panning direction (positive up) */ +); + +void v_sort_ind( + float *x, /* i/o: Vector to be sorted */ + int16_t *idx, /* o : Original index positions */ + const int16_t len /* i : vector length */ +); + +/*----------------------------------------------------------------------------------* + * LS Renderer prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_ls_setup_conversion_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_ls_setup_conversion_close( + LSSETUP_CONVERSION_HANDLE *hLsSetUpConversion /* i/o: LS converter handle */ +); + +void ivas_ls_setup_conversion( + Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ + const int16_t output_frame, /* i : frame length */ + float output[][L_FRAME48k] /* i/o: LS input/output synthesis signal */ +); + +void ivas_ls_setup_conversion_process_mdct( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k] /* i/o: output synthesis signal */ +); + +void ivas_ls_setup_conversion_process_mdct_param_mc( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float *x[][NB_DIV] /* i/o: output synthesis signal */ +); + +void ivas_lssetupconversion_process_param_mc( + Decoder_Struct *st_ivas, /* i/o: LS setup conversion renderer handle */ + float Cldfb_RealBuffer_InOut[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i/o: LS signals */ + float Cldfb_ImagBuffer_InOut[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i/o: LS signals */ + int16_t channel_active[MAX_CICP_CHANNELS] /* i : bitmap indicating which output channels are active */ +); + + +/*----------------------------------------------------------------------------------* + * Custom loudspeaker setup prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_ls_custom_open( + LSSETUP_CUSTOM_HANDLE *hLsSetupCustom /* o : Custom loudspeaker setup handle */ +); + +ivas_error ivas_ls_custom_output_init( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +); + +void ivas_ls_custom_setup( + IVAS_OUTPUT_SETUP_HANDLE hOutSetup, /* o : IVAS output setup handle */ + const LSSETUP_CUSTOM_HANDLE hLsSetupCustom /* i : Custom loudspeaker setup handle */ +); + + +/*----------------------------------------------------------------------------------* + * McMASA prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_mcmasa_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +); + +void ivas_mcmasa_enc_close( + MCMASA_ENC_HANDLE hMcMasa, /* i/o: encoder McMASA handle */ + const int32_t input_Fs /* i : input sampling rate */ +); + +void ivas_mcmasa_setNumTransportChannels( + int16_t* nchan_transport, /* o : Pointer to number of transport channels to be set */ + int16_t* element_mode, /* o : Pointer to element mode to be set */ + const int32_t ivas_total_brate /* i : Total bitrate of IVAS */ +); + +void ivas_mcmasa_set_separate_channel_mode( + uint8_t *separateChannelEnabled, /* o : Pointer to separate channel toggle */ + int16_t *separateChannelIndex, /* o : Pointer to separate channel index */ + const int32_t ivas_total_brate /* i : Total bitrate of IVAS */ +); + +/*! r: McMASA SCE bitrate */ +int32_t ivas_mcmasa_mono_brate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +); + +void ivas_mcmasa_enc( + MCMASA_ENC_HANDLE hMcMasa, /* i/o: Encoder McMASA handle */ + IVAS_QMETADATA_HANDLE hQMeta, /* o : Qmetadata handle */ + MASA_ENCODER_HANDLE hMasa, /* i/o: Encoder MASA handle */ + float data_f[][L_FRAME48k], /* i : Input frame of audio */ + const int16_t input_frame, /* i : Input frame size */ + const int16_t nchan_transport, /* i : Number of transport channels */ + const int16_t nchan_inp /* i : Number of input channels */ +); + +void ivas_mcmasa_param_est_enc( + MCMASA_ENC_HANDLE hMcMasa, /* i/o: Encoder McMASA handle */ + MASA_ENCODER_HANDLE hMasa, /* i/o: Encoder MASA handle */ + float data_f[][L_FRAME48k], /* i : Input frame of audio */ + float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated elevation */ + float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated azimuth */ + float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated direct-to-total ratio */ + float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated spread coherence */ + float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated surround coherence */ + const int16_t input_frame, /* i : Input frame size */ + const int16_t nchan_inp /* i : Number of input channels */ +); + +void v_multc_acc( + const float x[], /* i : Input vector */ + const float c, /* i : Constant */ + float y[], /* o : Output vector that contains y + c*x */ + const int16_t N /* i : Vector length */ +); + +void lls_interp_n( + float x[], /* i/o: input/output vector */ + const int16_t N, /* i : length of the input vector */ + float *a, /* o : calculated slope */ + float *b, /* o : calculated offset */ + int16_t upd /* i : use 1 to update x[] with the interpolated output */ +); + +void computeReferencePower_enc( + const int16_t *band_grouping, /* i : Band grouping for estimation */ + float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ + float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Imag part of input signal */ + float *reference_power, /* o : Estimated power */ + const int16_t enc_param_start_band, /* i : first band to process */ + const int16_t num_freq_bands /* i : Number of frequency bands */ +); + + +ivas_error ivas_mono_dmx_renderer_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_mono_downmix_render_passive( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/mono output */ + const int16_t output_frame /* i : output frame length */ +); + +void ivas_mono_stereo_downmix_mcmasa( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/mono or stereo output */ + int16_t output_frame /* i : output frame length per channel */ +); + +void ivas_lfe_synth_with_filters( + MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: LFE synthesis structure for McMASA */ + float data_f[][L_FRAME48k], /* o : output signals */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t separateChannelIndex, /* i : separate channel index */ + const int16_t lfeChannelIndex /* i : LFE channel index */ +); + +/*----------------------------------------------------------------------------------* + * LFE Coding prototypes + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_create_lfe_enc( + LFE_ENC_HANDLE *hLFE, /* o : IVAS LFE encoder structure */ + const int32_t input_Fs /* i : input sampling rate */ +); + +void ivas_lfe_enc_close( + LFE_ENC_HANDLE hLFE /* i/o: LFE encoder handle */ +); + +void ivas_lfe_enc( + LFE_ENC_HANDLE hLFE, /* i/o: LFE encoder handle */ + float data_lfe_ch[], /* i : input LFE signal */ + const int16_t input_frame, /* i : input frame length per channel */ + BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ +); + +ivas_error ivas_create_lfe_dec( + LFE_DEC_HANDLE *hLFE_out, /* o : IVAS LFE decoder structure */ + const int32_t output_Fs, /* i : output sampling rate */ + const float add_delay_s /* i : additional delay in seconds to lfe to sync with binaural filter*/ +); + +void ivas_lfe_dec_close( + LFE_DEC_HANDLE hLFE /* i/o: LFE encoder handle */ +); + +void ivas_lfe_dec( + LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t bfi, /* i : BFI flag */ + float output_lfe_ch[] /* o : output LFE synthesis */ +); + +void LFE_tdplc( + LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ + const float *prevsynth, /* i : previous frame synthesis */ + float *ytda, /* o : output time-domain buffer */ + const int16_t output_frame /* i : output frame length */ +); + +void lfe_window_init( + LFE_WINDOW_HANDLE hLFEWindow, + const int32_t sampling_rate, + const int16_t frame_len +); + +void ivas_lfe_lpf_select_filt_coeff( + const int32_t sampling_rate, /* i : sampling rate */ + const int16_t order, /* i : filter order */ + const float **ppFilt_coeff /* o : filter coefficients */ +); + +void ivas_filters_init( + ivas_filters_process_state_t *filter_state, + const float *filt_coeff, + const int16_t order +); + +void ivas_filter_process( + ivas_filters_process_state_t *filter_state, + float *pIn_Out, + const int16_t length +); + + +/*----------------------------------------------------------------------------------* + * TD Binaural Object renderer + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_HRTF_binary_open( + TDREND_HRFILT_FiltSet_t **hHrtfTD /* i/o: TD renderer HRTF handle */ +); + +void ivas_HRTF_binary_close( + TDREND_HRFILT_FiltSet_t **hHrtfTD /* i/o: TD renderer HRTF handle */ +); + +/*! r: TD Renderer result code. */ +ivas_error DefaultBSplineModel( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* o : Loaded HR filter set */ + const int32_t output_Fs /* i : Output sampling rate */ +); + +ivas_error ivas_td_binaural_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +void ivas_td_binaural_close( + BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */ +); + +ivas_error ObjRenderIVASFrame( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k], /* i/o: SCE channels / Binaural synthesis */ + const int16_t output_frame /* i : output frame length */ +); + +void BSplineModelEvalAlloc( + ModelParams_t *model, /* i : Model parameters */ + ModelEval_t *modelEval /* i/o: Model evaluation structure */ +); + +/* ----- Object renderer - hrfilt ----- */ + +void GetFilterFromAngle( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ + const float Elev, /* i : Elevation, degrees */ + float Azim, /* i : Azimuth, degrees */ + SFX_SpatBin_Params_t *SfxSpatBinParams_p /* i/o: Currently used HR filter */ +); + +void HRTF_model_precalc( + ModelParams_t *model /* i/o: HRTF Model parameters */ +); + +void BSplineModelEvalDealloc( + ModelParams_t *model, /* i : Model parameters */ + ModelEval_t *modelEval /* i : Model evaluation structure */ +); + +void BSplineModelEvalITDDealloc( + ModelParamsITD_t *model /* i : Model parameters */ +); + +#ifdef TDREND_HRTF_TABLE_METHODS +void TDREND_HRFILT_SetFiltSet( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR hilter set structure */ + FILE *f_hrtf /* i : File handle for HR filter parameters */ +); +#endif + +ivas_error TDREND_REND_RenderSourceHRFilt( + const TDREND_SRC_t *Src_p, /* i/o: The source to be rendered */ +#ifdef TDREND_HRTF_TABLE_METHODS + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ +#endif + float output_buf[][L_FRAME48k], /* o : Output buffer */ + const int16_t output_frame, /* i : Output frame length in use */ + const int32_t output_Fs /* i : Output sample rate */ +); + +/* ----- Object renderer - sources ----- */ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetPos( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const float *Vec_p /* i : Position vector */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetDir( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const float *Vec_p /* i : Direction vector */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetDirAtten( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const TDREND_DirAtten_t *DirAtten_p /* i : Directional attenuation specifier */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetPlayState( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const TDREND_PlayStatus_t PlayStatus /* i : Play state */ +); + + +void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + TDREND_SRC_REND_t *SrcRend_p, /* i/o: Source object */ + TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i : Spatial aspects of source */ + const int32_t output_Fs /* i : Output sample rate */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SRC_Alloc( + TDREND_SRC_t **Src_pp /* i/o: Source */ +); + +void TDREND_SRC_Dealloc( + TDREND_SRC_t *Src_p /* i/o: Source to deallocate */ +); + +void TDREND_SRC_Init( + TDREND_SRC_t *Src_p, /* i/o: Source to initialize */ + const TDREND_PosType_t PosType, /* i : Position type specifier */ + const int32_t output_Fs /* i : Output sampling rate */ +); + +/* ----- Object renderer - vec ----- */ + +void TDREND_SPATIAL_VecInit( + float *Pos_p, /* o : Output vector */ + const float PosX, /* i : X value */ + const float PosY, /* i : Y value */ + const float PosZ /* i : Z value */ +); + +/*! r: Euclidian norm value */ +float TDREND_SPATIAL_VecNorm( + const float *Vec_p /* i : Vector for norm calculation */ +); + +void TDREND_SPATIAL_VecNormalize( + const float *Vec_p, /* i : Input vector */ + float *VecNorm_p /* o : Output vector */ +); + +void TDREND_SPATIAL_VecMapToNewCoordSystem( + const float *Vec_p, /* i : Input vector */ + const float *TranslVec_p, /* i : Translation vector */ + const float *DirVec_p, /* i : Direction vector */ + const float *UpVec_p, /* i : Up vector */ + const float *RightVec_p, /* i : Right vector */ + float *MappedVec_p /* o : Transformed vector */ +); + +/*! r: Flag if the orientation has been updated */ +int16_t TDREND_SPATIAL_EvalOrthonormOrient( + float *FrontVecON_p, /* o : Normalized front vector */ + float *UpVecON_p, /* o : Normalized up vector */ + float *RightVecON_p, /* o : Normalized right vector */ + const float *FrontVec_p, /* i : Input front vector */ + const float *UpVec_p /* i : Input up vector */ +); + +/* ----- Object renderer - mix ----- */ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_AddSrc( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + int16_t *SrcInd, /* o : Source index */ + const TDREND_PosType_t PosType, /* i : Position type (absolute/relative) */ + const int32_t output_Fs /* i : Output sampling rate */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SetDistAttenModel( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const TDREND_DistAttenModel_t DistAttenModel /* i : Distance attenuation model */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_LIST_SetPos( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const float *Pos_p /* i : Listener's position */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_LIST_SetOrient( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const float *FrontVec_p, /* i : Listener's orientation front vector */ + const float *UpVec_p /* i : Listener's orientation up vector */ +); + +void TDREND_MIX_Dealloc( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_Init( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HRTF data (initialized in case of NULL) */ + const TDREND_MixSpatSpec_t *MixSpatSpec_p, /* i : Mixer spatial specification */ + const int32_t output_Fs /* i : Output sampling rate */ +); + + /* ----- Object renderer - sfx ----- */ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SFX_SpatBin_Initialize( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters handle */ + const int32_t output_Fs /* i : Output sampling rate */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SFX_SpatBin_SetParams( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct to be updated */ + const SFX_SpatBin_Params_t *NewParam_p, /* i : New parameters struct */ + const int32_t output_Fs /* i : Output sample rate */ +); + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SFX_SpatBin_Execute_Main( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters handle */ + const float *InBuffer_p, /* i : Input buffer */ + const int16_t output_frame, /* i : frame length */ + float *LeftOutBuffer_p, /* o : Rendered left channel */ + float *RightOutBuffer_p, /* o : Rendered right channel */ + int16_t *NoOfUsedInputSamples_p, /* o : Number of input samples actually used */ + int16_t *NoOfDeliveredOutputSamples_p, /* o : Number of output samples actually rendered */ + const int32_t output_Fs /* i : Output sample rate */ +); + + +/*----------------------------------------------------------------------------------* + * Filter-bank (FB) Mixer + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_fb_set_cfg( + IVAS_FB_CFG **pFb_cfg_out, /* o : FB config. handle */ + const int16_t ivas_format, /* i : IVAS format */ + const SBA_MODE sba_mode, /* i : SBA mode */ + const int16_t num_in_chans, /* i : number of FB input channels */ + const int16_t num_out_chans, /* i : number of FB output channels */ + const int16_t active_w_mixing, /* i : active_w_mixing flag */ + const int32_t sampling_Fs /* i : sampling rate */ +); + +ivas_error ivas_FB_mixer_open( + IVAS_FB_MIXER_HANDLE *hFbMixer, /* i/o: FB mixer handle */ + const int32_t sampling_rate, /* i : sampling rate */ + IVAS_FB_CFG *fb_cfg /* i : FB config. handle */ +); + +void ivas_FB_mixer_close( + IVAS_FB_MIXER_HANDLE *hFbMixer, /* i/o: FB mixer handle */ + const int32_t sampling_rate /* i : sampling rate in Hz */ +); + +void ivas_fb_mixer_pcm_ingest( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float pcm_in[][L_FRAME48k], /* i : input audio channels */ + float **ppOut_pcm, /* o : output audio channels */ + const int16_t frame_length /* i : frame length */ +); + +void ivas_dirac_enc_spar_delay_synchro( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t input_frame, /* i : input frame length */ + float data_f[][L_FRAME48k] /* i/o: input: ACN/SN3D, output: omni, stereo DMX or FOA*/ +); + +void ivas_fb_mixer_update_prior_input( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float *pcm_in[], /* i : input audio channels */ + const int16_t length /* i : length of time slot */ +); + +void ivas_fb_mixer_get_windowed_fr( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float *pcm_in[], /* i : input audio channels */ + float *frame_f_real[], /* o : real freq domain values */ + float *frame_f_imag[], /* o : imag freq domain values */ + const int16_t length, /* i : number of new samples in time slot */ + const int16_t mdft_len /* i : MDFT frame length */ +); + +void ivas_fb_mixer_process( + IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ + float ***mixer_mat, /* i : mixer matrix */ + float **ppOut_pcm, /* o : output audio channels */ + const int16_t frame_len, /* i : frame length in samples */ + int16_t in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i/o: mixing mapping */ +); + +void ivas_fb_mixer_get_in_out_mapping( + const IVAS_FB_CFG *fb_cfg, /* i : FB config. handle */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t enc_dec_flag, /* i : encoder or decoder flag */ + const int16_t *order, /* i : downmix order */ + int16_t in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i/o: mixing mapping */ +); + +/* !r: number of spectral bands */ +int16_t ivas_get_num_bands_from_bw_idx( + const int16_t bwidth /* i : audio bandwidth */ +); + + +/*----------------------------------------------------------------------------------* + * Crend renderer + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_crend_init_from_rom( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error ivas_crend_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error ivas_crend_close( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +ivas_error ivas_crend_process( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k] /* i/o: input/output audio channels */ +); + + +/*----------------------------------------------------------------------------------* + * Renderer configuration + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_render_config_open( + RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ +); + +void ivas_render_config_close( + RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ +); + +ivas_error ivas_render_config_init_from_rom( + RENDER_CONFIG_HANDLE *hRenderConfig, /* i/o: Renderer config handle */ + const int16_t room_flag_on /* i : room effect on/off flag */ +); + +/*----------------------------------------------------------------------------------* + * Reverberator + *----------------------------------------------------------------------------------*/ + +ivas_error ivas_reverb_open( + REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ + const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ + RENDER_CONFIG_DATA *pConfig, /* i : Reverb configuration */ + const int32_t output_Fs /* i : output sampling rate */ +); + +void ivas_reverb_close( + REVERB_HANDLE *hReverb /* i/o: Reverberator handle */ +); + +ivas_error ivas_reverb_process( + REVERB_HANDLE hReverb, /* i/o: reverb state */ + const AUDIO_CONFIG transport_config, /* i : reverb. input audio configuration */ + const int16_t mix_signals, /* i : add reverb to output signal */ + float pcm_in[][L_FRAME48k], /* i : the PCM audio to apply reverb on */ + float pcm_out[][L_FRAME48k], /* o : the PCM audio with reverb applied */ + const int16_t i_ts +); + +void ivas_rev_delay_line_init( + ivas_rev_delay_line_t *pDelay, /* o : the delay line to initialize */ + float *memory_buffer, /* i : the memory buffer to use for the delay line */ + const uint16_t delay, /* i : the delay */ + const uint16_t maxdelay /* i : maximum delay to be supported */ +); + +/* !r: sample gotten out of delay line, and amplified by set gain */ +float ivas_rev_delay_line_get_sample( + ivas_rev_delay_line_t *pDelay /* i/o: the delay line */ +); + +void ivas_rev_delay_line_feed_sample( + ivas_rev_delay_line_t *pDelay, /* i : the delay line */ + float input /* i : the sample to feed */ +); + +void ivas_rev_delay_line_get_sample_blk( + ivas_rev_delay_line_t *pDelay, /* i : the delay line */ + const uint16_t blk_size, /* i : number of samples in the data block */ + float *output /* i/o: amples gotten out of delay line, and amplified by set gainin */ +); + +void ivas_rev_delay_line_feed_sample_blk( + ivas_rev_delay_line_t *pDelay, /* i/o: the delay line */ + const uint16_t blk_size, /* i : number of samples in the input data block */ + float *input /* i : the samples to feed */ +); + +void ivas_reverb_iir_filt_init( + ivas_rev_iir_filter_t *iirFilter, /* o : IIR filter */ + const uint16_t maxTaps /* i : maximum number of filter taps */ +); + +void ivas_reverb_iir_filt_set( + ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ + uint16_t nr_taps, /* i : number of IIR filter taps */ + const float *coefA, /* i : A filter coefficients to set */ + const float *coefB /* i : the B filter coefficients to set */ +); + +void ivas_reverb_iir_filt_2taps_feed_blk( + ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ + const uint16_t blk_size, /* i : size */ + const float *input, /* i : input buffer */ + float *output /* i : output buffer */ +); + +uint16_t int_log2( + uint32_t powerOf2 +); + +int16_t ivas_reverb_t2f_f2t_init( + ivas_reverb_t2f_f2t_t *t2f_f2t, + const int16_t fft_size, + const int16_t block_size +); + +void ivas_reverb_t2f_f2t_ClearHistory( + ivas_reverb_t2f_f2t_t *t2f_f2t +); + +void ivas_reverb_t2f_f2t_in( + ivas_reverb_t2f_f2t_t *t2f_f2t, + float *input_L, + float *input_R, float *buffer_L, + float *buffer_R +); + +void ivas_reverb_t2f_f2t_out( + ivas_reverb_t2f_f2t_t *t2f_f2t, + float *buffer_L, + float *buffer_R, + float *output_L, + float *output_R +); + +int16_t ivas_reverb_fft_filter_init( + ivas_reverb_fft_filter_t *fft_filter, + const int16_t fft_size +); + +void ivas_reverb_fft_filter_ComplexMul( + ivas_reverb_fft_filter_t *fft_filter, + float *buffer +); + +void ivas_reverb_fft_filter_CrossMix( + float *buffer0, + float *buffer1, + const int16_t fft_size +); + +void ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( + rv_fftwf_type_complex *spectrum, + float *fft_real, + const int16_t fft_size +); + +void ivas_reverb_define_window_fft( + float *pWindow, + const int16_t transitionStart, + const int16_t transitionLength, + const int16_t spectrumLength +); + +int16_t ivas_reverb_calc_color_filters( + const float *pTargetL, + const float *pTargetR, + const float *pWindow, + const int16_t fft_size, + const float delay, + rv_fftwf_type_complex *pBeqL, + rv_fftwf_type_complex *pBeqR +); + +int16_t ivas_reverb_calc_correl_filters( + const float *pTargetICC, + const float *pWindow, + const int16_t fft_size, + const float delay, + rv_fftwf_type_complex *pU, + rv_fftwf_type_complex *pV +); + +void ivas_reverb_calc_color_levels( + const int32_t output_Fs, + const int16_t freq_count, + const int16_t loop_count, + const float *pFc, + const float *pAcoustic_dsr, + const float *pHrtf_avg_pwr_L, + const float *pHrtf_avg_pwr_R, + const int16_t *pLoop_delays, + const float *pT60_filter_coeff, + float *pTarget_color_L, + float *pTarget_color_R +); + +void ivas_reverb_prepare_cldfb_params( + ivas_roomAcoustics_t *pInput_params, + AUDIO_CONFIG renderer_config, + int16_t use_brir, + const int32_t output_Fs, + float *pOutput_t60, + float *pOutput_ene ); + +void ivas_reverb_interpolate_acoustic_data( + const int16_t input_table_size, + const float *pInput_fc, + const float *pInput_t60, + const float *pInput_dsrR, + const int16_t output_table_size, + const float *pOutput_fc, + float *pOutput_t60, + float *pOutput_dsr +); + +void ivas_reverb_get_hrtf_set_properties( + float **ppHrtf_set_L_re, + float **ppHrtf_set_L_im, + float **ppHrtf_set_R_re, + float **ppHrtf_set_R_im, + const int16_t hrtf_count, + const int16_t in_freq_count, + const int16_t out_freq_count, + float *pOut_avg_pwr_L, + float *pOut_avg_pwr_R, + float *pOut_i_a_coherence +); + +/* Orientation tracking */ +void ivas_orient_trk_Init( + ivas_orient_trk_state_t *pOTR +); + +ivas_error ivas_orient_trk_SetTrackingType( + ivas_orient_trk_state_t *pOTR, + OTR_TRACKING_T trackingType +); + +ivas_error ivas_orient_trk_SetAbsoluteOrientation( + ivas_orient_trk_state_t *pOTR, + float yaw, + float pitch, + float roll +); + +ivas_error ivas_orient_trk_Process( + ivas_orient_trk_state_t *pOTR +); + +ivas_error ivas_orient_trk_GetTrackedOrientation( + ivas_orient_trk_state_t *pOTR, + float *yaw, + float *pitch, + float *roll +); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +void TonalMdctConceal_create_concealment_noise( + float concealment_noise[L_FRAME48k], + CPE_DEC_HANDLE hCPE, + const int16_t L_frameTCX, + const int16_t L_frame, + const int16_t idchan, + const int16_t subframe_idx, + const int16_t core, + const int16_t crossfade_gain, + const TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode +); +#endif + +float rand_triangular_signed( + int16_t *seed ); + +/* clang-format on */ + +#endif /* IVAS_PROT_H */ diff --git a/lib_com/ivas_qmetadata_com.c b/lib_com/ivas_qmetadata_com.c new file mode 100644 index 0000000000..ee8cfd2f2f --- /dev/null +++ b/lib_com/ivas_qmetadata_com.c @@ -0,0 +1,648 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define MASA_DIR_RATIO_COMP_MAX_IDX_STEPS 2 + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void ivas_qmetadata_free_memory( IVAS_QMETADATA_HANDLE hQMetaData ); + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_open() + * + * Allocate Q Metadata handle + *-----------------------------------------------------------------------*/ + +ivas_error ivas_qmetadata_open( + IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ +) +{ + /* allocate MetaData handle */ + if ( ( *hQMetaData = (IVAS_QMETADATA_HANDLE) count_malloc( sizeof( IVAS_QMETADATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Q MetaData" ); + } + + ( *hQMetaData )->q_direction = NULL; + ( *hQMetaData )->surcoh_band_data = NULL; + ( *hQMetaData )->bandMap = NULL; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_allocate_memory() + * + * Allocates dynamic memory for qmetadata. Also reallocates automatically + * if relevant parameters have changed. To function properly, this function + * assumes that qmetadata contains parameter values for nbands, ndirs and + * coherence_flag corresponding to the currently reserved memory. This function + * then compares them to provided new values given in call and allocates or + * reallocates as necessary. The parameter values in qmetadata are updated + * accordingly. In addition, parameters inside qdirection config are + * set here to their default values out of practicality. + *-----------------------------------------------------------------------*/ + +ivas_error ivas_qmetadata_allocate_memory( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + const int16_t nbands, /* i : new number of frequency bands */ + const int16_t ndirs, /* i : new number of directions */ + const int16_t coherence_flag /* i : new coherence coding status */ +) +{ + int16_t dir; + uint8_t do_realloc; + uint8_t reservationFailed = 0; + +#ifdef DEBUGGING + assert( hQMetaData != NULL ); +#endif + + /* Check if we need to reallocate memory or do we need to do the first time allocation. */ + if ( hQMetaData->q_direction != NULL ) + { + do_realloc = nbands != hQMetaData->q_direction->cfg.nbands; + do_realloc |= ndirs != hQMetaData->no_directions; + do_realloc |= coherence_flag != hQMetaData->coherence_flag; + } + else + { + do_realloc = TRUE; + } + + if ( do_realloc ) + { + ivas_qmetadata_free_memory( hQMetaData ); + + hQMetaData->numCodingBands = (uint8_t) nbands; + hQMetaData->no_directions = ndirs; + hQMetaData->coherence_flag = coherence_flag; + + hQMetaData->q_direction = (IVAS_QDIRECTION *) count_malloc( sizeof( IVAS_QDIRECTION ) * ndirs ); + reservationFailed = hQMetaData->q_direction == NULL; + + if ( !reservationFailed ) + { + for ( dir = 0; dir < hQMetaData->no_directions; dir++ ) + { + hQMetaData->q_direction[dir].cfg.nbands = nbands; + if ( nbands == 0 ) + { + hQMetaData->q_direction[dir].band_data = NULL; + } + else + { + hQMetaData->q_direction[dir].band_data = (IVAS_QDIRECTION_BAND_DATA *) count_malloc( sizeof( IVAS_QDIRECTION_BAND_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ); + { + int16_t j; + for ( j = 0; j < nbands; j++ ) + { + set_zero( hQMetaData->q_direction[dir].band_data[j].elevation, MAX_PARAM_SPATIAL_SUBFRAMES ); + set_zero( hQMetaData->q_direction[dir].band_data[j].azimuth, MAX_PARAM_SPATIAL_SUBFRAMES ); + } + } + + + reservationFailed |= hQMetaData->q_direction[dir].band_data == NULL; + } + + if ( coherence_flag ) + { + hQMetaData->q_direction[dir].coherence_band_data = (IVAS_QDIRECTION_BAND_COHERENCE_DATA *) count_malloc( sizeof( IVAS_QDIRECTION_BAND_COHERENCE_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ); + reservationFailed |= hQMetaData->q_direction[dir].coherence_band_data == NULL; + } + else + { + hQMetaData->q_direction[dir].coherence_band_data = NULL; + } + + /* These default values are set here to get them conveniently in one place */ + hQMetaData->q_direction[dir].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; + hQMetaData->q_direction[dir].cfg.search_effort = 3; + hQMetaData->q_direction[dir].cfg.start_band = 0; + hQMetaData->q_direction[dir].cfg.mc_ls_setup = MC_LS_SETUP_INVALID; + } + + if ( coherence_flag ) + { + hQMetaData->surcoh_band_data = (IVAS_SURROUND_COHERENCE_BAND_DATA *) count_malloc( sizeof( IVAS_SURROUND_COHERENCE_BAND_DATA ) * hQMetaData->q_direction[0].cfg.nbands ); + reservationFailed |= hQMetaData->surcoh_band_data == NULL; + } + else + { + hQMetaData->surcoh_band_data = NULL; + } + } + } + + if ( reservationFailed ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Q MetaData\n" ) ); + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_free_memory() + * + * free dynamic part of Q Metadata memory + *-----------------------------------------------------------------------*/ + +static void ivas_qmetadata_free_memory( + IVAS_QMETADATA_HANDLE hQMetaData /* i/o: q_metadata handle */ +) +{ + int16_t dir; + + if ( hQMetaData == NULL ) + { + return; + } + + if ( hQMetaData->q_direction != NULL ) + { + for ( dir = 0; dir < hQMetaData->no_directions; dir++ ) + { + if ( hQMetaData->q_direction[dir].band_data != NULL ) + { + count_free( hQMetaData->q_direction[dir].band_data ); + hQMetaData->q_direction[dir].band_data = NULL; + } + if ( hQMetaData->q_direction[dir].coherence_band_data != NULL ) + { + count_free( hQMetaData->q_direction[dir].coherence_band_data ); + hQMetaData->q_direction[dir].coherence_band_data = NULL; + } + } + + count_free( hQMetaData->q_direction ); + hQMetaData->q_direction = NULL; + } + + if ( hQMetaData->surcoh_band_data != NULL ) + { + count_free( hQMetaData->surcoh_band_data ); + hQMetaData->surcoh_band_data = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_close() + * + * close Q Metadata + *-----------------------------------------------------------------------*/ + +void ivas_qmetadata_close( + IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ +) +{ + if ( hQMetaData == NULL || *hQMetaData == NULL ) + { + return; + } + + ivas_qmetadata_free_memory( *hQMetaData ); + + count_free( *hQMetaData ); + *hQMetaData = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * masa_sq() + * + * scalar quantization using partition + *------------------------------------------------------------------------*/ + +/* r: codeword index */ +int16_t masa_sq( + const float in, /* i : input value */ + const float *threshold, /* i : partition */ + const int16_t cb_sz /* i : codebook size */ +) +{ + int16_t i; + + for ( i = 0; i < cb_sz; i++ ) + { + if ( in < threshold[i + 1] ) + { + return i; + } + } + + return -1; +} + + +/*------------------------------------------------------------------------- + * only_reduce_bits_direction() + * + * + *------------------------------------------------------------------------*/ + +ivas_error only_reduce_bits_direction( + int16_t *reduce_bits_out, + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + int16_t reduce_bits, + const int16_t coding_subbands, + const int16_t no_subframes, + int16_t *ind_order ) +{ + int16_t j, k, red_times, rem, n; + int16_t max_nb, delta; + int16_t *bits_dir0; + + int16_t bits_sph_idx_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + float penalty[MASA_MAXIMUM_CODING_SUBBANDS]; + for ( j = 0; j < coding_subbands; j++ ) + { + for ( k = 0; k < no_subframes; k++ ) + { + bits_sph_idx_orig[j][k] = q_direction->band_data[j].bits_sph_idx[k]; + } + } + n = 0; + delta = 1; + + if ( reduce_bits > 0 ) + { + red_times = reduce_bits / ( coding_subbands * no_subframes ); /* number of complete reductions by 1 bit */ + if ( red_times > 0 ) + { + for ( j = 0; j < coding_subbands; j++ ) + { + bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; + for ( k = 0; k < no_subframes; k++ ) + { + bits_dir0[k] -= red_times; + reduce_bits -= red_times; + + if ( bits_dir0[k] < MASA_MIN_BITS_TF ) + { + reduce_bits += ( MASA_MIN_BITS_TF - bits_dir0[k] ); + bits_dir0[k] = MASA_MIN_BITS_TF; + } + } + } + } + rem = reduce_bits; /* -coding_subbands*no_subframes*red_times; */ + while ( n < rem ) + { + max_nb = 0; +#ifdef DEBUGGING + if ( delta > MASA_MIN_BITS_TF ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Not enough bits for MASA param." ); + } +#endif + for ( j = 0; j < coding_subbands; j++ ) + { + bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; + for ( k = 0; k < no_subframes; k++ ) + { + if ( ( n < rem ) && ( bits_dir0[k] > MASA_MIN_BITS_TF - delta ) ) + { + bits_dir0[k] -= 1; + n++; + } + + if ( max_nb < bits_dir0[k] ) + { + max_nb = bits_dir0[k]; + } + } + } + + if ( max_nb <= MASA_MIN_BITS_TF ) + { + delta += 1; + } + } + + reduce_bits = 0; + } + if ( ind_order[0] == -1 ) + { + for ( j = 0; j < coding_subbands; j++ ) + { + ind_order[j] = j; + } + } + else + { + for ( j = 0; j < coding_subbands; j++ ) + { + penalty[j] = 0.0f; + for ( k = 0; k < no_subframes; k++ ) + { + if ( bits_sph_idx_orig[j][k] > 0 ) + { + penalty[j] += ( bits_sph_idx_orig[j][k] - q_direction->band_data[j].bits_sph_idx[k] ) / (float) bits_sph_idx_orig[j][k]; + } + } + penalty[j] /= no_subframes; + } + sort_desc_ind( penalty, coding_subbands, ind_order ); + } + + *reduce_bits_out = -reduce_bits; + + return IVAS_ERR_OK; +} + + +/*--------------------------------------------------------------- + * update_bits_next_block() + * + * Transfer the saved bits to the next subbands + *---------------------------------------------------------------*/ + +void update_bits_next_block( + IVAS_QDIRECTION *q_direction, /* i/o: qdirection */ + int16_t *p_diff, /* i/o: bits to be transferred */ + const int16_t j, /* i : subband to update bit alloc to */ + const int16_t max_i, /* i : number of subbands */ + const int16_t max_k /* i : n umber of subframes */ +) +{ + int16_t diff; + int16_t k; + diff = *p_diff; + if ( diff < 0 ) + { + /* increase bits for next subbands */ + k = 0; + while ( ( diff < 0 ) && ( j < max_i ) && ( k < max_k ) ) + { + if ( q_direction->band_data[j].bits_sph_idx[k] < MASA_DIRECTION_MAX_BITS ) + { + q_direction->band_data[j].bits_sph_idx[k] += 1; + diff++; + } + k++; + } + } + else + { + k = 0; + while ( ( diff > 0 ) && ( k < max_k ) ) + { + if ( q_direction->band_data[j].bits_sph_idx[k] > 0 ) + { + q_direction->band_data[j].bits_sph_idx[k] -= 1; + diff--; + } + } + } + *p_diff = diff; + + return; +} + + +/*--------------------------------------------------------------- + * invdct4_transform() + * + * Inverse DCT transform for 4D vector + *---------------------------------------------------------------*/ + +void invdct4_transform( + float *v, /* i : input vector */ + uint8_t *invdct_v /* o : inverse transformed vector */ +) +{ + float a, b, c, d; + int16_t i; + float f_invdct_v[4]; + + a = v[0] + v[2]; + b = v[0] - v[2]; + c = 1.306562964876376f * v[1] + 0.541196100146198f * v[3]; + d = 0.541196100146198f * v[1] - 1.306562964876376f * v[3]; + f_invdct_v[0] = 128 * ( a + c ); + f_invdct_v[1] = 128 * ( b + d ); + f_invdct_v[2] = 128 * ( b - d ); + f_invdct_v[3] = 128 * ( a - c ); + + for ( i = 0; i < 4; i++ ) + { + if ( f_invdct_v[i] < 0.0 ) + { + invdct_v[i] = 0; + } + else + { + if ( f_invdct_v[i] > 255.0f ) + { + f_invdct_v[i] = 255.0f; + } + invdct_v[i] = (uint8_t) f_invdct_v[i]; + } + } + + return; +} + + +/*--------------------------------------------------------------- + * masa_compensate_two_dir_energy_ratio_index() + * + * Calculated compensated direct-to-total ratios for direction + * quantization with two directions. This allows maintaining + * direction accuracy while reusing one direction quantizers + * separately for both directions. + *--------------------------------------------------------------*/ + +void masa_compensate_two_dir_energy_ratio_index( + const int16_t ratio_index_1, /* i : Input ratio for direction 1 */ + const int16_t ratio_index_2, /* i : Input ratio for direction 2 */ + int16_t *ratio_index_mod1, /* o : Output modified ratio for direction 1 */ + int16_t *ratio_index_mod2 /* o : Output modified ratio for direction 2 */ +) +{ + float ratio1, ratio2, ratioSum; + + ratio1 = 1.0f - diffuseness_reconstructions[ratio_index_1]; + ratio2 = 1.0f - diffuseness_reconstructions[ratio_index_2]; + + ratioSum = ratio1 + ratio2; + if ( ratio1 >= ratio2 ) + { + ratio2 = ratio2 / ratio1 * ratioSum; + ratio1 = ratioSum; + } + else + { + ratio1 = ratio1 / ratio2 * ratioSum; + ratio2 = ratioSum; + } + *ratio_index_mod1 = masa_sq( 1.0f - ratio1, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + *ratio_index_mod2 = masa_sq( 1.0f - ratio2, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + + /* Limit maximum accuracy increase to conserve bits */ + *ratio_index_mod1 = ( ratio_index_1 - *ratio_index_mod1 ) > MASA_DIR_RATIO_COMP_MAX_IDX_STEPS ? ratio_index_1 - MASA_DIR_RATIO_COMP_MAX_IDX_STEPS : *ratio_index_mod1; + *ratio_index_mod2 = ( ratio_index_2 - *ratio_index_mod2 ) > MASA_DIR_RATIO_COMP_MAX_IDX_STEPS ? ratio_index_2 - MASA_DIR_RATIO_COMP_MAX_IDX_STEPS : *ratio_index_mod2; + + return; +} + + +/*--------------------------------------------------------------- + * set_qmetadata_maxbit_req() + * + * Sets proper value for qmetadata_max_bit_req limit + *--------------------------------------------------------------*/ + +void ivas_set_qmetadata_maxbit_req( + IVAS_QMETADATA_HANDLE hQMetaData, /* o : qmetadata structure where the requirement value is set */ + const IVAS_FORMAT ivas_format /* i : IVAS format */ +) +{ + if ( ivas_format == SBA_FORMAT ) + { + hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA; + } + else /* MASA_FORMAT */ + { + hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_MASA; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_azimuth_elevation_to_direction_vector() + * + * + *------------------------------------------------------------------------*/ + +void ivas_qmetadata_azimuth_elevation_to_direction_vector( + const float az, /* i : azimuth */ + const float el, /* i : elevation */ + float *dv /* o : direction vector */ +) +{ + float radius_length; + +#ifdef DEBUGGING + assert( fabsf( el ) <= 90.0f ); + /*assert((0.0f <= az) && (az <= 360.0f)); */ +#endif + + dv[2] = sinf( el * PI_OVER_180 ); + radius_length = cosf( el * PI_OVER_180 ); + dv[0] = radius_length * cosf( az * PI_OVER_180 ); + dv[1] = radius_length * sinf( az * PI_OVER_180 ); + + return; +} + +/*------------------------------------------------------------------------- + * ivas_qmetadata_direction_vector_to_azimuth_elevation() + * + * azimuth between [-180, 180] + * elevation between [-90 and 90] + *------------------------------------------------------------------------*/ + +void ivas_qmetadata_direction_vector_to_azimuth_elevation( + const float *dv, /* i : direction vector */ + float *az, /* o : azimuth */ + float *el /* o : elevation */ +) +{ + /* note: dv does not need to have unit L_2 norm, because the conversion is scale invariant */ + + *el = atan2f( dv[2], sqrtf( dv[0] * dv[0] + dv[1] * dv[1] ) ) * _180_OVER_PI; + *az = atan2f( dv[1], dv[0] ) * _180_OVER_PI; + + return; +} + + +/*--------------------------------------------------------------- + * ivas_get_df_ratio_bits() + * + * Gives quantization accuracy for distribution factor of + * direct-to-total ratios based on the diffuse-to-total ratio + * index + *--------------------------------------------------------------*/ + +/*! r: bits to be used for quantizing ratio of ratios */ +int16_t ivas_get_df_ratio_bits( + int16_t index_diff /* i : index of quantized diffuse-to-total ratio */ +) +{ + int16_t dfRatio_bits; + + if ( index_diff >= DIFF_DFRATIO_1BIT_LIMIT_IDX ) + { + dfRatio_bits = 1; + } + else if ( index_diff >= DIFF_DFRATIO_2BIT_LIMIT_IDX ) + { + dfRatio_bits = 2; + } + else + { + dfRatio_bits = 3; + } + + return dfRatio_bits; +} diff --git a/lib_com/ivas_qspherical_com.c b/lib_com/ivas_qspherical_com.c new file mode 100644 index 0000000000..cd12fd8dc8 --- /dev/null +++ b/lib_com/ivas_qspherical_com.c @@ -0,0 +1,512 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_reorder_generic() + * + *------------------------------------------------------------------------*/ + +uint16_t ivas_qmetadata_reorder_generic( + const int16_t signed_value ) +{ + uint16_t unsigned_value; + + if ( signed_value < 0 ) + { + unsigned_value = ( ( uint16_t ) - ( signed_value + 1 ) << 1 ) + 1; + } + else + { + unsigned_value = (uint16_t) signed_value << 1; + } + + return unsigned_value; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_dereorder_generic() + * + * Returns the original value of the array "folded" by ReorderGeneric + *------------------------------------------------------------------------*/ + +/* !r: "Unfolded" value, positive or negative depending on the value of the input */ +int16_t ivas_qmetadata_dereorder_generic( + const uint16_t uns_value /* i : unsigned value result of ReorderGeneric */ +) +{ + if ( ( uns_value & 1 ) != 0 ) + { + return -(int16_t) ( uns_value >> 1 ) - 1; + } + else + { + return (int16_t) ( uns_value >> 1 ); + } +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_project_elevation_index() + * + * + *------------------------------------------------------------------------*/ + +/*! r: projected elevation index */ +int16_t ivas_dirac_project_elevation_index( + const int16_t el_idx, /* i : elevation index */ + const int16_t el_alph, /* i : number of elevation symbols */ + const int16_t el_alph_proj /* i : size of projected alphabet */ +) +{ + int16_t el_idx_proj; +#ifdef DEBUGGING + assert( ( el_idx >= 0 ) && ( el_idx < el_alph ) ); + assert( el_alph == 2 * ( el_alph >> 1 ) + 1 ); /* el_alph of the form 2 * n_points + 1 */ + assert( el_alph_proj == 2 * ( el_alph_proj >> 1 ) + 1 ); +#endif + + /* evaluate floor((el_idx / (el_alph - 1)) * (el_alph_proj - 1) + 0.5) using only integer */ + el_idx_proj = ( 2 * el_idx * ( el_alph_proj - 1 ) + ( el_alph - 1 ) ) / ( 2 * ( el_alph - 1 ) ); + +#ifdef DEBUGGING + assert( ( 0 <= el_idx_proj ) && ( el_idx_proj < el_alph_proj ) ); +#endif + return el_idx_proj; +} + + +/*------------------------------------------------------------------------- + * ivas_chan_project_elevation_index() + * + * + *------------------------------------------------------------------------*/ + +/*! r: projected index in channel mode */ +int16_t ivas_chan_project_elevation_index( + const int16_t el_idx, /* i : elevation index */ + const int16_t el_alph, /* i : number of elevation symbols */ + const int16_t el_alph_proj /* i : size of projected alphabet */ +) +{ + int16_t el_idx_proj; +#ifdef DEBUGGING + assert( ( el_idx >= 0 ) && ( el_idx < el_alph ) ); +#endif + + /* evaluate floor((el_idx / (el_alph - 1)) * (el_alph_proj - 1) + 0.5) using only integer */ + if ( el_idx == el_alph - 1 ) + { + el_idx_proj = el_alph_proj - 1; + } + else + { + el_idx_proj = ( 2 * el_idx * el_alph_proj + el_alph ) / ( 2 * el_alph ); + } + +#ifdef DEBUGGING + assert( ( 0 <= el_idx_proj ) && ( el_idx_proj < el_alph_proj ) ); +#endif + return el_idx_proj; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_project_azimuth_index() + * + * + *------------------------------------------------------------------------*/ + +/*! r: projected azimuth index */ +int16_t ivas_dirac_project_azimuth_index( + const int16_t az_idx, /* i : azimuth index */ + const int16_t az_alph, /* i : number of azimuth symbols */ + const int16_t az_alph_proj /* i : size of projected alphabet */ +) +{ + int16_t az_idx_proj; +#ifdef DEBUGGING + assert( ( az_idx >= 0 ) && ( az_idx < az_alph ) ); +#endif + + if ( az_alph_proj == 1 ) + { + return 0; + } + + /* evaluate floor((az_idx / az_alph) * az_alph_proj + 0.5) using only integer */ + az_idx_proj = ( 2 * az_idx * az_alph_proj + az_alph ) / ( 2 * az_alph ); + + if ( az_idx_proj == az_alph_proj ) + { + az_idx_proj = 0; + } + +#ifdef DEBUGGING + assert( ( 0 <= az_idx_proj ) && ( az_idx_proj < az_alph_proj ) ); +#endif + return az_idx_proj; +} + + +/*------------------------------------------------------------------------- + * small_reduction_direction() + * + * Compute the allocated bit reduction in spherical indexing for bit budget + * is exceeded by diff. bits + *------------------------------------------------------------------------*/ + +void small_reduction_direction( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + uint16_t bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + const int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], + int16_t *diff ) +{ + int16_t i, j, k; + + for ( k = 0; ( k < 2 ) && ( *diff > 0 ); k++ ) + { + for ( i = q_direction->cfg.start_band; ( i < q_direction->cfg.nbands ) && ( *diff > 0 ); i++ ) + { + if ( raw_flag[i] == 1 ) + { + for ( j = 0; ( j < q_direction->cfg.nblocks ) && ( *diff > 0 ); j++ ) + { + if ( bits_dir[i][j] > MASA_MIN_BITS_TF ) + { + bits_dir[i][j] -= 1; + ( *diff )--; + } + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------* + * quantize_phi() + * + * Quantize azimuth. + * Input phi expected to be an angle in degree between 0 and 360. + *-----------------------------------------------------------------------*/ + +/* !r: index azimuth */ +int16_t quantize_phi( + float phi, /* i : azimuth value */ + const int16_t flag_delta, /* i : flag indicating if the azimuth codebook is translated or not */ + float *phi_hat, /* o : quantized azimuth */ + const int16_t n /* i : azimuth codebook size */ +) +{ + int16_t id_phi; + float dd; + float delta_phi; + +#ifdef DEBUGGING + assert( ( phi >= 0.f ) && ( phi <= 360.f ) ); +#endif + + delta_phi = 360.0f / (float) n; + + if ( n == 1 ) + { + *phi_hat = 0; + + return 0; + } + + if ( ( flag_delta == 1 ) && ( n > 2 ) ) + { + dd = delta_phi / 2.0f; + } + else + { + dd = 0; + } + id_phi = (int16_t) round_f( ( ( phi - 180 - dd ) / (float) delta_phi ) ); + assert( fabsf( ( phi - 180 - dd ) / (float) delta_phi ) - abs( id_phi ) <= 0.5 ); + + if ( id_phi + ( n >> 1 ) < 0 ) + { + id_phi += 1; + } + + if ( id_phi - ( n >> 1 ) >= 0 ) + { + id_phi = -( n >> 1 ); + } + + if ( id_phi == -( ( n >> 1 ) + ( n % 2 ) ) ) + { + id_phi += ( n % 2 ); + } + else + { + if ( id_phi == ( ( n >> 1 ) + ( n % 2 ) ) ) + { + if ( n % 2 ) + { + id_phi -= 1; + } + else + { + id_phi = -id_phi; + } + } + } + + *phi_hat = id_phi * delta_phi + dd + 180; + + id_phi += ( n >> 1 ); + + return id_phi; +} + + +/*-----------------------------------------------------------------------* + * companding_azimuth() + * + * Compand azimuth based on the format + *-----------------------------------------------------------------------*/ + +/*! r: companded azimuth value */ +float companding_azimuth( + const float azi, /* i : input azimuth value */ + const MC_LS_SETUP mc_format, /* i : input channel format */ + const int16_t theta_flag, /* i : zero/non zero elevation flag */ + const int16_t direction /* i : direction of companding (direct or inverse)*/ +) +{ + const float pointsA[] = { 0.0f, 60.0f, 110.0f, 150.0f, 180.0f, 0.0f, 50.0f, 90.0f, 150.0f, 180.0f, 0.0f, 30.0f, 80.0f, 150.0f, 180.0f }; + const float pointsB[] = { 0.0f, 90.0f, 110.0f, 170.0f, 180.0f, 0.0f, 90.0f, 110.0f, 170.0f, 180.0f, 0.0f, 10.0f, 100.0f, 170.0f, 180.0f }; + const float *pA, *pB; + int16_t no_points; + float comp_azi; + int16_t i, not_done, start; + float abs_azi; + + if ( mc_format == MC_LS_SETUP_5_1 || mc_format == MC_LS_SETUP_5_1_2 || mc_format == MC_LS_SETUP_5_1_4 ) /* 5.1, 5.1+2 or 5.1+4*/ + { + start = 5; + } + else + { + start = 0; + } + + /* theta flag 1 is for non zero, larger than a threshold elevation */ + if ( ( theta_flag == 1 ) && ( ( mc_format == MC_LS_SETUP_5_1_2 ) || ( mc_format == MC_LS_SETUP_5_1_4 ) || ( mc_format == MC_LS_SETUP_7_1_4 ) ) ) /* 5.1+2, 5.1+4 or 7.1+4*/ + { + start = 10; + } + no_points = 5; + + pA = &pointsA[start]; + pB = &pointsB[start]; + + if ( direction == -1 ) /* inverse companding */ + { + pA = &pointsB[start]; + pB = &pointsA[start]; + } + else + { + if ( direction != 1 ) + { + printf( "Wrong direction in companding" ); + } + } + + not_done = 1; + abs_azi = fabsf( azi ); + + comp_azi = azi; + i = 0; + while ( not_done && ( i < no_points - 1 ) ) + { + if ( abs_azi <= pA[i + 1] ) + { + not_done = 0; + /* calculate companding */ + comp_azi = pB[i] + ( pB[i + 1] - pB[i] ) / ( pA[i + 1] - pA[i] ) * ( abs_azi - pA[i] ); + } + else + { + i++; + } + } + + if ( azi < 0 ) + { + comp_azi = -comp_azi; + } + + if ( not_done == 1 ) + { + comp_azi = azi; + } + + return comp_azi; +} + + +/*-----------------------------------------------------------------------* + * quantize_phi_chan_lbr() + * + * Quantize azimuth in low-bitrate channel mode. + * Input phi expected to be an angle in degree between 0 and 360. + *-----------------------------------------------------------------------*/ + +/* !r: index azimuth */ +int16_t quantize_phi_chan_lbr( + const float phi, /* i : azimuth value */ + float *phi_hat, /* o : quantized azimuth */ + const int16_t n /* i : azimuth codebook size */ +) +{ + int16_t id_phi; + +#ifdef DEBUGGING + assert( ( phi >= -180.f ) && ( phi <= 180.f ) ); + assert( n <= 9 ); +#endif + + if ( n <= 1 ) + { + *phi_hat = 0; + + return 0; + } + + id_phi = squant( fabsf( phi ), phi_hat, cb_azi_chan, n >> 1 ); + + if ( phi < 0 && id_phi > 0 ) + { + id_phi = 2 * id_phi - 1; + *phi_hat = -*phi_hat; + } + else + { + id_phi *= 2; + } + + return id_phi; +} + + +/*-----------------------------------------------------------------------* + * quantize_phi_chan_compand() + * + * Quantize azimuth. + * Input phi expected to be an angle in degree between 0 and 360. + *-----------------------------------------------------------------------*/ + +/* !r: index azimuth */ +int16_t quantize_phi_chan_compand( + float phi, /* i : azimuth value */ + float *phi_hat, /* o : quantized azimuth */ + const int16_t n, /* i : azimuth codebook size */ + const int16_t theta_flag, /* i : flag signalling high elevation */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + int16_t id_phi; + float delta_phi; + +#ifdef DEBUGGING + assert( ( phi >= 0.f ) && ( phi <= 360.f ) ); +#endif + + if ( n <= 1 ) + { + *phi_hat = 0; + + return 0; + } + + phi = companding_azimuth( phi - 180, mc_format, theta_flag, 1 ); + + /* quantize companded value */ + delta_phi = 360.0f / (float) n; + id_phi = (int16_t) round_f( ( phi / (float) delta_phi ) ); + + if ( id_phi + ( n >> 1 ) < 0 ) + { + id_phi += 1; + } + if ( id_phi - ( n >> 1 ) >= 0 ) + { + id_phi = -( n >> 1 ); + } + + if ( id_phi == -( ( n >> 1 ) + ( n % 2 ) ) ) + { + id_phi += ( n % 2 ); + } + else + { + if ( id_phi == ( ( n >> 1 ) + ( n % 2 ) ) ) + { + if ( n % 2 ) + { + id_phi -= 1; + } + else + { + id_phi = -id_phi; + } + } + } + *phi_hat = id_phi * delta_phi; + + id_phi += ( n >> 1 ); + + + *phi_hat = companding_azimuth( *phi_hat, mc_format, theta_flag, -1 ) + 180; + + return id_phi; +} diff --git a/lib_com/ivas_rom_com.c b/lib_com/ivas_rom_com.c new file mode 100644 index 0000000000..dd078e2dd7 --- /dev/null +++ b/lib_com/ivas_rom_com.c @@ -0,0 +1,10057 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "wmops.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * Table of IVAS bitrates + *----------------------------------------------------------------------------------*/ + +const int32_t ivas_brate_tbl[SIZE_IVAS_BRATE_TBL] = +{ + FRAME_NO_DATA, IVAS_SID_4k4, IVAS_SID_5k, + IVAS_13k2, IVAS_16k4, IVAS_24k4, IVAS_32k, IVAS_48k, + IVAS_64k, IVAS_80k, IVAS_96k, IVAS_128k, IVAS_160k, + IVAS_192k, IVAS_256k, IVAS_384k, IVAS_512k +}; + + +/*------------------------------------------------------------------------- + * DFT Stereo ROM tables + *------------------------------------------------------------------------*/ + +/*4xERB scale: max of 14 bands*/ +const int16_t dft_band_limits_erb4[STEREO_DFT_ERB4_BANDS] = +{ + 1, 3, 5, 10, 18, 26, 41, 56, 84, 132, 214, 342, 470, 601 +}; + +/*8xERB scale: max of 8 bands*/ +const int16_t dft_band_limits_erb8[STEREO_DFT_ERB8_BANDS] = +{ + 1, 5, 18, 41, 84, 214, 470, 601 +}; + +const float dft_res_cod_alpha[STEREO_DFT_BAND_MAX] = +{ + .8f, .8f, .5f, .5f, .3f, .3f, .2f, .2f +}; + +const int16_t dft_band_ipd[3][4] = +{ + {0,8,10,13}, + {0,5,6,8}, + {0,2,3,4} +}; + +const int16_t dft_band_res_cod[3][4] = +{ + {0,8,10,11}, + {0,5,6,7}, + {0,5,6,7} +}; + +const float dft_res_gains_q[][2] = +{ + /* quantization points for joint quantization of prediction gain and residual energy */ + + /* column 1 (|ILD| = 0): */ + { 0.000000f, 0.000000f }, + { 0.000000f, 0.116982f }, + { 0.000000f, 0.226991f }, + { 0.000000f, 0.340693f }, + { 0.000000f, 0.464549f }, + { 0.000000f, 0.605079f }, + { 0.000000f, 0.776250f }, + { 0.000000f, 1.000000f }, + + /* column 2 (|ILD| = 2): */ + { 0.114623f, 0.000000f }, + { 0.116171f, 0.115424f }, + { 0.120448f, 0.223857f }, + { 0.127733f, 0.335704f }, + { 0.138966f, 0.457149f }, + { 0.155840f, 0.594270f }, + { 0.182248f, 0.760034f }, + { 0.226274f, 0.974064f }, + + /* column 3 (|ILD| = 4): */ + { 0.226274f, 0.000000f }, + { 0.229210f, 0.110915f }, + { 0.237306f, 0.214802f }, + { 0.251046f, 0.321340f }, + { 0.272098f, 0.435947f }, + { 0.303429f, 0.563535f }, + { 0.351766f, 0.714464f }, + { 0.430506f, 0.902588f }, + + /* column 4 (|ILD| = 6): */ + { 0.332279f, 0.000000f }, + { 0.336318f, 0.103909f }, + { 0.347423f, 0.200786f }, + { 0.366155f, 0.299242f }, + { 0.394585f, 0.403641f }, + { 0.436296f, 0.517359f }, + { 0.499282f, 0.647470f }, + { 0.598480f, 0.801138f }, + + /* column 5 (|ILD| = 8): */ + { 0.430506f, 0.000000f }, + { 0.435293f, 0.095060f }, + { 0.448405f, 0.183172f }, + { 0.470357f, 0.271705f }, + { 0.503282f, 0.363897f }, + { 0.550751f, 0.461614f }, + { 0.620606f, 0.568856f }, + { 0.726386f, 0.687287f }, + + /* column 6 (|ILD| = 10): */ + { 0.519494f, 0.000000f }, + { 0.524665f, 0.085097f }, + { 0.538769f, 0.163459f }, + { 0.562182f, 0.241193f }, + { 0.596843f, 0.320512f }, + { 0.645875f, 0.402058f }, + { 0.716076f, 0.487487f }, + { 0.818182f, 0.574960f }, + + /* column 7 (|ILD| = 13): */ + { 0.634158f, 0.000000f }, + { 0.639318f, 0.069554f }, + { 0.653296f, 0.132950f }, + { 0.676201f, 0.194597f }, + { 0.709442f, 0.255549f }, + { 0.755149f, 0.315316f }, + { 0.818046f, 0.373555f }, + { 0.904547f, 0.426375f }, + + /* column 8 (|ILD| = 16): */ + { 0.726386f, 0.000000f }, + { 0.731048f, 0.054862f }, + { 0.743597f, 0.104384f }, + { 0.763914f, 0.151643f }, + { 0.792863f, 0.197003f }, + { 0.831670f, 0.239542f }, + { 0.883261f, 0.278217f }, + { 0.950993f, 0.309212f }, + + /* column 9 (|ILD| = 19): */ + { 0.798235f, 0.000000f }, + { 0.802164f, 0.042077f }, + { 0.812683f, 0.079739f }, + { 0.829536f, 0.115098f }, + { 0.853180f, 0.148173f }, + { 0.884212f, 0.178009f }, + { 0.924333f, 0.203506f }, + { 0.975135f, 0.221614f }, + + /* column 10 (|ILD| = 22): */ + { 0.852825f, 0.000000f }, + { 0.855976f, 0.031585f }, + { 0.864374f, 0.059662f }, + { 0.877717f, 0.085671f }, + { 0.896203f, 0.109492f }, + { 0.920064f, 0.130302f }, + { 0.950256f, 0.147176f }, + { 0.987460f, 0.157870f }, + + /* column 11 (|ILD| = 25): */ + { 0.893520f, 0.000000f }, + { 0.895958f, 0.023331f }, + { 0.902435f, 0.043958f }, + { 0.912657f, 0.062866f }, + { 0.926684f, 0.079898f }, + { 0.944559f, 0.094403f }, + { 0.966814f, 0.105673f }, + { 0.993695f, 0.112114f }, + + /* column 12 (|ILD| = 30): */ + { 0.938693f, 0.000000f }, + { 0.940202f, 0.013738f }, + { 0.944192f, 0.025807f }, + { 0.950441f, 0.036736f }, + { 0.958923f, 0.046392f }, + { 0.969577f, 0.054375f }, + { 0.982605f, 0.060264f }, + { 0.998002f, 0.063182f }, + + /* column 13 (|ILD| = 35): */ + { 0.965056f, 0.000000f }, + { 0.965951f, 0.007932f }, + { 0.968314f, 0.014873f }, + { 0.971997f, 0.021112f }, + { 0.976963f, 0.026561f }, + { 0.983149f, 0.030984f }, + { 0.990633f, 0.034143f }, + { 0.999368f, 0.035554f }, + + /* column 14 (|ILD| = 40): */ + { 0.980198f, 0.000000f }, + { 0.980717f, 0.004528f }, + { 0.982085f, 0.008481f }, + { 0.984212f, 0.012019f }, + { 0.987068f, 0.015088f }, + { 0.990608f, 0.017552f }, + { 0.994866f, 0.019278f }, + { 0.999800f, 0.019998f }, + + /* column 15 (|ILD| = 45): */ + { 0.988816f, 0.000000f }, + { 0.989113f, 0.002568f }, + { 0.989895f, 0.004807f }, + { 0.991109f, 0.006806f }, + { 0.992735f, 0.008532f }, + { 0.994746f, 0.009911f }, + { 0.997156f, 0.010865f }, + { 0.999937f, 0.011246f }, + + /* column 16 (|ILD| = 50): */ + { 0.993695f, 0.000000f }, + { 0.993864f, 0.001451f }, + { 0.994308f, 0.002715f }, + { 0.994996f, 0.003842f }, + { 0.995917f, 0.004813f }, + { 0.997054f, 0.005586f }, + { 0.998414f, 0.006117f }, + { 0.999980f, 0.006324f } +}; + +const float dft_trigo_12k8[STEREO_DFT_N_12k8_ENC / 4 + 1] = +{ + 0.0000000f, 0.0122715f, 0.0245412f, 0.0368072f, 0.0490677f, 0.0613207f, 0.0735646f, 0.0857973f, 0.0980171f, 0.1102222f, 0.1224107f, 0.1345807f, 0.1467305f, 0.1588581f, + 0.1709619f, 0.1830399f, 0.1950903f, 0.2071114f, 0.2191012f, 0.2310581f, 0.2429802f, 0.2548657f, 0.2667128f, 0.2785197f, 0.2902847f, 0.3020059f, 0.3136817f, 0.3253103f, + 0.3368899f, 0.3484187f, 0.3598950f, 0.3713172f, 0.3826834f, 0.3939920f, 0.4052413f, 0.4164296f, 0.4275551f, 0.4386162f, 0.4496113f, 0.4605387f, 0.4713967f, 0.4821838f, + 0.4928982f, 0.5035384f, 0.5141027f, 0.5245897f, 0.5349976f, 0.5453250f, 0.5555702f, 0.5657318f, 0.5758082f, 0.5857979f, 0.5956993f, 0.6055110f, 0.6152316f, 0.6248595f, + 0.6343933f, 0.6438315f, 0.6531728f, 0.6624158f, 0.6715590f, 0.6806010f, 0.6895405f, 0.6983762f, 0.7071068f, 0.7157308f, 0.7242471f, 0.7326543f, 0.7409511f, 0.7491364f, + 0.7572088f, 0.7651673f, 0.7730105f, 0.7807372f, 0.7883464f, 0.7958369f, 0.8032075f, 0.8104572f, 0.8175848f, 0.8245893f, 0.8314696f, 0.8382247f, 0.8448536f, 0.8513552f, + 0.8577286f, 0.8639729f, 0.8700870f, 0.8760701f, 0.8819213f, 0.8876396f, 0.8932243f, 0.8986745f, 0.9039893f, 0.9091680f, 0.9142098f, 0.9191139f, 0.9238795f, 0.9285061f, + 0.9329928f, 0.9373390f, 0.9415441f, 0.9456073f, 0.9495282f, 0.9533060f, 0.9569403f, 0.9604305f, 0.9637761f, 0.9669765f, 0.9700313f, 0.9729400f, 0.9757021f, 0.9783174f, + 0.9807853f, 0.9831055f, 0.9852776f, 0.9873014f, 0.9891765f, 0.9909026f, 0.9924795f, 0.9939070f, 0.9951847f, 0.9963126f, 0.9972905f, 0.9981181f, 0.9987955f, 0.9993224f, + 0.9996988f, 0.9999247f, 1.0000000f +}; + +const float dft_trigo_32k[STEREO_DFT_N_32k_ENC / 4 + 1] = +{ + 0.0000000f, 0.0049087f, 0.0098173f, 0.0147257f, 0.0196337f, 0.0245412f, 0.0294482f, 0.0343544f, 0.0392598f, 0.0441643f, 0.0490677f, 0.0539699f, 0.0588708f, 0.0637703f, + 0.0686683f, 0.0735646f, 0.0784591f, 0.0833517f, 0.0882424f, 0.0931309f, 0.0980171f, 0.1029010f, 0.1077825f, 0.1126613f, 0.1175374f, 0.1224107f, 0.1272810f, 0.1321483f, + 0.1370123f, 0.1418731f, 0.1467305f, 0.1515843f, 0.1564345f, 0.1612809f, 0.1661234f, 0.1709619f, 0.1757963f, 0.1806264f, 0.1854522f, 0.1902736f, 0.1950903f, 0.1999024f, + 0.2047096f, 0.2095119f, 0.2143092f, 0.2191012f, 0.2238880f, 0.2286695f, 0.2334454f, 0.2382156f, 0.2429802f, 0.2477389f, 0.2524916f, 0.2572382f, 0.2619786f, 0.2667128f, + 0.2714404f, 0.2761616f, 0.2808761f, 0.2855838f, 0.2902847f, 0.2949785f, 0.2996653f, 0.3043448f, 0.3090170f, 0.3136817f, 0.3183389f, 0.3229884f, 0.3276302f, 0.3322640f, + 0.3368899f, 0.3415076f, 0.3461171f, 0.3507182f, 0.3553109f, 0.3598950f, 0.3644705f, 0.3690372f, 0.3735950f, 0.3781438f, 0.3826834f, 0.3872139f, 0.3917350f, 0.3962467f, + 0.4007488f, 0.4052413f, 0.4097240f, 0.4141969f, 0.4186597f, 0.4231125f, 0.4275551f, 0.4319874f, 0.4364092f, 0.4408206f, 0.4452213f, 0.4496113f, 0.4539905f, 0.4583587f, + 0.4627159f, 0.4670620f, 0.4713967f, 0.4757202f, 0.4800321f, 0.4843325f, 0.4886212f, 0.4928982f, 0.4971633f, 0.5014164f, 0.5056574f, 0.5098862f, 0.5141027f, 0.5183069f, + 0.5224986f, 0.5266776f, 0.5308440f, 0.5349976f, 0.5391383f, 0.5432660f, 0.5473807f, 0.5514821f, 0.5555702f, 0.5596450f, 0.5637063f, 0.5677540f, 0.5717880f, 0.5758082f, + 0.5798145f, 0.5838069f, 0.5877853f, 0.5917494f, 0.5956993f, 0.5996348f, 0.6035559f, 0.6074625f, 0.6113544f, 0.6152316f, 0.6190939f, 0.6229414f, 0.6267738f, 0.6305912f, + 0.6343933f, 0.6381801f, 0.6419516f, 0.6457076f, 0.6494480f, 0.6531728f, 0.6568819f, 0.6605751f, 0.6642524f, 0.6679137f, 0.6715590f, 0.6751880f, 0.6788007f, 0.6823972f, + 0.6859771f, 0.6895405f, 0.6930874f, 0.6966175f, 0.7001308f, 0.7036273f, 0.7071068f, 0.7105693f, 0.7140146f, 0.7174427f, 0.7208536f, 0.7242471f, 0.7276231f, 0.7309816f, + 0.7343225f, 0.7376457f, 0.7409511f, 0.7442387f, 0.7475083f, 0.7507599f, 0.7539935f, 0.7572088f, 0.7604060f, 0.7635848f, 0.7667452f, 0.7698871f, 0.7730105f, 0.7761152f, + 0.7792012f, 0.7822685f, 0.7853169f, 0.7883464f, 0.7913569f, 0.7943484f, 0.7973207f, 0.8002737f, 0.8032075f, 0.8061220f, 0.8090170f, 0.8118925f, 0.8147485f, 0.8175848f, + 0.8204014f, 0.8231983f, 0.8259753f, 0.8287325f, 0.8314696f, 0.8341867f, 0.8368838f, 0.8395606f, 0.8422172f, 0.8448536f, 0.8474695f, 0.8500651f, 0.8526402f, 0.8551947f, + 0.8577286f, 0.8602419f, 0.8627344f, 0.8652061f, 0.8676570f, 0.8700870f, 0.8724960f, 0.8748840f, 0.8772509f, 0.8795967f, 0.8819213f, 0.8842246f, 0.8865066f, 0.8887673f, + 0.8910065f, 0.8932243f, 0.8954206f, 0.8975952f, 0.8997483f, 0.9018797f, 0.9039893f, 0.9060771f, 0.9081432f, 0.9101873f, 0.9122095f, 0.9142098f, 0.9161880f, 0.9181441f, + 0.9200781f, 0.9219899f, 0.9238795f, 0.9257469f, 0.9275919f, 0.9294146f, 0.9312149f, 0.9329928f, 0.9347482f, 0.9364810f, 0.9381913f, 0.9398790f, 0.9415441f, 0.9431864f, + 0.9448060f, 0.9464029f, 0.9479770f, 0.9495282f, 0.9510565f, 0.9525619f, 0.9540444f, 0.9555039f, 0.9569403f, 0.9583537f, 0.9597440f, 0.9611112f, 0.9624552f, 0.9637761f, + 0.9650737f, 0.9663480f, 0.9675991f, 0.9688268f, 0.9700313f, 0.9712123f, 0.9723699f, 0.9735041f, 0.9746149f, 0.9757021f, 0.9767659f, 0.9778061f, 0.9788228f, 0.9798158f, + 0.9807853f, 0.9817311f, 0.9826533f, 0.9835518f, 0.9844266f, 0.9852776f, 0.9861050f, 0.9869085f, 0.9876883f, 0.9884443f, 0.9891765f, 0.9898849f, 0.9905693f, 0.9912300f, + 0.9918667f, 0.9924795f, 0.9930685f, 0.9936335f, 0.9941745f, 0.9946916f, 0.9951847f, 0.9956539f, 0.9960990f, 0.9965202f, 0.9969173f, 0.9972905f, 0.9976395f, 0.9979646f, + 0.9982656f, 0.9985426f, 0.9987955f, 0.9990243f, 0.9992290f, 0.9994097f, 0.9995663f, 0.9996988f, 0.9998072f, 0.9998916f, 0.9999518f, 0.9999880f, 1.0000000f +}; + +const float dft_trigo_48k[STEREO_DFT_N_MAX_ENC / 4 + 1] = +{ + 0.0000000f, 0.0032725f, 0.0065449f, 0.0098173f, 0.0130896f, 0.0163617f, 0.0196337f, 0.0229054f, 0.0261769f, 0.0294482f, 0.0327191f, 0.0359896f, 0.0392598f, 0.0425296f, + 0.0457989f, 0.0490677f, 0.0523360f, 0.0556037f, 0.0588708f, 0.0621373f, 0.0654031f, 0.0686683f, 0.0719327f, 0.0751963f, 0.0784591f, 0.0817211f, 0.0849822f, 0.0882424f, + 0.0915016f, 0.0947599f, 0.0980171f, 0.1012733f, 0.1045285f, 0.1077825f, 0.1110353f, 0.1142870f, 0.1175374f, 0.1207866f, 0.1240345f, 0.1272810f, 0.1305262f, 0.1337700f, + 0.1370123f, 0.1402532f, 0.1434926f, 0.1467305f, 0.1499668f, 0.1532014f, 0.1564345f, 0.1596658f, 0.1628955f, 0.1661234f, 0.1693495f, 0.1725738f, 0.1757963f, 0.1790169f, + 0.1822355f, 0.1854522f, 0.1886670f, 0.1918797f, 0.1950903f, 0.1982989f, 0.2015053f, 0.2047096f, 0.2079117f, 0.2111116f, 0.2143092f, 0.2175045f, 0.2206974f, 0.2238880f, + 0.2270763f, 0.2302620f, 0.2334454f, 0.2366262f, 0.2398045f, 0.2429802f, 0.2461533f, 0.2493238f, 0.2524916f, 0.2556567f, 0.2588190f, 0.2619786f, 0.2651354f, 0.2682894f, + 0.2714404f, 0.2745886f, 0.2777338f, 0.2808761f, 0.2840153f, 0.2871515f, 0.2902847f, 0.2934147f, 0.2965416f, 0.2996653f, 0.3027858f, 0.3059030f, 0.3090170f, 0.3121277f, + 0.3152350f, 0.3183389f, 0.3214395f, 0.3245366f, 0.3276302f, 0.3307203f, 0.3338069f, 0.3368899f, 0.3399692f, 0.3430450f, 0.3461171f, 0.3491854f, 0.3522500f, 0.3553109f, + 0.3583679f, 0.3614212f, 0.3644705f, 0.3675159f, 0.3705574f, 0.3735950f, 0.3766285f, 0.3796580f, 0.3826834f, 0.3857048f, 0.3887220f, 0.3917350f, 0.3947439f, 0.3977485f, + 0.4007488f, 0.4037449f, 0.4067366f, 0.4097240f, 0.4127070f, 0.4156856f, 0.4186597f, 0.4216294f, 0.4245945f, 0.4275551f, 0.4305111f, 0.4334625f, 0.4364092f, 0.4393513f, + 0.4422887f, 0.4452213f, 0.4481492f, 0.4510723f, 0.4539905f, 0.4569039f, 0.4598124f, 0.4627159f, 0.4656145f, 0.4685081f, 0.4713967f, 0.4742803f, 0.4771588f, 0.4800321f, + 0.4829003f, 0.4857634f, 0.4886212f, 0.4914739f, 0.4943212f, 0.4971633f, 0.5000000f, 0.5028314f, 0.5056574f, 0.5084780f, 0.5112931f, 0.5141027f, 0.5169069f, 0.5197055f, + 0.5224986f, 0.5252860f, 0.5280679f, 0.5308440f, 0.5336145f, 0.5363793f, 0.5391383f, 0.5418916f, 0.5446390f, 0.5473807f, 0.5501164f, 0.5528463f, 0.5555702f, 0.5582882f, + 0.5610003f, 0.5637063f, 0.5664062f, 0.5691001f, 0.5717880f, 0.5744697f, 0.5771452f, 0.5798145f, 0.5824777f, 0.5851346f, 0.5877853f, 0.5904296f, 0.5930676f, 0.5956993f, + 0.5983246f, 0.6009435f, 0.6035559f, 0.6061619f, 0.6087614f, 0.6113544f, 0.6139408f, 0.6165207f, 0.6190939f, 0.6216606f, 0.6242205f, 0.6267738f, 0.6293204f, 0.6318602f, + 0.6343933f, 0.6369196f, 0.6394390f, 0.6419516f, 0.6444573f, 0.6469562f, 0.6494480f, 0.6519330f, 0.6544109f, 0.6568819f, 0.6593458f, 0.6618027f, 0.6642524f, 0.6666951f, + 0.6691306f, 0.6715590f, 0.6739801f, 0.6763941f, 0.6788007f, 0.6812002f, 0.6835923f, 0.6859771f, 0.6883546f, 0.6907247f, 0.6930874f, 0.6954426f, 0.6977905f, 0.7001308f, + 0.7024637f, 0.7047890f, 0.7071068f, 0.7094170f, 0.7117196f, 0.7140146f, 0.7163019f, 0.7185816f, 0.7208536f, 0.7231179f, 0.7253744f, 0.7276231f, 0.7298641f, 0.7320972f, + 0.7343225f, 0.7365399f, 0.7387495f, 0.7409511f, 0.7431448f, 0.7453306f, 0.7475083f, 0.7496781f, 0.7518398f, 0.7539935f, 0.7561391f, 0.7582766f, 0.7604060f, 0.7625272f, + 0.7646403f, 0.7667452f, 0.7688418f, 0.7709303f, 0.7730105f, 0.7750824f, 0.7771460f, 0.7792012f, 0.7812482f, 0.7832867f, 0.7853169f, 0.7873387f, 0.7893520f, 0.7913569f, + 0.7933533f, 0.7953413f, 0.7973207f, 0.7992915f, 0.8012538f, 0.8032075f, 0.8051526f, 0.8070891f, 0.8090170f, 0.8109362f, 0.8128467f, 0.8147485f, 0.8166416f, 0.8185259f, + 0.8204014f, 0.8222682f, 0.8241262f, 0.8259753f, 0.8278156f, 0.8296471f, 0.8314696f, 0.8332833f, 0.8350880f, 0.8368838f, 0.8386706f, 0.8404484f, 0.8422172f, 0.8439770f, + 0.8457278f, 0.8474695f, 0.8492022f, 0.8509257f, 0.8526402f, 0.8543455f, 0.8560416f, 0.8577286f, 0.8594064f, 0.8610750f, 0.8627344f, 0.8643845f, 0.8660254f, 0.8676570f, + 0.8692793f, 0.8708923f, 0.8724960f, 0.8740903f, 0.8756753f, 0.8772509f, 0.8788171f, 0.8803739f, 0.8819213f, 0.8834592f, 0.8849876f, 0.8865066f, 0.8880161f, 0.8895161f, + 0.8910065f, 0.8924874f, 0.8939588f, 0.8954206f, 0.8968727f, 0.8983153f, 0.8997483f, 0.9011716f, 0.9025853f, 0.9039893f, 0.9053836f, 0.9067683f, 0.9081432f, 0.9095084f, + 0.9108638f, 0.9122095f, 0.9135455f, 0.9148716f, 0.9161880f, 0.9174945f, 0.9187912f, 0.9200781f, 0.9213551f, 0.9226223f, 0.9238795f, 0.9251269f, 0.9263644f, 0.9275919f, + 0.9288096f, 0.9300172f, 0.9312149f, 0.9324027f, 0.9335804f, 0.9347482f, 0.9359059f, 0.9370536f, 0.9381913f, 0.9393190f, 0.9404366f, 0.9415441f, 0.9426415f, 0.9437288f, + 0.9448060f, 0.9458732f, 0.9469301f, 0.9479770f, 0.9490136f, 0.9500402f, 0.9510565f, 0.9520627f, 0.9530586f, 0.9540444f, 0.9550199f, 0.9559853f, 0.9569403f, 0.9578852f, + 0.9588197f, 0.9597440f, 0.9606581f, 0.9615618f, 0.9624552f, 0.9633384f, 0.9642112f, 0.9650737f, 0.9659258f, 0.9667676f, 0.9675991f, 0.9684202f, 0.9692309f, 0.9700313f, + 0.9708212f, 0.9716008f, 0.9723699f, 0.9731287f, 0.9738770f, 0.9746149f, 0.9753423f, 0.9760593f, 0.9767659f, 0.9774620f, 0.9781476f, 0.9788228f, 0.9794874f, 0.9801416f, + 0.9807853f, 0.9814185f, 0.9820411f, 0.9826533f, 0.9832549f, 0.9838460f, 0.9844266f, 0.9849966f, 0.9855561f, 0.9861050f, 0.9866433f, 0.9871711f, 0.9876883f, 0.9881950f, + 0.9886910f, 0.9891765f, 0.9896514f, 0.9901157f, 0.9905693f, 0.9910124f, 0.9914449f, 0.9918667f, 0.9922779f, 0.9926785f, 0.9930685f, 0.9934478f, 0.9938165f, 0.9941745f, + 0.9945219f, 0.9948586f, 0.9951847f, 0.9955002f, 0.9958049f, 0.9960990f, 0.9963825f, 0.9966552f, 0.9969173f, 0.9971688f, 0.9974095f, 0.9976395f, 0.9978589f, 0.9980676f, + 0.9982656f, 0.9984529f, 0.9986295f, 0.9987955f, 0.9989507f, 0.9990952f, 0.9992290f, 0.9993522f, 0.9994646f, 0.9995663f, 0.9996573f, 0.9997376f, 0.9998072f, 0.9998661f, + 0.9999143f, 0.9999518f, 0.9999786f, 0.9999946f, 1.0000000f +}; + +/* tables for adaptive Golomb-Rice coding of DFT stereo parameters */ +const int16_t dft_code_itd[] = +{ + 0, 3, 4, 13, 8, 9, 12, 5, 10, 44, 23, 60, 45, 31, 235, 59, 28, 61, 234, 116 +}; + +const int16_t dft_len_itd[] = +{ + 2, 3, 4, 4, 4, 4, 4, 4, 4, 6, 5, 6, 6, 5, 8, 6, 5, 6, 8, 7 +}; + +const int16_t dft_maps_rpg[] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, + 2, 0, 1, 3, 4, 5, 6, 7, + 6, 2, 0, 1, 3, 4, 5, 7, + 7, 5, 2, 0, 1, 3, 4, 6, + 7, 6, 4, 3, 1, 0, 2, 5, + 7, 6, 5, 3, 2, 1, 0, 4, + 7, 6, 5, 4, 3, 2, 0, 1, + 7, 6, 5, 4, 3, 2, 0, 1, + 6, 5, 4, 3, 1, 0, 2, 7, +}; + +const int16_t dft_maps_sg[NO_SYMB_GR_SIDE_G * NO_SYMB_GR_SIDE_G] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 15, 4, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 12, 9, 4, 1, 0, 2, 3, 5, 6, 7, 8, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 16, 14, 8, 4, 2, 0, 1, 3, 5, 6, 7, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 18, 16, 14, 10, 5, 0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 15, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 21, 19, 17, 15, 8, 4, 2, 0, 1, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 21, 19, 17, 15, 12, 8, 4, 0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 21, 19, 17, 15, 13, 11, 9, 3, 0, 1, 2, 4, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 24, 22, 20, 18, 16, 14, 12, 9, 6, 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 15, 17, 19, 21, 23, 25, 26, 27, 28, 29, 30, + 25, 23, 21, 19, 17, 15, 13, 11, 9, 6, 0, 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 27, 28, 29, 30, + 27, 25, 23, 21, 19, 17, 15, 13, 11, 8, 5, 0, 1, 2, 3, 4, 6, 7, 9, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 29, 30, + 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 1, 0, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 28, 29, 30, + 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 30, + 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 0, 1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, + 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, + 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 1, 0, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, + 30, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, + 30, 29, 28, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 0, 1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, + 30, 29, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 9, 7, 6, 4, 3, 2, 1, 0, 5, 8, 11, 13, 15, 17, 19, 21, 23, 25, 27, + 30, 29, 28, 27, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 7, 5, 4, 3, 2, 1, 0, 6, 9, 11, 13, 15, 17, 19, 21, 23, 25, + 30, 29, 28, 27, 26, 25, 23, 21, 19, 17, 15, 13, 11, 10, 8, 7, 5, 4, 3, 2, 1, 0, 6, 9, 12, 14, 16, 18, 20, 22, 24, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 20, 18, 16, 14, 12, 10, 8, 7, 6, 5, 4, 2, 1, 0, 3, 9, 11, 13, 15, 17, 19, 21, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 20, 18, 16, 14, 13, 11, 10, 9, 7, 6, 5, 3, 2, 1, 0, 4, 8, 12, 15, 17, 19, 21, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 20, 18, 16, 14, 13, 12, 11, 10, 9, 7, 6, 5, 3, 1, 0, 2, 4, 8, 15, 17, 19, 21, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 17, 15, 13, 12, 11, 9, 8, 7, 6, 4, 3, 2, 1, 0, 5, 10, 14, 16, 18, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 15, 13, 12, 11, 10, 9, 7, 6, 5, 3, 1, 0, 2, 4, 8, 14, 16, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 11, 10, 8, 7, 6, 5, 3, 2, 0, 1, 4, 9, 12, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 3, 2, 1, 0, 4, 15, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1, + 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 +}; + + +/*------------------------------------------------------------------------- + * Range Coder ROM tables + *------------------------------------------------------------------------*/ + +/* Create separate tables for cumulative frequency and symbol frequency */ +const uint16_t cum_freq_ari_pk_s17_LC_ext[RANGE_N_CONTEXT][1 + RANGE_N_SYMBOLS] = +{ + { 0,16,47,153,241,269,325,468,591,674,798,912,1017,1082,1183,1277,1364,16384 }, + { 0,7401,7844,7886,7899,12065,12718,12790,12805,14099,14476,14533,14549,15058,15264,15299,15310,16384 }, + { 0,4362,6345,6864,7038,9037,11049,11736,12002,12569,13301,13656,13822,14021,14334,14515,14607,16384 }, + { 0,2955,5183,5822,6013,8153,10671,11614,11943,12586,13540,14025,14232,14437,14770,14978,15080,16384 }, + { 0,3155,4981,5615,5855,7969,9953,10739,11073,11936,12837,13208,13383,13767,14203,14400,14498,16384 }, + { 0,1216,2630,3264,3558,4831,6679,7661,8157,8709,9622,10204,10542,10799,11243,11568,11777,16384 }, + { 0,1759,3641,4350,4612,6325,8678,9732,10161,10790,11790,12361,12642,12883,13295,13566,13720,16384 }, + { 0,1109,2705,3433,3732,5226,7532,8732,9263,9978,11142,11842,12188,12490,12986,13321,13520,16384 }, + { 0,11524,13046,13170,13191,14956,15708,15813,15837,16028,16162,16195,16204,16245,16282,16295,16300,16384 }, + { 0,8027,10586,10909,10974,13291,14861,15157,15232,15535,15824,15914,15943,16014,16090,16123,16136,16384 }, + { 0,834,2034,2674,2997,4087,5843,6891,7455,8030,9013,9688,10085,10376,10893,11277,11528,16384 }, + { 0,6038,9086,9451,9519,12332,14521,14913,15003,15329,15711,15848,15893,15955,16045,16091,16111,16384 }, + { 0,4732,7685,8354,8545,10717,12924,13618,13852,14291,14842,15083,15181,15314,15491,15582,15625,16384 }, + { 0,745,1783,2347,2655,3537,4963,5864,6406,6863,7664,8248,8634,8891,9351,9708,9958,16384 }, + { 0,3957,6794,7669,7998,9743,11676,12498,12869,13313,13894,14186,14332,14498,14714,14835,14906,16384 }, + { 0,2779,5388,6021,6201,8582,11352,12260,12544,13117,13981,14408,14580,14751,15039,15213,15298,16384 }, + { 0,448,1160,1625,1920,2576,3706,4518,5053,5474,6234,6835,7262,7531,8032,8446,8758,16384 }, + { 0,1,2,1555,2246,2247,2248,3489,4112,5449,6596,7302,7710,8311,8876,9266,9517,16384 }, + { 0,2496,4910,5544,5722,8049,10799,11689,11973,12583,13467,13878,14047,14234,14537,14712,14803,16384 }, + { 0,921,2222,2880,3188,4407,6321,7406,7955,8573,9616,10296,10679,10978,11502,11880,12118,16384 }, + { 0,2620,4443,5017,5233,7072,9213,10083,10441,11049,11954,12442,12676,12918,13310,13565,13705,16384 }, + { 0,11205,13084,13178,13187,15164,16010,16081,16091,16213,16303,16321,16325,16340,16355,16360,16362,16384 }, + { 0,358,916,1288,1542,2055,2937,3594,4062,4399,5017,5524,5907,6136,6573,6941,7236,16384 }, + { 0,3575,5093,5536,5735,7408,9185,9878,10188,10727,11497,11933,12165,12410,12794,13019,13166,16384 }, + { 0,1,2,640,1036,1037,1038,1670,2096,2696,3287,3732,4056,4417,4800,5106,5339,16384 }, + { 0,969,1397,1518,1578,2633,3338,3566,3675,4197,4664,4857,4957,5288,5625,5783,5874,16384 }, + { 0,10458,12104,12294,12331,14246,15264,15437,15481,15752,15971,16031,16050,16120,16186,16210,16218,16384 }, + { 0,7178,9744,10039,10093,12701,14612,14961,15042,15360,15732,15869,15917,15978,16070,16117,16139,16384 }, + { 0,1298,2418,2879,3113,4146,5509,6227,6621,7053,7755,8229,8539,8776,9186,9492,9714,16384 }, + { 0,4957,7785,8252,8357,10978,13372,13955,14114,14561,15140,15378,15464,15570,15730,15820,15860,16384 }, + { 0,4823,8164,8570,8647,11604,14169,14653,14763,15105,15554,15727,15785,15852,15960,16018,16045,16384 }, + { 0,4735,7010,7517,7660,9986,12230,12914,13131,13666,14374,14689,14814,14972,15212,15342,15404,16384 }, + { 0,3363,5881,6658,6941,8864,11113,12015,12368,12889,13643,14019,14203,14394,14665,14823,14906,16384 }, + { 0,2569,4996,5779,6068,7917,10251,11209,11602,12129,12918,13321,13520,13696,13976,14155,14259,16384 }, + { 0,209,577,848,1046,1378,1982,2465,2835,3072,3513,3893,4202,4374,4703,4994,5241,16384 }, + { 0,2074,4337,5048,5274,7319,10003,11066,11446,12105,13112,13652,13885,14100,14464,14691,14810,16384 }, + { 0,1619,3560,4288,4550,6381,8955,10102,10543,11239,12362,12982,13261,13516,13958,14234,14381,16384 }, + { 0,89,257,441,582,734,1024,1325,1568,1716,1983,2222,2430,2545,2750,2941,3109,16384 }, + { 0,2202,3563,4044,4264,5686,7344,8100,8476,9006,9835,10331,10612,10864,11304,11599,11787,16384 }, + { 0,1220,2801,3492,3784,5223,7387,8496,8998,9640,10711,11369,11711,11993,12486,12829,13035,16384 }, + { 0,12626,13813,13903,13917,15396,15906,15972,15987,16139,16230,16251,16257,16289,16315,16323,16326,16384 }, + { 0,1579,3191,3831,4099,5678,7788,8761,9206,9842,10821,11388,11681,11958,12417,12722,12902,16384 }, + { 0,597,1514,2064,2379,3237,4679,5637,6213,6733,7649,8316,8755,9052,9599,10023,10323,16384 }, + { 0,9273,11762,12080,12151,14038,15210,15446,15514,15725,15929,15995,16019,16068,16124,16148,16158,16384 }, + { 0,9238,11681,11852,11872,14306,15644,15801,15828,16013,16183,16231,16243,16266,16297,16312,16318,16384 }, + { 0,6791,9200,9531,9594,12240,14178,14552,14639,15064,15506,15643,15687,15785,15908,15960,15983,16384 }, + { 0,7175,10415,10905,11033,13038,14621,15002,15123,15367,15651,15762,15806,15864,15938,15974,15992,16384 }, + { 0,5060,7703,8132,8225,10934,13270,13778,13911,14397,14972,15173,15242,15367,15537,15619,15654,16384 }, + { 0,3721,6311,6857,6992,9557,12180,12895,13098,13671,14418,14718,14830,14984,15212,15333,15390,16384 }, + { 0,5971,9288,10044,10269,11991,13680,14228,14437,14750,15130,15293,15374,15459,15579,15642,15677,16384 }, + { 0,3047,5311,5907,6078,8339,10850,11679,11946,12580,13442,13854,14024,14220,14534,14716,14810,16384 }, + { 0,2061,4280,4993,5228,7201,9735,10735,11097,11708,12606,13082,13295,13498,13836,14043,14161,16384 }, + { 0,4738,7949,8880,9234,10781,12502,13214,13531,13897,14355,14593,14718,14835,14998,15096,15153,16384 }, + { 0,3237,5045,5632,5860,7609,9702,10608,10986,11571,12476,12978,13230,13451,13830,14074,14208,16384 }, + { 0,1833,3889,4677,5028,6422,8379,9378,9884,10350,11086,11545,11809,12003,12327,12559,12711,16384 }, + { 0,3989,6858,7352,7459,10254,12936,13571,13735,14240,14895,15153,15242,15364,15548,15646,15690,16384 }, + { 0,1463,3197,3909,4220,5626,7609,8632,9127,9657,10520,11078,11380,11607,11991,12265,12442,16384 }, + { 0,14233,15083,15108,15110,16069,16300,16314,16316,16352,16370,16373,16374,16377,16380,16381,16382,16384 }, + { 0,1,2,2610,3293,3294,3295,5097,5671,8467,10332,11119,11437,12223,12850,13185,13345,16384 }, + { 0,2010,4053,4696,4910,6879,9391,10386,10750,11393,12376,12886,13119,13348,13726,13967,14099,16384 }, + { 0,7586,10517,10758,10791,13543,15346,15577,15619,15846,16082,16150,16169,16202,16245,16265,16273,16384 }, + { 0,3059,5772,6369,6524,9041,11801,12582,12813,13361,14115,14439,14567,14714,14944,15075,15141,16384 }, + { 0,8643,10594,10813,10856,13274,14686,14920,14975,15350,15680,15771,15799,15897,16003,16042,16057,16384 }, + { 0,6720,8878,9325,9467,11564,13248,13744,13929,14384,14880,15087,15167,15311,15488,15569,15607,16384 }, +}; + +const uint16_t sym_freq_ari_pk_s17_LC_ext[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = +{ + { 16,31,106,88,28,56,143,123,83,124,114,105,65,101,94,87,15020 }, + { 7401,443,42,13,4166,653,72,15,1294,377,57,16,509,206,35,11,1074 }, + { 4362,1983,519,174,1999,2012,687,266,567,732,355,166,199,313,181,92,1777 }, + { 2955,2228,639,191,2140,2518,943,329,643,954,485,207,205,333,208,102,1304 }, + { 3155,1826,634,240,2114,1984,786,334,863,901,371,175,384,436,197,98,1886 }, + { 1216,1414,634,294,1273,1848,982,496,552,913,582,338,257,444,325,209,4607 }, + { 1759,1882,709,262,1713,2353,1054,429,629,1000,571,281,241,412,271,154,2664 }, + { 1109,1596,728,299,1494,2306,1200,531,715,1164,700,346,302,496,335,199,2864 }, + { 11524,1522,124,21,1765,752,105,24,191,134,33,9,41,37,13,5,84 }, + { 8027,2559,323,65,2317,1570,296,75,303,289,90,29,71,76,33,13,248 }, + { 834,1200,640,323,1090,1756,1048,564,575,983,675,397,291,517,384,251,4856 }, + { 6038,3048,365,68,2813,2189,392,90,326,382,137,45,62,90,46,20,273 }, + { 4732,2953,669,191,2172,2207,694,234,439,551,241,98,133,177,91,43,759 }, + { 745,1038,564,308,882,1426,901,542,457,801,584,386,257,460,357,250,6426 }, + { 3957,2837,875,329,1745,1933,822,371,444,581,292,146,166,216,121,71,1478 }, + { 2779,2609,633,180,2381,2770,908,284,573,864,427,172,171,288,174,85,1086 }, + { 448,712,465,295,656,1130,812,535,421,760,601,427,269,501,414,312,7626 }, + { 1,1,1553,691,1,1,1241,623,1337,1147,706,408,601,565,390,251,6867 }, + { 2496,2414,634,178,2327,2750,890,284,610,884,411,169,187,303,175,91,1581 }, + { 921,1301,658,308,1219,1914,1085,549,618,1043,680,383,299,524,378,238,4266 }, + { 2620,1823,574,216,1839,2141,870,358,608,905,488,234,242,392,255,140,2679 }, + { 11205,1879,94,9,1977,846,71,10,122,90,18,4,15,15,5,2,22 }, + { 358,558,372,254,513,882,657,468,337,618,507,383,229,437,368,295,9148 }, + { 3575,1518,443,199,1673,1777,693,310,539,770,436,232,245,384,225,147,3218 }, + { 1,1,638,396,1,1,632,426,600,591,445,324,361,383,306,233,11045 }, + { 969,428,121,60,1055,705,228,109,522,467,193,100,331,337,158,91,10510 }, + { 10458,1646,190,37,1915,1018,173,44,271,219,60,19,70,66,24,8,166 }, + { 7178,2566,295,54,2608,1911,349,81,318,372,137,48,61,92,47,22,245 }, + { 1298,1120,461,234,1033,1363,718,394,432,702,474,310,237,410,306,222,6670 }, + { 4957,2828,467,105,2621,2394,583,159,447,579,238,86,106,160,90,40,524 }, + { 4823,3341,406,77,2957,2565,484,110,342,449,173,58,67,108,58,27,339 }, + { 4735,2275,507,143,2326,2244,684,217,535,708,315,125,158,240,130,62,980 }, + { 3363,2518,777,283,1923,2249,902,353,521,754,376,184,191,271,158,83,1478 }, + { 2569,2427,783,289,1849,2334,958,393,527,789,403,199,176,280,179,104,2125 }, + { 209,368,271,198,332,604,483,370,237,441,380,309,172,329,291,247,11143 }, + { 2074,2263,711,226,2045,2684,1063,380,659,1007,540,233,215,364,227,119,1574 }, + { 1619,1941,728,262,1831,2574,1147,441,696,1123,620,279,255,442,276,147,2003 }, + { 89,168,184,141,152,290,301,243,148,267,239,208,115,205,191,168,13275 }, + { 2202,1361,481,220,1422,1658,756,376,530,829,496,281,252,440,295,188,4597 }, + { 1220,1581,691,292,1439,2164,1109,502,642,1071,658,342,282,493,343,206,3349 }, + { 12626,1187,90,14,1479,510,66,15,152,91,21,6,32,26,8,3,58 }, + { 1579,1612,640,268,1579,2110,973,445,636,979,567,293,277,459,305,180,3482 }, + { 597,917,550,315,858,1442,958,576,520,916,667,439,297,547,424,300,6061 }, + { 9273,2489,318,71,1887,1172,236,68,211,204,66,24,49,56,24,10,226 }, + { 9238,2443,171,20,2434,1338,157,27,185,170,48,12,23,31,15,6,66 }, + { 6791,2409,331,63,2646,1938,374,87,425,442,137,44,98,123,52,23,401 }, + { 7175,3240,490,128,2005,1583,381,121,244,284,111,44,58,74,36,18,392 }, + { 5060,2643,429,93,2709,2336,508,133,486,575,201,69,125,170,82,35,730 }, + { 3721,2590,546,135,2565,2623,715,203,573,747,300,112,154,228,121,57,994 }, + { 5971,3317,756,225,1722,1689,548,209,313,380,163,81,85,120,63,35,707 }, + { 3047,2264,596,171,2261,2511,829,267,634,862,412,170,196,314,182,94,1574 }, + { 2061,2219,713,235,1973,2534,1000,362,611,898,476,213,203,338,207,118,2223 }, + { 4738,3211,931,354,1547,1721,712,317,366,458,238,125,117,163,98,57,1231 }, + { 3237,1808,587,228,1749,2093,906,378,585,905,502,252,221,379,244,134,2176 }, + { 1833,2056,788,351,1394,1957,999,506,466,736,459,264,194,324,232,152,3673 }, + { 3989,2869,494,107,2795,2682,635,164,505,655,258,89,122,184,98,44,694 }, + { 1463,1734,712,311,1406,1983,1023,495,530,863,558,302,227,384,274,177,3942 }, + { 14233,850,25,2,959,231,14,2,36,18,3,1,3,3,1,1,2 }, + { 1,1,2608,683,1,1,1802,574,2796,1865,787,318,786,627,335,160,3039 }, + { 2010,2043,643,214,1969,2512,995,364,643,983,510,233,229,378,241,132,2285 }, + { 7586,2931,241,33,2752,1803,231,42,227,236,68,19,33,43,20,8,111 }, + { 3059,2713,597,155,2517,2760,781,231,548,754,324,128,147,230,131,66,1243 }, + { 8643,1951,219,43,2418,1412,234,55,375,330,91,28,98,106,39,15,327 }, + { 6720,2158,447,142,2097,1684,496,185,455,496,207,80,144,177,81,38,777 }, +}; + + +/*------------------------------------------------------------------------- + * ECLVQ Stereo ROM tables + *------------------------------------------------------------------------*/ + +/* table with round(ECSQ_PROB_TOTAL / index) for entropy coding, with i in {1, .., ECSQ_SEGMENT_SIZE} */ +const uint16_t ECSQ_tab_inverse[1 + ECSQ_SEGMENT_SIZE] = +{ + 0, 16384, 8192, 5461, 4096, 3277, 2731, 2341, 2048 +}; + + +/*------------------------------------------------------------------------- + * Stereo ICA analysis ROM tables + *------------------------------------------------------------------------*/ + +const float ica_sincInterp2[2*SINC_ORDER1+1] = +{ + 0.0f,-0.002323f,0.0f, 0.003486f, 0.0f,-0.005865f,0.0f, 0.009735f, 0.0f,-0.015447f,0.0f, 0.023503f, + 0.0f,-0.034727f,0.0f, 0.050649f, 0.0f,-0.074578f,0.0f, 0.115220f, 0.0f,-0.204776f,0.0f, 0.634114f, + 1.0f, 0.634114f,0.0f,-0.204776f, 0.0f, 0.115220f,0.0f,-0.074578f, 0.0f, 0.050649f,0.0f,-0.034727f, + 0.0f, 0.023503f,0.0f,-0.015447f, 0.0f, 0.009735f,0.0f,-0.005865f, 0.0f, 0.003486f,0.0f,-0.002323f, 0.0f +}; + +const float ica_sincInterp4[2*SINC_ORDER1+1] = +{ + 0.0f,-0.003285f,-0.005537f,-0.004930f, 0.0f, 0.008295f, 0.015189f, 0.013767f, 0.0f,-0.021845f,-0.038282f,-0.033239f, + 0.0f, 0.049111f, 0.083913f, 0.071628f, 0.0f,-0.105469f,-0.183615f,-0.162946f, 0.0f, 0.289597f, 0.626641f, 0.896773f, + 1.0f, 0.896773f, 0.626641f, 0.289597f, 0.0f,-0.162946f,-0.183615f,-0.105469f, 0.0f, 0.071628f, 0.083913f, 0.049111f, + 0.0f,-0.033239f,-0.038282f,-0.021845f, 0.0f, 0.013767f, 0.015189f, 0.008295f, 0.0f,-0.004930f,-0.005537f,-0.003285f, 0.0f +}; + +const float ica_sincInterp6[2*SINC_ORDER1+1] = +{ + 0.0f,-0.003484f,-0.007192f,-0.010460f,-0.011712f,-0.008798f, 0.0f, 0.014603f, 0.032045f, 0.046341f, 0.049731f, 0.035255f, + 0.0f,-0.052090f,-0.109007f,-0.151947f,-0.159196f,-0.111867f, 0.0f, 0.172831f, 0.388013f, 0.614328f, 0.814030f, 0.951171f, + 1.0f, 0.951171f, 0.814030f, 0.614328f, 0.388013f, 0.172831f, 0.0f,-0.111867f,-0.159196f,-0.151947f,-0.109007f,-0.052090f, + 0.0f, 0.035255f, 0.049731f, 0.046341f, 0.032045f, 0.014603f, 0.0f,-0.008798f,-0.011712f,-0.010460f,-0.007192f,-0.003484f, 0.0f +}; + + +/*----------------------------------------------------------------------------------* + * Stereo IC-BWE ROM tables + *----------------------------------------------------------------------------------*/ + +const float icbwe_gsMapping_tbl[16] = +{ + -2.0000000f, -1.3494960f, -0.9607952f, -0.7098941f, -0.5589364f, -0.4453763f, -0.3429649f, -0.2527705f, + -0.1690688f, -0.0987095f, -0.0700000f, -0.0500000f, -0.0200000f, 0.0000000f, 0.0400000f, 0.0800000f +}; + +const float icbwe_gsMappingDFT_tbl[128] = +{ + -5.0000000f, -4.5000000f, -4.0000000f, -3.5000000f, -3.0000000f, -2.5000000f, -1.9000000f, -1.5474502f, + -1.5002078f, -1.4469336f, -1.3902478f, -1.3770106f, -1.3094972f, -1.2608015f, -1.0926061f, -1.0843442f, + -1.0345038f, -1.0286606f, -1.0161779f, -1.0036838f, -0.9812821f, -0.9698121f, -0.9573308f, -0.9405646f, + -0.9297086f, -0.9131601f, -0.9025761f, -0.8860643f, -0.8736950f, -0.8564931f, -0.8403996f, -0.8352164f, + -0.8241847f, -0.8038731f, -0.7923367f, -0.7789138f, -0.7679189f, -0.7595301f, -0.7566783f, -0.7507762f, + -0.7428076f, -0.7386452f, -0.7339793f, -0.7300271f, -0.7243238f, -0.7188097f, -0.7090309f, -0.7047743f, + -0.7000968f, -0.6903794f, -0.6844128f, -0.6792722f, -0.6724832f, -0.6680448f, -0.6638050f, -0.6587732f, + -0.6519668f, -0.6454810f, -0.6418348f, -0.6352437f, -0.6296001f, -0.6244346f, -0.6182194f, -0.6134241f, + -0.6093079f, -0.6042419f, -0.5995789f, -0.5946505f, -0.5897729f, -0.5851547f, -0.5806601f, -0.5759744f, + -0.5720182f, -0.5669503f, -0.5630283f, -0.5573819f, -0.5511614f, -0.5438205f, -0.5364699f, -0.5282783f, + -0.5198154f, -0.5095584f, -0.4986083f, -0.4861976f, -0.4725366f, -0.4591254f, -0.4449745f, -0.4310394f, + -0.4169318f, -0.4033374f, -0.3898838f, -0.3766562f, -0.3616849f, -0.3472800f, -0.3326788f, -0.3194550f, + -0.3060711f, -0.2916924f, -0.2783983f, -0.2642500f, -0.2506378f, -0.2368909f, -0.2203000f, -0.2036115f, + -0.1869981f, -0.1709912f, -0.1561569f, -0.1420659f, -0.1263750f, -0.1107119f, -0.0953914f, -0.0805369f, + -0.0660773f, -0.0529481f, -0.0401913f, -0.0287031f, -0.0184659f, -0.0094214f, 0.0000000f, 0.0073561f, + 0.0155180f, 0.0224511f, 0.0298570f, 0.0375954f, 0.0457853f, 0.0549424f, 0.0659733f, 0.0785186f +}; + + +/*----------------------------------------------------------------------------------* + * TD Stereo ROM tables + *----------------------------------------------------------------------------------*/ + +const float tdm_ratio_tabl[TDM_NQ+1] = +{ + 0.00f, 0.00f, 0.0109f, 0.0245f, 0.0432f, 0.0670f, 0.0955f, 0.1284f, + 0.1654f, 0.2061f, 0.2500f, 0.2966f, 0.3455f, 0.3960f, 0.4477f, 0.5000f, + 0.5523f, 0.6040f, 0.6545f, 0.7034f, 0.7500f, 0.7939f, 0.8346f, 0.8716f, + 0.9045f, 0.9330f, 0.9568f, 0.9755f, 0.9891f, 1.0000f, 1.0000f, 1.0000f +}; +const float tdm_den_ratio_tabl[TDM_NQ+1] = /* 1.0f/(2*LR_ratio*LR_ratio-2*LR_ratio+1) */ +{ + 1.0000f, 1.0000f, 1.0221f, 1.0501f, 1.0902f, 1.1429f, 1.2088f, 1.2884f, + 1.3815f, 1.4864f, 1.6000f, 1.7161f, 1.8257f, 1.9171f, 1.9784f, 2.0000f, + 1.9784f, 1.9171f, 1.8257f, 1.7161f, 1.6000f, 1.4864f, 1.3815f, 1.2884f, + 1.2088f, 1.1429f, 1.0902f, 1.0501f, 1.0221f, 1.0000f, 1.0000f, 1.0000f +}; + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +const int16_t tdm_bit_allc_tbl[5][6] = +{ + /* IC -- UC -- GC -- TM --AC */ + { 1650, 3500, 0, 4400, 0, 5000 }, /* IVAS_13k2 */ + { 1650, 3500, 0, 5000, 0, 5000 }, /* IVAS_16k4 */ + { 1650, 3500, 0, 6000, 0, 5000 }, /* IVAS_24k4 */ + { 1650, 6050, 0, 10000, 0, 10000 }, /* IVAS_32k */ + { 1650, 6050, 0, 13000, 0, 14000 } /* IVAS_48k */ +}; +#else +const int16_t tdm_bit_allc_tbl[5][6] = +{ + /* IC -- UC -- GC -- TM --AC */ + { 1600, 3450, 0, 4400, 0, 5000 }, /* IVAS_13k2 */ + { 1600, 3450, 0, 5000, 0, 5000 }, /* IVAS_16k4 */ + { 1600, 3450, 0, 6000, 0, 5000 }, /* IVAS_24k4 */ + { 1600, 6000, 0, 10000, 0, 10000 }, /* IVAS_32k */ + { 1600, 6000, 0, 13000, 0, 14000 } /* IVAS_48k */ +}; +#endif + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +/* LSFs Intra-frame prediction tables */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE +const float tdm_LSF_MEAN_RE_USE_OUT[M] = +{ + 301.292f, 521.300f, 870.818f, 1340.278f, 1712.099f, 2091.456f, 2488.523f, 2841.096f, 3196.565f, 3593.040f, 3958.366f, 4293.334f, 4710.319f, 5118.806f, 5546.761f, 5918.579f, +}; + +const float tdm_LSF_MEAN_RE_USE_IN[M] = +{ + 286.414f, 522.366f, 887.297f, 1347.961f, 1725.604f, 2102.356f, 2511.703f, 2853.093f, 3211.319f, 3612.072f, 3970.889f, 4327.774f, 4732.423f, 5154.984f, 5572.849f, 5964.332f, +}; + +const float tdm_LSF_MEAN_RE_USE[M] = +{ + 265.534222F, 534.776631F, 919.574509F, 1346.991675F, 1756.991835F, 2123.061862F, 2556.845807F, 2927.484493F, + 3299.107307F, 3686.249102F, 4034.473656F, 4393.818819F, 4781.683038F, 5155.954294F, 5542.569582F, 5927.377309F +}; + +const float tdm_Beta_Q1bit_re_use_132[2] = { 0.97F, 0.75F }; +const float tdm_Beta_Q1bit_re_use_164[2] = { 0.95F, 0.71F }; +const float tdm_Beta_Q1bit_re_use_244_320[2] = { 0.93F, 0.73F }; +const float tdm_Beta_Q1bit_re_use_480[2] = { 0.97F, 0.77F }; + +const float tdm_RE_USE_adaptive_beta_prd_diag_3[15 + 16 + 15] = +{ + 0.8859f, 0.2060f, + 0.0585f, 0.8245f, 0.2294f, + 0.0365f, 0.8175f, 0.1696f, + -0.0060f, 0.8483f, 0.2061f, + 0.0663f, 0.8983f, 0.1357f, + 0.0664f, 0.7951f, 0.1934f, + 0.0935f, 0.7948f, 0.1685f, + 0.1109f, 0.7960f, 0.1828f, + 0.1073f, 0.7835f, 0.1804f, + 0.1479f, 0.7362f, 0.1982f, + 0.1335f, 0.7621f, 0.1900f, + 0.1903f, 0.7369f, 0.1715f, + 0.1785f, 0.7214f, 0.1646f, + 0.1967f, 0.6891f, 0.1229f, + 0.2043f, 0.6317f, 0.0543f, + 0.1767f, 0.5396f, +}; +#endif + +const float tdm_LSF_MEAN_PRED_QNT[M] = +{ + 391.31345F, 608.50453F, 968.00585F, 1354.23965F, 1709.71084F, 2080.49872F, 2450.64009F, 2796.96588F, + 3196.19608F, 3554.17092F, 3915.02370F, 4283.81121F, 4707.59835F, 5109.79026F, 5526.44936F, 5903.42625F +}; + +const float tdm_LSF_MEAN_PRED_QNT_IN[M] = +{ + 288.540f, 535.469f, 899.738f, 1342.313f, 1730.736f, 2107.070f, 2491.455f, 2859.828f, 3239.279f, 3625.673f, 3992.540f, 4356.748f, 4752.356f, 5153.685f, 5567.107f, 5972.623f, +}; +const float tdm_LSF_MEAN_PRED_QNT_OUT[M] = +{ + 286.414f, 522.366f, 887.297f, 1347.961f, 1725.604f, 2102.356f, 2511.703f, 2853.093f, 3211.319f, 3612.072f, 3970.889f, 4327.774f, 4732.423f, 5154.984f, 5572.849f, 5964.332f, +}; + +const float tdm_PRED_QNT_fixed_beta_prd_diag_3[15 + 16 + 15] = +{ + 0.7040f, 0.1203f, + -0.1119f, 0.7340f, 0.1803f, + 0.0253f, 0.6702f, 0.1901f, + -0.1847f, 0.7892f, 0.3010f, + -0.0418f, 0.8716f, 0.1837f, + 0.0033f, 0.6915f, 0.2394f, + 0.0213f, 0.6728f, 0.2441f, + 0.0705f, 0.7549f, 0.1983f, + 0.0752f, 0.7152f, 0.2173f, + 0.0886f, 0.6163f, 0.3067f, + 0.0217f, 0.8121f, 0.2021f, + 0.1584f, 0.7311f, 0.1746f, + 0.1204f, 0.7296f, 0.1978f, + 0.1231f, 0.7502f, 0.1234f, + 0.1709f, 0.6372f, 0.1060f, + 0.1193f, 0.6574f, +}; +#endif + +const int16_t fast_FCB_bits_2sfr[] = {8, 14, 18, 20, 24, 128/*stop value*/}; + +const int16_t fast_FCB_rates_2sfr[] = {/*16*50,*/ (8+14)*50, 28*50, 32*50, 34*50, 36*50, 38*50, 40*50, 42*50, 44*50, 48*50}; + + +/*----------------------------------------------------------------------------------* + * MDCT Stereo ROM tables + *----------------------------------------------------------------------------------*/ + + /* PsychLPC */ + +const SpectrumWarping sw32000Hz[] = +{{ + { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, + 6, 8, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12, 14, 14, + 14, 16, 18, 18, 18, 20, 22, 22, 22, 24, 26, 26, 26, 28, 30, 32 + }, + { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, + 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10 + }, +}}; + +const SpectrumWarping sw25600Hz[] = +{{ + { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, + 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 10, 12, 12, 12, 12, + 12, 12, 14, 14, 14, 14, 14, 16, 16, 18, 18, 18, 18, 18, 20, 20 + }, + { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7 + }, +}}; + +const SpectrumWarping sw16000Hz[] = +{{ + { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 + }, + { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 + }, +}}; + +const MDCTStereoBands_config mdctStereoBands_32000_640[] = +{{ + /*TCX 20*/ + { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 8, 8, 8, 8, 8, 8, 8, 12, 12, 12, + 12, 20, 20, 20, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 42, + 64, 64, 96, 160}, + {44, 41,38, 29},/*number of bands for frame lengths 960, 640, 512, 320 respectively*/ + + /*TCX 10*/ + { + 4, 4, 4, 4, 4, 8, 8, 8, 8, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 20, 32, 32, + 32, 48, 80 + }, + {33, 29, 26, 18}/*number of bands for frame lengths 480, 320, 256, 160 respectively*/ +}}; + +const float nf_tw_smoothing_coeffs[N_LTP_GAIN_MEMS] = +{ + 0.4f,0.2f,0.2f,0.2f +}; + + +/*----------------------------------------------------------------------------------* + * Stereo DTX tables + *----------------------------------------------------------------------------------*/ + +const float dft_cng_coh_pred[STEREO_DFT_N_COH_PRED][STEREO_DFT_COH_PRED_COEFFS] = +{ + { 0.601337f, -0.101048f, 1.269064f, 0.085044f, 0.279032f, 0.669925f, 0.081573f, 0.188857f, -0.172930f, 0.321477f, 0.009332f, -0.084341f, 0.362245f, -0.426671f, 0.758383f}, + { 0.855349f, 0.420736f, 0.413285f, -0.009366f, -0.399699f, 1.385802f, 0.012428f, -0.015338f, 0.156471f, 0.517438f, 0.160248f, -0.303634f, 0.477768f, -0.560747f, 1.382583f}, + { 0.202543f, 0.048819f, 0.263407f, 0.023538f, 0.092021f, 0.395655f, 0.013064f, -0.011127f, 0.035466f, 0.976055f, 0.009968f, 0.162957f, 0.383185f, -0.365493f, 2.534677f}, + { 1.393664f, -0.131401f, 0.989429f, 0.738330f, 0.683865f, 0.001677f, -0.225448f, -0.012158f, 1.084608f, -0.115464f, 0.022371f, -0.045560f, -0.336230f, 0.422742f, 0.499163f} +}; + +const int16_t dft_cng_coh_u2i[9] = { 4, 5, 3, 6, 2, 7, 1, 8, 0 }; /* Coherence unary codeword -> residual codeword conversion table */ + +const int16_t dft_cng_coh_i2u[9] = { 8, 6, 4, 2, 0, 1, 3, 5, 7 }; /* Coherence residual codeword -> unary codeword conversion table */ + +const int16_t dft_cng_coh_alpha_start[STEREO_DFT_N_COH_ALPHA_STEPS - 1] = { 15, 16, 17, 18 }; + +const float dft_cng_alpha_bits[STEREO_DFT_N_COH_ALPHA_STEPS][STEREO_DFT_N_COH_ALPHA_LEVELS] = +{ + { 0.1f, 0.6f }, + { 0.1f, 0.6f }, + { 0.1f, 0.7f }, + { 0.1f, 0.9f }, + { 0.2f, 0.9f } +}; + + +/*----------------------------------------------------------------------------------* + * DirAC ROM tables + *----------------------------------------------------------------------------------*/ + +const float diffuseness_reconstructions[DIRAC_DIFFUSE_LEVELS] = +{ + 0.0f, + 0.03955078125f, + 0.089599609375f, + 0.158935546875f, + 0.308349609375f, + 0.473876953125f, + 0.63232421875f, + 0.85009765625f +}; + +const float diffuseness_thresholds[DIRAC_DIFFUSE_LEVELS + 1] = +{ + 0.0f, + 0.01904296875f, + 0.06298828125f, + 0.119384765625f, + 0.22119140625f, + 0.399169921875f, + 0.547607421875f, + 0.734619140625f, + 2.0f /* out-of-range large value to make searching easier */ +}; + +const int16_t DirAC_band_grouping_12[12 + 1] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 11, 17, 25, 40, 60 +}; + + +const int16_t DirAC_band_grouping_6[6 + 1] = +{ + 0, 1, 4, 8, 20, 30, 60 +}; + +const int16_t DirAC_band_grouping_5[5 + 1] = +{ + 0, 1, 3, 7, 15, 60 +}; + +const int16_t DirAC_block_grouping[MAX_PARAM_SPATIAL_SUBFRAMES + 1] = +{ + 0, 4, 8, 12, 16 +}; + +const int16_t DirAC_block_grouping_5ms_MDFT[MAX_PARAM_SPATIAL_SUBFRAMES + 1] = +{ + 0, 1, 2, 3, 4 +}; + + + +/*----------------------------------------------------------------------* +* SPAR ROM tables +*-----------------------------------------------------------------------*/ + +const ivas_spar_br_table_t ivas_spar_br_table_consts[IVAS_SPAR_BR_TABLE_LEN] = +{ +/* When AGC is ON additional (AGC_BITS_PER_CH+1) bits may be taken from each EVS channel + so minimum EVS bitrate per channel can be min EVS bitrates as per the table - AGC_BITS_PER_CH */ + { 24400, 0, 1, FB, 24000, 1, WYXZ, 1, 0,{ { 16400, 15200, 24350 } }, + { { 15, 1, 5, 1 },{ 15, 1, 3, 1 },{ 7, 1, 3, 1 } }, 0, 0, 0 }, + + { 32000, 0, 1, FB, 24000, 1, WYXZ, 1, 0,{{ 24000, 20450, 31950 }},{ { 21, 1, 5, 1 },{ 15, 1, 5, 1 },{ 15, 1, 3, 1 } }, 0, 0, 0 }, + + { 48000, 0, 1, FB, 24000, 2, WYXZ, 0, 0,{ { 24000, 21000, 31950 },{ 16000, 15000, 20400 } }, + { { 15, 7, 5, 1 },{ 15, 7, 3, 1 },{ 7, 7, 3, 1 } }, 1, 0, 0 }, + + { 64000, 0, 1, FB, 24000, 2, WYXZ, 0, 0,{ { 38000, 34050, 56000 },{ 16000, 15600, 20400 } },{ { 21, 7, 5, 1 },{ 15, 7, 5, 1 },{ 15, 7, 3, 1 } }, 1, 1, 0 }, + + { 80000, 0, 1, FB, 24000, 2, WYXZ, 0, 0,{ { 46000, 43000, 56000 },{ 24000, 23000, 31950 } }, + { { 21, 7, 5, 1 },{ 15, 7, 5, 1 },{ 15, 7, 3, 1 } }, 1, 0, 0 }, + + { 96000, 0, 1, FB, 24000, 3, WYXZ, 0, 0,{ { 47000, 42600, 56000 },{ 23000, 22600, 31950 },{ 16000, 15600, 20400 } }, + { { 21, 9, 9, 1 },{ 21, 7, 5, 1 },{ 21, 7, 5, 1 } }, 1, 0, 0 }, + + { 128000, 0, 1, FB, 24000, 3, WYXZ, 0, 0,{ { 55000, 50000, 56000 },{ 36000, 36000, 56000 },{ 27000, 27000, 31950 } }, + { { 21, 11, 9, 1 },{ 21, 9, 7, 1 },{ 21, 7, 7, 1 } }, 1, 0, 0 }, + + { 160000, 0, 1, FB, 24000, 3, WYXZ, 0, 0,{ { 74000, 70900, 112000 },{ 41000, 40050, 56000 },{ 35000, 34050, 56000 } }, + { { 21, 11, 11, 1 },{ 21, 9, 9, 1 },{ 21, 7, 7, 1 } }, 1, 0, 0 }, + + { 192000, 0, 1, FB, 24000, 3, WYXZ, 0, 0,{ { 90000, 87900, 112000 },{ 50000, 48050, 56000 },{ 42000, 41050, 56000 } }, + { { 21, 11, 11, 1 },{ 21, 9, 9, 1 },{ 21, 7, 7, 1 } }, 1, 0, 0 }, + + { 256000, 0, 1, FB, 24000, 4, WYXZ, 0, 0,{ { 90000, 85000, 112000 },{ 70000, 69000, 112000 },{ 50000, 48950, 56000 },{ 36400, 35600, 56000 } }, + { { 31, 1, 1, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + { 256000, 0, 2, FB, 24000, 4, WYXZ, 0, 0,{ { 84650, 83000, 112000 },{ 65850, 64550, 56000 },{ 47000, 46100, 48000 },{ 28200, 27650, 40000 } }, + { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + { 256000, 0, 3, FB, 24000, 4, WYXZ, 0, 0,{ { 76300, 73550, 112000 },{ 59350, 57200, 56000 },{ 42400, 40850, 48000 },{ 25450, 24500, 40000 } }, + { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 31, 1, 1, 1 } }, 1, 2, 0 }, + + { 384000, 0, 1, FB, 24000, 4, WYXZ, 0, 0,{ { 128000, 128000, 128000 },{ 100000, 100000, 128000 },{ 79850, 79850, 104000 },{ 66600, 66600, 104000 } }, // not yet optimized + { { 31, 1, 1, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + { 384000, 0, 2, FB, 24000, 4, WYXZ, 0, 0,{ { 128000, 128000, 128000 },{ 105350, 103300, 112000 },{ 75200, 73750, 96000 },{ 45100, 44250, 48000 } }, // just added as a place holder, not necessarily operational + { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + { 384000, 0, 3, FB, 24000, 4, WYXZ, 0, 0,{ { 124300, 121550, 128000 },{ 96700, 94550, 112000 },{ 69050, 67500, 96000 },{ 41450, 40500, 48000 } }, // just added as a place holder, not necessarily operational + { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + { 512000, 0, 1, FB, 24000, 4, WYXZ, 0, 0,{ { 128000, 128000, 128000 },{ 128000, 128000, 128000 },{ 128000, 128000, 128000 }, {118450, 118450, 128000 } }, // not yet optimized + { { 31, 1, 1, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + { 512000, 0, 2, FB, 24000, 4, WYXZ, 0, 0,{ { 128000, 128000, 128000 },{ 128000, 128000, 128000 },{ 128000, 128000, 128000 },{ 97700, 93300, 128000 } }, // not yet optimized + { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + { 512000, 0, 3, FB, 24000, 4, WYXZ, 0, 0,{ { 128000, 128000, 128000 },{ 128000, 128000, 128000 },{ 127200, 122550, 128000 },{ 76300, 73550, 128000 } }, // not yet optimized + { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, + + +}; +const ivas_arith_consts_t ivas_arith_consts[IVAS_SPAR_BR_TABLE_LEN][MAX_QUANT_STRATS] = +{ + /* tbl_idx 0 -- 24.4kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,9,23,56,133,318,757,1800,10192,1800,757,318,133,56,23,9, }, + { 0,156,240,371,573,883,1363,2102,5008,2102,1363,883,573,371,240,156, }, + { 0,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241,156,101, }, + { 0,101,156,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,9,23,56,133,318,757,1800,10192,1800,757,318,133,56,23,9, }, + { 0,156,240,371,573,883,1363,2102,5008,2102,1363,883,573,371,240,156, }, + { 0,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241,156,101, }, + { 0,101,156,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11917,2978,1489, }, + { 0,8840,4419,3125, }, + { 0,4567,7250,4567, }, + { 0,5203,5978,5203, }, + }, + /* decd_R real differential */ + { + { 0,1356,13672,1356, }, + { 0,3166,10052,3166, }, + { 0,10984,3459,1941, }, + { 0,1941,3459,10984, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2 },{ -1,0,1 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,327,778,1851,10472,1851,778,327, }, + { 0,1057,1630,2514,5982,2514,1630,1057, }, + { 0,1668,2572,6122,2572,1668,1081,701, }, + { 0,701,1081,1668,2572,6122,2572,1668, }, + }, + /* pred_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* pred_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11917,2978,1489, }, + { 0,8840,4419,3125, }, + { 0,4567,7250,4567, }, + { 0,5203,5978,5203, }, + }, + /* decd_R real differential */ + { + { 0,1356,13672,1356, }, + { 0,3166,10052,3166, }, + { 0,10984,3459,1941, }, + { 0,1941,3459,10984, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2 },{ -1,0,1 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 1 -- 32kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,4,9,23,56,133,318,756,1799,10184,1799,756,318,133,56,23,9,4,1,1, }, + { 0,41,64,98,152,234,362,558,861,1329,2049,4888,2049,1329,861,558,362,234,152,98,64,41, }, + { 0,64,98,152,235,362,559,862,1330,2051,4891,2051,1330,862,559,362,235,152,98,64,41,26, }, + { 0,26,41,64,98,152,235,362,559,862,1330,2051,4891,2051,1330,862,559,362,235,152,98,64, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,9,23,56,133,318,757,1800,10192,1800,757,318,133,56,23,9, }, + { 0,156,240,371,573,883,1363,2102,5008,2102,1363,883,573,371,240,156, }, + { 0,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241,156,101, }, + { 0,101,156,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,9,23,56,133,318,757,1800,10192,1800,757,318,133,56,23,9, }, + { 0,156,240,371,573,883,1363,2102,5008,2102,1363,883,573,371,240,156, }, + { 0,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241,156,101, }, + { 0,101,156,241,372,575,886,1367,2109,5027,2109,1367,886,575,372,241, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11917,2978,1489, }, + { 0,8840,4419,3125, }, + { 0,4567,7250,4567, }, + { 0,5203,5978,5203, }, + }, + /* decd_R real differential */ + { + { 0,1356,13672,1356, }, + { 0,3166,10052,3166, }, + { 0,10984,3459,1941, }, + { 0,1941,3459,10984, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2 },{ -1,0,1 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 2 -- 48kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,32,64,128,257,514,1028,2056,8226,2056,1028,514,257,128,64,32, }, + { 0,565,672,799,950,1130,1344,1598,2268,1598,1344,1130,950,799,672,565, }, + { 0,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353,250,176, }, + { 0,176,250,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,32,64,128,257,514,1028,2056,8226,2056,1028,514,257,128,64,32, }, + { 0,565,672,799,950,1130,1344,1598,2268,1598,1344,1130,950,799,672,565, }, + { 0,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353,250,176, }, + { 0,176,250,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11917,2978,1489, }, + { 0,8840,4419,3125, }, + { 0,4567,7250,4567, }, + { 0,5203,5978,5203, }, + }, + /* decd_R real differential */ + { + { 0,1356,13672,1356, }, + { 0,3166,10052,3166, }, + { 0,10984,3459,1941, }, + { 0,1941,3459,10984, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2 },{ -1,0,1 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,546,1092,2184,8740,2184,1092,546, }, + { 0,1779,2116,2516,3562,2516,2116,1779, }, + { 0,1848,2614,5229,2614,1848,1307,924, }, + { 0,924,1307,1848,2614,5229,2614,1848, }, + }, + /* pred_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* pred_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11917,2978,1489, }, + { 0,8840,4419,3125, }, + { 0,4567,7250,4567, }, + { 0,5203,5978,5203, }, + }, + /* decd_R real differential */ + { + { 0,1356,13672,1356, }, + { 0,3166,10052,3166, }, + { 0,10984,3459,1941, }, + { 0,1941,3459,10984, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2 },{ -1,0,1 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 3 -- 64kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,32,64,128,257,514,1028,2056,8226,2056,1028,514,257,128,64,32, }, + { 0,565,672,799,950,1130,1344,1598,2268,1598,1344,1130,950,799,672,565, }, + { 0,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353,250,176, }, + { 0,176,250,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,32,64,128,257,514,1028,2056,8226,2056,1028,514,257,128,64,32, }, + { 0,565,672,799,950,1130,1344,1598,2268,1598,1344,1130,950,799,672,565, }, + { 0,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353,250,176, }, + { 0,176,250,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11917,2978,1489, }, + { 0,8840,4419,3125, }, + { 0,4567,7250,4567, }, + { 0,5203,5978,5203, }, + }, + /* decd_R real differential */ + { + { 0,1356,13672,1356, }, + { 0,3166,10052,3166, }, + { 0,10984,3459,1941, }, + { 0,1941,3459,10984, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2 },{ -1,0,1 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 4 -- 80kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,32,64,128,257,514,1028,2056,8226,2056,1028,514,257,128,64,32, }, + { 0,565,672,799,950,1130,1344,1598,2268,1598,1344,1130,950,799,672,565, }, + { 0,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353,250,176, }, + { 0,176,250,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,32,64,128,257,514,1028,2056,8226,2056,1028,514,257,128,64,32, }, + { 0,565,672,799,950,1130,1344,1598,2268,1598,1344,1130,950,799,672,565, }, + { 0,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353,250,176, }, + { 0,176,250,353,500,707,1000,1414,2000,4010,2000,1414,1000,707,500,353, }, + }, + /* pred_R real differential */ + { + { 0,1,3,12,39,125,397,1260,12710,1260,397,125,39,12,3,1, }, + { 0,66,119,212,378,674,1201,2140,6804,2140,1201,674,378,212,119,66, }, + { 0,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119,67,37, }, + { 0,37,67,119,212,379,675,1203,2144,6816,2144,1203,675,379,212,119, }, + }, + /* pred_R real : values for general and differential */ + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + { -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11917,2978,1489, }, + { 0,8840,4419,3125, }, + { 0,4567,7250,4567, }, + { 0,5203,5978,5203, }, + }, + /* decd_R real differential */ + { + { 0,1356,13672,1356, }, + { 0,3166,10052,3166, }, + { 0,10984,3459,1941, }, + { 0,1941,3459,10984, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2 },{ -1,0,1 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 5 -- 96kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,573,722,909,1146,1444,1819,2292,2888,4591, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* drct_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* drct_R real : values for general and differential */ + { -4,-3,-2,-1,0,1,2,3,4 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10941,2734,1367,683,341,170,85,42,21, }, + { 0,6305,3150,2227,1575,1113,787,556,393,278, }, + { 0,1101,1388,1749,2203,3502,2203,1749,1388,1101, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* decd_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,11157,2788,1394,697,348, }, + { 0,7186,3592,2540,1796,1270, }, + { 0,2512,3166,5028,3166,2512, }, + { 0,3048,3267,3754,3267,3048, }, + }, + /* decd_R real differential */ + { + { 0,406,1289,12994,1289,406, }, + { 0,1460,2601,8262,2601,1460, }, + { 0,2707,8599,2707,1519,852, }, + { 0,852,1519,2707,8599,2707, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4 },{ -2,-1,0,1,2 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 6 -- 128kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10941,2734,1367,683,341,170,85,42,21, }, + { 0,6305,3150,2227,1575,1113,787,556,393,278, }, + { 0,1101,1388,1749,2203,3502,2203,1749,1388,1101, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* decd_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,573,722,909,1146,1444,1819,2292,2888,4591, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* drct_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* drct_R real : values for general and differential */ + { -4,-3,-2,-1,0,1,2,3,4 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10983,2744,1372,686,343,171,85, }, + { 0,6573,3285,2322,1642,1161,821,580, }, + { 0,1603,2020,2546,4046,2546,2020,1603, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* decd_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6 },{ -3,-2,-1,0,1,2,3 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10983,2744,1372,686,343,171,85, }, + { 0,6573,3285,2322,1642,1161,821,580, }, + { 0,1603,2020,2546,4046,2546,2020,1603, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* decd_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6 },{ -3,-2,-1,0,1,2,3 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 7 -- 160kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,573,722,909,1146,1444,1819,2292,2888,4591, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* drct_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* drct_R real : values for general and differential */ + { -4,-3,-2,-1,0,1,2,3,4 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10941,2734,1367,683,341,170,85,42,21, }, + { 0,6305,3150,2227,1575,1113,787,556,393,278, }, + { 0,1101,1388,1749,2203,3502,2203,1749,1388,1101, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* decd_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10983,2744,1372,686,343,171,85, }, + { 0,6573,3285,2322,1642,1161,821,580, }, + { 0,1603,2020,2546,4046,2546,2020,1603, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* decd_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6 },{ -3,-2,-1,0,1,2,3 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 8 -- 192kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,573,722,909,1146,1444,1819,2292,2888,4591, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* drct_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* drct_R real : values for general and differential */ + { -4,-3,-2,-1,0,1,2,3,4 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10941,2734,1367,683,341,170,85,42,21, }, + { 0,6305,3150,2227,1575,1113,787,556,393,278, }, + { 0,1101,1388,1749,2203,3502,2203,1749,1388,1101, }, + { 0,1587,1701,1824,1955,2250,1955,1824,1701,1587, }, + }, + /* decd_R real differential */ + { + { 0,39,125,397,1263,12736,1263,397,125,39, }, + { 0,397,708,1262,2250,7150,2250,1262,708,397, }, + { 0,716,1276,2274,7225,2274,1276,716,402,225, }, + { 0,225,402,716,1276,2274,7225,2274,1276,716, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8 },{ -4,-3,-2,-1,0,1,2,3,4 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,4,8,16,32,64,128,256,512,1024,2049,8198,2049,1024,512,256,128,64,32,16,8,4, }, + { 0,292,348,414,492,585,696,828,984,1171,1392,1980,1392,1171,984,828,696,585,492,414,348,292, }, + { 0,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119,84,59, }, + { 0,59,84,119,168,238,336,476,673,952,1346,1904,3817,1904,1346,952,673,476,336,238,168,119, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,3,12,39,125,397,1260,12704,1260,397,125,39,12,3,1,1,1,1, }, + { 0,11,20,37,66,118,210,375,668,1191,2122,6748,2122,1191,668,375,210,118,66,37,20,11, }, + { 0,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20,11,6, }, + { 0,6,11,20,37,66,118,210,375,668,1191,2123,6751,2123,1191,668,375,210,118,66,37,20, }, + }, + /* pred_R real : values for general and differential */ + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + { -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,988,1244,1568,1976,2489,3136,4983, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* drct_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* drct_R real : values for general and differential */ + { -3,-2,-1,0,1,2,3 },{ -3,-2,-1,0,1,2,3 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10983,2744,1372,686,343,171,85, }, + { 0,6573,3285,2322,1642,1161,821,580, }, + { 0,1603,2020,2546,4046,2546,2020,1603, }, + { 0,2111,2262,2425,2788,2425,2262,2111, }, + }, + /* decd_R real differential */ + { + { 0,125,399,1269,12798,1269,399,125, }, + { 0,744,1327,2365,7512,2365,1327,744, }, + { 0,1354,2413,7664,2413,1354,760,426, }, + { 0,426,760,1354,2413,7664,2413,1354, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6 },{ -3,-2,-1,0,1,2,3 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 9 -- 256kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 10 -- 256kbps HOA2 */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 11 -- 256kbps HOA3 */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 12 -- 384kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 13 -- 384kbps HOA2 */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 14 -- 384kbps HOA3 */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 15 -- 512kbps FOA */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 16 -- 512kbps HOA2 */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + /* tbl_idx 17 -- 512kbps HOA3 */ + { + /* Quant strat = 0 */ + { + { + /* pred_R real */ + { + { 0,1,1,1,1,2,4,8,16,32,64,128,256,512,1024,2048,8188,2048,1024,512,256,128,64,32,16,8,4,2,1,1,1,1, }, + { 0,110,131,156,186,221,263,313,373,443,527,627,746,887,1055,1255,1798,1255,1055,887,746,627,527,443,373,313,263,221,186,156,131,110, }, + { 0,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20,14,10, }, + { 0,10,14,20,29,41,58,82,116,164,233,329,466,659,932,1318,1864,3738,1864,1318,932,659,466,329,233,164,116,82,58,41,29,20, }, + }, + /* pred_R real differential */ + { + { 0,1,1,1,1,1,1,1,1,1,3,12,39,125,397,1260,12694,1260,397,125,39,12,3,1,1,1,1,1,1,1,1,1, }, + { 0,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1, }, + { 0,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1,1,1, }, + { 0,1,1,1,2,3,6,11,20,37,66,117,210,374,667,1189,2118,6740,2118,1189,667,374,210,117,66,37,20,11,6,3,2,1, }, + }, + /* pred_R real : values for general and differential */ + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + { -15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,343,433,546,687,866,1092,1375,1733,2184,2751,4374, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* drct_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* drct_R real : values for general and differential */ + { -5,-4,-3,-2,-1,0,1,2,3,4,5 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,10932,2731,1365,682,341,170,85,42,21,10,5, }, + { 0,6181,3086,2182,1543,1091,771,545,385,272,192,136, }, + { 0,790,995,1254,1580,1991,3164,1991,1580,1254,995,790, }, + { 0,1254,1344,1441,1544,1655,1908,1655,1544,1441,1344,1254, }, + }, + /* decd_R real differential */ + { + { 0,12,39,125,397,1261,12716,1261,397,125,39,12, }, + { 0,217,387,689,1229,2190,6960,2190,1229,689,387,217, }, + { 0,389,694,1236,2203,7000,2203,1236,694,389,218,122, }, + { 0,122,218,389,694,1236,2203,7000,2203,1236,694,389, }, + }, + /* decd_R real : values for general and differential */ + { 0,1,2,3,4,5,6,7,8,9,10 },{ -5,-4,-3,-2,-1,0,1,2,3,4,5 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 1 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + /* Quant strat = 2 */ + { + { + /* pred_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* pred_R real : values for general and differential */ + { 0 },{ 0 }, + /* pred_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* drct_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* drct_R real : values for general and differential */ + { 0 },{ 0 }, + /* drct_R real : num dyn models for general and differential */ + 4, 4 + }, + { + /* decd_R real */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real differential */ + { + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + { 0,16384, }, + }, + /* decd_R real : values for general and differential */ + { 0 },{ 0 }, + /* decd_R real : num dyn models for general and differential */ + 4, 4 + }, + }, + }, + +}; + +const ivas_huff_consts_t ivas_huff_const[IVAS_SPAR_BR_TABLE_LEN][MAX_QUANT_STRATS] = +{ + /* tbl_idx 0 -- 24.4kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + { + /* decd_R codebook */ + { { 0,2,2 },{ 1,1,0 },{ 2,2,3 }, }, + /* decd_R differential codebook */ + { { -1,2,2 },{ 0,1,0 },{ 1,2,3 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* pred_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + { + /* decd_R codebook */ + { { 0,2,2 },{ 1,1,0 },{ 2,2,3 }, }, + /* decd_R differential codebook */ + { { -1,2,2 },{ 0,1,0 },{ 1,2,3 }, }, + }, + }, + }, + /* tbl_idx 1 -- 32kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + { + /* decd_R codebook */ + { { 0,2,2 },{ 1,1,0 },{ 2,2,3 }, }, + /* decd_R differential codebook */ + { { -1,2,2 },{ 0,1,0 },{ 1,2,3 }, }, + }, + }, + }, + /* tbl_idx 2 -- 48kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,2,2 },{ 1,1,0 },{ 2,2,3 }, }, + /* decd_R differential codebook */ + { { -1,2,2 },{ 0,1,0 },{ 1,2,3 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* pred_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,2,2 },{ 1,1,0 },{ 2,2,3 }, }, + /* decd_R differential codebook */ + { { -1,2,2 },{ 0,1,0 },{ 1,2,3 }, }, + }, + }, + }, + /* tbl_idx 3 -- 64kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,2,2 },{ 1,1,0 },{ 2,2,3 }, }, + /* decd_R differential codebook */ + { { -1,2,2 },{ 0,1,0 },{ 1,2,3 }, }, + }, + }, + }, + /* tbl_idx 4 -- 80kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + /* pred_R differential codebook */ + { { -7,4,2 },{ -6,4,3 },{ -5,4,4 },{ -4,4,5 },{ -3,4,6 },{ -2,4,7 },{ -1,4,8 },{ 0,3,0 },{ 1,4,9 },{ 2,4,10 },{ 3,4,11 },{ 4,4,12 },{ 5,4,13 },{ 6,4,14 },{ 7,4,15 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,2,2 },{ 1,1,0 },{ 2,2,3 }, }, + /* decd_R differential codebook */ + { { -1,2,2 },{ 0,1,0 },{ 1,2,3 }, }, + }, + }, + }, + /* tbl_idx 5 -- 96kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + /* drct_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,14 },{ 1,3,0 },{ 2,3,1 },{ 3,3,2 },{ 4,3,3 },{ 5,3,4 },{ 6,3,5 },{ 7,3,6 },{ 8,4,15 }, }, + /* decd_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,6 },{ 1,2,0 },{ 2,2,1 },{ 3,2,2 },{ 4,3,7 }, }, + /* decd_R differential codebook */ + { { -2,3,6 },{ -1,2,0 },{ 0,2,1 },{ 1,2,2 },{ 2,3,7 }, }, + }, + }, + }, + /* tbl_idx 6 -- 128kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,14 },{ 1,3,0 },{ 2,3,1 },{ 3,3,2 },{ 4,3,3 },{ 5,3,4 },{ 6,3,5 },{ 7,3,6 },{ 8,4,15 }, }, + /* decd_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + /* drct_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,2,0 },{ 4,3,5 },{ 5,3,6 },{ 6,3,7 }, }, + /* decd_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,2,0 },{ 4,3,5 },{ 5,3,6 },{ 6,3,7 }, }, + /* decd_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + }, + }, + /* tbl_idx 7 -- 160kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + /* drct_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,14 },{ 1,3,0 },{ 2,3,1 },{ 3,3,2 },{ 4,3,3 },{ 5,3,4 },{ 6,3,5 },{ 7,3,6 },{ 8,4,15 }, }, + /* decd_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,2,0 },{ 4,3,5 },{ 5,3,6 },{ 6,3,7 }, }, + /* decd_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + }, + }, + /* tbl_idx 8 -- 192kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + /* drct_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,14 },{ 1,3,0 },{ 2,3,1 },{ 3,3,2 },{ 4,3,3 },{ 5,3,4 },{ 6,3,5 },{ 7,3,6 },{ 8,4,15 }, }, + /* decd_R differential codebook */ + { { -4,4,14 },{ -3,3,0 },{ -2,3,1 },{ -1,3,2 },{ 0,3,3 },{ 1,3,4 },{ 2,3,5 },{ 3,3,6 },{ 4,4,15 }, }, + }, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + /* pred_R differential codebook */ + { { -10,5,22 },{ -9,5,23 },{ -8,5,24 },{ -7,5,25 },{ -6,5,26 },{ -5,4,0 },{ -4,4,1 },{ -3,4,2 },{ -2,4,3 },{ -1,4,4 },{ 0,4,5 },{ 1,4,6 },{ 2,4,7 },{ 3,4,8 },{ 4,4,9 },{ 5,4,10 },{ 6,5,27 },{ 7,5,28 },{ 8,5,29 },{ 9,5,30 },{ 10,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + /* drct_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + { + /* decd_R codebook */ + { { 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,2,0 },{ 4,3,5 },{ 5,3,6 },{ 6,3,7 }, }, + /* decd_R differential codebook */ + { { -3,3,2 },{ -2,3,3 },{ -1,3,4 },{ 0,2,0 },{ 1,3,5 },{ 2,3,6 },{ 3,3,7 }, }, + }, + }, + }, + /* tbl_idx 9 -- 256kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ +{ + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 10 -- 256kbps HOA2 */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 11 -- 256kbps HOA3 */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 12 -- 384kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 13 -- 384kbps HOA2 */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 14 -- 384kbps HOA3 */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 15 -- 512kbps FOA */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 1 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 16 -- 512kbps HOA2 */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, + /* tbl_idx 17 -- 512kbps HOA3 */ + { + /* Quant strat 0 */ + { + { + /* pred_R codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + /* pred_R differential codebook */ + { { -15,5,2 },{ -14,5,3 },{ -13,5,4 },{ -12,5,5 },{ -11,5,6 },{ -10,5,7 },{ -9,5,8 },{ -8,5,9 },{ -7,5,10 },{ -6,5,11 },{ -5,5,12 },{ -4,5,13 },{ -3,5,14 },{ -2,5,15 },{ -1,5,16 },{ 0,4,0 },{ 1,5,17 },{ 2,5,18 },{ 3,5,19 },{ 4,5,20 },{ 5,5,21 },{ 6,5,22 },{ 7,5,23 },{ 8,5,24 },{ 9,5,25 },{ 10,5,26 },{ 11,5,27 },{ 12,5,28 },{ 13,5,29 },{ 14,5,30 },{ 15,5,31 }, }, + }, + { + /* drct_R codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + /* drct_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + { + /* decd_R codebook */ + { { 0,4,10 },{ 1,4,11 },{ 2,4,12 },{ 3,3,0 },{ 4,3,1 },{ 5,3,2 },{ 6,3,3 },{ 7,3,4 },{ 8,4,13 },{ 9,4,14 },{ 10,4,15 }, }, + /* decd_R differential codebook */ + { { -5,4,10 },{ -4,4,11 },{ -3,4,12 },{ -2,3,0 },{ -1,3,1 },{ 0,3,2 },{ 1,3,3 },{ 2,3,4 },{ 3,4,13 },{ 4,4,14 },{ 5,4,15 }, }, + }, + }, + /* Quant strat 1 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + /* Quant strat 2 */ + { + /* pred_R */ + {{{ 0 }}, {{ 0 }}}, + /* drct_R */ + {{{ 0 }}, {{ 0 }}}, + /* decd_R */ + {{{ 0 }}, {{ 0 }}}, + }, + }, +}; + +/* DTX quantization and bitstream constants */ + +const float dtx_pd_real_min_max[2] = { 0, 1.6f }; +const int16_t dtx_pd_real_q_levels[3][3] = { { 7,7,7 },{ 7,7,0 },{ 3,0,0 } }; +const int16_t dtx_pr_real_q_levels[3][3] = { { 9,9,9 },{ 9,7,9 },{ 9,5,7 } }; +const int16_t pr_pr_idx_pairs[3][3][2] = { { { 0, 0 },{ 0, 0 },{ 0, 0 } },{ { 0, 0 },{ 0, 0 },{ 0, 0 } },{ { 0, 0 },{ 1, 3 },{ 0, 0 } } }; +const int16_t pr_pd_idx_pairs[3][3][2] = { { { 1, 1 },{ 2, 2 },{ 3, 3 } },{ { 1, 1 },{ 3, 2 },{ 2, 0 } },{ { 2, 1 },{ 0, 0 },{ 0, 0 } } }; + +const int16_t remix_order_set[1][IVAS_SPAR_MAX_CH] = { /* WYZX --> WYXZ... */ + { 0, 1, 3, 2, 4, 5, 6, 7} +}; +const int16_t keep_planar[IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS] = { 1, 1, 1, 1 }; +const int16_t HOA_keep_ind[IVAS_SPAR_MAX_CH] = {0, 1, 2, 3, 4, 8, 9, 15}; + + +/*----------------------------------------------------------------------* +* PCA ROM tables +*-----------------------------------------------------------------------*/ + +const int32_t ivas_pca_offset_index1[IVAS_PCA_N1 + 1] = +{ + 0, 1, 9, 61, 163, 359, 685, 1125, 1747, + 2519, 3521, 4713, 6183, 7883, 9809, 12093, 14633, 17575, + 20807, 24343, 28181, 32487, 37121, 42097, 47405, 53057, 59061, + 65421, 72137, 79205, 86625, 94415, 102345, 110629, 119263, 128017, + 137097, 146515, 156043, 165637, 175551, 185515, 195535, 205837, 216183, + 226545, 236911, 247273, 257619, 267921, 277941, 287905, 297819, 307413, + 316941, 326359, 335439, 344193, 352827, 361111, 369041, 376831, 384251, + 391319, 398035, 404395, 410399, 416051, 421359, 426335, 430969, 435275, + 439113, 442649, 445881, 448823, 451363, 453647, 455573, 457273, 458743, + 459935, 460937, 461709, 462331, 462771, 463097, 463293, 463395, 463447, + 463455, 463456 +}; + +const int16_t ivas_pca_offset_index2[2692] = +{ + 0, 1, 0, 1, 7, 8, 0, 1, 7, 19, + 33, 45, 51, 52, 0, 1, 9, 23, 41, 61, + 79, 93, 101, 102, 0, 1, 7, 21, 39, 61, + 85, 111, 135, 157, 175, 189, 195, 196, 0, 1, + 7, 19, 37, 59, 85, 115, 147, 179, 211, 241, + 267, 289, 307, 319, 325, 326, 0, 1, 7, 21, + 41, 65, 95, 127, 163, 201, 239, 277, 313, 345, + 375, 399, 419, 433, 439, 440, 0, 1, 7, 19, + 37, 61, 91, 125, 163, 203, 245, 289, 333, 377, + 419, 459, 497, 531, 561, 585, 603, 615, 621, 622, + 0, 1, 7, 21, 41, 67, 97, 133, 173, 217, + 263, 311, 361, 411, 461, 509, 555, 599, 639, 675, + 705, 731, 751, 765, 771, 772, 0, 1, 7, 19, + 37, 61, 91, 127, 167, 211, 259, 309, 363, 417, + 473, 529, 585, 639, 693, 743, 791, 835, 875, 911, + 941, 965, 983, 995, 1001, 1002, 0, 1, 7, 21, + 41, 67, 99, 135, 177, 223, 273, 327, 383, 443, + 503, 565, 627, 689, 749, 809, 865, 919, 969, 1015, + 1057, 1093, 1125, 1151, 1171, 1185, 1191, 1192, 0, 1, + 7, 19, 37, 61, 91, 127, 169, 215, 265, 319, + 377, 437, 501, 567, 633, 701, 769, 837, 903, 969, + 1033, 1093, 1151, 1205, 1255, 1301, 1343, 1379, 1409, 1433, + 1451, 1463, 1469, 1470, 0, 1, 7, 21, 41, 67, + 99, 137, 179, 227, 279, 335, 395, 459, 525, 595, + 667, 739, 813, 887, 961, 1033, 1105, 1175, 1241, 1305, + 1365, 1421, 1473, 1521, 1563, 1601, 1633, 1659, 1679, 1693, + 1699, 1700, 0, 1, 9, 23, 43, 69, 101, 139, + 183, 231, 285, 343, 405, 471, 541, 613, 689, 765, + 843, 923, 1003, 1083, 1161, 1237, 1313, 1385, 1455, 1521, + 1583, 1641, 1695, 1743, 1787, 1825, 1857, 1883, 1903, 1917, + 1925, 1926, 0, 1, 7, 21, 41, 67, 99, 137, + 179, 227, 281, 339, 401, 467, 537, 611, 687, 767, + 849, 931, 1015, 1099, 1185, 1269, 1353, 1435, 1517, 1597, + 1673, 1747, 1817, 1883, 1945, 2003, 2057, 2105, 2147, 2185, + 2217, 2243, 2263, 2277, 2283, 2284, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 285, 345, 409, 477, + 549, 625, 705, 787, 871, 957, 1045, 1135, 1225, 1315, + 1405, 1495, 1583, 1669, 1753, 1835, 1915, 1991, 2063, 2131, + 2195, 2255, 2309, 2359, 2403, 2441, 2473, 2499, 2519, 2533, + 2539, 2540, 0, 1, 7, 19, 39, 65, 97, 135, + 177, 225, 279, 337, 401, 469, 541, 617, 697, 781, + 867, 955, 1045, 1137, 1231, 1327, 1423, 1519, 1615, 1711, + 1805, 1897, 1987, 2075, 2161, 2245, 2325, 2401, 2473, 2541, + 2605, 2663, 2717, 2765, 2807, 2845, 2877, 2903, 2923, 2935, + 2941, 2942, 0, 1, 7, 21, 41, 67, 99, 137, + 181, 229, 283, 343, 407, 477, 551, 629, 711, 797, + 885, 977, 1071, 1167, 1265, 1365, 1465, 1565, 1667, 1767, + 1867, 1967, 2065, 2161, 2255, 2347, 2435, 2521, 2603, 2681, + 2755, 2825, 2889, 2949, 3003, 3051, 3095, 3133, 3165, 3191, + 3211, 3225, 3231, 3232, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 347, 413, 483, 559, 639, + 723, 811, 903, 997, 1093, 1193, 1295, 1399, 1503, 1609, + 1715, 1821, 1927, 2033, 2137, 2241, 2343, 2443, 2539, 2633, + 2725, 2813, 2897, 2977, 3053, 3123, 3189, 3249, 3305, 3355, + 3399, 3437, 3469, 3495, 3515, 3529, 3535, 3536, 0, 1, + 7, 21, 41, 67, 99, 137, 181, 231, 287, 349, + 415, 487, 563, 645, 731, 821, 915, 1011, 1111, 1213, + 1317, 1423, 1531, 1641, 1751, 1863, 1975, 2087, 2197, 2307, + 2415, 2521, 2625, 2727, 2827, 2923, 3017, 3107, 3193, 3275, + 3351, 3423, 3489, 3551, 3607, 3657, 3701, 3739, 3771, 3797, + 3817, 3831, 3837, 3838, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 285, 345, 411, 481, 557, 637, + 721, 809, 901, 997, 1097, 1199, 1305, 1413, 1523, 1635, + 1749, 1863, 1979, 2095, 2211, 2327, 2443, 2557, 2671, 2783, + 2893, 3001, 3107, 3209, 3309, 3405, 3497, 3585, 3669, 3749, + 3825, 3895, 3961, 4021, 4075, 4125, 4169, 4207, 4239, 4265, + 4285, 4299, 4305, 4306, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 347, 413, 485, 561, 643, + 729, 819, 913, 1011, 1113, 1217, 1325, 1435, 1547, 1663, + 1779, 1897, 2017, 2137, 2257, 2377, 2497, 2617, 2737, 2855, + 2971, 3087, 3199, 3309, 3417, 3521, 3623, 3721, 3815, 3905, + 3991, 4073, 4149, 4221, 4287, 4347, 4403, 4453, 4497, 4535, + 4567, 4593, 4613, 4627, 4633, 4634, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 287, 349, 415, 487, + 565, 647, 733, 825, 921, 1021, 1125, 1231, 1341, 1453, + 1569, 1687, 1807, 1929, 2051, 2175, 2299, 2425, 2551, 2677, + 2801, 2925, 3047, 3169, 3289, 3407, 3523, 3635, 3745, 3851, + 3955, 4055, 4151, 4243, 4329, 4411, 4489, 4561, 4627, 4689, + 4745, 4795, 4839, 4877, 4909, 4935, 4955, 4969, 4975, 4976, + 0, 1, 7, 21, 41, 67, 99, 137, 181, 231, + 287, 349, 417, 489, 567, 649, 737, 829, 925, 1025, + 1129, 1237, 1349, 1463, 1581, 1701, 1823, 1947, 2073, 2201, + 2329, 2459, 2589, 2719, 2849, 2979, 3107, 3235, 3361, 3485, + 3607, 3727, 3845, 3959, 4071, 4179, 4283, 4383, 4479, 4571, + 4659, 4741, 4819, 4891, 4959, 5021, 5077, 5127, 5171, 5209, + 5241, 5267, 5287, 5301, 5307, 5308, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 287, 349, 417, 489, + 567, 651, 739, 831, 929, 1031, 1137, 1247, 1361, 1477, + 1597, 1719, 1843, 1969, 2097, 2227, 2359, 2491, 2625, 2759, + 2893, 3027, 3161, 3293, 3425, 3555, 3683, 3809, 3933, 4055, + 4175, 4291, 4405, 4515, 4621, 4723, 4821, 4913, 5001, 5085, + 5163, 5235, 5303, 5365, 5421, 5471, 5515, 5553, 5585, 5611, + 5631, 5645, 5651, 5652, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 569, 653, + 741, 835, 933, 1035, 1141, 1251, 1365, 1483, 1603, 1727, + 1853, 1983, 2115, 2249, 2383, 2519, 2657, 2795, 2933, 3071, + 3209, 3347, 3485, 3621, 3755, 3889, 4021, 4151, 4277, 4401, + 4521, 4639, 4753, 4863, 4969, 5071, 5169, 5263, 5351, 5435, + 5513, 5587, 5655, 5717, 5773, 5823, 5867, 5905, 5937, 5963, + 5983, 5997, 6003, 6004, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 569, 653, + 741, 835, 933, 1037, 1145, 1257, 1373, 1491, 1613, 1739, + 1867, 1997, 2131, 2267, 2405, 2543, 2683, 2825, 2967, 3109, + 3251, 3393, 3535, 3677, 3817, 3955, 4093, 4229, 4363, 4493, + 4621, 4747, 4869, 4987, 5103, 5215, 5323, 5427, 5525, 5619, + 5707, 5791, 5869, 5943, 6011, 6073, 6129, 6179, 6223, 6261, + 6293, 6319, 6339, 6353, 6359, 6360, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 287, 349, 417, 491, + 569, 653, 743, 837, 935, 1039, 1147, 1259, 1375, 1495, + 1619, 1745, 1875, 2007, 2143, 2281, 2421, 2563, 2705, 2849, + 2993, 3139, 3285, 3431, 3577, 3723, 3867, 4011, 4153, 4295, + 4435, 4573, 4709, 4841, 4971, 5097, 5221, 5341, 5457, 5569, + 5677, 5781, 5879, 5973, 6063, 6147, 6225, 6299, 6367, 6429, + 6485, 6535, 6579, 6617, 6649, 6675, 6695, 6709, 6715, 6716, + 0, 1, 7, 21, 41, 67, 99, 137, 181, 231, + 287, 349, 417, 491, 569, 653, 743, 837, 937, 1041, + 1149, 1261, 1377, 1497, 1621, 1749, 1879, 2013, 2149, 2287, + 2429, 2573, 2717, 2863, 3011, 3159, 3309, 3459, 3609, 3759, + 3909, 4057, 4205, 4351, 4495, 4639, 4781, 4919, 5055, 5189, + 5319, 5447, 5571, 5691, 5807, 5919, 6027, 6131, 6231, 6325, + 6415, 6499, 6577, 6651, 6719, 6781, 6837, 6887, 6931, 6969, + 7001, 7027, 7047, 7061, 7067, 7068, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 287, 349, 417, 491, + 569, 653, 743, 837, 937, 1041, 1149, 1261, 1377, 1497, + 1621, 1749, 1881, 2015, 2153, 2293, 2435, 2579, 2725, 2873, + 3023, 3175, 3327, 3479, 3633, 3787, 3941, 4093, 4245, 4397, + 4547, 4695, 4841, 4985, 5127, 5267, 5405, 5539, 5671, 5799, + 5923, 6043, 6159, 6271, 6379, 6483, 6583, 6677, 6767, 6851, + 6929, 7003, 7071, 7133, 7189, 7239, 7283, 7321, 7353, 7379, + 7399, 7413, 7419, 7420, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 489, 567, 651, + 741, 835, 935, 1039, 1147, 1259, 1377, 1499, 1625, 1753, + 1885, 2021, 2159, 2301, 2445, 2591, 2739, 2889, 3041, 3195, + 3349, 3505, 3661, 3817, 3973, 4129, 4285, 4441, 4595, 4749, + 4901, 5051, 5199, 5345, 5489, 5631, 5769, 5905, 6037, 6165, + 6291, 6413, 6531, 6643, 6751, 6855, 6955, 7049, 7139, 7223, + 7301, 7373, 7441, 7503, 7559, 7609, 7653, 7691, 7723, 7749, + 7769, 7783, 7789, 7790, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 571, 657, + 747, 843, 945, 1051, 1161, 1277, 1397, 1521, 1649, 1781, + 1915, 2053, 2195, 2339, 2485, 2635, 2787, 2941, 3095, 3251, + 3409, 3567, 3725, 3885, 4045, 4205, 4363, 4521, 4679, 4835, + 4989, 5143, 5295, 5445, 5591, 5735, 5877, 6015, 6149, 6281, + 6409, 6533, 6653, 6769, 6879, 6985, 7087, 7183, 7273, 7359, + 7439, 7513, 7581, 7643, 7699, 7749, 7793, 7831, 7863, 7889, + 7909, 7923, 7929, 7930, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 571, 657, + 747, 843, 943, 1049, 1159, 1273, 1393, 1517, 1645, 1777, + 1913, 2051, 2193, 2337, 2485, 2635, 2787, 2941, 3097, 3255, + 3415, 3575, 3737, 3899, 4061, 4223, 4385, 4547, 4709, 4869, + 5029, 5187, 5343, 5497, 5649, 5799, 5947, 6091, 6233, 6371, + 6507, 6639, 6767, 6891, 7011, 7125, 7235, 7341, 7441, 7537, + 7627, 7713, 7793, 7867, 7935, 7997, 8053, 8103, 8147, 8185, + 8217, 8243, 8263, 8277, 8283, 8284, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 287, 349, 417, 491, + 571, 655, 745, 841, 941, 1047, 1157, 1271, 1389, 1513, + 1641, 1773, 1907, 2045, 2187, 2331, 2479, 2629, 2783, 2939, + 3097, 3257, 3417, 3579, 3743, 3907, 4071, 4235, 4399, 4563, + 4727, 4891, 5055, 5217, 5377, 5537, 5695, 5851, 6005, 6155, + 6303, 6447, 6589, 6727, 6861, 6993, 7121, 7245, 7363, 7477, + 7587, 7693, 7793, 7889, 7979, 8063, 8143, 8217, 8285, 8347, + 8403, 8453, 8497, 8535, 8567, 8593, 8613, 8627, 8633, 8634, + 0, 1, 7, 21, 41, 67, 99, 137, 181, 231, + 287, 349, 417, 491, 571, 657, 749, 845, 947, 1053, + 1165, 1281, 1401, 1527, 1657, 1791, 1929, 2069, 2213, 2361, + 2511, 2663, 2819, 2977, 3137, 3299, 3463, 3627, 3793, 3959, + 4125, 4293, 4461, 4629, 4795, 4961, 5127, 5291, 5455, 5617, + 5777, 5935, 6091, 6243, 6393, 6541, 6685, 6825, 6963, 7097, + 7227, 7353, 7473, 7589, 7701, 7807, 7909, 8005, 8097, 8183, + 8263, 8337, 8405, 8467, 8523, 8573, 8617, 8655, 8687, 8713, + 8733, 8747, 8753, 8754, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 571, 657, + 747, 843, 943, 1049, 1159, 1275, 1395, 1519, 1647, 1779, + 1915, 2055, 2199, 2345, 2495, 2647, 2803, 2961, 3121, 3283, + 3447, 3613, 3779, 3947, 4115, 4285, 4455, 4625, 4795, 4965, + 5133, 5301, 5467, 5633, 5797, 5959, 6119, 6277, 6433, 6585, + 6735, 6881, 7025, 7165, 7301, 7433, 7561, 7685, 7805, 7921, + 8031, 8137, 8237, 8333, 8423, 8509, 8589, 8663, 8731, 8793, + 8849, 8899, 8943, 8981, 9013, 9039, 9059, 9073, 9079, 9080, + 0, 1, 7, 19, 39, 65, 97, 135, 179, 229, + 285, 347, 415, 489, 567, 651, 741, 835, 935, 1041, + 1151, 1265, 1385, 1509, 1637, 1769, 1905, 2045, 2189, 2335, + 2485, 2637, 2793, 2951, 3111, 3273, 3437, 3603, 3771, 3939, + 4109, 4279, 4451, 4623, 4795, 4967, 5139, 5309, 5479, 5647, + 5815, 5981, 6145, 6307, 6467, 6625, 6781, 6933, 7083, 7229, + 7373, 7513, 7649, 7781, 7909, 8033, 8153, 8267, 8377, 8483, + 8583, 8677, 8767, 8851, 8929, 9003, 9071, 9133, 9189, 9239, + 9283, 9321, 9353, 9379, 9399, 9411, 9417, 9418, 0, 1, + 7, 21, 41, 67, 99, 137, 181, 231, 287, 349, + 417, 491, 571, 657, 747, 843, 945, 1051, 1163, 1279, + 1399, 1525, 1655, 1789, 1927, 2069, 2213, 2361, 2513, 2667, + 2825, 2985, 3147, 3311, 3477, 3645, 3815, 3985, 4157, 4329, + 4503, 4677, 4851, 5025, 5199, 5371, 5543, 5713, 5883, 6051, + 6217, 6381, 6543, 6703, 6861, 7015, 7167, 7315, 7459, 7601, + 7739, 7873, 8003, 8129, 8249, 8365, 8477, 8583, 8685, 8781, + 8871, 8957, 9037, 9111, 9179, 9241, 9297, 9347, 9391, 9429, + 9461, 9487, 9507, 9521, 9527, 9528, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 287, 349, 417, 491, + 571, 657, 749, 845, 947, 1055, 1167, 1285, 1407, 1533, + 1663, 1797, 1935, 2077, 2223, 2373, 2525, 2681, 2839, 3001, + 3165, 3331, 3499, 3669, 3839, 4011, 4185, 4359, 4533, 4709, + 4885, 5061, 5235, 5409, 5583, 5755, 5925, 6095, 6263, 6429, + 6593, 6755, 6913, 7069, 7221, 7371, 7517, 7659, 7797, 7931, + 8061, 8187, 8309, 8427, 8539, 8647, 8749, 8845, 8937, 9023, + 9103, 9177, 9245, 9307, 9363, 9413, 9457, 9495, 9527, 9553, + 9573, 9587, 9593, 9594, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 571, 655, + 745, 841, 941, 1047, 1157, 1273, 1393, 1517, 1647, 1781, + 1919, 2061, 2207, 2355, 2507, 2663, 2821, 2981, 3145, 3311, + 3479, 3649, 3821, 3993, 4167, 4341, 4517, 4693, 4869, 5045, + 5221, 5397, 5573, 5747, 5921, 6093, 6265, 6435, 6603, 6769, + 6933, 7093, 7251, 7407, 7559, 7707, 7853, 7995, 8133, 8267, + 8397, 8521, 8641, 8757, 8867, 8973, 9073, 9169, 9259, 9343, + 9423, 9497, 9565, 9627, 9683, 9733, 9777, 9815, 9847, 9873, + 9893, 9907, 9913, 9914, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 571, 657, + 747, 843, 945, 1051, 1163, 1279, 1401, 1527, 1657, 1791, + 1929, 2071, 2217, 2367, 2519, 2675, 2835, 2997, 3161, 3327, + 3495, 3665, 3837, 4011, 4185, 4361, 4537, 4715, 4893, 5071, + 5249, 5427, 5603, 5779, 5953, 6127, 6299, 6469, 6637, 6803, + 6967, 7129, 7289, 7445, 7597, 7747, 7893, 8035, 8173, 8307, + 8437, 8563, 8685, 8801, 8913, 9019, 9121, 9217, 9307, 9393, + 9473, 9547, 9615, 9677, 9733, 9783, 9827, 9865, 9897, 9923, + 9943, 9957, 9963, 9964, 0, 1, 7, 21, 41, 67, + 99, 137, 181, 231, 287, 349, 417, 491, 571, 657, + 749, 845, 947, 1055, 1167, 1285, 1407, 1533, 1663, 1799, + 1939, 2083, 2229, 2379, 2533, 2689, 2849, 3011, 3177, 3345, + 3515, 3687, 3861, 4035, 4211, 4387, 4565, 4743, 4921, 5099, + 5277, 5455, 5633, 5809, 5985, 6159, 6333, 6505, 6675, 6843, + 7009, 7171, 7331, 7487, 7641, 7791, 7937, 8081, 8221, 8357, + 8487, 8613, 8735, 8853, 8965, 9073, 9175, 9271, 9363, 9449, + 9529, 9603, 9671, 9733, 9789, 9839, 9883, 9921, 9953, 9979, + 9999, 10013, 10019, 10020, 0, 1, 7, 19, 39, 65, + 97, 135, 179, 229, 285, 347, 415, 489, 567, 651, + 741, 837, 937, 1043, 1153, 1269, 1389, 1513, 1643, 1777, + 1915, 2057, 2203, 2351, 2503, 2659, 2817, 2979, 3143, 3309, + 3477, 3647, 3819, 3993, 4169, 4345, 4523, 4701, 4881, 5061, + 5241, 5421, 5601, 5779, 5957, 6133, 6309, 6483, 6655, 6825, + 6993, 7159, 7323, 7485, 7643, 7799, 7951, 8099, 8245, 8387, + 8525, 8659, 8789, 8913, 9033, 9149, 9259, 9365, 9465, 9561, + 9651, 9735, 9813, 9887, 9955, 10017, 10073, 10123, 10167, 10205, + 10237, 10263, 10283, 10295, 10301, 10302, 0, 1, 7, 21, + 41, 67, 99, 137, 181, 231, 287, 349, 417, 491, + 571, 655, 745, 841, 941, 1047, 1159, 1275, 1395, 1521, + 1651, 1785, 1923, 2065, 2211, 2361, 2513, 2669, 2829, 2991, + 3155, 3321, 3491, 3663, 3837, 4011, 4187, 4365, 4543, 4723, + 4903, 5083, 5263, 5443, 5623, 5803, 5981, 6159, 6335, 6509, + 6683, 6855, 7025, 7191, 7355, 7517, 7677, 7833, 7985, 8135, + 8281, 8423, 8561, 8695, 8825, 8951, 9071, 9187, 9299, 9405, + 9505, 9601, 9691, 9775, 9855, 9929, 9997, 10059, 10115, 10165, + 10209, 10247, 10279, 10305, 10325, 10339, 10345, 10346, 0, 1, + 7, 21, 41, 67, 99, 137, 181, 231, 287, 349, + 417, 491, 571, 655, 745, 841, 943, 1049, 1161, 1277, + 1397, 1523, 1653, 1787, 1925, 2067, 2213, 2363, 2517, 2673, + 2833, 2995, 3159, 3327, 3497, 3669, 3843, 4019, 4195, 4373, + 4551, 4731, 4911, 5091, 5271, 5451, 5631, 5811, 5989, 6167, + 6343, 6519, 6693, 6865, 7035, 7203, 7367, 7529, 7689, 7845, + 7999, 8149, 8295, 8437, 8575, 8709, 8839, 8965, 9085, 9201, + 9313, 9419, 9521, 9617, 9707, 9791, 9871, 9945, 10013, 10075, + 10131, 10181, 10225, 10263, 10295, 10321, 10341, 10355, 10361, 10362, + 0, 1, 7, 21, 41, 67, 99, 137, 181, 231, + 287, 349, 417, 491, 571, 657, 747, 843, 945, 1051, + 1163, 1279, 1399, 1525, 1655, 1789, 1927, 2069, 2215, 2365, + 2519, 2675, 2835, 2997, 3161, 3329, 3499, 3671, 3845, 4021, + 4197, 4375, 4553, 4733, 4913, 5093, 5273, 5453, 5633, 5813, + 5991, 6169, 6345, 6521, 6695, 6867, 7037, 7205, 7369, 7531, + 7691, 7847, 8001, 8151, 8297, 8439, 8577, 8711, 8841, 8967, + 9087, 9203, 9315, 9421, 9523, 9619, 9709, 9795, 9875, 9949, + 10017, 10079, 10135, 10185, 10229, 10267, 10299, 10325, 10345, 10359, + 10365, 10366 +}; + +const int16_t ivas_pca_offset_n2[IVAS_PCA_N1] = +{ + 0, 2, 6, 14, 24, 38, 56, 76, 100, 126, 156, 188, + 224, 262, 302, 346, 392, 442, 494, 548, 604, 664, 726, 790, + 856, 924, 994, 1066, 1140, 1216, 1294, 1374, 1454, 1536, 1620, 1704, + 1790, 1878, 1966, 2054, 2144, 2234, 2324, 2416, 2508, 2600, 2692, 2784, + 2876, 2968, 3058, 3148, 3238, 3326, 3414, 3502, 3588, 3672, 3756, 3838, + 3918, 3998, 4076, 4152, 4226, 4298, 4368, 4436, 4502, 4566, 4628, 4688, + 4744, 4798, 4850, 4900, 4946, 4990, 5030, 5068, 5104, 5136, 5166, 5192, + 5216, 5236, 5254, 5268, 5278, 5286, 5290 +}; + + +/*----------------------------------------------------------------------------------* + * Parametric MC ROM tables + *----------------------------------------------------------------------------------*/ + +const int16_t param_mc_band_grouping_20[20 + 1] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 17, 20, 23, 27, 33, 40, 52, 60 +}; + +const int16_t param_mc_coding_band_mapping_20[20] = +{ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +const int16_t param_mc_bands_coded_20[4] = +{ + 10, 14, 18, 20 +}; + +const int16_t param_mc_band_grouping_14[14 + 1] = +{ + 0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 28, 40, 60 +}; + + +const int16_t param_mc_coding_band_mapping_14[14] = +{ + 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 +}; + +const int16_t param_mc_bands_coded_14[4] = +{ + 8, 11, 13, 14 +}; + +const int16_t param_mc_band_grouping_10[10 + 1] = +{ + 0, 1, 2, 3, 5, 7, 10, 14, 20, 40, 60 +}; + + +const int16_t param_mc_bands_coded_10[4] = +{ + 6, 8, 9, 10 +}; + +const int16_t param_mc_coding_band_mapping_10[10] = +{ + 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 +}; + +const int16_t Param_MC_index[MAX_CICP_CHANNELS] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 +}; + +const float ivas_param_mc_dmx_fac_CICP6_2tc[12] = +{ + 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, /*Lt*/ + 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f /*Rt*/ +}; + +const float ivas_param_mc_dmx_fac_CICP12_2tc[16] = +{ + 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ + 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f, 0.0f, 1.0f /*Rt*/ +}; + +const float ivas_param_mc_dmx_fac_CICP12_3tc[24] = +{ + 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ + 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ + 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f /*Ct*/ +}; + +const float ivas_param_mc_dmx_fac_CICP14_2tc[16] = +{ + 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ + 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f, 0.0f, 1.0f /*Rt*/ +}; +const float ivas_param_mc_dmx_fac_CICP14_3tc[24] = +{ + 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ + 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ + 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, /*Ct*/ +}; + +const float ivas_param_mc_dmx_fac_CICP16_3tc[30] = +{ + 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ + 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ + 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f /*Ct*/ +}; + +const float ivas_param_mc_dmx_fac_CICP19_3tc[36] = +{ + 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ + 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ + 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f /*Ct*/ +}; + +const float ivas_param_mc_dmx_fac_CICP19_4tc[48] = +{ + 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, /*Lht*/ + 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, /*Rht*/ + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lut*/ + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rut*/ +}; + +/* Coefficient for Parametric MC ILD factorization */ +const float ivas_param_mc_ild_fac_CICP6_2tc[6] = +{ + 0.391608498887651f, + 0.391608498887651f, + 0.208150823035836f, + 0.323713613305539f, + 0.323713613305539f, + 0.208150823035836f, +}; + +const float ivas_param_mc_ild_fac_CICP12_2tc[8] = +{ + 0.365151211522008f, + 0.365151211522008f, + 0.208008958987949f, + 0.209863469733018f, + 0.209863469733018f, + 0.171473949468979f, + 0.171473949468979f, + 0.208008958987949f +}; + +const float ivas_param_mc_ild_fac_CICP12_3tc[8] = +{ + 0.5f, + 0.5f, + 0.29f, + 0.29f, + 0.2f, + 0.2f, + 1.0f, + 0.25f +}; + +const float ivas_param_mc_ild_fac_CICP14_2tc[8] = +{ + 0.36427054f, + 0.36427054f, + 0.18290930f, + 0.21193730f, + 0.21193730f, + 0.24564756f, + 0.24564756f, + 0.20800895f +}; + +const float ivas_param_mc_ild_fac_CICP14_3tc[8] = +{ + 0.49716263f, + 0.49716263f, + 0.25198298f, + 0.25198298f, + 0.29498283f, + 0.29498283f, + 1.0f, + 0.25f +}; + +const float ivas_param_mc_ild_fac_CICP16_3tc[10] = +{ + 0.34f, + 0.34f, + 0.22f, + 0.22f, + 0.20f, + 0.20f, + 0.18f, + 0.18f, + 1.0f, + 0.25f, +}; + +const float ivas_param_mc_ild_fac_CICP19_3tc[12] = +{ + 0.3f, + 0.3f, + 0.17f, + 0.17f, + 0.12f, + 0.12f, + 0.19f, + 0.19f, + 0.19f, + 0.19f, + 1.0f, + 0.5f +}; + +const float ivas_param_mc_ild_fac_CICP19_4tc[12] = +{ + 0.35f, + 0.35f, + 0.17f, + 0.22f, + 0.2f, + 0.2f, + 0.2f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.2f, +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP6_2tc = +{ + 5, + 6, + {0,1,2,4,5,3}, + {1,1,2,1,1,2}, + {{0},{1},{0,1},{0},{1},{0,1}} +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP12_2tc = +{ + 7, + 8, + {0,1,2,4,5,6,7,3}, + {1,1,2,1,1,1,1,2}, + {{0},{1},{0,1},{0},{1},{0},{1},{0,1}} +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP12_3tc = +{ + 6, + 8, + {0,1,4,5,6,7,2,3}, + {1,1,1,1,1,1,1,1}, + {{0},{1},{0},{1},{0},{1},{2},{2}} +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP14_2tc = +{ + 7, + 8, + {0,1,2,4,5,6,7,3}, + {1,1,2,1,1,1,1,2}, + {{0},{1},{0,1},{0},{1},{0},{1},{0,1}} +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP14_3tc = +{ + 6, + 8, + {0,1,4,5,6,7,2,3}, + {1,1,1,1,1,1,1,1}, + {{0},{1},{0},{1},{0},{1},{2},{2}} +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP16_3tc = +{ + 8, + 10, + {0,1,4,5,6,7,8,9,2,3}, + {1,1,1,1,1,1,1,1,1,1}, + {{0},{1},{0},{1},{0},{1},{0},{1},{2},{2}} +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP19_3tc = +{ + 10, + 12, + {0,1,4,5,6,7,8,9,10,11,2,3}, + {1,1,1,1,1,1,1,1,1,1,1,1}, + {{0},{1},{0},{1},{0},{1},{0},{1},{0},{1},{2},{2}} +}; + +const PARAM_MC_ILD_MAPPING ivas_param_mc_ild_mapping_CICP19_4tc = +{ + 11, + 12, + {0,1,2,4,5,6,7,8,9,10,11,3}, + {1,1,2,1,1,1,1,1,1,1,1,2}, + {{0},{1},{0,1},{0},{1},{0},{1},{2},{3},{2},{3},{0,1}} +}; + +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP6_2tc = +{ + 4, + 5, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 2, 3 }} /* C/LFE */ +}; + +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP12_2tc = +{ + 6, + 7, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 2, 6 }, /* C/BLS */ + { 2, 7 }, /* C/BRS */ + { 2, 3 } /* C/LFE */ + } +}; + +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP12_3tc = +{ + 6, + 7, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 0, 6 }, /* L/BLS */ + { 1, 7 }, /* R/BRS */ + { 2, 3 } /* C/LFE */ + } +}; + +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP14_2tc = +{ + 6, + 7, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 2, 6 }, /* C/UFL */ + { 2, 7 }, /* C/UFR */ + { 2, 3 } /* C/LFE */ + } +}; +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP14_3tc = +{ + 6, + 7, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 0, 6 }, /* L/UFL */ + { 1, 7 }, /* R/UFR */ + { 2, 3 } /* C/LFE */ + } +}; + +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP16_3tc = +{ + 8, + 9, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 0, 6 }, /* L/UFL */ + { 1, 7 }, /* R/UFR */ + { 4, 8 }, /* LS/UBL */ + { 5, 9 }, /* RS/UBR */ + { 2, 3 } /* C/LFE */ + } +}; + +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP19_3tc = +{ + 10, + 11, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 0, 6 }, /* L/LBS */ + { 1, 7 }, /* R/RBS */ + { 0, 8 }, /* L/UFL */ + { 1, 9 }, /* R/UFR */ + { 6, 10 }, /* LBS/UBL */ + { 7, 11 }, /* RBS/UBR */ + { 2, 3 } /* C/LFE */ + } +}; + +const PARAM_MC_ICC_MAPPING ivas_param_mc_icc_mapping_CICP19_4tc = +{ + 8, + 9, + { { 0, 4 }, /* L/LS */ + { 1, 5 }, /* R/RS */ + { 0, 2 }, /* L/C */ + { 1, 2 }, /* R/C */ + { 0, 6 }, /* L/LBS */ + { 1, 7 }, /* R/RBS */ + { 8, 10 }, /*UFL/UBL */ + { 9, 11 }, /*UFR/UBR */ + { 2, 3 } /* C/LFE */ + } +}; + +const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = +{ + /* CICP6 48000 */ + { + MC_LS_SETUP_5_1, + 6, + 2, + IVAS_48k, + &ivas_param_mc_ild_mapping_CICP6_2tc, + &ivas_param_mc_icc_mapping_CICP6_2tc, + &ivas_param_mc_dmx_fac_CICP6_2tc[0], + &ivas_param_mc_ild_fac_CICP6_2tc[0] + }, + /* CICP6 64000 */ + { + MC_LS_SETUP_5_1, + 6, + 2, + IVAS_64k, + &ivas_param_mc_ild_mapping_CICP6_2tc, + &ivas_param_mc_icc_mapping_CICP6_2tc, + &ivas_param_mc_dmx_fac_CICP6_2tc[0], + &ivas_param_mc_ild_fac_CICP6_2tc[0] + }, + /* CICP6 80000 */ + { + MC_LS_SETUP_5_1, + 6, + 2, + IVAS_80k, + &ivas_param_mc_ild_mapping_CICP6_2tc, + &ivas_param_mc_icc_mapping_CICP6_2tc, + &ivas_param_mc_dmx_fac_CICP6_2tc[0], + &ivas_param_mc_ild_fac_CICP6_2tc[0] + }, + /* CICP12 48000 */ + { + MC_LS_SETUP_7_1, + 8, + 2, + IVAS_48k, + &ivas_param_mc_ild_mapping_CICP12_2tc, + &ivas_param_mc_icc_mapping_CICP12_2tc, + &ivas_param_mc_dmx_fac_CICP12_2tc[0], + &ivas_param_mc_ild_fac_CICP12_2tc[0] + }, + /* CICP12 64000 */ + { + MC_LS_SETUP_7_1, + 8, + 2, + IVAS_64k, + &ivas_param_mc_ild_mapping_CICP12_2tc, + &ivas_param_mc_icc_mapping_CICP12_2tc, + &ivas_param_mc_dmx_fac_CICP12_2tc[0], + &ivas_param_mc_ild_fac_CICP12_2tc[0] + }, + /* CICP12 80000 */ + { + MC_LS_SETUP_7_1, + 8, + 2, + IVAS_80k, + &ivas_param_mc_ild_mapping_CICP12_2tc, + &ivas_param_mc_icc_mapping_CICP12_2tc, + &ivas_param_mc_dmx_fac_CICP12_2tc[0], + &ivas_param_mc_ild_fac_CICP12_2tc[0] + }, + /* CICP12 96000 */ + { + MC_LS_SETUP_7_1, + 8, + 3, + IVAS_96k, + &ivas_param_mc_ild_mapping_CICP12_3tc, + &ivas_param_mc_icc_mapping_CICP12_3tc, + &ivas_param_mc_dmx_fac_CICP12_3tc[0], + &ivas_param_mc_ild_fac_CICP12_3tc[0] + }, + /* CICP14 48000 */ + { + MC_LS_SETUP_5_1_2, + 8, + 2, + IVAS_48k, + &ivas_param_mc_ild_mapping_CICP14_2tc, + &ivas_param_mc_icc_mapping_CICP14_2tc, + &ivas_param_mc_dmx_fac_CICP14_2tc[0], + &ivas_param_mc_ild_fac_CICP14_2tc[0] + }, + /* CICP14 64000 */ + { + MC_LS_SETUP_5_1_2, + 8, + 2, + IVAS_64k, + &ivas_param_mc_ild_mapping_CICP14_2tc, + &ivas_param_mc_icc_mapping_CICP14_2tc, + &ivas_param_mc_dmx_fac_CICP14_2tc[0], + &ivas_param_mc_ild_fac_CICP14_2tc[0] + }, + /* CICP14 80000 */ + { + MC_LS_SETUP_5_1_2, + 8, + 2, + IVAS_80k, + &ivas_param_mc_ild_mapping_CICP14_2tc, + &ivas_param_mc_icc_mapping_CICP14_2tc, + &ivas_param_mc_dmx_fac_CICP14_2tc[0], + &ivas_param_mc_ild_fac_CICP14_2tc[0] + }, + /* CICP14 96000 */ + { + MC_LS_SETUP_5_1_2, + 8, + 3, + IVAS_96k, + &ivas_param_mc_ild_mapping_CICP14_3tc, + &ivas_param_mc_icc_mapping_CICP14_3tc, + &ivas_param_mc_dmx_fac_CICP14_3tc[0], + &ivas_param_mc_ild_fac_CICP14_3tc[0] + }, + /* CICP16 96000 */ + { + MC_LS_SETUP_5_1_4, + 10, + 3, + IVAS_96k, + &ivas_param_mc_ild_mapping_CICP16_3tc, + &ivas_param_mc_icc_mapping_CICP16_3tc, + &ivas_param_mc_dmx_fac_CICP16_3tc[0], + &ivas_param_mc_ild_fac_CICP16_3tc[0] + }, + /* CICP16 128000 */ + { + MC_LS_SETUP_5_1_4, + 10, + 3, + IVAS_128k, + &ivas_param_mc_ild_mapping_CICP16_3tc, + &ivas_param_mc_icc_mapping_CICP16_3tc, + &ivas_param_mc_dmx_fac_CICP16_3tc[0], + &ivas_param_mc_ild_fac_CICP16_3tc[0] + }, + /* CICP19 128000 */ + { + MC_LS_SETUP_7_1_4, + 12, + 3, + IVAS_128k, + &ivas_param_mc_ild_mapping_CICP19_3tc, + &ivas_param_mc_icc_mapping_CICP19_3tc, + &ivas_param_mc_dmx_fac_CICP19_3tc[0], + &ivas_param_mc_ild_fac_CICP19_3tc[0] + }, + /* CICP19 160000 */ + { + MC_LS_SETUP_7_1_4, + 12, + 4, + IVAS_160k, + &ivas_param_mc_ild_mapping_CICP19_4tc, + &ivas_param_mc_icc_mapping_CICP19_4tc, + &ivas_param_mc_dmx_fac_CICP19_4tc[0], + &ivas_param_mc_ild_fac_CICP19_4tc[0] + } +}; + +const float ivas_param_mc_quant_ild_5d1_48[PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + -100.0f, -20.0f, -13.0f, -10.0f, + -8.0f, -5.5f, -3.5f, -1.5f, 0.0f, 1.5f, 3.5f, 5.5f, 8.0f, 10.0f, 13.0f, 20.0f +}; + +/* Quantizer for ICCs in Parametric MC Processing */ +const float ivas_param_mc_quant_icc[PARAM_MC_SZ_ICC_QUANTIZER] = +{ + -0.99f, -0.589f, 0.0f, 0.36764f, 0.60092f, 0.84118f, 0.937f, 1.0f +}; + +/* Alphabet for delta coding for the ICCs in Parametric MC processing */ +const uint16_t ivas_param_mc_cum_freq_icc_cicp6_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1] = +{ + 0, 24, 224, 20873, 42384, 51699, 57122, 60572, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_cicp6_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER] = +{ + 24, 200, 20649, 21511, 9315, 5423, 3450, 4963 +}; + +const uint16_t ivas_param_mc_cum_freq_icc_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER] = +{ + 0, 4, 9, 124, 447, 1311, 4453, 18116, 48636, 60573, 63692, 64746, 65327, 65531, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1] = +{ + 4, 5, 115, 323, 864, 3142, 13663, 30520, 11937, 3119, 1054, 581, 204, 3, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_icc_cicp12_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1] = +{ + 0, 30, 848, 26611, 47846, 57358, 61679, 63237, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_cicp12_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER] = +{ + 30, 818, 25763, 21235, 9512, 4321, 1558, 2298 +}; + +const uint16_t ivas_param_mc_cum_freq_icc_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER] = +{ + 0, 2, 7, 53, 243, 979, 3994, 16732, 49642, 61343, 64331, 65158, 65438, 65532, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1] = +{ + 2, 5, 46, 190, 736, 3015, 12738, 32910, 11701, 2988, 827, 280, 94, 2, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_icc_cicp14_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1] = +{ + 0, 46, 826, 27798, 49552, 58447, 62046, 63284, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_cicp14_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER ]={ + 46, 780, 26972, 21754, 8895, 3599, 1238, 2251 +}; + +const uint16_t ivas_param_mc_cum_freq_icc_delta_cicp14_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER] = +{ + 0, 3, 8, 36, 172, 763, 3436, 15845, 50168, 62005, 64676, 65298, 65481, 65533, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_delta_cicp14_48_16bits[2* PARAM_MC_SZ_ICC_QUANTIZER - 1] = +{ + 3, 5, 28, 136, 591, 2673, 12409, 34323, 11837, 2671, 622, 183, 52, 1, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_icc_combined_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1] = +{ + 0, 34, 552, 24717, 45819, 54772, 59054, 61166, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_combined_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER] = +{ + 34, 518, 24165, 21102, 8953, 4282, 2112, 4369 +}; + +const uint16_t ivas_param_mc_cum_freq_icc_delta_combined_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER] = +{ + 0, 3, 7, 74, 304, 1009, 3870, 16502, 49834, 61384, 64217, 65020, 65369, 65531, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_icc_delta_combined_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1] = +{ + 3, 4, 67, 230, 705, 2861, 12632, 33332, 11550, 2833, 803, 349, 162, 3, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_cicp6_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1] = +{ + 0, 1092, 5574, 8315, 10652, 13875, 19656, 27664, 36284, 47058, 56251, 62579, 65118, 65462, 65513, 65532, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_cicp6_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 1092, 4482, 2741, 2337, 3223, 5781, 8008, 8620, 10774, 9193, 6328, 2539, 344, 51, 19, 3 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 0, 1, 2, 3, 5, 38, 146, 352, 638, 997, 1559, 2323, 3570, 5859, 10556, 21075, 44682, 55617, 60408, 62739, 63833, 64443, 64809, 65074, 65279, 65400, 65484, 65531, 65532, 65533, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1] = +{ + 1, 1, 1, 2, 33, 108, 206, 286, 359, 562, 764, 1247, 2289, 4697, 10519, 23607, 10935, 4791, 2331, 1094, 610, 366, 265, 205, 121, 84, 47, 1, 1, 1, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_cicp12_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1] = +{ + 0, 967, 6335, 9941, 12837, 16652, 22416, 29814, 38807, 48497, 57184, 62661, 64916, 65466, 65514, 65530, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_cicp12_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 967, 5368, 3606, 2896, 3815, 5764, 7398, 8993, 9690, 8687, 5477, 2255, 550, 48, 16, 5 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 0, 1, 2, 3, 5, 18, 61, 149, 320, 592, 1083, 1793, 2974, 5257, 10133, 21274, 44342, 55891, 60895, 63174, 64244, 64793, 65100, 65287, 65406, 65477, 65517, 65531, 65532, 65533, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1] = +{ + 1, 1, 1, 2, 13, 43, 88, 171, 272, 491, 710, 1181, 2283, 4876, 11141, 23068, 11549, 5004, 2279, 1070, 549, 307, 187, 119, 71, 40, 14, 1, 1, 1, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_cicp14_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1] = +{ + 0, 229, 7068, 10910, 13856, 17467, 22629, 29174, 36906, 46558, 55579, 61802, 65222, 65505, 65527, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_cicp14_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 229, 6839, 3842, 2946, 3611, 5162, 6545, 7732, 9652, 9021, 6223, 3420, 283, 22, 7, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_delta_cicp14_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 0, 1, 2, 3, 4, 12, 56, 153, 278, 475, 856, 1430, 2489, 4723, 9580, 20685, 45423, 56274, 60948, 63097, 64128, 64679, 65002, 65208, 65348, 65445, 65517, 65531, 65532, 65533, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_delta_cicp14_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1] = +{ + 1, 1, 1, 1, 8, 44, 97, 125, 197, 381, 574, 1059, 2234, 4857, 11105, 24738, 10851, 4674, 2149, 1031, 551, 323, 206, 140, 97, 72, 14, 1, 1, 1, 1 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_combined_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS+1] = +{ + 0, 1453, 8326, 12221, 15164, 18764, 24177, 31297, 39520, 49154, 57135, 62460, 64821, 65468, 65514, 65530, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_combined_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 1453, 6873, 3895, 2943, 3600, 5413, 7120, 8223, 9634, 7981, 5325, 2361, 647, 46, 16, 5 +}; + +const uint16_t ivas_param_mc_cum_freq_ild_delta_combined_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = +{ + 0, 1, 2, 3, 5, 29, 98, 220, 414, 699, 1186, 1876, 3049, 5304, 10013, 20612, 45247, 56109, 60818, 63022, 64081, 64647, 64977, 65198, 65348, 65443, 65502, 65530, 65532, 65533, 65534, 65535 +}; + +const uint16_t ivas_param_mc_sym_freq_ild_delta_combined_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1] = +{ + 1, 1, 1, 2, 24, 69, 122, 194, 285, 487, 690, 1173, 2255, 4709, 10599, 24635, 10862, 4709, 2204, 1059, 566, 330, 221, 150, 95, 59, 28, 2, 1, 1, 1 +}; + + +/*----------------------------------------------------------------------------------* + * MASA ROM tables + *----------------------------------------------------------------------------------*/ + +const int16_t bits_direction_masa[DIRAC_DIFFUSE_LEVELS] = +{ + 11, + 11, + 10, + 9, + 7, + 6, + 5, + 3 +}; + +const float coherence_cb0_masa[DIRAC_DIFFUSE_LEVELS * 2 * MASA_NO_CV_COH] = +{ + /* this is the same */ + 0.0478f, 0.2547f, 0.5515f, 0.9865f, 1.3573f, 1.6838f, 1.9674f, 0.0f, + 0.1211f, 0.4123f, 0.6997f, 1.0154f, 1.4197f, 1.7971f, 0.0f, 0.0f, + 0.1614f, 0.5674f, 0.9708f, 1.3699f, 1.7357f, 0.0f, 0.0f, 0.0f, + 0.2349f, 0.7306f, 1.2051f, 1.6547f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.2381f, 0.7185f, 1.1758f, 1.6335f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.2400f, 0.7027f, 1.1407f, 1.6243f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.3518f, 0.9398f, 1.6454f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + + 0.1445f, 0.3432f, 0.5351f, 0.7524f, 1.0095f, 1.3210f, 1.7399f, 0.0f, + 0.2002f, 0.4447f, 0.6869f, 0.9593f, 1.3090f, 1.7029f, 0.0f, 0.0f, + 0.2617f, 0.5556f, 0.8645f, 1.2185f, 1.6051f, 0.0f, 0.0f, 0.0f, + 0.3318f, 0.6810f, 1.0445f, 1.4710f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.3324f, 0.6588f, 0.9980f, 1.4164f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.3378f, 0.6658f, 1.0009f, 1.4269f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.3986f, 0.8244f, 1.3526f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + + /* 0.0478f, 0.2547f, 1.9674f, 0.9865f, 0.5515f, 1.6838f, 1.3573f, 0.0f, + 0.1211f, 0.4123f, 0.6997f, 1.0154f, 1.4197f, 1.7971f, 0.0f, 0.0f, + 0.5674f, 0.9708f, 0.1614f, 1.3699f, 1.7357f, 0.0f, 0.0f, 0.0f, + 0.7306f, 1.2051f, 0.2349f, 1.6547f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.7185f, 1.1758f, 0.2381f, 1.6335f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.7027f, 1.1407f, 0.2400f, 1.6243f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.9398f, 1.6454f, 0.3518f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + + 0.3432f, 0.1445f, 0.5351f, 0.7524f, 1.0095f, 1.3210f, 1.7399f, 0.0f, + 0.4447f, 0.2002f, 0.6869f, 0.9593f, 1.3090f, 1.7029f, 0.0f, 0.0f, + 0.5556f, 0.2617f, 0.8645f, 1.2185f, 1.6051f, 0.0f, 0.0f, 0.0f, + 0.6810f, 0.3318f, 1.0445f, 1.4710f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.6588f, 0.3324f, 0.9980f, 1.4164f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.6658f, 0.3378f, 1.0009f, 1.4269f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.3986f, 0.8244f, 1.3526f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f */ +}; + +const float coherence_cb1_masa[MASA_NO_CV_COH1*MASA_MAXIMUM_CODING_SUBBANDS] = +{ + -0.0019f, 0.2597f, -0.2696f, 0.6269f, -0.6295f, + -0.0055f, 0.2582f, -0.2784f, 0.6473f, -0.6538f, + -0.0029f, 0.2506f, -0.2630f, 0.6498f, -0.6540f, + -0.0004f, 0.2546f, -0.2579f, 0.6851f, -0.6743f, + 0.0017f, 0.2521f, -0.2479f, 0.7217f, -0.7157f +}; + +const int16_t len_cb_dct0_masa[DIRAC_DIFFUSE_LEVELS] = { 7, 6, 5, 4, 4, 4, 3, 2 }; + +const uint8_t sur_coherence_cb_masa[MASA_MAX_NO_CV_SUR_COH*MASA_NO_CB_SUR_COH] = +{ + 16, 99, 0, 0, 0, 0, 0, 0, + 12, 64, 167, 0, 0, 0, 0, 0, + 10, 45, 100, 218, 0, 0, 0, 0, + 8, 34, 70, 124, 235, 0, 0, 0, + 7, 27, 55, 90, 141, 242, 0, 0, + 7, 23, 45, 71, 105, 153, 247, 0, + 6, 20, 38, 60, 86, 119, 165, 249 +}; + +const int16_t idx_cb_sur_coh_masa[MASA_MAX_NO_CV_SUR_COH] = { 0, 1, 2, 3, 4, 5, 5, 6 }; + +const int16_t len_huf_masa[MASA_NO_CV_COH1] = { 4, 2, 1, 3, 4 }; + +const int16_t huff_code_av_masa[MASA_NO_CV_COH1] = { 15, 2, 0, 6, 14 }; + +const int16_t no_theta_masa[NO_SPHERICAL_GRIDS-2] = /* from 1 to 11 bits */ +{ /*1, 1,*/ 2 ,2 , 4, 5, 6, 7, 10, 14, 19 + /*0, 2, 8, 6, 7, 12, 14, 16*/ +}; + +const int16_t no_phi_masa[NO_SPHERICAL_GRIDS][MAX_NO_THETA] = /* from 1 to 11 bits*/ +{ + { 2 }, + { 4 }, + { 4, 2 }, + { 8, 4 }, /* 8, 4*/ + { 12, 7, 2, 1 }, /* 12, */ + { 14, 13, 9, 2, 1 }, + { 22, 21, 17, 11, 3, 1 }, + { 33, 32, 29, 23, 17, 9, 1 }, + { 48, 47, 45, 41, 35, 28, 20, 12, 2, 1 }, + { 60, 60, 58, 56, 54, 50, 46, 41, 36, 30, 23, 17, 10, 1 }, + { 89, 89, 88, 86, 84, 81, 77, 73, 68, 63, 57, 51, 44, 38, 30, 23, 15, 8, 1 } +}; + +const float delta_theta_masa[NO_SPHERICAL_GRIDS - 2] = +{ /*180.0f, 90.0f,*/ 45.0f, 45.0f, 36.0f, 25.5f, 20.0f, /*14.9f*/ 15.0f, 10.78f, 6.7f, 5.0f }; +/* spheres +11 (10.9951) : (4.05,5) 89 89 88 86 84 81 77 73 68 63 57 51 44 38 30 23 15 8 1 +10 (10.0000): (6, 6.7) 60 60 58 56 54 50 46 41 36 30 23 17 10 1 +9 (8.9944): (7.5, 10.78) 48 47 45 41 35 28 20 12 2 1 +8 (7.9944): (10.8, 14.9) 33 32 29 23 17 9 1 +7 (7.0000): (16.5,20) 22 21 17 11 3 1 +6 (6.0000): (25,25.5) 14 13 9 2 1 +5 (5.0000): (36,36) 10 8 2 1 +4 (4.0000): (45 45) 8 4 (no +-90) +3 (3.0000) (90,45) 4 2 (no +-90) +2 (2.0000) (90,90) 4 (no +-90) +1 () 2 +*/ + +const float azimuth_cb[8] = +{ + 0.0f, -180.0f, -90.0f, 90.0f, -45.0f, 45.0f, -135.0f, 135.0f +}; + +const int16_t MASA_band_grouping_24[24 + 1] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30, 40, 60 +}; + +const int16_t MASA_band_mapping_24_to_18[18 + 1] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 17, 20, 21, 22, 23, 24 +}; + +const int16_t MASA_band_mapping_24_to_12[12 + 1] = +{ + 0, 1, 2, 3, 4, 5, 7, 9, 12, 15, 20, 22, 24 +}; + +const int16_t MASA_band_mapping_24_to_8[8 + 1] = +{ + 0, 1, 2, 3, 5, 8, 12, 20, 24 +}; + +const int16_t MASA_band_mapping_24_to_5[5 + 1] = +{ + 0, 1, 3, 7, 15, 24 +}; + +const int16_t MASA_grouping_8_to_5[8] = +{ + 0, 1, 1, 2, 3, 3, 4, 4 +}; + +const int16_t MASA_grouping_12_to_5[12] = +{ + 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4 +}; + +const int16_t MASA_grouping_18_to_5[18] = +{ + 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4 +}; + +const int16_t MASA_grouping_24_to_5[24] = +{ + 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4 +}; + +/* IVAS_13k2, IVAS_16k4, IVAS_24k4, IVAS_32k, IVAS_48k, IVAS_64k, IVAS_80k, IVAS_96k, IVAS_128k, IVAS_160k, IVAS_192k, IVAS_256k, IVAS_384k, IVAS_512k */ +const int16_t masa_bits[IVAS_NUM_ACTIVE_BRATES] = +{ + 50, 60, 70, 85, 140, 180, 220, 256, 350, 432, 528, 832, 1024, MASA_MAX_BITS +}; + +const int16_t masa_bits_LR_stereo[4] = +{ + 50, 50, 60, 70 +}; + +const int16_t mcmasa_bits[IVAS_NUM_ACTIVE_BRATES] = +{ + 50, 70, 80, 120, 140, 160, 220, 256, 288, 432, 528, 832, 1024, MASA_MAX_BITS +}; + +const uint8_t masa_nbands[IVAS_NUM_ACTIVE_BRATES] = +{ + 5, 5, 5, 5, 5, 5, 5, 5, 8, 12, 18, 24, 24, 24 +}; + +const uint8_t masa_joined_nbands[IVAS_NUM_ACTIVE_BRATES] = +{ + 5, 5, 5, 8, 12, 12, 12, 18, 18, 18, 18, 24, 24, 24 +}; + +const uint8_t masa_twodir_bands[IVAS_NUM_ACTIVE_BRATES] = +{ + 0, 0, 0, 0, 0, 1, 1, 1, 3, 4, 6, 6, 9, 12 +}; + +const uint8_t masa_twodir_bands_joined[IVAS_NUM_ACTIVE_BRATES] = +{ + 0, 0, 0, 0, 0, 2, 2, 3, 4, 6, 8, 9, 12, 18 +}; + + +/*----------------------------------------------------------------------------------* + * Multi-channel LS setups + *----------------------------------------------------------------------------------*/ + +const float ls_azimuth_CICP2[2] = { 30.0f, -30.0f }; +const float ls_elevation_CICP2[2] = { 0.0f, 0.0f }; + +const float ls_azimuth_CICP6[5] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f }; +const float ls_elevation_CICP6[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; + +const float ls_azimuth_CICP12[7] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f, 135.0f, -135.0f }; +const float ls_elevation_CICP12[7] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; + +const float ls_azimuth_CICP14[7] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f, 30.0f, -30.0f }; +const float ls_elevation_CICP14[7] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f }; + +const float ls_azimuth_CICP16[9] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f, 30.0f, -30.0f, 110.0f, -110.0f }; +const float ls_elevation_CICP16[9] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f, 35.0f, 35.0f }; + +const float ls_azimuth_CICP19[11] = { 30.0f, -30.0f, 0.0f, 135.0f, -135.0f, 90.0f, -90.0f, 30.0f, -30.0f, 135.0f, -135.0f }; +const float ls_elevation_CICP19[11] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f, 35.0f, 35.0f }; + +const float cb_azi_chan[] = { 0.0f, 30.0f, 110.0f, 135.0f }; + +const float McMASA_LFEGain_vectors[64] = +{ + 0.38f, 0.33f, 0.19f, 0.20f, /* 1st bit */ + -0.16f, -0.22f, -0.35f, -0.34f, + 0.50f, 0.50f, 0.50f, 0.50f, /* 2nd bit*/ + -0.80f, -0.40f, 1.02f, 0.10f, + -0.50f, -0.50f, -0.50f, -0.50f, /* 3rd bit */ + -0.56f, -0.12f, -0.78f, 1.36f, + -1.02f, 1.18f, -0.57f, 0.33f, + 0.72f, -1.13f, 0.97f, -0.62f, + -0.91f, 0.93f, 1.00f, -1.10f, /* 4th bit*/ + 1.73f, -0.23f, -0.78f, -0.84f, + 0.95f, -1.60f, -0.34f, 0.93f, + 0.87f, 0.47f, -1.90f, 0.52f, + 0.67f, 1.42f, -0.97f, -1.24f, + 0.83f, 0.58f, 0.61f, -2.04f, + -0.80f, -1.58f, 0.82f, 1.42f, + -2.14f, 0.26f, 0.84f, 1.02f +}; + + +/*----------------------------------------------------------------------------------* + * ISM ROM tables + *----------------------------------------------------------------------------------*/ + +const float ism_azimuth_borders[4] = +{ + ISM_AZIMUTH_MIN, ISM_AZIMUTH_LOW_BORDER, ISM_AZIMUTH_HIGH_BORDER, ISM_AZIMUTH_MAX +}; + +const float ism_elevation_borders[4] = +{ + ISM_ELEVATION_MIN, ISM_ELEVATION_LOW_BORDER, ISM_ELEVATION_HIGH_BORDER, ISM_ELEVATION_MAX +}; + + +/*----------------------------------------------------------------------------------* + * Param ISM ROM tables + *----------------------------------------------------------------------------------*/ + +const int16_t Param_ISM_band_grouping[MAX_PARAM_ISM_NBANDS + 1] = +{ + 0, 1, 2, 3, 4, 6, 8, 11, 15, 21, 31, 60 +}; + +/*----------------------------------------------------------------------------------* + * LFE coding ROM tables + *----------------------------------------------------------------------------------*/ + +const float ivas_lfe_window_coeff_48k[IVAS_LFE_FADE_LEN_48K] = +{ + 0.000111037183489911f, 0.000184173600662723f, 0.000260431056232165f, 0.000343096680773904f, + 0.000433557036912299f, 0.000532702330090964f, 0.000641245198570983f, 0.000759825620233343f, + 0.000889053268887781f, 0.00102952705612861f, 0.00118184503626756f, 0.00134660978209878f, + 0.00152443144932643f, 0.00171592958031516f, 0.00192173418063960f, 0.00214248635511166f, + 0.00237883866481051f, 0.00263145529985620f, 0.00290101212545378f, 0.00318819663720802f, + 0.00349370784884686f, 0.00381825612758351f, 0.00416256298736225f, 0.00452736084701996f, + 0.00491339275828344f, 0.00532141210711066f, 0.00575218229092557f, 0.00620647637363723f, + 0.00668507671987614f, 0.00718877460956053f, 0.00771836983367896f, 0.00827467027201698f, + 0.00885849145344304f, 0.00947065609929077f, 0.0101119936503206f, 0.0107833397777077f, + 0.0114855358784815f, 0.0122194285558262f, 0.0129858690846493f, 0.0137857128628235f, + 0.0146198188485090f, 0.0154890489839742f, 0.0163942676063398f, 0.0173363408456805f, + 0.0183161360109349f, 0.0193345209640845f, 0.0203923634830761f, 0.0214905306139788f, + 0.0226298880128789f, 0.0238112992780310f, 0.0250356252727999f, 0.0263037234399395f, + 0.0276164471077718f, 0.0289746447888419f, 0.0303791594716384f, 0.0318308279059821f, + 0.0333304798826995f, 0.0348789375082095f, 0.0364770144746630f, 0.0381255153262869f, + 0.0398252347225964f, 0.0415769566991470f, 0.0433814539265092f, 0.0452394869681573f, + 0.0471518035379721f, 0.0491191377580651f, 0.0511422094176377f, 0.0532217232335982f, + 0.0553583681136604f, 0.0575528164226564f, 0.0598057232527990f, 0.0621177256986303f, + 0.0644894421373997f, 0.0669214715156123f, 0.0694143926424920f, 0.0719687634911028f, + 0.0745851205078720f, 0.0772639779312550f, 0.0800058271202837f, 0.0828111358937321f, + 0.0856803478806326f, 0.0886138818828696f, 0.0916121312505734f, 0.0946754632710273f, + 0.0978042185717987f, 0.100998710538792f, 0.104259224749915f, 0.107586018425039f, + 0.110979319892929f, 0.114439328075791f, 0.117966211992097f, 0.121560110278315f, + 0.125221130730162f, 0.128949349863999f, 0.132744812498936f, 0.136607531360247f, + 0.140537486704635f, 0.144534625967897f, 0.148598863435505f, 0.152730079936616f, + 0.156928122561981f, 0.161192804406232f, 0.165523904334983f, 0.169921166777162f, + 0.174384301542983f, 0.178912983667934f, 0.183506853283123f, 0.188165515512334f, + 0.192888540396077f, 0.197675462842929f, 0.202525782608415f, 0.207438964301664f, + 0.212414437420042f, 0.217451596411945f, 0.222549800767893f, 0.227708375140074f, + 0.232926609490399f, 0.238203759267182f, 0.243539045610445f, 0.248931655585895f, + 0.254380742447540f, 0.259885425928913f, 0.265444792562823f, 0.271057896029545f, + 0.276723757533309f, 0.282441366206947f, 0.288209679544493f, 0.294027623861544f, + 0.299894094783121f, 0.305807957758767f, 0.311768048604592f, 0.317773174071915f, + 0.323822112442170f, 0.329913614147682f, 0.336046402417904f, 0.342219173950673f, + 0.348430599608033f, 0.354679325136114f, 0.360963971908571f, 0.367283137693016f, + 0.373635397439901f, 0.380019304093226f, 0.386433389422488f, 0.392876164875198f, + 0.399346122449318f, 0.405841735584931f, 0.412361460074412f, 0.418903734990401f, + 0.425466983630787f, 0.432049614479962f, 0.438650022185529f, 0.445266588549660f, + 0.451897683534280f, 0.458541666279211f, 0.465196886132432f, 0.471861683691556f, + 0.478534391855649f, 0.485213336886453f, 0.491896839478123f, 0.498583215834516f, + 0.505270778753096f, 0.511957838714501f, 0.518642704976797f, 0.525323686673448f, + 0.531999093914013f, 0.538667238886587f, 0.545326436960981f, 0.551975007791651f, + 0.558611276419351f, 0.565233574370526f, 0.571840240753416f, 0.578429623349869f, + 0.585000079701846f, 0.591549978191620f, 0.598077699114643f, 0.604581635744092f, + 0.611060195386091f, 0.617511800424606f, 0.623934889355033f, 0.630327917805494f, + 0.636689359544871f, 0.643017707476609f, 0.649311474617338f, 0.655569195059378f, + 0.661789424916185f, 0.667970743249834f, 0.674111752979635f, 0.680211081770987f, + 0.686267382903617f, 0.692279336118339f, 0.698245648441503f, 0.704165054986320f, + 0.710036319730275f, 0.715858236267842f, 0.721629628537765f, 0.727349351524163f, + 0.733016291930776f, 0.738629368827644f, 0.744187534269598f, 0.749689773885909f, + 0.755135107440516f, 0.760522589362248f, 0.765851309244508f, 0.771120392313900f, + 0.776328999867319f, 0.781476329677057f, 0.786561616363500f, 0.791584131735037f, + 0.796543185094819f, 0.801438123514058f, 0.806268332071584f, 0.811033234059390f, + 0.815732291153985f, 0.820365003553343f, 0.824930910079335f, 0.829429588245527f, + 0.833860654290276f, 0.838223763175109f, 0.842518608548382f, 0.846744922674278f, + 0.850902476327233f, 0.854991078651907f, 0.859010576988885f, 0.862960856666304f, + 0.866841840757651f, 0.870653489806038f, 0.874395801515260f, 0.878068810408014f, + 0.881672587451697f, 0.885207239652212f, 0.888672909616291f, 0.892069775082842f, + 0.895398048423911f, 0.898657976115850f, 0.901849838181344f, 0.904973947602979f, + 0.908030649709079f, 0.911020321532565f, 0.913943371143645f, 0.916800236957154f, + 0.919591387015427f, 0.922317318247601f, 0.924978555706293f, 0.927575651782607f, + 0.930109185400495f, 0.932579761191496f, 0.934988008650908f, 0.937334581276497f, + 0.939620155690861f, 0.941845430748583f, 0.944011126629350f, 0.946117983918227f, + 0.948166762674299f, 0.950158241488903f, 0.952093216534711f, 0.953972500606916f, + 0.955796922157805f, 0.957567324326003f, 0.959284563961681f, 0.960949510649049f, + 0.962563045727414f, 0.964126061312150f, 0.965639459316855f, 0.967104150478033f, + 0.968521053383593f, 0.969891093506458f, 0.971215202244581f, 0.972494315968637f, + 0.973729375078655f, 0.974921323070827f, 0.976071105615721f, 0.977179669649101f, + 0.978247962476515f, 0.979276930892814f, 0.980267520317711f, 0.981220673948460f, + 0.982137331930712f, 0.983018430548546f, 0.983864901434662f, 0.984677670801652f, + 0.985457658695232f, 0.986205778270287f, 0.986922935090503f, 0.987610026452330f, + 0.988267940733967f, 0.988897556770000f, 0.989499743252276f, 0.990075358157522f, + 0.990625248202194f, 0.991150248324956f, 0.991651181197124f, 0.992128856761388f, + 0.992584071799021f, 0.993017609525750f, 0.993430239216404f, 0.993822715858368f, + 0.994195779833855f, 0.994550156630899f, 0.994886556582961f, 0.995205674636936f, + 0.995508190149341f, 0.995794766710354f, 0.996066051995373f, 0.996322677643671f, + 0.996565259163689f, 0.996794395864463f, 0.997010670812624f, 0.997214650814370f, + 0.997406886421766f, 0.997587911962687f, 0.997758245593683f, 0.997918389375006f, + 0.998068829367008f, 0.998210035747091f, 0.998342462946368f, 0.998466549805146f, + 0.998582719746365f, 0.998691380966053f, 0.998792926639904f, 0.998887735145004f, + 0.998976170295797f, 0.999058581593303f, 0.999135304486653f, 0.999206660645980f, + 0.999272958245696f, 0.999334492257230f, 0.999391544750254f, 0.999444385201492f, + 0.999493270810174f, 0.999538446819229f, 0.999580146841343f, 0.999618593188994f, + 0.999653997207632f, 0.999686559611161f, 0.999716470818948f, 0.999743911293550f, + 0.999769051878447f, 0.999792054135046f, 0.999813070678259f, 0.999832245510030f, + 0.999849714350153f, 0.999865604963813f, 0.999880037485284f, 0.999893124737258f, + 0.999904972545323f, 0.999915680047131f, 0.999925339995826f, 0.999934039057369f, + 0.999941858101379f, 0.999948872485197f, 0.999955152330868f, 0.999960762794806f, + 0.999965764329904f, 0.999970212939921f, 0.999974160425965f, 0.999977654624967f, + 0.999980739640031f, 0.999983456062595f, 0.999985841186357f, 0.999987929212949f, + 0.999989751449364f, 0.999991336497160f, 0.999992710433503f, 0.999993896984110f, + 0.999994917688186f, 0.999995792055471f, 0.999996537715509f, 0.999997170559301f, + 0.999997704873475f, 0.999998153467165f, 0.999998527791754f, 0.999998838053703f, + 0.999999093320636f, 0.999999301620911f, 0.999999470036880f, 0.999999604792064f, + 0.999999711332472f, 0.999999794402277f, 0.999999858114104f, 0.999999906014144f, + 0.999999941142332f, 0.999999966087832f, 0.999999983040042f, 0.999999993835372f +}; + +const float ivas_lfe_window_coeff_32k[IVAS_LFE_FADE_LEN_32K] = +{ + 0.000135992220705702f, 0.000243900754874608f, 0.000366502488193403f, 0.000507754555407233f, + 0.000670037413867230f, 0.000855400185342017f, 0.00106582120537505f, 0.00130328810233523f, + 0.00156982797844358f, 0.00186752014891622f, 0.00219850171292337f, 0.00256496978060437f, + 0.00296918195815542f, 0.00341345582581521f, 0.00390016777110998f, 0.00443175136707306f, + 0.00501069540002978f, 0.00563954160739932f, 0.00632088216212532f, 0.00705735692705637f, + 0.00785165049501826f, 0.00870648902594829f, 0.00962463688994814f, 0.0106088931237052f, + 0.0116620877070005f, 0.0127870776657112f, 0.0139867430076699f, 0.0152639824978695f, + 0.0166217092797368f, 0.0180628463495039f, 0.0195903218910554f, 0.0212070644790028f, + 0.0229159981581294f, 0.0247200374077382f, 0.0266220819998311f, 0.0286250117604275f, + 0.0307316812437090f, 0.0329449143290351f, 0.0352674987512187f, 0.0377021805747777f, + 0.0402516586231834f, 0.0429185788744125f, 0.0457055288343670f, 0.0486150318999676f, + 0.0516495417239329f, 0.0548114365934440f, 0.0581030138350493f, 0.0615264842582949f, + 0.0650839666506623f, 0.0687774823364692f, 0.0726089498124248f, 0.0765801794725421f, + 0.0806928684350862f, 0.0849485954841849f, 0.0893488161386407f, 0.0938948578603667f, + 0.0985879154147218f, 0.103429046394834f, 0.108419166921795f, 0.113559047532359f, + 0.118849309265507f, 0.124290419958929f, 0.129882690766145f, 0.135626272904605f, + 0.141521154644746f, 0.147567158549505f, 0.153763938973404f, 0.160110979829776f, + 0.166607592634260f, 0.173252914832108f, 0.180045908416344f, 0.186985358843200f, + 0.194069874250690f, 0.201297884985540f, 0.208667643443083f, 0.216177224224055f, + 0.223824524611575f, 0.231607265370904f, 0.239522991873889f, 0.247569075549288f, + 0.255742715659461f, 0.264040941403189f, 0.272460614343670f, 0.280998431159973f, + 0.289650926719540f, 0.298414477468569f, 0.307285305136374f, 0.316259480749104f, + 0.325332928947464f, 0.334501432602363f, 0.343760637721723f, 0.353106058640944f, + 0.362533083488876f, 0.372036979920440f, 0.381612901106401f, 0.391255891970138f, + 0.400960895660650f, 0.410722760250415f, 0.420536245646151f, 0.430396030699960f, + 0.440296720507817f, 0.450232853881834f, 0.460198910982274f, 0.470189321094825f, + 0.480198470538230f, 0.490220710686965f, 0.500250366093333f, 0.510281742692964f, + 0.520309136077485f, 0.530326839817815f, 0.540329153821353f, 0.550310392706136f, + 0.560264894174896f, 0.570187027371852f, 0.580071201204973f, 0.589911872616473f, + 0.599703554784248f, 0.609440825237056f, 0.619118333866323f, 0.628730810817558f, + 0.638273074244583f, 0.647740037909930f, 0.657126718615052f, 0.666428243444252f, + 0.675639856806586f, 0.684756927260328f, 0.693774954105018f, 0.702689573726534f, + 0.711496565681117f, 0.720191858504788f, 0.728771535235148f, 0.737231838633124f, + 0.745569176092876f, 0.753780124228688f, 0.761861433128389f, 0.769810030263551f, + 0.777623024047447f, 0.785297707032555f, 0.792831558740175f, 0.800222248115570f, + 0.807467635602894f, 0.814565774835047f, 0.821514913934526f, 0.828313496422214f, + 0.834960161732055f, 0.841453745330485f, 0.847793278440476f, 0.853977987371046f, + 0.860007292454100f, 0.865880806591466f, 0.871598333416011f, 0.877159865071782f, + 0.882565579619094f, 0.887815838071573f, 0.892911181073134f, 0.897852325223955f, + 0.902640159065461f, 0.907275738735386f, 0.911760283304927f, 0.916095169810981f, + 0.920281927997422f, 0.924322234780251f, 0.928217908452363f, 0.931970902644524f, + 0.935583300059946f, 0.939057306000627f, 0.942395241704333f, 0.945599537511766f, + 0.948672725884068f, 0.951617434291347f, 0.954436377993401f, 0.957132352734204f, + 0.959708227372067f, 0.962166936467612f, 0.964511472851888f, 0.966744880197007f, + 0.968870245611698f, 0.970890692284040f, 0.972809372193449f, 0.974629458913696f, + 0.976354140528315f, 0.977986612679290f, 0.979530071769289f, 0.980987708337022f, + 0.982362700624510f, 0.983658208354169f, 0.984877366732620f, 0.986023280697072f, + 0.987099019418999f, 0.988107611078563f, 0.989052037921982f, 0.989935231612664f, + 0.990760068885503f, 0.991529367512303f, 0.992245882584772f, 0.992912303120025f, + 0.993531248991970f, 0.994105268190439f, 0.994636834408346f, 0.995128344955654f, + 0.995582118997414f, 0.996000396111680f, 0.996385335161686f, 0.996739013475302f, + 0.997063426323498f, 0.997360486688307f, 0.997632025309661f, 0.997879790999405f, + 0.998105451209848f, 0.998310592843372f, 0.998496723288846f, 0.998665271669997f, + 0.998817590290322f, 0.998954956258775f, 0.999078573280101f, 0.999189573593561f, + 0.999289020043705f, 0.999377908266854f, 0.999457168977167f, 0.999527670336312f, + 0.999590220391194f, 0.999645569564531f, 0.999694413183629f, 0.999737394033262f, + 0.999775104919193f, 0.999808091229614f, 0.999836853482484f, 0.999861849847578f, + 0.999883498632868f, 0.999902180725714f, 0.999918241980199f, 0.999931995542854f, + 0.999943724109857f, 0.999953682109695f, 0.999962097806132f, 0.999969175317172f, + 0.999975096546511f, 0.999980023024807f, 0.999984097658787f, 0.999987446387008f, + 0.999990179741692f, 0.999992394316756f, 0.999994174142692f, 0.999995591969534f, + 0.999996710459602f, 0.999997583292189f, 0.999998256182726f, 0.999998767819300f, + 0.999999150719701f, 0.999999432012418f, 0.999999634145194f, 0.999999775524907f, + 0.999999871092647f, 0.999999932837961f, 0.999999970256211f, 0.999999990753058f +}; + +const float ivas_lfe_window_coeff_16k[IVAS_LFE_FADE_LEN_16K] = +{ + 0.000192322041967661f, 0.000432042541451336f, 0.000754275578824202f, 0.00117365342860051f, + 0.00170559736282027f, 0.00236656267363075f, 0.00317404503675108f, 0.00414654286875000f, + 0.00530350017263264f, 0.00666523498873026f, 0.00825285493787745f, 0.0100881605116261f, + 0.0121935365995684f, 0.0145918327721377f, 0.0173062329286553f, 0.0203601150332032f, + 0.0237769017796244f, 0.0275799031448139f, 0.0317921519028702f, 0.0364362332793203f, + 0.0415341100227591f, 0.0471069442593880f, 0.0531749175728265f, 0.0597570508160612f, + 0.0668710252134883f, 0.0745330063478375f, 0.0827574726486089f, 0.0915570500049407f, + 0.100942354116142f, 0.110921842167215f, 0.121501675374497f, 0.132685593888120f, + 0.144474805463665f, 0.156867889225514f, 0.169860715739713f, 0.183446384495299f, + 0.197615179761091f, 0.212354545640879f, 0.227649080995091f, 0.243480554732640f, + 0.259827941804377f, 0.276667480050824f, 0.293972747873422f, 0.311714762512102f, + 0.329862098524320f, 0.348381025873702f, 0.367235666851846f, 0.386388170876560f, + 0.405798906035553f, 0.425426666078274f, 0.445228891401677f, 0.465161902430052f, + 0.485181143655975f, 0.505241436490520f, 0.525297238967270f, 0.545302910257632f, + 0.565212977885414f, 0.584982405477527f, 0.604566858855629f, 0.623922968261127f, + 0.643008584513597f, 0.661783026930517f, 0.680207320884341f, 0.698244422941288f, + 0.715859431614468f, 0.733019781871777f, 0.749695421665815f, 0.765858968898205f, + 0.781485847393429f, 0.796554400636541f, 0.811045982224021f, 0.824945022186269f, + 0.838239068562518f, 0.850918803842860f, 0.862978036135913f, 0.874413665172658f, + 0.885225623515076f, 0.895416793600184f, 0.904992901513335f, 0.913962388646463f, + 0.922336262654064f, 0.930127929368794f, 0.937353007575688f, 0.944029128765173f, + 0.950175724185808f, 0.955813801693484f, 0.960965715039994f, 0.965654928355726f, + 0.969905778654342f, 0.973743239217655f, 0.977192686702912f, 0.980279674750013f, + 0.983029716751026f, 0.985468080278805f, 0.987619595456638f, 0.989508479289711f, + 0.991158177676277f, 0.992591226478046f, 0.993829132663272f, 0.994892276151289f, + 0.995799832594078f, 0.996569716939470f, 0.997218547242656f, 0.997761627838482f, + 0.998212950666223f, 0.998585213259802f, 0.998889851686633f, 0.999137086542491f, + 0.999335979990921f, 0.999494501774465f, 0.999619602119988f, 0.999717289508270f, + 0.999792711373630f, 0.999850235936272f, 0.999893533540622f, 0.999925656069088f, + 0.999949113214013f, 0.999965944612802f, 0.999977787074566f, 0.999985936344066f, + 0.999991403054165f, 0.999994962706365f, 0.999997199686635f, 0.999998545467760f, + 0.999999311268578f, 0.999999715534135f, 0.999999906669617f, 0.999999981506116f +}; + +const float ivas_lpf_4_butter_16k_sos[IVAS_BIQUAD_FILT_LEN << 2] = +{ + 3.97464794223146e-07f, 7.94929601777927e-07f, 3.97464788468481e-07f, 1.f, + -1.90746797905194f, 0.909956295365785f, 1.f, 1.99999996645833f, + 1.00000001447843f, 1.f, -1.95913666348268f, 0.961692382252710f +}; + +const float ivas_lpf_4_butter_32k_sos[IVAS_BIQUAD_FILT_LEN << 2] = +{ + 2.56674586654460e-08f, 5.13349181918215e-08f, 2.56674582938215e-08f, 1, + -1.95329015717623f, 0.953926661219383f, 1, 1.99999996645833f, + 1.00000001447843f, 1, -1.98000953138860f, 0.980654742275836f +}; + +const float ivas_lpf_4_butter_48k_sos[IVAS_BIQUAD_FILT_LEN << 2] = +{ + 5.12617881476274e-09f, 1.02523584294987e-08f, 5.12617879059970e-09f, + 1.0, -1.96875982668433f, 0.969044914826862f, 1.f , 1.99999984394358f, + 1.00000000471366f, 1.f , -1.98677297369091f, 0.987060670205863f +}; + +const float ivas_lpf_2_butter_16k[IVAS_BIQUAD_FILT_LEN << 1] = +{ + 0.000628720643081143f, 0.00125744128616229f, 0.000628720643081143f, 1.f, -1.92783286977036f, 0.930347752342683f +}; + +const float ivas_lpf_2_butter_32k[IVAS_BIQUAD_FILT_LEN << 1] = +{ + 0.000159990787823749f, 0.000319981575647499f, 0.000159990787823749f, 1.f, -1.96390539174033f, 0.964545354891623f +}; + +const float ivas_lpf_2_butter_48k[IVAS_BIQUAD_FILT_LEN << 1] = +{ + 7.15317998432330e-05f, 0.000143063599686466f, 7.15317998432330e-05f, 1.f, -1.97593552482925f, 0.976221652028620f +}; + +const ivas_lfe_freq_models ivas_str_lfe_freq_models = +{ + { 16384, 14924, 13463, 12003, 10542, 9082, 7622, 6161, + 4701, 4336, 3970, 3605, 3240, 2875, 2510, 2145, + 1780, 1689, 1597, 1506, 1415, 1323, 1232, 1141, + 1050, 1004, 958, 913, 867, 821, 776, 730, + 685, 639, 593, 548, 502, 456, 411, 365, + 319, 297, 274, 251, 228, 205, 183, 160, + 137, 126, 114, 103, 91, 80, 68, 57, + 46, 40, 34, 29, 23, 17, 11, 6, 0 }, + + { 16384, 13463, 10542, 7622, 4701, 3970, 3240, 2510, + 1780, 1597, 1415, 1232, 1050, 958, 867, 776, + 685, 593, 502, 411, 319, 274, 228, 183, + 137, 114, 91, 68, 46, 34, 23, 11, 0 }, + + { 16384, 4701, 1780, 1050, 685, 319, 137, 46, + 0, }, + + { 16384, 3277, 0 }, + + { 16384, 13463, 10542, 7622, 4701, 3970, 3240, 2510, + 1780, 1597, 1415, 1232, 1050, 958, 867, 776, + 685, 593, 502, 411, 319, 274, 228, 183, + 137, 114, 91, 68, 46, 34, 23, 11, + 0 }, + + { 16384, 10542, 4701, 3240, 1780, 1415, 1050, 867, + 685, 502, 319, 228, 137, 91, 46, 23, + 0 }, + + { 16384, 4468, 1489, 745, 0 }, 0, +}; + +const int16_t ivas_lfe_num_ele_in_coder_models[2][4] = +{ + { 63, 31, 7, 1 },{ 31, 15, 3, 0 } +}; + +const int16_t ivas_lfe_num_dct_pass_bins_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 8, 6 }; + +const int16_t ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 1, 0 }; + +const float ivas_lfe_lpf_delay[2] = { 0.00175f, 0.0035f }; + +const double d_hamm_lfe_plc[LFE_PLC_LENANA / 2] = +{ + 0.08000000000000002, 0.08015895227847719, 0.08063569926248770, 0.08142991147368656, 0.08254104003450596, 0.08396831704748331, 0.08571075612595230, 0.08776715307573196, + 0.09013608672734141, 0.09281591991816535, 0.09580480062389246, 0.09910066323844335, 0.10270123000150438, 0.10660401257268071, 0.11080631375118072, 0.11530522933984272, + 0.12009765015221685, 0.12518026416131367, 0.13054955878853602, 0.13620182333121073, 0.14213315152704381, 0.14833944425372619, 0.15481641236182375, 0.16155957963899570, + 0.16856428590349043, 0.17582569022478273, 0.18333877426912554, 0.19109834576770490, 0.19909904210500018, 0.20733533402487142, 0.21580152945181053, 0.22449177742471671, + 0.23340007214047787, 0.24252025710456171, 0.25184602938575001, 0.26137094397207467, 0.27108841822494550, 0.28099173642839037, 0.29107405443026624, 0.30132840437223085, + 0.31174769950520753, 0.32232473908701620, 0.33305221335878232, 0.34392270859668939, 0.35492871223557998, 0.36606261806086549, 0.37731673146515798, 0.38868327476598852, + 0.40015439258093899, 0.41172215725647360, 0.42337857434671339, 0.43511558813837425, 0.44692508721804453, 0.45879891007795709, 0.47072885075638249, 0.48270666450874267, + 0.49472407350552849, 0.50677277255308162, 0.51884443483328757, 0.53093071765821398, 0.54302326823571601, 0.55511372944202464, 0.56719374559732838, 0.57925496824035816, + 0.59128906189798180, 0.60328770984582458, 0.61524261985593010, 0.62714552992749328, 0.63898821399670414, 0.65076248762175315, 0.66246021363907504, 0.67407330778691554, + 0.68559374429233988, 0.69701356141781945, 0.70832486696356345, 0.71951984372179334, 0.73059075487919101, 0.74152994936378558, 0.75232986713258543, 0.76298304439630038, + 0.77348211877754336, 0.78381983439894576, 0.79398904689767136, 0.80398272836286389, 0.81379397219261318, 0.82341599786708708, 0.83284215563452701, 0.84206593110687011, + 0.85108094976182280, 0.85988098134827329, 0.86845994419199846, 0.87681190939868969, 0.88493110495139349, 0.89281191969953333, 0.90044890723675941, 0.90783678966494241, + 0.91497046124171255, 0.92184499190902180, 0.92845563070029180, 0.93479780902379184, 0.94086714381997805, 0.94665944059061280, 0.95217069629756890, 0.95739710212931617, + 0.96233504613317988, 0.96698111571154954, 0.97133209998031445, 0.97538499198789563, 0.97913699079334116, 0.98258550340204664, 0.98572814655776630, 0.98856274838967395, + 0.99108734991333569, 0.99330020638455863, 0.99519978850517732, 0.99678478347994692, 0.99805409592381300, 0.99900684861892730, 0.99964238312089115, 0.99996026021380402 +}; + + +/*------------------------------------------------------------------------------------------* + * MDFT/iMDFT ROM tables + *------------------------------------------------------------------------------------------*/ + +const float ivas_mdft_coeff_cos_twid_960[IVAS_960_PT_LEN + 1] = +{ + 1.00000000000000f, 0.999998661349528f, 0.999994645401697f, 0.999987952167257f, + 0.999978581664129f, 0.999966533917401f, 0.999951808959328f, 0.999934406829333f, + 0.999914327574007f, 0.999891571247108f, 0.999866137909562f, 0.999838027629461f, + 0.999807240482065f, 0.999773776549800f, 0.999737635922260f, 0.999698818696204f, + 0.999657324975557f, 0.999613154871411f, 0.999566308502021f, 0.999516785992811f, + 0.999464587476366f, 0.999409713092437f, 0.999352162987941f, 0.999291937316955f, + 0.999229036240723f, 0.999163459927649f, 0.999095208553300f, 0.999024282300407f, + 0.998950681358860f, 0.998874405925711f, 0.998795456205172f, 0.998713832408616f, + 0.998629534754574f, 0.998542563468736f, 0.998452918783950f, 0.998360600940223f, + 0.998265610184716f, 0.998167946771749f, 0.998067610962796f, 0.997964603026487f, + 0.997858923238604f, 0.997750571882084f, 0.997639549247016f, 0.997525855630641f, + 0.997409491337352f, 0.997290456678690f, 0.997168751973348f, 0.997044377547164f, + 0.996917333733128f, 0.996787620871373f, 0.996655239309180f, 0.996520189400975f, + 0.996382471508325f, 0.996242085999945f, 0.996099033251687f, 0.995953313646548f, + 0.995804927574662f, 0.995653875433303f, 0.995500157626885f, 0.995343774566954f, + 0.995184726672197f, 0.995023014368432f, 0.994858638088611f, 0.994691598272820f, + 0.994521895368273f, 0.994349529829318f, 0.994174502117428f, 0.993996812701206f, + 0.993816462056378f, 0.993633450665799f, 0.993447779019444f, 0.993259447614414f, + 0.993068456954926f, 0.992874807552322f, 0.992678499925058f, 0.992479534598710f, + 0.992277912105967f, 0.992073632986633f, 0.991866697787626f, 0.991657107062973f, + 0.991444861373810f, 0.991229961288385f, 0.991012407382049f, 0.990792200237260f, + 0.990569340443577f, 0.990343828597665f, 0.990115665303286f, 0.989884851171301f, + 0.989651386819670f, 0.989415272873448f, 0.989176509964781f, 0.988935098732911f, + 0.988691039824167f, 0.988444333891970f, 0.988194981596825f, 0.987942983606322f, + 0.987688340595138f, 0.987431053245027f, 0.987171122244825f, 0.986908548290446f, + 0.986643332084879f, 0.986375474338188f, 0.986104975767509f, 0.985831837097047f, + 0.985556059058078f, 0.985277642388941f, 0.984996587835043f, 0.984712896148850f, + 0.984426568089892f, 0.984137604424753f, 0.983846005927077f, 0.983551773377562f, + 0.983254907563955f, 0.982955409281056f, 0.982653279330712f, 0.982348518521816f, + 0.982041127670304f, 0.981731107599154f, 0.981418459138384f, 0.981103183125046f, + 0.980785280403230f, 0.980464751824058f, 0.980141598245680f, 0.979815820533276f, + 0.979487419559051f, 0.979156396202234f, 0.978822751349072f, 0.978486485892835f, + 0.978147600733806f, 0.977806096779282f, 0.977461974943572f, 0.977115236147994f, + 0.976765881320872f, 0.976413911397535f, 0.976059327320311f, 0.975702130038529f, + 0.975342320508513f, 0.974979899693582f, 0.974614868564045f, 0.974247228097201f, + 0.973876979277334f, 0.973504123095711f, 0.973128660550580f, 0.972750592647168f, + 0.972369920397677f, 0.971986644821279f, 0.971600766944121f, 0.971212287799312f, + 0.970821208426928f, 0.970427529874007f, 0.970031253194544f, 0.969632379449492f, + 0.969230909706754f, 0.968826845041188f, 0.968420186534595f, 0.968010935275723f, + 0.967599092360260f, 0.967184658890834f, 0.966767635977008f, 0.966348024735277f, + 0.965925826289068f, 0.965501041768733f, 0.965073672311547f, 0.964643719061708f, + 0.964211183170329f, 0.963776065795440f, 0.963338368101980f, 0.962898091261798f, + 0.962455236453647f, 0.962009804863184f, 0.961561797682962f, 0.961111216112432f, + 0.960658061357935f, 0.960202334632705f, 0.959744037156857f, 0.959283170157394f, + 0.958819734868193f, 0.958353732530011f, 0.957885164390477f, 0.957414031704088f, + 0.956940335732209f, 0.956464077743065f, 0.955985259011744f, 0.955503880820186f, + 0.955019944457187f, 0.954533451218389f, 0.954044402406280f, 0.953552799330194f, + 0.953058643306297f, 0.952561935657595f, 0.952062677713924f, 0.951560870811948f, + 0.951056516295154f, 0.950549615513851f, 0.950040169825165f, 0.949528180593037f, + 0.949013649188214f, 0.948496576988253f, 0.947976965377510f, 0.947454815747144f, + 0.946930129495106f, 0.946402908026138f, 0.945873152751771f, 0.945340865090320f, + 0.944806046466878f, 0.944268698313317f, 0.943728822068278f, 0.943186419177173f, + 0.942641491092178f, 0.942094039272230f, 0.941544065183021f, 0.940991570296997f, + 0.940436556093355f, 0.939879024058033f, 0.939318975683713f, 0.938756412469813f, + 0.938191335922484f, 0.937623747554606f, 0.937053648885784f, 0.936481041442343f, + 0.935905926757326f, 0.935328306370488f, 0.934748181828292f, 0.934165554683908f, + 0.933580426497202f, 0.932992798834739f, 0.932402673269775f, 0.931810051382254f, + 0.931214934758804f, 0.930617324992729f, 0.930017223684012f, 0.929414632439304f, + 0.928809552871924f, 0.928201986601852f, 0.927591935255724f, 0.926979400466833f, + 0.926364383875118f, 0.925746887127164f, 0.925126911876195f, 0.924504459782072f, + 0.923879532511287f, 0.923252131736957f, 0.922622259138823f, 0.921989916403245f, + 0.921355105223193f, 0.920717827298248f, 0.920078084334595f, 0.919435878045019f, + 0.918791210148898f, 0.918144082372204f, 0.917494496447491f, 0.916842454113897f, + 0.916187957117136f, 0.915531007209492f, 0.914871606149819f, 0.914209755703531f, + 0.913545457642601f, 0.912878713745555f, 0.912209525797468f, 0.911537895589956f, + 0.910863824921176f, 0.910187315595818f, 0.909508369425101f, 0.908826988226768f, + 0.908143173825081f, 0.907456928050819f, 0.906768252741266f, 0.906077149740215f, + 0.905383620897955f, 0.904687668071273f, 0.903989293123443f, 0.903288497924226f, + 0.902585284349861f, 0.901879654283062f, 0.901171609613013f, 0.900461152235364f, + 0.899748284052222f, 0.899033006972149f, 0.898315322910159f, 0.897595233787707f, + 0.896872741532688f, 0.896147848079432f, 0.895420555368697f, 0.894690865347664f, + 0.893958779969932f, 0.893224301195515f, 0.892487430990834f, 0.891748171328711f, + 0.891006524188368f, 0.890262491555416f, 0.889516075421856f, 0.888767277786068f, + 0.888016100652807f, 0.887262546033203f, 0.886506615944746f, 0.885748312411291f, + 0.884987637463042f, 0.884224593136556f, 0.883459181474733f, 0.882691404526809f, + 0.881921264348355f, 0.881148763001268f, 0.880373902553765f, 0.879596685080383f, + 0.878817112661965f, 0.878035187385663f, 0.877250911344924f, 0.876464286639493f, + 0.875675315375400f, 0.874883999664958f, 0.874090341626759f, 0.873294343385663f, + 0.872496007072797f, 0.871695334825548f, 0.870892328787557f, 0.870086991108712f, + 0.869279323945144f, 0.868469329459222f, 0.867657009819544f, 0.866842367200935f, + 0.866025403784439f, 0.865206121757311f, 0.864384523313017f, 0.863560610651224f, + 0.862734385977792f, 0.861905851504774f, 0.861075009450407f, 0.860241862039105f, + 0.859406411501453f, 0.858568660074204f, 0.857728610000272f, 0.856886263528723f, + 0.856041622914771f, 0.855194690419775f, 0.854345468311227f, 0.853493958862751f, + 0.852640164354092f, 0.851784087071117f, 0.850925729305802f, 0.850065093356229f, + 0.849202181526579f, 0.848336996127127f, 0.847469539474235f, 0.846599813890344f, + 0.845727821703973f, 0.844853565249707f, 0.843977046868193f, 0.843098268906136f, + 0.842217233716287f, 0.841333943657443f, 0.840448401094438f, 0.839560608398136f, + 0.838670567945424f, 0.837778282119209f, 0.836883753308409f, 0.835986983907947f, + 0.835087976318743f, 0.834186732947712f, 0.833283256207754f, 0.832377548517748f, + 0.831469612302545f, 0.830559449992965f, 0.829647064025785f, 0.828732456843738f, + 0.827815630895502f, 0.826896588635696f, 0.825975332524873f, 0.825051865029513f, + 0.824126188622016f, 0.823198305780696f, 0.822268218989775f, 0.821335930739376f, + 0.820401443525514f, 0.819464759850093f, 0.818525882220897f, 0.817584813151584f, + 0.816641555161679f, 0.815696110776568f, 0.814748482527489f, 0.813798672951530f, + 0.812846684591615f, 0.811892519996505f, 0.810936181720784f, 0.809977672324859f, + 0.809016994374948f, 0.808054150443073f, 0.807089143107059f, 0.806121974950521f, + 0.805152648562858f, 0.804181166539250f, 0.803207531480645f, 0.802231745993758f, + 0.801253812691061f, 0.800273734190774f, 0.799291513116864f, 0.798307152099032f, + 0.797320653772707f, 0.796332020779044f, 0.795341255764910f, 0.794348361382882f, + 0.793353340291235f, 0.792356195153942f, 0.791356928640660f, 0.790355543426726f, + 0.789352042193150f, 0.788346427626606f, 0.787338702419428f, 0.786328869269598f, + 0.785316930880745f, 0.784302889962131f, 0.783286749228650f, 0.782268511400816f, + 0.781248179204759f, 0.780225755372213f, 0.779201242640517f, 0.778174643752598f, + 0.777145961456971f, 0.776115198507728f, 0.775082357664531f, 0.774047441692607f, + 0.773010453362737f, 0.771971395451250f, 0.770930270740018f, 0.769887082016445f, + 0.768841832073460f, 0.767794523709512f, 0.766745159728562f, 0.765693742940071f, + 0.764640276159000f, 0.763584762205796f, 0.762527203906388f, 0.761467604092177f, + 0.760405965600031f, 0.759342291272276f, 0.758276583956687f, 0.757208846506485f, + 0.756139081780323f, 0.755067292642284f, 0.753993481961869f, 0.752917652613995f, + 0.751839807478977f, 0.750759949442534f, 0.749678081395770f, 0.748594206235171f, + 0.747508326862597f, 0.746420446185274f, 0.745330567115786f, 0.744238692572067f, + 0.743144825477394f, 0.742048968760379f, 0.740951125354959f, 0.739851298200392f, + 0.738749490241246f, 0.737645704427393f, 0.736539943713999f, 0.735432211061519f, + 0.734322509435686f, 0.733210841807505f, 0.732097211153246f, 0.730981620454432f, + 0.729864072697836f, 0.728744570875469f, 0.727623117984575f, 0.726499717027620f, + 0.725374371012288f, 0.724247082951467f, 0.723117855863248f, 0.721986692770910f, + 0.720853596702919f, 0.719718570692913f, 0.718581617779698f, 0.717442741007240f, + 0.716301943424654f, 0.715159228086199f, 0.714014598051268f, 0.712868056384380f, + 0.711719606155171f, 0.710569250438390f, 0.709416992313883f, 0.708262834866593f, + 0.707106781186548f, 0.705948834368849f, 0.704788997513670f, 0.703627273726243f, + 0.702463666116852f, 0.701298177800824f, 0.700130811898524f, 0.698961571535339f, + 0.697790459841680f, 0.696617479952964f, 0.695442635009612f, 0.694265928157036f, + 0.693087362545636f, 0.691906941330786f, 0.690724667672829f, 0.689540544737067f, + 0.688354575693754f, 0.687166763718086f, 0.685977111990193f, 0.684785623695130f, + 0.683592302022871f, 0.682397150168297f, 0.681200171331188f, 0.680001368716218f, + 0.678800745532942f, 0.677598304995789f, 0.676394050324054f, 0.675187984741891f, + 0.673980111478298f, 0.672770433767117f, 0.671558954847018f, 0.670345677961497f, + 0.669130606358858f, 0.667913743292216f, 0.666695092019479f, 0.665474655803342f, + 0.664252437911282f, 0.663028441615542f, 0.661802670193130f, 0.660575126925805f, + 0.659345815100069f, 0.658114738007160f, 0.656881898943041f, 0.655647301208395f, + 0.654410948108610f, 0.653172842953777f, 0.651932989058674f, 0.650691389742765f, + 0.649448048330184f, 0.648202968149730f, 0.646956152534857f, 0.645707604823667f, + 0.644457328358897f, 0.643205326487914f, 0.641951602562703f, 0.640696159939861f, + 0.639439001980585f, 0.638180132050665f, 0.636919553520476f, 0.635657269764965f, + 0.634393284163646f, 0.633127600100588f, 0.631860220964409f, 0.630591150148264f, + 0.629320391049838f, 0.628047947071334f, 0.626773821619470f, 0.625498018105461f, + 0.624220539945018f, 0.622941390558334f, 0.621660573370077f, 0.620378091809381f, + 0.619093949309834f, 0.617808149309472f, 0.616520695250769f, 0.615231590580627f, + 0.613940838750366f, 0.612648443215719f, 0.611354407436817f, 0.610058734878182f, + 0.608761429008721f, 0.607462493301711f, 0.606161931234795f, 0.604859746289968f, + 0.603555941953571f, 0.602250521716282f, 0.600943489073102f, 0.599634847523352f, + 0.598324600570659f, 0.597012751722948f, 0.595699304492433f, 0.594384262395609f, + 0.593067628953237f, 0.591749407690343f, 0.590429602136201f, 0.589108215824328f, + 0.587785252292473f, 0.586460715082607f, 0.585134607740916f, 0.583806933817786f, + 0.582477696867802f, 0.581146900449730f, 0.579814548126514f, 0.578480643465260f, + 0.577145190037234f, 0.575808191417845f, 0.574469651186643f, 0.573129572927301f, + 0.571787960227612f, 0.570444816679478f, 0.569100145878898f, 0.567753951425961f, + 0.566406236924833f, 0.565057005983753f, 0.563706262215017f, 0.562354009234973f, + 0.561000250664010f, 0.559644990126546f, 0.558288231251022f, 0.556929977669890f, + 0.555570233019602f, 0.554209000940606f, 0.552846285077328f, 0.551482089078169f, + 0.550116416595494f, 0.548749271285616f, 0.547380656808797f, 0.546010576829228f, + 0.544639035015027f, 0.543266035038224f, 0.541891580574752f, 0.540515675304440f, + 0.539138322911000f, 0.537759527082020f, 0.536379291508950f, 0.534997619887097f, + 0.533614515915612f, 0.532229983297479f, 0.530844025739510f, 0.529456646952329f, + 0.528067850650368f, 0.526677640551852f, 0.525286020378792f, 0.523892993856974f, + 0.522498564715949f, 0.521102736689023f, 0.519705513513249f, 0.518306898929413f, + 0.516906896682028f, 0.515505510519320f, 0.514102744193222f, 0.512698601459362f, + 0.511293086077052f, 0.509886201809281f, 0.508477952422700f, 0.507068341687617f, + 0.505657373377985f, 0.504245051271389f, 0.502831379149042f, 0.501416360795769f, + 0.500000000000000f, 0.498582300553759f, 0.497163266252654f, 0.495742900895868f, + 0.494321208286145f, 0.492898192229784f, 0.491473856536628f, 0.490048205020053f, + 0.488621241496955f, 0.487192969787746f, 0.485763393716340f, 0.484332517110141f, + 0.482900343800037f, 0.481466877620387f, 0.480032122409011f, 0.478596082007181f, + 0.477158760259609f, 0.475720161014437f, 0.474280288123229f, 0.472839145440959f, + 0.471396736825998f, 0.469953066140108f, 0.468508137248432f, 0.467061954019477f, + 0.465614520325111f, 0.464165840040552f, 0.462715917044350f, 0.461264755218387f, + 0.459812358447860f, 0.458358730621271f, 0.456903875630421f, 0.455447797370393f, + 0.453990499739547f, 0.452531986639508f, 0.451072261975153f, 0.449611329654607f, + 0.448149193589223f, 0.446685857693580f, 0.445221325885468f, 0.443755602085881f, + 0.442288690219001f, 0.440820594212194f, 0.439351317995994f, 0.437880865504095f, + 0.436409240673342f, 0.434936447443717f, 0.433462489758331f, 0.431987371563412f, + 0.430511096808295f, 0.429033669445413f, 0.427555093430282f, 0.426075372721496f, + 0.424594511280713f, 0.423112513072644f, 0.421629382065045f, 0.420145122228703f, + 0.418659737537428f, 0.417173231968043f, 0.415685609500371f, 0.414196874117224f, + 0.412707029804395f, 0.411216080550645f, 0.409724030347695f, 0.408230883190212f, + 0.406736643075800f, 0.405241314004990f, 0.403744899981227f, 0.402247405010863f, + 0.400748833103141f, 0.399249188270190f, 0.397748474527011f, 0.396246695891466f, + 0.394743856384267f, 0.393239960028970f, 0.391735010851956f, 0.390229012882428f, + 0.388721970152396f, 0.387213886696666f, 0.385704766552831f, 0.384194613761262f, + 0.382683432365090f, 0.381171226410203f, 0.379657999945233f, 0.378143757021541f, + 0.376628501693211f, 0.375112238017038f, 0.373594970052516f, 0.372076701861829f, + 0.370557437509836f, 0.369037181064067f, 0.367515936594704f, 0.365993708174577f, + 0.364470499879150f, 0.362946315786509f, 0.361421159977355f, 0.359895036534988f, + 0.358367949545300f, 0.356839903096763f, 0.355310901280416f, 0.353780948189858f, + 0.352250047921234f, 0.350718204573223f, 0.349185422247033f, 0.347651705046382f, + 0.346117057077493f, 0.344581482449081f, 0.343044985272340f, 0.341507569660936f, + 0.339969239730994f, 0.338429999601086f, 0.336889853392220f, 0.335348805227832f, + 0.333806859233771f, 0.332264019538291f, 0.330720290272038f, 0.329175675568039f, + 0.327630179561693f, 0.326083806390759f, 0.324536560195342f, 0.322988445117886f, + 0.321439465303162f, 0.319889624898253f, 0.318338928052550f, 0.316787378917734f, + 0.315234981647770f, 0.313681740398892f, 0.312127659329594f, 0.310572742600619f, + 0.309016994374947f, 0.307460418817785f, 0.305903020096554f, 0.304344802380877f, + 0.302785769842575f, 0.301225926655645f, 0.299665276996257f, 0.298103825042740f, + 0.296541574975571f, 0.294978530977364f, 0.293414697232857f, 0.291850077928904f, + 0.290284677254463f, 0.288718499400580f, 0.287151548560387f, 0.285583828929082f, + 0.284015344703923f, 0.282446100084212f, 0.280876099271292f, 0.279305346468526f, + 0.277733845881292f, 0.276161601716971f, 0.274588618184932f, 0.273014899496527f, + 0.271440449865074f, 0.269865273505849f, 0.268289374636071f, 0.266712757474899f, + 0.265135426243408f, 0.263557385164591f, 0.261978638463337f, 0.260399190366428f, + 0.258819045102521f, 0.257238206902140f, 0.255656679997665f, 0.254074468623318f, + 0.252491577015158f, 0.250908009411060f, 0.249323770050712f, 0.247738863175598f, + 0.246153293028993f, 0.244567063855944f, 0.242980179903264f, 0.241392645419519f, + 0.239804464655017f, 0.238215641861795f, 0.236626181293610f, 0.235036087205927f, + 0.233445363855905f, 0.231854015502391f, 0.230262046405902f, 0.228669460828619f, + 0.227076263034373f, 0.225482457288634f, 0.223888047858498f, 0.222293039012681f, + 0.220697435021501f, 0.219101240156870f, 0.217504458692281f, 0.215907094902801f, + 0.214309153065051f, 0.212710637457203f, 0.211111552358965f, 0.209511902051569f, + 0.207911690817759f, 0.206310922941784f, 0.204709602709380f, 0.203107734407763f, + 0.201505322325617f, 0.199902370753082f, 0.198298883981741f, 0.196694866304610f, + 0.195090322016128f, 0.193485255412143f, 0.191879670789901f, 0.190273572448036f, + 0.188666964686555f, 0.187059851806832f, 0.185452238111591f, 0.183844127904898f, + 0.182235525492147f, 0.180626435180053f, 0.179016861276633f, 0.177406808091201f, + 0.175796279934354f, 0.174185281117962f, 0.172573815955152f, 0.170961888760301f, + 0.169349503849025f, 0.167736665538162f, 0.166123378145765f, 0.164509645991092f, + 0.162895473394589f, 0.161280864677881f, 0.159665824163761f, 0.158050356176180f, + 0.156434465040231f, 0.154818155082141f, 0.153201430629259f, 0.151584296010041f, + 0.149966755554045f, 0.148348813591913f, 0.146730474455362f, 0.145111742477173f, + 0.143492621991180f, 0.141873117332253f, 0.140253232836296f, 0.138632972840227f, + 0.137012341681968f, 0.135391343700438f, 0.133769983235535f, 0.132148264628130f, + 0.130526192220052f, 0.128903770354076f, 0.127281003373913f, 0.125657895624201f, + 0.124034451450485f, 0.122410675199216f, 0.120786571217731f, 0.119162143854244f, + 0.117537397457838f, 0.115912336378446f, 0.114286964966846f, 0.112661287574648f, + 0.111035308554278f, 0.109409032258971f, 0.107782463042760f, 0.106155605260457f, + 0.104528463267653f, 0.102901041420696f, 0.101273344076683f, 0.0996453755934510f, + 0.0980171403295608f, 0.0963886426442880f, 0.0947598868976111f, 0.0931308774501999f, + 0.0915016186634025f, 0.0898721148992351f, 0.0882423705203694f, 0.0866123898901223f, + 0.0849821773724418f, 0.0833517373318973f, 0.0817210741336683f, 0.0800901921435302f, + 0.0784590957278450f, 0.0768277892535488f, 0.0751962770881400f, 0.0735645635996675f, + 0.0719326531567196f, 0.0703005501284112f, 0.0686682588843738f, 0.0670357837947423f, + 0.0654031292301431f, 0.0637702995616845f, 0.0621372991609429f, 0.0605041323999515f, + 0.0588708036511890f, 0.0572373172875686f, 0.0556036776824248f, 0.0539698892095020f, + 0.0523359562429437f, 0.0507018831572809f, 0.0490676743274181f, 0.0474333341286244f, + 0.0457988669365209f, 0.0441642771270675f, 0.0425295690765532f, 0.0408947471615835f, + 0.0392598157590687f, 0.0376247792462120f, 0.0359896420004986f, 0.0343544083996823f, + 0.0327190828217762f, 0.0310836696450389f, 0.0294481732479632f, 0.0278125980092656f, + 0.0261769483078731f, 0.0245412285229125f, 0.0229054430336971f, 0.0212695962197177f, + 0.0196336924606285f, 0.0179977361362357f, 0.0163617316264867f, 0.0147256833114587f, + 0.0130895955713446f, 0.0114534727864437f, 0.00981731933714973f, 0.00818113960393724f, + 0.00654493796735196f, 0.00490871880799808f, 0.00327248650652671f, 0.00163624544362412f, + 0.00000000000000000f +}; + +const float ivas_mdft_coeff_sin_twid_960[IVAS_960_PT_LEN] = +{ + 0.00000000000000f, 0.00163624544362405f, 0.00327248650652663f, 0.00490871880799799f, + 0.00654493796735186f, 0.00818113960393713f, 0.00981731933714962f, 0.0114534727864438f, + 0.0130895955713444f, 0.0147256833114585f, 0.0163617316264868f, 0.0179977361362355f, + 0.0196336924606283f, 0.0212695962197177f, 0.0229054430336971f, 0.0245412285229123f, + 0.0261769483078732f, 0.0278125980092656f, 0.0294481732479632f, 0.0310836696450387f, + 0.0327190828217761f, 0.0343544083996823f, 0.0359896420004984f, 0.0376247792462120f, + 0.0392598157590686f, 0.0408947471615835f, 0.0425295690765531f, 0.0441642771270674f, + 0.0457988669365208f, 0.0474333341286245f, 0.0490676743274180f, 0.0507018831572807f, + 0.0523359562429438f, 0.0539698892095019f, 0.0556036776824246f, 0.0572373172875686f, + 0.0588708036511890f, 0.0605041323999513f, 0.0621372991609427f, 0.0637702995616845f, + 0.0654031292301431f, 0.0670357837947420f, 0.0686682588843738f, 0.0703005501284112f, + 0.0719326531567194f, 0.0735645635996674f, 0.0751962770881399f, 0.0768277892535488f, + 0.0784590957278449f, 0.0800901921435301f, 0.0817210741336682f, 0.0833517373318975f, + 0.0849821773724417f, 0.0866123898901222f, 0.0882423705203695f, 0.0898721148992350f, + 0.0915016186634024f, 0.0931308774501998f, 0.0947598868976111f, 0.0963886426442878f, + 0.0980171403295606f, 0.0996453755934511f, 0.101273344076683f, 0.102901041420696f, + 0.104528463267653f, 0.106155605260457f, 0.107782463042759f, 0.109409032258971f, + 0.111035308554278f, 0.112661287574648f, 0.114286964966846f, 0.115912336378446f, + 0.117537397457838f, 0.119162143854244f, 0.120786571217731f, 0.122410675199216f, + 0.124034451450485f, 0.125657895624201f, 0.127281003373913f, 0.128903770354075f, + 0.130526192220052f, 0.132148264628130f, 0.133769983235535f, 0.135391343700438f, + 0.137012341681968f, 0.138632972840227f, 0.140253232836296f, 0.141873117332253f, + 0.143492621991179f, 0.145111742477173f, 0.146730474455362f, 0.148348813591913f, + 0.149966755554045f, 0.151584296010041f, 0.153201430629258f, 0.154818155082141f, + 0.156434465040231f, 0.158050356176180f, 0.159665824163761f, 0.161280864677880f, + 0.162895473394589f, 0.164509645991092f, 0.166123378145765f, 0.167736665538162f, + 0.169349503849025f, 0.170961888760301f, 0.172573815955152f, 0.174185281117962f, + 0.175796279934355f, 0.177406808091201f, 0.179016861276633f, 0.180626435180053f, + 0.182235525492147f, 0.183844127904898f, 0.185452238111591f, 0.187059851806832f, + 0.188666964686555f, 0.190273572448036f, 0.191879670789901f, 0.193485255412143f, + 0.195090322016128f, 0.196694866304610f, 0.198298883981740f, 0.199902370753082f, + 0.201505322325617f, 0.203107734407763f, 0.204709602709380f, 0.206310922941784f, + 0.207911690817759f, 0.209511902051569f, 0.211111552358965f, 0.212710637457203f, + 0.214309153065051f, 0.215907094902801f, 0.217504458692281f, 0.219101240156870f, + 0.220697435021501f, 0.222293039012681f, 0.223888047858498f, 0.225482457288634f, + 0.227076263034373f, 0.228669460828619f, 0.230262046405902f, 0.231854015502391f, + 0.233445363855905f, 0.235036087205927f, 0.236626181293610f, 0.238215641861795f, + 0.239804464655017f, 0.241392645419519f, 0.242980179903264f, 0.244567063855944f, + 0.246153293028993f, 0.247738863175598f, 0.249323770050712f, 0.250908009411060f, + 0.252491577015158f, 0.254074468623319f, 0.255656679997664f, 0.257238206902140f, + 0.258819045102521f, 0.260399190366428f, 0.261978638463337f, 0.263557385164591f, + 0.265135426243408f, 0.266712757474898f, 0.268289374636071f, 0.269865273505849f, + 0.271440449865074f, 0.273014899496527f, 0.274588618184932f, 0.276161601716971f, + 0.277733845881292f, 0.279305346468526f, 0.280876099271292f, 0.282446100084212f, + 0.284015344703923f, 0.285583828929082f, 0.287151548560387f, 0.288718499400580f, + 0.290284677254462f, 0.291850077928904f, 0.293414697232857f, 0.294978530977364f, + 0.296541574975571f, 0.298103825042740f, 0.299665276996257f, 0.301225926655644f, + 0.302785769842575f, 0.304344802380877f, 0.305903020096553f, 0.307460418817785f, + 0.309016994374947f, 0.310572742600619f, 0.312127659329594f, 0.313681740398891f, + 0.315234981647770f, 0.316787378917734f, 0.318338928052550f, 0.319889624898253f, + 0.321439465303162f, 0.322988445117886f, 0.324536560195342f, 0.326083806390759f, + 0.327630179561694f, 0.329175675568039f, 0.330720290272037f, 0.332264019538291f, + 0.333806859233771f, 0.335348805227832f, 0.336889853392220f, 0.338429999601086f, + 0.339969239730994f, 0.341507569660936f, 0.343044985272340f, 0.344581482449080f, + 0.346117057077493f, 0.347651705046382f, 0.349185422247033f, 0.350718204573223f, + 0.352250047921234f, 0.353780948189858f, 0.355310901280416f, 0.356839903096763f, + 0.358367949545300f, 0.359895036534988f, 0.361421159977355f, 0.362946315786509f, + 0.364470499879150f, 0.365993708174577f, 0.367515936594704f, 0.369037181064066f, + 0.370557437509836f, 0.372076701861829f, 0.373594970052516f, 0.375112238017038f, + 0.376628501693211f, 0.378143757021540f, 0.379657999945233f, 0.381171226410203f, + 0.382683432365090f, 0.384194613761262f, 0.385704766552831f, 0.387213886696666f, + 0.388721970152396f, 0.390229012882428f, 0.391735010851956f, 0.393239960028970f, + 0.394743856384267f, 0.396246695891466f, 0.397748474527011f, 0.399249188270190f, + 0.400748833103141f, 0.402247405010863f, 0.403744899981227f, 0.405241314004990f, + 0.406736643075800f, 0.408230883190212f, 0.409724030347695f, 0.411216080550645f, + 0.412707029804395f, 0.414196874117224f, 0.415685609500371f, 0.417173231968043f, + 0.418659737537428f, 0.420145122228702f, 0.421629382065045f, 0.423112513072644f, + 0.424594511280713f, 0.426075372721496f, 0.427555093430282f, 0.429033669445413f, + 0.430511096808295f, 0.431987371563412f, 0.433462489758331f, 0.434936447443717f, + 0.436409240673342f, 0.437880865504095f, 0.439351317995994f, 0.440820594212194f, + 0.442288690219001f, 0.443755602085881f, 0.445221325885468f, 0.446685857693580f, + 0.448149193589223f, 0.449611329654607f, 0.451072261975153f, 0.452531986639508f, + 0.453990499739547f, 0.455447797370393f, 0.456903875630421f, 0.458358730621271f, + 0.459812358447860f, 0.461264755218387f, 0.462715917044350f, 0.464165840040552f, + 0.465614520325111f, 0.467061954019477f, 0.468508137248431f, 0.469953066140108f, + 0.471396736825998f, 0.472839145440959f, 0.474280288123229f, 0.475720161014437f, + 0.477158760259608f, 0.478596082007181f, 0.480032122409011f, 0.481466877620387f, + 0.482900343800037f, 0.484332517110141f, 0.485763393716340f, 0.487192969787746f, + 0.488621241496955f, 0.490048205020053f, 0.491473856536628f, 0.492898192229784f, + 0.494321208286145f, 0.495742900895868f, 0.497163266252654f, 0.498582300553759f, + 0.500000000000000f, 0.501416360795769f, 0.502831379149042f, 0.504245051271389f, + 0.505657373377985f, 0.507068341687617f, 0.508477952422700f, 0.509886201809281f, + 0.511293086077052f, 0.512698601459362f, 0.514102744193222f, 0.515505510519320f, + 0.516906896682028f, 0.518306898929413f, 0.519705513513249f, 0.521102736689023f, + 0.522498564715949f, 0.523892993856974f, 0.525286020378792f, 0.526677640551852f, + 0.528067850650368f, 0.529456646952329f, 0.530844025739509f, 0.532229983297479f, + 0.533614515915612f, 0.534997619887097f, 0.536379291508950f, 0.537759527082020f, + 0.539138322911000f, 0.540515675304440f, 0.541891580574752f, 0.543266035038224f, + 0.544639035015027f, 0.546010576829228f, 0.547380656808797f, 0.548749271285616f, + 0.550116416595493f, 0.551482089078169f, 0.552846285077328f, 0.554209000940606f, + 0.555570233019602f, 0.556929977669889f, 0.558288231251022f, 0.559644990126546f, + 0.561000250664010f, 0.562354009234973f, 0.563706262215017f, 0.565057005983753f, + 0.566406236924833f, 0.567753951425961f, 0.569100145878898f, 0.570444816679478f, + 0.571787960227612f, 0.573129572927301f, 0.574469651186643f, 0.575808191417845f, + 0.577145190037234f, 0.578480643465260f, 0.579814548126514f, 0.581146900449730f, + 0.582477696867802f, 0.583806933817786f, 0.585134607740916f, 0.586460715082607f, + 0.587785252292473f, 0.589108215824328f, 0.590429602136201f, 0.591749407690343f, + 0.593067628953237f, 0.594384262395609f, 0.595699304492433f, 0.597012751722948f, + 0.598324600570659f, 0.599634847523352f, 0.600943489073102f, 0.602250521716282f, + 0.603555941953571f, 0.604859746289968f, 0.606161931234795f, 0.607462493301711f, + 0.608761429008721f, 0.610058734878182f, 0.611354407436817f, 0.612648443215719f, + 0.613940838750366f, 0.615231590580627f, 0.616520695250769f, 0.617808149309472f, + 0.619093949309834f, 0.620378091809381f, 0.621660573370077f, 0.622941390558334f, + 0.624220539945018f, 0.625498018105461f, 0.626773821619470f, 0.628047947071334f, + 0.629320391049838f, 0.630591150148264f, 0.631860220964409f, 0.633127600100588f, + 0.634393284163646f, 0.635657269764965f, 0.636919553520476f, 0.638180132050665f, + 0.639439001980585f, 0.640696159939861f, 0.641951602562703f, 0.643205326487914f, + 0.644457328358897f, 0.645707604823667f, 0.646956152534857f, 0.648202968149730f, + 0.649448048330184f, 0.650691389742765f, 0.651932989058674f, 0.653172842953777f, + 0.654410948108610f, 0.655647301208395f, 0.656881898943041f, 0.658114738007160f, + 0.659345815100069f, 0.660575126925805f, 0.661802670193130f, 0.663028441615542f, + 0.664252437911282f, 0.665474655803342f, 0.666695092019479f, 0.667913743292216f, + 0.669130606358858f, 0.670345677961497f, 0.671558954847018f, 0.672770433767117f, + 0.673980111478298f, 0.675187984741891f, 0.676394050324054f, 0.677598304995789f, + 0.678800745532942f, 0.680001368716218f, 0.681200171331188f, 0.682397150168297f, + 0.683592302022871f, 0.684785623695130f, 0.685977111990193f, 0.687166763718086f, + 0.688354575693754f, 0.689540544737067f, 0.690724667672829f, 0.691906941330786f, + 0.693087362545636f, 0.694265928157036f, 0.695442635009612f, 0.696617479952964f, + 0.697790459841680f, 0.698961571535339f, 0.700130811898524f, 0.701298177800824f, + 0.702463666116852f, 0.703627273726243f, 0.704788997513670f, 0.705948834368849f, + 0.707106781186548f, 0.708262834866593f, 0.709416992313883f, 0.710569250438390f, + 0.711719606155171f, 0.712868056384380f, 0.714014598051268f, 0.715159228086199f, + 0.716301943424654f, 0.717442741007240f, 0.718581617779698f, 0.719718570692913f, + 0.720853596702919f, 0.721986692770910f, 0.723117855863248f, 0.724247082951467f, + 0.725374371012288f, 0.726499717027620f, 0.727623117984575f, 0.728744570875469f, + 0.729864072697836f, 0.730981620454432f, 0.732097211153246f, 0.733210841807505f, + 0.734322509435686f, 0.735432211061519f, 0.736539943713999f, 0.737645704427393f, + 0.738749490241246f, 0.739851298200392f, 0.740951125354959f, 0.742048968760379f, + 0.743144825477394f, 0.744238692572067f, 0.745330567115786f, 0.746420446185274f, + 0.747508326862597f, 0.748594206235171f, 0.749678081395770f, 0.750759949442534f, + 0.751839807478977f, 0.752917652613995f, 0.753993481961869f, 0.755067292642284f, + 0.756139081780323f, 0.757208846506485f, 0.758276583956687f, 0.759342291272275f, + 0.760405965600031f, 0.761467604092177f, 0.762527203906388f, 0.763584762205796f, + 0.764640276159000f, 0.765693742940071f, 0.766745159728561f, 0.767794523709512f, + 0.768841832073460f, 0.769887082016445f, 0.770930270740018f, 0.771971395451250f, + 0.773010453362737f, 0.774047441692607f, 0.775082357664531f, 0.776115198507728f, + 0.777145961456971f, 0.778174643752598f, 0.779201242640517f, 0.780225755372213f, + 0.781248179204759f, 0.782268511400816f, 0.783286749228650f, 0.784302889962131f, + 0.785316930880745f, 0.786328869269598f, 0.787338702419428f, 0.788346427626606f, + 0.789352042193150f, 0.790355543426726f, 0.791356928640660f, 0.792356195153942f, + 0.793353340291235f, 0.794348361382881f, 0.795341255764910f, 0.796332020779044f, + 0.797320653772707f, 0.798307152099032f, 0.799291513116864f, 0.800273734190774f, + 0.801253812691061f, 0.802231745993758f, 0.803207531480645f, 0.804181166539250f, + 0.805152648562858f, 0.806121974950521f, 0.807089143107059f, 0.808054150443073f, + 0.809016994374948f, 0.809977672324859f, 0.810936181720784f, 0.811892519996505f, + 0.812846684591615f, 0.813798672951530f, 0.814748482527489f, 0.815696110776568f, + 0.816641555161679f, 0.817584813151584f, 0.818525882220897f, 0.819464759850093f, + 0.820401443525514f, 0.821335930739376f, 0.822268218989775f, 0.823198305780696f, + 0.824126188622016f, 0.825051865029513f, 0.825975332524873f, 0.826896588635696f, + 0.827815630895502f, 0.828732456843738f, 0.829647064025785f, 0.830559449992965f, + 0.831469612302545f, 0.832377548517748f, 0.833283256207754f, 0.834186732947712f, + 0.835087976318743f, 0.835986983907947f, 0.836883753308409f, 0.837778282119209f, + 0.838670567945424f, 0.839560608398136f, 0.840448401094438f, 0.841333943657443f, + 0.842217233716287f, 0.843098268906135f, 0.843977046868193f, 0.844853565249707f, + 0.845727821703973f, 0.846599813890344f, 0.847469539474234f, 0.848336996127127f, + 0.849202181526579f, 0.850065093356229f, 0.850925729305802f, 0.851784087071117f, + 0.852640164354092f, 0.853493958862750f, 0.854345468311227f, 0.855194690419775f, + 0.856041622914771f, 0.856886263528723f, 0.857728610000272f, 0.858568660074204f, + 0.859406411501453f, 0.860241862039105f, 0.861075009450407f, 0.861905851504774f, + 0.862734385977792f, 0.863560610651224f, 0.864384523313017f, 0.865206121757311f, + 0.866025403784439f, 0.866842367200935f, 0.867657009819544f, 0.868469329459222f, + 0.869279323945144f, 0.870086991108711f, 0.870892328787557f, 0.871695334825548f, + 0.872496007072797f, 0.873294343385663f, 0.874090341626759f, 0.874883999664958f, + 0.875675315375400f, 0.876464286639493f, 0.877250911344924f, 0.878035187385663f, + 0.878817112661965f, 0.879596685080383f, 0.880373902553765f, 0.881148763001268f, + 0.881921264348355f, 0.882691404526809f, 0.883459181474733f, 0.884224593136556f, + 0.884987637463042f, 0.885748312411291f, 0.886506615944746f, 0.887262546033203f, + 0.888016100652807f, 0.888767277786068f, 0.889516075421856f, 0.890262491555416f, + 0.891006524188368f, 0.891748171328711f, 0.892487430990834f, 0.893224301195515f, + 0.893958779969932f, 0.894690865347664f, 0.895420555368697f, 0.896147848079432f, + 0.896872741532688f, 0.897595233787707f, 0.898315322910159f, 0.899033006972149f, + 0.899748284052221f, 0.900461152235364f, 0.901171609613013f, 0.901879654283062f, + 0.902585284349861f, 0.903288497924226f, 0.903989293123443f, 0.904687668071273f, + 0.905383620897955f, 0.906077149740215f, 0.906768252741266f, 0.907456928050819f, + 0.908143173825081f, 0.908826988226768f, 0.909508369425101f, 0.910187315595818f, + 0.910863824921176f, 0.911537895589956f, 0.912209525797468f, 0.912878713745555f, + 0.913545457642601f, 0.914209755703531f, 0.914871606149819f, 0.915531007209492f, + 0.916187957117136f, 0.916842454113898f, 0.917494496447491f, 0.918144082372204f, + 0.918791210148898f, 0.919435878045019f, 0.920078084334595f, 0.920717827298248f, + 0.921355105223192f, 0.921989916403245f, 0.922622259138823f, 0.923252131736957f, + 0.923879532511287f, 0.924504459782072f, 0.925126911876195f, 0.925746887127164f, + 0.926364383875118f, 0.926979400466833f, 0.927591935255724f, 0.928201986601852f, + 0.928809552871924f, 0.929414632439304f, 0.930017223684012f, 0.930617324992729f, + 0.931214934758804f, 0.931810051382254f, 0.932402673269775f, 0.932992798834739f, + 0.933580426497202f, 0.934165554683908f, 0.934748181828292f, 0.935328306370488f, + 0.935905926757326f, 0.936481041442343f, 0.937053648885784f, 0.937623747554606f, + 0.938191335922484f, 0.938756412469813f, 0.939318975683713f, 0.939879024058033f, + 0.940436556093355f, 0.940991570296997f, 0.941544065183021f, 0.942094039272230f, + 0.942641491092178f, 0.943186419177173f, 0.943728822068278f, 0.944268698313317f, + 0.944806046466878f, 0.945340865090320f, 0.945873152751771f, 0.946402908026138f, + 0.946930129495106f, 0.947454815747144f, 0.947976965377510f, 0.948496576988253f, + 0.949013649188214f, 0.949528180593037f, 0.950040169825165f, 0.950549615513851f, + 0.951056516295154f, 0.951560870811948f, 0.952062677713924f, 0.952561935657595f, + 0.953058643306297f, 0.953552799330193f, 0.954044402406280f, 0.954533451218389f, + 0.955019944457187f, 0.955503880820186f, 0.955985259011744f, 0.956464077743065f, + 0.956940335732209f, 0.957414031704088f, 0.957885164390477f, 0.958353732530011f, + 0.958819734868193f, 0.959283170157394f, 0.959744037156857f, 0.960202334632705f, + 0.960658061357935f, 0.961111216112432f, 0.961561797682962f, 0.962009804863184f, + 0.962455236453647f, 0.962898091261798f, 0.963338368101980f, 0.963776065795440f, + 0.964211183170329f, 0.964643719061708f, 0.965073672311547f, 0.965501041768733f, + 0.965925826289068f, 0.966348024735277f, 0.966767635977008f, 0.967184658890834f, + 0.967599092360260f, 0.968010935275723f, 0.968420186534595f, 0.968826845041188f, + 0.969230909706754f, 0.969632379449491f, 0.970031253194544f, 0.970427529874007f, + 0.970821208426928f, 0.971212287799312f, 0.971600766944121f, 0.971986644821279f, + 0.972369920397677f, 0.972750592647168f, 0.973128660550580f, 0.973504123095711f, + 0.973876979277334f, 0.974247228097201f, 0.974614868564045f, 0.974979899693582f, + 0.975342320508513f, 0.975702130038529f, 0.976059327320311f, 0.976413911397535f, + 0.976765881320872f, 0.977115236147994f, 0.977461974943572f, 0.977806096779282f, + 0.978147600733806f, 0.978486485892835f, 0.978822751349072f, 0.979156396202234f, + 0.979487419559051f, 0.979815820533276f, 0.980141598245680f, 0.980464751824058f, + 0.980785280403230f, 0.981103183125046f, 0.981418459138384f, 0.981731107599154f, + 0.982041127670304f, 0.982348518521816f, 0.982653279330712f, 0.982955409281056f, + 0.983254907563955f, 0.983551773377562f, 0.983846005927077f, 0.984137604424753f, + 0.984426568089892f, 0.984712896148850f, 0.984996587835043f, 0.985277642388941f, + 0.985556059058078f, 0.985831837097047f, 0.986104975767509f, 0.986375474338188f, + 0.986643332084879f, 0.986908548290446f, 0.987171122244825f, 0.987431053245027f, + 0.987688340595138f, 0.987942983606322f, 0.988194981596825f, 0.988444333891970f, + 0.988691039824167f, 0.988935098732911f, 0.989176509964781f, 0.989415272873448f, + 0.989651386819670f, 0.989884851171301f, 0.990115665303286f, 0.990343828597665f, + 0.990569340443577f, 0.990792200237260f, 0.991012407382049f, 0.991229961288385f, + 0.991444861373810f, 0.991657107062973f, 0.991866697787626f, 0.992073632986633f, + 0.992277912105967f, 0.992479534598710f, 0.992678499925058f, 0.992874807552322f, + 0.993068456954926f, 0.993259447614414f, 0.993447779019444f, 0.993633450665799f, + 0.993816462056378f, 0.993996812701206f, 0.994174502117428f, 0.994349529829318f, + 0.994521895368273f, 0.994691598272820f, 0.994858638088611f, 0.995023014368432f, + 0.995184726672197f, 0.995343774566954f, 0.995500157626885f, 0.995653875433303f, + 0.995804927574662f, 0.995953313646548f, 0.996099033251687f, 0.996242085999945f, + 0.996382471508325f, 0.996520189400975f, 0.996655239309180f, 0.996787620871373f, + 0.996917333733128f, 0.997044377547164f, 0.997168751973348f, 0.997290456678690f, + 0.997409491337352f, 0.997525855630641f, 0.997639549247016f, 0.997750571882084f, + 0.997858923238604f, 0.997964603026487f, 0.998067610962796f, 0.998167946771749f, + 0.998265610184716f, 0.998360600940223f, 0.998452918783950f, 0.998542563468736f, + 0.998629534754574f, 0.998713832408616f, 0.998795456205172f, 0.998874405925711f, + 0.998950681358860f, 0.999024282300407f, 0.999095208553300f, 0.999163459927649f, + 0.999229036240723f, 0.999291937316955f, 0.999352162987941f, 0.999409713092437f, + 0.999464587476366f, 0.999516785992811f, 0.999566308502021f, 0.999613154871411f, + 0.999657324975557f, 0.999698818696204f, 0.999737635922260f, 0.999773776549800f, + 0.999807240482065f, 0.999838027629461f, 0.999866137909562f, 0.999891571247108f, + 0.999914327574007f, 0.999934406829333f, 0.999951808959328f, 0.999966533917401f, + 0.999978581664129f, 0.999987952167257f, 0.999994645401697f, 0.999998661349528f +}; + + +const float ivas_mdft_coeff_cos_twid_640[IVAS_640_PT_LEN +1] = +{ + 1.00000000000000f, 0.999996988037278f, 0.999987952167257f, 0.999972892444367f, + 0.999951808959328f, 0.999924701839145f, 0.999891571247108f, 0.999852417382795f, + 0.999807240482065f, 0.999756040817060f, 0.999698818696204f, 0.999635574464198f, + 0.999566308502021f, 0.999491021226926f, 0.999409713092437f, 0.999322384588350f, + 0.999229036240723f, 0.999129668611881f, 0.999024282300407f, 0.998912877941140f, + 0.998795456205172f, 0.998672017799843f, 0.998542563468736f, 0.998407093991674f, + 0.998265610184716f, 0.998118112900149f, 0.997964603026487f, 0.997805081488460f, + 0.997639549247016f, 0.997468007299307f, 0.997290456678690f, 0.997106898454717f, + 0.996917333733128f, 0.996721763655847f, 0.996520189400975f, 0.996312612182778f, + 0.996099033251687f, 0.995879453894286f, 0.995653875433303f, 0.995422299227608f, + 0.995184726672197f, 0.994941159198190f, 0.994691598272820f, 0.994436045399422f, + 0.994174502117428f, 0.993906970002356f, 0.993633450665799f, 0.993353945755417f, + 0.993068456954926f, 0.992776985984091f, 0.992479534598710f, 0.992176104590609f, + 0.991866697787626f, 0.991551316053606f, 0.991229961288385f, 0.990902635427780f, + 0.990569340443577f, 0.990230078343521f, 0.989884851171301f, 0.989533661006540f, + 0.989176509964781f, 0.988813400197476f, 0.988444333891970f, 0.988069313271492f, + 0.987688340595138f, 0.987301418157858f, 0.986908548290446f, 0.986509733359519f, + 0.986104975767509f, 0.985694277952645f, 0.985277642388941f, 0.984855071586178f, + 0.984426568089892f, 0.983992134481354f, 0.983551773377562f, 0.983105487431216f, + 0.982653279330712f, 0.982195151800116f, 0.981731107599154f, 0.981261149523195f, + 0.980785280403230f, 0.980303503105861f, 0.979815820533276f, 0.979322235623241f, + 0.978822751349072f, 0.978317370719628f, 0.977806096779282f, 0.977288932607910f, + 0.976765881320872f, 0.976236946068990f, 0.975702130038529f, 0.975161436451181f, + 0.974614868564045f, 0.974062429669605f, 0.973504123095711f, 0.972939952205560f, + 0.972369920397677f, 0.971794031105889f, 0.971212287799312f, 0.970624693982323f, + 0.970031253194544f, 0.969431969010818f, 0.968826845041188f, 0.968215884930876f, + 0.967599092360260f, 0.966976471044852f, 0.966348024735277f, 0.965713757217249f, + 0.965073672311547f, 0.964427773873996f, 0.963776065795440f, 0.963118552001719f, + 0.962455236453647f, 0.961786123146989f, 0.961111216112432f, 0.960430519415566f, + 0.959744037156857f, 0.959051773471624f, 0.958353732530011f, 0.957649918536965f, + 0.956940335732209f, 0.956224988390216f, 0.955503880820186f, 0.954777017366017f, + 0.954044402406280f, 0.953306040354194f, 0.952561935657595f, 0.951812092798916f, + 0.951056516295154f, 0.950295210697844f, 0.949528180593037f, 0.948755430601263f, + 0.947976965377510f, 0.947192789611197f, 0.946402908026138f, 0.945607325380521f, + 0.944806046466878f, 0.943999076112052f, 0.943186419177173f, 0.942368080557626f, + 0.941544065183021f, 0.940714378017165f, 0.939879024058033f, 0.939038008337734f, + 0.938191335922484f, 0.937339011912575f, 0.936481041442343f, 0.935617429680138f, + 0.934748181828292f, 0.933873303123092f, 0.932992798834739f, 0.932106674267327f, + 0.931214934758804f, 0.930317585680942f, 0.929414632439304f, 0.928506080473216f, + 0.927591935255724f, 0.926672202293573f, 0.925746887127164f, 0.924815995330528f, + 0.923879532511287f, 0.922937504310623f, 0.921989916403245f, 0.921036774497350f, + 0.920078084334595f, 0.919113851690058f, 0.918144082372204f, 0.917168782222852f, + 0.916187957117136f, 0.915201612963474f, 0.914209755703531f, 0.913212391312179f, + 0.912209525797468f, 0.911201165200584f, 0.910187315595818f, 0.909167983090522f, + 0.908143173825081f, 0.907112893972869f, 0.906077149740215f, 0.905035947366364f, + 0.903989293123443f, 0.902937193316419f, 0.901879654283062f, 0.900816682393908f, + 0.899748284052222f, 0.898674465693954f, 0.897595233787707f, 0.896510594834693f, + 0.895420555368697f, 0.894325121956035f, 0.893224301195515f, 0.892118099718401f, + 0.891006524188368f, 0.889889581301463f, 0.888767277786068f, 0.887639620402854f, + 0.886506615944746f, 0.885368271236879f, 0.884224593136556f, 0.883075588533209f, + 0.881921264348355f, 0.880761627535558f, 0.879596685080383f, 0.878426444000357f, + 0.877250911344924f, 0.876070094195407f, 0.874883999664958f, 0.873692634898524f, + 0.872496007072797f, 0.871294123396174f, 0.870086991108712f, 0.868874617482085f, + 0.867657009819544f, 0.866434175455865f, 0.865206121757311f, 0.863972856121587f, + 0.862734385977792f, 0.861490718786378f, 0.860241862039105f, 0.858987823258990f, + 0.857728610000272f, 0.856464229848356f, 0.855194690419775f, 0.853919999362139f, + 0.852640164354092f, 0.851355193105265f, 0.850065093356229f, 0.848769872878448f, + 0.847469539474235f, 0.846164100976699f, 0.844853565249707f, 0.843537940187827f, + 0.842217233716287f, 0.840891453790923f, 0.839560608398136f, 0.838224705554838f, + 0.836883753308409f, 0.835537759736646f, 0.834186732947712f, 0.832830681080094f, + 0.831469612302545f, 0.830103534814044f, 0.828732456843738f, 0.827356386650900f, + 0.825975332524873f, 0.824589302785025f, 0.823198305780696f, 0.821802349891147f, + 0.820401443525514f, 0.818995595122750f, 0.817584813151584f, 0.816169106110459f, + 0.814748482527489f, 0.813322950960406f, 0.811892519996505f, 0.810457198252595f, + 0.809016994374948f, 0.807571917039244f, 0.806121974950521f, 0.804667176843123f, + 0.803207531480645f, 0.801743047655882f, 0.800273734190774f, 0.798799599936358f, + 0.797320653772707f, 0.795836904608884f, 0.794348361382882f, 0.792855033061574f, + 0.791356928640660f, 0.789854057144609f, 0.788346427626606f, 0.786834049168500f, + 0.785316930880745f, 0.783795081902349f, 0.782268511400816f, 0.780737228572095f, + 0.779201242640517f, 0.777660562858748f, 0.776115198507728f, 0.774565158896617f, + 0.773010453362737f, 0.771451091271519f, 0.769887082016445f, 0.768318435018988f, + 0.766745159728562f, 0.765167265622459f, 0.763584762205797f, 0.761997659011457f, + 0.760405965600031f, 0.758809691559762f, 0.757208846506485f, 0.755603440083571f, + 0.753993481961870f, 0.752378981839648f, 0.750759949442534f, 0.749136394523459f, + 0.747508326862597f, 0.745875756267305f, 0.744238692572067f, 0.742597145638433f, + 0.740951125354959f, 0.739300641637149f, 0.737645704427393f, 0.735986323694910f, + 0.734322509435686f, 0.732654271672413f, 0.730981620454432f, 0.729304565857669f, + 0.727623117984575f, 0.725937286964068f, 0.724247082951467f, 0.722552516128436f, + 0.720853596702919f, 0.719150334909079f, 0.717442741007240f, 0.715730825283819f, + 0.714014598051268f, 0.712294069648014f, 0.710569250438390f, 0.708840150812579f, + 0.707106781186548f, 0.705369152001986f, 0.703627273726243f, 0.701881156852263f, + 0.700130811898524f, 0.698376249408973f, 0.696617479952964f, 0.694854514125194f, + 0.693087362545636f, 0.691316035859480f, 0.689540544737067f, 0.687760899873822f, + 0.685977111990193f, 0.684189191831585f, 0.682397150168297f, 0.680600997795453f, + 0.678800745532942f, 0.676996404225349f, 0.675187984741891f, 0.673375497976352f, + 0.671558954847018f, 0.669738366296610f, 0.667913743292216f, 0.666085096825230f, + 0.664252437911282f, 0.662415777590172f, 0.660575126925805f, 0.658730497006124f, + 0.656881898943041f, 0.655029343872374f, 0.653172842953777f, 0.651312407370671f, + 0.649448048330184f, 0.647579777063073f, 0.645707604823667f, 0.643831542889792f, + 0.641951602562703f, 0.640067795167023f, 0.638180132050665f, 0.636288624584773f, + 0.634393284163646f, 0.632494122204673f, 0.630591150148264f, 0.628684379457781f, + 0.626773821619470f, 0.624859488142386f, 0.622941390558334f, 0.621019540421789f, + 0.619093949309834f, 0.617164628822086f, 0.615231590580627f, 0.613294846229936f, + 0.611354407436817f, 0.609410285890327f, 0.607462493301711f, 0.605511041404326f, + 0.603555941953571f, 0.601597206726822f, 0.599634847523352f, 0.597668876164268f, + 0.595699304492433f, 0.593726144372402f, 0.591749407690343f, 0.589769106353971f, + 0.587785252292473f, 0.585797857456439f, 0.583806933817786f, 0.581812493369691f, + 0.579814548126514f, 0.577813110123727f, 0.575808191417845f, 0.573799804086349f, + 0.571787960227612f, 0.569772671960834f, 0.567753951425961f, 0.565731810783613f, + 0.563706262215017f, 0.561677317921925f, 0.559644990126546f, 0.557609291071472f, + 0.555570233019602f, 0.553527828254070f, 0.551482089078169f, 0.549433027815281f, + 0.547380656808797f, 0.545324988422047f, 0.543266035038224f, 0.541203809060310f, + 0.539138322911000f, 0.537069589032630f, 0.534997619887097f, 0.532922427955790f, + 0.530844025739510f, 0.528762425758396f, 0.526677640551852f, 0.524589682678469f, + 0.522498564715949f, 0.520404299261031f, 0.518306898929413f, 0.516206376355680f, + 0.514102744193222f, 0.511996015114163f, 0.509886201809281f, 0.507773316987935f, + 0.505657373377985f, 0.503538383725718f, 0.501416360795769f, 0.499291317371047f, + 0.497163266252654f, 0.495032220259813f, 0.492898192229784f, 0.490761195017794f, + 0.488621241496955f, 0.486478344558187f, 0.484332517110141f, 0.482183772079123f, + 0.480032122409011f, 0.477877581061184f, 0.475720161014437f, 0.473559875264908f, + 0.471396736825998f, 0.469230758728290f, 0.467061954019477f, 0.464890335764274f, + 0.462715917044350f, 0.460538710958240f, 0.458358730621271f, 0.456175989165483f, + 0.453990499739547f, 0.451802275508688f, 0.449611329654607f, 0.447417675375397f, + 0.445221325885468f, 0.443022294415467f, 0.440820594212194f, 0.438616238538528f, + 0.436409240673342f, 0.434199613911428f, 0.431987371563412f, 0.429772526955677f, + 0.427555093430282f, 0.425335084344881f, 0.423112513072644f, 0.420887393002174f, + 0.418659737537428f, 0.416429560097637f, 0.414196874117224f, 0.411961693045722f, + 0.409724030347695f, 0.407483899502658f, 0.405241314004990f, 0.402996287363860f, + 0.400748833103141f, 0.398498964761330f, 0.396246695891466f, 0.393992040061048f, + 0.391735010851956f, 0.389475621860365f, 0.387213886696666f, 0.384949818985382f, + 0.382683432365090f, 0.380414740488332f, 0.378143757021541f, 0.375870495644950f, + 0.373594970052516f, 0.371317193951838f, 0.369037181064066f, 0.366754945123831f, + 0.364470499879150f, 0.362183859091351f, 0.359895036534988f, 0.357604045997758f, + 0.355310901280416f, 0.353015616196696f, 0.350718204573223f, 0.348418680249435f, + 0.346117057077493f, 0.343813348922205f, 0.341507569660936f, 0.339199733183530f, + 0.336889853392220f, 0.334577944201551f, 0.332264019538291f, 0.329948093341349f, + 0.327630179561693f, 0.325310292162263f, 0.322988445117886f, 0.320664652415197f, + 0.318338928052550f, 0.316011286039934f, 0.313681740398892f, 0.311350305162432f, + 0.309016994374947f, 0.306681822092128f, 0.304344802380877f, 0.302005949319228f, + 0.299665276996257f, 0.297322799511999f, 0.294978530977364f, 0.292632485514051f, + 0.290284677254463f, 0.287935120341621f, 0.285583828929082f, 0.283230817180850f, + 0.280876099271292f, 0.278519689385053f, 0.276161601716971f, 0.273801850471989f, + 0.271440449865074f, 0.269077414121127f, 0.266712757474898f, 0.264346494170904f, + 0.261978638463337f, 0.259609204615985f, 0.257238206902140f, 0.254865659604515f, + 0.252491577015158f, 0.250115973435366f, 0.247738863175599f, 0.245360260555389f, + 0.242980179903264f, 0.240598635556650f, 0.238215641861795f, 0.235831213173673f, + 0.233445363855905f, 0.231058108280671f, 0.228669460828619f, 0.226279435888785f, + 0.223888047858498f, 0.221495311143304f, 0.219101240156870f, 0.216705849320900f, + 0.214309153065051f, 0.211911165826842f, 0.209511902051569f, 0.207111376192219f, + 0.204709602709380f, 0.202306596071156f, 0.199902370753082f, 0.197496941238030f, + 0.195090322016128f, 0.192682527584672f, 0.190273572448036f, 0.187863471117585f, + 0.185452238111591f, 0.183039887955141f, 0.180626435180053f, 0.178211894324786f, + 0.175796279934354f, 0.173379606560240f, 0.170961888760301f, 0.168543141098691f, + 0.166123378145766f, 0.163702614477995f, 0.161280864677881f, 0.158858143333862f, + 0.156434465040231f, 0.154009844397046f, 0.151584296010041f, 0.149157834490539f, + 0.146730474455362f, 0.144302230526747f, 0.141873117332253f, 0.139443149504679f, + 0.137012341681968f, 0.134580708507126f, 0.132148264628130f, 0.129715024697841f, + 0.127281003373913f, 0.124846215318711f, 0.122410675199216f, 0.119974397686941f, + 0.117537397457838f, 0.115099689192216f, 0.112661287574648f, 0.110222207293883f, + 0.107782463042759f, 0.105342069518114f, 0.102901041420696f, 0.100459393455077f, + 0.0980171403295608f, 0.0955742967560992f, 0.0931308774501999f, 0.0906868971308382f, + 0.0882423705203696f, 0.0857973123444399f, 0.0833517373318975f, 0.0809056602147037f, + 0.0784590957278450f, 0.0760120586092433f, 0.0735645635996675f, 0.0711166254426455f, + 0.0686682588843738f, 0.0662194786736304f, 0.0637702995616845f, 0.0613207363022087f, + 0.0588708036511890f, 0.0564205163668375f, 0.0539698892095020f, 0.0515189369415775f, + 0.0490676743274181f, 0.0466161161332467f, 0.0441642771270675f, 0.0417121720785753f, + 0.0392598157590687f, 0.0368072229413588f, 0.0343544083996823f, 0.0319013869096110f, + 0.0294481732479634f, 0.0269947821927155f, 0.0245412285229123f, 0.0220875270185784f, + 0.0196336924606283f, 0.0171797396307788f, 0.0147256833114584f, 0.0122715382857199f, + 0.00981731933714973f, 0.00736304124977978f, 0.00490871880799808f, 0.00245436679646048f + ,0.00000000000000000f +}; + +const float ivas_mdft_coeff_sin_twid_640[IVAS_640_PT_LEN] = +{ + 0.00000000000000f, 0.00245436679646029f, 0.00490871880799799f, 0.00736304124977957f, + 0.00981731933714962f, 0.0122715382857199f, 0.0147256833114585f, 0.0171797396307787f, + 0.0196336924606283f, 0.0220875270185783f, 0.0245412285229123f, 0.0269947821927154f, + 0.0294481732479632f, 0.0319013869096109f, 0.0343544083996823f, 0.0368072229413588f, + 0.0392598157590686f, 0.0417121720785753f, 0.0441642771270674f, 0.0466161161332467f, + 0.0490676743274180f, 0.0515189369415775f, 0.0539698892095019f, 0.0564205163668375f, + 0.0588708036511890f, 0.0613207363022086f, 0.0637702995616845f, 0.0662194786736303f, + 0.0686682588843738f, 0.0711166254426453f, 0.0735645635996674f, 0.0760120586092431f, + 0.0784590957278449f, 0.0809056602147038f, 0.0833517373318975f, 0.0857973123444399f, + 0.0882423705203695f, 0.0906868971308382f, 0.0931308774501998f, 0.0955742967560992f, + 0.0980171403295606f, 0.100459393455076f, 0.102901041420696f, 0.105342069518114f, + 0.107782463042759f, 0.110222207293883f, 0.112661287574648f, 0.115099689192216f, + 0.117537397457838f, 0.119974397686940f, 0.122410675199216f, 0.124846215318711f, + 0.127281003373913f, 0.129715024697841f, 0.132148264628130f, 0.134580708507126f, + 0.137012341681968f, 0.139443149504679f, 0.141873117332253f, 0.144302230526747f, + 0.146730474455362f, 0.149157834490539f, 0.151584296010041f, 0.154009844397046f, + 0.156434465040231f, 0.158858143333861f, 0.161280864677880f, 0.163702614477995f, + 0.166123378145765f, 0.168543141098691f, 0.170961888760301f, 0.173379606560240f, + 0.175796279934355f, 0.178211894324786f, 0.180626435180053f, 0.183039887955141f, + 0.185452238111591f, 0.187863471117585f, 0.190273572448036f, 0.192682527584672f, + 0.195090322016128f, 0.197496941238030f, 0.199902370753082f, 0.202306596071156f, + 0.204709602709380f, 0.207111376192219f, 0.209511902051569f, 0.211911165826842f, + 0.214309153065051f, 0.216705849320900f, 0.219101240156870f, 0.221495311143304f, + 0.223888047858498f, 0.226279435888785f, 0.228669460828619f, 0.231058108280671f, + 0.233445363855905f, 0.235831213173673f, 0.238215641861795f, 0.240598635556650f, + 0.242980179903264f, 0.245360260555389f, 0.247738863175598f, 0.250115973435366f, + 0.252491577015158f, 0.254865659604515f, 0.257238206902140f, 0.259609204615985f, + 0.261978638463337f, 0.264346494170904f, 0.266712757474898f, 0.269077414121127f, + 0.271440449865074f, 0.273801850471989f, 0.276161601716971f, 0.278519689385053f, + 0.280876099271292f, 0.283230817180850f, 0.285583828929082f, 0.287935120341621f, + 0.290284677254462f, 0.292632485514050f, 0.294978530977364f, 0.297322799511998f, + 0.299665276996257f, 0.302005949319228f, 0.304344802380877f, 0.306681822092128f, + 0.309016994374947f, 0.311350305162432f, 0.313681740398891f, 0.316011286039934f, + 0.318338928052550f, 0.320664652415197f, 0.322988445117886f, 0.325310292162263f, + 0.327630179561694f, 0.329948093341349f, 0.332264019538291f, 0.334577944201551f, + 0.336889853392220f, 0.339199733183530f, 0.341507569660936f, 0.343813348922205f, + 0.346117057077493f, 0.348418680249435f, 0.350718204573223f, 0.353015616196696f, + 0.355310901280416f, 0.357604045997758f, 0.359895036534988f, 0.362183859091351f, + 0.364470499879150f, 0.366754945123831f, 0.369037181064066f, 0.371317193951838f, + 0.373594970052516f, 0.375870495644949f, 0.378143757021541f, 0.380414740488332f, + 0.382683432365090f, 0.384949818985382f, 0.387213886696666f, 0.389475621860365f, + 0.391735010851956f, 0.393992040061048f, 0.396246695891466f, 0.398498964761330f, + 0.400748833103141f, 0.402996287363860f, 0.405241314004990f, 0.407483899502658f, + 0.409724030347695f, 0.411961693045722f, 0.414196874117224f, 0.416429560097637f, + 0.418659737537428f, 0.420887393002174f, 0.423112513072644f, 0.425335084344881f, + 0.427555093430282f, 0.429772526955677f, 0.431987371563412f, 0.434199613911428f, + 0.436409240673342f, 0.438616238538528f, 0.440820594212194f, 0.443022294415467f, + 0.445221325885468f, 0.447417675375397f, 0.449611329654607f, 0.451802275508688f, + 0.453990499739547f, 0.456175989165483f, 0.458358730621271f, 0.460538710958240f, + 0.462715917044350f, 0.464890335764274f, 0.467061954019477f, 0.469230758728290f, + 0.471396736825998f, 0.473559875264908f, 0.475720161014437f, 0.477877581061184f, + 0.480032122409011f, 0.482183772079123f, 0.484332517110141f, 0.486478344558187f, + 0.488621241496955f, 0.490761195017794f, 0.492898192229784f, 0.495032220259813f, + 0.497163266252654f, 0.499291317371047f, 0.501416360795769f, 0.503538383725718f, + 0.505657373377985f, 0.507773316987935f, 0.509886201809281f, 0.511996015114162f, + 0.514102744193222f, 0.516206376355680f, 0.518306898929413f, 0.520404299261031f, + 0.522498564715949f, 0.524589682678469f, 0.526677640551852f, 0.528762425758396f, + 0.530844025739509f, 0.532922427955790f, 0.534997619887097f, 0.537069589032630f, + 0.539138322911000f, 0.541203809060310f, 0.543266035038224f, 0.545324988422047f, + 0.547380656808796f, 0.549433027815281f, 0.551482089078169f, 0.553527828254070f, + 0.555570233019602f, 0.557609291071472f, 0.559644990126546f, 0.561677317921925f, + 0.563706262215017f, 0.565731810783613f, 0.567753951425961f, 0.569772671960834f, + 0.571787960227612f, 0.573799804086349f, 0.575808191417845f, 0.577813110123727f, + 0.579814548126514f, 0.581812493369691f, 0.583806933817786f, 0.585797857456439f, + 0.587785252292473f, 0.589769106353971f, 0.591749407690343f, 0.593726144372402f, + 0.595699304492433f, 0.597668876164268f, 0.599634847523352f, 0.601597206726822f, + 0.603555941953571f, 0.605511041404326f, 0.607462493301711f, 0.609410285890327f, + 0.611354407436817f, 0.613294846229936f, 0.615231590580627f, 0.617164628822086f, + 0.619093949309834f, 0.621019540421789f, 0.622941390558334f, 0.624859488142386f, + 0.626773821619470f, 0.628684379457781f, 0.630591150148264f, 0.632494122204672f, + 0.634393284163646f, 0.636288624584773f, 0.638180132050665f, 0.640067795167023f, + 0.641951602562703f, 0.643831542889792f, 0.645707604823667f, 0.647579777063073f, + 0.649448048330184f, 0.651312407370671f, 0.653172842953777f, 0.655029343872374f, + 0.656881898943041f, 0.658730497006124f, 0.660575126925805f, 0.662415777590172f, + 0.664252437911282f, 0.666085096825230f, 0.667913743292216f, 0.669738366296610f, + 0.671558954847018f, 0.673375497976352f, 0.675187984741890f, 0.676996404225348f, + 0.678800745532942f, 0.680600997795453f, 0.682397150168297f, 0.684189191831585f, + 0.685977111990193f, 0.687760899873822f, 0.689540544737067f, 0.691316035859480f, + 0.693087362545636f, 0.694854514125194f, 0.696617479952964f, 0.698376249408973f, + 0.700130811898524f, 0.701881156852263f, 0.703627273726243f, 0.705369152001986f, + 0.707106781186548f, 0.708840150812579f, 0.710569250438390f, 0.712294069648014f, + 0.714014598051268f, 0.715730825283819f, 0.717442741007240f, 0.719150334909079f, + 0.720853596702919f, 0.722552516128436f, 0.724247082951467f, 0.725937286964068f, + 0.727623117984575f, 0.729304565857668f, 0.730981620454432f, 0.732654271672413f, + 0.734322509435686f, 0.735986323694910f, 0.737645704427393f, 0.739300641637149f, + 0.740951125354959f, 0.742597145638433f, 0.744238692572067f, 0.745875756267305f, + 0.747508326862597f, 0.749136394523459f, 0.750759949442534f, 0.752378981839648f, + 0.753993481961869f, 0.755603440083571f, 0.757208846506485f, 0.758809691559762f, + 0.760405965600031f, 0.761997659011457f, 0.763584762205797f, 0.765167265622459f, + 0.766745159728562f, 0.768318435018988f, 0.769887082016445f, 0.771451091271519f, + 0.773010453362737f, 0.774565158896617f, 0.776115198507728f, 0.777660562858748f, + 0.779201242640517f, 0.780737228572095f, 0.782268511400816f, 0.783795081902349f, + 0.785316930880745f, 0.786834049168500f, 0.788346427626606f, 0.789854057144609f, + 0.791356928640660f, 0.792855033061574f, 0.794348361382882f, 0.795836904608884f, + 0.797320653772707f, 0.798799599936358f, 0.800273734190774f, 0.801743047655881f, + 0.803207531480645f, 0.804667176843123f, 0.806121974950521f, 0.807571917039243f, + 0.809016994374948f, 0.810457198252595f, 0.811892519996505f, 0.813322950960406f, + 0.814748482527489f, 0.816169106110459f, 0.817584813151584f, 0.818995595122750f, + 0.820401443525514f, 0.821802349891147f, 0.823198305780696f, 0.824589302785025f, + 0.825975332524873f, 0.827356386650900f, 0.828732456843738f, 0.830103534814044f, + 0.831469612302545f, 0.832830681080094f, 0.834186732947712f, 0.835537759736646f, + 0.836883753308409f, 0.838224705554838f, 0.839560608398136f, 0.840891453790923f, + 0.842217233716286f, 0.843537940187827f, 0.844853565249707f, 0.846164100976699f, + 0.847469539474234f, 0.848769872878448f, 0.850065093356229f, 0.851355193105265f, + 0.852640164354092f, 0.853919999362139f, 0.855194690419775f, 0.856464229848356f, + 0.857728610000272f, 0.858987823258990f, 0.860241862039105f, 0.861490718786378f, + 0.862734385977792f, 0.863972856121587f, 0.865206121757311f, 0.866434175455865f, + 0.867657009819544f, 0.868874617482086f, 0.870086991108711f, 0.871294123396174f, + 0.872496007072797f, 0.873692634898524f, 0.874883999664958f, 0.876070094195407f, + 0.877250911344924f, 0.878426444000357f, 0.879596685080383f, 0.880761627535558f, + 0.881921264348355f, 0.883075588533209f, 0.884224593136556f, 0.885368271236879f, + 0.886506615944746f, 0.887639620402854f, 0.888767277786068f, 0.889889581301463f, + 0.891006524188368f, 0.892118099718401f, 0.893224301195515f, 0.894325121956035f, + 0.895420555368697f, 0.896510594834693f, 0.897595233787707f, 0.898674465693954f, + 0.899748284052221f, 0.900816682393908f, 0.901879654283062f, 0.902937193316419f, + 0.903989293123443f, 0.905035947366364f, 0.906077149740215f, 0.907112893972869f, + 0.908143173825081f, 0.909167983090522f, 0.910187315595818f, 0.911201165200584f, + 0.912209525797468f, 0.913212391312179f, 0.914209755703531f, 0.915201612963474f, + 0.916187957117136f, 0.917168782222852f, 0.918144082372204f, 0.919113851690058f, + 0.920078084334595f, 0.921036774497350f, 0.921989916403245f, 0.922937504310623f, + 0.923879532511287f, 0.924815995330528f, 0.925746887127164f, 0.926672202293573f, + 0.927591935255724f, 0.928506080473216f, 0.929414632439304f, 0.930317585680942f, + 0.931214934758804f, 0.932106674267327f, 0.932992798834739f, 0.933873303123092f, + 0.934748181828292f, 0.935617429680138f, 0.936481041442343f, 0.937339011912575f, + 0.938191335922484f, 0.939038008337734f, 0.939879024058033f, 0.940714378017165f, + 0.941544065183021f, 0.942368080557626f, 0.943186419177173f, 0.943999076112052f, + 0.944806046466878f, 0.945607325380521f, 0.946402908026138f, 0.947192789611197f, + 0.947976965377510f, 0.948755430601262f, 0.949528180593037f, 0.950295210697844f, + 0.951056516295154f, 0.951812092798916f, 0.952561935657595f, 0.953306040354194f, + 0.954044402406280f, 0.954777017366017f, 0.955503880820186f, 0.956224988390216f, + 0.956940335732209f, 0.957649918536965f, 0.958353732530011f, 0.959051773471624f, + 0.959744037156857f, 0.960430519415566f, 0.961111216112432f, 0.961786123146989f, + 0.962455236453647f, 0.963118552001719f, 0.963776065795440f, 0.964427773873996f, + 0.965073672311547f, 0.965713757217249f, 0.966348024735277f, 0.966976471044852f, + 0.967599092360260f, 0.968215884930876f, 0.968826845041188f, 0.969431969010818f, + 0.970031253194544f, 0.970624693982323f, 0.971212287799312f, 0.971794031105889f, + 0.972369920397677f, 0.972939952205560f, 0.973504123095711f, 0.974062429669605f, + 0.974614868564045f, 0.975161436451181f, 0.975702130038529f, 0.976236946068990f, + 0.976765881320873f, 0.977288932607910f, 0.977806096779282f, 0.978317370719628f, + 0.978822751349072f, 0.979322235623241f, 0.979815820533276f, 0.980303503105861f, + 0.980785280403230f, 0.981261149523195f, 0.981731107599154f, 0.982195151800116f, + 0.982653279330712f, 0.983105487431216f, 0.983551773377562f, 0.983992134481354f, + 0.984426568089892f, 0.984855071586178f, 0.985277642388941f, 0.985694277952645f, + 0.986104975767509f, 0.986509733359519f, 0.986908548290446f, 0.987301418157858f, + 0.987688340595138f, 0.988069313271492f, 0.988444333891970f, 0.988813400197476f, + 0.989176509964781f, 0.989533661006540f, 0.989884851171301f, 0.990230078343521f, + 0.990569340443577f, 0.990902635427780f, 0.991229961288385f, 0.991551316053606f, + 0.991866697787626f, 0.992176104590609f, 0.992479534598710f, 0.992776985984091f, + 0.993068456954926f, 0.993353945755417f, 0.993633450665799f, 0.993906970002356f, + 0.994174502117428f, 0.994436045399422f, 0.994691598272820f, 0.994941159198190f, + 0.995184726672197f, 0.995422299227608f, 0.995653875433303f, 0.995879453894286f, + 0.996099033251687f, 0.996312612182778f, 0.996520189400975f, 0.996721763655847f, + 0.996917333733128f, 0.997106898454717f, 0.997290456678690f, 0.997468007299307f, + 0.997639549247016f, 0.997805081488460f, 0.997964603026487f, 0.998118112900149f, + 0.998265610184716f, 0.998407093991674f, 0.998542563468736f, 0.998672017799843f, + 0.998795456205172f, 0.998912877941140f, 0.999024282300407f, 0.999129668611881f, + 0.999229036240723f, 0.999322384588350f, 0.999409713092437f, 0.999491021226926f, + 0.999566308502021f, 0.999635574464198f, 0.999698818696204f, 0.999756040817060f, + 0.999807240482065f, 0.999852417382795f, 0.999891571247108f, 0.999924701839145f, + 0.999951808959328f, 0.999972892444367f, 0.999987952167257f, 0.999996988037278f +}; + +const float ivas_mdft_coeff_cos_twid_320[IVAS_320_PT_LEN + 1] = +{ + 1.00000000000000f, 0.999987952167257f, 0.999951808959328f, 0.999891571247108f, + 0.999807240482065f, 0.999698818696204f, 0.999566308502021f, 0.999409713092437f, + 0.999229036240723f, 0.999024282300407f, 0.998795456205172f, 0.998542563468736f, + 0.998265610184716f, 0.997964603026487f, 0.997639549247016f, 0.997290456678690f, + 0.996917333733128f, 0.996520189400975f, 0.996099033251687f, 0.995653875433303f, + 0.995184726672197f, 0.994691598272820f, 0.994174502117428f, 0.993633450665799f, + 0.993068456954926f, 0.992479534598710f, 0.991866697787626f, 0.991229961288385f, + 0.990569340443577f, 0.989884851171301f, 0.989176509964781f, 0.988444333891970f, + 0.987688340595138f, 0.986908548290446f, 0.986104975767509f, 0.985277642388941f, + 0.984426568089892f, 0.983551773377562f, 0.982653279330712f, 0.981731107599154f, + 0.980785280403230f, 0.979815820533276f, 0.978822751349072f, 0.977806096779282f, + 0.976765881320872f, 0.975702130038529f, 0.974614868564045f, 0.973504123095711f, + 0.972369920397677f, 0.971212287799312f, 0.970031253194544f, 0.968826845041188f, + 0.967599092360260f, 0.966348024735277f, 0.965073672311547f, 0.963776065795440f, + 0.962455236453647f, 0.961111216112432f, 0.959744037156857f, 0.958353732530011f, + 0.956940335732209f, 0.955503880820186f, 0.954044402406280f, 0.952561935657595f, + 0.951056516295154f, 0.949528180593037f, 0.947976965377510f, 0.946402908026138f, + 0.944806046466878f, 0.943186419177173f, 0.941544065183021f, 0.939879024058033f, + 0.938191335922484f, 0.936481041442343f, 0.934748181828292f, 0.932992798834739f, + 0.931214934758804f, 0.929414632439304f, 0.927591935255724f, 0.925746887127164f, + 0.923879532511287f, 0.921989916403245f, 0.920078084334595f, 0.918144082372204f, + 0.916187957117136f, 0.914209755703531f, 0.912209525797468f, 0.910187315595818f, + 0.908143173825081f, 0.906077149740215f, 0.903989293123443f, 0.901879654283062f, + 0.899748284052222f, 0.897595233787707f, 0.895420555368697f, 0.893224301195515f, + 0.891006524188368f, 0.888767277786068f, 0.886506615944746f, 0.884224593136556f, + 0.881921264348355f, 0.879596685080383f, 0.877250911344924f, 0.874883999664958f, + 0.872496007072797f, 0.870086991108712f, 0.867657009819544f, 0.865206121757311f, + 0.862734385977792f, 0.860241862039105f, 0.857728610000272f, 0.855194690419775f, + 0.852640164354092f, 0.850065093356229f, 0.847469539474235f, 0.844853565249707f, + 0.842217233716287f, 0.839560608398136f, 0.836883753308409f, 0.834186732947712f, + 0.831469612302545f, 0.828732456843738f, 0.825975332524873f, 0.823198305780696f, + 0.820401443525514f, 0.817584813151584f, 0.814748482527489f, 0.811892519996505f, + 0.809016994374948f, 0.806121974950521f, 0.803207531480645f, 0.800273734190774f, + 0.797320653772707f, 0.794348361382882f, 0.791356928640660f, 0.788346427626606f, + 0.785316930880745f, 0.782268511400816f, 0.779201242640517f, 0.776115198507728f, + 0.773010453362737f, 0.769887082016445f, 0.766745159728562f, 0.763584762205797f, + 0.760405965600031f, 0.757208846506485f, 0.753993481961870f, 0.750759949442534f, + 0.747508326862597f, 0.744238692572067f, 0.740951125354959f, 0.737645704427393f, + 0.734322509435686f, 0.730981620454432f, 0.727623117984575f, 0.724247082951467f, + 0.720853596702919f, 0.717442741007240f, 0.714014598051268f, 0.710569250438390f, + 0.707106781186548f, 0.703627273726243f, 0.700130811898524f, 0.696617479952964f, + 0.693087362545636f, 0.689540544737067f, 0.685977111990193f, 0.682397150168297f, + 0.678800745532942f, 0.675187984741891f, 0.671558954847018f, 0.667913743292216f, + 0.664252437911282f, 0.660575126925805f, 0.656881898943041f, 0.653172842953777f, + 0.649448048330184f, 0.645707604823667f, 0.641951602562703f, 0.638180132050665f, + 0.634393284163646f, 0.630591150148264f, 0.626773821619470f, 0.622941390558334f, + 0.619093949309834f, 0.615231590580627f, 0.611354407436817f, 0.607462493301711f, + 0.603555941953571f, 0.599634847523352f, 0.595699304492433f, 0.591749407690343f, + 0.587785252292473f, 0.583806933817786f, 0.579814548126514f, 0.575808191417845f, + 0.571787960227612f, 0.567753951425961f, 0.563706262215017f, 0.559644990126546f, + 0.555570233019602f, 0.551482089078169f, 0.547380656808797f, 0.543266035038224f, + 0.539138322911000f, 0.534997619887097f, 0.530844025739510f, 0.526677640551852f, + 0.522498564715949f, 0.518306898929413f, 0.514102744193222f, 0.509886201809281f, + 0.505657373377985f, 0.501416360795769f, 0.497163266252654f, 0.492898192229784f, + 0.488621241496955f, 0.484332517110141f, 0.480032122409011f, 0.475720161014437f, + 0.471396736825998f, 0.467061954019477f, 0.462715917044350f, 0.458358730621271f, + 0.453990499739547f, 0.449611329654607f, 0.445221325885468f, 0.440820594212194f, + 0.436409240673342f, 0.431987371563412f, 0.427555093430282f, 0.423112513072644f, + 0.418659737537428f, 0.414196874117224f, 0.409724030347695f, 0.405241314004990f, + 0.400748833103141f, 0.396246695891466f, 0.391735010851956f, 0.387213886696666f, + 0.382683432365090f, 0.378143757021541f, 0.373594970052516f, 0.369037181064066f, + 0.364470499879150f, 0.359895036534988f, 0.355310901280416f, 0.350718204573223f, + 0.346117057077493f, 0.341507569660936f, 0.336889853392220f, 0.332264019538291f, + 0.327630179561693f, 0.322988445117886f, 0.318338928052550f, 0.313681740398892f, + 0.309016994374947f, 0.304344802380877f, 0.299665276996257f, 0.294978530977364f, + 0.290284677254463f, 0.285583828929082f, 0.280876099271292f, 0.276161601716971f, + 0.271440449865074f, 0.266712757474898f, 0.261978638463337f, 0.257238206902140f, + 0.252491577015158f, 0.247738863175599f, 0.242980179903264f, 0.238215641861795f, + 0.233445363855905f, 0.228669460828619f, 0.223888047858498f, 0.219101240156870f, + 0.214309153065051f, 0.209511902051569f, 0.204709602709380f, 0.199902370753082f, + 0.195090322016128f, 0.190273572448036f, 0.185452238111591f, 0.180626435180053f, + 0.175796279934354f, 0.170961888760301f, 0.166123378145766f, 0.161280864677881f, + 0.156434465040231f, 0.151584296010041f, 0.146730474455362f, 0.141873117332253f, + 0.137012341681968f, 0.132148264628130f, 0.127281003373913f, 0.122410675199216f, + 0.117537397457838f, 0.112661287574648f, 0.107782463042759f, 0.102901041420696f, + 0.0980171403295608f, 0.0931308774501999f, 0.0882423705203696f, 0.0833517373318975f, + 0.0784590957278450f, 0.0735645635996675f, 0.0686682588843738f, 0.0637702995616845f, + 0.0588708036511890f, 0.0539698892095020f, 0.0490676743274181f, 0.0441642771270675f, + 0.0392598157590687f, 0.0343544083996823f, 0.0294481732479634f, 0.0245412285229123f, + 0.0196336924606283f, 0.0147256833114584f, 0.00981731933714973f, 0.00490871880799808f + ,0.0000000000000000f +}; + +const float ivas_mdft_coeff_sin_twid_320[IVAS_320_PT_LEN] = +{ + 0.00000000000000f, 0.00490871880799799f, 0.00981731933714962f, 0.0147256833114585f, + 0.0196336924606283f, 0.0245412285229123f, 0.0294481732479632f, 0.0343544083996823f, + 0.0392598157590686f, 0.0441642771270674f, 0.0490676743274180f, 0.0539698892095019f, + 0.0588708036511890f, 0.0637702995616845f, 0.0686682588843738f, 0.0735645635996674f, + 0.0784590957278449f, 0.0833517373318975f, 0.0882423705203695f, 0.0931308774501998f, + 0.0980171403295606f, 0.102901041420696f, 0.107782463042759f, 0.112661287574648f, + 0.117537397457838f, 0.122410675199216f, 0.127281003373913f, 0.132148264628130f, + 0.137012341681968f, 0.141873117332253f, 0.146730474455362f, 0.151584296010041f, + 0.156434465040231f, 0.161280864677880f, 0.166123378145765f, 0.170961888760301f, + 0.175796279934355f, 0.180626435180053f, 0.185452238111591f, 0.190273572448036f, + 0.195090322016128f, 0.199902370753082f, 0.204709602709380f, 0.209511902051569f, + 0.214309153065051f, 0.219101240156870f, 0.223888047858498f, 0.228669460828619f, + 0.233445363855905f, 0.238215641861795f, 0.242980179903264f, 0.247738863175598f, + 0.252491577015158f, 0.257238206902140f, 0.261978638463337f, 0.266712757474898f, + 0.271440449865074f, 0.276161601716971f, 0.280876099271292f, 0.285583828929082f, + 0.290284677254462f, 0.294978530977364f, 0.299665276996257f, 0.304344802380877f, + 0.309016994374947f, 0.313681740398891f, 0.318338928052550f, 0.322988445117886f, + 0.327630179561694f, 0.332264019538291f, 0.336889853392220f, 0.341507569660936f, + 0.346117057077493f, 0.350718204573223f, 0.355310901280416f, 0.359895036534988f, + 0.364470499879150f, 0.369037181064066f, 0.373594970052516f, 0.378143757021541f, + 0.382683432365090f, 0.387213886696666f, 0.391735010851956f, 0.396246695891466f, + 0.400748833103141f, 0.405241314004990f, 0.409724030347695f, 0.414196874117224f, + 0.418659737537428f, 0.423112513072644f, 0.427555093430282f, 0.431987371563412f, + 0.436409240673342f, 0.440820594212194f, 0.445221325885468f, 0.449611329654607f, + 0.453990499739547f, 0.458358730621271f, 0.462715917044350f, 0.467061954019477f, + 0.471396736825998f, 0.475720161014437f, 0.480032122409011f, 0.484332517110141f, + 0.488621241496955f, 0.492898192229784f, 0.497163266252654f, 0.501416360795769f, + 0.505657373377985f, 0.509886201809281f, 0.514102744193222f, 0.518306898929413f, + 0.522498564715949f, 0.526677640551852f, 0.530844025739509f, 0.534997619887097f, + 0.539138322911000f, 0.543266035038224f, 0.547380656808796f, 0.551482089078169f, + 0.555570233019602f, 0.559644990126546f, 0.563706262215017f, 0.567753951425961f, + 0.571787960227612f, 0.575808191417845f, 0.579814548126514f, 0.583806933817786f, + 0.587785252292473f, 0.591749407690343f, 0.595699304492433f, 0.599634847523352f, + 0.603555941953571f, 0.607462493301711f, 0.611354407436817f, 0.615231590580627f, + 0.619093949309834f, 0.622941390558334f, 0.626773821619470f, 0.630591150148264f, + 0.634393284163646f, 0.638180132050665f, 0.641951602562703f, 0.645707604823667f, + 0.649448048330184f, 0.653172842953777f, 0.656881898943041f, 0.660575126925805f, + 0.664252437911282f, 0.667913743292216f, 0.671558954847018f, 0.675187984741890f, + 0.678800745532942f, 0.682397150168297f, 0.685977111990193f, 0.689540544737067f, + 0.693087362545636f, 0.696617479952964f, 0.700130811898524f, 0.703627273726243f, + 0.707106781186548f, 0.710569250438390f, 0.714014598051268f, 0.717442741007240f, + 0.720853596702919f, 0.724247082951467f, 0.727623117984575f, 0.730981620454432f, + 0.734322509435686f, 0.737645704427393f, 0.740951125354959f, 0.744238692572067f, + 0.747508326862597f, 0.750759949442534f, 0.753993481961869f, 0.757208846506485f, + 0.760405965600031f, 0.763584762205797f, 0.766745159728562f, 0.769887082016445f, + 0.773010453362737f, 0.776115198507728f, 0.779201242640517f, 0.782268511400816f, + 0.785316930880745f, 0.788346427626606f, 0.791356928640660f, 0.794348361382882f, + 0.797320653772707f, 0.800273734190774f, 0.803207531480645f, 0.806121974950521f, + 0.809016994374948f, 0.811892519996505f, 0.814748482527489f, 0.817584813151584f, + 0.820401443525514f, 0.823198305780696f, 0.825975332524873f, 0.828732456843738f, + 0.831469612302545f, 0.834186732947712f, 0.836883753308409f, 0.839560608398136f, + 0.842217233716286f, 0.844853565249707f, 0.847469539474234f, 0.850065093356229f, + 0.852640164354092f, 0.855194690419775f, 0.857728610000272f, 0.860241862039105f, + 0.862734385977792f, 0.865206121757311f, 0.867657009819544f, 0.870086991108711f, + 0.872496007072797f, 0.874883999664958f, 0.877250911344924f, 0.879596685080383f, + 0.881921264348355f, 0.884224593136556f, 0.886506615944746f, 0.888767277786068f, + 0.891006524188368f, 0.893224301195515f, 0.895420555368697f, 0.897595233787707f, + 0.899748284052221f, 0.901879654283062f, 0.903989293123443f, 0.906077149740215f, + 0.908143173825081f, 0.910187315595818f, 0.912209525797468f, 0.914209755703531f, + 0.916187957117136f, 0.918144082372204f, 0.920078084334595f, 0.921989916403245f, + 0.923879532511287f, 0.925746887127164f, 0.927591935255724f, 0.929414632439304f, + 0.931214934758804f, 0.932992798834739f, 0.934748181828292f, 0.936481041442343f, + 0.938191335922484f, 0.939879024058033f, 0.941544065183021f, 0.943186419177173f, + 0.944806046466878f, 0.946402908026138f, 0.947976965377510f, 0.949528180593037f, + 0.951056516295154f, 0.952561935657595f, 0.954044402406280f, 0.955503880820186f, + 0.956940335732209f, 0.958353732530011f, 0.959744037156857f, 0.961111216112432f, + 0.962455236453647f, 0.963776065795440f, 0.965073672311547f, 0.966348024735277f, + 0.967599092360260f, 0.968826845041188f, 0.970031253194544f, 0.971212287799312f, + 0.972369920397677f, 0.973504123095711f, 0.974614868564045f, 0.975702130038529f, + 0.976765881320873f, 0.977806096779282f, 0.978822751349072f, 0.979815820533276f, + 0.980785280403230f, 0.981731107599154f, 0.982653279330712f, 0.983551773377562f, + 0.984426568089892f, 0.985277642388941f, 0.986104975767509f, 0.986908548290446f, + 0.987688340595138f, 0.988444333891970f, 0.989176509964781f, 0.989884851171301f, + 0.990569340443577f, 0.991229961288385f, 0.991866697787626f, 0.992479534598710f, + 0.993068456954926f, 0.993633450665799f, 0.994174502117428f, 0.994691598272820f, + 0.995184726672197f, 0.995653875433303f, 0.996099033251687f, 0.996520189400975f, + 0.996917333733128f, 0.997290456678690f, 0.997639549247016f, 0.997964603026487f, + 0.998265610184716f, 0.998542563468736f, 0.998795456205172f, 0.999024282300407f, + 0.999229036240723f, 0.999409713092437f, 0.999566308502021f, 0.999698818696204f, + 0.999807240482065f, 0.999891571247108f, 0.999951808959328f, 0.999987952167257f +}; + +const float ivas_mdft_coeff_cos_twid_240[IVAS_240_PT_LEN + 1] = +{ + 1.0000000000f, 0.9999785817f, 0.9999143276f, 0.9998072405f, 0.9996573250f, 0.9994645875f, + 0.9992290362f, 0.9989506814f, 0.9986295348f, 0.9982656102f, 0.9978589232f, 0.9974094913f, + 0.9969173337f, 0.9963824715f, 0.9958049276f, 0.9951847267f, 0.9945218954f, 0.9938164621f, + 0.9930684570f, 0.9922779121f, 0.9914448614f, 0.9905693404f, 0.9896513868f, 0.9886910398f, + 0.9876883406f, 0.9866433321f, 0.9855560591f, 0.9844265681f, 0.9832549076f, 0.9820411277f, + 0.9807852804f, 0.9794874196f, 0.9781476007f, 0.9767658813f, 0.9753423205f, 0.9738769793f, + 0.9723699204f, 0.9708212084f, 0.9692309097f, 0.9675990924f, 0.9659258263f, 0.9642111832f, + 0.9624552365f, 0.9606580614f, 0.9588197349f, 0.9569403357f, 0.9550199445f, 0.9530586433f, + 0.9510565163f, 0.9490136492f, 0.9469301295f, 0.9448060465f, 0.9426414911f, 0.9404365561f, + 0.9381913359f, 0.9359059268f, 0.9335804265f, 0.9312149348f, 0.9288095529f, 0.9263643839f, + 0.9238795325f, 0.9213551052f, 0.9187912101f, 0.9161879571f, 0.9135454576f, 0.9108638249f, + 0.9081431738f, 0.9053836209f, 0.9025852843f, 0.8997482841f, 0.8968727415f, 0.8939587800f, + 0.8910065242f, 0.8880161007f, 0.8849876375f, 0.8819212643f, 0.8788171127f, 0.8756753154f, + 0.8724960071f, 0.8692793239f, 0.8660254038f, 0.8627343860f, 0.8594064115f, 0.8560416229f, + 0.8526401644f, 0.8492021815f, 0.8457278217f, 0.8422172337f, 0.8386705679f, 0.8350879763f, + 0.8314696123f, 0.8278156309f, 0.8241261886f, 0.8204014435f, 0.8166415552f, 0.8128466846f, + 0.8090169944f, 0.8051526486f, 0.8012538127f, 0.7973206538f, 0.7933533403f, 0.7893520422f, + 0.7853169309f, 0.7812481792f, 0.7771459615f, 0.7730104534f, 0.7688418321f, 0.7646402762f, + 0.7604059656f, 0.7561390818f, 0.7518398075f, 0.7475083269f, 0.7431448255f, 0.7387494902f, + 0.7343225094f, 0.7298640727f, 0.7253743710f, 0.7208535967f, 0.7163019434f, 0.7117196062f, + 0.7071067812f, 0.7024636661f, 0.6977904598f, 0.6930873625f, 0.6883545757f, 0.6835923020f, + 0.6788007455f, 0.6739801115f, 0.6691306064f, 0.6642524379f, 0.6593458151f, 0.6544109481f, + 0.6494480483f, 0.6444573284f, 0.6394390020f, 0.6343932842f, 0.6293203910f, 0.6242205399f, + 0.6190939493f, 0.6139408388f, 0.6087614290f, 0.6035559420f, 0.5983246006f, 0.5930676290f, + 0.5877852523f, 0.5824776969f, 0.5771451900f, 0.5717879602f, 0.5664062369f, 0.5610002507f, + 0.5555702330f, 0.5501164166f, 0.5446390350f, 0.5391383229f, 0.5336145159f, 0.5280678507f, + 0.5224985647f, 0.5169068967f, 0.5112930861f, 0.5056573734f, 0.5000000000f, 0.4943212083f, + 0.4886212415f, 0.4829003438f, 0.4771587603f, 0.4713967368f, 0.4656145203f, 0.4598123584f, + 0.4539904997f, 0.4481491936f, 0.4422886902f, 0.4364092407f, 0.4305110968f, 0.4245945113f, + 0.4186597375f, 0.4127070298f, 0.4067366431f, 0.4007488331f, 0.3947438564f, 0.3887219702f, + 0.3826834324f, 0.3766285017f, 0.3705574375f, 0.3644704999f, 0.3583679495f, 0.3522500479f, + 0.3461170571f, 0.3399692397f, 0.3338068592f, 0.3276301796f, 0.3214394653f, 0.3152349816f, + 0.3090169944f, 0.3027857698f, 0.2965415750f, 0.2902846773f, 0.2840153447f, 0.2777338459f, + 0.2714404499f, 0.2651354262f, 0.2588190451f, 0.2524915770f, 0.2461532930f, 0.2398044647f, + 0.2334453639f, 0.2270762630f, 0.2206974350f, 0.2143091531f, 0.2079116908f, 0.2015053223f, + 0.1950903220f, 0.1886669647f, 0.1822355255f, 0.1757962799f, 0.1693495038f, 0.1628954734f, + 0.1564344650f, 0.1499667556f, 0.1434926220f, 0.1370123417f, 0.1305261922f, 0.1240344515f, + 0.1175373975f, 0.1110353086f, 0.1045284633f, 0.0980171403f, 0.0915016187f, 0.0849821774f, + 0.0784590957f, 0.0719326532f, 0.0654031292f, 0.0588708037f, 0.0523359562f, 0.0457988669f, + 0.0392598158f, 0.0327190828f, 0.0261769483f, 0.0196336925f, 0.0130895956f, 0.0065449380f, + 0.000000000f +}; + +const float ivas_mdft_coeff_sin_twid_240[IVAS_240_PT_LEN] = +{ + 0.0000000000f, 0.0065449380f, 0.0130895956f, 0.0196336925f, 0.0261769483f, 0.0327190828f, + 0.0392598158f, 0.0457988669f, 0.0523359562f, 0.0588708037f, 0.0654031292f, 0.0719326532f, + 0.0784590957f, 0.0849821774f, 0.0915016187f, 0.0980171403f, 0.1045284633f, 0.1110353086f, + 0.1175373975f, 0.1240344515f, 0.1305261922f, 0.1370123417f, 0.1434926220f, 0.1499667556f, + 0.1564344650f, 0.1628954734f, 0.1693495038f, 0.1757962799f, 0.1822355255f, 0.1886669647f, + 0.1950903220f, 0.2015053223f, 0.2079116908f, 0.2143091531f, 0.2206974350f, 0.2270762630f, + 0.2334453639f, 0.2398044647f, 0.2461532930f, 0.2524915770f, 0.2588190451f, 0.2651354262f, + 0.2714404499f, 0.2777338459f, 0.2840153447f, 0.2902846773f, 0.2965415750f, 0.3027857698f, + 0.3090169944f, 0.3152349816f, 0.3214394653f, 0.3276301796f, 0.3338068592f, 0.3399692397f, + 0.3461170571f, 0.3522500479f, 0.3583679495f, 0.3644704999f, 0.3705574375f, 0.3766285017f, + 0.3826834324f, 0.3887219702f, 0.3947438564f, 0.4007488331f, 0.4067366431f, 0.4127070298f, + 0.4186597375f, 0.4245945113f, 0.4305110968f, 0.4364092407f, 0.4422886902f, 0.4481491936f, + 0.4539904997f, 0.4598123584f, 0.4656145203f, 0.4713967368f, 0.4771587603f, 0.4829003438f, + 0.4886212415f, 0.4943212083f, 0.5000000000f, 0.5056573734f, 0.5112930861f, 0.5169068967f, + 0.5224985647f, 0.5280678507f, 0.5336145159f, 0.5391383229f, 0.5446390350f, 0.5501164166f, + 0.5555702330f, 0.5610002507f, 0.5664062369f, 0.5717879602f, 0.5771451900f, 0.5824776969f, + 0.5877852523f, 0.5930676290f, 0.5983246006f, 0.6035559420f, 0.6087614290f, 0.6139408388f, + 0.6190939493f, 0.6242205399f, 0.6293203910f, 0.6343932842f, 0.6394390020f, 0.6444573284f, + 0.6494480483f, 0.6544109481f, 0.6593458151f, 0.6642524379f, 0.6691306064f, 0.6739801115f, + 0.6788007455f, 0.6835923020f, 0.6883545757f, 0.6930873625f, 0.6977904598f, 0.7024636661f, + 0.7071067812f, 0.7117196062f, 0.7163019434f, 0.7208535967f, 0.7253743710f, 0.7298640727f, + 0.7343225094f, 0.7387494902f, 0.7431448255f, 0.7475083269f, 0.7518398075f, 0.7561390818f, + 0.7604059656f, 0.7646402762f, 0.7688418321f, 0.7730104534f, 0.7771459615f, 0.7812481792f, + 0.7853169309f, 0.7893520422f, 0.7933533403f, 0.7973206538f, 0.8012538127f, 0.8051526486f, + 0.8090169944f, 0.8128466846f, 0.8166415552f, 0.8204014435f, 0.8241261886f, 0.8278156309f, + 0.8314696123f, 0.8350879763f, 0.8386705679f, 0.8422172337f, 0.8457278217f, 0.8492021815f, + 0.8526401644f, 0.8560416229f, 0.8594064115f, 0.8627343860f, 0.8660254038f, 0.8692793239f, + 0.8724960071f, 0.8756753154f, 0.8788171127f, 0.8819212643f, 0.8849876375f, 0.8880161007f, + 0.8910065242f, 0.8939587800f, 0.8968727415f, 0.8997482841f, 0.9025852843f, 0.9053836209f, + 0.9081431738f, 0.9108638249f, 0.9135454576f, 0.9161879571f, 0.9187912101f, 0.9213551052f, + 0.9238795325f, 0.9263643839f, 0.9288095529f, 0.9312149348f, 0.9335804265f, 0.9359059268f, + 0.9381913359f, 0.9404365561f, 0.9426414911f, 0.9448060465f, 0.9469301295f, 0.9490136492f, + 0.9510565163f, 0.9530586433f, 0.9550199445f, 0.9569403357f, 0.9588197349f, 0.9606580614f, + 0.9624552365f, 0.9642111832f, 0.9659258263f, 0.9675990924f, 0.9692309097f, 0.9708212084f, + 0.9723699204f, 0.9738769793f, 0.9753423205f, 0.9767658813f, 0.9781476007f, 0.9794874196f, + 0.9807852804f, 0.9820411277f, 0.9832549076f, 0.9844265681f, 0.9855560591f, 0.9866433321f, + 0.9876883406f, 0.9886910398f, 0.9896513868f, 0.9905693404f, 0.9914448614f, 0.9922779121f, + 0.9930684570f, 0.9938164621f, 0.9945218954f, 0.9951847267f, 0.9958049276f, 0.9963824715f, + 0.9969173337f, 0.9974094913f, 0.9978589232f, 0.9982656102f, 0.9986295348f, 0.9989506814f, + 0.9992290362f, 0.9994645875f, 0.9996573250f, 0.9998072405f, 0.9999143276f, 0.9999785817f +}; + +const float ivas_mdft_coeff_cos_twid_160[IVAS_160_PT_LEN + 1] = +{ + 1.0000000000f, 0.9999518090f, 0.9998072405f, 0.9995663085f, 0.9992290362f, 0.9987954562f, + 0.9982656102f, 0.9976395492f, 0.9969173337f, 0.9960990333f, 0.9951847267f, 0.9941745021f, + 0.9930684570f, 0.9918666978f, 0.9905693404f, 0.9891765100f, 0.9876883406f, 0.9861049758f, + 0.9844265681f, 0.9826532793f, 0.9807852804f, 0.9788227513f, 0.9767658813f, 0.9746148686f, + 0.9723699204f, 0.9700312532f, 0.9675990924f, 0.9650736723f, 0.9624552365f, 0.9597440372f, + 0.9569403357f, 0.9540444024f, 0.9510565163f, 0.9479769654f, 0.9448060465f, 0.9415440652f, + 0.9381913359f, 0.9347481818f, 0.9312149348f, 0.9275919353f, 0.9238795325f, 0.9200780843f, + 0.9161879571f, 0.9122095258f, 0.9081431738f, 0.9039892931f, 0.8997482841f, 0.8954205554f, + 0.8910065242f, 0.8865066159f, 0.8819212643f, 0.8772509113f, 0.8724960071f, 0.8676570098f, + 0.8627343860f, 0.8577286100f, 0.8526401644f, 0.8474695395f, 0.8422172337f, 0.8368837533f, + 0.8314696123f, 0.8259753325f, 0.8204014435f, 0.8147484825f, 0.8090169944f, 0.8032075315f, + 0.7973206538f, 0.7913569286f, 0.7853169309f, 0.7792012426f, 0.7730104534f, 0.7667451597f, + 0.7604059656f, 0.7539934820f, 0.7475083269f, 0.7409511254f, 0.7343225094f, 0.7276231180f, + 0.7208535967f, 0.7140145981f, 0.7071067812f, 0.7001308119f, 0.6930873625f, 0.6859771120f, + 0.6788007455f, 0.6715589548f, 0.6642524379f, 0.6568818989f, 0.6494480483f, 0.6419516026f, + 0.6343932842f, 0.6267738216f, 0.6190939493f, 0.6113544074f, 0.6035559420f, 0.5956993045f, + 0.5877852523f, 0.5798145481f, 0.5717879602f, 0.5637062622f, 0.5555702330f, 0.5473806568f, + 0.5391383229f, 0.5308440257f, 0.5224985647f, 0.5141027442f, 0.5056573734f, 0.4971632663f, + 0.4886212415f, 0.4800321224f, 0.4713967368f, 0.4627159170f, 0.4539904997f, 0.4452213259f, + 0.4364092407f, 0.4275550934f, 0.4186597375f, 0.4097240303f, 0.4007488331f, 0.3917350109f, + 0.3826834324f, 0.3735949701f, 0.3644704999f, 0.3553109013f, 0.3461170571f, 0.3368898534f, + 0.3276301796f, 0.3183389281f, 0.3090169944f, 0.2996652770f, 0.2902846773f, 0.2808760993f, + 0.2714404499f, 0.2619786385f, 0.2524915770f, 0.2429801799f, 0.2334453639f, 0.2238880479f, + 0.2143091531f, 0.2047096027f, 0.1950903220f, 0.1854522381f, 0.1757962799f, 0.1661233781f, + 0.1564344650f, 0.1467304745f, 0.1370123417f, 0.1272810034f, 0.1175373975f, 0.1077824630f, + 0.0980171403f, 0.0882423705f, 0.0784590957f, 0.0686682589f, 0.0588708037f, 0.0490676743f, + 0.0392598158f, 0.0294481732f, 0.0196336925f, 0.0098173193f, 0.000000000f +}; + +const float ivas_mdft_coeff_sin_twid_160[IVAS_160_PT_LEN] = +{ + 0.0000000000f, 0.0098173193f, 0.0196336925f, 0.0294481732f, 0.0392598158f, 0.0490676743f, + 0.0588708037f, 0.0686682589f, 0.0784590957f, 0.0882423705f, 0.0980171403f, 0.1077824630f, + 0.1175373975f, 0.1272810034f, 0.1370123417f, 0.1467304745f, 0.1564344650f, 0.1661233781f, + 0.1757962799f, 0.1854522381f, 0.1950903220f, 0.2047096027f, 0.2143091531f, 0.2238880479f, + 0.2334453639f, 0.2429801799f, 0.2524915770f, 0.2619786385f, 0.2714404499f, 0.2808760993f, + 0.2902846773f, 0.2996652770f, 0.3090169944f, 0.3183389281f, 0.3276301796f, 0.3368898534f, + 0.3461170571f, 0.3553109013f, 0.3644704999f, 0.3735949701f, 0.3826834324f, 0.3917350109f, + 0.4007488331f, 0.4097240303f, 0.4186597375f, 0.4275550934f, 0.4364092407f, 0.4452213259f, + 0.4539904997f, 0.4627159170f, 0.4713967368f, 0.4800321224f, 0.4886212415f, 0.4971632663f, + 0.5056573734f, 0.5141027442f, 0.5224985647f, 0.5308440257f, 0.5391383229f, 0.5473806568f, + 0.5555702330f, 0.5637062622f, 0.5717879602f, 0.5798145481f, 0.5877852523f, 0.5956993045f, + 0.6035559420f, 0.6113544074f, 0.6190939493f, 0.6267738216f, 0.6343932842f, 0.6419516026f, + 0.6494480483f, 0.6568818989f, 0.6642524379f, 0.6715589548f, 0.6788007455f, 0.6859771120f, + 0.6930873625f, 0.7001308119f, 0.7071067812f, 0.7140145981f, 0.7208535967f, 0.7276231180f, + 0.7343225094f, 0.7409511254f, 0.7475083269f, 0.7539934820f, 0.7604059656f, 0.7667451597f, + 0.7730104534f, 0.7792012426f, 0.7853169309f, 0.7913569286f, 0.7973206538f, 0.8032075315f, + 0.8090169944f, 0.8147484825f, 0.8204014435f, 0.8259753325f, 0.8314696123f, 0.8368837533f, + 0.8422172337f, 0.8474695395f, 0.8526401644f, 0.8577286100f, 0.8627343860f, 0.8676570098f, + 0.8724960071f, 0.8772509113f, 0.8819212643f, 0.8865066159f, 0.8910065242f, 0.8954205554f, + 0.8997482841f, 0.9039892931f, 0.9081431738f, 0.9122095258f, 0.9161879571f, 0.9200780843f, + 0.9238795325f, 0.9275919353f, 0.9312149348f, 0.9347481818f, 0.9381913359f, 0.9415440652f, + 0.9448060465f, 0.9479769654f, 0.9510565163f, 0.9540444024f, 0.9569403357f, 0.9597440372f, + 0.9624552365f, 0.9650736723f, 0.9675990924f, 0.9700312532f, 0.9723699204f, 0.9746148686f, + 0.9767658813f, 0.9788227513f, 0.9807852804f, 0.9826532793f, 0.9844265681f, 0.9861049758f, + 0.9876883406f, 0.9891765100f, 0.9905693404f, 0.9918666978f, 0.9930684570f, 0.9941745021f, + 0.9951847267f, 0.9960990333f, 0.9969173337f, 0.9976395492f, 0.9982656102f, 0.9987954562f, + 0.9992290362f, 0.9995663085f, 0.9998072405f, 0.9999518090f +}; + +const float ivas_mdft_coeff_cos_twid_80[IVAS_80_PT_LEN + 1] = +{ + 1.0000000000f, 0.9998072405f, 0.9992290362f, 0.9982656102f, 0.9969173337f, 0.9951847267f, + 0.9930684570f, 0.9905693404f, 0.9876883406f, 0.9844265681f, 0.9807852804f, 0.9767658813f, + 0.9723699204f, 0.9675990924f, 0.9624552365f, 0.9569403357f, 0.9510565163f, 0.9448060465f, + 0.9381913359f, 0.9312149348f, 0.9238795325f, 0.9161879571f, 0.9081431738f, 0.8997482841f, + 0.8910065242f, 0.8819212643f, 0.8724960071f, 0.8627343860f, 0.8526401644f, 0.8422172337f, + 0.8314696123f, 0.8204014435f, 0.8090169944f, 0.7973206538f, 0.7853169309f, 0.7730104534f, + 0.7604059656f, 0.7475083269f, 0.7343225094f, 0.7208535967f, 0.7071067812f, 0.6930873625f, + 0.6788007455f, 0.6642524379f, 0.6494480483f, 0.6343932842f, 0.6190939493f, 0.6035559420f, + 0.5877852523f, 0.5717879602f, 0.5555702330f, 0.5391383229f, 0.5224985647f, 0.5056573734f, + 0.4886212415f, 0.4713967368f, 0.4539904997f, 0.4364092407f, 0.4186597375f, 0.4007488331f, + 0.3826834324f, 0.3644704999f, 0.3461170571f, 0.3276301796f, 0.3090169944f, 0.2902846773f, + 0.2714404499f, 0.2524915770f, 0.2334453639f, 0.2143091531f, 0.1950903220f, 0.1757962799f, + 0.1564344650f, 0.1370123417f, 0.1175373975f, 0.0980171403f, 0.0784590957f, 0.0588708037f, + 0.0392598158f, 0.0196336925f, 0.000000000f +}; + +const float ivas_mdft_coeff_sin_twid_80[IVAS_80_PT_LEN] = +{ + 0.0000000000f, 0.0196336925f, 0.0392598158f, 0.0588708037f, 0.0784590957f, 0.0980171403f, + 0.1175373975f, 0.1370123417f, 0.1564344650f, 0.1757962799f, 0.1950903220f, 0.2143091531f, + 0.2334453639f, 0.2524915770f, 0.2714404499f, 0.2902846773f, 0.3090169944f, 0.3276301796f, + 0.3461170571f, 0.3644704999f, 0.3826834324f, 0.4007488331f, 0.4186597375f, 0.4364092407f, + 0.4539904997f, 0.4713967368f, 0.4886212415f, 0.5056573734f, 0.5224985647f, 0.5391383229f, + 0.5555702330f, 0.5717879602f, 0.5877852523f, 0.6035559420f, 0.6190939493f, 0.6343932842f, + 0.6494480483f, 0.6642524379f, 0.6788007455f, 0.6930873625f, 0.7071067812f, 0.7208535967f, + 0.7343225094f, 0.7475083269f, 0.7604059656f, 0.7730104534f, 0.7853169309f, 0.7973206538f, + 0.8090169944f, 0.8204014435f, 0.8314696123f, 0.8422172337f, 0.8526401644f, 0.8627343860f, + 0.8724960071f, 0.8819212643f, 0.8910065242f, 0.8997482841f, 0.9081431738f, 0.9161879571f, + 0.9238795325f, 0.9312149348f, 0.9381913359f, 0.9448060465f, 0.9510565163f, 0.9569403357f, + 0.9624552365f, 0.9675990924f, 0.9723699204f, 0.9767658813f, 0.9807852804f, 0.9844265681f, + 0.9876883406f, 0.9905693404f, 0.9930684570f, 0.9951847267f, 0.9969173337f, 0.9982656102f, + 0.9992290362f, 0.9998072405f +}; + +const float ivas_mdft_coeff_cos_twid_40[IVAS_40_PT_LEN + 1] = +{ + 1.0000000000f, 0.9992290362f, 0.9969173337f, 0.9930684570f, 0.9876883406f, 0.9807852804f, + 0.9723699204f, 0.9624552365f, 0.9510565163f, 0.9381913359f, 0.9238795325f, 0.9081431738f, + 0.8910065242f, 0.8724960071f, 0.8526401644f, 0.8314696123f, 0.8090169944f, 0.7853169309f, + 0.7604059656f, 0.7343225094f, 0.7071067812f, 0.6788007455f, 0.6494480483f, 0.6190939493f, + 0.5877852523f, 0.5555702330f, 0.5224985647f, 0.4886212415f, 0.4539904997f, 0.4186597375f, + 0.3826834324f, 0.3461170571f, 0.3090169944f, 0.2714404499f, 0.2334453639f, 0.1950903220f, + 0.1564344650f, 0.1175373975f, 0.0784590957f, 0.0392598158f, 0.000000000f +}; + +const float ivas_mdft_coeff_sin_twid_40[IVAS_40_PT_LEN] = +{ + 0.0000000000f, 0.0392598158f, 0.0784590957f, 0.1175373975f, 0.1564344650f, 0.1950903220f, + 0.2334453639f, 0.2714404499f, 0.3090169944f, 0.3461170571f, 0.3826834324f, 0.4186597375f, + 0.4539904997f, 0.4886212415f, 0.5224985647f, 0.5555702330f, 0.5877852523f, 0.6190939493f, + 0.6494480483f, 0.6788007455f, 0.7071067812f, 0.7343225094f, 0.7604059656f, 0.7853169309f, + 0.8090169944f, 0.8314696123f, 0.8526401644f, 0.8724960071f, 0.8910065242f, 0.9081431738f, + 0.9238795325f, 0.9381913359f, 0.9510565163f, 0.9624552365f, 0.9723699204f, 0.9807852804f, + 0.9876883406f, 0.9930684570f, 0.9969173337f, 0.9992290362f +}; + +const float ivas_sin_twiddle_480[IVAS_480_PT_LEN >> 1] = +{ + -0.000818122995607253f, -0.00736304124977957f, -0.0139076440957708f, -0.0204516511845773f, + -0.0269947821927154f, -0.0335367568342299f, -0.0400772948727007f, -0.0466161161332467f, + -0.0531529405145281f, -0.0596874880007445f, -0.0662194786736303f, -0.0727486327244454f, + -0.0792746704659607f, -0.0857973123444399f, -0.0923162789516138f, -0.0988312910366500f, + -0.105342069518114f, -0.111848335495926f, -0.118349810263305f, -0.124846215318711f, + -0.131337272377774f, -0.137822703385212f, -0.144302230526747f, -0.150775576241001f, + -0.157242463231389f, -0.163702614477995f, -0.170155753249442f, -0.176601603114742f, + -0.183039887955141f, -0.189470331975943f, -0.195892659718330f, -0.202306596071156f, + -0.208711866282735f, -0.215108195972610f, -0.221495311143304f, -0.227872938192063f, + -0.234240803922570f, -0.240598635556650f, -0.246946160745958f, -0.253283107583640f, + -0.259609204615985f, -0.265924180854051f, -0.272227765785273f, -0.278519689385053f, + -0.284799682128326f, -0.291067475001103f, -0.297322799511998f, -0.303565387703730f, + -0.309794972164597f, -0.316011286039934f, -0.322214063043544f, -0.328403037469105f, + -0.334577944201551f, -0.340738518728429f, -0.346884497151231f, -0.353015616196696f, + -0.359131613228090f, -0.365232226256457f, -0.371317193951838f, -0.377386255654469f, + -0.383439151385947f, -0.389475621860365f, -0.395495408495417f, -0.401498253423481f, + -0.407483899502658f, -0.413452090327791f, -0.419402570241451f, -0.425335084344881f, + -0.431249378508924f, -0.437145199384900f, -0.443022294415467f, -0.448880411845434f, + -0.454719300732547f, -0.460538710958240f, -0.466338393238348f, -0.472118099133784f, + -0.477877581061184f, -0.483616592303511f, -0.489334887020625f, -0.495032220259813f, + -0.500708347966279f, -0.506363026993606f, -0.511996015114162f, -0.517607071029487f, + -0.523195954380619f, -0.528762425758396f, -0.534306246713712f, -0.539827179767727f, + -0.545324988422047f, -0.550799437168844f, -0.556250291500956f, -0.561677317921925f, + -0.567080283956001f, -0.572458958158102f, -0.577813110123727f, -0.583142510498826f, + -0.588446930989624f, -0.593726144372402f, -0.598979924503229f, -0.604208046327650f, + -0.609410285890327f, -0.614586420344631f, -0.619736227962191f, -0.624859488142386f, + -0.629955981421804f, -0.635025489483634f, -0.640067795167023f, -0.645082682476378f, + -0.650069936590618f, -0.655029343872374f, -0.659960691877147f, -0.664863769362399f, + -0.669738366296610f, -0.674584273868271f, -0.679401284494831f, -0.684189191831585f, + -0.688947790780520f, -0.693676877499095f, -0.698376249408973f, -0.703045705204703f, + -0.707685044862340f, -0.712294069648014f, -0.716872582126442f, -0.721420386169390f, + -0.725937286964068f, -0.730423091021479f, -0.734877606184707f, -0.739300641637149f, + -0.743692007910687f, -0.748051516893805f, -0.752378981839648f, -0.756674217374021f, + -0.760937039503328f, -0.765167265622459f, -0.769364714522605f, -0.773529206399025f, + -0.777660562858748f, -0.781758606928213f, -0.785823163060853f, -0.789854057144609f, + -0.793851116509396f, -0.797814169934493f, -0.801743047655882f, -0.805637581373517f, + -0.809497604258536f, -0.813322950960406f, -0.817113457614006f, -0.820868961846646f, + -0.824589302785025f, -0.828274321062119f, -0.831923858824010f, -0.835537759736646f, + -0.839115868992540f, -0.842658033317402f, -0.846164100976699f, -0.849633921782164f, + -0.853067347098221f, -0.856464229848356f, -0.859824424521420f, -0.863147787177854f, + -0.866434175455865f, -0.869683448577516f, -0.872895467354761f, -0.876070094195407f, + -0.879207193109004f, -0.882306629712678f, -0.885368271236879f, -0.888391986531075f, + -0.891377646069366f, -0.894325121956035f, -0.897234287931024f, -0.900105019375345f, + -0.902937193316419f, -0.905730688433339f, -0.908485385062073f, -0.911201165200584f, + -0.913877912513892f, -0.916515512339049f, -0.919113851690058f, -0.921672819262709f, + -0.924192305439348f, -0.926672202293573f, -0.929112403594856f, -0.931512804813095f, + -0.933873303123092f, -0.936193797408954f, -0.938474188268430f, -0.940714378017165f, + -0.942914270692887f, -0.945073772059515f, -0.947192789611197f, -0.949271232576274f, + -0.951309011921168f, -0.953306040354194f, -0.955262232329299f, -0.957177504049732f, + -0.959051773471624f, -0.960884960307514f, -0.962676986029777f, -0.964427773873996f, + -0.966137248842248f, -0.967805337706313f, -0.969431969010818f, -0.971017073076290f, + -0.972560582002147f, -0.974062429669605f, -0.975522551744506f, -0.976940885680082f, + -0.978317370719628f, -0.979651947899104f, -0.980944560049668f, -0.982195151800116f, + -0.983403669579260f, -0.984570061618221f, -0.985694277952645f, -0.986776270424848f, + -0.987815992685872f, -0.988813400197476f, -0.989768450234042f, -0.990681101884405f, + -0.991551316053606f, -0.992379055464567f, -0.993164284659685f, -0.993906970002356f, + -0.994607079678411f, -0.995264583697482f, -0.995879453894286f, -0.996451663929828f, + -0.996981189292537f, -0.997468007299307f, -0.997912097096476f, -0.998313439660714f, + -0.998672017799843f, -0.998987816153568f, -0.999260821194138f, -0.999491021226926f, + -0.999678406390929f, -0.999822968659191f, -0.999924701839145f, -0.999983601572879f +}; + +const float ivas_cos_twiddle_480[IVAS_480_PT_LEN >> 1] = +{ + 0.999999665337326f, 0.999972892444367f, 0.999903284040864f, 0.999790843108610f, + 0.999635574464198f, 0.999437484758823f, 0.999196582477986f, 0.998912877941140f, + 0.998586383301244f, 0.998217112544241f, 0.997805081488460f, 0.997350307783942f, + 0.996852810911678f, 0.996312612182778f, 0.995729734737558f, 0.995104203544548f, + 0.994436045399422f, 0.993725288923851f, 0.992971964564277f, 0.992176104590609f, + 0.991337743094838f, 0.990456915989581f, 0.989533661006540f, 0.988568017694885f, + 0.987560027419562f, 0.986509733359519f, 0.985417180505858f, 0.984282415659908f, + 0.983105487431216f, 0.981886446235473f, 0.980625344292344f, 0.979322235623241f, + 0.977977176049001f, 0.976590223187499f, 0.975161436451181f, 0.973690877044515f, + 0.972178607961371f, 0.970624693982323f, 0.969029201671875f, 0.967392199375607f, + 0.965713757217249f, 0.963993947095677f, 0.962232842681832f, 0.960430519415566f, + 0.958587054502409f, 0.956702526910263f, 0.954777017366017f, 0.952810608352092f, + 0.950803384102905f, 0.948755430601263f, 0.946666835574676f, 0.944537688491606f, + 0.942368080557626f, 0.940158104711519f, 0.937907855621296f, 0.935617429680138f, + 0.933286925002268f, 0.930916441418752f, 0.928506080473216f, 0.926055945417500f, + 0.923566141207236f, 0.921036774497350f, 0.918467953637493f, 0.915859788667400f, + 0.913212391312179f, 0.910525874977521f, 0.907800354744844f, 0.905035947366364f, + 0.902232771260093f, 0.899390946504765f, 0.896510594834693f, 0.893591839634558f, + 0.890634805934118f, 0.887639620402854f, 0.884606411344546f, 0.881535308691775f, + 0.878426444000357f, 0.875279950443708f, 0.872095962807140f, 0.868874617482085f, + 0.865616052460258f, 0.862320407327736f, 0.858987823258990f, 0.855618443010829f, + 0.852212410916289f, 0.848769872878448f, 0.845290976364179f, 0.841775870397828f, + 0.838224705554838f, 0.834637633955290f, 0.831014809257393f, 0.827356386650900f, + 0.823662522850458f, 0.819933376088899f, 0.816169106110459f, 0.812369874163934f, + 0.808535842995778f, 0.804667176843123f, 0.800764041426753f, 0.796826603943998f, + 0.792855033061574f, 0.788849498908361f, 0.784810173068109f, 0.780737228572095f, + 0.776630839891703f, 0.772491182930959f, 0.768318435018988f, 0.764112774902423f, + 0.759874382737746f, 0.755603440083571f, 0.751300129892866f, 0.746964636505118f, + 0.742597145638433f, 0.738197844381584f, 0.733766921185995f, 0.729304565857669f, + 0.724810969549055f, 0.720286324750863f, 0.715730825283819f, 0.711144666290356f, + 0.706528044226263f, 0.701881156852263f, 0.697204203225545f, 0.692497383691237f, + 0.687760899873822f, 0.682994954668502f, 0.678199752232508f, 0.673375497976352f, + 0.668522398555031f, 0.663640661859171f, 0.658730497006124f, 0.653792114331011f, + 0.648825725377709f, 0.643831542889792f, 0.638809780801415f, 0.633760654228152f, + 0.628684379457781f, 0.623581173941019f, 0.618451256282204f, 0.613294846229936f, + 0.608112164667659f, 0.602903433604202f, 0.597668876164268f, 0.592408716578875f, + 0.587123180175754f, 0.581812493369691f, 0.576476883652835f, 0.571116579584947f, + 0.565731810783613f, 0.560322807914407f, 0.554889802681009f, 0.549433027815281f, + 0.543952717067296f, 0.538449105195327f, 0.532922427955790f, 0.527372922093143f, + 0.521800825329746f, 0.516206376355680f, 0.510589814818519f, 0.504951381313066f, + 0.499291317371047f, 0.493609865450762f, 0.487907268926702f, 0.482183772079123f, + 0.476439620083580f, 0.470675059000427f, 0.464890335764274f, 0.459085698173413f, + 0.453261394879198f, 0.447417675375397f, 0.441554789987504f, 0.435672989862017f, + 0.429772526955677f, 0.423853654024676f, 0.417916624613831f, 0.411961693045722f, + 0.405989114409798f, 0.399999144551449f, 0.393992040061048f, 0.387968058262959f, + 0.381927457204511f, 0.375870495644949f, 0.369797433044349f, 0.363708529552499f, + 0.357604045997758f, 0.351484243875885f, 0.345349385338836f, 0.339199733183530f, + 0.333035550840599f, 0.326857102363098f, 0.320664652415198f, 0.314458466260842f, + 0.308238809752391f, 0.302005949319228f, 0.295760151956351f, 0.289501685212929f, + 0.283230817180850f, 0.276947816483228f, 0.270652952262902f, 0.264346494170904f, + 0.258028712354909f, 0.251699877447663f, 0.245360260555389f, 0.239010133246176f, + 0.232649767538342f, 0.226279435888785f, 0.219899411181310f, 0.213509966714943f, + 0.207111376192219f, 0.200703913707458f, 0.194287853735029f, 0.187863471117585f, + 0.181431041054297f, 0.174990839089060f, 0.168543141098691f, 0.162088223281113f, + 0.155626362143520f, 0.149157834490539f, 0.142682917412363f, 0.136201888272891f, + 0.129715024697841f, 0.123222604562857f, 0.116724905981611f, 0.110222207293883f, + 0.103714787053643f, 0.0972029240171147f, 0.0906868971308382f, 0.0841669855197180f, + 0.0776434684750678f, 0.0711166254426455f, 0.0645867360106837f, 0.0580540798979125f, + 0.0515189369415777f, 0.0449815870854525f, 0.0384423103678466f, 0.0319013869096108f, + 0.0253590969021360f, 0.0188157205953513f, 0.0122715382857199f, 0.00572683030423125f +}; + +const float ivas_sin_twiddle_320[IVAS_320_PT_LEN >> 1] = +{ + -0.00122718432228885f, -0.0110444371277961f, -0.0208606254474658f, -0.0306748031766366f, + -0.0404860244044325f, -0.0502933435049309f, -0.0600958152283046f, -0.0698924947919266f, + -0.0796824379714301f, -0.0894647011917154f, -0.0992383416178931f, -0.109002417246156f, + -0.118755986994574f, -0.128498110793793f, -0.138227849677645f, -0.147944265873646f, + -0.157646422893378f, -0.167333385622756f, -0.177004220412149f, -0.186657995166372f, + -0.196293779434521f, -0.205910644499654f, -0.215507663468299f, -0.225083911359793f, + -0.234638465195433f, -0.244170404087435f, -0.253678809327687f, -0.263162764476304f, + -0.272621355449949f, -0.282053670609936f, -0.291458800850100f, -0.300835839684411f, + -0.310183883334351f, -0.319502030816016f, -0.328789384026957f, -0.338045047832741f, + -0.347268130153228f, -0.356457742048546f, -0.365612997804774f, -0.374733015019307f, + -0.383816914685905f, -0.392863821279410f, -0.401872862840135f, -0.410843171057904f, + -0.419773881355741f, -0.428664132973198f, -0.437513069049322f, -0.446319836705237f, + -0.455083587126344f, -0.463803475644138f, -0.472478661817616f, -0.481108309514277f, + -0.489691586990715f, -0.498227666972782f, -0.506715726735323f, -0.515154948181472f, + -0.523544517921500f, -0.531883627351215f, -0.540171472729893f, -0.548407255257747f, + -0.556590181152914f, -0.564719461727967f, -0.572794313465923f, -0.580813958095765f, + -0.588777622667452f, -0.596684539626417f, -0.604533946887548f, -0.612325087908634f, + -0.620057211763289f, -0.627729573213322f, -0.635341432780567f, -0.642892056818157f, + -0.650380717581231f, -0.657806693297079f, -0.665169268234704f, -0.672467732773812f, + -0.679701383473197f, -0.686869523138552f, -0.693971460889654f, -0.701006512226963f, + -0.707973999097587f, -0.714873249960641f, -0.721703599851967f, -0.728464390448225f, + -0.735154970130347f, -0.741774694046338f, -0.748322924173428f, -0.754799029379569f, + -0.761202385484262f, -0.767532375318718f, -0.773788388785342f, -0.779969822916534f, + -0.786076081932809f, -0.792106577300212f, -0.798060727787049f, -0.803937959519903f, + -0.809737706038947f, -0.815459408352540f, -0.821102514991105f, -0.826666482060278f, + -0.832150773293332f, -0.837554860102865f, -0.842878221631741f, -0.848120344803297f, + -0.853280724370791f, -0.858358862966099f, -0.863354271147654f, -0.868266467447619f, + -0.873094978418290f, -0.877839338677730f, -0.882499090954623f, -0.887073786132345f, + -0.891562983292255f, -0.895966249756185f, -0.900283161128150f, -0.904513301335247f, + -0.908656262667757f, -0.912711645818445f, -0.916679059921043f, -0.920558122587921f, + -0.924348459946945f, -0.928049706677513f, -0.931661506045761f, -0.935183509938948f, + -0.938615378899008f, -0.941956782155269f, -0.945207397656329f, -0.948366912101102f, + -0.951435020969008f, -0.954411428549330f, -0.957295847969710f, -0.960088001223801f, + -0.962787619198060f, -0.965394441697689f, -0.967908217471710f, -0.970328704237180f, + -0.972655668702548f, -0.974888886590136f, -0.977028142657754f, -0.979073230719452f, + -0.981023953665385f, -0.982880123480816f, -0.984641561264233f, -0.986308097244599f, + -0.987879570797705f, -0.989355830461661f, -0.990736733951487f, -0.992022148172831f, + -0.993211949234795f, -0.994306022461875f, -0.995304262405018f, -0.996206572851780f, + -0.997012866835602f, -0.997723066644192f, -0.998337103827013f, -0.998854919201885f, + -0.999276462860683f, -0.999601694174153f, -0.999830581795823f, -0.999963103665029f +}; + +const float ivas_cos_twiddle_320[IVAS_320_PT_LEN >> 1] = +{ + 0.999999247009036f, 0.999939008344274f, 0.999782393476671f, 0.999529417501093f, + 0.999180104799892f, 0.998734489040553f, 0.998192613172451f, 0.997554529422708f, + 0.996820299291166f, 0.995989993544452f, 0.995063692209162f, 0.994041484564148f, + 0.992923469131909f, 0.991709753669100f, 0.990400455156143f, 0.988995699785954f, + 0.987495622951779f, 0.985900369234146f, 0.984210092386929f, 0.982424955322528f, + 0.980545130096168f, 0.978570797889318f, 0.976502148992226f, 0.974339382785576f, + 0.972082707721278f, 0.969732341302371f, 0.967288510062064f, 0.964751449541896f, + 0.962121404269042f, 0.959398627732738f, 0.956583382359856f, 0.953675939489602f, + 0.950676579347373f, 0.947585591017741f, 0.944403272416596f, 0.941129930262426f, + 0.937765880046764f, 0.934311446003768f, 0.930766961078984f, 0.927132766897244f, + 0.923409213729749f, 0.919596660460302f, 0.915695474550723f, 0.911706032005430f, + 0.907628717335198f, 0.903463923520102f, 0.899212051971637f, 0.894873512494035f, + 0.890448723244758f, 0.885938110694205f, 0.881342109584601f, 0.876661162888100f, + 0.871895721764085f, 0.867046245515693f, 0.862113201545536f, 0.857097065310660f, + 0.851998320276715f, 0.846817457871361f, 0.841554977436898f, 0.836211386182145f, + 0.830787199133548f, 0.825282939085545f, 0.819699136550175f, 0.814036329705948f, + 0.808295064345975f, 0.802475893825360f, 0.796579379007870f, 0.790606088211875f, + 0.784556597155575f, 0.778431488901510f, 0.772231353800360f, 0.765956789434051f, + 0.759608400558158f, 0.753186799043613f, 0.746692603817734f, 0.740126440804576f, + 0.733488942864595f, 0.726780749733659f, 0.720002507961382f, 0.713154870848815f, + 0.706238498385475f, 0.699254057185735f, 0.692202220424575f, 0.685083667772700f, + 0.677899085331031f, 0.670649165564576f, 0.663334607235692f, 0.655956115336735f, + 0.648514401022112f, 0.641010181539737f, 0.633444180161903f, 0.625817126115569f, + 0.618129754512079f, 0.610382806276310f, 0.602577028075254f, 0.594713172246063f, + 0.586791996723527f, 0.578814264967032f, 0.570780745886967f, 0.562692213770623f, + 0.554549448207560f, 0.546353234014470f, 0.538104361159537f, 0.529803624686295f, + 0.521451824637002f, 0.513049765975530f, 0.504598258509780f, 0.496098116813633f, + 0.487550160148436f, 0.478955212384045f, 0.470314101919413f, 0.461627661602753f, + 0.452896728651262f, 0.444122144570429f, 0.435304755072932f, 0.426445409997122f, + 0.417544963225117f, 0.408604272600502f, 0.399624199845647f, 0.390605610478656f, + 0.381549373729942f, 0.372456362458452f, 0.363327453067539f, 0.354163525420491f, + 0.344965462755725f, 0.335734151601668f, 0.326470481691301f, 0.317175345876411f, + 0.307849640041535f, 0.298494263017610f, 0.289110116495347f, 0.279698104938318f, + 0.270259135495788f, 0.260794117915276f, 0.251303964454877f, 0.241789589795333f, + 0.232251910951879f, 0.222691847185850f, 0.213110319916091f, 0.203508252630144f, + 0.193886570795236f, 0.184246201769091f, 0.174588074710540f, 0.164913120489970f, + 0.155222271599607f, 0.145516462063635f, 0.135796627348180f, 0.126063704271142f, + 0.116318630911905f, 0.106562346520921f, 0.0967957914291864f, 0.0870199069576083f, + 0.0772356353262796f, 0.0674439195636641f, 0.0576457034157070f, 0.0478419312548745f, + 0.0380335479891316f, 0.0282214989708730f, 0.0184067299058048f, 0.00859018676179777f +}; + +const float ivas_sin_twiddle_160[IVAS_160_PT_LEN >> 1] = +{ + -0.00245436679646029f, -0.0220875270185783f, -0.0417121720785753f, -0.0613207363022086f, + -0.0809056602147038f, -0.100459393455076f, -0.119974397686940f, -0.139443149504679f, + -0.158858143333861f, -0.178211894324786f, -0.197496941238030f, -0.216705849320900f, + -0.235831213173673f, -0.254865659604515f, -0.273801850471989f, -0.292632485514050f, + -0.311350305162432f, -0.329948093341349f, -0.348418680249435f, -0.366754945123831f, + -0.384949818985382f, -0.402996287363860f, -0.420887393002174f, -0.438616238538528f, + -0.456175989165483f, -0.473559875264908f, -0.490761195017794f, -0.507773316987935f, + -0.524589682678469f, -0.541203809060310f, -0.557609291071472f, -0.573799804086349f, + -0.589769106353971f, -0.605511041404326f, -0.621019540421789f, -0.636288624584773f, + -0.651312407370671f, -0.666085096825230f, -0.680600997795453f, -0.694854514125194f, + -0.708840150812579f, -0.722552516128436f, -0.735986323694910f, -0.749136394523459f, + -0.761997659011457f, -0.774565158896617f, -0.786834049168500f, -0.798799599936358f, + -0.810457198252595f, -0.821802349891147f, -0.832830681080094f, -0.843537940187827f, + -0.853919999362139f, -0.863972856121587f, -0.873692634898524f, -0.883075588533209f, + -0.892118099718401f, -0.900816682393908f, -0.909167983090522f, -0.917168782222852f, + -0.924815995330528f, -0.932106674267327f, -0.939038008337734f, -0.945607325380521f, + -0.951812092798916f, -0.957649918536965f, -0.963118552001719f, -0.968215884930876f, + -0.972939952205560f, -0.977288932607910f, -0.981261149523195f, -0.984855071586178f, + -0.988069313271492f, -0.990902635427780f, -0.993353945755417f, -0.995422299227608f, + -0.997106898454717f, -0.998407093991674f, -0.999322384588350f, -0.999852417382795f +}; + +const float ivas_cos_twiddle_160[IVAS_160_PT_LEN >> 1] = +{ + 0.999996988037278f, 0.999756040817060f, 0.999129668611881f, 0.998118112900149f, + 0.996721763655847f, 0.994941159198190f, 0.992776985984091f, 0.990230078343521f, + 0.987301418157858f, 0.983992134481354f, 0.980303503105861f, 0.976236946068990f, + 0.971794031105889f, 0.966976471044852f, 0.961786123146989f, 0.956224988390216f, + 0.950295210697844f, 0.943999076112052f, 0.937339011912575f, 0.930317585680942f, + 0.922937504310623f, 0.915201612963474f, 0.907112893972869f, 0.898674465693954f, + 0.889889581301463f, 0.880761627535558f, 0.871294123396174f, 0.861490718786378f, + 0.851355193105265f, 0.840891453790923f, 0.830103534814044f, 0.818995595122750f, + 0.807571917039244f, 0.795836904608884f, 0.783795081902349f, 0.771451091271519f, + 0.758809691559762f, 0.745875756267305f, 0.732654271672413f, 0.719150334909079f, + 0.705369152001986f, 0.691316035859480f, 0.676996404225349f, 0.662415777590172f, + 0.647579777063073f, 0.632494122204673f, 0.617164628822086f, 0.601597206726822f, + 0.585797857456439f, 0.569772671960834f, 0.553527828254070f, 0.537069589032630f, + 0.520404299261031f, 0.503538383725718f, 0.486478344558187f, 0.469230758728290f, + 0.451802275508688f, 0.434199613911428f, 0.416429560097637f, 0.398498964761330f, + 0.380414740488332f, 0.362183859091351f, 0.343813348922205f, 0.325310292162263f, + 0.306681822092128f, 0.287935120341621f, 0.269077414121127f, 0.250115973435366f, + 0.231058108280671f, 0.211911165826842f, 0.192682527584672f, 0.173379606560240f, + 0.154009844397046f, 0.134580708507126f, 0.115099689192216f, 0.0955742967560992f, + 0.0760120586092433f, 0.0564205163668375f, 0.0368072229413588f, 0.0171797396307788f +}; + +const float ivas_sin_twiddle_80[IVAS_80_PT_LEN >> 1] = +{ + -0.00490871880799799f, -0.0441642771270674f, -0.0833517373318975f, -0.122410675199216f, + -0.161280864677880f, -0.199902370753082f, -0.238215641861795f, -0.276161601716971f, + -0.313681740398891f, -0.350718204573223f, -0.387213886696666f, -0.423112513072644f, + -0.458358730621271f, -0.492898192229784f, -0.526677640551852f, -0.559644990126546f, + -0.591749407690343f, -0.622941390558334f, -0.653172842953777f, -0.682397150168297f, + -0.710569250438390f, -0.737645704427393f, -0.763584762205797f, -0.788346427626606f, + -0.811892519996505f, -0.834186732947712f, -0.855194690419775f, -0.874883999664958f, + -0.893224301195515f, -0.910187315595818f, -0.925746887127164f, -0.939879024058033f, + -0.952561935657595f, -0.963776065795440f, -0.973504123095711f, -0.981731107599154f, + -0.988444333891970f, -0.993633450665799f, -0.997290456678690f, -0.999409713092437f +}; + +const float ivas_cos_twiddle_80[IVAS_80_PT_LEN >> 1] = +{ + 0.999987952167257f, 0.999024282300407f, 0.996520189400975f, 0.992479534598710f, + 0.986908548290446f, 0.979815820533276f, 0.971212287799312f, 0.961111216112432f, + 0.949528180593037f, 0.936481041442343f, 0.921989916403245f, 0.906077149740215f, + 0.888767277786068f, 0.870086991108712f, 0.850065093356229f, 0.828732456843738f, + 0.806121974950521f, 0.782268511400816f, 0.757208846506485f, 0.730981620454432f, + 0.703627273726243f, 0.675187984741891f, 0.645707604823667f, 0.615231590580627f, + 0.583806933817786f, 0.551482089078169f, 0.518306898929413f, 0.484332517110141f, + 0.449611329654607f, 0.414196874117224f, 0.378143757021541f, 0.341507569660936f, + 0.304344802380877f, 0.266712757474898f, 0.228669460828619f, 0.190273572448036f, + 0.151584296010041f, 0.112661287574648f, 0.0735645635996675f, 0.0343544083996823f +}; + +const int16_t dirac_gains_P_idx[16] = +{ + -1, 1, 0, 1, 4, 3, 2, 3, 4, 8, 7, 6, 5, 6, 7, 8 +}; + +const float dirac_gains_norm_term[9] = +{ + 1.000000e+00f, 7.071068e-01f, 1.000000e+00f, 4.082483e-01f, 2.041242e-01f, 1.000000e+00f, 2.886751e-01f, 9.128709e-02f, 3.726780e-02f +}; + +const float dirac_gains_Pnm[91][9] = +{ + {-1.000000e+00f,-0.000000e+00f,1.000000e+00f,-0.000000e+00f,0.000000e+00f,-1.000000e+00f,-0.000000e+00f,0.000000e+00f,-0.000000e+00f}, + {-9.998477e-01f,1.745221e-02f,9.995431e-01f,-5.234867e-02f,9.137391e-04f,-9.990864e-01f,1.046734e-01f,-4.568000e-03f,7.973384e-05f}, + {-9.993909e-01f,3.489930e-02f,9.981732e-01f,-1.046341e-01f,3.653884e-03f,-9.963478e-01f,2.090770e-01f,-1.825829e-02f,6.375900e-04f}, + {-9.986295e-01f,5.233614e-02f,9.958913e-01f,-1.567932e-01f,8.217215e-03f,-9.917910e-01f,3.129416e-01f,-4.102976e-02f,2.150287e-03f}, + {-9.975641e-01f,6.975590e-02f,9.927012e-01f,-2.087579e-01f,1.459766e-02f,-9.854290e-01f,4.159897e-01f,-7.281048e-02f,5.091363e-03f}, + {-9.961947e-01f,8.715547e-02f,9.886059e-01f,-2.604715e-01f,2.278823e-02f,-9.772766e-01f,5.179674e-01f,-1.135075e-01f,9.930593e-03f}, + {-9.945220e-01f,1.045284e-01f,9.836106e-01f,-3.118673e-01f,3.277856e-02f,-9.673560e-01f,6.186047e-01f,-1.629950e-01f,1.713145e-02f}, + {-9.925461e-01f,1.218695e-01f,9.777218e-01f,-3.628832e-01f,4.455650e-02f,-9.556924e-01f,7.176415e-01f,-2.211219e-01f,2.715038e-02f}, + {-9.902681e-01f,1.391732e-01f,9.709461e-01f,-4.134564e-01f,5.810756e-02f,-9.423163e-01f,8.148217e-01f,-2.877103e-01f,4.043508e-02f}, + {-9.876884e-01f,1.564343e-01f,9.632925e-01f,-4.635251e-01f,7.341509e-02f,-9.272624e-01f,9.098945e-01f,-3.625562e-01f,5.742321e-02f}, + {-9.848077e-01f,1.736484e-01f,9.547693e-01f,-5.130307e-01f,9.046126e-02f,-9.105685e-01f,1.002619e+00f,-4.454347e-01f,7.854224e-02f}, + {-9.816272e-01f,1.908091e-01f,9.453878e-01f,-5.619103e-01f,1.092244e-01f,-8.922793e-01f,1.092752e+00f,-5.360881e-01f,1.042050e-01f}, + {-9.781475e-01f,2.079115e-01f,9.351591e-01f,-6.101044e-01f,1.296816e-01f,-8.724410e-01f,1.180063e+00f,-6.342387e-01f,1.348115e-01f}, + {-9.743701e-01f,2.249510e-01f,9.240957e-01f,-6.575567e-01f,1.518089e-01f,-8.511051e-01f,1.264332e+00f,-7.395903e-01f,1.707479e-01f}, + {-9.702957e-01f,2.419219e-01f,9.122107e-01f,-7.042075e-01f,1.755787e-01f,-8.283265e-01f,1.345341e+00f,-8.518162e-01f,2.123816e-01f}, + {-9.659258e-01f,2.588191e-01f,8.995191e-01f,-7.500002e-01f,2.009620e-01f,-8.041639e-01f,1.422883e+00f,-9.705719e-01f,2.600640e-01f}, + {-9.612616e-01f,2.756374e-01f,8.860360e-01f,-7.948789e-01f,2.279279e-01f,-7.786796e-01f,1.496760e+00f,-1.095492e+00f,3.141272e-01f}, + {-9.563048e-01f,2.923716e-01f,8.717782e-01f,-8.387891e-01f,2.564435e-01f,-7.519395e-01f,1.566788e+00f,-1.226191e+00f,3.748840e-01f}, + {-9.510565e-01f,3.090171e-01f,8.567626e-01f,-8.816782e-01f,2.864747e-01f,-7.240118e-01f,1.632789e+00f,-1.362268e+00f,4.426280e-01f}, + {-9.455186e-01f,3.255681e-01f,8.410082e-01f,-9.234920e-01f,3.179837e-01f,-6.949692e-01f,1.694595e+00f,-1.503298e+00f,5.176268e-01f}, + {-9.396926e-01f,3.420202e-01f,8.245332e-01f,-9.641815e-01f,3.509334e-01f,-6.648846e-01f,1.752055e+00f,-1.648848e+00f,6.001316e-01f}, + {-9.335804e-01f,3.583678e-01f,8.073587e-01f,-1.003696e+00f,3.852825e-01f,-6.338369e-01f,1.805025e+00f,-1.798461e+00f,6.903643e-01f}, + {-9.271840e-01f,3.746064e-01f,7.895051e-01f,-1.041987e+00f,4.209899e-01f,-6.019047e-01f,1.853375e+00f,-1.951675e+00f,7.885275e-01f}, + {-9.205049e-01f,3.907311e-01f,7.709939e-01f,-1.079010e+00f,4.580124e-01f,-5.691693e-01f,1.896987e+00f,-2.108013e+00f,8.947984e-01f}, + {-9.135456e-01f,4.067366e-01f,7.518480e-01f,-1.114717e+00f,4.963039e-01f,-5.357154e-01f,1.935757e+00f,-2.266981e+00f,1.009325e+00f}, + {-9.063079e-01f,4.226184e-01f,7.320906e-01f,-1.149067e+00f,5.358188e-01f,-5.016273e-01f,1.969593e+00f,-2.428084e+00f,1.132234e+00f}, + {-8.987941e-01f,4.383712e-01f,7.117461e-01f,-1.182016e+00f,5.765077e-01f,-4.669925e-01f,1.998415e+00f,-2.590808e+00f,1.263622e+00f}, + {-8.910065e-01f,4.539906e-01f,6.908387e-01f,-1.213526e+00f,6.183225e-01f,-4.318987e-01f,2.022162e+00f,-2.754647e+00f,1.403563e+00f}, + {-8.829476e-01f,4.694716e-01f,6.693946e-01f,-1.243556e+00f,6.612108e-01f,-3.964354e-01f,2.040781e+00f,-2.919073e+00f,1.552099e+00f}, + {-8.746198e-01f,4.848095e-01f,6.474397e-01f,-1.272072e+00f,7.051207e-01f,-3.606927e-01f,2.054234e+00f,-3.083563e+00f,1.709246e+00f}, + {-8.660253e-01f,5.000000e-01f,6.250001e-01f,-1.299038e+00f,7.500000e-01f,-3.247595e-01f,2.062500e+00f,-3.247595e+00f,1.875000e+00f}, + {-8.571672e-01f,5.150381e-01f,6.021037e-01f,-1.324421e+00f,7.957926e-01f,-2.887278e-01f,2.065570e+00f,-3.410637e+00f,2.049318e+00f}, + {-8.480480e-01f,5.299194e-01f,5.787782e-01f,-1.348191e+00f,8.424437e-01f,-2.526874e-01f,2.063448e+00f,-3.572164e+00f,2.232136e+00f}, + {-8.386706e-01f,5.446391e-01f,5.550525e-01f,-1.370318e+00f,8.898951e-01f,-2.167299e-01f,2.056155e+00f,-3.731644e+00f,2.423358e+00f}, + {-8.290377e-01f,5.591928e-01f,5.309552e-01f,-1.390776e+00f,9.380897e-01f,-1.809446e-01f,2.043725e+00f,-3.888559e+00f,2.622865e+00f}, + {-8.191521e-01f,5.735765e-01f,5.065152e-01f,-1.409539e+00f,9.869699e-01f,-1.454202e-01f,2.026202e+00f,-4.042392e+00f,2.830513e+00f}, + {-8.090171e-01f,5.877852e-01f,4.817629e-01f,-1.426585e+00f,1.036474e+00f,-1.102460e-01f,2.003651e+00f,-4.192627e+00f,3.046121e+00f}, + {-7.986355e-01f,6.018150e-01f,4.567280e-01f,-1.441893e+00f,1.086544e+00f,-7.550830e-02f,1.976144e+00f,-4.338763e+00f,3.269493e+00f}, + {-7.880108e-01f,6.156614e-01f,4.314414e-01f,-1.455444e+00f,1.137117e+00f,-4.129366e-02f,1.943771e+00f,-4.480302e+00f,3.500396e+00f}, + {-7.771459e-01f,6.293205e-01f,4.059335e-01f,-1.467221e+00f,1.188133e+00f,-7.685401e-03f,1.906632e+00f,-4.616763e+00f,3.738582e+00f}, + {-7.660444e-01f,6.427876e-01f,3.802360e-01f,-1.477211e+00f,1.239528e+00f,2.523343e-02f,1.864843e+00f,-4.747667e+00f,3.983766e+00f}, + {-7.547096e-01f,6.560589e-01f,3.543800e-01f,-1.485402e+00f,1.291240e+00f,5.738307e-02f,1.818529e+00f,-4.872555e+00f,4.235647e+00f}, + {-7.431449e-01f,6.691306e-01f,3.283964e-01f,-1.491783e+00f,1.343207e+00f,8.868646e-02f,1.767831e+00f,-4.990988e+00f,4.493906e+00f}, + {-7.313538e-01f,6.819984e-01f,3.023174e-01f,-1.496346e+00f,1.395365e+00f,1.190676e-01f,1.712898e+00f,-5.102528e+00f,4.758184e+00f}, + {-7.193397e-01f,6.946585e-01f,2.761744e-01f,-1.499086e+00f,1.447651e+00f,1.484544e-01f,1.653893e+00f,-5.206765e+00f,5.028115e+00f}, + {-7.071068e-01f,7.071068e-01f,2.500000e-01f,-1.500000e+00f,1.500000e+00f,1.767767e-01f,1.590990e+00f,-5.303301e+00f,5.303301e+00f}, + {-6.946585e-01f,7.193397e-01f,2.238256e-01f,-1.499086e+00f,1.552349e+00f,2.039685e-01f,1.524373e+00f,-5.391762e+00f,5.583331e+00f}, + {-6.819984e-01f,7.313538e-01f,1.976825e-01f,-1.496346e+00f,1.604635e+00f,2.299670e-01f,1.454233e+00f,-5.471792e+00f,5.867779e+00f}, + {-6.691307e-01f,7.431448e-01f,1.716038e-01f,-1.491783e+00f,1.656792e+00f,2.547115e-01f,1.380777e+00f,-5.543053e+00f,6.156183e+00f}, + {-6.560589e-01f,7.547096e-01f,1.456200e-01f,-1.485402e+00f,1.708760e+00f,2.781472e-01f,1.304214e+00f,-5.605237e+00f,6.448089e+00f}, + {-6.427876e-01f,7.660444e-01f,1.197639e-01f,-1.477212e+00f,1.760472e+00f,3.002205e-01f,1.224767e+00f,-5.658049e+00f,6.743000e+00f}, + {-6.293203e-01f,7.771461e-01f,9.406608e-02f,-1.467221e+00f,1.811868e+00f,3.208840e-01f,1.142662e+00f,-5.701226e+00f,7.040430e+00f}, + {-6.156614e-01f,7.880108e-01f,6.855855e-02f,-1.455444e+00f,1.862883e+00f,3.400929e-01f,1.058135e+00f,-5.734527e+00f,7.339859e+00f}, + {-6.018151e-01f,7.986354e-01f,4.327216e-02f,-1.441893e+00f,1.913455e+00f,3.578070e-01f,9.714287e-01f,-5.757732e+00f,7.640767e+00f}, + {-5.877852e-01f,8.090171e-01f,1.823708e-02f,-1.426585e+00f,1.963526e+00f,3.739910e-01f,8.827875e-01f,-5.770657e+00f,7.942629e+00f}, + {-5.735764e-01f,8.191520e-01f,-6.515074e-03f,-1.409539e+00f,2.013030e+00f,3.886124e-01f,7.924678e-01f,-5.773133e+00f,8.244888e+00f}, + {-5.591928e-01f,8.290376e-01f,-3.095508e-02f,-1.390776e+00f,2.061910e+00f,4.016449e-01f,7.007229e-01f,-5.765026e+00f,8.547005e+00f}, + {-5.446391e-01f,8.386706e-01f,-5.505246e-02f,-1.370318e+00f,2.110105e+00f,4.130656e-01f,6.078163e-01f,-5.746228e+00f,8.848414e+00f}, + {-5.299193e-01f,8.480480e-01f,-7.877823e-02f,-1.348191e+00f,2.157557e+00f,4.228564e-01f,5.140093e-01f,-5.716654e+00f,9.148557e+00f}, + {-5.150380e-01f,8.571674e-01f,-1.021038e-01f,-1.324421e+00f,2.204208e+00f,4.310043e-01f,4.195672e-01f,-5.676254e+00f,9.446875e+00f}, + {-5.000001e-01f,8.660253e-01f,-1.249999e-01f,-1.299038e+00f,2.250000e+00f,4.375000e-01f,3.247599e-01f,-5.625000e+00f,9.742785e+00f}, + {-4.848095e-01f,8.746197e-01f,-1.474395e-01f,-1.272072e+00f,2.294879e+00f,4.423398e-01f,2.298521e-01f,-5.562896e+00f,1.003573e+01f}, + {-4.694715e-01f,8.829476e-01f,-1.693947e-01f,-1.243556e+00f,2.338789e+00f,4.455244e-01f,1.351145e-01f,-5.489975e+00f,1.032514e+01f}, + {-4.539906e-01f,8.910065e-01f,-1.908388e-01f,-1.213526e+00f,2.381678e+00f,4.470587e-01f,4.081347e-02f,-5.406296e+00f,1.061045e+01f}, + {-4.383711e-01f,8.987940e-01f,-2.117461e-01f,-1.182016e+00f,2.423492e+00f,4.469530e-01f,-5.278682e-02f,-5.311945e+00f,1.089110e+01f}, + {-4.226183e-01f,9.063078e-01f,-2.320906e-01f,-1.149067e+00f,2.464181e+00f,4.452218e-01f,-1.454199e-01f,-5.207041e+00f,1.116653e+01f}, + {-4.067367e-01f,9.135454e-01f,-2.518479e-01f,-1.114717e+00f,2.503696e+00f,4.418841e-01f,-2.368270e-01f,-5.091725e+00f,1.143620e+01f}, + {-3.907311e-01f,9.205048e-01f,-2.709937e-01f,-1.079010e+00f,2.541987e+00f,4.369636e-01f,-3.267503e-01f,-4.966168e+00f,1.169956e+01f}, + {-3.746066e-01f,9.271839e-01f,-2.895049e-01f,-1.041988e+00f,2.579010e+00f,4.304885e-01f,-4.149371e-01f,-4.830570e+00f,1.195608e+01f}, + {-3.583679e-01f,9.335804e-01f,-3.073587e-01f,-1.003696e+00f,2.614717e+00f,4.224911e-01f,-5.011396e-01f,-4.685155e+00f,1.220525e+01f}, + {-3.420201e-01f,9.396927e-01f,-3.245333e-01f,-9.641814e-01f,2.649067e+00f,4.130083e-01f,-5.851153e-01f,-4.530170e+00f,1.244654e+01f}, + {-3.255681e-01f,9.455186e-01f,-3.410081e-01f,-9.234920e-01f,2.682016e+00f,4.020810e-01f,-6.666291e-01f,-4.365895e+00f,1.267948e+01f}, + {-3.090170e-01f,9.510564e-01f,-3.567626e-01f,-8.816779e-01f,2.713525e+00f,3.897543e-01f,-7.454509e-01f,-4.192628e+00f,1.290358e+01f}, + {-2.923717e-01f,9.563047e-01f,-3.717781e-01f,-8.387894e-01f,2.743556e+00f,3.760769e-01f,-8.213612e-01f,-4.010692e+00f,1.311838e+01f}, + {-2.756374e-01f,9.612617e-01f,-3.860361e-01f,-7.948790e-01f,2.772072e+00f,3.611015e-01f,-8.941467e-01f,-3.820433e+00f,1.332343e+01f}, + {-2.588190e-01f,9.659258e-01f,-3.995190e-01f,-7.499999e-01f,2.799038e+00f,3.448846e-01f,-9.636030e-01f,-3.622222e+00f,1.351832e+01f}, + {-2.419219e-01f,9.702957e-01f,-4.122107e-01f,-7.042072e-01f,2.824421e+00f,3.274858e-01f,-1.029536e+00f,-3.416446e+00f,1.370262e+01f}, + {-2.249510e-01f,9.743701e-01f,-4.240956e-01f,-6.575566e-01f,2.848191e+00f,3.089685e-01f,-1.091760e+00f,-3.203517e+00f,1.387596e+01f}, + {-2.079118e-01f,9.781476e-01f,-4.351591e-01f,-6.101051e-01f,2.870318e+00f,2.893990e-01f,-1.150101e+00f,-2.983865e+00f,1.403797e+01f}, + {-1.908090e-01f,9.816272e-01f,-4.453879e-01f,-5.619099e-01f,2.890776e+00f,2.688461e-01f,-1.204397e+00f,-2.757931e+00f,1.418832e+01f}, + {-1.736482e-01f,9.848077e-01f,-4.547695e-01f,-5.130303e-01f,2.909539e+00f,2.473820e-01f,-1.254495e+00f,-2.526181e+00f,1.432668e+01f}, + {-1.564344e-01f,9.876883e-01f,-4.632923e-01f,-4.635254e-01f,2.926584e+00f,2.250811e-01f,-1.300254e+00f,-2.289093e+00f,1.445277e+01f}, + {-1.391731e-01f,9.902681e-01f,-4.709463e-01f,-4.134560e-01f,2.941893e+00f,2.020205e-01f,-1.341547e+00f,-2.047161e+00f,1.456631e+01f}, + {-1.218693e-01f,9.925461e-01f,-4.777218e-01f,-3.628827e-01f,2.955444e+00f,1.782789e-01f,-1.378258e+00f,-1.800889e+00f,1.466707e+01f}, + {-1.045285e-01f,9.945219e-01f,-4.836107e-01f,-3.118677e-01f,2.967221e+00f,1.539375e-01f,-1.410285e+00f,-1.550796e+00f,1.475483e+01f}, + {-8.715577e-02f,9.961947e-01f,-4.886058e-01f,-2.604724e-01f,2.977212e+00f,1.290786e-01f,-1.437538e+00f,-1.297406e+00f,1.482941e+01f}, + {-6.975648e-02f,9.975641e-01f,-4.927011e-01f,-2.087597e-01f,2.985402e+00f,1.037861e-01f,-1.459940e+00f,-1.041256e+00f,1.489065e+01f}, + {-5.233594e-02f,9.986295e-01f,-4.958915e-01f,-1.567926e-01f,2.991783e+00f,7.814553e-02f,-1.477429e+00f,-7.828888e-01f,1.493841e+01f}, + {-3.489946e-02f,9.993909e-01f,-4.981730e-01f,-1.046346e-01f,2.996346e+00f,5.224292e-02f,-1.489957e+00f,-5.228543e-01f,1.497260e+01f}, + {-1.745235e-02f,9.998478e-01f,-4.995431e-01f,-5.234908e-02f,2.999086e+00f,2.616524e-02f,-1.497488e+00f,-2.617055e-01f,1.499315e+01f}, + {-4.371139e-08f,1.000000e+00f,-5.000000e-01f,-1.311342e-07f,3.000000e+00f,6.556709e-08f,-1.500000e+00f,-6.556709e-07f,1.500000e+01f} +}; + +const float dirac_gains_trg_term[181][2] = +{ + {-1.000000e+00f,8.742278e-08f}, + {-9.998477e-01f,-1.745246e-02f}, + {-9.993908e-01f,-3.489945e-02f}, + {-9.986295e-01f,-5.233605e-02f}, + {-9.975641e-01f,-6.975647e-02f}, + {-9.961947e-01f,-8.715564e-02f}, + {-9.945219e-01f,-1.045285e-01f}, + {-9.925461e-01f,-1.218693e-01f}, + {-9.902681e-01f,-1.391732e-01f}, + {-9.876884e-01f,-1.564344e-01f}, + {-9.848077e-01f,-1.736483e-01f}, + {-9.816272e-01f,-1.908090e-01f}, + {-9.781476e-01f,-2.079116e-01f}, + {-9.743701e-01f,-2.249511e-01f}, + {-9.702957e-01f,-2.419219e-01f}, + {-9.659258e-01f,-2.588191e-01f}, + {-9.612617e-01f,-2.756374e-01f}, + {-9.563048e-01f,-2.923716e-01f}, + {-9.510565e-01f,-3.090170e-01f}, + {-9.455186e-01f,-3.255681e-01f}, + {-9.396926e-01f,-3.420202e-01f}, + {-9.335805e-01f,-3.583679e-01f}, + {-9.271839e-01f,-3.746065e-01f}, + {-9.205049e-01f,-3.907312e-01f}, + {-9.135455e-01f,-4.067366e-01f}, + {-9.063078e-01f,-4.226183e-01f}, + {-8.987941e-01f,-4.383711e-01f}, + {-8.910065e-01f,-4.539906e-01f}, + {-8.829476e-01f,-4.694716e-01f}, + {-8.746198e-01f,-4.848095e-01f}, + {-8.660254e-01f,-5.000001e-01f}, + {-8.571673e-01f,-5.150380e-01f}, + {-8.480480e-01f,-5.299193e-01f}, + {-8.386706e-01f,-5.446390e-01f}, + {-8.290377e-01f,-5.591928e-01f}, + {-8.191521e-01f,-5.735765e-01f}, + {-8.090171e-01f,-5.877852e-01f}, + {-7.986355e-01f,-6.018151e-01f}, + {-7.880108e-01f,-6.156614e-01f}, + {-7.771459e-01f,-6.293205e-01f}, + {-7.660444e-01f,-6.427876e-01f}, + {-7.547097e-01f,-6.560590e-01f}, + {-7.431448e-01f,-6.691306e-01f}, + {-7.313537e-01f,-6.819983e-01f}, + {-7.193397e-01f,-6.946585e-01f}, + {-7.071068e-01f,-7.071068e-01f}, + {-6.946585e-01f,-7.193397e-01f}, + {-6.819983e-01f,-7.313537e-01f}, + {-6.691307e-01f,-7.431448e-01f}, + {-6.560590e-01f,-7.547097e-01f}, + {-6.427876e-01f,-7.660444e-01f}, + {-6.293203e-01f,-7.771460e-01f}, + {-6.156614e-01f,-7.880108e-01f}, + {-6.018151e-01f,-7.986355e-01f}, + {-5.877852e-01f,-8.090170e-01f}, + {-5.735765e-01f,-8.191520e-01f}, + {-5.591928e-01f,-8.290376e-01f}, + {-5.446391e-01f,-8.386706e-01f}, + {-5.299193e-01f,-8.480480e-01f}, + {-5.150380e-01f,-8.571673e-01f}, + {-5.000001e-01f,-8.660254e-01f}, + {-4.848095e-01f,-8.746197e-01f}, + {-4.694716e-01f,-8.829476e-01f}, + {-4.539906e-01f,-8.910065e-01f}, + {-4.383711e-01f,-8.987941e-01f}, + {-4.226183e-01f,-9.063078e-01f}, + {-4.067367e-01f,-9.135454e-01f}, + {-3.907312e-01f,-9.205049e-01f}, + {-3.746066e-01f,-9.271839e-01f}, + {-3.583679e-01f,-9.335805e-01f}, + {-3.420201e-01f,-9.396926e-01f}, + {-3.255681e-01f,-9.455186e-01f}, + {-3.090170e-01f,-9.510565e-01f}, + {-2.923717e-01f,-9.563047e-01f}, + {-2.756374e-01f,-9.612617e-01f}, + {-2.588190e-01f,-9.659258e-01f}, + {-2.419219e-01f,-9.702957e-01f}, + {-2.249510e-01f,-9.743701e-01f}, + {-2.079117e-01f,-9.781476e-01f}, + {-1.908090e-01f,-9.816272e-01f}, + {-1.736482e-01f,-9.848077e-01f}, + {-1.564344e-01f,-9.876884e-01f}, + {-1.391731e-01f,-9.902681e-01f}, + {-1.218693e-01f,-9.925461e-01f}, + {-1.045285e-01f,-9.945219e-01f}, + {-8.715577e-02f,-9.961947e-01f}, + {-6.975648e-02f,-9.975641e-01f}, + {-5.233594e-02f,-9.986295e-01f}, + {-3.489946e-02f,-9.993908e-01f}, + {-1.745235e-02f,-9.998477e-01f}, + {-4.371139e-08f,-1.000000e+00f}, + {1.745238e-02f,-9.998477e-01f}, + {3.489950e-02f,-9.993908e-01f}, + {5.233597e-02f,-9.986295e-01f}, + {6.975651e-02f,-9.975641e-01f}, + {8.715580e-02f,-9.961947e-01f}, + {1.045284e-01f,-9.945219e-01f}, + {1.218693e-01f,-9.925461e-01f}, + {1.391731e-01f,-9.902681e-01f}, + {1.564345e-01f,-9.876884e-01f}, + {1.736482e-01f,-9.848077e-01f}, + {1.908089e-01f,-9.816272e-01f}, + {2.079117e-01f,-9.781476e-01f}, + {2.249510e-01f,-9.743701e-01f}, + {2.419219e-01f,-9.702957e-01f}, + {2.588191e-01f,-9.659258e-01f}, + {2.756374e-01f,-9.612617e-01f}, + {2.923717e-01f,-9.563048e-01f}, + {3.090170e-01f,-9.510565e-01f}, + {3.255681e-01f,-9.455186e-01f}, + {3.420202e-01f,-9.396926e-01f}, + {3.583680e-01f,-9.335804e-01f}, + {3.746066e-01f,-9.271839e-01f}, + {3.907311e-01f,-9.205049e-01f}, + {4.067366e-01f,-9.135455e-01f}, + {4.226182e-01f,-9.063078e-01f}, + {4.383712e-01f,-8.987941e-01f}, + {4.539905e-01f,-8.910065e-01f}, + {4.694716e-01f,-8.829476e-01f}, + {4.848096e-01f,-8.746197e-01f}, + {5.000000e-01f,-8.660254e-01f}, + {5.150381e-01f,-8.571673e-01f}, + {5.299193e-01f,-8.480481e-01f}, + {5.446390e-01f,-8.386706e-01f}, + {5.591929e-01f,-8.290375e-01f}, + {5.735765e-01f,-8.191521e-01f}, + {5.877852e-01f,-8.090170e-01f}, + {6.018150e-01f,-7.986355e-01f}, + {6.156615e-01f,-7.880107e-01f}, + {6.293204e-01f,-7.771460e-01f}, + {6.427876e-01f,-7.660444e-01f}, + {6.560590e-01f,-7.547095e-01f}, + {6.691306e-01f,-7.431449e-01f}, + {6.819984e-01f,-7.313537e-01f}, + {6.946584e-01f,-7.193398e-01f}, + {7.071068e-01f,-7.071068e-01f}, + {7.193398e-01f,-6.946584e-01f}, + {7.313537e-01f,-6.819983e-01f}, + {7.431448e-01f,-6.691306e-01f}, + {7.547096e-01f,-6.560590e-01f}, + {7.660444e-01f,-6.427876e-01f}, + {7.771460e-01f,-6.293204e-01f}, + {7.880108e-01f,-6.156615e-01f}, + {7.986355e-01f,-6.018150e-01f}, + {8.090170e-01f,-5.877852e-01f}, + {8.191521e-01f,-5.735765e-01f}, + {8.290376e-01f,-5.591929e-01f}, + {8.386706e-01f,-5.446391e-01f}, + {8.480481e-01f,-5.299193e-01f}, + {8.571673e-01f,-5.150381e-01f}, + {8.660254e-01f,-5.000000e-01f}, + {8.746197e-01f,-4.848096e-01f}, + {8.829476e-01f,-4.694716e-01f}, + {8.910065e-01f,-4.539905e-01f}, + {8.987941e-01f,-4.383712e-01f}, + {9.063078e-01f,-4.226183e-01f}, + {9.135454e-01f,-4.067366e-01f}, + {9.205049e-01f,-3.907311e-01f}, + {9.271839e-01f,-3.746066e-01f}, + {9.335804e-01f,-3.583679e-01f}, + {9.396926e-01f,-3.420201e-01f}, + {9.455186e-01f,-3.255681e-01f}, + {9.510565e-01f,-3.090170e-01f}, + {9.563048e-01f,-2.923717e-01f}, + {9.612617e-01f,-2.756374e-01f}, + {9.659258e-01f,-2.588190e-01f}, + {9.702957e-01f,-2.419219e-01f}, + {9.743701e-01f,-2.249510e-01f}, + {9.781476e-01f,-2.079117e-01f}, + {9.816272e-01f,-1.908090e-01f}, + {9.848077e-01f,-1.736482e-01f}, + {9.876884e-01f,-1.564345e-01f}, + {9.902681e-01f,-1.391731e-01f}, + {9.925461e-01f,-1.218693e-01f}, + {9.945219e-01f,-1.045285e-01f}, + {9.961947e-01f,-8.715574e-02f}, + {9.975641e-01f,-6.975647e-02f}, + {9.986295e-01f,-5.233596e-02f}, + {9.993908e-01f,-3.489950e-02f}, + {9.998477e-01f,-1.745241e-02f}, + {1.000000e+00f,0.000000e+00f} +}; + +/*----------------------------------------------------------------------------------* + * FB ROM tables + *----------------------------------------------------------------------------------*/ + +const float ivas_fb_cf_4ms_48k[IVAS_FB_4MS_48K_SAMP] = +{ + 0.0000167330f, 0.0001505907f, 0.0004182700f, 0.0008196995f, 0.0013547717f, 0.0020233432f, 0.0028252351f, 0.0037602327f, + 0.0048280857f, 0.0060285082f, 0.0073611788f, 0.0088257407f, 0.0104218019f, 0.0121489350f, 0.0140066776f, 0.0159945324f, + 0.0181119671f, 0.0203584149f, 0.0227332744f, 0.0252359097f, 0.0278656508f, 0.0306217938f, 0.0335036006f, 0.0365102998f, + 0.0396410864f, 0.0428951221f, 0.0462715360f, 0.0497694239f, 0.0533878494f, 0.0571258438f, 0.0609824063f, 0.0649565044f, + 0.0690470742f, 0.0732530206f, 0.0775732174f, 0.0820065080f, 0.0865517057f, 0.0912075934f, 0.0959729248f, 0.1008464240f, + 0.1058267862f, 0.1109126781f, 0.1161027381f, 0.1213955767f, 0.1267897769f, 0.1322838945f, 0.1378764585f, 0.1435659718f, + 0.1493509111f, 0.1552297276f, 0.1612008475f, 0.1672626721f, 0.1734135785f, 0.1796519200f, 0.1859760265f, 0.1923842047f, + 0.1988747391f, 0.2054458921f, 0.2120959043f, 0.2188229954f, 0.2256253644f, 0.2325011901f, 0.2394486317f, 0.2464658292f, + 0.2535509039f, 0.2607019590f, 0.2679170800f, 0.2751943352f, 0.2825317763f, 0.2899274389f, 0.2973793430f, 0.3048854936f, + 0.3124438810f, 0.3200524817f, 0.3277092588f, 0.3354121622f, 0.3431591298f, 0.3509480875f, 0.3587769500f, 0.3666436213f, + 0.3745459953f, 0.3824819564f, 0.3904493799f, 0.3984461328f, 0.4064700741f, 0.4145190556f, 0.4225909225f, 0.4306835136f, + 0.4387946624f, 0.4469221974f, 0.4550639426f, 0.4632177182f, 0.4713813414f, 0.4795526264f, 0.4877293857f, 0.4959094302f, + 0.5040905698f, 0.5122706143f, 0.5204473736f, 0.5286186586f, 0.5367822818f, 0.5449360574f, 0.5530778026f, 0.5612053376f, + 0.5693164864f, 0.5774090775f, 0.5854809444f, 0.5935299259f, 0.6015538672f, 0.6095506201f, 0.6175180436f, 0.6254540047f, + 0.6333563787f, 0.6412230500f, 0.6490519125f, 0.6568408702f, 0.6645878378f, 0.6722907412f, 0.6799475183f, 0.6875561190f, + 0.6951145064f, 0.7026206570f, 0.7100725611f, 0.7174682237f, 0.7248056648f, 0.7320829200f, 0.7392980410f, 0.7464490961f, + 0.7535341708f, 0.7605513683f, 0.7674988099f, 0.7743746356f, 0.7811770046f, 0.7879040957f, 0.7945541079f, 0.8011252609f, + 0.8076157953f, 0.8140239735f, 0.8203480800f, 0.8265864215f, 0.8327373279f, 0.8387991525f, 0.8447702724f, 0.8506490889f, + 0.8564340282f, 0.8621235415f, 0.8677161055f, 0.8732102231f, 0.8786044233f, 0.8838972619f, 0.8890873219f, 0.8941732138f, + 0.8991535760f, 0.9040270752f, 0.9087924066f, 0.9134482943f, 0.9179934920f, 0.9224267826f, 0.9267469794f, 0.9309529258f, + 0.9350434956f, 0.9390175937f, 0.9428741562f, 0.9466121506f, 0.9502305761f, 0.9537284640f, 0.9571048779f, 0.9603589136f, + 0.9634897002f, 0.9664963994f, 0.9693782062f, 0.9721343492f, 0.9747640903f, 0.9772667256f, 0.9796415851f, 0.9818880329f, + 0.9840054676f, 0.9859933224f, 0.9878510650f, 0.9895781981f, 0.9911742593f, 0.9926388212f, 0.9939714918f, 0.9951719143f, + 0.9962397673f, 0.9971747649f, 0.9979766568f, 0.9986452283f, 0.9991803005f, 0.9995817300f, 0.9998494093f, 0.9999832670f, +}; + +const float ivas_fb_cf_4ms_32k[IVAS_FB_4MS_32K_SAMP] = +{ + 0.0000376491f, 0.0003388077f, 0.0009409435f, 0.0018436939f, 0.0030465150f, 0.0045486823f, 0.0063492909f, 0.0084472563f, + 0.0108413146f, 0.0135300239f, 0.0165117645f, 0.0197847403f, 0.0233469798f, 0.0271963373f, 0.0313304940f, 0.0357469598f, + 0.0404430742f, 0.0454160085f, 0.0506627672f, 0.0561801898f, 0.0619649529f, 0.0680135719f, 0.0743224034f, 0.0808876472f, + 0.0877053486f, 0.0947714009f, 0.1020815477f, 0.1096313857f, 0.1174163672f, 0.1254318027f, 0.1336728642f, 0.1421345874f, + 0.1508118753f, 0.1596995011f, 0.1687921112f, 0.1780842286f, 0.1875702559f, 0.1972444793f, 0.2071010713f, 0.2171340946f, + 0.2273375058f, 0.2377051587f, 0.2482308081f, 0.2589081140f, 0.2697306445f, 0.2806918807f, 0.2917852200f, 0.3030039800f, + 0.3143414030f, 0.3257906599f, 0.3373448539f, 0.3489970253f, 0.3607401553f, 0.3725671702f, 0.3844709459f, 0.3964443119f, + 0.4084800560f, 0.4205709283f, 0.4327096457f, 0.4448888964f, 0.4571013438f, 0.4693396318f, 0.4815963885f, 0.4938642309f, + 0.5061357691f, 0.5184036115f, 0.5306603682f, 0.5428986562f, 0.5551111036f, 0.5672903543f, 0.5794290717f, 0.5915199440f, + 0.6035556881f, 0.6155290541f, 0.6274328298f, 0.6392598447f, 0.6510029747f, 0.6626551461f, 0.6742093401f, 0.6856585970f, + 0.6969960200f, 0.7082147800f, 0.7193081193f, 0.7302693555f, 0.7410918860f, 0.7517691919f, 0.7622948413f, 0.7726624942f, + 0.7828659054f, 0.7928989287f, 0.8027555207f, 0.8124297441f, 0.8219157714f, 0.8312078888f, 0.8403004989f, 0.8491881247f, + 0.8578654126f, 0.8663271358f, 0.8745681973f, 0.8825836328f, 0.8903686143f, 0.8979184523f, 0.9052285991f, 0.9122946514f, + 0.9191123528f, 0.9256775966f, 0.9319864281f, 0.9380350471f, 0.9438198102f, 0.9493372328f, 0.9545839915f, 0.9595569258f, + 0.9642530402f, 0.9686695060f, 0.9728036627f, 0.9766530202f, 0.9802152597f, 0.9834882355f, 0.9864699761f, 0.9891586854f, + 0.9915527437f, 0.9936507091f, 0.9954513177f, 0.9969534850f, 0.9981563061f, 0.9990590565f, 0.9996611923f, 0.9999623509f, +}; + +const float ivas_fb_cf_4ms_16k[IVAS_FB_4MS_16K_SAMP] = +{ + 0.0001505907f, 0.0013547717f, 0.0037602327f, 0.0073611788f, 0.0121489350f, 0.0181119671f, 0.0252359097f, 0.0335036006f, + 0.0428951221f, 0.0533878494f, 0.0649565044f, 0.0775732174f, 0.0912075934f, 0.1058267862f, 0.1213955767f, 0.1378764585f, + 0.1552297276f, 0.1734135785f, 0.1923842047f, 0.2120959043f, 0.2325011901f, 0.2535509039f, 0.2751943352f, 0.2973793430f, + 0.3200524817f, 0.3431591298f, 0.3666436213f, 0.3904493799f, 0.4145190556f, 0.4387946624f, 0.4632177182f, 0.4877293857f, + 0.5122706143f, 0.5367822818f, 0.5612053376f, 0.5854809444f, 0.6095506201f, 0.6333563787f, 0.6568408702f, 0.6799475183f, + 0.7026206570f, 0.7248056648f, 0.7464490961f, 0.7674988099f, 0.7879040957f, 0.8076157953f, 0.8265864215f, 0.8447702724f, + 0.8621235415f, 0.8786044233f, 0.8941732138f, 0.9087924066f, 0.9224267826f, 0.9350434956f, 0.9466121506f, 0.9571048779f, + 0.9664963994f, 0.9747640903f, 0.9818880329f, 0.9878510650f, 0.9926388212f, 0.9962397673f, 0.9986452283f, 0.9998494093f, +}; + +const float ivas_fb_fcs_12band_1ms[IVAS_FB_BANDS_12] = +{ + 0.0083333333f, 0.0250000000f, 0.0416666667f, 0.0583333333f, + 0.0750000000f, 0.0916666667f, 0.1083333333f, 0.1416666667f, + 0.2166666667f, 0.3333333333f, 0.5083333333f, 0.8083333333f +}; + +const int16_t ivas_fb_abs_bins_per_band_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12] = +{ + { 24, 30, 30, 30, 30, 30, 42, 76, 124, 182, 291, 367 }, + { 24, 30, 30, 30, 30, 30, 42, 76, 124, 182, 260, 47 }, + { 24, 30, 30, 30, 30, 30, 42, 75, 122, 73, 0, 0 } +}; + +const int16_t ivas_fb_abs_bins_start_offset_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12] = +{ + {0, 9, 25, 41, 57, 73, 88, 110, 158, 246, 380, 593 }, + {0, 9, 25, 41, 57, 73, 88, 110, 158, 246, 380, 593 }, + {0, 9, 25, 41, 57, 73, 88, 110, 159, 247, 0, 0 } +}; + +const int16_t ivas_fb_bins_per_band_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12] = +{ + { + IVAS_FB_12_1MS_48K_END_BINS_BAND_0 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_0, + IVAS_FB_12_1MS_48K_END_BINS_BAND_1 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_1, + IVAS_FB_12_1MS_48K_END_BINS_BAND_2 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_2, + IVAS_FB_12_1MS_48K_END_BINS_BAND_3 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_3, + IVAS_FB_12_1MS_48K_END_BINS_BAND_4 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_4, + IVAS_FB_12_1MS_48K_END_BINS_BAND_5 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_5, + IVAS_FB_12_1MS_48K_END_BINS_BAND_6 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_6, + IVAS_FB_12_1MS_48K_END_BINS_BAND_7 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_7, + IVAS_FB_12_1MS_48K_END_BINS_BAND_8 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_8, + IVAS_FB_12_1MS_48K_END_BINS_BAND_9 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_9, + IVAS_FB_12_1MS_48K_END_BINS_BAND_10 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_10, + IVAS_FB_12_1MS_48K_END_BINS_BAND_11 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_11 + }, + { + IVAS_FB_12_1MS_32K_END_BINS_BAND_0 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_0, + IVAS_FB_12_1MS_32K_END_BINS_BAND_1 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_1, + IVAS_FB_12_1MS_32K_END_BINS_BAND_2 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_2, + IVAS_FB_12_1MS_32K_END_BINS_BAND_3 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_3, + IVAS_FB_12_1MS_32K_END_BINS_BAND_4 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_4, + IVAS_FB_12_1MS_32K_END_BINS_BAND_5 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_5, + IVAS_FB_12_1MS_32K_END_BINS_BAND_6 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_6, + IVAS_FB_12_1MS_32K_END_BINS_BAND_7 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_7, + IVAS_FB_12_1MS_32K_END_BINS_BAND_8 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_8, + IVAS_FB_12_1MS_32K_END_BINS_BAND_9 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_9, + IVAS_FB_12_1MS_32K_END_BINS_BAND_10 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_10, + IVAS_FB_12_1MS_32K_END_BINS_BAND_11 - IVAS_FB_12_1MS_32K_START_OFFSET_BAND_11 + }, + { + IVAS_FB_12_1MS_16K_END_BINS_BAND_0 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_0, + IVAS_FB_12_1MS_16K_END_BINS_BAND_1 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_1, + IVAS_FB_12_1MS_16K_END_BINS_BAND_2 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_2, + IVAS_FB_12_1MS_16K_END_BINS_BAND_3 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_3, + IVAS_FB_12_1MS_16K_END_BINS_BAND_4 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_4, + IVAS_FB_12_1MS_16K_END_BINS_BAND_5 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_5, + IVAS_FB_12_1MS_16K_END_BINS_BAND_6 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_6, + IVAS_FB_12_1MS_16K_END_BINS_BAND_7 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_7, + IVAS_FB_12_1MS_16K_END_BINS_BAND_8 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_8, + IVAS_FB_12_1MS_16K_END_BINS_BAND_9 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_9, + IVAS_FB_12_1MS_16K_END_BINS_BAND_10 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_10, + IVAS_FB_12_1MS_16K_END_BINS_BAND_11 - IVAS_FB_12_1MS_16K_START_OFFSET_BAND_11 + }, +}; + +const int16_t ivas_fb_bins_start_offset_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12] = +{ + { + IVAS_FB_12_1MS_48K_START_OFFSET_BAND_0, IVAS_FB_12_1MS_48K_START_OFFSET_BAND_1, + IVAS_FB_12_1MS_48K_START_OFFSET_BAND_2, IVAS_FB_12_1MS_48K_START_OFFSET_BAND_3, + IVAS_FB_12_1MS_48K_START_OFFSET_BAND_4, IVAS_FB_12_1MS_48K_START_OFFSET_BAND_5, + IVAS_FB_12_1MS_48K_START_OFFSET_BAND_6, IVAS_FB_12_1MS_48K_START_OFFSET_BAND_7, + IVAS_FB_12_1MS_48K_START_OFFSET_BAND_8, IVAS_FB_12_1MS_48K_START_OFFSET_BAND_9, + IVAS_FB_12_1MS_48K_START_OFFSET_BAND_10, IVAS_FB_12_1MS_48K_START_OFFSET_BAND_11 + }, + { + IVAS_FB_12_1MS_32K_START_OFFSET_BAND_0, IVAS_FB_12_1MS_32K_START_OFFSET_BAND_1, + IVAS_FB_12_1MS_32K_START_OFFSET_BAND_2, IVAS_FB_12_1MS_32K_START_OFFSET_BAND_3, + IVAS_FB_12_1MS_32K_START_OFFSET_BAND_4, IVAS_FB_12_1MS_32K_START_OFFSET_BAND_5, + IVAS_FB_12_1MS_32K_START_OFFSET_BAND_6, IVAS_FB_12_1MS_32K_START_OFFSET_BAND_7, + IVAS_FB_12_1MS_32K_START_OFFSET_BAND_8, IVAS_FB_12_1MS_32K_START_OFFSET_BAND_9, + IVAS_FB_12_1MS_32K_START_OFFSET_BAND_10, IVAS_FB_12_1MS_32K_START_OFFSET_BAND_11 + }, + { + IVAS_FB_12_1MS_16K_START_OFFSET_BAND_0, IVAS_FB_12_1MS_16K_START_OFFSET_BAND_1, + IVAS_FB_12_1MS_16K_START_OFFSET_BAND_2, IVAS_FB_12_1MS_16K_START_OFFSET_BAND_3, + IVAS_FB_12_1MS_16K_START_OFFSET_BAND_4, IVAS_FB_12_1MS_16K_START_OFFSET_BAND_5, + IVAS_FB_12_1MS_16K_START_OFFSET_BAND_6, IVAS_FB_12_1MS_16K_START_OFFSET_BAND_7, + IVAS_FB_12_1MS_16K_START_OFFSET_BAND_8, IVAS_FB_12_1MS_16K_START_OFFSET_BAND_9, + IVAS_FB_12_1MS_16K_START_OFFSET_BAND_10, IVAS_FB_12_1MS_16K_START_OFFSET_BAND_11 + }, +}; + +const float ivas_fb_cf_1ms_48k[IVAS_FB_1MS_48K_SAMP] = +{ + 0.0002677063f, 0.0024076367f, 0.0066783340f, 0.0130615104f, 0.0215298321f, 0.0320470366f, 0.0445680875f, 0.0590393678f, + 0.0753989092f, 0.0935766577f, 0.1134947733f, 0.1350679637f, 0.1582038490f, 0.1828033579f, 0.2087611516f, 0.2359660747f, + 0.2643016316f, 0.2936464851f, 0.3238749760f, 0.3548576614f, 0.3864618685f, 0.4185522633f, 0.4509914298f, 0.4836404586f, + 0.5163595414f, 0.5490085702f, 0.5814477367f, 0.6135381315f, 0.6451423386f, 0.6761250240f, 0.7063535149f, 0.7356983684f, + 0.7640339253f, 0.7912388484f, 0.8171966421f, 0.8417961510f, 0.8649320363f, 0.8865052267f, 0.9064233423f, 0.9246010908f, + 0.9409606322f, 0.9554319125f, 0.9679529634f, 0.9784701679f, 0.9869384896f, 0.9933216660f, 0.9975923633f, 0.9997322937f, +}; + +const float ivas_fb_cf_1ms_32k[IVAS_FB_1MS_32K_SAMP] = +{ + 0.0006022719f, 0.0054117450f, 0.0149843734f, 0.0292279674f, 0.0480053534f, 0.0711356950f, 0.0983962343f, 0.1295244373f, + 0.1642205226f, 0.2021503478f, 0.2429486279f, 0.2862224533f, 0.3315550733f, 0.3785099100f, 0.4266347628f, 0.4754661628f, + 0.5245338372f, 0.5733652372f, 0.6214900900f, 0.6684449267f, 0.7137775467f, 0.7570513721f, 0.7978496522f, 0.8357794774f, + 0.8704755627f, 0.9016037657f, 0.9288643050f, 0.9519946466f, 0.9707720326f, 0.9850156266f, 0.9945882550f, 0.9993977281f, +}; + +const float ivas_fb_cf_1ms_16k[IVAS_FB_1MS_16K_SAMP] = +{ + 0.0024076367f, 0.0215298321f, 0.0590393678f, 0.1134947733f, 0.1828033579f, 0.2643016316f, 0.3548576614f, 0.4509914298f, + 0.5490085702f, 0.6451423386f, 0.7356983684f, 0.8171966421f, 0.8865052267f, 0.9409606322f, 0.9784701679f, 0.9975923633f, + }; + + +const float ivas_fb_fr_12band_1ms_re[IVAS_FB_12_1MS_LEN] = +{ + 0.9748788957f, 0.9427895242f, 0.8792742509f, 0.7856320394f, 0.6637543553f, 0.5159842697f, 0.3449612971f, 0.1523029468f, + -0.0629462677f, -0.2915070279f, -0.5097704228f, -0.6945723663f, -0.8280677163f, -0.8984664279f, -0.9013544787f, -0.8399030468f, + -0.7243177987f, -0.5703726081f, -0.3972779762f, -0.2251611328f, -0.0723653847f, 0.0469440290f, 0.1248973653f, 0.1617697860f, + 0.1709641074f, 0.1694810686f, 0.1629475939f, 0.1522105989f, 0.1386564071f, 0.1233728939f, 0.1073854103f, 0.0914740522f, + 0.0762871837f, 0.0622709857f, 0.0497418146f, 0.0388592902f, 0.0296823509f, 0.0221628349f, 0.0161914497f, 0.0115997684f, + 0.0081967931f, 0.0057721783f, 0.0041230995f, 0.0030548577f, 0.0023984605f, 0.0020073250f, 0.0017670262f, 0.0015886054f, + 0.0014126895f, 0.0012008765f, 0.0009366259f, 0.0006164015f, 0.0002494051f, -0.0001501884f, -0.0005632461f, -0.0009716328f, + -0.0013573205f, -0.0017064484f, -0.0020074979f, -0.0022538257f, -0.0024412527f, -0.0025696364f, -0.0026403325f, -0.0026573398f, + -0.0026249989f, -0.0025490667f, -0.0024348276f, -0.0022882409f, -0.0021144573f, -0.0019190182f, -0.0017066606f, -0.0014824738f, + -0.0012508539f, -0.0010165332f, -0.0007835930f, -0.0005563371f, -0.0003383404f, -0.0001331992f, 0.0000563549f, 0.0002277657f, + 0.0003794289f, 0.0005100093f, 0.0006190856f, 0.0007064556f, 0.0007726658f, 0.0008183240f, 0.0008445608f, 0.0008523932f, + 0.0008431696f, 0.0008180214f, 0.0007783263f, 0.0007252567f, 0.0006602600f, 0.0005846794f, 0.0005002207f, 0.0004085983f, + 0.0003119450f, 0.0002124378f, 0.0001126202f, 0.0000149855f, -0.0000777886f, -0.0001632865f, -0.0002391747f, -0.0003036357f, + -0.0003551891f, -0.0003930613f, -0.0004169567f, -0.0004273258f, -0.0004250606f, -0.0004116574f, -0.0003888481f, -0.0003586881f, + -0.0003231696f, -0.0002842913f, -0.0002437103f, -0.0002028533f, -0.0001626543f, -0.0001237419f, -0.0000862804f, -0.0000502315f, + -0.0000152759f, 0.0000188864f, 0.0000525857f, 0.0000859011f, 0.0001187387f, 0.0001506215f, 0.0001808384f, 0.0002083291f, + 0.0002319112f, 0.0002502468f, 0.0002621167f, 0.0002664223f, 0.0002624512f, 0.0002498541f, 0.0002288448f, 0.0002001024f, + 0.0001648717f, 0.0001247734f, 0.0000818072f, 0.0000380927f, -0.0000041840f, -0.0000430463f, -0.0000767750f, -0.0001041381f, + -0.0001243744f, -0.0001373295f, -0.0001433435f, -0.0001432806f, -0.0001383279f, -0.0001299462f, -0.0001196234f, -0.0001088038f, + -0.0000986591f, -0.0000900582f, -0.0000834123f, -0.0000787307f, -0.0000755665f, -0.0000731664f, -0.0000705050f, -0.0000664967f, + -0.0000600718f, -0.0000503921f, -0.0000369061f, -0.0000195076f, 0.0000014839f, 0.0000252601f, 0.0000506406f, 0.0000761070f, + 0.0000999980f, 0.0001206038f, 0.0001363885f, 0.0001460830f, 0.0001488707f, 0.0001444187f, 0.0001329747f, 0.0001153008f, + 0.0000926636f, 0.0000666729f, 0.0000391891f, + 0.0080195493f, 0.0152804795f, 0.0297236427f, 0.0512076944f, 0.0795504278f, 0.1146345202f, 0.1565217749f, 0.2067150266f, + 0.2696514371f, 0.3398196482f, 0.3975948769f, 0.4239235527f, 0.4051207537f, 0.3335063336f, 0.2086503840f, 0.0374772593f, + -0.1663484542f, -0.3839925014f, -0.5936160820f, -0.7729897529f, -0.9021602868f, -0.9658914408f, -0.9555491003f, -0.8702102709f, + -0.7168585697f, -0.5096278055f, -0.2682088520f, -0.0155786468f, 0.2246238492f, 0.4308147261f, 0.5858672047f, 0.6790005846f, + 0.7068091556f, 0.6734550535f, 0.5898178925f, 0.4719496963f, 0.3387034057f, 0.2092646386f, 0.1002222301f, 0.0233145798f, + -0.0225492413f, -0.0508402802f, -0.0698819559f, -0.0814769049f, -0.0871540019f, -0.0880955245f, -0.0854373943f, -0.0801296337f, + -0.0730507304f, -0.0649236398f, -0.0563762037f, -0.0478921962f, -0.0398550173f, -0.0325224860f, -0.0260651486f, -0.0205564484f, + -0.0160078488f, -0.0123673601f, -0.0095503829f, -0.0074410094f, -0.0059169243f, -0.0048497092f, -0.0041229035f, -0.0036294834f, + -0.0032833863f, -0.0030140242f, -0.0027726134f, -0.0025247022f, -0.0022531837f, -0.0019502609f, -0.0016189799f, -0.0012659033f, + -0.0009025224f, -0.0005393948f, -0.0001881199f, 0.0001429077f, 0.0004458867f, 0.0007165584f, 0.0009512703f, 0.0011491538f, + 0.0013092799f, 0.0014325460f, 0.0015192234f, 0.0015708276f, 0.0015881374f, 0.0015730908f, 0.0015271608f, 0.0014531585f, + 0.0013537657f, 0.0012330943f, 0.0010952099f, 0.0009453732f, 0.0007885040f, 0.0006301505f, 0.0004749667f, 0.0003275524f, + 0.0001910823f, 0.0000681798f, -0.0000401798f, -0.0001336577f, -0.0002133415f, -0.0002805985f, -0.0003376335f, -0.0003863124f, + -0.0004286391f, -0.0004657017f, -0.0004982282f, -0.0005257791f, -0.0005474775f, -0.0005614835f, -0.0005658893f, -0.0005584023f, + -0.0005372971f, -0.0005011582f, -0.0004497305f, -0.0003835612f, -0.0003046159f, -0.0002157155f, -0.0001208702f, -0.0000245120f, + 0.0000683937f, 0.0001532153f, 0.0002256208f, 0.0002823819f, 0.0003212462f, 0.0003415271f, 0.0003437577f, 0.0003299911f, + 0.0003032103f, 0.0002673723f, 0.0002266573f, 0.0001853871f, 0.0001472716f, 0.0001153747f, 0.0000915248f, 0.0000764751f, + 0.0000695838f, 0.0000692286f, 0.0000727574f, 0.0000771057f, 0.0000789150f, 0.0000752114f, 0.0000635256f, 0.0000424610f, + 0.0000116537f, -0.0000279010f, -0.0000741391f, -0.0001238800f, -0.0001733508f, -0.0002183440f, -0.0002548569f, -0.0002793014f, + -0.0002890885f, -0.0002827170f, -0.0002601490f, -0.0002226568f, -0.0001729141f, -0.0001145795f, -0.0000521398f, 0.0000096825f, + 0.0114335951f, 0.0118220569f, 0.0126166715f, 0.0138498428f, 0.0155597951f, 0.0177826837f, 0.0205365788f, 0.0238116184f, + 0.0275499857f, 0.0316384404f, 0.0358879435f, 0.0400334899f, 0.0437164087f, 0.0464960697f, 0.0478357348f, 0.0471294159f, + 0.0436878423f, 0.0367814109f, 0.0256142984f, 0.0093791332f, -0.0128147904f, -0.0419091622f, -0.0791441084f, -0.1267865122f, + -0.1929101618f, -0.2825839913f, -0.3844663503f, -0.4796058889f, -0.5493419153f, -0.5770955026f, -0.5509547813f, -0.4652700670f, + -0.3217444363f, -0.1294222853f, 0.0961203110f, 0.3345074656f, 0.5628461809f, 0.7584007007f, 0.9012417605f, 0.9766103137f, + 0.9766601036f, 0.9013929608f, 0.7586588937f, 0.5632193167f, 0.3350048195f, 0.0967502546f, -0.1286537645f, -0.3208359645f, + -0.4642258941f, -0.5497861643f, -0.5758205512f, -0.5479856830f, -0.4781988983f, -0.3830435617f, -0.2811824725f, -0.1915676007f, + -0.1255389320f, -0.0780249233f, -0.0409475096f, -0.0120357725f, 0.0099548733f, 0.0259692697f, 0.0369008806f, 0.0435579897f, + 0.0467369910f, 0.0471666204f, 0.0455359048f, 0.0424502401f, 0.0384477095f, 0.0339708748f, 0.0293829220f, 0.0249536436f, + 0.0208784147f, 0.0172747220f, 0.0142030489f, 0.0116695065f, 0.0096461650f, 0.0080756116f, 0.0068882718f, 0.0060058072f, + 0.0053538953f, 0.0048628684f, 0.0044756795f, 0.0041456204f, 0.0038402965f, 0.0035372856f, 0.0032255714f, 0.0029004385f, + 0.0025638810f, 0.0022199121f, 0.0018750824f, 0.0015349035f, 0.0012050131f, 0.0008888342f, 0.0005893582f, 0.0003077151f, + 0.0000451990f, -0.0001977660f, -0.0004197988f, -0.0006196394f, -0.0007948001f, -0.0009428845f, -0.0010607326f, -0.0011459111f, + -0.0011961438f, -0.0012107318f, -0.0011899721f, -0.0011362537f, -0.0010532349f, -0.0009464869f, -0.0008223739f, -0.0006883049f, + -0.0005514485f, -0.0004188116f, -0.0002960338f, -0.0001875645f, -0.0000957748f, -0.0000214335f, 0.0000367443f, 0.0000812780f, + 0.0001159924f, 0.0001449821f, 0.0001725036f, 0.0002019612f, 0.0002358809f, 0.0002751586f, 0.0003193210f, 0.0003661738f, + 0.0004124154f, 0.0004536598f, 0.0004853030f, 0.0005027457f, 0.0005022926f, 0.0004813241f, 0.0004389844f, 0.0003760837f, + 0.0002954100f, 0.0002012644f, 0.0000993832f, -0.0000038301f, -0.0001016317f, -0.0001878100f, -0.0002570235f, -0.0003055296f, + -0.0003312954f, -0.0003343869f, -0.0003167133f, -0.0002820121f, -0.0002352424f, -0.0001822598f, -0.0001290196f, -0.0000811569f, + -0.0000432400f, -0.0000185020f, -0.0000083679f, -0.0000125164f, -0.0000287954f, -0.0000536548f, -0.0000824102f, -0.0001099335f, + -0.0001310885f, -0.0001414598f, -0.0001377171f, -0.0001181463f, -0.0000827338f, -0.0000333400f, 0.0000265889f, 0.0000922209f, + 0.0001579388f, 0.0002177817f, 0.0002661695f, 0.0002983587f, 0.0003110497f, 0.0003026261f, 0.0002734474f, 0.0002257288f, + 0.0001634460f, 0.0000918569f, 0.0000170963f, -0.0000545144f, -0.0001169830f, -0.0001653182f, -0.0001959140f, -0.0002069779f, + -0.0001985967f, -0.0001727902f, -0.0001331990f, -0.0000847800f, -0.0000332059f, 0.0000156408f, 0.0000563515f, 0.0000844666f, + 0.0000970039f, 0.0000926836f, 0.0000721249f, 0.0000377027f, -0.0000066339f, -0.0000558449f, -0.0001042571f, -0.0001462224f, + -0.0001766430f, -0.0001915709f, -0.0001885647f, -0.0001670193f, -0.0001281871f, -0.0000751314f, -0.0000123776f, 0.0000544678f, + 0.0001193245f, 0.0001761818f, 0.0002197499f, 0.0002459308f, 0.0002522801f, 0.0002382003f, 0.0002050537f, + 0.0023329977f, 0.0022744367f, 0.0021570870f, 0.0019806181f, 0.0017457340f, 0.0014542507f, 0.0011108455f, 0.0007223346f, + 0.0002992379f, -0.0001466015f, -0.0006012791f, -0.0010533907f, -0.0014941798f, -0.0019241070f, -0.0023530883f, -0.0028080809f, + -0.0033317792f, -0.0039896152f, -0.0048647785f, -0.0060629391f, -0.0077015456f, -0.0099112032f, -0.0128179487f, -0.0165415563f, + -0.0211707180f, -0.0267603854f, -0.0333010728f, -0.0407193019f, -0.0488429494f, -0.0574105466f, -0.0660338484f, -0.0742229694f, + -0.0813438415f, -0.0866673269f, -0.0893099408f, -0.0883179181f, -0.0825536818f, -0.0708351065f, -0.0516356322f, -0.0231563648f, + 0.0229208886f, 0.1000615986f, 0.2093510203f, 0.3390457527f, 0.4725528568f, 0.5906840617f, 0.6745849094f, 0.7082031015f, + 0.6806592553f, 0.5877917414f, 0.4330061655f, 0.2270823403f, -0.0128552066f, -0.2652258122f, -0.5063946175f, -0.7133884257f, + -0.8665187769f, -0.9516510020f, -0.9617959599f, -0.8978644321f, -0.7684707435f, -0.5888227503f, -0.3788375243f, -0.1607017417f, + 0.0437915599f, 0.2158527937f, 0.3418541386f, 0.4148932359f, 0.4353978994f, 0.4110138144f, 0.3553491439f, 0.2873311989f, + 0.2264012967f, 0.1778272597f, 0.1368656384f, 0.1016489237f, 0.0716971046f, 0.0466686361f, 0.0262587636f, 0.0101140856f, + -0.0021717142f, -0.0110521236f, -0.0170125125f, -0.0205483075f, -0.0221473891f, -0.0222696986f, -0.0213345382f, -0.0197075856f, + -0.0176958703f, -0.0155434695f, -0.0134339314f, -0.0114932096f, -0.0097973566f, -0.0083798220f, -0.0072413978f, -0.0063587120f, + -0.0056935805f, -0.0052001373f, -0.0048316507f, -0.0045448649f, -0.0043035469f, -0.0040798367f, -0.0038548953f, -0.0036180007f, + -0.0033653668f, -0.0030981742f, -0.0028208099f, -0.0025389671f, -0.0022582881f, -0.0019832510f, -0.0017166811f, -0.0014595950f, + -0.0012115153f, -0.0009709890f, -0.0007362895f, -0.0005061076f, -0.0002801409f, -0.0000595032f, 0.0001531427f, 0.0003536750f, + 0.0005368997f, 0.0006970650f, 0.0008285636f, 0.0009265836f, 0.0009877836f, 0.0010107351f, 0.0009962610f, 0.0009474346f, + 0.0008694403f, 0.0007691024f, 0.0006543506f, 0.0005334591f, 0.0004143726f, 0.0003039581f, 0.0002074999f, 0.0001282497f, + 0.0000673202f, 0.0000236838f, -0.0000054823f, -0.0000243922f, -0.0000379908f, -0.0000513567f, -0.0000689891f, -0.0000943029f, + -0.0001291385f, -0.0001735855f, -0.0002258909f, -0.0002827035f, -0.0003393834f, -0.0003905818f, -0.0004307882f, -0.0004550220f, + -0.0004593576f, -0.0004414605f, -0.0004008453f, -0.0003390565f, -0.0002595254f, -0.0001673445f, -0.0000687564f, 0.0000293658f, + 0.0001202144f, 0.0001976297f, 0.0002567251f, 0.0002942795f, 0.0003090663f, 0.0003018805f, 0.0002754671f, 0.0002341572f, + 0.0001834501f, 0.0001293884f, 0.0000779842f, 0.0000345648f, 0.0000032926f, -0.0000132797f, -0.0000143893f, -0.0000011447f, + 0.0000236778f, 0.0000559218f, 0.0000905679f, 0.0001222509f, 0.0001458957f, 0.0001572350f, 0.0001533249f, 0.0001328377f, + 0.0000962676f, 0.0000458655f, -0.0000145297f, -0.0000799026f, -0.0001445204f, -0.0002025425f, -0.0002485698f, -0.0002782267f, + -0.0002885684f, -0.0002784187f, -0.0002484615f, -0.0002012166f, -0.0001407652f, -0.0000723891f, -0.0000020250f, 0.0000642779f, + 0.0006545440f, 0.0006092123f, 0.0005211283f, 0.0003952715f, 0.0002383557f, 0.0000584198f, -0.0001362653f, -0.0003375075f, + -0.0005383555f, -0.0007329456f, -0.0009174331f, -0.0010891536f, -0.0012472468f, -0.0013911728f, -0.0015212364f, -0.0016367530f, + -0.0017368889f, -0.0018188830f, -0.0018796284f, -0.0019142370f, -0.0019185646f, -0.0018880671f, -0.0018210801f, -0.0017174793f, + -0.0015821304f, -0.0014225231f, -0.0012516143f, -0.0010835462f, -0.0009352781f, -0.0008198418f, -0.0007467438f, -0.0007129147f, + -0.0007027599f, -0.0006778296f, -0.0005783377f, -0.0003132968f, 0.0002340159f, 0.0012135056f, 0.0027962862f, 0.0051783222f, + 0.0085600080f, 0.0131460500f, 0.0191158420f, 0.0266218006f, 0.0357510579f, 0.0465271020f, 0.0588638446f, 0.0725784015f, + 0.0873370030f, 0.1026908595f, 0.1180068601f, 0.1325484280f, 0.1453642259f, 0.1554807068f, 0.1616648578f, 0.1632688310f, + 0.1549027767f, 0.1198428714f, 0.0449861804f, -0.0696229208f, -0.2158023005f, -0.3790883171f, -0.5408894679f, -0.6808851285f, + -0.7797705919f, -0.8217682544f, -0.7968116423f, -0.7019652931f, -0.5420418321f, -0.3292210214f, -0.0818128466f, 0.1777726196f, + 0.4255266516f, 0.6385776439f, 0.7977664747f, 0.8898038418f, 0.9086949642f, 0.8563086554f, 0.7419773576f, 0.5812252250f, + 0.3937408613f, 0.2008871303f, 0.0230173731f, -0.1230428784f, -0.2260664125f, -0.2818374636f, -0.2937072611f, -0.2733437698f, + -0.2408584071f, -0.2098412063f, -0.1806909043f, -0.1526536550f, -0.1261957677f, -0.1017094943f, -0.0795968657f, -0.0600974864f, + -0.0433545981f, -0.0293681726f, -0.0180470916f, -0.0092000126f, -0.0025796754f, 0.0021127195f, 0.0051910943f, 0.0069776293f, + 0.0077756050f, 0.0078657031f, 0.0074886765f, 0.0068470105f, 0.0060965069f, 0.0053530166f, 0.0046907222f, 0.0041521192f, + 0.0037501212f, 0.0034789031f, 0.0033170573f, 0.0032371863f, 0.0032080612f, 0.0032016671f, 0.0031933530f, 0.0031660244f, + 0.0031082781f, 0.0030162723f, 0.0028905427f, 0.0027365419f, 0.0025611068f, 0.0023726939f, 0.0021783369f, 0.0019843040f, + 0.0017939931f, 0.0016092783f, 0.0014293389f, 0.0012525382f, 0.0010758415f, 0.0008968234f, 0.0007132020f, 0.0005245511f, + 0.0003315658f, 0.0001372209f, -0.0000543880f, -0.0002374465f, -0.0004059085f, -0.0005532434f, -0.0006739838f, -0.0007634986f, + -0.0008192976f, -0.0008405529f, -0.0008289575f, -0.0007878678f, -0.0007226939f, -0.0006397231f, -0.0005461962f, -0.0004490215f, + -0.0003547907f, -0.0002686412f, -0.0001944601f, -0.0001340918f, -0.0000878707f, -0.0000542351f, -0.0000305758f, -0.0000131627f, + 0.0000018427f, 0.0000183480f, 0.0000393727f, 0.0000671196f, 0.0001022671f, 0.0001443061f, 0.0001911748f, 0.0002398911f, + 0.0002864880f, 0.0003268414f, 0.0003567538f, 0.0003727940f, 0.0003723297f, 0.0003541905f, 0.0003184856f, 0.0002669707f, + 0.0002025844f, 0.0001295158f, 0.0000525132f, -0.0000232393f, -0.0000928921f, -0.0001520697f, -0.0001975396f, -0.0002271978f, + -0.0002404958f, -0.0002381708f, + -0.0001556937f, -0.0002232588f, -0.0003000471f, -0.0003807341f, -0.0004589754f, -0.0005276096f, -0.0005796476f, -0.0006085059f, + -0.0006090117f, -0.0005773878f, -0.0005120302f, -0.0004130497f, -0.0002827174f, -0.0001245430f, 0.0000565230f, 0.0002553084f, + 0.0004662156f, 0.0006844691f, 0.0009056254f, 0.0011266188f, 0.0013448100f, 0.0015587720f, 0.0017669159f, 0.0019681955f, + 0.0021605643f, 0.0023419522f, 0.0025089038f, 0.0026581873f, 0.0027858518f, 0.0028896115f, 0.0029682393f, 0.0030244845f, + 0.0030642863f, 0.0030995791f, 0.0031464520f, 0.0032269718f, 0.0033653351f, 0.0035879808f, 0.0039171130f, 0.0043689626f, + 0.0049448001f, 0.0056281538f, 0.0063744051f, 0.0071088295f, 0.0077167468f, 0.0080450691f, 0.0078953687f, 0.0070318498f, + 0.0051792603f, 0.0020396552f, -0.0027043718f, -0.0093630158f, -0.0182327050f, -0.0295599145f, -0.0435368078f, -0.0602568291f, + -0.0797235538f, -0.1017981297f, -0.1262457047f, -0.1526688648f, -0.1806793505f, -0.2098138162f, -0.2408276962f, -0.2733223455f, + -0.2937063941f, -0.2818656143f, -0.2261282142f, -0.1231384900f, 0.0228924303f, 0.2007416620f, 0.3935871743f, 0.5810779624f, + 0.7418520015f, 0.8562199711f, 0.9086554096f, 0.8898222505f, 0.7978469922f, 0.6387191949f, 0.4257228188f, 0.1780121397f, + -0.0815452149f, -0.3289431293f, -0.5417726272f, -0.7017230773f, -0.7966125143f, -0.8216246380f, -0.7796902592f, -0.6808705368f, + -0.5409377623f, -0.3791916953f, -0.2159490132f, -0.0697984743f, 0.0447973984f, 0.1196560777f, 0.1547311650f, 0.1631223252f, + 0.1615491774f, 0.1553970134f, 0.1453090286f, 0.1325143072f, 0.1179833627f, 0.1026659817f, 0.0872986185f, 0.0725159741f, + 0.0587697393f, 0.0463978659f, 0.0355880008f, 0.0264313485f, 0.0189090552f, 0.0129379217f, 0.0083680105f, 0.0050209526f, + 0.0026911244f, 0.0011756268f, 0.0002742518f, -0.0001893835f, -0.0003713645f, -0.0003945662f, -0.0003559061f, -0.0003199311f, + -0.0003286406f, -0.0003992283f, -0.0005347052f, -0.0007234444f, -0.0009489211f, -0.0011892232f, -0.0014247925f, -0.0016368658f, + -0.0018128572f, -0.0019435092f, -0.0020262245f, -0.0020613098f, -0.0020539729f, -0.0020103196f, -0.0019388124f, -0.0018466470f, + -0.0017412840f, -0.0016275801f, -0.0015096821f, -0.0013889666f, -0.0012662678f, -0.0011404183f, -0.0010105747f, -0.0008750310f, + -0.0007333545f, -0.0005851730f, -0.0004319169f, -0.0002754165f, -0.0001192014f, 0.0000330890f, 0.0001767485f, 0.0003076493f, + 0.0004214404f, 0.0005150718f, 0.0005859601f, 0.0006332532f, 0.0006568484f, 0.0006583487f, 0.0006399242f, 0.0006050121f, + 0.0005571017f, 0.0005002994f, 0.0004381601f, 0.0003742519f, 0.0003111446f, 0.0002510679f, 0.0001951108f, 0.0001440004f, + 0.0000974938f, 0.0000552356f, 0.0000162701f, -0.0000201054f, -0.0000548020f, -0.0000881717f, -0.0001205191f, -0.0001514697f, + -0.0001805617f, -0.0002067517f, -0.0002290677f, -0.0002462077f, -0.0002572013f, -0.0002610364f, -0.0002572665f, -0.0002456071f, + -0.0002264461f, -0.0002003792f, -0.0001686145f, + -0.0002097915f, -0.0002547683f, -0.0002867440f, -0.0003037080f, -0.0003049864f, -0.0002912099f, -0.0002641320f, -0.0002263469f, + -0.0001809155f, -0.0001309730f, -0.0000793326f, -0.0000281672f, 0.0000212324f, 0.0000685537f, 0.0001144458f, 0.0001603457f, + 0.0002082167f, 0.0002601799f, 0.0003181336f, 0.0003833534f, 0.0004561750f, 0.0005357423f, 0.0006199091f, 0.0007052503f, + 0.0007872414f, 0.0008605303f, 0.0009193285f, 0.0009578246f, 0.0009706279f, 0.0009531437f, 0.0009018903f, 0.0008146822f, + 0.0006907085f, 0.0005304701f, 0.0003356294f, 0.0001087751f, -0.0001468322f, -0.0004275067f, -0.0007293282f, -0.0010482464f, + -0.0013801011f, -0.0017205409f, -0.0020649160f, -0.0024081360f, -0.0027446427f, -0.0030684675f, -0.0033735725f, -0.0036543691f, + -0.0039066272f, -0.0041285253f, -0.0043220448f, -0.0044942599f, -0.0046587239f, -0.0048362859f, -0.0050555995f, -0.0053524607f, + -0.0057684191f, -0.0063476637f, -0.0071329714f, -0.0081596433f, -0.0094487437f, -0.0109984997f, -0.0127758558f, -0.0147068954f, + -0.0166688890f, -0.0184823228f, -0.0199064468f, -0.0206359860f, -0.0203032667f, -0.0184822593f, -0.0146993237f, -0.0084456516f, + 0.0008037916f, 0.0135712038f, 0.0303539710f, 0.0516053773f, 0.0777267032f, 0.1090646438f, 0.1459928995f, 0.1890045882f, + 0.2399569411f, 0.3035491657f, 0.3744326411f, 0.4330381754f, 0.4602649242f, 0.4422767198f, 0.3711532515f, 0.2461380555f, + 0.0737670473f, -0.1327449736f, -0.3550430014f, -0.5718089399f, -0.7613406410f, -0.9042683903f, -0.9859824923f, -0.9986999813f, + -0.9431316453f, -0.8322426947f, -0.6838587489f, -0.5090121248f, -0.3164353275f, -0.1160643779f, 0.0821150478f, 0.2684309672f, + 0.4341770987f, 0.5719923883f, 0.6762928566f, 0.7434950500f, 0.7721889543f, 0.7631234448f, 0.7191049971f, 0.6447409999f, + 0.5461062812f, 0.4303073808f, 0.3050115994f, 0.1779422698f, 0.0563953149f, -0.0532072816f, -0.1456894384f, -0.2173979596f, + -0.2663715333f, -0.2923808160f, -0.2968590700f, -0.2826977783f, -0.2539702782f, -0.2155328992f, -0.1726410340f, -0.1304388234f, + -0.0937203765f, -0.0651894568f, -0.0434204585f, -0.0262320261f, -0.0128620020f, -0.0027758731f, 0.0045023778f, 0.0094378307f, + 0.0124649620f, 0.0139956053f, 0.0143989384f, 0.0140037462f, 0.0130866052f, 0.0118760507f, 0.0105485285f, 0.0092355458f, + 0.0080250843f, 0.0069705449f, 0.0060949377f, 0.0053998515f, 0.0048701054f, 0.0044812646f, 0.0042032151f, 0.0040054335f, + 0.0038588251f, 0.0037386836f, 0.0036248683f, 0.0035029301f, 0.0033631517f, 0.0032005638f, 0.0030135068f, 0.0028032324f, + 0.0025725319f, 0.0023254060f, 0.0020660644f, 0.0017988746f, 0.0015277862f, 0.0012565431f, 0.0009884144f, 0.0007265302f, + 0.0004737413f, 0.0002329236f, 0.0000068230f, -0.0002017617f, -0.0003902098f, -0.0005560211f, -0.0006970975f, -0.0008117494f, + -0.0008989567f, -0.0009583547f, -0.0009904048f, -0.0009962992f, -0.0009780085f, -0.0009380932f, -0.0008796449f, -0.0008060398f, + -0.0007208281f, -0.0006274895f, -0.0005293371f, -0.0004293314f, -0.0003300469f, -0.0002335751f, -0.0001415683f, -0.0000552272f, + 0.0000245975f, 0.0000973664f, 0.0001627306f, 0.0002204858f, 0.0002704729f, 0.0003125597f, 0.0003465872f, 0.0003723927f, + 0.0003898040f, 0.0003986947f, 0.0003990072f, 0.0003908172f, 0.0003743577f, 0.0003500669f, 0.0003185900f, 0.0002807935f, + 0.0002377348f, 0.0001906413f, 0.0001408526f, 0.0000897771f, 0.0000388229f, -0.0000106507f, -0.0000573934f, -0.0001003004f, + -0.0001384514f, -0.0001711250f, -0.0001978125f, -0.0002182105f, -0.0002322144f, -0.0002398964f, -0.0002414880f, + -0.0001596129f, -0.0001562496f, -0.0001498931f, -0.0001412337f, -0.0001312006f, -0.0001208315f, -0.0001111500f, -0.0001030067f, + -0.0000969764f, -0.0000932334f, -0.0000915268f, -0.0000911372f, -0.0000909596f, -0.0000895515f, -0.0000853138f, -0.0000765980f, + -0.0000619367f, -0.0000401498f, -0.0000105563f, 0.0000269865f, 0.0000719478f, 0.0001231977f, 0.0001789736f, 0.0002370733f, + 0.0002949065f, 0.0003497691f, 0.0003989259f, 0.0004399015f, 0.0004705253f, 0.0004891741f, 0.0004947225f, 0.0004866983f, + 0.0004651169f, 0.0004305530f, 0.0003838811f, 0.0003263054f, 0.0002590637f, 0.0001834786f, 0.0001006881f, 0.0000117772f, + -0.0000824234f, -0.0001810986f, -0.0002835801f, -0.0003890188f, -0.0004964869f, -0.0006046168f, -0.0007117406f, -0.0008155628f, + -0.0009134018f, -0.0010019440f, -0.0010776210f, -0.0011364499f, -0.0011745303f, -0.0011879291f, -0.0011732401f, -0.0011274376f, + -0.0010484260f, -0.0009347877f, -0.0007862674f, -0.0006033735f, -0.0003877877f, -0.0001418301f, 0.0001311620f, 0.0004274542f, + 0.0007424943f, 0.0010715568f, 0.0014092217f, 0.0017500212f, 0.0020878151f, 0.0024164922f, 0.0027293133f, 0.0030197921f, + 0.0032811287f, 0.0035074177f, 0.0036932727f, 0.0038354464f, 0.0039326233f, 0.0039873724f, 0.0040058742f, 0.0039999004f, + 0.0039859967f, 0.0039869775f, 0.0040299079f, 0.0041465214f, 0.0043693426f, 0.0047305856f, 0.0052560067f, 0.0059622775f, + 0.0068486582f, 0.0078935236f, 0.0090446101f, 0.0102161743f, 0.0112791696f, 0.0120612232f, 0.0123383309f, 0.0118401814f, + 0.0102443788f, 0.0071893168f, 0.0022697611f, -0.0049422577f, -0.0149080197f, -0.0281014987f, -0.0450597042f, -0.0665503452f, + -0.0947658820f, -0.1311459738f, -0.1730055990f, -0.2155698254f, -0.2537148355f, -0.2822005637f, -0.2961808714f, -0.2915797030f, + -0.2654897618f, -0.2164403253f, -0.1446028708f, -0.0518524544f, 0.0582677361f, 0.1807212874f, 0.3092454104f, 0.4367256082f, + 0.5556248313f, 0.6584663388f, 0.7383128514f, 0.7892352587f, 0.8067145259f, 0.7879751516f, 0.7322001587f, 0.6406413437f, + 0.5165833320f, 0.3651995965f, 0.1932631326f, 0.0087845907f, -0.1794730708f, -0.3624711894f, -0.5314826505f, -0.6784496714f, + -0.7975387008f, -0.8869066714f, -0.9460978228f, -0.9743683484f, -0.9716887763f, -0.9388912477f, -0.8776913880f, -0.7906217616f, + -0.6809617759f, -0.5526158639f, -0.4099903122f, -0.2578384472f, -0.1011091221f, 0.0552204273f, 0.2063009082f, 0.3475689337f, + 0.4748858634f, 0.5846665399f, 0.6739816770f, 0.7406414471f, 0.7832480152f, 0.8012243690f, 0.7948108464f, 0.7650372454f, + 0.7136651972f, 0.6431094919f, 0.5563357930f, 0.4567441179f, 0.3480375726f, 0.2340859886f, 0.1187851647f, 0.0059210218f, + -0.1009603020f, -0.1986681163f, -0.2844680876f, -0.3561617036f, -0.4121449494f, -0.4514415411f, -0.4737129527f, -0.4792427680f, + -0.4688992715f, -0.4440758562f, -0.4066146191f, -0.3587143469f, -0.3028292405f, -0.2415605597f, -0.1775478604f, -0.1133622284f, + -0.0514077865f, 0.0061666480f, 0.0575405302f, 0.1012784567f, 0.1363672493f, 0.1622340919f, 0.1787438032f, 0.1861777807f, + 0.1851944065f, 0.1767749919f, 0.1621564237f, 0.1427557163f, 0.1200884424f, 0.0956867818f, 0.0710192746f, 0.0474178663f, + 0.0260137499f, 0.0076867119f, -0.0069716085f, -0.0176776741f, -0.0244598245f, -0.0276479905f, -0.0278485265f, -0.0259604376f, + -0.0231942463f, -0.0203712397f, -0.0176250103f, -0.0150030188f, -0.0125853805f, -0.0104245492f, -0.0085536471f, -0.0069822366f, + -0.0057037888f, -0.0046971305f, -0.0039324091f, -0.0033733475f, -0.0029816582f, -0.0027187689f, -0.0025487112f, -0.0024389400f, + -0.0023618935f, -0.0022949607f, -0.0022210429f, -0.0021279181f, -0.0020081783f, -0.0018582858f, -0.0016782193f, -0.0014704729f, + -0.0012396507f, -0.0009915718f, -0.0007329515f, -0.0004706874f, -0.0002116789f, 0.0000376970f, 0.0002716276f, 0.0004852251f, + 0.0006744554f, 0.0008363689f, 0.0009689456f, 0.0010712272f, 0.0011431025f, 0.0011853673f, 0.0011994712f, 0.0011875293f, + 0.0011520531f, 0.0010959403f, 0.0010222139f, 0.0009340189f, 0.0008343934f, 0.0007262955f, 0.0006124255f, 0.0004952948f, + 0.0003771045f, 0.0002598545f, 0.0001452665f, 0.0000349171f, -0.0000698172f, -0.0001676287f, -0.0002573385f, -0.0003377893f, + -0.0004079306f, -0.0004667485f, -0.0005133801f, -0.0005470765f, -0.0005673356f, -0.0005738781f, -0.0005667759f, -0.0005464152f, + -0.0005135934f, -0.0004694478f, -0.0004155042f, -0.0003535607f, -0.0002856874f, -0.0002140732f, -0.0001409939f, -0.0000686445f, + 0.0000008966f, 0.0000658187f, 0.0001245893f, 0.0001760633f, 0.0002194479f, 0.0002543579f, 0.0002807311f, 0.0002988367f, + 0.0003091550f, 0.0003123597f, 0.0003091881f, 0.0003004253f, 0.0002867930f, 0.0002689588f, 0.0002474626f, 0.0002227630f, + 0.0001952039f, 0.0001650929f, 0.0001326952f, 0.0000983261f, 0.0000623480f, 0.0000252528f, -0.0000123602f, -0.0000497334f, + -0.0000860060f, -0.0001202016f, -0.0001513162f, -0.0001783353f, -0.0002003408f, -0.0002165359f, -0.0002263463f, -0.0002294298f, + -0.0002257477f, -0.0002155386f, -0.0001993478f, -0.0001779591f, -0.0001523829f, -0.0001237555f, -0.0000933024f, -0.0000622262f, + -0.0000316695f, -0.0000026169f, 0.0000241191f, 0.0000479620f, 0.0000685482f, 0.0000857501f, 0.0000996158f, 0.0001103594f, + 0.0001182780f, 0.0001237279f, 0.0001270411f, 0.0001285109f, 0.0001283284f, 0.0001265953f, 0.0001232928f, 0.0001183261f, + 0.0001115250f, 0.0001027124f, 0.0000917214f, 0.0000784695f, 0.0000629720f, 0.0000454005f, 0.0000260736f, 0.0000054844f, + -0.0000157413f, -0.0000368512f, -0.0000570374f, -0.0000754661f, -0.0000913623f, -0.0001040431f, -0.0001129942f, + -0.0001518039f, -0.0001490944f, -0.0001437563f, -0.0001359447f, -0.0001258775f, -0.0001138183f, -0.0001000584f, -0.0000848958f, + -0.0000686184f, -0.0000514869f, -0.0000337271f, -0.0000155230f, 0.0000029786f, 0.0000216627f, 0.0000404299f, 0.0000591833f, + 0.0000778062f, 0.0000961486f, 0.0001140075f, 0.0001311212f, 0.0001471607f, 0.0001617373f, 0.0001744077f, 0.0001846979f, + 0.0001921197f, 0.0001962050f, 0.0001965285f, 0.0001927436f, 0.0001846019f, 0.0001719815f, 0.0001548948f, 0.0001335028f, + 0.0001081065f, 0.0000791461f, 0.0000471762f, 0.0000128542f, -0.0000230952f, -0.0000598950f, -0.0000967535f, -0.0001328756f, + -0.0001674945f, -0.0001998742f, -0.0002293319f, -0.0002552303f, -0.0002769922f, -0.0002940867f, -0.0003060409f, -0.0003124253f, + -0.0003128705f, -0.0003070572f, -0.0002947414f, -0.0002757524f, -0.0002500272f, -0.0002176130f, -0.0001787066f, -0.0001336551f, + -0.0000829924f, -0.0000274293f, 0.0000321218f, 0.0000945733f, 0.0001586548f, 0.0002229603f, 0.0002859566f, 0.0003460483f, + 0.0004015979f, 0.0004510007f, 0.0004927070f, 0.0005252984f, 0.0005475019f, 0.0005582587f, 0.0005567241f, 0.0005423236f, + 0.0005147357f, 0.0004739352f, 0.0004201606f, 0.0003539484f, 0.0002760880f, 0.0001876525f, 0.0000899450f, -0.0000154720f, + -0.0001268367f, -0.0002421597f, -0.0003592929f, -0.0004759036f, -0.0005895563f, -0.0006976915f, -0.0007977237f, -0.0008870259f, + -0.0009630432f, -0.0010232813f, -0.0010654313f, -0.0010873564f, -0.0010872233f, -0.0010634782f, -0.0010149807f, -0.0009409632f, + -0.0008411655f, -0.0007157758f, -0.0005655665f, -0.0003918178f, -0.0001964570f, 0.0000180385f, 0.0002485007f, 0.0004912017f, + 0.0007417257f, 0.0009951609f, 0.0012460131f, 0.0014884994f, 0.0017165405f, 0.0019242012f, 0.0021057906f, 0.0022564772f, + 0.0023724911f, 0.0024518980f, 0.0024948363f, 0.0025043647f, 0.0024865838f, 0.0024513953f, 0.0024122725f, 0.0023867094f, + 0.0023953488f, 0.0024618909f, 0.0026112876f, 0.0028689594f, 0.0032578396f, 0.0037969386f, 0.0044971599f, 0.0053595648f, + 0.0063700240f, 0.0074979980f, 0.0086900568f, 0.0098707813f, 0.0109344936f, 0.0117523261f, 0.0121588428f, 0.0119927747f, + 0.0108338004f, 0.0076669462f, 0.0015951619f, -0.0077015608f, -0.0201874668f, -0.0355062002f, -0.0530094339f, -0.0717877750f, + -0.0907221346f, -0.1085412898f, -0.1238936126f, -0.1354215686f, -0.1418421064f, -0.1420235850f, -0.1350600376f, -0.1203351392f, + -0.0975759142f, -0.0668903695f, -0.0287893898f, 0.0158109005f, 0.0656049927f, 0.1189337419f, 0.1738373906f, 0.2281255290f, + 0.2794600956f, 0.3254494085f, 0.3637483740f, 0.3921617568f, 0.4087452458f, 0.4119008001f, 0.4004612717f, 0.3737611396f, + 0.3316892920f, 0.2747217255f, 0.2039316066f, 0.1209761088f, 0.0280593378f, -0.0721274395f, -0.1764869974f, -0.2816158102f, + -0.3839191559f, -0.4797372694f, -0.5654782669f, -0.6377526073f, -0.6935042311f, -0.7301330421f, -0.7456040786f, -0.7385387273f, + -0.7082842960f, -0.6549586998f, -0.5794681743f, -0.4834966938f, -0.3694669951f, -0.2404740552f, -0.1001929952f, 0.0472356415f, + 0.1973394347f, 0.3454617961f, 0.4869187455f, 0.6171590292f, 0.7319219537f, 0.8273869572f, 0.9003096301f, 0.9481388242f, + 0.9691107389f, 0.9623160652f, 0.9277378915f, 0.8662587282f, 0.7796363134f, 0.6704507997f, 0.5420235210f, 0.3983429587f, + 0.2439770306f, 0.0835515600f, -0.0785437339f, -0.2379253926f, -0.3902709949f, -0.5314762215f, -0.6577657562f, -0.7658017175f, + -0.8527727865f, -0.9164711922f, -0.9553496178f, -0.9685606622f, -0.9559747754f, -0.9181785555f, -0.8564517514f, -0.7727251920f, + -0.6695198086f, -0.5498696134f, -0.4172301964f, -0.2753762088f, -0.1282903603f, 0.0199522336f, 0.1653013209f, 0.3038465453f, + 0.4319271716f, 0.5462330255f, 0.6438939828f, 0.7225552652f, 0.7804366545f, 0.8163739029f, 0.8298414763f, 0.8209560951f, + 0.7904613476f, 0.7396940415f, 0.6705336701f, 0.5853367342f, 0.4868582109f, 0.3781627335f, 0.2625283931f, 0.1433461974f, + 0.0240183452f, -0.0921415681f, -0.2020034062f, -0.3027076056f, -0.3917420558f, -0.4670065944f, -0.5268634348f, -0.5701722713f, + -0.5963093708f, -0.6051704118f, -0.5971574290f, -0.5731506218f, -0.5344663552f, -0.4828029698f, -0.4201764962f, -0.3488485038f, + -0.2712486558f, -0.1898944962f, -0.1073111782f, -0.0259536082f, 0.0518664854f, 0.1240464667f, 0.1887496815f, 0.2444518757f, + 0.2899758594f, 0.3245137882f, 0.3476366187f, 0.3592909899f, 0.3597839221f, 0.3497564092f, 0.3301470195f, 0.3021472383f, + 0.2671501836f, 0.2266948496f, 0.1824077493f, 0.1359442498f, 0.0889314191f, 0.0429145298f, -0.0006912934f, -0.0406425334f, + -0.0759009165f, -0.1056580541f, -0.1293508553f, -0.1466672055f, -0.1575424230f, -0.1621466320f, -0.1608642639f, -0.1542663510f, + -0.1430773876f, -0.1281377523f, -0.1103638299f, -0.0907069045f, -0.0701130981f, -0.0494852310f, -0.0296487968f, -0.0113224665f, + 0.0049049322f, 0.0185912359f, 0.0294499482f, 0.0373525686f, 0.0423229093f, 0.0445255530f, 0.0442471860f, 0.0418741009f, + 0.0378642492f, 0.0327185225f, 0.0269484800f, 0.0210472303f, 0.0154578360f, 0.0105498876f, 0.0065912187f, 0.0037323571f, + 0.0018671281f, 0.0006505029f, -0.0001484215f, -0.0006222332f, -0.0008521845f, -0.0009057969f, -0.0008424506f, -0.0007103595f, + -0.0005491202f, -0.0003884807f, -0.0002503188f, -0.0001485007f, -0.0000907440f, -0.0000790482f, -0.0001114146f, -0.0001824655f, + -0.0002849020f, -0.0004100554f, -0.0005489962f, -0.0006928821f, -0.0008336988f, -0.0009643687f, -0.0010791665f, -0.0011736223f, + -0.0012446927f, -0.0012905298f, -0.0013105005f, -0.0013048967f, -0.0012748875f, -0.0012222325f, -0.0011492257f, -0.0010584505f, + -0.0009527473f, -0.0008350241f, -0.0007082563f, -0.0005753473f, -0.0004391546f, -0.0003023856f, -0.0001676358f, -0.0000373054f, + 0.0000863632f, 0.0002013598f, 0.0003058750f, 0.0003983709f, 0.0004775550f, 0.0005424460f, 0.0005923474f, 0.0006269020f, + 0.0006460595f, 0.0006501134f, 0.0006396557f, 0.0006155940f, 0.0005790906f, 0.0005315601f, 0.0004745961f, 0.0004099540f, + 0.0003394710f, 0.0002650418f, 0.0001885408f, 0.0001117995f, 0.0000365379f, -0.0000356487f, -0.0001033434f, -0.0001653071f, + -0.0002205157f, -0.0002681453f, -0.0003075938f, -0.0003384554f, -0.0003605306f, -0.0003737941f, -0.0003783989f, -0.0003746427f, + -0.0003629698f, -0.0003439392f, -0.0003182272f, -0.0002865979f, -0.0002499066f, -0.0002090714f, -0.0001650754f, -0.0001189372f, + -0.0000717098f, -0.0000244485f, 0.0000217960f, 0.0000660121f, 0.0001072384f, 0.0001445996f, 0.0001773182f, 0.0002047476f, + 0.0002263802f, 0.0002418727f, 0.0002510450f, 0.0002538948f, 0.0002505843f, 0.0002414409f, 0.0002269326f, 0.0002076567f, + 0.0001843057f, 0.0001576490f, 0.0001284948f, 0.0000976709f, 0.0000659883f, 0.0000342273f, 0.0000031084f, -0.0000267131f, + -0.0000546656f, -0.0000802581f, -0.0001030882f, -0.0001228320f, -0.0001392462f, -0.0001521538f, -0.0001614454f, -0.0001670654f, + -0.0001690150f, -0.0001673428f, -0.0001621512f, -0.0001535906f, -0.0001418693f, -0.0001272490f, -0.0001100543f, -0.0000906661f, + -0.0000695268f, -0.0000471286f, -0.0000240107f, -0.0000007413f, 0.0000220928f, 0.0000439109f, 0.0000641527f, 0.0000823053f, + 0.0000979177f, 0.0001106244f, 0.0001201540f, 0.0001263447f, 0.0001291432f, 0.0001286087f, 0.0001249010f, 0.0001182738f, + -0.0000677642f, -0.0000523826f, -0.0000355858f, -0.0000177135f, 0.0000008632f, 0.0000197497f, 0.0000385362f, 0.0000568069f, + 0.0000741490f, 0.0000901630f, 0.0001044714f, 0.0001167282f, 0.0001266271f, 0.0001339090f, 0.0001383682f, 0.0001398580f, + 0.0001382933f, 0.0001336542f, 0.0001259858f, 0.0001153988f, 0.0001020662f, 0.0000862221f, 0.0000681561f, 0.0000482094f, + 0.0000267679f, 0.0000042570f, -0.0000188674f, -0.0000421254f, -0.0000650225f, -0.0000870579f, -0.0001077348f, -0.0001265690f, + -0.0001431007f, -0.0001569032f, -0.0001675946f, -0.0001748464f, -0.0001783945f, -0.0001780466f, -0.0001736910f, -0.0001653012f, + -0.0001529419f, -0.0001367694f, -0.0001170335f, -0.0000940728f, -0.0000683121f, -0.0000402526f, -0.0000104645f, 0.0000204271f, + 0.0000517530f, 0.0000828177f, 0.0001129118f, 0.0001413312f, 0.0001673905f, 0.0001904409f, 0.0002098828f, 0.0002251816f, + 0.0002358781f, 0.0002416012f, 0.0002420750f, 0.0002371285f, 0.0002266990f, 0.0002108387f, 0.0001897144f, 0.0001636105f, + 0.0001329251f, 0.0000981694f, 0.0000599596f, 0.0000190121f, -0.0000238695f, -0.0000678035f, -0.0001118486f, -0.0001550177f, + -0.0001963012f, -0.0002346852f, -0.0002691787f, -0.0002988340f, -0.0003227757f, -0.0003402211f, -0.0003505078f, -0.0003531107f, + -0.0003476646f, -0.0003339751f, -0.0003120340f, -0.0002820207f, -0.0002443090f, -0.0001994588f, -0.0001482132f, -0.0000914813f, + -0.0000303277f, 0.0000340527f, 0.0001003514f, 0.0001671757f, 0.0002330697f, 0.0002965468f, 0.0003561116f, 0.0004102952f, + 0.0004576768f, 0.0004969199f, 0.0005267939f, 0.0005462097f, 0.0005542410f, 0.0005501582f, 0.0005334466f, 0.0005038372f, + 0.0004613187f, 0.0004061612f, 0.0003389189f, 0.0002604423f, 0.0001718676f, 0.0000746148f, -0.0000296392f, -0.0001389767f, + -0.0002512831f, -0.0003642749f, -0.0004755563f, -0.0005826556f, -0.0006830878f, -0.0007743933f, -0.0008542007f, -0.0009202618f, + -0.0009705111f, -0.0010030942f, -0.0010164239f, -0.0010092036f, -0.0009804838f, -0.0009296846f, -0.0008566574f, -0.0007617096f, + -0.0006456731f, -0.0005099278f, -0.0003564679f, -0.0001879096f, -0.0000075330f, 0.0001807554f, 0.0003724395f, 0.0005625175f, + 0.0007456177f, 0.0009162481f, 0.0010690442f, 0.0011991672f, 0.0013026871f, 0.0013771151f, 0.0014218793f, 0.0014389208f, + 0.0014331600f, 0.0014130261f, 0.0013907522f, 0.0013826603f, 0.0014090891f, 0.0014942408f, 0.0016655626f, 0.0019530043f, + 0.0023877813f, 0.0030010282f, 0.0038221874f, 0.0048773753f, 0.0061889900f, 0.0077755997f, 0.0096751224f, 0.0119741302f, + 0.0145439912f, 0.0169456183f, 0.0187073400f, 0.0194030360f, 0.0186550704f, 0.0161628228f, 0.0117223361f, 0.0052458122f, + -0.0032269514f, -0.0135216735f, -0.0253307510f, -0.0382203402f, -0.0516449105f, -0.0649674012f, -0.0774853341f, -0.0884609329f, + -0.0971548077f, -0.1028611423f, -0.1049434729f, -0.1028690049f, -0.0962403901f, -0.0848231076f, -0.0685674901f, -0.0476239362f, + -0.0223507100f, 0.0066865637f, 0.0387237751f, 0.0728157951f, 0.1078619795f, 0.1426392416f, 0.1758415350f, 0.2061246656f, + 0.2321547755f, 0.2526589705f, 0.2664761293f, 0.2726061478f, 0.2702555997f, 0.2588781212f, 0.2382077111f, 0.2082835801f, + 0.1694652065f, 0.1224367910f, 0.0682004341f, 0.0080579540f, -0.0564185505f, -0.1234266811f, -0.1909833663f, -0.2569826708f, + -0.3192601922f, -0.3756619825f, -0.4241159008f, -0.4627029725f, -0.4897264437f, -0.5037760457f, -0.5037852577f, -0.4890793474f, + -0.4594123986f, -0.4149916704f, -0.3564881936f, -0.2850327525f, -0.2021970477f, -0.1099601299f, -0.0106608717f, 0.0930624757f, + 0.1983439454f, 0.3021708437f, 0.4014716150f, 0.4932080681f, 0.5744690342f, 0.6425626416f, 0.6951041455f, 0.7300965662f, + 0.7460013189f, 0.7417965309f, 0.7170208283f, 0.6718010612f, 0.6068626327f, 0.5235219179f, 0.4236604995f, 0.3096818407f, + 0.1844512322f, 0.0512207469f, -0.0864589501f, -0.2248372460f, -0.3600700554f, -0.4883307618f, -0.6059225628f, -0.7093885522f, + -0.7956164474f, -0.8619344004f, -0.9061952044f, -0.9268458353f, -0.9229804407f, -0.8943745512f, -0.8414997451f, -0.7655175933f, + -0.6682534406f, -0.5521499681f, -0.4202024874f, -0.2758769248f, -0.1230137793f, 0.0342802674f, 0.1917486212f, 0.3451070280f, + 0.4901663081f, 0.6229542130f, 0.7398298367f, 0.8375910214f, 0.9135663759f, 0.9656969770f, 0.9925961604f, 0.9936618731f, + 0.9690844417f, 0.9196504635f, 0.8467117373f, 0.7522210603f, 0.6386799560f, 0.5090760386f, 0.3668025779f, 0.2155702981f, + 0.0593086479f, -0.0979369079f, -0.2521117236f, -0.3992577525f, -0.5356173001f, -0.6577304376f, -0.7625247715f, -0.8473940864f, + -0.9102647317f, -0.9496471895f, -0.9646722171f, -0.9551100144f, -0.9213725472f, -0.8644985297f, -0.7861220221f, -0.6884251575f, + -0.5740767467f, -0.4461581538f, -0.3080788471f, -0.1634836803f, -0.0161547423f, 0.1300897818f, 0.2714967454f, 0.4044766502f, + 0.5256968794f, 0.6321672656f, 0.7213155657f, 0.7910510602f, 0.8398145087f, 0.8666133944f, 0.8710415117f, 0.8532826677f, + 0.8140984457f, 0.7548006627f, 0.6772093367f, 0.5835975864f, 0.4766250203f, 0.3592616720f, 0.2347045793f, 0.1062894680f, + -0.0226000741f, -0.1486233373f, -0.2685707508f, -0.3794472128f, -0.4785483597f, -0.5635277262f, -0.6324531653f, -0.6838510882f, + -0.7167375675f, -0.7306356074f, -0.7255783918f, -0.7020986046f, -0.6612044089f, -0.6043429290f, -0.5333525140f, -0.4504052564f, + -0.3579415767f, -0.2585987895f, -0.1551357820f, -0.0503559257f, 0.0529695663f, 0.1521757603f, 0.2447735547f, 0.3285128639f, + 0.4014377748f, 0.4619323450f, 0.5087559395f, 0.5410673824f, 0.5584374718f, 0.5608498058f, 0.5486901404f, 0.5227248799f, + 0.4840695396f, 0.4341483415f, 0.3746462780f, 0.3074552135f, 0.2346156774f, 0.1582561348f, 0.0805315031f, 0.0035627058f, + -0.0706210625f, -0.1401357650f, -0.2032902555f, -0.2586270896f, -0.3049554547f, -0.3413754822f, -0.3672935096f, -0.3824281003f, + -0.3868069422f, -0.3807549745f, -0.3648743722f, -0.3400172139f, -0.3072518737f, -0.2678243125f, -0.2231155831f, -0.1745969158f, + -0.1237838039f, -0.0721904757f, -0.0212861041f, 0.0275460057f, 0.0730451234f, 0.1141047432f, 0.1497983924f, 0.1793990348f, + 0.2023917050f, 0.2184792403f, 0.2275811871f, 0.2298261737f, 0.2255382274f, 0.2152176942f, 0.1995175598f, 0.1792160900f, + 0.1551867943f, 0.1283667617f, 0.0997244393f, 0.0702278948f, 0.0408145632f, 0.0123633806f, -0.0143298873f, -0.0385734628f, + -0.0597959924f, -0.0775582602f, -0.0915599770f, -0.1016416466f, -0.1077816401f, -0.1100888003f, -0.1087910023f, -0.1042202530f, + -0.0967949724f, -0.0870002132f, -0.0753665756f, -0.0624486407f, -0.0488036800f, -0.0349714234f, -0.0214555345f, -0.0087074338f, + 0.0028870743f, 0.0130179511f, 0.0214576480f, 0.0280642424f, 0.0327810674f, 0.0356329290f, 0.0367192621f, 0.0362045427f, + 0.0343065259f, 0.0312827821f, 0.0274162441f, 0.0230002982f, 0.0183241826f, 0.0136591847f, 0.0092463500f, 0.0052860575f, + 0.0019300215f, -0.0007241258f, -0.0026354098f, -0.0038192546f, -0.0043449892f, -0.0043308242f, -0.0039467893f, -0.0034183427f, + -0.0028980777f, -0.0024111931f, -0.0019661658f, -0.0015766458f, -0.0012505436f, -0.0009916652f, -0.0007991070f, -0.0006687325f, + -0.0005935987f, -0.0005651424f, -0.0005737315f, -0.0006095407f, -0.0006629742f, -0.0007252278f, -0.0007885086f, -0.0008463178f, + -0.0008934778f, -0.0009262011f, -0.0009419761f, -0.0009394996f, -0.0009184875f, -0.0008795438f, -0.0008239543f, -0.0007535478f, + -0.0006705140f, -0.0005772899f, -0.0004764213f, -0.0003704871f, -0.0002620058f, -0.0001533948f, -0.0000469126f, 0.0000553574f, + 0.0001515421f, 0.0002399825f, 0.0003192564f, 0.0003881782f, 0.0004458153f, 0.0004914859f, 0.0005247706f, 0.0005455066f, + 0.0005537921f, 0.0005499733f, 0.0005346385f, 0.0005085956f, 0.0004728546f, 0.0004285952f, 0.0003771392f, 0.0003199107f, + 0.0002584034f, 0.0001941376f, 0.0001286276f, 0.0000633423f, -0.0000003230f, -0.0000610784f, -0.0001177585f, -0.0001693439f, + -0.0002149716f, -0.0002539451f, -0.0002857364f, -0.0003099879f, -0.0003265074f, -0.0003352642f, -0.0003363800f, -0.0003301214f, + -0.0003168882f, -0.0002972036f, -0.0002717009f, -0.0002411115f, -0.0002062492f, -0.0001679960f, -0.0001272837f, -0.0000850767f, + -0.0000423512f, -0.0000000757f, 0.0000408118f, 0.0000794235f, 0.0001149437f, 0.0001466472f, 0.0001739170f, 0.0001962578f, + 0.0002133072f, 0.0002248417f, 0.0002307793f, 0.0002311773f, 0.0002262259f, 0.0002162377f, 0.0002016344f, 0.0001829302f, + 0.0001607141f, 0.0001356302f, 0.0001083590f, 0.0000795981f, 0.0000500456f, 0.0000203831f, -0.0000087366f, -0.0000367025f, + -0.0000629538f, -0.0000869878f, -0.0001083652f, -0.0001267149f, -0.0001417362f, -0.0001532019f, -0.0001609587f, -0.0001649294f, + -0.0001651125f, -0.0001615824f, -0.0001544884f, -0.0001440526f, -0.0001305669f, -0.0001143883f, -0.0000959318f, -0.0000756626f, + -0.0000540855f, -0.0000317331f, -0.0000091523f, 0.0000131100f, 0.0000345222f, 0.0000545822f, 0.0000728319f, 0.0000888696f, + 0.0001023607f, 0.0001130460f, 0.0001207471f, 0.0001253683f, 0.0001268968f, 0.0001253988f, 0.0001210137f, 0.0001139460f, + -0.0000409890f, -0.0000231831f, -0.0000044979f, 0.0000146405f, 0.0000337894f, 0.0000524983f, 0.0000703210f, 0.0000868245f, + 0.0001016007f, 0.0001142746f, 0.0001245146f, 0.0001320387f, 0.0001366230f, 0.0001381059f, 0.0001363940f, 0.0001314632f, + 0.0001233624f, 0.0001122120f, 0.0000982042f, 0.0000815988f, 0.0000627207f, 0.0000419531f, 0.0000197321f, -0.0000034635f, + -0.0000271191f, -0.0000506974f, -0.0000736478f, -0.0000954205f, -0.0001154773f, -0.0001333068f, -0.0001484351f, -0.0001604403f, + -0.0001689621f, -0.0001737145f, -0.0001744920f, -0.0001711796f, -0.0001637549f, -0.0001522934f, -0.0001369666f, -0.0001180419f, + -0.0000958757f, -0.0000709093f, -0.0000436571f, -0.0000146989f, 0.0000153358f, 0.0000457778f, 0.0000759362f, 0.0001051099f, + 0.0001326066f, 0.0001577542f, 0.0001799192f, 0.0001985179f, 0.0002130330f, 0.0002230225f, 0.0002281351f, 0.0002281154f, + 0.0002228168f, 0.0002122035f, 0.0001963592f, 0.0001754845f, 0.0001499022f, 0.0001200490f, 0.0000864751f, 0.0000498314f, + 0.0000108634f, -0.0000296076f, -0.0000706952f, -0.0001114718f, -0.0001509832f, -0.0001882759f, -0.0002224138f, -0.0002525068f, + -0.0002777271f, -0.0002973368f, -0.0003107015f, -0.0003173138f, -0.0003168019f, -0.0003089482f, -0.0002936908f, -0.0002711354f, + -0.0002415497f, -0.0002053687f, -0.0001631812f, -0.0001157294f, -0.0000638885f, -0.0000086610f, 0.0000488496f, 0.0001074488f, + 0.0001658824f, 0.0002228496f, 0.0002770388f, 0.0003271423f, 0.0003718955f, 0.0004100930f, 0.0004406281f, 0.0004625082f, + 0.0004748944f, 0.0004771120f, 0.0004686867f, 0.0004493486f, 0.0004190617f, 0.0003780176f, 0.0003266564f, 0.0002656483f, + 0.0001959041f, 0.0001185450f, 0.0000349034f, -0.0000535185f, -0.0001450543f, -0.0002379235f, -0.0003302403f, -0.0004200698f, + -0.0005054364f, -0.0005843853f, -0.0006549896f, -0.0007154171f, -0.0007639381f, -0.0007990015f, -0.0008192451f, -0.0008235853f, + -0.0008112325f, -0.0007817958f, -0.0007353001f, -0.0006723017f, -0.0005938949f, -0.0005018237f, -0.0003984545f, -0.0002868589f, + -0.0001707179f, -0.0000543437f, 0.0000575249f, 0.0001597921f, 0.0002473552f, 0.0003152810f, 0.0003593211f, 0.0003761803f, + 0.0003641895f, 0.0003236064f, 0.0002574060f, 0.0001714998f, 0.0000755882f, -0.0000168765f, -0.0000877911f, -0.0001149323f, + -0.0000708145f, 0.0000759664f, 0.0003632082f, 0.0008340171f, 0.0015932147f, 0.0027965684f, 0.0044938862f, 0.0066209827f, + 0.0090614394f, 0.0116532691f, 0.0142012098f, 0.0164868538f, 0.0182824288f, 0.0193635282f, 0.0195233202f, 0.0185852780f, + 0.0164156862f, 0.0129338578f, 0.0081207820f, 0.0020247377f, -0.0052355839f, -0.0134714261f, -0.0224272216f, -0.0317873061f, + -0.0411854169f, -0.0502171478f, -0.0584545493f, -0.0654627361f, -0.0708175739f, -0.0741240923f, -0.0750346389f, -0.0732663141f, + -0.0686167330f, -0.0609776578f, -0.0503456776f, -0.0368295907f, -0.0206538852f, -0.0021581782f, 0.0182077069f, 0.0398928946f, + 0.0622588452f, 0.0845965541f, 0.1061472474f, 0.1261258801f, 0.1437468496f, 0.1582510183f, 0.1689332690f, 0.1751695690f, + 0.1764426874f, 0.1723655442f, 0.1627013795f, 0.1473798510f, 0.1265084200f, 0.1003783769f, 0.0694651504f, 0.0344225859f, + -0.0039288047f, -0.0446195451f, -0.0865544564f, -0.1285410062f, -0.1693219800f, -0.2076116501f, -0.2421343744f, -0.2716645414f, + -0.2950666012f, -0.3113339711f, -0.3196255083f, -0.3192983638f, -0.3099360208f, -0.2913705151f, -0.2636979059f, -0.2272863207f, + -0.1827760335f, -0.1310713384f, -0.0733241526f, -0.0109096078f, 0.0546059294f, 0.1215036544f, 0.1879570196f, 0.2520811416f, + 0.3119856181f, 0.3658292498f, 0.4118751262f, 0.4485444179f, 0.4744672713f, 0.4885291873f, 0.4899114116f, 0.4781239515f, + 0.4530300662f, 0.4148612531f, 0.3642220549f, 0.3020842490f, 0.2297703310f, 0.1489264657f, 0.0614854435f, -0.0303795649f, + -0.1243093268f, -0.2178195955f, -0.3083672722f, -0.3934199265f, -0.4705267388f, -0.5373888894f, -0.5919273479f, -0.6323460927f, + -0.6571888364f, -0.6653875249f, -0.6563010343f, -0.6297427848f, -0.5859962378f, -0.5258176130f, -0.4504254723f, -0.3614772269f, + -0.2610329551f, -0.1515073286f, -0.0356107555f, 0.0837187871f, 0.2033915080f, 0.3202471384f, 0.4311396943f, 0.5330233362f, + 0.6230369707f, 0.6985851980f, 0.7574133141f, 0.7976741718f, 0.8179849388f, 0.8174720079f, 0.7958026627f, 0.7532024103f, + 0.6904573239f, 0.6089011023f, 0.5103870229f, 0.3972453408f, 0.2722271452f, 0.1384360281f, -0.0007506793f, -0.1417690856f, + -0.2809620112f, -0.4146758861f, -0.5393586304f, -0.6516558729f, -0.7485028256f, -0.8272092868f, -0.8855353494f, -0.9217556888f, + -0.9347105366f, -0.9238418625f, -0.8892136169f, -0.8315153830f, -0.7520491685f, -0.6526996069f, -0.5358882111f, -0.4045128580f, + -0.2618739995f, -0.1115895724f, 0.0424992034f, 0.1964285728f, 0.3462168980f, 0.4879703230f, 0.6179866516f, 0.7328545277f, + 0.8295452782f, 0.9054947981f, 0.9586733060f, 0.9876409196f, 0.9915876025f, 0.9703562358f, 0.9244482541f, 0.8550115930f, + 0.7638112998f, 0.6531839260f, 0.5259766298f, 0.3854793593f, 0.2353470917f, 0.0794266997f, -0.0783736011f, -0.2341094912f, + -0.3838855272f, -0.5239604170f, -0.6508401618f, -0.7613664334f, -0.8527950879f, -0.9228648741f, -0.9698533854f, -0.9926197484f, + -0.9906323266f, -0.9639812550f, -0.9133750995f, -0.8401220648f, -0.7460959702f, -0.6336880996f, -0.5057459675f, -0.3655007408f, + -0.2164850263f, -0.0624432571f, 0.0927631497f, 0.2452533396f, 0.3912248813f, 0.5270493663f, 0.6493633998f, 0.7551526079f, + 0.8418266049f, 0.9072829806f, 0.9499587608f, 0.9688680208f, 0.9636247817f, 0.9344506105f, 0.8821668237f, 0.8081715061f, + 0.7144020216f, 0.6032839905f, 0.4776681160f, 0.3407564859f, 0.1960202987f, 0.0471111158f, -0.1022320452f, -0.2482774188f, + -0.3873945568f, -0.5161453835f, -0.6313699144f, -0.7302645031f, -0.8104506434f, -0.8700326423f, -0.9076427350f, -0.9224725808f, + -0.9142903937f, -0.8834433701f, -0.8308454204f, -0.7579506175f, -0.6667131091f, -0.5595346127f, -0.4392008921f, -0.3088089180f, + -0.1716866150f, -0.0313073005f, 0.1087989808f, 0.2451349347f, 0.3743240333f, 0.4931948249f, 0.5988594260f, 0.6887842282f, + 0.7608510829f, 0.8134074688f, 0.8453044545f, 0.8559215759f, 0.8451781058f, 0.8135305285f, 0.7619564059f, 0.6919251500f, + 0.6053565671f, 0.5045683259f, 0.3922137963f, 0.2712119195f, 0.1446709795f, 0.0158082697f, -0.1121322505f, -0.2359621952f, + -0.3526287795f, -0.4592906218f, -0.5533874164f, -0.6327017647f, -0.6954116543f, -0.7401323484f, -0.7659467130f, -0.7724233338f, + -0.7596220816f, -0.7280871206f, -0.6788276697f, -0.6132871451f, -0.5333015981f, -0.4410486347f, -0.3389882280f, -0.2297970351f, + -0.1162979714f, -0.0013869076f, 0.1120416061f, 0.2211676650f, 0.3233165238f, 0.4160245192f, 0.4970987736f, 0.5646692200f, + 0.6172317171f, 0.6536812560f, 0.6733345403f, 0.6759414941f, 0.6616855531f, 0.6311728784f, 0.5854109229f, 0.5257770441f, + 0.4539781120f, 0.3720022713f, 0.2820642158f, 0.1865454701f, 0.0879312930f, -0.0112541288f, -0.1085124968f, -0.2014345624f, + -0.2877600257f, -0.3654326821f, -0.4326494615f, -0.4879021964f, -0.5300111477f, -0.5581495604f, -0.5718587503f, -0.5710534933f, + -0.5560177281f, -0.5273908494f, -0.4861450978f, -0.4335547859f, -0.3711582904f, -0.3007139250f, -0.2241509378f, -0.1435169935f, + -0.0609235618f, 0.0215093313f, 0.1017075454f, 0.1776950580f, 0.2476426746f, 0.3099120105f, 0.3630936929f, 0.4060388941f, + 0.4378835058f, 0.4580644620f, 0.4663279432f, 0.4627294004f, 0.4476255675f, 0.4216588257f, 0.3857344863f, 0.3409917280f, + 0.2887690825f, 0.2305654810f, 0.1679979813f, 0.1027573461f, 0.0365626923f, -0.0288835867f, -0.0919394404f, -0.1510642130f, + -0.2048561002f, -0.2520851099f, -0.2917207545f, -0.3229538699f, -0.3452121154f, -0.3581688961f, -0.3617456210f, -0.3561073997f, + -0.3416524423f, -0.3189955996f, -0.2889466186f, -0.2524838235f, -0.2107240303f, -0.1648895947f, -0.1162735377f, -0.0662037318f, + -0.0160071241f, 0.0330250452f, 0.0796701284f, 0.1228042256f, 0.1614288774f, 0.1946936678f, 0.2219142443f, 0.2425853919f, + 0.2563889487f, 0.2631964891f, 0.2630668532f, 0.2562387302f, 0.2431186436f, 0.2242647892f, 0.2003672939f, 0.1722255274f, + 0.1407231814f, 0.1068018529f, 0.0714339071f, 0.0355953755f, 0.0002396385f, -0.0337274180f, -0.0654701262f, -0.0942430905f, + -0.1194080954f, -0.1404475082f, -0.1569739116f, -0.1687358288f, -0.1756195042f, -0.1776468257f, -0.1749695713f, -0.1678602690f, + -0.1567000359f, -0.1419638484f, -0.1242037381f, -0.1040304695f, -0.0820942616f, -0.0590651422f, -0.0356134981f, -0.0123913771f, + 0.0099849609f, 0.0309507800f, 0.0500065129f, 0.0667289886f, 0.0807800207f, 0.0919121972f, 0.0999718200f, 0.1048990098f, + 0.1067250926f, 0.1055674412f, 0.1016220359f, 0.0951540418f, 0.0864867765f, 0.0759894469f, 0.0640640860f, 0.0511321002f, + 0.0376208624f, 0.0239507391f, 0.0105229429f, -0.0022914718f, -0.0141611639f, -0.0248023986f, -0.0339850878f, -0.0415368905f, + -0.0473453103f, -0.0513578334f, -0.0535801684f, -0.0540727489f, -0.0529456678f, -0.0503522968f, -0.0464818329f, -0.0415510875f, + -0.0357957930f, -0.0294617627f, -0.0227961726f, -0.0160392815f, -0.0094168137f, -0.0031332654f, 0.0026337157f, 0.0077376956f, + 0.0120665112f, 0.0155439285f, 0.0181299546f, 0.0198198008f, 0.0206416522f, 0.0206533153f, 0.0199379832f, 0.0185992414f, + 0.0167556135f, 0.0145347842f, 0.0120678335f, 0.0094835966f, 0.0069034859f, 0.0044368299f, 0.0021770482f, 0.0001986183f, + -0.0014448717f, -0.0027217639f, -0.0036221831f, -0.0041570536f, -0.0043559653f, -0.0042644747f, -0.0039403827f, -0.0034499387f, + -0.0028631090f, -0.0022496331f, -0.0016738218f, -0.0011929502f, -0.0008370454f, -0.0005846760f, -0.0004048972f, -0.0002842065f, + -0.0002119725f, -0.0001785258f, -0.0001746762f, -0.0001920559f, -0.0002230524f, -0.0002610877f, -0.0003005688f, -0.0003370221f, + -0.0003669912f, -0.0003880546f, -0.0003986770f, -0.0003981548f, -0.0003864480f, -0.0003640945f, -0.0003320500f, -0.0002916028f, + -0.0002442394f, -0.0001915781f, -0.0001352688f, -0.0000769517f, -0.0000181891f, 0.0000395524f, 0.0000949441f, 0.0001467973f, + 0.0001940871f, 0.0002359457f, 0.0002716760f, 0.0003007405f, 0.0003227698f, 0.0003375491f, 0.0003450236f, 0.0003452833f, + 0.0003385643f, 0.0003252319f, 0.0003057766f, 0.0002807946f, 0.0002509791f, 0.0002170975f, 0.0001799788f, 0.0001404893f, + 0.0000995183f, 0.0000579532f, 0.0000166659f, -0.0000235093f, -0.0000617873f, -0.0000974508f, -0.0001298571f, -0.0001584526f, + -0.0001827754f, -0.0002024649f, -0.0002172605f, -0.0002270070f, -0.0002316506f, -0.0002312399f, -0.0002259201f, -0.0002159308f, + -0.0002015976f, -0.0001833276f, -0.0001615981f, -0.0001369497f, -0.0001099729f, -0.0000812980f, -0.0000515797f, -0.0000214856f, + 0.0000083213f, 0.0000371946f, 0.0000645215f, 0.0000897344f, 0.0001123264f, 0.0001318594f, 0.0001479763f, 0.0001604052f, + 0.0001689663f, 0.0001735714f, 0.0001742252f, 0.0001710200f, 0.0001641324f, 0.0001538135f, 0.0001403825f, 0.0001242143f, + 0.0001057308f, 0.0000853884f, 0.0000636683f, 0.0000410646f, 0.0000180754f, -0.0000048078f, -0.0000271075f, -0.0000483697f, + -0.0000681699f, -0.0000861206f, -0.0001018770f, -0.0001151429f, -0.0001256753f, -0.0001332891f, -0.0001378602f, -0.0001393293f, + -0.0001377022f, -0.0001330520f, -0.0001255166f, -0.0001152976f, -0.0001026555f, -0.0000879046f, -0.0000714049f, -0.0000535546f, + -0.0000347786f, -0.0000155193f, 0.0000037762f, 0.0000226667f, 0.0000407288f, 0.0000575664f, 0.0000728215f, 0.0000861808f, + 0.0000582411f, 0.0000747547f, 0.0000898871f, 0.0001032552f, 0.0001145066f, 0.0001233290f, 0.0001294588f, 0.0001326885f, + 0.0001328735f, 0.0001299377f, 0.0001238768f, 0.0001147609f, 0.0001027340f, 0.0000880132f, 0.0000708843f, 0.0000516966f, + 0.0000308558f, 0.0000088150f, -0.0000139353f, -0.0000368781f, -0.0000594822f, -0.0000812142f, -0.0001015508f, -0.0001199912f, + -0.0001360692f, -0.0001493631f, -0.0001595073f, -0.0001661997f, -0.0001692106f, -0.0001683879f, -0.0001636621f, -0.0001550493f, + -0.0001426526f, -0.0001266610f, -0.0001073481f, -0.0000850672f, -0.0000602464f, -0.0000333807f, -0.0000050232f, 0.0000242254f, + 0.0000537286f, 0.0000828270f, 0.0001108523f, 0.0001371418f, 0.0001610527f, 0.0001819781f, 0.0001993603f, 0.0002127056f, + 0.0002215967f, 0.0002257043f, 0.0002247967f, 0.0002187482f, 0.0002075440f, 0.0001912841f, 0.0001701836f, 0.0001445712f, + 0.0001148842f, 0.0000816622f, 0.0000455367f, 0.0000072204f, -0.0000325082f, -0.0000728185f, -0.0001128466f, -0.0001517120f, + -0.0001885378f, -0.0002224679f, -0.0002526873f, -0.0002784386f, -0.0002990404f, -0.0003139008f, -0.0003225330f, -0.0003245650f, + -0.0003197504f, -0.0003079739f, -0.0002892583f, -0.0002637651f, -0.0002317973f, -0.0001937968f, -0.0001503441f, -0.0001021521f, + -0.0000500632f, 0.0000049600f, 0.0000618411f, 0.0001194039f, 0.0001763844f, 0.0002314533f, 0.0002832366f, 0.0003303508f, + 0.0003714378f, 0.0004052165f, 0.0004305340f, 0.0004464367f, 0.0004522372f, 0.0004476003f, 0.0004326187f, 0.0004079029f, + 0.0003746497f, 0.0003347161f, 0.0002906568f, 0.0002457555f, 0.0002040014f, 0.0001700503f, 0.0001491128f, 0.0001468223f, + 0.0001690255f, 0.0002215535f, 0.0003099526f, 0.0004392070f, 0.0006136491f, 0.0008369098f, 0.0011153908f, 0.0014626641f, + 0.0018595375f, 0.0022395932f, 0.0025311249f, 0.0026688715f, 0.0025944027f, 0.0022604100f, 0.0016336976f, 0.0006981998f, + -0.0005431676f, -0.0020672947f, -0.0038308355f, -0.0057710271f, -0.0078076165f, -0.0098456303f, -0.0117790591f, -0.0134951832f, + -0.0148794917f, -0.0158209062f, -0.0162171833f, -0.0159802046f, -0.0150409946f, -0.0133541921f, -0.0109018245f, -0.0076961552f, + -0.0037814932f, 0.0007651902f, 0.0058348824f, 0.0112884531f, 0.0169598389f, 0.0226604555f, 0.0281847079f, 0.0333164681f, + 0.0378363117f, 0.0415293031f, 0.0441930617f, 0.0456458479f, 0.0457343703f, 0.0443410397f, 0.0413903773f, 0.0368543265f, + 0.0307562218f, 0.0231732263f, 0.0142370712f, 0.0041330029f, -0.0069031215f, -0.0185895710f, -0.0306052464f, -0.0425978140f, + -0.0541932843f, -0.0650067808f, -0.0746542114f, -0.0827644992f, -0.0889920115f, -0.0930287926f, -0.0946162074f, -0.0935555973f, + -0.0897175729f, -0.0830495883f, -0.0735814928f, -0.0614287943f, -0.0467934430f, -0.0299620019f, -0.0113011569f, 0.0087494102f, + 0.0296866709f, 0.0509562355f, 0.0719663997f, 0.0921039151f, 0.1107510726f, 0.1273036411f, 0.1411891551f, 0.1518850212f, + 0.1589358970f, 0.1619698015f, 0.1607124306f, 0.1549991925f, 0.1447845216f, 0.1301481022f, 0.1112977047f, 0.0885684336f, + 0.0624182781f, 0.0334199675f, 0.0022492343f, -0.0303302958f, -0.0634852726f, -0.0963334260f, -0.1279665024f, -0.1574747445f, + -0.1839722700f, -0.2066226519f, -0.2246639837f, -0.2374326975f, -0.2443854241f, -0.2451182136f, -0.2393824923f, -0.2270972049f, + -0.2083566840f, -0.1834338958f, -0.1527788314f, -0.1170119438f, -0.0769126672f, -0.0334031935f, 0.0124721800f, 0.0595716856f, + 0.1066841340f, 0.1525596967f, 0.1959426466f, 0.2356052084f, 0.2703816159f, 0.2992014435f, 0.3211212759f, 0.3353538037f, + 0.3412934754f, 0.3385379160f, 0.3269044144f, 0.3064409015f, 0.2774309795f, 0.2403927139f, 0.1960710651f, 0.1454240053f, + 0.0896025447f, 0.0299250576f, -0.0321535327f, -0.0950769985f, -0.1572266359f, -0.2169627100f, -0.2726674612f, -0.3227885475f, + -0.3658817647f, -0.4006518763f, -0.4259904152f, -0.4410093734f, -0.4450697851f, -0.4378043259f, -0.4191331941f, -0.3892727036f, + -0.3487362065f, -0.2983271575f, -0.2391243433f, -0.1724595094f, -0.0998878249f, -0.0231518277f, 0.0558603212f, 0.1351612774f, + 0.2127145048f, 0.2864865610f, 0.3545003342f, 0.4148878376f, 0.4659411557f, 0.5061601567f, 0.5342956523f, 0.5493867774f, + 0.5507914983f, 0.5382093212f, 0.5116954608f, 0.4716659463f, 0.4188933721f, 0.3544932422f, 0.2799011075f, 0.1968409421f, + 0.1072854415f, 0.0134091535f, -0.0824644450f, -0.1779206367f, -0.2705144779f, -0.3578335937f, -0.4375611342f, -0.5075372480f, + -0.5658174366f, -0.6107262192f, -0.6409046287f, -0.6553502097f, -0.6534483577f, -0.6349940579f, -0.6002033141f, -0.5497138242f, + -0.4845747300f, -0.4062255582f, -0.3164647475f, -0.2174084443f, -0.1114405017f, -0.0011548715f, 0.1107082189f, 0.2213307209f, + 0.3278881365f, 0.4276219846f, 0.5179114992f, 0.5963426829f, 0.6607728958f, 0.7093892437f, 0.7407591825f, 0.7538719283f, + 0.7481694943f, 0.7235664280f, 0.6804576085f, 0.6197137625f, 0.5426646818f, 0.4510704345f, 0.3470811862f, 0.2331865442f, + 0.1121556241f, -0.0130307134f, -0.1392537831f, -0.2633353122f, -0.3821180118f, -0.4925464326f, -0.5917460154f, -0.6770982854f, + -0.7463102071f, -0.7974758632f, -0.8291287887f, -0.8402835311f, -0.8304652631f, -0.7997265817f, -0.7486509433f, -0.6783425346f, + -0.5904027183f, -0.4868935511f, -0.3702891985f, -0.2434164031f, -0.1093854415f, 0.0284867240f, 0.1667591937f, 0.3019536886f, + 0.4306427342f, 0.5495372068f, 0.6555710008f, 0.7459806116f, 0.8183775659f, 0.8708117817f, 0.9018241781f, 0.9104871053f, + 0.8964314857f, 0.8598598737f, 0.8015450208f, 0.7228138795f, 0.6255173800f, 0.5119866531f, 0.3849767570f, 0.2475992600f, + 0.1032453598f, -0.0444985629f, -0.1919408168f, -0.3353774466f, -0.4711860685f, -0.5959181193f, -0.7063871285f, -0.7997507598f, + -0.8735844695f, -0.9259448860f, -0.9554212155f, -0.9611733371f, -0.9429555253f, -0.9011251664f, -0.8366361515f, -0.7510170890f, + -0.6463347988f, -0.5251440036f, -0.3904244118f, -0.2455067964f, -0.0939898753f, 0.0603498686f, 0.2136531983f, 0.3620754993f, + 0.5018841040f, 0.6295530127f, 0.7418526589f, 0.8359323337f, 0.9093932351f, 0.9603501538f, 0.9874803034f, 0.9900578955f, + 0.9679736807f, 0.9217387716f, 0.8524727897f, 0.7618764115f, 0.6521892146f, 0.5261336069f, 0.3868465674f, 0.2378005415f, + 0.0827159689f, -0.0745329240f, -0.2300158926f, -0.3798465481f, -0.5202802756f, -0.6478099233f, -0.7592521853f, -0.8518447888f, + -0.9233379834f, -0.9720085218f, -0.9966758999f, -0.9967463299f, -0.9722295329f, -0.9237392201f, -0.8524778646f, -0.7602073639f, + -0.6492055631f, -0.5222103755f, -0.3823523682f, -0.2330778865f, -0.0780642593f, 0.0788705421f, 0.2338618240f, 0.3830931459f, + 0.5228902075f, 0.6498111734f, 0.7607313594f, 0.8529200672f, 0.9241077914f, 0.9725420391f, 0.9970304792f, 0.9969702721f, + 0.9723629327f, 0.9238142869f, 0.8525195846f, 0.7602340753f, 0.6492298214f, 0.5222397619f, 0.3823904496f, 0.2331250710f, + 0.0781186890f, -0.0788122482f, -0.2338038630f, -0.3830399929f, -0.5228461462f, -0.6497799862f, -0.7607160866f, -0.8529228980f, + -0.9241300035f, -0.9725840329f, -0.9970918334f, -0.9970498578f, -0.9724590238f, -0.9239246994f, -0.8526417953f, -0.7603653504f, + -0.6493673160f, -0.5223806210f, -0.3825318778f, -0.2332644031f, -0.0782534324f, 0.0786843684f, 0.2336848810f, 0.3829316749f, + 0.5227499799f, 0.6496971643f, 0.7606475046f, 0.8528691455f, 0.9240913688f, 0.9725605024f, 0.9970831041f, 0.9970553461f, + 0.9724778870f, 0.9239558554f, 0.8526839539f, 0.7604170426f, 0.6494269334f, 0.5224464521f, 0.3826021525f, 0.2333373314f, + 0.0783272488f, -0.0786113681f, -0.2336143011f, -0.3828649893f, -0.5226885022f, -0.6496420279f, -0.7605996436f, -0.8528292862f, + -0.9240600225f, -0.9725379675f, -0.9970694696f, -0.9970505028f, -0.9724815391f, -0.9239675382f, -0.8527030511f, -0.7604428078f, + -0.6494585103f, -0.5224828981f, -0.3826424594f, -0.2333804494f, -0.0783721069f, 0.0785658395f, 0.2335691502f, 0.3828212223f, + 0.5226470656f, 0.6496037895f, 0.7605653778f, 0.8527996583f, 0.9240355773f, 0.9725191181f, 0.9970564910f, 0.9970435264f, + 0.9724805522f, 0.9239723853f, 0.8527134405f, 0.7604583197f, 0.6494786105f, 0.5225069525f, 0.3826697534f, 0.2334102074f, + 0.0784035151f, -0.0785336112f, -0.2335369252f, -0.3827897961f, -0.5226171847f, -0.6495761346f, -0.7605405475f, -0.8527781579f, + -0.9240178096f, -0.9725053787f, -0.9970469656f, -0.9970382927f, -0.9724795834f, -0.9239755567f, -0.8527205369f, -0.7604690457f, + -0.6494926000f, -0.5225237804f, -0.3826889457f, -0.2334312532f, -0.0784258768f, 0.0785104868f, 0.2335135965f, 0.3827668158f, + 0.5225950899f, 0.6495554361f, 0.7605217198f, 0.8527616288f, 0.9240039504f, 0.9724944950f, 0.9970392893f, 0.9970339749f, + 0.9724786893f, 0.9239780624f, 0.8527263292f, 0.7604779239f, 0.6495042812f, 0.5225379070f, 0.3827050967f, 0.2334489562f, + 0.0784446231f, -0.0784912259f, -0.2334943534f, -0.3827481104f, -0.5225774136f, -0.6495392378f, -0.7605073937f, -0.8527495050f, + -0.9239942880f, -0.9724874781f, -0.9970350256f, -0.9970324969f, -0.9724799577f, -0.9239819717f, -0.8527327136f, -0.7604865652f, + -0.6495149161f, -0.5225502352f, -0.3827187881f, -0.2334636585f, -0.0784599687f, 0.0784756139f, 0.2334788543f, 0.3827330998f, + 0.5225632570f, 0.6495262837f, 0.7604959669f, 0.8527398987f, 0.9239867563f, 0.9724822286f, 0.9970322117f, +}; + +const float ivas_fb_fr_12band_1ms_im[IVAS_FB_12_1MS_LEN] = +{ + -0.0898684611f, -0.2670421131f, -0.4365041728f, -0.5932908852f, -0.7325431118f, -0.8497696909f, -0.9406026758f, -1.0013422309f, + -1.0229026702f, -0.9881074062f, -0.8887876846f, -0.7310424395f, -0.5284210279f, -0.2997529481f, -0.0664760115f, 0.1499611207f, + 0.3307974571f, 0.4621685196f, 0.5367125342f, 0.5543493827f, 0.5220560680f, 0.4529408018f, 0.3642519877f, 0.2760859332f, + 0.2047354522f, 0.1503391462f, 0.1061445796f, 0.0699189586f, 0.0406773254f, 0.0176462883f, 0.0000989137f, -0.0126721698f, + -0.0213825135f, -0.0267263252f, -0.0293754264f, -0.0299501298f, -0.0290147562f, -0.0270589183f, -0.0244976437f, -0.0216640086f, + -0.0188153473f, -0.0161349368f, -0.0137427038f, -0.0117024055f, -0.0100340803f, -0.0087231409f, -0.0077319011f, -0.0070077840f, + -0.0064920884f, -0.0061256992f, -0.0058543602f, -0.0056314631f, -0.0054200843f, -0.0051933287f, -0.0049340271f, -0.0046335801f, + -0.0042904244f, -0.0039083723f, -0.0034948095f, -0.0030592765f, -0.0026120102f, -0.0021631376f, -0.0017217846f, -0.0012959083f, + -0.0008918976f, -0.0005148542f, -0.0001684643f, 0.0001445255f, 0.0004223858f, 0.0006639324f, 0.0008686856f, 0.0010364896f, + 0.0011677783f, 0.0012632724f, 0.0013243012f, 0.0013525145f, 0.0013501876f, 0.0013198910f, 0.0012647346f, 0.0011879780f, + 0.0010932175f, 0.0009839640f, 0.0008638145f, 0.0007360481f, 0.0006038306f, 0.0004698724f, 0.0003366939f, 0.0002063576f, + 0.0000807864f, -0.0000384546f, -0.0001498232f, -0.0002520137f, -0.0003436527f, -0.0004235485f, -0.0004904478f, -0.0005433364f, + -0.0005812551f, -0.0006036329f, -0.0006101286f, -0.0006009525f, -0.0005766848f, -0.0005385389f, -0.0004881156f, -0.0004275804f, + -0.0003593427f, -0.0002861534f, -0.0002107341f, -0.0001358351f, -0.0000638656f, 0.0000030299f, 0.0000632842f, 0.0001157628f, + 0.0001599820f, 0.0001958747f, 0.0002239118f, 0.0002447961f, 0.0002595218f, 0.0002690444f, 0.0002743352f, 0.0002760865f, + 0.0002748168f, 0.0002706555f, 0.0002635301f, 0.0002530421f, 0.0002387283f, 0.0002200029f, 0.0001964510f, 0.0001677833f, + 0.0001341045f, 0.0000958227f, 0.0000538421f, 0.0000093907f, -0.0000358838f, -0.0000801695f, -0.0001214720f, -0.0001579178f, + -0.0001877626f, -0.0002096837f, -0.0002227536f, -0.0002266623f, -0.0002216081f, -0.0002084174f, -0.0001883368f, -0.0001630566f, + -0.0001344297f, -0.0001044404f, -0.0000749065f, -0.0000474557f, -0.0000232739f, -0.0000031484f, 0.0000126922f, 0.0000244381f, + 0.0000327553f, 0.0000385592f, 0.0000429983f, 0.0000471857f, 0.0000521670f, 0.0000586725f, 0.0000671313f, 0.0000774992f, + 0.0000893598f, 0.0001018532f, 0.0001138697f, 0.0001240625f, 0.0001311002f, 0.0001337149f, 0.0001309532f, 0.0001221967f, + 0.0001073512f, 0.0000867866f, 0.0000614274f, 0.0000325927f, 0.0000019882f, -0.0000285322f, -0.0000570333f, -0.0000817625f, + -0.0001012133f, -0.0001143489f, -0.0001206018f, + 0.0115080962f, 0.0339059662f, 0.0543805639f, 0.0716908215f, 0.0844892131f, 0.0915170903f, 0.0912773099f, 0.0825231458f, + 0.0581340647f, 0.0023722407f, -0.0920729561f, -0.2188408880f, -0.3647527624f, -0.5119701616f, -0.6406838355f, -0.7316665697f, + -0.7689724827f, -0.7420606704f, -0.6473949518f, -0.4890788171f, -0.2786409816f, -0.0338325103f, 0.2232845090f, 0.4688402469f, + 0.6798489622f, 0.8368463063f, 0.9260768759f, 0.9410292369f, 0.8830777791f, 0.7612013021f, 0.5907780504f, 0.3916368742f, + 0.1855876370f, -0.0062576017f, -0.1660331877f, -0.2812632874f, -0.3462706324f, -0.3628576835f, -0.3399405921f, -0.2936025661f, + -0.2446360780f, -0.2029515435f, -0.1662608743f, -0.1331801236f, -0.1036965299f, -0.0778301527f, -0.0556266777f, -0.0370208473f, + -0.0218709516f, -0.0099359945f, -0.0009127909f, 0.0055587915f, 0.0098621029f, 0.0123923627f, 0.0135300104f, 0.0136320444f, + 0.0130144200f, 0.0119494969f, 0.0106574266f, 0.0093099072f, 0.0080287757f, 0.0068943240f, 0.0059483248f, 0.0052043487f, + 0.0046523406f, 0.0042685237f, 0.0040192551f, 0.0038688810f, 0.0037816102f, 0.0037267014f, 0.0036781232f, 0.0036173442f, + 0.0035313060f, 0.0034136237f, 0.0032617350f, 0.0030774362f, 0.0028640174f, 0.0026268424f, 0.0023709699f, 0.0021021154f, + 0.0018248805f, 0.0015440826f, 0.0012634327f, 0.0009870117f, 0.0007181238f, 0.0004606754f, 0.0002179850f, -0.0000060719f, + -0.0002083660f, -0.0003855837f, -0.0005355681f, -0.0006564697f, -0.0007479765f, -0.0008103905f, -0.0008456256f, -0.0008561209f, + -0.0008455816f, -0.0008177548f, -0.0007769991f, -0.0007270455f, -0.0006715492f, -0.0006129898f, -0.0005533521f, -0.0004932746f, + -0.0004329280f, -0.0003714208f, -0.0003078363f, -0.0002408007f, -0.0001695470f, -0.0000934908f, -0.0000131639f, 0.0000703507f, + 0.0001547277f, 0.0002371760f, 0.0003140053f, 0.0003815783f, 0.0004360445f, 0.0004743392f, 0.0004939265f, 0.0004936813f, + 0.0004734847f, 0.0004348607f, 0.0003803348f, 0.0003137905f, 0.0002396098f, 0.0001628232f, 0.0000881507f, 0.0000200989f, + -0.0000379279f, -0.0000834126f, -0.0001153958f, -0.0001340265f, -0.0001409462f, -0.0001385916f, -0.0001303365f, -0.0001196396f, + -0.0001100798f, -0.0001045123f, -0.0001051708f, -0.0001129953f, -0.0001279408f, -0.0001485750f, -0.0001726416f, -0.0001969197f, + -0.0002179800f, -0.0002321940f, -0.0002365365f, -0.0002285757f, -0.0002071506f, -0.0001721838f, -0.0001251084f, -0.0000684218f, + -0.0000058329f, 0.0000584158f, 0.0001195994f, 0.0001732950f, 0.0002154726f, 0.0002432129f, 0.0002546651f, 0.0002495466f, + 0.0002438301f, 0.0007109472f, 0.0011162460f, 0.0013967943f, 0.0014698785f, 0.0012150300f, 0.0004822469f, -0.0009199449f, + -0.0032069948f, -0.0066234807f, -0.0114150534f, -0.0178284637f, -0.0260733522f, -0.0363216183f, -0.0486605071f, -0.0630990061f, + -0.0795130312f, -0.0976712096f, -0.1171685259f, -0.1374957541f, -0.1579441550f, -0.1777994651f, -0.1961712153f, -0.2131191727f, + -0.2256033924f, -0.2176912218f, -0.1719241079f, -0.0821949125f, 0.0489542717f, 0.2117008349f, 0.3903676656f, 0.5654257562f, + 0.7160273175f, 0.8226483779f, 0.8696490849f, 0.8473276976f, 0.7533117569f, 0.5930248684f, 0.3792476318f, 0.1307497118f, + -0.1297731860f, -0.3782729365f, -0.5920556328f, -0.7523549294f, -0.8463947331f, -0.8687564040f, -0.8218173622f, -0.7152833962f, + -0.5647972104f, -0.3898836504f, -0.2113895751f, -0.0488408019f, 0.0820902688f, 0.1715873934f, 0.2171153181f, 0.2247885078f, + 0.2120719043f, 0.1949040588f, 0.1763288922f, 0.1562894837f, 0.1356771490f, 0.1152063262f, 0.0955845402f, 0.0773202283f, + 0.0608172272f, 0.0463072409f, 0.0339148674f, 0.0236334444f, 0.0153777062f, 0.0089786185f, 0.0042273050f, 0.0008767894f, + -0.0013231927f, -0.0026245282f, -0.0032557343f, -0.0034239005f, -0.0032991260f, -0.0030209159f, -0.0026903446f, -0.0023798808f, + -0.0021307088f, -0.0019640207f, -0.0018807705f, -0.0018724257f, -0.0019209336f, -0.0020075151f, -0.0021115303f, -0.0022167724f, + -0.0023088853f, -0.0023794235f, -0.0024222081f, -0.0024359169f, -0.0024201044f, -0.0023771902f, -0.0023088214f, -0.0022179019f, + -0.0021056723f, -0.0019740384f, -0.0018233675f, -0.0016550209f, -0.0014695894f, -0.0012693378f, -0.0010565212f, -0.0008354568f, + -0.0006106656f, -0.0003884494f, -0.0001748112f, 0.0000233719f, 0.0002004956f, 0.0003512145f, 0.0004724032f, 0.0005620267f, + 0.0006206994f, 0.0006502675f, 0.0006548938f, 0.0006393557f, 0.0006097638f, 0.0005717449f, 0.0005310334f, 0.0004917912f, + 0.0004573339f, 0.0004288066f, 0.0004062166f, 0.0003875516f, 0.0003701287f, 0.0003500723f, 0.0003238297f, 0.0002877917f, + 0.0002397329f, 0.0001783203f, 0.0001042514f, 0.0000194643f, -0.0000721397f, -0.0001658244f, -0.0002556635f, -0.0003358859f, + -0.0004006984f, -0.0004456200f, -0.0004672301f, -0.0004642525f, -0.0004370215f, -0.0003881655f, -0.0003217097f, -0.0002433639f, + -0.0001593403f, -0.0000763999f, -0.0000005923f, 0.0000626983f, 0.0001098436f, 0.0001386930f, 0.0001493084f, 0.0001433260f, + 0.0001242838f, 0.0000966497f, 0.0000658480f, 0.0000371218f, 0.0000154755f, 0.0000046144f, 0.0000070450f, 0.0000233058f, + 0.0000523967f, 0.0000914031f, 0.0001362820f, 0.0001818299f, 0.0002227029f, 0.0002535449f, 0.0002700191f, 0.0002688537f, + 0.0002486530f, 0.0002096567f, 0.0001541806f, 0.0000860074f, 0.0000104494f, -0.0000665586f, -0.0001386343f, -0.0001999605f, + -0.0002454664f, -0.0002717048f, -0.0002768116f, -0.0002610555f, -0.0002264389f, -0.0001768539f, -0.0001173333f, -0.0000538987f, + 0.0000073883f, 0.0000606831f, 0.0001012735f, 0.0001257023f, 0.0001324276f, 0.0001216280f, 0.0000954836f, 0.0000576109f, + 0.0000129868f, -0.0000328906f, -0.0000742744f, -0.0001060758f, -0.0001240987f, -0.0001257785f, -0.0001101631f, -0.0000783123f, + -0.0000329127f, 0.0000217021f, 0.0000802673f, 0.0001368394f, 0.0001856737f, 0.0002215380f, 0.0002405175f, 0.0002401550f, + 0.0002199754f, 0.0001812890f, 0.0001273345f, 0.0000627166f, -0.0000067866f, -0.0000750345f, -0.0001358771f, + -0.0002517773f, -0.0007530438f, -0.0012480393f, -0.0017311495f, -0.0021966783f, -0.0026372659f, -0.0030463219f, -0.0034173391f, + -0.0037471961f, -0.0040359970f, -0.0042905892f, -0.0045239611f, -0.0047578551f, -0.0050204690f, -0.0053469980f, -0.0057745962f, + -0.0063401820f, -0.0070723578f, -0.0079867916f, -0.0090758990f, -0.0103033224f, -0.0115933185f, -0.0128269170f, -0.0138337134f, + -0.0143928060f, -0.0142296836f, -0.0130247299f, -0.0104168701f, -0.0060212390f, 0.0005608679f, 0.0097154142f, 0.0218030935f, + 0.0371260945f, 0.0559219991f, 0.0783277405f, 0.1044019092f, 0.1340918009f, 0.1673695867f, 0.2042412889f, 0.2460845096f, + 0.2951830943f, 0.3416235468f, 0.3646126368f, 0.3480671745f, 0.2830729765f, 0.1678292828f, 0.0080159731f, -0.1838899497f, + -0.3900215384f, -0.5892675140f, -0.7598185700f, -0.8818480868f, -0.9399786297f, -0.9252325823f, -0.8362335185f, -0.6794898766f, + -0.4687496028f, -0.2234686369f, 0.0333794198f, 0.2779351658f, 0.4881469775f, 0.6462666955f, 0.7407620319f, 0.7675102118f, + 0.7300140555f, 0.6387574230f, 0.5096096451f, 0.3616936194f, 0.2146955649f, 0.0863068159f, -0.0104489874f, -0.0693762132f, + -0.0979362074f, -0.1120025953f, -0.1187847101f, -0.1195709435f, -0.1158142700f, -0.1086494413f, -0.0991759892f, -0.0882830476f, + -0.0767682730f, -0.0652504848f, -0.0542380863f, -0.0440837698f, -0.0350361951f, -0.0272194074f, -0.0206775342f, -0.0153683003f, + -0.0112022098f, -0.0080423433f, -0.0057368530f, -0.0041194819f, -0.0030341283f, -0.0023328322f, -0.0018922260f, -0.0016079045f, + -0.0014038691f, -0.0012238901f, -0.0010359885f, -0.0008223621f, -0.0005812568f, -0.0003172104f, -0.0000423446f, 0.0002317528f, + 0.0004920317f, 0.0007298898f, 0.0009380570f, 0.0011144792f, 0.0012583706f, 0.0013727541f, 0.0014603320f, 0.0015255024f, + 0.0015706934f, 0.0015984889f, 0.0016087944f, 0.0016013362f, 0.0015736524f, 0.0015238602f, 0.0014491647f, 0.0013485610f, + 0.0012214393f, 0.0010698662f, 0.0008969515f, 0.0007085113f, 0.0005110819f, 0.0003130098f, 0.0001222403f, -0.0000529128f, + -0.0002059168f, -0.0003312324f, -0.0004261003f, -0.0004894620f, -0.0005232055f, -0.0005306961f, -0.0005175051f, -0.0004896578f, + -0.0004540531f, -0.0004166844f, -0.0003830510f, -0.0003566394f, -0.0003395923f, -0.0003316443f, -0.0003311733f, -0.0003346124f, + -0.0003378214f, -0.0003358194f, -0.0003242611f, -0.0002992259f, -0.0002585275f, -0.0002012956f, -0.0001289055f, -0.0000441984f, + 0.0000480368f, 0.0001421911f, 0.0002316974f, 0.0003103339f, 0.0003721995f, 0.0004129378f, 0.0004295640f, 0.0004213762f, + 0.0003894462f, 0.0003371019f, 0.0002690431f, 0.0001914421f, 0.0001108048f, 0.0000338794f, -0.0000335063f, -0.0000864746f, + -0.0001220386f, -0.0001388528f, -0.0001377697f, -0.0001212160f, -0.0000933503f, -0.0000591266f, -0.0000241894f, 0.0000061837f, + 0.0000272190f, 0.0000355810f, 0.0000293086f, 0.0000084300f, -0.0000254463f, -0.0000689080f, -0.0001174917f, -0.0001657726f, + -0.0002083169f, -0.0002398873f, -0.0002563684f, -0.0002548515f, -0.0002343135f, -0.0001953996f, -0.0001407304f, -0.0000743265f, + -0.0000015627f, 0.0000716768f, 0.0001392424f, 0.0001956345f, 0.0002362192f, 0.0002579841f, 0.0002595163f, 0.0002414285f, + -0.0000940837f, -0.0002770282f, -0.0004449239f, -0.0005888728f, -0.0007019644f, -0.0007792340f, -0.0008182743f, -0.0008186617f, + -0.0007820794f, -0.0007112881f, -0.0006099783f, -0.0004815832f, -0.0003292359f, -0.0001547948f, 0.0000407443f, 0.0002577725f, + 0.0004970701f, 0.0007599305f, 0.0010467681f, 0.0013572172f, 0.0016888066f, 0.0020376007f, 0.0023974682f, 0.0027617602f, + 0.0031234670f, 0.0034780578f, 0.0038243130f, 0.0041678751f, 0.0045219223f, 0.0049104098f, 0.0053672600f, 0.0059379719f, + 0.0066758931f, 0.0076410668f, 0.0088925844f, 0.0104843046f, 0.0124532460f, 0.0148130444f, 0.0175396030f, 0.0205645423f, + 0.0237604835f, 0.0269378529f, 0.0298327415f, 0.0321108152f, 0.0333602127f, 0.0331056565f, 0.0308069668f, 0.0258845713f, + 0.0177205355f, 0.0056930577f, -0.0108298743f, -0.0324583065f, -0.0598208742f, -0.0935922245f, -0.1346769337f, -0.1852485101f, + -0.2520452044f, -0.3349618030f, -0.4178137014f, -0.4806851731f, -0.5066093847f, -0.4828480682f, -0.4029110854f, -0.2674540766f, + -0.0845343107f, 0.1312173509f, 0.3601564597f, 0.5799075204f, 0.7679640489f, 0.9043772480f, 0.9741394604f, 0.9690106520f, + 0.8885379519f, 0.7401510478f, 0.5383256422f, 0.3028982916f, 0.0567716151f, -0.1767567296f, -0.3766491619f, -0.5265275449f, + -0.6164139497f, -0.6437430944f, -0.6133407543f, -0.5366180838f, -0.4297512054f, -0.3115454630f, -0.2005356394f, -0.1128598350f, + -0.0539105809f, -0.0139443690f, 0.0156565191f, 0.0370291041f, 0.0516278850f, 0.0605689917f, 0.0649188950f, 0.0656033918f, + 0.0635061831f, 0.0593951272f, 0.0539682831f, 0.0478045414f, 0.0413946012f, 0.0351122976f, 0.0292427409f, 0.0239693774f, + 0.0194022319f, 0.0155752485f, 0.0124736580f, 0.0100363326f, 0.0081800382f, 0.0068024870f, 0.0058015196f, 0.0050760480f, + 0.0045392915f, 0.0041164842f, 0.0037525515f, 0.0034068962f, 0.0030568884f, 0.0026909558f, 0.0023097105f, 0.0019188491f, + 0.0015296237f, 0.0011527869f, 0.0007995822f, 0.0004773732f, 0.0001916221f, -0.0000568089f, -0.0002688493f, -0.0004487434f, + -0.0006009421f, -0.0007311394f, -0.0008434559f, -0.0009415801f, -0.0010266406f, -0.0010987560f, -0.0011556747f, -0.0011947058f, + -0.0012119146f, -0.0012041634f, -0.0011684945f, -0.0011039351f, -0.0010107180f, -0.0008915962f, -0.0007507109f, -0.0005943565f, + -0.0004295220f, -0.0002642519f, -0.0001060642f, 0.0000378186f, 0.0001618981f, 0.0002620189f, 0.0003364193f, 0.0003850258f, + 0.0004100438f, 0.0004149209f, 0.0004045652f, 0.0003841255f, 0.0003590482f, 0.0003339070f, 0.0003125425f, 0.0002971555f, + 0.0002887091f, 0.0002863958f, 0.0002883494f, 0.0002914552f, 0.0002922766f, 0.0002870530f, 0.0002726535f, 0.0002465517f, + 0.0002076047f, 0.0001558242f, 0.0000928493f, 0.0000214333f, -0.0000544032f, -0.0001301223f, -0.0002007286f, -0.0002616070f, + -0.0003086144f, -0.0003388183f, -0.0003504396f, -0.0003433413f, -0.0003187137f, -0.0002792588f, -0.0002286183f, -0.0001713141f, + -0.0001120267f, -0.0000554389f, + -0.0001958521f, -0.0002037772f, -0.0001928163f, -0.0001589424f, -0.0001002894f, -0.0000163380f, 0.0000907887f, 0.0002175831f, + 0.0003582211f, 0.0005062409f, 0.0006538405f, 0.0007937851f, 0.0009186699f, 0.0010227885f, 0.0011010838f, 0.0011507705f, + 0.0011698159f, 0.0011582816f, 0.0011163741f, 0.0010456753f, 0.0009469803f, 0.0008217234f, 0.0006698794f, 0.0004918730f, + 0.0002867091f, 0.0000544686f, -0.0002054280f, -0.0004913183f, -0.0008012958f, -0.0011303304f, -0.0014731078f, -0.0018216574f, + -0.0021695528f, -0.0025102922f, -0.0028430159f, -0.0031713537f, -0.0035102261f, -0.0038841898f, -0.0043342737f, -0.0049142608f, + -0.0056961483f, -0.0067625723f, -0.0082096287f, -0.0101339707f, -0.0126325271f, -0.0157836972f, -0.0196448900f, -0.0242284914f, + -0.0294998526f, -0.0353498489f, -0.0415975524f, -0.0479616035f, -0.0540728812f, -0.0594457699f, -0.0635064362f, -0.0655612395f, + -0.0648457799f, -0.0604784184f, -0.0515339488f, -0.0369448838f, -0.0155927126f, 0.0139806398f, 0.0539164770f, 0.1128370459f, + 0.2004901808f, 0.3114870438f, 0.4296920027f, 0.5365714345f, 0.6133195725f, 0.6437584042f, 0.6164735032f, 0.5266348467f, + 0.3768028330f, 0.1769504498f, -0.0565487403f, -0.3026608074f, -0.5380905144f, -0.7399360850f, -0.8883601949f, -0.9688847331f, + -0.9740762507f, -0.9043827765f, -0.7680389511f, -0.5800469251f, -0.3603504723f, -0.1314519403f, 0.0842759659f, 0.2671900601f, + 0.4026590428f, 0.4826236485f, 0.5064248335f, 0.4805483640f, 0.4177275519f, 0.3349242893f, 0.2520497692f, 0.1852850777f, + 0.1347332064f, 0.0936551449f, 0.0598782099f, 0.0325001596f, 0.0108498369f, -0.0056970597f, -0.0177459594f, -0.0259244265f, + -0.0308505634f, -0.0331397240f, -0.0333704132f, -0.0320833599f, -0.0297560793f, -0.0268041178f, -0.0235666816f, -0.0203132117f, + -0.0172390062f, -0.0144767230f, -0.0120991121f, -0.0101332076f, -0.0085666335f, -0.0073617255f, -0.0064621794f, -0.0058047936f, + -0.0053242015f, -0.0049609363f, -0.0046632383f, -0.0043912873f, -0.0041162231f, -0.0038213107f, -0.0034990867f, -0.0031507115f, + -0.0027824416f, -0.0024044438f, -0.0020276438f, -0.0016629392f, -0.0013190459f, -0.0010025416f, -0.0007168319f, -0.0004629763f, + -0.0002395008f, -0.0000436500f, 0.0001284164f, 0.0002803877f, 0.0004156585f, 0.0005364447f, 0.0006439523f, 0.0007379710f, + 0.0008173893f, 0.0008801810f, 0.0009241189f, 0.0009469386f, 0.0009470262f, 0.0009235256f, 0.0008768074f, 0.0008083660f, + 0.0007209842f, 0.0006183917f, 0.0005051683f, 0.0003862499f, 0.0002667034f, 0.0001512287f, 0.0000439630f, -0.0000518813f, + -0.0001340642f, -0.0002014693f, -0.0002539655f, -0.0002923568f, -0.0003181036f, -0.0003331509f, -0.0003396076f, -0.0003395633f, + -0.0003348303f, -0.0003268422f, -0.0003165265f, -0.0003043290f, -0.0002902270f, -0.0002738620f, -0.0002546506f, -0.0002319638f, + -0.0002052612f, -0.0001742433f, -0.0001389381f, -0.0000997698f, -0.0000575586f, -0.0000134887f, 0.0000309765f, 0.0000742026f, + 0.0001145147f, 0.0001503321f, 0.0001802885f, + -0.0001277341f, -0.0000801832f, -0.0000218515f, 0.0000429946f, 0.0001101725f, 0.0001753791f, 0.0002352234f, 0.0002868790f, + 0.0003289280f, 0.0003607437f, 0.0003830779f, 0.0003971613f, 0.0004050891f, 0.0004087434f, 0.0004101314f, 0.0004103021f, + 0.0004098229f, 0.0004078547f, 0.0004029032f, 0.0003921299f, 0.0003724071f, 0.0003398196f, 0.0002909307f, 0.0002223256f, + 0.0001319189f, 0.0000183492f, -0.0001178379f, -0.0002750908f, -0.0004498764f, -0.0006379165f, -0.0008333771f, -0.0010303574f, + -0.0012220954f, -0.0014025519f, -0.0015654459f, -0.0017057905f, -0.0018186276f, -0.0019004727f, -0.0019477420f, -0.0019582025f, + -0.0019292104f, -0.0018593672f, -0.0017467341f, -0.0015908909f, -0.0013912094f, -0.0011493707f, -0.0008675713f, -0.0005513213f, + -0.0002071950f, 0.0001544857f, 0.0005229288f, 0.0008847642f, 0.0012288921f, 0.0015452051f, 0.0018312322f, 0.0020914322f, + 0.0023452820f, 0.0026261558f, 0.0029898311f, 0.0035112352f, 0.0042918405f, 0.0054520943f, 0.0071361390f, 0.0094977907f, + 0.0127016847f, 0.0169013256f, 0.0222371991f, 0.0288065364f, 0.0366610177f, 0.0457690119f, 0.0560179682f, 0.0671701450f, + 0.0788774558f, 0.0906296100f, 0.1017925366f, 0.1115401869f, 0.1189349031f, 0.1228106313f, 0.1219422410f, 0.1147682442f, + 0.0998698743f, 0.0698963887f, 0.0088203751f, -0.0909692208f, -0.2234220627f, -0.3756331554f, -0.5300042260f, -0.6668887743f, + -0.7671574389f, -0.8148547416f, -0.7993524069f, -0.7169019655f, -0.5713321080f, -0.3737662567f, -0.1415729584f, 0.1036716588f, + 0.3378392047f, 0.5399814296f, 0.7022792290f, 0.8235847390f, 0.9011912110f, 0.9335195531f, 0.9210148943f, 0.8662582998f, + 0.7738442006f, 0.6501373474f, 0.5028823140f, 0.3407552797f, 0.1728427401f, 0.0081212390f, -0.1450610431f, -0.2794406314f, + -0.3892283922f, -0.4703883896f, -0.5208081709f, -0.5403348331f, -0.5306924278f, -0.4952731730f, -0.4388331926f, -0.3670992988f, + -0.2863302758f, -0.2028454693f, -0.1225716070f, -0.0506164333f, 0.0090788383f, 0.0540159375f, 0.0833026194f, 0.0977385677f, + 0.0999946466f, 0.0952552716f, 0.0880995668f, 0.0797728807f, 0.0706660863f, 0.0613242080f, 0.0521689821f, 0.0435466445f, + 0.0356893133f, 0.0287479136f, 0.0227869173f, 0.0178107854f, 0.0137689980f, 0.0105778434f, 0.0081277168f, 0.0062997686f, + 0.0049716376f, 0.0040285807f, 0.0033660981f, 0.0028959547f, 0.0025456890f, 0.0022606635f, 0.0020013537f, 0.0017429261f, + 0.0014715303f, 0.0011828460f, 0.0008784722f, 0.0005645174f, 0.0002487848f, -0.0000600208f, -0.0003540749f, -0.0006264965f, + -0.0008722305f, -0.0010875779f, -0.0012705059f, -0.0014199592f, -0.0015359444f, -0.0016188954f, -0.0016697727f, -0.0016896254f, + -0.0016797991f, -0.0016416978f, -0.0015770686f, -0.0014878777f, -0.0013765796f, -0.0012459990f, -0.0010995021f, -0.0009408124f, + -0.0007740525f, -0.0006034858f, -0.0004334565f, -0.0002681040f, -0.0001112695f, 0.0000337496f, 0.0001642534f, 0.0002782887f, + 0.0003746198f, 0.0004527614f, 0.0005128644f, 0.0005556551f, 0.0005822707f, 0.0005941545f, 0.0005928931f, 0.0005801213f, + 0.0005574074f, 0.0005262036f, 0.0004878004f, 0.0004433324f, 0.0003937929f, 0.0003400774f, 0.0002830311f, 0.0002234973f, + 0.0001623637f, 0.0001005861f, 0.0000392083f, -0.0000206541f, -0.0000778269f, -0.0001311308f, -0.0001794168f, -0.0002216378f, + -0.0002568858f, -0.0002844591f, -0.0003038790f, -0.0003149350f, -0.0003176698f, -0.0003123947f, -0.0002996434f, -0.0002801639f, + -0.0002548507f, -0.0002247269f, -0.0001908697f, -0.0001543953f, -0.0001163917f, -0.0000779152f, -0.0000399357f, + 0.0000094413f, 0.0000277999f, 0.0000446903f, 0.0000593280f, 0.0000712651f, 0.0000803871f, 0.0000870097f, 0.0000917822f, + 0.0000956902f, 0.0000998716f, 0.0001055506f, 0.0001138098f, 0.0001255136f, 0.0001411003f, 0.0001605589f, 0.0001832996f, + 0.0002082298f, 0.0002337307f, 0.0002578403f, 0.0002783202f, 0.0002929118f, 0.0002994416f, 0.0002960857f, 0.0002814451f, + 0.0002547522f, 0.0002158569f, 0.0001653321f, 0.0001043455f, 0.0000346623f, -0.0000415774f, -0.0001219205f, -0.0002038633f, + -0.0002849129f, -0.0003628240f, -0.0004355962f, -0.0005016356f, -0.0005596549f, -0.0006087461f, -0.0006481918f, -0.0006774810f, + -0.0006960781f, -0.0007034418f, -0.0006988166f, -0.0006813178f, -0.0006497978f, -0.0006030351f, -0.0005396896f, -0.0004585888f, + -0.0003587409f, -0.0002396693f, -0.0001014165f, 0.0000551454f, 0.0002283928f, 0.0004157251f, 0.0006137740f, 0.0008182856f, + 0.0010244618f, 0.0012269217f, 0.0014201288f, 0.0015983649f, 0.0017561723f, 0.0018882664f, 0.0019899370f, 0.0020568553f, + 0.0020854261f, 0.0020725003f, 0.0020157272f, 0.0019132331f, 0.0017640560f, 0.0015678593f, 0.0013255131f, 0.0010388553f, + 0.0007114008f, 0.0003480516f, -0.0000442075f, -0.0004568793f, -0.0008795218f, -0.0013009102f, -0.0017091380f, -0.0020936476f, + -0.0024460089f, -0.0027628964f, -0.0030473913f, -0.0033126371f, -0.0035830824f, -0.0038981281f, -0.0043122790f, -0.0048977534f, + -0.0057421929f, -0.0069491136f, -0.0086317888f, -0.0109107455f, -0.0139027684f, -0.0177154927f, -0.0224311200f, -0.0280995831f, + -0.0347172313f, -0.0422222045f, -0.0504683384f, -0.0592304787f, -0.0681714904f, -0.0768802892f, -0.0848233610f, -0.0916208280f, + -0.0960365098f, -0.0934965965f, -0.0788165513f, -0.0493177686f, -0.0041840764f, 0.0557190363f, 0.1279300009f, 0.2085541449f, + 0.2925373176f, 0.3740109184f, 0.4467123250f, 0.5044329150f, 0.5414803943f, 0.5531103895f, 0.5359083733f, 0.4880865671f, + 0.4096810759f, 0.3026295623f, 0.1707255672f, 0.0194488912f, -0.1443186247f, -0.3126736143f, -0.4771477585f, -0.6292070969f, + -0.7607694851f, -0.8646983027f, -0.9352529748f, -0.9684532025f, -0.9623535812f, -0.9171949326f, -0.8354559290f, -0.7219447724f, + -0.5842261616f, -0.4299994224f, -0.2647671304f, -0.0936718584f, 0.0778573928f, 0.2444955397f, 0.4011508179f, 0.5431562386f, + 0.6663917866f, 0.7674190691f, 0.8435687444f, 0.8930187210f, 0.9148305827f, 0.9089668951f, 0.8762704359f, 0.8184215785f, + 0.7378630625f, 0.6377054994f, 0.5216082533f, 0.3936475943f, 0.2581703422f, 0.1196438490f, -0.0174973196f, -0.1489983380f, + -0.2709234334f, -0.3797794589f, -0.4726225629f, -0.5471418581f, -0.6017198326f, -0.6354657299f, -0.6482230521f, -0.6405498448f, + -0.6136745009f, -0.5694280123f, -0.5101568311f, -0.4386191067f, -0.3578694342f, -0.2711360702f, -0.1816960690f, -0.0927527129f, + -0.0073202620f, 0.0718799659f, 0.1425082935f, 0.2026771758f, 0.2510012829f, 0.2866256582f, 0.3092317499f, 0.3190214225f, + 0.3166807736f, 0.3033253264f, 0.2804301957f, 0.2497478163f, 0.2132181238f, 0.1728741342f, 0.1307484916f, 0.0887835046f, + 0.0487503059f, 0.0121784205f, -0.0196990379f, -0.0459852335f, -0.0661399413f, -0.0799836583f, -0.0876812985f, -0.0897120098f, + -0.0868204670f, -0.0799602374f, -0.0702221831f, -0.0587644272f, -0.0467300423f, -0.0351807009f, -0.0250131586f, -0.0169220452f, + -0.0110491061f, -0.0067999510f, -0.0036452141f, -0.0013776515f, 0.0001725658f, 0.0011515063f, 0.0016931166f, 0.0019128947f, + 0.0019119195f, 0.0017731008f, 0.0015641080f, 0.0013360166f, 0.0011263428f, 0.0009592385f, 0.0008486058f, 0.0007990396f, + 0.0008087142f, 0.0008704662f, 0.0009741845f, 0.0011076612f, 0.0012583569f, 0.0014138649f, 0.0015630668f, 0.0016962130f, + 0.0018055792f, 0.0018852562f, 0.0019314544f, 0.0019421196f, 0.0019170260f, 0.0018573192f, 0.0017655022f, 0.0016449753f, + 0.0014999823f, 0.0013351861f, 0.0011556142f, 0.0009662892f, 0.0007721962f, 0.0005779798f, 0.0003879485f, 0.0002058452f, + 0.0000348998f, -0.0001223239f, -0.0002638249f, -0.0003882481f, -0.0004947379f, -0.0005829688f, -0.0006529761f, -0.0007051597f, + -0.0007401195f, -0.0007586609f, -0.0007616586f, -0.0007500873f, -0.0007249274f, -0.0006872277f, -0.0006380521f, -0.0005785652f, + -0.0005100019f, -0.0004337551f, -0.0003513433f, -0.0002644761f, -0.0001749961f, -0.0000849056f, 0.0000037265f, 0.0000887799f, + 0.0001682047f, 0.0002400620f, 0.0003026539f, 0.0003545629f, 0.0003947614f, 0.0004226221f, 0.0004379830f, 0.0004411096f, + 0.0004327050f, 0.0004138228f, 0.0003858290f, 0.0003502817f, 0.0003088683f, 0.0002632783f, 0.0002151470f, 0.0001659510f, + 0.0001169830f, 0.0000692900f, 0.0000236931f, -0.0000192281f, -0.0000590766f, -0.0000956193f, -0.0001287082f, -0.0001582520f, + -0.0001841434f, -0.0002062459f, -0.0002243482f, -0.0002381838f, -0.0002474218f, -0.0002517193f, -0.0002507430f, -0.0002442414f, + -0.0002320758f, -0.0002142901f, -0.0001911276f, -0.0001630744f, -0.0001308436f, -0.0000953784f, -0.0000577970f, -0.0000193582f, + 0.0000186239f, 0.0000548367f, 0.0000880630f, 0.0001172340f, 0.0001415074f, 0.0001602936f, 0.0001732965f, 0.0001804997f, + 0.0001821637f, 0.0001787723f, 0.0001709948f, 0.0001596078f, 0.0001454431f, 0.0001293085f, 0.0001119454f, 0.0000939706f, + 0.0000758637f, 0.0000579434f, 0.0000403900f, 0.0000232563f, 0.0000065182f, -0.0000098944f, -0.0000260374f, -0.0000419222f, + -0.0000574677f, -0.0000724909f, -0.0000866869f, -0.0000996508f, -0.0001108899f, -0.0001198747f, -0.0001260737f, -0.0001290184f, + -0.0001283426f, -0.0001238392f, -0.0001154831f, -0.0001034619f, -0.0000881663f, -0.0000701856f, -0.0000502629f, + 0.0000100257f, 0.0000298715f, 0.0000491016f, 0.0000673457f, 0.0000842719f, 0.0000996175f, 0.0001131774f, 0.0001248226f, + 0.0001344760f, 0.0001421200f, 0.0001477626f, 0.0001514384f, 0.0001531732f, 0.0001529862f, 0.0001508606f, 0.0001467558f, + 0.0001405885f, 0.0001322589f, 0.0001216448f, 0.0001086385f, 0.0000931503f, 0.0000751504f, 0.0000546725f, 0.0000318520f, + 0.0000069213f, -0.0000197639f, -0.0000477443f, -0.0000764464f, -0.0001052188f, -0.0001333354f, -0.0001600439f, -0.0001845767f, + -0.0002062035f, -0.0002242408f, -0.0002380992f, -0.0002472837f, -0.0002514295f, -0.0002502882f, -0.0002437508f, -0.0002318205f, + -0.0002146257f, -0.0001923855f, -0.0001654183f, -0.0001341069f, -0.0000989108f, -0.0000603353f, -0.0000189514f, 0.0000246284f, + 0.0000697235f, 0.0001156056f, 0.0001614708f, 0.0002064618f, 0.0002496452f, 0.0002900437f, 0.0003266238f, 0.0003583420f, + 0.0003841453f, 0.0004030314f, 0.0004140579f, 0.0004164107f, 0.0004094151f, 0.0003926023f, 0.0003657128f, 0.0003287519f, + 0.0002819762f, 0.0002259319f, 0.0001614203f, 0.0000895170f, 0.0000115172f, -0.0000710597f, -0.0001565398f, -0.0002430985f, + -0.0003288369f, -0.0004117862f, -0.0004899853f, -0.0005614798f, -0.0006243974f, -0.0006769402f, -0.0007174577f, -0.0007444335f, + -0.0007565586f, -0.0007527147f, -0.0007320491f, -0.0006939555f, -0.0006381507f, -0.0005646499f, -0.0004738416f, -0.0003664521f, + -0.0002436140f, -0.0001068131f, 0.0000420546f, 0.0002007573f, 0.0003666837f, 0.0005369393f, 0.0007083151f, 0.0008774032f, + 0.0010405725f, 0.0011941030f, 0.0013341657f, 0.0014569762f, 0.0015587822f, 0.0016360436f, 0.0016854353f, 0.0017040651f, + 0.0016895002f, 0.0016400311f, 0.0015547178f, 0.0014336912f, 0.0012781928f, 0.0010908735f, 0.0008757648f, 0.0006385002f, + 0.0003861185f, 0.0001271046f, -0.0001290952f, -0.0003723192f, -0.0005925672f, -0.0007805994f, -0.0009292471f, -0.0010343329f, + -0.0010963449f, -0.0011215032f, -0.0011235784f, -0.0011247650f, -0.0011572825f, -0.0012635736f, -0.0014972500f, -0.0019220776f, + -0.0026119000f, -0.0036479956f, -0.0051179657f, -0.0071115979f, -0.0097197636f, -0.0130315445f, -0.0171388264f, -0.0221826026f, + -0.0285136326f, -0.0361307186f, -0.0442081981f, -0.0516559897f, -0.0573925315f, -0.0603652434f, -0.0596331395f, -0.0544264019f, + -0.0442109616f, -0.0287331963f, -0.0080564058f, 0.0174234593f, 0.0469759993f, 0.0795551974f, 0.1138332879f, 0.1482526191f, + 0.1810898747f, 0.2105329869f, 0.2347647762f, 0.2520519356f, 0.2608332916f, 0.2598051239f, 0.2479978629f, 0.2248419603f, + 0.1902182120f, 0.1444910892f, 0.0885218306f, 0.0236611727f, -0.0482797215f, -0.1250786276f, -0.2041714722f, -0.2827382419f, + -0.3578034522f, -0.4263466673f, -0.4854197016f, -0.5322651608f, -0.5644323798f, -0.5798852692f, -0.5770983111f, -0.5551358084f, + -0.5137115562f, -0.4532252989f, -0.3747746885f, -0.2801408533f, -0.1717482321f, -0.0525987506f, 0.0738169580f, 0.2036293318f, + 0.3327161135f, 0.4568415935f, 0.5718029559f, 0.6735794476f, 0.7584777874f, 0.8232695197f, 0.8653138344f, 0.8826624233f, + 0.8741407389f, 0.8394039127f, 0.7789631089f, 0.6941829200f, 0.5872472518f, 0.4610970982f, 0.3193391719f, 0.1661318331f, + 0.0060481020f, -0.1560745385f, -0.3152984295f, -0.4667504424f, -0.6057916885f, -0.7281716821f, -0.8301830623f, -0.9087761258f, + -0.9618416393f, -0.9883769508f, -0.9880544909f, -0.9610885174f, -0.9083986381f, -0.8315930415f, -0.7329302137f, -0.6152510066f, + -0.4818998000f, -0.3366264325f, -0.1834804423f, -0.0266942820f, 0.1294357761f, 0.2806718111f, 0.4229523505f, 0.5525059678f, + 0.6659544948f, 0.7604051258f, 0.8335268161f, 0.8836105772f, 0.9096104660f, 0.9111656060f, 0.8886015017f, 0.8429119395f, + 0.7757211639f, 0.6892286142f, 0.5861371807f, 0.4695681223f, 0.3429645973f, 0.2099875350f, 0.0744064202f, -0.0600110582f, + -0.1896077300f, -0.3109402608f, -0.4208745383f, -0.5166699060f, -0.5960503378f, -0.6572602031f, -0.6991036150f, -0.7209660923f, + -0.7228185799f, -0.7052037113f, -0.6692054230f, -0.6164028870f, -0.5488108092f, -0.4688079424f, -0.3790565546f, -0.2824152817f, + -0.1818484683f, -0.0803346471f, 0.0192227465f, 0.1140799262f, 0.2017298411f, 0.2799697880f, 0.3469574836f, 0.4012543426f, + 0.4418547649f, 0.4682010863f, 0.4801839581f, 0.4781287434f, 0.4627686220f, 0.4352058330f, 0.3968625180f, 0.3494232322f, + 0.2947711136f, 0.2349201359f, 0.1719456583f, 0.1079157418f, 0.0448253472f, -0.0154643795f, -0.0712800080f, -0.1211812328f, + -0.1639966775f, -0.1988491244f, -0.2251698043f, -0.2427015611f, -0.2514912990f, -0.2518722833f, -0.2444373910f, -0.2300045092f, + -0.2095756919f, -0.1842916891f, -0.1553837364f, -0.1241243795f, -0.0917792284f, -0.0595613097f, -0.0285896618f, 0.0001465056f, + 0.0258169100f, 0.0477717562f, 0.0655551910f, 0.0789104778f, 0.0877769862f, 0.0922794468f, 0.0927101873f, 0.0895053265f, + 0.0832161440f, 0.0744769454f, 0.0639709607f, 0.0523956967f, 0.0404293889f, 0.0286998006f, 0.0177569270f, 0.0080503829f, + -0.0000871632f, -0.0064505432f, -0.0109653717f, -0.0136854786f, -0.0147827090f, -0.0145338644f, -0.0132999155f, -0.0115279496f, + -0.0097143162f, -0.0081066262f, -0.0066892166f, -0.0054526910f, -0.0044043619f, -0.0035430638f, -0.0028610848f, -0.0023435648f, + -0.0019710460f, -0.0017207440f, -0.0015686177f, -0.0014906099f, -0.0014640505f, -0.0014684367f, -0.0014861739f, -0.0015028429f, + -0.0015073922f, -0.0014919944f, -0.0014518622f, -0.0013848537f, -0.0012910935f, -0.0011724856f, -0.0010322928f, -0.0008746803f, + -0.0007043572f, -0.0005262236f, -0.0003451249f, -0.0001656257f, 0.0000081168f, 0.0001724644f, 0.0003243294f, 0.0004612043f, + 0.0005811330f, 0.0006826956f, 0.0007649539f, 0.0008274212f, 0.0008700054f, 0.0008929815f, 0.0008969444f, 0.0008827894f, + 0.0008516741f, 0.0008050045f, 0.0007444000f, 0.0006716783f, 0.0005888158f, 0.0004979255f, 0.0004012090f, 0.0003009243f, + 0.0001993306f, 0.0000986487f, 0.0000010025f, -0.0000916200f, -0.0001774214f, -0.0002548259f, -0.0003225212f, -0.0003794749f, + -0.0004249577f, -0.0004585414f, -0.0004801021f, -0.0004897991f, -0.0004880609f, -0.0004755490f, -0.0004531324f, -0.0004218435f, + -0.0003828474f, -0.0003373970f, -0.0002868049f, -0.0002324032f, -0.0001755218f, -0.0001174565f, -0.0000594555f, -0.0000026960f, + 0.0000517227f, 0.0001027959f, 0.0001496166f, 0.0001913889f, 0.0002274293f, 0.0002571799f, 0.0002802094f, 0.0002962259f, + 0.0003050777f, 0.0003067640f, 0.0003014323f, 0.0002893851f, 0.0002710700f, 0.0002470789f, 0.0002181291f, 0.0001850528f, + 0.0001487686f, 0.0001102623f, 0.0000705516f, 0.0000306614f, -0.0000084134f, -0.0000457325f, -0.0000804436f, -0.0001118002f, + -0.0001391858f, -0.0001621210f, -0.0001802753f, -0.0001934613f, -0.0002016344f, -0.0002048759f, -0.0002033834f, -0.0001974478f, + -0.0001874396f, -0.0001737844f, -0.0001569508f, -0.0001374298f, -0.0001157277f, -0.0000923513f, -0.0000678073f, -0.0000425930f, + -0.0000172000f, 0.0000078915f, 0.0000322093f, 0.0000552949f, 0.0000767028f, 0.0000960105f, 0.0001128219f, 0.0001267820f, + 0.0001375845f, 0.0001449888f, 0.0001488284f, 0.0001490265f, 0.0001456006f, 0.0001386719f, 0.0001284619f, 0.0001152928f, + 0.0000995735f, 0.0000817902f, 0.0000624834f, 0.0000422315f, 0.0000216225f, 0.0000012352f, -0.0000183878f, -0.0000367552f, + 0.0001023410f, 0.0001121154f, 0.0001195973f, 0.0001245785f, 0.0001269032f, 0.0001264687f, 0.0001232335f, 0.0001172154f, + 0.0001084967f, 0.0000972190f, 0.0000835860f, 0.0000678549f, 0.0000503359f, 0.0000313814f, 0.0000113831f, -0.0000092410f, + -0.0000300509f, -0.0000505985f, -0.0000704325f, -0.0000891123f, -0.0001062126f, -0.0001213366f, -0.0001341197f, -0.0001442414f, + -0.0001514272f, -0.0001554600f, -0.0001561797f, -0.0001534931f, -0.0001473717f, -0.0001378600f, -0.0001250712f, -0.0001091929f, + -0.0000904812f, -0.0000692631f, -0.0000459277f, -0.0000209260f, 0.0000052416f, 0.0000320286f, 0.0000588582f, 0.0000851296f, + 0.0001102367f, 0.0001335760f, 0.0001545675f, 0.0001726629f, 0.0001873663f, 0.0001982416f, 0.0002049310f, 0.0002071594f, + 0.0002047497f, 0.0001976225f, 0.0001858068f, 0.0001694347f, 0.0001487471f, 0.0001240832f, 0.0000958818f, 0.0000646662f, + 0.0000310422f, -0.0000043212f, -0.0000406957f, -0.0000773156f, -0.0001133832f, -0.0001480928f, -0.0001806368f, -0.0002102303f, + -0.0002361185f, -0.0002576013f, -0.0002740408f, -0.0002848864f, -0.0002896805f, -0.0002880829f, -0.0002798740f, -0.0002649766f, + -0.0002434546f, -0.0002155298f, -0.0001815742f, -0.0001421204f, -0.0000978454f, -0.0000495727f, 0.0000017521f, 0.0000550676f, + 0.0001092294f, 0.0001630223f, 0.0002152001f, 0.0002645008f, 0.0003096899f, 0.0003495759f, 0.0003830534f, 0.0004091148f, + 0.0004268910f, 0.0004356569f, 0.0004348671f, 0.0004241540f, 0.0004033574f, 0.0003725151f, 0.0003318867f, 0.0002819362f, + 0.0002233505f, 0.0001570144f, 0.0000840236f, 0.0000056513f, -0.0000766447f, -0.0001612647f, -0.0002464668f, -0.0003304197f, + -0.0004112104f, -0.0004869065f, -0.0005555699f, -0.0006153285f, -0.0006643921f, -0.0007011284f, -0.0007240766f, -0.0007320225f, + -0.0007240025f, -0.0006993717f, -0.0006577934f, -0.0005992952f, -0.0005242405f, -0.0004333727f, -0.0003277670f, -0.0002088657f, + -0.0000784141f, 0.0000615090f, 0.0002085679f, 0.0003601400f, 0.0005134039f, 0.0006653091f, 0.0008126807f, 0.0009521955f, + 0.0010805136f, 0.0011942726f, 0.0012902629f, 0.0013654507f, 0.0014172107f, 0.0014433822f, 0.0014425598f, 0.0014141671f, + 0.0013587836f, 0.0012781916f, 0.0011756894f, 0.0010560340f, 0.0009256640f, 0.0007924355f, 0.0006656655f, 0.0005555507f, + 0.0004729584f, 0.0004284373f, 0.0004317362f, 0.0004903651f, 0.0006089185f, 0.0007872127f, 0.0010196237f, 0.0012928786f, + 0.0015857907f, 0.0018667312f, 0.0020943919f, 0.0022145657f, 0.0021631986f, 0.0018604759f, 0.0012208798f, 0.0000292075f, + -0.0021197116f, -0.0054807990f, -0.0100496540f, -0.0156837116f, -0.0221176153f, -0.0289836659f, -0.0358300499f, -0.0421477124f, + -0.0473972472f, -0.0510405877f, -0.0525715807f, -0.0515476777f, -0.0476183263f, -0.0405511583f, -0.0302526219f, -0.0167837577f, + -0.0003687048f, 0.0186033188f, 0.0395840702f, 0.0618793275f, 0.0846695731f, 0.1070368665f, 0.1279977851f, 0.1465405975f, + 0.1616659442f, 0.1724289210f, 0.1779814634f, 0.1776128485f, 0.1707870983f, 0.1571752579f, 0.1366814829f, 0.1094613028f, + 0.0759313883f, 0.0367697773f, -0.0070935349f, -0.0544959696f, -0.1040711201f, -0.1542864664f, -0.2034887901f, -0.2499561795f, + -0.2919547949f, -0.3277987591f, -0.3559109665f, -0.3748828886f, -0.3835310580f, -0.3809483068f, -0.3665476249f, -0.3400970096f, + -0.3017436398f, -0.2520263114f, -0.1918751666f, -0.1225984212f, -0.0458559702f, 0.0363795557f, 0.1218735116f, 0.2081903173f, + 0.2927633059f, 0.3729712075f, 0.4462190576f, 0.5100209195f, 0.5620818683f, 0.6003764644f, 0.6232211630f, 0.6293380722f, + 0.6179078583f, 0.5886097344f, 0.5416469980f, 0.4777568614f, 0.3982039462f, 0.3047571785f, 0.1996504916f, 0.0855281262f, + -0.0346240344f, -0.1575593206f, -0.2798609975f, -0.3980402954f, -0.5086387923f, -0.6083321215f, -0.6940317623f, -0.7629817970f, + -0.8128474994f, -0.8417929488f, -0.8485450365f, -0.8324417371f, -0.7934628536f, -0.7322420813f, -0.6500596798f, -0.5488157513f, + -0.4309846022f, -0.2995513767f, -0.1579325879f, -0.0098828159f, 0.1406098406f, 0.2894364546f, 0.4324848701f, 0.5657586229f, + 0.6854937093f, 0.7882695488f, 0.8711108731f, 0.9315772485f, 0.9678376107f, 0.9787272513f, 0.9637856763f, 0.9232737576f, + 0.8581699744f, 0.7701451849f, 0.6615174635f, 0.5351870989f, 0.3945560458f, 0.2434310351f, 0.0859296286f, -0.0736424535f, + -0.2310634168f, -0.3823114335f, -0.5235213255f, -0.6510808750f, -0.7617398230f, -0.8526941807f, -0.9216599849f, -0.9669314227f, + -0.9874241586f, -0.9827015967f, -0.9529842399f, -0.8991414091f, -0.8226659724f, -0.7256325245f, -0.6106403919f, -0.4807428752f, + -0.3393647947f, -0.1902104941f, -0.0371648883f, 0.1158098198f, 0.2647789049f, 0.4059385830f, 0.5357153558f, 0.6508586114f, + 0.7485239966f, 0.8263453865f, 0.8824935656f, 0.9157201366f, 0.9253855645f, 0.9114707230f, 0.8745717535f, 0.8158785137f, + 0.7371373367f, 0.6405992467f, 0.5289551681f, 0.4052600056f, 0.2728477634f, 0.1352400975f, -0.0039491512f, -0.1411108055f, + -0.2727359386f, -0.3955076155f, -0.5063863406f, -0.6026869640f, -0.6821450593f, -0.7429710985f, -0.7838911084f, -0.8041728778f, + -0.8036371970f, -0.7826540315f, -0.7421239451f, -0.6834454939f, -0.6084696882f, -0.5194429622f, -0.4189403872f, -0.3097911110f, + -0.1949981889f, -0.0776550965f, 0.0391387290f, 0.1523609846f, 0.2591459713f, 0.3568583179f, 0.4431590282f, 0.5160621741f, + 0.5739808402f, 0.6157612575f, 0.6407044060f, 0.6485747369f, 0.6395960249f, 0.6144347317f, 0.5741715934f, 0.5202624757f, + 0.4544898084f, 0.3789061628f, 0.2957717132f, 0.2074874749f, 0.1165262725f, 0.0253634355f, -0.0635908373f, -0.1480555764f, + -0.2259378928f, -0.2953850427f, -0.3548284161f, -0.4030183987f, -0.4390493642f, -0.4623743329f, -0.4728091652f, -0.4705264349f, + -0.4560394511f, -0.4301771396f, -0.3940507708f, -0.3490137022f, -0.2966155068f, -0.2385519527f, -0.1766124162f, -0.1126263061f, + -0.0484101006f, 0.0142835032f, 0.0738128901f, 0.1286900297f, 0.1776170652f, 0.2195161266f, 0.2535516850f, 0.2791450556f, + 0.2959808562f, 0.3040055207f, 0.3034181575f, 0.2946543119f, 0.2783633373f, 0.2553803089f, 0.2266934879f, 0.1934085139f, + 0.1567104961f, 0.1178252714f, 0.0779810094f, 0.0383713679f, 0.0001212356f, -0.0357439328f, -0.0683244197f, -0.0968674883f, + -0.1207831483f, -0.1396541129f, -0.1532399189f, -0.1614752576f, -0.1644628650f, -0.1624613596f, -0.1558686952f, -0.1452018785f, + -0.1310738418f, -0.1141682734f, -0.0952134023f, -0.0749555678f, -0.0541335559f, -0.0334544361f, -0.0135717544f, 0.0049333847f, + 0.0215677075f, 0.0359373755f, 0.0477554333f, 0.0568451598f, 0.0631392301f, 0.0666750625f, 0.0675865095f, 0.0660925397f, + 0.0624832536f, 0.0571040881f, 0.0503386382f, 0.0425910695f, 0.0342685282f, 0.0257645482f, 0.0174437200f, 0.0096285741f, + 0.0025886897f, -0.0034671163f, -0.0083958582f, -0.0121219514f, -0.0146360592f, -0.0159904888f, -0.0162924414f, -0.0156942489f, + -0.0143825819f, -0.0125652661f, -0.0104587259f, -0.0082734050f, -0.0062022974f, -0.0044063851f, -0.0030085782f, -0.0020299468f, + -0.0013564795f, -0.0008863453f, -0.0005771741f, -0.0003938621f, -0.0003061649f, -0.0002866266f, -0.0003117925f, -0.0003614869f, + -0.0004195045f, -0.0004730462f, -0.0005129312f, -0.0005329799f, -0.0005299127f, -0.0005026982f, -0.0004523006f, -0.0003810636f, + -0.0002924326f, -0.0001904381f, -0.0000794736f, 0.0000360876f, 0.0001520218f, 0.0002645035f, 0.0003701407f, 0.0004661098f, + 0.0005501197f, 0.0006204662f, 0.0006759537f, 0.0007159048f, 0.0007400667f, 0.0007486024f, 0.0007420006f, 0.0007210650f, + 0.0006868352f, 0.0006405800f, 0.0005837296f, 0.0005178714f, 0.0004446899f, 0.0003659600f, 0.0002834907f, 0.0001991139f, + 0.0001146287f, 0.0000317867f, -0.0000477626f, -0.0001224860f, -0.0001910156f, -0.0002521590f, -0.0003049377f, -0.0003485879f, + -0.0003825850f, -0.0004066332f, -0.0004206749f, -0.0004248679f, -0.0004195832f, -0.0004053722f, -0.0003829556f, -0.0003531864f, + -0.0003170337f, -0.0002755456f, -0.0002298325f, -0.0001810330f, -0.0001302996f, -0.0000787683f, -0.0000275484f, 0.0000223042f, + 0.0000697938f, 0.0001140082f, 0.0001541235f, 0.0001894239f, 0.0002193054f, 0.0002432921f, 0.0002610376f, 0.0002723377f, + 0.0002771279f, 0.0002754901f, 0.0002676451f, 0.0002539525f, 0.0002348963f, 0.0002110770f, 0.0001831908f, 0.0001520155f, + 0.0001183840f, 0.0000831661f, 0.0000472400f, 0.0000114735f, -0.0000233037f, -0.0000563155f, -0.0000868623f, -0.0001143311f, + -0.0001382112f, -0.0001580971f, -0.0001736964f, -0.0001848263f, -0.0001914138f, -0.0001934872f, -0.0001911719f, -0.0001846781f, + -0.0001742945f, -0.0001603745f, -0.0001433301f, -0.0001236179f, -0.0001017335f, -0.0000781989f, -0.0000535563f, -0.0000283571f, + -0.0000031551f, 0.0000215050f, 0.0000450945f, 0.0000671132f, 0.0000870967f, 0.0001046293f, 0.0001193514f, 0.0001309712f, + 0.0001392702f, 0.0001441122f, 0.0001454457f, 0.0001433077f, 0.0001378215f, 0.0001291946f, 0.0001177105f, 0.0001037219f, + 0.0000876371f, 0.0000699088f, 0.0000510177f, 0.0000314597f, 0.0000117289f, -0.0000076947f, -0.0000263593f, -0.0000438511f, + 0.0001150132f, 0.0001210457f, 0.0001243256f, 0.0001247272f, 0.0001221905f, 0.0001167241f, 0.0001084050f, 0.0000973782f, + 0.0000838538f, 0.0000681026f, 0.0000504506f, 0.0000312726f, 0.0000109840f, -0.0000099676f, -0.0000311119f, -0.0000519657f, + -0.0000720435f, -0.0000908672f, -0.0001079775f, -0.0001229433f, -0.0001353725f, -0.0001449210f, -0.0001513017f, -0.0001542924f, + -0.0001537428f, -0.0001495795f, -0.0001418111f, -0.0001305291f, -0.0001159099f, -0.0000982119f, -0.0000777730f, -0.0000550042f, + -0.0000303824f, -0.0000044402f, 0.0000222446f, 0.0000490630f, 0.0000753874f, 0.0001005877f, 0.0001240454f, 0.0001451693f, + 0.0001634096f, 0.0001782724f, 0.0001893315f, 0.0001962400f, 0.0001987389f, 0.0001966654f, 0.0001899567f, 0.0001786543f, + 0.0001629038f, 0.0001429540f, 0.0001191532f, 0.0000919438f, 0.0000618549f, 0.0000294929f, -0.0000044692f, -0.0000393044f, + -0.0000742456f, -0.0001085004f, -0.0001412677f, -0.0001717545f, -0.0001991934f, -0.0002228606f, -0.0002420939f, -0.0002563091f, + -0.0002650175f, -0.0002678393f, -0.0002645180f, -0.0002549296f, -0.0002390911f, -0.0002171644f, -0.0001894582f, -0.0001564244f, + -0.0001186528f, -0.0000768603f, -0.0000318787f, 0.0000153623f, 0.0000638538f, 0.0001125289f, 0.0001602850f, 0.0002060085f, + 0.0002485978f, 0.0002869886f, 0.0003201766f, 0.0003472410f, 0.0003673652f, 0.0003798567f, 0.0003841643f, 0.0003798944f, + 0.0003668225f, 0.0003449050f, 0.0003142851f, 0.0002752981f, 0.0002284708f, 0.0001745194f, 0.0001143417f, 0.0000490064f, + -0.0000202635f, -0.0000921091f, -0.0001650610f, -0.0002375657f, -0.0003080181f, -0.0003747934f, -0.0004362837f, -0.0004909328f, + -0.0005372734f, -0.0005739597f, -0.0005998016f, -0.0006137920f, -0.0006151340f, -0.0006032611f, -0.0005778563f, -0.0005388644f, + -0.0004865040f, -0.0004212729f, -0.0003439544f, -0.0002556177f, -0.0001576201f, -0.0000516007f, 0.0000605233f, 0.0001765734f, + 0.0002941267f, 0.0004105520f, 0.0005230524f, 0.0006287329f, 0.0007246810f, 0.0008080802f, 0.0008763365f, 0.0009272432f, + 0.0009591516f, 0.0009711764f, 0.0009633904f, 0.0009370386f, 0.0008947118f, 0.0008405162f, 0.0007801566f, 0.0007209907f, + 0.0006719403f, 0.0006433567f, 0.0006466802f, 0.0006940691f, 0.0007977534f, 0.0009694468f, 0.0012193921f, 0.0015557448f, + 0.0019833924f, 0.0025041582f, 0.0031158854f, 0.0038235626f, 0.0046346272f, 0.0054390989f, 0.0060159327f, 0.0061653048f, + 0.0057248818f, 0.0045689017f, 0.0026174491f, -0.0001576249f, -0.0037279496f, -0.0080071970f, -0.0128521554f, -0.0180669900f, + -0.0234101334f, -0.0286038762f, -0.0333460639f, -0.0373236148f, -0.0402271782f, -0.0417664366f, -0.0416853226f, -0.0397765655f, + -0.0358948666f, -0.0299681460f, -0.0220062759f, -0.0121068734f, -0.0004577646f, 0.0126640959f, 0.0268973823f, 0.0418047890f, + 0.0568849057f, 0.0715872627f, 0.0853301253f, 0.0975204815f, 0.1075755810f, 0.1149452916f, 0.1191344911f, 0.1197246774f, + 0.1163939799f, 0.1089347803f, 0.0972682074f, 0.0814548499f, 0.0617011436f, 0.0383610136f, 0.0119325064f, -0.0169506961f, + -0.0475328132f, -0.0789543128f, -0.1102746589f, -0.1404988789f, -0.1686072305f, -0.1935871058f, -0.2144662161f, -0.2303460115f, + -0.2404342559f, -0.2440756538f, -0.2407794617f, -0.2302430666f, -0.2123706161f, -0.1872859065f, -0.1553388989f, -0.1171054066f, + -0.0733797097f, -0.0251600584f, 0.0263727389f, 0.0798832323f, 0.1339151136f, 0.1869300341f, 0.2373504277f, 0.2836051694f, + 0.3241767553f, 0.3576486211f, 0.3827511531f, 0.3984049546f, 0.4037599595f, 0.3982290834f, 0.3815152127f, 0.3536305207f, + 0.3149072795f, 0.2659995936f, 0.2078757153f, 0.1418008973f, 0.0693110001f, -0.0078226274f, -0.0876362185f, -0.1680235605f, + -0.2467916047f, -0.3217202299f, -0.3906245377f, -0.4514179183f, -0.5021740836f, -0.5411862254f, -0.5670215229f, -0.5785692885f, + -0.5750812186f, -0.5562023763f, -0.5219918070f, -0.4729319281f, -0.4099261771f, -0.3342846951f, -0.2476981973f, -0.1522004957f, + -0.0501205046f, 0.0559751503f, 0.1633474747f, 0.2691567323f, 0.3705384397f, 0.4646816888f, 0.5489076127f, 0.6207458062f, + 0.6780064885f, 0.7188463213f, 0.7418258915f, 0.7459571192f, 0.7307390569f, 0.6961809001f, 0.6428113176f, 0.5716736392f, + 0.4843067689f, 0.3827121551f, 0.2693074809f, 0.1468681897f, 0.0184582454f, -0.1126480739f, -0.2430513537f, -0.3693168934f, + -0.4880668522f, -0.5960721328f, -0.6903415076f, -0.7682054473f, -0.8273923237f, -0.8660947411f, -0.8830241082f, -0.8774517523f, + -0.8492353530f, -0.7988297417f, -0.7272816665f, -0.6362084256f, -0.5277608621f, -0.4045714971f, -0.2696891599f, -0.1265016829f, + 0.0213512370f, 0.1700728247f, 0.3158090264f, 0.4547507613f, 0.5832357292f, 0.6978471330f, 0.7955064526f, 0.8735578646f, + 0.9298417700f, 0.9627555531f, 0.9712996189f, 0.9551076043f, 0.9144595827f, 0.8502781043f, 0.7641067542f, 0.6580721014f, + 0.5348295632f, 0.3974950823f, 0.2495638365f, 0.0948188243f, -0.0627690415f, -0.2191456458f, -0.3702816044f, -0.5122788950f, + -0.6414754270f, -0.7545417373f, -0.8485716286f, -0.9211570287f, -0.9704889399f, -0.9954247591f, -0.9954218673f, -0.9705217574f, + -0.9213839861f, -0.8492714879f, -0.7560202971f, -0.6439925425f, -0.5160173451f, -0.3753189325f, -0.2254355616f, -0.0701299883f, + 0.0867051692f, 0.2411456382f, 0.3893340590f, 0.5275770178f, 0.6524375705f, 0.7608213615f, 0.8500537691f, 0.9179464760f, + 0.9628514821f, 0.9837014823f, 0.9800353577f, 0.9520083832f, 0.9003867192f, 0.8265265439f, 0.7323382228f, 0.6202366175f, + 0.4930786891f, 0.3540901510f, 0.2067829436f, 0.0548657749f, -0.0978500833f, -0.2475472308f, -0.3904984352f, -0.5231602531f, + -0.6422616826f, -0.7448855335f, -0.8285405425f, -0.8912223677f, -0.9314620191f, -0.9483604838f, -0.9416087836f, -0.9114929628f, + -0.8588840025f, -0.7852129374f, -0.6924319284f, -0.5829623058f, -0.4596310148f, -0.3255970991f, -0.1842701886f, -0.0392230686f, + 0.1058993714f, 0.2474725071f, 0.3819832739f, 0.5061180987f, 0.6168452203f, 0.7114893652f, 0.7877968946f, 0.8439898530f, + 0.8788075843f, 0.8915349645f, 0.8820165939f, 0.8506567100f, 0.7984048958f, 0.7267280723f, 0.6375695654f, 0.5332964054f, + 0.4166362696f, 0.2906057742f, 0.1584319899f, 0.0234692546f, -0.1108865770f, -0.2412842200f, -0.3645012037f, -0.4775241203f, + -0.5776228825f, -0.6624171300f, -0.7299331734f, -0.7786500916f, -0.8075339158f, -0.8160591222f, -0.8042170147f, -0.7725108907f, + -0.7219382530f, -0.6539606307f, -0.5704619141f, -0.4736963677f, -0.3662277643f, -0.2508612725f, -0.1305699260f, -0.0084175965f, + 0.1125195105f, 0.2292308248f, 0.3388468469f, 0.4387101575f, 0.5264402212f, 0.5999904058f, 0.6576958356f, 0.6983109662f, + 0.7210360284f, 0.7255318034f, 0.7119224786f, 0.6807866622f, 0.6331369228f, 0.5703885257f, 0.4943182949f, 0.4070147863f, + 0.3108211535f, 0.2082722739f, 0.1020278156f, -0.0051969757f, -0.1107009698f, -0.2118655199f, -0.3062197747f, -0.3915012914f, + -0.4657104605f, -0.5271574266f, -0.5745004072f, -0.6067745424f, -0.6234106746f, -0.6242437161f, -0.6095105484f, -0.5798376568f, + -0.5362189802f, -0.4799846893f, -0.4127618434f, -0.3364280618f, -0.2530595200f, -0.1648746973f, -0.0741754031f, 0.0167133565f, + 0.1055030935f, 0.1899996005f, 0.2681572959f, 0.3381288062f, 0.3983085785f, 0.4473694991f, 0.4842916874f, 0.5083828586f, + 0.5192898714f, 0.5170013229f, 0.5018412808f, 0.4744544796f, 0.4357835192f, 0.3870388112f, 0.3296621862f, 0.2652852328f, + 0.1956835517f, 0.1227281969f, 0.0483356232f, -0.0255825221f, -0.0971684532f, -0.1646648843f, -0.2264580855f, -0.2811163005f, + -0.3274226190f, -0.3644015563f, -0.3913387774f, -0.4077935926f, -0.4136040520f, -0.4088846629f, -0.3940169539f, -0.3696332868f, + -0.3365944947f, -0.2959620717f, -0.2489657697f, -0.1969675619f, -0.1414230072f, -0.0838410952f, -0.0257436705f, 0.0313744817f, + 0.0860838469f, 0.1370557180f, 0.1830941784f, 0.2231637715f, 0.2564122248f, 0.2821877493f, 0.3000505886f, 0.3097786572f, + 0.3113672668f, 0.3050231025f, 0.2911527592f, 0.2703462881f, 0.2433563271f, 0.2110734944f, 0.1744988056f, 0.1347139397f, + 0.0928502123f, 0.0500571304f, 0.0074713874f, -0.0338128732f, -0.0727717585f, -0.1084765990f, -0.1401155933f, -0.1670116352f, + -0.1886359510f, -0.2046172992f, -0.2147466154f, -0.2189771152f, -0.2174199887f, -0.2103359435f, -0.1981229573f, -0.1813006959f, + -0.1604921331f, -0.1364029689f, -0.1097994880f, -0.0814855216f, -0.0522791841f, -0.0229900383f, 0.0056026879f, 0.0327702587f, + 0.0578524543f, 0.0802730249f, 0.0995522334f, 0.1153162297f, 0.1273031071f, 0.1353655831f, 0.1394703527f, 0.1396942492f, + 0.1362174419f, 0.1293139704f, 0.1193399898f, 0.1067201472f, 0.0919325573f, 0.0754928613f, 0.0579378715f, 0.0398092914f, + 0.0216379870f, 0.0039292462f, -0.0128505743f, -0.0282856818f, -0.0420204769f, -0.0537669816f, -0.0633099271f, -0.0705094521f, + -0.0753014229f, -0.0776954715f, -0.0777709009f, -0.0756706792f, -0.0715937815f, -0.0657861933f, -0.0585309019f, -0.0501372415f, + -0.0409299405f, -0.0312382391f, -0.0213854050f, -0.0116789736f, -0.0024019780f, 0.0061945814f, 0.0138978546f, 0.0205376997f, + 0.0259896162f, 0.0301760169f, 0.0330658894f, 0.0346729129f, 0.0350521841f, 0.0342957066f, 0.0325268747f, 0.0298941639f, + 0.0265643082f, 0.0227151980f, 0.0185287912f, 0.0141842567f, 0.0098516209f, 0.0056860875f, 0.0018232500f, -0.0016247097f, + -0.0045716876f, -0.0069591888f, -0.0087566559f, -0.0099606909f, -0.0105931800f, -0.0106985104f, -0.0103399437f, -0.0095954160f, + -0.0085528538f, -0.0073053349f, -0.0059461694f, -0.0045642672f, -0.0032398065f, -0.0020405892f, -0.0010189826f, -0.0002098435f, + 0.0003708603f, 0.0007263907f, 0.0008791003f, 0.0008719916f, 0.0007765784f, 0.0006548666f, 0.0005262292f, 0.0003982537f, + 0.0002793177f, 0.0001753141f, 0.0000904043f, 0.0000267020f, -0.0000151645f, -0.0000359786f, -0.0000374823f, -0.0000222110f, + 0.0000068647f, 0.0000464960f, 0.0000934169f, 0.0001444514f, 0.0001966810f, 0.0002474932f, 0.0002946695f, 0.0003363826f, + 0.0003712266f, 0.0003981800f, 0.0004166001f, 0.0004261695f, 0.0004268735f, 0.0004189444f, 0.0004028356f, 0.0003791712f, + 0.0003487233f, 0.0003123700f, 0.0002710780f, 0.0002258678f, 0.0001778001f, 0.0001279460f, 0.0000773754f, 0.0000271305f, + -0.0000217852f, -0.0000684311f, -0.0001119393f, -0.0001515353f, -0.0001865458f, -0.0002164146f, -0.0002407060f, -0.0002591149f, + -0.0002714651f, -0.0002777121f, -0.0002779362f, -0.0002723393f, -0.0002612330f, -0.0002450307f, -0.0002242325f, -0.0001994145f, + -0.0001712119f, -0.0001403075f, -0.0001074144f, -0.0000732647f, -0.0000385932f, -0.0000041262f, 0.0000294329f, 0.0000614144f, + 0.0000911952f, 0.0001182080f, 0.0001419530f, 0.0001620054f, 0.0001780247f, 0.0001897598f, 0.0001970554f, 0.0001998531f, + 0.0001981941f, 0.0001922157f, 0.0001821496f, 0.0001683132f, 0.0001511033f, 0.0001309836f, 0.0001084739f, 0.0000841346f, + 0.0000585541f, 0.0000323319f, 0.0000060653f, -0.0000196656f, -0.0000443104f, -0.0000673606f, -0.0000883586f, -0.0001069066f, + -0.0001226716f, -0.0001353906f, -0.0001448717f, -0.0001509959f, -0.0001537153f, -0.0001530521f, -0.0001490949f, -0.0001419958f, + -0.0001319651f, -0.0001192675f, -0.0001042156f, -0.0000871648f, -0.0000685059f, -0.0000486591f, -0.0000280649f, -0.0000071771f, + 0.0000135476f, 0.0000336575f, 0.0000527172f, 0.0000703161f, 0.0000860792f, 0.0000996749f, 0.0001108247f, 0.0001193085f, + 0.0001249716f, 0.0001277272f, 0.0001275584f, 0.0001245179f, 0.0001187256f, 0.0001103637f, 0.0000996709f, 0.0000869347f, + 0.0001080714f, 0.0000990683f, 0.0000875489f, 0.0000737219f, 0.0000578554f, 0.0000402709f, 0.0000213391f, 0.0000014712f, + -0.0000188884f, -0.0000392732f, -0.0000592037f, -0.0000782001f, -0.0000957929f, -0.0001115356f, -0.0001250152f, -0.0001358638f, + -0.0001437678f, -0.0001484773f, -0.0001498120f, -0.0001476681f, -0.0001420207f, -0.0001329265f, -0.0001205227f, -0.0001050259f, + -0.0000867271f, -0.0000659874f, -0.0000432293f, -0.0000189302f, 0.0000063897f, 0.0000321758f, 0.0000578526f, 0.0000828338f, + 0.0001065369f, 0.0001283935f, 0.0001478642f, 0.0001644485f, 0.0001776986f, 0.0001872284f, 0.0001927257f, 0.0001939584f, + 0.0001907842f, 0.0001831541f, 0.0001711180f, 0.0001548245f, 0.0001345226f, 0.0001105567f, 0.0000833641f, 0.0000534651f, + 0.0000214568f, -0.0000120012f, -0.0000461970f, -0.0000803840f, -0.0001137931f, -0.0001456534f, -0.0001752051f, -0.0002017210f, + -0.0002245193f, -0.0002429841f, -0.0002565765f, -0.0002648525f, -0.0002674704f, -0.0002642056f, -0.0002549531f, -0.0002397370f, + -0.0002187078f, -0.0001921470f, -0.0001604577f, -0.0001241645f, -0.0000838982f, -0.0000403913f, 0.0000055419f, 0.0000530134f, + 0.0001010845f, 0.0001487757f, 0.0001950921f, 0.0002390326f, 0.0002796173f, 0.0003158959f, 0.0003469755f, 0.0003720281f, + 0.0003903206f, 0.0004012217f, 0.0004042346f, 0.0003990046f, 0.0003853554f, 0.0003632970f, 0.0003330658f, 0.0002951288f, + 0.0002502244f, 0.0001993576f, 0.0001438330f, 0.0000852306f, 0.0000254212f, -0.0000334924f, -0.0000891888f, -0.0001392362f, + -0.0001811447f, -0.0002125359f, -0.0002312354f, -0.0002355083f, -0.0002241797f, -0.0001969318f, -0.0001544184f, -0.0000986120f, + -0.0000328538f, 0.0000377552f, 0.0001064640f, 0.0001643821f, 0.0002009417f, 0.0002030084f, 0.0001564122f, 0.0000272101f, + -0.0002474236f, -0.0007077450f, -0.0013549123f, -0.0021692285f, -0.0031123474f, -0.0041302220f, -0.0051556983f, -0.0061124129f, + -0.0069187044f, -0.0074922749f, -0.0077547251f, -0.0076363116f, -0.0070802717f, -0.0060468886f, -0.0045167944f, -0.0024936150f, + -0.0000055857f, 0.0028937610f, 0.0061260810f, 0.0095897406f, 0.0131624981f, 0.0167051532f, 0.0200661755f, 0.0230870624f, + 0.0256083449f, 0.0274759454f, 0.0285477406f, 0.0287000110f, 0.0278335968f, 0.0258794506f, 0.0228034121f, 0.0186099337f, + 0.0133446258f, 0.0070954201f, -0.0000077076f, -0.0077945612f, -0.0160580606f, -0.0245590879f, -0.0330327072f, -0.0411956451f, + -0.0487548015f, -0.0554165787f, -0.0608967236f, -0.0649304010f, -0.0672821451f, -0.0677553773f, -0.0662011304f, -0.0625256765f, + -0.0566967379f, -0.0487480334f, -0.0387819173f, -0.0269699584f, -0.0135513300f, 0.0011710168f, 0.0168363911f, 0.0330344995f, + 0.0493155343f, 0.0652019647f, 0.0802017491f, 0.0938226053f, 0.1055869534f, 0.1150470840f, 0.1218001096f, 0.1255022179f, + 0.1258817753f, 0.1227508252f, 0.1160145780f, 0.1056785154f, 0.0918528133f, 0.0747538316f, 0.0547025267f, 0.0321197033f, + 0.0075181359f, -0.0185083336f, -0.0452985039f, -0.0721400382f, -0.0982878107f, -0.1229839236f, -0.1454788614f, -0.1650532162f, + -0.1810393625f, -0.1928424604f, -0.1999601464f, -0.2020003079f, -0.1986963539f, -0.1899194667f, -0.1756873734f, -0.1561692785f, + -0.1316866814f, -0.1027099283f, -0.0698504512f, -0.0338487823f, 0.0044414588f, 0.0440732723f, 0.0840292465f, 0.1232472348f, + 0.1606481100f, 0.1951648730f, 0.2257723487f, 0.2515166502f, 0.2715435877f, 0.2851251931f, 0.2916835749f, 0.2908113564f, + 0.2822880398f, 0.2660917210f, 0.2424057072f, 0.2116197075f, 0.1743254190f, 0.1313064718f, 0.0835228630f, 0.0320901527f, + -0.0217461395f, -0.0766403699f, -0.1311801252f, -0.1839222820f, -0.2334308512f, -0.2783156266f, -0.3172706001f, -0.3491110990f, + -0.3728086001f, -0.3875222240f, -0.3926259708f, -0.3877308633f, -0.3727012727f, -0.3476648529f, -0.3130156636f, -0.2694102425f, + -0.2177565698f, -0.1591960621f, -0.0950789218f, -0.0269333587f, 0.0435706287f, 0.1146620553f, 0.1845133465f, 0.2512872136f, + 0.3131848107f, 0.3684939113f, 0.4156358207f, 0.4532097440f, 0.4800333796f, 0.4951785767f, 0.4980010130f, 0.4881629819f, + 0.4656485511f, 0.4307705397f, 0.3841689741f, 0.3268008962f, 0.2599216377f, 0.1850578889f, 0.1039731292f, 0.0186261878f, + -0.0688760906f, -0.1563309363f, -0.2414952059f, -0.3221429964f, -0.3961238341f, -0.4614199206f, -0.5162009081f, -0.5588747253f, + -0.5881330481f, -0.6029901331f, -0.6028138835f, -0.5873482068f, -0.5567259364f, -0.5114718287f, -0.4524953996f, -0.3810736314f, + -0.2988238434f, -0.2076672897f, -0.1097842922f, -0.0075619595f, 0.0964642567f, 0.1996737260f, 0.2994269495f, 0.3931333240f, + 0.4783186205f, 0.5526904067f, 0.6141996858f, 0.6610970894f, 0.6919820919f, 0.7058438677f, 0.7020926210f, 0.6805804458f, + 0.6416110407f, 0.5859378797f, 0.5147507447f, 0.4296508188f, 0.3326148490f, 0.2259491718f, 0.1122346729f, -0.0057360023f, + -0.1250274487f, -0.2426350011f, -0.3555608763f, -0.4608910229f, -0.5558706911f, -0.6379767588f, -0.7049849023f, -0.7550298238f, + -0.7866568993f, -0.7988638266f, -0.7911310876f, -0.7634403277f, -0.7162800506f, -0.6506383584f, -0.5679827902f, -0.4702276607f, + -0.3596896122f, -0.2390324220f, -0.1112023801f, 0.0206441788f, 0.1532193990f, 0.2831865095f, 0.4072444271f, 0.5222121895f, + 0.6251110517f, 0.7132421052f, 0.7842573939f, 0.8362226383f, 0.8676698916f, 0.8776386903f, 0.8657045557f, 0.8319940114f, + 0.7771856339f, 0.7024969994f, 0.6096577639f, 0.5008694615f, 0.3787529642f, 0.2462848589f, 0.1067243047f, -0.0364678261f, + -0.1797154905f, -0.3194175307f, -0.4520389446f, -0.5742010518f, -0.6827682255f, -0.7749289589f, -0.8482691444f, -0.9008356561f, + -0.9311885385f, -0.9384404163f, -0.9222820323f, -0.8829932011f, -0.8214388065f, -0.7390498855f, -0.6377901922f, -0.5201090426f, + -0.3888815657f, -0.2473378465f, -0.0989827048f, 0.0524918607f, 0.2032993783f, 0.3496543888f, 0.4878683054f, 0.6144431772f, + 0.7261609761f, 0.8201660863f, 0.8940388909f, 0.9458585157f, 0.9742531243f, 0.9784364026f, 0.9582292951f, 0.9140663528f, + 0.8469865241f, 0.7586085363f, 0.6510914981f, 0.5270816374f, 0.3896465540f, 0.2421985725f, 0.0884091910f, -0.0678832812f, + -0.2227704771f, -0.3723727403f, -0.5129372944f, -0.6409334118f, -0.7531420237f, -0.8467376100f, -0.9193601068f, -0.9691751619f, + -0.9949209725f, -0.9959407463f, -0.9721996606f, -0.9242862434f, -0.8533978301f, -0.7613110254f, -0.6503400677f, -0.5232887671f, + -0.3833452070f, -0.2339716460f, -0.0788505878f, 0.0781931324f, 0.2332895986f, 0.3826182078f, 0.5225019620f, 0.6494973950f, + 0.7604792743f, 0.8527171215f, 0.9239423238f, 0.9724036977f, 0.9969105248f, 0.9968616872f, 0.9722604412f, 0.9237142440f, + 0.8524198184f, 0.7601336589f, 0.6491288368f, 0.5221390436f, 0.3822913495f, 0.2330292358f, 0.0780278756f, -0.0788963298f, + -0.2338796641f, -0.3831062116f, -0.5229017760f, -0.6498243415f, -0.7607488022f, -0.8529439154f, -0.9241395420f, -0.9725825570f, + -0.9970800142f, -0.9970285365f, -0.9724291748f, -0.9238873987f, -0.8525981906f, -0.7603166365f, -0.6493147113f, -0.5223253486f, + -0.3824751467f, -0.2332073920f, -0.0781972729f, 0.0787386074f, 0.2337362092f, 0.3829791953f, 0.5227929031f, 0.6497348216f, + 0.7606793588f, 0.8528947992f, 0.9241105706f, 0.9725731485f, 0.9970892373f, 0.9970551505f, 0.9724716796f, 0.9239440737f, + 0.8526671417f, 0.7603958321f, 0.6494020269f, 0.5224186015f, 0.3825721394f, 0.2333059467f, 0.0782952740f, -0.0786431789f, + -0.2336452368f, -0.3828943954f, -0.5227157923f, -0.6496666924f, -0.7606212560f, -0.8528475077f, -0.9240746034f, -0.9725487476f, + -0.9970763762f, -0.9970535479f, -0.9724808145f, -0.9239632108f, -0.8526953557f, -0.7604320409f, -0.6494450222f, -0.5224670848f, + -0.3826247539f, -0.2333613129f, -0.0783520192f, 0.0785863895f, 0.2335896751f, 0.3828412460f, 0.5226661333f, 0.6496214780f, + 0.7605813048f, 0.8528134912f, 0.9240470409f, 0.9725280010f, 0.9970626504f, 0.9970468907f, 0.9724811225f, 0.9239702338f, + 0.8527087070f, 0.7604512067f, 0.6494693756f, 0.5224958998f, 0.3826572234f, 0.2333965660f, 0.0783891427f, -0.0785483312f, + -0.2335516168f, -0.3828041004f, -0.5226307686f, -0.6495886980f, -0.7605518286f, -0.8527879374f, -0.9240259128f, -0.9725116771f, + -0.9970513761f, -0.9970407770f, -0.9724801457f, -0.9239742417f, -0.8527174266f, -0.7604642572f, -0.6494862818f, -0.5225161097f, + -0.3826801252f, -0.2334215076f, -0.0784154487f, 0.0785213402f, 0.2335246089f, 0.3827777168f, 0.5226056112f, 0.6495653171f, + 0.7605307154f, 0.8527695153f, 0.9240105331f, 0.9724996141f, 0.9970428253f, 0.9970358530f, 0.9724788823f, 0.9239765920f, + 0.8527232652f, 0.7604733819f, 0.6494984183f, 0.5225309161f, 0.3826971989f, 0.2334403933f, 0.0784356488f, -0.0785003550f, + -0.2335033857f, -0.3827568073f, -0.5225855558f, -0.6495466309f, -0.7605138718f, -0.8527549335f, -0.9239985644f, -0.9724905323f, + -0.9970368187f, -0.9970330198f, -0.9724792289f, -0.9239800349f, -0.8527296357f, -0.7604824344f, -0.6495098398f, -0.5225443385f, + -0.3827122124f, -0.2334565601f, -0.0784525165f, 0.0784832397f, 0.2334864657f, 0.3827405037f, 0.5225702598f, 0.6495326959f, + 0.7605016087f, 0.8527446058f, 0.9239903860f, 0.9724846653f, 0.9970333725f, 0.9970320501f, 0.9724807380f, 0.9239839714f, + 0.8527358952f, 0.7604908594f, 0.6495202224f, 0.5225564219f, 0.3827256949f, 0.2334710996f, 0.0784677378f, +}; + + +const float ivas_fb_resp_cheby_ramp_32del[IVAS_FB_1MS_32K_SAMP + 1] = +{ + 0.010231040569020f, 0.007495943710050f, 0.010178929162785f, 0.013398453336031f, + 0.017224667421257f, 0.021716621502222f, 0.026933804139047f, 0.032948050269901f, + 0.039809603616101f, 0.047574690662976f, 0.056302264669850f, 0.066034303975194f, + 0.076798058466510f, 0.088625188565940f, 0.101547758277136f, 0.115583678333348f, + 0.130755763247409f, 0.147071750845082f, 0.164507415202116f, 0.183014970904299f, + 0.202613741800170f, 0.223272731589440f, 0.244918942156018f, 0.267509604208255f, + 0.290972907623430f, 0.315243955993690f, 0.340239023615672f, 0.365855210507665f, + 0.392018902968585f, 0.418630748275114f, 0.445572918038597f, 0.472730394874248f, + 0.500000000000000f +}; + +const float ivas_fb_resp_cheby_ramp_16del[IVAS_FB_1MS_16K_SAMP + 1] = +{ + 0.010924831305822f, 0.013910402297200f, 0.022265243822209f, 0.033383809618597f, + 0.047654785522720f, 0.065424889526712f, 0.087005871336219f, 0.112572807795153f, + 0.142228383484898f, 0.175983302431557f, 0.213688773924401f, 0.255075179343390f, + 0.299758845354607f, 0.347229042543433f, 0.396890172892483f, 0.448063390053926f, + 0.500000000000000f +}; + +const int16_t ivas_num_active_bands[FB - WB + 1] = +{ + IVAS_16K_12BANDS_ACTIVE_BANDS, IVAS_FB_BANDS_12, IVAS_FB_BANDS_12 +}; + + +/* clang-format on */ diff --git a/lib_com/ivas_rom_com.h b/lib_com/ivas_rom_com.h new file mode 100644 index 0000000000..1415ae9f3e --- /dev/null +++ b/lib_com/ivas_rom_com.h @@ -0,0 +1,409 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_ROM_COM_H +#define IVAS_ROM_COM_H + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "typedef.h" +#include "stat_com.h" +#include "ivas_stat_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + + +/*----------------------------------------------------------------------------------* + * General IVAS ROM tables + *----------------------------------------------------------------------------------*/ + +extern const int32_t ivas_brate_tbl[]; + +/*------------------------------------------------------------------------- + * DFT Stereo ROM tables + *------------------------------------------------------------------------*/ + +extern const int16_t dft_band_limits_erb4[]; +extern const int16_t dft_band_limits_erb8[]; +extern const int16_t dft_band_ipd[3][4]; +extern const int16_t dft_band_res_cod[3][4]; + +extern const float dft_res_gains_q[][2]; +extern const float dft_res_cod_alpha[STEREO_DFT_BAND_MAX]; + +extern const float dft_trigo_12k8[STEREO_DFT_N_12k8_ENC / 4 + 1]; +extern const float dft_trigo_32k[STEREO_DFT_N_32k_ENC / 4 + 1]; +extern const float dft_trigo_48k[STEREO_DFT_N_MAX_ENC / 4 + 1]; + +/* Golomb-Rice encoding tables */ +extern const int16_t dft_maps_rpg[]; +extern const int16_t dft_code_itd[]; +extern const int16_t dft_len_itd[]; +extern const int16_t dft_maps_sg[NO_SYMB_GR_SIDE_G * NO_SYMB_GR_SIDE_G]; + +/*----------------------------------------------------------------------------------* + * Range Coder ROM tables + *----------------------------------------------------------------------------------*/ + +extern const uint16_t cum_freq_ari_pk_s17_LC_ext[RANGE_N_CONTEXT][1 + RANGE_N_SYMBOLS]; +extern const uint16_t sym_freq_ari_pk_s17_LC_ext[RANGE_N_CONTEXT][RANGE_N_SYMBOLS]; + +/*----------------------------------------------------------------------------------* + * ECLVQ Stereo ROM tables + *----------------------------------------------------------------------------------*/ + +extern const uint16_t ECSQ_tab_inverse[1 + ECSQ_SEGMENT_SIZE]; + +/*----------------------------------------------------------------------------------* + * Stereo ICA ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float ica_sincInterp2[]; +extern const float ica_sincInterp4[]; +extern const float ica_sincInterp6[]; + +/*----------------------------------------------------------------------------------* + * Stereo IC-BWE ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float icbwe_gsMapping_tbl[]; +extern const float icbwe_gsMappingDFT_tbl[]; + +/*----------------------------------------------------------------------------------* + * TD Stereo ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float tdm_ratio_tabl[]; +extern const float tdm_den_ratio_tabl[]; +extern const int16_t tdm_bit_allc_tbl[5][6]; + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +/* LSFs Intra-frame prediction tables */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE +extern const float tdm_LSF_MEAN_RE_USE_OUT[M]; +extern const float tdm_LSF_MEAN_RE_USE_IN[M]; +extern const float tdm_LSF_MEAN_RE_USE[M]; + +extern const float tdm_Beta_Q1bit_re_use_132[2]; +extern const float tdm_Beta_Q1bit_re_use_164[2]; +extern const float tdm_Beta_Q1bit_re_use_244_320[2]; +extern const float tdm_Beta_Q1bit_re_use_480[2]; + +extern const float tdm_RE_USE_adaptive_beta_prd_diag_3[15 + 16 + 15]; +#endif + +extern const float tdm_LSF_MEAN_PRED_QNT_OUT[M]; +extern const float tdm_LSF_MEAN_PRED_QNT_IN[M]; +extern const float tdm_LSF_MEAN_PRED_QNT[M]; +extern const float tdm_PRED_QNT_fixed_beta_prd_diag_3[15 + 16 + 15]; +#endif + +extern const int16_t fast_FCB_bits_2sfr[]; +extern const int16_t fast_FCB_rates_2sfr[]; + +/*----------------------------------------------------------------------------------* + * MDCT Stereo ROM tables + *----------------------------------------------------------------------------------*/ + +extern const SpectrumWarping sw16000Hz[]; /* PsychLPC */ +extern const SpectrumWarping sw25600Hz[]; /* PsychLPC */ +extern const SpectrumWarping sw32000Hz[]; /* PsychLPC */ + +extern const MDCTStereoBands_config mdctStereoBands_32000_640[]; +extern const float nf_tw_smoothing_coeffs[N_LTP_GAIN_MEMS]; + +/*----------------------------------------------------------------------------------* + * Stereo DTX ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float dft_cng_coh_pred[][STEREO_DFT_COH_PRED_COEFFS]; +extern const int16_t dft_cng_coh_u2i[9]; +extern const int16_t dft_cng_coh_i2u[9]; +extern const float dft_cng_alpha_bits[STEREO_DFT_N_COH_ALPHA_STEPS][STEREO_DFT_N_COH_ALPHA_LEVELS]; +extern const int16_t dft_cng_coh_alpha_start[STEREO_DFT_N_COH_ALPHA_STEPS - 1]; + +/*----------------------------------------------------------------------------------* + * DirAC ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float diffuseness_reconstructions[DIRAC_DIFFUSE_LEVELS]; +extern const float diffuseness_thresholds[DIRAC_DIFFUSE_LEVELS + 1]; +extern const int16_t DirAC_band_grouping_12[12 + 1]; +extern const int16_t DirAC_band_grouping_6[6 + 1]; +extern const int16_t DirAC_band_grouping_5[5 + 1]; +extern const int16_t DirAC_block_grouping[MAX_PARAM_SPATIAL_SUBFRAMES + 1]; +extern const int16_t DirAC_block_grouping_5ms_MDFT[MAX_PARAM_SPATIAL_SUBFRAMES + 1]; + +/*------------------------------------------------------------------------------------------* + * SPAR ROM tables + *------------------------------------------------------------------------------------------*/ + +extern const ivas_spar_br_table_t ivas_spar_br_table_consts[IVAS_SPAR_BR_TABLE_LEN]; +extern const ivas_arith_consts_t ivas_arith_consts[IVAS_SPAR_BR_TABLE_LEN][MAX_QUANT_STRATS]; +extern const ivas_huff_consts_t ivas_huff_const[IVAS_SPAR_BR_TABLE_LEN][MAX_QUANT_STRATS]; +extern const int16_t remix_order_set[1][IVAS_SPAR_MAX_CH]; +extern const int16_t keep_planar[IVAS_SPAR_MAX_CH - FOA_CHANNELS]; +extern const int16_t HOA_keep_ind[IVAS_SPAR_MAX_CH]; + +extern const float dtx_pd_real_min_max[2]; +extern const int16_t dtx_pd_real_q_levels[3][3]; +extern const int16_t dtx_pr_real_q_levels[3][3]; +extern const int16_t pr_pr_idx_pairs[3][3][2]; +extern const int16_t pr_pd_idx_pairs[3][3][2]; + + +/*----------------------------------------------------------------------* + * PCA ROM tables + *-----------------------------------------------------------------------*/ + +extern const int32_t ivas_pca_offset_index1[IVAS_PCA_N1 + 1]; +extern const int16_t ivas_pca_offset_index2[2692]; +extern const int16_t ivas_pca_offset_n2[IVAS_PCA_N1]; + + +/*----------------------------------------------------------------------------------* + * Parametric MC ROM tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t param_mc_band_grouping_20[20 + 1]; +extern const int16_t param_mc_coding_band_mapping_20[20]; +extern const int16_t param_mc_bands_coded_20[4]; +extern const int16_t param_mc_band_grouping_14[14 + 1]; +extern const int16_t param_mc_coding_band_mapping_14[14]; +extern const int16_t param_mc_bands_coded_14[4]; +extern const int16_t param_mc_band_grouping_10[10 + 1]; +extern const int16_t param_mc_coding_band_mapping_10[10]; +extern const int16_t param_mc_bands_coded_10[4]; +extern const int16_t param_mc_start_bin_per_band_20[20]; +extern const int16_t param_mc_active_bins_per_band_20[20]; +extern const int16_t param_mc_start_bin_per_band_14[14]; +extern const int16_t param_mc_active_bins_per_band_14[14]; +extern const int16_t param_mc_start_bin_per_band_10[10]; +extern const int16_t param_mc_active_bins_per_band_10[10]; +extern const int16_t Param_MC_index[MAX_CICP_CHANNELS]; +extern const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS]; +extern const float ivas_param_mc_quant_ild_5d1_48[PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const float ivas_param_mc_quant_icc[PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_cum_freq_ild_cicp6_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1]; +extern const uint16_t ivas_param_mc_sym_freq_ild_cicp6_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_cum_freq_ild_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_sym_freq_ild_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1]; +extern const uint16_t ivas_param_mc_cum_freq_icc_cicp6_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1]; +extern const uint16_t ivas_param_mc_sym_freq_icc_cicp6_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_cum_freq_icc_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_sym_freq_icc_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1]; + +extern const uint16_t ivas_param_mc_cum_freq_ild_cicp12_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1]; +extern const uint16_t ivas_param_mc_sym_freq_ild_cicp12_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_cum_freq_ild_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_sym_freq_ild_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1]; +extern const uint16_t ivas_param_mc_cum_freq_icc_cicp12_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1]; +extern const uint16_t ivas_param_mc_sym_freq_icc_cicp12_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_cum_freq_icc_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_sym_freq_icc_delta_cicp12_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1]; + +extern const uint16_t ivas_param_mc_cum_freq_ild_cicp14_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1]; +extern const uint16_t ivas_param_mc_sym_freq_ild_cicp14_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_cum_freq_ild_delta_cicp14_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_sym_freq_ild_delta_cicp14_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1]; +extern const uint16_t ivas_param_mc_cum_freq_icc_cicp14_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1]; +extern const uint16_t ivas_param_mc_sym_freq_icc_cicp14_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_cum_freq_icc_delta_cicp14_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_sym_freq_icc_delta_cicp14_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1]; + +extern const uint16_t ivas_param_mc_cum_freq_ild_combined_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1]; +extern const uint16_t ivas_param_mc_sym_freq_ild_combined_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_cum_freq_ild_delta_combined_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; +extern const uint16_t ivas_param_mc_sym_freq_ild_delta_combined_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS - 1]; +extern const uint16_t ivas_param_mc_cum_freq_icc_combined_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1]; +extern const uint16_t ivas_param_mc_sym_freq_icc_combined_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_cum_freq_icc_delta_combined_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER]; +extern const uint16_t ivas_param_mc_sym_freq_icc_delta_combined_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1]; + + +/*----------------------------------------------------------------------------------* + * MASA ROM tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t bits_direction_masa[DIRAC_DIFFUSE_LEVELS]; +extern const int16_t no_theta_masa[NO_SPHERICAL_GRIDS - 2]; +extern const int16_t no_phi_masa[NO_SPHERICAL_GRIDS][MAX_NO_THETA]; + +extern const float delta_theta_masa[NO_SPHERICAL_GRIDS - 2]; + +extern const float azimuth_cb[8]; +extern const float coherence_cb0_masa[DIRAC_DIFFUSE_LEVELS * 2 * MASA_NO_CV_COH]; +extern const float coherence_cb1_masa[MASA_NO_CV_COH1 * MASA_MAXIMUM_CODING_SUBBANDS]; /* 25 */ +extern const int16_t len_cb_dct0_masa[DIRAC_DIFFUSE_LEVELS]; +extern const uint8_t sur_coherence_cb_masa[MASA_NO_CB_SUR_COH * MASA_MAX_NO_CV_SUR_COH]; +extern const int16_t idx_cb_sur_coh_masa[MASA_NO_CV_COH]; +extern const int16_t len_huf_masa[MASA_NO_CV_COH1]; +extern const int16_t huff_code_av_masa[MASA_NO_CV_COH1]; + +extern const int16_t MASA_band_grouping_24[24 + 1]; +extern const int16_t MASA_band_mapping_24_to_18[18 + 1]; +extern const int16_t MASA_band_mapping_24_to_12[12 + 1]; +extern const int16_t MASA_band_mapping_24_to_8[8 + 1]; +extern const int16_t MASA_band_mapping_24_to_5[5 + 1]; + +extern const int16_t MASA_grouping_8_to_5[8]; +extern const int16_t MASA_grouping_12_to_5[12]; +extern const int16_t MASA_grouping_18_to_5[18]; +extern const int16_t MASA_grouping_24_to_5[24]; +extern const int16_t masa_bits[14]; +extern const int16_t masa_bits_LR_stereo[4]; +extern const int16_t mcmasa_bits[]; +extern const uint8_t masa_nbands[]; +extern const uint8_t masa_joined_nbands[]; +extern const uint8_t masa_twodir_bands[]; +extern const uint8_t masa_twodir_bands_joined[]; + +/* Multi-channel input and output setups */ +extern const float ls_azimuth_CICP2[2]; +extern const float ls_elevation_CICP2[2]; +extern const float ls_azimuth_CICP6[5]; +extern const float ls_elevation_CICP6[5]; +extern const float ls_azimuth_CICP12[7]; +extern const float ls_elevation_CICP12[7]; +extern const float ls_azimuth_CICP14[7]; +extern const float ls_elevation_CICP14[7]; +extern const float ls_azimuth_CICP16[9]; +extern const float ls_elevation_CICP16[9]; +extern const float ls_azimuth_CICP19[11]; +extern const float ls_elevation_CICP19[11]; + +extern const float cb_azi_chan[]; + +extern const float McMASA_LFEGain_vectors[64]; + +/*----------------------------------------------------------------------------------* + * ISM ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float ism_azimuth_borders[4]; +extern const float ism_elevation_borders[4]; + +/*----------------------------------------------------------------------------------* + * Param ISM ROM tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t Param_ISM_band_grouping[MAX_PARAM_ISM_NBANDS + 1]; + + +/*----------------------------------------------------------------------------------* + * LFE coding ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float ivas_lpf_4_butter_16k_sos[IVAS_BIQUAD_FILT_LEN << 2]; +extern const float ivas_lpf_4_butter_32k_sos[IVAS_BIQUAD_FILT_LEN << 2]; +extern const float ivas_lpf_4_butter_48k_sos[IVAS_BIQUAD_FILT_LEN << 2]; +extern const float ivas_lpf_2_butter_16k[IVAS_BIQUAD_FILT_LEN << 1]; +extern const float ivas_lpf_2_butter_32k[IVAS_BIQUAD_FILT_LEN << 1]; +extern const float ivas_lpf_2_butter_48k[IVAS_BIQUAD_FILT_LEN << 1]; + +extern const float ivas_lfe_window_coeff_48k[IVAS_LFE_FADE_LEN_48K]; +extern const float ivas_lfe_window_coeff_32k[IVAS_LFE_FADE_LEN_32K]; +extern const float ivas_lfe_window_coeff_16k[IVAS_LFE_FADE_LEN_16K]; + +extern const int16_t ivas_lfe_num_ele_in_coder_models[2][4]; +extern const int16_t ivas_lfe_num_dct_pass_bins_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP]; +extern const int16_t ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP]; +extern const ivas_lfe_freq_models ivas_str_lfe_freq_models; +extern const float ivas_lfe_lpf_delay[2]; + +extern const double d_hamm_lfe_plc[LFE_PLC_LENANA / 2]; + +extern const float ivas_sin_twiddle_480[IVAS_480_PT_LEN >> 1]; +extern const float ivas_cos_twiddle_480[IVAS_480_PT_LEN >> 1]; +extern const float ivas_sin_twiddle_320[IVAS_320_PT_LEN >> 1]; +extern const float ivas_cos_twiddle_320[IVAS_320_PT_LEN >> 1]; +extern const float ivas_sin_twiddle_160[IVAS_160_PT_LEN >> 1]; +extern const float ivas_cos_twiddle_160[IVAS_160_PT_LEN >> 1]; +extern const float ivas_sin_twiddle_80[IVAS_80_PT_LEN >> 1]; +extern const float ivas_cos_twiddle_80[IVAS_80_PT_LEN >> 1]; + +/*------------------------------------------------------------------------------------------* + * MDFT/iMDFT ROM tables + *------------------------------------------------------------------------------------------*/ + +extern const float ivas_mdft_coeff_cos_twid_240[IVAS_240_PT_LEN + 1]; +extern const float ivas_mdft_coeff_sin_twid_240[IVAS_240_PT_LEN]; +extern const float ivas_mdft_coeff_cos_twid_160[IVAS_160_PT_LEN + 1]; +extern const float ivas_mdft_coeff_sin_twid_160[IVAS_160_PT_LEN]; +extern const float ivas_mdft_coeff_cos_twid_80[IVAS_80_PT_LEN + 1]; +extern const float ivas_mdft_coeff_sin_twid_80[IVAS_80_PT_LEN]; +extern const float ivas_mdft_coeff_cos_twid_40[IVAS_40_PT_LEN + 1]; +extern const float ivas_mdft_coeff_sin_twid_40[IVAS_40_PT_LEN]; + +extern const float ivas_mdft_coeff_cos_twid_960[IVAS_960_PT_LEN + 1]; +extern const float ivas_mdft_coeff_sin_twid_960[IVAS_960_PT_LEN]; +extern const float ivas_mdft_coeff_cos_twid_640[IVAS_640_PT_LEN + 1]; +extern const float ivas_mdft_coeff_sin_twid_640[IVAS_640_PT_LEN]; +extern const float ivas_mdft_coeff_cos_twid_320[IVAS_320_PT_LEN + 1]; +extern const float ivas_mdft_coeff_sin_twid_320[IVAS_320_PT_LEN]; + +extern const int16_t dirac_gains_P_idx[16]; +extern const float dirac_gains_norm_term[9]; +extern const float dirac_gains_Pnm[91][9]; +extern const float dirac_gains_trg_term[181][2]; + +/*------------------------------------------------------------------------------------------* + * FB ROM tables + *------------------------------------------------------------------------------------------*/ + +extern const float ivas_fb_fcs_12band_1ms[IVAS_FB_BANDS_12]; + +extern const float ivas_fb_fr_12band_1ms_re[IVAS_FB_12_1MS_LEN]; +extern const float ivas_fb_fr_12band_1ms_im[IVAS_FB_12_1MS_LEN]; + +extern const int16_t ivas_fb_bins_per_band_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; +extern const int16_t ivas_fb_bins_start_offset_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; +extern const int16_t ivas_fb_abs_bins_per_band_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; +extern const int16_t ivas_fb_abs_bins_start_offset_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; + +extern const float ivas_fb_cf_4ms_48k[IVAS_FB_4MS_48K_SAMP]; +extern const float ivas_fb_cf_1ms_48k[IVAS_FB_1MS_48K_SAMP]; +extern const float ivas_fb_cf_4ms_32k[IVAS_FB_4MS_32K_SAMP]; +extern const float ivas_fb_cf_1ms_32k[IVAS_FB_1MS_32K_SAMP]; +extern const float ivas_fb_cf_4ms_16k[IVAS_FB_4MS_16K_SAMP]; +extern const float ivas_fb_cf_1ms_16k[IVAS_FB_1MS_16K_SAMP]; + +extern const float ivas_fb_resp_cheby_ramp_32del[IVAS_FB_1MS_32K_SAMP + 1]; +extern const float ivas_fb_resp_cheby_ramp_16del[IVAS_FB_1MS_16K_SAMP + 1]; + +extern const int16_t ivas_num_active_bands[FB - WB + 1]; + +/* IVAS_ROM_COM_H */ +#endif diff --git a/lib_com/ivas_sba_config.c b/lib_com/ivas_sba_config.c new file mode 100644 index 0000000000..c284c5778a --- /dev/null +++ b/lib_com/ivas_sba_config.c @@ -0,0 +1,296 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_com.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ivas_sba_mode_select() + * + * Return SBA mode + *-------------------------------------------------------------------*/ + +/*! r: SBA format mode */ +int16_t ivas_sba_mode_select( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + SBA_MODE sba_mode; + + if ( ivas_total_brate == IVAS_13k2 || ivas_total_brate == IVAS_16k4 ) + { + sba_mode = SBA_MODE_DIRAC; + } + else + { + sba_mode = SBA_MODE_SPAR; + } + + return sba_mode; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_config() + * + * Configure SBA coding + *-------------------------------------------------------------------*/ + +void ivas_sba_config( + const int32_t sba_total_brate, /* i : SBA total bitrate */ + int16_t sba_order, /* i : Ambisonic (SBA) order */ + int16_t nb_channels, /* i : Number of ambisonic channels */ + int16_t *nchan_transport, /* o : number of transport channels */ + const int16_t sba_planar, /* i : SBA Planar flag */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE, /* o : number of CPEs */ + int16_t *element_mode, /* o : element mode of the core coder */ + const SBA_MODE sba_mode /* i : SBA mode */ +) +{ + if ( ( sba_order < 0 ) && ( nb_channels < 0 ) ) + { + assert( 0 && "Either order or number of channels must be positive" ); + } + else if ( sba_order < 0 ) + { + sba_order = ivas_sba_get_order( nb_channels, sba_planar ); + } + else if ( nb_channels < 0 ) + { + nb_channels = ivas_sba_get_nchan( sba_order, sba_planar ); + } + else + { + if ( sba_planar ) + { + assert( ( ( 2 * sba_order ) + 1 == nb_channels ) && "Order and number of channels do not correspond!" ); + } + else + { + assert( ( ( sba_order + 1 ) * ( sba_order + 1 ) == nb_channels ) && "Order and number of channels do not correspond!" ); + } + } + + if ( nchan_transport != NULL ) + { + if ( sba_mode == SBA_MODE_SPAR ) + { + *nchan_transport = ivas_get_spar_num_TCs( sba_total_brate, sba_order ); + } + else + { + *nchan_transport = ivas_dirac_getNumTransportChannels( sba_total_brate, sba_order, sba_planar ); + } + } + + /* Configure core coder number of elements*/ + if ( nchan_transport != NULL && nSCE != NULL && nCPE != NULL ) + { + if ( *nchan_transport == 1 ) + { + *nSCE = 1; + *nCPE = 0; + *element_mode = IVAS_SCE; + } + else + { + *nSCE = 0; + *nCPE = *nchan_transport / 2; + if ( 2 * ( *nCPE ) != *nchan_transport ) + { + ( *nCPE )++; + } + *element_mode = IVAS_CPE_MDCT; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_get_order() + * + * Get Ambisonic order from number of ambisonic channels + *-------------------------------------------------------------------*/ + +int16_t ivas_sba_get_order( + const int16_t nb_channels, /* i : Number of ambisonic channels */ + const int16_t sba_planar /* i : SBA Planar flag */ +) +{ + int16_t sba_order; + + if ( sba_planar ) + { + sba_order = ( nb_channels - 1 ) / 2; + assert( ( 2 * sba_order + 1 == nb_channels ) && "Number of channels not supported in Planar SBA!" ); + } + else + { + sba_order = (int16_t) sqrtf( (float) nb_channels ) - 1; + assert( ( ( sba_order + 1 ) * ( sba_order + 1 ) == nb_channels ) && "Number of channels not supported in SBA!" ); + } + + assert( ( sba_order <= 3 ) && "Error: SBA order must be <= 3!" ); + + return ( sba_order ); +} + + +/*-------------------------------------------------------------------* + * ivas_sba_get_order_transport() + * + * Get effective Ambisonic order from number of transport channels + *-------------------------------------------------------------------*/ + +int16_t ivas_sba_get_order_transport( + const int16_t nchan_transport /* i : Number of transport channels */ +) +{ + int16_t sba_order; + + sba_order = 1; + + if ( nchan_transport > 6 ) + { + sba_order = 3; + } + else if ( nchan_transport > 4 ) + { + sba_order = 2; + } + + return ( sba_order ); +} + + +/*-------------------------------------------------------------------* + * ivas_sba_get_nchan() + * + * Get number of Ambisonic channels + *-------------------------------------------------------------------*/ + +int16_t ivas_sba_get_nchan( + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t sba_planar /* i : SBA planar flag */ +) +{ + int16_t nb_channels; + + if ( sba_planar ) + { + nb_channels = ( 2 * sba_order ) + 1; + } + else + { + nb_channels = ( sba_order + 1 ) * ( sba_order + 1 ); + } + + return ( nb_channels ); +} + + +/*-------------------------------------------------------------------* + * ivas_sba_get_nchan_metadata() + * + * Get number of Ambisonic channels for metadata coding + *-------------------------------------------------------------------*/ + +/*! r: number of ambisonics metadata channels */ +int16_t ivas_sba_get_nchan_metadata( + const int16_t sba_order /* i : Ambisonic (SBA) order */ +) +{ + int16_t nb_channels; + + if ( sba_order == 1 ) + { + nb_channels = FOA_CHANNELS; + } + else + { + /* FOA + planar HOA */ + nb_channels = FOA_CHANNELS + 2 * ( sba_order - 1 ); + } + + return ( nb_channels ); +} + + +/*-------------------------------------------------------------------* + * ivas_sba_zero_vert_comp() + * + * Zero vertical Ambisonics components + *-------------------------------------------------------------------*/ + +void ivas_sba_zero_vert_comp( + float sba_data[][L_FRAME48k], /* i : SBA signals */ + const int16_t sba_order, /* i : SBA order */ + const int16_t sba_planar, /* i : SBA planar flag */ + const int16_t input_frame /* i : frame length */ +) +{ + int16_t i, j; + + /* Channels in the range i^2+1 to (i+1)^2 -1 are zeroed (retain only first and last channel for that order) */ + for ( i = 1; i <= sba_order; i++ ) + { + /* Keep Z if not planar */ + if ( !sba_planar && i == 1 ) + { + continue; + } + + for ( j = ( i * i + 1 ); j < ( ( i + 1 ) * ( i + 1 ) - 1 ); j++ ) + { + set_zero( sba_data[j], input_frame ); + } + } + + return; +} diff --git a/lib_com/ivas_sns_com.c b/lib_com/ivas_sns_com.c new file mode 100644 index 0000000000..51f5fcee64 --- /dev/null +++ b/lib_com/ivas_sns_com.c @@ -0,0 +1,310 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +#include +#endif +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + +/*------------------------------------------------------------------- + * sns_compute_scf() + * + * + *-------------------------------------------------------------------*/ + +void sns_compute_scf( + float spectrum[], + const PsychoacousticParameters *pPsychParams, + const int16_t L_frame, /* TODO: this parameter is obsolete, since pPsychParams->nBins is used anyway */ + float *scf ) +{ + int16_t i, n, k; + float x[FDNS_NPTS], xs[FDNS_NPTS], sum, mean, xl4[SNS_NPTS], nf, xl[FDNS_NPTS]; + float tilt; + const uint8_t nBands = pPsychParams->nBands; + const uint8_t *bandLengths = pPsychParams->bandLengths; + int8_t bw = 0; + + + const float w_0 = 1.0f / 12.0f; + const float w_1 = 2.0f / 12.0f; + const float w_2 = 0.25f; /* 3.0f / 12.0f */ + const float w_3 = w_2; + const float w_4 = w_1; + const float w_5 = w_0; + + const float scale_log = INV_LOG_2 * 0.5f; + + assert( nBands == FDNS_NPTS ); + + set_f( x, 0.0f, FDNS_NPTS ); + + if ( bandLengths == NULL ) + { + bw = (int8_t) ( L_frame / nBands ); + /* Energy per band */ + k = 0; + for ( i = 0; i < nBands; ++i ) + { + x[i] = 0.0f; + for ( n = 0; n < bw; ++n, ++k ) + { + x[i] += spectrum[k]; + } + x[i] /= bw; + } + } + else + { + /* Energy per band */ + k = 0; + for ( i = 0; i < nBands; ++i ) + { + x[i] = 0.0f; + for ( n = 0; n < bandLengths[i]; ++n, ++k ) + { + x[i] += spectrum[k]; + } + x[i] /= bandLengths[i]; + } + } + + /* Smoothing */ + xs[0] = 0.75f * x[0] + 0.25f * x[1]; + + for ( i = 1; i < FDNS_NPTS - 1; i++ ) + { + xs[i] = 0.5f * x[i] + 0.25f * x[i - 1] + 0.25f * x[i + 1]; + } + + xs[FDNS_NPTS - 1] = 0.75f * x[FDNS_NPTS - 1] + 0.25f * x[FDNS_NPTS - 2]; + + /* Pre-emphasis */ + if ( L_frame == L_FRAME16k ) + { + tilt = 18.f; + } + else if ( L_frame == L_SPEC16k_EXT ) + { + tilt = 20.f; + } + else if ( L_frame == L_FRAME25_6k ) + { + tilt = 22.f; + } + else if ( L_frame == L_FRAME32k ) + { + tilt = 26.f; + } + else if ( L_frame == L_SPEC32k_EXT ) + { + tilt = 30.f; + } + else + { + tilt = 0.f; + assert( 0 && "illegal frame length in sns_compute_scf" ); + } + + for ( i = 0; i < FDNS_NPTS; i++ ) + { + xs[i] = xs[i] * powf( 10.0f, (float) i * (float) tilt / ( (float) FDNS_NPTS - 1.0f ) / 10.0f ); + } + + /* Noise floor at -40dB */ + sum = sum_f( xs, FDNS_NPTS ); + mean = sum / FDNS_NPTS; + + nf = mean * powf( 10.0f, -4.0f ); + nf = max( nf, powf( 2.0f, -32.0f ) ); + + + for ( i = 0; i < FDNS_NPTS; i++ ) + { + if ( xs[i] < nf ) + { + xs[i] = nf; + } + } + + /* Log-domain */ + for ( i = 0; i < FDNS_NPTS; i++ ) + { + xl[i] = logf( xs[i] ) * scale_log; + } + + /* Downsampling */ + xl4[0] = w_0 * xl[0] + + w_1 * xl[0] + + w_2 * xl[1] + + w_3 * xl[2] + + w_4 * xl[3] + + w_5 * xl[4]; + + + for ( n = 1; n < SNS_NPTS - 1; n++ ) + { + int16_t n4 = 4 * n; + xl4[n] = w_0 * xl[n4 - 1] + + w_1 * xl[n4] + + w_2 * xl[n4 + 1] + + w_3 * xl[n4 + 2] + + w_4 * xl[n4 + 3] + + w_5 * xl[n4 + 4]; + } + + xl4[SNS_NPTS - 1] = w_0 * xl[FDNS_NPTS - 5] + + w_1 * xl[FDNS_NPTS - 4] + + w_2 * xl[FDNS_NPTS - 3] + + w_3 * xl[FDNS_NPTS - 2] + + w_4 * xl[FDNS_NPTS - 1] + + w_5 * xl[FDNS_NPTS - 1]; + + /* Remove mean and scaling */ + sum = sum_f( xl4, SNS_NPTS ); + mean = sum / SNS_NPTS; + + for ( i = 0; i < SNS_NPTS; i++ ) + { + scf[i] = 0.85f * ( xl4[i] - mean ); + } + + return; +} +#endif + +/*------------------------------------------------------------------- + * sns_interpolate_scalefactors() + * + * + *-------------------------------------------------------------------*/ + +void sns_interpolate_scalefactors( + float *scf_int, /* o : interpolated scalefactors for spectrum shaping*/ + const float *scf, /* i : sns scalefactors as derived from the signal or read from the bitstream */ + int16_t encoder_side /* i : flag, if scalefactors have to be inverted */ +) +{ + int16_t n; + + /* Interpolation */ + scf_int[0] = scf[0]; + scf_int[1] = scf[0]; + + for ( n = 0; n <= M - 2; n++ ) + { + scf_int[n * 4 + 2] = scf[n] + ( scf[n + 1] - scf[n] ) / 8.f; + scf_int[n * 4 + 3] = scf[n] + 3.f * ( scf[n + 1] - scf[n] ) / 8.f; + scf_int[n * 4 + 4] = scf[n] + 5.f * ( scf[n + 1] - scf[n] ) / 8.f; + scf_int[n * 4 + 5] = scf[n] + 7.f * ( scf[n + 1] - scf[n] ) / 8.f; + } + + scf_int[FDNS_NPTS - 2] = scf[M - 1] + ( scf[M - 1] - scf[M - 2] ) / 8.f; + scf_int[FDNS_NPTS - 1] = scf[M - 1] + 3.f * ( scf[M - 1] - scf[M - 2] ) / 8.f; + + /* Inversion at encoder-side */ + if ( encoder_side == ENC ) + { + for ( n = 0; n < FDNS_NPTS; n++ ) + { + scf_int[n] = -scf_int[n]; + } + } + + /* Linear domain */ + for ( n = 0; n < FDNS_NPTS; n++ ) + { + scf_int[n] = powf( 2.f, scf_int[n] ); + } + + return; +} + + +/*------------------------------------------------------------------- + * sns_shape_spectrum() + * + * + *-------------------------------------------------------------------*/ + +void sns_shape_spectrum( + float spectrum[], /* i/o: spectrum to be shaped */ + const PsychoacousticParameters *pPsychParams, /* i : psychoacoustic parameters used to get the frequency bands */ + const float *scf_int, /* i : already interpolated SNS scalefactors */ + const int16_t L_frame /* i : frame length */ +) +{ + int16_t i, n, k, bw; + const uint8_t nBands = pPsychParams->nBands; + const uint8_t *bandLengths = pPsychParams->bandLengths; + + if ( bandLengths == NULL ) + { + bw = L_frame / nBands; + + /* Shape spectrum */ + k = 0; + for ( i = 0; i < nBands; ++i ) + { + for ( n = 0; n < bw; ++n, ++k ) + { + spectrum[k] *= scf_int[i]; + } + } + } + else + { + /* Shape spectrum */ + k = 0; + for ( i = 0; i < nBands; ++i ) + { + for ( n = 0; n < bandLengths[i]; ++n, ++k ) + { + spectrum[k] *= scf_int[i]; + } + } + } + + return; +} diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c new file mode 100644 index 0000000000..ad0873624e --- /dev/null +++ b/lib_com/ivas_spar_com.c @@ -0,0 +1,2079 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "math.h" +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_stat_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "ivas_rom_com.h" +#include "cnst.h" +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define IVAS_MDCT_SCALING_GAIN_48k 1.9699011974118126e-06f +#define IVAS_MDCT_SCALING_GAIN_32k 2.9548517961177197e-06f +#define IVAS_MDCT_SCALING_GAIN_16k 5.909703592235439e-06f +#define IVAS_MDCT_SCALING_GAIN_8k 0.000011819f + +#define IVAS_FLT_EPS ( 1e-10F ) +#define IVAS_DBL_EPS ( (double) 1e-20 ) + +#define IVAS_REMIX_MULT_FAC ( 0.5f ) + +#define IVAS_ACTIVEW_DM_F ( 1.0f ) +#define IVAS_ACTIVEW_DM_F_DTX ( 0.25f ) +#define IVAS_LIN_ACTIVEW_QUAD_ACTIVEW_THRESH ( 3.0f ) + +#define IVAS_P_NORM_SCALING ( 1.0f ) +#define IVAS_P_NORM_SCALING_DTX ( 0.75f ) + +#define IVAS_MAT_DIM_3 ( 3 ) +#define IVAS_MAT_DIM_2 ( 2 ) +#define IVAS_MAT_DIM_1 ( 1 ) +#define MAX_MAT_DIM ( FOA_CHANNELS - 1 ) + +/*------------------------------------------------------------------------------------------* + * Static functions declaration + *------------------------------------------------------------------------------------------*/ + +static void ivas_get_pred_coeffs( float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], float ppPred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], float ppDM_Fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], const int16_t in_chans, const int16_t start_band, const int16_t end_band, const int16_t active_w, const int16_t dtx_vad, const int16_t from_dirac ); + +static void ivas_reorder_array( float in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS], const int16_t in_chans, const int16_t order[IVAS_SPAR_MAX_CH], float ***mixer_mat, const int16_t start_band, const int16_t end_band ); + +static void ivas_get_Wscaling_factor( float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], float ***mixer_mat, const int16_t start_band, const int16_t end_band, const int16_t dtx_vad, const int16_t num_ch, const int16_t *pNum_dmx, const int16_t bands_bw, const int16_t active_w, float *pWscale ); + +static void ivas_calc_post_pred_per_band( float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], float ***mixer_mat, const int16_t num_ch, const int16_t num_dmx, const int16_t band_idx, float postpred_cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH] ); + +static int16_t ivas_is_mat_inv( float in_re[MAX_MAT_DIM][MAX_MAT_DIM], const int16_t dim ); + +static void ivas_calc_mat_inv( float in_re[MAX_MAT_DIM][MAX_MAT_DIM], const int16_t dim, float out_re[MAX_MAT_DIM][MAX_MAT_DIM] ); + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_twid_factors() + * + * Sets/Maps the fft twiddle tables based on fft length + *-----------------------------------------------------------------------------------------*/ + +void ivas_get_twid_factors( + const int16_t length, + const float **pTwid_re, + const float **pTwid_im ) +{ + if ( length == 480 ) + { + *pTwid_re = &ivas_cos_twiddle_480[0]; + *pTwid_im = &ivas_sin_twiddle_480[0]; + } + else if ( length == 320 ) + { + *pTwid_re = &ivas_cos_twiddle_320[0]; + *pTwid_im = &ivas_sin_twiddle_320[0]; + } + else if ( length == 160 ) + { + *pTwid_re = &ivas_cos_twiddle_160[0]; + *pTwid_im = &ivas_sin_twiddle_160[0]; + } + else if ( length == 80 ) + { + *pTwid_re = &ivas_cos_twiddle_80[0]; + *pTwid_im = &ivas_sin_twiddle_80[0]; + } + else + { + assert( !"Not supported FFT length!" ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_mdct_scaling_gain() + * + * Get scaling gain for MDCT functions + *-----------------------------------------------------------------------------------------*/ + +float ivas_get_mdct_scaling_gain( + const int16_t dct_len_by_2 ) +{ + float result = 0.0f; + + switch ( dct_len_by_2 ) + { + case L_FRAME48k >> 2: + { + result = IVAS_MDCT_SCALING_GAIN_48k; + break; + } + case L_FRAME32k >> 2: + { + result = IVAS_MDCT_SCALING_GAIN_32k; + break; + } + case L_FRAME16k >> 2: + { + result = IVAS_MDCT_SCALING_GAIN_16k; + break; + } + case L_FRAME8k >> 2: + { + result = IVAS_MDCT_SCALING_GAIN_8k; + break; + } + default: + { + assert( !"Unsupported frame length!" ); + break; + } + } + + return result; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_lpf_select_filt_coeff() + * + * Selects LFE filter coeff based on config. + *-----------------------------------------------------------------------------------------*/ + +void ivas_lfe_lpf_select_filt_coeff( + const int32_t sampling_rate, /* i : sampling rate */ + const int16_t order, /* i : filter order */ + const float **ppFilt_coeff /* o : filter coefficients */ +) +{ + switch ( order ) + { + case IVAS_FILTER_ORDER_2: + switch ( sampling_rate ) + { + case 16000: + *ppFilt_coeff = ivas_lpf_2_butter_16k; + break; + case 32000: + *ppFilt_coeff = ivas_lpf_2_butter_32k; + break; + case 48000: + *ppFilt_coeff = ivas_lpf_2_butter_48k; + break; + default: + break; + } + break; + case IVAS_FILTER_ORDER_4: + switch ( sampling_rate ) + { + case 16000: + *ppFilt_coeff = ivas_lpf_4_butter_16k_sos; + break; + case 32000: + *ppFilt_coeff = ivas_lpf_4_butter_32k_sos; + break; + case 48000: + *ppFilt_coeff = ivas_lpf_4_butter_48k_sos; + break; + default: + break; + } + break; + default: + assert( !"Unsupported LFE Filter order" ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_bw_idx_from_sample_rate() + * + * Get bwidth index from sample rate. + *-----------------------------------------------------------------------------------------*/ + +/*! r: audio BW index */ +int16_t ivas_get_bw_idx_from_sample_rate( + const int32_t sampling_rate /* i : sampling rate */ +) +{ + int16_t bwidth = 0; + + switch ( sampling_rate ) + { + case 16000: + bwidth = WB; + break; + case 32000: + bwidth = SWB; + break; + case 48000: + bwidth = FB; + break; + default: + assert( !"Unsupported sample rate!" ); + } + + return bwidth; +} + + +/*-----------------------------------------------------------------------------------------* + * Function lfe_window_init() + * + * Initialize LFE window + *-----------------------------------------------------------------------------------------*/ + +void lfe_window_init( + LFE_WINDOW_HANDLE hLFEWindow, + const int32_t sampling_rate, + const int16_t frame_len ) +{ + /* Set window coefficients */ + if ( sampling_rate == 48000 ) + { + hLFEWindow->pWindow_coeffs = ivas_lfe_window_coeff_48k; + } + else if ( sampling_rate == 32000 ) + { + hLFEWindow->pWindow_coeffs = ivas_lfe_window_coeff_32k; + } + else if ( sampling_rate == 16000 ) + { + hLFEWindow->pWindow_coeffs = ivas_lfe_window_coeff_16k; + } + else + { + assert( !"8kHz LFE Window not supported" ); + } + + /* 10ms stride, MDCT will be done in two iterations */ + hLFEWindow->dct_len = frame_len >> 1; + + /* 8ms of latency */ + hLFEWindow->fade_len = (int16_t) ( sampling_rate * IVAS_LFE_FADE_LEN_SEC_FLOAT ); + hLFEWindow->zero_pad_len = (int16_t) ( IVAS_ZERO_PAD_LEN_MULT_FAC * ( hLFEWindow->dct_len - hLFEWindow->fade_len ) ); + hLFEWindow->full_len = hLFEWindow->zero_pad_len + hLFEWindow->fade_len + hLFEWindow->dct_len; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_config() + * + * SPAR configuration function + *------------------------------------------------------------------------*/ + +void ivas_spar_config( + int32_t ivas_total_brate, /* i : codec total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + int16_t *nchan_transport, /* o : number of transport channels */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE, /* o : number of CPEs */ + int32_t *core_nominal_brate, /* o : core-coding nominal bitrate */ + const int16_t sid_format /* i : IVAS format indicator from SID frame */ +) +{ + if ( ivas_total_brate == IVAS_SID_5k ) + { + if ( sid_format == SID_SBA_1TC ) + { + *nchan_transport = 1; + } + else + { + *nchan_transport = 2; + } + } + else + { + *nchan_transport = ivas_get_spar_num_TCs( ivas_total_brate, sba_order ); + } + + *nCPE = ( *nchan_transport > 1 ) ? ( *nchan_transport + 1 ) >> 1 : 0; + *nSCE = max( 0, *nchan_transport - ( *nCPE << 1 ) ); + + if ( *nchan_transport == 1 ) + { + /* map SPAR SID bitrate to SPAR active bitrate */ + if ( ivas_total_brate == IVAS_SID_5k ) + { + ivas_total_brate = IVAS_32k; + } + + assert( ivas_total_brate == IVAS_32k || ivas_total_brate == IVAS_24k4 ); + if ( ivas_total_brate == IVAS_32k ) + { + *core_nominal_brate = ACELP_24k40; + } + else if ( ivas_total_brate == IVAS_24k4 ) + { + *core_nominal_brate = ACELP_16k40; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_spar_table_idx() + * + * Get SPAR table index + *-----------------------------------------------------------------------------------------*/ + +/* !r: config. table index */ +int16_t ivas_get_spar_table_idx( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t bwidth, /* i : audio bandwidth */ + int16_t *bitlen, /* o : number of bits */ + int16_t *ind /* o : indice */ +) +{ + int16_t table_idx = 0, ind1[IVAS_SPAR_BR_TABLE_LEN]; + int16_t i, j = 0, ind2 = -1; + + for ( i = 0; i < IVAS_SPAR_BR_TABLE_LEN; i++ ) + { + ind1[j] = 0; + if ( ( ivas_spar_br_table_consts[i].ivas_total_brate == ivas_total_brate ) && + ( ivas_spar_br_table_consts[i].sba_order == sba_order ) ) + { + ind1[j++] = i; + } + } + + for ( i = 0; i < j; i++ ) + { + if ( ivas_spar_br_table_consts[ind1[i]].bwidth == bwidth ) + { + ind2 = i; + break; + } + } + assert( j > 0 ); /* to check if bitrate entry is present */ + assert( ind2 >= 0 ); /* to check if bw entry is present */ + + table_idx = ind1[ind2]; + + if ( ind != NULL ) + { + *ind = ind2; + } + + if ( bitlen != NULL ) + { + *bitlen = ivas_get_bits_to_encode( j - 1 ); + } + + return table_idx; +} + + +/*-------------------------------------------------------------------* + * ivas_get_spar_num_TCs() + * + * Return number of TCs in SPAR + *-------------------------------------------------------------------*/ + +/*! r: number of transport channels */ +int16_t ivas_get_spar_num_TCs( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order /* i : Ambisonic (SBA) order */ +) +{ + int16_t table_idx, nchan_transport; + + if ( ivas_total_brate == IVAS_SID_5k ) + { + nchan_transport = 1; + } + else + { + table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + + nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; + } + + return nchan_transport; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_pred_coeffs() + * + * Calculation of prediction coefficients + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_pred_coeffs( + float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float ppPred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + float ppDM_Fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + const int16_t in_chans, + const int16_t start_band, + const int16_t end_band, + const int16_t active_w, + const int16_t dtx_vad, + const int16_t from_dirac ) +{ + int16_t i, j, k, b; + float abs_value; + float w_norm_fac; + float div_factor[IVAS_MAX_NUM_BANDS]; + int16_t pred_dim = in_chans - 1; + + w_norm_fac = ( from_dirac == 1 ) ? 1.0f : 3.0f; + + if ( active_w == 0 ) + { + float pPred_temp[IVAS_MAX_NUM_BANDS]; + + set_zero( pPred_temp, IVAS_MAX_NUM_BANDS ); + for ( k = start_band; k < end_band; k++ ) + { + div_factor[k] = max( 1e-20f, pppCov_mat_re[0][0][k] ); + div_factor[k] = 1 / div_factor[k]; + } + + for ( i = 0; i < pred_dim; i++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + ppPred_coeffs_re[i][k] = pppCov_mat_re[i + 1][0][k] * div_factor[k]; + + IVAS_CALCULATE_SQ_ABS_N( ppPred_coeffs_re[i][k], abs_value ); + + pPred_temp[k] += abs_value; + } + } + + for ( k = start_band; k < end_band; k++ ) + { + pPred_temp[k] = sqrtf( pPred_temp[k] ); + div_factor[k] = max( 1.0f, pPred_temp[k] ); + div_factor[k] = 1 / div_factor[k]; + } + + for ( i = 0; i < pred_dim; i++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + ppPred_coeffs_re[i][k] = ppPred_coeffs_re[i][k] * div_factor[k]; + ppDM_Fv_re[i][k] = 0; + } + } + } + else + { + float dm_alpha[IVAS_MAX_NUM_BANDS], dm_v_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; + float real[IVAS_SPAR_MAX_CH - 1], dm_beta_re = 0, dm_g[IVAS_MAX_NUM_BANDS]; + float dm_f_local, dm_w, dm_y, DM_F[IVAS_MAX_NUM_BANDS]; + float num_f, den_f, passive_g; + float g_th_sq = IVAS_LIN_ACTIVEW_QUAD_ACTIVEW_THRESH * IVAS_LIN_ACTIVEW_QUAD_ACTIVEW_THRESH; + + set_zero( dm_alpha, IVAS_MAX_NUM_BANDS ); + + for ( i = 1; i < in_chans; i++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + IVAS_CALCULATE_SQ_ABS_N( pppCov_mat_re[i][0][k], abs_value ); + dm_alpha[k] += abs_value; + } + } + + for ( k = start_band; k < end_band; k++ ) + { + dm_alpha[k] = sqrtf( dm_alpha[k] ); + div_factor[k] = max( dm_alpha[k], 1e-20f ); + div_factor[k] = 1 / div_factor[k]; + } + + for ( i = 0; i < pred_dim; i++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + dm_v_re[i][k] = pppCov_mat_re[i + 1][0][k] * div_factor[k]; + } + } + + if ( dtx_vad == 0 ) + { + dm_f_local = IVAS_ACTIVEW_DM_F_DTX; + } + else + { + dm_f_local = IVAS_ACTIVEW_DM_F; + } + + for ( b = start_band; b < end_band; b++ ) + { + set_zero( real, pred_dim ); + + for ( j = 0; j < pred_dim; j++ ) + { + for ( k = 1; k < in_chans; k++ ) + { + float re; + + IVAS_RMULT_FLOAT( pppCov_mat_re[j + 1][k][b], dm_v_re[k - 1][b], re ); + real[j] += re; + } + } + dm_beta_re = 0; + for ( k = 0; k < pred_dim; k++ ) + { + float re; + IVAS_RMULT_FLOAT( real[k], dm_v_re[k][b], re ); + dm_beta_re += re; + } + + dm_w = pppCov_mat_re[0][0][b]; + den_f = max( dm_w, 1e-20f ); + passive_g = dm_alpha[b] / den_f; + + if ( passive_g < IVAS_LIN_ACTIVEW_QUAD_ACTIVEW_THRESH ) + { + /*linear activeW*/ + dm_y = 0; + + for ( k = 1; k < in_chans; k++ ) + { + dm_y += pppCov_mat_re[k][k][b]; + } + den_f = max( dm_y, 1e-20f ); + den_f = max( den_f, w_norm_fac * dm_w ); + DM_F[b] = ( dm_f_local * dm_alpha[b] ) / den_f; + DM_F[b] = min( 1.0f, DM_F[b] ); + + den_f = dm_w + ( 2 * dm_alpha[b] * DM_F[b] ) + ( DM_F[b] * DM_F[b] * dm_beta_re ); + den_f = max( den_f, 1e-20f ); + + dm_g[b] = ( dm_alpha[b] + ( DM_F[b] * dm_beta_re ) ) / den_f; + } + else + { + float sqrt_val; + + /* quadratic activeW */ + num_f = ( dm_beta_re - ( 2 * dm_alpha[b] * IVAS_LIN_ACTIVEW_QUAD_ACTIVEW_THRESH ) ); + sqrt_val = 4 * dm_alpha[b] * dm_alpha[b] * g_th_sq; + sqrt_val += dm_beta_re * dm_beta_re; + sqrt_val -= 4 * dm_beta_re * g_th_sq * dm_w; + sqrt_val = sqrtf( sqrt_val ); + num_f += sqrt_val; + + den_f = 2 * dm_beta_re * g_th_sq; + den_f = max( den_f, 1e-20f ); + dm_g[b] = IVAS_LIN_ACTIVEW_QUAD_ACTIVEW_THRESH; + DM_F[b] = ( dm_g[b] * num_f ) / den_f; + } + } + + for ( i = 0; i < pred_dim; i++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + ppPred_coeffs_re[i][b] = dm_v_re[i][b] * dm_g[b]; + + ppDM_Fv_re[i][b] = dm_v_re[i][b] * DM_F[b]; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_Wscaling_factor() + * + * Calculation of scaling factor for post predicted W channel + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_Wscaling_factor( + float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + float ***mixer_mat, + const int16_t start_band, + const int16_t end_band, + const int16_t dtx_vad, + const int16_t num_ch, + const int16_t *pNum_dmx, + const int16_t bands_bw, + const int16_t active_w, + float *pWscale ) +{ + int16_t b, ch; + float dm_f_local, abs_val; + float postpred_cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + + if ( dtx_vad == 0 ) + { + dm_f_local = IVAS_ACTIVEW_DM_F_SCALE_DTX; + } + else + { + dm_f_local = IVAS_ACTIVEW_DM_F_SCALE; + } + + for ( b = start_band; b < end_band; b++ ) + { + pWscale[b] = 1; + + if ( ( active_w == 1 ) && ( pNum_dmx[b * bands_bw] == 1 ) ) + { + float Gw_sq, g_sq = 0; + + ivas_calc_post_pred_per_band( pppCov_mat_re, mixer_mat, num_ch, pNum_dmx[b * bands_bw], b, postpred_cov_re ); + + Gw_sq = pppCov_mat_re[0][0][b] / max( postpred_cov_re[0][0], IVAS_FLT_EPS ); + + for ( ch = 0; ch < num_ch - 1; ch++ ) + { + IVAS_CALCULATE_SQ_ABS_N( pred_coeffs_re[ch][b], abs_val ); + + g_sq += abs_val; + } + + pWscale[b] = sqrtf( Gw_sq ); + pWscale[b] = pWscale[b] + sqrtf( Gw_sq + ( 4 * dm_f_local * g_sq ) ); + pWscale[b] *= 0.5f; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_create_fullr_dmx_mat() + * + * Calculation of downmix matrix + *-----------------------------------------------------------------------------------------*/ + +void ivas_create_fullr_dmx_mat( + float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + float dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + float ***mixer_mat, + const int16_t in_chans, + const int16_t start_band, + const int16_t end_band, + const int16_t active_w, + ivas_spar_foa_md_com_cfg *hMdCfg ) +{ + int16_t i, j, k, b; + const int16_t *order; + float tmp_p1_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; + float tmp_p2_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; + float down_mix_mat1_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; + int16_t remix_unmix_order; + int16_t nbands; + nbands = end_band - start_band; + remix_unmix_order = hMdCfg->remix_unmix_order; + + order = remix_order_set[remix_unmix_order]; + + for ( i = 0; i < in_chans; i++ ) + { + for ( j = 0; j < in_chans; j++ ) + { + set_zero( &tmp_p1_re[i][j][start_band], nbands ); + set_zero( &tmp_p2_re[i][j][start_band], nbands ); + set_zero( &down_mix_mat1_re[i][j][start_band], nbands ); + } + } + + for ( j = 0; j < in_chans; j++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + tmp_p2_re[j][j][b] = 1.0f; + } + } + + for ( j = 1; j < in_chans; j++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + tmp_p2_re[j][0][b] = -pred_coeffs_re[j - 1][b]; + } + } + + if ( active_w == 1 ) + { + for ( j = 0; j < in_chans; j++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + tmp_p1_re[j][j][b] = 1.0f; + } + } + + for ( j = 1; j < in_chans; j++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + tmp_p1_re[0][j][b] = dm_fv_re[j - 1][b]; + } + } + + /* 4x4 mult */ + for ( i = 0; i < in_chans; i++ ) + { + for ( j = 0; j < in_chans; j++ ) + { + for ( k = 0; k < in_chans; k++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + float tmp_re; + IVAS_RMULT_FLOAT( tmp_p2_re[i][k][b], tmp_p1_re[k][j][b], tmp_re ); + down_mix_mat1_re[i][j][b] += tmp_re; + } + } + } + } + } + else + { + for ( j = 0; j < in_chans; j++ ) + { + for ( k = 0; k < in_chans; k++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + down_mix_mat1_re[j][k][b] = tmp_p2_re[j][k][b]; + } + } + } + } + + if ( remix_unmix_order != 3 ) + { + ivas_reorder_array( down_mix_mat1_re, in_chans, order, mixer_mat, start_band, end_band ); + } + else + { + /* Custom 4x4 mult for WYiX case */ + for ( i = 0; i < in_chans; i++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + /* row 0 */ + mixer_mat[0][i][b] = down_mix_mat1_re[0][i][b]; + + /*row 1 */ + mixer_mat[1][i][b] = IVAS_REMIX_MULT_FAC * ( down_mix_mat1_re[1][i][b] ); + + /* row 3 */ + mixer_mat[2][i][b] = IVAS_REMIX_MULT_FAC * ( down_mix_mat1_re[1][i][b] ); + + /* row 4 */ + mixer_mat[3][i][b] = down_mix_mat1_re[2][i][b]; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reorder_array() + * + * reorders the input matrix based on order + *-----------------------------------------------------------------------------------------*/ + +static void ivas_reorder_array( + float in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS], + const int16_t in_chans, + const int16_t order[IVAS_SPAR_MAX_CH], + float ***mixer_mat, + const int16_t start_band, + const int16_t end_band ) +{ + int16_t i, j, b, idx; + + for ( i = 0; i < in_chans; i++ ) + { + idx = order[i]; + + for ( j = 0; j < in_chans; j++ ) + { + for ( b = start_band; b < end_band; b++ ) + { + mixer_mat[i][j][b] = in_re[idx][j][b]; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_calc_post_pred_per_band() + * + * Calculate post pred mat per band + *-----------------------------------------------------------------------------------------*/ + +static void ivas_calc_post_pred_per_band( + float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float ***mixer_mat, + const int16_t num_ch, + const int16_t num_dmx, + const int16_t band_idx, + float postpred_cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH] ) +{ + int16_t i, j, k; + float dmx_mat_conj[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + float temp_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + float tmp_re; + + // NOTE: What is this doing? + if ( num_dmx != num_ch ) + { + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + dmx_mat_conj[i][j] = mixer_mat[j][i][band_idx]; + } + } + } + + for ( i = 0; i < num_ch; i++ ) + { + set_zero( postpred_cov_re[i], num_ch ); + } + + /* num_ch x num_ch mult */ + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + temp_mat[i][j] = 0; + for ( k = 0; k < num_ch; k++ ) + { + IVAS_RMULT_FLOAT( pppCov_mat_re[i][k][band_idx], dmx_mat_conj[k][j], tmp_re ); + temp_mat[i][j] += tmp_re; + } + } + } + + /* num_ch x num_ch mult */ + for ( i = 0; i < num_ch; i++ ) + { + for ( j = i; j < num_ch; j++ ) + { + for ( k = 0; k < num_ch; k++ ) + { + + IVAS_RMULT_FLOAT( mixer_mat[i][k][band_idx], temp_mat[k][j], tmp_re ); + postpred_cov_re[i][j] += tmp_re; + } + } + } + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < i; j++ ) + { + postpred_cov_re[i][j] = postpred_cov_re[j][i]; + } + } +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n Postpred cov: (band %d)\n", band_idx); + for (i = 0; i < num_ch; i++) + { + for (j = 0; j < num_ch; j++) + { + fprintf(stderr, "%f, ", postpred_cov_re[i][j]); + } + fprintf(stderr, "\n"); + } + fprintf(stderr, "\n\n"); */ +#endif + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_calc_p_coeffs_per_band() + * + * Calculate P coeffs per band + *-----------------------------------------------------------------------------------------*/ + +static void ivas_calc_p_coeffs_per_band( + ivas_spar_md_t *pSparMd, + const int16_t i_ts, + float postpred_cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const int16_t num_ch, + const int16_t dtx_vad, + const int16_t num_dmx, + const int16_t band_idx ) +{ + int16_t i, j, k; + int16_t m; + float factor = 0; + float recon_uu_re[IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS][IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS]; + float trace = 0; + float p_norm_scaling = 0; + float cov_dd_re[IVAS_SPAR_MAX_CH - 1][IVAS_SPAR_MAX_CH - 1]; + float cov_uu_re[IVAS_SPAR_MAX_CH - 1][IVAS_SPAR_MAX_CH - 1]; + int16_t b_ts_idx; + + b_ts_idx = band_idx + i_ts * IVAS_MAX_NUM_BANDS; + + if ( num_dmx != num_ch ) + { + set_zero( pSparMd->band_coeffs[b_ts_idx].P_re, IVAS_SPAR_MAX_CH - 1 ); + for ( i = 0; i < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; i++ ) + { + set_zero( recon_uu_re[i], IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ); + } + + for ( i = num_dmx; i < num_ch; i++ ) + { + for ( j = num_dmx; j < num_ch; j++ ) + { + cov_uu_re[i - num_dmx][j - num_dmx] = postpred_cov_re[i][j]; + } + } + + if ( dtx_vad == 1 ) + { + for ( i = 1; i < num_dmx; i++ ) + { + for ( j = 1; j < num_dmx; j++ ) + { + cov_dd_re[i - 1][j - 1] = postpred_cov_re[i][j]; + } + } + + if ( num_dmx == 2 ) + { + float re1, re2; + + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[0][0], cov_dd_re[0][0], re1 ); + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[1][0], cov_dd_re[0][0], re2 ); + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[0][0], re1, recon_uu_re[0][0] ); + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[1][0], re1, recon_uu_re[0][1] ); + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[0][0], re2, recon_uu_re[1][0] ); + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[1][0], re2, recon_uu_re[1][1] ); + + for ( i = 0; i < 2; i++ ) + { + for ( j = 0; j < 2; j++ ) + { + cov_uu_re[i][j] -= recon_uu_re[i][j]; + } + } + } + else if ( num_dmx == 3 ) + { + float re1[2], re2; + set_f( re1, 0, 2 ); + + for ( j = 0; j < 2; j++ ) + { + for ( k = 0; k < 2; k++ ) + { + float re; + + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[0][k], cov_dd_re[k][j], re ); + re1[j] += re; + } + } + + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[0][0], re1[0], re2 ); + recon_uu_re[0][0] = re2; + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[0][1], re1[1], re2 ); + recon_uu_re[0][0] += re2; + + cov_uu_re[0][0] -= recon_uu_re[0][0]; + } + else if ( num_dmx == 4 ) + { + /* Step 1: Multiply C * cov_dd * C' */ + float re1[3], re; + + for ( i = 0; i < num_ch - num_dmx; i++ ) + { + set_f( re1, 0, 3 ); + for ( m = 0; m < num_dmx - 1; m++ ) + { + for ( k = 0; k < num_dmx - 1; k++ ) + { + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[i][k], cov_dd_re[k][m], re ); + re1[m] += re; + } + } + for ( j = 0; j < num_ch - num_dmx; j++ ) + { + for ( m = 0; m < num_dmx - 1; m++ ) + { + IVAS_RMULT_FLOAT( pSparMd->band_coeffs[b_ts_idx].C_re[j][m], re1[m], re ); + recon_uu_re[i][j] += re; + } + } + } + + /* Step 2: cov_uu - recon_uu */ + for ( i = 0; i < num_ch - num_dmx; i++ ) + { + for ( j = 0; j < num_ch - num_dmx; j++ ) + { + cov_uu_re[i][j] -= recon_uu_re[i][j]; + } + } + } + } + + p_norm_scaling = IVAS_P_NORM_SCALING; + + if ( ( dtx_vad == 0 ) && ( num_dmx == 1 ) ) + { + p_norm_scaling = IVAS_P_NORM_SCALING_DTX; + } + + trace = 0.0f; + + for ( i = num_dmx; i < num_ch; i++ ) + { + float tmp_out; + IVAS_CALCULATE_RABS( cov_uu_re[i - num_dmx][i - num_dmx], tmp_out ); + trace += tmp_out; + } + + factor = max( 1e-20f, postpred_cov_re[0][0] ); + factor = max( factor, ( p_norm_scaling * trace ) ); + factor = 1 / factor; + + /* normalise Hermitian (except for rounding) cov_uu */ + for ( i = num_dmx; i < num_ch; i++ ) + { + for ( j = num_dmx; j < num_ch; j++ ) + { + if ( i == j ) + { + /* force diagonal to be real */ + cov_uu_re[i - num_dmx][j - num_dmx] *= factor; + } + else + { + /* set off-diag elements to zero */ + cov_uu_re[i - num_dmx][j - num_dmx] = 0; + } + } + } + + /* take sqrt of max of diags and zero */ + for ( i = num_dmx; i < num_ch; i++ ) + { + cov_uu_re[i - num_dmx][i - num_dmx] = sqrtf( max( 0.0f, cov_uu_re[i - num_dmx][i - num_dmx] ) ); + /* cov_uu_im[i - num_dmx][i - num_dmx] = 0; */ + } + + /* save into MD struct */ + for ( i = num_dmx; i < num_ch; i++ ) + { + for ( j = num_dmx; j < num_ch; j++ ) + { + if ( i == j ) + { + pSparMd->band_coeffs[b_ts_idx].P_re[j - num_dmx] = cov_uu_re[i - num_dmx][j - num_dmx]; // can optimise here + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_calc_c_coeffs_per_band() + * + * Calculate C coeffs per band + *-----------------------------------------------------------------------------------------*/ + +static void ivas_calc_c_coeffs_per_band( + ivas_spar_md_t *pSparMd, + const int16_t i_ts, + float postpred_cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const int16_t num_ch, + const int16_t num_dmx, + const int16_t band_idx, + const int16_t dtx_vad ) +{ + int16_t i, j, k; + + /* worst case for cov_ud is actually 12 x 3 */ + float cov_ud_re[IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS][IVAS_SPAR_MAX_DMX_CHS - 1]; + float cov_dd_re[FOA_CHANNELS - 1][FOA_CHANNELS - 1]; + float cov_dd_re_inv[FOA_CHANNELS - 1][FOA_CHANNELS - 1]; + float trace_cov_dd_re = 0; + float abs_trace; + float re; + int16_t b_ts_idx; + + b_ts_idx = band_idx + i_ts * IVAS_MAX_NUM_BANDS; + + if ( dtx_vad == 0 ) + { + set_zero( &pSparMd->band_coeffs[b_ts_idx].C_re[0][0], ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); + return; + } + + for ( i = num_dmx; i < num_ch; i++ ) + { + for ( j = 1; j < num_dmx; j++ ) + { + cov_ud_re[i - num_dmx][j - 1] = postpred_cov_re[i][j]; + } + } + + for ( i = 1; i < num_dmx; i++ ) + { + for ( j = 1; j < num_dmx; j++ ) + { + cov_dd_re[i - 1][j - 1] = postpred_cov_re[i][j]; + } + } + + for ( i = 0; i < num_dmx - 1; i++ ) + { + trace_cov_dd_re += cov_dd_re[i][i]; + } + trace_cov_dd_re *= 0.005f; + + IVAS_CALCULATE_RABS( trace_cov_dd_re, abs_trace ); + + if ( abs_trace < IVAS_FLT_EPS ) + { + /* protection from cases when variance of residual channels is very small */ + set_zero( &pSparMd->band_coeffs[b_ts_idx].C_re[0][0], ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); + } + else + { + for ( i = 0; i < num_dmx - 1; i++ ) + { + cov_dd_re[i][i] += trace_cov_dd_re; + } + if ( ivas_is_mat_inv( cov_dd_re, num_dmx - 1 ) && ( num_dmx < FOA_CHANNELS ) ) + { + set_zero( &pSparMd->band_coeffs[b_ts_idx].C_re[0][0], ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); + } + else + { + ivas_calc_mat_inv( cov_dd_re, num_dmx - 1, cov_dd_re_inv ); + for ( i = 0; i < num_ch - num_dmx; i++ ) + { + for ( j = 0; j < num_dmx - 1; j++ ) + { + pSparMd->band_coeffs[b_ts_idx].C_re[i][j] = 0; + for ( k = 0; k < num_dmx - 1; k++ ) + { + IVAS_RMULT_FLOAT( cov_ud_re[i][k], cov_dd_re_inv[k][j], re ); + pSparMd->band_coeffs[b_ts_idx].C_re[i][j] += re; + } + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_calc_c_p_coeffs() + * + * Calculation of C and P coeffs + *-----------------------------------------------------------------------------------------*/ + +void ivas_calc_c_p_coeffs( + ivas_spar_md_t *pSparMd, + float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const int16_t i_ts, + float ***mixer_mat, + const int16_t num_ch, + const int16_t num_dmx, + const int16_t band_idx, + const int16_t dtx_vad, + const int16_t compute_p_flag, + const int16_t planarCP ) +{ + int16_t i, j; + float postpred_cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + + if ( num_dmx != num_ch ) + { + ivas_calc_post_pred_per_band( pppCov_mat_re, mixer_mat, num_ch, num_dmx, band_idx, postpred_cov_re ); + if ( num_dmx != 1 ) + { + ivas_calc_c_coeffs_per_band( pSparMd, i_ts, postpred_cov_re, num_ch, num_dmx, band_idx, dtx_vad ); + } + + if ( planarCP ) + { + for ( i = 0; i < num_ch - num_dmx; i++ ) + { + if ( !keep_planar[i] ) + { + for ( j = 0; j < num_dmx - 1; j++ ) + { + pSparMd->band_coeffs[band_idx + i_ts * IVAS_MAX_NUM_BANDS].C_re[i][j] = 0.0f; + } + } + } + } + + if ( compute_p_flag == 1 ) + { + ivas_calc_p_coeffs_per_band( pSparMd, i_ts, postpred_cov_re, num_ch, dtx_vad, num_dmx, band_idx ); + } + + if ( planarCP ) + { + for ( i = num_dmx; i < num_ch; i++ ) + { + if ( !keep_planar[i - num_dmx] ) + { + pSparMd->band_coeffs[band_idx + i_ts * IVAS_MAX_NUM_BANDS].P_re[i - num_dmx] = 0; + } + } + } + } + + return; +} + + +static void ivas_calc_mat_det( + double in_re[MAX_MAT_DIM][MAX_MAT_DIM], + const int16_t dim, + double *det_re ) +{ + if ( dim == IVAS_MAT_DIM_3 ) + { + double re1, re2, re; + IVAS_RMULT_DOUBLE( in_re[1][1], in_re[2][2], re1 ); + IVAS_RMULT_DOUBLE( in_re[1][2], in_re[2][1], re2 ); + re = re1 - re2; + + IVAS_RMULT_DOUBLE( in_re[0][0], re, re1 ); + + *det_re = re1; + + IVAS_RMULT_DOUBLE( in_re[1][0], in_re[2][2], re1 ); + IVAS_RMULT_DOUBLE( in_re[1][2], in_re[2][0], re2 ); + re = re1 - re2; + + IVAS_RMULT_DOUBLE( in_re[0][1], re, re1 ); + + *det_re -= re1; + + IVAS_RMULT_DOUBLE( in_re[1][0], in_re[2][1], re1 ); + IVAS_RMULT_DOUBLE( in_re[1][1], in_re[2][0], re2 ); + re = re1 - re2; + + IVAS_RMULT_DOUBLE( in_re[0][2], re, re1 ); + + *det_re += re1; + } + else if ( dim == IVAS_MAT_DIM_2 ) + { + double re1, re2; + IVAS_RMULT_DOUBLE( in_re[0][0], in_re[1][1], re1 ); + IVAS_RMULT_DOUBLE( in_re[0][1], in_re[1][0], re2 ); + *det_re = re1 - re2; + } + else if ( dim == IVAS_MAT_DIM_1 ) + { + *det_re = in_re[0][0]; + } + else + { + assert( !"matrix dimention not supported!" ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_mat_cofactor() + * + * Calculate cofactor for invert matrix + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_mat_cofactor( + double in_re[MAX_MAT_DIM][MAX_MAT_DIM], + double out_re[MAX_MAT_DIM][MAX_MAT_DIM], + const int16_t row, + const int16_t col ) +{ + int16_t i, j; + int16_t r = 0, c = 0; + + for ( i = 0; i < MAX_MAT_DIM; i++ ) + { + for ( j = 0; j < MAX_MAT_DIM; j++ ) + { + if ( i != row && j != col ) + { + + out_re[r][c++] = in_re[i][j]; + } + } + if ( c == 2 ) + { + r++; + c = 0; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_calc_mat_inv() + * + * Calculate Invert of a matrix + *-----------------------------------------------------------------------------------------*/ +static void ivas_calc_mat_inv( + float in_re[MAX_MAT_DIM][MAX_MAT_DIM], + const int16_t dim, + float out_re[MAX_MAT_DIM][MAX_MAT_DIM] ) +{ + double det; + int16_t i, j; + double dbl_in_re[MAX_MAT_DIM][MAX_MAT_DIM]; + double dbl_out_re[MAX_MAT_DIM][MAX_MAT_DIM]; + + for ( i = 0; i < dim; i++ ) + { + for ( j = 0; j < dim; j++ ) + { + dbl_in_re[i][j] = in_re[i][j]; + } + } + + if ( dim == IVAS_MAT_DIM_1 ) + { + det = ( dbl_in_re[0][0] * dbl_in_re[0][0] ); + /* assert to catch cases when input is singular matrix*/ + assert( det > 0 ); + det = 1 / det; + dbl_out_re[0][0] = dbl_in_re[0][0] * det; + } + else if ( dim == IVAS_MAT_DIM_2 ) + { + double det_re; + double re; + ivas_calc_mat_det( dbl_in_re, dim, &det_re ); + det = ( det_re * det_re ); + /* assert to catch cases when input is singular matrix*/ + assert( det > 0 ); + det = 1 / det; + + IVAS_RMULT_DOUBLE( det_re, dbl_in_re[1][1], re ); + dbl_out_re[0][0] = re * det; + + IVAS_RMULT_DOUBLE( det_re, dbl_in_re[0][1], re ); + dbl_out_re[0][1] = -re * det; + + IVAS_RMULT_DOUBLE( det_re, dbl_in_re[1][0], re ); + dbl_out_re[1][0] = -re * det; + + IVAS_RMULT_DOUBLE( det_re, dbl_in_re[0][0], re ); + dbl_out_re[1][1] = re * det; + } + else if ( dim == IVAS_MAT_DIM_3 ) + { + double fac_re[IVAS_MAT_DIM_3][IVAS_MAT_DIM_3]; + double det_re; + int16_t sign = 1; + + ivas_calc_mat_det( dbl_in_re, dim, &det_re ); + det = det_re > 0 ? 1 / max( IVAS_DBL_EPS, det_re ) : min( det_re, -IVAS_DBL_EPS ); + for ( i = 0; i < dim; i++ ) + { + for ( j = 0; j < dim; j++ ) + { + ivas_get_mat_cofactor( dbl_in_re, fac_re, i, j ); + ivas_calc_mat_det( fac_re, IVAS_MAT_DIM_2, &dbl_out_re[j][i] ); + dbl_out_re[j][i] = dbl_out_re[j][i] * det * sign; + + if ( ( ( i + j ) & 1 ) == 0 ) + { + sign = -1; + } + else + { + sign = 1; + } + } + } + } + else + { + assert( !"matrix dimension not supported!" ); + } + + for ( i = 0; i < dim; i++ ) + { + for ( j = 0; j < dim; j++ ) + { + out_re[i][j] = (float) dbl_out_re[i][j]; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_is_mat_inv() + * + * Check if matrix is invertible or not by checking if determinant is 0 or very close to 0 + *-----------------------------------------------------------------------------------------*/ +static int16_t ivas_is_mat_inv( + float in_re[MAX_MAT_DIM][MAX_MAT_DIM], + const int16_t dim ) +{ + int16_t is_det_zero = 0; + double det, det_re; + int16_t i, j; + double dbl_in_re[MAX_MAT_DIM][MAX_MAT_DIM]; + + for ( i = 0; i < dim; i++ ) + { + for ( j = 0; j < dim; j++ ) + { + dbl_in_re[i][j] = in_re[i][j]; + } + } + + ivas_calc_mat_det( dbl_in_re, dim, &det_re ); + + det = ( det_re * det_re ); + + if ( det < IVAS_DBL_EPS ) + { + is_det_zero = 1; + } + + return is_det_zero; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_compute_spar_params() + * + * + *-----------------------------------------------------------------------------------------*/ + +void ivas_compute_spar_params( + float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], + const int16_t i_ts, + float ***mixer_mat, + const int16_t start_band, + const int16_t end_band, + const int16_t dtx_vad, + const int16_t num_ch, + const int16_t bands_bw, + const int16_t active_w, + ivas_spar_foa_md_com_cfg *hSparCfg, + ivas_spar_md_t *hSparMd, + float *pWscale, + const int16_t from_dirac ) +{ + float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; + int16_t b, i, ndm; + ivas_get_pred_coeffs( pppCov_mat_re, pred_coeffs_re, dm_fv_re, num_ch, + start_band, end_band, active_w, dtx_vad, + from_dirac ); +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n Prediction Coefficients:\n"); + + for (i = 0; i < num_ch - 1; i++) + { + for (j = start_band; j < end_band; j++) + { + fprintf(stderr, "%f, ", pred_coeffs_re[i][j]); + } + fprintf(stderr, "\n"); + } + fprintf(stderr, "\n\n"); */ +#endif + ivas_create_fullr_dmx_mat( pred_coeffs_re, dm_fv_re, mixer_mat, num_ch, start_band, end_band, active_w, hSparCfg ); + +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n 1st DMX matrix (band 0):\n"); + + for (i = 0; i < num_ch; i++) + { + for (j = 0; j < num_ch; j++) + { + fprintf(stderr, "%f, ", mixer_mat[i][j][0]); + } + fprintf(stderr, "\n"); + } + fprintf(stderr, "\n\n");*/ +#endif + + ivas_get_Wscaling_factor( pppCov_mat_re, pred_coeffs_re, mixer_mat, start_band, end_band, dtx_vad, num_ch, + hSparCfg->num_dmx_chans_per_band, bands_bw, active_w, pWscale ); + + for ( b = start_band; b < end_band; b++ ) + { + float onebyscale = 1.0f / pWscale[b]; + for ( i = 0; i < num_ch - 1; i++ ) + { + hSparMd->band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[i] = pred_coeffs_re[i][b] * onebyscale; + } + + for ( i = 0; i < num_ch; i++ ) + { + mixer_mat[0][i][b] *= pWscale[b]; + } + } + + for ( b = start_band; b < end_band; b++ ) + { + ndm = hSparCfg->num_dmx_chans_per_band[b * bands_bw]; + + if ( ndm != num_ch ) + { + ivas_calc_c_p_coeffs( hSparMd, pppCov_mat_re, i_ts, mixer_mat, num_ch, ndm, b, dtx_vad, 1, 0 ); + +#ifdef SPAR_HOA_DBG + /* if (b == 0) */ + { + fprintf( stdout, "\n\nUnquantised C, P coeffs -- band %d:\n", b ); + + for ( ii = 0; ii < num_ch; ii++ ) + { + fprintf( stdout, "%f |", hSparMd->band_coeffs[b].pred_re[ii] ); + + if ( ii < num_ch - ndm ) + { + for ( jj = 0; jj < ndm - 1; jj++ ) + fprintf( stdout, "%f,\t", hSparMd->band_coeffs[b].C_re[ii][jj] ); + fprintf( stdout, "| %f", hSparMd->band_coeffs[b].P_re[ii][ii] ); + } + fprintf( stdout, "\n" ); + } + } +#endif + } + } + + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_spar_md_from_dirac() + * + * + *-----------------------------------------------------------------------------------------*/ + +void ivas_get_spar_md_from_dirac( + float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float diffuseness[IVAS_MAX_NUM_BANDS], + const int16_t n_ts, + float ***mixer_mat, + ivas_spar_md_t *hSpar_md, + ivas_spar_foa_md_com_cfg *hSpar_md_cfg, + const int16_t start_band, + const int16_t end_band, + const int16_t order, + const int16_t dtx_vad, + float Wscale_d[IVAS_MAX_NUM_BANDS] ) +{ + int16_t num_ch, band, i, j; + int16_t block, ch; + float response_avg[MAX_OUTPUT_CHANNELS]; + float response[MAX_PARAM_SPATIAL_SUBFRAMES][MAX_OUTPUT_CHANNELS]; + float cov_real_dirac[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; + float *pCov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + float dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; + float Wscale[IVAS_MAX_NUM_BANDS]; + float mixer_mat_local[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH][IVAS_MAX_NUM_BANDS]; + float **ppMixer_mat[IVAS_MAX_FB_MIXER_OUT_CH]; + float *pMixer_mat[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH]; + float en_ratio_fac, diff_norm_order1, diff_norm_order2, diff_norm_order3; + int16_t ndm, foa_ch, hoa2_ch; + float P_dir_fact[IVAS_SPAR_MAX_CH - 1]; + const int16_t *remix_order; + + remix_order = remix_order_set[hSpar_md_cfg->remix_unmix_order]; + + num_ch = 2 * order + 2; + hoa2_ch = 6; + foa_ch = FOA_CHANNELS; + diff_norm_order1 = 3.0f; + diff_norm_order2 = 5.0f; + diff_norm_order3 = 7.0f; + + for ( i = 0; i < IVAS_MAX_FB_MIXER_OUT_CH; i++ ) + { + for ( j = 0; j < IVAS_MAX_SPAR_FB_MIXER_IN_CH; j++ ) + { + pMixer_mat[i][j] = mixer_mat_local[i][j]; + } + ppMixer_mat[i] = pMixer_mat[i]; + } + + if ( start_band >= 6 && hSpar_md_cfg->nchan_transport <= 2 && ( dtx_vad == 1 ) ) + { + float P_norm[3]; + int16_t idx; + ndm = hSpar_md_cfg->num_dmx_chans_per_band[start_band - 1]; + P_norm[0] = 0.0f; + for ( i = 0; i < max( 0, foa_ch - ndm ); i++ ) + { + P_norm[0] += hSpar_md->band_coeffs[start_band - 1].P_re[i] * hSpar_md->band_coeffs[start_band - 1].P_re[i]; + } + P_norm[0] *= diff_norm_order1 / min( diff_norm_order1, max( 0, foa_ch - ndm ) ); + + P_norm[1] = 0.0f; + for ( ; i < max( 0, min( num_ch, hoa2_ch ) - ndm ); i++ ) + { + P_norm[1] += hSpar_md->band_coeffs[start_band - 1].P_re[i] * hSpar_md->band_coeffs[start_band - 1].P_re[i]; + } + P_norm[1] *= diff_norm_order2 / min( diff_norm_order2, max( 0, min( num_ch, hoa2_ch ) - ndm ) ); + + P_norm[2] = 0.0f; + for ( ; i < num_ch - ndm; i++ ) + { + P_norm[2] += hSpar_md->band_coeffs[start_band - 1].P_re[i] * hSpar_md->band_coeffs[start_band - 1].P_re[i]; + } + P_norm[2] *= diff_norm_order3 / min( diff_norm_order3, max( 0, num_ch - ndm ) ); + + for ( i = 0; i < max( 0, foa_ch - ndm ); i++ ) + { + idx = remix_order[i + ndm] - ndm; + P_dir_fact[idx] = hSpar_md->band_coeffs[start_band - 1].P_re[i] * hSpar_md->band_coeffs[start_band - 1].P_re[i]; + P_dir_fact[idx] = P_dir_fact[idx] / max( IVAS_FLT_EPS, P_norm[0] ); + } + for ( ; i < max( 0, min( num_ch, hoa2_ch ) - ndm ); i++ ) + { + idx = remix_order[i + ndm] - ndm; + P_dir_fact[idx] = hSpar_md->band_coeffs[start_band - 1].P_re[i] * hSpar_md->band_coeffs[start_band - 1].P_re[i]; + P_dir_fact[idx] = P_dir_fact[idx] / max( IVAS_FLT_EPS, P_norm[1] ); + } + for ( ; i < num_ch - ndm; i++ ) + { + idx = remix_order[i + ndm] - ndm; + P_dir_fact[idx] = hSpar_md->band_coeffs[start_band - 1].P_re[i] * hSpar_md->band_coeffs[start_band - 1].P_re[i]; + P_dir_fact[idx] = P_dir_fact[idx] / max( IVAS_FLT_EPS, P_norm[2] ); + } + } + + for ( int16_t i_ts = 0; i_ts < n_ts; i_ts++ ) + { + for ( band = start_band; band < end_band; band++ ) + { + ndm = hSpar_md_cfg->num_dmx_chans_per_band[band - 1]; + + /*SPAR from DirAC*/ + set_f( response_avg, 0.0f, MAX_OUTPUT_CHANNELS ); + set_f( hSpar_md->band_coeffs[band + i_ts * IVAS_MAX_NUM_BANDS].pred_re, 0.0f, IVAS_SPAR_MAX_CH - 1 ); + set_f( &hSpar_md->band_coeffs[band + i_ts * IVAS_MAX_NUM_BANDS].C_re[0][0], 0.0f, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); + set_f( &hSpar_md->band_coeffs[band + i_ts * IVAS_MAX_NUM_BANDS].P_re[0], 0.0f, ( IVAS_SPAR_MAX_CH - 1 ) ); + + if ( n_ts > 1 ) + { + ivas_dirac_dec_get_response( (int16_t) azi_dirac[band][i_ts], (int16_t) ele_dirac[band][i_ts], response_avg, order ); + } + else + { + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) + { + ivas_dirac_dec_get_response( (int16_t) azi_dirac[band][block], (int16_t) ele_dirac[band][block], &( response[block][0] ), order ); + } + + /* average responses in all subframes*/ + { + float norm; + int16_t num_ch_order = ( order + 1 ) * ( order + 1 ); + int16_t hoa2_ch_order = 9; + + for ( ch = 0; ch < num_ch_order; ch++ ) + { + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) + { + response_avg[ch] += response[block][ch]; + } + response_avg[ch] /= MAX_PARAM_SPATIAL_SUBFRAMES; + } + + /*normalize 1st order*/ + norm = 0.0f; + for ( ch = 1; ch < foa_ch; ch++ ) + { + norm += response_avg[ch] * response_avg[ch]; + } + norm = max( EPSILON, sqrtf( norm ) ); + for ( ch = 1; ch < foa_ch; ch++ ) + { + response_avg[ch] /= norm; + } + + /*normalize 2nd order*/ + norm = 0.0f; + for ( ch = foa_ch; ch < min( hoa2_ch_order, num_ch_order ); ch++ ) + { + norm += response_avg[ch] * response_avg[ch]; + } + norm = max( EPSILON, sqrtf( norm ) ); + for ( ch = foa_ch; ch < min( hoa2_ch_order, num_ch_order ); ch++ ) + { + response_avg[ch] /= norm; + } + + /*normalize 3rd order*/ + norm = 0.0f; + for ( ch = hoa2_ch_order; ch < num_ch_order; ch++ ) + { + norm += response_avg[ch] * response_avg[ch]; + } + norm = max( EPSILON, sqrtf( norm ) ); + for ( ch = hoa2_ch_order; ch < num_ch_order; ch++ ) + { + response_avg[ch] /= norm; + } + } + } + + for ( i = FOA_CHANNELS + 1; i < num_ch; i++ ) + { + response_avg[i] = response_avg[HOA_keep_ind[i]]; + } + en_ratio_fac = ( 1.0f - diffuseness[band] ); + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + if ( i == j ) + { + if ( i == 0 ) + { + cov_real_dirac[i][i][band] = 1.0f; + } + else + { + cov_real_dirac[i][j][band] = en_ratio_fac * response_avg[i] * response_avg[j]; + if ( hSpar_md_cfg->nchan_transport <= 2 ) + { + cov_real_dirac[i][j][band] *= en_ratio_fac; + if ( ( i >= ndm ) && ( dtx_vad == 1 ) ) + { + cov_real_dirac[i][j][band] += ( 1.0f - ( en_ratio_fac * en_ratio_fac ) ) * P_dir_fact[i - ndm]; + } + else + { + if ( i < foa_ch ) + { + cov_real_dirac[i][j][band] += ( 1.0f - ( en_ratio_fac * en_ratio_fac ) ) / diff_norm_order1; + } + else if ( i < hoa2_ch ) + { + cov_real_dirac[i][j][band] += ( 1.0f - ( en_ratio_fac * en_ratio_fac ) ) / diff_norm_order2; + } + else + { + cov_real_dirac[i][j][band] += ( 1.0f - ( en_ratio_fac * en_ratio_fac ) ) / diff_norm_order3; + } + } + } + else + { + if ( i < foa_ch ) + { + cov_real_dirac[i][j][band] += ( 1.0f - en_ratio_fac ) / diff_norm_order1; + } + else if ( i < hoa2_ch ) + { + cov_real_dirac[i][j][band] += ( 1.0f - en_ratio_fac ) / diff_norm_order2; + } + else + { + cov_real_dirac[i][j][band] += ( 1.0f - en_ratio_fac ) / diff_norm_order3; + } + } + } + } + else + { + cov_real_dirac[i][j][band] = en_ratio_fac * response_avg[i] * response_avg[j]; + } + } + } + } + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + pCov_real[i][j] = cov_real_dirac[i][j]; + } + } + +#ifdef DEBUG_SPAR_WRITE_OUT_COV + { + static FILE *fid = 0; + int16_t k = 0; + float tmp_buf[10]; + if ( !fid ) + { + fid = fopen( "cov_real_dirac.txt", "wt" ); + } + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + fprintf( fid, "%.6f\n", cov_real_dirac[i][j][k] ); + } + } + } + fprintf( fid, "\n" ); + } +#endif + + ivas_compute_spar_params( pCov_real, dm_fv_re, i_ts, ppMixer_mat, start_band, end_band, dtx_vad, + num_ch, 1, hSpar_md_cfg->active_w, hSpar_md_cfg, hSpar_md, Wscale, 1 ); + + if ( mixer_mat != NULL ) + { + for ( band = start_band; band < end_band; band++ ) + { + ndm = hSpar_md_cfg->num_dmx_chans_per_band[band]; + + for ( i = 0; i < ndm; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + mixer_mat[i][j][band + i_ts * IVAS_MAX_NUM_BANDS] = ppMixer_mat[i][j][band]; + } + } + + for ( i = ndm; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + mixer_mat[i][j][band + i_ts * IVAS_MAX_NUM_BANDS] = 0.0f; + } + } + + if ( ( ndm == 1 ) && ( Wscale_d != NULL ) ) + { + for ( j = 0; j < num_ch; j++ ) + { + mixer_mat[0][j][band + i_ts * IVAS_MAX_NUM_BANDS] *= Wscale_d[band]; + } + } + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_get_response() + * + * calculate reponse, 1 degree resolution + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_get_response( + const int16_t azimuth, + const int16_t elevation, + float *response, + const int16_t ambisonics_order ) +{ + int16_t index_azimuth, index_elevation; + int16_t el, e, az; + float cos_1, cos_2, sin_1, cos_az[3]; + float sin_az[3]; + float f, c; + int16_t l, m; + int16_t b, b1, b_2, b1_2, a; + + index_azimuth = ( azimuth + 180 ) % 360; + index_elevation = elevation + 90; + e = index_elevation > 90 ? -1 : 1; + el = index_elevation > 90 ? 180 - index_elevation : index_elevation; + + az = index_azimuth > 180 ? 360 - index_azimuth : index_azimuth; + f = index_azimuth > 180 ? -1.0f : 1.0f; + + cos_1 = dirac_gains_trg_term[az][0]; + cos_2 = cos_1 * cos_1; + sin_1 = f * dirac_gains_trg_term[az][1]; + cos_az[0] = cos_1; + cos_az[1] = 2.0f * cos_2 - 1.0f; + cos_az[2] = 2.0f * cos_1 * cos_az[1] - cos_az[0]; + sin_az[0] = sin_1; + sin_az[1] = sin_1 * 2.0f * cos_1; + sin_az[2] = sin_1 * ( 4.0f * cos_2 - 1.0f ); + + response[0] = 1.0f; + /* Un-optimized code - for reference */ + /* for( l = 1; l<= ambisonics_order; l++ ) */ + /* { */ + /* int16_t b, b1, a; */ + /* float c; */ + /* for( m = 0; m < l; m++ ) */ + /* { */ + /* b = l*l+m; */ + /* a = dirac_gains_P_idx[b]; */ + /* c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; */ + + /* if( m%2 == 1 ) */ + /* { */ + /* c = c*e; */ + /* } */ + + /* response[b] = c * sin_az[l-m-1]; */ + + /* b1 = l*l+2*l-m; */ + /* response[b1] = c * cos_az[l-m-1]; */ + + /* } */ + + /* b = l*l+l; */ + /* a = dirac_gains_P_idx[b]; */ + /* c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; */ + /* if( l%2 == 1) */ + /* { */ + /* c = c*e; */ + /* } */ + + /* response[b] = c; */ + /* } */ + + for ( l = 1; l <= ambisonics_order; l++ ) + { + b_2 = l * l; + b1_2 = l * l + 2 * l; + for ( m = 0; m < l; m += 2 ) + { + b = b_2 + m; + a = dirac_gains_P_idx[b]; + c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + + response[b] = c * sin_az[l - m - 1]; + + b1 = b1_2 - m; + response[b1] = c * cos_az[l - m - 1]; + } + + for ( m = 1; m < l; m += 2 ) + { + b = b_2 + m; + a = dirac_gains_P_idx[b]; + c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + c = c * e; + + response[b] = c * sin_az[l - m - 1]; + + b1 = b1_2 - m; + response[b1] = c * cos_az[l - m - 1]; + } + + b = b_2 + l; + a = dirac_gains_P_idx[b]; + c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + if ( l % 2 == 1 ) + { + c = c * e; + } + + response[b] = c; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_bits_to_encode + * + * Get number of bits required to encode the input value + *-----------------------------------------------------------------------------------------*/ + +int16_t ivas_get_bits_to_encode( + int32_t val ) +{ + int16_t bits_req = 0; + + assert( val >= 0 ); + + while ( val ) + { + bits_req++; + val >>= 1; + } + + return bits_req; +} diff --git a/lib_com/ivas_spar_com_quant_util.c b/lib_com/ivas_spar_com_quant_util.c new file mode 100644 index 0000000000..4725488338 --- /dev/null +++ b/lib_com/ivas_spar_com_quant_util.c @@ -0,0 +1,396 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "math.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include +#include "wmops.h" + +/*-----------------------------------------------------------------------------------------* + * Function ivas_limit_values() + * + * Limit values within given range + *-----------------------------------------------------------------------------------------*/ + +static void ivas_limit_values( + float **ppValues, + const float min_value, + const float max_value, + const int16_t dim1, + const int16_t dim2 ) +{ + int16_t i, j; + + for ( i = 0; i < dim1; i++ ) + { + for ( j = 0; j < dim2; j++ ) + { + ppValues[i][j] = max( min_value, min( ppValues[i][j], max_value ) ); + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_quantise_real_values() + * + * Quantize real values + *-----------------------------------------------------------------------------------------*/ + +void ivas_quantise_real_values( + float **values, + const int16_t q_levels, + const float min_value, + const float max_value, + int16_t **index, + float **quant, + const int16_t dim1, + const int16_t dim2 ) +{ + int16_t i, j; + float q_step, one_by_q_step; + + if ( q_levels == 1 ) + { + for ( i = 0; i < dim1; i++ ) + { + for ( j = 0; j < dim2; j++ ) + { + quant[i][j] = 0; + index[i][j] = 0; + } + } + } + else if ( q_levels && max_value != min_value ) + { + ivas_limit_values( values, min_value, max_value, dim1, dim2 ); + + q_step = ( max_value - min_value ) / ( q_levels - 1 ); + one_by_q_step = ( q_levels - 1 ) / ( max_value - min_value ); + + for ( i = 0; i < dim1; i++ ) + { + for ( j = 0; j < dim2; j++ ) + { + index[i][j] = (int16_t) round( one_by_q_step * values[i][j] ); + quant[i][j] = index[i][j] * q_step; + } + } + } + else + { + for ( i = 0; i < dim1; i++ ) + { + for ( j = 0; j < dim2; j++ ) + { + quant[i][j] = values[i][j]; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_get_uniform_quant_strat() + * + * Sets the quant strat values + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_foa_get_uniform_quant_strat( + ivas_spar_foa_md_com_cfg *pSpar_md_com_cfg, + const int16_t table_idx ) +{ + int16_t i; + int16_t active_w = ivas_spar_br_table_consts[table_idx].active_w; + int16_t PQ_q_lvl, C_q_lvl, Pr_q_lvl, Pc_q_lvl; + + pSpar_md_com_cfg->num_quant_strats = MAX_QUANT_STRATS; + + for ( i = 0; i < pSpar_md_com_cfg->num_quant_strats; i++ ) + { + PQ_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][0]; + C_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][1]; + Pr_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][2]; + Pc_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][3]; + + if ( active_w ) + { + pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; + pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; + pSpar_md_com_cfg->quant_strat[i].PR.min = -1.2f; + pSpar_md_com_cfg->quant_strat[i].PR.max = 1.2f; + + pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; + pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; + pSpar_md_com_cfg->quant_strat[i].C.min = -0.8f; + pSpar_md_com_cfg->quant_strat[i].C.max = 0.8f; + + pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; + pSpar_md_com_cfg->quant_strat[i].P_r.max = 0.8f; + + pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.8f; + pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.8f; + } + else + { + pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; + pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; + pSpar_md_com_cfg->quant_strat[i].PR.max = 1; + pSpar_md_com_cfg->quant_strat[i].PR.min = -1; + + pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; + pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; + pSpar_md_com_cfg->quant_strat[i].C.max = 2; + pSpar_md_com_cfg->quant_strat[i].C.min = -2; + + pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_r.max = 1.0f; + pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; + + pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; + pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.5; + pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.5; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_map_prior_coeffs_quant() + * + * Map prior coeffs + *-----------------------------------------------------------------------------------------*/ + +void ivas_map_prior_coeffs_quant( + ivas_spar_md_prev_t *pSpar_md_prior, + ivas_spar_foa_md_com_cfg *pSpar_md_cfg, + const int16_t qsi, + const int16_t nB ) +{ + int16_t i, j; + + if ( qsi != pSpar_md_cfg->prev_quant_idx ) + { + ivas_quant_strat_t qs = pSpar_md_cfg->quant_strat[qsi]; + ivas_quant_strat_t prev_qs = pSpar_md_cfg->quant_strat[pSpar_md_cfg->prev_quant_idx]; + float one_by_q_lvl_PR = 1.0f / max( prev_qs.PR.q_levels[0] - 1, 1 ); + float one_by_q_lvl_C = 1.0f / max( prev_qs.C.q_levels[0] - 1, 1 ); + float one_by_q_lvl_P_r = 1.0f / max( prev_qs.P_r.q_levels[0] - 1, 1 ); + for ( i = 0; i < nB; i++ ) + { + for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + { + pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = (int16_t) round( ( qs.PR.q_levels[0] - 1 ) * pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] * one_by_q_lvl_PR ); + pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = (int16_t) round( ( qs.P_r.q_levels[0] - 1 ) * pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] * one_by_q_lvl_P_r ); + } + for ( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) + { + pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = (int16_t) round( ( qs.C.q_levels[0] - 1 ) * pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] * one_by_q_lvl_C ); + } + } + } + else + { + for ( i = 0; i < nB; i++ ) + { + for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + { + pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j]; + pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j]; + } + for ( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) + { + pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j]; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_quant_dtx_init() + * + * Init spar md with minmax vals + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_quant_dtx_init( + ivas_spar_md_t *spar_md, + float *min_max ) +{ + spar_md->min_max[0] = min_max[0]; + spar_md->min_max[1] = min_max[1]; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_copy_band_coeffs_idx_to_arr() + * + * Copy pred band coeffs to arr + *-----------------------------------------------------------------------------------------*/ + +void ivas_copy_band_coeffs_idx_to_arr( + ivas_band_coeffs_ind_t *pBands_idx, + const int16_t nB, + int16_t *pSymbol_re, + ivas_cell_dim_t *pCell_dims, + const ivas_coeffs_type_t coeff_type, + const int16_t planarCP ) +{ + int16_t i, len; + int16_t j, k; + int16_t *pPtr_idx = NULL; + + for ( i = 0; i < nB; i++ ) + { + switch ( coeff_type ) + { + case PRED_COEFF: + { + pPtr_idx = pBands_idx[i].pred_index_re; + break; + } + case DRCT_COEFF: + { + pPtr_idx = pBands_idx[i].drct_index_re; + break; + } + case DECD_COEFF: + { + pPtr_idx = pBands_idx[i].decd_index_re; + break; + } + case DECX_COEFF: + { + break; + } + } + len = pCell_dims[i].dim1 * pCell_dims[i].dim2; + if ( ( coeff_type != DECX_COEFF ) ) + { + if ( ( coeff_type == PRED_COEFF ) || !planarCP ) + { + mvs2s( pPtr_idx, pSymbol_re, len ); + pSymbol_re += len; + } + else + { + k = 0; + for ( j = 0; j < len; j++ ) + { + if ( keep_planar[(int16_t) floor( j / pCell_dims[i].dim2 )] ) + { + pSymbol_re[k] = pPtr_idx[j]; + k++; + } + } + pSymbol_re += k; + } + } + } + + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_clear_band_coeffs() + * + * clear band coeffs array in spar MD + *-----------------------------------------------------------------------------------------*/ + +void ivas_clear_band_coeffs( + ivas_band_coeffs_t *pband_coeffs, + const uint16_t num_bands ) +{ + uint16_t i; + + for ( i = 0; i < num_bands; i++ ) + { + set_zero( (float *) pband_coeffs[i].C_re, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); + set_zero( (float *) pband_coeffs[i].P_re, ( IVAS_SPAR_MAX_CH - 1 ) ); + set_zero( (float *) pband_coeffs[i].C_quant_re, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); + set_zero( (float *) pband_coeffs[i].P_quant_re, ( IVAS_SPAR_MAX_CH - 1 ) ); + set_zero( pband_coeffs[i].pred_re, ( IVAS_SPAR_MAX_CH - 1 ) ); + + set_zero( pband_coeffs[i].pred_quant_re, ( IVAS_SPAR_MAX_CH - 1 ) ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_clear_band_coeff_idx() + * + * clear band coeffs index array in spar MD + *-----------------------------------------------------------------------------------------*/ + +void ivas_clear_band_coeff_idx( + ivas_band_coeffs_ind_t *pband_coeff_idx, + const uint16_t num_bands ) +{ + uint16_t i = 0; + + for ( i = 0; i < num_bands; i++ ) + { + set_s( pband_coeff_idx[i].pred_index_re, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); + + set_s( pband_coeff_idx[i].drct_index_re, 0, IVAS_SPAR_MAX_C_COEFF ); + set_s( pband_coeff_idx[i].decd_index_re, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); + } + + return; +} diff --git a/lib_com/ivas_spar_foa_br_dist.c b/lib_com/ivas_spar_foa_br_dist.c new file mode 100644 index 0000000000..607ebc56ab --- /dev/null +++ b/lib_com/ivas_spar_foa_br_dist.c @@ -0,0 +1,224 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "math.h" +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_com.h" +#include +#include "wmops.h" + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_set_bitrate_config() + * + * Set SPAR bitrate config + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_set_bitrate_config( + ivas_spar_foa_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ + const int16_t table_idx, /* i : config. table index */ + const int16_t num_bands /* i : number of bands */ +) +{ + int32_t ivas_total_brate; + int16_t i, total_bits, max_bits, code, length; + int16_t sba_order; + int16_t md_coding_bits_header; + pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; + + for ( i = 0; i < pSpar_md_cfg->nchan_transport; i++ ) + { + pSpar_md_cfg->max_freq_per_chan[i] = ivas_spar_br_table_consts[table_idx].fpcs; + } + + pSpar_md_cfg->active_w = ivas_spar_br_table_consts[table_idx].active_w; + pSpar_md_cfg->agc_bits_ch_idx = ivas_spar_br_table_consts[table_idx].agc_bits_ch_idx; + ivas_spar_foa_get_uniform_quant_strat( pSpar_md_cfg, table_idx ); + + if ( pSpar_md_cfg->quant_strat->C.q_levels[0] == 0 || pSpar_md_cfg->quant_strat->C.q_levels[1] == 0 || pSpar_md_cfg->quant_strat->PR.q_levels[0] == 0 || pSpar_md_cfg->quant_strat->PR.q_levels[1] == 0 || pSpar_md_cfg->quant_strat->P_c.q_levels[0] == 0 || pSpar_md_cfg->quant_strat->P_c.q_levels[1] == 0 || pSpar_md_cfg->quant_strat->P_r.q_levels[0] == 0 || pSpar_md_cfg->quant_strat->P_r.q_levels[1] == 0 ) + { + pSpar_md_cfg->gen_bs = 0; + } + else + { + if ( 0 != pSpar_md_cfg->gen_bs ) + { + pSpar_md_cfg->quant_strat_bits = ivas_get_bits_to_encode( MAX_QUANT_STRATS ); + } + } + + /* BLOCK: getEntropyCoderModels */ + + pSpar_md_cfg->remix_unmix_order = ivas_spar_br_table_consts[table_idx].dmx_str; + + /* bits per block*/ + total_bits = 0; + max_bits = 0; + + ivas_total_brate = ivas_spar_br_table_consts[table_idx].ivas_total_brate; + sba_order = ivas_spar_br_table_consts[table_idx].sba_order; + ivas_get_spar_table_idx( ivas_total_brate, sba_order, ivas_spar_br_table_consts[table_idx].bwidth, &code, &length ); + + for ( i = 0; i < pSpar_md_cfg->nchan_transport; i++ ) + { + total_bits += (int16_t) ( ivas_spar_br_table_consts[table_idx].evs_brs[i][0] / FRAMES_PER_SEC ); + max_bits += (int16_t) ( ivas_spar_br_table_consts[table_idx].evs_brs[i][1] / FRAMES_PER_SEC ); + } + if ( ivas_total_brate >= IVAS_256k ) + { + pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ) - IVAS_FORMAT_SIGNALING_NBITS_SBA - SBA_PLANAR_BITS - SBA_ORDER_BITS - length - total_bits; + + pSpar_md_cfg->max_bits_per_blk = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ) - IVAS_FORMAT_SIGNALING_NBITS_SBA - SBA_PLANAR_BITS - SBA_ORDER_BITS - length - max_bits; + + // TODO : do this for lower bitrates as well once order/planar bits are added + md_coding_bits_header = SPAR_NUM_CODING_STRAT_BITS + pSpar_md_cfg->quant_strat_bits; + pSpar_md_cfg->tgt_bits_per_blk -= md_coding_bits_header; + pSpar_md_cfg->max_bits_per_blk -= md_coding_bits_header; + + pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); + pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); + + pSpar_md_cfg->tgt_bits_per_blk += md_coding_bits_header; + pSpar_md_cfg->max_bits_per_blk += md_coding_bits_header; + } + else + { + pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ) - IVAS_FORMAT_SIGNALING_NBITS_SBA - length - total_bits; + + pSpar_md_cfg->max_bits_per_blk = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ) - IVAS_FORMAT_SIGNALING_NBITS_SBA - length - max_bits; + + pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); + pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); + } + + return; +} + +#ifdef FIX_I1_113 +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_bitrate_dist() + * + * Set SPAR bitrate distribution + *-----------------------------------------------------------------------------------------*/ + +// this function is not currently used but it is kept for future use +void ivas_spar_bitrate_dist( + int32_t core_brates_act[], /* o : bitrates per core-coder */ + const int16_t nAvailBits, /* i : number of available bits */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t i, nchan_transport, table_idx, bitlen; + int16_t core_bits_act[FOA_CHANNELS], core_range_bits[FOA_CHANNELS]; + int16_t sum_core_act_bits, residual_bits, overflow_bits; + + table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order, bwidth, &bitlen, NULL ); + + nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; + + sum_core_act_bits = 0; + for ( i = 0; i < nchan_transport; i++ ) + { + core_bits_act[i] = (int16_t) ( ivas_spar_br_table_consts[table_idx].evs_brs[i][0] / FRAMES_PER_SEC ); + + sum_core_act_bits += core_bits_act[i]; + } + + residual_bits = nAvailBits - sum_core_act_bits; + + /* First compute core-coder bits as per bitrate distribution table and MD bitrate*/ + if ( residual_bits > 0 ) + { + for ( i = 0; i < nchan_transport; i++ ) + { + core_range_bits[i] = (int16_t) ( ( ivas_spar_br_table_consts[table_idx].evs_brs[i][2] - ivas_spar_br_table_consts[table_idx].evs_brs[i][0] ) / FRAMES_PER_SEC ); + core_bits_act[i] += min( residual_bits, core_range_bits[i] ); + residual_bits -= core_range_bits[i]; + + if ( residual_bits <= 0 ) + { + break; + } + } + } + else + { + for ( i = 0; i < nchan_transport; i++ ) + { + core_range_bits[i] = (int16_t) ( ( ivas_spar_br_table_consts[table_idx].evs_brs[i][0] - ivas_spar_br_table_consts[table_idx].evs_brs[i][1] ) / FRAMES_PER_SEC ); + } + + overflow_bits = -residual_bits; + + for ( i = 0; i < nchan_transport; i++ ) + { + core_bits_act[nchan_transport - 1 - i] -= min( overflow_bits, core_range_bits[nchan_transport - 1 - i] ); + overflow_bits -= core_range_bits[nchan_transport - 1 - i]; + + if ( overflow_bits <= 0 ) + { + break; + } + } + + if ( overflow_bits > 0 ) + { + int16_t overflow_bits_ch; + overflow_bits_ch = overflow_bits / nchan_transport; + + for ( i = 0; i < nchan_transport; i++ ) + { + core_bits_act[i] -= overflow_bits_ch; + overflow_bits -= overflow_bits_ch; + } + + core_bits_act[nchan_transport - 1] -= max( 0, overflow_bits ); + } + } + + for ( i = 0; i < nchan_transport; i++ ) + { + core_brates_act[i] = core_bits_act[i] * FRAMES_PER_SEC; + } + + return; +} +#endif diff --git a/lib_com/ivas_stat_com.h b/lib_com/ivas_stat_com.h new file mode 100644 index 0000000000..cd5fff8afc --- /dev/null +++ b/lib_com/ivas_stat_com.h @@ -0,0 +1,759 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_STAT_COM +#define IVAS_STAT_COM + +#include +#include "options.h" +#include "typedef.h" +#include "cnst.h" +#include "ivas_cnst.h" + + +/*----------------------------------------------------------------------------------* + * Declaration of ISm common (encoder & decoder) structure + *----------------------------------------------------------------------------------*/ + +/* ISM metadata handle (storage for one frame of read ISM metadata) */ +typedef struct +{ + int16_t ism_metadata_flag; /* flag whether metadata are coded in particular frame of particular object */ + int16_t last_ism_metadata_flag; /* last frame ism_metadata_flag */ + + float azimuth; /* azimuth value read from the input metadata file */ + float elevation; /* azimuth value read from the input metadata file */ + + int16_t last_azimuth_idx; /* last frame index of coded azimuth */ + int16_t azimuth_diff_cnt; /* FEC counter of consecutive differentially azimuth coded frames */ + int16_t last_elevation_idx; /* last frame index of coded elevation */ + int16_t elevation_diff_cnt; /* FEC counter of consecutive differentially elevation coded frames */ + +} ISM_METADATA_FRAME, *ISM_METADATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Declaration of DFT Stereo common (encoder & decoder) structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_dft_config_data_struct +{ + int16_t dmx_active; + int16_t band_res; + int16_t prm_res; /* Send prm every # DFT frames */ +#ifdef DEBUG_MODE_DFT + int16_t gipd_mode; /* mode : from 0 (off) to 1 (on) */ + int16_t itd_mode; /* mode : from 0 (off) to 1 (on) */ +#endif + int16_t res_pred_mode; /* mode : from 0 (off) to 1 (on) */ + int16_t res_cod_mode; /* mode : from 0 (off) to 3 */ + int16_t hybrid_itd_flag; + int16_t ada_wb_res_cod_mode; /* res_cod_mode for adaptive wide band residual coding */ + + int16_t force_mono_transmission; + +} STEREO_DFT_CONFIG_DATA, *STEREO_DFT_CONFIG_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Declaration of MDCT stereo common (encoder & decoder) structure + *----------------------------------------------------------------------------------*/ + +typedef struct +{ + uint8_t const bandLengthsTCX20[SMDCT_MAX_STEREO_BANDS_TCX20]; /* Length of a band in number of bins. Range is 4..160 */ + const int16_t bdnCnt_TCX20[4]; /* uppermost band for FB,SWB,WB,NB */ + uint8_t const bandLengthsTCX10[SMDCT_MAX_STEREO_BANDS_TCX10]; /* Length of a band in number of bins. Range is 2..80, always divisible by 2 */ + const int16_t bndCnt_TCX10[4]; /* uppermost band for FB,SWB,WB,NB */ + +} MDCTStereoBands_config; + +/* MDCT stereo frequency band structure */ +typedef struct stereo_mdct_dec_band_parameters_struct +{ + int16_t sfbOffset[MAX_SFB + 1]; /* stereo frequency band start offsets */ + int16_t sfbCnt; /* number of stereo frequency bands */ + int16_t nBandsStereoCore; /* number of stereo frequency bands in the core */ + int16_t sfbIgfStart; /*index for first IGF band*/ + +} STEREO_MDCT_BAND_PARAMETERS; + + +/*----------------------------------------------------------------------------------* + * Declaration of ECLVQ common (encoder & decoder) structure + *----------------------------------------------------------------------------------*/ + +typedef struct +{ + int16_t config_index; + int16_t encoding_active; /* internal state specifying if actual encoding is active or only length evaluation is active */ + int32_t bit_count_estimate; /* uses 22Q10 fixed-point representation */ + void *ac_handle; + +} ECSQ_instance; + +/*----------------------------------------------------------------------------------* + * PARAMETRIC ISM encoder/decoder (common) structure + *----------------------------------------------------------------------------------*/ +typedef struct ivas_param_ism_data_structure +{ + int16_t nbands; + int16_t nblocks[MAX_PARAM_ISM_NBANDS]; + int16_t band_grouping[MAX_PARAM_ISM_NBANDS + 1]; + int16_t num_obj; + + int16_t azi_index[MAX_NUM_OBJECTS]; + int16_t ele_index[MAX_NUM_OBJECTS]; + + int16_t obj_indices[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS][MAX_PARAM_ISM_WAVE]; + int16_t power_ratios_idx[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS]; + + int16_t last_az_sgn[MAX_NUM_OBJECTS]; + int16_t last_az_diff[MAX_NUM_OBJECTS]; + int16_t last_el_sgn[MAX_NUM_OBJECTS]; + int16_t last_el_diff[MAX_NUM_OBJECTS]; + + int16_t flag_noisy_speech; + int16_t noisy_speech_buffer[PARAM_ISM_HYS_BUF_SIZE]; + +} PARAM_ISM_CONFIG_DATA, *PARAM_ISM_CONFIG_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Declaration of DirAC common (encoder & decoder) structure + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_dirac_config_data_struct +{ + int16_t enc_param_start_band; + int16_t dec_param_estim; + int16_t nbands; + +} DIRAC_CONFIG_DATA, *DIRAC_CONFIG_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Declaration of SPAR common structures + *----------------------------------------------------------------------------------*/ + +/* SPAR MD structures */ +typedef struct ivas_band_coeffs_t +{ + float pred_re[IVAS_SPAR_MAX_CH - 1]; + float C_re[IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS][IVAS_SPAR_MAX_DMX_CHS - 1]; + float P_re[IVAS_SPAR_MAX_CH - 1]; + float pred_quant_re[IVAS_SPAR_MAX_CH - 1]; + float C_quant_re[IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS][IVAS_SPAR_MAX_DMX_CHS - 1]; + float P_quant_re[IVAS_SPAR_MAX_CH - 1]; + +} ivas_band_coeffs_t; + +typedef struct ivas_band_coeffs_ind_t +{ + int16_t pred_index_re[IVAS_SPAR_MAX_CH - 1]; + int16_t drct_index_re[IVAS_SPAR_MAX_C_COEFF]; + int16_t decd_index_re[IVAS_SPAR_MAX_CH - 1]; + +} ivas_band_coeffs_ind_t; + +typedef struct ivas_spar_md_t +{ + ivas_band_coeffs_t band_coeffs[IVAS_MAX_NUM_BANDS * MAX_PARAM_SPATIAL_SUBFRAMES]; + ivas_band_coeffs_ind_t band_coeffs_idx[IVAS_MAX_NUM_BANDS]; + int16_t num_bands; + float min_max[2]; + int16_t dtx_vad; + float en_ratio_slow[IVAS_MAX_NUM_BANDS]; + float ref_pow_slow[IVAS_MAX_NUM_BANDS]; +} ivas_spar_md_t; + +typedef struct ivas_spar_md_prev_t +{ + ivas_band_coeffs_ind_t band_coeffs_idx[IVAS_MAX_NUM_BANDS]; + ivas_band_coeffs_ind_t band_coeffs_idx_mapped[IVAS_MAX_NUM_BANDS]; + +} ivas_spar_md_prev_t; + +typedef struct ivas_quant_coeffs_t +{ + float min; + float max; + int16_t q_levels[2]; + +} ivas_quant_coeffs_t; + +typedef struct ivas_quant_strat_t +{ + ivas_quant_coeffs_t PR; + ivas_quant_coeffs_t C; + ivas_quant_coeffs_t P_r; + ivas_quant_coeffs_t P_c; + +} ivas_quant_strat_t; + +typedef struct ivas_spar_foa_md_com_cfg +{ + int16_t max_freq_per_chan[IVAS_SPAR_MAX_CH]; + int16_t num_dmx_chans_per_band[IVAS_MAX_NUM_BANDS]; + int16_t num_decorr_per_band[IVAS_MAX_NUM_BANDS]; + int16_t active_w; + int16_t remix_unmix_order; + ivas_quant_strat_t quant_strat[MAX_QUANT_STRATS]; + int16_t gen_bs; + int16_t quant_strat_bits; + int16_t nchan_transport; + int16_t num_quant_strats; + int16_t prior_strat; + int16_t tgt_bits_per_blk; + int16_t max_bits_per_blk; + int16_t prev_quant_idx; + int16_t agc_bits_ch_idx; + int16_t planarCP; + int16_t num_umx_chs; + +} ivas_spar_foa_md_com_cfg; + + +/* arithmetic coder structures */ +typedef struct ivas_cell_dim_t +{ + int16_t dim1; + int16_t dim2; + +} ivas_cell_dim_t; + +typedef struct ivas_freq_models_t +{ + int16_t freq_model[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; + int16_t diff_freq_model[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; + int16_t vals[IVAS_MAX_QUANT_LEVELS]; + int16_t diff_vals[IVAS_MAX_QUANT_LEVELS]; + int16_t num_models; + int16_t diff_num_models; + +} ivas_freq_models_t; + +typedef struct ivas_huff_models_t +{ + int16_t code_book[IVAS_MAX_QUANT_LEVELS][3]; + int16_t diff_code_book[IVAS_MAX_QUANT_LEVELS][3]; + +} ivas_huff_models_t; + +typedef struct ivas_arith_consts_t +{ + ivas_freq_models_t pred_r; + ivas_freq_models_t drct_r; + ivas_freq_models_t decd_r; +} ivas_arith_consts_t; + +typedef struct ivas_huff_const_t +{ + ivas_huff_models_t pred_r; + ivas_huff_models_t drct_r; + ivas_huff_models_t decd_r; +} ivas_huff_consts_t; + +/* Entropy coder structures */ +typedef struct ivas_huffman_cfg_t +{ + const int16_t *codebook; + int16_t min_len; + int16_t max_len; + int16_t sym_len; + +} ivas_huffman_cfg_t; + +typedef struct ivas_arith_t +{ + int16_t dyn_model_bits; + const int16_t *pFreq_model; + const int16_t *pAlt_freq_models[IVAS_NUM_PROB_MODELS]; + const int16_t *vals; + int16_t cum_freq[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; + int16_t range; + int16_t num_models; + float saved_dist_arr[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; + +} ivas_arith_t; + +typedef struct ivas_arith_coeffs_t +{ + ivas_arith_t pred_arith_re[MAX_QUANT_STRATS]; + ivas_arith_t drct_arith_re[MAX_QUANT_STRATS]; + ivas_arith_t decd_arith_re[MAX_QUANT_STRATS]; + ivas_arith_t pred_arith_re_diff[MAX_QUANT_STRATS]; + ivas_arith_t drct_arith_re_diff[MAX_QUANT_STRATS]; + ivas_arith_t decd_arith_re_diff[MAX_QUANT_STRATS]; + +} ivas_arith_coeffs_t; + +typedef struct ivas_huff_coeffs_t +{ + ivas_huffman_cfg_t pred_huff_re[MAX_QUANT_STRATS]; + ivas_huffman_cfg_t drct_huff_re[MAX_QUANT_STRATS]; + ivas_huffman_cfg_t decd_huff_re[MAX_QUANT_STRATS]; + +} ivas_huff_coeffs_t; + +/* AGC structures */ +typedef struct ivas_agc_chan_data_t +{ + int16_t gainException; + int16_t absGainExp; + int16_t absGainExpCurr; + +} ivas_agc_chan_data_t; + +typedef struct ivas_agc_com_state_t +{ + float *winFunc; + int16_t in_delay; + uint16_t absEmin; + uint16_t betaE; + uint16_t maxAttExp; + uint16_t num_coeff; + +} ivas_agc_com_state_t; + +/* Covariance structures */ +typedef struct ivas_cov_smooth_state_t +{ + float *pPrior_cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + int16_t prior_bank_idx; + float *pSmoothing_factor; + int16_t num_bins; + +} ivas_cov_smooth_state_t; + +typedef struct ivas_cov_smooth_cfg_t +{ + float max_update_rate; + int16_t min_pool_size; + int16_t max_bands; + int16_t num_bins; + +} ivas_cov_smooth_cfg_t; + +typedef struct ivas_cov_smooth_in_buf_t +{ + float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + int16_t num_ch; + int16_t reset_cov; + +} ivas_cov_smooth_in_buf_t; + +/* SPAR bitrate constant table structure */ +typedef struct ivas_spar_br_table_t +{ + int32_t ivas_total_brate; + int16_t isPlanar; + int16_t sba_order; + int16_t bwidth; + int16_t fpcs; + int16_t nchan_transport; + ivas_spar_foa_pmx_strings_t dmx_str; + int16_t active_w; + int16_t tmode; + int32_t evs_brs[FOA_CHANNELS][3]; + int16_t q_lvls[MAX_QUANT_STRATS][NUM_MD_Q_COEFS_SET]; + int16_t td_ducking; + int16_t agc_bits_ch_idx; /* 0-3, Indicates core-coder channel index from which AGC bits have been taken from*/ + int16_t usePlanarCoeff; +} ivas_spar_br_table_t; + + +/*----------------------------------------------------------------------------------* + * Declaration of MASA common structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_MASA_spherical_grid_deindexing +{ + float theta_cb[NO_THETA16_MAX]; + int16_t no_theta; + int16_t no_phi[NO_THETA16_MAX]; + +} SPHERICAL_GRID_DATA; + +typedef struct ivas_masa_descriptive_meta_struct +{ + uint8_t formatDescriptor[8]; /* 8x 8 bits */ + uint8_t numberOfDirections; /* 1 bit */ + uint8_t numberOfChannels; /* 1 bit */ + uint8_t sourceFormat; /* 2 bits */ + uint8_t transportDefinition; /* 3 bits */ + uint8_t channelAngle; /* 3 bits */ + uint8_t channelDistance; /* 6 bits */ + uint8_t channelLayout; /* 3 bits, used only when sourceFormat == bit value 10 */ + +} MASA_DECRIPTIVE_META; + +typedef struct ivas_masa_directional_spatial_meta_struct +{ + float azimuth[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float elevation[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float spread_coherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + +} MASA_DIRECTIONAL_SPATIAL_META; + +typedef struct ivas_masa_common_spatial_meta_struct +{ + float diffuse_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float surround_coherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float remainder_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + +} MASA_COMMON_SPATIAL_META; + +typedef struct ivas_masa_metadata_frame_struct +{ + MASA_DECRIPTIVE_META descriptive_meta; + MASA_DIRECTIONAL_SPATIAL_META directional_meta[MASA_MAXIMUM_DIRECTIONS]; + MASA_COMMON_SPATIAL_META common_meta; + +} MASA_METADATA_FRAME, *MASA_METADATA_HANDLE; + +typedef struct ivas_masa_config_struct +{ + uint16_t max_metadata_bits; + int16_t block_grouping[5]; + int16_t band_grouping[MASA_FREQUENCY_BANDS + 1]; + uint8_t numCodingBands; + uint8_t numTwoDirBands; + uint8_t numberOfDirections; + uint8_t joinedSubframes; + uint8_t useCoherence; + uint8_t coherencePresent; + uint8_t mergeRatiosOverSubframes; + +} MASA_CODEC_CONFIG; + + +/*----------------------------------------------------------------------------------* + * Declaration of Qmetadata common structures + *----------------------------------------------------------------------------------*/ + +typedef struct +{ + int16_t nbands; + int16_t nblocks; + int16_t start_band; + int16_t search_effort; + MC_LS_SETUP mc_ls_setup; + +} IVAS_METADATA_CONFIG; + +typedef struct ivas_qdirection_band_data_struct +{ + uint16_t spherical_index[MAX_PARAM_SPATIAL_SUBFRAMES]; + float azimuth[MAX_PARAM_SPATIAL_SUBFRAMES]; + float elevation[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t elevation_m_alphabet[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t azimuth_m_alphabet[MAX_PARAM_SPATIAL_SUBFRAMES]; + + float energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint8_t distance[MAX_PARAM_SPATIAL_SUBFRAMES]; + + uint16_t bits_sph_idx[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t energy_ratio_index[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t energy_ratio_index_mod[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t azimuth_index[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t elevation_index[MAX_PARAM_SPATIAL_SUBFRAMES]; + float q_azimuth[MAX_PARAM_SPATIAL_SUBFRAMES]; + float q_elevation[MAX_PARAM_SPATIAL_SUBFRAMES]; +} IVAS_QDIRECTION_BAND_DATA; + +typedef struct ivas_qdirection_band_coherence_data_struct +{ + uint8_t spread_coherence[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t spread_coherence_dct0_index; + uint16_t spread_coherence_dct1_index; + +} IVAS_QDIRECTION_BAND_COHERENCE_DATA; + +typedef struct ivas_surround_coherence_band_data_struct +{ + uint8_t surround_coherence[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t sur_coherence_index; + +} IVAS_SURROUND_COHERENCE_BAND_DATA; + + +typedef struct +{ + IVAS_METADATA_CONFIG cfg; + + IVAS_QDIRECTION_BAND_DATA *band_data; + IVAS_QDIRECTION_BAND_COHERENCE_DATA *coherence_band_data; + int16_t not_in_2D; + +} IVAS_QDIRECTION; /* IVAS_QMETADATA; */ + +typedef struct ivas_masa_qmetadata_frame_struct +{ + IVAS_QDIRECTION *q_direction; + uint16_t no_directions; + int16_t bits_frame_nominal; + uint16_t coherence_flag; + uint8_t all_coherence_zero; + uint8_t twoDirBands[MASA_MAXIMUM_CODING_SUBBANDS]; + uint8_t numTwoDirBands; + int16_t qmetadata_max_bit_req; + int16_t metadata_max_bits; /* maximum allowed number of bits for metadata per frame */ + uint8_t useLowerRes; + uint8_t useLowerBandRes; + IVAS_SURROUND_COHERENCE_BAND_DATA *surcoh_band_data; + + /* Additional helper values to include all data required for writing to output file */ + uint8_t numCodingBands; + int16_t *bandMap; + int16_t nchan_transport; + int16_t sba_inactive_mode; + /* Status values on metadata quality */ + int16_t ec_flag; + float dir_comp_ratio; + uint8_t is_masa_type_format; // VE: use 'ivas_format' instead +} IVAS_QMETADATA, *IVAS_QMETADATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Declaration of Parametric MC common (encoder & decoder) structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_param_mc_ild_mapping_struct +{ + int16_t ild_map_size_wo_lfe; + int16_t ild_map_size_lfe; + int16_t ild_index[MAX_CICP_CHANNELS]; + int16_t num_ref_channels[MAX_CICP_CHANNELS]; + int16_t ref_channel_idx[MAX_CICP_CHANNELS][PARAM_MC_MAX_ILD_REF_CHANNELS]; + +} PARAM_MC_ILD_MAPPING, *HANDLE_PARAM_MC_ILD_MAPPING; + +typedef struct ivas_param_mc_icc_mapping_struct +{ + int16_t icc_map_size_wo_lfe; + int16_t icc_map_size_lfe; + int16_t icc_mapping[PARAM_MC_SZ_ICC_MAP][2]; + +} PARAM_MC_ICC_MAPPING, *HANDLE_PARAM_MC_ICC_MAPPING; + +typedef struct ivas_param_mc_conf_struct /* structure for ROM Table */ +{ + MC_LS_SETUP mc_ls_setup; + int16_t num_input_chan; + int16_t num_transport_chan; + int32_t ivas_total_brate; + const PARAM_MC_ILD_MAPPING *ild_mapping_conf; + const PARAM_MC_ICC_MAPPING *icc_mapping_conf; + const float *dmx_fac; + const float *ild_factors; + +} PARAM_MC_CONF; + +typedef struct ivas_parametric_mc_metadata_value_coding_info_struct +{ + const uint16_t *cum_freq; + const uint16_t *sym_freq; + const uint16_t *cum_freq_delta; + const uint16_t *sym_freq_delta; + const float *quantizer; + int16_t quantizer_size; + int16_t uni_bits; + +} PARAM_MC_PARAMETER_CODING_INFO, *HANDLE_PARAM_MC_PARAMETER_CODING_INFO; + +typedef struct ivas_parametric_mc_metadata_struct +{ + const PARAM_MC_ILD_MAPPING *ild_mapping_conf; + const PARAM_MC_ICC_MAPPING *icc_mapping_conf; + int16_t icc_mapping[PARAM_MC_PARAMETER_FRAMES][PARAM_MC_SZ_ICC_MAP][2]; + int16_t *icc_map_full[2]; + int16_t icc_map_size_full; + int16_t param_frame_idx; + int16_t flag_use_adaptive_icc_map; + const float *ild_factors; + int16_t coding_band_mapping[PARAM_MC_MAX_PARAMETER_BANDS]; + int16_t nbands_in_param_frame[PARAM_MC_PARAMETER_FRAMES]; + int16_t bAttackPresent; + int16_t attackIndex; + int16_t nbands_coded; + int16_t num_parameter_bands; + int16_t coded_bwidth; + int16_t last_coded_bwidth; + int16_t lfe_on; + PARAM_MC_PARAMETER_CODING_INFO icc_coding; + PARAM_MC_PARAMETER_CODING_INFO ild_coding; + +} IVAS_PARAM_MC_METADATA, *HANDLE_IVAS_PARAM_MC_METADATA; + + +/*----------------------------------------------------------------------------------* + * Declaration of LFE common (encoder & decoder) structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_lfe_window +{ + int16_t dct_len; + int16_t fade_len; + int16_t zero_pad_len; + int16_t full_len; + const float *pWindow_coeffs; + +} LFE_WINDOW_DATA, *LFE_WINDOW_HANDLE; + +typedef struct ivas_lfe_freq_models +{ + uint16_t entropy_coder_model_fine_sg1[65]; + uint16_t entropy_coder_model_fine_sg2[33]; + uint16_t entropy_coder_model_fine_sg3[9]; + uint16_t entropy_coder_model_fine_sg4[3]; + uint16_t entropy_coder_model_coarse_sg1[33]; + uint16_t entropy_coder_model_coarse_sg2[17]; + uint16_t entropy_coder_model_coarse_sg3[5]; + uint16_t entropy_coder_model_coarse_sg4; + +} ivas_lfe_freq_models; + +typedef struct ivas_filters_process_state_t +{ + int16_t order; + int16_t filt_len; + float num[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; + float den[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; + float state[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; + +} ivas_filters_process_state_t; + + +/*----------------------------------------------------------------------------------* + * Transient Detector (TD) structure + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_trans_det_state_t +{ + ivas_filters_process_state_t env_hpf; + ivas_filters_process_state_t env_fast; + ivas_filters_process_state_t env_slow; + float in_duck_coeff; + float out_duck_coeff; + float in_duck_gain; + float out_duck_gain; + float duck_mult_fac; + +} ivas_trans_det_state_t; + + +/*----------------------------------------------------------------------------------* + * Filter Bank (FB) structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_fb_mixer_cfg_t +{ + int16_t fb_latency; + int16_t num_in_chans; + int16_t num_out_chans; + int16_t pcm_offset; + int16_t fade_len; /* this sets the stride length; no delay is introduced */ + int16_t prior_input_length; + int16_t windowed_fr_offset; + int16_t active_w_mixing; + const int16_t *remix_order; + +} IVAS_FB_CFG; + +typedef struct ivas_fb_consts_t +{ + const float *ppFilterbank_FRs[2][IVAS_MAX_NUM_BANDS]; + float *ppFilterbank_FRs_non48k[2][IVAS_MAX_NUM_BANDS]; + const int16_t *pFilterbank_bins_per_band; + const int16_t *pFilterbank_bins_start_offset; + +} ivas_fb_consts_t; + +typedef struct ivas_fb_bin_to_band_data_t +{ + float *pFb_bin_to_band[IVAS_MAX_NUM_FB_BANDS]; + const int16_t *pFb_start_bin_per_band; + const int16_t *pFb_active_bins_per_band; + float pp_cldfb_weights_per_spar_band[CLDFB_NO_CHANNELS_MAX][IVAS_MAX_NUM_FB_BANDS]; /* weights for linear combination of parameters from different spar bands*/ + int16_t p_spar_start_bands[CLDFB_NO_CHANNELS_MAX]; /* the first spar band per CLFB band when the weight is > 0 */ + int16_t p_cldfb_map_to_spar_band[CLDFB_NO_CHANNELS_MAX]; /* a direct mapping from CLDFB band to SPAR band */ + int16_t p_short_stride_start_bin_per_band[IVAS_MAX_NUM_FB_BANDS]; + int16_t p_short_stride_num_bins_per_band[IVAS_MAX_NUM_FB_BANDS]; + float p_short_stride_bin_to_band[2 * MDFT_FB_BANDS_240]; + float *pp_short_stride_bin_to_band[IVAS_MAX_NUM_FB_BANDS]; + int16_t short_stride; + int16_t num_cldfb_bands; + +} ivas_fb_bin_to_band_data_t; + +typedef struct ivas_filterbank_t +{ + int16_t filterbank_num_bands; + ivas_fb_consts_t fb_consts; + ivas_fb_bin_to_band_data_t fb_bin_to_band; + +} ivas_filterbank_t; + +typedef struct ivas_fb_mixer_state_structure +{ + IVAS_FB_CFG *fb_cfg; + + int16_t num_diff_bands; + ivas_filterbank_t *pFb; + + float *ppFilterbank_inFR_re[IVAS_MAX_FB_MIXER_IN_CH]; + float *ppFilterbank_inFR_im[IVAS_MAX_FB_MIXER_IN_CH]; + float *ppFilterbank_prior_input[IVAS_MAX_FB_MIXER_IN_CH]; + float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH]; + + /* store sin part in const table (no need to store 1s and 0s, no need to do windowing for 1's and 0's as well) */ + int16_t cross_fade_start_offset; + int16_t cross_fade_end_offset; + const float *pFilterbank_cross_fade; + int16_t ana_window_offset; + const float *pAna_window; + + int16_t prior_input_length; + int16_t windowed_fr_offset; + float cldfb_cross_fade[CLDFB_NO_COL_MAX]; + int16_t cldfb_cross_fade_start; + int16_t cldfb_cross_fade_end; + int16_t cldfb_latency; + + int16_t first_frame[IVAS_SPAR_MAX_CH]; + +} IVAS_FB_MIXER_DATA, *IVAS_FB_MIXER_HANDLE; + + +#endif /* IVAS_STAT_COM */ diff --git a/lib_com/ivas_stereo_dft_com.c b/lib_com/ivas_stereo_dft_com.c new file mode 100644 index 0000000000..918fd27b35 --- /dev/null +++ b/lib_com/ivas_stereo_dft_com.c @@ -0,0 +1,252 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + +/*------------------------------------------------------------------------- + * stereo_dft_config() + * + * DFT Stereo Configuration function + *------------------------------------------------------------------------*/ + +void stereo_dft_config( + STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ + const int32_t brate, /* i : IVAS/CPE/nominal total bitrate */ + int16_t *bits_frame_nominal, /* o : primary channel nominal bits per frame */ + int16_t *bits_frame_nominal_2 /* o : secondary channel nominal bits per frame*/ +) +{ + if ( hConfig != NULL ) + { + hConfig->band_res = STEREO_DFT_BAND_RES_HIGH; + hConfig->prm_res = 2; +#ifndef DEBUG_STEREO_DFT_NOSTEREO + hConfig->dmx_active = STEREO_DFT_DMX_ACTIVE; +#else + hConfig->dmx_active = 0; +#endif + hConfig->ada_wb_res_cod_mode = 0; + } + + *bits_frame_nominal_2 = 5000 / FRAMES_PER_SEC; + + /* ITD, IPD and residual coding is not used in SID/No data */ + if ( brate == FRAME_NO_DATA ) + { + *bits_frame_nominal = FRAME_NO_DATA; + if ( hConfig != NULL ) + { +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 1; + hConfig->gipd_mode = 1; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_OFF; + hConfig->band_res = STEREO_DFT_BAND_RES_LOW; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; + } + } + else if ( brate == IVAS_SID_4k4 ) + { + *bits_frame_nominal = SID_2k40 / FRAMES_PER_SEC; + if ( hConfig != NULL ) + { +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 1; + hConfig->gipd_mode = 1; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_OFF; + hConfig->band_res = STEREO_DFT_BAND_RES_LOW; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; + } + } + else if ( brate <= IVAS_13k2 ) + { + *bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; + if ( hConfig != NULL ) + { +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 1; + hConfig->gipd_mode = 1; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; + hConfig->band_res = STEREO_DFT_BAND_RES_LOW; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; + } + } + else if ( brate <= IVAS_16k4 ) + { + *bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; + if ( hConfig != NULL ) + { +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 1; + hConfig->gipd_mode = 1; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; + hConfig->band_res = STEREO_DFT_BAND_RES_LOW; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; + } + } + else if ( brate <= IVAS_24k4 ) + { + *bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; + if ( hConfig != NULL ) + { +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 1; + hConfig->gipd_mode = 1; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; + } + } + else if ( brate <= IVAS_32k ) + { + *bits_frame_nominal = ACELP_24k40 / FRAMES_PER_SEC; + if ( hConfig != NULL ) + { +#ifdef DISABLE_ADAP_RES_COD_TMP + hConfig->ada_wb_res_cod_mode = 0; +#else + hConfig->ada_wb_res_cod_mode = 1; +#endif +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 1; + hConfig->gipd_mode = 1; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_STEFI; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_1kHz; + } + } + else if ( brate <= IVAS_48k ) + { + *bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; + if ( hConfig != NULL ) + { +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 1; + hConfig->gipd_mode = 1; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_STEFI; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_1_6kHz; + } + } + else + { + assert( 0 && "Bit-rate not supported by DFT stereo." ); + } + + if ( hConfig != NULL && hConfig->force_mono_transmission ) + { + hConfig->res_pred_mode = STEREO_DFT_RESPRED_OFF; + hConfig->band_res = STEREO_DFT_BAND_RES_LOW; + hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; + hConfig->ada_wb_res_cod_mode = 0; + } + + /*sanity check*/ + if ( hConfig != NULL ) + { + assert( hConfig->prm_res <= STEREO_DFT_NBDIV ); + /* make sure residual switching and ESF are not active at the same time */ + assert( !( hConfig->ada_wb_res_cod_mode == 1 && hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF ) ); + } + + return; +} + +/*------------------------------------------------------------------------- + * stereo_dft_band_config() + * + * Stereo DFT bands condfiguration + *------------------------------------------------------------------------*/ + +int16_t stereo_dft_band_config( + int16_t *band_limits, /* o : DFT band limits */ + const int16_t band_res, /* i : DFT band resolution */ + const int16_t NFFT, /* i : analysis/synthesis window length */ + const int16_t enc_dec /* i : flag to indicate enc vs dec */ +) +{ + int16_t nbands; + + /*sanity check*/ + assert( ( band_res == 1 || band_res == 0 || band_res == 2 ) && "stereo DFT: Parameter band resolution not supported!\n" ); + + band_limits[0] = 1; + nbands = 0; + while ( band_limits[nbands++] < NFFT / 2 ) + { + if ( band_res == 0 ) + { + assert( 0 && "stereo DFT: band config failed!\n" ); + } + else if ( band_res == 1 ) + { + if ( enc_dec == ENC ) + { + band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb4[nbands] * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); + } + else + { + band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb4[nbands] * ( (float) ( STEREO_DFT32MS_N_NS ) / STEREO_DFT_N_NS ) ); + } + + assert( ( nbands < STEREO_DFT_ERB4_BANDS ) && "stereo DFT: band config failed!\n" ); + } + else + { + if ( enc_dec == ENC ) + { + band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb8[nbands] * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); + } + else + { + band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb8[nbands] * ( (float) ( STEREO_DFT32MS_N_NS ) / STEREO_DFT_N_NS ) ); + } + + assert( ( nbands < STEREO_DFT_ERB8_BANDS ) && "stereo DFT: band config failed!\n" ); + } + } + nbands--; + band_limits[nbands] = NFFT / 2; /*Nyquist Freq*/ + + return ( nbands ); +} diff --git a/lib_com/ivas_stereo_eclvq_com.c b/lib_com/ivas_stereo_eclvq_com.c new file mode 100644 index 0000000000..76fcff1395 --- /dev/null +++ b/lib_com/ivas_stereo_eclvq_com.c @@ -0,0 +1,106 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------- + * ECSQ_init_instance() + * + * initialize the encoder or decoder instance ecsq_inst, using the configuration index config_index; + * ac_handle is a pointer to a structure containing the bitstream writer and the arithmetic coding state; + * the return value is the approximate number of bits written, expressed in 22Q10 fixed-point representation + * ---------------------------------------------------------------*/ + +void ECSQ_init_instance( + ECSQ_instance *ecsq_inst, + const int16_t config_index, + void *ac_handle ) +{ + ecsq_inst->config_index = config_index; + ecsq_inst->encoding_active = 1; + ecsq_inst->bit_count_estimate = 0; + ecsq_inst->ac_handle = ac_handle; + + return; +} + +/*--------------------------------------------------------------- + * ECSQ_dequantize_gain() + * + * dequantize global gain index + * ---------------------------------------------------------------*/ + +float ECSQ_dequantize_gain( + const int16_t index ) +{ + float global_gain; +#ifdef DEBUGGING + assert( ( index >= 0 ) && ( index <= 126 ) ); +#endif + + global_gain = powf( 10.0f, (float) index * ECLVQ_INV_GLOBAL_GAIN_FACTOR ); + + return global_gain; +} + +/*--------------------------------------------------------------- + * ECSQ_dequantize_vector() + * + * dequantize an integer-valued vector using optimal reconstruction points, which depend on the value of config_index + * ---------------------------------------------------------------*/ + +void ECSQ_dequantize_vector( + const int16_t *input, + const float global_gain, + const int16_t N, + float *output ) +{ + int16_t i; +#ifdef DEBUGGING + assert( N > 0 ); + assert( global_gain > 0.0f ); +#endif + + for ( i = 0; i < N; ++i ) + { + output[i] = (float) input[i] * global_gain; + } + + return; +} diff --git a/lib_com/ivas_stereo_ica_com.c b/lib_com/ivas_stereo_ica_com.c new file mode 100644 index 0000000000..b35c438d2e --- /dev/null +++ b/lib_com/ivas_stereo_ica_com.c @@ -0,0 +1,227 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "rom_com.h" +#include "ivas_rom_com.h" + +/*--------------------------------------------------------------- + * interpTargetChannel() + * + * Target signal correction for shift variations. + * The pointer passsed into this function is assumed to be chanR/chanL + currNCShift. + * ---------------------------------------------------------------*/ + +#define SPREAD_FACTOR1 ( 1.0f / INTERP_FACTOR1 ) + +static void interpTargetChannel( + float *target, + const int16_t prevShift, + const int16_t currShift, + const int16_t L_shift_adapt ) +{ + int16_t i, j, k, /*m,*/ d, N, signShift, lim1, lim2; + const float *win; + float *ptr1, *ptr2; + float tempBuff1[INTERP_FACTOR1 * ( L_SHIFT_ADAPT_MAX + 2 * N_MAX_SHIFT_CHANGE + 2 )], tempBuff2[L_SHIFT_ADAPT_MAX - 1]; + float x[4], y[4], tempF, tempF1; + float interp_factor2, factor; + float spread_factor2; + double tempD1, tempD2; + + d = -( currShift - prevShift ); + signShift = ( d >= 0 ) ? ( 1 ) : ( -1 ); + + if ( d == 0 ) + { + /* this can happen in DFT->TD switching */ + return; + } + + /* IVAS-220: QCToDo: (check N for dependency on the inputFs) */ + N = L_shift_adapt; + factor = ( (float) N ) / abs( d ); + interp_factor2 = factor / INTERP_FACTOR1; + spread_factor2 = 1.0f / interp_factor2; + + /* start from (target - N - d + 1) : (extra lag = step1) :to: (target - 1 - d) : (extra lag = d) */ + /* sinc interp by a factor of 2 */ + win = ica_sincInterp2 + SINC_ORDER1; + ptr1 = target; + ptr2 = tempBuff1 + ( N_MAX_SHIFT_CHANGE + 1 ) * INTERP_FACTOR1; + + for ( i = -( N_MAX_SHIFT_CHANGE + 1 ) * INTERP_FACTOR1; i < ( N + N_MAX_SHIFT_CHANGE + 1 ) * INTERP_FACTOR1; i++ ) + { + if ( i & 0x1 ) + { + ptr2[i] = 0.0f; + /* lim1 = ceil((i - SINC_ORDER1)*SPREAD_FACTOR1); */ + /* lim2 = floor((i + SINC_ORDER1)*SPREAD_FACTOR1); */ + tempF = ( i - SINC_ORDER1 ) * SPREAD_FACTOR1; + lim1 = (int16_t) ( tempF ); + if ( lim1 < tempF ) + { + lim1++; + } + + tempF = ( i + SINC_ORDER1 ) * SPREAD_FACTOR1; + lim2 = (int16_t) ( tempF ); + if ( lim2 > tempF ) + { + lim2--; + } + + for ( j = lim1; j <= lim2; j++ ) + { + ptr2[i] += win[j * INTERP_FACTOR1 - i] * ptr1[j]; + } + } + else + { + ptr2[i] = ptr1[(int16_t) ( i * SPREAD_FACTOR1 )]; + } + } + + /* cubic spline interp */ + ptr1 = ptr2; + ptr2 = tempBuff2; + + tempD1 = ( 1.0f / ( 6 * interp_factor2 * interp_factor2 * interp_factor2 ) ); + tempD2 = 3.0f * tempD1; + for ( tempF1 = d * factor - signShift, k = 0; k < N - 1; k++, tempF1 += ( factor - signShift ) ) + { + tempF = tempF1 * spread_factor2 - 1; + lim1 = (int16_t) ( tempF ); + if ( lim1 > tempF ) + { + lim1--; + } + + y[0] = ptr1[lim1]; + y[1] = ptr1[lim1 + 1]; + y[2] = ptr1[lim1 + 2]; + y[3] = ptr1[lim1 + 3]; + + x[0] = lim1 * interp_factor2; + x[1] = x[0] + interp_factor2; + x[2] = x[1] + interp_factor2; + x[3] = x[2] + interp_factor2; + + ptr2[k] = (float) ( ( y[3] * ( ( tempF1 - x[0] ) * ( tempF1 - x[1] ) * ( tempF1 - x[2] ) ) - y[0] * ( ( tempF1 - x[1] ) * ( tempF1 - x[2] ) * ( tempF1 - x[3] ) ) ) * tempD1 + ( y[1] * ( ( tempF1 - x[0] ) * ( tempF1 - x[2] ) * ( tempF1 - x[3] ) ) - y[2] * ( ( tempF1 - x[0] ) * ( tempF1 - x[1] ) * ( tempF1 - x[3] ) ) ) * tempD2 ); + } + + ptr1 = target; + mvr2r( ptr2, ptr1, N - 1 ); + + return; +} + + +/*--------------------------------------------------------------- + * Function targetCh_AlignStereoDFT() + * + * Align target channel in DFT stereo to correct for shift variations + * ---------------------------------------------------------------*/ + +static void targetCh_AlignStereoDFT( + float *target, + const int16_t prevShift, + const int16_t currShift, + const int16_t L_shift_adapt ) +{ + int16_t i; + float winSlope, alpha; + int16_t d; + + float fadeOutBuff[L_SHIFT_ADAPT_MAX]; + float fadeInBuff[L_SHIFT_ADAPT_MAX]; + + d = -( currShift - prevShift ); + + mvr2r( target + d, fadeOutBuff, L_shift_adapt ); + mvr2r( target, fadeInBuff, L_shift_adapt ); + + if ( L_shift_adapt > 0 ) + { + alpha = 0; + winSlope = 1.0f / L_shift_adapt; + for ( i = 0; i < L_shift_adapt; i++ ) + { + target[i] = alpha * fadeInBuff[i] + ( 1 - alpha ) * fadeOutBuff[i]; + alpha += winSlope; + } + } + else + { + mvr2r( fadeInBuff, target, L_shift_adapt ); + } + + return; +} + + +/*--------------------------------------------------------------- + * adjustTargetSignal() + * + * Target signal correction for shift variations. + * ---------------------------------------------------------------*/ + +void adjustTargetSignal( + float *target, + const int16_t prevShift, + const int16_t currShift, + const int16_t L_shift_adapt, + const int16_t method ) +{ + /* inter-frame shift variation and target shifting */ + + if ( method == 0 ) + { + interpTargetChannel( target, prevShift, currShift, L_shift_adapt ); + } + else + { + targetCh_AlignStereoDFT( target, prevShift, currShift, L_shift_adapt ); + } + + return; +} diff --git a/lib_com/ivas_stereo_mdct_bands_com.c b/lib_com/ivas_stereo_mdct_bands_com.c new file mode 100644 index 0000000000..16149941e4 --- /dev/null +++ b/lib_com/ivas_stereo_mdct_bands_com.c @@ -0,0 +1,249 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local union + *-------------------------------------------------------------------*/ + +#ifndef BASOP_NOGLOB +typedef union +#else /* BASOP_NOGLOB */ +typedef union +#endif /* BASOP_NOGLOB */ +{ + MDCTStereoBands_config const *steBands; + SpectrumWarping const *lpcBndsParam; +} SBPARAMS; + + +/*-------------------------------------------------------------------* + * stereo_mdct_init_bands() + * + * initialize stereo band tables for MDCT stereo + *-------------------------------------------------------------------*/ + +void stereo_mdct_init_bands( + const int16_t L_frame, /* i : frame length */ + const int16_t tmp_tcx_mode, /* i : tcx mode (TCX10, TCX 20), -1 if transition frame */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t igf, /* i : flag indicating if IGF is used */ + const H_IGF_GRID hIgfGrid, /* i : IGF grid setup */ + int16_t *sfbOffset, /* o : sfb offset table */ + int16_t *sfbCnt /* o : number of sfbs */ +) +{ + SBPARAMS sfbParam; + int16_t i, cnt, specStartOffset, L_frameTCX, tcx_mode; + const uint8_t *sfbWidths; + + if ( tmp_tcx_mode > 0 ) + { + tcx_mode = tmp_tcx_mode; + L_frameTCX = ( tcx_mode == TCX_20_CORE ) ? L_frame : ( L_frame / 2 ); + } + else + { + /*transition frame*/ + L_frameTCX = L_frame + L_frame / 4; + tcx_mode = TCX_20_CORE; + } + + /* select table */ + if ( L_frame == L_FRAME48k ) + { + sfbParam.steBands = mdctStereoBands_32000_640; + + cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[0] : sfbParam.steBands->bndCnt_TCX10[0] ); + + sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10 ); + } + else + { + if ( element_brate < IVAS_96k ) + { + sfbParam.steBands = mdctStereoBands_32000_640; + + switch ( L_frame ) + { + case L_FRAME32k: + cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[1] : sfbParam.steBands->bndCnt_TCX10[1] ); + break; + case L_FRAME25_6k: + cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[2] : sfbParam.steBands->bndCnt_TCX10[2] ); + break; + case L_FRAME16k: + cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[3] : sfbParam.steBands->bndCnt_TCX10[3] ); + break; + default: + assert( !"Subband division not defined for this frame size" ); + return; + } + + sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10 ); + } + else + { + switch ( L_frame ) + { + case L_FRAME48k: + case L_FRAME32k: + sfbParam.lpcBndsParam = sw32000Hz; + break; + case L_FRAME25_6k: + sfbParam.lpcBndsParam = sw25600Hz; + break; + case L_FRAME16k: + sfbParam.lpcBndsParam = sw16000Hz; + break; + default: + assert( !"Subband division not defined for this frame size" ); + return; + } + + sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.lpcBndsParam->bandLengthsTCX20 : sfbParam.lpcBndsParam->bandLengthsTCX10 ); + cnt = 64; + } + } + + /* calc sfb offsets */ + specStartOffset = 0; + + for ( i = 0; i < cnt; i++ ) + { + sfbOffset[i] = min( specStartOffset, L_frameTCX ); + specStartOffset += sfbWidths[i]; + + if ( sfbOffset[i] >= L_frameTCX ) + { + break; + } + } + + *sfbCnt = i; + sfbOffset[*sfbCnt] = min( specStartOffset, L_frameTCX ); + + if ( igf ) + { + int16_t sfbOldCnt = *sfbCnt; + int16_t igfSfbStep = hIgfGrid->infoIsRefined ? 2 : 1; + int16_t k; + + /* modify sfb bands according to igf grid */ + assert( hIgfGrid != NULL ); + + /* find sfb where IGF starts */ + for ( i = 0; i <= *sfbCnt; i++ ) + { + if ( sfbOffset[i] >= hIgfGrid->startLine ) + { + /* set band border to igf start line */ + sfbOffset[i] = hIgfGrid->startLine; + *sfbCnt = i; + break; + } + } + /* change bands above the igf start line to match igf bands */ + for ( i = 1, k = igfSfbStep; i < hIgfGrid->swb_offset_len; i++, k += igfSfbStep ) + { + sfbOffset[*sfbCnt + i] = hIgfGrid->swb_offset[k]; + } + + *sfbCnt += ( hIgfGrid->swb_offset_len - 1 ); + + /* better save than sorry, overwrite anything that is left above */ + for ( i = *sfbCnt + 1; i < sfbOldCnt + 1; i++ ) + { + sfbOffset[i] = 0; + } + } + else + { + if ( sfbOffset[*sfbCnt] < L_frameTCX ) + { + int16_t nMissingBins = L_frameTCX - sfbOffset[*sfbCnt]; + if ( sfbWidths[i] / 2 < nMissingBins ) + { + ( *sfbCnt )++; + } + sfbOffset[*sfbCnt] = L_frameTCX; + } + } + return; +} + +/*-------------------------------------------------------------------* + * stereo_mdct_init_igf_start_band() + * + * initialize start band of the IGF in MDCT stereo + *-------------------------------------------------------------------*/ + +void stereo_mdct_init_igf_start_band( + STEREO_MDCT_BAND_PARAMETERS *stbParams, /* i/o: stereo frequency band parameters */ + const float transFac, /* i : transform factor */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t element_brate /* i : element bitrate */ +) +{ + int16_t i, bitRateIndex, igfStartLine; + const int16_t *swb_offset; + + bitRateIndex = IGF_MapBitRateToIndex( element_brate, bwidth, IVAS_CPE_MDCT, 0 ); + swb_offset = &swb_offset_LB_new[bitRateIndex][1]; + igfStartLine = IGF_ApplyTransFac( swb_offset[0], transFac ); + + for ( i = 0; i < stbParams->sfbCnt; i++ ) + { + if ( igfStartLine == stbParams->sfbOffset[i] ) + { + stbParams->sfbIgfStart = i; + break; + } + } + + stbParams->nBandsStereoCore = stbParams->sfbIgfStart; + +#ifdef DEBUGGING + assert( stbParams->sfbIgfStart > 0 ); +#endif + + return; +} diff --git a/lib_com/ivas_stereo_mdct_stereo_com.c b/lib_com/ivas_stereo_mdct_stereo_com.c new file mode 100644 index 0000000000..7852d678be --- /dev/null +++ b/lib_com/ivas_stereo_mdct_stereo_com.c @@ -0,0 +1,59 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "wmops.h" +#include + +/*-------------------------------------------------------------------* + * splitAvailableBits() + * + * split available bits between channels based on the split ratio + *-------------------------------------------------------------------*/ + +void splitAvailableBits( + const int16_t total_bits, /* i : total available bits for TCX coding */ + const int16_t split_ratio, /* i : split ratio */ + int16_t *bits_ch0, /* o : bits for channel 0 */ + int16_t *bits_ch1 /* o : bits for channel 1 */ +) +{ + assert( split_ratio >= 1 && split_ratio < SMDCT_BITRATE_RATIO_RANGE ); + + *bits_ch0 = split_ratio * total_bits / SMDCT_BITRATE_RATIO_RANGE; + *bits_ch1 = total_bits + 0 - *bits_ch0; + + return; +} diff --git a/lib_com/ivas_stereo_psychlpc_com.c b/lib_com/ivas_stereo_psychlpc_com.c new file mode 100644 index 0000000000..7093a91093 --- /dev/null +++ b/lib_com/ivas_stereo_psychlpc_com.c @@ -0,0 +1,163 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_rom_com.h" +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" +#include + +/*-------------------------------------------------------------------* + * SpectrumWeighting_Init() + * + * + *-------------------------------------------------------------------*/ + +static void SpectrumWeighting_Init( + SpectrumWarping const *pSpectrumWarping, + const int16_t isTCX20, + PsychoacousticParameters *pPsychParams ) +{ + if ( isTCX20 ) + { + pPsychParams->bandLengths = pSpectrumWarping->bandLengthsTCX20; + } + else + { + pPsychParams->bandLengths = pSpectrumWarping->bandLengthsTCX10; + } + + return; +} + +/*-------------------------------------------------------------------* + * PsychoacousticParameters_Init() + * + * initialize a PsychoacousticParameters structure + *-------------------------------------------------------------------*/ + +#ifndef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +static +#endif + ivas_error + PsychoacousticParameters_Init( + const int32_t sr_core, /* i : sampling rate of core-coder */ + const int16_t nBins, /* i : Number of bins (spectral lines) */ + const int8_t nBands, /* i : Number of spectrum subbands */ + const int16_t isTCX20, /* i : Flag indicating if the subband division is for TCX20 or TCX10 */ + const int16_t isWarped, /* i : Flag indicating if the scale is linear or warped */ + PsychoacousticParameters *pPsychParams ) +{ + + if ( pPsychParams == NULL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "PsychParams handle is NULL" ); + } + + pPsychParams->nBins = nBins; + pPsychParams->nBands = nBands; + + if ( !isWarped ) + { + pPsychParams->bandLengths = NULL; + } + else + { + assert( pPsychParams->nBands == 64 ); + switch ( sr_core ) + { + case 16000: + SpectrumWeighting_Init( sw16000Hz, isTCX20, pPsychParams ); + break; + case 25600: + SpectrumWeighting_Init( sw25600Hz, isTCX20, pPsychParams ); + break; + case 32000: + SpectrumWeighting_Init( sw32000Hz, isTCX20, pPsychParams ); + break; + default: + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Subband division not defined for this sampling rate" ); + } + } + + return IVAS_ERR_OK; +} + +/*-------------------------------------------------------------------* + * InitPsychLPC() + * + * + *-------------------------------------------------------------------*/ + +void InitPsychLPC( + const int32_t sr_core, /* i : sampling rate of core-coder */ + const int16_t L_frame, /* i : frame length */ + const TCX_CONFIG_HANDLE hTcxCfg /* i : TCX configuration handle */ +) +{ + int16_t L_frame_ext = L_frame + L_frame / 4; + + hTcxCfg->psychParamsCurrent = NULL; + + PsychoacousticParameters_Init( sr_core, L_frame / 2, 64, 0, 1, &hTcxCfg->psychParamsTCX10 ); + PsychoacousticParameters_Init( sr_core, L_frame, 64, 1, 1, &hTcxCfg->psychParamsTCX20 ); + PsychoacousticParameters_Init( sr_core, L_frame_ext, 64, 1, 0, &hTcxCfg->psychParamsTCX20AfterACELP ); + + return; +} + +/*-------------------------------------------------------------------* + * SetCurrentPsychParams() + * + * + *-------------------------------------------------------------------*/ + +void SetCurrentPsychParams( + const int16_t core, + const int16_t last_frame_was_concealed_cng, + TCX_CONFIG_HANDLE hTcxCfg ) +{ + if ( hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP && !last_frame_was_concealed_cng ) + { + assert( core == TCX_20_CORE ); + hTcxCfg->psychParamsCurrent = &hTcxCfg->psychParamsTCX20AfterACELP; + } + else + { + hTcxCfg->psychParamsCurrent = ( core == TCX_10_CORE ) ? &hTcxCfg->psychParamsTCX10 : &hTcxCfg->psychParamsTCX20; + } + + return; +} diff --git a/lib_com/ivas_stereo_td_bit_alloc.c b/lib_com/ivas_stereo_td_bit_alloc.c new file mode 100644 index 0000000000..7d5b0afb55 --- /dev/null +++ b/lib_com/ivas_stereo_td_bit_alloc.c @@ -0,0 +1,738 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "stat_enc.h" +#include "rom_com.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define NB_RATE_POSS 10 /* Nmbr of possible FCB bitrate for half rate mode*/ +#define MIN_SEC_ACB_RATE ( 2 * 8 * FRAMES_PER_SEC ) /* 2 subfr ACB bitrate */ +#define MIN_SEC_LPC_RATE ( ( 24 + 2 ) * FRAMES_PER_SEC ) /* LPC min rate */ + +#define MAX_SC_FCB_RATE ( 24 + 1 ) /* Maximum bit for a FCB subfr */ +#define MIN_4SUBFR_FCB_RATE 40 /* Minimum 4 subfr bitrate (4x10 bits) */ +#define MIN_GAIN_BITS 6 /* Minimum number of bits used */ + +#define TDM_UC_NORMAL_MODE_MBRATE 9000 /* Max bitrate for normal UC if LP coded */ +#define TDM_UC_NORMAL_MODE_MBRATE_LP_R 8200 /* Normal bitrate for normal UC if LP is reused */ +#define TDM_UC_NORMAL_MODE_MINBR_LP_R 7000 /* If bitrate is below 7k, add back MID_LP_BRATE */ +#define MID_LP_BRATE ( 31 + 5 ) * FRAMES_PER_SEC /* average bitrate for LP */ +#define MAX_TDM_UC_BRATE 11000 /* Maximum bitrate for tdm normal UC mode */ + +#define MIN_SIGN_RATE ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS * FRAMES_PER_SEC ) /* min. 2 time 12 bits FCB, used only when LPC and/or pitch is transmitted */ +#define MIN_FCB_SECRATE2 ( 2 * 16 * FRAMES_PER_SEC ) /* min. 2 time 14 bits FCB, used only when LPC and/or pitch is transmitted */ + + +/*-------------------------------------------------------------------* + * tdm_bit_alloc() + * + * Bitbudget distribution between Primary and Secondary channel in TD stereo + *-------------------------------------------------------------------*/ + +void tdm_bit_alloc( + const int32_t element_brate_wo_meta, /* i : element bitrate without metadata */ + const int16_t tdm_lp_reuse_flag, /* i : LPC reusage flag */ + int32_t *total_brate_pri, /* o : Allocated primary channel bitrate */ + int32_t *total_brate_sec, /* o : Allocated secondary channel bitrate */ + int16_t *tdm_low_rate_mode, /* o : secondary channel low rate mode flag*/ + const int16_t coder_type, /* i : secondary channel coder type */ + const int16_t ener_ratio_idx, /* i : correlation ratio indexe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const int16_t bwidth_pri, /* i : bandwidth of the primary channel */ + const int16_t bwidth_sec, /* i : bandwidth of the secondary channel */ + const int16_t flag_ACELP16k_pri, /* i : ACELP@16kHz core flag, primary chan.*/ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int16_t coder_type0, /* i : coder type (temporary in the encoder, from bitstream in decoder) */ + const int16_t tdm_inst_ratio_idx_ref /* i : instantaneous correlation ratio idx */ +) +{ + int16_t idx, four_subfr_fcb, two_subfr_fcb; + float bit_rate_diff; + int16_t BWE_brate, tmp_bits; + int16_t tdm_inst_ratio_idx = tdm_inst_ratio_idx_ref; + if ( tdm_inst_ratio_idx == TDM_NQ ) + { + tdm_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; /* Bit rate almost split half and half*/ + } + + /* Decision on using the low rate mode or the normal mode */ + /* default is using the low rate mode for the secondary channel coding*/ + /* UC and IC are automatically coded with low rate mode */ + *tdm_low_rate_mode = 1; + + /* Allocating different bitrate to channels */ + idx = 0; + if ( element_brate_wo_meta <= IVAS_13k2 ) + { + idx = 0; + } + else if ( element_brate_wo_meta <= IVAS_16k4 ) + { + idx = 1; + } + else if ( element_brate_wo_meta <= IVAS_24k4 ) + { + idx = 2; + } + else if ( element_brate_wo_meta <= IVAS_32k ) + { + idx = 3; + } + else if ( element_brate_wo_meta <= IVAS_48k ) + { + idx = 4; + } + + if ( coder_type == UNVOICED && tdm_bit_allc_tbl[idx][coder_type] >= 4200 ) + { + *tdm_low_rate_mode = 0; + } + + /* Secondary channel based bitrate allocation */ + *total_brate_sec = tdm_bit_allc_tbl[idx][coder_type]; + + /* secondary channel bitrate allocation based on the energy scaling ratio */ + if ( ( coder_type != UNVOICED ) || tdm_LRTD_flag == 1 ) + { + bit_rate_diff = (float) ( element_brate_wo_meta - 2 * *total_brate_sec ); + + if ( tdm_LRTD_flag == 1 ) /* > element_brate > STEREO_22k or CT0 not used */ + { + /* further adjustment in function of the energy/correlation ratio */ + if ( coder_type == INACTIVE ) + { + *total_brate_sec = max( *total_brate_sec, (int16_t) ( 0.3f * ( element_brate_wo_meta - 500 ) / 100 ) * 100 ); + tmp_bits = (int16_t) ( -abs( tdm_inst_ratio_idx - 16 ) * 200 * idx ); + } + else + { + *total_brate_sec = max( *total_brate_sec, (int16_t) ( 0.5f * ( element_brate_wo_meta - 500 ) / 100 ) * 100 ); + /* tmp_bits = -abs(tdm_inst_ratio_idx-16)*200*idx; */ + tmp_bits = (int16_t) ( -abs( tdm_inst_ratio_idx - 16 ) * 100 * idx ); + } + + /* tmp_bits should be subtract from the secondary channel bitrate */ + /* If the primary channel doesn't correspond to the channel having the highest correlation to the mono- inverse the bitrate compensation */ + if ( ( ener_ratio_idx >= LRTD_STEREO_MID_IS_PRIM && tdm_inst_ratio_idx < LRTD_STEREO_MID_IS_PRIM ) || ( ener_ratio_idx < LRTD_STEREO_MID_IS_PRIM && tdm_inst_ratio_idx >= LRTD_STEREO_MID_IS_PRIM ) ) + { + tmp_bits *= -1; + } + bit_rate_diff = tmp_bits; + } + else + { + if ( ener_ratio_idx < LRTD_STEREO_MID_IS_PRIM ) + { + bit_rate_diff = ( LRTD_STEREO_MID_IS_PRIM - ener_ratio_idx ) * bit_rate_diff * 0.05f; + } + else + { + bit_rate_diff = ( ener_ratio_idx - LRTD_STEREO_MID_IS_PRIM ) * bit_rate_diff * 0.05f; + } + } + /*bit_rate_diff2 = ((int16_t)(10.f*(-0.5f*ener_ratio_LR+0.5f)*bit_rate_diff)/100)*100;*/ + *total_brate_sec += ( (int16_t) ( bit_rate_diff / 100 ) * 100 ); + *total_brate_sec = max( *total_brate_sec, tdm_bit_allc_tbl[idx][coder_type] ); + + if ( coder_type == INACTIVE && tdm_LRTD_flag == 0 ) + { + *total_brate_sec = min( *total_brate_sec, MIN_BRATE_SWB_BWE ); + } + + if ( ( ener_ratio_idx <= 1 || ener_ratio_idx >= 29 ) && coder_type >= UNVOICED ) + { + int16_t delta_brate = 0; + + if ( bwidth_pri > WB ) + { + delta_brate = 600; /* To slightly compensate for SWB BWE instead of WB BWE */ + if ( element_brate_wo_meta <= IVAS_16k4 ) + { + delta_brate = 1250; /* To compensate for SWB BWE instead of WB BWE */ + } + } + + if ( element_brate_wo_meta <= IVAS_13k2 ) + { + *total_brate_sec = max( *total_brate_sec, 5600 + delta_brate ); /* ~42-47 % of the total bitrate */ + } + else if ( element_brate_wo_meta <= IVAS_16k4 ) + { + *total_brate_sec = max( *total_brate_sec, 6500 + delta_brate ); /* ~40-43 % of the total bitrate */ + } + else if ( element_brate_wo_meta <= IVAS_24k4 ) + { + *total_brate_sec = max( *total_brate_sec, 9000 + delta_brate ); /* ~37-39 % of the total bitrate */ + } + else + { + *total_brate_sec = max( *total_brate_sec, 9600 + delta_brate ); /* ~30-32% of the total bitrate */ + } + } + else + { + *total_brate_sec = min( *total_brate_sec, (int16_t) ( 0.0045f * element_brate_wo_meta ) * 100 ); + } + + *total_brate_sec = min( *total_brate_sec, 18000 ); + } + else if ( coder_type == UNVOICED ) + { + if ( tdm_lp_reuse_flag == 0 ) + { + *total_brate_sec += ( 31 + 5 ) * FRAMES_PER_SEC; + } + } + + if ( coder_type <= UNVOICED ) + { + *total_brate_sec = min( *total_brate_sec, MAX_TDM_UC_BRATE ); + + if ( *total_brate_sec >= TDM_UC_NORMAL_MODE_MBRATE && tdm_lp_reuse_flag == 0 ) + { + *tdm_low_rate_mode = 0; + } + else if ( *total_brate_sec >= TDM_UC_NORMAL_MODE_MBRATE_LP_R ) + { + *tdm_low_rate_mode = 0; + } + else if ( ( tdm_lp_reuse_flag == 0 && *total_brate_sec < TDM_UC_NORMAL_MODE_MINBR_LP_R && coder_type == UNVOICED ) || ( tdm_lp_reuse_flag == 0 && *total_brate_sec < ( tdm_bit_allc_tbl[idx][0] + MID_LP_BRATE ) ) ) + { + *total_brate_sec += MID_LP_BRATE; + } + } + + /* verify that primary channel bitrate is higher than the minimum supported bitrate */ + if ( flag_ACELP16k_pri ) + { + BWE_brate = SWB_TBE_1k75; + if ( element_brate_wo_meta < IVAS_24k4 ) + { + BWE_brate = SWB_TBE_1k10; + } + + if ( bwidth_pri > WB && tdm_LRTD_flag == 0 ) + { + BWE_brate += ( STEREO_BITS_ICBWE + STEREO_ICBWE_MSFLAG_BITS ) * FRAMES_PER_SEC; + } + if ( bwidth_pri > SWB && tdm_LRTD_flag == 1 ) + { + BWE_brate += 300; + } + + if ( bwidth_pri == FB ) + { + BWE_brate += ( FB_TBE_1k8 - SWB_TBE_1k75 ); + } + + if ( element_brate_wo_meta - *total_brate_sec - BWE_brate < 14000 ) + { + *total_brate_sec = element_brate_wo_meta - 14000 - BWE_brate; + } + } + else + { + BWE_brate = SWB_TBE_1k75; + if ( bwidth_pri == WB ) + { + BWE_brate = WB_BWE_0k35; + if ( tdm_LRTD_flag == 0 ) + { + BWE_brate += 250; /* ICA Brate */ + } + } + else if ( tdm_LRTD_flag == 0 ) + { + BWE_brate += 350; /* ICA Brate */ + } + } + + if ( coder_type0 == TRANSITION ) + { + if ( element_brate_wo_meta > IVAS_13k2 ) + { + *total_brate_sec = min( *total_brate_sec, element_brate_wo_meta - ( ACELP_8k00 + BWE_brate ) ); + } + else + { + *total_brate_sec = min( *total_brate_sec, element_brate_wo_meta - ( ACELP_7k20 + BWE_brate ) ); + } + } + else + { + *total_brate_sec = min( *total_brate_sec, element_brate_wo_meta - ( 5900 + BWE_brate ) ); + } + + /* Secondary channel bitrate adjusment */ + /* First, adjust the bitrate depending of what is transmitted */ + /* Second, choose the number of subframe for ACELP core depending of the targetted bitratre */ + /* Finally, verify that the concordance between the number of subframe, the parameters sent and the bitrate available */ + if ( coder_type == GENERIC /* || coder_type == AUDIO*/ ) + { + /* Adjust the bitrate depending of what is transmitted */ + /* If LPC are transmitted, ensure enough bits are used */ + if ( tdm_lp_reuse_flag == 0 ) + { + /* Pitch is transmitted as well, further increase the bitrate */ + if ( tdm_Pitch_reuse_flag == 0 ) + { + *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_ACB_RATE + MIN_SEC_LPC_RATE + MIN_SIGN_RATE ); + + if ( tdm_LRTD_flag == 1 && bwidth_sec == SWB ) + { + /* ensure that there are enough bits to code SWB TBE_1k10 as well */ + *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_ACB_RATE + MIN_SEC_LPC_RATE + MIN_SIGN_RATE + SWB_TBE_1k10 ); + } + } + else /* only LPC is tranmitted -> if ( *total_brate_sec < MIN_SEC_BRATE+MIN_SEC_LPC_RATE ) */ + { + *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_LPC_RATE + MIN_SIGN_RATE ); + } + } + else if ( /*tdm_lp_reuse_flag == 1*/ tdm_Pitch_reuse_flag == 0 ) + { + *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_ACB_RATE + MIN_SIGN_RATE ); + } + + /* Choose between 2 and 4 subfr, depending of the bitrate available and prevent the gap between the 2 atlernative */ + if ( tdm_LRTD_flag == 1 ) + { + four_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS - STEREO_BITS_TCA + 1 + 4 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); + two_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS - STEREO_BITS_TCA + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); + } + else + { + four_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + 1 + 4 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); + two_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); + } + + if ( tdm_lp_reuse_flag == 0 ) + { + four_subfr_fcb -= MIN_SEC_LPC_RATE; + two_subfr_fcb -= MIN_SEC_LPC_RATE; + } + + if ( tdm_Pitch_reuse_flag == 0 ) + { + four_subfr_fcb -= ( MIN_SEC_ACB_RATE + 10 * FRAMES_PER_SEC ); + two_subfr_fcb -= MIN_SEC_ACB_RATE; + } + + /* Too much bits for the 2 subfr model but not enough for the the 4 subfr model -> slightly reduce the 2nd channel bitrate */ + if ( two_subfr_fcb > 2 * MAX_SC_FCB_RATE * FRAMES_PER_SEC && four_subfr_fcb < MIN_4SUBFR_FCB_RATE * FRAMES_PER_SEC ) + { + if ( tdm_LRTD_flag == 1 ) + { + *total_brate_sec = 2 * MAX_SC_FCB_RATE * FRAMES_PER_SEC + ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS - STEREO_BITS_TCA + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC; + } + else + { + *total_brate_sec = 2 * MAX_SC_FCB_RATE * FRAMES_PER_SEC + ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC; + } + + if ( tdm_lp_reuse_flag == 0 ) + { + *total_brate_sec += MIN_SEC_LPC_RATE; + } + + if ( tdm_Pitch_reuse_flag == 0 ) + { + *total_brate_sec += MIN_SEC_ACB_RATE; + } + } + else if ( four_subfr_fcb >= ( 40 ) * FRAMES_PER_SEC ) /* Enough bits to have minimally 2 x 12 + 2*7 bits FCB */ + { + *tdm_low_rate_mode = 0; /* Use normal rate mode */ + } + else /* Possible slight increase of secondary channel bit budget to compensate for FCB limited flexibility */ + { + int16_t tmp_rate, i; + tmp_rate = two_subfr_fcb; + idx = NB_RATE_POSS - 2; + + for ( i = 0; i < NB_RATE_POSS; i++ ) + { + if ( tmp_rate <= fast_FCB_rates_2sfr[i] ) + { + idx = i; + break; + } + } + *total_brate_sec += ( fast_FCB_rates_2sfr[idx] - tmp_rate ); + } + /* prevent 2.4 kb/s and 2.8 kb/s as they are reserved bitrates for DTX and VBR */ + if ( *total_brate_sec == PPP_NELP_2k80 || *total_brate_sec == SID_2k40 ) + { + *total_brate_sec += 100; + } + + /* To prevent 13.2 kb/s for primary channel as some bitstream issues arrise with it */ + if ( element_brate_wo_meta - *total_brate_sec == ACELP_13k20 ) + { + *total_brate_sec += 100; + } + } + + *total_brate_pri = element_brate_wo_meta - *total_brate_sec; + + return; +} + + +/*-------------------------------------------------------------------* + * td_stereo_param_updt() + * + * copy certain TD stereo parameters from primary channel to secondary channel + *-------------------------------------------------------------------*/ + +void td_stereo_param_updt( + const float lsp_old_PCh[], /* i : primary channel old LSPs */ + const float lsf_old_PCh[], /* i : primary channel old LSFs */ + const float pitch_buf_PCh[], /* i : primary channel pitch buffer */ + float tdm_lspQ_PCh[], /* o : Q LSPs for primary channel */ + float tdm_lsfQ_PCh[], /* o : Q LSFs for primary channel */ + float tdm_Pri_pitch_buf[], /* o : pitch values for primary channel */ + const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ + const int16_t tdm_use_IAWB_Ave_lpc /* i : flag to indicate the usage of mean inactive LP coefficients */ +) +{ + int16_t i; + + /* Copy some primary channel information into the secondary channel structure for later usage */ + if ( tdm_use_IAWB_Ave_lpc == 1 ) + { + mvr2r( IAWB_Ave, tdm_lsfQ_PCh, M ); + lsf2lsp( tdm_lsfQ_PCh, tdm_lspQ_PCh, M, INT_FS_12k8 ); + } + else if ( flag_ACELP16k == 1 ) + { + mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); + lsp_convert_poly( tdm_lspQ_PCh, L_FRAME, 0 ); + lsp2lsf( tdm_lspQ_PCh, tdm_lsfQ_PCh, M, INT_FS_12k8 ); + } + else + { + mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); + mvr2r( lsf_old_PCh, tdm_lsfQ_PCh, M ); + } + + /* This is only to keep the buffer up-to-date */ + if ( flag_ACELP16k == 1 ) + { + for ( i = 0; i < NB_SUBFR; i++ ) + { + tdm_Pri_pitch_buf[i] = pitch_buf_PCh[i] * 0.8f; + tdm_Pri_pitch_buf[i] = max( tdm_Pri_pitch_buf[i], PIT_MIN ); + } + } + else + { + mvr2r( pitch_buf_PCh, tdm_Pri_pitch_buf, NB_SUBFR ); + } + + return; +} + + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +/*-------------------------------------------------------------------* + * tdm_SCh_LSF_intra_pred_zero_bits() + * + * + *-------------------------------------------------------------------*/ + +static void tdm_SCh_LSF_intra_pred_zero_bits( + const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ + float *pred_lsf_secondary, /* o : predicted secondary channel LSFs */ + const float *lsf_mean, /* i : secondary channel mean LSFs */ + const float beta /* i : pull to average beta factor */ +) +{ + int16_t i; + + /* pulling the LSFs closer to the average */ + for ( i = 0; i < M; i++ ) + { + pred_lsf_secondary[i] = beta * tdm_lsfQ_PCh[i] + ( 1.0f - beta ) * lsf_mean[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * tdm_SCh_LSF_intra_pred_tri_diag_mat() + * + * + *-------------------------------------------------------------------*/ + +static void tdm_SCh_LSF_intra_pred_tri_diag_mat( + float *lsf_secondary, /* i/o: secondary channel LSFs */ + const float *lsf_mean_in, /* i : secondary channel mean LSFs (in) */ + const float *lsf_mean_out, /* i : secondary channel mean LSFs (out) */ + const float *prd_diag_3 /* i : secondary channel mean LSFs */ +) +{ + int16_t i; + float lsf_tmp[M]; + const float *prd_ptr; + float *lsf_tmp_ptr1; + float *lsf_tmp_ptr2; + float *lsf_second_ptr; + + prd_ptr = prd_diag_3; + + v_sub( lsf_secondary, lsf_mean_in, lsf_tmp, M ); + + lsf_tmp_ptr1 = lsf_tmp; + lsf_second_ptr = lsf_secondary; + + lsf_tmp_ptr2 = lsf_tmp_ptr1; + *lsf_second_ptr = ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); + ( *lsf_second_ptr++ ) += ( *lsf_tmp_ptr1 ) * ( *prd_ptr++ ); + + for ( i = 1; i < M - 1; i++ ) + { + lsf_tmp_ptr1 = lsf_tmp_ptr2; + *lsf_second_ptr = ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); + lsf_tmp_ptr2 = lsf_tmp_ptr1; + *lsf_second_ptr += ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); + ( *lsf_second_ptr++ ) += ( *lsf_tmp_ptr1 ) * ( *prd_ptr++ ); + } + + lsf_tmp_ptr1 = lsf_tmp_ptr2; + *lsf_second_ptr = ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); + *lsf_second_ptr += ( *lsf_tmp_ptr1 ) * ( *prd_ptr ); + + v_add( lsf_secondary, lsf_mean_out, lsf_secondary, M ); + + return; +} + +/*-------------------------------------------------------------------* + * tdm_SCh_LSF_intra_pred() + * + * + *-------------------------------------------------------------------*/ + +void tdm_SCh_LSF_intra_pred( + const int32_t element_brate, /* i : element bitrate */ + const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ + float *pred_lsf_secondary /* o : predicted secondary channel LSFs */ +) +{ + float fixed_beta; + + if ( element_brate <= IVAS_13k2 ) + { + fixed_beta = 0.87F; + } + else if ( element_brate <= IVAS_16k4 ) + { + fixed_beta = 0.94F; + } + else if ( element_brate <= IVAS_24k4 ) + { + fixed_beta = 0.91F; + } + else if ( element_brate <= IVAS_32k ) + { + fixed_beta = 0.92F; + } + else + { + fixed_beta = 0.91F; + } + + tdm_SCh_LSF_intra_pred_zero_bits( tdm_lsfQ_PCh, pred_lsf_secondary, tdm_LSF_MEAN_PRED_QNT, fixed_beta ); + + tdm_SCh_LSF_intra_pred_tri_diag_mat( pred_lsf_secondary, tdm_LSF_MEAN_PRED_QNT_IN, tdm_LSF_MEAN_PRED_QNT_OUT, tdm_PRED_QNT_fixed_beta_prd_diag_3 ); + + return; +} + + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE +/*-------------------------------------------------------------------* + * tdm_SCh_LSF_intra_pred_one_bit_enc() + * + * + *-------------------------------------------------------------------*/ + +static void tdm_SCh_LSF_intra_pred_one_bit_enc( + const float *lsf_secondary, /* i : secondary channel LSFs */ + const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ + float *pred_lsf_secondary, /* o : predicted secondary channel LSFs */ + const float *lsf_mean, /* i : secondary channel mean LSFs */ + const float *lsf_wgts_new, /* i : Improved wgts for LSFs */ + const float *Beta_Q_x, /* i : beta quantization values */ + int16_t *beta_index /* o : the quantization bits for beta (-1 if beta fixed) */ +) +{ + int16_t i; + float A_temp[M]; + float B_temp[M]; + float WD[2]; + float beta; + + for ( i = 0; i < M; i++ ) + { + A_temp[i] = lsf_secondary[i] - lsf_mean[i]; + B_temp[i] = lsf_mean[i] - tdm_lsfQ_PCh[i]; + } + + WD[0] = 0.; + WD[1] = 0.; + for ( i = 0; i < M; i++ ) + { + WD[0] += lsf_wgts_new[i] * SQR( A_temp[i] ) + 2.0f * Beta_Q_x[0] * lsf_wgts_new[i] * A_temp[i] * B_temp[i] + lsf_wgts_new[i] * SQR( Beta_Q_x[0] ) * SQR( B_temp[i] ); + WD[1] += lsf_wgts_new[i] * SQR( A_temp[i] ) + 2.0f * Beta_Q_x[1] * lsf_wgts_new[i] * A_temp[i] * B_temp[i] + lsf_wgts_new[i] * SQR( Beta_Q_x[1] ) * SQR( B_temp[i] ); + } + + if ( WD[0] < WD[1] ) + { + beta = Beta_Q_x[0]; + *beta_index = 0; + } + else + { + beta = Beta_Q_x[1]; + *beta_index = 1; + } + + /* pulling the LSFs closer to the avergae */ + for ( i = 0; i < M; i++ ) + { + pred_lsf_secondary[i] = beta * tdm_lsfQ_PCh[i] + ( 1.0f - beta ) * lsf_mean[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * tdm_SCh_LSF_intra_pred_one_bit_dec() + * + * + *-------------------------------------------------------------------*/ + +static void tdm_SCh_LSF_intra_pred_one_bit_dec( + const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ + float *pred_lsf_secondary, /* o : predicted secondary channel LSFs */ + const float *lsf_mean, /* i : secondary channel mean LSFs */ + const float *Beta_Q_x, /* i : beta quantization values */ + const int16_t beta_index /* i : the quantization bits for beta (-1 if beta fixed)*/ +) +{ + int16_t i; + float beta; + + beta = Beta_Q_x[beta_index]; + + /* pulling the LSFs closer to the avergae */ + for ( i = 0; i < M; i++ ) + { + pred_lsf_secondary[i] = beta * tdm_lsfQ_PCh[i] + ( 1.0f - beta ) * lsf_mean[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * tdm_SCh_lsf_reuse() + * + * + *-------------------------------------------------------------------*/ + +void tdm_SCh_lsf_reuse( + const int16_t enc_dec, /* i : encoder/decoder flag */ + const int32_t element_brate, /* i : element bitrate */ + float lsf_new[M], /* i/o: LSFs at the end of the frame */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + const float tdm_lsfQ_PCh[M], /* i : primary channel LSFs */ + const float lsf_wgts[M], /* i : LSF weights */ + int16_t beta_index[] /* i/o: quantization index */ +) +{ + const float *Beta_Q1bit_re_use; + + if ( element_brate <= IVAS_13k2 ) + { + Beta_Q1bit_re_use = &tdm_Beta_Q1bit_re_use_132[0]; + } + else if ( element_brate <= IVAS_16k4 ) + { + Beta_Q1bit_re_use = &tdm_Beta_Q1bit_re_use_164[0]; + } + else if ( element_brate <= IVAS_32k ) + { + Beta_Q1bit_re_use = &tdm_Beta_Q1bit_re_use_244_320[0]; + } + else + { + Beta_Q1bit_re_use = &tdm_Beta_Q1bit_re_use_480[0]; + } + + if ( enc_dec == ENC ) + { + tdm_SCh_LSF_intra_pred_one_bit_enc( lsf_new, tdm_lsfQ_PCh, lsf_new, tdm_LSF_MEAN_RE_USE, lsf_wgts, Beta_Q1bit_re_use, beta_index ); + } + else /* DEC */ + { + tdm_SCh_LSF_intra_pred_one_bit_dec( tdm_lsfQ_PCh, lsf_new, tdm_LSF_MEAN_RE_USE, Beta_Q1bit_re_use, *beta_index ); + } + + tdm_SCh_LSF_intra_pred_tri_diag_mat( lsf_new, tdm_LSF_MEAN_RE_USE_IN, tdm_LSF_MEAN_RE_USE_OUT, tdm_RE_USE_adaptive_beta_prd_diag_3 ); + + lsf2lsp( lsf_new, lsp_new, M, 12800 ); + + return; +} +#endif + +#endif diff --git a/lib_com/ivas_tools.c b/lib_com/ivas_tools.c new file mode 100644 index 0000000000..f5b75dd5f6 --- /dev/null +++ b/lib_com/ivas_tools.c @@ -0,0 +1,1200 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" +#include "ivas_rom_com.h" + +/*--------------------------------------------------------------- + * sumAbs() + * + * sum of absolute values + * ---------------------------------------------------------------*/ + +/*! r: sum abs of all vector elements */ +float sumAbs( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +) +{ + int16_t i; + float tmp; + + tmp = 0.0f; + for ( i = 0; i < lvec; i++ ) + { + tmp += fabsf( vec[i] ); + } + + return tmp; +} + +/*---------------------------------------------------------------------* + * mvc2c() + * + * Transfer the contents of vector x[] to vector y[] in char format + *---------------------------------------------------------------------*/ + +void mvc2c( + const uint8_t x[], /* i : input vector */ + uint8_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + + if ( n <= 0 ) + { + /* no need to transfer vectors with size 0 */ + return; + } + + if ( y < x ) + { + for ( i = 0; i < n; i++ ) + { + y[i] = x[i]; + } + } + else + { + for ( i = n - 1; i >= 0; i-- ) + { + y[i] = x[i]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_syn_output() + * + * Output ivas synthesis signal with compensation for saturation + * returns number of clipped samples + *-------------------------------------------------------------------*/ + +/*! r: number of clipped samples */ +uint32_t ivas_syn_output( + float synth[][L_FRAME48k], /* i/o: float synthesis signal */ + const int16_t output_frame, /* i : output frame length (one channel) */ + const int16_t n_channels, /* i : number of output channels */ + int16_t *synth_out /* o : integer 16 bits synthesis signal */ +) +{ + int16_t i, n; + int16_t synth_loc[L_FRAME48k]; + uint32_t noClipping = 0; + + /*-----------------------------------------------------------------* + * float to integer conversion with saturation control + *-----------------------------------------------------------------*/ + + for ( n = 0; n < n_channels; n++ ) + { + noClipping += mvr2s( synth[n], synth_loc, output_frame ); + +#ifdef DEBUG_MODE_LFE + if ( n == LFE_CHANNEL ) + { + dbgwrite( synth_loc, sizeof( int16_t ), output_frame, 1, "./lfe_out.raw" ); + } +#endif + for ( i = 0; i < output_frame; i++ ) + { + synth_out[i * n_channels + n] = synth_loc[i]; + } + } + + return noClipping; +} + +/*-------------------------------------------------------------------* + * mvr2r_inc() + * + * + *-------------------------------------------------------------------*/ + +void mvr2r_inc( + const float x[], /* i : input vector */ + const int16_t x_inc, /* i : increment for vector x[] */ + float y[], /* o : output vector */ + const int16_t y_inc, /* i : increment for vector y[] */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + int16_t ix; + int16_t iy; + + if ( n <= 0 ) + { + /* cannot transfer vectors with size 0 */ + return; + } + + if ( y < x ) + { + ix = 0; + iy = 0; + for ( i = 0; i < n; i++ ) + { + y[iy] = x[ix]; + ix += x_inc; + iy += y_inc; + } + } + else + { + ix = ( n - 1 ) * x_inc; + iy = ( n - 1 ) * y_inc; + for ( i = n - 1; i >= 0; i-- ) + { + y[iy] = x[ix]; + ix -= x_inc; + iy -= y_inc; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * v_add_inc() + * + * Addition of two vectors sample by sample with explicit increments + *-------------------------------------------------------------------*/ + +void v_add_inc( + const float x1[], /* i : Input vector 1 */ + const int16_t x_inc, /* i : Increment for input vector 1 */ + const float x2[], /* i : Input vector 2 */ + const int16_t x2_inc, /* i : Increment for input vector 2 */ + float y[], /* o : Output vector that contains vector 1 + vector 2 */ + const int16_t y_inc, /* i : increment for vector y[] */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + int16_t ix1 = 0; + int16_t ix2 = 0; + int16_t iy = 0; + + for ( i = 0; i < N; i++ ) + { + y[iy] = x1[ix1] + x2[ix2]; + ix1 += x_inc; + ix2 += x2_inc; + iy += y_inc; + } + + return; +} + + +/*-------------------------------------------------------------------* + * v_mult_inc() + * + * Multiplication of two vectors with explicit increments + *-------------------------------------------------------------------*/ + +void v_mult_inc( + const float x1[], /* i : Input vector 1 */ + const int16_t x1_inc, /* i : Increment for input vector 1 */ + const float x2[], /* i : Input vector 2 */ + const int16_t x2_inc, /* i : Increment for input vector 1 */ + float y[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t y_inc, /* i : increment for vector y[i] */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + int16_t ix1 = 0; + int16_t ix2 = 0; + int16_t iy = 0; + + for ( i = 0; i < N; i++ ) + { + y[iy] = x1[ix1] * x2[ix2]; + ix1 += x1_inc; + ix2 += x2_inc; + iy += y_inc; + } + + return; +} + +/*-------------------------------------------------------------------* + * v_addc() + * + * Addition of constant to vector + *-------------------------------------------------------------------*/ + +void v_addc( + const float x[], /* i : Input vector */ + const float c, /* i : Constant */ + float y[], /* o : Output vector that contains c*x */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = c + x[i]; + } + + return; +} + +/*-------------------------------------------------------------------* + * v_min() + * + * minimum of two vectors + *-------------------------------------------------------------------*/ + +void v_min( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = ( x1[i] < x2[i] ) ? x1[i] : x2[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * v_sqrt() + * + * square root of vector + *-------------------------------------------------------------------*/ + +void v_sqrt( + const float x[], /* i : Input vector */ + float y[], /* o : Output vector that contains sqrt(x) */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = sqrtf( x[i] ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * v_sub_s() + * + * Subtraction of two vectors + *-------------------------------------------------------------------*/ + +void v_sub_s( + const int16_t x1[], /* i : Input vector 1 */ + const int16_t x2[], /* i : Input vector 2 */ + int16_t y[], /* o : Output vector that contains vector 1 - vector 2 */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = x1[i] - x2[i]; + } + + return; +} + + +/*---------------------------------------------------------------------* + * dot_product_cholesky() + * + * Calculates dot product of type x'*A*A'*x, where x is column vector of size m, + * and A is a Cholesky decomposition of some Hermitian matrix S whose size is m*m. + * Therefore, S=A*A' where A is upper triangular matrix of size (m*m+m)/2 (zeros ommitted, column-wise) + *---------------------------------------------------------------------*/ + +/*! r: the dot product x'*A*A'*x */ +float dot_product_cholesky( + const float *x, /* i : vector x */ + const float *A, /* i : Cholesky matrix A */ + const int16_t N /* i : vector & matrix size */ +) +{ + int16_t i, j; + float suma, tmp_sum; + const float *pt_x, *pt_A; + + pt_A = A; + suma = 0; + + for ( i = 0; i < N; i++ ) + { + tmp_sum = 0; + pt_x = x; + for ( j = 0; j <= i; j++ ) + { + tmp_sum += *pt_x++ * *pt_A++; + } + + suma += tmp_sum * tmp_sum; + } + + return suma; +} + +/*---------------------------------------------------------------------* + * v_mult_mat() + * + * Multiplication of row vector x by matrix A, where x has size Nr and + * A has size Nr x Nc ans it is stored column-wise in memory. + * The resulting row vector y has size Nc + *---------------------------------------------------------------------*/ + +void v_mult_mat( + float *y, /* o : the product x*A */ + const float *x, /* i : vector x */ + const float *A, /* i : matrix A */ + const int16_t Nr, /* i : number of rows */ + const int16_t Nc /* i : number of columns */ +) +{ + int16_t i, j; + const float *pt_x, *pt_A; + float tmp_y[MAX_V_MULT_MAT]; + float *pt_y; + + pt_y = tmp_y; + pt_A = A; + for ( i = 0; i < Nc; i++ ) + { + pt_x = x; + *pt_y = 0; + for ( j = 0; j < Nr; j++ ) + { + *pt_y += ( *pt_x++ ) * ( *pt_A++ ); + } + pt_y++; + } + + mvr2r( tmp_y, y, Nc ); + + return; +} + + +/*---------------------------------------------------------------------* + * logsumexp() + * + * Compute logarithm of the sum of exponentials of input vector in a numerically stable way + *---------------------------------------------------------------------*/ + +/*! r: log(sum(exp(x)) of the input array x */ +float logsumexp( + const float x[], /* i : input array x */ + const int16_t N /* i : number of elements in array x */ +) +{ + float max_exp; + float sum; + int16_t i; + + max_exp = x[0]; + sum = 0; + for ( i = 1; i < N; i++ ) + { + if ( x[i] > max_exp ) + { + max_exp = x[i]; + } + } + + for ( i = 0; i < N; i++ ) + { + sum += expf( x[i] - max_exp ); + } + + return logf( sum ) + max_exp; +} + + +/*---------------------------------------------------------------------* + * lin_interp() + * + * Linearly maps x from source range to the target range + *---------------------------------------------------------------------*/ + +/*! r: mapped output value */ +float lin_interp( + const float x, /* i : the value to be mapped */ + const float x1, /* i : source range interval: low end */ + const float y1, /* i : source range interval: high end */ + const float x2, /* i : target range interval: low */ + const float y2, /* i : target range interval: high */ + const int16_t flag_sat /* i : flag to indicate whether to apply saturation */ +) +{ + if ( x2 - x1 == 0 ) + { + return y1; + } + else if ( flag_sat ) + { + if ( x >= max( x1, x2 ) ) + { + return x1 > x2 ? y1 : y2; + } + else if ( x <= min( x1, x2 ) ) + { + return x1 < x2 ? y1 : y2; + } + } + + return y1 + ( x - x1 ) * ( y2 - y1 ) / ( x2 - x1 ); +} + + +/*-------------------------------------------------------------------* + * check_bounds() + * + * Ensure the input value is within the given limits + *-------------------------------------------------------------------*/ + +void check_bounds( + float *value, /* i/o: Input value / Adjusted value */ + const float low, /* i : Low limit */ + const float high /* i : High limit */ +) +{ + *value = min( max( *value, low ), high ); + + return; +} + +/*-------------------------------------------------------------------* + * check_bounds_s() + * + * Ensure the input value is within the given limits + *-------------------------------------------------------------------*/ + +void check_bounds_s( + int16_t *value, /* i/o: Input value / Adjusted value */ + const int16_t low, /* i : Low limit */ + const int16_t high /* i : High limit */ +) +{ + *value = min( max( *value, low ), high ); + + return; +} + + +/****************************************************************************/ +/* matrix functions */ +/* matrices are ordered column-wise in memory */ +/****************************************************************************/ + +/*---------------------------------------------------------------------* + * matrix product + * + * comput the matrix product of two matrices (Z=X*Y) + *---------------------------------------------------------------------*/ + +/*! r: success or failure */ +int16_t matrix_product( + const float *X, /* i : left hand matrix */ + const int16_t rowsX, /* i : number of rows of the left hand matrix */ + const int16_t colsX, /* i : number of columns of the left hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the left hand matrix prior to the multiplication */ + const float *Y, /* i : right hand matrix */ + const int16_t rowsY, /* i : number of rows of the right hand matrix */ + const int16_t colsY, /* i : number of columns of the right hand matrix */ + const int16_t transpY, /* i : flag indicating the transposition of the right hand matrix prior to the multiplication */ + float *Z /* o : resulting matrix after the matrix multiplication */ +) +{ + int16_t i, j, k; + float *Zp = Z; + + /* Processing */ + if ( transpX == 1 && transpY == 0 ) /* We use X transpose */ + { + if ( rowsX != rowsY ) + { + return EXIT_FAILURE; + } + for ( j = 0; j < colsY; ++j ) + { + for ( i = 0; i < colsX; ++i ) + { + ( *Zp ) = 0.0f; + for ( k = 0; k < rowsX; ++k ) + { + ( *Zp ) += X[k + i * rowsX] * Y[k + j * rowsY]; + } + Zp++; + } + } + } + else if ( transpX == 0 && transpY == 1 ) /* We use Y transpose */ + { + if ( colsX != colsY ) + { + return EXIT_FAILURE; + } + for ( j = 0; j < rowsY; ++j ) + { + for ( i = 0; i < rowsX; ++i ) + { + ( *Zp ) = 0.0f; + for ( k = 0; k < colsX; ++k ) + { + ( *Zp ) += X[i + k * rowsX] * Y[j + k * rowsY]; + } + Zp++; + } + } + } + else if ( transpX == 1 && transpY == 1 ) /* We use both transpose */ + { + if ( rowsX != colsY ) + { + return EXIT_FAILURE; + } + for ( j = 0; j < rowsY; ++j ) + { + for ( i = 0; i < colsX; ++i ) + { + ( *Zp ) = 0.0f; + for ( k = 0; k < colsX; ++k ) + { + ( *Zp ) += X[k + i * rowsX] * Y[j + k * rowsY]; + } + + Zp++; + } + } + } + else /* Regular case */ + { + if ( colsX != rowsY ) + { + return EXIT_FAILURE; + } + + for ( j = 0; j < colsY; ++j ) + { + for ( i = 0; i < rowsX; ++i ) + { + ( *Zp ) = 0.0f; + for ( k = 0; k < colsX; ++k ) + { + ( *Zp ) += X[i + k * rowsX] * Y[k + j * rowsY]; + } + Zp++; + } + } + } + + return EXIT_SUCCESS; +} + + +/*---------------------------------------------------------------------* + * matrix_diag_product + * + * compute the product of a matrix with a diagonal of a matrix (Z=X*diag(Y)) + *---------------------------------------------------------------------*/ + +/*! r: success or failure */ +int16_t matrix_diag_product( + const float *X, /* i : left hand matrix */ + const int16_t rowsX, /* i : number of rows of the left hand matrix */ + const int16_t colsX, /* i : number of columns of the left hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the left hand matrix prior to the multiplication */ + const float *Y, /* i : right hand diagonal matrix as vector containing the diagonal elements */ + const int16_t entriesY, /* i : number of entries in the diagonal */ + float *Z /* o : resulting matrix after the matrix multiplication */ +) +{ + int16_t i, j; + float *Zp = Z; + + /* Processing */ + if ( transpX == 1 ) /* We use X transpose */ + { + if ( rowsX != entriesY ) + { + return EXIT_FAILURE; + } + for ( j = 0; j < entriesY; ++j ) + { + for ( i = 0; i < colsX; ++i ) + { + *( Zp++ ) = X[j + i * rowsX] * Y[j]; + } + } + } + else /* Regular case */ + { + if ( colsX != entriesY ) + { + return EXIT_FAILURE; + } + + for ( j = 0; j < entriesY; ++j ) + { + for ( i = 0; i < rowsX; ++i ) + { + *( Zp++ ) = *( X++ ) * Y[j]; + } + } + } + + return EXIT_SUCCESS; +} + +/*---------------------------------------------------------------------* + * diag_matrix_product() + * + * compute the matrix product of a diagonal matrix X with a full matrix Y (Z=diag(Y)*X) + *---------------------------------------------------------------------*/ + +/*! r: success or failure */ +int16_t diag_matrix_product( + const float *Y, /* i : left hand diagonal matrix as vector containing the diagonal elements */ + const int16_t entriesY, /* i : length of the diagonal of the left hand matrix */ + const float *X, /* i : right hand matrix */ + const int16_t rowsX, /* i : number of rows of the right hand matrix */ + const int16_t colsX, /* i : number of columns of the right hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the right hand matrix prior to the multiplication */ + float *Z /* o : resulting matrix after the matrix multiplication */ +) +{ + int16_t i, j; + float *Zp = Z; + + /* Processing */ + if ( transpX == 1 ) /* We use X transpose */ + { + if ( colsX != entriesY ) + { + return EXIT_FAILURE; + } + for ( i = 0; i < rowsX; ++i ) + { + for ( j = 0; j < entriesY; ++j ) + { + *( Zp++ ) = X[i + j * rowsX] * Y[j]; + } + } + } + else /* Regular case */ + { + if ( rowsX != entriesY ) + { + return EXIT_FAILURE; + } + for ( i = 0; i < colsX; ++i ) + { + for ( j = 0; j < entriesY; ++j ) + { + *( Zp++ ) = *( X++ ) * Y[j]; + } + } + } + + return EXIT_SUCCESS; +} + + +/*---------------------------------------------------------------------* + * matrix_product_diag() + * + * compute only the main diagonal of X*Y (Z=diag(X*Y)) + *---------------------------------------------------------------------*/ + +/*! r: success or failure */ +int16_t matrix_product_diag( + const float *X, /* i : left hand matrix */ + const int16_t rowsX, /* i : number of rows of the left hand matrix */ + const int16_t colsX, /* i : number of columns of the left hand matrix */ + const int16_t transpX, /* i : flag indicating the transposition of the left hand matrix prior to the multiplication */ + const float *Y, /* i : right hand matrix */ + const int16_t rowsY, /* i : number of rows of the right hand matrix */ + const int16_t colsY, /* i : number of columns of the right hand matrix */ + const int16_t transpY, /* i : flag indicating the transposition of the right hand matrix prior to the multiplication */ + float *Z /* o : resulting matrix after the matrix multiplication */ +) +{ + int16_t j, k; + float *Zp = Z; + + /* Processing */ + if ( transpX == 1 && transpY == 0 ) /* We use X transpose */ + { + if ( rowsX != rowsY ) + { + return EXIT_FAILURE; + } + + for ( j = 0; j < colsY; ++j ) + { + ( *Zp ) = 0.0f; + for ( k = 0; k < rowsX; ++k ) + { + ( *Zp ) += X[k + j * rowsX] * Y[k + j * rowsY]; + } + Zp++; + } + } + else if ( transpX == 0 && transpY == 1 ) /* We use Y transpose */ + { + if ( colsX != colsY ) + { + return EXIT_FAILURE; + } + for ( j = 0; j < rowsY; ++j ) + { + ( *Zp ) = 0.0f; + for ( k = 0; k < colsX; ++k ) + { + ( *Zp ) += X[j + k * rowsX] * Y[j + k * rowsY]; + } + Zp++; + } + } + else if ( transpX == 1 && transpY == 1 ) /* We use both transpose */ + { + if ( rowsX != colsY ) + { + return EXIT_FAILURE; + } + + for ( j = 0; j < rowsY; ++j ) + { + + ( *Zp ) = 0.0f; + for ( k = 0; k < colsX; ++k ) + { + ( *Zp ) += X[k + j * rowsX] * Y[j + k * rowsY]; + } + + Zp++; + } + } + else /* Regular case */ + { + if ( colsX != rowsY ) + { + return EXIT_FAILURE; + } + + for ( j = 0; j < colsY; ++j ) + { + ( *Zp ) = 0.0f; + for ( k = 0; k < colsX; ++k ) + { + ( *Zp ) += X[j + k * rowsX] * Y[k + j * rowsY]; + } + Zp++; + } + } + + return EXIT_SUCCESS; +} + + +/*---------------------------------------------------------------------* + * cmplx_matrix_square() + * + * compute the square of a complex matrix (Z=X*X) + *---------------------------------------------------------------------*/ + +/*! r: success or failure */ +void cmplx_matrix_square( + const float *realX, /* i : real part of the matrix */ + const float *imagX, /* i : imaginary part of the matrix */ + const int16_t mRows, /* i : number of rows of the matrix */ + const int16_t nCols, /* i : number of columns of the matrix */ + float *realZ, /* o : real part of the resulting matrix */ + float *imagZ /* o : imaginary part of the resulting matrix */ +) +{ + int16_t i, j, k; + float *realZp, *imagZp; + const float *p_real1, *p_real2, *p_imag1, *p_imag2; + + /* resulting matrix is hermitean, we only need to calc the upper triangle */ + /* we assume transposition needed */ + + /* column*column = column/column */ + for ( i = 0; i < nCols; i++ ) + { + for ( j = i; j < nCols; j++ ) + { + p_real1 = realX + i * mRows; + p_imag1 = imagX + i * mRows; + p_real2 = realX + j * mRows; + p_imag2 = imagX + j * mRows; + realZp = realZ + ( i + nCols * j ); + imagZp = imagZ + ( i + nCols * j ); + *( realZp ) = 0.0f; + *( imagZp ) = 0.0f; + + for ( k = 0; k < mRows; k++ ) + { + *( imagZp ) += *( p_real1 ) * ( *( p_imag2 ) ) - ( *( p_real2 ) ) * ( *( p_imag1 ) ); + *( realZp ) += *( p_real1++ ) * ( *( p_real2++ ) ) + *( p_imag1++ ) * ( *( p_imag2++ ) ); + } + } + } + + /* fill lower triangle */ + for ( i = 1; i < nCols; i++ ) + { + for ( j = 0; j < i; j++ ) + { + realZ[i + nCols * j] = realZ[j + nCols * i]; + imagZ[i + nCols * j] = imagZ[j + nCols * i]; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * v_multc_acc() + * + * Multiplication of vector by constant, accumulate to the output + *-------------------------------------------------------------------*/ + +void v_multc_acc( + const float x[], /* i : Input vector */ + const float c, /* i : Constant */ + float y[], /* o : Output vector that contains y + c*x */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] += c * x[i]; + } + + return; +} + +/*---------------------------------------------------------------------* + * lls_interp_n() + * + * Linear least squares interpolation of an input vector + * The function calculates the slope 'a' and the offset 'b' of a LLS estimate for an input vector x such that + * y_i = a*i + b where i=1,..,N and (a,b) = min(a,b) [sum_N[(y_i - x_i)^2]] + * the interpolated vector is return as x[], if requested + *---------------------------------------------------------------------*/ + + +void lls_interp_n( + float x[], /* i/o: input/output vector */ + const int16_t N, /* i : length of the input vector */ + float *a, /* o : calculated slope */ + float *b, /* o : calculated offset */ + int16_t upd /* i : use 1 to update x[] with the interpolated output */ +) +{ + int16_t i; + const float n_i[11] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + const float one_by_n[11] = { 0, 1, 0.5f, 0.333f, 0.25f, 0.2f, 0.1666f, 0.14286f, 0.125f, 0.111111f, 0.1f }; + const float sum_i[12] = { 0, 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55 }; + const float sum_ii[12] = { 0, 0, 1, 5, 14, 30, 55, 91, 140, 204, 285, 385 }; + float sum_x, sum_ix, slope, offset; + + assert( N > 0 && N <= 10 ); + + sum_x = sum_f( x, N ); + sum_ix = dotp( x, n_i, N ); + + slope = ( N * sum_ix - sum_i[N] * sum_x ) / ( N * sum_ii[N] - sum_i[N] * sum_i[N] ); + offset = ( sum_x - slope * sum_i[N] ) * one_by_n[N]; + + if ( upd ) + { + for ( i = 0; i < N; i++ ) + { + x[i] = slope * i + offset; + } + } + + if ( a != NULL ) + { + *a = slope; + } + + if ( b != NULL ) + { + *b = offset; + } + + return; +} + + +/*-------------------------------------------------------------------* + * panning_wrap_angles() + * + * Wrap angles for amplitude panning to the range: + * azimuth = (-180, 180] + * elevation = [-90, 90] + * Considers direction changes from large elevation values + *-------------------------------------------------------------------*/ + +void panning_wrap_angles( + const float azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ + const float ele_deg, /* i : elevation in degrees for panning direction (positive up) */ + float *azi_wrapped, /* o : wrapped azimuth component */ + float *ele_wrapped /* o : wrapped elevation component */ +) +{ + float azi, ele; + + azi = azi_deg; + ele = ele_deg; + + /* Special case when elevation is a multiple of 90; azimuth is irrelevant */ + if ( ( ele != 0 ) && ( fmodf( ele, 90 ) == 0 ) ) + { + azi = 0; + while ( fabsf( ele ) > 90 ) + { + ele -= 360; + } + } + else + { + /* Wrap elevation and adjust azimuth accordingly */ + while ( fabsf( ele ) > 90 ) + { + /* Flip to other hemisphere */ + azi += 180; + + /* Compensate elevation accordingly */ + if ( ele > 90 ) + { + ele -= 180; + } + else if ( ele < -90 ) + { + ele += 180; + } + } + + /* Wrap azimuth value */ + while ( fabsf( azi ) > 180 ) + { + azi = fmodf( azi + 180, 360 ); + if ( azi < 0 ) + { + azi += 360; + } + azi -= 180; + } + } + + /* Set -180 to 180 for deduplication purposes; angles are otherwise identical */ + if ( azi == -180 ) + { + azi = 180; + } + + *azi_wrapped = azi; + *ele_wrapped = ele; + + return; +} + +/*-------------------------------------------------------------------------* + * v_sort_ind() + * + * Sort a float array + * (modified version of v_sort() to return an index array) + *-------------------------------------------------------------------------*/ + +void v_sort_ind( + float *x, /* i/o: Vector to be sorted */ + int16_t *idx, /* o : Original index positions */ + const int16_t len /* i : vector length */ +) +{ + int16_t i, j; + float tempr; + int16_t tempi; + + for ( i = 0; i < len; i++ ) + { + idx[i] = i; + } + + for ( i = len - 2; i >= 0; i-- ) + { + tempr = x[i]; + tempi = idx[i]; + for ( j = i + 1; ( j < len ) && ( tempr > x[j] ); j++ ) + { + x[j - 1] = x[j]; + idx[j - 1] = idx[j]; + } + x[j - 1] = tempr; + idx[j - 1] = tempi; + } + + return; +} + + +/*-------------------------------------------------------------------* + * is_IVAS_bitrate() + * + * check if the bitrate is IVAS supported active bitrate + *-------------------------------------------------------------------*/ + +/*! r: flag indicating a valid bitrate */ +int16_t is_IVAS_bitrate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + int16_t j; + + j = SIZE_IVAS_BRATE_TBL - IVAS_NUM_ACTIVE_BRATES; /* skip NO_DATA and SID bitrates */ + while ( j < SIZE_IVAS_BRATE_TBL && ivas_total_brate != ivas_brate_tbl[j] ) + { + j++; + } + + if ( j >= SIZE_IVAS_BRATE_TBL ) + { + return 0; + } + + return 1; +} + + +/*-------------------------------------------------------------------* + * is_DTXrate() + * + * identify DTX frame bitrates + *-------------------------------------------------------------------*/ + +int16_t is_DTXrate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + int16_t dtx_rate_flag = 0; + + if ( is_SIDrate( ivas_total_brate ) || ( ivas_total_brate == FRAME_NO_DATA ) ) + { + dtx_rate_flag = 1; + } + + return dtx_rate_flag; +} + +/*-------------------------------------------------------------------* + * is_SIDrate() + * + * identify SID frame bitrates + *-------------------------------------------------------------------*/ + +int16_t is_SIDrate( + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + int16_t sid_rate_flag = 0; + + if ( ( ivas_total_brate == SID_1k75 ) || + ( ivas_total_brate == SID_2k40 ) || + ( ivas_total_brate == IVAS_SID_4k4 ) || + ( ivas_total_brate == IVAS_SID_5k ) ) + { + sid_rate_flag = 1; + } + + return sid_rate_flag; +} + + +/*-------------------------------------------------------------------* + * rand_triangular_signed() + * + * generate a random value with a triangular pdf in [-0.5, 0.5] + *-------------------------------------------------------------------*/ + +float rand_triangular_signed( + int16_t *seed ) +{ + float rand_val; + + rand_val = own_random( seed ) * OUTMAX_INV; + if ( rand_val <= 0.0f ) + { + /* rand_val in [-1, 0] */ + return 0.5f * sqrtf( rand_val + 1.0f ) - 0.5f; + } + else + { + /* rand_val in (0, 1) */ + return 0.5f - 0.5f * sqrtf( 1.0f - rand_val ); + } +} diff --git a/lib_com/ivas_transient_det.c b/lib_com/ivas_transient_det.c new file mode 100644 index 0000000000..0b398ec9d1 --- /dev/null +++ b/lib_com/ivas_transient_det.c @@ -0,0 +1,326 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "math.h" +#include "wmops.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_stat_com.h" + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define IVAS_TDET_PARM_ENV_EPS ( 1e-5f ) +#define IVAS_TDET_DUCK_MULT_FAC ( 1.1f ) +#define IVAS_TDET_PARM_TRANS_THR ( 0.1f ) +#define IVAS_TDET_ONLY ( 1 ) + +/*env_hpf*/ +#define IVAS_C_HPF_48k ( 0.675231906655777f ) +#define IVAS_C_HPF_32k ( 0.554854910159853f ) +#define IVAS_C_HPF_16k ( 0.307863971328499f ) + +/*env_fast*/ +#define IVAS_C_FAST_48k ( 0.995842001845110f ) +#define IVAS_C_FAST_32k ( 0.993769490623395f ) +#define IVAS_C_FAST_16k ( 0.987577800493881f ) + +/*env_slow*/ +#define IVAS_C_SLOW_48k ( 0.999739617238810f ) +#define IVAS_C_SLOW_32k ( 0.999609451284012f ) +#define IVAS_C_SLOW_16k ( 0.999219055096324f ) + +/*induck*/ +#define IVAS_C_IN_DUCK_48k ( 0.999583420126834f ) +#define IVAS_C_IN_DUCK_32k ( 0.999375195271816f ) +#define IVAS_C_IN_DUCK_16k ( 0.998750780924581f ) + +/*outduck*/ +#define IVAS_C_OUT_DUCK_48k ( 0.999583420126834f ) +#define IVAS_C_OUT_DUCK_32k ( 0.999375195271816f ) +#define IVAS_C_OUT_DUCK_16k ( 0.998750780924581f ) + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_transient_det_init() + * + * Trans det init fucntion + *-----------------------------------------------------------------------------------------*/ + +static void ivas_transient_det_init( + ivas_trans_det_state_t *hTranDet, /* i/o: SPAR TD handle */ + const int32_t sampling_rate /* i : sampling rate */ +) +{ + float filt_coeff_arr[3][IVAS_BIQUAD_FILT_LEN << 1] = { { 0 } }; + + hTranDet->in_duck_gain = 1.0f; + hTranDet->out_duck_gain = 1.0f; + + switch ( sampling_rate ) + { + case 48000: + /*env_hpf*/ + filt_coeff_arr[0][0] = IVAS_C_HPF_48k; + filt_coeff_arr[0][1] = -IVAS_C_HPF_48k; + filt_coeff_arr[0][3] = 1.0f; + filt_coeff_arr[0][4] = -IVAS_C_HPF_48k; + /*env_fast*/ + filt_coeff_arr[1][0] = 1.0f - IVAS_C_FAST_48k; + filt_coeff_arr[1][3] = 1.0f; + filt_coeff_arr[1][4] = -IVAS_C_FAST_48k; + /*env_slow*/ + filt_coeff_arr[2][0] = 1.0f - IVAS_C_SLOW_48k; + filt_coeff_arr[2][3] = 1.0f; + filt_coeff_arr[2][4] = -IVAS_C_SLOW_48k; + hTranDet->in_duck_coeff = IVAS_C_IN_DUCK_48k; + hTranDet->out_duck_coeff = IVAS_C_OUT_DUCK_48k; + break; + case 32000: + /*env_hpf*/ + filt_coeff_arr[0][0] = IVAS_C_HPF_32k; + filt_coeff_arr[0][1] = -IVAS_C_HPF_32k; + filt_coeff_arr[0][3] = 1.0f; + filt_coeff_arr[0][4] = -IVAS_C_HPF_32k; + /*env_fast*/ + filt_coeff_arr[1][0] = 1.0f - IVAS_C_FAST_32k; + filt_coeff_arr[1][3] = 1.0f; + filt_coeff_arr[1][4] = -IVAS_C_FAST_32k; + /*env_slow*/ + filt_coeff_arr[2][0] = 1.0f - IVAS_C_SLOW_32k; + filt_coeff_arr[2][3] = 1.0f; + filt_coeff_arr[2][4] = -IVAS_C_SLOW_32k; + hTranDet->in_duck_coeff = IVAS_C_IN_DUCK_32k; + hTranDet->out_duck_coeff = IVAS_C_OUT_DUCK_32k; + break; + case 16000: + /*env_hpf*/ + filt_coeff_arr[0][0] = IVAS_C_HPF_16k; + filt_coeff_arr[0][1] = -IVAS_C_HPF_16k; + filt_coeff_arr[0][3] = 1.0f; + filt_coeff_arr[0][4] = -IVAS_C_HPF_16k; + /*env_fast*/ + filt_coeff_arr[1][0] = 1.0f - IVAS_C_FAST_16k; + filt_coeff_arr[1][3] = 1.0f; + filt_coeff_arr[1][4] = -IVAS_C_FAST_16k; + /*env_slow*/ + filt_coeff_arr[2][0] = 1.0f - IVAS_C_SLOW_16k; + filt_coeff_arr[2][3] = 1.0f; + filt_coeff_arr[2][4] = -IVAS_C_SLOW_16k; + hTranDet->in_duck_coeff = IVAS_C_IN_DUCK_16k; + hTranDet->out_duck_coeff = IVAS_C_OUT_DUCK_16k; + break; + } + + ivas_filters_init( &hTranDet->env_hpf, (const float *) filt_coeff_arr[0], IVAS_FILTER_ORDER_1 ); + ivas_filters_init( &hTranDet->env_fast, (const float *) filt_coeff_arr[1], IVAS_FILTER_ORDER_1 ); + ivas_filters_init( &hTranDet->env_slow, (const float *) filt_coeff_arr[2], IVAS_FILTER_ORDER_1 ); + + hTranDet->duck_mult_fac = IVAS_TDET_DUCK_MULT_FAC; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_transient_det_open() + * + * Allocate and initialize SPAR TD handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_transient_det_open( + ivas_trans_det_state_t **hTranDet_in, /* i/o: SPAR TD handle */ + const int32_t sampling_rate /* i : sampling rate */ +) +{ + ivas_trans_det_state_t *hTranDet; + + if ( ( hTranDet = (ivas_trans_det_state_t *) count_malloc( sizeof( ivas_trans_det_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR TD\n" ); + } + + ivas_transient_det_init( hTranDet, sampling_rate ); + + *hTranDet_in = hTranDet; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_transient_det_close() + * + * Deallocate and initialize SPAR TD handle + *------------------------------------------------------------------------*/ + +void ivas_spar_transient_det_close( + ivas_trans_det_state_t **hTranDet /* i/o: SPAR TD handle */ +) +{ + if ( hTranDet == NULL || *hTranDet == NULL ) + { + return; + } + + count_free( *hTranDet ); + *hTranDet = NULL; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_transient_det_process() + * + * Transient detection process call + *-----------------------------------------------------------------------------------------*/ + +int16_t ivas_transient_det_process( + ivas_trans_det_state_t *hTranDet, /* i/o: SPAR TD handle */ + float *pIn_pcm, /* i : input audio channels */ + const int16_t frame_len /* i : frame length in samples */ +) +{ + float mem = hTranDet->in_duck_gain; + int16_t trans; + + ivas_td_decorr_get_ducking_gains( hTranDet, pIn_pcm, NULL, NULL, frame_len, IVAS_TDET_ONLY ); + + if ( mem - hTranDet->in_duck_gain > IVAS_TDET_PARM_TRANS_THR ) + { + trans = 1; + } + else + { + trans = 0; + } + + return trans; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_calc_duck_gain() + * + * Calculate ducking gain utility + *-----------------------------------------------------------------------------------------*/ + +static float ivas_calc_duck_gain( + const float duck_gain, + const float duck_coeff, + const float env_1, + const float env_2, + const float duck_mult_fac ) +{ + float duck_gain_out; + + duck_gain_out = ( duck_gain - 1 ) * duck_coeff + 1; + + if ( ( duck_mult_fac * env_1 ) < duck_gain_out * env_2 ) + { + duck_gain_out = duck_mult_fac * ( env_1 / env_2 ); + } + + return duck_gain_out; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_td_decorr_get_ducking_gains() + * + * Calculate in/out ducking gains + *-----------------------------------------------------------------------------------------*/ + +void ivas_td_decorr_get_ducking_gains( + ivas_trans_det_state_t *hTranDet, + float *pIn_pcm, + float *pIn_duck_gains, + float *pOut_duck_gains, + const int16_t frame_len, + const int16_t tdet_flag ) +{ + int16_t i; + float e_fast[L_FRAME48k], e_slow[L_FRAME48k]; + float in_duck_gain = hTranDet->in_duck_gain; + float out_duck_gain = hTranDet->out_duck_gain; + float in_duck_coeff = hTranDet->in_duck_coeff; + float out_duck_coeff = hTranDet->out_duck_coeff; + float duck_mult_fac = hTranDet->duck_mult_fac; + + mvr2r( pIn_pcm, e_fast, frame_len ); + + /* env hpf */ + ivas_filter_process( &hTranDet->env_hpf, e_fast, frame_len ); + + for ( i = 0; i < frame_len; i++ ) + { + e_fast[i] = (float) fabs( e_fast[i] ) + IVAS_TDET_PARM_ENV_EPS; + e_slow[i] = e_fast[i]; + } + + /* env fast*/ + ivas_filter_process( &hTranDet->env_fast, e_fast, frame_len ); + + /* env slow */ + ivas_filter_process( &hTranDet->env_slow, e_slow, frame_len ); + + if ( tdet_flag == IVAS_TDET_ONLY ) + { + for ( i = 0; i < frame_len; i++ ) + { + in_duck_gain = ivas_calc_duck_gain( in_duck_gain, in_duck_coeff, e_slow[i], e_fast[i], duck_mult_fac ); + } + hTranDet->in_duck_gain = in_duck_gain; + } + else + { + for ( i = 0; i < frame_len; i++ ) + { + in_duck_gain = ivas_calc_duck_gain( in_duck_gain, in_duck_coeff, e_slow[i], e_fast[i], duck_mult_fac ); + pIn_duck_gains[i] = in_duck_gain; + out_duck_gain = ivas_calc_duck_gain( out_duck_gain, out_duck_coeff, e_fast[i], e_slow[i], duck_mult_fac ); + pOut_duck_gains[i] = out_duck_gain; + } + hTranDet->in_duck_gain = in_duck_gain; + hTranDet->out_duck_gain = out_duck_gain; + } + + return; +} diff --git a/lib_com/lag_wind.c b/lib_com/lag_wind.c new file mode 100644 index 0000000000..dba9f04de4 --- /dev/null +++ b/lib_com/lag_wind.c @@ -0,0 +1,167 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define kLagWinThGain1 0.6f +#define kLagWinThGain2 0.3f + + +/*-------------------------------------------------------------* + * procedure lag_wind() * + * ~~~~~~~~~ * + * lag windowing of the autocorrelations * + *-------------------------------------------------------------*/ + +void lag_wind( + float r[], /* i/o: autocorrelations */ + const int16_t m, /* i : order of LP filter */ + const int32_t sr_core, /* i : sampling rate */ + const int16_t strength /* i : LAGW_WEAK, LAGW_MEDIUM, or LAGW_STRONG */ +) +{ + int16_t i; + const float *wnd; + + assert( 0 <= strength && strength <= NUM_LAGW_STRENGTHS ); + + switch ( sr_core ) + { + case 8000: + assert( m <= 16 ); + assert( strength == LAGW_STRONG ); + wnd = lag_window_8k; + break; + case 12800: + assert( m <= 16 ); + wnd = lag_window_12k8[strength]; + break; + case 16000: + assert( m <= 16 ); + wnd = lag_window_16k[strength]; + break; + case 24000: + case 25600: + assert( m <= 16 ); + wnd = lag_window_25k6[strength]; + break; + case 32000: + assert( m <= 16 ); + wnd = lag_window_32k[strength]; + break; + case 48000: + assert( m <= 16 ); + assert( strength == LAGW_STRONG ); + wnd = lag_window_48k; + break; + default: + assert( !"Lag window not implemented for this sampling rate" ); + return; + } + + for ( i = 0; i <= m; ++i ) + { + r[i] *= wnd[i]; + } + + return; +} + +/*-------------------------------------------------------------* + * procedure adapt_lag_wind() + * + * + *-------------------------------------------------------------*/ + +void adapt_lag_wind( + float r[], /* i/o: autocorrelations */ + const int16_t m, /* i : order of LP filter */ + const int16_t Top, /* i : open loop pitch lags from curr. frame (or NULL if n/a) */ + const float Tnc, /* i : open loop pitch gains from curr. frame (NULL if n/a) */ + const int32_t sr_core /* i : core sampling rate */ +) +{ + int16_t strength; + int16_t pitch_lag; + float pitch_gain; + + pitch_lag = (int16_t) Top; + pitch_gain = (float) Tnc; + + if ( pitch_lag < 80 ) + { + if ( pitch_gain > kLagWinThGain1 ) + { + strength = LAGW_STRONG; + } + else + { + strength = LAGW_MEDIUM; + } + } + else if ( pitch_lag < 160 ) + { + if ( pitch_gain > kLagWinThGain2 ) + { + strength = LAGW_MEDIUM; + } + else + { + strength = LAGW_WEAK; + } + } + else + { + strength = LAGW_WEAK; + } + + lag_wind( r, m, sr_core, strength ); + + return; +} diff --git a/lib_com/lerp.c b/lib_com/lerp.c new file mode 100644 index 0000000000..4708dc5ca4 --- /dev/null +++ b/lib_com/lerp.c @@ -0,0 +1,183 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------*/ + +static void lerp_proc( const float *f, float *f_out, const int16_t bufferNewSize, const int16_t bufferOldSize ); + + +/*-------------------------------------------------------------* + * procedure lerp() * + * * + * * + *-------------------------------------------------------------*/ + +void lerp( + const float *f, + float *f_out, + const int16_t bufferNewSize, + const int16_t bufferOldSize_inp ) +{ + float maxFac; + int16_t bufferOldSize, tmpNewSize; + + maxFac = 507.0 / 128.0; + bufferOldSize = bufferOldSize_inp; + + if ( (float) bufferNewSize / bufferOldSize > maxFac ) + { + tmpNewSize = bufferOldSize * 2; + while ( bufferNewSize > bufferOldSize ) + { + if ( (float) bufferNewSize / bufferOldSize <= maxFac ) + { + tmpNewSize = bufferNewSize; + } + + lerp_proc( f, f_out, tmpNewSize, bufferOldSize ); + + f = f_out; + bufferOldSize = tmpNewSize; + tmpNewSize *= 2; + } + } + else if ( (float) bufferOldSize / bufferNewSize > maxFac ) + { + tmpNewSize = bufferOldSize / 2; + while ( bufferNewSize < bufferOldSize ) + { + if ( (float) bufferOldSize / bufferNewSize <= maxFac ) + { + tmpNewSize = bufferNewSize; + } + + lerp_proc( f, f_out, tmpNewSize, bufferOldSize ); + + f = f_out; + bufferOldSize = tmpNewSize; + tmpNewSize /= 2; + } + } + else + { + lerp_proc( f, f_out, bufferNewSize, bufferOldSize ); + } + + return; +} + +/*-------------------------------------------------------------* + * procedure lerp_proc() * + * * + * * + *-------------------------------------------------------------*/ + +static void lerp_proc( + const float *f, + float *f_out, + const int16_t bufferNewSize, + const int16_t bufferOldSize ) +{ + int16_t i, idx; + float pos, shift, diff; + float buf[2 * L_FRAME_MAX]; + Word16 tmp; + + if ( bufferNewSize == bufferOldSize ) + { + mvr2r( f, buf, bufferNewSize ); + mvr2r( buf, f_out, bufferNewSize ); + return; + } + + /* Using the basop code to avoid reading beyond end of input for bufferOldSize=320, bufferNewSize=640 */ + div_s( &tmp, bufferOldSize, shl( bufferNewSize, 4 ) ); + shift = (float) ( L_shl( L_deposit_l( tmp ), 4 - 15 + 16 ) ) / 65536.0f; + pos = 0.5f * shift - 0.5f; + + if ( shift < 0.3f ) + { + pos = pos - 0.13f; + } + + /* first point of interpolation */ + if ( pos < 0 ) + { + buf[0] = f[0] + pos * ( f[1] - f[0] ); + } + else + { + idx = (int16_t) pos; + diff = pos - idx; + buf[0] = f[idx] + diff * ( f[idx + 1] - f[idx] ); + } + + pos += shift; + + for ( i = 1; i < bufferNewSize - 1; i++ ) + { + idx = (int16_t) pos; + diff = pos - idx; + + buf[i] = f[idx] + diff * ( f[idx + 1] - f[idx] ); + pos += shift; + } + + + /* last point */ + idx = (int16_t) pos; + + if ( pos > bufferOldSize - 1 ) + { + idx = bufferOldSize - 2; + } + + diff = pos - idx; + + buf[bufferNewSize - 1] = f[idx] + diff * ( f[idx + 1] - f[idx] ); + + mvr2r( buf, f_out, bufferNewSize ); + + return; +} diff --git a/lib_com/limit_t0.c b/lib_com/limit_t0.c new file mode 100644 index 0000000000..33a3ba4231 --- /dev/null +++ b/lib_com/limit_t0.c @@ -0,0 +1,234 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------* + * Local constants + *-------------------------------------------------*/ + +#define LIMIT_PIT_REL_LOWER 2 /* delta interval to extend pitch coding in relative Q */ +#define LIMIT_PIT_REL_UPPER 0 + +/*-------------------------------------------------* + * limit_T0() + * + * Close-loop pitch lag search limitation + *-------------------------------------------------*/ + +void limit_T0( + const int16_t L_frame, /* i : length of the frame */ + const int16_t delta, /* i : Half the close-loop searched interval */ + const int16_t pit_flag, /* i : selecting absolute(0) or delta(1) pitch quantization */ + const int16_t limit_flag, /* i : flag for Q limits (0=restrained, 1=extended) */ + const int16_t T0, /* i : rough pitch estimate around which the search is done */ + const int16_t T0_frac, /* i : pitch estimate fractional part */ + int16_t *T0_min, /* o : lower pitch limit */ + int16_t *T0_max /* o : higher pitch limit */ +) +{ + int16_t delta2, T1; + int16_t pit_min, pit_max; + + if ( limit_flag == 0 ) /* restrained Q limits */ + { + /* set limits */ + if ( L_frame == L_FRAME ) + { + pit_max = PIT_MAX; + pit_min = PIT_MIN; + } + else /* L_frame == L_FRAME16k */ + { + pit_max = PIT16k_MAX; + pit_min = PIT16k_MIN; + } + + delta2 = 2 * delta - 1; + + T1 = T0; + if ( T0_frac >= 2 ) + { + T1++; + } + *T0_min = T1 - delta; + + if ( *T0_min < pit_min ) + { + *T0_min = pit_min; + } + *T0_max = *T0_min + delta2; + + if ( *T0_max > pit_max ) + { + *T0_max = pit_max; + *T0_min = *T0_max - delta2; + } + } + else /* extended Q limits */ + { + + /* set limits */ + if ( L_frame == L_FRAME ) + { + pit_max = PIT_MAX; + pit_min = PIT_MIN_EXTEND; + + if ( limit_flag == 2 ) + { + pit_min = PIT_MIN_DOUBLEEXTEND; + } + } + else /* L_frame == L_FRAME16k */ + { + pit_max = PIT16k_MAX; + pit_min = PIT16k_MIN_EXTEND; + } + + delta2 = 2 * delta - 1; + + T1 = T0; + if ( T0_frac >= 2 ) + { + T1++; + } + *T0_min = T1 - delta; + + if ( pit_flag == 0 ) + { + /* subframes with absolute search: keep Q range */ + if ( *T0_min < pit_min ) + { + *T0_min = pit_min; + } + *T0_max = *T0_min + delta2; + + if ( *T0_max > pit_max ) + { + *T0_max = pit_max; + *T0_min = *T0_max - delta2; + } + } + else + { + /* subframes with relative search: extend Q range */ + if ( *T0_min < pit_min - LIMIT_PIT_REL_LOWER ) + { + *T0_min = pit_min - LIMIT_PIT_REL_LOWER; + } + + if ( *T0_min < L_INTERPOL ) + { + *T0_min = L_INTERPOL; + } + *T0_max = *T0_min + delta2; + + if ( *T0_max > pit_max + LIMIT_PIT_REL_UPPER ) + { + *T0_max = pit_max + LIMIT_PIT_REL_UPPER; + *T0_min = *T0_max - delta2; + } + } + } + + return; +} + + +/*-------------------------------------------------* + * Routine limit_T0_voiced() + * + * Close-loop pitch lag search limitation + *-------------------------------------------------*/ + +void limit_T0_voiced( + const int16_t nbits, + const int16_t res, + const int16_t T0, /* i : rough pitch estimate around which the search is done */ + const int16_t T0_frac, /* i : pitch estimate fractional part */ + const int16_t T0_res, /* i : pitch resolution */ + int16_t *T0_min, /* o : lower pitch limit */ + int16_t *T0_min_frac, /* o : lower pitch limit */ + int16_t *T0_max, /* o : higher pitch limit */ + int16_t *T0_max_frac, /* o : higher pitch limit */ + const int16_t pit_min, /* i : Minimum pitch lag */ + const int16_t pit_max /* i : Maximum pitch lag */ +) +{ + int16_t T1, temp1, temp2; + + /* Mid-point */ + T1 = T0; + if ( ( T0_res > 1 ) && ( T0_frac >= ( T0_res >> 1 ) ) ) + { + T1++; + } + + /* Lower-bound */ + temp1 = ( T1 * res ) - ( 1 << ( nbits - 1 ) ); + temp2 = temp1 / res; + *T0_min = temp2; + *T0_min_frac = temp1 - temp2 * res; + if ( *T0_min < pit_min ) + { + *T0_min = pit_min; + *T0_min_frac = 0; + } + + /* Higher-bound */ + temp1 = ( *T0_min * res ) + *T0_min_frac + ( 1 << nbits ) - 1; + temp2 = temp1 / res; + *T0_max = temp2; + *T0_max_frac = temp1 - temp2 * res; + if ( *T0_max > pit_max ) + { + *T0_max = pit_max; + *T0_max_frac = res - 1; + temp1 = ( *T0_max * res ) + *T0_max_frac - ( 1 << nbits ) + 1; + temp2 = temp1 / res; + *T0_min = temp2; + *T0_min_frac = temp1 - temp2 * res; + } + + return; +} diff --git a/lib_com/logqnorm.c b/lib_com/logqnorm.c new file mode 100644 index 0000000000..50ecd83898 --- /dev/null +++ b/lib_com/logqnorm.c @@ -0,0 +1,200 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "prot.h" /* Function prototypes */ +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * logqnorm() + * + * Log quantization for norms of sub-vectors + *--------------------------------------------------------------------------*/ + +void logqnorm( + const float *x, /* i : coefficient vector */ + int16_t *k, /* o : index */ + const int16_t L, /* i : codebook length */ + const int16_t N, /* i : sub-vector size */ + const float *thren /* i : quantization thresholds */ +) +{ + int16_t i, j, j1, j2; + float temp, power; + + + temp = 0.0; + for ( i = 0; i < N; i++ ) + { + temp += ( x[i] * x[i] ); + } + + /* sqrt will be done later */ + temp *= inv_tbl[N]; + + if ( thren[0] * thren[0] - temp <= 0 ) + { + *k = 0; + } + else if ( thren[L - 2] * thren[L - 2] - temp > 0 ) + { + *k = L - 1; + } + else + { + power = (float) sqrt( temp ); + + j1 = 0; + j2 = L - 1; + while ( ( j2 - j1 ) > 1 ) + { + j = ( j1 + j2 ) >> 1; + if ( power >= thren[j] ) + { + j2 = j; + } + else + { + j1 = j; + } + } + + *k = j2; + } + + return; +} + + +/*-------------------------------------------------------------------------- + * logqnorm_2() + * + * + *--------------------------------------------------------------------------*/ + +void logqnorm_2( + const float *env_fl, /* o : index */ + const int16_t L, /* i : codebook length */ + const int16_t n_env_band, /* i : sub-vector size */ + const int16_t nb_sfm, /* i : sub-vector size */ + int16_t *ynrm, /* o : norm indices */ + int16_t *normqlg2, /* o : quantized norm values */ + const float *thren /* i : quantization thresholds */ +) +{ + int16_t i, j, j1, j2; + float temp, power; + + for ( i = n_env_band; i < nb_sfm; i++ ) + { + temp = env_fl[i - n_env_band]; + if ( thren[0] - temp <= 0 ) + { + *ynrm = 0; + } + else if ( thren[L - 2] - temp > 0 ) + { + *ynrm = L - 1; + } + else + { + power = temp; + j1 = 0; + j2 = L - 1; + while ( ( j2 - j1 ) > 1 ) + { + j = ( j1 + j2 ) >> 1; + if ( power >= thren[j] ) + { + j2 = j; + } + else + { + j1 = j; + } + } + *ynrm = j2; + } + *normqlg2 = dicnlg2[*ynrm]; + normqlg2++; + ynrm++; + } + + return; +} + +/*-------------------------------------------------------------------------- + * calc_norm() + * + * Calculate the norms for the spectral envelope + *--------------------------------------------------------------------------*/ + +void calc_norm( + const float *x, /* i : Input vector. */ + int16_t *norm, /* o : Quantization indices for norms */ + int16_t *normlg, /* o : Quantized norms in log2 */ + const int16_t start_band, /* i : Indice of band to start coding */ + const int16_t num_bands, /* i : Number of bands */ + const int16_t *band_len, /* i : Length of bands */ + const int16_t *band_start /* i : Start of bands */ +) +{ + int16_t nrm; + int16_t band; + + set_s( norm, 0, start_band ); + + logqnorm( &x[band_start[start_band]], &nrm, 32, band_len[start_band], thren_HQ ); + norm[start_band] = nrm; + normlg[start_band] = dicnlg2[nrm]; + + for ( band = start_band + 1; band < start_band + num_bands; band++ ) + { + logqnorm( &x[band_start[band]], &nrm, 40, band_len[band], thren_HQ ); + norm[band] = nrm; + normlg[band] = dicnlg2[nrm]; + } + + return; +} diff --git a/lib_com/longarith.c b/lib_com/longarith.c new file mode 100644 index 0000000000..2e5604d277 --- /dev/null +++ b/lib_com/longarith.c @@ -0,0 +1,183 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * longadd() + * + * long addition: a[] = a[] + b[] + * Addition of unsigned vectors a[] and b[] without saturation. + * All words of b[] are added with carry to the corresponding words in a. + * An assertion failure occurs, if lenb exceeds lena or if overflow occurs. + *--------------------------------------------------------------------*/ + +void longadd( + uint16_t a[], /* i/o: vector of the length lena */ + const uint16_t b[], /* i/o: vector of the length lenb */ + const int16_t lena, /* i/o: length of vector a[] */ + const int16_t lenb /* i/o: length of vector b[] */ +) +{ + int16_t h; + int32_t carry = 0; + + assert( lena >= lenb ); + for ( h = 0; h < lenb; h++ ) + { + carry += ( (uint32_t) a[h] ) + ( (uint32_t) b[h] ); + a[h] = (uint16_t) carry; + carry = carry >> 16; + } + + for ( ; h < lena; h++ ) + { + carry = ( (uint32_t) a[h] ) + carry; + a[h] = (uint16_t) carry; + carry = carry >> 16; + } + + assert( carry == 0 ); /* carry != 0 indicates addition overflow */ + return; +} + + +/*-------------------------------------------------------------------* + * longshiftright() + * + * long shift right: d[] = a[] >> b + * Logical shift right of unsigned vectors a[] by b bit-positions. + * Vector d[] is filled with leading zeroes, where lend exceeds lena. + * It is allowed to overlay d[] with a[]. + *--------------------------------------------------------------------*/ + +void longshiftright( + uint16_t a[], /* i : vector of the length lena */ + const int16_t b, /* i : number of bit positions to shift right */ + uint16_t d[], /* o : vector of the length lend */ + int16_t lena, /* i : length of vector a[] */ + const int16_t lend /* i : length of vector d[] */ +) +{ + int16_t intb, fracb, fracb_u, k; + + intb = b >> 4; + + a += intb; + lena -= intb; + + fracb = b & 0xF; + if ( fracb ) + { + fracb_u = 16 - fracb; + for ( k = 0; k < lena - 1; k++ ) + { + d[k] = ( ( a[k] >> fracb ) | ( a[k + 1] << fracb_u ) ) & 0xFFFF; + } + d[k] = ( a[k] >> fracb ); + k++; + } + else + { + for ( k = 0; k < lena; k++ ) + { + d[k] = a[k]; + } + } + + /* fill remaining upper bits with zero */ + for ( ; k < lend; k++ ) + { + d[k] = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * longshiftleft() + * + * long shift left: d[] = a[] << b + * Logical shift left of unsigned vectors a[] by b bit-positions. + * It is allowed to overlay d[] with a[]. + *--------------------------------------------------------------------*/ + +void longshiftleft( + const uint16_t a[], /* i : vector of the length len */ + const int16_t b, /* i : number of bit positions to shift left */ + uint16_t d[], /* o : vector of the length len */ + const int16_t len /* i : length of vector a[] and d[] */ +) +{ + int16_t intb; /* integer part of b */ + int16_t fracb; /* shift left value for all upper words a[k] */ + int16_t fracb_l; /* shift right value for all lower words a[k-1] */ + int16_t k = len - 1; + + intb = b >> 4; + fracb = b & 0xF; + + if ( fracb ) + { + fracb_l = 16 - fracb; + for ( ; k > intb; k-- ) + { + d[k] = ( a[k - intb] << fracb ) | ( a[k - intb - 1] >> fracb_l ); + } + d[k] = ( a[k - intb] << fracb ); + k--; + } + else + { + for ( ; k >= intb; k-- ) + { + d[k] = a[k - intb]; + } + } + + for ( ; k >= 0; k-- ) + { + d[k] = 0; + } + + return; +} diff --git a/lib_com/low_rate_band_att.c b/lib_com/low_rate_band_att.c new file mode 100644 index 0000000000..2ff62af41b --- /dev/null +++ b/lib_com/low_rate_band_att.c @@ -0,0 +1,195 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * fine_gain_pred() + * + * Fine gain prediction + *--------------------------------------------------------------------------*/ + +void fine_gain_pred( + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end, /* i : Sub band end indices */ + const int16_t *sfm_size, /* i : Sub band bandwidths */ + const int16_t *i_sort, /* i : Energy sorting indices */ + const int16_t *K, /* i : Number of pulses per band */ + const int16_t *maxpulse, /* i : Maximum pulse per band */ + const int16_t *R, /* i : Bits per sub band (Q3) */ + const int16_t num_sfm, /* i : Number of sub bands */ + float *xq, /* i/o: Quantized vector /quantized vector with finegain adj */ + int16_t *y, /* i/o: Quantized vector */ + float *fg_pred, /* o : Predicted fine gains */ + const int16_t core /* i : Core */ +) +{ + int16_t i, band; + float gp; + float xx; + float accuracy; + int16_t k, bw; + float att; + + for ( band = 0; band < num_sfm; band++ ) + { + + k = K[i_sort[band]]; + if ( k > 0 ) + { + bw = sfm_size[i_sort[band]]; + xx = 0; + for ( i = sfm_start[i_sort[band]]; i < sfm_end[i_sort[band]]; i++ ) + { + xx += xq[i] * xq[i]; + } + + if ( xx > 0 ) + { + /* Normalize synthesis to RMS=1.0 */ + gp = (float) sqrt( bw / xx ); + + if ( core == HQ_CORE && R != NULL && R[i_sort[band]] <= 256 ) + { + accuracy = ( (float) k / (float) bw ) * maxpulse[i_sort[band]]; + att = 1.0f - 0.05f / accuracy; + att = max( 0.840896f, att ); /* Limit attenuation to norm quantizer error, 2^-0.25 */ + gp *= att; + } + + fg_pred[band] = gp; + } + else + { + fg_pred[band] = 0; + } + } + else + { + fg_pred[band] = 0; + for ( i = sfm_start[i_sort[band]]; i < sfm_end[i_sort[band]]; i++ ) + { + y[i] = 0; + xq[i] = 0; + } + } + } + return; +} + +/*--------------------------------------------------------------------------* + * get_max_pulses() + * + * Find the maximum pulse height (in unit pulses) in each band + *--------------------------------------------------------------------------*/ + +void get_max_pulses( + const int16_t *band_start, /* i : Sub band start indices */ + const int16_t *band_end, /* i : Sub band end indices */ + const int16_t *k_sort, /* i : Indices for sorting by energy */ + const int16_t *npulses, /* i : Pulses per sub band */ + const int16_t BANDS, /* i : Number of bands */ + int16_t *inp_vector, /* i/o: Encoded shape vectors */ + int16_t *maxpulse /* o : Maximum pulse height per band */ +) +{ + int16_t i, k; + int16_t npul; + int16_t maxp; + + for ( k = 0; k < BANDS; k++ ) + { + npul = npulses[k_sort[k]]; + maxp = 0; + if ( npul > 0 ) + { + for ( i = band_start[k_sort[k]]; i < band_end[k_sort[k]]; i++ ) + { + if ( abs( inp_vector[i] ) > maxp ) + { + maxp = (int16_t) abs( inp_vector[i] ); + } + } + } + maxpulse[k_sort[k]] = maxp; + } + + return; +} + +/*--------------------------------------------------------------------------* + * fine_gain_dec() + * + * Fine gain decoder. Decodes fine gain adjustments and applies correction to + * predicted fine gains + *--------------------------------------------------------------------------*/ + +void fine_gain_dec( + Decoder_State *st, /* i/o: Decoder state struct */ + const int16_t *ord, /* i : Indices for energy order */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t *gain_bits, /* i : Gain adjustment bits per sub band */ + float *fg_pred /* i/o: Predicted gains / Corrected gains */ +) +{ + int16_t band; + int16_t gbits; + int16_t idx; + float gain_dbq; + + for ( band = 0; band < num_sfm; band++ ) + { + gbits = gain_bits[ord[band]]; + if ( fg_pred[band] != 0 && gbits > 0 ) + { + idx = get_next_indice( st, gbits ); + gain_dbq = finegain[gbits - 1][idx]; + + /* Update prediced gain with quantized correction */ + fg_pred[band] *= (float) pow( 10, gain_dbq * 0.05f ); + } + } + + return; +} diff --git a/lib_com/lpc_tools.c b/lib_com/lpc_tools.c new file mode 100644 index 0000000000..7e84d83fb2 --- /dev/null +++ b/lib_com/lpc_tools.c @@ -0,0 +1,336 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define MAX_LEN_LP 960 +#define SCALE1_LPC 2037.1832275390625f /* LSP to LSF conversion factor */ + + +/*---------------------------------------------------------------------* + * autocorr() + * + * Compute autocorrelations of input signal + *---------------------------------------------------------------------*/ + +void autocorr( + const float *x, /* i : input signal */ + float *r, /* o : autocorrelations vector */ + const int16_t m, /* i : order of LP filter */ + const int16_t len, /* i : window size */ + const float *wind, /* i : window */ + const int16_t rev_flag, /* i : flag to reverse window */ + const int16_t sym_flag, /* i : symmetric window flag */ + const int16_t no_thr /* i : flag to avoid thresholding */ +) +{ + float t[MAX_LEN_LP]; + float s; + int16_t i, j; + + /* Windowing of signal */ + if ( rev_flag == 1 ) + { + /* time reversed window */ + for ( i = 0; i < len; i++ ) + { + t[i] = x[i] * wind[len - i - 1]; + } + } + else if ( sym_flag == 1 ) + { + /* symmetric window of even length */ + for ( i = 0; i < len / 2; i++ ) + { + t[i] = x[i] * wind[i]; + } + + for ( ; i < len; i++ ) + { + t[i] = x[i] * wind[len - 1 - i]; + } + } + else /* assymetric window */ + { + for ( i = 0; i < len; i++ ) + { + t[i] = x[i] * wind[i]; + } + } + + /* Compute r[1] to r[m] */ + for ( i = 0; i <= m; i++ ) + { + s = t[0] * t[i]; + for ( j = 1; j < len - i; j++ ) + { + s += t[j] * t[i + j]; + } + r[i] = s; + } + + if ( r[0] < 100.0f && no_thr == 0 ) + { + r[0] = 100.0f; + } + + return; +} + +/*---------------------------------------------------------------------* + * lev_dur() + * + * Wiener-Levinson-Durbin algorithm to compute LP parameters from the autocorrelations + * of input signal + *---------------------------------------------------------------------*/ + +/*! r: energy of prediction error */ +int16_t lev_dur( + float *a, /* o : LP coefficients (a[0] = 1.0) */ + const float *r, /* i : vector of autocorrelations */ + const int16_t m, /* i : order of LP filter */ + float epsP[] /* o : prediction error energy */ +) +{ + int16_t i, j, l; + float buf[TCXLTP_LTP_ORDER]; + float *rc; /* reflection coefficients 0,...,m-1 */ + float s, at, err; + int16_t flag = 0; + + rc = &buf[0]; + rc[0] = ( -r[1] ) / r[0]; + a[0] = 1.0f; + a[1] = rc[0]; + err = r[0] + r[1] * rc[0]; + if ( epsP != NULL ) + { + epsP[0] = r[0]; + epsP[1] = err; + } + + for ( i = 2; i <= m; i++ ) + { + s = 0.0f; + for ( j = 0; j < i; j++ ) + { + s += r[i - j] * a[j]; + } + + rc[i - 1] = ( -s ) / err; + + if ( fabs( rc[i - 1] ) > 0.99945f ) + { + flag = 1; /* Test for unstable filter. If unstable keep old A(z) */ + } + + for ( j = 1; j <= i / 2; j++ ) + { + l = i - j; + at = a[j] + rc[i - 1] * a[l]; + a[l] += rc[i - 1] * a[j]; + a[j] = at; + } + + a[i] = rc[i - 1]; + + err += rc[i - 1] * s; + if ( err <= 0.0f ) + { + err = 0.01f; + } + + if ( epsP != NULL ) + { + epsP[i] = err; + } + } + + return ( flag ); +} + + +/*---------------------------------------------------------------------* + * E_LPC_int_lpc_tcx() + * + * + *---------------------------------------------------------------------*/ + +void E_LPC_int_lpc_tcx( + const float lsf_old[], /* i : LSFs from past frame */ + const float lsf_new[], /* i : LSFs from present frame */ + float a[] /* o : interpolated LP coefficients */ +) +{ + int16_t i; + float lsf[M]; + + for ( i = 0; i < M; i++ ) + { + lsf[i] = lsf_old[i] * 0.125f + lsf_new[i] * 0.875f; + } + + lsp2a_stab( lsf, a, M ); + + return; +} + +/*---------------------------------------------------------------------* + * lsp_reorder() + * + * + *---------------------------------------------------------------------*/ + +static void lsp_reorder( + float *lsp, /* i/o: lsp vector (acos() domain) */ + float min_dist, /* i : minimum required distance */ + const int16_t lpcorder /* i : LPC order */ +) +{ + int16_t i; + float lsp_min, lsp_max; + + /* Verify the LSF ordering and minimum GAP */ + lsp_min = min_dist; + + for ( i = 0; i < lpcorder; ++i ) + { + if ( lsp[i] < lsp_min ) + { + lsp[i] = lsp_min; + } + lsp_min = lsp[i] + min_dist; + } + + /* Reverify the LSF ordering and minimum GAP in the reverse order (security) */ + lsp_max = EVS_PI - min_dist; + + /* If danger of unstable filter in case of resonance in HF */ + if ( lsp[lpcorder - 1] > lsp_max ) + { + /* Reverify the minimum LSF gap in the reverse sense */ + for ( i = lpcorder - 1; i >= 0; --i ) + { + if ( lsp[i] > lsp_max ) + { + lsp[i] = lsp_max; + } + lsp_max = lsp[i] - min_dist; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * E_LPC_lsp_unweight() + * + * Approximate unweighting + *---------------------------------------------------------------------*/ + +int16_t E_LPC_lsp_unweight( + const float lsp_w[], /* i : weighted lsp */ + float lsp_uw[], /* o : unweighted lsp */ + float lsf_uw[], /* o : unweighted lsf */ + const float inv_gamma /* i : inverse weighting factor */ +) +{ + float lsp_w_orig[M], lsp_w_diff[M], mean, step; + const lsp_unw_triplet *unw_coeffs = NULL; + int16_t i; + + /* Table selection */ + if ( (float) fabs( inv_gamma - 1.0f / 0.94f ) < 0.0001f ) + { + unw_coeffs = p16_gamma0_94to1; + } + else if ( (float) fabs( inv_gamma - 1.0f / 0.92f ) < 0.0001f ) + { + unw_coeffs = p16_gamma0_92to1; + } + else + { + assert( 0 ); + } + + step = EVS_PI / (float) ( M + 1 ); + mean = step; + + /* Apply acos() and get mean removed version */ + for ( i = 0; i < M; ++i ) + { + lsp_w_orig[i] = (float) acos( lsp_w[i] ); + lsp_w_diff[i] = lsp_w_orig[i] - mean; + mean += step; + } + + /* Approximate unweighting by 3-tap FIR */ + + lsp_uw[0] = lsp_w_orig[0] + unw_coeffs[0][1] * lsp_w_diff[0] + unw_coeffs[0][2] * lsp_w_diff[1]; + for ( i = 1; i < M - 1; ++i ) + { + lsp_uw[i] = lsp_w_orig[i] + unw_coeffs[i][0] * lsp_w_diff[i - 1] + unw_coeffs[i][1] * lsp_w_diff[i] + unw_coeffs[i][2] * lsp_w_diff[i + 1]; + } + + lsp_uw[M - 1] = lsp_w_orig[M - 1] + unw_coeffs[M - 1][0] * lsp_w_diff[M - 2] + unw_coeffs[M - 1][1] * lsp_w_diff[M - 1]; + + /* Reorder */ + lsp_reorder( lsp_uw, 50.0f / SCALE1_LPC, M ); + + /* Convert to lsf, apply cos() */ + for ( i = 0; i < M; ++i ) + { + lsf_uw[i] = lsp_uw[i] * SCALE1_LPC; + lsp_uw[i] = (float) cos( lsp_uw[i] ); + } + + return 0; +} diff --git a/lib_com/lsf_dec_bfi.c b/lib_com/lsf_dec_bfi.c new file mode 100644 index 0000000000..f6da9ffb21 --- /dev/null +++ b/lib_com/lsf_dec_bfi.c @@ -0,0 +1,298 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + + +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * routine: lsf_dec_bfi() + * + * Estimate the lsfs in case of FER + * Bad frame, all active speech coders + *---------------------------------------------------------------------*/ + +void lsf_dec_bfi( + const int16_t codec_mode, /* i : codec mode: MODE1 | MODE2 */ + float *lsf, /* o : estimated LSF vector */ + const float *lsfold, /* i : past quantized lsf */ + float *lsf_adaptive_mean, /* i : lsf adaptive mean, updated when BFI==0 */ + const float lsfBase[], /* i : base for differential lsf coding */ + float *mem_MA, /* i/o: quantizer memory for MA model */ + float *mem_AR, /* o : quantizer memory for AR model */ + const float stab_fac, /* i : lsf stability factor */ + const int16_t last_coder_type, /* i : last coder type */ + const int16_t L_frame, /* i : frame length */ + const int16_t last_good, /* i : last good received frame */ + const int16_t nbLostCmpt, /* i : counter of consecutive bad frames */ + const int16_t plcBackgroundNoiseUpdated, /* i : background noise already updated?*/ + float *lsf_q_cng, /* o : quantized lsfs of background noise */ + float *lsf_cng, /* i : long term target for fading to bg noise*/ + float *old_lsf_q_cng, /* i : old quantized lsfs for background noise*/ + const int16_t Last_GSC_pit_band_idx, /* i : AC mode (GSC) - Last pitch band index */ + const int16_t Opt_AMR_WB, /* i : IO flag */ + const int16_t bwidth /* i : coded bandwidth */ +) +{ + int16_t i; + float alpha, tmp; + float lsf_mean[M]; + const float *pt_meansForFading; + const float *pt_meansForMemUpdate; + float beta; + + /* init vectors */ + if ( codec_mode == MODE1 ) + { + pt_meansForMemUpdate = &lsf_mean[0]; + + if ( Opt_AMR_WB ) + { + pt_meansForFading = mean_isf_amr_wb; + } + else + { + if ( L_frame == L_FRAME ) + { + if ( bwidth == NB ) + { + pt_meansForFading = GENB_Ave; + } + else + { + pt_meansForFading = GEWB_Ave; + } + } + else + { + pt_meansForFading = GEWB2_Ave; + } + } + } + else + { + pt_meansForFading = pt_meansForMemUpdate = lsfBase; + if ( lsf_cng != NULL && plcBackgroundNoiseUpdated ) + { + pt_meansForFading = lsf_cng; + } + } + + /*----------------------------------------------------------------------* + * Initialize the alpha factor + *----------------------------------------------------------------------*/ + + if ( nbLostCmpt <= 3 ) + { + if ( last_coder_type == UNVOICED ) + { + /* clearly unvoiced */ + alpha = ALPHA_UU; + } + else if ( last_coder_type == AUDIO || last_good == INACTIVE_CLAS ) + { + if ( Last_GSC_pit_band_idx > 0 && nbLostCmpt > 1 ) + { + alpha = 0.8f; + } + else + { + alpha = 0.995f; + } + } + else if ( last_good == UNVOICED_CLAS ) + { + if ( nbLostCmpt <= 1 ) + { + /* if stable, do not flatten the spectrum in the 1st erased frame */ + alpha = stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; /* [0.8, 1.0] */ + } + else if ( nbLostCmpt == 2 ) + { + alpha = ALPHA_U * 1.5f; /* 0.6 */ + } + else + { + /* go rapidly to CNG spectrum */ + alpha = ALPHA_U; + } + } + else if ( last_good == UNVOICED_TRANSITION ) + { + alpha = ALPHA_UT; + } + else if ( last_good == VOICED_CLAS || last_good == ONSET ) + { + /* clearly voiced - mild convergence to the CNG spectrum for the first 3 erased frames */ + alpha = ALPHA_V; + } + else if ( last_good == SIN_ONSET ) + { + alpha = ALPHA_S; + } + else + { + alpha = ALPHA_VT; + } + } + else + { + alpha = 1.f / nbLostCmpt; + } + + if ( codec_mode == MODE1 ) + { + beta = BETA_FEC; + } + else + { + if ( plcBackgroundNoiseUpdated ) + { + beta = 0.f; + } + else + { + beta = 0.25f; + } + } + + for ( i = 0; i < M; i++ ) + { + lsf_mean[i] = beta * pt_meansForFading[i] + ( 1 - beta ) * lsf_adaptive_mean[i]; + lsf[i] = alpha * lsfold[i] + ( 1.0f - alpha ) * lsf_mean[i]; /* towards the CNG spectral envelope */ + + if ( lsf_q_cng != NULL ) + { + lsf_q_cng[i] = max( alpha, 0.8f ) * old_lsf_q_cng[i] + ( 1.0f - max( alpha, 0.8f ) ) * pt_meansForFading[i]; + } + } + + /*-----------------------------------------------------------------* + * - estimate past quantized residual to be used in next frame + * - Check A(z) filter stability through lsf ordering + *-----------------------------------------------------------------*/ + + if ( Opt_AMR_WB ) + { + reorder_isf( lsf, ISF_GAP, M, INT_FS_12k8 ); + } + else + { + if ( L_frame == L_FRAME ) + { + reorder_lsf( lsf, codec_mode == MODE1 ? MODE1_LSF_GAP : LSF_GAP, M, INT_FS_12k8 ); + + if ( lsf_q_cng != NULL ) + { + reorder_lsf( lsf_q_cng, LSF_GAP, M, INT_FS_12k8 ); + } + } + else /* L_frame > L_FRAME */ + { + reorder_lsf( lsf, MODE1_LSF_GAP, M, L_frame * FRAMES_PER_SEC ); + if ( lsf_q_cng != NULL ) + { + reorder_lsf( lsf_q_cng, MODE1_LSF_GAP, M, L_frame * FRAMES_PER_SEC ); + } + } + } + /* update the AR memory to be used in the next frame */ + mvr2r( lsf, mem_AR, M ); + + for ( i = 0; i < M; i++ ) + { + tmp = lsf[i] - pt_meansForMemUpdate[i]; + mem_MA[i] = (float) ( tmp - MU_MA * mem_MA[i] ); /* Update with quantized prediction error for MA model */ + mem_MA[i] *= 0.5f; /* Attenuate the MA Q memory */ + } + + return; +} + +/*---------------------------------------------------------------------* + * routine: PlcGetlsfBase() + * + * + *---------------------------------------------------------------------*/ + +const float *PlcGetlsfBase( + const int16_t lpcQuantization, + const int16_t narrowBand, + const int32_t sr_core ) +{ + if ( lpcQuantization == 0 ) + { + /* high rates, return value is never used; the correct value changes + dynamically and is not available during PLC; therefore, the setting + is kept as before (without the define PLC_FIX_XSF_HANDLING); the + correct value would be isf[m] as returned by lpc_unquantize() + during normal decoding */ + + if ( sr_core == 32000 ) + { + return means_swb_cleanspeech_lsf32k0; + } + else if ( sr_core == 25600 ) + { + return means_swb_cleanspeech_lsf25k6; + } + else + { + return means_wb_cleanspeech_lsf16k0; + } + } + + /* lpcQuntization == 1 is left */ + + if ( sr_core == INT_FS_16k ) + { + return GEWB2_Ave; + } + + /* sr_core == 12.8k is left */ + + if ( narrowBand == 0 ) + { + return GEWB_Ave; + } + + /* narrowBand == 1 is left */ + return GENB_Ave; +} diff --git a/lib_com/lsf_msvq_ma.c b/lib_com/lsf_msvq_ma.c new file mode 100644 index 0000000000..0f091463bd --- /dev/null +++ b/lib_com/lsf_msvq_ma.c @@ -0,0 +1,178 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "stl.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * midlsf_dec() + * + * + *---------------------------------------------------------------------*/ + +void midlsf_dec( + const float qlsf0[], + const float qlsf1[], + const int16_t idx, + float qlsf[], + const int16_t N, + const int16_t coder_type, + int16_t *mid_lsf_int, + const int16_t prev_bfi, + const int16_t safety_net ) +{ + const float *ratio = NULL; + int16_t j; + int16_t bad_spacing = 0; + /* Select codebook */ + if ( coder_type == UNVOICED ) + { + ratio = tbl_mid_unv_wb_5b; + } + else + { + ratio = tbl_mid_gen_wb_5b; + } + + for ( j = 0; j < N; j++ ) + { + qlsf[j] = ( 1.0f - ratio[idx * N + j] ) * qlsf0[j] + ratio[idx * N + j] * qlsf1[j]; + } + + if ( mid_lsf_int != NULL ) /*at the decoder*/ + { + /* check for incorrect LSF ordering */ + if ( *mid_lsf_int == 1 ) + { + for ( j = 1; j < N; j++ ) + { + if ( qlsf[j] < qlsf[j - 1] ) + { + bad_spacing = 1; + break; + } + } + } + /* Redo mid-LSF interpolation with 0.4 in case of LSF instability */ + if ( prev_bfi || ( *mid_lsf_int == 1 && bad_spacing ) ) + { + for ( j = 0; j < N; j++ ) + { + /* redo mid-LSF interpolation with 0.4 */ + qlsf[j] = 0.4f * qlsf0[j] + 0.6f * qlsf1[j]; + + /* ensure correct ordering of LSF indices */ + if ( j > 0 && j < N && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) + { + qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; + } + } + } + else + { + /* otherwise, use regular LSF spacing and ordering as in the encoder */ + for ( j = 0; j < N; j++ ) + { + if ( j > 0 && j < N && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) + { + qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; + } + } + } + if ( prev_bfi ) + { + /* continue redoing mid-LSF interpolation with 0.4 in order not to propagate the error */ + *mid_lsf_int = 1; + } + if ( safety_net ) + { + /* safety-net encountered -> stop redoing mid-LSF interpolation with 0.4 */ + *mid_lsf_int = 0; + } + } + else + { + /* use regular LSF spacing */ + for ( j = 0; j < N; j++ ) + { + if ( j > 0 && j < N && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) + { + qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; + } + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * lsf_ind_is_active() + * + * + *---------------------------------------------------------------------*/ + +int16_t lsf_ind_is_active( + const Word16 lsf_q_ind[], + const float means[], + const int16_t narrowband, + const int16_t cdk ) +{ + Word16 lsf[2], min_distance; + + lsf[0] = add( lsf_q_ind[0], LSFM( means[0] ) ); + move16(); + lsf[1] = add( lsf_q_ind[1], LSFM( means[1] ) ); + move16(); + + min_distance = lsf[0]; + min_distance = s_min( min_distance, sub( lsf[1], lsf[0] ) ); + + assert( narrowband == 0 || narrowband == 1 ); + assert( cdk == 0 || cdk == 1 ); + + return sub( min_distance, min_distance_thr[narrowband][cdk] ) < 0; +} diff --git a/lib_com/lsf_tools.c b/lib_com/lsf_tools.c new file mode 100644 index 0000000000..3fc93a05f7 --- /dev/null +++ b/lib_com/lsf_tools.c @@ -0,0 +1,2360 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static float chebps2( const float x, const float *f, const int16_t n ); +static float LPC_chebyshev( float x, float f[], const int16_t n ); +static void get_isppol( const float *isp, float f[], const int16_t n ); + +/*---------------------------------------------------------------------* + * a2isp() + * + * Compute the ISPs from the LPC coefficients a[] using Chebyshev + * polynomials. The found ISPs are in the cosine domain with values + * in the range from 1 down to -1. + * The table grid[] contains the points (in the cosine domain) at + * which the polynomials are evaluated. + * + * The ISPs are the roots of the two polynomials F1(z) and F2(z) + * defined as + * F1(z) = [A(z) + z^-M A(z^-1)] + * and F2(z) = [A(z) - z^-M A(z^-1)]/ (1-z^-2) + * + * For an even order M=2N, F1(z) has M/2 conjugate roots on the unit circle + * and F2(z) has M/2-1 conjugate roots on the unit circle in addition to two + * roots at 0 and pi. + * + * For a 16th order LP analysis (M=16), F1(z) and F2(z) can be written as + * + * F1(z) = (1 + a[16]) * PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) + * i=0,2,...,14 + * + * F2(z) = (1 - a[16]) * PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) + * i=1,3,...,13 + * + * The ISPs are frequencies w_i, i=0...M-2 plus the last predictor + * coefficient a[M]. + *---------------------------------------------------------------------*/ + +void a2isp( + const float *a, /* i : LP filter coefficients */ + float *isp, /* o : Immittance spectral pairs */ + const float *old_isp /* i : ISP vector from past frame */ +) +{ + int16_t j, i, nf, ip, order; + float xlow, ylow, xhigh, yhigh, xmid, ymid, xint; + float f1[NC + 1], f2[NC]; + float *coef; + + /*-------------------------------------------------------------* + * find the sum and diff polynomials F1(z) and F2(z) + * F1(z) = [A(z) + z^M A(z^-1)] + * F2(z) = [A(z) - z^M A(z^-1)]/(1-z^-2) + * + * for (i=0; i 1.0f ) || ( a[M] < -1.0f ) ) + { + for ( i = 0; i < M; i++ ) + { + isp[i] = old_isp[i]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * isp2a() + * + * Convert ISPs to predictor coefficients a[] + *-------------------------------------------------------------------*/ + +void isp2a( + const float *isp, /* i : ISP vector (in the cosine domain) */ + float *a, /* o : LP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +) +{ + float f1[NC16k + 1], f2[NC16k]; + int16_t i, j; + int16_t nc; + + nc = m / 2; + + /*-----------------------------------------------------------------* + * Find the polynomials F1(z) and F2(z) * + *-----------------------------------------------------------------*/ + + get_isppol( &isp[0], f1, nc ); + get_isppol( &isp[1], f2, (int16_t) ( nc - 1 ) ); + + /*-----------------------------------------------------------------* + * Multiply F2(z) by (1 - z^-2) * + *-----------------------------------------------------------------*/ + + for ( i = nc - 1; i > 1; i-- ) + { + f2[i] -= f2[i - 2]; + } + + /*-----------------------------------------------------------------* + * Scale F1(z) by (1+isp[m-1]) and F2(z) by (1-isp[m-1]) * + *-----------------------------------------------------------------*/ + + for ( i = 0; i < nc; i++ ) + { + f1[i] *= ( 1.0f + isp[m - 1] ); + f2[i] *= ( 1.0f - isp[m - 1] ); + } + + /*-----------------------------------------------------------------* + * A(z) = (F1(z)+F2(z))/2 * + * F1(z) is symmetric and F2(z) is asymmetric * + *-----------------------------------------------------------------*/ + + a[0] = 1.0f; + for ( i = 1, j = m - 1; i < nc; i++, j-- ) + { + a[i] = (float) ( 0.5f * ( f1[i] + f2[i] ) ); + a[j] = (float) ( 0.5f * ( f1[i] - f2[i] ) ); + } + a[nc] = (float) ( 0.5f * f1[nc] * ( 1.0f + isp[m - 1] ) ); + a[m] = isp[m - 1]; + + return; +} + +/*-------------------------------------------------------------------* + * a2lsp() + * + * Convert predictor coefficients a[] to LSPs + *-------------------------------------------------------------------*/ + +int16_t a2lsp( + float *freq, /* o : LSP vector */ + const float *a_in, /* i : predictor coefficients */ + const int16_t order /* i : order of LP analysis */ +) +{ + int16_t i, iswitch, offset, STEPindex; + int16_t lspnumber, root, notlast, order_by_2; + float temp, temp2; + float q[20], prev[2]; + float frequency, LastFreq, STEP; + const float *a; + float space_min; + + a = &( a_in[1] ); + order_by_2 = order / 2; + LastFreq = 0; + + /* calculate q[z] and p[z] , they are all stored in q */ + offset = order_by_2; + q[0] = (float) ( a[0] + a[order - 1] - 1.0 ); + q[offset] = (float) ( a[0] - a[order - 1] + 1.0 ); + for ( i = 1; i < order_by_2; i++ ) + { + q[i] = a[i] + a[order - 1 - i] - q[i - 1]; + q[i + offset] = a[i] - a[order - 1 - i] + q[i - 1 + offset]; + } + + q[order_by_2 - 1] = q[order_by_2 - 1] / 2; + q[order_by_2 - 1 + offset] = q[order_by_2 - 1 + offset] / 2; + + prev[0] = 9e9f; + prev[1] = 9e9f; + lspnumber = 0; + notlast = 1; + iswitch = 0; + frequency = 0; + + while ( notlast ) + { + root = 1; + offset = iswitch * order_by_2; + STEPindex = 0; /* Start with low resolution grid */ + STEP = STEPS[STEPindex]; + while ( root ) + { + temp = (float) cos( frequency * 6.2832 ); + if ( order >= 4 ) + { + temp2 = LPC_chebyshev( temp, q + offset, order_by_2 ); + } + else + { + temp2 = temp + q[0 + offset]; + } + + if ( ( temp2 * prev[iswitch] ) <= 0.0 || frequency >= 0.5 ) + { + if ( STEPindex == STEPSNUM - 1 ) + { + if ( fabs( temp2 ) < fabs( prev[iswitch] ) ) + { + freq[lspnumber] = frequency; + } + else + { + freq[lspnumber] = frequency - STEP; + } + if ( ( prev[iswitch] ) < 0.0 ) + { + prev[iswitch] = 9e9f; + } + else + { + prev[iswitch] = -9e9f; + } + root = 0; + frequency = LastFreq; + STEPindex = 0; + } + else + { + if ( STEPindex == 0 ) + { + LastFreq = frequency; + } + frequency -= STEPS[++STEPindex]; /* Go back one grid step */ + STEP = STEPS[STEPindex]; + } + } + else + { + prev[iswitch] = temp2; + frequency += STEP; + } + } /* while(root) */ + + lspnumber++; + if ( lspnumber > order - 1 ) + { + notlast = 0; + } + iswitch = 1 - iswitch; + } /* while (notlast) */ + + /* stability check */ + space_min = 1; + for ( i = 1; i < order; i++ ) + { + space_min = ( ( freq[i] - freq[i - 1] ) < space_min ) ? ( freq[i] - freq[i - 1] ) : space_min; + } + + if ( space_min <= 0 ) + { + return 0; + } + + return 1; +} + +/*-------------------------------------------------------------------* + * lsp2a() + * + * Convert LSPs to predictor coefficients a[] + *-------------------------------------------------------------------*/ + +void lsp2a( + float *pc_in, /* i/o: predictor coefficients */ + float *freq, /* i/o: LSP coefficients */ + const int16_t order /* i : order of LP analysis */ +) +{ + float p[LPC_SHB_ORDER], q[LPC_SHB_ORDER]; + float a[LPC_SHB_ORDER], a1[LPC_SHB_ORDER], a2[LPC_SHB_ORDER]; + float b[LPC_SHB_ORDER], b1[LPC_SHB_ORDER], b2[LPC_SHB_ORDER]; + + float xx; + int16_t i, k; + int16_t lspflag; + float *pc; + int16_t order_by_2; + + lspflag = 1; + pc = &( pc_in[1] ); + + order_by_2 = order / 2; + + /* check input for ill-conditioned cases */ + if ( ( freq[0] <= 0.0 ) || ( freq[order - 1] >= 0.5 ) ) + { + lspflag = 0; + + if ( freq[0] <= 0 ) + { + freq[0] = 0.022f; + } + + if ( freq[order - 1] >= 0.5 ) + { + freq[order - 1] = 0.499f; + } + } + + if ( !lspflag ) + { + xx = ( freq[order - 1] - freq[0] ) * recip_order[order]; + for ( i = 1; i < order; i++ ) + { + freq[i] = freq[i - 1] + xx; + } + } + + for ( i = 0; i <= order_by_2; i++ ) + { + a[i] = 0.; + a1[i] = 0.; + a2[i] = 0.; + b[i] = 0.; + b1[i] = 0.; + b2[i] = 0.; + } + + for ( i = 0; i < order_by_2; i++ ) + { + p[i] = (float) cos( 6.2832 * freq[2 * i] ); + q[i] = (float) cos( 6.2832 * freq[2 * i + 1] ); + } + + a[0] = 0.25f; + b[0] = 0.25f; + + for ( i = 0; i < order_by_2; i++ ) + { + a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; + b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; + a2[i] = a1[i]; + a1[i] = a[i]; + b2[i] = b1[i]; + b1[i] = b[i]; + } + a[0] = 0.25f; + b[0] = -0.25f; + + for ( i = 0; i < order_by_2; i++ ) + { + a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; + b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; + a2[i] = a1[i]; + a1[i] = a[i]; + b2[i] = b1[i]; + b1[i] = b[i]; + } + + pc[0] = 2 * ( a[order_by_2] + b[order_by_2] ); + + for ( k = 2; k <= order; k++ ) + { + a[0] = 0.0f; + b[0] = 0.0f; + + for ( i = 0; i < order_by_2; i++ ) + { + a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; + b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; + a2[i] = a1[i]; + a1[i] = a[i]; + b2[i] = b1[i]; + b1[i] = b[i]; + } + pc[k - 1] = 2 * ( a[order_by_2] + b[order_by_2] ); + } + + return; +} + +/*-----------------------------------------------------------* + * get_lsppol() + * + * Find the polynomial F1(z) or F2(z) from the LSPs. + * This is performed by expanding the product polynomials: + * + * F1(z) = product ( 1 - 2 LSF_i z^-1 + z^-2 ) + * i=0,2,4,..,n-2 + * F2(z) = product ( 1 - 2 LSF_i z^-1 + z^-2 ) + * i=1,3,5,..,n-1 + * + * where LSP_i are the LSPs in the cosine domain. + *-----------------------------------------------------------*/ + +static void get_lsppol( + const float lsp[], /* i : line spectral freq. (cosine domain) */ + float f[], /* o : the coefficients of F1 or F2 */ + const int16_t n, /* i : no of coefficients (m/2) */ + int16_t flag /* i : 1 ---> F1(z); 2 ---> F2(z) */ +) +{ + float b; + const float *plsp; + int16_t i, j; + + plsp = lsp + flag - 1; + + f[0] = 1.0f; + b = -2.0f * *plsp; + f[1] = b; + + for ( i = 2; i <= n; i++ ) + { + plsp += 2; + b = -2.0f * *plsp; + f[i] = b * f[i - 1] + 2.0f * f[i - 2]; + + for ( j = i - 1; j > 1; j-- ) + { + f[j] += b * f[j - 1] + f[j - 2]; + } + + f[1] += b; + } + + return; +} + +/*---------------------------------------------------------------------* + * a2lsp_stab() + * + * Compute the LSPs from the LPC coefficients a[] using Chebyshev + * polynomials. The found LSPs are in the cosine domain with values + * in the range from 1 down to -1. + * The table grid[] contains the points (in the cosine domain) at + * which the polynomials are evaluated. + * + * The ISPs are the roots of the two polynomials F1(z) and F2(z) + * defined as + * F1(z) = [A(z) + z^-M A(z^-1)]/ (1+z^-1) + * and F2(z) = [A(z) - z^-M A(z^-1)]/ (1-z^-1) + *---------------------------------------------------------------------*/ + +void a2lsp_stab( + const float *a, /* i : LP filter coefficients */ + float *lsp, /* o : LSP vector */ + const float *old_lsp /* i : LSP vector from past frame */ +) +{ + int16_t j, i, nf, ip; + float xlow, ylow, xhigh, yhigh, xmid, ymid, xint; + float *pf1, *pf2; + const float *pa1, *pa2; + float f1[NC + 1], f2[NC + 1]; + + /*-------------------------------------------------------------* + * find the sum and diff polynomials F1(z) and F2(z) * + * F1(z) = [A(z) + z^11 A(z^-1)]/(1+z^-1) * + * F2(z) = [A(z) - z^11 A(z^-1)]/(1-z^-1) * + *-------------------------------------------------------------*/ + + pf1 = f1; /* Equivalent code using indices */ + pf2 = f2; + *pf1++ = 1.0f; /* f1[0] = 1.0; */ + *pf2++ = 1.0f; /* f2[0] = 1.0; */ + pa1 = a + 1; + pa2 = a + M; + + for ( i = 0; i <= NC - 1; i++ ) /* for (i=1, j=M; i<=NC; i++, j--) */ + { + *pf1 = *pa1 + *pa2 - *( pf1 - 1 ); /* f1[i] = a[i]+a[j]-f1[i-1]; */ + *pf2 = *pa1++ - *pa2-- + *( pf2 - 1 ); /* f2[i] = a[i]-a[j]+f2[i-1]; */ + pf1++; + pf2++; + } + + /*---------------------------------------------------------------------* + * Find the LSPs (roots of F1(z) and F2(z) ) using the * + * Chebyshev polynomial evaluation. * + * The roots of F1(z) and F2(z) are alternatively searched. * + * We start by finding the first root of F1(z) then we switch * + * to F2(z) then back to F1(z) and so on until all roots are found. * + * * + * - Evaluate Chebyshev pol. at grid points and check for sign change.* + * - If sign change track the root by subdividing the interval * + * 4 times and ckecking sign change. * + *---------------------------------------------------------------------*/ + + nf = 0; /* number of found frequencies */ + ip = 0; /* flag to first polynomial */ + + pf1 = f1; /* start with F1(z) */ + + xlow = grid100[0]; + ylow = chebps2( xlow, pf1, NC ); + + j = 0; + while ( ( nf < M ) && ( j < GRID100_POINTS ) ) + { + j++; + xhigh = xlow; + yhigh = ylow; + xlow = grid100[j]; + ylow = chebps2( xlow, pf1, NC ); + + if ( ylow * yhigh <= 0.0 ) /* if sign change new root exists */ + { + j--; + /* divide the interval of sign change by NO_ITER */ + for ( i = 0; i < NO_ITER; i++ ) + { + xmid = 0.5f * ( xlow + xhigh ); + ymid = chebps2( xmid, pf1, NC ); + if ( ylow * ymid <= 0.0 ) + { + yhigh = ymid; + xhigh = xmid; + } + else + { + ylow = ymid; + xlow = xmid; + } + } + + /* linear interpolation for evaluating the root */ + ymid = ( yhigh - ylow ); + xint = xlow; + if ( ymid != 0 && ylow != 0 ) /* whenever ylow is 0, it doesn't make sense to compute the remaining part of the equation */ + { + xint -= ylow * ( xhigh - xlow ) / ( ymid ); + } +#ifdef DEBUGGING + else if ( ymid == 0 && ylow != 0 ) + { + IVAS_ERROR( IVAS_ERR_INTERNAL, "issue in a2lsp_stab()" ); + } +#endif + lsp[nf] = xint; /* new root */ + nf++; + ip = 1 - ip; /* flag to other polynomial */ + pf1 = ip ? f2 : f1; /* pointer to other polynomial */ + xlow = xint; + ylow = chebps2( xlow, pf1, NC ); + } + } + + /* Check if M roots found */ + /* if not use the LSPs from previous frame */ + if ( nf < M ) + { + + for ( i = 0; i < M; i++ ) + { + lsp[i] = old_lsp[i]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * lsp2a_stab() + * + * Convert LSPs to predictor coefficients A[] + *-------------------------------------------------------------------*/ + +void lsp2a_stab( + const float *lsp, /* i : LSF vector (in the cosine domain) */ + float *a, /* o : LP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +) +{ + float f1[NC + 1], f2[NC + 1]; + int16_t i, k, nc; + float *pf1, *pf2, *pf1_1, *pf2_1, *pa1, *pa2; + + nc = m / 2; + + /*-----------------------------------------------------* + * Find the polynomials F1(z) and F2(z) * + *-----------------------------------------------------*/ + + get_lsppol( lsp, f1, nc, 1 ); + get_lsppol( lsp, f2, nc, 2 ); + + /*-----------------------------------------------------* + * Multiply F1(z) by (1+z^-1) and F2(z) by (1-z^-1) * + *-----------------------------------------------------*/ + + pf1 = f1 + nc; + pf1_1 = pf1 - 1; + pf2 = f2 + nc; /* Version using indices */ + pf2_1 = pf2 - 1; + k = nc - 1; + for ( i = 0; i <= k; i++ ) /* for (i = NC; i > 0; i--) */ + { + *pf1-- += *pf1_1--; /* f1[i] += f1[i-1]; */ + *pf2-- -= *pf2_1--; /* f2[i] -= f2[i-1]; */ + } + + /*-----------------------------------------------------* + * A(z) = (F1(z)+F2(z))/2 * + * F1(z) is symmetric and F2(z) is antisymmetric * + *-----------------------------------------------------*/ + + pa1 = a; + *pa1++ = 1.0; /* a[0] = 1.0; */ + pa2 = a + m; + pf1 = f1 + 1; + pf2 = f2 + 1; + for ( i = 0; i <= k; i++ ) /* for (i=1, j=M; i<=NC; i++, j--) */ + { + *pa1++ = 0.5f * ( *pf1 + *pf2 ); /* a[i] = 0.5*(f1[i] + f2[i]); */ + *pa2-- = 0.5f * ( *pf1++ - *pf2++ ); /* a[j] = 0.5*(f1[i] - f2[i]); */ + } + + return; +} + +/*--------------------------------------------------------------------------- + * reorder_lsf() + * + * To make sure that the LSFs are properly ordered and to keep a certain + * minimum distance between consecutive LSFs. + *--------------------------------------------------------------------------*/ + +void reorder_lsf( + float *lsf, /* i/o: LSF vector */ + const float min_dist, /* i : minimum required distance */ + const int16_t n, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +) +{ + int16_t i; + float lsf_min; + float lsf_max; + + /*-----------------------------------------------------------------* + * Verify the LSF ordering and minimum GAP + *-----------------------------------------------------------------*/ + + lsf_min = min_dist; + for ( i = 0; i < n; i++ ) + { + if ( lsf[i] < lsf_min ) + { + lsf[i] = lsf_min; + } + lsf_min = lsf[i] + min_dist; + } + + /*------------------------------------------------------------------------------------------* + * Reverify the LSF ordering and minimum GAP in the reverse order (security) + *------------------------------------------------------------------------------------------*/ + + lsf_max = Fs / 2.0f - min_dist; + + if ( lsf[n - 1] > lsf_max ) /* If danger of unstable filter in case of resonance in HF */ + { + for ( i = n - 1; i >= 0; i-- ) /* Reverify the minimum LSF gap in the reverse sens */ + { + if ( lsf[i] > lsf_max ) + { + lsf[i] = lsf_max; + } + + lsf_max = lsf[i] - min_dist; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * space_lsfs() + * + *-------------------------------------------------------------------*/ + +void space_lsfs( + float *lsfs, /* i/o: Line spectral frequencies */ + const int16_t order /* i : order of LP analysis */ +) +{ + float delta; + int16_t i, flag = 1; + + while ( flag == 1 ) + { + flag = 0; + for ( i = 0; i <= order; i++ ) + { + delta = (float) ( i == 0 ? lsfs[0] : ( i == order ? 0.5f - lsfs[i - 1] : ( lsfs[i] - lsfs[i - 1] ) ) ); + if ( delta < SPC ) + { + flag = 1; + delta -= SPC_plus; + if ( i == order ) + { + lsfs[i - 1] += delta; + } + else + { + if ( i == 0 ) + { + lsfs[i] -= delta; + } + else + { + delta *= 0.5f; + lsfs[i - 1] += delta; + lsfs[i] -= delta; + } + } + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * lsp_weights() + * + *-------------------------------------------------------------------*/ + +void lsp_weights( + const float *lsps, /* i : Line spectral pairs */ + float *weight, /* o : weights */ + const int16_t order /* i : order of LP analysis */ +) +{ + int16_t i; + float delta1, delta2; + + for ( i = 0; i < order; i++ ) + { + delta1 = (float) ( ( i == 0 ) ? lsps[i] : lsps[i] - lsps[i - 1] ); + delta2 = (float) ( ( i == order - 1 ) ? 0.5f - lsps[i] : lsps[i + 1] - lsps[i] ); + + weight[i] = 250 * root_a_over_b( ALPHA_SQ, delta1 * delta2 ); + } + + if ( order != LPC_SHB_ORDER_WB ) + { + weight[3] *= 1.1f; + weight[4] *= 1.1f; + } + + return; +} + + +/*-----------------------------------------------------------------------* + * isf2isp() + * + * Transformation of ISF to ISP + * + * ISP are immitance spectral pairs in cosine domain (-1 to 1). + * ISF are immitance spectral pairs in frequency domain (0 to fs/2). + *-----------------------------------------------------------------------*/ + +void isf2isp( + const float isf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ + float isp[], /* o : isp[m] (range: -1<=val<1) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +) +{ + int16_t i; + + for ( i = 0; i < m - 1; i++ ) + { + isp[i] = (float) cos( isf[i] * EVS_PI / ( Fs / 2.f ) ); + } + isp[m - 1] = (float) cos( isf[m - 1] * EVS_PI / ( Fs / 2.f ) * 2.0 ); + + return; +} + + +/*-----------------------------------------------------------------------* + * isp2isf() + * + * Transformation of ISP to ISF + * + * ISP are immitance spectral pair in cosine domain (-1 to 1). + * ISF are immitance spectral pair in frequency domain (0 to fs/2). + *-----------------------------------------------------------------------*/ + +void isp2isf( + const float isp[], /* i : isp[m] (range: -1<=val<1) */ + float isf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +) +{ + int16_t i; + + /* convert ISPs to frequency domain 0..6400 */ + for ( i = 0; i < m - 1; i++ ) + { + isf[i] = (float) ( acos( isp[i] ) * ( ( Fs / 2.f ) / EVS_PI ) ); + } + isf[m - 1] = (float) ( acos( isp[m - 1] ) * ( ( Fs / 2.f ) / EVS_PI ) * 0.5f ); + + return; +} + +/*-------------------------------------------------------------------* + * a2rc() + * + * Convert from LPC to reflection coeff + *-------------------------------------------------------------------*/ + +void a2rc( + const float *a, /* i : LPC coefficients */ + float *refl, /* o : Reflection co-efficients */ + const int16_t lpcorder /* i : LPC order */ +) +{ + float f[M]; + int16_t m, j, n; + float km, denom, x; + + for ( m = 0; m < lpcorder; m++ ) + { + f[m] = -a[m]; + } + + /* Initialization */ + for ( m = lpcorder - 1; m >= 0; m-- ) + { + km = f[m]; + if ( km <= -1.0 || km >= 1.0 ) + { + for ( j = 0; j < lpcorder; j++ ) + { + refl[j] = 0.f; + } + + return; + } + + refl[m] = -km; + denom = 1.0f / ( 1.0f - km * km ); + + for ( j = 0; j < m / 2; j++ ) + { + n = m - 1 - j; + x = denom * f[j] + km * denom * f[n]; + f[n] = denom * f[n] + km * denom * f[j]; + f[j] = x; + } + + if ( m & 1 ) + { + f[j] = denom * f[j] + km * denom * f[j]; + } + } + + return; +} + + +/*----------------------------------------------------------------------------------* + * vq_dec_lvq() + * + * Multi-stage VQ decoder for LSF parameters, last stage LVQ + *----------------------------------------------------------------------------------*/ + +int16_t vq_dec_lvq( + int16_t sf_flag, /* i : safety net flag */ + float x[], /* o : Decoded vector */ + int16_t indices[], /* i : Indices */ + const int16_t stages, /* i : Number of stages */ + const int16_t N, /* i : Vector dimension */ + const int16_t mode, /* i : mode_lvq, or mode_lvq_p */ + const int16_t no_bits /* i : no. bits for lattice */ +) +{ + float x_lvq[16]; + int16_t i; + int16_t ber_flag; + + /* clear vector */ + set_f( x, 0, N ); + + /*-----------------------------------------------* + * add contribution of each stage + *-----------------------------------------------*/ + + if ( sf_flag == 1 ) + { + for ( i = 0; i < stages - 1; i++ ) + { + v_add( x, &Quantizers[CB_lsf[mode] + i][indices[i] * N], x, N ); + } + + ber_flag = deindex_lvq( &indices[stages - 1], x_lvq, mode, sf_flag, no_bits ); + } + else + { + for ( i = 0; i < stages - 1; i++ ) + { + v_add( x, &Quantizers_p[CB_p_lsf[mode] + i][indices[i] * N], x, N ); + } + + ber_flag = deindex_lvq( &indices[stages - 1], x_lvq, mode, sf_flag, no_bits ); + } + + v_add( x, x_lvq, x, N ); + + return ber_flag; +} + + +/*----------------------------------------------------------------------------------* + * lsf_allocate() + * + * Calculate number of stages and levels for each stage based on the allowed bit allocation + *----------------------------------------------------------------------------------*/ + +ivas_error lsf_allocate( + const int16_t nBits, /* i : Number of bits to use for quantization */ + const int16_t framemode, /* i : LSF quantizer mode */ + const int16_t framemode_p, /* i : ISF quantizer mode predmode (mode_lvq_p) */ + int16_t *stages0, /* o : Number of stages for safety-net quantizer */ + int16_t *stages1, /* o : Number of stages for predictive quantizer */ + int16_t levels0[], /* o : Number of vectors for each stage for SFNET */ + int16_t levels1[], /* o : Number of vectors for each stage for pred */ + int16_t bits0[], /* o : Number of bits for each stage safety net */ + int16_t bits1[] /* o : Number of bits for each stage pred */ +) +{ + int16_t i; + int16_t cumleft; + int16_t bits_lvq, n_stages, nbits0; + ivas_error error; + + error = IVAS_ERR_OK; + + /*---------------------------------------------------* + * Calculate bit allocation for safety-net quantizer + *---------------------------------------------------*/ + + cumleft = BitsVQ[framemode]; + bits_lvq = nBits - cumleft; + nbits0 = CBbits[framemode]; + if ( nbits0 > -1 ) + { + if ( nbits0 > 0 ) /* */ + { + n_stages = 2; + levels0[0] = CBsizes[nbits0]; + bits0[0] = nbits0; + bits0[1] = cumleft - nbits0; + + if ( bits0[1] == 0 ) + { + n_stages--; + } + else + { + levels0[1] = CBsizes[cumleft - nbits0]; + } + } + else /* no bits for VQ stage */ + { + n_stages = 0; + } + + *stages0 = n_stages; + if ( bits_lvq > 0 ) + { + bits0[n_stages] = bits_lvq; + levels0[n_stages] = bits_lvq; /* this is number of bits, not levels */ + *stages0 = n_stages + 1; + } + } + else + { + *stages0 = 0; + } + + /*---------------------------------------------------* + * Calculate bit allocation for predictive quantizer + *---------------------------------------------------*/ + + if ( framemode_p > -1 ) + { + cumleft = BitsVQ_p[framemode_p]; + bits_lvq = nBits - cumleft; + nbits0 = CBbits_p[framemode_p]; + + if ( nbits0 > -1 ) + { + if ( nbits0 > 0 ) + { + if ( framemode_p == 7 ) + { + /* for UNVOICED_WB only */ + n_stages = 3; + for ( i = 0; i < n_stages; i++ ) + { + levels1[i] = CBsizes[nbits0]; + bits1[i] = nbits0; + } + bits1[n_stages] = bits_lvq; + levels1[n_stages] = bits_lvq; + *stages1 = n_stages + 1; + } + else + { + n_stages = 1; + levels1[0] = CBsizes[nbits0]; + bits1[0] = nbits0; + nbits0 = cumleft - nbits0; + if ( nbits0 > 0 ) + { + levels1[1] = CBsizes[nbits0]; + bits1[1] = nbits0; + n_stages = 2; + } + + levels1[n_stages] = bits_lvq; /* this is number of bits, not levels */ + bits1[n_stages] = bits_lvq; + *stages1 = n_stages + 1; + } + } + else + { + *stages1 = 1; + bits1[0] = bits_lvq; + levels1[0] = bits_lvq; + } + } +#ifdef DEBUGGING + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "lsf_allocate(): invalid number of bits in used predictive mode\n" ); + } +#endif + } + + return error; +} + +/*----------------------------------------------------------------------------------* + * find_pred_mode() + * + * + *----------------------------------------------------------------------------------*/ + +ivas_error find_pred_mode( + int16_t *predmode, + const int16_t coder_type, + const int16_t bwidth, + const int32_t int_fs, + int16_t *p_mode_lvq, + int16_t *p_mode_lvq_p, + const int32_t core_brate ) +{ + int16_t idx; + ivas_error error; + + error = IVAS_ERR_OK; + + idx = bwidth; + if ( idx > 1 ) + { + idx = 1; + } + + if ( int_fs == INT_FS_16k ) + { + idx = 2; + } + else + { + if ( core_brate >= GENERIC_MA_LIMIT && coder_type == GENERIC && idx == 1 ) + { + idx = 3; + } + } + + *predmode = predmode_tab[idx][coder_type]; + + if ( idx <= 2 ) + { + *p_mode_lvq = NO_CODING_MODES * idx + coder_type; + if ( *predmode > 0 ) + { + *p_mode_lvq_p = *p_mode_lvq; + } + else + { + *p_mode_lvq_p = -1; + } + } + else /* WB 12.8 with MA pred in GENERIC*/ + { + *p_mode_lvq = NO_CODING_MODES + coder_type; + if ( coder_type == GENERIC ) + { + *p_mode_lvq_p = 18; + } + else + { + if ( *predmode > 0 ) + { + *p_mode_lvq_p = *p_mode_lvq; + } + else + { + *p_mode_lvq_p = -1; + } + } + } + +#ifdef DEBUGGING + if ( *predmode == -1 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "\nfind_pred_mode(): incorrect coder_type specification: %d\n", coder_type ); + } +#endif + + return error; +} + + +/*--------------------------------------------------------------------------- + * reorder_isf() + * + * To make sure that the ISFs are properly ordered and to keep a certain + * minimum distance between consecutive ISFs. + *--------------------------------------------------------------------------*/ + +void reorder_isf( + float *isf, /* i/o: ISF vector */ + const float min_dist, /* i : minimum required distance */ + const int16_t n, /* i : LPC order */ + const float Fs /* i : sampling frequency */ +) +{ + int16_t i; + float isf_min; + float isf_max; + + /*-----------------------------------------------------------------* + * Verify the ISF ordering and minimum GAP + *-----------------------------------------------------------------*/ + + isf_min = min_dist; + for ( i = 0; i < n - 1; i++ ) + { + if ( isf[i] < isf_min ) + { + isf[i] = isf_min; + } + + isf_min = isf[i] + min_dist; + } + + /*------------------------------------------------------------------------------------------* + * Reverify the ISF ordering and minimum GAP in the reverse order (security) + *------------------------------------------------------------------------------------------*/ + + isf_max = Fs / 2.0f - min_dist; + + if ( isf[n - 2] > isf_max ) /* If danger of unstable filter in case of resonance in HF */ + { + for ( i = n - 2; i >= 0; i-- ) /* Reverify the minimum ISF gap in the reverse sens */ + { + if ( isf[i] > isf_max ) + { + isf[i] = isf_max; + } + + isf_max = isf[i] - min_dist; + } + } + + return; +} + +/*----------------------------------------------------------------------------------* + * lsf_stab() + * + * Check LSF stability (distance between old LSFs and current LSFs) + *----------------------------------------------------------------------------------*/ + +/*! r: LP filter stability */ +float lsf_stab( + const float *lsf, /* i : LSF vector */ + const float *lsfold, /* i : old LSF vector */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode*/ + const int16_t L_frame /* i : frame length */ +) +{ + int16_t i, m; + float scale, stab_fac, tmp; + + tmp = 0.0f; + if ( Opt_AMR_WB ) + { + m = M - 1; + } + else + { + m = M; + } + + for ( i = 0; i < m; i++ ) + { + tmp += ( lsf[i] - lsfold[i] ) * ( lsf[i] - lsfold[i] ); + } + + scale = (float) L_FRAME / (float) L_frame; + scale *= scale; + + stab_fac = (float) ( 1.25f - ( scale * tmp / 400000.0f ) ); + + if ( stab_fac > 1.0f ) + { + stab_fac = 1.0f; + } + + if ( stab_fac < 0.0f ) + { + stab_fac = 0.0f; + } + return stab_fac; +} + + +/*--------------------------------------------------------------------- + * get_isppol() + * + * Find the polynomial F1(z) or F2(z) from the ISPs. + * This is performed by expanding the product polynomials: + * + * F1(z) = PRODUCT ( 1 - 2 isp_i z^-1 + z^-2 ) + * i=0,2,...,14 + * F2(z) = PRODUCT ( 1 - 2 isp_i z^-1 + z^-2 ) + * i=1,3,...,13 + * + * where isp_i are the ISPs in the cosine domain. + *---------------------------------------------------------------------*/ + +static void get_isppol( + const float *isp, /* i : Immitance spectral pairs (cosine domaine) */ + float f[], /* o : the coefficients of F1 or F2 */ + const int16_t n /* i : nb. of coefficients (m/2) */ +) +{ + float b; + int16_t i, j; + + f[0] = 1.0f; + b = (float) ( -2.0f * *isp ); + f[1] = b; + for ( i = 2; i <= n; i++ ) + { + isp += 2; + b = (float) ( -2.0f * *isp ); + f[i] = (float) ( b * f[i - 1] + 2.0f * f[i - 2] ); + + for ( j = i - 1; j > 1; j-- ) + { + f[j] += b * f[j - 1] + f[j - 2]; + } + f[1] += b; + } + + return; +} + + +/*--------------------------------------------------------------------- + * chebps2() + * + * Evaluates the Chebyshev polynomial series + * + * The polynomial order is + * n = m/2 (m is the prediction order) + * The polynomial is given by + * C(x) = f(0)T_n(x) + f(1)T_n-1(x) + ... +f(n-1)T_1(x) + f(n)/2 + *---------------------------------------------------------------------*/ + +/*! r: the value of the polynomial C(x) */ +static float chebps2( + const float x, /* i : value of evaluation; x=cos(freq) */ + const float *f, /* i : coefficients of sum or diff polyn. */ + const int16_t n /* i : order of polynomial */ +) +{ + float b1, b2, b0, x2; + int16_t i; + + x2 = (float) ( 2.0f * x ); + b2 = f[0]; + + b1 = x2 * b2 + f[1]; + + for ( i = 2; i < n; i++ ) + { + b0 = x2 * b1 - b2 + f[i]; + b2 = b1; + b1 = b0; + } + + return (float) ( x * b1 - b2 + 0.5f * f[n] ); +} + + +/*--------------------------------------------------------------------- + * LPC_chebyshev() + * + * Evaluate a series expansion in Chebyshev polynomials + * + * The polynomial order is + * n = m/2 (m is the prediction order) + * The polynomial is given by + * C(x) = T_n(x) + f(1)T_n-1(x) + ... +f(n-1)T_1(x) + f(n)/2 + *---------------------------------------------------------------------*/ + +static float LPC_chebyshev( + float x, + float f[], + const int16_t n ) +{ + float b1, b2, b0, x2, val; + int16_t i; + + x2 = 2.0f * x; + b2 = 1.0f; + b1 = x2 + f[0]; + + for ( i = 2; i < n; i++ ) + { + b0 = x2 * b1 - b2 + f[i - 1]; + + /* was previously casting x2 into float to have this + equation evaluated in float to be same + same as EVRC-B only code which has 2.0 in equation + instead of a float x2. This was causing non-bit-exactness + in a very very very rare corner case. + Doesnt really matter, but just to be picky! */ + b2 = b1; + b1 = b0; + } + + val = ( x * b1 - b2 + f[i - 1] ); + + return val; +} + + +/*-------------------------------------------------------------------* + * lsp2isp() + * + * Convert LSPs to ISPs via predictor coefficients A[] + *-------------------------------------------------------------------*/ + +void lsp2isp( + const float *lsp, /* i : LSP vector */ + float *isp, /* o : ISP filter coefficients */ + float *stable_isp, /* i/o: ISP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +) +{ + float a[M + 1]; + + /* LSP --> A */ + lsp2a_stab( lsp, a, m ); + + /* A --> ISP */ + a2isp( a, isp, stable_isp ); + + /* Update to latest stable ISP */ + mvr2r( isp, stable_isp, M ); +} + +/*-------------------------------------------------------------------* + * isp2lsp() + * + * Convert ISPs to LSPs via predictor coefficients A[] + *-------------------------------------------------------------------*/ + +void isp2lsp( + const float *isp, /* i : LSP vector */ + float *lsp, /* o : ISP filter coefficients */ + float *stable_lsp, /* i/o: stable LSP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +) +{ + float a[M + 1]; + + /* ISP --> A */ + isp2a( isp, a, m ); + + /* A --> LSP */ + a2lsp_stab( a, lsp, stable_lsp ); + + /* Update to latest stable LSP */ + mvr2r( lsp, stable_lsp, M ); +} + + +/*-------------------------------------------------------------------* + * lsf2isf() + * + * Convert LSPs to ISPs + *-------------------------------------------------------------------*/ + +void lsf2isf( + const float *lsf, /* i : LSF vector */ + float *isf, /* o : ISF vector */ + float *stable_isp, /* i/o: stable ISP filter coefficients */ + const int16_t m, /* i : order of LP analysis */ + const int32_t Fs ) +{ + float tmp_lsp[M]; + float tmp_isp[M]; + + /* LSF --> LSP */ + lsf2lsp( lsf, tmp_lsp, m, Fs ); + + /* LSP --> ISP */ + lsp2isp( tmp_lsp, tmp_isp, stable_isp, m ); + + /* ISP --> ISF */ + isp2isf( tmp_isp, isf, m, Fs ); + + return; +} + +/*-------------------------------------------------------------------* + * isf2lsf() + * + * Convert ISFs to LSFs + *-------------------------------------------------------------------*/ + +void isf2lsf( + const float *isf, /* i : ISF vector */ + float *lsf, /* o : LSF vector */ + float *stable_lsp, /* i/o: stable LSP filter coefficients */ + const int16_t m, /* i : order of LP analysis */ + const int32_t Fs ) +{ + float tmp_isp[M]; + float tmp_lsp[M]; + + /* ISF --> ISP */ + isf2isp( isf, tmp_isp, m, Fs ); + + /* ISP --> LSP */ + isp2lsp( tmp_isp, tmp_lsp, stable_lsp, m ); + + /* LSP --> LSF */ + lsp2lsf( tmp_lsp, lsf, m, Fs ); + + return; +} + +/*-----------------------------------------------------------------------* + * lsp2lsf() + * + * Transformation of LSPs to LSFs + * + * LSP are line spectral pair in cosine domain (-1 to 1). + * LSF are line spectral frequencies (0 to fs/2). + *-----------------------------------------------------------------------*/ + +void lsp2lsf( + const float lsp[], /* i : isp[m] (range: -1<=val<1) */ + float lsf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +) +{ + int16_t i; + + /* convert LSPs to LSFs */ + for ( i = 0; i < m; i++ ) + { + lsf[i] = (float) ( acos( lsp[i] ) * ( ( Fs / 2.f ) / EVS_PI ) ); + } + + return; +} + +/*-----------------------------------------------------------------------* + * lsf2lsp() + * + * Transformation of LSFs to LSPs + * + * LSP are line spectral pairs in cosine domain (-1 to 1). + * LSF are line spectral frequencies (0 to fs/2). + *-----------------------------------------------------------------------*/ + +void lsf2lsp( + const float lsf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ + float lsp[], /* o : isp[m] (range: -1<=val<1) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +) +{ + int16_t i; + + /* convert LSFs to LSPs */ + for ( i = 0; i < m; i++ ) + { + lsp[i] = (float) cos( lsf[i] * EVS_PI / ( Fs / 2.f ) ); + } + + return; +} + + +/*--------------------------------------------------------------------------- + * tcvq_Dec() + * + * + *--------------------------------------------------------------------------*/ + +static void tcvq_Dec( + int16_t *ind, + float *d_out, + const int16_t safety_net ) +{ + int16_t i; + int16_t index[9]; + int16_t stage, state, branch[N_STAGE], codeword[N_STAGE]; + int16_t fins, iwd; + float pred[N_DIM]; + float D[N_STAGE_VQ][N_DIM]; + const float( *TCVQ_CB_SUB1 )[128][2], ( *TCVQ_CB_SUB2 )[64][2], ( *TCVQ_CB_SUB3 )[32][2]; + const float( *IntraCoeff )[2][2]; + + mvs2s( ind, index, 9 ); + + if ( safety_net ) + { + TCVQ_CB_SUB1 = SN_TCVQ_CB_SUB1; + TCVQ_CB_SUB2 = SN_TCVQ_CB_SUB2; + TCVQ_CB_SUB3 = SN_TCVQ_CB_SUB3; + IntraCoeff = SN_IntraCoeff; + } + else + { + TCVQ_CB_SUB1 = AR_TCVQ_CB_SUB1; + TCVQ_CB_SUB2 = AR_TCVQ_CB_SUB2; + TCVQ_CB_SUB3 = AR_TCVQ_CB_SUB3; + IntraCoeff = AR_IntraCoeff; + } + + /* Decode Final state */ + fins = index[0] & 15; + + /* Decode Branch info */ + branch[0] = index[1] >> 4; + branch[1] = index[2] >> 4; + + for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) + { + branch[stage] = index[stage + 1] >> 3; + } + + branch[4] = fins & 0x1; + branch[5] = ( fins >> 1 ) & 0x1; + branch[6] = ( fins >> 2 ) & 0x1; + branch[7] = ( fins >> 3 ) & 0x1; + + /* Decode Codeword info */ + for ( stage = 0; stage < 2; stage++ ) + { + codeword[stage] = ( index[stage + 1] & 15 ) << 3; + } + + for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) + { + codeword[stage] = ( index[stage + 1] & 7 ) << 3; + } + + for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) + { + codeword[stage] = ( index[stage + 1] & 3 ) << 3; + } + + state = ( fins >> 2 ) << 2; + + /* stage #1 */ + iwd = NTRANS2[branch[0] + 2][state] + codeword[0]; + D[0][0] = TCVQ_CB_SUB1[0][iwd][0]; + D[0][1] = TCVQ_CB_SUB1[0][iwd][1]; + state = NTRANS2[branch[0]][state]; + + /* stage #2 */ + pred[0] = IntraCoeff[0][0][0] * D[0][0] + IntraCoeff[0][0][1] * D[0][1]; + pred[1] = IntraCoeff[0][1][0] * D[0][0] + IntraCoeff[0][1][1] * D[0][1]; + + iwd = NTRANS2[branch[1] + 2][state] + codeword[1]; + D[1][0] = TCVQ_CB_SUB1[1][iwd][0] + pred[0]; + D[1][1] = TCVQ_CB_SUB1[1][iwd][1] + pred[1]; + state = NTRANS2[branch[1]][state]; + + /* stage #3 - #4 */ + for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) + { + pred[0] = IntraCoeff[stage - 1][0][0] * D[stage - 1][0] + IntraCoeff[stage - 1][0][1] * D[stage - 1][1]; + pred[1] = IntraCoeff[stage - 1][1][0] * D[stage - 1][0] + IntraCoeff[stage - 1][1][1] * D[stage - 1][1]; + + iwd = NTRANS2[branch[stage] + 2][state] + codeword[stage]; + D[stage][0] = TCVQ_CB_SUB2[stage - 2][iwd][0] + pred[0]; + D[stage][1] = TCVQ_CB_SUB2[stage - 2][iwd][1] + pred[1]; + state = NTRANS2[branch[stage]][state]; + } + + /* stage #5 - #8 */ + for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) + { + pred[0] = IntraCoeff[stage - 1][0][0] * D[stage - 1][0] + IntraCoeff[stage - 1][0][1] * D[stage - 1][1]; + pred[1] = IntraCoeff[stage - 1][1][0] * D[stage - 1][0] + IntraCoeff[stage - 1][1][1] * D[stage - 1][1]; + + iwd = NTRANS2[branch[stage] + 2][state] + codeword[stage]; + D[stage][0] = TCVQ_CB_SUB3[stage - 4][iwd][0] + pred[0]; + D[stage][1] = TCVQ_CB_SUB3[stage - 4][iwd][1] + pred[1]; + state = NTRANS2[branch[stage]][state]; + } + + for ( stage = 0; stage < N_STAGE_VQ; stage++ ) + { + for ( i = 0; i < N_DIM; i++ ) + { + d_out[( N_DIM * stage ) + i] = D[stage][i]; + } + } + return; +} + +/*--------------------------------------------------------------------------- + * qlsf_ARSN_tcvq_Dec_16k() + * + * Predictive BC-TCQ encoder for LSF quantization + *--------------------------------------------------------------------------*/ + +int16_t qlsf_ARSN_tcvq_Dec_16k( + float *y, /* o : Quantized LSF vector */ + int16_t *indice, /* i : Indices */ + const int16_t nBits /* i : number of bits */ +) +{ + int16_t i; + float error_svq_q[M]; + int16_t safety_net; + + /* Select Mode */ + safety_net = indice[0]; + + if ( safety_net == 1 ) + { + tcvq_Dec( &indice[1], y, safety_net ); + + if ( nBits > 30 ) + { + for ( i = 0; i < 8; i++ ) + { + error_svq_q[i] = AR_SVQ_CB1[indice[10]][i]; + error_svq_q[i + 8] = AR_SVQ_CB2[indice[11]][i]; + } + + for ( i = 0; i < M; i++ ) + { + y[i] = y[i] + error_svq_q[i] * scale_ARSN[i]; + } + } + } + else + { + tcvq_Dec( &indice[1], y, safety_net ); + + if ( nBits > 30 ) + { + for ( i = 0; i < 8; i++ ) + { + error_svq_q[i] = AR_SVQ_CB1[indice[10]][i]; + error_svq_q[i + 8] = AR_SVQ_CB2[indice[11]][i]; + } + + for ( i = 0; i < M; i++ ) + { + y[i] = y[i] + error_svq_q[i]; + } + } + } + + return safety_net; +} + + +/*-------------------------------------------------------------------* + * lsf_syn_mem_backup() + * + * back-up synthesis filter memory and LSF qunatizer memories (used in SC-VBR) + *-------------------------------------------------------------------*/ + +void lsf_syn_mem_backup( + Encoder_State *st, /* i : state structure */ + float *btilt_code, /* i : tilt code */ + float *bgc_threshold, /* i : */ + float *clip_var_bck, /* o : */ + int16_t *next_force_sf_bck, /* o : */ + float *lsp_new, /* i : LSP vector to quantize */ + float *lsp_mid, /* i : mid-frame LSP vector */ + float *clip_var, /* o : pitch clipping state var */ + float *mem_AR, /* o : quantizer memory for AR model */ + float *mem_MA, /* o : quantizer memory for AR model */ + float *lsp_new_bck, /* o : LSP vector to quantize- backup */ + float *lsp_mid_bck, /* o : mid-frame LSP vector - backup */ + float *Bin_E, /* o : FFT Bin energy 128 *2 sets */ + float *Bin_E_old, /* o : FFT Bin energy 128 sets */ + float *mem_syn_bck, /* o : synthesis filter memory */ + float *mem_w0_bck, /* o : memory of the weighting filter */ + float *streaklimit, + int16_t *pstreaklen ) +{ + int16_t i; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + *clip_var = st->clip_var[0]; + + for ( i = 0; i < M; i++ ) + { + mem_AR[i] = st->mem_AR[i]; + mem_MA[i] = st->mem_MA[i]; + lsp_new_bck[i] = lsp_new[i]; + lsp_mid_bck[i] = lsp_mid[i]; + } + + *streaklimit = st->streaklimit; + *pstreaklen = st->pstreaklen; + + for ( i = 0; i < L_FFT; i++ ) + { + Bin_E[i] = st->Bin_E[i]; + } + + for ( i = 0; i < ( L_FFT / 2 ); i++ ) + { + Bin_E_old[i] = st->Bin_E_old[i]; + } + + /* back-up memories */ + for ( i = 0; i < M; i++ ) + { + mem_syn_bck[i] = hLPDmem->mem_syn[i]; + } + + *mem_w0_bck = hLPDmem->mem_w0; + + *btilt_code = hLPDmem->tilt_code; + *bgc_threshold = hLPDmem->gc_threshold; + mvr2r( st->clip_var, clip_var_bck, 6 ); + *next_force_sf_bck = st->next_force_safety_net; + + return; +} + + +/*-------------------------------------------------------------------* + * lsf_syn_mem_restore() + * + * restore synthesis filter memory and LSF quantizer memories + *-------------------------------------------------------------------*/ + +void lsf_syn_mem_restore( + Encoder_State *st, /* o : state structure */ + float btilt_code, /* i : */ + float gc_threshold, /* i : */ + float *clip_var_bck, /* i : */ + int16_t next_force_sf_bck, /* i : */ + float *lsp_new, /* o : LSP vector to quantize */ + float *lsp_mid, /* o : mid-frame LSP vector */ + float clip_var, /* i : pitch clipping state var */ + float *mem_AR, /* i : quantizer memory for AR model */ + float *mem_MA, /* i : quantizer memory for AR model */ + float *lsp_new_bck, /* i : LSP vector to quantize- backup */ + float *lsp_mid_bck, /* i : mid-frame LSP vector - backup */ + float *Bin_E, /* i : FFT Bin energy 128 *2 sets */ + float *Bin_E_old, /* i : FFT Bin energy 128 sets */ + float *mem_syn_bck, /* i : synthesis filter memory */ + float mem_w0_bck, /* i : memory of the weighting filter */ + const float streaklimit, + const int16_t pstreaklen ) +{ + int16_t i; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /* restore lsf memories */ + st->clip_var[0] = clip_var; + + for ( i = 0; i < M; i++ ) + { + st->mem_AR[i] = mem_AR[i]; + st->mem_MA[i] = mem_MA[i]; + lsp_new[i] = lsp_new_bck[i]; + lsp_mid[i] = lsp_mid_bck[i]; + } + + st->streaklimit = streaklimit; + st->pstreaklen = pstreaklen; + + for ( i = 0; i < L_FFT; i++ ) + { + st->Bin_E[i] = Bin_E[i]; + } + + for ( i = 0; i < ( L_FFT / 2 ); i++ ) + { + st->Bin_E_old[i] = Bin_E_old[i]; + } + + /* restoring memories */ + hLPDmem->mem_w0 = mem_w0_bck; + + for ( i = 0; i < M; i++ ) + { + hLPDmem->mem_syn[i] = mem_syn_bck[i]; + } + + hLPDmem->tilt_code = btilt_code; + hLPDmem->gc_threshold = gc_threshold; + mvr2r( clip_var_bck, st->clip_var, 6 ); + st->next_force_safety_net = next_force_sf_bck; + + return; +} + + +/*--------------------------------------------------------------------------* + * lsf_update_memory() + * + * + *--------------------------------------------------------------------------*/ + +void lsf_update_memory( + const int16_t narrowband, /* i : narrowband flag */ + const float qlsf[], /* i : quantized lsf coefficients */ + float old_mem_MA[], /* i : MA memory */ + float mem_MA[] /* o : updated MA memory */ +) +{ + int16_t i; + + for ( i = 0; i < M; ++i ) + { + mem_MA[i] = qlsf[i] - lsf_means[narrowband][i] - MU_MA * old_mem_MA[i]; + } + + return; +} + +/*--------------------------------------------------------------------------* + * tcxlpc_get_cdk() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: codebook index */ +int16_t tcxlpc_get_cdk( + const int16_t coder_type /* i : GC/VC indicator */ +) +{ + int16_t cdk; + + cdk = ( coder_type == VOICED ); + + return cdk; +} + +/*--------------------------------------------------------------------------* + * msvq_dec() + * + * + *--------------------------------------------------------------------------*/ + + +void msvq_dec( + const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ + const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ + const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ + const int16_t stages, /* i : Number of stages */ + const int16_t N, /* i : Vector dimension */ + const int16_t maxN, /* i : Codebook dimension */ + const int16_t Idx[], /* i : Indices */ + float *uq, /* o : quantized vector */ + Word16 *uq_ind /* o : quantized vector (fixed point) */ +) +{ + int16_t i, n, maxn, start; + Word16 j; + set_zero( uq, N ); + + if ( uq_ind ) + { + for ( i = 0; i < N; ++i ) + { + uq_ind[i] = 0; + move16(); + } + } + for ( i = 0; i < stages; i++ ) + { + if ( dims ) + { + n = dims[i]; + maxn = n; + } + else + { + n = N; + maxn = maxN; + } + if ( offs ) + { + start = offs[i]; + } + else + { + start = 0; + } + +#define WMC_TOOL_MAN + v_add( uq + start, cb[i] + Idx[i] * maxn, uq + start, n ); + + IF( uq_ind != NULL ) + { + FOR( j = 0; j < n; ++j ) + { + move16(); + uq_ind[start + j] = add( uq_ind[start + j], (Word16) ( cb[i][Idx[i] * maxn + j] * 2.0f * 1.28f ) ); + } + } +#undef WMC_TOOL_MAN + } + + return; +} + + +/*--------------------------------------------------------------------------* + * spec2isf() + * + * + *--------------------------------------------------------------------------*/ + +static void spec2isf( + float spec_r[], /* input spectrum real part (only left half + one zero)*/ + float spec_i[], /* input spectrum imag part (only left half+right halt with zeros)*/ + const int16_t speclen, /* length of spectrum (only left half)*/ + float lsf[], + /* locations of LSFs (buffer must be sufficiently long) */ /*15Q16*/ + const float old_lsf[] /* locations of LSFs (buffer must be sufficiently long) */ /*15Q16*/ +) +{ + /*spec_r[] needs a 0 in the end!*/ + float s; + int16_t specix, lsfix, i; + + specix = lsfix = 0; + s = spec_r[specix++]; + + while ( ( specix < speclen ) && lsfix <= 15 ) + { + + /*check for next zero crossing*/ + for ( ; s * spec_r[specix] >= 0; specix++ ) + { + ; + } + + lsf[lsfix++] = ( specix - 1 + spec_r[specix - 1] / ( spec_r[specix - 1] - spec_r[specix] ) ) * ( 12800 / 256 ); + + /*check for the next zero crossing*/ + for ( ; s * spec_i[specix] >= 0; specix++ ) + { + ; + } + + lsf[lsfix++] = ( specix - 1 + spec_i[specix - 1] / ( spec_i[specix - 1] - spec_i[specix] ) ) * ( 12800 / 256 ); + + spec_r[speclen] = s; + spec_i[speclen] = s; + + s = -s; + } + + if ( lsfix < 16 ) + { + for ( i = 0; i < 16; i++ ) + { + lsf[i] = old_lsf[i]; + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * a2isf() + * + * + *--------------------------------------------------------------------------*/ + +#define SCALE1_HALF 1018.59161376953f + +typedef struct +{ + float re; + float im; +} Pfloat; + +void a2isf( + float *a, + float *isf, + const float *old_isf, + const int16_t lpcOrder ) +{ + float RealFFT[128]; + float ImagFFT[128]; + float RealOut[130]; + float ImagOut[130]; + float *ptrReal; + float *ptrImag; + int16_t n, i, j; + const Pfloat *ptwiddle; + Pfloat *pwn17, pwn[128], *pwn15, tmpw15; + int16_t N = 256; + float s[4]; + float L_tmp, L_tmp1; + float lpc[19], fftTmpRe[16], fftTmpIm[16]; + Pfloat twid[128]; + float c; + + set_zero( fftTmpRe, 16 ); + set_zero( fftTmpIm, 16 ); + + /* half length FFT */ + /*c = [sum(a) ((-1).^(1:length(a)))*a];*/ + + L_tmp = 0; + for ( j = 0; j <= lpcOrder; j++ ) + { + L_tmp += a[j]; + } + + L_tmp1 = 0; + for ( j = 0; j < lpcOrder / 2; j++ ) + { + L_tmp1 -= a[2 * j]; + L_tmp1 += a[2 * j + 1]; + } + L_tmp1 -= a[2 * j]; + + /*s = [1 -2*(c(1)-c(2))/(c(1)+c(2)) 1]';*/ + s[0] = 1; + if ( ( L_tmp + L_tmp1 ) != 0 ) + { + s[1] = -2 * ( ( L_tmp - L_tmp1 ) / ( L_tmp + L_tmp1 ) ); + } + else + { + s[1] = 1; + } + s[2] = 1; + + lpc[0] = a[0] * s[0]; + L_tmp = a[1] * s[0]; + lpc[1] = L_tmp + ( a[1 - 1] * s[1] ); + + + for ( n = 2; n < 17; n++ ) + { + L_tmp = a[n] * s[0]; + L_tmp += ( a[n - 1] * s[1] ); + lpc[n] = L_tmp + ( a[n - 2] * s[2] ); + } + lpc[18] = a[16] * s[0]; + L_tmp = a[15] * s[0]; + lpc[17] = L_tmp + ( a[16] * s[1] ); + + + ptrReal = RealFFT; + ptrImag = ImagFFT; + + for ( j = 0; j < 9; j++ ) + { + fftTmpRe[j] = lpc[2 * j]; + fftTmpIm[j] = lpc[2 * j + 1]; + } + fftTmpRe[j] = lpc[2 * j]; + fftTmpIm[j] = 0; + j++; + + for ( ; j < 16; j++ ) + { + fftTmpRe[j] = 0; + fftTmpIm[j] = 0; + } + + DoRTFTn( fftTmpRe, fftTmpIm, 16 ); + + for ( j = 0; j < 16; j++ ) + { + ptrReal[j * 8] = fftTmpRe[j]; + ptrImag[j * 8] = fftTmpIm[j]; + } + + ptrReal++; + ptrImag++; + + for ( i = 1; i < 8; i++ ) + { + /*X=x(i:8:M/8) .* exp(-j*2*pi*i*(0:M/8-1)/M);*/ + ptwiddle = (const Pfloat *) w_a[i - 1]; + + fftTmpRe[0] = lpc[0]; + fftTmpIm[0] = lpc[1]; + + for ( j = 1; j < 9; j++ ) + { + fftTmpRe[j] = ( lpc[2 * j] * ptwiddle->re ) - ( lpc[2 * j + 1] * ptwiddle->im ); + fftTmpIm[j] = ( lpc[2 * j + 1] * ptwiddle->re ) + ( lpc[2 * j] * ptwiddle->im ); + ptwiddle++; + } + + fftTmpRe[j] = lpc[2 * j] * ptwiddle->re; + fftTmpIm[j] = lpc[2 * j] * ptwiddle->im; + ptwiddle++; + j++; + for ( ; j < 16; j++ ) + { + fftTmpRe[j] = 0; + fftTmpIm[j] = 0; + ptwiddle++; + } + + DoRTFTn( fftTmpRe, fftTmpIm, 16 ); + + for ( j = 0; j < 16; j++ ) + { + ptrReal[j * 8] = fftTmpRe[j]; + ptrImag[j * 8] = fftTmpIm[j]; + } + + ptrReal++; + ptrImag++; + } + + c = EVS_PI / ( 2.0f * (float) 128 ); + + for ( i = 1; i < 128; i++ ) + { + twid[i - 1].im = (float) sin( c * ( 2.0f * (float) i ) ); + twid[i - 1].re = (float) cos( c * ( 2.0f * (float) i ) ); + } + ptwiddle = twid; + + /* pre-twiddle */ + for ( i = 1; i < 128; i++ ) + { + pwn[i - 1].im = (float) sin( c * ( 18.0f * (float) i ) ); + pwn[i - 1].re = (float) cos( c * ( 18.0f * (float) i ) ); + } + + pwn17 = pwn; + pwn15 = &tmpw15; + + /*Y(1) = real(X(1)) + imag(X(1));*/ + RealOut[0] = ( RealFFT[0] + ImagFFT[0] ); + ImagOut[0] = 0; + + /*Y(N/2+1) = 0.5*(X(1) + conj(X(1))).*exp(pi*i*128*(18)/N) - i*0.5*(X(1) - conj(X(1))).*exp(pi*i*128*(16)/N);*/ + RealOut[128] = 0; + ImagOut[128] = ( RealFFT[0] + RealFFT[0] ) - ( ImagFFT[0] + ImagFFT[0] ); + + /*Y(2:N/2) = (0.5*(X(2:N/2) + conj(X(N/2:-1:2))) - i*0.5*(X(2:N/2) - conj(X(N/2:-1:2))).*exp(-pi*i*r*(2)/N)).*exp(pi*i*r*(18)/N);*/ + for ( i = 1; i < N / 2; i++ ) + { + float ReAr = ( RealFFT[i] + RealFFT[N / 2 - i] ); + float ReBr = ( RealFFT[N / 2 - i] - RealFFT[i] ); + float ImAr = ( ImagFFT[i] - ImagFFT[N / 2 - i] ); + float ImBr = -( ImagFFT[i] + ImagFFT[N / 2 - i] ); + + tmpw15.re = ( ptwiddle->re * pwn17->re ) + ( ptwiddle->im * pwn17->im ); + tmpw15.im = ( ptwiddle->re * pwn17->im ) - ( ptwiddle->im * pwn17->re ); + + /*RealOut[i] = mac_r(L_msu(L_msu(L_mult(ReAr, pwn17->re),ImAr, pwn17->im), ReBr, pwn15->v.im), ImBr, pwn15->re); move16();*/ + RealOut[i] = ( ReAr * pwn17->re ) - ( ImAr * pwn17->im ) - ( ( ReBr * pwn15->im ) + ( ImBr * pwn15->re ) ); + ImagOut[i] = ( ReAr * pwn17->im ) + ( ImAr * pwn17->re ) + ( ReBr * pwn15->re ) - ( ImBr * pwn15->im ); + + ptwiddle++; + pwn17++; + } + + spec2isf( RealOut, ImagOut, 128, isf, old_isf ); + + isf[lpcOrder - 1] = (Float32) ( acos( a[lpcOrder] ) * SCALE1_HALF ); + + return; +} diff --git a/lib_com/lsp_conv_poly.c b/lib_com/lsp_conv_poly.c new file mode 100644 index 0000000000..1f882b5e90 --- /dev/null +++ b/lib_com/lsp_conv_poly.c @@ -0,0 +1,664 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +/* The conversion modes. */ +#define DOWNCONV 0 +#define UPCONV 1 +/* The cap of the inverse power spectrum. */ +#define MAXPOWERSPECT 1e-5f +#define N50 GRID50_POINTS +#define N40 GRID40_POINTS + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void powerspect( const float x[], const int16_t N, float R[], float S[], float G[], const int16_t mode ); + +static void spectautocorr( const float x[], const int16_t N, const float G[], float r[] ); + +static void zeros2poly( float x[], float R[], float S[] ); + +static void polydecomp( float A[], float P[], float Q[] ); + +static void cheb2poly( float P[] ); + + +/*---------------------------------------------------------------------* + * lsp_convert_poly() + * + * Converts the LP filter estimated at 16.0 kHz sampling rate down + * 12.8 kHz frequency scale or alternatively from 12.8 kHz up to + * 16.0 kHz. The former is called down conversation and latter up + * conversion. The resulting LP filter is characterized with its + * line spectrum pairs. The original Lp filter can be either in + * its immittance, used for the AMR-WB IO mode, or line spectrum + * pair representation. + * + * The conversion is based the autocorrelation computed from the + * power spectrum of the LP filter that is truncated or extrapolated + * to the desired frequency scale. + *---------------------------------------------------------------------*/ + +int16_t lsp_convert_poly( + float w[], /* i/o: LSP or ISP parameters */ + const int16_t L_frame, /* i : flag for up or down conversion */ + const int16_t Opt_AMRWB /* i : flag for the AMR-WB IO mode */ +) +{ + float epsP[M + 1]; + float G[GRID50_POINTS], r[M + 1], A[M + 1], A_old[M + 1], R[NC + 1], S[NC + 1]; + int16_t i; + int16_t flag; + + /*---------------------------------------------------------------------* + * Because AMR-WB IO uses immittance spectrum frequency representation + * instead of line spectrum frequency representation, the input + * parameters do not give the zeros of the polynomials R(x) and S(x). + * Hence R(x) and S(x) are formed via the polynomial A(z) of the linear + * prediction filter. + *---------------------------------------------------------------------*/ + + if ( Opt_AMRWB ) + { + isp2a( w, A_old, M ); + polydecomp( A_old, R, S ); + } + + /*---------------------------------------------------------------------* + * Form the polynomials R(x) and S(x) from their zeros that are the + * line spectrum pairs of A(z). The polynomial coefficients can be + * scaled for convenience, because scaling will not affect the + * resulting LP coefficients. Scaling by 128 gives the correct offset + * to the power spectrum for n = 16. + *---------------------------------------------------------------------*/ + + else + { + zeros2poly( w, R, S ); + for ( i = 0; i <= NC; i++ ) + { + R[i] *= 128.0f; + S[i] *= 128.0f; + } + lsp2a_stab( w, A_old, M ); + } + + /*---------------------------------------------------------------------* + * Conversion from 16.0 kHz down to 12.8 kHz. The power spectrum + * needs to be computed only up to 6.4 kHz, because the upper band + * is omitted. + *---------------------------------------------------------------------*/ + + if ( L_frame == L_FRAME ) + { + powerspect( grid50, N50, R, S, G, DOWNCONV ); + spectautocorr( grid40, N40, G, r ); + } + + /*---------------------------------------------------------------------* + * Conversion from 12.8 kHz up to 16.0 kHz. + * Compute the power spectrum of the LP filter, extrapolate the + * power spectrum from 6.4 kHz to 8.0 kHz, and compute auto- + * correlation on this power spectrum. + *---------------------------------------------------------------------*/ + + else + { + powerspect( grid40, N40, R, S, G, UPCONV ); + for ( i = N40; i < N50; i++ ) + { + G[i] = G[N40 - 1]; + } + + spectautocorr( grid50, N50, G, r ); + } + + /*---------------------------------------------------------------------* + * Compute the linear prediction coefficients from the autocorrelation + * and convert to line spectrum pairs. + *---------------------------------------------------------------------*/ + + flag = lev_dur( A, r, M, epsP ); + a2lsp_stab( A, w, stable_LSP ); + + return ( flag ); +} + + +/*---------------------------------------------------------------------* + * powerspect() + * + * Computes the power spectrum G(w) = 1/|A(w)|^2 at N points on + * the real axis x = cos w by utilizing the line spectrum frequency + * decomposition + * + * A(z) = (P(z) + Q(z))/2, + * + * where assuming A(z) of an even degree n, + * + * P(z) = [A(z) + z^(n+1) A(1/z)]/(1/z + 1), + * Q(z) = [A(z) - z^(n+1) A(1/z)]/(1/z - 1). + * + * The zeros of these polynomials give the line spectrum frequencies + * of A(z). It can be shown that for an even n, + * + * |A(x)|^2 = 2 (1 + x) R(x)^2 + 2 (1 - x) S(x)^2, + * + * where x = cos w, and R(x) and S(x) are the direct polynomials + * resulting from the Chebyshev series representation of P(z) + * and Q(z). + * + * This routine assumes the grid X = 1, x[0], x[1], .., x[m-1], + * -, ..., -x[1], -x[0], -1 such that x[i] = cos((i+1)*pi/N) for + * evaluating the power spectrum. Only m = (N-1)/2 - 1 grid points + * need to be stored, because cos(0) and cos(pi/2) are trivial, + * and the points above pi/2 are obtained readily using the symmetry + * of cosine. + * + * The power spectrum can be scaled as a*G[], where a is chosen + * for convenience. This is because the scaling has no impact on + * the LP coefficients to be determined based on the power spectrum. + *---------------------------------------------------------------------*/ + +static void powerspect( + const float x[], /* i : Grid points x[0:N-1] */ + const int16_t N, /* i : Number of grid points */ + float R[], /* i : Coefficients of R(x) in R[0:NC] */ + float S[], /* i : Coefficients of S(x) in S[0:NC] */ + float G[], /* o : Power spectrum G[0:N] */ + const int16_t mode /* i : Flag for up or down conversion */ +) +{ + float re, ro, se, so; + float s0, s1, r0, r1, x0, x1, x2; + Word16 i, j; + Word16 iuni, imid; + + /* init buffer */ + for ( i = 0; i < N; i++ ) + { + G[i] = 0; + } + /*---------------------------------------------------------------------* + * Down conversion yields iuni unique grid points that do not have + * symmetric counterparts above x = cos(pi/2) = 0. + * Set the mid point of the frequency grid. + *---------------------------------------------------------------------*/ + + if ( mode == DOWNCONV ) + { + iuni = ( GRID50_POINTS - 1 ) / 5 - 1; + imid = ( GRID50_POINTS - 1 ) / 2; + } + + /*---------------------------------------------------------------------* + * Power spectrum at x = cos(pi) = -1 that is not needed in down + * conversion. Set the mid point of the frequency grid. + *---------------------------------------------------------------------*/ + + else + { + iuni = 0; + imid = ( GRID40_POINTS - 1 ) / 2; + + s0 = S[0]; + for ( j = 1; j <= NC; j++ ) + { + s0 = S[j] - s0; + } + G[N - 1] = 4.0f * s0 * s0; + } + + /*---------------------------------------------------------------------* + * Power spectrum at x = cos(0) = 1. + *---------------------------------------------------------------------*/ + + r0 = R[0]; + for ( j = 1; j <= NC; j++ ) + { + r0 += R[j]; + } + r0 = max( r0, 0.000000953674316f ); + G[0] = 4.0f * r0 * r0; + + /*---------------------------------------------------------------------* + * Power spectrum at x = cos(pi/2) = 0. + *---------------------------------------------------------------------*/ + + r0 = R[NC]; + s0 = S[NC]; + r0 = r0 * r0; + s0 = s0 * s0; + + G[imid] = 2.0f * ( r0 + s0 ); + + /*---------------------------------------------------------------------* + * Power spectrum at unique points that do not have symmetric + * counterparts at x > cos(pi/2) = 0. + *---------------------------------------------------------------------*/ + + for ( i = 1; i <= iuni; i++ ) + { + x0 = x[i - 1]; + r0 = R[0]; + s0 = S[0]; + + for ( j = 1; j <= NC; j++ ) + { + r0 = x0 * r0 + R[j]; + s0 = x0 * s0 + S[j]; + } + r0 = ( 1.0f + x0 ) * r0 * r0; + s0 = ( 1.0f - x0 ) * s0 * s0; + + G[i] = 2.0f * ( r0 + s0 ); + } + + /*---------------------------------------------------------------------* + * Power spectrum at points other than x = -1, 0, and 1 and unique + * points is computed using the anti-symmetry of the grid relative + * to the midpoint x = 0 in order to reduce looping. + *---------------------------------------------------------------------*/ + + for ( ; i < imid; i++ ) + { + x0 = x[i - 1]; + x2 = x0 * x0; + + re = R[0]; + se = S[0]; + ro = R[1]; + so = S[1]; + + for ( j = 2; j < NC; j += 2 ) + { + re = x2 * re + R[j]; + ro = x2 * ro + R[j + 1]; + se = x2 * se + S[j]; + so = x2 * so + S[j + 1]; + } + + re = x2 * re + R[j]; + ro *= x0; + se = x2 * se + S[j]; + so *= x0; + + r0 = re + ro; + s0 = se + so; + r1 = re - ro; + s1 = se - so; + + x1 = 1.0f + x0; + x2 = 1.0f - x0; + + r0 = x1 * r0 * r0; + s0 = x2 * s0 * s0; + r1 = x2 * r1 * r1; + s1 = x1 * s1 * s1; + + G[i] = 2.0f * ( r0 + s0 ); + G[N - i - 1] = 2.0f * ( r1 + s1 ); + } + + /*---------------------------------------------------------------------* + * Compute the power spectrum 1/|A(x)|^2 from |A(x)|^2 with logic + * to prevent division by small number and upper bound the spectrum. + * This upper bound is implicit in fixed point arithmetic, but is + * needed explicitly in floating point implementations to avoid numeric + * problems. + *---------------------------------------------------------------------*/ + + for ( i = 0; i < N; i++ ) + { + if ( G[i] < MAXPOWERSPECT ) + { + G[i] = MAXPOWERSPECT; + } + G[i] = 1.0f / G[i]; + } + return; +} + +/*---------------------------------------------------------------------* + * spectautocorr() + * + * Computes the autocorrelation r[j] for j = 0, 1, ..., M from + * the power spectrum P(w) by using the rectangle rule to + * approximate the integral + * + * 1 pi + * r[j] = --- I P(w) cos(j*w) dw. + * 2*pi -pi + * + * It is sufficient to evaluate the integrand only from w = 0 to + * w = pi due to the symmetry P(-w) = P(w). We can further + * employ the relation + * + * cos(j*(pi - w)) = (-1)^j cos(j*w) + * + * to use symmetries relative to w = pi/2 for w in (0, pi/2). + * + * When applying the rectangle rule, it is convenient to evaluate + * w = 0, w = pi/2, and w = pi separately. By using a frequency + * grid of N points, we can express the rectangle rule as + * + * r[j] = G[0] + 2*a*G[(N-1)/2] + b*G[N-1] + * + * M + * + 2 sum (G[i] - G[N-i-1]) cos(j*x[i]) + * i=1 + * + * where G[i] is the power spectrum at x[i] = i*pi/(N-1) and + * M = (N-1)/2 - 1 is the number of the grid points in the + * interval(0, pi/2). The number of grid points N is assumed odd. + * + * The coefficients + * + * b = (-1)^j + * a = (1 + (-1)^(j+1))(-1)^floor(j/2) + * + * follow from the properties of the cosine function. The + * computation further uses the recursion + * + * cos(j*w) = 2*cos(w)*cos((j-1)*w) - cos((j-2)*w) + * + * Note that the autocorrelation can be scaled for convenience, + * because this scaling has no impact on the LP coefficients to be + * calculated from the autocorrelation. The expression of r[j] thus + * omits the division by N. + * + * See the powerspect function on the definition of the grid. + * + * References + * J. Makhoul, "Spectral linear prediction: properties and + * applications," IEEE Trans. on Acoustics, Speech and Signal + * Processing, Vol. 23, No. 3, pp.283-296, June 1975 + *---------------------------------------------------------------------*/ + +static void spectautocorr( + const float x[], /* i : Grid points x[0:N-1] */ + const int16_t N, /* i : Number of grid points */ + const float G[], /* i : Power spectrum G[0:N-1] */ + float r[] /* o : Autocorrelation r[0:M] */ +) +{ + float c[M + 1]; /* c[j] = cos(j*w) */ + float gp, gn, c2; + Word16 i, j; + Word16 imid; + + /*---------------------------------------------------------------------* + * The midpoint of the cosine table x of N entries. Only the entries + * x[0] = cos(d), x[1] = cos(2*d), ..., x[imid-1] = cos((imid-1)*d) + * need to be stored due to trivial cos(0), cos(pi/2), cos(pi), and + * symmetry relative to pi/2. Here d = pi/(N - 1). + *---------------------------------------------------------------------*/ + + imid = ( N - 1 ) / 2; + + /*---------------------------------------------------------------------* + * Autocorrelation r[j] at zero lag j = 0 for the upper half of the + * unit circle, but excluding the points x = cos(0) and x = cos(pi). + *---------------------------------------------------------------------*/ + + r[0] = G[1]; + for ( i = 2; i < N - 1; i++ ) + { + r[0] += G[i]; + } + + /*---------------------------------------------------------------------* + * Initialize the autocorrelation r[j] at lags greater than zero + * by adding the midpoint x = cos(pi/2) = 0. + *---------------------------------------------------------------------*/ + + r[1] = 0.0f; + r[2] = -G[imid]; + + for ( j = 3; j < M; j += 2 ) + { + r[j] = 0.0f; + r[j + 1] = -r[j - 1]; + } + + /*---------------------------------------------------------------------* + * Autocorrelation r[j] at lags j = 1, 2, ..., M. The computation + * employes the relation cos(j*(pi - w)) = (-1)^j cos(j*w) and + * cos(j*w) = 2*cos(w)*cos((j-1)*w) - cos((j-2)*w) for obtaining + * the cosine c[j] = cos(j*w). + *---------------------------------------------------------------------*/ + + c[0] = 1.0f; + + for ( i = 1; i < imid; i++ ) + { + gp = G[i] + G[N - i - 1]; + gn = G[i] - G[N - i - 1]; + + c[1] = x[i - 1]; + c2 = 2.0f * c[1]; + + r[1] += gn * c[1]; + + for ( j = 2; j < M; j += 2 ) + { + c[j] = c2 * c[j - 1] - c[j - 2]; + r[j] += gp * c[j]; + c[j + 1] = c2 * c[j] - c[j - 1]; + r[j + 1] += gn * c[j + 1]; + } + + c[j] = c2 * c[j - 1] - c[j - 2]; + r[j] += gp * c[j]; + } + + /*---------------------------------------------------------------------* + * Add the endpoints x = cos(0) = 1 and x = cos(pi) = -1 as + * well as the lower half of the unit circle. + *---------------------------------------------------------------------*/ + + gp = G[0] + G[N - 1]; + gn = G[0] - G[N - 1]; + + for ( j = 0; j < M; j += 2 ) + { + r[j] = 2.0f * r[j] + gp; + r[j + 1] = 2.0f * r[j + 1] + gn; + } + r[j] = 2.0f * r[j] + gp; + + return; +} + +/*---------------------------------------------------------------------* + * zeros2poly() + * + * Computes the coefficients of the polynomials + * + * R(x) = prod (x - x[i]), + * i = 0,2,4,... + * + * S(x) = prod (x - x[i]), + * i = 1,3,5,... + * + * given their zeros x[i] for i = 0, 1, ..., n-1. The routine + * assumes n = 1 or even n greater than or equal to 4. + * + * The polynomial coefficients are returned in R[0:n/2-1] and + * S[0:n/2-1]. The leading coefficients are in R[0] and S[0]. + * + * In this implementation, n is set to a compile time constant. + *---------------------------------------------------------------------*/ + +static void zeros2poly( + float x[], /* i : Zeros of R(x) and S(x) */ + float R[], /* o : Coefficients of R(x) */ + float S[] /* o : Coefficients of S(x) */ +) +{ + float xr, xs; + Word16 i, j; + + R[0] = 1.0f; + R[1] = -*x++; + S[0] = 1.0f; + S[1] = -*x++; + + for ( i = 2; i <= NC; i++ ) + { + xr = -*x++; + xs = -*x++; + + R[i] = xr * R[i - 1]; + S[i] = xs * S[i - 1]; + + for ( j = i - 1; j > 0; j-- ) + { + R[j] += xr * R[j - 1]; + S[j] += xs * S[j - 1]; + } + } + + return; +} + +/*---------------------------------------------------------------------* + * polydecomp() + * + * Computes the coefficients of the symmetric and antisymmetric + * polynomials P(z) and Q(z) that define the line spectrum pair + * decomposition of a given polynomial A(z) of order n. For even n, + * + * P(z) = [A(z) + z^(n+1) A(1/z)]/(1/z + 1), + * Q(z) = [A(z) - z^(n+1) A(1/z)]/(1/z - 1), + * + * These polynomials are then expressed in their direct form, + * respectively, R(x) and S(x), on the real axis x = cos w using + * explicit Chebyshev polynomials of the first kind. + * + * The coefficients of the polynomials R(x) and S(x) are returned + * in R[0:n/2] and S[0:n/2] for the given linear prediction + * coefficients A[0:n/2]. Note that R(x) and S(x) are formed in + * place such that P(z) is stored in the same array than R(x), + * and Q(z) is stored in the same array than S(x). + * + * The routines assumes n = 16. + *---------------------------------------------------------------------*/ + +static void polydecomp( + float A[], /* i : linear prediction coefficients */ + float R[], /* o : coefficients of R(x) */ + float S[] /* o : coefficients of S(x) */ +) +{ + float *P = &R[0], *Q = &S[0]; + Word16 i, j; + + P[0] = A[0]; + Q[0] = A[0]; + for ( i = 1, j = M; i <= NC; i++, j-- ) + { + P[i] = A[i] + A[j] - P[i - 1]; + Q[i] = A[i] - A[j] + Q[i - 1]; + } + + cheb2poly( P ); + cheb2poly( Q ); + + return; +} + +/*---------------------------------------------------------------------* + * cheb2poly() + * + * Computes the coefficients of the explicit Chebyshev polynomial + * P(x) = P[0]*x^n + P[1]*x^(n-1) + ... + P[n] given the coefficients + * of the series + * + * C(x) = C[0]*T_n(x) + C[1]*T_n-1(x) + ... + C[n]*T_0(x), + * + * where T_n(x) is the nth Chebyshev polynomial of the first kind. + * This implementation assumes C[0] = 1. Only the value n = 8 is + * supported. + * + * The conversion from C(x) to P(x) is done in place such that the + * coefficients of C(x) are given in P[0:8] and those of P(x) are + * returned in the same array. + *---------------------------------------------------------------------*/ + +static void cheb2poly( + float P[] /* i/o: The coefficients of C(x) and P(x) */ +) +{ + float c1, c2, c3, c4, c5, c6, c7, c8; + + c1 = P[1]; + c2 = P[2]; + c3 = P[3]; + c4 = P[4]; + c5 = P[5]; + c6 = P[6]; + c7 = P[7]; + c8 = P[8]; + + P[0] = 128.0f; + P[1] = 64.0f * c1; + P[2] = 32.0f * c2 - 256.0f; + P[3] = 16.0f * c3 - 112.0f * c1; + P[4] = 160.0f - 48.0f * c2 + 8.0f * c4; + P[5] = 56.0f * c1 - 20.0f * c3 + 4.0f * c5; + P[6] = 18.0f * c2 - 32.0f - 8.0f * c4 + 2.0f * c6; + P[7] = 5.0f * c3 - 7.0f * c1 - 3.0f * c5 + c7; + P[8] = 1.0f - c2 + c4 - c6 + 0.5f * c8; + + return; +} diff --git a/lib_com/mime.h b/lib_com/mime.h new file mode 100644 index 0000000000..7ca2689dcf --- /dev/null +++ b/lib_com/mime.h @@ -0,0 +1,447 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +#ifndef MIME_H +#define MIME_H + +#include +#include +#include "options.h" +#include "typedef.h" + +#define AMRWB_MAGIC_NUMBER "#!AMR-WB\n" /* defined in RFC4867 */ +#define EVS_MAGIC_NUMBER "#!EVS_MC1.0\n" /* defined in 26.445 */ + +static const Word32 AMRWB_IOmode2rate[16] = { + 6600, /* AMRWB_IO_6600 */ + 8850, /* AMRWB_IO_8850 */ + 12650, /* AMRWB_IO_1265 */ + 14250, /* AMRWB_IO_1425 */ + 15850, /* AMRWB_IO_1585 */ + 18250, /* AMRWB_IO_1825 */ + 19850, /* AMRWB_IO_1985 */ + 23050, /* AMRWB_IO_2305 */ + 23850, /* AMRWB_IO_2385 */ + 1750, /* AMRWB_IO_SID */ + -1, /* AMRWB_IO_FUT1 */ + -1, /* AMRWB_IO_FUT2 */ + -1, /* AMRWB_IO_FUT3 */ + -1, /* AMRWB_IO_FUT4 */ + 0, /* SPEECH_BAD */ + 0 /* NO_DATA */ +}; + +static const Word32 PRIMARYmode2rate[16] = { + 2800, /* PRIMARY_2800 */ + 7200, /* PRIMARY_7200 */ + 8000, /* PRIMARY_8000 */ + 9600, /* PRIMARY_9600 */ + 13200, /* PRIMARY_13200 */ + 16400, /* PRIMARY_16400 */ + 24400, /* PRIMARY_24400 */ + 32000, /* PRIMARY_32000 */ + 48000, /* PRIMARY_48000 */ + 64000, /* PRIMARY_64000 */ + 96000, /* PRIMARY_96000 */ + 128000, /* PRIMARY_128000 */ + 2400, /* PRIMARY_SID */ + -1, /* PRIMARY_FUT1 */ + 0, /* SPEECH_LOST */ + 0 /* NO_DATA */ +}; + +/* sorting tables for all AMR-WB IO modes */ + +static const Word16 sort_660[132] = { + 0, 5, 6, 7, 61, 84, 107, 130, 62, 85, + 8, 4, 37, 38, 39, 40, 58, 81, 104, 127, + 60, 83, 106, 129, 108, 131, 128, 41, 42, 80, + 126, 1, 3, 57, 103, 82, 105, 59, 2, 63, + 109, 110, 86, 19, 22, 23, 64, 87, 18, 20, + 21, 17, 13, 88, 43, 89, 65, 111, 14, 24, + 25, 26, 27, 28, 15, 16, 44, 90, 66, 112, + 9, 11, 10, 12, 67, 113, 29, 30, 31, 32, + 34, 33, 35, 36, 45, 51, 68, 74, 91, 97, + 114, 120, 46, 69, 92, 115, 52, 75, 98, 121, + 47, 70, 93, 116, 53, 76, 99, 122, 48, 71, + 94, 117, 54, 77, 100, 123, 49, 72, 95, 118, + 55, 78, 101, 124, 50, 73, 96, 119, 56, 79, + 102, 125 +}; + +static const Word16 sort_885[177] = { + 0, 4, 6, 7, 5, 3, 47, 48, 49, 112, + 113, 114, 75, 106, 140, 171, 80, 111, 145, 176, + 77, 108, 142, 173, 78, 109, 143, 174, 79, 110, + 144, 175, 76, 107, 141, 172, 50, 115, 51, 2, + 1, 81, 116, 146, 19, 21, 12, 17, 18, 20, + 16, 25, 13, 10, 14, 24, 23, 22, 26, 8, + 15, 52, 117, 31, 82, 147, 9, 33, 11, 83, + 148, 53, 118, 28, 27, 84, 149, 34, 35, 29, + 46, 32, 30, 54, 119, 37, 36, 39, 38, 40, + 85, 150, 41, 42, 43, 44, 45, 55, 60, 65, + 70, 86, 91, 96, 101, 120, 125, 130, 135, 151, + 156, 161, 166, 56, 87, 121, 152, 61, 92, 126, + 157, 66, 97, 131, 162, 71, 102, 136, 167, 57, + 88, 122, 153, 62, 93, 127, 158, 67, 98, 132, + 163, 72, 103, 137, 168, 58, 89, 123, 154, 63, + 94, 128, 159, 68, 99, 133, 164, 73, 104, 138, + 169, 59, 90, 124, 155, 64, 95, 129, 160, 69, + 100, 134, 165, 74, 105, 139, 170 +}; + +static const Word16 sort_1265[253] = { + 0, 4, 6, 93, 143, 196, 246, 7, 5, 3, + 47, 48, 49, 50, 51, 150, 151, 152, 153, 154, + 94, 144, 197, 247, 99, 149, 202, 252, 96, 146, + 199, 249, 97, 147, 200, 250, 100, 203, 98, 148, + 201, 251, 95, 145, 198, 248, 52, 2, 1, 101, + 204, 155, 19, 21, 12, 17, 18, 20, 16, 25, + 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, + 156, 31, 102, 205, 9, 33, 11, 103, 206, 54, + 157, 28, 27, 104, 207, 34, 35, 29, 46, 32, + 30, 55, 158, 37, 36, 39, 38, 40, 105, 208, + 41, 42, 43, 44, 45, 56, 106, 159, 209, 57, + 66, 75, 84, 107, 116, 125, 134, 160, 169, 178, + 187, 210, 219, 228, 237, 58, 108, 161, 211, 62, + 112, 165, 215, 67, 117, 170, 220, 71, 121, 174, + 224, 76, 126, 179, 229, 80, 130, 183, 233, 85, + 135, 188, 238, 89, 139, 192, 242, 59, 109, 162, + 212, 63, 113, 166, 216, 68, 118, 171, 221, 72, + 122, 175, 225, 77, 127, 180, 230, 81, 131, 184, + 234, 86, 136, 189, 239, 90, 140, 193, 243, 60, + 110, 163, 213, 64, 114, 167, 217, 69, 119, 172, + 222, 73, 123, 176, 226, 78, 128, 181, 231, 82, + 132, 185, 235, 87, 137, 190, 240, 91, 141, 194, + 244, 61, 111, 164, 214, 65, 115, 168, 218, 70, + 120, 173, 223, 74, 124, 177, 227, 79, 129, 182, + 232, 83, 133, 186, 236, 88, 138, 191, 241, 92, + 142, 195, 245 +}; + +static const Word16 sort_1425[285] = { + 0, 4, 6, 101, 159, 220, 278, 7, 5, 3, + 47, 48, 49, 50, 51, 166, 167, 168, 169, 170, + 102, 160, 221, 279, 107, 165, 226, 284, 104, 162, + 223, 281, 105, 163, 224, 282, 108, 227, 106, 164, + 225, 283, 103, 161, 222, 280, 52, 2, 1, 109, + 228, 171, 19, 21, 12, 17, 18, 20, 16, 25, + 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, + 172, 31, 110, 229, 9, 33, 11, 111, 230, 54, + 173, 28, 27, 112, 231, 34, 35, 29, 46, 32, + 30, 55, 174, 37, 36, 39, 38, 40, 113, 232, + 41, 42, 43, 44, 45, 56, 114, 175, 233, 62, + 120, 181, 239, 75, 133, 194, 252, 57, 115, 176, + 234, 63, 121, 182, 240, 70, 128, 189, 247, 76, + 134, 195, 253, 83, 141, 202, 260, 92, 150, 211, + 269, 84, 142, 203, 261, 93, 151, 212, 270, 85, + 143, 204, 262, 94, 152, 213, 271, 86, 144, 205, + 263, 95, 153, 214, 272, 64, 122, 183, 241, 77, + 135, 196, 254, 65, 123, 184, 242, 78, 136, 197, + 255, 87, 145, 206, 264, 96, 154, 215, 273, 58, + 116, 177, 235, 66, 124, 185, 243, 71, 129, 190, + 248, 79, 137, 198, 256, 88, 146, 207, 265, 97, + 155, 216, 274, 59, 117, 178, 236, 67, 125, 186, + 244, 72, 130, 191, 249, 80, 138, 199, 257, 89, + 147, 208, 266, 98, 156, 217, 275, 60, 118, 179, + 237, 68, 126, 187, 245, 73, 131, 192, 250, 81, + 139, 200, 258, 90, 148, 209, 267, 99, 157, 218, + 276, 61, 119, 180, 238, 69, 127, 188, 246, 74, + 132, 193, 251, 82, 140, 201, 259, 91, 149, 210, + 268, 100, 158, 219, 277 +}; + +static const Word16 sort_1585[317] = { + 0, 4, 6, 109, 175, 244, 310, 7, 5, 3, + 47, 48, 49, 50, 51, 182, 183, 184, 185, 186, + 110, 176, 245, 311, 115, 181, 250, 316, 112, 178, + 247, 313, 113, 179, 248, 314, 116, 251, 114, 180, + 249, 315, 111, 177, 246, 312, 52, 2, 1, 117, + 252, 187, 19, 21, 12, 17, 18, 20, 16, 25, + 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, + 188, 31, 118, 253, 9, 33, 11, 119, 254, 54, + 189, 28, 27, 120, 255, 34, 35, 29, 46, 32, + 30, 55, 190, 37, 36, 39, 38, 40, 121, 256, + 41, 42, 43, 44, 45, 56, 122, 191, 257, 63, + 129, 198, 264, 76, 142, 211, 277, 89, 155, 224, + 290, 102, 168, 237, 303, 57, 123, 192, 258, 70, + 136, 205, 271, 83, 149, 218, 284, 96, 162, 231, + 297, 62, 128, 197, 263, 75, 141, 210, 276, 88, + 154, 223, 289, 101, 167, 236, 302, 58, 124, 193, + 259, 71, 137, 206, 272, 84, 150, 219, 285, 97, + 163, 232, 298, 59, 125, 194, 260, 64, 130, 199, + 265, 67, 133, 202, 268, 72, 138, 207, 273, 77, + 143, 212, 278, 80, 146, 215, 281, 85, 151, 220, + 286, 90, 156, 225, 291, 93, 159, 228, 294, 98, + 164, 233, 299, 103, 169, 238, 304, 106, 172, 241, + 307, 60, 126, 195, 261, 65, 131, 200, 266, 68, + 134, 203, 269, 73, 139, 208, 274, 78, 144, 213, + 279, 81, 147, 216, 282, 86, 152, 221, 287, 91, + 157, 226, 292, 94, 160, 229, 295, 99, 165, 234, + 300, 104, 170, 239, 305, 107, 173, 242, 308, 61, + 127, 196, 262, 66, 132, 201, 267, 69, 135, 204, + 270, 74, 140, 209, 275, 79, 145, 214, 280, 82, + 148, 217, 283, 87, 153, 222, 288, 92, 158, 227, + 293, 95, 161, 230, 296, 100, 166, 235, 301, 105, + 171, 240, 306, 108, 174, 243, 309 +}; + +static const Word16 sort_1825[365] = { + 0, 4, 6, 121, 199, 280, 358, 7, 5, 3, + 47, 48, 49, 50, 51, 206, 207, 208, 209, 210, + 122, 200, 281, 359, 127, 205, 286, 364, 124, 202, + 283, 361, 125, 203, 284, 362, 128, 287, 126, 204, + 285, 363, 123, 201, 282, 360, 52, 2, 1, 129, + 288, 211, 19, 21, 12, 17, 18, 20, 16, 25, + 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, + 212, 31, 130, 289, 9, 33, 11, 131, 290, 54, + 213, 28, 27, 132, 291, 34, 35, 29, 46, 32, + 30, 55, 214, 37, 36, 39, 38, 40, 133, 292, + 41, 42, 43, 44, 45, 56, 134, 215, 293, 198, + 299, 136, 120, 138, 60, 279, 58, 62, 357, 139, + 140, 295, 156, 57, 219, 297, 63, 217, 137, 170, + 300, 222, 64, 106, 61, 78, 294, 92, 142, 141, + 135, 221, 296, 301, 343, 59, 298, 184, 329, 315, + 220, 216, 265, 251, 218, 237, 352, 223, 157, 86, + 171, 87, 164, 351, 111, 302, 65, 178, 115, 323, + 72, 192, 101, 179, 93, 73, 193, 151, 337, 309, + 143, 274, 69, 324, 165, 150, 97, 338, 110, 310, + 330, 273, 68, 107, 175, 245, 114, 79, 113, 189, + 246, 259, 174, 71, 185, 96, 344, 100, 322, 83, + 334, 316, 333, 252, 161, 348, 147, 82, 269, 232, + 260, 308, 353, 347, 163, 231, 306, 320, 188, 270, + 146, 177, 266, 350, 256, 85, 149, 116, 191, 160, + 238, 258, 336, 305, 255, 88, 224, 99, 339, 230, + 228, 227, 272, 242, 241, 319, 233, 311, 102, 74, + 180, 275, 66, 194, 152, 325, 172, 247, 244, 261, + 117, 158, 166, 354, 75, 144, 108, 312, 94, 186, + 303, 80, 234, 89, 195, 112, 340, 181, 345, 317, + 326, 276, 239, 167, 118, 313, 70, 355, 327, 253, + 190, 176, 271, 104, 98, 153, 103, 90, 76, 267, + 277, 248, 225, 262, 182, 84, 154, 235, 335, 168, + 331, 196, 341, 249, 162, 307, 148, 349, 263, 321, + 257, 243, 229, 356, 159, 119, 67, 187, 173, 145, + 240, 77, 304, 332, 314, 342, 109, 254, 81, 278, + 105, 91, 346, 318, 183, 250, 197, 328, 95, 155, + 169, 268, 226, 236, 264 +}; + +static const Word16 sort_1985[397] = { + 0, 4, 6, 129, 215, 304, 390, 7, 5, 3, + 47, 48, 49, 50, 51, 222, 223, 224, 225, 226, + 130, 216, 305, 391, 135, 221, 310, 396, 132, 218, + 307, 393, 133, 219, 308, 394, 136, 311, 134, 220, + 309, 395, 131, 217, 306, 392, 52, 2, 1, 137, + 312, 227, 19, 21, 12, 17, 18, 20, 16, 25, + 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, + 228, 31, 138, 313, 9, 33, 11, 139, 314, 54, + 229, 28, 27, 140, 315, 34, 35, 29, 46, 32, + 30, 55, 230, 37, 36, 39, 38, 40, 141, 316, + 41, 42, 43, 44, 45, 56, 142, 231, 317, 63, + 73, 92, 340, 82, 324, 149, 353, 159, 334, 165, + 338, 178, 163, 254, 77, 168, 257, 153, 343, 57, + 248, 238, 79, 252, 166, 67, 80, 201, 101, 267, + 143, 164, 341, 255, 339, 187, 376, 318, 78, 328, + 362, 115, 232, 242, 253, 290, 276, 62, 58, 158, + 68, 93, 179, 319, 148, 169, 154, 72, 385, 329, + 333, 344, 102, 83, 144, 233, 323, 124, 243, 192, + 354, 237, 64, 247, 202, 209, 150, 116, 335, 268, + 239, 299, 188, 196, 298, 94, 195, 258, 123, 363, + 384, 109, 325, 371, 170, 370, 84, 110, 295, 180, + 74, 210, 191, 106, 291, 205, 367, 381, 377, 206, + 355, 122, 119, 120, 383, 160, 105, 108, 277, 380, + 294, 284, 285, 345, 208, 269, 249, 366, 386, 300, + 297, 259, 125, 369, 197, 97, 194, 286, 211, 281, + 280, 183, 372, 87, 155, 283, 59, 348, 327, 184, + 76, 111, 330, 203, 349, 69, 98, 152, 145, 189, + 66, 320, 337, 173, 358, 251, 198, 174, 263, 262, + 126, 241, 193, 88, 388, 117, 95, 387, 112, 359, + 287, 244, 103, 272, 301, 171, 162, 234, 273, 127, + 373, 181, 292, 85, 378, 302, 121, 107, 364, 346, + 356, 212, 278, 213, 65, 382, 288, 207, 113, 175, + 99, 296, 374, 368, 199, 260, 185, 336, 331, 161, + 270, 264, 250, 240, 75, 350, 151, 60, 89, 321, + 156, 274, 360, 326, 70, 282, 167, 146, 352, 81, + 91, 389, 266, 245, 177, 235, 190, 256, 204, 342, + 128, 118, 303, 104, 379, 182, 114, 375, 200, 96, + 293, 172, 214, 365, 279, 86, 289, 351, 347, 357, + 261, 186, 176, 271, 90, 100, 147, 322, 275, 361, + 71, 332, 61, 265, 157, 246, 236 +}; + +static const Word16 sort_2305[461] = { + 0, 4, 6, 145, 247, 352, 454, 7, 5, 3, + 47, 48, 49, 50, 51, 254, 255, 256, 257, 258, + 146, 248, 353, 455, 151, 253, 358, 460, 148, 250, + 355, 457, 149, 251, 356, 458, 152, 359, 150, 252, + 357, 459, 147, 249, 354, 456, 52, 2, 1, 153, + 360, 259, 19, 21, 12, 17, 18, 20, 16, 25, + 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, + 260, 31, 154, 361, 9, 33, 11, 155, 362, 54, + 261, 28, 27, 156, 363, 34, 35, 29, 46, 32, + 30, 55, 262, 37, 36, 39, 38, 40, 157, 364, + 41, 42, 43, 44, 45, 56, 158, 263, 365, 181, + 192, 170, 79, 57, 399, 90, 159, 297, 377, 366, + 275, 68, 183, 388, 286, 194, 299, 92, 70, 182, + 401, 172, 59, 91, 58, 400, 368, 161, 81, 160, + 264, 171, 80, 389, 390, 378, 379, 193, 298, 69, + 266, 265, 367, 277, 288, 276, 287, 184, 60, 195, + 82, 93, 71, 369, 402, 173, 162, 444, 300, 391, + 98, 76, 278, 61, 267, 374, 135, 411, 167, 102, + 380, 200, 87, 178, 65, 94, 204, 124, 72, 342, + 189, 305, 381, 396, 433, 301, 226, 407, 289, 237, + 113, 215, 185, 128, 309, 403, 116, 320, 196, 331, + 370, 422, 174, 64, 392, 83, 425, 219, 134, 188, + 432, 112, 427, 139, 279, 163, 436, 208, 447, 218, + 236, 229, 97, 294, 385, 230, 166, 268, 177, 443, + 225, 426, 101, 272, 138, 127, 290, 117, 347, 199, + 414, 95, 140, 240, 410, 395, 209, 129, 283, 346, + 105, 241, 437, 86, 308, 448, 203, 345, 186, 107, + 220, 415, 334, 319, 106, 313, 118, 123, 73, 207, + 421, 214, 384, 373, 438, 62, 371, 341, 75, 449, + 168, 323, 164, 242, 416, 324, 304, 197, 335, 404, + 271, 63, 191, 325, 96, 169, 231, 280, 312, 187, + 406, 84, 201, 100, 67, 382, 175, 336, 202, 330, + 269, 393, 376, 383, 293, 307, 409, 179, 285, 314, + 302, 372, 398, 190, 180, 89, 99, 103, 232, 78, + 88, 77, 136, 387, 165, 198, 394, 125, 176, 428, + 74, 375, 238, 227, 66, 273, 282, 141, 306, 412, + 114, 85, 130, 348, 119, 291, 296, 386, 233, 397, + 303, 405, 284, 445, 423, 221, 210, 205, 450, 108, + 274, 434, 216, 343, 337, 142, 243, 321, 408, 451, + 310, 292, 120, 109, 281, 439, 270, 429, 332, 295, + 418, 211, 315, 222, 326, 131, 430, 244, 327, 349, + 417, 316, 143, 338, 440, 234, 110, 212, 452, 245, + 121, 419, 350, 223, 132, 441, 328, 413, 317, 339, + 126, 104, 137, 446, 344, 239, 435, 115, 333, 206, + 322, 217, 228, 424, 453, 311, 351, 111, 442, 224, + 213, 122, 431, 340, 235, 246, 133, 144, 420, 329, + 318 +}; + +static const Word16 sort_2385[477] = { + 0, 4, 6, 145, 251, 360, 466, 7, 5, 3, + 47, 48, 49, 50, 51, 262, 263, 264, 265, 266, + 146, 252, 361, 467, 151, 257, 366, 472, 148, 254, + 363, 469, 149, 255, 364, 470, 156, 371, 150, 256, + 365, 471, 147, 253, 362, 468, 52, 2, 1, 157, + 372, 267, 19, 21, 12, 17, 18, 20, 16, 25, + 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, + 268, 31, 152, 153, 154, 155, 258, 259, 260, 261, + 367, 368, 369, 370, 473, 474, 475, 476, 158, 373, + 9, 33, 11, 159, 374, 54, 269, 28, 27, 160, + 375, 34, 35, 29, 46, 32, 30, 55, 270, 37, + 36, 39, 38, 40, 161, 376, 41, 42, 43, 44, + 45, 56, 162, 271, 377, 185, 196, 174, 79, 57, + 411, 90, 163, 305, 389, 378, 283, 68, 187, 400, + 294, 198, 307, 92, 70, 186, 413, 176, 59, 91, + 58, 412, 380, 165, 81, 164, 272, 175, 80, 401, + 402, 390, 391, 197, 306, 69, 274, 273, 379, 285, + 296, 284, 295, 188, 60, 199, 82, 93, 71, 381, + 414, 177, 166, 456, 308, 403, 98, 76, 286, 61, + 275, 386, 135, 423, 171, 102, 392, 204, 87, 182, + 65, 94, 208, 124, 72, 350, 193, 313, 393, 408, + 445, 309, 230, 419, 297, 241, 113, 219, 189, 128, + 317, 415, 116, 328, 200, 339, 382, 434, 178, 64, + 404, 83, 437, 223, 134, 192, 444, 112, 439, 139, + 287, 167, 448, 212, 459, 222, 240, 233, 97, 302, + 397, 234, 170, 276, 181, 455, 229, 438, 101, 280, + 138, 127, 298, 117, 355, 203, 426, 95, 140, 244, + 422, 407, 213, 129, 291, 354, 105, 245, 449, 86, + 316, 460, 207, 353, 190, 107, 224, 427, 342, 327, + 106, 321, 118, 123, 73, 211, 433, 218, 396, 385, + 450, 62, 383, 349, 75, 461, 172, 331, 168, 246, + 428, 332, 312, 201, 343, 416, 279, 63, 195, 333, + 96, 173, 235, 288, 320, 191, 418, 84, 205, 100, + 67, 394, 179, 344, 206, 338, 277, 405, 388, 395, + 301, 315, 421, 183, 293, 322, 310, 384, 410, 194, + 184, 89, 99, 103, 236, 78, 88, 77, 136, 399, + 169, 202, 406, 125, 180, 440, 74, 387, 242, 231, + 66, 281, 290, 141, 314, 424, 114, 85, 130, 356, + 119, 299, 304, 398, 237, 409, 311, 417, 292, 457, + 435, 225, 214, 209, 462, 108, 282, 446, 220, 351, + 345, 142, 247, 329, 420, 463, 318, 300, 120, 109, + 289, 451, 278, 441, 340, 303, 430, 215, 323, 226, + 334, 131, 442, 248, 335, 357, 429, 324, 143, 346, + 452, 238, 110, 216, 464, 249, 121, 431, 358, 227, + 132, 453, 336, 425, 325, 347, 126, 104, 137, 458, + 352, 243, 447, 115, 341, 210, 330, 221, 232, 436, + 465, 319, 359, 111, 454, 228, 217, 122, 443, 348, + 239, 250, 133, 144, 432, 337, 326 +}; + +static const Word16 sort_SID[35] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34 +}; + +/* pointer table for bit sorting tables */ +static const Word16 *const sort_ptr[16] = { sort_660, sort_885, sort_1265, sort_1425, sort_1585, sort_1825, sort_1985, sort_2305, + sort_2385, sort_SID, NULL, NULL, NULL, NULL, NULL, NULL }; + +/* 4 bit to 3 bit AMR-WB CMR remapping table */ +static const Word16 amrwb_3bit_cmr[16] = { + 0x00, /* AMRWB_660 */ + 0x01, /* AMRWB_885 */ + 0x02, /* AMRWB_1265 */ + 0x05, /* AMRWB_1425 */ + 0x03, /* AMRWB_1585 */ + 0x06, /* AMRWB_1825 */ + 0x06, /* AMRWB_1985 -> AMRWB_1825 */ + 0x06, /* AMRWB_2305 -> AMRWB_1825 */ + 0x04, /* AMRWB_2385 */ + 0x07, /* invalid request -> none */ + 0x07, /* invalid request -> none */ + 0x07, /* invalid request -> none */ + 0x07, /* invalid request -> none */ + 0x07, /* invalid request -> none */ + 0x07, /* invalid request -> none */ + 0x07 /* invalid request -> none */ +}; + +/* 3 bit to 4 bit AMR-WB CMR remapping table */ +static const Word16 amrwb_4bit_cmr[8] = { + 0x00, /* AMRWB_660 */ + 0x01, /* AMRWB_885 */ + 0x02, /* AMRWB_1265 */ + 0x04, /* AMRWB_1585 */ + 0x08, /* AMRWB_2385 */ + 0x03, /* AMRWB_1425 */ + 0x05, /* AMRWB_1825 */ + 0x0f /* invalid */ +}; +#endif diff --git a/lib_com/modif_fs.c b/lib_com/modif_fs.c new file mode 100644 index 0000000000..a817f0c348 --- /dev/null +++ b/lib_com/modif_fs.c @@ -0,0 +1,901 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * modify_Fs() + * + * Function for resampling of signals + *-------------------------------------------------------------------*/ + +/*! r: length of output */ +int16_t modify_Fs( + const float sigIn[], /* i : signal to decimate */ + const int16_t lg, /* i : length of input + 0 delay signaling */ + const int32_t fin, /* i : frequency of input */ + float sigOut[], /* o : decimated signal */ + const int32_t fout, /* i : frequency of output */ + float mem[], /* i/o: filter memory */ + const int16_t nblp /* i : flag indicating if NB low-pass is applied */ +) +{ + int16_t i; + int16_t lg_out, fac_num, fac_den, filt_len, frac, mem_len; + float num_den; + int16_t datastep, fracstep; + float *sigIn_ptr; + float signal_tab[3 * L_FILT_MAX + L_FRAME48k], *signal, *signal_ana; /* 3* as 2* for memory and 1* for future prediction */ + float A[M + 1], r[M + 1], epsP[M + 1], val; + int16_t mem_len_ana; + int16_t plus_sample_in; + int16_t j; + float mu_preemph; + float mem_preemph; + const Resampling_cfg *cfg_ptr; + int16_t flag_low_order = 0; + int16_t filt_len_tmp; + + /*-------------------------------------------------------------------* + * IIR filters for resampling to/from 8 kHz + *-------------------------------------------------------------------*/ + + /*-------------------------------------------------------------------* + * Find the resampling configuration + *-------------------------------------------------------------------*/ + + if ( fin == fout ) + { + /* just copy the signal and quit */ + for ( i = 0; i < lg; i++ ) + { + sigOut[i] = sigIn[i]; + } + + return lg; + } + else + { + /* find the resampling configuration in the lookup table */ + for ( cfg_ptr = &resampling_cfg_tbl[0]; ( cfg_ptr->fin != 0 ) && !( cfg_ptr->fin == fin && cfg_ptr->fout == fout ); cfg_ptr++ ) + { + } + + + /* find config with NB 4kHz low-pass */ + if ( nblp && ( fin > 8000 ) && ( fout == 12800 ) ) + { + flag_low_order = 1; + for ( cfg_ptr++; ( cfg_ptr->fin != 0 ) && !( cfg_ptr->fin == fin && cfg_ptr->fout == fout ); cfg_ptr++ ) + { + } + } + +#define WMC_TOOL_MAN + /* Retrieve and/or calculate the resampling parameters */ + fac_num = cfg_ptr->fac_num; + fac_den = (int16_t) ( ( cfg_ptr->fin * fac_num ) / cfg_ptr->fout ); + lg_out = ( lg * fac_num ) / fac_den; + filt_len = cfg_ptr->filt_len; + + mem_len = 2 * filt_len; + plus_sample_in = 0; /* default, regular delay */ + frac = 0; + + if ( fin == 8000 && fout == 12800 ) + { + plus_sample_in = 7; + frac = 4; + } + + signal = signal_tab + 2 * L_FILT_MAX + L_FRAME48k - mem_len - lg; + signal_ana = signal; + mem_len_ana = mem_len; +#undef WMC_TOOL_MAN + } + + /*-------------------------------------------------------------------* + * FIR filters for resampling to/from 12.8, 16, 32, 48 kHz + *-------------------------------------------------------------------*/ + + /* append filter memory */ + for ( i = 0; i < 2 * filt_len; i++ ) + { + signal[i] = mem[i]; + } + + for ( i = 0; i < lg; i++ ) + { + signal[i + ( 2 * filt_len )] = sigIn[i]; + } + + if ( plus_sample_in > 0 ) + { + autocorr( signal_ana + mem_len_ana + lg - LEN_WIN_SSS, r, 1, LEN_WIN_SSS, wind_sss, 0, 0, 0 ); + + mu_preemph = r[1] / r[0]; + mem_preemph = signal_ana[mem_len_ana + lg - LEN_WIN_SSS - 1]; + preemph( signal_ana + mem_len_ana + lg - LEN_WIN_SSS, mu_preemph, LEN_WIN_SSS, &mem_preemph ); + + /* Autocorrelations */ + autocorr( signal_ana + mem_len_ana + lg - LEN_WIN_SSS, r, M, LEN_WIN_SSS, wind_sss, 0, 0, 0 ); + + lag_wind( r, M, fin, LAGW_STRONG ); + + /* Levinson-Durbin */ + lev_dur( A, r, M, epsP ); + + for ( i = 0; i < plus_sample_in; i++ ) + { + val = 0; + for ( j = 1; j <= M; j++ ) + { + val -= signal[i + lg + mem_len - j] * A[j]; + } + signal[i + lg + mem_len] = val; /* AZ ringing padding */ + } + + mem_preemph = signal[mem_len + lg - LEN_WIN_SSS - 1]; + deemph( signal + mem_len + lg - LEN_WIN_SSS, mu_preemph, LEN_WIN_SSS + plus_sample_in, &mem_preemph ); + } + + /* interpolation */ + datastep = fac_den / fac_num; + fracstep = fac_den - datastep * fac_num; /* equivalent to datastep = fac_den % fac_num */ + + sigIn_ptr = signal + filt_len + plus_sample_in; + + filt_len_tmp = filt_len; + if ( flag_low_order ) + { + filt_len_tmp = ( filt_len + 1 ) >> 1; + } + + for ( i = 0; i < lg_out; i++ ) + { + sigOut[i] = interpolation( sigIn_ptr, cfg_ptr->filter, frac, fac_num, filt_len_tmp ); + + frac = frac + fracstep; + if ( frac >= fac_num ) + { + frac = frac - fac_num; + sigIn_ptr++; + } + + sigIn_ptr += datastep; + } + + /* rescaling */ + if ( ( fac_num > fac_den ) == ( ( cfg_ptr->flags & RS_INV_FAC ) != 0 ) ) + { + num_den = (float) fac_num / fac_den; + + for ( i = 0; i < lg_out; i++ ) + { + sigOut[i] *= num_den; + } + } + + /* update the filter memory */ + for ( i = 0; i < 2 * filt_len; i++ ) + { + mem[i] = signal[i + lg]; + } + + return lg_out; +} + +/*-------------------------------------------------------------------* + * modify_Fs_intcub3m_sup() + * + * + *-------------------------------------------------------------------*/ + +/*! r: length of output */ +int16_t modify_Fs_intcub3m_sup( + const float sigIn[], /* i : signal to decimate with memory of 2 samples (indexes -2 & -1) */ + const int16_t lg, /* i : length of input (suppose that lg is such that lg_out is integer, ex multiple of 5 in case of 16kHz to 12.8 kHz) */ + const int32_t fin, /* i : frequency of input */ + float sigOut[], /* o : decimated signal */ + const int32_t fout, /* i : frequency of output */ + int16_t *delayout /* o : delay of output */ +) +{ + int16_t i, j, k, i1, i2, k1, k2, k3, kk, cind; + int16_t lg_out, fk1, k2d, k3d; + float cc[4][4]; + float vv; + const double( *cu )[3] = 0; + + /*-------------------------------------------------------------------* + * Find the resampling configuration + *-------------------------------------------------------------------*/ + + /* check if fin and fout are the same */ + if ( fin == fout ) + { + /* just copy the signal and quit */ + for ( i = 0; i < lg; i++ ) + { + sigOut[i] = sigIn[i]; + } + + *delayout = 0; + return lg; + } + else + { + /* length of the interpolated signal */ + lg_out = (int16_t) ( lg * fout / fin ); + + /* cc[x][3]*s*s*s + cc[x][2]*s*s + cc[x][1]*s + cc[x][0]; indexes relatives of s : -1 0 1 2 */ + /* d : cc[x][0] = s[0] */ + /* b : cc[x][2] =(s[-1]+s[1])/2-s[0] */ + /* a : cc[x][3] = (s[-1]+s[2]-s[0]-s[1]-4*cc[x][2]) / 6 */ + /* c : cc[x][1] = s[1]-s[0]-cc[x][3]-cc[x][2] */ + + /* coef inits using memory (indexes < 0) */ + /* cc[2][] : indexes -2 -1 0 1 */ + cc[2][0] = sigIn[-1] / 3; + cc[2][2] = ( sigIn[-2] + sigIn[0] ) / 2 - sigIn[-1]; + cc[2][3] = ( sigIn[-2] + sigIn[1] - sigIn[-1] - sigIn[0] - 4 * cc[2][2] ) / 6; + cc[2][1] = sigIn[0] - sigIn[-1] - cc[2][3] - cc[2][2]; + + /* cc[3][] : indexes -1 0 1 2 */ + cc[3][0] = sigIn[0] / 3; + cc[3][2] = ( sigIn[-1] + sigIn[1] ) / 2 - sigIn[0]; + cc[3][3] = ( sigIn[-1] + sigIn[2] - sigIn[0] - sigIn[1] - 4 * cc[3][2] ) / 6; + cc[3][1] = sigIn[1] - sigIn[0] - cc[3][3] - cc[3][2]; + j = 0; + + if ( fin == 12800 ) + { + if ( fout == 8000 ) + { + cind = 0; + } + else if ( fout == 16000 ) + { + cind = 1; + } + else if ( fout == 32000 ) + { + cind = 2; + } + else if ( fout == 48000 ) + { + cind = 3; + } + else + { + printf( "warning, output sampling frequency %d not implemented for input %d", fout, fin ); + return ( -1 ); + } + } + else if ( fin == 16000 ) + { + if ( fout == 12800 ) + { + cind = 4; + } + else if ( fout == 32000 ) + { + cind = 5; + } + else if ( fout == 48000 ) + { + cind = 6; + } + else + { + printf( "warning, output sampling frequency %d not implemented for input %d", fout, fin ); + return ( -1 ); + } + } + else + { + printf( "warning, input sampling frequency %d not implemented", fin ); + return ( -1 ); + } + + *delayout = ct2[cind][9]; + + if ( ct2[cind][12] == 15 ) + { + cu = cu15; + } + + if ( ct2[cind][12] == 4 ) + { + cu = cu4; + } + + fk1 = 2 * ct2[cind][12] - 2; + k2d = fk1 / 2; /* shift of index in cu with respect to the next sample (ex 1.25 -> 0.25 ) */ + k3d = fk1 - 1; /* to compurte index in cu with respect to the last sample with - sign (ex 1.25 -> -0.75 ) */ + + kk = 0; + for ( i = 0; i < lg - ct2[cind][11]; ) + { + sigOut[j++] = sigIn[i]; + for ( k = 0; k < ct2[cind][10]; k++ ) + { + cc[kk][0] = sigIn[i + 1] / 3; + cc[kk][2] = ( sigIn[i] + sigIn[i + 2] ) / 2 - sigIn[i + 1]; + cc[kk][3] = ( sigIn[i] + sigIn[i + 3] - sigIn[i + 1] - sigIn[i + 2] - 4 * cc[kk][2] ) / 6; + cc[kk][1] = sigIn[i + 2] - sigIn[i + 1] - cc[kk][3] - cc[kk][2]; + i++; + + i2 = kk - 2; + i1 = kk - 1; + if ( i1 < 0 ) + { + i1 += 4; + } + + if ( i2 < 0 ) + { + i2 += 4; + } + + for ( k1 = ct2[cind][k]; k1 < fk1; k1 += ct2[cind][8] ) + { + k2 = k1 - k2d; + k3 = k3d - k1; + vv = (float) ( cu[k1][2] * cc[i2][3] + cu[k1][1] * cc[i2][2] + cu[k1][0] * cc[i2][1] + cc[i2][0] ); + vv += (float) ( cu[k2][2] * cc[i1][3] + cu[k2][1] * cc[i1][2] + cu[k2][0] * cc[i1][1] + cc[i1][0] ); + vv += (float) ( -cu[k3][2] * cc[kk][3] + cu[k3][1] * cc[kk][2] - cu[k3][0] * cc[kk][1] + cc[kk][0] ); + sigOut[j++] = vv; + } + + kk++; + if ( kk == 4 ) + { + kk = 0; + } + } + } + + sigOut[j++] = sigIn[i]; + + for ( k = 0; k < ct2[cind][11] - 3; k++ ) + { + cc[kk][0] = sigIn[i + 1] / 3; + cc[kk][2] = ( sigIn[i] + sigIn[i + 2] ) / 2 - sigIn[i + 1]; + cc[kk][3] = ( sigIn[i] + sigIn[i + 3] - sigIn[i + 1] - sigIn[i + 2] - 4 * cc[kk][2] ) / 6; + cc[kk][1] = sigIn[i + 2] - sigIn[i + 1] - cc[kk][3] - cc[kk][2]; + i++; + + i2 = kk - 2; + i1 = kk - 1; + if ( i1 < 0 ) + { + i1 += 4; + } + + if ( i2 < 0 ) + { + i2 += 4; + } + + for ( k1 = ct2[cind][k]; k1 < fk1; k1 += ct2[cind][8] ) + { + k2 = k1 - k2d; + k3 = k3d - k1; + vv = (float) ( cu[k1][2] * cc[i2][3] + cu[k1][1] * cc[i2][2] + cu[k1][0] * cc[i2][1] + cc[i2][0] ); + vv += (float) ( cu[k2][2] * cc[i1][3] + cu[k2][1] * cc[i1][2] + cu[k2][0] * cc[i1][1] + cc[i1][0] ); + vv += (float) ( -cu[k3][2] * cc[kk][3] + cu[k3][1] * cc[kk][2] - cu[k3][0] * cc[kk][1] + cc[kk][0] ); + sigOut[j++] = vv; + } + + kk++; + + if ( kk == 4 ) + { + kk = 0; + } + } + + kk--; + if ( kk == -1 ) + { + kk = 3; + } + + if ( ct2[cind][10] == 1 ) + { + sigOut[j++] = sigIn[i]; + } + + for ( k1 = ct2[cind][k]; k1 < fk1; k1 += ct2[cind][8] ) + { + k2 = k1 - k2d; + vv = (float) ( cu[k2][2] * cc[kk][3] + cu[k2][1] * cc[kk][2] + cu[k2][0] * cc[kk][1] + cc[kk][0] ); + sigOut[j++] = vv * 3; + } + + if ( ct2[cind][10] < 3 ) + { + sigOut[j++] = sigIn[i + 1]; + } + + for ( k1 = ct2[cind][k + 1]; k1 < fk1; k1 += ct2[cind][8] ) + { + vv = (float) ( cu[k1][2] * cc[kk][3] + cu[k1][1] * cc[kk][2] + cu[k1][0] * cc[kk][1] + cc[kk][0] ); + sigOut[j++] = vv * 3; + } + + if ( ct2[cind][10] == 1 ) + { + sigOut[j++] = sigIn[i + 2]; + } + } + + return lg_out; +} + +/*-------------------------------------------------------------------* + * Interpolate_allpass_steep() + * + * Interpolation by a factor 2 + *-------------------------------------------------------------------*/ + +void Interpolate_allpass_steep( + const float *in, /* i : input array of size N */ + float *mem, /* i/o: memory */ + const int16_t N, /* i : number of input samples */ + float *out /* o : output array of size 2*N */ +) +{ + int16_t n, k; + float temp[ALLPASSSECTIONS_STEEP - 1]; + + /* upper allpass filter chain */ + for ( k = 0; k < N; k++ ) + { + temp[0] = mem[0] + AP2_STEEP[0] * in[k]; + mem[0] = in[k] - AP2_STEEP[0] * temp[0]; + + /* for better performance, unroll this loop */ + for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) + { + temp[n] = mem[n] + AP2_STEEP[n] * temp[n - 1]; + mem[n] = temp[n - 1] - AP2_STEEP[n] * temp[n]; + } + + out[2 * k + 1] = mem[ALLPASSSECTIONS_STEEP - 1] + AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * temp[ALLPASSSECTIONS_STEEP - 2]; + mem[ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * out[2 * k + 1]; + } + + /* lower allpass filter chain */ + for ( k = 0; k < N; k++ ) + { + temp[0] = mem[ALLPASSSECTIONS_STEEP] + AP1_STEEP[0] * in[k]; + mem[ALLPASSSECTIONS_STEEP] = in[k] - AP1_STEEP[0] * temp[0]; + + /* for better performance, unroll this loop */ + for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) + { + temp[n] = mem[ALLPASSSECTIONS_STEEP + n] + AP1_STEEP[n] * temp[n - 1]; + mem[ALLPASSSECTIONS_STEEP + n] = temp[n - 1] - AP1_STEEP[n] * temp[n]; + } + + out[2 * k] = mem[2 * ALLPASSSECTIONS_STEEP - 1] + AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * temp[ALLPASSSECTIONS_STEEP - 2]; + mem[2 * ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * out[2 * k]; + } + + return; +} + +/*-------------------------------------------------------------------* + * Decimate_allpass_steep() + * + * Decimation by a factor 2 + *-------------------------------------------------------------------*/ + +void Decimate_allpass_steep( + const float *in, /* i : input array of size N */ + float *mem, /* i/o: memory */ + const int16_t N, /* i : number of input samples */ + float *out /* o : output array of size N/2 */ +) +{ + int16_t n, k; + float temp[ALLPASSSECTIONS_STEEP]; + + /* upper allpass filter chain */ + for ( k = 0; k < N / 2; k++ ) + { + temp[0] = mem[0] + AP1_STEEP[0] * in[2 * k]; + mem[0] = in[2 * k] - AP1_STEEP[0] * temp[0]; + + /* for better performance, unroll this loop */ + for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) + { + temp[n] = mem[n] + AP1_STEEP[n] * temp[n - 1]; + if ( fabs( temp[n] ) < 1e-12 ) + { + temp[n] = sign( temp[n] ) * 1e-12f; + } + mem[n] = temp[n - 1] - AP1_STEEP[n] * temp[n]; + } + + out[k] = mem[ALLPASSSECTIONS_STEEP - 1] + AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * temp[ALLPASSSECTIONS_STEEP - 2]; + mem[ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * out[k]; + } + + /* lower allpass filter chain */ + temp[0] = mem[ALLPASSSECTIONS_STEEP] + AP2_STEEP[0] * mem[2 * ALLPASSSECTIONS_STEEP]; + mem[ALLPASSSECTIONS_STEEP] = mem[2 * ALLPASSSECTIONS_STEEP] - AP2_STEEP[0] * temp[0]; + + /* for better performance, unroll this loop */ + for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) + { + temp[n] = mem[ALLPASSSECTIONS_STEEP + n] + AP2_STEEP[n] * temp[n - 1]; + if ( fabs( temp[n] ) < 1e-12 ) + { + temp[n] = sign( temp[n] ) * 1e-12f; + } + mem[ALLPASSSECTIONS_STEEP + n] = temp[n - 1] - AP2_STEEP[n] * temp[n]; + } + + temp[ALLPASSSECTIONS_STEEP - 1] = mem[2 * ALLPASSSECTIONS_STEEP - 1] + AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * + temp[ALLPASSSECTIONS_STEEP - 2]; + + mem[2 * ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * + temp[ALLPASSSECTIONS_STEEP - 1]; + out[0] = (float) ( ( out[0] + temp[ALLPASSSECTIONS_STEEP - 1] ) * 0.5 ); + + for ( k = 1; k < N / 2; k++ ) + { + temp[0] = mem[ALLPASSSECTIONS_STEEP] + AP2_STEEP[0] * in[2 * k - 1]; + mem[ALLPASSSECTIONS_STEEP] = in[2 * k - 1] - AP2_STEEP[0] * temp[0]; + + /* for better performance, unroll this loop */ + for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) + { + temp[n] = mem[ALLPASSSECTIONS_STEEP + n] + AP2_STEEP[n] * temp[n - 1]; + if ( fabs( temp[n] ) < 1e-12 ) + { + temp[n] = sign( temp[n] ) * 1e-12f; + } + mem[ALLPASSSECTIONS_STEEP + n] = temp[n - 1] - AP2_STEEP[n] * temp[n]; + } + + temp[ALLPASSSECTIONS_STEEP - 1] = mem[2 * ALLPASSSECTIONS_STEEP - 1] + AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * + temp[ALLPASSSECTIONS_STEEP - 2]; + mem[2 * ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * + temp[ALLPASSSECTIONS_STEEP - 1]; + out[k] = (float) ( ( out[k] + temp[ALLPASSSECTIONS_STEEP - 1] ) * 0.5 ); + } + + /* z^(-1) */ + mem[2 * ALLPASSSECTIONS_STEEP] = in[N - 1]; + + return; +} + +/*-------------------------------------------------------------------* + * interpolate_3_over_2_allpass() + * + * Interpolate 3/2 using allpass iir polyphase filter. Delay 4 samples @48k + *-------------------------------------------------------------------*/ + +void interpolate_3_over_2_allpass( + const float *input, /* i : input signal */ + const int16_t len, /* i : number of input samples */ + float *out, /* o : output signal */ + float *mem /* i/o: memory */ +) +{ + int16_t i, loop_len; + float Vu[2], Vm[2], Vl[2]; /* Outputs of three cascaded allpass stages (upper, middle, and lower) */ + float out1_buff[L_FRAME32k * 3]; + float *out1; + float mem_temp; + const float *filt_coeff = allpass_poles_3_ov_2; + + out1 = out1_buff; + + for ( i = 0; i < len; i++ ) + { + /* Upper branch */ + Vu[0] = mem[0] + filt_coeff[0] * ( input[i] - mem[1] ); + Vu[1] = mem[1] + filt_coeff[1] * ( Vu[0] - mem[2] ); + mem[3] = mem[2] + filt_coeff[2] * ( Vu[1] - mem[3] ); + + mem[1] = Vu[0]; + mem[2] = Vu[1]; + *out1++ = mem[3]; + + /* Middle branch */ + Vm[0] = mem[0] + filt_coeff[3] * ( input[i] - mem[4] ); + Vm[1] = mem[4] + filt_coeff[4] * ( Vm[0] - mem[5] ); + mem[6] = mem[5] + filt_coeff[5] * ( Vm[1] - mem[6] ); + + mem[4] = Vm[0]; + mem[5] = Vm[1]; + *out1++ = mem[6]; + + /* Lower branch */ + Vl[0] = mem[0] + filt_coeff[6] * ( input[i] - mem[7] ); + Vl[1] = mem[7] + filt_coeff[7] * ( Vl[0] - mem[8] ); + mem[9] = mem[8] + filt_coeff[8] * ( Vl[1] - mem[9] ); + + mem[0] = input[i]; + mem[7] = Vl[0]; + mem[8] = Vl[1]; + *out1++ = mem[9]; + } + + loop_len = len * 3 / 2; + + /*decimate by 2 and LPF*/ + for ( i = 0; i < loop_len; i++ ) + { + mem_temp = out1_buff[2 * i]; + out[i] = ( ( ( 0.0473147f ) * ( mem_temp + mem[10] ) ) + ( ( -0.151521f ) * ( mem[11] + mem[14] ) ) ); + out[i] = ( out[i] + ( ( 0.614152f ) * ( mem[12] + mem[13] ) ) ); + mem[10] = mem[11]; + mem[11] = mem[12]; + mem[12] = mem[13]; + mem[13] = mem[14]; + mem[14] = mem_temp; + } + + return; +} + +/*-------------------------------------------------------------------* + * decimate_2_over_3_allpass() + * + * Decimate 2/3 using allpass iir polyphase filter. + *-------------------------------------------------------------------*/ + +void decimate_2_over_3_allpass( + const float *input, /* i : input signal */ + const int16_t len, /* i : number of input samples */ + float *out, /* o : output signal */ + float *mem, /* i/o: memory */ + float *lp_mem /* i/o: memory */ +) +{ + int16_t i, loop_len; + float Vu[2], Vm[2], Vl[2]; /* Outputs of three cascaded allpass stages (upper, middle, and lower) */ + float *out1; + float *in; + float out1_buff[L_FRAME48k * 2]; + float tmp; + const float *filt_coeff = allpass_poles_3_ov_2; + const float *lp_num = decimate_3_ov_2_lowpass_num; + const float *lp_den = decimate_3_ov_2_lowpass_den; + + /* Combine the 2nd order iir lpf with the decimation by 2 to improve the efficiency*/ + out1 = out1_buff; + + *out1++ = lp_num[0] * ( input[0] + lp_mem[0] ) - lp_den[2] * lp_mem[2]; + *out1++ = lp_num[1] * input[0] - lp_den[2] * lp_mem[1]; + + for ( i = 1; i < len; i++ ) + { + tmp = lp_num[0] * ( input[i] + input[i - 1] ) - lp_den[2] * out1[-2]; + *out1++ = tmp; + tmp = lp_num[1] * input[i] - lp_den[2] * out1[-2]; + *out1++ = tmp; + } + lp_mem[0] = input[len - 1]; + lp_mem[1] = out1[-1]; + lp_mem[2] = out1[-2]; + + /* do the all pass polyphase filter with pi/3 cutoff */ + out1 = out; + in = out1_buff; + loop_len = (int16_t) len * 2 / 3; + + for ( i = 0; i < loop_len; i++ ) + { + /* Lower branch */ + Vl[0] = mem[8] + filt_coeff[6] * ( *in - mem[9] ); + Vl[1] = mem[9] + filt_coeff[7] * ( Vl[0] - mem[10] ); + mem[11] = mem[10] + filt_coeff[8] * ( Vl[1] - mem[11] ); + + mem[8] = *in++; + mem[9] = Vl[0]; + mem[10] = Vl[1]; + *out1 = mem[11]; + + /* Middle branch */ + Vm[0] = mem[4] + filt_coeff[3] * ( *in - mem[5] ); + Vm[1] = mem[5] + filt_coeff[4] * ( Vm[0] - mem[6] ); + mem[7] = mem[6] + filt_coeff[5] * ( Vm[1] - mem[7] ); + + mem[4] = *in++; + mem[5] = Vm[0]; + mem[6] = Vm[1]; + *out1 += mem[7]; + + /* Upper branch */ + Vu[0] = mem[0] + filt_coeff[0] * ( *in - mem[1] ); + Vu[1] = mem[1] + filt_coeff[1] * ( Vu[0] - mem[2] ); + mem[3] = mem[2] + filt_coeff[2] * ( Vu[1] - mem[3] ); + + mem[0] = *in++; + mem[1] = Vu[0]; + mem[2] = Vu[1]; + *out1++ += mem[3]; + } + + return; +} + +/*-------------------------------------------------------------------* + * interpolate_3_over_1_allpass() + * + * Interpolate 3/1 using allpass iir polyphase filter. Delay 4 samples @48k + *-------------------------------------------------------------------*/ + +void interpolate_3_over_1_allpass( + const float *input, /* i : input signal */ + const int16_t len, /* i : number of input samples */ + float *out, /* o : output signal */ + float *mem /* i/o: memory */ +) +{ + int16_t i; + float Vu[2], Vm[2], Vl[2]; /* Outputs of three cascaded allpass stages (upper, middle, and lower) */ + float *out1; + float mem_temp; + const float *filt_coeff = allpass_poles_3_ov_2; + + out1 = &out[0]; + + for ( i = 0; i < len; i++ ) + { + /* Upper branch */ + Vu[0] = mem[0] + filt_coeff[0] * ( input[i] - mem[1] ); + Vu[1] = mem[1] + filt_coeff[1] * ( Vu[0] - mem[2] ); + mem[3] = mem[2] + filt_coeff[2] * ( Vu[1] - mem[3] ); + + mem[1] = Vu[0]; + mem[2] = Vu[1]; + *out1++ = mem[3]; + + /* Middle branch */ + Vm[0] = mem[0] + filt_coeff[3] * ( input[i] - mem[4] ); + Vm[1] = mem[4] + filt_coeff[4] * ( Vm[0] - mem[5] ); + mem[6] = mem[5] + filt_coeff[5] * ( Vm[1] - mem[6] ); + + mem[4] = Vm[0]; + mem[5] = Vm[1]; + *out1++ = mem[6]; + + /* Lower branch */ + Vl[0] = mem[0] + filt_coeff[6] * ( input[i] - mem[7] ); + Vl[1] = mem[7] + filt_coeff[7] * ( Vl[0] - mem[8] ); + mem[9] = mem[8] + filt_coeff[8] * ( Vl[1] - mem[9] ); + + mem[0] = input[i]; + mem[7] = Vl[0]; + mem[8] = Vl[1]; + *out1++ = mem[9]; + } + + /*LPF*/ + for ( i = 0; i < len * 3; i++ ) + { + mem_temp = out[i]; + out[i] = ( ( ( 0.572769f ) * ( mem[12] + mem[11] ) ) - ( ( 0.074005f ) * ( mem_temp + mem[10] ) ) ); + mem[10] = mem[11]; + mem[11] = mem[12]; + mem[12] = mem_temp; + } + + return; +} + + +/*-------------------------------------------------------------------* + * retro_interp4_5() + * + * + *-------------------------------------------------------------------*/ + +void retro_interp4_5( + const float *syn, + float *pst_old_syn ) +{ + float *pf5, *pf4; + int16_t c; + + /* resample st->pst_old_syn in a reverse way to preserve time-alignment */ + pf4 = (float *) &pst_old_syn[58]; + pf5 = (float *) pst_old_syn; + for ( c = 0; c < 57; c++ ) + { + *pf5++ = pf4[0]; + *pf5++ = 0.2f * pf4[0] + 0.8f * pf4[1]; + *pf5++ = 0.4f * pf4[1] + 0.6f * pf4[2]; + *pf5++ = 0.6f * pf4[2] + 0.4f * pf4[3]; + *pf5++ = 0.8f * pf4[3] + 0.2f * pf4[4]; + pf4 += 4; + } + *pf5++ = pf4[0]; + *pf5++ = 0.2f * pf4[0] + 0.8f * pf4[1]; + *pf5++ = 0.4f * pf4[1] + 0.6f * pf4[2]; + *pf5++ = 0.6f * pf4[2] + 0.4f * pf4[3]; + *pf5++ = 0.8f * pf4[3] + 0.2f * syn[0]; + /* all samples processed: NBPSF_PIT_MAX = 290 = (58*5) */ + + return; +} + + +/*-------------------------------------------------------------------* + * retro_interp5_4() + * + * + *-------------------------------------------------------------------*/ + +void retro_interp5_4( + float *pst_old_syn ) +{ + float *pf5, *pf4; + int16_t c; + + /* resample st->pst_old_syn in a reverse way to preserve time-alignment */ + pf4 = (float *) &pst_old_syn[NBPSF_PIT_MAX - 1]; + pf5 = pf4; + for ( c = 0; c < 58; c++ ) + { + *pf4-- = 0.75f * pf5[0] + 0.25f * pf5[-1]; + *pf4-- = 0.50f * pf5[-1] + 0.50f * pf5[-2]; + *pf4-- = 0.25f * pf5[-2] + 0.75f * pf5[-3]; + *pf4-- = pf5[-4]; + pf5 -= 5; + } + /* all samples processed: NBPSF_PIT_MAX = 290 = (58*5) */ + + return; +} diff --git a/lib_com/move.h b/lib_com/move.h new file mode 100644 index 0000000000..f0e8238dec --- /dev/null +++ b/lib_com/move.h @@ -0,0 +1,74 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef _MOVE_H +#define _MOVE_H + +/* BASOP -> FLC brigde: data move counting */ + +#include "stl.h" + +static __inline void move16( void ) +{ +} + +static __inline void move32( void ) +{ +} + +static __inline void test( void ) +{ +} + +static __inline void logic16( void ) +{ +} + +static __inline void logic32( void ) +{ +} + + +/*-------- legacy ----------*/ +#define data_move() move16() +#define L_data_move() move32() +#define data_move_external() move16() +#define compare_zero() test() +/*-------- end legacy ----------*/ + +#define cast16 move16 + +#endif /* _MOVE_H */ diff --git a/lib_com/mslvq_com.c b/lib_com/mslvq_com.c new file mode 100644 index 0000000000..4d0593ce56 --- /dev/null +++ b/lib_com/mslvq_com.c @@ -0,0 +1,847 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_prot.h" + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void decode_comb( Word32 index, float *cv, int16_t idx_lead ); + +static void decode_sign_pc1( float *c, int16_t idx_sign, const int16_t parity ); + +static void put_value( float *cv, int16_t *p, float val, const int16_t dim, const int16_t no_new_val ); + +static void decode_leaders( Word32 index, int16_t idx_lead, float *cv ); + +static void idx2c( int16_t n, int16_t *p, const int16_t k, Word32 val ); + +static void divide_64_32( int16_t *x, UWord32 y, UWord32 *result, UWord32 *rem ); + + +/*-----------------------------------------------------------------* + * permute() + * used in CNG-LP coding + *-----------------------------------------------------------------*/ + +void permute( + float *pTmp1, /* i/o: vector whose components are to be permuted */ + const int16_t *perm /* i : permutation info (indexes that should be interchanged), max two perms */ +) +{ + int16_t p1, p2; + float tmp; + + p1 = perm[0]; + p2 = perm[1]; + tmp = pTmp1[p1]; + pTmp1[p1] = pTmp1[p2]; + pTmp1[p2] = tmp; + p1 = perm[2]; + + if ( p1 > -1 ) + { + p2 = perm[3]; + tmp = pTmp1[p1]; + pTmp1[p1] = pTmp1[p2]; + pTmp1[p2] = tmp; + } + + return; +} + +/*-----------------------------------------------------------------* + * make_offset_scale() + * + *-----------------------------------------------------------------*/ + +static void make_offset_scale( + const UWord32 tab_no_cv[], + const Word8 *no_ld, + const int16_t no_scl, + UWord32 *offset_scale ) +{ + int16_t i; + + offset_scale[0] = 1; + for ( i = 1; i <= no_scl; i++ ) + { + offset_scale[i] = offset_scale[i - 1] + tab_no_cv[(int16_t) no_ld[i - 1]]; + } + + return; +} + +/*-----------------------------------------------------------------* + * decode_indexes() + * + *-----------------------------------------------------------------*/ + +static int16_t decode_indexes( + int16_t *index, + const int16_t no_bits, + const float *p_scales, + const int16_t prediction_flag, + float *x_lvq, + const int16_t mode_glb ) +{ + UWord32 index1 = 0, index2, idx_scale; + uint16_t i; + float scale; + + int16_t len_scales = MAX_NO_SCALES * 2; + UWord32 offset_scale1[MAX_NO_SCALES + 1], offset_scale2[MAX_NO_SCALES + 1]; + + if ( no_bits <= 2 * LEN_INDICE ) /* the third short is not used */ + { + index[2] = 0; + if ( no_bits <= LEN_INDICE ) + { + index[1] = 0; + } + } + + /* safety check in case of bit errors */ + for ( i = 0; i < 3; i++ ) + { + if ( index[i] < 0 ) + { + set_f( x_lvq, 0.0f, 2 * LATTICE_DIM ); + index[i] = 0; + return 1; + } + } + + create_offset( offset_scale1, offset_scale2, mode_glb, prediction_flag ); + /* first subvector */ + if ( offset_scale2[MAX_NO_SCALES - 1] > 0 ) + { + divide_64_32( index, offset_scale2[MAX_NO_SCALES], &index1, &index2 ); + } + else + { + index1 = (UWord32) ( index[0] ); /* this is for very low bitrates, so there is no loss in truncation */ + index2 = 0; + } + + if ( index1 == 0 ) + { + for ( i = 0; i < LATTICE_DIM; i++ ) + { + x_lvq[i] = 0.0; + } + } + else + { + if ( index1 >= offset_scale1[MAX_NO_SCALES] ) + { + /* safety check in case of bit errors */ + set_f( x_lvq, 0.0f, 2 * LATTICE_DIM ); + return 1; + } + + /* find idx_scale */ + i = 1; + while ( (int16_t) i <= MAX_NO_SCALES && index1 >= offset_scale1[i] ) + { + i++; + } + + idx_scale = i - 1; + index1 -= offset_scale1[idx_scale]; + + /* find idx_leader */ + i = 1; + while ( index1 >= table_no_cv[i] ) + { + i++; + } + decode_comb( (Word32) ( index1 - table_no_cv[i - 1] ), x_lvq, i - 1 ); + scale = p_scales[mode_glb * len_scales + idx_scale]; + for ( i = 0; i < LATTICE_DIM; i++ ) + { + x_lvq[i] *= scale; + } + } + + /* second subvector */ + if ( index2 == 0 ) + { + for ( i = LATTICE_DIM; i < 2 * LATTICE_DIM; i++ ) + { + x_lvq[i] = 0.0; + } + } + else + { + + /* find the index for the scale/truncation */ + i = 1; + while ( index2 >= offset_scale2[i] ) + { + i++; + } + + idx_scale = i - 1; + index2 -= offset_scale2[idx_scale]; + /* find the index of the leader vector */ + i = 1; + while ( index2 >= table_no_cv[i] ) + { + i++; + } + decode_comb( (Word32) ( index2 - table_no_cv[i - 1] ), &x_lvq[LATTICE_DIM], i - 1 ); + + scale = p_scales[mode_glb * len_scales + MAX_NO_SCALES + idx_scale]; + for ( i = LATTICE_DIM; i < 2 * LATTICE_DIM; i++ ) + { + x_lvq[i] *= scale; + } + } + + return 0; +} + +/*-----------------------------------------------------------------* + * deindex_lvq() + * + *-----------------------------------------------------------------*/ + +int16_t deindex_lvq( + int16_t *index, /* i : index to be decoded, as an array of 3 shorts */ + float *x_lvq, /* o : decoded codevector */ + const int16_t mode, /* i : LVQ coding mode (select scales & no_lead ), or idx_cv */ + const int16_t sf_flag, /* i : safety net flag */ + const int16_t no_bits /* i : number of bits for lattice */ +) +{ + int16_t i; + const float *p_scales; + int16_t mode_glb; + int16_t ber_flag; + + if ( sf_flag == 1 ) + { + if ( mode < 6 ) /* for NB */ + { + mode_glb = offset_lvq_modes_SN[mode] + offset_in_lvq_mode_SN[mode][no_bits - min_lat_bits_SN[mode]]; + } + else + { + mode_glb = offset_lvq_modes_SN[mode] + no_bits - min_lat_bits_SN[mode]; /* there is granularity of 1 bit */ + } + p_scales = &scales[0][0]; + } + else + { + if ( ( mode < 6 ) || ( mode == 12 ) ) /* for NB */ + { + mode_glb = offset_lvq_modes_pred[mode] + offset_in_lvq_mode_pred[mode][no_bits - min_lat_bits_pred[mode]]; + } + else + { + mode_glb = offset_lvq_modes_pred[mode] + no_bits - min_lat_bits_pred[mode]; + } + p_scales = &scales_p[0][0]; + } + + /* decode the lattice index into the lattice codevectors for the two subvectors */ + ber_flag = decode_indexes( index, no_bits, p_scales, 1 - sf_flag, x_lvq, mode_glb ); + + if ( sf_flag == 1 ) + { + for ( i = 0; i < 2 * LATTICE_DIM; i++ ) + { + x_lvq[i] *= sigma_MSLVQ[mode][i]; + } + } + else + { + for ( i = 0; i < 2 * LATTICE_DIM; i++ ) + { + x_lvq[i] *= sigma_p[mode][i]; + } + } + + return ber_flag; +} + +/*------------------------------------------------------------------------------------------------------------* + * deindex_lvq_cng() + * + * Note: + * The sampling frequency for the LVQ CNG decoder frame can be determined by checking the fully decoded + * value of the highest order LSF coefficient. Thus sampling rate information, nor extra codebooks are + * not needed for deindex_lvq_cng(), since it is embedded inside the LSF codebooks. + *------------------------------------------------------------------------------------------------------------*/ + +int16_t deindex_lvq_cng( + int16_t *index, /* i : index to be decoded, as an array of 3 shorts */ + float *x_lvq, /* o : decoded codevector */ + const int16_t idx_cv, /* i : relative mode_lvq, wrt START_CNG */ + const int16_t no_bits /* i : number of bits for lattice */ +) +{ + int16_t i; + const float *p_scales; + int16_t mode_glb, mode; + int16_t ber_flag; + + mode_glb = START_CNG + idx_cv; + mode = LVQ_COD_MODES + idx_cv; + + p_scales = &scales[0][0]; + ber_flag = decode_indexes( index, no_bits, p_scales, 0, x_lvq, mode_glb ); + + for ( i = 0; i < 2 * LATTICE_DIM; i++ ) + { + x_lvq[i] *= sigma_MSLVQ[mode][i]; + } + + /* check if permutting needed */ + if ( cng_sort[idx_cv] ) + { + permute( x_lvq, perm_MSLVQ[idx_cv] ); + } + + return ber_flag; +} + + +/*-----------------------------------------------------------------* + * decode_comb() + * + * combinatorial deindexing of a codevector including the signs + * + *-----------------------------------------------------------------*/ + +static void decode_comb( + Word32 index, /* i : index to be decoded */ + float *cv, /* o : decoded codevector */ + int16_t idx_lead /* i : leader class index */ +) +{ + int16_t idx_sign; + + idx_sign = (int16_t) ( index / pi0[idx_lead] ); + index -= idx_sign * pi0[idx_lead]; + decode_leaders( index, idx_lead, cv ); + decode_sign_pc1( cv, idx_sign, pl_par[idx_lead] ); + + return; +} + +/*-----------------------------------------------------------------* + * decode_leaders() + * + * decode index of a codevector from the leader class idx_lead + *-----------------------------------------------------------------*/ + +static void decode_leaders( + Word32 index, /* i : index to be decoded */ + int16_t idx_lead, /* i : leader class index */ + float *cv /* o : decoded codevector */ +) +{ + int16_t i, no_vals_loc, no_vals_last, p[LATTICE_DIM], dim_loc, n_crt; + Word32 index1; + float val_crt; + + no_vals_loc = no_vals[idx_lead]; + val_crt = vals[idx_lead][no_vals_loc - 1]; + no_vals_last = no_vals_ind[idx_lead][no_vals_loc - 1]; + + for ( i = 0; i < no_vals_last; i++ ) + { + cv[i] = val_crt; + } + + val_crt = 1; + dim_loc = no_vals_last; + + switch ( no_vals_loc ) + { + case 1: + break; + case 2: + idx2c( LATTICE_DIM, p, no_vals_ind[idx_lead][0], index ); + put_value( cv, p, vals[idx_lead][0], no_vals_last, no_vals_ind[idx_lead][0] ); + break; + case 4: + dim_loc += no_vals_ind[idx_lead][2]; + n_crt = no_vals_ind[idx_lead][2]; + index1 = (Word32) index / C_VQ[dim_loc][n_crt]; + index -= index1 * C_VQ[dim_loc][n_crt]; + idx2c( dim_loc, p, n_crt, index ); + put_value( cv, p, vals[idx_lead][2], no_vals_last, no_vals_ind[idx_lead][2] ); + index = index1; + /* FALLTHRU */ + case 3: + dim_loc += no_vals_ind[idx_lead][1]; + n_crt = no_vals_ind[idx_lead][1]; + index1 = (Word32) index / C_VQ[dim_loc][n_crt]; + index -= index1 * C_VQ[dim_loc][n_crt]; + idx2c( dim_loc, p, n_crt, index ); + put_value( cv, p, vals[idx_lead][1], dim_loc - n_crt, n_crt ); + idx2c( LATTICE_DIM, p, no_vals_ind[idx_lead][0], index1 ); + put_value( cv, p, vals[idx_lead][0], dim_loc, no_vals_ind[idx_lead][0] ); + break; + } + + return; +} + +/*-----------------------------------------------------------------* + * put_value() + * + * inserts no_new_val values of val in the codevector cv at the positions given by the array p + *-----------------------------------------------------------------*/ + +static void put_value( + float *cv, /* i : input codevector */ + int16_t *p, /* i : array with positions */ + float val, /* i : value to be inserted */ + const int16_t dim, /* i : vector dimension */ + const int16_t no_new_val /* i : number of values to be inserted */ +) +{ + float cv_out[LATTICE_DIM]; + int16_t i, occ[LATTICE_DIM], cnt; + + for ( i = 0; i < dim + no_new_val; i++ ) + { + occ[i] = 0; + } + + for ( i = 0; i < no_new_val; i++ ) + { + cv_out[p[i]] = val; + occ[p[i]] = 1; + } + + cnt = 0; + for ( i = 0; i < dim + no_new_val; i++ ) + { + if ( occ[i] == 0 ) + { + cv_out[i] = cv[cnt++]; + } + } + + for ( i = 0; i < dim + no_new_val; i++ ) + { + cv[i] = cv_out[i]; + } + + return; +} + +/*-----------------------------------------------------------------* + * idx2c() + * + * decode index of binomial combinations, find the positions of k components out of n total components + *-----------------------------------------------------------------*/ + +static void idx2c( + int16_t n, /* i : total number of positions (components) */ + int16_t *p, /* o : array with positions of the k components */ + const int16_t k, /* i : number of components whose position is to be determined */ + Word32 val /* i : index to be decoded */ +) +{ + int16_t i, skip, pos, k1; + + skip = 0; + pos = 0; + k1 = k - 1; + while ( skip + C_VQ[n - pos - 1][k1] - 1 < val ) + { + skip += C_VQ[n - pos - 1][k1]; + pos++; + } + + p[0] = pos; + n -= pos + 1; + val -= skip; + if ( k == 1 ) + { + return; + } + + idx2c( n, p + 1, k1, val ); + + /* pos+1 */ + for ( i = 1; i < k; i++ ) + { + p[i] += pos + 1; + } + + return; +} + +/*-----------------------------------------------------------------* + * decode_sign_pc1() + * + *-----------------------------------------------------------------*/ + +static void decode_sign_pc1( + float *c, /* o : decoded codevector */ + int16_t idx_sign, /* i : sign index */ + const int16_t parity /* i : parity flag (+1/-1/0) */ +) +{ + int16_t i, len = LATTICE_DIM, cnt_neg = 1; + + if ( parity ) + { + len -= 1; + } + + for ( i = 0; i < len; i++ ) + { + if ( c[i] > 0 ) + { + if ( idx_sign % 2 ) + { + c[i] = -c[i]; + cnt_neg = -cnt_neg; + } + idx_sign >>= 1; + } + } + + if ( len < LATTICE_DIM ) + { + if ( cnt_neg != parity ) + { + c[len] = -c[len]; + } + } + + return; +} + +/*-----------------------------------------------------------------* + * extract_low() + * + * (!!!!! function for int64 !!!!) + *-----------------------------------------------------------------*/ + +static UWord32 extract_low( + UWord32 x ) +{ + return ( x & ( 0xffff ) ); +} + +/*-----------------------------------------------------------------* + * extract_high() + * + * (!!!!! function for int64 !!!!) + *-----------------------------------------------------------------*/ + +static UWord32 extract_high( + UWord32 x ) +{ + return ( x >> 16 ); +} + +/*-----------------------------------------------------------------* + * multiply32_32_64() + * + * (!!!!! function for int64 !!!!) + *-----------------------------------------------------------------*/ + +void multiply32_32_64( + UWord32 x, + UWord32 y, + UWord32 *res ) +{ + UWord32 tmp, x_tmp[2], y_tmp[2]; + UWord32 high = 0; + + x_tmp[0] = extract_low( x ); /* lowest 16 bits */ + x_tmp[1] = extract_high( x ); + y_tmp[0] = extract_low( y ); + y_tmp[1] = extract_high( y ); + tmp = x_tmp[0] * y_tmp[0]; + high = extract_high( tmp ); + res[0] = extract_low( tmp ); + tmp = x_tmp[1] * y_tmp[0] + x_tmp[0] * y_tmp[1] + high; /* x and y are not using all 32 bits */ + high = extract_high( tmp ); + res[0] += ( extract_low( tmp ) << 16 ); + tmp = x_tmp[1] * y_tmp[1] + high; + res[1] = tmp; + + return; +} + +/*-----------------------------------------------------------------* + * get_no_bits() + * + * (!!!!! function for int64 !!!!) + *-----------------------------------------------------------------*/ + +static int16_t get_no_bits( + UWord32 x ) +{ + int16_t nb = 0; + + if ( x == 0 ) + { + return 1; + } + + while ( x > 0 ) + { + x >>= 1; + nb++; + } + + return nb; +} + +/*-----------------------------------------------------------------* + * divide_64_32() + * + * (!!!!! function for int64 !!!!) + *-----------------------------------------------------------------*/ + +static void divide_64_32( + int16_t *xs, /* i : denominator as array of two int32 */ + UWord32 y, /* i : nominator on 32 bits */ + UWord32 *result, /* o : integer division result on 32 bits */ + UWord32 *rem /* o : integer division reminder on 32 bits */ +) +{ + int16_t nb_x1; + UWord32 r, q, q1, x_tmp, x[2]; + + x[0] = ( ( (UWord32) xs[2] & ( ( 1 << 2 ) - 1 ) ) << ( LEN_INDICE * 2 ) ) + ( xs[1] << LEN_INDICE ) + xs[0]; + x[1] = xs[2] >> 2; + + /* find number of bits of x[0] and x[1] */ + nb_x1 = get_no_bits( x[1] ); + + /* take the first 32 bits */ + if ( nb_x1 > 0 ) + { + x_tmp = ( x[1] << ( 32 - nb_x1 ) ) + ( x[0] >> nb_x1 ); + q = (UWord32) ( x_tmp / y + 0.5 ); + r = x_tmp - q * y; /* this is the first reminder */ + r = ( r << nb_x1 ) + ( x[0] & ( ( 1 << nb_x1 ) - 1 ) ); + + q1 = (UWord32) ( r / y + 0.5 ); + *result = ( q << nb_x1 ) + q1; + *rem = r - q1 * y; + } + else + { + x_tmp = x[0]; + q = ( (UWord32) ( x_tmp / y + 0.5 ) ); + *result = q; + *rem = x_tmp - q * y; + } + + return; +} + + +/*-----------------------------------------------------------------* + * create_offset() + * + * + *-----------------------------------------------------------------*/ + +void create_offset( + UWord32 *offset_scale1, + UWord32 *offset_scale2, + const int16_t mode, + const int16_t prediction_flag ) +{ + int16_t tmp, tmp1; + + if ( prediction_flag == 0 ) + { + /* safety_net */ + tmp = no_lead_idx[mode][0]; + if ( ( tmp <= LIMIT_LEADER ) && ( tmp < no_lead_idx[mode][1] - 2 ) ) + { + tmp += DELTA_LEADER; + } + make_offset_scale( table_no_cv, leaders_short[tmp], MAX_NO_SCALES, offset_scale1 ); + make_offset_scale( table_no_cv, leaders_short[no_lead_idx[mode][1]], MAX_NO_SCALES, offset_scale2 ); + } + else + { + tmp = no_lead_p_idx[mode][0]; + tmp1 = no_lead_p_idx[mode][1]; + if ( ( tmp <= LIMIT_LEADER ) && ( tmp < tmp1 - 2 ) ) + { + tmp += DELTA_LEADER; + } + + if ( ( tmp == LIMIT_LEADER ) && ( tmp1 == 0 ) ) + { + tmp += DELTA_LEADER; + tmp1 = DELTA_LEADER; + } + + make_offset_scale( table_no_cv, leaders_short[tmp], MAX_NO_SCALES, offset_scale1 ); + make_offset_scale( table_no_cv, leaders_short[tmp1], MAX_NO_SCALES, offset_scale2 ); + } + + return; +} + +/*-----------------------------------------------------------------* + * sort_desc_ind() + * + * sorts in descending order and computes indices in the sorted vector + *-----------------------------------------------------------------*/ +void sort_desc_ind( + float *s, /* i/o: vector to be sorted */ + const int16_t len, /* i : vector length */ + int16_t *ind /* o : array of indices */ +) +{ + int16_t i, k, sorted, a; + float t; + + for ( i = 0; i < len; i++ ) + { + ind[i] = i; + } + sorted = 0; + for ( k = len - 1; k && !sorted; k-- ) + { + sorted = 1; + for ( i = 0; i < k; i++ ) + { + if ( s[i] < s[i + 1] ) + { + sorted = 0; + t = s[i]; + s[i] = s[i + 1]; + s[i + 1] = t; + a = ind[i]; + ind[i] = ind[i + 1]; + ind[i + 1] = a; + } + } + } + + return; +} + +/*-----------------------------------------------------------------* + * deindex_lvq_SHB() + * + * + *-----------------------------------------------------------------*/ + +void deindex_lvq_SHB( + UWord32 index, + float *out, + const int16_t nbits, + const int16_t mode ) +{ + uint16_t i; + const Word8 *p_no_lead; + const float *p_scales; + float scale; + int16_t idx_scale; + UWord32 offsets[MAX_NO_SCALES + 1]; + + if ( mode == 0 ) + { + p_no_lead = &no_lead_BWE[( nbits - mslvq_SHB_min_bits[0] ) * 3]; + p_scales = &scales_BWE[( nbits - mslvq_SHB_min_bits[0] ) * 3]; + } + else + { + p_no_lead = &no_lead_BWE_3b[( nbits - mslvq_SHB_min_bits[1] ) * 3]; + p_scales = &scales_BWE_3b[( nbits - mslvq_SHB_min_bits[1] ) * 3]; + } + + + if ( index == 0 ) + { + set_zero( out, LATTICE_DIM ); + } + else + { + /* create offsets */ + offsets[0] = 0; + for ( i = 0; i < MAX_NO_SCALES; i++ ) + { + offsets[i + 1] = table_no_cv[p_no_lead[i]] + offsets[i]; + } + + /* find idx_scale */ + idx_scale = 0; + while ( (int16_t) i <= MAX_NO_SCALES && index >= offsets[idx_scale] ) + { + idx_scale++; + } + idx_scale--; + index -= offsets[idx_scale]; + + /* find idx_leader */ + i = 1; + while ( index >= table_no_cv[i] ) + { + i++; + } + i = i - 1; + + decode_comb( (Word32) ( index - table_no_cv[i] - 1 ), out, i ); + + scale = p_scales[idx_scale]; + for ( i = 0; i < LATTICE_DIM; i++ ) + { + out[i] *= scale * sigma_BWE[mode * LATTICE_DIM + i]; + } + } + + return; +} diff --git a/lib_com/nelp.c b/lib_com/nelp.c new file mode 100644 index 0000000000..63489ea27e --- /dev/null +++ b/lib_com/nelp.c @@ -0,0 +1,156 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * dequantize_uvg() + * + * Dequantize unvoiced gains + *--------------------------------------------------------------------*/ + +void dequantize_uvg( + int16_t iG1, /* i : gain 1 index */ + int16_t *iG2, /* i : gain 2 index */ + float *G, /* o : quantized gain */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t i, k; + const float( *UVG1CB )[2] = NULL; + const float( *UVG2CB1 )[5] = NULL; + const float( *UVG2CB2 )[5] = NULL; + + if ( bwidth == NB ) + { + UVG1CB = UVG1CB_NB; + UVG2CB1 = UVG2CB1_NB; + UVG2CB2 = UVG2CB2_NB; + } + + else if ( bwidth == WB || bwidth == SWB ) + { + UVG1CB = UVG1CB_WB; + UVG2CB1 = UVG2CB1_WB; + UVG2CB2 = UVG2CB2_WB; + } + + for ( i = 0; i < 2; i++ ) + { + for ( k = 0; k < 5; k++ ) + { + if ( i == 0 ) + { + G[i * 5 + k] = (float) pow( 10.0, UVG1CB[iG1][i] ) * UVG2CB1[iG2[i]][k]; + } + else if ( i == 1 ) + { + G[i * 5 + k] = (float) pow( 10.0, UVG1CB[iG1][i] ) * UVG2CB2[iG2[i]][k]; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * generate_nelp_excitation() + * + * Generate excitation for NELP coding. + *--------------------------------------------------------------------*/ + +void generate_nelp_excitation( + int16_t *seed, /* i/o: random number seed */ + float *Gains, /* i : excitation gains */ + float *output, /* o : excitation output */ + float gain_fac /* i : gain factor */ +) +{ + int16_t i, len, j; + float tmp[31], tmp1[31], tmpf; + int16_t k1, k2, I[31], tmpi; + + for ( i = 0; i < 10; i++ ) + { + if ( i == 9 ) + { + len = 31; + } + else + { + len = 25; + } + + for ( j = 0; j < len; j++ ) + { + tmp[j] = ( ( *seed ) = 521 * ( *seed ) + 259 ) / PCM16_TO_FLT_FAC; + tmp1[j] = ABSVAL( tmp[j] ); + I[j] = j; + } + for ( k1 = 0; k1 < len - 1; k1++ ) + { + for ( k2 = k1 + 1; k2 < len; k2++ ) + { + if ( tmp1[k2] > tmp1[k1] ) + { + tmpi = I[k2]; + tmpf = tmp1[k2]; + tmp1[k2] = tmp1[k1]; + I[k2] = I[k1]; + tmp1[k1] = tmpf; + I[k1] = tmpi; + } + } + } + + /*using a factor of 1.37 to compensate for the ~ 2.5 ( or 2.73) dB diff between this scheme and EVS-UV */ + for ( j = 0; j < (int16_t) rint_new( len / 4.0f ); j++ ) + { + output[i * 25 + I[j]] = (float) ( Gains[i] * sqrt( 3.0f ) * tmp[I[j]] * gain_fac ); + } + for ( ; j < len; j++ ) + { + output[i * 25 + I[j]] = 0; + } + } + + return; +} diff --git a/lib_com/options.h b/lib_com/options.h new file mode 100644 index 0000000000..5ee8fff0cd --- /dev/null +++ b/lib_com/options.h @@ -0,0 +1,152 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef OPTIONS_H +#define OPTIONS_H + +/* clang-format off */ +/* ################### Start compiler switches ######################## */ + +#define SUPPORT_JBM_TRACEFILE /* support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */ +#define RAM_COUNTING_TOOL /* tool to automatically count the dynamically alocated static memory consumption */ + +/* #################### End compiler switches ######################### */ + + +/* ################### Start DEBUGGING switches ########################### */ + +#ifndef RELEASE +#define DEBUGGING /* Activate debugging part of the code */ +#endif +/*#define WMOPS*/ /* Activate complexity and memory counters (! the codec must be already instrumented with the WMC Tool (use /ic and /op options) !) */ +/*#define WMOPS_PER_FRAME*/ /* Output complexity in WMOPS per frame to the file "res/wmops" (one float value per frame) */ +/*#define WMOPS_DETAIL*/ /* Activate complexity detail printout for every function. Increases runtime overhead */ +/*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output WMOPS analysis for worst case frame */ + +#ifdef DEBUGGING + +/*#define MEM_COUNT_DETAILS*/ /* RAM counting tool: print per sub-structure details */ + +/*#define DEBUG_MODE_INFO*/ /* output most important parameters to the subdirectory "res/" */ +#ifdef DEBUG_MODE_INFO +/*#define DEBUG_MODE_ACELP*/ /* output most important ACELP core parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_TCX*/ /* output most important TCX core parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_DFT*/ /* output most important DFT stereo parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_TD*/ /* output most important TD stereo parameters to the subdirectory "res/ */ +/*#define DEBUG_MODE_DIRAC*/ /* output most important DIRAC parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_MDCT*/ /* output most important MDCT parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_PARAM_MC */ /* output Parametric MC paramters to the subdirectory "res/" */ +/*#define DEBUG_MODE_PARAM_ISM*/ /* output Parametric ISM paramters to the subdirectory "res/" */ +#define DEBUG_MODE_INFO_TWEAK /* enable command line switch to specify subdirectory for debug info output inside "./res/" */ +/*#define DEBUG_MODE_INFO_PLC */ /* define to output PLC related parameters */ +/*#define DEBUG_MODE_INFO_ALLRAD*/ /* define to output generated HOA decoding mtx */ +/*#define DEBUG_MODE_LFE */ /* define to output LFE relevant parameters */ +#endif + +#ifdef DEBUG_MODE_MDCT +#define DEBUG_PLOT_BITS +#endif + +#define ENABLE_BITRATE_VERIFICATION /* Enable bitrate verification - use when playing with bit budget */ +/*#define DEBUG_PLOT*/ +/*#define ALLOW_BYTE_EP*/ /* allow byte fer pattern files and check fer pattern file validity */ +#define WRAP_AS_EIDXOR /* wraps FER file (as in STL_eid-xor.c/softbit.c) */ + +#define DEBUG_FORCE_MDCT_STEREO_MODE /* Force stereo mode decision for MDCT stereo: -stere 3 1 forces L/R coding and -stereo 3 2 forces full M/S coding */ +/*#define DEBUG_STEREO_DFT_NOCORE*/ /* DFT stereo: by-pass core coder at decoder side*/ +/*#define DEBUG_STEREO_DFT_NOSTEREO*/ /* DFT stereo: by-pass stereo processing at encoder and decoder side*/ +/*#define DEBUG_STEREO_DFT_NOQRES*/ +/*#define DEBUG_STEREO_DFT_OUTRESPRED*/ /* output residual prediction signal instead of L/R*/ +/*#define DBG_STEREO_ICBWE2_TBE2K8*/ /* Enables TBE_2K8 for higher bitrates with ICBWE in operation for TD/DFT Stereo. Needs quality eval and currently only used for debugging purposes */ + +/*DirAC Debug switches*/ +/*#define DEBUG_DISABLE_DIRAC_DELAY_COMP */ /* temporarily disable delay compensation on DirAC encoder */ +/*#define DEBUG_BS_READ_WRITE*/ +/*#define DEBUG_MODE_DIRAC_NOCORE*/ +/*#define DEBUG_MODE_QMETADATA*/ /* output q_metadata parameters */ + +/*MCT Debug switches*/ +/*#define DEBUG_FORCE_MCT_CP*/ /* force MCT Stereo pairs for verification with SPAR */ +#ifdef DEBUG_FORCE_MCT_CP +/*#define DEBUG_SINGLE_CODE_OMNI*/ /* force 3 TC SBA always code W channel seperately */ +#endif + +/*PLC Debug switches*/ +/*#define DEBUG_NO_TONAL_PLC*/ +/*#define DEBUG_NO_TD_TCX_PLC */ +/*#define DEBUG_FORCE_TD_TCX_CONCEALMENT*/ +/*#define DEBUG_PLC_INFO*/ + +/*#define DEBUG_EFAP_POLY_TOFILE*/ /* Write poly_select values to file in EFAP, used for generating ROM LUTs */ +/*#define TDREND_HRTF_TABLE_METHODS*/ /* Enable HRTF lookup from tables, for testing & evaluation. Supply file in table format to use. Note that a suitable HR filter lookup method should be written if the filters sample point grids are not in the formats. */ +/*#define TDREND_STANDALONE*/ /* Used when renderer is built in standalone form, without IVAS encoding/decoding (see scripts/object_renderer_standalone). This is just here to ensure this is cleaned out by prepare_instrumentation.sh */ + +/*#define DEBUG_SPAR_FOA*/ /* debug SPAR in-out */ +#ifdef DEBUG_SPAR_FOA +/*#define DEBUG_SPAR_MD_TARGET_TUNING*/ /* SPAR MD target bitrate tuning debug code */ +/*#define DEBUG_SPAR_BYPASS_EVS_CODEC*/ /* bypass EVS coding in float precision, emulating EVS encoder/decoder delay */ +/*#define DEBUG_SPAR_WRITE_OUT_COV*/ /* write covariance per frame into a text file for verification */ +/*#define DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS*/ +/*#define DEBUG_AGC*/ /* debug SPAR AGC in-out */ +#endif +/*#define SPAR_HOA_DBG*/ /* SPAR HOA debug statements */ +/*#define DEBUG_BINAURAL_FILTER_DESIGN*/ /* debugging of Crend binaural filter design */ + +#endif +/* #################### End DEBUGGING switches ############################ */ + +/* ################# Start DEVELOPMENT switches ######################## */ + +#define BASOP_NOGLOB /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */ +#define BITSTREAM_INDICES_MEMORY /* Don't count memory for bitstream Indice at the encoder - it is a temporary solution for development only */ + +#define DEC_ICA_DELAY_INTERP /* ICA Decoder Target Delay Interpolation in TD stereo */ +#define LSF_RE_USE_SECONDARY_CHANNEL /* TD stereo Secondary channel LSF Q improvement */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +/*#define LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE */ /* switch to isolate the reuse mode case */ +#endif +#define DISABLE_ADAP_RES_COD_TMP /* temporary fix for IVAS-403, disables adaptive residual coding */ +/*#define ITD_WINNER_GAIN_MODIFY */ /* ITD optimization - WORK IN PROGRESS */ + + +/*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ +/*#define FIX_IVAS_185_MDCT_ST_PLC_FADEOUT*/ /* IVAS-185 fix bug in TCX-PLC fadeout for MDCT-Stereo and improve fadeout by fading to background noise instead of white noise */ +/*#define FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10*/ /* IVAS-180 write last overlap mode in TCX10 frames to allow for correct TCX10/TCX5 subframe decomposition in TCX10 frames after a lost frame */ +/*#define FIX_I1_113*/ /* under review : MCT bit distribution optimization for SBA high bitrates*/ + +/* ################## End DEVELOPMENT switches ######################### */ +/* clang-format on */ +#endif diff --git a/lib_com/parameter_bitmaping.c b/lib_com/parameter_bitmaping.c new file mode 100644 index 0000000000..95d5b77bbe --- /dev/null +++ b/lib_com/parameter_bitmaping.c @@ -0,0 +1,263 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_com.h" +#include "prot.h" +#include "wmops.h" + + +/********************************/ +/* Helper functions */ +/********************************/ + +/** Put nBits long encoded value from *pStream into bitstream. Using the function EncodeValue for encoding. */ +static int16_t PutIntoBitstream( const int16_t **pStream, TEncodeValue EncodeValue, int16_t index, BSTR_ENC_HANDLE hBstr, const int16_t nBits ) +{ + const int16_t value = *( *pStream )++; + const int16_t codedValue = EncodeValue( value, index ); + + push_next_indice( hBstr, codedValue, nBits ); + + return value; +} + +/** Get nBits long value from bitstream into *pStream. */ +static int16_t GetFromBitstream( + Decoder_State *st, + TDecodeValue DecodeValue, + uint16_t index, + int16_t nFixedBits, + int16_t **pStream ) +{ + int16_t value = 0; + if ( DecodeValue != NULL ) + { + DecodeValue( st, index, &value ); + } + else + { + value = get_next_indice( st, nFixedBits ); + } + *( *pStream )++ = value; + + return value; +} + + +static int16_t FixedWidthEncoding( int16_t value, int16_t index ) +{ + (void) index; /* suppress compiler warnings */ + + return value; +} + + +/********************************/ +/* Interface functions */ +/********************************/ + +void GetParameters( + ParamsBitMap const *paramsBitMap, + const int16_t nArrayLength, + void const *pParameter, + int16_t **pStream, + int16_t *pnSize, + int16_t *pnBits ) +{ + int16_t index; + int16_t iParam, nParams; + int16_t value; + void const *pSubStruct; + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( pnBits != NULL ) ); + + nParams = paramsBitMap->nParams; + for ( index = 0; index < nArrayLength; index++ ) + { + for ( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *const param = ¶msBitMap->params[iParam]; + +#define WMC_TOOL_MAN + pSubStruct = param->GetParamValue( pParameter, index, &value ); +#undef WMC_TOOL_MAN + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + if ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ) + { + *( *pStream )++ = value; + } + else + { + *( *pStream )++ = value - 1; + } + ++*pnSize; +#define WMC_TOOL_MAN + *pnBits += ( param->nBits != 0 ) ? param->nBits : param->GetNumberOfBits( value, index ); +#undef WMC_TOOL_MAN + if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + GetParameters( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize, pnBits ); + } + } + } + + return; +} + + +void SetParameters( + ParamsBitMap const *paramsBitMap, + const int16_t nArrayLength, + void *pParameter, + const int16_t **pStream, + int16_t *pnSize ) +{ + int16_t index; + int16_t iParam, nParams; + int16_t value; + void *pSubStruct; + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) ); + + nParams = paramsBitMap->nParams; + for ( index = 0; index < nArrayLength; index++ ) + { + for ( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *const param = ¶msBitMap->params[iParam]; + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + + value = *( *pStream )++ + ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ? 0 : 1 ); +#define WMC_TOOL_MAN + pSubStruct = param->SetParamValue( pParameter, index, value ); +#undef WMC_TOOL_MAN + ++*pnSize; + if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + SetParameters( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize ); + } + } + } + + return; +} + + +void WriteToBitstream( + ParamsBitMap const *paramsBitMap, + const int16_t nArrayLength, + const int16_t **pStream, + int16_t *pnSize, + BSTR_ENC_HANDLE hBstr, + int16_t *pnBits ) +{ + int16_t index; + int16_t iParam, nParams; + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( hBstr != NULL ) && ( pnBits != NULL ) ); + + nParams = paramsBitMap->nParams; + for ( index = 0; index < nArrayLength; index++ ) + { + for ( iParam = 0; iParam < nParams; iParam++ ) + { + const ParamBitMap *param = ¶msBitMap->params[iParam]; + int16_t nBits; + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + int16_t fShiftValue; + TEncodeValue EncodeValue; + int16_t value; + +#define WMC_TOOL_MAN + nBits = ( param->nBits != 0 ) ? param->nBits : param->GetNumberOfBits( **pStream, index ); +#undef WMC_TOOL_MAN + fShiftValue = !param->fZeroAllowed && ( param->EncodeValue == NULL ); + EncodeValue = ( param->EncodeValue == NULL ) ? &FixedWidthEncoding : param->EncodeValue; + value = PutIntoBitstream( pStream, EncodeValue, index, hBstr, nBits ) + ( fShiftValue ? 1 : 0 ); + ++*pnSize; + *pnBits += nBits; + if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + WriteToBitstream( param->pSubParamBitMap, value, pStream, pnSize, hBstr, pnBits ); + } + } + } + + return; +} + + +void ReadFromBitstream( + ParamsBitMap const *paramsBitMap, + const int16_t nArrayLength, + Decoder_State *st, + int16_t **pStream, + int16_t *pnSize ) +{ + int16_t index; + int16_t iParam, nParams; + int16_t fShiftValue; + int16_t value; + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( st != NULL ) ); + + nParams = paramsBitMap->nParams; + for ( index = 0; index < nArrayLength; index++ ) + { + for ( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *param = ¶msBitMap->params[iParam]; + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + + fShiftValue = !param->fZeroAllowed && ( param->EncodeValue == NULL ); + value = GetFromBitstream( st, param->DecodeValue, index, param->nBits, pStream ) + ( fShiftValue ? 1 : 0 ); + if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + ReadFromBitstream( param->pSubParamBitMap, value, st, pStream, pnSize ); + } + } + } + + *pnSize += nParams * nArrayLength; + + return; +} diff --git a/lib_com/phase_dispersion.c b/lib_com/phase_dispersion.c new file mode 100644 index 0000000000..7e1a1a4b14 --- /dev/null +++ b/lib_com/phase_dispersion.c @@ -0,0 +1,158 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * phase_dispersion() + * + * Post-processing to enhance noise at low bitrate + *-----------------------------------------------------------------------*/ + +void phase_dispersion( + const float gain_code, /* i : gain of code */ + const float gain_pit, /* i : gain of pitch */ + float code[], /* i/o: code vector */ + const int16_t mode, /* i : level, 0=hi, 1=lo, 2=off */ + float disp_mem[] /* i/o: static memory (size = 8) */ +) +{ + int16_t i, j, state; + float *prev_gain_pit, *prev_gain_code, *prev_state; + float code2[2 * L_SUBFR]; + float h_disp[L_SUBFR], *code2_real, *code2_imag, *code_real, *code_imag, *h_real, *h_imag; + + prev_state = disp_mem; + prev_gain_code = disp_mem + 1; + prev_gain_pit = disp_mem + 2; + + state = 2; + if ( gain_pit < 0.6f ) + { + state = 0; + } + else if ( gain_pit < 0.9f ) + { + state = 1; + } + + for ( i = 5; i > 0; i-- ) + { + prev_gain_pit[i] = prev_gain_pit[i - 1]; + } + prev_gain_pit[0] = gain_pit; + + if ( gain_code - 3.0f * *prev_gain_code > 0.0f ) + { + if ( state < 2 ) + { + state++; + } + } + else + { + j = 0; + for ( i = 0; i < 6; i++ ) + { + if ( prev_gain_pit[i] < 0.6f ) + { + j++; + } + } + + if ( j > 2 ) + { + state = 0; + } + + if ( ( state - (int16_t) *prev_state ) > 1 ) + { + state--; + } + } + + *prev_gain_code = gain_code; + *prev_state = (float) state; + + /*-----------------------------------------------------------------* + * Circular convolution + *-----------------------------------------------------------------*/ + + state += mode; /* level of dispersion */ + if ( state < 2 ) + { + fft_rel( code, L_SUBFR, 6 ); + + if ( state == 0 ) + { + mvr2r( low_H, h_disp, L_SUBFR ); + } + + if ( state == 1 ) + { + mvr2r( mid_H, h_disp, L_SUBFR ); + } + + code2_real = code2; + code2_imag = code2 + L_SUBFR - 1; + code_real = code; + code_imag = code + L_SUBFR - 1; + h_real = h_disp; + h_imag = h_disp + L_SUBFR - 1; + *code2_real++ = *code_real++ * *h_real++; + + for ( i = 1; i < L_SUBFR / 2; i++ ) + { + *code2_real++ = *code_real * *h_real - *code_imag * *h_imag; + *code2_imag-- = *code_real++ * *h_imag-- + *code_imag-- * *h_real++; + } + + *code2_real++ = *code_real++ * *h_real++; + ifft_rel( code2, L_SUBFR, 6 ); + + mvr2r( code2, code, L_SUBFR ); + } + + return; +} diff --git a/lib_com/ppp.c b/lib_com/ppp.c new file mode 100644 index 0000000000..9008e1b441 --- /dev/null +++ b/lib_com/ppp.c @@ -0,0 +1,116 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Interpol_delay() + * + * Interpolation of pitch lag + *--------------------------------------------------------------------*/ + +void Interpol_delay( + float *out, /* o : pitch interpolation output */ + float *last, /* i : last frame pitch lag */ + float *current, /* i : current frame pitch lag */ + int16_t SubNum, /* i : subframe number */ + const float *frac /* i : interpolation constant */ +) +{ + out[0] = ( 1.0f - frac[SubNum] ) * *last + frac[SubNum] * *current; + out[1] = ( 1.0f - frac[SubNum + 1] ) * *last + frac[SubNum + 1] * *current; + out[2] = ( 1.0f - frac[SubNum + 2] ) * *last + frac[SubNum + 2] * *current; + + return; +} + + +/*-------------------------------------------------------------------* + * deemph_lpc() + * + * De-emphasis of LP coefficients + * convolve LPC with [1 -PREEMPH_FAC] to de-emphasise LPC + *--------------------------------------------------------------------*/ + +void deemph_lpc( + float *p_Aq_curr, /* i : LP coefficients current frame */ + float *p_Aq_old, /* i : LP coefficients previous frame */ + float *LPC_de_curr, /* o : De-emphasized LP coefficients current frame */ + float *LPC_de_old, /* o : De-emphasized LP coefficients previous frame */ + const int16_t deemph_old ) +{ + int16_t k; + float b[M + 2]; + float a[2] = { -PREEMPH_FAC, 1.0 }; + + b[0] = 1.0; + for ( k = 0; k < M; k++ ) + { + b[k + 1] = p_Aq_curr[k]; + } + b[M + 1] = 0.0; + + for ( k = 0; k <= M; k++ ) + { + LPC_de_curr[k] = a[0] * b[k] + a[1] * b[k + 1]; + } + + if ( deemph_old == 1 ) + { + /* ignoring the 1st value which is 1.0 in this case */ + b[0] = 1.0; + for ( k = 0; k < M; k++ ) + { + b[k + 1] = p_Aq_old[k + 1]; + } + b[M + 1] = 0.0; + + for ( k = 0; k <= M; k++ ) + { + LPC_de_old[k] = a[0] * b[k] + a[1] * b[k + 1]; + } + } + + return; +} diff --git a/lib_com/pred_lt4.c b/lib_com/pred_lt4.c new file mode 100644 index 0000000000..3226c31b57 --- /dev/null +++ b/lib_com/pred_lt4.c @@ -0,0 +1,159 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * pred_lt4() + * + * Compute the result of long term prediction with fractionnal + * interpolation of resolution 1/4. + * + * On return, exc[0..L_subfr-1] contains the interpolated signal + * (adaptive codebook excitation) + *-------------------------------------------------------------------*/ + +void pred_lt4( + const float excI[], /* i : input excitation buffer */ + float excO[], /* o : output excitation buffer */ + const int16_t T0, /* i : integer pitch lag */ + int16_t frac, /* i : fraction of lag */ + const int16_t L_subfr, /* i : subframe size */ + const float *win, /* i : interpolation window */ + const int16_t nb_coef, /* i : nb of filter coef */ + const int16_t up_sample /* i : up_sample */ +) +{ + int16_t i, j; + float s; + const float *x1, *x2, *x0, *c1, *c2; + + x0 = &excI[-T0]; + frac = -frac; + + if ( frac < 0 ) + { + frac += up_sample; + x0--; + } + + for ( j = 0; j < L_subfr; j++ ) + { + x1 = x0++; + x2 = x1 + 1; + c1 = &win[frac]; + c2 = &win[up_sample - frac]; + + s = 0.0f; + for ( i = 0; i < nb_coef; i++, c1 += up_sample, c2 += up_sample ) + { + s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); + } + excO[j] = s; + } + + return; +} + +/*-------------------------------------------------------------------* + * pred_lt4_tc() + * + * adapt. search of the second impulse in the same subframe (when appears) + * On return, exc[0..L_subfr-1] contains the interpolated signal + * (adaptive codebook excitation) + *-------------------------------------------------------------------*/ + +void pred_lt4_tc( + float exc[], /* i/o: excitation buffer */ + const int16_t T0, /* i : integer pitch lag */ + int16_t frac, /* i : fraction of lag */ + const float *win, /* i : interpolation window */ + const int16_t imp_pos, /* i : glottal impulse position */ + const int16_t i_subfr /* i : subframe index */ +) +{ + int16_t i, j; + float s; + const float *x1, *x2, *x0, *c1, *c2; + float excO[L_SUBFR + 1]; + float excI[2 * L_SUBFR]; + + mvr2r( exc + i_subfr - L_SUBFR, excI, 2 * L_SUBFR ); + + if ( ( ( T0 + imp_pos - L_IMPULSE2 ) < L_SUBFR ) && ( T0 < L_SUBFR ) ) + { + set_f( excI + L_SUBFR - T0, 0, T0 ); + set_f( excO, 0, L_SUBFR + 1 ); + x0 = excI + L_SUBFR; + frac = -frac; + + if ( frac < 0 ) + { + frac += PIT_UP_SAMP; + x0--; + } + + for ( j = T0; j < L_SUBFR + 1; j++ ) + { + x1 = x0++; + x2 = x1 + 1; + c1 = &win[frac]; + c2 = &win[PIT_UP_SAMP - frac]; + + s = 0.0f; + for ( i = 0; i < L_INTERPOL2; i++, c1 += PIT_UP_SAMP, c2 += PIT_UP_SAMP ) + { + s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); + } + excO[j] = s; + } + + for ( i = T0; i < L_SUBFR; i++ ) + { + exc[i + i_subfr] += PIT_SHARP * excO[i]; + } + } + + return; +} diff --git a/lib_com/preemph.c b/lib_com/preemph.c new file mode 100644 index 0000000000..32283198cd --- /dev/null +++ b/lib_com/preemph.c @@ -0,0 +1,71 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------* + * preemph() + * + * Preemphasis: filtering through 1 - mu z^-1 + *-------------------------------------------------------------*/ + +void preemph( + float *signal, /* i/o: signal */ + const float mu, /* i : preemphasis factor */ + const int16_t L, /* i : vector size */ + float *mem /* i/o: memory (x[-1]) */ +) +{ + int16_t i; + float temp; + + temp = signal[L - 1]; + for ( i = L - 1; i > 0; i-- ) + { + signal[i] = signal[i] - mu * signal[i - 1]; + } + + signal[0] = signal[0] - mu * ( *mem ); + *mem = temp; + + return; +} diff --git a/lib_com/prot.h b/lib_com/prot.h new file mode 100644 index 0000000000..9ddf214eb0 --- /dev/null +++ b/lib_com/prot.h @@ -0,0 +1,10042 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef PROT_H +#define PROT_H + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#ifndef RAM_COUNTING_TOOL +#include +#endif +#include "typedef.h" +#include "stat_enc.h" +#include "stat_dec.h" +#include "stat_com.h" +#include "ivas_stat_com.h" +#include "ivas_stat_enc.h" +#include "ivas_stat_dec.h" +#include "cnst.h" +#include "stl.h" +#ifdef RAM_COUNTING_TOOL +#include "mem_count.h" +#endif +#include "ivas_error_utils.h" + +/*----------------------------------------------------------------------------------* + * Prototypes of RAM counting tool macros + *----------------------------------------------------------------------------------*/ + +#ifdef RAM_COUNTING_TOOL +#define count_malloc( n1 ) MALLOC_FCT_CALL( n1 ) +#define count_calloc( n1, n2 ) CALLOC_FCT_CALL( n1, n2 ) +#define count_free( ptr ) FREE_FCT_CALL( ptr ) +#else +#define count_malloc( n1 ) malloc( n1 ) +#define count_calloc( n1, n2 ) calloc( n1, n2 ) +#define count_free( ptr ) free( ptr ) +#endif + +#define dynamic_malloc( n1 ) malloc( n1 ) +#define dynamic_calloc( n1, n2 ) calloc( n1, n2 ) +#define dynamic_free( n1 ) free( n1 ) + +/*----------------------------------------------------------------------------------* + * Prototypes of global macros + *----------------------------------------------------------------------------------*/ + +#ifndef min +#define min( x, y ) ( ( x ) < ( y ) ? ( x ) : ( y ) ) +#endif + +#ifndef max +#define max( x, y ) ( ( x ) > ( y ) ? ( x ) : ( y ) ) +#endif + +#ifndef TRUNC +#define TRUNC( x ) ( (int16_t) ( ( ( x ) >= 32767. ? 32767 : ( ( x ) <= -32768. ? -32768 : ( x ) ) ) + 0.5 ) ) +#endif + +#define log_base_2( x ) ( (double) log( (double) ( x ) ) * 1.4426950408889634074f ) +#define round_f( x ) ( ( ( x ) > 0 ) ? (int32_t) ( ( x ) + 0.5f ) : ( -(int32_t) ( ( -x ) + 0.5f ) ) ) + +#ifndef ABSVAL +#define ABSVAL( a ) ( ( a ) >= 0 ? ( a ) : ( -( a ) ) ) +#endif + +#ifndef SQR +#define SQR( a ) ( ( a ) * ( a ) ) +#endif + +#ifndef SWAP +#define SWAP( a, b ) \ + { \ + tempr = ( a ); \ + ( a ) = ( b ); \ + ( b ) = tempr; \ + } +#endif + +#ifndef swap +#define swap( x, y, type ) \ + { \ + type u__p; \ + u__p = x; \ + x = y; \ + y = u__p; \ + } +#endif + +#define set_max( a, b ) \ + { \ + if ( ( b ) > *a ) \ + { \ + *a = ( b ); \ + } \ + } /* If the first argument is already the highes or lowest, nothing is done. */ +#define set_min( a, b ) \ + { \ + if ( ( b ) < *a ) \ + { \ + *a = ( b ); \ + } \ + } /* Otherwise, the 2nd arg is stored at the address of the first arg. */ + +static __inline Word16 L_Extract_lc( const Word32 L_32, Word16 *p_hi ) +{ + *p_hi = extract_h( L_32 ); + return lshr( extract_l( L_32 ), 1 ); +} + +/*----------------------------------------------------------------------------------* + * MODE1 prototypes + *----------------------------------------------------------------------------------*/ + +/*! r: inverse square root of input value */ +float inv_sqrt( + const float x /* i : input value */ +); + +/*! r: output random value */ +int16_t own_random( + int16_t *seed /* i/o: random seed */ +); + +/*! r: sign of x (+1/-1) */ +float sign( + const float x /* i : input value of x */ +); + +/*! r: logarithm2 of x */ +float log2_f( + const float x /* i : input value of x */ +); + +int16_t norm_ul( + uint32_t UL_var1 ); + +/*! r: sum of all vector elements */ +int16_t sum_s( + const int16_t *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +); + +/*! r: sum of all vector elements */ +int32_t sum_l( + const int32_t *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +); + +/*! r: sum of all vector elements */ +float sum_f( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +); + +/*! r: sum of all squared vector elements */ +float sum2_f( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +); + +void set_c( + int8_t y[], /* i/o: Vector to set */ + const int8_t a, /* i : Value to set the vector to */ + const int16_t N /* i : Lenght of the vector */ +); + +void set_s( + int16_t y[], /* i/o: Vector to set */ + const int16_t a, /* i : Value to set the vector to */ + const int16_t N /* i : Lenght of the vector */ +); + +void set_l( + int32_t y[], /* i/o: Vector to set */ + const int32_t a, /* i : Value to set the vector to */ + const int16_t N /* i : Length of the vector */ +); + +void set_f( + float y[], /* i/o: Vector to set */ + const float a, /* i : Value to set the vector to */ + const int16_t N /* i : Lenght of the vector */ +); + +void set_zero( + float *vec, /* o : input vector */ + const int16_t lvec /* i : length of the vector */ +); + +void mvr2r( + const float x[], /* i : input vector */ + float y[], /* o : output vector */ + const int16_t n /* i : vector size */ +); + +void mvs2s( + const int16_t x[], /* i : input vector */ + int16_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +); + +uint32_t mvr2s( + const float x[], /* i : input vector */ + int16_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +); + +void mvs2r( + const int16_t x[], /* i : input vector */ + float y[], /* o : output vector */ + const int16_t n /* i : vector size */ +); + +void mvl2l( + const int32_t x[], /* i : input vector */ + int32_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +); + +void AGC_dec( + float x[], /* i/o: input/output vector */ + float mem[], /* i/o: mem[2] should be init to [0,0] */ + const int16_t n /* i : vector size */ +); + +/*! r: thresholded value */ +float thr_f( + const float x, /* i : input value */ + const float x_min, /* i : lower thresholod */ + const float x_max /* o : upper threshold */ +); + +/*! r: index of the maximum value in the input vector */ +int16_t maximum( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *max_val /* o : maximum value in the input vector */ +); + +/*! r: index of the maximum value in the input vector */ +int16_t maximum_s( + const int16_t *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + int16_t *max /* o : maximum value in the input vector */ +); + +/*! r: index of the maximum value in the input vector */ +int16_t maximumAbs( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *max_val /* o : maximum value in the input vector */ +); + +/*! r: index of the minimum value in the input vector */ +int16_t minimum( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *min_val /* o : minimum value in the input vector */ +); + +/*! r: index of the minimum value in the input vector */ +int16_t minimum_s( + const int16_t *vec, /* i : Input vector */ + const int16_t lvec, /* i : Vector length */ + int16_t *min_val /* o : minimum value in the input vector */ +); + +/*! r: return index with max energy value in vector */ +int16_t emaximum( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *ener_max /* o : maximum energy value */ +); + +/*! r: vector mean */ +float mean( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +); + +/*! r: dot product of x[] and y[] */ +float dotp( + const float x[], /* i : vector x[] */ + const float y[], /* i : vector y[] */ + const int16_t n /* i : vector length */ +); + +void conv( + const float x[], /* i : input vector */ + const float h[], /* i : impulse response (or second input vector) */ + float y[], /* o : output vetor (result of convolution) */ + const int16_t L /* i : vector size */ +); + +void fir( + const float x[], /* i : input vector */ + const float h[], /* i : impulse response of the FIR filter */ + float y[], /* o : output vector (result of filtering) */ + float mem[], /* i/o: memory of the input signal (M samples) */ + const int16_t L, /* i : input vector size */ + const int16_t K, /* i : order of the FIR filter (M+1 coefs.) */ + const int16_t upd /* i : 1 = update the memory, 0 = not */ +); + +void v_add( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 + vector 2 */ + const int16_t N /* i : Vector length */ +); + +void v_sub( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 - vector 2 */ + const int16_t N /* i : Vector length */ +); + +void v_mult( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 .* vector 2*/ + const int16_t N /* i : Vector length */ +); + +void v_multc( + const float x[], /* i : Input vector */ + const float c, /* i : Constant */ + float y[], /* o : Output vector that contains c*x */ + const int16_t N /* i : Vector length */ +); + +void v_sub_s( + const int16_t x1[], /* i : Input vector 1 */ + const int16_t x2[], /* i : Input vector 2 */ + int16_t y[], /* o : Output vector that contains vector 1 - vector 2 */ + const int16_t N /* i : Vector length */ +); + +/*! r: index of the winning codeword */ +int16_t squant( + const float x, /* i : scalar value to quantize */ + float *xq, /* o : quantized value */ + const float cb[], /* i : codebook */ + const int16_t cbsize /* i : codebook size */ +); + +int16_t squant_int( + uint8_t x, /* i : scalar value to quantize */ + uint8_t *xq, /* o : quantized value */ + const uint8_t *cb, /* i : codebook */ + const int16_t cbsize /* i : codebook size */ +); + +/*! r: index of the winning codevector */ +int16_t vquant( + float x[], /* i : vector to quantize */ + const float x_mean[], /* i : vector mean to subtract (0 if none) */ + float xq[], /* o : quantized vector */ + const float cb[], /* i : codebook */ + const int16_t dim, /* i : dimension of codebook vectors */ + const int16_t cbsize /* i : codebook size */ +); + +/*! r: index of the winning codevector */ +int16_t w_vquant( + float x[], /* i : vector to quantize */ + const float x_mean[], /* i : vector mean to subtract (0 if none) */ + const int16_t weights[], /* i : error weights */ + float xq[], /* o : quantized vector */ + const float cb[], /* i : codebook */ + const int16_t dim, /* i : dimension of codebook vectors */ + const int16_t cbsize, /* i : codebook size */ + const int16_t reverse /* i : reverse codebook vectors */ +); + +/*! r: index of the winning codeword */ +int16_t usquant( + const float x, /* i : scalar value to quantize */ + float *xq, /* o : quantized value */ + const float qlow, /* i : lowest codebook entry (index 0) */ + const float delta, /* i : quantization step */ + const int16_t cbsize /* i : codebook size */ +); + +/*! r: dequanzited gain */ +float usdequant( + const int16_t idx, /* i : quantizer index */ + const float qlow, /* i : lowest codebook entry (index 0) */ + const float delta /* i : quantization step */ +); + +void v_sort( + float *r, /* i/o: Vector to be sorted in place */ + const int16_t lo, /* i : Low limit of sorting range */ + const int16_t up /* i : High limit of sorting range */ +); + +void sort( + uint16_t *x, /* i/o: Vector to be sorted */ + uint16_t len /* i/o: vector length */ +); + +/*! r: variance of vector */ +float var( + const float *x, /* i : input vector */ + const int16_t len /* i : length of inputvector */ +); + +/*! r: standard deviation */ +float std_dev( + const float *x, /* i : input vector */ + const int16_t len /* i : length of the input vector */ +); + +/*! r: the dot product x'*A*x */ +float dot_product_mat( + const float *x, /* i : vector x */ + const float *A, /* i : matrix A */ + const int16_t m /* i : vector length */ +); + +float root_a( + float a ); + +float root_a_over_b( + float a, + float b ); + +void polezero_filter( + const float *in, /* i : input vector */ + float *out, /* o : output vector */ + const int16_t N, /* i : input vector size */ + const float *b, /* i : numerator coefficients */ + const float *a, /* i : denominator coefficients */ + const int16_t order, /* i : filter order */ + float *mem /* i/o: filter memory */ +); + +double rint_new( + double x /* i/o: Round to the nearest integer with mid point exception */ +); + +double anint( + double x /* i/o: Round to the nearest integer */ +); + +/*! r: Output either 1 if Numeric, 0 if NaN or Inf */ +int16_t is_numeric_float( + float x /* i : Input value which is checked if numeric or not */ +); + +void delay_signal( + float x[], /* i/o: signal to be delayed */ + const int16_t len, /* i : length of the input signal */ + float mem[], /* i/o: synchronization memory */ + const int16_t delay /* i : delay in samples */ +); + +#ifdef DEBUG_BS_READ_WRITE +#define push_indice( ... ) push_indice_( __VA_ARGS__, __LINE__, __func__ ) +ivas_error push_indice_( +#else +ivas_error push_indice( +#endif + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t id, /* i : ID of the indice */ + uint16_t value, /* i : value of the quantized indice */ + int16_t nb_bits /* i : number of bits used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +); + +#ifdef DEBUG_BS_READ_WRITE +#define push_next_indice( ... ) push_next_indice_( __VA_ARGS__, __LINE__, __func__ ) +ivas_error push_next_indice_( +#else +ivas_error push_next_indice( +#endif + BSTR_ENC_HANDLE hBstr, + uint16_t value, /* i : value of the quantized indice */ + int16_t nb_bits /* i : number of bits used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +); + +#ifdef DEBUG_BS_READ_WRITE +#define push_next_bits( ... ) push_next_bits_( __VA_ARGS__, __LINE__, __func__ ) +void push_next_bits_( +#else +void push_next_bits( +#endif + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const uint16_t bits[], /* i : bit buffer to pack, sequence of single bits */ + const int16_t nb_bits /* i : number of bits to pack */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +); + +/*! r: value of the indice */ +#ifdef DEBUG_BS_READ_WRITE +#define get_next_indice( ... ) get_next_indice_( __VA_ARGS__, __LINE__, __func__ ) +uint16_t get_next_indice_( +#else +uint16_t get_next_indice( +#endif + Decoder_State *st, /* i/o: decoder state structure */ + int16_t nb_bits /* i : number of bits that were used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +); + +/*! r: value of the indice */ +uint16_t get_next_indice_1( + Decoder_State *st /* i/o: decoder state structure */ +); + +void get_next_indice_tmp( + Decoder_State *st, /* o : decoder state structure */ + int16_t nb_bits /* i : number of bits that were used to quantize the indice */ +); + +/*! r: value of the indice */ +#ifdef DEBUG_BS_READ_WRITE +#define get_indice( ... ) get_indice_( __VA_ARGS__, __LINE__, __func__ ) +uint16_t get_indice_( +#else +uint16_t get_indice( +#endif + Decoder_State *st, /* i/o: decoder state structure */ + int16_t pos, /* i : absolute position in the bitstream */ + int16_t nb_bits /* i : number of bits that were used to quantize the indice */ +#ifdef DEBUG_BS_READ_WRITE + , + int16_t line, + const char *func +#endif +); + +/*! r: value of the indice */ +uint16_t get_indice_1( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t pos /* i : absolute position in the bitstream */ +); + +void reset_indices_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t max_num_indices /* i : max number of indices */ +); + +void reset_indices_dec( + Decoder_State *st /* i/o: decoder state structure */ +); + +ivas_error write_indices_ivas( + Encoder_Struct *st_ivas, /* i/o: encoder state structure */ + uint16_t *bit_stream, /* i/o: output bitstream */ + uint16_t *num_bits /* i/o: number of bits written to output */ +); + +Word16 rate2EVSmode( + const Word32 brate, /* i : bitrate */ + int16_t *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */ +); + + +/*! r: 1 = OK, 0 = something wrong */ +ivas_error read_indices( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + uint16_t bit_stream[], /* i : bitstream buffer */ + UWord16 num_bits, /* i : number of bits in bitstream */ + int16_t *prev_ft_speech, + int16_t *CNG, + int16_t bfi /* i : bad frame indicator */ +); + +#ifdef DEBUGGING +/*! r: 1 = reading OK, 0 = problem */ +ivas_error preview_indices( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + uint16_t bit_stream[], /* i : bitstream buffer */ + UWord16 num_bits /* i : number of bits in bitstream */ +); +#endif + +void ivas_set_bitstream_pointers( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + +Decoder_State **reset_elements( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +); + + +void indices_to_serial_generic( + const Indice *ind_list, /* i : indices list */ + const Word16 num_indices, /* i : number of indices to write */ + UWord8 *pFrame, /* o : byte array with bit packet and byte aligned coded speech data */ + Word16 *pFrame_size /* o : size of the binary encoded access unit [bits] */ +); + +void convertSerialToBytestream( + const uint16_t *const serial, /* i : input serial bitstream with values 0 and 1 */ + const uint16_t num_bits, /* i : number of bits in the input bitstream */ + uint8_t *const bytestream /* o : output compact bitstream (bytestream) */ +); + +void convertBytestreamToSerial( + const uint8_t *const bytestream, /* i : input compact bitstream (bytestream) */ + const uint16_t num_bits, /* i : number of bits in the input bitstream */ + uint16_t *const serial /* o : output serial bitstream with values 0 and 1 */ +); + +void mdct_switching_dec( + Decoder_State *st /* i/o: decoder state structure */ +); + +void evs_dec_previewFrame( + uint8_t *bitstream, /* i : bitstream pointer */ + int16_t bitstreamSize, /* i : bitstream size */ + int16_t *partialCopyFrameType, /* o : frame type of the partial copy */ + int16_t *partialCopyOffset /* o : offset of the partial copy relative to the primary copy */ +); + + +void read_indices_from_djb( + Decoder_State *st, /* i/o: decoder state structure */ + uint8_t *pt_stream, /* i : bitstream file */ + int16_t *CNG, + const int16_t num_bits, /* i : input frame length in bits */ + const Word16 isAMRWB_IOmode, /* i : AMRWB flag */ + const Word16 core_mode, /* i : core mode for frame */ + const Word16 qbit, /* i : Q bit for AMR-WB IO */ + const Word16 bitstreamformat, + const Word16 amrwb_rfc4867_flag, + const int16_t partialframe, /* i : partial frame information */ + const int16_t next_coder_type /* i : next coder type information */ +); + +void getPartialCopyInfo( + Decoder_State *st, /* i : decoder state structure */ + int16_t *sharpFlag ); + +void get_NextCoderType( + uint8_t *bitstream, /* i : bitstream */ + int16_t *next_coder_type /* o : next coder type */ +); + +int16_t print_disclaimer( + FILE *fPtr ); + +void autocorr( + const float *x, /* i : input signal */ + float *r, /* o : autocorrelations vector */ + const int16_t m, /* i : order of LP filter */ + const int16_t len, /* i : window size */ + const float *wind, /* i : window */ + const int16_t rev_flag, /* i : flag to reverse window */ + const int16_t sym_flag, /* i : symmetric window flag */ + const int16_t no_thr /* i : flag to avoid thresholding */ +); + +/*! r: energy of prediction error */ +int16_t lev_dur( + float *a, /* o : LP coefficients (a[0] = 1.0) */ + const float *r, /* i : vector of autocorrelations */ + const int16_t m, /* i : order of LP filter */ + float epsP[] /* o : prediction error energy */ +); + +/*! r: delay value in ns */ +float get_delay( + const int16_t what_delay, /* i : what delay? (ENC or DEC) */ + const int32_t io_fs, /* i : input/output sampling frequency */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + HANDLE_CLDFB_FILTER_BANK hCldfb, /* i : Handle of Cldfb analysis */ + RENDERER_TYPE renderer_type, /* i : IVAS rendering type */ + const int32_t binaural_latency_ns /* i : binaural renderer HRTF delay in ns */ +); + +void decision_matrix_enc( + Encoder_State *st, /* i/o: encoder state structure */ + int16_t *hq_core_type /* o : HQ core type */ +); + +void signalling_enc( + Encoder_State *st /* i : encoder state structure */ +); + +int16_t signalling_mode1_tcx20_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t push /* i : flag to push indice */ +); + +void decision_matrix_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *sharpFlag, /* o : formant sharpening flag */ + int16_t *hq_core_type, /* o : HQ core type */ + int16_t *core_switching_flag /* o : ACELP->HQ switching frame flag */ +); + +/*! r: LP filter stability */ +float lsf_stab( + const float *lsf, /* i : LSF vector */ + const float *lsfold, /* i : old LSF vector */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame /* i : frame length */ +); + +void amr_wb_dec_init( + AMRWB_IO_DEC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO data handle */ +); + +void hf_synth_amr_wb_init( + AMRWB_IO_DEC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO data handle */ +); + +void hf_synth_amr_wb_reset( + AMRWB_IO_DEC_HANDLE hAmrwb_IO, /* i/o: AMR-WB IO data handle */ + ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ +); + +void hf_synth_amr_wb( + AMRWB_IO_DEC_HANDLE hAmrwb_IO, /* i/o: AMR-WB IO data handle */ + ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t output_frame, /* i : output frame length */ + const float *Aq, /* i : quantized Az */ + const float *exc, /* i : excitation at 12.8 kHz */ + float *synth, /* i/o: synthesis signal at 12.8 kHz */ + int16_t *amr_io_class, /* i : signal class (determined by FEC algorithm) */ + float *synth_out, /* i/o: synthesis signal at output Fs */ + float fmerit, /* i : classify parameter from FEC */ + const int16_t *hf_gain, /* i : decoded HF gain */ + const float *voice_factors, /* i : voicing factors */ + const float pitch_buf[], /* i : pitch buffer */ + const float ng_ener_ST, /* i : Noise gate - short-term energy */ + const float *lsf_new /* i : ISF vector */ +); + +void hf_cod_init( + float *mem_hp400_enc, /* o : memory of hp 400 Hz filter */ + float *mem_hf1_enc, /* o : HF band-pass filter memory */ + float *mem_syn_hf_enc, /* o : HF synthesis memory */ + float *mem_hf2_enc, /* o : HF band-pass filter memory */ + float *gain_alpha /* o : smoothing gain for transitions between active and inactive frames */ +); + +void hf_cod( + const int32_t core_brate, /* i : core bitrate */ + const float *speech16k, /* i : original speech at 16 kHz */ + const float Aq[], /* i : quantized Aq */ + const float exc[], /* i : excitation at 12.8 kHz */ + float synth[], /* i : 12.8kHz synthesis signal */ + int16_t *seed2_enc, /* i/o: random seed for HF noise gen */ + float *mem_hp400_enc, /* i/o: memory of hp 400 Hz filter */ + float *mem_syn_hf_enc, /* i/o: HF synthesis memory */ + float *mem_hf1_enc, /* i/o: HF band-pass filter memory */ + float *mem_hf2_enc, /* i/o: HF band-pass filter memory */ + const int16_t *dtxHangoverCount, + float *gain_alpha, /* i/o: smoothing gain for transitions between active and inactive frames */ + int16_t *hf_gain /* o : HF gain to be transmitted to decoder */ +); + +void hf_synth_init( + ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ +); + +void hf_synth_reset( + ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ +); + +void hf_synth( + ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t output_frame, /* i : output frame length */ + const float *Aq, /* i : quantized Az */ + const float *exc, /* i : excitation at 12.8 kHz */ + float *synth, /* i/o: 12.8kHz synthesis signal */ + float *synth16k /* i/o: 16kHz synthesis signal */ +); + +int16_t lsp_convert_poly( + float w[], /* i/o: LSP or ISP parameters */ + const int16_t L_frame, /* i : flag for up or down conversion */ + const int16_t Opt_AMRWB /* i : flag for the AMR-WB IO mode */ +); + +/*! r: pulse position */ +int16_t findpulse( + const int16_t L_frame, /* i : length of the frame */ + const float res[], /* i : residual signal */ + const int16_t T0, /* i : integer pitch */ + const int16_t enc_dec, /* i : flag enc/dec, 0 - enc, 1 - dec */ + int16_t *sign /* i/o: sign of the maximum */ +); + +void fft_rel( + float x[], /* i/o: input/output vector */ + const int16_t n, /* i : vector length */ + const int16_t m /* i : log2 of vector length */ +); + +void ifft_rel( + float io[], /* i/o: input/output vector */ + const int16_t n, /* i : vector length */ + const int16_t m /* i : log2 of vector length */ +); + +void preemph( + float *signal, /* i/o: signal */ + const float mu, /* i : preemphasis factor */ + const int16_t L, /* i : vector size */ + float *mem /* i/o: memory (x[-1]) */ +); + +void cb_shape( + const int16_t preemphFlag, /* i : flag for pre-emphasis */ + const int16_t pitchFlag, /* i : flag for pitch sharpening */ + const int16_t scramblingFlag, /* i : flag for phase scrambling */ + const int16_t formantFlag, /* i : flag for formant sharpening */ + const int16_t formantTiltFlag, /* i : flag for formant tilt */ + const float g1, /* i : formant sharpening numerator weighting */ + const float g2, /* i : formant sharpening denominator weighting */ + const float *p_Aq, /* i : LP filter coefficients */ + float *code, /* i/o: signal to shape */ + const float tilt_code, /* i : tilt of code */ + const float pt_pitch, /* i : pointer to current subframe fractional pitch*/ + const int16_t L_subfr /* i : subfframe length */ +); + +void isp2a( + const float *isp, /* i : ISP vector (in the cosine domain) */ + float *a, /* o : LP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +); + +void isp2isf( + const float isp[], /* i : isp[m] (range: -1<=val<1) */ + float isf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +); + +void isf2isp( + const float isf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ + float isp[], /* o : isp[m] (range: -1<=val<1) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +); + +void reorder_isf( + float *isf, /* i/o: vector of isfs in the frequency domain (0..0.5)*/ + const float min_dist, /* i : minimum required distance */ + const int16_t n, /* i : LPC order */ + const float Fs /* i : sampling frequency */ +); + +void lsp2lsf( + const float lsp[], /* i : isp[m] (range: -1<=val<1) */ + float lsf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +); + +void lsf2lsp( + const float lsf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ + float lsp[], /* o : isp[m] (range: -1<=val<1) */ + const int16_t m, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +); + +void lsp2isp( + const float *lsp, /* i : LSP vector */ + float *isp, /* o : ISP filter coefficients */ + float *stable_isp, /* i/o: ISP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +); + +void isp2lsp( + const float *isp, /* i : LSP vector */ + float *lsp, /* o : ISP filter coefficients */ + float *stable_lsp, /* i/o: stable LSP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +); + +void reorder_lsf( + float *lsf, /* i/o: vector of lsfs in the frequency domain (0..0.5)*/ + const float min_dist, /* i : minimum required distance */ + const int16_t n, /* i : LPC order */ + const int32_t Fs /* i : sampling frequency */ +); + +void CNG_exc( + const int32_t core_brate, /* i : core bitrate */ + const int16_t L_frame, /* i : length of the frame */ + float *Enew, /* i/o: decoded SID energy */ + int16_t *seed, /* i/o: random generator seed */ + float exc[], /* o : current non-enhanced excitation */ + float exc2[], /* o : current enhanced excitation */ + float *lp_ener, /* i/o: LP filtered E */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + int16_t *first_CNG, /* i/o: first CNG frame flag for energy init. */ + int16_t *cng_ener_seed, /* i/o: random generator seed for CNG energy */ + float bwe_exc[], /* o : excitation for SWB TBE */ + const int16_t allow_cn_step, /* i : allow CN step */ + int16_t *last_allow_cn_step, /* i/o: last CN_step */ + const int16_t num_ho, /* i : number of selected hangover frames */ + float q_env[], + float *lp_env, + float *old_env, + float *exc_mem, + float *exc_mem1, + int16_t *sid_bw, + int16_t *cng_ener_seed1, + float exc3[], + const int16_t Opt_AMR_WB, /* i : AMR-WB interop flag */ + const int16_t element_mode /* i : IVAS Element mode */ +); + +void cng_params_upd( + const float lsp_new[], /* i : LSP aprameters */ + const float exc2[], /* i : current enhanced excitation */ + const int16_t L_frame, /* i : frame length */ + int16_t *ho_circ_ptr, /* i/o: pointer for CNG averaging buffers */ + float ho_ener_circ[], /* o : energy buffer for CNG averaging */ + int16_t *ho_circ_size, /* i/o: size of DTX hangover history buffer for averaging */ + float ho_lsp_circ[], /* o : old LSP buffer for CNG averaging */ + const int16_t enc_dec_flag, /* i : Flag indicating encoder or decoder (ENC,DEC) */ + float ho_env_circ[], /* i/o: Envelope buffer */ + int16_t *cng_buf_cnt, /* i/o: Counter of postponed FFT-processing instances */ + float cng_exc2_buf[], /* i/o: Excitation buffer */ + int32_t cng_brate_buf[], /* i/o: last_active_brate buffer */ + const int32_t last_active_brate, /* i : Last active bitrate */ + const int16_t element_mode, /* i : Element mode */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void cng_params_postupd( + const int16_t ho_circ_ptr, /* i : pointer for CNG averaging buffers */ + int16_t *cng_buf_cnt, /* i/o: counter for CNG store buffers */ + const float *cng_exc2_buf, /* i : Excitation buffer */ + const int32_t *cng_brate_buf, /* i : bitrate buffer */ + float ho_env_circ[], /* i/o: Envelope buffer */ + const int16_t element_mode, /* i : Element mode */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void calculate_hangover_attenuation_gain( + Encoder_State *st, /* i : encoder state structure */ + float *att, /* o : attenuation factor */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +int16_t get_cng_mode( + const int32_t last_active_brate /* i : last active bitrate */ +); + +void disf_ns_28b( + int16_t *indice, /* i : quantized indices, use indice[0] = -1 in the decoder*/ + float *isf_q /* o : ISF in the frequency domain (0..6400) */ +); + +void limit_T0( + const int16_t L_frame, /* i : length of the frame */ + const int16_t delta, /* i : Half the close-loop searched interval */ + const int16_t pit_flag, /* i : selecting absolute(0) or delta(1) pitch quantization */ + const int16_t limit_flag, /* i : flag for limits (0=restrained, 1=extended) */ + const int16_t T0, /* i : rough pitch estimate around which the search is done */ + const int16_t T0_frac, /* i : pitch estimate fractional part */ + int16_t *T0_min, /* o : lower pitch limit */ + int16_t *T0_max /* o : higher pitch limit */ +); + +/*! r: interpolated value */ +float interpolation( + const float *x, /* i : input vector */ + const float *win, /* i : interpolation window */ + const int16_t frac, /* i : fraction */ + const int16_t up_samp, /* i : upsampling factor */ + const int16_t nb_coef /* i : nb of filter coef */ +); + +void deemph( + float *signal, /* i/o: signal */ + const float mu, /* i : deemphasis factor */ + const int16_t L, /* i : vector size */ + float *mem /* i/o: memory (y[-1]) */ +); + +/*! r: tilt of the code */ +float est_tilt( + const float *adpt_exc, /* i : adaptive excitation vector */ + const float gain_pit, /* i : adaptive gain */ + const float *fixe_exc, /* i : algebraic exctitation vector */ + const float gain_code, /* i : algebraic code gain */ + float *voice_fac, /* o : voicing factor */ + const int16_t L_subfr, /* i : subframe size */ + const int16_t flag_tilt /* i : flag for special tilt */ +); + +void weight_a( + const float *a, /* i : LP filter coefficients */ + float *ap, /* o : weighted LP filter coefficients */ + const float gamma, /* i : weighting factor */ + const int16_t m /* i : order of LP filter */ +); + +void weight_a_subfr( + const int16_t nb_subfr, /* i : number of subframes */ + const float *a, /* i : LP filter coefficients */ + float *ap, /* o : weighted LP filter coefficients */ + const float gamma, /* i : weighting factor */ + const int16_t m /* i : order of LP filter */ +); + +void syn_12k8( + const int16_t L_frame, /* i : length of the frame */ + const float *Aq, /* i : LP filter coefficients */ + const float *exc, /* i : input signal */ + float *synth, /* o : output signal */ + float *mem, /* i/o: initial filter states */ + const int16_t update_m /* i : update memory flag: 0 --> no memory update */ +); /* 1 --> update of memory */ + +void syn_filt( + const float a[], /* i : LP filter coefficients */ + const int16_t m, /* i : order of LP filter */ + const float x[], /* i : input signal */ + float y[], /* o : output signal */ + const int16_t l, /* i : size of filtering */ + float mem[], /* i/o: initial filter states */ + const int16_t update_m /* i : update memory flag: 0 --> no memory update */ +); /* 1 --> update of memory */ + +void synth_mem_updt2( + const int16_t L_frame, /* i : frame length */ + const int16_t last_L_frame, /* i : frame length */ + float old_exc[], /* i/o: excitation buffer */ + float mem_syn_r[], /* i/o: synthesis filter memory */ + float mem_syn2[], /* o : synthesis filter memory for find_target */ + float mem_syn[], /* o : synthesis filter memory for find_target */ + const int16_t dec /* i : flag for decoder indication */ +); + +void int_lsp( + const int16_t L_frame, /* i : length of the frame */ + const float lsp_old[], /* i : LSPs from past frame */ + const float lsp_new[], /* i : LSPs from present frame */ + float *Aq, /* o : LP coefficients in both subframes */ + const int16_t m, /* i : order of LP filter */ + const float *int_coeffs, /* i : interpolation coefficients */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +); + +void int_lsp4( + const int16_t L_frame, /* i : length of the frame */ + const float lsp_old[], /* i : previous end-frame LSPs */ + const float lsp_mid[], /* i : current mid-frame LSPs */ + const float lsp_new[], /* i : current end-frame LSPs */ + float *Aq, /* o : LP coefficients in both subframes */ + const int16_t m, /* i : order of LP filter */ + int16_t relax_prev_lsf_interp /* i : relax prev frame lsf interp after erasure */ +); + +/*! r: length of output */ +int16_t modify_Fs( + const float sigIn[], /* i : signal to decimate */ + const int16_t lg, /* i : length of input */ + const int32_t fin, /* i : frequency of input */ + float sigOut[], /* o : decimated signal */ + const int32_t fout, /* i : frequency of output */ + float mem[], /* i/o: filter memory */ + const int16_t nblp /* i : flag indicating if NB low-pass is applied */ +); + +void pred_lt4( + const float excI[], /* i : input excitation buffer */ + float excO[], /* o : output excitation buffer */ + const int16_t T0, /* i : integer pitch lag */ + int16_t frac, /* i : fraction of lag */ + const int16_t L_subfr, /* i : subframe size */ + const float *win, /* i : interpolation window */ + const int16_t nb_coef, /* i : nb of filter coef */ + const int16_t up_sample /* i : up_sample */ +); + +void pred_lt4_tc( + float exc[], /* i : excitation buffer */ + const int16_t T0, /* i : integer pitch lag */ + int16_t frac, /* i : fraction of lag */ + const float *win, /* i : interpolation window */ + const int16_t imp_pos, /* i : glottal impulse position */ + const int16_t i_subfr /* i : subframe index */ +); + +void residu( + const float *a, /* i : LP filter coefficients */ + const int16_t m, /* i : order of LP filter */ + const float *x, /* i : input signal (usually speech) */ + float *y, /* o : output signal (usually residual) */ + const int16_t l /* i : size of filtering */ +); + +void calc_residu( + const float *speech, /* i : weighted speech signal */ + float *res, /* o : residual signal */ + const float *p_Aq, /* i : quantized LP filter coefficients */ + const int16_t L_frame /* i : size of frame */ +); + +/*! r: impulse response energy */ +float enr_1_Az( + const float Aq[], /* i : LP filter coefs */ + const int16_t len /* i : impulse response length */ +); + +void Es_pred_enc( + float *Es_pred, /* o : predicited scaled innovation energy */ + int16_t *Es_pred_indice, /* o : indice corresponding to above parameter */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr, /* i : length of the subframe */ + const float *res, /* i : residual signal */ + const float *voicing, /* i : normal. correlattion in three 1/2frames */ + const int16_t nb_bits, /* i : allocated number of bits */ + const int16_t no_ltp /* i : no_ltp flag */ +); + +void create_offset( + UWord32 *offset_scale1, + UWord32 *offset_scale2, + const int16_t mode, + const int16_t prediction_flag ); + +float mslvq( + float *pTmp, /* i : M-dimensional input vector */ + float *quant, /* o : quantized vector */ + float *cv_out, /* o : corresponding 8-dim lattice codevectors (without the scaling) */ + int16_t *idx_lead, /* o : leader index for each 8-dim subvector */ + int16_t *idx_scale, /* o : scale index for each subvector */ + const float *w, /* i : weights for LSF quantization */ + const int16_t mode, /* i : number indicating the coding mode */ + const int16_t mode_glb, /* i : LVQ coding mode */ + const int16_t pred_flag /* i : prediction flag (0: safety net, 1 - predictive )*/ +); + +void permute( + float *pTmp1, /* i/o: vector whose components are to be permuted */ + const int16_t *perm /* i : permutation info (indexes that should be interchanged), max two perms */ +); + +void sort_desc_ind( + float *s, + const int16_t len, + int16_t *ind ); + +float mslvq_cng( + int16_t idx_cv, /* i : index of cv from previous stage */ + float *pTmp, /* i : 16 dimensional input vector */ + float *quant, /* o : quantized vector */ + float *cv_out, /* o : corresponding 8-dim lattice codevectors (without the scaling) */ + int16_t *idx_lead, /* o : leader index for each 8-dim subvector */ + int16_t *idx_scale, /* o : scale index for each subvector */ + const float *w /* i : weights for LSF quantization */ +); + +int16_t deindex_lvq_cng( + int16_t *index, /* i : index to be decoded, as an array of 3 short */ + float *x_lvq, /* o : decoded codevector */ + const int16_t idx_cv, /* i : relative mode_lvq, wrt START_CNG */ + const int16_t no_bits /* i : number of bits for lattice */ +); + +void multiply32_32_64( + UWord32 x, /* i : operand 1 */ + UWord32 y, /* i : operand 2 */ + UWord32 *res /* o : result as array of two uint32 */ +); + +int16_t deindex_lvq( + int16_t *index, /* i : index to be decoded, as an array of 3 short */ + float *x_lvq, /* o : decoded codevector */ + const int16_t mode, /* i : LVQ coding mode (select scales & no_lead ), or idx_cv */ + const int16_t sf_flag, /* i : safety net flag */ + const int16_t no_bits /* i : number of bits for lattice */ +); + +int16_t vq_dec_lvq( + int16_t sf_flag, /* i : safety net flag */ + float x[], /* o : Decoded vector */ + int16_t indices[], /* i : Indices */ + const int16_t stages, /* i : Number of stages */ + const int16_t N, /* i : Vector dimension */ + const int16_t mode, /* i : lvq coding type */ + const int16_t no_bits /* i : no. bits for lattice */ +); + +void index_lvq( + float *quant, /* i : codevector to be indexed (2 8-dim subvectors)*/ + int16_t *idx_lead, /* i : leader class index for each subvector */ + int16_t *idx_scale, /* i : scale index for each subvector */ + const int16_t mode, /* i : integer signalling the quantizer structure for the current bitrate */ + int16_t *index, /* o : encoded index (represented on 3 short each with 15 bits ) */ + const int16_t prediction_flag /* i : predictive mode or not */ +); + +int16_t qlsf_ARSN_tcvq_Dec_16k( + float *y, /* o : Quantized LSF vector */ + int16_t *indice, /* i : Indices */ + const int16_t nBits /* i : number of bits */ +); + +int16_t lsf_bctcvq_encprm( + BSTR_ENC_HANDLE hBstr, + const int16_t *param_lpc, + const int16_t *bits_param_lpc, + const int16_t no_indices ); + +int16_t lsf_bctcvq_decprm( + Decoder_State *st, + int16_t *param_lpc ); + +ivas_error lsf_allocate( + const int16_t nBits, /* i : Number of bits to use for quantization */ + const int16_t framemode, /* i : ISF quantizer mode */ + const int16_t framemode_p, /* i : ISF quantizer mode */ + int16_t *stages0, /* o : Number of stages for safety-net quantizer */ + int16_t *stages1, /* o : Number of stages for predictive quantizer */ + int16_t levels0[], /* o : Number of vectors for each stage for SFNET */ + int16_t levels1[], /* o : Number of vectors for each stage for pred */ + int16_t bits0[], /* o : Number of bits for each stage safety net */ + int16_t bits1[] /* o : Number of bits for each stage predictive */ +); + +void disf_2s_36b( + int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ + float *isf_q, /* o : quantized ISFs in the cosine domain */ + float *mem_AR, /* i/o: quantizer memory for AR model */ + float *mem_MA /* i/o: quantizer memory for MA model */ +); + +void disf_2s_46b( + int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ + float *isf_q, /* o : quantized ISFs in the cosine domain */ + float *mem_AR, /* o : quantizer memory for AR model */ + float *mem_MA /* i/o: quantizer memory for MA model */ +); + +void re8_k2y( + const int16_t *k, /* i : Voronoi index k[0..7] */ + const int16_t m, /* i : Voronoi modulo (m = 2^r = 1<=2) */ + int16_t *y /* o : 8-dimensional point y[0..7] in RE8 */ +); + +void re8_PPV( + const float x[], /* i : point in R^8 */ + int16_t y[] /* o : point in RE8 (8-dimensional integer vector) */ +); + +void enhancer( + const int16_t codec_mode, /* i : flag indicating Codec Mode */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t cbk_index, /* i : */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t coder_type, /* i : coding type */ + const int16_t L_frame, /* i : frame size */ + const float voice_fac, /* i : subframe voicing estimation */ + const float stab_fac, /* i : LP filter stablility measure */ + const float norm_gain_code, /* i : normalized innovative cb. gain */ + const float gain_inov, /* i : gain of the unscaled innovation */ + float *gc_threshold, /* i/o: code threshold */ + float *code, /* i/o: innovation */ + float *exc2, /* i/o: adapt. excitation/total exc. */ + const float gain_pit, /* i : Quantized pitch gain */ + float *dispMem /* i/o: Phase dispersion algorithm memory */ +); + +void phase_dispersion( + const float gain_code, /* i : gain of code */ + const float gain_pit, /* i : gain of pitch */ + float code[], /* i/o: code vector */ + const int16_t mode, /* i : level, 0=hi, 1=lo, 2=off */ + float disp_mem[] /* i/o: static memory (size = 8) */ +); + +void re8_vor( + int16_t y[], /* i : point in RE8 (8-dimensional integer vector) */ + int16_t *n, /* o : codebook number n=0,2,3,4,... (scalar integer) */ + int16_t k[], /* o : Voronoi index (integer vector of dimension 8) used only if n>4 */ + int16_t c[], /* o : codevector in Q0, Q2, Q3, or Q4 if n<=4, y=c */ + int16_t *ka /* o : identifier of absolute leader (needed to index c)*/ +); + +void edct( + const float *x, /* i : input signal */ + float *y, /* o : output transform */ + const int16_t length, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void edst( + const float *x, /* i : input signal */ + float *y, /* o : output transform */ + const int16_t length, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void edxt( + const float *x, /* i : input signal */ + float *y, /* o : output transform */ + const int16_t length, /* i : length */ + const uint16_t kernelType, /* i : kernel type (0 - 3) */ + const uint16_t synthesis /* i : nonzero for inverse */ +); + +void iedct_short( + const float *in, /* i : input vector */ + float *out, /* o : output vector */ + const int16_t segment_length, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void DoRTFT480( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFT320( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFT160( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFT128( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFT120( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFT80( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFT20( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFT40( + float *x, /* i/o: real part of input and output data */ + float *y /* i/o: imaginary part of input and output data */ +); + +void DoRTFTn( + float *x, /* i/o: real part of input and output data */ + float *y, /* i/o: imaginary part of input and output data */ + const int16_t n /* i : size of the FFT n=(2^k) up to 1024 */ +); + +void BASOP_cfft( + Word32 *re, /* i/o: real part */ + Word32 *im, /* i/o: imag part */ + Word16 s, /* i : stride real and imag part */ + Word16 *scale /* i : scalefactor */ +); + +void fft( + float *re, /* i/o: real part */ + float *im, /* i/o: imag part */ + const int16_t length, /* i : length of fft */ + const int16_t s /* i : sign */ +); + +void rfft( + float *x, /* i/o: values */ + const float *w, /* i : window */ + const int16_t length, /* i : length of fft */ + const int16_t isign /* i : sign */ +); + +void sinq( + const float tmp, /* i : sinus factor cos(tmp*i+phi) */ + const float phi, /* i : sinus phase cos(tmp*i+phi) */ + const int16_t N, /* i : size of output */ + float x[] /* o : output vector */ +); + +void edct2( + const int16_t n, + const int16_t isgn, + float *in, + float *a, + const int16_t *ip, + const float *w ); + +void stat_noise_uv_mod( + const int16_t coder_type, /* i : coder type */ + float noisiness, /* i : noisiness parameter */ + const float *const lsp_old, /* i : old LSP vector at 4th sfr */ + const float *const lsp_new, /* i : LSP vector at 4th sfr */ + const float *const lsp_mid, /* i : LSP vector at 2nd sfr */ + float *Aq, /* o : A(z) quantized for the 4 subframes */ + float *exc2, /* o : excitation buffer */ + const int16_t bfi, /* i : bad frame indicator */ + float *ge_sm, /* i/o: smoothed excitation gain */ + int16_t *uv_count, /* i/o: unvoiced counter */ + int16_t *act_count, /* i/o: activation counter */ + float lspold_s[], /* i/o: old LSP */ + int16_t *noimix_seed, /* i/o: mixture seed */ + float *st_min_alpha, /* i/o: minimum alpha */ + float *exc_pe, /* i/o: memory of the preemphasis filter */ + const int32_t bitrate, /* i : core bitrate */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void pre_echo_att( + float *Last_frame_ener, /* i/o: Energy of the last frame */ + float *exc, /* i/o: Excitation of the current frame */ + const int16_t attack_flag, /* i : attack flag (GSC or TC) */ + const int16_t last_coder_type, /* i : Last coder type */ + const int16_t L_frame /* i : frame length */ +); + +void limit_band_noise_level_calc( + const int16_t *wnorm, /* i : reordered norm of sub-vectors */ + int16_t *limit, /* o : highest band of bit allocation */ + const int32_t core_brate, /* i : core bitrate */ + float *noise_level /* o : noise level */ +); + +/*! r: hqswb_clas */ +int16_t peak_avrg_ratio( + const int32_t total_brate, /* i : total bitrate */ + const float *input_hi, /* i : input signal */ + const int16_t N, /* i : number of coefficients */ + int16_t *mode_count, /* i/o: HQ_HARMONIC mode count */ + int16_t *mode_count1 /* i/o: HQ_NORMAL mode count */ +); + +/*! r: Number of coefficients in nf codebook */ +int16_t build_nf_codebook( + const int16_t flag_32K_env_ho, /* i : Envelope attenuation hangover flag */ + const float *coeff, /* i : Coded spectral coefficients */ + const int16_t *sfm_start, /* i : Subband start indices */ + const int16_t *sfmsize, /* i : Subband widths */ + const int16_t *sfm_end, /* i : Subband end indices */ + const int16_t nb_sfm, /* i : Last coded band */ + const int16_t *R, /* i : Per-band bit allocation */ + float *CodeBook, /* o : Noise-fill codebook */ + float *CodeBook_mod /* o : Densified noise-fill codebook */ +); + +void apply_noisefill_HQ( + const int16_t *R, /* i : bit allocation */ + const int16_t length, /* i : input frame length */ + const int16_t flag_32K_env_ho, /* i : envelope stability hangover flag */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t last_sfm, /* i : last coded subband */ + const float *CodeBook, /* i : Noise-fill codebook */ + const float *CodeBook_mod, /* i : Densified noise-fill codebook */ + const int16_t cb_size, /* i : Codebook length */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfmsize, /* i : Subband band width */ + float *coeff /* i/o: coded/noisefilled spectrum */ +); + +void harm_bwe_fine( + const int16_t *R, /* i : bit allocation */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t high_sfm, /* i : higher transition band to BWE */ + const int16_t num_sfm, /* i : total number of bands */ + const int16_t *norm, /* i : quantization indices for norms */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + float *coeff, /* i/o: coded/noisefilled normalized spectrum */ + float *coeff_out, /* o : coded/noisefilled spectrum */ + float *coeff_fine /* o : BWE fine structure */ +); + +void hvq_bwe_fine( + const int16_t last_sfm, /* i : last coded subband */ + const int16_t num_sfm, /* i : total number of bands */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *peak_idx, /* i : Peak index */ + const int16_t Npeaks, /* i : Number of peaks */ + int16_t *peak_pos, /* i/o: Peak positions */ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + float *coeff, /* i/o: coded/noisefilled normalized spectrum */ + int16_t *bwe_peaks, /* o : Positions of peaks in BWE */ + float *coeff_fine /* o : HVQ BWE fine structure */ +); + +void hq_fold_bwe( + const int16_t last_sfm, /* i : last coded subband */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t num_sfm, /* i : Number of subbands */ + float *coeff /* i/o: coded/noisefilled normalized spectrum */ +); + +void apply_nf_gain( + const int16_t nf_idx, /* i : noise fill gain index */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t *R, /* i : bit allocation */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + float *coeff /* i/o: coded/noisefilled normalized spectrum */ + +); + +void hq_generic_fine( + float *coeff, /* i : coded/noisefilled normalized spectrum */ + const int16_t last_sfm, /* i : Last coded band */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *coeff_out1 /* o : HQ GENERIC input */ +); + +void harm_bwe( + const float *coeff_fine, /* i : fine structure for BWE */ + const float *coeff, /* i : coded/noisefilled normalized spectrum */ + const int16_t num_sfm, /* i : Number of subbands */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t high_sfm, /* i : higher transition band to BWE */ + const int16_t *R, /* i : bit allocation */ + const int16_t prev_hq_mode, /* i : previous hq mode */ + int16_t *norm, /* i/o: quantization indices for norms */ + float *noise_level, /* i/o: noise levels for harmonic modes */ + float *prev_noise_level, /* i/o: noise factor in previous frame */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *coeff_out, /* o : coded/noisefilled spectrum */ + const int16_t element_mode /* i : element mode */ +); + +void hvq_bwe( + const float *coeff, /* i : coded/noisefilled spectrum */ + const float *coeff_fine, /* i : BWE fine structure */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfm_len, /* i : Subband length */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t prev_hq_mode, /* i : previous hq mode */ + const int16_t *bwe_peaks, /* i : HVQ bwe peaks */ + const int16_t bin_th, /* i : HVQ transition bin */ + const int16_t num_sfm, /* i : Number of bands */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t *R, /* i : Bit allocation */ + int16_t *norm, /* i/o: quantization indices for norms */ + float *noise_level, /* i/o: noise levels for harmonic modes */ + float *prev_noise_level, /* i/o: noise factor in previous frame */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *coeff_out /* o : coded/noisefilled spectrum */ +); + +void hvq_concat_bands( + const int16_t pvq_bands, /* i : Number of bands in concatenated PVQ target */ + const int16_t *sel_bnds, /* i : Array of selected high bands */ + const int16_t n_sel_bnds, /* i : Number of selected high bands */ + int16_t *hvq_band_start, /* o : Band start indices */ + int16_t *hvq_band_width, /* o : Band widths */ + int16_t *hvq_band_end /* o : Band end indices */ +); + +void hq_generic_bwe( + const int16_t HQ_mode, /* i : HQ mode */ + float *coeff_out1, /* i/o: BWE input & temporary buffer */ + const float *hq_generic_fenv, /* i : SWB frequency envelopes */ + float *coeff_out, /* o : SWB signal in MDCT domain */ + const int16_t hq_generic_offset, /* i : frequency offset for representing hq generic*/ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + const int16_t hq_generic_exc_clas, /* i : hq generic hf excitation class */ + const int16_t *sfm_end, /* i : End of bands */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t num_env_bands, /* i : Number of coded envelope bands */ + const int16_t *R /* i : Bit allocation */ +); + +void logqnorm_2( + const float *env_fl, /* o : index */ + const int16_t L, /* i : codebook length */ + const int16_t n_env_band, /* i : sub-vector size */ + const int16_t nb_sfm, /* i : sub-vector size */ + int16_t *ynrm, /* o : norm indices */ + int16_t *normqlg2, /* o : quantized norm values */ + const float *thren /* i : quantization thresholds */ +); + +void map_hq_generic_fenv_norm( + const int16_t hqswb_clas, /* i : signal classification flag */ + const float *hq_generic_fenv, /* i : HQ GENERIC envelope */ + int16_t *ynrm, /* o : high band norm indices */ + int16_t *normqlg2, /* o : high band norm values */ + const int16_t num_env_bands, /* i : Number coded envelope bands */ + const int16_t nb_sfm, /* i : Number of envelope bands */ + const int16_t hq_generic_offset /* i : Freq offset for HQ GENERIC */ +); + +/*! r: Number of bits consumed for the delta coding */ +int16_t calc_nor_delta_hf( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *t_audio, /* i : transform-domain coefficients */ + int16_t *ynrm, /* i/o: norm indices */ + int16_t *Rsubband, /* i/o: sub-band bit allocation */ + const int16_t num_env_bands, /* i : Number coded envelope bands */ + const int16_t nb_sfm, /* i : Number of envelope bands */ + const int16_t *sfmsize, /* i : band length */ + const int16_t *sfm_start, /* i : Start index of bands */ + const int16_t core_sfm /* i : index of the end band for core */ +); + +/*! r: Number of bits consumed for the delta coding */ +int16_t get_nor_delta_hf( + Decoder_State *st, /* i/o: Decoder state */ + int16_t *ynrm, /* i/o: norm indices */ + int16_t *Rsubband, /* i/o: sub-band bit allocation */ + const int16_t num_env_bands, /* i : Number coded envelope bands */ + const int16_t nb_sfm, /* i : Number of envelope bands */ + const int16_t core_sfm ); /* i : index of the end band for core */ + +void hq_wb_nf_bwe( + const float *coeff, /* i : coded/noisefilled normal. spectrum */ + const int16_t is_transient, /* i : is transient flag */ + const int16_t prev_bfi, /* i : previous bad frame indicator */ + const float *normq_v, /* i : norms */ + const int16_t num_sfm, /* i : Number of subbands */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfmsize, /* i : Subband band width */ + const int16_t last_sfm, /* i : last coded subband */ + const int16_t *R, /* i : bit allocation */ + const int16_t prev_is_transient, /* i : previous transient flag */ + float *prev_normq, /* i/o: previous norms */ + float *prev_env, /* i/o: previous noise envelopes */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + float *prev_coeff_out, /* i/o: decoded spectrum in previous frame */ + int16_t *prev_R, /* i/o: previous frame bit allocation info. */ + float *coeff_out /* o : coded/noisefilled spectrum */ +); + +/*! r: Number of bits */ +int16_t encode_envelope_indices( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t num_sfm, /* i : Number of subbands */ + const int16_t numnrmibits, /* i : Bitrate of fall-back coding mode */ + int16_t *difidx, /* i/o: Diff indices/encoded diff indices */ + int16_t *LCmode, /* o : Coding mode */ + const int16_t flag_pack, /* i : indicator of packing or estimating bits */ + const int16_t flag_HQ2, /* i : indicator of HQ2 core */ + const int16_t is_transient /* i : transient flag */ +); + +void diff_envelope_coding( + const int16_t is_transient, /* i : transient indicator */ + const int16_t num_env_bands, /* i : number of envelope bands to code */ + const int16_t start_norm, /* i : start of envelope coding */ + int16_t *ynrm, /* i/o: quantization indices for norms */ + int16_t *normqlg2, /* i/o: quantized norms */ + int16_t *difidx /* o : differential code */ +); + +/*! r: Number of bits */ +int16_t decode_envelope_indices( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t start_norm, /* i : First SDE encoded norm */ + const int16_t num_sfm, /* i : Number of norms */ + const int16_t numnrmibits, /* i : Bitrate of fall-back coding mode */ + int16_t *ynrm, /* o : Decoded norm indices */ + const int16_t flag_HQ2, /* i : indicator of HQ2 core */ + const int16_t is_transient /* i : transient flag */ +); + +/*! r: Number of bits */ +void dequantize_norms( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t start_norm, /* i : First SDE encoded norm */ + const int16_t num_sfm, /* i : Number of norms */ + const int16_t is_transient, /* i : Transient flag */ + int16_t *ynrm, /* o : Decoded norm indices */ + int16_t *normqlg2 /* o : Log2 of decoded norms */ +); + +void hq_configure( + const int16_t length, /* i : Frame length */ + const int16_t hqswb_clas, /* i : HQ SWB class */ + const int32_t core_brate, /* i : core bitrate */ + int16_t *num_sfm, /* o : Total number of subbands */ + int16_t *nb_sfm, /* o : Total number of coded bands */ + int16_t *start_norm, /* o : First norm to be SDE encoded */ + int16_t *num_sde_norm, /* o : Number of norms for SDE encoding */ + int16_t *numnrmibits, /* o : Number of bits in fall-back norm encoding */ + int16_t *hq_generic_offset, /* o : Freq offset for HQ GENERIC */ + int16_t *sfmsize, /* o : Subband bandwidths */ + int16_t *sfm_start, /* o : Subband start coefficients */ + int16_t *sfm_end /* o : Subband end coefficients */ +); + +/*! r: Consumed bits */ +int16_t hvq_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t bwidth, /* i : audio bandwidth */ +#ifdef DEBUGGING + const int16_t idchan, /* i : channel ID */ +#endif + const int32_t core_brate, /* i : core bitrate */ + const int16_t hvq_bits, /* i : HVQ bit budget */ + const int16_t Npeaks, /* i : Number of peaks */ + const int16_t *ynrm, /* i : Envelope coefficients */ + int16_t *R, /* i/o: Bit allocation/updated bit allocation */ + int16_t *peaks, /* i/o: Peak pos. / Encoded peak pos. */ + float *nf_gains, /* i/o: Noise fill gains / Quant. nf gains */ + float *noise_level, /* o : Quantized noise level */ + const float *pe_gains, /* i : Peak gains */ + const float *coefs, /* i : spectrum coefficients */ + float *coefs_out /* o : encoded spectrum coefficients */ +); + +/*! r: Consumed bits */ +int16_t hq_classifier_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t length, /* i : Frame length */ + const float *coefs, /* i : Spectral coefficients */ + const int16_t is_transient, /* i : Transient flag */ + int16_t *Npeaks, /* o : Number of identified peaks */ + int16_t *peaks, /* o : Peak indices */ + float *pe_gains, /* o : Peak gains */ + float *nf_gains, /* o : Noise-fill gains */ + int16_t *hqswb_clas /* o : HQ class */ +); + +/*! r: Consumed bits */ +int16_t hq_classifier_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t length, /* i : Frame length */ + int16_t *is_transient, /* o : Transient flag */ + int16_t *hqswb_clas /* o : HQ class */ +); + +void hq_bit_allocation( + const int32_t core_brate, /* i : Core bitrate */ + const int16_t length, /* i : Frame length */ + const int16_t hqswb_clas, /* i : HQ class */ + int16_t *num_bits, /* i/o: Remaining bit budget */ + const int16_t *normqlg2, /* i : Quantized norms */ + const int16_t nb_sfm, /* i : Number sub bands to be encoded */ + const int16_t *sfmsize, /* i : Sub band bandwidths */ + float *noise_level, /* o : HVQ noise level */ + int16_t *R, /* o : Bit allocation per sub band */ + int16_t *Rsubband, /* o : Fractional bit allocation (Q3) */ + int16_t *sum, /* o : Sum of allocated shape bits */ + int16_t *core_sfm, /* o : Last coded band in core */ + const int16_t num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE */ +); + +void enforce_zero_for_min_envelope( + const int16_t hqswb_clas, /* i : HQ coding class */ + const int16_t *ynrm, /* i : Envelope indices */ + float *coefsq, /* i/o: Quantized spectrum/zeroed spectrum */ + int16_t nb_sfm, /* i : Number of coded sub bands */ + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end /* i : Sub band end indices */ +); + +/*! r: Number of assigned gain bits */ +int16_t assign_gain_bits( + const int16_t core, /* i : HQ core */ + const int16_t BANDS, /* i : Number of bands */ + const int16_t *band_width, /* i : Sub band bandwidth */ + int16_t *Rk, /* i/o: Bit allocation/Adjusted bit alloc. (Q3) */ + int16_t *gain_bits_array, /* o : Assigned gain bits */ + int16_t *Rcalc /* o : Bit budget for shape quantizer (Q3) */ +); + +void apply_envelope( + const float *coeff, /* i/o: Coded/noisefilled normalized spectrum */ + const int16_t *norm, /* i : Envelope */ + const float *norm_adj, /* i : Envelope adjustment */ + const int16_t num_sfm, /* i : Total number of bands */ + const int16_t last_sfm, /* i : Last coded band */ + const int16_t HQ_mode, /* i : HQ mode */ + const int16_t length, /* i : Frame length */ + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end, /* i : Sub band end indices */ + float *normq_v, /* o : Envelope with adjustment */ + float *coeff_out, /* o : coded/noisefilled spectrum */ + float *coeff_out1 /* o : noisefilled spectrum for HQ SWB BWE */ +); + +void apply_envelope_enc( + float *coeff, /* i/o: Normalized/scaled normalized spectrum */ + const int16_t *norm, /* i : Envelope */ + const int16_t num_sfm, /* i : Total number of bands */ + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end /* i : Sub band end indices */ +); + +/*! r: Leading_sign_index, index, size, k_val */ +PvqEntry mpvq_encode_vec( + const int16_t *vec_in, /* i : Signed pulse train */ + const int16_t dim_in, /* i : Dimension */ + int16_t k_val_local /* i/o : Num unit pulses */ +); + +/*! r: Size, dim, k_val */ +PvqEntry get_size_mpvq_calc_offset( + const int16_t dim_in, /* i : Dimension */ + const int16_t k_val_in, /* i : Num unit pulses */ + uint32_t *h_mem /* o : Offsets */ +); + +void mpvq_decode_vec( + const PvqEntry *entry, /* i : Sign_ind, index, dim, k_val */ + uint32_t *h_mem, /* i : A/U offsets */ + int16_t *vec_out /* o : Pulse train */ +); + +/*! r: Multiplication result */ +uint32_t UMult_32_32( + const uint32_t UL_var1, /* i : factor 1 */ + const uint32_t UL_var2 /* i : factor 2 */ +); + +/*! r: inverse */ +uint32_t UL_inverse( + const uint32_t UL_val, /* i : input value Q_exp */ + int16_t *exp /* i/o: input exp / result exp */ +); + +/*! r: ratio */ +Word16 ratio( + const Word32 numer, /* i : numerator */ + const Word32 denom, /* i : denominator */ + Word16 *expo /* i/o: input exp / result exp */ +); + +/*! r: Angle between 0 and EVS_PI/2 radian (Q14) */ +Word16 atan2_fx( + const Word32 y, /* i : near side (Argument must be positive) (Q15) */ + const Word32 x /* i : opposite side (Q15) */ +); + +void pvq_encode_frame( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *coefs_norm, /* i : normalized coefficients to encode */ + float *coefs_quant, /* o : quantized coefficients */ + float *gopt, /* o : optimal shape gains */ + int16_t *npulses, /* o : number of pulses per band */ + int16_t *pulse_vector, /* o : non-normalized pulse shapes */ + const int16_t *sfm_start, /* i : indices of first coefficients in the bands */ + const int16_t *sfm_end, /* i : indices of last coefficients in the bands */ + const int16_t *sfmsize, /* i : band sizes */ + const int16_t nb_sfm, /* i : total number of bands */ + const int16_t *R, /* i : bitallocation per band (Q3) */ + const int16_t pvq_bits, /* i : number of bits avaiable */ + const int16_t core /* i : core */ +); + +void pvq_decode_frame( + Decoder_State *st, /* i/o: Decoder state */ + float *coefs_quant, /* o : quantized coefficients */ + int16_t *npulses, /* o : number of pulses per band */ + int16_t *pulse_vector, /* o : non-normalized pulse shapes */ + const int16_t *sfm_start, /* i : indices of first coeffs in the bands */ + const int16_t *sfm_end, /* i : indices of last coeffs in the bands */ + const int16_t *sfmsize, /* i : band sizes */ + const int16_t nb_sfm, /* i : total number of bands */ + const int16_t *R, /* i : bitallocation per band (Q3) */ + const int16_t pvq_bits, /* i : number of bits avaiable */ + const int16_t core /* i : core */ +); + +void srt_vec_ind( + const int16_t *linear, /* linear input */ + int16_t *srt, /* sorted output */ + int16_t *I, /* index for sorted output */ + const int16_t length ); + +void srt_vec_ind_f( + const float *linear, /* linear input */ + float *srt, /* sorted output */ + int16_t *I, /* index for sorted output */ + const int16_t length /* length of vector */ +); + +/*! r: floor(sqrt(input)) */ +uint32_t floor_sqrt_exact( + const uint32_t input /* i : unsigned input [0.. UINT_MAX/4] */ +); + +void fine_gain_quant( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t *ord, /* i : Indices for energy order */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t *gain_bits, /* i : Gain adjustment bits per sub band */ + float *fg_pred, /* i/o: Predicted gains / Corrected gains */ + const float *gopt /* i : Optimal gains */ +); + +void apply_gain( + const int16_t *ord, /* i : Indices for energy order */ + const int16_t *band_start, /* i : Sub band start indices */ + const int16_t *band_end, /* i : Sub band end indices */ + const int16_t num_sfm, /* i : Number of bands */ + const float *gains, /* i : Band gain vector */ + float *xq /* i/o: float synthesis / gain adjusted synth */ +); + +void fine_gain_pred( + const int16_t *sfm_start, /* i : Sub band start indices */ + const int16_t *sfm_end, /* i : Sub band end indices */ + const int16_t *sfm_size, /* i : Sub band bandwidths */ + const int16_t *i_sort, /* i : Energy sorting indices */ + const int16_t *K, /* i : Number of pulses per band */ + const int16_t *maxpulse, /* i : Maximum pulse per band */ + const int16_t *R, /* i : Bits per sub band (Q3) */ + const int16_t num_sfm, /* i : Number of sub bands */ + float *xq, /* i/o: Quantized vector /quantized vector with finegain adj */ + int16_t *y, /* i/o: Quantized vector */ + float *fg_pred, /* o : Predicted fine gains */ + const int16_t core /* i : Core */ +); + +void fine_gain_dec( + Decoder_State *st, /* i/o: Decoder state struct */ + const int16_t *ord, /* i : Indices for energy order */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t *gain_bits, /* i : Gain adjustment bits per sub band */ + float *fg_pred /* i/o: Predicted gains / Corrected gains */ +); + +void get_max_pulses( + const int16_t *band_start, /* i : Sub band start indices */ + const int16_t *band_end, /* i : Sub band end indices */ + const int16_t *k_sort, /* i : Indices for sorting by energy */ + const int16_t *npulses, /* i : Pulses per sub band */ + const int16_t BANDS, /* i : Number of bands */ + int16_t *inp_vector, /* i/o: Encoded shape vectors */ + int16_t *maxpulse /* o : Maximum pulse height per band */ +); + +Word32 ar_div( + Word32 num, + Word32 denum ); + +void ar_encoder_start( + PARCODEC arInst, + TCQ_PBITSTREAM bsInst, + int16_t max_bits ); + +void ar_decoder_start( + PARCODEC arInst, + TCQ_PBITSTREAM bsInst ); + +void ar_encoder_done( + PARCODEC arInst ); + +void ar_decoder_done( + PARCODEC arInst ); + +float GetISCScale( + float *quants, + int16_t size, + Word32 bits_fx, + float *magn, + float *qscale, + Word32 *surplus_fx, + float *pulses, + int32_t *savedstates, + int16_t noTCQ, + int32_t *nzpout, + int16_t *bcount, + float *abuffer, + float *mbuffer, + float *sbuffer ); + +Word32 Mult_32_16( + Word32 a, + Word16 b ); + +Word32 Mult_32_32( + Word32 a, + Word32 b ); + +void decode_position_ari_fx( + PARCODEC pardec, + Word16 size, + Word16 npulses, + Word16 *nz, + Word32 *position ); + +void decode_magnitude_usq_fx( + ARCODEC *pardec, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *positions, + Word32 *out ); + +void decode_mangitude_tcq_fx( + ARCODEC *pardec, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *positions, + Word32 *out, + Word32 *surplus_fx ); + +void decode_signs_fx( + ARCODEC *pardec, + Word16 size, + Word32 *out ); + +void srt_vec_ind_fx( + const Word32 *linear, + Word32 *srt, + Word16 *I, + Word16 length ); + +Word16 GetScale_fx( + Word16 blen, + Word32 bits_fx /*Q16*/, + Word32 *surplus_fx /*Q16*/ +); + +void bit_allocation_second_fx( + Word32 *Rk, + Word32 *Rk_sort, + Word16 BANDS, + const Word16 *band_width, + Word16 *k_sort, + Word16 *k_num, + const Word16 *p2a_flags, + const Word16 p2a_bands, + const Word16 *last_bitalloc, + const Word16 input_frame ); + +Word32 encode_position_ari_fx( + PARCODEC parenc, + float *quants, + Word16 size, + Word32 *est_bits_frame_fx ); + +Word32 encode_magnitude_tcq_fx( + ARCODEC *parenc, + float *magn_fx, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *savedstates, + Word32 *est_frame_bits_fx ); + +Word32 encode_signs_fx( + ARCODEC *parenc, + float *magn, + Word16 size, + Word16 npos, + Word32 *est_frame_bits_fx ); + +Word32 encode_magnitude_usq_fx( + ARCODEC *parenc, + float *magn_fx, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *est_frame_bits_fx ); + +ivas_error tcq_core_LR_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ +#ifdef DEBUGGING + const int16_t idchan, +#endif + int32_t inp_vector[], + const float coefs_norm[], + float coefs_quant[], + const int16_t bit_budget, /* number of bits */ + const int16_t nb_sfm, + const int16_t *sfm_start, + const int16_t *sfm_end, + const int16_t *sfmsize, + Word32 *Rk_fx, + int16_t *npulses, + int16_t *k_sort, + const int16_t *p2a_flags, + const int16_t p2a_bands, + const int16_t *last_bitalloc, + const int16_t input_frame, + const int16_t adjustFlag, + const int16_t is_transient ); + +void tcq_core_LR_dec( + Decoder_State *st, + int32_t *inp_vector, + const int16_t bit_budget, + const int16_t bands, + const int16_t *band_start, + const int16_t *band_width, + Word32 *Rk_fx, + int16_t npulses[], + int16_t *k_sort, + const int16_t *p2a_flags, + const int16_t p2a_bands, + const int16_t *last_bitalloc, + const int16_t input_frame, + const int16_t adjustFlag, + const int16_t *is_transient ); + +void InitLSBTCQ( + int16_t *bcount ); + +void TCQLSB( + int16_t bcount, + float *abuffer, + float *mbuffer, + float *sbuffer, + int16_t *dpath ); + +void RestoreTCQ( + float *magn, + int16_t size, + int16_t *bcount, + float *mbuffer ); + +void SaveTCQdata( + PARCODEC arInst, + int16_t *dpath, + int16_t bcount ); + +void LoadTCQdata( + PARCODEC arInst, + int16_t *dpath, + int16_t bcount ); + +void RestoreTCQdec( + int32_t *magn, + int16_t size, + int16_t *bcount, + float *mbuffer ); + +void TCQLSBdec( + int16_t *dpath, + float *mbuffer, + int16_t bcount ); + +void bit_allocation_second_fx( + Word32 *Rk, + Word32 *Rk_sort, + Word16 BANDS, + const Word16 *band_width, + Word16 *k_sort, + Word16 *k_num, + const Word16 *p2a_flags, + const Word16 p2a_bands, + const Word16 *last_bitalloc, + const Word16 input_frame ); + +void io_ini_enc( + const int32_t argc, /* i : command line arguments number */ + char *argv[], /* i : command line arguments */ + FILE **f_input, /* o : input signal file */ + FILE **f_stream, /* o : output bitstream file */ + FILE **f_rate, /* o : bitrate switching profile (0 if N/A) */ + FILE **f_bwidth, /* o : bandwidth switching profile (0 if N/A) */ + FILE **f_metadata, /* o : metadata files (NULL if N/A) */ +#ifdef DEBUGGING + FILE **f_force, /* o : force switching profile (0 if N/A) */ +#endif + FILE **f_rf, /* o : channel aware configuration file */ + int16_t *quietMode, /* o : limit printouts */ + int16_t *noDelayCmp, /* o : turn off delay compensation */ + Encoder_Struct *st /* o : IVAS encoder structure */ +); + +void read_next_rfparam( + int16_t *rf_fec_offset, /* o : RF offset */ + int16_t *rf_fec_indicator, /* o : RF FEC indicator */ + FILE *f_rf /* i : file pointer to read parameters */ +); + +void read_next_brate( + int32_t *total_brate, /* i/o: total bitrate */ + const int32_t last_total_brate, /* i : last total bitrate */ + FILE *f_rate, /* i : bitrate switching profile (0 if N/A) */ + const int16_t element_mode, /* i : IVAS element mode */ + int32_t input_Fs, /* i : input sampling frequency */ + int16_t *Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + int16_t *Opt_SC_VBR, /* i/o: SC-VBR flag */ + int16_t *codec_mode /* i/o: Mode 1 or 2 */ +); + +void read_next_bwidth( + int16_t *max_bwidth, /* i/o: maximum encoded bandwidth */ + FILE *f_bwidth, /* i : bandwidth switching profile (0 if N/A) */ + int32_t *bwidth_profile_cnt, /* i/o: counter of frames for bandwidth switching profile file */ + int32_t input_Fs /* i : input sampling rate */ +); + +#ifdef DEBUGGING +void read_next_force( + int16_t *force, /* i/o: force value (0/1, 0 = speech, 1 = music)*/ + FILE *f_force, /* i : force switching profile (0 if N/A) */ + int32_t *force_profile_cnt /* i/o: counter of frames for force switching profile file */ +); +#endif +ivas_error init_encoder( + Encoder_State *st, /* i/o: state structure */ + const int16_t idchan, /* i : channel ID */ + const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */ + const int16_t interval_SID, /* i : interval for SID update */ + const int16_t vad_only_flag /* i : flag to indicate front-VAD structure */ +); + +void LPDmem_enc_init( + LPD_state_HANDLE hLPDmem /* i/o: LP memories */ +); + +void destroy_encoder( + Encoder_State *st /* i/o: state structure */ +); +ivas_error evs_enc( + Encoder_State *st, /* i/o: state structure */ + const int16_t *data, /* i : input signal */ + float *mem_hp20_in, /* i/o: hp20 filter memory */ + const int16_t n_samples /* i : number of input samples */ +); +void amr_wb_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t *data, /* i : input signal */ + float *mem_hp20_in, /* i/o: hp20 filter memory */ + const int16_t n_samples /* i : number of input samples */ +); + +void sc_vbr_enc_init( + SC_VBR_ENC_HANDLE hSC_VBR /* i/o: SC-VBR encoder handle */ +); + +void amr_wb_enc_init( + AMRWB_IO_ENC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO encoder handle */ +); + +void pre_proc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t input_frame, /* i : frame length */ + float old_inp_12k8[], /* i/o: buffer of old input signal */ + float old_inp_16k[], /* i/o: buffer of old input signal @ 16kHz */ + float **inp, /* o : ptr. to inp. signal in the current frame*/ + float fr_bands[2 * NB_BANDS], /* i : energy in frequency bands */ + float *Etot, /* i : total energy */ + float *ener, /* o : residual energy from Levinson-Durbin */ +#ifndef FIX_I4_OL_PITCH + int16_t pitch_orig[3], /* o : open-loop pitch values for quantization */ +#endif + float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* i/o: LP prediction errors */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + float lsp_mid[M], /* i/o: LSPs in the middle of the frame */ + int16_t *vad_hover_flag, /* i : VAD hangover flag */ + int16_t *attack_flag, /* o : attack flag */ + float *new_inp_resamp16k, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + int16_t *Voicing_flag, /* o : voicing flag for HQ FEC */ + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ + int16_t *hq_core_type /* o : HQ core type */ +); +#endif + +/*! r: HQ_CORE/TCX_20_CORE decision */ +int16_t mdct_classifier( + Encoder_State *st, /* i/o: Encoder state variable */ + const float *fft_buff, /* i : FFT spectrum from fft_rel */ + const float enerBuffer[], /* i : energy buffer */ + const int32_t brate /* i : current brate, IVAS: nominal bitrate, EVS: st->total_brate */ +); + +void MDCT_selector( + Encoder_State *st, /* i/o: Encoder State */ + const float sp_floor, /* i : Noise floor estimate */ + const float Etot, /* i : Total energy */ + const float cor_map_sum, /* i : sum of correlation map */ + const float enerBuffer[] /* i : energy buffer */ +); + +void MDCT_selector_reset( + TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ +); + +void MDCT_classifier_reset( + TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ +); + +ivas_error acelp_core_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float inp[], /* i : input signal of the current frame */ + const float ener, /* i : residual energy from Levinson-Durbin */ + float A[NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes */ + const float epsP[M + 1], /* i : LP prediction errors */ + float lsp_new[M], /* i : LSPs at the end of the frame */ + float lsp_mid[M], /* i : LSPs in the middle of the frame */ + const int16_t vad_hover_flag, /* i : VAD hangover flag */ + const int16_t attack_flag, /* i : attack flag (GSC or TC) */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float old_syn_12k8_16k[], /* o : ACELP core synthesis at 12.8kHz or 16kHz to be used by SWB BWE */ + float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ + int16_t *unbits, /* o : number of unused bits */ + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ + const float tdm_lspQ_PCh[M], /* i : Q LSPs for primary channel */ + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +); + +ivas_error acelp_core_switch_dec_bfi( + Decoder_State *st /* i/o: decoder state structure */ +); + +void acelp_core_switch_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float inp12k8[], /* i : input signal @12.8 kHz */ + const float inp16k[], /* i : input signal @16 kHz */ + const float A[NB_SUBFR16k * ( M + 1 )] /* i : A(z) unquantized for the 4 subframes */ +); + +/*! r: length of output */ +int16_t modify_Fs_intcub3m_sup( + const float sigIn[], /* i : signal to decimate with memory of 2 samples (indexes -2 & -1) */ + const int16_t lg, /* i : length of input */ + const int32_t fin, /* i : frequency of input */ + float sigOut[], /* o : decimated signal */ + const int32_t fout, /* i : frequency of output */ + int16_t *delayout /* o : delay of output */ +); + +void core_switching_OLA( + const float *mem_over_hp, /* i : upsampling filter memory */ + const int16_t last_L_frame, /* i : last L_frame lengthture */ + const int32_t output_Fs, /* i : output sampling rate */ + float *synth, /* i/o: synthesized signal from HQ core */ + const float *synth_subfr_out, /* i : synthesized signal from ACELP core */ + float *synth_subfr_bwe, /* i : synthesized BWE from ACELP core */ + const int16_t output_frame, /* i : output frame length */ + const int16_t bwidth /* i : output bandwidth */ +); + +void retro_interp4_5( + const float *syn, + float *pst_old_syn ); + +void retro_interp5_4( + float *pst_old_syn ); + +void core_switching_hq_prepare_enc( + Encoder_State *st, /* i/o: encoder state structure */ + int16_t *num_bits, /* i/o: bit budget update */ + const int16_t input_frame, /* i : input frame length */ + float *wtda_audio, + const float *audio ); + +void core_switching_hq_prepare_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *num_bits, /* i/o: bit budget update */ + const int16_t input_frame /* i : input frame length */ +); + +ivas_error acelp_core_switch_dec( + Decoder_State *st, /* i/o: decoder structure */ + float *synth_subfr_out, /* o : synthesized ACELP subframe */ + float *tmp_synth_bwe, /* o : synthesized ACELP subframe BWE */ + const int16_t output_frame, /* i : input frame length */ + const int16_t core_switching_flag, /* i : core switching flag */ + float *mem_synth, /* o : synthesis to overlap */ + const int16_t nchan_out /* i : number of output channels */ +); + +void space_lsfs( + float *lsfs, + const int16_t order ); + +void lsp2a( + float *pc_in, + float *freq, + const int16_t order ); + +void lsp_weights( + const float *lsps, + float *weight, + const int16_t order ); + +void a2lsp_stab( + const float *a, /* i : LP filter coefficients */ + float *lsp, /* o : Line spectral pairs */ + const float *old_lsp /* i : LSP vector from past frame */ +); + +void lsp2a_stab( + const float *lsp, /* i : LSF vector (in the cosine domain) */ + float *a, /* o : LP filter coefficients */ + const int16_t m /* i : order of LP analysis */ +); + +void isf2lsf( + const float *isf, /* i : ISF vector */ + float *lsf, /* o : LSF vector */ + float *stable_lsp, /* i/o: LSF vector */ + const int16_t m, /* i : order of LP analysis */ + const int32_t Fs ); + +void lsf2isf( + const float *lsf, /* i : LSF vector */ + float *isf, /* o : ISF vector */ + float *stable_isp, /* i/o: ISP vector */ + const int16_t m, /* i : order of LP analysis */ + const int32_t Fs ); + +int16_t a2lsp( + float *freq, /* o : LSP vector */ + const float *a, /* i : predictor coefficients */ + const int16_t order /* i : order of LP analysis */ +); + +void ResetSHBbuffer_Enc( + TD_BWE_ENC_HANDLE hBWE_TD /* i/o: TD BWE data handle */ +); + +void ResetSHBbuffer_Dec( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + const int16_t extl /* i : BWE extension layer */ +); + +void calc_st_filt( + const float *apond2, /* i : coefficients of numerator */ + const float *apond1, /* i : coefficients of denominator */ + float *parcor0, /* o : 1st parcor calcul. on composed filter */ + float *sig_ltp_ptr, /* i/o: input of 1/A(gamma1) : scaled by 1/g0 */ + float *mem_zero, /* i/o: All zero memory */ + const int16_t L_subfr, /* i : the length of subframe */ + const int16_t extl /* i : extension layer info */ +); + +void scale_st( + const float *sig_in, /* i : postfilter input signal */ + float *sig_out, /* i/o: postfilter output signal */ + float *gain_prec, /* i/o: last value of gain for subframe */ + const int16_t L_subfr, /* i : the length of subframe */ + const int16_t extl /* i : extension layer info */ +); + +void filt_mu( + const float *sig_in, /* i : signal (beginning at sample -1) */ + float *sig_out, /* o : output signal */ + const float parcor0, /* i : parcor0 (mu = parcor0 * gamma3) */ + const int16_t L_subfr, /* i : the length of subframe */ + const int16_t extl /* i : extension layer info */ +); + +void PostShortTerm( + float *sig_in, /* i : input signal (ptr. to current subframe */ + float *lpccoeff, /* i : LPC coefficients for current subframe */ + float *sig_out, /* o : postfiltered output */ + float *mem_stp, /* i/o: postfilter memory */ + float *ptr_mem_stp, /* i/o: pointer to postfilter memory */ + float *ptr_gain_prec, /* i/o: for gain adjustment */ + float *mem_zero, /* i/o: null memory to compute h_st */ + const float formant_fac /* i : Strength of post-filter [0,1] */ +); + +/*! r: Formant filter strength [0,1] */ +float swb_formant_fac( + const float lpc_shb2, /* i : 2nd HB LPC coefficient */ + float *tilt_mem /* i/o: Tilt smoothing memory */ +); + +void GenShapedSHBExcitation( + float *excSHB, /* o : synthesized shaped shb exctiation */ + const float *lpc_shb, /* i : lpc coefficients */ + float *exc16kWhtnd, /* o : whitened synthesized shb excitation */ + float *mem_csfilt, /* i/o: memory */ + float *mem_genSHBexc_filt_down_shb, /* i/o: memory */ + float *state_lpc_syn, /* i/o: memory */ + const int16_t coder_type, /* i : coding type */ + const float *bwe_exc_extended, /* i : bandwidth extended excitation */ + int16_t bwe_seed[], /* i/o: random number generator seed */ + float voice_factors[], /* i : voicing factor */ + const int16_t extl, /* i : extension layer */ + float *tbe_demph, /* i/o: de-emphasis memory */ + float *tbe_premph, /* i/o: pre-emphasis memory */ + float *lpc_shb_sf, /* i : LP coefficients */ + float *shb_ener_sf, /* i : SHB subframe energies */ + float *shb_res_gshape, /* i : SHB LP residual gain shape */ + float *shb_res, /* i : SHB residual used in encoder only */ + int16_t *vf_ind, /* i/o: Mixing factor index */ + const float formant_fac, /* i : Formant sharpening factor [0..1] */ + float fb_state_lpc_syn[], /* i/o: memory */ + float *fb_tbe_demph, /* i/o: fb de-emphasis memory */ + const int32_t total_brate, /* i : overall bitrate */ + const int16_t prev_bfi, /* i : previous frame was lost flag */ + const int16_t element_mode, /* i : element mode */ + const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ + float *nlExc16k, /* i/o: NL exc for IC-BWE */ + float *mixExc16k, /* i/o: exc spreading for IC-BWE */ + const int32_t extl_brate, /* i : TD BWE bitrate */ + const int16_t MSFlag, /* i : Multi-source flag */ + float EnvSHBres_4k[], /* i/o: TD envelope of the SHB residual signal */ + float *prev_pow_exc16kWhtnd, /* i/o: power of the LB excitation signal in the previous frame */ + float *prev_mix_factor, /* i/o: mixing factor in the previous frame */ + float *Env_error, /* o : error in SHB residual envelope modelling*/ + float Env_error_part[] /* o : per-segment error in SHB residual envelope modelling */ +); + +void GenSHBSynth( + const float *shb_target_speech, /* i : input synthesized speech */ + float *shb_syn_speech_32k, /* o : output highband component */ + float Hilbert_Mem[], /* i/o: memory */ + float state_lsyn_filt_shb_local[], /* i/o: memory */ + const int16_t L_frame, /* i : ACELP Frame length */ + int16_t *syn_dm_phase ); + +void ScaleShapedSHB( + const int16_t length, /* i : SHB overlap length */ + float *synSHB, /* i/o: synthesized shb signal */ + float *overlap, /* i/o: buffer for overlap-add */ + const float *subgain, /* i : subframe gain */ + const float frame_gain, /* i : frame gain */ + const float *win, /* i : window */ + const float *subwin /* i : subframes window */ +); + +void Interpolate_allpass_steep( + const float *in, /* i : input array of size N */ + float *mem, /* i/o: memory */ + const int16_t N, /* i : number of input samples */ + float *out /* o : output array of size 2*N */ +); + +void Decimate_allpass_steep( + const float *in, /* i : input array of size N */ + float *mem, /* i/o: memory */ + const int16_t N, /* i : number of input samples */ + float *out /* o : output array of size N/2 */ +); + +void interpolate_3_over_2_allpass( + const float *input, /* i : input signal */ + const int16_t len, /* i : number of input samples */ + float *out, /* o : output signal */ + float *mem /* i/o: memory */ +); + +void decimate_2_over_3_allpass( + const float *input, /* i : input signal */ + const int16_t len, /* i : number of input samples */ + float *out, /* o : output signal */ + float *mem, /* i/o: memory */ + float *lp_mem ); + +void interpolate_3_over_1_allpass( + const float *input, /* i : input signal */ + const int16_t len, /* i : number of input samples */ + float *out, /* o : output signal */ + float *mem /* i/o: memory */ +); + +void InitSWBencBuffer( + TD_BWE_ENC_HANDLE hBWE_TD /* i/o: TD BWE data handle */ +); + +void swb_tbe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ + const float *new_speech, /* i : original input signal */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + const float voice_factors[], /* i : voicing factors */ + float *White_exc16k, /* o : shaped white excitation for the FB TBE */ + const float pitch_buf[] /* i : pitch for each subframe */ +); + +void swb_tbe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + STEREO_ICBWE_DEC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + const float voice_factors[], /* i : voicing factors */ + const float old_syn_12k8_16k[], /* i : low band synthesis at 12.8kHz or 16kHz */ + float *White_exc16k, /* o : shaped white excitation for the FB TBE */ + float *synth, /* i/o: ACELP core synthesis/final synthesis */ + float *pitch_buf ); + +void flip_and_downmix_generic( + float input[], /* i : input spectrum */ + float output[], /* o : output spectrum */ + const int16_t length, /* i : length of spectra */ + float mem1_ext[HILBERT_ORDER1], /* i/o: Hilbert filter memory */ + float mem2_ext[2 * HILBERT_ORDER2], /* i/o: memory */ + float mem3_ext[2 * HILBERT_ORDER2], /* i/o: memory */ + int16_t *phase_state /* i/o: Phase state in case frequency isn't multiple of 50 Hz */ +); + +void non_linearity( + const float input[], /* i : input signal */ + float output[], /* i : output signal */ + float old_bwe_exc_extended[], /* i/o: memory bugffer */ + const int16_t length, /* i : input length */ + float *prev_scale, /* i/o: memory */ + const int16_t coder_type, /* i : Coder Type */ + const float *voice_factors, /* i : Voice Factors */ + const int16_t L_frame /* i : ACELP frame length */ +); + +void interp_code_5over2( + const float inp_code[], /* i : input vector */ + float interp_code[], /* o : output vector */ + const int16_t inp_length /* i : length of the input vector */ +); + +void interp_code_4over2( + const float inp_code[], /* i : input vector */ + float interp_code[], /* o : output vector */ + const int16_t inp_length /* i : length of the input vector */ +); + +void flip_spectrum_and_decimby4( + const float input[], /* i : input spectrum */ + float output[], /* o : output spectrum */ + const int16_t length, /* i : vector length */ + float mem1[], /* i/o: memory */ + float mem2[], /* i/o: memory */ + const int16_t ramp_flag /* i : flag to trigger slow ramp-up of output */ +); + +void GenShapedWBExcitation( + float *excSHB, /* o : synthesized shaped shb exctiation */ + const float *lpc_shb, /* i : lpc coefficients */ + float *exc4kWhtnd, /* o : whitened synthesized shb excitation */ + float *mem_csfilt, /* i/o: memory */ + float *mem_genSHBexc_filt_down1, /* i/o: memory */ + float *mem_genSHBexc_filt_down2, /* i/o: memory */ + float *mem_genSHBexc_filt_down3, /* i/o: memory */ + float *state_lpc_syn, /* i/o: memory */ + const int16_t coder_type, /* i : coding type */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + int16_t bwe_seed[], /* i/o: random number generator seed */ + const float voice_factors[], /* i : voicing factor */ + const int16_t uv_flag, /* i : unvoiced flag */ + const int16_t igf_flag ); + +void GenWBSynth( + const float *input_synspeech, /* i : input synthesized speech */ + float *shb_syn_speech_16k, /* o : output highband compnent */ + float *state_lsyn_filt_shb1, /* i/o: memory */ + float *state_lsyn_filt_shb2 /* i/o: memory */ +); + +void wb_tbe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *hb_speech, /* i : HB target signal (6-8kHz) at 16kHz */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + const float pitch_buf[], /* i : pitch for each subframe */ + const float voicing[] /* o : OL maximum normalized correlation */ +); + +void wb_tbe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + const float voice_factors[], /* i : voicing factors */ + float *synth /* i/o: ACELP core synthesis/final synthesis */ +); + +void tbe_write_bitstream( + Encoder_State *st /* i/o: encoder state structure */ +); + +void tbe_read_bitstream( + Decoder_State *st /* i/o: decoder state structure */ +); + +void GenTransition( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + float *outputHB, /* o : synthesized HB transitions signal */ + const int32_t output_Fs, /* i : output sampling rate */ + const int16_t element_mode, /* i : element mode */ + const int16_t L_frame, /* i : ACELP frame length */ + const int16_t rf_flag, /* i : RF flag */ + const int32_t total_brate /* i : total bitrate */ +); + +void GenTransition_WB( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + float *outputHB, /* o : synthesized HB transitions signal */ + const int32_t output_Fs /* i : output sampling rate */ +); + +void td_bwe_dec_init( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + const int16_t extl, /* i : BWE extension layer */ + const int32_t output_Fs /* i : output sampling rate */ +); + +void TBEreset_enc( + TD_BWE_ENC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + const int16_t last_core, /* i : last core */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void TBEreset_dec( + Decoder_State *st /* i/o: decoder state structure */ +); + +/*! r: TBE bit consumption per frame */ +int16_t get_tbe_bits( + const int32_t total_brate, /* i : overall bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t rf_mode /* i : channel aware mode */ +); + +void fb_tbe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float new_input[], /* i : input speech at 48 kHz sample rate */ + const float fb_exc[] /* i : FB excitation from the SWB part */ +); + +void fb_tbe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float fb_exc[], /* i : FB excitation from the SWB part */ + float *hb_synth, /* i/o: high-band synthesis */ + float *fb_synth_ref /* o : high-band synthesis 16-20 kHz */ +); + +void calc_tilt_bwe( + const float *sp, /* i : input signal */ + float *tilt, /* o : signal tilt */ + const int16_t N /* i : signal length */ +); + +void fd_bwe_enc_init( + FD_BWE_ENC_HANDLE hBWE_FD /* i/o: FD BWE data handle */ +); + +void swb_pre_proc( + Encoder_State *st, /* i/o: encoder state structure */ + float *new_swb_speech, /* o : original input signal at 32kHz */ + float *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz */ + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : real buffer */ + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : imag buffer */ + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +); + +void wb_pre_proc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t last_element_mode, /* i : last element mode */ + const float *new_inp_resamp16k, /* i : original input signal */ + float *hb_speech /* o : HB target signal (6-8kHz) at 16kHz */ +); + +void wb_bwe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *new_wb_speech /* i : original input signal at 16kHz */ +); + +void wb_bwe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float output[], /* i : synthesis @internal Fs */ + float *synth, /* i/o: ACELP core synthesis/final synthesis */ + float *hb_synth, /* o : SHB synthesis/final synthesis */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t output_frame, /* i : frame length */ + const float voice_factors[], /* i : voicing factors */ + const float pitch_buf[] /* i : pitch buffer */ +); + +void swb_bwe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t last_element_mode, /* i : last element mode */ + const float *old_input_12k8, /* i : input signal @12.8kHz for SWB BWE */ + const float *old_input_16k, /* i : input signal @16kHz for SWB BWE */ + const float *old_syn_12k8_16k, /* i : ACELP core synthesis at 12.8kHz or 16kHz*/ + const float *new_swb_speech, /* i : original input signal at 32kHz */ + const float *shb_speech /* i : SHB target signal (6-14kHz) at 16kHz */ +); + +void swb_bwe_enc_hr( + Encoder_State *st, /* i/o: encoder state structure */ + const float *new_input, /* i : input signal */ + const int16_t input_frame, /* i : frame length */ + const int16_t unbits /* i : number of core unused bits */ +); + +void fd_bwe_dec_init( + FD_BWE_DEC_HANDLE hBWE_FD /* i/o: FD BWE data handle */ +); + +void swb_bwe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float output[], /* i : synthesis @internal Fs */ + const float *synth, /* i : ACELP core synthesis/final synthesis */ + float *hb_synth, /* o : SHB synthesis/final synthesis */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t output_frame /* i : frame length */ +); + +void hr_bwe_dec_init( + HR_BWE_DEC_HANDLE hBWE_FD_HR /* i/o: HR BWE data handle */ +); + +void swb_bwe_dec_hr( + Decoder_State *st, /* i/o: decoder state structure */ + const float *syn_12k8_16k, /* i : ACELP core synthesis @16kHz */ + float *hb_synth, /* o : SHB synthesis */ + const int16_t output_frame, /* i : frame length */ + const int16_t unbits, /* i : number of core unused bits */ + const float pitch_buf[] /* i : pitch buffer */ +); + +void swb_hr_noise_fill( + const int16_t is_transient, /* i : transient flag */ + const int16_t spect_start, /* i : spectrum start point */ + const int16_t spect_end, /* i : spectrum end point */ + const float tilt_wb, /* i : tilt of wideband signal */ + const float pitch, /* i : pitch value */ + const int16_t nq[], /* i : AVQ nq index */ + int16_t Nsv, /* i : number of subband */ + int16_t *bwe_highrate_seed, /* i/o: seed of random noise */ + float *t_audio /* i/o: mdct spectrum */ +); + +/*! r: gain */ +float td_postprocess( + float hb_synth[], /* i/o: high-band synthesis */ + const int16_t input_frame, /* i : frame length */ + const int16_t last_extl /* i : last extension layer */ +); + +void calc_normal_length( + const int16_t core, /* i : core */ + const float *sp, /* i : input signal */ + const int16_t mode, /* i : input mode */ + const int16_t extl, /* i : extension layer */ + int16_t *L_swb_norm, /* o : normalize length */ + int16_t *prev_L_swb_norm /* i/o: last normalize length */ +); + +void calc_norm_envelop( + const float SWB_signal[], /* i : SWB spectrum */ + float *envelope, /* o : normalized envelope */ + const int16_t L_swb_norm, /* i : length of envelope */ + const int16_t SWB_flength, /* i : Length of input/output */ + const int16_t st_offset /* i : offset */ +); + +void time_envelop_shaping( + float werr[], /* i/o: SHB synthesis */ + float SWB_tenv[], /* i/o: frequency envelope */ + const int16_t L /* i : frame length */ +); + +void time_reduce_pre_echo( + const float *synth, /* i : ACELP core synthesis */ + float *error, /* o : SHB BWE synthesis */ + float prev_td_energy, /* o : last td energy */ + const int16_t L /* i : subframe length */ +); + +int16_t WB_BWE_gain_pred( + float *WB_fenv, /* o : WB frequency envelopes */ + const float *core_dec_freq, /* i : Frequency domain core decoded signal */ + const int16_t coder_type, /* i : coding type */ + const int16_t prev_code_type, /* i : coding type of last frame */ + const float prev_WB_fenv, /* i : envelope for last frame */ + const float voice_factors[], /* i : voicing factors */ + const float pitch_buf[], /* i : pitch buffer */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + const float last_wb_bwe_ener, /* i : previous frame wb bwe signal energy */ + const int16_t last_extl, /* i : extl. layer for last frame */ + const float tilt ); + +void WB_BWE_decoding( + const float *core_dec_freq, /* i : Frequency domain core decoded signal */ + float *WB_fenv, /* i : WB frequency envelopes */ + float *WB_signal, /* o : WB signal in MDCT domain */ + const int16_t WB_flength, /* i : Length of input/output */ + const int16_t mode, /* i : classification for WB signal */ + const int16_t last_extl, /* i : extl. layer for last frame */ + float *prev_Energy, /* i/o: energy for last frame */ + float *prev_WB_fenv, /* i/o: envelope for last frame */ + int16_t *prev_L_wb_norm, /* i/o: length for last frame wb norm */ + const int16_t extl, /* i : extension layer */ + const int16_t coder_type, /* i : coding type */ + const int32_t total_brate, /* i : core layer bitrate */ + int16_t *Seed, /* i/o: random generator seed */ + int16_t *prev_flag, /* i/o: attenu flag of last frame */ + int16_t prev_coder_type /* i : coding type of last frame */ +); + +void SWB_BWE_decoding( + const float *core_dec_freq, /* i : Frequency domain core decoded signal */ + float *SWB_fenv, /* i/o: SWB frequency envelopes */ + float *SWB_signal, /* o : SWB signal in MDCT domain */ + const int16_t SWB_flength, /* i : Length of input/output */ + const int16_t mode, /* i : classification for SWB signal */ + int16_t *frica_flag, /* o : fricative signal flag */ + float *prev_Energy, /* i/o: energy for last frame */ + float *prev_SWB_fenv, /* i/o: envelope for last frame */ + int16_t *prev_L_swb_norm, /* i/o: length for last frame wb norm */ + const float tilt_nb, /* i : tilt of synthesis wb signal */ + int16_t *Seed, /* i/o: random generator seed */ + const int16_t st_offset, /* i : offset value due to different core */ + float *prev_weight, /* i/o: excitation weight value of last frame */ + const int16_t extl, /* i : extension layer */ + const int16_t last_extl /* i : extension layer of last frame */ +); + +void CNG_reset_enc( + Encoder_State *st, /* i/o: encoder state structure */ + float *pitch_buf, /* o : floating pitch for each subframe */ + float *voice_factors, /* o : voicing factors */ + int16_t VBR_cng_reset_flag ); + +void a2isp( + const float *a, /* i : LP filter coefficients */ + float *isp, /* o : Immittance spectral pairs */ + const float *old_isp /* i : ISP vector from past frame */ +); + +void a2isf( + float *a, + float *isf, + const float *old_isf, + const int16_t lpcOrder ); + +void a2rc( + const float *a, /* i : LPC coefficients */ + float *refl, /* o : Reflection co-efficients */ + const int16_t lpcorder /* i : LPC order */ +); + +int16_t lp_filt_exc_enc( + const int16_t codec_mode, /* i : codec mode */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe index */ + float *exc, /* i/o: pointer to excitation signal frame */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + float *y1, /* o : zero-memory filtered adaptive excitation */ + float *xn2, /* o : target vector for innovation search */ + const int16_t L_subfr, /* i : length of vectors for gain quantization */ + const int16_t L_frame, /* i : frame size */ + float *g_corr, /* o : ACELP correlation values */ + const int16_t clip_gain, /* i : adaptive gain clipping flag */ + float *gain_pit, /* o : adaptive excitation gain */ + int16_t *lp_flag /* i/o: mode selection */ +); + +void updt_tar( + const float *x, /* i : old target (for pitch search) */ + float *x2, /* o : new target (for codebook search) */ + const float *y, /* i : filtered adaptive codebook vector */ + const float gain, /* i : adaptive codebook gain */ + const int16_t L /* i : subframe size */ +); + +void analy_sp( + const int16_t element_mode, /* i : element mode */ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int32_t input_Fs, /* i : input sampling rate */ + float *speech, /* i : speech buffer */ + float *Bin_E, /* o : per bin log energy spectrum */ + float *Bin_E_old, /* o : per bin log energy spectrum for mid-frame */ + float *fr_bands, /* o : per band energy spectrum (2 analyses) */ + float lf_E[], /* o : per bin E for first VOIC_BINS bins (without DC) */ + float *Etot, /* o : total input energy */ + const int16_t min_band, /* i : minimum critical band */ + const int16_t max_band, /* i : maximum critical band */ + float *band_ener, /* o : energy in critical frequency bands without minimum noise floor E_MIN */ + float *PS, /* o : Per bin energy spectrum */ + float *fft_buff /* o : FFT coefficients */ +); + +void CNG_enc( + Encoder_State *st, /* i/o: State structure */ + float Aq[], /* o : LP coefficients */ + const float *speech, /* i : pointer to current frame input speech buffer */ + float enr, /* i : frame energy output from Levinson recursion */ + const float *lsp_mid, /* i : mid frame LSPs */ + float *lsp_new, /* i/o: current frame LSPs */ + float *lsf_new, /* i/o: current frame LSFs */ + int16_t *allow_cn_step, /* o : allow CN step */ + float *q_env, + int16_t *sid_bw ); + +void swb_CNG_enc( + Encoder_State *st, /* i/o: State structure */ + const float *shb_speech, /* i : SHB target signal (6-14kHz) at 16kHz */ + const float *syn_12k8_16k /* i : ACELP core synthesis at 12.8kHz or 16kHz */ +); + +void lsf_enc( + Encoder_State *st, /* i/o: state structure */ + float *lsf_new, /* o : quantized LSF vector */ + float *lsp_new, /* i/o: LSP vector to quantize/quantized */ + float *lsp_mid, /* i : mid-frame LSP vector */ + float *Aq, /* o : quantized A(z) for 4 subframes */ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +#endif +); + +void isf_enc_amr_wb( + Encoder_State *st, /* i/o: state structure */ + float *isf_new, /* o : quantized ISF vector */ + float *isp_new, /* i/o: ISP vector to quantize/quantized */ + float *Aq /* o : quantized A(z) for 4 subframes */ +); + +void find_targets( + const float *speech, /* i : pointer to the speech frame */ + const float *mem_syn, /* i : memory of the synthesis filter */ + const int16_t i_subfr, /* i : subframe index */ + float *mem_w0, /* i/o: weighting filter denominator memory */ + const float *p_Aq, /* i : interpolated quantized A(z) filter */ + const float *res, /* i : residual signal */ + const int16_t L_subfr, /* i : length of vectors for gain quantization */ + const float *Ap, /* i : unquantized A(z) filter with bandwidth expansion */ + const float tilt_fac, /* i : tilt factor */ + float *xn, /* o : Close-loop Pitch search target vector */ + float *cn, /* o : target vector in residual domain */ + float *h1 /* o : impulse response of weighted synthesis filter */ +); + +void inov_encode( + Encoder_State *st, /* i/o: encoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t last_L_frame, /* i : length of the last frame */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *p_Aq, /* i : LP filter coefficients */ + const float gain_pit, /* i : adaptive excitation gain */ + float *cn, /* i/o: target vector in residual domain */ + const float *exc, /* i : pointer to excitation signal frame */ + float *h1, /* i/o: weighted filter input response */ + const float tilt_code, /* i : tilt of of the excitation of previous subframe */ + const float pt_pitch, /* i : pointer to current subframe fractional pitch */ + const float *xn2, /* i : target vector for innovation search */ + float *code, /* o : algebraic excitation */ + float *y2, /* o : zero-memory filtered algebraic excitation */ + int16_t *unbits, /* o : number of unused bits for EVS_PI */ + const int16_t L_subfr /* i : subframe length */ +); + +void acelp_1t64( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float dn[], /* i : corr. between target and h[]. */ + const float h[], /* i : impulse response of weighted synthesis filter */ + float code[], /* o : algebraic (fixed) codebook excitation */ + float y[], /* o : filtered fixed codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +); + +void acelp_2t32( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float dn[], /* i : corr. between target and h[]. */ + const float h[], /* i : impulse response of weighted synthesis filter */ + float code[], /* o : algebraic (fixed) codebook excitation */ + float y[] /* o : filtered fixed codebook excitation */ +); + +int16_t acelp_4t64( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + float dn[], /* i : corr. between target and h[]. */ + const float cn[], /* i : residual after long term prediction */ + const float H[], /* i : impulse response of weighted synthesis filter */ + float R[], /* i : autocorrelation values */ + const int16_t acelpautoc, /* i : autocorrealtion flag */ + float code[], /* o : algebraic (fixed) codebook excitation */ + float y[], /* o : filtered fixed codebook excitation */ + int16_t nbbits, /* i : number of bits per codebook */ + const int16_t cmpl_flag, /* i : coomplexity reduction flag */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +); + +/*! r: return (2*N)+1 bits */ +int16_t quant_2p_2N1( + const int16_t pos1, /* i : position of the pulse 1 */ + const int16_t pos2, /* i : position of the pulse 2 */ + const int16_t N /* i : number of bits for position */ +); + +void corr_xh( + const float *x, /* i : target signal */ + float *y, /* o : correlation between x[] and h[] */ + const float *h, /* i : impulse response of weighted synthesis filter */ + const int16_t L_subfr /* i : length of the subframe */ +); + +void find_tilt( + const float fr_bands[], /* i : energy in frequency bands */ + const float bckr[], /* i : per band background noise energy estimate */ + float ee[2], /* o : lf/hf E ration for present frame */ + const int16_t pitch[3], /* i : open loop pitch values for 3 half-frames */ + const float voicing[3], /* i : normalized correlation for 3 half-frames */ + const float *lf_E, /* i : per bin energy for low frequencies */ + const float corr_shift, /* i : normalized correlation correction */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t max_band, /* i : maximum critical band */ + float hp_E[], /* o : energy in HF */ + const int16_t codec_mode, /* i : Mode 1 or 2 */ + float *bckr_tilt_lt, /* i/o: lf/hf E ratio of background noise */ + int16_t Opt_vbr_mode ); + +void init_gp_clip( + float mem[] /* o : memory of gain of pitch clipping algorithm */ +); + +int16_t gp_clip( + const int16_t element_mode, /* i : element mode */ + const int32_t core_brate, /* i : core bitrate */ + const float *voicing, /* i : normalized correlations (from OL pitch) */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t coder_type, /* i : coding type */ + const float xn[], /* i : target vector */ + float mem[] /* i/o: memory of gain of pitch clipping algorithm */ +); + +void gp_clip_test_lsf( + const int16_t element_mode, /* i : element mode */ + const int32_t core_brate, /* i : core bitrate */ + const float lsf[], /* i : LSF vector */ + float mem[], /* i/o: memory of gain of pitch clipping algorithm */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +); + +void gp_clip_test_gain_pit( + const int16_t element_mode, /* i : element mode */ + const int32_t core_brate, /* i : core bitrate */ + const float gain_pit, /* i : gain of quantized pitch */ + float mem[] /* i/o: memory of gain of pitch clipping algorithm */ +); + +void analy_lp( + const float speech[], /* i : pointer to the denoised speech frame */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_look, /* i : look-ahead length */ + float *ener, /* o : residual signal energy */ + float A[], /* o : A(z) filter coefficients */ + float epsP[], /* o : LP analysis residual energies for each iteration */ + float lsp_new[], /* o : current frame ISPs */ + float lsp_mid[], /* o : current mid-frame ISPs */ + float lsp_old[], /* i/o: previous frame unquantized ISPs */ + const int16_t Top[2], /* i : open loop pitch lag */ + const float Tnc[2], /* i : open loop pitch gain */ + const int32_t sr_core, /* i : internal sampling rate */ + const int16_t sec_chan_low_rate /* i : TD secondary channel flag */ +); + +void analy_lp_AMR_WB( + const float speech[], /* i : pointer to the speech frame */ + float *ener, /* o : residual energy from Levinson-Durbin */ + float A[], /* o : A(z) filter coefficients */ + float epsP[], /* o : LP analysis residual energies for each iteration */ + float isp_new[], /* o : current frame ISPs */ + float isp_old[], /* i/o: previous frame unquantized ISPs */ + float isf_new[], /* o : current frame ISFs */ + const int16_t Top, /* i : open loop pitch lag */ + const float Tnc /* i : open loop pitch gain */ +); + +void noise_est_init( + NOISE_EST_HANDLE hNoiseEst /* i/o: Noise estimation handle */ +); + +void speech_music_clas_init( + SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ +); + +void long_enr( + Encoder_State *st, /* i/o: encoder state structure */ + const float Etot, /* i : total channel energy */ + const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ + const int16_t high_lpn_flag, /* i : sp/mus LPN flag */ + FRONT_VAD_ENC_HANDLE hFrontVad[CPE_CHANNELS], /* i/o: front-VAD handles */ + const int16_t n_chan, /* i : number of channels */ + const int16_t localVAD_HE_SAD_LR[CPE_CHANNELS], /* i : HE-SAD flag without hangover LR channels */ + const float Etot_LR[CPE_CHANNELS] /* i : total channel energy LR channels */ +); + +void noise_est_pre( + const float Etot, /* i : Energy of current frame */ + const int16_t ini_frame, /* i : Frame number (init) */ + NOISE_EST_HANDLE hNoiseEst, /* i/o: Noise estimation data handle */ + const int16_t idchan, /* i : channel ID */ + const int16_t element_mode, /* i : element mode */ + const int16_t last_element_mode /* i : last element mode */ +); + +void noise_est_down( + const float fr_bands[], /* i : per band input energy (contains 2 vectors) */ + float bckr[], /* i/o: per band background noise energy estimate */ + float tmpN[], /* o : temporary noise update */ + float enr[], /* o : averaged energy over both subframes */ + const int16_t min_band, /* i : minimum critical band */ + const int16_t max_band, /* i : maximum critical band */ + float *totalNoise, /* o : noise estimate over all critical bands */ + const float Etot, /* i : Energy of current frame */ + float *Etot_last, /* i/o: Energy of last frame */ + float *Etot_v_h2 /* i/o: Energy variaions of noise frames */ +); + +void noise_est( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t old_pitch1, /* i : previous frame OL pitch[1] */ + const float tmpN[], /* i : temporary noise update */ + const float *epsP, /* i : LP prediction error energies */ + const float Etot, /* i : total channel E */ + const float relE, /* i : relative frame energy */ + const float corr_shift, /* i : normalized correlation correction */ + const float enr[], /* i : averaged energy over both subframes */ + float fr_bands[], /* i : spectrum per critical bands of the current frame */ + float *cor_map_sum, /* o : sum of correlation map from mult-harm analysis */ + float *ncharX, /* o : noise character for sp/mus classifier */ + float *sp_div, /* o : soectral diversity feature */ + float *non_staX, /* o : non-stationarity for sp/mus classifier */ + int16_t *loc_harm, /* o : multi-harmonicity flag for UV classifier */ + const float *lf_E, /* i : per bin energy for low frequencies */ + int16_t *st_harm_cor_cnt, /* i : 1st harm correlation timer */ + const float Etot_l_lp, /* i : Smoothed low energy */ + float *sp_floor, /* o : noise floor estimate */ + float S_map[], /* o : short-term correlation map */ + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + FRONT_VAD_ENC_HANDLE hFrontVad, /* i/o: front-VAD handle */ + const int16_t ini_frame /* i : Frame number (init) */ +); + +void vad_param_updt( + Encoder_State *st, /* i/o: encoder state structure */ + const float corr_shift, /* i : correlation shift */ + const float corr_shiftR, /* i : correlation shift right channel */ + const float A[], /* i : A(z) unquantized for the 4 subframes */ + const int16_t old_pitch1, /* i : previous frame OL pitch[1] */ + FRONT_VAD_ENC_HANDLE hFrontVad[], /* i/o: front-VAD handles */ + const int16_t n_channels /* i : number of channels */ +); + +/*! r: frame multi-harmonicity (1-harmonic, 0-not) */ +int16_t multi_harm( + const float Bin_E[], /* i : log energy spectrum of the current frame */ + float old_S[], /* i/o: prev. log-energy spectrum w. subtracted floor */ + float cor_map_LT[], /* i/o: LT correlation map */ + float *multi_harm_limit, /* i/o: multi harminic threshold */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : input signal bandwidth */ + int16_t *cor_strong_limit, /* i/o: HF correlation indicator */ + float *st_mean_avr_dyn, /* i/o: long term average dynamic */ + float *st_last_sw_dyn, /* i/o: last dynamic */ + float *cor_map_sum, /* i : sum of correlation map */ + float *sp_floor, /* o : noise floor estimate */ + float S_map[] /* o : short-term correlation map */ +); + +void lp_gain_updt( + const int16_t i_subfr, /* i : subframe number */ + const float gain_pit, /* i : Decoded gain pitch */ + const float norm_gain_code, /* i : Normalised gain code */ + float *lp_gainp, /* i/o: LP-filtered pitch gain(FEC) */ + float *lp_gainc, /* i/o: LP-filtered code gain (FEC) */ + const int16_t L_frame /* i : length of the frame */ +); + +void enc_pit_exc( + Encoder_State *st, /* i/o: state structure */ + const float *speech, /* i : Input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float *Aq, /* i : 12k8 Lp coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *res, /* i : residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close-loop pitch period - fractional part */ + float *pitch_buf, /* i/o: Fractionnal per subframe pitch */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + float *gpit, /* o : pitch gain per subframe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +void GSC_enc_init( + GSC_ENC_HANDLE hGSCEnc /* i/o: GSC data handle */ +); + +void encod_audio( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : 12k8 Lp coefficient */ + const float *res, /* i : residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t attack_flag, /* i : attack flag (GSC or TC) */ + float *lsf_new, /* i : current frame ISF vector */ + float *tmp_noise, /* o : long-term noise energy */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +/*! r: index of the last band where pitch contribution is significant */ +int16_t Pit_exc_contribution_len( + Encoder_State *st, /* i/o: state structure */ + const float *dct_res, /* i : DCT of residual */ + float *dct_pitex, /* i/o: DCT of pitch contribution */ + float *pitch_buf, /* i/o: Pitch per subframe */ + int16_t *hangover /* i : Hangover for the time contribution switching */ +); + +int16_t stab_est( + float etot, /* i : Total energy of the current frame */ + float *lt_diff_etot, /* i/o: Long term total energy variation */ + float *mem_etot, /* i/o: Total energy memory */ + int16_t *nb_thr_3, /* i/o: Number of consecutives frames of level 3 */ + int16_t *nb_thr_1, /* i/o: Number of consecutives frames of level 1 */ + float *thresh, /* i/o: Detection thresold */ + int16_t *last_music_flag, /* i/o: Previous music detection ouptut */ + const int16_t vad_flag /* i : VAD flag */ +); + +float gsc_gainQ( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t element_mode, /* i : element mode */ + const int16_t idchan, /* i : channel ID */ + const float y_gain4[], /* i : gain per band */ + float y_gainQ[], /* o : quantized gain per band */ + const int32_t core_brate, /* i : Core rate */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t L_frame, /* i : frame length */ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int32_t core_brate_inp /* i : true core brate */ +); + +void Ener_per_band_comp( + const float exc_diff[], /* i : gain per band */ + float y_gain4[], /* o : gain per band to quantize */ + const int16_t Mband, /* i : Max band */ + const int16_t Eflag, /* i : flag of highest band */ + const int16_t L_frame /* i : frame length */ +); + +void Comp_and_apply_gain( + float exc_diffQ[], /* i/o: gain per band */ + float Ener_per_bd_iQ[], /* o : Quant Ener per band */ + float Ener_per_bd_yQ[], /* o : Ener per band for quantize y */ + int16_t Mbands_gn, /* i : number of bands */ + const int16_t ReUseGain /* i : Reuse the gain in Ener_per_bd_yQ */ +); + +void bands_and_bit_alloc( + const int16_t cor_strong_limit, /* i : HF correlation */ + const int16_t noise_lev, /* i : dwn scaling factor */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ + const int16_t bits_used, /* i : Number of bit used before frequency Q */ + int16_t *bit, /* i/o: Number of bit allowed for frequency quantization */ + float *ener_vec, /* i/o: Quantized energy vector */ + int16_t *max_ener_band, /* o : Sorted order */ + int16_t *bits_per_bands_s, /* i/o: Number of bit allowed per allowed subband (Q3) */ + int16_t *nb_subbands, /* o : Number of subband allowed */ + const float *exc_diff, /* i : Difference signal to quantize (encoder side only) */ + float *concat_in, /* o : Concatened PVQ's input vector (encoder side only) */ + int16_t *pvq_len, /* o : Number of bin covered with the PVQ */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t GSC_noisy_speech, /* i : GSC noisy speech flag */ + const int16_t L_frame, /* i : frame length */ + const int16_t element_mode, /* i : element mode */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +); + +/*! r: average frequency gain */ +float gsc_gaindec( + Decoder_State *st, /* i/o: decoder state structure */ + float y_gainQ[], /* o : quantized gain per band */ + const int32_t core_brate, /* i : core used */ + float old_y_gain[], /* i/o: AR gain quantizer for low rate */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth /* i : input signal bandwidth */ +); + +void freq_dnw_scaling( + const int16_t cor_strong_limit, /* i : HF correlation */ + const int16_t coder_type, /* i : coder type */ + const int16_t noise_lev, /* i : Noise level */ + const int32_t core_brate, /* i : Core bitrate */ + float fy_norm[], /* i/o: Frequency quantized parameter */ + const int16_t L_frame /* i : frame length */ +); + +void GSC_dec_init( + GSC_DEC_HANDLE hGSCDec /* i/o: GSC data handle */ +); + +void decod_audio( + Decoder_State *st, /* i/o: decoder static memory */ + float dct_epit[], /* o : GSC excitation in DCT domain */ + const float *Aq, /* i : LP filter coefficient */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc_dct_in, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* o : excitation for SWB TBE */ + float *lsf_new, /* i : current frame ISF vector */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_lp_reuse_flag, /* i : LPC reuse flag */ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +void gsc_dec( + Decoder_State *st, /* i/o: State structure */ + float exc_dct_in[], /* i/o: dct of pitch-only/total excitation */ + const int16_t pit_band_idx, /* i : pitch band index */ + const int16_t Diff_len, /* i : */ + const int16_t bits_used, /* i : total number of bits used */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + const int16_t coder_type, /* i : coding type */ + int16_t *last_bin, /* i : last bin of bit allocation */ + const float *lsf_new, /* i : ISFs at the end of the frame */ + float *exc_wo_nf, /* o : excitation (in f domain) without noisefill*/ + float *tmp_noise /* o : long-term noise energy */ +); + +void dec_pit_exc( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *code, /* o : innovation */ + float *exc, /* i/o: adapt. excitation exc */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +void highband_exc_dct_in( + const int32_t core_brate, /* i : core bitrate */ + const int16_t *mfreq_bindiv_loc, /* i : bin per bands tables */ + int16_t last_bin, /* i : last bin of bit allocation */ + int16_t Diff_len, /* i : number of bin before cut-off frequency */ + int16_t noise_lev, /* i : pulses dynamic */ + int16_t pit_band_idx, /* i : bin position of the cut-off frequency */ + float *exc_diffQ, /* i : frequency coefficients of per band */ + int16_t *seed_tcx, /* i : Seed for noise */ + float *Ener_per_bd_iQ, /* i : Quantized energy of targeted vector */ + int16_t nb_subfr, /* i : Number of subframe considered */ + float *exc_dct_in, /* o : dct of residual signal */ + int16_t last_coder_type, /* i : coding type of last frame */ + int16_t *bitallocation_band, /* i : bit allocation flag of each band */ + const float *lsf_new, /* i : ISFs at the end of the frame */ + float *last_exc_dct_in, /* i : dct of residual signal of last frame */ + float *last_ener, /* i : frequency energy of last frame */ + int16_t *last_bitallocation_band, /* i : bit allocation flag of each band of last frame */ + int16_t *bitallocation_exc, /* i : flag of decoded coefficients */ + const int16_t bfi, /* i : bad frame indicator */ + const int16_t coder_type, /* i : coder type */ + const int16_t bwidth, /* i : audio bandwidth */ + float *exc_wo_nf, /* o : excitation (in f domain) without noisefill */ + const int16_t GSC_noisy_speech, /* i : GSC noisy speech flag */ + float *lt_ener_per_band_fx, /* i/o: Average per band energy */ + const int16_t L_frame, /* i : frame length */ + const int16_t element_mode, /* i : IVAS element moden */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +); + +void inact_switch_ematch( + float exc2[], /* i/o: CELP/GSC excitation buffer */ + float dct_exc_tmp[], /* i : GSC excitation in DCT domain */ + float lt_ener_per_band[], /* i/o: long-term energy per band */ + const int16_t coder_type, /* i : coder type */ + const int16_t L_frame, /* i : frame length */ + const int32_t total_brate, /* i : Total bitrate */ + const int16_t bfi, /* i : frame lost indicator */ + const int16_t last_core, /* i : Last core used */ + const int16_t last_codec_mode, /* i : Last codec mode */ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ + const int16_t element_mode /* i : element mode */ +); + +void music_postfilt_init( + MUSIC_POSTFILT_HANDLE hMusicPF /* i/o: LD music postfilter handle */ +); + +void LD_music_post_filter( + MUSIC_POSTFILT_HANDLE hMusicPF, /* i/o: LD music postfilter handle */ + const float dtc_in[], /* i : input synthesis */ + float dtc_out[], /* o : output synthesis */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t coder_type, /* i : Coder type : -1 in case of IO */ + const int16_t Last_coder_type /* i : last Coder type */ +); + +void Post_music_postP( + float dct_buffer_in[], /* i/o: excitation buffer */ + float exc_buffer_out[], /* o : DCT output buffer */ + float *exc2, /* i/o: Current excitation to be overwriten */ + const float *mem_tmp, /* i : previous frame synthesis memory */ + float *st_mem_syn2, /* i/o: current frame synthesis memory */ + const float *Aq, /* i : LPC filter coefficients */ + float *syn /* i/o: 12k8 synthesis */ +); + +void Prep_music_postP( + float exc_buffer_in[], /* i/o: excitation buffer */ + float dct_buffer_out[], /* o : DCT output buffer */ + float filt_lfE[], /* i/o: long term spectrum energy */ + const int16_t last_core, /* i : last core */ + const float *pitch_buf, /* i : current frame pitch information */ + float *LDm_enh_lp_gbin /* o : smoothed suppression gain, per bin FFT */ +); + +void speech_music_classif( + Encoder_State *st, /* i/o: encoder state structure */ + const float *new_inp, /* i : new input signal */ + const float *inp, /* i : input signal to locate attach position */ + const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ + const float lsp_new[M], /* i : LSPs in current frame */ + const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ + const float epsP[M + 1], /* i : LP prediciton error */ + const float PS[], /* i : energy spectrum */ + const float Etot, /* i : total frame energy */ + const float old_cor, /* i : max correlation from previous frame */ + int16_t *attack_flag, /* o : attack flag (GSC or TC) */ + const float non_staX, /* i : unbound non-stationarity for sp/mus classifier */ + const float relE, /* i : relative frame energy */ + int16_t *high_lpn_flag, /* o : sp/mus LPN flag */ + const int16_t flag_spitch /* i : flag to indicate very short stable pitch */ +); + +void find_wsp( + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr, /* i : length of subframe */ + const int16_t nb_subfr, /* i : number of subframes */ + const float *A, /* i : A(z) filter coefficients */ + float *Aw, /* o : weighted A(z) filter coefficients */ + const float *speech, /* i : pointer to the denoised speech frame */ + const float tilt_fact, /* i : tilt factor */ + float *wsp, /* o : poitnter to the weighted speech frame */ + float *mem_wsp, /* i/o: W(Z) denominator memory */ + const float gamma, /* i : weighting factor */ + const int16_t L_look /* i : look-ahead */ +); + +void pitch_ol_init( + float *old_thres, /* o : threshold for reinforcement of past pitch influence */ + int16_t *old_pitch, /* o : pitch of the 2nd half-frame of previous frame */ + int16_t *delta_pit, /* o : pitch evolution extrapolation */ + float *old_corr /* o : correlation */ +); + +void pitch_ol( + int16_t pitch[3], /* o : open loop pitch lag for each half-frame */ + float voicing[3], /* o : maximum normalized correlation for each half-frame */ + int16_t *old_pitch, /* i/o: OL pitch of the 2nd half-frame of the last frame */ + float *old_corr, /* i/o: correlation */ + float corr_shift, /* i : normalized correlation correction */ + float *old_thres, /* i/o: maximum correlation weighting with respect to past frame pitch */ + int16_t *delta_pit, /* i/o: old pitch extrapolation correction (added to old pitch) */ + float *st_old_wsp2, /* i/o: weighted speech memory */ + const float *wsp, /* i : weighted speech for current frame and look-ahead */ + float mem_decim2[3], /* i/o: wsp decimation filter memory */ + const float relE, /* i : relative frame energy */ + const int16_t L_look, /* i : look-ahead length */ + const int16_t last_class, /* i : frame classification of last frame */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t Opt_SC_VBR /* i : SC-VBR flag */ +); + +void pitch_ol2( + const int16_t pit_min, /* i : pit_min value */ + const int16_t pitch_ol, /* i : pitch to be improved */ + float *pitch_fr, /* o : adjusted 1/4 fractional pitch */ + float *voicing_fr, /* o : adjusted 1/4 fractional voicing */ + const int16_t pos, /* i : position in frame where to calculate the improv. */ + const float *wsp, /* i : weighted speech for current frame and look-ahead */ + const int16_t delta /* i : delta for pitch search */ +); + +void StableHighPitchDetect( + int16_t *flag_spitch, /* o : flag to indicate very short stable pitch */ + int16_t pitch[], /* i/o: OL pitch buffer */ + const float voicing[], /* i : OL pitch gains */ + const float Bin_E[], /* i : per bin log energy spectrum */ + const float wsp[], /* i : weighted speech */ + const int16_t localVAD, /* i : local VAD flag */ + float *voicing_sm, /* i/o: smoothed open-loop pitch gains */ + float *voicing0_sm, /* i/o: smoothed high pitch gains */ + float *LF_EnergyRatio_sm, /* i/o: smoothed [0, 300Hz] relative peak energy */ + int16_t *predecision_flag, /* i/o: predecision flag */ + float *diff_sm, /* i/o: smoothed pitch frequency difference */ + float *energy_sm /* i/o: smoothed energy around pitch frequency */ +); + +void pitchDoubling_det( + const float *wspeech, + int16_t *pitch_ol, + float *pitch_fr, + float *voicing_fr ); + +void gain_enc_amr_wb( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *xn, /* i : target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + const int32_t core_brate, /* i : core bitrate */ + float *gain_pit, /* i/o: Pitch gain / Quantized pitch gain */ + float *gain_code, /* o : Quantized codebook gain */ + float *gain_inov, /* o : innovation gain */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *coeff, /* i/o: correlations , -2,, -2 and 2 */ + const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ + float *past_qua_en /* i/o: gain quantization memory (4 words) */ +); + +void gain_enc_lbr( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe index */ + const float *xn, /* i : target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ + float gains_mem[], /* i/o: pitch gain and code gain from previous subframes */ + const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ + const int16_t L_subfr /* i : subfr Lenght */ +); + +void gain_enc_mless( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t element_mode, /* i : element mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *xn, /* i : target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + const float Es_pred, /* i : predicted scaled innovation energy */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : innovation gain */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *coeff, /* i/o: correlations , -2,, -2 and 2 */ + const int16_t clip_gain /* i : gain pitch clipping flag (1 = clipping) */ +); + +void gain_enc_SQ( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t i_subfr, /* i : subframe index */ + const float *xn, /* i : target vector */ + const float *yy1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + const float Es_pred, /* i : predicted scaled innovation energy */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ + const int16_t clip_gain /* i : gain pitch clipping flag (1 = clipping) */ +); + +/*! r: Return index of quantization */ +int16_t gain_enc_gaus( + float *gain, /* i/o: Code gain to quantize */ + const int16_t bits, /* i : number of bits to quantize */ + const float lowBound, /* i : lower bound of quantizer (dB) */ + const float topBound /* i : upper bound of quantizer (dB) */ +); + +void E_corr_xy2( + const float xn[], /* i : target vector */ + const float y1[], /* i : filtered excitation components 1 */ + const float y2[], /* i : filtered excitation components 2 */ + float g_corr[], /* o : correlations between x, y1, y2, y3, y4 */ + const int16_t L_subfr /* i : subframe size */ +); + +/*! r: Floating pitch for each subframe */ +float pit_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t pitch_bits[], /* i : pitch bits */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t coder_type, /* i : coding type */ + int16_t *limit_flag, /* i/o: restrained(0) or extended(1) Q limits */ + const int16_t i_subfr, /* i : subframe index */ + float *exc, /* i/o: pointer to excitation signal frame */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t *pitch, /* i : open loop pitch estimates in current frame */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +/*! r: coding type */ +int16_t find_uv( + Encoder_State *st, /* i/o: encoder state structure */ + const float *pitch_fr, /* i : pointer to adjusted fractional pitch (4 val.) */ + const float *voicing_fr, /* i : refined correlation for each subframes */ + const float *speech, /* i : pointer to speech signal for E computation */ + const float *ee, /* i : lf/hf Energy ratio for present frame */ + float *dE1X, /* o : sudden energy increase for S/M classifier */ + const float corr_shift, /* i : normalized correlation correction in noise */ + const float relE, /* i : relative frame energy */ + const float Etot, /* i : total energy */ + const float hp_E[], /* i : energy in HF */ + int16_t *flag_spitch, /* i/o: flag to indicate very short stable pitch and high correlation */ + const int16_t last_core_orig, /* i : original last core */ + STEREO_CLASSIF_HANDLE hStereoClf /* i/o: stereo classifier structure */ +); + +/*! r: classification for current frames */ +int16_t signal_clas( + Encoder_State *st, /* i/o: encoder state structure */ + const float *speech, /* i : pointer to speech signal for E computation */ + const float *ee, /* i : lf/hf E ration for 2 half-frames */ + const float relE, /* i : frame relative E to the long term average */ + const int16_t L_look, /* i : look-ahead */ + int16_t *clas_mod /* o : class flag for NOOP detection */ +); + +void select_TC( + const int16_t codec_mode, /* i : codec mode */ + const int16_t tc_cnt, /* i : TC frame counter */ + int16_t *coder_type, /* i/o: coder type */ + const int16_t localVAD /* i : VAD without hangover */ +); + +void coder_type_modif( + Encoder_State *st, /* i/o: encoder state structure */ + const float relE /* i : frame relative E to the long term average */ +); + +void wb_vad_init( + VAD_HANDLE hVAD /* i/o: VAD data handle */ +); + +int16_t dtx_hangover_addition( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t vad_flag, /* i : VAD flag */ + const float snr, /* i : input single SNR estimate */ + const int16_t cldfb_subtraction, /* i : */ + int16_t *vad_hover_flag, /* o : VAD hangover flag */ + VAD_HANDLE hVAD, /* i/o: VAD handle for L or R channel */ + NOISE_EST_HANDLE hNoiseEst /* i : Noise estimation handle */ +); + +int16_t wb_vad( + Encoder_State *st, /* i/o: encoder state structure */ + const float fr_bands[], /* i : per band input energy (contains 2 vectors) */ + int16_t *noisy_speech_HO, /* o : SC-VBR noisy speech HO flag */ + int16_t *clean_speech_HO, /* o : SC-VBR clean speech HO flag */ + int16_t *NB_speech_HO, /* o : SC-VBR NB speech HO flag */ + float *snr_sum_he, /* i : voicing metric from SAD */ + int16_t *localVAD_HE_SAD, /* o : HE_SAD decision without hangovers */ + int16_t *flag_noisy_speech_snr, /* o : */ + VAD_HANDLE hVAD, /* i/o: VAD handle */ + NOISE_EST_HANDLE hNoiseEst, /* i/o: Noise estimation handle */ + float lp_speech, /* i : long term active speech energy average */ + float lp_noise /* i : long term noise energy */ +); + +void bw_detect( + Encoder_State *st, /* i/o: Encoder State */ + const float signal_in[], /* i : input signal */ + float *spectrum, /* i : MDCT spectrum */ + const float *enerBuffer /* i : energy buffer */ +); + +void set_bw( + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + Encoder_State *st, /* i/o: Encoder State */ + const int16_t codec_mode /* i : codec mode */ +); + +float gaus_encode( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t i_subfr, /* i : subframe index */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + float *exc, /* o : pointer to excitation signal frame */ + float *mem_w0, /* o : weighting filter denominator memory */ + float *gp_clip_mem, /* o : memory of gain of pitch clipping algorithm */ + float *tilt_code, /* o : synthesis excitation spectrum tilt */ + float *code, /* o : algebraic excitation */ + float *gain_code, /* o : Code gain. */ + float *y2, /* o : zero-memory filtered adaptive excitation */ + float *gain_inov, /* o : innovation gain */ + float *voice_fac, /* o : voicing factor */ + float *gain_pit, /* o : adaptive excitation gain */ + float *norm_gain_code /* o : normalized innovative cb. gain */ +); + +void td_cng_enc_init( + TD_CNG_ENC_HANDLE hTdCngEnc, /* i/o: DTX/TD CNG data handle */ + const int16_t Opt_DTX_ON, /* i : flag indicating DTX operation */ + const int16_t max_bwidth /* i : maximum encoded bandwidth */ +); + +void dtx( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t vad, /* i : VAD flag for DTX */ + const float speech[] /* i : Pointer to the speech frame */ +); + +void dtx_hangover_control( + Encoder_State *st, /* i/o: encoder state structure */ + const float lsp_new[M] /* i : current frame LSPs */ +); + +void updt_enc( + Encoder_State *st, /* i/o: state structure */ + const float *old_exc, /* i : buffer of excitation */ + const float *pitch_buf, /* i : Floating pitch for each subframe */ + const float Es_pred, /* i : predicited scaled innovation energy */ + const float *Aq, /* i : A(z) quantized for all subframes */ + const float *lsf_new, /* i : current frame LSF vector */ + const float *lsp_new, /* i : current frame LSP vector */ + const float *old_bwe_exc /* o : buffer of excitation for SWB TBE */ +); + +void updt_enc_common( + Encoder_State *st, /* i/o: encoder state structure */ + const float Etot /* i : total energy */ +); + +void updt_IO_switch_enc( + Encoder_State *st, /* i/o: state structure */ + const int16_t input_frame /* i : input frame length */ +); + +void transition_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t i_subfr, /* i : subframe index */ + int16_t *tc_subfr, /* i/o: TC subframe index */ + int16_t *Jopt_flag, /* i : joint optimization flag */ + int16_t *position, /* i/o: maximum of residual signal index */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + float *exc, /* i/o: pointer to excitation signal frame */ + float *y1, /* o : zero-memory filtered adaptive excitation */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + float *xn2, /* o : target vector for innovation search */ + float *gp_cl, /* i/o: memory of gain of pitch clipping algorithm */ + float *gain_pit, /* o : adaptive excitation gain */ + float *g_corr, /* o : ACELP correlation values */ + int16_t *clip_gain, /* i/o: adaptive gain clipping flag */ + float **pt_pitch, /* o : floating pitch values */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + int16_t *unbits /* i/o: unused bits */ +); + +void tc_classif_enc( + const int16_t L_frame, /* i : length of the frame */ + int16_t *tc_subfr, /* i/o: TC subframe index */ + int16_t *position, /* i/o: maximum of residual signal index */ + const int16_t attack_flag, /* i : attack flag */ + const int16_t pitch, /* i : open loop pitch estimates for first halfframe */ + const float *res /* i : pointer to the LP residual signal frame */ +); + +void set_impulse( + const float xn[], /* i : target signal */ + const float h_orig[], /* i : impulse response of weighted synthesis filter */ + float exc[], /* o : adaptive codebook excitation */ + float y1[], /* o : filtered adaptive codebook excitation */ + int16_t *imp_shape, /* o : adaptive codebook index */ + int16_t *imp_pos, /* o : position of the glotal impulse center index */ + float *gain_trans /* o : transition gain */ +); + +void gain_enc_tc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t i_subfr, /* i : subframe index */ + const float xn[], /* i : target vector */ + const float y2[], /* i : zero-memory filtered algebraic codebook excitation */ + const float code[], /* i : algebraic excitation */ + const float Es_pred, /* i : predicted scaled innovation energy */ + float *gain_pit, /* o : pitch gain / Quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +); + +/*! r: pitch gain (0..GAIN_PIT_MAX) */ +float corr_xy1( + const float xn[], /* i : target signal */ + const float y1[], /* i : filtered adaptive codebook excitation */ + float g_corr[], /* o : correlations and -2 */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t norm_flag /* i : flag for constraining pitch contribution */ +); + +void norm_corr( + const float exc[], /* i : excitation buffer */ + const float xn[], /* i : target signal */ + const float h[], /* i : weighted synthesis filter impulse response */ + const int16_t t_min, /* i : minimum value of searched range */ + const int16_t t_max, /* i : maximum value of searched range */ + float corr_norm[], /* o : normalized correlation */ + const int16_t L_subfr /* i : subframe size */ +); + +/*! r: chosen integer pitch lag */ +int16_t pitch_fr4( + const float exc[], /* i : excitation buffer */ + const float xn[], /* i : target signal */ + const float h[], /* i : weighted synthesis filter impulse response */ + const int16_t t0_min, /* i : minimum value in the searched range. */ + const int16_t t0_max, /* i : maximum value in the searched range. */ + int16_t *pit_frac, /* o : chosen fraction (0, 1, 2 or 3) */ + const int16_t i_subfr, /* i : flag to first subframe */ + const int16_t limit_flag, /* i : flag for limits (0=restrained, 1=extended) */ + const int16_t t0_fr2, /* i : minimum value for resolution 1/2 */ + const int16_t t0_fr1, /* i : minimum value for resolution 1 */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr /* i : size of subframe */ +); + +void pit_Q_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t delta, /* i : Half the CL searched interval */ + const int16_t pit_flag, /* i : absolute(0) or delta(1) pitch Q */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max /* o : delta search max */ +); + +void pit16k_Q_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max /* o : delta search max */ +); + +/*! r: pitch index */ +int16_t abs_pit_enc( + const int16_t fr_steps, /* i : fractional resolution step */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac /* i : pitch fraction */ +); + +/*! r: pitch index */ +int16_t delta_pit_enc( + const int16_t fr_steps, /* i : fractional resolution steps (2 or 4) */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + const int16_t T0_min /* i : delta search min */ +); + +/*! r: comfort noise gain factor */ +float AVQ_cod( + const float xri[], /* i : vector to quantize */ + int16_t xriq[], /* o : quantized normalized vector (assuming the bit budget is enough) */ + const int16_t nb_bits, /* i : number of allocated bits */ + const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ +); + +void AVQ_encmux( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t extl, /* i : extension layer */ + int16_t xriq[], /* i/o: rounded subvectors [0..8*Nsv-1] followed by rounded bit allocations [8*Nsv..8*Nsv+Nsv-1] */ + int16_t *nb_bits, /* i/o: number of allocated bits */ + const int16_t Nsv, /* i : number of subvectors */ + int16_t nq[], /* o : AVQ nq index */ + int16_t avq_bit_sFlag, /* i : flag indicating AVQ bit savings */ + int16_t trgtSvPos /* i : target SV for AVQ bit savings */ +); + +void ordr_esti( + const int16_t k, /* i : sub-vector index */ + int16_t *Mpos, /* i/o: dominant sub-vector position from ACV */ + int16_t svOrder[], /* i/o: AVQ sub-vecotr order */ + const int16_t Nsv /* i : total sub-vectors in a sub-frames */ +); + +void re8_cod( + int16_t x[], /* i : point in RE8 (8-dimensional integer vector) */ + int16_t *n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ + uint16_t *I, /* o : index of c (pointer to unsigned 16-bit word) */ + int16_t k[] /* o : index of v (8-dimensional vector of binary indices) = Voronoi index */ +); + +void pre_exc( + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : frame length */ + const float *speech, /* i : input speech */ + const float *p_Aq, /* i : 12k8 Lp coefficient */ + const float *p_A, /* i : unquantized A(q) filter with bandwidth expansion */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : current sub frame indicator */ + float *Ap, /* o : weighted LP filter coefficients */ + const float *res, /* i : residual signal */ + float *h1, /* o : impulse response of weighted synthesis filter */ + float *xn, /* o : close-loop Pitch search target vector */ + float *cn, /* o : target vector in residual domain */ + float *mem_syn, /* i/o: memory of the synthesis filter */ + float *mem_w0, /* i/o: weighting filter denominator memory */ + const int16_t L_subfr /* i : subframe length */ +); + +void encod_unvoiced( + Encoder_State *st, /* i/o: state structure */ + const float *speech, /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float *Aq, /* i : LP coefficients */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const int16_t uc_two_stage_flag, /* i : flag indicating two-stage UC */ + const float *res, /* i : residual signal */ + float *syn, /* o : core synthesis */ + float *tmp_noise, /* o : long-term noise energy */ + float *exc, /* i/o: current non-enhanced excitation */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* i/o: excitation for SWB TBE */ +); + +void encod_gen_voic( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : LP coefficients */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *res, /* i : residual signal */ + float *syn, /* o : core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + int16_t *unbits, /* i/o: number of unused bits */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +int16_t encod_tran( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : LP coefficients */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *res, /* i : residual signal */ + float *syn, /* o : synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + int16_t tc_subfr, /* i/o: TC subframe classification */ + int16_t position, /* i : maximum of residual signal index */ + int16_t *unbits /* i/o: number of unused bits */ +); + +void encod_amr_wb( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : 12k8 Lp coefficient */ + const float *res, /* i : residual signal */ + float *syn, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + int16_t hf_gain[NB_SUBFR], /* o : decoded HF gain */ + const float *speech16k /* i : input speech @16kHz */ +); + +void stat_noise_uv_enc( + Encoder_State *st, /* i/o: state structure */ + const float *epsP, /* i : LP prediction errors */ + const float *isp_new, /* i : immittance spectral pairs at 4th sfr */ + const float *isp_mid, /* i : immittance spectral pairs at 2nd sfr */ + float *Aq, /* i/o: A(z) quantized for the 4 subframes */ + float *exc2, /* i/o: excitation buffer */ + const int16_t uc_two_stage_flag /* o : flag undicating two-stage UC */ +); + +void re8_compute_base_index( + const int16_t *x, /* i : Elemen of Q2, Q3 or Q4 */ + const int16_t ka, /* i : Identifier of the absolute leader related to x */ + uint16_t *I /* o : index */ +); + +void transf_cdbk_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t harm_flag_acelp, /* i : harmonic flag for higher rates ACELP */ + const int16_t i_subfr, /* i : subframe index */ + float cn[], /* i/o: target vector in residual domain */ + float exc[], /* i/o: pointer to excitation signal frame */ + const float *p_Aq, /* i : 12k8 Lp coefficient */ + const float Ap[], /* i : weighted LP filter coefficients */ + const float h1[], /* i : weighted filter input response */ + float xn[], /* i/o: target vector */ + float xn2[], /* i/o: target vector for innovation search */ + float y1[], /* i/o: zero-memory filtered adaptive excitation */ + const float y2[], /* i : zero-memory filtered innovative excitation */ + const float Es_pred, /* i : predicited scaled innovation energy */ + float *gain_pit, /* i/o: adaptive excitation gain */ + const float gain_code, /* i : innovative excitation gain */ + float g_corr[], /* o : ACELP correlation values */ + const int16_t clip_gain, /* i : adaptive gain clipping flag */ + float *gain_preQ, /* o : prequantizer excitation gain */ + float code_preQ[], /* o : prequantizer excitation */ + int16_t *unbits /* i/o: number of AVQ unused bits */ +); + +/*! r: quantization index */ +int16_t gain_quant( + float *gain, /* i/o: quantized gain */ + const float min_val, /* i : value of lower limit */ + const float max_val, /* i : value of upper limit */ + const int16_t bits /* i : number of bits to quantize */ +); + +void deemph_lpc( + float *p_Aq_cuerr, /* i : LP coefficients current frame */ + float *p_Aq_old, /* i : LP coefficients previous frame */ + float *LPC_de_curr, /* o : De-emphasized LP coefficients current frame */ + float *LPC_de_old, /* o : De-emphasized LP coefficients previous frame*/ + const int16_t deemph_old ); + +void Interpol_delay( + float *out, /* o : pitch interpolation output */ + float *last, /* i : last frame pitch lag */ + float *current, /* i : current frame pitch lag */ + int16_t SubNum, /* i : subframe number */ + const float *frac /* i : interpolation constant */ +); + +void dequantize_uvg( + int16_t iG1, /* i : gain 1 index */ + int16_t *iG2, /* i : gain 2 index */ + float *G, /* o : quantized gain */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void generate_nelp_excitation( + int16_t *seed, /* i/o: random number seed */ + float *Gains, /* i : excitation gains */ + float *output, /* o : excitation output */ + float gain_fac /* i : gain factor */ +); + +void nelp_encoder( + Encoder_State *st, /* i/o: encoder state */ + float *in, /* i : residual signal */ + float *exc, /* o : NELP quantized excitation signal */ + const int16_t reduce_gains ); + +void encod_nelp( + Encoder_State *st, /* i/o: state structure */ + const float *speech, /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float *Aq, /* i : 12k8 Lp coefficient */ + float *res, /* o : residual signal */ + float *synth, /* o : core synthesis */ + float *tmp_noise, /* o : long-term noise energy */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +); + +void realft( + float *data, /* i/o: data array */ + int16_t n, /* i : length of data array */ + int16_t isign /* i : sign +1 or -1 */ +); + +ivas_error DTFS_new( + DTFS_STRUCTURE **dtfs_out ); + +void DTFS_copy( + DTFS_STRUCTURE *Xout, /* o : DTFS */ + DTFS_STRUCTURE Xinp /* i : DTFS */ +); + +void DTFS_sub( + DTFS_STRUCTURE *tmp, /* o : output DFTS */ + DTFS_STRUCTURE X1, /* i : DTFS input 1 */ + DTFS_STRUCTURE X2 /* i : DTFS input 2 */ +); + +void DTFS_to_fs( + const float *x, /* i : Time domain signal */ + const int16_t N, /* i : Length of input vector */ + DTFS_STRUCTURE *X, /* o : DTFS structure with a, b, lag */ + const int32_t sampling_rate, + const int16_t FR_flag /* i : FR flag */ +); + +void DTFS_fs_inv( + DTFS_STRUCTURE *X, /* i : DTFS */ + float *x, /* o : time domain sig */ + const int16_t N, /* i : Output length */ + float ph0 /* i : Input phase */ +); + +void DTFS_car2pol( + DTFS_STRUCTURE *X /* i/o: DTFS structure a, b, lag */ + /* input in Cartesion, output in Polar */ +); + +void DTFS_pol2car( + DTFS_STRUCTURE *X /* i/o: DTFS structure a, b, lag */ + /* input in Polar, output in Cartesian */ +); + +/*! r: Return Input RMS between f1/f2 b4 scaling */ +float DTFS_setEngyHarm( + float f1, /* i : lower band freq of input to control energy */ + float f2, /* i : upper band freq of input to control energy */ + float g1, /* i : lower band freq of output to control energy */ + float g2, /* i : upper band freq of output to control energy */ + float en2, /* i : Target Energy to set the DTFS to */ + DTFS_STRUCTURE *X /* i/o: DTFS to adjust the energy of */ +); + +void DTFS_to_erb( + DTFS_STRUCTURE X, /* i : DTFS input */ + float *out /* o : ERB output */ +); + +void DTFS_zeroPadd( + const int16_t N, /* i : Target lag */ + DTFS_STRUCTURE *X /* i/o: DTFS */ +); + +/*! r: Energy */ +float DTFS_getEngy( + DTFS_STRUCTURE X /* i : DTFS to compute energy of */ +); + +void DTFS_adjustLag( + DTFS_STRUCTURE *X_DTFS, /* i/o: DTFS to adjust lag for */ + const int16_t N /* i : Target lag */ +); + +void DTFS_poleFilter( + DTFS_STRUCTURE *X, /* i/o: DTFS to poleFilter inplace */ + const float *LPC, /* i : LPCs */ + const int16_t N /* i : LPCORDER */ +); + +void DTFS_zeroFilter( + DTFS_STRUCTURE *X, /* i/o: DTFS to zeroFilter inplace */ + const float *LPC, /* i : LPCs */ + const int16_t N /* i : LPCORDER */ +); + +float DTFS_alignment_full( + DTFS_STRUCTURE X1_DTFS, /* i : reference DTFS */ + DTFS_STRUCTURE X2_DTFS, /* i : DTFS to shift */ + const int16_t num_steps /* i : resolution */ +); + +void DTFS_phaseShift( + DTFS_STRUCTURE *X, /* i : DTFS to shift */ + float ph /* i : phase to shift */ +); + +void erb_add( + float *curr_erb, /* i/o: current ERB */ + const int16_t l, /* i : current lag */ + const float *prev_erb, /* i : previous ERB */ + const int16_t pl, /* i : previous lag */ + const int16_t *index, /* i : ERB index */ + const int16_t num_erb /* i : number of ERBs */ +); + +void erb_slot( + int16_t lag, /* i : input lag */ + int16_t *out, /* o : ERB slots */ + float *mfreq, /* i : ERB frequencies */ + int16_t num_erb /* i : number of ERBs */ +); + +void erb_diff( + const float *prev_erb, /* i : previous ERB */ + const int16_t pl, /* i : previous lag */ + const float *curr_erb, /* i : current ERB */ + const int16_t l, /* i : current lag */ + const float *curr_lsp, /* i : current LSP coefficients */ + float *out, /* o : ERB difference */ + int16_t *index, /* i : ERB index */ + const int16_t num_erb /* i : Number of ERBs */ +); + +void DTFS_erb_inv( + float *in, /* i : ERB inpt */ + int16_t *slot, /* i : ERB slots filled based on lag */ + float *mfreq, /* i : erb frequence edges */ + DTFS_STRUCTURE *X, /* o : DTFS after erb-inv */ + const int16_t num_erb /* i : Number of ERB bands */ +); + +ivas_error ppp_quarter_encoder( + int16_t *returnFlag, /* o : return value */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + DTFS_STRUCTURE *CURRCW_Q, /* o : Quantized (amp/phase) DTFS */ + DTFS_STRUCTURE *TARGETCW, /* o : DTFS with quant phase but unquant Amp */ + const int16_t prevCW_lag, /* i : previous lag */ + DTFS_STRUCTURE vCURRCW_NQ, /* i : Unquantized DTFS */ + const float *curr_lpc, /* i : LPCS */ + float *lastLgainE, /* i/o: last low band gain */ + float *lastHgainE, /* i/o: last high band gain */ + float *lasterbE, /* i/o: last ERB vector */ + DTFS_STRUCTURE PREV_CW_E /* i : past DTFS */ +); + +ivas_error WIsyn( + DTFS_STRUCTURE PREVCW, /* i : Prev frame DTFS */ + DTFS_STRUCTURE *CURR_CW_DTFS, /* i/o: Curr frame DTFS */ + const float *curr_lpc, /* i : LPC */ + float *ph_offset, /* i/o: Phase offset to line up at end of frame */ + float *out, /* o : Waveform Interpolated time domain signal */ + const int16_t N, /* i : Number of samples of output to generate */ + const int16_t FR_flag /* i : called for post-smoothing in FR */ +); + +void set_ppp_mode( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t noisy_speech_HO, /* i : SC-VBR noisy speech HO flag */ + const int16_t clean_speech_HO, /* i : SC-VBR clean speech HO flag */ + const int16_t NB_speech_HO, /* i : SC-VBR NB speech HO flag */ + const int16_t localVAD_he /* i : HE-SAD flag without hangover */ +); + +void lsf_syn_mem_backup( + Encoder_State *st, /* i : state structure */ + float *btilt_code, /* i : tilt code */ + float *bgc_threshold, /* i : */ + float *clip_var_bck, /* o : */ + int16_t *next_force_sf_bck, /* o : */ + float *lsp_new, /* i : LSP vector to quantize */ + float *lsp_mid, /* i : mid-frame LSP vector */ + float *clip_var, /* o : pitch clipping state var */ + float *mem_AR, /* o : quantizer memory for AR model */ + float *mem_MA, /* o : quantizer memory for AR model */ + float *lsp_new_bck, /* o : LSP vector to quantize- backup */ + float *lsp_mid_bck, /* o : mid-frame LSP vector - backup */ + float *Bin_E, /* o : FFT Bin energy 128 *2 sets */ + float *Bin_E_old, /* o : FFT Bin energy 128 sets */ + float *mem_syn_bck, /* o : synthesis filter memory */ + float *mem_w0_bck, /* o : memory of the weighting filter */ + float *streaklimit, + int16_t *pstreaklen ); + +void lsf_syn_mem_restore( + Encoder_State *st, /* o : state structure */ + float btilt_code, /* i : */ + float gc_threshold, /* i : */ + float *clip_var_bck, /* i : */ + int16_t next_force_sf_bck, /* i : */ + float *lsp_new, /* o : LSP vector to quantize */ + float *lsp_mid, /* o : mid-frame LSP vector */ + float clip_var, /* i : pitch clipping state var */ + float *mem_AR, /* i : quantizer memory for AR model */ + float *mem_MA, /* i : quantizer memory for AR model */ + float *lsp_new_bck, /* i : LSP vector to quantize- backup */ + float *lsp_mid_bck, /* i : mid-frame LSP vector - backup */ + float *Bin_E, /* i : FFT Bin energy 128 *2 sets */ + float *Bin_E_old, /* i : FFT Bin energy 128 sets */ + float *mem_syn_bck, /* i : synthesis filter memory */ + float mem_w0_bck, /* i : memory of the weighting filter */ + const float streaklimit, + const int16_t pstreaklen ); + +ivas_error ppp_voiced_encoder( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t last_coder_type_raw, /* i : raw last_coder_type */ + const float old_pitch_buf[], /* i : buffer of old subframe pitch values */ + float *in, /* i : residual signal */ + float *out, /* o : Quantized residual signal */ + const int16_t delay, /* i : open loop pitch */ + float *lpc1, /* i : prev frame de-emphasized LPC */ + float *lpc2, /* i : current frame de-emphasized LPC */ + float *exc, /* i : previous frame quantized excitation */ + float *pitch /* o : floating pitch values for each subframe */ +); + +ivas_error encod_ppp( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : 12k8 Lp coefficient */ + float *res, /* i/o: residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +); + +void reset_rf_indices( + RF_ENC_HANDLE hRF, /* i/o: RF state structure */ + const int16_t L_frame, /* i : frame length */ + int16_t *rf_target_bits_write ); + +void signalling_enc_rf( + Encoder_State *st /* i/o: encoder state structure */ +); + +ivas_error acelp_core_dec( + Decoder_State *st, /* i/o: Decoder state structure */ + float output[], /* o : synthesis @internal Fs */ + float synth[], /* o : synthesis */ + float save_hb_synth[], /* o : HB synthesis */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float old_syn_12k8_16k[], /* o : intermediate ACELP synthesis at 12.8kHz or 16kHz to be used by SWB BWE */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ + int16_t *unbits, /* o : number of unused bits */ + int16_t *sid_bw, /* o : 0-NB/WB, 1-SWB SID */ + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ + const float tdm_lspQ_PCh[M], /* i : Q LSPs for primary channel */ + const float tdm_lsfQ_PCh[M], /* i : Q LSFs for primary channel */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t last_element_mode, /* i : last element mode */ + const int32_t last_element_brate, /* i : last element bitrate */ + const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ + const int16_t nchan_out, /* i : number of output channels */ + STEREO_CNG_DEC_HANDLE hStereoCng /* i : stereo CNG handle */ +); + +void bass_psfilter_init( + BPF_DEC_HANDLE hBPF /* o : BPF data handle */ +); + +void bass_psfilter( + BPF_DEC_HANDLE hBPF, /* o : BPF data handle */ + const int16_t Opt_AMR_WB, /* i : AMR-WB IO flag */ + const float synth_in[], /* i : synthesis (at 16kHz) */ + const int16_t L_frame, /* i : length of the last frame */ + const float pitch_buf[], /* i : pitch for every subfr [0,1,2,3] */ + const int16_t bpf_off, /* i : do not use BPF when set to 1 */ + float v_stab, /* i : stability factor */ + float *v_stab_smooth, /* i : smoothed stability factor */ + const int16_t coder_type, /* i : coder_type */ + float bpf_noise_buf[] /* o : BPF error signal (at int_fs) */ +); + +void CNG_reset_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *pitch_buf, /* o : floating pitch for each subframe */ + float *voice_factors /* o : voicing factors */ +); + +void updt_dec( + Decoder_State *st, /* i/o: state structure */ + const float *old_exc, /* i : buffer of excitation */ + const float *pitch_buf, /* i : floating pitch values for each subframe */ + const float Es_pred, /* i : predicited scaled innovation energy */ + const float *Aq, /* i : A(z) quantized for all subframes */ + const float *lsf_new, /* i : current frame LSF vector */ + const float *lsp_new, /* i : current frame LSP vector */ + const float voice_factors[], /* i : voicing factors */ + const float *old_bwe_exc, /* i : buffer of excitation */ + const float *gain_buf /* o : floating pitch gain for each subframe */ +); + +void updt_IO_switch_dec( + const int16_t output_frame, /* i : output frame length */ + Decoder_State *st /* i/o: state structure */ +); + +void updt_dec_common( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t hq_core_type, /* i : HQ core type */ + const int16_t concealWholeFrameTmp, /* i : concealWholeFrameTmp flag */ + const float *synth /* i : decoded synthesis */ +); + +void td_cng_dec_init( + DEC_CORE_HANDLE st /* i/o: decoder state structure */ +); + +void CNG_dec( + Decoder_State *st, /* i/o: State structure */ + const int16_t last_element_mode, /* i : last element mode */ + float Aq[], /* o : LP coefficients */ + float *lsp_new, /* i/o: current frame LSPs */ + float *lsf_new, /* i/o: current frame LSFs */ + int16_t *allow_cn_step, /* o : allow cn step */ + int16_t *sid_bw, /* o : 0-NB/WB, 1-SWB SID */ + float *q_env ); + +void swb_CNG_dec( + Decoder_State *st, /* i/o: State structure */ + const float *synth, /* i : ACELP core synthesis at 32kHz */ + float *shb_synth, /* o : high-band CNG synthesis */ + const int16_t sid_bw /* i : 0-NB/WB, 1-SWB SID */ +); + +void lsf_dec( + Decoder_State *st, /* i/o: State structure */ + const int16_t tc_subfr, /* i : TC subframe index */ + float *Aq, /* o : quantized A(z) for 4 subframes */ + int16_t *LSF_Q_prediction, /* o : LSF prediction mode */ + float *lsf_new, /* o : de-quantized LSF vector */ + float *lsp_new, /* o : de-quantized LSP vector */ + float *lsp_mid, /* o : de-quantized mid-frame LSP vector */ + const int16_t tdm_low_rate_mode /* i : secondary channel low rate mode flag */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +#endif +); + +void isf_dec_amr_wb( + Decoder_State *st, /* i/o: State structure */ + float *Aq, /* o : quantized A(z) for 4 subframes */ + float *isf_new, /* o : de-quantized ISF vector */ + float *isp_new /* o : de-quantized ISP vector */ +); + +void Es_pred_dec( + float *Es_pred, /* o : predicted scaled innovation energy */ + const int16_t enr_idx, /* i : indice */ + const int16_t nb_bits, /* i : number of bits */ + const int16_t no_ltp /* i : no LTP flag */ +); + +void gaus_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t i_subfr, /* i : subframe index */ + float *code, /* o : gaussian excitation */ + float *norm_gain_code, /* o : gain of the normalized gaussian excitation */ + float *lp_gainp, /* i/o: lp filtered pitch gain(FER) */ + float *lp_gainc, /* i/o: lp filtered code gain (FER) */ + float *gain_inov, /* o : unscaled innovation gain */ + float *tilt_code, /* o : synthesis excitation spectrum tilt */ + float *voice_fac, /* o : estimated voicing factor */ + float *gain_pit, /* o : reset pitch gain */ + float *pt_pitch, /* o : reset floating pitch buffer */ + float *exc, /* o : excitation signal frame */ + float *gain_code, /* o : gain of the gaussian excitation */ + float *exc2 /* o : scaled excitation signal frame */ +); + +void gain_dec_amr_wb( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *past_qua_en, /* i/o: gain quantization memory (4 words) */ + float *gain_inov, /* o : unscaled innovation gain */ + const float *code, /* i : algebraic code excitation */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +); + +void gain_dec_lbr( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe index */ + const float *code, /* i : algebraic excitation */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float gains_mem[], /* i/o: pitch gain and code gain from previous subframes */ + const int16_t L_subfr /* i : subframe length */ +); + +void gain_dec_mless( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe number */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *code, /* i : algebraic code excitation */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *gain_inov, /* o : unscaled innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +); + +void gain_dec_SQ( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t i_subfr, /* i : subframe number */ + const float *code, /* i : algebraic code excitation */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *gain_inov, /* o : unscaled innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +); + +/*! r: quantized codebook gain */ +float gain_dec_gaus( + const int16_t index, /* i : quantization index */ + const int16_t bits, /* i : number of bits to quantize */ + const float lowBound, /* i : lower bound of quantizer (dB) */ + const float topBound, /* i : upper bound of quantizer (dB) */ + const float gain_inov, /* i : unscaled innovation gain */ + float *norm_gain_code /* o : gain of normalized gaus. excit. */ +); + +/*! r: floating pitch value */ +float pit_decode( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + int16_t i_subfr, /* i : subframe index */ + const int16_t coder_type, /* i : coding type */ + int16_t *limit_flag, /* i/o: restrained(0) or extended(1) Q limits */ + int16_t *T0, /* o : close loop integer pitch */ + int16_t *T0_frac, /* o : close loop fractional part of the pitch */ + int16_t *T0_min, /* i/o: delta search min for sf 2 & 4 */ + int16_t *T0_max, /* i/o: delta search max for sf 2 & 4 */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +void abs_pit_dec( + const int16_t fr_steps, /* i : fractional resolution steps (0, 2, 4) */ + int16_t pitch_index, /* i : pitch index */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac /* o : pitch fraction */ +); + +void delta_pit_dec( + const int16_t fr_steps, /* i : fractional resolution steps (0, 2, 4) */ + const int16_t pitch_index, /* i : pitch index */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + const int16_t T0_min /* i : delta search min */ +); + +void pit_Q_dec( + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t pitch_index, /* i : pitch index */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t delta, /* i : Half the CL searched interval */ + const int16_t pit_flag, /* i : absolute(0) or delta(1) pitch Q */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max, /* i/o: delta search max */ + int16_t *BER_detect /* o : BER detect flag */ +); + +void pit16k_Q_dec( + const int16_t pitch_index, /* i : pitch index */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max, /* i/o: delta search max */ + int16_t *BER_detect /* o : BER detect flag */ +); + +void lp_filt_exc_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t codec_mode, /* i : codec mode */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t L_subfr, /* i : subframe size */ + const int16_t L_Frame, /* i : frame size */ + int16_t lp_flag, /* i : operation mode signalling */ + float *exc /* i/o: pointer to the excitation signal frame */ +); + +void inov_decode( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const int16_t i_subfr, /* i : subframe index */ + const float *p_Aq, /* i : LP filter coefficients */ + const float tilt_code, /* i : tilt of of the excitation of previous subframe */ + const float pt_pitch, /* i : pointer to current subframe fractional pitch */ + float *code, /* o : algebraic excitation */ + const int16_t L_subfr /* i : subframe length */ +); + +void dec_acelp_1t64( + Decoder_State *st, /* i/o: decoder state structure */ + float code[], /* o : algebraic (fixed) codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +); + +void dec_acelp_2t32( + Decoder_State *st, /* i/o: decoder state structure */ + float code[] /* o : algebraic (fixed) codebook excitation */ +); + +void dec_acelp_4t64( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t nbbits, /* i : number of bits per codebook */ + float code[], /* o : algebraic (fixed) codebook excitation */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +); + +uint32_t syn_output( + float *synth, /* i/o: float synthesis signal */ + const int16_t output_frame, /* i : output frame length */ + int16_t *synth_out /* o : integer 16 bits synthesis signal */ +); + +void FEC_exc_estim( + Decoder_State *st, /* i/o: Decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + float *old_exc, /* i/o: excitation buffer */ + float *exc2, /* o : excitation buffer (for synthesis) */ + float *exc_dct_in, /* o : GSC excitation in DCT domain */ + float *pitch_buf, /* o : Floating pitch for each subframe */ + float *tmp_tc, /* o : FEC pitch */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + float *lsf_new, /* i : ISFs at the end of the frame */ + float *tmp_noise /* o : long-term noise energy */ +); + +void FEC_lsf2lsp_interp( + Decoder_State *st, /* i/o: Decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + float *Aq, /* o : calculated A(z) for 4 subframes */ + float *lsf, /* o : estimated LSF vector */ + float *lsp /* o : estimated LSP vector */ +); + +void FEC_lsf_estim_enc( + Encoder_State *st, /* i : Encoder static memory */ + float *lsf /* o : estimated LSF vector */ +); + +float frame_energy( + const int16_t L_frame, /* i : length of the frame */ + const float *pitch, /* i : pitch values for each subframe */ + const float *speech, /* i : pointer to speech signal for E computation */ + const float lp_speech, /* i : long term active speech energy average */ + float *frame_ener /* o : pitch-synchronous energy at frame end */ +); + +void FEC_SinOnset( + float *exc, /* i/o: exc vector to modify */ + int16_t puls_pos, /* i : Last pulse position desired */ + int16_t T0, /* i : decoded first frame pitch */ + float enr_q, /* i : energy provided by the encoder */ + float *Aq, /* i : Lsp coefficient */ + const int16_t L_frame /* i : Frame length */ +); + +int16_t FEC_enhACB( + const int16_t L_frame, /* i : Frame length */ + const int16_t last_L_frame, /* i : frame length of last frame */ + float *exc_io, /* i/o: Adaptive codebook memory */ + const int16_t new_pit, /* i : decoded first frame pitch */ + const int16_t puls_pos, /* i : decoder position of the last glottal pulses decoded in the previous frame */ + const float bfi_pitch /* i : Pitch used for concealment */ +); + +void FEC_scale_syn( + const int16_t L_frame, /* i : length of the frame */ + int16_t clas, /* i/o: frame classification */ + const int16_t last_good, /* i : last good frame classification */ + float *synth, /* i/o: synthesized speech at Fs = 12k8 Hz */ + const float *pitch, /* i : pitch values for each subframe */ + float enr_old, /* i : energy at the end of prvious frame */ + float enr_q, /* i : transmitted energy for current frame */ + const int16_t coder_type, /* i : coding type */ + const int16_t LSF_Q_prediction, /* i : LSF prediction mode */ + int16_t *scaling_flag, /* i/o: flag to indicate energy control of syn */ + float *lp_ener_FEC_av, /* i/o: averaged voiced signal energy */ + float *lp_ener_FEC_max, /* i/o: averaged voiced signal energy */ + const int16_t bfi, /* i : current frame BFI */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t prev_bfi, /* i : previous frame BFI */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + float *exc, /* i/o: excitation signal without enhancement */ + float *exc2, /* i/o: excitation signal with enhancement */ + const float Aq[], /* i : LP filter coefs */ + float *old_enr_LP, /* i/o: LP filter E of last good voiced frame */ + const float *mem_tmp, /* i : temp. initial synthesis filter states */ + float *mem_syn, /* o : initial synthesis filter states */ + const int16_t avoid_lpc_burst_on_recovery, /* i : if true the excitation energy is limited if LP has big gain */ + const int16_t force_scaling /* i : force scaling */ +); + +void FEC_pitch_estim( + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t last_core, /* i : last core */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t clas, /* i : current frame classification */ + const int16_t last_good, /* i : last good clas information */ + const float pitch_buf[], /* i : Floating pitch for each subframe */ + const float old_pitch_buf[], /* i : buffer of old subframe pitch values */ + float *bfi_pitch, /* i/o: update of the estimated pitch for FEC */ + int16_t *bfi_pitch_frame, /* o : frame length when pitch was updated */ + int16_t *upd_cnt, /* i/o: update counter */ + const int16_t coder_type ); + +void FEC_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const ACELP_config acelp_cfg, /* i : configuration of the ACELP */ + const float *synth, /* i : pointer to synthesized speech for E computation */ + const int16_t coder_type, /* i : type of coder */ + int16_t clas, /* i : signal clas for current frame */ + const float *fpit, /* i : close loop fractional pitch buffer */ + const float *res, /* i : LP residual signal frame */ + int16_t *last_pulse_pos, /* i/o: Position of the last pulse */ + const int16_t L_frame, /* i : Frame length */ + const int32_t total_brate /* i : total codec bitrate */ +); + +int16_t FEC_pos_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *last_pulse_pos, /* o : Last glotal pulse position in the lost ACB */ + float *enr_q, /* o : Decoded energy */ + const int16_t nBits_es_Pred /* i : number of bits for Es_pred Q */ +); + +void improv_amr_wb_gs( + const int16_t clas, /* i : bitrate allocated to the core */ + const int16_t coder_type, /* i : coder_type */ + const int32_t core_brate, /* i : bitrate allocated to the core */ + int16_t *seed_tcx, /* i/o: Seed used for noise generation */ + float *old_Aq, /* i/o: old LPC filter coefficient */ + float *mem_syn2, /* i/o: synthesis memory */ + const float lt_voice_fac, /* i/o: long term voice factor */ + const int16_t locattack, /* i : Flag for a detected attack */ + float *Aq, /* i/o: Decoded LP filter coefficient */ + float *exc2, /* i/o: Decoded complete excitation */ + float *mem_tmp, /* i/o: synthesis temporary memory */ + float *syn, /* i/o: Decoded synthesis to be updated */ + const float *pitch_buf, /* i : Decoded pitch buffer */ + const float Last_ener, /* i : Last energy */ + const int16_t rate_switching_reset, /* i : rate switching reset flag */ + const int16_t last_coder_type, /* i : Last coder_type */ + const int16_t VeryLowRateSTflag /* i : Enable the noise enhancement for very low rate stereo generic mode */ +); + +int16_t tc_classif( + Decoder_State *st /* i/o: decoder state structure */ +); + +void transition_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t tc_subfr, /* i : TC subframe index */ + int16_t *Jopt_flag, /* i : joint optimization flag */ + float *exc, /* i/o: current frame excitation signal */ + int16_t *T0, /* o : close loop integer pitch */ + int16_t *T0_frac, /* o : close loop fractional part of the pitch */ + int16_t *T0_min, /* i/o: delta search min for sf 2 & 4 */ + int16_t *T0_max, /* i/o: delta search max for sf 2 & 4 */ + float **pt_pitch, /* o : floating pitch values */ + int16_t *position, /* i/o: first glottal impulse position in frame */ + float *bwe_exc /* i/o: excitation for SWB TBE */ +); + +void gain_dec_tc( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t i_subfr, /* i : subframe number */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *code, /* i : algebraic code excitation */ + float *gain_pit, /* o : pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *gain_inov, /* o : unscaled innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excit. */ +); + +void stat_noise_uv_dec( + Decoder_State *st, /* i/o: decoder static memory */ + const float *lsp_new, /* i : end-frame LSP vector */ + const float *lsp_mid, /* i : mid-frame LSP vector */ + float *Aq, /* o : A(z) quantized for the 4 subframes */ + float *exc2, /* i/o: excitation buffer */ + const int16_t uc_two_stage_flag /* 1 : flag undicating two-stage UC */ +); + +void sc_vbr_dec_init( + SC_VBR_DEC_HANDLE hSC_VBR /* i/o: SC-VBR decoder handle */ +); + +void decod_nelp( + Decoder_State *st, /* i/o: decoder static memory */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *exc, /* o : adapt. excitation exc */ + float *exc2, /* o : adapt. excitation/total exc */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t bfi, /* i : bad frame indicator */ + float *gain_buf /* o : floating pitch gain for each subframe */ +); + +void nelp_decoder( + Decoder_State *st, /* i/o: decoder static memory */ + float *exc_nelp, /* o : adapt. excitation/total exc */ + float *exc, /* o : adapt. excitation exc */ + int16_t bfi, /* i : frame error rate */ + const int16_t coder_type, /* i : coding type */ + float *gain_buf /* o : floating pitch gain for each subframe */ +); + +ivas_error decod_ppp( + Decoder_State *st, /* i/o: state structure */ + const float Aq[], /* i : 12k8 Lp coefficient */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t bfi /* i : BFI flag */ +); + +ivas_error ppp_quarter_decoder( + Decoder_State *st, /* i/o: decoder state structure */ + DTFS_STRUCTURE *CURRCW_Q_DTFS, /* i/o: Current CW DTFS */ + int16_t prevCW_lag, /* i : Previous lag */ + float *lastLgainD, /* i/o: Last gain lowband */ + float *lastHgainD, /* i/o: Last gain highwband */ + float *lasterbD, /* i/o: Last ERB vector */ + int16_t bfi, /* i : FER flag */ + DTFS_STRUCTURE PREV_CW_D /* i : Previous DTFS */ +); + +ivas_error ppp_voiced_decoder( + Decoder_State *st, /* i/o: state structure */ + float *out, /* o : residual signal */ + const float *lpc2, /* i : current frame LPC */ + float *exc, /* i : previous frame excitation */ + float *pitch, /* o : floating pitch values for each subframe */ + const int16_t bfi /* i : BFI flag */ +); + +void AVQ_demuxdec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t xriq[], /* o : decoded subvectors [0..8*Nsv-1] */ + int16_t *nb_bits, /* i/o: number of allocated bits */ + const int16_t Nsv, /* i : number of subvectors */ + int16_t nq[], /* i/o: AVQ nq index */ + int16_t avq_bit_sFlag, /* i : flag for AVQ bit saving solution*/ + int16_t trgtSvPos /* i : target SV for AVQ bit savings */ +); + +void re8_dec( + int16_t nq, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ + const uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ + const int16_t kv[], /* i : index of v (8-dimensional vector of binary indices) = Voronoi index */ + int16_t y[] /* o : point in RE8 (8-dimensional integer vector) */ +); + +void re8_decode_base_index( + const int16_t n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ + uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ + int16_t *x /* o : point in RE8 (8-dimensional integer vector) */ +); + +void Init_post_filter( + PFSTAT_HANDLE hPFstat /* i : post-filter state memories */ +); + +void nb_post_filt( + const int16_t L_frame, /* i : frame length */ + const int16_t L_subfr, /* i : sub-frame length */ + PFSTAT_HANDLE hPFstat, /* i/o: Post filter related memories */ + float *lp_noise, /* i/o: long term noise energy */ + const float tmp_noise, /* i : noise energy */ + float *synth, /* i/o: synthesis */ + const float *Aq, /* i : LP filter coefficient */ + const float *pitch_buf, /* i : Floating pitch for each subframe */ + const int16_t coder_type, /* i : coder_type -> deactivated in AUDIO */ + const int16_t BER_detect, /* i : BER detect flag */ + const int16_t disable_hpf /* i : flag to diabled HPF */ +); + +void decod_unvoiced( + Decoder_State *st, /* i/o: decoder static memory */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const int16_t uc_two_stage_flag, /* i : flag indicating two-stage UC */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* o : adapt. excitation exc */ + float *exc2, /* o : adapt. excitation/total exc */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + float *gain_buf /* o : floating pitch gain for each subfram */ +); + +void decod_tran( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + int16_t *unbits, /* i/o: number of unused bits */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + float *gain_buf /* o : floating pitch gain for each subframe */ +); + +ivas_error decod_gen_voic( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const int16_t do_WI, /* i : FEC fast recovery flag */ + float *pitch_buf, /* o : floating pitch for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + int16_t *unbits, /* i/o: number of unused bits */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +); + +void decod_amr_wb( + Decoder_State *st, /* i/o: decoder static memory */ + const float *Aq, /* i : LP filter coefficients */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + int16_t hf_gain[NB_SUBFR], /* o : decoded HF gain */ + float *voice_factors, /* o : voicing factors */ + float *gain_buf /* o : floating pitch gain for each subframe */ +); + +ivas_error init_decoder( + Decoder_State *st, /* o : Decoder static variables structure */ + const int16_t idchan /* i : channel ID */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const MC_MODE mc_mode /* i : MC mode */ +#endif +); + +void destroy_decoder( + Decoder_State *st /* o : Decoder static variables structure */ +); + +void HQ_core_dec_init( + HQ_DEC_HANDLE hHQ_core /* i/o: HQ core data handle */ +); + +void HQ_nbfec_init( + HQ_NBFEC_HANDLE hHQ_nbfec /* i/o: HQ NB FEC data handle */ +); + +ivas_error evs_dec( + Decoder_State *st, /* i/o: Decoder state structure */ + float mem_hp20_out[L_HP20_MEM], /* i/o: HP filter memory for synthesis */ + float *output, /* o : output synthesis signal */ + FRAME_MODE frameMode /* i : Decoder frame mode */ +); + +void get_next_frame_parameters( + Decoder_State *st /* i/o: Decoder state structure */ +); + +ivas_error amr_wb_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float mem_hp20_out[L_HP20_MEM], /* i/o: HP filter memory for synthesis */ + float *output /* o : synthesis output */ +); + +void transf_cdbk_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t harm_flag_acelp, /* i : harmonic flag for higher rates ACELP */ + const int16_t i_subfr, /* i : subframe index */ + const float Es_pred, /* i : predicited scaled innovation energy */ + const float gain_code, /* i : innovative excitation gain */ + float *gain_preQ, /* o : prequantizer excitation gain */ + float *norm_gain_preQ, /* o : normalized prequantizer excitation gain */ + float code_preQ[], /* o : prequantizer excitation */ + int16_t *unbits /* o : number of AVQ unused bits */ +); + +/*! r: decoded gain */ +float gain_dequant( + int16_t index, /* i : quantization index */ + const float min_val, /* i : value of lower limit */ + const float max_val, /* i : value of upper limit */ + const int16_t bits /* i : number of bits to dequantize */ +); + +void HQ_core_enc_init( + HQ_ENC_HANDLE hHQ_core /* i/o: HQ core data handle */ +); + +void hq_core_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *audio, /* i : input audio signal */ + const int16_t input_frame, /* i : frame length */ + const int16_t hq_core_type, /* i : HQ core type */ + const int16_t Voicing_flag, /* i : Voicing flag for FER method selection */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +int16_t detect_transient( + Encoder_State *st, /* i/o: encoder state structure */ + const float *in, /* i : input signal */ + const int16_t L /* i : length */ +); + +void wtda( + const float *new_audio, /* i : input audio */ + float *wtda_audio, /* o : windowed audio */ + float *old_wtda, /* i/o: windowed audio from previous frame */ + const int16_t left_mode, /* i : window overlap of previous frame (0: full, 2: none, or 3: half) */ + const int16_t right_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const int16_t L /* i : length */ +); + +void wtda_ext( + const float *new_audio, /* i : input audio */ + float *wtda_audio, /* o : windowed audio */ + const int16_t left_mode, /* i : window overlap of previous frame (0: full, 2: none, or 3: half) */ + const int16_t right_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const int16_t L, /* i : length */ + const uint16_t kernel_type /* i : transform kernel type (0 - 3) */ +); + +void tcx_get_windows_mode1( + const int16_t left_mode, /* i : overlap mode of left window half */ + const int16_t right_mode, /* i : overlap mode of right window half */ + float *left_win, /* o : left overlap window */ + float *right_win, /* o : right overlap window */ + float *left_win_int, /* o : left overlap window */ + float *right_win_int, /* o : right overlap window */ + const int16_t L /* i : length */ +); + +void direct_transform( + const float *in32, /* i : input signal */ + float *out32, /* o : output transformation */ + const int16_t is_transient, /* i : transient flag */ + const int16_t L, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +); + +/*! r: index of noise attenuation */ +int16_t noise_adjust( + const float *coeffs_norm, /* i : normalized coefficients */ + const int16_t *bitalloc, /* i : bit allocation */ + const int16_t *sfm_start, /* i : Start of bands */ + const int16_t *sfm_end, /* i : End of bands */ + const int16_t core_sfm /* i : index of the end band for core */ +); + +void interleave_spectrum( + float *coefs, /* i/o: input and output coefficients */ + const int16_t length /* i : length of spectrum */ +); + +void hq_hr_enc( + Encoder_State *st, /* i/o: encoder state structure */ + float *coefs, /* i/o: transform-domain coefficients */ + const int16_t length, /* i : length of spectrum */ + int16_t *num_bits, /* i/o: number of available bits */ + const int16_t is_transient, /* i : transient flag */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void logqnorm( + const float *x, /* i : coefficient vector */ + int16_t *k, /* o : index */ + const int16_t L, /* i : codebook length */ + const int16_t N, /* i : sub-vector size */ + const float *thren ); + +void huff_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : Number of codewords to decode */ + const int16_t buffer_len, /* i : Number of bits to read */ + const int16_t num_lengths, /* i : Number of different huffman codeword lengths */ + const int16_t *thres, /* i : Threshold of first codeword of each length */ + const int16_t *offset, /* i : Offset for first codeword */ + const int16_t *huff_tab, /* i : Huffman table order by codeword lengths */ + int16_t *index /* o : Decoded index */ +); + +void calc_norm( + const float *x, /* i : Input vector. */ + int16_t *norm, /* o : Quantization indices for norms */ + int16_t *normlg, /* o : Quantized norms in log2 */ + const int16_t start_band, /* i : Indice of band to start coding */ + const int16_t num_bands, /* i : Number of bands */ + const int16_t *band_len, /* i : Length of bands */ + const int16_t *band_start /* i : Start of bands */ +); + +void reordernorm( + const int16_t *ynrm, /* i : quantization indices for norms */ + const int16_t *normqlg2, /* i : quantized norms */ + int16_t *idxbuf, /* o : reordered quantization indices */ + int16_t *normbuf, /* o : reordered quantized norms */ + const int16_t nb_sfm /* i : number of bands */ +); + +void diffcod( + const int16_t N, /* i : number of sub-vectors */ + int16_t *y, /* i/o: indices of quantized norms */ + int16_t *difidx /* o : differential code */ +); + +void diffcod_lrmdct( + const int16_t N, /* i : number of sub-vectors */ + const int16_t be_ref, /* i : band energy reference */ + int16_t *y, /* i/o: indices of quantized norms */ + int16_t *difidx, /* o : differential code */ + const int16_t is_transient /* i : transient flag */ +); + +void normalizecoefs( + float *coefs, /* i/o: MDCT coefficients */ + const int16_t *ynrm, /* i : quantization indices for norms */ + const int16_t num_bands, /* i : Number of bands */ + const int16_t *band_start, /* i : Start of bands */ + const int16_t *band_end /* i : End of bands */ +); + +void bitallocsum( + int16_t *R, /* i : bit-allocation vector */ + const int16_t nb_sfm, /* i : number of sub-vectors */ + int16_t *sum, /* o : total number of bits allocated */ + int16_t *Rsubband, /* o : rate per subband (Q3) */ + const int16_t num_bits, /* i : number of bits */ + const int16_t length, /* i : length of spectrum */ + const int16_t *sfmsize /* i : Length of bands */ +); + +void hq_generic_hf_encoding( + const float *coefs, /* i : MDCT coefficients of weighted original */ + float *hq_generic_fenv, /* i/o: energy of SWB envelope */ + const int16_t hq_generic_offset, /* i : frequency offset for extracting energy */ + Encoder_State *st, /* i/o: encoder state structure */ + int16_t *hq_generic_exc_clas, /* o : HF excitation class */ + const int16_t length /* i : Length of spectrum */ +); + +/*! r: BWE class */ +int16_t swb_bwe_gain_deq( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t core, /* i : core */ + float *SWB_tenv, /* o : time-domain BWE envelope */ + float *SWB_fenv, /* o : frequency-domain BWE envelope */ + const int16_t hr_flag, /* i : high rate flag */ + const int16_t hqswb_clas /* i : HQ BWE class */ +); + +void save_old_syn( + const int16_t L_frame, /* i : frame length */ + const float syn[], /* i : ACELP synthesis */ + float old_syn[], /* o : old synthesis buffer */ + float old_syn_12k8_16k[], /* i/o: old synthesis buffer */ + const float preemph_fac, /* i : preemphasis factor */ + float *mem_deemph /* i/o: deemphasis filter memory */ +); + +void hq_generic_hf_decoding( + const int16_t HQ_mode, /* i : HQ mode */ + float *coeff_out1, /* i/o: BWE input & temporary buffer */ + const float *hq_generic_fenv, /* i : SWB frequency envelopes */ + float *coeff_out, /* o : SWB signal in MDCT domain */ + const int16_t hq_generic_offset, /* i : frequency offset for representing hq swb bwe*/ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + const int16_t hq_swb_bwe_exc_clas, /* i : bwe excitation class */ + const int16_t *R ); + +void hq_core_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float out[], /* o : output synthesis */ + const int16_t output_frame, /* i : output frame length */ + const int16_t hq_core_type, /* i : HQ core type */ + const int16_t core_switching_flag, /* i : ACELP->HQ switching frame flag */ + float *output /* o : LB synthesis in case of ACELP-HQ switch */ +); + +void IMDCT( + float *x, + float *old_syn_overl, + float *syn_Overl_TDAC, + float *xn_buf, + const float *tcx_aldo_window_1_trunc, + const float *tcx_aldo_window_2, + const float *tcx_mdct_window_half, + const float *tcx_mdct_window_minimum, + const float *tcx_mdct_window_trans, + const int16_t tcx_mdct_window_half_length, + const int16_t tcx_mdct_window_min_length, + int16_t index, + const uint16_t kernel_type, /* i : TCX transform kernel type */ + const int16_t left_rect, + const int16_t tcx_offset, + const int16_t overlap, + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t L_spec_TCX5, + const int16_t L_frame_glob, + const int16_t frame_cnt, + const int16_t bfi, + float *old_out, + const int16_t FB_flag, + Decoder_State *st, + const int16_t fullband, + float *acelp_zir ); + +void hq_hr_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *t_audio_q, /* o : transform-domain coefficients */ + const int16_t length, /* i : frame length */ + const int16_t num_bits, /* i : number of available bits */ + int16_t *ynrm, /* o : norm quantization index vector */ + int16_t *is_transient, /* o : transient flag */ + int16_t *hqswb_clas, /* o : HQ SWB class */ + float *SWB_fenv /* o : SWB frequency envelopes */ +); + +void hdecnrm_context( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of norms */ + int16_t *index, /* o : indices of quantized norms */ + int16_t *n_length /* o : decoded stream length */ +); + +void hdecnrm_tran( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of norms */ + int16_t *index /* o : indices of quantized norms */ +); + +void hdecnrm_resize( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of SFMs */ + int16_t *index /* o : norm quantization index vector */ +); + +void hdecnrm( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of norms */ + int16_t *index /* o : indices of quantized norms */ +); + +/*! r: index of last band */ +int16_t find_last_band( + const int16_t *bitalloc, /* i : bit allocation */ + const int16_t nb_sfm /* i : number of possibly coded bands */ +); + +void fill_spectrum( + float *coeff, /* i/o: normalized MLT spectrum / nf spectrum */ + int16_t *R, /* i : number of pulses per band */ + const int16_t is_transient, /* i : transient flag */ + int16_t norm[], /* i : quantization indices for norms */ + const float *hq_generic_fenv, /* i : HQ GENERIC envelope */ + const int16_t hq_generic_offset, /* i : HQ GENERIC offset */ + const int16_t nf_idx, /* i : noise fill index */ + const int16_t length, /* i : Length of spectrum (32 or 48 kHz) */ + const float env_stab, /* i : Envelope stability measure [0..1] */ + int16_t *no_att_hangover, /* i/o: Frame counter for attenuation hangover */ + float *energy_lt, /* i/o: Long-term energy measure for transient detection */ + int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ + const int16_t hq_generic_exc_clas, /* i : HF excitation class */ + const int16_t core_sfm, /* i : index of the end band for core */ + int16_t HQ_mode, /* i : HQ mode */ + float noise_level[], /* i : noise level for harmonic modes */ + int32_t core_brate, /* i : target bitrate */ + float prev_noise_level[], /* i/o: noise factor in previous frame */ + int16_t *prev_R, /* i/o: bit allocation info. in previous frame */ + float *prev_coeff_out, /* i/o: decoded spectrum in previous frame */ + const int16_t *peak_idx, /* i : peak positions */ + const int16_t Npeaks, /* i : number of peaks */ + const int16_t *npulses, /* i : Number of assigned pulses per band */ + int16_t prev_is_transient, /* i : previous transient flag */ + float *prev_normq, /* i : previous norms */ + float *prev_env, /* i : previous noise envelopes */ + int16_t prev_bfi, /* i : previous bad frame indicator */ + const int16_t *sfmsize, /* i : Length of bands */ + const int16_t *sfm_start, /* i : Start of bands */ + const int16_t *sfm_end, /* i : End of bands */ + int16_t *prev_L_swb_norm, /* i/o: last normalize length for harmonic mode */ + int16_t prev_hq_mode, /* i : previous HQ mode */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t num_env_bands, /* i : Number of envelope bands */ + const int16_t element_mode /* i : element mode */ +); + +void env_stab_transient_detect( + const int16_t is_transient, /* i : Transient flag */ + const int16_t length, /* i : Length of spectrum (32 or 48 kHz) */ + const int16_t norm[], /* i : quantization indices for norms */ + int16_t *no_att_hangover, /* i/o: Frame counter for attenuation hangover */ + float *energy_lt, /* i/o: Long-term energy measure for transient detection */ + const int16_t HQ_mode, /* i : HQ coding mode */ + const int16_t bin_th, /* i : HVQ cross-over frequency bin */ + const float *coeff /* i : Coded spectral coefficients */ +); + +void de_interleave_spectrum( + float *coefs, /* i/o: input and output coefficients */ + int16_t length /* i : length of spectrum */ +); + +void inverse_transform( + const float *InMDCT, /* i : input MDCT vector */ + float *Out, /* o : output vector */ + const int16_t IsTransient, /* i : transient flag */ + const int16_t L, /* i : output frame length */ + const int16_t L_inner, /* i : length of the transform */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void window_ola( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + const int16_t L, /* i : length */ + const int16_t right_mode, + const int16_t left_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const int16_t use_bfi_win, /* i : use BFI windowing */ + const int16_t oldHqVoicing, /* i : previous HqVoicing */ + float *oldgapsynth /* i : previous gapsynth */ +); + +void window_ola_ext( + const float *ImdstOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + const int16_t L, /* i : length */ + const int16_t right_mode, + const int16_t left_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const uint16_t kernel_type /* i : transform kernel type */ +); + +void map_quant_weight( + const int16_t normqlg2[], /* i : quantized norms */ + int16_t wnorm[], /* o : weighted norm */ + const int16_t is_transient /* i : transient flag */ +); + +void recovernorm( + const int16_t *const idxbuf, /* i : reordered quantization indices */ + int16_t *ynrm, /* o : recovered quantization indices */ + int16_t *normqlg2, /* o : recovered quantized norms */ + const int16_t nb_sfm /* i : number of subbands */ +); + +void reordvct( + int16_t *y, /* i/o: vector to rearrange */ + const int16_t N, /* i : dimensions */ + int16_t *idx /* o : reordered vector index */ +); + +void bitalloc( + int16_t *y, /* i : reordered norm of sub-vectors */ + int16_t *idx, /* i : reordered sub-vector indices */ + int16_t sum, /* i : number of available bits */ + int16_t N, /* i : number of norms */ + int16_t K, /* i : maximum number of bits per dimension */ + int16_t *r, /* o : bit-allacation vector */ + const int16_t *sfmsize, /* i : Length of bands */ + const int16_t hqswb_clas /* i : signal classification flag */ +); + +/*! r: Integer (truncated) number of allocated bits */ +int16_t BitAllocF( + int16_t *y, /* i : norm of sub-vectors */ + int32_t bit_rate, /* i : bitrate */ + int16_t B, /* i : number of available bits */ + int16_t N, /* i : number of sub-vectors */ + int16_t *R, /* o : bit-allocation indicator */ + int16_t *Rsubband, /* o : sub-band bit-allocation vector (Q3) */ + const int16_t hqswb_clas, /* i : hq swb class */ + const int16_t num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE */ +); + +/*! r: Integer (truncated) number of allocated bits */ +int16_t BitAllocWB( + int16_t *y, /* i : norm of sub-vectors */ + int16_t B, /* i : number of available bits */ + int16_t N, /* i : number of sub-vectors */ + int16_t *R, /* o : bit-allocation indicator */ + int16_t *Rsubband ); /* o : sub-band bit-allocation vector (Q3) */ + +/*! r: Number of low frequency bands */ +int16_t hvq_pvq_bitalloc( + int16_t num_bits, /* i/o: Number of available bits (including gain bits) */ + const int32_t core_brate, /* i : bitrate */ + const int16_t bwidth, /* i : Encoded bandwidth */ + const int16_t *ynrm, /* i : Envelope coefficients */ + const int32_t manE_peak, /* i : Peak energy mantissa */ + const int16_t expE_peak, /* i : Peak energy exponent */ + int16_t *Rk, /* o : bit allocation for concatenated vector */ + int16_t *R, /* i/o: Global bit allocation */ + int16_t *sel_bands, /* o : Selected bands for encoding */ + int16_t *n_sel_bands /* o : No. of selected bands for encoding */ +); + +void floating_point_add( + int32_t *mx, /* i/o: mantissa of the addend Q31 */ + int16_t *ex, /* i/o: exponent of the addend Q0 */ + const int32_t my, /* i : mantissa of the adder Q31 */ + const int16_t ey /* i : exponent of the adder Q0 */ +); + +/*! r: Number of bits needed */ +int16_t rc_get_bits2( + const int16_t N, /* i : Number of bits currently used */ + const uint32_t range /* i : Range of range coder */ +); + +void rc_enc_init( + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + int16_t tot_bits /* i : Total bit budget */ +); + +void rc_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const uint32_t cum_freq, /* i : Cumulative frequency up to symbol */ + const uint32_t sym_freq, /* i : Symbol probability */ + const uint32_t tot /* i : Total cumulative frequency */ +); + +void rc_enc_finish( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ +); + +void rc_enc_bits( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const uint32_t value, /* i : Value to encode */ + const int16_t bits /* i : Number of bits used */ +); + +void rc_enc_uniform( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + uint32_t value, /* i : Value to encode */ + uint32_t tot /* i : Maximum value */ +); + +void rc_dec_init( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + int16_t tot_bits /* i : Total bit budget */ +); + +/*! r: Decoded value */ +uint32_t rc_decode( + int16_t *BER_detect, /* o : Bit error detection flag */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + uint32_t tot /* i : Total cumulative frequency */ +); + +void rc_dec_update( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + const uint32_t cum_freq, /* i : Cumulative frequency */ + const uint32_t sym_freq /* i : Symbol frequency */ +); + +/*! r: Decoded value */ +uint32_t rc_dec_bits( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + const int16_t bits /* i : Number of bits */ +); + +/*! r: Decoded value */ +uint32_t rc_dec_uniform( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + const uint32_t tot /* i : Maximum value */ +); + +void rc_dec_finish( + Decoder_State *st, /* i/o: decoder state structure */ + PVQ_DEC_HANDLE hPVQ /* i/o: PVQ decoder handle */ +); + +/*! r: number of bits encoded */ +int16_t pvq_core_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + float coefs_norm[], /* i/o: normalized coefficients to encode */ + float coefs_quant[], /* o : quantized coefficients */ + const int16_t bits_tot, /* i : total number of bits */ + const int16_t nb_sfm, /* i : number of bands */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfmsize, /* i : subband width */ + int16_t *R, /* i/o: Bit allocation/Adjusted bit alloc. (Q3) */ + int16_t *Rs, /* i/o: Integer bit allocation */ + int16_t *npulses, /* o : number of pulses */ + int16_t *maxpulse, /* i : maximum pulse per band */ + const int16_t core /* i : number of bands */ +); + +/*! r: number of bits decoded */ +int16_t pvq_core_dec( + Decoder_State *st, /* i/o: Decoder state */ + const int16_t *sfm_start, /* i : indices of first coeffs in the bands */ + const int16_t *sfm_end, /* i : indices of last coeffs in the bands */ + const int16_t *sfmsize, /* i : band sizes */ + float coefs_quant[], /* o : output MDCT */ + const int16_t bits_tot, /* i : bit budget */ + const int16_t nb_sfm, /* i : number of bands */ + int16_t *R, /* i/o: Bit allocation/Adjusted bit alloc.(Q3) */ + int16_t *Rs, /* i/o: Integer bit allocation */ + int16_t *npulses, /* o : number of pulses per band */ + int16_t *maxpulse, /* o : maximum pulse per band */ + const int16_t core /* i : core */ +); + +void pvq_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const float *x, /* i : vector to quantize */ + int16_t *y, /* o : quantized vector (non-scaled integer)*/ + float *xq, /* o : quantized vector (scaled float) */ + const int16_t pulses, /* i : number of allocated pulses */ + const int16_t N, /* i : Length of vector */ + const float gain /* i : Gain */ +); + +void pvq_decode( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + float *xq, /* o : decoded vector (scaled float) */ + int16_t *y, /* o : decoded vector (non-scaled short)*/ + const int16_t K, /* i : number of allocated pulses */ + const int16_t N, /* i : Length of vector */ + const float gain /* i : Gain */ +); + +void rangeCoderFinalizationFBits( + const int16_t Brc, /* i : Current number of decoded bits */ + const uint32_t INTrc, /* i : Range coder state */ + int16_t *FBits /* i : Fractional finalization bits */ +); + +void bandBitsAdjustment( + const int16_t Brc, /* i : Current number of read quanta in range coder */ + const uint32_t INTrc, /* i : Range coder state */ + const int16_t Bavail, /* i : Available number of quanta */ + const int16_t Nbands, /* i : Number of bands */ + const int16_t D, /* i : Remaining number of bands to encode */ + const int16_t L, /* i : Size of current band */ + const int16_t Bband, /* i : Quanta allocation for current band */ + const int16_t Breserv, /* i : Quanta reservoir */ + int16_t *Bband_adj, /* o : Actual used number of quanta */ + int16_t *Brem, /* o : Quanta remaining */ + int16_t *Breservplus /* o : Quanta pool size */ +); + +void conservativeL1Norm( + const int16_t L, /* i : Length of vector segment */ + const int16_t Qvec, /* i : Assigned number of quanta */ + const int16_t Fcons, /* i : Conservative rounding flag */ + const int16_t Qavail, /* i : Input quanta remaining */ + const int16_t Qreserv, /* i : Input quanta in reservoir */ + const int16_t Dspec, /* i : assigned diracs from bitalloc */ + int16_t *Dvec, /* o : actual number of diracs */ + int16_t *Qspare, /* o : Output quanta remaining */ + int16_t *Qreservplus, /* o : Output quanta in reservoir */ + int16_t *Dspecplus /* o : Output number of diracs */ +); + +void NearOppSplitAdjustment( + const int16_t qband, /* i : quanta for current band */ + const int16_t qzero, /* i : range coder finalization quanta */ + const int16_t Qac, /* i : range coder current quanta */ + const uint32_t INTac, /* i : range coder state */ + const int16_t qglobal, /* i : quanta input */ + const int16_t FlagCons, /* i : conservative rounding flag */ + const int16_t Np, /* i : number of parts */ + const int16_t Nhead, /* i : first part */ + const int16_t Ntail, /* i : remaining parts */ + const int16_t Nnear, /* i : length of near component */ + const int16_t Nopp, /* i : length of opposite component */ + int16_t oppRQ3, /* i : ratio */ + int16_t *qnear, /* o : quantized near */ + int16_t *qopp, /* o : quantized opposite */ + int16_t *qglobalupd /* o : quanta remaining */ +); + +/*! r: Approximate integer division for positive input */ +int32_t intLimCDivPos( + const int32_t NUM, /* i : numerator */ + const int16_t DEN /* i : denominator */ +); + +/*! r: Approximate integer division */ +int16_t shrtCDivSignedApprox( + const int16_t num, /* i : numerator */ + const int16_t den /* i : denominator */ +); + +void QuantaPerDsDirac( + const int16_t td, /* i : Length of vector segment */ + const int16_t dsDiracIndex, /* i : Quanta table index */ + const uint8_t *const *dimFrQuanta, /* i : Quanta lookup table */ + int16_t *Quanta /* i : Quanta */ +); + +void obtainEnergyQuantizerDensity( + const int16_t L_in, /* i : left vector energy */ + const int16_t R_in, /* i : right vector energy */ + int16_t *Density /* o : quantizer density */ +); + +void densityAngle2RmsProjDec( + const int16_t D, /* i : density */ + const int16_t indexphi, /* i : decoded index from AR dec */ + int16_t *oppQ15, /* o : opposite */ + int16_t *nearQ15, /* o : near */ + int16_t *oppRatioQ3 /* o : ratio */ +); + +void densityAngle2RmsProjEnc( + const int16_t D, /* i : density */ + const int16_t phiQ14uq, /* i : angle */ + int16_t *indexphi, /* o : index */ + int16_t *oppQ15, /* o : opposite */ + int16_t *nearQ15, /* o : near */ + int16_t *oppRatioQ3 /* o : ratio */ +); + +void env_adj( + const int16_t *pulses, /* i : number of pulses per band */ + const int16_t length, /* i : length of spectrum */ + const int16_t last_sfm, /* i : Index of last band */ + float *adj, /* o : Adjustment factors for the envelope */ + const float env_stab, /* i : Envelope stability parameter */ + const int16_t *sfmsize /* i : Length of bands */ +); + +float env_stability( + const int16_t *ynrm, /* i : Norm vector for current frame */ + const int16_t nb_sfm, /* i : Number of sub-bands */ + int16_t *mem_norm, /* i/o: Norm vector memory from past frame */ + int16_t *mem_env_delta /* i/o: Envelope stability memory for smoothing*/ +); + +/*! r: New speech/music state */ +float env_stab_smo( + float env_stab, /* i : env_stab value */ + float *env_stab_state_p, /* i/o: env_stab state probabilities */ + int16_t *ho_cnt /* i/o: hangover counter for speech state */ +); + +void core_switching_pre_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *old_inp_12k8, /* i : old input signal @12.8kHz */ + const float *old_inp_16k, /* i : old input signal @16kHz */ + const int16_t active_cnt, /* i : Active frame counter */ + const int16_t last_element_mode /* i : last_element_mode */ +); + +void core_switching_post_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *old_inp_12k8, /* i : old input signal @12.8kHz */ + const float *old_inp_16k, /* i : old input signal @16kHz */ + const float A[] /* i : unquant LP filter coefs. */ +); + +ivas_error core_switching_post_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *synth, /* i/o: output synthesis */ + float *output, /* i/o: LB synth/upsampled LB synth */ + float output_mem[], /* i : OLA memory from last TCX/HQ frame */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t output_frame, /* i : frame length */ + const int16_t core_switching_flag, /* i : ACELP->HQ switching frame flag */ + const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ + const int16_t nchan_out, /* i : number of output channels */ + const int16_t last_element_mode /* i : element mode of previous frame */ +); + +ivas_error core_switching_pre_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t output_frame, /* i : frame length */ + const int32_t last_core_brate_st0, /* i : channel 0 last core bitrate */ + const int16_t nchan_out, /* i : number of output channels */ + const int16_t last_element_mode, /* i : last_element_mode */ + const int32_t last_element_brate /* i : last element bitrate */ +); + +void bandwidth_switching_detect( + Decoder_State *st /* i/o: decoder state structure */ +); + +void bw_switching_pre_proc( + Decoder_State *st, /* i/o: decoder state structure */ + const float *old_syn_12k8_16k, /* i : ACELP core synthesis @ 12.8kHz or 16kHz */ + const int32_t last_element_brate, /* i : last element bitrate */ + const int16_t nchan_out /* i : number of output channels */ +); + +void updt_bw_switching( + Decoder_State *st, /* i/o: decoder state structure */ + const float *synth /* i : float synthesis signal */ +); + +void swb_tbe_reset( + float mem_csfilt[], + float mem_genSHBexc_filt_down_shb[], + float state_lpc_syn[], + float syn_overlap[], + float state_syn_shbexc[], + float *tbe_demph, + float *tbe_premph, + float mem_stp_swb[], + float *gain_prec_swb ); + +void swb_tbe_reset_synth( + float genSHBsynth_Hilbert_Mem[], + float genSHBsynth_state_lsyn_filt_shb_local[] ); + +void find_td_envelope( + const float inp[], + const int16_t len, + const int16_t len_h, + float mem_h[], + float out[] ); + +void fb_tbe_reset_enc( + float elliptic_bpf_2_48k_mem[][4], + float *prev_fb_energy ); + +void fb_tbe_reset_synth( + float fbbwe_hpf_mem[][4], + float *prev_fbbwe_ratio ); + +void wb_tbe_extras_reset( + float mem_genSHBexc_filt_down_wb2[], + float mem_genSHBexc_filt_down_wb3[] ); + +void wb_tbe_extras_reset_synth( + float state_lsyn_filt_shb[], + float state_lsyn_filt_dwn_shb[], + float mem_resamp_HB[] ); + +void tbe_celp_exc( + const int16_t element_mode, /* i : element mode */ + const int16_t idchan, /* i : channel ID */ + float *bwe_exc, /* i/o: BWE excitation */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : fraction of lag */ + float *error, /* i/o: error */ + const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ +); + +void prep_tbe_exc( + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t i_subfr, /* i : subframe index */ + const float gain_pit, /* i : Pitch gain */ + const float gain_code, /* i : algebraic codebook gain */ + const float code[], /* i : algebraic excitation */ + const float voice_fac, /* i : voicing factor */ + float *voice_factors, /* o : TBE voicing factor */ + float bwe_exc[], /* i/o: excitation for TBE */ + const float gain_preQ, /* i : prequantizer excitation gain */ + const float code_preQ[], /* i : prequantizer excitation */ + const int16_t T0, /* i : integer pitch variables */ + const int16_t coder_type, /* i : coding type */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t element_mode, /* i : element mode */ + const int16_t idchan, /* i : channel ID */ + const int16_t flag_TD_BWE, /* i : flag indicating whether hTD_BWE exists */ + const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ +); + +void synthesise_fb_high_band( + const float excitation_in[], /* i : full band excitation */ + float output[], /* o : high band speech - 14.0 to 20 kHz */ + const float fb_exc_energy, /* i : full band excitation energy */ + const float ratio, /* i : energy ratio */ + const int16_t L_frame, /* i : ACELP frame length */ + const int16_t bfi, /* i : BFI flag */ + float *prev_fbbwe_ratio, /* o : previous frame energy for FEC */ + float bpf_memory[][4] /* i/o: memory for elliptic bpf 48k */ +); + +void elliptic_bpf_48k_generic( + const float input[], /* i : input signal */ + float output[], /* o : output signal */ + float memory[][4], /* i/o: 4 arrays for memory */ + const float full_band_bpf[][5] /* i : filter coefficients b0,b1,b2,a0,a1,a2 */ +); + +void HQ_FEC_processing( + Decoder_State *st, /* i/o: decoder state structure */ + float *t_audio_q, /* o : MDCT coeffs. (for synthesis) */ + int16_t is_transient, /* i : Old flag for transient */ + float ynrm_values[][MAX_PGF], /* i : Old average Norm values for each group of bands */ + float r_p_values[][MAX_ROW], /* i : Computed y-intercept and slope by Regression */ + int16_t num_Sb, /* i : Number of sub-band group */ + int16_t nb_sfm, /* i : Number of sub-band */ + int16_t *Num_bands_p, /* i : Number of coeffs. for each sub-band */ + int16_t output_frame, /* i : Frame size */ + const int16_t *sfm_start, /* i : Start of bands */ + const int16_t *sfm_end /* i : End of bands */ +); + +void HQ_FEC_Mem_update( + Decoder_State *st, /* i/o: decoder state structure */ + const float *t_audio_q, + float *normq, + int16_t *ynrm, + const int16_t *Num_bands_p, + const int16_t is_transient, + const int16_t hqswb_clas, + const int16_t c_switching_flag, + const int16_t nb_sfm, + const int16_t num_Sb, + float *mean_en_high, + const int16_t hq_core_type, /* i : normal or low-rate MDCT(HQ) core */ + const int16_t output_frame /* i : Frame size */ +); + +void time_domain_FEC_HQ( + Decoder_State *st, /* i : Decoder State */ + float *wtda_audio, /* i : input */ + float *out, /* o : output audio */ + const float mean_en_high, /* i : transient flag */ + const int16_t output_frame /* i : Frame size */ +); + +void save_synthesis_hq_fec( + Decoder_State *st, /* i/o: decoder state structure */ + const float *output, /* i : decoded synthesis */ + const int16_t output_frame, /* i : decoded synthesis */ + CPE_DEC_HANDLE hCPE /* i : CPE decoder structure */ +); + +void Next_good_after_burst_erasures( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + const int16_t ol_size /* i : overlap size */ +); + +void update_average_rate( + SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ + const int32_t core_brate /* i : core bitrate */ +); + +void reset_preecho_dec( + HQ_DEC_HANDLE hHQ_core /* i/o: HQ decoder handle */ +); + +void preecho_sb( + const int32_t core_brate, /* i : core bitrate */ + const float wtda_audio[], /* i : imdct signal */ + float *rec_sig, /* i : reconstructed signal, output of the imdct transform */ + const int16_t framelength, /* i : frame length */ + float *memfilt_lb, /* i/o: memory */ + float *mean_prev_hb, /* i/o: memory */ + float *smoothmem, /* i/o: memory */ + float *mean_prev, /* i/o: memory */ + float *mean_prev_nc, /* i/o: memory */ + float *wmold_hb, /* i/o: memory */ + int16_t *prevflag, /* i/o: flag */ + int16_t *pastpre, /* i/o: flag */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void hq2_core_configure( + const int16_t frame_length, /* i : frame length */ + const int16_t num_bits, /* i : number of bits */ + const int16_t is_transient, /* i : transient flag */ + int16_t *bands, + int16_t *length, + int16_t band_width[], + int16_t band_start[], + int16_t band_end[], + Word32 *L_qint, /* o : Q29 */ + Word16 *eref_fx, /* o : Q10 */ + Word16 *bit_alloc_weight_fx, /* o : Q13 */ + int16_t *gqlevs, + int16_t *Ngq, + int16_t *p2a_bands, + float *p2a_th, + float *pd_thresh, + float *ld_slope, + float *ni_coef, + float *ni_pd_th, + int32_t bwe_br ); + +void hq_lr_enc( + Encoder_State *st, /* i/o: encoder state structure */ + float t_audio[], /* i/o: transform-domain coefs. */ + const int16_t inner_frame, /* i : inner frame length */ + int16_t *num_bits, /* i/o: number of available bits */ + const int16_t is_transient /* i : transient flag */ +); + +void hq_lr_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float yout[], /* o : transform-domain output coefs. */ + const int16_t inner_frame, /* i : inner frame length */ + int16_t num_bits, /* i : number of available bits */ + int16_t *is_transient /* o : transient flag */ +); + +void hq2_bit_alloc( + const float band_energy[], /* i : band energy of each subband */ + const int16_t bands, /* i : total number of subbands in a frame */ + Word32 L_Rk[], /* i/o: Bit allocation/Adjusted bit alloc. */ + int16_t *bit_budget, /* i/o: bit bugdet */ + int16_t *p2a_flags, /* i : HF tonal indicator */ + const Word16 weight_fx, /* i : weight (Q13) */ + const int16_t band_width[], /* i : Sub band bandwidth */ + const int16_t num_bits, /* i : available bits */ + const int16_t hqswb_clas, /* i : HQ2 class information */ + const int16_t bwidth, /* i : input bandwidth */ + const int16_t is_transient /* i : indicator HQ_TRANSIENT or not */ +); + +void hq2_noise_inject( + float y2hat[], + const int16_t band_start[], + const int16_t band_end[], + const int16_t band_width[], + float Ep[], + float Rk[], + const int16_t npulses[], + int16_t ni_seed, + const int16_t bands, + const int16_t ni_start_band, + const int16_t bw_low, + const int16_t bw_high, + const float enerL, + const float enerH, + float last_ni_gain[], + float last_env[], + int16_t *last_max_pos_pulse, + int16_t *p2a_flags, + int16_t p2a_bands, + const int16_t hqswb_clas, + const int16_t bwidth, + const int32_t bwe_br ); + +void mdct_spectrum_denorm( + const int32_t inp_vector[], + float y2[], + const int16_t band_start[], + const int16_t band_end[], + const int16_t band_width[], + const float band_energy[], + const int16_t npulses[], + const int16_t bands, + const float ld_slope, + const float pd_thresh ); + +void reverse_transient_frame_energies( + float band_energy[], /* o : band energies */ + const int16_t bands /* i : number of bands */ +); + +int16_t peak_vq_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t bwidth, /* i : audio bandwidth */ +#ifdef DEBUGGING + const int16_t idchan, /* i : channel ID */ +#endif + const float *coefs, /* i : Input coefficient vector */ + float *coefs_out, /* o : Quantized output vector */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t num_bits, /* i : Number of bits for HVQ */ + const int16_t vq_peaks, /* i : Number of identified peaks */ + const int16_t *ynrm, /* i : Envelope coefficients */ + int16_t *R, /* i/o: Bit allocation/updated bit allocation */ + int16_t *vq_peak_idx, /* i : Peak index vector */ + float *nf_gains /* i : Estimated noise floor gains */ +); + +void hvq_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t num_bits, /* i : Number of available bits */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t *ynrm, /* i : Envelope coefficients */ + int16_t *R, /* i/o: Bit allocation/updated bit allocation */ + float *noise_level, /* o : Noise level */ + int16_t *peak_idx, /* o : Peak position vector */ + int16_t *Npeaks, /* o : Total number of peaks */ + float *coefsq_norm, /* o : Output vector */ + const int16_t core /* i : Core */ +); + +void hq_configure_bfi( + int16_t *nb_sfm, /* o : Number of sub bands */ + int16_t *num_Sb, /* o : Number of FEC sub bands ? */ + int16_t *num_bands_p, /* o : FEC sub bands */ + const int16_t **sfmsize, /* o : Subband bandwidths */ + const int16_t **sfm_start, /* o : Subband start coefficients */ + const int16_t **sfm_end /* o : Subband end coefficients */ +); + +void swb_bwe_enc_lr( + Encoder_State *st, /* i/o: encoder state structure */ + const float m_core[], /* i : core synthesis (MDCT) */ + const float m_orig[], /* i/o: scaled orig signal (MDCT) */ + float m[], /* o : output, SWB part (MDCT) */ + const int32_t total_brate, /* i : total bitrate for selecting subband pattern */ + int16_t BANDS, + int16_t *band_start, + int16_t *band_end, + float *band_energy, + int16_t *p2a_flags, + const int16_t hqswb_clas, + int16_t lowlength, + int16_t highlength, + int16_t *prev_frm_index, + const int16_t har_bands, + int16_t *prev_frm_hfe2, + int16_t *prev_stab_hfe2, + int16_t band_width[], + const float y2_ni[], + int16_t *ni_seed ); + +void swb_bwe_dec_lr( + Decoder_State *st, /* i/o: decoder state structure */ + const float m_core[], /* i : lowband synthesis */ + float m[], /* o : highband synthesis with lowband zeroed */ + const int32_t total_brate, /* i : total bitrate for selecting subband pattern */ + int16_t BANDS, + int16_t *band_start, + int16_t *band_end, + float *band_energy, + int16_t *p2a_flags, + const int16_t hqswb_clas, + int16_t lowlength, + int16_t highlength, + const int16_t har_bands, + int16_t *prev_frm_hfe2, + int16_t *prev_stab_hfe2, + int16_t band_width[], + const float y2_ni[], + int16_t *ni_seed ); + +int16_t get_usebit_npswb( + const int16_t hqswb_clas ); + +void GetPredictedSignal( + const float *predBuf, /* i : prediction buffer */ + float *outBuf, /* o : output buffer */ + const int16_t lag, /* i : prediction buffer offset */ + const int16_t fLen, /* i : length of loop (output) */ + const float gain /* i : gain to be applied */ +); + +void convert_lagIndices_pls2smp( + int16_t lagIndices_in[], + int16_t nBands_search, + int16_t lagIndices_out[], + const float sspectra[], + const int16_t sbWidth[], + const int16_t fLenLow ); + +void FindNBiggest2_simple( + const float *inBuf, /* i : input buffer (searched) */ + GainItem *g, /* o : N biggest components found */ + const int16_t nIdx, /* i : search length */ + int16_t *n, /* i : number of components searched (N biggest) */ + const int16_t N_NBIGGESTSEARCH ); + +void updat_prev_frm( + float y2[], + float t_audio[], + const int32_t bwe_br, + const int16_t length, + const int16_t inner_frame, + const int16_t bands, + const int16_t bwidth, + const int16_t is_transient, + const int16_t hqswb_clas, + int16_t *prev_hqswb_clas, + int16_t *prev_SWB_peak_pos, + int16_t prev_SWB_peak_pos_tmp[], + int16_t *prev_frm_hfe2, + int16_t *prev_stab_hfe2, + const int16_t bws_cnt ); + +void hf_parinitiz( + const int32_t total_brate, + const int16_t hqswb_clas, + int16_t lowlength, + int16_t highlength, + int16_t wBands[], + const int16_t **subband_search_offset, + const int16_t **subband_offsets, + int16_t *nBands, + int16_t *nBands_search, + int16_t *swb_lowband, + int16_t *swb_highband ); + +float spectrumsmooth_noiseton( + float spectra[], + const float spectra_ni[], + float sspectra[], + float sspectra_diff[], + float sspectra_ni[], + const int16_t fLenLow, + int16_t *ni_seed ); + +void noiseinj_hf( + float xSynth_har[], + const float th_g[], + const float band_energy[], + float *prev_En_sb, + const int16_t p2a_flags[], + const int16_t BANDS, + const int16_t band_start[], + const int16_t band_end[], + const int16_t fLenLow ); + +void noise_extr_corcod( + float spectra[], + const float spectra_ni[], + float sspectra[], + float sspectra_diff[], + float sspectra_ni[], + const int16_t fLenLow, + int16_t prev_hqswb_clas, + float *prev_ni_ratio ); + +void genhf_noise( + float noise_flr[], + float xSynth_har[], + float *predBuf, + int16_t bands, /* i : total number of subbands in a frame */ + int16_t harmonic_band, /* i : Number of LF harmonic frames */ + int16_t har_freq_est2, + int16_t pos_max_hfe2, + int16_t *pul_res, + GainItem pk_sf[], + const int16_t fLenLow, + const int16_t fLenHigh, + const int16_t sbWidth[], + const int16_t lagIndices[], + const int16_t subband_offsets[], + const int16_t subband_search_offset[] ); + +void ton_ene_est( + float xSynth_har[], + float be_tonal[], + float band_energy[], + int16_t band_start[], + int16_t band_end[], + int16_t band_width[], + const int16_t fLenLow, + const int16_t fLenHigh, + int16_t bands, + int16_t har_bands, + float ni_lvl, + GainItem pk_sf[], + int16_t *pul_res ); + +void Gettonl_scalfact( + float *outBuf, /* o : synthesized spectrum */ + const float *codbuf, /* i : core coder */ + const int16_t fLenLow, /* i : lowband length */ + const int16_t fLenHigh, /* i : highband length */ + int16_t harmonic_band, /* i : Number of LF harmonic frames */ + int16_t bands, /* i : total number of subbands in a frame */ + float *band_energy, /* i : band energy of each subband */ + int16_t *band_start, /* i : subband start indices */ + int16_t *band_end, /* i : subband end indices */ + const int16_t p2aflags[], + float be_tonal[], + GainItem *pk_sf, + int16_t *pul_res ); + +void SpectrumSmoothing( + float *inBuf, + float *outBuf, + const int16_t fLen, + const float th_cut ); + +void hq2_bit_alloc_har( + float *y, /* i : band energy of sub-vectors */ + int16_t B, /* i : number of available bits */ + int16_t N, /* i : number of sub-vectors */ + Word32 *L_Rsubband, + int16_t p2a_bands, + int32_t core_brate, /* i : core bitrate */ + int16_t p2a_flags[], + int16_t band_width[] ); + +void GetSynthesizedSpecThinOut( + const float *predBuf, + float *outBuf, + const int16_t nBands, + const int16_t *sbWidth, + const int16_t *lagIndices, + const float *lagGains, + const int16_t predBufLen ); + +void return_bits_normal2( + int16_t *bit_budget, + const int16_t p2a_flags[], + const int16_t bands, + const int16_t bits_lagIndices[] ); + +void GetlagGains( + const float *predBuf, + const float *band_energy, + const int16_t nBands, + const int16_t *sbWidth, + const int16_t *lagIndices, + const int16_t predBufLen, + float *lagGains ); + +void preset_hq2_swb( + const int16_t hqswb_clas, + const int16_t band_end[], + int16_t *har_bands, + int16_t p2a_bands, + const int16_t length, + const int16_t bands, + int16_t *lowlength, + int16_t *highlength, + float m[] ); + +void post_hq2_swb( + const float m[], + const int16_t lowlength, + const int16_t highlength, + const int16_t hqswb_clas, + const int16_t har_bands, + const int16_t bands, + const int16_t p2a_flags[], + const int16_t band_start[], + const int16_t band_end[], + float y2[], + int16_t npulses[] ); + +void har_denorm_pulcnt( + float spectra[], /* i/o: MDCT domain spectrum */ + const int16_t band_start[], /* i : Number subbands/Frame */ + const int16_t band_end[], /* i : Band Start of each SB */ + const float band_energy[], /* i : Band end of each SB */ + const int16_t band_width[], + const int16_t npulses[], + const int16_t har_bands /* i : No. of harmonic bands */ +); + +int16_t har_est( + float spectra[], + const int16_t N, + int16_t *har_freq_est1, + int16_t *har_freq_est2, + int16_t *flag_dis, + int16_t *prev_frm_hfe2, + const int16_t subband_search_offset[], + const int16_t sbWidth[], + int16_t *prev_stab_hfe2 ); + +void spt_shorten_domain_pre( + const int16_t band_start[], + const int16_t band_end[], + const int16_t prev_SWB_peak_pos[], + const int16_t BANDS, + const int32_t bwe_br, + int16_t new_band_start[], + int16_t new_band_end[], + int16_t new_band_width[] ); + +void spt_shorten_domain_band_save( + const int16_t bands, + const int16_t band_start[], + const int16_t band_end[], + const int16_t band_width[], + int16_t org_band_start[], + int16_t org_band_end[], + int16_t org_band_width[] ); + +void spt_shorten_domain_band_restore( + const int16_t bands, + int16_t band_start[], + int16_t band_end[], + int16_t band_width[], + const int16_t org_band_start[], + const int16_t org_band_end[], + const int16_t org_band_width[] ); + +void spt_swb_peakpos_tmp_save( + const float y2[], + const int16_t bands, + const int16_t band_start[], + const int16_t band_end[], + int16_t prev_SWB_peak_pos_tmp[] ); + +void hq_ecu( + const float *prevsynth, /* i : buffer of previously synthesized signal */ + float *ecu_rec, /* o : reconstructed frame in tda domain */ + int16_t *time_offs, /* i/o: Sample offset for consecutive frame losses*/ + float *X_sav, /* i/o: Stored spectrum of prototype frame */ + int16_t *num_p, /* i/o: Number of identified peaks */ + int16_t *plocs, /* i/o: Peak locations */ + float *plocsi, /* i/o: Interpolated peak locations */ + const float env_stab, /* i : Envelope stability parameter */ + int16_t *last_fec, /* i/o: Flag for usage of pitch dependent ECU */ + const int16_t ph_ecu_HqVoicing, /* i : HQ Voicing flag */ + int16_t *ph_ecu_active, /* i : Phase ECU active flag */ + float *gapsynth, /* o : Gap synthesis */ + const int16_t prev_bfi, /* i : indicating burst frame error */ + const int16_t old_is_transient[2], /* i : flags indicating previous transient frames*/ + float *mag_chg_1st, /* i/o: per band magnitude modifier for transients*/ + float Xavg[LGW_MAX], /* i/o: Frequency group average gain to fade to */ + float *beta_mute, /* o : Factor for long-term mute */ + const int16_t output_frame, /* i : frame length */ + Decoder_State *st /* i/o: decoder state structure */ +); + +void peakfinder( + const float *x0, /* i : vector from which the maxima will be found */ + const int16_t len0, /* i : length of input vector */ + int16_t *plocs, /* o : the indicies of the identified peaks in x0 */ + int16_t *cInd, /* o : number of identified peaks */ + const float sel, /* i : The amount above surrounding data for a peak to be identified */ + const int16_t endpoints /* i : Flag to include endpoints in peak search */ +); + +/*! r: interpolated maximum position */ +float imax_pos( + const float *y /* i : Input vector for peak interpolation */ +); + + +void fft3( + const float X[], /* i : input frame */ + float Y[], /* o : DFT of input frame */ + const int16_t n /* i : block length (must be radix 3) */ +); + +void ifft3( + const float X[], /* i : input frame */ + float Y[], /* o : iDFT of input frame */ + const int16_t n /* i : block length (must be radix 3) */ +); + +/*! r: updated estimate of background noise */ +void minimumStatistics( + float *noiseLevelMemory, /* i/o: internal state */ + int16_t *noiseLevelIndex, /* i/o: internal state */ + int16_t *currLevelIndex, /* i/o: internal state (circular buffer) */ + float *noiseEstimate, /* i/o: previous estimate of background noise */ + float *lastFrameLevel, /* i/o: level of the last frame */ + float currentFrameLevel, /* i : level of the current frame */ + const float minLev, /* i : minimum level */ + const int16_t buffSize /* i : buffer size */ +); + +void E_LPC_int_lpc_tcx( + const float lsf_old[], /* i : LSFs from past frame */ + const float lsf_new[], /* i : LSFs from present frame */ + float a[] /* o : interpolated LP coefficients */ +); + +int16_t E_GAIN_closed_loop_search( + float exc[], + float xn[], + float h[], + int16_t t0_min, + int16_t t0_min_frac, + int16_t t0_max, + int16_t t0_max_frac, + const int16_t t0_min_max_res, + int16_t *pit_frac, + int16_t *pit_res, + const int16_t pit_res_max, + const int16_t i_subfr, + const int16_t pit_min, + const int16_t pit_fr2, + const int16_t pit_fr1, + const int16_t L_subfr ); + +void E_ACELP_toeplitz_mul( + const float R[], + const float c[], + float d[] ); + +void acelp_pulsesign( + const float cn[], + float dn[], + float dn2[], + float sign[], + float vec[], + const float alp ); + +void E_ACELP_4t( + float dn[], + float cn[], + float H[], + float R[], + const int16_t acelpautoc, + float code[], + const int16_t cdk_index, + int16_t _index[], + const int16_t L_frame, + const int16_t last_L_frame, + const int32_t total_brate, + const int16_t i_subfr, + const int16_t cmpl_flag ); + +void E_ACELP_4tsearch( + float dn[], + const float cn[], + const float H[], + float code[], + PulseConfig *config, + int16_t ind[], + float y[] ); + +void E_ACELP_4tsearchx( + float dn[], + const float cn[], + float Rw[], + float code[], + PulseConfig *config, + int16_t ind[] ); + +int16_t E_ACELP_indexing( + float code[], + PulseConfig config, + const int16_t num_tracks, + int16_t prm[] ); + +void acelp_findcandidates( + float dn2[], + int16_t dn2_pos[], + int16_t pos_max[], + const int16_t L_subfr, + const int16_t tracks ); + +void E_ACELP_innovative_codebook( + const float *exc, /* i : pointer to the excitation frame */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : fraction of lag */ + const int16_t T0_res, /* i : pitch resolution */ + const float pitch_gain, /* i : adaptive codebook gain */ + const float tilt_code, /* i : tilt factor */ + ACELP_config *acelp_cfg, /* i/o: configuration of the ACELP */ + const int16_t i_subfr, /* i : subframe index */ + const float *Aq, /* i : quantized LPC coefficients */ + const float *h1, /* i : impulse response of weighted synthesis filter */ + const float *xn, /* i : Close-loop Pitch search target vector */ + const float *cn, /* i : Innovative codebook search target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + float *y2, /* o : zero-memory filtered algebraic excitation */ + const int16_t acelpautoc, /* i : autocorrelation mode enabled */ + int16_t **pt_indice, /* i/o: quantization indices pointer */ + float *code, /* o : innovative codebook */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t last_L_frame, /* i : length of the last frame */ + const int32_t total_brate /* i : total bitrate */ +); + +int16_t E_ACELP_code43bit( + const float code[], + uint32_t *ps, + int16_t *p, + uint16_t idxs[] ); + +void fcb_pulse_track_joint( + uint16_t *idxs, + const int16_t wordcnt, + uint32_t *index_n, + const int16_t *pulse_num, + const int16_t track_num ); + +void D_ACELP_indexing( + float code[], + PulseConfig config, + const int16_t num_tracks, + int16_t prm[], + int16_t *BER_detect ); + +void D_ACELP_decode_43bit( + uint16_t idxs[], + float code[], + int16_t *pulsestrack ); + +void fcb_pulse_track_joint_decode( + uint16_t *idxs, + const int16_t wordcnt, + uint32_t *index_n, + const int16_t *pulse_num, + const int16_t track_num ); + +void lag_wind( + float r[], /* i/o: autocorrelations */ + const int16_t m, /* i : order of LP filter */ + const int32_t sr_core, /* i : sampling rate */ + const int16_t strength /* i : LAGW_WEAK, LAGW_MEDIUM, or LAGW_STRONG */ +); + +void adapt_lag_wind( + float r[], /* i/o: autocorrelations */ + const int16_t m, /* i : order of LP filter */ + const int16_t Top, /* i : open loop pitch lags from curr. frame (or NULL if n/a) */ + const float Tnc, /* i : open loop pitch gains from curr. frame (NULL if n/a) */ + const int32_t sr_core /* i : core sampling rate */ +); + +void hp20( + Float32 signal[], + const Word16 lg, + Float32 mem[], + const Word32 Fs ); + +void ham_cos_window( + float *fh, + const int16_t n1, + const int16_t n2 ); + +/*! r: noise dependent voicing correction */ +float correlation_shift( + const float totalNoise /* i : noise estimate over all critical bands */ +); + +void init_coder_ace_plus( + Encoder_State *st, /* i : Encoder state handle */ + const int32_t last_total_brate, /* i : last total bitrate */ + const int16_t is_mct /* i : MCT mode flag */ +); + +void core_coder_reconfig( + Encoder_State *st, /* i/o: encoder state structure */ + const int32_t last_total_brate /* i : last total bitrate */ +); + +void core_coder_mode_switch( + Encoder_State *st, /* i/o: encoder state structure */ + const int32_t last_total_brate, /* i : last bitrate */ + const int16_t is_mct /* i : MCT mode flag */ +); + +void enc_acelp_tcx_main( + Encoder_State *st, /* i/o: encoder state structure */ + const float new_samples[], /* i : new samples */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ + const float lsp_new[M], /* i : LSPs at the end of the frame */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float pitch_buf[], /* o : floating pitch for each subframe */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void getTCXMode( + Decoder_State *st, /* i/o: decoder memory state */ + Decoder_State *st0 /* i : bitstream */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t MCT_flag +#endif +); + +void getTCXWindowing( + const int16_t core, /* i : current frame mode */ + const int16_t last_core, /* i : last frame mode */ +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + const int16_t element_mode, +#endif + TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX configuration handle */ + Decoder_State *st0 /* i : bitstream */ +); + +void getLPCparam( + Decoder_State *st, /* i/o: decoder memory state */ + int16_t param_lpc[], /* o : LTP parameters */ + Decoder_State *st0, /* i : bitstream */ + const int16_t ch, /* i : channel */ + const int16_t sns_low_br_mode /* i : SNS low-bitrate mode */ +); + +void getTCXparam( + Decoder_State *st, /* i/o: Decoder State handle */ + Decoder_State *st0, /* i : bitstream */ + CONTEXT_HM_CONFIG hm_cfg, /* i/o: HM config */ + int16_t param[], /* o : decoded parameters */ + const int16_t bits_common, /* i : number of common bits */ + const int16_t start_bit_pos, /* i : position of the start bit */ + const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ + int16_t p_param[2], /* o : pointer to parameters for next round of bs reading*/ + int16_t nTnsBitsTCX10[2], + const int16_t pre_past_flag ); + +void pitch_pred_linear_fit( + const int16_t nbLostCmpt, /* i : bfi counter */ + const int16_t last_good, /* i : last classification type */ + float *old_pitch_buf, /* i : pitch lag buffer */ + float *old_fpitch, /* i/o: pitch used for initial ACB generation */ + float *T0_out, /* o : estimated close loop pitch */ + const int16_t pit_min, /* i : Minimum pitch lag */ + const int16_t pit_max, /* i : Maximum pitch lag */ + float *mem_pitch_gain, /* i : lag pitch gain [0] is the most recent subfr lag */ + const int16_t limitation, + const int16_t plc_use_future_lag, /* i : number of subframes to predict */ + int16_t *extrapolationFailed, /* o : flag if extrap decides not to change the pitch */ + const int16_t nb_subfr /* i : number of ACELP subframes */ +); + +void get_subframe_pitch( + const int16_t nSubframes, /* i : number of subframes */ + float pitchStart, /* i : starting pitch lag (in subframe -1) */ + float pitchEnd, /* i : ending pitch lag (in subframe nSubframes-1) */ + float *pitchBuf /* o : interpolated pitch lag per subframe */ +); + +void core_encode_openloop( + Encoder_State *st, /* i/o: encoder state structure */ + const float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ + const float lsp_new[M], /* i : LSPs at the end of the frame */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + float *pitch_buf, /* i/o: floating pitch values for each subfr*/ + float *voice_factors, /* o : voicing factors */ + float *ptr_bwe_exc, /* o : excitation for SWB TBE */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void core_acelp_tcx20_switching( + Encoder_State *st, /* i/o: encoder state structure */ + float non_staX, /* i : unbound non-stationarity for sp/mu clas */ + float *pitch_fr, /* i/o: fraction pitch values */ + float *voicing_fr, /* i/o: fractional voicing values */ + const float currTempFlatness, /* i : flatness */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + const float stab_fac /* i : LP filter stability */ +); + +void core_encode_twodiv( + Encoder_State *st, /* i/o: coder memory state */ + const float new_samples[], /* i : new samples */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void core_encode_update( + Encoder_State *st /* i/o: encoder state structure */ +); + +void core_encode_update_cng( + Encoder_State *st, /* i/o: encoder state structure */ + float *timeDomainBuffer, + float *A, + const float Aw[] /* i : weighted A(z) unquant. for subframes*/ +); + +void core_signal_analysis_high_bitrate( + const float *new_samples, + const int16_t T_op[3], /* i : open-loop pitch values for quantiz. */ + float lsp_new[], + float lsp_mid[], + Encoder_State *st, + float *mdst_spectrum[2], + int16_t pTnsSize[], + int16_t pTnsBits[], + int16_t param_core[], + int16_t *ltpBits, + float *windowed_samples, /* i/o: backup of windowed time signal */ + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t last_element_mode, + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +/*! r: codebook gain (adaptive or fixed) */ +float get_gain( + const float x[], /* i : target signal */ + const float y[], /* i : filtered codebook excitation */ + const int16_t n, /* i : segment length */ + float *en_y /* o : energy of y (sum of y[]^2, optional) */ +); + +void encode_acelp_gains( + const float *code, + const int16_t gains_mode, + const float mean_ener_code, + const int16_t clip_gain, + ACELP_CbkCorr *g_corr, + float *gain_pit, + float *gain_code, + int16_t **pt_indice, + float *past_gcode, + float *gain_inov, + const int16_t L_subfr, + float *code2, + float *gain_code2, + const int16_t noisy_speech_flag ); + +int16_t gain_enc_gacelp_uv( + const float *code, /* i : algebraic excitation */ + const float *code2, /* i : gaussian excitation */ + const int16_t lcode, /* i : Subframe size */ + const float mean_ener, /* i : quantized mean energy of the frame */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_code2, /* o : quantized codebook gain */ + ACELP_CbkCorr *coeff, /* i/o: correlations , -2,, -2 and 2 */ + float *past_gcode, /* i/o: past gain of code */ + float *gain_inov, /* o : unscaled innovation gain */ + const int16_t noisy_speech_flag /* i : noisy speech flag */ +); + +int16_t Mode2_gain_enc_mless( + const float *code, /* i : algebraic excitation */ + const int16_t lcode, /* i : Subframe size */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + ACELP_CbkCorr *coeff, /* i/o: correlations , -2,, -2 and 2 */ + const float mean_ener, /* i : mean_ener defined in open-loop (3 bits) */ + const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ + float *past_gcode, /* i/o: past gain of code */ + float *gain_inov, /* o : unscaled innovation gain */ + const int16_t coder_type /* i : type of coder */ +); + +void decode_acelp_gains( + const float *code, + const int16_t gains_mode, + const float mean_ener_code, + float *gain_pit, + float *gain_code, + int16_t **pt_indice, + float *past_gpit, + float *past_gcode, + float *gain_inov, + const int16_t L_subfr, + float *code2, + float *gain_code2 ); + +void gain_dec_gacelp_uv( + int16_t index, /* i/o: Quantization index vector */ + const float *code, /* i : algebraic code excitation */ + const float *code2, /* i : algebraic code excitation */ + const float mean_ener, /* i : mean energy */ + const int16_t lcode, /* i : Subframe size */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codebook gain */ + float *gain_code2, /* o : Quantized codebook gain */ + float *past_gpit, /* i/o: past gain of pitch */ + float *past_gcode, /* i/o: past energy of code */ + float *gain_inov /* o : unscaled innovation gain */ +); + +void Mode2_pit_encode( + const int16_t coder_type, /* i : coding model */ + const int16_t i_subfr, /* i : subframe index */ + int16_t **pt_indice, /* i/o: quantization indices pointer */ + float *exc, /* i/o: pointer to excitation signal frame */ + const int16_t *T_op, /* i : open loop pitch estimates in current frame */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_min_frac, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + int16_t *T0_max_frac, /* i/o: higher limit for close-loop search */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ + int16_t *T0_res, /* i/o: close loop pitch resolution */ + float *h1, /* i : weighted filter impulse response */ + float *xn, /* i : target vector */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr1b, + const int16_t pit_fr2, + const int16_t pit_max, + const int16_t pit_res_max ); + +void limit_T0_voiced( + const int16_t nbits, + const int16_t res, + const int16_t T0, /* i : rough pitch estimate around which the search is done */ + const int16_t T0_frac, /* i : pitch estimate fractional part */ + const int16_t T0_res, /* i : pitch resolution */ + int16_t *T0_min, /* o : lower pitch limit */ + int16_t *T0_min_frac, /* o : lower pitch limit */ + int16_t *T0_max, /* o : higher pitch limit */ + int16_t *T0_max_frac, /* o : higher pitch limit */ + const int16_t pit_min, /* i : Minimum pitch lag */ + const int16_t pit_max /* i : Maximum pitch lag */ +); + +void Mode2_abs_pit_enc( + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + int16_t **pt_indice, /* i/o: pointer to Vector of Q indexes */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr2, + const int16_t pit_res_max ); + +void Mode2_delta_pit_enc( + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + const int16_t T0_res, /* i : pitch resolution */ + const int16_t T0_min, /* i : delta search min */ + const int16_t T0_min_frac, /* i : delta search min */ + int16_t **pt_indice /* o : pointer to Vector of Q indexes */ +); + +/*! r: floating pitch value */ +float Mode2_pit_decode( + const int16_t coder_type, /* i : coding model */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t L_subfr, /* i : sub-frame length */ + int16_t **pt_indice, /* i/o: quantization indices pointer */ + int16_t *T0, /* o : close loop integer pitch */ + int16_t *T0_frac, /* o : close loop fractional part of the pitch */ + int16_t *T0_res, /* i/o: pitch resolution */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_min_frac, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + int16_t *T0_max_frac, /* i/o: higher limit for close-loop search */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr1b, + const int16_t pit_fr2, + const int16_t pit_max, + const int16_t pit_res_max ); + +void Mode2_abs_pit_dec( + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t *T0_res, /* o : pitch resolution */ + int16_t **pt_indice, /* i/o: pointer to Vector of Q indexes */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr2, + const int16_t pit_res_max ); + +void Mode2_delta_pit_dec( + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t T0_res, /* i : pitch resolution */ + int16_t *T0_min, /* i : delta search min */ + int16_t *T0_min_frac, /* i : delta search min */ + int16_t **pt_indice /* i/o: pointer to Vector of Q indexes */ +); + +void formant_post_filt( + PFSTAT_HANDLE hPFstat, /* i/o: Post filter related memories */ + float *synth_in, /* i : 12k8 synthesis */ + const float *Aq, /* i : LP filter coefficient */ + float *synth_out, /* i/o: input signal */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_subfr, /* i : sub-frame length */ + const float lp_noise, /* i : background noise energy */ + const int32_t brate, /* i : bitrate */ + const int16_t off_flag /* i : Off flag */ +); + +void qlpc_avq( + const float *lsp, /* i : Input LSF vectors */ + const float *lspmid, /* i : Input mid-LSF vectors */ + float *lsf_q, /* o : Quantized LFS vectors */ + float *lsfmid_q, /* o : Quantized mid-LFS vectors */ + int16_t *index, /* o : Quantization indices */ + int16_t *nb_indices, /* o : Number of quantization indices */ + int16_t *nbbits, /* o : Number of quantization bits */ + const int16_t core, /* i : core */ + const int32_t sr_core /* i : internal sampling rate */ +); + +int16_t encode_lpc_avq( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + const int16_t numlpc, /* i : Number of sets of lpc */ + const int16_t *param_lpc, /* i : lpc parameters */ + const int16_t core, /* i : core */ + const int16_t element_mode /* i : element mode */ +); + +int16_t dlpc_avq( + int16_t *index, /* i : Quantization indices */ + float *LSF_Q, /* o : Quantized LSF vectors */ + const int16_t numlpc, /* i : Number of sets of lpc */ + const int32_t sr_core /* i : internal sampling rate */ +); + +int16_t decode_lpc_avq( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t numlpc, /* i : Number of sets of lpc */ + int16_t *param_lpc, /* o : lpc parameters */ + const int16_t ch, /* i : channel */ + const int16_t element_mode, /* i : element mode */ + const int16_t sns_low_br_mode /* i : SNS low-bitrate mode */ +); + +/*! r: codebook index */ +int16_t vlpc_1st_cod( + const float *lsf, /* i : vector to quantize */ + float *lsfq, /* i/o: i:prediction o:quantized lsf */ + const int32_t sr_core, /* i : internal sampling rate */ + float *w /* o : lsf weights */ +); + +/*! r: number of allocated bits */ +int16_t vlpc_2st_cod( + const float *lsf, /* i : normalized vector to quantize */ + float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ + int16_t *indx, /* o : index[] (4 bits per words) */ + const int16_t mode, /* i : 0=abs, >0=rel */ + const int32_t sr_core /* i : internal sampling rate */ +); + +void vlpc_2st_dec( + float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ + int16_t *indx, /* i : index[] (4 bits per words) */ + const int16_t mode, /* i : 0=abs, >0=rel */ + const int32_t sr_core /* i : internal sampling rate */ +); + +void lsf_weight_2st( + const float *lsfq, + float *w, + const int16_t mode, + const int32_t sr_core ); + +void mdct_window_sine( + float *window, + const int32_t Fs, + const int16_t n, + const int16_t window_type, + const int16_t element_mode ); + +void mdct_window_aldo( + float *window1, + float *window2, + const int16_t n ); + +void AVQ_cod_lpc( + const float nvec[], /* i : vector to quantize */ + int16_t nvecq[], /* o : quantized normalized vector (assuming the bit budget is enough) */ + int16_t *indx, /* o : index[] (4 bits per words) */ + const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ +); + +void AVQ_dec_lpc( + const int16_t indx[], /* i : index[] (4 bits per words) */ + int16_t nvecq[], /* o : vector quantized */ + const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ +); + +void vlpc_1st_dec( + const int16_t index, /* i : codebook index */ + float *lsfq, /* i/o: i:prediction o:quantized lsf */ + const int32_t sr_core ); + +void WindowSignal( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + int16_t offset, /* i : left folding point offset relative to the input signal pointer */ + const int16_t left_overlap_mode, /* i : overlap mode of left window half */ + const int16_t right_overlap_mode, /* i : overlap mode of right window half */ + int16_t *left_overlap_length, /* o : TCX window left overlap length */ + int16_t *right_overlap_length, /* o : TCX window right overlap length */ + const float in[], /* i : input signal */ + int16_t *L_frame, /* i/o: frame length */ + float out[], /* o : output windowed signal */ + const int16_t truncate_aldo, /* i : nonzero to truncate long ALDO slope */ + const int16_t fullband, /* i : fullband flag */ + const int16_t isLfe /* i: LFE flag */ +); + +void HBAutocorrelation( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const int16_t left_mode, /* i : overlap mode of left window half */ + const int16_t right_mode, /* i : overlap mode of right window half */ + float speech[], /* i : speech */ + int16_t L_frame_glob, /* i/o: frame length */ + float *r /* o : autocorrelations vector */ +); + +void TNSAnalysis( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const int16_t L_frame, /* i : frame length */ + int16_t L_spec, /* i : length of the spectrum */ + const int16_t transform_type, /* i : transform type for the frame/subframe - TCX20 | TCX10 | TCX 5 (meaning 2 x TCX 5) */ + const int16_t isAfterACELP, /* i : Flag indicating if the last frame was ACELP. For the second TCX subframe it should be 0 */ + float spectrum[], /* i : MDCT spectrum of the subframe */ + TRAN_DET_HANDLE hTranDet, /* i : handle transient detection */ + const float ltp_gain, /* i : ltp gain */ + STnsData *pTnsData, /* o : TNS data */ + int16_t *pfUseTns, /* o : Flag indicating if TNS is used */ + float *predictionGain /* o : TNS prediction gain */ +); + +void CalculateTnsFilt( + STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ + const float pSpectrum[], /* i : MDCT spectrum */ + STnsData *pTnsData, /* o : TNS data struct */ + float *predictionGain /* o : TNS prediction gain */ +); + +void ShapeSpectrum( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const float A[], /* i : quantized coefficients NxAz_q[M+1] */ + float gainlpc[], /* o : MDCT gains for the previous frame */ + const int16_t L_frame_glob, /* i : frame length */ + int16_t L_spec, /* i : length of the spectrum */ + float spectrum[], /* i/o: MDCT spectrum */ + const int16_t fUseTns, /* i : Flag indicating if TNS is used */ + Encoder_State *st, /* i/o: encoder state structure */ + float *scf /* i : scale factors */ +); + +void QuantizeSpectrum( + Encoder_State *st, /* i/o: encoder state structure */ + const float A[], /* i : quantized coefficients NxAz_q[M+1] */ + const Word16 Aqind[], /* i : frame-independent quantized coeffs (M+1) */ + float gainlpc[], /* i : MDCT gains of the previous frame */ + float synth[], /* o : synthesis buffer */ + const int16_t nb_bits, /* i : bit budget */ + const int16_t tnsSize, /* i : number of tns parameters put into prm */ + int16_t prm[], /* o : tcx parameters */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + CONTEXT_HM_CONFIG *hm_cfg, /* i : HM configuration */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +/*! r: index of next coefficient */ +int16_t get_next_coeff_mapped( + int16_t ii[2], /* i/o: coefficient indexes */ + int32_t *pp, /* o : peak(1)/hole(0) indicator */ + int16_t *idx, /* o : index in unmapped domain */ + CONTEXT_HM_CONFIG *hm_cfg /* i : HM configuration */ +); + +/*! r: index of next coefficient */ +int16_t get_next_coeff_unmapped( + int16_t *ii, /* i/o: coefficient index */ + int16_t *idx /* o : index in unmapped domain */ +); + +int32_t update_mixed_context( + int32_t ctx, + int16_t a ); + +void ACcontextMapping_encode2_no_mem_s17_LC( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t *x, + int16_t nt, + int16_t lastnz, + int16_t nbbits, + int16_t resQMaxBits, + CONTEXT_HM_CONFIG *hm_cfg ); + +int16_t ACcontextMapping_decode2_no_mem_s17_LC( + Decoder_State *st, /* i/o: decoder state */ + int16_t *x, /* o : decoded spectrum */ + int16_t nt, /* i : size of spectrum */ + int16_t nbbits, /* i : bit budget */ + int16_t resQMaxBits, /* i : residual coding maximum bits */ + CONTEXT_HM_CONFIG *hm_cfg /* i : context-based harmonic model configuration */ +); + +int16_t ACcontextMapping_encode2_estimate_no_mem_s17_LC( + const int16_t *x, + const int16_t nt, + int16_t *lastnz, + int16_t *nEncoded, + const int16_t target, + int16_t *stop, + CONTEXT_HM_CONFIG *hm_cfg ); + +void RCcontextMapping_encode2_no_mem_s17_LCS( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t *x, + const int16_t nt, + int16_t lastnz, + const int16_t nbbits, + const int16_t resQMaxBits, + CONTEXT_HM_CONFIG *hm_cfg ); + +int16_t RCcontextMapping_decode2_no_mem_s17_LCS( + Decoder_State *st, /* i/o: decoder state */ + int16_t *x, /* o : decoded spectrum */ + const int16_t nt, /* i : size of spectrum */ + const int16_t nbbits, /* i : bit budget */ + const int16_t resQMaxBits, /* i : residual coding maximum bits */ + CONTEXT_HM_CONFIG *hm_cfg /* i : context-based harmonic model configuration */ +); + +int16_t RCcontextMapping_encode2_estimate_no_mem_s17_LCS( + int16_t *x, /* Spectral coefficients */ + const int16_t nt, /* L - size of spectrum (no. of spectral coefficients) */ + int16_t *lastnz_out, + int16_t *nEncoded, /* No. of spectral coefficients that can be coded without an overflow occuring */ + const int16_t target, /* Target bits */ + int16_t *stop, + int16_t mode, + CONTEXT_HM_CONFIG *hm_cfg /* context-based harmonic model configuration */ +); + +int16_t RCcontextMapping_encode2_estimate_bandWise_start( + int16_t *x, + const int16_t nt, + const int16_t target, + HANDLE_RC_CONTEXT_MEM hContextMem ); + +int16_t RCcontextMapping_encode2_estimate_bandWise( + int16_t *x, + const int16_t start_line, + const int16_t end_line, + HANDLE_RC_CONTEXT_MEM hContextMem ); + +void tcx_get_windows( + TCX_CONFIG_HANDLE hTcxCfg, /* i : TCX configuration */ + const int16_t left_mode, /* i : overlap mode of left window half */ + const int16_t right_mode, /* i : overlap mode of right window half */ + int16_t *left_overlap, /* o : left overlap length */ + const float **left_win, /* o : left overlap window */ + int16_t *right_overlap, /* o : right overlap length */ + const float **right_win, /* o : right overlap window */ + const int16_t fullband, /* i : fullband flag */ + const int16_t isLfe /* i : LFE flag */ +); + +void tcx_windowing_analysis( + const float *signal, /* i : signal vector */ + const int16_t L_frame, /* i : frame length */ + const int16_t left_overlap, /* i : left overlap length */ + const float *left_win, /* i : left overlap window */ + const int16_t right_overlap, /* i : right overlap length */ + const float *right_win, /* i : right overlap window */ + float *output /* o : windowed signal vector */ +); + +void tcx_windowing_synthesis_current_frame( + float *signal, /* i/o: signal vector */ + const float *window, /* i : TCX window vector */ + const float *window_half, /* i : TCX window vector for half-overlap window */ + const float *window_min, /* i : TCX minimum overlap window */ + const int16_t window_length, /* i : TCX window length */ + const int16_t window_half_length, /* i : TCX half window length */ + const int16_t window_min_length, /* i : TCX minimum overlap length */ + const int16_t left_rect, /* i : left part is rectangular */ + const int16_t left_mode, /* i : overlap mode of left window half */ + float *acelp_zir, /* i/o: acelp ZIR */ + const float *old_syn, /* i : old synthesis */ + const float *syn_overl, /* i : overlap synthesis */ + const float *A_zir, + const float *window_trans, /* i : window for transition from ACELP */ + int16_t acelp_zir_len, + const int16_t acelp_mem_len, + const int16_t last_core_bfi, /* i : last mode */ + const int16_t last_is_cng, + const int16_t fullbandScale ); + +void tcx_windowing_synthesis_past_frame( + float *signal, /* i/o: signal vector */ + const float *window, /* i : TCX window vector */ + const float *window_half, /* i : TCX window vector for half-overlap window */ + const float *window_min, /* i : TCX minimum overlap window */ + const int16_t window_length, /* i : TCX window length */ + const int16_t window_half_length, /* i : TCX half window length */ + const int16_t window_min_length, /* i : TCX minimum overlap length */ + const int16_t right_mode /* i : overlap mode (left_mode of current frame) */ +); + +void ProcessIGF( + Encoder_State *st, /* i : Encoder state */ + float *pMDCTSpectrum, /* i : MDCT spectrum */ + const float *pITFMDCTSpectrum, /* i : MDCT spectrum fir ITF */ + float *pPowerSpectrum, /* i : MDCT^2 + MDST^2 spectrum, or estimate */ + const int16_t isTCX20, /* i : flag indicating if the input is TCX20 or TCX10/2xTCX5 */ + const int16_t frameno, /* i : flag indicating index of current subframe */ + const int16_t sp_aud_decision0, /* i : first stage switching decision */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void ProcessStereoIGF( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, + Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ + int16_t ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ + float *pITFMDCTSpectrum[CPE_CHANNELS][2], /* i : MDCT spectrum fir ITF */ + float pPowerSpectrum[CPE_CHANNELS][N_MAX], /* i : MDCT^2 + MDST^2 spectrum, or estimate */ + float *pPowerSpectrumMsInv[CPE_CHANNELS][2], /* i : inverse power spectrum */ + float *inv_spectrum[CPE_CHANNELS][2], /* i : inverse spectrum */ + const int16_t frameno, /* i : flag indicating index of current subframe*/ + const int16_t sp_aud_decision0, /* i : sp_aud_decision0 */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +); + +void AnalyzePowerSpectrum( + Encoder_State *st, /* i/o: encoder states */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_frameTCX, /* i : full band frame length */ + const int16_t left_overlap, /* i : left overlap length */ + const int16_t right_overlap, /* i : right overlap length */ + const float mdctSpectrum[], /* i : MDCT spectrum */ + const float signal[], /* i : windowed signal corresponding to mdctSpectrum */ + float powerSpec[] /* o : Power spectrum */ +); + +void lpc2mdct( + float *lpcCoeffs, + const int16_t lpcOrder, + float mdct_gains[], + const int16_t length, + const int16_t noInverse ); + +void mdct_preShaping( + float x[], + const int16_t lg, + const float gains[] ); + +void mdct_noiseShaping( + float x[], + const int16_t lg, + const float gains[], + const int16_t nBands ); + +void AdaptLowFreqEmph( + float x[], + int16_t xq[], + float invGain, + const int16_t tcx_lpc_shaped_ari, + const float lpcGains[], + const int16_t lg ); + +void PsychAdaptLowFreqEmph( + float x[], + const float lpcGains[] ); + +void PsychAdaptLowFreqDeemph( + float x[], + const float lpcGains[], + float lf_deemph_factors[] ); + +void AdaptLowFreqDeemph( + float x[], + int16_t tcx_lpc_shaped_ari, + const float lpcGains[], + const int16_t lg, + float lf_deemph_factors[] ); + +/*! r: SQ gain */ +float SQ_gain( + const float x[], /* i : vector to quantize */ + const int16_t nbitsSQ, /* i : number of bits targeted */ + const int16_t lg /* i : vector size (2048 max) */ +); + +/*! r: SQ gain */ +float SQ_gain_estimate( + const float x[], /* i : vector to quantize */ + const int16_t nbitsSQ, /* i : number of bits targeted */ + const int16_t lg /* i : vector size (2048 max) */ +); + + +void tcx_scalar_quantization( + float *x, /* i : input coefficients */ + int16_t *xq, /* o : quantized coefficients */ + const int16_t L_frame, /* i : frame length */ + const float gain, /* i : quantization gain */ + const float offset, /* i : rounding offset (deadzone) */ + int16_t *memQuantZeros, /* o : coefficients set to 0 */ + const int16_t tcxonly ); + +int16_t tcx_scalar_quantization_rateloop( + float *x, /* i : input coefficients */ + int16_t *xq, /* o : quantized coefficients */ + const int16_t L_frame, /* i : frame length */ + float *gain, /* i/o: quantization gain */ + float offset, /* i : rounding offset (deadzone) */ + int16_t *memQuantZeros, /* o : coefficients set to 0 */ + int16_t *lastnz_out, /* i/o: last nonzero coeff index */ + const int16_t target, /* i : target number of bits */ + int16_t *nEncoded, /* o : number of encoded coeff */ + int16_t *stop, /* i/o: stop param */ + const int16_t sqBits_in_noStop, /* i : number of sqBits as determined in prev. quant. stage, w/o using stop mechanism (ie might exceed target bits) */ + const int16_t sqBits_in, /* i : number of sqBits as determined in prev. quant. stage, using stop mechanism (ie always <= target bits) */ + const int16_t tcxRateLoopOpt, /* i : turns on/off rateloop optimization */ + const int16_t tcxonly, + CONTEXT_HM_CONFIG *hm_cfg, + const int16_t iter_max, + const int16_t element_mode ); + +void tcx_QuantizeGain( + const int16_t n, + float *pGain, + int16_t *pQuantizedGain ); + +void tcx_noise_factor( + const float *x_orig, /* i : unquantized mdct coefficients */ + float *sqQ, /* i/o: quantized mdct coefficients */ + const int16_t iFirstLine, /* i : first coefficient to be considered */ + const int16_t lowpassLine, /* i : last nonzero coefficients after low-pass */ + const int16_t nMinHoleSize, /* i : minimum size of hole to be checked */ + const int16_t L_frame, /* i : frame length */ + const float gain_tcx, /* i : tcx gain */ + const float tiltCompFactor, /* i : LPC tilt compensation factor */ + float *fac_ns, /* o : noise factor */ + int16_t *quantized_fac_ns, /* o : quantized noise factor */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void tcx_noise_filling( + float *Q, + const int16_t noiseFillSeed, + const int16_t iFirstLine, + const int16_t lowpassLine, + const int16_t nTransWidth, + const int16_t L_frame, + const float tiltCompFactor, + float fac_ns, + uint8_t *infoTCXNoise, + const int16_t element_mode /* i : IVAS element mode */ +); + +void tcx_encoder_memory_update( + Encoder_State *st, /* i/o: encoder memory state */ + float *xn_buf, /* i/o: mdct output buffer/TD weigthed synthesis */ + const float *Ai, /* i : Unquantized (interpolated) LPC coefficients */ + const float *A /* i : Quantized LPC coefficients */ +); + +void tcx_decoder_memory_update( + Decoder_State *st, /* i/o: decoder memory state */ + const float *xn_buf, /* i : mdct output buffer */ + float *synth, /* i/o: synth */ + const float *A /* i : Quantized LPC coefficients */ +); + +/*! r: number of bits used (including "bits") */ +int16_t tcx_ari_res_Q_spec( + const float x_orig[], /* i : original spectrum */ + const int16_t signs[], /* i : signs (x_orig[.]<0) */ + float x_Q[], /* i/o: quantized spectrum */ + const int16_t L_frame, /* i : number of lines */ + const float gain, /* i : TCX gain */ + int16_t prm[], /* o : bitstream */ + int16_t target_bits, /* i : number of bits available */ + int16_t bits, /* i : number of bits used so far */ + const float deadzone, /* i : quantizer deadzone */ + const float x_fac[] /* i : spectrum post-quantization factors */ +); + +/*! r: number of bits used (including "bits") */ +int16_t tcx_ari_res_invQ_spec( + float x_Q[], /* i/o: quantized spectrum */ + const int16_t L_frame, /* i : number of lines */ + const int16_t prm[], /* i : bitstream */ + int16_t target_bits, /* i : number of bits available */ + int16_t bits, /* i : number of bits used so far */ + const float deadzone, /* i : quantizer deadzone */ + const float x_fac[] /* i : spectrum post-quantization factors */ +); + +int16_t tcx_res_Q_gain( + float sqGain, + float *gain_tcx, + int16_t *prm, + int16_t sqTargetBits ); + +int16_t tcx_res_Q_spec( + const float *x_orig, + float *x_Q, + const int16_t L_frame, + const float sqGain, + int16_t *prm, + int16_t sqTargetBits, + int16_t bits, + const float sq_round, + const float lf_deemph_factors[] ); + +int16_t tcx_res_invQ_gain( + float *gain_tcx, + const int16_t *prm, + const int16_t resQBits ); + +int16_t tcx_res_invQ_spec( + float *x, + const int16_t L_frame, + const int16_t *prm, + int16_t resQBits, + int16_t bits, + const float sq_round, + const float lf_deemph_factors[] ); + +void InitTnsConfigs( + const int16_t bwidth, + const int16_t L_frame, + STnsConfig tnsConfig[2][2], + const int16_t igfStopFreq, + const int32_t total_brate, + const int16_t element_mode, + const int16_t is_mct /* i : MCT mode flag */ +); + +void SetAllowTnsOnWhite( + STnsConfig tnsConfig[2][2], + const int8_t allowTnsOnWhite ); + +void SetTnsConfig( + TCX_CONFIG_HANDLE hTcxCfg, + const int16_t isTCX20, + const int16_t isAfterACELP ); + +void ari_copy_states( + Tastat *source, + Tastat *dest ); + +int32_t mul_sbc_14bits( + int32_t r, + int32_t c ); + +void ari_start_encoding_14bits( + Tastat *s ); + +int16_t ari_encode_14bits_ext( + int16_t *ptr, + int16_t bp, + Tastat *s, + int32_t symbol, + const uint16_t *cum_freq ); + +int16_t ari_done_encoding_14bits( + int16_t *ptr, + int16_t bp, + Tastat *s ); + +void ari_start_decoding_14bits( + Decoder_State *st, + Tastat *s ); + +int16_t ari_start_decoding_14bits_prm( + const int16_t *ptr, + int16_t bp, + Tastat *s ); + +void ari_decode_14bits_s17_ext( + Decoder_State *st, + uint16_t *res, + Tastat *s, + const uint16_t *cum_freq ); + +void ari_decode_14bits_s27_ext( + Decoder_State *st, + uint16_t *res, + Tastat *s, + const uint16_t *cum_freq ); + +void ari_decode_14bits_bit_ext( + Decoder_State *st, + uint16_t *res, + Tastat *s ); + +/*! r: Q15 */ +Word16 expfp( + const Word16 x, /* i : mantissa Q15-e */ + const Word16 x_e /* i : exponent Q0 */ +); + +void powfp_odd2( + const Word16 base, /* Q15 */ + const Word16 exp, /* Q0 */ + Word16 *pout1, /* Q15 */ + Word16 *pout2 /* Q15 */ +); + +void tcx_arith_scale_envelope( + const Word16 L_spec_core, /* i : number of lines to scale Q0 */ + Word16 L_frame, /* i : number of lines Q0 */ + const Word32 env[], /* i : unscaled envelope Q16 */ + Word16 target_bits, /* i : number of available bits Q0 */ + const Word16 low_complexity, /* i : low-complexity flag Q0 */ + Word16 s_env[], /* o : scaled envelope Q15-e */ + Word16 *s_env_e /* o : scaled envelope exponent Q0 */ +); + +void tcx_arith_render_envelope( + const Word16 A_ind[], /* i : LPC coefficients of signal envelope */ + const Word16 L_frame, /* i : number of spectral lines */ + const Word16 L_spec, /* i : length of the coded spectrum */ + const Word16 preemph_fac, /* i : pre-emphasis factor */ + const Word16 gamma_w, /* i : A_ind -> weighted envelope factor */ + const Word16 gamma_uw, /* i : A_ind -> non-weighted envelope factor */ + Word32 env[] /* o : shaped signal envelope */ +); + +int16_t ari_encode_14bits_range( + int16_t *ptr, + int16_t bp, + int32_t bits, + Tastat *s, + uint16_t cum_freq_low, + uint16_t cum_freq_high ); + +int16_t ari_encode_14bits_sign( + int16_t *ptr, + int16_t bp, + int32_t bits, + Tastat *s, + int32_t sign ); + +int16_t ari_done_cbr_encoding_14bits( + int16_t *ptr, + int16_t bp, + int32_t bits, + Tastat *s ); + +int16_t ari_decode_14bits_pow( + const int16_t *ptr, + int16_t bp, + int16_t bits, + int16_t *res, + Tastat *s, + uint16_t base ); + +int16_t ari_decode_14bits_sign( + const int16_t *ptr, + int16_t bp, + int16_t bits, + uint16_t *res, + Tastat *s ); + +void tcx_arith_encode_envelope( + float spectrum[], /* i/o: MDCT coefficients */ + int16_t signs[], /* o : signs (spectrum[.]<0) */ + const int16_t L_frame, /* i : frame or MDCT length */ + const int16_t L_spec, /* i : length w/o BW limitation */ + Encoder_State *st, /* i/o: coder state */ + const Word16 A_ind[], /* i : quantised LPC coefficients */ + int16_t target_bits, /* i : number of available bits */ + int16_t prm[], /* o : bitstream parameters */ + const int16_t use_hm, /* i : use HM in current frame? */ + int16_t prm_hm[], /* o : HM parameter area */ + const int16_t tcxltp_pitch, /* i : TCX LTP pitch in FD, -1 if n/a*/ + int16_t *arith_bits, /* o : bits used for ari. coding */ + int16_t *signaling_bits, /* o : bits used for signaling */ + const int16_t low_complexity /* i : low-complexity flag */ +); + +void tcx_arith_decode_envelope( + Decoder_State *st, /* i/o: coder state */ + float q_spectrum[], /* o : quantised MDCT coefficients */ + const int16_t L_frame, /* i : frame or MDCT length */ + int16_t L_spec, /* i : length w/o BW limitation */ + const Word16 A_ind[], /* i : quantised LPC coefficients */ + const int16_t target_bits, /* i : number of available bits */ + const int16_t prm[], /* i : bitstream parameters */ + const int16_t use_hm, /* i : use HM in current frame? */ + const int16_t prm_hm[], /* i : HM parameter area */ + int16_t tcxltp_pitch, /* i : TCX LTP pitch in FD, -1 if n/a*/ + int16_t *arith_bits, /* o : bits used for ari. coding */ + int16_t *signaling_bits, /* o : bits used for signaling */ + const int16_t low_complexity /* i : low-complexity flag */ +); + +void UnmapIndex( + const int16_t PeriodicityIndex, + const int16_t Bandwidth, + const int16_t LtpPitchLag, + const int16_t SmallerLags, + int16_t *FractionalResolution, + int32_t *Lag ); + +/*! r: PeriodicityIndex */ +int16_t SearchPeriodicityIndex( + const float Mdct[], /* i : Coefficients, Mdct[0..NumCoeffs-1] */ + const float UnfilteredMdct[], /* i : Unfiltered coefficients, UnfilteredMdct[0..NumCoeffs-1] */ + const int16_t NumCoeffs, /* i : Number of coefficients */ + const int16_t shortTargetBits, /* i : Target bit budget (excl. Done flag) */ + const int16_t LtpPitchLag, /* i : TCX-LTP pitch */ + const float LtpGain, /* i : LTP gain */ + float *RelativeScore /* o : Energy concentration factor */ +); + +void ConfigureContextHm( + const int16_t NumCoeffs, /* i : Number of coefficients */ + const int16_t TargetBits, /* i : Target bit budget (excl. Done flag) */ + const int16_t PeriodicityIndex, /* i : Pitch related index */ + const int16_t LtpPitchLag, /* i : TCX-LTP pitch in F.D. */ + CONTEXT_HM_CONFIG *hm_cfg /* o : Context-based harmonic model configuration */ +); + +int16_t EncodeIndex( + const int16_t Bandwidth, /* o : NB, 1: (S)WB */ + int16_t PeriodicityIndex, + BSTR_ENC_HANDLE hBstr ); + +int16_t CountIndexBits( + const int16_t Bandwidth, /* o : NB, 1: (S)WB */ + const int16_t PeriodicityIndex ); + +int16_t DecodeIndex( + Decoder_State *st, + const int16_t Bandwidth, /* o : NB, 1: (S)WB */ + int16_t *PeriodicityIndex ); + +#define GET_ADJ( T, L ) GET_ADJ2( T, L, *FractionalResolution ) +#define GET_ADJ2( T, L, F ) ( ( ( L ) << ( F ) ) - ( T ) ) + +int16_t tcx_hm_render( + const int16_t lag, /* i : pitch lag */ + const int16_t fract_res, /* i : fractional resolution of the lag */ + Word16 p[] /* o : harmonic model (Q13) */ +); + +void tcx_hm_modify_envelope( + const Word16 gain, /* i : HM gain (Q11) */ + const int16_t lag, + const int16_t fract_res, + const Word16 p[], /* i : harmonic model (Q13) */ + Word32 env[], /* i/o: envelope (Q16) */ + const int16_t L_frame /* i : number of spectral lines */ +); + +void tcx_hm_analyse( + const float abs_spectrum[], /* i : absolute spectrum */ + const int16_t L_frame, /* i : number of spectral lines */ + Word32 env[], /* i/o: envelope shape (Q16) */ + const int16_t targetBits, /* i : target bit budget */ + const int16_t coder_type, /* i : GC/VC coder type */ + int16_t prm_hm[], /* o : HM parameters */ + int16_t LtpPitchLag, /* i : LTP pitch lag or -1 if none */ + const float LtpGain, /* i : LTP gain */ + int16_t *hm_bits /* o : bit consumption */ +); + +void tcx_hm_decode( + const int16_t L_frame, /* i : number of spectral lines */ + Word32 env[], /* i/o: envelope shape (Q16) */ + const int16_t targetBits, /* i : target bit budget */ + const int16_t coder_type, /* i : GC/VC coder type */ + const int16_t prm_hm[], /* i : HM parameters */ + const int16_t LtpPitchLag, /* i : LTP pitch lag or -1 if none */ + int16_t *hm_bits /* o : bit consumption */ +); + +void coder_tcx( + Encoder_State *st, /* i/o: encoder state structure */ + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const float A[], /* i : quantized coefficients NxAz_q[M+1] */ + const Word16 Aqind[], /* i : frame-independent quantized coefficients (M+1) */ + float synth[], /* o : decoded synthesis */ + const int16_t L_frame_glob, /* i : frame length */ + const int16_t L_frameTCX_glob, + const int16_t L_spec, + int16_t nb_bits, /* i : bit budget */ + float spectrum[], /* i/o: MDCT spectrum */ + int16_t prm[], /* o : tcx parameters */ + CONTEXT_HM_CONFIG *hm_cfg, + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void coder_tcx_post( + Encoder_State *st, /* i/o: decoder memory state */ + float *A, + const float *Ai ); + +void decoder_tcx( + Decoder_State *st, /* i/o: coder memory state */ + int16_t prm[], /* i : parameters */ + float A[], /* i : coefficients NxAz[M+1] */ + Word16 Aind[], /* i : frame-independent coefficients Az[M+1]*/ + float synth[], /* i/o: synth[-M..lg] */ + float synthFB[], + const int16_t bfi, /* i : Bad frame indicator */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +); + +void decoder_tcx_post( + Decoder_State *st, /* i/o: decoder memory state */ + float *synth, + float *synthFB, + float *A, + const int16_t bfi +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t isMCT +#endif +); + +void coder_acelp( + Encoder_State *st, /* i/o: coder memory state */ + const float A[], /* i : coefficients 4xAz[M+1] */ + const float Aq[], /* i : coefficients 4xAz_q[M+1] */ + const float speech[], /* i : speech[-M..lg] */ + LPD_state *LPDmem, /* i/o: ACELP memories */ + int16_t *prm, /* o : acelp parameters */ + const float stab_fac, + const int16_t target_bits, + float *gain_pitch_buf, /* o : gain pitch values */ + float *gain_code_buf, /* o : gain code values */ + float *pitch_buf, /* o : pitch values for each subfr.*/ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +); + +void coder_acelp_rf( + const int16_t target_bits, /* i : target bits */ + const float speech[], /* i : speech[-M..lg] */ + const int16_t coder_type, /* i : coding type */ + const int16_t rf_frame_type, /* i : rf_frame_type */ + const float A[], /* i : coefficients 4xAz[M+1] */ + const float Aq[], /* i : coefficients 4xAz_q[M+1] */ + const float voicing[], /* i : open-loop LTP gain */ + const int16_t T_op[], /* i : open-loop LTP lag */ + const float stab_fac, /* i : LP stability factor */ + Encoder_State *st, /* i/o: coder memory state */ + ACELP_config *acelp_cfg, /* i/o: configuration of the ACELP */ + float *exc_rf, /* i/o: pointer to RF excitation */ + float *syn_rf /* i/o: pointer to RF synthesis */ +); + +void decoder_acelp( + Decoder_State *st, /* i/o: coder memory state */ + int16_t prm[], /* i : parameters */ + const float A[], /* i : coefficients NxAz[M+1] */ + ACELP_config acelp_cfg, /* i : ACELP config */ + float synth[], /* i/o: synthesis */ + int16_t *pT, /* o : pitch for all subframe */ + float *pgainT, /* o : pitch gain for all subfr */ + const float stab_fac, /* i : stability of isf */ + float *pitch_buffer, /* o : pitch values for each subfr.*/ + float *voice_factors, /* o : voicing factors */ + const int16_t LSF_Q_prediction, /* i : LSF prediction mode */ + float *bwe_exc /* o : excitation for SWB TBE */ +); + +void writeTCXMode( + Encoder_State *st, /* i/o: encoder state structure */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t is_mct, +#endif + int16_t *nbits_start /* o : nbits start */ +); + +void writeTCXWindowing( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + const int16_t overlap_mode /* i : overlap mode */ +); + +void writeLPCparam( + Encoder_State *st, /* i/o: encoder state structure */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + const int16_t param_lpc[], /* i : LPC parameters to write */ + const int16_t bits_param_lpc[], /* i : bits per LPC parameter */ + const int16_t no_param_lpc, /* i : number of LPC parameters */ + int16_t *nbits_lpc /* o : LPC bits written */ +); + +void enc_prm( + Encoder_State *st, /* i/o: encoder state structure */ + int16_t param[], /* i : parameters */ + int16_t param_lpc[], /* i : LPC parameters */ + CONTEXT_HM_CONFIG hm_cfg[], + const int16_t bits_param_lpc[], + const int16_t no_param_lpc ); + +void writeTCXparam( + Encoder_State *st, /* i/o: Encoder State handle */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + CONTEXT_HM_CONFIG hm_cfg[], /* i/o: HM config */ + int16_t param[], /* i : parameters */ + const int16_t nbits_header, + const int16_t nbits_start, + const int16_t nbits_lpc, + const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ + int16_t p_param[2], /* i/o: pointer to parameters from previous bs writing */ + const int16_t target_bitsTCX10[2], + const int16_t pre_past_flag ); + +void enc_prm_rf( + Encoder_State *st, /* i/o: decoder memory state */ + const int16_t rf_frame_type, + const int16_t fec_offset ); + +void dec_prm_hm( + Decoder_State *st, /* i/o: decoder memory state */ + int16_t *prm_hm, + const int16_t hm_size ); + +void dec_prm( + Decoder_State *st, /* i/o: decoder memory state */ + int16_t param[], /* o : decoded parameters */ + int16_t param_lpc[], /* i : LPC parameters */ + int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ + int16_t *bitsRead ); + +void gauss_L2( + const float h[], /* i : weighted LP filter impulse response */ + float code[], /* o : gaussian excitation */ + float y2[], /* i : zero-memory filtered code. excitation */ + float y11[], /* o : zero-memory filtered gauss. excitation */ + float *gain, /* o : excitation gain */ + float g_corr[], /* i/o: correlation structure for gain coding */ + float tilt_code, /* i : tilt of code */ + const float *Aq, /* i : quantized LPCs */ + float formant_enh_num, /* i : formant enhancement factor */ + int16_t *seed_acelp /* i/o: random seed */ +); + +void gaus_L2_dec( + float *code, /* o : decoded gaussian codevector */ + float tilt_code, + const float *A, + float formant_enh_num, + int16_t *seed_acelp /* i/o: random seed */ +); + +/*! r: interpolated value */ +float interpolation( + const float *x, /* i : input vector */ + const float *win, /* i : interpolation window */ + const int16_t frac, /* i : fraction */ + const int16_t up_samp, /* i : upsampling factor */ + const int16_t nb_coef /* i : nb of filter coef */ +); + +void predict_signal( + const float excI[], /* i : input excitation buffer */ + float excO[], /* o : output excitation buffer */ + const int16_t T0, /* i : integer pitch lag */ + int16_t frac, /* i : fraction of lag */ + const int16_t frac_max, /* i : max fraction */ + const int16_t L_subfr /* i : subframe size */ +); + +void tcx_ltp_encode( + Encoder_State *st, + const int16_t tcxMode, + const int16_t L_frame, + const float *speech, + float *speech_ltp, + const float *wsp, + const int16_t Top[], + int16_t *ltp_param, + int16_t *ltp_bits, + float *A, + const int16_t disable_ltp, + const int16_t element_mode ); + +void tcx_ltp_post( + Decoder_State *st, + TCX_LTP_DEC_HANDLE hTcxLtpDec, + const int16_t core, + const int16_t output_frame, + const int16_t L_frame, + float sig[], + const float tcx_buf[] ); + +int16_t tcx_ltp_decode_params( + int16_t *ltp_param, + int16_t *pitch_int, + int16_t *pitch_fr, + float *gain, + const int16_t pitmin, + const int16_t pitfr1, + const int16_t pitfr2, + const int16_t pitmax, + const int16_t pitres ); + +int16_t enc_lsf_tcxlpc( + const int16_t **indices, /* i : Ptr to VQ indices */ + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +); + +void msvq_enc( + const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ + const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ + const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ + const float u[], /* i : Vector to be encoded (prediction and mean removed) */ + const int16_t *levels, /* i : Number of levels in each stage */ + const int16_t maxC, /* i : Tree search size (number of candidates kept from */ + /* one stage to the next == M-best) */ + const int16_t stages, /* i : Number of stages */ + const float w[], /* i : Weights */ + const int16_t N, /* i : Vector dimension */ + const int16_t maxN, /* i : Codebook dimension */ + int16_t Idx[] /* o : Indices */ +); + +void msvq_dec( + const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ + const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ + const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ + const int16_t stages, /* i : Number of stages */ + const int16_t N, /* i : Vector dimension */ + const int16_t maxN, /* i : Codebook dimension */ + const int16_t Idx[], /* i : Indices */ + float *uq, /* o : quantized vector */ + Word16 *uq_ind /* o : quantized vector (fixed point) */ +); + +void PulseResynchronization( + const float *src_exc, /* i : Input excitation buffer */ + float *dst_exc, /* o : output excitation buffer */ + const int16_t nFrameLength, /* i : frame length */ + const int16_t nSubframes, /* i : Number of subframes */ + const float pitchStart, /* i : Pitch at the end of the last frame */ + const float pitchEnd /* i : Pitch at the end of the current frame */ +); + +void con_acelp( + float A[], /* i : coefficients NxAz[M+1] */ + const int16_t coder_type, /* i : ACELP coder type */ + float synth[], /* i/o: synthesis */ + int16_t *pT, /* o : pitch for all subframe */ + float *pgainT, /* o : pitch gain for all subfr */ + float stab_fac, /* i : stability of isf */ + Decoder_State *st, /* i/o: coder memory state */ + float pitch_buffer[], /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +); + +void con_tcx( + Decoder_State *st, /* i/o: coder memory state */ + float synth[], /* i/o: synth[] */ + const float coh, /* i : coherence of stereo signal */ + int16_t *noise_seed, /* i/o: noise seed for stereo */ + const int16_t only_left /* i : TD-PLC only in left channel */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const float *A_cng +#endif +); + +/*! r: codebook index */ +int16_t tcxlpc_get_cdk( + const int16_t coder_type /* i : GC/VC indicator */ +); + +int16_t lsf_msvq_ma_encprm( + BSTR_ENC_HANDLE hBstr, + const int16_t *param_lpc, + const int16_t core, + const int16_t acelp_mode, + const int16_t acelp_midLpc, + const int16_t bits_param_lpc[], + const int16_t no_indices ); + +int16_t lsf_msvq_ma_decprm( + Decoder_State *st, + int16_t *param_lpc ); + +int16_t dec_lsf_tcxlpc( + Decoder_State *st, /* i : Decoder state */ + int16_t **indices, /* o : Ptr to VQ indices */ + const int16_t narrowband, /* i : narrowband flag */ + const int16_t cdk /* i : codebook selector */ +); + +int16_t D_lsf_tcxlpc( + const int16_t indices[], /* i : VQ indices */ + float lsf_q[], /* o : quantized lsf */ + Word16 lsp_q_ind[], /* o : quantized lsp (w/o MA prediction) */ + const int16_t narrowband, /* i : narrowband flag */ + const int16_t cdk, /* i : codebook selector */ + const float mem_MA[] /* i : MA memory */ +); + +void lsf_update_memory( + const int16_t narrowband, /* i : narrowband flag */ + const float qlsf[], /* i : quantized lsf coefficients */ + float old_mem_MA[], /* i : MA memory */ + float mem_MA[] /* o : updated MA memory */ +); + +int16_t Q_lsf_tcxlpc( + /* const */ float lsf[], /* i : original lsf */ + float lsf_q[], /* o : quantized lsf */ + Word16 lsp_q_ind[], /* o : quantized lsp (w/o MA prediction) */ + int16_t indices[], /* o : VQ indices */ + const int16_t narrowband, /* i : narrowband flag */ + const int16_t cdk, /* i : codebook selector */ + const float mem_MA[], /* i : MA memory */ + const int16_t coder_type, /* i : acelp extended mode */ + const float *Bin_Ener /* i : Spectrum energy */ +); + +int16_t E_LPC_lsp_unweight( + const float lsp_w[], /* i : weighted lsp */ + float lsp_uw[], /* o : unweighted lsp */ + float lsf_uw[], /* o : unweighted lsf */ + const float inv_gamma /* i : inverse weighting factor */ +); + +int16_t lsf_ind_is_active( + const Word16 lsf_q_ind[], + const float means[], + const int16_t narrowband, + const int16_t cdk ); + +void midlsf_enc( + const float qlsf0[], + const float qlsf1[], + const float lsf[], + int16_t *idx, + const int16_t N, + const float *Bin_Ener, + const int16_t narrowBand, + const int32_t sr_core, + const int16_t coder_type ); + +void midlsf_dec( + const float qlsf0[], + const float qlsf1[], + const int16_t idx, + float qlsf[], + const int16_t N, + const int16_t coder_type, + int16_t *mid_lsf_int, + const int16_t prev_bfi, + const int16_t safety_net ); + +void lsf_end_enc( + Encoder_State *st, + const float *lsf, + float *qlsf, + const int16_t nBits, + const int16_t coder_type_org, + const int16_t force_sf, + int16_t *lpc_param, + int16_t *no_stages, + int16_t *bits_param_lpc, + const int16_t coder_type_raw +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +#endif +); + +void lsf_end_dec( + Decoder_State *st, + const int16_t coder_type_org, + const int16_t bwidth, + const int16_t nBits, + float *qlsf, + int16_t *lpc_param, + int16_t *LSF_Q_prediction, /* o : LSF prediction mode */ + int16_t *nb_indices +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +#endif +); + +ivas_error find_pred_mode( + int16_t *predmode, + const int16_t coder_type, + const int16_t bwidth, + const int32_t int_fs, + int16_t *p_mode_lvq, + int16_t *p_mode_lvq_p, + const int32_t core_brate ); + +void lpc_quantization( + Encoder_State *st, + const float lsp[], + const float lspmid[], + float lsp_q[], + float lsf_q[], + float lspmid_q[], + const int16_t coder_type, + const int16_t acelp_midLpc, + int16_t param_lpc[], + int16_t nbits_lpc[], + int16_t *bits_param_lpc, + int16_t *no_param_lpc ); + +void lpc_unquantize( + Decoder_State *st, + float *lsf, + float *lsp, + int16_t *param_lpc, + float *lspmid, + float *lsfmid, + const int16_t coder_type, + int16_t *LSF_Q_prediction /* o : LSF prediction mode */ +); + +void dlpc_bfi( + const int16_t L_frame, + float *lsf_q, /* o : quantized lsfs */ + const float *lsfold, /* i : past quantized lsf */ + const int16_t last_good, /* i : last good received frame */ + const int16_t nbLostCmpt, /* i : counter of consecutive bad frames */ + float mem_MA[], /* i/o: quantizer memory for MA model */ + float mem_AR[], /* i/o: quantizer memory for MA model */ + float *stab_fac, /* i : lsf stability factor */ + float *lsf_adaptive_mean, /* i : lsf adaptive mean, updated when BFI==0 */ + const int16_t numlpc, /* i : Number of division per superframe */ + float lsf_cng[], + const int16_t plcBackgroundNoiseUpdated, + float *lsf_q_cng, /* o : quantized lsfs of background noise */ + float *old_lsf_q_cng, /* o : old quantized lsfs for background noise */ + const float lsfBase[] /* i : base for differential lsf coding */ +); + +void lsf_dec_bfi( + const int16_t codec_mode, /* i : codec_mode: MODE1 | MODE2 */ + float *lsf, /* o : estimated LSF vector */ + const float *lsfold, /* i : past quantized lsf */ + float *lsf_adaptive_mean, /* i : lsf adaptive mean, updated when BFI==0 */ + const float lsfBase[], /* i : base for differential lsf coding */ + float *mem_MA, /* i/o: quantizer memory for MA model */ + float *mem_AR, /* o : quantizer memory for AR model */ + const float stab_fac, /* i : lsf stability factor */ + const int16_t last_coder_type, /* i : last coder type */ + const int16_t L_frame, /* i : frame length */ + const int16_t last_good, /* i : last good received frame */ + const int16_t nbLostCmpt, /* i : counter of consecutive bad frames */ + const int16_t plcBackgroundNoiseUpdated, /* i : background noise already updated? */ + float *lsf_q_cng, /* o : quantized lsfs of background noise */ + float *lsf_cng, /* i : long term target for fading to bg noise*/ + float *old_lsf_q_cng, /* o : old quantized lsfs for background noise*/ + const int16_t Last_GSC_pit_band_idx, /* i : AC mode (GSC) - Last pitch band index */ + const int16_t Opt_AMR_WB, /* i : IO flag */ + const int16_t bwidth /* i : coded bandwidth */ +); + +const float *PlcGetlsfBase( + const int16_t pcQuantization, + const int16_t narrowBand, + const int32_t sr_core ); + +void Unified_weighting( + const float Bin_Ener_128[], /* i : FFT Bin energy 128 bins in two sets */ + const float lsf[], /* i : LSF vector */ + float w[], /* o : LP weighting filter (numerator) */ + const int16_t narrowBand, /* i : flag for Narrowband */ + const int16_t unvoiced, /* i : flag for Unvoiced frame */ + const int32_t sr_core, /* i : sampling rate of core-coder */ + const int16_t order /* i : LP order */ +); + +int16_t vad_init( + VAD_CLDFB_HANDLE hVAD_CLDFB /* i/o: CLDFB VAD state */ +); + +int16_t vad_proc( + float realValues[16][60], /* i : CLDFB real values */ + float imagValues[16][60], /* i : CLDFB imag values */ + float *sb_power, /* i/o: Energy of CLDFB data */ + const int16_t numBands, /* i : number of input bands */ + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + int16_t *cldfb_addition, + const int16_t vada_flag /* i : VAD flag */ +); + +void subband_FFT( + float Sr[16][60], /* i : real part */ + float Si[16][60], /* i : imag part */ + float *spec_amp /* o : spectral amplitude */ +); + +int16_t update_decision( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + const float snr, /* i : frequency domain SNR */ + const float tsnr, /* i : time domain SNR */ + const float frame_energy, /* i : current frame energy */ + const float high_eng, /* i : current frame high frequency energy */ + const int16_t vad_flag, /* i : VAD flag */ + const int16_t music_backgound_f /* i : background music flag */ +); + +void frame_spec_dif_cor_rate( + float spec_amp[], /* i : spectral amplitude */ + float pre_spec_low_dif[], /* i/o: low spectrum different */ + float f_tonality_rate[] /* o : tonality rate */ +); + +void ltd_stable( + float frames_power[], /* i/o: energy of several frames */ + float ltd_stable_rate[], /* o : time-domain stable rate */ + const float frame_energy, /* i : current frame energy */ + const int16_t frameloop /* i : number of frames */ +); + +void SNR_calc( + const float frame_sb_energy[], /* i : energy of sub-band divided non-uniformly*/ + const float sb_bg_energy[], /* i : sub-band background energy */ + const float t_bg_energy, /* i : time background energy of several frames*/ + float *snr, /* o : frequency domain SNR */ + float *tsnr, /* o : time domain SNR */ + const float frame_energy, /* i : current frame energy */ + const int16_t bwidth /* i : audio bandwidth */ +); + +void background_update( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + float frame_energy, /* i : current frame energy 2 */ + const int16_t update_flag, /* i : current frame update flag */ + const int16_t music_backgound_f, /* i : background music flag */ + const float snr ); + +void bg_music_decision( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + int16_t *music_backgound_f, /* i : background music flag */ + const float frame_energy /* i : current frame energy 1 */ +); + +void est_energy( + float sb_power[], /* o : energy of sub-band divided uniformly */ + float frame_sb_energy[], /* o : energy of sub-band divided non-uniformly*/ + float *p_frame_energy, /* o : frame energy 1 */ + float *p_frame_energy2, /* o : frame energy 2 */ + float *p_high_energy, /* o : high frequency energy */ + const int16_t bw /* i : bandwidth */ +); + +void spec_center( + float spec_power[], /* i : energy of sub-band divided uniformly */ + float sp_center[], /* o : spectral center */ + const int16_t bw_index /* i : bandwidth */ +); + +void spec_flatness( + float spec_amp[], /* i : spectral amplitude */ + float smooth_spec_amp[], /* i : smoothed spectral amplitude */ + float sSFM[] /* o : spectral flatness rate */ +); + +int16_t comvad_decision( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + const float snr, /* i : frequency domain SNR */ + const float tsnr, /* i : time domain SNR */ + const float snr_flux, /* i : average tsnr of several frames */ + const float lt_snr, /* i : long time SNR calculated by fg_energy and bg_energy*/ + const float lt_snr_org, /* i : original long time SNR */ + const float lf_snr, /* i : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ + const float frame_energy, /* i : current frame energy */ + const int16_t music_backgound_f, /* i : background music flag */ + int16_t *cldfb_addition, + const int16_t vada_flag /* i : VAD flag */ +); + +void calc_snr_flux( + float tsnr, /* i : time-domain SNR */ + float pre_snr[], /* i/o: time-domain SNR storage */ + float *snr_flux /* o : average tsnr */ +); + +void calc_lt_snr( + float *lt_snr_org, /* o : original long time SNR */ + float *lt_snr, /* o : long time SNR calculated by fg_energy and bg_energy*/ + const float fg_energy, /* i : foreground energy sum */ + const int16_t fg_energy_count, /* i : number of the foreground energy frame */ + const float bg_energy, /* i : background energy sum */ + const int16_t bg_energy_count, /* i : number of the background energy frame */ + const int16_t bw_index, /* i : band width index */ + const float lt_noise_sp_center0 /* i : long time noise spectral center by 0 */ +); + +void calc_lf_snr( + float *lf_snr_smooth, /* o : smoothed lf_snr */ + float *lf_snr, /* o : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ + const float l_speech_snr, /* i : sum of active frames snr */ + const int16_t l_speech_snr_count, /* i : number of the active frame */ + const float l_silence_snr, /* i : sum of the nonactive frames snr */ + const int16_t l_silence_snr_count, /* i : number of the nonactive frame */ + const int16_t fg_energy_count, /* i : number of the foreground energy frame */ + const int16_t bg_energy_count, /* i : number of the background energy frame */ + const int16_t bw_index /* i : band width index */ +); + +float construct_snr_thresh( + const float sp_center[], /* i : spectral center */ + const float snr_flux, /* i : snr flux */ + const float lt_snr, /* i : long time time domain snr */ + const float lf_snr, /* i : long time frequency domain snr */ + const int16_t continuous_speech_num, /* i : continuous speech number */ + const int16_t continuous_noise_num, /* i : continuous noise number */ + const int16_t fg_energy_est_start, /* i : whether if estimated energy */ + const int16_t bw_index /* i : band width index */ +); + +ivas_error createFdCngCom( + HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +); + +void deleteFdCngCom( + HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +); + +void initFdCngCom( + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const float scale ); + +void initPartitions( + const int16_t *part_in, + const int16_t npart_in, + const int16_t startBand, + const int16_t stopBand, + int16_t *part_out, + int16_t *npart_out, + int16_t *midband, + float *psize, + float *psize_inv, + const int16_t stopBandFR ); + +void minimum_statistics( + const int16_t len, /* i : Vector length */ + const int16_t lenFFT, /* i : Length of the FFT part of the vectors */ + float *psize, + float *msPeriodog, /* i : Periodograms */ + float *msNoiseFloor, + float *msNoiseEst, /* o : Noise estimates */ + float *msAlpha, + float *msPsd, + float *msPsdFirstMoment, + float *msPsdSecondMoment, + float *msMinBuf, + float *msBminWin, + float *msBminSubWin, + float *msCurrentMin, + float *msCurrentMinOut, + float *msCurrentMinSubWindow, + int16_t *msLocalMinFlag, + int16_t *msNewMinFlag, + float *msPeriodogBuf, + int16_t *msPeriodogBufPtr, + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const int16_t enc_dec, /* i : encoder/decoder indicator */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void generate_comfort_noise_enc( + Encoder_State *st /* i/o: encoder state structure */ +); + +void generate_comfort_noise_dec( + float **bufferReal, /* o : Real part of input bands */ + float **bufferImag, /* o : Imaginary part of input bands */ + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t nchan_out /* i : number of output channels */ +); + +void generate_comfort_noise_dec_hf( + float **bufferReal, /* o : Real part of input bands */ + float **bufferImag, /* o : Imaginary part of input bands */ + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +); + +void generate_masking_noise( + float *timeDomainBuffer, /* i/o: time-domain signal */ + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const int16_t length, /* i : frame size */ + const int16_t core, /* i : core */ + const int16_t return_noise, /* i : noise is returned instead of added */ + const int16_t secondary, /* i : indicator for secondary channel */ + const int16_t element_mode, /* i : element mode */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i : stereo CNG handle */ + const int16_t nchan_out /* i : number of output channels */ +); + +void generate_masking_noise_update_seed( + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +); + +void generate_masking_noise_mdct( + float *mdctBuffer, /* i/o: time-domain signal */ + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +); + +void generate_masking_noise_dirac( + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i : filterbank state */ + float *tdBuffer, /* i/o: time-domain signal, if NULL no LB-CNA */ + float *Cldfb_RealBuffer, /* o : CLDFD real buffer */ + float *Cldfb_ImagBuffer, /* o : CLDFD imaginary buffer */ + const int16_t slot_index, /* i : CLDFB slot index */ + const int16_t cna_flag, /* i : CNA flag for LB and HB */ + const int16_t fd_cng_flag /* i : FD-CNG flag for HB */ +); + +void generate_stereo_masking_noise( + float *syn, /* i/o: time-domain signal */ + Decoder_State *st, /* i/o: decoder state structure */ + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i : TD stereo structure */ + const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ + const int16_t fadeOut, /* i : only fade out of previous state */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i : stereo CNG handle */ + const int16_t nchan_out /* i : number of output channels */ +); + +void apply_scale( + float *scale, /* i : scale factor */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t brate, /* i : Bit rate */ + const SCALE_SETUP *scaleTable, /* i : Scale table */ + const int16_t scaleTableSize /* i : Size of scale table */ +); + +void compress_range( + float *in, + float *out, + const int16_t len ); + +void expand_range( + float *in, + float *out, + const int16_t len ); + +void bandcombinepow( + const float *bandpow, /* i : Power for each band */ + const int16_t nband, /* i : Number of bands */ + int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ + const int16_t npart, /* i : Number of partitions */ + const float *psize_inv, /* i : Inverse partition sizes */ + float *partpow /* o : Power for each partition */ +); + +void scalebands( + const float *partpow, /* i : Power for each partition */ + int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ + const int16_t npart, /* i : Number of partitions */ + int16_t *midband, /* i : Central band of each partition */ + const int16_t nFFTpart, /* i : Number of FFT partitions */ + const int16_t nband, /* i : Number of bands */ + float *bandpow, /* o : Power for each band */ + const int16_t flag_fft_en ); + +void AnalysisSTFT( + const float *timeDomainInput, + float *fftBuffer, /* o : FFT bins */ + HANDLE_FD_CNG_COM st /* i/o: FD_CNG structure containing all buffers and variables */ +); + +void SynthesisSTFT( + float *fftBuffer, + float *timeDomainOutput, + float *olapBuffer, + const float *olapWin, + const int16_t tcx_transition, + HANDLE_FD_CNG_COM hFdCngCom, + const int16_t element_mode, /* i : element mode */ + const int16_t nchan_out /* i : number of output channels */ +); + +float rand_gauss( + float *x, + int16_t *seed ); + +void lpc_from_spectrum( + HANDLE_FD_CNG_COM hFdCngCom, + const int16_t start, + const int16_t stop, + const float preemph_fac ); + +ivas_error createFdCngDec( + HANDLE_FD_CNG_DEC *hFdCngDec ); + +void deleteFdCngDec( + HANDLE_FD_CNG_DEC *hFdCngDec ); + +void initFdCngDec( + DEC_CORE_HANDLE st /* i/o: decoder state structure */ +); + +void configureFdCngDec( + HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: Contains the variables related to the FD-based CNG process */ + const int16_t bwidth, + const int32_t total_brate, + const int16_t L_frame, + const int16_t last_L_frame, + const int16_t element_mode ); + +void ApplyFdCng( + float *timeDomainInput, +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float *powerSpectrum, +#endif + float **realBuffer, /* i/o: Real part of the buffer */ + float **imagBuffer, /* i/o: Imaginary part of the buffer */ + Decoder_State *st, + const int16_t concealWholeFrame, /* i : binary flag indicating frame loss */ + const int16_t is_music ); + +void perform_noise_estimation_dec( + const float *timeDomainInput, +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float *power_spectrum, +#endif + HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure */ + const int16_t element_mode, /* i : element mode type */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t L_frame, /* i : frame length at internal Fs */ + const int16_t last_L_frame, /* i : frame length of the last frame at internal Fs */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + const int16_t VAD /* i : VAD flag in the decoder */ +); +/*! r: CNG energy */ +float cng_energy( + const int16_t element_mode, /* i : element mode */ + const int16_t bwidth, /* i : audio bandwidh */ + const int16_t CNG_mode, /* i : mode for DTX configuration */ + const float CNG_att, /* i : attenuation factor for CNG */ + const float *inputBuffer, /* i : input signal */ + const int16_t len /* i : vector length */ +); + +void FdCng_decodeSID( + Decoder_State *st /* i/o: decoder state structure */ +); + +void FdCng_exc( + HANDLE_FD_CNG_COM hFdCngCom, + int16_t *CNG_mode, + const int16_t L_frame, + const float *lsp_old, + const int16_t first_CNG, + float *lsp_CNG, + float *Aq, /* o : LPC coeffs */ + float *lsp_new, /* o : lsp */ + float *lsf_new, /* o : lsf */ + float *exc, /* o : LP excitation */ + float *exc2, /* o : LP excitation */ + float *bwe_exc /* o : LP excitation for BWE */ +); + +void noisy_speech_detection( + HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure */ + const int16_t vad, /* i : VAD flag */ + const float syn[] /* i : input time-domain frame */ +); + +ivas_error createFdCngEnc( + HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ +); + +void deleteFdCngEnc( + HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ +); + +void configureFdCngEnc( + HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ + const int16_t bwidth, + const int32_t total_brate ); + +void initFdCngEnc( + HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ + const int32_t input_Fs, /* i : input signal sampling frequency in Hz */ + const float scale /* i : scaling factor */ +); + +void resetFdCngEnc( + Encoder_State *st /* i/o: encoder state structure */ +); + +void perform_noise_estimation_enc( + float *band_energies, /* i : energy in critical bands without minimum noise floor E_MIN */ + float *enerBuffer, /* i : energy buffer */ + HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: CNG structure containing all buffers and variables */ + const int32_t input_Fs, /* i : input sampling rate */ + CPE_ENC_HANDLE hCPE ); + +void AdjustFirstSID( + Encoder_State *st /* i/o: encoder state structure */ +); + +void FdCng_encodeSID( + Encoder_State *st /* i/o: encoder state structure */ +); + +void GetParameters( + ParamsBitMap const *paramsBitMap, + const int16_t nParams, + void const *pParameter, + int16_t **pStream, + int16_t *pnSize, + int16_t *pnBits ); + +void SetParameters( + ParamsBitMap const *paramsBitMap, + const int16_t nParams, + void *pParameter, + const int16_t **pStream, + int16_t *pnSize ); + +void WriteToBitstream( + ParamsBitMap const *paramsBitMap, + const int16_t nParams, + const int16_t **pStream, + int16_t *pnSize, + BSTR_ENC_HANDLE hBstr, + int16_t *pnBits ); + +void ReadFromBitstream( + ParamsBitMap const *paramsBitMap, + const int16_t nArrayLength, + Decoder_State *st, + int16_t **pStream, + int16_t *pnSize ); + +void const *GetTnsFilterOrder( void const *p, int16_t index, int16_t *pValue ); +void *SetTnsFilterOrder( void *p, int16_t index, int16_t value ); +void const *GetNumOfTnsFilters( void const *p, int16_t index, int16_t *pValue ); +void *SetNumOfTnsFilters( void *p, int16_t index, int16_t value ); +void const *GetTnsEnabled( void const *p, int16_t index, int16_t *pValue ); +void *SetTnsEnabled( void *p, int16_t index, int16_t value ); +void const *GetTnsEnabledSingleFilter( void const *p, int16_t index, int16_t *pValue ); +void *SetTnsEnabledSingleFilter( void *p, int16_t index, int16_t value ); +void const *GetTnsFilterCoeff( void const *p, int16_t index, int16_t *pValue ); +void *SetTnsFilterCoeff( void *p, int16_t index, int16_t value ); + +void const *GetTnsOnWhite( void const *p, int16_t index, int16_t *pValue ); +void *SetTnsOnWhite( void *p, int16_t index, int16_t value ); + +int16_t GetSWBTCX10TnsFilterCoeffBits( int16_t value, int16_t index ); +int16_t EncodeSWBTCX10TnsFilterCoeff( int16_t value, int16_t index ); +int16_t DecodeSWBTCX10TnsFilterCoeff( Decoder_State *st, int16_t index, int16_t *pValue ); +int16_t GetSWBTCX20TnsFilterCoeffBits( int16_t value, int16_t index ); +int16_t EncodeSWBTCX20TnsFilterCoeff( int16_t value, int16_t index ); +int16_t DecodeSWBTCX20TnsFilterCoeff( Decoder_State *st, int16_t index, int16_t *pValue ); + +int16_t GetWBTCX20TnsFilterCoeffBits( int16_t value, int16_t index ); +int16_t EncodeWBTCX20TnsFilterCoeff( int16_t, int16_t index ); +int16_t DecodeWBTCX20TnsFilterCoeff( Decoder_State *st, int16_t index, int16_t *pValue ); + +int16_t GetTnsFilterOrderBitsSWBTCX10( int16_t value, int16_t index ); +int16_t EncodeTnsFilterOrderSWBTCX10( int16_t value, int16_t index ); +int16_t DecodeTnsFilterOrderSWBTCX10( Decoder_State *st, int16_t index, int16_t *pValue ); +int16_t GetTnsFilterOrderBitsSWBTCX20( int16_t value, int16_t index ); +int16_t EncodeTnsFilterOrderSWBTCX20( int16_t value, int16_t index ); +int16_t DecodeTnsFilterOrderSWBTCX20( Decoder_State *st, int16_t index, int16_t *pValue ); +int16_t GetTnsFilterOrderBits( int16_t value, int16_t index ); +int16_t EncodeTnsFilterOrder( int16_t value, int16_t index ); +int16_t DecodeTnsFilterOrder( Decoder_State *st, int16_t index, int16_t *pValue ); + +void ResetTnsData( + STnsData *pTnsData ); + +void ClearTnsFilterCoefficients( + STnsFilter *pTnsFilter ); + +void InitTnsConfiguration( + const int16_t bwidth, + const int16_t frameLength, + STnsConfig *pTnsConfig, + const int16_t igfStopFreq, + const int32_t total_brate, + const int16_t element_mode, + const int16_t is_mct /* i : MCT mode flag */ +); + +int16_t DetectTnsFilt( + const STnsConfig *pTnsConfig, /* i : TNS Configuration struct */ + const float pSpectrum[], /* i : MDCT spectrum */ + TRAN_DET_HANDLE hTranDet, /* i : transient detection handle */ + const int16_t isTCX10, /* i : TCX10 or TCX20? */ + const float ltp_gain, /* i : LTP gain */ + STnsData *pTnsData, /* o : TNS data struct */ + float *predictionGain /* o : TNS prediction gain */ +); + +void ApplyTnsFilter( + STnsConfig const *pTnsConfig, + STnsData const *pTnsData, + float spectrum[], + const int16_t fIsAnalysis ); + +int16_t ITF_Detect( + const float pSpectrum[], + const int16_t startLine, + const int16_t stopLine, + const int16_t maxOrder, + float *A, + float *predictionGain, + int16_t *curr_order ); + +void ITF_Apply( + float spectrum[], + const int16_t startLine, + const int16_t stopLine, + const float *A, + const int16_t curr_order ); + +void EncodeTnsData( + STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ + STnsData const *pTnsData, /* i : TNS data struct (quantized param) */ + int16_t *stream, /* o : internal data stream */ + int16_t *pnSize, /* o : number of written parameters */ + int16_t *pnBits /* o : number of written bits */ +); + +int16_t DecodeTnsData( + STnsConfig const *pTnsConfig, + const int16_t *stream, + int16_t *pnSize, + STnsData *pTnsData ); + +void WriteTnsData( + const STnsConfig *pTnsConfig, /* i : TNS Configuration struct */ + const int16_t *stream, /* i : internal data stream */ + int16_t *pnSize, /* o : number of written parameters */ + BSTR_ENC_HANDLE hBstr, /* o : bitstream */ + int16_t *pnBits /* o : number of written bits */ +); + +void ReadTnsData( + STnsConfig const *pTnsConfig, + Decoder_State *st, + int16_t *pnBits, + int16_t *stream, + int16_t *pnSize ); + +void cldfbAnalysis( + const float *timeIn, /* i : time buffer */ + float **realBuffer, /* o : real value buffer */ + float **imagBuffer, /* o : imag value buffer */ + const int16_t samplesToProcess, /* i : number of input samples */ + HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filterbank state */ +); + +void cldfbAnalysis_ts( + const float *timeIn, /* i : time buffer */ + float realBuffer[CLDFB_NO_CHANNELS_MAX], /* o : real value buffer */ + float imagBuffer[CLDFB_NO_CHANNELS_MAX], /* o : imag value buffer */ + const int16_t samplesToProcess, /* i : samples to process */ + HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filterbank state */ +); + +void cldfbSynthesis( + float **realBuffer, /* i : real values */ + float **imagBuffer, /* i : imag values */ + float *timeOut, /* o : synthesized output */ + const int16_t samplesToProcess, /* i : number of samples */ + HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filter bank state */ +); + +void configureCldfb( + HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ + const int32_t sampling_rate /* i : sampling rate */ +); + +void analysisCldfbEncoder( + Encoder_State *st, /* i/o: encoder state structure */ + const float *timeIn, + const int16_t samplesToProcess, + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float *ppBuf_Ener ); + +ivas_error openCldfb( + HANDLE_CLDFB_FILTER_BANK *h_cldfb, /* i/o: filter bank handle */ + CLDFB_TYPE type, /* i : analysis or synthesis */ + const int32_t sampling_rate, /* i : sampling rate */ + CLDFB_PROTOTYPE prototype /* i : CLDFB version (1.25ms/5ms delay) */ +); + +void resampleCldfb( + HANDLE_CLDFB_FILTER_BANK hs, /* i/o: filter bank handle */ + const int32_t newSamplerate /* i : new samplerate to operate */ +); + +ivas_error cldfb_save_memory( + HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ +); + +void cldfb_restore_memory( + HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ +); + +void cldfb_reset_memory( + HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ +); + +void deleteCldfb( + HANDLE_CLDFB_FILTER_BANK *h_cldfb /* i/o: filter bank handle */ +); + +void fft_cldfb( + float *data, /* i/o: input/output vector */ + const int16_t size /* i : size of fft operation */ +); + +void BITS_ALLOC_init_config_acelp( + const int32_t bit_rate, + const int16_t narrowBand, + const int16_t nb_subfr, + ACELP_config *acelp_cfg /* o : configuration structure of ACELP */ +); + +int16_t BITS_ALLOC_config_acelp( + const int16_t bits_frame, /* i : remaining bit budget for the frame */ + const int16_t coder_type, /* i : acelp coder type */ + ACELP_config *acelp_cfg, /* i/o: configuration structure of ACELP */ + const int16_t narrowband, /* i : narrowband flag */ + const int16_t nb_subfr /* i : number of subframes */ +); + +ivas_error config_acelp1( + const int16_t enc_dec, /* i : encoder/decoder flag */ + const int32_t total_brate, /* i : total bitrate */ + const int32_t core_brate_inp, /* i : core bitrate */ + const int16_t core, /* i : core */ + const int16_t extl, /* i : extension layer */ + const int32_t extl_brate, /* i : extension layer bitrate */ + const int16_t L_frame, /* i : frame length at internal Fs */ + const int16_t GSC_noisy_speech, /* i : GSC on SWB noisy speech flag */ + ACELP_config *acelp_cfg, /* i : ACELP bit-allocation */ + const int16_t signalling_bits, /* i : number of signalling bits */ + const int16_t coder_type, /* i : coder type */ + const int16_t tc_subfr, /* i : TC subfr ID */ + const int16_t tc_call, /* i : TC call number (0,1,2) */ + int16_t *nBits_es_Pred, /* o : number of bits for Es_pred Q */ + int16_t *unbits, /* o : number of unused bits */ + const int16_t element_mode, /* i : element mode */ + int16_t *uc_two_stage_flag, /* o : flag undicating two-stage UC */ + const int16_t tdm_lp_reuse_flag, /* i : LPC reuse flag (can be 1 only with secondary channel*/ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag*/ + const int16_t idchan, /* i : channel id */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +); + +/*! r: ACELP16k flag */ +int16_t set_ACELP_flag( + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int32_t total_brate, /* i : total bitrate per channel */ + const int16_t idchan, /* i : Channel id */ + const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t cng_type /* i : CNG type */ +); + +void FEC_clas_estim( + const float *syn, + const float *pitch, /* i : pitch values for each subframe */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t coder_type, /* i : coder type */ + const int16_t codec_mode, /* i : codec mode */ + float *mem_syn_clas_estim, /* i/o: memory of the synthesis signal for frame class estimation */ + int16_t *clas, /* i/o: frame classification */ + float *lp_speech, /* i/o: long term active speech energy average */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + int16_t *decision_hyst, /* i/o: hysteresis of the music/speech decision */ + int16_t *locattack, /* i/o: detection of attack (mainly to localized speech burst) */ + int16_t *UV_cnt, /* i/o: number of consecutives frames classified as UV */ + float *LT_UV_cnt, /* i/o: long term consecutives frames classified as UV */ + float *Last_ener, /* i/o: last_energy frame */ + int16_t *amr_io_class, /* i/o: classification for AMR-WB IO mode */ + float *lt_diff_etot, /* i/o: long-term total energy variation */ + float *class_para, /* o : classification para. fmerit1 */ + const float LTP_Gain, /* i : */ + const int16_t narrowBand, /* i : */ + const SIGNAL_CLASSIFIER_MODE mode, /* i : */ + const int16_t bfi, /* i : */ + const float preemph_fac, /* i : */ + const int16_t tcxonly, /* i : */ + const int32_t last_core_brate, /* i : last core bitrate */ + const int16_t FEC_mode /* i : ACELP FEC mode */ +); + +void InitTransientDetection( + const int16_t nFrameLength, + const int16_t nTCXDelay, + TRAN_DET_HANDLE hTranDet, + const int16_t ext_mem_flag ); + +void RunTransientDetection( + const float *input, /* i : input signal */ + const int16_t length, /* i : frame length */ + TRAN_DET_HANDLE hTranDet /* i/o: transient detection handle */ +); + +float GetTCXAvgTemporalFlatnessMeasure( + TRAN_DET_HANDLE hTranDet, + const int16_t nCurrentSubblocks, + const int16_t nPrevSubblocks ); + +float GetTCXMaxenergyChange( + TRAN_DET_HANDLE hTranDet, + const int16_t isTCX10, + const int16_t nCurrentSubblocks, + const int16_t nPrevSubblocks ); + +void SetTCXModeInfo( + Encoder_State *st, /* i/o: encoder state structure */ + TRAN_DET_HANDLE hTranDet, /* i/o: transient detection handle */ + int16_t *tcxModeOverlap /* o : window overlap of current frame */ +); + +void TCX_MDCT( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ); + +void TCX_MDST( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ); + +void TCX_MDCT_Inverse( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ); + +void TCX_MDST_Inverse( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ); + +void TCX_MDXT_Inverse( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const uint16_t kernel_type ); + +void post_decoder( + Decoder_State *st, + float synth_buf[], + const float pit_gain[], + const int16_t pitch[], + float signal_out[], + float bpf_noise_buf[] ); + +float bass_pf_enc( + const float *orig, /* i : 12.8kHz original signal */ + const float *syn, /* i : 12.8kHz synthesis to postfilter */ + const float pitch_buf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ + const float gainT_sf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ + const int16_t l_frame, /* i : frame length (should be multiple of l_subfr)*/ + const int16_t l_subfr_in, /* i : sub-frame length (60/64) */ + float mem_bpf[], /* i/o: memory state [2*L_FILT] */ + float mem_error_bpf[], /* i/o: memory state [2*L_FILT] */ + int16_t *gain_factor_param, /* o : quantized gain factor */ + const int16_t mode, /* i : coding mode of adapt bpf */ + float *mem_deemph_err, /* i/o: Error deemphasis memory */ + float *lp_ener /* i/o: long_term error signal energy */ +); + +void cldfb_synth_set_bandsToZero( + Decoder_State *st, /* i/o: decoder state structure */ + float **rAnalysis, + float **iAnalysis, + const int16_t nTimeSlots ); + +void longadd( + uint16_t a[], /* i/o: vector of the length lena */ + const uint16_t b[], /* i/o: vector of the length lenb */ + const int16_t lena, /* i/o: length of vector a[] */ + const int16_t lenb /* i/o: length of vector b[] */ +); + +void longshiftright( + uint16_t a[], /* i : vector of the length lena */ + const int16_t b, /* i : number of bit positions to shift right */ + uint16_t d[], /* o : vector of the length lend */ + int16_t lena, /* i : length of vector a[] */ + const int16_t lend /* i : length of vector d[] */ +); + +void longshiftleft( + const uint16_t a[], /* i : vector of the length len */ + const int16_t b, /* i : number of bit positions to shift left */ + uint16_t d[], /* o : vector of the length len */ + const int16_t len /* i : length of vector a[] and d[] */ +); + +void open_decoder_LPD( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t total_brate, /* i : total bitrate */ + const int32_t last_total_brate, /* i : last total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t is_mct, /* i : MCT mode flag */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t last_element_mode, +#endif + const int16_t is_init /* i : indicate call during initialization */ +); + +void acelp_plc_mdct_transition( + Decoder_State *st /* i/o: Decoder state */ +); + +void tcxltp_dec_init( + TCX_LTP_DEC_HANDLE hTcxLtpDec, + const int16_t ini_frame, + const int16_t last_codec_mode, + const int16_t element_mode, + const int16_t pit_max, + const int32_t sr_core ); + +void reset_tcx_overl_buf( + TCX_DEC_HANDLE hTcxDec /* i/o: TCX decoder handle */ +); + +void update_decoder_LPD_cng( + Decoder_State *st, /* i/o: decoder state structure */ + float *timeDomainBuffer, + float *A, + float *bpf_noise_buf ); + +void reconfig_decoder_LPD( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t bits_frame, /* i : bit budget */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t L_frame_old /* i : frame length */ +); + +void mode_switch_decoder_LPD( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t total_brate, /* i : total bitrate */ + const int32_t last_total_brate, /* i : last frame total bitrate */ + const int16_t frame_size_index, /* i : index determining the frame size*/ + const int16_t is_mct /* i : MCT mode flag */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t last_element_mode +#endif +); + +void dec_acelp_tcx_frame( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *concealWholeFrame, /* i/o: concealment flag */ + float *output, /* o : synthesis */ + float *bpf_noise_buf, /* i/o: BPF noise buffer */ + float *pcmbufFB, /* o : synthesis @output_FS */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float pitch_buf[], /* o : floating pitch for each subframe */ + STEREO_CNG_DEC_HANDLE hStereoCng /* i : stereo CNG handle */ +); + +void decoder_LPD( + Decoder_State *st, /* i/o: decoder memory state pointer */ + float signal_out[], /* o : signal with LPD delay (7 subfrs) */ + float signal_outFB[], /* o : synthesis @output_FS */ + int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ + float *bpf_noise_buf, /* i/o: BPF noise buffer */ + int16_t bfi, /* i : BFI flag */ + int16_t *bitsRead, /* o : number of read bits */ + int16_t param[], /* o : buffer of parameters */ + float *pitch_buf, /* i/o: floating pitch values for each subfr*/ + float *voice_factors, /* o : voicing factors */ + float *ptr_bwe_exc /* o : excitation for SWB TBE */ +); + +int16_t tcxGetNoiseFillingTilt( + const float A[], + const int16_t L_frame, + const int16_t mode, + float *noiseTiltFactor ); + +void tcxFormantEnhancement( + float xn_buf[], + const float *gainlpc, + float spectrum[], + const int16_t L_frame ); + +void tcxInvertWindowGrouping( + TCX_CONFIG_HANDLE hTcxCfg, + float xn_buf[], + float spectrum[], + const int16_t L_frame, + const int16_t fUseTns, + const int16_t last_core, + const int16_t index, + const int16_t frame_cnt, + const int16_t bfi ); + +void tcx5SpectrumInterleaving( + const int16_t tcx5Size, + float *spectrum ); + +void tcx5SpectrumDeinterleaving( + const int16_t tcx5Size, + float *spectrum ); + +void tcx5TnsGrouping( + const int16_t L_frame, + const int16_t L_spec, + float *spectrum ); + +void tcx5TnsUngrouping( + const int16_t L_frame, + const int16_t L_spec, + float *spectrum, + const int16_t enc_dec ); + +void lerp( + const float *f, + float *f_out, + const int16_t bufferNewSize, + const int16_t bufferOldSize ); + +void encoderSideLossSimulation( + Encoder_State *st, + PLC_ENC_EVS_HANDLE hPlc_Ext, + float *isf_q, + const float stab_fac, + const int16_t calcOnlyISF, + const int16_t L_frame ); + +void enc_prm_side_Info( + PLC_ENC_EVS_HANDLE hPlc_Ext, + Encoder_State *st ); + +void GplcTcxEncSetup( + const int16_t tcxltp_pitch_int, + PLC_ENC_EVS_HANDLE hPlc_Ext ); + +int16_t encSideSpecPowDiffuseDetector( + float *isf_ref, + float *isf_con, + const int32_t sr_core, + float *prev_isf4_mean, + const int16_t sw, + const int16_t coder_type ); + +void updateSpecPowDiffuseIdx( + const float gain_pitch_buf[], /* i : gain pitch values */ + const float gain_code_buf[], /* i : gain pitch values */ + int16_t glr_idx[2], /* o : */ + float mean_gc[2] /* o : */ +); + +void getLookAheadResSig( + float *speechLookAhead, + const float *A, + float *res, + const int16_t L_frame, + const int16_t L_subfr, + const int16_t m, + const int16_t numSubFrame ); + +void updatelsfForConcealment( + PLC_ENC_EVS_HANDLE decState, + float *lsf ); + +void getConcealedLP( + PLC_ENC_EVS_HANDLE memDecState, + float *AqCon, + const float xsfBase[], + const int32_t sr_core, + const int16_t last_good, + const int16_t L_frame ); + +void RecLpcSpecPowDiffuseLc( + float *ispq, + float *isp_old, + float *isfq, + Decoder_State *st, + const int16_t reset_q ); + +void modify_lsf( + float *lsf, + const int16_t n, + const int32_t sr_core, + const int16_t reset_q ); + +void init_PLC_enc( + PLC_ENC_EVS_HANDLE hPlcExt, + const int32_t sr_core ); + +void gPLC_encInfo( + PLC_ENC_EVS_HANDLE hPlcExt, + const int32_t total_brate, + const int16_t bwidth, + const int16_t last_clas, + const int16_t coder_type ); + +void resetTecDec( + TEC_DEC_HANDLE hTecDec ); + +void calcGainTemp_TBE( + float **pCldfbRealSrc, + float **pCldfbImagSrc, + float *loBuffer, + const int16_t startPos, /*!< Start position of the current envelope. */ + const int16_t stopPos, /*!< Stop position of the current envelope. */ + const int16_t lowSubband, /* lowSubband */ + float *pGainTemp, + const int16_t code ); + +void procTecTfa_TBE( + float *hb_synth, + float *gain, + const int16_t flat_flag, + const int16_t last_core, + const int16_t L_subfr, + const int16_t code ); + +void resetTecEnc( + TEC_ENC_HANDLE hTecEnc, + const int16_t flag ); + +void calcHiEnvLoBuff( + const int16_t noCols, + const int16_t *pFreqBandTable, /* i : freqbandTable */ + const int16_t nSfb, /* i : Number of scalefactors */ + float **pYBuf, + float *loBuf, + float *hiTempEnv ); + +void calcLoEnvCheckCorrHiLo( + const int16_t noCols, + const int16_t *pFreqBandTable, /* i : freqbandTable */ + float *loBuf, + float *loTempEnv, + float *loTempEnv_ns, + float *hiTempEnv, + int16_t *corr_flag /* o : 0 for original, 1 for TEC */ +); + +void tfaCalcEnv( + const float *shb_speech, + float *enr ); + +int16_t tfaEnc_TBE( + const float *enr, + const int16_t last_core, + const float *voicing, + const float *pitch_buf ); + +void tecEnc_TBE( + int16_t *corrFlag, + const float *voicing, + const int16_t coder_type ); + +void set_TEC_TFA_code( + const int16_t corrFlag, + int16_t *tec_flag, + int16_t *tfa_flag ); + +float Damping_fact( + const int16_t coder_type, /* i : ACELP core coder type */ + const int16_t nbLostCmpt, /* i : compt for number of consecutive lost frame */ + int16_t last_good, /* i : class of last good received frame */ + float stab_fac, /* i : LSF stability factor */ + float *lp_gainp, /* i/o: low passed pitch gain used for concealment */ + const int16_t core /* i : current core: ACELP = 0, TCX20 = 1, TCX10 = 2 */ +); + +void fer_energy( + const int16_t L_frame, /* i : frame length */ + const int16_t clas, /* i : frame classification */ + const float synth[], /* i : synthesized speech at Fs = 12k8 Hz */ + const float pitch, /* i : pitch period */ + float *enr, /* o : pitch-synchronous or half_frame energy */ + const int16_t useOffset /* i : speech pointer offset (0 or L_FRAME) */ +); + +float getLevelSynDeemph( + const float h1Init[], /* i : input value or vector to be processed */ + const float A[], /* i : LPC coefficients */ + const int16_t lenLpcExc, /* i : length of the LPC excitation buffer */ + const float preemph_fac, /* i : preemphasis factor */ + const int16_t numLoops /* i : number of loops */ +); + +void genPlcFiltBWAdap( + const int32_t sr_core, /* i : core sampling rate */ + float *lpFiltAdapt, /* o : filter coefficients for filtering codebooks in case of flc */ + const int16_t type, /* i : type of filter, either 0 : lowpass or 1 : highpass */ + const float alpha /* i : fade out factor [0 1) used decrease filter tilt */ +); + +void highPassFiltering( + const int16_t last_good, /* i : last classification type */ + const int16_t L_buffer, /* i : buffer length */ + float exc2[], /* i/o: unvoiced excitation before the high pass filtering */ + const float hp_filt[], /* i : high pass filter coefficients */ + const int16_t l_fir_fer /* i : high pass filter length */ +); + +int16_t GetPLCModeDecision( + Decoder_State *st /* i/o: decoder memory state pointer */ +); + +void addBassPostFilter( + const float *harm_timeIn, + const int16_t samplesToProcess, + float **rAnalysis, + float **iAnalysis, + HANDLE_CLDFB_FILTER_BANK cldfb ); + +ivas_error TonalMDCTConceal_Init( + TonalMDCTConcealPtr hTonalMDCTConc, + const uint16_t samplesPerBlock, + const uint16_t nSamplesCore, + const uint16_t nScaleFactors, + TCX_CONFIG_HANDLE hTcxCfg ); + +void TonalMDCTConceal_SaveFreqSignal( + TonalMDCTConcealPtr hTonalMDCTConc, + const float *mdctSpectrum, + const uint16_t numSamples, + const uint16_t nNewSamplesCore, + const float *scaleFactors +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t infoIGFStartLine +#endif +); + +void TonalMDCTConceal_UpdateState( + TonalMDCTConcealPtr hTonalMDCTConc, + const int16_t numSamples, + const float pitchLag, + const int16_t badBlock, + const int16_t tonalConcealmentActive ); + +void TonalMDCTConceal_SaveTimeSignal( + TonalMDCTConcealPtr hTonalMDCTConc, + float *timeSignal, + const int16_t numSamples ); + +void TonalMDCTConceal_Detect( + const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ + const float pitchLag, /*IN */ + int16_t *umIndices, /*OUT*/ + const PsychoacousticParameters *psychParamsCurrent, /*IN*/ + const int16_t isLfe ); + +void TonalMDCTConceal_Apply( + TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ + float *mdctSpectrum, /*OUT*/ + const PsychoacousticParameters *psychParamsCurrent /*IN*/ +); + +void TonalMDCTConceal_InsertNoise( + const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ + float *mdctSpectrum, /*OUT*/ + const int16_t tonalConcealmentActive, + int16_t *pSeed, /*IN/OUT*/ + const float tiltCompFactor, + const float crossfadeGain, +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const float concealment_noise[L_FRAME48k], +#endif + const int16_t crossOverFreq ); + +void DetectTonalComponents( + uint16_t indexOfTonalPeak[], + uint16_t lowerIndex[], + uint16_t upperIndex[], + uint16_t *pNumIndexes, + const float lastPitchLag, + const float currentPitchLag, + const float lastMDCTSpectrum[], + const float scaleFactors[], + const float secondLastPowerSpectrum[], + const uint16_t nSamples, + const uint16_t nSamplesCore, + float floorPowerSpectrum, + const PsychoacousticParameters *psychParamsCurrent ); + +void RefineTonalComponents( + uint16_t indexOfTonalPeak[], + uint16_t lowerIndex[], + uint16_t upperIndex[], + float phaseDiff[], + float phases[], + uint16_t *pNumIndexes, + const float lastPitchLag, + const float currentPitchLag, + const float lastMDCTSpectrum[], + const float scaleFactors[], + const float secondLastPowerSpectrum[], + const uint16_t nSamples, + const uint16_t nSamplesCore, + float floorPowerSpectrum, + const PsychoacousticParameters *psychParamsCurrent ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +ivas_error PsychoacousticParameters_Init( + const int32_t sr_core, /* i : sampling rate of core-coder */ + const int16_t nBins, /* i : Number of bins (spectral lines) */ + const int8_t nBands, /* i : Number of spectrum subbands */ + const int16_t isTCX20, /* i : Flag indicating if the subband division is for TCX20 or TCX10 */ + const int16_t isWarped, /* i : Flag indicating if the scale is linear or warped */ + PsychoacousticParameters *pPsychParams ); +#endif + +void concealment_init( + const int16_t L_frameTCX, + T_PLCInfo_HANDLE hPlcInfo ); + +void concealment_decode( + const int16_t core, + float *invkoef, + T_PLCInfo_HANDLE hPlcInfo ); + +void concealment_update( + const int16_t bfi, + const int16_t core, + const int16_t harmonic, + float *invkoef, + T_PLCInfo_HANDLE hPlcInfo ); + +void concealment_update2( + const float *outx_new, + T_PLCInfo_HANDLE hPlcInfo, + const int16_t L_frameTCX ); + +void concealment_signal_tuning( + Decoder_State *st, + const int16_t bfi, + float *outx_new, + const int16_t past_core_mode ); + +void waveform_adj2( + T_PLCInfo_HANDLE hPlcInfo, + float *overlapbuf, + float *outx_new, + const int16_t delay, + const int16_t bfi_cnt, + const int16_t bfi ); + +float SFM_Cal( + const float fcoef[], + const int16_t n ); + +void set_state( + int16_t *state, + const int16_t num, + const int16_t N ); + +int16_t RFFTN( + float *afftData, + const float *trigPtr, + const int16_t len, + const int16_t isign ); + +void DoFFT( + float *re2, + float *im2, + const int16_t length ); + +/*! r: flag indicating a valid bitrate */ +int16_t is_EVS_bitrate( + const int32_t ivas_total_brate, /* i : EVS total bitrate */ + int16_t *Opt_AMR_WB /* i : AMR-WB IO flag */ +); + +/*! r: codec mode */ +int16_t get_codec_mode( + const int32_t total_brate /* i : total bitrate */ +); + +int16_t getTcxonly( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t is_mct /* i : MCT mode flag */ +); + +int16_t getTnsAllowed( + const int32_t total_brate, /* i : total bitrate */ + const int16_t igf, /* i : flag indicating IGF activity*/ + const int16_t element_mode, /* i : IVAS element mode */ + const MCT_CHAN_MODE mct_chan_mode /* i : MCT channel mode */ +); + +int16_t getCtxHm( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t rf_flag /* i : flag to signal the RF mode */ +); + +int16_t getResq( + const int32_t total_brate /* i : total bitrate */ +); + +int16_t getRestrictedMode( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +); + +int16_t getMdctWindowLength( + const int16_t fscale ); + +int16_t sr2fscale( + const int32_t sr_core /* i : internal sampling rate */ +); + +int32_t getCoreSamplerateMode2( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +); + +float getTcxBandwidth( + const int16_t bwidth /* i : audio bandwidth */ +); + +int16_t getIgfPresent( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t rf_mode, /* i : flag to signal the RF mode */ + const int16_t mct_chan_mode /* i : MCT channel mode */ +); + +int16_t getCnaPresent( + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth /* i : audio bandwidth */ +); + +int16_t getTcxLtp( + const int32_t sr_core /* i : internal sampling rate */ +); + +int16_t initPitchLagParameters( + const int32_t sr_core, /* i : internal sampling rate */ + int16_t *pit_min, + int16_t *pit_fr1, + int16_t *pit_fr1b, + int16_t *pit_fr2, + int16_t *pit_max ); + +void attenuateNbSpectrum( + const int16_t L_frame, + float *spectrum ); + +void SetModeIndex( + Encoder_State *st, /* i : Encoder state */ + const int32_t last_total_brate, /* i : last total bitrate */ + const int16_t last_element_mode, /* i : last IVAS element mode */ + const int16_t is_mct /* i : MCT mode flag */ +); + +int16_t getNumTcxCodedLines( + const int16_t bwidth /* i : audio bandwidth */ +); + +int16_t getTcxLpcShapedAri( + const int32_t total_brate, /* i : total bitrate */ + const int16_t rf_mode, /* i : flag to signal the RF mode */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void IGFEncApplyMono( + Encoder_State *st, /* i : Encoder state */ + const int16_t igfGridIdx, /* i : IGF grid index */ + float *pMDCTSpectrum, /* i/o: MDCT spectrum */ + float *pPowerSpectrum, /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ + const int16_t isTCX20, /* i : flag indicating if the input is TCX20 or TCX10/2xTCX5 */ + const int16_t isTNSActive, /* i : flag indicating if the TNS is active */ + const int16_t sp_aud_decision0, /* i : first stage switching decision */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +); + +void IGFEncApplyStereo( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ + int16_t ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ + const IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS], /* i : instance handle of IGF Encoder */ + const int16_t igfGridIdx, /* i : IGF grid index */ + Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ + float pPowerSpectrum[CPE_CHANNELS][N_MAX], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ + float *pPowerSpectrumMsInv[CPE_CHANNELS][2], /* i/o: inverse power spectrum */ + float *inv_spectrum[CPE_CHANNELS][2], /* i : inverse spectrum */ + const int16_t frameno, /* i : flag indicating index of current subframe */ + const int16_t sp_aud_decision0, /* i : sp_aud_decision0 */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +); + +void IGFEncConcatenateBitstream( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + const int16_t bsBits, /* i : number of IGF bits written to list of indices */ + BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ +); + +void IGFEncResetTCX10BitCounter( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc /* i : instance handle of IGF Encoder */ +); + +void IGFEncSetMode( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + const int32_t total_brate, /* i : encoder total bitrate */ + const int16_t bwidth, /* i : encoder audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +); + +/*! r: number of bits written per frame */ +int16_t IGFEncWriteBitstream( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *pBitOffset, /* i : ptr to bitOffset counter */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t isIndepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ +); + +/*! r: total number of bits written */ +int16_t IGFEncWriteConcatenatedBitstream( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +); + +void IGFDecApplyMono( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i : instance handle of IGF Decoder */ + float *spectrum, /* i/o: MDCT spectrum */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t bfi, /* i : frame loss == 1, frame good == 0 */ + const int16_t element_mode /* i : IVAS element mode */ +); + +void IGFDecCopyLPCFlatSpectrum( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + const float *pSpectrumFlat, /* i : LPC flattend spectrum from TCX dec */ + const int16_t igfGridIdx /* i : IGF grid index */ +); + +void IGFDecReadData( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Deccoder */ + Decoder_State *st, /* i : decoder state */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t isIndepFrame /* i : if 1: arith dec force reset, if 0: no reset */ +); + +/*! r: return igfAllZero flag indicating if no envelope is transmitted */ +int16_t IGFDecReadLevel( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Deccoder */ + Decoder_State *st, /* i : decoder state */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t isIndepFrame /* i : if 1: arith dec force reset, if 0: no reset */ +); + +void IGFDecRestoreTCX10SubFrameData( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* o : instance handle of IGF Decoder */ + const int16_t subFrameIdx /* i : index of subframe */ +); + +void init_igf_dec( + IGF_DEC_INSTANCE_HANDLE hIGFDec /* i/o: IGF decoder handle */ +); + +void IGFDecSetMode( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* o : instance handle of IGF Decoder */ + const int32_t total_brate, /* i : bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t defaultStartLine, /* i : default start subband index */ + const int16_t defaultStopLine, /* i : default stop subband index */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +); + +void IGFDecStoreTCX10SubFrameData( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + const int16_t subFrameIdx /* i : index of subframe */ +); + +void IGFDecUpdateInfo( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + const int16_t subFrameIdx, /* i : subframe index */ + const int16_t igfGridIdx /* i : IGF grid index */ +); + +/*! r: error value: 0 -> error, 1 -> ok */ +int16_t IGFCommonFuncsIGFConfiguration( + const int32_t total_brate, /* i : bitrate in bs e.g. 9600 for 9.6kbs */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + H_IGF_INFO hIGFInfo, /* o : IGF info handle */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +); + +/*! r: error value: 0 -> error, 1 -> ok */ +int16_t IGFCommonFuncsIGFGetCFTables( + const int32_t total_brate, /* i : bitrate in bs e.g. 9600 for 9.6kbs */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : element mode */ + const int16_t rf_mode, /* i : flag to signal the RF mode */ + const uint16_t **cf_se00, /* i : CF table for t == 0 and f == 0 */ + const uint16_t **cf_se01, /* i : CF table for t == 0 and f == 1 */ + int16_t *cf_off_se01, /* o : offset for CF table above */ + const uint16_t **cf_se02, /* i : CF tables for t == 0 and f >= 2 */ + const int16_t **cf_off_se02, /* o : offsets for CF tables above */ + const uint16_t **cf_se10, /* i : CF table for t == 1 and f == 0 */ + int16_t *cf_off_se10, /* o : offset for CF table above */ + const uint16_t **cf_se11, /* i : CF tables for t == 1 and f >= 1 */ + const int16_t **cf_off_se11 /* o : offsets for CF tables above */ +); + +/*! r: multiplication factor */ +int16_t IGF_ApplyTransFac( + const int16_t val, /* i : input value for multiplication, Q15 */ + const float transFac /* i : multiplicator for variable val, Q14: 1.25f=0x5000, 1.0f=0x4000, 0.5f=0x2000 */ +); + +/*! r: return bitrate index */ +int16_t IGF_MapBitRateToIndex( + const int32_t brate, /* i : bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +); + +void IGFSCFEncoderOpen( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data */ + H_IGF_INFO hIgfInfo, /* i : IGF info handle */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +); + +void IGFSCFEncoderReset( + IGFSCFENC_INSTANCE_HANDLE hPublicData /* i : handle to public data or NULL in case there was no instance created */ +); + +int16_t IGFSCFEncoderEncode( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data or NULL in case there was no instance created */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t bitCount, /* i : offset to the first bit in bitbuffer which should be readed by iisArithDecoderDecode function */ + int16_t *sfe, /* i : ptr to an array which contain quantized scalefactor energies */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t indepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ +); + +void IGFSCFEncoderSaveContextState( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data or NULL in case there was no instance created */ + const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ +); + +void IGFSCFEncoderRestoreContextState( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data or NULL in case there was no instance created */ + const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ +); + +void IGFSCFDecoderOpen( + IGFSCFDEC_INSTANCE_HANDLE hPublicData, /* i : handle to public data */ + H_IGF_INFO hIgfInfo, /* i : IGF info handle */ + const int32_t total_brate, + const int16_t bwidth, + const int16_t element_mode, + const int16_t rf_mode ); + +void IGFSCFDecoderReset( + IGFSCFDEC_INSTANCE_HANDLE hPublicData /* i : handle to public data or NULL in case there was no instance created */ +); + +void IGFSCFDecoderDecode( + IGFSCFDEC_INSTANCE_HANDLE hPublicData, /* i : handle to public data or NULL in case there was no instance created */ + Decoder_State *st, /* i/o: pointer to decoder state */ + int16_t *sfe, /* o : ptr to an array which will contain the decoded quantized coefficients */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t indepFlag /* i : if 1 on input the decoder will be forced to reset, + if 0 on input the decoder will be forced to encode without a reset */ +); + +int16_t tbe_celp_exc_offset( + const int16_t T0, /* i : Integer pitch */ + const int16_t T0_frac /* i : Fractional part of the pitch */ +); + +void blend_subfr2( + float *sigIn1, /* i : input signal for fade-out */ + float *sigIn2, /* i : input signal for fade-in */ + float *sigOut /* o : output signal */ +); + +void init_tcx_window_cfg( + TCX_CONFIG_HANDLE hTcxCfg, /* i : TCX Config handle */ + const int32_t sr_core, /* i : SR core */ + const int32_t input_Fs, /* i : input/output SR */ + const int16_t L_frame, /* i : L_frame at sr_core */ + const int16_t L_frameTCX, /* i : L_frame at i/o SR */ + const int16_t encoderLookahead_enc, /* i : encoder LA at sr_core */ + const int16_t encoderLookahead_FB, /* i : encoder LA at i/o SR */ + const int16_t mdctWindowLength, /* i : window length at sr_core */ + const int16_t mdctWindowLengthFB, /* i : window length at i/o SR */ + const int16_t element_mode /* i : mode of CPE/SCE */ +); + +void init_tcx_cfg( + TCX_CONFIG_HANDLE hTcxCfg, + const int32_t total_brate, + const int32_t sr_core, + const int32_t input_Fs, + const int16_t L_frame, + const int16_t bwidth, + const int16_t L_frameTCX, + const int16_t fscale, + const int16_t encoderLookahead_enc, + const int16_t encoderLookahead_FB, + const float preemph_fac, + const int16_t tcxonly, + const int16_t rf_mode, + const int16_t igf, + const int16_t infoIGFStopFreq, + const int16_t element_mode, + const int16_t ini_frame, + const int16_t is_mct, /* i : MCT mode flag */ + const MCT_CHAN_MODE mct_chan_mode /* i : MCT channel mode */ +); diff --git a/lib_com/pvq_com.c b/lib_com/pvq_com.c new file mode 100644 index 0000000000..750c20adb9 --- /dev/null +++ b/lib_com/pvq_com.c @@ -0,0 +1,975 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "stl.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local definitions + *-------------------------------------------------------------------*/ + +/*! r: Approximate integer division for negative input */ +int16_t shrtCDivSignedApprox( + const int16_t num, /* i : numerator */ + const int16_t den /* i : denominator */ +) +{ + Word16 pool_part; + pool_part = extract_h( L_mult( negate( abs_s( num ) ), lim_neg_inv_tbl_fx[den] ) ); + /* neg_in always, positive out always, so that positive truncation(rounding) towards zero is used */ + if ( num < 0 ) + { + pool_part = negate( pool_part ); /* make negative, one op */ + } + + return pool_part; +} + +/*! r: Approximate integer division for positive input using lookup table */ +int32_t intLimCDivPos( + const int32_t NUM, /* i : numerator */ + const int16_t DEN /* i : denominator */ +) +{ + int32_t result; + + result = (int32_t) ( ( (uint64_t) ( NUM << 1 ) * intLimCDivInvDQ31[DEN] ) >> 32 ); + + return result; +} + +/*! r: Approximate integer division for signed input using lookup table */ +static int32_t intLimCDivSigned( + const int32_t NUM, /* i : numerator */ + const int16_t DEN /* i : denominator */ +) +{ + int32_t result; + int32_t tmp_num; + + tmp_num = max( NUM, -NUM ); + result = (int32_t) sign( (float) NUM ) * (int32_t) ( ( (uint64_t) ( tmp_num << 1 ) * intLimCDivInvDQ31[DEN] ) >> 32 ); + + return result; +} + +static void nearProjQ15( + const int16_t x, /* i : input coefficient */ + int16_t *result /* o : projection */ +) +{ + int16_t NearProjC[4] = { 14967, -25518, 3415, 32351 }; + int32_t P12, P3; + + P12 = ( (int32_t) x * (int32_t) NearProjC[0] >> 16 ) + (int32_t) NearProjC[1]; + P3 = ( (int32_t) x * P12 >> 14 ) + (int32_t) NearProjC[2]; + *result = (int16_t) ( ( (int16_t) x * P3 >> 15 ) + (int32_t) NearProjC[3] ); + + return; +} + + +void obtainEnergyQuantizerDensity( + const int16_t L_in, /* i : left vector energy */ + const int16_t R_in, /* i : right vector energy */ + int16_t *Density /* o : quantizer density */ +) +{ + int32_t Rnrg; + int16_t den; + int16_t L, R; + + L = L_in; + R = R_in; + den = ( 2 * L - 1 ); + if ( den <= 67 ) + { + Rnrg = (int32_t) ( ( (uint64_t) ( (int32_t) R << 1 ) * intLimCDivInvDQ31[den] ) >> 32 ); + } + else + { + Rnrg = ( R / den ); + } + Rnrg += 28; + + if ( ( R - 96 < 56 ) && ( R - 96 < Rnrg ) ) + { + Rnrg = R - 96; + } + else if ( 56 < Rnrg ) + { + Rnrg = 56; + } + + Rnrg = max( 0, Rnrg ); /* _f table set to 1 for low Rnrg */ + *Density = (int16_t) obtainEnergyQuantizerDensity_f[Rnrg]; + + return; +} + + +static void dsDirac2Dirac( + const int16_t dsDiracIndex, /* i : input index */ + int16_t *diracs /* o : number of diracs */ +) +{ + int16_t dsHighIndex; + + dsHighIndex = dsDiracIndex - DS_INDEX_LINEAR_END - 1; + *diracs = dsDiracIndex; + if ( dsDiracIndex > DS_INDEX_LINEAR_END ) + { + *diracs = dsHighDiracsTab[dsHighIndex]; + } + + return; +} + + +static void dsDiracPerQuanta( + const int16_t td, /* i : Length of vector segment */ + const int16_t t_quanta, /* i : Assigned number of quanta */ + const int16_t dsm, /* i : Conservative rounding flag */ + const uint8_t *const *frQuanta, /* i : Quanta lookup table */ + int16_t *DsIdx /* o : Lookup table index */ +) +{ + const uint8_t *sv; + int16_t nsv; + int16_t t_quanta_o; + int16_t dsIndex; + int16_t i; + + sv = frQuanta[td]; + nsv = sv[0]; + + t_quanta_o = t_quanta - QUANTAQ3OFFSET; + if ( t_quanta_o >= sv[nsv] ) + { + *DsIdx = nsv; + return; + } + if ( t_quanta_o <= sv[1] ) + { + *DsIdx = 1; + return; + } + dsIndex = 1 << frQuanta[0][td]; + if ( t_quanta_o > sv[nsv >> 1] ) + { + dsIndex = nsv - dsIndex; /*single op*/ + ADD( 1 ); + } + for ( i = frQuanta[0][td] - 1; i >= 0; i-- ) + { + dsIndex += shl( sub( shl( lshr( sub( sv[dsIndex], t_quanta_o ), 15 ), 1 ), 1 ), i ); + } + dsIndex += ( t_quanta_o > sv[dsIndex] ); + dsIndex -= ( dsIndex > 1 ); + + if ( dsm == PVQ_CONS ) + { + *DsIdx = dsIndex; + return; + } + *DsIdx = dsIndex + ( ( sv[dsIndex + 1] + sv[dsIndex] ) < ( t_quanta_o << 1 ) ); + + return; +} + + +void QuantaPerDsDirac( + const int16_t td, /* i : Length of vector segment */ + const int16_t dsDiracIndex, /* i : Quanta table index */ + const uint8_t *const *dimFrQuanta, /* i : Quanta lookup table */ + int16_t *Quanta /* i : Quanta */ +) +{ + if ( !dsDiracIndex ) + { + *Quanta = 0; + return; + } + *Quanta = ( (int16_t) dimFrQuanta[td][dsDiracIndex] ) + QUANTAQ3OFFSET; + + return; +} + + +void conservativeL1Norm( + const int16_t L, /* i : Length of vector segment */ + const int16_t Qvec, /* i : Assigned number of quanta */ + const int16_t Fcons, /* i : Conservative rounding flag */ + const int16_t Qavail, /* i : Input quanta remaining */ + const int16_t Qreserv, /* i : Input quanta in reservoir */ + const int16_t Dspec, /* i : assigned diracs from bitalloc */ + int16_t *Dvec, /* o : actual number of diracs */ + int16_t *Qspare, /* o : Output quanta remaining */ + int16_t *Qreservplus, /* o : Output quanta in reservoir */ + int16_t *Dspecplus /* o : Output number of diracs */ +) +{ + int16_t Minit, Mprime; + int16_t Qtestminus; + const uint8_t *frQuantaL; + + frQuantaL = hBitsN[L]; + + *Qreservplus = Qreserv + Qvec - QUANTAQ3OFFSET; + + dsDiracPerQuanta( L, Qvec, Fcons, hBitsN, &Minit ); + Mprime = Minit; + do + { + Qtestminus = frQuantaL[Mprime]; + *Qspare = Qavail - Qtestminus; + Mprime = Mprime - 1; + } while ( Mprime >= 0 && *Qspare < QUANTAQ3OFFSET ); + + if ( Mprime < 0 ) + { + *Qspare = Qavail + QUANTAQ3OFFSET; + } + + dsDirac2Dirac( Mprime + 1, Dvec ); + + *Dspecplus = Dspec + *Dvec; + + *Qreservplus -= frQuantaL[Minit]; + + *Qspare -= QUANTAQ3OFFSET; + + return; +} + +void bandBitsAdjustment( + const int16_t Brc, /* i : Current number of read quanta in range coder */ + const uint32_t INTrc, /* i : Range coder state */ + const int16_t Bavail, /* i : Available number of quanta */ + const int16_t Nbands, /* i : Number of bands */ + const int16_t D, /* i : Remaining number of bands to encode */ + const int16_t L, /* i : Size of current band */ + const int16_t Bband, /* i : Quanta allocation for current band */ + const int16_t Breserv, /* i : Quanta reservoir */ + int16_t *Bband_adj, /* o : Actual used number of quanta */ + int16_t *Brem, /* o : Quanta remaining */ + int16_t *Breservplus /* o : Quanta pool size */ +) +{ + int16_t Btemp; + int16_t Bff; + int16_t Dtmp, tmp_short1, tmp_short2; + + rangeCoderFinalizationFBits( Brc, INTrc, &Bff ); + + if ( D < Nbands ) + { + Dtmp = min( D, 3 ); /* avoid branch cost */ + Btemp = (int16_t) intLimCDivSigned( Breserv - Bff, Dtmp ); /* result always fits in Word16 */ + + *Breservplus = Bband + Breserv; + } + else + { + Btemp = 0; + *Breservplus = Bband + Bff; + } + + *Bband_adj = Bband; + tmp_short1 = L * 80; + if ( tmp_short1 < Bband ) + { + *Bband_adj = tmp_short1; + } + + tmp_short1 = Bavail - Bff; + tmp_short2 = *Bband_adj + Btemp; + + *Bband_adj = tmp_short2; + if ( tmp_short1 < tmp_short2 ) + { + *Bband_adj = tmp_short1; + } + if ( *Bband_adj < 0 ) + { + *Bband_adj = 0; + } + *Brem = Bavail - Bff; + + return; +} + + +/*-------------------------------------------------------------------* + * local_norm_s() + * + * + *-------------------------------------------------------------------*/ + +/*! r: n shifts needed to normalize */ +static int16_t local_norm_s( + int16_t short_var /* i/o: signed 16 bit variable / normalized value */ +) +{ + int16_t short_res; + + if ( short_var == -1 ) + { + return ( 16 - 1 ); + } + else + { + if ( short_var == 0 ) + { + return 0; + } + + else + { + if ( short_var < 0 ) + { + short_var = ~short_var; + } + + for ( short_res = 0; short_var < 0x4000; short_res++ ) + { + short_var <<= 1; + } + } + } + + return ( short_res ); +} + +/*! r: ratio Q11 */ +static int16_t Ratio_base2Q11( + const int16_t opp, /* i : opposite Q15 */ + const int16_t near /* i : near Q15 */ +) +{ + Word16 mc, nc, ms, ns, d, z; + Word16 result; + Word32 acc; + + ns = local_norm_s( opp ); /* exponent*/ + nc = local_norm_s( near ); /* exponent */ + + ms = opp << ns; /* mantissa */ + mc = near << nc; /* mantissa */ + + acc = L_mac( 538500224L, mc, -2776 ); /* a0*mc + a1, acc(Q27), a0(Q11), a1(Q27)*/ + z = mac_r( acc, ms, -2776 ); /* z in Q11, a0 in Q11 */ + d = sub( ms, mc ); /* d in Q15 */ + z = mult_r( z, d ); /* z in Q11 */ + + result = add( z, shl( sub( nc, ns ), 11 ) ); + + return result; +} + + +static void Ratio_rQ3( + int16_t opp, /* i : opposite */ + int16_t near, /* i : near */ + int16_t *result /* o : ratio */ +) +{ + int16_t tmp = 128; + + tmp += Ratio_base2Q11( opp, near ); + *result = ( tmp >> 8 ); + + return; +} + + +void densityAngle2RmsProjDec( + const int16_t D, /* i : density */ + const int16_t indexphi, /* i : decoded index from AR dec */ + int16_t *oppQ15, /* o : opposite */ + int16_t *nearQ15, /* o : near */ + int16_t *oppRatioQ3 /* o : ratio */ +) +{ + int16_t phiQ14q; + int32_t L_2xPhiQ14q; + int16_t oppTail, nearTail; + + phiQ14q = (int16_t) intLimCDivPos( labs( indexphi ) << 13, D >> 1 ); + if ( ( 0xFFFe & D ) == 0 ) /* even -> positive, odd -> 0 */ + { + phiQ14q = 1 << 13; /* one op */ + } + +#define C_TOP ( ( 1 << 14 ) - ( 1 << 6 ) ) +#define C_BOT ( 1 << 6 ) +#define C_SHRT_MAXABS ( 1L << 15 ) +#define C_SHRT_MAX_POS ( ( 1 << 15 ) - 1 ) +#define C_Q14_MAX ( 1 << 14 ) + + oppTail = phiQ14q >= C_TOP; + nearTail = phiQ14q < C_BOT; + if ( !( oppTail || nearTail ) ) + { + L_2xPhiQ14q = 2 * (int32_t) phiQ14q; + nearProjQ15( (int16_t) ( C_SHRT_MAXABS - L_2xPhiQ14q ), oppQ15 ); + nearProjQ15( phiQ14q << 1, nearQ15 ); + Ratio_rQ3( *oppQ15, *nearQ15, oppRatioQ3 ); + } + else + { + *oppRatioQ3 = ( 1 - 2 * nearTail ) * C_Q14_MAX; + *oppQ15 = oppTail * C_SHRT_MAX_POS; + *nearQ15 = nearTail * C_SHRT_MAX_POS; + } + +#undef C_TOP +#undef C_BOT +#undef C_SHRT_MAXABS +#undef C_SHRT_MAX_POS +#undef C_Q14_MAX + + return; +} + + +void densityAngle2RmsProjEnc( + const int16_t D, /* i : density */ + const int16_t phiQ14uq, /* i : angle */ + int16_t *indexphi, /* o : index */ + int16_t *oppQ15, /* o : opposite */ + int16_t *nearQ15, /* o : near */ + int16_t *oppRatioQ3 /* o : ratio */ +) +{ +#define C_MAX13 ( 1L << 13 ) + *indexphi = ( D * phiQ14uq + C_MAX13 ) >> 14; +#undef C_MAX13 + + if ( ( 0xFFFE & D ) == 0 ) + { + *indexphi = -1; /* one op */ + } + densityAngle2RmsProjDec( D, *indexphi, oppQ15, nearQ15, oppRatioQ3 ); + + return; +} + +void NearOppSplitAdjustment( + const int16_t qband, /* i : quanta for current band */ + const int16_t qzero, /* i : range coder finalization quanta */ + const int16_t Qac, /* i : range coder current quanta */ + const uint32_t INTac, /* i : range coder state */ + const int16_t qglobal, /* i : quanta input */ + const int16_t FlagCons, /* i : conservative rounding flag */ + const int16_t Np, /* i : number of parts */ + const int16_t Nhead, /* i : first part */ + const int16_t Ntail, /* i : remaining parts */ + const int16_t Nnear, /* i : length of near component */ + const int16_t Nopp, /* i : length of opposite component */ + int16_t oppRQ3, /* i : ratio */ + int16_t *qnear, /* o : quantized near */ + int16_t *qopp, /* o : quantized opposite */ + int16_t *qglobalupd /* o : quanta remaining */ +) +{ + int16_t qac, qskew, qboth, QIa, QIb; + int32_t L_QIb, qnum; + int16_t qmin, qavg, Midx; + + rangeCoderFinalizationFBits( Qac, INTac, &qac ); + qboth = qband - ( qac - qzero ); + qskew = 0; /* skew calc code */ + if ( Nhead > 1 ) + { + qavg = (int16_t) intLimCDivSigned( qboth, Np ); + dsDiracPerQuanta( Ntail, qavg, FlagCons, hBitsN, &Midx ); + QuantaPerDsDirac( Nhead, Midx, hBitsN, &qmin ); + + qskew = qavg - qmin; + qskew = max( 0, qskew ); + } /* end of skew calc code*/ + + QIa = (int16_t) intLimCDivPos( Nopp, Nnear ) + 1; /* always positive Word16 out */ + qnum = qband + qzero - qac - qskew - Nopp * (int32_t) oppRQ3; + L_QIb = 0; + if ( qnum > 0 ) + { + L_QIb = intLimCDivPos( qnum, QIa ); + } + QIb = (int16_t) min( 32767L, L_QIb ); /* saturate, L_QIb >= 0 */ + *qnear = QIb; + if ( QIb > qboth ) + { + *qnear = qboth; /*single op*/ + } + *qopp = qboth - *qnear; + *qglobalupd = qglobal - ( qac - qzero ); + + return; +} + +/*--------------------------------------------------------------------------* + * apply_gain() + * + * Apply gain + *--------------------------------------------------------------------------*/ + +void apply_gain( + const int16_t *ord, /* i : Indices for energy order */ + const int16_t *band_start, /* i : Sub band start indices */ + const int16_t *band_end, /* i : Sub band end indices */ + const int16_t num_sfm, /* i : Number of bands */ + const float *gains, /* i : Band gain vector */ + float *xq /* i/o: float synthesis / gain adjusted synth */ +) +{ + int16_t band, i; + float g; + + for ( band = 0; band < num_sfm; band++ ) + { + g = gains[ord[band]]; + + for ( i = band_start[band]; i < band_end[band]; i++ ) + { + xq[i] *= g; + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * fine_gain_quant() + * + * Fine gain quantization + *--------------------------------------------------------------------------*/ + +void fine_gain_quant( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t *ord, /* i : Indices for energy order */ + const int16_t num_sfm, /* i : Number of bands */ + const int16_t *gain_bits, /* i : Gain adjustment bits per sub band */ + float *fg_pred, /* i/o: Predicted gains / Corrected gains */ + const float *gopt /* i : Optimal gains */ +) +{ + int16_t band; + int16_t gbits; + int16_t idx; + float gain_db, gain_dbq; + float err; + + for ( band = 0; band < num_sfm; band++ ) + { + gbits = gain_bits[ord[band]]; + if ( fg_pred[band] != 0 && gbits > 0 ) + { + err = gopt[band] / fg_pred[band]; + gain_db = 20.0f * (float) log10( err ); + idx = (int16_t) squant( gain_db, &gain_dbq, finegain[gbits - 1], gain_cb_size[gbits - 1] ); + push_indice( hBstr, IND_PVQ_FINE_GAIN, idx, gbits ); + + /* Update prediced gain with quantized correction */ + fg_pred[band] *= (float) pow( 10, gain_dbq * 0.05f ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * srt_vec_ind() + * + * sort vector and save sorting indices + *-------------------------------------------------------------------*/ + +void srt_vec_ind( + const int16_t *linear, /* i : linear input */ + int16_t *srt, /* o : sorted output */ + int16_t *I, /* o : index for sorted output */ + const int16_t length /* i : length of vector */ +) +{ + float linear_f[MAX_SRT_LEN]; + float srt_f[MAX_SRT_LEN]; + + mvs2r( linear, linear_f, length ); + srt_vec_ind_f( linear_f, srt_f, I, length ); + mvr2s( srt_f, srt, length ); + + return; +} + +/*-------------------------------------------------------------------* + * srt_vec_ind_f() + * + * sort vector and save sorting indices, using float input values + *-------------------------------------------------------------------*/ + +void srt_vec_ind_f( + const float *linear, /* i : linear input */ + float *srt, /* o : sorted output */ + int16_t *I, /* o : index for sorted output */ + const int16_t length /* i : length of vector */ +) +{ + int16_t pos, npos; + int16_t idxMem; + float valMem; + + /*initialize */ + for ( pos = 0; pos < length; pos++ ) + { + I[pos] = pos; + } + + mvr2r( linear, srt, length ); + + /* now iterate */ + for ( pos = 0; pos < ( length - 1 ); pos++ ) + { + for ( npos = ( pos + 1 ); npos < length; npos++ ) + { + if ( srt[npos] < srt[pos] ) + { + idxMem = I[pos]; + I[pos] = I[npos]; + I[npos] = idxMem; + + valMem = srt[pos]; + srt[pos] = srt[npos]; + srt[npos] = valMem; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * UMult_32_32() + * + * + *-------------------------------------------------------------------*/ + +/*! r: Multiplication result */ +uint32_t UMult_32_32( + const uint32_t UL_var1, /* i : factor 1 */ + const uint32_t UL_var2 /* i : factor 2 */ +) +{ + uint64_t tmp; + + tmp = (uint64_t) UL_var1 * (uint64_t) UL_var2; + + return (uint32_t) ( tmp >> 32 ); +} + +/*-------------------------------------------------------------------* + * UL_div() + * + * Calculate UL_num/UL_den. UL_num assumed to be Q31, UL_den assumed + * to be Q32, then result is in Q32. + *-------------------------------------------------------------------*/ + +/*! r: Division result */ +static uint32_t UL_div( + const uint32_t UL_num, /* i : numerator */ + const uint32_t UL_den /* i : denominator */ +) +{ + uint32_t UL_e, UL_Q; + uint32_t UL_msb; + int16_t i; + + UL_e = 0xffffffff - UL_den; + UL_Q = UL_num; + + for ( i = 0; i < 5; i++ ) + { + UL_msb = UMult_32_32( UL_Q, UL_e ); + UL_Q = UL_Q + UL_msb; + UL_e = UMult_32_32( UL_e, UL_e ); + } + + return UL_Q; +} + + +/*-------------------------------------------------------------------* + * UL_inverse() + * + * Calculate inverse of UL_val. Output in Q_exp. + *-------------------------------------------------------------------*/ + +/*! r: inverse */ +uint32_t UL_inverse( + const uint32_t UL_val, /* i : input value Q_exp */ + int16_t *exp /* i/o: input exp / result exp */ +) +{ + uint32_t UL_tmp; + + *exp = norm_ul( UL_val ); /* aligned to BASOP */ + UL_tmp = UL_val << ( *exp ); /* Q32*/ + + *exp = 32 + 31 - *exp; + + return UL_div( 0x80000000, UL_tmp ); +} + +/*----------------------------------------------------------------------------- + * ratio() + * + * Divide the numerator by the denominator. + *----------------------------------------------------------------------------*/ + +/*! r: ratio */ +Word16 ratio( + const Word32 numer, /* i : numerator */ + const Word32 denom, /* i : denominator */ + Word16 *expo /* i/o: input exp / result exp */ +) +{ + Word16 expNumer, expDenom; + Word16 manNumer, manDenom; + Word16 quotient; + + expDenom = norm_l( denom ); /* exponent */ + manDenom = extract_h( L_shl( denom, expDenom ) ); /* mantissa */ + expNumer = norm_l( numer ); /* exponent */ + manNumer = extract_h( L_shl( numer, expNumer ) ); /* mantissa */ + manNumer = shr( manNumer, 1 ); /* Ensure the numerator < the denominator */ + div_s( "ient, manNumer, manDenom ); /* in Q14 */ + + *expo = sub( expNumer, expDenom ); + + return quotient; /* Q14 */ +} + +/*----------------------------------------------------------------------------- + * atan2_fx(): + * + * Approximates arctan piecewise with various 4th to 5th order least square fit + * polynomials for input in 5 segments: + * - 0.0 to 1.0 + * - 1.0 to 2.0 + * - 2.0 to 4.0 + * - 4.0 to 8.0 + * - 8.0 to infinity + *---------------------------------------------------------------------------*/ + +/*! r: Angle between 0 and EVS_PI/2 radian (Q14) */ +Word16 atan2_fx( + const Word32 y, /* i : near side (Argument must be positive) (Q15) */ + const Word32 x /* i : opposite side (Q15) */ +) +{ + Word32 acc, arg; + Word16 man, expo, reciprocal; + Word16 angle, w, z; + +#define WMC_TOOL_MAN + IF( L_sub( x, 0 ) == 0 ) + { + return 25736; /* EVS_PI/2 in Q14 */ + } + man = ratio( y, x, &expo ); /* man in Q14 */ + expo = sub( expo, ( 15 - 14 ) ); /* Now, man is considered in Q15 */ + arg = L_shr( (Word32) man, expo ); + + IF( L_shr( arg, 3 + 15 ) != 0 ) + /*===============================* + * 8.0 <= x < infinity * + *===============================*/ + { + /* atan(x) = EVS_PI/2 - 1/x + 1/(3x^3) - 1/(5x^5) + ... + * ~ EVS_PI/2 - 1/x, for x >= 8. + */ + expo = norm_l( arg ); + man = extract_h( L_shl( arg, expo ) ); + div_s( &reciprocal, 0x3fff, man ); + expo = sub( 15 + 1, expo ); + reciprocal = shr( reciprocal, expo ); /* Q14*/ + angle = sub( 25736, reciprocal ); /* Q14 (EVS_PI/2 - 1/x) */ + + /* For 8.0 <= x < 10.0, 1/(5x^5) is not completely negligible. + * For more accurate result, add very small correction term. + */ + IF( L_sub( L_shr( arg, 15 ), 10L ) < 0 ) + { + angle = add( angle, 8 ); /* Add tiny correction term. */ + } + } + ELSE IF( L_shr( arg, 2 + 15 ) != 0 ) + /*==========================* + * 4.0 <= x < 8.0 * + *==========================*/ + { + /* interval: [3.999, 8.001] + * atan(x) ~ (((a0*x + a1)*x + a2)*x + a3)*x + a4 + * = (((a0*8*y + a1)*8*y + a2)*8*y + a3)*8*y + a4 Substitute 8*y -> x + * = (((a0*8^3*y + a1*8^2)*y + a2*8)*y + a3)*8*y + a4 + * = ((( c0*y + c1)*y + c2)*y + c3)*8*y + c4, + * where y = x/8 + * and a0 = -1.28820869667651e-04, a1 = 3.88263533346295e-03, + * a2 = -4.64216306484597e-02, a3 = 2.75986060068931e-01, + * a4 = 7.49208077809799e-01. + */ + w = extract_l( L_shr( arg, 3 ) ); /* Q15 y = x/8 */ + acc = 533625337L; /* Q31 c1 = a1*8^2 */ + move32(); + z = mac_r( acc, w, -2161 ); /* Q15 c0 = a0*8^3 */ + acc = -797517542L; /* Q31 c2 = a2*8 */ + move32(); + z = mac_r( acc, w, z ); /* Q15 */ + acc = 592675551L; /* Q31 c3 = a3 */ + move32(); + z = mac_r( acc, w, z ); /* z (in:Q15, out:Q12) */ + acc = 201114012L; /* Q28 c4 = a4 */ + move32(); + acc = L_mac( acc, w, z ); /* Q28 */ + angle = extract_l( L_shr( acc, ( 28 - 14 ) ) ); /* Q14 result of atan(x), where 4 <= x < 8 */ + } + ELSE IF( L_shr( arg, 1 + 15 ) != 0 ) + /*==========================* + * 2.0 <= x < 4.0 * + *==========================*/ + { + /* interval: [1.999, 4.001] + * atan(x) ~ (((a0*x + a1)*x + a2)*x + a3)*x + a4 + * = (((a0*4*y + a1)*4*y + a2)*4*y + a3)*4*y + a4 Substitute 4*y -> x + * = (((a0*16*y + a1*4)*y + a2)*4*y + a3)*4*y + a4 + * = (((a0*32*y + a1*8)*y + a2*2)*2*y + a3)*4*y + a4 + * = ((( c0*y + c1)*y + c2)*2*y + c3)*4*y + c4, + * where y = x/4 + * and a0 = -0.00262378195660943, a1 = 0.04089687039888652, + * a2 = -0.25631148958325911, a3 = 0.81685854627399479, + * a4 = 0.21358070563097167 + * */ + w = extract_l( L_shr( arg, 2 ) ); /* Q15 y = x/4 */ + acc = 702602883L; /* Q31 c1 = a1*8 */ + move32(); + z = mac_r( acc, w, -2751 ); /* Q15 c0 = a0*32 */ + acc = -1100849465L; /* Q31 c2 = a2*2 */ + move32(); + z = mac_r( acc, w, z ); /* z (in:Q15, out:Q14) */ + acc = 877095185L; /* Q30 c3 = a3 */ + move32(); + z = mac_r( acc, w, z ); /* z (in:Q14, out:Q12) */ + acc = 57332634L; /* Q28 c4 = a4 */ + move32(); + acc = L_mac( acc, w, z ); /* Q28 */ + angle = extract_l( L_shr( acc, ( 28 - 14 ) ) ); /* Q14 result of atan(x) where 2 <= x < 4 */ + } + ELSE IF( L_shr( arg, 15 ) != 0 ) + /*==========================* + * 1.0 <= x < 2.0 * + *==========================*/ + { + /* interval: [0.999, 2.001] + * atan(x) ~ (((a0*x + 1)*x + a2)*x + a3)*x + a4 + * = (((a0*2*y + a1)*2*y + a2)*2*y + a3)*2*y + a4 Substitute 2*y -> x + * = (((a0*4*y + a1*2)*y + a2)*2*y + a3)*2*y + a4 + * = (((a0*4*y + a1*2)*y + a2)*y + a3/2)*4*y + a4 + * = ((( c0*y + c1)*y + c2)*y + c3)*4*y + c4, + * where y = x/2 + * and a0 = -0.0160706457245251, a1 = 0.1527106504065224, + * a2 = -0.6123208404800871, a3 = 1.3307896976322915, + * a4 = -0.0697089375247448 + */ + w = extract_l( L_shr( arg, 1 ) ); /* Q15 y= x/2 */ + acc = 655887249L; /* Q31 c1 = a1*2 */ + move32(); + z = mac_r( acc, w, -2106 ); /* Q15 c0 = a0*4 */ + acc = -1314948992L; /* Q31 c2 = a2 */ + move32(); + z = mac_r( acc, w, z ); + acc = 1428924557L; /* Q31 c3 = a3/2 */ + move32(); + z = mac_r( acc, w, z ); /* z (in:Q15, out:Q13) */ + acc = -37424701L; /* Q29 c4 = a4 */ + move32(); + acc = L_mac( acc, w, z ); /* Q29 */ + angle = extract_l( L_shr( acc, ( 29 - 14 ) ) ); /* Q14 result of atan(x) where 1 <= x < 2 */ + } + ELSE + /*==========================* + * 0.0 <= x < 1.0 * + *==========================*/ + { + /* interval: [-0.001, 1.001] + * atan(x) ~ ((((a0*x + a1)*x + a2)*x + a3)*x + a4)*x + a5 + * = ((((a0*2*x + a1*2)*x/2 + a2)*x + a3)*x + a4)*x + a5 + * = (((( c0*x + c1)*x/2 + c2)*x + c3)*x + c4)*x + c5 + * where + * a0 = -5.41182677118661e-02, a1 = 2.76690449232515e-01, + * a2 = -4.63358392562492e-01, a3 = 2.87188466598566e-02, + * a4 = 9.97438122814383e-01, a5 = 5.36158556179092e-05. + */ + w = extract_l( arg ); /* Q15 */ + acc = 1188376431L; /* Q31 c1 = a1*2 */ + move32(); + z = mac_r( acc, w, -3547 ); /* Q15 c0 = a0*2 */ + acc = -995054571L; /* Q31 c2 = a2 */ + move32(); + z = extract_h( L_mac0( acc, w, z ) ); /* Q15 non-fractional mode multiply */ + acc = 61673254L; /* Q31 c3 = a3 */ + move32(); + z = mac_r( acc, w, z ); + acc = 2141982059L; /* Q31 c4 = a4 */ + move32(); + z = mac_r( acc, w, z ); + acc = 115139L; /* Q31 c5 = a5 */ + move32(); + acc = L_mac( acc, w, z ); /* Q31 */ + angle = extract_l( L_shr( acc, 31 - 14 ) ); /* Q14 result of atan(x), where 0 <= x < 1 */ + } + + return angle; /* Q14 between 0 and EVS_PI/2 radian. */ +} diff --git a/lib_com/range_com.c b/lib_com/range_com.c new file mode 100644 index 0000000000..083b95edbb --- /dev/null +++ b/lib_com/range_com.c @@ -0,0 +1,112 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * rc_get_bits2() + * + * Get number of bits needed to finalize range coder + *-------------------------------------------------------------------*/ + +/*! r: Number of bits needed */ +int16_t rc_get_bits2( + const int16_t N, /* i : Number of bits currently used */ + const uint32_t range /* i : Range of range coder */ +) +{ + int16_t tmp; + tmp = N + 2 + norm_ul( range ); /* aligned to BASOP */ + return tmp; +} + +/*-------------------------------------------------------------------* + * rangeCoderFinalizationFBits() + * + * Fractional (Q3) bits for range coder finalization + *-------------------------------------------------------------------*/ + +void rangeCoderFinalizationFBits( + const int16_t Brc, /* i : Current number of decoded bits */ + const uint32_t INTrc, /* i : Range coder state */ + int16_t *FBits /* i : Fractional finalization bits */ +) +{ + uint32_t Bq15; + uint32_t UL_tmp; + uint16_t Bq15ui16, B, E; + int16_t k; + + B = 30 - norm_ul( INTrc ); /* aligned to BASOP */ + +#define RCF_INIT_SHIFTp1 ( RCF_INIT_SHIFT + 1 ) +#define RCF_FINALIZE_LIMIT ( ( 1L << 16 ) - 1 ) + *FBits = ( Brc + 32 ) * 8; + + Bq15 = 0; + k = B - RCF_INIT_SHIFT; + if ( k >= 0 ) + { + Bq15 = INTrc >> ( k ); /* single op */ + } + + E = 2; + for ( k = 1; k < 4; k++ ) + { + Bq15ui16 = (uint16_t) ( Bq15 >> ( E & 1 ) ); + UL_tmp = (uint32_t) Bq15ui16; + Bq15 = ( UL_tmp * Bq15ui16 ) >> RCF_INIT_SHIFTp1; + E = 2 * B; + if ( Bq15 > RCF_FINALIZE_LIMIT ) + { + E++; + } + B = E; + } + *FBits -= B; +#undef RCF_INIT_SHIFTp1 +#undef RCF_FINALIZE_LIMIT + + return; +} diff --git a/lib_com/re8_ppv.c b/lib_com/re8_ppv.c new file mode 100644 index 0000000000..ab48b24ced --- /dev/null +++ b/lib_com/re8_ppv.c @@ -0,0 +1,214 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void nearest_neighbor_2D8( const float x[], int16_t y[] ); + +/*--------------------------------------------------------------* + * re8_PPV() + * + * Nearest neighbor search in infinite lattice RE8 + * the algorithm is based on the definition of RE8 as + * RE8 = (2D8) U (2D8+[1,1,1,1,1,1,1,1]) + * it applies the coset decoding of Sloane and Conway + * --------------------------------------------------------------*/ + +void re8_PPV( + const float x[], /* i : point in R^8 */ + int16_t y[] /* o : point in RE8 (8-dimensional integer vector) */ +) +{ + int16_t i, y0[8], y1[8]; + float e0, e1, x1[8], tmp; + + /*--------------------------------------------------------------* + * find the nearest neighbor y0 of x in 2D8 + *--------------------------------------------------------------*/ + + nearest_neighbor_2D8( x, y0 ); + + /*--------------------------------------------------------------* + * find the nearest neighbor y1 of x in 2D8+(1,...,1) (by coset decoding) + *--------------------------------------------------------------*/ + + for ( i = 0; i < 8; i++ ) + { + x1[i] = x[i] - 1.0f; + } + + nearest_neighbor_2D8( x1, y1 ); + + for ( i = 0; i < 8; i++ ) + { + y1[i] += 1; + } + + /*--------------------------------------------------------------* + * compute e0=||x-y0||^2 and e1=||x-y1||^2 + *--------------------------------------------------------------*/ + + e0 = e1 = 0.0; + for ( i = 0; i < 8; i++ ) + { + tmp = x[i] - y0[i]; + e0 += tmp * tmp; + tmp = x[i] - y1[i]; + e1 += tmp * tmp; + } + + /*--------------------------------------------------------------* + * select best candidate y0 or y1 to minimize distortion + *--------------------------------------------------------------*/ + + if ( e0 < e1 ) + { + for ( i = 0; i < 8; i++ ) + { + y[i] = y0[i]; + } + } + else + { + for ( i = 0; i < 8; i++ ) + { + y[i] = y1[i]; + } + } + + return; +} + +/*--------------------------------------------------------------* + * nearest_neighbor_2D8() + * + * Nearest neighbor search in infinite lattice 2D8 + * algorithm: nn_2D8(x) = 2*nn_D8(x/2) + * nn_D8 = decoding of Z^8 with Wagner rule + * (see Conway and Sloane's paper in IT-82) + --------------------------------------------------------------*/ + +static void nearest_neighbor_2D8( + const float x[], /* i : point in R^8 */ + int16_t y[] /* o : point in 2D8 (8-dimensional integer vector) */ +) +{ + int16_t i, j, sum; + float s, e[8], em; + + /*--------------------------------------------------------------* + * round x into 2Z^8 i.e. compute y=(y1,...,y8) such that yi = 2[xi/2] + * where [.] is the nearest integer operator + * in the mean time, compute sum = y1+...+y8 + *--------------------------------------------------------------*/ + + sum = 0; + for ( i = 0; i < 8; i++ ) + { + /* round to ..., -2, 0, 2, ... ([-1..1[ --> 0) */ + if ( x[i] < 0 ) + { + y[i] = -2 * ( ( (int16_t) ( 1.0 - x[i] ) ) >> 1 ); + } + else + { + y[i] = 2 * ( ( (int16_t) ( 1.0 + x[i] ) ) >> 1 ); + } + sum += y[i]; + } + + /*--------------------------------------------------------------* + * check if y1+...+y8 is a multiple of 4 + * if not, y is not round xj in the wrong way where j is defined by + * j = arg max_i | xi -yi| + * (this is called the Wagner rule) + *--------------------------------------------------------------*/ + + if ( sum % 4 ) + { + /* find j = arg max_i | xi -yi| */ + em = 0; + j = 0; + for ( i = 0; i < 8; i++ ) + { + /* compute ei = xi-yi */ + e[i] = x[i] - y[i]; + } + + for ( i = 0; i < 8; i++ ) + { + /* compute |ei| = | xi-yi | */ + if ( e[i] < 0 ) + { + s = -e[i]; + } + else + { + s = e[i]; + } + /* check if |ei| is maximal, if so, set j=i */ + if ( em < s ) + { + em = s; + j = i; + } + } + + /* round xj in the "wrong way" */ + if ( e[j] < 0 ) + { + y[j] -= 2; + } + else + { + y[j] += 2; + } + } + + return; +} diff --git a/lib_com/re8_util.c b/lib_com/re8_util.c new file mode 100644 index 0000000000..e4600774b4 --- /dev/null +++ b/lib_com/re8_util.c @@ -0,0 +1,439 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include /* for ldexp() */ +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static int16_t re8_identify_absolute_leader( const int16_t y[] ); + +static void re8_coord( const int16_t y[], int16_t k[] ); + + +/*----------------------------------------------------------------* + * re8_vor() + * + * Multi-rate RE8 indexing by Voronoi extension + *----------------------------------------------------------------*/ + +void re8_vor( + int16_t y[], /* i : point in RE8 (8-dimensional integer vector) */ + int16_t *n, /* o : codebook number n=0,2,3,4,... (scalar integer) */ + int16_t k[], /* o : Voronoi index (integer vector of dimension 8) used only if n>4 */ + int16_t c[], /* o : codevector in Q0, Q2, Q3, or Q4 if n<=4, y=c */ + int16_t *ka /* o : identifier of absolute leader (needed to index c)*/ +) +{ + int16_t v[8]; + int16_t k_mod[8], c_tmp[8]; + int16_t i, r, m, k_tmp[8], iter, ka_tmp, n_tmp, mask; + float sphere; + + /*----------------------------------------------------------------* + * verify if y is in Q0, Q2, Q3 or Q4 + * (a fast search is used here: + * the codebooks Q0, Q2, Q3 or Q4 are specified in terms of RE8 absolute leaders + * (see FORinstance Xie and Adoul's paper in ICASSP 96) + * - a unique code identifying the absolute leader related to y is computed + * in re8_identify_absolute_leader() + * this code is searched FORin a pre-defined list which specifies Q0, Q2, Q3 or Q4) + * the absolute leader is identified by ka + * - a translation table maps ka to the codebook number n) + *----------------------------------------------------------------*/ + + *ka = re8_identify_absolute_leader( y ); + + /*----------------------------------------------------------------* + * compute codebook number n of Qn (by table look-up) + * at this stage, n=0,2,3,4 or out=100 + *----------------------------------------------------------------*/ + + *n = Da_nq[*ka]; + + /*----------------------------------------------------------------* + * decompose y into : + * (if n<=4:) + * y = c where c is in Q0, Q2, Q3 or Q4 + * or + * (if n>4:) + * y = m c + v where c is in Q3 or Q4, v is a Voronoi codevector + * m=2^r (r integer >=2) + * + * in the latter case (if n>4), as a side-product, compute the (Voronoi) index k[] of v + * and replace n by n = n' + 2r where n' = 3 or 4 (c is in Qn') and r is defined above + *----------------------------------------------------------------*/ + + if ( *n <= 4 ) + { + for ( i = 0; i < 8; i++ ) + { + c[i] = y[i]; + } + } + else + { + /*------------------------------------------------------------* + * initialize r and m=2^r based on || y ||^2/8 + *------------------------------------------------------------*/ + + sphere = 0.0; + for ( i = 0; i < 8; i++ ) + { + sphere += (float) y[i] * (float) y[i]; + } + sphere *= 0.125; + r = 1; + sphere *= 0.25; /* not counted, merge 0.125*0.25 */ + while ( sphere > 11.0 ) + { + r++; + sphere *= 0.25; + } + /*------------------------------------------------------------* + * compute the coordinates of y in the RE8 basis + *------------------------------------------------------------*/ + + re8_coord( y, k_mod ); + + /*------------------------------------------------------------* + * compute m and the mask needed for modulo m (for Voronoi coding) + *------------------------------------------------------------*/ + + m = 1 << r; + mask = m - 1; /* 0x0..011...1 */ + + /*------------------------------------------------------------* + * find the minimal value of r (or equivalently of m) in 2 iterations + *------------------------------------------------------------*/ + + for ( iter = 0; iter < 2; iter++ ) + { + /*--------------------------------------------------------* + * compute v such that y is in m RE_8 +v (by Voronoi coding) + *--------------------------------------------------------*/ + + for ( i = 0; i < 8; i++ ) + { + k_tmp[i] = k_mod[i] & mask; + } + + re8_k2y( k_tmp, m, v ); + + /*--------------------------------------------------------* + * compute c = (y-v)/m + * (y is in RE8, c is also in RE8 by definition of v) + *--------------------------------------------------------*/ + + for ( i = 0; i < 8; i++ ) + { + c_tmp[i] = ( y[i] - v[i] ) / m; + /* M IS A FACTOR OF 2 */ + } + + /*--------------------------------------------------------* + * verify if c_tmp is in Q2, Q3 or Q4 + *--------------------------------------------------------*/ + + ka_tmp = re8_identify_absolute_leader( c_tmp ); + + /*--------------------------------------------------------* + * at this stage, n_tmp=2,3,4 or out = 100 -- n=0 is not possible + *--------------------------------------------------------*/ + + n_tmp = Da_nq[ka_tmp]; + + if ( n_tmp > 4 ) + { + /*--------------------------------------------------------* + * if c is not in Q2, Q3, or Q4 (i.e. n_tmp>4), use m = 2^(r+1) instead of 2^r + *--------------------------------------------------------*/ + + r++; + m = m << 1; + mask = ( ( mask << 1 ) + 1 ); /* mask = m-1; <- this is less complex */ + } + else + { + /*--------------------------------------------------------* + * c is in Q2, Q3, or Q4 -> the decomposition of y as y = m c + v is valid + * + * since Q2 is a subset of Q3, indicate n=3 instead of n=2 (this is because + * for n>4, n=n'+2r with n'=3 or 4, so n'=2 is not valid) + *--------------------------------------------------------*/ + + if ( n_tmp < 3 ) + { + n_tmp = 3; + } + + /*--------------------------------------------------------* + * save current values into ka, n, k and c + *--------------------------------------------------------*/ + + *ka = ka_tmp; + *n = n_tmp + 2 * r; + for ( i = 0; i < 8; i++ ) + { + k[i] = k_tmp[i]; + c[i] = c_tmp[i]; + } + + /*--------------------------------------------------------* + * try m = 2^(r-1) instead of 2^r to be sure that m is minimal + *--------------------------------------------------------*/ + + r--; + m = m >> 1; + mask = mask >> 1; + } + } + } + + return; +} + +/*-----------------------------------------------------------------------* + * re8_identify_absolute_leader() + * + * Identify the absolute leader related to y using a pre-defined table which + * specifies the codebooks Q0, Q2, Q3 and Q4 + -----------------------------------------------------------------------*/ + +/*! r: integer indicating if y if in Q0, Q2, Q3 or Q4 (or if y is an outlier) */ +static int16_t re8_identify_absolute_leader( + const int16_t y[] /* i : point in RE8 (8-dimensional integer vector) */ +) +{ + int16_t i, id, nb, pos, ka; + int32_t s, C[8], tmp; + + /*-----------------------------------------------------------------------* + * compute the RE8 shell number s = (y1^2+...+y8^2)/8 and C=(y1^2, ..., y8^2) + *-----------------------------------------------------------------------*/ + + s = 0; + for ( i = 0; i < 8; i++ ) + { + C[i] = y[i] * y[i]; + s += C[i]; + } + s >>= 3; + + /*-----------------------------------------------------------------------* + * compute the index 0 <= ka <= NB_LEADER+1 which identifies an absolute leader of Q0, Q2, Q3 or Q4 + * + * by default, ka=index of last element of the table (to indicate an outlier) + *-----------------------------------------------------------------------*/ + + ka = NB_LEADER + 1; + if ( s == 0 ) + { + /*-------------------------------------------------------------------* + * if s=0, y=0 i.e. y is in Q0 -> ka=index of element indicating Q0 + *-------------------------------------------------------------------*/ + + ka = NB_LEADER; + } + else + { + /*-------------------------------------------------------------------* + * the maximal value of s for y in Q0, Q2, Q3 or Q4 is NB_SPHERE + * if s> NB_SPHERE, y is an outlier (the value of ka is set correctly) + *-------------------------------------------------------------------*/ + + if ( s <= NB_SPHERE ) + { + /*---------------------------------------------------------------* + * compute the unique identifier id of the absolute leader related to y: + * s = (y1^4 + ... + y8^4)/8 + *---------------------------------------------------------------*/ + + tmp = 0; + for ( i = 0; i < 8; i++ ) + { + tmp += C[i] * C[i]; + } + id = (int16_t) ( tmp >> 3 ); + + /*---------------------------------------------------------------* + * search for id in table Da_id + * (containing all possible values of id if y is in Q2, Q3 or Q4) + * this search is focused based on the shell number s so that + * only the id's related to the shell of number s are checked + *---------------------------------------------------------------*/ + + nb = Da_nb[s - 1]; /* get the number of absolute leaders used on the shell of number s */ + pos = Da_pos[s - 1]; /* get the position of the first absolute leader of shell s in Da_id */ + for ( i = 0; i < nb; i++ ) + { + if ( id == Da_id[pos] ) + { + ka = pos; /* get ka */ + break; + } + pos++; + } + } + } + + return ( ka ); +} + +/*------------------------------------------------------------------------- + * re8_coord() + * + * COMPUTATION OF RE8 COORDINATES + -----------------------------------------------------------------------*/ + +static void re8_coord( + const int16_t *y, /* i : 8-dimensional point y[0..7] in RE8 */ + int16_t *k /* o : coordinates k[0..7] */ +) +{ + int16_t i, tmp, sum; + + /*---------------------------------------------------------------* + * compute k = y M^-1 + * M = 1/4 [ 1 ] + * [-1 2 ] + * [ | \ ] + * [-1 2 ] + * [ 5 -2 _ -2 4] + * + *---------------------------------------------------------------*/ + + k[7] = y[7]; + tmp = y[7]; + sum = 5 * y[7]; + for ( i = 6; i >= 1; i-- ) + { + /* apply factor 2/4 from M^-1 */ + k[i] = ( y[i] - tmp ) >> 1; + sum -= y[i]; + } + + /* apply factor 1/4 from M^-1 */ + k[0] = ( y[0] + sum ) >> 2; + + return; +} + + +/*------------------------------------------------------------------------- + * re8_k2y() + * + * Voronoi indexing (index decoding) k -> y + -----------------------------------------------------------------------*/ + +void re8_k2y( + const int16_t *k, /* i : Voronoi index k[0..7] */ + const int16_t m, /* i : Voronoi modulo (m = 2^r = 1<=2) */ + int16_t *y /* o : 8-dimensional point y[0..7] in RE8 */ +) +{ + int16_t i, lm, v[8], tmp, sum, *ptr1, *ptr2; + float z[8]; + + /*---------------------------------------------------------------* + * compute y = k M and z=(y-a)/m, where + * M = [4 ] + * [2 2 ] + * [| \ ] + * [2 2 ] + * [1 1 _ 1 1] + * a=(2,0,...,0) + *---------------------------------------------------------------*/ + + for ( i = 0; i < 8; i++ ) + { + y[i] = k[7]; + } + + sum = 0; + for ( i = 6; i >= 1; i-- ) + { + tmp = 2 * k[i]; + sum += tmp; + y[i] += tmp; + } + y[0] += ( 4 * k[0] + sum ); + + /* find log2(m) */ + for ( lm = 0; lm < 31; lm++ ) + { + if ( ( m >> lm ) & 0x0001 ) + { + break; + } + } + + z[0] = (float) ldexp( y[0] - 2, -lm ); + for ( i = 1; i < 8; i++ ) + { + z[i] = (float) ldexp( y[i], -lm ); + } + + /*---------------------------------------------------------------* + * find nearest neighbor v of z in infinite RE8 + *---------------------------------------------------------------*/ + + re8_PPV( z, v ); + + /*---------------------------------------------------------------* + * compute y -= m v + *---------------------------------------------------------------*/ + + ptr1 = y; + ptr2 = v; + for ( i = 0; i < 8; i++ ) + { + *ptr1++ -= m * *ptr2++; + } + + return; +} diff --git a/lib_com/realft.c b/lib_com/realft.c new file mode 100644 index 0000000000..0c0b8236c5 --- /dev/null +++ b/lib_com/realft.c @@ -0,0 +1,201 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include "cnst.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * four1() + * + * From "numerical recipes in C". + * Replace data by its DFT, if isign is input as 1; or replace data + * by nn times its inverse-DFT, if isign is input as -1. + * data is a complex array of length nn, input as a real + * array data[1...2nn]. nn must be an integer power of 2 + *-------------------------------------------------------------------*/ + +static void four1( + float *data, /* i/o: data array .......... */ + int16_t nn, /* i : length of data array */ + int16_t isign /* i : sign +1 or -1 */ +) +{ + int16_t n, mmax, m, j, istep, i; + float wtemp, wr, wpr, wpi, wi, theta; + float tempr, tempi; + + n = nn << 1; + j = 1; + + /* this is the bit-reversal section of the routine */ + for ( i = 1; i < n; i += 2 ) + { + if ( j > i ) + { + /* exchange the two complex numbers */ + SWAP( data[j], data[i] ); + SWAP( data[j + 1], data[i + 1] ); + } + m = n >> 1; + while ( m >= 2 && j > m ) + { + j -= m; + m >>= 1; + } + j += m; + } + mmax = 2; + /* here begins the Danielson-Lanczos section of the routine */ + /* Outer loop executed log2(nn) times */ + while ( n > mmax ) + { + istep = 2 * mmax; + /* initialization for the trigonometric recurrence */ + theta = (float) ( 6.28318530717959 / ( isign * mmax ) ); + wtemp = (float) ( sin( 0.5f * theta ) ); + wpr = -2.0f * wtemp * wtemp; + wpi = (float) sin( theta ); + wr = 1.0f; + wi = 0.0f; + /* here are the two nested loops */ + for ( m = 1; m < mmax; m += 2 ) + { + for ( i = m; i <= n; i += istep ) + { + /* this is Danielson-Lanczos formula */ + j = i + mmax; + tempr = wr * data[j] - wi * data[j + 1]; + tempi = wr * data[j + 1] + wi * data[j]; + data[j] = data[i] - tempr; + data[j + 1] = data[i + 1] - tempi; + data[i] += tempr; + data[i + 1] += tempi; + } + /* trigonometric recurrence */ + wr = ( wtemp = wr ) * wpr - wi * wpi + wr; + wi = wi * wpr + wtemp * wpi + wi; + } + mmax = istep; + } + + return; +} + +/*-------------------------------------------------------------------------* + * realft() + * + * from "numerical recipes in C". + * Calculates the Fourier Transform of a set of 2*n real-valued data points. + * Replaces this data (which is stored in the array data[1..2n]) by the + * positive frequancy half of its complex Fourier Transform. The real-valued + * first and last components of the complex transform are returned as elements + * data[1] and data[2] respectively. n must be a power of 2. This routine + * also calculates the inverse transform of a complex data array if it is the + * tranform of real data. (Results in this case must be multiplied by 1/n.) + *--------------------------------------------------------------------------*/ + +void realft( + float *data, /* i/o: data array */ + int16_t n, /* i : length of data array */ + int16_t isign /* i : sign +1 or -1 */ +) +{ + int16_t i, i1, i2, i3, i4, n2p3; + float c1 = 0.5, c2, h1r, h1i, h2r, h2i; + float wr, wi, wpr, wpi, wtemp, theta; + + theta = (float) ( EVS_PI / (float) n ); + if ( isign == 1 ) + { + /* the forward transorm here */ + c2 = -0.5; + four1( data, n, 1 ); + } + else + { + /* otherwise set up for the inverse transform */ + c2 = 0.5; + theta = -theta; + } + wtemp = (float) sin( 0.5f * theta ); + wpr = -2.0f * wtemp * wtemp; + wpi = (float) sin( theta ); + wr = 1.0f + wpr; + wi = wpi; + n2p3 = 2 * n + 3; + /* case i=1 done separately below */ + for ( i = 2; i <= n / 2; i++ ) + { + i4 = 1 + ( i3 = n2p3 - ( i2 = 1 + ( i1 = i + i - 1 ) ) ); + /* the two separate transforms are separated out of data */ + h1r = c1 * ( data[i1] + data[i3] ); + h1i = c1 * ( data[i2] - data[i4] ); + h2r = -c2 * ( data[i2] + data[i4] ); + h2i = c2 * ( data[i1] - data[i3] ); + /* here they are recombined to form the true transform + of the original real data */ + data[i1] = h1r + wr * h2r - wi * h2i; + data[i2] = h1i + wr * h2i + wi * h2r; + data[i3] = h1r - wr * h2r + wi * h2i; + data[i4] = -h1i + wr * h2i + wi * h2r; + /* the recurrence */ + wr = ( wtemp = wr ) * wpr - wi * wpi + wr; + wi = wi * wpr + wtemp * wpi + wi; + } + if ( isign == 1 ) + { + /* squeeze the first and the last data together to get them + all within the original data */ + data[1] = ( h1r = data[1] ) + data[2]; + data[2] = h1r - data[2]; + } + else + { + /* this is the inverse transform for the case isign=-1 */ + data[1] = c1 * ( ( h1r = data[1] ) + data[2] ); + data[2] = c1 * ( h1r - data[2] ); + four1( data, n, -1 ); + } + + return; +} diff --git a/lib_com/recovernorm.c b/lib_com/recovernorm.c new file mode 100644 index 0000000000..b5e35de268 --- /dev/null +++ b/lib_com/recovernorm.c @@ -0,0 +1,86 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * recovernorm() + * + * Recover reordered quantization indices and norms + *--------------------------------------------------------------------------*/ + +void recovernorm( + const int16_t *const idxbuf, /* i : reordered quantization indices */ + int16_t *ynrm, /* o : recovered quantization indices */ + int16_t *normqlg2, /* o : recovered quantized norms */ + const int16_t nb_sfm /* i : number of subbands */ +) +{ + int16_t i; + const int16_t *order = NULL; + + switch ( nb_sfm ) + { + case NB_SFM: + order = norm_order_48; + break; + case SFM_N_SWB: + order = norm_order_32; + break; + case SFM_N_WB: + order = norm_order_16; + break; + default: + order = norm_order_48; + break; + } + + for ( i = 0; i < nb_sfm; i++ ) + { + ynrm[order[i]] = idxbuf[i]; + normqlg2[order[i]] = dicnlg2[idxbuf[i]]; + } + + return; +} diff --git a/lib_com/reordvct.c b/lib_com/reordvct.c new file mode 100644 index 0000000000..a497f28e4a --- /dev/null +++ b/lib_com/reordvct.c @@ -0,0 +1,81 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * reordvct() + * + * Rearrange a vector in decreasing order + *--------------------------------------------------------------------------*/ + +void reordvct( + int16_t *y, /* i/o: vector to rearrange */ + const int16_t N, /* i : dimensions */ + int16_t *idx /* o : reordered vector index */ +) +{ + int16_t i, j, k, n, im, temp; + + n = N - 1; + for ( i = 0; i < n; i++ ) + { + im = i; + k = i + 1; + for ( j = k; j < N; j++ ) + { + if ( y[im] < y[j] ) + { + im = j; + } + } + + temp = y[i]; + y[i] = y[im]; + y[im] = temp; + j = idx[i]; + idx[i] = idx[im]; + idx[im] = j; + } + + return; +} diff --git a/lib_com/residu.c b/lib_com/residu.c new file mode 100644 index 0000000000..a897f70f25 --- /dev/null +++ b/lib_com/residu.c @@ -0,0 +1,102 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------* + * residu() + * + * Compute the LP residual by filtering the input speech through A(z) + *--------------------------------------------------------------------*/ + +void residu( + const float *a, /* i : LP filter coefficients */ + const int16_t m, /* i : order of LP filter */ + const float *x, /* i : input signal (usually speech) */ + float *y, /* o : output signal (usually residual) */ + const int16_t l /* i : size of filtering */ +) +{ + float s; + int16_t i, j; + + for ( i = 0; i < l; i++ ) + { + s = x[i]; + for ( j = 1; j <= m; j++ ) + { + s += a[j] * x[i - j]; + } + y[i] = s; + } + + return; +} + +/*--------------------------------------------------------------------* + * calc_residu() + * + * Compute the LP residual by filtering the input through A(z) in all subframes + *--------------------------------------------------------------------*/ + +void calc_residu( + const float *speech, /* i : weighted speech signal */ + float *res, /* o : residual signal */ + const float *p_Aq, /* i : quantized LP filter coefficients */ + const int16_t L_frame /* i : size of frame */ +) +{ + int16_t i_subfr; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + /* calculate the residual signal */ + residu( p_Aq, M, &speech[i_subfr], &res[i_subfr], L_SUBFR ); + + /* next subframe */ + p_Aq += ( M + 1 ); + } + + return; +} diff --git a/lib_com/rom_com.c b/lib_com/rom_com.c new file mode 100644 index 0000000000..30ae3c0a47 --- /dev/null +++ b/lib_com/rom_com.c @@ -0,0 +1,22380 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "basop_util.h" +#include "wmops.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * Table of bitrates + *----------------------------------------------------------------------------------*/ + +const int32_t brate_tbl[SIZE_BRATE_TBL] = +{ + ACELP_7k20, ACELP_8k00, ACELP_9k60, ACELP_13k20, ACELP_16k40, ACELP_24k40, + ACELP_32k, ACELP_48k, ACELP_64k, HQ_96k, HQ_128k +}; + +const int32_t brate_intermed_tbl[SIZE_BRATE_INTERMED_TBL] = +{ + ACELP_5k00, ACELP_6k15, ACELP_7k20, ACELP_8k00, ACELP_9k60, ACELP_11k60, ACELP_12k15, ACELP_12k85, ACELP_13k20, + ACELP_14k80, ACELP_16k40, ACELP_22k60, ACELP_24k40, ACELP_29k00, ACELP_29k20, ACELP_30k20, + ACELP_30k40, ACELP_32k, ACELP_48k, ACELP_64k, HQ_96k, HQ_128k +}; + +/*----------------------------------------------------------------------------------* + * Frame size and mode configuration tables + *----------------------------------------------------------------------------------*/ + +const FrameSizeParams FrameSizeConfig[FRAME_SIZE_NB] = +{ + /* bits, net bits, trans_bits, trans_mode, band_bits, band_mode_min, band_mode_max, reserved_bits */ + { FRAME_0, FRAME_0, 0, {0,0}, 0, 0, 0, 0}, /* 0 kbps ZERO_FRAME*/ + { FRAME_2_4, FRAME_2_4-2, 1, {1,1}, 1, NB, WB, 0}, /* 2.4kbps VBR(SID)*/ + { FRAME_7_2, FRAME_7_2-1, 0, {0,1}, 1, NB, WB, 0}, /* 7.2kbps VBR/CBR*/ + { FRAME_8, FRAME_8-1, 0, {0,1}, 1, NB, WB, 0}, /* 8 kbps VBR/CBR*/ + { FRAME_9_6, FRAME_9_6-2, 0, {0,1}, 2, NB, SWB, 0}, /* 9.6kbps CBR*/ + { FRAME_13_2, FRAME_13_2-2, 0, {0,1}, 2, NB, SWB, 0}, /* 13.2kbps CBR*/ + { FRAME_16_4, FRAME_16_4-3, 0, {0,1}, 2, NB, FB, 1}, /* 16.4kbps CBR*/ + { FRAME_24_4, FRAME_24_4-3, 0, {0,1}, 2, NB, FB, 1}, /* 24.4kbps CBR*/ + { FRAME_32, FRAME_32-3, 0, {0,1}, 2, WB, FB, 1}, /* 32 kbps CBR*/ + { FRAME_48, FRAME_48-3, 0, {0,1}, 2, WB, FB, 1}, /* 48 kbps CBR*/ + { FRAME_64, FRAME_64-3, 0, {0,1}, 2, WB, FB, 1}, /* 64 kbps CBR*/ + { FRAME_96, FRAME_96-3, 0, {0,1}, 2, WB, FB, 1}, /* 96 kbps CBR*/ + { FRAME_128, FRAME_128-3, 0, {0,1}, 2, WB, FB, 1} /*128 kbps CBR*/ +}; + + +/*----------------------------------------------------------------------------------* + * Conversion of ACELP signalling parameters (ACELP internal Fs, coder type, bandwidth, sharpening flag) to index + * (to be consulted with the decision matrix) + * + * - in order to retrieve the index, each section in this table starts with the bitrate + * - the second value in each section corresponds to the number of bits + * - the other values represent indices created by combining different parameters into a single value through the macro SIG2IND() + *----------------------------------------------------------------------------------*/ + +const int32_t acelp_sig_tbl[MAX_ACELP_SIG] = +{ + /* GENERIC UNVOICED VOICED TRANSITION AUDIO INACTIVE */ + ACELP_7k20, 4, + SIG2IND(GENERIC, NB, 1, 0), SIG2IND(UNVOICED, NB, 0, 0), SIG2IND(VOICED, NB, 1, 0), SIG2IND(TRANSITION, NB, 1, 0), SIG2IND(AUDIO, NB, 0, 0), SIG2IND(INACTIVE, NB, 0, 0), + SIG2IND(GENERIC, WB, 1, 0), SIG2IND(UNVOICED, WB, 0, 0), SIG2IND(VOICED, WB, 1, 0), SIG2IND(TRANSITION, WB, 1, 0), SIG2IND(AUDIO, WB, 0, 0), SIG2IND(INACTIVE, WB, 0, 0), + SIG2IND(GENERIC, NB, 0, 0), + SIG2IND(GENERIC, WB, 0, 0), + SIG2IND(LR_MDCT, NB, 0, 0), + + ACELP_8k00, 4, + SIG2IND(GENERIC, NB, 1, 0), SIG2IND(UNVOICED, NB, 0, 0), SIG2IND(VOICED, NB, 1, 0), SIG2IND(TRANSITION, NB, 1, 0), SIG2IND(AUDIO, NB, 0, 0), SIG2IND(INACTIVE, NB, 0, 0), + SIG2IND(GENERIC, WB, 1, 0), SIG2IND(UNVOICED, WB, 0, 0), SIG2IND(VOICED, WB, 1, 0), SIG2IND(TRANSITION, WB, 1, 0), SIG2IND(AUDIO, WB, 0, 0), SIG2IND(INACTIVE, WB, 0, 0), + SIG2IND(GENERIC, NB, 0, 0), + SIG2IND(GENERIC, WB, 0, 0), + SIG2IND(LR_MDCT, NB, 0, 0), + + ACELP_13k20, 5, + SIG2IND(GENERIC, NB, 1, 0), SIG2IND(VOICED, NB, 1, 0), SIG2IND(TRANSITION, NB, 0, 0), SIG2IND(AUDIO, NB, 0, 0), SIG2IND(INACTIVE, NB, 0, 0), + SIG2IND(GENERIC, WB, 1, 0), SIG2IND(VOICED, WB, 1, 0), SIG2IND(TRANSITION, WB, 0, 0), SIG2IND(AUDIO, WB, 0, 0), SIG2IND(INACTIVE, WB, 0, 0), + SIG2IND(GENERIC, SWB, 1, 0), SIG2IND(VOICED, SWB, 1, 0), SIG2IND(TRANSITION, SWB, 0, 0), SIG2IND(AUDIO, SWB, 0, 0), SIG2IND(INACTIVE, SWB, 0, 0), + SIG2IND(GENERIC, NB, 0, 0), SIG2IND(VOICED, NB, 0, 0), + SIG2IND(GENERIC, WB, 0, 0), SIG2IND(VOICED, WB, 0, 0), + SIG2IND(GENERIC, SWB, 0, 0), SIG2IND(VOICED, SWB, 0, 0), + SIG2IND(GENERIC, WB, 1, 1), SIG2IND(UNVOICED, WB, 0, 1), SIG2IND(VOICED, WB, 1, 1), SIG2IND(INACTIVE, WB, 0, 1), + SIG2IND(GENERIC, SWB, 1, 1), SIG2IND(UNVOICED, SWB, 0, 1), SIG2IND(VOICED, SWB, 1, 1), SIG2IND(INACTIVE, SWB, 0, 1), + SIG2IND(LR_MDCT, NB, 0, 0), + SIG2IND(LR_MDCT, WB, 0, 0), + SIG2IND(LR_MDCT, SWB, 0, 0), + + ACELP_32k, 4, + SIG2IND(GENERIC, WB, 1, 0), SIG2IND(TRANSITION, WB, 1, 0), SIG2IND(INACTIVE, WB, 0, 0), + SIG2IND(GENERIC, SWB, 1, 0), SIG2IND(TRANSITION, SWB, 1, 0), SIG2IND(INACTIVE, SWB, 0, 0), + SIG2IND(GENERIC, FB, 1, 0), SIG2IND(TRANSITION, FB, 1, 0), SIG2IND(INACTIVE, FB, 0, 0), + SIG2IND(GENERIC, WB, 0, 0), SIG2IND(TRANSITION, WB, 0, 0), + SIG2IND(GENERIC, SWB, 0, 0), SIG2IND(TRANSITION, SWB, 0, 0), + SIG2IND(GENERIC, FB, 0, 0), SIG2IND(TRANSITION, FB, 0, 0), + + ACELP_64k, 4, + SIG2IND(GENERIC, WB, 0, 0), SIG2IND(TRANSITION, WB, 0, 0), SIG2IND(INACTIVE, WB, 0, 0), + SIG2IND(GENERIC, SWB, 1, 0), SIG2IND(TRANSITION, SWB, 1, 0), SIG2IND(INACTIVE, SWB, 0, 0), + SIG2IND(GENERIC, FB, 1, 0), SIG2IND(TRANSITION, FB, 1, 0), SIG2IND(INACTIVE, FB, 0, 0), + SIG2IND(GENERIC, SWB, 0, 0), SIG2IND(TRANSITION, SWB, 0, 0), + SIG2IND(GENERIC, FB, 0, 0), SIG2IND(TRANSITION, FB, 0, 0), +}; + +/*----------------------------------------------------------------------------------* + * ACELP bit allocation tables + *----------------------------------------------------------------------------------*/ + +/* bit allocation table for end-frame LSF quantizer */ +const int16_t LSF_bits_tbl[] = +{ + /* IC UC VC GC TC AC */ + 22, 31, 24, 29, 24, 22, /* ACELP_5k00 */ + 22, 31, 24, 29, 24, 22, /* ACELP_6k15 */ + 22, 37, 31, 29, 31, 22, /* ACELP_7k20 */ + 22, 40, 36, 33, 34, 22, /* ACELP_8k00 */ + 27, 40, 34, 35, 37, 27, /* ACELP_9k60 */ + 31, 0, 37, 37, 40, 31, /* ACELP_11k60 */ + 31, 0, 39, 39, 41, 31, /* ACELP_12k15 */ + 31, 0, 38, 38, 40, 31, /* ACELP_12k85 */ + 31, 0, 38, 38, 40, 31, /* ACELP_13k20 */ + 31, 0, 37, 42, 42, 31, /* ACELP_14k80 */ + 31, 0, 43, 40, 40, 31, /* ACELP_16k40 */ + 31, 0, 42, 40, 40, 31, /* ACELP_22k60 */ + 31, 0, 46, 41, 41, 31, /* ACELP_24k40 */ + 41, 0, 0, 41, 41, 0, /* ACELP_29k00 */ + 41, 0, 0, 41, 41, 0, /* ACELP_29k20 */ + 41, 0, 0, 41, 41, 0, /* ACELP_30k20 */ + 41, 0, 0, 41, 41, 0, /* ACELP_30k40 */ + 41, 0, 0, 41, 41, 0, /* ACELP_32k */ + 41, 0, 0, 41, 41, 0, /* ACELP_48k */ + 41, 0, 0, 41, 41, 0, /* ACELP_64k */ +}; + +/* bit allocation table for mid-frame LSF quantizer */ +const int16_t mid_LSF_bits_tbl[] = +{ + /* IC UC VC GC TC AC */ + 2, 5, 1, 2, 2, 2, /* ACELP_5k00 */ + 2, 5, 1, 2, 2, 2, /* ACELP_6k15 */ + 2, 5, 4, 5, 5, 2, /* ACELP_7k20 */ + 2, 5, 4, 5, 5, 2, /* ACELP_8k00 */ + 2, 5, 4, 5, 5, 2, /* ACELP_9k60 */ + 2, 5, 4, 5, 5, 2, /* ACELP_11k60 */ + 2, 5, 5, 5, 5, 2, /* ACELP_12k15 */ + 2, 5, 5, 5, 5, 2, /* ACELP_12k85 */ + 2, 5, 5, 5, 5, 2, /* ACELP_13k20 */ + 4, 0, 5, 5, 5, 4, /* ACELP_14k80 */ + 4, 0, 5, 5, 5, 4, /* ACELP_16k40 */ + 5, 0, 5, 5, 5, 5, /* ACELP_22k60 */ + 5, 0, 5, 5, 5, 5, /* ACELP_24k40 */ + 5, 0, 0, 5, 5, 5, /* ACELP_29k00 */ + 5, 0, 0, 5, 5, 5, /* ACELP_29k20 */ + 5, 0, 0, 5, 5, 5, /* ACELP_30k20 */ + 5, 0, 0, 5, 5, 5, /* ACELP_30k40 */ + 5, 0, 0, 5, 5, 5, /* ACELP_32k */ + 5, 0, 0, 5, 5, 5, /* ACELP_48k */ + 5, 0, 0, 5, 5, 5, /* ACELP_64k */ +}; + + +/* bit allocation table for scaled innovation energy prediction */ +const int16_t Es_pred_bits_tbl[] = +{ +/* UC VC GC TC */ + 0, 0, 0, 4, /* ACELP_5k00 */ + 0, 0, 0, 4, /* ACELP_6k15 */ + 0, 0, 0, 4, /* ACELP_7k20 */ + 0, 0, 0, 4, /* ACELP_8k00 */ + 0, 5, 5, 5, /* ACELP_9k60 */ + 0, 5, 4, 4, /* ACELP_11k60 */ + 0, 5, 5, 5, /* ACELP_12k15 */ + 0, 5, 4, 5, /* ACELP_12k85 */ + 0, 5, 4, 4, /* ACELP_13k20 */ + 0, 5, 5, 5, /* ACELP_14k80 */ + 0, 5, 5, 5, /* ACELP_16k40 */ + 0, 5, 5, 5, /* ACELP_22k60 */ + 0, 5, 5, 5, /* ACELP_24k40 */ + 0, 0, 5, 5, /* ACELP_29k00 */ + 0, 0, 5, 5, /* ACELP_29k20 */ + 0, 0, 5, 5, /* ACELP_30k20 */ + 0, 0, 5, 5, /* ACELP_30k40 */ + 0, 0, 5, 5, /* ACELP_32k */ + 0, 0, 5, 5, /* ACELP_48k */ + 0, 0, 5, 5, /* ACELP_64k */ +}; + +/* bit allocation table for gain quantizer (ACELP@12.8kHz) */ +/* the 4 values allocated correspond to 4 subframes */ +const int16_t gain_bits_tbl[] = +{ +/* UC VC GC TC0_0 TC0_64 TC0_128 TC0_192 TC64 TC128 TC192 */ + 6,6,6,6, 7,6,6,6, 7,6,6,6, 5,5,5,5, 5,5,6,5, 5,3,6,6, 5,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,10, /* ACELP_5k00 */ + 6,6,6,6, 7,6,6,6, 7,6,6,6, 5,5,5,5, 5,5,6,5, 5,3,6,6, 5,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,10, /* ACELP_6k15 */ + 7,7,7,7, 7,6,6,6, 6,6,6,6, 5,5,5,5, 5,5,6,5, 5,3,6,6, 5,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,10, /* ACELP_7k20 */ + 7,7,7,7, 8,7,6,6, 8,7,6,6, 5,5,5,5, 5,6,5,5, 5,3,6,6, 5,3,3,6, 3,5,5,5, 3,3,6,6, 3,3,3,14, /* ACELP_8k00 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,10, /* ACELP_9k60 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,13, /* ACELP_11k60 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,14, /* ACELP_12k15 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,5, 3,3,3,14, /* ACELP_12k85 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,15, /* ACELP_13k20 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,15, /* ACELP_14k80 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,15, /* ACELP_16k40 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,14, /* ACELP_22k60 */ + 7,7,7,7, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,3,6,6, 6,3,3,6, 3,6,6,6, 3,3,6,6, 3,3,3,15, /* ACELP_24k40 */ +}; + + +/* bit allocation table for gain gain quantizer (ACELP@16kHz) */ +/* the 5 values allocated correspond to 5 subframes */ +const int16_t gain_bits_16kHz_tbl[] = +{ + /* IC GC TC0 TC64 TC128 TC192 TC256 */ + 0,0,0,0,0, 6,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0, 0, /* ACELP_8k00 */ + 0,0,0,0,0, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,15, /* ACELP_14k80 */ + 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,15, /* ACELP_22k60 */ + 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,16, /* ACELP_24k40 */ + 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,14, /* ACELP_29k00 */ + 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,14, /* ACELP_29k20 */ + 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,14, /* ACELP_30k20 */ + 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,14, /* ACELP_30k40 */ + 6,6,6,6,6, 6,6,6,6,6, 6,6,6,6,6, 3,6,6,6,6, 3,3,6,6,6, 3,3,3,6,6, 3,3,3,3,14, /* ACELP_32k */ + 12,12,12,12,12, 12,12,12,12,12, 12,12,12,12,12, 6,12,12,12,12, 6,6,12,12,12, 6,6,6,12,12, 6,6,6,6,12, /* ACELP_48k */ + 12,12,12,12,12, 12,12,12,12,12, 12,12,12,12,12, 6,12,12,12,12, 6,6,12,12,12, 6,6,6,12,12, 6,6,6,6,12 /* ACELP_64k */ +}; + +/* bit allocation table for adaptive codebook (pitch) (ACELP@12.8kHz) */ +/* the 4 values correspond to 4 subframes */ +const int16_t ACB_bits_tbl[] = +{ +/* UC VC GC TC0_0 TC0_64 TC0_128 TC0_192 TC64 TC128 TC192 */ + 0,0,0,0, 9,5,5,5, 8,5, 8,5, 6,5,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,8, /* ACELP_5k00 */ + 0,0,0,0, 9,5,5,5, 8,5, 8,5, 6,5,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,8, /* ACELP_6k15 */ + 0,0,0,0, 9,5,5,5, 8,5, 8,5, 6,5,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,8, /* ACELP_7k20 */ + 0,0,0,0, 10,5,5,5, 9,5, 8,5, 6,5,6,6, 0,7,6,6, 0,0,7,5, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_8k00 */ + 0,0,0,0, 10,5,5,5, 10,6, 9,6, 6,5,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_9k60 */ + 0,0,0,0, 10,5,5,5, 10,6, 9,6, 6,5,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_11k60 */ + 0,0,0,0, 10,5,5,5, 10,6, 9,6, 6,6,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_12k15 */ + 0,0,0,0, 10,5,5,5, 10,6, 9,6, 6,5,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_12k85 */ + 0,0,0,0, 10,5,5,5, 10,6, 9,6, 6,5,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_13k20 */ + 0,0,0,0, 10,5,5,5, 10,6,10,6, 6,6,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_14k80 */ + 0,0,0,0, 10,5,5,5, 10,6,10,6, 6,6,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_16k40 */ + 0,0,0,0, 10,5,5,5, 10,6,10,6, 6,6,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_22k60 */ + 0,0,0,0, 10,5,5,5, 10,6,10,6, 6,6,6,6, 0,7,6,6, 0,0,7,6, 0,0,0,7, 0,0,9,6, 0,0,5,9, 0,0,0,9, /* ACELP_24k40 */ +}; + +/* bit allocation table for adaptive codebook (pitch) (ACELP@16kHz) */ +/* the 5 values correspond to 5 subframes */ +const int16_t ACB_bits_16kHz_tbl[] = +{ + /* IC GC TC0 TC64 TC128 TC192 TC256 */ + 0,0, 0,0,0, 9,0, 0,0,0, 0,0, 0,0,0, 0,0, 0,0,0, 0,0, 0,0,0, 0,0,0, 0,0, 0,0,0,0, 0, /* ACELP_8k00 */ + 0,0, 0,0,0, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_14k80 */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_22k60 */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_24k40 */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_29k00 */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_29k20 */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_30k20 */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_30k40 */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_32k */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10, /* ACELP_48k */ + 10,6,10,6,6, 10,6,10,6,6, 6,8,10,6,6, 0,6,10,6,6, 0,0,10,6,6, 0,0,0,10,6, 0,0,0,0,10 /* ACELP_64k */ +}; + +/* bit allocation table for algebraic (fixed) codebook (innovation) (ACELP@12.8kHz) */ +/* the 4 values correspond to 4 subframes */ +const int16_t FCB_bits_tbl[] = +{ +/* UC VC GC TC0_0 TC0_64 TC0_128 TC0_192 TC64 TC128 TC192 */ + 8,8,8,8, 12,12,12,20, 7, 7, 0, 7, 12, 7,12,12, 12,12, 7,12, 12,12,12,12, 12,12,20,12, 12,12,12,12, 12,12,12,12, 12,12,12,20, /* ACELP_5k00 */ + 10,10,10,10, 12,12,12,20, 12, 7,12, 7, 12, 7,12,12, 12,12, 7,12, 12,12,12,12, 12,12,20,12, 12,12,12,12, 12,12,12,12, 12,12,12,20, /* ACELP_6k15 */ + 13,13,13,13, 12,12,12,20, 12,12,12,20, 12, 7,12,12, 12,12, 7,12, 12,12,12,12, 12,12,20,12, 12,12,12,12, 12,12,12,12, 12,12,12,20, /* ACELP_7k20 */ + 13,13,13,13, 12,20,12,20, 12,20,12,20, 20,12,12,12, 20,12,12,12, 20,12,20,12, 20,12,20,20, 20,12,12,20, 20,12,20,12, 12,20,12,20, /* ACELP_8k00 */ + 13,13,13,13, 20,28,20,28, 20,20,20,28, 20,20,20,20, 20,20,20,20, 20,20,28,20, 20,28,20,28, 20,28,20,20, 20,20,20,28, 20,28,20,28, /* ACELP_9k60 */ + 0, 0, 0, 0, 28,36,28,36, 28,28,28,36, 28,28,28,28, 28,28,28,28, 28,28,36,28, 28,36,28,36, 28,36,28,28, 28,28,28,36, 28,36,28,36, /* ACELP_11k60 */ + 0, 0, 0, 0, 28,36,36,36, 28,36,28,36, 36,28,28,28, 36,28,28,28, 36,28,36,28, 36,36,28,43, 28,36,28,36, 28,36,28,36, 28,36,36,36, /* ACELP_12k15 */ + 0, 0, 0, 0, 36,36,36,43, 36,36,36,36, 36,36,28,36, 36,28,36,36, 36,36,36,36, 36,36,43,43, 36,36,36,36, 36,36,36,43, 36,36,36,43, /* ACELP_12k85 */ + 0, 0, 0, 0, 36,43,36,43, 36,36,36,43, 36,36,36,36, 36,36,36,36, 36,36,43,36, 36,43,43,43, 36,43,36,36, 43,36,43,36, 36,43,36,43, /* ACELP_13k20 */ + 0, 0, 0, 0, 43,50,43,50, 43,43,43,43, 43,43,43,43, 43,43,43,43, 43,43,50,43, 43,50,50,50, 43,43,43,50, 50,43,50,43, 43,50,43,50, /* ACELP_14k80 */ + 0, 0, 0, 0, 50,56,50,56, 50,50,50,56, 56,50,50,50, 56,50,50,50, 56,50,56,56, 56,56,56,56, 50,56,50,56, 50,56,56,56, 50,56,56,56, /* ACELP_16k40 */ + 0, 0, 0, 0, 83,83,83,87, 78,83,83,83, 83,78,83,83, 83,78,83,87, 83,87,83,87, 83,87,87,92, 87,83,87,83, 87,83,87,87, 83,87,87,87, /* ACELP_22k60 */ + 0, 0, 0, 0, 92,92,92,92, 87,92,92,92, 92,87,92,92, 92,87,92,92, 92,92,92,92, 92,92,92,92, 92,92,92,92, 92,92,92,92, 92,92,92,92, /* ACELP_24k40 */ +}; + +/* bit allocation table for algebraic (fixed) codebook (innovation) (ACELP@16kHz) */ +/* the 5 values correspond to 5 subframes */ +const int16_t FCB_bits_16kHz_tbl[] = +{ + /* IC GC TC0 TC64 TC128 TC192 TC256 */ + 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_8k00 */ + 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_14k80 */ + 0, 0, 0, 0, 0, 62,56,56,56,62, 62,56,56,56,56, 56,56,56,56,73, 62,56,62,62,62, 56,62,62,62,73, 62,62,62,62,68, /* ACELP_22k60 */ + 0, 0, 0, 0, 0, 68,68,68,73,73, 68,68,68,68,73, 68,73,68,73,73, 73,73,73,73,73, 73,78,73,73,78, 73,78,73,73,78, /* ACELP_24k40 */ + 12,12,12,12,12, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, /* ACELP_29k00 */ + 12,12,12,12,12, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, 36,28,28,36,36, /* ACELP_29k20 */ + 12,12,12,12,12, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, /* ACELP_30k20 */ + 12,12,12,12,12, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, /* ACELP_30k40 */ + 12,12,12,12,12, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, /* ACELP_32k */ + 12,12,12,12,12, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, /* ACELP_48k */ + 12,12,12,12,12, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36, 36,36,36,36,36 /* ACELP_64k */ +}; + +/* bit allocation table for AVQ bits in active segments (ACELP@16kHz) */ +const int16_t AVQ_bits_16kHz_tbl[] = +{ + /* IC GC TC0 TC64 TC128 TC192 TC256 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_8k00 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_14k80 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_22k60 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_24k40 */ + 78, 78, 78, 78, 78, 48, 48, 48, 48, 49, 48, 49, 49, 48, 49, 50, 50, 51, 52, 52, 50, 54, 53, 54, 54, 55, 55, 55, 55, 54, 52, 56, 56, 56, 56, /* ACELP_29k00 */ + 79, 79, 79, 79, 78, 49, 49, 49, 49, 49, 50, 49, 49, 50, 49, 52, 52, 51, 52, 52, 54, 54, 53, 54, 54, 56, 55, 55, 56, 56, 56, 56, 56, 56, 56, /* ACELP_29k20 */ + 78, 78, 78, 78, 78, 50, 50, 50, 50, 49, 51, 50, 50, 50, 50, 53, 53, 53, 52, 52, 55, 55, 55, 54, 54, 57, 57, 56, 56, 56, 57, 57, 57, 57, 56, /* ACELP_30k20 */ + 79, 79, 79, 79, 78, 51, 51, 51, 50, 50, 51, 51, 51, 51, 51, 54, 54, 53, 53, 53, 56, 56, 56, 55, 54, 58, 57, 57, 57, 57, 58, 58, 58, 57, 57, /* ACELP_30k40 */ + 86, 85, 85, 85, 85, 57, 57, 57, 57, 57, 58, 58, 57, 57, 57, 60, 60, 60, 60, 59, 62, 62, 62, 62, 61, 64, 64, 64, 63, 63, 64, 64, 64, 64, 64, /* ACELP_32k */ + 143,142,142,142,142, 116,115,115,115,115, 116,116,115,115,115, 119,119,118,118,118, 121,121,121,121,121, 124,124,123,123,123, 126,126,126,126,126, /* ACELP_48k */ + 207,206,206,206,206, 180,179,179,179,179, 180,180,179,179,179, 183,183,182,182,182, 185,185,185,185,185, 188,188,187,187,187, 190,190,190,190,190 /* ACELP_64k */ +}; + +/* bit allocation table for reserved bits (ACELP@12.8kHz) */ +const int16_t reserved_bits_tbl[] = +{ +/* UC VC GC TC0_0 TC0_64 TC0_128 TC0_192 TC64 TC128 TC192 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_5k00 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ACELP_6k15 */ + 1, 0, 0, 0, 0, 2, 4, 0, 3, 0, /* ACELP_7k20 */ + 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* ACELP_8k00 */ + 46, 0, 0, 0, 1, 2, 4, 1, 4, 0, /* ACELP_9k60 */ + 0, 0, 0, 0, 1, 3, 6, 2, 6, 0, /* ACELP_11k60 */ + 0, 0, 0, 0, 2, 4, 0, 3, 7, 0, /* ACELP_12k15 */ + 0, 0, 0, 0, 1, 3, 0, 2, 0, 0, /* ACELP_12k85 */ + 0, 0, 0, 0, 1, 4, 1, 3, 0, 0, /* ACELP_13k20 */ + 0, 0, 0, 0, 2, 5, 2, 4, 1, 1, /* ACELP_14k80 */ + 0, 0, 0, 0, 2, 0, 5, 5, 3, 3, /* ACELP_16k40 */ + 0, 0, 2, 2, 0, 1, 3, 0, 0, 1, /* ACELP_22k60 */ + 0, 0, 1, 1, 3, 8, 19, 7, 11, 11, /* ACELP_24k40 */ +}; + +/* NRG mode */ +const uint8_t ACELP_NRG_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX+RF_MODE_MAX] = +{ + {{0,0,1,1,0,0,0,0},{2,2,1,1,0,0,0,0}}, + {{1,1,1,1,0,0,0,0},{1,1,1,1,1,1,1,0}}, +}; + +/* NRG bits : (0/2/3 bits) */ +const uint8_t ACELP_NRG_BITS[3] = { 0, 3, 4 }; + +/* LTP MODE*/ +const uint8_t ACELP_LTP_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX+RF_MODE_MAX] = +{ + {{0,0,1,2,0,0,0,0},{0,0,1,2,0,0,0,0}}, + {{4,4,3,4,0,0,0,0},{4,4,3,4,8,0,9,0}}, +}; + +/* LTP bits */ +const uint8_t ACELP_LTP_BITS_SFR[8+RF_MODE_MAX][5] = +{ + {0,0,0,0,0}, + {8,4,4,4,4}, + {8,5,8,5,5}, + {9,6,6,6,6}, + {9,6,9,6,6}, + {8,5,5,5,5}, + {8,5,8,5,5}, + {8,0,0,0,0}, + {8,5,5,5,5}, /* All-pred mode in RF, rf_frame_type = 0 */ + {8,4,4,4,0}, /* Gen-pred mode in RF, rf_frame_type = 2 */ +}; + +/* LTF modes (0 - LOW_PASS (LP filtering), 1 - FULL_BAND (no filtering), 2 - NORMAL_OPERATION (adaptive)) */ +/* Mode 2 ACELP: INACTIVE,UNVOICED,VOICED,GENERIC */ +const uint8_t ACELP_LTF_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX+RF_MODE_MAX] = +{ + {{1,1,1,0,0,0,0,0},{1,1,1,0,0,0,0,0}}, + {{0,0,2,0,0,0,0,0},{0,0,2,0,1,1,1,0}}, +}; + +/* LTF bits */ +const uint8_t ACELP_LTF_BITS[4] = { 0, 0, 4, 0 }; + +/* GAINS ELEMENT */ +/* 5 modes: (EVS: 5b/subframe), (AMRWB: 7b/subframe),(AMRWB: 6b/subframe),(UC: 5b/subframe) */ +const uint8_t ACELP_GAINS_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX+RF_MODE_MAX] = +{ + {{6,6,1,1,0,0,0,0},{7,7,1,1,0,0,0,0}}, + {{2,2,3,3,0,0,0,0},{2,2,3,3,3,2,1,0}}, +}; + +/* gains bits */ +const uint8_t ACELP_GAINS_BITS[10] = +{ + 0, /* skip sub-frame wise gain coding*/ + 5, + 6, + 7, + 6, + 7, + 6, /* UC */ + 7, /* GUNVOICED UV (5b ICB/2b Gaussian) */ + 4, /* GNELP UV */ + 5 /* GNELP UV */ +}; + +/* BPF modes (0 - no filtering, 1 - filtering, 2 - adaptive) */ +const uint8_t ACELP_BPF_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX+RF_MODE_MAX] = +{ + {{1,1,1,1,0,0,0,0},{1,1,1,1,0,0,0,0}}, + {{1,1,2,2,0,0,0,0},{1,1,2,2,1,1,1,1}}, +}; + +/* BPF bits */ +const uint8_t ACELP_BPF_BITS[3] = { 0, 0, 2 }; + + +/*----------------------------------------------------------------------------------* + * Perceptual critical bands + *----------------------------------------------------------------------------------*/ + +const float crit_bands[] = +{ + 100.0f, 200.0f, 300.0f, 400.0f, 510.0f, 630.0f, 770.0f, 920.0f, 1080.0f, 1270.0f, 1480.0f, + 1720.0f, 2000.0f, 2320.0f, 2700.0f, 3150.0f, 3700.0f, 4400.0f, 5300.0f, 6350.0f, 7700.0f, + 9500.0f, 12000.0f, 15500.0f, 40000.0f +}; + +const float crit_bins_corr[CRIT_NOIS_BAND] = +{ + 0.9f, 0.9f, 0.85f, 0.8f, 0.775f, 0.75f, 0.725f, 0.7f, 0.675f, 0.65f, 0.625f, + 0.60f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f +}; + +const int16_t crit_bins[CRIT_NOIS_BAND] = +{ + 4, 4, 4, 4, 4, 5, 6, 6, 6, 8, 8, 10, 11, 13, 15, 18, 22, 16, 16, 20, 20, 20, 16 +}; + +const float crit_bands_loc[CRIT_NOIS_BAND] = +{ + 100.0f, 200.0f, 300.0f, 400.0f, 510.0f, 630.0f, 770.0f, 920.0f, 1080.0f, 1270.0f, 1480.0f, + 1720.0f, 2000.0f, 2320.0f, 2700.0f, 3150.0f, 3700.0f, 4100.0f, 4500.0f, 5000.0f, 5500.0f, 6000.0f, 6375.0f +}; + +const float inv_tbl[130] = +{ + 0.0f, /* unused */ + 1.0000000000f, 0.5000000000f, 0.3333333333f, 0.2500000000f, + 0.2000000000f, 0.1666666667f, 0.1428571429f, 0.1250000000f, + 0.1111111111f, 0.1000000000f, 0.0909090909f, 0.0833333333f, + 0.0769230769f, 0.0714285714f, 0.0666666667f, 0.0625000000f, + 0.0588235294f, 0.0555555556f, 0.0526315789f, 0.0500000000f, + 0.0476190476f, 0.0454545455f, 0.0434782609f, 0.0416666667f, + 0.0400000000f, 0.0384615385f, 0.0370370370f, 0.0357142857f, + 0.0344827586f, 0.0333333333f, 0.0322580645f, 0.0312500000f, + 0.0303030303f, 0.0294117647f, 0.0285714286f, 0.0277777778f, + 0.0270270270f, 0.0263157895f, 0.0256410256f, 0.0250000000f, + 0.0243902439f, 0.0238095238f, 0.0232558140f, 0.0227272727f, + 0.0222222222f, 0.0217391304f, 0.0212765957f, 0.0208333333f, + 0.0204081633f, 0.0200000000f, 0.0196078431f, 0.0192307692f, + 0.0188679245f, 0.0185185185f, 0.0181818182f, 0.0178571429f, + 0.0175438596f, 0.0172413793f, 0.0169491525f, 0.0166666667f, + 0.0163934426f, 0.0161290323f, 0.0158730159f, 0.0156250000f, + 0.0153846154f, 0.0151515152f, 0.0149253731f, 0.0147058824f, + 0.0144927536f, 0.0142857143f, 0.0140845070f, 0.0138888889f, + 0.0136986301f, 0.0135135135f, 0.0133333333f, 0.0131578947f, + 0.0129870130f, 0.0128205128f, 0.0126582278f, 0.0125000000f, + 0.0123456790f, 0.0121951220f, 0.0120481928f, 0.0119047619f, + 0.0117647059f, 0.0116279070f, 0.0114942529f, 0.0113636364f, + 0.0112359551f, 0.0111111111f, 0.0109890110f, 0.0108695652f, + 0.0107526882f, 0.0106382979f, 0.0105263158f, 0.0104166667f, + 0.0103092784f, 0.0102040816f, 0.0101010101f, 0.0100000000f, + 0.0099009901f, 0.0098039216f, 0.0097087379f, 0.0096153846f, + 0.0095238095f, 0.0094339623f, 0.0093457944f, 0.0092592593f, + 0.0091743119f, 0.0090909091f, 0.0090090090f, 0.0089285714f, + 0.0088495575f, 0.0087719298f, 0.0086956522f, 0.0086206897f, + 0.0085470085f, 0.0084745763f, 0.0084033613f, 0.0083333333f, + 0.0082644628f, 0.0081967213f, 0.0081300813f, 0.0080645161f, + 0.0080000000f, 0.0079365079f, 0.0078740157f, 0.0078125000f, + 0.0077519380f /* last val = 1/129 */ +}; + + +/*----------------------------------------------------------------------------------* + * LD music post-filter + *----------------------------------------------------------------------------------*/ + +const float mfreq_loc_LD[] = { 100.0f, 200.0f, 300.0f, 400.0f, 510.0f, 630.0f, 770.0f, 920.0f, 1080.0f, 1270.0f, 1480.0f, + 1720.0f, 2000.0f, 2320.0f, 2700.0f, 3150.0f, 3700.0f, 4400.0f, 5300.0f, (6400.0f-BIN_16kdct) + }; + +const int16_t mfreq_bindiv_LD[] = {10, 10, 10, 10, 11, 12, 14, 15, 16, 19, 21, 24, 28, 32, 38, 45, 55, 70, 90, 110}; +const float sc_qnoise[] = {0.1f,0.1f,0.1f,0.1f,0.1f,0.1f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.06667f,0.06667f,0.06667f,0.06667f,0.06667f}; + +const float post_dct_wind[OFFSET2] = +{ + 1.000000f, 0.999933f, 0.999731f, 0.999395f, 0.998924f, 0.998319f, 0.997580f, 0.996707f, + 0.995700f, 0.994560f, 0.993287f, 0.991881f, 0.990343f, 0.988672f, 0.986870f, 0.984938f, + 0.982874f, 0.980681f, 0.978358f, 0.975907f, 0.973328f, 0.970621f, 0.967787f, 0.964828f, + 0.961743f, 0.958535f, 0.955202f, 0.951748f, 0.948172f, 0.944475f, 0.940658f, 0.936723f, + 0.932671f, 0.928501f, 0.924217f, 0.919819f, 0.915307f, 0.910684f, 0.905950f, 0.901107f, + 0.896156f, 0.891098f, 0.885935f, 0.880669f, 0.875300f, 0.869829f, 0.864260f, 0.858592f, + 0.852828f, 0.846968f, 0.841016f, 0.834971f, 0.828837f, 0.822614f, 0.816304f, 0.809909f, + 0.803431f, 0.796871f, 0.790231f, 0.783513f, 0.776719f, 0.769850f, 0.762908f, 0.755896f, + 0.748815f, 0.741667f, 0.734454f, 0.727178f, 0.719841f, 0.712444f, 0.704991f, 0.697482f, + 0.689920f, 0.682307f, 0.674645f, 0.666936f, 0.659182f, 0.651385f, 0.643547f, 0.635671f, + 0.627758f, 0.619811f, 0.611832f, 0.603822f, 0.595785f, 0.587721f, 0.579635f, 0.571526f, + 0.563399f, 0.555254f, 0.547095f, 0.538923f, 0.530740f, 0.522549f, 0.514353f, 0.506152f, + 0.497949f, 0.489747f, 0.481548f, 0.473354f, 0.465167f, 0.456990f, 0.448824f, 0.440671f, + 0.432535f, 0.424417f, 0.416319f, 0.408244f, 0.400193f, 0.392169f, 0.384175f, 0.376211f, + 0.368281f, 0.360386f, 0.352529f, 0.344712f, 0.336936f, 0.329204f, 0.321518f, 0.313880f, + 0.306293f, 0.298757f, 0.291276f, 0.283850f, 0.276483f, 0.269176f, 0.261931f, 0.254751f, + 0.247636f, 0.240589f, 0.233612f, 0.226707f, 0.219875f, 0.213118f, 0.206439f, 0.199839f, + 0.193320f, 0.186883f, 0.180530f, 0.174264f, 0.168085f, 0.161995f, 0.155996f, 0.150090f, + 0.144278f, 0.138562f, 0.132943f, 0.127423f, 0.122003f, 0.116685f, 0.111470f, 0.106360f, + 0.101355f, 0.096458f, 0.091669f, 0.086991f, 0.082423f, 0.077968f, 0.073626f, 0.069399f, + 0.065289f, 0.061295f, 0.057419f, 0.053662f, 0.050025f, 0.046510f, 0.043116f, 0.039846f, + 0.036699f, 0.033677f, 0.030780f, 0.028010f, 0.025367f, 0.022851f, 0.020464f, 0.018206f, + 0.016078f, 0.014080f, 0.012212f, 0.010476f, 0.008872f, 0.007400f, 0.006060f, 0.004853f, + 0.003780f, 0.002840f, 0.002034f, 0.001362f, 0.000824f, 0.000420f, 0.000151f, 0.000017f +}; + +const float MAX_SNR_SNR1_tab[MBANDS_GN_LD] = { 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.02631627f, 1.043478f, 1.043478f, 1.043478f, 1.043478f}; +const float INV_MAX_SNR_tab[MBANDS_GN_LD] = { .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .043478f, .043478f, .043478f, .043478f}; + +const float wind_sss[LEN_WIN_SSS] = /* window for subsampling */ +{ + 0.080000f, 0.080183f, 0.080730f, 0.081642f, 0.082918f, 0.084557f, 0.086558f, 0.088918f, + 0.091636f, 0.094711f, 0.098139f, 0.101917f, 0.106043f, 0.110514f, 0.115326f, 0.120475f, + 0.125957f, 0.131767f, 0.137902f, 0.144356f, 0.151124f, 0.158200f, 0.165580f, 0.173257f, + 0.181225f, 0.189478f, 0.198009f, 0.206811f, 0.215878f, 0.225203f, 0.234777f, 0.244594f, + 0.254645f, 0.264922f, 0.275418f, 0.286124f, 0.297031f, 0.308132f, 0.319416f, 0.330876f, + 0.342501f, 0.354284f, 0.366213f, 0.378281f, 0.390477f, 0.402792f, 0.415215f, 0.427738f, + 0.440350f, 0.453041f, 0.465801f, 0.478620f, 0.491487f, 0.504393f, 0.517328f, 0.530280f, + 0.543240f, 0.556198f, 0.569142f, 0.582064f, 0.594952f, 0.607796f, 0.620587f, 0.633314f, + 0.645967f, 0.658535f, 0.671009f, 0.683380f, 0.695637f, 0.707770f, 0.719769f, 0.731627f, + 0.743332f, 0.754875f, 0.766248f, 0.777442f, 0.788447f, 0.799255f, 0.809857f, 0.820244f, + 0.830410f, 0.840344f, 0.850041f, 0.859491f, 0.868688f, 0.877623f, 0.886291f, 0.894684f, + 0.902795f, 0.910618f, 0.918147f, 0.925376f, 0.932299f, 0.938911f, 0.945205f, 0.951179f, + 0.956825f, 0.962141f, 0.967122f, 0.971764f, 0.976063f, 0.980016f, 0.983619f, 0.986871f, + 0.989767f, 0.992307f, 0.994488f, 0.996307f, 0.997765f, 0.998859f, 0.999589f, 0.999954f, + 1.000000f, 0.979530f, 0.918958f, 0.820763f, 0.688967f, 0.528964f, 0.347305f, 0.151428f +}; + +/*----------------------------------------------------------------------------------* + * Low-pass FIR filter for low-frequency post-filtering @ 8kHz + * fir1(240,(3900/32000),hanning(241))*5 + *----------------------------------------------------------------------------------*/ + +const float filter5_39s320_120[121] = +{ + 0.609388f, 0.594507f, 0.551181f, 0.483219f, 0.396518f, 0.298448f, 0.197086f, 0.100396f, + 0.015442f, -0.052273f, -0.099277f, -0.124358f, -0.128542f, -0.114820f, -0.087682f, -0.052507f, + -0.014899f, 0.019957f, 0.047847f, 0.065924f, 0.072906f, 0.069076f, 0.056094f, 0.036651f, + 0.014026f, -0.008391f, -0.027559f, -0.041148f, -0.047793f, -0.047188f, -0.040043f, -0.027903f, + -0.012866f, 0.002740f, 0.016701f, 0.027204f, 0.033059f, 0.033817f, 0.029768f, 0.021853f, + 0.011477f, 0.000283f, -0.010097f, -0.018267f, -0.023248f, -0.024581f, -0.022354f, -0.017150f, + -0.009927f, -0.001855f, 0.005864f, 0.012168f, 0.016275f, 0.017775f, 0.016654f, 0.013275f, + 0.008291f, 0.002530f, -0.003131f, -0.007899f, -0.011171f, -0.012604f, -0.012143f, -0.010011f, + -0.006645f, -0.002628f, 0.001417f, 0.004913f, 0.007412f, 0.008646f, 0.008551f, 0.007261f, + 0.005067f, 0.002364f, -0.000416f, -0.002869f, -0.004678f, -0.005647f, -0.005724f, -0.004986f, + -0.003623f, -0.001896f, -0.000090f, 0.001528f, 0.002746f, 0.003436f, 0.003559f, 0.003165f, + 0.002373f, 0.001348f, 0.000266f, -0.000708f, -0.001448f, -0.001877f, -0.001978f, -0.001782f, + -0.001364f, -0.000818f, -0.000247f, 0.000261f, 0.000641f, 0.000858f, 0.000909f, 0.000817f, + 0.000625f, 0.000384f, 0.000142f, -0.000062f, -0.000203f, -0.000274f, -0.000280f, -0.000239f, + -0.000172f, -0.000099f, -0.000038f, 0.000004f, 0.000024f, 0.000027f, 0.000019f, 0.000009f, + 0.000002f +}; + +/*----------------------------------------------------------------------------------* + * LP analysis windows + *----------------------------------------------------------------------------------*/ + +/* LP analysis window (length of the window is 25 ms which is 320 samples at 12.8kHz */ +const float LP_assym_window[L_LP] = +{ + 0.080000f, 0.080065f, 0.080258f, 0.080581f, 0.081033f, 0.081613f, 0.082323f, 0.083160f, + 0.084126f, 0.085220f, 0.086442f, 0.087791f, 0.089267f, 0.090869f, 0.092598f, 0.094452f, + 0.096431f, 0.098535f, 0.100762f, 0.103113f, 0.105587f, 0.108182f, 0.110899f, 0.113736f, + 0.116693f, 0.119769f, 0.122963f, 0.126274f, 0.129701f, 0.133243f, 0.136899f, 0.140668f, + 0.144550f, 0.148543f, 0.152645f, 0.156856f, 0.161175f, 0.165600f, 0.170130f, 0.174764f, + 0.179501f, 0.184339f, 0.189276f, 0.194313f, 0.199446f, 0.204674f, 0.209997f, 0.215413f, + 0.220919f, 0.226516f, 0.232200f, 0.237971f, 0.243826f, 0.249765f, 0.255785f, 0.261884f, + 0.268062f, 0.274317f, 0.280645f, 0.287047f, 0.293520f, 0.300062f, 0.306671f, 0.313345f, + 0.320084f, 0.326884f, 0.333744f, 0.340662f, 0.347635f, 0.354663f, 0.361743f, 0.368873f, + 0.376051f, 0.383274f, 0.390542f, 0.397852f, 0.405202f, 0.412590f, 0.420013f, 0.427470f, + 0.434959f, 0.442477f, 0.450022f, 0.457593f, 0.465187f, 0.472802f, 0.480436f, 0.488086f, + 0.495751f, 0.503429f, 0.511116f, 0.518812f, 0.526514f, 0.534220f, 0.541927f, 0.549634f, + 0.557337f, 0.565037f, 0.572729f, 0.580412f, 0.588083f, 0.595741f, 0.603384f, 0.611008f, + 0.618613f, 0.626195f, 0.633754f, 0.641286f, 0.648790f, 0.656263f, 0.663703f, 0.671109f, + 0.678478f, 0.685808f, 0.693097f, 0.700343f, 0.707544f, 0.714698f, 0.721803f, 0.728857f, + 0.735858f, 0.742804f, 0.749694f, 0.756524f, 0.763293f, 0.770000f, 0.776642f, 0.783218f, + 0.789725f, 0.796163f, 0.802528f, 0.808820f, 0.815036f, 0.821175f, 0.827236f, 0.833215f, + 0.839112f, 0.844925f, 0.850653f, 0.856294f, 0.861845f, 0.867306f, 0.872676f, 0.877952f, + 0.883133f, 0.888218f, 0.893205f, 0.898093f, 0.902880f, 0.907566f, 0.912148f, 0.916626f, + 0.920998f, 0.925263f, 0.929420f, 0.933468f, 0.937405f, 0.941230f, 0.944943f, 0.948543f, + 0.952027f, 0.955396f, 0.958649f, 0.961784f, 0.964800f, 0.967697f, 0.970474f, 0.973131f, + 0.975665f, 0.978078f, 0.980367f, 0.982533f, 0.984574f, 0.986491f, 0.988282f, 0.989948f, + 0.991487f, 0.992900f, 0.994185f, 0.995343f, 0.996373f, 0.997275f, 0.998048f, 0.998693f, + 0.999209f, 0.999597f, 0.999855f, 0.999984f, 0.999967f, 0.999705f, 0.999180f, 0.998393f, + 0.997344f, 0.996035f, 0.994465f, 0.992636f, 0.990548f, 0.988203f, 0.985603f, 0.982748f, + 0.979641f, 0.976282f, 0.972675f, 0.968820f, 0.964721f, 0.960380f, 0.955798f, 0.950980f, + 0.945926f, 0.940641f, 0.935128f, 0.929389f, 0.923427f, 0.917247f, 0.910852f, 0.904245f, + 0.897430f, 0.890410f, 0.883191f, 0.875777f, 0.868170f, 0.860376f, 0.852400f, 0.844245f, + 0.835916f, 0.827419f, 0.818757f, 0.809936f, 0.800962f, 0.791838f, 0.782571f, 0.773165f, + 0.763626f, 0.753960f, 0.744171f, 0.734266f, 0.724250f, 0.714129f, 0.703908f, 0.693594f, + 0.683193f, 0.672709f, 0.662150f, 0.651521f, 0.640828f, 0.630078f, 0.619277f, 0.608430f, + 0.597544f, 0.586626f, 0.575680f, 0.564715f, 0.553735f, 0.542747f, 0.531758f, 0.520774f, + 0.509800f, 0.498844f, 0.487911f, 0.477008f, 0.466141f, 0.455316f, 0.444540f, 0.433818f, + 0.423156f, 0.412561f, 0.402039f, 0.391596f, 0.381237f, 0.370969f, 0.360798f, 0.350728f, + 0.340767f, 0.330920f, 0.321191f, 0.311588f, 0.302115f, 0.292778f, 0.283582f, 0.274532f, + 0.265634f, 0.256892f, 0.248312f, 0.239898f, 0.231656f, 0.223589f, 0.215704f, 0.208003f, + 0.200492f, 0.193174f, 0.186055f, 0.179137f, 0.172426f, 0.165924f, 0.159636f, 0.153564f, + 0.147714f, 0.142087f, 0.136687f, 0.131518f, 0.126582f, 0.121881f, 0.117419f, 0.113199f, + 0.109222f, 0.105491f, 0.102007f, 0.098774f, 0.095793f, 0.093065f, 0.090592f, 0.088376f, + 0.086417f, 0.084718f, 0.083278f, 0.082099f, 0.081181f, 0.080525f, 0.080131f, 0.080000f +}; + +/* LP analysis window (length of the window is 25ms which is 400 samples at 16kHz */ +const float LP_assym_window_16k[L_LP_16k] = +{ + 0.080000f, 0.080041f, 0.080165f, 0.080371f, 0.080660f, 0.081032f, 0.081485f, 0.082021f, + 0.082639f, 0.083340f, 0.084122f, 0.084986f, 0.085932f, 0.086959f, 0.088067f, 0.089257f, + 0.090527f, 0.091879f, 0.093310f, 0.094822f, 0.096414f, 0.098085f, 0.099835f, 0.101665f, + 0.103573f, 0.105560f, 0.107624f, 0.109767f, 0.111986f, 0.114282f, 0.116655f, 0.119103f, + 0.121627f, 0.124227f, 0.126901f, 0.129649f, 0.132470f, 0.135365f, 0.138332f, 0.141372f, + 0.144483f, 0.147665f, 0.150917f, 0.154240f, 0.157631f, 0.161091f, 0.164619f, 0.168215f, + 0.171877f, 0.175605f, 0.179399f, 0.183257f, 0.187180f, 0.191166f, 0.195214f, 0.199324f, + 0.203496f, 0.207727f, 0.212019f, 0.216369f, 0.220777f, 0.225243f, 0.229765f, 0.234343f, + 0.238976f, 0.243663f, 0.248402f, 0.253195f, 0.258038f, 0.262933f, 0.267877f, 0.272870f, + 0.277911f, 0.282998f, 0.288132f, 0.293312f, 0.298535f, 0.303802f, 0.309111f, 0.314462f, + 0.319853f, 0.325283f, 0.330753f, 0.336259f, 0.341803f, 0.347382f, 0.352995f, 0.358642f, + 0.364322f, 0.370033f, 0.375774f, 0.381545f, 0.387345f, 0.393172f, 0.399025f, 0.404903f, + 0.410806f, 0.416732f, 0.422680f, 0.428649f, 0.434639f, 0.440647f, 0.446673f, 0.452715f, + 0.458774f, 0.464846f, 0.470933f, 0.477032f, 0.483142f, 0.489262f, 0.495391f, 0.501529f, + 0.507673f, 0.513823f, 0.519978f, 0.526136f, 0.532297f, 0.538459f, 0.544622f, 0.550784f, + 0.556943f, 0.563100f, 0.569253f, 0.575400f, 0.581541f, 0.587674f, 0.593799f, 0.599915f, + 0.606019f, 0.612112f, 0.618192f, 0.624258f, 0.630308f, 0.636343f, 0.642360f, 0.648358f, + 0.654338f, 0.660296f, 0.666234f, 0.672148f, 0.678039f, 0.683905f, 0.689745f, 0.695558f, + 0.701344f, 0.707100f, 0.712827f, 0.718522f, 0.724186f, 0.729816f, 0.735412f, 0.740973f, + 0.746499f, 0.751987f, 0.757437f, 0.762848f, 0.768219f, 0.773549f, 0.778837f, 0.784082f, + 0.789284f, 0.794440f, 0.799551f, 0.804616f, 0.809633f, 0.814601f, 0.819521f, 0.824390f, + 0.829208f, 0.833974f, 0.838688f, 0.843347f, 0.847953f, 0.852503f, 0.856997f, 0.861434f, + 0.865813f, 0.870134f, 0.874396f, 0.878598f, 0.882739f, 0.886818f, 0.890835f, 0.894789f, + 0.898680f, 0.902506f, 0.906267f, 0.909962f, 0.913591f, 0.917153f, 0.920647f, 0.924073f, + 0.927430f, 0.930718f, 0.933935f, 0.937082f, 0.940157f, 0.943160f, 0.946092f, 0.948950f, + 0.951735f, 0.954446f, 0.957082f, 0.959644f, 0.962130f, 0.964541f, 0.966876f, 0.969133f, + 0.971314f, 0.973418f, 0.975443f, 0.977391f, 0.979260f, 0.981050f, 0.982761f, 0.984392f, + 0.985944f, 0.987416f, 0.988807f, 0.990118f, 0.991348f, 0.992497f, 0.993565f, 0.994551f, + 0.995456f, 0.996279f, 0.997021f, 0.997680f, 0.998257f, 0.998752f, 0.999164f, 0.999494f, + 0.999742f, 0.999907f, 0.999990f, 0.999979f, 0.999811f, 0.999476f, 0.998973f, 0.998302f, + 0.997465f, 0.996460f, 0.995289f, 0.993952f, 0.992450f, 0.990782f, 0.988950f, 0.986955f, + 0.984796f, 0.982475f, 0.979993f, 0.977350f, 0.974548f, 0.971587f, 0.968469f, 0.965194f, + 0.961765f, 0.958182f, 0.954446f, 0.950559f, 0.946522f, 0.942337f, 0.938005f, 0.933528f, + 0.928908f, 0.924146f, 0.919243f, 0.914202f, 0.909025f, 0.903713f, 0.898269f, 0.892694f, + 0.886990f, 0.881160f, 0.875205f, 0.869128f, 0.862931f, 0.856617f, 0.850186f, 0.843643f, + 0.836989f, 0.830226f, 0.823358f, 0.816386f, 0.809314f, 0.802143f, 0.794877f, 0.787518f, + 0.780068f, 0.772531f, 0.764909f, 0.757206f, 0.749422f, 0.741563f, 0.733630f, 0.725626f, + 0.717555f, 0.709419f, 0.701221f, 0.692964f, 0.684652f, 0.676287f, 0.667872f, 0.659410f, + 0.650905f, 0.642360f, 0.633777f, 0.625160f, 0.616512f, 0.607835f, 0.599135f, 0.590412f, + 0.581672f, 0.572916f, 0.564148f, 0.555371f, 0.546589f, 0.537804f, 0.529020f, 0.520240f, + 0.511467f, 0.502705f, 0.493956f, 0.485224f, 0.476512f, 0.467823f, 0.459161f, 0.450528f, + 0.441927f, 0.433363f, 0.424837f, 0.416353f, 0.407915f, 0.399524f, 0.391185f, 0.382900f, + 0.374672f, 0.366505f, 0.358401f, 0.350363f, 0.342395f, 0.334498f, 0.326676f, 0.318932f, + 0.311269f, 0.303689f, 0.296196f, 0.288791f, 0.281478f, 0.274259f, 0.267137f, 0.260115f, + 0.253195f, 0.246379f, 0.239670f, 0.233071f, 0.226584f, 0.220211f, 0.213955f, 0.207818f, + 0.201802f, 0.195909f, 0.190142f, 0.184502f, 0.178992f, 0.173614f, 0.168369f, 0.163260f, + 0.158288f, 0.153456f, 0.148764f, 0.144215f, 0.139811f, 0.135552f, 0.131441f, 0.127479f, + 0.123667f, 0.120008f, 0.116501f, 0.113149f, 0.109952f, 0.106913f, 0.104031f, 0.101309f, + 0.098746f, 0.096344f, 0.094104f, 0.092027f, 0.090113f, 0.088363f, 0.086778f, 0.085358f, + 0.084104f, 0.083017f, 0.082096f, 0.081342f, 0.080755f, 0.080336f, 0.080084f, 0.080000f +}; + +/* LP analysis window for AMR-WB IO mode (length of the window is 30ms which is + * 384 samples at 12.8kHz */ +const float hamcos_window[L_LP_AMR_WB] = +{ + 0.080000f, 0.080035f, 0.080139f, 0.080313f, 0.080556f, 0.080869f, 0.081251f, 0.081703f, + 0.082224f, 0.082814f, 0.083473f, 0.084201f, 0.084998f, 0.085864f, 0.086799f, 0.087802f, + 0.088873f, 0.090013f, 0.091221f, 0.092496f, 0.093839f, 0.095250f, 0.096728f, 0.098273f, + 0.099884f, 0.101563f, 0.103307f, 0.105118f, 0.106994f, 0.108936f, 0.110943f, 0.113015f, + 0.115151f, 0.117351f, 0.119616f, 0.121944f, 0.124335f, 0.126789f, 0.129306f, 0.131884f, + 0.134525f, 0.137226f, 0.139989f, 0.142812f, 0.145695f, 0.148638f, 0.151639f, 0.154700f, + 0.157819f, 0.160995f, 0.164229f, 0.167520f, 0.170867f, 0.174270f, 0.177728f, 0.181241f, + 0.184808f, 0.188429f, 0.192103f, 0.195829f, 0.199608f, 0.203438f, 0.207319f, 0.211250f, + 0.215231f, 0.219261f, 0.223340f, 0.227466f, 0.231640f, 0.235860f, 0.240126f, 0.244438f, + 0.248794f, 0.253195f, 0.257638f, 0.262125f, 0.266653f, 0.271223f, 0.275833f, 0.280483f, + 0.285173f, 0.289901f, 0.294667f, 0.299470f, 0.304309f, 0.309184f, 0.314094f, 0.319038f, + 0.324015f, 0.329025f, 0.334067f, 0.339140f, 0.344244f, 0.349377f, 0.354538f, 0.359728f, + 0.364946f, 0.370189f, 0.375458f, 0.380753f, 0.386071f, 0.391412f, 0.396776f, 0.402162f, + 0.407568f, 0.412995f, 0.418441f, 0.423905f, 0.429386f, 0.434885f, 0.440399f, 0.445928f, + 0.451472f, 0.457029f, 0.462598f, 0.468179f, 0.473771f, 0.479373f, 0.484984f, 0.490604f, + 0.496231f, 0.501865f, 0.507504f, 0.513148f, 0.518797f, 0.524448f, 0.530102f, 0.535757f, + 0.541413f, 0.547069f, 0.552724f, 0.558377f, 0.564027f, 0.569673f, 0.575315f, 0.580952f, + 0.586582f, 0.592205f, 0.597821f, 0.603428f, 0.609025f, 0.614611f, 0.620187f, 0.625750f, + 0.631300f, 0.636837f, 0.642359f, 0.647865f, 0.653355f, 0.658828f, 0.664283f, 0.669719f, + 0.675136f, 0.680532f, 0.685907f, 0.691260f, 0.696590f, 0.701896f, 0.707178f, 0.712435f, + 0.717665f, 0.722869f, 0.728045f, 0.733192f, 0.738311f, 0.743399f, 0.748457f, 0.753483f, + 0.758477f, 0.763438f, 0.768365f, 0.773257f, 0.778115f, 0.782936f, 0.787720f, 0.792467f, + 0.797176f, 0.801846f, 0.806477f, 0.811067f, 0.815616f, 0.820124f, 0.824589f, 0.829011f, + 0.833389f, 0.837723f, 0.842012f, 0.846256f, 0.850453f, 0.854603f, 0.858706f, 0.862760f, + 0.866766f, 0.870722f, 0.874628f, 0.878484f, 0.882288f, 0.886041f, 0.889741f, 0.893389f, + 0.896983f, 0.900523f, 0.904009f, 0.907439f, 0.910814f, 0.914133f, 0.917395f, 0.920601f, + 0.923748f, 0.926838f, 0.929869f, 0.932842f, 0.935755f, 0.938608f, 0.941401f, 0.944133f, + 0.946804f, 0.949413f, 0.951961f, 0.954446f, 0.956869f, 0.959229f, 0.961525f, 0.963758f, + 0.965926f, 0.968030f, 0.970070f, 0.972044f, 0.973953f, 0.975796f, 0.977574f, 0.979285f, + 0.980930f, 0.982509f, 0.984020f, 0.985464f, 0.986841f, 0.988151f, 0.989392f, 0.990566f, + 0.991672f, 0.992709f, 0.993678f, 0.994578f, 0.995409f, 0.996172f, 0.996866f, 0.997490f, + 0.998046f, 0.998532f, 0.998949f, 0.999296f, 0.999574f, 0.999783f, 0.999922f, 0.999991f, + 1.000000f, 0.999924f, 0.999698f, 0.999320f, 0.998791f, 0.998111f, 0.997280f, 0.996298f, + 0.995166f, 0.993883f, 0.992450f, 0.990867f, 0.989134f, 0.987252f, 0.985220f, 0.983039f, + 0.980710f, 0.978233f, 0.975607f, 0.972834f, 0.969914f, 0.966848f, 0.963635f, 0.960277f, + 0.956773f, 0.953125f, 0.949332f, 0.945396f, 0.941317f, 0.937096f, 0.932733f, 0.928229f, + 0.923585f, 0.918801f, 0.913879f, 0.908818f, 0.903619f, 0.898284f, 0.892814f, 0.887208f, + 0.881468f, 0.875595f, 0.869589f, 0.863452f, 0.857185f, 0.850788f, 0.844262f, 0.837609f, + 0.830829f, 0.823923f, 0.816893f, 0.809739f, 0.802463f, 0.795066f, 0.787548f, 0.779911f, + 0.772157f, 0.764285f, 0.756298f, 0.748197f, 0.739983f, 0.731657f, 0.723220f, 0.714674f, + 0.706019f, 0.697258f, 0.688392f, 0.679421f, 0.670348f, 0.661174f, 0.651899f, 0.642526f, + 0.633056f, 0.623490f, 0.613830f, 0.604077f, 0.594233f, 0.584299f, 0.574276f, 0.564167f, + 0.553972f, 0.543694f, 0.533333f, 0.522892f, 0.512372f, 0.501774f, 0.491101f, 0.480353f, + 0.469533f, 0.458641f, 0.447680f, 0.436652f, 0.425558f, 0.414399f, 0.403177f, 0.391895f, + 0.380553f, 0.369154f, 0.357699f, 0.346190f, 0.334629f, 0.323017f, 0.311356f, 0.299648f, + 0.287895f, 0.276098f, 0.264260f, 0.252381f, 0.240465f, 0.228512f, 0.216524f, 0.204504f, + 0.192453f, 0.180373f, 0.168265f, 0.156132f, 0.143976f, 0.131797f, 0.119599f, 0.107383f, + 0.095150f, 0.082903f, 0.070644f, 0.058374f, 0.046095f, 0.033809f, 0.021518f, 0.009223f +}; + + +/* LAGW_STRONG */ +const float lag_window_8k[17] = +{ + 1.0001f, + 0.998890285694f, 0.995568526105f, 0.990056789412f, 0.982391584471f, + 0.972623458067f, 0.960816439805f, 0.947047343167f, 0.931404933402f, + 0.913988974871f, 0.894909172129f, 0.874284020465f, 0.852239582728f, + 0.828908210054f, 0.804427224606f, 0.778937582562f, 0.752582535421f +}; + +const float lag_window_12k8[NUM_LAGW_STRENGTHS][17] = +{ + /* LAGW_WEAK */ + { + 1.0001f, + 0.999951809733f, 0.999807252867f, 0.999566371195f, 0.999229234349f, + 0.998795939769f, 0.998266612656f, 0.997641405905f, 0.996920500042f, + 0.996104103128f, 0.995192450664f, 0.994185805476f, 0.993084457589f, + 0.991888724088f, 0.990598948965f, 0.989215502956f, 0.987738783362f + }, + /* LAGW_MEDIUM */ + { + 1.0001f, + 0.999807252867f, 0.999229234349f, 0.998266612656f, 0.996920500042f, + 0.995192450664f, 0.993084457589f, 0.990598948965f, 0.987738783362f, + 0.984507244288f, 0.980908033914f, 0.976945266001f, 0.972623458067f, + 0.967947522806f, 0.962922758784f, 0.957554840431f, 0.951849807369f + }, + /* LAGW_STRONG */ + { + 1.0001f, + 0.999566371183f, 0.998266612613f, 0.996104103033f, 0.993084457421f, + 0.989215493202f, 0.984507262707f, 0.978971838951f, 0.972623467445f, + 0.965478420258f, 0.957554817200f, 0.948872864246f, 0.939454317093f, + 0.929322779179f, 0.918503403664f, 0.907022833824f, 0.894909143448f + } +}; + +const float lag_window_16k[NUM_LAGW_STRENGTHS][17] = +{ + /* LAGW_WEAK */ + { + 1.0001f, + 0.999969157962f, 0.999876637555f, 0.999722455899f, 0.999506641521f, + 0.999229234349f, 0.998890285694f, 0.998489858239f, 0.998028026020f, + 0.997504874399f, 0.996920500042f, 0.996275010885f, 0.995568526105f, + 0.994801176082f, 0.993973102356f, 0.993084457589f, 0.992135405511f + }, + /* LAGW_MEDIUM */ + { + 1.0001f, + 0.999876637555f, 0.999506641521f, 0.998890285694f, 0.998028026020f, + 0.996920500042f, 0.995568526105f, 0.993973102356f, 0.992135405511f, + 0.990056789412f, 0.987738783362f, 0.985183090250f, 0.982391584471f, + 0.979366309628f, 0.976109476043f, 0.972623458067f, 0.968910791191f + }, + /* LAGW_STRONG */ + { + 1.0001f, + 0.999722455899f, 0.998890285694f, 0.997504874399f, 0.995568526105f, + 0.993084457589f, 0.990056789412f, 0.986490534533f, 0.982391584471f, + 0.977766693093f, 0.972623458067f, 0.966970300068f, 0.960816439805f, + 0.954171872966f, 0.947047343167f, 0.939454313017f, 0.931404933402f + } +}; + +const float lag_window_25k6[NUM_LAGW_STRENGTHS][17] = +{ + /* LAGW_WEAK */ + { + 1.0001f, + 0.999987952216f, 0.999951809733f, 0.999891575166f, 0.999807252867f, + 0.999698848932f, 0.999566371195f, 0.999409829230f, 0.999229234349f, + 0.999024599601f, 0.998795939769f, 0.998543271372f, 0.998266612656f, + 0.997965983599f, 0.997641405905f, 0.997292903003f, 0.996920500042f + }, + /* LAGW_MEDIUM */ + { + 1.0001f, + 0.999951809733f, 0.999807252867f, 0.999566371195f, 0.999229234349f, + 0.998795939769f, 0.998266612656f, 0.997641405905f, 0.996920500042f, + 0.996104103128f, 0.995192450664f, 0.994185805476f, 0.993084457589f, + 0.991888724088f, 0.990598948965f, 0.989215502956f, 0.987738783362f + }, + /* LAGW_STRONG */ + { + 1.0001f, + 0.999891579151f, 0.999566376209f, 0.999024569988f, 0.998266637325f, + 0.997292876244f, 0.996104121208f, 0.994700968266f, 0.993084430695f, + 0.991255581379f, 0.989215493202f, 0.986965596676f, 0.984507262707f, + 0.981842100620f, 0.978971838951f, 0.975898265839f, 0.972623467445f + } +}; + +const float lag_window_32k[NUM_LAGW_STRENGTHS][17] = +{ + /* LAGW_WEAK */ + { + 1.0001f, + 0.999992289401f, 0.999969157962f, 0.999930606752f, 0.999876637555f, + 0.999807252867f, 0.999722455899f, 0.999622250572f, 0.999506641521f, + 0.999375634094f, 0.999229234349f, 0.999067449055f, 0.998890285694f, + 0.998697752455f, 0.998489858239f, 0.998266612656f, 0.998028026020f + }, + /* LAGW_MEDIUM */ + { + 1.0001f, + 0.999969157962f, 0.999876637555f, 0.999722455899f, 0.999506641521f, + 0.999229234349f, 0.998890285694f, 0.998489858239f, 0.998028026020f, + 0.997504874399f, 0.996920500042f, 0.996275010885f, 0.995568526105f, + 0.994801176082f, 0.993973102356f, 0.993084457589f, 0.992135405511f + }, + /* LAGW_STRONG */ + { + 1.0001f, + 0.999930606752f, 0.999722455899f, 0.999375634094f, 0.998890285694f, + 0.998266612656f, 0.997504874399f, 0.996605387628f, 0.995568526105f, + 0.994394720400f, 0.993084457589f, 0.991638280913f, 0.990056789412f, + 0.988340637503f, 0.986490534533f, 0.984507244288f, 0.982391584471f + } +}; + +/* LAGW_STRONG */ +const float lag_window_48k[17] = +{ + 1.0001f, + 0.999969157962f, 0.999876637555f, 0.999722455899f, 0.999506641521f, + 0.999229234349f, 0.998890285694f, 0.998489858239f, 0.998028026020f, + 0.997504874399f, 0.996920500042f, 0.996275010885f, 0.995568526105f, + 0.994801176082f, 0.993973102356f, 0.993084457589f, 0.992135405511f +}; + + +/*----------------------------------------------------------------------------------* + * LP analysis - grid of points for evaluating Chebyshev polynomials + *----------------------------------------------------------------------------------*/ +const float grid50[(GRID50_POINTS-1)/2 - 1] = +{ + 0.9980267284f, 0.9921147013f, 0.9822872507f, 0.9685831611f, 0.9510565163f, + 0.9297764859f, 0.9048270525f, 0.8763066800f, 0.8443279255f, 0.8090169944f, + 0.7705132428f, 0.7289686274f, 0.6845471059f, 0.6374239897f, 0.5877852523f, + 0.5358267950f, 0.4817536741f, 0.4257792916f, 0.3681245527f, 0.3090169944f, + 0.2486898872f, 0.1873813146f, 0.1253332336f, 0.0627905195f +}; + +const float grid40[(GRID40_POINTS-1)/2 - 1] = +{ + 0.9969173337f, 0.9876883406f, 0.9723699204f, 0.9510565163f, 0.9238795325f, + 0.8910065242f, 0.8526401644f, 0.8090169944f, 0.7604059656f, 0.7071067812f, + 0.6494480483f, 0.5877852523f, 0.5224985647f, 0.4539904997f, 0.3826834324f, + 0.3090169944f, 0.2334453639f, 0.1564344650f, 0.0784590957f +}; + +const float grid100[GRID100_POINTS+1] = +{ + 1.0000000000f, 0.9995065331f, 0.9980267286f, 0.9955619574f, 0.9921147227f, + 0.9876883626f, 0.9822872281f, 0.9759167433f, 0.9685831666f, 0.9602936506f, + 0.9510565400f, 0.9408807755f, 0.9297764897f, 0.9177545905f, 0.9048270583f, + 0.8910065293f, 0.8763066530f, 0.8607420325f, 0.8443279266f, 0.8270805478f, + 0.8090170026f, 0.7901549935f, 0.7705132365f, 0.7501110435f, 0.7289685607f, + 0.7071067691f, 0.6845470667f, 0.6613118052f, 0.6374239326f, 0.6129069924f, + 0.5877852440f, 0.5620833635f, 0.5358267426f, 0.5090413690f, 0.4817536175f, + 0.4539904296f, 0.4257791936f, 0.3971477747f, 0.3681245446f, 0.3387379050f, + 0.3090169728f, 0.2789910734f, 0.2486898303f, 0.2181431651f, 0.1873812228f, + 0.1564343721f, 0.1253331155f, 0.0941081867f, 0.0627903789f, 0.0314107276f, + -0.0000000437f, -0.0314108171f, -0.0627905875f, -0.0941083953f, -0.1253333241f, + -0.1564345658f, -0.1873814315f, -0.2181433737f, -0.2486900240f, -0.2789911330f, + -0.3090170324f, -0.3387379944f, -0.3681246340f, -0.3971479833f, -0.4257793725f, + -0.4539906085f, -0.4817537963f, -0.5090415478f, -0.5358269215f, -0.5620835423f, + -0.5877854228f, -0.6129072309f, -0.6374241710f, -0.6613120437f, -0.6845472455f, + -0.7071067691f, -0.7289686203f, -0.7501111031f, -0.7705132961f, -0.7901550531f, + -0.8090170622f, -0.8270806074f, -0.8443279862f, -0.8607420921f, -0.8763067126f, + -0.8910065889f, -0.9048271179f, -0.9177547097f, -0.9297765493f, -0.9408808351f, + -0.9510565996f, -0.9602937698f, -0.9685832262f, -0.9759168029f, -0.9822872877f, + -0.9876883626f, -0.9921147227f, -0.9955619574f, -0.9980267286f, -0.9995065331f, + -1.0000000000f +}; + +/*----------------------------------------------------------------------------------* + * Sinus & Cosinus - table for the FFT and IFFT of 256 points, + * dimension of the table = 161 + *----------------------------------------------------------------------------------*/ + +const float sincos_t[161] = +{ + 0.0f, + 0.0245412290096282960f, 0.0490676760673522950f, 0.0735645666718482970f, 0.0980171412229537960f, 0.1224106773734092700f, + 0.1467304676771163900f, 0.1709618866443634000f, 0.1950903236865997300f, 0.2191012352705001800f, 0.2429801821708679200f, + 0.2667127549648284900f, 0.2902846634387970000f, 0.3136817514896392800f, 0.3368898630142211900f, 0.3598950505256652800f, + 0.3826834261417388900f, 0.4052413105964660600f, 0.4275550842285156300f, 0.4496113359928131100f, 0.4713967442512512200f, + 0.4928981959819793700f, 0.5141027569770813000f, 0.5349976420402526900f, 0.5555702447891235400f, 0.5758081674575805700f, + 0.5956993103027343800f, 0.6152315735816955600f, 0.6343932747840881300f, 0.6531728506088256800f, 0.6715589761734008800f, + 0.6895405650138855000f, 0.7071067690849304200f, 0.7242470979690551800f, 0.7409511208534240700f, 0.7572088241577148400f, + 0.7730104327201843300f, 0.7883464097976684600f, 0.8032075166702270500f, 0.8175848126411438000f, 0.8314695954322814900f, + 0.8448535799980163600f, 0.8577286005020141600f, 0.8700869679450988800f, 0.8819212913513183600f, 0.8932242989540100100f, + 0.9039893150329589800f, 0.9142097830772399900f, 0.9238795042037963900f, 0.9329928159713745100f, 0.9415440559387207000f, + 0.9495281577110290500f, 0.9569403529167175300f, 0.9637760519981384300f, 0.9700312614440918000f, 0.9757021069526672400f, + 0.9807852506637573200f, 0.9852776527404785200f, 0.9891765117645263700f, 0.9924795627593994100f, 0.9951847195625305200f, + 0.9972904324531555200f, 0.9987954497337341300f, 0.9996988177299499500f, 1.0000000000000000000f, 0.9996988177299499500f, + 0.9987954497337341300f, 0.9972904324531555200f, 0.9951847195625305200f, 0.9924795627593994100f, 0.9891765117645263700f, + 0.9852776527404785200f, 0.9807852506637573200f, 0.9757021069526672400f, 0.9700312614440918000f, 0.9637760519981384300f, + 0.9569403529167175300f, 0.9495281577110290500f, 0.9415440559387207000f, 0.9329928159713745100f, 0.9238795042037963900f, + 0.9142097830772399900f, 0.9039893150329589800f, 0.8932242989540100100f, 0.8819212913513183600f, 0.8700869679450988800f, + 0.8577286005020141600f, 0.8448535799980163600f, 0.8314695954322814900f, 0.8175848126411438000f, 0.8032075166702270500f, + 0.7883464097976684600f, 0.7730104327201843300f, 0.7572088241577148400f, 0.7409511208534240700f, 0.7242470979690551800f, + 0.7071067690849304200f, 0.6895405650138855000f, 0.6715589761734008800f, 0.6531728506088256800f, 0.6343932747840881300f, + 0.6152315735816955600f, 0.5956993103027343800f, 0.5758081674575805700f, 0.5555702447891235400f, 0.5349976420402526900f, + 0.5141027569770813000f, 0.4928981959819793700f, 0.4713967442512512200f, 0.4496113359928131100f, 0.4275550842285156300f, + 0.4052413105964660600f, 0.3826834261417388900f, 0.3598950505256652800f, 0.3368898630142211900f, 0.3136817514896392800f, + 0.2902846634387970000f, 0.2667127549648284900f, 0.2429801821708679200f, 0.2191012352705001800f, 0.1950903236865997300f, + 0.1709618866443634000f, 0.1467304676771163900f, 0.1224106773734092700f, 0.0980171412229537960f, 0.0735645666718482970f, + 0.0490676723420619960f, 0.0245412290096282960f, -0.00000000041020686847303978f, -0.0245412290096282960f, -0.0490676760673522950f, + -0.0735645666718482970f, -0.0980171412229537960f, -0.1224106773734092700f, -0.1467304676771163900f, -0.1709618866443634000f, + -0.1950903236865997300f, -0.2191012352705001800f, -0.2429801821708679200f, -0.2667127549648284900f, -0.2902846634387970000f, + -0.3136817514896392800f, -0.3368898630142211900f, -0.3598950505256652800f, -0.3826834261417388900f, -0.4052413105964660600f, + -0.4275550842285156300f, -0.4496113359928131100f, -0.4713967442512512200f, -0.4928981959819793700f, -0.5141027569770813000f, + -0.5349976420402526900f, -0.5555702447891235400f, -0.5758081674575805700f, -0.5956993103027343800f, -0.6152315735816955600f, + -0.6343932747840881300f, -0.6531728506088256800f, -0.6715589761734008800f, -0.6895405650138855000f, -0.7071067690849304200f +}; + +/*----------------------------------------------------------------------------------* + * Sinus & Cosinus - table for the FFT and IFFT of 1024 points, value range [0 ... sin(-5pi/4)] + * dimension of the table = 641=4*256*(5/8)+1 + *----------------------------------------------------------------------------------*/ + +/* every 4th value is identical to sincos_t above but as sincos_t is also used in SWB TBE a separate table has been defined here */ +const float sincos_t_ext[641] = +{ + 0.0f, + 0.006135884649154f, 0.012271538285720f, 0.018406729905805f, 0.024541228522912f, 0.030674803176637f, 0.036807222941359f, 0.042938256934941f, 0.049067674327418f, + 0.055195244349690f, 0.061320736302209f, 0.067443919563664f, 0.073564563599667f, 0.079682437971430f, 0.085797312344440f, 0.091908956497133f, 0.098017140329561f, + 0.104121633872055f, 0.110222207293883f, 0.116318630911905f, 0.122410675199216f, 0.128498110793793f, 0.134580708507126f, 0.140658239332849f, 0.146730474455362f, + 0.152797185258443f, 0.158858143333861f, 0.164913120489970f, 0.170961888760301f, 0.177004220412149f, 0.183039887955141f, 0.189068664149806f, 0.195090322016128f, + 0.201104634842092f, 0.207111376192219f, 0.213110319916091f, 0.219101240156870f, 0.225083911359793f, 0.231058108280671f, 0.237023605994367f, 0.242980179903264f, + 0.248927605745720f, 0.254865659604515f, 0.260794117915276f, 0.266712757474898f, 0.272621355449949f, 0.278519689385053f, 0.284407537211272f, 0.290284677254462f, + 0.296150888243624f, 0.302005949319228f, 0.307849640041535f, 0.313681740398892f, 0.319502030816016f, 0.325310292162263f, 0.331106305759876f, 0.336889853392220f, + 0.342660717311994f, 0.348418680249435f, 0.354163525420490f, 0.359895036534988f, 0.365612997804774f, 0.371317193951837f, 0.377007410216418f, 0.382683432365090f, + 0.388345046698826f, 0.393992040061048f, 0.399624199845647f, 0.405241314004990f, 0.410843171057904f, 0.416429560097637f, 0.422000270799800f, 0.427555093430282f, + 0.433093818853152f, 0.438616238538528f, 0.444122144570429f, 0.449611329654607f, 0.455083587126344f, 0.460538710958240f, 0.465976495767966f, 0.471396736825998f, + 0.476799230063322f, 0.482183772079123f, 0.487550160148436f, 0.492898192229784f, 0.498227666972782f, 0.503538383725718f, 0.508830142543107f, 0.514102744193222f, + 0.519355990165590f, 0.524589682678469f, 0.529803624686295f, 0.534997619887097f, 0.540171472729893f, 0.545324988422046f, 0.550457972936605f, 0.555570233019602f, + 0.560661576197336f, 0.565731810783613f, 0.570780745886967f, 0.575808191417845f, 0.580813958095765f, 0.585797857456439f, 0.590759701858874f, 0.595699304492433f, + 0.600616479383869f, 0.605511041404326f, 0.610382806276309f, 0.615231590580627f, 0.620057211763289f, 0.624859488142386f, 0.629638238914927f, 0.634393284163645f, + 0.639124444863776f, 0.643831542889791f, 0.648514401022112f, 0.653172842953777f, 0.657806693297079f, 0.662415777590172f, 0.666999922303637f, 0.671558954847018f, + 0.676092703575316f, 0.680600997795453f, 0.685083667772700f, 0.689540544737067f, 0.693971460889654f, 0.698376249408973f, 0.702754744457225f, 0.707106781186547f, + 0.711432195745216f, 0.715730825283819f, 0.720002507961382f, 0.724247082951467f, 0.728464390448225f, 0.732654271672413f, 0.736816568877370f, 0.740951125354959f, + 0.745057785441466f, 0.749136394523459f, 0.753186799043613f, 0.757208846506485f, 0.761202385484262f, 0.765167265622459f, 0.769103337645580f, 0.773010453362737f, + 0.776888465673232f, 0.780737228572094f, 0.784556597155575f, 0.788346427626606f, 0.792106577300212f, 0.795836904608884f, 0.799537269107905f, 0.803207531480645f, + 0.806847553543799f, 0.810457198252595f, 0.814036329705948f, 0.817584813151584f, 0.821102514991105f, 0.824589302785025f, 0.828045045257756f, 0.831469612302545f, + 0.834862874986380f, 0.838224705554838f, 0.841554977436898f, 0.844853565249707f, 0.848120344803297f, 0.851355193105265f, 0.854557988365401f, 0.857728610000272f, + 0.860866938637767f, 0.863972856121587f, 0.867046245515693f, 0.870086991108711f, 0.873094978418290f, 0.876070094195407f, 0.879012226428633f, 0.881921264348355f, + 0.884797098430938f, 0.887639620402854f, 0.890448723244758f, 0.893224301195515f, 0.895966249756185f, 0.898674465693954f, 0.901348847046022f, 0.903989293123443f, + 0.906595704514915f, 0.909167983090522f, 0.911706032005430f, 0.914209755703531f, 0.916679059921043f, 0.919113851690058f, 0.921514039342042f, 0.923879532511287f, + 0.926210242138311f, 0.928506080473216f, 0.930766961078984f, 0.932992798834739f, 0.935183509938948f, 0.937339011912575f, 0.939459223602190f, 0.941544065183021f, + 0.943593458161960f, 0.945607325380521f, 0.947585591017741f, 0.949528180593037f, 0.951435020969008f, 0.953306040354194f, 0.955141168305771f, 0.956940335732209f, + 0.958703474895872f, 0.960430519415566f, 0.962121404269042f, 0.963776065795440f, 0.965394441697689f, 0.966976471044852f, 0.968522094274417f, 0.970031253194544f, + 0.971503890986252f, 0.972939952205560f, 0.974339382785576f, 0.975702130038529f, 0.977028142657754f, 0.978317370719628f, 0.979569765685441f, 0.980785280403230f, + 0.981963869109555f, 0.983105487431216f, 0.984210092386929f, 0.985277642388941f, 0.986308097244599f, 0.987301418157858f, 0.988257567730749f, 0.989176509964781f, + 0.990058210262297f, 0.990902635427780f, 0.991709753669100f, 0.992479534598710f, 0.993211949234795f, 0.993906970002356f, 0.994564570734255f, 0.995184726672197f, + 0.995767414467660f, 0.996312612182778f, 0.996820299291166f, 0.997290456678690f, 0.997723066644192f, 0.998118112900149f, 0.998475580573295f, 0.998795456205172f, + 0.999077727752645f, 0.999322384588350f, 0.999529417501093f, 0.999698818696204f, 0.999830581795823f, 0.999924701839145f, 0.999981175282601f, 1.000000000000000f, + 0.999981175282601f, 0.999924701839145f, 0.999830581795823f, 0.999698818696204f, 0.999529417501093f, 0.999322384588350f, 0.999077727752645f, 0.998795456205172f, + 0.998475580573295f, 0.998118112900149f, 0.997723066644192f, 0.997290456678690f, 0.996820299291166f, 0.996312612182778f, 0.995767414467660f, 0.995184726672197f, + 0.994564570734255f, 0.993906970002356f, 0.993211949234795f, 0.992479534598710f, 0.991709753669100f, 0.990902635427780f, 0.990058210262297f, 0.989176509964781f, + 0.988257567730749f, 0.987301418157858f, 0.986308097244599f, 0.985277642388941f, 0.984210092386929f, 0.983105487431216f, 0.981963869109555f, 0.980785280403230f, + 0.979569765685441f, 0.978317370719628f, 0.977028142657754f, 0.975702130038529f, 0.974339382785576f, 0.972939952205560f, 0.971503890986252f, 0.970031253194544f, + 0.968522094274417f, 0.966976471044852f, 0.965394441697689f, 0.963776065795440f, 0.962121404269042f, 0.960430519415566f, 0.958703474895872f, 0.956940335732209f, + 0.955141168305771f, 0.953306040354194f, 0.951435020969008f, 0.949528180593037f, 0.947585591017741f, 0.945607325380521f, 0.943593458161960f, 0.941544065183021f, + 0.939459223602190f, 0.937339011912575f, 0.935183509938948f, 0.932992798834739f, 0.930766961078984f, 0.928506080473216f, 0.926210242138311f, 0.923879532511287f, + 0.921514039342042f, 0.919113851690058f, 0.916679059921043f, 0.914209755703531f, 0.911706032005430f, 0.909167983090522f, 0.906595704514915f, 0.903989293123443f, + 0.901348847046022f, 0.898674465693954f, 0.895966249756185f, 0.893224301195515f, 0.890448723244758f, 0.887639620402854f, 0.884797098430938f, 0.881921264348355f, + 0.879012226428634f, 0.876070094195407f, 0.873094978418290f, 0.870086991108711f, 0.867046245515693f, 0.863972856121587f, 0.860866938637767f, 0.857728610000272f, + 0.854557988365401f, 0.851355193105265f, 0.848120344803297f, 0.844853565249707f, 0.841554977436898f, 0.838224705554838f, 0.834862874986380f, 0.831469612302545f, + 0.828045045257756f, 0.824589302785025f, 0.821102514991105f, 0.817584813151584f, 0.814036329705949f, 0.810457198252595f, 0.806847553543799f, 0.803207531480645f, + 0.799537269107905f, 0.795836904608884f, 0.792106577300212f, 0.788346427626606f, 0.784556597155575f, 0.780737228572095f, 0.776888465673232f, 0.773010453362737f, + 0.769103337645580f, 0.765167265622459f, 0.761202385484262f, 0.757208846506485f, 0.753186799043613f, 0.749136394523459f, 0.745057785441466f, 0.740951125354959f, + 0.736816568877370f, 0.732654271672413f, 0.728464390448225f, 0.724247082951467f, 0.720002507961382f, 0.715730825283819f, 0.711432195745217f, 0.707106781186548f, + 0.702754744457225f, 0.698376249408973f, 0.693971460889654f, 0.689540544737067f, 0.685083667772700f, 0.680600997795453f, 0.676092703575316f, 0.671558954847019f, + 0.666999922303638f, 0.662415777590172f, 0.657806693297079f, 0.653172842953777f, 0.648514401022113f, 0.643831542889791f, 0.639124444863776f, 0.634393284163645f, + 0.629638238914927f, 0.624859488142386f, 0.620057211763289f, 0.615231590580627f, 0.610382806276310f, 0.605511041404326f, 0.600616479383869f, 0.595699304492433f, + 0.590759701858874f, 0.585797857456439f, 0.580813958095765f, 0.575808191417845f, 0.570780745886967f, 0.565731810783613f, 0.560661576197336f, 0.555570233019602f, + 0.550457972936605f, 0.545324988422046f, 0.540171472729893f, 0.534997619887097f, 0.529803624686295f, 0.524589682678469f, 0.519355990165590f, 0.514102744193222f, + 0.508830142543107f, 0.503538383725718f, 0.498227666972782f, 0.492898192229784f, 0.487550160148436f, 0.482183772079123f, 0.476799230063322f, 0.471396736825998f, + 0.465976495767966f, 0.460538710958240f, 0.455083587126344f, 0.449611329654607f, 0.444122144570429f, 0.438616238538528f, 0.433093818853152f, 0.427555093430282f, + 0.422000270799800f, 0.416429560097637f, 0.410843171057904f, 0.405241314004990f, 0.399624199845647f, 0.393992040061048f, 0.388345046698827f, 0.382683432365090f, + 0.377007410216418f, 0.371317193951838f, 0.365612997804774f, 0.359895036534988f, 0.354163525420490f, 0.348418680249435f, 0.342660717311994f, 0.336889853392220f, + 0.331106305759876f, 0.325310292162263f, 0.319502030816016f, 0.313681740398891f, 0.307849640041535f, 0.302005949319228f, 0.296150888243624f, 0.290284677254462f, + 0.284407537211272f, 0.278519689385053f, 0.272621355449949f, 0.266712757474898f, 0.260794117915276f, 0.254865659604515f, 0.248927605745720f, 0.242980179903264f, + 0.237023605994367f, 0.231058108280671f, 0.225083911359793f, 0.219101240156870f, 0.213110319916091f, 0.207111376192219f, 0.201104634842092f, 0.195090322016129f, + 0.189068664149806f, 0.183039887955141f, 0.177004220412149f, 0.170961888760301f, 0.164913120489970f, 0.158858143333861f, 0.152797185258444f, 0.146730474455362f, + 0.140658239332850f, 0.134580708507126f, 0.128498110793793f, 0.122410675199216f, 0.116318630911905f, 0.110222207293883f, 0.104121633872055f, 0.098017140329561f, + 0.091908956497133f, 0.085797312344440f, 0.079682437971430f, 0.073564563599668f, 0.067443919563664f, 0.061320736302208f, 0.055195244349690f, 0.049067674327418f, + 0.042938256934941f, 0.036807222941359f, 0.030674803176637f, 0.024541228522912f, 0.018406729905805f, 0.012271538285720f, 0.006135884649155f, 0.000000000000000f, + -0.006135884649155f, -0.012271538285720f, -0.018406729905805f, -0.024541228522912f, -0.030674803176637f, -0.036807222941359f, -0.042938256934941f, -0.049067674327418f, + -0.055195244349690f, -0.061320736302208f, -0.067443919563664f, -0.073564563599667f, -0.079682437971430f, -0.085797312344440f, -0.091908956497133f, -0.098017140329561f, + -0.104121633872054f, -0.110222207293883f, -0.116318630911904f, -0.122410675199216f, -0.128498110793793f, -0.134580708507126f, -0.140658239332849f, -0.146730474455362f, + -0.152797185258443f, -0.158858143333861f, -0.164913120489970f, -0.170961888760301f, -0.177004220412149f, -0.183039887955141f, -0.189068664149806f, -0.195090322016128f, + -0.201104634842092f, -0.207111376192219f, -0.213110319916091f, -0.219101240156870f, -0.225083911359793f, -0.231058108280671f, -0.237023605994367f, -0.242980179903264f, + -0.248927605745720f, -0.254865659604514f, -0.260794117915276f, -0.266712757474898f, -0.272621355449949f, -0.278519689385053f, -0.284407537211272f, -0.290284677254462f, + -0.296150888243624f, -0.302005949319228f, -0.307849640041535f, -0.313681740398891f, -0.319502030816016f, -0.325310292162263f, -0.331106305759876f, -0.336889853392220f, + -0.342660717311994f, -0.348418680249435f, -0.354163525420490f, -0.359895036534988f, -0.365612997804774f, -0.371317193951837f, -0.377007410216418f, -0.382683432365090f, + -0.388345046698826f, -0.393992040061048f, -0.399624199845647f, -0.405241314004990f, -0.410843171057904f, -0.416429560097637f, -0.422000270799800f, -0.427555093430282f, + -0.433093818853152f, -0.438616238538527f, -0.444122144570429f, -0.449611329654607f, -0.455083587126344f, -0.460538710958240f, -0.465976495767966f, -0.471396736825998f, + -0.476799230063322f, -0.482183772079123f, -0.487550160148436f, -0.492898192229784f, -0.498227666972782f, -0.503538383725717f, -0.508830142543107f, -0.514102744193222f, + -0.519355990165590f, -0.524589682678469f, -0.529803624686295f, -0.534997619887097f, -0.540171472729893f, -0.545324988422046f, -0.550457972936605f, -0.555570233019602f, + -0.560661576197336f, -0.565731810783613f, -0.570780745886967f, -0.575808191417845f, -0.580813958095764f, -0.585797857456439f, -0.590759701858874f, -0.595699304492433f, + -0.600616479383869f, -0.605511041404325f, -0.610382806276309f, -0.615231590580627f, -0.620057211763289f, -0.624859488142386f, -0.629638238914927f, -0.634393284163645f, + -0.639124444863776f, -0.643831542889791f, -0.648514401022112f, -0.653172842953777f, -0.657806693297079f, -0.662415777590172f, -0.666999922303637f, -0.671558954847018f, + -0.676092703575316f, -0.680600997795453f, -0.685083667772700f, -0.689540544737067f, -0.693971460889654f, -0.698376249408973f, -0.702754744457225f, -0.707106781186547f +}; + + +const float Asr_LP32[41] = +{ + 0.00000000f, 0.00074311f, 0.00168152f, 0.00177319f, -0.00000000f, -0.00345938f, -0.00653664f, -0.00604727f, + 0.00000000f, 0.00988729f, 0.01759782f, 0.01556464f, -0.00000000f, -0.02426962f, -0.04321351f, -0.03907450f, + 0.00000000f, 0.07133152f, 0.15563209f, 0.22382514f, 0.25000000f, 0.22382514f, 0.15563209f, 0.07133152f, + 0.00000000f, -0.03907450f, -0.04321351f, -0.02426962f, -0.00000000f, 0.01556464f, 0.01759782f, 0.00988729f, + 0.00000000f, -0.00604727f, -0.00653664f, -0.00345938f, -0.00000000f, 0.00177319f, 0.00168152f, 0.00074311f, + 0.00000000f +}; + + +const float Asr_LP16[21] = +{ + 0.00000000f, 0.00336304f, -0.00000000f, -0.01307328f, 0.00000000f, 0.03519564f, -0.00000000f, -0.08642702f, + 0.00000000f, 0.31126418f, 0.50000000f, 0.31126418f, 0.00000000f, -0.08642702f, -0.00000000f, 0.03519564f, + 0.00000000f, -0.01307328f, -0.00000000f, 0.00336304f, 0.00000000f +}; + + +const float Asr_LP48[61] = +{ + 0.00000000f, 0.00029287f, 0.00071673f, 0.00112101f, 0.00127506f, 0.00094416f, -0.00000000f, -0.00147233f, + -0.00311928f, -0.00435776f, -0.00452368f, -0.00310585f, 0.00000000f, 0.00430863f, 0.00872382f, 0.01173188f, + 0.01180048f, 0.00789952f, -0.00000000f, -0.01061594f, -0.02137287f, -0.02880901f, -0.02932326f, -0.02010347f, + 0.00000000f, 0.02990484f, 0.06622310f, 0.10375473f, 0.13646949f, 0.15876038f, 0.16666667f, 0.15876038f, + 0.13646949f, 0.10375473f, 0.06622310f, 0.02990484f, 0.00000000f, -0.02010347f, -0.02932326f, -0.02880901f, + -0.02137287f, -0.01061594f, -0.00000000f, 0.00789952f, 0.01180048f, 0.01173188f, 0.00872382f, 0.00430863f, + 0.00000000f, -0.00310585f, -0.00452368f, -0.00435776f, -0.00311928f, -0.00147233f, -0.00000000f, 0.00094416f, + 0.00127506f, 0.00112101f, 0.00071673f, 0.00029287f, 0.00000000f +}; + +const int16_t fft256_read_indexes[]= +{ + 0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, + 8, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, + 4, 132, 68, 196, 36, 164, 100, 228, 20, 148, 84, 212, 52, 180, 116, 244, + 12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, + 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, + 10, 138, 74, 202, 42, 170, 106, 234, 26, 154, 90, 218, 58, 186, 122, 250, + 6, 134, 70, 198, 38, 166, 102, 230, 22, 150, 86, 214, 54, 182, 118, 246, + 14, 142, 78, 206, 46, 174, 110, 238, 30, 158, 94, 222, 62, 190, 126, 254, + 1, 129, 65, 193, 33, 161, 97, 225, 17, 145, 81, 209, 49, 177, 113, 241, + 9, 137, 73, 201, 41, 169, 105, 233, 25, 153, 89, 217, 57, 185, 121, 249, + 5, 133, 69, 197, 37, 165, 101, 229, 21, 149, 85, 213, 53, 181, 117, 245, + 13, 141, 77, 205, 45, 173, 109, 237, 29, 157, 93, 221, 61, 189, 125, 253, + 3, 131, 67, 195, 35, 163, 99, 227, 19, 147, 83, 211, 51, 179, 115, 243, + 11, 139, 75, 203, 43, 171, 107, 235, 27, 155, 91, 219, 59, 187, 123, 251, + 7, 135, 71, 199, 39, 167, 103, 231, 23, 151, 87, 215, 55, 183, 119, 247, + 15, 143, 79, 207, 47, 175, 111, 239, 31, 159, 95, 223, 63, 191, 127, 255 +}; + + +/*----------------------------------------------------------------------------------* + * Sinus & Cosinus - table for the DCT-IV based 2 + *----------------------------------------------------------------------------------*/ + +const float sin_table256[] = +{ + 0.003067957f, 0.009203755f, 0.015339206f, 0.02147408f, 0.027608146f, 0.033741172f, 0.039872928f, 0.046003182f, 0.052131705f, + 0.058258265f, 0.064382631f, 0.070504573f, 0.076623861f, 0.082740265f, 0.088853553f, 0.094963495f, 0.101069863f, 0.107172425f, + 0.113270952f, 0.119365215f, 0.125454983f, 0.131540029f, 0.137620122f, 0.143695033f, 0.149764535f, 0.155828398f, 0.161886394f, + 0.167938295f, 0.173983873f, 0.180022901f, 0.186055152f, 0.192080397f, 0.198098411f, 0.204108966f, 0.210111837f, 0.216106797f, + 0.222093621f, 0.228072083f, 0.234041959f, 0.240003022f, 0.24595505f, 0.251897818f, 0.257831102f, 0.263754679f, 0.269668326f, + 0.275571819f, 0.281464938f, 0.28734746f, 0.293219163f, 0.299079826f, 0.30492923f, 0.310767153f, 0.316593376f, 0.322407679f, + 0.328209844f, 0.333999651f, 0.339776884f, 0.345541325f, 0.351292756f, 0.357030961f, 0.362755724f, 0.36846683f, 0.374164063f, + 0.379847209f, 0.385516054f, 0.391170384f, 0.396809987f, 0.402434651f, 0.408044163f, 0.413638312f, 0.419216888f, 0.424779681f, + 0.430326481f, 0.43585708f, 0.441371269f, 0.44686884f, 0.452349587f, 0.457813304f, 0.463259784f, 0.468688822f, 0.474100215f, + 0.479493758f, 0.484869248f, 0.490226483f, 0.495565262f, 0.500885383f, 0.506186645f, 0.51146885f, 0.516731799f, 0.521975293f, + 0.527199135f, 0.532403128f, 0.537587076f, 0.542750785f, 0.547894059f, 0.553016706f, 0.558118531f, 0.563199344f, 0.568258953f, + 0.573297167f, 0.578313796f, 0.583308653f, 0.588281548f, 0.593232295f, 0.598160707f, 0.603066599f, 0.607949785f, 0.612810082f, + 0.617647308f, 0.622461279f, 0.627251815f, 0.632018736f, 0.636761861f, 0.641481013f, 0.646176013f, 0.650846685f, 0.655492853f, + 0.660114342f, 0.664710978f, 0.669282588f, 0.673829f, 0.678350043f, 0.682845546f, 0.687315341f, 0.691759258f, 0.696177131f, + 0.700568794f, 0.70493408f, 0.709272826f, 0.713584869f, 0.717870045f, 0.722128194f, 0.726359155f, 0.730562769f, 0.734738878f, + 0.738887324f, 0.743007952f, 0.747100606f, 0.751165132f, 0.755201377f, 0.759209189f, 0.763188417f, 0.767138912f, 0.771060524f, + 0.774953107f, 0.778816512f, 0.782650596f, 0.786455214f, 0.790230221f, 0.793975478f, 0.797690841f, 0.801376172f, 0.805031331f, + 0.808656182f, 0.812250587f, 0.815814411f, 0.81934752f, 0.822849781f, 0.826321063f, 0.829761234f, 0.833170165f, 0.836547727f, + 0.839893794f, 0.84320824f, 0.846490939f, 0.849741768f, 0.852960605f, 0.856147328f, 0.859301818f, 0.862423956f, 0.865513624f, + 0.868570706f, 0.871595087f, 0.874586652f, 0.87754529f, 0.880470889f, 0.883363339f, 0.88622253f, 0.889048356f, 0.891840709f, + 0.894599486f, 0.897324581f, 0.900015892f, 0.902673318f, 0.905296759f, 0.907886116f, 0.910441292f, 0.91296219f, 0.915448716f, + 0.917900776f, 0.920318277f, 0.922701128f, 0.925049241f, 0.927362526f, 0.929640896f, 0.931884266f, 0.93409255f, 0.936265667f, + 0.938403534f, 0.940506071f, 0.942573198f, 0.944604837f, 0.946600913f, 0.94856135f, 0.950486074f, 0.952375013f, 0.954228095f, + 0.956045251f, 0.957826413f, 0.959571513f, 0.961280486f, 0.962953267f, 0.964589793f, 0.966190003f, 0.967753837f, 0.969281235f, + 0.970772141f, 0.972226497f, 0.97364425f, 0.975025345f, 0.976369731f, 0.977677358f, 0.978948175f, 0.980182136f, 0.981379193f, + 0.982539302f, 0.983662419f, 0.984748502f, 0.985797509f, 0.986809402f, 0.987784142f, 0.988721692f, 0.989622017f, 0.990485084f, + 0.99131086f, 0.992099313f, 0.992850414f, 0.993564136f, 0.994240449f, 0.994879331f, 0.995480755f, 0.996044701f, 0.996571146f, + 0.99706007f, 0.997511456f, 0.997925286f, 0.998301545f, 0.998640218f, 0.998941293f, 0.999204759f, 0.999430605f, 0.999618822f, + 0.999769405f, 0.999882347f, 0.999957645f, 0.999995294f +}; + + +/*----------------------------------------------------------------------------------* + * 1/4 resolution interpolation filter (-3 dB at 0.913*fs/2) + *----------------------------------------------------------------------------------*/ + +const float inter4_2[65] = +{ + 0.940000f, + 0.856390f, 0.632268f, 0.337560f, 0.059072f, + -0.131059f, -0.199393f, -0.158569f, -0.056359f, + 0.047606f, 0.106749f, 0.103705f, 0.052062f, + -0.015182f, -0.063705f, -0.073660f, -0.046497f, + -0.000983f, 0.038227f, 0.053143f, 0.040059f, + 0.009308f, -0.021674f, -0.037767f, -0.033186f, + -0.013028f, 0.010702f, 0.025901f, 0.026318f, + 0.013821f, -0.003645f, -0.016813f, -0.019855f, + -0.012766f, -0.000530f, 0.010080f, 0.014122f, + 0.010657f, 0.002594f, -0.005363f, -0.009344f, + -0.008101f, -0.003182f, 0.002330f, 0.005635f, + 0.005562f, 0.002844f, -0.000627f, -0.002993f, + -0.003362f, -0.002044f, -0.000116f, 0.001315f, + 0.001692f, 0.001151f, 0.000259f, -0.000417f, + -0.000618f, -0.000434f, -0.000133f, 0.000063f, + 0.000098f, 0.000048f, 0.000007f, 0.000000f +}; + + +/*----------------------------------------------------------------------------------* + * 1/6 resolution interpolation filter (-3 dB at 0.95*fs/2) + *----------------------------------------------------------------------------------*/ + +const float inter6_2[PIT_FIR_SIZE6_2] = +{ + 0.949986374119862F, 0.911081104469830F, 0.800115099292852F, 0.633320673120883F, 0.434558462154083F, 0.231177017786780F, + 0.049378173063717F, -0.090039611811170F, -0.174782560924477F, -0.202477516286360F, -0.180218293244902F, -0.122429229978978F, + -0.047552067127379F, 0.025733669494145F, 0.081995376731897F, 0.111581381838187F, 0.111781798292302F, 0.086499988914996F, + 0.044629684447068F, -0.002416435594242F, -0.043440027386915F, -0.069857782812169F, -0.077293683967992F, -0.066098268486336F, + -0.040782649068098F, -0.008590773415008F, 0.022397654632128F, 0.045171360007974F, 0.055274128677739F, 0.051578034020076F, + 0.036232016917169F, 0.013869500422767F, -0.009680698856947F, -0.028843394410080F, -0.039560663181280F, -0.040095747151623F, + -0.031231107680685F, -0.015866154815425F, 0.001841532922707F, 0.017553701334759F, 0.027778555138199F, 0.030612329573745F, + 0.026046143652186F, 0.015803012695681F, 0.002782973481834F, -0.009720124055079F, -0.018826488463900F, -0.022710487805852F, + -0.020936374578238F, -0.014436620433404F, -0.005169079181373F, 0.004437651243491F, 0.012100372954920F, 0.016207075406240F, + 0.016135389123271F, 0.012306629559665F, 0.005986734945567F, -0.001094950878591F, -0.007200842219958F, -0.010998212848124F, + -0.011835179448280F, -0.009826566540474F, -0.005747665080695F, -0.000780600030751F, 0.003810613287985F, 0.006990479233404F, + 0.008174249796791F, 0.007317375965949F, 0.004864690818765F, 0.001587005259212F, -0.001642504305841F, -0.004070609517416F, + -0.005230670504649F, -0.005019147682711F, -0.003673879223241F, -0.001671460853812F, 0.000420750005150F, 0.002095384947391F, + 0.003020513665060F, 0.003095468528243F, 0.002441025550729F, 0.001335514431569F, 0.000120805384516F, -0.000893340757369F, + -0.001501610712267F, -0.001636887611783F, -0.001362571776250F, -0.000832126175863F, -0.000232033375863F, 0.000273627139471F, + 0.000582092683087F, 0.000666445711949F, 0.000566088888178F, 0.000360374058147F, 0.000136306914913F, -0.000038864994777F, + -0.000132755824518F, -0.000148377158880F, -0.000112937171810F, -0.000061132514471F, -0.000019974224468F, -0.000000460344975F, + 0.000001976848453F +}; + + +/*----------------------------------------------------------------------------------* + * Low-pass FIR filter for low-frequency post-filtering @ 16kHz + * response : -6dB @ 50Hz, -3dB @ 500Hz, -6dB @ 6.4kHz) + * L_FILT=15 @ 16kHz (1+4x15=61 coef) + * L_FILT=12 @ 12.8kHz (1+5x12=61 coef) + * filter parameters: fs/2=32000, fc=6400, gain=5.0, n=61 + *----------------------------------------------------------------------------------*/ + +static const float filter_LP12_180H[] = /* Sincfilt.m: N=180*2+1, Fmin=0, Fmax=1/12, hann( N )' */ +{ + 1.00000000f, 0.98854064f, 0.95463880f, 0.89969939f, 0.82598609f, 0.73650898f, + 0.63487604f, 0.52511631f, 0.41148461f, 0.29825804f, 0.18953518f, 0.08904855f, + 0.00000000f, -0.07507283f, -0.13439242f, -0.17699551f, -0.20274380f, -0.21229157f, + -0.20701353f, -0.18889782f, -0.16041129f, -0.12434529f, -0.08365114f, -0.04127482f, + -0.00000000f, 0.03769212f, 0.06973903f, 0.09458356f, 0.11122751f, 0.11925054f, + 0.11879487f, 0.11051837f, 0.09552022f, 0.07524478f, 0.05137065f, 0.02569204f, + 0.00000000f, -0.02402919f, -0.04493222f, -0.06153821f, -0.07302535f, -0.07895262f, + -0.07926575f, -0.07427839f, -0.06463103f, -0.05123120f, -0.03517999f, -0.01768990f, + -0.00000000f, 0.01670619f, 0.03137493f, 0.04314423f, 0.05139005f, 0.05575472f, + 0.05615642f, 0.05278011f, 0.04605151f, 0.03659641f, 0.02518906f, 0.01269314f, + 0.00000000f, -0.01203202f, -0.02263294f, -0.03116789f, -0.03717261f, -0.04037571f, + -0.04070711f, -0.03829248f, -0.03343501f, -0.02658610f, -0.01830764f, -0.00922872f, + -0.00000000f, 0.00875109f, 0.01646140f, 0.02266671f, 0.02702792f, 0.02934764f, + 0.02957617f, 0.02780739f, 0.02426498f, 0.01928068f, 0.01326622f, 0.00668131f, + 0.00000000f, -0.00632223f, -0.01187840f, -0.01633509f, -0.01945125f, -0.02108964f, + -0.02122066f, -0.01991853f, -0.01735069f, -0.01376125f, -0.00945018f, -0.00474975f, + -0.00000000f, 0.00447492f, 0.00838805f, 0.01150721f, 0.01366775f, 0.01478001f, + 0.01483115f, 0.01388152f, 0.01205626f, 0.00953282f, 0.00652562f, 0.00326903f, + 0.00000000f, -0.00305850f, -0.00571204f, -0.00780638f, -0.00923565f, -0.00994662f, + -0.00993903f, -0.00926212f, -0.00800799f, -0.00630232f, -0.00429337f, -0.00214002f, + -0.00000000f, 0.00198116f, 0.00367946f, 0.00499962f, 0.00587975f, 0.00629327f, + 0.00624819f, 0.00578397f, 0.00496633f, 0.00388057f, 0.00262394f, 0.00129781f, + 0.00000000f, -0.00118189f, -0.00217597f, -0.00292996f, -0.00341330f, -0.00361747f, + -0.00355476f, -0.00325545f, -0.00276400f, -0.00213446f, -0.00142560f, -0.00069606f, + -0.00000000f, 0.00061651f, 0.00111820f, 0.00148212f, 0.00169815f, 0.00176842f, + 0.00170582f, 0.00153178f, 0.00127370f, 0.00096205f, 0.00062756f, 0.00029879f, + -0.00000000f, -0.00025029f, -0.00044009f, -0.00056414f, -0.00062342f, -0.00062426f, + -0.00057701f, -0.00049453f, -0.00039069f, -0.00027889f, -0.00017088f, -0.00007586f, + -0.00000000f, 0.00005374f, 0.00008534f, 0.00009723f, 0.00009358f, 0.00007948f, + 0.00006013f, 0.00004011f, 0.00002289f, 0.00001046f, 0.00000327f, 0.00000042f, + 0.00000000f +}; + +static const float filter_LP15_180H[] = /* Sincfilt.m: N=180*2+1, Fmin=0, Fmax=1/15, hann( N )' */ +{ + 1.00000000f, 0.99262960f, 0.97071645f, 0.93484826f, 0.88598337f, + 0.82541986f, 0.75475374f, 0.67582786f, 0.59067328f, 0.50144522f, + 0.41035570f, 0.31960540f, 0.23131699f, 0.14747211f, 0.06985439f, + 0.00000000f, -0.06084233f, -0.11174093f, -0.15209937f, -0.18166306f, + -0.20051411f, -0.20905505f, -0.20798222f, -0.19825005f, -0.18102779f, + -0.15765038f, -0.12956550f, -0.09827869f, -0.06529875f, -0.03208525f, + -0.00000000f, 0.02973580f, 0.05607741f, 0.07818439f, 0.09543959f, + 0.10745905f, 0.11409270f, 0.11541631f, 0.11171520f, 0.10346089f, + 0.09128169f, 0.07592875f, 0.05823905f, 0.03909687f, 0.01939543f, + 0.00000000f, -0.01828583f, -0.03474981f, -0.04879543f, -0.05996041f, + -0.06792872f, -0.07253607f, -0.07376881f, -0.07175666f, -0.06675991f, + -0.05915169f, -0.04939656f, -0.03802614f, -0.02561328f, -0.01274565f, + -0.00000000f, 0.01208179f, 0.02301411f, 0.03238554f, 0.03987272f, + 0.04524984f, 0.04839345f, 0.04928266f, 0.04799492f, 0.04469779f, + 0.03963720f, 0.03312292f, 0.02551190f, 0.01719053f, 0.00855630f, + 0.00000000f, -0.00811094f, -0.01544730f, -0.02173055f, -0.02674237f, + -0.03033123f, -0.03241557f, -0.03298387f, -0.03209149f, -0.02985488f, + -0.02644325f, -0.02206842f, -0.01697326f, -0.01141932f, -0.00567433f, + -0.00000000f, 0.00535923f, 0.01018613f, 0.01429886f, 0.01755714f, + 0.01986621f, 0.02117865f, 0.02149380f, 0.02085525f, 0.01934645f, + 0.01708469f, 0.01421394f, 0.01089691f, 0.00730662f, 0.00361802f, + 0.00000000f, -0.00339188f, -0.00642164f, -0.00897788f, -0.01097732f, + -0.01236693f, -0.01312444f, -0.01325748f, -0.01280137f, -0.01181573f, + -0.01038024f, -0.00858967f, -0.00654854f, -0.00436567f, -0.00214887f, + -0.00000000f, 0.00198936f, 0.00374143f, 0.00519494f, 0.00630684f, + 0.00705299f, 0.00742798f, 0.00744401f, 0.00712902f, 0.00652419f, + 0.00568101f, 0.00465798f, 0.00351733f, 0.00232168f, 0.00113102f, + 0.00000000f, -0.00102431f, -0.00190408f, -0.00261180f, -0.00313077f, + -0.00345499f, -0.00358855f, -0.00354447f, -0.00334328f, -0.00301127f, + -0.00257862f, -0.00207746f, -0.00154002f, -0.00099694f, -0.00047581f, + -0.00000000f, 0.00041214f, 0.00074776f, 0.00099963f, 0.00116592f, + 0.00124972f, 0.00125829f, 0.00120217f, 0.00109420f, 0.00094845f, + 0.00077928f, 0.00060035f, 0.00042395f, 0.00026030f, 0.00011724f, + 0.00000000f, -0.00008882f, -0.00014902f, -0.00018252f, -0.00019287f, + -0.00018476f, -0.00016347f, -0.00013434f, -0.00010230f, -0.00007148f, + -0.00004496f, -0.00002456f, -0.00001086f, -0.00000332f, -0.00000042f, + -0.00000000f +}; + +static const float filter_LP24_90H[] = { + + 0.62500000f, 0.62302684f, 0.61713239f, 0.60739135f, 0.59392688f, + 0.57690853f, 0.55654955f, 0.53310336f, 0.50685949f, 0.47813890f, + 0.44728886f, 0.41467745f, 0.38068777f, 0.34571201f, 0.31014542f, + 0.27438036f, 0.23880054f, 0.20377540f, 0.16965495f, 0.13676502f, + 0.10540301f, 0.07583422f, 0.04828883f, 0.02295955f, 0.00000000f, + -0.02047625f, -0.03839588f, -0.05372532f, -0.06646962f, -0.07667063f, + -0.08440465f, -0.08977957f, -0.09293151f, -0.09402116f, -0.09322978f, + -0.09075508f, -0.08680689f, -0.08160288f, -0.07536433f, -0.06831205f, + -0.06066245f, -0.05262401f, -0.04439397f, -0.03615555f, -0.02807546f, + -0.02030199f, -0.01296350f, -0.00616748f, -0.00000000f, 0.00547430f, + 0.01021181f, 0.01418909f, 0.01740171f, 0.01986272f, 0.02160081f, + 0.02265833f, 0.02308912f, 0.02295617f, 0.02232938f, 0.02128318f, + 0.01989437f, 0.01823991f, 0.01639502f, 0.01443144f, 0.01241584f, + 0.01040857f, 0.00846270f, 0.00662323f, 0.00492667f, 0.00340087f, + 0.00206511f, 0.00093039f, 0.00000000f, -0.00072977f, -0.00126877f, + -0.00163197f, -0.00183843f, -0.00191018f, -0.00187107f, -0.00174574f, + -0.00155856f, -0.00133271f, -0.00108939f, -0.00084707f, -0.00062106f, + -0.00042304f, -0.00026095f, -0.00013888f, -0.00005723f, -0.00001296f, + -0.00000000f, -0.00000000f, -0.00000000f, -0.00000000f, -0.00000000f, + -0.00000000f, + -0.00000000f +}; + + +static const float filter_LP3_90H[] = /* Sincfilt.m: N=90*2+1, Fmin=0, Fmax=1/3, hann( N )' */ +{ + 1.00000000f, 0.82674145f, 0.41299304f, 0.00000000f, -0.20574231f, -0.16414228f, + -0.00000000f, 0.11638725f, 0.10137190f, 0.00000000f, -0.08020564f, -0.07244401f, + -0.00000000f, 0.06039577f, 0.05561375f, 0.00000000f, -0.04776011f, -0.04448829f, + -0.00000000f, 0.03891245f, 0.03651267f, 0.00000000f, -0.03231551f, -0.03046677f, + -0.00000000f, 0.02717149f, 0.02569502f, 0.00000000f, -0.02302575f, -0.02181436f, + -0.00000000f, 0.01960070f, 0.01858630f, 0.00000000f, -0.01671751f, -0.01585488f, + -0.00000000f, 0.01425599f, 0.01351396f, -0.00000000f, -0.01213249f, -0.01148889f, + -0.00000000f, 0.01028699f, 0.00972562f, 0.00000000f, -0.00867534f, -0.00818410f, + -0.00000000f, 0.00726427f, 0.00683387f, -0.00000000f, -0.00602813f, -0.00565135f, + -0.00000000f, 0.00494677f, 0.00461782f, 0.00000000f, -0.00400399f, -0.00371817f, + -0.00000000f, 0.00318651f, 0.00293988f, -0.00000000f, -0.00248317f, -0.00227240f, + -0.00000000f, 0.00188444f, 0.00170665f, 0.00000000f, -0.00138200f, -0.00123460f, + -0.00000000f, 0.00096839f, 0.00084908f, -0.00000000f, -0.00063685f, -0.00054348f, + 0.00000000f, 0.00038113f, 0.00031171f, 0.00000000f, -0.00019534f, -0.00014798f, + -0.00000000f, 0.00007391f, 0.00004679f, -0.00000000f, -0.00001145f, -0.00000283f, + -0.00000000f +}; + +static const float filter_LP15_360H[] = /* Sincfilt.m: N=360*2+1, Fmin=0, Fmax=1/15, hann( N )' */ +{ + 1.00000000f, 0.99268640f, 0.97093867f, 0.93532989f, 0.88679510f, 0.82660196f, 0.75631099f, 0.67772690f, + 0.59284259f, 0.50377777f, 0.41271428f, 0.32183024f, 0.23323527f, 0.14890901f, 0.07064471f, 0.00000000f, + -0.06174384f, -0.11361280f, -0.15496039f, -0.18547676f, -0.20518652f, -0.21443575f, -0.21386869f, -0.20439528f, + -0.18715077f, -0.16344917f, -0.13473211f, -0.10251518f, -0.06833357f, -0.03368904f, -0.00000000f, 0.03144362f, + 0.05951924f, 0.08330302f, 0.10209294f, 0.11542293f, 0.12306791f, 0.12503981f, 0.12157498f, 0.11311391f, + 0.10027413f, 0.08381753f, 0.06461370f, 0.04360066f, 0.02174455f, 0.00000000f, -0.02072746f, -0.03961549f, + -0.05595444f, -0.06917113f, -0.07884629f, -0.08472521f, -0.08672137f, -0.08491313f, -0.07953401f, -0.07095693f, + -0.05967349f, -0.04626915f, -0.03139548f, -0.01574075f, -0.00000000f, 0.01515402f, 0.02909808f, 0.04128258f, + 0.05125197f, 0.05866038f, 0.06328236f, 0.06501815f, 0.06389360f, 0.06005485f, 0.05375815f, 0.04535547f, + 0.03527650f, 0.02400801f, 0.01207150f, 0.00000000f, -0.01168480f, -0.02249426f, -0.03199250f, -0.03981317f, + -0.04567293f, -0.04938087f, -0.05084386f, -0.05006752f, -0.04715306f, -0.04229010f, -0.03574599f, -0.02785210f, + -0.01898788f, -0.00956319f, -0.00000000f, 0.00928603f, 0.01790311f, 0.02549938f, 0.03177686f, 0.03650265f, + 0.03951708f, 0.04073850f, 0.04016462f, 0.03787037f, 0.03400261f, 0.02877179f, 0.02244121f, 0.01531429f, + 0.00772039f, 0.00000000f, -0.00751019f, -0.01449168f, -0.02065736f, -0.02576304f, -0.02961675f, -0.03208568f, + -0.03310029f, -0.03265561f, -0.03080978f, -0.02767986f, -0.02343523f, -0.01828891f, -0.01248723f, -0.00629832f, + -0.00000000f, 0.00613249f, 0.01183829f, 0.01688181f, 0.02106227f, 0.02422142f, 0.02624931f, 0.02708778f, + 0.02673160f, 0.02522739f, 0.02267018f, 0.01919813f, 0.01498536f, 0.01023356f, 0.00516248f, 0.00000000f, + -0.00502795f, -0.00970715f, -0.01384402f, -0.01727353f, -0.01986554f, -0.02152959f, -0.02221779f, -0.02192576f, + -0.02069173f, -0.01859376f, -0.01574532f, -0.01228947f, -0.00839187f, -0.00423301f, -0.00000000f, 0.00412174f, + 0.00795646f, 0.01134547f, 0.01415358f, 0.01627438f, 0.01763405f, 0.01819377f, 0.01795046f, 0.01693597f, + 0.01521482f, 0.01288044f, 0.01005046f, 0.00686086f, 0.00345963f, 0.00000000f, -0.00336638f, -0.00649597f, + -0.00925939f, -0.01154665f, -0.01327141f, -0.01437412f, -0.01482390f, -0.01461907f, -0.01378646f, -0.01237944f, + -0.01047492f, -0.00816931f, -0.00557380f, -0.00280912f, -0.00000000f, 0.00273035f, 0.00526559f, 0.00750113f, + 0.00934836f, 0.01073805f, 0.01162284f, 0.01197870f, 0.01180528f, 0.01112531f, 0.00998290f, 0.00844105f, + 0.00657831f, 0.00448494f, 0.00225863f, -0.00000000f, -0.00219185f, -0.00422367f, -0.00601190f, -0.00748609f, + -0.00859158f, -0.00929139f, -0.00956735f, -0.00942030f, -0.00886950f, -0.00795125f, -0.00671674f, -0.00522941f, + -0.00356175f, -0.00179189f, -0.00000000f, 0.00173531f, 0.00334034f, 0.00474942f, 0.00590751f, 0.00677226f, + 0.00731550f, 0.00752400f, 0.00739958f, 0.00695854f, 0.00623048f, 0.00525657f, 0.00408738f, 0.00278032f, + 0.00139692f, 0.00000000f, -0.00134916f, -0.00259345f, -0.00368229f, -0.00457361f, -0.00523547f, -0.00564706f, + -0.00579926f, -0.00569462f, -0.00534685f, -0.00477983f, -0.00402617f, -0.00312550f, -0.00212248f, -0.00106459f, + -0.00000000f, 0.00102461f, 0.00196604f, 0.00278637f, 0.00345440f, 0.00394682f, 0.00424892f, 0.00435488f, + 0.00426778f, 0.00399900f, 0.00356752f, 0.00299868f, 0.00232288f, 0.00157398f, 0.00078772f, -0.00000000f, + -0.00075466f, -0.00144465f, -0.00204251f, -0.00252601f, -0.00287889f, -0.00309135f, -0.00316023f, -0.00308882f, + -0.00288648f, -0.00256794f, -0.00215242f, -0.00166255f, -0.00112325f, -0.00056046f, -0.00000000f, 0.00053364f, + 0.00101829f, 0.00143502f, 0.00176882f, 0.00200907f, 0.00214985f, 0.00218995f, 0.00213269f, 0.00198558f, + 0.00175975f, 0.00146927f, 0.00113036f, 0.00076058f, 0.00037792f, 0.00000000f, -0.00035672f, -0.00067764f, + -0.00095057f, -0.00116614f, -0.00131812f, -0.00140347f, -0.00142235f, -0.00137791f, -0.00127596f, -0.00112458f, + -0.00093361f, -0.00071406f, -0.00047757f, -0.00023583f, -0.00000000f, 0.00021973f, 0.00041459f, 0.00057751f, + 0.00070338f, 0.00078915f, 0.00083382f, 0.00083835f, 0.00080551f, 0.00073960f, 0.00064615f, 0.00053157f, + 0.00040275f, 0.00026674f, 0.00013039f, -0.00000000f, -0.00011891f, -0.00022183f, -0.00030537f, -0.00036737f, + -0.00040691f, -0.00042423f, -0.00042061f, -0.00039828f, -0.00036014f, -0.00030964f, -0.00025049f, -0.00018648f, + -0.00012124f, -0.00005812f, -0.00000000f, 0.00005082f, 0.00009265f, 0.00012448f, 0.00014596f, 0.00015731f, + 0.00015929f, 0.00015311f, 0.00014024f, 0.00012237f, 0.00010126f, 0.00007860f, 0.00005596f, 0.00003466f, + 0.00001576f, 0.00000000f, -0.00001220f, -0.00002074f, -0.00002578f, -0.00002769f, -0.00002704f, -0.00002448f, + -0.00002068f, -0.00001629f, -0.00001190f, -0.00000794f, -0.00000472f, -0.00000238f, -0.00000092f, -0.00000021f, + -0.00000000f +}; + +static const float filter_LP30_300K[LFE_PLC_FDEL + 1] = /* 800/24000 LP filter, Kaiser(5)-windowed sinc */ +{ + 1.000674458058088f, 0.998821736068880f, 0.993276134431268f, 0.984075242985249f, + 0.971281368567695f, 0.954981023938107f, 0.935284218782909f, 0.912323559230714f, 0.886253164041403f, 0.857247407283176f, 0.825499498868107f, 0.791219915763123f, + 0.754634698015982f, 0.715983624922104f, 0.675518287696807f, 0.633500075899008f, 0.590198095568480f, 0.545887037583023f, 0.500845015109584f, 0.455351389211537f, + 0.409684601681821f, 0.364120033999184f, 0.318927910954646f, 0.274371266971919f, 0.230703992454581f, 0.188168976642057f, 0.146996362454873f, 0.107401927667902f, + 0.069585605480302f, 0.033730156165682f, 0.000000000000000f, -0.031459779907115f, -0.060524257893541f, -0.087089303849186f, -0.111072035585998f, -0.132411083666009f, + -0.151066668632262f, -0.167020492324437f, -0.180275446665744f, -0.190855144963741f, -0.198803282359248f, -0.204182833569538f, -0.207075097490179f, -0.207578599531267f, + -0.205807863756478f, -0.201892067956601f, -0.195973595714002f, -0.188206500292867f, -0.178754895816092f, -0.167791291658583f, -0.155494886295674f, -0.142049836993021f, + -0.127643521710976f, -0.112464809424174f, -0.096702354729368f, -0.080542932136516f, -0.064169824816426f, -0.047761281820773f, -0.031489056906366f, -0.015517041095534f, + -0.000000000000000f, 0.014917574260985f, 0.029102487992906f, 0.042433740493679f, 0.054803282432790f, 0.066116633644684f, 0.076293357387017f, 0.085267389568141f, + 0.092987222893292f, 0.099415947300653f, 0.104531149442952f, 0.108324675303768f, 0.110802261307711f, 0.111983040477936f, 0.111898931302253f, 0.110593917980261f, + 0.108123231629804f, 0.104552442823964f, 0.099956476503483f, 0.094418560858996f, 0.088029122199148f, 0.080884638112374f, 0.073086461390995f, 0.064739627216952f, + 0.055951656010794f, 0.046831364122825f, 0.037487694201930f, 0.028028576619426f, 0.018559832758953f, 0.009184130316920f, 0.000000000000000f, -0.008899077833673f, + -0.017425508954439f, -0.025498336799142f, -0.033043904125797f, -0.039996420202619f, -0.046298430034290f, -0.051901183227281f, -0.056764901197143f, -0.060858942512036f, + -0.064161867237223f, -0.066661402183665f, -0.068354309960014f, -0.069246165671283f, -0.069351045990393f, -0.068691136142401f, -0.067296261078182f, -0.065203347768427f, + -0.062455826114615f, -0.059102976446919f, -0.055199231956630f, -0.050803444690492f, -0.045978123915449f, -0.040788655744719f, -0.035302512901102f, -0.029588463383146f, + -0.023715786597517f, -0.017753505230727f, -0.011769640760391f, -0.005830500056152f, -0.000000000000000f, 0.005660963528005f, 0.011095096591703f, 0.016249233048055f, + 0.021074801008288f, 0.025528226370712f, 0.029571270660946f, 0.033171301203264f, 0.036301492437752f, 0.038940957983168f, 0.041074813816290f, 0.042694173686921f, + 0.043796078605817f, 0.044383362923333f, 0.044464460152907f, 0.044053152279452f, 0.043168266823078f, 0.041833326398573f, 0.040076155916957f, 0.037928452914153f, + 0.035425326761062f, 0.032604812707877f, 0.029507366842562f, 0.026175348099430f, 0.022652493439727f, 0.018983392243758f, 0.015212965806120f, 0.011385957615051f, + 0.007546439827815f, 0.003737341030740f, 0.000000000000000f, -0.003626250237053f, -0.007104464194597f, -0.010400428215978f, -0.013482964409160f, -0.016324191914051f, + -0.018899743729691f, -0.021188937879338f, -0.023174902241370f, -0.024844652917233f, -0.026189126538454f, -0.027203167427198f, -0.027885471013551f, -0.028238485372702f, + -0.028268273171834f, -0.027984336705841f, -0.027399409049342f, -0.026529214656951f, -0.025392203001958f, -0.024009259053660f, -0.022403394554390f, -0.020599424168218f, + -0.018623630634283f, -0.016503423069419f, -0.014266992528252f, -0.011942968845900f, -0.009560082661099f, -0.007146836348458f, -0.004731187380886f, -0.002340247400255f, + -0.000000000000000f, 0.002264960078453f, 0.004431663958549f, 0.006478979817575f, 0.008387796576525f, 0.010141178783251f, 0.011724491753953f, 0.013125496411291f, + 0.014334413626760f, 0.015343958236254f, 0.016149343246852f, 0.016748255086059f, 0.017140801058498f, 0.017329430466152f, 0.017318831113971f, 0.017115803160437f, + 0.016729112480503f, 0.016169325884595f, 0.015448630680760f, 0.014580641176914f, 0.013580194795931f, 0.012463140518288f, 0.011246122375360f, 0.009946360692277f, + 0.008581433723615f, 0.007169062239669f, 0.005726899507575f, 0.004272328972190f, 0.002822271778885f, 0.001393006096850f, 0.000000000000000f, -0.001342240554036f, + -0.002620307334837f, -0.003822007965487f, -0.004936465732805f, -0.005954200495861f, -0.006867190352439f, -0.007668913965032f, -0.008354373683625f, -0.008920099829252f, + -0.009364136717633f, -0.009686011203768f, -0.009886684714174f, -0.009968489901688f, -0.009935053206892f, -0.009791204738949f, -0.009542876996106f, -0.009196994031523f, + -0.008761352733137f, -0.008244497926834f, -0.007655593030480f, -0.007004287982775f, -0.006300586146230f, -0.005554711838727f, -0.004776980084286f, -0.003977670092272f, + -0.003166903876795f, -0.002354531316336f, -0.001550022829358f, -0.000762370706914f, -0.000000000000000f, 0.000729310290334f, 0.001418495126151f, 0.002061260011482f, + 0.002652125955862f, 0.003186462696409f, 0.003660510203508f, 0.004071388640949f, 0.004417097090039f, 0.004696501477237f, 0.004909312264891f, 0.005056052573469f, + 0.005138017500263f, 0.005157225483069f, 0.005116362627157f, 0.005018720969532f, 0.004868131695749f, 0.004668894351409f, 0.004425703102949f, 0.004143571100898f, + 0.003827753983767f, 0.003483673532892f, 0.003116842448631f, 0.002732791167251f, 0.002336997576645f, 0.001934820418900f, 0.001531437089816f, 0.001131786461136f, + 0.000740517261749f, 0.000361942460803f, 0.000000000000000f, -0.000341779874521f, -0.000660300526856f, -0.000952918033795f, -0.001217453508689f, -0.001452198768859f, + -0.001655915552350f, -0.001827828567631f, -0.001967612730984f, -0.002075375010094f, -0.002151631348089f, -0.002197279189590f, -0.002213566168842f, -0.002202055549447f, + -0.002164589025628f, -0.002103247506293f, -0.002020310505568f, -0.001918214757337f, -0.001799512656910f, -0.001666831110806f, -0.001522831346357f, -0.001370170197022f, + -0.001211463337747f, -0.001049250898094f, -0.000885965830111f, -0.000723905353825f, -0.000565205746663f, -0.000411820684990f, -0.000265503287080f, -0.000127791948110f, + -0.000000000000000f +}; + +const Resampling_cfg resampling_cfg_tbl[] = +{ + /* fin fout up.fact. filter coefs. filter length/2 */ + { 8000, 12800, 8, filter5_39s320_120, 15, RS_INV_FAC }, + { 12800, 8000, 5, filter5_39s320_120, L_FILT_UP8k, RS_INV_FAC }, + { 16000, 8000, 6, filter_LP12_180H, 180/6, 0 }, + { 12800, 16000, 15, filter_LP15_180H, L_FILT_UP16k, 0 }, + { 12800, 32000, 15, filter_LP15_180H, L_FILT_UP32k, 0 }, + { 12800, 48000, 15, filter_LP15_180H, L_FILT_UP48k, 0 }, + + { 16000, 12800, 12, filter_LP15_180H, L_FILT16k, 0 }, + { 16000, 32000, 12, filter_LP12_180H, L_FILT16k, 0 }, + { 16000, 48000, 12, filter_LP12_180H, L_FILT16k, 0 }, + + { 32000, 12800, 6, filter_LP15_180H, L_FILT32k, 0 }, + { 32000, 16000, 6, filter_LP12_180H, L_FILT32k, 0 }, + { 32000, 25600, 12, filter_LP15_360H, L_FILT32k, 0 }, + { 32000, 48000, 3, filter_LP3_90H, L_FILT32k, 0 }, + + { 48000, 12800, 4, filter_LP15_180H, L_FILT48k, 0 }, + { 48000, 16000, 4, filter_LP12_180H, L_FILT48k, 0 }, + { 48000, 25600, 8, filter_LP15_360H, L_FILT48k, 0 }, + { 48000, 32000, 2, filter_LP3_90H, L_FILT48k, 0 }, + + /* configs with NB 4kHz low-pass */ + { 16000, 12800, 12, filter_LP24_90H, L_FILT16k, 0 }, + { 32000, 12800, 6, filter_LP24_90H, L_FILT32k, 0 }, + { 48000, 12800, 4, filter_LP24_90H, L_FILT48k, 0 }, + + /* entry for LFE PLC */ + { 1600, 48000, 30, filter_LP30_300K, LFE_PLC_FDEL/30, 0 }, + { 0, 0, 0, 0, 0, 0 } /* trailing entry (just to calculate the length of this table) */ +}; + +/*----------------------------------------------------------------------------------* + * LSP interpolation coefficients + *----------------------------------------------------------------------------------*/ + +const float interpol_frac2[NB_SUBFR] = { + 0.5f, 0.5f, 1.0f, 1.0f +}; + +const float interpol_frac2_mid[NB_SUBFR*3] = { + 0.25f, 0.75f, 0.0f, + 0.25f, 0.75f, 0.0f, + 0.0f, 0.25f, 0.75f, + 0.0f, 0.25f, 0.75f +}; + +const float interpol_frac_12k8[NB_SUBFR] = { + 0.25f, 0.5f, 0.75f, 1.0f +}; + +const float interpol_isp_amr_wb[NB_SUBFR] = { + 0.45f, 0.8f, 0.96f, 1.0f +}; + +const float interpol_frac_16k[NB_SUBFR16k] = { + 0.2f, 0.4f, 0.6f, 0.8f, 1.0f +}; + +const float interpol_frac_mid[NB_SUBFR*3] = { + 0.5f, 0.5f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 0.5f, 0.5f, + 0.0f, 0.0f, 1.0f +}; + +const float interpol_frac_mid_16k[NB_SUBFR16k*3] = { + 0.55f, 0.45f, 0.0f, + 0.15f, 0.85f, 0.0f, + 0.0f, 0.75f, 0.25f, + 0.0f, 0.35f, 0.65f, + 0.0f, 0.0f, 1.0f +}; + +const float interpol_frac_mid_relaxprev_12k8[NB_SUBFR*3] = { + 0.0f, 0.7f, 0.3f, + 0.0f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f +}; + +const float interpol_frac_mid_FEC[NB_SUBFR*3] = { + 0.25f, 0.55f, 0.20f, + 0.00f, 0.70f, 0.30f, + 0.00f, 0.45f, 0.55f, + 0.00f, 0.00f, 1.00f +}; + +const float interpol_frac_mid_relaxprev_pred_12k8[NB_SUBFR*3] = { + 0.15f, 0.70f, 0.15f, + 0.05f, 0.65f, 0.30f, + 0.00f, 0.50f, 0.50f, + 0.00f, 0.0f, 1.00f +}; + +const float interpol_frac_mid_relaxprev_16k[NB_SUBFR16k*3] = { + 0.0f, 0.7f, 0.3f, + 0.0f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f +}; + +const float interpol_frac_mid_16k_FEC[NB_SUBFR16k*3] = { + 0.4f, 0.40f, 0.2f, + 0.0f, 0.80f, 0.20f, + 0.0f, 0.65f, 0.35f, + 0.0f, 0.15f, 0.85f, + 0.0f, 0.00f, 1.00f +}; + +const float interpol_frac_mid_relaxprev_pred_16k[NB_SUBFR16k*3] = { + 0.15f, 0.70f, 0.15f, + 0.05f, 0.65f, 0.30f, + 0.00f, 0.50f, 0.50f, + 0.00f, 0.15f, 0.85f, + 0.00f, 0.0f, 1.00f +}; + +/*----------------------------------------------------------------------------------* + * Innovative codebook + *----------------------------------------------------------------------------------*/ + +/* Innovative codebook config */ +const PulseConfig PulseConfTable[] = +{ + /* Design rules: + * ---> "fixed" + "tried-pair-pos"*2 = pulses & 0xfe + * ---> tracks with pulses % 3 == 0, have always TRACKPOS_FIXED_FIRST */ + /* bits,iter,alp,pulses,fixed,tried-pair-pos,codetrack */ + { 7, 4, 2.0f, 1, 0, {8}, TRACKPOS_FREE_ONE }, /* 7 bits, 1 pulses, 4 tracks, 1000 free track */ + { 10, 4, 2.0f, 2, 0, {8}, TRACKPOS_FIXED_EVEN }, /* 10 bits, 2 pulses, 4 tracks 1010 (used only even tracks designed for NB) */ + { 12, 4, 2.0f, 2, 0, {8}, TRACKPOS_FIXED_TWO }, /* 12 bits, 2 pulses, 2 tracks 11 used all tracks ala AMR-WB 6.6 */ + { 15, 4, 2.0f, 3, 0, {8}, TRACKPOS_FIXED_FIRST }, /* 15 bits, 3 pulses, 4 tracks 1110 fixed track to first ? */ + { 17, 6, 2.0f, 3, 0, {8}, TRACKPOS_FREE_THREE }, /* 17 bits, 3 pulses, 4 tracks (used all tracks) - 1110, 1101, 1011, 0111 */ + { 20, 4, 2.0f, 4, 0, {4, 8}, TRACKPOS_FIXED_FIRST }, /* 20 bits, 4 pulses, 4 tracks 1111 */ + { 24, 4, 2.0f, 5, 0, {4, 8}, TRACKPOS_FIXED_FIRST }, /* 24 bits, 5 pulses, 4 tracks 2111 fixed track to first */ + { 26, 4, 2.0f, 5, 0, {4, 8}, TRACKPOS_FREE_ONE }, /* 26 bits, 5 pulses, 4 tracks 2111 one free track ? */ + { 28, 4, 1.5f, 6, 0, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 28 bits, 6 pulses, 4 tracks 2211 */ + { 30, 4, 1.5f, 6, 0, {4, 8, 8}, TRACKPOS_FIXED_TWO }, /* 30 bits, 6 pulses, 4 tracks 2211 free consecutive track positions ? */ + { 32, 4, 1.5f, 7, 0, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 32 bits, 6 pulses, 4 tracks 2221 fixed ?*/ + { 34, 4, 1.5f, 7, 0, {4, 8, 8}, TRACKPOS_FREE_THREE }, /* 34 bits, 6 pulses, 4 tracks 2221 free track positions ? */ + { 36, 4, 1.0f, 8, 2, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 36 bits, 8 pulses, 4 tracks 2222 */ + { 40, 4, 1.0f, 9, 2, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 40 bits, 9 pulses, 4 tracks 3222 fixed ?*/ + { 43, 4, 1.0f, 10, 2, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 44 bits, 10 pulses, 4 tracks 3322 */ + { 46, 4, 1.0f, 10, 2, {4, 6, 8, 8}, TRACKPOS_FIXED_TWO }, /* 46 bits, 10 pulses, 4 tracks 3322 free consecutive tracks ? */ + { 47, 4, 1.0f, 11, 2, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 47 bits, 10 pulses, 4 tracks 3332 fixed ? */ + { 49, 4, 1.0f, 11, 2, {4, 6, 8, 8}, TRACKPOS_FREE_THREE }, /* 49 bits, 10 pulses, 4 tracks 3332 free three track positions ? */ + { 50, 4, 1.0f, 12, 4, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 50 bits, 12 pulses, 4 tracks 3333 */ + { 53, 4, 1.0f, 13, 4, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 53 bits, 13 pulses, 4 tracks 4333 fixed ? */ + { 55, 4, 1.0f, 13, 4, {4, 6, 8, 8}, TRACKPOS_FREE_ONE }, /* 55 bits, 13 pulses, 4 tracks 4333 free one ? */ + { 56, 4, 1.0f, 14, 4, {4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 56 bits, 14 pulses, 4 tracks 4433 fixed ?!?! */ + { 58, 4, 1.0f, 14, 4, {4, 6, 6, 8, 8}, TRACKPOS_FIXED_TWO }, /* 58 bits, 14 pulses, 4 tracks 4433 free consecutive ? */ + { 59, 4, 1.0f, 15, 4, {4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 59 bits, 15 pulses, 4 tracks 4443 fixed ? */ + { 61, 4, 1.0f, 15, 4, {4, 6, 6, 8, 8}, TRACKPOS_FREE_THREE }, /* 61 bits, 15 pulses, 4 tracks 4443 free ? */ + { 62, 3, 0.8f, 16, 4, {4, 4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 62 bits, 16 pulses, 4 tracks 4444 */ + { 65, 3, 0.8f, 17, 4, {4, 4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 65 bits, 17 pulses, 4 tracks 5444 fixed ?*/ + { 68, 3, 0.75f, 18, 4, {2, 3, 4, 5, 6, 7, 8}, TRACKPOS_FIXED_FIRST }, /* 68 bits, 18 pulses, 4 tracks 5544 */ + { 70, 3, 0.75f, 19, 4, {2, 3, 4, 5, 6, 7, 8}, TRACKPOS_FIXED_FIRST }, /* 70 bits, 19 pulses, 4 tracks 5554 fixed ? */ + { 73, 3, 0.75f, 20, 4, {2, 3, 4, 5, 6, 7, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 73 bits, 20 pulses, 4 tracks 5555 fixed ? */ + { 75, 3, 0.75f, 21, 4, {2, 3, 4, 5, 6, 7, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 75 bits, 21 pulses, 4 tracks 6555 fixed ? */ + { 78, 3, 0.75f, 22, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 78 bits, 22 pulses, 4 tracks 6655 fixed ? */ + { 80, 3, 0.75f, 23, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 80 bits, 23 pulses, 4 tracks 6665 fixed ? */ + { 83, 2, 0.30f, 24, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 83 bits, 24 pulses, 4 tracks 6666 */ + { 85, 2, 0.30f, 25, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 85 bits, 25 pulses, 4 tracks 7666 */ + { 87, 2, 0.25f, 26, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 87 bits, 26 pulses, 4 tracks 7766 */ + { 89, 2, 0.25f, 27, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 89 bits, 27 pulses, 4 tracks 7776 */ + { 92, 2, 0.25f, 28, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 92 bits, 28 pulses, 4 tracks 7777 */ + { 94, 2, 0.25f, 29, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 94 bits, 29 pulses, 4 tracks 8777 */ + { 96, 1, 0.20f, 30, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 96 bits, 30 pulses, 4 tracks 8877 */ + { 98, 1, 0.20f, 31, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 98 bits, 31 pulses, 4 tracks 8887 */ +}; + + +/* Number of pulses & positions to the number of unique states that can be achieved with those pulses */ +const uint32_t pulsestostates[17][9] = +{ + { 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 2, 2, 2, 2, 2, 2, 2, 2, 2}, + { 4, 8, 12, 16, 20, 24, 28, 32, 36}, + { 6, 18, 38, 66, 102, 146, 198, 258, 326}, + { 8, 32, 88, 192, 360, 608, 952, 1408, 1992}, + { 10, 50, 170, 450, 1002, 1970, 3530, 5890, 9290}, + { 12, 72, 292, 912, 2364, 5336, 10836, 20256, 35436}, + { 14, 98, 462, 1666, 4942, 12642, 28814, 59906, 115598}, + { 16, 128, 688, 2816, 9424, 27008, 68464, 157184, 332688}, + { 18, 162, 978, 4482, 16722, 53154, 148626, 374274, 864146}, + { 20, 200, 1340, 6800, 28004, 97880, 299660, 822560, 2060980}, + { 22, 242, 1782, 9922, 44726, 170610, 568150, 1690370, 4573910}, + { 24, 288, 2312, 14016, 68664, 284000, 1022760, 3281280, 9545560}, + { 26, 338, 2938, 19266, 101946, 454610, 1761370, 6065410, 18892250}, + { 28, 392, 3668, 25872, 147084, 703640, 2919620, 10746400, 35704060}, + { 30, 450, 4510, 34050, 207006, 1057730, 4680990, 18347010, 64797470}, + { 32, 512, 5472, 44032, 285088, 1549824, 7288544, 30316544, 113461024}, +}; + +/*----------------------------------------------------------------------------------* + * Gain quantization table for memory-less gain quantizer + *----------------------------------------------------------------------------------*/ + +const float gain_qua_mless_7b[128*2] = +{ + 0.0256f, 0.0555f, + 0.0915f, 1.1847f, + 0.0968f, 0.6282f, + 0.0996f, 0.2821f, + 0.1029f, 0.4465f, + 0.1065f, 0.9677f, + 0.1332f, 0.7997f, + 0.1535f, 1.3985f, + 0.1692f, 1.6101f, + 0.1873f, 2.0886f, + 0.1960f, 1.8291f, + 0.1964f, 0.1732f, + 0.2122f, 2.4304f, + 0.2292f, 0.5306f, + 0.2359f, 1.0716f, + 0.2369f, 0.6796f, + 0.2546f, 0.3544f, + 0.2694f, 1.2247f, + 0.2697f, 0.9217f, + 0.2996f, 2.7903f, + 0.3197f, 0.7881f, + 0.3199f, 3.2249f, + 0.3492f, 0.1667f, + 0.3560f, 0.4883f, + 0.3568f, 1.3541f, + 0.3599f, 0.6346f, + 0.3684f, 1.0620f, + 0.3716f, 1.5223f, + 0.3942f, 3.6890f, + 0.4059f, 0.3064f, + 0.4076f, 0.9021f, + 0.4149f, 1.7170f, + 0.4225f, 1.9400f, + 0.4229f, 2.2074f, + 0.4487f, 1.2106f, + 0.4554f, 0.7548f, + 0.4800f, 0.4531f, + 0.4882f, 0.6140f, + 0.4966f, 1.0464f, + 0.5126f, 1.3905f, + 0.5298f, 0.8967f, + 0.5369f, 2.4926f, + 0.5521f, 1.5735f, + 0.5614f, 0.1682f, + 0.5758f, 0.7770f, + 0.5939f, 1.1468f, + 0.5942f, 0.5222f, + 0.5946f, 0.3409f, + 0.6053f, 1.7908f, + 0.6129f, 0.9937f, + 0.6136f, 1.2784f, + 0.6184f, 2.0111f, + 0.6249f, 0.6626f, + 0.6527f, 3.0463f, + 0.6602f, 0.8724f, + 0.6692f, 1.4121f, + 0.6961f, 2.2440f, + 0.7035f, 1.0724f, + 0.7069f, 0.7548f, + 0.7081f, 1.5445f, + 0.7091f, 0.5579f, + 0.7253f, 1.6832f, + 0.7296f, 1.1850f, + 0.7359f, 0.4175f, + 0.7388f, 0.9680f, + 0.7428f, 2.7283f, + 0.7591f, 1.3040f, + 0.7700f, 0.6550f, + 0.7732f, 1.8595f, + 0.7742f, 0.8500f, + 0.7924f, 0.2178f, + 0.8078f, 1.4486f, + 0.8178f, 1.0725f, + 0.8255f, 0.7421f, + 0.8256f, 0.5278f, + 0.8316f, 2.0390f, + 0.8382f, 0.9422f, + 0.8435f, 1.2053f, + 0.8567f, 1.5952f, + 0.8570f, 2.4549f, + 0.8725f, 0.8299f, + 0.8756f, 1.3365f, + 0.8769f, 0.6222f, + 0.8799f, 0.3881f, + 0.8938f, 1.7540f, + 0.9121f, 1.0122f, + 0.9210f, 0.7117f, + 0.9249f, 1.1285f, + 0.9344f, 0.9022f, + 0.9375f, 3.7762f, + 0.9376f, 1.4769f, + 0.9388f, 0.5124f, + 0.9501f, 2.2014f, + 0.9582f, 1.2478f, + 0.9646f, 0.8003f, + 0.9815f, 0.6165f, + 0.9864f, 1.9390f, + 0.9985f, 1.3694f, + 1.0041f, 1.6163f, + 1.0071f, 1.0599f, + 1.0095f, 0.9596f, + 1.0142f, 3.3774f, + 1.0150f, 0.3827f, + 1.0223f, 0.7201f, + 1.0351f, 2.9891f, + 1.0393f, 0.8629f, + 1.0461f, 1.1773f, + 1.0601f, 1.7548f, + 1.0616f, 0.5225f, + 1.0969f, 1.4899f, + 1.0977f, 2.6574f, + 1.0996f, 0.6500f, + 1.1006f, 1.3029f, + 1.1129f, 0.7923f, + 1.1151f, 0.2047f, + 1.1169f, 1.0829f, + 1.1195f, 0.9526f, + 1.1442f, 2.3570f, + 1.1613f, 2.0960f, + 1.1920f, 0.4212f, + 1.1942f, 1.8806f, + 1.2055f, 1.6309f, + 1.2081f, 1.2005f, + 1.2091f, 0.5825f, + 1.2200f, 1.3871f, + 1.2201f, 0.8762f, + 1.2210f, 0.7314f, + 1.2298f, 1.0376f +}; + +const float gain_qua_mless_6b_stereo[64*2]= +{ + 0.034851F,1.358887F, + 0.056885F,1.045898F, + 0.059387F,1.785156F, + 0.079651F,0.322754F, + 0.091736F,0.670410F, + 0.118591F,4.105957F, + 0.168701F,0.859375F, + 0.180481F,2.352051F, + 0.193115F,1.213379F, + 0.197266F,1.485840F, + 0.257324F,0.499023F, + 0.269531F,1.041504F, + 0.298096F,1.705566F, + 0.329285F,0.838379F, + 0.341858F,1.296875F, + 0.349426F,3.154785F, + 0.417908F,2.065918F, + 0.418030F,1.045898F, + 0.420532F,6.452148F, + 0.432556F,0.655273F, + 0.435486F,1.496094F, + 0.504578F,1.203613F, + 0.525024F,1.772949F, + 0.530396F,0.864258F, + 0.579895F,2.469238F, + 0.580872F,1.421875F, + 0.613464F,0.144043F, + 0.625244F,1.005371F, + 0.654480F,1.682617F, + 0.664307F,1.252930F, + 0.671692F,0.663086F, + 0.727478F,3.170410F, + 0.731018F,2.026855F, + 0.745789F,1.102051F, + 0.749878F,1.504395F, + 0.784851F,0.806641F, + 0.790100F,15.999512F, + 0.814697F,1.337402F, + 0.839355F,0.981934F, + 0.842468F,1.705566F, + 0.843018F,2.357422F, + 0.879944F,1.201172F, + 0.893188F,0.767090F, + 0.922791F,1.430176F, + 0.928589F,1.018555F, + 0.930664F,1.906250F, + 0.946655F,0.567871F, + 0.972717F,2.812500F, + 0.982788F,1.178711F, + 0.986206F,0.875977F, + 0.993530F,1.562012F, + 0.998474F,4.970215F, + 1.029236F,9.087402F, + 1.038208F,2.136230F, + 1.042114F,0.684082F, + 1.058838F,1.287598F, + 1.073242F,0.995117F, + 1.089661F,1.667969F, + 1.164978F,3.430176F, + 1.166321F,0.791504F, + 1.180969F,1.420898F, + 1.193481F,1.106445F, + 1.193481F,2.423828F, + 1.199951F,1.863281F, +}; + +const float gain_qua_mless_6b[64*2] = +{ + 0.1023f, 0.1385f, + 0.1299f, 0.3865f, + 0.1415f, 0.9587f, + 0.1433f, 0.6630f, + 0.1708f, 1.2210f, + 0.1766f, 1.5334f, + 0.2387f, 2.1457f, + 0.2917f, 0.4762f, + 0.2918f, 0.8337f, + 0.3122f, 1.8254f, + 0.3231f, 2.9468f, + 0.3520f, 0.2219f, + 0.3673f, 1.0612f, + 0.3755f, 0.6540f, + 0.3787f, 1.3191f, + 0.3805f, 3.5578f, + 0.4114f, 2.4443f, + 0.4293f, 1.5662f, + 0.4750f, 0.8475f, + 0.4886f, 0.4489f, + 0.5635f, 1.2143f, + 0.5699f, 0.6556f, + 0.5730f, 1.0155f, + 0.5963f, 2.0279f, + 0.6021f, 1.4337f, + 0.6240f, 1.7159f, + 0.6480f, 0.2310f, + 0.6577f, 0.8326f, + 0.7030f, 0.4858f, + 0.7146f, 2.7331f, + 0.7351f, 1.1471f, + 0.7489f, 0.9787f, + 0.7493f, 0.6800f, + 0.7628f, 1.3365f, + 0.7947f, 1.5351f, + 0.7994f, 2.3357f, + 0.8258f, 0.8233f, + 0.8434f, 1.7918f, + 0.8620f, 0.5667f, + 0.8850f, 2.0286f, + 0.8873f, 1.2422f, + 0.8933f, 1.0855f, + 0.8952f, 0.9457f, + 0.9113f, 0.7066f, + 0.9189f, 0.4096f, + 0.9554f, 3.1133f, + 0.9662f, 3.6596f, + 0.9685f, 1.4001f, + 0.9703f, 1.6178f, + 0.9859f, 0.8469f, + 1.0095f, 0.5734f, + 1.0299f, 1.1866f, + 1.0337f, 1.0014f, + 1.0487f, 0.7284f, + 1.0769f, 2.6107f, + 1.0801f, 0.2455f, + 1.1195f, 2.1906f, + 1.1268f, 1.8445f, + 1.1591f, 0.4730f, + 1.1666f, 1.5523f, + 1.1711f, 1.3167f, + 1.1753f, 0.8763f, + 1.1893f, 1.0872f, + 1.1911f, 0.6722f +}; + +const float gain_qua_mless_5b[32*2] = +{ + 0.1645f, 0.2137f, + 0.2102f, 0.5295f, + 0.2154f, 0.8448f, + 0.2615f, 1.5636f, + 0.2664f, 1.1856f, + 0.3012f, 2.1266f, + 0.4209f, 2.7473f, + 0.4713f, 0.6328f, + 0.4830f, 0.2861f, + 0.4938f, 0.9146f, + 0.5523f, 1.7829f, + 0.5798f, 1.1716f, + 0.6039f, 1.4473f, + 0.6068f, 3.5936f, + 0.7267f, 0.7460f, + 0.7329f, 2.1548f, + 0.7537f, 0.4738f, + 0.7586f, 0.9788f, + 0.8354f, 1.2308f, + 0.8529f, 1.7499f, + 0.8856f, 1.4611f, + 0.9253f, 0.6280f, + 0.9414f, 0.8362f, + 0.9570f, 1.0559f, + 0.9663f, 3.0746f, + 0.9765f, 2.5027f, + 1.0512f, 0.4129f, + 1.0815f, 2.0090f, + 1.1099f, 1.2670f, + 1.1250f, 1.5985f, + 1.1376f, 0.6895f, + 1.1529f, 0.9632f +}; + +const int16_t E_ROM_qua_gain5b_const[NB_QUA_GAIN5B * 2]= +{ + 1774,577, + 2090,1805, + 2103,3371, + 3908,1116, + 4834,2500, + 6030,4763, + 6838,1334, + 7490,2033, + 8585,3036, + 9845,1575, + 10437,2320, + 10649,3739, + 11298,945, + 12108,1920, + 12310,5108, + 12391,2758, + 12659,1237, + 13729,1557, + 13798,2201, + 13972,3275, + 14881,993, + 15175,1776, + 15409,16190, + 15551,2395, + 15879,4048, + 16341,1335, + 16988,2918, + 18317,7449, + 18368,2026, + 19114,1364, + 19991,4472, + 20644,2790, +}; + +const Word16 E_ROM_qua_gain6b_const[NB_QUA_GAIN6B * 2] = +{ + 0,2758, + 143,3562, + 397,2146, + 544,4306, + 952,1726, + 1236,724, + 1779,3158, + 1820,5448, + 1975,2473, + 2121,1343, + 3049,3912, + 3081,1885, + 3289,8261, + 3416,2843, + 3495,2204, + 3831,3386, + 4295,4590, + 4300,2476, + 4345,1545, + 4913,1122, + 5198,2080, + 5200,3079, + 5448,3714, + 5482,2689, + 5546,1817, + 5783,17318, + 5934,6236, + 6156,2320, + 6481,4225, + 6828,3351, + 6832,5045, + 6888,2895, + 7186,2559, + 7214,1663, + 7373,2052, + 7906,3819, + 8192,1372, + 8452,3063, + 8464,2354, + 9021,4468, + 9037,2715, + 9175,1874, + 9219,3463, + 9831,2155, + 10523,5383, + 10557,9061, + 10618,3093, + 10633,3949, + 10890,2465, + 11141,1654, + 12132,2790, + 12180,3477, + 12376,2079, + 12494,4560, + 14430,2468, + 14573,3914, + 14576,3111, + 15043,1827, + 15207,1329, + 16073,6155, + 17519,4719, + 18345,2148, + 18554,2784, + 18576,3563, +}; + +const int16_t E_ROM_qua_gain7b_const[NB_QUA_GAIN7B * 2] = +{ + 123,2777, + 369,2102, + 404,4368, + 693,3486, + 1107,719, + 1222,1679, + 1657,1293, + 1667,5547, + 1805,2425, + 2369,3075, + 2489,12063, + 2681,1901, + 2693,3984, + 3031,7547, + 3248,990, + 3466,2672, + 3674,2165, + 3718,1513, + 3844,3456, + 4120,4656, + 4748,2967, + 4821,19622, + 4855,2400, + 4912,1776, + 5245,3860, + 5312,6282, + 5500,1176, + 5713,2056, + 5872,3287, + 5960,2662, + 6170,9756, + 6364,5021, + 6545,1476, + 6788,2283, + 6796,4163, + 7038,2949, + 7216,1831, + 7274,3516, + 7707,2510, + 8123,5762, + 8361,4485, + 8376,2110, + 8594,3135, + 8611,3755, + 8634,1570, + 8636,2748, + 8683,8222, + 9274,335, + 9512,2404, + 9640,5020, + 9690,1893, + 9778,3361, + 9808,15435, + 9936,4029, + 10194,2767, + 10306,6510, + 10325,1252, + 10686,2186, + 10844,32767, + 10913,4453, + 10968,3078, + 11044,1666, + 11076,3609, + 11398,2509, + 11423,5160, + 11848,1994, + 11997,2823, + 12002,3880, + 12084,7573, + 12129,3325, + 12214,5867, + 12331,1496, + 12450,4245, + 12458,2283, + 12768,901, + 12896,4741, + 12898,1811, + 12902,2569, + 12983,2959, + 13173,3331, + 13413,2059, + 13416,3734, + 13429,10641, + 13448,1148, + 13615,5340, + 13674,1425, + 13779,2332, + 13847,4264, + 13909,2657, + 13958,6488, + 14047,3085, + 14130,1648, + 14547,1915, + 14554,3684, + 14749,2739, + 14868,5017, + 14875,2216, + 14898,3197, + 14988,1085, + 15026,4246, + 15375,7971, + 15421,1446, + 15548,2462, + 15722,5920, + 15882,3449, + 15960,1782, + 15994,2863, + 16365,3977, + 16419,4754, + 16472,2162, + 17378,3101, + 17410,2550, + 17743,1339, + 17856,5485, + 17979,1982, + 17996,3628, + 18041,7110, + 18242,4381, + 18602,22207, + 19373,12827, + 19533,2777, + 19640,1678, + 19728,2272, + 19795,8861, + 20065,3275, + 20133,4881, + 20198,3947, + 20290,6128, +}; + +/*----------------------------------------------------------------------------------* + * MA predicition coefficients for gain quantizer + *----------------------------------------------------------------------------------*/ + +const float pred_gain[GAIN_PRED_ORDER] = { 0.5f, 0.4f, 0.3f, 0.2f }; + +/*----------------------------------------------------------------------------------* + * 6-bit gain quantization table (only for AMR-WB IO mode) + *----------------------------------------------------------------------------------*/ + +const float t_qua_gain6b[64*2] = +{ + 0.095577f, 0.650507f, + 0.096232f, 1.737050f, + 0.187418f, 3.168846f, + 0.255896f, 4.962348f, + 0.274392f, 1.237365f, + 0.306340f, 2.191559f, + 0.340913f, 7.624112f, + 0.349443f, 0.694540f, + 0.393850f, 0.283414f, + 0.410411f, 3.335519f, + 0.467326f, 1.722400f, + 0.492699f, 1.024880f, + 0.502447f, 2.596945f, + 0.538748f, 4.284797f, + 0.594507f, 1.400231f, + 0.601562f, 0.715119f, + 0.615667f, 6.097708f, + 0.625075f, 2.174328f, + 0.662782f, 3.231284f, + 0.690967f, 1.751661f, + 0.696845f, 0.878992f, + 0.710639f, 1.185743f, + 0.715220f, 0.482280f, + 0.751490f, 2.486668f, + 0.764345f, 4.108078f, + 0.767472f, 12.8f, /*0.767472f, 13.875360f,*/ + 0.769099f, 1.658386f, + 0.803928f, 0.792686f, + 0.810832f, 1.183175f, + 0.818967f, 2.972155f, + 0.821480f, 6.255056f, + 0.833469f, 1.761157f, + 0.861276f, 2.207579f, + 0.863275f, 0.599961f, + 0.880429f, 0.913681f, + 0.880816f, 3.532393f, + 0.881643f, 1.383632f, + 0.892825f, 4.900598f, + 0.906974f, 8.542764f, + 0.925368f, 1.772085f, + 0.928281f, 2.841080f, + 0.933752f, 1.101603f, + 0.947124f, 2.305683f, + 0.956012f, 0.517399f, + 0.961870f, 3.892433f, + 0.972823f, 5.841643f, + 0.977796f, 1.463091f, + 0.981803f, 0.833284f, + 1.008362f, 2.077002f, + 1.011696f, 3.039251f, + 1.031157f, 1.162086f, + 1.031888f, 0.332692f, + 1.050599f, 4.104371f, + 1.074819f, 1.668828f, + 1.092217f, 2.572842f, + 1.108887f, 5.736302f, + 1.112667f, 0.769072f, + 1.135654f, 15.9999f, /*1.135654f, 28.065996f,*/ + 1.143096f, 10.587959f, + 1.168006f, 1.241697f, + 1.185414f, 3.211269f, + 1.186919f, 2.000422f, + 1.187154f, 4.421983f, + 1.243327f, 7.268204f +}; + +/*----------------------------------------------------------------------------------* + * 7-bit gain quantization table (only for AMR-WB IO mode) + *----------------------------------------------------------------------------------*/ + +const float t_qua_gain7b[128*2] = +{ + 0.012445f, 0.215546f, + 0.028326f, 0.965442f, + 0.053042f, 0.525819f, + 0.065409f, 1.495322f, + 0.078212f, 2.323725f, + 0.100504f, 0.751276f, + 0.112617f, 3.427530f, + 0.113124f, 0.309583f, + 0.121763f, 1.140685f, + 0.143515f, 7.519609f, + 0.162430f, 0.568752f, + 0.164940f, 1.904113f, + 0.165429f, 4.947562f, + 0.194985f, 0.855463f, + 0.213527f, 1.281019f, + 0.223544f, 0.414672f, + 0.243135f, 2.781766f, + 0.257180f, 1.659565f, + 0.269488f, 0.636749f, + 0.286539f, 1.003938f, + 0.328124f, 2.225436f, + 0.328761f, 0.330278f, + 0.336807f, 11.500983f, + 0.339794f, 3.805726f, + 0.344454f, 1.494626f, + 0.346165f, 0.738748f, + 0.363605f, 1.141454f, + 0.398729f, 0.517614f, + 0.415276f, 2.928666f, + 0.416282f, 0.862935f, + 0.423421f, 1.873310f, + 0.444151f, 0.202244f, + 0.445842f, 1.301113f, + 0.455671f, 5.519512f, + 0.484764f, 0.387607f, + 0.488696f, 0.967884f, + 0.488730f, 0.666771f, + 0.508189f, 1.516224f, + 0.508792f, 2.348662f, + 0.531504f, 3.883870f, + 0.548649f, 1.112861f, + 0.551182f, 0.514986f, + 0.564397f, 1.742030f, + 0.566598f, 0.796454f, + 0.589255f, 3.081743f, + 0.598816f, 1.271936f, + 0.617654f, 0.333501f, + 0.619073f, 2.040522f, + 0.625282f, 0.950244f, + 0.630798f, 0.594883f, + 0.638918f, 4.863197f, + 0.650102f, 1.464846f, + 0.668412f, 0.747138f, + 0.669490f, 2.583027f, + 0.683757f, 1.125479f, + 0.691216f, 1.739274f, + 0.718441f, 3.297789f, + 0.722608f, 0.902743f, + 0.728827f, 2.194941f, + 0.729586f, 0.633849f, + 0.730907f, 7.432957f, + 0.731017f, 0.431076f, + 0.731543f, 1.387847f, + 0.759183f, 1.045210f, + 0.768606f, 1.789648f, + 0.771245f, 4.085637f, + 0.772613f, 0.778145f, + 0.786483f, 1.283204f, + 0.792467f, 2.412891f, + 0.802393f, 0.544588f, + 0.807156f, 0.255978f, + 0.814280f, 1.544409f, + 0.817839f, 0.938798f, + 0.826959f, 2.910633f, + 0.830453f, 0.684066f, + 0.833431f, 1.171532f, + 0.841208f, 1.908628f, + 0.846440f, 5.333522f, + 0.868280f, 0.841519f, + 0.868662f, 1.435230f, + 0.871449f, 3.675784f, + 0.881317f, 2.245058f, + 0.882020f, 0.480249f, + 0.882476f, 1.105804f, + 0.902856f, 0.684850f, + 0.904419f, 1.682113f, + 0.909384f, 2.787801f, + 0.916558f, 7.500981f, + 0.918444f, 0.950341f, + 0.919721f, 1.296319f, + 0.940272f, 4.682978f, + 0.940273f, 1.991736f, + 0.950291f, 3.507281f, + 0.957455f, 1.116284f, + 0.957723f, 0.793034f, + 0.958217f, 1.497824f, + 0.962628f, 2.514156f, + 0.968507f, 0.588605f, + 0.974739f, 0.339933f, + 0.991738f, 1.750201f, + 0.997210f, 0.936131f, + 1.002422f, 1.250008f, + 1.006040f, 2.167232f, + 1.008848f, 3.129940f, + 1.014404f, 5.842819f, + 1.027798f, 4.287319f, + 1.039404f, 1.489295f, + 1.039628f, 8.947958f, + 1.043214f, 0.765733f, + 1.045089f, 2.537806f, + 1.058994f, 1.031496f, + 1.060415f, 0.478612f, + 1.072132f, 12.8f, /*1.072132f, 14.961459f,*/ + 1.074778f, 1.910049f, + 1.076570f, 15.9999f, /*1.076570f, 30.500374f,*/ + 1.107853f, 3.843067f, + 1.110673f, 1.228576f, + 1.110969f, 2.758471f, + 1.140058f, 1.603077f, + 1.155384f, 0.668935f, + 1.176229f, 6.717108f, + 1.179008f, 2.011940f, + 1.187735f, 0.963552f, + 1.199569f, 4.891432f, + 1.206311f, 3.316329f, + 1.215323f, 2.507536f, + 1.223150f, 1.387102f, + 1.296012f, 9.684225f +}; + +/*----------------------------------------------------------------------------------* + * Quantization table for scaled innovation energy prediciton + *----------------------------------------------------------------------------------*/ + +const float Es_pred_qua_5b[32] = +{ + -8.0000f, + -2.0519f, + 2.5095f, + 6.5923f, + 9.9507f, + 12.9923f, + 15.7251f, + 18.1521f, + 20.3552f, + 22.4218f, + 24.3014f, + 26.0214f, + 27.6040f, + 29.0898f, + 30.5291f, + 31.9154f, + 33.2749f, + 34.6277f, + 35.9525f, + 37.3081f, + 38.7173f, + 40.1734f, + 41.6751f, + 43.2697f, + 44.9559f, + 46.7826f, + 48.7749f, + 50.9729f, + 53.4967f, + 56.3814f, + 59.9748f, + 65.0000f +}; + + +const float Es_pred_qua_4b[16] = +{ + -8.0000f, + -0.1400f, + 7.1397f, + 12.8276f, + 17.9064f, + 22.4280f, + 26.6441f, + 30.6032f, + 34.2916f, + 37.8937f, + 41.4441f, + 45.0174f, + 48.7769f, + 52.9669f, + 58.0552f, + 65.0000f +}; + +const float Es_pred_qua_3b[8] = +{ + 5.9422f, + 15.2711f, + 23.3857f, + 30.5310f, + 37.0190f, + 43.4539f, + 50.2442f, + 58.7164f +}; + +const float Es_pred_qua_4b_no_ltp[16] = +{ + -5.f, + 0.f, + 5.f, + 10.f, + 15.f, + 20.f, + 25.f, + 30.f, + 35.f, + 40.f, + 45.f, + 50.f, + 55.f, + 60.f, + 65.f, + 70.f +}; + +/*----------------------------------------------------------------------------------* + * Gain estimation constants (for gain quantizer at 7.2 and 8.0 kbps) + *----------------------------------------------------------------------------------*/ + +const float b_1sfr[2] = +{ + 2.36736f, -0.22452f +}; + +const float b_2sfr[4] = +{ + -0.00027f, 0.01703f, 0.91879f, 0.13234f +}; + +const float b_3sfr[6] = +{ + -0.11658f, 0.02674f, 0.13513f, 0.79682f, 0.02241f, 0.17815f +}; + +const float b_4sfr[8] = +{ + -0.09296f, 0.01578f, -0.06606f, 0.20416f, 0.79254f, 0.00829f, 0.03499f, 0.15859f +}; + + +/*----------------------------------------------------------------------------------* + * Gain codebooks (for gain quantizer at 7.2 and 8.0 kbps) + *----------------------------------------------------------------------------------*/ + +const float gp_gamma_1sfr_8b[2*256] = +{ + 0.01864f, 0.29707f, + 0.02030f, 0.07182f, + 0.02151f, 1.08524f, + 0.03500f, 0.16009f, + 0.03977f, 0.02281f, + 0.04234f, 0.40424f, + 0.04933f, 0.76004f, + 0.05586f, 1.51515f, + 0.06020f, 2.12629f, + 0.06027f, 3.09183f, + 0.06439f, 0.11739f, + 0.07339f, 5.42703f, + 0.07352f, 0.03949f, + 0.08217f, 0.24883f, + 0.08739f, 0.64886f, + 0.10306f, 12.80025f, + 0.10466f, 0.50924f, + 0.11107f, 0.09482f, + 0.12457f, 1.36386f, + 0.13298f, 7.87494f, + 0.13422f, 0.19471f, + 0.13866f, 2.54472f, + 0.14144f, 0.90007f, + 0.14280f, 0.34101f, + 0.15640f, 0.05105f, + 0.15712f, 28.93375f, + 0.16220f, 4.10343f, + 0.16674f, 0.12822f, + 0.17199f, 0.01803f, + 0.17309f, 0.57791f, + 0.17880f, 1.83167f, + 0.21237f, 0.25432f, + 0.21425f, 0.42966f, + 0.22283f, 6.15919f, + 0.22382f, 1.40095f, + 0.22706f, 0.74928f, + 0.23090f, 1.03443f, + 0.23261f, 20.98373f, + 0.23699f, 10.51665f, + 0.24053f, 3.14177f, + 0.24195f, 0.09011f, + 0.25145f, 0.15676f, + 0.26865f, 0.02971f, + 0.27099f, 2.30569f, + 0.27377f, 0.33881f, + 0.28928f, 0.60729f, + 0.29592f, 0.06145f, + 0.31283f, 14.92646f, + 0.31414f, 0.21458f, + 0.31534f, 1.77427f, + 0.31962f, 0.49268f, + 0.32489f, 1.21756f, + 0.32814f, 4.91051f, + 0.34121f, 0.01364f, + 0.34148f, 8.74051f, + 0.34386f, 0.12541f, + 0.34508f, 0.89971f, + 0.35532f, 0.04229f, + 0.35970f, 0.27273f, + 0.36044f, 3.53446f, + 0.37703f, 0.71598f, + 0.38255f, 0.39178f, + 0.38772f, 2.13255f, + 0.40080f, 1.46796f, + 0.40443f, 0.09811f, + 0.41099f, 0.18558f, + 0.41248f, 0.57650f, + 0.42003f, 6.02510f, + 0.42491f, 2.66162f, + 0.44395f, 1.05504f, + 0.45244f, 0.32349f, + 0.46599f, 4.14121f, + 0.46643f, 0.07352f, + 0.46821f, 0.76710f, + 0.47180f, 0.44298f, + 0.47973f, 0.14694f, + 0.48709f, 0.22467f, + 0.48898f, 1.86483f, + 0.49391f, 7.20170f, + 0.49561f, 0.03365f, + 0.49719f, 11.52638f, + 0.51590f, 1.31314f, + 0.52029f, 3.12855f, + 0.52386f, 0.11286f, + 0.52972f, 0.53743f, + 0.54158f, 0.64936f, + 0.54442f, 0.88680f, + 0.54741f, 18.96873f, + 0.55717f, 5.01132f, + 0.55900f, 0.38267f, + 0.56108f, 2.20040f, + 0.56269f, 0.27811f, + 0.56764f, 0.01728f, + 0.56774f, 1.61683f, + 0.57428f, 0.17847f, + 0.59426f, 0.05172f, + 0.60253f, 1.12077f, + 0.61435f, 0.47966f, + 0.61837f, 2.64075f, + 0.61974f, 3.85052f, + 0.62233f, 0.77999f, + 0.62488f, 30.82914f, + 0.62591f, 8.30773f, + 0.63483f, 0.13040f, + 0.63717f, 0.08340f, + 0.64151f, 0.22596f, + 0.64277f, 14.45112f, + 0.65342f, 1.94833f, + 0.65906f, 1.41075f, + 0.66195f, 0.33327f, + 0.66208f, 0.59438f, + 0.66380f, 5.82288f, + 0.67561f, 55.08506f, + 0.67985f, 0.98953f, + 0.68848f, 0.02431f, + 0.69743f, 0.75692f, + 0.69940f, 0.41776f, + 0.71088f, 2.29372f, + 0.71473f, 9.88443f, + 0.71666f, 3.15179f, + 0.71976f, 1.57490f, + 0.72121f, 0.15977f, + 0.72569f, 0.25747f, + 0.73215f, 4.49475f, + 0.73242f, 1.17828f, + 0.73611f, 0.10706f, + 0.74660f, 0.50029f, + 0.75066f, 0.06441f, + 0.75918f, 0.66077f, + 0.76003f, 0.89356f, + 0.77072f, 6.95905f, + 0.77186f, 18.53232f, + 0.77303f, 1.82446f, + 0.78131f, 2.59582f, + 0.78137f, 0.37054f, + 0.78595f, 1.33439f, + 0.78988f, 0.20177f, + 0.79579f, 3.69204f, + 0.80621f, 12.12779f, + 0.80699f, 24.75305f, + 0.81287f, 0.04130f, + 0.81630f, 0.55362f, + 0.81694f, 0.29092f, + 0.81734f, 0.74874f, + 0.82110f, 1.06401f, + 0.82787f, 2.07876f, + 0.82981f, 5.00103f, + 0.84050f, 1.58158f, + 0.84438f, 2.89191f, + 0.84678f, 0.13416f, + 0.85616f, 0.44166f, + 0.86019f, 8.65103f, + 0.86346f, 0.01317f, + 0.86494f, 1.18927f, + 0.86577f, 0.09267f, + 0.86811f, 5.95882f, + 0.87117f, 0.84740f, + 0.87406f, 0.61269f, + 0.87981f, 0.23437f, + 0.88151f, 2.44548f, + 0.88504f, 0.33708f, + 0.88847f, 1.82180f, + 0.89206f, 3.31226f, + 0.89352f, 16.07224f, + 0.89868f, 0.17353f, + 0.90558f, 1.37396f, + 0.90956f, 4.04629f, + 0.91046f, 0.71437f, + 0.91555f, 0.95141f, + 0.91607f, 0.05802f, + 0.92133f, 0.50076f, + 0.92397f, 2.18529f, + 0.92943f, 6.99163f, + 0.93816f, 2.70762f, + 0.93915f, 10.79124f, + 0.93979f, 35.02379f, + 0.94373f, 0.29109f, + 0.94428f, 1.54440f, + 0.94915f, 1.11190f, + 0.94935f, 4.81827f, + 0.94963f, 0.39335f, + 0.95314f, 0.02810f, + 0.95605f, 0.62253f, + 0.96422f, 0.78364f, + 0.96502f, 1.90168f, + 0.96887f, 0.08041f, + 0.97223f, 3.22145f, + 0.97319f, 0.15476f, + 0.97937f, 0.21603f, + 0.99027f, 1.26402f, + 0.99060f, 2.42092f, + 0.99469f, 8.02656f, + 0.99661f, 20.50587f, + 0.99674f, 0.54301f, + 0.99823f, 5.86597f, + 0.99991f, 0.88884f, + 1.00124f, 0.33090f, + 1.00312f, 4.24275f, + 1.00328f, 1.65980f, + 1.02202f, 13.84765f, + 1.02395f, 0.69092f, + 1.02548f, 2.07584f, + 1.02556f, 0.12171f, + 1.02613f, 0.43643f, + 1.03316f, 1.03433f, + 1.03462f, 1.40902f, + 1.03999f, 2.82553f, + 1.05031f, 3.58878f, + 1.05184f, 0.26298f, + 1.06027f, 9.06668f, + 1.07241f, 0.79358f, + 1.07471f, 0.52241f, + 1.08008f, 1.76977f, + 1.08043f, 4.93935f, + 1.08062f, 45.38949f, + 1.08090f, 2.36074f, + 1.08304f, 1.15533f, + 1.08642f, 0.18015f, + 1.08996f, 0.06905f, + 1.09008f, 6.56321f, + 1.09044f, 0.01828f, + 1.09727f, 0.36021f, + 1.10075f, 0.62638f, + 1.11422f, 1.47205f, + 1.11535f, 0.93762f, + 1.11816f, 0.03576f, + 1.12340f, 0.10836f, + 1.13413f, 25.42389f, + 1.13994f, 2.96173f, + 1.14294f, 3.90159f, + 1.15382f, 0.04975f, + 1.15439f, 11.91982f, + 1.16090f, 16.73218f, + 1.16103f, 2.17967f, + 1.16117f, 0.68099f, + 1.16863f, 0.46714f, + 1.17332f, 1.18022f, + 1.17498f, 0.31199f, + 1.17616f, 9.51265f, + 1.18152f, 7.40048f, + 1.18372f, 0.24663f, + 1.18372f, 0.20126f, + 1.18610f, 0.14046f, + 1.18676f, 0.08978f, + 1.18699f, 5.55043f, + 1.18951f, 0.84044f, + 1.19478f, 1.59238f, + 1.19799f, 2.55164f, + 1.19820f, 1.89784f, + 1.19857f, 0.39387f, + 1.19888f, 0.56489f, + 1.19998f, 1.02889f, + 1.20345f, 3.31468f, + 1.20431f, 4.41910f, + 1.20567f, 1.32040f, + 1.21177f, 0.74548f +}; + +const float gp_gamma_1sfr_7b[2*128] = +{ + 0.02136f, 0.16576f, + 0.02610f, 0.04700f, + 0.02673f, 1.32916f, + 0.03917f, 0.38038f, + 0.06539f, 3.93015f, + 0.06590f, 0.78428f, + 0.07007f, 2.41347f, + 0.07073f, 0.12201f, + 0.08692f, 0.02273f, + 0.10144f, 0.26162f, + 0.12117f, 0.58428f, + 0.12817f, 0.06582f, + 0.13200f, 6.18738f, + 0.13542f, 1.05113f, + 0.14605f, 12.85127f, + 0.15252f, 1.88832f, + 0.17593f, 0.43086f, + 0.18150f, 24.88791f, + 0.19845f, 0.19059f, + 0.20102f, 0.09975f, + 0.21887f, 3.04712f, + 0.22650f, 0.80244f, + 0.22710f, 1.36678f, + 0.23569f, 0.04128f, + 0.24090f, 0.33017f, + 0.24423f, 4.39312f, + 0.25622f, 9.04696f, + 0.26686f, 0.01465f, + 0.30474f, 0.13696f, + 0.30653f, 0.51721f, + 0.33982f, 2.33214f, + 0.34572f, 0.96726f, + 0.34776f, 0.22391f, + 0.35921f, 1.66824f, + 0.37321f, 5.83958f, + 0.38246f, 0.29909f, + 0.38918f, 0.07567f, + 0.39258f, 0.03099f, + 0.40290f, 0.67440f, + 0.43384f, 3.82188f, + 0.44136f, 1.28810f, + 0.45720f, 0.39518f, + 0.46915f, 0.18114f, + 0.49155f, 7.58133f, + 0.49486f, 18.79692f, + 0.49964f, 2.78200f, + 0.50311f, 0.11426f, + 0.50988f, 1.82600f, + 0.51013f, 12.50225f, + 0.51163f, 0.85831f, + 0.53672f, 0.55661f, + 0.54568f, 0.24221f, + 0.58854f, 0.04842f, + 0.58856f, 1.13464f, + 0.59022f, 5.29180f, + 0.61432f, 0.31344f, + 0.62368f, 0.01799f, + 0.62503f, 3.37535f, + 0.62557f, 0.15698f, + 0.63586f, 2.17291f, + 0.64066f, 0.72903f, + 0.65002f, 0.46018f, + 0.67718f, 0.08632f, + 0.67719f, 1.47658f, + 0.68875f, 9.72347f, + 0.68911f, 32.65981f, + 0.72111f, 4.49107f, + 0.72523f, 0.94174f, + 0.73603f, 0.22351f, + 0.75271f, 16.69924f, + 0.75455f, 2.72292f, + 0.75633f, 0.36255f, + 0.76400f, 0.65651f, + 0.76595f, 6.66691f, + 0.77475f, 1.86222f, + 0.79933f, 1.19851f, + 0.80473f, 0.13963f, + 0.80852f, 0.51193f, + 0.82270f, 3.73825f, + 0.84176f, 0.02816f, + 0.84259f, 0.05841f, + 0.85838f, 0.27004f, + 0.86563f, 0.82004f, + 0.86743f, 2.29536f, + 0.88363f, 1.49460f, + 0.89140f, 5.36064f, + 0.89183f, 12.35149f, + 0.89905f, 8.20030f, + 0.90532f, 0.58773f, + 0.90588f, 0.39700f, + 0.91006f, 24.98023f, + 0.92596f, 0.19474f, + 0.92719f, 3.17426f, + 0.93316f, 1.03857f, + 0.94022f, 0.10069f, + 0.94912f, 1.92355f, + 0.98244f, 0.69665f, + 0.98723f, 4.12701f, + 0.99391f, 0.45338f, + 0.99688f, 1.30750f, + 0.99874f, 44.92089f, + 1.00074f, 0.30398f, + 1.00361f, 2.48072f, + 1.00432f, 6.80059f, + 1.00968f, 0.01556f, + 1.01623f, 10.59523f, + 1.03016f, 0.88271f, + 1.03693f, 0.16444f, + 1.03908f, 18.89908f, + 1.04942f, 1.71141f, + 1.08216f, 0.03947f, + 1.08519f, 2.81718f, + 1.09035f, 0.07394f, + 1.09092f, 0.49594f, + 1.09429f, 1.02772f, + 1.09931f, 4.69322f, + 1.14445f, 13.97163f, + 1.14663f, 0.22834f, + 1.14869f, 8.63215f, + 1.15982f, 0.12298f, + 1.16574f, 0.78265f, + 1.16644f, 0.35763f, + 1.17170f, 1.51544f, + 1.17199f, 5.76835f, + 1.17405f, 2.05383f, + 1.17523f, 0.58874f, + 1.18128f, 3.43730f, + 1.18605f, 1.15776f +}; + +const float gp_gamma_1sfr_6b[2*64] = +{ + 0.02662f, 0.35620f, + 0.02886f, 0.12384f, + 0.05872f, 0.03097f, + 0.06053f, 1.26461f, + 0.07678f, 3.09046f, + 0.08829f, 0.68582f, + 0.10444f, 0.24412f, + 0.11040f, 0.08899f, + 0.15678f, 8.15025f, + 0.15909f, 1.86873f, + 0.17247f, 0.48977f, + 0.17727f, 24.37615f, + 0.19825f, 0.05111f, + 0.21935f, 4.40219f, + 0.22361f, 0.15212f, + 0.22674f, 0.94328f, + 0.25832f, 0.01602f, + 0.28570f, 0.36784f, + 0.30922f, 12.93476f, + 0.31936f, 2.48635f, + 0.38038f, 1.35732f, + 0.38051f, 0.09521f, + 0.38075f, 0.21973f, + 0.38524f, 0.62092f, + 0.42799f, 0.03238f, + 0.44723f, 6.21713f, + 0.48877f, 3.39646f, + 0.53050f, 0.87060f, + 0.53522f, 0.31847f, + 0.54464f, 1.99023f, + 0.55504f, 0.15767f, + 0.63219f, 0.55908f, + 0.64035f, 0.05438f, + 0.64773f, 19.11642f, + 0.65402f, 1.48427f, + 0.67413f, 9.41877f, + 0.69087f, 4.69262f, + 0.71312f, 0.10928f, + 0.75159f, 0.21181f, + 0.76049f, 1.08676f, + 0.76781f, 0.01802f, + 0.77612f, 0.41533f, + 0.78253f, 2.60862f, + 0.86685f, 0.73032f, + 0.87435f, 33.14677f, + 0.89187f, 1.63714f, + 0.89264f, 6.41601f, + 0.89525f, 12.17085f, + 0.91060f, 0.07523f, + 0.92352f, 0.26853f, + 0.94457f, 3.60819f, + 0.97995f, 0.49732f, + 0.99345f, 0.96508f, + 0.99428f, 0.12950f, + 1.01209f, 2.04687f, + 1.02897f, 0.03326f, + 1.05102f, 17.03703f, + 1.06462f, 8.38911f, + 1.10284f, 4.88112f, + 1.11160f, 0.34356f, + 1.12908f, 0.17681f, + 1.13018f, 2.82130f, + 1.13048f, 0.64939f, + 1.13502f, 1.29540f +}; + + +const float gp_gamma_2sfr_7b[2*128] = +{ + 0.00607f, 2.39054f, + 0.00954f, 0.47393f, + 0.01025f, 1.13156f, + 0.01770f, 0.69243f, + 0.02670f, 0.86143f, + 0.02900f, 0.36511f, + 0.04481f, 1.44093f, + 0.05677f, 0.18129f, + 0.06916f, 0.29914f, + 0.06931f, 0.58281f, + 0.09094f, 0.99160f, + 0.11875f, 0.78403f, + 0.12072f, 32.79239f, + 0.12805f, 0.43746f, + 0.12919f, 1.87968f, + 0.14693f, 0.23271f, + 0.16393f, 0.66184f, + 0.17876f, 1.08413f, + 0.20774f, 0.52913f, + 0.21146f, 0.33304f, + 0.21176f, 0.82451f, + 0.22667f, 1.29470f, + 0.27074f, 0.96525f, + 0.27431f, 0.64919f, + 0.27900f, 0.42916f, + 0.27972f, 4.26235f, + 0.30501f, 1.65535f, + 0.32627f, 0.74124f, + 0.33076f, 0.21006f, + 0.33996f, 1.13073f, + 0.35145f, 0.51891f, + 0.35860f, 0.86393f, + 0.36177f, 0.33235f, + 0.37868f, 6.51886f, + 0.39024f, 12.56903f, + 0.39765f, 0.63998f, + 0.40513f, 1.42570f, + 0.40817f, 2.87488f, + 0.43002f, 2.06198f, + 0.43340f, 0.97173f, + 0.43475f, 0.40939f, + 0.43718f, 18.88363f, + 0.44833f, 0.75361f, + 0.46375f, 0.54756f, + 0.47932f, 1.22520f, + 0.51646f, 0.86275f, + 0.52785f, 0.64565f, + 0.53846f, 0.46049f, + 0.54240f, 1.07549f, + 0.54644f, 1.76965f, + 0.56866f, 0.26470f, + 0.58517f, 0.75438f, + 0.58905f, 1.35033f, + 0.59790f, 0.55874f, + 0.60132f, 0.95549f, + 0.61063f, 2.37370f, + 0.61285f, 0.37493f, + 0.64837f, 1.12469f, + 0.65662f, 0.64355f, + 0.66163f, 0.82985f, + 0.66799f, 1.54600f, + 0.67368f, 0.50148f, + 0.68300f, 3.65165f, + 0.70443f, 0.97799f, + 0.71587f, 1.25327f, + 0.72464f, 0.71612f, + 0.73632f, 0.31795f, + 0.75268f, 0.42125f, + 0.75309f, 2.14775f, + 0.75309f, 0.57562f, + 0.76160f, 0.86706f, + 0.76665f, 1.10985f, + 0.77299f, 1.64991f, + 0.80915f, 0.77262f, + 0.81281f, 1.32136f, + 0.81854f, 0.99876f, + 0.83675f, 0.63186f, + 0.83681f, 3.02209f, + 0.83687f, 0.48040f, + 0.85777f, 1.93471f, + 0.86131f, 0.87229f, + 0.86952f, 1.13226f, + 0.87613f, 1.46053f, + 0.87855f, 0.34269f, + 0.88214f, 0.19384f, + 0.89134f, 0.70978f, + 0.90866f, 0.95984f, + 0.92004f, 0.54981f, + 0.92222f, 1.24490f, + 0.93028f, 2.52260f, + 0.93695f, 0.80671f, + 0.94177f, 1.64620f, + 0.95825f, 1.05636f, + 0.96289f, 0.39904f, + 0.97439f, 0.65464f, + 0.97607f, 1.34420f, + 0.98128f, 0.88402f, + 0.99580f, 9.01834f, + 1.00135f, 2.01532f, + 1.01010f, 1.16279f, + 1.01723f, 0.74974f, + 1.02846f, 1.51554f, + 1.02849f, 0.94135f, + 1.03245f, 0.49354f, + 1.05191f, 0.60369f, + 1.05632f, 4.15579f, + 1.06623f, 1.06736f, + 1.07827f, 1.25591f, + 1.08027f, 0.82287f, + 1.08960f, 1.72193f, + 1.09072f, 0.28420f, + 1.10754f, 2.43024f, + 1.12653f, 0.95428f, + 1.12778f, 0.67641f, + 1.13450f, 1.41156f, + 1.14902f, 0.40686f, + 1.16032f, 3.38038f, + 1.16226f, 1.14385f, + 1.17713f, 0.54895f, + 1.18580f, 1.84337f, + 1.18686f, 0.74693f, + 1.19352f, 0.86699f, + 1.20171f, 1.54779f, + 1.20572f, 2.16971f, + 1.20617f, 1.02977f, + 1.20662f, 2.74485f, + 1.20688f, 1.28237f, + 1.20728f, 5.22483f +}; + + +const float gp_gamma_2sfr_6b[2*64] = +{ + 0.01130f, 0.59705f, + 0.02652f, 1.01430f, + 0.02794f, 0.28351f, + 0.06102f, 0.41178f, + 0.07430f, 0.77026f, + 0.07572f, 1.46777f, + 0.10914f, 0.18121f, + 0.12363f, 2.40953f, + 0.13197f, 0.51810f, + 0.14628f, 0.30909f, + 0.15972f, 0.92110f, + 0.20291f, 0.66321f, + 0.20694f, 1.21691f, + 0.23404f, 0.40495f, + 0.27484f, 33.61382f, + 0.28250f, 0.79452f, + 0.30145f, 1.75124f, + 0.31141f, 0.53656f, + 0.32351f, 0.23494f, + 0.33936f, 0.99733f, + 0.38508f, 3.72779f, + 0.40108f, 0.65367f, + 0.41319f, 0.40008f, + 0.42662f, 1.25364f, + 0.43246f, 9.93625f, + 0.45774f, 0.83578f, + 0.51009f, 1.61477f, + 0.51585f, 0.50984f, + 0.55413f, 1.04889f, + 0.56694f, 0.69123f, + 0.60142f, 2.29733f, + 0.60208f, 0.32174f, + 0.63695f, 16.75804f, + 0.64385f, 0.85349f, + 0.64786f, 1.32201f, + 0.67202f, 0.55054f, + 0.72879f, 1.03555f, + 0.74357f, 0.71744f, + 0.76140f, 1.79730f, + 0.78523f, 0.43896f, + 0.81538f, 1.20775f, + 0.81979f, 0.86215f, + 0.82523f, 3.16953f, + 0.86528f, 0.66633f, + 0.87274f, 0.25452f, + 0.88210f, 1.51311f, + 0.90326f, 0.99246f, + 0.93081f, 0.53871f, + 0.95916f, 2.20734f, + 0.96174f, 1.28996f, + 0.96917f, 0.82441f, + 0.99824f, 6.35842f, + 1.00335f, 0.36563f, + 1.02237f, 1.09680f, + 1.03188f, 0.64719f, + 1.04846f, 1.61469f, + 1.09185f, 0.91916f, + 1.11199f, 4.24727f, + 1.14659f, 0.48521f, + 1.15873f, 2.64461f, + 1.16374f, 1.37282f, + 1.17310f, 0.74954f, + 1.18098f, 1.86320f, + 1.18544f, 1.08087f +}; + +const float gp_gamma_3sfr_6b[2*64] = +{ + 0.01192f, 0.29245f, + 0.04985f, 0.56198f, + 0.07032f, 1.20261f, + 0.08337f, 0.36774f, + 0.08405f, 0.80061f, + 0.09313f, 1.76147f, + 0.09580f, 0.19048f, + 0.13781f, 0.46427f, + 0.15191f, 1.01263f, + 0.17911f, 0.66093f, + 0.19176f, 0.31423f, + 0.21095f, 3.33105f, + 0.24351f, 0.84426f, + 0.25383f, 1.38475f, + 0.25558f, 0.52730f, + 0.26697f, 2.41458f, + 0.32244f, 1.02709f, + 0.33147f, 0.25578f, + 0.33614f, 0.69549f, + 0.35169f, 0.41222f, + 0.41458f, 1.21107f, + 0.41759f, 0.87121f, + 0.42537f, 0.59296f, + 0.46820f, 1.57552f, + 0.51038f, 0.47823f, + 0.51562f, 1.03574f, + 0.52553f, 0.74288f, + 0.56848f, 2.12515f, + 0.59985f, 0.33289f, + 0.60551f, 13.69166f, + 0.61194f, 0.89674f, + 0.62213f, 0.60927f, + 0.62628f, 1.28489f, + 0.70519f, 0.76916f, + 0.71649f, 1.72293f, + 0.71964f, 1.05889f, + 0.73148f, 8.45570f, + 0.73217f, 0.48093f, + 0.77896f, 26.25153f, + 0.78396f, 2.95227f, + 0.80147f, 0.90896f, + 0.80167f, 0.66149f, + 0.80656f, 1.44516f, + 0.86294f, 1.18805f, + 0.88649f, 0.81413f, + 0.90213f, 2.01099f, + 0.90474f, 0.55259f, + 0.91649f, 0.33485f, + 0.93167f, 1.03017f, + 0.96578f, 5.28431f, + 0.97308f, 1.36442f, + 0.97409f, 0.70362f, + 0.99790f, 0.92401f, + 1.05048f, 1.12005f, + 1.05996f, 1.76024f, + 1.06915f, 0.46437f, + 1.08636f, 0.80929f, + 1.10286f, 2.76431f, + 1.13708f, 3.74909f, + 1.15280f, 1.23892f, + 1.16077f, 0.62175f, + 1.17824f, 0.96656f, + 1.18408f, 2.17545f, + 1.18487f, 1.49786f +}; + +const float gp_gamma_4sfr_6b[2*64] = +{ + 0.00934f, 0.27565f, + 0.01721f, 0.97811f, + 0.02433f, 0.46654f, + 0.04781f, 0.72086f, + 0.06776f, 1.45241f, + 0.08727f, 0.35723f, + 0.08791f, 3.41441f, + 0.09299f, 2.13125f, + 0.09778f, 0.57872f, + 0.11158f, 0.19319f, + 0.12208f, 0.85691f, + 0.16346f, 0.44503f, + 0.17183f, 1.17256f, + 0.18821f, 0.67810f, + 0.23565f, 0.93068f, + 0.25353f, 0.31870f, + 0.25723f, 0.55721f, + 0.27028f, 1.43169f, + 0.30369f, 0.74972f, + 0.33457f, 1.10643f, + 0.33886f, 0.45699f, + 0.37588f, 1.81394f, + 0.39890f, 0.91791f, + 0.40041f, 0.63732f, + 0.44484f, 0.33746f, + 0.45345f, 1.29581f, + 0.45454f, 20.73460f, + 0.48041f, 0.79572f, + 0.51620f, 0.51876f, + 0.52239f, 1.07372f, + 0.52970f, 2.77458f, + 0.57723f, 0.69551f, + 0.58187f, 1.53270f, + 0.60145f, 0.92017f, + 0.64601f, 11.29119f, + 0.65868f, 7.45030f, + 0.66000f, 0.40154f, + 0.66097f, 0.58966f, + 0.67054f, 1.18310f, + 0.69460f, 0.84554f, + 0.69993f, 2.09527f, + 0.76202f, 0.69518f, + 0.77672f, 1.01521f, + 0.78020f, 1.40843f, + 0.82725f, 0.50517f, + 0.84005f, 0.27186f, + 0.84739f, 0.84066f, + 0.85816f, 5.06160f, + 0.87075f, 1.17031f, + 0.87474f, 1.80610f, + 0.91532f, 0.65903f, + 0.93722f, 0.94775f, + 0.94762f, 1.39061f, + 1.00344f, 1.14608f, + 1.00732f, 0.77084f, + 1.01480f, 0.39878f, + 1.05149f, 2.51385f, + 1.07194f, 1.57173f, + 1.07599f, 1.01017f, + 1.10831f, 3.54277f, + 1.11815f, 0.59230f, + 1.17359f, 0.85449f, + 1.17572f, 1.24171f, + 1.18513f, 1.93190f +}; + +const float gp_gamma_3sfr_7b[2 * 128] = +{ + 0.00865f, 0.40471f, + 0.01641f, 1.63341f, + 0.02167f, 0.75295f, + 0.02874f, 0.24338f, + 0.05766f, 0.51846f, + 0.07340f, 0.98428f, + 0.07987f, 1.25111f, + 0.08451f, 0.29394f, + 0.08540f, 0.14777f, + 0.09367f, 0.63210f, + 0.11201f, 2.44561f, + 0.11427f, 0.42379f, + 0.14021f, 0.86607f, + 0.15229f, 0.23996f, + 0.16463f, 0.70037f, + 0.17395f, 0.35419f, + 0.17828f, 0.53648f, + 0.17931f, 1.07884f, + 0.20466f, 5.82498f, + 0.22376f, 0.77086f, + 0.22945f, 3.42933f, + 0.23138f, 1.90019f, + 0.23426f, 0.44019f, + 0.23982f, 1.48207f, + 0.24251f, 0.28006f, + 0.24876f, 0.61321f, + 0.26424f, 0.92069f, + 0.28620f, 1.22079f, + 0.30140f, 0.34959f, + 0.30965f, 0.52114f, + 0.31841f, 0.74182f, + 0.33689f, 1.01697f, + 0.37165f, 0.62766f, + 0.37534f, 0.43189f, + 0.38132f, 0.84476f, + 0.38172f, 2.11601f, + 0.40019f, 0.25729f, + 0.41206f, 1.43166f, + 0.41344f, 1.14675f, + 0.43580f, 33.98968f, + 0.44295f, 0.71632f, + 0.44526f, 0.52655f, + 0.44646f, 0.94462f, + 0.49572f, 0.39871f, + 0.50137f, 2.96082f, + 0.50856f, 1.05144f, + 0.51187f, 1.64612f, + 0.51781f, 0.61412f, + 0.51784f, 1.29055f, + 0.51900f, 0.77229f, + 0.55414f, 0.88953f, + 0.58248f, 0.48809f, + 0.59127f, 2.06340f, + 0.59354f, 22.44840f, + 0.59373f, 0.65712f, + 0.60194f, 1.17932f, + 0.61898f, 0.30882f, + 0.62738f, 0.97385f, + 0.63155f, 0.76911f, + 0.63357f, 1.46808f, + 0.66527f, 0.56098f, + 0.68601f, 1.10258f, + 0.69445f, 0.41165f, + 0.69513f, 0.85397f, + 0.70384f, 1.80971f, + 0.70591f, 0.66275f, + 0.70766f, 1.33644f, + 0.71019f, 14.11858f, + 0.74321f, 0.99520f, + 0.74713f, 2.41354f, + 0.76097f, 0.74551f, + 0.77096f, 0.49634f, + 0.77874f, 1.58071f, + 0.78600f, 0.89484f, + 0.78622f, 1.21172f, + 0.80325f, 0.61147f, + 0.80832f, 3.30644f, + 0.82039f, 1.04192f, + 0.83131f, 0.82205f, + 0.84566f, 1.40404f, + 0.84809f, 1.95044f, + 0.85738f, 0.69316f, + 0.86370f, 0.38944f, + 0.86491f, 1.14593f, + 0.87637f, 0.93203f, + 0.90150f, 0.54781f, + 0.90194f, 0.28107f, + 0.90396f, 0.77651f, + 0.91344f, 1.67514f, + 0.91460f, 1.27995f, + 0.92238f, 1.02473f, + 0.94031f, 0.64483f, + 0.94823f, 0.86409f, + 0.95213f, 2.18820f, + 0.95429f, 9.66209f, + 0.96577f, 1.13735f, + 0.96995f, 1.43937f, + 0.98642f, 0.73183f, + 0.98976f, 0.44851f, + 0.99279f, 0.96412f, + 1.01364f, 1.24786f, + 1.01384f, 4.90447f, + 1.03181f, 1.56947f, + 1.03190f, 0.84672f, + 1.03222f, 0.60701f, + 1.03298f, 2.76511f, + 1.04745f, 1.06143f, + 1.07766f, 1.85857f, + 1.07997f, 1.32889f, + 1.08258f, 0.73253f, + 1.09754f, 0.93681f, + 1.11974f, 0.56220f, + 1.12138f, 1.14494f, + 1.12727f, 7.08531f, + 1.13826f, 0.35750f, + 1.15349f, 3.91202f, + 1.15512f, 0.78878f, + 1.15719f, 1.39107f, + 1.17458f, 1.67543f, + 1.17838f, 0.47999f, + 1.18700f, 2.35013f, + 1.18745f, 0.65409f, + 1.18763f, 1.02774f, + 1.19631f, 0.88967f, + 1.20234f, 1.21708f, + 1.20388f, 3.09276f, + 1.20777f, 1.95577f, + 1.22262f, 1.46383f, +}; + +const float gp_gamma_4sfr_7b[2 * 128] = +{ + 0.00614f, 0.34082f, + 0.01391f, 1.05762f, + 0.02443f, 0.52528f, + 0.04487f, 0.81638f, + 0.04874f, 0.21725f, + 0.06993f, 1.56640f, + 0.07629f, 0.67352f, + 0.07879f, 2.22313f, + 0.08098f, 0.43740f, + 0.09023f, 3.33077f, + 0.09505f, 0.95967f, + 0.11885f, 0.57584f, + 0.12134f, 1.24892f, + 0.14301f, 0.75409f, + 0.14566f, 0.41623f, + 0.15510f, 0.25942f, + 0.17725f, 5.62734f, + 0.19522f, 0.88867f, + 0.19554f, 1.43765f, + 0.19650f, 0.53939f, + 0.21138f, 1.07147f, + 0.22636f, 0.66964f, + 0.22834f, 0.34542f, + 0.27047f, 0.44208f, + 0.27343f, 1.81016f, + 0.27564f, 0.77386f, + 0.27753f, 1.21557f, + 0.29907f, 0.56678f, + 0.30585f, 0.98300f, + 0.34187f, 1.45000f, + 0.34276f, 0.33704f, + 0.34717f, 0.83633f, + 0.36470f, 0.65856f, + 0.37820f, 11.45604f, + 0.38412f, 0.49390f, + 0.38418f, 1.13346f, + 0.38485f, 2.05689f, + 0.41457f, 0.93744f, + 0.42426f, 0.76410f, + 0.43646f, 0.41444f, + 0.44541f, 1.31106f, + 0.45622f, 0.61947f, + 0.47346f, 1.04294f, + 0.48320f, 1.67147f, + 0.50019f, 2.83094f, + 0.50036f, 0.85433f, + 0.50221f, 0.50957f, + 0.51480f, 0.30050f, + 0.51835f, 1.21580f, + 0.52200f, 0.69921f, + 0.56910f, 0.96246f, + 0.57210f, 1.45228f, + 0.57318f, 0.42340f, + 0.57432f, 0.57850f, + 0.59272f, 27.62970f, + 0.59273f, 0.79098f, + 0.59350f, 1.16826f, + 0.61815f, 2.22627f, + 0.62550f, 17.18756f, + 0.63421f, 0.67201f, + 0.64271f, 1.72413f, + 0.64340f, 1.05779f, + 0.64445f, 0.50287f, + 0.65749f, 0.86135f, + 0.67595f, 1.29639f, + 0.69966f, 0.59417f, + 0.70254f, 0.38318f, + 0.70504f, 4.35573f, + 0.70641f, 0.97924f, + 0.70865f, 0.76389f, + 0.74185f, 1.53170f, + 0.74492f, 1.12407f, + 0.75096f, 0.25992f, + 0.75760f, 0.66983f, + 0.76031f, 0.16414f, + 0.76100f, 0.86861f, + 0.77722f, 0.48258f, + 0.79164f, 1.24884f, + 0.79787f, 2.75496f, + 0.80213f, 1.92062f, + 0.80316f, 0.97431f, + 0.81517f, 0.75442f, + 0.82155f, 0.58120f, + 0.84462f, 1.38613f, + 0.84535f, 1.07504f, + 0.85024f, 0.83797f, + 0.88172f, 0.66936f, + 0.88187f, 0.33166f, + 0.88569f, 0.91259f, + 0.88687f, 1.67317f, + 0.89706f, 1.21637f, + 0.90149f, 8.92420f, + 0.90534f, 0.44771f, + 0.92077f, 0.99975f, + 0.92235f, 0.75611f, + 0.94772f, 1.12123f, + 0.94920f, 2.19992f, + 0.95049f, 1.49214f, + 0.95591f, 0.56753f, + 0.95686f, 0.86312f, + 0.97999f, 1.26652f, + 0.98876f, 0.99169f, + 0.99623f, 0.72017f, + 1.02046f, 1.14467f, + 1.02732f, 1.82793f, + 1.02752f, 0.87845f, + 1.03568f, 1.37180f, + 1.04905f, 0.61431f, + 1.06354f, 1.05062f, + 1.07911f, 0.77211f, + 1.08693f, 0.40802f, + 1.08979f, 1.54546f, + 1.10192f, 3.63558f, + 1.10610f, 0.92030f, + 1.11530f, 1.23483f, + 1.12457f, 6.79334f, + 1.13708f, 2.42086f, + 1.15646f, 0.27866f, + 1.15650f, 5.03152f, + 1.16276f, 0.51614f, + 1.16381f, 0.68259f, + 1.16652f, 0.98092f, + 1.17818f, 2.98864f, + 1.19029f, 1.63347f, + 1.19374f, 0.82502f, + 1.19452f, 1.35079f, + 1.20038f, 1.97983f, + 1.20145f, 1.11183f, +}; + + +/*----------------------------------------------------------------------------------* + * Transition coding - gain quantization table + *----------------------------------------------------------------------------------*/ + +const float tbl_gain_code_tc[N_GAIN_CODE_TC] = +{ + 0.36201f, + 0.72382f, + 0.96727f, + 1.1856f, + 1.4119f, + 1.679f, + 2.0743f, + 3.3301f +}; + +/*-----------------------------------------------------------------* + * Transition coding - gain quantization table for g_trans + *-----------------------------------------------------------------*/ + +const float tbl_gain_trans_tc[N_GAIN_TC] = +{ + 35.8449f, + 86.7884f, + 150.0926f, + 233.3001f, + 346.0286f, + 511.5196f, + 819.6746f, + 1500.0f +}; + +/*-----------------------------------------------------------------* + * Transition coding - table of prototype glottal impulses + *-----------------------------------------------------------------*/ + +const float glottal_cdbk[L_IMPULSE*NUM_IMPULSE] = +{ + /* impulse 0 */ + -0.0873f, -0.2063f, -0.3544f, -0.2126f, -0.1581f, -0.5208f, + -0.5973f, 0.2106f, 1.0000f, 0.7095f, -0.0767f, -0.2388f, + 0.0709f, 0.1143f, -0.0099f, 0.1015f, 0.1852f, + /* impulse 1 */ + -0.2646f, -0.1655f, -0.0493f, -0.3314f, -0.5455f, -0.2641f, + -0.2661f, -0.9837f, -1.1157f, 0.1420f, 1.2626f, 0.8151f, + -0.2146f, -0.3466f, 0.0460f, 0.0398f, -0.0598f, + /* impulse 2 */ + 0.0440f, 0.0685f, 0.5108f, 0.3092f, -0.4060f, -0.3111f, + 0.2513f, -0.2578f, -1.1648f, -0.7488f, 0.1596f, 0.0151f, + -0.4176f, -0.1788f, 0.0580f, -0.1082f, -0.1541f, + /* impulse 3 */ + -0.1579f, -0.0873f, -0.0224f, -0.1885f, -0.2000f, -0.0267f, + -0.4276f, -1.1485f, -0.9711f, -0.1718f, -0.0348f, -0.3044f, + 0.0372f, 0.5686f, 0.4015f, 0.0141f, 0.1816f, + /* impulse 4 */ + 0.1022f, 0.3080f, 0.2984f, 0.3270f, 0.7278f, 0.8466f, + -0.1128f, -1.2094f, -0.9235f, 0.0785f, 0.1648f, -0.3146f, + -0.2563f, -0.0338f, -0.1887f, -0.2782f, -0.1077f, + /* impulse 5 */ + -0.0510f, -0.1082f, -0.0058f, -0.0603f, -0.2891f, -0.2515f, + -0.1505f, -0.6434f, -1.2732f, -0.8490f, 0.4029f, 0.9251f, + 0.3172f, -0.2032f, -0.0563f, 0.0897f, -0.0221f, + /* impulse 6 */ + -0.0570f, -0.2277f, -0.1776f, -0.0155f, -0.2296f, -0.4609f, + 0.1004f, 1.0174f, 1.0000f, 0.1053f, -0.3371f, -0.0458f, + 0.0924f, -0.0681f, -0.0348f, 0.0797f, 0.0183f, + /* impulse 7 */ + 0.1327f, 0.0575f, -0.0754f, 0.0862f, 0.1887f, -0.1959f, + -0.3975f, 0.2925f, 0.9839f, 0.6334f, -0.0121f, -0.0045f, + 0.1349f, -0.0815f, -0.1751f, -0.0072f, -0.0099f +}; + +/*----------------------------------------------------------------------------------* + * AMR-WB IO WB BWE - deemphasis + *----------------------------------------------------------------------------------*/ + +const float deem_tab[56] = +{ + 0.630730419421360f, 0.629416164964296f, 0.628129905227103f, 0.626871385453679f, 0.625640357452226f, 0.624436579475560f, 0.623259816105156f, + 0.622109838138814f, 0.620986422481867f, 0.619889352041818f, 0.618818415626335f, 0.617773407844493f, 0.616754129011203f, 0.615760385054730f, + 0.614791987427225f, 0.613848753018209f, 0.612930504070914f, 0.612037068101433f, 0.611168277820597f, 0.610323971058526f, 0.609503990691786f, + 0.608708184573088f, 0.607936405463484f, 0.607188510967000f, 0.606464363467645f, 0.605763830068759f, 0.605086782534647f, 0.604433097234441f, + 0.603802655088168f, 0.603195341514964f, 0.602611046383395f, 0.602049663963857f, 0.601511092883003f, 0.600995236080178f, 0.600502000765808f, + 0.600031298381734f, 0.599583044563439f, 0.599157159104159f, 0.598753565920828f, 0.598372193021851f, 0.598012972476677f, 0.597675840387130f, + 0.597360736860508f, 0.597067605984399f, 0.596796395803217f, 0.596547058296428f, 0.596319549358454f, 0.596113828780239f, 0.595929860232466f, + 0.595767611250409f, 0.595627053220407f, 0.595508161367956f, 0.595410914747406f, 0.595335296233253f, 0.595281292513031f, 0.595248894081778f +}; + +const float filt_hp[56] = +{ + 0.001610570549503f, 0.004682981184545f, 0.008349027644995f, 0.012654118680910f, 0.017642537255539f, 0.023357023549788f, + 0.029838357405517f, 0.037124944278684f, 0.045252408764306f, 0.054253199698241f, 0.064156210737117f, 0.074986420169406f, + 0.086764553520305f, 0.099506772283889f, 0.113224391851657f, 0.127923631411203f, 0.143605398266754f, 0.160265108689438f, + 0.177892547044310f, 0.196471764568281f, 0.215981018793259f, 0.236392754226835f, 0.257673624523579f, 0.279784556007892f, + 0.302680852048711f, 0.326312337440982f, 0.350623541622164f, 0.375553919247241f, 0.401038106365070f, 0.427006210184762f, + 0.453384130194306f, 0.480093908196193f, 0.507054104656542f, 0.534180198625471f, 0.561385008376586f, 0.588579129831778f, + 0.615671389782721f, 0.642569310891142f, 0.669179585444241f, 0.695408554857669f, 0.721162691954086f, 0.746349083098340f, + 0.770875907338563f, 0.794652909783784f, 0.817591866540936f, 0.839607038635485f, 0.860615612448599f, 0.880538124318166f, + 0.899298867069991f, 0.916826276367851f, 0.933053294896263f, 0.947917712517199f, 0.961362480671352f, 0.973335999426038f, + 0.983792375705577f, 0.992691651376520f +}; + +/* table of values exp(-j*w*i) */ +const float exp_tab_q[34] = +{ + 1.000000000000000f, -0.980785280403230f, 0.923879532511287f, -0.831469612302544f, + 0.707106781186547f, -0.555570233019602f, 0.382683432365086f, -0.195090322016125f, + -0.000000000000003f, 0.195090322016130f, -0.382683432365091f, 0.555570233019606f, + -0.707106781186553f, 0.831469612302547f, -0.923879532511289f, 0.980785280403231f, + -1.000000000000000f, 0.000000000000000f, -0.195090322016129f, 0.382683432365090f, + -0.555570233019604f, 0.707106781186549f, -0.831469612302546f, 0.923879532511288f, + -0.980785280403231f, 1.000000000000000f, -0.980785280403230f, 0.923879532511286f, + -0.831469612302543f, 0.707106781186542f, -0.555570233019599f, 0.382683432365084f, + -0.195090322016126f, -0.000000000000005f +}; + +const float exp_tab_p[34] = +{ + 1.000000000000000f, -0.707106781186548f, -0.000000000000000f, 0.707106781186548f, + -1.000000000000000f, 0.707106781186547f, 0.000000000000000f, -0.707106781186547f, + 1.000000000000000f, -0.707106781186546f, -0.000000000000003f, 0.707106781186548f, + -1.000000000000000f, 0.707106781186546f, -0.000000000000000f, -0.707106781186548f, + 1.000000000000000f, 0.000000000000000f, -0.707106781186548f, 1.000000000000000f, + -0.707106781186547f, -0.000000000000000f, 0.707106781186549f, -1.000000000000000f, + 0.707106781186548f, 0.000000000000000f, -0.707106781186549f, 1.000000000000000f, + -0.707106781186548f, 0.000000000000000f, 0.707106781186549f, -1.000000000000000f, + 0.707106781186547f, 0.000000000000000f +}; + +/* gains for 23k85 mode */ +const float HP_gain[16] = +{ + /* values in Q15: 3624, 4673, 5597, 6479, 7425, 8378, 9324, 10264, 11210, 12206, 13391, 14844, 16770, 19655, 24289, 32728 */ + 0.110595703125000f, 0.142608642578125f, 0.170806884765625f, 0.197723388671875f, + 0.226593017578125f, 0.255676269531250f, 0.284545898437500f, 0.313232421875000f, + 0.342102050781250f, 0.372497558593750f, 0.408660888671875f, 0.453002929687500f, + 0.511779785156250f, 0.599822998046875f, 0.741241455078125f, 0.998779296875000f +}; + +/* band-pass 6-8kHz filter */ +const float fir_6k_8k[31]= +{ + 0.001331237773450f, -0.004734562657574f, 0.009865692979275f, -0.014704482109862f, + 0.017170883692091f, -0.018004559024736f, 0.022168155759205f, -0.036012990296002f, + 0.060614595353634f, -0.086000479894051f, 0.092413785317631f, -0.060769441864153f, + -0.012918738234409f, 0.109335430548556f, -0.191677822804549f, 0.224071909378974f, + -0.191677822804549f, 0.109335430548556f, -0.012918738234409f, -0.060769441864153f, + 0.092413785317631f, -0.086000479894051f, 0.060614595353634f, -0.036012990296002f, + 0.022168155759205f, -0.018004559024736f, 0.017170883692091f, -0.014704482109862f, + 0.009865692979275f, -0.004734562657574f, 0.001331237773450f +}; + + +/*----------------------------------------------------------------------------------* + * 2nd order high-pass filter with cut-off frequency at 400 Hz. + * Designed with Chebyshev of 2nd type + * Optimized for fixed-point to get the following frequency response: + * + * frequency: 0Hz 100Hz 200Hz 300Hz 400Hz 630Hz 1.5kHz 3kHz + * dB loss: -infdB -30dB -20dB -10dB -3dB +6dB +1dB 0dB + * + * Algorithm: + * + * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] + * + a[1]*y[i-1] + a[2]*y[i-2]; + * + * short b[3] = {3660, -7320, 3660}; in Q12 + * short a[3] = {4096, 7320, -3540}; in Q12 + *----------------------------------------------------------------------------------*/ + +const float b_hp400[3] = { 0.893554687f, -1.787109375f, 0.893554687f }; +const float a_hp400[3] = { 1.000000000f, 1.787109375f, -0.864257812f }; + +/*----------------------------------------------------------------------------------* + * 15th-order band-pass 6kHz to 7kHz FIR filter. + * + * frequency: 4kHz 5kHz 5.5kHz 6kHz 6.5kHz 7kHz 7.5kHz 8kHz + * dB loss: -60dB -45dB -13dB -3dB 0dB -3dB -13dB -45dB + * + * gain = 4.0 + *----------------------------------------------------------------------------------*/ + +const float fir_6k_7k[31] = +{ + -0.001005f, 0.001428f, 0.000965f, -0.000863f, -0.011296f, + 0.034231f, -0.043397f, -0.000000f, 0.115906f, -0.271028f, + 0.376868f, -0.335243f, 0.108276f, 0.237003f, -0.549363f, + 0.675000f, -0.549363f, 0.237003f, 0.108276f, -0.335243f, + 0.376868f, -0.271028f, 0.115906f, -0.000000f, -0.043397f, + 0.034231f, -0.011296f, -0.000863f, 0.000965f, 0.001428f, + -0.001005f +}; + +/*----------------------------------------------------------------------------------* + * Enhacer - 2.0 - 6.4 kHz impulse response with phase dispersion in freq. domain + *----------------------------------------------------------------------------------*/ + +const float low_H[L_SUBFR] = +{ + 1.000300f, 0.999812f, 1.000125f, 0.999868f, 0.999879f, 0.999935f, 0.999838f, 0.999992f, 1.000076f, 0.626554f, 0.619763f, 0.603882f, 0.857647f, 0.997470f, -0.032403f, + 0.806652f, 0.999300f, 0.946634f, 0.574139f, 0.973425f, 0.288464f, 0.890704f, 0.635021f, 0.597882f, -0.997076f, -0.110774f, -0.648392f, 0.771888f, 0.888411f, -0.774123f, + 0.695109f, 0.498998f, 0.999900f, -0.866525f, 0.719081f, 0.633481f, 0.458722f, 0.636210f, -0.761251f, 0.993932f, -0.073228f, -0.801816f, 0.772627f, -0.454461f, 0.957250f, + -0.229682f, -0.818972f, -0.322274f, 0.031800f, -0.591141f, -0.999439f, -0.074385f, 0.514882f, -0.797032f, -0.784999f, -0.779712f, -0.000028f, 0.000164f, 0.000029f, -0.000135f, + -0.000047f, -0.000033f, -0.000080f, 0.000099f +}; + +/*----------------------------------------------------------------------------------* + * Enhancer - 3.2 - 6.4 kHz impulse response with phase dispersion in freq. domain + *----------------------------------------------------------------------------------*/ + +const float mid_H[L_SUBFR] = +{ + 0.999900f, 0.999848f, 1.000003f, 1.000048f, 1.000107f, 1.000242f, 1.000165f, 0.999909f, 1.000212f, 0.999933f, 1.000099f, 1.000100f, 1.000113f, 1.000018f, 0.999901f, 1.000267f, + 0.906200f, 0.587715f, 0.808629f, 0.884216f, 0.671089f, 0.039238f, 0.843369f, 0.841006f, 0.394788f, 0.528863f, 0.710110f, 0.596973f, -0.893309f, -0.059908f, 0.716925f, -0.044067f, + 1.000100f, -0.998848f, -0.697170f, 0.998190f, 0.449397f, 0.802480f, -0.704198f, -0.848591f, -0.918649f, -0.540881f, 0.537822f, -0.999200f, -0.741318f, 0.467580f, -0.588204f, + -0.808928f, -0.422500f, 0.000219f, -0.000261f, -0.000086f, -0.000313f, 0.000080f, 0.000406f, 0.000351f, -0.000449f, -0.000065f, 0.000214f, -0.000254f, 0.000002f, -0.000090f, + -0.000198f, 0.000193f +}; + +/*-------------------------------------------------------------------* + * Low-pass FIR filter for low-freq post-filtering + * response : 0dB @ 50Hz, -6dB @ 500Hz, -45dB @ 1kHz) + * filter parameters: fs/2=8000, fc=500, gain=1.0, n=16 + *-------------------------------------------------------------------*/ + +const float tab_hup_l[SIZ_TAB_HUP_L] = +{ + -0.001246f, 0.002200f, -0.004791f, 0.009621f, -0.017685f, 0.031212f, -0.057225f, 0.135470f, 0.973955f, -0.103495f, 0.048663f, -0.027090f, 0.015280f, -0.008160f, + 0.003961f, -0.001827f, -0.002388f, 0.004479f, -0.009715f, 0.019261f, -0.035118f, 0.061945f, -0.115187f, 0.294161f, 0.898322f, -0.170283f, 0.083211f, -0.046645f, + 0.026210f, -0.013854f, 0.006641f, -0.003099f, -0.003277f, 0.006456f, -0.013906f, 0.027229f, -0.049283f, 0.086990f, -0.164590f, 0.464041f, 0.780309f, -0.199879f, + 0.100795f, -0.056792f, 0.031761f, -0.016606f, 0.007866f, -0.003740f, -0.003770f, 0.007714f, -0.016462f, 0.031849f, -0.057272f, 0.101294f, -0.195755f, 0.630993f, + 0.630993f, -0.195755f, 0.101294f, -0.057272f, 0.031849f, -0.016462f, 0.007714f, -0.003770f, -0.003740f, 0.007866f, -0.016606f, 0.031761f, -0.056792f, 0.100795f, + -0.199879f, 0.780309f, 0.464041f, -0.164590f, 0.086990f, -0.049283f, 0.027229f, -0.013906f, 0.006456f, -0.003277f, -0.003099f, 0.006641f, -0.013854f, 0.026210f, + -0.046645f, 0.083211f, -0.170283f, 0.898322f, 0.294161f, -0.115187f, 0.061945f, -0.035118f, 0.019261f, -0.009715f, 0.004479f, -0.002388f, -0.001827f, 0.003961f, + -0.008160f, 0.015280f, -0.027090f, 0.048663f, -0.103495f, 0.973955f, 0.135470f, -0.057225f, 0.031212f, -0.017685f, 0.009621f, -0.004791f, 0.002200f, -0.001246f +}; + +const float tab_hup_s[SIZ_TAB_HUP_S] = +{ + -0.005772f, 0.087669f, 0.965882f, -0.048753f, -0.014793f, 0.214886f, 0.868791f, -0.065537f, -0.028507f, 0.374334f, 0.723418f, -0.060834f, -0.045567f, 0.550847f, + 0.550847f, -0.045567f, -0.060834f, 0.723418f, 0.374334f, -0.028507f, -0.065537f, 0.868791f, 0.214886f, -0.014793f, -0.048753f, 0.965882f, 0.087669f, -0.005772f +}; + +/*-------------------------------------------------------------------* + * Bass post-filter + *-------------------------------------------------------------------*/ + +const float filt_lp[1+L_FILT] = +{ + 0.088250f, 0.086410f, 0.081074f, 0.072768f, 0.062294f, 0.050623f, 0.038774f, 0.027692f, + 0.018130f, 0.010578f, 0.005221f, 0.001946f, 0.000385f +}; + +const float filt_lp_16kHz[1+L_FILT16k] = +{ + 0.071410f, 0.070433f, 0.067568f, 0.062999f, 0.057020f, 0.050005f, + 0.042378f, 0.034577f, 0.027022f, 0.020078f, 0.014031f, 0.009070f, + 0.005276f, 0.002625f, 0.000999f, 0.000205f +}; + +/*-------------------------------------------------------------------* + * Pulse indexing tables for ACELP innovation coding + *-------------------------------------------------------------------*/ + +const int32_t PI_select_table[23][8] = +{ + {1, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0}, + {1, 2, 1, 0, 0, 0, 0, 0}, + {1, 3, 3, 1, 0, 0, 0, 0}, + {1, 4, 6, 4, 1, 0, 0, 0}, + {1, 5, 10, 10, 5, 1, 0, 0}, + {1, 6, 15, 20, 15, 6, 1, 0}, + {1, 7, 21, 35, 35, 21, 7, 1}, + {1, 8, 28, 56, 70, 56, 28, 8}, + {1, 9, 36, 84, 126, 126, 84, 36}, + {1, 10, 45, 120, 210, 252, 210, 120}, + {1, 11, 55, 165, 330, 462, 462, 330}, + {1, 12, 66, 220, 495, 792, 924, 792}, + {1, 13, 78, 286, 715, 1287, 1716, 1716}, + {1, 14, 91, 364, 1001, 2002, 3003, 3432}, + {1, 15, 105, 455, 1365, 3003, 5005, 6435}, + {1, 16, 120, 560, 1820, 4368, 8008, 11440}, + {1, 17, 136, 680, 2380, 6188, 12376, 19448}, + {1, 18, 153, 816, 3060, 8568, 18564, 31824}, + {1, 19, 171, 969, 3876, 11628, 27132, 50388}, + {1, 20, 190, 1140, 4845, 15504, 38760, 77520}, + {1, 21, 210, 1330, 5985, 20349, 54264, 116280}, + {1, 22, 231, 1540, 7315, 26334, 74613, 1705444} +}; + +const int32_t PI_offset[8][8] = +{ + /* for 0p(0). */ + {0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000}, + /* for 1p(1). */ + {0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000}, + /* for 2p(2,1). */ + {0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000}, + /* for 3p(3,2,1). */ + {0x00000,0x00000,0x01180,0x01540,0x00000,0x00000,0x00000,0x00000}, + /* for 4p(4,3,2,1). */ + {0x00000,0x00000,0x071C0,0x0A640,0x0ABE0,0x00000,0x00000,0x00000}, + /* for 5p(5,4,3,2,1). */ + {0x00000,0x00000,0x22200,0x3E900,0x45200,0x45980,0x00000,0x00000}, + /* for 6p(6,5,4,3,2,1). */ + {0x00000,0x00000,0x07d200,0x127c00,0x16ed80,0x179c80,0x17a5e0,0x00000}, + /* for 7p(7,6,5,4,3,2,1). */ + {0x00000,0x00000,0x165800,0x454400,0x654200,0x6E2500,0x6F2B80,0x6F36C0} +}; + +const int16_t PI_factor[7] = {0,0,120,560,1820,4368,8008}; + +/* ACELP pulse coding */ +const uint16_t low_len[10] = { 0, 0, 8, 5, 7,11,13,15,16,16 }; +const uint16_t low_mask[10] = { 0, 0, 255,31,127,2047,8191,32767,65535,65535 }; +const uint16_t indx_fact[10] = { 0, 0,2,172,345,140,190,223,463,1732 }; +const int16_t index_len[3] = { 0, 5, 9 }; +const int16_t index_mask_ACELP[3] = { 0, 31, 511 }; + + +/*------------------------------------------------------------------------------* + * EDCT tables + *------------------------------------------------------------------------------*/ + +const float edct_table_80[80] = +{ + 0.33433591f, 0.33420702f, 0.33394929f, 0.33356281f, 0.33304773f, 0.33240426f, 0.33163264f, 0.33073317f, + 0.32970620f, 0.32855212f, 0.32727137f, 0.32586446f, 0.32433192f, 0.32267434f, 0.32089236f, 0.31898668f, + 0.31695802f, 0.31480717f, 0.31253495f, 0.31014224f, 0.30762997f, 0.30499910f, 0.30225065f, 0.29938568f, + 0.29640528f, 0.29331062f, 0.29010288f, 0.28678330f, 0.28335316f, 0.27981378f, 0.27616653f, 0.27241281f, + 0.26855407f, 0.26459179f, 0.26052751f, 0.25636280f, 0.25209925f, 0.24773851f, 0.24328226f, 0.23873223f, + 0.23409016f, 0.22935784f, 0.22453710f, 0.21962979f, 0.21463782f, 0.20956310f, 0.20440759f, 0.19917327f, + 0.19386217f, 0.18847633f, 0.18301783f, 0.17748878f, 0.17189129f, 0.16622755f, 0.16049971f, 0.15471000f, + 0.14886065f, 0.14295391f, 0.13699206f, 0.13097739f, 0.12491224f, 0.11879892f, 0.11263981f, 0.10643727f, + 0.10019369f, 0.09391149f, 0.08759309f, 0.08124092f, 0.07485742f, 0.06844507f, 0.06200633f, 0.05554369f, + 0.04905963f, 0.04255666f, 0.03603728f, 0.02950402f, 0.02295937f, 0.01640588f, 0.00984606f, 0.00328244f +}; + +const float edct_table_120[120] = +{ + 0.30212379f, 0.30207202f, 0.30196850f, 0.30181323f, 0.30160625f, 0.30134759f, 0.30103730f, 0.30067542f, + 0.30026203f, 0.29979718f, 0.29928097f, 0.29871348f, 0.29809481f, 0.29742505f, 0.29670434f, 0.29593279f, + 0.29511053f, 0.29423770f, 0.29331446f, 0.29234097f, 0.29131738f, 0.29024387f, 0.28912063f, 0.28794786f, + 0.28672574f, 0.28545450f, 0.28413434f, 0.28276550f, 0.28134821f, 0.27988271f, 0.27836926f, 0.27680811f, + 0.27519952f, 0.27354379f, 0.27184118f, 0.27009200f, 0.26829654f, 0.26645510f, 0.26456801f, 0.26263559f, + 0.26065816f, 0.25863608f, 0.25656968f, 0.25445931f, 0.25230535f, 0.25010815f, 0.24786810f, 0.24558558f, + 0.24326098f, 0.24089470f, 0.23848714f, 0.23603872f, 0.23354985f, 0.23102097f, 0.22845250f, 0.22584489f, + 0.22319858f, 0.22051402f, 0.21779168f, 0.21503203f, 0.21223553f, 0.20940267f, 0.20653392f, 0.20362979f, + 0.20069076f, 0.19771735f, 0.19471006f, 0.19166941f, 0.18859591f, 0.18549011f, 0.18235251f, 0.17918368f, + 0.17598414f, 0.17275445f, 0.16949515f, 0.16620682f, 0.16289000f, 0.15954528f, 0.15617322f, 0.15277439f, + 0.14934940f, 0.14589881f, 0.14242322f, 0.13892323f, 0.13539943f, 0.13185244f, 0.12828285f, 0.12469128f, + 0.12107835f, 0.11744467f, 0.11379087f, 0.11011757f, 0.10642540f, 0.10271499f, 0.09898699f, 0.09524203f, + 0.09148074f, 0.08770378f, 0.08391180f, 0.08010544f, 0.07628535f, 0.07245219f, 0.06860661f, 0.06474928f, + 0.06088086f, 0.05700200f, 0.05311338f, 0.04921565f, 0.04530949f, 0.04139557f, 0.03747456f, 0.03354713f, + 0.02961394f, 0.02567569f, 0.02173303f, 0.01778665f, 0.01383722f, 0.00988542f, 0.00593193f, 0.00197742f +}; + +const float edct_table_320[320] = +{ + 0.23643389f, 0.23642819f, 0.23641680f, 0.23639971f, 0.23637692f, 0.23634844f, 0.23631426f, 0.23627439f, + 0.23622882f, 0.23617757f, 0.23612062f, 0.23605798f, 0.23598966f, 0.23591565f, 0.23583595f, 0.23575057f, + 0.23565951f, 0.23556278f, 0.23546036f, 0.23535227f, 0.23523852f, 0.23511909f, 0.23499400f, 0.23486324f, + 0.23472683f, 0.23458476f, 0.23443704f, 0.23428367f, 0.23412465f, 0.23396000f, 0.23378970f, 0.23361377f, + 0.23343222f, 0.23324504f, 0.23305223f, 0.23285382f, 0.23264979f, 0.23244015f, 0.23222492f, 0.23200409f, + 0.23177767f, 0.23154566f, 0.23130808f, 0.23106492f, 0.23081619f, 0.23056191f, 0.23030206f, 0.23003667f, + 0.22976573f, 0.22948926f, 0.22920726f, 0.22891974f, 0.22862670f, 0.22832815f, 0.22802410f, 0.22771455f, + 0.22739952f, 0.22707901f, 0.22675302f, 0.22642158f, 0.22608467f, 0.22574232f, 0.22539453f, 0.22504131f, + 0.22468267f, 0.22431861f, 0.22394915f, 0.22357429f, 0.22319405f, 0.22280842f, 0.22241743f, 0.22202108f, + 0.22161938f, 0.22121233f, 0.22079996f, 0.22038227f, 0.21995927f, 0.21953096f, 0.21909737f, 0.21865850f, + 0.21821436f, 0.21776496f, 0.21731032f, 0.21685044f, 0.21638533f, 0.21591501f, 0.21543948f, 0.21495877f, + 0.21447288f, 0.21398181f, 0.21348560f, 0.21298423f, 0.21247774f, 0.21196612f, 0.21144940f, 0.21092759f, + 0.21040069f, 0.20986872f, 0.20933169f, 0.20878962f, 0.20824252f, 0.20769041f, 0.20713328f, 0.20657117f, + 0.20600408f, 0.20543202f, 0.20485502f, 0.20427308f, 0.20368621f, 0.20309444f, 0.20249778f, 0.20189623f, + 0.20128983f, 0.20067857f, 0.20006247f, 0.19944156f, 0.19881584f, 0.19818532f, 0.19755004f, 0.19690999f, + 0.19626520f, 0.19561568f, 0.19496144f, 0.19430251f, 0.19363890f, 0.19297062f, 0.19229769f, 0.19162012f, + 0.19093794f, 0.19025116f, 0.18955980f, 0.18886386f, 0.18816338f, 0.18745836f, 0.18674883f, 0.18603479f, + 0.18531628f, 0.18459330f, 0.18386586f, 0.18313400f, 0.18239773f, 0.18165706f, 0.18091202f, 0.18016261f, + 0.17940887f, 0.17865080f, 0.17788842f, 0.17712176f, 0.17635084f, 0.17557566f, 0.17479625f, 0.17401263f, + 0.17322482f, 0.17243283f, 0.17163669f, 0.17083642f, 0.17003202f, 0.16922353f, 0.16841096f, 0.16759434f, + 0.16677367f, 0.16594899f, 0.16512031f, 0.16428765f, 0.16345103f, 0.16261047f, 0.16176600f, 0.16091763f, + 0.16006537f, 0.15920927f, 0.15834932f, 0.15748556f, 0.15661801f, 0.15574668f, 0.15487160f, 0.15399279f, + 0.15311027f, 0.15222405f, 0.15133417f, 0.15044065f, 0.14954350f, 0.14864274f, 0.14773840f, 0.14683051f, + 0.14591907f, 0.14500412f, 0.14408568f, 0.14316376f, 0.14223840f, 0.14130960f, 0.14037740f, 0.13944182f, + 0.13850288f, 0.13756060f, 0.13661501f, 0.13566613f, 0.13471397f, 0.13375858f, 0.13279995f, 0.13183813f, + 0.13087313f, 0.12990498f, 0.12893370f, 0.12795931f, 0.12698183f, 0.12600130f, 0.12501773f, 0.12403115f, + 0.12304158f, 0.12204905f, 0.12105357f, 0.12005518f, 0.11905390f, 0.11804974f, 0.11704275f, 0.11603293f, + 0.11502031f, 0.11400493f, 0.11298680f, 0.11196594f, 0.11094239f, 0.10991616f, 0.10888729f, 0.10785579f, + 0.10682169f, 0.10578502f, 0.10474580f, 0.10370406f, 0.10265981f, 0.10161310f, 0.10056393f, 0.09951234f, + 0.09845836f, 0.09740200f, 0.09634329f, 0.09528227f, 0.09421894f, 0.09315335f, 0.09208551f, 0.09101546f, + 0.08994321f, 0.08886879f, 0.08779223f, 0.08671356f, 0.08563280f, 0.08454997f, 0.08346511f, 0.08237823f, + 0.08128937f, 0.08019855f, 0.07910580f, 0.07801115f, 0.07691461f, 0.07581622f, 0.07471600f, 0.07361399f, + 0.07251019f, 0.07140466f, 0.07029740f, 0.06918844f, 0.06807783f, 0.06696557f, 0.06585169f, 0.06473623f, + 0.06361921f, 0.06250066f, 0.06138060f, 0.06025906f, 0.05913607f, 0.05801166f, 0.05688584f, 0.05575866f, + 0.05463013f, 0.05350029f, 0.05236916f, 0.05123676f, 0.05010313f, 0.04896830f, 0.04783228f, 0.04669511f, + 0.04555682f, 0.04441742f, 0.04327696f, 0.04213546f, 0.04099294f, 0.03984943f, 0.03870496f, 0.03755956f, + 0.03641326f, 0.03526607f, 0.03411804f, 0.03296919f, 0.03181954f, 0.03066912f, 0.02951797f, 0.02836610f, + 0.02721355f, 0.02606034f, 0.02490651f, 0.02375208f, 0.02259707f, 0.02144152f, 0.02028545f, 0.01912890f, + 0.01797188f, 0.01681443f, 0.01565658f, 0.01449834f, 0.01333976f, 0.01218086f, 0.01102166f, 0.00986220f, + 0.00870250f, 0.00754259f, 0.00638250f, 0.00522226f, 0.00406188f, 0.00290142f, 0.00174088f, 0.00058030f +}; + +const float edct_table_480[480] = +{ + 0.21364290f, 0.21364061f, 0.21363603f, 0.21362917f, 0.21362002f, 0.21360858f, 0.21359485f, 0.21357884f, + 0.21356053f, 0.21353995f, 0.21351707f, 0.21349191f, 0.21346446f, 0.21343473f, 0.21340271f, 0.21336840f, + 0.21333181f, 0.21329294f, 0.21325178f, 0.21320833f, 0.21316261f, 0.21311460f, 0.21306431f, 0.21301173f, + 0.21295688f, 0.21289974f, 0.21284033f, 0.21277863f, 0.21271466f, 0.21264841f, 0.21257988f, 0.21250908f, + 0.21243600f, 0.21236064f, 0.21228301f, 0.21220311f, 0.21212093f, 0.21203649f, 0.21194977f, 0.21186078f, + 0.21176952f, 0.21167600f, 0.21158021f, 0.21148215f, 0.21138183f, 0.21127924f, 0.21117439f, 0.21106728f, + 0.21095791f, 0.21084628f, 0.21073239f, 0.21061625f, 0.21049785f, 0.21037720f, 0.21025429f, 0.21012913f, + 0.21000172f, 0.20987206f, 0.20974016f, 0.20960601f, 0.20946961f, 0.20933097f, 0.20919009f, 0.20904697f, + 0.20890161f, 0.20875401f, 0.20860417f, 0.20845211f, 0.20829781f, 0.20814128f, 0.20798252f, 0.20782153f, + 0.20765832f, 0.20749288f, 0.20732522f, 0.20715535f, 0.20698325f, 0.20680894f, 0.20663241f, 0.20645367f, + 0.20627271f, 0.20608955f, 0.20590418f, 0.20571661f, 0.20552684f, 0.20533486f, 0.20514068f, 0.20494431f, + 0.20474574f, 0.20454498f, 0.20434203f, 0.20413689f, 0.20392956f, 0.20372005f, 0.20350836f, 0.20329449f, + 0.20307844f, 0.20286022f, 0.20263983f, 0.20241726f, 0.20219253f, 0.20196563f, 0.20173657f, 0.20150535f, + 0.20127197f, 0.20103643f, 0.20079874f, 0.20055891f, 0.20031692f, 0.20007279f, 0.19982652f, 0.19957810f, + 0.19932755f, 0.19907486f, 0.19882005f, 0.19856310f, 0.19830403f, 0.19804283f, 0.19777951f, 0.19751407f, + 0.19724652f, 0.19697686f, 0.19670509f, 0.19643121f, 0.19615522f, 0.19587714f, 0.19559696f, 0.19531468f, + 0.19503031f, 0.19474386f, 0.19445531f, 0.19416469f, 0.19387199f, 0.19357720f, 0.19328035f, 0.19298143f, + 0.19268044f, 0.19237739f, 0.19207227f, 0.19176510f, 0.19145588f, 0.19114460f, 0.19083128f, 0.19051592f, + 0.19019851f, 0.18987907f, 0.18955759f, 0.18923409f, 0.18890856f, 0.18858100f, 0.18825143f, 0.18791983f, + 0.18758623f, 0.18725062f, 0.18691300f, 0.18657338f, 0.18623176f, 0.18588815f, 0.18554255f, 0.18519496f, + 0.18484539f, 0.18449384f, 0.18414031f, 0.18378481f, 0.18342734f, 0.18306791f, 0.18270651f, 0.18234316f, + 0.18197786f, 0.18161061f, 0.18124141f, 0.18087028f, 0.18049720f, 0.18012220f, 0.17974526f, 0.17936640f, + 0.17898562f, 0.17860292f, 0.17821831f, 0.17783179f, 0.17744336f, 0.17705304f, 0.17666082f, 0.17626671f, + 0.17587071f, 0.17547282f, 0.17507306f, 0.17467142f, 0.17426791f, 0.17386254f, 0.17345530f, 0.17304621f, + 0.17263526f, 0.17222246f, 0.17180782f, 0.17139134f, 0.17097303f, 0.17055288f, 0.17013091f, 0.16970711f, + 0.16928150f, 0.16885407f, 0.16842484f, 0.16799380f, 0.16756096f, 0.16712633f, 0.16668991f, 0.16625171f, + 0.16581172f, 0.16536996f, 0.16492642f, 0.16448113f, 0.16403406f, 0.16358525f, 0.16313468f, 0.16268236f, + 0.16222830f, 0.16177251f, 0.16131498f, 0.16085572f, 0.16039474f, 0.15993205f, 0.15946764f, 0.15900152f, + 0.15853370f, 0.15806419f, 0.15759298f, 0.15712008f, 0.15664550f, 0.15616924f, 0.15569131f, 0.15521171f, + 0.15473045f, 0.15424753f, 0.15376297f, 0.15327675f, 0.15278889f, 0.15229940f, 0.15180828f, 0.15131553f, + 0.15082115f, 0.15032517f, 0.14982757f, 0.14932837f, 0.14882757f, 0.14832518f, 0.14782120f, 0.14731564f, + 0.14680849f, 0.14629978f, 0.14578950f, 0.14527766f, 0.14476426f, 0.14424931f, 0.14373282f, 0.14321478f, + 0.14269522f, 0.14217412f, 0.14165151f, 0.14112737f, 0.14060173f, 0.14007458f, 0.13954592f, 0.13901578f, + 0.13848414f, 0.13795103f, 0.13741643f, 0.13688037f, 0.13634283f, 0.13580384f, 0.13526339f, 0.13472150f, + 0.13417816f, 0.13363339f, 0.13308718f, 0.13253955f, 0.13199050f, 0.13144003f, 0.13088816f, 0.13033489f, + 0.12978022f, 0.12922416f, 0.12866672f, 0.12810790f, 0.12754770f, 0.12698614f, 0.12642323f, 0.12585895f, + 0.12529333f, 0.12472637f, 0.12415807f, 0.12358845f, 0.12301749f, 0.12244523f, 0.12187165f, 0.12129676f, + 0.12072058f, 0.12014310f, 0.11956434f, 0.11898429f, 0.11840297f, 0.11782039f, 0.11723654f, 0.11665144f, + 0.11606508f, 0.11547749f, 0.11488866f, 0.11429859f, 0.11370731f, 0.11311480f, 0.11252109f, 0.11192617f, + 0.11133005f, 0.11073273f, 0.11013424f, 0.10953456f, 0.10893371f, 0.10833169f, 0.10772852f, 0.10712419f, + 0.10651871f, 0.10591209f, 0.10530434f, 0.10469546f, 0.10408546f, 0.10347434f, 0.10286212f, 0.10224879f, + 0.10163437f, 0.10101886f, 0.10040227f, 0.09978460f, 0.09916587f, 0.09854607f, 0.09792522f, 0.09730332f, + 0.09668037f, 0.09605639f, 0.09543139f, 0.09480536f, 0.09417831f, 0.09355026f, 0.09292121f, 0.09229116f, + 0.09166012f, 0.09102810f, 0.09039510f, 0.08976114f, 0.08912622f, 0.08849034f, 0.08785351f, 0.08721574f, + 0.08657704f, 0.08593742f, 0.08529687f, 0.08465540f, 0.08401304f, 0.08336977f, 0.08272561f, 0.08208056f, + 0.08143463f, 0.08078784f, 0.08014017f, 0.07949165f, 0.07884228f, 0.07819206f, 0.07754101f, 0.07688912f, + 0.07623641f, 0.07558289f, 0.07492855f, 0.07427342f, 0.07361748f, 0.07296076f, 0.07230326f, 0.07164499f, + 0.07098594f, 0.07032614f, 0.06966558f, 0.06900428f, 0.06834224f, 0.06767946f, 0.06701596f, 0.06635175f, + 0.06568682f, 0.06502119f, 0.06435487f, 0.06368785f, 0.06302015f, 0.06235178f, 0.06168274f, 0.06101304f, + 0.06034268f, 0.05967168f, 0.05900004f, 0.05832777f, 0.05765488f, 0.05698136f, 0.05630724f, 0.05563251f, + 0.05495719f, 0.05428128f, 0.05360479f, 0.05292772f, 0.05225009f, 0.05157189f, 0.05089315f, 0.05021386f, + 0.04953403f, 0.04885367f, 0.04817279f, 0.04749139f, 0.04680949f, 0.04612708f, 0.04544418f, 0.04476079f, + 0.04407692f, 0.04339258f, 0.04270778f, 0.04202252f, 0.04133681f, 0.04065065f, 0.03996406f, 0.03927704f, + 0.03858961f, 0.03790175f, 0.03721350f, 0.03652484f, 0.03583579f, 0.03514636f, 0.03445656f, 0.03376638f, + 0.03307584f, 0.03238495f, 0.03169371f, 0.03100213f, 0.03031022f, 0.02961799f, 0.02892544f, 0.02823258f, + 0.02753941f, 0.02684595f, 0.02615221f, 0.02545818f, 0.02476388f, 0.02406932f, 0.02337449f, 0.02267942f, + 0.02198411f, 0.02128856f, 0.02059278f, 0.01989678f, 0.01920056f, 0.01850415f, 0.01780753f, 0.01711072f, + 0.01641373f, 0.01571657f, 0.01501923f, 0.01432174f, 0.01362409f, 0.01292630f, 0.01222836f, 0.01153030f, + 0.01083211f, 0.01013381f, 0.00943540f, 0.00873688f, 0.00803828f, 0.00733959f, 0.00664081f, 0.00594197f, + 0.00524307f, 0.00454410f, 0.00384509f, 0.00314604f, 0.00244696f, 0.00174784f, 0.00104871f, 0.00034957f +}; + +const float edct_table_128[128] = +{ + 0.29728989f, 0.29724512f, 0.29715558f, 0.29702130f, 0.29684228f, 0.29661856f, 0.29635017f, 0.29603715f, + 0.29567955f, 0.29527743f, 0.29483083f, 0.29433983f, 0.29380451f, 0.29322494f, 0.29260121f, 0.29193342f, + 0.29122167f, 0.29046605f, 0.28966670f, 0.28882372f, 0.28793724f, 0.28700741f, 0.28603435f, 0.28501821f, + 0.28395915f, 0.28285733f, 0.28171292f, 0.28052607f, 0.27929698f, 0.27802583f, 0.27671281f, 0.27535812f, + 0.27396196f, 0.27252454f, 0.27104609f, 0.26952681f, 0.26796694f, 0.26636672f, 0.26472638f, 0.26304618f, + 0.26132636f, 0.25956719f, 0.25776893f, 0.25593185f, 0.25405623f, 0.25214235f, 0.25019049f, 0.24820096f, + 0.24617405f, 0.24411007f, 0.24200932f, 0.23987213f, 0.23769882f, 0.23548971f, 0.23324513f, 0.23096543f, + 0.22865095f, 0.22630203f, 0.22391903f, 0.22150231f, 0.21905224f, 0.21656917f, 0.21405349f, 0.21150558f, + 0.20892581f, 0.20631458f, 0.20367228f, 0.20099931f, 0.19829606f, 0.19556296f, 0.19280040f, 0.19000881f, + 0.18718860f, 0.18434021f, 0.18146405f, 0.17856057f, 0.17563019f, 0.17267337f, 0.16969054f, 0.16668215f, + 0.16364867f, 0.16059054f, 0.15750822f, 0.15440219f, 0.15127290f, 0.14812083f, 0.14494646f, 0.14175026f, + 0.13853271f, 0.13529429f, 0.13203551f, 0.12875684f, 0.12545877f, 0.12214182f, 0.11880647f, 0.11545323f, + 0.11208260f, 0.10869509f, 0.10529122f, 0.10187148f, 0.09843641f, 0.09498651f, 0.09152231f, 0.08804432f, + 0.08455308f, 0.08104910f, 0.07753291f, 0.07400505f, 0.07046605f, 0.06691643f, 0.06335674f, 0.05978750f, + 0.05620926f, 0.05262256f, 0.04902793f, 0.04542591f, 0.04181706f, 0.03820191f, 0.03458100f, 0.03095489f, + 0.02732412f, 0.02368923f, 0.02005077f, 0.01640930f, 0.01276535f, 0.00911948f, 0.00547224f, 0.00182417f +}; + +const float edct_table_160[160] = +{ + 0.28116346f, 0.28113637f, 0.28108217f, 0.28100088f, 0.28089251f, 0.28075707f, 0.28059457f, 0.28040502f, + 0.28018844f, 0.27994487f, 0.27967431f, 0.27937679f, 0.27905235f, 0.27870101f, 0.27832281f, 0.27791778f, + 0.27748597f, 0.27702741f, 0.27654216f, 0.27603024f, 0.27549173f, 0.27492666f, 0.27433510f, 0.27371709f, + 0.27307270f, 0.27240199f, 0.27170503f, 0.27098188f, 0.27023261f, 0.26945730f, 0.26865602f, 0.26782884f, + 0.26697585f, 0.26609713f, 0.26519276f, 0.26426283f, 0.26330743f, 0.26232665f, 0.26132059f, 0.26028934f, + 0.25923300f, 0.25815168f, 0.25704548f, 0.25591450f, 0.25475886f, 0.25357866f, 0.25237403f, 0.25114506f, + 0.24989190f, 0.24861465f, 0.24731343f, 0.24598838f, 0.24463962f, 0.24326728f, 0.24187150f, 0.24045240f, + 0.23901013f, 0.23754482f, 0.23605661f, 0.23454566f, 0.23301210f, 0.23145608f, 0.22987775f, 0.22827726f, + 0.22665478f, 0.22501045f, 0.22334443f, 0.22165688f, 0.21994797f, 0.21821787f, 0.21646673f, 0.21469472f, + 0.21290203f, 0.21108881f, 0.20925525f, 0.20740152f, 0.20552780f, 0.20363427f, 0.20172112f, 0.19978852f, + 0.19783667f, 0.19586574f, 0.19387594f, 0.19186746f, 0.18984048f, 0.18779520f, 0.18573183f, 0.18365055f, + 0.18155157f, 0.17943510f, 0.17730133f, 0.17515047f, 0.17298273f, 0.17079832f, 0.16859744f, 0.16638032f, + 0.16414716f, 0.16189818f, 0.15963359f, 0.15735362f, 0.15505848f, 0.15274840f, 0.15042360f, 0.14808429f, + 0.14573072f, 0.14336310f, 0.14098166f, 0.13858663f, 0.13617825f, 0.13375674f, 0.13132234f, 0.12887528f, + 0.12641580f, 0.12394414f, 0.12146053f, 0.11896521f, 0.11645843f, 0.11394042f, 0.11141144f, 0.10887171f, + 0.10632149f, 0.10376102f, 0.10119055f, 0.09861033f, 0.09602061f, 0.09342163f, 0.09081364f, 0.08819691f, + 0.08557167f, 0.08293818f, 0.08029671f, 0.07764749f, 0.07499079f, 0.07232686f, 0.06965596f, 0.06697834f, + 0.06429427f, 0.06160401f, 0.05890780f, 0.05620592f, 0.05349862f, 0.05078617f, 0.04806882f, 0.04534683f, + 0.04262048f, 0.03989002f, 0.03715571f, 0.03441782f, 0.03167662f, 0.02893236f, 0.02618532f, 0.02343575f, + 0.02068392f, 0.01793009f, 0.01517454f, 0.01241753f, 0.00965932f, 0.00690018f, 0.00414037f, 0.00138017f +}; + +const float edct_table_40[40] = +{ + 0.39747255f, 0.39685967f, 0.39563487f, 0.39380003f, 0.39135797f, 0.38831247f, 0.38466823f, 0.38043085f, + 0.37560687f, 0.37020373f, 0.36422977f, 0.35769419f, 0.35060707f, 0.34297935f, 0.33482277f, 0.32614992f, + 0.31697417f, 0.30730967f, 0.29717132f, 0.28657476f, 0.27553631f, 0.26407301f, 0.25220253f, 0.23994317f, + 0.22731383f, 0.21433400f, 0.20102367f, 0.18740339f, 0.17349414f, 0.15931737f, 0.14489495f, 0.13024911f, + 0.11540244f, 0.10037782f, 0.08519843f, 0.06988767f, 0.05446914f, 0.03896663f, 0.02340404f, 0.00780536f +}; + +const float edct_table_20[20] = +{ + 0.47209725f, 0.46918661f, 0.46338329f, 0.45472305f, 0.44325929f, 0.42906269f, 0.41222077f, 0.39283738f, + 0.37103202f, 0.34693912f, 0.32070722f, 0.29249806f, 0.26248555f, 0.23085473f, 0.19780061f, 0.16352698f, + 0.12824516f, 0.09217267f, 0.05553190f, 0.01854875f +}; + + +const float edct_table_64[64] = +{ + 0.35349683f, 0.35328389f, 0.35285816f, 0.35221987f, 0.35136942f, 0.35030732f, 0.34903420f, 0.34755084f, + 0.34585813f, 0.34395709f, 0.34184886f, 0.33953471f, 0.33701604f, 0.33429436f, 0.33137132f, 0.32824867f, + 0.32492830f, 0.32141220f, 0.31770249f, 0.31380142f, 0.30971132f, 0.30543466f, 0.30097402f, 0.29633209f, + 0.29151165f, 0.28651562f, 0.28134701f, 0.27600892f, 0.27050457f, 0.26483728f, 0.25901046f, 0.25302763f, + 0.24689238f, 0.24060841f, 0.23417951f, 0.22760955f, 0.22090248f, 0.21406235f, 0.20709328f, 0.19999946f, + 0.19278517f, 0.18545475f, 0.17801263f, 0.17046327f, 0.16281123f, 0.15506112f, 0.14721761f, 0.13928542f, + 0.13126933f, 0.12317417f, 0.11500482f, 0.10676618f, 0.09846324f, 0.09010099f, 0.08168446f, 0.07321873f, + 0.06470889f, 0.05616008f, 0.04757744f, 0.03896613f, 0.03033136f, 0.02167832f, 0.01301222f, 0.00433828f +}; + +const float edct_table_100[100] = +{ + 0.31620704f, 0.31612902f, 0.31597300f, 0.31573902f, 0.31542714f, 0.31503742f, 0.31456998f, 0.31402492f, + 0.31340238f, 0.31270252f, 0.31192550f, 0.31107151f, 0.31014078f, 0.30913352f, 0.30804998f, 0.30689044f, + 0.30565518f, 0.30434451f, 0.30295874f, 0.30149822f, 0.29996331f, 0.29835439f, 0.29667186f, 0.29491612f, + 0.29308762f, 0.29118680f, 0.28921414f, 0.28717012f, 0.28505525f, 0.28287004f, 0.28061503f, 0.27829079f, + 0.27589789f, 0.27343691f, 0.27090847f, 0.26831318f, 0.26565169f, 0.26292465f, 0.26013275f, 0.25727665f, + 0.25435708f, 0.25137475f, 0.24833040f, 0.24522478f, 0.24205865f, 0.23883279f, 0.23554801f, 0.23220511f, + 0.22880491f, 0.22534827f, 0.22183602f, 0.21826903f, 0.21464819f, 0.21097439f, 0.20724854f, 0.20347155f, + 0.19964436f, 0.19576790f, 0.19184315f, 0.18787106f, 0.18385261f, 0.17978880f, 0.17568064f, 0.17152912f, + 0.16733529f, 0.16310016f, 0.15882480f, 0.15451024f, 0.15015756f, 0.14576784f, 0.14134215f, 0.13688158f, + 0.13238724f, 0.12786023f, 0.12330168f, 0.11871271f, 0.11409444f, 0.10944803f, 0.10477460f, 0.10007533f, + 0.09535137f, 0.09060388f, 0.08583403f, 0.08104300f, 0.07623198f, 0.07140215f, 0.06655470f, 0.06169084f, + 0.05681175f, 0.05191864f, 0.04701272f, 0.04209520f, 0.03716730f, 0.03223022f, 0.02728520f, 0.02233344f, + 0.01737617f, 0.01241461f, 0.00744999f, 0.00248354f +}; + + +const float edct_table_200[200] = +{ + 0.26591044f, 0.26589403f, 0.26586123f, 0.26581203f, 0.26574643f, 0.26566443f, 0.26556605f, 0.26545129f, + 0.26532015f, 0.26517265f, 0.26500879f, 0.26482859f, 0.26463205f, 0.26441918f, 0.26419000f, 0.26394453f, + 0.26368278f, 0.26340476f, 0.26311049f, 0.26279999f, 0.26247328f, 0.26213038f, 0.26177132f, 0.26139610f, + 0.26100476f, 0.26059732f, 0.26017381f, 0.25973424f, 0.25927866f, 0.25880708f, 0.25831954f, 0.25781606f, + 0.25729668f, 0.25676143f, 0.25621034f, 0.25564344f, 0.25506078f, 0.25446238f, 0.25384829f, 0.25321854f, + 0.25257317f, 0.25191222f, 0.25123573f, 0.25054374f, 0.24983629f, 0.24911344f, 0.24837522f, 0.24762168f, + 0.24685286f, 0.24606882f, 0.24526960f, 0.24445525f, 0.24362582f, 0.24278136f, 0.24192193f, 0.24104757f, + 0.24015834f, 0.23925430f, 0.23833551f, 0.23740201f, 0.23645386f, 0.23549113f, 0.23451388f, 0.23352215f, + 0.23251603f, 0.23149556f, 0.23046081f, 0.22941185f, 0.22834873f, 0.22727153f, 0.22618031f, 0.22507514f, + 0.22395608f, 0.22282321f, 0.22167659f, 0.22051630f, 0.21934241f, 0.21815499f, 0.21695411f, 0.21573985f, + 0.21451228f, 0.21327148f, 0.21201752f, 0.21075048f, 0.20947045f, 0.20817749f, 0.20687169f, 0.20555313f, + 0.20422189f, 0.20287806f, 0.20152171f, 0.20015293f, 0.19877180f, 0.19737841f, 0.19597285f, 0.19455519f, + 0.19312554f, 0.19168397f, 0.19023058f, 0.18876546f, 0.18728869f, 0.18580037f, 0.18430058f, 0.18278943f, + 0.18126701f, 0.17973340f, 0.17818870f, 0.17663302f, 0.17506644f, 0.17348906f, 0.17190097f, 0.17030229f, + 0.16869310f, 0.16707350f, 0.16544360f, 0.16380349f, 0.16215328f, 0.16049306f, 0.15882295f, 0.15714304f, + 0.15545343f, 0.15375424f, 0.15204556f, 0.15032750f, 0.14860017f, 0.14686367f, 0.14511812f, 0.14336361f, + 0.14160026f, 0.13982818f, 0.13804747f, 0.13625824f, 0.13446061f, 0.13265468f, 0.13084058f, 0.12901840f, + 0.12718826f, 0.12535028f, 0.12350456f, 0.12165123f, 0.11979039f, 0.11792217f, 0.11604667f, 0.11416401f, + 0.11227431f, 0.11037768f, 0.10847425f, 0.10656412f, 0.10464742f, 0.10272426f, 0.10079477f, 0.09885906f, + 0.09691726f, 0.09496947f, 0.09301583f, 0.09105645f, 0.08909145f, 0.08712096f, 0.08514509f, 0.08316397f, + 0.08117772f, 0.07918646f, 0.07719032f, 0.07518942f, 0.07318388f, 0.07117382f, 0.06915937f, 0.06714066f, + 0.06511781f, 0.06309094f, 0.06106018f, 0.05902565f, 0.05698748f, 0.05494580f, 0.05290072f, 0.05085238f, + 0.04880091f, 0.04674643f, 0.04468906f, 0.04262893f, 0.04056618f, 0.03850092f, 0.03643329f, 0.03436341f, + 0.03229142f, 0.03021743f, 0.02814157f, 0.02606398f, 0.02398478f, 0.02190411f, 0.01982208f, 0.01773883f, + 0.01565448f, 0.01356917f, 0.01148302f, 0.00939617f, 0.00730873f, 0.00522084f, 0.00313264f, 0.00104423f +}; + +const float edct_table_240[240] = +{ + 0.25406349f, 0.25405260f, 0.25403084f, 0.25399819f, 0.25395466f, 0.25390025f, 0.25383497f, 0.25375881f, + 0.25367179f, 0.25357389f, 0.25346514f, 0.25334553f, 0.25321506f, 0.25307375f, 0.25292160f, 0.25275861f, + 0.25258479f, 0.25240016f, 0.25220471f, 0.25199846f, 0.25178142f, 0.25155358f, 0.25131498f, 0.25106561f, + 0.25080548f, 0.25053461f, 0.25025301f, 0.24996068f, 0.24965766f, 0.24934393f, 0.24901953f, 0.24868445f, + 0.24833873f, 0.24798236f, 0.24761538f, 0.24723778f, 0.24684960f, 0.24645084f, 0.24604153f, 0.24562167f, + 0.24519129f, 0.24475042f, 0.24429905f, 0.24383722f, 0.24336495f, 0.24288225f, 0.24238915f, 0.24188566f, + 0.24137181f, 0.24084762f, 0.24031312f, 0.23976832f, 0.23921325f, 0.23864793f, 0.23807239f, 0.23748665f, + 0.23689074f, 0.23628468f, 0.23566850f, 0.23504223f, 0.23440588f, 0.23375950f, 0.23310310f, 0.23243671f, + 0.23176037f, 0.23107410f, 0.23037794f, 0.22967190f, 0.22895603f, 0.22823035f, 0.22749489f, 0.22674968f, + 0.22599477f, 0.22523017f, 0.22445592f, 0.22367206f, 0.22287862f, 0.22207563f, 0.22126313f, 0.22044115f, + 0.21960972f, 0.21876889f, 0.21791869f, 0.21705915f, 0.21619032f, 0.21531222f, 0.21442490f, 0.21352839f, + 0.21262274f, 0.21170798f, 0.21078415f, 0.20985130f, 0.20890945f, 0.20795865f, 0.20699895f, 0.20603038f, + 0.20505298f, 0.20406680f, 0.20307188f, 0.20206825f, 0.20105598f, 0.20003509f, 0.19900563f, 0.19796764f, + 0.19692118f, 0.19586628f, 0.19480299f, 0.19373136f, 0.19265142f, 0.19156324f, 0.19046685f, 0.18936230f, + 0.18824963f, 0.18712891f, 0.18600017f, 0.18486346f, 0.18371883f, 0.18256633f, 0.18140601f, 0.18023792f, + 0.17906211f, 0.17787863f, 0.17668753f, 0.17548886f, 0.17428267f, 0.17306902f, 0.17184795f, 0.17061952f, + 0.16938379f, 0.16814079f, 0.16689060f, 0.16563326f, 0.16436882f, 0.16309734f, 0.16181887f, 0.16053347f, + 0.15924120f, 0.15794210f, 0.15663624f, 0.15532366f, 0.15400444f, 0.15267862f, 0.15134625f, 0.15000741f, + 0.14866213f, 0.14731049f, 0.14595254f, 0.14458834f, 0.14321795f, 0.14184141f, 0.14045881f, 0.13907018f, + 0.13767560f, 0.13627512f, 0.13486881f, 0.13345671f, 0.13203890f, 0.13061544f, 0.12918637f, 0.12775178f, + 0.12631171f, 0.12486623f, 0.12341540f, 0.12195929f, 0.12049795f, 0.11903145f, 0.11755985f, 0.11608321f, + 0.11460161f, 0.11311509f, 0.11162373f, 0.11012758f, 0.10862672f, 0.10712120f, 0.10561110f, 0.10409647f, + 0.10257739f, 0.10105391f, 0.09952610f, 0.09799402f, 0.09645775f, 0.09491735f, 0.09337288f, 0.09182441f, + 0.09027201f, 0.08871574f, 0.08715567f, 0.08559187f, 0.08402440f, 0.08245333f, 0.08087873f, 0.07930067f, + 0.07771920f, 0.07613441f, 0.07454636f, 0.07295511f, 0.07136074f, 0.06976332f, 0.06816290f, 0.06655956f, + 0.06495338f, 0.06334441f, 0.06173272f, 0.06011839f, 0.05850149f, 0.05688208f, 0.05526024f, 0.05363602f, + 0.05200951f, 0.05038078f, 0.04874988f, 0.04711689f, 0.04548189f, 0.04384494f, 0.04220611f, 0.04056547f, + 0.03892310f, 0.03727906f, 0.03563342f, 0.03398625f, 0.03233763f, 0.03068762f, 0.02903630f, 0.02738373f, + 0.02573000f, 0.02407516f, 0.02241928f, 0.02076245f, 0.01910473f, 0.01744619f, 0.01578690f, 0.01412694f, + 0.01246637f, 0.01080527f, 0.00914370f, 0.00748175f, 0.00581947f, 0.00415694f, 0.00249424f, 0.00083142f +}; + +const float edct_table_256[256] = +{ + 0.24999750f, 0.24998809f, 0.24996926f, 0.24994103f, 0.24990338f, 0.24985633f, 0.24979987f, 0.24973400f, + 0.24965873f, 0.24957406f, 0.24948000f, 0.24937654f, 0.24926370f, 0.24914147f, 0.24900986f, 0.24886887f, + 0.24871852f, 0.24855880f, 0.24838972f, 0.24821129f, 0.24802352f, 0.24782640f, 0.24761996f, 0.24740419f, + 0.24717911f, 0.24694473f, 0.24670104f, 0.24644807f, 0.24618582f, 0.24591430f, 0.24563353f, 0.24534350f, + 0.24504424f, 0.24473575f, 0.24441805f, 0.24409114f, 0.24375505f, 0.24340977f, 0.24305534f, 0.24269175f, + 0.24231903f, 0.24193718f, 0.24154622f, 0.24114617f, 0.24073704f, 0.24031885f, 0.23989161f, 0.23945534f, + 0.23901005f, 0.23855576f, 0.23809249f, 0.23762026f, 0.23713908f, 0.23664898f, 0.23614996f, 0.23564205f, + 0.23512527f, 0.23459964f, 0.23406518f, 0.23352190f, 0.23296983f, 0.23240899f, 0.23183940f, 0.23126109f, + 0.23067406f, 0.23007835f, 0.22947398f, 0.22886097f, 0.22823934f, 0.22760912f, 0.22697033f, 0.22632299f, + 0.22566713f, 0.22500278f, 0.22432996f, 0.22364869f, 0.22295900f, 0.22226091f, 0.22155446f, 0.22083967f, + 0.22011656f, 0.21938516f, 0.21864551f, 0.21789762f, 0.21714153f, 0.21637726f, 0.21560485f, 0.21482432f, + 0.21403570f, 0.21323902f, 0.21243432f, 0.21162161f, 0.21080094f, 0.20997234f, 0.20913582f, 0.20829144f, + 0.20743921f, 0.20657917f, 0.20571136f, 0.20483580f, 0.20395252f, 0.20306157f, 0.20216298f, 0.20125677f, + 0.20034298f, 0.19942165f, 0.19849282f, 0.19755651f, 0.19661276f, 0.19566161f, 0.19470310f, 0.19373725f, + 0.19276411f, 0.19178371f, 0.19079609f, 0.18980129f, 0.18879934f, 0.18779029f, 0.18677416f, 0.18575100f, + 0.18472085f, 0.18368375f, 0.18263973f, 0.18158883f, 0.18053109f, 0.17946656f, 0.17839527f, 0.17731727f, + 0.17623259f, 0.17514127f, 0.17404336f, 0.17293890f, 0.17182793f, 0.17071048f, 0.16958661f, 0.16845636f, + 0.16731976f, 0.16617686f, 0.16502771f, 0.16387235f, 0.16271081f, 0.16154315f, 0.16036940f, 0.15918962f, + 0.15800385f, 0.15681212f, 0.15561450f, 0.15441101f, 0.15320171f, 0.15198664f, 0.15076585f, 0.14953939f, + 0.14830729f, 0.14706961f, 0.14582639f, 0.14457768f, 0.14332353f, 0.14206399f, 0.14079909f, 0.13952889f, + 0.13825344f, 0.13697279f, 0.13568698f, 0.13439606f, 0.13310008f, 0.13179909f, 0.13049313f, 0.12918227f, + 0.12786654f, 0.12654599f, 0.12522068f, 0.12389066f, 0.12255597f, 0.12121667f, 0.11987280f, 0.11852443f, + 0.11717159f, 0.11581433f, 0.11445272f, 0.11308680f, 0.11171662f, 0.11034223f, 0.10896369f, 0.10758105f, + 0.10619436f, 0.10480367f, 0.10340903f, 0.10201050f, 0.10060813f, 0.09920197f, 0.09779208f, 0.09637850f, + 0.09496130f, 0.09354052f, 0.09211622f, 0.09068845f, 0.08925727f, 0.08782272f, 0.08638487f, 0.08494377f, + 0.08349947f, 0.08205203f, 0.08060149f, 0.07914792f, 0.07769138f, 0.07623190f, 0.07476956f, 0.07330440f, + 0.07183648f, 0.07036586f, 0.06889259f, 0.06741672f, 0.06593832f, 0.06445743f, 0.06297412f, 0.06148844f, + 0.06000044f, 0.05851018f, 0.05701772f, 0.05552311f, 0.05402641f, 0.05252768f, 0.05102697f, 0.04952434f, + 0.04801985f, 0.04651354f, 0.04500549f, 0.04349574f, 0.04198435f, 0.04047138f, 0.03895689f, 0.03744094f, + 0.03592357f, 0.03440485f, 0.03288483f, 0.03136358f, 0.02984115f, 0.02831759f, 0.02679296f, 0.02526733f, + 0.02374075f, 0.02221327f, 0.02068496f, 0.01915586f, 0.01762605f, 0.01609557f, 0.01456449f, 0.01303286f, + 0.01150073f, 0.00996818f, 0.00843525f, 0.00690200f, 0.00536849f, 0.00383478f, 0.00230093f, 0.00076699f +}; + +const float edct_table_400[400] = +{ + 0.22360588f, 0.22360243f, 0.22359554f, 0.22358519f, 0.22357140f, 0.22355416f, 0.22353347f, 0.22350934f, + 0.22348175f, 0.22345073f, 0.22341625f, 0.22337833f, 0.22333697f, 0.22329216f, 0.22324391f, 0.22319221f, + 0.22313708f, 0.22307850f, 0.22301648f, 0.22295103f, 0.22288213f, 0.22280980f, 0.22273403f, 0.22265483f, + 0.22257219f, 0.22248612f, 0.22239662f, 0.22230369f, 0.22220734f, 0.22210755f, 0.22200434f, 0.22189771f, + 0.22178765f, 0.22167418f, 0.22155728f, 0.22143697f, 0.22131325f, 0.22118611f, 0.22105556f, 0.22092160f, + 0.22078424f, 0.22064347f, 0.22049930f, 0.22035172f, 0.22020075f, 0.22004639f, 0.21988863f, 0.21972748f, + 0.21956294f, 0.21939501f, 0.21922370f, 0.21904901f, 0.21887095f, 0.21868950f, 0.21850469f, 0.21831650f, + 0.21812495f, 0.21793004f, 0.21773176f, 0.21753013f, 0.21732514f, 0.21711680f, 0.21690511f, 0.21669008f, + 0.21647170f, 0.21624999f, 0.21602494f, 0.21579656f, 0.21556486f, 0.21532983f, 0.21509147f, 0.21484981f, + 0.21460482f, 0.21435653f, 0.21410494f, 0.21385004f, 0.21359184f, 0.21333035f, 0.21306557f, 0.21279750f, + 0.21252616f, 0.21225153f, 0.21197363f, 0.21169247f, 0.21140803f, 0.21112034f, 0.21082939f, 0.21053520f, + 0.21023775f, 0.20993706f, 0.20963314f, 0.20932598f, 0.20901559f, 0.20870198f, 0.20838516f, 0.20806511f, + 0.20774186f, 0.20741541f, 0.20708576f, 0.20675291f, 0.20641688f, 0.20607766f, 0.20573527f, 0.20538970f, + 0.20504096f, 0.20468907f, 0.20433401f, 0.20397581f, 0.20361446f, 0.20324997f, 0.20288234f, 0.20251159f, + 0.20213771f, 0.20176072f, 0.20138061f, 0.20099740f, 0.20061109f, 0.20022169f, 0.19982920f, 0.19943362f, + 0.19903497f, 0.19863326f, 0.19822847f, 0.19782064f, 0.19740975f, 0.19699581f, 0.19657884f, 0.19615884f, + 0.19573581f, 0.19530977f, 0.19488071f, 0.19444865f, 0.19401358f, 0.19357553f, 0.19313449f, 0.19269047f, + 0.19224348f, 0.19179353f, 0.19134062f, 0.19088476f, 0.19042595f, 0.18996421f, 0.18949954f, 0.18903194f, + 0.18856143f, 0.18808802f, 0.18761170f, 0.18713249f, 0.18665039f, 0.18616542f, 0.18567757f, 0.18518686f, + 0.18469330f, 0.18419688f, 0.18369763f, 0.18319554f, 0.18269063f, 0.18218290f, 0.18167236f, 0.18115902f, + 0.18064289f, 0.18012397f, 0.17960227f, 0.17907781f, 0.17855058f, 0.17802060f, 0.17748787f, 0.17695240f, + 0.17641421f, 0.17587330f, 0.17532967f, 0.17478334f, 0.17423432f, 0.17368260f, 0.17312821f, 0.17257115f, + 0.17201143f, 0.17144906f, 0.17088404f, 0.17031639f, 0.16974611f, 0.16917321f, 0.16859770f, 0.16801960f, + 0.16743890f, 0.16685562f, 0.16626977f, 0.16568135f, 0.16509038f, 0.16449686f, 0.16390080f, 0.16330222f, + 0.16270112f, 0.16209751f, 0.16149140f, 0.16088280f, 0.16027172f, 0.15965817f, 0.15904216f, 0.15842369f, + 0.15780278f, 0.15717944f, 0.15655367f, 0.15592549f, 0.15529490f, 0.15466192f, 0.15402655f, 0.15338881f, + 0.15274870f, 0.15210624f, 0.15146143f, 0.15081429f, 0.15016482f, 0.14951304f, 0.14885894f, 0.14820256f, + 0.14754389f, 0.14688294f, 0.14621973f, 0.14555426f, 0.14488655f, 0.14421660f, 0.14354443f, 0.14287005f, + 0.14219346f, 0.14151468f, 0.14083372f, 0.14015058f, 0.13946529f, 0.13877784f, 0.13808825f, 0.13739654f, + 0.13670270f, 0.13600676f, 0.13530872f, 0.13460859f, 0.13390639f, 0.13320212f, 0.13249580f, 0.13178744f, + 0.13107704f, 0.13036462f, 0.12965019f, 0.12893376f, 0.12821535f, 0.12749495f, 0.12677259f, 0.12604828f, + 0.12532202f, 0.12459383f, 0.12386371f, 0.12313169f, 0.12239777f, 0.12166196f, 0.12092427f, 0.12018472f, + 0.11944332f, 0.11870007f, 0.11795500f, 0.11720810f, 0.11645940f, 0.11570890f, 0.11495662f, 0.11420256f, + 0.11344675f, 0.11268918f, 0.11192987f, 0.11116884f, 0.11040610f, 0.10964165f, 0.10887551f, 0.10810770f, + 0.10733821f, 0.10656707f, 0.10579429f, 0.10501988f, 0.10424384f, 0.10346620f, 0.10268696f, 0.10190614f, + 0.10112375f, 0.10033980f, 0.09955430f, 0.09876726f, 0.09797871f, 0.09718864f, 0.09639707f, 0.09560402f, + 0.09480949f, 0.09401350f, 0.09321606f, 0.09241718f, 0.09161688f, 0.09081516f, 0.09001205f, 0.08920754f, + 0.08840166f, 0.08759442f, 0.08678583f, 0.08597589f, 0.08516464f, 0.08435207f, 0.08353819f, 0.08272303f, + 0.08190660f, 0.08108890f, 0.08026995f, 0.07944976f, 0.07862835f, 0.07780572f, 0.07698190f, 0.07615688f, + 0.07533070f, 0.07450335f, 0.07367485f, 0.07284522f, 0.07201446f, 0.07118259f, 0.07034963f, 0.06951558f, + 0.06868046f, 0.06784427f, 0.06700705f, 0.06616879f, 0.06532951f, 0.06448922f, 0.06364793f, 0.06280567f, + 0.06196244f, 0.06111825f, 0.06027312f, 0.05942705f, 0.05858008f, 0.05773220f, 0.05688343f, 0.05603378f, + 0.05518327f, 0.05433190f, 0.05347970f, 0.05262667f, 0.05177284f, 0.05091820f, 0.05006278f, 0.04920659f, + 0.04834964f, 0.04749194f, 0.04663351f, 0.04577436f, 0.04491450f, 0.04405396f, 0.04319273f, 0.04233084f, + 0.04146829f, 0.04060511f, 0.03974129f, 0.03887687f, 0.03801185f, 0.03714624f, 0.03628005f, 0.03541331f, + 0.03454602f, 0.03367820f, 0.03280986f, 0.03194101f, 0.03107167f, 0.03020186f, 0.02933157f, 0.02846084f, + 0.02758966f, 0.02671806f, 0.02584605f, 0.02497364f, 0.02410084f, 0.02322767f, 0.02235414f, 0.02148027f, + 0.02060607f, 0.01973155f, 0.01885673f, 0.01798161f, 0.01710622f, 0.01623056f, 0.01535466f, 0.01447851f, + 0.01360215f, 0.01272557f, 0.01184880f, 0.01097184f, 0.01009472f, 0.00921744f, 0.00834001f, 0.00746246f, + 0.00658480f, 0.00570703f, 0.00482917f, 0.00395124f, 0.00307325f, 0.00219521f, 0.00131714f, 0.00043905f +}; + +const float edct_table_600[600] = +{ + 0.20205118f, 0.20204980f, 0.20204703f, 0.20204287f, 0.20203734f, 0.20203041f, 0.20202210f, 0.20201241f, + 0.20200133f, 0.20198887f, 0.20197502f, 0.20195979f, 0.20194318f, 0.20192518f, 0.20190579f, 0.20188503f, + 0.20186288f, 0.20183934f, 0.20181442f, 0.20178812f, 0.20176044f, 0.20173137f, 0.20170092f, 0.20166909f, + 0.20163587f, 0.20160128f, 0.20156530f, 0.20152794f, 0.20148920f, 0.20144908f, 0.20140758f, 0.20136469f, + 0.20132043f, 0.20127479f, 0.20122777f, 0.20117936f, 0.20112958f, 0.20107842f, 0.20102589f, 0.20097197f, + 0.20091668f, 0.20086001f, 0.20080196f, 0.20074254f, 0.20068174f, 0.20061957f, 0.20055602f, 0.20049110f, + 0.20042480f, 0.20035713f, 0.20028809f, 0.20021767f, 0.20014588f, 0.20007272f, 0.19999819f, 0.19992228f, + 0.19984501f, 0.19976637f, 0.19968635f, 0.19960497f, 0.19952222f, 0.19943811f, 0.19935262f, 0.19926577f, + 0.19917756f, 0.19908798f, 0.19899703f, 0.19890472f, 0.19881105f, 0.19871602f, 0.19861962f, 0.19852186f, + 0.19842274f, 0.19832226f, 0.19822043f, 0.19811723f, 0.19801267f, 0.19790676f, 0.19779949f, 0.19769087f, + 0.19758089f, 0.19746956f, 0.19735687f, 0.19724283f, 0.19712744f, 0.19701070f, 0.19689261f, 0.19677317f, + 0.19665237f, 0.19653024f, 0.19640675f, 0.19628192f, 0.19615574f, 0.19602822f, 0.19589936f, 0.19576915f, + 0.19563760f, 0.19550471f, 0.19537048f, 0.19523491f, 0.19509800f, 0.19495976f, 0.19482018f, 0.19467926f, + 0.19453701f, 0.19439343f, 0.19424851f, 0.19410226f, 0.19395469f, 0.19380578f, 0.19365554f, 0.19350398f, + 0.19335109f, 0.19319688f, 0.19304134f, 0.19288448f, 0.19272630f, 0.19256679f, 0.19240597f, 0.19224383f, + 0.19208036f, 0.19191559f, 0.19174950f, 0.19158209f, 0.19141337f, 0.19124334f, 0.19107200f, 0.19089934f, + 0.19072538f, 0.19055012f, 0.19037354f, 0.19019566f, 0.19001648f, 0.18983600f, 0.18965421f, 0.18947113f, + 0.18928674f, 0.18910106f, 0.18891409f, 0.18872581f, 0.18853625f, 0.18834539f, 0.18815324f, 0.18795980f, + 0.18776508f, 0.18756906f, 0.18737176f, 0.18717318f, 0.18697331f, 0.18677217f, 0.18656974f, 0.18636603f, + 0.18616105f, 0.18595479f, 0.18574726f, 0.18553845f, 0.18532837f, 0.18511702f, 0.18490440f, 0.18469052f, + 0.18447537f, 0.18425895f, 0.18404127f, 0.18382233f, 0.18360213f, 0.18338067f, 0.18315796f, 0.18293399f, + 0.18270877f, 0.18248229f, 0.18225456f, 0.18202559f, 0.18179536f, 0.18156389f, 0.18133118f, 0.18109722f, + 0.18086202f, 0.18062558f, 0.18038791f, 0.18014900f, 0.17990885f, 0.17966747f, 0.17942486f, 0.17918102f, + 0.17893595f, 0.17868965f, 0.17844213f, 0.17819339f, 0.17794342f, 0.17769224f, 0.17743984f, 0.17718622f, + 0.17693139f, 0.17667534f, 0.17641808f, 0.17615962f, 0.17589995f, 0.17563907f, 0.17537698f, 0.17511370f, + 0.17484922f, 0.17458353f, 0.17431665f, 0.17404858f, 0.17377931f, 0.17350885f, 0.17323721f, 0.17296437f, + 0.17269035f, 0.17241515f, 0.17213876f, 0.17186120f, 0.17158245f, 0.17130253f, 0.17102144f, 0.17073917f, + 0.17045574f, 0.17017113f, 0.16988536f, 0.16959843f, 0.16931033f, 0.16902107f, 0.16873066f, 0.16843909f, + 0.16814636f, 0.16785248f, 0.16755745f, 0.16726127f, 0.16696395f, 0.16666548f, 0.16636587f, 0.16606511f, + 0.16576322f, 0.16546020f, 0.16515604f, 0.16485075f, 0.16454433f, 0.16423678f, 0.16392810f, 0.16361830f, + 0.16330738f, 0.16299534f, 0.16268219f, 0.16236791f, 0.16205253f, 0.16173603f, 0.16141843f, 0.16109972f, + 0.16077991f, 0.16045899f, 0.16013697f, 0.15981386f, 0.15948965f, 0.15916435f, 0.15883796f, 0.15851047f, + 0.15818191f, 0.15785225f, 0.15752152f, 0.15718971f, 0.15685682f, 0.15652285f, 0.15618781f, 0.15585170f, + 0.15551452f, 0.15517628f, 0.15483697f, 0.15449661f, 0.15415518f, 0.15381269f, 0.15346916f, 0.15312457f, + 0.15277893f, 0.15243224f, 0.15208451f, 0.15173574f, 0.15138592f, 0.15103507f, 0.15068319f, 0.15033027f, + 0.14997632f, 0.14962134f, 0.14926534f, 0.14890831f, 0.14855026f, 0.14819120f, 0.14783112f, 0.14747003f, + 0.14710792f, 0.14674481f, 0.14638069f, 0.14601557f, 0.14564945f, 0.14528233f, 0.14491421f, 0.14454510f, + 0.14417500f, 0.14380391f, 0.14343184f, 0.14305878f, 0.14268474f, 0.14230973f, 0.14193374f, 0.14155677f, + 0.14117884f, 0.14079994f, 0.14042007f, 0.14003924f, 0.13965745f, 0.13927471f, 0.13889101f, 0.13850635f, + 0.13812075f, 0.13773420f, 0.13734671f, 0.13695828f, 0.13656890f, 0.13617860f, 0.13578735f, 0.13539518f, + 0.13500208f, 0.13460805f, 0.13421311f, 0.13381724f, 0.13342045f, 0.13302275f, 0.13262414f, 0.13222462f, + 0.13182419f, 0.13142286f, 0.13102063f, 0.13061750f, 0.13021348f, 0.12980856f, 0.12940275f, 0.12899606f, + 0.12858848f, 0.12818002f, 0.12777069f, 0.12736047f, 0.12694939f, 0.12653743f, 0.12612461f, 0.12571092f, + 0.12529637f, 0.12488096f, 0.12446470f, 0.12404758f, 0.12362961f, 0.12321080f, 0.12279114f, 0.12237064f, + 0.12194930f, 0.12152712f, 0.12110411f, 0.12068027f, 0.12025561f, 0.11983012f, 0.11940381f, 0.11897668f, + 0.11854873f, 0.11811998f, 0.11769041f, 0.11726004f, 0.11682886f, 0.11639688f, 0.11596410f, 0.11553053f, + 0.11509617f, 0.11466102f, 0.11422508f, 0.11378836f, 0.11335086f, 0.11291258f, 0.11247353f, 0.11203371f, + 0.11159312f, 0.11115177f, 0.11070965f, 0.11026678f, 0.10982315f, 0.10937876f, 0.10893363f, 0.10848775f, + 0.10804113f, 0.10759376f, 0.10714566f, 0.10669683f, 0.10624726f, 0.10579696f, 0.10534594f, 0.10489420f, + 0.10444174f, 0.10398856f, 0.10353467f, 0.10308007f, 0.10262477f, 0.10216876f, 0.10171205f, 0.10125464f, + 0.10079654f, 0.10033775f, 0.09987827f, 0.09941811f, 0.09895726f, 0.09849574f, 0.09803354f, 0.09757067f, + 0.09710713f, 0.09664293f, 0.09617806f, 0.09571253f, 0.09524635f, 0.09477952f, 0.09431203f, 0.09384390f, + 0.09337513f, 0.09290571f, 0.09243566f, 0.09196498f, 0.09149366f, 0.09102172f, 0.09054915f, 0.09007597f, + 0.08960216f, 0.08912774f, 0.08865272f, 0.08817708f, 0.08770084f, 0.08722400f, 0.08674656f, 0.08626852f, + 0.08578990f, 0.08531068f, 0.08483089f, 0.08435051f, 0.08386955f, 0.08338802f, 0.08290591f, 0.08242324f, + 0.08194000f, 0.08145620f, 0.08097185f, 0.08048693f, 0.08000147f, 0.07951546f, 0.07902890f, 0.07854180f, + 0.07805416f, 0.07756599f, 0.07707729f, 0.07658806f, 0.07609830f, 0.07560802f, 0.07511722f, 0.07462591f, + 0.07413409f, 0.07364176f, 0.07314892f, 0.07265559f, 0.07216175f, 0.07166742f, 0.07117260f, 0.07067729f, + 0.07018150f, 0.06968522f, 0.06918847f, 0.06869125f, 0.06819355f, 0.06769539f, 0.06719676f, 0.06669767f, + 0.06619812f, 0.06569812f, 0.06519767f, 0.06469678f, 0.06419544f, 0.06369366f, 0.06319144f, 0.06268879f, + 0.06218571f, 0.06168220f, 0.06117828f, 0.06067393f, 0.06016916f, 0.05966399f, 0.05915840f, 0.05865241f, + 0.05814602f, 0.05763923f, 0.05713204f, 0.05662447f, 0.05611650f, 0.05560815f, 0.05509942f, 0.05459031f, + 0.05408083f, 0.05357097f, 0.05306075f, 0.05255017f, 0.05203922f, 0.05152792f, 0.05101627f, 0.05050426f, + 0.04999191f, 0.04947922f, 0.04896619f, 0.04845282f, 0.04793912f, 0.04742509f, 0.04691074f, 0.04639606f, + 0.04588107f, 0.04536576f, 0.04485014f, 0.04433422f, 0.04381799f, 0.04330146f, 0.04278463f, 0.04226751f, + 0.04175010f, 0.04123240f, 0.04071442f, 0.04019617f, 0.03967763f, 0.03915883f, 0.03863975f, 0.03812042f, + 0.03760082f, 0.03708096f, 0.03656085f, 0.03604049f, 0.03551988f, 0.03499902f, 0.03447793f, 0.03395660f, + 0.03343504f, 0.03291325f, 0.03239124f, 0.03186900f, 0.03134654f, 0.03082387f, 0.03030099f, 0.02977790f, + 0.02925460f, 0.02873111f, 0.02820741f, 0.02768353f, 0.02715945f, 0.02663519f, 0.02611075f, 0.02558613f, + 0.02506133f, 0.02453636f, 0.02401122f, 0.02348592f, 0.02296046f, 0.02243483f, 0.02190906f, 0.02138314f, + 0.02085706f, 0.02033085f, 0.01980450f, 0.01927801f, 0.01875139f, 0.01822464f, 0.01769776f, 0.01717076f, + 0.01664365f, 0.01611642f, 0.01558908f, 0.01506164f, 0.01453409f, 0.01400644f, 0.01347870f, 0.01295086f, + 0.01242294f, 0.01189493f, 0.01136683f, 0.01083866f, 0.01031042f, 0.00978211f, 0.00925372f, 0.00872528f, + 0.00819677f, 0.00766821f, 0.00713960f, 0.00661094f, 0.00608223f, 0.00555348f, 0.00502469f, 0.00449587f, + 0.00396701f, 0.00343813f, 0.00290923f, 0.00238031f, 0.00185137f, 0.00132241f, 0.00079345f, 0.00026448f +}; + +/*----------------------------------------------------------------------------------* + * Mean ISF vector for active signal (only for AMR-WB IO mode) + *----------------------------------------------------------------------------------*/ + +const float mean_isf_amr_wb[M] = +{ + 288.411774f, + 518.149414f, + 912.352051f, + 1397.743652f, + 1795.418823f, + 2211.536133f, + 2621.461182f, + 3019.680176f, + 3417.989746f, + 3809.700928f, + 4181.547363f, + 4581.064941f, + 5012.819824f, + 5457.521484f, + 5876.145020f, + 1576.906494f +}; + +/*----------------------------------------------------------------------------------* + * Mean ISF vector for SID frames (only in AMR-WB IO mode) + *----------------------------------------------------------------------------------*/ + +const float mean_isf_noise_amr_wb[M] = +{ + 186.625259f, + 429.613403f, + 864.525085f, + 1276.010254f, + 1648.228394f, + 2039.998535f, + 2420.943115f, + 2828.022461f, + 3214.584961f, + 3575.200195f, + 3944.685303f, + 4338.971191f, + 4743.657227f, + 5149.993164f, + 5533.081055f, + 1485.457031f +}; + +/*----------------------------------------------------------------------------------* + * Initial LSF memory + *----------------------------------------------------------------------------------*/ + +const float lsf_init[16] = +{ + 375.0, 750.0, 1125.0, 1500.0, 1875.0, 2250.0, 2625.0, 3000.0, + 3375.0, 3750.0, 4125.0, 4500.0, 4875.0, 5250.0, 5625.0, 6000.0 +}; + + +/*----------------------------------------------------------------------------------* + * Gaussian codebook + *----------------------------------------------------------------------------------*/ + +const float gaus_dico[190] = +{ + -0.0973f, -0.0306f, 0.1278f, -0.1138f, 0.0744f, -0.1606f, + -0.1976f, 0.0115f, -0.0344f, -0.0417f, -0.1424f, -0.0633f, + 0.0723f, 0.3257f, -0.0697f, -0.0978f, -0.1168f, -0.1021f, + 0.0342f, -0.1319f, 0.0431f, -0.2658f, 0.0317f, -0.0712f, + 0.0348f, 0.1200f, -0.0758f, -0.2104f, -0.0781f, 0.0947f, + 0.1333f, 0.0204f, -0.2934f, 0.0262f, 0.0264f, 0.0830f, + 0.0584f, -0.0318f, 0.2271f, 0.0835f, 0.0374f, -0.0645f, + -0.1864f, -0.0277f, 0.0945f, -0.1306f, 0.0202f, -0.2090f, + -0.0881f, -0.1029f, 0.0292f, 0.0966f, -0.0896f, 0.1563f, + 0.1994f, 0.0543f, -0.2482f, -0.0201f, -0.0294f, 0.2172f, + 0.0830f, -0.0938f, 0.0115f, 0.0827f, -0.1233f, -0.1051f, + 0.0394f, 0.2390f, 0.2172f, -0.0653f, 0.0253f, 0.1241f, + -0.0366f, -0.0473f, 0.1080f, 0.0470f, 0.1009f, -0.0059f, + 0.0964f, -0.0105f, -0.0531f, 0.0169f, -0.0972f, 0.0408f, + 0.0283f, -0.2285f, -0.0232f, 0.3580f, -0.1063f, 0.1125f, + 0.2105f, -0.0331f, -0.0230f, 0.3200f, -0.0905f, 0.0166f, + 0.0328f, -0.0722f, -0.0380f, -0.1377f, -0.0118f, -0.1189f, + 0.1580f, 0.0769f, 0.1252f, -0.0247f, -0.1672f, -0.0777f, + -0.0841f, -0.1573f, -0.0160f, 0.2078f, 0.1011f, -0.0070f, + 0.1242f, 0.1011f, 0.1225f, 0.0973f, 0.1361f, 0.1584f, + -0.0729f, 0.1831f, 0.1332f, -0.1846f, -0.0029f, -0.0890f, + 0.1447f, -0.1727f, 0.0963f, -0.0321f, -0.0916f, -0.0151f, + -0.2232f, -0.0624f, -0.1036f, 0.0157f, 0.1134f, -0.2782f, + 0.0684f, 0.0222f, -0.0202f, -0.0704f, -0.1342f, 0.0950f, + 0.0128f, -0.2999f, 0.0015f, -0.1051f, 0.0180f, 0.0500f, + -0.1166f, -0.0361f, -0.1446f, 0.0688f, -0.0179f, 0.2959f, + 0.0102f, 0.1416f, -0.0815f, 0.1181f, -0.1867f, 0.1082f, + 0.1585f, 0.0661f, -0.1805f, 0.0915f, 0.1497f, -0.1124f, + -0.0508f, 0.0573f, -0.0294f, -0.0119f, -0.0759f, 0.1477f, + 0.2136f, 0.1271f, 0.0492f, -0.1235f, -0.1337f, -0.2657f, + -0.0106f, -0.0540f, 0.1642f, -0.0598f, -0.0065f, 0.1146f, + 0.0863f, 0.0129f, 0.1816f, 0.0672f +}; + +const float gaus_dico_swb[256] = +{ + 0.02164473f, 0.35885197f, -0.16274954f, -0.08241354f, 0.07313631f, -0.00054929f, -0.13080014f, 0.07226136f, + -0.13965981f, -0.04834007f, -0.02745908f, -0.02867859f, 0.11216793f, 0.16604294f, -0.00134274f, 0.06818508f, + -0.17387933f, 0.09406016f, -0.08150196f, 0.05083200f, -0.01952806f, -0.10203217f, -0.03067050f, -0.05153965f, + 0.06250680f, 0.00859049f, -0.12008808f, -0.11361376f, 0.17176038f, 0.01174004f, -0.02275130f, -0.09895785f, + -0.10167463f, -0.22059087f, -0.05334539f, -0.00629700f, -0.16706355f, 0.07795000f, 0.08731710f, 0.09669208f, + 0.15378080f, 0.01794813f, -0.01549965f, -0.24923822f, 0.19985947f, -0.10477958f, 0.06674605f, -0.11186616f, + -0.17927034f, 0.08443811f, 0.25542912f, 0.03167623f, 0.19633667f, 0.19163096f, 0.01907267f, 0.12298489f, + -0.03147158f, 0.05562247f, 0.30200079f, -0.04257871f, 0.08275045f, -0.03386311f, -0.02265750f, 0.18742503f, + -0.13598505f, -0.32004824f, -0.00438390f, -0.15576170f, 0.06006401f, -0.00952147f, 0.18848655f, 0.06630960f, + 0.07121546f, -0.00733249f, 0.08277771f, 0.22764891f, 0.06772452f, -0.09509693f, -0.00172236f, 0.08452052f, + 0.17020901f, -0.03737585f, 0.02349647f, 0.10855560f, 0.06854416f, 0.07084806f, 0.09390105f, 0.00124924f, + 0.03026483f, -0.15169589f, 0.01347072f, -0.15377805f, 0.14992996f, 0.11630810f, 0.03483583f, -0.03914850f, + -0.20075595f, 0.12728901f, -0.04495851f, -0.11576717f, -0.15281813f, 0.06055827f, -0.03471978f, -0.03617816f, + 0.17230885f, 0.03094525f, -0.15618153f, 0.21792564f, 0.08106838f, -0.22098514f, -0.10796417f, 0.07131225f, + 0.22092983f, -0.01539366f, -0.02876964f, -0.30910203f, 0.02143815f, -0.11630868f, -0.00922897f, 0.07431208f, + 0.15533504f, 0.11425125f, 0.07125455f, -0.11914105f, -0.04275274f, -0.05072749f, -0.22143129f, 0.19787727f, + -0.20946717f, -0.16564523f, 0.05962536f, -0.22325630f, -0.04333350f, -0.04707248f, 0.16608582f, 0.00948954f, + 0.11283893f, -0.04097161f, -0.09076904f, 0.26722300f, 0.00987607f, -0.05807892f, 0.07872546f, 0.08040629f, + 0.12927419f, -0.05647410f, 0.09603068f, -0.02356448f, -0.02160797f, -0.11687102f, 0.07936122f, -0.05764586f, + -0.10510305f, -0.02326054f, 0.12021790f, 0.09782617f, -0.22600858f, -0.02555378f, -0.03561033f, -0.01337216f, + 0.11311363f, -0.03096960f, -0.22801498f, 0.05643769f, 0.13053033f, 0.04452197f, -0.09299882f, -0.11475921f, + 0.02257649f, -0.21770498f, -0.11454470f, -0.09435777f, 0.00638951f, -0.36990553f, 0.04266735f, 0.06915011f, + 0.07644624f, -0.24336053f, -0.03421960f, -0.10622191f, -0.17223521f, 0.04054553f, 0.13831380f, 0.02925055f, + 0.16207848f, -0.12994884f, -0.09751288f, -0.05397306f, -0.09323815f, 0.13425350f, -0.00046960f, 0.31072289f, + 0.13740718f, 0.05835414f, -0.04803475f, 0.15423043f, -0.09652353f, 0.14896898f, -0.16368309f, 0.05875925f, + -0.03678078f, -0.19627908f, 0.07034992f, -0.27213186f, -0.04338680f, 0.01567988f, -0.09158870f, 0.11987700f, + 0.07083926f, 0.01099900f, -0.01084446f, 0.04508050f, -0.10655984f, -0.13945042f, 0.05837287f, 0.08458713f, + -0.04212087f, -0.15749574f, 0.11632511f, 0.07976698f, 0.06725866f, -0.09567240f, 0.03796997f, -0.09355708f, + -0.13569611f, -0.19498724f, 0.14951572f, -0.16023041f, 0.04185898f, 0.06099325f, 0.03425207f, 0.16211477f, + 0.03998571f, -0.03629408f, -0.10099959f, 0.19540504f, 0.11653102f, 0.23601755f, 0.04943547f, -0.26040605f, + 0.02153429f, 0.22880882f, -0.13646534f, 0.03881640f, -0.02896636f, 0.09774253f, -0.13509314f, -0.08713179f, + 0.13485038f, 0.06968338f, 0.19561967f, 0.07884958f, -0.10365590f, -0.10321335f, -0.09081125f, -0.00147976f +}; + +/*----------------------------------------------------------------------------------* + * CLDFB tables + *----------------------------------------------------------------------------------*/ + +const int16_t freqTable[2] = {20, 40}; + +/* SNR: 109.44, PHASE: 3.500000000000000 */ +const float CLDFB80_10[100] = +{ + 0.0000033382f, -0.0000023292f, -0.0000006582f, 0.0000001464f, -0.0000010899f, -0.0000009664f, + -0.0000000104f, -0.0000018105f, -0.0000012856f, 0.0000017112f, 0.0000137155f, -0.0000084710f, + -0.0000015748f, -0.0000002482f, 0.0000036294f, -0.0000043816f, 0.0000003906f, 0.0000043318f, + 0.0000049126f, -0.0000061826f, -0.0002270069f, -0.0000675402f, -0.0000158982f, 0.0000138120f, + -0.0000220086f, -0.0000356560f, 0.0000171849f, -0.0000194504f, -0.0000058158f, -0.0002621811f, + -0.0009969691f, -0.0001427984f, -0.0000188085f, -0.0000040399f, -0.0001954359f, 0.0001806872f, + 0.0000232574f, -0.0000047551f, -0.0000321009f, 0.0010723262f, -0.0020160153f, -0.0007751652f, + 0.0003508478f, 0.0015707671f, 0.0017180828f, 0.0015807568f, 0.0021944824f, 0.0028288425f, + 0.0030257006f, 0.0016570983f, -0.0014279413f, -0.0015962377f, 0.0007765516f, 0.0025625922f, + 0.0022554877f, 0.0002647332f, -0.0032977409f, -0.0065113932f, -0.0095444393f, -0.0136373114f, + 0.0186561662f, 0.0242546518f, 0.0320538418f, 0.0427742450f, 0.0565841171f, 0.0732940277f, + 0.0914110197f, 0.1082620545f, 0.1209072165f, 0.1269811579f, 0.1253574855f, 0.1136768387f, + 0.0887587689f, 0.0497640968f, -0.0031398279f, -0.0698373206f, -0.1494875982f, -0.2406007759f, + -0.3411996303f, -0.4484628681f, 0.5579472269f, 0.6655527761f, 0.7669493517f, 0.8575328375f, + 0.9329386030f, 0.9892971917f, 1.0250167399f, 1.0397966587f, 1.0375221638f, 1.0163053398f, + 0.9610874400f, 0.8748972145f, 0.7783924293f, 0.6777346686f, 0.5724389618f, 0.4648620471f, + 0.3560337451f, 0.2485564060f, 0.1386438276f, 0.0416433203f, +}; + +/* SNR: 292.49, PHASE: 2.000000000000000 */ +const float CLDFB80_16[160] = +{ + 0.0000005510f, -0.0000007674f, -0.0000002340f, 0.0000000964f, 0.0000000593f, -0.0000000017f, + -0.0000000178f, 0.0000021953f, 0.0000030004f, -0.0000000167f, -0.0000000019f, 0.0000000702f, + 0.0000000344f, -0.0000000765f, -0.0000005553f, 0.0000007526f, 0.0000020881f, -0.0000028263f, + -0.0000007033f, 0.0000002370f, 0.0000001175f, -0.0000004048f, 0.0000000996f, -0.0000180207f, + 0.0000246292f, -0.0000000934f, 0.0000004489f, -0.0000001390f, -0.0000000845f, 0.0000002300f, + 0.0000020452f, -0.0000028520f, -0.0003204839f, -0.0001476489f, -0.0000626217f, -0.0000446346f, + -0.0000202236f, 0.0000151160f, 0.0000057995f, 0.0000450017f, 0.0000433006f, 0.0000050745f, + 0.0000167005f, -0.0000314631f, -0.0000244547f, -0.0000125422f, -0.0000911863f, -0.0004371781f, + -0.0012267106f, -0.0005247118f, -0.0001857576f, -0.0001103593f, -0.0000402931f, 0.0000108771f, + -0.0000576360f, 0.0000602621f, -0.0002317927f, 0.0000520316f, 0.0000035090f, 0.0000625950f, + 0.0000603417f, 0.0000368907f, 0.0003220307f, 0.0016733998f, -0.0021551784f, -0.0015444660f, + -0.0007592329f, -0.0001077355f, 0.0007091208f, 0.0015054295f, 0.0017984668f, 0.0011461500f, + 0.0015946160f, 0.0018157551f, 0.0022526599f, 0.0027665136f, 0.0029611644f, 0.0030474884f, + 0.0025509350f, 0.0012885692f, -0.0011048694f, -0.0019476595f, -0.0014849578f, -0.0000191307f, + 0.0014542427f, 0.0025014060f, 0.0026282341f, 0.0020896060f, 0.0009380930f, -0.0012303806f, + -0.0035150110f, -0.0055687066f, -0.0074233361f, -0.0093371234f, -0.0117127490f, -0.0145175090f, + 0.0177813213f, 0.0209221310f, 0.0246700384f, 0.0293186424f, 0.0350939424f, 0.0420166741f, + 0.0501689083f, 0.0594973479f, 0.0699793095f, 0.0811978302f, 0.0925316969f, 0.1033039355f, + 0.1127998301f, 0.1202885467f, 0.1252446307f, 0.1272143872f, 0.1262547749f, 0.1217276780f, + 0.1125292370f, 0.0980647299f, 0.0780704213f, 0.0526074650f, 0.0217182187f, -0.0146037409f, + -0.0563029259f, -0.1031675028f, -0.1548654211f, -0.2110103318f, -0.2711216615f, -0.3346791161f, + -0.4009613796f, -0.4689983890f, 0.5374920358f, 0.6054498150f, 0.6721266919f, 0.7362374318f, + 0.7966023599f, 0.8522654625f, 0.9021245679f, 0.9450253190f, 0.9802630812f, 1.0075496836f, + 1.0265340754f, 1.0372359728f, 1.0407524022f, 1.0381397893f, 1.0284102813f, 1.0099196627f, + 0.9753688495f, 0.9254582964f, 0.8690385973f, 0.8090082031f, 0.7474414548f, 0.6841760105f, + 0.6189218236f, 0.5524001591f, 0.4851748506f, 0.4172433895f, 0.3492691242f, 0.2821066655f, + 0.2146356085f, 0.1455327617f, 0.0796914490f, 0.0278251946f, +}; + +/* SNR: 89.77, PHASE: 1.500000000000000 */ +const float CLDFB80_20[200] = +{ + 0.0000016461f, -0.0000046862f, -0.0000000815f, -0.0000001822f, 0.0000000240f, 0.0000001892f, + -0.0000002365f, -0.0000007031f, -0.0000000079f, 0.0000048656f, 0.0000070490f, 0.0000000032f, + 0.0000001499f, -0.0000000944f, 0.0000004307f, -0.0000000787f, -0.0000001070f, 0.0000015376f, + -0.0000025088f, 0.0000044280f, 0.0000046060f, -0.0000207092f, -0.0000004877f, -0.0000006126f, + 0.0000000605f, 0.0000004365f, -0.0000003741f, -0.0000009508f, 0.0000006700f, -0.0000087189f, + 0.0000114297f, -0.0000007710f, -0.0000002908f, 0.0000001583f, -0.0000010138f, 0.0000001875f, + 0.0000003789f, -0.0000065731f, 0.0000112115f, -0.0000036253f, -0.0003045828f, -0.0002068946f, + -0.0000330428f, -0.0000658559f, -0.0000416668f, -0.0000207558f, -0.0000046097f, 0.0000096778f, + -0.0000064960f, 0.0000515938f, 0.0000257367f, -0.0000068671f, 0.0000029284f, -0.0000209369f, + -0.0000191720f, -0.0000235869f, -0.0000286778f, 0.0000594843f, -0.0001104448f, -0.0004947290f, + -0.0011759540f, -0.0006581582f, -0.0001310136f, -0.0001782524f, -0.0001002354f, -0.0000465158f, + -0.0000188237f, 0.0000285072f, -0.0001359344f, 0.0002814194f, -0.0004814411f, 0.0001302339f, + -0.0000257394f, 0.0000578339f, 0.0000485628f, 0.0000543116f, 0.0000763443f, -0.0001495108f, + 0.0003492618f, 0.0018283780f, -0.0019931487f, -0.0018716309f, -0.0008617653f, -0.0006080124f, + -0.0000337803f, 0.0006187704f, 0.0012478726f, 0.0016757046f, 0.0018115391f, 0.0007745483f, + 0.0016550121f, 0.0017032298f, 0.0019356593f, 0.0024080283f, 0.0027878510f, 0.0029379588f, + 0.0030637651f, 0.0028257202f, 0.0021943273f, 0.0010679683f, -0.0009250455f, -0.0017798333f, + -0.0018826540f, -0.0011010583f, 0.0001463485f, 0.0013293069f, 0.0022974838f, 0.0027746423f, + 0.0025078917f, 0.0020425098f, 0.0011954954f, -0.0005741594f, -0.0024120809f, -0.0041653667f, + -0.0057623702f, -0.0072425386f, -0.0087363677f, -0.0104237699f, -0.0125156239f, -0.0148077168f, + 0.0174398402f, 0.0199230411f, 0.0226649147f, 0.0259599813f, 0.0298434758f, 0.0344649815f, + 0.0398139569f, 0.0459314689f, 0.0528498740f, 0.0604788669f, 0.0688814001f, 0.0777923399f, + 0.0868947517f, 0.0958553537f, 0.1043243835f, 0.1119302041f, 0.1182880738f, 0.1231125873f, + 0.1261745561f, 0.1272284850f, 0.1264656300f, 0.1235525506f, 0.1177556666f, 0.1087635447f, + 0.0963144136f, 0.0803171444f, 0.0608146076f, 0.0378425383f, 0.0113896330f, -0.0185270856f, + -0.0518892622f, -0.0885871716f, -0.1284318249f, -0.1712634880f, -0.2168508609f, -0.2649463144f, + -0.3152867427f, -0.3675395959f, -0.4212350657f, -0.4758650706f, 0.5306725282f, 0.5851445237f, + 0.6390281696f, 0.6916889535f, 0.7424591009f, 0.7907617163f, 0.8361206884f, 0.8779983070f, + 0.9157691951f, 0.9489012228f, 0.9770929872f, 1.0002174168f, 1.0180999340f, 1.0305853696f, + 1.0378851378f, 1.0406826783f, 1.0395784114f, 1.0343061945f, 1.0237762412f, 1.0076524569f, + 0.9800034826f, 0.9411740407f, 0.8979145998f, 0.8512639848f, 0.8029102780f, 0.7536620391f, + 0.7033730373f, 0.6517679660f, 0.5990562278f, 0.5457078369f, 0.4919297136f, 0.4376796414f, + 0.3831842053f, 0.3290362900f, 0.2754121565f, 0.2214602867f, 0.1663238479f, 0.1115465981f, + 0.0622889538f, 0.0233593568f, +}; + +/* SNR: 89.29, PHASE: 0.833333333333333 */ +const float CLDFB80_30[300] = +{ + -0.0000002772f, 0.0000033382f, 0.0000018078f, -0.0000007965f, -0.0000023292f, -0.0000000163f, + 0.0000001004f, -0.0000006582f, 0.0000000287f, 0.0000000140f, 0.0000001464f, 0.0000002826f, + 0.0000000427f, -0.0000010899f, 0.0000048488f, 0.0000070973f, -0.0000009664f, 0.0000000360f, + 0.0000004432f, -0.0000000104f, -0.0000000269f, -0.0000000107f, -0.0000018105f, 0.0000000543f, + -0.0000000029f, -0.0000012856f, -0.0000006144f, 0.0000009806f, 0.0000017112f, -0.0000026992f, + -0.0000120997f, 0.0000137155f, 0.0000075545f, -0.0000032372f, -0.0000084710f, -0.0000000206f, + 0.0000002472f, -0.0000015748f, 0.0000000428f, -0.0000000299f, -0.0000002482f, 0.0000005522f, + 0.0000001959f, 0.0000036294f, 0.0000084418f, -0.0000120850f, -0.0000043816f, -0.0000001651f, + -0.0000010266f, 0.0000003906f, 0.0000001476f, 0.0000000560f, 0.0000043318f, -0.0000001327f, + -0.0000000099f, 0.0000049126f, 0.0000025641f, -0.0000041212f, -0.0000061826f, 0.0000182899f, + -0.0003177625f, -0.0002270069f, -0.0001470513f, -0.0000710867f, -0.0000675402f, -0.0000612052f, + -0.0000458905f, -0.0000158982f, -0.0000198609f, -0.0000044865f, 0.0000138120f, 0.0000259521f, + -0.0000014174f, -0.0000220086f, 0.0000046746f, -0.0000478217f, -0.0000356560f, -0.0000008176f, + 0.0000554471f, 0.0000171849f, -0.0000104782f, -0.0000342931f, -0.0000194504f, -0.0000247231f, + -0.0000266321f, -0.0000058158f, -0.0000154718f, -0.0000860619f, -0.0002621811f, -0.0006329730f, + -0.0010151313f, -0.0009969691f, -0.0006401095f, -0.0002347208f, -0.0001427984f, -0.0001657818f, + -0.0001142242f, -0.0000188085f, -0.0000385187f, -0.0000275046f, -0.0000040399f, 0.0000495378f, + -0.0001045437f, -0.0001954359f, 0.0005754000f, -0.0007487377f, 0.0001806872f, 0.0000995589f, + -0.0000996504f, 0.0000232574f, 0.0000603268f, 0.0000660807f, -0.0000047551f, 0.0000619265f, + 0.0000723872f, -0.0000321009f, 0.0000223561f, 0.0003720504f, 0.0010723262f, 0.0019477029f, + -0.0018122293f, -0.0020160153f, -0.0017426363f, -0.0010556444f, -0.0007751652f, -0.0005221317f, + -0.0001347624f, 0.0003508478f, 0.0007386346f, 0.0011721899f, 0.0015707671f, 0.0017166805f, + 0.0018089705f, 0.0017180828f, 0.0002671723f, 0.0016677326f, 0.0015807568f, 0.0017534327f, + 0.0019075685f, 0.0021944824f, 0.0024875266f, 0.0027574445f, 0.0028288425f, 0.0029688585f, + 0.0030573770f, 0.0030257006f, 0.0027683197f, 0.0023855538f, 0.0016570983f, 0.0007261425f, + -0.0006240877f, -0.0014279413f, -0.0018848796f, -0.0019263976f, -0.0015962377f, -0.0009120500f, + -0.0000736785f, 0.0007765516f, 0.0014961634f, 0.0021524541f, 0.0025625922f, 0.0027460441f, + 0.0025688449f, 0.0022554877f, 0.0019970512f, 0.0015552223f, 0.0002647332f, -0.0008620885f, + -0.0020865380f, -0.0032977409f, -0.0044403210f, -0.0055039505f, -0.0065113932f, -0.0074839181f, + -0.0084786965f, -0.0095444393f, -0.0107566368f, -0.0121559845f, -0.0136373114f, -0.0152125941f, + 0.0169692165f, 0.0186561662f, 0.0203704498f, 0.0221787331f, 0.0242546518f, 0.0265582983f, + 0.0291465321f, 0.0320538418f, 0.0353059968f, 0.0388699993f, 0.0427742450f, 0.0470319574f, + 0.0516455579f, 0.0565841171f, 0.0617960053f, 0.0674208876f, 0.0732940277f, 0.0793036968f, + 0.0853757711f, 0.0914110197f, 0.0973085175f, 0.1029609938f, 0.1082620545f, 0.1130850459f, + 0.1173295323f, 0.1209072165f, 0.1237469292f, 0.1257934619f, 0.1269811579f, 0.1271703366f, + 0.1266559114f, 0.1253574855f, 0.1227915199f, 0.1189360593f, 0.1136768387f, 0.1069333476f, + 0.0986359173f, 0.0887587689f, 0.0773092890f, 0.0643073307f, 0.0497640968f, 0.0336765771f, + 0.0160401582f, -0.0031398279f, -0.0238366387f, -0.0460799881f, -0.0698373206f, -0.0950128018f, + -0.1215783841f, -0.1494875982f, -0.1786760784f, -0.2090721736f, -0.2406007759f, -0.2731879051f, + -0.3067537961f, -0.3411996303f, -0.3764015708f, -0.4122065782f, -0.4484628681f, -0.4850451997f, + 0.5215924710f, 0.5579472269f, 0.5941804962f, 0.6301135607f, 0.6655527761f, 0.7002994797f, + 0.7341550905f, 0.7669493517f, 0.7985389090f, 0.8287866009f, 0.8575328375f, 0.8845952462f, + 0.9097846281f, 0.9329386030f, 0.9539491421f, 0.9727435862f, 0.9892971917f, 1.0035676672f, + 1.0154927835f, 1.0250167399f, 1.0321480823f, 1.0370035227f, 1.0397966587f, 1.0407627030f, + 1.0400314908f, 1.0375221638f, 1.0329480648f, 1.0259438203f, 1.0163053398f, 1.0048344063f, + 0.9863956401f, 0.9610874400f, 0.9342743262f, 0.9054084925f, 0.8748972145f, 0.8432873810f, + 0.8110381808f, 0.7783924293f, 0.7453640666f, 0.7118431392f, 0.6777346686f, 0.6430470493f, + 0.6078972260f, 0.5724389618f, 0.5367746506f, 0.5009238704f, 0.4648620471f, 0.4286003322f, + 0.3922588980f, 0.3560337451f, 0.3200733025f, 0.2843378434f, 0.2485564060f, 0.2123552623f, + 0.1755742394f, 0.1386438276f, 0.1027751331f, 0.0698223020f, 0.0416433203f, 0.0171881989f, +}; + +/* SNR: 85.69, PHASE: 0.750000000000000 */ +const float CLDFB80_32[320] = +{ + -0.0000010182f, 0.0000018812f, -0.0000013969f, 0.0000000702f, -0.0000030351f, -0.0000001862f, + 0.0000000017f, 0.0000000804f, -0.0000002859f, -0.0000000058f, -0.0000003463f, -0.0000003782f, + 0.0000006385f, 0.0000000365f, -0.0000015696f, 0.0000043896f, 0.0000063462f, -0.0000013860f, + 0.0000000439f, 0.0000007243f, -0.0000000373f, -0.0000001214f, 0.0000000228f, -0.0000008123f, + 0.0000002096f, -0.0000000043f, -0.0000001079f, -0.0000005174f, -0.0000001146f, -0.0000006991f, + 0.0000012420f, -0.0000054157f, -0.0000164806f, 0.0000076445f, -0.0000065087f, 0.0000002224f, + -0.0000110942f, -0.0000006228f, 0.0000000012f, 0.0000001914f, -0.0000006876f, 0.0000000004f, + -0.0000005395f, -0.0000007555f, 0.0000015057f, 0.0000005303f, 0.0000035648f, 0.0000094151f, + -0.0000133505f, -0.0000042847f, -0.0000005848f, -0.0000018021f, 0.0000001676f, 0.0000001730f, + -0.0000000645f, 0.0000019429f, -0.0000005012f, 0.0000000132f, 0.0000003799f, 0.0000014190f, + 0.0000005446f, 0.0000033533f, -0.0000041925f, 0.0000243728f, -0.0003249116f, -0.0002555667f, + -0.0001781466f, -0.0000946691f, -0.0000512440f, -0.0000668181f, -0.0000538663f, -0.0000367589f, + -0.0000153566f, -0.0000159763f, -0.0000043008f, 0.0000014360f, 0.0000256407f, -0.0000045056f, + -0.0000224244f, -0.0000056258f, -0.0000573469f, -0.0000427838f, -0.0000040513f, 0.0000493530f, + -0.0000199927f, -0.0000284530f, -0.0000443529f, -0.0000157197f, -0.0000152059f, -0.0000265666f, + -0.0000286606f, 0.0000426372f, -0.0000445737f, -0.0000968212f, -0.0002992176f, -0.0006564777f, + -0.0009923400f, -0.0010465131f, -0.0006586000f, -0.0003460162f, -0.0000803812f, -0.0001828317f, + -0.0001374910f, -0.0000892170f, -0.0000247429f, -0.0000281266f, -0.0000112548f, -0.0000220216f, + 0.0000281030f, -0.0001241423f, -0.0001739019f, 0.0006003709f, -0.0007665771f, 0.0001545192f, + 0.0001183979f, -0.0000725009f, 0.0000709099f, 0.0000556600f, 0.0000787870f, 0.0000127551f, + 0.0000418355f, 0.0000676110f, 0.0000771386f, -0.0001678521f, 0.0001526165f, 0.0003591734f, + 0.0011851563f, 0.0019531880f, -0.0018073091f, -0.0020646655f, -0.0018286838f, -0.0012220764f, + -0.0007555665f, -0.0006377868f, -0.0003093176f, 0.0000756312f, 0.0005274300f, 0.0009274213f, + 0.0012803192f, 0.0016235299f, 0.0017557598f, 0.0018111856f, 0.0016683303f, 0.0002150325f, + 0.0016540635f, 0.0015774318f, 0.0017217761f, 0.0018831036f, 0.0020842542f, 0.0023790930f, + 0.0026699692f, 0.0028034973f, 0.0028981065f, 0.0030135931f, 0.0030635897f, 0.0029615904f, + 0.0027120429f, 0.0022714745f, 0.0016059652f, 0.0006835412f, -0.0005828829f, -0.0013844400f, + -0.0018243580f, -0.0019502151f, -0.0017356111f, -0.0011689841f, -0.0004229350f, 0.0003965073f, + 0.0011294169f, 0.0017707072f, 0.0023448371f, 0.0026728102f, 0.0027087051f, 0.0025324105f, + 0.0022209939f, 0.0019939538f, 0.0015995394f, 0.0003709522f, -0.0006814813f, -0.0018062812f, + -0.0029774326f, -0.0040602444f, -0.0050788762f, -0.0060470476f, -0.0069716019f, -0.0078811278f, + -0.0088339160f, -0.0098593061f, -0.0110571431f, -0.0123801308f, -0.0137829951f, -0.0152658987f, + 0.0169119551f, 0.0185130319f, 0.0200914127f, 0.0217670701f, 0.0236411334f, 0.0257401339f, + 0.0280588687f, 0.0306516429f, 0.0335396415f, 0.0367140220f, 0.0401734073f, 0.0439328404f, + 0.0480118471f, 0.0523958086f, 0.0570643279f, 0.0619617615f, 0.0672386055f, 0.0727386082f, + 0.0783586322f, 0.0840454562f, 0.0897239254f, 0.0953063133f, 0.1006989894f, 0.1058297221f, + 0.1105886458f, 0.1148828316f, 0.1186363019f, 0.1217873693f, 0.1242652074f, 0.1260376844f, + 0.1270428159f, 0.1271553981f, 0.1266717254f, 0.1255342565f, 0.1232765470f, 0.1198938969f, + 0.1153006197f, 0.1094250684f, 0.1021978763f, 0.0935850985f, 0.0835853025f, 0.0722146942f, + 0.0594803881f, 0.0453959671f, 0.0299515180f, 0.0131448092f, -0.0050174243f, -0.0245067664f, + -0.0453599939f, -0.0675506175f, -0.0909864895f, -0.1156500318f, -0.1415054519f, -0.1685034579f, + -0.1965824123f, -0.2256851924f, -0.2557490596f, -0.2867109877f, -0.3185003509f, -0.3510308710f, + -0.3841878257f, -0.4178462189f, -0.4518783777f, -0.4861948985f, 0.5204589154f, 0.5545392477f, + 0.5885349528f, 0.6222881265f, 0.6556472882f, 0.6884462258f, 0.7205203255f, 0.7517187214f, + 0.7819150729f, 0.8109973423f, 0.8388462493f, 0.8653227793f, 0.8902717587f, 0.9135401037f, + 0.9350004724f, 0.9545704608f, 0.9721900670f, 0.9878415249f, 1.0014908046f, 1.0130877123f, + 1.0225821802f, 1.0299620942f, 1.0352930981f, 1.0387279035f, 1.0404656862f, 1.0406699226f, + 1.0393792732f, 1.0364602207f, 1.0316371259f, 1.0246094465f, 1.0152749279f, 1.0045111461f, + 0.9872243762f, 0.9634951727f, 0.9386029698f, 0.9118835665f, 0.8836131513f, 0.8542438147f, + 0.8241955864f, 0.7937396816f, 0.7629631733f, 0.7318123869f, 0.7001870615f, 0.6680338585f, + 0.6353919868f, 0.6023736401f, 0.5691034053f, 0.5356571527f, 0.5020472026f, 0.4682522004f, + 0.4342757821f, 0.4002060880f, 0.3661991567f, 0.3324016480f, 0.2988415427f, 0.2653598332f, + 0.2316572400f, 0.1974745970f, 0.1628547074f, 0.1283770554f, 0.0952404323f, 0.0650740936f, + 0.0392771501f, 0.0163785856f, +}; + +/* SNR: 81.55, PHASE: 0.500000000000000 */ +const float CLDFB80_40[400] = +{ + -0.0000041528f, -0.0000003900f, -0.0000033779f, 0.0000013260f, -0.0000003143f, -0.0000019348f, + 0.0000002820f, 0.0000000171f, 0.0000000756f, 0.0000001478f, -0.0000006625f, 0.0000000082f, + 0.0000000114f, -0.0000002690f, -0.0000007281f, 0.0000005577f, -0.0000000239f, 0.0000002429f, + -0.0000004091f, 0.0000026069f, 0.0000034995f, -0.0000001726f, 0.0000002145f, -0.0000000401f, + 0.0000006351f, -0.0000000199f, -0.0000000701f, -0.0000000269f, -0.0000000511f, -0.0000018158f, + 0.0000003875f, 0.0000000519f, 0.0000000148f, 0.0000002168f, 0.0000008257f, -0.0000004464f, + 0.0000006336f, -0.0000025316f, -0.0000005295f, -0.0000153180f, -0.0000308298f, -0.0000015398f, + -0.0000152958f, 0.0000058438f, -0.0000013050f, -0.0000070187f, 0.0000011695f, 0.0000000763f, + 0.0000001881f, 0.0000003524f, -0.0000015865f, -0.0000000049f, -0.0000000249f, -0.0000006192f, + -0.0000011121f, 0.0000012060f, -0.0000000166f, 0.0000001099f, -0.0000106587f, 0.0000106129f, + -0.0000148286f, 0.0000149412f, 0.0000001626f, 0.0000000725f, -0.0000015409f, 0.0000000950f, + 0.0000003484f, 0.0000001231f, 0.0000001497f, 0.0000043429f, -0.0000009269f, -0.0000001280f, + -0.0000000626f, -0.0000009033f, -0.0000040910f, 0.0000019169f, -0.0000028704f, 0.0000109325f, + -0.0000009252f, 0.0000489011f, -0.0003468893f, -0.0003166165f, -0.0002216732f, -0.0001440458f, + -0.0000849613f, -0.0000369773f, -0.0000635098f, -0.0000591070f, -0.0000486803f, -0.0000341989f, + -0.0000120811f, -0.0000190275f, -0.0000064494f, 0.0000069162f, -0.0000021987f, 0.0000272330f, + 0.0000008567f, -0.0000105879f, 0.0000129785f, -0.0000391934f, -0.0000840231f, 0.0000041534f, + -0.0000069437f, 0.0000002747f, 0.0000564106f, -0.0000335888f, -0.0000091603f, -0.0000220067f, + -0.0000377648f, -0.0000212702f, -0.0000107779f, -0.0000254405f, -0.0000262093f, -0.0000203017f, + 0.0000691479f, -0.0000348713f, -0.0000882526f, -0.0001632241f, -0.0003897623f, -0.0007277920f, + -0.0009273781f, -0.0011866370f, -0.0007657374f, -0.0005999553f, -0.0002985749f, -0.0000739204f, + -0.0001965512f, -0.0001587267f, -0.0001222374f, -0.0000844484f, -0.0000080229f, -0.0000361957f, + -0.0000240334f, 0.0000097698f, -0.0000196647f, 0.0000408240f, -0.0000873313f, -0.0001974888f, + -0.0000745679f, 0.0006405856f, -0.0007833142f, -0.0000263740f, 0.0001825899f, 0.0000836328f, + -0.0000919747f, 0.0000758216f, 0.0000210116f, 0.0000664122f, 0.0000716628f, -0.0000011497f, + 0.0000361513f, 0.0000644816f, 0.0000707314f, 0.0000692091f, -0.0002055217f, 0.0001007125f, + 0.0003613597f, 0.0005722141f, 0.0014928248f, 0.0019595151f, -0.0018123181f, -0.0021841686f, + -0.0019313868f, -0.0016661118f, -0.0011520847f, -0.0007460794f, -0.0007200000f, -0.0004759622f, + -0.0001911740f, 0.0001177745f, 0.0005112609f, 0.0007956582f, 0.0011317990f, 0.0014125904f, + 0.0016338868f, 0.0017396047f, 0.0018056445f, 0.0018052119f, 0.0014209425f, 0.0000970427f, + 0.0015804238f, 0.0015713347f, 0.0016260006f, 0.0017792934f, 0.0018939546f, 0.0020439435f, + 0.0023023017f, 0.0025264800f, 0.0027361034f, 0.0028056985f, 0.0028830887f, 0.0029840440f, + 0.0030499023f, 0.0030582362f, 0.0029323543f, 0.0027372045f, 0.0024602608f, 0.0018918251f, + 0.0014430869f, 0.0005567848f, -0.0004563602f, -0.0012376069f, -0.0015957612f, -0.0019181670f, + -0.0019416943f, -0.0017732047f, -0.0013639015f, -0.0008131398f, -0.0001818974f, 0.0004785653f, + 0.0010577894f, 0.0015807496f, 0.0020750864f, 0.0024484891f, 0.0027097859f, 0.0027252487f, + 0.0025942388f, 0.0023933812f, 0.0021363139f, 0.0019878937f, 0.0017252901f, 0.0007007239f, + -0.0001528669f, -0.0010081819f, -0.0019255759f, -0.0028704299f, -0.0037352063f, -0.0045760650f, + -0.0053741521f, -0.0061399643f, -0.0068807053f, -0.0076055948f, -0.0083505693f, -0.0091327970f, + -0.0099660466f, -0.0109276265f, -0.0119779770f, -0.0130668832f, -0.0142243967f, -0.0154284789f, + 0.0167425678f, 0.0180870259f, 0.0192629868f, 0.0205914974f, 0.0219419942f, 0.0234393525f, + 0.0250925019f, 0.0268648248f, 0.0288064481f, 0.0309261411f, 0.0332359672f, 0.0357337882f, + 0.0384058373f, 0.0412703873f, 0.0443254146f, 0.0475898752f, 0.0510512395f, 0.0546934731f, + 0.0585192825f, 0.0624617968f, 0.0666925081f, 0.0710800609f, 0.0755330962f, 0.0800607977f, + 0.0846155968f, 0.0891603964f, 0.0936468776f, 0.0980290565f, 0.1022710303f, 0.1063242147f, + 0.1101321383f, 0.1136484689f, 0.1168337639f, 0.1196454804f, 0.1220672782f, 0.1240474957f, + 0.1255837620f, 0.1266445580f, 0.1271706795f, 0.1271032514f, 0.1267122859f, 0.1259990302f, + 0.1245431141f, 0.1223810246f, 0.1194917271f, 0.1158164730f, 0.1113281486f, 0.1059821849f, + 0.0997598463f, 0.0926475473f, 0.0846476380f, 0.0757687538f, 0.0660180747f, 0.0553969977f, + 0.0439122033f, 0.0315571111f, 0.0183294511f, 0.0042339687f, -0.0107303776f, -0.0265261206f, + -0.0432087461f, -0.0607651851f, -0.0791119955f, -0.0982585186f, -0.1181828257f, -0.1388675094f, + -0.1602878821f, -0.1824109255f, -0.2052090118f, -0.2286494873f, -0.2527009969f, -0.2773319455f, + -0.3025075323f, -0.3281859857f, -0.3543210024f, -0.3808473827f, -0.4077028160f, -0.4348259057f, + -0.4621422068f, -0.4896449982f, 0.5170583948f, 0.5443118380f, 0.5715622296f, 0.5986919021f, + 0.6256446209f, 0.6523342207f, 0.6786749944f, 0.7045840109f, 0.7299779641f, 0.7547853740f, + 0.7789437691f, 0.8023962911f, 0.8250842263f, 0.8469401272f, 0.8678891784f, 0.8878500705f, + 0.9067442457f, 0.9245026353f, 0.9410725379f, 0.9564213901f, 0.9705164338f, 0.9833542233f, + 0.9949193206f, 1.0051881116f, 1.0141325299f, 1.0217280805f, 1.0279678321f, 1.0328759990f, + 1.0365142018f, 1.0389749476f, 1.0403626832f, 1.0407638661f, 1.0402158247f, 1.0386859218f, + 1.0360693875f, 1.0322135556f, 1.0269616972f, 1.0202228069f, 1.0121135675f, 1.0035354422f, + 0.9897053659f, 0.9706651118f, 0.9512828704f, 0.9307719520f, 0.9091186544f, 0.8864979484f, + 0.8631436896f, 0.8392834698f, 0.8150938957f, 0.7906763160f, 0.7660562253f, 0.7412033356f, + 0.7160643565f, 0.6905965223f, 0.6647900873f, 0.6386753533f, 0.6123109042f, 0.5857635917f, + 0.5590863635f, 0.5323035448f, 0.5054159767f, 0.4784116395f, 0.4512831657f, 0.4240582163f, + 0.3967995814f, 0.3695924504f, 0.3425141525f, 0.3155972383f, 0.2888001961f, 0.2620044852f, + 0.2350467488f, 0.2077866806f, 0.1801971236f, 0.1524510915f, 0.1249766396f, 0.0984509433f, + 0.0737154373f, 0.0515800648f, 0.0323408448f, 0.0138765961f, +}; + + +/* SNR: 85.15, PHASE: 0.166666666666667 */ +const float CLDFB80_60[600] = +{ + -0.0000108386f, 0.0000016461f, -0.0000001140f, 0.0000015161f, -0.0000046862f, -0.0000001825f, + 0.0000001498f, -0.0000000815f, -0.0000033014f, 0.0000001274f, -0.0000001822f, 0.0000000191f, + 0.0000000335f, 0.0000000240f, 0.0000001226f, -0.0000010507f, 0.0000001892f, 0.0000000108f, + -0.0000000274f, -0.0000002365f, -0.0000000901f, -0.0000002666f, -0.0000007031f, 0.0000006413f, + -0.0000000514f, -0.0000000079f, 0.0000002000f, -0.0000014744f, 0.0000048656f, -0.0000001578f, + -0.0000005544f, 0.0000070490f, -0.0000012678f, 0.0000001774f, 0.0000000032f, -0.0000000624f, + 0.0000007343f, 0.0000001499f, -0.0000000401f, -0.0000000182f, -0.0000000944f, -0.0000000302f, + -0.0000000091f, 0.0000004307f, -0.0000028538f, 0.0000002990f, -0.0000000787f, 0.0000000221f, + 0.0000000116f, -0.0000001070f, 0.0000001406f, -0.0000009019f, 0.0000015376f, -0.0000000209f, + -0.0000002404f, -0.0000025088f, -0.0000000262f, 0.0000000630f, 0.0000044280f, -0.0000305498f, + -0.0000482857f, 0.0000046060f, -0.0000005548f, 0.0000056679f, -0.0000207092f, -0.0000003611f, + 0.0000005381f, -0.0000004877f, -0.0000120827f, 0.0000006267f, -0.0000006126f, 0.0000000608f, + 0.0000000850f, 0.0000000605f, 0.0000002921f, -0.0000025140f, 0.0000004365f, 0.0000000116f, + -0.0000000639f, -0.0000003741f, -0.0000004826f, -0.0000006420f, -0.0000009508f, 0.0000015544f, + -0.0000000218f, 0.0000006700f, 0.0000004181f, -0.0000021629f, -0.0000087189f, 0.0000088821f, + -0.0000126345f, 0.0000114297f, 0.0000034734f, -0.0000001464f, -0.0000007710f, 0.0000000568f, + -0.0000018420f, -0.0000002908f, 0.0000001921f, 0.0000004300f, 0.0000001583f, 0.0000000782f, + 0.0000000378f, -0.0000010138f, 0.0000068268f, -0.0000007152f, 0.0000001875f, -0.0000000557f, + -0.0000000384f, 0.0000003789f, -0.0000006147f, 0.0000030092f, -0.0000065731f, 0.0000001500f, + 0.0000007177f, 0.0000112115f, 0.0000001848f, -0.0000012026f, -0.0000036253f, 0.0000992289f, + -0.0003607599f, -0.0003045828f, -0.0002977550f, -0.0001992588f, -0.0002068946f, -0.0001476180f, + -0.0000980857f, -0.0000330428f, -0.0000555832f, -0.0000621497f, -0.0000658559f, -0.0000573785f, + -0.0000513819f, -0.0000416668f, -0.0000295334f, -0.0000092197f, -0.0000207558f, -0.0000179295f, + -0.0000092361f, -0.0000046097f, 0.0000131986f, 0.0000028970f, 0.0000096778f, 0.0000247417f, + 0.0000038052f, -0.0000064960f, -0.0000124163f, -0.0000092122f, 0.0000515938f, -0.0000831154f, + -0.0001125238f, 0.0000257367f, -0.0000286390f, -0.0000087198f, -0.0000068671f, 0.0000026174f, + 0.0000461536f, 0.0000029284f, -0.0000148640f, 0.0000099199f, -0.0000209369f, -0.0000366334f, + -0.0000401223f, -0.0000191720f, -0.0000276997f, -0.0000075415f, -0.0000235869f, -0.0000261427f, + -0.0000261960f, -0.0000286778f, -0.0000147880f, 0.0000339128f, 0.0000594843f, -0.0000475296f, + -0.0000916631f, -0.0001104448f, -0.0001832659f, -0.0003546036f, -0.0004947290f, -0.0008075304f, + -0.0008607843f, -0.0011759540f, -0.0011280060f, -0.0008472242f, -0.0006581582f, -0.0005496107f, + -0.0003610854f, -0.0001310136f, -0.0000843705f, -0.0001929211f, -0.0001782524f, -0.0001519136f, + -0.0001298443f, -0.0001002354f, -0.0000721302f, 0.0000080280f, -0.0000465158f, -0.0000338343f, + -0.0000199728f, -0.0000188237f, 0.0000123819f, -0.0000217824f, 0.0000285072f, 0.0000230642f, + -0.0000681343f, -0.0001359344f, -0.0002126650f, -0.0001268185f, 0.0002814194f, 0.0005796200f, + -0.0006917457f, -0.0004814411f, 0.0000740708f, 0.0001943933f, 0.0001302339f, 0.0000640566f, + -0.0000644259f, -0.0000257394f, 0.0000673956f, 0.0000057778f, 0.0000578339f, 0.0000733133f, + 0.0000756517f, 0.0000485628f, -0.0000143756f, 0.0000258732f, 0.0000543116f, 0.0000662824f, + 0.0000694890f, 0.0000763443f, 0.0000515654f, -0.0001531987f, -0.0001495108f, 0.0001684928f, + 0.0003371435f, 0.0003492618f, 0.0007408282f, 0.0013614773f, 0.0018283780f, 0.0019512654f, + -0.0018468584f, -0.0019931487f, -0.0021435886f, -0.0019354719f, -0.0018716309f, -0.0015855347f, + -0.0012449413f, -0.0008617653f, -0.0007595430f, -0.0007484226f, -0.0006080124f, -0.0004298524f, + -0.0002469285f, -0.0000337803f, 0.0001833366f, 0.0004827171f, 0.0006187704f, 0.0008525160f, + 0.0010861242f, 0.0012478726f, 0.0014766763f, 0.0016195479f, 0.0016757046f, 0.0017606977f, + 0.0018011194f, 0.0018115391f, 0.0017918594f, 0.0015514538f, 0.0007745483f, 0.0000722375f, + 0.0013858425f, 0.0016550121f, 0.0015724609f, 0.0016037139f, 0.0017032298f, 0.0018041572f, + 0.0018793499f, 0.0019356593f, 0.0020977586f, 0.0022698159f, 0.0024080283f, 0.0025652021f, + 0.0027100014f, 0.0027878510f, 0.0028094267f, 0.0028631331f, 0.0029379588f, 0.0029982766f, + 0.0030408094f, 0.0030637651f, 0.0030520617f, 0.0029707674f, 0.0028257202f, 0.0027032586f, + 0.0025230449f, 0.0021943273f, 0.0018058213f, 0.0015201289f, 0.0010679683f, 0.0003894925f, + -0.0002840705f, -0.0009250455f, -0.0013074121f, -0.0015395618f, -0.0017798333f, -0.0019401547f, + -0.0019524700f, -0.0018826540f, -0.0017220928f, -0.0014455464f, -0.0011010583f, -0.0007116751f, + -0.0002892919f, 0.0001463485f, 0.0005842019f, 0.0009616845f, 0.0013293069f, 0.0016655901f, + 0.0019957600f, 0.0022974838f, 0.0024834913f, 0.0026599403f, 0.0027746423f, 0.0027031419f, + 0.0026172855f, 0.0025078917f, 0.0023497345f, 0.0021702568f, 0.0020425098f, 0.0019860915f, + 0.0018636567f, 0.0011954954f, 0.0005514571f, -0.0000141897f, -0.0005741594f, -0.0011558780f, + -0.0017668142f, -0.0024120809f, -0.0030128714f, -0.0035882532f, -0.0041653667f, -0.0047110318f, + -0.0052436287f, -0.0057623702f, -0.0062633358f, -0.0067586961f, -0.0072425386f, -0.0077278117f, + -0.0082234072f, -0.0087363677f, -0.0092686369f, -0.0098240661f, -0.0104237699f, -0.0111004947f, + -0.0118009488f, -0.0125156239f, -0.0132546394f, -0.0140277665f, -0.0148077168f, -0.0156486149f, + 0.0165211147f, 0.0174398402f, 0.0182775949f, 0.0190534138f, 0.0199230411f, 0.0208118290f, + 0.0217092634f, 0.0226649147f, 0.0237088141f, 0.0248100351f, 0.0259599813f, 0.0271764016f, + 0.0284714021f, 0.0298434758f, 0.0312965027f, 0.0328356927f, 0.0344649815f, 0.0361664394f, + 0.0379470806f, 0.0398139569f, 0.0417666458f, 0.0438027210f, 0.0459314689f, 0.0481532079f, + 0.0504618496f, 0.0528498740f, 0.0553180491f, 0.0578703090f, 0.0604788669f, 0.0631374695f, + 0.0659669298f, 0.0688814001f, 0.0718159332f, 0.0747835495f, 0.0777923399f, 0.0808186627f, + 0.0838554308f, 0.0868947517f, 0.0899116089f, 0.0929041126f, 0.0958553537f, 0.0987459119f, + 0.1015756668f, 0.1043243835f, 0.1069774737f, 0.1095164928f, 0.1119302041f, 0.1142027056f, + 0.1163273532f, 0.1182880738f, 0.1200768686f, 0.1216925159f, 0.1231125873f, 0.1243362384f, + 0.1253610086f, 0.1261745561f, 0.1267721689f, 0.1271241769f, 0.1272284850f, 0.1270239254f, + 0.1267589302f, 0.1264656300f, 0.1258046109f, 0.1248336057f, 0.1235525506f, 0.1219504858f, + 0.1200252469f, 0.1177556666f, 0.1151258716f, 0.1121348547f, 0.1087635447f, 0.1050067776f, + 0.1008590143f, 0.0963144136f, 0.0913759079f, 0.0860427416f, 0.0803171444f, 0.0742040884f, + 0.0677045255f, 0.0608146076f, 0.0535432746f, 0.0458874964f, 0.0378425383f, 0.0294132744f, + 0.0205946670f, 0.0113896330f, 0.0018004463f, -0.0081766098f, -0.0185270856f, -0.0292402963f, + -0.0403618604f, -0.0518892622f, -0.0637672152f, -0.0759976007f, -0.0885871716f, -0.1015258403f, + -0.1148084399f, -0.1284318249f, -0.1423873123f, -0.1566679827f, -0.1712634880f, -0.1861645588f, + -0.2013636452f, -0.2168508609f, -0.2326166940f, -0.2486510515f, -0.2649463144f, -0.2814911369f, + -0.2982752192f, -0.3152867427f, -0.3325116487f, -0.3499355632f, -0.3675395959f, -0.3853024154f, + -0.4032065616f, -0.4212350657f, -0.4393672268f, -0.4575772736f, -0.4758650706f, -0.4942431738f, + 0.5125205124f, 0.5306725282f, 0.5488577283f, 0.5670276108f, 0.5851445237f, 0.6031984616f, + 0.6211684103f, 0.6390281696f, 0.6567504157f, 0.6743123793f, 0.6916889535f, 0.7088542063f, + 0.7257845309f, 0.7424591009f, 0.7588584440f, 0.7749648928f, 0.7907617163f, 0.8062324551f, + 0.8213587554f, 0.8361206884f, 0.8504967301f, 0.8644639148f, 0.8779983070f, 0.8910752510f, + 0.9036722755f, 0.9157691951f, 0.9273480313f, 0.9383949141f, 0.9489012228f, 0.9588586337f, + 0.9682545154f, 0.9770929872f, 0.9853708240f, 0.9930809758f, 1.0002174168f, 1.0067717565f, + 1.0127347711f, 1.0180999340f, 1.0228621525f, 1.0270212624f, 1.0305853696f, 1.0335685634f, + 1.0359921286f, 1.0378851378f, 1.0392782898f, 1.0402014380f, 1.0406826783f, 1.0407387739f, + 1.0403729933f, 1.0395784114f, 1.0383296408f, 1.0365863031f, 1.0343061945f, 1.0314399587f, + 1.0279374991f, 1.0237762412f, 1.0189593836f, 1.0135316260f, 1.0076524569f, 1.0021150619f, + 0.9928949328f, 0.9800034826f, 0.9674886109f, 0.9545877700f, 0.9411740407f, 0.9272370892f, + 0.9128016387f, 0.8979145998f, 0.8826491402f, 0.8670774704f, 0.8512639848f, 0.8352705212f, + 0.8191434022f, 0.8029102780f, 0.7865870046f, 0.7701746598f, 0.7536620391f, 0.7370346195f, + 0.7202763550f, 0.7033730373f, 0.6863185156f, 0.6691140098f, 0.6517679660f, 0.6342966925f, + 0.6167195326f, 0.5990562278f, 0.5813252524f, 0.5635402746f, 0.5457078369f, 0.5278295335f, + 0.5099048467f, 0.4919297136f, 0.4738984035f, 0.4558126317f, 0.4376796414f, 0.4195151253f, + 0.4013417258f, 0.3831842053f, 0.3650685616f, 0.3470163688f, 0.3290362900f, 0.3111247009f, + 0.2932627295f, 0.2754121565f, 0.2575267491f, 0.2395585877f, 0.2214602867f, 0.2032086383f, + 0.1848152793f, 0.1663238479f, 0.1478361334f, 0.1295133662f, 0.1115465981f, 0.0941771468f, + 0.0776828916f, 0.0622889538f, 0.0481725935f, 0.0353986404f, 0.0233593568f, 0.0103354077f, +}; + +/* 5ms delay prototype */ +const float LDQMF_10[] = { + 0.0001273845f, 0.0000635118f, -0.0000660217f, -0.0002113081f, -0.0003281537f, + -0.0003912222f, -0.0004068033f, -0.0004140125f, -0.0004718648f, -0.0006266075f, + -0.0009127590f, -0.0012739376f, -0.0016274325f, -0.0019008842f, -0.0020226149f, + -0.0019408775f, -0.0016361899f, -0.0011222441f, -0.0004377523f, 0.0003647603f, + -0.0012594409f, -0.0021522972f, -0.0030035379f, -0.0037893278f, -0.0044942242f, + -0.0051073083f, -0.0056195767f, -0.0060277097f, -0.0063409884f, -0.0065891631f, + -0.0068226936f, -0.0071118907f, -0.0075195418f, -0.0080805793f, -0.0087772291f, + -0.0095174490f, -0.0101190321f, -0.0103132902f, -0.0097556449f, -0.0080578737f, + 0.0048244377f, -0.0003165600f, -0.0076599251f, -0.0173909795f, -0.0295472052f, + -0.0439858213f, -0.0603589974f, -0.0780881494f, -0.0963465944f, -0.1140660420f, + -0.1299571097f, -0.1425518692f, -0.1502614617f, -0.1514699608f, -0.1446436346f, + -0.1284375042f, -0.1017979383f, -0.0640543476f, -0.0149940467f, 0.0450862162f, + -0.1153608263f, -0.1944719404f, -0.2805878818f, -0.3714071214f, -0.4642693698f, + -0.5562577248f, -0.6443206668f, -0.7254143953f, -0.7966600657f, -0.8555190563f, + -0.8997997642f, -0.9279605746f, -0.9392472506f, -0.9334323406f, -0.9110113978f, + -0.8731529117f, -0.8216037750f, -0.7585863471f, -0.6866725683f, -0.6086452603f, + 0.5273383856f, 0.4454931915f, 0.3659263849f, 0.2909410596f, 0.2225102335f, + 0.1621384323f, 0.1107588187f, 0.0686842650f, 0.0356131159f, 0.0106525151f, + -0.0063419202f, -0.0162735451f, -0.0215873942f, -0.0231836922f, -0.0218834467f, + -0.0185378529f, -0.0140356207f, -0.0092558619f, -0.0049960618f, -0.0018630750f +}; + +const float LDQMF_16[] = { + 0.0001265111f, 0.0001109249f, 0.0000568343f, -0.0000216999f, -0.0001121275f, + -0.0002026297f, -0.0002828319f, -0.0003443913f, -0.0003836917f, -0.0004022507f, + -0.0004069506f, -0.0004091908f, -0.0004238644f, -0.0004657293f, -0.0005455829f, + -0.0006671423f, -0.0008481053f, -0.0010676773f, -0.0012969378f, -0.0015220091f, + -0.0017250745f, -0.0018875538f, -0.0019920163f, -0.0020238718f, -0.0019730844f, + -0.0018349015f, -0.0016098975f, -0.0013033486f, -0.0009243955f, -0.0004846041f, + 0.0000030436f, 0.0005237655f, -0.0010895540f, -0.0016529929f, -0.0022070303f, + -0.0027436065f, -0.0032569722f, -0.0037424688f, -0.0041965689f, -0.0046164915f, + -0.0049998290f, -0.0053441799f, -0.0056481226f, -0.0059111635f, -0.0061348351f, + -0.0063237241f, -0.0064858343f, -0.0066322954f, -0.0067769806f, -0.0069382410f, + -0.0071333470f, -0.0073765265f, -0.0076779663f, -0.0080410065f, -0.0084597301f, + -0.0089169554f, -0.0093825553f, -0.0098114274f, -0.0101463618f, -0.0103159947f, + -0.0102374777f, -0.0098197237f, -0.0089666471f, -0.0075801839f, 0.0055659222f, + 0.0028292525f, -0.0007084093f, -0.0051146746f, -0.0104394183f, -0.0167112947f, + -0.0239351243f, -0.0320881605f, -0.0411179215f, -0.0509394705f, -0.0614346750f, + -0.0724472553f, -0.0837826133f, -0.0952089876f, -0.1064579859f, -0.1172273904f, + -0.1271827519f, -0.1359646022f, -0.1431937218f, -0.1484752893f, -0.1514120996f, + -0.1516146213f, -0.1487106383f, -0.1423557848f, -0.1322438419f, -0.1181157678f, + -0.0997688919f, -0.0770645440f, -0.0499351621f, -0.0183888972f, 0.0174860694f, + 0.0575199649f, -0.1014656499f, -0.1489799321f, -0.1996707469f, -0.2530553043f, + -0.3085824847f, -0.3656420112f, -0.4235731661f, -0.4816747010f, -0.5392161012f, + -0.5954495668f, -0.6496242881f, -0.7010003328f, -0.7488642931f, -0.7925460339f, + -0.8314355612f, -0.8650042415f, -0.8927068710f, -0.9141520858f, -0.9291663766f, + -0.9375609756f, -0.9392580390f, -0.9342910051f, -0.9228035808f, -0.9050434232f, + -0.8813542128f, -0.8521632552f, -0.8179759979f, -0.7793614268f, -0.7369411588f, + -0.6913757920f, -0.6433517337f, -0.5935677886f, 0.5427325368f, 0.4914081097f, + 0.4404284060f, 0.3904018402f, 0.3419007659f, 0.2954539955f, 0.2515334785f, + 0.2105401903f, 0.1727928966f, 0.1385205537f, 0.1078566760f, 0.0808390900f, + 0.0574123114f, 0.0374300666f, 0.0206582583f, 0.0067475829f, -0.0038830251f, + -0.0113212354f, -0.0167305935f, -0.0203650482f, -0.0224466976f, -0.0231772382f, + -0.0227553174f, -0.0213854741f, -0.0192801002f, -0.0166575927f, -0.0137361875f, + -0.0107288063f, -0.0078344941f, -0.0052339621f, -0.0030720702f, -0.0014194851f +}; + +const float LDQMF_20[] = { + 0.0001230230f, 0.0001211219f, 0.0000876540f, 0.0000352143f, -0.0000303788f, + -0.0001028838f, -0.0001760167f, -0.0002446725f, -0.0003034996f, -0.0003493345f, + -0.0003807641f, -0.0003985357f, -0.0004056677f, -0.0004072535f, -0.0004098394f, + -0.0004214063f, -0.0004495422f, -0.0005003878f, -0.0005777747f, -0.0006813223f, + -0.0008268412f, -0.0010004630f, -0.0011817788f, -0.0013656860f, -0.0015435946f, + -0.0017062968f, -0.0018441341f, -0.0019480695f, -0.0020097434f, -0.0020226294f, + -0.0019820682f, -0.0018855907f, -0.0017330211f, -0.0015261442f, -0.0012685407f, + -0.0009652392f, -0.0006221444f, -0.0002458634f, 0.0001564174f, 0.0005769439f, + -0.0010328424f, -0.0014848098f, -0.0019316213f, -0.0023701149f, -0.0027960713f, + -0.0032068293f, -0.0035999804f, -0.0039736414f, -0.0043262239f, -0.0046565188f, + -0.0049632201f, -0.0052450863f, -0.0055012843f, -0.0057313135f, -0.0059352517f, + -0.0061141332f, -0.0062703062f, -0.0064075105f, -0.0065308069f, -0.0066466411f, + -0.0067621553f, -0.0068870094f, -0.0070305937f, -0.0072006541f, -0.0074039386f, + -0.0076450342f, -0.0079257628f, -0.0082442267f, -0.0085938899f, -0.0089637861f, + -0.0093367994f, -0.0096898535f, -0.0099947909f, -0.0102182031f, -0.0103207529f, + -0.0102590285f, -0.0099863587f, -0.0094537362f, -0.0086111929f, -0.0074084769f, + 0.0057985946f, 0.0037309236f, 0.0011651339f, -0.0019364181f, -0.0056051607f, + -0.0098646237f, -0.0147295250f, -0.0202049762f, -0.0262852497f, -0.0329528190f, + -0.0401776619f, -0.0479161367f, -0.0561118126f, -0.0646922663f, -0.0735698044f, + -0.0826408863f, -0.0917868018f, -0.1008738130f, -0.1097536832f, -0.1182654947f, + -0.1262341589f, -0.1334753036f, -0.1397978216f, -0.1450008005f, -0.1488809884f, + -0.1512351334f, -0.1518635303f, -0.1505732536f, -0.1471813470f, -0.1415183097f, + -0.1334318966f, -0.1227891371f, -0.1094799563f, -0.0934195668f, -0.0745511875f, + -0.0528475679f, -0.0283128861f, -0.0009837818f, 0.0290693250f, 0.0617432520f, + -0.0969054326f, -0.1343720406f, -0.1739567965f, -0.2154271752f, -0.2585212290f, + -0.3029502928f, -0.3484017253f, -0.3945416212f, -0.4410185516f, -0.4874662757f, + -0.5335084200f, -0.5787616372f, -0.6228409410f, -0.6653640866f, -0.7059561610f, + -0.7442554235f, -0.7799182534f, -0.8126249313f, -0.8420860767f, -0.8680517077f, + -0.8902196884f, -0.9083824754f, -0.9224776030f, -0.9323854446f, -0.9380323887f, + -0.9393896461f, -0.9364743829f, -0.9293491840f, -0.9181203246f, -0.9029349089f, + -0.8839784265f, -0.8614694476f, -0.8356599212f, -0.8068289757f, -0.7752800584f, + -0.7413358092f, -0.7053351402f, -0.6676273942f, -0.6285686493f, -0.5885198116f, + 0.5478612781f, 0.5067980289f, 0.4658361673f, 0.4252935350f, 0.3854739666f, + 0.3466667533f, 0.3091430366f, 0.2731511295f, 0.2389119864f, 0.2066148520f, + 0.1764142811f, 0.1484276950f, 0.1227331311f, 0.0993694067f, 0.0783365741f, + 0.0595967993f, 0.0430756323f, 0.0286619961f, 0.0162059069f, 0.0054926532f, + -0.0030201224f, -0.0093160523f, -0.0142635731f, -0.0179969221f, -0.0206398536f, + -0.0223025978f, -0.0230882075f, -0.0230979007f, -0.0224345829f, -0.0212045144f, + -0.0195175279f, -0.0174855441f, -0.0152208358f, -0.0128338682f, -0.0104311826f, + -0.0081134979f, -0.0059733889f, -0.0040914025f, -0.0025271603f, -0.0012705614f +}; + +const float LDQMF_30[] = { + 0.0001132221f, 0.0001273845f, 0.0001170250f, 0.0000947188f, 0.0000635118f, + 0.0000250289f, -0.0000188243f, -0.0000660217f, -0.0001152096f, -0.0001640412f, + -0.0002113081f, -0.0002552809f, -0.0002945333f, -0.0003281537f, -0.0003555670f, + -0.0003765307f, -0.0003912222f, -0.0004003684f, -0.0004050101f, -0.0004068033f, + -0.0004073895f, -0.0004090022f, -0.0004140125f, -0.0004247443f, -0.0004433907f, + -0.0004718648f, -0.0005113805f, -0.0005630197f, -0.0006266075f, -0.0007011125f, + -0.0007991094f, -0.0009127590f, -0.0010302142f, -0.0011511127f, -0.0012739376f, + -0.0013960009f, -0.0015147630f, -0.0016274325f, -0.0017312448f, -0.0018232886f, + -0.0019008842f, -0.0019614976f, -0.0020026900f, -0.0020226149f, -0.0020196829f, + -0.0019926974f, -0.0019408775f, -0.0018640372f, -0.0017622994f, -0.0016361899f, + -0.0014866102f, -0.0013147899f, -0.0011222441f, -0.0009106447f, -0.0006817955f, + -0.0004377523f, -0.0001804045f, 0.0000879158f, 0.0003647603f, 0.0006472586f, + -0.0009574946f, -0.0012594409f, -0.0015596492f, -0.0018575254f, -0.0021522972f, + -0.0024420463f, -0.0027260673f, -0.0030035379f, -0.0032736242f, -0.0035357473f, + -0.0037893278f, -0.0040339152f, -0.0042689815f, -0.0044942242f, -0.0047093285f, + -0.0049138218f, -0.0051073083f, -0.0052895811f, -0.0054603852f, -0.0056195767f, + -0.0057671070f, -0.0059030461f, -0.0060277097f, -0.0061416570f, -0.0062457137f, + -0.0063409884f, -0.0064288811f, -0.0065109758f, -0.0065891631f, -0.0066657839f, + -0.0067426423f, -0.0068226936f, -0.0069094361f, -0.0070050140f, -0.0071118907f, + -0.0072320686f, -0.0073675187f, -0.0075195418f, -0.0076890816f, -0.0078762611f, + -0.0080805793f, -0.0083005941f, -0.0085338661f, -0.0087772291f, -0.0090263058f, + -0.0092753358f, -0.0095174490f, -0.0097448118f, -0.0099486159f, -0.0101190321f, + -0.0102448259f, -0.0103138546f, -0.0103132902f, -0.0102295466f, -0.0100485412f, + -0.0097556449f, -0.0093362173f, -0.0087752696f, -0.0080578737f, -0.0071694241f, + 0.0060977875f, 0.0048244377f, 0.0033389633f, 0.0016289989f, -0.0003165600f, + -0.0025077621f, -0.0049532265f, -0.0076599251f, -0.0106331240f, -0.0138763143f, + -0.0173909795f, -0.0211766809f, -0.0252304692f, -0.0295472052f, -0.0341192745f, + -0.0389365107f, -0.0439858213f, -0.0492520891f, -0.0547169745f, -0.0603589974f, + -0.0661538467f, -0.0720737800f, -0.0780881494f, -0.0841634125f, -0.0902627930f, + -0.0963465944f, -0.1023724005f, -0.1082947850f, -0.1140660420f, -0.1196364164f, + -0.1249518171f, -0.1299571097f, -0.1345982403f, -0.1388163716f, -0.1425518692f, + -0.1457448602f, -0.1483348161f, -0.1502614617f, -0.1514650136f, -0.1518869400f, + -0.1514699608f, -0.1501586437f, -0.1478999555f, -0.1446436346f, -0.1403426975f, + -0.1349538267f, -0.1284375042f, -0.1207587793f, -0.1118873134f, -0.1017979383f, + -0.0904709548f, -0.0778924823f, -0.0640543476f, -0.0489545316f, -0.0325974710f, + -0.0149940467f, 0.0038382637f, 0.0238753036f, 0.0450862162f, 0.0674346089f, + -0.0908823684f, -0.1153608263f, -0.1408283263f, -0.1672216803f, -0.1944719404f, + -0.2225042433f, -0.2512380779f, -0.2805878818f, -0.3104633093f, -0.3407693803f, + -0.3714071214f, -0.4022741020f, -0.4332643747f, -0.4642693698f, -0.4951784015f, + -0.5258791447f, -0.5562577248f, -0.5862001181f, -0.6155921817f, -0.6443206668f, + -0.6722734571f, -0.6993405223f, -0.7254143953f, -0.7503913045f, -0.7741714120f, + -0.7966600657f, -0.8177679181f, -0.8374124765f, -0.8555190563f, -0.8720235229f, + -0.8868073225f, -0.8997997642f, -0.9110177755f, -0.9204165936f, -0.9279605746f, + -0.9336239100f, -0.9373888969f, -0.9392472506f, -0.9391993284f, -0.9372548461f, + -0.9334323406f, -0.9277592301f, -0.9202710390f, -0.9110113978f, -0.9000319242f, + -0.8873908520f, -0.8731529117f, -0.8573898673f, -0.8401791453f, -0.8216037750f, + -0.8017510772f, -0.7807134390f, -0.7585863471f, -0.7354692221f, -0.7114632726f, + -0.6866725683f, -0.6612017751f, -0.6351572275f, -0.6086452603f, -0.5817720890f, + 0.5547027588f, 0.5273383856f, 0.4999553561f, 0.4726423621f, 0.4454931915f, + 0.4185986817f, 0.3920478821f, 0.3659263849f, 0.3403166533f, 0.3152970076f, + 0.2909410596f, 0.2673173845f, 0.2444883287f, 0.2225102335f, 0.2014321834f, + 0.1812966615f, 0.1621384323f, 0.1439844817f, 0.1268542111f, 0.1107588187f, + 0.0957026929f, 0.0816812664f, 0.0686842650f, 0.0566918403f, 0.0456795096f, + 0.0356131159f, 0.0264542010f, 0.0181538444f, 0.0106525151f, 0.0038657826f, + -0.0018247393f, -0.0063419202f, -0.0102294916f, -0.0135271698f, -0.0162735451f, + -0.0185101982f, -0.0202700198f, -0.0215873942f, -0.0224917270f, -0.0230140593f, + -0.0231836922f, -0.0230311844f, -0.0225872938f, -0.0218834467f, -0.0209521335f, + -0.0198257342f, -0.0185378529f, -0.0171212200f, -0.0156097068f, -0.0140356207f, + -0.0124316914f, -0.0108282696f, -0.0092558619f, -0.0077421702f, -0.0063143214f, + -0.0049960618f, -0.0038076851f, -0.0027630797f, -0.0018630750f, -0.0010562690f +}; + +const float LDQMF_32[] = { + 0.0001114764f, 0.0001277322f, 0.0001196933f, 0.0001003250f, 0.0000730156f, + 0.0000389626f, -0.0000004113f, -0.0000435304f, -0.0000890315f, -0.0001352291f, + -0.0001804941f, -0.0002240739f, -0.0002643097f, -0.0003001800f, -0.0003310027f, + -0.0003563178f, -0.0003759742f, -0.0003900956f, -0.0003992571f, -0.0004043059f, + -0.0004065038f, -0.0004072087f, -0.0004080582f, -0.0004110776f, -0.0004182056f, + -0.0004312390f, -0.0004520137f, -0.0004817972f, -0.0005216259f, -0.0005721557f, + -0.0006331798f, -0.0007036886f, -0.0007957022f, -0.0009019459f, -0.0010115934f, + -0.0011244126f, -0.0012394030f, -0.0013542691f, -0.0014670856f, -0.0015755219f, + -0.0016774036f, -0.0017702234f, -0.0018517138f, -0.0019197501f, -0.0019722404f, + -0.0020072563f, -0.0020233381f, -0.0020192105f, -0.0019939172f, -0.0019467958f, + -0.0018776910f, -0.0017866619f, -0.0016740696f, -0.0015406047f, -0.0013871717f, + -0.0012149811f, -0.0010253293f, -0.0008196524f, -0.0005995433f, -0.0003666130f, + -0.0001225593f, 0.0001306669f, 0.0003910401f, 0.0006561352f, -0.0009480129f, + -0.0012312274f, -0.0015128938f, -0.0017925701f, -0.0020698721f, -0.0023430535f, + -0.0026114415f, -0.0028743364f, -0.0031310993f, -0.0033810970f, -0.0036239279f, + -0.0038590427f, -0.0040861652f, -0.0043048300f, -0.0045148288f, -0.0047158841f, + -0.0049075997f, -0.0050896429f, -0.0052618566f, -0.0054239952f, -0.0055759880f, + -0.0057177031f, -0.0058492054f, -0.0059706448f, -0.0060824142f, -0.0061850520f, + -0.0062793852f, -0.0063663856f, -0.0064472742f, -0.0065233973f, -0.0065963734f, + -0.0066681784f, -0.0067402194f, -0.0068149343f, -0.0068953573f, -0.0069832220f, + -0.0070805764f, -0.0071891183f, -0.0073105576f, -0.0074461517f, -0.0075968099f, + -0.0077630100f, -0.0079445979f, -0.0081409542f, -0.0083505949f, -0.0085713090f, + -0.0088004116f, -0.0090341223f, -0.0092676217f, -0.0094952518f, -0.0097106276f, + -0.0099064959f, -0.0100751268f, -0.0102073448f, -0.0102934698f, -0.0103230691f, + -0.0102852238f, -0.0101685468f, -0.0099611804f, -0.0096511031f, -0.0092261136f, + -0.0086738830f, -0.0079820622f, -0.0071387375f, 0.0061342926f, 0.0049526179f, + 0.0035855719f, 0.0020228061f, 0.0002550660f, -0.0017262386f, -0.0039286232f, + -0.0063582431f, -0.0090201823f, -0.0119179590f, -0.0150538534f, -0.0184284002f, + -0.0220406763f, -0.0258877873f, -0.0299651287f, -0.0342661664f, -0.0387823842f, + -0.0435030013f, -0.0484156460f, -0.0535055920f, -0.0587556586f, -0.0641462877f, + -0.0696556121f, -0.0752592385f, -0.0809305608f, -0.0866405517f, -0.0923579335f, + -0.0980491117f, -0.1036783829f, -0.1092077494f, -0.1145975813f, -0.1198066771f, + -0.1247901469f, -0.1295024157f, -0.1338994503f, -0.1379327923f, -0.1415534765f, + -0.1447122544f, -0.1473592520f, -0.1494447440f, -0.1509192586f, -0.1517339647f, + -0.1518410593f, -0.1511938870f, -0.1497472823f, -0.1474581808f, -0.1442855000f, + -0.1401909739f, -0.1351390928f, -0.1290972829f, -0.1220364720f, -0.1139311492f, + -0.1047598422f, -0.0945051536f, -0.0831540972f, -0.0706980526f, -0.0571332164f, + -0.0424606539f, -0.0266861133f, -0.0098207183f, 0.0081194015f, 0.0271129999f, + 0.0471336693f, 0.0681508929f, -0.0901340321f, -0.1130230203f, -0.1367862970f, + -0.1613724083f, -0.1867254972f, -0.2127848268f, -0.2394856811f, -0.2667590678f, + -0.2945322692f, -0.3227286935f, -0.3512688875f, -0.3800697625f, -0.4090464115f, + -0.4381107390f, -0.4671728909f, -0.4961415529f, -0.5249239802f, -0.5534265041f, + -0.5815549493f, -0.6092154384f, -0.6363143325f, -0.6627591252f, -0.6884583235f, + -0.7133225799f, -0.7372650504f, -0.7602017522f, -0.7820522189f, -0.8027398586f, + -0.8221930265f, -0.8403448462f, -0.8571352363f, -0.8725125194f, -0.8863729239f, + -0.8986561894f, -0.9093839526f, -0.9185180068f, -0.9260279536f, -0.9318904877f, + -0.9360890388f, -0.9386137724f, -0.9394617677f, -0.9386372566f, -0.9361515045f, + -0.9320224524f, -0.9262748957f, -0.9189397693f, -0.9100542665f, -0.8996617198f, + -0.8878104091f, -0.8745536804f, -0.8599503040f, -0.8440635800f, -0.8269610405f, + -0.8087138534f, -0.7893968821f, -0.7690878510f, -0.7478674054f, -0.7258179784f, + -0.7030247450f, -0.6795731187f, -0.6555500627f, -0.6310426593f, -0.6061393619f, + -0.5809279680f, 0.5555571318f, 0.5299059153f, 0.5042316318f, 0.4786062539f, + 0.4531070888f, 0.4278093874f, 0.4027872086f, 0.3781120181f, 0.3538532257f, + 0.3300769329f, 0.3068462014f, 0.2842200696f, 0.2622535527f, 0.2409968227f, + 0.2204952389f, 0.2007884830f, 0.1819112599f, 0.1638922095f, 0.1467540115f, + 0.1305132508f, 0.1151807010f, 0.1007611454f, 0.0872532800f, 0.0746501535f, + 0.0629388988f, 0.0521017052f, 0.0421142913f, 0.0329478458f, 0.0245663263f, + 0.0169306416f, 0.0099878404f, 0.0036667606f, -0.0016705567f, -0.0059447517f, + -0.0096629029f, -0.0128545053f, -0.0155541990f, -0.0177966245f, -0.0196102057f, + -0.0210233144f, -0.0220607370f, -0.0227484647f, -0.0231104363f, -0.0231721289f, + -0.0229578372f, -0.0224937275f, -0.0218052734f, -0.0209197178f, -0.0198635645f, + -0.0186645426f, -0.0173496436f, -0.0159468446f, -0.0144828279f, -0.0129845534f, + -0.0114774173f, -0.0099871978f, -0.0085373754f, -0.0071508014f, -0.0058474829f, + -0.0046474598f, -0.0035660865f, -0.0026146793f, -0.0017866376f, -0.0010276214f +}; + + +const float LDQMF_40[] = { + 0.0001054310f, 0.0001278277f, 0.0001251928f, 0.0001146889f, 0.0000979851f, + 0.0000760574f, 0.0000498818f, 0.0000198387f, -0.0000131029f, -0.0000479618f, + -0.0000844192f, -0.0001213740f, -0.0001580337f, -0.0001938389f, -0.0002282606f, + -0.0002604699f, -0.0002899167f, -0.0003162437f, -0.0003392129f, -0.0003585335f, + -0.0003742669f, -0.0003864095f, -0.0003952379f, -0.0004011750f, -0.0004046241f, + -0.0004063755f, -0.0004070677f, -0.0004074774f, -0.0004086622f, -0.0004115711f, + -0.0004172591f, -0.0004265972f, -0.0004405513f, -0.0004599697f, -0.0004853081f, + -0.0005171628f, -0.0005559114f, -0.0006013246f, -0.0006533514f, -0.0007115960f, + -0.0007855657f, -0.0008695939f, -0.0009563145f, -0.0010451660f, -0.0011358386f, + -0.0012278836f, -0.0013199070f, -0.0014110771f, -0.0015001969f, -0.0015860386f, + -0.0016675856f, -0.0017434494f, -0.0018125287f, -0.0018736399f, -0.0019257307f, + -0.0019677528f, -0.0019986648f, -0.0020177464f, -0.0020242827f, -0.0020176519f, + -0.0019974308f, -0.0019632282f, -0.0019149955f, -0.0018526751f, -0.0017763647f, + -0.0016862786f, -0.0015827856f, -0.0014663173f, -0.0013374290f, -0.0011967755f, + -0.0010450395f, -0.0008829425f, -0.0007112789f, -0.0005309665f, -0.0003426777f, + -0.0001474131f, 0.0000538647f, 0.0002601457f, 0.0004704242f, 0.0006831217f, + -0.0009193350f, -0.0011463511f, -0.0013722219f, -0.0015970126f, -0.0018204211f, + -0.0020423096f, -0.0022615823f, -0.0024778829f, -0.0026909125f, -0.0029003047f, + -0.0031057200f, -0.0033068350f, -0.0035034318f, -0.0036952950f, -0.0038821250f, + -0.0040638284f, -0.0042401305f, -0.0044109244f, -0.0045761010f, -0.0047354894f, + -0.0048888689f, -0.0050360523f, -0.0051769917f, -0.0053115566f, -0.0054396591f, + -0.0055612531f, -0.0056762602f, -0.0057847309f, -0.0058866790f, -0.0059822481f, + -0.0060716602f, -0.0061551840f, -0.0062332042f, -0.0063061914f, -0.0063747251f, + -0.0064394251f, -0.0065009692f, -0.0065601622f, -0.0066179447f, -0.0066753621f, + -0.0067329677f, -0.0067919991f, -0.0068543297f, -0.0069208522f, -0.0069924956f, + -0.0070703635f, -0.0071552829f, -0.0072481371f, -0.0073496993f, -0.0074605206f, + -0.0075810468f, -0.0077115200f, -0.0078519098f, -0.0080020009f, -0.0081613464f, + -0.0083290907f, -0.0085040880f, -0.0086850226f, -0.0088702254f, -0.0090575712f, + -0.0092444401f, -0.0094279535f, -0.0096049141f, -0.0097717466f, -0.0099247349f, + -0.0100597525f, -0.0101720523f, -0.0102568185f, -0.0103087639f, -0.0103225084f, + -0.0102923671f, -0.0102125369f, -0.0100769754f, -0.0098794578f, -0.0096139675f, + -0.0092741428f, -0.0088536264f, -0.0083462056f, -0.0077455463f, -0.0070456262f, + 0.0062426012f, 0.0053260727f, 0.0042929468f, 0.0031377305f, 0.0018554037f, + 0.0004413279f, -0.0011089550f, -0.0027993873f, -0.0046333913f, -0.0066139149f, + -0.0087434240f, -0.0110237021f, -0.0134560717f, -0.0160411559f, -0.0187789686f, + -0.0216688234f, -0.0247092377f, -0.0278980359f, -0.0312322956f, -0.0347082689f, + -0.0383213721f, -0.0420661084f, -0.0459361374f, -0.0499247424f, -0.0540237017f, + -0.0582240038f, -0.0625155717f, -0.0668876022f, -0.0713279545f, -0.0758237690f, + -0.0803611800f, -0.0849252865f, -0.0895003974f, -0.0940696299f, -0.0986154303f, + -0.1031193137f, -0.1075617522f, -0.1119226590f, -0.1161812171f, -0.1203159690f, + -0.1243033260f, -0.1281196773f, -0.1317433566f, -0.1351498365f, -0.1383142620f, + -0.1412113756f, -0.1438160986f, -0.1461028159f, -0.1480461359f, -0.1496205181f, + -0.1508007050f, -0.1515616924f, -0.1518789232f, -0.1517281830f, -0.1510859281f, + -0.1499291658f, -0.1482358277f, -0.1459847391f, -0.1431556493f, -0.1397294253f, + -0.1356883198f, -0.1310155839f, -0.1256958842f, -0.1197156236f, -0.1130623519f, + -0.1057254449f, -0.0976961926f, -0.0889673084f, -0.0795335919f, -0.0693915039f, + -0.0585396253f, -0.0469785258f, -0.0347105376f, -0.0217403900f, -0.0080747427f, + 0.0062775812f, 0.0213057883f, 0.0369967707f, 0.0533357821f, 0.0703063011f, + -0.0878949612f, -0.1060620621f, -0.1247984543f, -0.1440782398f, -0.1638741642f, + -0.1841574013f, -0.2048965842f, -0.2260592878f, -0.2476108670f, -0.2695151269f, + -0.2917346060f, -0.3142299950f, -0.3369609118f, -0.3598856330f, -0.3829609752f, + -0.4061433673f, -0.4293875396f, -0.4526477456f, -0.4758775234f, -0.4990297258f, + -0.5220568180f, -0.5449107289f, -0.5675433278f, -0.5899065137f, -0.6119521260f, + -0.6336323619f, -0.6548998952f, -0.6757075191f, -0.6960092783f, -0.7157597542f, + -0.7349147201f, -0.7534312606f, -0.7712675929f, -0.7883839607f, -0.8047417998f, + -0.8203051686f, -0.8350396156f, -0.8489138484f, -0.8618991971f, -0.8739694357f, + -0.8850591183f, -0.8951326609f, -0.9042174816f, -0.9122928381f, -0.9193425775f, + -0.9253507257f, -0.9303058386f, -0.9341986179f, -0.9370224476f, -0.9387740493f, + -0.9394523501f, -0.9390596747f, -0.9376010895f, -0.9350843430f, -0.9315201044f, + -0.9269216657f, -0.9213048816f, -0.9146882296f, -0.9070926309f, -0.8985413909f, + -0.8890597224f, -0.8786749244f, -0.8674164414f, -0.8553160429f, -0.8424068689f, + -0.8287240267f, -0.8143038750f, -0.7991842628f, -0.7834047079f, -0.7670054436f, + -0.7500280738f, -0.7325149179f, -0.7145089507f, -0.6960543990f, -0.6771950722f, + -0.6579754949f, -0.6384407282f, -0.6186353564f, -0.5986043811f, -0.5783956647f, + 0.5581169724f, 0.5376043320f, 0.5170669556f, 0.4965355098f, 0.4760493934f, + 0.4556491673f, 0.4353731573f, 0.4152592719f, 0.3953450024f, 0.3756662905f, + 0.3562584817f, 0.3371553421f, 0.3183895946f, 0.2999922633f, 0.2819928825f, + 0.2644190788f, 0.2472964972f, 0.2306490242f, 0.2144980878f, 0.1988629252f, + 0.1837607920f, 0.1692063361f, 0.1552118808f, 0.1417868733f, 0.1289390326f, + 0.1166729480f, 0.1049910933f, 0.0938936323f, 0.0833776593f, 0.0734392256f, + 0.0640704259f, 0.0552623831f, 0.0470035598f, 0.0392793566f, 0.0320752300f, + 0.0253704041f, 0.0191462450f, 0.0133753549f, 0.0080275321f, 0.0030762297f, + -0.0012000328f, -0.0047226716f, -0.0078742635f, -0.0106727527f, -0.0131460698f, + -0.0153053077f, -0.0171699896f, -0.0187555570f, -0.0200747978f, -0.0211435594f, + -0.0219731592f, -0.0225773286f, -0.0229687411f, -0.0231592804f, -0.0231627058f, + -0.0229909588f, -0.0226575918f, -0.0221759379f, -0.0215590782f, -0.0208213329f, + -0.0199760906f, -0.0190375410f, -0.0180198960f, -0.0169368219f, -0.0158027392f, + -0.0146312509f, -0.0134359635f, -0.0122305267f, -0.0110275447f, -0.0098399809f, + -0.0086799636f, -0.0075585782f, -0.0064875027f, -0.0054761618f, -0.0045336313f, + -0.0036688452f, -0.0028846052f, -0.0021852630f, -0.0015646699f, -0.0009385595f +}; + + +const float LDQMF_60[] = { + 0.0000953076f, 0.0001230230f, 0.0001279964f, 0.0001260533f, 0.0001211219f, + 0.0001122123f, 0.0001010860f, 0.0000876540f, 0.0000719883f, 0.0000545472f, + 0.0000352143f, 0.0000145686f, -0.0000074264f, -0.0000303788f, -0.0000539205f, + -0.0000782743f, -0.0001028838f, -0.0001275374f, -0.0001520015f, -0.0001760167f, + -0.0001997108f, -0.0002226708f, -0.0002446725f, -0.0002655797f, -0.0002852145f, + -0.0003034996f, -0.0003203036f, -0.0003356283f, -0.0003493345f, -0.0003614030f, + -0.0003719004f, -0.0003807641f, -0.0003881051f, -0.0003939842f, -0.0003985357f, + -0.0004019095f, -0.0004041938f, -0.0004056677f, -0.0004065430f, -0.0004069925f, + -0.0004072535f, -0.0004075877f, -0.0004083676f, -0.0004098394f, -0.0004122990f, + -0.0004160839f, -0.0004214063f, -0.0004285777f, -0.0004378651f, -0.0004495422f, + -0.0004637682f, -0.0004806494f, -0.0005003878f, -0.0005231378f, -0.0005489803f, + -0.0005777747f, -0.0006095612f, -0.0006443121f, -0.0006813223f, -0.0007226231f, + -0.0007722576f, -0.0008268412f, -0.0008839625f, -0.0009417336f, -0.0010004630f, + -0.0010601623f, -0.0011206097f, -0.0011817788f, -0.0012432419f, -0.0013045983f, + -0.0013656860f, -0.0014260965f, -0.0014855355f, -0.0015435946f, -0.0015999591f, + -0.0016543545f, -0.0017062968f, -0.0017554691f, -0.0018015467f, -0.0018441341f, + -0.0018829798f, -0.0019177221f, -0.0019480695f, -0.0019736972f, -0.0019943134f, + -0.0020097434f, -0.0020197174f, -0.0020240925f, -0.0020226294f, -0.0020152442f, + -0.0020017736f, -0.0019820682f, -0.0019561697f, -0.0019240153f, -0.0018855907f, + -0.0018409232f, -0.0017900462f, -0.0017330211f, -0.0016699535f, -0.0016009507f, + -0.0015261442f, -0.0014456788f, -0.0013597424f, -0.0012685407f, -0.0011722331f, + -0.0010710671f, -0.0009652392f, -0.0008549765f, -0.0007405236f, -0.0006221444f, + -0.0005001140f, -0.0003745670f, -0.0002458634f, -0.0001142541f, 0.0000199491f, + 0.0001564174f, 0.0002949402f, 0.0004350246f, 0.0005769439f, 0.0007203126f, + -0.0008803223f, -0.0010328424f, -0.0011841310f, -0.0013346316f, -0.0014848098f, + -0.0016343417f, -0.0017832819f, -0.0019316213f, -0.0020790498f, -0.0022252349f, + -0.0023701149f, -0.0025136294f, -0.0026556554f, -0.0027960713f, -0.0029348312f, + -0.0030717771f, -0.0032068293f, -0.0033399195f, -0.0034709862f, -0.0035999804f, + -0.0037267797f, -0.0038513308f, -0.0039736414f, -0.0040935921f, -0.0042111278f, + -0.0043262239f, -0.0044388464f, -0.0045489701f, -0.0046565188f, -0.0047614835f, + -0.0048637423f, -0.0049632201f, -0.0050599808f, -0.0051539382f, -0.0052450863f, + -0.0053333500f, -0.0054187514f, -0.0055012843f, -0.0055808770f, -0.0056575472f, + -0.0057313135f, -0.0058021732f, -0.0058701355f, -0.0059352517f, -0.0059975707f, + -0.0060571772f, -0.0061141332f, -0.0061685541f, -0.0062205540f, -0.0062703062f, + -0.0063179093f, -0.0063635921f, -0.0064075105f, -0.0064498796f, -0.0064908965f, + -0.0065308069f, -0.0065698619f, -0.0066083665f, -0.0066466411f, -0.0066849431f, + -0.0067233290f, -0.0067621553f, -0.0068021296f, -0.0068436749f, -0.0068870094f, + -0.0069324085f, -0.0069801519f, -0.0070305937f, -0.0070840055f, -0.0071406048f, + -0.0072006541f, -0.0072644479f, -0.0073321410f, -0.0074039386f, -0.0074799177f, + -0.0075602704f, -0.0076450342f, -0.0077342330f, -0.0078278277f, -0.0079257628f, + -0.0080279401f, -0.0081341872f, -0.0082442267f, -0.0083577875f, -0.0084744738f, + -0.0085938899f, -0.0087156557f, -0.0088391500f, -0.0089637861f, -0.0090888245f, + -0.0092134504f, -0.0093367994f, -0.0094579896f, -0.0095760096f, -0.0096898535f, + -0.0097982995f, -0.0099003557f, -0.0099947909f, -0.0100801717f, -0.0101551116f, + -0.0102182031f, -0.0102678994f, -0.0103026126f, -0.0103207529f, -0.0103206923f, + -0.0103006857f, -0.0102590285f, -0.0101939747f, -0.0101036867f, -0.0099863587f, + -0.0098401112f, -0.0096632261f, -0.0094537362f, -0.0092098210f, -0.0089295702f, + -0.0086111929f, -0.0082527259f, -0.0078523541f, -0.0074084769f, -0.0069190590f, + 0.0063841688f, 0.0057985946f, 0.0051621343f, 0.0044734711f, 0.0037309236f, + 0.0029329660f, 0.0020781513f, 0.0011651339f, 0.0001925042f, -0.0008409545f, + -0.0019364181f, -0.0030950012f, -0.0043176264f, -0.0056051607f, -0.0069584334f, + -0.0083780792f, -0.0098646237f, -0.0114185056f, -0.0130400723f, -0.0147295250f, + -0.0164868534f, -0.0183120724f, -0.0202049762f, -0.0221651513f, -0.0241921283f, + -0.0262852497f, -0.0284437388f, -0.0306666382f, -0.0329528190f, -0.0353010744f, + -0.0377098918f, -0.0401776619f, -0.0427025780f, -0.0452826768f, -0.0479161367f, + -0.0506004691f, -0.0533332452f, -0.0561118126f, -0.0589331910f, -0.0617944039f, + -0.0646922663f, -0.0676232576f, -0.0705836788f, -0.0735698044f, -0.0765774846f, + -0.0796026587f, -0.0826408863f, -0.0856874809f, -0.0887378305f, -0.0917868018f, + -0.0948293805f, -0.0978601947f, -0.1008738130f, -0.1038645208f, -0.1068264544f, + -0.1097536832f, -0.1126400903f, -0.1154794544f, -0.1182654947f, -0.1209914312f, + -0.1236500666f, -0.1262341589f, -0.1287376434f, -0.1311538219f, -0.1334753036f, + -0.1356947273f, -0.1378047168f, -0.1397978216f, -0.1416664869f, -0.1434033662f, + -0.1450008005f, -0.1464512348f, -0.1477471888f, -0.1488809884f, -0.1498452872f, + -0.1506324410f, -0.1512351334f, -0.1516460329f, -0.1518578976f, -0.1518635303f, + -0.1516559124f, -0.1512281001f, -0.1505732536f, -0.1496847868f, -0.1485562176f, + -0.1471813470f, -0.1455538720f, -0.1436681300f, -0.1415183097f, -0.1390990764f, + -0.1364052594f, -0.1334318966f, -0.1301742792f, -0.1266280264f, -0.1227891371f, + -0.1186537445f, -0.1142183766f, -0.1094799563f, -0.1044355705f, -0.0990828425f, + -0.0934195668f, -0.0874440819f, -0.0811550021f, -0.0745511875f, -0.0676321834f, + -0.0603975877f, -0.0528475679f, -0.0449828543f, -0.0368040986f, -0.0283128861f, + -0.0195108838f, -0.0104003223f, -0.0009837818f, 0.0087356847f, 0.0187546927f, + 0.0290693250f, 0.0396753438f, 0.0505682528f, 0.0617432520f, 0.0731955394f, + -0.0849232078f, -0.0969054326f, -0.1091460735f, -0.1216373071f, -0.1343720406f, + -0.1473424733f, -0.1605402082f, -0.1739567965f, -0.1875831038f, -0.2014097124f, + -0.2154271752f, -0.2296251506f, -0.2439934313f, -0.2585212290f, -0.2731975317f, + -0.2880111337f, -0.3029502928f, -0.3180032372f, -0.3331578076f, -0.3484017253f, + -0.3637222052f, -0.3791064322f, -0.3945416212f, -0.4100143015f, -0.4255111217f, + -0.4410185516f, -0.4565227628f, -0.4720100164f, -0.4874662757f, -0.5028775334f, + -0.5182296634f, -0.5335084200f, -0.5486994982f, -0.5637886524f, -0.5787616372f, + -0.5936041474f, -0.6083019376f, -0.6228409410f, -0.6372069120f, -0.6513859630f, + -0.6653640866f, -0.6791275144f, -0.6926627755f, -0.7059561610f, -0.7189947963f, + -0.7317654490f, -0.7442554235f, -0.7564523220f, -0.7683438063f, -0.7799182534f, + -0.7911639810f, -0.8020697832f, -0.8126249313f, -0.8228194118f, -0.8326428533f, + -0.8420860767f, -0.8511404991f, -0.8597975969f, -0.8680517077f, -0.8758881092f, + -0.8832823634f, -0.8902196884f, -0.8967157602f, -0.9027729034f, -0.9083824754f, + -0.9135394692f, -0.9182395935f, -0.9224776030f, -0.9262499809f, -0.9295535684f, + -0.9323854446f, -0.9347436428f, -0.9366261959f, -0.9380323887f, -0.9389615655f, + -0.9394137263f, -0.9393896461f, -0.9388904572f, -0.9379178882f, -0.9364743829f, + -0.9345626831f, -0.9321863055f, -0.9293491840f, -0.9260557890f, -0.9223110080f, + -0.9181203246f, -0.9134896994f, -0.9084255695f, -0.9029349089f, -0.8970250487f, + -0.8907034993f, -0.8839784265f, -0.8768582940f, -0.8693521619f, -0.8614694476f, + -0.8532197475f, -0.8446131349f, -0.8356599212f, -0.8263708353f, -0.8167568445f, + -0.8068289757f, -0.7965991497f, -0.7860788107f, -0.7752800584f, -0.7642148733f, + -0.7528960109f, -0.7413358092f, -0.7295469642f, -0.7175422311f, -0.7053351402f, + -0.6929380894f, -0.6803644896f, -0.6676273942f, -0.6547405124f, -0.6417166591f, + -0.6285686493f, -0.6153115034f, -0.6019562483f, -0.5885198116f, -0.5750215650f, + 0.5615197420f, 0.5478612781f, 0.5341838002f, 0.5204906464f, 0.5067980289f, + 0.4931168854f, 0.4794588387f, 0.4658361673f, 0.4522601366f, 0.4387422502f, + 0.4252935350f, 0.4119254053f, 0.3986486793f, 0.3854739666f, 0.3724119067f, + 0.3594728410f, 0.3466667533f, 0.3340034485f, 0.3214924335f, 0.3091430366f, + 0.2969639599f, 0.2849639654f, 0.2731511295f, 0.2615332901f, 0.2501178682f, + 0.2389119864f, 0.2279221565f, 0.2171545923f, 0.2066148520f, 0.1963084787f, + 0.1862401515f, 0.1764142811f, 0.1668347418f, 0.1575049609f, 0.1484276950f, + 0.1396053135f, 0.1310400218f, 0.1227331311f, 0.1146853194f, 0.1068974212f, + 0.0993694067f, 0.0921007246f, 0.0850901082f, 0.0783365741f, 0.0718384907f, + 0.0655927584f, 0.0595967993f, 0.0538481586f, 0.0483424664f, 0.0430756323f, + 0.0380428955f, 0.0332404599f, 0.0286619961f, 0.0242999699f, 0.0201510899f, + 0.0162059069f, 0.0124559226f, 0.0088928537f, 0.0054926532f, 0.0023052765f, + -0.0005515143f, -0.0030201224f, -0.0052712574f, -0.0073737046f, -0.0093160523f, + -0.0111072771f, -0.0127562135f, -0.0142635731f, -0.0156361461f, -0.0168790054f, + -0.0179969221f, -0.0189934950f, -0.0198726747f, -0.0206398536f, -0.0212980714f, + -0.0218509119f, -0.0223025978f, -0.0226570386f, -0.0229178313f, -0.0230882075f, + -0.0231725387f, -0.0231746566f, -0.0230979007f, -0.0229462404f, -0.0227237809f, + -0.0224345829f, -0.0220820960f, -0.0216706358f, -0.0212045144f, -0.0206875466f, + -0.0201238506f, -0.0195175279f, -0.0188730918f, -0.0181944817f, -0.0174855441f, + -0.0167510118f, -0.0159947462f, -0.0152208358f, -0.0144332750f, -0.0136361914f, + -0.0128338682f, -0.0120294262f, -0.0112272501f, -0.0104311826f, -0.0096443929f, + -0.0088709844f, -0.0081134979f, -0.0073764324f, -0.0066623385f, -0.0059733889f, + -0.0053142183f, -0.0046856776f, -0.0040914025f, -0.0035321070f, -0.0030089030f, + -0.0025271603f, -0.0020749648f, -0.0016621647f, -0.0012705614f, -0.0008115423f +}; + +const float rot_vec_delay_re_LDQMF[60] = +{ +-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, +0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, +0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, +-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, +-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, +0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, +0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, +-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, +-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, +0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, +0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, +-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f +}; + +const float rot_vec_delay_im_LDQMF[60] = +{ +-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, +-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, +0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, +0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, +-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, +-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, +0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, +0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, +-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, +-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, +0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, +0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f +}; + +const float rot_vec_ana_re_L10[5] = +{ + 2.8262465099f,2.6536058227f,2.2212117088f,1.5713899168f,0.7677495312f, +}; + +const float rot_vec_ana_im_L10[5] = +{ + -0.1110435278f,-0.9789668726f,-1.7510621190f,-2.3517512048f,-2.7222344971f, +}; + +const float rot_vec_ana_re_L16[8] = +{ + 2.2353945156f,2.1817362886f,2.0442351594f,1.8281752196f,1.5418595313f,1.1962910459f, + 0.8047497665f,0.3822824048f, +}; + +const float rot_vec_ana_im_L16[8] = +{ + -0.0548758552f,-0.4899252669f,-0.9061471254f,-1.2875462580f,-1.6194657100f,-1.8891500029f, + -2.0862353207f,-2.2031477851f, +}; + +const float rot_vec_ana_re_L20[10] = +{ + 1.9996144810f,1.9688531362f,1.8896120929f,1.7638425287f,1.5946413075f,1.3861747251f, + 1.1435759205f,0.8728184813f,0.5805693545f,0.2740246834f, +}; + +const float rot_vec_ana_im_L20[10] = +{ + -0.0392673849f,-0.3515925599f,-0.6552603591f,-0.9427934737f,-1.2071118839f,-1.4417071934f, + -1.6408028871f,-1.7994965681f,-1.9138806715f,-1.9811386809f, +}; + +const float rot_vec_ana_re_L30[15] = +{ + 1.6328532594f,1.6216739995f,1.5927273399f,1.5463304262f,1.4829915928f,1.4034047932f, + 1.3084419970f,1.1991436365f,1.0767072074f,0.9424741487f,0.7979151461f,0.6446140182f, + 0.4842503641f,0.3185811618f,0.1494215176f, +}; + +const float rot_vec_ana_im_L30[15] = +{ + -0.0213752201f,-0.1919377663f,-0.3603974022f,-0.5249084488f,-0.6836684885f,-0.8349381133f, + -0.9770599813f,-1.1084769757f,-1.2277492644f,-1.3335700753f,-1.4247800133f,-1.5003797633f, + -1.5595410387f,-1.6016156561f,-1.6261426373f, +}; + +const float rot_vec_ana_re_L32[16] = +{ + 1.5810197732f,1.5715049038f,1.5468555830f,1.5073091974f,1.4532466002f,1.3851884438f, + 1.3037901655f,1.2098356752f,1.1042298059f,0.9879896000f,0.8622345142f,0.7281756387f, + 0.5871040336f,0.4403782958f,0.2894114743f,0.1356574621f, +}; + +const float rot_vec_ana_im_L32[16] = +{ + -0.0194030057f,-0.1742766119f,-0.3274718390f,-0.4775133334f,-0.6229561133f,-0.7623994853f, + -0.8945005334f,-1.0179870525f,-1.1316697997f,-1.2344539482f,-1.3253496303f,-1.4034814709f, + -1.4680970178f,-1.5185739878f,-1.5544262602f,-1.5753085580f, +}; + +const float rot_vec_ana_re_L40[20] = +{ + 1.4141454099f,1.4086967623f,1.3945630307f,1.3718313542f,1.3406418813f,1.3011869053f, + 1.2537096794f,1.1985029164f,1.1359069844f,1.0663078081f,0.9901344896f,0.9078566627f, + 0.8199815976f,0.7270510733f,0.6296380373f,0.5283430735f,0.4237906989f,0.3166255137f, + 0.2075082270f,0.0971115830f, +}; + +const float rot_vec_ana_im_L40[20] = +{ + -0.0138837862f,-0.1247935572f,-0.2349339344f,-0.3436258658f,-0.4501992295f,-0.5539969652f, + -0.6543791254f,-0.7507268207f,-0.8424460355f,-0.9289712904f,-1.0097691283f,-1.0843414038f, + -1.1522283539f,-1.2130114331f,-1.2663158934f,-1.3118130952f,-1.3492225330f,-1.3783135652f, + -1.3989068360f,-1.4108753809f, +}; + +const float rot_vec_ana_re_L60[30] = +{ + 1.1546758066f,1.1526978375f,1.1475604038f,1.1392775867f,1.1278720890f,1.1133751723f, + 1.0958265716f,1.0752743865f,1.0517749490f,1.0253926695f,0.9961998600f,0.9642765358f, + 0.9297101968f,0.8925955867f,0.8530344341f,0.8111351735f,0.7670126477f,0.7207877935f, + 0.6725873102f,0.6225433117f,0.5707929653f,0.5174781151f,0.4627448933f,0.4067433200f, + 0.3496268915f,0.2915521599f,0.2326783042f,0.1731666934f,0.1131804447f,0.0528839763f, +}; + +const float rot_vec_ana_im_L60[30] = +{ + -0.0075574434f,-0.0679781487f,-0.1282125306f,-0.1880954908f,-0.2474628944f,-0.3061520194f, + -0.3640020030f,-0.4208542824f,-0.4765530295f,-0.5309455779f,-0.5838828413f,-0.6352197224f, + -0.6848155104f,-0.7325342668f,-0.7782451976f,-0.8218230124f,-0.8631482675f,-0.9021076931f, + -0.9385945043f,-0.9725086932f,-1.0037573034f,-1.0322546845f,-1.0579227273f,-1.0806910775f, + -1.1004973285f,-1.1172871929f,-1.1310146507f,-1.1416420760f,-1.1491403397f,-1.1534888896f, +}; + + + +const float rot_vec_syn_re_L10[5] = +{ + 0.1117172025f,0.1048929802f,0.0878011021f,0.0621146404f,0.0303479649f, +}; + +const float rot_vec_syn_im_L10[5] = +{ + -0.0043893808f,-0.0386970634f,-0.0692168078f,-0.0929611287f,-0.1076057667f, +}; + +const float rot_vec_syn_re_L16[8] = +{ + 0.1117697258f,0.1090868144f,0.1022117580f,0.0914087610f,0.0770929766f,0.0598145523f, + 0.0402374883f,0.0191141202f, +}; + +const float rot_vec_syn_im_L16[8] = +{ + -0.0027437928f,-0.0244962633f,-0.0453073563f,-0.0643773129f,-0.0809732855f,-0.0944575001f, + -0.1043117660f,-0.1101573893f, +}; + +const float rot_vec_syn_re_L20[10] = +{ + 0.1117818477f,0.1100622363f,0.1056325273f,0.0986017949f,0.0891431591f,0.0774895228f, + 0.0639278374f,0.0487920364f,0.0324548136f,0.0153184455f, +}; + +const float rot_vec_syn_im_L20[10] = +{ + -0.0021951135f,-0.0196546216f,-0.0366301676f,-0.0527037574f,-0.0674796057f,-0.0805938822f, + -0.0917236698f,-0.1005949163f,-0.1069891821f,-0.1107490191f, +}; + +const float rot_vec_syn_re_L30[15] = +{ + 0.1117938204f,0.1110284288f,0.1090465865f,0.1058700070f,0.1015334935f,0.0960845578f, + 0.0895828996f,0.0820997524f,0.0737171032f,0.0645267939f,0.0546295156f,0.0441337048f, + 0.0331543560f,0.0218117611f,0.0102301920f, +}; + +const float rot_vec_syn_im_L30[15] = +{ + -0.0014634613f,-0.0131410805f,-0.0246747234f,-0.0359380248f,-0.0468075816f,-0.0571643048f, + -0.0668947240f,-0.0758922305f,-0.0840582459f,-0.0913033015f,-0.0975480191f,-0.1027239802f, + -0.1067744758f,-0.1096551279f,-0.1113343755f, +}; + +const float rot_vec_syn_re_L32[16] = +{ + 0.1117949803f,0.1111221774f,0.1093792072f,0.1065828555f,0.1027600526f,0.0979476142f, + 0.0921918867f,0.0855483010f,0.0780808384f,0.0698614146f,0.0609691872f,0.0514897932f, + 0.0415145243f,0.0311394479f,0.0204644816f,0.0095924311f, +}; + +const float rot_vec_syn_im_L32[16] = +{ + -0.0013719997f,-0.0123232174f,-0.0231557558f,-0.0337652916f,-0.0440496492f,-0.0539097846f, + -0.0632507393f,-0.0719825548f,-0.0800211389f,-0.0872890758f,-0.0937163711f,-0.0992411265f, + -0.1038101357f,-0.1073793965f,-0.1099145349f,-0.1113911364f, +}; + +const float rot_vec_syn_re_L40[20] = +{ + 0.1117980110f,0.1113672575f,0.1102498879f,0.1084527911f,0.1059870468f,0.1028678571f, + 0.0991144528f,0.0947499750f,0.0898013320f,0.0842990340f,0.0782770044f,0.0717723711f, + 0.0648252372f,0.0574784342f,0.0497772575f,0.0417691875f,0.0335035965f,0.0250314447f, + 0.0164049658f,0.0076773447f, +}; + +const float rot_vec_syn_im_L40[20] = +{ + -0.0010976097f,-0.0098657969f,-0.0185731583f,-0.0271660100f,-0.0355913742f,-0.0437973057f, + -0.0517332122f,-0.0593501664f,-0.0666012069f,-0.0734416290f,-0.0798292589f,-0.0857247149f, + -0.0910916496f,-0.0958969739f,-0.1001110615f,-0.1037079311f,-0.1066654069f,-0.1089652549f, + -0.1105932959f,-0.1115394925f, +}; + +const float rot_vec_syn_re_L60[30] = +{ + 0.1118010042f,0.1116094882f,0.1111120583f,0.1103100780f,0.1092057454f,0.1078020875f, + 0.1061029516f,0.1041129948f,0.1018376715f,0.0992832183f,0.0964566367f,0.0933656741f, + 0.0900188027f,0.0864251961f,0.0825947039f,0.0785378255f,0.0742656803f,0.0697899780f, + 0.0651229863f,0.0602774970f,0.0552667912f,0.0501046030f,0.0448050816f,0.0393827526f, + 0.0338524782f,0.0282294165f,0.0225289799f,0.0167667930f,0.0109586494f,0.0051204690f, +}; + +const float rot_vec_syn_im_L60[30] = +{ + -0.0007317463f,-0.0065819559f,-0.0124141249f,-0.0182122676f,-0.0239604917f,-0.0296430418f, + -0.0352443424f,-0.0407490407f,-0.0461420487f,-0.0514085845f,-0.0565342130f,-0.0615048852f, + -0.0663069767f,-0.0709273254f,-0.0753532672f,-0.0795726710f,-0.0835739716f,-0.0873462018f, + -0.0908790221f,-0.0941627493f,-0.0971883830f,-0.0999476301f,-0.1024329276f,-0.1046374636f, + -0.1065551956f,-0.1081808673f,-0.1095100227f,-0.1105390187f,-0.1112650350f,-0.1116860815f, +}; + + +const float bpf_weights_16[CLDFB_NO_COL_MAX] = +{ + 1.000040f, 0.702561f, 0.208838f, 0.001553f, 0.001777f, 0.001370f, 0.000926f, 0.000554f, + 0.000270f, 0.000080f, 0.000030f, 0.000082f, 0.000081f, 0.000052f, 0.000017f, 0.000016f +}; + +/*-------------------------------------------------------------------* + * LP CNG excitation details code book + *-------------------------------------------------------------------*/ + +const float CNG_details_codebook[64][NUM_ENV_CNG]= +{ + { + 6.924306f,8.544082f,9.583108f,8.550549f,7.972679f,7.363361f,8.439027f,7.487016f, + 9.149983f,8.352748f,8.823824f,9.544188f,8.314853f,7.809112f,7.218567f,8.612295f, + 7.780142f,7.232745f,6.965988f,7.568601f + }, + { + 9.374340f,7.795641f,7.379285f,8.396346f,9.895033f,10.221931f,10.015446f,10.087706f, + 10.536375f,10.581183f,10.733459f,10.821303f,10.822197f,10.777159f,10.746262f,10.936824f, + 10.820635f,10.881506f,9.992537f,8.925898f + }, + { + 8.260058f,8.387338f,7.832300f,9.092162f,8.387571f,7.401807f,7.888559f,7.678440f, + 8.136854f,8.515383f,8.772667f,9.228788f,8.836490f,9.518608f,8.908790f,9.499302f, + 9.932305f,10.237994f,10.133189f,8.193151f + }, + { + 10.124639f,10.788106f,10.767182f,10.692019f,10.830482f,9.359397f,10.431694f,11.161179f, + 10.356518f,10.541230f,8.185465f,8.116880f,11.338371f,10.284152f,10.511218f,10.880645f, + 10.220743f,11.179196f,11.066867f,10.445066f + }, + { + 9.726912f,9.842380f,10.314793f,10.252558f,10.717097f,10.746290f,9.953682f,10.412869f, + 9.836176f,8.674436f,7.351096f,7.309156f,7.246638f,6.955070f,7.846981f,9.111964f, + 9.612611f,8.519944f,9.454450f,9.249232f + }, + { + 10.298511f,10.439103f,10.451839f,9.763371f,10.337607f,10.939195f,10.938910f,10.824776f, + 10.976114f,10.974276f,10.754051f,10.581675f,10.222703f,9.126027f,8.198234f,7.695039f, + 6.968823f,7.457246f,9.904172f,9.612813f + }, + { + 9.908430f,10.124971f,10.253873f,8.625096f,8.128853f,8.701863f,10.346726f,10.291558f, + 8.935132f,9.638033f,10.793781f,10.670537f,10.681151f,10.410478f,10.512748f,10.861156f, + 10.653567f,10.911621f,10.629312f,9.736268f + }, + { + 11.810060f,11.612185f,11.468822f,11.083865f,11.406177f,11.832067f,11.661546f,11.277926f, + 7.555347f,8.622866f,12.176802f,10.751250f,10.721958f,9.523929f,9.626828f,11.701570f, + 11.848139f,10.849975f,11.640839f,11.392167f + }, + { + 8.572747f,8.869074f,8.680323f,9.760900f,10.671435f,9.673125f,9.516179f,10.428748f, + 10.353197f,10.692994f,11.081258f,10.146167f,10.790188f,10.432859f,9.273769f,7.979839f, + 8.209611f,9.644866f,8.476103f,10.683167f + }, + { + 8.595222f,7.301031f,8.322734f,11.874195f,11.543133f,10.814659f,12.073861f,11.818481f, + 11.602201f,12.035087f,11.952577f,12.363761f,12.167592f,12.254158f,12.108662f,12.373547f, + 11.860260f,9.014181f,10.036099f,8.638621f + }, + { + 10.275646f,10.526311f,10.252750f,10.178793f,10.466885f,9.088381f,9.273152f,8.119694f, + 7.295121f,7.350810f,8.158489f,9.209213f,9.370357f,9.310070f,9.168746f,9.856857f, + 10.187559f,10.613888f,10.080095f,10.451872f + }, + { + 12.318529f,11.945473f,12.303066f,12.451133f,12.272326f,12.478561f,12.303981f,12.279855f, + 12.189694f,10.818603f,10.013278f,8.600300f,7.832378f,8.014066f,11.346451f,11.673646f, + 10.466306f,10.728513f,11.475281f,12.085626f + }, + { + 10.014422f,10.218554f,10.442979f,10.508470f,10.393559f,10.661362f,10.757983f,10.689740f, + 10.897243f,10.382886f,10.379339f,9.271018f,8.495484f,7.720114f,7.161139f,8.396199f, + 9.721141f,10.159747f,9.918998f,9.919149f + }, + { + 11.034192f,11.766760f,11.903868f,11.195253f,11.683506f,11.900399f,12.318353f,12.368064f, + 12.271189f,12.306809f,12.485785f,12.136335f,12.220796f,11.960956f,11.879458f,11.099092f, + 11.004694f,7.854421f,8.103326f,11.485018f + }, + { + 11.692872f,12.115354f,12.250820f,9.919422f,11.204221f,7.870928f,8.415102f,9.997985f, + 11.942008f,12.149603f,10.633919f,11.269428f,12.354749f,12.288899f,12.291698f,12.195188f, + 12.179792f,12.030136f,12.092098f,12.207270f + }, + { + 11.755179f,8.064263f,9.749080f,12.185180f,11.136729f,11.763196f,8.889953f,8.555951f, + 12.034410f,12.245128f,11.697193f,11.559429f,10.780444f,11.789196f,12.130393f,11.689948f, + 11.623942f,11.399507f,11.981954f,10.904933f + }, + { + 7.074471f,7.358261f,8.067513f,8.080610f,8.765159f,10.199254f,10.289200f,9.618623f, + 9.822992f,9.500810f,10.655619f,10.906424f,10.611357f,10.641397f,10.077725f,9.173571f, + 9.274541f,8.160206f,7.797956f,7.321218f + }, + { + 9.641497f,8.341463f,7.913689f,9.615902f,12.212582f,12.373892f,11.788377f,12.044415f, + 11.569188f,12.302634f,12.361569f,12.119579f,12.223657f,12.303328f,12.384604f,12.306796f, + 12.109153f,12.154896f,10.165297f,11.492375f + }, + { + 10.334753f,9.264669f,7.656600f,7.729103f,7.665664f,7.728192f,8.657525f,10.255910f, + 10.287778f,9.540968f,9.808374f,10.307826f,10.623036f,10.579712f,10.909159f,10.597071f, + 10.508566f,10.917792f,10.740663f,10.609496f + }, + { + 12.464439f,12.387059f,12.281745f,12.415715f,12.481938f,12.064619f,12.051270f,10.871007f, + 9.753584f,8.710700f,7.918756f,8.510613f,11.316961f,11.829647f,11.667075f,12.037048f, + 12.184728f,12.269155f,12.388278f,12.256269f + }, + { + 10.985455f,10.863164f,10.984641f,11.150430f,10.892216f,10.949295f,10.885633f,9.861358f, + 9.347205f,7.782274f,7.420996f,7.042737f,7.859407f,9.545682f,10.120652f,10.378402f, + 10.381286f,10.677829f,10.603589f,10.744861f + }, + { + 11.619549f,10.501878f,10.291579f,11.911536f,12.263100f,11.638079f,11.827111f,11.886570f, + 11.885740f,11.982909f,11.279054f,11.820845f,11.897547f,11.508306f,10.922131f,7.355962f, + 9.090330f,12.035433f,11.309077f,11.814055f + }, + { + 12.109969f,11.648486f,8.360036f,10.628968f,8.450899f,8.016151f,10.885192f,11.289871f, + 11.616718f,11.618735f,12.016033f,11.572757f,11.580486f,11.526383f,12.019007f,12.063487f, + 12.178980f,11.612581f,11.149741f,11.315678f + }, + { + 11.982289f,12.039945f,10.895576f,11.808078f,11.972691f,11.752888f,11.100145f,7.459962f, + 9.401170f,12.240148f,11.661579f,11.968470f,10.817088f,11.060538f,12.236608f,12.217974f, + 11.888335f,12.158744f,12.290771f,12.263520f + }, + { + 7.551557f,9.193432f,10.939713f,10.390559f,10.388751f,10.007786f,10.151727f,11.200849f, + 10.927567f,11.044189f,10.805322f,10.912845f,10.931647f,10.806228f,10.434938f,10.151430f, + 9.517872f,9.532900f,8.436217f,7.561033f + }, + { + 7.914798f,9.662442f,12.315506f,11.969525f,11.779161f,10.819254f,11.074059f,12.259423f, + 12.310757f,12.028122f,12.393316f,12.259255f,12.478424f,12.251179f,11.982938f,12.119265f, + 12.321500f,11.854281f,11.885189f,7.733390f + }, + { + 11.074573f,11.119295f,11.026623f,10.587306f,10.326489f,9.440902f,7.861374f,7.502906f, + 10.206084f,10.379787f,10.375632f,9.986627f,9.698876f,10.544230f,10.857472f,10.772952f, + 11.004036f,10.641294f,11.111090f,11.084974f + }, + { + 12.312282f,11.569094f,12.027453f,11.997540f,12.050622f,12.124397f,11.441438f,11.697535f, + 11.553439f,11.941341f,11.153276f,7.695126f,8.494260f,12.226931f,11.163250f,11.056936f, + 11.197067f,8.736544f,11.552220f,11.995921f + }, + { + 11.841222f,12.040383f,12.323356f,12.164479f,12.146215f,12.485503f,12.354469f,12.261094f, + 12.176959f,12.164176f,11.750998f,10.552405f,11.221596f,7.971972f,7.827245f,9.382548f, + 11.354092f,11.724841f,11.744237f,11.836000f + }, + { + 11.863342f,11.946292f,10.565049f,10.276701f,12.088562f,11.987997f,11.516201f,11.701505f, + 12.013391f,12.254663f,12.160517f,11.530292f,11.789889f,12.011831f,12.307916f,11.817711f, + 7.388736f,8.277118f,12.146955f,11.330376f + }, + { + 10.445749f,10.383992f,11.260086f,10.207924f,7.801878f,12.093586f,12.186577f,12.208809f, + 11.981275f,8.760727f,10.776209f,11.675901f,11.273578f,12.169944f,11.829489f,11.361869f, + 11.931891f,11.640718f,12.033961f,11.504183f + }, + { + 11.418176f,11.996329f,11.634505f,12.108740f,12.232028f,12.223016f,11.168437f,11.585357f, + 12.287769f,10.519855f,11.961341f,12.135221f,11.941004f,11.400546f,12.083041f,12.021441f, + 12.087834f,12.196712f,12.153121f,11.933741f + }, + { + 8.696248f,7.886807f,8.518339f,9.431623f,10.314435f,10.492967f,9.433606f,9.312992f, + 9.056099f,9.558634f,9.174564f,8.692657f,8.529263f,9.327991f,8.283659f,7.715106f, + 6.828506f,7.494133f,8.531253f,8.664100f + }, + { + 8.749990f,9.185427f,7.974370f,7.730459f,9.471635f,11.246136f,11.225875f,11.585999f, + 11.810496f,11.799830f,11.983171f,12.095557f,12.123705f,12.150494f,12.057273f,12.058468f, + 12.128398f,12.119547f,11.788305f,9.252466f + }, + { + 10.620537f,10.064924f,9.681692f,9.556549f,8.067345f,7.460412f,7.355683f,7.793144f, + 7.842898f,9.346528f,10.380497f,9.183150f,10.255505f,10.654870f,10.772358f,10.480097f, + 10.444176f,10.506150f,10.650716f,10.807790f + }, + { + 11.832230f,12.163531f,12.210456f,12.488221f,12.106194f,11.716965f,12.486103f,11.839725f, + 12.333147f,12.101274f,7.643279f,9.040410f,12.480962f,11.550027f,12.089822f,11.299880f, + 10.714154f,12.309387f,12.290308f,12.153176f + }, + { + 11.011459f,10.708299f,10.217109f,10.618895f,10.503453f,10.618390f,10.261137f,9.054105f, + 8.967848f,9.665904f,9.986521f,8.089101f,7.524849f,8.521540f,10.395278f,9.179631f, + 8.431019f,9.362102f,9.471244f,10.168259f + }, + { + 11.385670f,11.988930f,11.979943f,12.082343f,12.240467f,12.163774f,12.389517f,12.076717f, + 12.254186f,12.165658f,11.824725f,11.992508f,10.716744f,10.217215f,10.610125f,8.819359f, + 7.553169f,8.576138f,7.663194f,8.161689f + }, + { + 11.335433f,10.824145f,11.164507f,9.187079f,8.159495f,9.823243f,11.259155f,10.102992f, + 10.894949f,10.692467f,9.597807f,11.322961f,11.068228f,10.523948f,11.179681f,11.389847f, + 11.204894f,11.328845f,10.761085f,11.533332f + }, + { + 12.452473f,12.226961f,12.414132f,12.453005f,12.224496f,11.829764f,9.932276f,9.747059f, + 7.944996f,8.074952f,10.982581f,11.711254f,11.656355f,11.826878f,12.063810f,12.048336f, + 12.100821f,12.339723f,12.171370f,12.491159f + }, + { + 8.693851f,9.237082f,10.193584f,10.816728f,11.382530f,11.124274f,10.905251f,10.747824f, + 11.006325f,11.224193f,11.377479f,11.195903f,11.132830f,10.824033f,11.188758f,8.716391f, + 7.654446f,8.441257f,9.691014f,10.598401f + }, + { + 8.319717f,9.639095f,12.133827f,12.102556f,11.919735f,12.334815f,11.993119f,12.259864f, + 12.158967f,12.356464f,12.374672f,12.379640f,12.396713f,12.146963f,12.203291f,11.311678f, + 8.605060f,10.391322f,8.431939f,7.948593f + }, + { + 11.088415f,10.884553f,11.032227f,11.202397f,10.523194f,10.606202f,9.688022f,9.082882f, + 8.526981f,7.401042f,8.779226f,10.680804f,10.619134f,10.539470f,10.309608f,10.253415f, + 10.965061f,10.624226f,10.946682f,11.063556f + }, + { + 12.049884f,12.395158f,12.315166f,12.298508f,12.409452f,12.353070f,12.369121f,12.232027f, + 12.363715f,12.371237f,11.460312f,12.028971f,8.312684f,8.200596f,10.810326f,11.885057f, + 12.140730f,11.769361f,11.470847f,11.374696f + }, + { + 11.318600f,10.855831f,10.592196f,10.190356f,10.852498f,11.480312f,10.896217f,11.130247f, + 11.148643f,11.272378f,10.871895f,11.095495f,8.893303f,9.083083f,8.899607f,8.150163f, + 10.035096f,11.004933f,11.685496f,11.349737f + }, + { + 12.437282f,11.779876f,12.273005f,12.224300f,11.436580f,12.714269f,12.546281f,12.410135f, + 12.488817f,12.347595f,12.661417f,12.587544f,12.405058f,12.452996f,11.808998f,11.644467f, + 11.697278f,7.908151f,11.580981f,12.178329f + }, + { + 12.383582f,11.978909f,12.263449f,12.181010f,11.308676f,10.129762f,7.630591f,11.672964f, + 12.255041f,12.043112f,12.393015f,11.554902f,11.858689f,12.585340f,12.405621f,12.438987f, + 12.422440f,12.429326f,12.518377f,12.596020f + }, + { + 12.294228f,7.930717f,10.000073f,12.115003f,11.276157f,12.374399f,12.087711f,11.020492f, + 12.205840f,12.519583f,12.094537f,12.497026f,12.274739f,12.595242f,12.627252f,12.238583f, + 12.414072f,12.458577f,12.250254f,12.212063f + }, + { + 10.220644f,10.133038f,9.384470f,9.330061f,9.287414f,10.419335f,10.086744f,10.347366f, + 9.606766f,9.729086f,10.175982f,10.490002f,10.450778f,10.530566f,10.662402f,10.198713f, + 9.756838f,7.568992f,7.395587f,10.386068f + }, + { + 12.338935f,11.958341f,7.484207f,8.228665f,11.650372f,11.382147f,12.027068f,11.762714f, + 11.266207f,12.095256f,12.402075f,12.538692f,12.335326f,12.212730f,12.551470f,12.419568f, + 11.941353f,12.565509f,12.164819f,12.121121f + }, + { + 11.530771f,10.926392f,10.037753f,7.947472f,8.046108f,7.827244f,7.274969f,9.599776f, + 10.971369f,9.563985f,10.664629f,11.255960f,10.737041f,11.198854f,11.004945f,11.547729f, + 11.150601f,11.446258f,11.272099f,11.224279f + }, + { + 12.154252f,12.426224f,12.362570f,12.276526f,11.848105f,12.233492f,12.238678f,11.606319f, + 11.630966f,8.226843f,8.663989f,12.324718f,11.910058f,11.977910f,11.282999f,11.276901f, + 12.135061f,12.316558f,12.126414f,12.222776f + }, + { + 10.840468f,10.882261f,10.935246f,10.880699f,11.083740f,11.099067f,10.870871f,10.768135f, + 10.532293f,10.338410f,9.085450f,8.402101f,7.755022f,9.959888f,10.061506f,10.644034f, + 10.614702f,10.481884f,10.760615f,11.004514f + }, + { + 12.122748f,12.306721f,11.587852f,12.430750f,12.175253f,11.815797f,12.308073f,12.320755f, + 12.218995f,12.463879f,12.424328f,12.559034f,12.042230f,11.765315f,8.922847f,9.539627f, + 7.874360f,8.521064f,9.272277f,12.165272f + }, + { + 12.485865f,11.205798f,11.664264f,10.653128f,7.610178f,8.947474f,11.966330f,12.100983f, + 12.107791f,11.909583f,11.112039f,12.535769f,12.489249f,12.444782f,12.346417f,12.296227f, + 12.534035f,12.334972f,12.077379f,12.275601f + }, + { + 12.425206f,12.450086f,12.341137f,12.568719f,12.320243f,12.361140f,12.099853f,11.035367f, + 8.319082f,12.032015f,12.280725f,11.606254f,12.321961f,11.066000f,11.799191f,12.266534f, + 12.556672f,12.545979f,12.602019f,12.030170f + }, + { + 8.871724f,11.287228f,11.532060f,10.621922f,11.143099f,10.988887f,10.820709f,11.695601f, + 10.989671f,11.008445f,11.567303f,11.250048f,11.122625f,9.865336f,9.707122f,11.365924f, + 11.399251f,11.287416f,8.975295f,9.569743f + }, + { + 9.780970f,11.908114f,11.473997f,12.024678f,11.860840f,11.723680f,12.367899f,12.108915f, + 12.340000f,12.381660f,12.315555f,12.282724f,12.359691f,11.991398f,12.220946f,12.155458f, + 12.413619f,11.642963f,7.867479f,8.503173f + }, + { + 12.100057f,12.246774f,12.168076f,11.771790f,10.224229f,8.752139f,8.276130f,8.317601f, + 8.677964f,10.925248f,11.599258f,10.861567f,11.187905f,11.979478f,12.035626f,12.058556f, + 12.150581f,12.192816f,12.171208f,12.225122f + }, + { + 12.205771f,12.205347f,12.351176f,12.237871f,12.382323f,12.461397f,12.301606f,12.369697f, + 11.959662f,11.558475f,10.953750f,8.388442f,8.819866f,12.077829f,11.983337f,11.818386f, + 12.286803f,12.458479f,12.329653f,12.507854f + }, + { + 11.530513f,11.199886f,12.487312f,12.406390f,12.054689f,12.255518f,12.097314f,12.346512f, + 12.310920f,11.682766f,12.332119f,12.015944f,11.992967f,11.917038f,7.877818f,9.167294f, + 12.226696f,11.735081f,12.256387f,11.444395f + }, + { + 12.132508f,12.328980f,11.918468f,12.068428f,12.493188f,12.275755f,12.524507f,12.294735f, + 12.582710f,12.488275f,12.132201f,12.076183f,12.373331f,11.888222f,11.716764f,10.961454f, + 8.318602f,11.632863f,12.609443f,11.484080f + }, + { + 11.948422f,12.164044f,11.930634f,7.560744f,9.486037f,12.354504f,11.826571f,11.874330f, + 10.939306f,10.727631f,12.333044f,12.133337f,12.172671f,12.228312f,12.004416f,12.354714f, + 12.154241f,11.830939f,12.245022f,12.033812f + }, + { + 12.494522f,12.883386f,12.105121f,12.216132f,12.821167f,10.613010f,12.572326f,12.881424f, + 11.754890f,12.876678f,12.439420f,12.258423f,12.945374f,12.765532f,12.874741f,12.539070f, + 12.711823f,12.611643f,11.904738f,12.176199f + } +}; + + +/*-------------------------------------------------------------------* + * FD CNG + *-------------------------------------------------------------------*/ + +const int16_t d_array[SIZE_SCALE_TABLE_CN] = { 1, 2, 5, 8, 10, 15, 20, 30, 40, 60, 80, 120, 140, 160, 180, 220, 260, 300 }; +const float m_array[SIZE_SCALE_TABLE_CN] = { 0.000f, 0.260f, 0.480f, 0.580f, 0.610f, 0.668f, 0.705f, 0.762f, 0.800f, 0.841f, 0.865f, 0.890f, 0.900f, 0.910f, 0.920f, 0.930f, 0.935f, 0.940f }; + +const float msQeqInvAv_thresh[3] = { 0.01f, 0.03f, 0.05f }; +const float msNoiseSlopeMax[4] = { 2.f, 1.6f, 1.3f, 1.1f }; + +const SCALE_SETUP scaleTableStereo[SIZE_SCALE_TABLE_STEREO] = +{ + { 1, 0, 8000, -5.5f }, + { 1, 8000, 9600, -5.0f }, + { 1, 9600, 13200, -4.0f }, + { 1, 13200, 16400, -3.0f }, + { 1, 16400, 24400, -1.6f }, + { 1, 24400, 32000, -0.2f }, + { 1, 32000,512001, 0.0f }, + + { 2, 0, 8000, -0.9f }, + { 2, 8000, 9600, -0.65f}, + { 2, 9600, 13200, -2.0f }, + { 2, 13200, 16400, -3.0f }, + { 2, 16400, 24400, -0.8f }, + { 2, 24400, 32000, -0.25f}, + { 2, 32000,512001, 0.0f } +}; + +const SCALE_SETUP scaleTableMono[SIZE_SCALE_TABLE_MONO] = +{ + { 0, 0, 8000, -5.5f }, + { 0, 8000, 9600, -5.0f }, + { 0, 9600, 13200, -4.0f }, + { 0, 13200, 16400, -3.0f }, + { 0, 16400, 24400, -1.5f }, + { 0, 24400,128001, -0.5f }, + + { 1, 0, 8000, -5.5f }, + { 1, 8000, 9600, -5.0f }, + { 1, 9600, 13200, -1.55f}, + { 1, 13200, 16400, -3.0f }, + { 1, 16400, 24400, -0.6f }, + { 1, 24400, 32000, -0.2f }, + { 1, 32000,128001, 0.0f }, + + { 2, 0, 8000, -0.9f }, + { 2, 8000, 9600, -0.65f}, + { 2, 9600, 13200, -2.0f }, + { 2, 13200, 16400, -3.0f }, + { 2, 16400, 24400, -0.8f }, + { 2, 24400, 32000, -0.25f}, + { 2, 32000,128001, 0.0f } +}; + +const SCALE_SETUP scaleTable_cn_only[SIZE_SCALE_TABLE_CN] = +{ + { 0, 0, 8000, -3.5f }, + { 0, 8000, 9600, -3.0f }, + { 0, 9600, 13200, -2.5f }, + { 0, 13200, 16400, -2.0f }, + { 0, 16400,128001, 0.0f }, + + { 1, 0, 8000, -3.0f }, + { 1, 8000, 9600, -2.5f }, + { 1, 9600, 13200, -1.5f }, + { 1, 13200, 16400, -2.5f }, + { 1, 16400, 24400, -0.5f }, + { 1, 24400,128001, 0.0f }, + + { 2, 0, 8000, -2.5f }, + { 2, 8000, 9600, -2.5f }, + { 2, 9600, 13200, -2.0f }, + { 2, 13200, 16400, -1.0f }, + + { 2, 16400, 24400, -0.5f }, + { 2, 24400, 32000, 0.0f }, + { 2, 32000,128001, 0.0f } +}; + +const SCALE_SETUP scaleTable_cn_dirac[15] = +{ + { 0, 0, 13200, -3.0f }, + { 0, 13200, 16400, -2.5f }, + { 0, 16400, 24400, -2.0f }, + { 0, 24400, 32000, -1.5f }, + { 0, 32000,512001, 0.0f }, + + { 1, 0, 13200, -3.0f }, + { 1, 13200, 16400, -2.5f }, + { 1, 16400, 24400, -2.0f }, + { 1, 24400, 32000, -1.5f }, + { 1, 32000,512001, 0.0f }, + + { 2, 0, 13200, -3.0f }, + { 2, 13200, 16400, -2.5f }, + { 2, 16400, 24400, -2.0f }, + { 2, 24400, 32000, -1.5f }, + { 2, 32000,512001, 0.0f } +}; +const float scaleTable_cn_only_amrwbio[SIZE_SCALE_TABLE_CN_AMRWB][2] = +{ + { ACELP_6k60, -4.0f }, + { ACELP_8k85, -3.0f }, + { ACELP_12k65, -2.0f } +}; + + +const int16_t sidparts_encoder_noise_est[SIZE_SIDPARTS_ENC_NOISE_EST] = { 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 58, 68, 80, 92, 108, 126, 148, 176, 212, 255, 259, 264, 269, 279 }; + +const int16_t sidPartitions_nb[] = { 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 58, 68, 80, 92, 108, 126, 159 }; +const int16_t sidPartitions_wb1[] = { 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 58, 68, 80, 92, 108, 126, 148, 176, 212, 255 }; +const int16_t sidPartitions_wb2[] = { 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 58, 68, 80, 92, 108, 126, 148, 176, 212, 255, 259 }; +const int16_t sidPartitions_wb3[] = { 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 58, 68, 80, 92, 108, 126, 148, 176, 212, 255, 319 }; +const int16_t sidPartitions_swb1[] = { 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 58, 68, 80, 92, 108, 126, 148, 176, 212, 255, 259, 264, 269, 274 }; +const int16_t sidPartitions_swb2[] = { 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 58, 68, 80, 92, 108, 126, 148, 176, 212, 255, 319, 324, 329, 339 }; + +const int16_t shapingPartitions_nb[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 25, 28, 31, 34, 37, 40, 43, 47, 51, 55, 59, 64, 69, 74, 80, 86, 93, 100, 108, 117, 126, 136, 159 }; +const int16_t shapingPartitions_wb1[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 25, 28, 31, 34, 37, 40, 43, 47, 51, 55, 59, 64, 69, 74, 80, 86, 93, 100, 108, 117, 126, 135, 148, 162, 176, 192, 212, 232, 255 }; +const int16_t shapingPartitions_wb2[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 25, 28, 31, 34, 37, 40, 43, 47, 51, 55, 59, 64, 69, 74, 80, 86, 93, 100, 108, 117, 126, 135, 148, 162, 176, 192, 212, 232, 255 }; +const int16_t shapingPartitions_wb3[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 25, 28, 31, 34, 37, 40, 43, 47, 51, 55, 59, 64, 69, 74, 80, 86, 93, 100, 108, 117, 126, 136, 148, 176, 212, 256, 308, 319 }; +const int16_t shapingPartitions_swb1[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 25, 28, 31, 34, 37, 40, 43, 47, 51, 55, 59, 64, 69, 74, 80, 86, 93, 100, 108, 117, 126, 135, 148, 162, 176, 192, 212, 232, 255 }; +const int16_t shapingPartitions_swb2[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 25, 28, 31, 34, 37, 40, 43, 47, 51, 55, 59, 64, 69, 74, 80, 86, 93, 100, 108, 117, 126, 136, 148, 176, 212, 256, 308, 319 }; + +const FD_CNG_SETUP FdCngSetup_nb = { 512, 160, sizeof(sidPartitions_nb)/sizeof(int16_t), sidPartitions_nb, sizeof(shapingPartitions_nb)/sizeof(int16_t), shapingPartitions_nb }; +const FD_CNG_SETUP FdCngSetup_wb1 = { 512, 256, sizeof(sidPartitions_wb1)/sizeof(int16_t), sidPartitions_wb1, sizeof(shapingPartitions_wb1)/sizeof(int16_t), shapingPartitions_wb1 }; +const FD_CNG_SETUP FdCngSetup_wb2 = { 512, 256, sizeof(sidPartitions_wb2)/sizeof(int16_t), sidPartitions_wb2, sizeof(shapingPartitions_wb2)/sizeof(int16_t), shapingPartitions_wb2 }; +const FD_CNG_SETUP FdCngSetup_wb3 = { 640, 320, sizeof(sidPartitions_wb3)/sizeof(int16_t), sidPartitions_wb3, sizeof(shapingPartitions_wb3)/sizeof(int16_t), shapingPartitions_wb3 }; +const FD_CNG_SETUP FdCngSetup_swb1 = { 512, 256, sizeof(sidPartitions_swb1)/sizeof(int16_t), sidPartitions_swb1, sizeof(shapingPartitions_swb1)/sizeof(int16_t), shapingPartitions_swb1 }; +const FD_CNG_SETUP FdCngSetup_swb2 = { 640, 320, sizeof(sidPartitions_swb2)/sizeof(int16_t), sidPartitions_swb2, sizeof(shapingPartitions_swb2)/sizeof(int16_t), shapingPartitions_swb2 }; + + +const int16_t levels_37bits[FD_CNG_stages_37bits] = { 128, 64, 64, 64, 64, 64 }; +const int16_t bits_37bits[FD_CNG_stages_37bits] = { 7, 6, 6, 6, 6, 6 }; + +const float cdk_37bits_1_ivas[3072] = +{ + 33.94763184f , 23.04196358f , 19.02036476f , 15.61426640f , 9.84622097f , 6.74968624f , 8.78495407f , 6.55844116f , 6.41478300f , 3.65438509f , 2.53205872f , 0.20947371f , -3.68736625f , -6.96642828f , -8.93218231f , -10.77195358f , -14.39207268f , -19.83006287f , -25.90260124f , -30.72169685f , -32.16821671f , -35.03061295f , -35.84580231f , -35.98442459f , + 23.05311012f , 15.34062386f , 11.67077923f , 9.03463936f , 7.33119154f , 6.01164532f , 4.86430264f , 3.36793089f , 2.00524712f , 1.02420747f , -0.28395364f , -1.14369977f , -2.29296756f , -3.49234462f , -4.55691099f , -5.82124615f , -7.01340151f , -8.19280529f , -9.51517677f , -11.88930511f , -12.41490746f , -13.91690540f , -15.41597271f , -17.46363640f , + 6.34591007f , 5.83291101f , 1.82374179f , 1.64918160f , 2.46284771f , 3.21434593f , 4.79773092f , 6.78620768f , 7.17590570f , 7.29561472f , 6.46074152f , 4.26570177f , 0.29191878f , -5.68994617f , -8.93541527f , -12.17100811f , -15.95464516f , -19.82475090f , -28.43348694f , -31.13560677f , -30.82723999f , -33.92724228f , -37.10982895f , -39.15046310f , + -1.97859216f , -1.29728901f , -0.68513793f , -0.59703761f , -0.19596121f , -0.48437589f , 0.41912374f , 0.32082281f , 0.42840490f , 0.33297276f , 0.00419650f , 0.25515109f , 0.07341246f , -0.05156118f , -0.17369615f , -0.39090252f , -0.53758574f , -0.97013980f , -1.37499487f , -2.59367585f , -2.67291665f , -3.56308174f , -5.09242105f , -7.33598137f , + 44.73780441f , 32.42730713f , 26.58676720f , 20.32800293f , 15.91747665f , 11.15012264f , 7.68650007f , 10.27048969f , 9.52919579f , 5.18821383f , 1.79746056f , -0.50318158f , -4.92894411f , -9.36254311f , -14.76678371f , -15.57420921f , -16.40379715f , -19.38558006f , -24.47130203f , -28.18117905f , -26.27810097f , -28.22804451f , -30.44338608f , -33.63451004f , + 27.92958260f , 17.48978424f , 9.02943993f , 2.00556946f , 0.77582097f , 1.75702107f , 2.96648121f , 4.17692900f , 5.20950508f , 4.89404440f , 3.14809656f , 2.02777839f , 0.06399647f , -2.44093847f , -5.23348236f , -7.73788691f , -9.60736561f , -11.49096489f , -12.88784599f , -14.62041187f , -14.05591011f , -13.97139835f , -13.55158806f , -12.38661575f , + 4.40041780f , 6.02715492f , 8.63421249f , 11.23643303f , 10.21946526f , 7.12535143f , 3.97593451f , 1.47885716f , -0.34547061f , -2.21350408f , -3.58581519f , -3.49226046f , 1.64697266f , -0.80884248f , -6.61078739f , -0.83386075f , -6.55604124f , -8.50729084f , -13.99620533f , -22.11815453f , -23.36925316f , -25.26130867f , -27.82377815f , -31.91535187f , + -0.31119800f , -0.22902243f , -0.18182723f , -0.17193857f , -0.22133952f , -0.25048682f , -0.19776741f , -0.20502391f , -0.15689729f , -0.08497809f , -0.04383328f , 0.10558389f , 0.22994623f , 0.27078405f , 0.26461646f , 0.21337126f , 0.07602444f , -0.07640435f , -0.08624625f , -0.01901877f , -0.37278932f , -0.55278486f , -0.50081939f , -0.57718313f , + 11.09673309f , 12.25163174f , 11.92947292f , 11.36766434f , 10.26155853f , 10.59420109f , 11.28228855f , 9.29032898f , 7.86474180f , 5.81516743f , 3.32581139f , 0.59270757f , -2.99105382f , -7.64252663f , -12.32353687f , -16.56275558f , -19.50693130f , -21.39342690f , -23.04017448f , -26.55841255f , -27.89498329f , -29.63920593f , -31.31513977f , -34.91411972f , + 14.63949299f , 9.97996807f , 7.52127123f , 6.06751871f , 4.64821386f , 3.74143553f , 3.04003358f , 2.11276221f , 1.27838099f , 0.61896890f , -0.12750353f , -0.75742245f , -1.50008225f , -2.24619722f , -2.86748576f , -3.65039921f , -4.29070568f , -5.12242794f , -6.06238365f , -7.87343836f , -7.91463709f , -9.02013016f , -10.03069305f , -11.15602875f , + 6.92497873f , 3.86428881f , 3.33403730f , 3.50285769f , 5.03133297f , 5.47784615f , 5.12933731f , 4.11465311f , 3.29701447f , 2.28059053f , 0.75228900f , -0.37691337f , -1.86169589f , -3.51180482f , -5.11985493f , -6.74894667f , -8.46384716f , -10.43132973f , -12.40718174f , -14.97575378f , -15.92234325f , -14.67680931f , -16.35786247f , -21.92259026f , + 9.03859520f , 6.23588181f , 4.69891214f , 3.76419306f , 2.91222286f , 2.25166726f , 2.02948308f , 1.35998511f , 0.74028724f , 0.50349784f , -0.12927644f , -0.45801210f , -0.88480383f , -1.52290273f , -1.84748936f , -2.22180009f , -2.73286033f , -3.21036029f , -3.73283100f , -5.33005810f , -4.96555710f , -5.72577906f , -6.40969419f , -7.14143419f , + 38.57890320f , 31.23274040f , 23.27908325f , 16.41319847f , 12.96908092f , 11.89987564f , 11.08193970f , 10.02814865f , 9.20901966f , 5.84658241f , 1.48919916f , -2.57032323f , -7.26163483f , -11.23550892f , -13.34285927f , -13.96859360f , -14.14492226f , -14.77427292f , -15.53306389f , -16.79932404f , -15.12855816f , -14.29256630f , -13.92473507f , -13.23437977f , + 23.30056572f , 13.31616783f , 10.53007698f , 7.97990513f , 7.58186388f , 6.05487776f , 6.38700247f , 4.46871328f , 3.73780274f , 1.15311646f , -0.16795112f , -1.00963080f , -2.99656630f , -4.04802418f , -5.87744474f , -7.26942492f , -8.01433468f , -8.85430908f , -8.93447399f , -10.80081940f , -10.03588772f , -9.56312180f , -9.49805927f , -9.08203316f , + 27.72716713f , 15.70166302f , 12.12497234f , 9.82916641f , 8.54480648f , 7.48498583f , 6.46852112f , 4.42398930f , 2.79946446f , 1.41388083f , -0.10821334f , -0.99111170f , -2.64519501f , -4.05361032f , -6.13559484f , -7.88495255f , -9.31697083f , -11.29918480f , -13.29217148f , -15.89776802f , -16.73270416f , -15.78193951f , -16.71963501f , -20.72499275f , + 0.09654448f , 0.05992651f , 0.07271793f , 0.06090590f , -0.01909172f , -0.02661837f , 0.00184859f , 0.00821958f , 0.01826876f , 0.00751956f , -0.02172063f , 0.03389538f , -0.00261579f , 0.00331171f , -0.00514964f , 0.00147764f , 0.00065488f , 0.01022588f , 0.00899184f , 0.02156001f , 0.01748813f , 0.01100880f , 0.01848303f , -0.00200717f , + 35.99007034f , 24.20862198f , 19.41031075f , 16.17420769f , 10.83719921f , 7.76013374f , 9.00250912f , 6.69725418f , 5.31352282f , 3.62490821f , 2.61681867f , 0.34085435f , -3.79527760f , -7.07614565f , -9.08049870f , -11.36665630f , -14.87462139f , -21.07974815f , -27.34793472f , -31.39986610f , -32.07981873f , -27.78803635f , -28.28388596f , -28.39242935f , + 13.10489750f , 20.89344025f , 21.64855194f , 15.43504715f , 10.25371075f , 3.34968066f , 1.78396285f , 0.43690255f , 0.33645880f , 2.18413949f , 0.30379224f , 2.14339352f , 2.11168623f , -3.22490501f , -5.35176468f , -6.71944952f , -7.60760832f , -7.25716639f , -9.25983143f , -10.88946342f , -12.36510563f , -14.32815361f , -16.37483597f , -19.41078377f , + 6.47920799f , 6.26157904f , 4.08267021f , 3.55930829f , 4.81190968f , 5.21526289f , 6.64490366f , 6.17979145f , 5.88209581f , 5.32573366f , 4.89284468f , 2.50707030f , -1.80236220f , -4.32998514f , -7.66879225f , -12.10674191f , -15.55172729f , -17.02550125f , -22.69219017f , -24.15981102f , -21.53298187f , -24.35451317f , -30.13893318f , -32.50536728f , + -1.27988362f , -1.28642356f , -0.84176970f , -0.75768483f , -0.62176520f , -0.62706548f , -0.67682666f , -0.86569685f , -0.75184637f , -0.68499511f , -0.73107177f , -0.44849658f , 0.61550426f , 3.18549967f , 2.15541792f , 0.41898161f , -0.96763957f , -2.28376174f , -2.21816230f , -1.44123793f , -1.10070240f , -1.48757422f , -1.94006848f , -2.04375577f , + 44.99568176f , 33.17905807f , 28.70528412f , 24.13981819f , 16.39375496f , 12.74631882f , 12.26308346f , 7.28386831f , 3.65083528f , 1.09594464f , -0.70640332f , -0.90420610f , -5.15652418f , -8.39927197f , -9.75838566f , -12.33563995f , -16.17337418f , -20.72145081f , -21.89005280f , -22.08177948f , -22.01576805f , -28.49225616f , -28.58443069f , -28.66851044f , + 27.27372360f , 16.82239342f , 9.52775478f , 4.54592752f , 2.38096476f , 1.92719686f , 2.83496809f , 3.88023591f , 4.84239244f , 4.33260632f , 2.40358329f , 1.26160026f , -0.59154904f , -2.84664989f , -5.20095921f , -7.12129021f , -8.10309982f , -9.32675076f , -10.37824821f , -12.16980839f , -11.58549690f , -11.62355518f , -11.35874844f , -10.43139648f , + 16.01709366f , 12.10370731f , 10.30418873f , 9.84315491f , 9.04705238f , 8.59515572f , 8.13945866f , 5.33055639f , 3.59784794f , 2.10469317f , 0.74735385f , -0.35173890f , -3.04881167f , -5.32683229f , -7.84610510f , -9.60193539f , -11.38669300f , -12.69159031f , -15.22157860f , -17.92496300f , -18.30335999f , -19.30245590f , -20.96332741f , -29.99128151f , + -1.49891376f , -0.94159925f , -1.59718812f , -2.73734355f , -4.95862293f , -5.62506247f , -3.84028316f , -1.86409163f , -1.10922730f , -0.37675977f , 0.54625863f , 1.08458769f , 2.59583378f , 4.74187803f , 4.85828352f , 2.72942448f , 1.21778154f , 0.61253220f , -0.12000842f , -0.42560402f , -0.47587356f , -0.59399730f , -0.54576296f , -0.64007539f , + 27.21817589f , 25.04722404f , 19.98665237f , 18.40707970f , 15.35737038f , 12.12910748f , 10.67379093f , 8.65770626f , 6.83053064f , 4.53696156f , 1.99311268f , -2.65666389f , -5.61365652f , -8.72017097f , -11.54872608f , -14.03052521f , -17.60883713f , -18.92860985f , -19.26733208f , -21.02047348f , -20.41023064f , -24.96704483f , -27.28151131f , -32.13149261f , + 16.58616257f , 6.07702732f , 3.20051527f , 2.19352865f , 1.25951850f , 0.52847487f , 0.36339840f , 1.22322381f , 1.40252435f , 0.78051162f , -0.14960484f , -0.19245568f , 0.80768329f , -0.03997936f , -0.45896211f , -1.94675004f , -3.57758331f , -4.74786758f , -6.30557394f , -7.96810246f , -7.85797882f , -8.40102768f , -8.70696068f , -14.50718975f , + 5.83877993f , 8.64909840f , 10.36191940f , 10.75121212f , 10.87299442f , 9.20523739f , 6.57943916f , 2.45789552f , 0.32793057f , -0.19492692f , -0.50667870f , -0.82865268f , -3.29967546f , -5.41881037f , -5.00245380f , -7.02534580f , -7.16695213f , -10.07062340f , -13.29201317f , -15.16228962f , -14.82801533f , -13.98322010f , -16.56229019f , -25.20559120f , + 6.31290579f , 4.29846334f , 3.09123778f , 2.35388660f , 2.08894801f , 1.51627553f , 1.61039710f , 1.01586986f , 0.50589812f , 0.34378609f , -0.11773424f , -0.29939151f , -0.59060657f , -1.10041618f , -1.30399191f , -1.66196144f , -2.00707245f , -2.30241942f , -2.72166705f , -4.15126562f , -3.61430144f , -4.17390060f , -4.64368582f , -5.19181061f , + 45.07491302f , 31.96612358f , 24.59359169f , 15.32010937f , 11.66156387f , 10.47190285f , 8.21482182f , 6.91866159f , 6.46052694f , 2.31078482f , -0.97819418f , -3.39280653f , -5.75906181f , -7.82967377f , -8.74781990f , -9.47419548f , -9.85650921f , -10.05874729f , -10.25747013f , -11.21096134f , -9.55652142f , -8.75567627f , -8.43642902f , -7.74934912f , + 29.56493187f , 22.29573250f , 13.46729183f , 9.18490410f , 7.02603865f , 5.38271475f , 3.58497858f , 2.35314894f , 2.17064548f , 0.43121719f , -0.60757560f , -1.00088501f , -1.82668996f , -2.00680733f , -4.21636438f , -5.02670193f , -6.26371956f , -6.65761995f , -7.37742567f , -9.00110912f , -9.04595757f , -10.59253120f , -12.24499798f , -13.79708004f , + 18.81605339f , 15.10544109f , 13.69033337f , 12.55228615f , 12.10694313f , 9.87893867f , 7.45830679f , 3.83573604f , 1.58222044f , 0.19975230f , -0.48743680f , -1.03465378f , -3.26008105f , -6.03337908f , -6.72951269f , -8.16258240f , -9.35424900f , -11.36496258f , -14.10615826f , -16.52154922f , -15.71789932f , -14.28701687f , -15.86503506f , -21.98985291f , + 0.58833683f , 1.93554544f , 1.01621759f , 0.17751050f , 1.44273913f , 1.63168383f , 0.87785423f , 0.63285774f , 0.44776136f , 0.05703505f , -0.13712768f , 0.28278413f , -0.80131322f , -0.86604142f , -1.59806752f , -0.93005019f , -1.04011548f , -0.89366192f , -0.64847207f , -0.61214101f , -0.55340266f , -0.16991313f , -0.15702423f , -0.17067310f , + 39.23077011f , 28.73466682f , 25.17003059f , 18.13150215f , 12.30397224f , 10.44106960f , 8.78819275f , 7.09760094f , 4.76503944f , 3.22303295f , 1.15491402f , -0.03009734f , -3.15244532f , -7.48607492f , -9.52877903f , -12.40654850f , -15.16987514f , -18.84217262f , -22.60379219f , -26.15986252f , -28.55947685f , -31.27477455f , -36.50263596f , -45.15930557f , + 17.17733002f , 11.81043625f , 8.99961948f , 7.02285528f , 5.70868826f , 4.43369055f , 3.63820124f , 2.49104285f , 1.49823487f , 0.74478340f , -0.16968371f , -0.91984361f , -1.82045591f , -2.59034872f , -3.43512726f , -4.35373259f , -5.22545052f , -6.16511250f , -7.18896103f , -9.18914032f , -9.45307922f , -10.67428303f , -11.84619045f , -13.22418404f , + -0.55165589f , 0.54447228f , -1.45378113f , 0.62164629f , 1.57039273f , 1.95998776f , 2.55171132f , 3.54153609f , 4.37655210f , 5.13829708f , 4.63276052f , 3.44003415f , 1.41755366f , -1.65012610f , -4.90518045f , -8.74811363f , -13.32540989f , -16.67502213f , -25.04341888f , -28.74816895f , -26.61729050f , -30.89074135f , -36.89068222f , -40.54713821f , + 0.52585047f , 0.25778684f , -0.68478346f , -0.63753521f , -0.85982674f , -0.45736870f , -0.39972550f , 0.19919159f , 0.21982291f , -0.21426015f , -0.17481731f , -0.30233619f , 0.35445356f , 0.53019482f , 0.62357306f , 0.10003661f , 0.38106197f , 0.59916449f , 0.29353949f , 0.19449981f , -2.91975641f , -2.99291539f , -3.24024558f , -3.85247374f , + 47.57529449f , 35.40103149f , 28.51466560f , 21.36822510f , 16.31501770f , 12.05416298f , 8.92814922f , 10.24798870f , 9.38683319f , 5.06438446f , 1.55697119f , -0.90166509f , -5.27530479f , -10.13637447f , -14.91060257f , -15.56597614f , -16.76358414f , -19.75214577f , -22.57003212f , -24.67880249f , -22.22905731f , -23.92941093f , -26.02715302f , -29.14421463f , + 32.45030594f , 18.47647858f , 10.55478764f , 2.66163707f , 0.48469192f , 0.89728785f , 2.66320086f , 4.46394491f , 5.75276375f , 5.15140963f , 3.30917573f , 2.07156634f , 0.32162985f , -2.37937927f , -5.25204325f , -7.75560665f , -9.72864151f , -11.49621296f , -12.90788174f , -14.53592110f , -14.00264931f , -13.90744686f , -13.50663280f , -12.31781673f , + 15.12892532f , 10.85012150f , 9.24257946f , 7.17304945f , 5.39838934f , 4.54048777f , 4.45172882f , 4.02888584f , 4.08525467f , 3.34242988f , 1.18552935f , 0.14054979f , -1.31041145f , -4.10797310f , -6.60405207f , -7.35080433f , -7.80001211f , -10.14729309f , -14.88454437f , -18.54398346f , -20.49944305f , -23.77704430f , -28.38242531f , -32.21464920f , + -0.70120311f , -0.36598748f , -0.27498749f , -0.18644568f , -0.13108316f , -0.05633634f , -0.12568842f , -0.05810567f , 0.00805399f , 0.04813070f , 0.01124786f , 0.06457995f , 0.05968979f , 0.04663355f , 0.04679099f , 0.04774757f , 0.03833918f , -0.06331048f , -0.10397947f , 0.00857244f , 0.29188818f , 0.54560822f , 0.49374610f , -0.00754885f , + 24.01022911f , 20.44940186f , 18.33339310f , 13.47519684f , 11.34601212f , 10.42150116f , 9.00321579f , 7.93997908f , 7.78757143f , 4.54246807f , 3.10096765f , -1.79380953f , -4.57441616f , -8.99514294f , -11.16653728f , -12.33127975f , -15.28052711f , -18.40486145f , -21.08405685f , -23.96353531f , -24.15535736f , -27.96574211f , -31.00701714f , -35.18267441f , + 10.95846939f , 7.75293112f , 5.94634438f , 4.67962313f , 3.86481786f , 3.06800008f , 2.68010044f , 1.77875984f , 1.08723342f , 0.60881591f , -0.11699903f , -0.66425866f , -1.27388847f , -1.93990111f , -2.43955994f , -3.04650831f , -3.60661364f , -4.21451235f , -4.87673521f , -6.57435703f , -6.46493149f , -7.41116762f , -8.24285698f , -8.84710217f , + 16.32924080f , 6.70306444f , 4.40889025f , 4.39005423f , 5.66961336f , 5.49213505f , 5.14747572f , 4.57054806f , 3.82850742f , 2.47304583f , 0.96936250f , -0.07546291f , -1.78923011f , -3.94788241f , -5.62404537f , -7.41395044f , -9.30011559f , -11.32884693f , -13.38846397f , -15.90376568f , -16.61722183f , -15.37379074f , -16.91991615f , -22.64369392f , + 20.29391861f , 10.14759159f , 7.41714382f , 5.43669033f , 4.22476673f , 3.05457902f , 2.12789893f , 1.46166980f , 0.68013304f , 0.10416872f , -0.62377477f , -0.69513589f , -1.11597610f , -1.73416364f , -2.00164723f , -2.48846936f , -2.99404836f , -3.36779451f , -4.50076723f , -6.23718977f , -6.32519245f , -7.00517225f , -7.63285732f , -8.34685898f , + 44.62683868f , 33.65060043f , 28.74439240f , 23.09117126f , 16.70447159f , 13.63468075f , 10.38835239f , 5.27151346f , 3.37364483f , 0.80086398f , -1.61115754f , -1.84962809f , -4.63047361f , -7.54744434f , -8.66370773f , -11.56917572f , -14.30193806f , -18.52358246f , -19.55438995f , -20.00398636f , -19.80403900f , -20.08826447f , -20.32636070f , -20.57789421f , + 25.43884087f , 14.71314049f , 10.84564495f , 7.29425287f , 5.99180174f , 4.52135897f , 4.43509150f , 2.96715736f , 2.20721149f , 0.85104460f , -0.42902783f , -1.01505911f , -1.67976689f , -3.03431702f , -4.04744673f , -5.05236149f , -5.71568680f , -7.14737368f , -7.96077490f , -9.41807270f , -8.88839054f , -8.62583065f , -8.43768692f , -8.79677773f , + 33.08629990f , 21.98393631f , 16.71452332f , 13.11685467f , 10.53023720f , 8.59362793f , 6.77428055f , 4.80111885f , 2.96947551f , 1.50105977f , -0.29485464f , -1.76483214f , -3.38473845f , -5.02232218f , -6.55174637f , -8.24214268f , -9.90916348f , -11.56876373f , -13.40682983f , -16.22795105f , -17.44435501f , -19.50963020f , -21.48133469f , -22.37619972f , + 0.14234349f , 0.00043129f , -0.46088508f , -0.47227818f , 0.19577537f , 0.57165289f , 0.14063163f , -0.08314086f , -0.17897955f , 0.26915708f , 0.29296365f , 0.25751004f , -0.29272652f , -0.35612249f , -0.45116535f , -0.22750567f , -0.13805020f , -0.08609761f , -0.08811182f , -0.00370739f , 0.04999773f , 0.10020024f , 0.12026346f , 0.12320870f , + 37.20217514f , 25.50048447f , 26.05090904f , 21.39400101f , 14.80546665f , 10.78633976f , 9.48393726f , 6.51000643f , 4.64587116f , 2.54244065f , 1.88398576f , -0.17826277f , -3.92847228f , -7.94585609f , -9.83112335f , -12.51981831f , -16.25451469f , -22.52105331f , -26.16354942f , -28.17800331f , -28.44519234f , -28.99005890f , -29.07491684f , -29.13504791f , + 22.87589455f , 20.69346428f , 16.08814049f , 12.09293556f , 8.58536339f , 6.12085295f , 5.03096294f , 2.46971536f , 1.38820446f , 0.41556263f , -0.71674269f , -1.87001503f , -1.97099841f , -3.12624931f , -4.61008024f , -5.90624523f , -5.81033182f , -7.63588858f , -9.32999802f , -11.98378181f , -13.66734123f , -15.22948647f , -17.72668266f , -22.15813255f , + 17.13776016f , 7.48015785f , 3.87183666f , 3.80275106f , 3.69309711f , 2.47135592f , 3.28866863f , 5.23638964f , 5.97343540f , 3.02334547f , 1.66290724f , 1.17763150f , 0.56503248f , -4.12660456f , -4.84892178f , -8.03931713f , -10.07701778f , -12.74638939f , -15.61114883f , -18.82812119f , -20.06874847f , -20.77385521f , -23.02597237f , -28.41068077f , + -0.68962491f , -0.67818958f , -0.47791985f , -0.18780768f , 0.07656835f , 0.29909450f , 0.36705506f , 0.60864949f , 0.66434783f , 0.54813319f , 0.31165063f , 0.41151917f , 0.27194378f , -0.09006688f , -0.59337950f , -1.27168393f , -1.60383165f , -2.03537226f , -1.01842117f , -1.12101495f , -2.20869303f , -2.13650179f , -1.40165854f , -1.00871158f , + 49.11537170f , 34.27339554f , 29.03029442f , 23.60639191f , 19.18561935f , 16.01621819f , 10.65990448f , 5.50423098f , 3.26754117f , 0.54238629f , -2.50046039f , -1.85086572f , -5.88433218f , -8.55415058f , -9.42830467f , -11.97149277f , -14.98629475f , -17.55759621f , -17.94509125f , -18.13786888f , -17.94290543f , -28.52441216f , -28.69857025f , -28.89863968f , + 32.58505249f , 18.45134735f , 10.62341118f , 4.82959938f , 2.78050184f , 2.30071044f , 2.89666629f , 3.55971622f , 4.36246777f , 3.80749893f , 2.22673583f , 1.03990865f , -0.54025501f , -2.73137355f , -4.92715406f , -6.82418060f , -7.95124388f , -9.07779884f , -9.96023846f , -11.46563911f , -10.75256252f , -10.58728790f , -10.22681522f , -9.05898476f , + 16.11109161f , 14.82219410f , 13.34882832f , 7.98469877f , 9.43520164f , 7.92174578f , 5.07156849f , 3.38034701f , 3.45362854f , 2.55894756f , 0.36423218f , -0.89059198f , -2.32811356f , -5.22609854f , -8.06139755f , -8.08888912f , -7.59058094f , -9.63050747f , -13.39019203f , -16.84990501f , -16.90269279f , -20.11418533f , -23.25974846f , -26.99926376f , + -1.15594578f , -1.16174018f , -1.02029443f , -0.85063583f , -0.73866522f , -0.75481141f , -0.86772621f , -1.00807703f , -1.13209546f , -1.11179471f , -1.20630574f , -1.01733243f , 0.24630366f , 3.09700346f , 3.12491417f , 1.54673541f , -0.17814836f , -1.87219131f , -0.85840708f , 1.11508834f , 1.62732244f , 0.97436380f , -0.19077510f , -0.80510545f , + 32.42321777f , 27.32720947f , 20.86049461f , 15.20588684f , 12.79125309f , 12.29267693f , 12.11658001f , 11.01210213f , 10.89878845f , 7.15270519f , 2.06876802f , -2.13045192f , -6.80808592f , -11.65817642f , -14.62570095f , -16.24762154f , -16.86284065f , -17.20292854f , -18.81791878f , -20.65732384f , -19.57567215f , -19.88597488f , -22.49367523f , -26.33296204f , + 25.36096573f , 13.31346798f , 8.91108418f , 5.01322508f , 3.48370409f , 2.18634796f , 2.12754703f , 1.25077868f , 0.72989434f , 0.29854974f , -0.73259068f , -0.59268522f , 0.14181496f , -0.68818730f , -1.80540454f , -2.34638786f , -4.05338144f , -5.46354723f , -7.10088396f , -9.38928127f , -8.44892311f , -9.48880005f , -9.86396503f , -10.07871723f , + 7.17678213f , 9.03277683f , 10.13266754f , 10.24296856f , 10.17098331f , 8.09959507f , 5.65843153f , 1.62803376f , -0.36960009f , -0.74838853f , -0.79447383f , -0.80214244f , -2.22858644f , -4.54312086f , -4.46352482f , -5.71911240f , -5.88809395f , -8.41744232f , -10.94176769f , -12.21683311f , -12.21341038f , -11.48782635f , -14.09292316f , -23.15090752f , + 18.21541405f , 14.70297527f , 14.13050365f , 12.94417000f , 11.81984806f , 9.76036167f , 6.53366423f , 4.50655460f , 0.83037621f , -0.42548206f , -1.35710704f , -2.34608483f , -3.56638503f , -5.17272615f , -5.63396835f , -7.03527308f , -7.91377544f , -8.77217388f , -10.20801735f , -12.21526527f , -12.12676907f , -11.62418461f , -12.46908951f , -15.99641514f , + 44.82578278f , 29.92639542f , 27.50827789f , 23.80286217f , 17.65353203f , 14.31119919f , 9.68513775f , 4.39934206f , 2.73908210f , 0.84895563f , -2.34653950f , -2.60779619f , -5.48460007f , -7.85637569f , -8.35718441f , -10.63293934f , -12.35181427f , -14.18777370f , -14.52088261f , -15.19802761f , -14.50250244f , -14.72802734f , -15.11614609f , -15.65816784f , + 22.81040764f , 18.14611626f , 15.16109562f , 7.86977768f , 8.17525578f , 4.43149519f , 3.84347200f , 1.57480264f , 0.94041783f , 0.21524446f , -0.86289990f , -1.21070933f , -2.15402818f , -2.98346281f , -3.67899656f , -4.07589436f , -4.21469736f , -4.80487633f , -5.08027840f , -6.07973146f , -5.15939760f , -4.76911354f , -4.57167721f , -4.45344400f , + 24.49489975f , 17.31044769f , 13.22760391f , 10.45895958f , 8.42623138f , 6.75540257f , 5.42271709f , 3.69801641f , 2.30738783f , 1.11391723f , -0.26593676f , -1.45248365f , -2.67149425f , -4.03488445f , -5.14615870f , -6.45010090f , -7.70261431f , -9.10985470f , -10.61737823f , -13.08172894f , -13.92179298f , -15.81127357f , -17.59627724f , -19.73897552f , + 8.98934364f , 4.76031303f , 2.62020183f , 1.48485959f , 0.28737816f , 0.05866807f , -0.01028116f , -0.07208341f , -0.13242376f , -0.04422715f , -0.09028641f , -0.04876806f , 0.10697100f , 0.04797191f , 0.01100808f , -0.07014611f , -0.04378227f , -0.04009765f , -0.17876917f , -0.72032106f , -0.11678807f , -0.05392319f , -0.07008670f , -0.21385938f , + 36.29371643f , 24.65291214f , 21.01904678f , 16.67200279f , 11.48446560f , 8.12246799f , 9.78220177f , 7.74590874f , 5.69669485f , 4.02027988f , 3.36120009f , 0.58418810f , -3.89836407f , -7.63864374f , -10.03672886f , -12.67631626f , -16.54735374f , -22.06600380f , -27.53655815f , -31.70346832f , -32.28223419f , -33.58357620f , -33.78388596f , -33.85955811f , + 20.20799255f , 13.75940609f , 10.45750713f , 8.23875809f , 6.45997095f , 5.16953897f , 4.34209776f , 2.95543051f , 1.74270713f , 0.87219697f , -0.25581297f , -1.09575856f , -2.07853103f , -3.06528211f , -3.94644260f , -5.01998711f , -6.08012724f , -7.13329268f , -8.25736523f , -10.45005131f , -10.79236698f , -12.32848263f , -13.70973110f , -15.25794792f , + 7.88285303f , 6.51488161f , 3.92537451f , 4.23367739f , 4.89059639f , 5.43539810f , 6.37946939f , 8.50651741f , 9.33964443f , 8.69559956f , 6.91200352f , 3.63401532f , -0.99519163f , -7.15117836f , -11.47043896f , -15.28446960f , -18.89196777f , -23.08573532f , -28.80813408f , -30.38180542f , -29.53565407f , -31.03279877f , -32.39319229f , -33.27596664f , + 0.40477216f , 0.24463084f , -0.76651365f , -0.71309596f , -0.87443089f , -0.30846810f , -0.39305758f , 0.23431541f , 0.22700633f , -0.23816873f , -0.20784868f , -0.32913551f , 0.34776384f , 0.50111002f , 0.59345955f , 0.10497253f , 0.34248179f , 0.54556167f , 0.25770640f , 0.16739839f , -4.25213432f , -4.33188486f , -4.59072590f , -5.18169022f , + 44.52682495f , 33.44413376f , 27.75477028f , 20.87782860f , 15.96038628f , 11.38267708f , 8.04888916f , 10.34346294f , 9.36942101f , 5.06397772f , 1.65765107f , -0.60627878f , -5.02781725f , -9.60684490f , -14.71248531f , -15.51352501f , -16.35951424f , -19.44139671f , -23.93828964f , -27.02204704f , -23.39621544f , -25.11229706f , -27.06189728f , -29.88434029f , + 30.53590775f , 18.24347496f , 10.48498344f , 3.34677172f , 1.29623032f , 1.39035857f , 2.45928121f , 3.70242572f , 4.65490055f , 4.28991556f , 2.71830440f , 1.69632769f , 0.22320883f , -2.12041640f , -4.55487108f , -6.90537930f , -8.85028553f , -10.44450092f , -11.88594723f , -13.62341404f , -13.19523811f , -13.18412113f , -12.81897163f , -11.68476582f , + 5.23515940f , 11.02192688f , 12.84599209f , 11.99070740f , 7.98806524f , 4.52272415f , 4.08583927f , 2.00564265f , -0.15996964f , -2.10115862f , -4.96646547f , -5.90554714f , 4.82052660f , 0.89168262f , -6.95808125f , 2.50679994f , -6.73005676f , -6.52649450f , -14.76829720f , -15.44077110f , -21.42759705f , -23.35196304f , -25.43357277f , -27.50794983f , + 1.84942830f , 0.77272046f , 0.24707772f , -0.08593588f , -0.23682129f , -0.24805132f , -0.09850720f , -0.04999159f , -0.00995130f , 0.02216339f , 0.08926903f , 0.20275106f , 0.22498472f , 0.26662621f , 0.16996276f , -0.06895026f , -0.26348418f , -0.41196167f , -0.47150335f , -0.43742141f , -0.53234649f , -0.56433624f , -0.59429443f , -0.65639752f , + 14.08870220f , 13.32911205f , 10.19654274f , 6.80626822f , 6.89704180f , 6.85630465f , 6.28267908f , 6.48725128f , 6.74154425f , 5.72381783f , 4.45444155f , 2.14331675f , -1.56116712f , -5.51466084f , -8.73317051f , -13.38193130f , -16.39547157f , -18.36110878f , -22.47372246f , -24.78481865f , -23.78740883f , -25.83082390f , -28.30295181f , -29.63710213f , + 12.11153984f , 11.18265629f , 8.56032085f , 6.07614088f , 4.32917595f , 3.62714767f , 2.88151503f , 0.00486909f , 0.16551718f , 0.11766627f , -1.01007175f , -1.58863187f , -0.66722620f , -1.26095092f , -2.03257895f , -2.68355250f , -1.88288093f , -2.89664102f , -3.82705688f , -5.15467978f , -5.96337652f , -7.68645287f , -9.75820160f , -14.60475540f , + 10.68691158f , 5.49249125f , 4.08632946f , 3.73180628f , 5.00127029f , 5.47980690f , 5.41938591f , 4.71624136f , 3.67419004f , 2.41826725f , 0.86259502f , -0.22994517f , -1.90842390f , -3.87555194f , -5.49712229f , -7.17735624f , -8.88335800f , -10.96466255f , -12.92337704f , -15.48291206f , -16.37232208f , -15.13042545f , -16.82096863f , -22.42011452f , + 15.85285378f , 10.13984489f , 8.02905941f , 4.50967121f , 2.95999980f , 2.60214114f , 0.53660029f , 0.86555701f , 0.22102003f , -0.33034071f , -0.07463158f , 0.21286504f , -0.93098062f , -1.75468397f , -1.58335686f , -1.24065292f , -1.48353171f , -1.76630950f , -2.04288220f , -3.12292504f , -2.45715189f , -2.74685717f , -3.16709018f , -5.91369343f , + 40.10007477f , 32.17766190f , 23.94418526f , 17.08811951f , 13.37568951f , 12.24086761f , 11.66988850f , 10.55005550f , 9.33296108f , 5.75441313f , 1.48114145f , -2.81252980f , -7.79981041f , -11.41279602f , -13.67298222f , -14.21839428f , -14.48849964f , -15.18556213f , -15.61604404f , -16.76811600f , -15.01851368f , -14.17923927f , -13.81790257f , -13.10479736f , + 24.85771179f , 14.51553345f , 11.72882080f , 8.90813828f , 8.43283081f , 6.32554102f , 6.22324610f , 3.79361701f , 4.27097321f , 0.56961524f , -1.24056125f , -1.41678429f , -3.11242867f , -4.09969568f , -5.68787241f , -6.75505066f , -7.30343008f , -8.00887489f , -7.82331944f , -9.66470909f , -8.76680851f , -8.39351845f , -8.12993431f , -7.16756201f , + 28.97707558f , 19.26215744f , 14.32650089f , 11.15691090f , 8.93038845f , 7.45748949f , 5.97504330f , 4.08204174f , 2.51096678f , 1.17593741f , -0.48250875f , -1.45828211f , -2.81734180f , -4.23465633f , -5.64280844f , -7.11844778f , -8.37782097f , -10.01226807f , -11.81233501f , -14.42724609f , -15.63475609f , -17.08984566f , -18.90253639f , -21.68543816f , + -0.37224483f , -0.21122639f , 0.15951714f , 0.02087032f , 1.22483158f , 0.00348772f , -0.18272802f , -0.44353136f , -0.08490600f , -0.11233181f , -0.16806731f , -0.22428627f , -0.01276036f , 0.06931113f , 0.01195190f , -0.11203818f , 0.03106703f , 0.26289529f , 0.23697743f , 0.22796448f , 0.04144126f , 0.09472501f , 0.14482924f , 0.17954086f , + 39.73665619f , 26.81943703f , 21.29967880f , 18.16204262f , 13.44168472f , 11.03711700f , 11.62625027f , 7.02647495f , 4.79233932f , 3.35499501f , 2.79116821f , -0.41337949f , -4.65079498f , -8.28630638f , -10.48777294f , -13.31785393f , -16.91392136f , -22.94918823f , -27.85824203f , -29.88930130f , -30.09802246f , -28.58382988f , -28.66120720f , -28.70516014f , + 19.10952950f , 22.74327850f , 23.97905540f , 21.18729591f , 11.64360809f , 6.94751596f , 4.65807104f , 0.78640783f , -0.24381419f , 1.02887869f , 0.82303244f , -0.54234630f , -0.94865251f , -1.77358091f , -5.30440760f , -8.68288422f , -8.39182663f , -8.75503826f , -11.02817535f , -13.34524441f , -13.31265545f , -13.47730160f , -16.70124626f , -23.44244576f , + 5.32545233f , 7.05786848f , 6.26387453f , 5.78526258f , 5.88421535f , 5.73053551f , 5.83421803f , 6.25754404f , 5.95633888f , 5.21652365f , 3.57697511f , 1.02363062f , -2.68831611f , -5.48803329f , -7.67456436f , -10.52217293f , -13.10689449f , -14.01679230f , -18.51670074f , -20.16453171f , -19.27928925f , -21.94375420f , -27.47334480f , -29.79807281f , + -2.60717487f , -1.83319664f , -1.31210554f , -0.76391363f , -0.20487705f , -0.30073228f , -0.07237651f , 0.09489144f , -0.11017539f , -0.08628271f , -0.06826403f , 0.06346101f , 0.18584041f , 0.16889001f , 0.13889854f , 0.14046463f , 0.05026200f , -0.19259109f , 0.12724322f , 0.05020098f , -0.06773847f , -0.35614878f , -0.63952541f , -0.86939591f , + 43.34894180f , 31.48630524f , 28.12536430f , 24.63106918f , 16.25746918f , 12.06399059f , 10.17741966f , 6.35993147f , 4.57542324f , 1.64055872f , 0.70682496f , -0.49986696f , -4.10422993f , -8.01978779f , -9.94273472f , -12.91026783f , -16.30473137f , -20.63467598f , -21.94548988f , -22.36483765f , -22.45355415f , -22.54744720f , -22.58737946f , -22.65038681f , + 30.95190620f , 18.16899109f , 9.72149658f , 4.10552931f , 2.30458689f , 2.12724614f , 2.85707808f , 4.13076019f , 5.31916714f , 4.81190920f , 3.00600863f , 1.67334628f , -0.53532135f , -3.10476613f , -5.73052549f , -7.79181433f , -9.06767464f , -10.22359562f , -11.19510365f , -12.66148758f , -12.00313091f , -11.91836929f , -11.49621868f , -10.27651405f , + 19.52749825f , 13.26932335f , 10.77497768f , 9.87707806f , 8.94397163f , 8.45470905f , 7.96926117f , 5.37859535f , 3.56771731f , 1.95985627f , 0.70804149f , -0.21590416f , -3.00161719f , -5.06863308f , -7.59307814f , -9.56244850f , -11.54047012f , -12.52976322f , -14.91271400f , -17.65096283f , -17.99032593f , -18.96465111f , -20.50286484f , -29.15997505f , + -0.41770393f , -0.57753342f , -1.20728409f , -2.88331747f , -5.34745789f , -6.08694220f , -3.71453929f , -2.12419772f , -1.18535638f , -0.59698033f , 0.42981535f , 1.32175910f , 2.83778572f , 4.84865475f , 5.04370260f , 3.07809186f , 1.49566460f , 0.65009278f , 0.04541466f , -0.15811041f , -0.29866409f , -0.41704908f , -0.46928179f , -0.48526672f , + 30.59598160f , 24.69124985f , 19.35356522f , 17.04518127f , 12.47758865f , 9.30305386f , 9.31541252f , 8.18128777f , 5.78386831f , 3.40561008f , 1.86525965f , -2.05713415f , -3.91759825f , -7.05117083f , -9.88467789f , -11.80012417f , -15.62137604f , -16.45769119f , -16.11259651f , -17.03925705f , -16.63202477f , -20.41814423f , -23.23829842f , -27.13690567f , + 22.04087639f , 9.82030296f , 6.62304544f , 3.54571700f , 2.28869224f , 1.43831360f , 1.01925826f , 0.60685647f , 0.52726758f , 0.28217983f , -0.60519862f , -0.40057555f , 0.33728161f , 0.16425660f , -0.30877599f , -1.72851086f , -3.62104511f , -5.35534239f , -7.36662674f , -9.61280251f , -9.84184837f , -9.76028061f , -10.30779839f , -12.96220016f , + 7.59925270f , 9.89327908f , 11.32660198f , 11.55432892f , 11.11032295f , 9.16942692f , 6.63248444f , 2.69755864f , 0.57976800f , 0.05171308f , -0.55509138f , -1.34203660f , -3.50475025f , -5.48786688f , -5.35051298f , -6.98438931f , -7.01662779f , -9.47507668f , -12.24847126f , -13.41042137f , -12.92720699f , -12.06966019f , -14.46927357f , -23.34392357f , + 6.96612597f , 5.00931787f , 3.76138091f , 3.18334484f , 2.03293252f , 1.34288895f , 1.58868873f , 1.00840783f , 0.40005356f , 0.06600340f , -0.13207078f , -0.20888096f , -0.49867839f , -0.91563702f , -1.39049554f , -1.52579367f , -1.76741624f , -2.06173539f , -2.48300815f , -3.86886954f , -3.38073707f , -3.92400837f , -4.47162819f , -5.09745169f , + 47.14703751f , 30.38273811f , 21.96264458f , 14.39871597f , 10.23386383f , 8.95710278f , 6.93860054f , 5.62253952f , 4.24646330f , 1.48851633f , -1.20669615f , -3.14844489f , -5.07624435f , -6.20617819f , -6.85559320f , -7.39740086f , -7.59652758f , -7.76342344f , -7.96090555f , -8.85080433f , -7.36783743f , -6.51624918f , -6.18211889f , -5.45559025f , + 33.12013626f , 16.84858894f , 12.65143013f , 8.74576950f , 7.71503162f , 5.75152826f , 5.57081461f , 3.33705091f , 2.19604564f , 0.46275416f , -1.08203483f , -1.74722302f , -2.23058796f , -3.73542142f , -4.79898882f , -5.51074600f , -5.92822361f , -7.29669523f , -7.87425613f , -9.19938278f , -8.26733780f , -7.79288721f , -7.17766953f , -6.91147518f , + 22.72534180f , 16.73917770f , 15.96501827f , 15.48456001f , 14.21817970f , 11.09321880f , 7.22196627f , 3.27875924f , 0.86349517f , -0.35276374f , -0.96022642f , -1.97590554f , -4.21987820f , -5.87952375f , -6.43021441f , -8.40103912f , -8.45606804f , -10.49744606f , -12.33858109f , -13.72036362f , -13.35521221f , -11.95208740f , -13.21454906f , -18.77292252f , + 0.89415503f , 2.55427527f , 2.19861484f , 1.76997423f , 1.68467879f , 1.11462021f , 0.72990263f , 0.68752390f , 0.55451417f , 0.46162665f , -0.10212867f , 0.08975709f , -1.02394462f , -0.74809217f , -1.54942429f , -0.89107299f , -1.00796068f , -0.70048058f , -0.53988647f , -0.51691598f , -0.45218167f , -0.00372395f , -0.01138951f , -0.04693869f , + 42.55582428f , 31.86493301f , 25.10536003f , 19.38906479f , 13.20624542f , 10.70058155f , 8.71647072f , 6.43070078f , 4.15740585f , 2.91404939f , 0.74730510f , -0.24514204f , -2.99233270f , -7.08516312f , -9.33087540f , -12.22711372f , -14.99213314f , -18.51732445f , -22.07689285f , -25.69321823f , -27.76980782f , -30.33328629f , -35.40525818f , -43.80059433f , + 17.17425156f , 15.04495525f , 13.74315548f , 9.50892258f , 6.63219738f , 3.98290706f , 2.99513650f , 0.72657228f , 0.40510508f , -0.37188929f , -0.42712122f , -0.44993770f , -0.85454285f , -2.16015244f , -2.33109641f , -3.77121162f , -4.37596750f , -5.36669207f , -5.62877464f , -7.46640444f , -6.83423185f , -7.70908165f , -7.39536428f , -11.27804089f , + 2.52714753f , 2.49289870f , -0.13784029f , -0.12163699f , 1.75517499f , 2.99553514f , 4.49444866f , 5.77764273f , 6.11328125f , 5.99628973f , 5.25506210f , 3.72307754f , 0.61337721f , -3.33252883f , -7.41996574f , -11.31843758f , -14.65295410f , -17.27932930f , -23.77917290f , -26.47192383f , -24.69055176f , -28.23755074f , -33.64114761f , -36.70846558f , + 0.26897269f , 0.29896018f , -0.59694219f , -0.58600718f , -0.59563857f , -0.14940611f , -0.22029303f , 0.11002608f , 0.09471268f , -0.08665721f , -0.04912328f , -0.19163008f , 0.17407294f , 0.29674888f , 0.32706621f , 0.06863109f , 0.22149041f , 0.41376126f , 0.17968638f , 0.12345629f , -1.91504288f , -1.83034718f , -1.79148746f , -2.04030466f , + 46.61645508f , 34.87612534f , 28.30528450f , 21.24158478f , 16.02840996f , 11.78007889f , 8.85846806f , 10.30448627f , 9.45803833f , 5.21806145f , 1.68192971f , -0.74372375f , -5.16118431f , -10.11946869f , -14.85457230f , -15.61676884f , -16.83375549f , -19.81565475f , -22.77931786f , -24.86022949f , -19.57012367f , -21.15659714f , -22.98768044f , -25.62114906f , + 33.50306320f , 20.94828606f , 11.29131508f , 3.76779723f , 1.88436973f , 2.24041677f , 3.07290483f , 3.88969660f , 4.82355642f , 4.29338741f , 2.81698418f , 1.50617039f , -0.22714122f , -2.44629383f , -5.18593407f , -7.46794319f , -9.20017433f , -10.38420296f , -11.62056923f , -13.33395100f , -12.78791428f , -12.68239403f , -12.26134491f , -11.07050896f , + 14.10636425f , 12.71654224f , 11.35340214f , 6.63278866f , 7.45038319f , 5.69565058f , 3.01491594f , 1.82628620f , 2.48782039f , 2.02510524f , 0.75415736f , -0.22476493f , -1.60228145f , -3.62377214f , -6.14920473f , -6.03494453f , -5.61935091f , -7.92571545f , -12.52105999f , -15.74191380f , -16.80817795f , -20.57492828f , -24.48945808f , -28.24258423f , + 0.19937749f , 0.12145615f , -0.77132010f , -0.71175891f , -0.93605912f , -0.31743777f , -0.29512858f , 0.09480342f , 0.14056028f , -0.12526789f , -0.09476471f , -0.30501965f , 0.25228870f , 0.52946067f , 0.56253082f , 0.14792542f , 0.34610838f , 0.49112254f , 0.26700655f , 0.18578406f , -0.02644314f , -0.05281431f , -0.03051598f , -0.05372978f , + 27.67247200f , 21.21397018f , 19.23110199f , 14.58107758f , 9.06582832f , 6.16479349f , 5.19902563f , 4.85638475f , 5.00597048f , 5.02013874f , 4.74315405f , 1.14152813f , -2.22816443f , -4.39935923f , -7.21801662f , -11.83607006f , -15.51521206f , -16.95382690f , -19.09778404f , -21.91887093f , -22.66965294f , -25.31122971f , -28.42613792f , -31.17256165f , + 11.87517643f , 8.35047531f , 6.28900909f , 4.94152260f , 3.84217644f , 2.98525238f , 2.59193397f , 1.77286649f , 1.13057005f , 0.57406390f , -0.14166087f , -0.61366737f , -1.26566494f , -1.89665902f , -2.40094352f , -3.00182557f , -3.57644248f , -4.17064571f , -4.82954073f , -6.52423048f , -6.40167952f , -7.34070396f , -8.16668510f , -8.83840561f , + 22.19146919f , 12.36240387f , 9.77023125f , 7.21114588f , 6.19833231f , 5.60523272f , 5.27842569f , 4.64398146f , 4.52219105f , 2.91414714f , 0.94011378f , 0.25184512f , -1.67108417f , -4.17819881f , -6.24735117f , -8.17109394f , -10.08654118f , -12.12491417f , -14.44429111f , -16.77396011f , -16.61188507f , -15.37945271f , -16.77342606f , -22.42259216f , + 24.26110077f , 14.98621845f , 11.37115288f , 7.53246927f , 5.87425423f , 4.31526375f , 3.63155198f , 2.21215534f , 1.20856023f , 0.27279723f , -0.83065307f , -1.13145101f , -1.61203635f , -2.64372611f , -3.19713020f , -3.79212451f , -4.30746126f , -5.19196177f , -6.05636358f , -7.64335585f , -7.13419104f , -7.34445190f , -7.59247351f , -8.24604034f , + 49.59980774f , 36.70146179f , 26.21045494f , 18.96593857f , 14.66215992f , 12.35246658f , 7.91571426f , 4.46859789f , 4.55067158f , 3.66973281f , -0.18894276f , -1.13036156f , -2.81119108f , -7.01159000f , -10.32988167f , -12.34438610f , -13.80298901f , -15.68917179f , -16.59648895f , -18.04370117f , -16.93032265f , -17.15782166f , -17.23012543f , -16.81400299f , + 26.24615288f , 16.32177734f , 12.63861752f , 8.90179348f , 7.98338699f , 5.88846350f , 5.62527227f , 3.35444164f , 2.27727008f , 0.38706595f , -1.15045261f , -1.47619927f , -2.39863658f , -3.88151002f , -5.00069237f , -5.60923672f , -5.99917269f , -7.16092062f , -7.55632973f , -8.88112926f , -7.98447180f , -7.57788992f , -7.00798178f , -6.71480894f , + 34.06352615f , 26.54057884f , 17.68980789f , 12.03931808f , 10.71124458f , 6.47080278f , 4.33683681f , 3.58446765f , 0.97453946f , 0.07721954f , -0.66921860f , -1.29634130f , -1.56973386f , -3.47828341f , -5.09566927f , -5.83764601f , -8.20822048f , -10.21011162f , -11.12835598f , -12.94603825f , -13.56561852f , -18.43250847f , -19.20955467f , -19.59786224f , + 0.95227748f , 0.58713847f , 0.31188840f , 0.27555063f , 0.34262455f , 0.30559424f , 0.15511483f , 0.24209952f , -0.01565590f , 0.27935538f , -0.07689041f , 0.16362046f , -0.12529252f , -0.41308093f , -0.45669210f , -0.33647329f , -0.06432384f , -0.04425672f , -0.05423176f , -0.09260799f , 1.18880558f , 1.71499527f , 1.66458070f , 1.84440422f , + 40.51910782f , 28.87430191f , 26.44847679f , 22.61171722f , 14.58166790f , 10.04493809f , 8.90122890f , 6.69188166f , 4.74618101f , 1.55060208f , 0.26953381f , -0.23009424f , -3.10289311f , -7.76883173f , -9.03342628f , -11.38734531f , -15.26344204f , -20.89108467f , -23.61590576f , -24.70707703f , -24.72460747f , -25.31776428f , -25.42388153f , -25.48863602f , + 21.86741066f , 19.33110237f , 16.09799957f , 12.12207603f , 7.65350389f , 5.31046820f , 4.50258398f , 3.46295428f , 1.98402655f , 0.36231637f , -0.75526041f , -2.47129464f , -1.34295225f , -2.90498233f , -4.77146578f , -5.83896399f , -5.19093323f , -5.94871426f , -6.67448521f , -9.30622387f , -10.69075203f , -13.05691051f , -14.45488358f , -18.82699394f , + 17.39302254f , 10.72895432f , 7.20909882f , 6.08006477f , 5.16837120f , 5.15259743f , 5.89495230f , 6.39498520f , 6.43017626f , 4.73164368f , 2.29907250f , 0.83655185f , -1.61507225f , -4.66745806f , -6.97347021f , -10.42446899f , -13.22788048f , -15.54260540f , -18.53327751f , -21.36825371f , -21.31904602f , -21.81181335f , -22.37908173f , -22.59859848f , + -0.01662111f , -0.25115231f , -0.21056390f , -0.29628995f , 0.14847504f , 0.01114315f , -0.00287740f , -0.02265828f , 0.20096491f , 0.01801417f , 0.01865144f , 0.08115936f , 0.06854093f , 0.03268814f , -0.06264148f , -0.19867666f , -0.29278329f , -0.48747075f , -0.51964116f , -0.52115518f , -0.62580901f , -0.67440128f , -0.64710861f , -0.70800090f , + 50.63159180f , 32.35544586f , 28.22938156f , 26.12494469f , 19.17036057f , 15.54605675f , 10.90270996f , 5.06216860f , 2.83115578f , 0.26169294f , -2.59751272f , -2.23182607f , -6.02089071f , -9.04337597f , -9.29519939f , -11.44281673f , -13.14252472f , -13.87999630f , -14.00658417f , -14.13973713f , -14.08796120f , -28.49422073f , -28.55380249f , -28.66899681f , + 32.93387222f , 21.26923561f , 12.45925331f , 7.33453608f , 4.77903414f , 2.72644329f , 2.77173924f , 3.24125862f , 4.11953831f , 3.23369288f , 1.40657330f , 0.18600486f , -0.99559313f , -2.52648664f , -4.61264372f , -6.59295559f , -7.73660517f , -8.74180222f , -9.62380314f , -10.94507694f , -10.15025043f , -10.08863640f , -9.69090939f , -8.64610767f , + 19.57560349f , 16.97666168f , 15.32033443f , 9.42695236f , 10.81062126f , 9.27347946f , 6.17076063f , 3.87660646f , 4.01463747f , 2.81778264f , -0.01208094f , -1.53821909f , -3.11120200f , -6.04038715f , -9.02472019f , -8.91995525f , -8.31732368f , -9.97514439f , -13.60401344f , -16.95523643f , -16.28038406f , -19.30029488f , -21.93006134f , -25.31139183f , + -0.42336991f , -0.69359350f , -0.79506743f , -0.19419681f , -0.43531519f , -0.60549897f , -0.57378924f , -0.71198583f , -0.67573565f , -0.92463225f , -0.75932795f , -0.88697869f , -0.09116954f , 0.78057998f , 1.43234348f , 2.25282049f , 1.19868934f , 0.34737879f , 0.56014186f , 0.85799438f , 3.28324819f , 3.73368144f , 2.45774937f , 1.97252631f , + 34.38531113f , 33.28102493f , 22.44291687f , 21.71539307f , 14.89051437f , 12.06779766f , 11.31605339f , 6.32059956f , 6.47309685f , 2.75739145f , -0.72276920f , -4.60511971f , -2.12165952f , -3.55129719f , -10.11487579f , -14.52775002f , -18.18198204f , -20.44789314f , -21.58519745f , -22.53190994f , -22.04618073f , -22.58295822f , -22.41326904f , -22.20569420f , + 28.00102234f , 14.65698147f , 10.06700230f , 6.12028360f , 4.52054358f , 2.66990614f , 2.51413369f , 1.24868000f , 1.04878569f , 0.22633910f , -1.12691772f , -1.15263200f , -0.74640560f , -1.10290110f , -2.06341290f , -2.48550367f , -3.55061507f , -4.52637577f , -6.00973654f , -8.38346672f , -7.37356853f , -8.63987446f , -9.06530762f , -8.95927715f , + 9.00067616f , 10.26587391f , 11.45584679f , 11.44188595f , 10.68400574f , 8.38729477f , 5.69343138f , 1.98902297f , 0.07958379f , -0.50896430f , -0.83697474f , -1.44278872f , -2.87292027f , -4.73982143f , -4.71389008f , -5.85515070f , -5.86282825f , -7.65532827f , -9.99789906f , -11.01864147f , -10.61325741f , -9.58348751f , -12.15856743f , -21.34374619f , + 21.37445641f , 22.85872078f , 20.62342262f , 13.71718597f , 8.38479900f , 4.66404533f , 2.74082160f , 0.35184097f , -0.49886125f , -0.66627383f , -0.80947453f , -1.35072243f , -1.72979438f , -2.81121135f , -2.55301118f , -3.12950158f , -2.59265637f , -3.53384900f , -4.62459230f , -8.21864986f , -9.64109135f , -9.61122894f , -11.18858528f , -17.21859741f , + 52.95914078f , 32.75603485f , 30.16634941f , 25.88944244f , 19.02377129f , 16.02350807f , 11.37754154f , 4.71347761f , 3.22399068f , 0.38588712f , -2.36943150f , -3.03161478f , -6.27093697f , -9.42517185f , -9.90064812f , -11.53384590f , -12.21652794f , -12.39763260f , -12.44114876f , -12.50287819f , -12.35077858f , -12.41636753f , -12.45803928f , -12.50715065f , + 28.04634666f , 16.86526871f , 13.82318878f , 9.40035915f , 8.49054623f , 4.69572687f , 4.31990623f , 2.24289536f , 1.52588129f , -0.15709598f , -1.59520829f , -0.06550518f , -1.94989491f , -3.66548038f , -4.27683449f , -4.56677961f , -4.99815702f , -5.49210978f , -5.61179161f , -6.72458935f , -5.75457907f , -5.41288614f , -5.03387022f , -3.80432510f , + 25.75157547f , 17.28746796f , 13.10127354f , 10.33002377f , 8.27671814f , 6.59895802f , 5.40835238f , 3.63577080f , 2.23206282f , 1.08383977f , -0.28453460f , -1.38477814f , -2.64369345f , -3.91356444f , -5.05506754f , -6.35320854f , -7.60085487f , -8.91501999f , -10.29950809f , -12.61900711f , -13.07838917f , -14.44057560f , -15.59240627f , -16.55293274f , + 24.60115242f , 11.35327435f , 6.30881643f , 4.50763512f , 0.50214702f , -0.71103203f , 2.54261613f , -0.67276359f , -1.09342635f , 1.93361044f , 1.37798584f , 1.15170944f , 1.77881491f , -0.16942300f , -3.11068201f , -2.93669724f , -0.59286201f , 1.04607284f , 4.16106987f , 6.48291349f , 11.32464409f , 15.29464436f , 15.33285236f , 7.41661787f , +}; + +const float cdk_37bits_1[3072] = +{ + 2.95778982f , 10.56049102f , 13.09386355f , 11.08385962f , 10.88871781f , 10.92789554f , 9.47024852f , 7.50377851f , 7.19700973f , 4.42757028f , 1.25511814f , -2.60106001f , -6.04950165f , -7.63603604f , -10.41446639f , -11.12590625f , -13.84344441f , -18.68891181f , -23.55780389f , -29.45805147f , -31.65253302f , -32.27424892f , -35.22751137f , -36.90949842f , + 17.21398978f , 22.50723507f , 17.78339684f , 15.22053850f , 11.61821405f , 7.94613723f , 7.75072026f , 6.23305331f , 5.76430087f , 4.13707869f , 0.16499081f , -2.39493762f , -1.55086212f , -3.50433708f , -8.18443711f , -11.97061123f , -16.00947999f , -20.53183145f , -25.24387497f , -29.42436369f , -32.38843392f , -36.11523183f , -39.31249120f , -40.92553153f , + 16.16413908f , 12.51338319f , 10.81668845f , 7.51107282f , 8.58783122f , 9.70942586f , 8.90484747f , 7.74361213f , 8.38927229f , 6.09180806f , 2.25606211f , -1.80804139f , -5.77866789f , -6.64266134f , -10.11888694f , -12.07031815f , -15.26437992f , -20.26969656f , -25.12160881f , -31.11024903f , -33.35847205f , -33.13640725f , -35.95124987f , -37.90657962f , + 33.31978298f , 27.26394617f , 24.25514764f , 20.23232332f , 16.65548737f , 15.67786748f , 13.12878045f , 12.68415364f , 8.46975797f , 6.86052690f , 1.44223072f , -3.05984201f , -6.92484285f , -10.16404365f , -13.70298321f , -18.48343165f , -22.58372752f , -26.62074680f , -30.39592772f , -34.37439216f , -36.06769058f , -38.82086191f , -40.35157222f , -41.14327920f , + -10.92203045f , 3.01052036f , 7.74241345f , 9.28295437f , 6.38021756f , 11.19483089f , 9.71179193f , 7.58317778f , 0.03720981f , 2.75397106f , -1.50772774f , -2.01443682f , -2.44887133f , -6.15187538f , -8.81821668f , -8.69151269f , -8.02852922f , -11.09910056f , -13.17097763f , -13.93076356f , -13.66079044f , -16.47777711f , -18.46333278f , -20.06869553f , + 33.16037159f , 28.50574364f , 18.84668394f , 16.14503275f , 12.64238398f , 8.82733160f , 8.27164568f , 6.62567905f , 6.59003037f , 4.47312530f , 0.90824775f , -2.49975515f , -1.08141480f , -3.20431000f , -9.25248952f , -13.89338354f , -18.40719472f , -22.60361057f , -27.04357211f , -31.31499557f , -33.93185338f , -37.43894780f , -40.22405388f , -41.64367850f , + 27.31804653f , 14.89045549f , 10.86226202f , 8.23925819f , 7.20277478f , 6.05860544f , 5.52091762f , 4.91558992f , 4.25466169f , 3.41244595f , 1.84809938f , 0.56793582f , -2.09446303f , -5.61345827f , -7.92063692f , -8.33385890f , -9.81872455f , -14.00821261f , -17.95712781f , -19.97458899f , -22.84515408f , -26.34052831f , -31.61432841f , -36.58172847f , + 41.62594036f , 30.53353379f , 27.89510180f , 24.11265594f , 18.43485443f , 15.64729005f , 13.50845997f , 10.26280433f , 8.91720676f , 5.83154831f , 0.58848737f , -2.93497066f , -7.66347118f , -10.65504548f , -14.43162023f , -17.54532056f , -19.96025099f , -21.34714524f , -24.14933678f , -25.76118364f , -25.95869147f , -27.17577493f , -27.71455668f , -28.20012422f , + -2.78784194f , 8.02032552f , 10.68963597f , 6.42169471f , 8.39643500f , 5.92698403f , 3.72431779f , 2.34240994f , 2.84441568f , 2.28173308f , 0.51005528f , -0.63277332f , -1.88760888f , -3.64699895f , -6.19490118f , -6.91564436f , -6.74837856f , -9.01957311f , -13.08326862f , -15.61846381f , -17.51686622f , -20.98788704f , -24.84189318f , -27.88764499f , + 15.22736138f , 21.67028596f , 22.69998521f , 19.32303652f , 16.57824995f , 14.43971050f , 12.86116984f , 12.06004138f , 8.96691160f , 5.75441483f , 0.69857059f , -2.99592995f , -6.37751956f , -10.52101418f , -13.54087476f , -17.17818777f , -20.74546985f , -23.38284886f , -27.16166346f , -32.39741856f , -34.96265685f , -38.29574314f , -40.21463793f , -40.97396233f , + 9.26133859f , 10.07373727f , 10.66915549f , 8.57462295f , 7.07983445f , 6.08004124f , 5.43616008f , 4.66385278f , 4.13923283f , 3.46291473f , 2.00919193f , 0.41431808f , -2.15659988f , -5.73419766f , -7.77729962f , -8.10963302f , -9.50797759f , -13.76609560f , -17.88454433f , -20.18355620f , -22.78079775f , -26.25300986f , -31.65196065f , -36.72266405f , + 26.92737845f , 27.50669000f , 26.91247977f , 21.31279552f , 16.15678270f , 12.72639800f , 8.67528477f , 8.63540827f , 6.12171634f , 5.39466263f , 2.40935018f , -2.03514541f , -5.98268282f , -9.33268447f , -11.64966136f , -14.87079782f , -16.24856435f , -18.12429449f , -20.78266693f , -23.71237445f , -24.73440188f , -27.34821266f , -28.25918906f , -28.93790683f , + 4.90379335f , 9.93686137f , 10.91780723f , 9.09752074f , 8.60650951f , 8.80459898f , 8.14900070f , 8.09228751f , 4.14934489f , 1.56227390f , 0.22948186f , -2.11175133f , -3.74247153f , -6.07379086f , -7.30507236f , -9.28287821f , -11.07748811f , -12.71211521f , -13.84649241f , -14.34403824f , -15.35123200f , -17.12232100f , -20.33875194f , -23.90062854f , + 34.56400510f , 28.64513545f , 19.89686686f , 16.71498339f , 14.13374646f , 9.59301176f , 8.64527668f , 7.89097544f , 7.45460471f , 4.94035649f , 1.12449009f , -1.91803209f , -2.36876539f , -4.85907115f , -10.96920929f , -15.11783181f , -18.54964139f , -22.92691742f , -27.54026485f , -32.37334407f , -34.34801279f , -37.11646404f , -38.85197445f , -40.08034397f , + 21.85246210f , 14.72764339f , 11.27302628f , 9.14638512f , 8.54804115f , 8.77093797f , 8.12903725f , 8.26861602f , 4.19886932f , 1.54799726f , 0.20257140f , -1.95701999f , -3.69888430f , -6.13502639f , -7.32329151f , -9.38507779f , -11.16665977f , -12.74666897f , -13.89635990f , -14.42352149f , -15.69403582f , -17.31656047f , -20.46657786f , -24.00174177f , + 42.72694479f , 31.23947048f , 24.43494280f , 19.72208465f , 15.30350682f , 10.47491489f , 7.32088994f , 10.21936673f , 9.85497717f , 5.26501746f , 1.65994049f , -1.03290160f , -4.60874619f , -8.54769573f , -14.17151340f , -15.71521704f , -16.02262568f , -18.90844987f , -24.28632557f , -26.72718508f , -27.02265332f , -28.78362362f , -30.43253072f , -32.28558858f , + -0.39765072f , 7.11128294f , 8.77607625f , 6.97094061f , 6.49768999f , 5.29876062f , 5.33292418f , 5.12420845f , 5.06120539f , 3.76514540f , 1.86852875f , 0.36828311f , -2.70182085f , -4.67846439f , -6.65927858f , -8.64219681f , -10.63500087f , -13.14101813f , -15.41381490f , -18.10176174f , -22.39767659f , -26.30065166f , -30.06922086f , -34.02575582f , + 24.65122317f , 23.93886440f , 24.33639262f , 20.20634124f , 14.95533543f , 10.67440066f , 7.90685648f , 7.77227130f , 4.69229603f , 3.94984243f , 1.03135714f , -2.78561381f , -5.59708858f , -8.11252879f , -10.03836955f , -12.17557001f , -12.27299654f , -12.23090635f , -14.81077879f , -18.41474220f , -21.95921345f , -26.31237335f , -28.83347746f , -30.57799152f , + 15.48674375f , 10.58586035f , 8.41258222f , 6.11115928f , 7.26712645f , 7.70076576f , 6.51745234f , 4.83537618f , 3.78315908f , 2.87162280f , 1.60923393f , 0.07194700f , -4.00474978f , -3.57899280f , -6.50550572f , -8.00337288f , -12.56429875f , -16.64572160f , -21.77660604f , -29.00324770f , -29.28924218f , -28.45842093f , -31.46000362f , -33.72961920f , + 31.66756941f , 26.50681469f , 23.07696706f , 19.47940753f , 16.43776948f , 14.65422928f , 13.13762571f , 12.13565647f , 9.05541090f , 5.85409354f , 0.53053075f , -3.03585502f , -6.54517878f , -10.70179318f , -13.64861349f , -17.10229453f , -20.77152138f , -23.04102596f , -26.76284884f , -32.09288570f , -34.95454717f , -38.37953105f , -40.31456890f , -41.06305403f , + -4.57998646f , 6.78815016f , 11.60677893f , 12.12189632f , 10.03649399f , 6.73163226f , 5.60997256f , 3.61382681f , 1.07119505f , 1.44124760f , -0.36649688f , -1.93594310f , -2.67098539f , -3.97236341f , -4.49309238f , -7.67841048f , -7.38721745f , -9.04687595f , -10.64729812f , -12.35782845f , -15.80889240f , -18.10394377f , -20.75255913f , -23.16714596f , + 32.06565538f , 26.34062469f , 17.62317465f , 14.54318257f , 11.33965592f , 7.22380894f , 6.69999570f , 5.16548324f , 5.32078994f , 3.68894995f , 0.21139809f , -1.89643313f , -1.43729232f , -3.38299704f , -8.16315990f , -10.90725548f , -13.86285241f , -19.27930679f , -24.24221687f , -29.37957484f , -32.97371289f , -37.01956565f , -40.64301363f , -42.42283871f , + 27.34861464f , 17.35254831f , 14.71216625f , 11.21480476f , 9.71751794f , 8.92216110f , 7.88950008f , 4.72051984f , 2.08541644f , 1.24484417f , -0.29448212f , -3.22367745f , -4.12078688f , -4.51431029f , -5.02457729f , -7.46382757f , -9.93828200f , -11.94075167f , -14.42548881f , -16.83893529f , -20.57517980f , -23.86145012f , -26.35488436f , -28.09220448f , + 43.77568289f , 30.35391726f , 27.63839793f , 23.39292280f , 18.14120263f , 16.09279111f , 13.38540751f , 10.06671431f , 7.94669649f , 4.12623028f , -0.90332148f , -3.32951717f , -7.24035516f , -10.01970377f , -13.39421641f , -16.33052649f , -18.54117920f , -19.77745925f , -22.77363614f , -24.12093907f , -24.21920369f , -25.28960607f , -25.77614399f , -26.25683024f , + 5.79368652f , 12.51991626f , 14.00370768f , 11.32137999f , 9.77109082f , 8.98151357f , 7.49776119f , 4.79998026f , 2.33448317f , 1.18610607f , -0.35969383f , -2.93257557f , -4.07562790f , -4.76160858f , -5.42531466f , -7.40360649f , -9.61250822f , -11.03547938f , -13.14054419f , -15.06085658f , -17.47288279f , -20.42082642f , -22.95063518f , -25.16468847f , + 16.09302292f , 22.55335432f , 23.75600812f , 20.07565839f , 16.86390794f , 15.22041485f , 13.34925505f , 12.47627523f , 8.78929960f , 6.22941075f , 0.65362548f , -3.19021243f , -6.62717988f , -10.64596960f , -13.82088718f , -17.58372103f , -21.71419292f , -24.30895894f , -26.77314588f , -28.87032013f , -30.13179973f , -31.71459259f , -32.84856396f , -33.50577477f , + 16.44441330f , 12.31360615f , 9.71047235f , 7.21837937f , 6.79215980f , 5.58913206f , 5.23450348f , 5.31837117f , 5.47119664f , 3.91860558f , 2.00713858f , 0.29754081f , -2.62407946f , -4.75220497f , -6.96490868f , -9.09693835f , -11.19050998f , -13.60732328f , -15.96794842f , -18.87093112f , -23.15019536f , -27.14449468f , -31.05584505f , -35.00208930f , + 21.56078764f , 25.60904841f , 27.31524375f , 24.74664217f , 19.15754045f , 16.48262030f , 13.62284337f , 10.32185769f , 7.82788054f , 4.56867787f , -0.55500429f , -3.54399244f , -7.74464129f , -10.04653026f , -13.91638701f , -16.89276027f , -19.28210045f , -21.11725885f , -23.80905063f , -25.61468851f , -25.54369860f , -26.75644280f , -27.40565527f , -27.80349551f , + 11.75649526f , 11.59267300f , 11.85607639f , 12.09984636f , 10.17904946f , 6.68242306f , 5.49769393f , 3.62565532f , 1.04153359f , 1.37348105f , -0.36614776f , -1.85988088f , -2.65180489f , -3.95188781f , -4.54582064f , -7.65185164f , -7.37260518f , -8.94498668f , -10.57379044f , -12.29831281f , -15.91573373f , -18.15620068f , -20.77255846f , -23.17991063f , + 35.63174061f , 30.87426279f , 20.05864161f , 16.98958650f , 13.11156738f , 9.37587068f , 8.39373792f , 6.91457513f , 7.06726843f , 4.45504564f , 0.31410924f , -2.55476072f , -1.55052341f , -3.58183174f , -10.02850753f , -13.83773408f , -18.07893844f , -21.87127412f , -26.40618053f , -30.05923316f , -32.16211735f , -34.97392895f , -36.96538585f , -38.31916152f , + 22.45827967f , 18.85001245f , 13.60039332f , 10.10815816f , 9.34790218f , 6.59206524f , 5.06185868f , 4.27885917f , 3.12432252f , 2.43301895f , 0.16458112f , -0.87956151f , -3.52884867f , -4.30776590f , -5.96584396f , -7.24696688f , -9.07355786f , -10.64880142f , -12.04156041f , -13.57831230f , -16.13223545f , -19.28691238f , -20.73379126f , -22.35985284f , + 45.50285910f , 30.56079275f , 25.12585245f , 19.34243209f , 14.67812492f , 11.09479624f , 7.62809337f , 7.36329508f , 5.02791068f , 4.57220923f , 1.95015079f , -1.57507512f , -5.20307171f , -7.99911947f , -9.95812261f , -13.13787688f , -14.44121237f , -16.19333355f , -19.15028237f , -22.75607672f , -25.37417688f , -27.76304019f , -28.42538941f , -29.09271083f , + -0.20862409f , 7.40922209f , 9.52611206f , 7.19556599f , 8.56285670f , 9.23113851f , 8.29119614f , 6.74033461f , 7.39436505f , 4.76996743f , 1.52467647f , -2.37784656f , -6.09813737f , -6.29918182f , -8.30626415f , -10.26550962f , -13.16761101f , -17.25290821f , -21.82832704f , -28.08208094f , -29.69995762f , -30.02997066f , -32.54067640f , -34.86791052f , + 20.15336204f , 23.69787743f , 20.03743258f , 17.32388877f , 13.85816349f , 9.75929930f , 8.81062377f , 7.33399060f , 7.03590133f , 4.83049697f , 0.70944621f , -2.33770508f , -2.40423376f , -4.83395025f , -10.23084612f , -14.36365636f , -18.16750414f , -21.75786888f , -26.07319165f , -30.47064791f , -32.03827614f , -34.62324863f , -36.38403786f , -37.62380175f , + 21.02807550f , 15.43123168f , 13.19159292f , 11.05909310f , 9.93532083f , 10.14330557f , 8.44788836f , 7.05092375f , 6.65547179f , 3.80156734f , 1.01028469f , -2.51036572f , -5.52907299f , -7.16917980f , -9.69618129f , -9.79583611f , -12.34407663f , -16.35321338f , -21.00738251f , -27.34102498f , -30.48319293f , -30.90104975f , -33.93924526f , -35.92883268f , + 33.46103317f , 28.05909534f , 25.27576527f , 21.45366856f , 18.39016725f , 16.16268691f , 14.43168731f , 12.88073327f , 9.27668693f , 6.28692861f , 0.27771848f , -3.24264663f , -7.02703161f , -11.49310707f , -14.63223263f , -18.01065380f , -23.30098657f , -26.04536683f , -29.97889152f , -33.31061266f , -34.90527704f , -37.51005914f , -38.89607504f , -39.43668242f , + -6.19448103f , 7.00670386f , 6.42929262f , 11.44842292f , 10.59782711f , 3.51908910f , 5.03700693f , 11.99440282f , 2.46784279f , 2.52636549f , 0.19509676f , -0.66292825f , -3.57724994f , -4.27935354f , -7.71003982f , -9.31027578f , -10.79777387f , -12.03284160f , -14.50955075f , -15.24259860f , -15.04293408f , -17.84913152f , -19.24800026f , -20.43127990f , + 34.36219386f , 29.15654122f , 17.89907772f , 15.96853719f , 12.24737290f , 8.58997407f , 8.02028124f , 6.73852407f , 6.68229615f , 4.41515543f , 0.31647818f , -2.71422396f , -1.11008623f , -3.15418403f , -8.78373906f , -13.46164937f , -17.78623382f , -22.03141049f , -26.52011865f , -30.42263732f , -32.88924845f , -36.52063092f , -39.44879402f , -41.00582791f , + 28.59389870f , 16.57976885f , 11.69506951f , 9.00946677f , 6.59434708f , 5.58892350f , 5.15576244f , 4.26874238f , 3.83962965f , 3.10490992f , 1.74950191f , 0.21359494f , -2.34614415f , -5.90830965f , -7.32978245f , -6.79210755f , -8.13921426f , -12.39307835f , -16.42105838f , -17.81533132f , -20.43309456f , -23.50336304f , -28.11010949f , -32.19800165f , + 42.18709382f , 31.66042119f , 28.18576191f , 24.02454209f , 17.80243401f , 14.32604318f , 12.38219020f , 9.68299766f , 9.84153789f , 7.22418488f , 1.90320264f , -0.79109427f , -7.30502888f , -10.99217358f , -15.03902326f , -18.25651222f , -20.77870269f , -22.27969332f , -25.21134893f , -26.73864852f , -26.81597564f , -28.06561283f , -28.74871236f , -29.19027505f , + 3.14453423f , 9.82704694f , 10.42102234f , 7.53076819f , 6.65445918f , 5.42078795f , 4.35248487f , 3.38200688f , 3.34653224f , 2.23758939f , 0.98007038f , -0.82512415f , -3.06552968f , -3.74092446f , -5.19946109f , -6.26762478f , -7.27519640f , -9.56355666f , -11.49652218f , -12.93977382f , -15.16570550f , -17.89500321f , -20.88144101f , -24.27090982f , + 16.89397941f , 22.41751392f , 23.75354684f , 20.15652247f , 16.71460178f , 15.68435339f , 13.05195327f , 12.59734003f , 8.36320984f , 6.61926140f , 1.34089883f , -3.04095047f , -6.87072914f , -10.11874127f , -13.60230073f , -18.32905014f , -22.40986754f , -26.40241648f , -30.22653356f , -34.35524827f , -35.82875887f , -38.56697745f , -40.04466299f , -40.77890542f , + 14.06040489f , 12.38456984f , 11.38443857f , 6.43429982f , 8.36024783f , 5.74773204f , 3.64617779f , 2.27891511f , 2.88575114f , 2.28853033f , 0.47176709f , -0.58104559f , -1.80751192f , -3.57542575f , -6.25556579f , -6.84838146f , -6.61115232f , -8.86429480f , -13.12243997f , -15.53130507f , -17.39294606f , -20.82817234f , -24.80352676f , -27.90102832f , + 29.08127657f , 30.25267470f , 28.50445786f , 22.88590940f , 16.95382919f , 12.99666306f , 9.24548766f , 10.17354633f , 7.44385880f , 5.98968070f , 1.98160871f , -1.99320988f , -6.45502374f , -10.08296200f , -12.58332338f , -15.94023376f , -17.72993147f , -19.46222023f , -22.64433239f , -25.73538061f , -25.10103202f , -27.34115443f , -28.00719352f , -28.71283003f , + 10.44191657f , 11.89739900f , 6.63050752f , 11.66862838f , 10.95389970f , 3.62853936f , 5.27338772f , 12.22397146f , 2.38303236f , 2.27598761f , 0.20057759f , -0.69953882f , -3.74592500f , -4.11363308f , -7.73279200f , -9.56396050f , -11.08358715f , -12.21155490f , -14.86254610f , -15.45527754f , -15.28325702f , -17.98672312f , -19.17774681f , -20.23644212f , + 35.53276331f , 29.79176377f , 19.61709874f , 16.86634001f , 13.09981576f , 9.35098387f , 8.47743299f , 7.04997634f , 7.03070014f , 4.96729480f , 0.92976195f , -2.31151272f , -1.83127970f , -4.34635324f , -9.67542557f , -14.26377116f , -18.47764765f , -22.80532113f , -27.40873215f , -31.63558241f , -33.75926234f , -36.57926085f , -38.64751733f , -39.92187198f , + 19.57623370f , 14.52227951f , 10.90006748f , 7.46479458f , 6.57710504f , 5.35248052f , 4.32022732f , 3.44261943f , 3.11088406f , 2.14252838f , 0.91565155f , -0.88167185f , -3.01132437f , -3.66994851f , -5.19376018f , -6.09616750f , -7.00842420f , -9.47621384f , -11.55078876f , -12.93214130f , -15.11703243f , -17.74349778f , -20.81631949f , -24.26610975f , + 45.46539087f , 33.65225910f , 27.04759024f , 20.37287228f , 15.20605258f , 10.95754596f , 8.25353280f , 10.41134779f , 9.16332898f , 5.00593619f , 1.56893245f , -0.96934543f , -4.76115225f , -9.35265480f , -13.96830603f , -15.58493281f , -15.93026458f , -18.72056170f , -22.62999991f , -24.01724401f , -24.13966976f , -25.75662986f , -27.30657872f , -29.31976842f , + 3.35383892f , 10.46089277f , 12.67572651f , 10.67316057f , 8.86420657f , 7.41699857f , 6.40472576f , 5.55584594f , 4.78140149f , 3.39101090f , 1.64891901f , -0.88431535f , -3.41794053f , -5.52966105f , -7.12950981f , -9.73843277f , -11.36318390f , -12.90076410f , -15.02653519f , -17.80793193f , -20.85950171f , -24.60915288f , -28.33117068f , -31.97961671f , + 24.16381226f , 26.61189391f , 24.86498593f , 19.87730202f , 15.18991454f , 10.98879994f , 7.42531150f , 10.49136744f , 9.62334804f , 4.97806393f , 1.38953872f , -1.07543238f , -4.87438861f , -8.84994346f , -14.12865608f , -15.38136709f , -15.77648418f , -18.65254160f , -24.07064465f , -26.65375941f , -26.62799211f , -28.37449714f , -30.00703668f , -31.95561063f , + 16.73297197f , 13.40079340f , 11.36295685f , 8.12888004f , 8.67057438f , 9.98791316f , 7.17503401f , 3.41805962f , 3.84708100f , 3.38229324f , 1.69308513f , -2.44779633f , -7.15056120f , -5.22964233f , -5.71002448f , -7.24979808f , -10.38621901f , -12.40506839f , -16.88434384f , -24.40525376f , -27.96468183f , -28.87188624f , -31.73758135f , -34.45997553f , + 36.82320664f , 30.14889839f , 24.36495733f , 19.95821910f , 17.28215670f , 15.34405446f , 12.71014649f , 11.84061146f , 8.74552404f , 5.19431776f , 0.62656711f , -3.30567052f , -7.09245555f , -11.63075940f , -14.43930927f , -16.55893715f , -18.71623060f , -21.39863923f , -24.41215684f , -27.71989721f , -29.44073312f , -31.13601153f , -33.00550113f , -35.01755294f , + -0.75323250f , -0.49333543f , -0.03686038f , 0.00580498f , -0.02595636f , -0.42521553f , -0.11620129f , 0.04925008f , -0.22349130f , -0.41036697f , -0.08797780f , -0.31029326f , -0.33370732f , -0.04414976f , -0.18188899f , -0.39067975f , -0.19015430f , -0.13924769f , -0.07489774f , -0.24338076f , 0.02616867f , -0.90654191f , -0.36674078f , -0.92659945f , + 32.82257425f , 26.93225108f , 17.97275820f , 15.52062575f , 12.24580971f , 7.87298134f , 7.92790101f , 6.69153001f , 6.20377725f , 4.87524910f , 0.20987746f , -2.32068931f , -1.19022086f , -3.62043573f , -8.66527100f , -13.17653707f , -17.05395098f , -21.30672374f , -26.02442938f , -29.84148775f , -32.77866358f , -36.44067731f , -39.64793075f , -41.28669431f , + 23.66104031f , 18.77341211f , 15.43023272f , 11.20366406f , 8.42366176f , 6.11675293f , 5.33405011f , 5.20406381f , 4.67626106f , 3.65065286f , 1.53469689f , -1.60771292f , -3.81129242f , -4.57130038f , -6.33850722f , -8.60971199f , -10.00167377f , -11.97538710f , -14.16507562f , -16.60464075f , -19.14351164f , -22.49496272f , -25.49215425f , -28.47836779f , + 48.83791360f , 34.21172740f , 28.24854170f , 23.78581370f , 19.15275096f , 16.36583739f , 13.52652252f , 12.00825971f , 7.58820783f , 4.57182675f , -0.44096755f , -5.59444127f , -9.20335237f , -11.60423121f , -13.38376584f , -15.82699559f , -17.15943218f , -18.22349154f , -21.00159236f , -23.41802307f , -24.09185136f , -26.12025700f , -26.38389340f , -26.90015217f , + 5.65030538f , 13.78536254f , 12.93384260f , 10.10554338f , 9.25200312f , 6.70079894f , 4.97946459f , 4.14010675f , 3.20266413f , 2.24703740f , 0.17096077f , -0.76854332f , -3.49746682f , -4.40509828f , -5.92984501f , -7.16813639f , -8.92390949f , -10.44235555f , -11.73970476f , -13.07525739f , -15.58860787f , -18.82754905f , -20.11226045f , -21.89670528f , + 20.00764046f , 25.05163905f , 23.67903478f , 19.61532654f , 16.85580272f , 14.84943508f , 12.32422151f , 11.72685290f , 8.55557474f , 4.89724925f , 0.62350153f , -3.12200178f , -6.95129787f , -11.32051330f , -13.87728564f , -16.20738435f , -18.35417789f , -21.22501359f , -24.26412556f , -27.53754401f , -29.04562197f , -30.52655890f , -32.50623950f , -34.76405591f , + 20.12464864f , 15.20430829f , 13.25055947f , 10.65904743f , 8.91134621f , 7.46363884f , 6.44402323f , 5.71195079f , 4.79807746f , 3.49335087f , 1.75260934f , -0.74115357f , -3.42285816f , -5.45747278f , -7.23479115f , -10.08709890f , -11.63154322f , -13.05708157f , -15.18339592f , -18.14822179f , -21.33849269f , -25.01926113f , -28.92560049f , -32.56657725f , + 26.54656966f , 26.13227118f , 27.82488903f , 24.22335030f , 18.87683777f , 16.59425031f , 13.64047520f , 9.75915298f , 7.28698308f , 4.09515905f , -0.71835272f , -3.26926527f , -7.31384281f , -9.98624418f , -13.59589213f , -16.50790941f , -18.86147233f , -20.11404881f , -22.88197092f , -24.35845023f , -23.98592903f , -25.19061201f , -25.66357488f , -26.11120895f , + 16.92428437f , 15.63926123f , 14.68264077f , 9.17511817f , 11.72199221f , 8.73358423f , 5.74525565f , 3.31019020f , 3.82744364f , 2.82061126f , 0.00479914f , -1.62974092f , -3.21227479f , -5.78430830f , -8.71508730f , -8.80926274f , -8.01316743f , -9.54120965f , -13.35104985f , -15.74348284f , -16.40121304f , -19.46521021f , -22.26957651f , -24.80475300f , + 33.27372786f , 28.98123208f , 18.52554956f , 16.22324845f , 11.82428088f , 8.06497636f , 6.95248523f , 6.23909474f , 5.55428912f , 3.52189864f , 0.54297482f , -2.65061141f , -0.24235908f , -2.49418732f , -8.10730403f , -12.50952978f , -16.69612524f , -20.49938193f , -23.81401973f , -26.29697125f , -27.78204736f , -29.60465452f , -31.26624714f , -32.52437926f , + 27.66207964f , 21.38029622f , 15.28817924f , 11.29865816f , 7.24050384f , 4.07114269f , 2.23434724f , 2.00312407f , 2.12063407f , 2.37092879f , 1.11181974f , -0.06676605f , -1.62128339f , -3.18849566f , -4.50247820f , -5.27330824f , -6.50012921f , -8.95962773f , -11.25753877f , -13.15591465f , -15.55510117f , -17.77008388f , -21.51057093f , -23.68928360f , + 46.17063826f , 35.44350933f , 27.63882719f , 20.58749084f , 15.09358456f , 11.34450671f , 8.36303546f , 10.32329718f , 9.40828446f , 4.81846192f , 1.44590103f , -1.30265822f , -4.80681268f , -9.60995360f , -14.00088486f , -15.02315852f , -16.05368713f , -18.40913671f , -21.04455075f , -21.77101439f , -21.86714844f , -23.34699503f , -24.81999799f , -26.75598881f , + 5.55447222f , 11.08900430f , 12.67418749f , 11.37730706f , 10.35233661f , 9.77194599f , 7.54804411f , 5.59512280f , 5.26611322f , 3.61130922f , 1.29867980f , -1.53794101f , -4.94548169f , -6.44099913f , -9.14750567f , -9.26394627f , -12.10780921f , -16.54821135f , -21.09601890f , -27.26975914f , -29.20341664f , -29.16031453f , -32.31338409f , -33.81412751f , + 18.12507160f , 24.70366354f , 18.80553588f , 16.44619360f , 12.73212014f , 8.73243452f , 8.13965750f , 6.85564846f , 6.54211122f , 4.41684143f , 0.86730242f , -2.56492428f , -1.51931938f , -3.44405406f , -9.13992613f , -13.62181635f , -17.99613747f , -22.23637312f , -26.67002377f , -30.83211183f , -32.97908996f , -36.30619371f , -38.88768859f , -40.31682212f , + 19.30313062f , 15.53926343f , 13.90808840f , 11.50585735f , 11.38433252f , 11.23569306f , 9.65078250f , 7.30888386f , 6.96318572f , 4.35594359f , 1.27768650f , -2.51618855f , -6.09345175f , -7.65932096f , -10.43421302f , -11.30754584f , -14.16597758f , -18.97180923f , -23.84334763f , -29.44331171f , -31.44436223f , -32.10318621f , -34.92490176f , -36.47617953f , + 32.84070800f , 26.98843227f , 23.97706735f , 20.09690811f , 17.17772395f , 15.21303519f , 13.42060419f , 12.43874328f , 9.15968596f , 6.16038922f , 0.71905975f , -2.92001972f , -6.40947412f , -10.83784032f , -13.95928861f , -17.62432172f , -22.53835937f , -25.41550617f , -29.42258267f , -33.41667068f , -35.41334436f , -38.22281954f , -39.80199786f , -40.32675160f , + -9.91625093f , 4.80418237f , 9.08604693f , 11.01664820f , 7.24939971f , 12.00629737f , 10.14522962f , 7.79868426f , 0.03388286f , 3.22894410f , -1.49188110f , -1.77551920f , -5.08350600f , -6.11630690f , -8.19142417f , -8.31829806f , -9.48559967f , -10.78591755f , -12.34898021f , -13.04347069f , -12.86564050f , -16.09519878f , -17.66110352f , -20.13284843f , + 33.93076696f , 29.73735327f , 19.23905822f , 17.23103235f , 12.77046694f , 8.83451844f , 8.23785020f , 7.11377423f , 6.72823159f , 4.05823561f , 1.17653434f , -2.62333502f , -1.84527480f , -3.46714831f , -9.29420158f , -13.72585514f , -17.96342825f , -22.04254130f , -26.29305138f , -30.25871596f , -32.43685342f , -36.04907640f , -39.16814132f , -40.73022661f , + 30.53206150f , 19.40488473f , 12.75598255f , 9.25954864f , 6.70414010f , 5.72747123f , 5.03381227f , 4.01075984f , 3.61146616f , 3.58899760f , 2.32432976f , 0.53033441f , -2.14938224f , -5.59608713f , -7.14094606f , -7.65425973f , -8.99080383f , -12.95963757f , -17.18036927f , -19.46195053f , -21.56000305f , -24.52225545f , -30.08064474f , -35.71887681f , + 43.21595883f , 30.91880384f , 28.28763915f , 25.00936743f , 19.09701763f , 16.45025980f , 13.97496410f , 11.13694940f , 8.55554358f , 4.99105536f , -0.75976252f , -4.26698912f , -8.42682321f , -9.48353121f , -14.21251069f , -17.24378853f , -19.81223810f , -21.34834559f , -23.80150703f , -25.40905846f , -25.28209830f , -26.22742436f , -26.66260243f , -27.01651200f , + -0.14361434f , 11.33097675f , 14.22933286f , 9.09701983f , 11.66148024f , 8.76183273f , 5.66551557f , 3.17860698f , 3.87061452f , 2.88805964f , 0.11657889f , -1.62298350f , -3.19956391f , -5.77861831f , -8.72933989f , -8.83773190f , -7.97439380f , -9.53621475f , -13.35824515f , -15.73862835f , -16.23732929f , -19.37222733f , -22.16495373f , -24.69705224f , + 14.97516906f , 20.24358485f , 21.71690634f , 18.67539860f , 16.12099511f , 13.68136380f , 12.06765212f , 10.76593030f , 7.44448363f , 4.69310947f , 0.32375113f , -2.82379840f , -6.24406445f , -9.85549248f , -12.35464306f , -15.66193154f , -18.15727457f , -19.51476533f , -21.69116638f , -26.65585670f , -30.96969557f , -34.93908838f , -37.17487414f , -38.69523980f , + 11.79211750f , 11.97065541f , 11.42461150f , 9.07103015f , 6.75482034f , 5.60897088f , 5.19878959f , 4.12715904f , 3.68541174f , 3.10916340f , 1.75493030f , 0.12722322f , -2.45721866f , -5.96134122f , -7.29240229f , -6.69634000f , -7.95934523f , -12.27446428f , -16.49521939f , -17.81789512f , -20.15378269f , -23.44933417f , -28.12142909f , -32.19480869f , + 31.52643526f , 28.52259080f , 26.69926841f , 20.98459124f , 15.75207892f , 11.93364546f , 8.26555040f , 7.77743568f , 5.47651258f , 4.83040775f , 1.65268569f , -2.13370539f , -5.16522881f , -8.08709801f , -10.71942352f , -14.02185419f , -15.56110704f , -16.98333790f , -19.99452598f , -22.68342788f , -23.41377838f , -25.94358058f , -26.53240068f , -27.12327850f , + 6.80087128f , 11.58644896f , 12.45313320f , 10.29597723f , 9.18481781f , 8.48775117f , 7.26614653f , 5.90419380f , 4.38057275f , 2.43656205f , 0.69276327f , -1.81218785f , -3.96339389f , -5.75303899f , -7.09187068f , -8.88618164f , -10.84611660f , -12.42796224f , -13.13959174f , -13.43223783f , -14.11628112f , -15.89113608f , -18.99839794f , -22.60584539f , + 36.38520889f , 28.78012839f , 21.05496218f , 17.53636167f , 13.96758507f , 11.67472760f , 10.42791533f , 9.67412184f , 7.27606489f , 5.56430120f , 0.35452150f , -3.04945909f , -3.73479650f , -6.39521181f , -11.23696830f , -15.42073952f , -19.10245341f , -22.52588883f , -26.73438324f , -31.13547298f , -32.74648378f , -35.08411011f , -36.64862406f , -37.83303410f , + 23.44391246f , 16.34449728f , 12.74386848f , 10.37728433f , 9.26531402f , 8.62835052f , 7.30803355f , 5.91607884f , 4.36863155f , 2.42037310f , 0.72270664f , -1.87419199f , -3.98816276f , -5.80775521f , -7.13994994f , -8.93853756f , -10.88091925f , -12.48019720f , -13.11652631f , -13.43063220f , -14.21381571f , -15.91218672f , -19.00174998f , -22.61508378f , + 42.41685465f , 32.92785864f , 26.73527519f , 20.02657328f , 15.25763921f , 11.51912083f , 7.75120808f , 10.47560309f , 9.43865509f , 4.72161580f , 1.23456822f , -1.24509427f , -5.12070011f , -8.97924223f , -14.13085652f , -15.32553884f , -15.59705390f , -18.30233488f , -23.33478017f , -25.58695872f , -25.86117061f , -27.64564989f , -29.28904725f , -31.28074013f , + 1.52342001f , 9.12417569f , 10.32715957f , 8.66545459f , 7.07445753f , 5.84320555f , 5.74305920f , 4.78929426f , 4.24381536f , 2.93093263f , 1.43577760f , -0.53860173f , -3.06985625f , -4.84378216f , -6.19218421f , -7.82485861f , -9.59127476f , -11.55775664f , -13.43280469f , -15.63550289f , -19.62772693f , -22.98849208f , -25.64470241f , -28.78809716f , + 25.56643800f , 24.60767519f , 24.69578809f , 19.70646081f , 15.16249776f , 11.52050408f , 7.81769903f , 7.63275125f , 5.49767989f , 4.82720507f , 1.97596070f , -1.66260544f , -5.25016669f , -8.43401653f , -10.50840106f , -13.66164463f , -14.91737550f , -16.34161902f , -19.45629644f , -23.46159848f , -25.62249781f , -27.82515036f , -28.34414019f , -28.79284328f , + 16.92655154f , 13.22739747f , 11.12354116f , 8.43784353f , 9.39924384f , 10.05896738f , 8.60043956f , 6.03413409f , 6.90507663f , 4.38541942f , 1.33274141f , -3.40564903f , -6.91513167f , -6.87459047f , -7.76883773f , -9.68917237f , -12.06267819f , -15.74184854f , -20.57971046f , -26.94266349f , -28.91713407f , -29.90809627f , -32.33980009f , -34.78712756f , + 31.86686358f , 25.05708453f , 21.93386932f , 18.59721235f , 16.14828273f , 13.65996344f , 12.23768162f , 10.88830652f , 7.52143926f , 4.65925062f , 0.21911333f , -2.95634076f , -6.28361110f , -9.89608579f , -12.31443795f , -15.63623136f , -18.24730809f , -19.62072228f , -21.80325803f , -26.65045940f , -31.07260802f , -34.93098644f , -37.15982288f , -38.71632279f , + -1.13403660f , 8.44528954f , 11.51295187f , 14.00328114f , 13.22245841f , 6.86239877f , 5.34172769f , 2.20794235f , 0.66973127f , 0.80995393f , 0.18013549f , -1.34499371f , -2.89430852f , -4.11662287f , -4.87021345f , -7.99460808f , -8.07372401f , -10.75957729f , -12.01649380f , -13.25826273f , -16.07989264f , -18.05984187f , -19.66161990f , -20.39890287f , + 34.47278093f , 29.24647924f , 19.01794852f , 15.12449850f , 12.02160432f , 7.97153847f , 7.45763494f , 5.89473413f , 5.37914684f , 4.00235938f , 0.64484508f , -2.70552406f , -1.74008061f , -3.83315860f , -8.38542072f , -11.12882737f , -15.57900872f , -20.44309400f , -25.22215650f , -30.01421316f , -32.58722714f , -35.83261388f , -38.09733270f , -39.57915419f , + 26.99752631f , 17.33775755f , 13.92510612f , 10.93298244f , 9.54482419f , 7.98334199f , 6.83019538f , 4.82308161f , 2.24070293f , 0.99075525f , -1.02697127f , -2.29004143f , -3.77731663f , -5.16939314f , -6.16294107f , -6.18510893f , -7.80109455f , -10.31816129f , -12.42321458f , -14.13119051f , -16.75176785f , -19.57160270f , -22.21041760f , -24.43862133f , + 42.61148531f , 31.03862448f , 28.85875173f , 25.19534132f , 19.51936632f , 17.22593169f , 13.88213981f , 9.45821554f , 6.10128356f , 3.64177773f , -0.92329563f , -2.97749460f , -7.09143508f , -9.90051943f , -13.44778189f , -16.62642688f , -18.86184149f , -20.09465179f , -22.86181406f , -24.16906530f , -24.29058326f , -25.46900644f , -25.99854039f , -26.44256368f , + 11.21919787f , 12.93487301f , 14.44441998f , 11.21144561f , 9.65171981f , 8.40946672f , 7.55500249f , 5.20337067f , 2.41664302f , 1.45692356f , -0.41811214f , -3.03866042f , -4.18715822f , -4.62852017f , -5.34679829f , -7.37187974f , -9.70194778f , -11.87551235f , -14.41976938f , -16.77473090f , -20.18921925f , -23.53459021f , -26.08250760f , -28.00378414f , + 20.34283034f , 23.93100647f , 23.37840521f , 19.69998040f , 16.97580649f , 15.22176840f , 12.49942414f , 11.65471077f , 8.40962769f , 5.04811003f , 0.69748903f , -3.16572674f , -7.04148304f , -11.24778876f , -13.98941379f , -16.42484438f , -18.63762955f , -20.97458282f , -23.23612236f , -25.18653947f , -26.21052089f , -27.41104425f , -28.62675281f , -29.47926632f , + 16.10744102f , 12.46174606f , 9.67751113f , 7.41625956f , 6.37054729f , 5.04682742f , 5.17633155f , 4.68688374f , 3.91606026f , 3.15494649f , 1.41414217f , -0.14124367f , -2.67444251f , -4.50662805f , -5.84468690f , -7.56186331f , -9.03680543f , -11.41274706f , -13.28658702f , -15.69552507f , -20.26071976f , -23.69377768f , -26.71593694f , -30.31014067f , + 23.92977739f , 27.36060494f , 28.84534340f , 25.31470096f , 19.06231769f , 15.59405931f , 13.34476843f , 10.49105930f , 10.02936877f , 7.13162822f , 1.31449322f , -2.20667410f , -8.24469533f , -11.78467489f , -15.48551597f , -18.43809063f , -20.80800912f , -22.21620783f , -24.85301893f , -26.38738069f , -25.80522754f , -27.00307256f , -27.56365136f , -28.00697638f , + 14.20627416f , 13.22102035f , 12.02604633f , 14.08327071f , 13.26998454f , 6.88224307f , 5.35679783f , 2.25352772f , 0.65358807f , 0.88975002f , 0.25204959f , -1.26498593f , -2.99170955f , -4.16405714f , -4.90721314f , -8.09596924f , -8.13409888f , -10.82708078f , -12.07413388f , -13.34328963f , -16.41337023f , -18.35676002f , -19.98799588f , -20.75791138f , + 35.53474913f , 29.48558719f , 19.65603645f , 16.46619256f , 12.12345599f , 8.85911530f , 8.44629251f , 7.05107660f , 6.71696658f , 4.07340114f , 1.41090109f , -2.86480122f , -1.47018231f , -3.19146903f , -9.63933408f , -13.43801687f , -18.07739816f , -21.62350791f , -25.40446924f , -28.56460703f , -30.18164019f , -32.53467864f , -34.28547688f , -35.28943834f , + 25.00794399f , 21.33869877f , 16.33988340f , 13.32545569f , 11.45579996f , 9.10207550f , 5.25001638f , 3.47011991f , 4.05816364f , 1.86646664f , -0.86488053f , -3.00452324f , -3.76486650f , -4.79552937f , -6.02719617f , -7.73977293f , -9.00587006f , -9.73374090f , -11.85870497f , -14.34560315f , -16.77881295f , -19.01848975f , -21.05935919f , -22.79963588f , + 43.77792792f , 31.32894231f , 26.45922262f , 21.35876446f , 15.14525981f , 10.71588831f , 8.36941090f , 8.13517319f , 4.60128461f , 4.27211986f , 0.48686102f , -2.99834845f , -5.70951224f , -8.40090526f , -10.59412598f , -12.10770405f , -11.91522373f , -11.91518882f , -14.41049054f , -17.78623890f , -21.49234475f , -25.81448584f , -28.36724870f , -30.21155944f , + 1.50464115f , 9.93376270f , 11.74048494f , 9.30038969f , 9.79598610f , 10.20363220f , 7.85569223f , 4.26334672f , 4.97315307f , 3.54446278f , 1.25546594f , -3.09504089f , -6.84943958f , -5.99780503f , -6.73288678f , -8.33022105f , -10.88645558f , -13.74251357f , -18.59070672f , -25.24686013f , -27.59378675f , -28.40807602f , -30.81519883f , -33.03504083f , + 19.29716892f , 22.72202601f , 17.97653030f , 16.27096251f , 12.41466110f , 8.84546373f , 8.15910118f , 6.66039787f , 6.35335478f , 4.08653893f , 0.72117759f , -2.80728034f , -1.28889621f , -3.09741558f , -8.84182975f , -13.43826617f , -17.76712819f , -21.05170423f , -24.61965449f , -27.56558965f , -28.70738278f , -30.61253475f , -32.09933492f , -32.92557847f , + 22.91112025f , 16.28797584f , 13.32980234f , 11.77954583f , 11.10520613f , 9.60502556f , 6.99639805f , 4.92750381f , 4.37578890f , 3.30304792f , 1.59780404f , -0.85650398f , -4.51942915f , -6.12826489f , -9.01178894f , -9.24740841f , -12.14748862f , -16.76564804f , -21.19272621f , -27.28665412f , -29.08952731f , -28.60120961f , -31.88653060f , -33.18962566f , + 33.45651993f , 27.28201548f , 24.14734641f , 20.06703472f , 17.00409549f , 15.37948573f , 13.16136491f , 12.54752730f , 8.51110832f , 6.15322442f , 1.01576259f , -3.20755791f , -6.86882472f , -10.60714935f , -13.86074399f , -17.81294984f , -21.41525794f , -23.90831312f , -26.23400053f , -28.17563657f , -29.78113366f , -31.33044221f , -32.48533160f , -33.17676836f , + -1.33562639f , 7.12695001f , 9.13702377f , 12.15068677f , 10.08162039f , 4.24738369f , 5.64945952f , 9.32178364f , 3.03127020f , 1.38560225f , -0.47615923f , -1.64981857f , -3.39596649f , -4.05192511f , -6.43198431f , -7.97537953f , -9.73574405f , -10.49517550f , -11.53586670f , -11.55974030f , -11.95164592f , -14.31159626f , -16.17106881f , -17.68912312f , + 35.41108122f , 29.91060467f , 19.58523453f , 16.06777717f , 12.57822747f , 8.35950205f , 8.09246540f , 6.67806922f , 5.88366701f , 4.60628742f , 0.66866287f , -2.63518420f , -1.20919288f , -3.25276235f , -8.81348472f , -13.41243642f , -17.54390333f , -21.59153299f , -26.13142590f , -30.39899536f , -32.82264487f , -35.85023060f , -38.02784458f , -39.40873711f , + 28.20606627f , 15.99154594f , 10.90529614f , 8.27787590f , 6.06401205f , 5.06158745f , 4.71175812f , 3.71857258f , 3.29421131f , 3.15470022f , 1.47961235f , -0.11358400f , -2.36135275f , -5.91849835f , -7.03135770f , -5.55512296f , -6.50513100f , -10.60214350f , -14.97482271f , -15.31088270f , -17.34686348f , -20.99732736f , -25.70312725f , -29.22139957f , + 42.93694373f , 32.74699191f , 30.21736822f , 26.00007059f , 19.54808802f , 16.15153602f , 13.70906743f , 10.84988327f , 10.20654657f , 7.38885117f , 1.18592616f , -2.68553419f , -8.73683094f , -12.15884936f , -15.82753433f , -18.59595794f , -21.03522899f , -22.52642663f , -25.16717079f , -26.41557750f , -26.29502925f , -27.33330821f , -27.87099339f , -28.30239553f , + 6.98493107f , 12.11140261f , 12.92505832f , 10.63602573f , 9.29436222f , 7.80676869f , 6.62557343f , 4.68392090f , 2.17174988f , 1.01311116f , -1.11858724f , -2.22498325f , -3.56605973f , -4.96869680f , -6.04787508f , -6.05424850f , -7.61493730f , -9.33729157f , -10.80071194f , -12.03282608f , -14.46539670f , -17.02917589f , -19.33639362f , -21.15590027f , + 16.58485816f , 23.25532800f , 24.92928523f , 21.35853037f , 18.27283576f , 16.09710359f , 14.23738656f , 12.78815582f , 9.26070976f , 6.16634740f , 0.30018833f , -3.21368036f , -6.95869200f , -11.45995031f , -14.49141925f , -17.86218539f , -23.13676669f , -25.83259792f , -29.74871192f , -33.41994284f , -34.94573093f , -37.66843375f , -39.07414904f , -39.56312642f , + 19.19373953f , 14.21085832f , 10.67306675f , 8.33934581f , 6.82717763f , 6.09582415f , 5.89997396f , 4.53145606f , 4.46589963f , 2.98486276f , 1.45382349f , -0.47196753f , -3.08165487f , -4.80601244f , -6.35558877f , -7.88794845f , -9.65590673f , -11.39978404f , -12.89635391f , -14.32655348f , -17.79398377f , -21.03259304f , -23.41750892f , -26.20513637f , + 29.53404537f , 30.67650669f , 27.35804255f , 20.58387049f , 15.13774878f , 11.44742263f , 8.37085526f , 10.32676908f , 9.44758339f , 4.78688526f , 1.42891547f , -1.32094691f , -4.89316199f , -9.59224642f , -14.04691133f , -15.02972510f , -16.06330505f , -18.39580808f , -21.09539458f , -21.98720102f , -21.73206018f , -23.31133245f , -24.77510819f , -26.73382495f , + 8.21213806f , 10.71817099f , 6.95322984f , 10.27747529f , 8.84487068f , 3.08387427f , 4.45029470f , 10.93157046f , 2.20726443f , 2.60772269f , 0.11878151f , -0.75484803f , -2.80874481f , -3.82230411f , -6.83748866f , -8.27100427f , -9.75013326f , -11.03913114f , -12.78391580f , -13.82412848f , -14.12344338f , -16.73927451f , -18.69924100f , -20.13526564f , + 36.59329684f , 30.98184338f , 20.31505022f , 15.92064718f , 13.03648432f , 8.83096086f , 8.56348539f , 7.43266836f , 6.82375344f , 4.40627973f , 1.13184165f , -3.01500873f , -1.77040231f , -3.69259653f , -9.49579170f , -13.95449102f , -18.29710034f , -22.56971615f , -26.64665710f , -30.91115675f , -33.15396332f , -36.23947175f , -38.66101864f , -40.00954322f , + 21.55198111f , 18.08013792f , 12.86298781f , 10.08865136f , 9.05061804f , 6.54215134f , 4.72951143f , 3.72642094f , 2.85320817f , 1.71125125f , -0.07271721f , -0.95539550f , -3.50605983f , -4.43298306f , -5.50932418f , -6.32571893f , -7.81088376f , -8.89702447f , -9.73519051f , -10.67801247f , -13.58487694f , -16.68643366f , -17.77012871f , -20.05291511f , + 46.89729788f , 35.56958745f , 28.59584038f , 22.30896946f , 16.77464328f , 13.26417085f , 9.50081776f , 9.90989766f , 7.34552811f , 5.94667087f , 1.99541819f , -1.96361481f , -6.27398279f , -10.07653618f , -12.56282109f , -16.11090729f , -17.74907160f , -19.50939014f , -22.57118303f , -25.05439958f , -25.40229780f , -27.63187647f , -28.24619732f , -28.92835915f , + 7.04882350f , 14.81563453f , 15.61978870f , 11.48753791f , 8.54260976f , 6.22345107f , 5.45372753f , 5.28049811f , 4.65171365f , 3.62223181f , 1.43071415f , -1.72597185f , -3.88591530f , -4.61140675f , -6.49788570f , -8.59851355f , -9.88533610f , -11.88847906f , -14.04273862f , -16.54736577f , -19.07821687f , -22.45007228f , -25.58564675f , -28.56726867f , + 26.62300533f , 28.26693809f , 26.50090754f , 20.40002747f , 15.09430263f , 11.11188625f , 8.11413871f , 10.45873727f , 9.34406319f , 4.93078412f , 1.46033398f , -1.08739740f , -4.89307642f , -9.31800578f , -13.94736720f , -15.44189741f , -15.82638440f , -18.64996439f , -23.01530348f , -24.89778906f , -24.73159812f , -26.54494768f , -28.17985037f , -30.12506435f , + 18.67019979f , 15.08336786f , 12.94476580f , 10.08150497f , 10.00925560f , 9.67310787f , 7.30307309f , 4.52404204f , 5.06127062f , 3.29409992f , 1.11564223f , -2.83692116f , -5.88020005f , -6.25987188f , -7.10071550f , -8.19345902f , -10.70954639f , -13.53857613f , -18.30301326f , -24.52520568f , -27.34703702f , -27.97535570f , -30.09726173f , -32.24832937f , + 36.04980859f , 29.26056864f , 23.78078855f , 19.63374982f , 16.81000279f , 14.81984984f , 12.41523810f , 11.85197437f , 8.58759306f , 5.22704793f , 0.47511965f , -3.18839218f , -7.11099580f , -11.31735229f , -13.99002045f , -16.24783283f , -18.33216567f , -20.74910417f , -23.21510782f , -25.78954590f , -27.11200149f , -28.25034071f , -29.54019390f , -30.46288370f , + 0.37670779f , 0.29687493f , -0.01730927f , 0.11726067f , 0.11179207f , 0.33596355f , 0.21138045f , -0.04339771f , -0.02563331f , 0.38427089f , 0.09512665f , -0.07913710f , -0.00292995f , 0.29039347f , 0.10659745f , 0.19430847f , 0.34841833f , 0.11527277f , -0.04865383f , 0.19615645f , 0.02847621f , 0.06718820f , -0.22446622f , 0.20364433f , + 33.05884904f , 28.21806545f , 18.28672366f , 14.90465855f , 11.81838140f , 8.53018928f , 7.36436457f , 6.22819968f , 5.84887442f , 3.66847974f , 0.20260152f , -2.66704796f , -1.47894289f , -2.86302773f , -7.85434089f , -12.24209362f , -16.55564265f , -20.61195764f , -25.12237933f , -29.08693654f , -31.94525806f , -35.55122030f , -38.95909687f , -40.60633258f , + 24.50578368f , 23.21164155f , 17.92457034f , 12.07933488f , 8.98364311f , 6.80371606f , 5.83939766f , 5.41161671f , 4.31883022f , 3.60077410f , 1.63582448f , -1.36979682f , -3.64312460f , -5.15824621f , -7.52882787f , -8.79219701f , -10.10176923f , -12.04124517f , -13.96520976f , -16.84553679f , -20.16579953f , -23.43856366f , -26.82374740f , -29.86100013f , + 48.50819832f , 34.15289137f , 28.24457133f , 23.53440589f , 18.31072957f , 15.88776926f , 12.53987092f , 11.18245335f , 6.24944164f , 4.11493883f , -0.52409240f , -5.30803325f , -9.07637769f , -11.17513219f , -12.30672893f , -14.59517059f , -15.29955284f , -16.17617119f , -18.50798560f , -20.76566614f , -22.52791437f , -25.09691027f , -26.04976551f , -26.89355524f , + 8.09511743f , 16.72934786f , 15.91762640f , 13.38776480f , 11.39996807f , 9.07169312f , 5.27363212f , 3.54887142f , 4.12516542f , 1.95190718f , -0.86304369f , -2.99361979f , -3.82488041f , -4.85774399f , -6.10028496f , -7.73781042f , -8.99385716f , -9.74269129f , -11.87311775f , -14.36412448f , -16.63984465f , -18.98401676f , -21.03949226f , -22.80551374f , + 20.87378295f , 25.56786054f , 24.37761370f , 20.59749879f , 17.50210689f , 15.81599869f , 13.08379347f , 12.05910670f , 8.96864073f , 5.68078325f , 0.54144388f , -3.56427128f , -7.29664065f , -11.97853799f , -15.04589649f , -16.84207789f , -18.92440518f , -21.49140235f , -24.44638942f , -27.80142626f , -29.24580339f , -31.40581424f , -33.20452192f , -34.96038674f , + 19.41104922f , 14.92637618f , 12.34176913f , 10.26196252f , 8.23856507f , 6.94579600f , 6.09672941f , 5.11937634f , 4.33940607f , 3.00270291f , 1.52448177f , -0.93710759f , -3.39576042f , -5.47615969f , -6.39919115f , -8.50931643f , -10.54951473f , -12.31607256f , -14.47860786f , -16.84616423f , -20.24052021f , -23.50168995f , -26.54506826f , -30.16170088f , + 28.94913403f , 28.15793287f , 27.35445852f , 23.88021364f , 19.04664597f , 16.62782585f , 13.23041024f , 11.80165357f , 6.78531707f , 3.80696933f , -0.83387114f , -5.70452993f , -9.22126990f , -11.40351884f , -12.85584125f , -15.17252463f , -16.10728336f , -17.34847712f , -19.92401313f , -22.57735630f , -23.06177883f , -25.40758146f , -25.92714954f , -26.49459925f , + 12.32069177f , 16.71685865f , 15.41594910f , 11.66621173f , 7.27561715f , 4.39258627f , 3.29820147f , 3.32758485f , 3.22734089f , 2.78470278f , 1.44650193f , -0.81598784f , -3.12521932f , -3.93668706f , -4.64477937f , -6.10317000f , -7.12681751f , -8.89530539f , -11.17332758f , -13.38366313f , -16.18909111f , -19.08724858f , -21.72257955f , -24.33222369f , + 35.39248501f , 28.61432228f , 17.95058353f , 16.39813320f , 12.26449602f , 9.14706821f , 8.63032788f , 5.85616320f , 5.28119540f , 2.63526927f , -0.28717841f , -3.14181019f , -2.72478672f , -3.16234838f , -8.13078551f , -11.42272872f , -14.94525653f , -18.82791922f , -23.24088065f , -27.02082853f , -28.42092038f , -30.16472575f , -31.40325103f , -31.84491940f , + 29.17417043f , 22.35669900f , 16.18973605f , 11.81596682f , 7.33020525f , 4.62573743f , 3.88471147f , 3.94864957f , 3.63555026f , 2.84599249f , 1.57602679f , -1.21735288f , -3.89478177f , -4.22974940f , -4.64250760f , -6.47171963f , -7.39065220f , -8.84922447f , -11.09964915f , -13.32068423f , -16.59227278f , -19.66683547f , -21.69504139f , -24.56742611f , + 47.82535148f , 33.38325580f , 27.02560388f , 20.91023436f , 15.90238857f , 12.04933297f , 8.33681708f , 7.94847051f , 5.44070980f , 4.97685841f , 1.92697687f , -2.14584476f , -5.24005039f , -8.46045386f , -10.93596293f , -14.12648623f , -15.67279334f , -17.08482629f , -19.99575822f , -22.16249633f , -23.35032624f , -25.73870364f , -26.42301184f , -27.09098779f +}; + +const float cdk_37bits_2[1536] = +{ + -0.60245706f , -0.36895614f , -0.28565548f , -0.61568604f , -0.21106471f , 0.01679180f , -0.21655981f , -0.14874146f , 0.18445090f , 0.68365367f , 0.72441464f , 0.85147601f , 0.66205855f , 0.18971396f , -0.61367179f , -0.98009038f , -1.14245763f , -1.87659153f , -2.50979179f , -2.95026349f , -3.02743274f , -2.99854930f , -2.88275498f , -2.56850176f , + -5.65082964f , -2.53862673f , 0.40160897f , 2.96821191f , -0.14824038f , -1.30349223f , 2.28641587f , 2.52644085f , -0.74130153f , -0.58139293f , -0.40073314f , -0.35906410f , -1.19626114f , 0.06293193f , 0.64564279f , -0.28942601f , -0.50149314f , 0.15944196f , -0.49731843f , -1.16475251f , -1.23551169f , -1.75642099f , -1.69671673f , -3.27291796f , + -3.65205633f , -1.67292739f , -1.06391729f , -1.37244548f , -1.12591558f , -0.69120125f , -0.80026251f , -0.27722939f , -0.15083351f , -0.13788690f , 0.03718469f , 0.68916477f , 0.75420341f , 0.54895929f , 0.40054739f , 0.43983204f , 0.31332249f , 0.46565374f , 0.40388762f , 0.35105496f , -0.40253674f , -0.51485592f , -0.89858941f , -1.05731152f , + -2.11612178f , -1.68149840f , -1.39421377f , -0.97488811f , -0.68836346f , -0.25122725f , 0.16979554f , 0.57375560f , 1.03704438f , 0.52788495f , 0.50037128f , 0.36855698f , 0.00455631f , -0.09861634f , -0.62955146f , -0.58507783f , -0.92884745f , -1.12052521f , -1.30254994f , -1.47192536f , -1.44028535f , -1.35850941f , -1.34195842f , -1.31721028f , + 0.25982061f , -1.32220193f , -0.47678762f , -0.12979514f , 0.86306107f , 0.97702394f , 0.51749416f , 0.16146949f , 0.02988918f , 0.04663050f , 0.16707804f , 0.08767141f , -0.04519466f , -0.62683764f , -0.72798866f , -0.62087439f , -0.82935248f , -1.03592460f , -1.01752567f , -0.84860483f , -0.97413949f , -0.96705657f , -0.88017027f , -0.73637371f , + -0.26891091f , -0.80936559f , -0.58294544f , -1.02346364f , -0.43822029f , 0.57696314f , 1.16119077f , 2.18526688f , 0.18783659f , -0.57134867f , -0.83284393f , -0.78823212f , -0.76995104f , -1.09940636f , -0.46951794f , 0.39805438f , 0.45964480f , -0.63039899f , -0.74118394f , -0.78835034f , 0.14868248f , 0.93250274f , 0.68897718f , 0.90075101f , + -1.66784004f , -0.50476115f , -0.02030205f , 0.46798248f , 0.49883263f , 1.17082801f , 0.80713467f , 1.16362509f , 0.81774163f , 0.49553337f , 0.11478912f , -0.22236563f , -0.67572086f , -1.30599465f , -1.03213159f , -0.97366307f , -0.85875427f , -0.98596121f , -0.74580950f , -0.40837319f , -0.08418331f , 0.86784028f , 1.43480309f , 1.64139207f , + 2.27287621f , -0.58474310f , -0.69019045f , -0.47070058f , -0.61574738f , -0.51533540f , -0.29508852f , 0.10165453f , 0.36287882f , 0.55457305f , 0.57810155f , 0.47931307f , 0.43968104f , 0.06171771f , -0.25362137f , -0.47864384f , -0.41913420f , -0.68219417f , -0.57749295f , -0.73286321f , -0.88652778f , -1.14118878f , -1.17860702f , -1.07742659f , + -0.26605958f , -1.09199471f , -1.65740224f , -2.14201695f , -2.06186690f , -1.68936539f , -1.00901439f , -0.37549041f , -0.06256679f , 0.35513419f , 0.98053497f , 0.91466430f , 0.86530432f , 0.83552545f , 0.81062242f , 0.38603024f , 0.05045884f , -0.59611788f , -0.82572806f , -1.24150282f , -1.51280469f , -1.59822307f , -1.71808914f , -1.60728998f , + -1.09129709f , 0.06734422f , 0.07681791f , -1.25010854f , 0.11998545f , 0.44876184f , 0.34324970f , 0.19227749f , -0.14778119f , -0.08340870f , -0.08182976f , -0.20398755f , 0.06772352f , -0.09075007f , -0.02123454f , -0.25839401f , -0.28488980f , -0.64962465f , -0.75312989f , -1.01319788f , -1.29428363f , -1.46281777f , -1.48497336f , -1.34472564f , + -0.64660266f , -0.88691293f , -0.84393960f , -0.34552440f , 0.32824730f , -0.29728699f , -1.56066720f , -1.75726505f , -1.37935080f , -0.41983170f , 0.07847383f , 1.10763083f , 1.38831040f , 0.68960638f , 0.33240448f , 0.76690865f , 0.72333401f , 0.09227846f , -0.25578331f , 0.21326173f , 0.72267697f , 1.03823367f , 0.53396722f , 0.85492859f , + -0.66178264f , -0.72781507f , -1.16616398f , -0.61180318f , -0.13929383f , -0.36461939f , -0.18208278f , -0.01288829f , 0.07717647f , -0.10024019f , 0.07436033f , 0.26910493f , 0.35220120f , 0.08875997f , 0.10426474f , -0.03109220f , -0.13636337f , -0.22965524f , -0.32874358f , -0.25961753f , -0.26897008f , -0.21251566f , -0.09802804f , 0.02321489f , + 0.68981472f , -1.15206563f , -2.29258605f , 2.55986100f , 0.37026158f , -2.06518041f , 0.29082193f , 1.93844641f , 0.99052150f , 0.20248720f , -0.02548929f , 0.16880347f , 0.07779328f , 0.02567656f , -0.88067113f , -0.62757477f , -0.46579846f , -0.15896606f , -0.60482751f , -0.61951099f , -0.93517849f , -1.57434405f , -2.41362494f , -3.62613249f , + 0.10916433f , 0.43521512f , 1.56203262f , 2.28014034f , 2.45964989f , 1.28206740f , 0.62678461f , 0.76120906f , 0.64803676f , 0.26869080f , -0.47306419f , -0.43773939f , -0.62382319f , -1.07053542f , -0.92812261f , -1.19576823f , -1.31738270f , -1.36433226f , -1.44943362f , -1.75263554f , -1.79107934f , -1.65086642f , -1.63564703f , -1.48679794f , + -1.03508578f , -1.33591451f , -0.93011319f , -0.44471674f , 0.37500761f , 0.92138871f , 0.47036706f , -0.45250578f , -0.67117578f , -1.17172575f , -0.80474849f , -0.45208178f , 0.34756513f , 0.94484979f , 0.66316845f , 0.02661059f , -0.19689367f , 0.28637288f , 0.19763960f , -0.18457662f , -0.24564459f , -0.27740232f , -0.16466847f , -0.07240464f , + 0.79283938f , 0.04072154f , -0.45284799f , 0.62520205f , 0.40461878f , 0.46378915f , 0.26074483f , -0.00916984f , 0.17535410f , 0.03167535f , -0.07586785f , 0.26470352f , -0.21568977f , -0.76557444f , -0.42590064f , -0.12909543f , 0.02061938f , 0.20821266f , 0.45608502f , 0.64917803f , 0.55163697f , 0.57240961f , 0.62231726f , 0.71731998f , + 0.22967499f , -0.05073000f , 0.51257014f , 0.53635363f , 0.90936842f , -0.47960537f , -0.60503509f , -0.38078624f , 0.72254161f , 0.43714553f , 0.48654362f , 0.43714660f , 0.18700370f , 0.03007471f , -0.39817882f , -0.59285823f , -0.75351375f , -0.75107912f , -0.77902788f , -0.82750373f , -0.72882091f , -0.75427284f , -0.57531634f , -0.37148640f , + -2.32676805f , -0.68486879f , -0.28456416f , -0.36791144f , -0.29071024f , -0.01135526f , 0.16172201f , 0.27899421f , 0.23877415f , 0.01902860f , -0.32670357f , -0.28942004f , -0.25341926f , -0.28159658f , 0.07050306f , 0.26414188f , 0.42045388f , 0.49934376f , 0.55163730f , 0.80964449f , 0.41444864f , 0.21371086f , 0.07501103f , 0.11308696f , + -0.27305539f , -1.16787053f , -1.40565538f , -0.99925137f , -1.11970497f , -0.87627497f , -0.63268066f , -0.40045797f , -0.40525654f , -0.06010181f , 0.13266298f , 0.44378479f , 0.45144645f , 0.18695876f , 0.55290900f , 0.78041480f , 0.94641486f , 1.00887739f , 1.70081287f , 2.26350129f , 2.47817098f , 2.59918260f , 2.79591047f , 2.78437201f , + -0.32246249f , -1.71452730f , -2.64055100f , -2.67577145f , -0.92654110f , 0.26408617f , -0.25926943f , 0.02139616f , 0.33878547f , 0.06917466f , 0.02594366f , 0.24868381f , 0.39107983f , -0.01529301f , -0.20036110f , 0.01057045f , 0.03136854f , 0.09346079f , 0.22821765f , 0.33206417f , 0.01105828f , 0.17529667f , 0.88221791f , 0.89873292f , + 0.93496823f , 0.51731100f , 0.04196463f , -0.75388451f , 0.47715970f , 0.54630853f , 0.18782570f , -0.38877496f , -0.07979449f , -0.12966809f , 0.12211422f , -0.22771599f , 0.03309780f , 0.02166307f , -0.05844436f , -0.17678384f , -0.32696150f , -0.45229639f , -0.40223728f , -0.45381663f , -0.55363514f , -0.44568304f , -0.41742550f , -0.27033009f , + 1.24789723f , -0.16270145f , -0.23526508f , -0.91495192f , 0.09192658f , 0.94791314f , 0.99514796f , 1.48011022f , 1.18575675f , 0.34462249f , 0.08649944f , -0.30288071f , -0.33154349f , -0.62323828f , -1.23683351f , -1.35258474f , -1.28447604f , -1.39540423f , -1.48493397f , -1.22352799f , -0.64023287f , -0.31408935f , 0.05098542f , 0.60709035f , + -1.28296443f , 0.30739631f , 0.06005469f , 0.20911344f , 0.24839533f , 0.32438667f , 0.52129460f , -0.19296009f , 0.56893959f , 0.27689822f , 0.19535841f , -0.28910358f , -0.03222614f , -0.11973675f , -0.43887472f , -0.57077656f , -0.49160952f , -0.12962890f , 0.67632833f , 1.51844798f , 1.92676111f , 2.40049046f , 3.14497224f , 4.02974673f , + 1.80516481f , -0.56393339f , -1.30448044f , -1.40495082f , -0.68191674f , -0.76180008f , -0.59977868f , -0.51019494f , -0.68339140f , -0.49281527f , -0.13376455f , 0.19985525f , 0.65099755f , 0.67547152f , 0.63174636f , 0.88059571f , 0.82474329f , 0.51834518f , 0.45799476f , 0.48269666f , 0.41156043f , 0.45527314f , 0.53753557f , 0.66268670f , + -1.55606025f , -0.20257947f , -0.14962756f , -0.99675497f , -1.37013665f , -1.22741192f , -0.99079753f , -0.49157059f , 1.03655475f , 1.41721212f , 0.93733685f , 0.23984335f , -0.04670573f , -0.46782519f , -0.11250628f , 0.37457349f , 0.70065238f , 0.30049206f , 0.12589128f , 0.00816302f , -0.30417620f , -0.55639550f , -0.97628459f , -1.33776955f , + -0.91978133f , 2.03647597f , 2.08783454f , -0.34357589f , -0.53113823f , -0.79082032f , -0.35484777f , -0.04415842f , -0.05569113f , 0.29670211f , 0.20802391f , 0.20847836f , 0.24786650f , 0.08187504f , 0.25883128f , 0.36261019f , 0.11231239f , 0.00938238f , 0.04224603f , -0.13883262f , -0.17357685f , 0.27783307f , 0.24645533f , 0.26199958f , + -0.61248405f , -0.07406218f , -0.61345974f , -1.32868141f , -1.08503963f , -0.61503512f , -0.40217073f , -0.50619739f , -0.34879559f , -0.33683180f , -0.13424100f , -0.05819325f , 0.01983650f , 0.38272624f , 0.44165965f , 1.08335723f , 1.55918521f , 0.91879734f , 0.66719572f , 0.40972477f , 0.11617552f , 0.02573831f , -0.13026683f , -0.32568351f , + 0.31463364f , -0.03452175f , -0.04820884f , -0.36356998f , -1.78279482f , 0.33915182f , 0.23383962f , 0.10388632f , 0.30795414f , 0.18689800f , 0.20754344f , -0.09819817f , 0.32111428f , 0.28504616f , 0.07722536f , -0.01904677f , -0.16255073f , -0.15042754f , -0.03877674f , 0.01867447f , -0.00999362f , 0.02968441f , 0.12366541f , 0.24417438f , + 1.09843253f , 0.09916156f , -0.26715787f , -0.21319307f , 0.17488666f , -0.03969684f , -0.42084276f , -0.26687268f , -0.54193150f , -0.73872758f , -0.38673483f , -0.31271029f , 0.04756063f , 0.03567565f , 0.10843090f , 1.00179157f , 1.33899024f , 0.51010916f , -0.26441522f , -0.71717032f , -1.14185896f , -1.44276220f , -1.62450955f , -1.61374667f , + -1.17644421f , -0.65722894f , -0.85514146f , -1.00555806f , 0.26053267f , 0.49309357f , -0.37877784f , -0.93210797f , -1.08883971f , -0.98901078f , -0.77758095f , -1.41471701f , -1.75752311f , 0.13457770f , 2.71551042f , 3.08606371f , 0.64870422f , 0.21086401f , -1.21315351f , -2.33440097f , 0.01456974f , 2.06478611f , 0.27046489f , 0.39813046f , + -0.48133789f , 0.05248478f , 0.15702810f , 1.09901110f , 1.05962736f , 1.17102152f , 1.55536593f , 0.44906344f , -0.41703175f , -1.12950682f , -0.93068802f , -1.09338708f , -0.91150200f , -0.48817666f , 0.10937607f , 0.37946930f , 0.24542719f , 0.26431763f , 0.67229593f , 0.65079198f , 0.00926221f , -0.87021868f , -1.26123155f , -1.41977363f , + 1.54426896f , 1.64264747f , 1.49559347f , 0.46249745f , 0.93411099f , 1.07714355f , 0.81133504f , 0.18134510f , 0.47877461f , 0.29451902f , -0.11266912f , -0.50269456f , -0.69526938f , -0.66772091f , -0.81400219f , -0.48607791f , -0.49953687f , -0.35945370f , -0.41495272f , -0.22003468f , 0.19724418f , 0.40213003f , 0.75369682f , 0.99864576f , + 0.09877598f , -0.24834930f , 0.70781761f , -0.02941638f , 0.04788121f , -0.17525416f , 0.24389545f , 1.27018837f , 1.54269729f , 1.25537489f , 1.40965823f , 0.83108228f , -0.00482938f , -0.57803168f , -1.40272349f , -2.04807395f , -2.39183907f , -2.28421278f , -1.59956397f , -1.84523910f , -1.49830221f , -1.32118632f , -1.41289179f , -1.07949145f , + -3.00057476f , -0.33414238f , 0.53147236f , 0.51026648f , 0.64656500f , 0.22188527f , 0.26159611f , -0.05358452f , 0.08996934f , -0.14007857f , -0.16740033f , 0.20548656f , 0.24617443f , -0.14274519f , -0.22696206f , -0.33493349f , -0.60597008f , -0.59551620f , -0.65068169f , -0.58018184f , -0.85498638f , -0.83283956f , -0.68903400f , -0.56704530f , + -1.80644488f , -2.09723761f , -2.47792833f , -2.51218612f , -1.89574511f , -1.52165564f , -1.43122992f , -1.31255781f , -1.17590463f , -0.75299628f , 0.13501040f , 1.04659662f , 0.78957362f , 1.33259798f , 1.48274046f , 1.92412844f , 1.37934388f , 1.51991312f , 1.53887225f , 1.07173430f , 0.52056336f , 0.89063725f , 0.75213286f , 0.48137117f , + -0.83123316f , -1.25502416f , -0.24000076f , -0.86042163f , -1.31788654f , -1.01630239f , -0.29559367f , 0.06110944f , 1.41025494f , 1.14012093f , 1.09233283f , 0.65906473f , 0.66635495f , 0.22542242f , -0.48939739f , -0.90887258f , -1.22778778f , -1.13528888f , -0.64749466f , -0.33117378f , -0.13886376f , 0.32663134f , 0.80397143f , 1.24264775f , + 0.02879094f , -0.40518021f , 1.01153472f , 0.24919166f , 0.21717242f , 0.73565158f , 0.11322127f , 0.18792292f , -0.13373281f , -0.08074408f , -0.11253388f , -0.16098838f , 0.11676604f , -0.16172666f , -0.26254412f , -0.20650902f , -0.25114318f , -0.21747560f , -0.22020914f , -0.32979603f , -0.32478632f , -0.30167186f , -0.14634515f , 0.05782533f , + -0.47454777f , -0.56928151f , -1.15476553f , -0.09623004f , 2.88751281f , -0.14714366f , -0.88522957f , 4.22040983f , 1.39699412f , -1.50292392f , -0.43572570f , -0.83179815f , -0.31636548f , -0.93272549f , -0.76482978f , -1.38859059f , -1.29829764f , -0.15529744f , 0.26864398f , 0.27166310f , 0.10090808f , 0.27140121f , 0.10246642f , -0.11585636f , + -0.83199745f , 1.25871280f , 2.32976268f , 1.04422262f , 0.72052750f , 0.58033767f , 1.01197514f , -0.00356009f , 0.64222581f , 0.17810713f , -0.27271599f , -0.30971603f , -0.36262209f , -0.59621272f , -0.71907027f , -0.37465802f , -0.49493312f , -0.23002788f , 0.22678857f , 0.61676427f , 1.15089995f , 1.45602224f , 1.73714565f , 1.76230856f , + 3.78596594f , 0.70843751f , 0.56143039f , 0.59983620f , 0.91117855f , 1.14938132f , 0.62640275f , 0.25328046f , 0.05444886f , -0.14074779f , -0.18351720f , -0.14467121f , -0.17323666f , -0.19046734f , -0.48709718f , -0.78123776f , -0.89375672f , -0.92818935f , -0.92156607f , -0.91479400f , -0.71603833f , -0.54172884f , -0.35025273f , -0.10097845f , + 1.88294702f , 1.24216466f , -0.99369851f , -0.70762866f , -0.80134642f , -1.57956697f , -1.53644146f , -0.73206309f , -0.05717919f , 0.79275997f , 0.73656524f , 0.59776925f , 0.89457859f , 0.27389259f , 0.55266497f , 0.42166521f , 0.43646218f , 0.18667357f , -0.37565357f , -0.34247443f , -0.46905572f , -0.54608498f , -0.46535569f , -0.51501131f , + -0.47999037f , 1.00431088f , 0.73194666f , 0.53070406f , -0.01938612f , 0.03027495f , 0.40371180f , 0.67811524f , 0.70405966f , 0.58218726f , 0.21637318f , 0.01593260f , -0.21413948f , -0.51479804f , -0.67811458f , -0.52916655f , -0.67532514f , -0.70141319f , -0.64914555f , -0.67794975f , -0.70067665f , -0.79806639f , -0.63846191f , -0.48442451f , + 1.27348348f , 0.96416420f , 0.39017217f , 0.71785608f , 1.03161791f , 0.22200744f , -0.65764394f , -1.59478709f , -0.95580133f , -0.45685571f , 0.24849072f , 0.90500271f , 0.94710102f , 0.11334884f , -0.15646077f , 0.15567420f , 0.19951531f , 0.06661949f , 0.16776497f , 0.92645175f , 1.51329143f , 1.99768327f , 2.23252155f , 2.82502657f , + -0.54469743f , 0.32018638f , 0.18026765f , -0.24717676f , 0.16334731f , 0.24119007f , -0.09150780f , -0.62258235f , -0.36174875f , -0.54007117f , -0.16902754f , 0.05782464f , 0.32844560f , 0.29531844f , 0.39903673f , 0.21807358f , 0.08243945f , 0.19009618f , 0.32130029f , 0.40374798f , 0.59707077f , 0.94425923f , 1.12228590f , 1.33995773f , + -0.11751559f , -0.41810808f , 0.01454897f , 0.64372292f , -0.51236310f , -1.28919088f , -0.27493502f , -0.15853449f , -0.26953216f , -0.08601421f , 0.47049578f , 0.62472064f , 0.47447185f , 0.17523033f , 0.30837586f , 0.34012918f , 0.19798450f , 0.18240973f , 0.24439643f , 0.37610178f , 0.25546586f , 0.34660852f , 0.25152738f , 0.33684884f , + 0.11066744f , 1.19858921f , 0.91132496f , 1.17666312f , 1.24521727f , 0.96210985f , 0.48787188f , -0.08729327f , -0.75696449f , -0.61950811f , -0.12399623f , -0.05243043f , 0.12080690f , 0.07846342f , -0.05639926f , -0.49681521f , -0.70132533f , -0.85192537f , -0.82039718f , -0.85401537f , -0.76376214f , -0.65987739f , -0.48460153f , -0.15410472f , + 0.35003846f , -1.71631424f , -2.46591563f , 0.87758858f , -1.81752528f , 3.13642054f , 1.73032547f , -0.09324163f , -4.01941823f , 1.53280929f , -1.80607033f , 0.38379815f , -0.60599486f , -0.15051943f , -1.06126256f , 0.92416849f , 1.84602853f , 1.75994867f , 0.99060749f , 0.70059849f , 1.55000269f , 0.30898296f , 1.89357287f , 3.39229864f , + 2.30088406f , 0.92343676f , 0.99415615f , 0.95404596f , 0.50656674f , 0.93824653f , 0.48608406f , -0.08446928f , -0.62418615f , -0.92839590f , -0.72113820f , -0.52847345f , -0.12827999f , 0.09174440f , 0.46989097f , 0.23658785f , 0.28508481f , 0.46040256f , 0.61632907f , 0.95774580f , 1.12674250f , 1.33598604f , 1.41647487f , 1.55101744f , + 1.37256353f , 0.97616384f , 0.91935645f , 0.81440269f , 0.66853976f , 0.62246830f , -0.20376912f , 0.03360847f , 0.43571616f , 0.50340338f , 0.23558369f , 0.34148923f , 0.26639247f , -0.42615485f , -0.66797929f , -0.78929117f , -1.01956966f , -1.04967706f , -0.83319766f , -0.38454933f , 0.01908745f , 0.54939284f , 1.31919448f , 1.91397573f , + -1.47177526f , -0.59088313f , -0.29040563f , -0.30391048f , -0.77025357f , -0.91705792f , -1.11779825f , -1.26663583f , -0.88813029f , -0.84447950f , -0.68067351f , -0.12550231f , 0.86719136f , 0.95700684f , 1.32696558f , 1.54042652f , 1.91879305f , 2.53765271f , 2.74382217f , 2.47883719f , 2.13313809f , 1.99482993f , 1.71839367f , 1.55253059f , + -2.18776004f , -2.01842604f , -2.26735458f , -1.91080096f , -2.94652547f , -2.30201691f , -2.55949436f , -2.06940788f , 0.81981691f , 0.88975503f , 1.36019848f , 1.20472608f , 1.42006397f , 0.61493222f , -1.18963425f , 0.41220219f , 4.34572607f , 4.43362932f , 4.07803194f , 5.02807593f , 3.44925570f , -0.33534871f , 0.49574672f , -0.89211792f , + 1.62466606f , 0.12019975f , -0.38782369f , -0.93423193f , 0.16258521f , -0.01564732f , 0.49181187f , 0.20589834f , 0.27352752f , 0.19483395f , 0.32141824f , -0.11470920f , -0.19458687f , -0.27925271f , -0.50960055f , -0.21759523f , -0.31856471f , -0.25540294f , 0.10383356f , 0.63132905f , 1.12834639f , 1.54942785f , 2.10497109f , 2.44084721f , + 1.80221933f , 1.34647425f , 0.68084866f , 0.26131343f , 0.06129242f , -0.20413381f , -0.25012623f , 0.26150026f , 0.34217016f , -0.25077441f , -0.03464205f , 0.00670185f , 0.11970509f , -0.18474450f , -0.02420872f , 0.04947295f , 0.10704821f , 0.12031899f , 0.25733107f , 0.20223825f , 0.14644252f , 0.05014131f , 0.25449839f , 0.53243125f , + 2.46777249f , 2.31564554f , 1.57449051f , -0.02405359f , -0.50178606f , -0.75371618f , 0.14778503f , 0.92907656f , 1.77413761f , 1.44803582f , 0.79871587f , -0.06867376f , -0.36229444f , -0.24911098f , -0.80167236f , -1.29799461f , -1.06250807f , -1.04778427f , -0.99914314f , -1.09969569f , -0.87609022f , -0.93824122f , -0.95461855f , -0.91327026f , + 0.43633316f , 0.85535629f , 0.60581035f , 0.16065427f , -0.07901143f , -0.12715680f , 0.03021654f , 0.07928964f , 0.11271867f , -0.14335296f , -0.24219156f , -0.11821250f , -0.20715557f , -0.14096772f , -0.04794024f , 0.21199596f , 0.67185756f , 1.28693268f , 1.69253449f , 2.02169124f , 2.03489721f , 2.18782692f , 2.32510550f , 2.13471256f , + 5.19702515f , 0.11666770f , -0.23856561f , -0.40839191f , -0.43762919f , -0.47738566f , -0.08391318f , -0.28626545f , 0.00298357f , 0.04540739f , 0.31909785f , 0.21196383f , 0.24548536f , -0.08426235f , 0.13111045f , 0.13639205f , 0.27647873f , 0.33171126f , 0.46017809f , 0.54387048f , 0.61603267f , 0.57095620f , 0.68776632f , 0.65010973f , + 0.58235537f , 0.52562482f , 1.05922702f , 1.60193935f , 0.43144897f , -2.92550999f , -2.57110854f , -1.17753807f , 0.19698968f , 1.02966008f , 0.68834236f , -0.11567313f , -1.07423611f , 1.53722962f , 2.83106005f , 0.31270547f , 0.83691800f , 0.60620087f , 0.21605402f , -0.37564956f , 0.38963810f , -0.55569948f , -0.83510003f , -0.45007941f , + -0.90035383f , 0.70316556f , 1.58896986f , 2.00202833f , 0.66804071f , -0.32729105f , 0.20493044f , -0.45491115f , -0.51617330f , -0.18761885f , -0.13361848f , 0.06806675f , -0.08803656f , -0.27485407f , -0.08086164f , 0.47587476f , 0.64596634f , 1.37554511f , 1.64271082f , 1.13804275f , 0.62642705f , 0.27157260f , 0.15530333f , -0.04178223f , + 2.19562225f , 0.68349947f , 0.14785409f , 0.07266666f , -0.11144618f , -0.52658551f , -0.77916859f , -0.76098098f , -0.55947105f , -0.61767060f , -0.18020839f , -0.26320634f , -0.03154415f , 0.41832030f , 0.98036861f , 1.17153463f , 1.26081153f , 1.58669565f , 1.96844912f , 2.21868662f , 1.28843850f , 0.48905790f , 0.12804274f , -0.25383240f , + 0.96587648f , 1.45558990f , 0.31977941f , -0.95024822f , -1.59243377f , -0.35590271f , -0.57251864f , -0.20900643f , 0.39660737f , 0.51169138f , 0.41734874f , -0.03711820f , 0.43311570f , 0.50214417f , 0.08955252f , 0.09513494f , 0.32141616f , 0.43401876f , 0.86976131f , 1.39503347f , 1.54833843f , 1.52864127f , 1.46114291f , 1.21933526f , + 1.78766271f , 1.61870712f , 2.29243952f , 1.45106025f , -0.02202545f , 0.12396735f , 0.05180173f , -0.74274249f , -0.04132082f , -0.01646827f , 0.04051846f , 0.10680231f , 0.03361298f , -0.26263042f , 0.29610433f , 0.25222625f , 0.18019271f , -0.22323513f , -0.68162437f , -0.96880693f , -1.29349030f , -1.78825246f , -2.63819014f , -3.24193152f , + -5.14372601f , 2.35480301f , 2.57594417f , 3.31674200f , 5.64389287f , 5.57674458f , 3.59322110f , -1.28598587f , -1.68632976f , -2.12796852f , -2.98396833f , -4.09489145f , -4.00821759f , -0.23400052f , 1.27890396f , 0.77129006f , -0.44287462f , -1.47029001f , -2.18546499f , -2.54400987f , -3.37996978f , -1.92988631f , -3.15537156f , -4.51816327f , + -0.35333284f , 0.05714033f , 1.24834935f , 0.52566638f , 0.41396899f , 0.74990328f , 0.95628046f , 0.44418709f , -0.34231956f , -0.14250584f , -0.59768493f , -0.64758317f , -0.22890844f , 1.10009034f , 0.66447430f , -1.03679499f , -1.33177125f , 1.17542516f , 2.21270353f , 1.90162759f , 1.20419817f , 0.83319667f , -0.52929949f , -2.16298435f , + 5.19114552f , 3.69595577f , 2.40462618f , 1.01495594f , 0.03903091f , 0.32991808f , -0.22330707f , -0.60000816f , -0.42237486f , -0.09093864f , 0.19458627f , 0.42022925f , 0.27603710f , 0.12695518f , 0.13428003f , -0.11234558f , -0.07201685f , -0.08582543f , -0.00938781f , 0.00835335f , 0.26546185f , 0.48668790f , 0.55514085f , 0.42743906f +}; + +const float cdk_37bits_3[1536] = +{ + -0.39555686f , -0.03651739f , -0.44779209f , 0.28023722f , 0.00089126f , -0.66214790f , 2.59448215f , -0.79382669f , -0.12742901f , -0.11647842f , 0.01833394f , 0.16500005f , -0.09845495f , -0.28459353f , -0.36237538f , 0.11970795f , -0.45285373f , -0.10504899f , -0.11812969f , 0.38858637f , 0.86990072f , 0.65514891f , 1.11998296f , 1.21258496f , + 0.22127561f , 0.04345828f , -0.01534097f , -0.09898785f , -0.26169093f , -1.42940674f , -0.62833523f , -0.43722472f , -0.03759617f , -0.48777744f , -0.21315437f , -0.50978248f , -0.03448283f , 1.37885110f , 2.31984917f , 0.94767797f , -0.60793975f , -1.49725519f , -0.82404584f , -0.79191239f , -0.41285081f , -0.57794113f , -0.59258055f , -0.52142849f , + -2.04397465f , -0.73672438f , -1.22406020f , -0.60820965f , -0.66350776f , -0.63508874f , 0.11396081f , 0.27852903f , 0.02122066f , -0.36929472f , -0.09692458f , -0.59306388f , -0.03445818f , 0.22347759f , 0.50874437f , 0.79690333f , 0.44886168f , -0.21185937f , -0.22593929f , 0.10528155f , 0.46293555f , 0.91816687f , 0.81749785f , 0.52952675f , + -0.83745738f , -1.08740279f , -0.81741019f , -0.19035650f , 0.26494816f , -0.53562479f , 0.07089504f , 0.57372383f , 0.54761482f , 0.03039794f , -0.04447253f , 0.12483594f , 0.21652272f , -0.29093744f , -0.18196704f , -0.42015965f , -0.35529408f , -0.64256034f , -0.65492788f , -0.67987885f , -0.90903026f , -1.04259245f , -1.11997561f , -1.06502927f , + 0.35909764f , -0.87235994f , -0.84471723f , -0.71941795f , -0.63106065f , -0.13584873f , 0.00035122f , 0.92117956f , 0.23226720f , 0.38257788f , 0.53266968f , 1.00892757f , -0.01254911f , -0.72578637f , -0.87564652f , -0.59001429f , -0.10713772f , 0.64583948f , 2.23457520f , 2.05203337f , -1.05813794f , -0.53728713f , -0.98376127f , -2.32960660f , + -0.37609544f , 0.57819159f , 0.36973473f , -1.59244337f , -1.38928585f , 0.17356612f , 0.05708517f , 0.55433790f , 0.59850517f , 0.28868283f , 0.11861574f , 0.18433235f , -0.05806802f , -0.05763413f , -0.27751060f , -0.18177730f , -0.00964178f , -0.38778247f , -0.57380279f , -0.56566098f , -0.62571613f , -0.59413960f , -0.61423645f , -0.79876589f , + 0.83478463f , -0.27534215f , 0.01524335f , -0.21639948f , -0.24423974f , -0.23618527f , -0.33317320f , -0.47935624f , -0.15249438f , -0.20363495f , 0.10344548f , -0.31742304f , -0.80171882f , -0.52313955f , 0.00839865f , 1.52844134f , 1.65181493f , -1.32088237f , -0.92249349f , -1.06298456f , -0.07484235f , -0.16968152f , -0.27904781f , -0.28263495f , + -0.35596324f , 0.22314830f , 0.17976713f , 0.03198763f , -0.12387166f , 0.15347508f , -0.07824379f , -1.73831583f , 0.24945724f , 0.50825939f , 0.37505775f , 0.09671258f , -0.42450737f , -0.00807859f , 0.43247130f , 0.47374177f , 0.08198413f , -0.17182369f , -0.24951122f , -0.40607268f , -0.34400714f , -0.49624679f , -0.37255649f , -0.39973249f , + -1.17006196f , -0.13172492f , -0.00974038f , 0.34580927f , -0.44057385f , 0.93062397f , 0.69327166f , 0.08607482f , -0.08210773f , -0.04718499f , -0.07694656f , -0.11915558f , -0.27321781f , -0.38372565f , -0.17058554f , -0.11705279f , 0.00039928f , -0.05191028f , -0.21529579f , -0.57393337f , -0.82568921f , -1.24107379f , -1.47599343f , -1.53248379f , + -0.21719645f , -0.19291913f , -0.75004495f , -0.71951649f , 0.47553953f , 1.38096577f , 1.04033311f , -0.03221815f , -0.86572179f , -0.39911324f , 0.01402460f , 0.13262858f , -0.09635214f , 0.32714710f , -0.23837385f , -0.85773163f , -0.88110961f , -0.98073890f , -0.79564795f , -0.61482268f , -0.51303751f , -0.17108237f , 0.13139182f , 0.33062304f , + -0.65971615f , -0.36376531f , -0.48204612f , -0.96580829f , -0.38529047f , -0.02620179f , -0.58558478f , -0.71688128f , -0.19952990f , -0.35258890f , 0.23812036f , 0.76018967f , 0.76511691f , -0.04406894f , 0.27021687f , 0.17352452f , 0.10253468f , 0.11128335f , 0.11180254f , 0.02374565f , 0.06920751f , 0.16750231f , 0.07976935f , 0.01873091f , + -0.56879426f , -0.30163117f , -0.21853853f , -0.53731934f , 1.94762983f , -0.40486765f , -0.45665477f , -0.68446479f , 0.29429121f , 0.03909750f , 0.15870855f , 0.44189594f , 0.50054032f , -0.21856641f , -1.18939515f , -0.79884717f , 0.37048428f , 0.68697692f , -0.60894758f , 0.22049746f , -0.40599348f , -0.85599586f , -1.02469575f , -1.24963523f , + -0.59195437f , -0.70945563f , -0.15260636f , -0.11149946f , -0.27565596f , -0.07645921f , 0.39497828f , 1.24678661f , 1.18358424f , 0.31430952f , -0.55975403f , -1.31101207f , -0.69091358f , 0.28078628f , -0.21792173f , -0.25137229f , -0.03764299f , -0.16055917f , -0.23425462f , -0.30830760f , -0.03132299f , -0.07131420f , 0.12064408f , 0.03452070f , + 0.64730537f , 0.25294955f , 0.59073653f , -0.02889400f , 0.46909137f , 0.64173464f , 0.30648456f , 0.11024926f , 0.62116350f , 0.28226056f , 0.21516616f , -0.18069190f , -0.26872093f , -0.28573023f , -0.55069608f , -0.59818666f , -0.76225667f , -0.64631598f , -0.73617734f , -0.72489209f , -0.60849158f , -0.66871466f , -0.59332250f , -0.53455648f , + -0.07107892f , -0.12362226f , -0.21667130f , 0.08342061f , -0.26377510f , -0.22955671f , 0.28415481f , -0.59587984f , 0.76501116f , 0.53927870f , -0.41773182f , -0.62604889f , 1.72550145f , 0.83771852f , -1.09720899f , -0.92889980f , 0.00835226f , -0.53818200f , -0.40166509f , -0.77584442f , -0.86058879f , -1.07506625f , -0.75645733f , -0.37900991f , + -0.86391437f , -1.56875806f , -0.59737022f , 1.47103303f , 0.58013388f , -0.61125685f , 0.21215056f , -0.82381155f , -1.02435909f , 0.44360022f , 0.46674660f , -0.24399003f , 0.05535292f , -0.13537148f , 0.53716959f , 0.38570703f , 0.15789830f , 0.82344300f , 0.71725375f , -0.08478097f , -0.19045110f , -0.30913951f , -0.71208241f , -0.41211249f , + 0.28300838f , 0.07819052f , -2.59554850f , 0.01513969f , 0.02275068f , -0.41900901f , 0.35308403f , -0.22328483f , -0.08406000f , -0.23448738f , -0.01463282f , 0.10979483f , 0.06169874f , 0.11653196f , 0.19591528f , 0.38801499f , -0.27219161f , -0.03580387f , -0.39412610f , -0.54966348f , -0.43187400f , -0.26346025f , 0.10805189f , 0.47603876f , + -0.44926755f , -0.27303642f , -0.70688129f , -0.60385437f , 2.03834457f , -0.29886385f , -0.37220015f , -0.40157890f , 0.00114372f , -0.55682607f , 0.18940701f , -0.90851567f , -0.11558088f , -0.30509965f , 0.37725906f , 0.36395947f , -0.01158594f , -0.11778388f , -0.08166158f , -0.00099729f , -0.03361890f , 0.17877023f , 0.46953351f , 0.60661120f , + -2.32090231f , 0.31006497f , 0.43589911f , 0.16050441f , 0.04916749f , -0.07132427f , -0.10907864f , -0.15235030f , -0.34310944f , -0.38589894f , -0.22420356f , 0.28262581f , 0.26288112f , 0.10104567f , 0.30661547f , 0.15586639f , 0.12838052f , 0.16339047f , 0.31122445f , 0.21703946f , 0.05094335f , -0.36066770f , -0.52001051f , -0.85195920f , + 0.81157773f , -0.87377611f , 0.35897335f , 0.97922466f , 0.21161336f , 0.61189108f , 0.09975497f , 0.85557541f , 0.44633554f , -0.06799683f , -0.82196168f , 0.18733624f , -0.11555839f , -0.46227977f , -0.84455317f , -0.28718848f , 0.18823232f , 0.02081597f , 0.20496005f , -0.18321698f , -0.53186346f , -0.76751019f , -0.82707771f , -0.93511852f , + -0.62789782f , -1.02899916f , -0.83398776f , 0.34736659f , -0.82847318f , -0.55517102f , 0.73944715f , 0.51603042f , -0.17541205f , -0.51297491f , -0.28031225f , 0.37534747f , 1.33255256f , 0.85299363f , -0.49866574f , -0.70931713f , -0.25347802f , 1.18650471f , 0.96320283f , 0.17951998f , 0.50223738f , 0.94745145f , 0.71031145f , 0.35981922f , + 0.25960499f , 0.20085615f , 0.66071489f , -0.39300998f , -1.04584452f , 0.68763487f , 0.24341422f , -0.44681709f , -0.42478638f , 0.35809846f , 0.23651606f , 0.24690213f , 0.02840220f , 0.15533695f , 0.09128538f , -0.06270472f , -0.06713015f , -0.25335122f , -0.38172369f , -0.13095063f , 1.38549753f , 1.56595584f , -0.79491152f , -1.69456364f , + 0.10124015f , 0.44268052f , 0.41947170f , 0.06998858f , -0.44403538f , -0.53833083f , -0.18012515f , 0.19801548f , 0.02848198f , 0.10328039f , 0.05547373f , -0.08134220f , -0.11347284f , 0.18716972f , 0.15052121f , 0.45578915f , 0.17825613f , -0.62982728f , -1.25893192f , -1.72372974f , -1.52843742f , -1.14720248f , -0.59782030f , 0.41304965f , + -0.65791072f , 0.50448348f , -0.22790188f , 0.65577284f , -0.41604305f , 0.48294798f , -0.01782262f , 0.11258538f , 0.45414723f , 0.46990532f , 0.18373223f , -0.25480101f , -0.03967844f , 0.14242292f , -0.18186310f , -0.44759830f , -0.48848859f , -0.23499694f , -0.00449827f , 0.06947204f , 0.24366262f , 0.18799436f , 0.16493984f , 0.07341900f , + -0.17084500f , -0.52693384f , -0.15426250f , -0.36638752f , -0.08888879f , 0.42508938f , 0.70488045f , 0.35337658f , -0.31440288f , -0.95905412f , -1.39777356f , -0.73044215f , -0.21780251f , 0.16276937f , 1.17947648f , 0.62166831f , 0.26018916f , -0.29948472f , -0.58195133f , 0.45241574f , -0.06192729f , -0.35749657f , -0.32541389f , -0.31290178f , + 1.03333306f , -1.91050021f , -0.13109130f , -0.32248959f , -0.38101335f , 0.00494321f , -0.25107010f , -0.01681079f , 0.21943144f , 0.25121705f , 0.18563785f , 0.03636768f , -0.10100837f , 0.06649688f , -0.00664293f , 0.05595170f , -0.06422094f , -0.11002354f , -0.10109236f , 0.01090687f , 0.06631093f , 0.07976458f , 0.15739108f , 0.10857007f , + -0.33199571f , -0.56448889f , -0.45287501f , -0.05693402f , 0.05942782f , -0.02093585f , -0.20271071f , 0.55906399f , -1.15218041f , 0.70760814f , 0.15200578f , 0.36721991f , -0.31006992f , 0.02414406f , 0.01873367f , -0.06168544f , -0.14084190f , 0.06391549f , -0.04024367f , -0.07702959f , -0.02899824f , -0.00754099f , 0.01931078f , 0.01310811f , + 0.69225346f , 0.84703204f , -0.19222695f , 0.59171381f , 0.90355259f , 1.04460186f , 0.42894358f , -0.70178829f , -0.37391764f , -0.32821766f , -0.50107079f , -0.39470843f , -0.47521936f , -0.30884997f , -0.01935248f , 0.29822241f , 0.42715252f , 0.30438803f , 0.02378992f , -0.17775730f , -0.46267559f , -0.55927080f , -0.39468999f , -0.38547224f , + 0.04236230f , 0.43024591f , 0.23320886f , -0.03322528f , 0.26547627f , 0.40419917f , -1.88256953f , 0.33336965f , 0.43032431f , 0.34945524f , 0.14640688f , 0.26111890f , 0.09050959f , 0.02378679f , 0.10374918f , -0.14167201f , -0.38323030f , -0.20424346f , -0.07877651f , -0.15358523f , -0.29084030f , -0.28534203f , -0.27854188f , -0.38414543f , + -1.35067299f , 0.93458694f , 1.52963743f , -0.47674751f , 0.63038639f , 0.04082455f , 0.01396927f , 0.26394766f , 0.21929233f , 0.30917185f , -0.05098944f , -0.21646126f , -0.06968916f , -0.21403511f , -0.42684368f , -0.24236372f , -0.25734336f , -0.24137196f , -0.18847818f , 0.05790433f , 0.47029098f , 0.74262516f , 1.02334770f , 1.07200952f , + 1.83813338f , 0.07329820f , -0.57353904f , -1.04253446f , -0.37247340f , 0.27885340f , -0.44127016f , -0.52596624f , -0.25949219f , -0.21831662f , -0.08737252f , 0.35876725f , 0.27309909f , 0.22976268f , 0.34570166f , 0.21284816f , 0.20626047f , -0.06110003f , -0.17056277f , -0.33205968f , -0.17877150f , -0.36375995f , -0.42667310f , -0.49148755f , + -0.22303223f , -0.61782734f , 0.07221479f , 1.17445515f , 2.13609068f , 1.76589885f , -0.17154121f , -0.54143140f , 0.11077396f , -0.12473649f , -0.52786787f , -0.05194147f , -0.44717763f , -0.76381778f , -0.72611078f , -0.52076079f , -0.13782787f , 0.23657528f , 0.01943847f , 0.24767381f , 0.39174174f , 0.63263104f , 0.63997347f , 0.76935917f , + 0.38916423f , 0.50423553f , -0.21980701f , -0.78548685f , 0.21972204f , -1.43872473f , -0.00193477f , 0.36744541f , 0.16700668f , 0.15377980f , 0.47950705f , 0.29978828f , -0.11417606f , 0.16176485f , -0.11482538f , -0.05361745f , -0.12586636f , -0.09325236f , -0.14811836f , -0.05048373f , 0.10243041f , 0.21861802f , 0.33250117f , 0.27345191f , + -0.16468513f , -0.37910979f , 0.57141664f , 0.42620144f , 0.44428971f , -0.54448346f , -0.05612505f , -0.02298608f , 0.53916950f , 0.25456592f , -1.10661655f , 0.40146315f , 0.12765698f , 0.17879679f , -0.07731271f , 0.01866167f , -0.15740825f , -0.28894193f , -0.34340439f , -0.43682656f , -0.22326149f , -0.09309579f , 0.16725751f , 0.19673331f , + -0.65757909f , -0.55769769f , 0.11252773f , -0.72975912f , -0.94079760f , -0.62713476f , -0.11981244f , -0.17247533f , -0.14738685f , -0.31158412f , 0.07368734f , 0.03103339f , -0.13215125f , 0.34103810f , 0.63393867f , 0.60552884f , 0.76554800f , 0.90960605f , 0.91659500f , 0.66527593f , 0.30424524f , 0.11961615f , -0.11209393f , -0.30051986f , + -0.82645253f , -0.59100209f , 0.39970568f , 0.22244794f , -1.28440435f , -0.46429652f , -0.43824168f , -0.32298820f , 0.10465933f , 0.69271672f , 0.92760147f , 0.82494517f , 0.34287482f , 0.34953026f , 0.02628626f , -0.35943701f , -0.39877485f , -0.31291814f , -0.37557165f , -0.14676958f , -0.17425675f , -0.18461930f , -0.05110559f , -0.07497296f , + 0.63983165f , -0.34339191f , -1.28647231f , -0.91450456f , -0.67728709f , 0.49126298f , 0.96821534f , 0.31300605f , 0.20917849f , 0.12659990f , -0.36342261f , -0.39963395f , 0.03244120f , -0.41837324f , -0.14271340f , -0.19770449f , 0.05878109f , 0.55231761f , 1.04404725f , 1.05536545f , 0.78016416f , 0.27780151f , 0.09224589f , -0.32156570f , + 1.30003273f , 1.10615566f , 0.93319181f , -0.31410562f , -1.16956697f , 0.45520743f , 0.46104645f , 0.18090068f , 0.31535574f , 0.12164263f , -0.04591607f , -0.26863484f , -0.02921210f , -0.15765476f , -0.25295046f , 0.08951494f , 0.29990800f , 0.46529486f , 0.49388104f , 0.48334578f , 0.56975339f , 0.86976618f , 0.99832143f , 1.00030209f , + -0.55945569f , -0.48562099f , -0.51312465f , 0.17718364f , -0.05557705f , -0.12420531f , -0.24644329f , -0.21879889f , 0.30085953f , 0.00211036f , -0.18180571f , 1.26296385f , 0.36245046f , -1.20467536f , -1.38107334f , 0.51651968f , 0.96691210f , -0.21489415f , -0.08106702f , 0.07733171f , 0.44486220f , 0.65985117f , 0.65337579f , 0.40205936f , + -0.30605618f , 0.02127030f , 0.13771863f , 0.12191376f , 0.08563477f , -0.00381708f , -0.81881216f , -0.82260335f , -0.43603699f , 1.36965455f , 4.16686363f , -1.70970343f , -0.32019699f , -0.11951735f , -0.80947648f , -0.47446757f , -0.10775129f , 0.04114059f , -0.30054633f , 0.64175035f , 0.82115142f , 0.62944370f , 1.08179899f , 1.57667179f , + -0.66788387f , -0.77237720f , 1.52623021f , 0.85040444f , 0.35492746f , 0.85358404f , 0.78207517f , 0.43130368f , -0.54845102f , -0.71654944f , -0.60068901f , -0.12408427f , -0.01179498f , 0.53882278f , 0.31915828f , -0.32987316f , -0.94788725f , -0.40099308f , -0.01063294f , -0.38326806f , -0.01161978f , -0.21941390f , 0.02258487f , 0.25904448f , + 0.79869030f , -0.85517012f , -0.65115608f , -0.04355956f , -0.43731619f , -0.71616470f , -0.30302847f , 0.88809204f , 0.05112801f , 0.10303432f , 0.13671577f , 0.57965072f , 0.32487238f , 0.33649929f , 0.01540811f , -0.25814148f , -0.72026311f , -1.15836561f , -1.20004844f , -0.81812408f , 0.41446837f , 1.03057194f , 1.42461866f , 1.82616342f , + 0.17675536f , -0.27924845f , 0.71723708f , 0.57533161f , -0.11526653f , 0.43395839f , -0.24166179f , -0.76071716f , -1.50945411f , -1.22484500f , -0.26852216f , 1.13903054f , 1.01376035f , 0.64844913f , 0.40121308f , 0.49004723f , -0.00594971f , -0.16285024f , -0.35446584f , -0.43396060f , -0.49929653f , -0.30312166f , -0.52537515f , -0.70337166f , + -0.01631724f , 0.04545139f , 0.53843851f , -1.98110624f , 0.42385228f , 1.10982161f , 0.08204933f , -0.22120343f , 0.22170428f , -0.13084571f , -0.38312127f , -0.33942169f , -0.35304155f , -0.04620752f , -0.20644844f , -0.11783954f , -0.03944293f , 0.22733974f , 0.19411990f , 0.20591734f , 0.35857215f , 0.26680777f , 0.13225980f , 0.03751274f , + 1.65876005f , 0.44487285f , 0.74939639f , 0.18365303f , -0.43020202f , -0.60237220f , -0.25419435f , 0.68333923f , 1.41188058f , 0.97222943f , 0.24472516f , -1.22113362f , -0.78612825f , -0.11991861f , 0.13256744f , -0.36248959f , 0.33181909f , 0.32143886f , 0.23857089f , 0.00232431f , 0.32728111f , 0.18236067f , 0.19458883f , -0.13449373f , + 1.01250205f , 0.78159362f , 0.01261799f , 0.68249798f , 0.04319542f , 0.35059328f , 0.74464616f , 0.84844350f , -0.11329224f , 0.41294739f , 0.18293144f , 0.20984708f , -0.58769014f , -0.80150375f , -0.51500468f , -0.35048400f , -0.42362303f , -0.36779032f , -0.28994050f , -0.23359131f , -0.06578403f , -0.05881381f , 0.08966738f , 0.00019544f , + 0.70403072f , 0.78285193f , 0.28511894f , 0.00755209f , -0.37995087f , -0.72155263f , -0.99707384f , -0.74737344f , -0.22877183f , -0.13565785f , -0.46966212f , 0.04900542f , 0.26640966f , 1.14596859f , 0.60401715f , 0.82513938f , 0.79006003f , 0.37851130f , 0.22098744f , 0.20295618f , 0.31645545f , 0.57600633f , 0.77757957f , 0.75482137f , + -0.31257984f , -0.82866492f , 0.10257062f , 1.11051690f , -0.28919177f , -0.56055958f , -0.92349260f , 0.14536629f , 0.59860128f , 0.38979660f , 0.36223511f , -0.54044378f , -0.36717720f , -0.11683797f , 0.76699709f , 0.24571187f , 0.28893468f , 0.47314073f , 0.42211323f , 0.40023200f , 1.13398057f , 1.09318885f , 0.78306966f , 0.51052587f , + 0.64453179f , 0.37582288f , -1.11900539f , 0.74031316f , 1.04873921f , -0.40828504f , -0.81838582f , -0.17966094f , -0.05226590f , -0.65864031f , -0.31516753f , 0.18237239f , -0.05159927f , 0.21789484f , 0.08749049f , 0.24120803f , 0.70600965f , 0.64124786f , 0.42083380f , -0.09773141f , -0.23606513f , -0.38900548f , -0.47036719f , -0.54328594f , + 0.19215906f , 0.37207957f , 0.52832092f , -0.35006098f , 0.09333668f , -0.08723831f , 0.13342910f , 0.37870962f , 0.31836369f , -1.28479417f , 0.33703877f , 0.14237789f , 0.05993876f , 0.02873350f , 0.23865068f , -0.04501394f , -0.31343410f , -0.18101341f , -0.24548541f , -0.25187640f , -0.07255855f , -0.10957046f , -0.11231929f , -0.28412748f , + -0.68394190f , 1.32649088f , -0.20251428f , 0.26341125f , 0.12047780f , -0.18276225f , 0.16509523f , 0.52338615f , 0.59701878f , -0.23303681f , -0.39329168f , -0.08757063f , -0.16628726f , -0.65649992f , -0.39211601f , 0.17386600f , 0.53243333f , 0.71723255f , 0.49078614f , 0.24827219f , 0.06289971f , -0.05734434f , -0.11833561f , -0.22187979f , + 0.39633308f , 0.04156044f , 1.06101733f , 0.27315319f , 0.59336180f , -0.53703174f , 0.16228868f , 0.13114487f , 0.27822076f , 0.36752801f , 0.19860881f , 0.02973693f , -0.43825412f , -0.58401569f , -0.28187681f , 0.04818616f , 0.03285983f , 0.13037889f , 0.11038839f , 0.02272515f , -0.23535124f , -0.61140662f , -0.80591081f , -1.04033145f , + -0.13968644f , -0.06564459f , 0.18157254f , 0.33968636f , -1.65427724f , -0.73513587f , 1.04378907f , 1.88232308f , -0.37664399f , -0.27362352f , -0.33476530f , 0.38907833f , 0.34755286f , -0.33257534f , -0.02008915f , 0.33980081f , -0.27671777f , -0.19240561f , -0.07016053f , 0.46780800f , 0.13346733f , 0.34947591f , 0.60154010f , 0.24323917f , + -0.39262699f , 0.20645882f , 0.64129296f , -0.83583673f , -0.02829965f , -0.15644726f , 0.05838216f , 0.14551091f , 0.14988963f , 0.11803820f , -0.32326940f , 0.68272158f , 0.31487041f , 0.19785659f , -0.39751586f , -0.35328008f , -0.40849303f , -0.08677978f , 0.86709071f , 2.23822727f , 1.53306955f , 0.78362429f , -0.23530753f , -0.72391215f , + 0.65081318f , -0.18880278f , -0.46498433f , 0.26852197f , -0.77114484f , 0.03361544f , -0.35148506f , 0.22060019f , 0.18248041f , -0.12293613f , -0.11807126f , 0.14429704f , 0.05679295f , 0.22972542f , 0.12354306f , 0.16318102f , 0.20910602f , 0.08354589f , -0.24387542f , -0.29604028f , -0.70475015f , -1.05341049f , 0.01797512f , 4.10874675f , + 0.45835477f , 0.01993812f , -0.04065773f , -0.15665852f , -0.42264630f , -0.36060614f , -0.43907429f , -0.66069837f , -0.24237031f , 0.15215315f , 0.03612217f , 0.24708032f , 0.55884560f , 0.72918318f , 1.75786010f , -0.70099106f , -0.65499421f , 0.89851270f , 1.07676113f , 0.70864260f , -0.27784651f , -0.35596115f , -0.12995875f , 0.20579609f , + 0.41191636f , 0.62621815f , 0.09298962f , 0.55341001f , 0.56857786f , 0.43563939f , 0.36112747f , 0.91004762f , -0.20875537f , -0.76286980f , -0.80355493f , -0.57667740f , -0.12055277f , 0.03202311f , 0.30982039f , 0.02801005f , -0.17407837f , 0.00238884f , -0.00072431f , 0.20627903f , 0.75917669f , 0.94538134f , 1.07598898f , 1.25330200f , + 1.62660683f , -0.09939473f , 0.66227464f , 0.58551798f , 0.70671700f , 0.17084690f , -0.20901679f , -0.40736809f , -0.48424703f , 0.03110675f , 0.17837373f , 0.15654547f , 0.05523718f , -0.00011673f , -0.03885655f , -0.10282160f , -0.05607837f , -0.02472319f , -0.02603773f , 0.16068736f , 0.49195589f , 0.53877406f , 0.64916929f , 0.58349185f , + -0.19541004f , 0.72348145f , 0.18424396f , -0.24664098f , -0.06871482f , 0.69420972f , 0.47406100f , -0.17312110f , -2.04415513f , -0.25411034f , -0.27524224f , 0.06647737f , 0.24326809f , 0.16942888f , 0.40718778f , 0.35988573f , 0.40128652f , 0.49142944f , 0.60191512f , 0.34882977f , 0.16989975f , 0.24984840f , 0.27163863f , 0.15321543f , + -0.44196663f , -0.26819397f , 0.67190611f , -0.18646133f , 0.45381660f , 1.11913414f , -0.16504930f , -0.57004245f , 0.12959909f , 0.01138749f , -0.36040681f , -0.97442716f , -0.87831396f , -0.14292832f , 0.42648657f , 0.25148162f , 0.69831357f , 1.48191698f , 1.27272976f , 0.11336886f , -0.87051097f , -0.59490814f , -0.81852032f , -1.19619968f , + -0.25757408f , 0.54305128f , -0.79688385f , -0.60924273f , -0.12316087f , 0.11158591f , -0.87972153f , -0.44243737f , 0.18336137f , 0.70958050f , 0.65996224f , -0.03788380f , -0.46562482f , -0.32237563f , -0.18491199f , 0.26669422f , 0.52467917f , 0.59451930f , 0.79600063f , 0.90689924f , 1.13895471f , 1.44288125f , 1.66630190f , 1.46406996f , + 0.88003703f , 2.56458597f , 1.71193850f , 1.65285002f , 0.72084892f , 0.38643126f , 0.14318446f , 0.28667315f , -0.19288261f , -0.16566274f , -0.31005972f , -0.49025502f , -0.18453165f , -0.14612403f , -0.04808515f , 0.01128747f , -0.01064585f , -0.12855927f , -0.22958706f , -0.19555403f , 0.02963856f , -0.01023782f , -0.12652262f , -0.10513883f , + 0.66279753f , 2.42221261f , -0.08766251f , -0.72413474f , -0.21245882f , -0.28173391f , -0.45644329f , -0.27322613f , -0.26135706f , -0.00095259f , 0.27722008f , 0.50181970f , 0.53741922f , 0.02301582f , 0.05101261f , 0.08308112f , 0.01205931f , 0.03237543f , -0.19025538f , -0.25886072f , -0.65187116f , -0.67398548f , -1.14025176f , -1.58932661f , + 0.17921058f , 0.08258647f , 0.33959227f , 1.72037280f , 1.38344521f , -0.23430972f , -0.50065409f , 0.00856925f , 0.28114664f , 0.27461748f , 0.31709158f , 0.82901212f , -0.15113492f , -0.25813352f , -0.41877594f , -0.81233724f , -0.71788760f , -0.16907758f , 0.19973863f , 0.33985209f , 0.02718327f , 0.32739235f , 0.74128769f , 0.93245569f +}; + +const float cdk_37bits_4[1536] = +{ + -0.08826527f , -0.68186913f , 0.10838073f , -0.43643363f , -0.41527175f , -0.55730727f , -0.34319791f , -0.40335689f , -0.41236590f , -0.43762241f , -0.34979692f , 0.20670516f , 0.56648629f , 0.45153526f , 0.24057949f , 0.52851143f , 0.92657151f , 0.59941681f , -0.15803439f , -0.97113347f , -0.53306250f , -0.15122053f , -0.25212109f , -0.21018566f , + 0.39520775f , -0.06876283f , -0.05296158f , 0.73104266f , 1.42403499f , 0.45421406f , -0.17043922f , -0.74733849f , -0.66305214f , -0.55365607f , -0.35289753f , -0.04055727f , -0.10593728f , -0.05024752f , 0.12627425f , 0.32227232f , 0.35862945f , -0.33025092f , -0.42097571f , -0.51789189f , -0.43150446f , -0.42237163f , -0.31356874f , -0.35919061f , + -1.66468995f , 0.28333893f , -0.63138470f , 0.25282895f , 0.81464016f , 0.43544261f , 0.16598498f , 0.21343499f , 0.04430694f , 0.04005313f , -0.09506983f , -0.40633891f , -0.37109338f , -0.10155129f , -0.25586130f , -0.50829977f , 0.02467106f , -0.22449907f , 0.00822338f , 0.18455191f , 0.25447269f , 0.12288496f , -0.09567011f , -0.30095943f , + -1.15666522f , -0.30930290f , 0.13432561f , -0.59224171f , -0.36982119f , -0.52250238f , 0.01911206f , -0.29889977f , 0.45230096f , 0.40142558f , 0.43793893f , 0.22627276f , 0.37598261f , 0.32984874f , -0.34803841f , -0.44638526f , -0.25723637f , -0.50369445f , -0.26783820f , -0.30872225f , -0.55499601f , -0.40533391f , -0.26323584f , -0.01148310f , + -0.04584967f , -0.38971238f , -0.56823951f , -0.32006352f , 0.38538708f , 0.18254611f , -0.62235892f , 0.18540613f , 0.48716625f , 0.35551317f , -0.19313758f , 1.16846919f , -0.41238633f , -0.43448740f , -0.28924472f , -0.56314872f , -0.24952920f , -0.08133851f , -0.17676199f , -0.70674324f , -0.52120829f , -0.49147628f , -0.40464508f , -0.25295616f , + -0.12422787f , -0.29459301f , -0.33474318f , 0.11311031f , -0.95766270f , 2.14261486f , -0.53791490f , -0.26163905f , -0.11342229f , -0.12540336f , -0.14724319f , -0.04078408f , -0.08162598f , 0.06846590f , 0.12489534f , -0.11390681f , 0.04214135f , -0.23484961f , -0.25483115f , 0.02702444f , -0.54449830f , 0.02294024f , -0.03270780f , -0.30881716f , + -0.51664184f , 0.87599163f , -0.82321314f , -0.48734917f , -0.18432637f , -0.09096773f , 0.20625230f , -0.20173932f , -0.40150868f , -0.29584636f , -0.57602568f , 0.25241069f , 0.25168301f , 0.41489722f , -0.15401326f , 0.31749293f , 0.46187393f , 0.14218968f , 0.29387424f , 0.35642876f , -0.05757794f , -0.25296762f , -0.36044236f , -0.53221886f , + 0.51447760f , -0.80338660f , -0.87861055f , 0.14544497f , 0.05095110f , -0.51385736f , 0.05449902f , 0.17409103f , 0.19329486f , -0.46366308f , -0.07068299f , 0.20485704f , -0.47646816f , 0.35635013f , 0.34452862f , 0.42683101f , -0.28134904f , -0.21080113f , 0.00849886f , 0.33035851f , 0.26195824f , 0.51184835f , 0.52439902f , 0.46235637f , + 0.32433320f , -0.77116443f , -0.37467928f , -0.05050502f , -0.47203456f , 0.07970732f , 0.03804198f , -0.34236150f , 0.41937760f , 0.42124343f , -0.03903765f , -0.03019702f , -0.13800061f , -0.47850547f , -0.79736222f , 0.61109423f , 0.72782314f , -0.09672306f , -0.16557727f , 0.16492016f , -0.11908040f , -0.37060885f , -0.80248368f , -1.06315439f , + 0.61844207f , -0.52687155f , -0.68500569f , 0.65092780f , 0.43851285f , -0.21063978f , -0.35770140f , 0.29858871f , -0.24062148f , 0.02631244f , -0.33422324f , -0.66271400f , 0.44374236f , 0.53668473f , 0.31036600f , -0.08124190f , -0.16668944f , -0.32551675f , -0.33450272f , -0.55269795f , -0.29912814f , -0.14136754f , 0.00094991f , 0.10863138f , + -1.02908550f , -1.08600196f , -0.00829438f , -0.14868032f , -0.00876750f , 0.35258516f , 0.23126957f , -0.61722565f , 0.07518664f , 0.16350336f , -0.12544307f , -0.06302285f , -0.20747087f , 0.16364178f , 0.11301830f , 0.14409114f , -0.22179807f , 0.02183975f , 0.08651544f , 0.10457808f , 0.28231708f , 0.45543402f , 0.44769940f , 0.39725637f , + -0.54707227f , -0.02419958f , -0.37616905f , -0.46877412f , -0.64214865f , 0.24761536f , 0.28016618f , 0.62399842f , -0.01700123f , -0.06949885f , -0.19266995f , 0.09365999f , 0.49890228f , 0.24080752f , 0.23087678f , -0.34184149f , -0.95236318f , -0.94491904f , -0.91565308f , -0.37099678f , 0.27911164f , 0.41946017f , -0.09527805f , -0.32953030f , + -0.01218671f , 0.22317147f , 0.12463154f , -0.28374239f , -0.37139030f , -0.11082455f , -0.20149460f , 0.02373646f , -0.33497796f , -0.14613409f , 0.84054162f , -0.89918850f , 0.07544184f , 0.26598709f , 0.27674891f , 0.20394454f , 0.37767382f , -0.42106119f , -0.34271983f , -0.11246076f , 0.03134837f , -0.21267097f , -0.66433234f , -0.79249183f , + 0.68565476f , -0.34282863f , -0.68036436f , -0.63475767f , -0.29231604f , -0.10656705f , 0.47040998f , 1.11298872f , 0.05838917f , -0.14239264f , -0.38985619f , -0.25211584f , -0.07283441f , -0.47047779f , -0.10102956f , -0.06816871f , 0.25442684f , 0.17135717f , 0.18068089f , 0.10725115f , -0.11463252f , -0.09624811f , 0.03206543f , 0.07087342f , + -0.29936977f , -0.49951612f , 0.56346184f , 1.11727567f , 0.05118005f , -0.78169038f , -0.22318233f , -0.13012064f , 0.42376494f , 0.27511994f , -0.06809198f , 0.10660060f , -0.13063709f , -0.08794603f , 0.26570905f , 0.03292540f , 0.26637413f , -0.19894586f , -0.46401960f , -0.28512188f , -0.39238542f , -0.32134023f , -0.64138162f , -0.88237115f , + -0.84203625f , 0.64837205f , -0.17913585f , -0.02044868f , 0.01755708f , 0.10928040f , -0.42224314f , -0.62418953f , -0.76712318f , 0.28173569f , 0.49961967f , 0.56539632f , 0.38946613f , -0.52975196f , -0.01398100f , 0.29168654f , 0.20212686f , -0.45414046f , -0.32780637f , -0.17832453f , -0.04055271f , 0.14063062f , 0.09399186f , 0.04073656f , + -0.59723568f , -0.77426417f , 0.23870880f , -1.09302554f , -0.22352372f , -0.10808799f , -0.30228652f , 0.70554939f , 0.06689791f , -0.27543124f , -0.16109074f , 0.39983998f , 0.14600029f , 0.02701649f , -0.30161728f , -0.00219904f , 0.02886825f , -0.00025967f , 0.06332021f , 0.53722019f , 0.26361456f , 0.43646772f , 0.61394343f , 0.42109711f , + -0.43760700f , -0.21770975f , -0.32449972f , 0.91826996f , 0.24783245f , -0.14194616f , 0.59717550f , -0.04725228f , -0.61148813f , 0.06530696f , 0.35852872f , 0.21424802f , 0.01537298f , -0.15430889f , -0.27459726f , -0.13011870f , -0.13872373f , -0.36362740f , -0.43974823f , -0.43751521f , -0.54202762f , -0.19719673f , 0.06386372f , 0.18442456f , + -0.08864543f , -0.55051998f , 0.10076329f , 0.20816090f , 0.53932942f , 0.15080000f , 0.00551145f , 0.12469664f , 0.10528548f , -0.05291477f , 0.52671815f , 0.10465375f , -0.40110729f , -0.11191133f , 0.98775607f , -0.67510753f , -1.30383213f , 1.28526656f , 0.19125450f , -0.16824100f , -0.63934107f , -0.41185818f , -0.34166262f , 0.14722503f , + -0.16958138f , -0.70266121f , -0.61550966f , -0.70951491f , 0.42067433f , -0.58598257f , -0.58567156f , -0.37146356f , -0.36153853f , 0.34830089f , 0.34255947f , 0.14665779f , -0.08274605f , 0.14596150f , 0.21786608f , 0.24560479f , 0.11959326f , 0.23920513f , 0.20309485f , 0.35852167f , 0.22083612f , -0.09433997f , -0.51773984f , -0.76810711f , + 0.09032751f , 0.42679636f , -0.28534103f , 0.21660665f , 0.47417813f , -0.81135171f , -0.99303930f , 1.17719925f , 0.70112272f , 0.00612786f , -0.26326442f , -0.41083270f , 0.28491165f , -0.02087201f , -0.14822163f , 0.12923365f , -0.12446203f , -0.33986599f , -0.41895285f , -0.31072727f , -0.31061808f , -0.24015583f , -0.23486759f , -0.36395849f , + -0.07413177f , -0.34521290f , -0.06577322f , -0.64923405f , 0.33496936f , 0.33223433f , -0.43032623f , -0.15153657f , -0.14532386f , 0.04384948f , -0.14353961f , -0.38067294f , -0.90445571f , 0.05745547f , 0.26321275f , 0.13427661f , 0.99048885f , 0.70150503f , 0.21638320f , -0.53518619f , -0.89368294f , -0.06732509f , 1.44618313f , 1.52346980f , + -0.28620228f , -0.41428071f , 0.03283058f , 0.28330900f , 0.28721719f , 0.17075826f , 0.19511151f , -0.13348216f , -0.35836936f , -0.41912925f , -0.65172261f , -0.20553457f , -0.41361716f , 0.03912969f , 0.74818546f , 0.38929433f , 0.35198685f , -0.18892266f , -0.42973273f , -0.08121690f , 2.93312199f , -0.89377191f , -1.04200958f , -0.38574966f , + -0.45622789f , 0.07453795f , -0.34784213f , -0.29222109f , -0.09713884f , -0.10453434f , 0.40596355f , -0.23133264f , 0.41138969f , -1.10624661f , 0.19522464f , -0.26295831f , 0.14668871f , 0.07972137f , 0.02069833f , 0.17917700f , 0.36376602f , 0.04686613f , 0.14326025f , -0.04095238f , -0.08246401f , 0.10201219f , 0.02758839f , -0.05655397f , + 0.29630435f , 0.03831385f , -0.10935451f , -0.91468053f , -0.14403908f , 0.12338524f , -0.16558686f , -0.53411536f , 0.34582072f , 0.52105737f , -0.73269102f , 0.15549081f , 0.34042874f , -0.08059104f , 0.05497700f , -0.00373706f , 0.11991085f , -0.06473005f , -0.19246960f , -0.28678310f , -0.43241128f , -0.23538086f , -0.03713469f , 0.08379386f , + 0.24034079f , -0.09568759f , -0.02338538f , -0.28961237f , 0.06180378f , 0.64449270f , -0.53964132f , -0.44965638f , 0.57702251f , -0.03990858f , 0.57093562f , -0.24702367f , 0.69686569f , -0.17564347f , -0.35201424f , -0.37152787f , -0.37484725f , -0.30144848f , -0.16064783f , -0.31374403f , -0.12815488f , 0.29541890f , 1.03104505f , 1.30178989f , + -0.18534500f , -0.41427735f , 0.20831804f , 0.44386174f , 0.06978829f , -0.00025745f , 0.37126911f , 0.56198427f , 0.54344631f , 0.75983386f , 0.08924900f , -0.25144457f , -0.16739214f , -0.47225391f , -0.61115204f , -0.61044836f , -0.28294647f , -0.15658827f , 0.07254076f , 0.04689538f , -0.03222463f , 0.00609252f , -0.03612525f , -0.09035452f , + 0.60889737f , 0.57807827f , 0.48410386f , -0.25108080f , -0.40924958f , 0.41713615f , 0.28334831f , 0.28268008f , 0.18075099f , -0.57117890f , -0.14971473f , 0.56189026f , -0.05567028f , 0.08252752f , -0.38305721f , -0.11908417f , -0.11953224f , -0.37400723f , -0.53048221f , -0.67201768f , -0.81958382f , -0.72027064f , -0.69311476f , -0.64712434f , + 0.22806651f , -0.36466423f , 0.42139538f , -0.34809071f , 0.16113471f , 0.17305177f , 0.79041909f , 0.11514622f , 0.04984584f , -0.14552208f , -0.37364685f , -0.61589400f , -0.26900080f , 0.26941075f , 0.20621872f , 0.13740956f , -0.49840209f , -0.54283296f , -0.52674918f , -0.53961784f , -0.37838808f , -0.22626697f , -0.23072639f , -0.20714483f , + 0.22144144f , 0.45530098f , 0.02934419f , -0.39899990f , 0.47181905f , 0.60295507f , -0.31589266f , 0.03503805f , 0.49654681f , -0.28248396f , -0.72402223f , -0.56858893f , 0.36486216f , 0.18158649f , -0.28256161f , -0.05020847f , 0.07122169f , 0.39556004f , 0.21779191f , 0.05943418f , 0.03455314f , -0.20122464f , -0.56175660f , -0.70861941f , + -0.12710089f , -0.34168755f , 0.51452312f , -0.34309463f , -0.18691030f , 0.49423846f , 0.78364805f , -0.16785659f , -0.68812345f , -0.24302951f , 0.18166059f , 0.09288723f , 0.25148875f , -0.56074443f , -0.33594006f , 0.09135379f , 0.28739172f , 0.63070785f , 0.16827578f , -0.09962802f , -0.38532235f , -0.56717197f , -0.69999986f , -0.97131938f , + -0.20318779f , -0.43550878f , 0.28264744f , -0.23992796f , 0.53190281f , -1.67612143f , 0.16592080f , 0.32242290f , 0.02740567f , 0.27409947f , -0.33298480f , -0.17137320f , 0.21066429f , 0.33840225f , -0.04092118f , 0.12976302f , 0.22063896f , 0.16238007f , 0.17740193f , 0.08810713f , -0.07588522f , 0.07136235f , 0.03907713f , 0.05669444f , + 0.74722369f , -0.21436950f , 0.74573008f , -0.38452217f , -0.62996036f , -0.61276966f , -0.34962832f , 0.01277742f , -0.04862746f , -0.36596994f , 0.22701717f , 0.22604413f , 0.19192867f , 0.43170927f , 0.32434957f , 0.29115238f , 0.30256436f , 0.32053789f , 0.47183832f , 0.56834074f , 0.41355131f , 0.30787160f , -0.05129232f , -0.37603415f , + 0.80624702f , -0.27464628f , 0.11826867f , 0.51984849f , 0.30134746f , 0.32731312f , 0.63578587f , -1.05098699f , -0.28256566f , 0.33641143f , 0.13788720f , 0.12207550f , 0.20964871f , -0.01396386f , -0.00315097f , -0.38868646f , -0.33190516f , 0.01254611f , 0.31412245f , 0.37172503f , -0.22028709f , -0.31539130f , -0.40227820f , -0.43477628f , + 0.48923265f , 0.77885034f , 0.09105701f , 0.57339326f , 0.40328303f , 0.76432879f , 0.86958428f , 0.61756568f , 0.03118874f , -0.56167934f , 0.04763708f , -0.27535056f , -0.56173692f , -0.35211845f , -0.21863091f , -0.57438481f , -0.18963688f , -0.01259367f , 0.18407625f , 0.57694011f , 0.26272878f , -0.04854515f , -0.05438820f , -0.03358252f , + -0.32142589f , 0.79436655f , -0.02373648f , 0.14911871f , 0.27451076f , -0.21064653f , -0.58233970f , -0.20841755f , -0.04707995f , 0.10160263f , 0.52370023f , 0.13469981f , 0.48437770f , 1.02370491f , -0.06404425f , -0.46008443f , -0.96962303f , 0.11051949f , 0.15222102f , -0.53779110f , -0.69372709f , -0.56309673f , -0.29040815f , -0.29949982f , + -0.02231366f , 0.22164658f , -0.18303626f , 0.03930299f , 0.85381138f , -0.35733905f , 0.09213505f , 0.01422806f , 0.45077065f , 0.33125549f , 0.13969212f , 0.00376337f , -1.11355683f , -0.42167326f , -0.19924204f , 0.06780255f , 0.13817913f , -0.13055957f , -0.04191829f , -0.08880165f , 0.10967999f , 0.21611496f , 0.31814813f , 0.31439510f , + 0.42170246f , 0.33624593f , -0.22613320f , 0.60027671f , -1.43986794f , 0.19361445f , 0.38787661f , 0.02591482f , 0.79456209f , 0.02551988f , -0.24845033f , -0.02790537f , 0.03271750f , -0.04445081f , 0.20502713f , 0.08570910f , 0.00909955f , -0.01248239f , -0.03298340f , -0.22777710f , -0.18913055f , 0.02764977f , 0.28305459f , 0.38851360f , + 0.25563805f , 0.33212894f , -0.80098121f , 0.09743245f , 0.06159913f , 0.59881048f , -0.33440346f , -0.49422089f , -0.26800689f , -0.34799111f , 0.00914211f , -0.24239391f , -0.35363956f , 0.18782859f , 0.53150753f , 0.27966626f , 0.37170277f , 0.02903349f , 0.11708475f , 0.18129252f , 0.35350094f , 0.51909923f , 0.57702624f , 0.56023430f , + -0.25681505f , 0.10481743f , 0.07691052f , -0.09602954f , -0.12447488f , -0.40272478f , -0.23240515f , -0.09172820f , -0.10406663f , 0.06799629f , 0.27877064f , 0.65360435f , 0.03477472f , -0.16610473f , 0.19640957f , 1.14225362f , -1.25460658f , -0.02280781f , 0.26718410f , 0.23326014f , -0.33868542f , -0.77563600f , -0.57910551f , 0.35682550f , + -0.44901076f , -0.41537996f , -0.76495288f , 0.42209785f , -0.90605030f , -0.39625885f , -0.28278183f , -0.06062198f , 0.12423915f , 0.20756261f , 0.19484825f , 0.03259953f , 0.41379186f , 0.19062025f , -0.02691834f , 0.12202985f , 0.38700297f , 0.61084418f , 0.41389101f , 0.42854542f , 0.07894843f , -0.08730420f , -0.19947308f , -0.20746447f , + 0.35263591f , -0.04388326f , -0.07294209f , -0.12542102f , -0.45217599f , -0.41959012f , -0.16900409f , 0.23194458f , 0.50540516f , 0.34564113f , -0.05519304f , -0.13052083f , -0.52610268f , 1.51200111f , 0.14243612f , -0.89107328f , -0.09550049f , -0.11976748f , 0.61738910f , 0.29385419f , -0.11218523f , -0.32931430f , -0.63743116f , -0.70832695f , + -0.52572193f , -0.16054333f , 0.67450855f , -0.68123993f , -1.06059852f , 0.25289129f , 0.72282093f , -0.17789928f , -0.04826238f , 0.65623860f , 0.30053556f , -0.04214508f , -0.65996229f , -0.19030221f , -0.07583416f , -0.15972053f , 0.48267006f , 0.29268192f , 0.54289151f , 0.30262687f , 0.55040148f , 0.38139609f , 0.22629776f , -0.10333201f , + -0.27722537f , 0.16931190f , -0.18986341f , 0.46255996f , 0.03451865f , 0.64648839f , 0.27927689f , -0.04817246f , -0.29637504f , 0.15848257f , -1.17177626f , 0.76705595f , 0.04986266f , -0.23619169f , 0.02130871f , -0.09247797f , -0.11246955f , -0.06979877f , -0.02858714f , 0.14146741f , 0.19316987f , 0.19281260f , 0.10108870f , 0.10991318f , + 0.57222024f , -0.09056345f , 0.31630312f , 0.09441631f , -0.48881639f , -0.26079169f , 0.28649904f , 0.47374236f , -0.92331796f , 0.56274886f , 0.19988114f , -0.33923171f , 0.45935192f , 0.66439754f , 0.09172813f , -0.58992377f , -0.13650098f , -0.00871775f , 0.05177348f , 0.29646543f , 0.22271673f , 0.29255650f , 0.32416359f , 0.37254208f , + 0.69873728f , 0.67827523f , -0.09873129f , -0.19519793f , -0.20388503f , -1.14639862f , 1.00268628f , -0.34199196f , 0.32858454f , 0.30752466f , -0.20180165f , -0.78353972f , -0.46150042f , 0.07066704f , 0.27017563f , 0.59315620f , 0.56514267f , 0.61730776f , -0.04109619f , -0.10375384f , 0.17107510f , 0.00671267f , -0.14460000f , -0.15704504f , + -1.08061540f , 0.25499966f , 1.21906248f , 0.18773257f , -0.32071123f , 0.34341071f , -0.31815992f , -0.09070897f , 0.28772196f , -0.36343715f , -0.43262838f , -0.03519430f , -0.08578842f , 0.04235681f , 0.22568464f , 0.41761967f , 0.33042161f , -0.16644760f , -0.20508813f , -0.34930117f , -0.25591130f , -0.03775689f , -0.04290093f , -0.14027967f , + 0.08954841f , 0.28400971f , 0.09640325f , 0.28015051f , -0.28901197f , -0.15938324f , -0.08647304f , 0.07096579f , -0.01533652f , 0.16784761f , 0.40365967f , 0.69056044f , -0.07072517f , -1.35839862f , 0.69003689f , 0.27081222f , -0.31318076f , -0.34628327f , -0.20433566f , -0.03988210f , 0.00227372f , 0.31880868f , 0.48586232f , 0.50530210f , + -0.10787652f , -0.54593003f , -0.06872456f , 0.08196332f , 0.32589906f , 0.59080671f , -0.46869291f , 0.51602298f , -0.65588957f , -1.15841782f , 0.46249030f , 0.28794341f , 0.03773606f , -0.22824300f , 0.08237000f , 0.11514488f , 0.09347876f , 0.31037616f , 0.25764090f , 0.16707290f , -0.00830484f , -0.01436382f , 0.04324129f , 0.08340130f , + 0.03635043f , 0.84751295f , 0.19029027f , 0.81160060f , 0.30403111f , -0.74745208f , 0.29141206f , 0.02554821f , -0.18681161f , -0.31641374f , -0.22117775f , 0.29307885f , 0.09884843f , -0.01001690f , 0.22991570f , 0.23960184f , -0.00030044f , -0.15515938f , -0.08622738f , 0.18116527f , 0.27032171f , 0.46691225f , 0.50791118f , 0.39209784f , + -0.58545217f , 0.80964945f , -0.18596625f , 0.05021434f , -0.60299753f , 0.01922541f , -0.09160450f , 0.71858494f , -0.20405914f , 0.12967029f , -0.19928245f , -0.41958358f , -0.73480796f , 0.27037925f , 0.59526072f , 0.43722623f , 0.08228142f , 0.13617314f , 0.16733195f , -0.17519530f , -0.15926519f , -0.04255070f , 0.08047599f , 0.02040241f , + -0.00463376f , 0.49611447f , -1.05764249f , -0.45817246f , 0.34650208f , -0.41315007f , 0.05117591f , -0.11590274f , 0.37210637f , 0.48788495f , 0.24580028f , -0.23874213f , 0.25067272f , 0.14486146f , -0.39195005f , -0.32974271f , -0.40998318f , -0.01004687f , 0.30386464f , 0.58853426f , 0.58687081f , 0.54124172f , 0.43891894f , 0.42482843f , + 0.06344340f , -0.06291464f , 0.30075410f , -0.01321988f , 0.11824609f , -0.36844623f , -0.22861175f , 0.44459133f , -0.10414380f , -0.41394982f , -0.26948513f , 0.10771022f , 2.01283344f , -0.48227800f , -0.85226571f , -0.05678206f , 0.09386327f , -0.32036269f , -0.09589284f , 0.11469854f , -0.02254415f , 0.26286370f , 0.24740398f , 0.30259810f , + 0.33675212f , 0.40803791f , 0.04656053f , 0.26235019f , 0.19124535f , 0.26174937f , -0.25007840f , -0.02874094f , 0.42657886f , 0.23713035f , 0.49137649f , -0.40631813f , -0.19729730f , -0.47353514f , -0.68684985f , -0.22225676f , 0.65537217f , 0.85454345f , 0.28736774f , -0.76858865f , -0.51993839f , -0.41223097f , -0.20210503f , 0.20680273f , + -0.32962876f , 0.99852252f , 0.90359799f , -0.72414673f , 0.40343042f , -0.04753735f , 0.12703283f , -0.50454354f , -0.49092182f , 0.07106628f , 0.04340118f , -0.20701432f , -0.00051299f , 0.41281149f , 0.48992497f , -0.07229812f , -0.22500199f , -0.38166508f , 0.00136486f , 0.19527238f , 0.46266022f , 0.52478433f , 0.49346943f , 0.55712590f , + 0.31231089f , -0.39507041f , 0.09233836f , 0.29644040f , 0.63936696f , -0.05632462f , 0.45315617f , -0.80271529f , 0.87935975f , -0.65177909f , -0.03975780f , 0.24344094f , 0.09139584f , -0.12641456f , -0.28974809f , -0.00440121f , -0.33446897f , 0.27455940f , 0.26598867f , 0.38959619f , 0.56355605f , 0.28858433f , -0.01329721f , -0.28521977f , + 1.21529134f , 0.05567950f , 0.26633834f , 0.01854368f , -0.56750884f , -0.64133765f , 0.12896192f , -0.25287368f , 0.00098562f , 0.46355571f , 0.30342317f , 0.60024559f , 0.45154622f , -0.23111479f , -0.07558175f , 0.04573468f , -0.22655397f , -0.38765071f , -0.39593191f , -0.33701184f , -0.03367326f , -0.00117395f , -0.08805175f , -0.08317989f , + 0.50206060f , -0.26397493f , 0.62403702f , 0.18840209f , -0.03554397f , 0.51126843f , -0.93620939f , 0.11466485f , -0.32354822f , 0.83573095f , 0.44043951f , -0.03326486f , -0.30990227f , -0.17807718f , -0.15678795f , 0.05137581f , 0.01928613f , 0.10898749f , 0.05153834f , 0.41224367f , 0.33750201f , 0.31515600f , 0.18742162f , -0.00543668f , + -0.32506550f , 1.39874024f , 1.05365357f , 0.20758975f , -0.52204159f , 0.23139865f , 0.89916776f , 0.88500307f , 0.58319149f , 0.64447478f , 0.60029914f , -0.39017287f , -0.48396982f , -0.45642499f , -0.41136891f , -0.85726305f , -0.72300890f , -0.76044173f , -0.54961686f , 0.13241207f , -0.38074475f , -0.31668368f , 0.18757575f , 0.89325609f , + 0.91423867f , 0.16949588f , -0.34930052f , -0.67767124f , 0.56381557f , 0.23625492f , 0.19384698f , 0.11556592f , -0.81768557f , -0.12373743f , 0.28726562f , 0.47434410f , 0.01976064f , -0.20909300f , -0.17968366f , -0.16456765f , -0.39581902f , -0.17030977f , -0.12522965f , 0.10547945f , 0.19050607f , 0.32547806f , 0.37610928f , 0.47194674f , + 0.50904911f , -0.87540838f , 0.44606989f , 0.16315214f , 0.04897779f , 0.44593548f , 0.58835263f , 0.23188759f , -0.04829018f , -0.47929534f , 0.01140653f , -0.52090906f , -0.08282465f , -0.47750687f , 0.00555375f , -0.02147925f , 0.29824067f , -0.09639830f , 0.04586002f , 0.81704610f , 1.02414420f , 1.00254358f , 0.93128379f , 0.86145793f , + 1.39640260f , 0.48600888f , 0.05812317f , 0.43032939f , 0.28626623f , -0.02572580f , -0.71026460f , -0.08052560f , -0.00321850f , -0.06166357f , -0.14918683f , 0.02044791f , 0.20449299f , -0.07389050f , 0.20856068f , 0.37499893f , 0.00961555f , 0.34856300f , 0.38826685f , 0.17380148f , 0.08518823f , 0.24834931f , 0.18030421f , 0.02885498f , + -0.14822571f , 0.59831391f , 0.80084782f , 0.65079236f , -0.37659866f , 0.02590007f , -0.43987457f , -0.47916614f , -0.09009334f , 0.00944784f , 0.38989625f , 0.72812391f , -0.25740561f , 0.30660597f , -0.10786678f , -0.04283082f , 0.33341247f , 0.56382527f , 0.36883485f , 0.19482792f , 0.20864518f , 0.30357803f , 0.21469035f , -0.00709814f , + -0.55721230f , -0.02926194f , 0.02222842f , 0.65955295f , 0.85507986f , 0.02606033f , -0.38236616f , 0.08681374f , -0.37079998f , 0.08312060f , -0.32595363f , -0.28424983f , 0.08744855f , 0.15171748f , -0.41262446f , 0.16415023f , 0.32175904f , 0.54372269f , 1.03276331f , 0.88586548f , 0.61435324f , 0.53755072f , 0.50108183f , 0.43471867f +}; + +const float cdk_37bits_5[1536] = +{ + -0.08458486f , 0.28094300f , -0.74427850f , -0.27121451f , 0.26225532f , 0.58828870f , 0.49469996f , 0.00671892f , 0.49956583f , -0.09194914f , -0.14439356f , -0.21589493f , -0.71932281f , -0.31712426f , -0.17322443f , -0.02668573f , -0.16316907f , -0.26011802f , -0.29961334f , -0.04510044f , -0.03045680f , -0.07408609f , -0.04966348f , 0.02019735f , + 0.16785217f , -0.12154415f , -0.11294764f , -0.50188502f , 0.37048745f , 0.01220048f , -0.42438767f , -0.39739743f , -0.09963068f , -0.01937236f , -0.38029066f , -0.09631205f , 0.17779303f , 0.55220057f , -0.27361767f , -0.01993755f , 0.59841836f , -0.81488799f , -0.50629196f , 0.04276219f , 0.50927647f , 0.32204460f , -0.05252335f , 0.00479347f , + -0.70183618f , -0.55990950f , -0.21828823f , 0.06948525f , -0.25175959f , 0.38514843f , 0.03565709f , -0.02286728f , -0.65965565f , -0.11708316f , 0.08641334f , -0.03958833f , -0.28740740f , 0.11907652f , 0.76730012f , 0.00002225f , -0.01526722f , 0.19057067f , -0.00116506f , -0.29043894f , -0.20613074f , -0.36670968f , -0.38149597f , -0.21397652f , + -0.20108924f , 0.01696758f , -0.63540490f , 0.48931316f , -0.10610658f , -0.30699680f , 0.42198382f , -0.11596909f , 0.56113924f , -0.19428230f , -0.31623064f , 0.01575740f , 0.47412599f , 0.01231773f , 0.03554178f , 0.04445166f , -0.52597131f , -0.38112781f , -0.41082892f , 0.02325108f , -0.03762488f , -0.10886600f , -0.30284977f , -0.25935547f , + -0.06153986f , -0.50865639f , 0.00873904f , -0.53985972f , -0.17321488f , -0.20024719f , -0.43903590f , 0.30867295f , 0.15257025f , 0.50412756f , 0.15585453f , 0.18716871f , 0.04465249f , 0.05395055f , 0.02286270f , -0.10569980f , -0.51109990f , -0.62598156f , -0.29411790f , -0.40475676f , -0.34305943f , -0.21692205f , -0.39934499f , -0.51704391f , + -0.73658870f , -0.68665226f , -0.06126038f , 0.66114991f , 0.35329723f , -0.17434640f , -0.20490335f , 0.00027985f , 0.04182559f , -0.12920453f , 0.35128407f , 0.36339554f , 0.47399902f , -0.25062146f , -0.38289190f , -0.23332452f , -0.20826575f , -0.16079639f , -0.14129191f , 0.18519827f , 0.08984042f , 0.01018800f , -0.07526643f , 0.16613248f , + 0.24459641f , -0.54593305f , -0.17413054f , 0.01221675f , -0.28335532f , -0.03597407f , -0.12785960f , -0.20546625f , 0.69946433f , 0.14655906f , -0.07567982f , -0.41903852f , -0.05404835f , -0.57786831f , 0.75099347f , 0.04385018f , 0.13817541f , 0.54561726f , 0.22589567f , 0.09746529f , 0.26583628f , 0.26558035f , 0.21082406f , 0.14352723f , + -0.61059536f , 0.25826720f , 0.08276875f , -0.29062272f , -0.22379136f , 0.27302107f , -0.39399985f , -0.90988239f , 0.68577814f , -0.07398823f , 0.29343711f , -0.02555969f , 0.17350828f , 0.10446548f , 0.05915310f , -0.12814425f , 0.16515519f , 0.23084429f , -0.07631257f , -0.12135962f , -0.32154020f , -0.35925975f , -0.31657161f , -0.17517095f , + -0.31345423f , 0.04713846f , -1.07240463f , 0.55819357f , 0.25919851f , -0.17080554f , -0.44683706f , 0.42549491f , -0.24160926f , 0.39135254f , -0.27273104f , -0.08747624f , -0.17073595f , -0.64858648f , 0.31353107f , 0.40731596f , 0.24294678f , -0.16681178f , 0.01469568f , -0.30776696f , -0.15317629f , -0.18218388f , -0.16911268f , -0.19813229f , + 0.25482069f , -0.02943669f , -0.39498625f , -0.32329009f , 0.10426426f , -0.22095104f , 0.29062234f , -0.15434571f , -0.12708599f , -0.10669553f , 0.33786459f , -0.20904693f , 0.49652844f , -0.62850056f , 0.21568910f , -0.21446226f , 0.21630725f , -0.08720906f , -0.52065307f , -0.35255320f , -0.59625366f , -0.43541450f , -0.28092364f , -0.00125747f , + 0.31917512f , -0.03488145f , -0.21380884f , -0.22835427f , -0.66217994f , -0.29555406f , 0.17821074f , -0.34530315f , -0.20166763f , -0.01021963f , 0.39444938f , -0.06786073f , -0.22698498f , 0.34432475f , 0.51326058f , 0.57986123f , -0.20027416f , -0.13834155f , -0.20880162f , 0.06494356f , -0.27871271f , -0.15747416f , -0.07939462f , 0.08519511f , + -0.57600983f , 0.33019806f , 0.38068317f , 0.13486793f , 0.61770011f , -0.42574210f , -0.17565397f , 0.32588004f , -0.07069465f , -0.12991907f , 0.10503579f , -0.53981949f , 0.27628270f , -0.40433813f , 0.56048034f , -0.11134494f , -0.02721288f , -0.02679116f , -0.03457161f , 0.00691900f , 0.35272657f , 0.02987130f , -0.37220393f , -0.73576355f , + -0.31901782f , -0.23550305f , 0.50511762f , 0.07681936f , -0.20832096f , -0.16180683f , 0.33639474f , 0.24607809f , 0.51978014f , -0.51511613f , 0.53433180f , -0.38461866f , -0.30344206f , 0.21738925f , 0.23262923f , -0.26642016f , -0.24689764f , -0.35119228f , -0.37163953f , -0.19926461f , -0.12294480f , -0.07264335f , -0.14869303f , 0.01600622f , + -0.32318991f , -0.06337691f , -0.16327790f , 0.01679607f , 0.54615398f , -0.13948782f , -0.07235812f , -0.31344026f , 0.21344099f , -0.56249237f , -0.54817142f , -0.38900153f , 0.08560375f , 0.51752999f , 0.09695531f , 0.45163870f , 0.11365917f , -0.03998578f , -0.10961891f , -0.25154202f , -0.53037031f , -0.51729631f , -0.12010728f , 0.27211617f , + -0.21869866f , -0.20612331f , -0.17148894f , -0.69131811f , -0.48874096f , 0.17532938f , 0.65606235f , 0.17337859f , 0.21369284f , -0.02261284f , -0.23113547f , -0.37691677f , 0.06425787f , 0.33138072f , -0.19000900f , -0.50235478f , 0.19744901f , -0.01426938f , 0.25673560f , 0.14800389f , 0.08629656f , -0.05995416f , -0.01856833f , 0.09638624f , + -0.68051548f , 0.42111210f , 0.16966116f , -0.18012337f , -0.66642379f , 0.11078652f , 0.51684818f , 0.04482584f , -0.37389220f , 0.07070225f , -0.22594402f , -0.24882296f , 0.28791258f , 0.16045673f , 0.13211217f , 0.30258098f , -0.11104291f , -0.34144481f , -0.61517912f , -0.45406688f , 0.24175899f , 0.43530490f , 0.33387051f , 0.31684453f , + -0.12348130f , 0.28844356f , -0.15230272f , -0.92611369f , 0.15595514f , 0.40309213f , -0.21089949f , -0.12710732f , -0.20149432f , 0.08709137f , 0.79880608f , 0.16826794f , -0.10477000f , -0.40397699f , -0.33124317f , -0.16915306f , -0.06502590f , 0.05657812f , 0.16028923f , 0.14994150f , 0.07722317f , 0.24695981f , 0.20225272f , 0.10946385f , + -0.31130776f , 0.09164996f , -0.10763487f , 0.00805002f , -0.37620293f , 0.04961005f , 0.18879671f , 0.12802431f , -0.14881133f , 0.00106507f , 0.20381895f , -0.01208542f , -0.02377667f , 0.48285147f , -1.19207093f , 0.60998154f , 0.08913394f , 0.16312199f , -0.15986004f , -0.18489974f , -0.26700574f , -0.10480556f , -0.03699614f , 0.39930124f , + -0.45078318f , -0.11456599f , -0.27898753f , -0.42503588f , 0.17516712f , -0.19617643f , 0.31818611f , -0.08178737f , -0.05417727f , -0.23405407f , -0.39611520f , 0.32937074f , -0.20757027f , -0.46769544f , 0.04745269f , 0.30856677f , 0.45826247f , 0.41349579f , 0.21491292f , 0.22174480f , 0.16553832f , 0.28625395f , 0.24514041f , 0.37926658f , + 0.24936771f , -0.04104704f , 0.27238824f , 0.16392268f , -0.06110497f , -0.02187308f , -0.14403711f , 0.49428075f , 0.66634565f , 0.04308588f , 0.20773125f , -0.07283823f , -0.03584369f , -0.15180729f , -0.21954145f , -0.16147124f , -0.54353183f , 0.31850719f , 0.70992696f , 0.77482366f , -0.73614329f , -0.70442321f , -0.77208369f , -0.52036749f , + -0.40407749f , -0.55580682f , 0.40834797f , 0.13313598f , 0.11194755f , -0.02575282f , 0.56373574f , -0.17680698f , -0.31347570f , 0.88388781f , -0.66229966f , 0.14478038f , -0.15586756f , -0.36242692f , -0.35125580f , -0.05976233f , 0.40268536f , -0.01780960f , -0.30415813f , -0.40711933f , -0.20657081f , -0.11416314f , -0.11392091f , 0.03499209f , + -0.02442649f , 0.00289107f , -0.42318484f , -0.77861141f , -0.21018343f , -0.02530250f , -0.05457845f , 0.29013785f , 0.27545606f , -0.54534532f , -0.28075430f , 0.48908889f , 0.44803264f , -0.23493075f , 0.30537914f , -0.17571639f , -0.28136367f , 0.41087545f , 0.06067306f , -0.07891926f , 0.13675464f , -0.23523981f , -0.64950230f , -0.84513939f , + 0.33320458f , -0.21239429f , 0.16584185f , 0.20947136f , -0.84373112f , -0.18662477f , -0.39277353f , 0.27160507f , 0.33045634f , -0.07972757f , 0.26989965f , -0.31828606f , 0.29166908f , 0.02792893f , -0.23589507f , 0.24680072f , 0.61805079f , 0.29297283f , -0.46279502f , -0.38853021f , -0.06845241f , 0.13809046f , 0.18584514f , 0.19851158f , + -0.01509547f , -0.42006585f , -0.02742765f , 0.01387587f , 0.04496372f , 0.33032099f , -1.33568146f , 0.04497330f , -0.13953978f , 0.17866902f , -0.22504135f , 0.03714148f , 0.42265213f , 0.48557283f , 0.09517080f , 0.08189501f , -0.02136855f , 0.18181835f , 0.26310442f , 0.14522422f , -0.00551997f , -0.08059227f , -0.01368360f , 0.19964321f , + 0.06879672f , -0.16572126f , -0.21275410f , -0.00047311f , 0.38956134f , 0.68791295f , 0.06981244f , 0.44725155f , -0.37536280f , -0.07016804f , -0.31450647f , -0.12757190f , 0.15884699f , -0.28116715f , -0.24072947f , 0.06964482f , -0.41365933f , -0.30556059f , 0.01412066f , 0.09088293f , -0.05730716f , 0.11902320f , 0.49328583f , 0.76218521f , + 0.14607820f , 0.36882839f , 0.31158718f , -0.18015097f , 0.37885733f , 0.09807226f , -0.69643398f , 0.00209062f , 0.07841871f , -0.15108867f , -0.16550965f , 0.49051298f , -0.13918703f , -0.16017141f , 0.15622856f , 0.32246753f , -0.21434589f , -0.12839098f , -0.62492818f , -0.41789280f , -0.33687252f , 0.15910414f , 0.40538907f , 0.45768888f , + -0.18246786f , 0.69660292f , -0.53239726f , -0.39785530f , 0.09269434f , -0.20090783f , 0.24169380f , 0.14920210f , -0.20929912f , 0.37639575f , -0.02298151f , 0.29037766f , -0.30134500f , 0.12924066f , 0.34148084f , -0.65422266f , -0.23263549f , 0.15293804f , -0.12172724f , -0.29655807f , -0.15215394f , -0.01750734f , -0.02878360f , 0.05063806f , + -0.26703187f , -0.12751254f , -0.03617813f , 0.00622364f , 0.22547815f , -0.57779029f , -0.13343456f , 1.59832374f , -0.86975741f , -0.37492672f , -0.39567028f , 0.18249899f , 0.04481957f , 0.29481366f , 0.13046647f , -0.10097157f , -0.02397564f , 0.04106330f , -0.32215387f , -0.06647077f , -0.19483820f , -0.47627356f , -0.28788121f , -0.35042823f , + 0.02227780f , -0.19386416f , -0.30157912f , 0.12610552f , 0.56722223f , -0.09994132f , -0.02285657f , -0.61753835f , 0.08410488f , 0.73128591f , 0.37298647f , -0.77570729f , -0.22843919f , 0.11891633f , -0.03551507f , -0.10041180f , 0.00489754f , -0.03082396f , -0.09347646f , -0.15507942f , -0.14360267f , -0.08927711f , -0.16377833f , -0.01469311f , + 0.56852461f , 0.23796399f , 0.13182028f , -0.25577917f , -0.33910792f , 0.34056262f , -0.02495276f , -0.05880465f , 0.05430314f , -0.53287936f , -0.34110034f , 0.15113928f , 0.54187888f , -0.26468157f , -0.01685372f , 0.57037827f , -0.07951393f , -0.27830922f , -0.20152098f , -0.00077798f , -0.04509011f , -0.12945183f , -0.22631022f , -0.11626274f , + -0.25019709f , 0.07915240f , 0.19342024f , 0.04977732f , -0.10307638f , -0.04911927f , 0.08460541f , 0.35299883f , 0.10558745f , 0.32964006f , 0.16392423f , -0.03030527f , -0.17918726f , -0.50040107f , 0.40349289f , -0.25886676f , -0.31911232f , -0.10072948f , 0.17941945f , 0.11358761f , -0.65821799f , -0.13049456f , 2.00511443f , -1.24662935f , + -0.25357033f , -0.52592150f , 0.49923249f , -0.16543271f , -0.00633755f , -0.23552079f , -0.33411617f , -0.24207035f , -0.05030731f , -0.07071177f , -0.09419244f , 0.02464220f , -0.01943557f , -0.41801617f , 0.03064668f , 1.18121471f , 0.23528827f , -0.79209131f , -0.20405955f , 1.14624028f , 0.39747635f , 0.85849404f , -0.04127540f , -0.50865399f , + 0.42229826f , -0.01473649f , 0.33422709f , 0.02941697f , 0.19965112f , 0.72713450f , 0.30384642f , -0.11286505f , 0.14747407f , 0.14751665f , 0.11932647f , -0.00264711f , -0.31504995f , -0.56415263f , -0.31330112f , 0.01942224f , -0.35638639f , 0.03432383f , -0.11977819f , -0.30638549f , 0.34671321f , 0.83570186f , 0.17469280f , -1.01495899f , + -0.01251236f , -0.01487474f , -0.16676968f , 0.08574318f , 0.11892522f , 0.84392270f , 0.07864696f , -0.91941698f , -0.54281393f , -0.10333463f , -0.18582849f , -0.26050308f , 0.66395133f , 0.42733714f , -0.24646344f , -0.19052737f , 0.31638957f , 0.07897013f , 0.04027109f , -0.25458239f , 0.20940366f , 0.17480388f , 0.16462327f , 0.22726978f , + -0.02974486f , -0.54604962f , 0.16929759f , -0.25102018f , 0.23723617f , -0.34661947f , -0.07598653f , -0.25231308f , -0.73500058f , -0.06708141f , 0.18697737f , 0.14282300f , 0.66886685f , 0.39198866f , 0.20429507f , -0.16054968f , -0.19399421f , 0.25548963f , -0.01871442f , 0.24332515f , 0.11001194f , 0.17128458f , 0.05301268f , 0.13370518f , + 0.06218397f , -0.11075064f , -0.47179494f , 0.44241371f , 0.02355115f , -0.03595332f , 0.06122175f , -0.89128427f , 0.30088747f , -0.16859130f , 0.25866312f , 0.50627502f , -0.10794532f , -0.21779689f , 0.18817072f , 0.03690803f , 0.04519087f , 0.11081125f , -0.16063397f , -0.29465752f , 0.07392634f , 0.19278544f , 0.34698486f , 0.61990484f , + 0.93310946f , -0.16003930f , -0.20232301f , -0.09149716f , -0.07742202f , 0.10544444f , 0.21543944f , -0.23192273f , 0.37584518f , 0.41668097f , 0.03315939f , -0.08464584f , 0.23874101f , 0.46904518f , -0.37717436f , -0.46519362f , -0.61713348f , 0.00253734f , -0.05435577f , -0.08905407f , -0.16726849f , -0.06183335f , -0.05902828f , -0.03528791f , + 0.27678118f , -1.22172710f , 0.33045954f , 0.00746992f , 0.02805380f , 0.37593685f , 0.03388730f , -0.30662300f , 0.20852594f , -0.26058111f , -0.05686500f , 0.26594392f , 0.13317456f , -0.21898256f , -0.24070719f , -0.23323971f , 0.27086818f , 0.15492204f , 0.28738611f , -0.10515406f , -0.17282966f , -0.16200061f , -0.15211483f , -0.08975717f , + 0.59311421f , -0.26642352f , -0.18351175f , 0.27817437f , 0.89836102f , -0.16570591f , -0.42252147f , 0.18559697f , 0.28409112f , -0.18921990f , 0.26375529f , -0.31791665f , -0.33115116f , -0.01469640f , -0.21691511f , -0.04101336f , 0.06816547f , -0.25758291f , 0.10261781f , 0.06210271f , 0.13856623f , 0.09669133f , 0.13691740f , 0.19601167f , + -0.47155089f , 0.72985836f , 0.20031390f , 0.60596157f , 0.37698777f , 0.31374835f , -0.04335831f , -0.19781138f , -0.35092304f , -0.19434376f , 0.20558302f , 0.09649664f , -0.41125462f , -0.31417023f , 0.14557422f , 0.13059497f , 0.24351408f , 0.45606066f , 0.19630429f , 0.04599059f , -0.10842569f , -0.01246157f , 0.09745947f , 0.19255215f , + -0.00592573f , 0.30808529f , -0.82755020f , 0.27196540f , -0.04397044f , 0.35031490f , -0.46245949f , 0.43218639f , 0.08949413f , -0.33531101f , 0.30153585f , -0.06912019f , 0.05157704f , 0.21559056f , -0.09478249f , -0.29283107f , -0.14210772f , 0.16107997f , -0.05714190f , -0.07436813f , -0.17587718f , -0.17911354f , -0.01118712f , 0.30263406f , + 0.59479190f , 0.43737796f , -0.53906079f , -0.09284007f , 0.11222222f , -0.70909913f , -0.32143749f , -0.10079180f , -0.20953687f , -0.04742476f , 0.16795483f , 0.54332818f , 0.27138756f , -0.04876020f , -0.15045069f , 0.12165485f , 0.37118663f , 0.28905161f , 0.48206821f , 0.04496926f , -0.32548961f , -0.26704421f , -0.14151166f , 0.04643725f , + 0.01857789f , 0.22380572f , -0.47831518f , 0.10523282f , -0.02303693f , 0.06579947f , 0.64486948f , -0.30766532f , -0.74577310f , -0.77953682f , 0.57447145f , 0.39403713f , -0.58964771f , 0.62821123f , -0.11929129f , 0.10954929f , 0.14699721f , -0.32854065f , -0.04573394f , -0.09611846f , -0.01925603f , -0.17973013f , -0.39814740f , -0.46576115f , + 0.35954529f , 0.21214434f , 0.29992890f , -0.43470418f , 0.22297513f , -0.74780053f , 0.29579016f , 0.38031695f , 0.70929833f , 0.17791374f , -0.31068973f , 0.03106903f , 0.02159010f , -0.32680013f , -0.05137091f , -0.35753644f , -0.04484695f , -0.12900523f , -0.08431778f , -0.06684064f , -0.13653506f , 0.11526736f , 0.41857603f , 0.60634687f , + -0.39857847f , 0.04884917f , 0.23406115f , 0.05538860f , 0.28382844f , -0.00189639f , 0.13911105f , 0.08498889f , 0.38084943f , -0.04839120f , 0.03137059f , 0.61768252f , -0.60458777f , 0.17599675f , -0.38910593f , -0.29574408f , -0.37344875f , -0.20375998f , -0.20238216f , 0.44496885f , 0.52761883f , 0.49054914f , 0.28209688f , 0.15957444f , + -0.09304443f , -0.24829008f , 0.01258115f , 0.25256399f , -0.33883889f , -0.24896392f , -0.05437653f , 0.19084219f , 0.57863216f , 0.39405103f , -0.77089337f , 0.12169591f , -0.54527825f , 0.19831126f , 0.08552984f , 0.24274638f , 0.14652491f , -0.01698693f , 0.17500050f , -0.05044189f , -0.10649361f , -0.14945507f , -0.17028214f , -0.02330724f , + 0.03708941f , -0.24037606f , 0.02610502f , 0.50618133f , 0.10793551f , -0.09837616f , 0.62190481f , 0.34616106f , -0.28267161f , -0.14290071f , 0.01530348f , -0.83226343f , 0.23366780f , 0.04347097f , -0.00300625f , -0.02718166f , 0.01892830f , 0.11549693f , 0.36192046f , 0.50541829f , 0.06636938f , -0.09251533f , -0.22221864f , -0.12965501f , + -0.47277684f , 0.24188752f , 0.24883904f , -0.02549111f , -0.17021090f , 0.26120838f , -0.17437786f , -0.12898937f , -0.09122841f , 0.58977574f , 0.11843505f , -0.68052107f , 0.69093722f , -0.45942130f , -0.33210729f , 0.59582125f , -0.21973689f , 0.45672258f , 0.17061853f , 0.09529478f , -0.14791095f , 0.22877969f , 0.23364199f , 0.17934426f , + 0.16186852f , 0.95532223f , 0.24207322f , -0.28038649f , -0.16606584f , 0.28705368f , -0.00385633f , 0.10024520f , 0.38606721f , 0.00630603f , -0.08918537f , -0.48762895f , -0.25520072f , -0.07233131f , -0.06791555f , 0.02988899f , 0.33242516f , 0.31840295f , 0.31437593f , 0.28920587f , 0.20710554f , 0.12154078f , 0.09165915f , 0.13540520f , + -0.13814042f , 0.76333362f , 0.47866377f , 0.69056795f , 0.37920652f , -0.08336837f , 0.11207624f , 0.09821375f , 0.10128568f , 0.04094478f , -0.15253392f , -0.11078606f , 0.25057753f , 0.22663675f , -0.61364190f , -0.15546409f , -0.09300050f , -0.16430823f , -0.19195716f , -0.31084762f , -0.10423817f , -0.12525492f , -0.23057864f , -0.28477374f , + 0.19153891f , -0.50596450f , -0.06105779f , 0.12200239f , -0.10106136f , -0.25277965f , 0.30874573f , 0.40660354f , -0.20056468f , 0.17407976f , 0.60265008f , -0.00174689f , -0.44985204f , -0.31371702f , -0.45581285f , 0.36180230f , -0.07689721f , 0.80922589f , 0.34920387f , -0.21634606f , 0.06852205f , 0.36029737f , 0.53860772f , 0.69593094f , + 0.15218961f , 0.07083646f , 0.38471465f , 0.14311856f , 0.51050633f , 0.02631960f , 0.07150340f , -0.05204054f , 0.01036712f , 0.03753337f , 0.12604818f , 0.04316599f , -0.04454527f , 0.25901986f , 0.20620898f , -0.25183978f , -0.94415183f , -0.48608996f , 1.99323108f , -0.11741995f , 0.09381593f , 0.24836984f , -0.11990959f , 0.40198786f , + 0.35937586f , 0.05698778f , 0.55993579f , -0.68942177f , -0.00843969f , 0.47116294f , -0.17925245f , -0.41881521f , -0.20778331f , 0.27187634f , -0.19950871f , 0.56109975f , -0.73314410f , 0.36645381f , 0.13542026f , -0.12859018f , 0.07003305f , 0.17282595f , 0.33447531f , 0.32716011f , -0.39068553f , -0.25495327f , -0.44464316f , -0.44631278f , + -0.24788508f , 0.44993219f , 0.49633852f , 0.14573879f , -0.82145522f , 0.08447045f , 0.24653278f , 0.20233825f , -0.08079227f , -0.31036126f , 0.09619263f , 0.78127448f , 0.27956930f , -0.05376367f , -0.24537081f , -0.24071734f , 0.06264366f , -0.00648643f , 0.14649115f , 0.22075554f , 0.00215430f , -0.16835304f , -0.14400020f , 0.05455559f , + 0.51475177f , -0.19511684f , -0.41661102f , 0.02887458f , -0.64696667f , 0.12493084f , 0.01019607f , 0.19888837f , -0.37880058f , 0.64135459f , 0.11055137f , 0.09557428f , -0.07711050f , 0.13238949f , -0.18005007f , -0.18262300f , 0.15084340f , -0.21503629f , 0.15653282f , 0.45708075f , 0.39918436f , 0.40428185f , 0.37849166f , 0.37443886f , + -0.37551659f , 0.34117536f , 0.04118741f , -0.11257164f , -0.12653529f , -0.87344655f , -0.56010800f , -0.07645484f , 0.14471437f , 0.20262780f , 0.29380185f , -0.02943048f , 0.10854716f , 0.43270966f , 0.25877519f , 0.11175582f , 0.11265276f , 0.12112616f , 0.32109879f , 0.25352173f , 0.28658481f , 0.29681278f , 0.39509407f , 0.43777195f , + 0.17504785f , 0.10160864f , -0.32996848f , 0.33545472f , 0.10088654f , 0.32002010f , -0.06513018f , 0.09378440f , 0.30444515f , 0.06564463f , -0.59311997f , 0.13934191f , 0.17049039f , -0.38526222f , -0.13285144f , -0.34127257f , 0.32308732f , 0.29646451f , -0.08667292f , 1.27873237f , 1.21492697f , -3.11928954f , 0.45762280f , -0.93594879f , + 0.17132808f , 0.08085753f , 0.26151050f , 1.03721715f , -0.25337638f , 0.26779752f , -0.61935064f , 0.10496638f , -0.18282397f , 0.00232460f , 0.17820442f , 0.20638928f , 0.07611441f , 0.12056159f , 0.20529210f , -0.06270324f , -0.04360808f , -0.42305491f , -0.41339045f , -0.00383610f , -0.19449359f , -0.25682704f , -0.37569311f , -0.21433847f , + 0.64365986f , 0.31456070f , -0.39495602f , -0.24863426f , 0.09837217f , -0.36609886f , 0.17111936f , 0.24419541f , -0.24359150f , -0.27882768f , -0.09002564f , -0.30691102f , -0.22673738f , 0.56321328f , 0.22388027f , 0.03208856f , 0.17981274f , 0.06991222f , -0.67356769f , -0.64900669f , 1.15113193f , 0.72776059f , 0.27327753f , 1.08582469f , + 0.41187807f , 0.20392498f , 1.09655483f , -0.34930742f , 0.20771295f , -0.06429869f , 0.08115226f , 0.22625148f , -0.72095719f , -0.02848530f , 0.42792136f , -0.04720602f , -0.22585980f , -0.29439740f , 0.06057192f , 0.13137013f , 0.24620234f , -0.13734663f , -0.12645317f , -0.30625075f , -0.14167838f , -0.11199965f , -0.18411244f , 0.12411211f , + 0.52310170f , 0.17749282f , 0.93116306f , 0.43734813f , -0.11189475f , -0.12583315f , -0.15636518f , -0.45970964f , 0.29811984f , 0.05623999f , 0.26734923f , -0.16388298f , -0.04470326f , 0.13948379f , 0.11499794f , 0.17243067f , 0.01441213f , -0.18039908f , -0.09565125f , 0.16544291f , 0.06548930f , 0.22771091f , 0.45780362f , 0.52809090f , + 0.28956302f , -0.16486587f , 0.29599013f , 0.32685118f , -0.28935868f , -0.00152686f , 0.55430159f , 0.03727197f , 0.10804969f , -0.54544071f , -0.79114628f , 0.10752299f , 0.05522333f , 0.63833259f , 0.49017560f , 0.02881627f , -0.39313059f , 0.50983607f , 0.34015996f , -0.08459223f , -0.28493761f , 0.10604944f , 0.27351683f , 0.32437791f , + -0.25283796f , -0.04532098f , 0.15075344f , 0.11408519f , 0.00916449f , -0.10310231f , 0.19258483f , 0.02635541f , -0.27218167f , 0.12402945f , 0.03511427f , 0.17636894f , -0.54939311f , 0.33454589f , -0.06691437f , -0.76895070f , 0.86149576f , -0.11074096f , 0.14506447f , -0.65269171f , 0.42690885f , 2.34010106f , -0.53713287f , -0.56076371f , + 0.34158378f , 0.24525259f , 0.18233515f , -0.01918052f , -0.38850956f , -0.10382009f , 0.23314099f , -0.44393411f , -0.22817265f , 0.43890661f , -0.35766222f , 0.12772962f , 0.29184572f , -0.35914868f , 0.41036163f , 0.13940763f , 0.24037289f , 0.31034789f , 0.39892172f , 0.45673361f , 0.25700279f , -0.23583305f , -0.56430632f , -0.63542661f +}; + +const float cdk_37bits_6[1536] = +{ + 0.02199370f , -0.29796617f , 0.05716792f , 0.13680255f , 0.26597120f , -0.02744179f , 0.20163618f , 0.55538992f , 0.22634719f , 0.31737301f , 0.16680373f , -0.09734626f , -0.23572572f , -0.44456075f , -0.32174953f , -0.27927807f , -0.32748565f , -0.18735586f , -0.18267408f , -0.46321102f , -0.04612331f , 0.01365363f , 0.19391054f , 0.39090135f , + -0.78693393f , -0.13121488f , -0.28380698f , -0.26404304f , -0.10486512f , 0.28404174f , -0.20661527f , -0.42204880f , -0.30458489f , 0.08583926f , 0.07085793f , 0.33480410f , -0.03611454f , 0.07957323f , -0.24515140f , -0.07119076f , 0.53589973f , -0.22960446f , 0.07406971f , -0.05459778f , -0.34032829f , -0.26754071f , 0.22258555f , 0.30461029f , + -0.40719188f , -0.52149744f , -0.06225098f , -0.58002850f , 0.18087742f , 0.16048132f , 0.33633101f , -0.27793274f , 0.29766130f , 0.23267788f , -0.40627837f , -0.11859464f , -0.33658426f , -0.08944806f , 0.07416164f , 0.12096620f , -0.17419709f , -0.33394555f , -0.01993099f , 0.18415306f , -0.00706952f , -0.18114484f , -0.17223192f , -0.00314600f , + 0.09136000f , 0.34482257f , -0.38038690f , 0.51845639f , 0.22194266f , -0.06195248f , 0.01057897f , -0.25864445f , -0.13813348f , 0.15711108f , 0.37305034f , -0.46508572f , 0.21910366f , 0.14590390f , -0.15011887f , -0.08081632f , 0.02686570f , -0.52447967f , -0.44642803f , -0.09356439f , 0.07841264f , -0.09014590f , -0.08406397f , -0.21549966f , + -0.10973105f , -0.34775792f , -0.20573880f , -0.13604716f , 0.02371719f , -0.25091561f , -0.39884717f , -0.11293660f , 0.35125293f , -0.23847405f , 0.75991690f , -0.00398242f , -0.37499879f , -0.16571879f , -0.17163070f , 0.28161005f , 0.30079809f , 0.08127173f , -0.21076595f , -0.41977393f , -0.20607863f , -0.13121646f , -0.05219850f , -0.20041567f , + -0.23929288f , 0.00328474f , -0.16404527f , 0.13343873f , -0.04468995f , -0.12674227f , 0.28141003f , 0.18544988f , 0.02601550f , -0.21845606f , -0.11057949f , -0.08909572f , -0.13195824f , -0.18487778f , 0.09887948f , 0.53205644f , -0.22134305f , -0.05746605f , -0.44707332f , -0.06333598f , -0.98347835f , 1.60965371f , -0.38440494f , 0.37345285f , + 0.18956874f , -0.63812607f , 0.04131005f , -0.45442314f , -0.54875750f , 0.04287724f , 0.25537551f , 0.08570099f , -0.08813623f , -0.09284444f , 0.03722275f , 0.36512077f , -0.09165936f , -0.03956157f , -0.01444716f , 0.03320064f , 0.05602971f , 0.12944547f , -0.08791108f , -0.21281390f , 0.02256362f , 0.21794416f , 0.49420878f , 0.51874581f , + -0.61939062f , -0.36501718f , 0.13770557f , -0.03873456f , 0.24524354f , -0.22114161f , 0.17262135f , -0.01018526f , 0.00734267f , -0.03028249f , -0.10222293f , -0.56027275f , 0.21981567f , 0.30177736f , -0.00599960f , -0.13637831f , 0.12005585f , 0.21762903f , 0.21013194f , -0.29453710f , 0.06570005f , 0.02671005f , 0.18952852f , 0.33755592f , + 0.14788881f , 0.00059595f , 0.03869057f , -0.08077903f , -0.12203289f , -0.84498958f , 0.47581358f , 0.02514588f , 0.04825696f , -0.01455508f , -0.01746364f , 0.27725910f , 0.12457264f , 0.11218197f , 0.26527797f , -0.25741487f , -0.07216861f , -0.32943112f , -0.08385290f , -0.36172079f , -0.42572896f , -0.53073631f , -0.32133031f , -0.11301412f , + -0.35066897f , -0.11415958f , -0.59117357f , -0.14095716f , -0.42297703f , -0.39599254f , 0.11101885f , 0.54908359f , 0.00983404f , -0.16570627f , 0.35167384f , 0.03659831f , 0.00451556f , 0.13297592f , -0.03455431f , 0.05151250f , -0.22783505f , -0.26878480f , -0.09719185f , 0.26294703f , 0.24726886f , 0.09052345f , -0.07129501f , -0.20450022f , + -0.04472087f , -0.37269265f , 0.03231240f , 0.03463392f , -0.33039098f , 0.03217782f , -0.35545027f , 0.13915732f , 0.21687252f , -0.70171718f , -0.39380045f , 0.29808315f , -0.10154988f , 0.58687688f , 0.36738223f , -0.01455050f , 0.25767865f , -0.13939968f , -0.18503719f , 0.06199296f , 0.11118295f , 0.01396018f , 0.09425776f , -0.03092734f , + -0.25728637f , 0.47463459f , 0.06581158f , -0.61445073f , 0.28805874f , 0.07087341f , 0.22849783f , 0.14652334f , -0.17916038f , -0.45793031f , -0.13375702f , 0.04741016f , 0.34305011f , 0.18609517f , 0.15796519f , -0.32119576f , -0.37724212f , -0.29019392f , -0.16584456f , 0.06247499f , -0.17973441f , -0.11871502f , 0.07256450f , 0.13822121f , + 0.20531600f , -0.09627213f , -0.35132620f , -0.03667359f , -0.25798228f , 0.21115819f , 0.03354110f , -0.02417022f , 0.43198429f , -0.23070254f , -0.12670631f , 0.15840355f , -0.09384404f , -0.11238464f , -0.08953585f , 0.10896049f , -0.00837215f , -0.46861227f , 1.49760729f , -0.67351773f , -0.52192511f , 0.01262532f , 0.20121502f , -0.39083539f , + 0.10656396f , -0.26831105f , -0.81601202f , 0.26397269f , 0.26863321f , -0.04846112f , 0.40399165f , -0.08820703f , 0.14718938f , -0.29278618f , -0.38479467f , 0.02420765f , -0.10191832f , -0.03998542f , 0.09718148f , -0.38999213f , 0.40517232f , 0.29658010f , 0.07025753f , -0.06541290f , -0.17956727f , -0.20362973f , -0.10716584f , -0.04799112f , + -0.08098934f , 0.01809647f , -0.31889640f , 0.20306658f , 0.05187569f , 0.03260165f , -0.28014725f , -0.09888837f , 0.24610335f , 0.17700122f , -0.30915327f , -0.08942879f , -0.50003116f , 0.85468538f , -0.27952271f , 0.40219755f , -0.20697633f , -0.22376407f , -0.24075343f , -0.23806655f , 0.09503069f , 0.19400941f , 0.29979874f , 0.26995405f , + -0.27054449f , 0.39277758f , -0.03760489f , 0.02099845f , -0.35791555f , -0.28760379f , 0.22223327f , -0.11251071f , -0.02563508f , 0.46326287f , -0.14502000f , -0.07375028f , -0.32793294f , -0.56372840f , 0.30213757f , 0.47683337f , 0.42993785f , 0.02200265f , -0.43110723f , -0.31763877f , 0.25984030f , 0.13257308f , 0.23346193f , -0.17362047f , + -0.12926955f , 0.23035254f , 0.14954128f , -0.15270953f , 0.01666258f , 0.25669412f , 0.26953793f , 0.47425752f , -0.09722404f , -0.12678088f , -0.27006791f , 0.06245438f , 0.11482178f , -0.51002017f , -0.55002144f , -0.13134853f , 0.49162370f , -0.20822342f , -0.09189974f , -0.03360844f , 0.08050459f , 0.08539808f , -0.01338071f , -0.32112911f , + -0.07384309f , 0.14700645f , -0.33549907f , -0.17107820f , -0.36567878f , 0.28540929f , -0.11645077f , -0.06093537f , 0.10704230f , 0.60475923f , 0.31110592f , 0.03294181f , 0.24602888f , -0.16878060f , -0.37308097f , -0.38852147f , -0.11457933f , -0.01155936f , -0.20566079f , -0.11646696f , -0.43156667f , -0.48332839f , -0.40869530f , -0.30176313f , + -0.04009388f , -0.48515311f , -0.01564117f , -0.22107208f , 0.26498770f , 0.32028506f , -0.06025879f , 0.53444487f , -0.52361462f , -0.13790355f , -0.00869928f , -0.37067541f , -0.00525305f , 0.34369466f , -0.11140079f , -0.21802883f , -0.02738621f , 0.09487138f , -0.18305111f , 0.21257672f , 0.19224339f , 0.13669179f , -0.07833677f , -0.43596981f , + -0.31269603f , 0.18817889f , -0.14017449f , -0.36643116f , 0.51493670f , -0.26894972f , 0.38067942f , -0.47165660f , -0.03935884f , -0.15393758f , 0.33966349f , -0.07858441f , 0.08218318f , -0.14083074f , -0.39968104f , 0.46984889f , -0.23459315f , -0.01561374f , 0.04443121f , -0.08906745f , -0.05813711f , -0.21827283f , -0.17460819f , -0.22917539f , + -0.32481184f , 0.18110865f , -0.03288883f , -0.13973233f , 0.27902282f , -0.11023560f , -0.16625632f , 0.02743534f , 0.10865317f , -0.10518495f , 0.26027757f , -0.15223339f , -0.35257469f , -0.01938217f , 0.46256528f , -0.27598628f , 0.04443960f , 1.07920395f , -1.13925232f , 0.36635637f , 0.35955458f , 0.25146378f , 0.11693719f , -0.28918251f , + -0.01140797f , -0.00108123f , 0.53664312f , -0.07884630f , 0.06610974f , 0.46994377f , -0.21062843f , -0.06753632f , -0.27422686f , -0.02290268f , -0.18794805f , -0.46650251f , -0.14397198f , -0.00227405f , 0.10488283f , 0.31441692f , 0.42101389f , 0.25235460f , -0.29244026f , -0.56175069f , -0.28002115f , -0.17549467f , -0.12071683f , -0.23331646f , + -0.14210038f , 0.15898131f , 0.34745032f , -0.39617165f , -0.04076848f , 0.18838182f , -0.13777208f , 0.22936475f , 0.41604669f , -0.29976263f , 0.25071099f , -0.15777986f , 0.01895400f , -0.00797168f , -0.55609191f , 0.33651175f , -0.23976909f , -0.55267202f , -0.20759468f , 0.05624592f , 0.01093081f , 0.08073438f , 0.28567820f , 0.30232551f , + 0.28315788f , -0.74308327f , 0.25294543f , 0.19940974f , 0.24760844f , -0.02307767f , 0.00394023f , -0.27240988f , -0.55346147f , 0.06135889f , -0.10476035f , 0.49139353f , 0.02862492f , 0.14164419f , -0.26209567f , 0.29521976f , -0.05334845f , -0.16688330f , -0.02634194f , -0.01985854f , -0.11432133f , -0.12121091f , -0.13386215f , -0.39429955f , + 0.01675275f , -0.07538106f , -0.33922440f , 0.34966904f , 0.15763570f , 0.08306612f , 0.62591343f , -0.03583112f , -0.43789635f , -0.06885643f , -0.00346875f , -0.06640113f , -0.32232724f , -0.18063079f , 0.53312831f , -0.00572204f , -0.27992509f , -0.50312951f , 0.12672777f , 0.16960075f , -0.11581876f , 0.02517662f , 0.13602646f , 0.24387275f , + -0.35732816f , -0.22019513f , -0.26829496f , 0.31166748f , -0.23832104f , 0.56149308f , 0.20096730f , -0.14980617f , 0.04728897f , -0.22598474f , -0.36740325f , 0.14028484f , 0.32691879f , 0.00451707f , -0.11546712f , 0.20652154f , -0.39073278f , 0.05148622f , -0.29347409f , -0.21830651f , 0.40790228f , -0.24466325f , -0.37143514f , -0.35725594f , + -0.34807000f , -0.00324691f , -0.06021802f , 0.27592230f , 0.20065100f , -0.31797201f , -0.48602388f , 0.05361142f , 0.30839620f , 0.41057671f , -0.47412603f , 0.10542789f , 0.20596832f , -0.20747184f , 0.40038595f , -0.20068089f , 0.00240007f , -0.38309980f , -0.05001577f , 0.17124043f , 0.09018175f , 0.07050526f , 0.22914929f , 0.15810766f , + 0.15361042f , 0.16095058f , 0.11590520f , -0.10531069f , -0.54075671f , 0.33490327f , 0.37034921f , -0.22227724f , -0.09516189f , -0.12944095f , 0.61220382f , -0.39342831f , 0.07187587f , 0.14034139f , 0.15782975f , 0.06333909f , -0.37017017f , 0.21683365f , 0.12401762f , -0.25136319f , -0.14144992f , -0.11683977f , 0.08998918f , 0.02907554f , + -0.75114647f , 0.03978493f , 0.76048864f , 0.09830364f , -0.18442047f , -0.01149302f , -0.08377934f , 0.01287934f , -0.10587886f , 0.02074821f , 0.24442453f , 0.25099252f , 0.04656507f , 0.10263959f , -0.00445999f , -0.09991211f , -0.18874159f , -0.04573901f , 0.12928997f , 0.08644625f , -0.19611160f , -0.27382974f , -0.29394396f , -0.47761274f , + 0.14765675f , 0.26358158f , -0.29464188f , 0.01676762f , -0.12098202f , 0.56991418f , -0.43628314f , 0.29279445f , -0.51684512f , -0.06979763f , 0.22084398f , 0.33328609f , -0.44667171f , -0.13234452f , 0.03221020f , 0.34402421f , -0.06995129f , -0.10237066f , -0.03757679f , 0.08387845f , 0.07625326f , -0.18566472f , -0.25481511f , -0.35690924f , + 0.36027465f , -0.14361307f , -0.01060078f , -0.14321892f , 0.47607774f , -0.21917094f , -0.19024330f , 0.35483351f , 0.00343023f , 0.16704908f , 0.09217343f , -0.36458287f , -0.68525894f , -0.06920128f , 0.13485445f , 0.16439202f , 0.13577501f , -0.06075085f , 0.02266803f , 0.26611340f , -0.37850955f , -0.49541492f , -0.48481104f , -0.30493937f , + 0.04767197f , 0.17098898f , -0.03724685f , -0.76939534f , -0.52710450f , -0.26151755f , -0.36749599f , 0.19673299f , 0.11499191f , 0.25563946f , -0.18105024f , -0.11440595f , 0.27962189f , 0.12349943f , 0.04827891f , 0.17421978f , 0.25830670f , 0.15467508f , 0.17983330f , 0.17053327f , 0.01501125f , -0.21006919f , -0.24807426f , -0.27314815f , + -0.24896720f , 0.19371740f , 0.06879568f , 0.44049451f , 0.14914746f , 0.03856987f , 0.06978715f , 0.40612007f , 0.28010982f , -0.56749281f , -0.01993429f , 0.46728351f , -0.36770014f , -0.15189625f , -0.02595528f , -0.16408195f , -0.11358236f , 0.34475368f , 0.37996789f , -0.23334622f , -0.02333946f , -0.29586512f , -0.08357343f , 0.01075083f , + 0.01442941f , -0.19995191f , -0.25851229f , -0.29267926f , 0.50501148f , 0.07809462f , -0.35000787f , 0.00232180f , 0.25576742f , 0.22026677f , -0.28505912f , 0.32678020f , 0.14230208f , -0.25462591f , -0.52430874f , 0.00733528f , -0.12371759f , 0.46221140f , 0.03726347f , 0.06724595f , 0.38257606f , 0.29300802f , 0.20146742f , 0.05769846f , + 0.46566196f , -0.22129182f , 0.48408131f , -0.08771705f , 0.34179928f , -0.03570483f , 0.28260230f , -0.37152490f , 0.24002550f , -0.37004615f , 0.04007914f , 0.14066291f , 0.03156739f , -0.40473859f , 0.24504260f , -0.12061618f , -0.01911784f , -0.09587775f , -0.20311630f , 0.25305578f , -0.02444684f , -0.17360130f , -0.33200194f , -0.56919023f , + 0.40911162f , -0.26402836f , -0.43905076f , -0.53557497f , 0.19016209f , -0.01532019f , -0.46281760f , -0.26868248f , 0.12319043f , -0.03526231f , 0.14611501f , -0.35525234f , 0.34301743f , 0.10756893f , 0.38690216f , 0.01304076f , -0.17233959f , -0.26353334f , -0.32623011f , -0.13634929f , 0.06881118f , -0.03647389f , 0.13860696f , 0.21618306f , + 0.58044419f , -0.31542590f , 0.13749045f , 0.15061296f , -0.24506767f , -0.10488291f , -0.37675292f , -0.04226534f , -0.16466027f , 0.20334112f , 0.62047117f , -0.07748292f , -0.23123208f , 0.22647883f , 0.46423202f , -0.53987978f , 0.26867801f , 0.17570387f , 0.22624788f , -0.06808559f , -0.09873793f , 0.00241821f , 0.05209155f , 0.02604012f , + -0.18720130f , -0.00619393f , 0.08934188f , 0.18479801f , 0.00631687f , 0.35401594f , -0.22430546f , -0.17052726f , -0.27404318f , 0.34842459f , 0.06523245f , -0.22607999f , 0.38438344f , 0.31775172f , 0.00274227f , -0.32430710f , -0.25886046f , -0.22780138f , 0.00599115f , 1.13173049f , -1.16090310f , 0.31502644f , 0.39054668f , -0.12545157f , + 0.08495448f , -0.08111156f , 0.13201128f , 0.10631004f , -0.62508184f , 0.49447676f , 0.05698153f , 0.57661737f , 0.16100334f , 0.29281953f , -0.42535641f , -0.34334011f , -0.21130696f , -0.11053404f , 0.29449021f , -0.00923741f , -0.15178458f , -0.03327836f , 0.04623104f , 0.06728107f , 0.07479295f , -0.09249471f , -0.01129765f , -0.02381652f , + 0.58733539f , 0.15083492f , -0.07170902f , 0.07265805f , 0.25686979f , -0.00362956f , 0.16478015f , 0.10189929f , -0.35758569f , 0.34626172f , -0.76537636f , -0.14748849f , 0.23675893f , 0.10373267f , 0.09933094f , -0.01851098f , -0.01787937f , -0.12160932f , -0.09891368f , -0.10410372f , 0.04554984f , 0.08997877f , 0.12949773f , 0.02665334f , + 0.29472382f , 0.55621057f , -0.25157141f , -0.08071915f , -0.33720618f , -0.07969815f , -0.09542065f , -0.03385662f , 0.57363003f , 0.21066071f , -0.26291676f , 0.64510933f , -0.24141325f , -0.10243829f , -0.10243462f , 0.03275380f , -0.20748095f , -0.21739693f , -0.02629787f , 0.14996425f , -0.18327383f , 0.03844543f , -0.12298422f , -0.48155671f , + -0.03002892f , 0.10542293f , 0.06159204f , 0.27084880f , 0.33088023f , -0.39709374f , 0.40602594f , 0.01355505f , -0.21134955f , 0.38680071f , 0.42354405f , 0.13430508f , 0.04568189f , -0.43410657f , -0.13995521f , -0.32088491f , -0.23742271f , 0.13613850f , 0.22766366f , 0.52067443f , 0.36422193f , -0.09820343f , -0.25055881f , -0.32764668f , + -0.03031539f , 0.33911970f , 0.00121262f , 0.23395660f , 0.10188493f , 0.35700308f , -0.26121354f , 0.04562318f , 0.08861375f , -0.19333300f , -0.17460139f , -0.06438315f , 0.08512698f , -0.28212770f , 0.58969600f , -1.01876488f , 0.72771298f , -0.24186158f , -0.25474736f , -0.05188159f , 0.35800295f , -0.07855298f , -0.01848759f , 0.30122272f , + -0.16488121f , 0.39899154f , -0.43527753f , 0.06350178f , -0.25145471f , -0.13442742f , -0.05695327f , 0.05515276f , -0.53947634f , 0.10452757f , -0.00613783f , 0.09941644f , 0.48768605f , 0.23880974f , 0.15991320f , -0.08188036f , -0.07454521f , 0.46447496f , 0.20306282f , -0.35729603f , -0.19729891f , 1.15029004f , 0.78677730f , -0.96063281f , + 0.31021050f , -0.38542028f , 0.38342353f , 0.13604497f , -0.07567226f , -0.23168737f , -0.02250859f , -0.04684466f , 0.02122357f , 0.36396360f , -0.03570663f , -0.41257090f , 0.57597067f , 0.13936689f , -0.44959133f , -0.14512843f , 0.31888158f , -0.68434472f , 0.36855275f , 0.34229507f , 0.14749025f , -0.13593595f , -0.02198259f , 0.03092032f , + 0.04127156f , -0.30338390f , -0.36945017f , 0.09750128f , 0.03159281f , -0.09756566f , -0.00189927f , -0.12775820f , 0.11355232f , -0.16024788f , 0.32150415f , 0.19535993f , 0.22702237f , 0.26433052f , -0.08518964f , -0.13355330f , -0.54717674f , 0.18386017f , 0.53068186f , 0.35196477f , -0.36756679f , -0.69260204f , 0.19830746f , 0.92671624f , + -0.09461538f , 0.67447380f , 0.12354656f , 0.17963388f , 0.15317263f , 0.19433224f , 0.16035999f , -0.50697166f , 0.22832688f , -0.03638860f , -0.31139766f , -0.15364902f , -0.16277929f , 0.09079846f , 0.36114558f , 0.19448427f , -0.21078568f , -0.04243481f , 0.26104266f , 0.46369813f , 0.26334525f , -0.14251361f , -0.10575649f , -0.10844448f , + -0.04642582f , -0.10287474f , 0.07590817f , 0.04960837f , -0.05287987f , -0.15988848f , -0.08701719f , 0.14028344f , -0.27072892f , -0.02715588f , 0.24338776f , 0.20341433f , 0.43004675f , -1.02991828f , 0.27940707f , 0.21700241f , 0.11492563f , 0.27903919f , 0.26058323f , -0.34700893f , 0.07076686f , -0.10221847f , 0.05257812f , 0.55040312f , + -0.00947855f , 0.16201946f , 0.01530995f , 0.21655645f , -0.39190608f , -0.53475683f , 0.27626723f , -0.10828040f , -0.11491983f , -0.37356045f , 0.23110876f , 0.23915995f , 0.26409657f , 0.05516764f , -0.26520423f , 0.23157479f , 0.49045853f , 0.07154379f , 0.24906795f , 0.48215117f , 0.36682427f , 0.30977279f , 0.41199849f , 0.35374660f , + 0.11035037f , 0.12792077f , 0.34911446f , 0.03095177f , -0.26708115f , 0.01926537f , 0.06581393f , -0.83391569f , 0.11407886f , 0.34947774f , -0.06272482f , 0.45584926f , 0.35208593f , 0.02210972f , 0.03663452f , -0.16326364f , -0.08863411f , -0.12989747f , -0.24846516f , 0.02403637f , 0.24144266f , 0.21460052f , 0.21802777f , 0.17582350f , + 0.17586580f , -0.03883077f , 0.41247141f , 0.20117164f , 0.49169701f , 0.55456607f , -0.33339198f , -0.15935525f , 0.11000758f , 0.03881595f , -0.08086591f , 0.08127779f , -0.21850527f , 0.25204265f , 0.02918388f , -0.46406159f , -0.30149637f , -0.28716264f , -0.01652976f , -0.21430167f , -0.05257479f , -0.11894064f , 0.12104770f , 0.21200677f , + 0.05077562f , 0.64049606f , 0.29166977f , -0.14882998f , 0.23041791f , -0.17570776f , -0.25126896f , 0.15320959f , -0.50542113f , 0.51581805f , 0.29050952f , 0.02906798f , -0.21707118f , 0.08731647f , -0.26192461f , 0.08930377f , 0.01540895f , -0.11515550f , -0.13173228f , 0.04443261f , 0.14861127f , 0.15145403f , 0.38816557f , 0.40757716f , + 0.31175167f , 0.17090647f , 0.17998268f , -0.19899135f , 0.28615557f , -0.13419397f , 0.07062408f , -0.18842182f , -0.15533919f , -0.48813043f , 0.33410690f , 0.14699633f , 0.07321804f , 0.60685754f , -0.42827502f , -0.43054167f , 0.30547944f , 0.50321733f , -0.20117562f , -0.07447133f , -0.00135400f , 0.05786543f , -0.01808385f , -0.10533247f , + 0.05054332f , -0.14047735f , -0.07415119f , 0.44066546f , -0.02324372f , -0.09192828f , -0.18097335f , 0.09834903f , -0.26580813f , -0.02556763f , -0.37105934f , 0.12150755f , -0.11848442f , 0.04784313f , -0.11220379f , 0.39803073f , 0.52224090f , 0.10595610f , 0.18711063f , 0.29425741f , -0.12712275f , -0.75269106f , -0.62164375f , 1.49229636f , + -0.05263376f , 0.01551319f , -0.01862667f , 0.39621319f , 0.00775791f , 0.19443440f , -0.37005598f , 0.09947225f , 0.17067061f , -0.59100529f , -0.09194870f , -0.41824230f , 0.54676965f , 0.01393038f , 0.32793066f , 0.12752974f , -0.01761483f , 0.26099604f , 0.18632115f , 0.17752999f , -0.12037572f , -0.19613144f , -0.11840061f , -0.09740210f , + 0.09912611f , -0.24884033f , 0.19434008f , 0.16192972f , 0.05004326f , -0.59081926f , -0.41278435f , 0.10837713f , 0.06286063f , 0.17897341f , -0.09549655f , -0.11946937f , 0.19636290f , 0.10840741f , 0.12514136f , 0.91209643f , -0.52293308f , 0.24102239f , 0.14117183f , -0.19578756f , 0.29083443f , 0.08063250f , -0.15288813f , -0.30169128f , + 0.01584630f , -0.11259531f , 0.39416192f , 0.56959415f , -0.29736651f , 0.10790402f , 0.64124109f , -0.30225328f , 0.10444127f , 0.04559679f , 0.04662132f , -0.13559913f , -0.47705291f , 0.24948308f , -0.09175683f , -0.12182940f , 0.23087559f , -0.04229615f , -0.10186917f , 0.07827786f , 0.09243493f , 0.11202796f , 0.04243676f , 0.08887602f , + -0.38219650f , -0.11461189f , -0.18648336f , 0.19816038f , -0.09732223f , 0.52544356f , -0.13255010f , -0.13256714f , 0.46163208f , -0.08822080f , 0.30489642f , -0.27441353f , -0.17900853f , -0.37170730f , -0.16593309f , -0.05832152f , 0.20792097f , 0.02230373f , 0.39776652f , 0.32480143f , 0.56771378f , 0.28147085f , 0.12035847f , -0.06198797f , + 0.16289063f , 0.29806667f , 0.12344487f , 0.11272351f , 0.03410954f , -0.30062456f , 0.06877076f , -0.06004153f , 0.62082084f , 0.47068710f , -0.30298966f , -0.26674229f , -0.10333087f , 0.13814787f , -0.18170023f , -0.26286846f , 0.14643367f , 0.69028091f , 0.12706668f , -0.06000300f , -0.15983614f , -0.16308927f , 0.06054026f , 0.24605632f , + 0.71272052f , 0.52242539f , -0.04818476f , 0.31193593f , -0.15987333f , -0.06222937f , -0.05672104f , 0.53241922f , 0.05925126f , -0.20570464f , 0.11569695f , -0.11659635f , 0.17015156f , 0.03835440f , -0.10022938f , 0.00626121f , -0.22082679f , -0.10482121f , -0.03046492f , -0.07362554f , 0.16480680f , -0.02745797f , -0.23714652f , -0.40036483f , + 0.00774041f , 0.02630024f , 0.85679294f , -0.16620543f , 0.13390597f , -0.43418821f , 0.27099640f , 0.29601681f , -0.05468039f , 0.00123578f , -0.34476791f , 0.20548883f , 0.12690026f , -0.12125541f , -0.24822526f , 0.32121761f , -0.15281912f , 0.18448249f , 0.30215241f , 0.12566250f , 0.06993898f , -0.03997524f , 0.17346822f , 0.40869366f , + 0.50810094f , 0.24316475f , -0.32829494f , -0.52128186f , 0.13028426f , 0.29952885f , 0.46293804f , -0.26433277f , -0.37140799f , -0.12921967f , -0.20423017f , -0.11719085f , 0.08305804f , -0.12334944f , -0.23731075f , 0.22837853f , 0.24340316f , 0.43535913f , 0.30959620f , 0.04173569f , -0.57982693f , -0.34522367f , 0.14683522f , 0.05595596f , + 0.02237034f , -0.06316542f , -0.01048143f , -0.27361876f , 0.01327775f , 0.01156603f , -0.02656291f , -0.30384147f , -0.39207165f , 0.02401410f , -0.01835587f , 0.05743541f , -0.37923460f , 0.21265931f , 0.57306648f , 0.29538200f , -0.06625719f , 0.44038905f , 0.54409558f , 0.06943242f , 0.86241612f , 0.52782911f , 0.13063215f , -0.00969728f , + 0.11622122f , 0.02224264f , 0.32680233f , 0.00674035f , -0.18269996f , -0.07149903f , -0.38216845f , 0.11519523f , 0.15289458f , 0.02026007f , 0.31202256f , 0.38286848f , 0.06066707f , -0.11169249f , -0.10677312f , -0.20147411f , 0.01167547f , 0.11246367f , -0.70525138f , -0.69991387f , 1.00946560f , 0.95344512f , -0.75251996f , 0.27342287f +}; + +const float * const cdk_37bits[] = { cdk_37bits_1, cdk_37bits_2, cdk_37bits_3, cdk_37bits_4, cdk_37bits_5, cdk_37bits_6 }; +const float * const cdk_37bits_ivas[] = { cdk_37bits_1_ivas, cdk_37bits_2, cdk_37bits_3, cdk_37bits_4, cdk_37bits_5, cdk_37bits_6 }; + + +/* Sine tables for FFT */ +/* for (j=0; jfftlen/2+1; j++) hs->fftSineTab[j] = (float)sin(2.0*EVS_PI*j/hs->fftlen); */ + + +const float fftSineTab640[321] = +{ + 0.0000000000000000000000000f, 0.0098173199221491814000000f, 0.0196336936205625530000000f, 0.0294481739401817320000000f, 0.0392598174512386320000000f, 0.0490676760673522950000000f, 0.0588708035647869110000000f, 0.0686682611703872680000000f, 0.0784590989351272580000000f, 0.0882423743605613710000000f, + 0.0980171412229537960000000f, 0.1077824681997299200000000f, 0.1175374016165733300000000f, 0.1272810101509094200000000f, 0.1370123475790023800000000f, 0.1467304825782775900000000f, 0.1564344763755798300000000f, 0.1661233752965927100000000f, 0.1757962852716445900000000f, 0.1854522377252578700000000f, + 0.1950903236865997300000000f, 0.2047096043825149500000000f, 0.2143091559410095200000000f, 0.2238880544900894200000000f, 0.2334453761577606200000000f, 0.2429801821708679200000000f, 0.2524915933609008800000000f, 0.2619786560535430900000000f, 0.2714404463768005400000000f, 0.2808761000633239700000000f, + 0.2902846932411193800000000f, 0.2996652722358703600000000f, 0.3090170025825500500000000f, 0.3183389306068420400000000f, 0.3276301920413970900000000f, 0.3368898630142211900000000f, 0.3461170792579650900000000f, 0.3553109169006347700000000f, 0.3644705116748809800000000f, 0.3735949695110321000000000f, + 0.3826834559440612800000000f, 0.3917350172996521000000000f, 0.4007488489151001000000000f, 0.4097240269184112500000000f, 0.4186597466468811000000000f, 0.4275551140308380100000000f, 0.4364092648029327400000000f, 0.4452213346958160400000000f, 0.4539905190467834500000000f, 0.4627159237861633300000000f, + 0.4713967442512512200000000f, 0.4800321459770202600000000f, 0.4886212646961212200000000f, 0.4971632659435272200000000f, 0.5056573748588562000000000f, 0.5141027569770813000000000f, 0.5224985480308532700000000f, 0.5308440327644348100000000f, 0.5391383171081543000000000f, 0.5473806858062744100000000f, + 0.5555702447891235400000000f, 0.5637062788009643600000000f, 0.5717879533767700200000000f, 0.5798145532608032200000000f, 0.5877852439880371100000000f, 0.5956993103027343800000000f, 0.6035559773445129400000000f, 0.6113544106483459500000000f, 0.6190939545631408700000000f, 0.6267738342285156300000000f, + 0.6343932747840881300000000f, 0.6419516205787658700000000f, 0.6494480371475219700000000f, 0.6568819284439086900000000f, 0.6642524600028991700000000f, 0.6715589761734008800000000f, 0.6788007616996765100000000f, 0.6859771013259887700000000f, 0.6930873990058898900000000f, 0.7001308202743530300000000f, + 0.7071067690849304200000000f, 0.7140145897865295400000000f, 0.7208536267280578600000000f, 0.7276231050491333000000000f, 0.7343225479125976600000000f, 0.7409511208534240700000000f, 0.7475083470344543500000000f, 0.7539935111999511700000000f, 0.7604059576988220200000000f, 0.7667451500892639200000000f, + 0.7730104923248291000000000f, 0.7792012691497802700000000f, 0.7853169441223144500000000f, 0.7913569211959838900000000f, 0.7973206639289856000000000f, 0.8032075762748718300000000f, 0.8090170025825500500000000f, 0.8147485256195068400000000f, 0.8204014301300048800000000f, 0.8259753584861755400000000f, + 0.8314696550369262700000000f, 0.8368837833404541000000000f, 0.8422172665596008300000000f, 0.8474695682525634800000000f, 0.8526401519775390600000000f, 0.8577286005020141600000000f, 0.8627343773841857900000000f, 0.8676570057868957500000000f, 0.8724960088729858400000000f, 0.8772509098052978500000000f, + 0.8819212913513183600000000f, 0.8865066170692443800000000f, 0.8910065293312072800000000f, 0.8954205513000488300000000f, 0.8997483253479003900000000f, 0.9039893150329589800000000f, 0.9081431627273559600000000f, 0.9122095108032226600000000f, 0.9161879420280456500000000f, 0.9200780987739563000000000f, + 0.9238795638084411600000000f, 0.9275919198989868200000000f, 0.9312149286270141600000000f, 0.9347481727600097700000000f, 0.9381913542747497600000000f, 0.9415440559387207000000000f, 0.9448060393333435100000000f, 0.9479769468307495100000000f, 0.9510565400123596200000000f, 0.9540444016456604000000000f, + 0.9569403529167175300000000f, 0.9597440361976623500000000f, 0.9624552726745605500000000f, 0.9650737047195434600000000f, 0.9675990939140319800000000f, 0.9700312614440918000000000f, 0.9723699092864990200000000f, 0.9746148586273193400000000f, 0.9767658710479736300000000f, 0.9788227677345275900000000f, + 0.9807853102684021000000000f, 0.9826532602310180700000000f, 0.9844265580177307100000000f, 0.9861049652099609400000000f, 0.9876883625984191900000000f, 0.9891765117645263700000000f, 0.9905693531036377000000000f, 0.9918667078018188500000000f, 0.9930684566497802700000000f, 0.9941744804382324200000000f, + 0.9951847195625305200000000f, 0.9960990548133850100000000f, 0.9969173073768615700000000f, 0.9976395368576049800000000f, 0.9982656240463256800000000f, 0.9987954497337341300000000f, 0.9992290139198303200000000f, 0.9995663166046142600000000f, 0.9998072385787963900000000f, 0.9999517798423767100000000f, + 1.0000000000000000000000000f, 0.9999517798423767100000000f, 0.9998072385787963900000000f, 0.9995663166046142600000000f, 0.9992290139198303200000000f, 0.9987954497337341300000000f, 0.9982656240463256800000000f, 0.9976395368576049800000000f, 0.9969173073768615700000000f, 0.9960990548133850100000000f, + 0.9951847195625305200000000f, 0.9941744804382324200000000f, 0.9930684566497802700000000f, 0.9918667078018188500000000f, 0.9905693531036377000000000f, 0.9891765117645263700000000f, 0.9876883625984191900000000f, 0.9861049652099609400000000f, 0.9844265580177307100000000f, 0.9826532602310180700000000f, + 0.9807852506637573200000000f, 0.9788227677345275900000000f, 0.9767658710479736300000000f, 0.9746148586273193400000000f, 0.9723699092864990200000000f, 0.9700312614440918000000000f, 0.9675990939140319800000000f, 0.9650736451148986800000000f, 0.9624552130699157700000000f, 0.9597440361976623500000000f, + 0.9569402933120727500000000f, 0.9540444016456604000000000f, 0.9510564804077148400000000f, 0.9479769468307495100000000f, 0.9448060393333435100000000f, 0.9415440559387207000000000f, 0.9381912946701049800000000f, 0.9347481727600097700000000f, 0.9312149286270141600000000f, 0.9275919198989868200000000f, + 0.9238795042037963900000000f, 0.9200780391693115200000000f, 0.9161879420280456500000000f, 0.9122095108032226600000000f, 0.9081431627273559600000000f, 0.9039892554283142100000000f, 0.8997482657432556200000000f, 0.8954205513000488300000000f, 0.8910064697265625000000000f, 0.8865066170692443800000000f, + 0.8819212317466735800000000f, 0.8772509098052978500000000f, 0.8724959492683410600000000f, 0.8676570057868957500000000f, 0.8627343773841857900000000f, 0.8577286005020141600000000f, 0.8526401519775390600000000f, 0.8474695086479187000000000f, 0.8422172069549560500000000f, 0.8368837237358093300000000f, + 0.8314695954322814900000000f, 0.8259752988815307600000000f, 0.8204014301300048800000000f, 0.8147484660148620600000000f, 0.8090169429779052700000000f, 0.8032075166702270500000000f, 0.7973206043243408200000000f, 0.7913568615913391100000000f, 0.7853168845176696800000000f, 0.7792012095451355000000000f, + 0.7730104327201843300000000f, 0.7667450904846191400000000f, 0.7604058980941772500000000f, 0.7539934515953064000000000f, 0.7475082874298095700000000f, 0.7409510612487793000000000f, 0.7343224883079528800000000f, 0.7276230454444885300000000f, 0.7208535671234130900000000f, 0.7140145301818847700000000f, + 0.7071067094802856400000000f, 0.7001307606697082500000000f, 0.6930873394012451200000000f, 0.6859770417213439900000000f, 0.6788007020950317400000000f, 0.6715589165687561000000000f, 0.6642524003982543900000000f, 0.6568818688392639200000000f, 0.6494479775428772000000000f, 0.6419515609741210900000000f, + 0.6343932151794433600000000f, 0.6267737746238708500000000f, 0.6190938949584960900000000f, 0.6113543510437011700000000f, 0.6035558581352233900000000f, 0.5956992506980896000000000f, 0.5877851843833923300000000f, 0.5798144936561584500000000f, 0.5717878937721252400000000f, 0.5637062191963195800000000f, + 0.5555701851844787600000000f, 0.5473806262016296400000000f, 0.5391382575035095200000000f, 0.5308439731597900400000000f, 0.5224984884262085000000000f, 0.5141026973724365200000000f, 0.5056573152542114300000000f, 0.4971632063388824500000000f, 0.4886211752891540500000000f, 0.4800320565700531000000000f, + 0.4713966846466064500000000f, 0.4627158641815185500000000f, 0.4539904296398162800000000f, 0.4452212452888488800000000f, 0.4364091753959655800000000f, 0.4275550246238708500000000f, 0.4186596572399139400000000f, 0.4097239673137664800000000f, 0.4007487595081329300000000f, 0.3917349278926849400000000f, + 0.3826833665370941200000000f, 0.3735949099063873300000000f, 0.3644704222679138200000000f, 0.3553108274936676000000000f, 0.3461169898509979200000000f, 0.3368897736072540300000000f, 0.3276301026344299300000000f, 0.3183388411998748800000000f, 0.3090169131755828900000000f, 0.2996652126312255900000000f, + 0.2902846038341522200000000f, 0.2808760106563568100000000f, 0.2714403867721557600000000f, 0.2619785666465759300000000f, 0.2524915039539337200000000f, 0.2429801076650619500000000f, 0.2334452867507934600000000f, 0.2238879650831222500000000f, 0.2143090665340423600000000f, 0.2047095298767089800000000f, + 0.1950902342796325700000000f, 0.1854521632194519000000000f, 0.1757961958646774300000000f, 0.1661233007907867400000000f, 0.1564343869686126700000000f, 0.1467303931713104200000000f, 0.1370122581720352200000000f, 0.1272809207439422600000000f, 0.1175373122096061700000000f, 0.1077823787927627600000000f, + 0.0980170592665672300000000f, 0.0882422849535942080000000f, 0.0784590095281600950000000f, 0.0686681717634201050000000f, 0.0588707178831100460000000f, 0.0490675866603851320000000f, 0.0392597280442714690000000f, 0.0294480863958597180000000f, 0.0196336060762405400000000f, 0.0098172323778271675000000f, + -0.0000000874227765734758580f +}; + +/* Analysis windows for overlap-add */ +/* ener = 0.f; + for (j=0; jfftlen; j++) + { + hs->olapWinAna[j] = (float)sin(EVS_PI*((float)j+0.5f)/(float)(hs->fftlen)); + ener += hs->olapWinAna[j]*hs->olapWinAna[j]; + } + ener = (float)sqrt( ener / (float)hs->fftlen ); + for (j=0; jfftlen; j++) + { + hs->olapWinAna[j] /= ener; + } */ +const float olapWinAna512[512] = +{ + 0.0043387459591031075000000f, 0.0130160758271813390000000f, 0.0216929148882627490000000f, 0.0303689353168010710000000f, 0.0390438176691532140000000f, 0.0477172248065471650000000f, 0.0563888400793075560000000f, 0.0650583282113075260000000f, 0.0737253651022911070000000f, 0.0823896303772926330000000f, + 0.0910507962107658390000000f, 0.0997085273265838620000000f, 0.1083625108003616300000000f, 0.1170124113559722900000000f, 0.1256579011678695700000000f, 0.1342986673116684000000000f, 0.1429343819618225100000000f, 0.1515647023916244500000000f, 0.1601893156766891500000000f, 0.1688079088926315300000000f, + 0.1774201542139053300000000f, 0.1860256940126419100000000f, 0.1946242451667785600000000f, 0.2032154798507690400000000f, 0.2117990404367446900000000f, 0.2203746438026428200000000f, 0.2289419323205947900000000f, 0.2375006377696991000000000f, 0.2460503578186035200000000f, 0.2545908391475677500000000f, + 0.2631217241287231400000000f, 0.2716427147388458300000000f, 0.2801534831523895300000000f, 0.2886536717414856000000000f, 0.2971430122852325400000000f, 0.3056211769580841100000000f, 0.3140878379344940200000000f, 0.3225426375865936300000000f, 0.3309853076934814500000000f, 0.3394155502319335900000000f, + 0.3478329777717590300000000f, 0.3562373220920562700000000f, 0.3646282255649566700000000f, 0.3730054795742034900000000f, 0.3813686370849609400000000f, 0.3897174298763275100000000f, 0.3980515301227569600000000f, 0.4063706994056701700000000f, 0.4146745502948761000000000f, 0.4229627549648284900000000f, + 0.4312350451946258500000000f, 0.4394911527633667000000000f, 0.4477306604385376000000000f, 0.4559533298015594500000000f, 0.4641588330268859900000000f, 0.4723468720912933300000000f, 0.4805171191692352300000000f, 0.4886692464351654100000000f, 0.4968029856681823700000000f, 0.5049180388450622600000000f, + 0.5130140781402587900000000f, 0.5210908055305481000000000f, 0.5291479229927063000000000f, 0.5371851325035095200000000f, 0.5452020764350891100000000f, 0.5531984567642211900000000f, 0.5611740946769714400000000f, 0.5691285729408264200000000f, 0.5770615935325622600000000f, 0.5849729180335998500000000f, + 0.5928622484207153300000000f, 0.6007292270660400400000000f, 0.6085735559463501000000000f, 0.6163949966430664100000000f, 0.6241932511329650900000000f, 0.6319679617881774900000000f, 0.6397189497947692900000000f, 0.6474457979202270500000000f, 0.6551482677459716800000000f, 0.6628261208534240700000000f, + 0.6704789996147155800000000f, 0.6781066060066223100000000f, 0.6857087016105651900000000f, 0.6932849884033203100000000f, 0.7008351087570190400000000f, 0.7083588838577270500000000f, 0.7158560752868652300000000f, 0.7233262658119201700000000f, 0.7307691574096679700000000f, 0.7381845116615295400000000f, + 0.7455722093582153300000000f, 0.7529317140579223600000000f, 0.7602629661560058600000000f, 0.7675655484199523900000000f, 0.7748392224311828600000000f, 0.7820837497711181600000000f, 0.7892987728118896500000000f, 0.7964841723442077600000000f, 0.8036395311355590800000000f, 0.8107646703720092800000000f, + 0.8178592920303344700000000f, 0.8249230980873107900000000f, 0.8319557905197143600000000f, 0.8389572501182556200000000f, 0.8459270596504211400000000f, 0.8528650403022766100000000f, 0.8597708344459533700000000f, 0.8666443228721618700000000f, 0.8734852671623230000000000f, 0.8802932500839233400000000f, + 0.8870680332183837900000000f, 0.8938094973564147900000000f, 0.9005173444747924800000000f, 0.9071912169456481900000000f, 0.9138309359550476100000000f, 0.9204362630844116200000000f, 0.9270069003105163600000000f, 0.9335426688194274900000000f, 0.9400433301925659200000000f, 0.9465085864067077600000000f, + 0.9529381394386291500000000f, 0.9593318104743957500000000f, 0.9656894207000732400000000f, 0.9720106720924377400000000f, 0.9782953858375549300000000f, 0.9845431447029113800000000f, 0.9907538890838623000000000f, 0.9969274401664733900000000f, 1.0030633211135864000000000f, 1.0091614723205566000000000f, + 1.0152215957641602000000000f, 1.0212435722351074000000000f, 1.0272270441055298000000000f, 1.0331718921661377000000000f, 1.0390777587890625000000000f, 1.0449445247650146000000000f, 1.0507719516754150000000000f, 1.0565599203109741000000000f, 1.0623079538345337000000000f, 1.0680160522460937000000000f, + 1.0736839771270752000000000f, 1.0793114900588989000000000f, 1.0848982334136963000000000f, 1.0904443264007568000000000f, 1.0959492921829224000000000f, 1.1014128923416138000000000f, 1.1068351268768311000000000f, 1.1122156381607056000000000f, 1.1175543069839478000000000f, 1.1228508949279785000000000f, + 1.1281052827835083000000000f, 1.1333171129226685000000000f, 1.1384862661361694000000000f, 1.1436126232147217000000000f, 1.1486958265304565000000000f, 1.1537358760833740000000000f, 1.1587324142456055000000000f, 1.1636853218078613000000000f, 1.1685944795608521000000000f, 1.1734596490859985000000000f, + 1.1782805919647217000000000f, 1.1830571889877319000000000f, 1.1877892017364502000000000f, 1.1924765110015869000000000f, 1.1971189975738525000000000f, 1.2017163038253784000000000f, 1.2062685489654541000000000f, 1.2107752561569214000000000f, 1.2152363061904907000000000f, 1.2196516990661621000000000f, + 1.2240210771560669000000000f, 1.2283445596694946000000000f, 1.2326216697692871000000000f, 1.2368522882461548000000000f, 1.2410365343093872000000000f, 1.2451739311218262000000000f, 1.2492644786834717000000000f, 1.2533079385757446000000000f, 1.2573043107986450000000000f, 1.2612532377243042000000000f, + 1.2651547193527222000000000f, 1.2690086364746094000000000f, 1.2728147506713867000000000f, 1.2765728235244751000000000f, 1.2802829742431641000000000f, 1.2839449644088745000000000f, 1.2875584363937378000000000f, 1.2911235094070435000000000f, 1.2946400642395020000000000f, 1.2981077432632446000000000f, + 1.3015266656875610000000000f, 1.3048964738845825000000000f, 1.3082171678543091000000000f, 1.3114887475967407000000000f, 1.3147107362747192000000000f, 1.3178833723068237000000000f, 1.3210064172744751000000000f, 1.3240796327590942000000000f, 1.3271030187606812000000000f, 1.3300764560699463000000000f, + 1.3329998254776001000000000f, 1.3358730077743530000000000f, 1.3386958837509155000000000f, 1.3414683341979980000000000f, 1.3441903591156006000000000f, 1.3468616008758545000000000f, 1.3494822978973389000000000f, 1.3520522117614746000000000f, 1.3545711040496826000000000f, 1.3570390939712524000000000f, + 1.3594559431076050000000000f, 1.3618216514587402000000000f, 1.3641359806060791000000000f, 1.3663990497589111000000000f, 1.3686106204986572000000000f, 1.3707706928253174000000000f, 1.3728791475296021000000000f, 1.3749359846115112000000000f, 1.3769409656524658000000000f, 1.3788940906524658000000000f, + 1.3807953596115112000000000f, 1.3826445341110229000000000f, 1.3844418525695801000000000f, 1.3861869573593140000000000f, 1.3878798484802246000000000f, 1.3895204067230225000000000f, 1.3911087512969971000000000f, 1.3926446437835693000000000f, 1.3941282033920288000000000f, 1.3955593109130859000000000f, + 1.3969377279281616000000000f, 1.3982635736465454000000000f, 1.3995368480682373000000000f, 1.4007574319839478000000000f, 1.4019253253936768000000000f, 1.4030404090881348000000000f, 1.4041025638580322000000000f, 1.4051119089126587000000000f, 1.4060683250427246000000000f, 1.4069718122482300000000000f, + 1.4078224897384644000000000f, 1.4086199998855591000000000f, 1.4093644618988037000000000f, 1.4100558757781982000000000f, 1.4106942415237427000000000f, 1.4112794399261475000000000f, 1.4118115901947021000000000f, 1.4122905731201172000000000f, 1.4127163887023926000000000f, 1.4130889177322388000000000f, + 1.4134082794189453000000000f, 1.4136744737625122000000000f, 1.4138875007629395000000000f, 1.4140472412109375000000000f, 1.4141536951065063000000000f, 1.4142069816589355000000000f, 1.4142069816589355000000000f, 1.4141536951065063000000000f, 1.4140472412109375000000000f, 1.4138875007629395000000000f, + 1.4136744737625122000000000f, 1.4134082794189453000000000f, 1.4130889177322388000000000f, 1.4127163887023926000000000f, 1.4122905731201172000000000f, 1.4118115901947021000000000f, 1.4112794399261475000000000f, 1.4106942415237427000000000f, 1.4100558757781982000000000f, 1.4093644618988037000000000f, + 1.4086199998855591000000000f, 1.4078224897384644000000000f, 1.4069718122482300000000000f, 1.4060683250427246000000000f, 1.4051119089126587000000000f, 1.4041025638580322000000000f, 1.4030402898788452000000000f, 1.4019252061843872000000000f, 1.4007574319839478000000000f, 1.3995368480682373000000000f, + 1.3982635736465454000000000f, 1.3969377279281616000000000f, 1.3955591917037964000000000f, 1.3941282033920288000000000f, 1.3926446437835693000000000f, 1.3911087512969971000000000f, 1.3895204067230225000000000f, 1.3878798484802246000000000f, 1.3861868381500244000000000f, 1.3844418525695801000000000f, + 1.3826445341110229000000000f, 1.3807953596115112000000000f, 1.3788940906524658000000000f, 1.3769409656524658000000000f, 1.3749359846115112000000000f, 1.3728791475296021000000000f, 1.3707706928253174000000000f, 1.3686106204986572000000000f, 1.3663990497589111000000000f, 1.3641359806060791000000000f, + 1.3618216514587402000000000f, 1.3594559431076050000000000f, 1.3570389747619629000000000f, 1.3545711040496826000000000f, 1.3520520925521851000000000f, 1.3494822978973389000000000f, 1.3468616008758545000000000f, 1.3441903591156006000000000f, 1.3414683341979980000000000f, 1.3386958837509155000000000f, + 1.3358730077743530000000000f, 1.3329998254776001000000000f, 1.3300764560699463000000000f, 1.3271030187606812000000000f, 1.3240796327590942000000000f, 1.3210062980651855000000000f, 1.3178833723068237000000000f, 1.3147107362747192000000000f, 1.3114886283874512000000000f, 1.3082171678543091000000000f, + 1.3048964738845825000000000f, 1.3015265464782715000000000f, 1.2981077432632446000000000f, 1.2946399450302124000000000f, 1.2911235094070435000000000f, 1.2875584363937378000000000f, 1.2839448451995850000000000f, 1.2802829742431641000000000f, 1.2765728235244751000000000f, 1.2728147506713867000000000f, + 1.2690086364746094000000000f, 1.2651547193527222000000000f, 1.2612532377243042000000000f, 1.2573041915893555000000000f, 1.2533078193664551000000000f, 1.2492643594741821000000000f, 1.2451738119125366000000000f, 1.2410364151000977000000000f, 1.2368522882461548000000000f, 1.2326216697692871000000000f, + 1.2283444404602051000000000f, 1.2240210771560669000000000f, 1.2196515798568726000000000f, 1.2152363061904907000000000f, 1.2107751369476318000000000f, 1.2062684297561646000000000f, 1.2017163038253784000000000f, 1.1971189975738525000000000f, 1.1924765110015869000000000f, 1.1877892017364502000000000f, + 1.1830570697784424000000000f, 1.1782804727554321000000000f, 1.1734595298767090000000000f, 1.1685943603515625000000000f, 1.1636853218078613000000000f, 1.1587324142456055000000000f, 1.1537357568740845000000000f, 1.1486958265304565000000000f, 1.1436125040054321000000000f, 1.1384861469268799000000000f, + 1.1333171129226685000000000f, 1.1281051635742187000000000f, 1.1228507757186890000000000f, 1.1175541877746582000000000f, 1.1122155189514160000000000f, 1.1068350076675415000000000f, 1.1014127731323242000000000f, 1.0959491729736328000000000f, 1.0904442071914673000000000f, 1.0848982334136963000000000f, + 1.0793113708496094000000000f, 1.0736838579177856000000000f, 1.0680160522460937000000000f, 1.0623078346252441000000000f, 1.0565598011016846000000000f, 1.0507718324661255000000000f, 1.0449445247650146000000000f, 1.0390776395797729000000000f, 1.0331717729568481000000000f, 1.0272269248962402000000000f, + 1.0212434530258179000000000f, 1.0152214765548706000000000f, 1.0091613531112671000000000f, 1.0030632019042969000000000f, 0.9969273209571838400000000f, 0.9907538294792175300000000f, 0.9845430850982666000000000f, 0.9782953262329101600000000f, 0.9720106124877929700000000f, 0.9656893610954284700000000f, + 0.9593317508697509800000000f, 0.9529380798339843800000000f, 0.9465084671974182100000000f, 0.9400432705879211400000000f, 0.9335426092147827100000000f, 0.9270067811012268100000000f, 0.9204362034797668500000000f, 0.9138308763504028300000000f, 0.9071910977363586400000000f, 0.9005171656608581500000000f, + 0.8938094377517700200000000f, 0.8870679140090942400000000f, 0.8802930712699890100000000f, 0.8734850883483886700000000f, 0.8666442632675170900000000f, 0.8597707748413085900000000f, 0.8528649210929870600000000f, 0.8459268808364868200000000f, 0.8389570713043212900000000f, 0.8319557309150695800000000f, + 0.8249229192733764600000000f, 0.8178591728210449200000000f, 0.8107645511627197300000000f, 0.8036394119262695300000000f, 0.7964840531349182100000000f, 0.7892987132072448700000000f, 0.7820836901664733900000000f, 0.7748391628265380900000000f, 0.7675654292106628400000000f, 0.7602628469467163100000000f, + 0.7529316544532775900000000f, 0.7455720901489257800000000f, 0.7381844520568847700000000f, 0.7307690382003784200000000f, 0.7233260869979858400000000f, 0.7158559560775756800000000f, 0.7083588242530822800000000f, 0.7008350491523742700000000f, 0.6932848691940307600000000f, 0.6857085824012756300000000f, + 0.6781064867973327600000000f, 0.6704788804054260300000000f, 0.6628260016441345200000000f, 0.6551482081413269000000000f, 0.6474456787109375000000000f, 0.6397188305854797400000000f, 0.6319679021835327100000000f, 0.6241931319236755400000000f, 0.6163948774337768600000000f, 0.6085734367370605500000000f, + 0.6007291078567504900000000f, 0.5928621292114257800000000f, 0.5849727988243103000000000f, 0.5770615339279174800000000f, 0.5691284537315368700000000f, 0.5611739754676818800000000f, 0.5531983971595764200000000f, 0.5452019572257995600000000f, 0.5371850132942199700000000f, 0.5291478037834167500000000f, + 0.5210906863212585400000000f, 0.5130139589309692400000000f, 0.5049179196357727100000000f, 0.4968028664588928200000000f, 0.4886691272258758500000000f, 0.4805169999599456800000000f, 0.4723467230796814000000000f, 0.4641586840152740500000000f, 0.4559532105922699000000000f, 0.4477305412292480500000000f, + 0.4394910335540771500000000f, 0.4312349855899810800000000f, 0.4229626357555389400000000f, 0.4146744310855865500000000f, 0.4063705503940582300000000f, 0.3980514407157897900000000f, 0.3897172808647155800000000f, 0.3813685178756713900000000f, 0.3730053603649139400000000f, 0.3646281659603118900000000f, + 0.3562372326850891100000000f, 0.3478328585624694800000000f, 0.3394154310226440400000000f, 0.3309852182865142800000000f, 0.3225425183773040800000000f, 0.3140876889228820800000000f, 0.3056210577487945600000000f, 0.2971428930759429900000000f, 0.2886535525321960400000000f, 0.2801533639430999800000000f, + 0.2716425955295562700000000f, 0.2631216049194335900000000f, 0.2545907199382782000000000f, 0.2460502535104751600000000f, 0.2375005036592483500000000f, 0.2289418131113052400000000f, 0.2203745096921920800000000f, 0.2117989212274551400000000f, 0.2032153606414794900000000f, 0.1946241259574890100000000f, + 0.1860255748033523600000000f, 0.1774200350046157800000000f, 0.1688077896833419800000000f, 0.1601892113685607900000000f, 0.1515645831823349000000000f, 0.1429342478513717700000000f, 0.1342985481023788500000000f, 0.1256577819585800200000000f, 0.1170122846961021400000000f, 0.1083623841404914900000000f, + 0.0997084006667137150000000f, 0.0910506695508956910000000f, 0.0823895111680030820000000f, 0.0737252458930015560000000f, 0.0650582015514373780000000f, 0.0563887134194374080000000f, 0.0477171018719673160000000f, 0.0390436910092830660000000f, 0.0303688123822212220000000f, 0.0216927900910377500000000f, + 0.0130159519612789150000000f, 0.0043386225588619709000000f +}; + +const float olapWinAna640[640] = +{ + 0.0034709984902292490000000f, 0.0104129118844866750000000f, 0.0173545740544795990000000f, 0.0242958199232816700000000f, 0.0312364790588617320000000f, 0.0381763875484466550000000f, 0.0451153740286827090000000f, 0.0520532727241516110000000f, 0.0589899159967899320000000f, 0.0659251436591148380000000f, + 0.0728587806224823000000000f, 0.0797906517982482910000000f, 0.0867206156253814700000000f, 0.0936484783887863160000000f, 0.1005740910768508900000000f, 0.1074972823262214700000000f, 0.1144178733229637100000000f, 0.1213357225060463000000000f, 0.1282506436109542800000000f, 0.1351624578237533600000000f, + 0.1420710384845733600000000f, 0.1489761769771575900000000f, 0.1558777391910553000000000f, 0.1627755314111709600000000f, 0.1696694195270538300000000f, 0.1765592098236084000000000f, 0.1834447383880615200000000f, 0.1903258562088012700000000f, 0.1972023993730545000000000f, 0.2040741592645645100000000f, + 0.2109410166740417500000000f, 0.2178028076887130700000000f, 0.2246593385934829700000000f, 0.2315104454755783100000000f, 0.2383559793233871500000000f, 0.2451957911252975500000000f, 0.2520296573638916000000000f, 0.2588574886322021500000000f, 0.2656790614128112800000000f, 0.2724942266941070600000000f, + 0.2793028354644775400000000f, 0.2861047089099884000000000f, 0.2928997278213501000000000f, 0.2996876239776611300000000f, 0.3064683377742767300000000f, 0.3132416605949401900000000f, 0.3200074136257171600000000f, 0.3267655074596405000000000f, 0.3335156738758087200000000f, 0.3402578532695770300000000f, + 0.3469918072223663300000000f, 0.3537174165248870800000000f, 0.3604344725608825700000000f, 0.3671428561210632300000000f, 0.3738423883914947500000000f, 0.3805329203605651900000000f, 0.3872142732143402100000000f, 0.3938862979412078900000000f, 0.4005488157272338900000000f, 0.4072017371654510500000000f, + 0.4138447940349578900000000f, 0.4204779267311096200000000f, 0.4271008670330047600000000f, 0.4337135851383209200000000f, 0.4403158128261566200000000f, 0.4469074010848999000000000f, 0.4534882903099060100000000f, 0.4600581824779510500000000f, 0.4666170477867126500000000f, 0.4731646478176116900000000f, + 0.4797008633613586400000000f, 0.4862254858016967800000000f, 0.4927383959293365500000000f, 0.4992394745349884000000000f, 0.5057284832000732400000000f, 0.5122053027153015100000000f, 0.5186697840690612800000000f, 0.5251218080520629900000000f, 0.5315611362457275400000000f, 0.5379876494407653800000000f, + 0.5444012284278869600000000f, 0.5508016943931579600000000f, 0.5571888685226440400000000f, 0.5635626316070556600000000f, 0.5699228048324585000000000f, 0.5762692093849182100000000f, 0.5826017856597900400000000f, 0.5889202952384948700000000f, 0.5952246189117431600000000f, 0.6015146374702453600000000f, + 0.6077901124954223600000000f, 0.6140509843826293900000000f, 0.6202970147132873500000000f, 0.6265281438827514600000000f, 0.6327440738677978500000000f, 0.6389448642730712900000000f, 0.6451302766799926800000000f, 0.6513000726699829100000000f, 0.6574541926383972200000000f, 0.6635924577713012700000000f, + 0.6697147488594055200000000f, 0.6758209466934204100000000f, 0.6819108128547668500000000f, 0.6879842281341552700000000f, 0.6940411329269409200000000f, 0.7000812292098999000000000f, 0.7061045169830322300000000f, 0.7121107578277587900000000f, 0.7180998921394348100000000f, 0.7240716814994812000000000f, + 0.7300260066986084000000000f, 0.7359628081321716300000000f, 0.7418818473815918000000000f, 0.7477830052375793500000000f, 0.7536661028861999500000000f, 0.7595310807228088400000000f, 0.7653777003288269000000000f, 0.7712059617042541500000000f, 0.7770156264305114700000000f, 0.7828065156936645500000000f, + 0.7885786294937133800000000f, 0.7943316698074340800000000f, 0.8000655770301818800000000f, 0.8057801723480224600000000f, 0.8114753961563110400000000f, 0.8171511292457580600000000f, 0.8228070735931396500000000f, 0.8284432291984558100000000f, 0.8340594172477722200000000f, 0.8396555185317993200000000f, + 0.8452314138412475600000000f, 0.8507869243621826200000000f, 0.8563219308853149400000000f, 0.8618362545967102100000000f, 0.8673298358917236300000000f, 0.8728026151657104500000000f, 0.8782541751861572300000000f, 0.8836847543716430700000000f, 0.8890939354896545400000000f, 0.8944817185401916500000000f, + 0.8998479843139648400000000f, 0.9051925539970397900000000f, 0.9105152487754821800000000f, 0.9158160686492919900000000f, 0.9210947751998901400000000f, 0.9263513088226318400000000f, 0.9315855503082275400000000f, 0.9367973208427429200000000f, 0.9419865608215332000000000f, 0.9471529722213745100000000f, + 0.9522966742515564000000000f, 0.9574174284934997600000000f, 0.9625151157379150400000000f, 0.9675895571708679200000000f, 0.9726406931877136200000000f, 0.9776684641838073700000000f, 0.9826726913452148400000000f, 0.9876530766487121600000000f, 0.9926097989082336400000000f, 0.9975425601005554200000000f, + 1.0024513006210327000000000f, 1.0073359012603760000000000f, 1.0121961832046509000000000f, 1.0170321464538574000000000f, 1.0218435525894165000000000f, 1.0266302824020386000000000f, 1.0313923358917236000000000f, 1.0361295938491821000000000f, 1.0408418178558350000000000f, 1.0455290079116821000000000f, + 1.0501909255981445000000000f, 1.0548275709152222000000000f, 1.0594388246536255000000000f, 1.0640245676040649000000000f, 1.0685845613479614000000000f, 1.0731189250946045000000000f, 1.0776274204254150000000000f, 1.0821099281311035000000000f, 1.0865663290023804000000000f, 1.0909965038299561000000000f, + 1.0954004526138306000000000f, 1.0997780561447144000000000f, 1.1041290760040283000000000f, 1.1084536314010620000000000f, 1.1127513647079468000000000f, 1.1170222759246826000000000f, 1.1212662458419800000000000f, 1.1254832744598389000000000f, 1.1296732425689697000000000f, 1.1338359117507935000000000f, + 1.1379711627960205000000000f, 1.1420791149139404000000000f, 1.1461595296859741000000000f, 1.1502122879028320000000000f, 1.1542373895645142000000000f, 1.1582345962524414000000000f, 1.1622040271759033000000000f, 1.1661453247070312000000000f, 1.1700586080551147000000000f, 1.1739436388015747000000000f, + 1.1778002977371216000000000f, 1.1816288232803345000000000f, 1.1854286193847656000000000f, 1.1892000436782837000000000f, 1.1929427385330200000000000f, 1.1966567039489746000000000f, 1.2003418207168579000000000f, 1.2039979696273804000000000f, 1.2076252698898315000000000f, 1.2112232446670532000000000f, + 1.2147921323776245000000000f, 1.2183318138122559000000000f, 1.2218420505523682000000000f, 1.2253229618072510000000000f, 1.2287741899490356000000000f, 1.2321958541870117000000000f, 1.2355878353118896000000000f, 1.2389501333236694000000000f, 1.2422825098037720000000000f, 1.2455849647521973000000000f, + 1.2488573789596558000000000f, 1.2520997524261475000000000f, 1.2553119659423828000000000f, 1.2584939002990723000000000f, 1.2616454362869263000000000f, 1.2647666931152344000000000f, 1.2678573131561279000000000f, 1.2709175348281860000000000f, 1.2739471197128296000000000f, 1.2769459486007690000000000f, + 1.2799140214920044000000000f, 1.2828512191772461000000000f, 1.2857576608657837000000000f, 1.2886329889297485000000000f, 1.2914773225784302000000000f, 1.2942904233932495000000000f, 1.2970724105834961000000000f, 1.2998231649398804000000000f, 1.3025425672531128000000000f, 1.3052306175231934000000000f, + 1.3078873157501221000000000f, 1.3105123043060303000000000f, 1.3131058216094971000000000f, 1.3156676292419434000000000f, 1.3181978464126587000000000f, 1.3206962347030640000000000f, 1.3231627941131592000000000f, 1.3255974054336548000000000f, 1.3280001878738403000000000f, 1.3303710222244263000000000f, + 1.3327096700668335000000000f, 1.3350162506103516000000000f, 1.3372906446456909000000000f, 1.3395328521728516000000000f, 1.3417427539825439000000000f, 1.3439202308654785000000000f, 1.3460655212402344000000000f, 1.3481782674789429000000000f, 1.3502584695816040000000000f, 1.3523062467575073000000000f, + 1.3543214797973633000000000f, 1.3563039302825928000000000f, 1.3582537174224854000000000f, 1.3601709604263306000000000f, 1.3620551824569702000000000f, 1.3639067411422729000000000f, 1.3657253980636597000000000f, 1.3675111532211304000000000f, 1.3692638874053955000000000f, 1.3709838390350342000000000f, + 1.3726705312728882000000000f, 1.3743242025375366000000000f, 1.3759448528289795000000000f, 1.3775322437286377000000000f, 1.3790863752365112000000000f, 1.3806074857711792000000000f, 1.3820952177047729000000000f, 1.3835495710372925000000000f, 1.3849706649780273000000000f, 1.3863584995269775000000000f, + 1.3877127170562744000000000f, 1.3890335559844971000000000f, 1.3903210163116455000000000f, 1.3915749788284302000000000f, 1.3927953243255615000000000f, 1.3939821720123291000000000f, 1.3951354026794434000000000f, 1.3962548971176147000000000f, 1.3973408937454224000000000f, 1.3983932733535767000000000f, + 1.3994117975234985000000000f, 1.4003967046737671000000000f, 1.4013478755950928000000000f, 1.4022653102874756000000000f, 1.4031487703323364000000000f, 1.4039986133575439000000000f, 1.4048146009445190000000000f, 1.4055966138839722000000000f, 1.4063447713851929000000000f, 1.4070591926574707000000000f, + 1.4077396392822266000000000f, 1.4083861112594604000000000f, 1.4089987277984619000000000f, 1.4095773696899414000000000f, 1.4101220369338989000000000f, 1.4106327295303345000000000f, 1.4111093282699585000000000f, 1.4115520715713501000000000f, 1.4119608402252197000000000f, 1.4123353958129883000000000f, + 1.4126759767532349000000000f, 1.4129825830459595000000000f, 1.4132552146911621000000000f, 1.4134936332702637000000000f, 1.4136980772018433000000000f, 1.4138684272766113000000000f, 1.4140048027038574000000000f, 1.4141069650650024000000000f, 1.4141751527786255000000000f, 1.4142091274261475000000000f, + 1.4142091274261475000000000f, 1.4141751527786255000000000f, 1.4141069650650024000000000f, 1.4140048027038574000000000f, 1.4138684272766113000000000f, 1.4136980772018433000000000f, 1.4134936332702637000000000f, 1.4132550954818726000000000f, 1.4129825830459595000000000f, 1.4126759767532349000000000f, + 1.4123353958129883000000000f, 1.4119607210159302000000000f, 1.4115520715713501000000000f, 1.4111093282699585000000000f, 1.4106327295303345000000000f, 1.4101220369338989000000000f, 1.4095773696899414000000000f, 1.4089987277984619000000000f, 1.4083861112594604000000000f, 1.4077396392822266000000000f, + 1.4070591926574707000000000f, 1.4063447713851929000000000f, 1.4055966138839722000000000f, 1.4048146009445190000000000f, 1.4039986133575439000000000f, 1.4031487703323364000000000f, 1.4022653102874756000000000f, 1.4013477563858032000000000f, 1.4003967046737671000000000f, 1.3994117975234985000000000f, + 1.3983932733535767000000000f, 1.3973408937454224000000000f, 1.3962548971176147000000000f, 1.3951354026794434000000000f, 1.3939821720123291000000000f, 1.3927953243255615000000000f, 1.3915748596191406000000000f, 1.3903210163116455000000000f, 1.3890335559844971000000000f, 1.3877127170562744000000000f, + 1.3863583803176880000000000f, 1.3849706649780273000000000f, 1.3835495710372925000000000f, 1.3820950984954834000000000f, 1.3806074857711792000000000f, 1.3790863752365112000000000f, 1.3775322437286377000000000f, 1.3759448528289795000000000f, 1.3743242025375366000000000f, 1.3726705312728882000000000f, + 1.3709837198257446000000000f, 1.3692638874053955000000000f, 1.3675111532211304000000000f, 1.3657253980636597000000000f, 1.3639067411422729000000000f, 1.3620551824569702000000000f, 1.3601708412170410000000000f, 1.3582537174224854000000000f, 1.3563039302825928000000000f, 1.3543213605880737000000000f, + 1.3523062467575073000000000f, 1.3502584695816040000000000f, 1.3481782674789429000000000f, 1.3460655212402344000000000f, 1.3439202308654785000000000f, 1.3417427539825439000000000f, 1.3395328521728516000000000f, 1.3372905254364014000000000f, 1.3350161314010620000000000f, 1.3327096700668335000000000f, + 1.3303709030151367000000000f, 1.3280001878738403000000000f, 1.3255974054336548000000000f, 1.3231626749038696000000000f, 1.3206962347030640000000000f, 1.3181978464126587000000000f, 1.3156676292419434000000000f, 1.3131058216094971000000000f, 1.3105123043060303000000000f, 1.3078871965408325000000000f, + 1.3052306175231934000000000f, 1.3025425672531128000000000f, 1.2998231649398804000000000f, 1.2970724105834961000000000f, 1.2942904233932495000000000f, 1.2914772033691406000000000f, 1.2886328697204590000000000f, 1.2857575416564941000000000f, 1.2828512191772461000000000f, 1.2799140214920044000000000f, + 1.2769459486007690000000000f, 1.2739471197128296000000000f, 1.2709175348281860000000000f, 1.2678573131561279000000000f, 1.2647665739059448000000000f, 1.2616454362869263000000000f, 1.2584937810897827000000000f, 1.2553118467330933000000000f, 1.2520996332168579000000000f, 1.2488572597503662000000000f, + 1.2455849647521973000000000f, 1.2422825098037720000000000f, 1.2389501333236694000000000f, 1.2355878353118896000000000f, 1.2321958541870117000000000f, 1.2287741899490356000000000f, 1.2253228425979614000000000f, 1.2218420505523682000000000f, 1.2183316946029663000000000f, 1.2147921323776245000000000f, + 1.2112232446670532000000000f, 1.2076251506805420000000000f, 1.2039978504180908000000000f, 1.2003417015075684000000000f, 1.1966565847396851000000000f, 1.1929427385330200000000000f, 1.1891999244689941000000000f, 1.1854286193847656000000000f, 1.1816287040710449000000000f, 1.1778002977371216000000000f, + 1.1739435195922852000000000f, 1.1700584888458252000000000f, 1.1661452054977417000000000f, 1.1622039079666138000000000f, 1.1582344770431519000000000f, 1.1542372703552246000000000f, 1.1502121686935425000000000f, 1.1461594104766846000000000f, 1.1420789957046509000000000f, 1.1379710435867310000000000f, + 1.1338357925415039000000000f, 1.1296731233596802000000000f, 1.1254831552505493000000000f, 1.1212662458419800000000000f, 1.1170221567153931000000000f, 1.1127512454986572000000000f, 1.1084535121917725000000000f, 1.1041289567947388000000000f, 1.0997780561447144000000000f, 1.0954004526138306000000000f, + 1.0909965038299561000000000f, 1.0865662097930908000000000f, 1.0821098089218140000000000f, 1.0776273012161255000000000f, 1.0731188058853149000000000f, 1.0685844421386719000000000f, 1.0640244483947754000000000f, 1.0594387054443359000000000f, 1.0548274517059326000000000f, 1.0501908063888550000000000f, + 1.0455288887023926000000000f, 1.0408416986465454000000000f, 1.0361294746398926000000000f, 1.0313922166824341000000000f, 1.0266302824020386000000000f, 1.0218434333801270000000000f, 1.0170320272445679000000000f, 1.0121960639953613000000000f, 1.0073357820510864000000000f, 1.0024513006210327000000000f, + 0.9975425004959106400000000f, 0.9926097393035888700000000f, 0.9876530170440673800000000f, 0.9826725125312805200000000f, 0.9776684045791626000000000f, 0.9726406335830688500000000f, 0.9675894975662231400000000f, 0.9625149965286254900000000f, 0.9574173688888549800000000f, 0.9522966146469116200000000f, + 0.9471529126167297400000000f, 0.9419864416122436500000000f, 0.9367972612380981400000000f, 0.9315854907035827600000000f, 0.9263512492179870600000000f, 0.9210947155952453600000000f, 0.9158159494400024400000000f, 0.9105151891708374000000000f, 0.9051924347877502400000000f, 0.8998478651046752900000000f, + 0.8944816589355468800000000f, 0.8890938758850097700000000f, 0.8836846351623535200000000f, 0.8782541155815124500000000f, 0.8728024363517761200000000f, 0.8673297166824340800000000f, 0.8618361353874206500000000f, 0.8563218116760253900000000f, 0.8507867455482482900000000f, 0.8452312946319580100000000f, + 0.8396554589271545400000000f, 0.8340593576431274400000000f, 0.8284431099891662600000000f, 0.8228070139884948700000000f, 0.8171509504318237300000000f, 0.8114752769470214800000000f, 0.8057801127433776900000000f, 0.8000654578208923300000000f, 0.7943315505981445300000000f, 0.7885785102844238300000000f, + 0.7828064560890197800000000f, 0.7770155668258667000000000f, 0.7712058424949646000000000f, 0.7653776407241821300000000f, 0.7595309019088745100000000f, 0.7536660432815551800000000f, 0.7477828264236450200000000f, 0.7418816685676574700000000f, 0.7359626293182373000000000f, 0.7300259470939636200000000f, + 0.7240716218948364300000000f, 0.7180998325347900400000000f, 0.7121106386184692400000000f, 0.7061043977737426800000000f, 0.7000811696052551300000000f, 0.6940410137176513700000000f, 0.6879841089248657200000000f, 0.6819106936454772900000000f, 0.6758208274841308600000000f, 0.6697146296501159700000000f, + 0.6635923385620117200000000f, 0.6574540734291076700000000f, 0.6512999534606933600000000f, 0.6451301574707031300000000f, 0.6389448046684265100000000f, 0.6327440142631530800000000f, 0.6265279650688171400000000f, 0.6202968955039978000000000f, 0.6140508651733398400000000f, 0.6077899932861328100000000f, + 0.6015145182609558100000000f, 0.5952244997024536100000000f, 0.5889201760292053200000000f, 0.5826016664505004900000000f, 0.5762690901756286600000000f, 0.5699226856231689500000000f, 0.5635625123977661100000000f, 0.5571887493133544900000000f, 0.5508015751838684100000000f, 0.5444011092185974100000000f, + 0.5379875302314758300000000f, 0.5315610170364379900000000f, 0.5251216888427734400000000f, 0.5186696648597717300000000f, 0.5122051835060119600000000f, 0.5057283639907836900000000f, 0.4992393255233764600000000f, 0.4927382767200470000000000f, 0.4862253665924072300000000f, 0.4797007441520690900000000f, + 0.4731644988059997600000000f, 0.4666169285774231000000000f, 0.4600581228733062700000000f, 0.4534881711006164600000000f, 0.4469073116779327400000000f, 0.4403156936168670700000000f, 0.4337134659290313700000000f, 0.4271008074283599900000000f, 0.4204778075218200700000000f, 0.4138446748256683300000000f, + 0.4072016179561615000000000f, 0.4005487561225891100000000f, 0.3938861787319183300000000f, 0.3872141540050506600000000f, 0.3805327713489532500000000f, 0.3738422691822052000000000f, 0.3671427369117736800000000f, 0.3604343533515930200000000f, 0.3537172675132751500000000f, 0.3469916582107543900000000f, + 0.3402577340602874800000000f, 0.3335155844688415500000000f, 0.3267653882503509500000000f, 0.3200073242187500000000000f, 0.3132415413856506300000000f, 0.3064682185649871800000000f, 0.2996875047683715800000000f, 0.2928995788097381600000000f, 0.2861045897006988500000000f, 0.2793027162551879900000000f, + 0.2724941074848175000000000f, 0.2656789422035217300000000f, 0.2588573694229126000000000f, 0.2520295381546020500000000f, 0.2451956570148468000000000f, 0.2383558601140976000000000f, 0.2315103262662887600000000f, 0.2246592044830322300000000f, 0.2178026735782623300000000f, 0.2109408974647522000000000f, + 0.2040740400552749600000000f, 0.1972022652626037600000000f, 0.1903257369995117200000000f, 0.1834446042776107800000000f, 0.1765590757131576500000000f, 0.1696692854166030900000000f, 0.1627754122018814100000000f, 0.1558776050806045500000000f, 0.1489760577678680400000000f, 0.1420709043741226200000000f, + 0.1351623386144638100000000f, 0.1282505095005035400000000f, 0.1213355958461761500000000f, 0.1144177615642547600000000f, 0.1074971556663513200000000f, 0.1005739644169807400000000f, 0.0936483591794967650000000f, 0.0867204889655113220000000f, 0.0797905325889587400000000f, 0.0728586539626121520000000f, + 0.0659250169992446900000000f, 0.0589897930622100830000000f, 0.0520531460642814640000000f, 0.0451152473688125610000000f, 0.0381762608885765080000000f, 0.0312363542616367340000000f, 0.0242956969887018200000000f, 0.0173544511198997500000000f, 0.0104127889499068260000000f, 0.0034708750899881124000000f +}; + +/* Synthesis windows for overlap-add */ +/* for (j=0; jfftlen; j++) hs->olapWinSyn[j] = (float)sin(EVS_PI*((float)j+0.5f)/(float)(hs->fftlen); */ +const float olapWinSyn256[256] = +{ + 0.0061358846f, + 0.0184067299f, + 0.0306748032f, + 0.0429382569f, + 0.0551952443f, + 0.0674439196f, + 0.0796824380f, + 0.0919089565f, + 0.1041216339f, + 0.1163186309f, + 0.1284981108f, + 0.1406582393f, + 0.1527971853f, + 0.1649131205f, + 0.1770042204f, + 0.1890686641f, + 0.2011046348f, + 0.2131103199f, + 0.2250839114f, + 0.2370236060f, + 0.2489276057f, + 0.2607941179f, + 0.2726213554f, + 0.2844075372f, + 0.2961508882f, + 0.3078496400f, + 0.3195020308f, + 0.3311063058f, + 0.3426607173f, + 0.3541635254f, + 0.3656129978f, + 0.3770074102f, + 0.3883450467f, + 0.3996241998f, + 0.4108431711f, + 0.4220002708f, + 0.4330938189f, + 0.4441221446f, + 0.4550835871f, + 0.4659764958f, + 0.4767992301f, + 0.4875501601f, + 0.4982276670f, + 0.5088301425f, + 0.5193559902f, + 0.5298036247f, + 0.5401714727f, + 0.5504579729f, + 0.5606615762f, + 0.5707807459f, + 0.5808139581f, + 0.5907597019f, + 0.6006164794f, + 0.6103828063f, + 0.6200572118f, + 0.6296382389f, + 0.6391244449f, + 0.6485144010f, + 0.6578066933f, + 0.6669999223f, + 0.6760927036f, + 0.6850836678f, + 0.6939714609f, + 0.7027547445f, + 0.7114321957f, + 0.7200025080f, + 0.7284643904f, + 0.7368165689f, + 0.7450577854f, + 0.7531867990f, + 0.7612023855f, + 0.7691033376f, + 0.7768884657f, + 0.7845565972f, + 0.7921065773f, + 0.7995372691f, + 0.8068475535f, + 0.8140363297f, + 0.8211025150f, + 0.8280450453f, + 0.8348628750f, + 0.8415549774f, + 0.8481203448f, + 0.8545579884f, + 0.8608669386f, + 0.8670462455f, + 0.8730949784f, + 0.8790122264f, + 0.8847970984f, + 0.8904487232f, + 0.8959662498f, + 0.9013488470f, + 0.9065957045f, + 0.9117060320f, + 0.9166790599f, + 0.9215140393f, + 0.9262102421f, + 0.9307669611f, + 0.9351835099f, + 0.9394592236f, + 0.9435934582f, + 0.9475855910f, + 0.9514350210f, + 0.9551411683f, + 0.9587034749f, + 0.9621214043f, + 0.9653944417f, + 0.9685220943f, + 0.9715038910f, + 0.9743393828f, + 0.9770281427f, + 0.9795697657f, + 0.9819638691f, + 0.9842100924f, + 0.9863080972f, + 0.9882575677f, + 0.9900582103f, + 0.9917097537f, + 0.9932119492f, + 0.9945645707f, + 0.9957674145f, + 0.9968202993f, + 0.9977230666f, + 0.9984755806f, + 0.9990777278f, + 0.9995294175f, + 0.9998305818f, + 0.9999811753f, + 0.9999811753f, + 0.9998305818f, + 0.9995294175f, + 0.9990777278f, + 0.9984755806f, + 0.9977230666f, + 0.9968202993f, + 0.9957674145f, + 0.9945645707f, + 0.9932119492f, + 0.9917097537f, + 0.9900582103f, + 0.9882575677f, + 0.9863080972f, + 0.9842100924f, + 0.9819638691f, + 0.9795697657f, + 0.9770281427f, + 0.9743393828f, + 0.9715038910f, + 0.9685220943f, + 0.9653944417f, + 0.9621214043f, + 0.9587034749f, + 0.9551411683f, + 0.9514350210f, + 0.9475855910f, + 0.9435934582f, + 0.9394592236f, + 0.9351835099f, + 0.9307669611f, + 0.9262102421f, + 0.9215140393f, + 0.9166790599f, + 0.9117060320f, + 0.9065957045f, + 0.9013488470f, + 0.8959662498f, + 0.8904487232f, + 0.8847970984f, + 0.8790122264f, + 0.8730949784f, + 0.8670462455f, + 0.8608669386f, + 0.8545579884f, + 0.8481203448f, + 0.8415549774f, + 0.8348628750f, + 0.8280450453f, + 0.8211025150f, + 0.8140363297f, + 0.8068475535f, + 0.7995372691f, + 0.7921065773f, + 0.7845565972f, + 0.7768884657f, + 0.7691033376f, + 0.7612023855f, + 0.7531867990f, + 0.7450577854f, + 0.7368165689f, + 0.7284643904f, + 0.7200025080f, + 0.7114321957f, + 0.7027547445f, + 0.6939714609f, + 0.6850836678f, + 0.6760927036f, + 0.6669999223f, + 0.6578066933f, + 0.6485144010f, + 0.6391244449f, + 0.6296382389f, + 0.6200572118f, + 0.6103828063f, + 0.6006164794f, + 0.5907597019f, + 0.5808139581f, + 0.5707807459f, + 0.5606615762f, + 0.5504579729f, + 0.5401714727f, + 0.5298036247f, + 0.5193559902f, + 0.5088301425f, + 0.4982276670f, + 0.4875501601f, + 0.4767992301f, + 0.4659764958f, + 0.4550835871f, + 0.4441221446f, + 0.4330938189f, + 0.4220002708f, + 0.4108431711f, + 0.3996241998f, + 0.3883450467f, + 0.3770074102f, + 0.3656129978f, + 0.3541635254f, + 0.3426607173f, + 0.3311063058f, + 0.3195020308f, + 0.3078496400f, + 0.2961508882f, + 0.2844075372f, + 0.2726213554f, + 0.2607941179f, + 0.2489276057f, + 0.2370236060f, + 0.2250839114f, + 0.2131103199f, + 0.2011046348f, + 0.1890686641f, + 0.1770042204f, + 0.1649131205f, + 0.1527971853f, + 0.1406582393f, + 0.1284981108f, + 0.1163186309f, + 0.1041216339f, + 0.0919089565f, + 0.0796824380f, + 0.0674439196f, + 0.0551952443f, + 0.0429382569f, + 0.0306748032f, + 0.0184067299f, + 0.0061358846f +}; +const float olapWinSyn320[320] = +{ + 0.0049087191000580788000000f, 0.0147256832569837570000000f, 0.0245412290096282960000000f, 0.0343544110655784610000000f, 0.0441642776131629940000000f, 0.0539698898792266850000000f, 0.0637703016400337220000000f, 0.0735645666718482970000000f, 0.0833517387509346010000000f, 0.0931308791041374210000000f, + 0.1029010415077209500000000f, 0.1126612871885299700000000f, 0.1224106773734092700000000f, 0.1321482658386230500000000f, 0.1418731212615966800000000f, 0.1515842974185943600000000f, 0.1612808704376220700000000f, 0.1709618866443634000000000f, 0.1806264370679855300000000f, 0.1902735829353332500000000f, + 0.1999023705720901500000000f, 0.2095119059085845900000000f, 0.2191012501716613800000000f, 0.2286694645881652800000000f, 0.2382156550884246800000000f, 0.2477388679981231700000000f, 0.2572382092475891100000000f, 0.2667127549648284900000000f, 0.2761616110801696800000000f, 0.2855838239192962600000000f, + 0.2949785292148590100000000f, 0.3043448030948638900000000f, 0.3136817514896392800000000f, 0.3229884505271911600000000f, 0.3322640359401702900000000f, 0.3415075838565826400000000f, 0.3507182002067565900000000f, 0.3598950505256652800000000f, 0.3690371811389923100000000f, 0.3781437575817108200000000f, + 0.3872138857841491700000000f, 0.3962467014789581300000000f, 0.4052413105964660600000000f, 0.4141968786716461200000000f, 0.4231125116348266600000000f, 0.4319873750209808300000000f, 0.4408206045627594000000000f, 0.4496113359928131100000000f, 0.4583587348461151100000000f, 0.4670619666576385500000000f, + 0.4757201671600341800000000f, 0.4843325316905975300000000f, 0.4928981959819793700000000f, 0.5014163851737976100000000f, 0.5098862051963806200000000f, 0.5183069109916687000000000f, 0.5266776680946350100000000f, 0.5349976420402526900000000f, 0.5432660579681396500000000f, 0.5514820814132690400000000f, + 0.5596449971199035600000000f, 0.5677539706230163600000000f, 0.5758082270622253400000000f, 0.5838069319725036600000000f, 0.5917494297027587900000000f, 0.5996348857879638700000000f, 0.6074625253677368200000000f, 0.6152316331863403300000000f, 0.6229414343833923300000000f, 0.6305911540985107400000000f, + 0.6381801366806030300000000f, 0.6457076072692871100000000f, 0.6531728506088256800000000f, 0.6605751514434814500000000f, 0.6679137349128723100000000f, 0.6751880049705505400000000f, 0.6823971867561340300000000f, 0.6895405650138855000000000f, 0.6966174840927124000000000f, 0.7036272883415222200000000f, + 0.7105692625045776400000000f, 0.7174427509307861300000000f, 0.7242470979690551800000000f, 0.7309816479682922400000000f, 0.7376457452774047900000000f, 0.7442387342453002900000000f, 0.7507599592208862300000000f, 0.7572088837623596200000000f, 0.7635847926139831500000000f, 0.7698870897293090800000000f, + 0.7761152386665344200000000f, 0.7822685241699218800000000f, 0.7883464694023132300000000f, 0.7943483591079711900000000f, 0.8002737760543823200000000f, 0.8061220049858093300000000f, 0.8118925094604492200000000f, 0.8175848126411438000000000f, 0.8231983184814453100000000f, 0.8287324905395507800000000f, + 0.8341867327690124500000000f, 0.8395606279373168900000000f, 0.8448535799980163600000000f, 0.8500651121139526400000000f, 0.8551946878433227500000000f, 0.8602418899536132800000000f, 0.8652061223983764600000000f, 0.8700870275497436500000000f, 0.8748840093612670900000000f, 0.8795967102050781300000000f, + 0.8842245936393737800000000f, 0.8887673020362854000000000f, 0.8932242989540100100000000f, 0.8975952267646789600000000f, 0.9018796682357788100000000f, 0.9060771465301513700000000f, 0.9101873040199279800000000f, 0.9142097830772399900000000f, 0.9181441068649292000000000f, 0.9219899177551269500000000f, + 0.9257469177246093800000000f, 0.9294146299362182600000000f, 0.9329928159713745100000000f, 0.9364810585975647000000000f, 0.9398790597915649400000000f, 0.9431864023208618200000000f, 0.9464029073715210000000000f, 0.9495282173156738300000000f, 0.9525619745254516600000000f, 0.9555038809776306200000000f, + 0.9583537578582763700000000f, 0.9611112475395202600000000f, 0.9637760519981384300000000f, 0.9663480520248413100000000f, 0.9688268303871154800000000f, 0.9712122678756713900000000f, 0.9735041260719299300000000f, 0.9757021665573120100000000f, 0.9778060913085937500000000f, 0.9798158407211303700000000f, + 0.9817311167716980000000000f, 0.9835518002510070800000000f, 0.9852776527404785200000000f, 0.9869085550308227500000000f, 0.9884443283081054700000000f, 0.9898848533630371100000000f, 0.9912299513816833500000000f, 0.9924795627593994100000000f, 0.9936334490776062000000000f, 0.9946916103363037100000000f, + 0.9956538677215576200000000f, 0.9965202212333679200000000f, 0.9972904324531555200000000f, 0.9979646205902099600000000f, 0.9985425472259521500000000f, 0.9990242719650268600000000f, 0.9994097352027893100000000f, 0.9996988177299499500000000f, 0.9998915791511535600000000f, 0.9999879598617553700000000f, + 0.9999879598617553700000000f, 0.9998915791511535600000000f, 0.9996988177299499500000000f, 0.9994097352027893100000000f, 0.9990242719650268600000000f, 0.9985425472259521500000000f, 0.9979646205902099600000000f, 0.9972904324531555200000000f, 0.9965201616287231400000000f, 0.9956538677215576200000000f, + 0.9946916103363037100000000f, 0.9936334490776062000000000f, 0.9924795031547546400000000f, 0.9912299513816833500000000f, 0.9898848533630371100000000f, 0.9884443283081054700000000f, 0.9869085550308227500000000f, 0.9852776527404785200000000f, 0.9835517406463623000000000f, 0.9817311167716980000000000f, + 0.9798157811164856000000000f, 0.9778060913085937500000000f, 0.9757021069526672400000000f, 0.9735041260719299300000000f, 0.9712122678756713900000000f, 0.9688268303871154800000000f, 0.9663479924201965300000000f, 0.9637760519981384300000000f, 0.9611111879348754900000000f, 0.9583536982536315900000000f, + 0.9555038809776306200000000f, 0.9525619149208068800000000f, 0.9495281577110290500000000f, 0.9464029073715210000000000f, 0.9431864023208618200000000f, 0.9398790001869201700000000f, 0.9364809989929199200000000f, 0.9329927563667297400000000f, 0.9294146299362182600000000f, 0.9257468581199646000000000f, + 0.9219899177551269500000000f, 0.9181440472602844200000000f, 0.9142097234725952100000000f, 0.9101873040199279800000000f, 0.9060771465301513700000000f, 0.9018796086311340300000000f, 0.8975952267646789600000000f, 0.8932242989540100100000000f, 0.8887672424316406300000000f, 0.8842245936393737800000000f, + 0.8795966506004333500000000f, 0.8748839497566223100000000f, 0.8700869679450988800000000f, 0.8652060627937316900000000f, 0.8602418303489685100000000f, 0.8551946878433227500000000f, 0.8500650525093078600000000f, 0.8448535203933715800000000f, 0.8395605683326721200000000f, 0.8341866731643676800000000f, + 0.8287324309349060100000000f, 0.8231982588768005400000000f, 0.8175847530364990200000000f, 0.8118925094604492200000000f, 0.8061219453811645500000000f, 0.8002737164497375500000000f, 0.7943482995033264200000000f, 0.7883464097976684600000000f, 0.7822684645652771000000000f, 0.7761151790618896500000000f, + 0.7698870301246643100000000f, 0.7635847330093383800000000f, 0.7572088241577148400000000f, 0.7507598996162414600000000f, 0.7442386746406555200000000f, 0.7376456856727600100000000f, 0.7309815883636474600000000f, 0.7242470383644104000000000f, 0.7174426913261413600000000f, 0.7105692028999328600000000f, + 0.7036272287368774400000000f, 0.6966174244880676300000000f, 0.6895405054092407200000000f, 0.6823971271514892600000000f, 0.6751879453659057600000000f, 0.6679136753082275400000000f, 0.6605750918388366700000000f, 0.6531727910041809100000000f, 0.6457075476646423300000000f, 0.6381800770759582500000000f, + 0.6305910944938659700000000f, 0.6229413151741027800000000f, 0.6152315139770507800000000f, 0.6074624657630920400000000f, 0.5996347665786743200000000f, 0.5917493700981140100000000f, 0.5838068723678588900000000f, 0.5758081078529357900000000f, 0.5677539110183715800000000f, 0.5596449375152587900000000f, + 0.5514820218086242700000000f, 0.5432659983634948700000000f, 0.5349975824356079100000000f, 0.5266776084899902300000000f, 0.5183068513870239300000000f, 0.5098861455917358400000000f, 0.5014163255691528300000000f, 0.4928981363773345900000000f, 0.4843324422836303700000000f, 0.4757201075553894000000000f, + 0.4670618772506713900000000f, 0.4583586752414703400000000f, 0.4496112763881683300000000f, 0.4408205151557922400000000f, 0.4319873154163360600000000f, 0.4231124520301818800000000f, 0.4141968190670013400000000f, 0.4052412509918212900000000f, 0.3962466120719909700000000f, 0.3872138261795043900000000f, + 0.3781436979770660400000000f, 0.3690371215343475300000000f, 0.3598949611186981200000000f, 0.3507181406021118200000000f, 0.3415074944496154800000000f, 0.3322639465332031300000000f, 0.3229883611202240000000000f, 0.3136816620826721200000000f, 0.3043447136878967300000000f, 0.2949784696102142300000000f, + 0.2855837643146514900000000f, 0.2761615216732025100000000f, 0.2667126953601837200000000f, 0.2572381198406219500000000f, 0.2477387785911560100000000f, 0.2382155656814575200000000f, 0.2286693751811981200000000f, 0.2191011607646942100000000f, 0.2095118165016174300000000f, 0.1999022960662841800000000f, + 0.1902734935283660900000000f, 0.1806263476610183700000000f, 0.1709618121385574300000000f, 0.1612807810306549100000000f, 0.1515842080116272000000000f, 0.1418730318546295200000000f, 0.1321481764316558800000000f, 0.1224105954170227100000000f, 0.1126612052321434000000000f, 0.1029009595513343800000000f, + 0.0931307896971702580000000f, 0.0833516493439674380000000f, 0.0735644772648811340000000f, 0.0637702122330665590000000f, 0.0539698041975498200000000f, 0.0441641919314861300000000f, 0.0343543216586112980000000f, 0.0245411414653062820000000f, 0.0147255966439843180000000f, 0.0049086315557360649000000f +}; + + +/*-------------------------------------------------------------------* + * AMR-WB ISF codebook - common 1st stage for 46bit and 36bit codebooks, + * 2 splits + * + * codebook vector dimension number of vectors + * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + * 1_1 9 256 + * 1_2 7 256 + *-------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------* + * 1nd stage, 1st split: ISF0 to ISF8 + *-------------------------------------------------------------------*/ + +const float dico1_isf[] = +{ + 226.1477f, 422.2338f, 404.4563f, 152.3442f, 1.2553f, -102.5648f, -77.5073f, -32.1403f, 14.9134f, + 6.9890f, -26.5711f, -4.8001f, 122.2654f, 297.4533f, 158.0168f, 97.1963f, 43.4786f, -29.4927f, + 289.1461f, 493.4574f, 504.5048f, 393.1421f, 389.3840f, 397.8990f, 397.4072f, 381.0959f, 360.5083f, + -35.6482f, 323.0566f, 370.2882f, 252.9499f, 239.6172f, 209.0563f, 203.9713f, 191.4865f, 164.6219f, + 16.1026f, -17.1264f, -109.6817f, -184.2085f, 254.5133f, 208.7087f, 75.3774f, 52.8718f, -35.2364f, + 15.8336f, -47.0775f, -139.1713f, -23.5561f, 259.0049f, 120.0214f, 23.8825f, -18.5948f, -134.3813f, + 217.4017f, 369.5988f, 409.6801f, 338.5433f, 330.4056f, 386.7012f, 434.5276f, 492.7760f, 484.6164f, + -46.1429f, -79.6218f, 128.1106f, 199.9543f, 339.7710f, 309.8338f, 238.4430f, 156.8895f, 72.7742f, + 61.1308f, 114.6106f, 28.7939f, -131.9070f, -185.5015f, -350.3943f, -232.0556f, -62.9803f, -194.0513f, + 88.2757f, 51.2294f, -53.9555f, 120.0698f, 65.9863f, -105.8813f, -64.0929f, -151.0651f, -243.7652f, + 24.1201f, -12.6302f, -23.7808f, -98.2577f, -211.1396f, -323.5447f, -401.0499f, -204.4768f, -258.4671f, + 39.7202f, -23.9607f, 55.2442f, 43.6804f, -105.4100f, -97.8749f, -211.3002f, 9.7097f, -58.7138f, + 2.1766f, -51.7480f, -138.9340f, -268.1601f, -37.5098f, -125.8675f, -203.7929f, -12.2603f, -127.2472f, + -14.0622f, -81.7822f, -203.4806f, -89.5766f, 119.8931f, -51.7010f, -2.1055f, -38.5536f, -149.8808f, + 23.6196f, -19.7370f, -92.7527f, -260.9933f, -380.1402f, -158.8319f, -276.5396f, -29.3644f, -67.0346f, + 10.0869f, -54.0238f, -104.0772f, 43.4993f, -118.0066f, 16.7674f, -108.4172f, -138.9907f, -140.3299f, + 222.5364f, 321.1411f, 193.8368f, -60.0340f, -121.7460f, -35.9078f, 53.6514f, 109.0639f, 145.0366f, + -57.1173f, 143.6362f, 159.6491f, 26.6189f, 2.3305f, 30.0608f, 65.3329f, 78.8683f, 63.4622f, + 247.1436f, 350.7171f, 389.0685f, 295.2953f, 258.6614f, 266.7955f, 305.9202f, 355.1905f, 389.1698f, + -40.0882f, 114.6876f, 237.0104f, 161.9769f, 188.5636f, 180.3751f, 187.4189f, 168.3521f, 159.5175f, + -46.7654f, -132.1011f, -238.9261f, -204.8685f, 228.1911f, 129.1599f, 36.0960f, 169.1651f, 107.7902f, + -69.5087f, -114.5055f, -60.0494f, -15.9078f, 105.1520f, 39.1060f, -3.6140f, 83.1345f, 62.4498f, + 324.4036f, 287.6214f, 108.7328f, 320.4871f, 489.7306f, 267.9902f, 278.2168f, 405.7287f, 184.7344f, + -85.2571f, -118.8197f, 180.9905f, 177.4239f, 154.8864f, 106.5995f, 78.7528f, 111.5907f, 106.4840f, + -90.5891f, 2.5823f, 2.5231f, -151.4854f, -184.4761f, -166.9757f, -147.6148f, -65.2055f, -39.1239f, + -114.9974f, -71.3698f, 52.3087f, -18.1814f, 39.4264f, -34.2483f, -32.8691f, -45.8165f, -1.2029f, + 22.1063f, 6.7469f, -79.0146f, -247.7831f, -386.2835f, -437.2287f, -208.2931f, 68.6375f, -14.1447f, + 46.7840f, -11.0692f, 9.1612f, 43.4278f, -124.5574f, 124.1172f, -8.5368f, -30.1898f, 103.7909f, + -105.9007f, -181.3862f, -169.7189f, -257.0920f, -250.0032f, -150.2815f, -150.4918f, -38.5650f, -26.7658f, + -77.3138f, -101.1008f, -103.9903f, -17.1337f, -15.2577f, -54.2134f, -53.5373f, 66.9219f, 25.6872f, + 3.6265f, -56.7222f, -147.2143f, -330.5455f, -390.5518f, -43.3139f, -126.9112f, 133.5488f, 52.7399f, + -31.5816f, -111.6706f, -148.4743f, 75.1588f, -22.0969f, 119.9764f, 29.6891f, -9.5309f, -54.7378f, + 264.5383f, 274.1302f, 96.5690f, 21.7008f, 97.2691f, 55.1255f, -40.9705f, -92.2272f, -38.6482f, + 13.8969f, -15.1538f, -27.1357f, 135.8413f, 77.4989f, -36.1739f, 125.8114f, 35.5744f, -28.2436f, + 196.2991f, 345.8166f, 588.9347f, 510.5197f, 500.8432f, 457.6244f, 436.9384f, 472.1788f, 414.4815f, + 162.4519f, 280.7038f, 386.4482f, 479.3623f, 390.8287f, 411.1292f, 372.5701f, 289.3485f, 407.8594f, + -49.5343f, -147.0080f, -256.8338f, 54.1618f, 243.5530f, 87.1110f, 195.7264f, 119.5070f, 85.9479f, + -43.9641f, -150.1866f, -310.9041f, 196.7455f, 171.2780f, 33.0834f, 83.3645f, -32.4579f, -75.7126f, + 228.4330f, 442.3277f, 481.6548f, 426.3000f, 487.1132f, 559.8019f, 590.4699f, 565.5949f, 513.3911f, + -68.0544f, -164.7799f, 2.8141f, 451.2739f, 425.3554f, 461.7245f, 391.6532f, 369.1004f, 314.9413f, + 3.2743f, -49.3561f, -123.9568f, -40.1754f, -137.2377f, -271.6588f, -38.4305f, -104.5226f, -209.8071f, + 12.8092f, -40.2922f, -113.2953f, 65.4057f, -15.2443f, -159.0118f, 17.0998f, -81.3044f, -146.3446f, + 40.4305f, -8.9102f, -24.9719f, -113.7701f, -248.7160f, -332.5068f, -423.4328f, -23.8073f, -43.9266f, + -29.4866f, -119.6504f, -169.5775f, 85.2585f, -57.7724f, -138.3062f, -265.4940f, -52.0935f, -84.4635f, + -47.3285f, -147.4516f, -280.5169f, -38.0164f, -50.7237f, -141.1316f, -60.9737f, -147.8608f, -233.9212f, + -22.0146f, -99.1479f, -228.8716f, 91.6618f, 61.1343f, -83.5247f, 4.2834f, -101.7035f, -58.0283f, + -48.6094f, -104.2664f, -155.2664f, -226.4858f, -231.7223f, -205.7180f, -314.6280f, -150.3995f, 135.1819f, + -75.2552f, -171.9896f, -276.5969f, -137.0060f, -55.2086f, -99.5797f, -195.1097f, -57.2647f, -72.3255f, + 174.9245f, 258.0028f, 192.8297f, 81.3562f, 198.8450f, 180.2081f, 132.0824f, 113.5126f, 58.1412f, + -87.2559f, 34.2946f, 130.7081f, 62.1078f, 82.7816f, 74.4854f, 111.6818f, 120.3099f, 80.1334f, + -11.9671f, 183.3834f, 313.7754f, 257.2813f, 241.7612f, 256.9710f, 329.4492f, 385.5374f, 434.7875f, + -66.8195f, -94.6890f, 200.6887f, 141.3063f, 115.2635f, 204.7280f, 215.7973f, 270.9673f, 228.4647f, + -24.9070f, -120.1441f, -175.1481f, -8.0896f, 110.9215f, 307.0280f, 174.2457f, 112.7169f, 35.9639f, + -85.1717f, -152.2496f, -2.5803f, 66.0904f, 80.5138f, 128.8919f, 137.5303f, 159.4245f, 139.7766f, + -14.1396f, 274.4125f, 374.6268f, 335.3957f, 336.4666f, 435.5791f, 495.5083f, 529.9642f, 509.9389f, + -51.7794f, -133.3125f, -25.4473f, 264.8054f, 162.9175f, 171.9332f, 189.6735f, 202.1561f, 304.5228f, + 12.7820f, -17.2653f, -74.5083f, -134.5510f, -180.1133f, -294.9349f, -78.6120f, 84.8225f, -12.0772f, + -137.7282f, -213.7303f, -17.3509f, 48.2225f, -23.9524f, -26.4293f, -30.7054f, 11.1575f, 23.4229f, + 28.3886f, -22.3550f, -158.4269f, -299.3692f, -485.7126f, -469.8884f, 93.8213f, 156.3351f, 64.4156f, + -28.7029f, -110.1881f, -234.8032f, -83.3735f, -66.7772f, -146.3531f, 129.8178f, 13.7979f, -40.1959f, + -11.2220f, -81.0542f, -215.8795f, -186.0052f, -249.1487f, -354.7951f, 67.0249f, -8.7287f, -52.7080f, + -75.1895f, -93.5102f, -63.8842f, -40.2971f, -43.3423f, -18.3122f, 59.9384f, 48.9469f, 42.9198f, + -0.3036f, -79.3921f, -222.4614f, -402.4193f, -556.4007f, -208.9512f, 60.4822f, 0.2592f, 57.2596f, + -130.2469f, -254.9911f, -337.7263f, -76.9102f, -61.5888f, -8.3782f, -17.2822f, 37.1637f, 42.0772f, + 151.9460f, 229.6417f, 191.5279f, 12.9809f, -92.7110f, -204.7091f, -245.2630f, -53.2589f, -101.3680f, + 15.8084f, -69.0148f, -180.2926f, 176.9411f, 336.6405f, 148.3504f, 51.2260f, -50.6708f, -158.2893f, + 328.7315f, 655.2856f, 719.0299f, 605.1412f, 575.6907f, 490.5742f, 422.8277f, 353.4364f, 289.8675f, + 144.5240f, 474.8398f, 690.7612f, 638.0545f, 473.3627f, 248.6244f, 8.4810f, -128.9032f, 27.8837f, + -29.8052f, -109.6768f, -289.4402f, -289.9344f, 350.9098f, 241.8981f, 108.0220f, 27.7568f, -86.8368f, + -12.5998f, -103.5273f, -217.2510f, -9.8401f, 388.4400f, 266.5437f, 118.9818f, 49.1643f, -64.3603f, + 28.5445f, 288.4229f, 348.8730f, 378.0052f, 387.8595f, 690.6161f, 887.8799f, 718.7092f, 543.2699f, + -27.0127f, -136.3472f, -228.6534f, 91.4073f, 452.4637f, 352.8853f, 244.5759f, 199.3164f, 97.9452f, + -0.2574f, -38.8124f, -106.0784f, -81.9691f, -235.3859f, -136.9961f, -210.8024f, -316.9619f, -149.7671f, + -6.3268f, -89.9384f, -197.0412f, 160.1820f, 58.3899f, -80.1867f, -134.0614f, -254.4108f, -249.4793f, + 40.1439f, -3.4822f, -88.7857f, -80.2522f, -219.3521f, -305.1500f, -421.5967f, -471.9935f, -60.7522f, + 55.8529f, 24.5260f, -52.9174f, -26.1113f, -123.8744f, -235.0002f, -306.0707f, -450.7246f, -249.8812f, + -56.2297f, -152.7118f, -263.1169f, -243.0294f, -78.2260f, -99.3225f, -257.7953f, -369.9445f, -154.2971f, + -15.4570f, -97.8124f, -244.1879f, 10.4628f, 212.1971f, 36.6411f, -51.0200f, -150.9477f, -262.8206f, + -47.9169f, -145.0780f, -295.8412f, -176.3119f, -220.4176f, -239.8767f, -162.2583f, -277.5646f, -13.5098f, + -45.4312f, -120.7871f, -231.7391f, -104.6837f, 93.3399f, -13.0435f, -131.8873f, -253.9684f, -52.8010f, + 36.7261f, 97.8902f, 216.2452f, 22.2667f, -121.9688f, -165.2371f, -60.1795f, -22.1111f, 91.7368f, + -104.8126f, -27.6777f, 148.6412f, 44.3956f, -17.0786f, -34.0943f, 48.6552f, 67.5896f, 52.1341f, + 590.8627f, 669.3461f, 483.5975f, 208.4471f, 107.7190f, 123.1392f, 179.9797f, 179.2124f, 198.5541f, + -51.3512f, -7.3050f, 448.6575f, 261.8456f, 189.7417f, 139.0593f, 120.8041f, 144.0752f, 115.5179f, + -87.2434f, -195.6786f, -351.1762f, -282.1990f, -27.3961f, 2.1866f, 51.0065f, 120.9792f, 154.0704f, + -38.7878f, -118.5436f, -201.9035f, 97.1421f, 24.9785f, -20.8748f, 52.5830f, -4.3230f, 177.0334f, + -57.4864f, -155.8205f, -285.0674f, -156.5139f, 319.0307f, 288.4199f, 313.3522f, 292.7644f, 224.7193f, + -60.1766f, -170.1086f, -288.5482f, 312.6666f, 231.6275f, 142.7810f, 206.6260f, 124.0985f, 127.5073f, + -87.3474f, 17.7221f, -15.2086f, -151.2513f, -201.3116f, -202.2629f, -237.4979f, -150.1082f, -125.3288f, + -123.1549f, -147.2588f, 55.9560f, -39.6018f, -44.1818f, -147.1130f, -69.1241f, -56.1722f, -4.4924f, + 45.5201f, 15.5222f, -93.3382f, -254.1893f, -410.5618f, -226.8515f, -287.7839f, -386.6172f, -128.1340f, + 10.1233f, -19.6005f, -61.5127f, -8.8349f, -177.1218f, -110.5849f, -207.5041f, -213.2586f, 74.8075f, + -98.2741f, -195.7624f, -290.1091f, -230.1600f, -244.7515f, -194.7701f, -128.1076f, -46.1729f, -28.2903f, + -126.3800f, -193.1177f, -95.3231f, -119.6219f, -56.1586f, -69.0881f, -102.1922f, -52.5595f, -30.4027f, + -13.9604f, -91.5188f, -202.7529f, -375.3352f, -503.8488f, -122.5019f, -187.2047f, -144.9473f, -17.6464f, + -37.1158f, -113.9219f, -208.9531f, -3.1283f, -117.0010f, 43.6858f, -64.0984f, -108.2942f, 77.5131f, + -38.6401f, -49.9736f, 343.9084f, 326.3879f, 226.1680f, 136.9212f, 9.0736f, -37.1756f, -84.7974f, + -10.5004f, -100.6890f, 48.4106f, 394.7867f, 233.0419f, 165.9509f, 56.3291f, 2.7924f, -28.5845f, + 164.3221f, 505.0226f, 640.4844f, 633.9930f, 680.5828f, 631.7908f, 585.4574f, 501.5025f, 393.1295f, + -37.0300f, 293.6539f, 656.3401f, 612.9729f, 632.0821f, 560.9024f, 468.8401f, 382.9867f, 278.2211f, + -26.9959f, -117.0381f, -266.9459f, -169.9414f, 442.3678f, 351.1593f, 196.7216f, 129.6217f, 42.5401f, + -28.9160f, -126.1295f, -248.8180f, 219.9974f, 419.6462f, 237.5276f, 144.8018f, 41.0794f, -19.0438f, + -30.6524f, 324.5342f, 466.4269f, 433.6403f, 538.3355f, 578.5025f, 582.9940f, 533.2873f, 475.3817f, + -101.0867f, -47.3945f, 562.3863f, 521.2437f, 635.9947f, 581.9960f, 561.7294f, 477.7560f, 364.4759f, + -32.1078f, -119.5424f, -239.6324f, -86.9073f, -147.6602f, -263.4799f, -212.9377f, -261.9229f, -330.2635f, + 20.8260f, -48.5704f, -135.4246f, 164.8506f, 20.4817f, -48.8885f, -105.4348f, -206.6621f, 3.6375f, + 30.9311f, -34.7599f, -124.8998f, -258.7565f, -390.0532f, -468.4556f, -485.3543f, -264.1984f, -115.9895f, + -26.5921f, -106.6166f, -238.7686f, 53.4977f, -56.8913f, -155.1848f, -245.0791f, -329.9394f, -85.9503f, + -43.8040f, -135.2615f, -311.2635f, -322.8195f, 91.5184f, -51.5741f, -73.3097f, -108.7735f, -204.0501f, + -61.9589f, -158.0212f, -286.8211f, -163.7011f, 114.5577f, 29.0545f, -65.0919f, -65.1646f, 71.9506f, + -59.8760f, -170.6047f, -325.2270f, -421.8182f, -131.3054f, -184.2594f, -219.1312f, -132.9352f, -98.8301f, + -65.8626f, -165.1987f, -320.2537f, -353.1492f, -51.0331f, -7.3456f, -135.3074f, -235.8573f, 12.1485f, + 12.8460f, -11.9241f, 121.7405f, 24.2470f, -57.8971f, 19.1365f, -23.0243f, 220.3897f, 189.9156f, + -119.6102f, -129.9914f, 75.9549f, -17.3359f, 26.2798f, 28.0181f, 57.3185f, 79.8925f, 95.0199f, + -81.0524f, -19.0879f, 531.3251f, 384.0082f, 378.6000f, 387.1200f, 396.1896f, 433.4382f, 379.9696f, + -82.3204f, -67.1148f, 345.0646f, 244.9884f, 277.8043f, 263.1406f, 275.4622f, 311.7924f, 291.4141f, + -34.2889f, -127.1388f, -298.1820f, -380.4511f, 268.4245f, 354.6007f, 200.7670f, 149.3555f, 67.1469f, + -114.0830f, -239.0252f, -314.3921f, 24.6004f, 51.2722f, 105.4223f, 101.1157f, 137.3569f, 135.9245f, + -91.7432f, -32.7591f, 373.1560f, 319.3955f, 437.4347f, 503.4907f, 608.7997f, 578.2119f, 502.0230f, + -70.3367f, -179.9099f, -239.7652f, 256.5794f, 269.9891f, 291.1810f, 333.6932f, 305.8695f, 278.4421f, + -38.0671f, -120.8247f, -186.4547f, -239.7784f, -303.6527f, -286.7954f, -300.0361f, -205.3057f, -184.5087f, + -134.2125f, -185.9339f, -13.8119f, -65.8529f, 19.0133f, -30.1823f, -58.4970f, -93.5678f, -55.1841f, + -20.3990f, -104.7817f, -249.4716f, -358.9899f, -499.3363f, -434.6861f, -133.7299f, -130.1813f, -59.0671f, + -26.7201f, -94.4739f, -228.6340f, -28.5857f, -81.7289f, -186.7961f, -62.0135f, -167.5409f, 51.9732f, + -76.8652f, -194.8085f, -392.5224f, -495.1741f, -106.3757f, -87.6781f, -40.9442f, -25.9922f, 6.6919f, + -141.6526f, -241.2805f, -161.8672f, -45.4915f, -24.1067f, 7.6906f, 3.7741f, 45.2149f, 42.3436f, + -76.2028f, -185.3649f, -353.8127f, -492.3104f, -348.1328f, -172.4144f, -108.0814f, -55.5374f, -10.8210f, + -88.1331f, -202.9139f, -371.2243f, -273.3005f, -107.5773f, -103.9134f, -45.1607f, -40.9613f, 31.8985f, + 157.9412f, 199.7964f, 203.2689f, 127.6304f, 6.7547f, -75.7475f, -130.0489f, -209.2208f, -228.8015f, + -44.6527f, -50.6749f, 107.6295f, 92.4422f, 79.8121f, 133.5672f, 52.5620f, -6.2270f, -43.2877f, + 261.9115f, 472.0228f, 456.3473f, 335.7553f, 289.8814f, 234.7976f, 206.1187f, 157.4174f, 120.7698f, + 155.2229f, 242.6315f, 377.1642f, 293.6065f, 226.0318f, 155.2748f, 156.4116f, 128.6701f, 98.5061f, + 74.5256f, 70.1303f, -53.6869f, -182.3488f, 106.1648f, 41.5585f, -37.0232f, 6.5336f, -75.1722f, + -31.2252f, -113.3890f, -244.5892f, 75.8334f, 233.5228f, 76.5742f, 8.2886f, -109.6154f, 29.9907f, + 199.0678f, 337.3158f, 432.8418f, 315.2969f, 366.8018f, 352.4917f, 361.4405f, 280.1715f, 187.7336f, + 53.4911f, 143.3279f, 208.4704f, 298.2910f, 261.7387f, 149.2119f, 115.7060f, 59.9002f, 32.6898f, + 118.3519f, 194.3090f, 56.3174f, -33.3258f, -48.8783f, -210.5418f, -188.4141f, -181.0565f, -298.4099f, + 91.1937f, 135.5274f, 26.3852f, -57.5649f, 66.0117f, -82.2194f, -94.6889f, -88.3680f, -188.1230f, + 119.8292f, 164.8051f, 60.2985f, -68.4990f, -150.8028f, -282.2156f, -282.8785f, -353.0452f, -396.4856f, + 120.5806f, 120.4464f, 62.5068f, -23.5466f, -183.4260f, -164.0083f, -233.7240f, -309.0768f, -85.4341f, + 26.4925f, 47.3529f, -53.5415f, -218.9011f, -56.8672f, -174.1118f, -201.0902f, -193.1382f, -284.6390f, + 50.9597f, 20.8274f, -88.6445f, 17.8450f, 185.2710f, 12.4814f, -62.7698f, -74.9989f, -191.3486f, + 83.3881f, 63.9878f, -27.8680f, -181.7226f, -342.0545f, -62.8876f, -178.1327f, -229.1320f, -18.6240f, + 85.1419f, 45.8095f, 15.3667f, 69.0366f, -75.9137f, -34.4539f, -88.4330f, -163.4411f, 19.3370f, + 81.8880f, 213.5459f, 222.3313f, 109.1533f, 47.1884f, -17.2578f, -19.4486f, 3.7457f, -32.8905f, + 22.8266f, 54.6145f, 70.9314f, -2.0301f, 104.3592f, 45.7102f, 41.3375f, 82.5320f, 77.2795f, + 210.7176f, 326.3462f, 356.6618f, 280.9097f, 240.9705f, 212.4392f, 230.9905f, 220.8317f, 250.9306f, + 59.6089f, 218.2601f, 340.5622f, 179.8372f, 86.7106f, 42.1021f, 73.5578f, 70.2340f, 71.3620f, + 61.9071f, 46.6476f, 111.0709f, -59.8230f, -105.9862f, 89.4424f, 34.0065f, 42.7793f, -22.3657f, + -71.5290f, 31.9224f, 46.2106f, 8.2769f, 5.2717f, 15.6736f, 45.9446f, 74.5921f, 72.2933f, + 63.1228f, 347.0971f, 255.3817f, 42.2624f, -13.4026f, 95.4917f, 190.7911f, 219.1920f, 207.8866f, + 63.7817f, 21.7322f, 237.9311f, 133.1283f, 19.5484f, 128.6760f, 26.4302f, 103.7761f, 85.3130f, + 39.2312f, 80.2880f, 7.1932f, -118.9054f, -41.8213f, -170.3956f, -190.1681f, -25.3174f, -119.5246f, + -33.4058f, 60.1838f, 52.1765f, -11.5418f, -17.6690f, -28.5228f, -40.5342f, -31.3702f, -37.5340f, + 95.6257f, 128.8044f, 3.7503f, -171.8902f, -331.7014f, -422.7089f, 30.8156f, 15.6229f, -103.6316f, + 76.5623f, 145.2620f, 106.4321f, -70.8798f, -192.7731f, -152.0614f, 107.2952f, 31.2426f, -23.0299f, + 0.9016f, -4.6471f, -96.0447f, -197.1141f, -39.1036f, -170.4243f, 8.3031f, -73.0702f, -168.4342f, + -86.2673f, -18.7660f, 13.9540f, -105.8362f, -72.7468f, -57.3178f, -42.7630f, 10.3291f, 27.6536f, + 83.1109f, 54.8163f, 28.1776f, -137.0164f, -242.1605f, -32.9744f, -141.6118f, 26.8712f, 17.8517f, + 35.5325f, 65.1065f, -1.1122f, -37.2264f, -38.7638f, -41.0658f, -18.6295f, 44.3877f, 57.2718f, + 101.1713f, 97.2361f, 67.3819f, 236.9884f, 158.4350f, 20.2720f, 23.0851f, -73.7010f, -124.8067f, + 44.9800f, -33.1049f, -21.2276f, 224.2546f, 49.9567f, 88.2466f, -23.1899f, -98.6740f, 50.9732f, + -24.3959f, 403.6523f, 511.0127f, 404.3978f, 440.2577f, 428.9172f, 401.8223f, 375.5111f, 321.4924f, + 15.1345f, 142.1195f, 295.8327f, 367.1741f, 284.5674f, 257.7681f, 257.3533f, 227.7437f, 300.6506f, + -44.9562f, -131.9449f, -296.8129f, -184.1626f, 153.8183f, 14.5297f, 172.3343f, 69.5618f, 2.2208f, + -22.2475f, -119.2772f, -205.2499f, 310.9423f, 177.0844f, 73.5587f, -1.5010f, -44.3403f, 96.9000f, + 27.7742f, 173.5793f, 311.4776f, 285.5815f, 427.9854f, 452.0145f, 477.2097f, 401.7775f, 316.6574f, + 52.6696f, 140.2801f, 215.3995f, 166.1714f, 292.6204f, 318.2898f, 341.5682f, 274.8850f, 196.1860f, + 51.5561f, 96.4057f, -0.0610f, -80.6567f, -175.2689f, -292.8310f, -100.7723f, -200.9591f, -247.1591f, + 96.6859f, 97.0977f, 35.4401f, 47.1563f, -76.2811f, -194.8284f, -34.9894f, -110.1535f, -169.8929f, + 30.4654f, 7.6447f, -108.2569f, -243.2014f, -383.8708f, -478.0505f, -162.0353f, -178.7682f, -249.4727f, + 135.4580f, 198.9998f, 81.4247f, -69.9475f, -181.4226f, -284.4768f, -29.8270f, -92.7044f, -189.7940f, + -40.1188f, -133.9427f, -295.2091f, -278.5829f, -103.4496f, -237.8449f, -74.7856f, -155.3338f, -248.5054f, + -47.4470f, -149.6037f, -292.4242f, 221.6694f, 98.4280f, -14.0849f, -138.2963f, -163.0445f, -19.4243f, + 79.5896f, 39.1792f, -58.2936f, -253.9809f, -422.3516f, -18.3412f, -2.7302f, -102.9275f, 43.5500f, + -17.9005f, -70.1182f, -104.1536f, -126.4881f, -219.3935f, -153.8877f, -270.2488f, 155.3837f, 114.2388f, + 188.3484f, 261.8459f, 266.6991f, 243.5570f, 172.7795f, 64.3333f, 45.3547f, 14.1479f, -58.3812f, + 42.3610f, 96.6123f, 113.8369f, 96.5219f, 138.7232f, 47.5273f, 42.4855f, 87.4416f, 115.5724f, + -5.4013f, 368.9961f, 386.7844f, 312.8328f, 294.8554f, 318.4847f, 330.7657f, 356.5357f, 348.3268f, + 113.9440f, 136.1339f, 283.1776f, 188.4109f, 151.5282f, 128.5029f, 167.5631f, 242.2409f, 260.3565f, + -13.3113f, 76.9204f, 83.0527f, -49.6054f, 32.9182f, 193.1624f, 242.1413f, 224.6298f, 146.4784f, + 49.3300f, 80.8438f, 67.2940f, 65.3665f, 141.4567f, 78.9471f, 115.6802f, 154.3108f, 177.7814f, + -2.1684f, 97.5184f, 210.7061f, 182.4635f, 248.3353f, 312.9833f, 448.6478f, 502.5403f, 436.6044f, + 10.4934f, 93.6577f, 144.0456f, 109.2677f, 171.7553f, 160.5641f, 247.6292f, 348.4738f, 372.3836f, + 62.0393f, 66.4595f, -22.8432f, -154.2429f, -311.1715f, -269.7167f, 30.1724f, -82.4276f, -130.4250f, + -1.8658f, -10.8456f, -5.2486f, -28.7596f, -130.9176f, -235.6978f, 116.9998f, 34.2436f, -79.9885f, + 32.1393f, -12.8439f, -142.0784f, -272.6861f, -469.8031f, -450.3773f, 42.8701f, -56.9028f, -113.0164f, + 44.2438f, 0.5177f, -95.0709f, -229.7896f, -388.2228f, -193.8794f, 161.5550f, 62.3152f, 16.3412f, + -21.7573f, -96.5696f, -171.8374f, -270.5201f, -389.2275f, -187.1907f, 4.2880f, -69.4009f, -139.6222f, + -59.1336f, -137.9044f, -127.8821f, -82.4177f, -132.8951f, 55.2591f, 25.2046f, 165.8443f, 176.7896f, + 13.1713f, -65.9463f, -177.8707f, -363.8923f, -474.4700f, 53.7845f, 194.7626f, 99.8684f, 126.7437f, + 26.4565f, 54.2781f, -5.8084f, -213.5320f, -186.7453f, 6.5259f, 119.4530f, 196.2039f, 188.0246f, + -12.3442f, -52.3945f, 174.0135f, 50.5399f, -55.6784f, -95.2558f, -196.2955f, -198.2056f, -234.0973f, + 23.6446f, -54.5462f, -134.7219f, 193.6175f, 178.7128f, -0.9450f, 7.7510f, -88.8611f, -200.7396f, + 154.0881f, 689.2718f, 650.6971f, 522.8596f, 436.5025f, 314.9000f, 250.7824f, 187.1628f, 148.5410f, + 83.9959f, 202.8234f, 359.2843f, 411.3538f, 425.6817f, 308.8017f, 206.3666f, 113.2320f, 60.3929f, + -21.1689f, -91.1694f, -252.6742f, -235.0333f, 249.5398f, 114.6655f, -0.7796f, -65.2547f, -172.8182f, + -30.5567f, -123.2070f, -309.0227f, -44.0884f, 320.4634f, 157.6161f, 61.6828f, -45.3025f, -139.1032f, + 206.4974f, 723.0883f, 782.3015f, 479.5419f, 242.9557f, -15.8222f, -162.4184f, 134.4517f, 319.9661f, + -41.0232f, -148.1419f, -92.0839f, 478.0700f, 348.8458f, 292.6417f, 221.8808f, 139.1332f, 83.7320f, + -6.8324f, -77.6477f, -56.3444f, 19.3478f, -110.6184f, -96.5414f, -225.9007f, -330.6617f, -424.5623f, + 26.9337f, -4.4548f, -148.8763f, -80.3516f, 81.8311f, -110.8947f, -150.9911f, -162.4880f, -279.5481f, + 15.4135f, -1.8583f, -56.8319f, -146.1688f, -266.5346f, -355.1809f, -419.6793f, -456.7536f, -416.2208f, + 112.1756f, 88.2059f, 26.0259f, -86.2333f, -258.4741f, -66.9660f, -164.5662f, -250.9281f, -276.0475f, + -51.5026f, -135.9180f, -210.3467f, -175.0943f, -7.7200f, -1.5529f, -138.1960f, -292.0197f, -364.5311f, + 1.6098f, -29.3697f, -112.8375f, -233.4716f, 123.6812f, 20.4676f, -81.0632f, -116.0258f, -218.5294f, + -34.1878f, -103.0825f, -139.6876f, -229.9859f, -246.3806f, -96.8411f, -204.4168f, -321.0166f, -418.4522f, + 27.1891f, -2.9717f, 21.2254f, -122.5167f, -201.1399f, 36.0115f, -56.9192f, -106.8464f, -192.5580f, + 77.7097f, 24.2840f, 152.6398f, 61.5673f, -54.9359f, 27.7810f, -85.7347f, -79.4392f, -81.0366f, + 59.2315f, 15.7636f, 128.6461f, 63.2966f, -11.4618f, 18.7670f, -58.2229f, 42.0642f, 49.7434f, + 247.9855f, 413.3163f, 345.0402f, 192.3750f, 145.4847f, 121.6956f, 123.6805f, 107.2007f, 94.2462f, + 104.2558f, 282.0381f, 490.4723f, 344.7097f, 244.1310f, 96.7224f, 2.9896f, -31.7180f, -23.3323f, + -22.5118f, -53.8832f, -113.5013f, -234.2837f, -4.7630f, -0.8369f, -15.3972f, 57.4113f, 45.6486f, + -41.6155f, -134.7804f, -200.2841f, 179.2444f, 29.8214f, 36.0840f, -106.4028f, 151.5328f, 102.1621f, + 141.5078f, 201.5805f, 79.4698f, -159.8402f, -279.6548f, -324.4731f, -129.3751f, 72.2403f, 81.4769f, + -45.8403f, -152.7728f, -116.5580f, 262.2678f, 114.2470f, 210.0651f, 100.2266f, 64.9777f, -14.6634f, + -39.9272f, -124.8000f, -75.7294f, -110.6360f, -223.7299f, -102.2257f, -226.1053f, -85.4944f, -173.4764f, + -91.6640f, 30.6543f, 4.1065f, -65.4408f, -39.3890f, -89.5364f, -102.5911f, -125.5036f, -48.1974f, + 27.2660f, 19.3735f, -66.4810f, -233.9350f, -388.9383f, -229.7098f, -102.6715f, -201.6806f, -177.6036f, + 153.9685f, 141.8902f, 89.4281f, -53.1892f, -209.9941f, 8.0810f, -71.3509f, -135.8233f, -78.6157f, + -48.4004f, -143.6756f, -250.1705f, -343.5184f, -330.9693f, -81.7413f, -159.8642f, -192.9882f, -201.0525f, + -49.7401f, -133.3727f, -211.5154f, -166.0789f, -199.3352f, -4.0380f, -98.3591f, -184.6634f, -113.6087f, + 32.7128f, -26.7812f, -78.3951f, -264.0457f, -339.2219f, 40.1904f, -121.6728f, -51.6241f, -125.0696f, + 1.8568f, -67.7562f, -73.4413f, -115.9242f, -245.2522f, 77.1352f, -22.1839f, 2.7514f, -4.3203f, + 19.0296f, -62.4543f, 21.8088f, 217.8850f, 43.1886f, 12.7766f, -121.5772f, -171.9543f, -180.7850f, + -0.3986f, -96.1580f, -120.0616f, 336.5914f, 176.9306f, 54.3062f, -66.4501f, -138.8101f, -90.7495f, + 109.0295f, 377.1798f, 641.5853f, 577.4881f, 571.3625f, 438.8002f, 310.6432f, 204.9863f, 132.6160f, + -76.9013f, -15.0371f, 664.7503f, 520.0686f, 489.1051f, 371.2256f, 270.3431f, 196.9454f, 166.5973f, + -42.2498f, -134.3667f, -336.4376f, -457.6409f, 173.4562f, 138.1508f, 34.3921f, -18.1609f, -85.9677f, + -20.8727f, -125.4622f, -192.7956f, 434.5861f, 290.6413f, 142.0824f, 77.1623f, -13.2305f, -29.4274f, + 178.7104f, 373.0402f, 459.7581f, 474.3989f, 557.5211f, 569.2194f, 525.4768f, 358.3187f, 210.4229f, + -26.8194f, 77.7574f, 350.3222f, 445.4183f, 524.4524f, 462.1511f, 381.7293f, 289.9692f, 204.0649f, + 47.7632f, 17.1803f, -105.1057f, 10.4223f, -60.5128f, -219.3625f, -119.8198f, -230.6158f, -301.9153f, + 60.2078f, 16.2198f, -62.5382f, 98.4891f, -50.3729f, -119.2299f, -183.9794f, -286.1903f, -145.0719f, + 52.5866f, 72.1675f, -32.1273f, -162.5446f, -282.0867f, -356.6873f, -196.9938f, -290.2792f, -343.8752f, + 58.1756f, 83.5942f, -32.7989f, -128.5429f, -265.7008f, -326.2490f, -166.5130f, -258.2744f, -31.7978f, + -49.8436f, -148.3240f, -287.2763f, -389.7832f, -131.7967f, 6.5863f, -71.1640f, -182.3324f, -272.4139f, + -32.6407f, -113.2022f, -199.3120f, -231.3794f, 5.2103f, 172.0263f, 60.2526f, -14.7182f, -108.9096f, + 27.2077f, -23.7367f, -95.9858f, -283.8613f, -409.0134f, -31.3871f, -148.6489f, -208.9727f, -274.8275f, + 69.4333f, -0.7143f, -57.0494f, -261.8966f, -366.3107f, 188.4734f, 53.9671f, 24.5447f, 25.3948f, + -4.4283f, 5.6792f, 301.6043f, 172.8969f, 55.6507f, -7.7604f, -81.7609f, -49.2316f, -63.0654f, + -12.4033f, -97.3530f, 37.2340f, 215.5548f, 48.4286f, 11.6666f, -133.9813f, 32.1272f, -33.6059f, + 57.9103f, 293.2768f, 591.9909f, 431.5314f, 338.6320f, 236.6151f, 185.2476f, 175.1540f, 156.0322f, + -63.6185f, -100.3640f, 351.1546f, 428.5004f, 353.7403f, 293.3142f, 196.1020f, 152.1965f, 114.6518f, + -20.0721f, -100.8514f, -174.7278f, -314.6773f, -143.5646f, 298.1905f, 181.1825f, 142.0341f, 71.3729f, + -64.7951f, -146.2021f, -143.2170f, 33.9854f, 13.8056f, 156.0337f, 163.4005f, 334.1913f, 325.3497f, + -79.9064f, -121.2133f, 229.6626f, 303.8755f, 306.8218f, 415.8466f, 436.8824f, 486.2830f, 451.8081f, + -67.6130f, -122.0631f, 41.7635f, 134.7727f, 156.2778f, 308.4236f, 340.0357f, 434.5742f, 391.1108f, + -2.6037f, -46.9405f, -151.3320f, -160.0405f, -239.8193f, -368.3138f, -88.0921f, -150.1500f, -191.7920f, + -79.3309f, -112.6262f, -20.0215f, -129.1640f, -35.3227f, -69.4806f, -159.3188f, -223.7142f, -132.1779f, + 21.9835f, -11.3374f, -106.7910f, -244.8813f, -406.4640f, -311.7320f, -96.4711f, -182.5312f, 57.8956f, + 25.8713f, -0.7151f, -79.9440f, -80.0111f, -224.4878f, -136.2209f, -22.1062f, -137.4635f, -22.6838f, + -17.4638f, -88.0421f, -183.7897f, -361.0791f, -194.1127f, 29.9571f, -12.3110f, 17.3506f, -52.9132f, + -108.1431f, -191.9295f, -193.9598f, -196.0948f, -165.6809f, -79.0258f, -53.5949f, 30.1916f, 37.3619f, + 10.0420f, -70.0023f, -183.1197f, -393.7681f, -492.0758f, 102.2096f, -13.6587f, -51.6821f, -101.1752f, + -25.8195f, -90.5090f, -174.4579f, -208.3670f, -308.3139f, -74.5783f, -38.9631f, -104.3672f, 142.1591f +}; + +/*-------------------------------------------------------------------* + * 1nd stage, 2nd split: ISF9 to ISF15 + *-------------------------------------------------------------------*/ + +const float dico2_isf[] = +{ + 530.1115f, 512.7983f, 443.8771f, 306.1447f, 171.2327f, 70.8250f, 56.8183f, + 248.5479f, 252.9719f, 260.5429f, 221.7305f, 172.6754f, 84.8419f, 141.5120f, + 166.9014f, 171.9745f, 263.4265f, 204.8570f, 129.5061f, 45.8705f, -162.9417f, + 47.0761f, 115.3926f, 182.9788f, 181.5048f, 89.7111f, 17.3276f, -86.2999f, + -57.3148f, -93.7950f, 58.2071f, 31.0844f, 152.3217f, 108.6931f, 41.3677f, + -163.1767f, -217.0378f, 215.5667f, 199.7393f, 91.8320f, 56.3535f, -37.1534f, + 16.9371f, 75.2105f, 106.8429f, 58.4518f, 26.0167f, 13.3113f, -106.5544f, + -16.6336f, -49.0904f, 66.7054f, 162.6404f, 110.2851f, 24.4686f, -138.4124f, + -145.3240f, -33.7683f, -134.5548f, -42.3167f, -36.8413f, -70.9451f, -34.7360f, + -234.5519f, -328.1575f, -78.2304f, 181.4482f, 100.8272f, -4.3886f, -98.7986f, + -18.7314f, 128.6640f, 38.0685f, -113.4033f, -211.9919f, -310.5748f, -138.0866f, + -222.6271f, -45.5429f, 72.9616f, 3.9276f, -52.1214f, -162.3586f, -29.6134f, + -241.3416f, -50.3196f, -96.3331f, -145.0456f, 17.4087f, -29.8105f, 108.3555f, + -399.1142f, -421.4348f, 49.0965f, 185.0085f, 99.2830f, 49.7543f, 20.2726f, + -109.7596f, 29.7695f, -65.3607f, -141.1745f, -110.3974f, -215.1475f, -110.3518f, + -46.4209f, -20.4624f, -0.5266f, 52.1919f, -12.3074f, -79.8395f, -162.1720f, + 415.6808f, 323.0418f, 248.6461f, 267.3440f, 181.1869f, 81.5855f, 4.8347f, + 188.1995f, 162.5893f, 175.4467f, 144.9775f, 131.0177f, 114.8023f, 75.6850f, + 280.8494f, 225.0358f, 142.4128f, 52.8503f, 44.0619f, 35.6548f, -77.7252f, + 116.2722f, 68.6422f, 192.5792f, 142.9262f, 75.7274f, 63.5846f, 13.9314f, + -13.4854f, -92.0420f, -101.3018f, -13.9503f, -1.5377f, 38.4848f, 59.2146f, + -38.0921f, -119.6284f, -10.4956f, 88.8682f, 35.1836f, 43.2013f, -33.7051f, + 35.4547f, 5.0305f, -82.4376f, -100.9264f, -41.5222f, 33.5725f, -24.8381f, + 28.3963f, -13.4840f, -22.4480f, -11.9734f, 63.1961f, 13.8177f, -75.0030f, + -42.4115f, -130.9516f, -245.5204f, -25.9129f, -23.6896f, -49.8110f, 125.7094f, + -193.2334f, -261.3991f, -284.3770f, 75.4337f, 11.9830f, -86.1044f, 47.5069f, + 126.4967f, 37.0484f, -34.7501f, -35.5687f, -159.6523f, -277.2735f, -60.1203f, + -0.1156f, -91.4527f, 35.7808f, 12.8593f, -134.0804f, -237.8749f, -85.9030f, + -134.0644f, -159.5199f, -185.8239f, -255.9559f, -59.8235f, 31.9001f, 86.5795f, + -191.3466f, -290.9137f, -99.7657f, 18.9475f, -18.6283f, 52.5484f, -49.6458f, + 46.4725f, -26.2220f, -128.3100f, -152.1911f, -106.3316f, -212.7650f, -21.8051f, + -22.1899f, -50.6587f, -4.0987f, -2.7160f, -63.9780f, -18.1671f, -8.5809f, + 384.5044f, 415.7100f, 375.3419f, 221.7875f, 82.0605f, -10.5889f, 6.1831f, + 316.8826f, 269.9225f, 294.6225f, 200.5877f, 87.3740f, -13.6950f, 64.9923f, + 258.7122f, 274.8100f, 241.2115f, 150.6316f, 22.2879f, -82.2525f, -100.3677f, + 199.2028f, 140.2225f, 163.4630f, 153.3341f, 35.3954f, -56.3718f, -6.8714f, + -75.2059f, -12.0741f, -10.5019f, 87.1330f, 34.8811f, -55.7089f, 9.3485f, + -43.9131f, -38.3306f, 184.0508f, 124.7862f, 72.2168f, 1.2740f, 68.2432f, + 98.5331f, 56.9808f, -18.2386f, 106.3234f, 18.7400f, -82.2337f, -91.2981f, + 56.8543f, 26.8486f, 79.2505f, 142.2529f, 26.5547f, -20.1961f, 20.0251f, + -101.2805f, -186.8430f, -272.0712f, -136.2303f, -296.2366f, -195.7741f, 24.4320f, + -195.6167f, -300.4726f, -112.7403f, 30.7313f, -121.6459f, -194.0080f, -41.2612f, + 98.2285f, 20.7275f, -91.7240f, -183.2970f, -349.5879f, -345.3007f, 56.7721f, + -162.4512f, -215.0840f, 54.6896f, -51.9437f, -204.1752f, -302.6133f, 17.1211f, + -127.3559f, -165.3954f, -278.6780f, -194.2370f, -33.4488f, -168.4021f, 38.6555f, + -295.7049f, -301.6402f, -62.3113f, -29.8345f, -17.8150f, -12.4093f, 147.9211f, + 33.3799f, -13.6109f, -78.2303f, -156.7363f, -259.0581f, -406.3858f, -96.3685f, + -70.3287f, -128.8603f, -35.8870f, -146.8926f, 10.7114f, -71.6699f, -42.8127f, + 499.4422f, 424.3595f, 305.0398f, 196.0019f, 126.5760f, 63.9795f, 61.1516f, + 266.3734f, 181.9720f, 175.4860f, 108.0995f, 56.9864f, 10.7695f, 159.6035f, + 247.9333f, 184.5145f, 152.3734f, 41.9318f, -90.6959f, -210.2689f, -54.1531f, + 76.7519f, 154.5846f, 129.7565f, 83.0209f, 81.7690f, -11.2691f, -31.6182f, + 58.5084f, -37.0541f, -121.7467f, 29.7202f, -30.0062f, -124.9186f, -19.6730f, + 18.1514f, 3.4725f, 18.4977f, 68.3406f, 54.2768f, 11.6546f, 150.1885f, + 85.0507f, 80.6332f, -9.5051f, -97.5608f, -37.4477f, -107.8952f, -71.4574f, + 10.1458f, 46.5077f, 14.7448f, 5.4868f, -1.5563f, -51.9743f, -20.1740f, + -186.2883f, -239.8358f, -385.3964f, -279.2732f, -246.3584f, -317.5150f, 77.9409f, + -290.8109f, -394.1977f, -416.1625f, -291.0747f, -246.4900f, -66.6275f, 7.0910f, + -53.3572f, -98.2187f, -188.6130f, -239.5862f, -382.9682f, -469.8791f, 4.8130f, + -236.2064f, -299.8000f, -219.3447f, -267.9179f, -424.8446f, -200.9900f, 22.5746f, + -78.8698f, -167.2648f, -305.5687f, -418.8565f, -37.5231f, -91.3323f, -69.9264f, + -187.4632f, -276.9708f, -417.8298f, -350.3085f, -51.2638f, -35.7869f, 125.5794f, + -56.7695f, -75.4877f, -200.1077f, -284.6027f, -223.5758f, -298.6907f, -81.9158f, + -129.2158f, -228.6000f, -204.9319f, -246.4877f, -109.8989f, -81.0975f, -118.3144f, + 455.1133f, 431.3343f, 366.9250f, 323.3162f, 279.7654f, 166.3696f, 60.4075f, + 2.2427f, -42.4551f, 320.2264f, 303.9626f, 161.9218f, 44.0682f, -10.4932f, + 148.9215f, 132.3074f, 122.6564f, 103.3307f, 47.4590f, -3.4202f, -185.0445f, + -145.6115f, 18.4827f, 228.0817f, 172.5267f, 38.5907f, -90.1562f, -43.9888f, + -193.6085f, -14.9922f, -111.3547f, 102.4688f, 119.0297f, 66.3613f, 1.6199f, + -229.1052f, -217.2523f, 26.9406f, 25.7113f, 183.7947f, 138.0997f, 4.9246f, + -54.0735f, 27.3595f, -6.9751f, 41.3897f, 26.0272f, 65.3047f, -117.9287f, + -173.6861f, -55.0424f, 72.3582f, 74.4772f, 59.1275f, 32.2629f, -52.0966f, + -100.2805f, -203.3997f, -281.1161f, -77.1917f, 52.4149f, -18.1558f, -70.9170f, + -319.7560f, -456.2388f, -303.5891f, 199.8376f, 140.0785f, 37.0556f, -44.1020f, + 53.3338f, -0.8373f, -29.0162f, -53.8806f, -156.4895f, -44.6551f, -144.9031f, + -94.4005f, -181.9505f, 79.8505f, 87.0198f, -12.1349f, -82.6727f, -75.0313f, + -207.6459f, -248.8868f, -181.9412f, -267.7931f, 100.0395f, 108.0778f, -54.3928f, + -445.8355f, -486.1193f, -148.8008f, -29.2654f, -20.9138f, 5.3055f, 34.4656f, + -121.3450f, 45.0588f, -55.9190f, -194.9437f, -134.0013f, 48.6244f, -162.3284f, + -240.5215f, -57.3889f, -52.6141f, 16.9554f, -1.6593f, 47.0915f, -144.2315f, + 326.1222f, 306.0203f, 250.4581f, 152.3629f, 138.5136f, 136.6061f, 24.8198f, + 27.9826f, 75.7094f, 172.8544f, 182.3980f, 170.1943f, 85.7041f, 145.3514f, + 181.4035f, 144.2242f, 74.8556f, 1.4272f, -61.0836f, -28.1913f, -88.2541f, + 22.2453f, 80.4679f, 118.3400f, 80.0672f, 73.2458f, 39.5447f, 103.6288f, + -15.5237f, -80.2624f, -190.5397f, -72.0487f, 107.7333f, 24.8407f, -9.9839f, + -84.5773f, -169.2563f, -115.8907f, 53.5535f, 128.0731f, 120.4292f, -112.8952f, + 147.5641f, 31.5040f, -120.2366f, -181.4932f, 22.0867f, -14.3306f, 88.8276f, + -38.8943f, 9.5208f, -14.2124f, -59.1263f, 77.8884f, 3.1099f, 55.9227f, + -166.2941f, -272.4271f, -413.5079f, -51.9034f, 151.3775f, 62.8211f, 125.4737f, + -251.4761f, -399.5025f, -496.4470f, 15.1387f, 25.6129f, -47.9447f, 27.2588f, + 145.3730f, 69.2023f, -67.5157f, -217.2383f, -216.1160f, -118.5795f, -73.6690f, + -45.7917f, -144.0127f, -166.1374f, -47.5218f, -180.4311f, -59.2610f, -28.7005f, + -253.6976f, -332.1650f, -464.5507f, -299.7163f, 194.1511f, 140.7432f, 86.8261f, + -311.8663f, -444.9106f, -568.2597f, -74.2214f, 168.0938f, 91.5796f, 69.8801f, + 16.2576f, -36.8680f, -158.1385f, -270.2551f, 14.7501f, -79.0270f, -96.1519f, + -66.0490f, -143.0125f, -113.3699f, -34.3890f, -25.0086f, 12.5482f, -114.0537f, + 394.4650f, 360.5732f, 366.5918f, 277.4828f, 181.5850f, 89.9984f, 133.6822f, + 84.7064f, 117.2216f, 411.7273f, 263.7720f, 26.7575f, -178.8131f, -69.9364f, + 30.5200f, 177.1075f, 123.5531f, 7.2231f, -92.4543f, -193.6012f, -94.9796f, + 65.2717f, 8.1559f, 165.7135f, 84.0440f, -35.7379f, -118.5377f, -66.5232f, + -113.0977f, -31.5885f, -27.3286f, -26.0692f, 15.5114f, 21.2791f, -23.2414f, + -138.0497f, -166.9724f, -35.1916f, 20.7464f, 36.6236f, 3.5627f, 20.9882f, + -11.0900f, 124.4114f, 110.4337f, 5.6888f, -93.7853f, -22.5026f, 30.8623f, + -29.4226f, -47.2009f, 89.3512f, 13.6996f, 22.5131f, 2.3075f, -51.7825f, + -137.2009f, -200.8273f, -290.6017f, -325.7113f, -275.5810f, -53.4554f, 64.1025f, + -438.9569f, -542.2731f, -412.1423f, -89.9884f, -28.4069f, 15.6647f, 13.8672f, + -63.4932f, -90.8672f, -207.9037f, -306.7191f, -456.9608f, -272.1003f, 37.6908f, + -307.9492f, -374.7438f, -96.2506f, -168.0490f, -243.8695f, -64.5296f, -3.1349f, + -334.4494f, -210.9558f, -246.0072f, -354.2072f, -131.6393f, -27.1645f, 29.5091f, + -366.0860f, -407.0811f, -257.3381f, -286.1801f, -81.4441f, 77.6511f, -10.1480f, + -204.4162f, 30.5330f, -38.3922f, -195.6373f, -339.5407f, -347.7475f, -31.6897f, + -243.6551f, -274.7409f, -17.3959f, -136.0264f, -9.8248f, 34.1080f, -72.7180f, + 392.4115f, 321.3055f, 213.3703f, 97.3249f, 35.2497f, -8.7278f, 80.8223f, + 116.4944f, 155.2541f, 148.9464f, 124.6089f, 78.0606f, 24.1574f, 118.5191f, + 184.6981f, 148.0850f, 51.9562f, -96.3499f, -247.0329f, -172.3801f, 29.4305f, + 110.9024f, 81.4259f, 152.8654f, 45.1114f, -9.8257f, 17.3401f, 36.9414f, + -27.9329f, 30.8783f, -37.1648f, -24.5270f, -50.2764f, -114.4973f, 79.3175f, + -64.1897f, -136.2614f, 44.8825f, 47.6375f, 26.8591f, -0.2729f, 147.6527f, + 135.7539f, 66.4931f, 38.8074f, 22.5599f, -70.1020f, -117.9085f, 73.4314f, + -74.1601f, -0.9165f, 58.6634f, 8.8413f, -20.0486f, -4.3857f, 84.5215f, + -240.3710f, -336.9822f, -425.7879f, -557.5921f, -313.4519f, -18.6503f, -2.2911f, + -375.5428f, -498.5622f, -604.7405f, -284.0899f, -22.5439f, 21.7506f, 87.1215f, + -48.5853f, -99.7448f, -219.1610f, -385.9877f, -498.9206f, -58.0072f, -32.0391f, + -187.4733f, -257.8106f, -348.0662f, -465.0402f, -523.0202f, -126.9367f, 7.9922f, + -242.4066f, -358.0976f, -506.2984f, -527.3067f, 103.2345f, 112.8789f, 19.5721f, + -329.7812f, -399.2909f, -525.3788f, -519.3241f, -114.6023f, 18.0531f, 108.4014f, + -101.3959f, -182.8774f, -323.7689f, -459.4139f, -208.2967f, -218.5872f, -30.6618f, + -83.9128f, -188.9391f, -321.0572f, -481.5454f, -309.1473f, 5.7541f, -53.7133f, + 508.3954f, 514.6412f, 492.8828f, 409.4624f, 279.6907f, 139.5316f, -25.0946f, + 225.7716f, 321.9763f, 361.4909f, 313.2012f, 246.2739f, 141.2217f, 40.0333f, + 183.5499f, 361.1524f, 299.5782f, 200.8792f, 127.5401f, 74.2915f, -43.7510f, + 87.8314f, 192.1731f, 193.5542f, 170.6556f, 233.6155f, 150.0142f, -17.3959f, + 16.6972f, 31.8549f, -16.4255f, 68.2118f, 202.5792f, 133.4167f, -24.8757f, + -118.5934f, -60.2884f, 62.2425f, 224.9154f, 157.3277f, 86.2001f, 127.8335f, + 83.3985f, 95.4353f, 47.7289f, -24.4079f, 122.0239f, 35.9347f, -62.3200f, + 85.0292f, 81.2156f, 121.2625f, 104.6399f, 119.6594f, 126.2998f, -77.7217f, + -111.4887f, -105.1822f, -30.9685f, -48.2729f, -55.9544f, -59.5831f, 92.3539f, + -80.0937f, -149.8609f, -166.3557f, 134.5224f, 22.8807f, -72.2311f, -71.7019f, + -106.2400f, 96.5443f, 49.1033f, -82.1511f, -202.4001f, -182.6395f, 30.4307f, + -38.6498f, -47.0332f, 196.2347f, 62.6390f, -109.4412f, -217.5327f, 118.6330f, + -165.3289f, -6.5073f, -110.5468f, -172.9718f, 83.9014f, 82.6244f, -54.8262f, + -220.1304f, -267.2490f, -88.9432f, 199.2986f, 140.8517f, 50.8656f, 126.1685f, + -167.2625f, 130.8662f, 38.2409f, -25.2887f, 14.1618f, -84.0247f, -96.2550f, + -141.5362f, 19.9235f, 142.0336f, -6.1892f, -91.4426f, 58.7228f, -64.2743f, + 356.9441f, 345.0619f, 293.3749f, 255.2251f, 264.2440f, 181.1552f, -59.9296f, + 246.4391f, 212.9810f, 208.9891f, 281.1677f, 232.7401f, 140.5526f, -31.7890f, + 305.7318f, 278.3117f, 199.8758f, 171.6015f, 133.0515f, 98.0317f, -152.6052f, + 194.0116f, 162.7764f, 97.4355f, 145.3808f, 115.4215f, 67.7161f, -75.3193f, + 50.0116f, -43.0169f, -150.4608f, 36.4008f, 15.3428f, 67.7103f, -90.2827f, + 84.1801f, -22.9641f, -98.8488f, 180.4238f, 151.9562f, 59.9903f, 26.9906f, + 177.5510f, 105.3890f, -1.4605f, -131.7380f, -19.1906f, 90.9329f, -125.9315f, + 119.9137f, 55.8859f, 20.5790f, 85.2794f, 50.1218f, 92.1433f, -60.8729f, + -14.4439f, -72.6866f, -93.8542f, -160.4042f, -42.8567f, 3.3977f, 156.0409f, + -54.5578f, -142.4629f, -245.2400f, 100.6745f, 148.4848f, 83.6861f, 108.3569f, + 51.3106f, 177.4475f, 69.0944f, -111.1996f, -202.9647f, 42.3005f, -83.6978f, + 30.1802f, -55.2034f, 78.5647f, -47.9833f, -191.5273f, -51.2293f, 23.2575f, + -5.5372f, -75.8171f, -203.4011f, -289.5156f, 106.7613f, 141.4280f, -13.0810f, + -141.4010f, -221.2458f, -112.2780f, -89.1527f, 63.0527f, 92.4026f, 123.8935f, + -105.1256f, 76.2826f, -29.3279f, -146.3319f, -79.8275f, 4.2937f, 30.2187f, + -50.0448f, -103.1965f, -61.1121f, -87.1858f, -185.4814f, 103.5567f, 10.4906f, + 483.7709f, 447.9613f, 357.9065f, 269.2391f, 168.5860f, 81.9800f, -109.5565f, + 312.3829f, 259.3732f, 343.4722f, 283.4192f, 160.6555f, 62.4472f, -64.0786f, + 177.4189f, 268.0235f, 209.2622f, 107.3129f, 57.2866f, 17.7874f, 43.3733f, + 118.3413f, 189.8245f, 200.1482f, 138.5254f, 93.9936f, 70.6362f, -26.8448f, + 30.9857f, 35.8345f, 11.3604f, 57.5567f, 90.9626f, 20.1319f, 6.8180f, + -66.7255f, 112.7395f, 51.2972f, 171.5931f, 105.7922f, 1.0289f, -4.0888f, + 161.4374f, 94.0077f, 56.1444f, 67.9007f, 60.5061f, -0.5993f, 5.5333f, + 22.6145f, 84.7579f, 96.3842f, 85.7332f, 58.1820f, 68.5529f, -7.0445f, + 89.2476f, -2.9310f, -93.5695f, -80.5243f, -200.4216f, -74.7223f, 78.7932f, + -37.6075f, -106.1347f, -177.1898f, 12.7187f, -117.0868f, -224.7555f, 18.0710f, + -3.9184f, -42.1867f, -96.2393f, -135.5441f, -300.7351f, -209.1140f, 3.3638f, + -127.2731f, -168.0130f, -23.6514f, -125.4722f, -275.0623f, -116.8249f, 78.4081f, + -0.3268f, -109.2929f, -235.6517f, -163.5220f, -72.4472f, 7.1522f, -14.1950f, + -201.5567f, -203.8994f, -147.8831f, -113.7655f, -70.6486f, -37.9403f, 10.4648f, + -61.9333f, -122.2785f, -205.0957f, -87.3765f, -199.0248f, -324.4658f, -76.9686f, + -114.1747f, -179.4460f, -22.8678f, -120.9749f, -219.5858f, -55.7430f, -137.0347f, + 416.5525f, 356.2247f, 246.4192f, 151.7590f, 80.9813f, 33.7425f, -87.5668f, + 232.7198f, 199.8298f, 232.8017f, 197.1352f, 122.7492f, 47.7377f, -18.8607f, + 307.4450f, 336.4361f, 172.1882f, -36.4639f, -118.2980f, 12.7783f, -74.1220f, + 100.4413f, 183.0223f, 131.6807f, 19.7279f, 5.8399f, 116.3680f, -36.1637f, + 115.0603f, 28.3727f, -46.6535f, 9.9458f, 14.2165f, 8.8947f, 42.1125f, + -11.0346f, -1.0867f, -12.6705f, 44.5022f, 8.2729f, 72.2938f, 41.9570f, + 188.4713f, 119.1476f, 5.8222f, -109.1441f, -124.7922f, 20.2470f, 37.4241f, + 88.4120f, 18.1026f, 44.8535f, 28.1015f, -53.1688f, 52.0384f, -48.7039f, + 7.0136f, -80.7959f, -218.2056f, -230.6367f, -196.4241f, -188.3921f, 125.5651f, + -223.0832f, -308.3413f, -371.4560f, -67.3406f, -172.4539f, -210.1611f, 44.0330f, + 70.5425f, 5.5613f, -121.1026f, -250.2220f, -391.0280f, -78.8702f, 62.0359f, + -53.2080f, -153.5175f, -168.9519f, -200.2387f, -356.0113f, -56.1841f, -8.4833f, + 28.1989f, -103.3445f, -275.6373f, -372.5401f, -62.2850f, 20.7805f, 129.8285f, + -131.8626f, -230.9837f, -332.7086f, -149.5865f, -154.3909f, 21.7068f, 17.3275f, + 16.7300f, -61.8863f, -181.1369f, -350.5149f, -246.6439f, -61.1861f, -114.9767f, + -62.9283f, -50.0990f, -128.3168f, -223.8037f, -188.6130f, -48.9473f, 4.2910f, + 397.1338f, 354.0856f, 410.7048f, 392.6840f, 265.0492f, 133.1239f, -39.9595f, + 140.3398f, 130.2926f, 612.1718f, 513.2461f, 282.4946f, 41.1820f, 3.7939f, + -25.5253f, 283.5953f, 206.7656f, 117.4847f, 85.9801f, 16.9447f, -106.7023f, + -199.2065f, 170.3263f, 280.7031f, 221.1866f, 139.8684f, 69.7774f, 44.7026f, + -218.6125f, 116.3745f, 51.8822f, -46.6960f, 133.6225f, 87.8249f, 5.3826f, + -351.2338f, -39.4894f, 84.6148f, 241.0717f, 156.3851f, 57.0277f, -22.5485f, + -16.1558f, 137.3482f, 31.9090f, -76.7114f, 15.3505f, 47.2591f, -65.0792f, + -82.6497f, 23.1536f, 174.7281f, 111.0391f, 165.1666f, 97.6276f, -66.0758f, + -144.8786f, -188.8722f, -232.9240f, 11.8115f, -15.8240f, 97.1230f, 8.4134f, + -145.3324f, -253.9705f, -310.2223f, 186.1852f, 173.7029f, 84.4147f, -31.0347f, + -137.6416f, 107.5353f, 6.4667f, -172.8744f, -362.7197f, 36.0251f, 7.3423f, + -273.1752f, -271.7551f, 168.5304f, 103.1478f, -19.2394f, -121.0773f, 71.0605f, + -382.1200f, -84.7432f, -167.9304f, -156.0550f, 39.5436f, 102.1275f, 28.0496f, + -362.7133f, -347.0801f, -139.5875f, -5.2563f, 181.0231f, 147.5667f, 92.1709f, + -322.5983f, 22.0118f, 11.8984f, -116.7982f, -140.8088f, -50.1710f, -20.0495f, + -342.8153f, -116.9352f, -43.2698f, 29.1059f, 25.4655f, 14.1526f, 1.1041f, + 319.3257f, 143.9371f, -9.8398f, 138.1817f, 272.2951f, 230.7682f, -67.6844f, + 120.5561f, 82.8050f, 86.9118f, 293.3890f, 188.8921f, 54.7609f, -21.7199f, + 231.6328f, 148.0905f, 27.2085f, -3.2337f, 100.6721f, 70.2593f, 42.8315f, + 64.4154f, -17.9857f, 99.5439f, 116.0344f, 85.7395f, 106.6537f, 41.0177f, + 62.6236f, -27.4056f, -139.7237f, -70.5707f, 148.2318f, 128.9077f, 124.7000f, + -92.9236f, -144.0688f, -77.1586f, 288.9071f, 226.4347f, 124.6281f, -55.6669f, + 78.3503f, 42.4807f, -79.0042f, -178.3122f, 128.1446f, 107.8855f, -55.1806f, + 79.1238f, 66.4433f, 43.2504f, 16.2992f, 80.8281f, 140.7251f, 73.5809f, + -134.6119f, -155.8599f, -200.3194f, -90.9865f, 253.7969f, 164.9683f, 31.5576f, + -248.1197f, -375.5200f, -476.6351f, 180.7157f, 210.6575f, 79.8609f, 81.7351f, + 78.7261f, -9.7665f, -75.8617f, -194.4922f, -307.4282f, 75.4347f, -56.0501f, + -175.4331f, -210.0029f, 75.9892f, -41.3638f, -129.4197f, 26.7040f, 24.1293f, + -89.1388f, -186.3199f, -327.9780f, -225.0781f, 123.8019f, 49.8056f, 110.5614f, + -262.0009f, -365.9398f, -315.0958f, -44.6833f, 152.6366f, 130.9091f, -24.3555f, + 96.1914f, 0.9431f, -122.7709f, -265.0437f, -118.4077f, 70.4388f, -34.3324f, + -41.7155f, -106.2450f, 35.3080f, -77.1729f, -11.0485f, 113.3317f, -43.5801f, + 345.8234f, 448.9382f, 398.8093f, 278.1467f, 193.7783f, 109.9307f, -32.5084f, + 105.2215f, 192.0218f, 307.4095f, 251.2213f, 135.6460f, 27.1659f, 48.2501f, + 131.1255f, 248.6208f, 194.8135f, 35.9742f, -89.6413f, -70.1114f, 74.4933f, + 10.3277f, 157.1341f, 220.2146f, 132.8669f, 58.2022f, -4.2414f, 52.5998f, + -171.9997f, 219.1700f, 183.7592f, 79.7388f, -28.2743f, -72.7875f, 54.8047f, + -281.0813f, 5.4272f, 138.6439f, 89.6476f, 26.7423f, -52.0621f, 181.8158f, + 42.9908f, 121.1063f, 40.1449f, 4.6961f, 41.3091f, 11.3680f, 61.7374f, + -69.6739f, 44.0933f, 62.9511f, 55.3414f, 47.1718f, 45.0520f, 10.5398f, + -254.2462f, -161.6377f, -252.0311f, -59.3082f, -64.1228f, -5.1355f, -167.6060f, + -249.7012f, -368.7658f, -266.1853f, -40.5172f, -31.5949f, 20.3852f, -73.7292f, + -259.0964f, -63.9727f, -123.4555f, -266.6797f, -372.6790f, -79.9634f, -32.2913f, + -237.8991f, -261.1591f, -67.3100f, -201.9258f, -271.1355f, 110.5556f, -31.4253f, + -252.1870f, -59.5241f, -149.7008f, -264.8359f, -95.9333f, -15.7623f, -55.9292f, + -291.6127f, -310.8436f, -291.0997f, -152.3425f, -38.1903f, 16.9302f, 107.5521f, + -234.1635f, -77.8775f, -155.4929f, -169.1375f, -170.1633f, -210.0618f, 12.2871f, + -432.5516f, -222.0327f, -146.7204f, -103.4423f, -49.3643f, -8.0516f, 0.3778f, + 330.7150f, 223.7578f, 120.2566f, 152.9689f, 119.1688f, 39.3462f, 21.3169f, + 106.4649f, 114.2936f, 78.3297f, 104.4772f, 135.1724f, 78.5670f, 48.1339f, + 284.0033f, 187.5895f, 88.2418f, 0.6583f, -25.3445f, -53.7671f, 63.9802f, + 106.5275f, 81.1295f, 67.7705f, 114.2483f, 4.6206f, 98.6728f, 68.0557f, + 132.7267f, 80.9311f, 70.2013f, 34.2614f, 45.4356f, 17.9487f, 185.5185f, + -179.6926f, -64.9953f, -11.8397f, 5.1401f, 42.9932f, 67.5337f, 154.7699f, + 53.6060f, 34.2805f, 16.7478f, -53.4059f, -36.7348f, 13.1978f, 110.7422f, + 37.6082f, -5.5267f, 88.1530f, 15.7336f, 24.4194f, 27.1976f, 50.6641f, + -182.5485f, -287.0959f, -395.1311f, -458.4781f, -119.8993f, 119.0388f, -26.2634f, + -239.2084f, -359.3420f, -447.6111f, -221.6196f, -3.2312f, 35.8538f, -9.6860f, + -70.9599f, -105.8073f, -192.0091f, -294.5047f, -334.6240f, 111.9638f, -29.3527f, + -193.0902f, -307.5872f, -268.9553f, -266.8591f, -276.8985f, 53.4395f, -127.3159f, + -112.3830f, -214.7503f, -352.5892f, -431.6330f, 130.6462f, 125.3650f, -24.3701f, + -138.4310f, -254.9568f, -325.5955f, -173.9416f, 0.3136f, 147.4202f, -59.5469f, + -63.4081f, -119.3462f, -237.6156f, -366.1194f, -116.1935f, 96.5096f, -74.8714f, + -91.5009f, -186.5192f, -95.3213f, -190.6698f, -103.7853f, 133.5730f, -129.6124f +}; + +/*-------------------------------------------------------------------* + * AMR-WB ISF codebook - 46bits, 2 stages, 1st stage common with the + * 36bit codebook,5 splits in the 2nd stage + * + * codebook vector dimension number of vectors + * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + * 2_1 3 64 + * 2_2 3 128 + * 2_3 3 128 + * 2_4 3 32 + * 2_5 4 32 + *-------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------* + * 2nd stage, 1st split: ISF0 to ISF2 + *-------------------------------------------------------------------*/ + +const float dico21_isf_46b[] = +{ + 128.4688f, 159.8148f, 97.2755f, + -12.9836f, 197.1542f, 62.3669f, + -11.1370f, -5.4038f, 227.1786f, + -102.5247f, 49.5302f, 138.2452f, + 56.6014f, 92.4597f, 68.2462f, + -59.4614f, 95.8021f, 47.7671f, + 10.6214f, 16.4206f, 132.7432f, + -33.0052f, -36.4880f, 121.6274f, + 111.3621f, 86.8573f, -60.9301f, + 18.4019f, -16.9460f, -196.8595f, + 91.2159f, 47.1568f, 150.3417f, + 40.7444f, -123.8314f, 17.6656f, + 68.7560f, 76.0870f, 3.0834f, + 40.5189f, -22.9558f, -36.8239f, + 68.9463f, 20.8592f, 75.1641f, + -13.4297f, -49.7472f, 59.4394f, + 222.6512f, 108.2263f, -13.1594f, + -26.2678f, -128.5232f, -249.6796f, + -61.3770f, -106.3253f, 180.3803f, + -69.2195f, -180.5594f, 77.3840f, + 125.7118f, 69.8739f, 44.7696f, + -150.6344f, 66.9866f, 7.4132f, + 7.5039f, -4.7150f, 76.2746f, + -46.9159f, -98.2953f, 78.4325f, + 118.5603f, 14.1695f, -131.2373f, + -50.1565f, -86.1739f, -148.3825f, + 66.6965f, -72.1903f, 115.4583f, + -94.5599f, -121.9918f, 8.8523f, + 77.1679f, 15.2443f, 6.1163f, + -1.0987f, -69.2605f, -43.3316f, + 43.3928f, -36.3404f, 29.4998f, + -36.0829f, -87.1134f, 1.6094f, + 69.0548f, 158.6352f, -17.3680f, + -65.7580f, 148.4039f, -58.1224f, + -1.4207f, 106.6547f, 129.4115f, + -163.9787f, 200.5753f, 108.3887f, + 8.0981f, 96.4962f, 18.4523f, + -22.7513f, 51.0308f, -0.8203f, + -1.3389f, 52.2067f, 70.5057f, + -56.5316f, 15.5148f, 68.5082f, + 73.6822f, 28.9345f, -56.5083f, + -10.5212f, -17.6820f, -126.8611f, + 144.6737f, -44.4661f, -8.2446f, + -32.2712f, -161.9950f, -67.5138f, + 29.9266f, 37.2667f, -20.0451f, + -15.7787f, -11.7016f, -26.2432f, + 27.7648f, 34.4647f, 33.4065f, + -13.8614f, -38.4420f, 5.6107f, + 27.0098f, 76.8588f, -130.2875f, + -76.5280f, 30.9527f, -90.1727f, + -135.8326f, -53.3710f, 85.3346f, + -137.4852f, -34.8750f, -33.3215f, + 18.2807f, 78.3958f, -50.7970f, + -64.5101f, 14.5083f, -5.6925f, + -16.6084f, 1.0141f, 33.5889f, + -63.0082f, -42.0433f, 31.0393f, + 32.2577f, 8.3123f, -92.4112f, + -31.6346f, -58.2893f, -92.9305f, + 58.7086f, -72.6659f, -98.0877f, + -72.8089f, -97.1838f, -63.2264f, + -7.5866f, 25.6299f, -54.3822f, + -10.3321f, -19.4552f, -70.7729f, + 9.4725f, 4.3403f, 0.0721f, + -50.7563f, -41.0679f, -38.2745f +}; + +/*-------------------------------------------------------------------* + * 2nd stage, 2nd split: ISF3 to ISF5 + *-------------------------------------------------------------------*/ + +const float dico22_isf_46b[] = +{ + -49.5271f, 121.1295f, 16.4769f, + -94.4022f, 76.8061f, 2.1280f, + -58.8683f, 32.7926f, -6.6703f, + -83.7461f, 49.5749f, -58.1205f, + -96.5332f, -51.1816f, 62.2310f, + -104.6874f, -104.4218f, -36.9709f, + -84.8023f, 0.4441f, -31.0082f, + -105.8907f, -31.0867f, -72.0962f, + -17.4561f, 170.2726f, 62.0341f, + 64.3231f, 77.6492f, 152.6545f, + -13.0558f, 31.6496f, 73.1381f, + -25.9540f, -16.3235f, 138.6579f, + -116.2904f, -22.1347f, 133.9606f, + -42.0923f, -209.9028f, 88.4509f, + -56.0897f, -9.1734f, 75.5450f, + 68.7883f, -157.0452f, 33.8343f, + 20.5838f, 115.6837f, 9.8136f, + -32.8948f, 98.7358f, -40.4656f, + -22.8099f, 41.1383f, -49.3496f, + -66.1700f, 67.9190f, -122.8227f, + -18.8196f, 17.0630f, -114.9884f, + -64.0458f, -162.7084f, -94.5118f, + -54.2084f, 1.0923f, -75.9526f, + -60.5415f, -80.9324f, -82.4130f, + 46.5760f, 125.8621f, 83.1458f, + 129.9934f, 19.7027f, 148.2803f, + 92.6546f, 96.4434f, -0.8040f, + 181.9977f, -6.0791f, 78.6212f, + 93.0392f, -99.5781f, -41.6073f, + 26.0437f, -172.0070f, -58.1634f, + 47.8475f, -34.2895f, -54.2498f, + 34.4187f, -96.6345f, -28.5027f, + -15.8270f, 90.1190f, 65.2787f, + -24.1274f, 60.7006f, 6.3059f, + -25.2307f, 6.3412f, 30.0794f, + -26.6845f, -0.7965f, -24.5917f, + -59.0614f, -117.3599f, 62.4002f, + -7.0821f, -130.0555f, 20.9710f, + -21.7086f, -36.6794f, 1.9468f, + 0.6440f, -74.2564f, 5.5161f, + 35.9276f, 57.9971f, 81.4502f, + 42.2272f, 3.3575f, 106.2218f, + 42.1565f, 13.6719f, 43.0135f, + 55.6116f, -33.1310f, 56.8126f, + 18.4410f, -61.4055f, 109.0841f, + 1.0223f, -125.1248f, 96.1657f, + 16.9404f, -28.1707f, 26.5748f, + 33.5245f, -84.6827f, 52.6704f, + 14.2066f, 54.8716f, 30.7506f, + 21.9479f, 68.4119f, -19.0589f, + 10.1034f, 17.7161f, 1.1122f, + 28.3594f, 21.5207f, -39.3190f, + 42.6619f, -71.6784f, -94.4716f, + -1.6345f, -110.6804f, -94.5938f, + 18.7091f, -26.5385f, -18.5676f, + -2.2267f, -59.7051f, -47.6606f, + 63.0633f, 76.6895f, 37.6845f, + 90.5993f, 31.2041f, 74.2520f, + 64.4418f, 37.7231f, 4.2748f, + 100.9151f, -12.1708f, 27.5607f, + 104.1606f, -30.0584f, -35.7097f, + 121.5339f, -81.6812f, 34.1503f, + 59.3840f, -5.5457f, -8.5514f, + 58.5319f, -58.3782f, 3.4649f, + -126.3823f, 217.4185f, 72.9956f, + -149.8116f, 119.9919f, 17.7920f, + -98.1555f, 10.6050f, 30.1117f, + -142.4950f, 30.1718f, -20.4500f, + -188.3500f, -32.7229f, 62.5055f, + -165.4842f, -201.2336f, -25.1871f, + -114.8346f, -46.6803f, -1.4401f, + -185.9166f, -45.3806f, -42.6756f, + -37.7442f, 124.2892f, 142.7720f, + 41.5423f, 244.7676f, 173.7613f, + -74.1037f, 46.8818f, 112.0588f, + -57.0922f, 25.5056f, 241.9654f, + -166.9268f, 94.6864f, 141.8443f, + -141.0368f, -145.0649f, 168.9254f, + -135.5530f, 39.8468f, 65.4743f, + -245.6494f, 76.1803f, -5.6309f, + -25.5608f, 185.7902f, -18.2246f, + -116.1471f, 125.0659f, -65.5997f, + -21.6448f, 139.2267f, -103.0516f, + -152.7089f, 32.1737f, -111.7466f, + -19.9673f, -12.1771f, -217.1499f, + -69.4452f, -156.0378f, -228.9529f, + -79.9513f, -19.3186f, -140.5787f, + -134.0792f, -92.8863f, -131.5222f, + 85.7696f, 178.6823f, 22.5404f, + 219.0179f, 182.4547f, 100.9819f, + 132.7898f, 105.4102f, -65.5694f, + 175.6583f, 30.2382f, -109.3055f, + 23.2833f, 65.0492f, -161.3234f, + 51.9178f, -98.2708f, -192.0347f, + 84.2797f, 61.1831f, -113.4513f, + 110.0580f, 0.1775f, -193.4730f, + -88.3674f, 114.5595f, 71.3481f, + -61.4713f, 52.7833f, 47.8295f, + -61.8477f, -23.0151f, 15.1016f, + -52.0862f, -46.0690f, -37.7005f, + -129.6202f, -120.6827f, 44.2216f, + -62.4412f, -165.8667f, -2.2683f, + -58.1508f, -82.2449f, 9.3842f, + -31.2569f, -108.3441f, -35.0348f, + -4.4143f, 48.6610f, 132.2242f, + 50.8942f, -27.6676f, 181.6500f, + 2.0066f, -17.6839f, 71.9731f, + 92.7139f, -37.1637f, 98.9732f, + -54.3785f, -76.9789f, 115.8870f, + -7.4354f, -117.3479f, 199.5254f, + -24.6757f, -59.5165f, 54.3134f, + 97.6902f, -113.0194f, 131.1002f, + 48.4163f, 132.4722f, -58.7820f, + 13.3327f, 68.6117f, -81.0715f, + 66.7414f, 64.6961f, -45.2427f, + 36.7779f, 14.7160f, -89.5910f, + 29.2181f, -25.5238f, -132.3077f, + -30.5052f, -80.0320f, -150.5560f, + 0.1157f, -11.7322f, -63.8467f, + -21.6912f, -43.0765f, -94.6223f, + 125.3290f, 95.1208f, 75.9759f, + 197.4010f, 92.9319f, -0.5012f, + 123.8246f, 45.4969f, 25.5317f, + 120.7415f, 34.4155f, -28.8961f, + 176.6600f, -20.0903f, -19.4091f, + 130.6288f, -84.9368f, -113.4633f, + 82.2281f, 16.0388f, -59.4614f, + 93.1589f, -21.5846f, -101.7248f +}; + +/*-------------------------------------------------------------------* + * 2nd stage, 3rd split: ISF6 to ISF8 + *-------------------------------------------------------------------*/ + +const float dico23_isf_46b[] = +{ + -3.8995f, 58.9472f, 140.2168f, + 53.1422f, 116.3810f, 87.0383f, + 99.7094f, -40.4441f, 113.1331f, + 165.1496f, 2.2135f, 71.5223f, + -105.3934f, -104.9144f, -38.2897f, + -20.3247f, -32.1811f, 5.1214f, + -32.0250f, -106.9634f, -37.7452f, + 35.0256f, -95.9288f, -28.2073f, + -116.9343f, -27.2704f, 164.5334f, + -34.2352f, 142.6884f, 167.9453f, + 72.9835f, -124.0776f, 148.8355f, + 148.2748f, 14.5359f, 190.7047f, + -145.5305f, -123.4847f, 30.8224f, + -120.2600f, -39.3306f, 2.0939f, + -52.9049f, -176.3645f, 3.0609f, + 27.9487f, -164.3167f, -60.3281f, + 70.4088f, 66.5042f, -47.2043f, + 24.2507f, 69.1997f, -15.5014f, + 127.5028f, 31.2976f, -40.8233f, + 96.9136f, 102.7271f, -1.9768f, + -65.7818f, -70.8663f, -86.5155f, + -0.6444f, -8.8675f, -61.8361f, + -5.3369f, -58.3089f, -47.3390f, + 46.4765f, -35.6284f, -57.4718f, + 46.3328f, 129.6813f, -59.6592f, + 18.9988f, 118.4842f, 13.3515f, + 172.5430f, -21.3132f, -26.8827f, + 84.7525f, 177.2668f, 22.5077f, + -140.2432f, -73.0634f, -146.3583f, + -16.3786f, 19.6063f, -107.1305f, + -3.0698f, -104.1769f, -97.1330f, + 33.2378f, -33.4660f, -134.9635f, + -29.8971f, -15.7433f, 134.7990f, + 34.9346f, 52.2504f, 85.7197f, + 60.8752f, -31.2562f, 62.5970f, + 42.3279f, 15.7348f, 45.3299f, + -61.8761f, -80.5864f, 11.3831f, + 1.9118f, -12.4255f, 68.2023f, + -25.4049f, -61.6688f, 57.1412f, + 21.3127f, -30.3874f, 28.3554f, + -44.5637f, -86.8534f, 137.9897f, + -18.2977f, 31.6219f, 82.2796f, + 19.0573f, -58.8750f, 104.6892f, + 41.1433f, 1.5028f, 117.9977f, + -102.7489f, -51.4207f, 71.3300f, + -59.0984f, -10.9389f, 78.5554f, + -69.1486f, -120.0273f, 65.0256f, + 39.6252f, -86.2109f, 50.9690f, + 29.0714f, 22.6919f, -38.4256f, + 12.6360f, 17.2986f, 5.2183f, + 75.9445f, 11.6720f, -55.4942f, + 66.2898f, 37.5939f, 3.0594f, + -53.0062f, -46.4272f, -35.4140f, + -25.4219f, 2.9542f, -21.2949f, + 1.3392f, -73.4502f, 4.6640f, + 17.5926f, -24.6153f, -19.1614f, + 58.2567f, -8.0154f, -7.3521f, + 9.4616f, 56.2212f, 37.1474f, + 99.2497f, -8.5999f, 23.5678f, + 62.8908f, 76.5199f, 37.4883f, + -61.5740f, -23.6494f, 18.8743f, + -27.4404f, 12.7151f, 31.8660f, + -8.8214f, -125.3200f, 22.5806f, + 60.3707f, -57.3931f, 1.9729f, + -142.0781f, 128.1134f, 29.9265f, + -8.1434f, 177.0072f, 67.7176f, + -42.2467f, 31.9985f, 246.1330f, + 143.5303f, 102.5801f, 81.3050f, + -117.3709f, -24.3191f, -68.7836f, + -80.1727f, 55.9021f, -61.6700f, + -65.9167f, -159.9841f, -103.0851f, + 100.4774f, -105.1623f, -39.0393f, + -248.4434f, 113.0562f, -0.9632f, + -114.2012f, 244.7349f, 67.3892f, + -149.2039f, -141.9386f, 151.3480f, + 96.8171f, 204.6967f, 174.6282f, + -203.4799f, -43.3805f, -41.7327f, + -154.4080f, 46.2418f, -107.0591f, + -133.7993f, -265.7036f, -48.9596f, + -67.3323f, -174.6485f, -259.0245f, + 29.4362f, 57.7183f, -143.2330f, + -30.9358f, 102.7735f, -36.8946f, + 97.2809f, 57.7730f, -111.7326f, + 148.5371f, 105.7429f, -63.3760f, + -55.6062f, -1.6898f, -72.6741f, + -22.0825f, 43.4697f, -48.9841f, + -13.6583f, -42.0695f, -99.1267f, + 39.0227f, 11.1441f, -94.4170f, + -31.1674f, 118.4450f, -103.1298f, + -30.5761f, 181.1050f, -22.4168f, + 96.8625f, -8.6867f, -192.7743f, + 258.0970f, 258.6485f, 17.2359f, + -75.4867f, -15.7399f, -128.9883f, + -69.4209f, 56.4875f, -131.4587f, + -35.1219f, -77.9249f, -156.1559f, + -15.4754f, -8.8922f, -194.7119f, + -74.8584f, 44.6175f, 122.9601f, + -15.9046f, 95.4389f, 74.2532f, + 34.5640f, -37.7631f, 189.4453f, + 93.9878f, 31.0970f, 82.8675f, + -96.2834f, 15.6201f, 33.9921f, + -60.9930f, 57.5930f, 52.2667f, + -0.7661f, -130.2809f, 93.4385f, + 120.2708f, -79.2677f, 42.9508f, + -179.2200f, 97.8633f, 164.7641f, + -85.0375f, 121.2092f, 89.0752f, + -33.4305f, -135.1092f, 255.3923f, + 71.7349f, 68.5372f, 165.8218f, + -187.7999f, -24.7305f, 65.9037f, + -136.4161f, 45.6197f, 73.4184f, + -48.8887f, -218.9293f, 120.9648f, + 61.8728f, -162.4253f, 36.5784f, + 17.9416f, 66.9736f, -75.1315f, + -24.6266f, 61.4069f, 5.3953f, + 100.0199f, -13.7281f, -105.7749f, + 125.9485f, 48.0431f, 20.6117f, + -83.4273f, 1.6803f, -29.7397f, + -60.9733f, 33.6154f, -6.9071f, + 49.9381f, -77.0001f, -90.5842f, + 103.7070f, -35.1051f, -38.3706f, + -120.2797f, 129.5670f, -56.7507f, + -51.1815f, 120.2600f, 22.5398f, + 198.7324f, 23.1592f, -132.3752f, + 219.6951f, 76.6881f, -5.4836f, + -147.6706f, 39.1117f, -18.2240f, + -91.4913f, 78.8627f, 0.3161f, + 40.5908f, -105.4075f, -192.5737f, + 124.6250f, -81.8382f, -127.0619f +}; + +/*-------------------------------------------------------------------* + * 2nd stage, 4th split: ISF9 to ISF11 + *-------------------------------------------------------------------*/ + +const float dico24_isf_46b[] = +{ + -30.8071f, -34.8458f, -1.7377f, + -66.7509f, 30.0385f, -82.3340f, + 62.4748f, -75.5700f, 38.3392f, + 47.0287f, -40.0671f, 126.1063f, + 12.5178f, -8.7146f, -50.3954f, + 27.9620f, 30.3537f, -104.7235f, + 71.0260f, -29.6231f, -25.7014f, + 120.7753f, 38.6709f, -56.4990f, + -89.5313f, -61.4613f, -32.9542f, + -149.7260f, 38.4143f, -27.8365f, + -35.1587f, -137.6189f, 4.6136f, + -110.8198f, -69.6633f, 69.4652f, + -25.4794f, -48.9702f, -64.6927f, + -34.0250f, -68.5378f, -137.1167f, + 16.3769f, -77.3935f, -18.8382f, + 60.1539f, -54.6626f, -95.0395f, + -29.9828f, 6.8644f, 42.3138f, + -15.0985f, 138.6659f, 35.6532f, + 34.1357f, 3.3162f, 60.3957f, + -1.5046f, 61.8542f, 93.5327f, + 49.8233f, 37.2486f, -21.0923f, + 2.6462f, 96.2433f, -48.4645f, + 100.8559f, 5.8835f, 34.9436f, + 80.3813f, 84.4933f, 38.3143f, + -78.4639f, 3.3495f, 7.0416f, + -121.9442f, 90.8917f, 79.7252f, + -15.2997f, -67.8455f, 60.6317f, + -56.1035f, -3.5687f, 110.7510f, + -22.2741f, 27.4204f, -26.9833f, + -61.1362f, 73.0974f, 7.1390f, + 21.0362f, -11.6205f, 9.0680f, + 9.3252f, 52.8599f, 21.3451f +}; + +/*-------------------------------------------------------------------* + * 2nd stage, 1st split: ISF12 to ISF15 + *-------------------------------------------------------------------*/ + +const float dico25_isf_46b[] = +{ + 65.8574f, 55.5896f, -46.5520f, 44.9019f, + 80.4838f, -7.7875f, 36.7110f, 88.1867f, + -41.5522f, 122.0924f, -8.3769f, 6.2406f, + -24.0605f, 63.0705f, 27.8308f, 99.4548f, + -34.8725f, 39.6270f, -72.1743f, 48.7995f, + 28.2859f, -11.6999f, -78.4246f, 134.1911f, + -100.6717f, 12.7337f, -3.2716f, 31.4897f, + -40.5514f, -60.1846f, 28.1000f, 115.5554f, + 56.1050f, -26.6471f, -104.7202f, -9.7237f, + 31.5196f, -30.3722f, -34.0636f, 41.4375f, + 8.5013f, 60.4295f, -72.4835f, -46.4772f, + -18.1378f, -10.8741f, 10.5206f, 35.6699f, + -44.7247f, -14.6405f, -68.4296f, -12.8925f, + -36.6233f, -86.8592f, -73.8785f, 47.7951f, + -51.6319f, -46.3776f, -74.4907f, -105.4981f, + -67.2817f, -67.7186f, 6.9193f, -16.9668f, + 108.8168f, 52.7624f, -16.3049f, -50.0846f, + 72.9801f, -33.7268f, 89.4150f, -54.0673f, + 62.1588f, 93.8928f, 54.7414f, 17.8328f, + 26.7626f, 9.6218f, 88.5287f, 29.9594f, + 8.1440f, 44.9198f, 5.0806f, 2.9996f, + 26.4759f, -96.7328f, 49.0444f, 31.6496f, + -58.6349f, 53.6024f, 80.8924f, -3.3883f, + -60.0341f, -51.9482f, 112.9073f, 26.0056f, + 55.9483f, -14.6255f, -33.5049f, -127.3506f, + 70.1847f, -12.4499f, 7.3368f, -8.8635f, + 10.1728f, 65.7077f, 45.2101f, -90.9790f, + -12.5750f, -10.0652f, 45.9762f, -30.2995f, + 1.2805f, -3.2898f, -17.5766f, -44.9828f, + 22.1316f, -84.0894f, -21.1065f, -32.5923f, + -81.6581f, 43.6873f, -8.6894f, -65.0775f, + -35.4129f, -58.9663f, 65.8078f, -102.2045f +}; + +/*-------------------------------------------------------------------* + * AMR-WB ISF codebook - 36bits, 2 stages, 1st stage common with the + * 46bit codebook,3 splits in the 2nd stage + * + * codebook vector dimension number of vectors + * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + * 2_1 5 128 + * 2_2 4 128 + * 2_3 7 64 + *-------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------* + * 2nd stage, 1st split: ISF0 to ISF4 + *-------------------------------------------------------------------*/ + +const float dico21_isf_36b[] = +{ + -20.3147f, -37.6762f, 82.8575f, 122.9161f, -28.4468f, + 31.9756f, -79.5400f, 141.6557f, 53.2923f, -77.0688f, + -49.3360f, -129.1711f, 71.5448f, 85.1944f, 55.7117f, + -19.1147f, -16.1797f, 217.6729f, 89.8943f, 28.1868f, + 0.9668f, -28.5091f, 63.7145f, 147.3305f, 86.3104f, + 52.0605f, 43.3415f, 108.6263f, 83.9071f, -42.8628f, + -39.7734f, -7.6796f, 110.7755f, 44.0677f, 106.4663f, + 32.7239f, 124.4301f, 113.4192f, 7.2217f, 33.0503f, + -9.5746f, -1.9619f, 48.6607f, 51.4268f, -79.8193f, + -14.9729f, -2.0174f, 111.5604f, -3.5774f, -139.2041f, + -54.5000f, -100.1092f, 35.8796f, 45.5500f, -73.7805f, + -56.2694f, 74.4424f, 122.2707f, 20.1155f, -38.3887f, + 65.2094f, -3.9808f, 17.2638f, 96.6362f, 14.0115f, + 148.8982f, 77.1199f, 93.1280f, 28.7596f, 2.2577f, + 14.8324f, -159.4414f, 11.4260f, -1.0211f, -33.2422f, + 35.9112f, 103.8106f, 61.4044f, -9.7034f, -78.2548f, + 62.7658f, -47.4034f, 27.3267f, 32.6865f, -54.7569f, + -6.2693f, -33.7779f, 43.5591f, -36.6678f, -73.8111f, + -104.9376f, -105.4944f, 137.0911f, 41.7979f, -9.4558f, + -26.6750f, -26.3288f, 192.3279f, -40.3915f, -60.3539f, + -20.5168f, -51.3274f, 24.2191f, 47.5655f, 3.7810f, + 52.7448f, 32.7149f, 110.3630f, -21.5464f, -46.7397f, + -4.6471f, -85.4498f, 129.3530f, -31.6973f, 65.0658f, + 85.9795f, -53.2356f, 57.2992f, -67.2997f, -16.4516f, + 54.7607f, -37.1454f, -42.4738f, -34.5633f, -75.7294f, + 0.0517f, -0.6519f, -1.3703f, -12.9917f, -148.9960f, + -25.8564f, -84.6818f, 59.5151f, -72.5006f, -156.8837f, + 95.5045f, 42.2665f, 60.9475f, -54.5273f, -154.2295f, + 44.2810f, -53.2856f, -76.4082f, 42.9736f, -9.5286f, + 83.7851f, 46.2184f, 4.1979f, -25.1575f, -51.0520f, + -43.1590f, -111.8518f, -2.3420f, -129.5042f, 6.3083f, + 36.5568f, 37.9981f, 30.8304f, -113.4959f, -79.9345f, + -1.8493f, -15.3605f, -7.7093f, 98.5986f, -37.6177f, + 29.8557f, 67.8956f, 39.3578f, 63.5122f, 23.6349f, + -27.0502f, -93.1902f, -21.6230f, 155.8476f, 2.5165f, + -44.7515f, 124.6855f, 64.1401f, 107.4525f, 76.4296f, + -5.6913f, 14.2025f, -18.3757f, 129.1303f, 47.2448f, + 88.4045f, 81.8179f, 106.0131f, 126.8375f, 71.9790f, + 5.1288f, -31.2676f, -85.3474f, 183.8293f, 137.8851f, + 112.3553f, 147.7620f, 6.3634f, -19.8307f, 97.9225f, + 68.1479f, 45.1480f, 20.4456f, 58.0360f, -109.0384f, + 91.7441f, 107.7617f, 15.1212f, 47.0576f, -18.7769f, + 0.0359f, -42.2360f, -42.2471f, 94.1364f, -132.5071f, + -36.3673f, 208.5491f, 17.4150f, 13.0281f, -33.9693f, + 75.8679f, 58.1435f, -27.7181f, 158.0312f, -17.2012f, + 159.6027f, 144.6236f, 31.6370f, -72.6323f, -59.9622f, + 9.6094f, -39.8213f, -175.1189f, 48.5059f, -67.6102f, + 8.4503f, 159.5329f, -43.0075f, -121.1605f, -83.4178f, + -10.0988f, 8.8687f, -32.4219f, 44.4166f, 5.5756f, + -42.8299f, 63.9306f, 20.2856f, 86.9213f, -32.1874f, + 14.3835f, -9.6605f, -102.7732f, 119.7146f, -5.8143f, + -181.8677f, 162.2914f, 114.1354f, 64.3820f, -7.2207f, + 11.2529f, -7.2901f, -66.7670f, 60.6365f, 71.2140f, + 69.9911f, 56.0744f, -10.7183f, 90.0489f, 100.9538f, + -40.2531f, -96.6451f, -154.5512f, 92.9078f, 43.9867f, + 146.6528f, -60.2643f, -42.7063f, -1.4891f, 60.9280f, + 38.2143f, 33.0628f, -113.9071f, -1.8860f, -48.5082f, + 45.4740f, 54.2829f, -45.4768f, -38.2865f, -114.7585f, + -5.4061f, -32.4176f, -108.6457f, -45.8426f, -147.6796f, + 41.4813f, 12.9066f, -41.5456f, -134.2382f, -189.2112f, + 46.4330f, 6.8074f, -160.9846f, 53.8969f, 64.9889f, + 149.8519f, 39.6080f, -79.5860f, 34.3934f, -61.0983f, + -47.2568f, -110.8652f, -117.2089f, -0.3717f, -64.7306f, + 109.4393f, 12.8368f, -59.4424f, -122.1797f, -31.4694f, + -14.4126f, 8.5189f, 89.4622f, 59.7035f, 14.3509f, + -23.3690f, -32.3486f, 92.0827f, -3.3169f, -16.0022f, + -66.1460f, -89.0215f, 49.1022f, -7.9295f, 141.6034f, + -91.8393f, 6.6528f, 142.3305f, -60.9383f, 61.1140f, + -9.9035f, -11.7998f, 27.9396f, 56.3528f, 60.7524f, + 59.7717f, -10.3224f, 100.1088f, 37.9471f, 56.4210f, + -8.0706f, -14.3273f, 18.7969f, -25.3479f, 97.6871f, + 24.5711f, 30.0075f, 106.4596f, -49.8085f, 48.5911f, + -50.4430f, -10.2232f, 15.4334f, 3.6211f, -45.0851f, + -2.3100f, 32.1923f, 14.7250f, -35.3260f, -71.2667f, + -131.2863f, -5.1029f, 11.0382f, 61.7451f, 35.4884f, + -11.6345f, 94.0117f, 53.4418f, -66.3264f, -6.6649f, + 57.0155f, 5.4850f, -4.4053f, 12.7554f, 23.6955f, + 74.8564f, 77.0331f, 21.2315f, -32.6182f, 33.2036f, + 9.1670f, -78.1914f, -30.2862f, -11.1652f, 54.5347f, + 47.7388f, 92.4139f, 41.3020f, -133.3741f, 53.0528f, + -22.2909f, -55.2830f, -33.2798f, -6.2896f, -28.8257f, + -23.1116f, -35.0033f, -3.2927f, -72.9685f, -7.7727f, + -82.3073f, -104.1028f, 84.5118f, -69.8221f, -43.1637f, + -19.5349f, -2.7976f, 85.8117f, -104.2825f, -27.2739f, + -22.1902f, -16.4648f, -6.6730f, -5.7920f, 27.7237f, + 12.5658f, 8.3566f, 24.7755f, -53.6096f, 12.7618f, + -53.5741f, -68.1802f, 40.6279f, -26.4454f, 38.0614f, + -26.1757f, -16.7503f, 52.0974f, -117.6298f, 86.4284f, + -45.3502f, -78.0491f, -31.6007f, -35.9389f, -106.1265f, + -24.8954f, -15.9989f, -21.2401f, -95.2454f, -86.1251f, + -112.2460f, -94.4001f, -19.4652f, -33.9923f, -34.6433f, + -95.7000f, 92.3440f, 39.8654f, -64.8912f, -115.0483f, + 25.8969f, 9.4794f, -63.2644f, -27.6289f, 36.9308f, + 25.6901f, 52.9741f, -35.3425f, -86.0458f, -14.2567f, + -38.4101f, -62.7105f, -86.5748f, -73.4519f, 11.4446f, + -7.0262f, 6.9787f, -7.4983f, -161.9427f, 3.4520f, + 19.1677f, 23.8207f, 38.9733f, 15.3764f, -21.7743f, + -43.1688f, 31.9400f, 52.7685f, -11.9674f, 20.1452f, + -35.0128f, -59.7929f, -36.1783f, 73.7702f, 71.2205f, + -83.5945f, 115.1128f, 46.5742f, -28.7420f, 110.8292f, + 0.6347f, 53.5489f, 14.3686f, 18.4025f, 71.1819f, + 35.9728f, 45.7217f, 71.9726f, -20.7319f, 145.8423f, + -8.1019f, -5.6290f, -13.8278f, 53.1928f, 152.8343f, + 57.0881f, 50.3240f, -64.1728f, -11.0774f, 129.9089f, + 36.0925f, 31.0887f, -32.6698f, 39.1693f, -52.3060f, + -3.1405f, 84.8560f, -12.4226f, 1.0655f, -18.3673f, + -58.9719f, 98.0129f, -83.8334f, 55.3139f, 35.7679f, + -87.3652f, 121.2513f, -67.0447f, -107.5562f, 38.2622f, + 62.0513f, 60.4638f, -69.1208f, 43.6854f, 20.7579f, + 79.9694f, 10.7071f, 3.2196f, -93.6621f, 75.1450f, + 66.1122f, 46.9324f, -124.5950f, -78.3322f, 41.3915f, + 4.3229f, 13.8757f, -33.6575f, -92.7601f, 177.5551f, + -42.5067f, -60.2164f, -63.5331f, 67.8862f, -21.5990f, + -14.9811f, 12.6046f, -39.5598f, -30.2755f, -22.9980f, + -80.2668f, -125.5028f, -37.7023f, 27.0213f, 31.0364f, + -121.0989f, 17.0095f, 6.9604f, -72.1639f, 13.2205f, + -45.0105f, -7.6587f, -57.9626f, -15.4159f, 79.2983f, + -11.3128f, 60.2083f, -11.6157f, -61.5281f, 64.7932f, + -17.6502f, -51.3289f, -123.9766f, -9.4275f, 141.7024f, + -64.4806f, -80.0931f, -43.9064f, -86.7513f, 103.4672f, + -12.6910f, -17.1597f, -58.5736f, 21.2452f, -75.2569f, + -2.3195f, -14.7279f, -99.6098f, -65.8753f, -44.8940f, + -103.7556f, 33.9613f, -73.7263f, -13.9038f, -66.1526f, + -23.2670f, -33.9743f, -103.9167f, -170.2949f, -66.2644f, + -26.4354f, -31.7233f, -108.7190f, 9.2282f, 14.7962f, + -9.0340f, -7.5327f, -60.7032f, -100.1385f, 55.1481f, + -23.7530f, -88.2969f, -220.5980f, -68.4569f, 27.6805f, + 3.3643f, -11.1758f, -92.5898f, -201.1381f, 102.8789f +}; + +/*-------------------------------------------------------------------* + * 2nd stage, 2nd split: ISF5 to ISF8 + *-------------------------------------------------------------------*/ + +const float dico22_isf_36b[] = +{ + -116.4826f, -2.3267f, 37.0276f, 11.9585f, + -83.2536f, -34.0855f, -47.5833f, 101.8900f, + 1.6666f, -19.3089f, 81.2133f, 5.5915f, + -50.2199f, -43.0204f, 11.8773f, 45.9389f, + -83.6736f, 100.7533f, 42.9626f, -91.7069f, + -15.8879f, -6.8432f, -49.2481f, 46.8567f, + 40.2748f, 25.3026f, 49.6150f, -14.6042f, + 49.1020f, -13.9172f, -9.5624f, 9.9442f, + -53.7549f, -26.0755f, -108.5515f, -72.7670f, + -64.1594f, -75.7696f, -78.4742f, 30.5700f, + -82.2540f, -34.1100f, -20.0480f, -86.1655f, + -68.0474f, -31.0203f, -36.5615f, -15.3976f, + 8.8102f, -2.3252f, -61.3614f, -93.8460f, + 8.4465f, -43.1451f, -59.6402f, -26.4485f, + 57.8873f, -1.8283f, -0.9150f, -58.1355f, + -0.3760f, -52.6396f, -15.1757f, -69.7872f, + 26.6552f, 140.6710f, -45.5320f, -5.9904f, + 53.5205f, 18.1777f, -108.7393f, 57.1700f, + 53.1281f, 101.4898f, 52.8254f, 25.2450f, + 23.9310f, 45.2712f, -17.5932f, 37.8318f, + 90.1549f, 147.8806f, 33.8829f, -46.8215f, + 132.2255f, 69.0079f, -106.1068f, 1.3402f, + 103.9284f, 60.8167f, 10.9874f, -26.8688f, + 101.6619f, 32.7808f, -33.2101f, 33.7802f, + -103.9522f, 60.0893f, -100.1459f, -71.1324f, + -6.7456f, -25.3835f, -118.9063f, -2.2439f, + -15.7859f, 68.4583f, -59.0835f, -70.2552f, + -10.4160f, 10.4323f, -34.1781f, -24.5999f, + 47.1747f, 44.4596f, -64.8288f, -183.2536f, + 62.0332f, -25.7788f, -126.3596f, -90.0926f, + 83.7341f, 59.4975f, -55.2472f, -82.6595f, + 53.3482f, 14.1273f, -71.7379f, -20.0471f, + -110.1113f, -92.4130f, 15.5809f, 3.7302f, + -18.8013f, -91.7902f, -14.6105f, 98.1369f, + -21.2096f, -126.2513f, 53.1438f, 11.3308f, + -34.3197f, -67.9178f, 83.0592f, 77.2733f, + -152.4262f, 38.6895f, -24.6967f, -146.6594f, + 41.7355f, -66.1454f, -64.2312f, 165.7005f, + 27.0772f, -43.2220f, 54.9943f, -65.1872f, + 28.8899f, -50.2606f, 25.5035f, 56.2652f, + -137.7163f, -80.7691f, -80.0014f, -42.7037f, + -62.3651f, -150.7820f, -138.8149f, 38.1900f, + -68.7802f, -192.5785f, -7.8749f, -55.9578f, + -98.5983f, -168.6083f, -0.7398f, 84.2329f, + -35.1656f, -67.9774f, -65.6374f, -160.6224f, + 4.9446f, -110.8514f, -89.3759f, -62.4133f, + -34.1288f, -108.8451f, 13.3702f, -98.1466f, + -29.4614f, -102.8405f, -22.8325f, -16.4528f, + 163.9105f, 20.5337f, -82.4577f, -139.6505f, + 149.8660f, -13.6016f, -146.1693f, 154.5116f, + 26.6673f, -89.2330f, 126.1283f, -0.6475f, + 65.0738f, -119.9143f, 75.1351f, 75.9130f, + 179.3039f, 128.5647f, -1.9070f, -129.8349f, + 146.4228f, 30.7058f, -2.7357f, 122.1955f, + 110.1199f, -48.4108f, 78.0568f, -35.8715f, + 105.8916f, -63.1848f, -27.3019f, 70.1234f, + -61.4940f, -116.2433f, -200.7709f, -120.8167f, + 22.5673f, -63.6047f, -213.1464f, 7.0661f, + 48.3577f, -141.9964f, 65.3628f, -93.1012f, + 32.5991f, -160.4748f, -45.5903f, 37.6377f, + 54.6730f, -43.7561f, -151.6335f, -243.7797f, + 101.1397f, -52.0073f, -123.8756f, 16.0909f, + 63.7439f, -50.8957f, -25.0308f, -130.5887f, + 88.2969f, -64.3814f, -48.5324f, -43.0123f, + -181.9705f, -24.0096f, 2.3863f, 89.5185f, + -59.5915f, 80.1714f, -56.6992f, 94.5562f, + -62.1659f, 18.9433f, 76.0160f, 57.8553f, + -22.4665f, 10.7743f, 12.0918f, 108.9830f, + -118.1671f, 72.3971f, 109.1443f, -1.3839f, + -23.8459f, 76.9232f, 22.9444f, 33.4435f, + -44.5975f, 47.9554f, 65.6020f, -20.3018f, + 13.6440f, 14.2271f, 38.9794f, 49.0774f, + -159.0490f, 40.0263f, -30.2347f, -15.6526f, + -132.0447f, -0.4802f, -133.5965f, 61.0673f, + -69.7882f, 40.8409f, -13.3128f, -38.0654f, + -72.3667f, 32.7089f, -13.7936f, 42.2054f, + -51.7645f, 41.9187f, -35.3954f, -139.3463f, + -70.4106f, 21.2248f, -89.5260f, 9.2659f, + -17.3511f, 18.5094f, 18.3073f, -71.0465f, + -25.6477f, 4.9120f, 17.7504f, 1.3904f, + -132.5788f, 97.9003f, 25.0501f, 88.4524f, + -16.3421f, 39.3618f, -136.5657f, 107.5423f, + -38.7664f, 155.3425f, 55.5880f, 47.1198f, + 43.2628f, 4.6910f, -39.9914f, 101.5498f, + 0.0830f, 197.2389f, 101.6377f, -36.9070f, + 62.8279f, 111.5018f, -37.6259f, 87.5036f, + -1.4618f, 80.2742f, 122.5196f, 12.8147f, + 65.1409f, 54.2334f, 34.3093f, 79.7332f, + -91.6271f, 123.5048f, -23.6092f, -9.5877f, + -3.2208f, -58.6010f, -121.8443f, 78.4266f, + -14.0112f, 114.0430f, 23.9902f, -40.4777f, + -15.4729f, 68.1635f, -63.4068f, 16.5519f, + -8.1780f, 157.1093f, -11.2800f, -137.0649f, + 8.0606f, 59.4657f, -140.5838f, -36.3320f, + 22.2676f, 74.5499f, 82.8755f, -76.6792f, + 29.5054f, 61.7793f, -8.0867f, -27.0956f, + -128.1797f, -72.1649f, 129.2723f, 46.4323f, + -20.7709f, 111.3353f, 22.0263f, 131.4695f, + -41.9162f, -9.2182f, 158.1064f, 11.2798f, + -7.1545f, 53.6140f, 106.2812f, 108.0610f, + -99.5471f, 8.6443f, 67.7713f, -74.7187f, + 115.0857f, 125.6656f, 126.8208f, 118.1528f, + 8.3489f, -10.6246f, 129.8214f, -69.4937f, + 46.4587f, 5.2711f, 105.7244f, 50.4485f, + -177.6754f, -70.1548f, 45.4547f, -74.5236f, + -88.7724f, 24.0424f, -57.8465f, 204.7888f, + -68.8890f, -112.1224f, 110.3182f, -61.1447f, + -94.7905f, 5.0186f, 77.6790f, 167.9779f, + -23.0125f, -19.1513f, 44.8958f, -142.4394f, + 28.0225f, -67.2659f, -53.6584f, 36.2990f, + -54.0239f, -49.3550f, 55.1522f, -32.8946f, + 2.0792f, -48.4861f, 14.9542f, -7.9957f, + -100.8337f, 121.3744f, 234.8044f, 83.3187f, + 36.5393f, 50.8425f, -23.7400f, 196.1698f, + -0.3059f, -61.1762f, 189.5078f, 122.4017f, + 57.0232f, -28.8934f, 61.7134f, 134.6930f, + 107.9555f, 52.8736f, 109.5032f, -22.1311f, + 191.2912f, 98.4213f, 38.7853f, 16.9729f, + 104.1509f, -28.9315f, 167.6925f, 40.9011f, + 108.7356f, -8.7976f, 46.5837f, 36.6080f, + -211.7768f, 190.5028f, 100.4753f, -45.0833f, + -32.7791f, -95.3684f, -171.2339f, 186.7766f, + -44.0395f, -212.9286f, 151.2602f, 39.5958f, + -37.2152f, -119.5092f, 43.4460f, 194.5965f, + 37.2023f, 64.8673f, 8.5289f, -117.5366f, + 163.8890f, -5.9760f, -22.5312f, -30.3817f, + 105.4272f, 11.3735f, 47.6228f, -110.1422f, + 62.3479f, -93.6059f, 19.4353f, -14.9112f +}; + +/*-------------------------------------------------------------------* + * 2nd stage, 3rd split: ISF9 to ISF15 + *-------------------------------------------------------------------*/ + +const float dico23_isf_36b[] = +{ + 31.6601f, -7.0021f, 26.7324f, -10.6919f, -47.7440f, -109.3316f, -1.6793f, + 17.6152f, -69.1639f, 81.7745f, -11.6557f, -53.0002f, -28.8501f, 51.3155f, + -17.3392f, 39.6296f, -29.4208f, -34.2716f, -18.7475f, -53.4279f, -21.0682f, + -95.6211f, -11.0108f, 24.5639f, -6.9345f, -43.8606f, -40.3930f, 22.5841f, + -30.9469f, -2.2484f, 85.8968f, -25.2118f, 44.4649f, -13.7549f, -19.6283f, + 42.5807f, -25.3893f, 55.9790f, -44.6039f, 50.3451f, 29.5180f, 49.0040f, + 64.7422f, 35.0105f, -24.0120f, -94.6131f, 72.4785f, -29.0560f, -16.8213f, + -17.7762f, -36.1097f, 19.1423f, -88.8131f, 9.4121f, -60.6212f, 15.2182f, + 26.1194f, 33.0214f, 38.6243f, -16.4898f, 20.5108f, -71.7754f, -109.7775f, + 55.6133f, -47.5797f, 0.0746f, 8.1716f, -55.6639f, -5.8260f, -6.7666f, + 86.9148f, 36.0665f, -8.0422f, -18.6522f, -31.9936f, -5.4779f, -65.2340f, + 20.0656f, -14.5303f, -94.7449f, -11.7982f, -35.2031f, 6.9138f, -22.0461f, + 20.9060f, 41.0458f, 29.0299f, 33.4933f, 27.0675f, 5.1646f, -39.4529f, + 76.7175f, 28.2216f, -34.8562f, 16.7304f, 25.2291f, 7.4912f, 15.3906f, + 47.1053f, 13.3625f, 50.9902f, -31.9588f, 9.8596f, 83.1329f, -61.0081f, + 39.4355f, -39.6936f, -53.1235f, -8.1282f, 22.3882f, 83.7131f, 8.6440f, + 13.9302f, -48.4179f, 80.1925f, 79.6573f, 22.8321f, -61.0888f, -32.5848f, + 32.2601f, -45.5857f, 53.4300f, 53.4773f, 33.0895f, 45.4420f, 17.2865f, + -36.0406f, -57.6566f, -26.6841f, 4.2674f, -39.8452f, -76.9236f, -85.9930f, + -29.8696f, -72.1261f, -22.6802f, 51.6689f, -10.3407f, -71.6716f, 33.3209f, + -2.6190f, -11.9459f, -0.7138f, 9.1651f, 80.0695f, -58.7987f, 3.7833f, + -10.6521f, -14.2910f, -1.7854f, -6.9002f, 114.1547f, 51.0851f, 0.4936f, + 45.5988f, -65.6262f, 3.5076f, -36.3037f, 31.3412f, -22.8916f, -48.6823f, + -71.1623f, -95.4642f, 38.3287f, -9.4939f, 52.9002f, -8.4421f, 36.7283f, + 86.2675f, 37.9505f, 41.2317f, 16.4269f, 16.7260f, -62.6682f, 32.6168f, + 9.9181f, -25.0994f, -8.3770f, 2.2985f, 5.3157f, -6.0428f, 60.1555f, + 49.0247f, 6.0545f, -54.7919f, 58.6261f, -3.9732f, -80.9565f, -44.3777f, + 30.6734f, -24.5101f, -82.4513f, -27.4901f, -10.8146f, -84.7650f, 64.6334f, + 18.0553f, 14.7350f, -8.7675f, 109.6707f, 51.4393f, -24.1075f, 42.7732f, + 43.6601f, 21.1278f, -43.7223f, -36.3814f, 81.3688f, 10.3561f, 115.5857f, + 44.7304f, 4.0203f, -57.4008f, 16.1462f, 84.4927f, 16.5958f, -107.7931f, + 19.3887f, -44.8683f, -99.3061f, 65.1051f, 45.6203f, -0.6984f, 23.6828f, + 6.4828f, 56.2769f, 13.3073f, -28.0424f, -72.7066f, -58.5212f, 106.1769f, + -11.1674f, -25.7849f, -34.9574f, -36.9812f, -58.1843f, 50.2182f, 98.0044f, + 47.6759f, 0.1786f, -19.4605f, -91.2611f, -35.5267f, 13.8815f, 10.2127f, + -41.1350f, -39.8329f, -34.1829f, -47.4437f, -91.9939f, -2.6788f, -4.2821f, + -79.6033f, 42.6213f, 2.0653f, -74.4526f, 41.0602f, -5.7905f, 63.6539f, + -31.4071f, 12.4383f, -9.2647f, -81.5461f, 16.0430f, 114.6936f, 27.3863f, + -41.2719f, -36.6253f, -79.4997f, -46.2467f, 46.8034f, -19.4146f, -14.6126f, + -31.9554f, -93.9975f, 17.8233f, -51.0152f, -11.4389f, 58.4455f, -21.6241f, + 12.9670f, 60.7166f, 46.9564f, -34.6928f, -3.1553f, 2.7762f, 24.2978f, + 83.1108f, 31.8670f, 23.6533f, 6.8663f, -63.0785f, 56.1031f, 59.2073f, + 11.6877f, 51.3190f, 25.3083f, -33.9761f, -99.5482f, -6.6294f, -41.7488f, + -3.1041f, 33.3329f, -24.8851f, 20.0947f, -63.3399f, 87.2565f, -20.6208f, + -52.2549f, 102.0059f, 26.9280f, -22.0208f, 85.2782f, 28.3108f, -43.2782f, + 0.8584f, 60.5987f, -44.2357f, -33.9700f, 19.1247f, 33.1631f, -10.8275f, + -63.5371f, 16.2471f, -0.2828f, -76.6458f, 2.8322f, 15.2373f, -95.8412f, + 5.5912f, -53.4989f, -30.8518f, 4.1365f, -62.3116f, 79.0018f, -114.5611f, + -36.8596f, 12.7812f, 81.1609f, 39.2434f, 21.9162f, -17.2064f, 127.1804f, + -30.4279f, -15.8549f, 90.5057f, 4.9324f, -55.6202f, 88.7264f, 31.2457f, + -6.4338f, -33.9992f, 78.4675f, 12.7460f, -51.8920f, 5.7002f, -71.3454f, + -22.6305f, -75.0886f, -18.4430f, 71.6854f, -49.9613f, 51.9112f, 38.5919f, + -80.1990f, 4.2373f, -60.6613f, 30.4453f, 20.4006f, 28.0162f, 55.1546f, + -96.2887f, 10.3433f, 38.5883f, 59.1444f, 23.2247f, 45.0000f, -24.9305f, + -30.9055f, -18.2692f, -6.1201f, -5.6460f, 2.1550f, 18.2502f, -16.8166f, + -28.0966f, -69.3654f, -10.5762f, 63.4193f, 43.8444f, 16.6643f, -67.9380f, + -68.3269f, 93.1501f, 72.8030f, 27.6125f, -21.1484f, -73.4926f, -29.7929f, + -88.0045f, 91.0304f, 15.1885f, -15.1144f, -61.6391f, 47.5526f, 17.2017f, + -10.0973f, 16.8435f, 32.7608f, 50.6231f, -36.3173f, -19.8196f, 8.7833f, + 1.1920f, 35.7643f, -58.4480f, 53.1925f, -71.1458f, -22.3426f, 37.8118f, + -51.2779f, 69.9477f, -30.3236f, 31.2621f, 35.5419f, -64.6025f, 35.1224f, + -0.6572f, 57.9364f, 5.6749f, 50.6782f, 25.3456f, 68.4492f, 45.6955f, + -53.8176f, 44.6419f, -53.4407f, 51.5645f, 1.3456f, -4.0462f, -72.5604f, + 54.6610f, -1.6150f, -14.3009f, 99.1775f, -24.2467f, 36.0557f, -42.7052f +}; + +/*-------------------------------------------------------------------* + * AMR-WB ISF codebook for SID - 28bits, 1 stage, 5 splits + * + * codebook vector dimension number of vectors + * ~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + * 1 2 64 + * 2 3 64 + * 3 3 64 + * 4 4 32 + * 5 4 32 + *-------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------* + * 1st stage, 1st split: ISF0 to ISF1 + *-------------------------------------------------------------------*/ + +const float dico1_ns_28b[64*2] = +{ + -105.0619f, -262.8448f, + -86.6322f, -209.7320f, + -91.1931f, -168.0481f, + -53.8753f, -176.1473f, + -82.7923f, -129.2635f, + -75.0845f, -93.9859f, + -33.9476f, -90.3333f, + -74.4463f, -50.0451f, + -27.3422f, -41.3458f, + -64.0658f, -2.5361f, + 28.8179f, -70.0786f, + 10.5059f, -12.8463f, + -39.9581f, 28.7359f, + -63.4034f, 44.7503f, + -36.8732f, 67.0368f, + -2.3563f, 50.6058f, + -55.9412f, 91.2822f, + 5.5577f, 85.1171f, + -25.2586f, 105.6009f, + 34.3216f, 71.1726f, + -48.3043f, 133.1605f, + -17.0366f, 148.8321f, + 14.8305f, 130.6908f, + 45.5592f, 106.8464f, + -43.7865f, 177.4889f, + 28.9675f, 168.2081f, + -1.7812f, 190.4731f, + 68.4806f, 149.8876f, + -32.5396f, 218.9960f, + 47.8438f, 206.6539f, + 8.1960f, 234.8430f, + 89.3668f, 188.0221f, + 90.4035f, 118.3064f, + 88.4263f, 237.5410f, + 117.3136f, 145.4498f, + 82.0645f, 73.1093f, + 119.3943f, 103.4796f, + 128.2321f, 184.8528f, + 149.1563f, 129.2199f, + 144.9058f, 51.5776f, + 54.4305f, 22.6608f, + 142.5451f, 8.2812f, + 97.4966f, -31.8767f, + 173.0963f, 84.9898f, + 188.5170f, 42.9719f, + 166.5772f, 162.2136f, + 226.1740f, 86.5496f, + 202.2992f, 129.9512f, + 223.9365f, 175.1483f, + 177.6235f, 206.6174f, + 267.4435f, 128.4469f, + 129.8694f, 226.5438f, + 232.5047f, 231.7147f, + 182.8960f, 252.1132f, + 297.7026f, 201.9668f, + 127.2108f, 277.0716f, + 189.5906f, 309.6084f, + 50.8926f, 267.2207f, + 262.1367f, 287.8791f, + 138.4480f, 342.2196f, + 34.3804f, 314.8025f, + -25.4771f, 275.9066f, + -13.5804f, 397.0122f, + 103.9035f, 438.8237f +}; + +/*-------------------------------------------------------------------* + * 1st stage, 2ndt split: ISF2 to ISF4 + *-------------------------------------------------------------------*/ + +const float dico2_ns_28b[64*3] = +{ + -322.0252f, -345.3659f, -370.7835f, + -314.5226f, -178.1928f, -163.4712f, + -172.6074f, -171.2812f, -211.3224f, + -84.6538f, -225.6710f, -309.6982f, + -65.7865f, -173.3148f, -227.1618f, + -112.2154f, -192.0593f, -106.9376f, + -215.4487f, -115.9810f, -117.3159f, + -63.6069f, -129.9179f, -139.6890f, + -144.6460f, -90.4563f, -90.4457f, + -68.4568f, -140.0307f, -62.0772f, + -148.8729f, -8.2807f, -139.6018f, + -71.8488f, -61.9658f, -63.2677f, + -20.5518f, -74.4279f, -109.2530f, + 7.0237f, -104.2936f, -83.9866f, + -53.7369f, 23.9918f, -110.5212f, + 27.5927f, -37.1603f, -114.8537f, + 5.1437f, -60.8316f, -213.2375f, + -0.0302f, -32.5161f, -30.9893f, + 17.0532f, 37.8947f, -123.4512f, + 69.4656f, -20.4364f, -83.2673f, + 86.8486f, -101.9140f, -164.6497f, + 92.7595f, -46.0582f, -17.0665f, + 55.0807f, 56.5797f, -51.6089f, + 141.9268f, 31.5952f, -111.9348f, + 83.1350f, 25.3995f, 13.2634f, + -41.6305f, 36.7624f, -1.8806f, + 35.5619f, -11.1360f, 49.0468f, + -138.6944f, 20.1165f, -16.0470f, + -85.7227f, -29.5173f, 56.5419f, + -24.5306f, 39.2035f, 95.3233f, + -280.8913f, 17.3520f, 10.4723f, + -223.4287f, -48.5814f, 60.3781f, + -165.0790f, 52.0898f, 122.9863f, + -358.1462f, 27.5800f, 87.6394f, + -104.6460f, 124.2969f, 51.2676f, + -36.4609f, -74.1586f, 163.9110f, + -38.0255f, 47.6372f, 191.7725f, + -30.7896f, 123.7246f, 138.8302f, + 50.7064f, 39.0454f, 126.9589f, + 33.4334f, -114.5499f, 82.0810f, + 52.0289f, 100.6551f, 62.9260f, + 68.9398f, -28.6776f, 181.7511f, + 76.3353f, 117.0400f, 150.0834f, + 135.9951f, 8.5581f, 86.5077f, + 146.9219f, 71.3024f, 159.6375f, + 147.3144f, 111.7858f, 78.8838f, + 94.6612f, 83.2958f, 257.4856f, + 100.5727f, 220.5308f, 96.9196f, + 134.4751f, 159.3021f, -29.6067f, + 158.3509f, 171.9108f, 198.9399f, + 238.9283f, 150.3837f, 148.0492f, + 209.2346f, 237.2747f, 84.4977f, + -21.9723f, 227.3437f, 75.1847f, + 39.1823f, 202.0239f, 221.5619f, + -142.6753f, 174.8218f, 173.9311f, + 284.1931f, 135.5243f, 4.0420f, + 197.3545f, 139.2970f, 296.6173f, + 248.5921f, 227.1523f, 257.1579f, + 130.8344f, 201.7665f, 332.6679f, + 147.8451f, 316.0691f, 223.3704f, + -76.1983f, 342.8470f, 323.9619f, + 206.5931f, 276.1481f, 385.6192f, + 358.4664f, 283.4258f, 153.2502f, + 488.2212f, 389.4155f, 415.1465f +}; + +/*-------------------------------------------------------------------* + * 1st stage, 3rd split: ISF5 to ISF7 + *-------------------------------------------------------------------*/ + +const float dico3_ns_28b[64*3] = +{ + -314.4522f, -327.3454f, -302.2017f, + -203.9117f, -244.9068f, -323.6309f, + -186.2536f, -189.6962f, -235.4297f, + -115.3995f, -187.7246f, -247.4612f, + -142.8871f, -150.1942f, -153.3509f, + -72.7072f, -161.6552f, -154.8560f, + -92.6058f, -153.8863f, -41.3953f, + -98.5994f, -78.7129f, -107.5332f, + -23.9335f, -69.1898f, -172.7805f, + -32.7960f, -77.3107f, -77.6193f, + -69.7610f, -48.7327f, -12.2728f, + -28.2008f, -18.3660f, -63.7045f, + -116.3960f, -85.9584f, 84.0164f, + -24.9241f, -65.7832f, 98.1712f, + -51.8131f, 60.9599f, -23.0835f, + -11.5386f, -0.7831f, 49.5084f, + 20.9367f, 25.8838f, -24.0191f, + -91.0503f, 8.0161f, 98.1430f, + 81.8089f, -19.4694f, 12.5661f, + 12.6976f, 75.6776f, 53.0320f, + -45.8943f, -7.2062f, 185.7293f, + 78.8625f, 17.9396f, 120.6767f, + 99.9111f, 72.2135f, 20.5674f, + 13.7143f, 77.9979f, 152.4088f, + 78.0738f, 102.8484f, 94.6295f, + -84.5040f, 118.1050f, 114.7064f, + 50.0596f, 139.6647f, -0.1577f, + 7.5966f, 168.3675f, 112.1363f, + 87.3316f, 174.4695f, 109.2434f, + 143.4298f, 64.6162f, 83.1959f, + 155.2307f, 122.7478f, 124.7551f, + 149.4719f, 147.9446f, 29.2261f, + 108.3426f, 127.0695f, 180.3353f, + 153.8867f, 197.0929f, 130.5922f, + 98.1956f, 38.2729f, -83.1688f, + 175.9048f, 59.9165f, 174.8273f, + 220.7233f, 88.4354f, 29.6527f, + 183.5505f, 149.7702f, 195.9197f, + 248.2375f, 152.2900f, 108.7161f, + 92.6034f, 52.6123f, 242.1773f, + 133.7155f, 156.6441f, 253.6524f, + 129.4868f, 215.2826f, 202.4702f, + 50.8526f, 163.2149f, 231.3041f, + 207.4225f, 119.3517f, 287.7008f, + 284.9414f, 152.0429f, 226.6699f, + 194.1092f, 217.5607f, 272.9373f, + 115.7381f, 149.7147f, 341.2299f, + 110.4872f, 243.8135f, 296.4818f, + 49.2583f, 242.9759f, 185.7527f, + 218.4281f, 232.2570f, 184.3956f, + 149.3219f, 300.8763f, 240.4531f, + 280.7402f, 239.3506f, 291.1599f, + 210.7589f, 249.5308f, 362.4219f, + 201.8519f, 322.7530f, 312.7221f, + 267.0336f, 316.7373f, 236.0985f, + 293.8933f, 307.2101f, 334.8007f, + 364.5740f, 258.0872f, 136.8430f, + 271.0491f, 175.6599f, 414.3537f, + 219.3663f, 355.8581f, 410.6574f, + 321.8781f, 317.4617f, 431.4073f, + 295.9753f, 408.9221f, 344.4007f, + 445.2552f, 358.3636f, 347.1212f, + 405.7584f, 486.9081f, 556.9660f, + 579.1823f, 650.5953f, 732.6415f +}; + +/*-------------------------------------------------------------------* + * 1st stage, 4th split: ISF8 to ISF11 + *-------------------------------------------------------------------*/ + +const float dico4_ns_28b[32*4] = +{ + -303.1361f, -333.7803f, -347.8725f, -359.4826f, + -215.7523f, -238.3714f, -259.0660f, -289.4405f, + -125.2913f, -144.5697f, -186.1030f, -220.5702f, + 107.0201f, -62.5400f, -178.2959f, 78.3558f, + 103.6377f, 26.1626f, -62.5396f, -119.5691f, + -2.9518f, -82.1288f, 30.9020f, 106.1641f, + 63.5315f, 92.0127f, 120.0751f, 120.2205f, + 225.8191f, 123.6829f, 24.8449f, 116.4136f, + -3.5121f, 76.7992f, 133.5771f, 242.3746f, + 133.9970f, 90.5385f, 122.6116f, 242.8362f, + 67.7067f, 58.1366f, 214.2467f, 205.7587f, + 139.2159f, 144.6370f, 188.0780f, 146.8699f, + 52.7259f, 173.3530f, 190.5093f, 217.0651f, + 152.5843f, 183.9790f, 190.4016f, 255.0127f, + 89.0815f, 165.5783f, 224.8295f, 325.9805f, + 164.7109f, 145.4724f, 282.2096f, 266.3416f, + 115.0926f, 262.9259f, 270.8098f, 248.1893f, + 210.4561f, 232.8534f, 230.5395f, 175.4710f, + 185.5563f, 241.3006f, 257.2568f, 319.6433f, + 287.0131f, 201.7823f, 191.6938f, 262.7153f, + 234.9706f, 135.0743f, 100.3842f, 342.4814f, + 244.1460f, 248.1535f, 331.5106f, 281.3059f, + 283.8415f, 319.6996f, 272.8347f, 232.3501f, + 255.2254f, 187.9562f, 269.5668f, 445.0594f, + 318.1439f, 297.7580f, 274.9042f, 354.5264f, + 198.0688f, 291.9682f, 350.7645f, 365.4872f, + 331.2469f, 333.9341f, 361.1275f, 306.5865f, + 252.3140f, 405.2271f, 344.4444f, 310.3618f, + 301.5996f, 329.9839f, 399.8752f, 449.5998f, + 442.5639f, 384.1796f, 319.3500f, 359.8945f, + 367.3365f, 417.2813f, 488.9795f, 508.7549f, + 620.4818f, 690.0919f, 671.0975f, 590.9387f +}; + +/*-------------------------------------------------------------------* + * 1st stage, 5th split: ISF12 to ISF15 + *-------------------------------------------------------------------*/ + +const float dico5_ns_28b[32*4] = +{ + -316.2941f, -343.3920f, -368.9643f, -99.0392f, + 97.0450f, 71.7080f, 262.1754f, 50.0767f, + 112.4468f, 274.7287f, 358.7211f, 38.6232f, + 257.1795f, 217.8952f, 258.6022f, 85.4104f, + 215.6079f, 228.7031f, 355.6118f, 81.4276f, + 218.4167f, 314.1638f, 296.3636f, 46.5526f, + 236.5851f, 302.2603f, 359.7074f, -54.3647f, + 305.5962f, 297.4161f, 292.2765f, 81.3061f, + 295.4005f, 276.4861f, 384.1555f, 21.9038f, + 212.3865f, 337.6641f, 394.4713f, 59.4888f, + 287.8841f, 272.8244f, 385.4754f, 116.6899f, + 301.1416f, 360.9641f, 343.2708f, 40.2882f, + 209.5407f, 306.5670f, 375.3650f, 158.1632f, + 260.4655f, 357.6203f, 312.8495f, 128.1323f, + 288.3843f, 275.2455f, 301.9735f, 171.2988f, + 321.4736f, 340.3829f, 387.3967f, 138.5811f, + 250.1021f, 392.3276f, 410.9932f, 144.0109f, + 282.6727f, 320.9480f, 370.8150f, 233.3823f, + 161.9622f, 255.8086f, 284.8333f, 188.2323f, + 393.9827f, 349.8717f, 309.8297f, 141.6719f, + 354.6675f, 313.7792f, 268.4562f, -9.8681f, + 396.7580f, 327.4283f, 395.0635f, 73.8789f, + 369.8889f, 434.5653f, 367.9579f, 86.8706f, + 356.9169f, 409.7761f, 383.1727f, 205.7493f, + 373.4236f, 385.5478f, 394.8253f, -47.0644f, + 305.1456f, 409.5952f, 437.7072f, 36.1164f, + 460.1152f, 411.4012f, 345.2657f, 18.4203f, + 438.6750f, 413.5906f, 461.8582f, 46.2207f, + 364.6111f, 379.8415f, 498.6693f, 139.3899f, + 433.1401f, 358.6805f, 429.9292f, 196.6537f, + 405.9484f, 502.2995f, 476.5874f, 123.6977f, + 527.5430f, 471.6736f, 394.4862f, 127.2615f +}; + + +const float * const lsf_means[2] = { means_wb_31bits_ma_lsf, means_nb_31bits_ma_lsf }; + +const lsp_unw_triplet p16_gamma0_92to1[16] = +{ + { 0.00000f, 1.19764f, -0.59173f }, + { -0.91173f, 1.79182f, -0.80921f }, + { -0.51779f, 1.44703f, -0.81871f }, + { -0.44862f, 1.36777f, -0.75103f }, + { -0.45150f, 1.30719f, -0.74220f }, + { -0.43157f, 1.21326f, -0.68538f }, + { -0.43606f, 1.21317f, -0.69131f }, + { -0.39200f, 1.04941f, -0.58674f }, + { -0.45208f, 1.10009f, -0.59175f }, + { -0.42553f, 0.99725f, -0.49992f }, + { -0.50168f, 1.07575f, -0.51401f }, + { -0.49800f, 1.06563f, -0.50592f }, + { -0.53101f, 1.16372f, -0.58033f }, + { -0.48744f, 1.07596f, -0.52531f }, + { -0.51899f, 1.04998f, -0.49495f }, + { -0.47730f, 0.90959f, 0.00000f } +}; + +const lsp_unw_triplet p16_gamma0_94to1[16] = +{ + { 0.00000f, 0.78925f, -0.38537f }, + { -0.57154f, 1.19486f, -0.54136f }, + { -0.33642f, 0.99096f, -0.56792f }, + { -0.29856f, 0.93785f, -0.51255f }, + { -0.29716f, 0.89303f, -0.50509f }, + { -0.28264f, 0.81530f, -0.46020f }, + { -0.27926f, 0.80997f, -0.46378f }, + { -0.25334f, 0.69596f, -0.38969f }, + { -0.29656f, 0.72916f, -0.38888f }, + { -0.27488f, 0.65949f, -0.32999f }, + { -0.32630f, 0.70913f, -0.33659f }, + { -0.33069f, 0.70668f, -0.33105f }, + { -0.35437f, 0.77582f, -0.38003f }, + { -0.31771f, 0.70752f, -0.34216f }, + { -0.35066f, 0.70177f, -0.31664f }, + { -0.33404f, 0.62528f, 0.00000f } +}; + +const float dico_lsf_abs_8b[256*M] = +{ + 377.3749f, 688.0079f, 1147.3799f, 1461.0438f, 1786.7794f, 2143.6711f, 2522.1946f, 2889.7402f, 3263.6023f, 3628.4624f, 4005.4351f, 4379.4170f, 4783.9556f, 5157.1753f, 5555.1797f, 5926.6816f, + 601.5123f, 1066.8242f, 1384.3585f, 1652.9448f, 1978.3910f, 2311.2676f, 2674.0537f, 3010.3896f, 3360.0623f, 3725.9336f, 4093.3335f, 4470.6431f, 4859.1006f, 5210.4717f, 5598.3716f, 5954.4204f, + 552.5036f, 859.7047f, 1355.2023f, 1624.9041f, 1887.5609f, 2173.1638f, 2540.7429f, 2926.8169f, 3323.2173f, 3680.7197f, 4008.3447f, 4330.8442f, 4692.8228f, 5033.9697f, 5443.3467f, 5875.4497f, + 459.4534f, 793.3189f, 1293.7278f, 1617.3970f, 1920.0642f, 2192.2153f, 2487.5627f, 2772.1514f, 3111.3823f, 3461.2671f, 3867.0176f, 4279.8550f, 4741.0664f, 5141.0181f, 5552.8237f, 5933.6934f, + 327.9834f, 430.4954f, 723.9031f, 1528.6172f, 1763.1125f, 2013.7936f, 2334.2153f, 2569.0334f, 3017.9436f, 3308.0610f, 3591.7820f, 3865.5430f, 4693.5786f, 5286.7646f, 5647.7036f, 5987.2305f, + 455.0753f, 606.0817f, 963.7564f, 1374.9937f, 1536.4897f, 1914.7618f, 2376.9631f, 2580.8184f, 2989.1501f, 3258.8386f, 3485.1460f, 3741.1270f, 4297.4912f, 5207.3779f, 5672.3818f, 5980.5322f, + 434.9507f, 558.8508f, 890.7061f, 1355.7625f, 1552.6155f, 1895.7960f, 2222.5579f, 2502.6079f, 2841.8738f, 3137.5264f, 3367.7336f, 3860.7769f, 4795.2554f, 5090.9370f, 5421.8218f, 5874.4287f, + 281.0164f, 404.5417f, 729.2898f, 997.1851f, 1699.8862f, 1961.3673f, 2255.7202f, 2540.9187f, 2804.4553f, 3057.1843f, 3750.2288f, 4340.9893f, 4716.8647f, 5002.7471f, 5477.2998f, 5965.7402f, + 372.2410f, 505.3570f, 762.3755f, 997.3586f, 1174.4255f, 1986.1741f, 2368.1367f, 2624.1733f, 3194.6084f, 3403.2793f, 3877.7622f, 4425.7676f, 4824.7837f, 5158.1606f, 5532.7466f, 5893.5483f, + 367.3766f, 501.1806f, 824.5358f, 1090.6857f, 1271.9792f, 1527.7137f, 2381.4382f, 2694.4634f, 2964.5359f, 3639.4832f, 3946.4038f, 4254.3916f, 4645.8076f, 5033.5396f, 5373.8735f, 5878.4385f, + 229.4505f, 352.5671f, 701.0831f, 1226.4518f, 1678.3601f, 1895.7949f, 2140.0664f, 2526.5515f, 3080.3391f, 3297.8284f, 3845.3987f, 4427.9785f, 4704.4551f, 4997.4155f, 5434.0698f, 5918.4785f, + 336.3082f, 516.7915f, 881.9847f, 1272.5824f, 1505.1870f, 1880.7520f, 2274.9458f, 2611.0083f, 3126.5256f, 3655.5332f, 4183.3877f, 4668.2993f, 5004.0029f, 5305.3491f, 5650.4985f, 5943.7383f, + 296.0867f, 469.6519f, 956.5997f, 1224.1262f, 1443.0049f, 1727.6880f, 2216.1677f, 2689.3677f, 3060.4456f, 3520.9438f, 3916.6050f, 4343.7954f, 4763.8906f, 5156.0132f, 5553.8115f, 5936.9634f, + 407.1503f, 577.5120f, 839.7361f, 1455.3907f, 1665.2137f, 1935.0054f, 2398.0537f, 2652.2605f, 3111.1831f, 3505.5962f, 3766.7554f, 4204.8730f, 4699.1631f, 4970.8652f, 5295.5962f, 5695.6919f, + 281.0083f, 361.8386f, 950.9102f, 1464.1158f, 1634.7019f, 1965.4950f, 2211.1406f, 2662.1055f, 2846.0122f, 3585.8884f, 4048.7148f, 4358.9150f, 4683.8755f, 5046.0908f, 5400.0859f, 5956.1040f, + 279.1811f, 393.9142f, 876.8306f, 1502.2417f, 1673.0590f, 2288.7161f, 2545.3674f, 3028.9507f, 3517.5840f, 3824.4246f, 4144.8486f, 4481.8140f, 4821.2769f, 5162.3975f, 5542.8560f, 5928.5854f, + 379.7892f, 500.9199f, 725.0223f, 998.7143f, 1179.6127f, 1771.9886f, 2775.4812f, 3136.8457f, 3378.6143f, 3674.0188f, 3946.3604f, 4184.4824f, 4521.5454f, 4934.8940f, 5315.5029f, 5759.7544f, + 317.4339f, 442.2628f, 778.7388f, 1167.8633f, 1356.1576f, 1578.5603f, 1840.1584f, 2870.7527f, 3236.1504f, 3502.7249f, 3876.3696f, 4100.5244f, 4650.2632f, 5235.1890f, 5665.2285f, 5999.0649f, + 350.2696f, 492.2163f, 763.0640f, 1264.7550f, 1515.0244f, 1755.7783f, 2489.3274f, 2898.6252f, 3143.1018f, 3643.0640f, 4035.0657f, 4255.0889f, 4641.7231f, 5138.5107f, 5557.1318f, 5920.2402f, + 301.3833f, 464.9852f, 762.3419f, 1012.2126f, 1803.5172f, 2192.4214f, 2651.6287f, 3013.6697f, 3251.3591f, 3539.4675f, 3946.3433f, 4469.3560f, 4890.7446f, 5200.4878f, 5509.6753f, 5910.2397f, + 253.1752f, 356.8990f, 630.3325f, 1163.1683f, 1528.6230f, 2023.4438f, 2488.6001f, 2745.5627f, 2933.7024f, 3237.4414f, 3976.9258f, 4415.2534f, 4789.9131f, 5194.3423f, 5714.6445f, 6032.4160f, + 265.1815f, 364.7549f, 590.0148f, 805.2595f, 1564.7582f, 2150.6536f, 2365.6501f, 2598.7876f, 2861.5334f, 3514.1265f, 4005.6328f, 4609.3091f, 4955.4478f, 5238.4116f, 5519.5884f, 5890.7925f, + 209.3544f, 313.1497f, 503.2642f, 949.4504f, 1729.7280f, 1912.6814f, 2117.5051f, 2498.6272f, 3284.6587f, 3810.8555f, 4105.0195f, 4349.5151f, 4770.3682f, 5210.2910f, 5585.1533f, 5970.3638f, + 302.3150f, 415.6502f, 684.1018f, 922.3598f, 1489.4418f, 2235.6252f, 2449.9773f, 2800.6938f, 3061.3721f, 3526.1001f, 3905.8174f, 4170.7891f, 4446.4209f, 4907.9937f, 5470.7158f, 5914.7261f, + 264.9068f, 366.4342f, 582.8182f, 790.8568f, 1619.4548f, 2034.0782f, 2337.6724f, 2632.1714f, 2933.2356f, 3430.1858f, 3815.0198f, 4276.3931f, 4748.3149f, 5164.0098f, 5553.3320f, 5974.9092f, + 249.6359f, 361.9234f, 581.9844f, 841.1097f, 1657.5543f, 2184.4114f, 2525.9739f, 2820.0503f, 3120.7190f, 3623.7678f, 4050.5435f, 4434.5742f, 4802.6782f, 5171.8438f, 5575.0068f, 5963.7402f, + 290.1085f, 404.2538f, 664.1223f, 878.2748f, 1237.1085f, 2237.4707f, 2497.5647f, 2957.7786f, 3289.3928f, 3626.5276f, 4190.9243f, 4594.6450f, 4981.7456f, 5283.5513f, 5617.1538f, 5938.3760f, + 182.7846f, 270.3831f, 490.2131f, 1070.2524f, 1674.5724f, 2092.4905f, 2524.1472f, 2929.3523f, 3334.8005f, 3712.0061f, 4101.2896f, 4475.7324f, 4866.1919f, 5231.7559f, 5606.4077f, 5960.9644f, + 286.7701f, 386.1487f, 577.4210f, 764.3087f, 1151.2404f, 2014.4502f, 2399.8547f, 2879.0371f, 3160.2502f, 3450.6274f, 3869.8240f, 4368.3618f, 4816.7861f, 5187.6450f, 5564.7231f, 5962.0386f, + 179.9538f, 266.0682f, 647.9122f, 1380.2810f, 1776.1240f, 2208.4592f, 2590.6843f, 2993.6758f, 3368.2034f, 3753.2156f, 4125.2124f, 4508.6050f, 4878.9932f, 5249.3291f, 5612.5049f, 5965.2134f, + 309.2416f, 434.7111f, 724.6614f, 936.5360f, 1264.9886f, 2272.1338f, 2548.4519f, 2904.0798f, 3313.4990f, 3579.7854f, 3914.5811f, 4297.5938f, 4756.9072f, 5163.2017f, 5592.2822f, 5943.7222f, + 256.9009f, 393.7155f, 769.3966f, 1200.9640f, 1774.4797f, 2307.9629f, 2794.6799f, 3165.9431f, 3507.7952f, 3840.5791f, 4142.8877f, 4453.5078f, 4790.6973f, 5142.6123f, 5530.5977f, 5923.2188f, + 394.1425f, 602.0079f, 934.5173f, 1352.9718f, 1813.9639f, 2172.5435f, 2603.7295f, 2963.9590f, 3335.2344f, 3732.0515f, 4120.0151f, 4487.9668f, 4877.6294f, 5238.9336f, 5596.1479f, 5939.6489f, + 373.0307f, 665.4328f, 1227.4684f, 1524.6017f, 1947.3784f, 2361.6384f, 2778.1921f, 3134.5396f, 3462.3992f, 3752.4592f, 4069.0352f, 4404.2720f, 4782.2241f, 5145.0581f, 5541.9980f, 5932.9136f, + 449.9942f, 814.1862f, 1344.2784f, 1682.7061f, 2086.3599f, 2486.9709f, 2916.1177f, 3265.9099f, 3616.3977f, 3919.6345f, 4218.5342f, 4519.2207f, 4857.5220f, 5193.5269f, 5573.7339f, 5934.5400f, + 531.4455f, 965.7403f, 1458.5353f, 1773.3784f, 2236.0146f, 2650.9109f, 3099.2871f, 3467.1567f, 3809.7056f, 4094.6472f, 4378.5811f, 4660.2471f, 4962.5078f, 5270.9863f, 5629.4160f, 5973.6450f, + 565.5986f, 1091.1300f, 1561.4944f, 1983.5482f, 2492.8821f, 2897.5085f, 3233.5361f, 3539.8831f, 3838.6494f, 4093.4460f, 4372.1924f, 4678.2251f, 4999.2646f, 5325.0371f, 5672.8887f, 5998.9990f, + 581.0623f, 976.0275f, 1447.0302f, 1779.9243f, 2148.2158f, 2543.8347f, 2979.5061f, 3373.6099f, 3796.8259f, 4164.8242f, 4510.5493f, 4853.5527f, 5175.6318f, 5465.3647f, 5763.2334f, 6050.6582f, + 429.4613f, 802.5781f, 1229.0529f, 1512.6678f, 1835.8625f, 2216.9915f, 2625.3999f, 2995.9927f, 3379.5146f, 3764.7837f, 4156.1382f, 4532.4570f, 4906.4678f, 5262.8960f, 5626.6519f, 5970.6504f, + 224.5468f, 328.6938f, 615.8844f, 1207.4470f, 1520.9565f, 1865.9806f, 2182.4731f, 2431.4897f, 3239.3486f, 3490.9065f, 3775.7139f, 4291.4312f, 4740.0815f, 5192.0786f, 5532.9302f, 5928.7236f, + 312.1133f, 424.3103f, 716.4448f, 921.9969f, 1244.5491f, 2017.9143f, 2248.4170f, 2840.0688f, 3138.9390f, 3399.7288f, 3723.3479f, 3999.6824f, 4582.2339f, 5148.5166f, 5631.8989f, 6000.7192f, + 373.5378f, 506.7356f, 789.6149f, 942.6201f, 1695.8035f, 2021.6426f, 2323.3867f, 2649.5979f, 2853.1729f, 3169.5815f, 3524.9375f, 3848.6399f, 4261.7319f, 4978.9668f, 5505.4004f, 5924.7939f, + 503.2296f, 724.8124f, 940.3833f, 1220.5646f, 1439.8641f, 1726.9827f, 2215.5464f, 2476.0925f, 2846.8127f, 3232.0950f, 3638.5989f, 3986.3333f, 4371.3052f, 5022.0664f, 5657.4897f, 6040.3452f, + 398.3355f, 530.8898f, 835.5377f, 1058.3699f, 1327.2036f, 1814.9178f, 2114.2439f, 2515.8892f, 2754.9077f, 3094.8794f, 3598.7061f, 3981.2385f, 4605.9160f, 5110.8364f, 5550.1899f, 5953.9600f, + 327.7583f, 454.8903f, 825.9029f, 1025.4349f, 1321.1567f, 1551.4836f, 1978.2037f, 2838.9021f, 3111.9041f, 3417.3940f, 3841.0564f, 4696.0547f, 5126.1641f, 5409.5347f, 5711.7163f, 5968.3394f, + 327.1260f, 431.3983f, 721.9533f, 871.1266f, 1507.7616f, 1847.8716f, 2144.9641f, 2491.1108f, 2702.0847f, 3483.1516f, 3917.5173f, 4254.1260f, 4704.4863f, 4981.6284f, 5450.1035f, 5937.7861f, + 443.5867f, 610.7686f, 818.9614f, 999.3525f, 1181.9182f, 1884.4948f, 2243.3950f, 2522.8867f, 2993.8594f, 3196.6631f, 3835.5020f, 4233.2568f, 4506.8604f, 4985.0249f, 5544.1382f, 5980.0083f, + 395.7788f, 582.9504f, 822.1151f, 1013.0453f, 1224.6812f, 1988.4263f, 2452.4744f, 2686.4263f, 2952.8831f, 3135.0867f, 3562.5471f, 4006.6929f, 4401.7471f, 5038.5654f, 5567.4189f, 5986.0850f, + 264.3071f, 372.0398f, 616.4940f, 842.1705f, 1350.0250f, 1822.1957f, 2165.8896f, 2662.2937f, 3055.4390f, 3502.6787f, 3923.4236f, 4352.6587f, 4772.5068f, 5158.1309f, 5573.9385f, 5972.6895f, + 218.7390f, 325.2024f, 635.0441f, 1103.4701f, 1636.4287f, 2070.2615f, 2274.2910f, 2453.2002f, 3069.4382f, 3615.7065f, 3980.0811f, 4484.8662f, 4848.6416f, 5093.7163f, 5522.6973f, 5907.4048f, + 260.0797f, 461.2137f, 1049.2261f, 1334.1865f, 1628.6233f, 2014.9823f, 2413.4802f, 2844.4973f, 3232.3040f, 3661.0122f, 4069.8274f, 4466.5210f, 4857.6553f, 5234.4463f, 5608.4517f, 5954.7920f, + 301.7969f, 406.3861f, 706.7324f, 1387.1207f, 1581.4719f, 2004.7585f, 2291.9421f, 2548.9978f, 3076.8755f, 3343.1306f, 3623.1770f, 4279.7432f, 4777.6563f, 5084.3960f, 5473.4536f, 5872.0615f, + 344.0269f, 472.3550f, 776.6819f, 1455.1270f, 1611.6870f, 2012.4386f, 2417.4033f, 2621.8564f, 3318.9663f, 3709.0132f, 3944.1958f, 4299.0293f, 4776.4038f, 5184.1089f, 5545.5454f, 5913.9531f, + 332.1463f, 433.0623f, 992.1605f, 1254.8217f, 1498.4819f, 1824.6357f, 2118.3374f, 2444.6484f, 2684.8369f, 2930.4683f, 3557.4851f, 4292.9014f, 4786.7251f, 5138.2168f, 5616.2739f, 5996.8369f, + 281.7202f, 372.7708f, 1074.7051f, 1443.0428f, 1687.6460f, 1980.7075f, 2275.4241f, 2632.2017f, 2848.1765f, 3118.7881f, 3628.5857f, 4522.9585f, 4876.2163f, 5177.2739f, 5600.6675f, 5960.9634f, + 412.0151f, 535.6881f, 768.8618f, 1462.2601f, 1789.1055f, 1947.8196f, 2224.6890f, 2447.9089f, 2834.6140f, 3472.6721f, 3729.8525f, 4008.2893f, 4525.7271f, 4822.9194f, 5204.6611f, 5895.0942f, + 263.8760f, 379.7789f, 825.0498f, 1113.1218f, 1465.8749f, 1846.7463f, 2146.0496f, 2487.2766f, 2845.8447f, 3388.4800f, 3883.8447f, 4440.7603f, 4867.0815f, 5214.7280f, 5535.8149f, 5906.9932f, + 409.8116f, 583.7237f, 859.1983f, 1172.0491f, 1377.6473f, 1984.8322f, 2361.7292f, 2688.9368f, 3238.6563f, 3542.6716f, 3944.3005f, 4441.0840f, 4881.1211f, 5224.6045f, 5604.3711f, 5909.3657f, + 318.0743f, 438.8244f, 852.9153f, 1061.4503f, 1290.7609f, 1552.5408f, 2053.1118f, 2373.2883f, 2926.1560f, 3452.9551f, 4098.6626f, 4585.2773f, 4967.0898f, 5271.2720f, 5644.6709f, 5961.9585f, + 370.3631f, 496.5860f, 932.6390f, 1213.4189f, 1452.6641f, 1803.1532f, 2092.2354f, 2607.5247f, 2883.8086f, 3112.1086f, 3687.5657f, 4525.1274f, 4846.9404f, 5130.0537f, 5416.4141f, 5804.5122f, + 247.8941f, 343.9862f, 751.6780f, 1526.2566f, 1712.5012f, 2038.0667f, 2324.0371f, 2727.9749f, 3005.8975f, 3378.9817f, 3858.2002f, 4339.2017f, 4716.4580f, 5125.0918f, 5564.3589f, 5969.7163f, + 297.6552f, 401.7544f, 891.9346f, 1380.2275f, 1540.3125f, 1782.6058f, 2009.2045f, 2614.2092f, 2899.5396f, 3379.9722f, 3804.1169f, 4284.8540f, 4696.3335f, 5118.4551f, 5525.9839f, 5934.2686f, + 226.1444f, 333.4511f, 682.9995f, 1307.4166f, 1554.1943f, 1849.3679f, 2116.3438f, 2756.3567f, 3204.3018f, 3540.4106f, 4002.1895f, 4402.7734f, 4796.4395f, 5192.6812f, 5600.6841f, 5960.1855f, + 196.3791f, 299.9716f, 572.3173f, 1201.8826f, 1804.7235f, 2012.0171f, 2264.7415f, 2790.3406f, 3272.6926f, 3668.4863f, 4063.0435f, 4442.4419f, 4810.5957f, 5156.0923f, 5512.8501f, 5900.7441f, + 280.1911f, 391.5190f, 705.9903f, 1435.5063f, 1588.2345f, 2116.5032f, 2357.1875f, 2670.7461f, 3299.0071f, 3507.9336f, 4044.3057f, 4591.9023f, 4981.4575f, 5281.1270f, 5654.7158f, 5949.9263f, + 262.5740f, 370.5089f, 654.7243f, 1278.9299f, 1847.3096f, 2087.3394f, 2553.8892f, 2887.8269f, 3254.0747f, 3810.6626f, 4258.4390f, 4528.8022f, 4872.9741f, 5206.0483f, 5565.2876f, 5918.5596f, + 193.6133f, 356.3127f, 1076.8109f, 1485.8608f, 1887.7994f, 2273.1333f, 2676.7832f, 3052.3513f, 3419.1294f, 3792.5024f, 4161.7036f, 4532.6431f, 4898.5176f, 5262.0498f, 5622.8901f, 5976.4863f, + 302.7377f, 409.7598f, 899.1851f, 1176.6501f, 1531.3615f, 1933.6494f, 2229.9561f, 2819.8936f, 3031.6248f, 3807.0129f, 4118.7495f, 4412.7339f, 4704.6758f, 5012.0190f, 5351.4160f, 5892.3232f, + 421.1889f, 587.3521f, 835.9208f, 1248.0127f, 1475.8882f, 1779.3772f, 2330.6294f, 2606.6780f, 3026.0417f, 3513.8035f, 3754.6023f, 4081.0518f, 4536.3438f, 4815.9336f, 5117.6392f, 5802.9902f, + 378.0719f, 722.0884f, 1327.5808f, 1665.8940f, 1954.7782f, 2238.9473f, 2608.8538f, 2958.7910f, 3341.5112f, 3721.2021f, 4095.8457f, 4457.6865f, 4843.8672f, 5212.5142f, 5589.5122f, 5945.3730f, + 468.4631f, 962.3222f, 1541.0238f, 1919.1746f, 2347.4365f, 2650.7366f, 2927.5945f, 3166.4202f, 3451.0664f, 3757.8477f, 4109.2383f, 4467.9443f, 4858.6045f, 5211.8428f, 5593.3311f, 5951.0137f, + 422.2508f, 845.8956f, 1495.2552f, 1811.3933f, 2128.1157f, 2371.2532f, 2656.0715f, 2942.9011f, 3294.5308f, 3652.0935f, 4031.2534f, 4399.2222f, 4801.9497f, 5163.3721f, 5559.4517f, 5934.4063f, + 423.1028f, 661.7286f, 991.1974f, 1204.3813f, 1472.8564f, 2003.0298f, 2443.5833f, 2789.2795f, 3354.1692f, 3722.7822f, 4032.7351f, 4320.9727f, 4621.8140f, 4963.7310f, 5429.8203f, 5900.1465f, + 361.2513f, 485.9720f, 828.4865f, 1340.9952f, 1497.8477f, 2072.8511f, 2437.9839f, 2674.9912f, 3259.3357f, 3539.0474f, 3789.1389f, 4087.5015f, 4404.8867f, 4771.0947f, 5500.2227f, 6015.7041f, + 301.8146f, 392.9569f, 685.1938f, 1783.6246f, 2034.8542f, 2257.1614f, 2519.8713f, 2782.6279f, 3152.1135f, 3400.8662f, 3614.3801f, 3906.7375f, 4233.1968f, 4712.3682f, 5596.0396f, 5998.5742f, + 242.0591f, 371.0809f, 729.0743f, 1190.6813f, 1851.5691f, 2132.6724f, 2334.7773f, 2522.3608f, 3091.8643f, 3621.4614f, 3854.5227f, 4174.7017f, 4490.7510f, 4780.1230f, 5157.6147f, 5865.4756f, + 431.2477f, 562.1808f, 888.5207f, 1034.2062f, 1443.2480f, 2109.8850f, 2337.1443f, 2829.1870f, 3070.1301f, 3252.6370f, 3510.3967f, 4366.2236f, 4843.2139f, 5133.0537f, 5549.8911f, 5850.3252f, + 420.2594f, 668.9339f, 911.1281f, 1218.0372f, 1806.5541f, 2050.8423f, 2394.5708f, 2761.3542f, 3021.1716f, 3414.0020f, 3970.9626f, 4342.2900f, 4691.6074f, 5062.5386f, 5452.6655f, 5792.8384f, + 257.3011f, 370.8905f, 604.8825f, 1096.4209f, 1711.8464f, 1934.4335f, 2319.4717f, 2769.0144f, 3019.0200f, 3354.3726f, 4119.8809f, 4354.8589f, 4557.7979f, 4893.5776f, 5450.3042f, 5910.4136f, + 241.4264f, 347.9253f, 622.2432f, 1248.8121f, 1559.7318f, 1848.8098f, 2315.5635f, 2571.5894f, 2879.5754f, 3624.1069f, 3968.0334f, 4238.9727f, 4713.4746f, 5156.6792f, 5568.5596f, 5975.8716f, + 478.7131f, 629.4184f, 918.1857f, 1342.7815f, 1535.1541f, 1803.0487f, 2483.7764f, 2724.4321f, 2998.1257f, 3634.9932f, 3915.9443f, 4119.2837f, 4327.0283f, 4980.3516f, 5532.6880f, 5964.3052f, + 265.7818f, 373.8575f, 723.3755f, 1186.0619f, 1509.2827f, 2064.2075f, 2298.1992f, 2566.4395f, 2785.7659f, 3423.1396f, 3883.9011f, 4136.8940f, 4463.0386f, 5010.6592f, 5539.0337f, 5931.4414f, + 221.4221f, 347.7610f, 707.4465f, 1187.0800f, 1575.9095f, 1824.3983f, 1979.3307f, 2299.3174f, 2967.6799f, 3472.3381f, 3955.8469f, 4292.6079f, 4794.8745f, 5127.5181f, 5652.6729f, 5953.0132f, + 397.2769f, 510.2605f, 746.8268f, 1588.0735f, 1991.5200f, 2150.6843f, 2439.0486f, 2712.2754f, 2972.5825f, 3501.2673f, 3917.5459f, 4143.6069f, 4443.4414f, 4829.1929f, 5490.0376f, 6028.3794f, + 280.5184f, 370.6464f, 640.7120f, 1721.3899f, 1948.9806f, 2149.9592f, 2400.4678f, 2674.0542f, 3146.3154f, 3419.8850f, 3813.9553f, 4417.4497f, 4818.3652f, 5139.6323f, 5465.0669f, 5879.7183f, + 325.2418f, 431.2627f, 1008.7708f, 1271.9235f, 1527.4150f, 2066.6370f, 2242.3311f, 2883.4065f, 3180.6614f, 3352.5015f, 3756.9688f, 4386.6904f, 4857.6621f, 5189.2212f, 5514.7573f, 5856.8086f, + 451.8427f, 582.4401f, 925.8821f, 1363.4249f, 1503.2460f, 1961.5940f, 2265.6001f, 2574.4414f, 3123.0769f, 3345.1587f, 3634.3022f, 4266.0137f, 4880.8052f, 5223.5776f, 5567.8901f, 5880.3770f, + 411.0873f, 553.3847f, 809.2106f, 1023.4841f, 1189.0618f, 1786.0770f, 2121.8489f, 2454.6458f, 2947.4700f, 3220.3210f, 3828.0911f, 4218.0229f, 4831.2383f, 5322.1445f, 5727.3906f, 6033.3887f, + 310.5608f, 442.2204f, 742.7755f, 1097.5740f, 1340.9608f, 1854.4385f, 2261.6399f, 2634.8315f, 3297.8879f, 3638.6956f, 3925.8770f, 4232.9146f, 4559.9287f, 4893.5830f, 5403.0981f, 5917.7056f, + 377.5583f, 488.4103f, 945.2491f, 1234.1572f, 1416.0774f, 1666.5979f, 1932.9910f, 2746.2000f, 2997.4753f, 3216.6152f, 3559.3999f, 3843.8130f, 4359.6626f, 5014.2920f, 5560.6162f, 5992.7212f, + 285.2173f, 389.6116f, 825.5790f, 1238.8229f, 1459.6588f, 1860.8855f, 2178.6296f, 2519.1597f, 2828.0032f, 3278.8101f, 3560.8286f, 4142.0552f, 4691.0698f, 5117.7778f, 5558.7944f, 5954.6680f, + 465.7002f, 631.7491f, 914.5521f, 1340.0057f, 1562.5760f, 1844.1741f, 2186.1208f, 2483.7080f, 2901.9417f, 3190.3162f, 3474.7651f, 3873.4065f, 4240.1973f, 4761.1255f, 5428.2832f, 5958.5273f, + 340.5456f, 449.2341f, 793.7005f, 1387.7467f, 1555.8701f, 1938.7877f, 2201.6155f, 2579.5762f, 2914.9724f, 3149.8584f, 3699.3984f, 3985.6790f, 4331.7534f, 4999.4805f, 5514.6924f, 5969.4897f, + 395.8350f, 564.1188f, 774.8214f, 1276.3201f, 1721.8716f, 1864.0143f, 2267.5696f, 2790.2031f, 3003.9434f, 3377.6140f, 3917.7395f, 4167.3867f, 4465.2529f, 4936.1138f, 5464.0479f, 5905.0444f, + 324.1844f, 443.0006f, 728.8958f, 1398.6589f, 1584.1820f, 1923.8724f, 2348.0903f, 2561.5554f, 3154.5991f, 3449.1746f, 3771.7927f, 4182.1899f, 4937.0791f, 5361.6509f, 5727.7656f, 6002.7505f, + 267.1790f, 373.7663f, 703.5949f, 1173.7009f, 1390.2002f, 1905.7941f, 2177.4961f, 2703.2627f, 3022.9121f, 3308.9612f, 3798.5823f, 4187.1533f, 4703.2163f, 5136.0918f, 5571.1655f, 5966.6577f, + 272.9294f, 399.3804f, 797.7335f, 1180.1516f, 1426.4850f, 2097.2839f, 2355.4727f, 2793.8774f, 3137.1907f, 3458.7727f, 3893.6628f, 4245.8047f, 4652.3794f, 5106.5293f, 5568.1885f, 5948.3169f, + 324.5529f, 431.7663f, 759.6147f, 1494.8739f, 1668.8168f, 2110.5635f, 2427.4104f, 2672.9270f, 3170.5266f, 3448.2080f, 3717.1240f, 4034.2280f, 4375.3647f, 5041.1372f, 5666.9517f, 6014.7217f, + 306.4759f, 404.5361f, 795.7795f, 1675.9967f, 1835.0950f, 2160.6624f, 2430.8855f, 2734.2646f, 3270.1426f, 3586.1355f, 3821.9670f, 4102.0078f, 4372.9404f, 4918.9146f, 5412.0376f, 5868.5225f, + 421.3803f, 607.7995f, 813.0241f, 1286.8525f, 1827.2451f, 2026.8683f, 2333.9453f, 2730.9817f, 2988.4067f, 3303.8513f, 3759.1897f, 4057.5264f, 4441.5493f, 4890.0078f, 5212.0469f, 5672.2188f, + 423.8560f, 599.5201f, 829.0651f, 1082.6381f, 1245.9272f, 1623.7075f, 2453.0420f, 2855.6631f, 3171.3855f, 3475.5881f, 3715.4219f, 3972.1326f, 4419.1597f, 4894.0283f, 5363.8691f, 5919.2681f, + 441.2789f, 634.8879f, 921.6287f, 1189.0240f, 1368.7466f, 2012.1312f, 2383.7656f, 2638.5222f, 2975.0288f, 3163.6150f, 3433.9958f, 3838.9917f, 4186.6426f, 4856.8477f, 5559.1196f, 5977.2290f, + 349.2039f, 466.2342f, 724.2582f, 904.4043f, 1190.4492f, 1981.7565f, 2226.5554f, 2592.5098f, 2865.5525f, 3195.8196f, 3735.6345f, 4267.1660f, 4810.9893f, 5207.5093f, 5605.1445f, 5952.0361f, + 497.7713f, 719.9073f, 925.0815f, 1146.3021f, 1326.7095f, 1574.5039f, 2306.7678f, 2714.8022f, 2967.5190f, 3400.1121f, 3732.0544f, 3981.7878f, 4553.4819f, 5090.0869f, 5426.2085f, 5833.5220f, + 471.7526f, 648.3213f, 902.1542f, 1245.7086f, 1423.3403f, 1701.1757f, 2125.8530f, 2407.0481f, 2969.5583f, 3294.1296f, 3712.8398f, 4140.7930f, 4808.4668f, 5322.3896f, 5662.1255f, 5950.6211f, + 345.3843f, 485.9887f, 841.2579f, 1035.9401f, 1244.8905f, 1488.1833f, 2340.4253f, 2607.0859f, 2845.4153f, 3223.1768f, 3557.0696f, 4119.7944f, 4666.8896f, 5145.8589f, 5565.7534f, 5976.6875f, + 332.4270f, 427.5984f, 829.9191f, 1138.0469f, 1339.4468f, 1589.0535f, 1926.0630f, 2432.9331f, 2699.7964f, 3311.4355f, 3716.1003f, 4270.4990f, 4760.3647f, 5208.3950f, 5619.2080f, 5971.2715f, + 249.0114f, 381.2982f, 925.7067f, 1520.3356f, 1842.8396f, 2368.2908f, 2783.4033f, 3272.5757f, 3673.7402f, 4046.3950f, 4370.4966f, 4688.0269f, 5002.6772f, 5316.3594f, 5650.2192f, 5977.6587f, + 263.3275f, 451.6255f, 1252.2307f, 1503.0652f, 1786.7695f, 2082.7554f, 2451.1829f, 2804.7590f, 3116.7583f, 3493.8892f, 3884.6575f, 4349.6724f, 4770.0156f, 5143.1636f, 5542.5913f, 5931.5522f, + 252.9447f, 341.5762f, 632.7664f, 1766.8096f, 2084.1511f, 2272.7332f, 2531.1006f, 2765.2080f, 3134.5417f, 3380.6223f, 3640.8015f, 3932.7854f, 4532.1172f, 5245.2070f, 5597.0776f, 5973.6831f, + 234.9979f, 324.6731f, 1239.8643f, 1663.1921f, 1858.7769f, 2171.1614f, 2403.8818f, 2680.6433f, 2836.4985f, 3192.6577f, 3864.8811f, 4385.8066f, 4845.9766f, 5150.2412f, 5631.1519f, 6011.7773f, + 284.5302f, 410.1263f, 985.4119f, 1298.3987f, 1789.4304f, 1996.9287f, 2450.8525f, 2831.6011f, 2994.2073f, 3214.1306f, 3525.0498f, 3819.9141f, 4672.7544f, 5424.3545f, 5691.0732f, 5980.3096f, + 244.2704f, 415.5891f, 1038.3009f, 1317.5186f, 1686.4528f, 2081.3147f, 2476.9873f, 2959.5393f, 3214.9561f, 3569.1431f, 3934.4736f, 4308.7114f, 4728.3687f, 5105.7964f, 5488.1938f, 5908.9443f, + 335.8417f, 468.3464f, 1003.6253f, 1275.0145f, 1534.2854f, 1985.3167f, 2348.3411f, 2743.3169f, 2956.0967f, 3408.5063f, 3866.8574f, 4287.0034f, 4556.7222f, 4922.7832f, 5259.7480f, 5800.2876f, + 388.2726f, 518.0591f, 832.5999f, 1325.0247f, 1528.8624f, 1808.1732f, 2151.0820f, 2486.1331f, 2815.4980f, 3158.5391f, 3635.3606f, 3960.5383f, 4671.7686f, 5371.8140f, 5777.8940f, 6056.4722f, + 506.5153f, 673.0771f, 900.0349f, 1154.2124f, 1378.2689f, 1786.9409f, 2081.9631f, 2398.6965f, 2859.7441f, 3075.4841f, 3546.6563f, 4322.6694f, 4732.0049f, 4992.5542f, 5267.5859f, 5807.1812f, + 487.2466f, 653.6116f, 968.5656f, 1389.2708f, 1601.5822f, 1910.9694f, 2282.4038f, 2608.7063f, 3032.6233f, 3361.9692f, 3629.8552f, 3908.8335f, 4318.4009f, 4646.5781f, 5043.5962f, 5792.7393f, + 432.8733f, 591.7551f, 899.2619f, 1490.1176f, 1789.8751f, 2060.3750f, 2434.8779f, 2840.3374f, 3122.1292f, 3472.8079f, 3830.8870f, 4097.2622f, 4353.5464f, 4650.2075f, 4981.5752f, 5482.9565f, + 378.4767f, 508.5656f, 802.8280f, 947.2892f, 1532.0898f, 2038.8177f, 2349.1965f, 2650.2039f, 2863.8018f, 3591.6697f, 3918.9211f, 4256.6255f, 4604.8467f, 4899.0996f, 5237.6084f, 5791.5029f, + 407.0908f, 546.0364f, 866.1215f, 1098.6927f, 1347.2009f, 1657.1525f, 1965.5845f, 2717.7190f, 3033.4961f, 3509.9031f, 3873.4150f, 4131.4438f, 4389.5693f, 4774.2295f, 5450.1768f, 5977.5151f, + 429.3459f, 568.8134f, 903.5659f, 1099.2942f, 1379.4979f, 2207.5940f, 2479.9919f, 2780.9072f, 3206.3960f, 3425.4084f, 3682.5911f, 3950.1941f, 4324.0840f, 4689.4922f, 5068.2534f, 5787.2852f, + 371.9443f, 524.7249f, 890.0464f, 1670.7485f, 1958.5308f, 2182.7007f, 2558.5007f, 2835.4937f, 3192.0740f, 3634.4817f, 3950.0942f, 4259.6953f, 4628.0049f, 4999.1616f, 5364.9893f, 5801.6855f, + 323.1922f, 451.0327f, 787.1655f, 1011.6555f, 1323.8138f, 2177.6636f, 2401.1392f, 2826.8796f, 3432.8999f, 3653.1851f, 3883.9897f, 4082.7559f, 4361.6753f, 4635.1475f, 5084.7544f, 5823.3062f, + 377.0061f, 524.2181f, 743.6288f, 1378.9187f, 1857.6434f, 2056.4695f, 2453.7949f, 2902.1995f, 3127.2651f, 3463.3523f, 3980.1316f, 4241.2578f, 4528.5859f, 4881.4521f, 5239.3145f, 5580.5986f, + 308.7965f, 403.7058f, 705.9506f, 1823.8571f, 2126.9387f, 2369.2810f, 2647.2048f, 2855.8276f, 3209.7708f, 3498.2310f, 3747.6047f, 3972.8647f, 4254.3325f, 4574.4292f, 5087.3965f, 5890.4219f, + 274.7571f, 383.7251f, 573.6029f, 1142.8372f, 2151.7173f, 2558.8972f, 2751.9468f, 2987.4412f, 3234.3350f, 3526.0127f, 3922.9927f, 4189.0249f, 4483.3774f, 4877.1860f, 5396.7798f, 5921.8125f, + 248.5916f, 423.6264f, 1260.9626f, 1696.0492f, 1972.9108f, 2298.5972f, 2592.9307f, 2947.2292f, 3266.2227f, 3614.3572f, 3980.3892f, 4359.4067f, 4770.2842f, 5158.9058f, 5554.6597f, 5936.9043f, + 320.5471f, 429.6766f, 657.1440f, 1390.1080f, 2194.6426f, 2507.6086f, 2712.3662f, 2980.3408f, 3216.1682f, 3544.8467f, 3956.9790f, 4227.5308f, 4463.7563f, 4745.7124f, 5088.6650f, 5525.8516f, + 245.5478f, 520.3131f, 1177.0693f, 1454.0125f, 1770.2620f, 2160.8779f, 2551.2700f, 2950.2324f, 3326.8621f, 3710.4624f, 4104.3936f, 4481.9971f, 4865.9736f, 5230.6396f, 5608.5649f, 5965.6162f, + 514.5864f, 956.9897f, 1287.9597f, 1520.3473f, 1802.0631f, 2116.4980f, 2509.8552f, 2865.9822f, 3238.7510f, 3611.3108f, 4016.4353f, 4431.8457f, 4860.3442f, 5231.4814f, 5614.6016f, 5963.9976f, + 537.0523f, 932.2803f, 1380.2690f, 1709.4702f, 2079.9902f, 2446.4014f, 2859.4204f, 3229.6975f, 3623.4031f, 4012.5327f, 4373.7568f, 4724.3359f, 5078.2686f, 5397.6040f, 5721.9639f, 6028.1167f, + 452.5153f, 798.2777f, 1099.3080f, 1317.0807f, 1652.6885f, 2059.7708f, 2471.0164f, 2808.5396f, 3146.5076f, 3494.0779f, 3870.6912f, 4310.8281f, 4777.5024f, 5181.2617f, 5574.4912f, 5934.3813f, + 340.3716f, 430.5102f, 872.3513f, 1636.3792f, 1772.8615f, 2074.0161f, 2295.1008f, 2693.0037f, 3177.7710f, 3391.7559f, 3670.8718f, 4224.3926f, 4896.3877f, 5199.9883f, 5580.4512f, 5911.7671f, + 317.8269f, 414.8185f, 881.1970f, 1658.4944f, 1852.0098f, 2136.0415f, 2380.8228f, 2668.9141f, 3046.8027f, 3299.0051f, 3523.0593f, 3758.9412f, 4116.9063f, 5061.2124f, 5624.1777f, 5989.4761f, + 374.0671f, 488.0840f, 734.0546f, 1415.9261f, 1648.7783f, 1852.8462f, 2099.1895f, 2347.5562f, 2954.8359f, 3269.6714f, 3536.7920f, 4116.1743f, 4481.4355f, 4913.8838f, 5467.2817f, 5909.8779f, + 340.4291f, 448.5775f, 1041.4979f, 1426.0011f, 1637.8165f, 1968.6743f, 2210.7976f, 2647.5144f, 2913.8650f, 3131.7698f, 3429.8755f, 3722.6763f, 4104.6479f, 4969.0093f, 5574.2231f, 5978.2070f, + 254.2538f, 412.7710f, 947.8206f, 1209.3683f, 1690.4813f, 2040.7881f, 2401.4314f, 2728.0066f, 3016.2290f, 3530.3865f, 3964.6563f, 4393.6934f, 4804.2168f, 5187.9302f, 5586.4399f, 5954.8950f, + 241.0244f, 347.0750f, 835.2348f, 1601.9089f, 1786.4336f, 2134.3950f, 2396.0139f, 2848.9712f, 3239.9138f, 3623.8250f, 4029.5088f, 4400.3936f, 4797.3564f, 5195.7310f, 5596.6689f, 5965.9878f, + 309.3683f, 453.6776f, 812.9343f, 1125.9915f, 1423.5935f, 2149.2227f, 2514.9277f, 3031.3599f, 3463.7219f, 3790.7839f, 4064.0039f, 4297.9839f, 4653.4551f, 5189.7061f, 5721.2954f, 6033.0752f, + 469.4284f, 730.1902f, 973.0643f, 1170.5016f, 1572.2559f, 2084.2769f, 2567.8604f, 2963.4592f, 3286.9617f, 3580.3228f, 3882.8706f, 4335.5483f, 4859.7197f, 5258.2827f, 5627.9785f, 5957.8623f, + 454.6165f, 795.2360f, 1078.7705f, 1294.9473f, 1761.6650f, 2235.2788f, 2695.8455f, 3095.7695f, 3473.4897f, 3833.0889f, 4185.7290f, 4528.9863f, 4893.0039f, 5240.7627f, 5608.8594f, 5951.0718f, + 563.4587f, 875.8987f, 1139.0026f, 1378.2317f, 1855.7401f, 2279.7683f, 2651.3079f, 2968.4397f, 3279.4453f, 3607.2500f, 3975.5796f, 4358.3574f, 4768.7969f, 5135.3706f, 5525.3501f, 5904.2617f, + 461.7852f, 855.0644f, 1367.4387f, 1702.5593f, 2141.0093f, 2500.9055f, 2853.8596f, 3123.9744f, 3406.0178f, 3694.0481f, 4028.9985f, 4373.1113f, 4768.2891f, 5137.6895f, 5541.3721f, 5921.4507f, + 438.6031f, 753.0179f, 1269.3203f, 1630.4396f, 2027.2959f, 2350.9695f, 2672.1396f, 2957.1809f, 3250.1545f, 3546.5315f, 3894.0161f, 4249.9346f, 4666.2266f, 5061.2524f, 5490.7749f, 5904.6362f, + 543.3182f, 828.4835f, 1239.1818f, 1471.1134f, 1737.8622f, 2037.2484f, 2434.5112f, 2801.3242f, 3162.3250f, 3508.1255f, 3849.0903f, 4165.7588f, 4588.3809f, 5020.0952f, 5475.2813f, 5904.6377f, + 519.5982f, 837.6639f, 1171.2003f, 1363.0320f, 1617.4617f, 1976.1787f, 2472.0303f, 2901.3264f, 3340.7300f, 3736.0830f, 4103.3843f, 4444.8657f, 4800.9482f, 5145.6011f, 5544.2002f, 5933.0981f, + 433.3774f, 582.7663f, 899.6142f, 1150.7437f, 1321.1309f, 1947.8643f, 2557.8604f, 2733.1497f, 3240.4907f, 3634.7915f, 3855.9856f, 4058.0281f, 4364.2568f, 5096.5225f, 5659.0952f, 6013.8145f, + 424.9731f, 604.3164f, 868.1793f, 1207.7882f, 1414.2374f, 1713.2893f, 2520.2900f, 2960.8887f, 3210.8542f, 3584.5403f, 3914.5796f, 4149.8550f, 4505.7705f, 4886.9575f, 5214.5361f, 5597.8389f, + 347.0334f, 494.2440f, 753.7191f, 1451.0435f, 1700.7461f, 1925.4844f, 2605.7988f, 2870.4744f, 3173.7312f, 3758.7219f, 4112.1929f, 4400.3882f, 4866.1016f, 5165.8799f, 5433.0371f, 5781.1509f, + 318.4942f, 464.3939f, 783.5214f, 1491.0234f, 1708.4984f, 2280.2876f, 2533.3354f, 2885.1736f, 3443.7451f, 3669.8506f, 4000.6792f, 4269.6626f, 4571.2739f, 4827.2158f, 5277.3813f, 5850.4736f, + 386.8698f, 519.0056f, 725.0029f, 981.5649f, 1156.1665f, 1500.4691f, 2421.7993f, 2962.4722f, 3175.0166f, 3548.4756f, 3860.7961f, 4146.4150f, 4658.9897f, 5088.3999f, 5531.8945f, 5951.4624f, + 315.9294f, 738.5538f, 1171.9581f, 1553.7167f, 1949.9159f, 2319.6641f, 2707.5493f, 3069.2996f, 3444.6157f, 3811.2139f, 4177.5469f, 4545.6943f, 4905.0444f, 5271.3926f, 5622.6831f, 5974.4141f, + 216.5136f, 598.1122f, 1059.3214f, 1466.4785f, 1880.1747f, 2263.6533f, 2658.3081f, 3030.4099f, 3413.6802f, 3780.1853f, 4157.1455f, 4519.1919f, 4893.5439f, 5244.3530f, 5603.1064f, 5926.8379f, + 375.4021f, 487.0890f, 844.4013f, 1574.3596f, 1794.5249f, 2106.2878f, 2418.5217f, 2657.8938f, 3116.6096f, 3457.8625f, 3691.0596f, 3930.1062f, 4259.5928f, 4592.4370f, 5020.5078f, 5840.3989f, + 474.3148f, 724.2144f, 974.0716f, 1283.4182f, 1521.2632f, 1746.4248f, 2333.0957f, 2874.2966f, 3111.9636f, 3440.0410f, 3752.9678f, 3975.7139f, 4294.7056f, 4821.9893f, 5201.5562f, 5658.8301f, + 400.0291f, 564.9626f, 808.2393f, 1083.2745f, 1300.4403f, 2080.7405f, 2588.6882f, 2858.4629f, 3206.4502f, 3429.8623f, 3746.9080f, 4341.4868f, 4713.2803f, 4986.4258f, 5336.7339f, 5710.1123f, + 354.4416f, 480.1495f, 834.1089f, 1037.7775f, 1350.0652f, 1791.1736f, 2193.0159f, 2504.6775f, 2776.0623f, 3153.0994f, 4108.1357f, 4597.4082f, 4861.9688f, 5092.8613f, 5473.2295f, 5932.0332f, + 237.3935f, 346.9133f, 675.5335f, 1481.0535f, 1716.8414f, 1884.7153f, 2099.3057f, 2725.5403f, 3022.8506f, 3276.2922f, 3639.1001f, 4185.3926f, 4941.6597f, 5292.0093f, 5682.0391f, 5981.0215f, + 367.4981f, 469.7130f, 820.7811f, 1219.7736f, 1368.4479f, 1624.6671f, 1804.2581f, 2607.8589f, 2891.3174f, 3212.2432f, 3760.7290f, 4015.6111f, 4618.0068f, 5129.3213f, 5652.1582f, 6042.1113f, + 312.6796f, 415.8322f, 674.1500f, 853.7709f, 1808.7385f, 2232.5310f, 2497.8157f, 2834.2991f, 3039.7012f, 3301.4050f, 3659.2969f, 4455.9453f, 4841.4912f, 5111.6167f, 5502.2534f, 5924.6357f, + 341.9309f, 471.7513f, 758.1926f, 979.7221f, 1287.4463f, 1737.0303f, 2160.7915f, 2664.5562f, 2961.8315f, 3461.7439f, 3732.6611f, 4109.0928f, 4568.9111f, 5037.4331f, 5511.3169f, 5966.1304f, + 351.3721f, 462.1897f, 765.1075f, 946.3102f, 1322.8093f, 2292.2400f, 2503.6494f, 2819.7234f, 3079.2803f, 3297.6252f, 3571.4668f, 3872.0823f, 4337.6426f, 5079.1504f, 5562.8110f, 5942.7153f, + 435.4323f, 614.4746f, 892.8980f, 1215.9469f, 1395.9762f, 1814.3936f, 2155.9590f, 2465.0427f, 3201.6211f, 3490.9224f, 3853.2620f, 4410.1855f, 4786.0625f, 5095.0181f, 5394.4805f, 5715.3364f, + 294.6053f, 417.1553f, 1046.2922f, 1443.0247f, 1636.7180f, 1956.4248f, 2189.9697f, 2869.8071f, 3129.9385f, 3462.5681f, 3895.2805f, 4213.4541f, 4541.8950f, 5009.1958f, 5472.7642f, 5983.0063f, + 322.1185f, 446.8733f, 689.4188f, 1338.2788f, 1643.1023f, 1903.8652f, 2494.2722f, 2804.6968f, 3103.8682f, 3640.1233f, 3965.9861f, 4172.5596f, 4404.7388f, 4670.7544f, 5240.3682f, 5893.4600f, + 209.7024f, 336.5508f, 729.0126f, 1217.3285f, 1699.0111f, 1891.2837f, 2146.8486f, 2830.0850f, 3108.6204f, 3446.0396f, 3754.1230f, 3945.1038f, 4474.5806f, 5191.6987f, 5613.3076f, 5970.2695f, + 346.6580f, 470.5094f, 663.3455f, 1266.9061f, 2020.5759f, 2270.5173f, 2527.3550f, 2826.9104f, 3078.3403f, 3401.2625f, 3804.3770f, 4100.3091f, 4407.7876f, 4732.2319f, 5150.2749f, 5808.2559f, + 283.7796f, 391.4603f, 1165.6863f, 1456.1125f, 1692.9001f, 2008.4825f, 2322.7837f, 2784.0608f, 2998.5811f, 3268.5164f, 3548.9373f, 4167.1289f, 4643.9878f, 5099.2881f, 5473.0781f, 5929.8242f, + 301.0849f, 383.1578f, 692.0848f, 1648.9374f, 1873.0947f, 2109.6113f, 2345.0110f, 2613.1121f, 2922.0193f, 3170.0020f, 3405.0774f, 3881.9875f, 4778.3154f, 5092.5205f, 5445.7100f, 5920.7896f, + 509.1023f, 750.8580f, 963.8820f, 1295.3452f, 1634.8796f, 1818.7975f, 2151.1250f, 2590.3354f, 2867.5596f, 3238.7666f, 3747.2834f, 4053.8911f, 4457.8164f, 4928.0151f, 5295.3521f, 5789.0571f, + 421.8951f, 547.9814f, 967.4185f, 1153.8607f, 1461.4230f, 1813.0994f, 2155.2703f, 2570.9712f, 2777.6597f, 3048.9863f, 3432.0986f, 3729.3877f, 4395.7461f, 5028.7402f, 5486.4946f, 5951.5024f, + 340.6758f, 445.7014f, 931.8882f, 1253.4775f, 1521.9260f, 1969.5759f, 2267.5332f, 2735.0112f, 2948.7678f, 3236.5166f, 3529.5505f, 3882.3674f, 4699.5781f, 5089.6641f, 5377.7842f, 5880.7778f, + 284.1882f, 408.6918f, 786.3123f, 1670.3220f, 2042.9493f, 2265.2275f, 2691.2012f, 3035.8762f, 3334.1719f, 3863.1194f, 4276.8916f, 4571.0420f, 4996.4404f, 5336.5205f, 5647.9556f, 5944.5996f, + 300.0066f, 616.4817f, 1238.7324f, 1614.8296f, 1997.6188f, 2367.4343f, 2784.5605f, 3168.8354f, 3569.8250f, 3965.6011f, 4336.3804f, 4689.5874f, 5044.2012f, 5365.7456f, 5697.5654f, 6010.6572f, + 242.9420f, 476.8371f, 1250.6661f, 1671.6031f, 2159.6443f, 2637.7417f, 3049.8589f, 3371.6045f, 3674.8706f, 3951.1006f, 4230.6416f, 4543.2827f, 4887.4478f, 5220.5581f, 5595.2686f, 5962.1313f, + 242.6795f, 331.1335f, 635.2861f, 1801.5236f, 2084.1472f, 2264.4692f, 2506.2891f, 2799.4441f, 3236.7134f, 3489.6038f, 3859.3291f, 4424.8008f, 4964.6348f, 5298.6533f, 5640.2031f, 5988.0552f, + 254.0538f, 336.2447f, 1216.6261f, 1717.7201f, 1886.0708f, 2176.6338f, 2405.8547f, 2762.3037f, 2934.8816f, 3167.0657f, 3385.5457f, 3804.4346f, 4848.8198f, 5286.0352f, 5630.5391f, 6086.4492f, + 295.2298f, 426.2079f, 630.7856f, 1155.5609f, 1827.6831f, 2120.5283f, 2462.4373f, 2759.6152f, 2990.9526f, 3253.4216f, 3910.9834f, 4204.2754f, 4462.7944f, 4909.7529f, 5579.9653f, 5985.8579f, + 298.9633f, 410.3875f, 810.1115f, 1346.1040f, 1499.2391f, 2210.3948f, 2467.9424f, 2792.7122f, 3284.0874f, 3493.0740f, 3784.1899f, 4319.6396f, 4860.6548f, 5213.8540f, 5609.8672f, 5949.6890f, + 437.9900f, 575.3093f, 866.0077f, 1104.2080f, 1307.4966f, 1959.9323f, 2293.9365f, 2604.6704f, 2966.6514f, 3228.0056f, 3548.8499f, 4096.4424f, 4769.5420f, 5086.5449f, 5416.5317f, 5853.6909f, + 412.4955f, 569.1867f, 864.0179f, 1117.6798f, 1348.6332f, 1976.5171f, 2334.3960f, 2640.3381f, 3006.5347f, 3327.5784f, 3695.8564f, 4042.1753f, 4362.7837f, 4687.4751f, 5389.8662f, 5966.5825f, + 406.8686f, 542.0319f, 867.3541f, 1436.3810f, 1678.6399f, 2000.1501f, 2358.1204f, 2651.3806f, 3042.1216f, 3339.2766f, 3617.9963f, 3933.3860f, 4249.0278f, 4591.8530f, 5502.0400f, 6020.7910f, + 375.4336f, 519.7731f, 764.5574f, 1215.1381f, 1482.9417f, 1696.8020f, 1957.0332f, 2169.1169f, 2973.4634f, 3687.7449f, 3966.8525f, 4258.8042f, 4680.6567f, 4947.0225f, 5230.9824f, 5843.2466f, + 443.2378f, 574.0562f, 813.3345f, 1282.7894f, 1538.0752f, 1727.8997f, 2007.8584f, 2194.5601f, 2755.8220f, 3460.9243f, 3654.1399f, 4030.5530f, 4572.4727f, 4904.7847f, 5400.6147f, 5934.2656f, + 423.6246f, 540.1947f, 862.8629f, 1386.7659f, 1577.2052f, 1811.0304f, 2046.7363f, 2309.0366f, 3129.1145f, 3533.0020f, 3738.4211f, 4021.1111f, 4357.3677f, 4634.8740f, 5307.2920f, 5944.9155f, + 287.7661f, 401.5490f, 725.6079f, 950.8911f, 1186.5465f, 1490.1750f, 2114.7920f, 2562.4019f, 3028.3977f, 3519.6277f, 3940.5737f, 4339.3086f, 4765.8188f, 5172.3428f, 5582.8022f, 5971.0273f, + 382.6039f, 537.7234f, 836.8093f, 1371.3546f, 1578.9803f, 1869.8213f, 2292.5596f, 2540.8601f, 3032.9834f, 3402.5059f, 3737.0569f, 4053.9937f, 4446.6240f, 5251.8457f, 5710.7935f, 6022.2925f, + 313.2195f, 415.0511f, 690.6860f, 1561.4832f, 1815.6521f, 2059.9187f, 2345.5095f, 2614.8701f, 3006.9604f, 3291.9744f, 3590.4119f, 3996.1516f, 4365.4995f, 4853.4956f, 5465.1572f, 5954.5718f, + 361.7959f, 448.4001f, 921.3198f, 1343.1167f, 1488.6287f, 1736.7700f, 1950.8906f, 2536.0193f, 2768.7393f, 3062.4473f, 3484.6570f, 3888.5618f, 4618.4038f, 5092.6641f, 5523.3657f, 5966.6772f, + 249.5541f, 366.6601f, 684.6592f, 1203.0931f, 1642.2089f, 1961.8837f, 2227.3289f, 2421.1348f, 2660.5676f, 3229.5410f, 3822.5837f, 4232.7266f, 4782.5181f, 5127.2612f, 5570.2676f, 5978.9858f, + 287.4206f, 421.3210f, 704.0352f, 1279.8597f, 1562.7307f, 2115.4241f, 2492.4517f, 2780.9470f, 3317.3616f, 3606.1492f, 4026.6375f, 4337.9014f, 4699.6895f, 4997.2573f, 5431.1787f, 5903.8628f, + 487.9554f, 740.9349f, 1021.9616f, 1327.3262f, 1620.8544f, 1890.7717f, 2269.1218f, 2584.4868f, 2911.2896f, 3424.9221f, 3855.1670f, 4205.9272f, 4707.2466f, 5147.1846f, 5601.1152f, 5953.4673f, + 400.8269f, 513.4500f, 786.8242f, 1269.3298f, 1441.4178f, 1696.9789f, 1911.0537f, 2223.0684f, 2847.1619f, 3113.3845f, 3670.6318f, 4146.2900f, 4555.9204f, 5083.8579f, 5574.8120f, 5987.6030f, + 379.0329f, 487.7222f, 914.8179f, 1130.9854f, 1430.1394f, 1830.0769f, 2088.8796f, 2613.6855f, 2803.1633f, 3457.1777f, 4032.6118f, 4306.7344f, 4662.6899f, 4959.6348f, 5245.5234f, 5787.3940f, + 340.6941f, 451.0338f, 656.2767f, 911.5805f, 1124.9330f, 1733.8730f, 2518.7861f, 2768.6851f, 3211.3733f, 3717.7583f, 3929.6772f, 4176.2993f, 4522.4517f, 5011.5547f, 5575.8784f, 6006.7222f, + 341.5027f, 441.6417f, 807.2695f, 1060.2080f, 1251.2837f, 1478.9895f, 1750.0796f, 2594.8977f, 2924.5027f, 3401.4751f, 3852.0557f, 4292.4683f, 4718.2930f, 5159.4775f, 5562.4067f, 5972.5571f, + 313.8985f, 421.5380f, 667.2407f, 873.6023f, 1110.1119f, 2060.7332f, 2381.0916f, 2746.2288f, 3080.5649f, 3399.9905f, 3897.5884f, 4434.9990f, 5048.1343f, 5390.8149f, 5744.3931f, 6007.9326f, + 252.1832f, 354.2392f, 673.5427f, 1339.1161f, 1554.8853f, 2014.9351f, 2300.4138f, 2829.6182f, 3213.1714f, 3409.5105f, 3604.3242f, 3927.8020f, 4622.3218f, 5103.4565f, 5559.5024f, 5971.5986f, + 385.2648f, 513.7607f, 760.7678f, 983.5819f, 1175.7727f, 2134.7810f, 2592.9614f, 2822.0161f, 3232.2524f, 3445.3516f, 3750.7583f, 4094.6714f, 4401.5830f, 4753.4204f, 5549.2319f, 6034.7148f, + 220.6833f, 314.5706f, 622.2172f, 1350.8225f, 1785.5879f, 2077.5837f, 2504.2158f, 3057.6992f, 3436.0974f, 3695.2976f, 3953.4272f, 4267.8701f, 4660.6865f, 5073.6831f, 5501.9478f, 5929.9780f, + 207.8814f, 310.4071f, 646.2098f, 1270.5835f, 1542.7271f, 2079.3804f, 2440.0339f, 2843.4690f, 3272.4854f, 3657.9851f, 4061.2014f, 4444.9780f, 4841.6060f, 5224.5947f, 5620.9141f, 5972.7261f, + 326.1488f, 456.7737f, 740.3350f, 961.4597f, 1262.7579f, 2190.7178f, 2483.5300f, 2872.4180f, 3328.4910f, 3811.0334f, 4153.1602f, 4441.8271f, 4801.1802f, 5065.2988f, 5381.6309f, 5693.2886f, + 206.2046f, 328.0855f, 618.9507f, 980.9994f, 1695.9775f, 1982.3051f, 2275.5444f, 2806.0271f, 3269.5178f, 3491.2456f, 3722.1775f, 4145.9121f, 4843.1167f, 5266.8677f, 5656.8794f, 5992.1201f, + 308.1086f, 407.7706f, 806.7985f, 1045.7629f, 1401.8912f, 2108.3472f, 2331.7849f, 2952.5391f, 3174.1865f, 3374.0686f, 3645.4260f, 4292.7183f, 4939.2969f, 5250.4829f, 5607.2358f, 5932.8657f, + 267.5990f, 378.7492f, 642.2629f, 871.7917f, 1691.7523f, 2087.5117f, 2423.1462f, 2686.1487f, 3021.7893f, 3724.0247f, 4035.5454f, 4369.5903f, 4680.1167f, 4991.4175f, 5323.6875f, 5811.7471f, + 312.3856f, 437.4281f, 714.5340f, 899.5771f, 1632.7545f, 1938.5369f, 2295.5544f, 2625.6189f, 2900.5576f, 3295.4934f, 3557.1260f, 3960.1123f, 4731.6079f, 5141.8447f, 5502.7793f, 5954.0049f, + 332.2842f, 449.0976f, 875.9957f, 1206.1912f, 1422.6793f, 2097.5745f, 2354.2483f, 2715.8494f, 3093.4697f, 3344.5132f, 3623.4814f, 3889.3655f, 4256.2002f, 4994.5742f, 5593.8428f, 5985.9575f, + 286.9586f, 434.7701f, 781.3996f, 1248.3495f, 1835.5530f, 2137.1155f, 2573.7449f, 2869.9299f, 3126.0564f, 3459.1448f, 3769.4475f, 4138.3076f, 4688.0298f, 5084.9028f, 5436.8086f, 5894.2520f, + 327.0000f, 429.0804f, 663.7327f, 849.7463f, 1174.9340f, 2383.3875f, 2695.9597f, 2941.2026f, 3214.4724f, 3433.6287f, 3778.9312f, 4134.8096f, 4504.8022f, 5066.7559f, 5599.2290f, 5985.7334f, + 244.4052f, 499.2254f, 1294.8232f, 1689.3677f, 2123.5024f, 2572.4958f, 3042.9067f, 3446.8752f, 3836.3740f, 4175.6729f, 4485.3213f, 4792.3755f, 5094.9077f, 5386.1816f, 5699.6411f, 6008.2114f, + 561.9757f, 1020.3204f, 1494.1995f, 1841.8171f, 2297.0906f, 2772.6184f, 3204.8804f, 3565.8628f, 3935.4106f, 4253.4141f, 4559.7021f, 4849.9653f, 5140.2852f, 5428.6934f, 5731.2251f, 6023.5078f, + 581.6182f, 1053.5670f, 1478.5878f, 1784.4789f, 2125.1157f, 2454.5889f, 2809.0256f, 3141.7256f, 3490.7529f, 3848.5923f, 4201.7271f, 4568.7720f, 4945.9619f, 5288.6289f, 5647.7642f, 5981.9341f, + 258.9683f, 364.0963f, 722.5463f, 1763.2114f, 1969.3870f, 2265.5239f, 2532.1821f, 2883.3557f, 3388.1838f, 3725.3120f, 4080.9338f, 4390.3818f, 4716.3599f, 5068.4941f, 5452.2778f, 5847.1401f, + 271.5428f, 401.4228f, 695.5894f, 857.3072f, 1776.5358f, 2008.5603f, 2554.4143f, 2844.4021f, 3018.6877f, 3226.1279f, 3482.3398f, 3810.6858f, 4549.3071f, 5266.2764f, 5614.6157f, 5945.6904f, + 330.3132f, 444.6271f, 669.0279f, 874.5479f, 1102.9247f, 2052.1780f, 2436.2378f, 2711.1165f, 3037.7537f, 3298.2036f, 3898.6858f, 4241.5415f, 4606.7637f, 5086.6919f, 5569.7397f, 5988.6797f, + 232.3014f, 344.5512f, 578.5155f, 1213.9569f, 1880.9729f, 2105.6685f, 2335.4148f, 2550.3965f, 3147.6501f, 3491.9253f, 3791.5613f, 4159.6694f, 4642.2441f, 5103.3340f, 5605.4106f, 5989.7969f, + 346.3687f, 444.8047f, 714.3775f, 889.1195f, 1211.8463f, 2168.7598f, 2430.2490f, 2760.6326f, 3012.4961f, 3268.8750f, 3565.1558f, 4172.5791f, 4781.5391f, 5127.6704f, 5512.6323f, 5911.3779f, + 398.0477f, 553.8537f, 845.8521f, 1119.3066f, 1309.7244f, 1928.3351f, 2351.2095f, 2649.8230f, 3050.6750f, 3297.0566f, 3592.7275f, 3916.1785f, 4723.3325f, 5318.1221f, 5703.9697f, 5996.7651f, + 371.4409f, 471.0789f, 896.4924f, 1197.7544f, 1400.8007f, 1611.1555f, 1867.3550f, 2818.4475f, 3002.5906f, 3250.1440f, 3546.5891f, 4265.0371f, 4890.3369f, 5274.4722f, 5659.3560f, 5946.9644f, + 330.9331f, 448.7211f, 808.3973f, 978.2021f, 1652.6361f, 1969.0725f, 2357.0146f, 2680.4792f, 2859.9165f, 3078.9578f, 3423.6895f, 4233.3169f, 4856.7813f, 5086.5723f, 5393.9961f, 5938.6035f, + 323.9659f, 433.8731f, 1045.5168f, 1369.1907f, 1561.9178f, 1984.2457f, 2224.0959f, 2747.3657f, 2995.0359f, 3242.9248f, 3501.0344f, 4022.2388f, 4847.4985f, 5210.9922f, 5658.1357f, 6005.0718f, + 354.6574f, 501.6520f, 852.5305f, 1020.8707f, 1540.5925f, 1998.5675f, 2253.1487f, 2845.3960f, 3056.5273f, 3305.0466f, 3954.2900f, 4591.7471f, 4915.2856f, 5221.9082f, 5544.7285f, 5879.9150f, + 363.1311f, 474.7310f, 907.5490f, 1106.8586f, 1367.2662f, 1646.6934f, 2031.3650f, 2326.4382f, 2568.6519f, 3030.1091f, 3905.6482f, 4265.9111f, 4716.1831f, 5017.0454f, 5469.8149f, 5958.6182f, + 379.9262f, 524.4459f, 845.4813f, 1275.4414f, 1458.2488f, 1772.5863f, 2067.7981f, 2526.8850f, 3066.4063f, 3307.8713f, 3807.2900f, 4199.1509f, 4452.4653f, 4854.7471f, 5464.8833f, 5947.7842f, + 371.8218f, 483.9148f, 778.2747f, 1208.0812f, 1366.3983f, 1623.4895f, 1798.8777f, 2224.6445f, 3103.7175f, 3386.0408f, 3782.8284f, 4307.4727f, 4698.8994f, 5118.1255f, 5505.1919f, 5921.1724f, + 217.9059f, 323.3224f, 639.7305f, 1026.5331f, 1312.9242f, 1885.6948f, 2361.8403f, 2805.5396f, 3213.2600f, 3631.5017f, 4033.4087f, 4426.3423f, 4821.3203f, 5208.3833f, 5590.5205f, 5956.1538f, + 211.9971f, 311.2018f, 504.6345f, 858.3289f, 1574.7019f, 1934.9866f, 2381.4163f, 2786.2043f, 3238.9326f, 3611.0518f, 4005.2578f, 4401.0615f, 4802.1479f, 5192.5493f, 5587.1479f, 5965.5977f, + 219.3884f, 319.3835f, 604.0102f, 1114.8630f, 1481.3870f, 2036.0469f, 2303.4883f, 2616.1384f, 3253.6335f, 3556.5107f, 3946.6567f, 4520.3555f, 5091.0479f, 5416.3037f, 5748.5737f, 5946.5757f, + 350.3716f, 515.4462f, 756.5206f, 1061.4270f, 1251.9570f, 1723.2751f, 2687.6689f, 3036.2019f, 3273.9678f, 3744.2939f, 4098.6284f, 4391.4160f, 4917.6777f, 5244.2852f, 5551.4976f, 5880.1572f, + 311.6069f, 458.7317f, 795.9418f, 969.5021f, 1511.2507f, 1952.5673f, 2273.6116f, 2795.8657f, 3049.7053f, 3578.0598f, 3911.1873f, 4327.2598f, 4735.3105f, 5122.3423f, 5479.7817f, 5858.1504f, + 267.8399f, 390.6757f, 886.2357f, 1179.5110f, 1466.6409f, 2088.7725f, 2328.1262f, 2993.5786f, 3283.5256f, 3593.2822f, 4095.7588f, 4500.4009f, 4887.5132f, 5219.0859f, 5553.4224f, 5915.6831f, + 279.2209f, 413.3200f, 648.4438f, 1282.1798f, 1793.2556f, 1952.1060f, 2484.9436f, 2857.3630f, 3077.2114f, 3548.2585f, 4045.4526f, 4309.5947f, 4760.2900f, 5208.1948f, 5620.9717f, 5968.3237f, + 306.2321f, 424.7843f, 618.7867f, 1288.7572f, 2110.7849f, 2346.5396f, 2582.5366f, 2833.5730f, 3074.3774f, 3464.7886f, 3984.6379f, 4262.0337f, 4601.5132f, 4999.6992f, 5498.8926f, 5920.4814f, + 259.2613f, 353.6931f, 762.5328f, 1906.2162f, 2088.1213f, 2317.9741f, 2546.5935f, 2880.3687f, 3332.0002f, 3636.9216f, 3946.4287f, 4226.0356f, 4502.1084f, 5007.0601f, 5496.4824f, 5924.8877f, + 244.3871f, 357.0287f, 1114.7865f, 1651.1329f, 1850.2976f, 2200.5942f, 2484.7026f, 2872.6968f, 3092.8455f, 3373.5869f, 3707.5891f, 4180.1289f, 4603.5298f, 5132.2671f, 5554.7617f, 5973.5220f, + 700.5439f, 1363.5277f, 1745.2494f, 2081.9539f, 2379.8628f, 2623.6003f, 2883.6484f, 3133.9824f, 3457.7092f, 3819.0100f, 4191.0537f, 4547.0400f, 4912.5127f, 5241.3423f, 5594.9395f, 5930.6099f, + 268.7704f, 370.8200f, 609.4679f, 1558.5339f, 1961.6279f, 2155.8916f, 2419.4485f, 2655.5103f, 3152.6685f, 3426.9221f, 3716.8181f, 4107.1616f, 4965.5698f, 5384.2026f, 5706.7183f, 6015.6196f, + 305.7638f, 395.9599f, 1103.0944f, 1383.6494f, 1612.9742f, 1915.2496f, 2189.8008f, 2555.3608f, 2720.8220f, 3038.2434f, 3927.1301f, 4263.0518f, 4685.7217f, 4984.1377f, 5272.6162f, 5984.5376f, + 294.0385f, 426.7762f, 814.5162f, 1056.9037f, 1715.3539f, 2005.3177f, 2316.4392f, 2647.4297f, 2893.8242f, 3196.7476f, 3720.0044f, 4186.9790f, 4840.4512f, 5290.1250f, 5684.2139f, 5967.5859f, + 359.5141f, 517.6051f, 807.4898f, 1143.5930f, 1328.1393f, 1814.7098f, 2309.8894f, 2618.8655f, 3160.5962f, 3445.0479f, 3883.2664f, 4235.5200f, 4718.7324f, 5367.3608f, 5765.9331f, 6034.9233f, + 241.5752f, 375.5109f, 818.8776f, 1298.7773f, 1656.9050f, 2169.8962f, 2565.1440f, 3015.9919f, 3437.9463f, 3863.8203f, 4254.4023f, 4637.0952f, 5027.8252f, 5358.3784f, 5685.5000f, 5980.4063f, + 322.5406f, 454.9644f, 963.3659f, 1513.8885f, 1704.5070f, 2235.6599f, 2523.6467f, 2995.0757f, 3287.8682f, 3552.8811f, 3872.4360f, 4201.2227f, 4571.9087f, 5066.6792f, 5562.1206f, 5935.7900f, + 412.5748f, 615.8419f, 1126.9519f, 1455.5172f, 1653.3076f, 1965.2689f, 2240.6904f, 2672.5129f, 3127.3301f, 3477.8540f, 3983.6145f, 4458.6558f, 4896.7998f, 5237.9814f, 5609.1597f, 5939.6416f, + 342.1361f, 470.6100f, 958.3576f, 1195.0166f, 1426.4667f, 1684.2009f, 2194.0950f, 2545.9453f, 2946.1851f, 3415.2820f, 3657.4158f, 4408.6763f, 5097.2251f, 5404.2202f, 5719.9829f, 5977.7959f, + 297.8767f, 386.6347f, 1095.8346f, 1454.3085f, 1651.6417f, 1927.9633f, 2198.4927f, 2583.1694f, 2757.0144f, 3009.6497f, 3310.9514f, 3956.9753f, 4677.3208f, 5122.2222f, 5539.0688f, 5993.0542f, + 334.7170f, 450.1582f, 747.3162f, 1560.2024f, 1808.2147f, 2006.5011f, 2415.2419f, 2680.1956f, 3016.5549f, 3651.1340f, 3975.3625f, 4209.6563f, 4531.0396f, 5121.7212f, 5585.2202f, 5962.3667f, + 256.4101f, 495.5723f, 1341.4860f, 1805.1255f, 2201.8318f, 2514.7769f, 2820.4092f, 3102.3867f, 3414.3872f, 3754.7742f, 4108.2378f, 4465.9258f, 4857.4355f, 5216.2144f, 5592.3076f, 5951.9995f, + 530.7974f, 1017.4255f, 1463.9575f, 1858.6631f, 2360.1265f, 2770.3811f, 3106.0894f, 3379.1919f, 3647.7175f, 3895.9026f, 4188.8652f, 4522.8984f, 4893.7954f, 5241.4312f, 5623.8994f, 5975.3608f, + 597.1553f, 1198.0758f, 1722.7361f, 2128.6658f, 2519.1504f, 2825.5122f, 3086.1943f, 3330.0283f, 3608.2961f, 3906.9929f, 4241.8105f, 4603.1694f, 4972.8159f, 5308.1670f, 5651.1968f, 5976.6704f, + 699.1581f, 1293.3193f, 1637.3395f, 1912.7987f, 2163.3445f, 2425.7944f, 2704.0396f, 3006.5984f, 3358.2126f, 3746.1548f, 4125.0762f, 4489.7485f, 4854.0088f, 5188.5146f, 5558.2056f, 5913.3164f, + 489.0107f, 921.4806f, 1329.8511f, 1644.8383f, 2013.6794f, 2365.2683f, 2746.1553f, 3085.6912f, 3457.0234f, 3825.2183f, 4203.4224f, 4575.9331f, 4950.6606f, 5298.7559f, 5659.8618f, 5997.0015f, + 230.3653f, 389.8415f, 938.1970f, 1294.3594f, 1768.8275f, 2189.1001f, 2597.3755f, 2985.8518f, 3323.6023f, 3705.8533f, 4065.5361f, 4446.4224f, 4818.4502f, 5185.9634f, 5583.2168f, 5954.2573f, + 283.9404f, 400.2146f, 630.6198f, 1491.5646f, 2295.1375f, 2496.3457f, 2726.5803f, 2971.1951f, 3207.2317f, 3634.5439f, 4178.0376f, 4423.5537f, 4836.2109f, 5172.1821f, 5464.0454f, 5777.5801f, + 242.6232f, 351.1541f, 807.9852f, 1621.9950f, 2043.8676f, 2532.5122f, 2860.5505f, 3200.3403f, 3499.8274f, 3760.3772f, 4068.9617f, 4410.7339f, 4778.8413f, 5153.0142f, 5553.1997f, 5932.5996f, + 227.3320f, 323.2667f, 752.3189f, 1572.3750f, 1930.6083f, 2355.0117f, 2717.6223f, 2968.3215f, 3233.4026f, 3551.9622f, 3918.5608f, 4346.0190f, 4778.6880f, 5159.6172f, 5568.5566f, 5980.8086f, + 307.9120f, 439.7297f, 660.0276f, 1243.3854f, 1532.3577f, 1796.3936f, 2437.3232f, 2691.4072f, 3030.3025f, 3524.1379f, 3771.7576f, 4083.2375f, 4601.1567f, 4963.4697f, 5434.8530f, 5942.8315f +}; + +const float lsf_cdk_nb_gc_stg1[] = +{ + -50.2820f, -20.3699f, -85.9016f, -168.2552f, -219.7203f, -228.3721f, -209.7385f, -115.7139f, -70.1936f, 2.9143f, 53.7331f, 204.0881f, 324.2565f, 283.0311f, 194.2415f, 55.6127f, + -7.7024f, 55.3216f, 40.0302f, -2.6173f, -31.0254f, -49.9638f, -89.5104f, -79.9710f, -100.2947f, -84.2426f, -89.8130f, -44.4505f, 8.1330f, 123.3018f, 115.2609f, 17.5947f, + -29.7454f, 23.9522f, -6.6145f, -47.3088f, -83.6021f, -109.3905f, -118.2556f, -70.7910f, -71.2423f, -49.5609f, -49.3213f, 0.8054f, 70.8270f, 167.7499f, 132.1748f, 26.7946f, + -46.7868f, 21.9789f, 17.0331f, 1.6574f, -5.3416f, -1.5485f, -24.7294f, -2.2697f, -36.0918f, -31.9601f, -52.9409f, -18.2356f, -16.6137f, 52.8291f, 99.2958f, 9.2780f, + -48.8451f, -8.8573f, -49.2111f, -93.0997f, -116.0209f, -119.2193f, -130.6934f, -90.0435f, -85.8524f, -49.9080f, -30.8948f, 57.8291f, 207.6663f, 238.5938f, 162.1688f, 42.1291f, + 6.0599f, 96.6534f, 89.7254f, 64.7391f, 47.1759f, 39.3332f, 3.8599f, 12.1104f, -25.8483f, -30.7162f, -54.9950f, -24.3625f, -65.0093f, -91.8893f, 41.2788f, -9.3500f, + -74.6215f, -34.1444f, -45.1607f, -35.7601f, 20.1298f, 61.8053f, 45.9485f, 61.3004f, 23.1269f, 17.0184f, -14.6351f, 11.5369f, 40.6714f, 134.6762f, 127.4157f, 23.2286f, + -53.8382f, -7.1967f, 51.3428f, 149.2781f, 132.0314f, 106.9591f, 40.3082f, 28.7839f, -20.0071f, -32.1960f, -69.3754f, -44.7267f, -19.1058f, 81.8775f, 103.3263f, 11.7826f, + -83.4690f, -58.9994f, -100.6923f, -109.7423f, -77.3123f, -51.0569f, -49.0334f, -11.2254f, -13.7028f, 11.7115f, 17.4433f, 113.4333f, 269.5462f, 270.9727f, 181.4436f, 50.9590f, + 19.0904f, 106.4309f, 78.2419f, 22.1934f, -28.2661f, -71.6118f, -97.8980f, -57.5252f, -73.2944f, -59.0236f, -70.7380f, -30.7879f, -16.6118f, 71.0734f, 102.1686f, 10.6722f, + -44.5958f, 9.5910f, -9.9670f, -35.4491f, -36.7779f, -38.2726f, -71.5033f, -56.3692f, -75.3217f, -60.2630f, -64.3206f, -15.0396f, 51.1008f, 156.1136f, 128.1305f, 24.1397f, + -26.8342f, 50.7102f, 47.9495f, 34.1131f, 33.1750f, 40.6004f, 1.8381f, 6.9380f, -34.5476f, -37.5681f, -63.3813f, -32.2824f, -50.5980f, -25.5098f, 69.6276f, -1.2117f, + 6.7027f, 67.8112f, 38.0872f, -23.7302f, -79.0851f, -119.7724f, -146.1929f, -104.8024f, -107.0018f, -86.5365f, -75.9935f, -16.8613f, 84.1440f, 178.1427f, 133.5219f, 27.8811f, + 46.6789f, 157.1987f, 135.6186f, 86.3393f, 50.7338f, 16.6195f, -30.7043f, -23.0751f, -58.4989f, -58.2831f, -83.9640f, -51.4746f, -40.3803f, 39.6990f, 89.0926f, 5.3683f, + -66.8068f, -25.7930f, -49.4702f, -55.7445f, -47.4219f, -47.2327f, -55.9657f, -21.6380f, -32.0155f, -16.3766f, -23.1897f, 25.9724f, 108.6076f, 192.8678f, 143.8874f, 32.5168f, + -29.4610f, 51.1883f, 125.8174f, 178.0158f, 192.4019f, 200.6733f, 150.3214f, 139.0109f, 70.5642f, 49.0546f, 5.2967f, 10.7600f, -32.3233f, -56.1770f, 38.7244f, -6.3720f, + -90.7935f, -86.8579f, -165.1847f, -206.9982f, -177.3116f, -110.7218f, -60.4555f, 28.9968f, 59.3721f, 111.7430f, 148.9078f, 297.0840f, 382.8354f, 319.0586f, 217.5980f, 66.9906f, + -8.8907f, 51.2038f, 20.6150f, -25.0275f, -6.4919f, 28.5998f, -19.2903f, -28.0775f, -67.6854f, -70.6924f, -91.1332f, -51.9799f, 4.7191f, 121.9776f, 114.5332f, 16.9555f, + -29.5779f, 38.1348f, 16.9460f, -13.1717f, -43.7665f, -58.5053f, -66.8853f, -23.5223f, -47.7123f, -38.4358f, -52.6004f, -12.1781f, -9.5310f, 62.0772f, 102.4962f, 10.5329f, + -51.3839f, 10.1170f, 8.8413f, 7.1799f, 27.0856f, 57.8446f, 40.2151f, 55.8005f, 14.1522f, 8.5107f, -25.3037f, -4.1035f, -34.2602f, -19.2221f, 74.9812f, 1.2982f, + -9.0629f, 39.9632f, -4.2048f, -68.4062f, -125.5652f, -168.4946f, -200.3423f, -148.8132f, -131.2517f, -83.3627f, -43.4004f, 70.8276f, 231.0238f, 241.4682f, 165.0121f, 42.8259f, + 23.0736f, 143.9185f, 165.8485f, 141.1318f, 126.9031f, 113.7775f, 58.7625f, 48.6260f, 0.7530f, -14.8817f, -51.1437f, -31.9407f, -63.3610f, -68.5826f, 42.2195f, -8.3010f, + -64.7372f, -30.3666f, -13.8118f, 64.0613f, 130.9271f, 167.6980f, 130.2968f, 120.2481f, 53.8473f, 30.9594f, -13.2901f, -0.2919f, -12.6298f, 33.0601f, 89.8137f, 7.9164f, + -27.4071f, 46.5739f, 73.0324f, 90.7500f, 97.4257f, 110.0360f, 75.8612f, 77.2110f, 30.1418f, 14.8390f, -22.5191f, -7.5352f, -58.3772f, -104.3289f, 27.0985f, -11.5599f, + -48.6199f, -8.4983f, -71.8930f, -149.9820f, -149.4210f, -44.3473f, 3.8456f, 37.8226f, 11.8655f, 4.7745f, -23.8053f, 15.0402f, 99.2230f, 190.4169f, 143.6005f, 32.2851f, + 15.9306f, 86.2159f, 75.9614f, 40.8587f, 13.8614f, -5.1135f, -53.5447f, -49.2651f, -83.1781f, -77.3701f, -94.7805f, -58.1423f, -37.1552f, 59.5436f, 95.8876f, 7.8334f, + -71.4812f, -18.0191f, -10.6353f, -10.9646f, -4.7830f, 7.0689f, -8.9645f, 17.0751f, -8.9055f, -4.5033f, -26.7167f, 6.5207f, 41.1034f, 136.7648f, 126.6881f, 22.6529f, + -13.3071f, 67.8215f, 50.5701f, 22.0055f, -0.1895f, -16.2081f, -44.2669f, -15.2243f, -42.5961f, -37.7900f, -54.1335f, -14.8001f, -44.7622f, -39.3502f, 68.9017f, -1.9700f, + 54.4719f, 135.4882f, 107.6822f, 37.1723f, -15.7729f, -58.2111f, -117.6718f, -111.5628f, -125.9742f, -95.3344f, -71.1785f, 20.4405f, 178.9972f, 225.0608f, 154.3984f, 37.7039f, + 199.1418f, 301.5473f, 242.3446f, 156.1444f, 129.3343f, 112.5769f, 60.9076f, 24.7294f, -36.1788f, -44.7856f, -49.6138f, 35.8621f, 132.4271f, 180.8326f, 145.9355f, 30.7412f, + -95.8307f, -73.4794f, -76.3260f, -32.8480f, 25.0377f, 53.0367f, 47.9260f, 71.8612f, 48.9617f, 48.0805f, 31.5298f, 92.4644f, 215.5727f, 252.6642f, 172.3081f, 47.3738f, + -2.1387f, 144.6784f, 257.4241f, 293.7984f, 302.9054f, 301.4404f, 234.6555f, 199.2878f, 117.8049f, 82.4572f, 28.1316f, 27.9394f, -20.8952f, -53.5108f, 47.9862f, -3.2292f +}; + +const float lsf_cdk_nb_gc_stg2[] = +{ + -11.7897f, -34.0201f, -78.3915f, -67.4130f, 11.6646f, 27.0897f, + -25.4365f, -16.9519f, 1.3623f, -14.4721f, -40.8934f, -28.8082f, + -17.5541f, -24.8863f, -42.0546f, -57.4396f, -48.2462f, -17.3640f, + -23.4838f, -18.0105f, -23.4463f, -23.8641f, 20.1374f, 22.8944f, + -27.9673f, -51.2149f, -32.0136f, 58.4191f, 66.0445f, 33.8922f, + -28.8229f, -24.7667f, 12.6486f, 32.0241f, 14.4964f, 5.0635f, + 11.7718f, 12.7508f, -18.2755f, -64.0918f, -88.2808f, -46.2724f, + 11.7478f, -4.0560f, -28.8370f, -15.2873f, -17.0688f, -21.2716f, + 21.1704f, 4.6685f, -15.1944f, 19.2773f, 48.9464f, 24.7768f, + -31.9223f, -48.4027f, -40.5826f, -2.3521f, -7.7634f, -9.3639f, + 49.8116f, 38.9864f, -9.6274f, -43.4792f, -14.3368f, 6.7127f, + -17.8859f, 16.5261f, 17.9780f, -18.2431f, -4.9259f, 4.9691f, + 34.1057f, 28.5456f, 37.3357f, 25.9730f, -12.0323f, -14.3174f, + -35.7203f, -11.7712f, 71.0202f, 87.9962f, 53.5089f, 22.0342f, + -29.0835f, 7.8202f, 61.7147f, 30.4243f, -7.0096f, -12.3327f, + 121.0591f, 124.7827f, 86.3632f, 52.5283f, 25.7588f, 2.2977f +}; + +const float lsf_cdk_nb_gc_stg3[] = +{ + -20.1057f, -62.1359f, -90.9211f, -83.2088f, -41.8080f, 4.3801f, 64.9293f, 55.2259f, 18.8953f, 8.4560f, + -12.4851f, -29.8479f, -46.3014f, -59.0597f, -57.9280f, -55.5646f, -16.2912f, 29.7501f, 6.4438f, 1.9289f, + -42.4234f, -57.2848f, -42.1410f, -25.0914f, -20.5850f, -22.9466f, -28.6753f, -9.5206f, -2.8536f, -2.4606f, + 2.9437f, -3.2337f, -19.4418f, -30.8279f, -40.2200f, -54.7107f, -69.2608f, -36.5696f, -14.6763f, -7.4390f, + 56.9685f, 42.9405f, 2.6357f, -28.9316f, -41.7842f, -41.1244f, 7.2469f, 37.7725f, 9.4299f, 3.8716f, + -13.4056f, -11.0915f, -7.8932f, -4.4242f, -3.6432f, -6.2205f, -52.2374f, -101.3244f, -31.8836f, -12.9959f, + -49.5845f, -68.9839f, -40.9861f, -4.8425f, 25.7585f, 49.5206f, 52.3506f, 42.0803f, 18.1566f, 7.3750f, + 7.9175f, 30.0116f, 39.2961f, 39.8519f, 33.8428f, 18.7027f, -42.1156f, -114.4817f, -41.9139f, -14.3475f, + -10.3140f, -13.1813f, -8.6771f, -12.5086f, -7.9996f, 8.1476f, 62.8062f, 70.2916f, 23.1315f, 10.3555f, + 7.8827f, -9.7751f, -27.3751f, -19.0843f, -3.1083f, 5.0911f, -8.9477f, -1.9864f, -0.0476f, -1.0431f, + -25.6990f, -1.3466f, 13.9307f, -1.5450f, -21.5161f, -36.5054f, -27.3657f, 9.1052f, 0.5716f, -0.5675f, + 26.0226f, 39.0806f, 25.3016f, 10.6567f, -7.6451f, -27.7012f, -57.9450f, -49.0041f, -17.4613f, -8.2350f, + 24.7306f, 40.5991f, 39.1729f, 32.6364f, 20.0500f, 9.7588f, 17.8440f, 32.3000f, 10.7014f, 4.0975f, + -31.9825f, -23.6145f, 19.2348f, 43.8139f, 32.4545f, 14.8018f, -12.9031f, -14.2377f, -3.4099f, -2.2026f, + 17.4813f, 29.7370f, 40.6045f, 56.0407f, 77.3266f, 109.6360f, 126.9981f, 90.0105f, 41.2847f, 18.3934f, + 62.0530f, 98.1263f, 103.5605f, 86.5243f, 56.8051f, 24.7345f, -16.4333f, -39.4116f, -16.3685f, -5.1868f +}; + +const float lsf_cdk_nb_vc_stg1[] = +{ + -47.8739f, -33.3324f, -111.7403f, -187.1021f, -217.8067f, -211.2333f, -197.1951f, -112.5993f, -54.4085f, 25.6601f, 103.3922f, 273.8963f, 384.4787f, 321.9756f, 214.8825f, 64.7502f, + 5.7213f, 62.0822f, 4.1813f, -75.3379f, -130.0791f, -169.8000f, -137.2333f, -8.1913f, 9.1551f, 12.5919f, -10.2666f, 24.1670f, 78.8903f, 170.0603f, 136.5900f, 28.5131f, + -61.2759f, -38.8420f, -92.0781f, -106.8447f, -84.5683f, -75.2343f, -90.1177f, -57.8575f, -57.3309f, -23.0973f, -6.5859f, 96.8941f, 263.0488f, 266.3097f, 177.9874f, 48.9404f, + -4.6756f, 65.2555f, 47.7555f, 30.0066f, 28.7910f, 33.2401f, 1.0363f, 13.6479f, -20.0856f, -24.5283f, -44.3793f, -10.0354f, -56.2017f, -77.3347f, 55.5984f, -6.2838f, + -40.8653f, -14.8363f, -92.0112f, -175.7323f, -221.1710f, -161.1121f, -52.8429f, 37.5645f, 41.2468f, 45.5229f, 26.4500f, 86.3998f, 219.2824f, 253.3986f, 172.4165f, 46.3912f, + -35.6673f, 17.5904f, -11.9410f, -25.7858f, -8.8584f, 21.6273f, 0.1729f, 6.5783f, -34.6991f, -36.4150f, -56.0023f, -21.0789f, -19.8846f, 54.1067f, 99.1987f, 9.4728f, + -14.2776f, 27.3931f, -14.6997f, -66.6010f, -99.6813f, -122.6578f, -150.2305f, -113.9728f, -109.1274f, -78.9555f, -60.2257f, 27.8011f, 190.2385f, 229.8084f, 157.2525f, 39.3867f, + 7.6929f, 67.9322f, 38.8456f, -21.1201f, -59.7777f, -99.3488f, -141.1098f, -110.2669f, -114.7237f, -91.8703f, -77.7551f, -15.8694f, 90.5305f, 184.5058f, 136.0935f, 29.0311f, + -81.2402f, -78.5803f, -151.4014f, -172.9501f, -128.6324f, -73.2223f, -54.4444f, -10.0382f, 0.8191f, 49.8313f, 85.4796f, 237.9407f, 375.9963f, 320.3293f, 212.6340f, 64.0690f, + -7.5501f, 56.9796f, 22.4374f, -12.3837f, -25.5942f, -46.4205f, -67.6393f, -25.5805f, -48.1321f, -39.6622f, -53.1014f, -11.2472f, -23.2435f, 35.6549f, 94.7977f, 6.9705f, + -35.2312f, 5.7296f, -40.3538f, -74.0301f, -73.9051f, -78.4101f, -69.6657f, -23.5663f, -38.8351f, -23.3996f, -29.2527f, 14.7714f, 60.7441f, 159.3770f, 132.0680f, 26.1624f, + 63.7916f, 158.4710f, 108.6537f, 49.2831f, 12.4814f, -34.2755f, -68.0055f, -38.2006f, -61.2743f, -54.7496f, -73.2102f, -37.3536f, -2.8530f, 99.6502f, 109.4658f, 14.7136f, + -46.8550f, -17.8951f, -73.5817f, -109.9269f, -59.6995f, 13.9228f, 17.3227f, 37.6147f, 5.2378f, 2.5800f, -15.0369f, 23.6412f, 86.2658f, 178.2385f, 140.5764f, 30.3354f, + -64.0179f, -34.7786f, -33.8634f, 32.5490f, 41.5821f, 30.0052f, 2.8933f, 7.9098f, -23.6020f, -21.4437f, -40.3389f, -5.3147f, 46.4389f, 149.8765f, 129.5062f, 24.3633f, + 53.2208f, 88.2962f, 18.1083f, -68.6983f, -163.9225f, -257.5996f, -286.3273f, -136.1982f, -54.0297f, 17.4621f, 96.5930f, 257.5079f, 374.4247f, 316.8143f, 211.5481f, 63.1783f, + 174.9770f, 220.4714f, 114.9514f, 39.1980f, 15.6628f, -57.4971f, -151.3537f, -151.4255f, -122.5434f, -39.5915f, 43.3476f, 204.8011f, 347.0733f, 300.8141f, 202.2481f, 58.3570f, + -24.8002f, 5.5647f, -51.1305f, -108.2679f, -143.4691f, -168.1934f, -183.0667f, -123.7768f, -105.2566f, -53.2548f, -15.6183f, 132.2483f, 301.9698f, 276.6960f, 185.6425f, 51.4215f, + 63.0767f, 97.9030f, 23.3427f, -27.8271f, -7.6827f, 11.5110f, -9.1648f, -16.5310f, -60.2418f, -68.6020f, -79.4697f, -9.9630f, 143.1208f, 212.2018f, 148.4344f, 34.8853f, + -52.8577f, -17.0901f, -38.4446f, -44.4913f, -48.3650f, -49.3479f, -79.7237f, -66.0328f, -77.9226f, -56.8956f, -48.1326f, 19.1059f, 138.4749f, 210.3387f, 148.5705f, 35.3026f, + 16.4209f, 102.4966f, 100.9513f, 64.0511f, 50.2873f, 36.1014f, -21.6103f, -26.7705f, -65.0290f, -62.8056f, -83.1056f, -46.5621f, -51.3341f, 1.7945f, 78.1135f, 1.0912f, + -75.6609f, -71.8274f, -139.7561f, -117.4244f, -22.4806f, 39.5285f, 53.1389f, 65.2518f, 36.9996f, 37.9781f, 25.3240f, 92.8186f, 227.9041f, 260.3466f, 176.7927f, 48.2170f, + -18.6440f, 33.8824f, 28.5803f, 10.9212f, 5.0722f, 4.4072f, -39.6675f, -38.3990f, -75.6662f, -72.1438f, -87.2765f, -46.7029f, -6.7231f, 107.6602f, 110.8838f, 15.3706f, + 21.3981f, 74.2394f, 19.3760f, -47.0944f, -99.2094f, -138.5254f, -193.3578f, -171.5091f, -176.8980f, -112.0385f, -43.8164f, 79.0272f, 251.8247f, 251.6656f, 170.8083f, 44.5524f, + 67.4133f, 149.9282f, 118.6238f, 30.5943f, -33.2344f, -70.7200f, -120.6338f, -105.4183f, -118.8368f, -86.5003f, -64.0278f, 50.0950f, 231.7671f, 247.4923f, 167.0543f, 43.3706f, + -40.9878f, -39.3167f, -163.9672f, -281.7721f, -267.4339f, -138.3948f, -88.8411f, 0.7440f, 65.0724f, 165.9769f, 269.7260f, 427.8145f, 485.5638f, 388.7820f, 254.5937f, 84.1430f, + 12.9002f, 76.9394f, 62.5283f, 13.6656f, -10.4341f, -35.7194f, -84.1773f, -75.4588f, -98.8663f, -85.0203f, -91.0417f, -43.6094f, 6.1868f, 120.0995f, 114.3634f, 17.2779f, + -21.4884f, 29.4970f, 1.0910f, -37.4928f, -55.1841f, -66.8253f, -92.8491f, -74.1643f, -90.3904f, -72.3158f, -69.6267f, -16.2943f, 51.2075f, 158.6230f, 128.0881f, 24.5940f, + 140.4902f, 213.5873f, 167.7455f, 102.0038f, 85.7659f, 59.5426f, 9.2403f, -0.7622f, -35.6690f, -35.9801f, -58.6565f, -15.1000f, 23.5135f, 101.5155f, 111.5278f, 16.5967f, + -62.8100f, -47.2312f, -97.3130f, -60.9976f, 82.6761f, 193.9902f, 154.0588f, 118.2896f, 43.6828f, 13.9735f, -22.6650f, 0.5943f, 26.8732f, 111.3673f, 120.5305f, 20.1022f, + -44.4747f, -10.4204f, 32.1805f, 131.3261f, 157.9129f, 155.8841f, 90.2107f, 70.7406f, 9.4064f, -4.0535f, -42.4163f, -26.0150f, -39.1314f, 20.5559f, 82.2390f, 4.9553f, + 88.4086f, 134.4090f, 60.3778f, -13.5659f, -72.1912f, -160.4579f, -261.2583f, -247.6886f, -121.4628f, -13.9737f, 35.4003f, 197.3431f, 335.8232f, 294.0672f, 197.4029f, 56.5130f, + 267.3715f, 336.4754f, 224.6896f, 104.9689f, 104.5109f, 94.7971f, -20.0482f, -88.9197f, -142.8754f, -60.7279f, 30.3207f, 189.5033f, 335.5709f, 295.5561f, 200.0838f, 57.2552f +}; + +const float lsf_cdk_nb_vc_stg2[] = +{ + -9.6827f, -17.9738f, -44.2587f, -53.7409f, 10.1005f, 32.4057f, + -29.5803f, -35.3673f, -50.3175f, -49.1053f, -47.5762f, -37.2894f, + -10.3138f, -3.1171f, 2.9317f, -20.2045f, -78.9643f, -84.6932f, + 13.6252f, 8.7360f, -21.5126f, -20.8022f, -14.8279f, -30.9676f, + -28.1089f, -48.1602f, -64.6161f, -0.2872f, 108.6371f, 93.6271f, + -38.2393f, 1.9703f, 14.1451f, -7.5949f, 39.2872f, 33.7052f, + -38.5209f, -10.1299f, 61.9126f, 45.3993f, -7.5115f, -17.0167f, + 26.2164f, 20.2119f, 40.4075f, 45.2381f, -2.3925f, -17.4109f, + -19.1953f, -10.5024f, 12.6622f, -19.8408f, -40.6066f, 1.8757f, + -32.7274f, -41.0545f, -26.1793f, 15.7486f, 1.2783f, -17.0256f, + 3.5921f, 2.2211f, -27.0254f, -81.1776f, -88.9427f, -11.1151f, + 48.7753f, 42.6625f, 3.8241f, -21.1582f, 27.5770f, 36.8815f, + 6.8266f, -6.1852f, -19.6226f, 28.9512f, 50.9852f, 15.2853f, + -33.3786f, -38.1386f, 24.6782f, 95.1954f, 64.2442f, 33.4105f, + 49.0652f, 49.8207f, 29.3688f, -11.7891f, -57.3484f, -44.4722f, + 91.6464f, 85.0063f, 63.6020f, 55.1679f, 36.0606f, 12.7997f +}; + +const float lsf_cdk_nb_vc_stg3[] = +{ + -16.5483f, -67.8691f, -113.3476f, -92.9768f, -18.1549f, 21.7013f, 31.7869f, 25.1431f, 9.0112f, 3.4920f, + -7.8375f, -22.7162f, -45.0895f, -61.3419f, -64.4643f, -67.3643f, -44.8953f, -6.2556f, -7.9342f, -3.9490f, + -63.5255f, -72.6896f, -45.5471f, -30.5803f, -26.8317f, -24.4668f, -15.1301f, 4.8754f, -0.5588f, -0.8157f, + -2.2381f, 13.4403f, 16.0097f, 1.0526f, -24.8448f, -61.3997f, -91.3894f, -39.4637f, -19.2183f, -9.1265f, + -16.0140f, -32.7087f, -45.2478f, -59.4365f, -60.1819f, -31.6687f, 70.4575f, 64.2544f, 19.1841f, 9.3201f, + -8.2141f, 2.4761f, 7.4360f, 11.7049f, 14.0396f, 16.9693f, -53.7166f, -119.3159f, -33.5007f, -15.4114f, + -64.5115f, -52.5888f, 30.5453f, 56.2986f, 31.6535f, 9.3509f, 4.3678f, 13.3055f, 5.1440f, 2.0290f, + 22.3180f, 44.1101f, 48.7477f, 40.2739f, 14.9495f, -7.3707f, -10.3082f, 6.3741f, 1.0122f, 0.2673f, + -42.3440f, -58.8447f, -42.2171f, -8.0384f, 34.3873f, 59.7095f, 50.7660f, 38.7146f, 16.7582f, 7.2512f, + -0.1088f, -28.5624f, -30.3477f, -2.8206f, -1.3093f, -12.9286f, -21.2371f, -1.4331f, -2.6014f, -1.5170f, + -41.2001f, 4.7383f, 13.3788f, -12.5767f, -22.3489f, -14.4064f, 10.9753f, 22.2182f, 6.2625f, 2.5488f, + 63.9302f, 51.1717f, 10.5411f, -23.3105f, -47.9860f, -59.1260f, -29.9675f, 0.0559f, -4.8774f, -2.3217f, + 37.1022f, 14.8587f, -19.5761f, -23.3122f, 2.3273f, 32.9204f, 53.1779f, 43.4994f, 16.5403f, 7.5156f, + 48.8143f, 82.6708f, 85.7133f, 77.5688f, 56.9332f, 24.0950f, -63.9412f, -138.5729f, -45.8026f, -17.6440f, + -4.0024f, 18.2212f, 40.5425f, 57.9095f, 69.5262f, 79.8498f, 71.0971f, 51.3637f, 24.2751f, 10.9558f, + 94.3797f, 104.2925f, 88.4585f, 69.5855f, 42.3052f, 34.1349f, 37.9570f, 35.2368f, 16.3058f, 7.4056f +}; + +const float lsf_cdk_wb_gc_stg1[] = +{ + -21.1721f, -6.9787f, -78.7739f, -158.7331f, -205.5198f, -259.2706f, -287.6161f, -271.9965f, -264.8213f, -231.0206f, -194.9294f, -147.7609f, -117.1413f, -85.8077f, -63.7689f, -31.4680f, + -66.9546f, -30.5144f, -36.8376f, -53.0491f, -36.1642f, -48.5647f, -62.2295f, -55.2760f, -57.6386f, -55.8977f, -55.9952f, -40.6957f, -43.2573f, -33.7185f, -37.3113f, -27.4703f, + -18.0276f, 24.5300f, -3.1374f, -40.7788f, -39.2887f, -55.1486f, -87.4694f, -97.8466f, -113.0920f, -112.2454f, -110.4983f, -92.0446f, -80.8734f, -57.2883f, -52.4648f, -39.3426f, + -14.5043f, 41.4594f, 30.8683f, 19.7189f, 29.0785f, 7.4155f, -21.7427f, -23.9321f, -38.3113f, -41.2907f, -40.8309f, -25.7969f, -29.7702f, -20.8620f, -29.2581f, -26.0135f, + -39.7173f, -14.6068f, -62.7880f, -111.0359f, -122.7799f, -150.6084f, -167.3332f, -164.6087f, -165.9175f, -146.9592f, -135.1085f, -110.8433f, -97.6828f, -72.7079f, -64.6184f, -45.5537f, + -42.5539f, 26.5080f, 31.4593f, 1.2393f, 1.6319f, 6.6465f, 16.6621f, 35.3616f, 33.5966f, 53.0816f, 65.9800f, 78.6870f, 64.5119f, 50.4778f, 20.7076f, 7.5572f, + -2.4650f, 88.7057f, 93.4778f, 47.6900f, 47.2210f, 51.8796f, 27.4629f, 23.3020f, 8.4560f, 12.2382f, 12.4948f, 25.9549f, 18.2040f, 17.5385f, -2.2674f, -6.8910f, + -25.2995f, 40.1554f, 131.5320f, 193.8438f, 224.6298f, 213.8258f, 187.1185f, 169.5623f, 131.4438f, 108.3838f, 93.4648f, 94.1147f, 68.7427f, 48.9293f, 15.1647f, 1.4396f, + -63.4604f, -63.8774f, -152.1996f, -247.2777f, -281.1492f, -288.1032f, -252.3883f, -181.6764f, -141.4441f, -90.3039f, -56.5279f, -23.8054f, -11.9068f, -1.3377f, -7.5474f, -0.6953f, + -77.4333f, -60.8457f, -86.6258f, -86.4012f, -29.1547f, 7.2174f, 40.0438f, 63.6826f, 53.0035f, 51.5329f, 55.6684f, 68.8552f, 50.7040f, 34.0814f, 7.7594f, -2.1278f, + 30.9564f, 87.5489f, 69.5663f, 23.2907f, 13.9146f, -0.9477f, -37.0125f, -58.8950f, -99.1749f, -117.9716f, -127.4967f, -107.3465f, -91.7610f, -62.6527f, -50.4613f, -32.9533f, + -64.2954f, -37.5670f, -21.0138f, 41.6351f, 121.9423f, 170.7496f, 195.4955f, 225.2859f, 224.2241f, 223.8838f, 222.3937f, 225.7590f, 188.7341f, 143.2967f, 83.3796f, 41.8113f, + 10.6654f, 55.4135f, 18.0177f, -53.2381f, -88.7693f, -114.5825f, -122.2372f, -110.6857f, -120.7652f, -124.3872f, -136.2432f, -135.4537f, -132.9560f, -104.3421f, -82.6202f, -57.8286f, + -56.8219f, -2.2176f, 4.5106f, 4.9045f, 63.5084f, 94.3949f, 92.6963f, 98.2198f, 78.5731f, 65.0247f, 60.8502f, 70.0685f, 53.4160f, 34.2990f, 2.3436f, -13.6945f, + 62.5259f, 160.0315f, 153.0699f, 116.3367f, 94.9113f, 59.6879f, 36.7834f, 42.8554f, 34.9832f, 32.1663f, 34.2612f, 46.5764f, 32.6032f, 22.8721f, -2.2313f, -9.0276f, + -17.8885f, 81.5994f, 153.8725f, 203.3483f, 260.8972f, 308.2464f, 337.7084f, 369.5280f, 355.1932f, 340.5538f, 332.7582f, 318.9620f, 261.2268f, 196.0706f, 116.6797f, 63.9204f, + 20.6478f, 57.4084f, 3.7268f, -83.6103f, -145.3750f, -207.9262f, -235.3695f, -209.9292f, -200.7669f, -173.1530f, -148.7498f, -120.9027f, -110.3875f, -91.3718f, -83.8093f, -58.7850f, + -39.9125f, 14.8531f, -3.7779f, -42.3801f, -47.0086f, -54.0654f, -37.4186f, -7.7530f, -2.3503f, 11.8227f, 22.9690f, 37.9258f, 31.1117f, 26.1390f, 3.9131f, -4.7425f, + 13.2679f, 79.8638f, 51.3108f, -15.0032f, -39.4744f, -78.1680f, -87.2337f, -58.9813f, -51.8486f, -39.6199f, -34.6732f, -22.2829f, -24.1548f, -18.6608f, -25.3619f, -24.4411f, + -31.4295f, 11.0108f, 63.6155f, 150.7589f, 166.6739f, 132.7679f, 86.6371f, 71.7386f, 36.6906f, 13.2914f, -2.6491f, 5.5439f, -13.1750f, -13.8798f, -27.3878f, -22.3777f, + -24.3473f, 16.7839f, -21.6102f, -77.9093f, -107.7952f, -144.9666f, -139.6022f, -95.3828f, -79.5686f, -54.4138f, -40.2750f, -17.7668f, -12.9124f, -7.1218f, -21.3606f, -21.7144f, + -3.0221f, 85.8766f, 60.9027f, 16.5821f, 7.9817f, -16.4117f, -11.2119f, 17.4948f, 20.8488f, 33.8053f, 43.5158f, 54.6661f, 45.1287f, 38.3086f, 11.1080f, 2.6446f, + 6.4417f, 122.4950f, 125.6148f, 93.2892f, 108.5553f, 111.2156f, 105.3841f, 113.7573f, 102.0970f, 107.1194f, 105.9578f, 110.0393f, 89.3394f, 67.9986f, 28.3953f, 10.5845f, + 5.3008f, 132.8202f, 246.6148f, 259.5175f, 279.9749f, 270.1955f, 242.3427f, 226.1996f, 198.6216f, 175.1598f, 153.5215f, 148.0765f, 116.8644f, 82.8352f, 39.2114f, 16.4926f, + -77.2826f, -81.0630f, -142.8123f, -175.7374f, -154.6778f, -134.7003f, -107.5754f, -71.3200f, -53.8328f, -25.9739f, -7.0973f, 14.6180f, 12.4415f, 12.6191f, -3.8318f, -4.2210f, + -73.5975f, -49.6810f, -33.1272f, 10.8925f, 60.1080f, 61.8344f, 45.3548f, 45.5924f, 22.6090f, 11.2679f, 6.9455f, 18.9899f, -3.4566f, -13.0973f, -24.6136f, -17.3529f, + 93.3489f, 170.7564f, 135.3343f, 56.2893f, 22.2173f, -20.1927f, -41.3723f, -39.2133f, -50.1699f, -54.9363f, -60.2521f, -47.5990f, -54.0679f, -44.0381f, -47.1772f, -37.0088f, + -27.3811f, 60.8027f, 88.5729f, 82.6088f, 118.1956f, 140.5540f, 153.1990f, 173.3699f, 166.1148f, 168.4157f, 165.4583f, 168.4201f, 141.6623f, 111.7883f, 61.8626f, 28.6598f, + 61.0331f, 119.7275f, 83.9777f, -1.2269f, -56.5834f, -121.3104f, -176.1751f, -202.5282f, -219.9765f, -194.9138f, -167.0230f, -130.8084f, -105.0937f, -81.6082f, -73.9476f, -53.6392f, + -27.5935f, 45.9596f, 43.4074f, 35.4528f, 51.8229f, 58.2166f, 66.0162f, 87.5896f, 84.5125f, 96.2322f, 104.1692f, 116.0263f, 98.4793f, 78.3333f, 38.3067f, 15.3865f, + 174.0302f, 282.5094f, 259.6900f, 204.4108f, 189.3996f, 158.0569f, 123.9944f, 123.1922f, 118.3560f, 110.6961f, 101.0661f, 96.5273f, 78.1838f, 52.7614f, 22.4974f, 2.3781f, + 59.8885f, 245.4498f, 371.2458f, 409.7723f, 455.9382f, 450.3678f, 424.1982f, 412.1477f, 364.9408f, 325.9947f, 285.4946f, 257.5709f, 202.0349f, 150.8332f, 79.0164f, 39.6259f +}; + +const float lsf_cdk_wb_gc_stg2[] = +{ + -30.3104f, -56.7575f, -84.1487f, -72.1960f, -22.8352f, 3.3243f, + -46.3791f, -58.1840f, -25.7428f, -7.3327f, -15.5902f, -11.0671f, + -25.6715f, -22.2643f, -12.1418f, -44.6014f, -57.5933f, -25.0539f, + 20.6377f, 3.9627f, -56.7740f, -110.5344f, -99.0040f, -23.5388f, + -33.0807f, -65.7310f, -43.7344f, 59.6097f, 60.3127f, 29.3885f, + 12.2596f, 64.5636f, 86.5834f, 56.7668f, 33.1992f, 8.0321f, + -27.2580f, -0.3414f, 60.0624f, 27.3071f, -13.3937f, -18.6842f, + 24.2406f, 11.7818f, 14.7099f, 38.2644f, 1.7464f, -12.1068f, + 7.3676f, -14.0551f, -58.7823f, -43.8456f, 44.8481f, 49.4476f, + -27.1385f, -20.1290f, 3.2930f, 11.7314f, 24.8512f, 17.5045f, + 6.8143f, -14.7678f, -42.8682f, -16.1166f, -13.7942f, -20.4421f, + 1.4928f, 29.4512f, 13.1269f, -26.8534f, -7.1498f, 6.9288f, + 12.0685f, 25.8088f, 13.8913f, 37.8771f, 77.3020f, 41.3878f, + -31.3089f, -16.5767f, 72.2701f, 101.6937f, 66.1076f, 29.3520f, + 33.0047f, 43.3667f, 18.6451f, -26.2905f, -83.9726f, -67.8400f, + 103.2615f, 89.8720f, 41.6101f, 14.5203f, 4.9658f, -6.6327f +}; + +const float lsf_cdk_wb_gc_stg3[] = +{ + -41.3186f, -87.9369f, -117.0141f, -113.4593f, -76.4138f, -35.5126f, -13.8432f, -7.5581f, -3.0880f, 2.3802f, + -19.0684f, -32.7726f, -38.9479f, -44.5597f, -48.0524f, -54.3931f, -59.1547f, -53.0509f, -42.1806f, -24.7633f, + 27.3501f, -3.4361f, -42.3300f, -83.6244f, -126.2025f, -139.2743f, -121.0968f, -84.5803f, -46.8967f, -18.1514f, + -0.8794f, 7.8351f, 13.7504f, 10.5629f, -2.3365f, -27.6351f, -53.8406f, -67.9140f, -63.0094f, -41.9336f, + 9.4961f, -11.0357f, -24.5415f, -6.6821f, 20.3012f, 24.1832f, 9.4935f, -5.4294f, -16.9057f, -12.2235f, + -53.4765f, -68.3201f, -39.2295f, -10.3152f, -3.0430f, -6.2765f, -10.5345f, -10.9752f, -8.2812f, -5.0682f, + 52.0481f, 94.0614f, 84.0495f, 48.7509f, 4.2751f, -40.3696f, -69.1195f, -63.3772f, -42.9216f, -24.6160f, + 10.0049f, 13.7676f, 17.2697f, 29.3297f, 46.7856f, 60.3615f, 66.0947f, 59.6799f, 45.2938f, 27.9216f, + 3.2564f, -15.2692f, -47.6037f, -66.2845f, -62.6754f, -33.3695f, 8.7487f, 22.9938f, 23.4655f, 15.0233f, + -23.6148f, 4.1981f, 21.0969f, 4.2267f, -12.9805f, -17.4187f, -2.7787f, 14.0826f, 22.1174f, 12.4585f, + 44.7733f, 31.5401f, -0.1129f, -26.8177f, -43.6473f, -45.9941f, -38.3653f, -26.4489f, -17.8081f, -11.4307f, + -21.6468f, 9.0710f, 56.6256f, 68.0223f, 58.5665f, 37.6095f, 13.9228f, -1.0286f, -7.3812f, -7.6752f, + 45.1285f, 52.2192f, 35.8172f, 24.0812f, 18.9679f, 16.9917f, 14.5014f, 8.4539f, -0.8742f, -3.9224f, + -36.6106f, -54.0904f, -50.6995f, -17.6751f, 24.5062f, 61.1192f, 77.2085f, 68.1297f, 51.1173f, 30.6627f, + 45.4659f, 77.8448f, 86.8785f, 84.8886f, 78.1169f, 70.7257f, 58.9888f, 47.0442f, 34.4050f, 19.2233f, + -40.9082f, -17.6764f, 44.9914f, 99.5556f, 123.8320f, 129.2527f, 119.7749f, 99.9787f, 72.9475f, 42.1147f +}; + +const float lsf_cdk_wb_vc_stg1[] = +{ + -28.5460f, -28.7607f, -132.3446f, -253.0434f, -312.8796f, -342.8824f, -300.5386f, -244.2990f, -209.7251f, -159.5373f, -112.6287f, -67.3791f, -48.8219f, -29.0922f, -22.2704f, -4.3572f, + -46.5981f, -22.9649f, -50.9384f, -55.9409f, -47.4823f, -67.2740f, -93.7612f, -98.1688f, -103.5437f, -102.1144f, -101.9471f, -86.9149f, -76.1870f, -53.2461f, -51.2004f, -39.3148f, + 12.7666f, 41.7683f, -13.1290f, -96.2977f, -149.3018f, -210.6122f, -234.0799f, -215.3711f, -220.5745f, -210.7746f, -191.5374f, -156.6170f, -137.7840f, -109.8098f, -92.2552f, -56.2013f, + -45.2993f, -13.6438f, -31.2795f, 0.5585f, 26.1751f, 13.9611f, 18.6252f, 28.1510f, 20.3802f, 26.9694f, 32.9577f, 42.5006f, 29.2892f, 25.1029f, 1.3317f, -5.8774f, + -65.7100f, -62.1535f, -124.6012f, -161.3454f, -151.1323f, -164.9561f, -165.1614f, -150.4622f, -139.8421f, -109.2422f, -83.0457f, -55.1891f, -45.0696f, -29.5104f, -29.5390f, -21.1071f, + -75.2456f, -87.4543f, -164.3682f, -176.4217f, -83.4371f, -28.9912f, -6.9410f, 7.5825f, -2.7413f, 1.1408f, 4.1258f, 6.3013f, -0.6780f, -0.2756f, -18.0540f, -14.7263f, + 109.2056f, 132.5509f, 37.4910f, -93.8923f, -199.5966f, -323.5385f, -370.8597f, -259.1066f, -144.1366f, -52.9207f, -7.3753f, 8.7209f, 4.6669f, 18.2182f, 35.3204f, 18.9218f, + 34.9292f, 54.1737f, -19.4212f, -84.9971f, -62.3420f, -22.1402f, -18.0859f, -54.5195f, -107.3912f, -147.4533f, -198.2396f, -216.4862f, -199.3848f, -152.0050f, -94.9586f, -38.9081f, + -43.7524f, -65.5612f, -209.2403f, -339.0183f, -315.2712f, -219.0569f, -129.2175f, -68.7060f, -44.3255f, -17.2217f, 5.9129f, 29.8303f, 18.2167f, 13.0068f, -3.9593f, 4.1232f, + -20.9014f, 30.0658f, 17.8576f, -24.7442f, -27.5837f, -29.5508f, -45.9995f, -42.7483f, -54.9773f, -59.2762f, -57.4101f, -42.5711f, -43.9485f, -38.1621f, -41.1044f, -32.5227f, + -0.5370f, 38.0716f, 14.4030f, -41.8046f, -67.6856f, -96.6404f, -122.3561f, -123.7498f, -138.9439f, -138.4913f, -136.8318f, -124.9522f, -118.9503f, -96.3028f, -81.0357f, -58.1597f, + -19.4244f, 61.2237f, 71.3972f, 25.6367f, 35.9458f, 21.4457f, -1.7383f, 3.2413f, -12.2673f, -20.9311f, -19.4463f, -5.0683f, -9.0711f, -11.3618f, -25.0494f, -19.2853f, + -30.0686f, 7.6179f, -29.1133f, -90.4660f, -97.3464f, -101.9661f, -79.7809f, -41.4927f, -30.2058f, -14.9387f, -1.3463f, 14.7957f, 5.7342f, -1.8387f, -13.7457f, -15.5035f, + -60.0474f, -62.2162f, -94.9658f, -16.5692f, 137.3642f, 195.2581f, 171.5869f, 140.1564f, 102.9256f, 81.4529f, 62.9621f, 57.0500f, 25.7595f, 5.7185f, -17.0122f, -18.2020f, + 186.4318f, 224.6768f, 114.4757f, -1.7200f, -54.2938f, -162.2942f, -260.9445f, -305.8334f, -275.9291f, -196.7974f, -106.2413f, -38.2122f, -9.9698f, -0.0348f, -3.2806f, -1.0904f, + 131.8525f, 182.9257f, 129.5468f, 39.5803f, -1.4035f, -45.6323f, -49.7229f, -34.2829f, -46.2254f, -45.3785f, -41.8506f, -32.6587f, -52.7586f, -51.1091f, -48.4846f, -48.8108f, + -7.2430f, 5.5232f, -74.0471f, -159.3008f, -202.7316f, -252.2241f, -289.9449f, -278.4816f, -262.2343f, -234.1872f, -194.1267f, -147.2734f, -119.3163f, -94.6419f, -70.6759f, -32.5601f, + -22.3081f, -6.0222f, -71.4069f, -57.5585f, 87.3579f, 111.3674f, 19.2319f, -62.1519f, -140.4286f, -175.0389f, -160.2987f, -104.7539f, -80.1002f, -50.0734f, -23.5490f, 1.6408f, + 23.3797f, 81.2481f, 31.3892f, -52.3576f, -81.9250f, -125.5061f, -125.9686f, -77.3511f, -70.4429f, -55.1778f, -44.3888f, -25.9966f, -26.5913f, -23.2118f, -31.8502f, -31.7050f, + -27.1231f, 37.7616f, 25.1095f, 15.1436f, 46.6224f, 72.7080f, 91.0447f, 118.4813f, 115.1246f, 132.4240f, 135.0095f, 145.7460f, 121.1771f, 93.8520f, 46.9298f, 19.6713f, + -19.2617f, 10.4880f, -44.5537f, -114.3566f, -130.3973f, -156.7718f, -173.2891f, -165.3661f, -167.0274f, -147.1746f, -129.2874f, -104.7640f, -95.4641f, -77.5872f, -69.6100f, -49.0499f, + -3.7184f, 35.4165f, -28.7033f, -86.2246f, -61.2082f, -15.9498f, 31.1702f, 56.3138f, 49.9412f, 77.3057f, 94.0143f, 94.3239f, 78.8126f, 62.9187f, 30.4449f, 9.8069f, + 55.4567f, 100.2570f, 28.4890f, -59.9100f, -114.0757f, -166.5609f, -236.0665f, -274.6304f, -256.7512f, -58.8984f, 6.9854f, 2.1456f, 44.3655f, 27.4061f, -65.0542f, -69.1642f, + 95.5202f, 139.3445f, 117.4449f, 81.4589f, 34.9276f, -44.4909f, -90.4718f, -127.2388f, -175.4005f, -220.3445f, -288.6741f, -303.4144f, -260.5738f, -126.2845f, -58.1968f, -29.1673f, + 3.0556f, 18.3576f, -71.4110f, -183.6864f, -237.4567f, -273.2383f, -199.6331f, -69.6698f, -37.7715f, -22.6972f, -8.8733f, 16.1036f, 11.3358f, -3.2045f, -17.9569f, -20.6306f, + 39.1896f, 96.2913f, 80.5943f, 18.4912f, -3.4620f, -34.5205f, -64.0148f, -77.2972f, -99.9022f, -107.3139f, -104.8068f, -92.0120f, -86.4257f, -73.8585f, -70.7371f, -53.2077f, + 81.1530f, 122.0539f, 53.2063f, -53.6774f, -106.3376f, -163.4776f, -180.9786f, -175.0377f, -183.3532f, -183.5190f, -169.4248f, -137.3097f, -123.3554f, -101.5521f, -94.1512f, -61.8612f, + 47.0309f, 137.9525f, 111.1768f, 67.6681f, 63.8415f, 52.4017f, 35.8194f, 35.6828f, 19.7444f, 10.1125f, 6.1064f, 10.9675f, 5.0407f, -0.1812f, -16.8272f, -19.3810f, + 42.6721f, 92.5038f, 31.4316f, -5.1224f, -6.0796f, -41.9120f, -30.0922f, 1.7396f, 15.4681f, 21.9765f, 36.6015f, 47.1275f, 37.4374f, 28.9853f, 9.1342f, 2.7556f, + -25.6593f, 22.2684f, 98.1230f, 166.4577f, 187.4970f, 165.0274f, 123.8612f, 113.1471f, 79.0653f, 48.7839f, 25.8742f, 32.9158f, 10.3013f, 1.0495f, -15.4120f, -15.0391f, + 304.7019f, 354.4388f, 217.4228f, 65.5482f, 65.3717f, 25.9965f, -93.4052f, -188.0092f, -255.0247f, -224.5901f, -158.7919f, -116.2751f, -72.5203f, -57.4171f, -28.9851f, -1.9506f, + 179.5714f, 241.9845f, 193.4582f, 112.7762f, 108.6980f, 80.4323f, 56.9618f, 58.6676f, 36.2938f, 12.8297f, 4.7285f, 10.9217f, 12.0551f, 12.0937f, 1.6504f, -14.7259f +}; + +const float lsf_cdk_wb_vc_stg2[] = +{ + -4.8704f, -25.4945f, -63.8565f, -65.1017f, -4.5396f, 12.9750f, + -51.6246f, -71.2351f, -70.8930f, -49.5365f, -41.5492f, -21.1764f, + -4.1941f, -21.5321f, -43.7546f, -75.1360f, -101.6917f, -51.6149f, + 39.1412f, 15.8593f, -34.7315f, -30.9497f, 5.4101f, -22.1983f, + -27.3812f, -44.2900f, -51.8477f, 17.0318f, 63.3214f, 33.3719f, + -42.1936f, -38.7776f, 26.9794f, 58.3819f, 22.3255f, 7.3631f, + -17.3453f, 32.8013f, 16.4392f, -4.8961f, 34.6309f, 3.7975f, + 20.9889f, 11.0332f, 21.2790f, 43.6082f, 11.3288f, -4.0437f, + -30.7619f, -28.1362f, -7.6918f, -26.0495f, -20.5254f, 20.4943f, + -5.8695f, -15.0159f, -12.0884f, 4.0124f, -37.3326f, -57.6803f, + 31.1085f, 51.7290f, 46.8635f, -11.1193f, -84.1480f, -75.2940f, + 31.7638f, 33.3860f, -2.0831f, -68.1944f, -69.2055f, 16.6054f, + 26.8476f, 11.7277f, -21.2873f, -16.1653f, 77.7471f, 74.9747f, + -11.9492f, -11.8103f, 39.7377f, 110.8560f, 91.1983f, 51.6182f, + -16.9337f, 34.0576f, 97.5442f, 55.3237f, 6.0911f, -14.5976f, + 63.2733f, 65.6975f, 59.3910f, 57.9345f, 46.9389f, 25.4049f +}; + +const float lsf_cdk_wb_vc_stg3[] = +{ + -32.9020f, -78.5896f, -107.4534f, -95.7731f, -74.7222f, -53.0220f, -21.3706f, -6.3135f, 4.4667f, 8.3786f, + -55.7273f, -51.1982f, -23.4921f, -31.8303f, -40.9730f, -44.0985f, -32.5056f, -19.4304f, -11.2363f, -6.8031f, + -1.3625f, -17.5965f, -40.9966f, -56.5415f, -66.9172f, -82.2625f, -98.8410f, -92.9959f, -64.2789f, -34.2565f, + -0.1831f, 28.9371f, 27.3975f, 6.7646f, -26.2844f, -55.3561f, -55.5887f, -25.6472f, 4.2175f, 6.7426f, + -0.1042f, -22.5234f, -18.6769f, 9.5775f, 20.8908f, 1.7399f, -25.4612f, -48.9497f, -58.9339f, -45.8070f, + -59.3842f, -92.5268f, -67.7156f, -8.1650f, 22.6518f, 30.8838f, 30.1565f, 24.4312f, 17.5083f, 9.4537f, + 61.2263f, 100.3160f, 74.2819f, 32.8490f, -21.2300f, -80.0984f, -138.8597f, -144.8649f, -102.7813f, -51.4501f, + 20.9615f, 14.5464f, 12.7374f, 42.2801f, 62.5685f, 59.3555f, 43.2439f, 37.0487f, 22.3288f, 14.0209f, + 6.4664f, -20.5406f, -67.1147f, -81.1455f, -18.3522f, 38.5675f, 31.4978f, 9.2431f, -5.5141f, -0.9299f, + -14.7299f, -8.8186f, -2.0488f, -3.6924f, -11.6375f, -3.0631f, 38.0648f, 50.4570f, 46.9399f, 28.7229f, + 34.6418f, 11.8422f, -31.9716f, -72.1947f, -102.4017f, -89.6780f, -33.2158f, 7.5030f, 18.7080f, 14.6731f, + -62.1236f, -44.3324f, 53.6090f, 72.1405f, 58.0429f, 57.2172f, 43.2329f, 33.7172f, 19.9635f, 6.9351f, + 73.8739f, 68.1656f, 32.4182f, 5.6585f, -7.7073f, 3.9480f, 12.5407f, 12.3801f, -2.4527f, -5.8024f, + -21.3075f, -24.8496f, -17.5965f, 2.9303f, 59.0699f, 104.4524f, 127.5622f, 113.8932f, 89.2660f, 52.1358f, + 4.2469f, 56.7592f, 88.2184f, 81.0948f, 49.2982f, 15.3523f, -8.4240f, -22.2333f, -30.5271f, -24.1128f, + 46.4076f, 80.4091f, 88.4039f, 96.0474f, 97.7032f, 96.0620f, 87.9680f, 71.7615f, 52.3257f, 28.0991f +}; + +const float * const lsf_codebook[2][2][TCXLPC_NUMSTAGES] = +{ + { + { lsf_cdk_wb_gc_stg1, lsf_cdk_wb_gc_stg2, lsf_cdk_wb_gc_stg3 }, + { lsf_cdk_wb_vc_stg1, lsf_cdk_wb_vc_stg2, lsf_cdk_wb_vc_stg3 } + }, + { + { lsf_cdk_nb_gc_stg1, lsf_cdk_nb_gc_stg2, lsf_cdk_nb_gc_stg3 }, + { lsf_cdk_nb_vc_stg1, lsf_cdk_nb_vc_stg2, lsf_cdk_nb_vc_stg3 } + } +}; + +const int16_t lsf_numbits[TCXLPC_NUMSTAGES] = { 5, 4, 4 }; + +const int16_t lsf_dims[TCXLPC_NUMSTAGES] = { 16, 6, 10 }; +const int16_t lsf_offs[TCXLPC_NUMSTAGES] = { 0, 0, 6 }; + +const float lsf_ind_cdk_nb_gc_stg4[] = +{ + -33.5099f, -17.2439f, + 1.9585f, 6.4210f, + -21.9240f, 24.8014f, + 23.6604f, 49.3421f +}; + +const float lsf_ind_cdk_nb_vc_stg4[] = +{ + -33.5292f, -23.3982f, + 15.6149f, 34.3889f, + -9.2455f, 6.1721f, + 60.7325f, 78.8354f +}; + +const float lsf_ind_cdk_wb_gc_stg4[] = +{ + -31.4516f, -19.9820f, + 9.1071f, 6.9160f, + -17.3554f, 28.1193f, + 31.7476f, 59.9379f +}; + +const float lsf_ind_cdk_wb_vc_stg4[] = +{ + -25.6665f, -20.7100f, + 17.1565f, 9.9963f, + -13.7601f, 37.4813f, + 55.4374f, 66.3001f +}; + +const float * const lsf_ind_codebook[2][2][TCXLPC_IND_NUMSTAGES] = +{ + { { lsf_ind_cdk_wb_gc_stg4 }, { lsf_ind_cdk_wb_vc_stg4 } }, + { { lsf_ind_cdk_nb_gc_stg4 }, { lsf_ind_cdk_nb_vc_stg4 } } +}; + +const int16_t lsf_ind_numbits[TCXLPC_IND_NUMSTAGES] = { 2 }; + +const int16_t lsf_ind_dims[TCXLPC_IND_NUMSTAGES] = { 2 }; +const int16_t lsf_ind_offs[TCXLPC_IND_NUMSTAGES] = { 0 }; + +const Word16 min_distance_thr[2][2] = /* 14Q1*1.28 */ +{ + /* GC, VC */ + /* WB */ { 580, 580 }, + /* NB */ {1000, 580 } +}; + +const float lsf_q_diff_cb_8b_rf[256*16] = +{ + -49.142456f, 13.490689f, -21.704788f, 63.851589f, 17.341200f, 49.889275f, 4.535705f, -49.377617f, 12.881550f, 3.317029f, -45.874687f, -91.048477f, -159.075317f, -244.532806f, -208.950378f, -60.136238f, + -71.911499f, -50.432014f, -131.216339f, -25.763540f, -90.432335f, -140.176178f, -31.643175f, -46.414715f, -23.065298f, -42.936611f, -38.403904f, 15.094532f, -0.061476f, -28.153961f, -21.246065f, 10.218022f, + -134.834076f, -120.343132f, 98.120338f, 51.493057f, -18.822592f, 5.707322f, -93.194328f, 48.820892f, 38.169155f, 22.535019f, 17.952980f, -59.919395f, -154.178802f, -66.216209f, -30.895947f, -30.548832f, + -41.079960f, -11.862259f, -32.120766f, -35.889202f, -28.737438f, 26.212168f, -37.682671f, -117.789268f, -206.368179f, -150.378693f, -26.382723f, -33.924740f, 14.733324f, -7.089695f, 8.373900f, 41.311722f, + -44.370823f, -21.727020f, -164.064880f, 39.315842f, 14.170435f, 2.276680f, -43.158184f, -105.471977f, 46.076225f, -35.652943f, -72.096603f, -88.481071f, -121.452873f, -86.098267f, -92.925804f, -58.238682f, + -62.593822f, -14.669445f, -39.062012f, -12.045748f, -53.345932f, -70.633652f, -100.257874f, -63.507019f, 57.782543f, 62.015087f, 67.188080f, 65.260689f, -49.929119f, -162.794342f, -204.251465f, -104.609535f, + -66.932289f, -18.313484f, -68.981606f, -25.012476f, -94.210236f, 1.026957f, -67.785004f, -35.943043f, -53.149406f, -87.719955f, -112.206566f, -113.875397f, 111.780113f, 102.159576f, 1.001174f, -50.978374f, + -101.098640f, -70.354515f, -151.534393f, -91.954025f, 3.666550f, 78.893501f, 42.150974f, -57.122208f, -56.242603f, -97.829124f, -66.723511f, 11.967057f, 16.204992f, -23.608727f, -19.899971f, 28.121500f, + 10.450438f, 45.892262f, -54.131168f, -16.160269f, -64.032661f, -176.495041f, -5.962820f, -72.027107f, -150.201141f, -32.517159f, 61.674686f, 44.256657f, 46.283817f, -5.180211f, -141.241837f, -167.211639f, + -173.577682f, -92.975533f, -112.498154f, -101.956200f, -66.556870f, -79.061409f, -139.621201f, -1.422741f, -10.495166f, 71.210350f, 49.869511f, -2.298943f, -35.104397f, 24.463161f, -11.476251f, -46.980118f, + -37.676750f, 24.794701f, -40.237633f, 33.943848f, -51.101398f, 166.382629f, 110.829704f, 23.702038f, 23.627102f, -6.121801f, 0.773019f, -142.445435f, -263.982605f, -14.189220f, -131.928268f, -155.050293f, + -30.214348f, -9.421390f, -102.936676f, 83.361900f, -24.453602f, -180.015442f, 92.876984f, -79.562981f, -9.609303f, -34.706200f, -120.354073f, -29.731850f, -81.171555f, 36.295174f, 61.845047f, 47.662693f, + -110.844032f, 83.765533f, -123.206459f, -51.540508f, -51.287010f, -48.821514f, -29.502964f, -6.343169f, 23.775656f, -0.353102f, -23.523582f, -94.919563f, -133.085464f, -118.824188f, -53.901115f, -52.530910f, + -55.833942f, -37.825222f, 21.633268f, -2.833855f, -172.300034f, 74.660912f, -62.712250f, -77.443947f, 114.319824f, 49.023743f, 36.734745f, 53.222221f, -31.211931f, -15.118987f, -37.109795f, -50.964909f, + -2.209181f, 103.944717f, 186.623413f, -64.544991f, -32.391006f, -40.504578f, -24.400692f, 23.758614f, -28.194080f, -40.393677f, -41.950493f, -90.601120f, -169.530365f, -181.697540f, -67.184174f, -66.990860f, + -24.511374f, 34.831326f, 36.412617f, 49.172550f, -16.029377f, -109.529999f, 4.142260f, -20.617449f, -56.997406f, 30.342079f, -83.989975f, 1.144082f, 161.687592f, 61.147705f, -86.482475f, -92.777733f, + -88.158249f, -53.647205f, -131.604202f, 18.409283f, -8.442244f, -74.841873f, -30.877779f, 73.223831f, 26.580759f, -20.676722f, -31.395731f, -93.706764f, -88.946129f, -60.194122f, -118.809082f, -83.768547f, + -27.869957f, -5.078736f, -133.762909f, -274.870483f, 25.990072f, 21.509178f, 36.674843f, -3.828471f, -37.908432f, 2.206993f, -2.133470f, 15.392393f, -76.964806f, -123.400665f, -55.604580f, 13.984759f, + -39.818924f, -24.414286f, -78.231728f, 114.239975f, 68.886200f, 49.643444f, 61.244785f, 24.158489f, -11.322248f, -82.068733f, -152.400940f, -144.792816f, -89.084679f, -107.811325f, -15.021494f, 27.688988f, + -26.188799f, 13.887177f, -74.969177f, 125.939407f, 54.065468f, -29.856068f, 6.488181f, -63.185188f, -96.026291f, -188.663879f, -165.438187f, 203.997070f, 43.201817f, 21.809793f, -74.018494f, -76.644218f, + 14.730933f, 52.225765f, -133.046051f, 73.062096f, -12.101256f, -61.917290f, -85.989738f, -25.391121f, 61.084568f, -56.463966f, 192.920975f, 44.298870f, -151.724915f, 91.825546f, 4.643712f, -14.348310f, + -83.082611f, -43.735950f, -57.932819f, -63.816303f, -127.738678f, -96.165390f, 27.380922f, 106.262009f, 117.074669f, 97.982422f, 63.797035f, 48.936672f, -12.647917f, -65.618805f, -84.200691f, -93.463432f, + -79.058868f, -82.570656f, -23.950100f, -42.977753f, 35.295464f, -60.833336f, -54.265438f, -1.680498f, -73.608223f, -41.047230f, -32.325935f, -36.250416f, -2.680869f, 24.178974f, 12.027203f, 4.833654f, + -70.078651f, -40.907417f, -113.092224f, 27.616556f, -46.329929f, 104.583298f, 82.129387f, 0.280690f, -27.957493f, -79.316704f, 111.977844f, 50.056763f, -19.403173f, 25.433884f, 70.602043f, 28.069981f, + -1.787399f, 19.136635f, -48.166355f, 5.009412f, -62.536564f, 75.527115f, -47.088139f, -11.585875f, -65.448433f, -92.899475f, 107.363365f, -32.311649f, -203.382462f, -152.693619f, -50.552776f, 31.944372f, + 8.727448f, 163.701584f, -151.617279f, -120.834221f, -140.449585f, -168.542450f, -161.597626f, -134.148041f, -44.436928f, 23.024485f, 88.100662f, 153.087036f, 171.657425f, 142.269592f, 72.176025f, 34.152279f, + 24.626226f, 141.228775f, 68.035118f, 32.383106f, 29.076723f, -23.316879f, -11.166278f, 28.757330f, -105.244186f, -168.721451f, 15.529101f, -45.646198f, -99.508888f, 12.179071f, 41.687931f, -6.929618f, + -32.293335f, -15.942890f, 0.017796f, 227.668884f, 35.207336f, -33.792694f, 82.114479f, 15.197913f, -26.902617f, 65.209732f, 1.587932f, -56.761986f, -22.348925f, -26.869337f, 19.428514f, 27.321255f, + -102.949432f, -25.011555f, -147.959137f, -87.200294f, 47.153675f, 18.530943f, -0.166834f, 19.560911f, 89.191528f, 52.157402f, 2.918095f, -61.719532f, -94.293381f, -51.465199f, -1.655222f, -17.656567f, + -38.911335f, 6.948825f, -39.729725f, -51.301937f, -53.620224f, -108.789536f, 155.468872f, 63.620651f, 35.850296f, 70.581047f, 42.754013f, 127.703674f, 66.715858f, -130.426041f, -146.462341f, 74.622078f, + -1.029140f, 54.317455f, 8.387774f, 41.543407f, -10.573199f, 24.244738f, 30.842634f, -26.604139f, -33.421272f, -9.906475f, -31.059523f, 10.844967f, 30.019199f, -202.162201f, -258.204132f, 91.369331f, + -153.889771f, 115.453377f, 72.695793f, -18.096334f, 20.942005f, -35.160381f, -38.443104f, -34.397667f, -48.781742f, -1.410000f, 62.099541f, 79.766754f, 142.615189f, 135.960159f, 96.626495f, 58.906452f, + -79.472115f, -49.353893f, -49.954609f, -155.367615f, -116.776726f, 15.010523f, 18.099497f, -55.247025f, 16.403715f, 87.059982f, -23.132126f, -173.747818f, -144.933502f, -28.767344f, -32.596806f, -0.380802f, + -15.925756f, -5.412324f, -105.707176f, -130.356949f, -98.465538f, -47.166088f, -87.599068f, 42.630928f, -62.413151f, -107.954193f, 158.527435f, 98.763542f, -3.586527f, -6.147307f, -13.222188f, -23.993233f, + -24.975382f, 56.402035f, 52.029133f, -3.636582f, -18.978687f, -30.510057f, -20.777334f, 0.297320f, -75.612679f, -166.890121f, -182.792877f, -17.244802f, 17.907167f, -95.983925f, -107.016418f, 6.600997f, + 13.935800f, 124.014893f, -78.200630f, -86.667000f, 27.445192f, -62.815701f, -53.436100f, -106.422089f, -98.502609f, -122.057808f, -94.039665f, 79.832077f, 85.983383f, 86.996208f, 71.870331f, 101.132660f, + -51.503838f, -34.840988f, -93.907707f, 54.647934f, 85.969376f, -35.794395f, -36.596844f, -102.254219f, -196.495346f, 34.254475f, -15.691520f, -81.330208f, -7.808877f, -105.690956f, -96.873695f, 28.378246f, + 79.900681f, 76.900246f, 101.535088f, 103.327919f, 76.696190f, 36.222244f, -87.911812f, -186.179047f, 47.998817f, 180.776077f, 27.586971f, 68.147926f, 8.632617f, -127.173943f, -218.839523f, -269.181305f, + -51.884178f, -23.658228f, -7.389097f, 51.481766f, -16.066425f, -70.871017f, -193.338547f, 194.566742f, 115.566246f, -35.451885f, -78.933662f, 8.663171f, 16.445974f, -68.275475f, -91.542229f, 1.517690f, + -39.556801f, 39.785755f, -76.877228f, -215.618423f, 126.814384f, 37.883842f, 26.489124f, -32.631229f, -79.764656f, -5.413741f, -44.822353f, -38.384186f, 145.878082f, 205.717392f, 96.100632f, 80.714775f, + -36.383427f, 1.122570f, 179.888214f, -48.044216f, -121.014236f, -85.808846f, -125.241035f, -79.817886f, -0.247583f, 50.953720f, 13.693697f, -5.582759f, -50.636333f, -46.192039f, -66.636848f, -36.257576f, + -122.950089f, -101.489883f, -260.444885f, -20.923767f, -57.475227f, 15.233345f, -42.816353f, -43.372814f, 58.668098f, 2.198759f, -2.974080f, 16.032595f, 93.305153f, 50.504028f, -14.432660f, -50.193291f, + -16.826427f, 8.873464f, -87.595573f, 23.091625f, -3.794562f, 38.739624f, 159.341888f, 57.302864f, 10.663289f, -44.891232f, -143.189377f, -141.278580f, 34.162834f, 67.916397f, -11.724302f, 82.864563f, + 8.689659f, 79.660339f, -106.648331f, -40.056900f, -61.659725f, -89.878143f, 30.882858f, -96.414940f, -87.919632f, 71.567696f, -13.048811f, -99.413971f, 158.306488f, 148.612640f, 101.164139f, 44.707798f, + 51.876743f, 173.028961f, -7.548154f, 42.151535f, -0.306372f, -63.804768f, -65.823441f, -61.424610f, -3.614527f, -0.266337f, -28.529921f, -42.772068f, -92.503525f, -24.051035f, -29.639515f, -52.302032f, + -21.027899f, 32.422092f, -19.221569f, -81.996292f, 170.400146f, 147.834946f, 78.837563f, 54.455120f, -4.170513f, -14.816674f, 66.761642f, 29.512554f, 1.267826f, -7.617690f, -74.421074f, -86.431335f, + -19.333296f, 100.725983f, 62.089886f, 80.720032f, -11.293929f, -156.758041f, 130.283081f, 64.092621f, 10.666490f, 23.035032f, 9.748004f, -82.614822f, -134.818069f, -117.491508f, -98.273796f, 27.608231f, + 3.230417f, 41.808163f, 13.598584f, 214.913864f, 110.737106f, 36.832939f, -14.412317f, -27.091141f, -72.668190f, 5.492285f, 219.188553f, 157.024200f, 139.305466f, 42.584637f, -89.405518f, -147.115540f, + 5.685055f, 57.183292f, -12.697913f, 68.282562f, -33.609550f, -33.049332f, 87.031670f, -39.772167f, -127.605225f, -30.905075f, -129.695374f, -167.423813f, 14.979711f, -80.101776f, -175.781570f, -120.638008f, + -26.057411f, -22.450294f, -86.065346f, -174.294159f, -236.409439f, 106.705414f, 94.844818f, -24.300186f, -47.618366f, -4.900061f, -8.250068f, 26.776390f, 23.026890f, -0.663881f, -8.460385f, 52.523418f, + -239.938965f, -188.228012f, -72.794617f, -24.974373f, 64.134842f, 47.954140f, 37.109238f, 56.990929f, 19.013355f, 2.195176f, -39.343456f, -65.541855f, -48.117985f, 33.679371f, 1.032876f, -8.904166f, + 1.318133f, 23.793682f, -11.594374f, 208.226288f, 86.628777f, -41.451736f, -85.691925f, -59.617199f, -144.367111f, -168.655807f, 108.856461f, 32.739384f, -66.105087f, -32.850475f, 68.247009f, 136.522278f, + 46.231567f, 61.993446f, -37.963066f, 71.883453f, 4.955863f, 90.692329f, -55.423782f, -173.421982f, 91.392097f, 4.265558f, -86.143791f, 11.978693f, -147.210098f, -173.357559f, 47.334595f, 132.379639f, + -8.091352f, 36.792015f, 42.705544f, 0.830618f, -22.491022f, -42.331161f, -6.163970f, 83.671753f, -37.618378f, -48.777485f, 136.386185f, 88.433350f, 121.425102f, 78.104286f, -118.565308f, -236.474899f, + -34.999004f, 35.648041f, 104.321472f, -80.549561f, 88.479385f, 4.159388f, -68.049988f, -110.190895f, -59.762150f, -34.927917f, -42.892593f, -50.185341f, -31.525537f, 28.561077f, 30.799391f, 32.589943f, + -19.395960f, 10.917861f, -33.211983f, 59.916050f, 17.923265f, 69.628220f, -59.527351f, -0.360134f, 20.055620f, -76.225594f, 59.490189f, 219.202728f, 44.065163f, -105.835022f, 149.316025f, 103.121368f, + -26.811831f, 4.917114f, -50.918606f, -51.282066f, -44.665630f, -34.671989f, 54.816383f, -53.930695f, -122.650787f, 9.736618f, -86.848312f, -33.875164f, 28.787636f, -128.559616f, -13.832273f, 240.435959f, + -127.768944f, -120.395676f, -224.640091f, -106.371384f, -110.915848f, -119.944382f, -64.704178f, -86.686111f, 57.449604f, 91.349197f, 96.250694f, 156.740128f, 176.836166f, 127.207031f, 51.964844f, 14.125758f, + -47.998665f, 17.796474f, 29.304367f, 75.164230f, 58.860054f, 113.970734f, 70.417877f, 23.055088f, -25.342611f, -99.771896f, 5.999279f, 51.847668f, -60.419800f, -163.240036f, -99.791527f, -66.431305f, + -0.302659f, 17.211594f, -98.700340f, 53.635334f, -28.992607f, -89.555244f, 112.895592f, -32.920498f, -109.022964f, 150.316772f, 124.435059f, 47.075050f, 111.757408f, 77.910065f, -34.123623f, 33.374477f, + -8.188879f, 23.113052f, -14.419042f, 58.259747f, -4.053533f, 3.542868f, 101.208923f, 41.556973f, 65.754631f, 15.887958f, -6.614230f, -95.157341f, -213.709061f, 82.959053f, 10.967265f, 42.520882f, + -12.848677f, 33.983711f, 26.826427f, 55.942802f, 17.707258f, 59.918518f, 15.309278f, 207.269272f, 99.491982f, 42.829330f, 116.586906f, 97.039436f, -36.674652f, -119.304512f, 74.699173f, 64.565712f, + -127.629143f, 210.633652f, 90.269417f, -15.052937f, 10.047224f, -44.578220f, -32.594685f, -24.894297f, -32.681622f, 36.690662f, 60.424084f, 6.454986f, 7.198017f, 25.681587f, -4.052445f, -25.874166f, + -13.218253f, 25.233515f, -43.822559f, 14.608809f, 50.092663f, 29.797066f, 122.838074f, 60.946331f, -15.227234f, 70.429047f, 49.234367f, 22.393675f, 241.398132f, 68.944763f, -19.084089f, 15.646838f, + -61.749660f, 22.046791f, -33.557991f, -16.016773f, -39.896496f, -65.069405f, -73.831696f, -54.138386f, -41.472534f, -59.811478f, -96.109680f, -119.990692f, -91.886162f, -31.355206f, -9.082160f, -39.052567f, + -27.257662f, 71.028709f, -136.328506f, -98.025055f, -21.314344f, -16.991056f, -34.343781f, -70.373230f, -55.339901f, -30.724577f, -8.068395f, -12.537150f, 6.994465f, -2.531820f, -19.959831f, -32.511631f, + -189.575684f, -170.668686f, 159.468323f, 69.316818f, 9.541554f, -35.932343f, -76.965225f, -73.569916f, -80.277435f, -52.695671f, 36.840542f, 4.612717f, -5.781191f, 68.836777f, 46.053165f, 5.477945f, + 23.076845f, 56.007298f, 58.995125f, 73.648643f, -23.558571f, 31.706146f, 6.650000f, -81.954597f, -43.828186f, -91.444901f, -136.752670f, 3.109934f, -61.638336f, 161.845291f, 158.234512f, 75.812927f, + -29.586615f, 8.254013f, -12.131930f, 42.161793f, -20.277391f, -118.423508f, -194.639008f, -196.011337f, 38.792351f, 37.828663f, -2.185939f, 11.298992f, -6.172924f, -4.559058f, -65.562843f, -27.597832f, + -47.978813f, 22.640007f, -58.066402f, 58.001053f, -47.134541f, 8.486321f, -6.111372f, -31.006121f, 51.575218f, 5.865514f, 17.294910f, -41.168453f, 73.907234f, 13.599236f, -307.273499f, -197.696899f, + -44.109650f, 49.449520f, 84.357780f, -161.258835f, -95.109154f, -44.129417f, -5.148076f, -26.549320f, -4.192320f, -31.172485f, -35.216717f, 42.882584f, 4.978696f, 0.798938f, 44.287029f, 7.057617f, + -44.323925f, -3.754397f, -20.289011f, 35.057964f, 30.896481f, 47.822914f, 57.432564f, -18.862158f, -58.972874f, -40.730820f, -53.210159f, 151.582123f, 189.086823f, -47.681084f, -160.354431f, 18.183973f, + -24.190926f, -8.054521f, -60.337772f, 17.447094f, 52.011765f, 64.135529f, -12.559262f, -64.698524f, -145.641434f, -49.002659f, 27.998568f, 54.442074f, 31.638771f, -105.428864f, -187.366058f, -170.395126f, + -52.519932f, -45.655670f, -54.255409f, 18.195887f, -47.736511f, -25.311331f, -74.233253f, -139.686768f, -7.455135f, 30.180883f, 16.468306f, 73.234703f, 89.610466f, 86.974052f, 38.241241f, -12.159492f, + 27.982965f, 58.867645f, 9.410244f, -37.832794f, -107.431290f, 148.510559f, 114.846024f, 37.929848f, -49.612717f, -97.690834f, -11.054573f, -58.132690f, -120.672997f, -0.656331f, 67.064285f, -17.834682f, + -38.582962f, 4.200229f, -16.068153f, 16.516636f, -13.899181f, 5.986161f, -2.004643f, 12.832077f, -44.597519f, -86.681267f, -38.071716f, -52.322094f, 61.482838f, 23.035675f, 222.921036f, 209.259064f, + -53.377850f, 219.871765f, 18.681116f, -49.476475f, -66.432587f, -11.111042f, 8.136900f, 38.469578f, 83.534767f, 23.165945f, -66.981857f, -119.944641f, -90.701843f, -5.017766f, 13.544878f, 7.416979f, + -26.158424f, 21.733870f, 8.429042f, -7.359868f, -81.261559f, -0.384979f, 107.991409f, -33.468559f, 163.344254f, 171.295059f, 21.148136f, -44.234226f, -50.298836f, -2.045869f, -46.947075f, -69.817322f, + 54.305538f, 77.911476f, 98.722816f, -46.229565f, -143.810577f, -1.355024f, 61.036888f, -13.015687f, -3.865948f, 88.857635f, 7.053370f, 11.180832f, -46.409653f, -90.435066f, -105.360260f, -147.441849f, + 75.489372f, 105.739868f, 60.188259f, 33.809502f, -21.277689f, -21.943260f, -50.937679f, -75.105469f, 43.895504f, -42.176373f, -73.326416f, 343.493774f, 168.802673f, 63.476738f, 36.762135f, 96.509972f, + -43.959518f, -13.900088f, -83.791946f, -2.585726f, -89.923798f, -318.138428f, 56.854568f, 72.487968f, -32.397919f, 28.099873f, -17.146538f, -96.395309f, 0.466646f, -28.547890f, -71.721748f, -40.413429f, + -91.491898f, -100.288185f, -158.042801f, -94.347038f, 41.776943f, 56.555912f, 18.842609f, 21.550163f, -8.122741f, 83.330833f, 83.349388f, 56.535236f, 6.853065f, -16.367655f, 6.860499f, 12.135324f, + -122.978020f, 41.508400f, -57.019398f, 119.866692f, 169.921616f, 82.577713f, 6.609851f, 29.209021f, -35.676617f, -95.016159f, -42.960949f, -61.483852f, -28.365889f, 44.539429f, 11.786313f, -39.760418f, + -35.204288f, -3.827494f, 1.364895f, 53.625450f, 67.540977f, 12.539343f, -62.200562f, -131.499298f, -190.222824f, 97.861145f, 145.009247f, 116.742218f, 39.964626f, 5.113988f, -49.972206f, -22.433067f, + -21.844286f, -3.302132f, -103.041687f, 72.974442f, 0.991044f, 31.884541f, -68.314651f, 15.106439f, 38.181488f, -142.549530f, -177.428543f, 26.987268f, -65.951744f, -49.118980f, 100.179466f, 67.782463f, + -68.886017f, -50.878456f, -101.627640f, 94.751526f, 63.353767f, -35.431698f, 88.086647f, 85.405006f, 1.274280f, -8.066319f, 108.974724f, 81.340332f, 19.295490f, -5.680541f, -76.852966f, -93.998848f, + 0.026969f, 0.110805f, -0.074311f, 0.076925f, 0.017105f, 0.036573f, -0.118072f, 0.068798f, 0.056649f, 0.036456f, 0.063553f, 0.071463f, 0.000525f, -0.019787f, -0.046544f, 0.021337f, + -17.799213f, 17.198961f, -23.454958f, -48.785267f, 32.178555f, 142.656906f, 87.394043f, -46.504601f, -91.326263f, -128.089188f, 168.745255f, 12.046860f, -75.234085f, 321.776276f, 84.140045f, 147.402191f, + -7.771455f, 13.708800f, -83.826019f, -18.597784f, -45.941696f, -97.131195f, 73.443825f, 13.631736f, -35.554703f, 154.701080f, 86.402138f, 6.515917f, -68.449318f, -152.233841f, -30.240294f, -16.017389f, + -55.553074f, -10.045274f, -82.091660f, -104.274841f, -102.906937f, -76.238228f, -59.226723f, -42.700069f, 16.344666f, 35.539070f, 49.328686f, 56.921478f, 131.003021f, 165.738358f, 186.387207f, 144.321213f, + 24.576750f, 51.924622f, 2.034293f, 189.503342f, 148.765106f, 101.905212f, 63.054604f, -22.561197f, -112.342194f, 8.821053f, 33.745621f, -43.875877f, -58.067898f, -146.850281f, -17.419054f, 72.366890f, + -30.276649f, -31.782654f, -80.339973f, 100.106911f, 93.313034f, 4.726528f, -48.094799f, -115.030556f, -191.082672f, 102.985733f, 88.130089f, 19.376783f, 42.609215f, 50.674198f, 152.159012f, 114.587776f, + -137.391373f, 14.609784f, -65.256355f, 1.609928f, 37.473400f, 26.934027f, 24.673132f, 119.508095f, 88.831779f, 43.605965f, 27.401138f, -7.082619f, -78.587341f, -76.090195f, -60.487331f, -49.042698f, + -3.795852f, 48.615219f, -32.316784f, 47.219639f, -71.672012f, -177.180862f, 227.674683f, 121.423073f, 55.595085f, 89.844704f, 18.789379f, 72.883820f, -30.959936f, -1.702511f, 69.411217f, 21.385332f, + -31.896704f, 58.013481f, 15.825336f, 21.007841f, 73.693138f, 2.008733f, 47.849987f, 22.561638f, -56.861252f, -96.624382f, 116.512817f, 122.175636f, 14.970264f, -131.112076f, -137.480362f, 145.503159f, + 3.666602f, 60.865307f, 190.182358f, 42.435371f, -21.053213f, -17.096897f, -76.084404f, -13.743227f, 117.478218f, 140.799774f, 154.908340f, 88.790558f, 92.327370f, 121.949478f, 69.189064f, 33.268280f, + -24.028364f, -0.568868f, -10.598723f, 23.224901f, -10.145369f, 23.696190f, -80.020584f, 133.288193f, 78.874382f, -28.811146f, -74.702332f, -142.888794f, -177.398254f, -126.189499f, -64.583435f, -4.795106f, + -42.301235f, 1.254746f, -92.263153f, -67.414131f, -68.581459f, -105.596657f, -95.386429f, -140.669708f, -167.874496f, -26.571861f, 58.823044f, 95.171120f, 164.426514f, 117.247391f, 67.970955f, 67.381973f, + 12.281957f, 57.241734f, 145.007370f, 102.782562f, 6.108451f, 23.661549f, -109.679001f, 79.513168f, 54.415848f, -107.359993f, -127.692383f, -2.818198f, -116.707993f, 22.176086f, -1.896818f, 13.089568f, + 42.066715f, 109.299110f, 22.366495f, -16.778564f, 21.774530f, -4.182106f, -18.286386f, -52.603218f, -118.524780f, -89.037674f, 118.551682f, 115.277679f, 89.577263f, 130.519241f, 158.623138f, 169.276016f, + -127.461502f, -97.991295f, -154.912262f, 156.017349f, 83.816185f, -40.645927f, -30.617186f, -97.806175f, -64.010101f, 50.553226f, 32.767338f, -3.065530f, 46.381119f, 52.668839f, 32.740833f, -18.864176f, + -35.447090f, 10.117445f, -29.844646f, 121.351227f, 83.683456f, 57.303402f, 15.328587f, 44.133987f, 67.000153f, 104.188065f, 10.872536f, -10.320432f, 63.163109f, -83.689003f, -200.906555f, -56.971607f, + -73.476898f, -50.613533f, 157.811996f, -36.126892f, -3.998129f, -33.125019f, -40.811184f, 75.547150f, -26.170004f, 16.685923f, 89.786247f, -2.189539f, -13.579331f, 56.560184f, 54.771152f, 26.603344f, + -50.784908f, -37.853783f, -22.237158f, -10.529336f, -75.668167f, 170.388672f, 64.201385f, 9.919388f, -25.087654f, -97.517700f, -38.260277f, 51.479713f, 98.044075f, 224.824921f, 125.035980f, 68.006523f, + -13.163634f, 49.532330f, 22.343836f, 23.637941f, -71.608704f, -200.313492f, 22.972029f, -65.936508f, -139.879044f, 109.168282f, 73.714027f, 8.318653f, -33.382645f, -57.808838f, -26.988724f, 70.492950f, + -57.241489f, -35.265514f, -140.595444f, 85.484810f, 13.172671f, -44.652134f, -64.718590f, 80.219849f, 113.279419f, 8.199357f, 46.910881f, 1.842971f, 6.611537f, 108.265114f, 84.200981f, -15.673004f, + -54.020992f, -40.065796f, 68.741219f, 89.963760f, -22.845310f, 156.119400f, 40.349724f, 13.827300f, 99.219742f, -10.468677f, -69.469467f, -91.899101f, -28.343006f, -18.399660f, -48.014648f, 18.084986f, + 39.514809f, 117.259254f, 84.999840f, 3.152317f, -89.788651f, -15.256340f, 128.664642f, 16.396799f, -2.824860f, -2.224188f, -108.113235f, -104.294632f, 285.672485f, 258.659821f, 131.015823f, 46.896381f, + 35.400707f, 199.269470f, -50.829807f, -59.871765f, -112.504417f, -87.914078f, -74.663177f, -14.457950f, 3.730728f, 8.424652f, 34.759491f, 5.061568f, 49.715153f, 29.911200f, -4.833649f, -7.921039f, + 79.273865f, 68.455246f, 143.235184f, 29.923138f, -61.068966f, 27.401043f, -93.697815f, 39.637844f, 278.054901f, 207.706467f, 114.287697f, 191.970261f, 28.365456f, -67.643982f, -126.002037f, -324.593506f, + -38.810867f, 77.219002f, 226.800339f, 84.473801f, -40.547543f, -21.564167f, 131.517456f, 93.058868f, 25.796638f, 24.364828f, -21.709984f, 0.377355f, -100.328873f, -63.233959f, 39.949356f, -20.796144f, + -49.434875f, 13.246425f, 235.871155f, 150.979660f, 94.417747f, 49.695023f, 9.298592f, 42.695667f, 12.962906f, 29.078457f, 141.417770f, 131.790558f, 139.121719f, 102.666374f, 34.500813f, -11.908920f, + -2.108662f, 13.590509f, -38.806015f, -50.421722f, -148.383850f, -9.163120f, 221.518173f, 91.873947f, -57.944500f, 7.884820f, -23.169016f, -6.481791f, 39.176830f, -30.829500f, -216.452530f, -132.310471f, + -60.222321f, -37.813641f, -144.648758f, -74.471680f, -53.668755f, -36.867607f, 163.549622f, 118.314560f, 9.347286f, -64.045303f, 54.008766f, 6.278257f, -3.053545f, 65.511765f, 31.613440f, 28.923603f, + -68.111702f, -58.754192f, -20.550688f, -9.141284f, 178.296661f, 46.222195f, 85.088615f, 25.129522f, 3.565898f, 73.297729f, 22.594685f, -30.790440f, -60.898556f, -59.714981f, -25.799683f, -26.515989f, + 79.872566f, 27.157415f, -193.357193f, 172.950409f, 131.502487f, -2.173946f, -11.273206f, 11.559188f, -135.590240f, -117.606354f, 162.157654f, 74.852615f, 84.181198f, 42.567123f, 72.688606f, 30.169746f, + -22.176310f, 8.126409f, -98.820702f, 162.383163f, 130.916565f, 39.752148f, -32.870506f, -173.600403f, 116.578125f, 45.067692f, -27.598148f, 8.555970f, -3.395607f, -42.335846f, -20.110458f, -40.589352f, + 31.181765f, 77.636864f, 60.341606f, 90.832474f, -9.832494f, -111.538925f, 111.043030f, 140.765152f, 80.575752f, 24.432682f, 81.943199f, 20.720406f, 1.215079f, 4.115319f, -68.575241f, -91.525787f, + -84.731537f, -0.527349f, 25.745188f, 36.190254f, -62.206528f, -86.327141f, -27.536991f, -15.557912f, 32.424694f, 13.717608f, 11.215924f, 22.781013f, 9.574938f, 61.158257f, 61.121010f, 32.403088f, + -18.375742f, 10.047339f, -50.339001f, -6.936292f, 12.167328f, 150.529266f, 222.465683f, 183.672455f, 58.230515f, 30.788654f, -22.198248f, 57.085861f, 28.043667f, -36.177765f, 171.042053f, 134.737167f, + 0.297151f, 95.241844f, 51.197784f, 41.369175f, 33.568478f, 7.960698f, 55.897408f, 15.283177f, 29.098846f, 91.276161f, 20.340677f, -60.202499f, -171.769867f, -193.836426f, 13.407167f, 121.289520f, + -77.249527f, -31.146763f, -86.916313f, 13.008453f, -21.325594f, -35.007175f, -0.394985f, 39.783211f, 158.601135f, 162.017731f, 166.716888f, 164.855255f, 145.650070f, 87.215416f, 13.765621f, -16.071383f, + -11.922022f, 69.904465f, 145.530533f, 137.786896f, 42.237782f, 75.689651f, 121.502434f, 26.309196f, 0.019661f, -62.185799f, -152.175339f, 86.949432f, 41.679405f, 18.519968f, 34.415928f, 25.165304f, + -9.927750f, 11.307752f, -64.252609f, 131.465469f, 47.641304f, 22.456234f, 36.158360f, -40.804043f, -91.170403f, 86.573074f, -47.294422f, 15.884171f, 222.589951f, 158.826157f, 154.847031f, 224.892197f, + 34.394650f, 50.068573f, -4.612890f, 39.353638f, -13.351929f, 82.855324f, -34.119553f, -198.830780f, 169.354126f, 20.893297f, 2.412445f, -82.652008f, -123.564072f, 148.278564f, 67.057632f, 86.445847f, + 8.496761f, 55.847862f, 9.401371f, -12.230957f, -48.765945f, 339.392365f, 127.588539f, -17.772644f, 73.892937f, -37.477283f, 39.123516f, 58.133339f, -42.253559f, -161.082916f, 77.454605f, 125.429886f, + 43.473793f, 173.585449f, 85.007156f, 42.041813f, -61.597820f, 51.345463f, 44.502201f, -8.306359f, -2.903240f, -41.573891f, 114.340172f, 93.989349f, -18.752844f, 33.966118f, 85.911499f, -5.925835f, + 69.373337f, 94.525620f, 55.872551f, -12.796402f, -57.766541f, 205.378647f, 150.999893f, -34.033718f, 46.349552f, 51.589359f, -9.740956f, 165.190857f, 245.511856f, 140.620789f, 33.383125f, -80.622025f, + -24.897663f, 9.583753f, 62.261280f, -111.380074f, -93.574211f, 37.958935f, 11.259578f, -85.749733f, -185.118637f, 15.325944f, -47.716419f, -70.300369f, -64.094902f, -120.984238f, -115.879242f, -5.316128f, + -43.105038f, -38.260498f, -69.155273f, -106.188942f, -215.693817f, -116.750755f, -22.012207f, -17.229620f, 2.833113f, 47.987717f, 6.774336f, -11.583231f, 16.325312f, 30.872992f, 21.988634f, 21.333845f, + -40.281574f, -19.919075f, 83.175934f, 145.520676f, 74.963409f, -17.649036f, -97.185730f, -32.826363f, -53.159214f, -13.556940f, -30.614326f, -68.210266f, -70.881149f, -25.398729f, -57.834473f, -78.295006f, + -54.354683f, -53.242130f, -151.652374f, 75.184731f, -12.681744f, -62.721302f, 39.976120f, -84.622726f, -164.732422f, -81.025864f, -59.992664f, 18.575914f, 59.433632f, 91.230606f, 74.121452f, 15.667545f, + -56.008598f, -36.547680f, -74.135963f, 60.449661f, -43.171642f, 20.404333f, -94.677895f, -134.441208f, -21.513660f, -79.943031f, -11.399878f, -26.450451f, -51.884460f, 13.872990f, -10.700389f, 13.693831f, + -54.557514f, 14.214915f, -109.558357f, -39.927799f, -80.414780f, -21.436823f, -29.838932f, -133.094101f, 41.575626f, 119.561104f, 108.865402f, 113.994164f, 70.534935f, -74.075966f, -153.541779f, 13.645255f, + -19.660948f, 72.645828f, 57.090542f, 10.197439f, -82.249893f, -86.073334f, -65.963997f, 26.606983f, 62.380840f, -79.725609f, -67.844391f, -100.735214f, 103.173157f, 41.282562f, -14.417590f, 97.527374f, + -15.501063f, 10.106770f, 19.181379f, -48.813862f, -54.115250f, 235.424240f, 13.094974f, -96.655479f, -53.639637f, 13.621657f, 1.518511f, 44.934509f, 57.590019f, -41.299301f, -105.937149f, 5.567881f, + -26.978188f, 39.920815f, 39.867668f, -30.284748f, -137.471680f, -12.073587f, -11.821868f, -56.056862f, -109.460243f, -95.643143f, 71.884705f, 3.678432f, -69.469994f, 46.625034f, 21.143269f, -12.124670f, + -235.238770f, -189.902191f, -98.019753f, 1.308181f, 6.093620f, -51.336655f, -74.336411f, -58.007866f, -34.142288f, -23.622774f, 21.920612f, 54.356789f, 118.404907f, 98.866112f, 78.824142f, 48.048695f, + 38.583252f, 140.003342f, 104.366905f, 59.575905f, 16.539742f, 143.487717f, 46.418877f, 67.189468f, -16.257248f, -14.486803f, -37.126595f, -97.505363f, -80.173981f, -94.221985f, -115.390350f, -118.126472f, + 14.582953f, 70.503632f, -14.045506f, -19.149410f, -112.971611f, -166.393768f, 175.770172f, 72.728432f, -123.819260f, -84.734123f, -79.798332f, 15.522896f, 9.189954f, 45.245491f, 67.264786f, 21.392374f, + -30.288527f, 176.278839f, -42.118710f, -113.833649f, 18.178839f, -98.263985f, -5.378097f, -36.394852f, 56.751965f, 34.232403f, -15.896103f, -21.939495f, -36.014275f, -97.239891f, -44.097141f, -21.397247f, + -57.630421f, -14.344311f, -48.722851f, 4.000876f, -85.091949f, 134.974442f, 96.790924f, 44.602585f, 116.120537f, 108.384445f, 134.965012f, 62.810093f, -51.505104f, -66.570000f, 0.324640f, -61.159451f, + 46.961773f, 91.328773f, 255.896439f, 266.543579f, 55.914829f, 1.617108f, 3.187201f, -8.799063f, 27.105843f, 96.940453f, -6.333913f, -40.912540f, -123.896332f, -219.183456f, -147.103104f, -82.445755f, + 4.730723f, 14.597744f, -4.770158f, 50.178673f, -46.408352f, 46.296600f, 159.859604f, 44.269157f, 25.871405f, 18.163599f, -69.356171f, 99.161255f, 145.530502f, 110.339287f, -78.356651f, -249.688126f, + -4.995772f, 7.796484f, -231.294037f, 72.029633f, 33.000286f, -63.268135f, 113.155357f, -3.829946f, -48.667412f, 20.674379f, -19.940260f, -66.963058f, -30.490475f, 1.557967f, -21.697649f, -25.190910f, + -68.609848f, -42.050915f, -81.286026f, -171.873383f, 5.826807f, -37.863060f, 65.958603f, 64.783348f, 16.320978f, 7.862601f, -63.484844f, -35.056782f, 36.112469f, 25.719179f, -27.790937f, -49.815948f, + -52.712395f, 5.407033f, -50.664661f, -57.217823f, 93.290443f, 86.227432f, 47.213612f, 8.067347f, -70.909805f, -102.342758f, -81.671745f, -96.333832f, -76.863091f, -17.267122f, 0.470240f, 11.259017f, + 45.857506f, 61.279209f, -16.262930f, 65.889984f, 39.496490f, 31.019928f, 10.330289f, -12.880993f, -158.328720f, -214.299026f, 136.159515f, 34.651714f, 58.886429f, 52.877373f, 18.637857f, -97.587326f, + -83.695442f, -46.231495f, -126.655914f, 84.273537f, 24.091738f, -77.565994f, -121.072006f, -65.358688f, 13.704159f, 17.912792f, 129.792953f, 45.167286f, -76.637970f, -90.235817f, 29.498278f, 22.527498f, + -38.629421f, -13.281903f, 19.966961f, 21.830301f, -71.014816f, -56.646057f, -183.160706f, 153.295105f, 121.722061f, 122.379555f, 191.160324f, 94.983765f, -38.069660f, -13.902174f, -28.430313f, -3.660168f, + -61.012142f, -16.898062f, -122.156700f, 40.265934f, -4.676280f, 89.712509f, 77.850525f, -22.210423f, 54.780842f, -9.432448f, -77.245964f, 33.276836f, 8.500788f, 24.147732f, -37.488598f, -50.028263f, + -13.981007f, -3.172497f, 12.233177f, -3.165506f, -42.713432f, 159.373047f, 120.601517f, 61.609337f, -95.282997f, 154.044556f, 146.461670f, 105.883102f, 35.354893f, -32.637356f, 13.527010f, 52.834805f, + -59.811607f, 31.116199f, -44.788532f, -25.192825f, 11.671334f, -60.872108f, 94.383209f, 44.916836f, -91.212807f, -106.707802f, -36.229931f, -17.900185f, -138.207123f, -165.818100f, 56.715836f, 45.974777f, + -7.959111f, 85.271294f, 17.490253f, -50.336193f, -56.605679f, -100.320343f, -152.276581f, -135.327911f, 88.408737f, 129.427505f, 125.965462f, 98.592941f, 27.923223f, 7.087426f, 27.595392f, 42.971786f, + -25.500626f, 121.667168f, 83.573936f, 3.791471f, -23.845556f, 49.105648f, 81.526443f, 160.776093f, 22.598379f, -98.819115f, -47.420437f, -16.478176f, 46.472534f, -122.984657f, 0.608375f, 57.243511f, + -12.015658f, -0.135543f, -139.000534f, 151.549393f, 71.025963f, -20.232512f, 95.418777f, -70.840523f, 52.608326f, 22.649012f, -56.357464f, 137.754135f, 50.294880f, -87.514961f, 20.277452f, 193.218811f, + -111.404922f, -69.059303f, -107.005531f, 53.955250f, 56.233429f, 68.297432f, 9.512801f, -94.675659f, 125.887329f, 141.677551f, 37.625774f, -55.039444f, -107.942078f, -106.586906f, -103.690109f, -31.521854f, + -7.459867f, 80.387726f, -22.849117f, -7.418187f, -31.289583f, -58.895996f, 121.585495f, 71.303520f, 69.327995f, 33.343830f, -42.588058f, 246.521713f, 44.359360f, -30.136723f, 45.514824f, 33.970772f, + 13.146280f, 37.437431f, 11.781944f, 221.298462f, 64.525116f, -28.227280f, -2.765812f, -60.692303f, -105.971016f, 145.109314f, 29.132435f, -9.364019f, 92.389153f, -40.417786f, -167.946228f, 91.506371f, + 20.380590f, 124.691406f, -34.959442f, -32.687466f, -68.501457f, -12.932295f, 8.627584f, -95.438469f, 34.264408f, 157.920456f, 94.634033f, 154.451233f, 203.167297f, 140.269073f, 62.590698f, -14.471005f, + -23.798073f, 20.029366f, -28.207727f, -42.335686f, -94.120468f, -119.036964f, -160.177826f, 13.003415f, -10.760310f, -23.243717f, 23.871334f, -25.554195f, -70.506531f, -62.087463f, 52.588543f, 91.934219f, + -45.170189f, -10.087015f, -66.042885f, -262.296326f, 71.659988f, 42.020767f, -0.749665f, 30.568419f, -84.345169f, -88.957222f, 62.976131f, 17.781088f, 35.814819f, 41.151264f, 100.832329f, 51.108604f, + -55.090458f, 141.549744f, 45.250282f, 126.572884f, 51.766277f, -4.223619f, -20.867323f, -46.912258f, 12.903956f, -24.562819f, -59.262470f, -34.927166f, -24.950871f, 4.246840f, 14.226479f, -12.156185f, + -18.676003f, 56.782200f, 24.631006f, 31.817165f, -57.425724f, -164.249939f, -100.221893f, -51.068310f, -151.775375f, -103.694389f, 51.353741f, -14.789831f, 103.796227f, 121.169785f, 67.449203f, 45.746460f, + -9.249492f, -0.717516f, -95.589256f, -58.979927f, 183.596542f, 82.821739f, -44.961880f, -113.124100f, -73.027855f, 24.111319f, -9.787043f, -20.309830f, -9.503817f, -25.950542f, -63.329922f, -49.288395f, + -39.281731f, -8.520073f, 12.045630f, 113.941223f, 56.889790f, 11.705962f, -25.992363f, -25.818201f, 41.962906f, 136.173462f, 158.992706f, 71.041000f, -94.766388f, -115.894958f, -100.844521f, -76.998589f, + -8.995197f, 14.692396f, 10.648182f, 46.508247f, -46.040749f, -30.752420f, -101.055634f, 157.707993f, 120.625099f, -34.914780f, -60.452560f, -125.891411f, -64.873436f, 115.602501f, 134.647278f, 88.401085f, + -16.291512f, 25.577784f, -57.797333f, -93.257050f, 204.563004f, 23.844887f, 18.521849f, -48.872440f, -34.910671f, 52.242157f, 90.209885f, 155.241089f, 122.966759f, 97.500565f, 51.306534f, 61.434639f, + 5.888782f, 91.756126f, 55.121063f, 59.742477f, -13.308426f, -24.613007f, -59.364792f, -131.265594f, -87.939194f, -56.433189f, -38.294590f, 21.820187f, 22.980511f, -26.082766f, -9.050174f, -5.993128f, + -109.033333f, -70.663361f, -105.171837f, -29.390360f, 23.201317f, -1.143196f, -0.591588f, -62.349960f, 177.791931f, 64.124794f, 18.023848f, 85.805557f, 57.960117f, -10.079674f, -10.009348f, -11.720422f, + -1.513953f, 39.937832f, 25.296638f, 52.355652f, 31.179762f, 169.450806f, 131.414230f, 42.987076f, 48.422070f, -2.570796f, -102.850693f, -184.716797f, 126.997742f, 120.658882f, 70.227798f, 51.911579f, + 14.841161f, 42.875328f, -31.856815f, -61.852024f, -95.273911f, -33.013256f, 70.492905f, -26.551783f, -11.850163f, 50.677963f, -74.369408f, 121.694061f, 184.952850f, 83.381836f, 119.151489f, 86.071533f, + -76.190552f, 217.282104f, -47.804283f, 21.103445f, 63.081154f, 35.664818f, 9.597631f, -78.337799f, 33.574825f, 9.579362f, 11.619099f, -66.239075f, -93.457573f, -67.129135f, -28.104412f, -48.758240f, + -32.987583f, 55.155075f, -19.071968f, 25.848909f, 147.531418f, 161.891159f, 100.338860f, 122.278191f, 117.346077f, 121.715561f, 59.932480f, -5.041065f, -11.882968f, 25.816359f, 5.152595f, -6.028398f, + -50.602802f, 47.969971f, 109.523300f, -18.894117f, 104.845932f, 3.333271f, 81.642517f, 48.507870f, 18.322062f, 13.163134f, -27.716911f, -78.545464f, -60.946442f, -21.241007f, -43.533047f, -54.892029f, + 23.136389f, 29.755871f, 115.663109f, 366.295105f, 92.912613f, -56.490879f, -23.877293f, -67.456276f, -41.077976f, 176.197632f, 112.048927f, 87.809334f, 124.036644f, 73.674416f, 55.857883f, -59.281975f, + 36.171646f, 81.249886f, 0.990727f, 62.659752f, -6.243932f, -32.411499f, 103.505295f, -8.062663f, -11.415750f, -33.329777f, -157.624710f, 108.892738f, -52.815735f, -116.408310f, -114.794746f, -108.042885f, + -53.235435f, -53.853008f, -22.214457f, -62.809551f, -184.508316f, 55.657627f, 60.393047f, 8.903349f, 119.629532f, 99.485672f, 93.179787f, 12.529486f, -36.033150f, 91.600227f, 120.306450f, 101.186569f, + -266.389862f, -40.268497f, 58.560471f, -15.688929f, 15.476221f, 40.140427f, 70.106178f, 33.398193f, -55.307781f, -54.812614f, 9.501314f, -32.842312f, 1.404359f, 72.411819f, 48.677658f, 19.896832f, + -30.625458f, -22.088581f, 23.690083f, 147.814285f, 106.761505f, 32.618851f, -56.217175f, -56.086750f, -39.910542f, -27.860449f, 41.870930f, 33.237003f, 14.673645f, 133.780670f, 65.161377f, 29.900471f, + 52.106541f, 97.515167f, -46.684582f, 28.368923f, 50.509525f, -14.864295f, 9.164424f, -87.343681f, -53.357895f, -14.466661f, -124.789276f, 139.007889f, 57.820137f, -198.630005f, 89.412651f, 73.174347f, + -11.813260f, 28.477610f, 43.814209f, 53.005009f, -31.552076f, 12.509279f, -45.665352f, 0.665018f, 89.380127f, 35.962025f, 56.310169f, 231.104538f, 77.507759f, -6.636252f, -114.024948f, -103.220619f, + 3.209964f, 92.323235f, 134.360977f, 72.508331f, -71.873093f, -24.684990f, -70.873833f, -80.898567f, 36.660206f, 107.964767f, 56.888454f, -41.093380f, -94.986824f, 5.479705f, 85.588272f, 86.314072f, + 2.358892f, 19.563696f, -40.146599f, 106.779350f, 84.014519f, 66.932846f, 7.030437f, -25.116844f, 113.391785f, 69.206184f, -40.131550f, 153.922714f, 143.482407f, 34.324108f, 313.322266f, 143.053925f, + -22.836403f, 14.444014f, -49.938580f, -50.887901f, -139.897385f, 96.043907f, 97.666435f, -49.784187f, 51.330086f, 49.973110f, 36.349068f, 19.132963f, -131.961868f, -176.490204f, 84.266121f, 168.514481f, + -37.196350f, -31.474470f, -145.770355f, 73.739777f, -13.749185f, -36.067165f, -73.649986f, 69.205238f, 57.424969f, -29.286839f, 50.821659f, 151.341400f, 196.208405f, 145.900299f, 73.740807f, 59.942463f, + -48.483910f, 109.854485f, 175.905731f, 107.550728f, 182.661041f, 127.042297f, 56.932144f, -4.789718f, -40.474155f, -4.276073f, 15.682971f, -20.523733f, -2.600147f, 47.862274f, 10.863128f, -28.360899f, + -38.357815f, 12.670331f, -18.138870f, 42.676201f, 92.674187f, 36.742359f, 52.514660f, -5.668614f, -115.172440f, 43.835323f, 63.331287f, 56.027485f, 115.062248f, 3.782463f, -26.444477f, 273.927704f, + -70.262749f, -8.360212f, 4.471777f, 3.338549f, 59.435081f, 178.305817f, 71.276756f, -18.074911f, 8.591813f, 75.633720f, 25.886395f, -77.867401f, -98.552505f, 23.158539f, 89.771393f, 55.317135f, + -43.166435f, -20.516071f, -21.639067f, 58.366417f, -37.861000f, 87.507889f, 228.670868f, 168.987442f, 151.971222f, 95.947609f, 62.651642f, 55.564648f, -1.630664f, -52.394417f, -111.610962f, 110.578148f, + -3.820340f, 128.265320f, 241.518845f, 81.778282f, 29.058863f, -34.290600f, -72.192398f, -76.477760f, -66.605965f, -11.854634f, 31.504972f, 41.623680f, 49.260410f, 46.350578f, 25.015730f, 0.466101f, + -74.436829f, -21.117008f, 50.415005f, 41.561440f, 24.320005f, 3.089626f, 84.041313f, 176.202164f, 134.057922f, 109.030365f, 39.151558f, 51.717243f, 205.704620f, 150.353210f, 111.243019f, 26.017376f, + -0.922336f, 8.721625f, 49.901936f, 20.303036f, -45.592381f, -38.354324f, 58.650257f, -53.023918f, -56.784760f, -43.466248f, -124.796875f, -123.479370f, -110.273987f, -34.595661f, -16.564945f, 34.111702f, + -30.525043f, -2.907169f, -178.401764f, -44.677608f, -17.348223f, -31.677353f, -14.556618f, -31.867868f, 20.035357f, 2.716418f, -2.513957f, -41.058819f, -52.201744f, 41.795589f, 65.134628f, 38.667267f, + -92.711220f, -81.188332f, 165.320053f, 146.599762f, 22.146481f, -21.278519f, -40.179806f, -68.613281f, 115.899551f, 67.407913f, 2.306747f, 0.489086f, -1.279717f, 7.199631f, -40.551086f, -8.905237f, + -56.852066f, -32.516693f, -15.849322f, 68.052765f, 92.856277f, 97.140533f, 38.923428f, -64.162766f, -101.875473f, -63.277794f, -78.587120f, -32.074039f, 106.572845f, 95.851845f, 38.376095f, 15.852232f, + -53.858379f, -20.356443f, -84.059586f, -105.614822f, -51.119640f, -2.018013f, -77.954140f, -175.482086f, 79.777809f, 19.744781f, -53.635326f, -51.991280f, -49.052460f, -20.029406f, 16.108711f, 24.346910f, + 65.308319f, 24.882250f, -53.676472f, 35.191555f, -75.052139f, -100.669830f, 139.646332f, 26.502867f, -87.489288f, 144.371918f, 85.639999f, -5.127411f, 49.956379f, -68.622177f, -194.561584f, -257.525238f, + -72.071564f, 88.947922f, 181.188904f, -141.172180f, 21.858112f, 21.690336f, 80.976372f, 74.222694f, 14.965449f, 4.836141f, -13.533607f, 12.946756f, 80.034424f, 18.799646f, -1.797944f, -11.852658f, + -55.483604f, -28.792759f, -51.127789f, -27.386141f, -3.054134f, 270.684784f, 127.849197f, -7.843138f, -46.675968f, -2.273780f, -41.244320f, 107.264915f, 109.052605f, -57.428146f, -94.478180f, 201.012741f, + 58.417904f, 129.794479f, 88.032875f, -43.482414f, 1.503281f, 18.233082f, -4.274224f, -9.935395f, -90.743645f, -138.744934f, 13.047572f, 99.424622f, 79.562485f, -10.939718f, -128.585876f, -119.279457f, + -106.237129f, -91.740143f, 68.612770f, 19.771488f, -23.333853f, 6.881060f, -114.409279f, 37.293667f, 27.547070f, -21.962831f, 62.975277f, 126.174873f, 137.661591f, 88.351982f, 21.489727f, 36.082073f, + 49.864040f, 101.988388f, 41.740952f, -2.001927f, -83.519859f, 222.208069f, 203.213120f, 27.999317f, -8.565958f, -46.465588f, -117.948517f, -54.232327f, 28.665607f, -23.274929f, -55.554726f, -66.254654f, + -52.622940f, -27.317537f, -61.638550f, 130.447021f, 38.187801f, -83.578110f, 91.015823f, 65.975807f, -29.551769f, -55.780457f, -169.249374f, 136.943573f, 43.613983f, 85.860855f, 145.805145f, 83.847832f, + 15.936594f, 90.094734f, -129.895950f, 8.163410f, -8.877759f, -0.308240f, -33.896103f, 62.208805f, 103.766220f, 66.179008f, 27.826544f, -68.158470f, -111.605835f, -60.367783f, -34.454868f, -50.271614f, + -51.554886f, -21.024059f, -18.746723f, 92.973503f, -20.544609f, -4.456210f, 41.285404f, -2.806954f, 202.912384f, 180.625198f, 93.686058f, 105.542542f, -40.283619f, -22.137281f, 28.882605f, 86.878098f, + 166.593475f, 204.373047f, 175.392639f, 6.547530f, -67.728508f, -1.995924f, 104.944130f, 25.587944f, -76.602921f, 2.406351f, -37.560753f, -66.060905f, 82.223129f, -5.690928f, -80.786980f, -192.349823f, + 5.629341f, 24.807444f, 33.959263f, 139.666183f, 67.254204f, 113.142754f, 5.735409f, -36.896606f, 102.640205f, 13.071086f, -75.008644f, 135.153275f, 112.622955f, 93.684708f, 55.722095f, 17.380138f, + -78.392647f, 67.183548f, 41.397549f, 47.879723f, -95.470726f, -223.305008f, 34.429707f, 203.257339f, 81.951591f, 24.905951f, -102.131676f, -172.571976f, 80.404175f, -3.289175f, -63.539902f, -178.667999f, + -8.287517f, 28.750130f, 2.918398f, -190.230972f, 30.998074f, -24.621058f, 57.173183f, 67.070824f, -30.796249f, 125.394531f, 129.483154f, 69.056030f, 61.479782f, 5.587425f, -26.427807f, -42.299709f, + -53.579803f, 3.932101f, 19.298172f, 60.866375f, 203.507217f, 92.185112f, 4.952492f, 26.875463f, 58.186695f, 23.599648f, -55.879227f, -95.170883f, -128.408905f, -56.559254f, -13.179881f, -6.339478f, + 32.887764f, 110.878929f, 47.881824f, 61.743668f, 32.366764f, -43.335995f, 132.176224f, 23.456560f, -170.514435f, 21.666937f, -6.332648f, 200.979141f, 36.371750f, 69.918137f, 54.659019f, -24.744967f, + -48.200562f, -14.369913f, -109.873573f, 132.716415f, 33.534492f, 21.027716f, 29.168337f, -6.307217f, 29.464451f, -16.280748f, -5.903169f, -33.134434f, -163.021179f, -114.629570f, 242.579056f, 153.244400f, + -245.076645f, -119.108864f, 30.076363f, 46.303539f, 62.514118f, -1.635351f, 60.051456f, 85.906593f, 63.114086f, 96.103294f, 94.438263f, 60.414326f, 27.037113f, 46.420849f, 23.188837f, -4.991467f, + 48.128830f, 147.061111f, -19.109028f, -62.073257f, 73.974655f, 35.121407f, 48.858604f, 17.476908f, -27.161577f, -26.075205f, -23.080959f, -22.997204f, 22.060139f, 18.945644f, 12.078902f, 26.152502f, + -11.399143f, 35.660534f, 7.735845f, 28.895029f, 11.763469f, 67.383682f, 32.067547f, 172.807663f, 41.212330f, -64.892891f, 202.612274f, 66.128975f, 24.998840f, 129.758621f, 97.607491f, 64.079475f, + 16.849846f, -8.063315f, -96.246849f, -42.776253f, -61.709106f, 8.576951f, 41.636856f, 4.893633f, -184.455124f, 90.305283f, 214.893326f, 77.557159f, -52.231232f, -59.771557f, 115.499374f, 10.271899f, + -52.432972f, -10.506747f, 32.671928f, 30.160530f, -30.343365f, -108.296562f, -124.741348f, -114.153496f, 22.689064f, 53.387943f, 152.464798f, 195.884613f, 223.508789f, 180.783310f, 88.327431f, 24.891722f, + 44.069721f, 128.580154f, 87.081917f, 97.057877f, 80.764305f, 71.377975f, 76.201828f, 19.052254f, -86.244247f, -55.772846f, -78.071259f, 59.358582f, -18.004076f, -97.394165f, 203.970825f, 128.282730f, + -29.760933f, -17.373451f, -26.997627f, 298.461884f, 135.359589f, -5.173777f, 50.398880f, 16.654043f, -28.228046f, 127.954193f, 88.721756f, 31.046473f, 72.834770f, 51.219566f, 124.174194f, 179.024460f, + -71.473610f, -8.079115f, -80.057495f, 73.607849f, -11.565989f, 6.495467f, 75.740349f, 69.178413f, 172.751343f, 50.800892f, -29.929661f, -55.132294f, -39.521492f, -34.578106f, 29.018955f, 18.790855f, + 4.944071f, 58.298073f, 72.167747f, -20.213915f, -49.029274f, -5.245622f, 135.798645f, 114.233170f, 48.812248f, 154.565750f, 91.869995f, 9.594048f, 29.263868f, 29.942837f, 60.248390f, 56.068134f, + 20.676535f, 129.442535f, 114.557922f, 65.585472f, 9.776167f, 76.209824f, 142.460770f, 65.045479f, 31.220121f, 68.550804f, 85.770195f, 65.380852f, 33.190002f, -80.774033f, -170.538605f, 61.262844f, + -23.503824f, 198.854172f, 14.658221f, 54.346264f, 29.317448f, -15.893962f, 6.081978f, 50.519886f, 129.337723f, 125.421761f, 131.127838f, 197.853912f, 207.257065f, 154.032959f, 90.113098f, 66.989784f, + -62.626553f, 0.772200f, -28.967108f, -85.223953f, -146.385803f, 82.958099f, -24.949381f, 93.786552f, 94.234512f, -39.738564f, -74.894165f, -36.566628f, -39.978264f, 3.580493f, -15.366054f, -32.318130f, + -54.913471f, 12.737958f, -117.342049f, -59.757664f, -14.541400f, -24.570677f, -20.895752f, -18.573147f, -31.541250f, 3.822062f, 63.816460f, 68.993881f, 96.323494f, 113.108215f, 60.914867f, 38.452541f, + -74.699921f, -33.957706f, 274.636505f, 42.985191f, -13.963601f, 35.379383f, 27.960144f, -9.738332f, 15.494253f, -5.034236f, -48.640007f, -28.968740f, -24.268768f, 34.582504f, 11.429268f, 13.275120f, + 32.094368f, 53.997974f, 58.552933f, 60.038021f, 15.307313f, -14.686091f, -79.145950f, -92.266304f, 6.606106f, -31.398434f, 1.153621f, 61.459366f, 211.102783f, 199.088348f, 139.181458f, 90.360237f, + 13.961225f, 107.374969f, -42.851105f, 111.353691f, 85.895554f, -10.314037f, -36.885490f, -48.654755f, -86.748146f, -13.811635f, -28.521486f, -133.376526f, 66.836365f, 63.232780f, 50.980137f, 33.082199f, + 0.719331f, 59.833492f, 52.997120f, 109.368217f, 78.191238f, 181.871460f, 110.776367f, 41.572018f, 32.371555f, 59.911247f, 100.121117f, 147.708542f, 67.625221f, -90.737854f, -184.544220f, -95.008667f, + 17.476965f, 51.444233f, 130.136398f, 86.703789f, -21.260557f, -68.970932f, -246.970169f, 111.624298f, 106.618408f, -70.539291f, -17.852840f, 74.588875f, 22.676432f, 82.200706f, 75.469940f, 86.911079f, + -21.763515f, 88.468819f, 69.462051f, 28.234957f, 137.905060f, 97.628418f, 100.231453f, 71.048729f, -26.023251f, 18.455929f, 100.078911f, 91.618004f, 129.572266f, 162.295929f, 117.883362f, 73.251602f, + 20.503130f, 123.177406f, 98.707054f, -61.945675f, -133.366302f, -42.585499f, 17.451960f, -85.110466f, -109.559792f, 57.105164f, 49.939404f, 71.494247f, 106.595436f, -5.332850f, -10.096909f, 95.286079f, + -98.944687f, -70.735931f, -91.238235f, 77.213318f, 43.834396f, 103.931374f, 14.455284f, -18.546854f, 60.298130f, 69.783432f, 81.150307f, 75.219597f, 117.014557f, 133.318222f, 45.655605f, 44.907104f, + -17.773401f, 16.685305f, 35.210880f, 58.453514f, -39.141315f, 154.492096f, 160.108368f, 54.245167f, 143.091782f, 18.370985f, -46.498653f, 30.260704f, -32.253002f, 114.865051f, 94.643227f, 42.126125f, + 8.305405f, 73.466248f, 71.895737f, 7.841229f, -21.096027f, -83.805069f, 142.372986f, 32.864574f, -67.817047f, 0.273488f, -20.763456f, -39.558540f, 45.929173f, 245.427109f, 63.606354f, -33.662392f, + -9.818366f, 215.528351f, -34.979908f, -46.600666f, -52.985126f, -36.442551f, -23.177917f, 89.040405f, 115.907364f, 85.734955f, 85.459145f, 53.537971f, 38.606289f, 35.117779f, -9.532898f, -46.531116f, + 70.627678f, 109.927406f, 130.617371f, 127.965912f, 68.237038f, 175.485825f, 141.335297f, 101.838699f, 85.440056f, 100.211769f, -9.782224f, -34.040447f, -36.362839f, -103.141747f, -183.433182f, -281.405945f, + 13.631050f, 103.082298f, 153.487061f, 95.539291f, 80.014320f, 47.319462f, -47.897068f, 144.786728f, 150.994034f, 33.507248f, 38.446999f, -11.836577f, -52.710697f, -5.434279f, -6.585646f, -43.525864f, + -46.841568f, -36.090340f, 91.028366f, 223.865204f, 162.487579f, 161.622040f, 92.281693f, 72.600441f, 62.700375f, 116.998756f, 104.000122f, 56.268940f, 3.313947f, 39.044933f, 12.683829f, -66.421524f, + -53.988426f, -4.046704f, -43.765293f, -58.490433f, -61.409744f, 68.780487f, 180.177185f, 130.743820f, 59.566154f, 41.610359f, -29.455439f, -47.845570f, -53.330845f, -194.252975f, -99.193802f, -28.624321f, + -40.226192f, 19.173496f, -102.776230f, -115.559639f, -2.041245f, 17.804632f, 54.120743f, 35.981876f, 107.003677f, 67.225113f, 6.590813f, 31.162287f, 75.625832f, 94.116089f, 68.273361f, 19.100948f, + -81.027779f, -47.543785f, -81.577866f, 147.072006f, 140.771072f, 98.894592f, 98.462875f, 120.500710f, 69.188560f, -27.267778f, -26.730125f, 19.004963f, 28.982193f, 18.988167f, 15.679336f, 0.912693f, + 60.063290f, 68.444176f, -38.306652f, 274.795166f, 81.706596f, 1.653586f, 59.518078f, 81.843979f, 45.452694f, -98.132660f, 99.485909f, 72.635452f, 59.011009f, 43.986206f, 68.393044f, 153.643753f, + -54.196396f, 105.024605f, -46.588734f, 29.173431f, 46.003738f, 53.556526f, -1.795008f, -94.732422f, 74.060417f, 37.018723f, 57.519180f, 40.312252f, 4.980567f, 1.190214f, 65.139198f, 16.854973f, + 83.697479f, 124.012848f, 136.707169f, 105.191093f, 50.574764f, 7.427887f, 165.615936f, 120.431198f, 35.935490f, 146.632690f, 107.372086f, 101.817780f, 178.695389f, 32.956997f, -43.566265f, -170.662201f, + -45.706387f, 22.193432f, 48.583588f, 7.809529f, 108.639076f, 20.145479f, -8.151466f, 16.626425f, 45.076824f, 100.699867f, 56.172535f, 31.245377f, 41.698193f, 43.700226f, 33.969212f, 13.647820f, + 30.930534f, 96.241432f, 20.796177f, 20.642069f, -30.030577f, 105.024353f, 182.286652f, 51.891121f, -23.670610f, 19.259420f, -25.995207f, 144.711807f, 151.061661f, 39.095882f, 216.597061f, 151.033951f, + 55.972961f, 165.229263f, 42.423416f, -9.421596f, 9.304959f, -24.490530f, 65.337448f, 0.772096f, 34.500309f, 28.041000f, 164.460770f, 148.005341f, -44.788933f, -131.866653f, 118.602074f, 174.952545f, + -36.805115f, 2.389628f, -160.064590f, -74.493019f, -34.030777f, -37.621536f, 21.365028f, 11.060207f, 72.113487f, 151.263977f, 203.227783f, 232.426346f, 240.348846f, 198.561386f, 130.545105f, 79.279305f, + -5.590322f, 28.170464f, 31.049704f, 123.245987f, 143.256638f, 251.395782f, 35.744690f, -42.437420f, -26.080673f, 16.841845f, 18.203182f, 83.183998f, 68.937943f, -68.034676f, 4.653465f, 101.861214f, + 75.410370f, 146.164398f, 101.675415f, 188.854752f, 65.271072f, -0.098294f, 44.761238f, -45.286770f, -80.445572f, 95.316223f, -28.573139f, 1.249410f, 194.675003f, 77.615021f, 9.229208f, 122.592499f, + -53.932175f, 216.979111f, -2.220833f, 63.310429f, 91.275101f, 57.843071f, 70.857147f, 42.466930f, 77.749489f, 57.652969f, 21.516739f, -1.124474f, -30.274309f, -13.056955f, 15.011532f, -30.375456f, + 67.425507f, 84.229256f, 101.499359f, 28.049738f, -35.614960f, 320.076202f, 252.214386f, 152.618103f, 138.893570f, 99.840240f, 27.951473f, 49.207226f, 65.402916f, 7.603233f, -14.404366f, -35.147362f, + -19.139826f, 222.586807f, 160.578033f, 15.308187f, 37.928532f, 2.810670f, 89.260468f, 73.903893f, -14.074634f, 9.220748f, 52.358765f, 29.237804f, 68.572754f, 74.369972f, 135.163269f, 53.634529f, + 27.498774f, 55.932766f, 90.594849f, 106.451241f, 66.339134f, 276.491119f, 112.921783f, 68.186401f, 34.717724f, 217.367447f, 183.300674f, 171.332642f, 233.111526f, 113.635857f, -94.105415f, 101.164040f +}; + +/*----------------------------------------------------------------------------------* + * LSF quantization - Scaling factors + *----------------------------------------------------------------------------------*/ + +/* stable ISP vector */ +const float stable_ISP[M] = +{ + 0.9808f, 0.9239f, 0.8315f, 0.7071f, 0.5556f, 0.3827f, 0.1951f, 0.0f, -0.195f, -0.3826f, -0.5555f, -0.7071f, -0.8314f, -0.9238f, -0.9808f, 0.045f +}; + +/* stable ISF vector */ +const float stable_ISF[M] = +{ + 399.846527f, 799.890991f, 1199.888550f, 1600.019531f, 1999.927002f, 2399.963379f, 2799.979736f, 3200.0f, 3599.812256f, 3999.815918f, 4399.827637f, 4799.980469f, 5199.744629f, 5599.576660f, 6000.153320f, 1554.147827f +}; + +/* stable LSP vector (corresponds to GEWB_Ave[]) */ +const float stable_LSP[M] = +{ + 0.9899f, 0.9667f, 0.8998f, 0.7837f, 0.6581f, 0.5009f, 0.3307f, 0.1643f, -0.0224f, -0.1955f, -0.3658f, -0.5200f, -0.6730f, -0.8040f, -0.9057f,-0.9700f +}; + + +/*----------------------------------------------------------------------------------* + * LSF quantization - Mean LSF vectors + *----------------------------------------------------------------------------------*/ +/* These are not used anywhere */ +/* A 16-by-1 matrix */ +const float means_wb_cleanspeech_lsf16k0[16] = {355.08f, 696.48f, 1260.55f, 1735.55f, 2220.70f, 2676.17f, 3123.44f, 3560.94f, 3989.45f, 4399.61f, 4869.14f, 5372.66f, 5894.53f, 6364.45f, 6883.20f, 7302.73f}; +/* A 16-by-1 matrix */ +const float means_swb_cleanspeech_lsf25k6[16] = {614.44f, 1437.24f, 2259.37f, 2994.68f, 3732.57f, 4420.10f, 5187.93f, 5985.97f, 6790.66f, 7523.16f, 8283.87f, 9010.86f, 9757.03f, 10458.90f, 11209.84f, 11888.64f}; +/* A 16-by-1 matrix */ +const float means_swb_cleanspeech_lsf32k0[16] = {739.65f, 1811.71f, 2794.79f, 3708.53f, 4594.87f, 5528.75f, 6583.99f, 7512.05f, 8455.51f, 9352.67f, 10266.73f, 11133.74f, 12067.91f, 12958.21f, 13940.67f, 14794.15f}; + +/* An 16-by-1 matrix */ +const float SVWB2_Ave[16] = +{ + 389.8438f, 581.2500f, 1047.6563f, 1493.3594f, 1985.9375f, 2462.8906f, 2923.8281f, 3392.9688f, 3851.9531f, 4298.4375f, 4819.9219f, 5337.5000f, 5893.7500f, 6378.9063f, 6899.6094f, 7325.7813f +}; +/* An 16-by-1 matrix */ +const float IANB_Ave[16] = +{ + 283.5938f, 559.7656f, 973.8281f, 1331.2500f, 1695.3125f, 2037.1094f, 2383.9844f, 2713.6719f, 3035.9375f, 3334.3750f, 3614.0625f, 3910.9375f, 4261.3281f, 4854.2969f, 5467.5781f, 5934.7656f +}; +/* An 16-by-1 matrix */ +const float IAWB_Ave[16] = +{ + 225.3906f, 527.3438f, 986.7188f, 1380.8594f, 1773.0469f, 2150.0000f, 2537.8906f, 2914.0625f, 3298.8281f, 3670.3125f, 4051.1719f, 4421.4844f, 4807.4219f, 5182.8125f, 5566.0156f, 5940.2344f +}; +/* An 16-by-1 matrix */ +const float IAWB2_Ave[16] = +{ + 285.5469f, 694.1406f, 1247.6563f, 1713.2813f, 2198.8281f, 2658.5938f, 3129.6875f, 3579.6875f, 4034.7656f, 4480.0781f, 4973.0469f, 5483.2031f, 5986.7188f, 6460.1563f, 6953.5156f, 7393.3594f +}; +/* An 16-by-1 matrix */ +const float UVNB_Ave[16] = +{ + 397.6563f, 689.0625f, 1115.6250f, 1465.2344f, 1801.1719f, 2113.2813f, 2434.7656f, 2719.1406f, 3001.9531f, 3243.7500f, 3460.5469f, 3642.5781f, 3897.2656f, 4586.3281f, 5351.1719f, 5888.2813f +}; +/* An 16-by-1 matrix */ +const float UVWB_Ave[16] = +{ + 350.7813f, 742.1875f, 1239.0625f, 1636.7188f, 2023.8281f, 2406.6406f, 2786.7188f, 3150.7813f, 3513.6719f, 3862.5000f, 4212.5000f, 4545.3125f, 4893.3594f, 5232.8125f, 5586.3281f, 5930.8594f +}; +/* An 16-by-1 matrix */ +const float SVNB_Ave[16] = +{ + 347.6563f, 495.3125f, 753.9063f, 1133.5938f, 1538.2813f, 1883.9844f, 2278.1250f, 2595.3125f, 2924.6094f, 3203.9063f, 3478.9063f, 3728.5156f, 4214.0625f, 4908.2031f, 5452.7344f, 5930.8594f +}; +/* An 16-by-1 matrix */ +const float SVWB_Ave[16] = +{ + 325.0000f, 487.5000f, 761.3281f, 1204.2969f, 1613.6719f, 1998.8281f, 2413.6719f, 2760.5469f, 3128.1250f, 3485.1563f, 3857.4219f, 4195.7031f, 4603.5156f, 5023.4375f, 5456.2500f, 5878.1250f +}; +/* An 16-by-1 matrix */ +const float GEWB_Ave[16] = +{ + 289.8438f, 527.3438f, 919.5313f, 1365.2344f, 1736.7188f, 2131.2500f, 2513.2813f, 2863.6719f, 3245.7031f, 3600.7813f, 3962.8906f, 4314.0625f, 4703.9063f, 5102.7344f, 5508.2031f, 5899.6094f +}; +/* An 16-by-1 matrix */ +const float GEWB2_Ave[16] = +{ + 355.0781f, 696.4844f, 1260.5469f, 1735.5469f, 2220.7031f, 2676.1719f, 3123.4375f, 3560.9375f, 3989.4531f, 4399.6094f, 4869.1406f, 5372.6563f, 5894.5313f, 6364.4531f, 6883.2031f, 7302.7344f +}; +/* An 16-by-1 matrix */ +const float GENB_Ave[16] = +{ + 326.5625f, 525.0000f, 881.6406f, 1274.6094f, 1630.0781f, 1965.2344f, 2324.2188f, 2619.9219f, 2935.1563f, 3216.4063f, 3469.1406f, 3687.1094f, 4059.7656f, 4775.7813f, 5412.1094f, 5912.1094f +}; +/* An 16-by-1 matrix */ +const float TRNB_Ave[16] = +{ + 358.9844f, 521.4844f, 822.6563f, 1227.3438f, 1598.4375f, 1928.9063f, 2306.6406f, 2605.4688f, 2925.7813f, 3202.7344f, 3464.0625f, 3689.0625f, 4118.7500f, 4837.1094f, 5429.6875f, 5920.3125f +}; +/* An 16-by-1 matrix */ +const float TRWB_Ave[16] = +{ + 325.7813f, 517.9688f, 840.2344f, 1305.0781f, 1681.6406f, 2069.9219f, 2467.9688f, 2811.7188f, 3190.2344f, 3543.3594f, 3906.6406f, 4244.9219f, 4637.1094f, 5043.7500f, 5463.2813f, 5877.3438f +}; +/* An 16-by-1 matrix */ +const float TRWB2_Ave[16] = +{ + 369.1406f, 603.9063f, 1119.5313f, 1621.0938f, 2086.7188f, 2565.6250f, 2992.1875f, 3441.0156f, 3864.8438f, 4271.0938f, 4753.9063f, 5303.5156f, 5851.9531f, 6359.3750f, 6880.4688f, 7335.1563f +}; +/* An 16-by-1 matrix */ +const float AUNB_Ave[16] = +{ + 346.4844f, 563.6719f, 920.3125f, 1247.6563f, 1603.5156f, 1933.2031f, 2281.6406f, 2591.7969f, 2905.0781f, 3195.7031f, 3463.6719f, 3702.3438f, 4056.6406f, 4758.5938f, 5413.2813f, 5910.5469f +}; +/* An 16-by-1 matrix */ +const float AUWB_Ave[16] = +{ + 316.4063f, 573.4375f, 967.1875f, 1334.7656f, 1717.1875f, 2086.7188f, 2465.2344f, 2818.3594f, 3191.7969f, 3546.0938f, 3917.9688f, 4284.7656f, 4692.9688f, 5107.4219f, 5525.7813f, 5911.3281f +}; +/* An 16-by-1 matrix */ +const float AUWB2_Ave[16] = +{ + 364.4531f, 681.6406f, 1187.5000f, 1623.8281f, 2101.1719f, 2535.1563f, 2986.7188f, 3408.2031f, 3848.4375f, 4269.5313f, 4771.0938f, 5330.8594f, 5883.5938f, 6366.0156f, 6889.0625f, 7331.2500f +}; +/* An 16-by-1 matrix */ +const float Predictor0[16] = +{ + 0.83499f, 0.83499f, 0.83499f, 0.82999f, 0.82999f, 0.82999f, 0.80499f, 0.80750f, 0.79999f, 0.79300f, 0.80750f, 0.80750f, 0.79300f, 0.78500f, 0.78500f, 0.75500f +}; +/* An 16-by-1 matrix */ +const float Predictor1[16] = +{ + 0.82501f, 0.82501f, 0.82501f, 0.81299f, 0.80301f, 0.81299f, 0.81299f, 0.79749f, 0.79999f, 0.79999f, 0.80750f, 0.82001f, 0.82001f, 0.81500f, 0.82501f, 0.81299f +}; +/* An 16-by-1 matrix */ +const float Predictor2[16] = +{ + 0.73999f, 0.72000f, 0.74799f, 0.73999f, 0.74799f, 0.73300f, 0.73300f, 0.72501f, 0.72501f, 0.73300f, 0.73999f, 0.73999f, 0.72000f, 0.70499f, 0.72000f, 0.70499f +}; +/* An 16-by-1 matrix */ +const float Predictor3[16] = +{ + 0.73999f, 0.73999f, 0.75500f, 0.73999f, 0.74799f, 0.72501f, 0.71500f, 0.70499f, 0.69000f, 0.70499f, 0.72000f, 0.75500f, 0.76300f, 0.75500f, 0.76300f, 0.75800f +}; +/* An 16-by-1 matrix */ +const float Predictor4[16] = +{ + 0.57999f, 0.56000f, 0.58801f, 0.57999f, 0.58801f, 0.57300f, 0.57300f, 0.56500f, 0.56500f, 0.57300f, 0.57999f, 0.57999f, 0.56000f, 0.54501f, 0.54001f, 0.52499f +}; +/* An 16-by-1 matrix */ +const float Predictor5[16] = +{ + 0.72751f, 0.72000f, 0.72000f, 0.72751f, 0.72751f, 0.72000f, 0.72000f, 0.72000f, 0.72751f, 0.73499f, 0.74301f, 0.75000f, 0.75000f, 0.71301f, 0.71301f, 0.71301f +}; +/* An 16-by-1 matrix */ +const float Predictor6[16] = +{ + 0.73499f, 0.72751f, 0.73499f, 0.72000f, 0.72000f, 0.70001f, 0.68301f, 0.66501f, 0.64499f, 0.67001f, 0.68301f, 0.74301f, 0.75000f, 0.72000f, 0.75000f, 0.74301f +}; +/* An 16-by-1 matrix */ +const float Predictor7[16] = +{ + 0.74301f, 0.73499f, 0.74301f, 0.74301f, 0.74301f, 0.73499f, 0.74301f, 0.75000f, 0.75000f, 0.75500f, 0.76501f, 0.74301f, 0.73499f, 0.72751f, 0.71301f, 0.75500f +}; +/* An 16-by-1 matrix */ +const float Predictor8[16] = +{ + 0.75500f, 0.75500f, 0.75500f, 0.75000f, 0.75000f, 0.75000f, 0.73499f, 0.72751f, 0.72000f, 0.71301f, 0.72751f, 0.72751f, 0.71301f, 0.70499f, 0.70499f, 0.67499f +}; +/* An 16-by-16 matrix */ +const float UVD_MA1[256] = +{ + -117.5781f, -196.4844f, -166.4063f, -73.0469f, -51.1719f, -25.0000f, -17.5781f, -7.8125f, 4.2969f, 21.8750f, 24.6094f, 35.1563f, 42.9688f, 68.3594f, 37.8906f, 12.8906f, + 62.8906f, 137.8906f, 185.1563f, 196.0938f, 276.9531f, 305.4688f, 310.1563f, 298.8281f, 246.8750f, 207.8125f, 158.5938f, 111.3281f, 89.8438f, 56.6406f, 37.8906f, 20.3125f, + -14.4531f, -1.9531f, 80.0781f, 126.1719f, 160.9375f, 136.3281f, 86.3281f, 35.5469f, -2.3438f, -23.0469f, -33.5938f, -43.7500f, -12.5000f, 81.6406f, 28.5156f, 8.9844f, + -106.6406f, -240.2344f, -320.3125f, -310.1563f, -325.7813f, -327.3438f, -321.0938f, -319.9219f, -293.3594f, -273.8281f, -250.3906f, -219.5313f, -152.7344f, -105.8594f, -71.8750f, -24.6094f, + 102.3438f, 65.6250f, 40.6250f, -3.5156f, -30.4688f, -63.6719f, -55.0781f, -77.7344f, -74.6094f, -97.2656f, -95.7031f, -123.8281f, -65.6250f, 208.9844f, 42.5781f, 12.8906f, + -160.1563f, -263.6719f, -266.0156f, -238.6719f, -195.3125f, -154.6875f, -106.6406f, -71.4844f, -18.3594f, 23.4375f, 75.7813f, 139.4531f, 407.8125f, 421.8750f, 130.8594f, 54.6875f, + 60.1563f, 72.2656f, 100.0000f, 92.9688f, 79.2969f, 92.9688f, 109.3750f, 101.5625f, 117.1875f, 104.2969f, 100.7813f, 76.5625f, 47.2656f, -241.4063f, -102.7344f, -23.4375f, + 134.7656f, 275.3906f, 335.5469f, 307.0313f, 290.2344f, 228.1250f, 166.0156f, 104.2969f, 65.6250f, 41.0156f, 28.9063f, 10.9375f, 46.4844f, 104.2969f, 41.0156f, 15.2344f, + -15.2344f, -64.8438f, -89.8438f, -76.5625f, -99.6094f, -107.8125f, -124.2188f, -136.3281f, -151.1719f, -171.0938f, -210.5469f, -239.4531f, -293.7500f, -373.4375f, -528.5156f, -635.9375f, + 194.5313f, 187.1094f, 161.7188f, 90.2344f, 38.2813f, 1.9531f, -7.0313f, -16.0156f, -23.4375f, -30.4688f, -35.5469f, -37.5000f, -31.6406f, 28.1250f, 11.7188f, -3.1250f, + 16.0156f, 46.8750f, 25.3906f, 55.0781f, 45.7031f, 72.6563f, 97.2656f, 116.7969f, 163.2813f, 203.1250f, 221.0938f, 241.4063f, 270.3125f, 226.1719f, 125.3906f, 64.8438f, + -92.1875f, -108.5938f, -26.9531f, 5.0781f, 44.1406f, 141.4063f, 173.8281f, 210.5469f, 196.4844f, 151.1719f, 105.0781f, 67.1875f, 46.8750f, -8.2031f, 0.3906f, 1.5625f, + -40.2344f, -17.9688f, -53.5156f, -51.5625f, -42.1875f, -37.8906f, -26.1719f, -14.4531f, -3.1250f, 16.0156f, 32.0313f, 41.7969f, 16.7969f, -236.3281f, -73.8281f, -21.8750f, + -85.9375f, -123.0469f, -188.2813f, -201.5625f, -191.0156f, -173.8281f, -162.1094f, -141.4063f, -118.7500f, -80.0781f, -53.1250f, -26.5625f, -2.7344f, 51.1719f, 27.3438f, 9.7656f, + -3.9063f, -47.2656f, -82.0313f, -92.5781f, -87.5000f, -117.9688f, -96.0938f, -121.0938f, -105.8594f, -133.9844f, -111.3281f, -142.1875f, 10.9375f, 274.6094f, 52.7344f, 21.0938f, + 46.0938f, 19.5313f, -26.1719f, -64.8438f, -136.3281f, -162.5000f, -172.6563f, -174.2188f, -171.4844f, -164.0625f, -149.2188f, -124.6094f, -95.7031f, -81.6406f, -54.6875f, -32.0313f +}; +/* An 16-by-16 matrix */ +const float UVD_MA2[256] = +{ + -29.2969f, -25.0000f, -58.5938f, -90.2344f, -106.2500f, -108.5938f, -96.8750f, -75.7813f, -60.9375f, -41.7969f, -28.9063f, -16.7969f, -35.9375f, -8.2031f, 3.5156f, 1.9531f, + 153.5156f, 107.4219f, -4.6875f, -60.9375f, -81.2500f, -83.9844f, -63.2813f, -51.5625f, -44.9219f, -42.5781f, -36.7188f, -33.2031f, -40.6250f, -3.9063f, 1.9531f, -0.3906f, + -116.0156f, -151.9531f, -38.6719f, -30.4688f, -25.7813f, -7.4219f, -4.6875f, 3.1250f, 0.0000f, -1.1719f, -5.8594f, -8.5938f, -44.1406f, -32.0313f, -6.2500f, 0.7813f, + 23.0469f, -4.2969f, 1.9531f, -12.8906f, -4.2969f, -23.8281f, -27.3438f, -54.2969f, -55.8594f, -93.3594f, -80.8594f, -87.1094f, 277.7344f, 273.8281f, 55.8594f, 26.5625f, + -76.1719f, 158.5938f, 86.7188f, 19.1406f, -2.3438f, -8.9844f, -2.3438f, 3.5156f, 0.0000f, 5.0781f, 10.1563f, 19.1406f, -17.1875f, -50.3906f, -7.0313f, -2.7344f, + 8.9844f, -11.7188f, -55.0781f, 30.8594f, -7.0313f, -29.6875f, -21.4844f, -5.4688f, 17.1875f, 38.2813f, 34.3750f, 33.5938f, -37.5000f, -137.1094f, -43.7500f, -15.2344f, + 148.4375f, 128.5156f, 91.7969f, 67.5781f, 55.0781f, 28.1250f, 9.7656f, -1.5625f, -2.3438f, -7.4219f, -8.2031f, -12.8906f, -21.4844f, -8.9844f, 1.1719f, -0.3906f, + -31.6406f, -82.0313f, -110.9375f, 61.7188f, 154.6875f, 113.2813f, 63.6719f, 23.0469f, -9.7656f, -8.5938f, -3.9063f, -2.3438f, -17.9688f, -12.5000f, 3.5156f, 1.9531f, + 3.5156f, 13.2813f, -5.8594f, 1.9531f, 8.9844f, -18.7500f, -49.6094f, -94.9219f, -135.5469f, -164.4531f, -177.7344f, -185.5469f, -193.3594f, -175.3906f, -114.8438f, -63.6719f, + -5.0781f, -66.7969f, -162.5000f, -161.7188f, -95.7031f, -9.7656f, 26.9531f, 39.8438f, 40.6250f, 32.8125f, 19.5313f, 12.8906f, -14.8438f, -1.5625f, 0.0000f, 1.9531f, + 19.5313f, 46.0938f, 26.5625f, 14.4531f, 57.4219f, 124.6094f, 144.9219f, 138.6719f, 113.6719f, 79.6875f, 50.7813f, 31.6406f, 8.2031f, 17.9688f, 14.0625f, 8.5938f, + -37.1094f, -42.1875f, 121.4844f, 83.5938f, -10.9375f, -59.7656f, -88.2813f, -75.0000f, -50.3906f, -26.9531f, -16.4063f, -4.2969f, -18.7500f, -6.6406f, 5.0781f, 0.7813f, + -72.2656f, -87.1094f, -40.6250f, 10.1563f, 20.7031f, 34.7656f, 51.5625f, 70.7031f, 100.7813f, 135.1563f, 155.0781f, 173.8281f, 153.1250f, 94.1406f, 48.8281f, 22.6563f, + 32.4219f, 12.8906f, -3.5156f, -31.6406f, 15.6250f, 38.6719f, 21.8750f, 3.1250f, -19.9219f, -33.2031f, -41.4063f, -48.4375f, -76.5625f, 1.9531f, 1.9531f, 0.0000f, + 55.8594f, 57.8125f, 7.4219f, -47.2656f, -96.4844f, -82.4219f, -26.1719f, 32.4219f, 77.3438f, 104.6875f, 113.2813f, 117.1875f, 93.7500f, 64.0625f, 33.5938f, 14.4531f, + -77.3438f, -53.1250f, 144.5313f, 145.3125f, 117.1875f, 93.7500f, 60.9375f, 44.1406f, 30.8594f, 23.4375f, 17.1875f, 11.3281f, -13.6719f, -14.8438f, 2.3438f, 2.7344f +}; +/* An 16-by-16 matrix */ +const float UVWB_MA3[256] = +{ + -10.1563f, 8.9844f, 2.7344f, -2.3438f, -0.3906f, 1.1719f, 15.6250f, 13.6719f, -16.7969f, -9.3750f, 21.8750f, 61.3281f, 103.5156f, 165.2344f, 149.2188f, 101.5625f, + 23.8281f, -117.1875f, -50.7813f, -39.4531f, -3.1250f, 41.4063f, 42.1875f, 44.5313f, 34.3750f, 16.7969f, -0.7813f, -12.8906f, -21.8750f, 26.1719f, 11.3281f, 5.0781f, + -12.1094f, 18.3594f, 17.5781f, -47.2656f, 17.9688f, 8.5938f, 43.3594f, 91.0156f, -100.0000f, -98.4375f, -48.0469f, -27.7344f, -12.1094f, 21.0938f, 21.8750f, 12.8906f, + 7.8125f, -60.1563f, 26.1719f, 77.3438f, -90.6250f, -65.2344f, -33.5938f, -4.6875f, 30.8594f, 45.3125f, 34.3750f, 30.4688f, 17.1875f, 29.2969f, 10.5469f, -2.7344f, + -5.4688f, 59.7656f, -64.8438f, 8.2031f, 41.7969f, 25.0000f, 91.0156f, -87.1094f, -57.4219f, -10.5469f, -0.3906f, 16.7969f, 23.8281f, 27.3438f, 19.5313f, 7.0313f, + 1.1719f, -44.9219f, -3.1250f, 55.8594f, 75.0000f, 75.3906f, -48.4375f, -76.1719f, -77.3438f, -63.2813f, -29.2969f, 5.4688f, 17.5781f, 32.4219f, 30.8594f, 19.1406f, + 4.6875f, -22.2656f, 9.7656f, -11.3281f, -4.2969f, 4.6875f, -2.7344f, -5.0781f, -4.6875f, 12.1094f, 28.9063f, 38.6719f, -3.9063f, -164.4531f, -81.6406f, -43.3594f, + -9.7656f, 44.9219f, 46.4844f, -7.4219f, -45.7031f, -64.0625f, -79.2969f, -92.5781f, -80.4688f, -66.0156f, -42.9688f, -16.0156f, -4.2969f, 5.8594f, 0.3906f, -2.7344f, + -5.0781f, 66.4063f, -55.8594f, -50.0000f, -87.5000f, -36.7188f, 0.3906f, 37.5000f, 56.2500f, 39.8438f, 11.3281f, 0.7813f, -14.4531f, 17.9688f, 2.7344f, -4.6875f, + -4.2969f, 3.9063f, -13.2813f, 14.8438f, 9.3750f, 33.5938f, 58.2031f, 82.4219f, 93.7500f, 108.9844f, 96.4844f, 85.1563f, 60.1563f, 62.8906f, 28.9063f, 5.8594f, + -9.3750f, 25.0000f, 42.9688f, 48.8281f, -9.3750f, 48.0469f, 62.8906f, 64.8438f, 69.1406f, 7.0313f, -43.7500f, -45.3125f, -55.0781f, -45.7031f, -44.1406f, -35.5469f, + -1.5625f, -7.8125f, -6.6406f, -4.2969f, -10.5469f, 5.0781f, -5.8594f, -15.6250f, -22.6563f, -61.3281f, -98.4375f, -110.5469f, -112.5000f, -72.6563f, -63.2813f, -43.7500f, + -7.8125f, 0.7813f, 12.5000f, 17.1875f, -12.1094f, -19.1406f, 3.1250f, 5.0781f, 21.4844f, -23.0469f, -63.2813f, -82.8125f, -23.8281f, 150.0000f, 44.9219f, 14.0625f, + -1.5625f, 16.4063f, -29.2969f, 35.9375f, 104.6875f, -79.2969f, -48.8281f, 3.9063f, 20.3125f, 47.2656f, 28.1250f, -16.7969f, -42.5781f, -18.3594f, -25.7813f, -29.6875f, + -15.2344f, 29.6875f, 104.6875f, -99.2188f, -10.9375f, 33.9844f, 0.7813f, 35.5469f, 33.2031f, 26.5625f, 34.7656f, 37.5000f, 16.4063f, 35.1563f, 15.2344f, 1.5625f, + 0.7813f, 0.7813f, -21.8750f, 2.7344f, 26.1719f, -12.1094f, -85.5469f, -75.0000f, -9.3750f, 57.0313f, 97.2656f, 105.0781f, 81.6406f, 77.7344f, 41.4063f, 12.1094f +}; +/* An 16-by-16 matrix */ +const float SVNB_SN1[256] = +{ + 52.7344f, 42.5781f, 52.7344f, -59.7656f, -214.4531f, 83.5938f, 162.5000f, 76.1719f, 113.6719f, 96.4844f, 39.0625f, -49.6094f, -226.1719f, -62.5000f, -25.7813f, -12.5000f, + -41.7969f, -58.5938f, -107.0313f, -58.2031f, 250.7813f, 232.0313f, 132.0313f, 71.4844f, 31.6406f, -12.1094f, -5.4688f, -58.5938f, -151.1719f, -15.6250f, -17.1875f, -7.0313f, + 28.5156f, 16.4063f, 66.7969f, 132.4219f, 83.2031f, 16.4063f, -53.5156f, -108.2031f, -148.0469f, -172.2656f, -171.8750f, -186.7188f, 105.4688f, 49.2188f, -1.5625f, 2.3438f, + -119.9219f, -187.1094f, -248.4375f, -232.8125f, -39.0625f, 32.4219f, 65.2344f, 78.1250f, 101.5625f, 146.8750f, 204.2969f, 410.5469f, 446.0938f, 191.4063f, 97.2656f, 42.1875f, + -57.8125f, -83.9844f, -126.5625f, -222.6563f, -358.2031f, -267.5781f, -81.2500f, 49.6094f, 111.3281f, 137.8906f, 172.2656f, 367.1875f, 429.6875f, 178.9063f, 89.4531f, 39.0625f, + 166.7969f, 168.7500f, 214.0625f, 166.4063f, 51.9531f, 5.0781f, -3.5156f, -55.0781f, -42.1875f, -56.2500f, -76.1719f, -163.6719f, -286.3281f, -56.2500f, -42.5781f, -17.5781f, + -44.9219f, -85.9375f, -75.7813f, 258.2031f, 350.0000f, 268.7500f, 191.0156f, 137.1094f, 82.4219f, 100.7813f, 57.4219f, 11.7188f, -291.4063f, -306.2500f, -60.9375f, -37.1094f, + 6.2500f, -18.7500f, -34.3750f, -167.9688f, -311.7188f, 14.0625f, 79.6875f, 26.5625f, 67.9688f, 63.2813f, 7.8125f, 23.8281f, 244.9219f, 103.9063f, 39.8438f, 18.7500f, + -98.4375f, -144.5313f, -246.0938f, -239.8438f, 265.6250f, 400.0000f, 339.4531f, 233.5938f, 163.6719f, 101.1719f, 75.3906f, 10.5469f, 35.1563f, 60.9375f, 20.7031f, 10.5469f, + -18.7500f, 12.8906f, 10.1563f, -88.6719f, -217.1875f, -299.2188f, -152.7344f, 90.2344f, 161.3281f, 110.1563f, 88.2813f, 34.7656f, 75.7813f, 73.0469f, 17.1875f, 11.7188f, + -79.6875f, -113.6719f, -134.7656f, -51.1719f, 48.8281f, 28.1250f, 6.2500f, -11.3281f, -41.4063f, -19.1406f, -10.5469f, 71.4844f, 278.9063f, 108.2031f, 44.5313f, 19.1406f, + -4.2969f, 80.0781f, 111.3281f, 26.9531f, -22.6563f, -80.8594f, -117.5781f, -62.5000f, -11.7188f, -0.7813f, 4.6875f, -38.6719f, -226.5625f, -69.5313f, -31.2500f, -16.0156f, + 46.8750f, 73.8281f, 109.7656f, 166.7969f, 91.4063f, 53.9063f, 48.4375f, 49.2188f, 19.5313f, 80.0781f, 47.2656f, 29.6875f, -311.3281f, -470.3125f, -91.7969f, -51.9531f, + 24.6094f, -7.0313f, 57.0313f, 260.1563f, 187.5000f, 92.1875f, 52.3438f, -15.2344f, -37.8906f, -50.7813f, -68.3594f, -147.6563f, -291.4063f, -62.1094f, -41.4063f, -17.9688f, + 150.7813f, 155.8594f, 162.1094f, 61.3281f, -68.3594f, -110.1563f, -123.0469f, -124.2188f, -86.7188f, -87.8906f, -104.2969f, -133.5938f, 123.8281f, 59.3750f, 5.8594f, 5.4688f, + 15.2344f, 21.8750f, 27.7344f, -37.1094f, -151.1719f, -198.8281f, -232.4219f, -182.0313f, -154.2969f, -72.6563f, -9.3750f, 164.4531f, 317.9688f, 114.0625f, 49.6094f, 20.3125f +}; +/* An 16-by-16 matrix */ +const float SVNB_SN2[256] = +{ + -6.2500f, 43.3594f, 43.3594f, -34.7656f, -44.9219f, -157.8125f, -200.7813f, 63.2813f, 108.2031f, 16.0156f, -36.7188f, -34.7656f, 5.8594f, 12.1094f, 0.7813f, 0.7813f, + -32.0313f, -38.6719f, -9.7656f, -112.1094f, -181.2500f, 79.6875f, 7.0313f, -48.0469f, -14.8438f, 21.8750f, 42.5781f, 77.3438f, 62.5000f, 37.5000f, 16.0156f, 7.4219f, + -37.1094f, -24.2188f, -94.5313f, -162.1094f, 124.2188f, 46.0938f, -47.2656f, 17.1875f, 28.9063f, 15.6250f, 33.2031f, 44.5313f, 20.3125f, 14.0625f, 8.2031f, 3.1250f, + 11.3281f, 15.6250f, 16.7969f, 8.9844f, -78.9063f, -58.2031f, 112.5000f, 58.2031f, -7.8125f, -42.5781f, -72.6563f, -107.4219f, -49.6094f, 7.0313f, -9.7656f, -2.3438f, + 7.8125f, 14.0625f, -37.8906f, -89.0625f, 220.7031f, 198.4375f, 52.3438f, 16.4063f, -27.3438f, -92.5781f, -100.7813f, -101.1719f, -48.0469f, -3.5156f, -11.3281f, -3.9063f, + -28.1250f, -66.0156f, 192.1875f, 180.8594f, 75.3906f, 79.6875f, -5.0781f, -29.2969f, -32.0313f, -48.8281f, -70.7031f, -89.8438f, -70.7031f, -3.9063f, -15.6250f, -4.6875f, + -42.1875f, -86.3281f, -89.4531f, 253.1250f, 224.6094f, 112.5000f, 57.0313f, 0.3906f, -5.4688f, -1.5625f, -19.9219f, -46.8750f, -31.6406f, -5.4688f, -6.6406f, -1.9531f, + -77.7344f, -103.1250f, -120.7031f, 81.6406f, 3.1250f, -50.0000f, 9.3750f, -18.3594f, 33.9844f, 100.3906f, 93.7500f, 72.2656f, 36.3281f, 27.3438f, 13.2813f, 6.2500f, + 9.7656f, 32.0313f, -23.4375f, -60.5469f, -158.9844f, -240.2344f, 11.3281f, 39.0625f, -44.1406f, 12.5000f, 80.8594f, 100.7813f, 79.2969f, 43.3594f, 19.1406f, 8.2031f, + 14.4531f, 49.6094f, 37.1094f, 1.5625f, 43.7500f, -17.5781f, -84.7656f, -61.7188f, -108.2031f, -158.9844f, -118.7500f, -59.3750f, 28.1250f, 20.3125f, -2.3438f, 0.0000f, + -11.7188f, -31.6406f, -45.3125f, -162.5000f, -85.5469f, 264.4531f, 210.1563f, 128.1250f, 83.2031f, 23.4375f, -23.4375f, -42.5781f, -30.4688f, 0.0000f, -1.9531f, 0.0000f, + 3.5156f, -5.8594f, 10.1563f, 29.2969f, -68.3594f, -131.2500f, -262.8906f, -228.9063f, 92.9688f, 121.0938f, 77.3438f, 73.8281f, 82.8125f, 49.2188f, 18.7500f, 9.3750f, + -7.0313f, -1.5625f, -31.2500f, 39.8438f, 50.7813f, -45.3125f, -104.6875f, -183.9844f, -221.4844f, -40.6250f, 80.0781f, 86.3281f, 55.8594f, 31.6406f, 11.3281f, 4.6875f, + 1.5625f, 15.2344f, 25.3906f, 44.9219f, 34.3750f, 73.8281f, 53.1250f, 48.4375f, 19.1406f, 41.4063f, 14.4531f, 34.7656f, -146.4844f, -244.5313f, -44.5313f, -28.5156f, + 210.9375f, 205.0781f, 184.3750f, 86.3281f, 46.0938f, -12.1094f, 5.8594f, 2.7344f, -27.7344f, -54.2969f, -42.1875f, -36.3281f, -5.0781f, -1.5625f, -5.0781f, -3.1250f, + -17.1875f, -17.1875f, -55.8594f, -106.2500f, -205.0781f, -142.5781f, 187.1094f, 196.0938f, 121.8750f, 87.8906f, 62.8906f, 28.1250f, 10.9375f, 16.4063f, 10.1563f, 4.6875f +}; +/* An 16-by-16 matrix */ +const float SVWB_SN1[256] = +{ + -27.7344f, -23.8281f, -66.4063f, -219.9219f, -375.7813f, -330.0781f, 72.6563f, 164.4531f, 110.1563f, 134.3750f, 101.5625f, 60.5469f, 72.6563f, 20.3125f, -7.0313f, -4.2969f, + -41.7969f, -54.2969f, -112.8906f, -105.4688f, 307.8125f, 240.2344f, 97.2656f, 67.9688f, -0.3906f, -9.3750f, 62.1094f, 41.4063f, -17.9688f, -71.4844f, -73.0469f, -41.7969f, + -56.2500f, -86.3281f, -83.9844f, 140.2344f, 75.0000f, -13.2813f, -72.6563f, -127.3438f, -100.0000f, -48.4375f, -19.1406f, 32.8125f, 83.5938f, 92.5781f, 72.6563f, 35.5469f, + 85.1563f, 129.6875f, 130.8594f, 16.0156f, -74.6094f, -153.9063f, -239.8438f, -212.1094f, -162.1094f, -148.0469f, -111.3281f, -59.7656f, -33.5938f, -39.4531f, -26.9531f, -5.0781f, + 229.2969f, 240.6250f, 285.9375f, 163.6719f, 105.4688f, 98.4375f, 39.8438f, 15.6250f, 20.7031f, -13.6719f, -22.2656f, -13.2813f, 7.4219f, -5.4688f, -5.8594f, -46.8750f, + -29.6875f, -86.7188f, -49.6094f, 475.0000f, 464.0625f, 318.3594f, 207.8125f, 125.0000f, 121.4844f, 89.0625f, 13.2813f, -23.0469f, -37.5000f, -33.5938f, -17.1875f, -14.8438f, + -68.7500f, -110.1563f, -198.0469f, -177.7344f, 438.2813f, 530.8594f, 376.9531f, 289.8438f, 238.2813f, 175.0000f, 185.1563f, 160.9375f, 72.2656f, 49.6094f, 49.6094f, -9.3750f, + -60.9375f, -87.8906f, 6.2500f, 178.9063f, 165.2344f, 171.0938f, 153.5156f, 156.2500f, 205.0781f, 257.0313f, 266.4063f, 266.0156f, 239.0625f, 171.0938f, 104.2969f, 26.5625f, + 34.7656f, 46.8750f, 67.1875f, 138.6719f, 76.1719f, -3.1250f, -8.5938f, -26.1719f, -42.9688f, -15.6250f, -36.3281f, -63.6719f, -149.2188f, -267.5781f, -361.7188f, -182.8125f, + -88.6719f, -141.4063f, -176.5625f, -225.3906f, -83.2031f, -8.5938f, 21.8750f, 32.0313f, 51.5625f, 84.3750f, 135.9375f, 164.0625f, 139.8438f, 116.7969f, 100.3906f, 55.8594f, + 14.8438f, -30.0781f, 45.7031f, 334.3750f, 189.8438f, 110.1563f, 6.2500f, -60.1563f, -50.7813f, -123.0469f, -241.4063f, -305.8594f, -348.4375f, -212.8906f, -34.3750f, 23.0469f, + 85.1563f, 126.5625f, 90.6250f, -63.2813f, -227.7344f, -215.6250f, 49.2188f, 24.2188f, -15.6250f, -10.5469f, -88.6719f, -135.9375f, -130.4688f, -126.5625f, -92.9688f, -25.3906f, + 32.0313f, 6.2500f, -7.8125f, -210.5469f, -307.4219f, 235.9375f, 132.8125f, 101.1719f, 101.5625f, -20.7031f, -98.0469f, -82.4219f, -4.6875f, 49.6094f, 66.7969f, 38.6719f, + -9.3750f, 65.6250f, 78.9063f, -55.4688f, -87.1094f, -175.0000f, -110.1563f, 47.6563f, 57.8125f, 60.5469f, 141.7969f, 148.4375f, 135.5469f, 102.7344f, 48.4375f, -26.5625f, + 64.4531f, 58.5938f, 88.2813f, 37.1094f, -67.1875f, -100.3906f, -161.3281f, -199.2188f, -208.2031f, -286.7188f, -396.0938f, -471.0938f, -325.7813f, -63.2813f, 2.3438f, 37.8906f, + -30.4688f, -28.1250f, -31.6406f, -125.7813f, -236.3281f, -285.5469f, -289.0625f, -220.3125f, -139.0625f, -85.5469f, -58.9844f, 4.2969f, 78.1250f, 92.5781f, 82.8125f, 66.4063f +}; +/* An 16-by-16 matrix */ +const float SVWB_SN2[256] = +{ + -49.2188f, -59.3750f, -133.5938f, -165.2344f, 121.4844f, 37.1094f, 1.1719f, 11.3281f, -36.3281f, 1.5625f, 88.6719f, 75.3906f, 55.4688f, 46.8750f, 36.3281f, 24.2188f, + 74.2188f, 100.7813f, 149.2188f, 121.0938f, 64.8438f, -4.2969f, -30.0781f, -26.1719f, -84.7656f, -127.7344f, -128.9063f, -147.6563f, -180.0781f, -120.7031f, -55.4688f, -18.3594f, + -6.2500f, -22.6563f, -30.0781f, -132.4219f, -208.5938f, 183.2031f, 155.8594f, 92.5781f, 113.2813f, 52.7344f, 13.2813f, 33.5938f, -5.4688f, -30.0781f, -11.7188f, 3.9063f, + 5.0781f, -1.5625f, 251.5625f, 223.4375f, 160.9375f, 171.0938f, 106.2500f, 111.7188f, 91.4063f, 69.1406f, 46.0938f, 57.4219f, 51.1719f, 53.9063f, 49.6094f, 14.8438f, + -28.5156f, -34.3750f, -43.7500f, 16.4063f, 14.0625f, 55.0781f, 165.6250f, 150.7813f, 196.8750f, 225.0000f, 204.2969f, 188.6719f, 168.3594f, 128.1250f, 91.0156f, 23.0469f, + -46.8750f, -66.0156f, -105.4688f, -173.8281f, -231.6406f, -104.6875f, -51.9531f, -53.9063f, -4.2969f, 21.8750f, 51.9531f, 82.0313f, 64.8438f, 45.3125f, 47.6563f, 53.5156f, + 110.1563f, 144.5313f, 99.6094f, 29.6875f, -34.7656f, -74.6094f, 54.2969f, 31.2500f, 4.6875f, 68.7500f, 72.2656f, 56.6406f, 95.3125f, 98.8281f, 67.5781f, -7.0313f, + 5.0781f, 5.4688f, -16.7969f, 28.5156f, -23.0469f, -105.4688f, -175.0000f, -242.9688f, -23.0469f, 146.0938f, 137.8906f, 114.4531f, 73.8281f, -21.0938f, -77.7344f, -47.6563f, + -29.2969f, -41.4063f, -109.7656f, -121.8750f, 228.5156f, 158.2031f, 72.2656f, 24.2188f, -68.7500f, -124.6094f, -128.9063f, -156.2500f, -163.2813f, -63.2813f, -1.5625f, 30.4688f, + -12.1094f, -4.2969f, -30.8594f, -32.4219f, -34.3750f, -107.0313f, -133.9844f, -168.3594f, -243.3594f, -202.3438f, -57.8125f, -4.2969f, -6.6406f, -8.2031f, 8.2031f, 35.1563f, + -39.4531f, -67.5781f, -93.7500f, 173.4375f, 118.3594f, 47.2656f, 40.6250f, -14.4531f, 72.2656f, 52.3438f, -17.5781f, -53.1250f, -64.0625f, 1.5625f, 59.7656f, 44.5313f, + -3.1250f, 15.6250f, 41.7969f, -29.6875f, -99.2188f, -215.2344f, -262.8906f, 112.5000f, 124.2188f, 9.7656f, 5.4688f, -24.2188f, -37.8906f, -0.7813f, 5.0781f, -7.8125f, + 33.9844f, 49.6094f, 31.2500f, 84.3750f, 131.2500f, 57.4219f, 73.4375f, 64.4531f, -3.9063f, 48.8281f, 75.3906f, 33.9844f, -49.2188f, -154.6875f, -287.5000f, -261.3281f, + 0.7813f, 1.5625f, 37.5000f, 72.2656f, 2.3438f, 24.2188f, -14.4531f, -53.1250f, -69.1406f, -97.6563f, -88.6719f, 78.5156f, 290.6250f, 254.2969f, 137.1094f, 28.9063f, + -6.2500f, -15.2344f, -32.0313f, -69.1406f, -148.4375f, -71.4844f, -9.3750f, -42.5781f, -75.7813f, -158.9844f, -250.3906f, -240.2344f, -61.3281f, 57.0313f, 74.6094f, 65.2344f, + -8.2031f, -4.6875f, -15.2344f, -24.6094f, -62.1094f, -50.0000f, 7.8125f, 2.3438f, 6.2500f, 15.2344f, -23.4375f, -94.9219f, -232.0313f, -286.3281f, -142.1875f, 17.9688f +}; +/* An 16-by-32 matrix */ +const float GEWB_MA1[512] = +{ + 105.0781f, 104.6875f, 162.5000f, 112.1094f, 61.3281f, 2.7344f, -51.5625f, -107.8125f, -188.2813f, -273.8281f, -400.3906f, -527.3438f, -641.4063f, -383.5938f, -125.3906f, -19.1406f, + 92.5781f, 370.7031f, 536.7188f, 479.6875f, 522.2656f, 476.1719f, 438.6719f, 396.8750f, 332.8125f, 293.7500f, 259.3750f, 218.3594f, 175.0000f, 119.5313f, 75.7813f, 32.4219f, + -2.3438f, -68.7500f, -145.7031f, -43.3594f, -86.3281f, -151.1719f, -188.6719f, -249.6094f, -294.1406f, -307.0313f, -302.3438f, -255.8594f, -128.1250f, -44.5313f, -9.7656f, 10.5469f, + 52.7344f, 64.0625f, -1.5625f, -70.7031f, -142.1875f, -206.2500f, -181.2500f, -165.6250f, -153.5156f, -122.6563f, -94.5313f, -72.2656f, -40.6250f, -23.8281f, -12.5000f, -14.4531f, + 5.8594f, -85.1563f, -125.7813f, 260.9375f, 233.2031f, 133.9844f, 76.5625f, -1.9531f, -17.9688f, -62.1094f, -140.2344f, -204.6875f, -245.7031f, -214.0625f, -120.3125f, -37.1094f, + 94.5313f, 180.8594f, 299.6094f, 258.2031f, 217.9688f, 157.4219f, 104.6875f, 74.6094f, 27.7344f, -1.5625f, -19.9219f, -40.2344f, -55.0781f, -68.7500f, -62.8906f, -55.4688f, + -69.9219f, -57.4219f, 279.2969f, 337.8906f, 378.9063f, 364.0625f, 321.0938f, 298.0469f, 235.1563f, 200.7813f, 170.3125f, 144.5313f, 111.3281f, 73.8281f, 41.4063f, 14.0625f, + -19.1406f, -88.6719f, -230.0781f, -364.4531f, -457.8125f, -273.4375f, -96.8750f, -68.3594f, -51.5625f, -51.5625f, -48.8281f, -40.2344f, -18.3594f, -19.1406f, -4.6875f, 23.4375f, + -2.7344f, -88.6719f, -157.8125f, 106.2500f, 32.4219f, -19.5313f, -64.4531f, -124.6094f, -133.9844f, -195.7031f, -285.5469f, -366.7969f, -395.7031f, -237.1094f, -78.9063f, -0.7813f, + -29.6875f, -105.8594f, -258.2031f, -227.3438f, 115.6250f, 33.5938f, -23.4375f, -64.8438f, -130.8594f, -122.6563f, -83.2031f, -111.3281f, -126.5625f, -109.3750f, -64.0625f, -15.2344f, + -103.1250f, -176.5625f, -43.3594f, 66.7969f, 89.4531f, 139.4531f, 138.6719f, 180.0781f, 198.8281f, 201.9531f, 191.0156f, 172.2656f, 135.5469f, 96.0938f, 61.7188f, 29.2969f, + 26.1719f, -19.1406f, -132.8125f, -213.2813f, -296.0938f, -358.9844f, -342.1875f, -283.9844f, -257.0313f, -221.4844f, -192.1875f, -156.2500f, -91.4063f, -54.6875f, -24.6094f, 14.0625f, + -55.4688f, 36.7188f, 200.7813f, 156.2500f, 158.5938f, 151.9531f, 148.0469f, 161.3281f, 152.7344f, 147.2656f, 138.2813f, 122.6563f, 95.7031f, 60.9375f, 36.7188f, 13.2813f, + 37.8906f, -18.3594f, -123.4375f, -242.1875f, -341.4063f, -69.9219f, -80.4688f, -113.2813f, -118.7500f, -200.7813f, -269.5313f, -282.4219f, -196.4844f, -98.4375f, -28.5156f, 15.2344f, + 189.4531f, 263.2813f, 207.8125f, 76.1719f, 14.8438f, -23.4375f, 6.6406f, 20.3125f, 24.6094f, 28.9063f, 33.2031f, 24.2188f, 13.6719f, -3.9063f, -8.5938f, -19.9219f, + -41.0156f, -8.9844f, 112.1094f, 153.9063f, 183.2031f, 237.8906f, 275.7813f, 335.9375f, 364.4531f, 364.4531f, 341.4063f, 308.2031f, 249.2188f, 181.6406f, 116.0156f, 57.8125f, + -87.1094f, -194.9219f, -326.9531f, -317.5781f, -152.7344f, -90.2344f, -69.5313f, -71.0938f, -31.6406f, 0.7813f, 32.8125f, 44.1406f, 51.1719f, 55.4688f, 49.6094f, 41.7969f, + -25.0000f, 105.0781f, 343.3594f, 331.6406f, 395.7031f, 451.9531f, 488.2813f, 522.2656f, 493.3594f, 459.3750f, 409.3750f, 351.5625f, 274.6094f, 196.0938f, 124.2188f, 64.4531f, + 23.8281f, 0.3906f, -77.3438f, -81.6406f, -134.7656f, -162.8906f, -109.3750f, -109.3750f, -119.9219f, -106.2500f, -133.2031f, -163.2813f, -235.9375f, -288.2813f, -346.4844f, -153.9063f, + 17.5781f, 30.0781f, 48.4375f, 59.3750f, 38.6719f, 16.7969f, 7.8125f, -1.5625f, -35.5469f, -33.2031f, -75.0000f, -109.3750f, -212.5000f, -294.5313f, -459.3750f, -506.2500f, + 67.5781f, 26.9531f, -19.1406f, -88.2813f, -134.3750f, -187.1094f, -191.0156f, -241.4063f, -283.9844f, -355.0781f, -438.2813f, -564.8438f, -504.6875f, -192.1875f, -80.0781f, 3.9063f, + -31.2500f, -31.2500f, 132.0313f, 111.3281f, 48.0469f, 18.7500f, -29.6875f, -31.2500f, -41.0156f, -46.0938f, -42.1875f, -31.2500f, -22.6563f, -10.9375f, -3.5156f, -3.1250f, + 28.9063f, -30.8594f, -114.0625f, -241.4063f, -295.3125f, 134.7656f, 84.3750f, 70.3125f, 55.8594f, -28.5156f, -72.6563f, -87.1094f, -78.1250f, -55.8594f, -20.3125f, -8.2031f, + -98.8281f, -202.7344f, -225.7813f, -73.4375f, -37.5000f, -13.6719f, -2.7344f, 10.5469f, 51.9531f, 85.1563f, 100.7813f, 100.7813f, 90.2344f, 70.3125f, 46.8750f, 27.3438f, + 106.6406f, 289.0625f, 371.0938f, 287.5000f, 273.8281f, 248.0469f, 238.6719f, 235.1563f, 221.0938f, 208.2031f, 192.9688f, 174.6094f, 136.7188f, 89.8438f, 51.1719f, 16.4063f, + -39.0625f, -134.7656f, -274.2188f, -137.5000f, 276.9531f, 266.4063f, 189.4531f, 126.5625f, 62.8906f, 43.7500f, 57.8125f, 9.7656f, -34.3750f, -41.4063f, -33.5938f, -39.4531f, + 119.9219f, 103.5156f, 98.8281f, 25.3906f, -24.6094f, -29.2969f, -66.0156f, -110.1563f, -152.3438f, -195.7031f, -214.8438f, -207.8125f, -158.5938f, -115.6250f, -72.6563f, -51.5625f, + -10.1563f, 27.3438f, 19.5313f, -32.8125f, -34.7656f, 10.9375f, 41.4063f, 77.7344f, 119.1406f, 152.7344f, 175.7813f, 183.2031f, 163.6719f, 117.5781f, 74.6094f, 31.2500f, + 8.5938f, 15.2344f, -60.1563f, -166.4063f, -233.2031f, -194.1406f, -62.1094f, -26.9531f, 16.0156f, 37.1094f, 44.5313f, 44.5313f, 38.6719f, 12.8906f, -2.7344f, -15.6250f, + -63.2813f, -139.0625f, -199.6094f, -180.0781f, -185.5469f, -200.3906f, -186.3281f, -189.4531f, -154.2969f, -97.2656f, -53.1250f, -27.7344f, -1.5625f, 12.8906f, 21.0938f, 25.0000f, + -32.0313f, -115.2344f, -219.5313f, 94.1406f, 25.3906f, -63.6719f, -88.6719f, -150.0000f, -92.5781f, -89.4531f, -103.9063f, -87.1094f, -36.7188f, 3.9063f, 16.0156f, 12.1094f, + -40.6250f, -126.1719f, -117.9688f, 286.3281f, 252.3438f, 163.2813f, 105.8594f, 58.2031f, 60.5469f, 60.1563f, 46.4844f, 38.6719f, 34.7656f, 24.6094f, 5.0781f, -6.2500f +}; +/* An 16-by-32 matrix */ +const float GETRNB_SN1[512] = +{ + -46.4844f, -105.8594f, -166.7969f, 174.6094f, 125.3906f, 22.6563f, 14.4531f, -41.0156f, -25.3906f, 38.6719f, 41.4063f, 8.2031f, -108.2031f, 20.7031f, 3.5156f, -2.3438f, + -36.3281f, -94.1406f, -169.1406f, -322.6563f, -401.5625f, 6.6406f, 70.3125f, 53.9063f, 125.0000f, 91.4063f, 59.3750f, 91.7969f, 380.0781f, 232.0313f, 77.7344f, 37.5000f, + -117.1875f, -185.1563f, -216.0156f, -194.1406f, -146.0938f, -90.2344f, -87.5000f, -66.4063f, -56.6406f, 19.9219f, 60.1563f, 278.9063f, 522.6563f, 269.5313f, 105.8594f, 46.0938f, + -44.9219f, -89.0625f, -96.8750f, 3.5156f, -10.5469f, -76.5625f, -93.7500f, -105.0781f, -114.4531f, -121.0938f, -107.8125f, -99.2188f, 300.3906f, 187.8906f, 45.7031f, 23.0469f, + 67.1875f, 22.6563f, 183.2031f, 228.5156f, 200.0000f, 131.2500f, 56.6406f, -20.3125f, -65.2344f, -134.3750f, -148.0469f, -190.2344f, 111.3281f, 147.2656f, 10.5469f, 10.5469f, + 31.6406f, 13.2813f, 224.2188f, 335.5469f, 319.5313f, 274.2188f, 203.5156f, 134.3750f, 69.1406f, 8.9844f, -45.3125f, -107.0313f, -238.6719f, -30.4688f, -23.8281f, -13.6719f, + 29.6875f, 7.4219f, -40.6250f, -151.5625f, -268.3594f, 21.0938f, 108.9844f, 56.2500f, 92.5781f, 87.1094f, 42.9688f, 3.5156f, -130.8594f, 1.5625f, 1.1719f, -3.9063f, + 44.9219f, 148.4375f, 189.8438f, 174.2188f, 151.9531f, 123.4375f, 93.3594f, 97.2656f, 76.9531f, 80.8594f, 63.2813f, 55.0781f, -169.9219f, -592.1875f, -159.7656f, -53.1250f, + -57.0313f, -135.9375f, -166.0156f, 251.9531f, 389.8438f, 308.5938f, 237.8906f, 182.8125f, 110.1563f, 112.1094f, 59.7656f, 33.9844f, -180.0781f, -231.2500f, -34.3750f, -25.0000f, + -97.2656f, -183.9844f, -326.1719f, -250.7813f, 230.0781f, 375.0000f, 346.4844f, 248.8281f, 172.6563f, 111.7188f, 94.5313f, 51.5625f, 55.4688f, 116.7969f, 38.6719f, 17.1875f, + 50.0000f, 14.4531f, -46.8750f, -122.6563f, -223.0469f, -285.1563f, -339.0625f, -217.9688f, -101.1719f, -42.5781f, 3.1250f, 161.3281f, 447.2656f, 231.6406f, 82.0313f, 35.9375f, + 58.9844f, 129.2969f, 104.2969f, 50.7813f, -9.3750f, -34.7656f, -51.9531f, -16.7969f, -29.2969f, 22.2656f, 7.4219f, 36.7188f, -183.2031f, -310.9375f, -48.4375f, -35.1563f, + -132.4219f, -182.8125f, -114.0625f, -13.2813f, 29.6875f, 69.9219f, 90.2344f, 105.0781f, 101.1719f, 109.7656f, 107.4219f, 79.6875f, -36.3281f, 61.3281f, 20.7031f, 6.2500f, + 12.8906f, 68.7500f, 9.7656f, -78.5156f, -121.4844f, -194.1406f, -198.8281f, -94.5313f, -18.3594f, 2.3438f, 33.5938f, 18.7500f, -64.4531f, 68.7500f, 9.3750f, 3.1250f, + 10.5469f, 87.1094f, 180.0781f, 195.3125f, 187.1094f, 185.5469f, 191.0156f, 218.7500f, 248.0469f, 289.4531f, 360.9375f, 526.1719f, 603.9063f, 314.8438f, 108.2031f, 21.0938f, + 199.2188f, 181.2500f, 157.0313f, 44.5313f, -31.2500f, -111.3281f, -113.2813f, -125.3906f, -110.5469f, -143.7500f, -126.9531f, -165.6250f, 151.5625f, 157.0313f, 20.3125f, 14.8438f, + 203.5156f, 239.8438f, 285.9375f, 214.4531f, 167.1875f, 108.5938f, 70.3125f, 31.6406f, 5.4688f, -42.9688f, -79.6875f, -138.6719f, -253.5156f, -12.5000f, -21.8750f, -14.0625f, + 28.1250f, 10.1563f, 102.3438f, 102.7344f, 62.1094f, 44.1406f, 23.4375f, -3.9063f, -28.5156f, -47.2656f, -78.5156f, -128.5156f, -300.0000f, -23.8281f, -23.4375f, -15.2344f, + 33.2031f, 22.2656f, 45.3125f, -15.6250f, -30.4688f, -62.1094f, -60.1563f, -96.4844f, -85.9375f, -142.9688f, -129.2969f, -207.8125f, -13.6719f, 134.3750f, 0.0000f, 9.7656f, + 205.8594f, 358.9844f, 523.0469f, 478.5156f, 464.8438f, 399.6094f, 302.3438f, 225.3906f, 153.5156f, 62.5000f, -1.5625f, -71.8750f, -109.7656f, 11.3281f, -8.2031f, -4.6875f, + -89.8438f, -110.5469f, -132.0313f, -148.0469f, -122.2656f, -114.4531f, -63.6719f, -47.6563f, 5.8594f, 37.8906f, 94.9219f, 65.6250f, 141.0156f, 175.3906f, 39.8438f, 23.8281f, + 147.6563f, 144.1406f, 144.1406f, 53.1250f, 16.4063f, -28.1250f, -28.5156f, -60.1563f, -60.5469f, -101.5625f, -105.4688f, -173.4375f, -219.5313f, 67.5781f, -14.0625f, -3.5156f, + 65.6250f, 42.1875f, -14.0625f, -135.5469f, -218.3594f, -170.3125f, -99.2188f, -102.7344f, -92.1875f, -88.6719f, -96.4844f, -92.9688f, 310.9375f, 190.6250f, 48.0469f, 24.2188f, + -58.9844f, -46.0938f, 63.6719f, 176.5625f, 167.9688f, 189.0625f, 178.1250f, 163.2813f, 147.2656f, 141.7969f, 100.0000f, 71.4844f, -157.4219f, -558.2031f, -149.2188f, -49.2188f, + -79.6875f, -142.9688f, -254.6875f, -200.0000f, 167.1875f, 137.8906f, 71.0938f, 34.3750f, -3.9063f, -36.7188f, -21.0938f, -4.2969f, 312.8906f, 205.8594f, 58.9844f, 29.6875f, + 23.4375f, 30.8594f, -66.0156f, -181.6406f, -308.2031f, -329.6875f, -21.4844f, 70.7031f, 81.6406f, 67.1875f, 82.0313f, 41.7969f, 101.5625f, 155.8594f, 35.5469f, 20.3125f, + -26.9531f, -80.0781f, -147.2656f, -64.0625f, 252.7344f, 228.1250f, 117.9688f, 58.9844f, 12.5000f, -52.7344f, -53.1250f, -87.1094f, -105.0781f, 66.4063f, 1.5625f, 1.9531f, + 14.8438f, 163.2813f, 345.7031f, 382.4219f, 386.7188f, 401.1719f, 339.8438f, 314.0625f, 261.3281f, 209.7656f, 140.6250f, 94.1406f, -131.2500f, -500.3906f, -132.0313f, -43.3594f, + -164.0625f, -273.4375f, -356.2500f, -242.9688f, -131.6406f, -19.9219f, 26.1719f, 67.5781f, 127.3438f, 216.4063f, 299.2188f, 544.9219f, 646.8750f, 349.2188f, 152.3438f, 69.5313f, + -55.0781f, -98.4375f, -198.0469f, -321.0938f, -423.4375f, -330.0781f, -109.3750f, 7.8125f, 58.2031f, 94.5313f, 153.5156f, 371.4844f, 557.8125f, 289.0625f, 118.3594f, 52.7344f, + -46.8750f, -14.4531f, 12.1094f, 41.0156f, 28.1250f, 38.6719f, 20.7031f, 45.7031f, 23.0469f, 66.7969f, 46.8750f, 69.1406f, -161.7188f, -387.8906f, -62.5000f, -38.2813f, + -149.2188f, -239.0625f, -246.4844f, -65.2344f, 1.5625f, 40.6250f, 50.7813f, 55.0781f, 94.5313f, 126.9531f, 135.9375f, 167.9688f, 409.3750f, 254.2969f, 86.7188f, 42.5781f +}; +/* An 16-by-16 matrix */ +const float GETRNB_SN2[256] = +{ + -10.5469f, 27.7344f, 17.5781f, -1.5625f, 10.9375f, 26.9531f, 9.7656f, 36.7188f, 17.5781f, 35.1563f, 17.5781f, 33.9844f, -69.1406f, -221.4844f, -45.3125f, -23.0469f, + -81.2500f, -57.4219f, 207.4219f, 155.8594f, 77.7344f, 44.1406f, -8.2031f, -10.9375f, -13.2813f, -14.8438f, -18.7500f, -17.9688f, -18.3594f, 7.0313f, -0.3906f, -0.3906f, + 26.9531f, -7.8125f, -44.9219f, -138.6719f, -148.4375f, 151.5625f, 148.0469f, 75.3906f, 52.3438f, 14.4531f, -16.4063f, -23.4375f, -13.6719f, 11.3281f, 2.3438f, 1.9531f, + 41.7969f, 34.7656f, -38.2813f, -73.8281f, 148.0469f, 112.8906f, 26.5625f, 8.5938f, -27.7344f, -69.9219f, -73.0469f, -75.0000f, -53.5156f, 1.5625f, -6.6406f, -2.7344f, + -17.1875f, -31.6406f, -144.9219f, -175.0000f, 88.2813f, 29.2969f, -20.3125f, 16.7969f, 15.6250f, 14.0625f, 30.8594f, 46.8750f, 50.7813f, 29.6875f, 14.0625f, 5.8594f, + 51.1719f, 44.9219f, 75.0000f, 69.1406f, 9.7656f, -2.7344f, -8.9844f, -37.1094f, -51.5625f, -71.8750f, -80.4688f, -95.7031f, -78.1250f, -4.6875f, -11.3281f, -4.2969f, + 17.5781f, -9.7656f, -97.2656f, 19.5313f, -73.8281f, -139.8438f, 98.8281f, 56.6406f, -15.2344f, 10.5469f, 13.2813f, -7.8125f, -20.3125f, 5.0781f, 0.3906f, 0.7813f, + -99.2188f, -60.5469f, 8.9844f, -34.7656f, -11.7188f, 8.9844f, -8.9844f, -8.2031f, -17.5781f, -33.5938f, -35.9375f, -42.5781f, -18.7500f, 20.3125f, 1.1719f, 1.1719f, + -96.8750f, -91.0156f, 54.2969f, 83.2031f, 90.6250f, 141.0156f, 136.3281f, 156.6406f, 145.7031f, 117.5781f, 89.8438f, 80.8594f, 79.6875f, 39.4531f, 12.5000f, 5.4688f, + 191.7969f, 213.2813f, 159.7656f, 57.4219f, 13.2813f, -7.0313f, 20.3125f, 23.0469f, 18.7500f, 10.5469f, 5.4688f, 2.7344f, -0.3906f, -14.4531f, -6.2500f, -3.5156f, + 14.0625f, 16.0156f, 0.0000f, -8.2031f, -11.3281f, -25.0000f, -80.8594f, -135.1563f, -201.5625f, -138.6719f, -25.0000f, 28.5156f, 60.9375f, 36.7188f, 11.7188f, 4.2969f, + -10.9375f, -67.5781f, -108.5938f, 197.6563f, 166.7969f, 64.0625f, 43.3594f, 8.2031f, -12.8906f, -23.8281f, -30.4688f, -35.1563f, -12.5000f, 15.2344f, 1.5625f, 1.5625f, + -17.1875f, -23.4375f, -83.9844f, -145.7031f, -189.4531f, -105.4688f, 4.6875f, 58.9844f, 105.8594f, 103.5156f, 83.9844f, 69.5313f, 59.7656f, 27.7344f, 12.5000f, 6.6406f, + 42.9688f, 60.5469f, -11.3281f, -101.1719f, -85.1563f, -71.4844f, -68.3594f, -51.5625f, -33.2031f, -38.2813f, -33.9844f, -36.3281f, -30.0781f, 0.0000f, -3.5156f, -1.5625f, + -45.3125f, -5.4688f, 91.7969f, 0.3906f, -92.9688f, -155.4688f, -163.6719f, -21.4844f, 42.5781f, 30.0781f, 24.2188f, 28.9063f, 28.5156f, 18.3594f, 6.2500f, 3.1250f, + -7.8125f, -42.1875f, -85.5469f, 96.0938f, 7.8125f, -71.8750f, -128.1250f, -175.3906f, -26.1719f, 55.4688f, 48.8281f, 42.9688f, 35.5469f, 28.9063f, 10.9375f, 5.0781f +}; +/* An 16-by-32 matrix */ +const float GETRWB_SN1[512] = +{ + -90.6250f, -74.6094f, 110.1563f, 96.8750f, 134.3750f, 152.3438f, 167.1875f, 191.4063f, 210.1563f, 231.2500f, 242.1875f, 237.1094f, 208.2031f, 145.3125f, 101.9531f, 53.1250f, + -23.0469f, -88.6719f, -163.2813f, -112.5000f, -96.4844f, -175.0000f, -195.7031f, -251.5625f, -296.8750f, -360.1563f, -434.3750f, -470.3125f, -204.2969f, -50.7813f, 4.6875f, 51.1719f, + 54.2969f, 327.3438f, 547.6563f, 518.3594f, 572.2656f, 543.3594f, 535.5469f, 524.2188f, 476.5625f, 448.0469f, 406.6406f, 355.4688f, 286.3281f, 202.3438f, 130.8594f, 70.7031f, + 82.4219f, 57.8125f, -36.7188f, -107.4219f, -189.0625f, -228.9063f, -211.3281f, -247.6563f, -227.7344f, -199.6094f, -165.6250f, -125.7813f, -111.3281f, -116.7969f, -75.7813f, -33.9844f, + 160.1563f, 141.4063f, 131.6406f, 28.5156f, -14.0625f, -44.1406f, -70.3125f, -107.0313f, -145.7031f, -192.5781f, -195.7031f, -184.7656f, -153.5156f, -141.0156f, -105.8594f, -98.0469f, + -33.2031f, -142.9688f, -319.9219f, -207.8125f, 294.1406f, 268.7500f, 161.7188f, 79.2969f, 9.3750f, -16.7969f, 50.3906f, 23.4375f, -39.0625f, -48.0469f, -37.8906f, -44.5313f, + 1.5625f, 14.4531f, 189.0625f, 200.7813f, 132.8125f, 87.8906f, 34.7656f, 23.0469f, 15.6250f, 1.1719f, -1.9531f, -0.3906f, -4.2969f, -19.1406f, -16.7969f, -18.7500f, + -87.1094f, -183.9844f, -258.2031f, -221.4844f, -193.7500f, -202.7344f, -181.2500f, -211.7188f, -189.0625f, -133.9844f, -107.8125f, -72.2656f, -16.7969f, 6.6406f, 32.8125f, 51.9531f, + -41.4063f, -121.8750f, -260.9375f, -289.4531f, 150.3906f, 128.5156f, 47.2656f, -61.3281f, -165.2344f, -277.3438f, -373.8281f, -500.0000f, -446.4844f, -128.9063f, -7.8125f, 51.1719f, + 97.6563f, 61.3281f, 27.7344f, -121.0938f, -215.6250f, -289.0625f, -291.0156f, -303.9063f, -323.0469f, -415.6250f, -521.8750f, -636.3281f, -307.8125f, -76.1719f, -17.1875f, 51.1719f, + 54.6875f, 247.2656f, 378.9063f, 337.5000f, 338.6719f, 297.2656f, 266.7969f, 253.1250f, 223.4375f, 212.5000f, 201.5625f, 183.2031f, 149.6094f, 92.9688f, 55.8594f, 21.4844f, + 45.3125f, 55.8594f, 89.4531f, 52.3438f, -9.7656f, -46.8750f, -90.6250f, -130.0781f, -208.9844f, -250.7813f, -384.7656f, -491.7969f, -731.6406f, -674.6094f, -128.9063f, -3.9063f, + -25.0000f, -32.0313f, -24.2188f, -90.6250f, -120.3125f, -135.1563f, -115.6250f, -106.2500f, -59.7656f, -10.1563f, 42.1875f, 80.0781f, 90.6250f, 61.7188f, 50.3906f, 20.7031f, + 32.0313f, -35.9375f, -120.7031f, -308.9844f, -440.6250f, -101.1719f, -94.9219f, -158.2031f, -143.3594f, -248.8281f, -352.7344f, -423.4375f, -263.6719f, -77.7344f, 6.6406f, 57.0313f, + -96.4844f, -222.2656f, -346.0938f, -296.0938f, -130.4688f, -80.4688f, -61.7188f, -58.5938f, -25.0000f, 22.2656f, 74.2188f, 98.4375f, 101.9531f, 82.0313f, 63.6719f, 50.3906f, + -8.9844f, -124.6094f, -178.9063f, 308.9844f, 280.4688f, 156.2500f, 91.0156f, -31.6406f, -67.9688f, -156.2500f, -296.0938f, -409.3750f, -522.6563f, -405.4688f, -112.5000f, -2.3438f, + 19.5313f, 180.4688f, 118.3594f, -18.3594f, -47.6563f, -52.3438f, 5.8594f, 53.5156f, 69.9219f, 86.7188f, 103.9063f, 97.2656f, 85.5469f, 48.0469f, 31.2500f, 11.7188f, + -45.3125f, -129.6875f, -253.9063f, -431.2500f, -533.9844f, -269.9219f, -146.8750f, -115.2344f, -69.5313f, -77.7344f, -66.4063f, -9.3750f, 48.8281f, 37.1094f, 48.8281f, 65.6250f, + -25.7813f, -122.6563f, -205.4688f, 126.9531f, 60.9375f, -21.8750f, -44.5313f, -112.1094f, -49.2188f, -72.2656f, -114.0625f, -116.4063f, -73.8281f, -31.6406f, 0.3906f, 8.9844f, + 57.4219f, -11.7188f, -113.6719f, -301.1719f, -366.7969f, 102.3438f, 71.0938f, 49.2188f, 49.6094f, -39.0625f, -63.6719f, -52.3438f, -35.5469f, -37.1094f, -20.3125f, -7.4219f, + -87.8906f, -193.7500f, -175.3906f, -23.8281f, 17.9688f, 52.7344f, 71.0938f, 96.4844f, 126.5625f, 157.8125f, 178.5156f, 181.2500f, 164.0625f, 119.1406f, 81.6406f, 41.4063f, + 163.2813f, 121.8750f, 162.1094f, 28.9063f, -60.9375f, -134.7656f, -156.2500f, -247.6563f, -300.3906f, -412.8906f, -532.0313f, -719.1406f, -721.8750f, -183.9844f, -57.4219f, 33.9844f, + 14.8438f, 7.4219f, -90.6250f, -215.6250f, -272.6563f, -367.5781f, -188.6719f, 46.4844f, 21.0938f, -13.2813f, 27.3438f, -26.5625f, -56.2500f, -75.0000f, -98.8281f, -92.1875f, + 31.2500f, -11.7188f, -83.5938f, -61.3281f, -114.0625f, -121.8750f, -110.5469f, -135.5469f, -150.0000f, -145.3125f, -190.2344f, -196.4844f, -291.4063f, -371.0938f, -535.9375f, -251.5625f, + 17.1875f, 21.4844f, 48.4375f, 70.7031f, 48.8281f, 42.5781f, 23.8281f, 11.3281f, -28.5156f, -21.0938f, -80.4688f, -108.5938f, -249.2188f, -362.8906f, -610.5469f, -680.4688f, + 313.2813f, 321.4844f, 283.5938f, 137.8906f, 106.2500f, 47.6563f, 45.7031f, 36.7188f, 31.2500f, 15.6250f, 26.5625f, 18.3594f, 16.4063f, -7.4219f, -10.1563f, -26.9531f, + 19.5313f, -37.8906f, -119.5313f, -260.1563f, -358.5938f, -433.2031f, -439.0625f, -303.1250f, -277.3438f, -284.3750f, -263.6719f, -189.8438f, -58.5938f, -1.1719f, 36.3281f, 62.5000f, + 31.6406f, -56.2500f, -51.1719f, 124.6094f, 88.6719f, -37.5000f, -92.1875f, -201.9531f, -277.7344f, -370.7031f, -480.8594f, -642.1875f, -634.7656f, -173.4375f, -45.7031f, 33.5938f, + -89.8438f, -92.5781f, 228.9063f, 312.1094f, 363.6719f, 399.6094f, 420.7031f, 460.5469f, 442.5781f, 430.0781f, 401.1719f, 355.0781f, 285.5469f, 201.1719f, 128.9063f, 66.7969f, + 175.0000f, 246.8750f, 408.9844f, 305.4688f, 246.4844f, 152.3438f, 60.5469f, -32.0313f, -133.5938f, -267.5781f, -430.8594f, -593.7500f, -694.9219f, -363.6719f, -83.5938f, 13.2813f, + -30.0781f, -137.5000f, -137.8906f, 307.4219f, 366.4063f, 264.4531f, 200.3906f, 137.5000f, 110.9375f, 108.5938f, 96.4844f, 70.7031f, 55.0781f, 28.5156f, 3.1250f, -15.2344f, + 21.0938f, 16.4063f, -26.1719f, -116.4063f, -181.6406f, -231.6406f, -208.2031f, -213.6719f, -244.5313f, -289.4531f, -381.6406f, -514.4531f, -650.3906f, -239.4531f, -46.4844f, 31.2500f +}; +/* An 16-by-16 matrix */ +const float GETRWB_SN2[256] = +{ + -78.9063f, -96.0938f, -139.0625f, -139.0625f, -90.6250f, -64.0625f, -30.8594f, 1.5625f, 30.4688f, 50.7813f, 59.3750f, 64.4531f, 66.4063f, 55.0781f, 35.1563f, 27.3438f, + 14.8438f, 30.4688f, -28.1250f, -72.2656f, -174.2188f, -215.6250f, 105.0781f, 115.2344f, 40.6250f, 30.0781f, -21.0938f, -71.8750f, -65.6250f, -28.1250f, -12.5000f, -0.7813f, + 26.9531f, 36.3281f, 15.2344f, 45.3125f, 39.0625f, 17.9688f, 19.5313f, -0.3906f, -0.7813f, 24.2188f, 3.1250f, -41.0156f, -157.8125f, -256.2500f, -192.9688f, -87.5000f, + -111.3281f, -119.1406f, 102.7344f, 37.8906f, 11.3281f, 12.8906f, -9.3750f, 21.0938f, 13.6719f, 9.7656f, -1.5625f, -2.3438f, -11.7188f, 5.0781f, 7.8125f, 8.2031f, + -10.9375f, -27.3438f, -62.5000f, 13.2813f, 1.9531f, -56.6406f, -103.1250f, -166.0156f, -210.5469f, -128.5156f, -7.4219f, 89.0625f, 160.5469f, 109.3750f, 55.0781f, 19.9219f, + 95.3125f, 95.7031f, 7.4219f, -124.6094f, -180.0781f, -71.8750f, -3.9063f, 18.3594f, 85.9375f, 114.4531f, 120.7031f, 128.9063f, 109.7656f, 54.6875f, 27.7344f, 4.6875f, + -50.0000f, -98.0469f, -146.0938f, 165.6250f, 108.9844f, 26.5625f, 13.6719f, -26.5625f, 5.0781f, 17.5781f, -2.3438f, -16.0156f, -28.5156f, -6.6406f, 3.1250f, 10.5469f, + -21.4844f, -2.7344f, 171.0938f, 195.3125f, 192.5781f, 172.6563f, 111.7188f, 82.4219f, 26.5625f, -15.2344f, -45.7031f, -65.2344f, -70.3125f, -51.1719f, -29.2969f, -24.6094f, + 11.7188f, 12.1094f, 26.9531f, 44.5313f, -67.1875f, -158.9844f, -232.8125f, -152.7344f, 39.8438f, 66.0156f, 61.7188f, 51.1719f, 17.9688f, 1.5625f, -2.3438f, -1.1719f, + 26.9531f, 29.6875f, 12.8906f, 92.9688f, 64.0625f, 46.4844f, 62.5000f, 64.4531f, 106.6406f, 133.5938f, 149.6094f, 163.6719f, 178.1250f, 147.6563f, 102.3438f, 37.5000f, + -21.4844f, 16.7969f, -23.0469f, -106.6406f, -78.1250f, -111.7188f, -112.1094f, -86.3281f, -96.4844f, -95.7031f, -75.7813f, -62.5000f, -50.3906f, -14.0625f, -12.1094f, 1.1719f, + -13.6719f, -17.9688f, -106.2500f, -139.4531f, 189.0625f, 96.0938f, -4.2969f, 8.2031f, -48.0469f, -76.9531f, -39.8438f, -36.7188f, -37.5000f, -8.5938f, 2.3438f, 2.3438f, + -45.7031f, -73.4375f, -98.4375f, -88.6719f, 0.0000f, 179.6875f, 197.6563f, 205.4688f, 195.7031f, 151.9531f, 97.6563f, 51.1719f, -10.9375f, -12.5000f, 9.3750f, 6.6406f, + 155.8594f, 199.6094f, 152.3438f, 57.0313f, 31.2500f, -32.8125f, -31.6406f, -22.2656f, -48.0469f, -53.9063f, -37.1094f, -32.0313f, -19.9219f, -12.8906f, -5.4688f, -17.5781f, + -3.5156f, 4.6875f, 117.1875f, 118.7500f, 71.0938f, 10.5469f, -76.9531f, -100.7813f, -134.3750f, -153.5156f, -150.0000f, -124.2188f, -54.6875f, -1.9531f, -2.3438f, 2.3438f, + 25.0000f, 9.7656f, -2.7344f, -100.0000f, -119.5313f, 148.8281f, 94.9219f, 37.5000f, -6.6406f, -74.2188f, -111.3281f, -96.0938f, -25.3906f, 18.7500f, 14.4531f, 11.3281f +}; +/* An 16-by-16 matrix */ +const float TRWB2_SN1[256] = +{ + -28.9063f, -150.0000f, -298.4375f, -376.5625f, -438.2813f, -356.2500f, -319.9219f, -289.0625f, -284.3750f, -223.4375f, -148.0469f, -123.8281f, -97.6563f, -19.9219f, -26.1719f, 33.2031f, + -121.4844f, -241.4063f, -171.4844f, -42.1875f, 60.9375f, 100.3906f, 157.8125f, 212.1094f, 251.1719f, 284.7656f, 285.9375f, 223.4375f, 174.2188f, 128.5156f, 92.1875f, 64.0625f, + 204.2969f, 605.0781f, 608.2031f, 576.5625f, 536.7188f, 465.6250f, 417.1875f, 360.5469f, 351.9531f, 307.8125f, 280.0781f, 156.6406f, 102.3438f, 2.3438f, -39.0625f, -143.7500f, + -5.0781f, -31.2500f, -73.8281f, -150.7813f, -189.8438f, -139.4531f, -84.3750f, -24.6094f, 25.3906f, 73.8281f, 96.8750f, 75.7813f, 85.1563f, 85.5469f, 80.0781f, 66.0156f, + -40.6250f, -202.7344f, -301.5625f, 192.1875f, 87.5000f, 7.0313f, -79.2969f, -95.3125f, -49.2188f, -85.9375f, -141.4063f, -162.8906f, -105.8594f, -27.7344f, -13.2813f, -19.5313f, + -78.9063f, 48.4375f, 316.7969f, 380.8594f, 517.9688f, 573.4375f, 630.0781f, 596.4844f, 575.7813f, 533.5938f, 476.5625f, 353.9063f, 273.4375f, 198.8281f, 137.1094f, 80.8594f, + -22.2656f, -76.5625f, -92.9688f, -109.7656f, -104.2969f, -93.3594f, -74.2188f, -53.5156f, -10.5469f, 1.5625f, 30.0781f, -69.5313f, -100.0000f, -216.0156f, -261.3281f, -431.6406f, + -71.4844f, -82.4219f, 314.0625f, 308.2031f, 267.5781f, 206.6406f, 187.1094f, 157.4219f, 144.9219f, 122.2656f, 108.9844f, 19.1406f, -7.4219f, -60.9375f, -69.9219f, -130.8594f, + 296.0938f, 331.2500f, 237.5000f, 122.2656f, 105.8594f, 68.7500f, 69.1406f, 28.5156f, 41.4063f, 23.8281f, 23.0469f, -62.1094f, -79.2969f, -112.1094f, -104.6875f, -133.9844f, + 77.7344f, 27.3438f, 37.1094f, -11.3281f, -95.7031f, -160.5469f, -291.0156f, -394.1406f, -575.3906f, -750.3906f, -1028.5156f, -643.7500f, -209.7656f, -110.9375f, -33.9844f, 80.8594f, + 32.0313f, -84.7656f, -179.6875f, -252.3438f, -280.4688f, -320.7031f, -383.9844f, -500.7813f, -617.1875f, -823.4375f, -727.7344f, -237.8906f, -158.9844f, -47.6563f, -19.5313f, 94.9219f, + -51.5625f, 142.1875f, 142.1875f, 132.8125f, 191.0156f, 193.7500f, 232.8125f, 236.7188f, 275.0000f, 295.3125f, 303.5156f, 240.6250f, 203.5156f, 159.7656f, 119.1406f, 82.4219f, + 48.0469f, -73.8281f, -35.5469f, -119.5313f, -124.6094f, -158.9844f, -234.3750f, -265.2344f, -355.8594f, -333.9844f, -221.0938f, -97.2656f, -25.3906f, -0.3906f, -25.3906f, -9.7656f, + 30.8594f, -22.6563f, -40.2344f, -58.5938f, -104.6875f, -103.5156f, -166.4063f, -187.1094f, -239.8438f, -262.1094f, -392.5781f, -538.2813f, -791.7969f, -604.2969f, -221.8750f, -20.3125f, + -107.4219f, -261.3281f, -417.9688f, -428.5156f, -268.7500f, -169.1406f, -132.8125f, -57.8125f, -10.5469f, 75.7813f, 120.7031f, 108.2031f, 89.4531f, 73.4375f, 32.0313f, 49.6094f, + 155.0781f, 524.6094f, 578.9063f, 675.3906f, 772.6563f, 785.9375f, 769.1406f, 723.4375f, 675.3906f, 614.8438f, 549.6094f, 424.6094f, 331.2500f, 248.4375f, 168.3594f, 108.5938f +}; +/* An 16-by-16 matrix */ +const float TRWB2_SN2[256] = +{ + 19.5313f, -25.7813f, -189.8438f, -332.0313f, 196.8750f, 134.7656f, 101.9531f, 3.9063f, -80.8594f, -85.1563f, -67.9688f, -7.0313f, 28.1250f, 26.9531f, 1.1719f, 9.3750f, + -66.7969f, -171.4844f, -246.8750f, 152.3438f, 55.8594f, -34.7656f, -114.0625f, -122.6563f, -88.6719f, -61.3281f, 12.8906f, 70.7031f, 72.2656f, 79.6875f, 50.0000f, 65.2344f, + 178.9063f, 179.2969f, 30.4688f, -97.6563f, -142.5781f, -148.8281f, -137.8906f, -149.2188f, -127.7344f, -110.9375f, -74.6094f, -7.0313f, 1.1719f, 14.4531f, 11.3281f, 37.1094f, + -66.0156f, -88.6719f, -165.2344f, -175.0000f, -189.4531f, -166.4063f, -142.1875f, -110.9375f, -92.9688f, -71.8750f, -89.0625f, -74.2188f, -56.6406f, 6.6406f, 25.3906f, 56.6406f, + -1.5625f, -46.8750f, -66.4063f, -130.0781f, -264.4531f, -305.4688f, -280.8594f, -152.7344f, -43.7500f, 90.6250f, 181.2500f, 153.1250f, 107.4219f, 83.9844f, 47.2656f, 54.2969f, + -36.7188f, -50.7813f, 176.9531f, 115.2344f, -17.5781f, -111.7188f, -173.4375f, -184.7656f, -202.7344f, -167.1875f, -104.6875f, -15.6250f, -4.6875f, 17.9688f, 15.2344f, 46.0938f, + -73.8281f, -95.7031f, 314.4531f, 318.3594f, 202.3438f, 114.4531f, 63.2813f, 42.9688f, -26.1719f, -61.7188f, -87.1094f, -46.8750f, -14.0625f, 5.8594f, 10.1563f, 23.4375f, + 8.9844f, 50.7813f, 41.7969f, 0.0000f, -12.1094f, -25.7813f, 12.8906f, 8.5938f, 39.4531f, -3.9063f, -12.5000f, -90.6250f, -109.7656f, -230.4688f, -262.5000f, -425.3906f, + 19.9219f, 41.4063f, 61.3281f, 51.5625f, 15.6250f, 4.2969f, -28.5156f, -25.7813f, -64.4531f, -114.8438f, -219.1406f, -300.7813f, -289.8438f, -191.0156f, -78.9063f, 1.5625f, + 9.7656f, 89.8438f, 111.7188f, 69.9219f, 29.2969f, 7.0313f, 5.8594f, 9.3750f, 42.5781f, 73.0469f, 121.0938f, 130.4688f, 128.1250f, 113.6719f, 92.5781f, 82.8125f, + -92.9688f, -192.1875f, -214.8438f, 219.9219f, 298.4375f, 238.2813f, 211.7188f, 166.7969f, 145.7031f, 101.9531f, 64.8438f, 66.7969f, 47.6563f, 13.2813f, -8.2031f, -35.9375f, + -140.2344f, -180.4688f, -3.9063f, 8.5938f, -16.4063f, -0.7813f, 30.4688f, 65.2344f, 60.1563f, 60.5469f, 28.9063f, 28.5156f, 25.7813f, 36.7188f, 34.7656f, 49.2188f, + -1.9531f, -42.9688f, -146.0938f, -213.2813f, -150.7813f, -53.1250f, 37.1094f, 119.1406f, 170.7031f, 222.6563f, 240.2344f, 217.9688f, 180.8594f, 130.8594f, 81.6406f, 58.9844f, + 8.9844f, 146.8750f, 114.0625f, 91.7969f, 189.4531f, 202.7344f, 256.6406f, 214.4531f, 186.7188f, 132.0313f, 72.6563f, 2.7344f, -10.9375f, -60.5469f, -37.1094f, -73.4375f, + 64.8438f, 54.2969f, -108.2031f, -279.6875f, -321.0938f, 91.4063f, 124.6094f, 127.3438f, 91.4063f, 14.0625f, -60.5469f, -123.8281f, -96.4844f, -31.2500f, 19.1406f, 45.7031f, + 168.3594f, 333.2031f, 291.0156f, 200.0000f, 126.9531f, 54.2969f, 32.4219f, -12.1094f, -9.7656f, -18.3594f, -6.6406f, -4.6875f, -9.3750f, -16.7969f, -1.9531f, 5.0781f +}; +/* An 16-by-32 matrix */ +const float GEWB2_MA1[512] = +{ + 257.4219f, 661.7188f, 638.2813f, 591.0156f, 509.7656f, 428.9063f, 364.4531f, 314.4531f, 286.3281f, 243.7500f, 205.0781f, 132.4219f, 93.3594f, 19.5313f, -13.6719f, -83.9844f, + 2.3438f, 25.3906f, 48.8281f, 21.4844f, -33.2031f, -49.2188f, -106.2500f, -123.4375f, -198.0469f, -228.9063f, -394.5313f, -499.2188f, -758.2031f, -746.0938f, -166.4063f, 30.4688f, + 109.7656f, 123.0469f, 92.1875f, -1.5625f, -39.8438f, -66.7969f, -90.6250f, -130.8594f, -141.4063f, -166.0156f, -190.6250f, -235.5469f, -261.3281f, -287.5000f, -253.1250f, -231.6406f, + 11.3281f, -98.0469f, -227.3438f, -340.2344f, -378.5156f, -350.3906f, -387.1094f, -420.7031f, -498.0469f, -578.1250f, -389.8438f, -153.5156f, -96.4844f, -3.5156f, 10.9375f, 105.8594f, + -23.4375f, -141.0156f, 156.6406f, 215.6250f, 92.1875f, 13.6719f, -76.5625f, -83.9844f, -193.7500f, -266.7969f, -355.8594f, -320.3125f, -225.0000f, -116.7969f, -93.7500f, -55.0781f, + 162.5000f, 224.2188f, 258.5938f, 136.7188f, 51.9531f, -62.5000f, -168.3594f, -305.0781f, -468.7500f, -645.3125f, -794.9219f, -426.5625f, -175.3906f, -75.0000f, -4.2969f, 102.7344f, + -80.4688f, -237.8906f, -363.6719f, 10.9375f, -89.4531f, -139.8438f, -212.1094f, -180.4688f, -147.2656f, -140.6250f, -131.2500f, -98.0469f, -41.0156f, 13.6719f, 10.1563f, 31.2500f, + 144.1406f, 490.6250f, 539.0625f, 613.6719f, 674.2188f, 674.6094f, 642.1875f, 594.1406f, 527.3438f, 451.5625f, 384.3750f, 292.1875f, 226.5625f, 154.2969f, 99.2188f, 42.1875f, + -57.4219f, -187.1094f, -128.9063f, -28.5156f, -106.2500f, -172.2656f, -267.5781f, -326.9531f, -444.9219f, -569.5313f, -535.1563f, -161.7188f, -81.2500f, -4.6875f, 5.4688f, 83.2031f, + -19.5313f, 39.0625f, -32.0313f, -98.8281f, -2.7344f, 46.4844f, 114.8438f, 153.1250f, 192.9688f, 225.7813f, 230.0781f, 204.2969f, 180.4688f, 149.6094f, 117.1875f, 97.2656f, + -36.7188f, -141.4063f, -224.6094f, -300.7813f, -385.5469f, -390.2344f, -360.1563f, -272.2656f, -227.3438f, -119.1406f, -52.7344f, -12.1094f, -3.1250f, 8.9844f, -12.8906f, 24.2188f, + 11.3281f, -25.0000f, -1.5625f, -48.0469f, -134.3750f, -161.7188f, -265.2344f, -299.6094f, -450.0000f, -547.2656f, -822.2656f, -744.1406f, -227.3438f, -117.1875f, -25.0000f, 87.1094f, + 167.1875f, 386.7188f, 398.0469f, 316.0156f, 266.0156f, 183.5938f, 142.9688f, 69.9219f, 49.2188f, -10.1563f, -55.0781f, -141.7969f, -165.2344f, -209.3750f, -170.7031f, -212.8906f, + -51.9531f, -139.4531f, 142.1875f, 94.1406f, -15.2344f, -88.6719f, -130.4688f, -119.1406f, -166.4063f, -114.0625f, -39.8438f, 33.9844f, 62.1094f, 71.0938f, 62.5000f, 74.2188f, + 218.7500f, 298.4375f, 207.4219f, 60.9375f, 8.5938f, -7.0313f, 8.9844f, -7.8125f, 7.4219f, 0.0000f, 5.0781f, -23.8281f, -13.6719f, -17.1875f, -4.6875f, -18.7500f, + 12.8906f, -91.7969f, -247.6563f, -426.9531f, 53.1250f, -12.1094f, -26.5625f, -111.3281f, -206.6406f, -208.9844f, -180.4688f, -97.2656f, -37.1094f, -20.7031f, -45.3125f, -23.8281f, + -73.4375f, -245.3125f, -349.2188f, 274.2188f, 273.4375f, 145.7031f, 76.5625f, 19.9219f, 37.1094f, -21.8750f, -74.6094f, -70.7031f, -67.5781f, -51.5625f, -45.3125f, -85.1563f, + 14.4531f, -73.4375f, -258.2031f, -424.6094f, -516.4063f, -100.7813f, -72.6563f, -70.7031f, -92.9688f, -145.3125f, -163.2813f, -198.4375f, -169.1406f, -76.9531f, -28.5156f, 10.9375f, + -90.2344f, -86.7188f, 355.8594f, 341.7969f, 261.3281f, 171.8750f, 141.7969f, 117.5781f, 100.3906f, 75.0000f, 57.4219f, 26.5625f, 30.0781f, 16.7969f, 22.2656f, 6.6406f, + -1.5625f, -73.0469f, -139.0625f, -160.1563f, -222.2656f, -194.9219f, -228.1250f, -221.8750f, -257.8125f, -274.6094f, -376.9531f, -469.1406f, -601.5625f, -276.5625f, -98.4375f, 33.9844f, + 85.9375f, 25.0000f, -26.1719f, -139.4531f, -223.4375f, -290.6250f, -356.6406f, -459.3750f, -562.1094f, -739.8438f, -840.6250f, -297.6563f, -163.6719f, -57.0313f, -3.9063f, 109.7656f, + -98.8281f, -244.9219f, -419.9219f, -471.0938f, -281.6406f, -155.4688f, -131.6406f, -73.4375f, -46.0938f, 19.5313f, 48.8281f, 77.3438f, 78.1250f, 74.2188f, 37.5000f, 64.0625f, + -135.9375f, -289.4531f, -333.5938f, -139.4531f, -63.6719f, -40.2344f, -10.1563f, 55.8594f, 90.2344f, 124.2188f, 130.8594f, 126.9531f, 107.0313f, 91.0156f, 65.2344f, 74.2188f, + -55.8594f, -100.0000f, -74.6094f, -109.3750f, -97.6563f, -74.6094f, -32.0313f, 14.4531f, 49.2188f, 39.8438f, 26.1719f, -50.7813f, -78.9063f, -167.9688f, -193.3594f, -316.4063f, + 90.6250f, 41.7969f, -8.5938f, -133.2031f, -194.1406f, -204.2969f, -237.1094f, -252.3438f, -291.4063f, -269.5313f, -186.7188f, -115.2344f, -62.5000f, -30.0781f, -20.7031f, -2.7344f, + -12.8906f, -38.2813f, -100.7813f, -195.7031f, -230.0781f, -171.0938f, -123.4375f, -65.6250f, -22.6563f, 32.0313f, 68.3594f, 85.5469f, 97.2656f, 101.1719f, 92.5781f, 88.2813f, + -153.5156f, -259.7656f, -7.4219f, 72.2656f, 97.2656f, 103.9063f, 147.6563f, 182.8125f, 194.9219f, 198.4375f, 181.2500f, 151.5625f, 121.0938f, 92.9688f, 72.6563f, 56.6406f, + -93.7500f, -38.6719f, 159.3750f, 187.5000f, 270.7031f, 297.2656f, 369.5313f, 368.3594f, 371.4844f, 348.8281f, 305.4688f, 239.4531f, 188.2813f, 137.1094f, 101.5625f, 63.6719f, + -8.9844f, 204.2969f, 345.7031f, 352.7344f, 457.8125f, 502.7344f, 578.9063f, 582.4219f, 576.5625f, 547.6563f, 484.3750f, 392.5781f, 307.4219f, 235.9375f, 169.1406f, 114.0625f, + 102.3438f, 385.9375f, 353.1250f, 285.9375f, 286.7188f, 259.7656f, 279.2969f, 256.2500f, 262.8906f, 240.2344f, 211.3281f, 145.3125f, 110.9375f, 54.2969f, 26.5625f, -32.8125f, + -46.4844f, 174.2188f, 436.7188f, 474.6094f, 535.9375f, 500.0000f, 471.8750f, 386.3281f, 344.1406f, 263.6719f, 217.5781f, 124.6094f, 88.6719f, 8.9844f, -15.2344f, -100.0000f, + -39.8438f, 69.5313f, 148.0469f, 98.4375f, 142.5781f, 124.6094f, 177.7344f, 147.2656f, 161.3281f, 108.5938f, 87.8906f, -14.0625f, -26.1719f, -137.1094f, -146.4844f, -301.5625f +}; +/* An 16-by-16 matrix */ +const float AUNB_SN1[256] = +{ + -70.3125f, -30.8594f, -19.9219f, 15.2344f, 25.7813f, 38.6719f, 18.7500f, 42.1875f, 21.8750f, 49.6094f, 13.2813f, 17.9688f, -183.5938f, -330.0781f, -55.0781f, -35.1563f, + -82.8125f, 32.0313f, 110.9375f, 164.8438f, 162.5000f, 162.5000f, 122.2656f, 112.8906f, 91.0156f, 82.0313f, 42.1875f, 21.4844f, -171.4844f, -516.7969f, -131.2500f, -48.0469f, + -3.5156f, 158.2031f, 207.8125f, 257.4219f, 277.3438f, 311.7188f, 329.6875f, 379.2969f, 418.7500f, 461.3281f, 571.8750f, 747.2656f, 792.1875f, 481.2500f, 214.4531f, 103.5156f, + 29.2969f, 19.1406f, 128.9063f, 192.5781f, 175.0000f, 128.5156f, 79.6875f, 26.1719f, -7.0313f, -52.3438f, -91.7969f, -156.2500f, -236.3281f, -11.7188f, -26.1719f, -14.0625f, + -3.5156f, -2.7344f, -37.1094f, -86.7188f, -125.7813f, -164.4531f, -125.3906f, -91.0156f, -42.9688f, -33.5938f, 26.1719f, -7.4219f, 1.1719f, 134.7656f, 16.0156f, 11.7188f, + 59.7656f, 13.2813f, -67.1875f, -150.7813f, -195.3125f, -214.0625f, -196.4844f, -164.0625f, -123.8281f, -80.8594f, -44.5313f, 71.4844f, 428.1250f, 258.2031f, 77.3438f, 36.7188f, + 240.6250f, 195.7031f, 183.9844f, 85.9375f, 61.3281f, 21.4844f, 1.5625f, -62.8906f, -69.5313f, -122.6563f, -104.2969f, -151.9531f, 84.3750f, 167.5781f, 17.9688f, 14.8438f, + -218.3594f, -333.5938f, -308.2031f, -144.1406f, -59.7656f, 25.0000f, 57.0313f, 115.6250f, 151.5625f, 203.1250f, 224.2188f, 374.2188f, 578.5156f, 350.7813f, 132.8125f, 64.0625f, + 51.1719f, 53.5156f, 45.3125f, 22.2656f, 25.0000f, -8.2031f, -14.8438f, -43.7500f, -48.0469f, -77.7344f, -83.5938f, -148.0469f, -250.3906f, 32.4219f, -20.7031f, -8.2031f, + -39.4531f, -126.5625f, -253.1250f, -312.8906f, -326.1719f, -287.8906f, -195.7031f, -115.6250f, -33.5938f, 56.2500f, 156.2500f, 400.3906f, 586.3281f, 336.3281f, 125.7813f, 58.9844f, + -90.2344f, -155.0781f, -200.0000f, -197.6563f, -120.3125f, -78.1250f, -49.6094f, -35.5469f, -7.0313f, 6.6406f, 36.7188f, 44.5313f, 311.7188f, 244.1406f, 62.8906f, 34.3750f, + -202.3438f, -241.0156f, -78.5156f, 40.2344f, 100.7813f, 108.9844f, 106.6406f, 104.2969f, 109.7656f, 98.0469f, 83.5938f, 44.5313f, 22.6563f, 105.4688f, 27.3438f, 12.1094f, + 6.6406f, -33.5938f, -30.4688f, -32.0313f, -8.5938f, -28.5156f, -66.7969f, -116.7969f, -130.4688f, -168.3594f, -164.8438f, -205.4688f, 201.9531f, 199.6094f, 27.7344f, 20.7031f, + 107.8125f, 71.0938f, -15.6250f, -131.2500f, -180.0781f, -36.3281f, 133.5938f, 104.2969f, 64.8438f, 7.0313f, -16.7969f, -76.5625f, -57.0313f, 92.1875f, 7.0313f, 5.4688f, + 88.6719f, 132.0313f, 87.5000f, 73.4375f, 41.7969f, 31.2500f, 22.2656f, 35.9375f, 13.2813f, 31.2500f, -1.9531f, -1.5625f, -201.1719f, -362.1094f, -67.9688f, -39.0625f, + 285.5469f, 290.6250f, 311.3281f, 263.6719f, 230.4688f, 171.0938f, 128.1250f, 83.9844f, 56.2500f, 9.3750f, -37.5000f, -93.3594f, -189.8438f, -68.3594f, -25.3906f, -16.0156f +}; +/* An 16-by-16 matrix */ +const float AUWB_SN1[256] = +{ + 128.1250f, 53.5156f, 139.8438f, 128.9063f, 71.8750f, 56.6406f, -23.4375f, -114.8438f, -216.7969f, -306.2500f, -369.1406f, -340.6250f, -234.7656f, -131.6406f, -60.5469f, -12.8906f, + 12.5000f, -82.8125f, -190.6250f, -254.2969f, -293.7500f, -342.5781f, -348.4375f, -346.0938f, -333.2031f, -310.5469f, -275.3906f, -214.4531f, -128.9063f, -87.5000f, -49.6094f, -3.5156f, + 145.3125f, 127.7344f, 76.9531f, 12.8906f, 5.0781f, -21.4844f, -33.9844f, -48.4375f, -48.8281f, -57.8125f, -56.2500f, -65.6250f, -68.3594f, -71.8750f, -49.6094f, -48.8281f, + 293.7500f, 283.9844f, 243.3594f, 202.7344f, 175.3906f, 136.7188f, 120.7031f, 112.8906f, 106.2500f, 98.4375f, 72.2656f, 48.4375f, 46.0938f, 13.6719f, 8.5938f, -7.8125f, + 5.4688f, 56.2500f, 115.6250f, 168.7500f, 162.5000f, 126.9531f, 69.1406f, 64.8438f, 58.9844f, 48.0469f, 42.5781f, 40.6250f, 18.3594f, -8.5938f, -17.5781f, -19.1406f, + 121.0938f, 43.7500f, -55.0781f, -206.6406f, -255.4688f, -20.7031f, 63.2813f, -12.8906f, -116.0156f, -215.2344f, -301.5625f, -319.1406f, -210.9375f, -112.1094f, -37.1094f, -2.7344f, + -61.7188f, 94.1406f, 173.0469f, 212.1094f, 218.3594f, 226.1719f, 221.0938f, 236.7188f, 238.2813f, 242.9688f, 235.1563f, 225.7813f, 189.4531f, 129.2969f, 76.9531f, 40.6250f, + -183.9844f, -207.0313f, 14.4531f, 106.2500f, 155.0781f, 172.6563f, 182.0313f, 204.2969f, 219.1406f, 231.2500f, 237.5000f, 225.0000f, 189.4531f, 135.9375f, 86.7188f, 51.9531f, + 63.2813f, 0.0000f, -33.9844f, -33.2031f, -58.9844f, -129.2969f, -160.1563f, -235.5469f, -299.6094f, -402.3438f, -526.5625f, -707.8125f, -677.7344f, -264.8438f, -110.9375f, -2.3438f, + -60.9375f, 14.0625f, 5.8594f, 10.1563f, 16.0156f, 46.0938f, 78.5156f, 103.5156f, 132.4219f, 149.2188f, 164.0625f, 169.9219f, 147.2656f, 103.1250f, 62.1094f, 32.8125f, + -26.9531f, -107.0313f, -160.5469f, -61.7188f, 23.4375f, -21.8750f, -74.2188f, -119.1406f, -144.9219f, -151.9531f, -160.5469f, -158.9844f, -132.0313f, -107.8125f, -67.5781f, -38.6719f, + 0.0000f, -10.1563f, -76.5625f, -148.0469f, -144.1406f, -127.7344f, -75.3906f, -57.8125f, -30.0781f, -3.9063f, 24.6094f, 38.2813f, 38.2813f, 19.1406f, 15.6250f, -1.9531f, + -58.2031f, -168.7500f, -284.7656f, -360.5469f, -362.1094f, -299.2188f, -221.8750f, -177.7344f, -130.0781f, -85.5469f, -47.6563f, -11.3281f, 4.2969f, 3.5156f, 7.8125f, 21.0938f, + 69.1406f, 25.0000f, -23.4375f, -90.6250f, -160.5469f, -215.6250f, -217.5781f, -214.8438f, -198.8281f, -181.2500f, -148.4375f, -129.2969f, -116.0156f, -112.5000f, -83.9844f, -66.4063f, + -6.2500f, 171.4844f, 379.2969f, 431.2500f, 472.2656f, 516.7969f, 523.0469f, 536.7188f, 514.4531f, 477.7344f, 432.4219f, 383.9844f, 305.0781f, 208.9844f, 123.0469f, 58.9844f, + -168.7500f, -283.9844f, -267.9688f, -132.8125f, -60.9375f, -15.6250f, 7.0313f, 39.8438f, 66.0156f, 100.3906f, 119.5313f, 130.8594f, 115.6250f, 83.2031f, 53.5156f, 37.8906f +}; +/* An 16-by-16 matrix */ +const float AUWB2_SN1[256] = +{ + -41.7969f, -174.2188f, -326.1719f, -406.6406f, -450.0000f, -453.5156f, -447.6563f, -378.5156f, -323.4375f, -208.2031f, -98.0469f, -94.5313f, -54.2969f, 67.1875f, 37.1094f, 182.0313f, + 410.9375f, 393.7500f, 410.9375f, 341.7969f, 337.5000f, 292.1875f, 305.8594f, 269.5313f, 294.5313f, 279.2969f, 268.7500f, 133.5938f, 76.1719f, -12.5000f, -98.0469f, -198.8281f, + -121.4844f, -66.4063f, 142.9688f, 246.8750f, 292.1875f, 337.1094f, 383.9844f, 407.0313f, 436.7188f, 464.0625f, 442.5781f, 349.6094f, 284.3750f, 242.5781f, 179.6875f, 163.2813f, + 237.5000f, 205.0781f, 125.7813f, 11.7188f, -92.5781f, -188.6719f, -336.7188f, -460.1563f, -644.9219f, -853.1250f, -1082.0313f, -526.9531f, -167.9688f, -10.9375f, 50.0000f, 219.5313f, + 115.6250f, 66.7969f, -75.0000f, -167.5781f, -190.6250f, -183.5938f, -192.1875f, -184.7656f, -175.0000f, -137.5000f, -94.5313f, -120.7031f, -131.6406f, -82.0313f, -103.5156f, -71.0938f, + 324.6094f, 274.6094f, 178.1250f, 84.7656f, 64.4531f, 25.3906f, 6.6406f, -20.7031f, -26.1719f, -30.4688f, -14.8438f, -86.7188f, -132.8125f, -128.5156f, -136.3281f, -152.7344f, + 63.2813f, -5.0781f, -61.7188f, -130.8594f, -205.4688f, -275.3906f, -385.1563f, -486.3281f, -640.6250f, -839.4531f, -1075.7813f, -525.0000f, -145.3125f, -4.6875f, 52.3438f, 220.3125f, + -30.8594f, -151.9531f, -222.2656f, -273.0469f, -316.7969f, -367.1875f, -413.2813f, -507.4219f, -599.2188f, -811.3281f, -762.8906f, -198.0469f, -84.3750f, 55.8594f, 74.6094f, 237.1094f, + -41.4063f, -45.3125f, -82.0313f, -87.8906f, -126.1719f, -128.9063f, -192.9688f, -191.7969f, -273.4375f, -295.7031f, -412.8906f, -556.2500f, -867.9688f, -589.4531f, -101.1719f, 135.9375f, + -142.9688f, -292.1875f, -459.7656f, -475.0000f, -397.2656f, -272.6563f, -173.4375f, -60.1563f, 3.9063f, 111.3281f, 141.0156f, 110.9375f, 99.6094f, 140.2344f, 73.0469f, 142.5781f, + 30.0781f, 174.6094f, 163.2813f, 185.5469f, 176.9531f, 179.2969f, 185.5469f, 201.1719f, 219.5313f, 253.1250f, 257.0313f, 176.5625f, 143.3594f, 130.4688f, 95.3125f, 79.6875f, + 3.9063f, 76.9531f, 66.4063f, 64.8438f, 56.2500f, 23.4375f, 20.3125f, -0.7813f, -7.8125f, -15.6250f, 7.0313f, -92.9688f, -108.9844f, -169.5313f, -176.1719f, -315.2344f, + -179.6875f, -278.5156f, -213.6719f, -59.7656f, 25.0000f, 94.9219f, 150.7813f, 192.1875f, 242.1875f, 293.7500f, 296.4844f, 209.3750f, 173.8281f, 126.5625f, 58.9844f, -12.5000f, + -96.0938f, -154.6875f, -161.3281f, -144.9219f, -138.2813f, -123.8281f, -119.9219f, -89.0625f, -76.1719f, -39.4531f, -14.0625f, -67.9688f, -76.9531f, -63.2813f, -101.9531f, -136.3281f, + -128.5156f, -93.7500f, 127.3438f, 180.4688f, 167.1875f, 134.3750f, 158.2031f, 146.0938f, 171.4844f, 169.5313f, 182.4219f, 49.6094f, 33.2031f, -60.1563f, -96.8750f, -266.7969f, + -4.6875f, 5.8594f, -86.7188f, -88.6719f, -12.1094f, 48.4375f, 78.1250f, 114.8438f, 139.4531f, 211.3281f, 237.1094f, 179.2969f, 146.8750f, 137.5000f, 110.1563f, 110.5469f +}; +/* An 16-by-16 matrix */ +const float CNG_SN1[256] = +{ + 234.3750f, 640.6250f, 1187.1094f, 1662.8906f, 2153.1250f, 2632.8125f, 3120.7031f, 3581.6406f, 4059.7656f, 4535.9375f, 5031.2500f, 5507.8125f, 6007.0313f, 6466.4063f, 6959.3750f, 7389.8438f, + 464.0625f, 971.4844f, 1463.2813f, 1915.2344f, 2383.9844f, 2836.3281f, 3295.7031f, 3744.9219f, 4209.3750f, 4669.5313f, 5145.3125f, 5607.4219f, 6079.6875f, 6528.1250f, 6997.2656f, 7426.5625f, + 135.1563f, 312.1094f, 882.4219f, 1388.6719f, 1904.6875f, 2412.1094f, 2935.9375f, 3438.6719f, 3934.7656f, 4423.0469f, 4933.9844f, 5444.5313f, 5969.5313f, 6466.0156f, 6959.7656f, 7437.1094f, + 171.4844f, 631.2500f, 1346.0938f, 1852.7344f, 2372.2656f, 2846.8750f, 3341.0156f, 3799.2188f, 4276.1719f, 4728.9063f, 5200.0000f, 5653.9063f, 6113.2813f, 6551.9531f, 6989.8438f, 7412.8906f, + 359.7656f, 703.1250f, 1162.5000f, 1565.2344f, 1994.1406f, 2397.2656f, 2803.9063f, 3183.5938f, 3537.8906f, 3872.6563f, 4300.3906f, 4900.3906f, 5340.2344f, 6055.4688f, 6807.8125f, 7393.3594f, + 350.0000f, 741.7969f, 1185.5469f, 1612.5000f, 2070.7031f, 2511.3281f, 2970.3125f, 3405.8594f, 3861.7188f, 4319.9219f, 4850.3906f, 5320.7031f, 5844.5313f, 6302.7344f, 6826.1719f, 7210.9375f, + 282.0313f, 588.6719f, 991.0156f, 1342.5781f, 1690.6250f, 2027.3438f, 2350.7813f, 2672.2656f, 2963.6719f, 3258.9844f, 3486.3281f, 3715.2344f, 3874.6094f, 4326.1719f, 5317.5781f, 5867.5781f, + 123.0469f, 239.0625f, 652.7344f, 1136.7188f, 1558.5938f, 1985.5469f, 2390.6250f, 2800.7813f, 3198.4375f, 3583.2031f, 3964.0625f, 4369.5313f, 4785.1563f, 5180.4688f, 5582.0313f, 5970.3125f, + 345.7031f, 753.1250f, 1175.7813f, 1551.9531f, 1934.3750f, 2304.6875f, 2675.0000f, 3034.7656f, 3398.8281f, 3753.5156f, 4133.2031f, 4507.8125f, 4885.9375f, 5253.9063f, 5629.6875f, 5995.7031f, + 132.0313f, 398.4375f, 1037.8906f, 1459.3750f, 1890.2344f, 2262.1094f, 2658.5938f, 3031.2500f, 3413.2813f, 3773.0469f, 4151.1719f, 4518.3594f, 4896.0938f, 5260.9375f, 5631.2500f, 5989.8438f, + 439.8438f, 767.1875f, 1171.4844f, 1505.8594f, 1860.9375f, 2190.6250f, 2532.0313f, 2846.0938f, 3167.5781f, 3448.0469f, 3738.2813f, 4159.7656f, 4687.1094f, 5126.9531f, 5555.8594f, 5957.8125f, + 150.3906f, 318.3594f, 781.2500f, 1148.0469f, 1525.7813f, 1905.8594f, 2262.8906f, 2630.4688f, 2992.5781f, 3330.4688f, 3636.3281f, 3963.2813f, 4530.0781f, 5060.5469f, 5510.1563f, 5953.5156f, + 247.2656f, 564.4531f, 937.5000f, 1286.3281f, 1654.2969f, 2019.9219f, 2399.6094f, 2767.1875f, 3147.2656f, 3507.8125f, 3876.5625f, 4267.1875f, 4682.4219f, 5077.3438f, 5475.0000f, 5882.0313f, + 228.1250f, 487.5000f, 878.9063f, 1223.0469f, 1582.0313f, 1921.8750f, 2269.9219f, 2598.4375f, 2918.3594f, 3220.3125f, 3481.6406f, 3703.1250f, 3979.6875f, 4775.3906f, 5418.3594f, 5907.4219f, + 451.9531f, 710.9375f, 1072.2656f, 1369.1406f, 1700.7813f, 1991.0156f, 2317.1875f, 2596.8750f, 2893.7500f, 3138.2813f, 3373.0469f, 3548.0469f, 3897.2656f, 4776.5625f, 5398.0469f, 5901.5625f, + 223.4375f, 547.2656f, 982.0313f, 1367.5781f, 1758.9844f, 2134.7656f, 2526.9531f, 2904.2969f, 3287.5000f, 3643.7500f, 4025.7813f, 4417.5781f, 4815.6250f, 5196.4844f, 5588.2813f, 5961.3281f +}; +/* An 16-by-32 matrix */ +const float IAA_MA1[512] = +{ + -68.3594f, -191.4063f, -203.1250f, -246.4844f, -251.9531f, -239.8438f, -238.2813f, -214.0625f, -196.4844f, -168.7500f, -137.8906f, -117.5781f, -92.9688f, -55.0781f, -26.1719f, 10.1563f, + 117.5781f, 158.9844f, 88.6719f, 37.5000f, -4.6875f, -7.0313f, -5.0781f, 0.7813f, 15.2344f, 41.7969f, 48.4375f, 35.9375f, 32.4219f, 39.0625f, 24.2188f, 28.1250f, + -109.3750f, -287.8906f, -222.2656f, -64.0625f, -3.5156f, 39.0625f, 55.0781f, 82.4219f, 98.4375f, 109.7656f, 107.0313f, 84.7656f, 80.4688f, 85.5469f, 45.7031f, 41.4063f, + -103.9063f, -294.1406f, -328.5156f, -229.2969f, -190.2344f, -134.7656f, -102.7344f, -65.2344f, -44.5313f, -11.7188f, 3.1250f, 12.5000f, 13.2813f, 23.8281f, 21.4844f, 40.6250f, + -35.5469f, -53.5156f, -114.4531f, -136.3281f, -137.5000f, -127.3438f, -104.6875f, -96.4844f, -69.5313f, -50.3906f, -21.8750f, -37.5000f, -4.2969f, 85.5469f, 19.1406f, 21.8750f, + -7.0313f, 0.3906f, -12.8906f, -5.4688f, -7.4219f, -1.9531f, -8.5938f, -5.4688f, -16.7969f, -14.4531f, -40.6250f, -55.8594f, -146.4844f, -300.7813f, -74.2188f, -39.0625f, + 28.1250f, -8.5938f, -47.2656f, -85.9375f, -125.0000f, -147.6563f, -195.3125f, -229.2969f, -284.7656f, -310.5469f, -412.5000f, -509.7656f, -660.5469f, -425.7813f, -176.5625f, -23.4375f, + 7.4219f, -108.9844f, -176.9531f, -226.5625f, -229.6875f, -288.6719f, -335.1563f, -407.8125f, -500.3906f, -630.4688f, -359.7656f, -146.8750f, -106.6406f, -32.8125f, -0.7813f, 73.0469f, + 333.2031f, 296.4844f, 230.8594f, 146.8750f, 101.5625f, 47.6563f, 15.2344f, -27.7344f, -51.9531f, -71.8750f, -81.6406f, -116.0156f, -116.7969f, -66.7969f, -48.4375f, -32.4219f, + 103.9063f, 13.2813f, -71.0938f, -143.3594f, -201.5625f, -267.9688f, -344.1406f, -437.8906f, -552.3438f, -716.4063f, -824.2188f, -389.4531f, -202.7344f, -107.0313f, -42.5781f, 53.5156f, + -0.7813f, -3.1250f, 16.4063f, 35.5469f, 67.1875f, 82.4219f, 116.4063f, 131.2500f, 169.1406f, 159.7656f, 213.2813f, 407.4219f, 585.5469f, 405.4688f, 160.1563f, 73.8281f, + 33.5938f, 99.2188f, 101.1719f, 99.2188f, 96.0938f, 85.5469f, 71.8750f, 47.6563f, 30.8594f, 4.2969f, -21.4844f, -66.4063f, -141.7969f, -364.8438f, -144.9219f, -73.4375f, + 65.6250f, 65.2344f, -47.6563f, -95.3125f, -126.9531f, -132.8125f, -140.2344f, -133.9844f, -129.2969f, -113.6719f, -108.5938f, -105.4688f, -106.2500f, -63.2813f, -39.4531f, -17.9688f, + -95.3125f, -179.2969f, -143.3594f, -132.8125f, -115.2344f, -85.9375f, -67.5781f, -41.7969f, -8.5938f, 20.7031f, 40.2344f, 114.4531f, 423.4375f, 315.2344f, 101.5625f, 45.7031f, + -124.6094f, -253.9063f, -267.5781f, -166.7969f, -113.2813f, -41.0156f, 9.7656f, 62.8906f, 118.3594f, 163.2813f, 229.2969f, 419.5313f, 610.5469f, 423.8281f, 156.2500f, 66.4063f, + 57.0313f, 100.3906f, 110.1563f, 115.2344f, 118.3594f, 114.8438f, 116.0156f, 102.3438f, 92.5781f, 75.3906f, 35.9375f, 133.2031f, 476.5625f, 345.3125f, 123.0469f, 56.2500f, + -113.6719f, -217.9688f, 57.4219f, 78.5156f, 110.1563f, 109.3750f, 121.0938f, 117.9688f, 122.2656f, 119.5313f, 114.0625f, 93.3594f, 77.3438f, 73.4375f, 41.4063f, 36.7188f, + -4.2969f, -3.1250f, -60.9375f, -79.6875f, -90.2344f, -97.6563f, -103.5156f, -112.8906f, -105.0781f, -123.4375f, -125.7813f, -175.7813f, -190.6250f, -264.0625f, -303.9063f, -380.0781f, + -45.7031f, -10.5469f, 1.5625f, 37.5000f, 67.9688f, 89.4531f, 105.8594f, 121.0938f, 134.3750f, 141.4063f, 134.3750f, 106.6406f, 81.6406f, 70.3125f, 42.5781f, 41.4063f, + -101.5625f, -113.2813f, 58.9844f, 105.0781f, 158.5938f, 172.6563f, 215.2344f, 230.4688f, 265.2344f, 266.0156f, 351.5625f, 505.0781f, 637.1094f, 442.1875f, 186.3281f, 86.3281f, + -14.4531f, 146.0938f, 153.9063f, 161.7188f, 163.6719f, 154.2969f, 134.7656f, 122.2656f, 110.1563f, 99.6094f, 82.4219f, 49.2188f, 32.8125f, 19.9219f, -3.9063f, -20.7031f, + 157.8125f, 127.7344f, 67.9688f, 10.9375f, -48.4375f, -113.2813f, -191.4063f, -271.4844f, -394.9219f, -433.9844f, -206.6406f, -112.5000f, -71.4844f, -26.9531f, -2.7344f, 55.4688f, + 219.9219f, 293.7500f, 228.5156f, 216.7969f, 200.0000f, 186.7188f, 165.6250f, 154.6875f, 146.8750f, 133.9844f, 117.1875f, 75.7813f, 75.3906f, 63.2813f, 30.4688f, 17.9688f, + -23.0469f, -51.1719f, -13.6719f, 19.1406f, 21.0938f, -4.6875f, -35.9375f, -72.2656f, -94.9219f, -112.8906f, -112.5000f, -134.3750f, -127.3438f, 0.0000f, -14.8438f, 2.3438f, + 193.7500f, 227.3438f, 220.3125f, 200.7813f, 203.5156f, 191.4063f, 189.8438f, 170.3125f, 168.7500f, 125.0000f, 178.1250f, 414.0625f, 594.9219f, 413.2813f, 163.6719f, 75.7813f, + 67.9688f, 30.0781f, 7.0313f, -34.7656f, -43.7500f, -76.5625f, -64.4531f, -96.4844f, -86.7188f, -127.3438f, -129.6875f, -192.9688f, 194.9219f, 241.0156f, 47.2656f, 23.4375f, + 123.0469f, 116.7969f, 89.4531f, 53.5156f, 30.4688f, -1.1719f, -15.6250f, -53.9063f, -77.3438f, -119.9219f, -146.4844f, -196.0938f, -201.1719f, -9.7656f, -34.3750f, -19.1406f, + -90.6250f, -11.3281f, 137.8906f, 155.8594f, 189.4531f, 190.2344f, 204.2969f, 205.4688f, 217.1875f, 218.3594f, 203.1250f, 162.1094f, 128.1250f, 110.5469f, 73.0469f, 64.8438f, + 71.0938f, 150.3906f, 157.4219f, 176.9531f, 201.1719f, 223.4375f, 248.0469f, 269.9219f, 307.4219f, 332.8125f, 450.7813f, 579.2969f, 694.9219f, 480.8594f, 204.6875f, 96.0938f, + -106.6406f, -192.1875f, -72.2656f, -37.8906f, -20.3125f, -19.9219f, -6.6406f, -10.5469f, 5.0781f, 7.8125f, 17.5781f, -7.8125f, 20.3125f, 95.3125f, 22.6563f, 21.8750f, + 7.8125f, -1.1719f, -94.1406f, -104.2969f, -75.7813f, -33.5938f, 1.5625f, 29.2969f, 54.6875f, 74.6094f, 78.1250f, 60.1563f, 53.5156f, 57.0313f, 33.2031f, 30.0781f, + 35.9375f, 245.3125f, 238.6719f, 276.5625f, 275.7813f, 279.6875f, 262.5000f, 271.0938f, 255.8594f, 241.7969f, 214.8438f, 168.7500f, 138.2813f, 110.9375f, 79.6875f, 67.1875f +}; +/* An 16-by-8 matrix */ +const float GESVNB_AR1[128] = +{ + -9.7656f, -25.0000f, -54.6875f, -46.0938f, 105.4688f, 93.7500f, 49.6094f, 27.3438f, 7.8125f, -15.6250f, -21.8750f, -43.3594f, -32.0313f, 25.0000f, 0.7813f, 1.9531f, + 31.6406f, 40.6250f, 27.7344f, 27.3438f, 0.0000f, -19.1406f, -21.0938f, -28.5156f, -23.0469f, -35.9375f, -39.8438f, -78.5156f, -157.8125f, -20.3125f, -15.6250f, -5.8594f, + -43.7500f, -84.7656f, -98.0469f, -78.9063f, -13.2813f, 22.2656f, 22.6563f, 24.2188f, 30.8594f, 49.6094f, 69.1406f, 119.5313f, 204.6875f, 123.0469f, 43.7500f, 20.7031f, + 6.6406f, -2.3438f, 13.2813f, 25.7813f, 5.4688f, -10.1563f, -67.9688f, -76.5625f, -55.4688f, -51.1719f, -39.8438f, -37.8906f, 70.3125f, 60.1563f, 11.3281f, 6.6406f, + 1.9531f, -10.5469f, -41.7969f, -76.9531f, -133.9844f, -130.0781f, -71.0938f, -55.8594f, -35.5469f, -6.6406f, 16.7969f, 46.8750f, 149.6094f, 104.2969f, 32.4219f, 15.6250f, + -0.3906f, -5.8594f, -13.6719f, -21.8750f, -66.0156f, -56.6406f, 33.5938f, 39.4531f, 30.0781f, 18.7500f, 11.3281f, 30.4688f, -3.5156f, 26.5625f, 5.8594f, 3.5156f, + 1.1719f, 3.5156f, 125.0000f, 175.7813f, 150.3906f, 135.9375f, 83.9844f, 60.5469f, 41.0156f, 17.5781f, -5.0781f, -29.2969f, -106.2500f, -50.3906f, -20.3125f, -8.9844f, + 1.5625f, 19.1406f, 21.0938f, 35.1563f, 35.9375f, 39.4531f, 23.0469f, 26.9531f, 7.8125f, 27.3438f, 8.9844f, 16.7969f, -109.3750f, -243.7500f, -44.5313f, -21.4844f +}; +/* An 16-by-8 matrix */ +const float GESVNB_AR2[128] = +{ + -8.5938f, -13.6719f, -12.1094f, -64.8438f, -64.0625f, 84.7656f, 82.8125f, 60.5469f, 64.8438f, 48.0469f, 26.1719f, 12.8906f, -8.2031f, -16.0156f, -1.1719f, -0.3906f, + -5.4688f, -7.8125f, -6.2500f, -27.3438f, -30.0781f, -20.7031f, 8.9844f, -2.7344f, -38.2813f, -48.0469f, -38.6719f, -19.1406f, 139.4531f, 44.5313f, 14.0625f, 7.4219f, + -22.2656f, -46.4844f, -118.3594f, -83.9844f, -12.8906f, -40.2344f, -37.8906f, -45.7031f, -41.0156f, -39.8438f, -26.1719f, -52.3438f, -68.7500f, 44.1406f, 6.2500f, 3.1250f, + -4.6875f, 5.4688f, 11.7188f, -14.4531f, -43.7500f, -88.2813f, -80.4688f, -9.7656f, 48.8281f, 52.3438f, 38.6719f, 32.4219f, 21.4844f, -1.5625f, 3.5156f, 1.5625f, + -7.4219f, 8.9844f, 66.7969f, 22.2656f, 5.0781f, -5.8594f, -10.1563f, -16.4063f, -25.3906f, -26.9531f, -30.0781f, -66.0156f, -137.1094f, -41.0156f, -19.1406f, -8.2031f, + -5.4688f, -3.9063f, 3.1250f, 13.6719f, 62.8906f, 40.6250f, -28.9063f, -39.8438f, -52.7344f, -18.3594f, 17.5781f, 103.1250f, 20.3125f, -26.9531f, -0.3906f, -1.9531f, + 83.2031f, 110.9375f, 89.8438f, 47.2656f, 19.5313f, 4.6875f, 16.7969f, 18.7500f, 10.5469f, -2.7344f, -9.3750f, -15.2344f, 29.2969f, 0.3906f, -3.5156f, -1.1719f, + -29.2969f, -53.5156f, -34.7656f, 107.4219f, 64.0625f, 25.3906f, 48.8281f, 35.5469f, 33.5938f, 35.5469f, 21.8750f, 3.9063f, 3.5156f, -3.9063f, 0.0000f, 0.0000f +}; +/* An 16-by-8 matrix */ +const float GESVWB_AR1[128] = +{ + -1.1719f, -6.2500f, -12.1094f, 0.7813f, -31.6406f, -48.0469f, -88.2813f, -101.5625f, -76.5625f, -47.6563f, -7.8125f, 30.4688f, 69.5313f, 56.6406f, 32.8125f, 17.9688f, + 21.4844f, 16.4063f, 5.8594f, 12.5000f, -18.7500f, -31.6406f, -42.5781f, -53.5156f, -73.0469f, -103.1250f, -128.9063f, -151.1719f, -141.7969f, -68.7500f, -14.8438f, 14.4531f, + -12.5000f, -27.3438f, -56.2500f, -105.0781f, -131.6406f, -71.4844f, 23.0469f, 22.6563f, 17.1875f, 19.1406f, 16.4063f, 19.9219f, 28.1250f, 19.5313f, 10.1563f, 14.8438f, + -7.0313f, -22.6563f, -30.8594f, 48.8281f, 137.5000f, 113.6719f, 70.3125f, 46.0938f, 28.1250f, 9.7656f, -8.9844f, -32.0313f, -72.2656f, -65.2344f, -12.8906f, 2.3438f, + -3.9063f, 52.7344f, 212.5000f, 201.9531f, 201.9531f, 219.1406f, 201.1719f, 206.2500f, 195.3125f, 184.3750f, 161.3281f, 149.6094f, 124.2188f, 85.5469f, 46.0938f, 22.2656f, + -21.0938f, -109.3750f, -239.8438f, -214.0625f, -203.5156f, -203.9063f, -175.0000f, -187.1094f, -178.5156f, -171.0938f, -147.2656f, -138.6719f, -124.2188f, -105.8594f, -86.7188f, -34.7656f, + -24.2188f, -37.5000f, -33.5938f, -3.9063f, 40.6250f, 60.5469f, 46.8750f, 43.7500f, 74.2188f, 103.1250f, 113.6719f, 106.2500f, 90.6250f, 64.8438f, 37.1094f, 10.5469f, + 12.8906f, 23.8281f, 60.5469f, 47.2656f, 3.5156f, -10.9375f, 2.3438f, 40.2344f, 25.0000f, 6.6406f, 1.5625f, -0.7813f, -12.1094f, -34.3750f, -81.6406f, -80.4688f +}; +/* An 16-by-8 matrix */ +const float GESVWB_AR2[128] = +{ + -57.4219f, -127.3438f, -164.4531f, -35.5469f, -8.5938f, -9.7656f, -5.4688f, -8.2031f, 12.5000f, 29.6875f, 40.6250f, 39.8438f, 25.3906f, 18.3594f, 19.5313f, 16.0156f, + -15.2344f, -6.2500f, 23.8281f, -5.0781f, -14.8438f, -21.8750f, 18.3594f, 59.7656f, 76.1719f, 83.2031f, 82.8125f, 85.9375f, 95.7031f, 95.7031f, 81.6406f, 33.5938f, + -13.2813f, -28.5156f, 32.0313f, 151.1719f, 77.7344f, 27.7344f, 21.8750f, -7.0313f, -12.8906f, -21.8750f, -34.3750f, -30.8594f, -1.9531f, 23.0469f, 21.4844f, 11.3281f, + -2.7344f, -8.2031f, -8.2031f, -61.7188f, -48.0469f, 118.7500f, 88.2813f, 65.6250f, 48.4375f, 3.1250f, -29.2969f, -35.5469f, -21.0938f, -1.9531f, 14.4531f, 11.7188f, + -10.1563f, -8.5938f, -26.1719f, -87.8906f, 41.7969f, 14.8438f, -32.0313f, -44.1406f, -83.2031f, -80.0781f, -24.2188f, 10.9375f, 34.7656f, 37.1094f, 20.3125f, 6.6406f, + 88.6719f, 157.8125f, 126.9531f, 52.3438f, 17.5781f, -6.2500f, 1.1719f, -5.8594f, -21.4844f, -25.3906f, -21.4844f, -21.0938f, -7.0313f, -3.1250f, 0.3906f, -5.4688f, + 7.4219f, 11.7188f, 4.6875f, 10.9375f, 18.7500f, 5.0781f, 0.7813f, -18.3594f, -14.8438f, 16.0156f, 11.3281f, -3.1250f, -60.1563f, -123.0469f, -160.5469f, -94.5313f, + 3.1250f, 9.3750f, 11.3281f, -23.8281f, -83.9844f, -128.5156f, -92.5781f, -41.4063f, -4.6875f, -4.6875f, -25.0000f, -46.0938f, -65.2344f, -46.4844f, 3.1250f, 20.3125f +}; +/* An 16-by-32 matrix */ +const float AUWB2_MA1[512] = +{ + 152.7344f, 116.4063f, 69.9219f, -14.4531f, -87.8906f, -151.1719f, -244.9219f, -337.5000f, -475.0000f, -642.1875f, -823.4375f, -314.0625f, -108.2031f, -1.9531f, 47.2656f, 182.8125f, + 137.1094f, 83.2031f, 55.0781f, -29.2969f, -50.7813f, -64.0625f, -129.6875f, -160.1563f, -204.6875f, -223.8281f, -224.6094f, -185.1563f, -129.2969f, -40.2344f, -8.5938f, 78.5156f, + 31.6406f, 341.4063f, 444.1406f, 477.7344f, 485.1563f, 492.9688f, 483.5938f, 462.8906f, 445.7031f, 423.8281f, 387.8906f, 286.3281f, 222.6563f, 165.6250f, 100.0000f, 56.6406f, + -2.3438f, -9.7656f, -41.0156f, -57.4219f, -127.7344f, -133.5938f, -229.2969f, -242.1875f, -372.6563f, -446.4844f, -733.5938f, -804.2969f, -139.0625f, -39.0625f, 52.3438f, 186.3281f, + -76.9531f, -197.2656f, -322.6563f, -407.4219f, -337.1094f, -189.4531f, -115.6250f, -40.2344f, -2.3438f, 69.5313f, 105.0781f, 95.7031f, 90.2344f, 125.0000f, 94.9219f, 161.3281f, + -202.3438f, -236.3281f, 110.1563f, 167.9688f, 207.8125f, 232.8125f, 264.0625f, 292.1875f, 315.6250f, 336.3281f, 325.7813f, 266.0156f, 208.5938f, 194.5313f, 114.4531f, 131.6406f, + -95.3125f, -219.9219f, -281.2500f, -233.9844f, -195.3125f, -192.9688f, -244.9219f, -288.6719f, -401.5625f, -476.1719f, -116.0156f, 3.5156f, 27.7344f, 106.2500f, 111.3281f, 219.9219f, + -175.0000f, -333.5938f, -357.8125f, -202.3438f, -112.1094f, -20.3125f, 21.8750f, 95.7031f, 135.5469f, 204.6875f, 217.5781f, 194.1406f, 162.5000f, 176.5625f, 125.3906f, 170.7031f, + 58.5938f, 44.1406f, 10.9375f, -10.1563f, 0.3906f, -31.2500f, -69.1406f, -88.2813f, -75.3906f, -60.9375f, -24.2188f, -88.6719f, -93.7500f, -149.6094f, -208.9844f, -316.0156f, + -93.7500f, -96.0938f, -67.9688f, -25.7813f, 31.2500f, 58.2031f, 95.3125f, 110.9375f, 161.3281f, 169.5313f, 184.7656f, 61.7188f, 21.8750f, -65.2344f, -127.3438f, -282.4219f, + 51.1719f, -4.2969f, 55.0781f, 12.5000f, 9.3750f, -47.6563f, -155.0781f, -238.2813f, -346.8750f, -317.1875f, 11.7188f, 90.6250f, 119.5313f, 144.9219f, 133.2031f, 174.2188f, + -61.7188f, -212.8906f, -206.6406f, 58.9844f, 55.4688f, -39.4531f, -166.4063f, -279.6875f, -402.7344f, -577.7344f, -605.4688f, -137.5000f, -51.5625f, 56.6406f, 73.0469f, 201.9531f, + 57.8125f, -40.6250f, -173.8281f, -328.5156f, -12.1094f, 71.4844f, -33.5938f, -123.4375f, -240.2344f, -257.8125f, -90.2344f, 32.8125f, 75.0000f, 107.4219f, 78.5156f, 121.4844f, + -71.4844f, -85.9375f, -94.9219f, -71.0938f, -92.5781f, -68.7500f, -103.9063f, -91.0156f, -131.2500f, -132.4219f, -253.9063f, -398.0469f, -645.3125f, -330.4688f, -20.3125f, 151.1719f, + -40.6250f, -45.7031f, -99.2188f, -129.6875f, -74.6094f, 0.3906f, 25.0000f, 71.0938f, 123.8281f, 193.3594f, 244.5313f, 224.2188f, 202.7344f, 198.4375f, 178.1250f, 197.2656f, + -58.9844f, -92.5781f, 192.1875f, 187.1094f, 106.6406f, 54.2969f, 14.0625f, -23.4375f, -46.4844f, 28.9063f, 67.9688f, 73.4375f, 116.4063f, 142.9688f, 135.5469f, 186.7188f, + 61.7188f, 8.9844f, -82.0313f, -175.7813f, -262.8906f, -248.8281f, -165.2344f, -129.2969f, -51.9531f, 5.4688f, 50.0000f, 26.9531f, 24.2188f, 55.8594f, 66.7969f, 122.2656f, + 195.7031f, 153.9063f, 14.4531f, -22.2656f, 26.1719f, 27.3438f, 17.9688f, 13.6719f, 35.9375f, 46.8750f, 131.6406f, 100.7813f, 107.8125f, 110.5469f, 143.7500f, 195.3125f, + 16.4063f, -61.3281f, -155.4688f, -234.3750f, -289.8438f, -304.6875f, -305.0781f, -382.8125f, -455.4688f, -636.3281f, -378.1250f, -58.2031f, -38.6719f, 73.4375f, 81.6406f, 206.6406f, + -93.7500f, 74.2188f, 181.6406f, 212.1094f, 224.6094f, 220.7031f, 236.3281f, 232.8125f, 255.0781f, 233.9844f, 227.7344f, 108.9844f, 79.2969f, -19.9219f, -72.6563f, -230.0781f, + 123.4375f, 144.9219f, 162.8906f, 145.3125f, 114.4531f, 73.8281f, 89.8438f, 60.1563f, 71.8750f, 35.5469f, 36.7188f, -68.3594f, -77.3438f, -139.8438f, -177.3438f, -287.5000f, + 28.1250f, -62.1094f, -141.4063f, -194.9219f, -247.2656f, -269.5313f, -310.1563f, -288.6719f, -258.5938f, -178.1250f, -140.6250f, -132.0313f, -98.0469f, -2.3438f, 19.5313f, 135.1563f, + -78.9063f, -129.6875f, -167.1875f, -180.4688f, -198.4375f, -171.8750f, -215.6250f, -252.7344f, -345.7031f, -475.3906f, -676.9531f, -241.7969f, -63.2813f, 37.1094f, 78.9063f, 199.2188f, + -35.5469f, -152.7344f, -276.9531f, -345.3125f, -395.3125f, -391.0156f, -365.6250f, -278.9063f, -198.8281f, -77.3438f, 16.4063f, 38.6719f, 46.4844f, 101.9531f, 92.9688f, 193.7500f, + -144.5313f, 35.9375f, 185.9375f, 235.9375f, 266.0156f, 297.6563f, 322.6563f, 348.8281f, 364.8438f, 391.0156f, 372.6563f, 305.8594f, 245.7031f, 230.4688f, 160.9375f, 182.4219f, + -75.3906f, -8.5938f, -10.9375f, 17.9688f, 83.5938f, 151.1719f, 196.0938f, 251.1719f, 284.3750f, 337.5000f, 335.5469f, 282.4219f, 226.9531f, 222.2656f, 169.9219f, 188.6719f, + 87.1094f, 113.6719f, 247.2656f, 198.4375f, 136.7188f, 55.0781f, -60.9375f, -185.9375f, -363.2813f, -553.5156f, -706.6406f, -298.4375f, -80.4688f, 30.0781f, 74.6094f, 201.1719f, + -185.5469f, -308.9844f, -162.8906f, 29.2969f, 78.5156f, 133.9844f, 159.3750f, 214.4531f, 239.0625f, 276.1719f, 267.9688f, 223.4375f, 180.8594f, 178.5156f, 125.3906f, 145.7031f, + 328.9063f, 279.6875f, 261.3281f, 231.6406f, 163.6719f, 165.2344f, 145.7031f, 125.3906f, 106.6406f, 109.3750f, 138.2813f, 84.7656f, 75.3906f, 90.6250f, 68.3594f, 114.8438f, + 45.3125f, -23.4375f, -56.2500f, -116.7969f, -164.4531f, -215.2344f, -285.9375f, -371.8750f, -469.9219f, -649.2188f, -779.6875f, -209.7656f, -93.7500f, 21.4844f, 53.9063f, 189.8438f, + -126.1719f, -259.7656f, -267.9688f, -83.5938f, -78.5156f, -101.5625f, -145.7031f, -128.5156f, -130.0781f, -64.4531f, 25.7813f, 37.5000f, 68.3594f, 121.0938f, 113.6719f, 189.8438f, + -7.4219f, 16.7969f, 13.6719f, 15.6250f, 16.4063f, 21.4844f, 24.6094f, 39.4531f, 51.9531f, 75.7813f, 86.7188f, 59.3750f, 45.7031f, 56.6406f, 51.9531f, 83.2031f +}; + +/* An 16-by-16 matrix */ +const float SVWB2_SN1[256] = { + -100.78f, -150.78f, -263.28f, 361.72f, 550.39f, 341.41f, 287.11f, 200.00f, 243.75f, 229.30f, 192.58f, 268.75f, 330.08f, 203.52f, 167.19f, 37.11f, + -12.89f, -35.16f, 408.98f, 260.16f, 128.52f, -23.05f, -126.95f, -110.16f, -278.13f, -305.86f, -89.84f, 10.94f, -138.67f, -169.92f, -194.53f, -137.11f, + 71.48f, 43.36f, 200.39f, 291.41f, 142.58f, 35.55f, -83.98f, -186.33f, -157.03f, -194.14f, -364.06f, -460.94f, -555.47f, -423.83f, -178.13f, -3.52f, + -111.72f, -151.56f, -127.34f, 123.83f, 67.19f, 107.42f, 92.97f, 215.23f, 216.80f, 224.22f, 241.41f, 280.08f, 293.36f, 239.06f, 172.27f, 91.02f, + 37.50f, 69.92f, 79.30f, -43.75f, -181.64f, -230.86f, -83.20f, 48.44f, 12.89f, 75.00f, 95.70f, 36.72f, -16.02f, -114.84f, -198.05f, -253.52f, + -36.72f, -64.45f, 395.31f, 361.72f, 269.14f, 180.08f, 232.03f, 229.30f, 155.47f, 156.25f, 137.11f, 190.23f, 188.67f, 165.63f, 115.23f, 85.55f, + -101.95f, -139.45f, -178.91f, -98.44f, -63.67f, -136.72f, -153.91f, -99.61f, 11.72f, 67.58f, 35.16f, 25.39f, 36.33f, 61.33f, 26.17f, 1.17f, + 16.80f, 39.45f, -19.14f, -233.20f, -333.20f, -307.81f, -222.27f, -209.38f, -304.69f, -237.11f, -66.02f, -48.83f, -29.30f, 37.50f, 38.67f, 60.16f, + 94.14f, 79.30f, 158.20f, 30.86f, -78.91f, -216.80f, -280.47f, -399.61f, -452.73f, -542.97f, -600.78f, -302.73f, -186.72f, -67.58f, -24.61f, 106.25f, + -64.45f, -114.06f, -158.59f, 409.77f, 304.30f, 136.33f, 87.89f, 4.69f, 103.52f, 14.84f, -71.48f, -174.22f, -154.69f, -32.03f, -6.64f, -57.42f, + 29.30f, 17.58f, -96.88f, -325.39f, 284.77f, 162.50f, 195.31f, 69.92f, -45.31f, 6.64f, 30.86f, 95.31f, 103.52f, 30.08f, -27.34f, -16.80f, + 249.61f, 275.78f, 188.67f, -15.63f, -207.03f, -77.73f, -42.58f, -155.86f, -94.92f, -169.53f, -278.52f, -316.80f, -365.23f, -303.52f, -129.69f, 10.16f, + 42.97f, 65.23f, -21.48f, -309.38f, -380.47f, 151.17f, 74.22f, 75.00f, 26.56f, -67.19f, -55.08f, -116.41f, -210.55f, -156.64f, -54.30f, 31.64f, + 57.81f, 120.31f, 65.63f, 20.70f, -111.33f, -105.47f, -83.20f, -70.31f, 53.91f, 78.13f, 76.17f, 25.39f, 185.94f, 263.28f, 248.44f, 195.70f, + 2.34f, 15.23f, -68.75f, 83.20f, 293.75f, 169.53f, 126.17f, 195.70f, 218.75f, 108.20f, 41.80f, -96.09f, -140.23f, -300.00f, -319.53f, -416.02f, + -91.02f, -115.23f, -227.34f, -448.05f, -339.84f, 30.08f, 56.25f, 130.86f, 105.08f, 196.09f, 249.22f, 280.86f, 240.23f, 146.88f, 85.55f, 67.19f +}; +/* An 16-by-16 matrix */ +const float SVWB2_SN2[256] = { + -39.45f, -51.17f, -213.28f, -326.17f, 191.02f, 196.09f, 204.30f, 116.02f, 53.52f, 77.73f, 105.47f, 67.19f, 7.03f, -19.92f, -57.81f, -24.61f, + 130.08f, 137.11f, 55.86f, 55.47f, 18.36f, -53.52f, -51.56f, -126.56f, -84.38f, -12.50f, 41.02f, 103.13f, 211.33f, 166.02f, 133.98f, 59.77f, + -36.33f, -65.63f, 71.88f, 236.33f, 145.70f, 92.58f, 72.66f, 68.36f, 120.31f, 125.78f, 175.00f, 80.08f, -50.39f, -188.28f, -186.33f, -200.00f, + -9.38f, -11.72f, 10.16f, -18.36f, -62.11f, -34.38f, -134.38f, -51.17f, -34.38f, -109.38f, -290.23f, -352.34f, -103.13f, 69.14f, 15.23f, -10.16f, + 101.17f, 97.66f, 44.92f, -29.30f, -72.66f, -127.73f, -140.63f, -92.58f, 104.69f, 208.20f, 92.19f, -133.59f, -217.19f, -130.47f, -71.09f, -11.72f, + 48.05f, 94.53f, 46.48f, 80.08f, 172.27f, 67.19f, 19.53f, -61.72f, -107.03f, -83.98f, -167.19f, -284.77f, -296.48f, -208.20f, -113.28f, -43.75f, + -62.89f, -87.50f, -200.39f, 153.52f, 179.69f, 84.38f, 70.31f, -36.72f, -30.47f, -125.00f, -184.77f, 5.08f, 87.50f, 76.95f, 49.61f, 14.84f, + -14.06f, -25.78f, 140.63f, 64.45f, -72.27f, -220.31f, -266.80f, -139.84f, -247.66f, -23.83f, 156.64f, 52.34f, -90.63f, -103.13f, -67.97f, 12.50f, + -54.69f, -76.95f, -183.98f, -139.06f, -208.20f, -126.56f, -104.69f, -29.69f, 101.95f, 101.17f, 85.16f, 63.28f, 80.47f, 103.91f, 91.41f, 65.63f, + 39.06f, 42.58f, -23.44f, -143.75f, -220.70f, -19.53f, 29.30f, -23.44f, -62.89f, -255.47f, -330.86f, 63.67f, 108.98f, 29.69f, -9.38f, 16.41f, + 4.69f, 34.38f, 48.44f, -21.48f, -35.55f, 77.34f, 113.28f, 82.81f, 94.14f, 71.88f, 3.91f, 6.25f, 219.14f, 264.84f, 241.80f, 136.72f, + -14.84f, -35.55f, 301.56f, 255.47f, 114.06f, 64.84f, 40.63f, 16.80f, -87.50f, -142.58f, -160.55f, -30.47f, -35.16f, -8.20f, 33.59f, 65.63f, + 17.58f, 0.78f, 22.66f, 31.25f, 114.84f, 160.55f, 173.05f, 255.86f, 235.94f, 251.17f, 244.14f, 207.03f, 146.09f, 89.06f, 65.23f, 50.00f, + -68.75f, -48.44f, -71.48f, -51.56f, -101.95f, -49.61f, 136.72f, 179.69f, 166.02f, 101.95f, -29.69f, -156.25f, -236.33f, -197.66f, -47.27f, -19.53f, + -37.50f, -35.94f, -107.42f, -68.75f, -85.94f, -126.56f, -155.86f, -197.27f, -238.67f, -207.42f, 48.44f, 104.69f, 91.80f, 106.64f, 50.39f, 62.50f, + -2.73f, 31.64f, 57.03f, -77.73f, -77.34f, 15.23f, -5.86f, 39.45f, 17.58f, 22.66f, 211.72f, 204.69f, 77.34f, -50.39f, -126.95f, -175.00f +}; + +/* An 16-by-8 matrix */ +const float SVWB2_AR1[128] = { + -10.94f, -15.23f, -47.66f, 28.91f, 115.63f, 58.20f, 57.42f, 46.88f, 58.20f, 14.45f, -4.30f, -64.06f, -87.11f, -116.80f, -113.67f, -125.39f, + -8.98f, -11.72f, -53.91f, -124.61f, -150.78f, 62.11f, 48.44f, 20.31f, 12.89f, -17.19f, -5.86f, -30.47f, -37.89f, -21.09f, 15.63f, 25.00f, + -37.89f, -56.25f, -80.08f, -37.89f, 31.64f, 37.50f, 59.38f, 96.48f, 80.47f, 75.78f, 103.52f, 130.08f, 125.39f, 90.63f, 51.56f, 12.50f, + 42.19f, 41.41f, 40.23f, 14.84f, -5.47f, -7.03f, -23.83f, -56.25f, -63.28f, -62.50f, -100.78f, -158.20f, -210.94f, -123.44f, -48.44f, 7.42f, + 8.98f, 4.69f, 13.67f, -5.47f, -20.70f, -41.41f, -56.25f, -103.91f, -135.16f, -184.38f, -157.03f, -11.72f, -1.95f, -16.80f, -34.38f, -3.91f, + -20.70f, -46.09f, -79.30f, 162.11f, 126.95f, 66.80f, 47.27f, -12.11f, 18.75f, -12.11f, -23.44f, -25.78f, 50.00f, 75.78f, 55.08f, 26.56f, + -18.36f, -33.98f, 167.97f, 130.47f, 75.78f, 53.13f, 33.59f, 32.42f, 0.78f, -13.67f, 18.36f, 33.20f, 1.17f, -11.72f, -30.08f, -17.58f, + -1.95f, -5.47f, -3.52f, -15.23f, -53.13f, -94.92f, -84.77f, -21.48f, -15.23f, 70.31f, 74.61f, 23.83f, 16.41f, -1.56f, 2.34f, -14.84f +}; +/* An 16-by-8 matrix */ +const float SVWB2_AR2[128] = { + 4.69f, 6.64f, -17.97f, -60.94f, -128.52f, -114.84f, 16.80f, 55.08f, 23.83f, 5.86f, -3.52f, 11.33f, -28.91f, -16.02f, -14.84f, 6.25f, + -18.36f, -32.03f, -53.13f, 32.42f, -13.28f, -43.36f, -104.69f, -114.84f, 42.58f, 53.13f, 21.09f, -22.66f, -20.31f, 24.22f, 25.00f, 5.47f, + -5.86f, -7.81f, -66.80f, -135.55f, 101.17f, 63.28f, 34.38f, 5.08f, -22.27f, -10.16f, -23.05f, 9.38f, 3.91f, 5.47f, -16.02f, -3.13f, + 13.28f, 15.23f, 54.30f, 61.33f, 12.11f, 25.78f, -5.47f, 20.70f, 24.61f, 11.72f, -3.13f, -0.78f, -71.48f, -133.59f, -134.38f, -101.17f, + 5.47f, 6.64f, 17.97f, 2.73f, -21.48f, -25.00f, -53.13f, -51.95f, -124.22f, -118.36f, 102.34f, 57.42f, -7.81f, -22.27f, -11.72f, 11.72f, + -13.67f, -13.67f, 8.59f, 36.33f, 64.06f, 78.52f, 113.67f, 100.78f, 88.28f, 115.63f, 82.03f, 77.34f, 28.13f, 10.16f, 22.27f, 0.78f, + 13.28f, 26.17f, 28.52f, -3.13f, -40.63f, 17.19f, 12.11f, -5.08f, 27.73f, 28.13f, -7.03f, -19.14f, 167.97f, 146.09f, 85.16f, 35.94f, + 0.78f, -1.17f, 28.91f, 67.19f, 26.56f, -1.56f, -13.67f, -9.77f, -60.94f, -85.55f, -168.75f, -112.50f, -71.09f, -14.06f, 44.53f, 44.14f +}; + +/*----------------------------------------------------------------------------------* + * LSF quantization - LSF mode/codebook selection tables + *----------------------------------------------------------------------------------*/ +const int16_t CB_lsf[] = +{ + -1, /* Mode 0 : INACTIVE NB, Safety net */ + -1, /* Mode 1 : UNVOICED NB, Safety net */ + 0, /* Mode 2 : VOICED NB, Safety net */ + 2, /* Mode 3 : GENERIC NB, Safety net */ + 2, /* Mode 4 : TRANSITION NB, Safety net */ + 4, /* Mode 5 : AUDIO NB, Safety net */ + -1, /* Mode 6 : INACTIVE WB, Safety net */ + -1, /* Mode 7 : UNVOICED WB, Safety net */ + 5, /* Mode 8 : VOICED WB, Safety net */ + 7, /* Mode 9 : GENERIC WB, Safety net */ + 7, /* Mode 10 : TRANSITION WB, Safety net */ + 9, /* Mode 11 : AUDIO WB, Safety net */ + -1, /* Mode 12 : INACTIVE WB16k, Safety net */ + -1, /* Mode 13 : UNVOICED WB16k, Safety net */ + 14, /* Mode 14 : VOICED WB16k, Safety net */ + -1, /* Mode 15 : GENERIC WB 16k, Safety net */ + 10, /* Mode 16 : TRANSITION WB16k, Safety net */ + -1, /* Mode 17 : AUDIO WB16k, Safety net */ + 13 /* Mode 18 : CNG, Safety net */ +}; + +const int16_t CB_p_lsf[] = +{ + 0, /* Mode 0 : INACTIVE NB, Predictive */ + 1, /* Mode 1 : UNVOICED NB, Predictive */ + 4, /* Mode 2 : VOICED NB, Predictive */ + 4, /* Mode 3 : GENERIC NB, Predictive */ + -1, /* Mode 4 : TRANSITION NB, Predictive */ + -1, /* Mode 5 : AUDIO NB, Predictive */ + 0, /* Mode 6 : INACTIVE WB, Predictive */ + 1, /* Mode 7 : UNVOICED WB, Predictive */ + 6, /* Mode 8 : VOICED WB, Predictive */ + 6, /* Mode 9 : GENERIC WB, Predictive */ + -1, /* Mode 10 : TRANSITION WB, Predictive */ + -1, /* Mode 11 : AUDIO WB, Predictive */ + 0, /* Mode 12 : INACTIVE WB16k, Predictive */ + -1, /* Mode 13 : UNVOICED WB16k, Predictive */ + 11, /* Mode 14 : VOICED WB16k, Predictive */ + 8, /* Mode 15 : GENERIC WB16k, Predictive */ + -1, /* Mode 16 : TRANSITION WB16k, Predictive */ + 10, /* Mode 17 : AUDIO WB16k, Predictive */ + 9, /* Mode 18 : GENERIC WB, MA Predictive */ +}; + + +const float * const ModeMeans[] = {IANB_Ave, UVNB_Ave, SVNB_Ave, GENB_Ave, TRNB_Ave, AUNB_Ave, IAWB_Ave, UVWB_Ave, + SVWB_Ave, GEWB_Ave, TRWB_Ave, AUWB_Ave, IAWB2_Ave, NULL, SVWB2_Ave, GEWB2_Ave, TRWB2_Ave, AUWB2_Ave + }; +const float * const Predictors[] = {Predictor6, NULL, Predictor1, Predictor3, NULL, Predictor6,Predictor5, NULL, Predictor0, + Predictor2, NULL, Predictor5, Predictor7, NULL, Predictor8, Predictor4, NULL, Predictor7 + }; +const float means_nb_31bits_ma_lsf[16] = {336.3281f , 531.2500f , 886.7188f , 1266.7969f , 1629.2969f , 1973.4375f , 2348.4375f , 2646.8750f , 2998.4375f , 3292.1875f , 3591.4062f , 3806.2500f , 4132.8125f , 4652.7344f , 5250.0000f , 5883.2031f}; +const float means_wb_31bits_ma_lsf[16] = {319.5312f , 548.0469f , 934.3750f , 1353.5156f , 1730.0781f , 2120.3125f , 2505.4688f , 2860.5469f , 3243.7500f , 3601.9531f , 3969.5312f , 4332.4219f , 4736.3281f , 5137.8906f , 5562.8906f , 5963.2812f}; + + +const int16_t CBsizes[] = +{ + 1,2,4,8,16,32,64 +}; + + +const int16_t CBbits[] = +{ + -1, /* Mode 0 : INACTIVE NB, Safety net */ + -1, /* Mode 1 : UNVOICED NB, Safety net */ + 4, /* Mode 2 : VOICED NB, Safety net */ + 5, /* Mode 3 : GENERIC NB, Safety net */ + 5, /* Mode 4 : TRANSITION NB, Safety net */ + 4, /* Mode 5 : AUDIO NB, Safety net */ + -1, /* Mode 6 : INACTIVE WB, Safety net */ + -1, /* Mode 7 : UNVOICED WB, Safety net */ + 4, /* Mode 8 : VOICED WB, Safety net */ + 5, /* Mode 9 : GENERIC WB, Safety net */ + 5, /* Mode 10 : TRANSITION WB, Safety net */ + 4, /* Mode 11 : AUDIO WB, Safety net */ + -1, /* Mode 12 : INACTIVE WB16k, Safety net */ + -1, /* Mode 13 : UNVOICED WB16k, Safety net */ + 4, /* Mode 14 : VOICED WB16k, Safety net */ + -1, /* Mode 15 : GENERIC WB16k, Safety net */ + 4, /* Mode 16 : TRANSITION WB16k, Safety net */ + -1, /* Mode 17 : AUDIO WB16k, Safety net */ + 4, /* Mode 18: CNG, Safety net */ +}; + + +const int16_t CBbits_p[] = +{ + 5, /* Mode 0 : INACTIVE NB, Predictive */ + 4, /* Mode 1 : UNVOICED NB, Predictive */ + 3, /* Mode 2 : VOICED NB, Predictive */ + 3, /* Mode 3 : GENERIC NB, Predictive */ + -1, /* Mode 4 : TRANSITION NB, Predictive */ + 0, /* Mode 5 : AUDIO NB, Predictive */ + 5, /* Mode 6 : INACTIVE WB, Predictive */ + 4, /* Mode 7 : UNVOICED WB, Predictive */ + 3, /* Mode 8 : VOICED WB, Predictive */ + 3, /* Mode 9 : GENERIC WB, Predictive */ + -1, /* Mode 10 : TRANSITION WB, Predictive */ + 0, /* Mode 11 : AUDIO WB, Predictive */ + 5, /* Mode 12 : INACTIVE WB16k, Predictive */ + -1, /* Mode 13 : UNVOICED WB16k, Predictive */ + 3, /* Mode 14 : VOICED WB16k, Predictive */ + 5, /* Mode 15 : GENERIC WB16k, Predictive */ + -1, /* Mode 16 : TRANSITION WB16k, Predictive */ + 5, /* Mode 17 : AUDIO WB16k, Predictive */ + 5, /* Mode 9 : GENERIC WB, Predictive */ +}; + + + +const int16_t BitsVQ[]= +{ + -1, /* Mode 0 : INACTIVE NB, Safety net */ + -1, /* Mode 1 : UNVOICED NB, Safety net */ + 8, /* Mode 2 : VOICED NB, Safety net */ + 9, /* Mode 3 : GENERIC NB, Safety net */ + 9, /* Mode 4 : TRANSITION NB, Safety net */ + 4, /* Mode 5 : AUDIO NB, Safety net */ + -1, /* Mode 6 : INACTIVE WB, Safety net */ + -1, /* Mode 7 : UNVOICED WB, Safety net */ + 8, /* Mode 8 : VOICED WB, Safety net */ + 9, /* Mode 9 : GENERIC WB, Safety net */ + 9, /* Mode 10 : TRANSITION WB, Safety net */ + 4, /* Mode 11 : AUDIO WB, Safety net */ + -1, /* Mode 12 : INACTIVE WB16k, Safety net */ + -1, /* Mode 13 : UNVOICED WB16k, Safety net */ + 8, /* Mode 14 : VOICED WB16k, Safety net */ + -1, /* Mode 15 : GENERIC WB16k, Safety net */ + 8, /* Mode 16 : TRANSITION WB16k, Safety net */ + -1, /* Mode 17 : AUDIO WB16k, Safety net */ + 4, /* Mode 18: CNG, Safety net */ +}; + + +const int16_t BitsVQ_p[]= +{ + 5, /* Mode 0 : INACTIVE NB, Predictive */ + 8, /* Mode 1 : UNVOICED NB, Predictive */ + 6, /* Mode 2 : VOICED NB, Predictive */ + 6, /* Mode 3 : GENERIC NB, Predictive */ + -1, /* Mode 4 : TRANSITION NB, Predictive */ + 0, /* Mode 5 : AUDIO NB, Predictive */ + 5, /* Mode 6 : INACTIVE WB, Predictive */ + 12, /* Mode 7 : UNVOICED WB, Predictive */ + 6, /* Mode 8 : VOICED WB, Predictive */ + 6, /* Mode 9 : GENERIC WB, Predictive */ + -1, /* Mode 10 : TRANSITION WB, Predictive */ + 0, /* Mode 11 : AUDIO WB, Predictive */ + 5, /* Mode 12 : INACTIVE WB16k, Predictive */ + -1, /* Mode 13 : UNVOICED WB16k, Predictive */ + 6, /* Mode 14 : VOICED WB16k, Predictive */ + 5, /* Mode 15 : GENERIC WB16k, Predictive */ + -1, /* Mode 16 : TRANSITION WB16k, Predictive */ + 5, /* Mode 17 : AUDIO WB16k, Predictive */ + 5, /* Mode 18 : GENERIC WB, MA Predictive */ +}; + + +const int16_t predmode_tab[][6] = +{ + {1,1,2,2,0,2}, + {1,1,2,2,0,2}, + {1,-1,2,1,0,1}, + {1,1,2,1,0,1} /* should check how is the cb for audio mode at 13.2*/ +}; + +const float * const Quantizers[] = {SVNB_SN1, SVNB_SN2, GETRNB_SN1, GETRNB_SN2, AUNB_SN1,SVWB_SN1, SVWB_SN2, GETRWB_SN1, + GETRWB_SN2, AUWB_SN1,TRWB2_SN1, TRWB2_SN2, AUWB2_SN1, CNG_SN1, SVWB2_SN1, SVWB2_SN2 }; +const float * const Quantizers_p[] = {IAA_MA1, UVD_MA1, UVD_MA2, UVWB_MA3, GESVNB_AR1, GESVNB_AR2, GESVWB_AR1, GESVWB_AR2, + GEWB2_MA1,GEWB_MA1, AUWB2_MA1, SVWB2_AR1, SVWB2_AR2 }; + +const float vals[NO_LEADERS][MAX_NO_VALS]= +{ + {1.0f, 0.0f, 0.0f, 0.0f}, + {0.5f, 0.0f, 0.0f, 0.0f}, + {1.0f, 0.0f, 0.0f, 0.0f}, + {2.0f, 0.0f, 0.0f, 0.0f}, + {1.5f, 0.5f, 0.0f, 0.0f}, + {1.0f, 0.0f, 0.0f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {1.5f, 0.5f, 0.0f, 0.0f}, + {1.0f, 0.0f, 0.0f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {2.0f, 0.0f, 0.0f, 0.0f}, + {1.5f, 0.5f, 0.0f, 0.0f}, + {2.5f, 0.5f, 0.0f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {3.0f, 1.0f, 0.0f, 0.0f}, + {1.5f, 0.5f, 0.0f, 0.0f}, + {2.5f, 1.5f, 0.5f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {2.0f, 0.0f, 0.0f, 0.0f}, + {3.0f, 1.0f, 0.0f, 0.0f}, + {1.5f, 0.5f, 0.0f, 0.0f}, + {2.5f, 1.5f, 0.5f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {3.0f, 1.0f, 0.0f, 0.0f}, + {3.0f, 2.0f, 1.0f, 0.0f}, + {1.5f, 0.5f, 0.0f, 0.0f}, + {2.5f, 1.5f, 0.5f, 0.0f}, + {2.5f, 0.5f, 0.0f, 0.0f}, + {3.5f, 0.5f, 0.0f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {2.0f, 0.0f, 0.0f, 0.0f}, + {3.0f, 1.0f, 0.0f, 0.0f}, + {3.0f, 2.0f, 1.0f, 0.0f}, + {4.0f, 0.0f, 0.0f, 0.0f}, + {1.5f, 0.5f, 0.0f, 0.0f}, + {2.5f, 1.5f, 0.5f, 0.0f}, + {2.5f, 1.5f, 0.5f, 0.0f}, + {3.5f, 1.5f, 0.5f, 0.0f}, + {2.0f, 1.0f, 0.0f, 0.0f}, + {3.0f, 2.0f, 1.0f, 0.0f}, + {3.0f, 2.0f, 1.0f, 0.0f}, + {3.0f, 0.0f, 0.0f, 0.0f}, + {4.0f, 1.0f, 0.0f, 0.0f}, + {1.5f, 0.0f, 0.0f, 0.0f}, + {2.5f, 1.5f, 0.5f, 0.0f}, + {2.5f, 1.5f, 0.5f, 0.0f}, + {3.5f, 1.5f, 0.5f, 0.0f} +}; + +const int16_t no_vals[NO_LEADERS]= {2,1,2,2,2,2,3,2,1,3,2,2,2,3,3,3,2,3,3,2,3,2,3,2,3,3,4,2,3,2,2,3,2,2,4,2,2,3,3,3,3,4,4,2,3,1,3,3,3}; + +const int16_t no_vals_ind[NO_LEADERS][MAX_NO_VALS]= +{ + {2,6,0,0}, + {8,0,0,0}, + {4,4,0,0}, + {1,7,0,0}, + {1,7,0,0}, + {6,2,0,0}, + {1,2,5,0}, + {2,6,0,0}, + {8,0,0,0}, + {1,4,3,0}, + {2,6,0,0}, + {3,5,0,0}, + {1,7,0,0}, + {1,6,1,0}, + {2,2,4,0}, + {1,1,6,0}, + {4,4,0,0}, + {1,1,6,0}, + {2,4,2,0}, + {3,5,0,0}, + {1,3,4,0}, + {5,3,0,0}, + {1,2,5,0}, + {2,6,0,0}, + {3,2,3,0}, + {1,5,2,0}, + {1,1,1,5}, + {6,2,0,0}, + {1,3,4,0}, + {2,6,0,0}, + {1,7,0,0}, + {3,4,1,0}, + {4,4,0,0}, + {1,7,0,0}, + {1,1,3,3}, + {1,7,0,0}, + {7,1,0,0}, + {1,4,3,0}, + {2,1,5,0}, + {1,1,6,0}, + {4,2,2,0}, + {1,1,5,1}, + {1,2,1,4}, + {2,6,0,0}, + {1,2,5,0}, + {8,0,0,0}, + {1,5,2,0}, + {2,2,4,0}, + {1,2,5,0} +}; + +const int16_t C_VQ[LATTICE_DIM+1][LATTICE_DIM+1] = +{ + {1,0,0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0,0,0}, + {1,2,1,0,0,0,0,0,0}, + {1,3,3,1,0,0,0,0,0}, + {1,4,6,4,1,0,0,0,0}, + {1,5,10,10,5,1,0,0,0}, + {1,6,15,20,15,6,1,0,0}, + {1,7,21,35,35,21,7,1,0}, + {1,8,28,56,70,56,28,8,1} +}; + +const UWord32 table_no_cv[] = +{ + 0, 112, 240, 1360, 1376, 2400, 4192, 5536, 9120, 9376, 18336, 18448, 25616, 26640, 33808, 40528, 40752, + 49712, 56880, 83760, 84208, 88688, 95856, 117360, 124528, 142448, 153200, 155888, 159472, 195312, 198896, 199920, 235760, 236880, + 238928, 274768, 274784, 275808, 311648, 333152, 340320, 367200, 410208, 423648, 423760, 425104, 425232, 446736, 500496, 522000, 0 +}; + +const int16_t pi0[] = +{ + 28,1,70,8,8,28,168,28,1,280,28,56,8,56,420,56, 70, 56,420, 56, 280, 56, 168, 28, 560, 168,336,28,280,28,8, + 280,70, 8, 1120, 8, 8, 280, 168, 56, 420, 336, 840, 28, 168, 1, 168, 420, 168 +}; + +const float pl_HQ[] = /* vectors in first layers */ +{ + 1, 1, 0, 0, 0, 0, 0, 0, /* 112, 4, 28 */ + 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 128, 128, 1 */ + 1, 1, 1, 1, 0, 0, 0, 0, /* 1120, 16, 70 */ + 2, 0, 0, 0, 0, 0, 0, 0, /* 16 , 2, 8 */ + 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 5 */ /* 1024,128, 8 */ + 1, 1, 1, 1, 1, 1, 0, 0, /* 1792, 64, 28 */ + 2, 1, 1, 0, 0, 0, 0, 0, /* 1344, 8, 168 */ + 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 3584, 128, 28*/ + 1, 1, 1, 1, 1, 1, 1, 1, /*256, 256, 1*/ + 2, 1, 1, 1, 1, 0, 0, 0, /* 10 */ /* 8960, 32, 280 */ + 2, 2, 0, 0, 0, 0, 0, 0, /* 112, 4, 28 */ + 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 7168, 128, 56 */ + 2.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 1024, 128, 8*/ + 2, 1, 1, 1, 1, 1, 1, 0, /* 7168, 128, 56*/ + 2, 2, 1, 1, 0, 0, 0, 0, /* 15 */ /* 6720, 16, 420 */ + 3, 1, 0, 0, 0, 0, 0, 0, /* 224, 4, 56 */ + 1.5, 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, /* 8960, 128, 70 */ + 2.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 7168, 128, 56*/ + 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0, 0, /* 26880, 64, 420 */ + 2, 2, 2, 0, 0, 0, 0, 0, /*20 */ /* 448, 8, 56 */ + 3, 1, 1, 1, 0, 0, 0, 0, /* 4480, 16, 280 */ + 1.5, 1.5, 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, /* 7168, 128, 56 */ + 2.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 21504, 128, 168 */ + 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* 7168, 256, 28 */ + 2.0, 2.0, 2.0, 1.0, 1.0, 0, 0, 0, /* 25 */ /* 17920, 32, 560 */ + 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0, 0, /* 10752, 64, 168 */ + 3.0, 2.0, 1.0, 0, 0, 0, 0, 0, /* 2688, 8, 336 */ + 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.5, 0.5, /* 3584, 128, 28 */ + 2.5, 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, /* 35840,128,280*/ + 2.5, 2.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /*30 */ /* 3584, 128, 28*/ + 3.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 1024,128, 8 */ + 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0, + 2.0f, 2.0f, 2.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 3.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, + 3.0f, 2.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, + 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 0.5f, + 2.5f, 1.5f, 1.5f, 1.5f, 1.5f, 0.5f, 0.5f, 0.5f, + 2.5f, 2.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, + 3.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, + 2.0f, 2.0f, 2.0f, 2.0f, 1.0f, 1.0f, 0.0f, 0.0f, + 3.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, + 3.0f, 2.0f, 2.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 3.0f, 3.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 4.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, + 2.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 0.5f, 0.5f, + 2.5f, 2.5f, 1.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, + 3.5f, 1.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f +}; + +/*----------------------------------------------------------------------------------* + * LSF quantization for CNG + *----------------------------------------------------------------------------------*/ + +const int16_t cng_sort[] = {/*5f */1,1,0,1,0,0, /* 4f */0,1,0,1,0,0,1,1,1,1}; + +const int16_t perm_MSLVQ[][4] = +{ + /* 5f*/ + {6,11,7,15}, + {6,15,-1,0}, + {5,8,7,15}, + {7,10,-1,0}, + {-1,0,0,0}, + {-1,0,0,0}, + /* 4f */ + {-1,0,0,0}, + {0,9,7,10}, + {-1,0,0,0}, + {7,15,-1,0}, + {-1,0,0,0}, + {-1,0,0,0}, + {6,10,7,11}, + {6,11,7,12}, + {6,11,7,12}, + {6,11,7,12} +}; + +const int16_t pl_par[] = /* 1 if even number of signs */ +{ + 0, 1, 0, 0, -1, 0, 0, 1, 0, 0, + 0, -1, 1, 0, 0, 0, 1, -1, 0, 0, + 0, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, + 0, 0, 0, 0, -1, 1, -1, 1, 0, 0, 0, 0, 0, 1, -1, 1, -1 +}; + +const float scales[][MAX_NO_SCALES*2]= /* 2 subvectors */ +{ + {1.528f, 0.000f, 0.000f, 1.532f, 0.000f, 0.000f, }, /* 14 */ + {1.605f, 0.000f, 0.000f, 1.532f, 0.000f, 0.000f, }, /* 15 */ + {1.275f, 2.458f, 0.000f, 1.532f, 0.000f, 0.000f, }, /* 18 */ + {1.275f, 2.458f, 0.000f, 1.631f, 0.000f, 0.000f, }, /* 19 */ + {1.057f, 1.794f, 2.896f, 1.154f, 1.860f, 3.067f, }, /* 25 */ + {0.927f, 1.458f, 2.317f, 1.033f, 1.791f, 3.440f, }, /* 28*/ /* mode 0 UV WB*/ + + {1.284f, 2.676f, 0.000f, 1.451f, 0.000f, 0.000f, }, /* 18 */ + {1.368f, 0.000f, 0.000f, 1.401f, 2.477f, 0.000f, }, /* 19 */ + {0.861f, 1.243f, 1.818f, 1.228f, 2.226f, 10.307f, }, /* 24 */ + {1.072f, 1.934f, 3.633f, 1.221f, 2.938f, 10.723f, }, /* 25 */ + {0.899f, 1.417f, 0.677f, 1.033f, 1.837f, 10.893f, }, /* 29 */ + {0.830f, 1.323f, 0.629f, 0.911f, 1.585f, 10.088f, }, /* 32 */ /* mode 1 UV NB*/ + {1.573f, 0.000f, 0.000f, 1.656f, 0.000f, 0.000f, }, /* 17 */ + {1.239f, 2.404f, 0.000f, 1.556f, 0.000f, 0.000f, }, /* 18 */ + {1.375f, 2.065f, 3.124f, 1.795f, 0.000f, 0.000f, }, /* (18.745) 19 */ + {1.375f, 2.065f, 3.124f, 1.901f, 0.000f, 0.000f, }, /* (19.838) 20 */ + {1.055f, 1.700f, 4.439f, 1.656f, 0.000f, 0.000f, }, /* 21 */ + {1.250f, 2.404f, 4.132f, 1.355f, 2.361f, 0.000f, }, /* 22 */ + {1.246f, 1.857f, 2.744f, 1.500f, 2.704f, 0.000f, }, /* (22.959) 23 */ + {1.243f, 2.054f, 3.638f, 1.577f, 0.000f, 0.000f, }, /* (23.949) 24 */ + {1.056f, 1.785f, 4.523f, 1.318f, 2.586f, 0.000f, }, /* 25 */ + {0.996f, 1.505f, 3.355f, 1.185f, 1.776f, 2.728f, }, + {0.929f, 1.387f, 3.357f, 1.080f, 1.701f, 2.885f, }, + {0.922f, 1.493f, 3.369f, 1.080f, 1.701f, 2.885f, }, + {0.922f, 1.493f, 3.369f, 1.066f, 1.694f, 3.135f, }, + {0.922f, 1.493f, 3.369f, 0.962f, 1.550f, 3.946f, }, /* 30 */ + {1.286f, 0.906f, 2.422f, 1.124f, 1.698f, 2.482f, }, /* (30.994) 31 */ + {0.746f, 1.108f, 2.869f, 0.959f, 1.481f, 3.907f, }, /* 32 */ + {0.770f, 1.194f, 2.823f, 0.907f, 1.402f, 2.116f, }, /* 33*/ + {0.748f, 1.103f, 2.866f, 1.182f, 0.811f, 3.332f, }, /* 34*/ + {0.765f, 1.132f, 1.844f, 1.242f, 1.893f, 0.922f, }, /* (34.981) 35 */ + {0.766f, 1.133f, 1.846f, 1.066f, 1.641f, 0.813f, }, /* (35.998) 36 */ + {0.677f, 0.963f, 2.127f, 0.726f, 1.082f, 2.204f, }, /* 37*/ /* mode 2 V WB*/ + + {1.639f, 0.000f, 0.000f, 1.218f, 2.161f, 0.000f, }, /* 17 */ + {1.286f, 2.446f, 0.000f, 1.410f, 0.000f, 0.000f, }, /* 18 */ + {1.086f, 1.728f, 3.758f, 1.218f, 2.161f, 0.000f, }, /* 22 */ + {1.035f, 1.575f, 4.815f, 1.218f, 2.161f, 0.000f, }, /* 23 */ + {0.964f, 1.533f, 4.942f, 1.218f, 2.161f, 0.000f, }, /* 24 */ + {0.841f, 1.198f, 1.982f, 1.218f, 2.161f, 0.000f, }, /* 25 */ + {0.898f, 1.298f, 2.184f, 1.216f, 2.664f, 0.000f, }, /* 27 */ + {0.841f, 1.237f, 2.237f, 0.995f, 1.657f, 2.836f, }, /* 29 */ + {0.697f, 0.981f, 2.043f, 0.935f, 1.505f, 0.659f, }, /* 34 */ + {0.669f, 0.909f, 1.328f, 0.985f, 0.654f, 1.911f, }, /* 37 */ /* mode 3 V NB*/ + + {1.212f, 1.897f, 0.000f, 0.000f, 0.000f, 0.000f, }, /* 12 (11.883) */ + {1.160f, 1.869f, 3.406f, 0.000f, 0.000f, 0.000f, }, /* (12.997) 13 */ + {1.658f, 0.000f, 0.000f, 1.896f, 0.000f, 0.000f, }, /* (13.640) 14 */ + {1.740f, 0.000f, 0.000f, 1.896f, 0.000f, 0.000f, }, /* (14.733) 15 */ + {1.634f, 0.000f, 0.000f, 1.669f, 0.000f, 0.000f, }, /* 16 (15.826) */ + {1.740f, 0.000f, 0.000f, 2.016f, 0.000f, 0.000f, }, /* (15.826) 16 */ + {1.377f, 2.548f, 0.000f, 1.896f, 0.000f, 0.000f, }, /* (17.479) 18 */ + {1.288f, 2.423f, 0.000f, 1.669f, 0.000f, 0.000f, }, /* 19 (18.572) */ + {1.212f, 1.897f, 0.000f, 1.669f, 0.000f, 0.000f, }, /* 20 (19.796) */ + {1.083f, 1.766f, 3.175f, 1.669f, 0.000f, 0.000f, }, /* 21 (20.910) */ + {1.037f, 1.609f, 4.228f, 1.669f, 0.000f, 0.000f, }, /* 22 (21.776) */ + {1.095f, 1.659f, 2.716f, 1.315f, 2.506f, 0.000f, }, /* 23 (22.959) */ + {1.166f, 1.965f, 3.654f, 1.686f, 0.000f, 0.000f, }, /* (23.949) 24 */ + {0.941f, 1.386f, 2.221f, 1.315f, 2.506f, 0.000f, }, /* 25 (24.992) */ + {0.908f, 1.306f, 1.901f, 1.320f, 2.623f, 0.000f, }, /* 26 (25.904) */ + {1.075f, 1.767f, 0.790f, 1.320f, 2.623f, 0.000f, }, /* 27 (26.829) */ + {1.022f, 1.531f, 0.759f, 1.110f, 1.755f, 2.594f, }, /* 28 (27.989) */ + {1.075f, 1.767f, 0.790f, 1.093f, 1.902f, 3.014f, }, /* 29 (28.984) */ + {0.893f, 1.472f, 0.675f, 1.103f, 1.770f, 2.842f, }, /* 30 (29.980) */ + {0.910f, 1.548f, 0.685f, 1.032f, 1.651f, 2.513f, }, /* 31 (30.966) */ + {0.826f, 1.256f, 0.632f, 0.981f, 1.542f, 2.217f, }, /* 32 (31.995) */ /* G WB*/ + + {1.184f, 1.810f, 2.761f, 0.000f, 0.000f, 0.000f, }, /* 12 (11.925) */ + {1.611f, 0.000f, 0.000f, 1.618f, 0.000f, 0.000f, }, /* 16 (15.826) */ + {1.184f, 1.810f, 2.761f, 1.550f, 0.000f, 0.000f, }, /* 19 (18.745) */ + {1.184f, 1.810f, 2.761f, 1.618f, 0.000f, 0.000f, }, /* 20 (19.838) */ + {1.063f, 1.737f, 2.985f, 1.618f, 0.000f, 0.000f, }, /* 21 (20.910) */ + {1.078f, 1.825f, 3.162f, 1.469f, 2.249f, 0.000f, }, /* 22 (21.985) */ + {1.375f, 0.915f, 2.082f, 1.469f, 2.249f, 0.000f, }, /* 23 (22.815) */ + {0.960f, 1.423f, 0.700f, 1.310f, 2.132f, 0.000f, }, /* 25 (24.996) */ + {1.124f, 0.794f, 1.902f, 1.283f, 2.302f, 0.000f, }, /* 26 (25.993) */ + {1.077f, 1.727f, 0.767f, 1.250f, 1.951f, 2.981f, }, /* 27 (26.954) */ + {0.933f, 1.471f, 0.685f, 1.250f, 1.951f, 2.981f, }, /* 28 (27.992) */ + {0.927f, 1.600f, 0.674f, 1.154f, 1.776f, 2.854f, }, /* 29 (28.996) */ + {1.047f, 0.722f, 1.785f, 1.056f, 1.642f, 2.701f, }, /* 30 (29.988) */ + {0.971f, 0.688f, 1.509f, 1.043f, 1.730f, 2.931f, }, /* 31 (30.962) */ + {0.919f, 0.662f, 1.367f, 1.057f, 1.808f, 3.069f, }, /* 32 (31.987) */ /* G NB*/ + + {1.617f, 0.000f, 0.000f, 1.657f, 0.000f, 0.000f, }, /* 17 */ + {1.275f, 2.298f, 0.000f, 1.563f, 0.000f, 0.000f, }, /* 18 */ + {1.377f, 2.548f, 0.000f, 2.016f, 0.000f, 0.000f, }, /* (18.572) 19 */ /* from GEWB */ + {1.299f, 2.019f, 0.000f, 2.016f, 0.000f, 0.000f, }, /* (19.796) 20 */ + {1.308f, 2.354f, 0.000f, 1.387f, 0.000f, 0.000f, }, /* 21 */ + {1.291f, 2.418f, 0.000f, 1.355f, 2.443f, 0.000f, }, /* 22 */ + {1.173f, 1.767f, 2.796f, 1.588f, 3.028f, 0.000f, }, /* (22.959) 23 */ /* from GEWB */ + {1.079f, 1.769f, 3.012f, 1.387f, 0.000f, 0.000f, }, /* 24 */ + {1.079f, 1.769f, 3.012f, 1.325f, 2.555f, 0.000f, }, /* 25 */ + {0.973f, 1.392f, 2.014f, 1.593f, 3.183f, 0.000f, }, /* (25.904) 26 */ /* from GEWB */ + {1.149f, 1.873f, 0.848f, 1.593f, 3.183f, 0.000f, }, /* (26.829) 27 */ + {0.897f, 1.340f, 2.604f, 1.070f, 1.689f, 2.527f, }, /* 28 */ + {1.149f, 1.873f, 0.848f, 1.319f, 2.288f, 3.687f, }, /* (28.984) 29 */ /* from GEWB */ + {0.897f, 1.340f, 2.604f, 0.939f, 1.454f, 2.083f, }, /* 30 */ + {0.905f, 1.327f, 2.599f, 1.109f, 0.777f, 1.705f, }, + {0.762f, 1.101f, 2.359f, 0.939f, 1.454f, 2.083f, }, + {0.794f, 1.226f, 3.180f, 1.109f, 0.777f, 1.705f, }, /* 33 */ /* mode 6 T WB */ + + {1.629f, 0.000f, 0.000f, 1.191f, 2.211f, 0.000f, }, /* 17 */ + {1.277f, 2.557f, 0.000f, 1.367f, 0.000f, 0.000f, }, /* 18 */ + {1.082f, 1.761f, 3.929f, 1.191f, 2.211f, 0.000f, }, /* 22 */ + {1.018f, 1.535f, 2.808f, 1.191f, 2.211f, 0.000f, }, /* 23 */ + {0.944f, 1.477f, 2.763f, 1.191f, 2.211f, 0.000f, }, /* 24 */ + {0.910f, 1.744f, 3.317f, 1.191f, 2.211f, 0.000f, }, /* 25 */ + {0.920f, 1.648f, 3.068f, 0.969f, 1.683f, 3.953f, }, /* 28 */ + {0.739f, 1.111f, 2.694f, 0.879f, 1.411f, 2.305f, }, /* 31 */ + {0.709f, 1.032f, 2.717f, 0.810f, 1.245f, 1.824f, }, /* 32*/ /* mode 7 T NB*/ + + {0.758f, 1.116f, 1.964f, 2.021f, 0.798f, 1.219f, }, /* 31 */ + {0.699f, 1.034f, 1.978f, 2.021f, 0.798f, 1.219f, }, /* 32 */ /* mode 8 G 16k */ + + {0.726f, 1.050f, 1.845f, 1.355f, 0.860f, 2.205f, }, /* 32 (31.998) */ + {0.677f, 0.997f, 1.669f, 1.355f, 0.860f, 2.205f, }, /* 33 (32.983) mode 9 T16k */ + + {1.646f, 0.000f, 0.000f, 1.254f, 2.459f, 0.000f, }, /* 17 */ + {1.480f, 2.941f, 0.000f, 1.823f, 0.000f, 0.000f, }, /* (17.479) 18 */ + {1.368f, 2.297f, 0.000f, 1.823f, 0.000f, 0.000f, }, /* (18.703) 19 */ + {1.368f, 2.297f, 0.000f, 1.985f, 0.000f, 0.000f, }, /* (19.796) 20 */ + {1.073f, 1.863f, 3.231f, 1.678f, 0.000f, 0.000f, }, /* 21 */ + {1.073f, 1.863f, 3.231f, 1.254f, 2.459f, 0.000f, }, /* 22 */ + {1.056f, 1.577f, 2.467f, 1.806f, 2.990f, 0.000f, }, /* (22.917) 23 */ + {1.130f, 1.818f, 0.836f, 1.985f, 0.000f, 0.000f, }, /* (23.978) 24 */ + {0.951f, 1.492f, 2.496f, 1.255f, 2.971f, 0.000f, }, /* 25 */ + {1.148f, 1.841f, 0.813f, 1.255f, 2.971f, 0.000f, }, /* 26 */ + {1.148f, 0.809f, 1.920f, 1.530f, 2.736f, 0.000f, }, /* (26.953) 27 */ + {1.206f, 0.851f, 2.180f, 1.513f, 3.176f, 0.000f, }, /* (27.992) 28 */ + {0.804f, 1.200f, 1.976f, 1.504f, 3.210f, 0.000f, }, /* (28.992) 29 */ + {1.141f, 0.806f, 1.915f, 1.973f, 1.166f, 3.713f, }, /* (29.976) 30 */ + {1.118f, 0.778f, 2.026f, 1.239f, 2.139f, 3.775f, }, /* (30.963) 31 */ + {0.770f, 1.134f, 1.915f, 1.231f, 2.298f, 3.880f, }, /* (31.995) 32 */ + {1.025f, 0.709f, 1.731f, 1.231f, 2.298f, 3.880f, }, /* (32.996) 33 */ + {0.967f, 0.713f, 1.653f, 1.840f, 1.100f, 2.829f, }, /* (33.994) 34 */ + {0.989f, 0.698f, 1.601f, 1.086f, 1.964f, 2.882f, }, /* (34.954) 35 */ + {0.602f, 0.869f, 1.418f, 1.264f, 0.764f, 2.218f}, /* 36 */ /* mode 10 AUDIO_WB LVQ bitrate 15-36 + 4 + 1*/ + + {0.853f, 1.769f, 4.425f, 1.000f, 1.000f, 1.000f}, /* 17 */ + {1.011f, 1.663f, 4.403f, 1.578f, 0.000f, 0.000f}, /* 21 */ + {1.011f, 1.663f, 4.403f, 1.202f, 2.424f, 0.000f}, /* 22 */ + {0.881f, 1.618f, 4.136f, 1.202f, 2.424f, 0.000f}, /* 25 */ + {0.847f, 1.791f, 4.466f, 1.202f, 2.424f, 0.000f}, /* 26 */ + {0.670f, 1.112f, 2.389f, 1.202f, 2.424f, 0.000f}, /* 28 */ /* mode 11 AUDIO_NB */ + + {1.131f, 1.815f, 0.796f, 1.265f, 2.794f, 0.000f, }, /* 26 */ + {0.570f, 0.804f, 1.197f, 1.162f, 1.949f, 0.728f, }, /* 36*/ /* mode 12 AUDIO_WB 16k bitrate 15-36 + 4 + 1*/ + + {1.045f, 1.586f, 3.754f, 1.669f, 0.000f, 0.000f, }, /* 22 (21.776) */ + {1.100f, 1.604f, 2.295f, 1.334f, 2.423f, 0.000f, }, /* (22.959) 23 */ + {1.091f, 1.752f, 3.164f, 1.407f, 0.000f, 0.000f, }, /* (23.949) 24 */ + {1.091f, 1.752f, 3.164f, 1.346f, 2.525f, 0.000f, }, /* (24.889) 25 */ + {1.091f, 1.752f, 3.164f, 1.089f, 1.684f, 2.523f, }, /* (25.821) 26 */ + {0.940f, 1.349f, 1.903f, 1.199f, 1.790f, 2.564f, }, /* (26.982) 27 */ + {0.880f, 1.280f, 2.824f, 1.099f, 1.735f, 0.000f, }, /* 28 (27.994) */ + {0.831f, 1.215f, 2.927f, 1.089f, 1.708f, 2.479f, }, /* 29 (28.996) */ + {0.870f, 1.327f, 2.906f, 1.066f, 1.719f, 2.676f, }, /* 30 (29.991) */ + {0.765f, 3.115f, 1.818f, 1.123f, 2.309f, 4.775f, }, /* (30.985) 31 */ + {0.772f, 1.122f, 2.351f, 1.446f, 0.944f, 2.072f, }, /* 32 (31.992) */ + {0.701f, 0.977f, 1.738f, 0.947f, 1.453f, 2.082f, }, /* 33 (32.993) */ + {0.719f, 1.021f, 1.701f, 1.119f, 0.794f, 1.696f, }, /* 34 (33.968) */ + {0.839f, 0.640f, 1.522f, 1.118f, 1.697f, 0.796f, }, /* (34.968) 35 */ + {0.839f, 0.640f, 1.522f, 0.961f, 1.469f, 0.707f, }, /* (35.990) 36 */ + {0.640f, 0.884f, 1.732f, 0.755f, 1.090f, 1.548f, }, /* 37 (36.995) */ /* VOICED 16k */ + /* 5sf */ + {1.218f, 0.796f, 2.283f, 1.290f, 3.325f, 0.000f, }, /* 25 (24.980) */ + {1.590f, 0.835f, 4.436f, 1.097f, 3.070f, 0.000f, }, /* 25 (24.974) */ + {0.994f, 2.617f, 0.000f, 1.091f, 2.233f, 3.457f, }, /* 25 (24.852) */ + {0.887f, 1.573f, 3.543f, 1.088f, 1.827f, 3.067f, }, /* 25 (24.994) */ + {0.837f, 1.238f, 1.903f, 1.298f, 2.797f, 0.000f, }, /* 25 (24.996) */ + {1.138f, 2.826f, 0.000f, 1.106f, 2.796f, 4.391f, }, /* 25 (24.671) */ + + /* 4sf */ + {0.941f, 1.931f, 4.473f, 0.681f, 1.266f, 2.328f, }, /* 25 (24.936) */ + {1.352f, 4.332f, 0.000f, 0.820f, 1.545f, 4.175f, }, /* 25 (24.955) */ + {1.343f, 3.607f, 0.000f, 0.859f, 1.453f, 2.590f, }, /* 25 (24.853) */ + {1.208f, 2.740f, 0.000f, 0.759f, 1.240f, 2.182f, }, /* 25 (24.881) */ + {1.123f, 2.736f, 0.000f, 0.874f, 1.498f, 2.586f, }, /* 25 (24.939) */ + {0.919f, 2.471f, 0.000f, 0.615f, 1.072f, 2.096f, }, /* 25 (24.996) */ + {1.548f, 4.508f, 0.000f, 0.825f, 2.178f, 4.305f, }, /* 25 (24.310) */ + {1.217f, 2.898f, 0.000f, 0.737f, 1.217f, 1.930f, }, /* 25 (24.955) */ + {0.976f, 2.190f, 5.716f, 1.506f, 0.642f, 4.211f, }, /* 25 (24.984) */ + {1.107f, 2.595f, 0.000f, 1.302f, 0.604f, 0.880f, }, /* 25 (24.866) */ +}; + +const float scales_p[][MAX_NO_SCALES*2]= /* 2 subvectors 20 modes */ +{ + {1.464f, 2.374f, 0.000f, 0.000f, 0.000f, 0.000f, }, /* 9 (8.464) */ + {1.284f, 2.159f, 0.000f, 0.000f, 0.000f, 0.000f, }, /* (8.910) 9 */ + {1.245f, 2.590f, 0.000f, 0.000f, 0.000f, 0.000f, }, /* (10.659) 11 */ + {1.142f, 1.858f, 2.927f, 0.000f, 0.000f, 0.000f, }, /* (11.925) 12 */ + {1.038f, 1.837f, 3.009f, 0.000f, 0.000f, 0.000f, }, /* (12.997) 13 */ + {1.515f, 0.000f, 0.000f, 1.540f, 0.000f, 0.000f, }, /* (13.640) 14 */ + {1.584f, 0.000f, 0.000f, 1.540f, 0.000f, 0.000f, }, /* (14.733) 15 */ + {1.584f, 0.000f, 0.000f, 1.620f, 0.000f, 0.000f, }, /* (15.826) 16 */ + {1.284f, 2.159f, 0.000f, 1.620f, 0.000f, 0.000f, }, /* (16.823) 17 */ + {1.245f, 2.590f, 0.000f, 1.540f, 0.000f, 0.000f, }, /* (17.479) 18 */ + {1.265f, 2.564f, 0.000f, 1.638f, 0.000f, 0.000f, }, /* 19 (18.572) */ + {1.142f, 1.858f, 2.927f, 1.620f, 0.000f, 0.000f, }, /* (19.838) 20 */ + {1.038f, 1.837f, 3.009f, 1.620f, 0.000f, 0.000f, }, /* (20.910) 21 */ + {0.988f, 1.661f, 2.539f, 1.620f, 0.000f, 0.000f, }, /* (21.776) 22 */ + {1.063f, 1.703f, 2.805f, 1.294f, 2.353f, 0.000f, }, /* 23 (22.959) */ + {1.063f, 1.917f, 3.063f, 1.365f, 0.000f, 0.000f, }, /* 24 (23.949) */ + {0.914f, 1.412f, 2.223f, 1.294f, 2.353f, 0.000f, }, /* 25 (24.992) */ + {0.900f, 1.410f, 2.254f, 1.298f, 2.413f, 0.000f, }, /* (25.718) 26 */ + {0.882f, 1.401f, 2.402f, 1.313f, 2.441f, 0.000f, }, /* 27 (26.902) */ + {1.356f, 0.867f, 2.377f, 1.070f, 1.686f, 2.546f, }, /* 28 (27.996) */ + {0.846f, 1.348f, 2.546f, 1.076f, 1.742f, 2.658f, }, /* 29 (28.937) */ + {0.845f, 1.379f, 2.566f, 1.019f, 1.577f, 2.443f, }, /* 30 (29.954) */ + {0.756f, 1.189f, 2.799f, 1.084f, 1.804f, 2.758f, }, /* 31 (30.978) */ + {0.755f, 1.218f, 2.821f, 0.944f, 1.433f, 1.973f, }, /* 32 (31.978) */ + {0.745f, 1.197f, 2.898f, 1.242f, 0.843f, 1.952f, }, /* (32.988) 33 */ + {0.724f, 1.235f, 2.942f, 1.255f, 0.848f, 2.000f, }, /* 34 (33.975) */ + {0.687f, 1.113f, 2.338f, 0.853f, 1.328f, 1.944f, }, /* 35 (34.975) */ + {0.648f, 1.029f, 1.836f, 0.854f, 1.356f, 1.961f, }, /* 36 (35.889) */ + {0.607f, 0.934f, 1.517f, 0.783f, 1.213f, 1.534f, }, /* (36.996) 37 */ + {0.599f, 0.905f, 1.529f, 0.731f, 1.111f, 1.500f, }, /* (37.993) 38 */ + {0.648f, 1.029f, 1.836f, 0.687f, 1.058f, 1.900f, }, /* 39 (38.488) */ /* V WB*/ + + {1.613f, 0.000f, 0.000f, 0.000f, 0.000f, 0.000f, }, /* 8 (7.913) */ + {1.267f, 2.475f, 0.000f, 1.619f, 0.000f, 0.000f, }, /* 19 (18.572) */ + {1.014f, 1.630f, 2.464f, 1.285f, 2.151f, 0.000f, }, /* 23 (22.773) */ + {0.893f, 1.390f, 2.314f, 1.465f, 2.299f, 0.000f, }, /* 24 (23.999) */ + {0.930f, 1.401f, 2.150f, 1.280f, 2.254f, 0.000f, }, /* 25 (24.992) */ + {0.893f, 1.390f, 2.314f, 1.276f, 2.206f, 2.984f, }, /* 27 (26.962) */ + {0.893f, 1.390f, 2.314f, 1.036f, 1.646f, 2.471f, }, /* 28 (27.835) */ + {0.857f, 1.337f, 2.464f, 1.043f, 1.730f, 2.625f, }, /* 29 (28.937) */ + {0.765f, 1.219f, 1.553f, 1.036f, 1.646f, 2.471f, }, /* 30 (29.969) */ + {0.789f, 1.328f, 1.652f, 1.052f, 1.784f, 2.706f, }, /* 31 (30.952) */ + {0.764f, 1.224f, 1.555f, 0.920f, 1.443f, 2.035f, }, /* 32 (31.978) */ + {0.663f, 1.061f, 1.238f, 1.379f, 0.898f, 1.951f, }, /* 34 (33.992) */ + {0.673f, 1.104f, 1.306f, 1.259f, 0.828f, 1.954f, }, /* 35 (35.000) */ + {0.666f, 1.071f, 1.249f, 0.803f, 1.241f, 1.729f, }, /* 36 (35.980) */ + {0.658f, 1.039f, 1.214f, 0.950f, 0.651f, 1.429f, }, /* 39 (38.512) */ /* V NB*/ + + {1.600f, 0.000f, 0.000f, 1.553f, 0.000f, 0.000f, }, /* 15 (14.733) */ + {1.306f, 2.427f, 0.000f, 1.580f, 0.000f, 0.000f, }, /* (15.730) 16 */ + {1.306f, 2.427f, 0.000f, 1.676f, 0.000f, 0.000f, }, /* (16.823) 17 */ + {1.250f, 2.894f, 0.000f, 1.580f, 0.000f, 0.000f, }, /* (17.479) 18 */ + {1.134f, 1.986f, 3.295f, 1.553f, 0.000f, 0.000f, }, /* 19 (18.745) */ + {1.143f, 2.052f, 3.345f, 1.676f, 0.000f, 0.000f, }, /* (19.838) 20 */ + {1.044f, 2.031f, 3.487f, 1.676f, 0.000f, 0.000f, }, /* (20.910) 21 */ + {0.987f, 1.788f, 2.659f, 1.647f, 0.000f, 0.000f, }, /* 22 (21.776) */ + {0.899f, 1.602f, 2.579f, 1.647f, 0.000f, 0.000f, }, /* 23 (22.791) */ + {0.797f, 1.294f, 2.140f, 1.647f, 0.000f, 0.000f, }, /* 24 (23.999) */ + {0.797f, 1.294f, 2.140f, 1.335f, 2.225f, 0.000f, }, /* 25 (24.996) */ + {0.741f, 1.151f, 1.816f, 1.335f, 2.225f, 0.000f, }, /* 26 (25.934) */ + {0.980f, 1.702f, 0.706f, 1.317f, 2.628f, 0.000f, }, /* (26.887) 27 */ + {0.797f, 1.294f, 2.140f, 1.186f, 1.932f, 0.000f, }, /* 28 (27.969) */ + {0.741f, 1.151f, 1.816f, 1.164f, 1.823f, 2.769f, }, /* 29 (28.996) */ + {0.708f, 1.126f, 1.953f, 1.076f, 1.730f, 2.777f, }, /* 30 (29.988) */ + {0.660f, 1.049f, 1.571f, 1.076f, 1.730f, 2.777f, }, /* 31 (30.931) */ + {0.662f, 1.026f, 1.554f, 1.074f, 1.913f, 3.022f, }, /* 32 (31.987) */ + {0.660f, 1.049f, 1.571f, 1.439f, 0.926f, 2.131f, }, /* 33 (32.982) */ + {0.630f, 0.966f, 1.522f, 1.312f, 0.881f, 2.207f, }, /* 34 (33.967) */ + {0.617f, 0.921f, 1.447f, 1.032f, 1.549f, 0.756f, }, /* 35 (34.994) */ /* G WB*/ + + {1.595f, 0.000f, 0.000f, 1.502f, 0.000f, 0.000f, }, /* 15 (14.733) */ + {1.123f, 1.946f, 3.732f, 1.502f, 0.000f, 0.000f, }, /* 19 (18.792) */ + {1.033f, 2.075f, 4.339f, 1.419f, 2.446f, 0.000f, }, /* 22 (21.985) */ + {0.985f, 1.793f, 5.965f, 1.281f, 2.324f, 0.000f, }, /* 23 (22.773) */ + {0.881f, 1.606f, 6.995f, 1.419f, 2.446f, 0.000f, }, /* 24 (23.932) */ + {0.844f, 1.582f, 7.020f, 1.281f, 2.324f, 0.000f, }, /* 25 (24.955) */ + {0.789f, 1.520f, 7.203f, 1.281f, 2.324f, 0.000f, }, /* 26 (25.991) */ + {0.869f, 1.547f, 6.995f, 1.030f, 1.754f, 3.102f, }, /* 28 (27.979) */ + {0.817f, 1.492f, 7.120f, 1.030f, 1.754f, 3.102f, }, /* 29 (28.878) */ + {0.755f, 1.382f, 7.133f, 1.030f, 1.754f, 3.102f, }, /* 30 (29.954) */ + {0.706f, 1.315f, 7.225f, 1.030f, 1.754f, 3.102f, }, /* 31 (30.893) */ + {0.689f, 1.296f, 7.290f, 1.016f, 1.875f, 3.239f, }, /* 32 (31.963) */ + {0.698f, 1.275f, 7.209f, 0.914f, 1.548f, 2.433f, }, /* 33 (32.997) */ + {0.679f, 1.315f, 7.290f, 1.229f, 1.845f, 0.813f, }, /* 34 (33.986) */ + {0.679f, 1.315f, 7.290f, 1.188f, 0.772f, 1.955f, }, /* 35 (34.952) */ /* G NB*/ + + {1.011f, 1.777f, 2.760f, 1.614f, 0.000f, 0.000f, }, /* 21 */ + {0.964f, 1.580f, 3.996f, 1.729f, 0.000f, 0.000f, }, /* (21.776) 22 */ + {0.878f, 1.440f, 2.289f, 1.729f, 0.000f, 0.000f, }, /* (22.784) 23 */ + {0.852f, 1.643f, 2.429f, 1.729f, 0.000f, 0.000f, }, /* (23.980) 24 */ + {0.853f, 1.382f, 2.066f, 1.245f, 2.679f, 0.000f, }, /* 25 */ + { 1.207f, 0.778f, 2.208f, 1.245f, 2.679f, 0.000f, }, /* 26 */ + {0.804f, 1.354f, 2.647f, 1.408f, 2.615f, 0.000f, }, /* (26.931) 27 */ + {0.782f, 1.254f, 2.799f, 1.378f, 2.708f, 0.000f, }, /* (27.977) 28 */ + { 1.207f, 0.778f, 2.208f, 1.013f, 1.832f, 3.053f, }, /* 29 */ + {1.207f, 0.778f, 2.208f, 1.420f, 0.872f, 2.330f, }, /* 30 */ + {0.683f, 1.016f, 1.788f, 1.126f, 1.886f, 2.924f, }, /* (30.993) 31 */ + {0.627f, 0.917f, 1.448f, 1.126f, 1.886f, 2.924f, }, /* (31.998) 32 */ + {0.658f, 1.028f, 1.557f, 1.482f, 0.975f, 2.147f, }, /* (32.996) 33 */ + {0.794f, 0.580f, 1.331f, 1.482f, 0.975f, 2.147f, }, /* (33.994) 34 */ + {0.823f, 0.592f, 1.323f, 1.346f, 0.895f, 2.308f, }, /* (34.999) 35 */ + {1.098f, 0.738f, 0.555f, 0.869f, 1.290f, 1.862f, }, /* (35.984) 36 */ + {0.758f, 1.111f, 0.550f, 0.871f, 1.367f, 1.906f, }, /* (36.969) 37 */ + {0.551f, 0.766f, 1.116f, 0.791f, 1.201f, 1.663f, }, /* (37.971) 38 */ + {0.551f, 0.766f, 1.116f, 0.963f, 0.697f, 1.323f, }, /* (38.973) 39 */ + {0.525f, 0.770f, 1.073f, 0.815f, 1.237f, 0.567f,}, /* 40 */ /* mode 7 AUDIO_WB 19-40 + 0 + 1 */ + + {1.070f, 1.791f, 3.903f, 1.599f, 0.000f, 0.000f}, /* 21 */ + {0.820f, 1.217f, 2.089f, 1.255f, 2.290f, 0.000f}, /* 25 */ + {0.780f, 1.169f, 2.495f, 1.255f, 2.290f, 0.000f}, /* 26 */ + {1.075f, 0.723f, 2.361f, 1.110f, 1.961f, 3.491f}, /* 30 */ + {0.691f, 1.029f, 2.337f, 1.034f, 1.791f, 4.004f}, /* 31 */ + {0.671f, 1.076f, 2.606f, 0.955f, 1.547f, 2.514f}, /* 32 */ /*mode 8 AUDIO_NB */ + + {1.184f, 0.776f, 2.117f, 1.057f, 1.670f, 0.674f,}, /* 30 */ + {0.946f, 1.448f, 2.723f, 1.394f, 2.645f, 4.581f, }, /* (30.967) 31 */ + {0.948f, 1.454f, 2.723f, 1.970f, 1.174f, 3.484f, }, /* (31.990) 32 */ + {0.885f, 1.406f, 2.763f, 1.970f, 1.174f, 3.484f, }, /* (32.979) 33 */ + {1.245f, 0.842f, 2.378f, 1.999f, 1.168f, 3.682f, }, /* (33.989) 34 */ + {0.870f, 1.346f, 2.814f, 1.744f, 1.058f, 2.897f, }, /* (34.991) 35 */ + {0.827f, 1.219f, 2.176f, 1.588f, 2.600f, 0.995f, }, /* (35.990) 36 */ + {0.817f, 1.186f, 1.992f, 1.593f, 0.974f, 2.619f, }, /* (36.986) 37 */ + {0.822f, 1.205f, 2.099f, 1.464f, 0.904f, 2.398f, }, /* (37.982) 38 */ + {0.822f, 1.205f, 2.099f, 2.053f, 0.837f, 1.359f, }, /* (38.995) 39 */ + {0.521f, 0.747f, 1.033f, 0.796f, 1.333f, 0.542f,}, /* 40 */ /* mode 9 AUDIO_WB 16k 30-40 + 5 MA pred for WB2 (AV: not used?)*/ + + {1.679f, 0.000f, 0.000f, 1.282f, 2.471f, 0.000f, }, /* 17 (16.823) */ + {1.088f, 1.849f, 3.195f, 1.687f, 0.000f, 0.000f, }, /* 21 (20.910) */ + {1.088f, 1.849f, 3.195f, 1.282f, 2.471f, 0.000f, }, /* 22 (21.907) */ + {1.126f, 1.689f, 0.790f, 1.282f, 2.471f, 0.000f, }, /* 25 (24.863) */ + {0.930f, 1.382f, 0.682f, 1.282f, 2.471f, 0.000f, }, /* 26 (25.921) */ + {1.115f, 0.794f, 1.852f, 1.281f, 3.033f, 0.000f, }, /* 27 (26.837) */ + {0.840f, 1.376f, 0.623f, 0.800f, 1.416f, 4.260f, }, /* 36 (35.998) */ /* INACTIVE NB */ + + {0.801f, 1.148f, 1.802f, 0.000f, 0.000f, 0.000f, }, /* 17 (16.932) */ + {1.344f, 2.627f, 0.000f, 1.574f, 0.000f, 0.000f, }, /* (17.479) 18 */ + {1.260f, 2.045f, 0.000f, 1.574f, 0.000f, 0.000f, }, /* (18.703) 19 */ + {1.260f, 2.045f, 0.000f, 1.675f, 0.000f, 0.000f, }, /* (19.796) 20 */ + {1.089f, 1.812f, 3.172f, 1.677f, 0.000f, 0.000f, }, /* 21 (20.910) */ + {1.089f, 1.904f, 3.221f, 1.521f, 2.635f, 0.000f, }, /* 22 (21.985) */ + {0.963f, 1.440f, 2.117f, 1.675f, 0.000f, 0.000f, }, /* (22.934) 23 */ + {0.963f, 1.440f, 2.117f, 1.302f, 2.410f, 0.000f, }, /* (23.931) 24 */ + {0.845f, 1.212f, 1.934f, 1.313f, 2.419f, 0.000f, }, /* 25 (24.845) */ + {0.779f, 1.095f, 1.700f, 1.313f, 2.419f, 0.000f, }, /* 26 (25.999) */ + {0.723f, 1.015f, 1.664f, 1.313f, 2.419f, 0.000f, }, /* 27 (26.981) */ + {1.009f, 1.667f, 0.752f, 1.307f, 3.021f, 0.000f, }, /* (27.988) 28 */ + {1.005f, 1.647f, 0.749f, 1.064f, 1.871f, 3.348f, }, /* (28.936) 29 */ + {0.895f, 1.490f, 0.682f, 1.064f, 1.871f, 3.348f, }, /* (29.855) 30 */ + {0.787f, 1.272f, 0.608f, 1.064f, 1.871f, 3.348f, }, /* (30.968) 31 */ + {0.861f, 0.648f, 1.459f, 1.064f, 1.871f, 3.348f, }, /* (31.943) 32 */ + {0.829f, 0.631f, 1.337f, 1.059f, 2.032f, 3.428f, }, /* (32.999) 33 */ + {0.861f, 0.648f, 1.459f, 1.541f, 0.920f, 2.511f, }, /* (33.994) 34 */ + {0.848f, 0.633f, 1.358f, 1.408f, 0.879f, 2.711f, }, /* (34.989) 35 */ + {0.893f, 0.652f, 1.438f, 1.076f, 0.720f, 1.794f, }, /* 36 (35.929) */ /* INACTIVE WB*/ + + {1.359f, 2.306f, 0.000f, 1.669f, 0.000f, 0.000f, }, /* 17 (16.823) */ + {1.077f, 1.927f, 3.546f, 1.669f, 0.000f, 0.000f, }, /* 21 (20.910) */ + {1.077f, 2.032f, 3.578f, 1.429f, 2.711f, 0.000f, }, /* 22 (21.985) */ + {0.833f, 1.253f, 2.105f, 1.283f, 2.556f, 0.000f, }, /* 25 (24.845) */ + {0.776f, 1.152f, 1.858f, 1.283f, 2.556f, 0.000f, }, /* 26 (25.934) */ + {0.719f, 1.066f, 1.732f, 1.283f, 2.556f, 0.000f, }, /* 27 (26.914) */ + {0.941f, 0.651f, 1.565f, 0.722f, 1.190f, 1.940f, }, /* 36 (35.915) */ /* INACTIVE 16k*/ + + {1.292f, 2.479f, 0.000f, 1.541f, 0.000f, 0.000f, }, /* 18 (17.479) */ + {1.202f, 1.903f, 0.000f, 1.541f, 0.000f, 0.000f, }, /* 19 (18.703) */ + {1.028f, 1.641f, 2.455f, 1.648f, 0.000f, 0.000f, }, /* 22 (21.776) */ + {1.247f, 0.878f, 2.329f, 1.648f, 0.000f, 0.000f, }, /* 23 (22.791) */ + {0.863f, 1.358f, 2.522f, 1.648f, 0.000f, 0.000f, }, /* 24 (23.999) */ + {0.817f, 1.222f, 2.010f, 1.074f, 1.785f, 2.733f, }, /* 29 (28.966) */ + {0.815f, 0.612f, 1.281f, 1.055f, 1.724f, 2.952f, }, /* 32 (31.990) */ /* UNVOICED NB */ + {1.545f, 0.000f, 0.000f, 1.548f, 0.000f, 0.000f, }, /* 14 (13.640) */ + {1.640f, 0.000f, 0.000f, 1.548f, 0.000f, 0.000f, }, /* 15 (14.733) */ + {1.330f, 0.000f, 0.000f, 1.597f, 0.000f, 0.000f, }, /* (15.826) 16 */ + {1.235f, 2.316f, 0.000f, 1.597f, 0.000f, 0.000f, }, /* (16.376) 17 */ + {1.287f, 2.749f, 0.000f, 1.548f, 0.000f, 0.000f, }, /* 18 (17.479) */ + {1.287f, 2.749f, 0.000f, 1.654f, 0.000f, 0.000f, }, /* 19 (18.572) */ + {1.190f, 2.026f, 0.000f, 1.654f, 0.000f, 0.000f, }, /* 20 (19.796) */ + {0.952f, 1.674f, 2.762f, 1.597f, 0.000f, 0.000f, }, /* (20.910) 21 */ + {0.918f, 1.571f, 3.210f, 1.597f, 0.000f, 0.000f, }, /* (21.776) 22 */ + {1.256f, 0.792f, 2.078f, 1.597f, 0.000f, 0.000f, }, /* (22.784) 23 */ + {0.757f, 1.203f, 1.874f, 1.597f, 0.000f, 0.000f, }, /* (23.999) 24 */ + {0.931f, 1.458f, 2.450f, 1.294f, 2.742f, 0.000f, }, /* 25 (24.992) */ + {1.117f, 0.736f, 1.875f, 1.251f, 2.567f, 0.000f, }, /* (25.993) 26 */ + {0.772f, 1.236f, 1.921f, 1.251f, 2.567f, 0.000f, }, /* (26.883) 27 */ + {0.877f, 1.396f, 2.737f, 1.081f, 1.816f, 3.360f, }, /* 28 (27.996) */ /* UNVOICED WB*/ + + {1.131f, 1.636f, 0.000f, 1.371f, 0.000f, 0.000f, }, /* 24 (23.818) */ + {0.892f, 1.592f, 3.424f, 1.298f, 3.206f, 0.000f, }, /* (24.961) 25 */ + {0.875f, 1.547f, 3.459f, 1.285f, 2.899f, 4.150f, }, /* (25.964) 26 */ + {0.846f, 1.650f, 3.307f, 1.275f, 2.446f, 4.005f, }, /* (26.946) 27 */ + {0.808f, 3.069f, 1.716f, 1.275f, 2.446f, 4.005f, }, /* (27.856) 28 */ + {0.765f, 3.128f, 1.823f, 1.275f, 2.446f, 4.005f, }, /* (28.977) 29 */ + {0.934f, 1.277f, 0.728f,1.157f, 1.697f, 0.000f, }, /* 30 (29.992) */ + {0.833f, 1.162f, 0.658f,1.151f, 1.687f, 0.000f, }, /* 31 (30.998) */ + {0.751f, 1.032f, 0.598f,1.151f, 1.687f, 0.000f, }, /* 32 (31.987) */ + {0.759f, 3.138f, 1.845f, 0.922f, 1.508f, 3.110f, }, /* (32.975) 33 */ + {0.709f, 1.005f, 0.570f, 1.060f, 1.772f, 2.719f, }, /* 34 (33.994) */ + {0.746f, 1.001f, 0.601f,1.004f, 1.803f, 2.892f, }, /* 35 (35.000) */ + {0.743f, 1.000f, 0.599f,0.936f, 1.861f, 2.874f, }, /* 36 (35.994) */ + {0.750f, 3.170f, 1.925f, 0.737f, 1.423f, 2.687f, } , /* (36.977) 37 */ + {0.750f, 3.170f, 1.925f, 0.659f, 1.059f, 1.975f, }, /* (37.984) 38 */ + {0.775f, 0.614f, 1.037f, 0.796f, 1.304f, 1.905f, }, /* 39 (38.301) */ /* VOICED 16k */ + + {0.894f, 1.339f, 2.549f, 1.308f, 2.601f, 0.000f, }, /* 26 (25.917) */ + {0.832f, 1.254f, 1.937f, 1.307f, 2.614f, 0.000f, }, /* (26.887) 27 */ + {0.832f, 1.232f, 1.916f, 1.158f, 1.977f, 0.000f, }, /* (27.974) 28 */ + {0.825f, 1.260f, 1.993f, 1.023f, 1.739f, 2.796f, }, /* (28.910) 29 */ + {0.750f, 1.114f, 1.563f, 1.045f, 1.802f, 2.681f, }, /* (29.976) 30 */ + {0.692f, 1.000f, 1.431f, 1.023f, 1.739f, 2.796f, }, /* (30.956) 31 */ + {0.720f, 1.012f, 1.598f, 1.512f, 0.926f, 2.137f, }, /* 32 (31.980) */ + {0.681f, 0.973f, 1.649f, 1.381f, 0.876f, 2.129f, }, /* 33 (32.990) */ + {0.684f, 0.964f, 1.640f, 1.168f, 1.776f, 0.787f, }, /* 34 (33.974) */ + {0.668f, 0.935f, 1.551f, 1.016f, 1.518f, 0.712f, }, /* 35 (34.989) */ + {0.659f, 0.911f, 1.425f, 1.337f, 0.889f, 0.642f, }, /* 36 (35.988) */ + {0.659f, 0.911f, 1.425f, 0.839f, 1.287f, 0.607f, }, /* 37 (36.989) */ /* GENERIC 16k*/ + + {1.633f, 0.000f, 0.000f, 1.687f, 0.000f, 0.000f, }, /* 16 (15.826) */ + {1.691f, 0.000f, 0.000f, 1.674f, 0.000f, 0.000f, }, /* (15.826) 16 */ + {1.328f, 2.564f, 0.000f, 1.553f, 0.000f, 0.000f, }, /* (17.479) 18 */ + {1.250f, 1.992f, 0.000f, 1.553f, 0.000f, 0.000f, }, /* (18.703) 19 */ + {1.250f, 1.992f, 0.000f, 1.674f, 0.000f, 0.000f, }, /* (19.796) 20 */ + {1.076f, 1.790f, 2.942f, 1.687f, 0.000f, 0.000f, }, /* 21 (20.910) */ + {1.066f, 1.683f, 4.077f, 1.674f, 0.000f, 0.000f, }, /* (21.776) 22 */ + {1.280f, 0.911f, 2.477f, 1.674f, 0.000f, 0.000f, }, /* (22.791) 23 */ + {0.834f, 1.229f, 1.890f, 1.687f, 0.000f, 0.000f, }, /* 24 (23.999) */ + {0.938f, 1.404f, 2.153f, 1.306f, 2.630f, 0.000f, }, /* 25 (24.992) */ + {1.340f, 0.886f, 2.320f, 1.306f, 2.630f, 0.000f, }, /* 26 (25.917) */ + {0.833f, 1.250f, 1.908f, 1.306f, 2.630f, 0.000f, }, /* 27 (26.883) */ + {0.833f, 1.213f, 1.873f, 1.125f, 1.839f, 2.819f, }, /* 28 (27.901) */ + {0.854f, 1.267f, 1.828f, 1.044f, 1.760f, 2.882f, }, /* (28.937) 29 */ + {0.765f, 1.162f, 1.690f, 1.024f, 1.738f, 2.838f, }, /* 30 (29.916) */ + {0.725f, 1.050f, 1.791f, 1.480f, 0.922f, 3.104f, }, /* 31 (30.993) */ + {0.712f, 1.012f, 1.549f, 1.494f, 0.903f, 3.364f, }, /* 32 (31.980) */ + {0.659f, 0.927f, 1.357f, 1.494f, 0.903f, 3.364f, }, /* 33 (32.958) */ + {0.822f, 0.614f, 1.288f, 0.910f, 1.509f, 2.255f, }, /* 34 (33.987) */ + {0.841f, 0.624f, 1.278f, 1.161f, 0.762f, 1.808f, }, /* 35 (34.994) */ + {0.838f, 0.622f, 1.266f, 1.080f, 0.711f, 1.710f, }, /* 36 (35.968) */ + {0.832f, 0.619f, 1.275f, 0.938f, 1.430f, 0.644f, }, /* 37 (36.971) */ /* GENERIC 12.8k MA*/ + + {0.884f, 1.349f, 2.570f, 1.314f, 2.609f, 0.000f, }, /* 26 (25.917) */ + {0.981f, 1.473f, 2.784f, 1.690f, 3.342f, 0.000f, }, /* (26.981) 27 */ + {0.965f, 1.514f, 2.686f, 1.409f, 2.485f, 3.946f, }, /* (27.989) 28 */ + {0.976f, 1.457f, 2.663f, 2.151f, 1.271f, 4.176f, }, /* (28.976) 29 */ + {0.991f, 1.504f, 3.086f, 2.486f, 1.315f, 4.530f, }, /* (29.968) 30 */ + {0.946f, 1.448f, 2.723f, 1.394f, 2.645f, 4.581f, }, /* (30.967) 31 */ + {0.711f, 1.018f, 1.615f, 1.482f, 0.921f, 3.431f, }, /* 32 (31.980) */ + {0.679f, 0.974f, 1.659f, 0.948f, 1.549f, 3.448f, }, /* 33 (32.995) */ + {0.831f, 0.618f, 1.481f, 0.933f, 1.514f, 2.310f, }, /* 34 (33.993) */ + {0.816f, 0.610f, 1.402f, 1.426f, 0.877f, 2.265f, }, /* 35 (34.992) */ + {0.787f, 1.257f, 0.596f, 0.859f, 1.447f, 2.431f, }, /* 36 (35.997) */ + {0.787f, 1.257f, 0.596f, 1.106f, 0.735f, 1.659f, }, /* 37 (36.961) */ /* AUDIO 16k */ +}; + +/* An 16-by-34 matrix in Scale = 20.48f */ +const float sigma_MSLVQ[][16] = +{ + { 1.0f }, /* IA NB */ + { 1.0f }, /* UV NB */ + {41.8457031f, 43.9453125f, 62.5976563f, 72.3632813f, 78.7597656f, 82.4707031f, 85.4492188f, 86.5722656f, 86.6210938f, 84.9121094f, 85.2050781f, 105.5664063f, 127.8320313f, 68.6523438f, 25.7324219f, 16.9433594f }, /* V NB */ + {48.9257813f, 50.5859375f, 71.0449219f, 72.4609375f, 74.5117188f, 77.8808594f, 79.5898438f, 80.8105469f, 79.9804688f, 74.5117188f, 70.0683594f, 88.7207031f, 119.1406250f, 102.0019531f, 37.1093750f, 25.0976563f }, /* G NB */ + {48.2421875f, 48.0468750f, 68.7500000f, 76.9531250f, 80.9570313f, 85.1562500f, 89.0625000f, 91.8457031f, 90.4296875f, 85.2050781f, 81.5917969f, 106.2988281f, 133.6425781f, 84.3750000f, 34.7656250f, 26.6113281f }, /* T NB */ + {85.5957031f, 82.9101563f, 99.5605469f, 105.9570313f, 106.6406250f, 106.8847656f, 101.6601563f, 99.5605469f, 97.7050781f, 97.0703125f, 97.1191406f, 117.8710938f, 128.1738281f, 153.9550781f, 33.1542969f, 14.5996094f },/* AU NB*/ + { 1.0f }, + { 1.0f }, /* UV WB*/ + {44.2382813f, 52.1972656f, 85.7910156f, 98.6816406f, 101.7089844f, 107.2753906f, 106.9824219f, 112.0605469f, 118.8476563f, 126.3183594f, 125.4882813f, 126.8554688f, 136.3281250f, 136.7675781f, 146.9726563f, 129.7851563f }, /* V WB */ + {61.8164063f, 69.8730469f, 94.6289063f, 97.0214844f, 96.0449219f, 101.3671875f, 100.5371094f, 104.3945313f, 108.5937500f, 106.9824219f, 107.9101563f, 112.8417969f, 120.7519531f, 120.6542969f, 122.0214844f, 119.6289063f }, /* G WB */ + {56.8847656f, 56.9335938f, 86.7187500f, 100.1953125f, 101.9042969f, 108.5449219f, 113.4765625f, 117.9199219f, 124.1699219f, 122.1679688f, 126.3183594f, 137.4023438f, 153.9550781f, 158.8867188f, 161.9140625f, 155.9570313f }, /* T WB */ + {84.8632813f, 88.6230469f, 112.0605469f, 118.3593750f, 123.3886719f, 121.0937500f, 115.4785156f, 118.7011719f, 118.5058594f, 119.0429688f, 123.9257813f, 127.6855469f, 138.5742188f, 125.2441406f, 118.9941406f, 109.0332031f },/* AU WB */ + { 1.0f }, + { 1.0f }, + {75.2441406f, 84.3261719f, 110.6933594f, 125.0000000f, 134.0332031f, 140.3808594f, 146.6308594f, 159.5214844f, 161.3281250f, 173.9746094f, 186.9628906f, 190.9667969f, 196.2402344f, 181.9335938f, 177.9785156f, 187.2070313f }, /* VO 16k */ + {89.6972656f, 92.9687500f, 122.0703125f, 129.0527344f, 130.4687500f, 128.3691406f, 132.5683594f, 139.2578125f, 137.9882813f, 139.9902344f, 152.8320313f, 157.3730469f, 172.4121094f, 179.4433594f, 147.9980469f, 194.1894531f }, /* G 16k */ + {90.3320313f, 108.3496094f, 118.7500000f, 125.7324219f, 135.7421875f, 137.9882813f, 143.0175781f, 145.1660156f, 145.8007813f, 155.1757813f, 171.2402344f, 176.1230469f, 165.4785156f, 161.3769531f, 148.6816406f, 174.4140625f }, /* T 16k */ + {103.1250000f, 112.3046875f, 142.3339844f, 150.6347656f, 150.0488281f, 145.8496094f, 149.3164063f, 145.8496094f, 153.5156250f, 157.3242188f, 175.0000000f, 170.9960938f, 157.4707031f, 168.1152344f, 156.5917969f, 229.0527344f },/* AU 16k */ + {87.5488281f, 116.4062500f, 102.3925781f, 103.1738281f, 100.8789063f, 95.2636719f, 101.7578125f, 110.5468750f, 122.2167969f, 115.2343750f, 107.2753906f, 108.8378906f, 101.7089844f, 111.5722656f, 111.6699219f, 155.9570313f }, + {160.5957031f, 122.6074219f, 117.4804688f, 129.7363281f, 130.9570313f, 133.8378906f, 139.1601563f, 159.9121094f, 168.0664063f, 161.3281250f, 141.9433594f, 142.1386719f, 132.0312500f, 129.8828125f, 122.9980469f, 160.9863281f }, + {53.2226563f, 105.1757813f, 133.9355469f, 143.3593750f, 158.2031250f, 168.1640625f, 160.5957031f, 164.4042969f, 173.4863281f, 182.0800781f, 170.0683594f, 165.3320313f, 128.1738281f, 96.5332031f, 91.9433594f, 93.7988281f }, + {69.5312500f, 169.0429688f, 118.9453125f, 104.6875000f, 100.7812500f, 98.3398438f, 98.8281250f, 95.9472656f, 97.8027344f, 97.6562500f, 95.8496094f, 99.8046875f, 94.3847656f, 106.5917969f, 117.1386719f, 144.7265625f }, + {136.1816406f, 130.5175781f, 130.9082031f, 133.3007813f, 131.3476563f, 129.1992188f, 133.8867188f, 166.1621094f, 197.0703125f, 281.9824219f, 305.7617188f, 255.8105469f, 392.7734375f, 336.6699219f, 135.2050781f, 96.7773438f }, + {123.0957031f, 119.6777344f, 126.3183594f, 119.5800781f, 117.3339844f, 108.4472656f, 107.9101563f, 112.2070313f, 148.2910156f, 153.9550781f, 127.6367188f, 129.9316406f, 132.5683594f, 149.3164063f, 144.6777344f, 244.6289063f }, + {92.3339844f, 97.5097656f, 94.0917969f, 90.2832031f, 94.1894531f, 95.8007813f, 92.8710938f, 86.4746094f, 83.8867188f, 74.1699219f, 70.8984375f, 69.3847656f, 71.5332031f, 167.2851563f, 71.8750000f, 21.5820313f }, + {44.0429688f, 73.9257813f, 140.6738281f, 121.8750000f, 129.5410156f, 127.3437500f, 115.7226563f, 104.8339844f, 106.2500000f, 110.0097656f, 125.0000000f, 107.5195313f, 85.6445313f, 79.2968750f, 69.9218750f, 55.9570313f }, + {106.4453125f, 99.4140625f, 95.6542969f, 92.7246094f, 94.3359375f, 92.0898438f, 83.6914063f, 84.7167969f, 87.1582031f, 101.6113281f, 91.1621094f, 75.3417969f, 73.0957031f, 71.5332031f, 68.0175781f, 63.7207031f }, + {43.3105469f, 125.5371094f, 107.4707031f, 85.4003906f, 83.1542969f, 80.7617188f, 78.8574219f, 80.0781250f, 80.1269531f, 88.0859375f, 93.2128906f, 81.3964844f, 74.8535156f, 73.0957031f, 65.8203125f, 59.3750000f }, + {149.6093750f, 127.3925781f, 117.1875000f, 111.9628906f, 113.4277344f, 113.8671875f, 107.8125000f, 97.9492188f, 100.7324219f, 113.5253906f, 167.9687500f, 203.4667969f, 154.9804688f, 119.1894531f, 107.1289063f, 104.8828125f }, + {59.5214844f, 86.2792969f, 106.0058594f, 113.7207031f, 134.4726563f, 120.9960938f, 120.4589844f, 100.4882813f, 98.5839844f, 100.0488281f, 132.3730469f, 191.8457031f, 194.7753906f, 77.8320313f, 70.0195313f, 41.9433594f }, + {88.2812500f, 92.3828125f, 92.1386719f, 93.5546875f, 97.6074219f, 92.7734375f, 89.0625000f, 87.2070313f, 88.8671875f, 94.1406250f, 121.5820313f, 121.9238281f, 116.7968750f, 122.1191406f, 164.5996094f, 140.4296875f }, + {86.2792969f, 92.8710938f, 83.5937500f, 86.0839844f, 95.8984375f, 95.2148438f, 90.5273438f, 86.5234375f, 82.1289063f, 81.3964844f, 77.9785156f, 89.4042969f, 143.7011719f, 168.3593750f, 41.5039063f, 27.6855469f }, + {97.1679688f, 101.0253906f, 104.3945313f, 110.4003906f, 108.7890625f, 107.4707031f, 97.8515625f, 92.6757813f, 79.1503906f, 81.6406250f, 77.1972656f, 108.8867188f, 212.2070313f, 198.8281250f, 47.4609375f, 35.3515625f }, + {74.8535156f, 97.3632813f, 100.1464844f, 91.6992188f, 90.3808594f, 89.6484375f, 83.2031250f, 84.0820313f, 81.9335938f, 96.4355469f, 110.9863281f, 92.6757813f, 83.4960938f, 82.1289063f, 77.8808594f, 70.8984375f} +}; + +/* An 16-by-34 matrix in Scale = 20.48f */ +const float inv_sigma_MSLVQ[][16] = +{ + {1.0f }, /* IA NB */ + {1.0f }, /* UV NB */ + {0.0238973f, 0.0227556f, 0.0159750f, 0.0138192f, 0.0126968f, 0.0121255f, 0.0117029f, 0.0115510f, 0.0115445f, 0.0117769f, 0.0117364f, 0.0094727f, 0.0078228f, 0.0145661f, 0.0388615f, 0.0590202f }, /* V NB */ + {0.0204391f, 0.0197683f, 0.0140756f, 0.0138005f, 0.0134207f, 0.0128401f, 0.0125644f, 0.0123746f, 0.0125031f, 0.0134207f, 0.0142718f, 0.0112713f, 0.0083934f, 0.0098037f, 0.0269474f, 0.0398444f }, /* G NB */ + {0.0207287f, 0.0208130f, 0.0145455f, 0.0129949f, 0.0123522f, 0.0117431f, 0.0112281f, 0.0108878f, 0.0110583f, 0.0117364f, 0.0122561f, 0.0094074f, 0.0074826f, 0.0118519f, 0.0287640f, 0.0375780f }, /* T NB */ + {0.0116828f, 0.0120612f, 0.0100441f, 0.0094378f, 0.0093773f, 0.0093559f, 0.0098367f, 0.0100441f, 0.0102349f, 0.0103018f, 0.0102966f, 0.0084838f, 0.0078019f, 0.0064954f, 0.0301620f, 0.0684950f }, /* AU NB */ + {1.0f }, + {1.0f }, /* UV WB */ + {0.0226049f, 0.0191581f, 0.0116562f, 0.0101336f, 0.0098320f, 0.0093218f, 0.0093473f, 0.0089237f, 0.0084141f, 0.0079165f, 0.0079689f, 0.0078830f, 0.0073352f, 0.0073117f, 0.0068040f, 0.0077050f }, /* V WB */ + {0.0161769f, 0.0143117f, 0.0105676f, 0.0103070f, 0.0104118f, 0.0098651f, 0.0099466f, 0.0095790f, 0.0092086f, 0.0093473f, 0.0092670f, 0.0088620f, 0.0082814f, 0.0082881f, 0.0081953f, 0.0083592f }, /* G WB */ + {0.0175794f, 0.0175643f, 0.0115315f, 0.0099805f, 0.0098131f, 0.0092128f, 0.0088124f, 0.0084803f, 0.0080535f, 0.0081855f, 0.0079165f, 0.0072779f, 0.0064954f, 0.0062938f, 0.0061761f, 0.0064120f }, /* T WB */ + {0.0117837f, 0.0112837f, 0.0089237f, 0.0084488f, 0.0081045f, 0.0082581f, 0.0086596f, 0.0084245f, 0.0084384f, 0.0084003f, 0.0080693f, 0.0078317f, 0.0072163f, 0.0079844f, 0.0084038f, 0.0091715f }, /* AU WB */ + {1.0f }, + {1.0f }, + {0.0132901f, 0.0118587f, 0.0090340f, 0.0080000f, 0.0074608f, 0.0071235f, 0.0068198f, 0.0062687f, 0.0061985f, 0.0057480f, 0.0053487f, 0.0052365f, 0.0050958f, 0.0054965f, 0.0056187f, 0.0053417f }, /* V 16k */ + {0.0111486f, 0.0107563f, 0.0081920f, 0.0077488f, 0.0076647f, 0.0077900f, 0.0075433f, 0.0071809f, 0.0072470f, 0.0071434f, 0.0065431f, 0.0063543f, 0.0058001f, 0.0055728f, 0.0067568f, 0.0051496f }, /* G 16k */ + {0.0110703f, 0.0092294f, 0.0084211f, 0.0079534f, 0.0073669f, 0.0072470f, 0.0069921f, 0.0068887f, 0.0068587f, 0.0064443f, 0.0058397f, 0.0056778f, 0.0060431f, 0.0061967f, 0.0067258f, 0.0057335f }, /* T 16k */ + {0.0096970f, 0.0089043f, 0.0070257f, 0.0066386f, 0.0066645f, 0.0068564f, 0.0066972f, 0.0068564f, 0.0065140f, 0.0063563f, 0.0057143f, 0.0058481f, 0.0063504f, 0.0059483f, 0.0063860f, 0.0043658f }, /* AU 16k */ + {0.0114222f, 0.0085906f, 0.0097663f, 0.0096924f, 0.0099129f, 0.0104972f, 0.0098273f, 0.0090459f, 0.0081822f, 0.0086780f, 0.0093218f, 0.0091880f, 0.0098320f, 0.0089628f, 0.0089550f, 0.0064120f }, + {0.0062268f, 0.0081561f, 0.0085121f, 0.0077079f, 0.0076361f, 0.0074717f, 0.0071860f, 0.0062534f, 0.0059500f, 0.0061985f, 0.0070451f, 0.0070354f, 0.0075740f, 0.0076992f, 0.0081302f, 0.0062117f }, + {0.0187890f, 0.0095079f, 0.0074663f, 0.0069755f, 0.0063210f, 0.0059466f, 0.0062268f, 0.0060826f, 0.0057641f, 0.0054921f, 0.0058800f, 0.0060484f, 0.0078019f, 0.0103591f, 0.0108763f, 0.0106611f }, + {0.0143820f, 0.0059157f, 0.0084072f, 0.0095522f, 0.0099225f, 0.0101688f, 0.0101186f, 0.0104224f, 0.0102247f, 0.0102400f, 0.0104330f, 0.0100196f, 0.0105949f, 0.0093816f, 0.0085369f, 0.0069096f }, + {0.0073431f, 0.0076618f, 0.0076389f, 0.0075018f, 0.0076134f, 0.0077400f, 0.0074690f, 0.0060182f, 0.0050743f, 0.0035463f, 0.0032705f, 0.0039091f, 0.0025460f, 0.0029703f, 0.0073962f, 0.0103330f }, + {0.0081238f, 0.0083558f, 0.0079165f, 0.0083626f, 0.0085227f, 0.0092211f, 0.0092670f, 0.0089121f, 0.0067435f, 0.0064954f, 0.0078347f, 0.0076964f, 0.0075433f, 0.0066972f, 0.0069119f, 0.0040878f }, + {0.0108302f, 0.0102554f, 0.0106279f, 0.0110763f, 0.0106169f, 0.0104383f, 0.0107676f, 0.0115641f, 0.0119208f, 0.0134826f, 0.0141047f, 0.0144124f, 0.0139795f, 0.0059778f, 0.0139130f, 0.0463348f }, + {0.0227051f, 0.0135271f, 0.0071086f, 0.0082051f, 0.0077196f, 0.0078528f, 0.0086414f, 0.0095389f, 0.0094118f, 0.0090901f, 0.0080000f, 0.0093006f, 0.0116762f, 0.0126108f, 0.0143017f, 0.0178709f }, + {0.0093945f, 0.0100589f, 0.0104543f, 0.0107846f, 0.0106004f, 0.0108590f, 0.0119487f, 0.0118040f, 0.0114734f, 0.0098414f, 0.0109695f, 0.0132728f, 0.0136807f, 0.0139795f, 0.0147021f, 0.0156935f }, + {0.0230891f, 0.0079658f, 0.0093049f, 0.0117095f, 0.0120258f, 0.0123821f, 0.0126811f, 0.0124878f, 0.0124802f, 0.0113525f, 0.0107281f, 0.0122855f, 0.0133594f, 0.0136807f, 0.0151929f, 0.0168421f }, + {0.0066841f, 0.0078498f, 0.0085333f, 0.0089315f, 0.0088162f, 0.0087822f, 0.0092754f, 0.0102094f, 0.0099273f, 0.0088086f, 0.0059535f, 0.0049148f, 0.0064524f, 0.0083900f, 0.0093345f, 0.0095345f }, + {0.0168007f, 0.0115903f, 0.0094334f, 0.0087935f, 0.0074365f, 0.0082647f, 0.0083016f, 0.0099514f, 0.0101436f, 0.0099951f, 0.0075544f, 0.0052125f, 0.0051341f, 0.0128482f, 0.0142817f, 0.0238417f }, + {0.0113274f, 0.0108245f, 0.0108532f, 0.0106889f, 0.0102451f, 0.0107789f, 0.0112281f, 0.0114670f, 0.0112527f, 0.0106224f, 0.0082249f, 0.0082018f, 0.0085619f, 0.0081887f, 0.0060753f, 0.0071210f }, + {0.0115903f, 0.0107676f, 0.0119626f, 0.0116166f, 0.0104277f, 0.0105026f, 0.0110464f, 0.0115576f, 0.0121760f, 0.0122855f, 0.0128240f, 0.0111851f, 0.0069589f, 0.0059397f, 0.0240941f, 0.0361199f }, + {0.0102915f, 0.0098985f, 0.0095790f, 0.0090579f, 0.0091921f, 0.0093049f, 0.0102196f, 0.0107903f, 0.0126342f, 0.0122488f, 0.0129538f, 0.0091839f, 0.0047124f, 0.0050295f, 0.0210700f, 0.0282873f }, + {0.0133594f, 0.0102708f, 0.0099854f, 0.0109052f, 0.0110643f, 0.0111547f, 0.0120188f, 0.0118931f, 0.0122050f, 0.0103696f, 0.0090101f, 0.0107903f, 0.0119766f, 0.0121760f, 0.0128401f, 0.0141047f} +}; + +/* An 16-by-19 matrix in Scale = 20.48f */ +const float sigma_p[][16] = +{ + {59.3261719f, 63.9160156f, 69.7753906f, 66.3574219f, 67.3339844f, 68.5546875f, 66.6015625f, 66.0156250f, 66.0156250f, 67.9687500f, 68.2617188f, 84.3261719f, 96.5820313f, 118.6523438f, 44.0917969f, 43.1152344f }, /* IA NB */ + {51.2207031f, 66.6015625f, 69.3847656f, 68.6035156f, 67.9199219f, 69.6289063f, 69.6777344f, 69.5800781f, 52.5878906f, 64.9902344f, 65.3808594f, 68.7500000f, 71.4355469f, 77.0507813f, 77.9296875f, 80.3222656f }, /* U NB */ + {32.7148438f, 34.9121094f, 47.0703125f, 55.6152344f, 60.1562500f, 68.3105469f, 71.8261719f, 72.7539063f, 73.8281250f, 70.8984375f, 69.4335938f, 77.1972656f, 95.8007813f, 74.3164063f, 20.8984375f, 10.9375000f }, /* V NB */ + {53.8085938f, 61.3281250f, 78.1738281f, 75.8789063f, 73.7792969f, 81.3964844f, 80.7128906f, 80.5664063f, 83.6914063f, 77.0996094f, 72.5097656f, 86.6210938f, 121.6796875f, 117.7734375f, 40.0390625f, 16.8945313f },/* G NB */ + {1.0f }, /* T NB */ + {57.0312500f, 64.5996094f, 71.4355469f, 75.8789063f, 77.0507813f, 79.0039063f, 74.5117188f, 74.2187500f, 72.9492188f, 72.8515625f, 66.9433594f, 73.9257813f, 109.6191406f, 121.5332031f, 23.7792969f, 13.3789063f }, /* AU NB */ + {55.4687500f, 65.6738281f, 71.8261719f, 71.6308594f, 73.0468750f, 74.3164063f, 73.0957031f, 73.4863281f, 73.8769531f, 75.2441406f, 78.0761719f, 82.6171875f, 90.1367188f, 95.8496094f, 66.0644531f, 68.9941406f }, /* IA WB */ + {67.9687500f, 64.0625000f, 65.8203125f, 76.9531250f, 117.1875000f, 145.5078125f, 77.6855469f, 23.2421875f, 81.0546875f, 81.1035156f, 81.4453125f, 85.0585938f, 90.0878906f, 95.8984375f, 92.3828125f, 90.7226563f }, /* U WB */ + {35.6933594f, 39.4042969f, 57.3242188f, 64.6484375f, 68.0175781f, 76.2695313f, 80.7128906f, 82.0800781f, 85.1562500f, 89.6484375f, 89.9414063f, 95.3613281f, 104.7363281f, 106.0546875f, 105.2734375f, 97.8515625f }, /* V WB */ + {61.4257813f, 75.1464844f, 88.4277344f, 82.1777344f, 82.4218750f, 89.1601563f, 89.2578125f, 94.1894531f, 95.5566406f, 95.9472656f, 97.0703125f, 102.6367188f, 107.2265625f, 107.3730469f, 105.4199219f, 98.1933594f },/* G WB */ + {1.0f },/* T WB */ + {51.1230469f, 62.5976563f, 71.5820313f, 75.5371094f, 78.9550781f, 79.9804688f, 79.4433594f, 82.9101563f, 82.6171875f, 83.1054688f, 84.8632813f, 86.1328125f, 89.5996094f, 83.6914063f, 79.3945313f, 78.2226563f }, /* AU WB */ + {72.9980469f, 86.2792969f, 90.0878906f, 89.5996094f, 92.4316406f, 90.5273438f, 90.5273438f, 92.1386719f, 97.3632813f, 101.3671875f, 111.7675781f, 110.8398438f, 97.5585938f, 93.1640625f, 92.8710938f, 115.7226563f },/* IA 16k */ + {1.0f },/* U 16k */ + {49.714f, 67.480f, 88.315f, 84.931f, 102.979f, 99.871f, 113.361f, 115.387f, 115.951f, 126.902f, 130.543f, 127.340f, 117.813f, 113.104f, 107.586f, 99.412f }, /* V 16k */ + {96.8261719f, 117.3339844f, 132.5683594f, 134.4726563f, 140.7226563f, 136.8652344f, 141.6992188f, 141.1132813f, 143.8964844f, 152.6367188f, 168.5058594f, 169.1406250f, 158.4960938f, 156.1523438f, 147.4609375f, 182.4707031f },/* G 16k */ + {1.0f },/* T 16k */ + {55.1269531f, 70.3613281f, 83.1054688f, 87.2070313f, 90.5273438f, 91.4550781f, 94.7265625f, 93.6035156f, 97.6074219f, 98.7304688f, 104.6875000f, 99.6582031f, 95.6054688f, 91.6503906f, 88.4765625f, 78.2226563f, },/* NOT USED ! AU 16k */ + {69.5312500f, 80.1757813f, 101.3183594f, 100.9277344f, 106.4941406f, 111.1816406f, 107.6171875f, 112.9882813f, 116.6992188f, 117.1875000f, 120.9472656f, 125.0976563f, 130.7617188f, 128.7109375f, 123.3886719f, 104.9316406f} /* G WB for MA*/ +}; +/* An 16-by-19 matrix in Scale = 20.48f */ +const float inv_sigma_p[][16] = +{ + {0.0168560f, 0.0156455f, 0.0143317f, 0.0150699f, 0.0148513f, 0.0145869f, 0.0150147f, 0.0151479f, 0.0151479f, 0.0147126f, 0.0146495f, 0.0118587f, 0.0103539f, 0.0084280f, 0.0226800f, 0.0231937f }, /* IA NB */ + {0.0195234f, 0.0150147f, 0.0144124f, 0.0145765f, 0.0147232f, 0.0143619f, 0.0143518f, 0.0143719f, 0.0190158f, 0.0153869f, 0.0152950f, 0.0145455f, 0.0139986f, 0.0129785f, 0.0128321f, 0.0124498f }, /* U NB */ + {0.0305672f, 0.0286434f, 0.0212448f, 0.0179807f, 0.0166234f, 0.0146390f, 0.0139225f, 0.0137450f, 0.0135450f, 0.0141047f, 0.0144023f, 0.0129538f, 0.0104383f, 0.0134560f, 0.0478505f, 0.0914286f }, /* V NB */ + {0.0185844f, 0.0163057f, 0.0127920f, 0.0131789f, 0.0135539f, 0.0122855f, 0.0123896f, 0.0124121f, 0.0119487f, 0.0129702f, 0.0137912f, 0.0115445f, 0.0082183f, 0.0084909f, 0.0249756f, 0.0591908f }, /* G NB */ + {1.0f }, /* T NB */ + {0.0175342f, 0.0154800f, 0.0139986f, 0.0131789f, 0.0129785f, 0.0126576f, 0.0134207f, 0.0134737f, 0.0137082f, 0.0137265f, 0.0149380f, 0.0135271f, 0.0091225f, 0.0082282f, 0.0420534f, 0.0747445f }, /* AU NB */ + {0.0180282f, 0.0152268f, 0.0139225f, 0.0139605f, 0.0136898f, 0.0134560f, 0.0136807f, 0.0136080f, 0.0135360f, 0.0132901f, 0.0128080f, 0.0121040f, 0.0110943f, 0.0104330f, 0.0151367f, 0.0144940f }, /* IA WB */ + {0.0147126f, 0.0156098f, 0.0151929f, 0.0129949f, 0.0085333f, 0.0068725f, 0.0128724f, 0.0430252f, 0.0123373f, 0.0123299f, 0.0122782f, 0.0117566f, 0.0111003f, 0.0104277f, 0.0108245f, 0.0110226f }, /* U WB */ + {0.0280164f, 0.0253779f, 0.0174446f, 0.0154683f, 0.0147021f, 0.0131114f, 0.0123896f, 0.0121832f, 0.0117431f, 0.0111547f, 0.0111183f, 0.0104864f, 0.0095478f, 0.0094291f, 0.0094991f, 0.0102196f }, /* V WB */ + {0.0162798f, 0.0133073f, 0.0113087f, 0.0121687f, 0.0121327f, 0.0112158f, 0.0112035f, 0.0106169f, 0.0104650f, 0.0104224f, 0.0103018f, 0.0097431f, 0.0093260f, 0.0093133f, 0.0094859f, 0.0101840f }, /* G WB */ + {1.0f }, /* T WB */ + {0.0195606f, 0.0159750f, 0.0139700f, 0.0132385f, 0.0126654f, 0.0125031f, 0.0125876f, 0.0120612f, 0.0121040f, 0.0120329f, 0.0117837f, 0.0116100f, 0.0111608f, 0.0119487f, 0.0125953f, 0.0127840f }, /* AU WB */ + {0.0136990f, 0.0115903f, 0.0111003f, 0.0111608f, 0.0108188f, 0.0110464f, 0.0110464f, 0.0108532f, 0.0102708f, 0.0098651f, 0.0089471f, 0.0090220f, 0.0102503f, 0.0107338f, 0.0107676f, 0.0086414f }, /* IA 16k*/ + {1.0f }, /* U 16k */ + {0.0201150f, 0.0148192f, 0.0113231f, 0.0117743f, 0.0097107f, 0.0100129f, 0.0088214f, 0.0086665f, 0.0086243f, 0.0078801f, 0.0076603f, 0.0078530f, 0.0084880f, 0.0088414f, 0.0092949f, 0.0100591f}, /* V 16k */ + {0.0103278f, 0.0085227f, 0.0075433f, 0.0074365f, 0.0071062f, 0.0073065f, 0.0070572f, 0.0070865f, 0.0069494f, 0.0065515f, 0.0059345f, 0.0059122f, 0.0063093f, 0.0064040f, 0.0067815f, 0.0054803f }, /* G 16k */ + {1.0f }, /* T 16k */ + {0.0181399f, 0.0142124f, 0.0120329f, 0.0114670f, 0.0110464f, 0.0109343f, 0.0105567f, 0.0106834f, 0.0102451f, 0.0101286f, 0.0095522f, 0.0100343f, 0.0104597f, 0.0109110f, 0.0113024f, 0.0127840f },/* NOT USED ! AU 16k */ + {0.0143820f, 0.0124726f, 0.0098699f, 0.0099081f, 0.0093902f, 0.0089943f, 0.0092922f, 0.0088505f, 0.0085690f, 0.0085333f, 0.0082681f, 0.0079938f, 0.0076475f, 0.0077693f, 0.0081045f, 0.0095300f} /* G WB for MA*/ +}; + +const Word8 leaders_short[][MAX_NO_SCALES] = +{{ 0, 0, 0}, +{ 1, 0, 0}, +{ 15, 3, 3}, +{ 2, 2, 0}, +{ 2, 0, 0}, +{ 2, 1, 0}, +{ 4, 0, 0}, +{ 9, 7, 6}, +{ 4, 1, 0}, +{ 5, 2, 0}, +{ 6, 3, 2}, +{ 5, 3, 1}, +{ 8, 3, 0}, +{ 9, 3, 0}, +{ 2, 2, 1}, +{ 9, 8, 5}, +{ 5, 5, 0}, +{ 17, 3, 0}, +{ 5, 2, 1}, +{ 7, 3, 0}, +{ 5, 4, 0}, +{ 5, 5, 1}, +{ 2, 2, 2}, +{ 4, 2, 2}, +{ 5, 2, 2}, +{ 6, 6, 5}, +{ 5, 3, 2}, +{ 6, 3, 0}, +{ 12, 3, 2}, +{ 15, 3, 2}, +{ 19, 3, 2}, +{ 7, 6, 3}, +{ 5, 4, 2}, +{ 9, 8, 2}, +{ 6, 5, 2}, +{ 5, 4, 1}, +{ 9, 9, 3}, +{ 6, 6, 2}, +{ 8, 6, 2}, +{ 8, 7, 2}, +{ 8, 8, 2}, +{ 4, 2, 0}, +{ 11, 8, 2}, +{ 13, 11, 2}, +{ 5, 5, 2}, +{ 16, 13, 2}, +{ 13, 12, 2}, +{ 18, 17, 2}, +{ 21, 17, 2}, +{ 18, 16, 2}, +{ 32, 28, 2}, +{ 8, 8, 4}, +{ 7, 5, 2}, +{ 13, 11, 9}, +{ 38, 31, 2}, +{ 4, 4, 2}, +{ 8, 8, 3}, +{ 9, 8, 3}, +{ 8, 5, 2}, +{ 10, 9, 3}, +{ 11, 10, 3}, +{ 13, 10, 3}, +{ 22, 10, 3}, +{ 23, 10, 3}, +{ 13, 11, 3}, +{ 15, 13, 3}, +{ 35, 15, 3}, +{ 32, 16, 3}, +{ 5, 5, 4}, +{ 8, 7, 4}, +{ 33, 31, 2}, +{ 9, 9, 4}, +{ 16, 12, 4}, +{ 17, 13, 4}, +{ 5, 5, 5}, +{ 7, 5, 5}, +{ 4, 3, 2}, +{ 8, 6, 5}, +{ 9, 6, 5}, +{ 9, 7, 5}, +{ 8, 8, 5}, +{ 3, 2, 0}, +{ 10, 8, 5}, +{ 11, 8, 5}, +{ 12, 8, 5}, +{ 13, 8, 5}, +{ 16, 8, 5}, +{ 18, 8, 5}, +{ 10, 9, 5}, +{ 18, 9, 5}, +{ 23, 21, 2}, +{ 13, 8, 8}, +{ 14, 10, 5}, +{ 11, 11, 5}, +{ 13, 11, 5}, +{ 13, 13, 5}, +{ 14, 13, 5}, +{ 15, 13, 5}, +{ 16, 13, 5}, +{ 17, 13, 5}, +{ 18, 13, 5}, +{ 18, 16, 5}, +{ 18, 17, 5}, +{ 19, 18, 5}, +{ 13, 10, 5}, +{ 21, 21, 5}, +{ 23, 21, 5}, +{ 24, 21, 5}, +{ 25, 23, 5}, +{ 32, 23, 5}, +{ 11, 10, 5}, +{ 8, 8, 6}, +{ 5, 5, 7}, +{ 8, 7, 7}, +{ 8, 8, 7}, +{ 10, 8, 7}, +{ 13, 8, 7}, +{ 10, 9, 7}, +{ 13, 11, 7}, +{ 9, 8, 8}, +{ 12, 8, 8}, +{ 23, 18, 5}, +{ 9, 9, 8}, +{ 11, 9, 8}, +{ 13, 9, 8}, +{ 18, 10, 8}, +{ 26, 10, 8}, +{ 27, 10, 8}, +{ 31, 10, 8}, +{ 40, 21, 11}, +{ 13, 11, 8}, +{ 13, 12, 8}, +{ 14, 12, 8}, +{ 18, 12, 8}, +{ 13, 13, 8}, +{ 14, 13, 8}, +{ 16, 13, 8}, +{ 18, 13, 8}, +{ 18, 16, 8}, +{ 18, 17, 8}, +{ 23, 18, 8}, +{ 23, 21, 8}, +{ 24, 21, 8}, +{ 28, 23, 8}, +{ 31, 31, 8}, +{ 36, 31, 8}, +{ 38, 31, 8}, +{ 11, 9, 9}, +{ 12, 9, 9}, +{ 13, 9, 9}, +{ 12, 11, 9}, +{ 42, 31, 2}, +{ 14, 12, 9}, +{ 13, 13, 9}, +{ 14, 13, 9}, +{ 16, 13, 9}, +{ 17, 13, 9}, +{ 18, 13, 9}, +{ 18, 14, 9}, +{ 18, 18, 9}, +{ 26, 25, 9}, +{ 13, 11, 10}, +{ 18, 12, 10}, +{ 18, 13, 10}, +{ 21, 14, 10}, +{ 22, 16, 10}, +{ 18, 18, 10}, +{ 23, 18, 10}, +{ 24, 18, 10}, +{ 24, 21, 10}, +{ 23, 22, 10}, +{ 24, 23, 10}, +{ 32, 25, 10}, +{ 34, 28, 10}, +{ 42, 31, 10}, +{ 17, 11, 11}, +{ 18, 13, 11}, +{ 21, 13, 11}, +{ 18, 17, 11}, +{ 18, 18, 11}, +{ 48, 35, 24}, +{ 18, 17, 12}, +{ 18, 18, 12}, +{ 20, 18, 12}, +{ 39, 30, 12}, +{ 31, 31, 12}, +{ 43, 34, 12}, +{ 16, 13, 13}, +{ 17, 13, 13}, +{ 16, 16, 13}, +{ 18, 17, 13}, +{ 20, 18, 13}, +{ 22, 18, 13}, +{ 23, 18, 13}, +{ 22, 21, 13}, +{ 23, 23, 13}, +{ 24, 23, 13}, +{ 43, 36, 13}, +{ 43, 40, 13}, +{ 43, 41, 13}, +{ 31, 30, 18}, +{ 24, 21, 14}, +{ 31, 31, 14}, +{ 23, 18, 16}, +{ 23, 23, 16}, +{ 31, 25, 16}, +{ 31, 29, 16}, +{ 45, 35, 16}, +{ 23, 21, 17}, +{ 23, 22, 17}, +{ 23, 23, 17}, +{ 31, 31, 17}, +{ 21, 18, 18}, +{ 23, 21, 18}, +{ 23, 22, 18}, +{ 27, 23, 18}, +{ 29, 23, 18}, +{ 32, 23, 18}, +{ 31, 27, 18}, +{ 30, 28, 18}, +{ 31, 28, 18}, +{ 43, 42, 13}, +{ 31, 31, 18}, +{ 32, 31, 18}, +{ 36, 31, 18}, +{ 46, 48, 18}, +{ 46, 32, 19}, +{ 43, 38, 19}, +{ 43, 42, 19}, +{ 32, 32, 20}, +{ 27, 23, 21}, +{ 31, 23, 21}, +{ 31, 24, 21}, +{ 32, 30, 21}, +{ 32, 31, 21}, +{ 43, 33, 21}, +{ 43, 34, 21}, +{ 24, 23, 23}, +{ 32, 32, 23}, +{ 48, 40, 23}, +{ 48, 46, 23}, +{ 28, 24, 24}, +{ 32, 31, 24}, +{ 34, 32, 24}, +{ 36, 32, 24}, +{ 48, 32, 24}, +{ 35, 10, 8}, +{ 40, 28, 25}, +{ 45, 31, 25}, +{ 44, 32, 25}, +{ 31, 31, 27}, +{ 39, 32, 27}, +{ 44, 32, 27}, +{ 32, 32, 28}, +{ 43, 32, 28}, +{ 48, 32, 28}, +{ 36, 36, 28}, +{ 48, 45, 28}, +{ 40, 32, 29}, +{ 44, 34, 30}, +{ 40, 32, 31}, +{ 41, 32, 31}, +{ 42, 32, 31}, +{ 44, 43, 31}, +{ 48, 37, 32}, +{ 48, 39, 32}, +{ 46, 43, 32}, +{ 48, 48, 34}, +{ 48, 36, 35}, +{ 48, 41, 35}, +{ 47, 43, 36}, +{ 48, 48, 37}, +{ 48, 48, 40}, +{ 48, 48, 45}, +{ 48, 48, 47}, +{ 48, 48, 48}}; + +const UWord8 no_lead_idx[][2] = { +{ 1, 1}, +{ 4, 1}, +{ 41, 1}, +{ 41, 4}, +{ 52, 32}, +{ 56, 38}, +{ 41, 1}, +{ 6, 5}, +{119, 14}, +{ 58, 18}, +{138, 21}, +{169, 40}, +{ 4, 4}, +{ 41, 1}, +{ 35, 1}, +{ 35, 4}, +{ 52, 4}, +{ 18, 8}, +{ 44, 41}, +{ 58, 6}, +{ 58, 9}, +{ 69, 26}, +{ 51, 34}, +{ 85, 34}, +{ 85, 38}, +{ 85, 42}, +{139, 40}, +{142, 33}, +{140, 64}, +{141, 73}, +{236, 124}, +{235, 133}, +{211, 160}, +{ 4, 3}, +{ 41, 1}, +{ 52, 3}, +{ 39, 3}, +{ 42, 3}, +{153, 3}, +{118, 9}, +{158, 44}, +{202, 93}, +{250, 201}, +{ 20, 0}, +{ 52, 0}, +{ 1, 1}, +{ 4, 1}, +{ 4, 4}, +{ 4, 4}, +{ 41, 1}, +{ 41, 4}, +{ 20, 4}, +{ 52, 4}, +{ 39, 4}, +{ 44, 41}, +{ 58, 6}, +{ 80, 41}, +{114, 9}, +{124, 9}, +{130, 21}, +{124, 58}, +{165, 34}, +{164, 39}, +{169, 40}, +{ 35, 0}, +{ 4, 4}, +{ 35, 1}, +{ 35, 4}, +{ 52, 4}, +{ 58, 5}, +{ 15, 5}, +{135, 3}, +{116, 41}, +{124, 24}, +{137, 24}, +{177, 26}, +{194, 44}, +{208, 52}, +{230, 58}, +{ 4, 4}, +{ 41, 1}, +{ 41, 4}, +{ 20, 4}, +{ 8, 6}, +{ 9, 8}, +{ 44, 41}, +{ 58, 6}, +{ 58, 9}, +{114, 9}, +{124, 9}, +{ 92, 21}, +{124, 58}, +{ 92, 51}, +{104, 91}, +{141, 51}, +{121, 91}, +{ 4, 3}, +{ 41, 1}, +{ 52, 3}, +{ 69, 3}, +{ 83, 3}, +{ 87, 3}, +{ 86, 44}, +{143, 74}, +{144, 112}, +{179, 78}, +{196, 78}, +{196, 78}, +{224, 78}, +{ 4, 3}, +{ 41, 1}, +{ 20, 1}, +{ 20, 4}, +{ 52, 4}, +{ 52, 3}, +{111, 5}, +{132, 4}, +{ 57, 41}, +{123, 41}, +{214, 3}, +{183, 81}, +{215, 41}, +{213, 32}, +{219, 44}, +{233, 52}, +{ 7, 52}, +{ 3, 57}, +{ 14, 59}, +{ 11, 53}, +{ 62, 0}, +{ 37, 4}, +{ 37, 3}, +{ 63, 3}, +{ 67, 3}, +{184, 3}, +{123, 41}, +{ 19, 124}, +{ 39, 4}, +{ 44, 41}, +{ 58, 6}, +{ 58, 9}, +{ 58, 44}, +{115, 32}, +{ 95, 16}, +{102, 21}, +{ 99, 38}, +{126, 58}, +{141, 57}, +{206, 56}, +{205, 120}, +{226, 124}, +{226, 133}, +{225, 182}, +{152, 3}, +{ 65, 3}, +{ 17, 14}, +{ 61, 22}, +{135, 3}, +{ 19, 11}, +{ 76, 25}, +{ 41, 36}, +{ 41, 33}, +{ 41, 7}, +{ 27, 10}, +{ 81, 15}, +{ 3, 2}, +{ 41, 36}, +{ 55, 31}, +{ 81, 7}, +}; +const UWord8 no_lead_p_idx[][2] = { + { 5, 0}, +{ 3, 0}, +{ 41, 0}, +{ 35, 0}, +{ 52, 0}, +{ 1, 1}, +{ 4, 1}, +{ 4, 4}, +{ 3, 4}, +{ 41, 1}, +{ 41, 4}, +{ 35, 4}, +{ 52, 4}, +{ 39, 4}, +{ 44, 41}, +{ 58, 6}, +{ 80, 41}, +{ 15, 9}, +{ 94, 9}, +{110, 34}, +{ 96, 52}, +{ 98, 39}, +{105, 58}, +{107, 51}, +{105, 104}, +{109, 94}, +{145, 98}, +{207, 100}, +{239, 103}, +{240, 108}, +{207, 146}, +{ 4, 0}, +{ 41, 4}, +{ 39, 3}, +{ 94, 5}, +{ 80, 41}, +{ 94, 18}, +{ 94, 44}, +{ 96, 52}, +{106, 44}, +{121, 58}, +{107, 51}, +{199, 15}, +{197, 104}, +{198, 156}, +{221, 200}, +{ 4, 1}, +{ 3, 1}, +{ 3, 4}, +{ 41, 1}, +{ 35, 1}, +{ 35, 4}, +{ 52, 4}, +{ 39, 4}, +{ 88, 4}, +{135, 4}, +{135, 3}, +{190, 3}, +{155, 41}, +{135, 20}, +{190, 32}, +{194, 44}, +{231, 44}, +{230, 58}, +{231, 15}, +{242, 83}, +{253, 130}, +{ 4, 1}, +{ 32, 1}, +{ 58, 5}, +{ 39, 3}, +{ 43, 5}, +{ 45, 3}, +{ 48, 3}, +{ 46, 44}, +{ 49, 44}, +{ 90, 44}, +{ 50, 44}, +{ 54, 52}, +{ 70, 51}, +{151, 122}, +{151, 53}, +{ 52, 4}, +{ 39, 4}, +{ 83, 4}, +{ 89, 4}, +{ 80, 41}, +{ 85, 41}, +{100, 8}, +{101, 9}, +{ 85, 38}, +{ 85, 15}, +{195, 52}, +{234, 52}, +{217, 15}, +{254, 15}, +{251, 104}, +{ 10, 153}, +{ 18, 157}, +{ 19, 192}, +{ 19, 237}, +{ 19, 0}, +{ 52, 4}, +{153, 3}, +{159, 3}, +{171, 32}, +{185, 44}, +{186, 68}, +{ 85, 15}, +{220, 44}, +{218, 75}, +{227, 75}, +{ 1, 77}, +{228, 147}, +{ 15, 150}, +{ 18, 187}, +{ 16, 212}, +{ 16, 241}, +{ 17, 248}, +{ 4, 3}, +{ 52, 4}, +{ 52, 3}, +{161, 3}, +{166, 3}, +{149, 9}, +{247, 47}, +{178, 0}, +{ 41, 1}, +{ 20, 1}, +{ 20, 4}, +{ 52, 4}, +{ 58, 5}, +{117, 4}, +{117, 3}, +{153, 3}, +{182, 3}, +{204, 3}, +{162, 9}, +{163, 44}, +{167, 44}, +{173, 44}, +{254, 44}, +{ 12, 52}, +{254, 15}, +{ 13, 82}, +{244, 188}, +{ 3, 4}, +{ 52, 4}, +{ 58, 5}, +{153, 3}, +{190, 3}, +{209, 3}, +{243, 189}, +{ 41, 1}, +{ 20, 1}, +{ 39, 4}, +{ 88, 4}, +{ 97, 4}, +{138, 21}, +{ 6, 44}, +{ 1, 1}, +{ 4, 1}, +{ 4, 4}, +{ 5, 4}, +{ 41, 1}, +{ 41, 4}, +{ 20, 4}, +{ 52, 4}, +{ 39, 4}, +{ 83, 4}, +{135, 4}, +{ 80, 41}, +{116, 41}, +{136, 41}, +{110, 34}, +{ 13, 6}, +{113, 41}, +{114, 18}, +{ 91, 24}, +{125, 24}, +{127, 24}, +{163, 12}, +{168, 13}, +{172, 13}, +{128, 84}, +{174, 28}, +{252, 29}, +{249, 30}, +{246, 129}, +{246, 180}, +{ 9, 66}, +{110, 41}, +{155, 41}, +{154, 20}, +{158, 44}, +{203, 21}, +{232, 44}, +{210, 39}, +{223, 79}, +{222, 123}, +{229, 131}, +{238, 139}, +{238, 170}, +{ 4, 4}, +{ 4, 4}, +{ 41, 1}, +{ 20, 1}, +{ 20, 4}, +{ 52, 4}, +{ 39, 4}, +{ 88, 4}, +{135, 4}, +{ 80, 41}, +{110, 41}, +{136, 41}, +{134, 32}, +{176, 44}, +{193, 44}, +{195, 52}, +{210, 39}, +{242, 39}, +{ 6, 71}, +{ 2, 148}, +{ 4, 175}, +{ 5, 191}, +{110, 41}, +{204, 3}, +{216, 22}, +{210, 23}, +{195, 32}, +{220, 44}, +{210, 39}, +{222, 33}, +{245, 57}, +{255, 60}, +{ 8, 72}, +{ 8, 181}, +}; + +const int16_t min_lat_bits_SN[] = {-1, -1, 17, 12, 17, 17, -1, -1, 17, 12, 17, 17, -1, -1, 22, -1, 32, 26 }; + +const int16_t min_lat_bits_pred[] = {17, 18, 9, 15, -1, 21, 17, 14, 9, 15, -1, 21, 17, -1, 24, 26, -1, 26, 16}; + +const int16_t offset_lvq_modes_SN[] = {-1,-1,33,64,96, 129,-1,-1,12,43,79,109,-1,-1,137,-1,107,135, + 112 + }; /* CNG */ + +const int16_t offset_lvq_modes_pred[] = {119, 153, 31, 67, -1, 102, 126, 160, 0, 46, -1, 82, 146, -1, 175, 191, -1, 225, 203}; +const int16_t offset_in_lvq_mode_SN[][21] = +{ + {0}, /* I NB */ + {0,1,1,1,1,1,2,3,3,3,3,4,4,4,5}, /* UV NB*/ + {0,1,1,1,1,2,3,4,5,5,6,6,7,7,7,7,7,8,8,8,9}, /* V NB */ + {0,0,0,0,1,1,1,2,3,4,5,6,6,7,8,9,10,11,12,13,14}, /* G NB */ + {0,1,1,1,1,2,3,4,5,5,5,6,6,6,7,8}, /* T NB */ + {0,0,0,0,1,2,2,2,2,3,4,5}, /* A NB */ + {0}, /* I WB */ + {0}, /* UV WB*/ + {1}, /* V WB */ /* granularity 1 */ + {1}, /* G WB */ /* granularity 1 */ + {1}, /* T WB */ /* granularity 1 */ + {1}, /* A WB */ /* granularity 1 */ + {0}, /* I 16k */ + {0}, /* UV 16k */ + {1}, /* V 16k */ /* granularity 1 */ + {0}, /* G 16k */ + {0,1}, /* T 16k */ + {0}, /* A 16k */ +}; +const int16_t offset_in_lvq_mode_pred[][32] = +{ + {0,0,0,0,1,2,2,2,3,4,5,5,5,5,5,5,5,5,5,6}, /* I NB */ + {0,1,1,1,2,3,4,4,4,4,4,5,5,5,6}, /* UV NB */ + {0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,3,4,4,5,6,7,8,9,10,10,11,12,13,13,13,14}, /* V NB */ + {0,0,0,0,1,1,1,2,3,4,5,6,6,7,8,9,10,11,12,13,14}, /* G NB */ + {0}, /* T NB */ + {0,0,0,0,1,2,2,2,2,3,4,5}, /* A NB */ + {1}, /* I WB */ + {1}, /* UV WB */ /* granularity 1 */ + {1}, /* V WB */ /* granularity 1 */ + {1}, /* G WB */ + {0}, /* T WB */ + {1}, /* A WB */ + {0,0,0,0,1,2,2,2,3,4,5,5,5,5,5,5,5,5,5,6}, /* I 16k */ + {0}, /* UV 16k */ + {1}, /* V 16k */ + {1}, /* G 16k */ + {0}, /* T 16k */ + {1}, /* A 16k */ + {1}, /* G WB MA*/ +}; + +/*-----------------------------------------------------------------* + * BC-TCVQ frame-end quantization tables (BC-TCVQ is used in Voiced mode for 16kHz isf) + *-----------------------------------------------------------------*/ +const int16_t NTRANS[4][NUM_STATE] = {{0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14}, /* indices of previous state of first branche */ + {1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15}, /* indices of previous state of second branches */ + {4,2,1,3,0,2,1,3,2,0,3,1,7,0,3,1}, /* indices of previous subset of first branch */ + {2,0,3,6,2,0,3,1,0,2,1,3,0,2,1,5} /* indices of previous subset of second branch */ +}; + +const int16_t NTRANS2[4][NUM_STATE] = {{0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7}, + {8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15}, + {4,2,2,0,1,3,3,6,0,2,2,0,1,3,3,1}, + {2,0,0,2,3,1,1,3,7,0,0,2,3,1,1,5} +}; + +/* BC-TCQ Bit Allocations */ +const int16_t BC_TCVQ_BIT_ALLOC_40B[M/2+4] = {1, 4, 5,5,4,4, 2,2,2,2, 5,4 }; /*1+39bit*/ + +const int16_t FixBranch_tbl[4][4][N_STAGE_VQ - 4] = +{ + {{0, 0, 0, 0}, {1, 0, 0, 0}, {0, 1, 0, 0}, {1, 1, 0, 0}}, /* incase of initial state 0 */ + {{0, 0, 1, 0}, {1, 0, 1, 0}, {0, 1, 1, 0}, {1, 1, 1, 0}}, /* incase of initial state 4 */ + {{0, 0, 0, 1}, {1, 0, 0, 1}, {0, 1, 0, 1}, {1, 1, 0, 1}}, /* incase of initial state 8 */ + {{0, 0, 1, 1}, {1, 0, 1, 1}, {0, 1, 1, 1}, {1, 1, 1, 1}} /* incase of initial state 12 */ +}; + +/* Intra-Prediction */ +const float AR_IntraCoeff[N_STAGE_VQ-1][2][2] = +{ + {{-0.292479f, 0.676331f}, {-0.422648f, 0.217490f}}, + {{ 0.048957f, 0.500476f}, { 0.087301f, 0.287286f}}, + {{ 0.199481f, 0.502784f}, { 0.106762f, 0.420907f}}, + {{ 0.240459f, 0.440504f}, { 0.214255f, 0.396496f}}, + {{ 0.193161f, 0.494850f}, { 0.158690f, 0.306771f}}, + {{ 0.093435f, 0.370662f}, { 0.065526f, 0.148231f}}, + {{ 0.037417f, 0.336906f}, {-0.024246f, 0.187298f}} +}; + +const float SN_IntraCoeff[N_STAGE_VQ-1][2][2] = +{ + {{-0.452324f, 0.808759f}, {-0.524298f, 0.305544f}}, + {{ 0.009663f, 0.606028f}, {-0.013208f, 0.421115f}}, + {{ 0.144877f, 0.673495f}, { 0.080963f, 0.580317f}}, + {{ 0.208225f, 0.633144f}, { 0.215958f, 0.584520f}}, + {{ 0.050822f, 0.767842f}, { 0.076879f, 0.416693f}}, + {{ 0.005058f, 0.550614f}, {-0.006786f, 0.296984f}}, + {{-0.023860f, 0.611144f}, {-0.162706f, 0.576228f}} +}; + +const float scale_ARSN[M] = {1.8307f, 1.8404f, 1.8009f, 1.7416f, 1.7240f, 1.7467f, 1.6106f, 1.6497f, 1.5702f, 1.5548f, 1.5745f, 1.6199f, 1.5633f, 1.5239f, 1.5796f, 1.5615f}; +const float scale_inv_ARSN[M] = {0.5462f, 0.5434f, 0.5553f, 0.5742f, 0.5800f, 0.5725f, 0.6209f, 0.6062f, 0.6369f, 0.6432f, 0.6351f, 0.6173f, 0.6397f, 0.6562f, 0.6331f, 0.6404f}; + +/* TCVQ Codebook */ +const float AR_TCVQ_CB_SUB1[2][128][2] = +{ + { + {-170.0561F,-169.3847F,},{-90.97870F,48.531700F,},{-148.6968F,17.218300F,},{-107.0229F,-34.21990F,},{-129.8378F,-87.31650F,},{-220.1001F,-234.4751F,},{-129.6736F,52.471700F,},{20.510900F,-288.6602F,}, + {-221.5495F,-0.070200F,},{58.214300F,123.37490F,},{-74.50640F,211.33990F,},{-48.14920F,123.86970F,},{-192.6126F,-247.4666F,},{-206.1983F,104.78470F,},{-125.3893F,-150.7979F,},{-168.7912F,-86.03110F,}, + {-95.16320F,-89.65400F,},{-12.70900F,177.33540F,},{-73.43770F,-250.7212F,},{-51.23060F,-84.00830F,},{-264.2502F,102.67830F,},{-184.2570F,-157.5882F,},{-121.9781F,-62.24850F,},{-132.6231F,115.89740F,}, + {-47.38870F,-84.58990F,},{-2.521300F,94.296500F,},{-79.13010F,-82.28630F,},{-49.25610F,-5.992200F,},{-286.7041F,-146.2168F,},{-178.7492F,-2.262600F,},{-115.8487F,-10.64920F,},{-119.9947F,-216.1283F,}, + {-69.10170F,1.3002000F,},{-68.48210F,-106.6926F,},{24.572700F,141.84890F,},{51.813600F,206.02520F,},{-51.84400F,-72.25850F,},{-175.4067F,-470.9963F,},{-112.2572F,-109.9498F,},{-51.26580F,339.48830F,}, + {-38.93840F,-40.88940F,},{-29.20570F,-69.73790F,},{-55.22180F,51.015500F,},{-12.33040F,42.160700F,},{-31.81780F,63.017700F,},{-174.1785F,-89.95120F,},{-110.4181F,-345.4240F,},{-49.84300F,-64.35890F,}, + {-59.63520F,-175.9810F,},{-69.02910F,-44.58650F,},{-43.97120F,-49.59230F,},{-87.25920F,-138.5465F,},{-96.25540F,-174.5186F,},{-154.7553F,-275.2756F,},{-109.5143F,128.62810F,},{-14.54350F,-25.04360F,}, + {-46.05230F,81.366800F,},{-32.03440F,24.870900F,},{-132.5154F,-143.2318F,},{-22.59640F,-51.55940F,},{-178.7877F,251.71930F,},{-148.7196F,-212.2087F,},{-106.1241F,217.56180F,},{24.099800F,29.423900F,}, + {-119.7589F,-323.8735F,},{121.21500F,173.78130F,},{28.604700F,-10.13160F,},{37.177600F,85.584900F,},{87.071500F,238.62500F,},{109.09800F,76.070100F,},{167.92980F,224.78890F,},{165.46650F,86.241500F,}, + {-9.919200F,0.5865000F,},{126.17610F,92.028000F,},{-38.94060F,-121.2069F,},{4.4071000F,-13.64760F,},{32.528700F,-1.269700F,},{109.85480F,288.47620F,},{193.40720F,153.42400F,},{34.912700F,501.59090F,}, + {12.630000F,53.019400F,},{11.431500F,13.336900F,},{191.94830F,224.70850F,},{40.979900F,-73.55240F,},{5.8897000F,-171.8742F,},{111.18560F,4.0700000F,},{201.66060F,-41.15440F,},{122.30070F,274.89960F,}, + {-2.425900F,-107.2105F,},{-24.07350F,-25.13440F,},{-4.758000F,-49.75210F,},{66.313900F,932.60360F,},{63.427900F,76.575200F,},{131.07660F,161.35400F,},{211.93280F,81.864800F,},{90.057500F,-27.39110F,}, + {-0.656200F,269.81920F,},{38.372300F,52.479100F,},{9.8096000F,55.003200F,},{101.87250F,118.98060F,},{121.92950F,-125.7858F,},{131.37830F,88.916800F,},{218.95100F,305.25590F,},{299.20050F,200.64100F,}, + {-5.459000F,-45.76330F,},{64.972100F,353.45030F,},{-19.39350F,0.4459000F,},{183.81020F,144.04150F,},{134.69810F,96.639400F,},{135.54900F,-149.4564F,},{219.02860F,440.63140F,},{200.41160F,402.24270F,}, + {39.254000F,-5.942300F,},{72.189700F,27.428900F,},{65.129100F,51.010200F,},{47.723500F,14.090300F,},{219.06510F,290.25100F,},{156.45050F,43.423900F,},{232.59480F,-226.2346F,},{263.13970F,83.869400F,}, + {74.758000F,73.874300F,},{14.975400F,-30.59550F,},{167.16620F,0.0965000F,},{101.95820F,53.053900F,},{-11.37910F,-38.59220F,},{158.02420F,120.38810F,},{239.72370F,224.38630F,},{657.07030F,665.65960F,}, + }, + + { + {-368.0999F,-65.52540F,},{-102.2718F,-140.9826F,},{-20.59040F,-66.70470F,},{-95.79090F,184.47330F,},{-837.7641F,-904.4130F,},{-510.6703F,492.69680F,},{-339.6600F,-757.9813F,},{-254.7818F,-220.3240F,}, + {-195.1893F,174.78510F,},{-225.8519F,-77.48110F,},{-216.3949F,43.255000F,},{-38.17870F,-32.99880F,},{-513.7912F,0.1722000F,},{-480.2339F,-631.9721F,},{-338.9732F,89.728000F,},{-150.2896F,414.33830F,}, + {-299.8150F,-389.7000F,},{-78.78780F,-23.51500F,},{-110.4856F,-76.99170F,},{-55.54460F,-127.1259F,},{-217.9132F,295.10380F,},{-475.2952F,178.16700F,},{-313.6053F,299.37920F,},{-383.7671F,290.27470F,}, + {-162.0853F,-139.3168F,},{-10.81860F,411.75810F,},{44.425800F,-95.93580F,},{31.498700F,285.88550F,},{-313.9570F,-197.7654F,},{-439.8449F,-43.63990F,},{-311.4479F,-51.44460F,},{-112.9209F,-79.77700F,}, + {-135.4290F,-11.18290F,},{-14.37020F,-101.2914F,},{-55.36790F,-170.9950F,},{-97.12010F,33.922700F,},{-341.4857F,133.28130F,},{-419.5535F,-1029.264F,},{-261.0493F,-606.2968F,},{-445.1823F,-298.5443F,}, + {-95.70290F,-200.4782F,},{-18.66770F,205.38260F,},{5.2869000F,154.20340F,},{-176.5040F,-252.4035F,},{-172.0901F,-378.6187F,},{-372.2359F,-501.4665F,},{-252.0296F,-151.3651F,},{-287.6742F,43.301600F,}, + {-63.75070F,119.02160F,},{-136.2005F,87.531000F,},{-87.96100F,287.68010F,},{36.839700F,-33.04480F,},{-118.0163F,-214.5814F,},{-365.9238F,-348.5409F,},{-236.4188F,-425.5134F,},{-25.16220F,-39.63130F,}, + {-63.00320F,-82.32200F,},{-152.9630F,-507.2372F,},{-57.66390F,48.660600F,},{5.3785000F,51.097300F,},{-168.7345F,-49.50600F,},{-359.4378F,-199.1688F,},{-233.7651F,-285.0083F,},{33.347500F,60.305100F,}, + {9.5961000F,-60.67060F,},{-22.43980F,93.048400F,},{184.09080F,107.94670F,},{164.32090F,265.57780F,},{-67.49340F,123.30580F,},{233.22030F,704.96710F,},{353.99250F,-262.9922F,},{210.06920F,175.77800F,}, + {-104.2510F,-314.3242F,},{0.9024000F,-7.495400F,},{86.823700F,85.372000F,},{72.376700F,137.49970F,},{-13.00090F,-69.46920F,},{236.74980F,46.279600F,},{374.54780F,-27.20110F,},{136.88650F,-35.73790F,}, + {-34.16180F,16.487600F,},{283.87900F,353.51860F,},{21.261500F,12.921800F,},{123.46920F,17.014100F,},{98.105500F,5.7719000F,},{238.18290F,-47.81850F,},{386.73840F,560.96730F,},{32.152700F,578.18980F,}, + {70.706200F,208.99530F,},{69.254100F,50.614900F,},{273.61320F,220.89670F,},{244.46280F,129.16830F,},{108.85950F,215.41490F,},{265.47770F,276.31920F,},{395.46140F,283.90850F,},{412.94530F,299.13520F,}, + {-5.075000F,-154.7571F,},{142.09250F,160.91980F,},{172.66840F,-70.68220F,},{79.050300F,-150.7248F,},{220.80900F,545.83980F,},{289.05480F,1023.7731F,},{421.94000F,140.86480F,},{436.59640F,74.580500F,}, + {31.476700F,103.73850F,},{84.791000F,-50.67070F,},{136.49490F,394.28200F,},{264.97310F,-186.0375F,},{531.67460F,343.03590F,},{310.71060F,184.35030F,},{494.98260F,403.81940F,},{406.31780F,490.15840F,}, + {137.11870F,78.459100F,},{-26.93550F,-247.3193F,},{-13.90060F,-408.4927F,},{315.74950F,11.906200F,},{507.81160F,-77.48790F,},{313.84650F,400.68920F,},{543.13960F,-127.4566F,},{895.02000F,968.45590F,}, + {65.022700F,5.1458000F,},{203.36110F,32.767800F,},{99.442400F,-280.2416F,},{385.57300F,174.81870F,},{303.53400F,86.087500F,},{316.97760F,81.139300F,},{545.10640F,789.31480F,},{585.50660F,162.80340F,}, + } +}; + +const float AR_TCVQ_CB_SUB2[2][64][2] = +{ + { + {-139.4748F,-20.51230F,},{-205.2710F,65.240700F,},{-90.66390F,99.509000F,},{-51.55990F,-140.1515F,},{-367.2977F,-86.40560F,},{-101.5758F,-506.4093F,},{-467.6164F,-177.7713F,},{-325.3952F,19.243000F,}, + {-51.50950F,-0.580700F,},{-156.7042F,-109.3179F,},{-82.92030F,-84.85600F,},{-75.64660F,36.105400F,},{-226.3753F,-277.4524F,},{-336.8399F,-293.0652F,},{-261.4553F,168.08600F,},{-203.4850F,280.69810F,}, + {-242.0593F,-177.4998F,},{-93.17880F,198.93370F,},{-6.034900F,-224.4959F,},{152.10510F,274.83370F,},{-347.4922F,202.31740F,},{-450.9290F,32.755600F,},{-246.8381F,-399.5943F,},{-242.2880F,-493.4214F,}, + {-104.8258F,-183.7260F,},{-127.2704F,-288.3692F,},{17.116300F,247.94440F,},{28.590000F,141.33180F,},{-88.39520F,-8.409100F,},{-244.1211F,-41.49450F,},{-281.3448F,-44.43050F,},{-435.1837F,-417.8239F,}, + {7.2419000F,-97.64420F,},{32.515300F,38.550200F,},{13.574300F,-6.174500F,},{102.88080F,-123.3195F,},{184.39410F,428.29360F,},{-20.13120F,-127.9658F,},{-97.25060F,379.22250F,},{541.89470F,342.12550F,}, + {3.8567000F,79.183500F,},{339.32440F,253.39800F,},{87.921000F,66.552800F,},{117.63820F,32.476100F,},{490.72400F,188.26100F,},{152.82630F,-303.6073F,},{415.46300F,-125.0126F,},{20.317700F,471.51620F,}, + {120.83170F,146.52980F,},{183.34470F,88.231900F,},{241.62970F,156.33030F,},{23.616600F,-36.17640F,},{130.82320F,95.319300F,},{123.34420F,-25.34570F,},{-17.53680F,-385.5626F,},{253.17360F,-114.7059F,}, + {85.112600F,-25.82990F,},{-42.33470F,-51.85570F,},{195.47230F,-7.405400F,},{322.01970F,63.832500F,},{188.75460F,-173.2249F,},{506.79120F,93.875700F,},{390.46690F,470.76120F,},{243.34080F,526.34460F,}, + }, + + { + {-165.6917F,-377.1008F,},{-17.98370F,-75.86160F,},{7.9923000F,116.25350F,},{-130.2646F,-108.4639F,},{-311.2591F,-203.8264F,},{-339.0670F,-23.57200F,},{-7.653600F,-54.53950F,},{-423.8622F,-353.1093F,}, + {-240.0843F,-95.08200F,},{-143.2687F,8.5443000F,},{-101.9498F,-202.8074F,},{-43.42630F,-10.37850F,},{-291.0372F,55.326100F,},{-189.0665F,-593.2565F,},{-128.3240F,5.0444000F,},{-420.8219F,35.762800F,}, + {-206.5327F,85.114800F,},{-202.6915F,-233.0529F,},{-107.8853F,-28.10810F,},{-33.95630F,-155.5147F,},{-19.77350F,-490.9996F,},{-113.7118F,159.73310F,},{-345.0899F,238.75620F,},{68.787700F,-156.6325F,}, + {-52.29900F,-95.54260F,},{14.606500F,197.56230F,},{9.1784000F,-3.906100F,},{-88.07510F,114.63690F,},{-356.4571F,-517.1363F,},{-68.02240F,-113.1240F,},{-424.2482F,-150.8795F,},{-54.13860F,-30.29230F,}, + {-48.11040F,48.722800F,},{-9.974700F,-288.3043F,},{44.249300F,-134.2835F,},{68.270600F,70.915400F,},{294.67340F,-174.3828F,},{471.33110F,206.81070F,},{363.89680F,386.90480F,},{52.930000F,47.618800F,}, + {104.26640F,127.63530F,},{149.10830F,-71.25040F,},{280.53550F,183.93680F,},{288.38200F,42.039600F,},{61.611600F,50.856600F,},{170.86680F,156.74650F,},{139.90090F,-260.6101F,},{539.24370F,326.70950F,}, + {71.975100F,-6.711500F,},{169.81850F,90.253300F,},{157.30500F,24.483300F,},{59.160200F,-48.84550F,},{-42.61460F,-92.55310F,},{270.15440F,-94.32920F,},{487.06470F,75.464100F,},{345.55540F,126.52380F,}, + {-110.4957F,258.30830F,},{17.373900F,41.055800F,},{60.912700F,355.85580F,},{151.18090F,229.57390F,},{269.34040F,569.72710F,},{259.50450F,412.82330F,},{-14.73050F,568.47830F,},{252.07040F,354.99801F,}, + } +}; + +const float AR_TCVQ_CB_SUB3[4][32][2] = +{ + { + {-190.2462F,3.7460000F,},{-178.0891F,-156.6944F,},{37.733100F,176.00550F,},{-93.45970F,165.15130F,},{-267.7612F,-511.1700F,},{27.017600F,-276.8829F,},{-118.0160F,-462.8076F,},{188.15520F,-112.6265F,}, + {-112.2084F,-272.1046F,},{-75.63800F,28.803700F,},{-62.17480F,-51.65160F,},{-62.91250F,-122.3795F,},{-315.9380F,163.32500F,},{-335.8190F,-361.7829F,},{-10.02270F,-28.26150F,},{-411.0079F,-169.0698F,}, + {21.274600F,52.847800F,},{41.786600F,-55.20310F,},{131.61950F,-6.998400F,},{157.68690F,287.15550F,},{-42.42940F,-201.8275F,},{281.21280F,-25.80890F,},{-13.25970F,522.18800F,},{-66.78560F,354.06180F,}, + {20.563700F,-135.3851F,},{140.59070F,104.26130F,},{279.11580F,136.98410F,},{39.195800F,51.957500F,},{34.262500F,51.346000F,},{381.14700F,390.58580F,},{491.52390F,213.96490F,},{288.60580F,536.49710F,}, + }, + + { + {-133.0008F,-181.1299F,},{-84.55430F,-304.3680F,},{40.548600F,-157.9567F,},{-35.81290F,-86.14820F,},{-296.9231F,-235.1026F,},{-357.0671F,-316.6972F,},{-258.1654F,-349.4409F,},{-504.7979F,-113.4180F,}, + {-123.9764F,51.459200F,},{-224.7199F,-60.69300F,},{-89.06170F,-50.36220F,},{-100.2134F,190.61760F,},{-111.9099F,-529.1262F,},{-36.32900F,-101.2426F,},{-311.5327F,69.813400F,},{-318.3195F,-534.8423F,}, + {84.270600F,222.53200F,},{-0.942100F,28.769200F,},{213.25620F,65.535600F,},{97.994500F,73.849700F,},{30.130700F,19.067100F,},{-368.2725F,229.34600F,},{148.61930F,481.44170F,},{418.05130F,44.184400F,}, + {45.929700F,-10.41460F,},{151.92930F,-55.78590F,},{7.0662000F,84.175000F,},{287.46830F,226.85480F,},{429.16810F,486.29900F,},{176.48300F,159.59660F,},{579.15160F,254.26680F,},{-68.04440F,453.68870F,}, + }, + + { + {-100.1363F,-189.9851F,},{-26.01900F,223.37290F,},{-2.345900F,62.933400F,},{-66.92170F,59.692200F,},{-463.9627F,-172.0395F,},{-422.4871F,43.361300F,},{-250.2149F,-359.6565F,},{-90.88240F,-37.63640F,}, + {-199.5678F,57.586700F,},{-112.5751F,-36.52960F,},{189.51950F,260.19820F,},{-238.2629F,-142.8535F,},{-139.3418F,-351.6046F,},{-336.3076F,-424.9823F,},{-30.62490F,-40.98700F,},{-103.6085F,-330.2230F,}, + {5.6849000F,7.1876000F,},{31.018100F,-149.6002F,},{-80.41110F,-100.6484F,},{119.56500F,103.01690F,},{11.508400F,27.501500F,},{13.331700F,25.835000F,},{457.61300F,261.34590F,},{52.531100F,28.992900F,}, + {203.48110F,71.918000F,},{51.549200F,32.858000F,},{141.30200F,-35.55590F,},{22.330400F,-70.91510F,},{349.22210F,178.05560F,},{447.99330F,289.70830F,},{82.904000F,107.10660F,},{348.09590F,102.38850F,}, + }, + + { + {37.061900F,181.46230F,},{3.6812000F,53.960400F,},{-142.5384F,-250.3814F,},{-155.8055F,67.085000F,},{-97.44510F,-42.54350F,},{-36.71330F,-123.6734F,},{-63.68890F,-97.47460F,},{-233.4995F,-274.8922F,}, + {-72.26240F,14.184600F,},{-183.6676F,-77.60290F,},{25.462700F,93.954700F,},{-40.64230F,-141.5510F,},{-85.75550F,-313.0151F,},{-338.1776F,-25.63660F,},{-363.6425F,-156.2840F,},{-67.37240F,-51.54950F,}, + {-58.24200F,-193.3120F,},{181.77980F,98.461400F,},{-70.01130F,-27.99830F,},{171.39450F,112.01820F,},{321.84770F,218.43910F,},{12.987700F,52.170200F,},{22.943500F,52.400800F,},{34.529100F,56.928800F,}, + {72.765700F,16.633700F,},{26.847700F,-102.3211F,},{104.45050F,-37.68410F,},{15.601300F,31.425000F,},{32.724900F,50.955400F,},{264.88060F,147.81980F,},{316.65590F,175.13690F,},{359.29350F,211.19690F,}, + } +}; + +const float SN_TCVQ_CB_SUB1[2][128][2] = +{ + { + {-249.7201F,40.935000F,},{-190.5588F,-175.3474F,},{-207.0069F,-316.9469F,},{-163.5806F,-247.6570F,},{-304.9679F,-414.6172F,},{-228.6147F,150.62910F,},{-195.6332F,-287.7428F,},{-190.9146F,-284.4862F,}, + {-274.4084F,-267.7108F,},{-199.2563F,-297.6162F,},{-152.2094F,-112.0928F,},{-148.0732F,-148.0190F,},{-223.7592F,-331.2033F,},{-227.6105F,-303.8584F,},{-195.2056F,-316.4586F,},{-262.2246F,-164.0172F,}, + {-201.5461F,313.27600F,},{-103.5079F,-192.2481F,},{-204.4250F,-221.9848F,},{-76.03550F,1125.8286F,},{-234.5633F,-67.04640F,},{-221.8844F,-339.4012F,},{-194.2347F,258.93820F,},{-251.0932F,-362.9766F,}, + {-135.0324F,-147.6629F,},{-98.67180F,-122.1392F,},{-163.4477F,232.42880F,},{-93.88090F,-181.8259F,},{-165.4640F,-213.2693F,},{-217.3162F,-119.1242F,},{-194.1371F,958.06900F,},{-176.2805F,-91.93370F,}, + {-176.7314F,-261.5485F,},{-143.7121F,-243.8883F,},{-148.1108F,-258.7831F,},{-118.9980F,-33.07910F,},{-214.2710F,155.74650F,},{-213.2181F,-251.6092F,},{-188.9855F,-166.4937F,},{-151.3290F,-213.3292F,}, + {-127.0467F,-214.8412F,},{-89.61480F,46.211900F,},{-32.48210F,392.23270F,},{-46.92120F,181.57460F,},{-113.0420F,-86.90470F,},{-201.7185F,60.547200F,},{-187.6557F,583.69500F,},{-161.9915F,53.907100F,}, + {-163.7852F,-39.11590F,},{-135.6215F,426.20040F,},{-169.3460F,29.788000F,},{-53.86960F,-113.5168F,},{-169.7033F,-280.7249F,},{-200.7809F,368.96580F,},{-184.8111F,-10.30170F,},{-56.33640F,-124.8625F,}, + {-146.8623F,587.82200F,},{-128.5270F,146.07030F,},{-123.4510F,-196.9422F,},{-22.75330F,-2.165400F,},{-105.3485F,-182.0782F,},{-198.0657F,-211.0788F,},{-181.9700F,-70.67280F,},{-100.1089F,-202.3083F,}, + {-76.38740F,283.61110F,},{-34.55220F,-139.0253F,},{-72.58420F,-153.9831F,},{11.931600F,-78.54570F,},{-30.11220F,-124.4284F,},{159.48950F,53.219000F,},{246.00260F,265.74940F,},{341.77020F,533.29990F,}, + {-78.13370F,-74.09460F,},{64.957700F,503.70880F,},{234.41130F,423.72930F,},{107.71920F,181.32610F,},{221.30620F,615.15230F,},{166.00660F,108.59500F,},{260.32690F,147.33710F,},{472.14910F,915.47850F,}, + {-71.05110F,-159.7740F,},{-37.06930F,-55.00150F,},{25.370000F,198.17320F,},{49.636800F,82.767400F,},{132.76160F,91.831000F,},{187.70590F,159.38410F,},{281.83160F,469.86870F,},{434.41380F,295.44770F,}, + {63.308300F,141.27590F,},{54.061700F,294.21520F,},{-65.88060F,-50.19340F,},{72.918300F,-12.50020F,},{26.680200F,-36.36690F,},{206.31630F,1119.4720F,},{306.99130F,308.17540F,},{487.14390F,573.31600F,}, + {-185.9491F,948.56350F,},{7.6792000F,52.069300F,},{0.9533000F,-92.26370F,},{166.57380F,312.24880F,},{153.64230F,230.62340F,},{207.81570F,610.05630F,},{315.18780F,208.51600F,},{550.64840F,410.71780F,}, + {-5.303600F,-102.8303F,},{32.350300F,-61.52830F,},{61.661100F,-14.86550F,},{240.57980F,214.70890F,},{329.97410F,212.08160F,},{209.52500F,92.791300F,},{356.06930F,594.08890F,},{638.68310F,525.05230F,}, + {45.061100F,-21.59060F,},{102.92090F,33.850300F,},{-49.38050F,91.477600F,},{147.03860F,74.554000F,},{179.35820F,1032.6932F,},{211.70910F,362.16160F,},{367.65010F,370.43750F,},{740.51460F,596.78260F,}, + {-7.303000F,724.00010F,},{177.80790F,142.93470F,},{213.00960F,110.61410F,},{324.63510F,326.04950F,},{475.33930F,330.59920F,},{218.87990F,211.76850F,},{395.71800F,253.94620F,},{744.16310F,915.21080F,}, + }, + + { + {-206.2475F,-95.90960F,},{-246.3082F,21.747300F,},{-280.0828F,-108.0290F,},{-15.81770F,518.20420F,},{-394.8764F,-268.7632F,},{-323.0682F,-133.0426F,},{-256.3050F,-624.6605F,},{-387.5242F,-608.8890F,}, + {-175.6982F,364.49880F,},{-210.8799F,823.99400F,},{-233.7273F,-494.8845F,},{-151.1368F,-199.8177F,},{-429.7681F,-772.9858F,},{-317.0574F,-240.9158F,},{-253.5630F,-57.26850F,},{-341.3936F,228.86220F,}, + {-281.1353F,-234.9062F,},{-109.7592F,-108.9512F,},{-225.6748F,247.90130F,},{65.929400F,31.226900F,},{-398.6104F,-52.49470F,},{-310.1716F,101.05650F,},{-249.3468F,320.56650F,},{-354.3097F,16.494000F,}, + {-277.0976F,-595.7491F,},{-188.3772F,523.29140F,},{-90.61150F,-382.6038F,},{40.513800F,903.74660F,},{-358.6226F,-460.4389F,},{-308.4215F,501.50370F,},{-237.7401F,882.27940F,},{-333.4506F,-381.9203F,}, + {-243.6204F,127.42030F,},{-75.62440F,666.13180F,},{-34.39620F,414.18390F,},{149.42210F,464.74430F,},{-162.1738F,5.7292000F,},{-308.1293F,-447.4555F,},{-236.0531F,158.90870F,},{-339.5853F,443.61930F,}, + {-196.4904F,-408.9761F,},{-212.8717F,-310.0990F,},{-50.11780F,183.79020F,},{32.747800F,249.33110F,},{-231.0534F,-589.2890F,},{-273.0207F,681.87410F,},{-234.5115F,-144.0888F,},{-306.1589F,641.38990F,}, + {-86.46690F,-261.1131F,},{-87.17310F,101.82230F,},{-32.13380F,-174.4069F,},{-147.5939F,-474.4269F,},{-289.3846F,378.38780F,},{-269.2454F,-337.1601F,},{-222.4565F,-232.3191F,},{-395.3117F,-157.5576F,}, + {-129.1616F,202.52440F,},{-68.35150F,307.27670F,},{-85.86670F,-1.271900F,},{-17.84710F,-328.4484F,},{-374.8384F,115.94100F,},{-260.0821F,26.484400F,},{-220.8236F,-532.8561F,},{-103.5023F,-8.057100F,}, + {253.68710F,299.43310F,},{99.798300F,140.48320F,},{132.05620F,-133.5340F,},{649.87660F,635.39510F,},{80.181400F,-88.45330F,},{377.92370F,11.967000F,},{475.26380F,362.41510F,},{663.04860F,481.53290F,}, + {125.93200F,564.57300F,},{125.00390F,699.34770F,},{161.43320F,82.756400F,},{388.46600F,81.488500F,},{299.40020F,103.03960F,},{380.48160F,344.82180F,},{479.55360F,94.266000F,},{656.04440F,313.06860F,}, + {29.314100F,121.82290F,},{294.35730F,556.75000F,},{136.00140F,242.52100F,},{251.75710F,185.26940F,},{393.60200F,297.97100F,},{404.77110F,790.64840F,},{528.97090F,207.17710F,},{629.35130F,831.62210F,}, + {63.429500F,363.62860F,},{344.74340F,320.98350F,},{386.67160F,190.67860F,},{240.19720F,-79.32440F,},{753.49380F,482.21660F,},{413.70600F,537.17310F,},{539.83860F,557.06520F,},{800.08120F,624.70540F,}, + {234.99860F,63.354100F,},{148.31920F,320.29180F,},{277.09270F,415.69540F,},{456.34320F,536.84340F,},{214.59280F,227.59820F,},{414.97560F,183.63070F,},{552.78850F,426.47270F,},{818.25130F,872.82940F,}, + {73.162100F,-246.0924F,},{46.113400F,-192.6345F,},{278.84370F,698.09160F,},{506.97560F,263.00580F,},{373.99370F,491.39020F,},{422.46610F,438.95710F,},{570.45150F,307.05580F,},{829.71370F,470.72770F,}, + {13.191300F,-73.93830F,},{20.994200F,-13.84500F,},{311.61780F,0.1251000F,},{291.89030F,929.08090F,},{554.80360F,450.16100F,},{436.77840F,653.52060F,},{582.72210F,893.43050F,},{943.77210F,632.08490F,}, + {452.66180F,701.26420F,},{152.06640F,-49.38430F,},{466.26870F,391.67580F,},{616.44670F,391.50590F,},{505.32310F,142.80040F,},{448.40750F,271.20620F,},{590.86500F,699.51280F,},{1072.8364F,818.59820F,}, + } +}; + +const float SN_TCVQ_CB_SUB2[2][64][2] = +{ + { + {-276.9441F,-237.9956F,},{-240.2330F,-400.5215F,},{-168.0618F,-125.3249F,},{-17.18770F,403.15550F,},{-410.3021F,-12.59720F,},{-401.4485F,-725.0255F,},{-378.9797F,-42.53260F,},{-223.4008F,-557.0544F,}, + {-221.8536F,60.339100F,},{-55.66380F,-73.67660F,},{-31.18270F,208.03420F,},{-14.70030F,-246.7032F,},{-152.7168F,497.98040F,},{-385.0540F,-285.9732F,},{-187.2953F,-199.3057F,},{-377.2813F,37.510600F,}, + {-330.8419F,-541.7451F,},{-349.7656F,237.12440F,},{-143.6113F,-363.2778F,},{-150.6399F,137.64050F,},{-113.2274F,3.7534000F,},{-325.2374F,36.570200F,},{-206.2273F,671.09990F,},{-82.19470F,45.011800F,}, + {-206.7859F,334.70390F,},{-283.9658F,-89.72660F,},{-50.10190F,12.089100F,},{51.980300F,29.857900F,},{-107.5514F,-303.3203F,},{-240.0561F,-533.9766F,},{-132.4427F,-5.247100F,},{-404.3979F,480.69020F,}, + {175.02300F,332.36460F,},{233.95710F,41.575700F,},{430.97410F,434.21950F,},{248.10350F,487.89410F,},{297.34090F,302.33480F,},{207.50040F,-27.75610F,},{281.96760F,184.93040F,},{299.70790F,161.32720F,}, + {100.61040F,107.78600F,},{135.17980F,-148.3558F,},{190.27510F,196.71720F,},{435.19680F,47.673600F,},{344.53480F,606.71120F,},{774.72370F,483.79650F,},{830.43490F,475.25730F,},{680.48470F,492.90810F,}, + {52.827400F,-98.47120F,},{84.402600F,213.06580F,},{195.15830F,-48.72150F,},{538.51170F,746.06460F,},{118.75210F,29.688100F,},{589.58180F,237.71470F,},{602.54520F,540.84130F,},{211.57020F,715.21980F,}, + {-93.92180F,-182.2399F,},{301.03150F,254.59590F,},{356.44790F,109.52270F,},{510.59830F,279.64910F,},{716.35110F,402.13940F,},{409.68830F,191.91910F,},{634.49470F,286.14310F,},{974.51980F,759.27030F,}, + }, + + { + {-284.8923F,-332.8634F,},{-230.3763F,119.65300F,},{-155.3427F,115.29910F,},{-12.21440F,5.0214000F,},{-257.4728F,-29.15460F,},{-235.7490F,-480.0754F,},{-202.7355F,-263.5491F,},{-321.4648F,18.445600F,}, + {-294.7758F,-80.74580F,},{-319.5455F,-165.6476F,},{-275.4234F,-501.8569F,},{-100.6586F,-323.5581F,},{-315.1043F,-276.3239F,},{-71.14410F,-278.0978F,},{-362.3847F,1.2822000F,},{-177.8863F,-448.9796F,}, + {-329.8557F,164.76280F,},{-232.8216F,-393.7935F,},{-196.9382F,-183.5567F,},{-179.3588F,287.84510F,},{-131.8585F,-284.4139F,},{-326.5890F,401.69820F,},{-239.3882F,485.08990F,},{-238.0748F,504.86220F,}, + {-111.2109F,13.897700F,},{-109.4982F,-165.7892F,},{39.187700F,49.242200F,},{-179.4392F,-52.56030F,},{-62.00650F,-58.79660F,},{-112.2621F,74.326700F,},{21.768200F,-102.5222F,},{-103.2492F,-123.8958F,}, + {-2.999300F,235.37390F,},{24.464500F,117.61140F,},{209.73120F,-60.41300F,},{112.71650F,222.38860F,},{75.577500F,-161.0497F,},{337.52400F,31.008400F,},{267.89200F,155.94850F,},{328.81130F,647.32140F,}, + {45.064300F,-82.58150F,},{237.66130F,132.73260F,},{4.8216000F,-253.8600F,},{277.79930F,430.66600F,},{39.273100F,199.22940F,},{139.99440F,-162.6469F,},{494.67560F,176.94150F,},{207.76570F,239.06330F,}, + {-100.0752F,-265.5905F,},{15.938200F,454.44360F,},{233.38360F,309.59500F,},{189.17920F,-23.98650F,},{185.76940F,100.17430F,},{675.38230F,486.70190F,},{472.14070F,579.37430F,},{575.03280F,434.82210F,}, + {152.01630F,129.07580F,},{68.559300F,-151.6359F,},{400.30690F,123.64090F,},{409.88600F,286.04450F,},{578.27810F,432.67370F,},{502.13100F,240.50900F,},{675.71990F,390.09750F,},{781.79560F,651.86880F,}, + } +}; + +const float SN_TCVQ_CB_SUB3[4][32][2] = +{ + { + {-147.1049F,-340.6287F,},{-158.8735F,313.47230F,},{-238.5137F,-175.2864F,},{-154.9957F,-34.27780F,},{-186.0273F,-415.2119F,},{-311.3175F,-97.27870F,},{-102.8572F,-258.6216F,},{-184.6271F,589.29930F,}, + {-279.5144F,121.03210F,},{-240.5628F,-383.6411F,},{-289.7553F,-518.3302F,},{77.502600F,128.26760F,},{-349.3453F,-608.3804F,},{-340.3397F,-491.6917F,},{-276.4456F,-539.0219F,},{-308.0319F,-331.5846F,}, + {25.470200F,-122.3889F,},{-23.10160F,-214.1888F,},{-0.632900F,26.756400F,},{142.04180F,-65.81690F,},{247.83350F,718.83400F,},{90.964100F,-139.8895F,},{485.82500F,582.96200F,},{641.17530F,379.95140F,}, + {79.709900F,202.16160F,},{199.84410F,369.96700F,},{239.35830F,94.047800F,},{423.70620F,282.88420F,},{317.36140F,127.76640F,},{337.65540F,94.710900F,},{217.43590F,208.86400F,},{764.35860F,815.30510F,}, + }, + + { + {-370.2650F,11.518200F,},{-323.1142F,-461.2694F,},{-135.8559F,-129.8608F,},{-14.09620F,84.290400F,},{-567.7608F,-453.9710F,},{-266.5970F,-249.6583F,},{-291.9762F,-592.7589F,},{-274.9419F,479.50260F,}, + {-208.9252F,-386.0126F,},{-214.9314F,-42.54240F,},{-186.7444F,227.07210F,},{-121.1719F,-272.9866F,},{-510.8044F,-87.79140F,},{-302.7620F,-617.7623F,},{-324.5998F,-240.0224F,},{-47.00890F,-86.66380F,}, + {12.928800F,78.024900F,},{47.313200F,-86.25450F,},{183.98160F,182.61360F,},{316.09290F,122.14870F,},{371.33160F,278.26560F,},{168.42590F,-225.2161F,},{775.28210F,548.66520F,},{642.86270F,346.51310F,}, + {51.413000F,448.60110F,},{112.29160F,198.86870F,},{133.44860F,-92.65510F,},{392.28070F,469.91310F,},{124.10680F,-283.7072F,},{583.68000F,286.00210F,},{521.95260F,271.37440F,},{931.01620F,692.52800F,}, + }, + + { + {-341.3078F,-146.2225F,},{-92.54280F,10.245600F,},{6.3784000F,340.04950F,},{-277.1624F,169.62960F,},{15.939400F,-300.4278F,},{-413.4964F,-527.4807F,},{25.713000F,81.620300F,},{-395.4344F,-535.2822F,}, + {-30.72550F,-179.8318F,},{-261.9265F,-367.7827F,},{-4.797200F,22.196000F,},{-63.59540F,-168.5926F,},{-320.1832F,-419.0108F,},{-346.2061F,-53.06720F,},{-127.6520F,-195.8498F,},{-21.51770F,-5.277200F,}, + {254.60570F,253.18280F,},{143.04340F,160.79980F,},{240.36910F,98.565800F,},{60.270300F,84.249700F,},{4.6884000F,24.362900F,},{88.200900F,69.498000F,},{659.95560F,473.75490F,},{293.20990F,70.108000F,}, + {11.956700F,71.243400F,},{109.95050F,-114.0644F,},{-138.5130F,-251.0179F,},{366.76410F,361.08470F,},{241.70930F,34.973000F,},{654.41940F,441.34520F,},{322.92560F,106.27710F,},{605.58650F,564.89110F,}, + }, + + { + {-142.8305F,-357.6638F,},{-135.1517F,-91.95450F,},{-202.7971F,-55.12860F,},{10.622800F,119.25650F,},{-99.61230F,-36.02510F,},{-247.5775F,-381.3310F,},{-193.0612F,-420.8008F,},{-130.4904F,-356.4558F,}, + {-220.9295F,27.109700F,},{40.264600F,84.888100F,},{-115.6413F,-362.4221F,},{-195.5899F,-402.2075F,},{-170.5517F,-393.0729F,},{-56.84850F,-56.71290F,},{-82.37190F,-78.84410F,},{24.433000F,140.77510F,}, + {63.625500F,-48.12080F,},{296.32420F,215.87390F,},{32.041200F,80.732200F,},{-69.63830F,-95.39770F,},{63.503200F,133.94610F,},{450.10010F,363.00900F,},{76.867200F,96.687600F,},{16.700500F,-57.93000F,}, + {66.165600F,144.72830F,},{-183.0404F,-407.2658F,},{268.25850F,163.71400F,},{219.75790F,95.572100F,},{411.11030F,329.38500F,},{101.35990F,133.20170F,},{415.09750F,248.72830F,},{337.80520F,255.31020F,}, + } +}; + + + +const float AR_SVQ_CB1[32][8] = +{ + {-0.339000F, 1.5012220F, 6.1853590F, 1.6161480F, 17.3955550F, -42.95738F, 3.77089400F, 65.3032460F}, + {-1.351974F, 0.8601210F, 3.1036570F, -4.589009F, -2.7011160F, 9.0795180F, 109.094322F, -18.118401F}, + {-0.051575F, 0.6542590F, 0.3318340F, 3.1915060F, -28.443743F, -15.45044F, 27.7376230F, -38.083717F}, + {-0.147188F, 0.7379020F, 16.596052F, 29.073309F, -15.221093F, 27.937109F, 10.4191210F, 3.21426900F}, + {-0.174719F, 0.3557820F, 3.3571020F, -2.442146F, 15.4601880F, -25.54004F, -21.377092F, -50.052696F}, + {-0.080591F, -0.031826F, 3.2809340F, -3.976039F, -16.756672F, 41.078621F, -1.8470560F, -49.312294F}, + {0.0404590F, -0.057671F, 4.6628590F, -1.082124F, -38.447117F, -7.158832F, -34.349442F, -28.560730F}, + {-0.191480F, 0.3673300F, -2.228691F, -4.763459F, -19.210003F, -70.05153F, -11.678687F, -5.9500840F}, + {-0.475299F, -0.021802F, 9.2386790F, 30.398779F, 9.72456700F, -26.96944F, -10.201661F, -5.2955280F}, + {-0.118115F, 0.3768040F, -0.202488F, -11.21918F, 8.99932300F, -25.32194F, -49.176136F, 13.3742710F}, + {0.6345730F, -1.451740F, -8.976882F, -2.891539F, -5.2668590F, -0.626124F, -8.6982240F, -1.6381660F}, + {-0.238382F, 0.4619150F, -0.689163F, 17.277664F, -21.009787F, -22.53389F, 41.9676740F, 23.4523370F}, + {0.1244690F, 0.2248090F, -1.099318F, -5.740384F, -21.103287F, 37.994751F, -39.226761F, 15.9438480F}, + {0.1411080F, -0.771317F, -31.48548F, 36.181248F, -5.2501020F, 7.1155840F, -12.062582F, -29.405684F}, + {-0.496825F, 0.9002190F, 0.1078140F, -1.812450F, 64.9175870F, -25.02316F, -18.672247F, 3.00326800F}, + {-0.877380F, -0.101788F, -10.38443F, -42.23261F, 14.1089240F, 1.3607690F, 4.64615900F, -31.426619F}, + {0.0982910F, 0.0130060F, -0.021137F, 1.7109680F, 32.0608750F, -0.580048F, 30.8528560F, 20.9283330F}, + {0.3703540F, -1.599935F, 1.9165930F, -3.437332F, -15.018585F, 112.87896F, 6.09581900F, 6.06509400F}, + {-0.239501F, 0.5997340F, 2.2582460F, -26.70808F, 23.7027260F, 26.134411F, -12.169220F, 39.0906330F}, + {1.1549010F, -2.333077F, 0.9387050F, -0.701751F, -0.2820180F, -2.514828F, -84.775269F, 106.470406F}, + {-0.120044F, 0.4967050F, -16.62750F, -24.21043F, -2.7719380F, -23.45862F, 10.9770750F, 30.4632150F}, + {-0.452348F, 0.9215980F, 4.0024690F, -0.181623F, 29.6472510F, 32.739918F, -21.457884F, -17.419983F}, + {-0.247916F, -0.922579F, 1.4429350F, 1.8360180F, -12.594628F, 29.236597F, 27.3443550F, 68.9287800F}, + {0.7650280F, -0.545622F, -0.185167F, 2.1660980F, 10.6230550F, 11.247939F, -85.990189F, -37.903763F}, + {-0.236738F, 0.4044940F, 35.338413F, -21.96892F, -4.0015380F, -6.422642F, 11.3325710F, 3.03891400F}, + {-0.526660F, 1.1162520F, -3.871234F, -0.059409F, 0.78312500F, -9.391847F, 18.9848520F, -131.23975F}, + {-0.433725F, 0.2320700F, -3.264241F, -3.579835F, 21.6186620F, -52.31819F, 41.0296550F, -17.336693F}, + {-0.150218F, 0.2436480F, -6.385384F, 26.976192F, 20.1004640F, 15.708211F, -20.112616F, 38.2443770F}, + {-0.024170F, 0.8500570F, -4.579786F, -12.50560F, -54.536289F, 19.191902F, 19.6398750F, 10.2497080F}, + {-0.124103F, 1.0465660F, 3.0224720F, 11.137490F, 30.1374190F, 9.5446160F, 29.8574750F, -40.261337F}, + {-0.196671F, 0.7005810F, -9.238495F, -7.187382F, 2.81278600F, 38.941822F, 36.7256850F, 1.86695500F}, + {0.0413730F, -0.259086F, 3.8143860F, 10.183937F, -33.918419F, -13.19506F, -21.927582F, 40.2238810F}, +}; + +const float AR_SVQ_CB2[16][8] = +{ + {-14.44511F, -23.12155F, 81.241760F, -34.49714F, 21.0647720F, 22.618990F, -6.4248760F, -9.472386F}, + {-0.129507F, -38.33505F, 3.5780910F, -25.32102F, -71.163628F, -8.083008F, 7.34998800F, 3.5089460F}, + {-0.531659F, 42.984482F, -2.949942F, 23.185688F, 78.3983150F, 3.3631430F, -14.996096F, -8.493151F}, + {-0.553943F, 15.531711F, -8.511508F, -71.40907F, 18.1345100F, -63.29620F, -15.015837F, -2.255207F}, + {4.7402910F, 0.7143230F, -75.55894F, 25.115595F, -16.831573F, -18.81928F, 4.13968000F, 3.3929720F}, + {-32.50397F, 68.406067F, -3.199107F, -21.32696F, -25.471333F, 25.902178F, 10.0576690F, 2.3217050F}, + {11.180623F, 1.3522740F, 0.9572140F, -3.889576F, -39.069595F, 114.30133F, 29.1799030F, -4.798602F}, + {2.5571490F, -21.08170F, -29.49300F, -35.49685F, 24.4835700F, 46.452934F, -32.716568F, -32.81908F}, + {1.2645100F, 2.9239020F, 2.2633560F, 2.5141150F, -11.900713F, 5.8893120F, -68.704033F, 65.771515F}, + {-4.081663F, 17.567835F, 10.064315F, 22.194927F, -36.000233F, -26.37986F, -45.523380F, -52.28128F}, + {0.0228670F, -14.62688F, -13.12301F, -27.02922F, 41.2410550F, 21.242199F, 47.1964420F, 51.328987F}, + {-9.871984F, -24.99879F, 2.6157990F, 80.172798F, 0.43614800F, 36.480019F, 10.4512970F, 2.2055040F}, + {25.002769F, 10.773156F, 19.834276F, 2.9322950F, -2.5556860F, 6.9424410F, 10.6092970F, 0.1834710F}, + {-7.853089F, 17.244720F, 22.289469F, 30.428480F, -21.601667F, -66.57227F, 34.5492820F, 36.391033F}, + {4.8071940F, -49.02123F, 4.8164340F, 21.801281F, 39.0447200F, -62.45168F, -33.871502F, -1.336098F}, + {-2.572755F, -7.192194F, -2.623712F, -2.309371F, 14.2487590F, -21.16166F, 68.2372970F, -68.92265F}, +}; + + + +const float W_DTX_HO[HO_HIST_SIZE] = +{ + 0.2f, 0.16f, 0.128f, 0.1024f, 0.08192f, 0.065536f, 0.0524288f, 0.01048576f +}; +const float ENR_ATT[5] = +{ + 1.7938412f, 1.3952098f, 1.0962363f, 0.9965784f, 0.9965784f +}; +const float HO_ATT[5] = +{ + 0.5370318f, 0.6165950f, 0.6839116f, 0.7079458f, 0.7079458f +}; + +const int16_t uniform_model[] = { MAX_AR_FREQ, MAX_AR_FREQ / 2, 0 }; + + +/*-----------------------------------------------------------------* + * LSF quantization - mid-frame quantization tables + *-----------------------------------------------------------------*/ + +const float tbl_mid_gen_wb_2b[] = +{ + 0.4656f, 0.6281f, 0.7148f, 0.6457f, 0.6442f, 0.5957f, 0.5953f, 0.5216f, 0.4722f, 0.4609f, 0.4141f, 0.3861f, 0.3809f, 0.3685f, 0.4144f, 0.7097f, + 0.1809f, 0.1051f, 0.2402f, 0.3904f, 0.3790f, 0.4562f, 0.4577f, 0.5524f, 0.6081f, 0.5894f, 0.6131f, 0.6512f, 0.6503f, 0.6465f, 0.6216f, 0.4204f, + 0.4828f, 0.4701f, 0.1855f, 0.2034f, 0.1897f, 0.1691f, 0.1876f, 0.1558f, 0.1762f, 0.1863f, 0.1950f, 0.1997f, 0.2279f, 0.2492f, 0.3031f, 0.2513f, + 0.8591f, 0.9902f, 0.8941f, 0.8507f, 0.8395f, 0.8579f, 0.8529f, 0.8665f, 0.8549f, 0.8490f, 0.8456f, 0.8310f, 0.8161f, 0.7884f, 0.7167f, 0.7381f +}; + +const float tbl_mid_gen_wb_4b[] = +{ + 0.6754f, 0.6266f, 0.2594f, 0.4293f, 0.5988f, 0.6866f, 0.7737f, 0.8446f, 0.8367f, 0.7757f, 0.6525f, 0.4878f, 0.4399f, 0.6822f, 0.8499f, 0.9169f, + 0.5150f, 0.5075f, 0.5972f, 0.7730f, 0.7064f, 0.3579f, 0.3356f, 0.2816f, 0.4175f, 0.5651f, 0.6825f, 0.7629f, 0.8104f, 0.8879f, 0.9649f, 1.0229f, + 0.1213f, 0.0451f, 0.3574f, 0.6272f, 0.5909f, 0.7193f, 0.6508f, 0.6297f, 0.4830f, 0.3821f, 0.4058f, 0.6131f, 0.6461f, 0.4852f, 0.3038f, 0.1367f, + 0.1303f, 0.3017f, 0.7760f, 0.5108f, 0.3865f, 0.3936f, 0.4859f, 0.6171f, 0.6062f, 0.5887f, 0.4692f, 0.2842f, 0.1756f, 0.1119f, 0.3070f, 1.0069f, + 0.4625f, 0.1159f, 0.0638f, 0.2087f, 0.2359f, 0.4036f, 0.4013f, 0.5520f, 0.6631f, 0.6459f, 0.6890f, 0.7467f, 0.7527f, 0.7255f, 0.6874f, 0.2549f, + 0.9602f, 1.0056f, 0.7894f, 0.4936f, 0.4631f, 0.5603f, 0.5964f, 0.6598f, 0.7327f, 0.8236f, 0.8793f, 0.8986f, 0.8523f, 0.7516f, 0.4876f, 0.2617f, + 0.3464f, 0.8811f, 0.9676f, 0.9462f, 0.9284f, 0.9216f, 0.8469f, 0.8365f, 0.7655f, 0.7197f, 0.6851f, 0.6403f, 0.5936f, 0.4461f, 0.3832f, 0.7717f, + 0.5270f, 0.4135f, 0.1264f, 0.3417f, 0.3381f, 0.4151f, 0.3729f, 0.2742f, 0.2817f, 0.2233f, 0.1778f, 0.1230f, 0.1289f, 0.1093f, 0.0955f, 0.0132f, + 0.8746f, 0.9792f, 0.8386f, 0.7884f, 0.7704f, 0.6721f, 0.6808f, 0.5483f, 0.4803f, 0.4591f, 0.3960f, 0.3416f, 0.3050f, 0.2645f, 0.2381f, 0.5810f, + 0.7030f, 0.6592f, 0.1469f, 0.0839f, 0.0790f, 0.1176f, 0.1814f, 0.2442f, 0.3660f, 0.3881f, 0.4437f, 0.5245f, 0.5451f, 0.4541f, 0.3998f, 0.5842f, + 0.1284f, 0.2200f, 0.7487f, 0.7905f, 0.8393f, 0.8522f, 0.8766f, 0.8915f, 0.8712f, 0.8590f, 0.8882f, 0.8786f, 0.8529f, 0.8689f, 0.8129f, 0.7096f, + 0.4999f, 0.7661f, 0.7385f, 0.5921f, 0.3904f, 0.6033f, 0.3976f, 0.1778f, 0.1621f, 0.0616f, 0.0683f, 0.1798f, 0.4865f, 0.7124f, 0.7046f, 0.8980f, + 0.8318f, 0.9070f, 0.4943f, 0.3149f, 0.5268f, 0.2983f, 0.3951f, 0.3793f, 0.3001f, 0.3530f, 0.3117f, 0.2348f, 0.2285f, 0.2525f, 0.4374f, -0.0230f, + 0.0504f, 0.0291f, 0.0302f, 0.0619f, 0.0609f, 0.0660f, 0.0991f, 0.0937f, 0.0830f, 0.0586f, 0.0509f, 0.0374f, 0.0701f, 0.0650f, 0.0893f, 0.2719f, + 1.0371f, 1.1706f, 1.0188f, 0.9709f, 0.9345f, 0.9754f, 0.9875f, 1.0269f, 1.0413f, 1.0355f, 1.0280f, 1.0279f, 1.0333f, 1.0062f, 0.9397f, 0.8962f, + 0.3767f, 0.3565f, 0.3735f, 0.3687f, 0.1498f, -0.0124f, -0.0510f, -0.1065f, -0.0239f, 0.1375f, 0.2156f, 0.3068f, 0.3234f, 0.4213f, 0.5425f, 0.2117f +}; + +const float tbl_mid_gen_wb_5b[] = +{ + 0.7947f, 0.9837f, 0.8671f, 0.7440f, 0.7914f, 0.7161f, 0.7356f, 0.7865f, 0.8401f, 0.8431f, 0.8563f, 0.8033f, 0.6896f, 0.4937f, 0.3437f, 0.3075f, + 0.4612f, 0.2591f, 0.4370f, 0.5153f, 0.3171f, 0.5653f, 0.3472f, 0.5987f, 0.6648f, 0.5528f, 0.6331f, 0.7603f, 0.7581f, 0.6949f, 0.7584f, -0.5701f, + 1.1047f, 1.2127f, 1.0304f, 0.9669f, 0.9211f, 0.9570f, 0.9737f, 1.0175f, 1.0595f, 1.0628f, 1.0624f, 1.0506f, 1.0449f, 1.0223f, 0.9471f, 0.7819f, + 0.5180f, 0.7050f, 0.3588f, 0.7186f, 0.4978f, 0.3805f, 0.6429f, 0.6934f, 0.5602f, 0.2931f, 0.0892f, 0.1234f, 0.2023f, 0.5777f, 0.8607f, 0.4873f, + 0.3062f, 0.3852f, 0.4086f, 0.1959f, 0.5432f, 0.5655f, 0.4243f, 0.7347f, 0.4984f, 0.4668f, 0.6266f, 0.7349f, 0.3971f, 0.1670f, 0.2119f, 1.6488f, + 0.7244f, 0.7778f, 0.5486f, 0.3610f, 0.5400f, 0.8138f, 0.9969f, 1.0270f, 0.9713f, 0.8714f, 0.6736f, 0.3734f, 0.3453f, 0.3443f, 0.3385f, 0.3996f, + 0.6084f, 0.6795f, 0.7118f, 0.5561f, 0.6997f, 0.8225f, 0.8165f, 0.5717f, 0.2765f, 0.5144f, 0.8840f, 1.2194f, 1.1934f, 1.1069f, 0.5796f, 0.2798f, + 0.3175f, 0.6022f, 0.3374f, 0.6010f, 0.4594f, 0.4490f, 0.6831f, 0.2538f, 0.7456f, 0.8330f, 0.6722f, 0.6850f, 0.8292f, 0.6778f, 0.1392f, 1.2199f, + 0.8647f, 0.8161f, 0.6485f, 0.6343f, 0.3797f, 0.6515f, 0.4315f, 0.3022f, 0.3024f, 0.2120f, 0.2551f, 0.4923f, 0.6934f, 0.7993f, 0.8923f, 1.4418f, + 0.9937f, 1.0501f, 0.8747f, 0.8225f, 0.7346f, 0.6469f, 0.6941f, 0.5764f, 0.5015f, 0.5440f, 0.4532f, 0.3822f, 0.3245f, 0.2851f, 0.2747f, 0.9828f, + 0.0887f, 0.2277f, 0.7413f, 0.4800f, 0.2756f, 0.2946f, 0.5888f, 0.6998f, 0.6227f, 0.7478f, 0.5725f, 0.1379f, 0.1431f, 0.1805f, 0.4829f, 0.8794f, + 0.7376f, 0.1250f, 0.6556f, 0.7320f, 0.6059f, 0.6806f, 0.6199f, 0.7132f, 0.8434f, 1.0333f, 1.0499f, 0.7492f, 0.6957f, 0.9826f, 1.2112f, 1.0154f, + 0.3330f, 0.1984f, 0.5798f, 0.6109f, 0.7079f, 0.6028f, 0.7755f, 0.3997f, 0.2174f, 0.3778f, 0.1806f, 0.3828f, 0.6677f, 0.1698f, -0.0764f, 0.2957f, + 0.5380f, 0.3941f, 0.1545f, 0.1817f, 0.1492f, 0.1176f, 0.1401f, 0.1443f, 0.1624f, 0.2161f, 0.1050f, 0.0465f, 0.0992f, 0.1548f, 0.2871f, 0.4829f, + 0.2054f, -0.0147f, 0.0101f, 0.1512f, 0.1155f, 0.1964f, 0.2419f, 0.3925f, 0.4822f, 0.5127f, 0.5489f, 0.5979f, 0.5555f, 0.4388f, 0.2863f, 0.2983f, + 0.1288f, 0.3915f, 0.9106f, 0.8310f, 0.8671f, 0.8521f, 0.9646f, 1.0005f, 0.8326f, 0.7556f, 0.7819f, 0.9050f, 0.9725f, 0.9163f, 0.8449f, 1.2049f, + 0.3862f, 0.9760f, 1.0310f, 1.0706f, 1.0307f, 1.0134f, 0.8999f, 0.8605f, 0.7434f, 0.6955f, 0.6213f, 0.5850f, 0.6099f, 0.5950f, 0.5231f, 0.8160f, + 0.4494f, 0.0389f, 0.0654f, 0.3875f, 0.5487f, 0.6697f, 0.7089f, 0.7020f, 0.6666f, 0.5399f, 0.4341f, 0.4210f, 0.6284f, 0.9229f, 0.7662f, 0.4618f, + 0.2426f, 0.5138f, 0.8489f, 0.7178f, 0.9105f, 0.9475f, 0.5281f, 0.6052f, 0.6291f, 0.2624f, 0.3647f, 0.3014f, 0.1434f, 0.1341f, 0.4881f, 0.4822f, + 0.1594f, 0.2811f, 0.9458f, 1.0056f, 0.7466f, 0.3447f, 0.2163f, 0.1379f, 0.3098f, 0.4083f, 0.6490f, 0.5827f, 0.4478f, 0.6663f, 0.6737f, 0.6829f, + 0.5054f, 0.5285f, 0.4076f, 0.3663f, 0.3258f, -0.0096f, -0.0710f, -0.2110f, -0.0830f, 0.1579f, 0.3359f, 0.4516f, 0.4427f, 0.5405f, 0.6043f, 0.3350f, + 0.6481f, 0.4408f, 0.1212f, 0.4304f, 0.2494f, 0.4807f, 0.2526f, 0.1751f, 0.5094f, 0.3185f, 0.3301f, 0.4504f, 0.4499f, 0.2312f, 0.1710f, -0.2053f, + 0.7435f, 0.5872f, 0.1184f, 0.1298f, 0.2084f, 0.3730f, 0.5612f, 0.8230f, 0.9030f, 0.8439f, 0.8983f, 0.9624f, 0.9242f, 0.8337f, 0.7372f, 0.4667f, + 0.8055f, 0.7332f, 0.1523f, 0.5286f, 0.8466f, 0.4619f, 0.4315f, 0.4763f, 0.3932f, 0.6572f, 0.6947f, 0.7321f, 0.7294f, 0.8217f, 1.1139f, 0.6574f, + 0.0249f, 0.0296f, 0.2452f, 0.4120f, 0.4165f, 0.4159f, 0.3285f, 0.3109f, 0.0730f, -0.0183f, 0.0082f, 0.0305f, 0.0754f, 0.1446f, 0.2425f, 0.1412f, + 0.6086f, 0.9737f, 0.8510f, 0.1865f, 0.0105f, 0.0343f, 0.1827f, 0.3665f, 0.5118f, 0.5408f, 0.5763f, 0.6490f, 0.7326f, 0.7545f, 0.8498f, 0.6690f, + 0.8440f, 0.9721f, 0.6413f, 0.3723f, 0.6549f, 0.3935f, 0.4616f, 0.3716f, 0.3139f, 0.3851f, 0.2738f, 0.1968f, 0.2633f, 0.3083f, 0.3398f, -0.1988f, + 0.8972f, 0.8181f, 0.2972f, 0.2365f, 0.3111f, 0.2415f, 0.3441f, 0.3439f, 0.2514f, 0.3043f, 0.4160f, 0.2861f, 0.1513f, 0.1437f, 0.1116f, 0.4593f, + 0.5325f, 0.3790f, -0.1778f, -0.2148f, 0.0383f, 0.1772f, 0.3178f, 0.2004f, 0.2038f, 0.2017f, 0.2756f, 0.3042f, 0.4692f, 0.5370f, 0.6363f, 0.0806f, + 0.0427f, 0.0436f, 0.0133f, 0.0101f, -0.0678f, -0.1081f, -0.0871f, -0.0717f, -0.0147f, 0.0031f, 0.0231f, 0.0648f, 0.0721f, 0.0178f, 0.0190f, 0.1752f, + 0.0608f, 0.0258f, 0.3738f, 0.8259f, 0.8728f, 0.9939f, 0.9193f, 0.9188f, 0.9589f, 0.8421f, 0.8073f, 0.7910f, 0.6457f, 0.5261f, 0.6520f, 0.5040f, + 0.3360f, 0.8495f, 0.8652f, 0.5642f, 0.3230f, 0.2924f, 0.2144f, 0.0397f, 0.0596f, 0.0316f, -0.0152f, -0.0704f, -0.0675f, 0.0751f, 0.0680f, 0.5636f +}; + + + +const float tbl_mid_voi_wb_1b[] = +{ + 0.5556f, 0.5614f, 0.5803f, 0.6146f, 0.6082f, 0.6382f, 0.6492f, 0.6840f, 0.6957f, 0.6899f, 0.6887f, 0.7039f, 0.7110f, 0.7170f, 0.7103f, 0.7392f, + 0.4658f, 0.4096f, 0.2833f, 0.3310f, 0.3540f, 0.3314f, 0.3406f, 0.3062f, 0.3059f, 0.3186f, 0.3194f, 0.2953f, 0.3098f, 0.3201f, 0.3667f, 0.3327f +}; +const float tbl_mid_voi_wb_4b[] = +{ + 0.5294f, 0.5170f, 0.4304f, 0.4984f, 0.4290f, 0.6661f, 0.3867f, 0.3063f, 0.5393f, 0.6129f, 0.1603f, 0.3603f, 0.6527f, 0.4752f, 1.0162f, 1.4353f, + 0.5102f, 0.4928f, 0.4840f, 0.4249f, 0.4917f, 0.4009f, 0.3227f, 0.5597f, 0.5797f, 0.3755f, 0.3920f, 0.1344f, 0.5097f, 0.9082f, 0.7013f, -0.5011f, + 0.5175f, 0.4830f, 0.5432f, 0.6072f, 0.6592f, 0.7000f, 0.7624f, 0.8040f, 0.9490f, 0.3295f, 0.3397f, 0.4241f, 0.1642f, -0.0386f, 0.6188f, 0.5986f, + 0.4839f, 0.4651f, 0.3263f, 0.3700f, 0.2745f, 0.3867f, 0.3851f, 0.5132f, 0.8931f, 0.8760f, 1.0596f, 0.8724f, 0.6003f, 0.5049f, 0.3836f, 0.3676f, + 0.4969f, 0.4703f, 0.4758f, 0.4850f, 0.4228f, 0.3513f, 0.7059f, 0.6520f, 0.2106f, 0.0978f, 0.1457f, 0.5174f, 0.8381f, 0.6043f, 0.0969f, 0.7654f, + 0.4801f, 0.4578f, 0.6019f, 0.4476f, 0.4376f, 0.3113f, 0.5259f, 0.7027f, 0.5497f, 0.8644f, 0.5973f, 0.1313f, 0.0133f, 0.2014f, 0.2304f, 1.0817f, + 0.5863f, 0.5892f, 0.6066f, 0.6727f, 0.7041f, 0.5282f, 0.6442f, 0.6023f, 0.8434f, 0.9365f, 0.6537f, 0.4810f, 1.2195f, 1.1746f, 0.9103f, 0.5129f, + 0.5512f, 0.5199f, 0.2983f, 0.5917f, 0.4551f, 0.5614f, 0.6073f, 0.7500f, 0.4989f, 0.5331f, 0.8576f, 0.6138f, 0.2936f, 0.8562f, 1.6316f, 0.7646f, + 0.5793f, 0.5562f, 0.6601f, 0.7161f, 0.5777f, 0.4990f, 0.4840f, 0.4064f, 0.5700f, 0.3790f, 0.7224f, 0.9551f, 0.7356f, 1.1203f, 0.2266f, 1.6149f, + 0.5042f, 0.5144f, 0.3071f, 0.4324f, 0.5917f, 0.4579f, 0.4522f, 0.2905f, 0.5115f, 0.5843f, 0.5678f, 0.6080f, 0.6961f, -0.0033f, -0.3615f, 0.0158f, + 0.5445f, 0.5767f, 0.6388f, 0.5713f, 0.7336f, 0.8816f, 0.7753f, 0.3746f, 0.0739f, 0.7244f, 0.6869f, 0.4683f, 0.4260f, 0.7398f, 0.4341f, 0.3155f, + 0.5650f, 0.5765f, 0.6671f, 0.5102f, 0.5444f, 0.7536f, 0.7220f, 0.8862f, 0.5741f, 0.5022f, 0.4807f, 1.1700f, 0.9869f, 0.4616f, 0.9180f, 0.0763f, + 0.6106f, 0.6861f, 0.7754f, 0.8440f, 0.8752f, 0.9422f, 0.9259f, 1.0264f, 1.0205f, 0.9623f, 0.8996f, 0.8816f, 0.8076f, 0.7327f, 0.6793f, 1.1467f, + 0.4955f, 0.5031f, 0.5100f, 0.5392f, 0.4195f, 0.1782f, 0.1258f, 0.0135f, 0.0714f, 0.2085f, 0.5150f, 0.6615f, 0.3156f, 0.3900f, 0.7506f, 0.3932f, + 0.4143f, 0.3389f, 0.2405f, 0.3305f, 0.3641f, 0.4799f, 0.3964f, 0.2111f, 0.0548f, -0.0133f, -0.0056f, -0.0572f, 0.0485f, 0.2417f, 0.2814f, 0.1920f, + 0.3978f, 0.2283f, 0.0296f, 0.0478f, 0.0913f, 0.0751f, 0.1447f, 0.1568f, 0.2758f, 0.3280f, 0.2700f, 0.2151f, 0.2654f, 0.2303f, 0.2255f, 0.2530f +}; + +const float tbl_mid_voi_wb_5b[] = +{ + 0.5105f, 0.4663f, 0.5008f, 0.6860f, 0.5005f, 0.5466f, 0.4820f, 0.6168f, 0.3562f, 0.3763f, 0.5162f, 0.4556f, 0.2225f, 0.7751f, 2.1033f, 0.5617f, + 0.5323f, 0.4977f, 0.2730f, 0.5039f, 0.3926f, 0.5704f, 0.7351f, 0.7961f, 0.7014f, 0.5227f, 0.3810f, 0.5430f, 0.7882f, 1.5348f, 0.5372f, 0.9516f, + 0.5161f, 0.4988f, 0.5340f, 0.5273f, 0.5461f, 0.5780f, 0.5404f, 0.6856f, 0.7294f, 0.0169f, 0.7186f, 0.4543f, 0.2812f, -0.4187f, 0.6098f, 0.7624f, + 0.5273f, 0.5303f, 0.4892f, 0.5282f, 0.4056f, 0.8344f, 0.4427f, 0.4065f, 0.3812f, 0.4848f, 0.2908f, 0.2198f, 0.7839f, 0.3860f, 1.1033f, 1.7247f, + 0.5119f, 0.5130f, 0.5387f, 0.3300f, 0.5096f, 0.5286f, 0.3192f, 0.9277f, 0.2096f, 0.4280f, 0.6923f, 0.8753f, 0.4327f, 0.2869f, -0.3342f, 0.8895f, + 0.5090f, 0.4776f, 0.5277f, 0.4664f, 0.5432f, 0.8258f, 0.9150f, 0.9896f, 0.9090f, 0.6744f, 0.3770f, 0.2396f, 0.2459f, 0.4065f, 0.1192f, 0.1223f, + 0.5595f, 0.5394f, 0.4375f, 0.5036f, 0.5839f, 0.6266f, 0.3891f, 0.6103f, 0.5874f, 0.5663f, 1.2253f, 0.8567f, 0.6243f, 0.6796f, 0.4019f, -0.7769f, + 0.4793f, 0.4995f, 0.3308f, 0.3321f, 0.2196f, 0.4284f, 0.5544f, 0.4090f, 0.5595f, 0.7174f, 0.7982f, 0.6268f, 0.1198f, 0.4918f, 0.8815f, 0.0723f, + 0.5645f, 0.5575f, 0.5454f, 0.5652f, 0.6970f, 0.6375f, 0.7182f, 0.3128f, 1.0318f, 0.3448f, 0.0133f, 0.7923f, 0.1477f, 0.3566f, 0.8901f, 0.8689f, + 0.5182f, 0.5078f, 0.6249f, 0.5317f, 0.6768f, 0.3704f, 0.1840f, 0.5101f, 0.7289f, 0.2379f, 0.4136f, 0.0748f, 0.6097f, 1.1010f, 0.8246f, -0.0766f, + 0.5988f, 0.6057f, 0.5528f, 0.8575f, 0.5987f, 0.5457f, 0.6180f, 0.4199f, 0.7749f, 0.7449f, 0.5272f, 0.5365f, 0.9174f, 0.7994f, -0.4513f, 0.7950f, + 0.5716f, 0.5605f, 0.6473f, 0.5607f, 0.5092f, 0.6426f, 0.7466f, 0.9075f, 0.5011f, 0.6658f, 0.3106f, 1.0367f, 0.7924f, 0.1091f, 1.0966f, -0.2937f, + 0.4433f, 0.4193f, 0.4868f, 0.5121f, 0.4497f, 0.2652f, 0.8222f, 0.5557f, -0.0414f, 0.0932f, 0.0376f, 0.4227f, 0.7474f, 0.3534f, 0.3456f, 0.6976f, + 0.5268f, 0.5018f, 0.2730f, 0.3274f, 0.1291f, 0.0664f, 0.3102f, 0.2047f, 0.4332f, 0.3378f, 0.4121f, 0.7203f, 0.8165f, 0.7094f, 0.8077f, 0.4042f, + 0.5477f, 0.5231f, 0.6094f, 0.4463f, 0.7288f, 0.5550f, 0.4852f, 0.7322f, 0.6085f, 0.8074f, 0.5868f, 0.2406f, 1.8234f, 0.5357f, 0.7511f, 0.4092f, + 0.5616f, 0.5749f, 0.6051f, 0.5437f, 0.5948f, 0.8798f, 0.7179f, 0.4225f, 0.2786f, 0.2233f, 0.6857f, 1.2117f, 1.2260f, 0.9426f, 0.3945f, 0.5651f, + 0.4840f, 0.4684f, 0.2549f, 0.5206f, 0.6155f, 0.4246f, 0.5436f, 0.3423f, 0.5080f, 0.5930f, 0.5267f, 0.5302f, 0.6339f, -0.2225f, -0.6138f, -0.1388f, + 0.4198f, 0.3463f, 0.3111f, 0.4959f, 0.3487f, 0.3243f, 0.3250f, 0.6211f, 1.2876f, 1.0880f, 0.8094f, 0.7806f, 0.6797f, 0.3919f, 0.2967f, 0.4151f, + 0.4972f, 0.4686f, 0.7088f, 0.6465f, 0.4597f, 0.2859f, 0.3155f, 0.1088f, 0.3838f, 0.3647f, 0.8309f, 0.5647f, 0.4517f, 0.7146f, 0.1884f, 1.9724f, + 0.5113f, 0.4938f, 0.5241f, 0.5526f, 0.4893f, 0.1725f, 0.5946f, 0.7423f, 0.4025f, 0.7991f, 0.6111f, -0.0446f, -0.2892f, 0.1679f, 0.6741f, 1.0726f, + 0.5833f, 0.5838f, 0.6032f, 0.5539f, 0.5489f, 0.3820f, 0.6023f, 0.5336f, 0.8758f, 0.8451f, 1.0522f, 1.2495f, 1.0576f, 1.2314f, 1.3334f, 0.8928f, + 0.6036f, 0.6123f, 0.7860f, 0.7755f, 0.8086f, 0.7890f, 0.8469f, 0.9213f, 0.8550f, 0.8890f, 0.9344f, 0.8727f, 0.9338f, 0.3353f, 0.4170f, 1.8179f, + 0.5830f, 0.6630f, 0.6732f, 0.7561f, 0.6958f, 0.6695f, 0.3412f, 0.6684f, 0.4912f, 1.0853f, 0.3577f, 0.9663f, 0.4184f, 0.9851f, 0.7226f, 1.6406f, + 0.5759f, 0.6087f, 0.5859f, 0.6453f, 0.8016f, 0.8000f, 0.8058f, 0.1508f, -0.1484f, 0.8003f, 0.7444f, 0.4837f, 0.5323f, 0.6758f, 0.6735f, 0.4804f, + 0.5787f, 0.5712f, 0.6827f, 0.5971f, 0.4699f, 0.6927f, 0.7919f, 0.7616f, 0.8621f, 1.4702f, 1.3328f, 0.2976f, 0.4855f, 0.8906f, 1.0309f, 0.8087f, + 0.5932f, 0.7057f, 0.8047f, 0.9032f, 0.9799f, 1.0813f, 0.9935f, 1.0927f, 1.0693f, 0.6721f, 0.7683f, 0.7983f, 0.7954f, 0.9188f, 0.9385f, 0.4985f, + 0.4977f, 0.4603f, 0.4455f, 0.4127f, 0.4110f, 0.4941f, 0.4759f, 0.5349f, 0.3683f, -0.2632f, -0.1787f, -0.2694f, 0.1011f, 0.5906f, 0.2528f, 0.2884f, + 0.4634f, 0.4195f, 0.4343f, 0.4690f, 0.2649f, 0.5263f, 0.3176f, 0.0849f, 0.2367f, 0.3145f, 0.1513f, 0.0400f, -0.0157f, -0.0790f, 0.2078f, 0.3531f, + 0.4901f, 0.4280f, 0.0448f, 0.1648f, 0.4062f, 0.4517f, 0.4672f, 0.2977f, 0.1751f, 0.4745f, 0.2782f, 0.1945f, 0.4484f, 0.6724f, 0.4767f, -0.3629f, + 0.4990f, 0.4870f, 0.4556f, 0.3975f, 0.5759f, 0.1679f, 0.0186f, -0.0121f, -0.0310f, 0.1391f, 0.4368f, 0.4048f, 0.2680f, 0.2939f, 0.6137f, 0.1220f, + 0.4576f, 0.3876f, 0.1800f, 0.0838f, 0.2449f, 0.2391f, 0.1902f, 0.3734f, 0.6560f, 0.6120f, 0.2977f, 0.2925f, 0.3012f, 0.2707f, 0.1258f, 0.9602f, + 0.2486f, 0.0856f, 0.0151f, 0.0339f, 0.0400f, 0.0309f, 0.0806f, 0.0645f, 0.1008f, 0.0578f, 0.0978f, 0.0977f, 0.1286f, 0.1623f, 0.0981f, 0.1181f +}; + +const float tbl_mid_unv_wb_4b[] = +{ + 0.6335f, 0.3837f, 0.0061f, 0.3077f, 0.6323f, 0.7715f, 0.4749f, 0.4108f, 0.4372f, 0.4293f, 0.4158f, 0.3722f, 0.3496f, 0.1979f, 0.2359f, -0.1160f, + 0.8317f, 0.8118f, 0.2606f, 0.1187f, 0.0552f, 0.1774f, 0.3932f, 0.2072f, 0.3864f, 0.5424f, 0.7232f, 0.7687f, 0.4769f, 0.3494f, 0.4378f, 0.5646f, + 0.3911f, 0.3263f, 0.7933f, 0.5272f, 0.1287f, 0.0682f, 0.5376f, 0.7098f, 0.6191f, 0.8087f, 0.5485f, 0.3026f, 0.2164f, 0.1960f, 0.2562f, 1.0169f, + 0.2349f, 0.3254f, 0.5092f, 0.6735f, 0.7200f, 0.8835f, 0.8933f, 0.9395f, 0.8850f, 0.7653f, 0.7524f, 0.7371f, 0.6408f, 0.5230f, 0.5062f, 0.3452f, + 0.3460f, 0.0962f, 0.0094f, 0.2461f, 0.2226f, 0.3936f, 0.4201f, 0.5459f, 0.7673f, 0.8199f, 0.8280f, 0.8231f, 0.8197f, 0.8607f, 0.8010f, 0.3089f, + 0.7795f, 0.6877f, 0.7032f, 0.6328f, 0.4300f, 0.5229f, 0.2279f, 0.1276f, 0.0707f, 0.1435f, 0.2128f, 0.3172f, 0.6441f, 0.6792f, 0.6553f, 0.9661f, + 0.2191f, 0.1685f, 0.6328f, 1.1384f, 0.9794f, 0.3831f, 0.1536f, 0.2111f, 0.4062f, 0.4802f, 0.6310f, 0.6891f, 0.6434f, 0.7195f, 0.6825f, 0.6281f, + 0.7000f, 0.7134f, 1.0741f, 1.0685f, 0.6870f, 0.6970f, 0.6415f, 0.5947f, 0.6529f, 0.4188f, 0.3670f, 0.3035f, 0.1731f, 0.1189f, 0.1361f, 0.2484f, + 0.5120f, 1.0280f, 0.2212f, 0.7419f, 0.3666f, 0.4217f, 0.8202f, 0.9157f, 0.2588f, 0.2309f, 0.3245f, 0.2828f, 0.2803f, 0.7001f, 0.7999f, 0.5475f, + 0.9854f, 1.3984f, 0.7880f, 0.6188f, 0.6003f, 0.6025f, 0.5882f, 0.6020f, 0.7360f, 0.7624f, 0.7677f, 0.8184f, 0.8239f, 0.6515f, 0.5525f, 0.4851f, + 0.4527f, 0.6817f, 0.5962f, -0.1834f, 0.5938f, 0.2848f, 0.0740f, 0.7295f, 0.7859f, 0.2945f, 0.2364f, 0.4472f, 0.6828f, 0.8532f, 0.7874f, 0.4340f, + 0.4691f, -0.8407f, 0.4513f, 0.4736f, 0.5430f, 0.5205f, 0.7277f, 0.5125f, 0.4374f, 0.4812f, 0.4402f, 0.4600f, 0.5441f, 0.5339f, 0.5000f, 0.5523f, + 0.3114f, 0.8277f, 0.8566f, 0.3543f, 1.1264f, 1.0654f, 0.8704f, 0.2286f, 0.2817f, 0.5363f, 0.4860f, 0.4854f, 0.4885f, 0.4981f, 0.5884f, 0.6849f, + 0.0269f, -0.0212f, -0.0053f, -0.0662f, 0.0548f, 0.1794f, 0.2147f, 0.2311f, 0.1580f, 0.1215f, 0.0883f, 0.0883f, 0.0939f, 0.1213f, 0.1671f, 0.5387f, + 0.2015f, 0.2757f, 0.3759f, 0.3556f, 0.1435f, -0.0599f, -0.1540f, -0.1010f, -0.0265f, 0.1109f, 0.1375f, 0.2138f, 0.2321f, 0.2154f, 0.3242f, 0.0302f, + 0.6567f, 0.8920f, 0.9432f, 0.9931f, 1.0095f, 1.0340f, 1.0733f, 1.0465f, 1.0174f, 1.0278f, 0.9835f, 0.9231f, 0.8690f, 0.9104f, 0.8308f, 0.9015f +}; + +const float tbl_mid_unv_wb_5b[] = +{ + 0.7613f, 0.7719f, 0.1405f, 0.0932f, 0.5149f, 0.7991f, 1.0299f, 1.0621f, 0.9101f, 0.8061f, 0.5653f, 0.3541f, 0.3723f, 0.2189f, 0.2387f, 0.2759f, + 0.6765f, 0.5271f, 0.6522f, 0.6740f, 0.7323f, 0.6686f, 0.6427f, 0.6389f, 0.5635f, 0.4064f, 0.4204f, 0.2217f, -0.0540f, 0.0055f, -0.0003f, 1.0891f, + 0.7776f, 1.0019f, 0.8036f, 0.6873f, 0.6593f, 0.6663f, 0.6333f, 0.6830f, 0.8102f, 0.8412f, 0.8499f, 0.8505f, 0.8562f, 0.7727f, 0.6647f, 0.3785f, + 0.3357f, 0.3489f, 0.6355f, 0.5608f, 0.4041f, 0.4265f, 0.3007f, 0.4162f, 0.4157f, 0.7509f, 0.9377f, 1.0489f, 0.5420f, 0.4535f, 0.3596f, -0.5336f, + 0.1412f, 0.0807f, 0.4569f, 0.7835f, 0.9173f, 1.0155f, 0.9137f, 0.8909f, 0.9678f, 0.9173f, 0.8315f, 0.6923f, 0.6220f, 0.6253f, 0.6100f, 0.4810f, + 0.6266f, 0.4207f, 0.3287f, 0.1977f, 0.2270f, 0.3251f, 0.5619f, 0.7677f, 0.9096f, 0.8856f, 0.9169f, 0.9138f, 1.0827f, 1.0625f, 1.0292f, 0.8096f, + 0.3048f, 0.8186f, 0.8589f, 0.4195f, 1.3250f, 1.0856f, 0.7364f, 0.3688f, 0.3584f, 0.5818f, 0.5060f, 0.5001f, 0.6320f, 0.5961f, 0.7227f, 0.9292f, + -0.0186f, -0.0066f, 0.4828f, 0.1428f, 0.6790f, 0.5731f, 0.1672f, 1.0123f, 0.3792f, 0.2371f, 0.6724f, 0.5954f, 0.4266f, 0.1336f, 0.1317f, 0.6593f, + 0.0588f, 0.0455f, 0.0269f, -0.0433f, -0.0288f, -0.0401f, -0.0520f, -0.0180f, 0.0298f, 0.0687f, 0.0692f, 0.1117f, 0.1235f, 0.0825f, 0.0981f, 0.3321f, + 0.0534f, 0.0996f, 0.3916f, 0.4144f, 0.3053f, 0.4633f, 0.5347f, 0.3117f, 0.0487f, 0.0038f, -0.0633f, -0.0580f, -0.0198f, 0.2142f, 0.3482f, 0.1270f, + 0.2523f, 0.2594f, 0.1522f, 0.2921f, 0.3506f, 0.2707f, 0.4275f, 0.4855f, 0.5752f, 0.5218f, 0.3174f, 0.2905f, 0.2825f, 0.3531f, 0.4339f, 1.7003f, + 0.4843f, -0.0775f, -0.2139f, 0.3039f, 0.0370f, 0.1183f, 0.1276f, 0.3465f, 0.6921f, 0.5677f, 0.6350f, 0.6406f, 0.5105f, 0.5348f, 0.6704f, 0.0065f, + 0.3712f, 0.3044f, 1.1308f, 0.6067f, 0.0439f, -0.4632f, 0.7686f, 0.7904f, 0.5471f, 0.8138f, 0.6427f, 0.3550f, 0.2907f, 0.3527f, 0.4539f, 0.6299f, + 0.4107f, 0.5028f, 0.7238f, 0.3862f, -0.0910f, 1.1435f, 0.2016f, -0.0878f, 0.7719f, 0.6242f, 0.2342f, 0.1538f, 0.3210f, 0.4376f, 0.2715f, 0.3880f, + 0.2006f, 0.1022f, 0.9856f, 1.0177f, 0.5172f, 0.2847f, 0.2673f, -0.1435f, 0.2402f, 0.1511f, 0.2873f, 0.5806f, 0.6432f, 0.7030f, 0.6057f, 0.6605f, + 0.9265f, 0.7899f, 0.3217f, 0.2282f, 0.1476f, 0.1837f, 0.2586f, 0.1089f, 0.2017f, 0.4537f, 0.6116f, 0.4845f, 0.2765f, 0.2964f, 0.4001f, 0.6137f, + 0.8898f, 1.0569f, 1.3651f, 1.0880f, 0.7427f, 0.8146f, 0.7277f, 0.4933f, 0.4686f, 0.3226f, 0.2556f, 0.3925f, 0.3609f, 0.3534f, 0.4061f, 0.6180f, + 0.7097f, -0.6082f, 0.1367f, 0.2578f, 0.5352f, 0.6455f, 0.7388f, 0.5255f, 0.5767f, 0.6179f, 0.4126f, 0.5127f, 0.7127f, 0.8766f, 0.7792f, 0.5824f, + 0.4750f, 0.8985f, 0.5078f, 0.1736f, 0.6068f, 0.1146f, 0.0343f, 0.4376f, 0.5880f, 0.1435f, -0.0373f, 0.0317f, 0.4657f, 1.0099f, 0.8661f, 0.1866f, + 0.9984f, 2.3701f, 0.4294f, 0.4330f, 0.5639f, 0.5165f, 0.4100f, 0.4402f, 0.6263f, 0.5455f, 0.6353f, 0.6244f, 0.6031f, 0.5825f, 0.5097f, 0.6299f, + 0.5541f, 0.6583f, 0.3303f, 0.6556f, 0.1792f, 1.0361f, 1.2642f, 0.3391f, 0.1741f, 0.0453f, 0.9879f, 0.9531f, 0.6357f, 0.7319f, 0.7423f, 0.6173f, + 0.3987f, 0.4249f, -0.6046f, -0.6882f, 0.4910f, 0.6716f, 0.4378f, 0.3805f, 0.3341f, 0.4671f, 0.4465f, 0.4801f, 0.4397f, 0.6006f, 0.6054f, 0.4252f, + 0.4695f, 1.1709f, 0.4102f, 0.7910f, 0.1483f, 0.3870f, 0.6370f, 1.0548f, 0.0811f, 0.3290f, 0.4093f, 0.1806f, 0.2059f, 0.7384f, 0.8635f, 0.5733f, + 0.2723f, 0.5489f, 0.8253f, 0.8299f, 0.7252f, 0.6647f, 0.9867f, 0.9697f, 0.7177f, 0.4570f, 0.3074f, 0.7912f, 0.8034f, 0.7441f, 0.7787f, -0.0162f, + 0.4101f, 0.7419f, 0.1299f, 1.6854f, 0.9991f, 0.4401f, 0.5282f, 0.4610f, 0.7582f, 0.6075f, 0.6122f, 0.5946f, 0.7110f, 0.3059f, 0.2600f, 0.6038f, + 0.6606f, 0.5502f, 0.1162f, 0.5003f, 0.6136f, 0.4821f, 0.4274f, 0.2171f, 0.2387f, 0.2595f, 0.1985f, 0.4479f, 0.5427f, -0.1344f, 0.0898f, -0.3306f, + 0.5889f, 0.9132f, 1.0845f, -0.3197f, -0.3362f, 0.0343f, 0.5076f, 0.3968f, 0.5618f, 0.3596f, 0.4779f, 0.7531f, 0.7416f, 0.4266f, 0.3987f, 0.5340f, + 0.7489f, 0.3257f, 0.8281f, 1.2605f, 0.8413f, 0.6688f, 0.1844f, 0.3748f, 0.7825f, 1.1222f, 0.8489f, 0.1323f, 0.3507f, 0.8581f, 0.9935f, 0.6921f, + 0.8856f, 0.7036f, 0.6252f, 0.7064f, 0.3820f, 0.6683f, -0.3320f, 0.4602f, -0.1010f, 0.1065f, 0.1942f, 0.5670f, 0.8811f, 0.6730f, 0.7053f, 0.7718f, + 0.1447f, -1.5991f, 0.6787f, 0.7162f, 0.5069f, 0.3163f, 0.6009f, 0.4212f, 0.2517f, 0.5189f, 0.5235f, 0.4147f, 0.4682f, 0.2541f, 0.2860f, 0.3872f, + 0.5444f, 0.5385f, 0.4809f, 0.5395f, 1.1487f, -0.3404f, -0.3082f, -0.3512f, -0.2280f, 0.3479f, 0.5481f, 0.4996f, 0.3860f, 0.4747f, 0.4639f, 0.4263f, + 0.7822f, 1.0122f, 1.0295f, 1.0430f, 1.0629f, 1.1165f, 1.1447f, 1.1354f, 1.1063f, 1.0919f, 1.0188f, 0.9977f, 0.8758f, 0.8855f, 0.7471f, 0.9058f +}; + + + +/*------------------------------------------------------------------------------* + * AVQ - RE8 tables + *------------------------------------------------------------------------------*/ + +const int16_t select_table22[5][9] = +{ + {1, 1, 1, 1, 1, 1, 1, 1, 1}, + {0, 1, 2, 3, 4, 5, 6, 7, 8}, + {0, 0, 1, 3, 6, 10, 15, 21, 28}, + {0, 0, 0, 1, 4, 10, 20, 35, 56}, + {0, 0, 0, 0, 1, 5, 15, 35, 70} +}; + +/* value of leader element */ +const int16_t vals_a[36][4] = +{ + {1}, {0,2}, {0,2}, {1,3}, {0,4}, {2,0}, {1,3}, {0,2,4}, + {2}, {1,3}, {2,0,4}, {0,4}, {1,5}, {1,3}, {2,0,4}, {0,2,4}, + {1,3,5}, {0,2,6}, {0,4}, {0,2,6}, {0,2,4,6}, {1,7}, {0,8}, {0,6}, + {0,2,8}, {0,4,8}, {1,9}, {0,2,10}, {0,8}, {0,6,10}, {0,12}, {0,4,12}, + {0,10}, {0,2,14}, {0,8,12}, {0,16} +}; + +/* code parameter for every leader */ +const int16_t vals_q[36][4] = +{ + {7,1}, {2,2,2}, {4,2,4}, {7,2,1}, {1,2,1}, {6,2,2}, {7,2,2}, {3,3,3,1}, + {8,1}, {7,2,3}, {5,3,4,1}, {2,2,2}, {7,2,1}, {7,2,4}, {7,3,2,1}, {4,3,4,2}, + {7,3,2,1}, {2,3,2,1}, {3,2,3}, {4,3,4,1}, {3,4,3,2}, {7,2,1}, {1,2,1}, {2,2,2}, + {3,3,3,1}, {2,3,2,1}, {7,2,1}, {2,3,2,1}, {2,2,2}, {2,3,2,1}, {1,2,1}, {2,3,2,1}, + {2,2,2}, {2,3,2,1}, {2,3,2,1}, {1,2,1} +}; + +/* codebook start address for every leader */ +const uint16_t Is[36] = +{ + 0, 128, 256, 1376, 240, 0, 1792, 2400, 5376, 5632, 12800, 3744, + 21760, 22784, 31744, 38912, 45632, 3856, 52800, 53248, 57728, 60416, 4080, 61440, + 61552, 62896, 63120, 64144, 64368, 64480, 64704, 64720, 64944, 65056, 65280, 65504 +}; + +/* A3 - Number of the absolute leaders in codebook Q3 */ +const int16_t AA3[NB_LDQ3] = +{ + 0, 1, 4, 2, 3, 7, 11, 17, 22 +}; + +/* A4 - Number of the absolute leaders in codebook Q4 */ +const int16_t AA4[NB_LDQ4] = +{ + 5, 6, 8, 9, 10, 12, 13, 14, 15, + 16, 18, 19, 20, 21, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35 +}; + +/* I3 - Cardinality offsets for absolute leaders in Q3 */ +const uint16_t II3[NB_LDQ3] = +{ + 0, 128, 240, 256, 1376, 2400, 3744, 3856, 4080 +}; + +/* I4 - Cardinality offset for absolute leaders in Q4 */ +const uint16_t II4[NB_LDQ4] = +{ + 0, 1792, 5376, 5632, 12800, 21760, 22784, 31744, 38912, + 45632, 52800, 53248, 57728, 60416, 61440, 61552, 62896, 63120, + 64144, 64368, 64480, 64704, 64720, 64944, 65056, 65280, 65504 +}; + + /* Position of the first absolute leader on a spherical shell (or sphere) */ +const int16_t Da_pos[NB_SPHERE] = +{ + 0, 2, 5, 8, 13, 18, 20, 22, 23, 25, 26, 27, 27, 28, 28, 28, + 29, 30, 31, 31, 32, 32, 32, 32, 32, 34, 35, 35, 35, 35, 35, 35 +}; + +/* Number of absolute leaders on a spherical shell */ +const int16_t Da_nb[NB_SPHERE] = +{ + 2, 3, 3, 5, 5, 2, 2, 1, 2, 1, 1, 0, 1, 0, 0, 1, + 1, 1, 0, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1 +}; + +/* Identification code of an absolute leader */ +const int16_t Da_id[NB_LEADER] = +{ + 0x0001, 0x0004, 0x0008, 0x000B, 0x0020, 0x000C, 0x0015, 0x0024, + 0x0010, 0x001F, 0x0028, 0x0040, 0x004F, 0x0029, 0x002C, 0x0044, + 0x0059, 0x00A4, 0x0060, 0x00A8, 0x00C4, 0x012D, 0x0200, 0x0144, + 0x0204, 0x0220, 0x0335, 0x04E4, 0x0400, 0x0584, 0x0A20, 0x0A40, + 0x09C4, 0x12C4, 0x0C20, 0x2000 +}; + +/* Codebook number for each absolute leader */ +const int16_t Da_nq[NB_LEADER+2] = +{ + 2, 2, 3, 3, 2, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, 4, + 4, 3, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 0, 100 +}; + + +/*------------------------------------------------------------------------------* + * SWB TBE tables + *------------------------------------------------------------------------------*/ + +const int16_t skip_bands_SWB_TBE[NUM_SHB_SUBFR+1] = {0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320}; /* bands for SWB TBE quantisation */ +const int16_t skip_bands_WB_TBE[NUM_SHB_SUBFR/2+1] = {0, 10, 20, 30, 40, 50, 60, 70, 80}; /* bands for WB TBE quantisation */ + +const float interpol_frac_shb[NB_SUBFR*2] = { 0.7f, 0.3f, 0.4f, 0.6f, 0.1f, 0.9f, 0.0f, 1.0f }; + +/* All pass filter coeffs for interpolation and decimation by a factor of 2 */ +const float AP1_STEEP[ALLPASSSECTIONS_STEEP] = +{ 0.06056541924291f, 0.42943401549235f, 0.80873048306552f }; + +const float AP2_STEEP[ALLPASSSECTIONS_STEEP] = +{ 0.22063024829630f, 0.63593943961708f, 0.94151583095682f }; + +const float cos_fb_exc[32] = +{ + 9.536743164062500e-007f,9.353497034680913e-007f,8.810801546133007e-007f,7.929511980364623e-007f,6.743495646333031e-007f,5.298330165715015e-007f,3.649553264040151e-007f,1.860525884467279e-007f, + 0.000000000000000e+000f,-1.860526737118562e-007f,-3.649554116691434e-007f,-5.298331302583392e-007f,-6.743496214767220e-007f,-7.929512548798812e-007f,-8.810802114567196e-007f,-9.353497603115102e-007f, + -9.536743164062500e-007f,-9.353497034680913e-007f,-8.810801546133007e-007f,-7.929511411930434e-007f,-6.743495077898842e-007f,-5.298329597280826e-007f,-3.649552411388868e-007f,-1.860525173924543e-007f, + 0.000000000000000e+000f,1.860527589769845e-007f,3.649554969342717e-007f,5.298331871017581e-007f,6.743496783201408e-007f,7.929513117233000e-007f,8.810802683001384e-007f,9.353497603115102e-007f +}; + +const float recip_order[15] = +{ + 0.0000000f, 1.0000000f, 0.5000000f, 0.3333333f, 0.2500000f, + 0.2000000f, 0.1666667f, 0.1428571f, 0.1250000f, 0.1111111f, + 0.1000000f, 0.0909091f, 0.0833333f, 0.0769231f, 0.0714286f +}; + +const float STEPS[4] = { 0.00635f, 0.003175f, 0.0015875f, 0.00079375f}; + +const float Hilbert_coeffs[4*NUM_HILBERTS][HILBERT_ORDER1+1] = +{ + { 0.0f, 0.8740234375f, 0.0f, -1.87371826171875f, 0.0f, 1.0f}, /* num_Real[0] */ + {0.72613525390625f, 0.0f, -1.7236328125f, 0.0f, 1.0f, 0.0f}, /* num_Imag[0] */ + { 1.0f, 0.0f, -1.87371826171875f, 0.0f, 0.8740234375f, 0.0f}, /* den_Real[0] */ + { 1.0f, 0.0f, -1.7236328125f, 0.0f, 0.72613525390625f, 0.0f}, /* den_Imag[0] */ + {0.46820068359375f, 0.0f, -1.45599365234375f, 0.0f, 1.0f, 0.0f}, /* num_Real[1] */ + {0.15289306640625f, 0.0f, -1.10711669921875f, 0.0f, 1.0f, 0.0f}, /* num_Imag[1] */ + { 1.0f, 0.0f, -1.45599365234375f, 0.0f, 0.46820068359375f, 0.0f}, /* den_Real[1] */ + { 1.0f, 0.0f, -1.10711669921875f, 0.0f, 0.15289306640625f, 0.0f} /* den_Imag[1] */ +}; + +/* Overlap add window for SHB excitation used in analysis and synthesis */ +const float window_shb[L_SHB_LAHEAD]= /* sin, 1, sin */ +{ + 4.618346E-02f, 1.381564E-01f, 2.289505E-01f, 3.177914E-01f, 4.039210E-01f, 4.866045E-01f, 5.651364E-01f, 6.388468E-01f, 7.071068E-01f, 7.693340E-01f, + 8.249975E-01f, 8.736224E-01f, 9.147939E-01f, 9.481606E-01f, 9.734381E-01f, 9.904104E-01f, 9.989330E-01f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f +}; + +/* Upsampled overlap add window for SHB excitation used transition generation */ +const float window_shb_32k[2*L_SHB_LAHEAD]= +{ + 4.618346E-02f, 9.216993E-02f, 1.381564E-01f, 1.835534E-01f, 2.289505E-01f, 2.733710E-01f, 3.177914E-01f, 3.608562E-01f, 4.039210E-01f, 4.452628E-01f, + 4.866045E-01f, 5.258704E-01f, 5.651364E-01f, 6.019916E-01f, 6.388468E-01f, 6.729768E-01f, 7.071068E-01f, 7.382205E-01f, 7.693340E-01f, 7.971658E-01f, + 8.249975E-01f, 8.493099E-01f, 8.736224E-01f, 8.942082E-01f, 9.147939E-01f, 9.314773E-01f, 9.481606E-01f, 9.607993E-01f, 9.734381E-01f, 9.819242E-01f, + 9.904104E-01f, 9.946717E-01f, 9.989330E-01f, 9.994665E-01f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f +}; + +/* Short overlap add window for SHB excitation used in anal and synth */ +const float subwin_shb[SHB_OVERLAP_LEN+1]= +{ + 0.000000000f, 0.006155830f, 0.024471742f, 0.054496738f, 0.095491503f, + 0.146446609f, 0.206107374f, 0.273004750f, 0.345491503f, 0.421782767f, + 0.500000000f, 0.578217233f, 0.654508497f, 0.726995250f, 0.793892626f, + 0.853553391f, 0.904508497f, 0.945503262f, 0.975528258f, 0.993844170f, + 1.000000000f +}; + +const float window_wb[L_SHB_LAHEAD/4]=/* sin, 1 */ +{ 2.289505E-001f, 5.651364E-001f, 8.249975E-001f, 9.734381E-001f, 1.000000e+000f}; + +/* Short overlap add window for SHB excitation used in anal and synth */ +const float subwin_wb[SHB_OVERLAP_LEN/2+1]= +{0.00000000f, 0.15643448f, 0.30901700f, 0.45399052f, 0.58778524f, 0.70710677f, 0.80901700f, 0.89100653f, 0.95105654f, 0.98768836f, 1.0000000f}; + +/* Window for calculating SHB LPC coeffs */ +const float win_lpc_shb[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5/8]= +{ + 0.0000337210f, 0.0001348794f, 0.0003034616f, 0.0005394449f, 0.0008427974f, 0.0012134782f, 0.0016514373f, 0.0021566156f, 0.0027289450f, 0.0033683483f, + 0.0040747393f, 0.0048480226f, 0.0056880940f, 0.0065948401f, 0.0075681387f, 0.0086078584f, 0.0097138590f, 0.0108859914f, 0.0121240975f, 0.0134280101f, + 0.0147975536f, 0.0162325430f, 0.0177327850f, 0.0192980770f, 0.0209282080f, 0.0226229582f, 0.0243820988f, 0.0262053927f, 0.0280925938f, 0.0300434477f, + 0.0320576912f, 0.0341350526f, 0.0362752518f, 0.0384779999f, 0.0407430000f, 0.0430699465f, 0.0454585255f, 0.0479084149f, 0.0504192842f, 0.0529907947f, + 0.0556225996f, 0.0583143439f, 0.0610656645f, 0.0638761903f, 0.0667455422f, 0.0696733332f, 0.0726591683f, 0.0757026449f, 0.0788033524f, 0.0819608725f, + 0.0851747795f, 0.0884446397f, 0.0917700121f, 0.0951504482f, 0.0985854920f, 0.1020746802f, 0.1056175421f, 0.1092136000f, 0.1128623686f, 0.1165633559f, + 0.1203160626f, 0.1241199826f, 0.1279746028f, 0.1318794033f, 0.1358338573f, 0.1398374315f, 0.1438895859f, 0.1479897739f, 0.1521374423f, 0.1563320319f, + 0.1605729768f, 0.1648597049f, 0.1691916381f, 0.1735681920f, 0.1779887763f, 0.1824527948f, 0.1869596453f, 0.1915087200f, 0.1960994051f, 0.2007310816f, + 0.2054031247f, 0.2101149041f, 0.2148657844f, 0.2196551248f, 0.2244822791f, 0.2293465964f, 0.2342474205f, 0.2391840904f, 0.2441559401f, 0.2491622991f, + 0.2542024921f, 0.2592758392f, 0.2643816562f, 0.2695192543f, 0.2746879405f, 0.2798870178f, 0.2851157847f, 0.2903735361f, 0.2956595627f, 0.3009731516f, + 0.3063135860f, 0.3116801456f, 0.3170721065f, 0.3224887415f, 0.3279293199f, 0.3333931079f, 0.3388793684f, 0.3443873616f, 0.3499163444f, 0.3554655711f, + 0.3610342931f, 0.3666217595f, 0.3722272163f, 0.3778499077f, 0.3834890752f, 0.3891439582f, 0.3948137938f, 0.4004978174f, 0.4061952622f, 0.4119053598f, + 0.4176273399f, 0.4233604308f, 0.4291038591f, 0.4348568502f, 0.4406186280f, 0.4463884155f, 0.4521654343f, 0.4579489052f, 0.4637380481f, 0.4695320822f, + 0.4753302259f, 0.4811316971f, 0.4869357134f, 0.4927414919f, 0.4985482494f, 0.5043552028f, 0.5101615687f, 0.5159665639f, 0.5217694055f, 0.5275693108f, + 0.5333654974f, 0.5391571836f, 0.5449435881f, 0.5507239304f, 0.5564974308f, 0.5622633107f, 0.5680207922f, 0.5737690989f, 0.5795074552f, 0.5852350873f, + 0.5909512225f, 0.5966550899f, 0.6023459200f, 0.6080229454f, 0.6136854001f, 0.6193325205f, 0.6249635449f, 0.6305777137f, 0.6361742697f, 0.6417524579f, + 0.6473115260f, 0.6528507242f, 0.6583693052f, 0.6638665247f, 0.6693416413f, 0.6747939164f, 0.6802226146f, 0.6856270037f, 0.6910063547f, 0.6963599419f, + 0.7016870434f, 0.7069869405f, 0.7122589184f, 0.7175022660f, 0.7227162760f, 0.7279002451f, 0.7330534742f, 0.7381752681f, 0.7432649359f, 0.7483217913f, + 0.7533451519f, 0.7583343404f, 0.7632886838f, 0.7682075137f, 0.7730901667f, 0.7779359842f, 0.7827443127f, 0.7875145034f, 0.7922459131f, 0.7969379034f, + 0.8015898416f, 0.8062011002f, 0.8107710572f, 0.8152990961f, 0.8197846062f, 0.8242269825f, 0.8286256258f, 0.8329799428f, 0.8372893461f, 0.8415532545f, + 0.8457710928f, 0.8499422922f, 0.8540662899f, 0.8581425298f, 0.8621704620f, 0.8661495432f, 0.8700792367f, 0.8739590124f, 0.8777883471f, 0.8815667242f, + 0.8852936341f, 0.8889685740f, 0.8925910483f, 0.8961605683f, 0.8996766527f, 0.9031388271f, 0.9065466245f, 0.9098995853f, 0.9131972572f, 0.9164391954f, + 0.9196249627f, 0.9227541293f, 0.9258262731f, 0.9288409798f, 0.9317978427f, 0.9346964630f, 0.9375364498f, 0.9403174198f, 0.9430389982f, 0.9457008176f, + 0.9483025192f, 0.9508437519f, 0.9533241731f, 0.9557434481f, 0.9581012506f, 0.9603972626f, 0.9626311744f, 0.9648026847f, 0.9669115005f, 0.9689573374f, + 0.9709399196f, 0.9728589795f, 0.9747142583f, 0.9765055057f, 0.9782324802f, 0.9798949488f, 0.9814926873f, 0.9830254801f, 0.9844931206f, 0.9858954107f, + 0.9872321612f, 0.9885031920f, 0.9897083316f, 0.9908474173f, 0.9919202956f, 0.9929268217f, 0.9938668599f, 0.9947402834f, 0.9955469743f, 0.9962868239f, + 0.9969597324f, 0.9975656090f, 0.9981043719f, 0.9985759486f, 0.9989802753f, 0.9993172977f, 0.9995869701f, 0.9997892562f, 0.9999241288f, 0.9999915697f +}; + +const float win_lpc_hb_wb[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5/32]= +{ + 0.000171338f, 0.001541333f, 0.004277569f, 0.008372546f, 0.01381504f, 0.020590133f, 0.028679254f, 0.038060234f, + 0.048707358f, 0.060591444f, 0.073679918f, 0.087936906f, 0.10332333f, 0.119797017f, 0.137312814f, 0.155822712f, + 0.175275976f, 0.195619285f, 0.216796882f, 0.238750718f, 0.26142062f, 0.284744452f, 0.308658284f, 0.33309657f, + 0.357992328f, 0.383277318f, 0.408882237f, 0.434736904f, 0.460770452f, 0.486911526f, 0.513088474f, 0.539229548f, + 0.565263096f, 0.591117763f, 0.616722682f, 0.642007672f, 0.66690343f, 0.691341716f, 0.715255548f, 0.73857938f, + 0.761249282f, 0.783203118f, 0.804380715f, 0.824724024f, 0.844177288f, 0.862687186f, 0.880202983f, 0.89667667f, + 0.912063094f, 0.926320082f, 0.939408556f, 0.951292642f, 0.961939766f, 0.971320746f, 0.979409867f, 0.98618496f, + 0.991627454f, 0.995722431f, 0.998458667f, 0.999828662f +}; + +const float ola_win_shb_switch_fold[L_SUBFR16k] = +{ + 0.009817319f, 0.029448173f, 0.049067674f, 0.068668259f, 0.088242371f, 0.107782463f, 0.127281003f, 0.146730474f, + 0.166123378f, 0.185452238f, 0.204709603f, 0.223888048f, 0.242980180f, 0.261978638f, 0.280876099f, 0.299665277f, + 0.318338928f, 0.336889853f, 0.355310901f, 0.373594970f, 0.391735011f, 0.409724030f, 0.427555093f, 0.445221326f, + 0.462715917f, 0.480032122f, 0.497163266f, 0.514102744f, 0.530844026f, 0.547380657f, 0.563706262f, 0.579814548f, + 0.595699304f, 0.611354407f, 0.626773822f, 0.641951603f, 0.656881899f, 0.671558955f, 0.685977112f, 0.700130812f, + 0.714014598f, 0.727623118f, 0.740951125f, 0.753993482f, 0.766745160f, 0.779201243f, 0.791356929f, 0.803207531f, + 0.814748483f, 0.825975333f, 0.836883753f, 0.847469539f, 0.857728610f, 0.867657010f, 0.877250911f, 0.886506616f, + 0.895420555f, 0.903989293f, 0.912209526f, 0.920078084f, 0.927591935f, 0.934748182f, 0.941544065f, 0.947976965f, + 0.954044402f, 0.959744037f, 0.965073672f, 0.970031253f, 0.974614869f, 0.978822751f, 0.982653279f, 0.986104976f, + 0.989176510f, 0.991866698f, 0.994174502f, 0.996099033f, 0.997639549f, 0.998795456f, 0.999566309f, 0.999951809f +}; + +/* Window for calculating whitening filter for SHB excitation */ +const float win_flatten[ L_FRAME16k/2]= +{ + 9.57802E-05f, 0.000383084f, 0.000861802f, 0.00153175f, 0.002392671f, 0.003444236f, 0.004686042f, 0.006117614f, + 0.007738401f, 0.009547785f, 0.011545071f, 0.013729494f, 0.016100218f, 0.018656334f, 0.021396862f, 0.024320754f, + 0.027426888f, 0.030714075f, 0.034181054f, 0.037826499f, 0.041649013f, 0.04564713f, 0.049819319f, 0.054163981f, + 0.058679453f, 0.063364004f, 0.068215839f, 0.0732331f, 0.078413864f, 0.083756147f, 0.089257901f, 0.094917019f, + 0.100731333f, 0.106698615f, 0.112816579f, 0.119082881f, 0.12549512f, 0.13205084f, 0.138747529f, 0.145582621f, + 0.152553498f, 0.159657489f, 0.166891873f, 0.174253877f, 0.181740681f, 0.189349417f, 0.197077169f, 0.204920978f, + 0.212877838f, 0.2209447f, 0.229118474f, 0.237396028f, 0.245774191f, 0.254249754f, 0.262819469f, 0.271480052f, + 0.280228187f, 0.28906052f, 0.297973669f, 0.306964218f, 0.316028723f, 0.325163712f, 0.334365684f, 0.343631114f, + 0.352956452f, 0.362338126f, 0.37177254f, 0.381256082f, 0.390785116f, 0.400355993f, 0.409965046f, 0.419608593f, + 0.42928294f, 0.43898438f, 0.448709196f, 0.458453663f, 0.468214047f, 0.477986609f, 0.487767604f, 0.497553287f, + 0.507339906f, 0.517123714f, 0.526900961f, 0.536667901f, 0.546420794f, 0.556155902f, 0.565869495f, 0.575557852f, + 0.585217262f, 0.594844023f, 0.604434447f, 0.61398486f, 0.623491603f, 0.632951034f, 0.642359529f, 0.651713483f, + 0.661009312f, 0.670243455f, 0.679412375f, 0.688512557f, 0.697540517f, 0.706492795f, 0.715365961f, 0.724156616f, + 0.732861391f, 0.741476953f, 0.75f, 0.758427267f, 0.766755524f, 0.774981583f, 0.78310229f, 0.791114534f, + 0.799015247f, 0.8068014f, 0.814470012f, 0.822018143f, 0.829442903f, 0.836741446f, 0.843910977f, 0.850948748f, + 0.857852063f, 0.864618278f, 0.871244799f, 0.87772909f, 0.884068664f, 0.890261093f, 0.896304006f, 0.902195086f, + 0.907932076f, 0.91351278f, 0.918935058f, 0.924196833f, 0.92929609f, 0.934230874f, 0.938999296f, 0.943599527f, + 0.948029807f, 0.952288437f, 0.956373785f, 0.960284288f, 0.964018446f, 0.967574828f, 0.970952073f, 0.974148887f, + 0.977164044f, 0.97999639f, 0.982644839f, 0.985108376f, 0.987386059f, 0.989477014f, 0.99138044f, 0.993095607f, + 0.99462186f, 0.995958613f, 0.997105353f, 0.998061642f, 0.998827114f, 0.999401474f, 0.999784503f, 0.999976054f +}; + +const float win_flatten_4k[ L_FRAME16k/8]= +{ + 0.000385482f, 0.003465772f, 0.00960736f, 0.018772382f, 0.030904332f, 0.045928413f, 0.063751996f, 0.084265194f, + 0.107341535f, 0.132838745f, 0.160599627f, 0.190453025f, 0.222214883f, 0.255689379f, 0.290670131f, 0.326941471f, + 0.364279775f, 0.402454839f, 0.441231301f, 0.480370092f, 0.519629908f, 0.558768699f, 0.597545161f, 0.635720225f, + 0.673058529f, 0.709329869f, 0.744310621f, 0.777785117f, 0.809546975f, 0.839400373f, 0.867161255f, 0.892658465f, + 0.915734806f, 0.936248004f, 0.954071587f, 0.969095668f, 0.981227618f, 0.99039264f, 0.996534228f, 0.999614518f +}; + +const float wb_bwe_lsfvq_cbook_8bit[256*6] = +{ + 0.064311408f, 0.10468847f, 0.15634165f, 0.20375369f, 0.28696818f, 0.40275119f, + 0.123011120f, 0.15468679f, 0.22408577f, 0.27191057f, 0.32490698f, 0.37368365f, + 0.062166951f, 0.10810068f, 0.20470853f, 0.26741467f, 0.32058192f, 0.38620580f, + 0.174916950f, 0.19449120f, 0.24146226f, 0.29131976f, 0.38403433f, 0.43426356f, + 0.061881055f, 0.10185221f, 0.16703630f, 0.24048992f, 0.31339988f, 0.37993594f, + 0.177282270f, 0.19826299f, 0.25380750f, 0.29369257f, 0.35085620f, 0.42745721f, + 0.074096108f, 0.12090045f, 0.17319672f, 0.23572965f, 0.34671734f, 0.40846492f, + 0.193731520f, 0.25350369f, 0.27155532f, 0.30359655f, 0.33746877f, 0.40740063f, + 0.108401970f, 0.13491719f, 0.17991717f, 0.21799053f, 0.30440233f, 0.40384627f, + 0.174536930f, 0.19361701f, 0.22834544f, 0.25644155f, 0.32851965f, 0.41061748f, + 0.107099060f, 0.13363550f, 0.17994689f, 0.22695679f, 0.35903688f, 0.43662047f, + 0.137970100f, 0.24785769f, 0.26827308f, 0.30078557f, 0.34276146f, 0.42785187f, + 0.066387915f, 0.12114685f, 0.23766229f, 0.29916662f, 0.34589517f, 0.39398126f, + 0.137657570f, 0.24889487f, 0.27118048f, 0.31891228f, 0.38713554f, 0.45651107f, + 0.128872750f, 0.16127981f, 0.21523141f, 0.25706016f, 0.34536624f, 0.44451874f, + 0.218467830f, 0.25571942f, 0.27589334f, 0.30889302f, 0.36007931f, 0.43548091f, + 0.056956662f, 0.09351124f, 0.14796259f, 0.22055691f, 0.34257293f, 0.42610824f, + 0.180505310f, 0.20235648f, 0.26672026f, 0.30524807f, 0.34745481f, 0.38838059f, + 0.101998340f, 0.13874827f, 0.19761236f, 0.28698298f, 0.36602473f, 0.40947282f, + 0.187859700f, 0.20997279f, 0.27259784f, 0.31595901f, 0.37782186f, 0.41948720f, + 0.080803553f, 0.15174572f, 0.23117477f, 0.28917899f, 0.36979528f, 0.42341956f, + 0.177685260f, 0.19914809f, 0.26693575f, 0.33390045f, 0.38670310f, 0.42635921f, + 0.123052730f, 0.15593820f, 0.23170087f, 0.28281293f, 0.34711335f, 0.43915513f, + 0.209470720f, 0.25584593f, 0.27727828f, 0.32496712f, 0.39502842f, 0.45856840f, + 0.111734840f, 0.14147902f, 0.20349777f, 0.25418848f, 0.31658104f, 0.37184560f, + 0.177056760f, 0.19666426f, 0.25464026f, 0.29941442f, 0.37334871f, 0.45296459f, + 0.109640340f, 0.13537075f, 0.20335155f, 0.26529530f, 0.35213594f, 0.43554990f, + 0.155959700f, 0.25239450f, 0.27483222f, 0.32663911f, 0.37442742f, 0.42423408f, + 0.060802584f, 0.098534495f, 0.17139797f, 0.27724784f, 0.34847788f, 0.40446891f, + 0.131805190f, 0.17878972f, 0.29302125f, 0.34778777f, 0.39172069f, 0.43333138f, + 0.117051780f, 0.14714169f, 0.25283080f, 0.31096928f, 0.35792401f, 0.40593001f, + 0.244642480f, 0.26542671f, 0.31064604f, 0.34894237f, 0.39502788f, 0.45113983f, + 0.057704683f, 0.10158624f, 0.18821861f, 0.25351465f, 0.33014694f, 0.43374062f, + 0.177105410f, 0.19658676f, 0.24332913f, 0.27865263f, 0.33845007f, 0.38627285f, + 0.085525863f, 0.16781621f, 0.24699003f, 0.29584215f, 0.34250327f, 0.39210727f, + 0.189876270f, 0.21305679f, 0.26289427f, 0.30053004f, 0.36670247f, 0.40832210f, + 0.077609843f, 0.14485938f, 0.23309675f, 0.28603452f, 0.33963436f, 0.41664103f, + 0.180406410f, 0.20188257f, 0.27483060f, 0.32204807f, 0.36496152f, 0.40626347f, + 0.109972660f, 0.13794764f, 0.23344532f, 0.30007610f, 0.37112553f, 0.45007031f, + 0.243211860f, 0.26638262f, 0.29846135f, 0.32926348f, 0.38096489f, 0.42680115f, + 0.115753390f, 0.14391596f, 0.21486068f, 0.26084368f, 0.32379458f, 0.41507919f, + 0.172120490f, 0.19028171f, 0.22318579f, 0.25543954f, 0.36796374f, 0.43638971f, + 0.114912990f, 0.14340870f, 0.20702577f, 0.29029375f, 0.38645739f, 0.43383786f, + 0.141428780f, 0.25522990f, 0.28059674f, 0.31690999f, 0.35024347f, 0.40617629f, + 0.075129960f, 0.14698488f, 0.26110380f, 0.31719769f, 0.36377356f, 0.41101429f, + 0.112868350f, 0.24334299f, 0.28096316f, 0.33454465f, 0.41219625f, 0.46410751f, + 0.114073120f, 0.14243275f, 0.23024102f, 0.32882107f, 0.39744618f, 0.44429863f, + 0.221774120f, 0.26274601f, 0.29020551f, 0.34374641f, 0.39126416f, 0.44235948f, + 0.080079738f, 0.13106315f, 0.18837026f, 0.27151645f, 0.37668958f, 0.43255839f, + 0.192999400f, 0.21775426f, 0.26678052f, 0.30557605f, 0.38446194f, 0.43054658f, + 0.135743140f, 0.17819346f, 0.26983813f, 0.31540557f, 0.35817370f, 0.39888741f, + 0.187602960f, 0.21325656f, 0.29023036f, 0.33244221f, 0.37354374f, 0.41305910f, + 0.092309319f, 0.15685370f, 0.21826152f, 0.28145456f, 0.34801734f, 0.40449806f, + 0.182635620f, 0.20695883f, 0.29330586f, 0.34611408f, 0.38827609f, 0.42744945f, + 0.142778630f, 0.18181581f, 0.24718913f, 0.30036890f, 0.36118151f, 0.41174750f, + 0.236204610f, 0.26138275f, 0.28782872f, 0.31976781f, 0.38485547f, 0.44582109f, + 0.116877780f, 0.14600852f, 0.23439658f, 0.29078582f, 0.33978214f, 0.38680132f, + 0.175246750f, 0.19919182f, 0.25508981f, 0.32738942f, 0.40268065f, 0.44634249f, + 0.137050570f, 0.17196927f, 0.22227536f, 0.26698633f, 0.35381724f, 0.42069877f, + 0.206672940f, 0.25909379f, 0.28239012f, 0.33396266f, 0.38073064f, 0.42642507f, + 0.061761568f, 0.10948738f, 0.22960285f, 0.31900229f, 0.37225715f, 0.42291697f, + 0.176470360f, 0.27105045f, 0.30450833f, 0.35896554f, 0.40397125f, 0.45254757f, + 0.121439660f, 0.15285670f, 0.25458177f, 0.31503554f, 0.37326878f, 0.43680361f, + 0.248663160f, 0.27168576f, 0.31107735f, 0.34636713f, 0.40424762f, 0.44219064f, + 0.070101929f, 0.11626106f, 0.17205417f, 0.22172190f, 0.27958755f, 0.35136489f, + 0.177289590f, 0.19891422f, 0.23900178f, 0.26750187f, 0.31516079f, 0.36488918f, + 0.077375897f, 0.14011343f, 0.22628590f, 0.27710762f, 0.32419150f, 0.37404180f, + 0.181505360f, 0.20134192f, 0.25984204f, 0.30768103f, 0.38822145f, 0.43297287f, + 0.074548254f, 0.13055888f, 0.20082796f, 0.24940258f, 0.30161427f, 0.36031073f, + 0.180461770f, 0.19943970f, 0.27094461f, 0.31420032f, 0.37052353f, 0.43473550f, + 0.074096252f, 0.11976634f, 0.19559390f, 0.30014559f, 0.36503791f, 0.41589500f, + 0.226750330f, 0.26034000f, 0.28387883f, 0.31307141f, 0.34924905f, 0.39466978f, + 0.112939270f, 0.14324718f, 0.19444530f, 0.23409602f, 0.28823566f, 0.35312882f, + 0.177658770f, 0.19744005f, 0.23826049f, 0.27114023f, 0.35113598f, 0.44339139f, + 0.114194520f, 0.13976692f, 0.19017221f, 0.23985925f, 0.34337933f, 0.40059157f, + 0.174247680f, 0.25422512f, 0.27291618f, 0.31259836f, 0.35694641f, 0.44284664f, + 0.079551504f, 0.12808054f, 0.20489528f, 0.31763242f, 0.38800666f, 0.43699908f, + 0.125618080f, 0.25750129f, 0.29652463f, 0.33625458f, 0.37097478f, 0.41695760f, + 0.128908580f, 0.16228143f, 0.22845947f, 0.30852429f, 0.38999548f, 0.43734932f, + 0.169819550f, 0.25672921f, 0.27816521f, 0.33356870f, 0.38415880f, 0.45040976f, + 0.057932155f, 0.096138661f, 0.17637437f, 0.28982999f, 0.37938107f, 0.44064176f, + 0.191452430f, 0.21929421f, 0.28254485f, 0.31749442f, 0.35804814f, 0.39526710f, + 0.112918430f, 0.14011863f, 0.23116641f, 0.29091351f, 0.34974963f, 0.42044500f, + 0.190242080f, 0.21680224f, 0.27563442f, 0.33525335f, 0.39940885f, 0.43998378f, + 0.071851696f, 0.13973452f, 0.23632015f, 0.30396344f, 0.38541794f, 0.45171152f, + 0.184630070f, 0.20535151f, 0.28517376f, 0.32789614f, 0.37951171f, 0.43497879f, + 0.132603770f, 0.16874406f, 0.24771421f, 0.29658241f, 0.37943509f, 0.43056925f, + 0.244405020f, 0.26554052f, 0.30099568f, 0.33429706f, 0.39811794f, 0.44169908f, + 0.127688830f, 0.15825875f, 0.20983321f, 0.25719782f, 0.34290920f, 0.39590250f, + 0.186549100f, 0.20879511f, 0.25591707f, 0.29476812f, 0.39344232f, 0.44883705f, + 0.121737520f, 0.15062455f, 0.21825312f, 0.27097532f, 0.35836887f, 0.41602781f, + 0.157742360f, 0.25669794f, 0.28102574f, 0.34671864f, 0.41050850f, 0.46008611f, + 0.073161878f, 0.13388489f, 0.21462934f, 0.27572797f, 0.36075527f, 0.41919188f, + 0.110086280f, 0.24803245f, 0.31035821f, 0.35293169f, 0.39119687f, 0.43174112f, + 0.135783090f, 0.17715049f, 0.27354016f, 0.32581513f, 0.38440836f, 0.44428392f, + 0.241434570f, 0.26676851f, 0.30639927f, 0.35469044f, 0.41439486f, 0.46056301f, + 0.072374815f, 0.13092581f, 0.21330540f, 0.26565725f, 0.32462099f, 0.41762579f, + 0.187292630f, 0.21108778f, 0.25580340f, 0.28624311f, 0.33138816f, 0.37684385f, + 0.098711036f, 0.18228306f, 0.24984319f, 0.31049971f, 0.37903925f, 0.43890093f, + 0.185453530f, 0.20642460f, 0.26094355f, 0.29915816f, 0.37078354f, 0.42966194f, + 0.090091891f, 0.15555244f, 0.20914149f, 0.27320212f, 0.36822053f, 0.42967380f, + 0.201609780f, 0.23445421f, 0.29016518f, 0.32638897f, 0.37174990f, 0.41508051f, + 0.113139770f, 0.14155327f, 0.22791682f, 0.31995140f, 0.37521299f, 0.41972433f, + 0.242912130f, 0.26597026f, 0.30674398f, 0.34632679f, 0.38930327f, 0.42944494f, + 0.126299270f, 0.15994217f, 0.23121635f, 0.27579474f, 0.33301124f, 0.41152335f, + 0.178158900f, 0.19664722f, 0.23704785f, 0.27359930f, 0.39265986f, 0.45771152f, + 0.129551450f, 0.16291546f, 0.22120094f, 0.28045517f, 0.37621782f, 0.42867219f, + 0.187946560f, 0.27082805f, 0.30209272f, 0.33978012f, 0.37078287f, 0.41235280f, + 0.068654959f, 0.13086497f, 0.26542795f, 0.33399948f, 0.38525278f, 0.43688097f, + 0.096004458f, 0.20898133f, 0.30225243f, 0.35934752f, 0.41301071f, 0.45632845f, + 0.123398330f, 0.15749653f, 0.25528304f, 0.31414621f, 0.39506227f, 0.45492910f, + 0.225770510f, 0.26622774f, 0.29947052f, 0.36073788f, 0.40423935f, 0.44409324f, + 0.064717384f, 0.11872284f, 0.20919028f, 0.28301016f, 0.36802144f, 0.44747754f, + 0.193151690f, 0.21918993f, 0.26823232f, 0.30766049f, 0.39674668f, 0.45522504f, + 0.136849720f, 0.17581869f, 0.26349318f, 0.31417345f, 0.36960066f, 0.42791831f, + 0.193061690f, 0.21996506f, 0.29517646f, 0.33806725f, 0.39153706f, 0.44340380f, + 0.098565179f, 0.16979528f, 0.23333485f, 0.30380484f, 0.36654435f, 0.41758552f, + 0.142901030f, 0.21043695f, 0.30522982f, 0.36025073f, 0.40676141f, 0.45003224f, + 0.145613190f, 0.18443712f, 0.24662242f, 0.31447027f, 0.38225381f, 0.42837277f, + 0.251176660f, 0.28085865f, 0.31587424f, 0.34871696f, 0.39445892f, 0.44662421f, + 0.133816690f, 0.17622163f, 0.24380327f, 0.28396237f, 0.32809307f, 0.37532433f, + 0.177315700f, 0.20318793f, 0.27655558f, 0.35488501f, 0.40768754f, 0.44723190f, + 0.130848580f, 0.16442355f, 0.23815274f, 0.28617893f, 0.35951574f, 0.41662766f, + 0.134220490f, 0.26123559f, 0.29436035f, 0.34059452f, 0.38761183f, 0.45385345f, + 0.059422872f, 0.10497064f, 0.21978301f, 0.33427086f, 0.40351136f, 0.45184884f, + 0.142994260f, 0.27380337f, 0.32392882f, 0.36784687f, 0.40465562f, 0.44600403f, + 0.116004830f, 0.14796778f, 0.27228987f, 0.34179617f, 0.39311954f, 0.44016822f, + 0.245996100f, 0.26896363f, 0.31898875f, 0.36352887f, 0.40696431f, 0.44890165f, + 0.072173498f, 0.11864839f, 0.17283789f, 0.22419420f, 0.31759785f, 0.43734225f, + 0.139241880f, 0.17819210f, 0.22803594f, 0.26501417f, 0.32263158f, 0.39061689f, + 0.079146669f, 0.12807914f, 0.20505754f, 0.28451768f, 0.34267396f, 0.39425014f, + 0.185581160f, 0.20673854f, 0.24816327f, 0.28211183f, 0.37238530f, 0.42474096f, + 0.073407181f, 0.12148770f, 0.18750487f, 0.26671948f, 0.34627834f, 0.42100649f, + 0.176786130f, 0.19666658f, 0.25287274f, 0.30668454f, 0.37086389f, 0.41259755f, + 0.085308694f, 0.14425344f, 0.19922831f, 0.25959335f, 0.34555917f, 0.41120310f, + 0.188639580f, 0.26239423f, 0.28521213f, 0.32391588f, 0.35782756f, 0.41337293f, + 0.122131020f, 0.15263056f, 0.20129258f, 0.23778684f, 0.30478596f, 0.39871654f, + 0.175429700f, 0.19423608f, 0.23678906f, 0.27549846f, 0.36067030f, 0.41160394f, + 0.119189400f, 0.14839651f, 0.19721773f, 0.23690964f, 0.32670187f, 0.43820403f, + 0.131684130f, 0.25721459f, 0.28448545f, 0.32294678f, 0.36442816f, 0.44250607f, + 0.085802449f, 0.14103937f, 0.22418659f, 0.30627724f, 0.35842445f, 0.40982625f, + 0.128820440f, 0.25444798f, 0.28309633f, 0.34424530f, 0.39272354f, 0.43691562f, + 0.132605980f, 0.16563241f, 0.21732948f, 0.26659585f, 0.39024087f, 0.45279860f, + 0.234312330f, 0.26289148f, 0.28858043f, 0.31923045f, 0.36693357f, 0.42273091f, + 0.066913619f, 0.11174564f, 0.17118640f, 0.24009352f, 0.37462610f, 0.44981068f, + 0.185639320f, 0.20948515f, 0.27095540f, 0.30761470f, 0.35471667f, 0.41869175f, + 0.125534910f, 0.15639919f, 0.22045213f, 0.29690027f, 0.36034274f, 0.40578263f, + 0.194798190f, 0.22069282f, 0.28234110f, 0.32713553f, 0.38517899f, 0.42816026f, + 0.085073073f, 0.15836545f, 0.24638386f, 0.30374430f, 0.35995427f, 0.43827551f, + 0.185516870f, 0.21322354f, 0.26435247f, 0.32313780f, 0.37976277f, 0.43915130f, + 0.136729910f, 0.17363096f, 0.23523415f, 0.27817766f, 0.36010086f, 0.44481285f, + 0.239499040f, 0.26742173f, 0.29913088f, 0.33337737f, 0.38191519f, 0.45262276f, + 0.109306830f, 0.13962816f, 0.20534886f, 0.27722030f, 0.33992319f, 0.39062291f, + 0.179595260f, 0.19941354f, 0.27015954f, 0.31834604f, 0.38647809f, 0.45654088f, + 0.118738240f, 0.14800700f, 0.21956599f, 0.27258212f, 0.36918433f, 0.44755545f, + 0.176908270f, 0.26077464f, 0.28640628f, 0.35265194f, 0.39663136f, 0.43922160f, + 0.059878687f, 0.10816162f, 0.21481956f, 0.28530654f, 0.34399690f, 0.42289176f, + 0.125298830f, 0.16761966f, 0.29455499f, 0.36736398f, 0.41514581f, 0.45568637f, + 0.132064950f, 0.16520436f, 0.24257245f, 0.31378956f, 0.37122182f, 0.41558003f, + 0.248260440f, 0.27214823f, 0.30690390f, 0.33828614f, 0.40254065f, 0.45821278f, + 0.082464811f, 0.14120604f, 0.19676137f, 0.24440753f, 0.31120215f, 0.41734941f, + 0.183048080f, 0.20313040f, 0.25374041f, 0.28978449f, 0.35392058f, 0.40046587f, + 0.096008750f, 0.19205652f, 0.26031936f, 0.30998267f, 0.36005002f, 0.41374267f, + 0.194524100f, 0.22245612f, 0.26543764f, 0.29833795f, 0.36269526f, 0.43446257f, + 0.096760412f, 0.17681885f, 0.23611019f, 0.28616845f, 0.34521951f, 0.42352547f, + 0.191620720f, 0.21818699f, 0.28052740f, 0.31781127f, 0.36781149f, 0.43254535f, + 0.125638810f, 0.15853683f, 0.23819940f, 0.29029299f, 0.37995224f, 0.45315055f, + 0.243017800f, 0.27328285f, 0.30734326f, 0.33963007f, 0.37608978f, 0.41520298f, + 0.133222750f, 0.16798774f, 0.21402212f, 0.24935760f, 0.32005623f, 0.41682314f, + 0.186885370f, 0.21039202f, 0.25286530f, 0.28529456f, 0.36191248f, 0.44972585f, + 0.114535160f, 0.14259486f, 0.19594154f, 0.24858528f, 0.38835896f, 0.45716846f, + 0.166527800f, 0.26567252f, 0.29289306f, 0.33677574f, 0.37519203f, 0.43541243f, + 0.084944791f, 0.15003156f, 0.24253235f, 0.32251109f, 0.37827375f, 0.43099351f, + 0.119303270f, 0.24856258f, 0.29065368f, 0.36470470f, 0.42883150f, 0.46638276f, + 0.120605420f, 0.15682171f, 0.24962093f, 0.34730291f, 0.41806540f, 0.46035776f, + 0.219732780f, 0.27560250f, 0.30592696f, 0.35044880f, 0.39439534f, 0.45312034f, + 0.077308553f, 0.13464280f, 0.19751880f, 0.25325059f, 0.34806166f, 0.44638905f, + 0.200278980f, 0.22979005f, 0.27661907f, 0.31333340f, 0.38330744f, 0.44013638f, + 0.147984570f, 0.20195322f, 0.26483855f, 0.31025032f, 0.36569269f, 0.42239969f, + 0.195086490f, 0.23098500f, 0.30395854f, 0.34483682f, 0.38586214f, 0.42438066f, + 0.096725831f, 0.15616494f, 0.21843296f, 0.29493721f, 0.35664482f, 0.43073450f, + 0.186832170f, 0.21579466f, 0.30557582f, 0.35804882f, 0.40192237f, 0.44148013f, + 0.131465720f, 0.16604695f, 0.23214633f, 0.30213654f, 0.36326612f, 0.43615662f, + 0.248074080f, 0.27538389f, 0.30784390f, 0.33816285f, 0.38664576f, 0.43811284f, + 0.129804270f, 0.16455588f, 0.24948399f, 0.29846586f, 0.34646629f, 0.39636043f, + 0.166400470f, 0.20256213f, 0.26232918f, 0.34952652f, 0.42374855f, 0.46579300f, + 0.142332960f, 0.18013006f, 0.23247726f, 0.28747540f, 0.37225279f, 0.42277361f, + 0.218164380f, 0.27036123f, 0.29741317f, 0.33658242f, 0.37288172f, 0.43297122f, + 0.070747526f, 0.12972708f, 0.23503772f, 0.30178403f, 0.35944976f, 0.43280902f, + 0.203817720f, 0.28320849f, 0.32265104f, 0.36469291f, 0.39977801f, 0.44224295f, + 0.122382190f, 0.15795076f, 0.27432170f, 0.33024348f, 0.37383108f, 0.41668653f, + 0.246445660f, 0.27118517f, 0.31770823f, 0.35773353f, 0.39648445f, 0.43540417f, + 0.070426224f, 0.12260340f, 0.18382397f, 0.23249431f, 0.29712141f, 0.39919694f, + 0.183126440f, 0.20602093f, 0.24375562f, 0.27361644f, 0.33459363f, 0.41471750f, + 0.088748459f, 0.16327910f, 0.22175401f, 0.26667908f, 0.31866453f, 0.39616098f, + 0.187460500f, 0.20871643f, 0.27548782f, 0.31634516f, 0.39309748f, 0.43994220f, + 0.081379567f, 0.12891936f, 0.18833934f, 0.25567206f, 0.32705903f, 0.38458961f, + 0.191505080f, 0.21728053f, 0.28226653f, 0.32386961f, 0.38391795f, 0.45235836f, + 0.082156793f, 0.13994262f, 0.21264164f, 0.30082758f, 0.36988471f, 0.43363836f, + 0.237145870f, 0.26759673f, 0.29733906f, 0.32792373f, 0.36448143f, 0.40360639f, + 0.128199820f, 0.16341814f, 0.21755898f, 0.25443908f, 0.30439771f, 0.35908714f, + 0.189707910f, 0.21668527f, 0.25769184f, 0.28813697f, 0.34477993f, 0.41777603f, + 0.125467980f, 0.15380570f, 0.20025914f, 0.24632028f, 0.36725388f, 0.42488725f, + 0.203165520f, 0.26241863f, 0.28495340f, 0.32547246f, 0.36743034f, 0.44873687f, + 0.093381965f, 0.15915305f, 0.22155271f, 0.30877697f, 0.38380526f, 0.43903641f, + 0.155729460f, 0.27199100f, 0.30995504f, 0.35152115f, 0.38662749f, 0.43394669f, + 0.141375780f, 0.18067408f, 0.23815984f, 0.29034933f, 0.38882061f, 0.44831617f, + 0.205067360f, 0.26200850f, 0.28831845f, 0.35265548f, 0.41227841f, 0.46066867f, + 0.072047472f, 0.12115468f, 0.18961933f, 0.28488105f, 0.40495409f, 0.46004731f, + 0.198557750f, 0.22705201f, 0.27591618f, 0.31064014f, 0.36695315f, 0.41465139f, + 0.128799860f, 0.16494038f, 0.25362087f, 0.29961433f, 0.35336792f, 0.42859765f, + 0.189710480f, 0.22045927f, 0.29038955f, 0.34755716f, 0.41335089f, 0.45984727f, + 0.087636105f, 0.16804885f, 0.24880519f, 0.32500502f, 0.39871150f, 0.45243576f, + 0.183164490f, 0.20372954f, 0.28663902f, 0.33639693f, 0.39567505f, 0.45029614f, + 0.135442360f, 0.17219131f, 0.25232067f, 0.30812818f, 0.37522467f, 0.44933943f, + 0.237947800f, 0.26313746f, 0.29423846f, 0.33363250f, 0.40548313f, 0.46136835f, + 0.136450240f, 0.17206573f, 0.23044273f, 0.28127300f, 0.34912154f, 0.39454258f, + 0.184673430f, 0.21026600f, 0.27179282f, 0.32517703f, 0.41007950f, 0.46131088f, + 0.120635550f, 0.15057589f, 0.23738282f, 0.29356081f, 0.37244051f, 0.42760875f, + 0.165980800f, 0.26393604f, 0.29879643f, 0.37329254f, 0.42416075f, 0.46364654f, + 0.083243472f, 0.13716891f, 0.20532429f, 0.28573678f, 0.34618078f, 0.42885349f, + 0.124185840f, 0.25817832f, 0.30013923f, 0.35832406f, 0.40788565f, 0.45242538f, + 0.148751310f, 0.21168861f, 0.28155588f, 0.33399871f, 0.39200642f, 0.44392882f, + 0.250092790f, 0.27749655f, 0.31714030f, 0.35382269f, 0.40755488f, 0.45807079f, + 0.090218008f, 0.15844407f, 0.21605547f, 0.26747762f, 0.33611136f, 0.43256724f, + 0.194821460f, 0.22238574f, 0.26892332f, 0.29957274f, 0.34593681f, 0.39087253f, + 0.088872041f, 0.18684006f, 0.27868480f, 0.33185291f, 0.38399584f, 0.43532623f, + 0.187631470f, 0.21132813f, 0.26919143f, 0.30608744f, 0.37267119f, 0.45037854f, + 0.078499578f, 0.14581909f, 0.22353298f, 0.28124283f, 0.35460841f, 0.44710837f, + 0.203049030f, 0.23554188f, 0.29130760f, 0.32976939f, 0.38552827f, 0.43804459f, + 0.132090630f, 0.16828557f, 0.25117965f, 0.33118164f, 0.39126122f, 0.43521955f, + 0.245699330f, 0.28091560f, 0.31693809f, 0.35063725f, 0.38679310f, 0.42687325f, + 0.141120120f, 0.18351512f, 0.24129878f, 0.28194334f, 0.34056397f, 0.42074436f, + 0.176576340f, 0.19930558f, 0.25055988f, 0.30421218f, 0.40924681f, 0.46535353f, + 0.117761100f, 0.14946364f, 0.21764598f, 0.29577606f, 0.40879019f, 0.46136645f, + 0.204842420f, 0.27294301f, 0.30601511f, 0.35160404f, 0.38727312f, 0.43085356f, + 0.073765998f, 0.14878616f, 0.27867445f, 0.35617826f, 0.40839136f, 0.45292538f, + 0.125517660f, 0.25496685f, 0.32758337f, 0.38197773f, 0.42435415f, 0.46126376f, + 0.135962010f, 0.17555426f, 0.24178151f, 0.31425983f, 0.40720232f, 0.45869366f, + 0.213570120f, 0.27094587f, 0.30863435f, 0.37331744f, 0.42018011f, 0.46102471f, + 0.082998736f, 0.14651530f, 0.21003822f, 0.28279492f, 0.38739390f, 0.45279145f, + 0.198570550f, 0.22875204f, 0.28417900f, 0.32642267f, 0.40238371f, 0.45320042f, + 0.141324200f, 0.19351582f, 0.27967266f, 0.32946724f, 0.37612094f, 0.41912905f, + 0.201481430f, 0.23856193f, 0.30309500f, 0.34633198f, 0.40074668f, 0.44775506f, + 0.094264220f, 0.16969966f, 0.23129383f, 0.28788431f, 0.37402386f, 0.44657509f, + 0.190612400f, 0.23544456f, 0.31650278f, 0.36818431f, 0.41389673f, 0.45404931f, + 0.145178650f, 0.19384152f, 0.26072685f, 0.31177170f, 0.38904763f, 0.44618125f, + 0.249738030f, 0.28583093f, 0.32433884f, 0.36184735f, 0.40237550f, 0.44552961f, + 0.144466440f, 0.19269281f, 0.25474986f, 0.29651925f, 0.34405115f, 0.39494788f, + 0.177748120f, 0.20967896f, 0.29994813f, 0.37438345f, 0.42341220f, 0.46196806f, + 0.144017810f, 0.18743776f, 0.25098351f, 0.29549083f, 0.36361608f, 0.43793137f, + 0.191890800f, 0.26774988f, 0.29463282f, 0.34191791f, 0.38746328f, 0.45369258f, + 0.081212845f, 0.13994797f, 0.22358119f, 0.33366778f, 0.41201077f, 0.45855130f, + 0.181044650f, 0.28450829f, 0.33194281f, 0.38005566f, 0.41856023f, 0.45789922f, + 0.136313630f, 0.18429069f, 0.26984493f, 0.34070980f, 0.40759216f, 0.45475266f, + 0.240476170f, 0.27948010f, 0.32327234f, 0.37258368f, 0.41532038f, 0.45744253f +}; + +const float swb_tbe_lsfvq_cbook_8b[256*LPC_SHB_ORDER] = +{ + 0.052035f, 0.098557f, 0.128235f, 0.155222f, 0.187634f, 0.220354f, 0.248003f, 0.327378f, 0.416763f, 0.468886f, + 0.050902f, 0.090274f, 0.123988f, 0.172234f, 0.224479f, 0.288101f, 0.337089f, 0.374172f, 0.403673f, 0.442608f, + 0.047188f, 0.089025f, 0.128973f, 0.167152f, 0.212901f, 0.254805f, 0.296290f, 0.362619f, 0.403389f, 0.449070f, + 0.035345f, 0.083282f, 0.158003f, 0.212631f, 0.253206f, 0.293314f, 0.325157f, 0.356067f, 0.389327f, 0.439909f, + 0.049324f, 0.091699f, 0.133308f, 0.177313f, 0.216889f, 0.248068f, 0.286140f, 0.319129f, 0.388743f, 0.452730f, + 0.037590f, 0.074792f, 0.126499f, 0.196718f, 0.236226f, 0.274430f, 0.316669f, 0.363084f, 0.433737f, 0.467349f, + 0.049999f, 0.094260f, 0.156667f, 0.193806f, 0.224624f, 0.253432f, 0.298661f, 0.377723f, 0.419777f, 0.464133f, + 0.038569f, 0.077613f, 0.169806f, 0.204031f, 0.242844f, 0.289350f, 0.336338f, 0.381981f, 0.423438f, 0.462244f, + 0.039797f, 0.077432f, 0.113315f, 0.148404f, 0.200326f, 0.241409f, 0.286872f, 0.359925f, 0.404895f, 0.452684f, + 0.050430f, 0.099036f, 0.143005f, 0.195455f, 0.242036f, 0.281478f, 0.323205f, 0.366833f, 0.402614f, 0.450408f, + 0.039724f, 0.079916f, 0.130839f, 0.179575f, 0.218692f, 0.261122f, 0.320798f, 0.380589f, 0.420132f, 0.460065f, + 0.062070f, 0.105792f, 0.170204f, 0.199290f, 0.234202f, 0.268038f, 0.333250f, 0.390551f, 0.418930f, 0.457810f, + 0.079997f, 0.120714f, 0.160981f, 0.199639f, 0.229158f, 0.259921f, 0.288582f, 0.329020f, 0.380142f, 0.430256f, + 0.045641f, 0.080952f, 0.126548f, 0.172023f, 0.224929f, 0.281759f, 0.360638f, 0.396302f, 0.426277f, 0.459174f, + 0.067880f, 0.101438f, 0.143420f, 0.179072f, 0.220060f, 0.263601f, 0.346964f, 0.387408f, 0.415045f, 0.444299f, + 0.038652f, 0.093084f, 0.143655f, 0.192895f, 0.264359f, 0.309455f, 0.341003f, 0.380032f, 0.409710f, 0.453003f, + 0.050708f, 0.090949f, 0.126797f, 0.165211f, 0.202591f, 0.237959f, 0.282372f, 0.346666f, 0.391780f, 0.440679f, + 0.046423f, 0.087161f, 0.150877f, 0.194305f, 0.229067f, 0.270295f, 0.334805f, 0.371802f, 0.405116f, 0.457953f, + 0.044360f, 0.087261f, 0.139254f, 0.182219f, 0.219289f, 0.261504f, 0.309799f, 0.359196f, 0.408816f, 0.457282f, + 0.034881f, 0.089771f, 0.160723f, 0.208734f, 0.255654f, 0.288616f, 0.323156f, 0.354465f, 0.423951f, 0.466020f, + 0.051086f, 0.093155f, 0.140520f, 0.176030f, 0.216785f, 0.257930f, 0.308053f, 0.359569f, 0.390408f, 0.419868f, + 0.051928f, 0.099511f, 0.144135f, 0.190596f, 0.241070f, 0.289741f, 0.335984f, 0.378008f, 0.417474f, 0.459764f, + 0.041656f, 0.085336f, 0.164968f, 0.198531f, 0.228507f, 0.264871f, 0.318823f, 0.366222f, 0.416159f, 0.459177f, + 0.063772f, 0.119952f, 0.176631f, 0.218406f, 0.251883f, 0.296547f, 0.335911f, 0.368682f, 0.403997f, 0.454099f, + 0.059576f, 0.096358f, 0.126102f, 0.157582f, 0.193300f, 0.225485f, 0.274787f, 0.360048f, 0.430168f, 0.473165f, + 0.050090f, 0.098011f, 0.150107f, 0.194228f, 0.239956f, 0.284161f, 0.328550f, 0.373362f, 0.417904f, 0.459405f, + 0.050455f, 0.091803f, 0.128564f, 0.163400f, 0.213005f, 0.269193f, 0.341329f, 0.387102f, 0.424272f, 0.465410f, + 0.056626f, 0.105111f, 0.157033f, 0.200776f, 0.238054f, 0.282274f, 0.337598f, 0.395108f, 0.431675f, 0.466636f, + 0.041642f, 0.108843f, 0.169446f, 0.197564f, 0.223758f, 0.251886f, 0.303709f, 0.346790f, 0.412135f, 0.456278f, + 0.045415f, 0.088367f, 0.137979f, 0.191624f, 0.240474f, 0.288265f, 0.348450f, 0.394310f, 0.440392f, 0.471964f, + 0.046252f, 0.096877f, 0.163695f, 0.195612f, 0.222631f, 0.252841f, 0.329557f, 0.384350f, 0.432499f, 0.470718f, + 0.053043f, 0.104263f, 0.159826f, 0.209898f, 0.257555f, 0.321633f, 0.369402f, 0.398653f, 0.424938f, 0.462350f, + 0.043656f, 0.081158f, 0.119295f, 0.162597f, 0.202663f, 0.242606f, 0.285262f, 0.336831f, 0.412286f, 0.457530f, + 0.042710f, 0.080739f, 0.129188f, 0.194265f, 0.236487f, 0.281364f, 0.322263f, 0.353819f, 0.398147f, 0.457506f, + 0.034022f, 0.067080f, 0.110067f, 0.161100f, 0.245813f, 0.298294f, 0.336441f, 0.379210f, 0.426400f, 0.464858f, + 0.041504f, 0.104317f, 0.174678f, 0.212809f, 0.241453f, 0.277049f, 0.329887f, 0.379542f, 0.415948f, 0.452461f, + 0.043385f, 0.093120f, 0.156620f, 0.187415f, 0.219909f, 0.252543f, 0.285489f, 0.331396f, 0.421562f, 0.463942f, + 0.032947f, 0.067948f, 0.125627f, 0.195426f, 0.246592f, 0.284364f, 0.333690f, 0.378531f, 0.417714f, 0.452488f, + 0.049156f, 0.104448f, 0.150380f, 0.189623f, 0.226621f, 0.266196f, 0.320491f, 0.363628f, 0.410110f, 0.460970f, + 0.059406f, 0.107544f, 0.158619f, 0.213862f, 0.255056f, 0.305344f, 0.347819f, 0.379775f, 0.414531f, 0.461875f, + 0.042551f, 0.081551f, 0.122191f, 0.173384f, 0.212196f, 0.253318f, 0.299526f, 0.366219f, 0.418377f, 0.460170f, + 0.054564f, 0.097456f, 0.139734f, 0.189857f, 0.240306f, 0.279858f, 0.341376f, 0.385962f, 0.412633f, 0.443663f, + 0.047246f, 0.085779f, 0.123843f, 0.162683f, 0.199213f, 0.237097f, 0.335143f, 0.388883f, 0.421806f, 0.461765f, + 0.053449f, 0.122299f, 0.157276f, 0.197221f, 0.242155f, 0.288987f, 0.338839f, 0.378598f, 0.407019f, 0.443119f, + 0.061169f, 0.096794f, 0.155005f, 0.186632f, 0.216953f, 0.248877f, 0.315884f, 0.372060f, 0.409344f, 0.450829f, + 0.050160f, 0.097186f, 0.144946f, 0.191946f, 0.238536f, 0.282942f, 0.336958f, 0.391570f, 0.431474f, 0.468178f, + 0.070512f, 0.115329f, 0.156141f, 0.186164f, 0.223411f, 0.278915f, 0.315935f, 0.370299f, 0.422165f, 0.463007f, + 0.052587f, 0.101896f, 0.154071f, 0.206102f, 0.254920f, 0.314033f, 0.367686f, 0.401531f, 0.433527f, 0.471797f, + 0.067698f, 0.106830f, 0.141570f, 0.175913f, 0.207186f, 0.239077f, 0.299182f, 0.363370f, 0.402273f, 0.448275f, + 0.050042f, 0.096846f, 0.142801f, 0.189262f, 0.233767f, 0.278335f, 0.328758f, 0.378276f, 0.424023f, 0.463870f, + 0.048564f, 0.093699f, 0.138452f, 0.183259f, 0.224028f, 0.268624f, 0.319818f, 0.373529f, 0.420181f, 0.461720f, + 0.035663f, 0.110208f, 0.182596f, 0.215274f, 0.262474f, 0.305840f, 0.334102f, 0.363985f, 0.391665f, 0.450045f, + 0.052124f, 0.097379f, 0.141664f, 0.187867f, 0.225707f, 0.268701f, 0.306038f, 0.358072f, 0.403022f, 0.453386f, + 0.046364f, 0.094056f, 0.145010f, 0.197890f, 0.235910f, 0.284683f, 0.329466f, 0.366312f, 0.443226f, 0.473416f, + 0.065692f, 0.108572f, 0.157530f, 0.204882f, 0.236869f, 0.270301f, 0.305422f, 0.366582f, 0.418869f, 0.464143f, + 0.081775f, 0.123697f, 0.162035f, 0.213510f, 0.253580f, 0.285130f, 0.316195f, 0.376374f, 0.434072f, 0.472957f, + 0.071914f, 0.116132f, 0.153572f, 0.182184f, 0.211027f, 0.240482f, 0.272342f, 0.368056f, 0.422300f, 0.463416f, + 0.055135f, 0.104947f, 0.151424f, 0.197856f, 0.244545f, 0.291623f, 0.334237f, 0.376193f, 0.417664f, 0.459559f, + 0.047928f, 0.088506f, 0.128407f, 0.196811f, 0.234221f, 0.262202f, 0.339912f, 0.389867f, 0.432755f, 0.470636f, + 0.061209f, 0.130070f, 0.168080f, 0.195727f, 0.232576f, 0.266266f, 0.329227f, 0.384677f, 0.415326f, 0.450918f, + 0.054489f, 0.114179f, 0.160730f, 0.204526f, 0.247099f, 0.288682f, 0.320040f, 0.350371f, 0.393345f, 0.454259f, + 0.050257f, 0.098343f, 0.146333f, 0.195038f, 0.244345f, 0.293566f, 0.353243f, 0.395361f, 0.430313f, 0.469396f, + 0.046313f, 0.098069f, 0.159706f, 0.198648f, 0.234593f, 0.268660f, 0.359439f, 0.425175f, 0.450429f, 0.472752f, + 0.065195f, 0.111302f, 0.163983f, 0.223289f, 0.264603f, 0.313139f, 0.359677f, 0.394680f, 0.421766f, 0.463443f, + 0.049833f, 0.099641f, 0.142577f, 0.172120f, 0.206797f, 0.237530f, 0.271835f, 0.310803f, 0.368226f, 0.442268f, + 0.051561f, 0.092407f, 0.127677f, 0.184605f, 0.228561f, 0.264833f, 0.337058f, 0.373648f, 0.408072f, 0.458254f, + 0.050312f, 0.093979f, 0.133001f, 0.176857f, 0.224745f, 0.262482f, 0.313019f, 0.370051f, 0.406746f, 0.461218f, + 0.056453f, 0.100292f, 0.164556f, 0.206451f, 0.238837f, 0.280290f, 0.320629f, 0.359375f, 0.404283f, 0.462747f, + 0.064422f, 0.107489f, 0.148611f, 0.185763f, 0.218563f, 0.255882f, 0.294328f, 0.331455f, 0.376622f, 0.436460f, + 0.046651f, 0.088769f, 0.126223f, 0.207005f, 0.246095f, 0.284572f, 0.333915f, 0.369094f, 0.423764f, 0.462912f, + 0.056372f, 0.100125f, 0.145020f, 0.186096f, 0.223092f, 0.266834f, 0.309121f, 0.374704f, 0.413627f, 0.455613f, + 0.035065f, 0.084427f, 0.179107f, 0.228245f, 0.259827f, 0.296722f, 0.342853f, 0.375360f, 0.423312f, 0.459834f, + 0.051556f, 0.093559f, 0.131989f, 0.171289f, 0.206668f, 0.242179f, 0.276215f, 0.370322f, 0.418996f, 0.458514f, + 0.064906f, 0.103567f, 0.160614f, 0.209947f, 0.240290f, 0.279374f, 0.314472f, 0.370362f, 0.411818f, 0.440592f, + 0.051333f, 0.093194f, 0.134650f, 0.184715f, 0.225233f, 0.258320f, 0.299595f, 0.380254f, 0.431966f, 0.466464f, + 0.054906f, 0.104680f, 0.156332f, 0.201242f, 0.242115f, 0.293254f, 0.350097f, 0.390361f, 0.417661f, 0.453152f, + 0.057964f, 0.111565f, 0.163839f, 0.193942f, 0.229367f, 0.268561f, 0.301745f, 0.355413f, 0.397475f, 0.426184f, + 0.043021f, 0.099243f, 0.155661f, 0.184626f, 0.228258f, 0.302504f, 0.358238f, 0.390818f, 0.429834f, 0.463440f, + 0.045380f, 0.120045f, 0.163293f, 0.195013f, 0.229454f, 0.271296f, 0.350581f, 0.391168f, 0.420733f, 0.455968f, + 0.047668f, 0.096305f, 0.154868f, 0.214976f, 0.270766f, 0.313434f, 0.350305f, 0.385491f, 0.424396f, 0.457538f, + 0.047251f, 0.089307f, 0.132379f, 0.176882f, 0.213945f, 0.248516f, 0.284924f, 0.345563f, 0.410789f, 0.454839f, + 0.043366f, 0.088702f, 0.144534f, 0.191411f, 0.235903f, 0.273950f, 0.319010f, 0.377616f, 0.422360f, 0.464893f, + 0.045624f, 0.091445f, 0.137199f, 0.184217f, 0.230245f, 0.275709f, 0.321477f, 0.366635f, 0.411549f, 0.456497f, + 0.042352f, 0.097756f, 0.173684f, 0.215934f, 0.261779f, 0.294833f, 0.331844f, 0.376147f, 0.440475f, 0.470683f, + 0.038091f, 0.091036f, 0.161878f, 0.196009f, 0.230216f, 0.262778f, 0.314032f, 0.356498f, 0.393785f, 0.443990f, + 0.045665f, 0.091177f, 0.141352f, 0.193543f, 0.239618f, 0.284706f, 0.341027f, 0.382868f, 0.419859f, 0.463306f, + 0.041904f, 0.103110f, 0.154646f, 0.188554f, 0.225202f, 0.267803f, 0.305332f, 0.349841f, 0.431723f, 0.469552f, + 0.077431f, 0.117466f, 0.168864f, 0.221652f, 0.253857f, 0.294713f, 0.346262f, 0.377031f, 0.425887f, 0.467332f, + 0.064470f, 0.103906f, 0.134849f, 0.160779f, 0.196409f, 0.244298f, 0.314086f, 0.379702f, 0.416731f, 0.463122f, + 0.049451f, 0.112350f, 0.166433f, 0.195509f, 0.227644f, 0.285465f, 0.331780f, 0.367291f, 0.432216f, 0.466286f, + 0.058067f, 0.098622f, 0.137834f, 0.175730f, 0.218379f, 0.270120f, 0.325626f, 0.378807f, 0.443060f, 0.474998f, + 0.052308f, 0.115312f, 0.157669f, 0.200104f, 0.247392f, 0.279777f, 0.322273f, 0.392271f, 0.433586f, 0.467817f, + 0.058782f, 0.111246f, 0.168484f, 0.215834f, 0.244122f, 0.273877f, 0.299244f, 0.338369f, 0.412816f, 0.466858f, + 0.055542f, 0.086661f, 0.144229f, 0.216409f, 0.252097f, 0.297799f, 0.342351f, 0.370742f, 0.429205f, 0.465769f, + 0.063246f, 0.100799f, 0.164514f, 0.204780f, 0.229008f, 0.259317f, 0.319118f, 0.378226f, 0.441896f, 0.474270f, + 0.049656f, 0.100510f, 0.158979f, 0.226797f, 0.269956f, 0.309657f, 0.351457f, 0.393377f, 0.442146f, 0.470304f, + 0.066278f, 0.103915f, 0.139783f, 0.171615f, 0.205432f, 0.233412f, 0.258944f, 0.302518f, 0.408815f, 0.464278f, + 0.048237f, 0.093317f, 0.141389f, 0.189982f, 0.235703f, 0.281926f, 0.328964f, 0.373539f, 0.416565f, 0.460637f, + 0.051115f, 0.089333f, 0.124829f, 0.175556f, 0.227688f, 0.272289f, 0.313617f, 0.356144f, 0.426854f, 0.468024f, + 0.057016f, 0.110189f, 0.160396f, 0.211405f, 0.246994f, 0.287899f, 0.335640f, 0.370610f, 0.408313f, 0.462788f, + 0.045706f, 0.110933f, 0.160922f, 0.208233f, 0.238788f, 0.272099f, 0.299401f, 0.332730f, 0.381907f, 0.454209f, + 0.044199f, 0.080129f, 0.119936f, 0.210423f, 0.254754f, 0.297418f, 0.348033f, 0.383461f, 0.436047f, 0.467678f, + 0.059370f, 0.103993f, 0.152197f, 0.193477f, 0.232752f, 0.273256f, 0.312825f, 0.377850f, 0.411394f, 0.457251f, + 0.059698f, 0.114702f, 0.164424f, 0.210373f, 0.258366f, 0.304006f, 0.349730f, 0.389369f, 0.431678f, 0.467558f, + 0.050972f, 0.099832f, 0.140005f, 0.182190f, 0.219279f, 0.255299f, 0.294189f, 0.366548f, 0.411624f, 0.452662f, + 0.059947f, 0.105101f, 0.147291f, 0.189602f, 0.242184f, 0.277632f, 0.329136f, 0.385035f, 0.415412f, 0.464746f, + 0.050246f, 0.103445f, 0.142498f, 0.184607f, 0.213644f, 0.242299f, 0.319253f, 0.380800f, 0.447847f, 0.479237f, + 0.067193f, 0.115430f, 0.155858f, 0.206126f, 0.252681f, 0.293822f, 0.356656f, 0.397588f, 0.423304f, 0.464089f, + 0.071847f, 0.116894f, 0.157883f, 0.194092f, 0.230547f, 0.274564f, 0.325945f, 0.365502f, 0.398749f, 0.451080f, + 0.071752f, 0.107567f, 0.149280f, 0.194893f, 0.232418f, 0.278702f, 0.361895f, 0.398599f, 0.425587f, 0.457898f, + 0.068739f, 0.115103f, 0.157316f, 0.197895f, 0.237993f, 0.279071f, 0.328650f, 0.383319f, 0.420022f, 0.465113f, + 0.052303f, 0.094829f, 0.144186f, 0.186062f, 0.279484f, 0.319196f, 0.354590f, 0.387530f, 0.437802f, 0.465583f, + 0.055846f, 0.106998f, 0.151640f, 0.182290f, 0.210559f, 0.239134f, 0.274479f, 0.338376f, 0.407908f, 0.453481f, + 0.056627f, 0.103955f, 0.149473f, 0.194316f, 0.238331f, 0.280339f, 0.318046f, 0.371471f, 0.426297f, 0.467870f, + 0.061231f, 0.103217f, 0.144741f, 0.186145f, 0.226738f, 0.267120f, 0.329755f, 0.373349f, 0.417263f, 0.463712f, + 0.045494f, 0.110081f, 0.163067f, 0.227778f, 0.280124f, 0.307836f, 0.336439f, 0.369219f, 0.402807f, 0.456421f, + 0.053383f, 0.102864f, 0.156288f, 0.198372f, 0.233337f, 0.267640f, 0.304209f, 0.356227f, 0.407078f, 0.455673f, + 0.056676f, 0.107005f, 0.155125f, 0.201255f, 0.250254f, 0.297223f, 0.339905f, 0.382321f, 0.423693f, 0.461944f, + 0.054333f, 0.117799f, 0.170332f, 0.204234f, 0.239159f, 0.274313f, 0.314448f, 0.375919f, 0.415366f, 0.461096f, + 0.066036f, 0.136196f, 0.172592f, 0.232898f, 0.276089f, 0.302787f, 0.329116f, 0.395210f, 0.449302f, 0.475747f, + 0.070331f, 0.100716f, 0.133253f, 0.171137f, 0.209264f, 0.237895f, 0.305371f, 0.364686f, 0.438728f, 0.479133f, + 0.049672f, 0.104018f, 0.154836f, 0.206341f, 0.253671f, 0.295628f, 0.338852f, 0.376356f, 0.415621f, 0.460077f, + 0.056211f, 0.101148f, 0.145610f, 0.197140f, 0.227748f, 0.264313f, 0.341533f, 0.388764f, 0.445317f, 0.477085f, + 0.055185f, 0.133050f, 0.180174f, 0.209627f, 0.248220f, 0.279970f, 0.328967f, 0.384183f, 0.427107f, 0.462356f, + 0.090510f, 0.132862f, 0.173536f, 0.213099f, 0.242241f, 0.277461f, 0.307068f, 0.358492f, 0.406083f, 0.445895f, + 0.058962f, 0.100504f, 0.149829f, 0.208057f, 0.234691f, 0.276924f, 0.357507f, 0.397315f, 0.440325f, 0.472359f, + 0.060359f, 0.115102f, 0.165680f, 0.200810f, 0.227294f, 0.259266f, 0.358724f, 0.400750f, 0.443988f, 0.474842f, + 0.057406f, 0.110946f, 0.171732f, 0.222531f, 0.261630f, 0.332974f, 0.376127f, 0.402824f, 0.429325f, 0.465189f, + 0.043822f, 0.082882f, 0.122127f, 0.163180f, 0.199988f, 0.233325f, 0.273271f, 0.326231f, 0.395731f, 0.451164f, + 0.043530f, 0.086208f, 0.128358f, 0.174740f, 0.247178f, 0.286590f, 0.326910f, 0.374201f, 0.412175f, 0.456349f, + 0.044183f, 0.084451f, 0.124772f, 0.160673f, 0.219266f, 0.265006f, 0.316722f, 0.374047f, 0.409896f, 0.451766f, + 0.050936f, 0.101062f, 0.152285f, 0.210171f, 0.245676f, 0.292805f, 0.333955f, 0.366681f, 0.401168f, 0.455315f, + 0.046805f, 0.085866f, 0.127908f, 0.181072f, 0.225619f, 0.265095f, 0.301043f, 0.341348f, 0.395446f, 0.449907f, + 0.042622f, 0.082584f, 0.131883f, 0.184679f, 0.232497f, 0.279794f, 0.335535f, 0.379437f, 0.425137f, 0.465917f, + 0.052394f, 0.096555f, 0.141288f, 0.193157f, 0.229466f, 0.269961f, 0.307875f, 0.369736f, 0.427604f, 0.463768f, + 0.049014f, 0.101187f, 0.157612f, 0.211850f, 0.252631f, 0.293740f, 0.349772f, 0.390796f, 0.430148f, 0.466887f, + 0.061472f, 0.102460f, 0.130638f, 0.154914f, 0.188934f, 0.224962f, 0.289961f, 0.378839f, 0.409509f, 0.454753f, + 0.040355f, 0.111547f, 0.160810f, 0.198176f, 0.232341f, 0.282372f, 0.328114f, 0.365421f, 0.405953f, 0.452666f, + 0.051498f, 0.100439f, 0.143970f, 0.177506f, 0.213658f, 0.248304f, 0.327782f, 0.387335f, 0.423694f, 0.464601f, + 0.068825f, 0.113622f, 0.169531f, 0.214249f, 0.247214f, 0.285172f, 0.328523f, 0.387739f, 0.417886f, 0.464554f, + 0.072521f, 0.113366f, 0.160172f, 0.198528f, 0.226144f, 0.254678f, 0.310546f, 0.354542f, 0.387805f, 0.442152f, + 0.056215f, 0.098619f, 0.133402f, 0.181712f, 0.239008f, 0.278502f, 0.344724f, 0.388895f, 0.423036f, 0.467855f, + 0.062429f, 0.109771f, 0.162502f, 0.196939f, 0.224387f, 0.262071f, 0.323117f, 0.368722f, 0.416985f, 0.462413f, + 0.060110f, 0.108774f, 0.150308f, 0.199802f, 0.264652f, 0.304578f, 0.347395f, 0.390206f, 0.426311f, 0.464915f, + 0.045681f, 0.089659f, 0.149800f, 0.186117f, 0.216751f, 0.246327f, 0.290352f, 0.344660f, 0.389432f, 0.444891f, + 0.050829f, 0.096543f, 0.155589f, 0.190895f, 0.224301f, 0.271682f, 0.326354f, 0.381553f, 0.421373f, 0.457146f, + 0.044771f, 0.084669f, 0.139044f, 0.192501f, 0.226907f, 0.263807f, 0.306407f, 0.377071f, 0.414961f, 0.450916f, + 0.058452f, 0.110406f, 0.157460f, 0.204676f, 0.258762f, 0.290562f, 0.319844f, 0.352065f, 0.432222f, 0.472393f, + 0.056675f, 0.105769f, 0.145256f, 0.189372f, 0.223155f, 0.268584f, 0.316662f, 0.365541f, 0.401645f, 0.434404f, + 0.049272f, 0.094814f, 0.143723f, 0.196904f, 0.246241f, 0.301437f, 0.346313f, 0.383753f, 0.419651f, 0.459244f, + 0.047694f, 0.094350f, 0.151873f, 0.209061f, 0.245856f, 0.275424f, 0.315157f, 0.371735f, 0.428434f, 0.463634f, + 0.070013f, 0.117284f, 0.176432f, 0.220387f, 0.259562f, 0.300623f, 0.342089f, 0.390694f, 0.417372f, 0.462571f, + 0.058921f, 0.104850f, 0.142858f, 0.178126f, 0.210803f, 0.238810f, 0.288098f, 0.384526f, 0.432185f, 0.467076f, + 0.047972f, 0.097327f, 0.148890f, 0.203855f, 0.243240f, 0.283598f, 0.334893f, 0.372088f, 0.412174f, 0.464413f, + 0.053684f, 0.096809f, 0.143044f, 0.181581f, 0.228389f, 0.270800f, 0.322361f, 0.391276f, 0.430659f, 0.466880f, + 0.044586f, 0.122337f, 0.167705f, 0.201662f, 0.240097f, 0.289818f, 0.345058f, 0.382092f, 0.438138f, 0.472021f, + 0.058657f, 0.131647f, 0.175035f, 0.201389f, 0.228297f, 0.262383f, 0.300653f, 0.346236f, 0.427618f, 0.466306f, + 0.038131f, 0.079609f, 0.143124f, 0.213799f, 0.246000f, 0.274980f, 0.350246f, 0.403256f, 0.438897f, 0.468033f, + 0.068699f, 0.115225f, 0.168266f, 0.197077f, 0.222782f, 0.246507f, 0.334509f, 0.387455f, 0.435752f, 0.475064f, + 0.051779f, 0.102976f, 0.156663f, 0.213128f, 0.264735f, 0.326526f, 0.372141f, 0.403846f, 0.432850f, 0.471923f, + 0.060586f, 0.101498f, 0.135493f, 0.173480f, 0.209652f, 0.250462f, 0.291284f, 0.342503f, 0.417229f, 0.462133f, + 0.044335f, 0.086169f, 0.144113f, 0.197628f, 0.235900f, 0.273515f, 0.311798f, 0.358357f, 0.413356f, 0.462417f, + 0.037139f, 0.074523f, 0.116614f, 0.165055f, 0.223223f, 0.273117f, 0.329507f, 0.383426f, 0.435814f, 0.470269f, + 0.047181f, 0.097768f, 0.171023f, 0.205397f, 0.245358f, 0.295311f, 0.336586f, 0.369485f, 0.421233f, 0.465914f, + 0.062309f, 0.104500f, 0.147401f, 0.193110f, 0.228058f, 0.260174f, 0.286437f, 0.328216f, 0.408873f, 0.457704f, + 0.033758f, 0.076535f, 0.146968f, 0.223914f, 0.256314f, 0.293898f, 0.344191f, 0.380044f, 0.429295f, 0.458511f, + 0.053820f, 0.100870f, 0.151208f, 0.199506f, 0.237034f, 0.278242f, 0.317503f, 0.365012f, 0.414293f, 0.458401f, + 0.048959f, 0.115875f, 0.173948f, 0.217520f, 0.259862f, 0.301989f, 0.347552f, 0.382497f, 0.417961f, 0.461917f, + 0.049542f, 0.091687f, 0.132903f, 0.189723f, 0.224344f, 0.257479f, 0.299641f, 0.352070f, 0.426438f, 0.468136f, + 0.074975f, 0.118701f, 0.151425f, 0.178468f, 0.223099f, 0.296570f, 0.342204f, 0.375124f, 0.418237f, 0.461155f, + 0.048862f, 0.101636f, 0.141831f, 0.184422f, 0.217823f, 0.249609f, 0.343243f, 0.399113f, 0.450686f, 0.477330f, + 0.074971f, 0.112223f, 0.157913f, 0.196284f, 0.243594f, 0.305898f, 0.340704f, 0.371399f, 0.418209f, 0.461180f, + 0.047352f, 0.115276f, 0.160725f, 0.193027f, 0.229854f, 0.263731f, 0.301940f, 0.378552f, 0.414083f, 0.446173f, + 0.059846f, 0.105671f, 0.144046f, 0.198296f, 0.245954f, 0.283923f, 0.350516f, 0.391352f, 0.430367f, 0.471737f, + 0.074555f, 0.112890f, 0.160280f, 0.193719f, 0.233102f, 0.266509f, 0.312007f, 0.386544f, 0.420167f, 0.458038f, + 0.067261f, 0.111598f, 0.155216f, 0.207272f, 0.253291f, 0.309808f, 0.375775f, 0.406060f, 0.429646f, 0.466527f, + 0.072015f, 0.113855f, 0.152641f, 0.185966f, 0.212160f, 0.244403f, 0.279304f, 0.353568f, 0.397873f, 0.432053f, + 0.057609f, 0.105877f, 0.148922f, 0.188700f, 0.232036f, 0.282119f, 0.329612f, 0.375947f, 0.416782f, 0.457815f, + 0.050973f, 0.100177f, 0.140092f, 0.185550f, 0.238056f, 0.273150f, 0.321487f, 0.383660f, 0.415638f, 0.456817f, + 0.039806f, 0.126350f, 0.178948f, 0.213873f, 0.255655f, 0.294524f, 0.330344f, 0.360261f, 0.416162f, 0.466911f, + 0.063393f, 0.108247f, 0.149242f, 0.189683f, 0.222867f, 0.262691f, 0.299364f, 0.359972f, 0.412753f, 0.457277f, + 0.050600f, 0.099234f, 0.150035f, 0.198292f, 0.246257f, 0.290806f, 0.336586f, 0.382631f, 0.424274f, 0.463374f, + 0.067312f, 0.111338f, 0.151025f, 0.202518f, 0.240338f, 0.269562f, 0.300697f, 0.385260f, 0.440923f, 0.472259f, + 0.092753f, 0.142329f, 0.176758f, 0.223424f, 0.268502f, 0.296763f, 0.319964f, 0.376238f, 0.441441f, 0.477606f, + 0.057530f, 0.097677f, 0.159509f, 0.201106f, 0.224079f, 0.245637f, 0.286003f, 0.375766f, 0.445386f, 0.477458f, + 0.055718f, 0.105169f, 0.156792f, 0.203385f, 0.244396f, 0.285413f, 0.325547f, 0.384007f, 0.421448f, 0.459753f, + 0.044415f, 0.093549f, 0.159707f, 0.192449f, 0.225942f, 0.267813f, 0.348584f, 0.389866f, 0.428214f, 0.465053f, + 0.073100f, 0.142639f, 0.179538f, 0.209861f, 0.241096f, 0.284495f, 0.333600f, 0.382609f, 0.420087f, 0.454347f, + 0.056150f, 0.133011f, 0.171789f, 0.209798f, 0.243168f, 0.280293f, 0.313300f, 0.361975f, 0.402894f, 0.441400f, + 0.050711f, 0.100022f, 0.148476f, 0.200043f, 0.247876f, 0.305520f, 0.362364f, 0.399378f, 0.431164f, 0.470519f, + 0.050151f, 0.102726f, 0.178139f, 0.214644f, 0.239684f, 0.272465f, 0.350549f, 0.395865f, 0.439724f, 0.472007f, + 0.057321f, 0.112456f, 0.176664f, 0.223544f, 0.265943f, 0.332838f, 0.374528f, 0.400087f, 0.422190f, 0.452780f, + 0.068936f, 0.111462f, 0.152424f, 0.184775f, 0.213783f, 0.241083f, 0.269875f, 0.305906f, 0.384801f, 0.449720f, + 0.047841f, 0.090004f, 0.137440f, 0.184176f, 0.226672f, 0.280565f, 0.332422f, 0.379775f, 0.414877f, 0.455906f, + 0.051208f, 0.095910f, 0.134766f, 0.179194f, 0.228900f, 0.267574f, 0.317929f, 0.370086f, 0.401118f, 0.446217f, + 0.057304f, 0.108307f, 0.167260f, 0.219044f, 0.253957f, 0.285245f, 0.321407f, 0.369771f, 0.413636f, 0.462874f, + 0.062714f, 0.102112f, 0.146902f, 0.188999f, 0.226385f, 0.267241f, 0.309584f, 0.346847f, 0.387502f, 0.451009f, + 0.045352f, 0.084823f, 0.120662f, 0.187181f, 0.252978f, 0.294385f, 0.328589f, 0.369623f, 0.440700f, 0.470814f, + 0.054539f, 0.107161f, 0.151423f, 0.184774f, 0.222621f, 0.270311f, 0.310645f, 0.379532f, 0.421532f, 0.464395f, + 0.041931f, 0.097165f, 0.176126f, 0.244078f, 0.285457f, 0.311564f, 0.343280f, 0.380534f, 0.427693f, 0.465345f, + 0.049656f, 0.089927f, 0.123487f, 0.158143f, 0.207460f, 0.251012f, 0.298147f, 0.386381f, 0.434882f, 0.470227f, + 0.064608f, 0.113031f, 0.152816f, 0.202317f, 0.244207f, 0.281442f, 0.321974f, 0.369506f, 0.411120f, 0.458796f, + 0.041667f, 0.088042f, 0.149426f, 0.187507f, 0.226638f, 0.278825f, 0.313814f, 0.388390f, 0.448889f, 0.473167f, + 0.063255f, 0.112633f, 0.161884f, 0.207517f, 0.248243f, 0.290171f, 0.339946f, 0.392358f, 0.424077f, 0.465045f, + 0.047738f, 0.124639f, 0.167770f, 0.198211f, 0.225569f, 0.260577f, 0.319448f, 0.357208f, 0.390762f, 0.448737f, + 0.056281f, 0.097031f, 0.133672f, 0.175612f, 0.249666f, 0.302816f, 0.358207f, 0.396586f, 0.431468f, 0.464859f, + 0.065840f, 0.114000f, 0.154376f, 0.181022f, 0.219481f, 0.272109f, 0.342283f, 0.390114f, 0.425579f, 0.463533f, + 0.054385f, 0.087287f, 0.133120f, 0.219075f, 0.277198f, 0.318550f, 0.353398f, 0.394571f, 0.451311f, 0.473024f, + 0.050377f, 0.099870f, 0.139986f, 0.179622f, 0.215723f, 0.254691f, 0.298673f, 0.344156f, 0.401375f, 0.451981f, + 0.047282f, 0.095779f, 0.154096f, 0.204588f, 0.238142f, 0.277769f, 0.328001f, 0.383819f, 0.421546f, 0.464335f, + 0.051096f, 0.097245f, 0.143694f, 0.189341f, 0.232614f, 0.275390f, 0.321690f, 0.370345f, 0.414317f, 0.459688f, + 0.057607f, 0.108697f, 0.166883f, 0.217010f, 0.265314f, 0.303576f, 0.339093f, 0.374926f, 0.429392f, 0.466921f, + 0.058130f, 0.096368f, 0.163828f, 0.194469f, 0.230519f, 0.266092f, 0.322506f, 0.379323f, 0.410417f, 0.440281f, + 0.059593f, 0.104108f, 0.143990f, 0.199751f, 0.246890f, 0.283738f, 0.342763f, 0.388274f, 0.417119f, 0.460115f, + 0.044521f, 0.105111f, 0.173587f, 0.207942f, 0.239336f, 0.273945f, 0.308799f, 0.369491f, 0.436878f, 0.469005f, + 0.074773f, 0.133154f, 0.177818f, 0.224283f, 0.264970f, 0.306138f, 0.340046f, 0.370218f, 0.412563f, 0.459546f, + 0.075738f, 0.111821f, 0.145360f, 0.181385f, 0.219465f, 0.256030f, 0.308392f, 0.373355f, 0.418157f, 0.463492f, + 0.056087f, 0.105731f, 0.160372f, 0.206032f, 0.244637f, 0.282396f, 0.334056f, 0.375992f, 0.420837f, 0.468046f, + 0.076209f, 0.108262f, 0.143499f, 0.182696f, 0.233318f, 0.271088f, 0.327756f, 0.373740f, 0.439247f, 0.474235f, + 0.052399f, 0.112281f, 0.162812f, 0.201017f, 0.261354f, 0.299326f, 0.327620f, 0.386801f, 0.447769f, 0.474791f, + 0.074893f, 0.121992f, 0.163699f, 0.207822f, 0.244930f, 0.271999f, 0.296466f, 0.345316f, 0.435127f, 0.476239f, + 0.058176f, 0.105085f, 0.149574f, 0.194188f, 0.249818f, 0.296524f, 0.337963f, 0.402402f, 0.448624f, 0.472243f, + 0.060779f, 0.099068f, 0.167491f, 0.198796f, 0.227494f, 0.254019f, 0.329803f, 0.403981f, 0.450520f, 0.475438f, + 0.052532f, 0.104934f, 0.160049f, 0.218916f, 0.277885f, 0.331831f, 0.371634f, 0.402258f, 0.429073f, 0.470420f, + 0.066857f, 0.108497f, 0.146533f, 0.186402f, 0.214087f, 0.239551f, 0.273028f, 0.339210f, 0.442001f, 0.475864f, + 0.058742f, 0.098634f, 0.140424f, 0.200627f, 0.237759f, 0.274315f, 0.336864f, 0.374803f, 0.415969f, 0.461915f, + 0.055406f, 0.096635f, 0.130990f, 0.174857f, 0.231572f, 0.277597f, 0.327848f, 0.376613f, 0.419923f, 0.465467f, + 0.063142f, 0.117506f, 0.165530f, 0.207973f, 0.252515f, 0.292023f, 0.332960f, 0.374855f, 0.422203f, 0.463402f, + 0.073810f, 0.115150f, 0.161374f, 0.201145f, 0.234138f, 0.271883f, 0.300056f, 0.334944f, 0.401703f, 0.457714f, + 0.037073f, 0.082702f, 0.150719f, 0.196430f, 0.266875f, 0.302676f, 0.341803f, 0.383090f, 0.434380f, 0.469480f, + 0.056987f, 0.107639f, 0.156686f, 0.198247f, 0.233643f, 0.272298f, 0.323545f, 0.383539f, 0.424062f, 0.466175f, + 0.068935f, 0.128609f, 0.175519f, 0.221849f, 0.262138f, 0.308833f, 0.354349f, 0.391305f, 0.431214f, 0.465646f, + 0.058327f, 0.099513f, 0.135693f, 0.173498f, 0.210477f, 0.259223f, 0.309074f, 0.365292f, 0.418318f, 0.460997f, + 0.053768f, 0.108301f, 0.148739f, 0.187783f, 0.248594f, 0.294002f, 0.326224f, 0.362744f, 0.418485f, 0.459503f, + 0.072347f, 0.113391f, 0.145826f, 0.186488f, 0.216571f, 0.246055f, 0.321765f, 0.384969f, 0.449111f, 0.479851f, + 0.068789f, 0.114708f, 0.171724f, 0.209662f, 0.240956f, 0.286235f, 0.354813f, 0.393328f, 0.420976f, 0.466079f, + 0.076792f, 0.122064f, 0.164111f, 0.196669f, 0.228773f, 0.263496f, 0.298068f, 0.369577f, 0.412072f, 0.446788f, + 0.072788f, 0.097673f, 0.130704f, 0.203771f, 0.250741f, 0.295679f, 0.355656f, 0.375931f, 0.431577f, 0.468953f, + 0.084680f, 0.123747f, 0.166460f, 0.199970f, 0.238683f, 0.271627f, 0.332322f, 0.389857f, 0.417976f, 0.454237f, + 0.047850f, 0.120236f, 0.163003f, 0.208247f, 0.285501f, 0.314491f, 0.348042f, 0.393049f, 0.436136f, 0.467946f, + 0.074354f, 0.116190f, 0.158181f, 0.188861f, 0.216650f, 0.247676f, 0.294654f, 0.344099f, 0.416305f, 0.461946f, + 0.053571f, 0.101937f, 0.148655f, 0.194776f, 0.237718f, 0.284302f, 0.333285f, 0.379409f, 0.424284f, 0.464382f, + 0.058960f, 0.099074f, 0.140467f, 0.196967f, 0.231626f, 0.264843f, 0.323752f, 0.385782f, 0.425341f, 0.465240f, + 0.043253f, 0.133255f, 0.191933f, 0.224667f, 0.269958f, 0.309788f, 0.340578f, 0.370291f, 0.414823f, 0.464356f, + 0.055527f, 0.103077f, 0.145933f, 0.195951f, 0.237681f, 0.276359f, 0.307310f, 0.343951f, 0.415470f, 0.466831f, + 0.056607f, 0.103731f, 0.150533f, 0.199143f, 0.247090f, 0.294661f, 0.337006f, 0.380695f, 0.436417f, 0.469044f, + 0.058017f, 0.111478f, 0.184738f, 0.222470f, 0.248826f, 0.274226f, 0.313164f, 0.396522f, 0.439606f, 0.469562f, + 0.059766f, 0.131086f, 0.177741f, 0.250119f, 0.292365f, 0.314884f, 0.343841f, 0.383029f, 0.418571f, 0.469165f, + 0.063549f, 0.123913f, 0.167854f, 0.196007f, 0.222730f, 0.248052f, 0.296431f, 0.381363f, 0.440747f, 0.474918f, + 0.057303f, 0.104523f, 0.145906f, 0.215521f, 0.258023f, 0.293742f, 0.329884f, 0.375696f, 0.425649f, 0.463893f, + 0.062113f, 0.113749f, 0.146593f, 0.190918f, 0.221197f, 0.281815f, 0.352860f, 0.400393f, 0.454168f, 0.477972f, + 0.065394f, 0.121516f, 0.199177f, 0.235275f, 0.266790f, 0.299190f, 0.343026f, 0.386286f, 0.439359f, 0.470243f, + 0.079123f, 0.135214f, 0.178870f, 0.220386f, 0.255756f, 0.285377f, 0.317392f, 0.361228f, 0.405450f, 0.467724f, + 0.056167f, 0.115899f, 0.166770f, 0.207524f, 0.241655f, 0.297597f, 0.366322f, 0.404801f, 0.440200f, 0.470576f, + 0.065840f, 0.126504f, 0.164612f, 0.196957f, 0.220935f, 0.267816f, 0.338526f, 0.391567f, 0.453372f, 0.479359f, + 0.044781f, 0.115425f, 0.177337f, 0.247881f, 0.284229f, 0.319088f, 0.355269f, 0.403159f, 0.444401f, 0.467850f +}; + +const float wac_swb[LPC_SHB_ORDER + 1] = +{ + 1.00030000f, 0.99972246f, 0.99889029f, 0.99750487f, + 0.99556853f, 0.99308446f, 0.99005679f, 0.98649053f, + 0.98239158f, 0.97776669f, 0.97262346f +}; + +const float lbr_wb_bwe_lsfvq_cbook_2bit[4*4] = {0.11829331f, 0.18065347f, 0.27315149f, 0.36268139f, + 0.20006990f, 0.24350365f, 0.33066865f, 0.40078221f, + 0.13430431f, 0.20694768f, 0.32580520f, 0.41176145f, + 0.25797083f, 0.29579351f, 0.36694117f, 0.42482337f + }; + +const float wac[LPC_SHB_ORDER + 1] = { 1.000030000f, 0.999876638f, + 0.999506642f, 0.998890286f, + 0.998028026f, 0.996920500f, + 0.995568526f, 0.993973102f, + 0.992135406f, 0.990056789f, + 0.987738783f + }; + +/* 5-bit TD SWB BWE temporal shaping codebook */ +const float SHBCB_SubGain5bit[128] = +{ + -0.1457681f, -0.4764620f, -0.4013963f, -0.3677013f, + -0.4313035f, -0.3313996f, -0.3050383f, -0.2133066f, + -1.0206577f, -0.9364462f, -0.0586007f, -0.4846374f, + -1.6047017f, -0.3614168f, -0.3000874f, -0.2672006f, + -0.0931186f, -0.4041055f, -0.5172903f, -0.5874190f, + -0.4911704f, -0.2494092f, -0.5456603f, -0.1857298f, + -0.2215641f, -0.3130259f, -0.3029806f, -0.4504822f, + -0.0164831f, -1.1390385f, -1.4790464f, -1.5514144f, + -0.5643114f, -0.4608741f, -0.3408080f, -0.1252954f, + -0.1276388f, -0.2821012f, -0.5614353f, -0.8928169f, + -0.2834879f, -0.1340739f, -0.6259241f, -0.5918277f, + -0.1487753f, -0.5728573f, -0.7163700f, -0.2789117f, + -0.8768165f, -0.6980218f, -0.5036601f, -0.0499640f, + -0.9883066f, -0.9968036f, -1.0402167f, -0.0137106f, + -0.3300310f, -0.5241924f, -0.4624851f, -0.1401303f, + -1.6058040f, -1.3385040f, -0.4591369f, -0.1534372f, + -0.1989556f, -0.2591312f, -0.4850197f, -0.4037134f, + -0.1111035f, -0.3369072f, -0.9321365f, -1.2062822f, + -0.2261946f, -0.2280687f, -0.3570638f, -0.6421078f, + -0.6153073f, -0.2471987f, -0.2481002f, -0.3052209f, + -0.2385272f, -0.6048125f, -0.1758713f, -0.5861754f, + -0.0317327f, -0.6809157f, -0.7702834f, -0.7792925f, + -0.2770282f, -0.3142404f, -0.3788958f, -0.2723185f, + -0.2970077f, -0.4682712f, -0.2584636f, -0.2690060f, + -0.5592654f, -0.8185204f, -0.1815633f, -0.2389702f, + -0.7487352f, -0.4618911f, -0.2345186f, -0.1725288f, + -0.4382800f, -0.2999320f, -0.1591911f, -0.5732270f, + -0.3830038f, -0.1750423f, -0.3638722f, -0.3974119f, + -0.7911282f, -0.0631017f, -0.5198654f, -0.6708761f, + -0.5033713f, -0.4643340f, -0.1527029f, -0.3067638f, + -0.3547296f, -0.3050630f, -0.2355810f, -0.3526833f, + -1.0319320f, -0.3646283f, -0.2706210f, -0.1999401f +}; + +/* 5-bit SWB TBE Gain shape codebook in linear domain */ +const float SHBCB_SubGain5bit_Linear[128] = +{ + 0.7148779f, 0.3338397f, 0.3968293f, 0.4288434f, + 0.3704218f, 0.4662302f, 0.4954065f, 0.6119182f, + 0.0953547f, 0.1157587f, 0.8737744f, 0.3276141f, + 0.0248484f, 0.4350941f, 0.5010864f, 0.5405046f, + 0.8070146f, 0.3943615f, 0.3038853f, 0.2585717f, + 0.3227228f, 0.5631068f, 0.2846687f, 0.6520339f, + 0.6003934f, 0.4863782f, 0.4977593f, 0.3544197f, + 0.9627575f, 0.0726042f, 0.0331859f, 0.0280922f, + 0.2727022f, 0.3460397f, 0.4562386f, 0.7493843f, + 0.7453516f, 0.5222745f, 0.2745141f, 0.1279921f, + 0.5206095f, 0.7343889f, 0.2366333f, 0.2559601f, + 0.7099450f, 0.2673885f, 0.1921454f, 0.5261242f, + 0.1327955f, 0.2004371f, 0.3135739f, 0.8913248f, + 0.1027291f, 0.1007387f, 0.0911556f, 0.9689233f, + 0.4677018f, 0.2990939f, 0.3447584f, 0.7242186f, + 0.0247854f, 0.0458665f, 0.3474266f, 0.7023649f, + 0.6324765f, 0.5506413f, 0.3273258f, 0.3947177f, + 0.7742773f, 0.4603549f, 0.1169132f, 0.0621896f, + 0.5940259f, 0.5914681f, 0.4394770f, 0.2279776f, + 0.2424894f, 0.5659803f, 0.5648066f, 0.4951982f, + 0.5773947f, 0.2484205f, 0.6670044f, 0.2593132f, + 0.9295383f, 0.2084896f, 0.1697136f, 0.1662293f, + 0.5284109f, 0.4850199f, 0.4179306f, 0.5341725f, + 0.5046524f, 0.3401957f, 0.5514884f, 0.5382623f, + 0.2758891f, 0.1518727f, 0.6583195f, 0.5768060f, + 0.1783466f, 0.3452303f, 0.5827488f, 0.6721577f, + 0.3645189f, 0.5012657f, 0.6931207f, 0.2671610f, + 0.4139961f, 0.6682788f, 0.4326411f, 0.4004867f, + 0.1617602f, 0.8647654f, 0.3020888f, 0.2133654f, + 0.3137825f, 0.3432938f, 0.7035535f, 0.4934421f, + 0.4418455f, 0.4953783f, 0.5813250f, 0.4439323f, + 0.0929112f, 0.4318886f, 0.5362644f, 0.6310444f +}; + +/* 5-bit TD WB BWE temporal shaping codebook */ +const float HBCB_SubGain5bit[128] = +{ + -59.470337f, -69.488670f, -38.659931f, -19.719824f, + -1.7830310f, -4.812642f, -8.744000f, -10.867781f, + -13.246320f, -15.094897f, -15.727152f, -15.801854f, + -7.879738f, -5.120556f, -3.429671f, -7.706632f, + -50.144310f, -60.062901f, -32.317268f, -16.175051f, + -10.900867f, -11.864854f, -9.386131f, -1.335022f, + -13.235695f, -14.241489f, -13.557719f, -11.050961f, + -0.612834f, -7.908495f, -9.054081f, -8.763001f, + -57.235970f, -64.192162f, -30.073193f, -4.640105f, + -10.025522f, -6.857354f, -1.353238f, -6.571805f, + -8.077633f, -9.067668f, -9.157619f, -9.171074f, + -6.871120f, -4.052971f, -7.285939f, -7.970854f, + -44.516933f, -53.591618f, -30.267939f, -10.678650f, + -3.160364f, -7.559843f, -7.367127f, -3.052069f, + -8.343053f, -7.577167f, -3.678010f, -6.135194f, + -7.522539f, -9.290725f, -10.048427f, -8.378534f, + -68.482224f, -75.261124f, -30.160120f, -10.437404f, + -2.787138f, -2.637044f, -5.920231f, -8.091020f, + -7.519012f, -9.081453f, -9.857375f, -10.380337f, + -6.422596f, -6.540410f, -7.954427f, -7.877131f, + -49.924343f, -57.036163f, -26.225056f, -5.391133f, + -8.174749f, -6.656519f, -4.389360f, -2.953642f, + -10.844235f, -10.494500f, -8.072153f, -4.695106f, + -4.305107f, -2.655748f, -7.638941f, -9.281904f, + -56.389565f, -61.898930f, -19.212666f, -8.088096f, + -6.302619f, -2.904698f, -7.059662f, -5.392998f, + -2.423694f, -5.054863f, -7.913060f, -8.444733f, + -3.101384f, -6.855487f, -4.557333f, -6.881396f, + -45.418392f, -52.252014f, -22.952511f, -7.653957f, + -3.941019f, -7.339684f, -4.011926f, -7.481068f, + -6.772878f, -4.939885f, -7.817589f, -3.977276f, + -2.728315f, -6.770474f, -8.485444f, -4.669493f +}; + + +/* 6 bit Quantizer table for SHB overall gain */ +const float SHBCB_FrameGain64[64]= +{ + 0.044072020f, 0.074116257f, 0.104772820f, 0.137129910f, 0.172361440f, 0.209110170f, 0.248146360f, 0.290349910f, + 0.336033220f, 0.384576680f, 0.436074570f, 0.491054220f, 0.550217560f, 0.613450140f, 0.681455200f, 0.753997600f, + 0.831286250f, 0.914336560f, 1.003638100f, 1.100985500f, 1.205300400f, 1.317519300f, 1.437191800f, 1.566197500f, + 1.704663300f, 1.853099500f, 2.013720200f, 2.190476500f, 2.382512800f, 2.591447500f, 2.818724200f, 3.064693900f, + 3.331486000f, 3.621288500f, 3.936974000f, 4.279052900f, 4.652247100f, 5.063426700f, 5.516226500f, 6.014047700f, + 6.565030700f, 7.179005400f, 7.869640600f, 8.646445300f, 9.521977600f, 10.52553600f, 11.67516800f, 13.00652900f, + 14.56494800f, 16.38657700f, 18.56994600f, 21.17650800f, 24.29317200f, 27.95810000f, 32.33308400f, 37.72507700f, + 44.44091200f, 52.62181300f, 62.89529200f, 76.21739000f, 94.34608600f, 119.5521800f, 160.0594500f, 245.1366400f +}; + +/* 4 bit Quantizer table for SHB overall gain */ +const float SHBCB_FrameGain16[16]= +{ + 0.148650413f, + 0.477894376f, + 0.970739390f, + 1.882108080f, + 3.981442531f, + 7.946689290f, + 14.46817648f, + 24.39527659f, + 39.12384197f, + 60.03913602f, + 88.76762784f, + 130.1507349f, + 184.4881647f, + 271.3320980f, + 409.9269865f, + 735.8126500f +}; + +/* 18th order elliptic Bandpass filter at 14.15 to 20 kHz sampled at 48 kHz b0,b1,b2,a0,a1,a2 */ +const float full_band_bpf_1[6][5] = +{ + { 9.6362039055508E-02f, 9.7862105350605E-02f, 3.0245537519444E-02f, 9.7862105350605E-02f, 9.6362039055508E-02f}, + { 9.6362039055508E-02f, 1.4633143118038E-01f, 1.0233713813742E-01f, 1.4633143118038E-01f, 9.6362039055508E-02f}, + { 9.6362039055508E-02f, 1.6626923151583E-02f, -1.3709502682285E-01f, 1.6626923151583E-02f, 9.6362039055508E-02f}, + { 1.0000000000000E+00f, 2.3991100643722E+00f, 2.9774531499625E+00f, 2.0824517848412E+00f, 8.0090184246950E-01f}, + { 1.0000000000000E+00f, 1.8724727524876E+00f, 2.4558672940808E+00f, 1.6868952908597E+00f, 7.5556052044790E-01f}, + { 1.0000000000000E+00f, 2.5823882989829E+00f, 3.2419903202957E+00f, 2.1041782509434E+00f, 6.8348510539492E-01f} +}; + +/* 12th order elliptic Bandpass filter at 16.3 to 19.8 kHz sampled at 48 kHz b0,b1,b2,a0,a1,a2 */ +const float full_band_bpf_2[6][5] = +{ + { 6.0003889556380E-02f, 1.1128037231775E-01f, 1.1894140617207E-01f, 1.1128037231775E-01f, 6.0003889556380E-02f}, + { 6.0003889556380E-02f, 1.4172832594169E-01f, 1.6515046627146E-01f, 1.4172832594169E-01f, 6.0003889556380E-02f}, + { 6.0003889556380E-02f, 3.1639978682801E-02f, -3.7925280401819E-02f, 3.1639978682801E-02f, 6.0003889556380E-02f}, + { 1.0000000000000E+00f, 2.7969061159585E+00f, 3.7380107651703E+00f, 2.5896033662624E+00f, 8.7195105769838E-01f}, + { 1.0000000000000E+00f, 2.4858753840930E+00f, 3.3360972572945E+00f, 2.3002595115472E+00f, 8.4059566462167E-01f}, + { 1.0000000000000E+00f, 2.8681737877693E+00f, 3.8085295994769E+00f, 2.5421873471575E+00f, 7.9182537841461E-01f} +}; + +/* 12th order elliptic Bandpass filter at 15.4 to 20.0 kHz sampled at 48 kHz b0,b1,b2,a0,a1,a2 */ +const float full_band_bpf_3[6][5] = +{ + {7.4636437949154E-02f, 1.0834902081890E-01f, 8.7514468139390E-02f, 1.0834902081890E-01f, 7.4636437949154E-02f}, + {7.4636437949154E-02f, 1.4782752996297E-01f, 1.4824632166087E-01f, 1.4782752996297E-01f, 7.4636437949154E-02f}, + {7.4636437949154E-02f, 2.4020393588811E-02f, -8.1869063979759E-02f, 2.4020393588811E-02f, 7.4636437949154E-02f}, + {1.0000000000000E+00f, 2.6521893008573E+00f, 3.4460829518042E+00f, 2.3910633156124E+00f, 8.3876600358846E-01f}, + {1.0000000000000E+00f, 2.2507856816983E+00f, 2.9756720931932E+00f, 2.0502894449026E+00f, 8.0167514850932E-01f}, + {1.0000000000000E+00f, 2.7689100300130E+00f, 3.5940097427365E+00f, 2.3681560760262E+00f, 7.4233948915492E-01f} +}; + + +/* 4-bit/3-bit TD SWB BWE differential LSF scalar quantizer tables */ +const float lsf_q_cb_4b[16] = +{ + 0.01798018f, 0.02359377f, 0.02790103f, 0.03181538f, + 0.03579450f, 0.03974377f, 0.04364637f, 0.04754591f, + 0.05181858f, 0.05624165f, 0.06022101f, 0.06419064f, + 0.06889389f, 0.07539274f, 0.08504436f, 0.10014875f +}; + +const float lsf_q_cb_3b[8] = +{ + 0.02070812f, 0.02978384f, 0.03800822f, 0.04548685f, + 0.05307309f, 0.06137543f, 0.07216742f, 0.09013262f +}; + +const float * const lsf_q_cb[NUM_Q_LSF] = { lsf_q_cb_4b, lsf_q_cb_4b, lsf_q_cb_3b, lsf_q_cb_3b, lsf_q_cb_3b }; +const int16_t lsf_q_cb_size[NUM_Q_LSF] = {16, 16, 8, 8, 8}; +const int16_t lsf_q_num_bits[NUM_Q_LSF] = { 4, 4, 3, 3, 3 }; + +/* Tables for approximation of upper half of SWB LSFs */ +const float mirror_point_q_cb[MIRROR_POINT_Q_CB_SIZE] = { 0.01436178f, 0.02111641f, 0.02735687f, 0.03712105f }; + +const float lsf_grid[4][5] = +{ + { 0.15998503f, 0.31215086f, 0.47349756f, 0.66540429f, 0.84043882f }, + { 0.15614473f, 0.30697672f, 0.45619822f, 0.62493785f, 0.77798001f }, + { 0.14185823f, 0.26648724f, 0.39740108f, 0.55685745f, 0.74688616f }, + { 0.15416561f, 0.27238427f, 0.39376780f, 0.59287916f, 0.86613986f } +}; + +const float grid_smoothing[5] = { 0.2f, 0.35f, 0.5f, 0.75f, 0.8f }; + +const float allpass_poles_3_ov_2[9] = +{ + 0.072265625000000f, + 0.626983642578125f, + 0.934020996093750f, + 0.778808593750000f, + 0.219360351562500f, + 0.970703125000000f, + 0.872039794921875f, + 0.438964843750000f, + 0.990966796875000f +}; + +const float decimate_3_ov_2_lowpass_num[3] = +{ + 0.195271809895833f, + 0.390543619791667f, + 0.195271809895833f +}; + +const float decimate_3_ov_2_lowpass_den[3] = +{ + 1.0f, + 0.0f, + 0.171630859375f +}; + + +/*------------------------------------------------------------------------------* + * WB BWE tables + *------------------------------------------------------------------------------*/ + +const float F_2_5[64] = +{ + 1.1606680f, 0.6594560f, + -4.9874350f, -5.1700310f, + 10.230799f, -0.0125740f, + 10.605126f, 9.7910260f, + -0.3739880f, -0.6027910f, + 6.2753817f, 0.3307670f, + 9.4537100f, 8.8558020f, + 2.9320890f, 2.1643160f, + 3.1332030f, 2.9710870f, + 8.061906f, -0.5905290f, + 15.754963f, 5.0496380f, + 17.227070f, 18.329395f, + -2.4710190f, -3.1725330f, + -1.4136470f, -1.9457110f, + 15.147771f, 14.506490f, + 11.358370f, 11.714662f, + 9.4275510f, -0.1223030f, + 7.0970160f, -1.5805260f, + 12.498663f, 3.1614850f, + 10.349261f, 1.5185040f, + 5.3809850f, -1.7341900f, + 1.1224600f, -2.2397020f, + 12.362551f, 12.133788f, + 4.2788690f, -1.7729040f, + 6.1577130f, 5.4971410f, + 3.3243130f, -2.5710470f, + 19.097071f, 9.3576920f, + 7.6509204f, 7.4404626f, + -0.5055090f, -3.7073090f, + 18.584702f, 11.302494f, + 18.706564f, 18.308905f, + 23.010420f, 22.915377f +}; + +/*------------------------------------------------------------------------------* + * SWB BWE tables + *------------------------------------------------------------------------------*/ + +const int16_t swb_bwe_trans_subband[SWB_FENV_TRANS+1] = {240, 316, 392, 476, 560}; +const int16_t swb_bwe_trans_subband_width[SWB_FENV_TRANS] = {76, 76, 84, 84}; +const int16_t swb_bwe_subband[SWB_FENV+1] = {240, 256, 280, 296, 320, 336, 360, 376, 400, 424, 448, 472, 496, 528, 560}; +const float swb_inv_bwe_subband_width[SWB_FENV] = {0.0625f, 0.04167f, 0.0625f, 0.04167f, 0.0625f, 0.04167f, 0.0625f, 0.04167f, 0.04167f, 0.04167f, 0.04167f, 0.04167f, 0.03125f, 0.03125f}; +const int16_t swb_bwe_sm_subband[SWB_FENV] = {248, 268, 288, 308, 328, 348, 368, 388, 412, 436, 460, 484, 512, 544}; +const float smooth_factor[SWB_FENV-1] = {0.05f, 0.05f, 0.05f, 0.05f, 0.05f, 0.05f, 0.05f, 0.0417f, 0.0417f, 0.0417f, 0.0417f, 0.03125f, 0.03125f}; + +const int16_t fb_bwe_subband[DIM_FB+1] = {640, 680, 720, 800}; +const float fb_inv_bwe_subband_width[DIM_FB] = {0.0250f, 0.0250f, 0.0125f}; +const int16_t fb_bwe_sm_subband[DIM_FB] = {656, 696, 760}; +const float fb_smooth_factor[DIM_FB] = {0.03125f, 0.0250f, 0.015625f}; + +const float EnvCdbk11 [N_CB11 * DIM11] = +{ + -8.6703f, 0.1116f, 4.5639f, 8.2950f, 8.5148f, 4.7195f, 2.8963f, + 5.9419f, -1.2168f, -3.2933f, -5.9491f, -7.6969f, -8.6146f, -9.9275f, + 2.9127f, 7.1689f, 13.5188f, 17.1801f, 16.7640f, 16.3455f, 13.5231f, + 6.3569f, 9.6697f, 11.4712f, 11.0915f, 8.5859f, 6.7523f, 5.1755f, + -2.0082f, -2.8539f, -2.1756f, -0.7832f, 0.3904f, 1.8543f, 2.1094f, + 2.5602f, 3.7358f, 4.9688f, 4.2290f, 3.0234f, 2.6829f, 1.7943f, + 23.3857f, 21.3282f, 18.3157f, 16.3757f, 15.0204f, 14.1209f, 13.2521f, + 13.9500f, 18.9069f, 22.5926f, 24.4781f, 23.1748f, 20.1496f, 17.3157f, + 11.5571f, 8.1506f, 4.6099f, 3.8231f, 4.6089f, 5.3538f, 6.3890f, + 23.5508f, 24.0512f, 25.1225f, 26.4155f, 27.3361f, 27.9432f, 27.5377f, + -3.2117f, 0.8204f, 1.7588f, 0.6950f, -2.4959f, -5.2582f, -6.1620f, + 17.3871f, 16.3436f, 16.0602f, 16.9090f, 18.8782f, 20.4382f, 21.5310f, + 13.3594f, 15.6030f, 16.8792f, 16.4242f, 14.3912f, 12.3198f, 10.3571f, + -14.5849f, -9.0025f, -5.4218f, -1.2669f, 0.0853f, -3.3069f, -4.4553f, + 3.3195f, 1.9941f, 3.5010f, 6.9539f, 8.3192f, 10.5007f, 11.0406f, + 12.8683f, 11.0255f, 9.8051f, 9.8299f, 11.8326f, 13.3332f, 15.0119f, + -13.9167f, -13.3153f, -12.4970f, -11.3929f, -10.0932f, -8.9132f, -7.7378f, + -10.6935f, -12.4430f, -14.6553f, -16.8742f, -17.5158f, -17.6704f, -16.9116f, + -29.4308f, -29.2243f, -28.4494f, -28.0282f, -26.3950f, -24.5370f, -22.9103f, + -19.0168f, -18.8921f, -17.9786f, -17.2745f, -15.9625f, -14.5997f, -12.9787f, + -54.2808f, -53.8105f, -52.6712f, -52.1042f, -50.4929f, -48.4342f, -46.7588f, + 32.8477f, 32.8894f, 32.4420f, 31.6529f, 31.0708f, 30.3821f, 29.2828f, + 28.0454f, 26.7402f, 24.8801f, 23.3249f, 21.7053f, 20.7367f, 19.6371f, + 18.0979f, 15.6543f, 12.7634f, 9.4607f, 8.0952f, 6.9453f, 5.8996f, + 39.5644f, 40.7490f, 41.1718f, 40.9096f, 39.7482f, 38.4272f, 37.4463f, + 11.4554f, 10.5291f, 8.0459f, 5.0217f, 1.6581f, -0.9919f, -3.2238f, + -39.1890f, -38.4633f, -37.2799f, -36.7970f, -35.1580f, -33.2348f, -31.5786f, + 7.1490f, 3.6224f, -0.6163f, -1.5147f, -1.4079f, -1.4364f, -1.1211f, + -85.7873f, -85.5637f, -84.1707f, -83.8699f, -82.0486f, -80.1192f, -78.3737f, + -23.7889f, -23.9925f, -23.1930f, -22.8609f, -21.4574f, -19.9363f, -18.2458f, + -5.3981f, -6.4065f, -8.6148f, -9.9870f, -10.8787f, -11.7942f, -11.6944f, + -5.0767f, -6.1222f, -6.8130f, -6.4157f, -5.5037f, -4.2203f, -3.5243f, +}; + +const float EnvCdbk1st [N_CB1ST * DIM1ST] = +{ + -7.1064f, -4.4453f, 2.9351f, + -1.9308f, 0.6335f, -3.2258f, + -12.4978f, -0.4815f, 9.6818f, + -8.0902f, 0.9278f, -1.6759f, + -7.1051f, 6.9529f, 4.8166f, + 1.1089f, 4.6364f, -4.3871f, + -6.5985f, -2.8197f, -1.8909f, + -4.9078f, 0.2022f, -5.2175f, + -2.3609f, 14.6030f, -5.0669f, + 2.1685f, 1.6108f, 2.9025f, + -2.4455f, -6.5834f, 5.9636f, + 0.5645f, 6.0806f, -0.8753f, + -2.4904f, 5.3534f, 6.2069f, + -4.6416f, 0.1448f, -1.6019f, + -1.6724f, -12.9702f, 7.2641f, + 10.1438f, -0.3729f, -11.2325f, + -2.8994f, -2.2776f, -2.6711f, + 6.2755f, -6.5279f, -7.3185f, + -4.3406f, -3.6577f, -5.3655f, + 1.0746f, -9.0396f, 2.0233f, + 10.4764f, 9.2495f, -1.1811f, + 7.0665f, -2.1678f, -2.2621f, + 12.4715f, -4.9604f, -4.7190f, + 2.9306f, 0.3267f, 0.6027f, + -4.5326f, 1.6741f, 4.2905f, + 3.1882f, -2.3954f, -11.3147f, + 8.4338f, -7.3615f, 4.8623f, + -2.6210f, 1.6649f, 12.4120f, + 3.3880f, -0.5639f, -2.4950f, + 3.2948f, -7.3733f, 8.8713f, + 6.0225f, 1.0109f, -0.5767f, + -6.5622f, 4.0120f, 1.1130f, + 0.6314f, -2.9813f, 6.5088f, + -7.4838f, 4.5892f, -4.7926f, + -1.3492f, -3.5415f, -0.5914f, + 7.7312f, 4.1477f, 1.5695f, + -4.8092f, 9.5178f, 12.2277f, + -9.4609f, 1.4097f, 4.0613f, + -16.8501f, -16.0390f, -16.4874f, + 0.5711f, -4.6892f, -7.1391f, + 1.8938f, 3.4746f, -15.0275f, + 1.5014f, -9.6125f, -11.1128f, + 5.9617f, -2.3434f, 6.2473f, + -3.2715f, -2.2302f, 4.2871f, + 6.9371f, -13.2527f, 15.8528f, + -13.0084f, 9.4873f, 6.7652f, + 1.8265f, -8.3584f, -3.6477f, + 3.2532f, 8.9518f, -4.4112f, + -0.0785f, -4.0189f, 2.5487f, + -1.3509f, 0.6566f, 7.1658f, + -6.7577f, 3.2716f, 8.7273f, + 6.3343f, -6.6206f, -0.7569f, + -12.4925f, -3.0187f, 0.8888f, + 4.1806f, 6.8020f, 1.1128f, + 6.4660f, -0.8290f, -6.3590f, + 8.5089f, 2.3611f, 6.9696f, + 7.0355f, -12.5942f, -3.3116f, + -3.1974f, 1.3584f, 0.7314f, + 0.0624f, 1.1725f, 0.9528f, + 3.0031f, 0.7847f, 6.0715f, + 2.8083f, -1.5392f, 3.0486f, + 1.2144f, 11.1444f, 0.7234f, + 4.5417f, 1.9083f, -3.9930f, + -1.2897f, 1.7931f, 3.4268f, + 0.4267f, -2.1125f, -2.6993f, + -1.9870f, -1.0444f, 1.8659f, + -1.3273f, -1.6306f, -5.4788f, + -3.3603f, -2.6373f, -10.5580f, + 4.0034f, 3.2267f, 0.9765f, + -4.0725f, 3.9372f, -1.6940f, + -4.0711f, -2.4655f, 0.2350f, + -0.6742f, 1.2957f, -8.1420f, + 3.8434f, 3.5916f, -7.9753f, + -4.9118f, -8.9335f, 1.3240f, + 1.4296f, -5.1151f, -0.6183f, + 4.0664f, 4.0592f, 4.2287f, + 13.9299f, 3.5845f, 0.8860f, + 0.2439f, -0.5414f, 3.6573f, + 9.4697f, 2.8531f, -3.9907f, + -2.9106f, 7.6316f, 1.6666f, + -4.2611f, -5.3043f, -1.8686f, + -0.6757f, 8.2847f, -9.2447f, + -8.4955f, 9.9028f, -7.6020f, + -3.4387f, -7.6714f, -6.0496f, + -0.9730f, -4.6977f, -3.6204f, + -9.2868f, -1.7316f, -6.9325f, + -5.6205f, -2.2721f, 7.9555f, + -2.0678f, -14.3696f, -2.1494f, + 2.3769f, -1.1084f, -6.1183f, + 0.7835f, 0.2474f, -1.3438f, + 5.3736f, 0.8512f, 3.1856f, + 9.6507f, -1.3584f, 1.8708f, + -5.4226f, 3.8576f, -10.4452f, + 5.5806f, -13.8209f, 4.3938f, + 3.3739f, -5.2782f, 3.3015f, + 1.1772f, 3.8147f, 1.5955f, + -4.3838f, 13.1395f, 4.3243f, + -0.8337f, 2.8533f, -1.2842f, + 3.2788f, -2.6680f, -0.3603f, + 2.4648f, 4.5784f, 9.2339f, + 2.3348f, 2.6773f, -1.2865f, + -3.0488f, -5.1440f, 1.7493f, + -1.6552f, -0.5978f, -0.7764f, + 3.0011f, -1.2935f, 11.0366f, + 3.4439f, -4.0880f, -3.8069f, + -1.4637f, -7.1676f, -1.1671f, + 11.1758f, -13.1846f, -12.3361f, + 8.1990f, 8.4704f, -10.2721f, + 6.2564f, 7.5395f, 5.6662f, + 5.0554f, 4.9418f, -2.2877f, + -9.7668f, -10.0395f, -10.4193f, + -3.1503f, -5.9735f, 12.7823f, + -2.0408f, 4.1857f, 1.8667f, + 15.7600f, -9.7299f, 1.8762f, + -7.4519f, 9.4311f, -0.6946f, + -6.1047f, -0.5603f, 1.7096f, + 0.8003f, 3.3634f, 5.0259f, + -2.6989f, 3.7629f, -5.3679f, + -9.2139f, -7.9377f, -3.4621f, + 0.6323f, -1.7255f, 0.6234f, + 0.7594f, 9.7404f, 7.6543f, + -9.8933f, -10.0711f, 7.5139f, + 1.0426f, 6.6449f, 3.6587f, + 11.4042f, 11.5230f, 9.3039f, + -2.6163f, 8.2102f, -3.3574f, + -12.2920f, 5.4115f, -0.8387f, + 5.7900f, -2.3232f, 1.6209f, + 0.8904f, 1.1318f, -4.1407f, +}; + +const float EnvCdbk2nd [N_CB2ND * DIM2ND] = +{ + 4.3123f, -7.1616f, -4.3357f, -3.7263f, + 2.9572f, 3.3303f, -0.6874f, 1.1173f, + -3.4084f, -2.2922f, -0.0278f, 5.6960f, + -1.8039f, -2.1619f, -1.3655f, 0.4079f, + 7.5721f, 7.6436f, -5.2359f, -2.7457f, + 4.6943f, -3.0448f, 0.0822f, 7.7951f, + -11.1369f, -0.6607f, 4.0977f, 3.6717f, + -5.2941f, -2.8345f, -6.9855f, 4.2023f, + -2.9965f, -2.5020f, -2.5223f, -3.4361f, + 0.5260f, -3.2518f, -0.7710f, -3.4717f, + -3.2275f, 0.0098f, 1.0879f, -1.9621f, + -2.7904f, 2.1268f, -2.0540f, 1.4661f, + 1.1360f, -4.2031f, -3.1894f, -15.3458f, + -4.5909f, -1.8549f, 8.6689f, -2.5094f, + 0.7713f, -0.8552f, -4.1104f, -6.2533f, + 4.5892f, -0.6343f, -2.7162f, -1.3109f, + 4.3900f, 0.4919f, -9.0866f, -6.1448f, + 4.5483f, -5.1698f, -7.6465f, 4.1951f, + -8.1259f, -8.4044f, 0.4404f, 2.5339f, + -2.4877f, -3.3596f, 2.8155f, 1.0442f, + -2.3782f, 6.4752f, -3.9302f, -5.2807f, + 6.3692f, 8.6921f, 8.3109f, 7.1381f, + -4.3445f, -5.2789f, 7.2494f, 6.4679f, + -8.3291f, 3.9280f, 3.0088f, -5.0540f, + -1.8438f, 3.0318f, 6.4879f, 8.7826f, + -0.4718f, -2.2438f, -5.7862f, -1.2336f, + 10.0184f, -4.2246f, 0.7347f, 1.1461f, + 1.5549f, 10.1485f, 2.7490f, -4.4112f, + 3.9959f, 0.4078f, 2.1473f, 1.9496f, + -1.6255f, 0.4947f, 0.9865f, -7.3990f, + 1.7798f, -10.0697f, 0.7408f, 3.9759f, + -5.8117f, 1.1179f, -4.6947f, -3.5752f, + -4.5471f, 7.3211f, 6.4493f, 1.1780f, + -5.1254f, -6.0444f, -6.3492f, -5.9237f, + 0.6636f, -0.9113f, 3.1921f, 4.7217f, + -4.2586f, 1.3321f, 2.7703f, 2.8306f, + 3.3356f, 3.2010f, -1.0860f, -4.2324f, + -0.0572f, 0.4406f, 1.1161f, 1.1049f, + 4.5545f, -3.5389f, 7.3418f, 1.1747f, + 1.3350f, -0.0281f, -2.2930f, 3.0295f, + -3.0651f, -4.9167f, -4.5557f, 12.4767f, + -6.3679f, -4.1824f, 1.1715f, -4.2173f, + -0.0461f, 0.7412f, -2.1034f, -1.9263f, + 1.3714f, 3.5413f, 7.5363f, -5.9934f, + 1.8748f, 0.1406f, 2.3146f, -2.0562f, + 3.1775f, 4.7516f, 3.8512f, 0.3460f, + 0.3842f, 3.9440f, -8.8737f, 1.0470f, + 10.8029f, -0.3986f, -5.1051f, -3.4119f, + -6.4836f, -1.8259f, -1.4253f, 0.1826f, + 5.8438f, 4.9884f, -0.8889f, -10.9021f, + 6.1138f, -2.6130f, 2.0330f, -6.2434f, + -1.4101f, 4.2119f, 1.7856f, -1.4207f, + 2.1209f, -3.7111f, 0.1093f, 0.9671f, + 7.4373f, 3.1851f, -4.0372f, 4.3934f, + -0.0516f, -7.6212f, 4.2391f, -3.9245f, + -8.6836f, 5.9347f, -2.4382f, 3.3478f, + 4.3786f, 3.2445f, 3.4065f, 5.0603f, + 0.7547f, 8.9234f, -1.6469f, 2.3801f, + -0.6099f, 3.2294f, -2.8632f, 8.0661f, + -13.2408f, -13.2180f, -12.4864f, -12.5763f, + 0.1226f, 3.5019f, 2.1036f, 3.8209f, + -0.0830f, 1.5923f, 5.8683f, 1.5813f, + -2.2786f, -6.4905f, -2.5958f, -0.6420f, + 8.5661f, 3.8130f, 2.3928f, -1.7038f, +}; + +const float EnvCdbk3rd [N_CB3RD * DIM3RD] = +{ + 4.0282f, -9.5862f, 2.9221f, + 10.8219f, 9.5405f, 6.8798f, + -9.1733f, 15.9318f, -3.7461f, + 7.3196f, -2.8702f, -8.7570f, + -0.2304f, 0.1350f, 0.7863f, + -5.9316f, 0.6347f, 7.0661f, + -7.7220f, -4.1510f, -0.4015f, + 9.7056f, 4.7338f, -3.3708f, + 3.4447f, 0.7509f, 0.1539f, + 5.2980f, 3.3256f, 3.8228f, + -5.3770f, -11.5675f, -5.7681f, + 1.9411f, -3.1576f, 2.3162f, + -1.5410f, -2.9216f, -6.1087f, + -3.7107f, -0.7720f, -1.7048f, + -1.9664f, -5.5485f, -0.9158f, + 1.2430f, 3.8485f, -7.4409f, + -0.4624f, 6.9662f, 6.1050f, + 0.8584f, 3.6275f, 1.5624f, + 3.3487f, 0.1438f, -3.8870f, + -3.1533f, 7.5889f, -1.5958f, + -2.9036f, -2.0471f, 2.1555f, + 3.6715f, 6.4176f, -1.1670f, + 3.1461f, -5.5497f, -3.0001f, + -9.1009f, 2.7549f, 0.6103f, + 0.2373f, 0.7927f, 4.7365f, + -0.5389f, 2.0197f, -2.5074f, + 0.2485f, -1.9583f, -1.6996f, + 8.5694f, -2.4399f, 0.6128f, + -6.2513f, 1.3320f, -6.2922f, + 4.4430f, -1.3696f, 9.1921f, + -3.1673f, -6.6975f, 5.9466f, + -3.3971f, 2.3931f, 1.7433f, +}; + +const float EnvCdbk4th [N_CB4TH * DIM4TH] = +{ + 3.9996f, -0.8196f, -0.8101f, 2.3072f, + -1.0920f, -9.7095f, -3.7135f, 3.7429f, + 6.0104f, 4.4383f, 1.6047f, 5.1343f, + 6.8807f, -0.7893f, 5.2292f, 0.7940f, + -9.5225f, -8.2399f, -7.9213f, -8.3027f, + 7.2240f, -5.4987f, -2.6163f, 0.5630f, + -1.8336f, 10.4454f, -6.2079f, -14.0773f, + 6.4124f, -2.7411f, 0.5417f, 9.6735f, + -1.8885f, 1.4517f, -3.3639f, 2.1092f, + -0.4634f, 3.2291f, 3.3717f, 3.7183f, + 0.0901f, 0.3886f, -0.0922f, -1.1829f, + 1.9060f, -8.7228f, -5.5919f, -5.4642f, + 0.2125f, -0.1681f, 0.3767f, -5.9653f, + 4.5684f, 0.5205f, -0.4649f, -2.8002f, + 1.0087f, -4.7453f, -1.7135f, 0.6236f, + -4.0975f, 3.0989f, 3.7884f, -3.0078f, + -7.4785f, -4.8629f, 5.0050f, 1.6473f, + -4.6660f, 3.9258f, 0.6885f, -9.2509f, + -6.3693f, 5.1420f, -4.3946f, -1.4094f, + 4.3917f, 4.4225f, 0.2383f, -8.5391f, + 3.0850f, -8.0277f, 4.5875f, 3.6649f, + 11.6159f, 15.1327f, 9.0448f, 7.9694f, + -1.1705f, 9.7014f, 0.2305f, -3.3610f, + 2.1195f, 5.1060f, -7.2972f, -2.8333f, + 1.5208f, -0.4510f, -3.6906f, -0.5684f, + -7.1756f, -2.2582f, -2.4200f, 3.8082f, + 1.5182f, 6.9508f, 6.7654f, 1.1582f, + 1.4735f, 3.5020f, 6.0723f, 8.8626f, + -3.3340f, 0.1007f, 2.3028f, 5.5202f, + -3.0476f, -3.8494f, 5.4259f, 10.3093f, + 1.2195f, -1.0819f, -3.6514f, -12.8475f, + 6.7971f, 7.2347f, 2.5053f, -2.0263f, + 2.8809f, 3.5069f, -1.8220f, 0.4511f, + 4.6384f, -1.1164f, -5.9159f, -5.1137f, + 0.2896f, -3.1271f, -2.2772f, -3.8561f, + 1.9906f, -2.6068f, 1.6778f, -0.7475f, + 1.6325f, -1.1855f, 3.1499f, 4.9140f, + -4.2298f, -4.1599f, 1.4122f, -8.2593f, + -4.1992f, 0.3220f, 1.0148f, 1.1155f, + -10.0725f, 0.0539f, 0.2930f, -3.3347f, + -2.5810f, -2.4752f, 1.8829f, -2.2701f, + -1.3208f, -1.1970f, 12.7140f, 1.5150f, + -0.8982f, -0.0921f, 4.5338f, 0.8027f, + 1.0017f, 2.1335f, -0.5513f, 5.3882f, + -0.2457f, -3.0283f, -1.8919f, 5.7746f, + -2.0213f, -2.1347f, -1.7599f, 0.3340f, + 5.7553f, -4.6913f, 1.6804f, -7.3915f, + 1.5389f, 3.2468f, 2.4237f, -2.5921f, + 1.3040f, 0.2492f, 6.9277f, -6.1561f, + -6.9638f, 4.9625f, 3.9857f, 3.6889f, + 3.9950f, 0.3810f, -7.4544f, 5.1955f, + -2.1874f, -4.0774f, 1.4863f, 2.7600f, + -1.6673f, -2.7653f, -7.0891f, -0.3532f, + -0.2106f, 8.9759f, -2.0994f, 4.4973f, + -1.9481f, 2.7454f, -3.9753f, 12.9773f, + 0.3607f, 2.7997f, -2.3719f, -4.0297f, + -5.1272f, -5.4413f, -2.2644f, -1.8938f, + 0.1319f, -8.5628f, 3.0773f, -3.3584f, + 10.3160f, 2.4523f, -3.0328f, -1.0118f, + -2.7438f, -0.6207f, -5.7929f, -6.3978f, + -0.1295f, -0.2443f, 0.3800f, 2.1601f, + 2.7023f, 2.0427f, 2.1407f, 1.3633f, + -3.5645f, 0.2107f, -1.7811f, -2.7432f, + -1.3301f, 3.6876f, 0.6120f, 0.3900f, +}; + +const float EnvCdbkFB [N_CB_FB * DIM_FB] = +{ + -16.6120f, -9.7056f, -7.3815f, + 12.7223f, -5.3619f, -4.2098f, + 9.6082f, 17.5423f, 19.7838f, + 22.0461f, 24.1701f, 20.8503f, + -96.6904f, -89.9023f, -88.6123f, + 20.9213f, 27.6011f, 27.4229f, + 3.8206f, 7.0540f, 5.3791f, + 15.0749f, 22.8806f, 23.6351f, + 26.7480f, 32.6483f, 31.6408f, + -19.5344f, -13.3342f, -11.0528f, + -27.4315f, -20.0228f, -17.3748f, + -6.7548f, -7.7102f, -9.4666f, + -3.3129f, 6.9621f, 14.9937f, + 15.4388f, 19.6911f, 17.7925f, + 5.2569f, 13.0270f, 15.1931f, + 40.3814f, 47.0644f, 46.7397f, + -10.6760f, -3.9121f, -1.8455f, + -1.9827f, 5.3065f, 7.7240f, + -148.2341f, -141.3109f, -139.3314f, + -179.7394f, -172.2927f, -172.7284f, + 17.6754f, 17.9788f, -4.8806f, + -0.9671f, 3.3663f, 2.9027f, + 11.3567f, 15.3245f, 13.9899f, + 1.5588f, 8.5468f, 10.5230f, + -7.7918f, -0.8556f, 1.6643f, + -5.4487f, 2.0822f, 4.7052f, + -23.9540f, -16.9712f, -14.6548f, + -34.0472f, -27.2912f, -24.7197f, + -2.8087f, 0.4624f, -3.6887f, + -14.1611f, -7.1801f, -4.6916f, + 32.8420f, 38.8016f, 38.3823f, + 7.4425f, 11.3804f, 9.7292f +}; + +const float Mean_env_fb[DIM_FB] = {13.75f, 6.29f, 3.70f}; + +const float w_NOR[SWB_FENV] = {1.f,0.97826087f,0.957446809f,0.9375f,0.918367347f,0.9f,0.882352941f,0.865384615f,0.849056604f,0.833333333f,0.818181818f,0.803571429f,0.789473684f,0.775862069f}; +const float Mean_env[SWB_FENV] = {28.62f, 28.96f, 28.05f, 27.97f, 26.91f, 26.82f, 26.35f, 25.98f, 24.94f, 24.03f, 22.94f, 22.14f, 21.23f, 20.40f}; + +const float Env_TR_Cdbk1 [N_CB_TR1 * DIM_TR1] = +{ + 0.8936f, -9.1696f, + 32.0275f, 30.1795f, + -1.2201f, 6.6391f, + 38.5962f, 23.2366f, + 34.9278f, 32.6481f, + 15.0969f, 12.8381f, + 9.3963f, 3.1078f, + 14.3113f, 5.5971f, + 11.9502f, 8.6515f, + 2.4150f, 3.4154f, + -21.4020f, -18.1087f, + 8.7368f, 9.8116f, + 16.6597f, 9.4849f, + 25.7150f, 8.0681f, + 17.7652f, 25.6994f, + 44.2378f, 28.6702f, + 41.3199f, 36.1883f, + 33.1667f, 25.2245f, + -5.3921f, -9.7030f, + 13.1902f, 19.8007f, + 28.8781f, 20.0006f, + 18.7409f, 17.3426f, + 21.5070f, 29.7424f, + -13.1680f, -15.5559f, + 10.9594f, 11.5574f, + 8.7570f, 13.8680f, + 5.2123f, 11.9711f, + 8.0290f, -5.2743f, + 3.1843f, 21.5110f, + 19.2978f, 5.6924f, + -7.6163f, -4.0852f, + 2.5510f, -4.4247f, + 3.4072f, -14.1479f, + -6.8577f, 0.9589f, + 22.6250f, 21.6469f, + 15.9534f, 30.0623f, + 17.8474f, 20.3281f, + -3.1654f, -6.0729f, + 39.5602f, 40.5625f, + 44.3017f, 45.7556f, + 24.8628f, 19.5166f, + 33.7547f, 41.1213f, + 23.1020f, 13.1469f, + 17.6623f, 12.7562f, + 20.3773f, 11.0551f, + 31.6668f, 35.0770f, + 15.4383f, 22.8811f, + 22.8419f, 35.1167f, + 25.0950f, 23.1698f, + 20.2523f, 14.9332f, + 24.8694f, 27.0211f, + 13.8576f, 10.4789f, + 6.3835f, 8.1955f, + 10.6597f, -0.3484f, + 27.2026f, 29.9373f, + 12.4182f, 13.9096f, + 24.9543f, 16.3771f, + 15.7197f, 18.8608f, + -1.4782f, 1.6952f, + 36.4783f, 37.1348f, + 29.6594f, 13.6072f, + -26.6995f, -24.6742f, + 20.3405f, 19.6463f, + 44.2412f, 40.9698f, + 28.9498f, 23.7751f, + 39.3428f, 32.2458f, + -23.8252f, -22.0790f, + 27.6318f, 33.9910f, + -47.7664f, -44.4696f, + -44.8104f, -41.2774f, + -50.8776f, -47.8616f, + -50.3099f, -44.0979f, + -54.5008f, -51.0234f, + -63.3373f, -60.1146f, + -45.5444f, -42.1435f, + -48.2447f, -44.8312f, + -49.9558f, -46.6690f, + -59.1385f, -55.6583f, + -44.2409f, -43.8251f, + -46.6791f, -43.3332f, + -46.0956f, -42.6861f, + -92.7279f, -89.3799f, + 49.9817f, 46.4450f, + -14.8152f, -11.2475f, + -106.9255f, -103.4843f, + -46.5934f, -45.0424f, + -47.3033f, -43.9775f, + -80.0456f, -76.6952f, + -56.1359f, -53.1578f, + -49.1835f, -45.8131f, + -54.9042f, -45.8573f, + 36.9949f, 28.4050f, + -43.6866f, -40.3702f, + -52.0047f, -45.5982f, + -47.6930f, -41.4457f, + -52.5989f, -49.8475f, + 30.0399f, 27.7911f, + 10.0141f, 17.5614f, + 21.8223f, 17.7785f, + -3.1767f, -2.1954f, + -17.5132f, -21.5664f, + 6.0779f, 0.3815f, + 0.0063f, 13.5452f, + 5.5074f, 5.2318f, + 15.8166f, 0.6300f, + -17.7247f, -15.7262f, + -38.5381f, -35.6042f, + -6.3132f, -18.4667f, + 9.5978f, 6.4559f, + 2.4632f, 8.4172f, + -70.2432f, -66.7283f, + 10.2658f, 23.7825f, + -42.1539f, -38.8022f, + -48.5397f, -45.1815f, + 16.8840f, 15.6262f, + -6.1500f, 8.4442f, + -31.1246f, -29.6824f, + 5.9496f, 16.3765f, + 21.9557f, 25.5364f, + -9.8102f, -7.7609f, + 48.7145f, 36.0093f, + 34.1627f, 19.4172f, + 14.2249f, 16.2026f, + 19.8782f, 23.2358f, + 1.3653f, -0.3587f, + 27.4538f, 26.1047f, + -9.4912f, -12.5633f, + -15.5232f, -3.4597f +}; + +const float Env_TR_Cdbk2 [N_CB_TR2 * DIM_TR2] = +{ + 10.3071f, 1.4647f, + -1.8782f, 6.6168f, + -9.3764f, -12.9146f, + 0.3372f, -15.6956f, + -5.0830f, 0.1825f, + 2.8660f, 1.1668f, + 3.7385f, -4.0567f, + 8.6094f, 5.8040f, + 1.4099f, -4.4378f, + 10.2655f, -3.2743f, + -7.8499f, 5.0612f, + 1.4560f, 0.4976f, + -2.2400f, 10.1737f, + 2.6910f, -6.0696f, + 6.5484f, -1.4502f, + 5.0708f, 1.0902f, + -3.5214f, 4.2403f, + 6.8248f, -10.6363f, + 0.8362f, -2.5676f, + -2.8563f, -3.5507f, + 6.0370f, -6.4758f, + -1.4405f, -8.6255f, + -4.9844f, 6.8277f, + 4.4568f, -2.0374f, + 0.7265f, -7.3953f, + -4.9226f, -7.8758f, + -1.8669f, -1.9698f, + 5.0262f, 7.3509f, + -0.3770f, -5.4681f, + -5.3582f, -4.5491f, + 3.1235f, -0.5936f, + 1.6121f, -0.9381f, + -0.8137f, -3.3498f, + -0.3523f, -1.5590f, + 1.9211f, 9.8411f, + 3.5654f, 5.3423f, + -1.3437f, 1.1031f, + 1.1914f, 2.0560f, + -0.9800f, 3.3605f, + -4.1634f, 2.2153f, + -10.9385f, -2.6849f, + 0.0040f, 2.6311f, + 0.6873f, 3.4294f, + -2.7967f, -0.5984f, + 2.7559f, 3.2450f, + -4.2294f, -1.6565f, + 1.6359f, 4.6566f, + -0.5137f, 2.2080f, + 2.7641f, -9.3968f, + 2.3449f, -2.5829f, + 6.6876f, 11.5962f, + -7.7096f, 1.4816f, + -2.6264f, 0.8111f, + 0.1002f, 1.1574f, + -7.1116f, -1.9581f, + -2.0027f, 2.4814f, + 1.0402f, 6.7866f, + -0.8642f, 4.8143f, + -13.6639f, 6.3768f, + -1.3155f, -0.2595f, + -2.1558f, -5.5755f, + 5.1910f, 3.3215f, + -2.8061f, -11.5155f, + -0.0134f, 0.0015f +}; + +const float Mean_env_tr[5] = { 27.23f, 23.81f, 23.87f, 19.51f }; + +/*------------------------------------------------------------------------------* + * LR MDCT SWB BWE coding tables + *------------------------------------------------------------------------------*/ + +const float gain_table_SWB_BWE[NB_SWB_SUBBANDS] = {-0.4f, 0.1f, 0.6f, 1.1f}; + +const int16_t bits_lagIndices_modeNormal[NB_SWB_SUBBANDS] = {2, 2, 1, 1}; +const int16_t subband_offsets_12KBPS[NB_SWB_SUBBANDS] = {SWB_SB_OFF0_12KBPS, SWB_SB_OFF1_12KBPS, SWB_SB_OFF2_12KBPS, SWB_SB_OFF3_12KBPS}; +const int16_t subband_offsets_16KBPS[NB_SWB_SUBBANDS] = {SWB_SB_OFF0_16KBPS, SWB_SB_OFF1_16KBPS, SWB_SB_OFF2_16KBPS, SWB_SB_OFF3_16KBPS}; + +/* Search offset for the subbands that use a partial search */ +const int16_t subband_search_offsets[NB_SWB_SUBBANDS] = +{ + 0, 0, 64, 64 +}; +/* SPT : shorten subband length table */ +const Word16 bw_SPT_tbl[2][SPT_SHORTEN_SBNUM]= +{ + {15, 31, 31, 31}, /* 13.2kbps: original band_width 53, 66, 82, 102 */ + {15, 15, 31, 31} /* 16.4kbps: original band_width 51 64, 80, 90 */ +}; + + +/* Harmonic Mode */ +const int16_t bits_lagIndices_mode0_Har[NB_SWB_SUBBANDS_HAR_SEARCH_SB] = {1,1}; + +/* 13.2 kbps */ +const int16_t subband_offsets_sub5_13p2kbps_Har[NB_SWB_SUBBANDS_HAR] = +{ + SWB_SB_OFF0_SUB5_12KBPS_HAR, SWB_SB_OFF1_SUB5_12KBPS_HAR, SWB_SB_OFF2_SUB5_12KBPS_HAR, SWB_SB_OFF3_SUB5_12KBPS_HAR +}; + +/* Search offset for the subbands that use a partial search */ +const int16_t subband_search_offsets_13p2kbps_Har[NB_SWB_SUBBANDS_HAR_SEARCH_SB] = +{ + 120, 210 +}; + +/* 16.4 kbps */ +const int16_t subband_offsets_sub5_16p4kbps_Har[NB_SWB_SUBBANDS_HAR] = +{ + SWB_SB_OFF0_SUB5_16KBPS_HAR, SWB_SB_OFF1_SUB5_16KBPS_HAR, SWB_SB_OFF2_SUB5_16KBPS_HAR, SWB_SB_OFF3_SUB5_16KBPS_HAR +}; + +/* Search offset for the subbands that use a partial search */ +const int16_t subband_search_offsets_16p4kbps_Har[NB_SWB_SUBBANDS_HAR_SEARCH_SB] = +{ + 120, 210 +}; + + +/*------------------------------------------------------------------------------* + * HQ core tables + *------------------------------------------------------------------------------*/ + +const float wscw16q15[] = +{ + -1.0f, -0.999939f, -0.999878f, -0.999725f, -0.999573f, -0.999359f, -0.999084f, -0.99881f, + -0.998444f, -0.998077f, -0.99765f, -0.997162f, -0.996643f, -0.996094f, -0.995514f, -0.994873f, + -0.994171f, -0.993439f, -0.992676f, -0.991852f, -0.990997f, -0.990112f, -0.989166f, -0.98819f, + -0.987183f, -0.986115f, -0.984985f, -0.983856f, -0.982666f, -0.981415f, -0.980133f, -0.978821f, + -0.977448f, -0.976074f, -0.974609f, -0.973114f, -0.971588f, -0.970032f, -0.968414f, -0.966766f, + -0.965088f, -0.963348f, -0.961548f, -0.959747f, -0.957886f, -0.955994f, -0.954041f, -0.952057f, + -0.950043f, -0.947968f, -0.945862f, -0.943726f, -0.941559f, -0.939331f, -0.937042f, -0.934753f, + -0.932404f, -0.930023f, -0.927582f, -0.92514f, -0.922607f, -0.920074f, -0.91748f, -0.914886f, + -0.912201f, -0.909515f, -0.906769f, -0.903992f, -0.901184f, -0.898315f, -0.895416f, -0.892487f, + -0.889526f, -0.886505f, -0.883453f, -0.880371f, -0.877258f, -0.874084f, -0.87088f, -0.867645f, + -0.86438f, -0.861084f, -0.857727f, -0.85434f, -0.850922f, -0.847473f, -0.843964f, -0.840454f, + -0.836884f, -0.833282f, -0.829651f, -0.825989f, -0.822266f, -0.818512f, -0.814758f, -0.810944f, + -0.807098f, -0.803223f, -0.799286f, -0.795349f, -0.791351f, -0.787354f, -0.783295f, -0.779205f, + -0.775085f, -0.770935f, -0.766754f, -0.762512f, -0.75827f, -0.753998f, -0.749664f, -0.745331f, + -0.740936f, -0.736542f, -0.732086f, -0.727631f, -0.723114f, -0.718567f, -0.71402f, -0.709412f, + 0.704803f, 0.700134f, 0.695435f, 0.690735f, 0.685974f, 0.681213f, 0.676392f, 0.67157f, + 0.666687f, 0.661804f, 0.656891f, 0.651947f, 0.646942f, 0.641937f, 0.636932f, 0.631866f, + 0.62677f, 0.621674f, 0.616516f, 0.611359f, 0.606171f, 0.600952f, 0.595703f, 0.590424f, + 0.585144f, 0.579803f, 0.574463f, 0.569092f, 0.563721f, 0.558289f, 0.552856f, 0.547394f, + 0.541901f, 0.536377f, 0.530853f, 0.525299f, 0.519714f, 0.514099f, 0.508484f, 0.502838f, + 0.497162f, 0.491486f, 0.485748f, 0.480042f, 0.474274f, 0.468506f, 0.462708f, 0.456909f, + 0.45108f, 0.445221f, 0.439362f, 0.433472f, 0.427551f, 0.421631f, 0.41568f, 0.409729f, + 0.403748f, 0.397736f, 0.391724f, 0.385712f, 0.379669f, 0.373596f, 0.367523f, 0.36142f, + 0.355316f, 0.349182f, 0.343048f, 0.336884f, 0.330719f, 0.324524f, 0.318329f, 0.312134f, + 0.305908f, 0.299652f, 0.293427f, 0.28714f, 0.280884f, 0.274597f, 0.26828f, 0.261993f, + 0.255646f, 0.249329f, 0.242981f, 0.236633f, 0.230255f, 0.223877f, 0.217499f, 0.211121f, + 0.204712f, 0.198303f, 0.191895f, 0.185455f, 0.179016f, 0.172577f, 0.166138f, 0.159668f, + 0.153198f, 0.146729f, 0.140259f, 0.133759f, 0.127289f, 0.120789f, 0.114288f, 0.107788f, + 0.101288f, 0.0947571f, 0.0882568f, 0.0817261f, 0.0751953f, 0.0686646f, 0.0621338f, 0.055603f, + 0.0490723f, 0.0425415f, 0.0359802f, 0.0294495f, 0.0229187f, 0.0163574f, 0.00982666f,0.00326538f +}; + +const float wscw16q15_32[160] = +{ + -0.99998795f, -0.99989157f, -0.99969882f, -0.99940971f, -0.99902428f, -0.99854256f, + -0.99796460f, -0.99729046f, -0.99652019f,-0.99565388f, -0.99469160f, -0.99363345f, + -0.99247953f, -0.99122996f, -0.98988485f, -0.98844433f, -0.98690855f, -0.98527764f, + -0.98355177f, -0.98173111f, -0.97981582f, -0.97780610f, -0.97570213f, -0.97350412f, + -0.97121229f, -0.96882685f, -0.96634802f, -0.96377607f, -0.96111122f, -0.95835373f, + -0.95550388f, -0.95256194f, -0.94952818f, -0.94640291f, -0.94318642f, -0.93987902f, + -0.93648104f, -0.93299280f, -0.92941463f, -0.92574689f, -0.92198992f, -0.91814408f, + -0.91420976f, -0.91018732f, -0.90607715f, -0.90187965f, -0.89759523f, -0.89322430f, + -0.88876728f, -0.88422459f, -0.87959669f, -0.87488400f, -0.87008699f, -0.86520612f, + -0.86024186f, -0.85519469f, -0.85006509f, -0.84485357f, -0.83956061f, -0.83418673f, + -0.82873246f, -0.82319831f, -0.81758481f, -0.81189252f, -0.80612197f, -0.80027373f, + -0.79434836f, -0.78834643f, -0.78226851f, -0.77611520f, -0.76988708f, -0.76358476f, + -0.75720885f, -0.75075995f, -0.74423869f, -0.73764570f, -0.73098162f, -0.72424708f, + -0.71744274f, -0.71056925f, 0.70362727f, 0.69661748f, 0.68954054f, 0.68239715f, + 0.67518798f, 0.66791374f, 0.66057513f, 0.65317284f, 0.64570760f, 0.63818013f, + 0.63059115f, 0.62294139f, 0.61523159f, 0.60746249f, 0.59963485f, 0.59174941f, + 0.58380693f, 0.57580819f, 0.56775395f, 0.55964499f, 0.55148209f, 0.54326604f, + 0.53499762f, 0.52667764f, 0.51830690f, 0.50988620f, 0.50141636f, 0.49289819f, + 0.48433252f, 0.47572016f, 0.46706195f, 0.45835873f, 0.44961133f, 0.44082059f, + 0.43198737f, 0.42311251f, 0.41419687f, 0.40524131f, 0.39624670f, 0.38721389f, + 0.37814376f, 0.36903718f, 0.35989504f, 0.35071820f, 0.34150757f, 0.33226402f, + 0.32298845f, 0.31368174f, 0.30434480f, 0.29497853f, 0.28558383f, 0.27616160f, + 0.26671276f, 0.25723821f, 0.24773886f, 0.23821564f, 0.22866946f, 0.21910124f, + 0.20951190f, 0.19990237f, 0.19027357f, 0.18062644f, 0.17096189f, 0.16128086f, + 0.15158430f, 0.14187312f, 0.13214826f, 0.12241068f, 0.11266129f, 0.10290104f, + 0.09313088f, 0.08335174f, 0.07356456f, 0.06377030f, 0.05396989f, 0.04416428f, + 0.03435441f, 0.02454123f, 0.01472568f, 0.00490872f +}; + +const float wscw16q15_16[80] = +{ + -0.99995181f, -0.99956631f, -0.99879546f, -0.99763955f, + -0.99609903f, -0.99417450f, -0.99186670f, -0.98917651f, + -0.98610498f, -0.98265328f, -0.97882275f, -0.97461487f, + -0.97003125f, -0.96507367f, -0.95974404f, -0.95404440f, + -0.94797697f, -0.94154407f, -0.93474818f, -0.92759194f, + -0.92007808f, -0.91220953f, -0.90398929f, -0.89542056f, + -0.88650662f, -0.87725091f, -0.86765701f, -0.85772861f, + -0.84746954f, -0.83688375f, -0.82597533f, -0.81474848f, + -0.80320753f, -0.79135693f, -0.77920124f, -0.76674516f, + -0.75399348f, -0.74095113f, -0.72762312f, -0.71401460f, + 0.70013081f, 0.68597711f, 0.67155895f, 0.65688190f, + 0.64195160f, 0.62677382f, 0.61135441f, 0.59569930f, + 0.57981455f, 0.56370626f, 0.54738066f, 0.53084403f, + 0.51410274f, 0.49716327f, 0.48003212f, 0.46271592f, + 0.44522133f, 0.42755509f, 0.40972403f, 0.39173501f, + 0.37359497f, 0.35531090f, 0.33688985f, 0.31833893f, + 0.29966528f, 0.28087610f, 0.26197864f, 0.24298018f, + 0.22388805f, 0.20470960f, 0.18545224f, 0.16612338f, + 0.14673047f, 0.12728100f, 0.10778246f, 0.08824237f, + 0.06866826f, 0.04906767f, 0.02944817f, 0.00981732f +}; + +const float wscw16q15_8[40] = +{ + -0.999816894531250f, -0.998260498046875f, -0.995178222656250f, -0.990570068359375f, + -0.984436035156250f, -0.976776123046875f, -0.967590332031250f, -0.956939697265625f, + -0.944793701171875f, -0.931213378906250f, -0.916198730468750f, -0.899749755859375f, + -0.881927490234375f, -0.862731933593750f, -0.842224121093750f, -0.820404052734375f, + -0.797332763671875f, -0.773010253906250f, -0.747497558593750f, -0.720855712890625f, + 0.693084716796875f, 0.664245605468750f, 0.634399414062500f, 0.603546142578125f, + 0.571777343750000f, 0.539123535156250f, 0.505645751953125f, 0.471405029296875f, + 0.436401367187500f, 0.400756835937500f, 0.364471435546875f, 0.327636718750000f, + 0.290283203125000f, 0.252502441406250f, 0.214294433593750f, 0.175781250000000f, + 0.137023925781250f, 0.098022460937500f, 0.058868408203125f, 0.019622802734375f, +}; + +/* Codebook for quantization of norms */ +const float dicn[40] = +{ + 131072.0f, 92681.900024f, + 65536.0f, 46340.950012f, + 32768.0f, 23170.475006f, + 16384.0f, 11585.237503f, + 8192.0f, 5792.618751f, + 4096.0f, 2896.309376f, + 2048.0f, 1448.154688f, + 1024.0f, 724.077344f, + 512.0f, 362.038672f, + 256.0f, 181.019336f, + 128.0f, 90.509668f, + 64.0f, 45.254834f, + 32.0f, 22.627417f, + 16.0f, 11.313708f, + 8.0f, 5.656854f, + 4.0f, 2.828427f, + 2.0f, 1.414214f, + 1.0f, 0.707107f, + 0.5f, 0.353553f, + 0.25f, 0.176777f +}; + +const float dicn_inv[40]= /* Inversion of the codebook for quantization of norms */ +{ + 0.00000762939453f, 0.00001078959322f, + 0.00001525878906f, 0.00002157918644f, + 0.00003051757813f, 0.00004315837288f, + 0.00006103515625f, 0.00008631674575f, + 0.0001220703125f, 0.00017263349151f, + 0.000244140625f, 0.00034526698297f, + 0.00048828125f, 0.00069053396594f, + 0.0009765625f, 0.00138106793188f, + 0.001953125f, 0.00276213586376f, + 0.00390625f, 0.00552427172752f, + 0.0078125f, 0.01104854345505f, + 0.015625f, 0.02209708691010f, + 0.03125f, 0.04419417382019f, + 0.0625f, 0.08838835154664f, + 0.125f, 0.17677670309327f, + 0.25f, 0.35355340618655f, + 0.5f, 0.70710656237316f, + 1.0f, 1.41421312474633f, + 2.0f, 2.82843024949583f, + 4.0f, 5.65684449900157f +}; + +/* Codebook for quantization of peak gain */ +const float dicn_pg[45] = +{ + 131072.0000000f, 110217.9749401f, + 92681.9000237f, 77935.8774888f, + 65536.0000000f, 55108.9874701f, + 46340.9500118f, 38967.9387444f, + 32768.0000000f, 27554.4937350f, + 23170.4750059f, 16384.0000000f, + 11585.2375030f, 8192.0000000f, + 5792.6187515f, 4096.0000000f, + 2896.3093757f, 2048.0000000f, + 1448.1546879f, 1024.0000000f, + 724.0773439f, 512.0000000f, + 362.0386720f, 256.0000000f, + 181.0193360f, 128.0000000f, + 90.5096680f, 64.0000000f, + 45.2548340f, 32.0000000f, + 22.6274170f, 16.0000000f, + 11.3137085f, 8.0000000f, + 5.6568542f, 4.0000000f, + 2.8284271f, 2.0000000f, + 1.4142136f, 1.0000000f, + 0.7071070f, 0.5000000f, + 0.3535530f, 0.2500000f, + 0.176777f +}; + +const int16_t expPkEnrg_tbl[45] = +{ + 0, 0, 0, 0, 0, 2, 2, 2, 2, + 4, 4, 4, 6, 6, 8, 8, 10, 10, + 12, 12, 14, 14, 16, 16, 18, 18, 20, + 20, 22, 22, 24, 24, 26, 26, 28, 28, + 30, 30, 32, 32, 34, 34, 36, 36, 38 +}; + +const int32_t manPkEnrg_tbl[45] = +{ + 2147483646, 1518500308, 1073741787, 759250076, 536870912, + 1518500294, 1073741787, 759250076, 536870912, 1518500294, + 1073741787, 536870912, 1073741787, 536870912, 1073741787, + 536870912, 1073741787, 536870912, 1073741606, 536870912, + 1073741968, 536870912, 1073741244, 536870912, 1073741244, + 536870912, 1073744140, 536870912, 1073744140, 536870912, + 1073744140, 536870912, 1073744140, 536870912, 1073697800, + 536870912, 1073697800, 536870912, 1073883168, 536870912, + 1073512448, 536870912, 1073512448, 536870912, 1073512448 +}; +const int32_t E_max5_tbl[40] = +{ + 2047999999, 1448154663, 1024000000, 1448154663, 1024000000, + 1448154663, 1024000000, 1448154663, 1024000000, 1448154663, + 1024000000, 1448154663, 1024000000, 1448154663, 1024000000, + 1448154663, 1024000000, 1448154785, 1024000000, 1448154785, + 1024000000, 1448154296, 1024000000, 1448154296, 1024000000, + 1448156250, 1024000000, 1448156250, 1024000000, 1448156250, + 1024000000, 1448156250, 1024000000, 1448125000, 1024000000, + 1448125000, 1024000000, 1448250000, 1024000000, 1448000000 +}; + + +const int16_t resize_huffsizn[32] = +{ + 0, 0, 0, 0, 0, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0 +}; + +const int16_t huffsizn[32] = +{ + 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 4, 4, 3, 3, + 3, 3, 4, 4, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7 +}; + +const int16_t huffnorm_tran[32] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 10, 6, 1, + 0, 3, 2, 26, 58, 186, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +const int16_t huffsizn_tran[32] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 3, 2, 2, + 2, 4, 6, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +const int16_t pgain_huffsizn[32] = +{ + 10, 11, 10, 10, 9, 8, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 5, 5, 6, 7, 7, 8, 10, 10, 12, 12 +}; + +const int16_t dicnlg2[40] = +{ + 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, + 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, + 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, + 4, 3, 2, 1, 0, -1, -2, -3, -4, -5 +}; + +/*** Table for quantization of MLT coefficients ***/ +const int16_t norm_order_48[NB_SFM] = +{ + 0, 1, 8, 9, 16, 20, 24, 28, 32, 36, 40, 41, 37, 33, 29, 25, 21, 17, 11, 10, 3, 2, + 4, 5, 12, 13, 18, 22, 26, 30, 34, 38, 42, 43, 39, 35, 31, 27, 23, 19, 15, 14, 7, 6 +}; + +const int16_t norm_order_32[SFM_N_SWB] = +{ + 0, 1, 8, 9, 16, 20, 24, 28, 32, 36, 37, 33, 29, 25, 21, 17, 11, 10, 3, 2, + 4, 5, 12, 13, 18, 22, 26, 30, 34, 38, 35, 31, 27, 23, 19, 15, 14, 7, 6 +}; + +const int16_t norm_order_16[SFM_N_WB] = +{ + 0, 1, 8, 9, 16, 20, 24, 21, 17, 11, 10, 3, 2, + 4, 5, 12, 13, 18, 22, 25, 23, 19, 15, 14, 7, 6 +}; + +const int16_t intl_bw_16[N_INTL_GRP_16] = {16, 16}; +const int16_t intl_bw_32[N_INTL_GRP_32] = {16, 24}; +const int16_t intl_bw_48[N_INTL_GRP_48] = {16, 24, 32}; + +const int16_t intl_cnt_16[N_INTL_GRP_16] = {4, 1}; +const int16_t intl_cnt_32[N_INTL_GRP_32] = {4, 4}; +const int16_t intl_cnt_48[N_INTL_GRP_48] = {4, 3, 2}; + +const int16_t band_start_HQ[44] = +{ + 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, + 96, 104, 112, 120, 128, 144, 160, 176, 192, 208, 224, 240, + 256, 280, 304, 328, 352, 376, 400, 424, 448, 472, 496, 520, + 544, 576, 608, 640, 672, 704, 736, 768 +}; + +const int16_t band_end_HQ[44] = +{ + 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, + 104, 112, 120, 128, 144, 160, 176, 192, 208, 224, 240, 256, + 280, 304, 328, 352, 376, 400, 424, 448, 472, 496, 520, 544, + 576, 608, 640, 672, 704, 736, 768, 800 +}; + +const int16_t band_len_HQ[44] = +{ + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 32, 32, 32, 32, 32, 32, 32, 32 +}; + +const int16_t band_start_wb[26] = +{ + 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, + 96, 104, 112, 120, 128, 144, 160, 176, 192, 208, 224, 240, + 256, 288 +}; + +const int16_t band_end_wb[26] = +{ + 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, + 104, 112, 120, 128, 144, 160, 176, 192, 208, 224, 240, 256, + 288, 320 +}; + +const int16_t band_len_wb[26] = +{ + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, + 32, 32 +}; +const Word16 band_len_harm[SFM_N_HARM_FB] = +{ + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 16, 16, 16, 16, 16, 16, 32, 32, 32, 48, 48, 48, 48, 64, 64, 64, 96 +}; + +const Word16 band_start_harm[SFM_N_HARM_FB] = +{ + 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, + 128, 144, 160, 176, 192, 208, 224, 256, 288, 320, 368, 416, 464, 512, 576, 640, 704 +}; + +const Word16 band_end_harm[SFM_N_HARM_FB] = +{ + 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, + 144, 160, 176, 192, 208, 224, 256, 288, 320, 368, 416, 464, 512, 576, 640, 704, 800 +}; + + +const float rat[SFM_N_WB] = {1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, + 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.8f, 0.8f + }; + +const int16_t sfm_width[20] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7, 8}; +const int16_t a_map[20] = {8, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 7, 11}; + + +const Word32 SQRT_DIM_fx[65] = /* sqrt(x) for x = 0, 1, ..., 64. in Q15 */ +{ + 0, 32768, 46341, 56756, 65536, 73271, 80265, 86696, + 92682, 98304, 103622, 108679, 113512, 118147, 122607, 126910, + 131072, 135106, 139023, 142832, 146543, 150162, 153696, 157150, + 160530, 163840, 167085, 170268, 173392, 176461, 179478, 182445, + 185364, 188238, 191069, 193858, 196608, 199320, 201996, 204636, + 207243, 209818, 212361, 214874, 217358, 219814, 222243, 224646, + 227023, 229376, 231705, 234010, 236293, 238555, 240795, 243014, + 245213, 247393, 249554, 251696, 253820, 255926, 258015, 260088, + 262144 +}; + + + +/*------------------------------------------------------------------------------* + * HQ core tables for SWB signals + *------------------------------------------------------------------------------*/ + + +const float window_8_16_32kHz[370] = +{ + 0.00009609f, 0.00028765f, 0.00058708f, 0.00099202f, 0.00150079f, 0.00211209f, 0.00282484f, 0.00363808f, + 0.00455097f, 0.00556272f, 0.00667261f, 0.00787994f, 0.00918405f, 0.01058429f, 0.01208004f, 0.01367067f, + 0.01535558f, 0.01713416f, 0.01900581f, 0.02096992f, 0.02302588f, 0.02517309f, 0.02741093f, 0.02973879f, + 0.03215604f, 0.03466206f, 0.03725620f, 0.03993782f, 0.04270627f, 0.04556089f, 0.04850099f, 0.05152591f, + 0.05463496f, 0.05782743f, 0.06110262f, 0.06445980f, 0.06789825f, 0.07141723f, 0.07501599f, 0.07869376f, + 0.08244978f, 0.08628326f, 0.09019341f, 0.09417944f, 0.09824051f, 0.10237582f, 0.10658453f, 0.11086578f, + 0.11521874f, 0.11964252f, 0.12413626f, 0.12869907f, 0.13333005f, 0.13802829f, 0.14279289f, 0.14762290f, + 0.15251740f, 0.15747544f, 0.16249607f, 0.16757831f, 0.17272120f, 0.17792375f, 0.18318496f, 0.18850384f, + 0.19387938f, 0.19931055f, 0.20479633f, 0.21033568f, 0.21592756f, 0.22157091f, 0.22726467f, 0.23300778f, + 0.23879915f, 0.24463771f, 0.25052236f, 0.25645201f, 0.26242554f, 0.26844185f, 0.27449982f, 0.28059832f, + 0.28673623f, 0.29291240f, 0.29912569f, 0.30537495f, 0.31165902f, 0.31797676f, 0.32432698f, 0.33070852f, + 0.33712021f, 0.34326770f, 0.34902538f, 0.35469475f, 0.36039689f, 0.36612343f, 0.37187036f, 0.37763517f, + 0.38341599f, 0.38921132f, 0.39501987f, 0.40084050f, 0.40667214f, 0.41251382f, 0.41836457f, 0.42422351f, + 0.43008975f, 0.43596242f, 0.44184069f, 0.44772373f, 0.45361072f, 0.45950085f, 0.46539332f, 0.47128734f, + 0.47718210f, 0.48307684f, 0.48897077f, 0.49486311f, 0.50075309f, 0.50663994f, 0.51252290f, 0.51840120f, + 0.52427408f, 0.53014079f, 0.53600058f, 0.54185268f, 0.54769636f, 0.55353086f, 0.55935545f, 0.56516939f, + 0.57097193f, 0.57676236f, 0.58253993f, 0.58830393f, 0.59405363f, 0.59978832f, 0.60550728f, 0.61120980f, + 0.61689518f, 0.62256271f, 0.62821170f, 0.63384146f, 0.63945131f, 0.64504055f, 0.65060852f, 0.65615454f, + 0.66167795f, 0.66717809f, 0.67265431f, 0.67810596f, 0.68353240f, 0.68893300f, 0.69430713f, 0.69965417f, + 0.70497350f, 0.71026452f, 0.71552664f, 0.72075927f, 0.72596181f, 0.73113370f, 0.73627436f, 0.74053370f, + 0.74223132f, 0.74645982f, 0.75150351f, 0.75651380f, 0.76149018f, 0.76643212f, 0.77133911f, 0.77621068f, + 0.78104633f, 0.78584558f, 0.79060798f, 0.79533307f, 0.80002041f, 0.80466956f, 0.80928010f, 0.81385162f, + 0.81838372f, 0.82287601f, 0.82732812f, 0.83173967f, 0.83611032f, 0.84043971f, 0.84472753f, 0.84897345f, + 0.85317717f, 0.85733839f, 0.86145684f, 0.86553224f, 0.86956435f, 0.87355292f, 0.87749772f, 0.88139855f, + 0.88525520f, 0.88906748f, 0.89283524f, 0.89655830f, 0.90023654f, 0.90386982f, 0.90745805f, 0.91100112f, + 0.91449896f, 0.91795152f, 0.92135875f, 0.92472064f, 0.92803719f, 0.93130842f, 0.93453436f, 0.93771509f, + 0.94085071f, 0.94394132f, 0.94698708f, 0.94998816f, 0.95294479f, 0.95585723f, 0.95872577f, 0.96155077f, + 0.96433265f, 0.96707190f, 0.96976909f, 0.97242491f, 0.97504018f, 0.97761590f, 0.98015330f, 0.98265393f, + 0.98511982f, 0.98755371f, 0.98995949f, 0.99234319f, 0.99471536f, 0.99709994f, 0.99708681f, 0.99466528f, + 0.99222861f, 0.98975303f, 0.98722813f, 0.98464802f, 0.98200891f, 0.97930819f, 0.97654393f, 0.97371465f, + 0.97081921f, 0.96785667f, 0.96482628f, 0.96172739f, 0.95855948f, 0.95532207f, 0.95201479f, 0.94863729f, + 0.94518926f, 0.94167046f, 0.93808064f, 0.93441963f, 0.93068723f, 0.92688329f, 0.92300768f, 0.91906029f, + 0.91504101f, 0.91094975f, 0.90678646f, 0.90255106f, 0.89824351f, 0.89386377f, 0.88941182f, 0.88488765f, + 0.88029124f, 0.87562260f, 0.87088175f, 0.86606871f, 0.86118350f, 0.85622616f, 0.85119674f, 0.84609529f, + 0.84092187f, 0.83567654f, 0.83035938f, 0.82497048f, 0.81950991f, 0.81397777f, 0.80837415f, 0.80269917f, + 0.79695293f, 0.79113554f, 0.78524714f, 0.77928784f, 0.77325776f, 0.76715706f, 0.76098587f, 0.75474432f, + 0.74843257f, 0.74205077f, 0.73559908f, 0.72907763f, 0.72248661f, 0.71582617f, 0.70909647f, 0.70229768f, + 0.69542998f, 0.68849352f, 0.68148847f, 0.67559894f, 0.67322974f, 0.66727332f, 0.66006356f, 0.65278589f, + 0.64544049f, 0.63802752f, 0.63054716f, 0.62299955f, 0.61538487f, 0.60770327f, 0.59995491f, 0.59213992f, + 0.58425845f, 0.57631064f, 0.56829662f, 0.56021651f, 0.55207043f, 0.54385849f, 0.53558078f, 0.52723738f, + 0.51882839f, 0.51035385f, 0.50181382f, 0.49320834f, 0.48453743f, 0.47580109f, 0.46699931f, 0.45813206f, + 0.44919928f, 0.44020091f, 0.43113683f, 0.42200694f, 0.41281107f, 0.40354904f, 0.39422063f, 0.38482561f, + 0.37536367f, 0.36583448f, 0.35623768f, 0.34657285f, 0.33683949f, 0.32703708f, 0.31716502f, 0.30722265f, + 0.29720921f, 0.28712387f, 0.27696571f, 0.26673368f, 0.25642665f, 0.24604332f, 0.23558226f, 0.22504184f, + 0.21442026f, 0.20371546f, 0.19292514f, 0.18204665f, 0.17107697f, 0.16001264f, 0.14884960f, 0.13758311f, + 0.12620753f, 0.11471608f, 0.10310041f, 0.09135008f, 0.07945161f, 0.06738693f, 0.05513058f, 0.04264380f, + 0.02985996f, 0.01663146f +}; +const float window_256kHz[592] = /*ALDO at 25.6 maybe not needed ?*/ +{ + 0.00002505f, 0.00009623f, 0.00021144f, 0.00036963f, 0.00057004f, 0.00081212f, 0.00109541f, 0.00141951f, + 0.00178408f, 0.00218883f, 0.00263346f, 0.00311775f, 0.00364144f, 0.00420431f, 0.00480616f, 0.00544680f, + 0.00612602f, 0.00684364f, 0.00759949f, 0.00839340f, 0.00922518f, 0.01009468f, 0.01100174f, 0.01194618f, + 0.01292786f, 0.01394661f, 0.01500228f, 0.01609471f, 0.01722376f, 0.01838925f, 0.01959105f, 0.02082899f, + 0.02210292f, 0.02341269f, 0.02475814f, 0.02613912f, 0.02755547f, 0.02900704f, 0.03049367f, 0.03201520f, + 0.03357147f, 0.03516233f, 0.03678761f, 0.03844715f, 0.04014078f, 0.04186836f, 0.04362970f, 0.04542464f, + 0.04725302f, 0.04911467f, 0.05100942f, 0.05293708f, 0.05489750f, 0.05689050f, 0.05891590f, 0.06097352f, + 0.06306319f, 0.06518472f, 0.06733794f, 0.06952266f, 0.07173869f, 0.07398585f, 0.07626395f, 0.07857281f, + 0.08091223f, 0.08328201f, 0.08568197f, 0.08811192f, 0.09057164f, 0.09306095f, 0.09557964f, 0.09812751f, + 0.10070437f, 0.10330999f, 0.10594419f, 0.10860674f, 0.11129745f, 0.11401609f, 0.11676246f, 0.11953635f, + 0.12233753f, 0.12516579f, 0.12802091f, 0.13090267f, 0.13381086f, 0.13674524f, 0.13970559f, 0.14269169f, + 0.14570330f, 0.14874021f, 0.15180217f, 0.15488896f, 0.15800034f, 0.16113609f, 0.16429595f, 0.16747970f, + 0.17068710f, 0.17391790f, 0.17717186f, 0.18044875f, 0.18374831f, 0.18707031f, 0.19041448f, 0.19378059f, + 0.19716839f, 0.20057763f, 0.20400804f, 0.20745938f, 0.21093140f, 0.21442384f, 0.21793644f, 0.22146894f, + 0.22502109f, 0.22859261f, 0.23218326f, 0.23579277f, 0.23942087f, 0.24306730f, 0.24673180f, 0.25041408f, + 0.25411390f, 0.25783097f, 0.26156503f, 0.26531581f, 0.26908303f, 0.27286642f, 0.27666570f, 0.28048060f, + 0.28431085f, 0.28815616f, 0.29201627f, 0.29589088f, 0.29977972f, 0.30368251f, 0.30759896f, 0.31152881f, + 0.31547175f, 0.31942751f, 0.32339581f, 0.32737635f, 0.33136886f, 0.33537304f, 0.33938861f, 0.34341527f, + 0.34689352f, 0.35040979f, 0.35394433f, 0.35749191f, 0.36105010f, 0.36461744f, 0.36819295f, 0.37177588f, + 0.37536568f, 0.37896184f, 0.38256397f, 0.38617170f, 0.38978470f, 0.39340267f, 0.39702533f, 0.40065241f, + 0.40428366f, 0.40791884f, 0.41155771f, 0.41520004f, 0.41884562f, 0.42249422f, 0.42614564f, 0.42979966f, + 0.43345608f, 0.43711469f, 0.44077529f, 0.44443769f, 0.44810168f, 0.45176708f, 0.45543368f, 0.45910129f, + 0.46276972f, 0.46643878f, 0.47010827f, 0.47377802f, 0.47744783f, 0.48111751f, 0.48478688f, 0.48845574f, + 0.49212392f, 0.49579124f, 0.49945749f, 0.50312250f, 0.50678610f, 0.51044808f, 0.51410828f, 0.51776651f, + 0.52142258f, 0.52507633f, 0.52872755f, 0.53237609f, 0.53602175f, 0.53966436f, 0.54330374f, 0.54693971f, + 0.55057209f, 0.55420071f, 0.55782539f, 0.56144595f, 0.56506222f, 0.56867402f, 0.57228118f, 0.57588352f, + 0.57948087f, 0.58307305f, 0.58665990f, 0.59024124f, 0.59381690f, 0.59738672f, 0.60095051f, 0.60450811f, + 0.60805935f, 0.61160407f, 0.61514209f, 0.61867325f, 0.62219738f, 0.62571432f, 0.62922390f, 0.63272595f, + 0.63622033f, 0.63970685f, 0.64318537f, 0.64665571f, 0.65011773f, 0.65357125f, 0.65701613f, 0.66045220f, + 0.66387931f, 0.66729730f, 0.67070601f, 0.67410530f, 0.67749501f, 0.68087499f, 0.68424508f, 0.68760514f, + 0.69095502f, 0.69429456f, 0.69762363f, 0.70094207f, 0.70424975f, 0.70754651f, 0.71083222f, 0.71410673f, + 0.71736991f, 0.72062160f, 0.72386169f, 0.72709002f, 0.73030646f, 0.73351088f, 0.73670315f, 0.73988313f, + 0.74305069f, 0.74620570f, 0.74934804f, 0.75247757f, 0.75559418f, 0.75869773f, 0.76178811f, 0.76486519f, + 0.76792885f, 0.77097898f, 0.77401546f, 0.77703816f, 0.78004699f, 0.78304181f, 0.78602253f, 0.78898904f, + 0.79194121f, 0.79487896f, 0.79780216f, 0.80071072f, 0.80360454f, 0.80648352f, 0.80934755f, 0.81219653f, + 0.81503038f, 0.81784900f, 0.82065230f, 0.82344018f, 0.82621255f, 0.82896934f, 0.83171045f, 0.83443579f, + 0.83714529f, 0.83983887f, 0.84251645f, 0.84517794f, 0.84782328f, 0.85045240f, 0.85306521f, 0.85566165f, + 0.85824166f, 0.86080517f, 0.86335210f, 0.86588241f, 0.86839603f, 0.87089291f, 0.87337298f, 0.87583620f, + 0.87828250f, 0.88071185f, 0.88312419f, 0.88551948f, 0.88789767f, 0.89025873f, 0.89260261f, 0.89492928f, + 0.89723869f, 0.89953083f, 0.90180566f, 0.90406314f, 0.90630327f, 0.90852600f, 0.91073133f, 0.91291923f, + 0.91508969f, 0.91724270f, 0.91937824f, 0.92149632f, 0.92359691f, 0.92568004f, 0.92774569f, 0.92979387f, + 0.93182459f, 0.93383786f, 0.93583369f, 0.93781212f, 0.93977315f, 0.94171681f, 0.94364315f, 0.94555218f, + 0.94744396f, 0.94931853f, 0.95117594f, 0.95301624f, 0.95483951f, 0.95664580f, 0.95843521f, 0.96020781f, + 0.96196370f, 0.96370298f, 0.96542577f, 0.96713221f, 0.96882242f, 0.97049658f, 0.97215486f, 0.97379745f, + 0.97542459f, 0.97703653f, 0.97863356f, 0.98021601f, 0.98178428f, 0.98333882f, 0.98488019f, 0.98640904f, + 0.98792619f, 0.98943268f, 0.99092986f, 0.99241955f, 0.99390438f, 0.99538840f, 0.99687865f, 0.99839048f, + 0.99839048f, 0.99687316f, 0.99536647f, 0.99385512f, 0.99233208f, 0.99079337f, 0.98923638f, 0.98765934f, + 0.98606092f, 0.98444012f, 0.98279615f, 0.98112838f, 0.97943628f, 0.97771944f, 0.97597747f, 0.97421006f, + 0.97241695f, 0.97059790f, 0.96875269f, 0.96688116f, 0.96498313f, 0.96305846f, 0.96110701f, 0.95912868f, + 0.95712335f, 0.95509092f, 0.95303131f, 0.95094444f, 0.94883023f, 0.94668862f, 0.94451953f, 0.94232293f, + 0.94009875f, 0.93784694f, 0.93556747f, 0.93326028f, 0.93092535f, 0.92856264f, 0.92617212f, 0.92375376f, + 0.92130753f, 0.91883342f, 0.91633139f, 0.91380144f, 0.91124353f, 0.90865767f, 0.90604383f, 0.90340200f, + 0.90073218f, 0.89803436f, 0.89530852f, 0.89255467f, 0.88977280f, 0.88696291f, 0.88412500f, 0.88125907f, + 0.87836512f, 0.87544316f, 0.87249319f, 0.86951521f, 0.86650924f, 0.86347528f, 0.86041334f, 0.85732343f, + 0.85420557f, 0.85105976f, 0.84788602f, 0.84468436f, 0.84145481f, 0.83819737f, 0.83491207f, 0.83159893f, + 0.82825795f, 0.82488917f, 0.82149260f, 0.81806828f, 0.81461621f, 0.81113643f, 0.80762895f, 0.80409381f, + 0.80053104f, 0.79694065f, 0.79332267f, 0.78967714f, 0.78600409f, 0.78230354f, 0.77857552f, 0.77482007f, + 0.77103722f, 0.76722699f, 0.76338943f, 0.75952457f, 0.75563243f, 0.75171306f, 0.74776649f, 0.74379276f, + 0.73979190f, 0.73576394f, 0.73170893f, 0.72762691f, 0.72351790f, 0.71938195f, 0.71521909f, 0.71102937f, + 0.70681283f, 0.70256949f, 0.69829940f, 0.69400260f, 0.68967913f, 0.68532903f, 0.68095233f, 0.67654908f, + 0.67211932f, 0.66766308f, 0.66318040f, 0.65867133f, 0.65413589f, 0.64957414f, 0.64498610f, 0.64037182f, + 0.63573134f, 0.63106468f, 0.62637190f, 0.62165301f, 0.61690807f, 0.61213710f, 0.60734015f, 0.60251723f, + 0.59766840f, 0.59279367f, 0.58789308f, 0.58296667f, 0.57801446f, 0.57303647f, 0.56803275f, 0.56300331f, + 0.55794818f, 0.55286738f, 0.54776094f, 0.54262888f, 0.53747121f, 0.53228796f, 0.52707914f, 0.52184477f, + 0.51658486f, 0.51129942f, 0.50598845f, 0.50065198f, 0.49528999f, 0.48990250f, 0.48448950f, 0.47905099f, + 0.47358696f, 0.46809741f, 0.46258232f, 0.45704168f, 0.45147548f, 0.44588369f, 0.44026628f, 0.43462323f, + 0.42895451f, 0.42326008f, 0.41753990f, 0.41179392f, 0.40602210f, 0.40022438f, 0.39440070f, 0.38855100f, + 0.38267520f, 0.37677323f, 0.37084500f, 0.36489043f, 0.35890941f, 0.35290185f, 0.34686763f, 0.34080663f, + 0.33471872f, 0.32860376f, 0.32246161f, 0.31629211f, 0.31009508f, 0.30387035f, 0.29761773f, 0.29133699f, + 0.28502794f, 0.27869032f, 0.27232389f, 0.26592837f, 0.25950348f, 0.25304891f, 0.24656432f, 0.24004937f, + 0.23350366f, 0.22692680f, 0.22031833f, 0.21367779f, 0.20700468f, 0.20029842f, 0.19355844f, 0.18678407f, + 0.17997463f, 0.17312933f, 0.16624735f, 0.15932777f, 0.15236958f, 0.14537166f, 0.13833277f, 0.13125154f, + 0.12412643f, 0.11695568f, 0.10973731f, 0.10246907f, 0.09514831f, 0.08777196f, 0.08033640f, 0.07283723f, + 0.06526908f, 0.05762520f, 0.04989688f, 0.04207239f, 0.03413516f, 0.02605991f, 0.01780324f, 0.00927214f +}; + +const float small_overlap_48[R2_48/7]= +{ + 0.01308960f, 0.03925982f, 0.06540313f, 0.09150162f, 0.11753740f, 0.14349262f, 0.16934950f, 0.19509032f, + 0.22069744f, 0.24615329f, 0.27144045f, 0.29654157f, 0.32143947f, 0.34611706f, 0.37055744f, 0.39474386f, + 0.41865974f, 0.44228869f, 0.46561452f, 0.48862124f, 0.51129309f, 0.53361452f, 0.55557023f, 0.57714519f, + 0.59832460f, 0.61909395f, 0.63943900f, 0.65934582f, 0.67880075f, 0.69779046f, 0.71630194f, 0.73432251f, + 0.75183981f, 0.76884183f, 0.78531693f, 0.80125381f, 0.81664156f, 0.83146961f, 0.84572782f, 0.85940641f, + 0.87249601f, 0.88498764f, 0.89687274f, 0.90814317f, 0.91879121f, 0.92880955f, 0.93819134f, 0.94693013f, + 0.95501994f, 0.96245524f, 0.96923091f, 0.97534232f, 0.98078528f, 0.98555606f, 0.98965139f, 0.99306846f, + 0.99580493f, 0.99785892f, 0.99922904f, 0.99991433f +}; + +const float small_overlap_25[R2_25/7]= +{ + 0.02454123f, 0.07356456f, 0.12241068f, 0.17096189f, 0.21910124f, 0.26671276f, 0.31368174f, 0.35989504f, + 0.40524131f, 0.44961133f, 0.49289819f, 0.53499762f, 0.57580819f, 0.61523159f, 0.65317284f, 0.68954054f, + 0.72424708f, 0.75720885f, 0.78834643f, 0.81758481f, 0.84485357f, 0.87008699f, 0.89322430f, 0.91420976f, + 0.93299280f, 0.94952818f, 0.96377607f, 0.97570213f, 0.98527764f, 0.99247953f, 0.99729046f, 0.99969882f +}; + +const float small_overlap_int[R2_16/7]= +{ + 0.07845910f, 0.15643447f, + 0.23344536f, 0.30901699f, 0.38268343f, 0.45399050f, 0.52249856f, 0.58778525f, 0.64944805f, 0.69778617f, + 0.71630612f, 0.76040597f, 0.80901699f, 0.85264016f, 0.89100652f, 0.92387953f, 0.95105652f, 0.97236992f, + 0.98768834f, 0.99691733f +}; + + +const float half_overlap_48[3*R2_48/7]= +{ + 0.00436331f, 0.01308960f, + 0.02181489f, 0.03053851f, 0.03925982f, 0.04797813f, 0.05669279f, 0.06540313f, 0.07410849f, 0.08280821f, + 0.09150162f, 0.10018806f, 0.10886687f, 0.11753740f, 0.12619897f, 0.13485093f, 0.14349262f, 0.15212339f, + 0.16074257f, 0.16934950f, 0.17794355f, 0.18652404f, 0.19509032f, 0.20364175f, 0.21217767f, 0.22069744f, + 0.22920039f, 0.23768589f, 0.24615329f, 0.25460195f, 0.26303121f, 0.27144045f, 0.27982901f, 0.28819627f, + 0.29654157f, 0.30486430f, 0.31316381f, 0.32143947f, 0.32969065f, 0.33791672f, 0.34611706f, 0.35429104f, + 0.36243804f, 0.37055744f, 0.37864862f, 0.38671096f, 0.39474386f, 0.40274669f, 0.41071885f, 0.41865974f, + 0.42656874f, 0.43444526f, 0.44228869f, 0.45009844f, 0.45787392f, 0.46561452f, 0.47331967f, 0.48098877f, + 0.48862124f, 0.49621650f, 0.50377398f, 0.51129309f, 0.51877326f, 0.52621392f, 0.53361452f, 0.54097447f, + 0.54829323f, 0.55557023f, 0.56280493f, 0.56999676f, 0.57714519f, 0.58424967f, 0.59130965f, 0.59832460f, + 0.60529399f, 0.61221728f, 0.61909395f, 0.62592347f, 0.63270533f, 0.63943900f, 0.64612398f, 0.65275975f, + 0.65934582f, 0.66588167f, 0.67236681f, 0.67880075f, 0.68518299f, 0.69151306f, 0.69779046f, 0.70401472f, + 0.71018538f, 0.71630194f, 0.72236396f, 0.72837097f, 0.73432251f, 0.74021813f, 0.74605738f, 0.75183981f, + 0.75756498f, 0.76323247f, 0.76884183f, 0.77439264f, 0.77988448f, 0.78531693f, 0.79068957f, 0.79600200f, + 0.80125381f, 0.80644460f, 0.81157398f, 0.81664156f, 0.82164694f, 0.82658975f, 0.83146961f, 0.83628616f, + 0.84103901f, 0.84572782f, 0.85035222f, 0.85491187f, 0.85940641f, 0.86383551f, 0.86819881f, 0.87249601f, + 0.87672676f, 0.88089074f, 0.88498764f, 0.88901714f, 0.89297894f, 0.89687274f, 0.90069824f, 0.90445515f, + 0.90814317f, 0.91176204f, 0.91531148f, 0.91879121f, 0.92220097f, 0.92554050f, 0.92880955f, 0.93200787f, + 0.93513521f, 0.93819134f, 0.94117602f, 0.94408902f, 0.94693013f, 0.94969913f, 0.95239580f, 0.95501994f, + 0.95757136f, 0.96004985f, 0.96245524f, 0.96478732f, 0.96704594f, 0.96923091f, 0.97134207f, 0.97337926f, + 0.97534232f, 0.97723111f, 0.97904547f, 0.98078528f, 0.98245040f, 0.98404070f, 0.98555606f, 0.98699637f, + 0.98836151f, 0.98965139f, 0.99086590f, 0.99200495f, 0.99306846f, 0.99405634f, 0.99496852f, 0.99580493f, + 0.99656550f, 0.99725019f, 0.99785892f, 0.99839167f, 0.99884839f, 0.99922904f, 0.99953359f, 0.99976203f, + 0.99991433f, 0.99999048f +}; + +const float half_overlap_25[3*R2_25/7]= +{ + 0.00818114f, 0.02454123f, 0.04089475f, 0.05723732f, 0.07356456f, 0.08987211f, 0.10615561f, 0.12241068f, + 0.13863297f, 0.15481816f, 0.17096189f, 0.18705985f, 0.20310773f, 0.21910124f, 0.23503609f, 0.25090801f, + 0.26671276f, 0.28244610f, 0.29810383f, 0.31368174f, 0.32917568f, 0.34458148f, 0.35989504f, 0.37511224f, + 0.39022901f, 0.40524131f, 0.42014512f, 0.43493645f, 0.44961133f, 0.46416584f, 0.47859608f, 0.49289819f, + 0.50706834f, 0.52110274f, 0.53499762f, 0.54874927f, 0.56235401f, 0.57580819f, 0.58910822f, 0.60225052f, + 0.61523159f, 0.62804795f, 0.64069616f, 0.65317284f, 0.66547466f, 0.67759830f, 0.68954054f, 0.70129818f, + 0.71286806f, 0.72424708f, 0.73543221f, 0.74642045f, 0.75720885f, 0.76779452f, 0.77817464f, 0.78834643f, + 0.79830715f, 0.80805415f, 0.81758481f, 0.82689659f, 0.83598698f, 0.84485357f, 0.85349396f, 0.86190585f, + 0.87008699f, 0.87803519f, 0.88574831f, 0.89322430f, 0.90046115f, 0.90745693f, 0.91420976f, 0.92071783f, + 0.92697940f, 0.93299280f, 0.93875641f, 0.94426870f, 0.94952818f, 0.95453345f, 0.95928317f, 0.96377607f, + 0.96801094f, 0.97198664f, 0.97570213f, 0.97915640f, 0.98234852f, 0.98527764f, 0.98794298f, 0.99034383f, + 0.99247953f, 0.99434953f, 0.99595331f, 0.99729046f, 0.99836060f, 0.99916346f, 0.99969882f, 0.99996653f, +}; + +const float half_overlap_int[3*R2_16/7]= +{ + 0.02617695f, 0.05233596f, 0.07845910f, 0.10452846f, 0.13052619f, 0.15643447f, + 0.18223553f, 0.20791169f, 0.23344536f, 0.25881905f, 0.28401534f, 0.30901699f, 0.33380686f, 0.35836795f, + 0.38268343f, 0.40673664f, 0.43051110f, 0.45399050f, 0.47715876f, 0.50000000f, 0.52249856f, 0.54463904f, + 0.56640624f, 0.58778525f, 0.60876143f, 0.62932039f, 0.64944805f, 0.66913061f, 0.68835458f, 0.70401457f, + 0.71018553f, 0.72537437f, 0.74314483f, 0.76040597f, 0.77714596f, 0.79335334f, 0.80901699f, 0.82412619f, + 0.83867057f, 0.85264016f, 0.86602540f, 0.87881711f, 0.89100652f, 0.90258528f, 0.91354546f, 0.92387953f, + 0.93358043f, 0.94264149f, 0.95105652f, 0.95881973f, 0.96592583f, 0.97236992f, 0.97814760f, 0.98325491f, + 0.98768834f, 0.99144486f, 0.99452190f, 0.99691733f, 0.99862953f, 0.99965732f +}; + +const float window_48kHz[1110] = +{ + 0.00000717f, 0.00002765f, 0.00006087f, 0.00010657f, 0.00016454f, 0.00023464f, 0.00031674f, 0.00041075f, + 0.00051659f, 0.00063416f, 0.00076341f, 0.00090428f, 0.00105670f, 0.00122062f, 0.00139600f, 0.00158279f, + 0.00178095f, 0.00199044f, 0.00221121f, 0.00244323f, 0.00268646f, 0.00294088f, 0.00320644f, 0.00348313f, + 0.00377089f, 0.00406971f, 0.00437956f, 0.00470041f, 0.00503222f, 0.00537498f, 0.00572866f, 0.00609322f, + 0.00646865f, 0.00685492f, 0.00725200f, 0.00765987f, 0.00807851f, 0.00850788f, 0.00894798f, 0.00939876f, + 0.00986022f, 0.01033232f, 0.01081504f, 0.01130837f, 0.01181227f, 0.01232672f, 0.01285171f, 0.01338721f, + 0.01393319f, 0.01448963f, 0.01505652f, 0.01563383f, 0.01622153f, 0.01681961f, 0.01742804f, 0.01804680f, + 0.01867586f, 0.01931521f, 0.01996482f, 0.02062467f, 0.02129474f, 0.02197501f, 0.02266545f, 0.02336603f, + 0.02407675f, 0.02479757f, 0.02552847f, 0.02626943f, 0.02702042f, 0.02778143f, 0.02855244f, 0.02933340f, + 0.03012432f, 0.03092515f, 0.03173588f, 0.03255648f, 0.03338694f, 0.03422723f, 0.03507731f, 0.03593718f, + 0.03680680f, 0.03768616f, 0.03857522f, 0.03947397f, 0.04038238f, 0.04130042f, 0.04222808f, 0.04316532f, + 0.04411212f, 0.04506846f, 0.04603431f, 0.04700965f, 0.04799445f, 0.04898869f, 0.04999234f, 0.05100537f, + 0.05202776f, 0.05305949f, 0.05410053f, 0.05515085f, 0.05621043f, 0.05727924f, 0.05835725f, 0.05944444f, + 0.06054078f, 0.06164624f, 0.06276080f, 0.06388444f, 0.06501711f, 0.06615880f, 0.06730949f, 0.06846913f, + 0.06963771f, 0.07081519f, 0.07200155f, 0.07319676f, 0.07440080f, 0.07561362f, 0.07683522f, 0.07806555f, + 0.07930459f, 0.08055231f, 0.08180868f, 0.08307367f, 0.08434725f, 0.08562940f, 0.08692008f, 0.08821927f, + 0.08952693f, 0.09084304f, 0.09216756f, 0.09350047f, 0.09484173f, 0.09619131f, 0.09754919f, 0.09891534f, + 0.10028971f, 0.10167229f, 0.10306304f, 0.10446193f, 0.10586893f, 0.10728400f, 0.10870712f, 0.11013826f, + 0.11157738f, 0.11302444f, 0.11447943f, 0.11594230f, 0.11741303f, 0.11889158f, 0.12037792f, 0.12187201f, + 0.12337383f, 0.12488334f, 0.12640051f, 0.12792530f, 0.12945769f, 0.13099763f, 0.13254510f, 0.13410005f, + 0.13566247f, 0.13723231f, 0.13880953f, 0.14039412f, 0.14198602f, 0.14358521f, 0.14519166f, 0.14680532f, + 0.14842616f, 0.15005415f, 0.15168925f, 0.15333143f, 0.15498066f, 0.15663689f, 0.15830009f, 0.15997023f, + 0.16164727f, 0.16333117f, 0.16502191f, 0.16671943f, 0.16842371f, 0.17013472f, 0.17185240f, 0.17357674f, + 0.17530768f, 0.17704520f, 0.17878926f, 0.18053981f, 0.18229683f, 0.18406028f, 0.18583011f, 0.18760630f, + 0.18938880f, 0.19117758f, 0.19297259f, 0.19477381f, 0.19658119f, 0.19839469f, 0.20021428f, 0.20203992f, + 0.20387157f, 0.20570919f, 0.20755274f, 0.20940219f, 0.21125750f, 0.21311862f, 0.21498552f, 0.21685816f, + 0.21873650f, 0.22062050f, 0.22251012f, 0.22440532f, 0.22630606f, 0.22821231f, 0.23012402f, 0.23204116f, + 0.23396367f, 0.23589153f, 0.23782470f, 0.23976312f, 0.24170677f, 0.24365560f, 0.24560957f, 0.24756865f, + 0.24953278f, 0.25150194f, 0.25347607f, 0.25545514f, 0.25743911f, 0.25942794f, 0.26142158f, 0.26341999f, + 0.26542314f, 0.26743098f, 0.26944347f, 0.27146056f, 0.27348222f, 0.27550841f, 0.27753908f, 0.27957419f, + 0.28161370f, 0.28365757f, 0.28570575f, 0.28775820f, 0.28981489f, 0.29187576f, 0.29394078f, 0.29600991f, + 0.29808309f, 0.30016029f, 0.30224147f, 0.30432658f, 0.30641558f, 0.30850843f, 0.31060508f, 0.31270549f, + 0.31480962f, 0.31691743f, 0.31902887f, 0.32114389f, 0.32326246f, 0.32538454f, 0.32751007f, 0.32963901f, + 0.33177133f, 0.33390698f, 0.33604591f, 0.33818808f, 0.34033345f, 0.34248196f, 0.34432825f, 0.34619672f, + 0.34807434f, 0.34995817f, 0.35184686f, 0.35373965f, 0.35563601f, 0.35753559f, 0.35943811f, 0.36134336f, + 0.36325118f, 0.36516141f, 0.36707393f, 0.36898864f, 0.37090544f, 0.37282426f, 0.37474501f, 0.37666763f, + 0.37859204f, 0.38051820f, 0.38244605f, 0.38437553f, 0.38630659f, 0.38823918f, 0.39017326f, 0.39210879f, + 0.39404572f, 0.39598401f, 0.39792361f, 0.39986450f, 0.40180663f, 0.40374996f, 0.40569446f, 0.40764009f, + 0.40958682f, 0.41153461f, 0.41348342f, 0.41543322f, 0.41738398f, 0.41933567f, 0.42128825f, 0.42324169f, + 0.42519595f, 0.42715101f, 0.42910683f, 0.43106338f, 0.43302063f, 0.43497855f, 0.43693710f, 0.43889626f, + 0.44085600f, 0.44281628f, 0.44477708f, 0.44673836f, 0.44870009f, 0.45066225f, 0.45262480f, 0.45458771f, + 0.45655096f, 0.45851451f, 0.46047834f, 0.46244241f, 0.46440670f, 0.46637117f, 0.46833580f, 0.47030055f, + 0.47226541f, 0.47423033f, 0.47619530f, 0.47816027f, 0.48012523f, 0.48209014f, 0.48405498f, 0.48601971f, + 0.48798430f, 0.48994874f, 0.49191298f, 0.49387701f, 0.49584078f, 0.49780428f, 0.49976748f, 0.50173034f, + 0.50369284f, 0.50565495f, 0.50761664f, 0.50957789f, 0.51153865f, 0.51349892f, 0.51545865f, 0.51741783f, + 0.51937641f, 0.52133438f, 0.52329171f, 0.52524836f, 0.52720432f, 0.52915954f, 0.53111401f, 0.53306770f, + 0.53502057f, 0.53697261f, 0.53892378f, 0.54087405f, 0.54282340f, 0.54477180f, 0.54671922f, 0.54866564f, + 0.55061103f, 0.55255535f, 0.55449858f, 0.55644070f, 0.55838168f, 0.56032149f, 0.56226010f, 0.56419748f, + 0.56613362f, 0.56806847f, 0.57000202f, 0.57193423f, 0.57386509f, 0.57579455f, 0.57772261f, 0.57964922f, + 0.58157436f, 0.58349801f, 0.58542013f, 0.58734071f, 0.58925971f, 0.59117711f, 0.59309288f, 0.59500700f, + 0.59691943f, 0.59883016f, 0.60073915f, 0.60264638f, 0.60455182f, 0.60645545f, 0.60835724f, 0.61025717f, + 0.61215520f, 0.61405132f, 0.61594549f, 0.61783769f, 0.61972789f, 0.62161608f, 0.62350222f, 0.62538628f, + 0.62726824f, 0.62914809f, 0.63102578f, 0.63290129f, 0.63477461f, 0.63664570f, 0.63851454f, 0.64038110f, + 0.64224536f, 0.64410729f, 0.64596688f, 0.64782408f, 0.64967889f, 0.65153127f, 0.65338119f, 0.65522864f, + 0.65707360f, 0.65891602f, 0.66075590f, 0.66259321f, 0.66442791f, 0.66626000f, 0.66808944f, 0.66991621f, + 0.67174028f, 0.67356164f, 0.67538025f, 0.67719610f, 0.67900916f, 0.68081941f, 0.68262682f, 0.68443137f, + 0.68623303f, 0.68803180f, 0.68982763f, 0.69162050f, 0.69341041f, 0.69519731f, 0.69698119f, 0.69876203f, + 0.70053980f, 0.70231448f, 0.70408605f, 0.70585448f, 0.70761976f, 0.70938186f, 0.71114076f, 0.71289643f, + 0.71464886f, 0.71639803f, 0.71814390f, 0.71988647f, 0.72162570f, 0.72336158f, 0.72509409f, 0.72682320f, + 0.72854889f, 0.73027115f, 0.73198995f, 0.73370527f, 0.73541708f, 0.73712538f, 0.73883014f, 0.74053133f, + 0.74222894f, 0.74392295f, 0.74561334f, 0.74730009f, 0.74898317f, 0.75066257f, 0.75233827f, 0.75401025f, + 0.75567849f, 0.75734297f, 0.75900367f, 0.76066057f, 0.76231366f, 0.76396291f, 0.76560830f, 0.76724982f, + 0.76888745f, 0.77052118f, 0.77215097f, 0.77377682f, 0.77539870f, 0.77701660f, 0.77863050f, 0.78024038f, + 0.78184623f, 0.78344803f, 0.78504575f, 0.78663939f, 0.78822893f, 0.78981434f, 0.79139562f, 0.79297274f, + 0.79454569f, 0.79611446f, 0.79767902f, 0.79923936f, 0.80079547f, 0.80234733f, 0.80389492f, 0.80543823f, + 0.80697724f, 0.80851193f, 0.81004230f, 0.81156833f, 0.81309000f, 0.81460729f, 0.81612020f, 0.81762870f, + 0.81913279f, 0.82063245f, 0.82212766f, 0.82361842f, 0.82510470f, 0.82658650f, 0.82806380f, 0.82953658f, + 0.83100484f, 0.83246856f, 0.83392773f, 0.83538233f, 0.83683236f, 0.83827780f, 0.83971863f, 0.84115485f, + 0.84258645f, 0.84401340f, 0.84543571f, 0.84685336f, 0.84826633f, 0.84967462f, 0.85107821f, 0.85247710f, + 0.85387127f, 0.85526072f, 0.85664542f, 0.85802538f, 0.85940058f, 0.86077102f, 0.86213667f, 0.86349754f, + 0.86485361f, 0.86620487f, 0.86755132f, 0.86889294f, 0.87022973f, 0.87156168f, 0.87288878f, 0.87421101f, + 0.87552839f, 0.87684088f, 0.87814849f, 0.87945122f, 0.88074904f, 0.88204196f, 0.88332997f, 0.88461305f, + 0.88589122f, 0.88716444f, 0.88843273f, 0.88969608f, 0.89095447f, 0.89220791f, 0.89345638f, 0.89469988f, + 0.89593841f, 0.89717197f, 0.89840053f, 0.89962411f, 0.90084270f, 0.90205629f, 0.90326488f, 0.90446846f, + 0.90566704f, 0.90686060f, 0.90804915f, 0.90923267f, 0.91041118f, 0.91158466f, 0.91275311f, 0.91391654f, + 0.91507493f, 0.91622829f, 0.91737662f, 0.91851991f, 0.91965816f, 0.92079138f, 0.92191956f, 0.92304270f, + 0.92416080f, 0.92527386f, 0.92638188f, 0.92748486f, 0.92858281f, 0.92967572f, 0.93076360f, 0.93184645f, + 0.93292426f, 0.93399705f, 0.93506481f, 0.93612755f, 0.93718527f, 0.93823797f, 0.93928566f, 0.94032834f, + 0.94136602f, 0.94239870f, 0.94342639f, 0.94444909f, 0.94546681f, 0.94647956f, 0.94748733f, 0.94849015f, + 0.94948801f, 0.95048093f, 0.95146891f, 0.95245197f, 0.95343011f, 0.95440334f, 0.95537168f, 0.95633513f, + 0.95729371f, 0.95824743f, 0.95919630f, 0.96014034f, 0.96107957f, 0.96201399f, 0.96294363f, 0.96386850f, + 0.96478862f, 0.96570402f, 0.96661470f, 0.96752070f, 0.96842204f, 0.96931873f, 0.97021081f, 0.97109831f, + 0.97198124f, 0.97285966f, 0.97373358f, 0.97460304f, 0.97546808f, 0.97632874f, 0.97718506f, 0.97803710f, + 0.97888489f, 0.97972850f, 0.98056799f, 0.98140340f, 0.98223483f, 0.98306234f, 0.98388601f, 0.98470595f, + 0.98552225f, 0.98633502f, 0.98714441f, 0.98795054f, 0.98875359f, 0.98955376f, 0.99035126f, 0.99114636f, + 0.99193936f, 0.99273065f, 0.99352070f, 0.99431009f, 0.99509960f, 0.99589027f, 0.99668360f, 0.99748189f, + 0.99828914f, 0.99911401f, 0.99911401f, 0.99828759f, 0.99747571f, 0.99666970f, 0.99586557f, 0.99506104f, + 0.99425460f, 0.99344523f, 0.99263215f, 0.99181478f, 0.99099266f, 0.99016542f, 0.98933274f, 0.98849437f, + 0.98765009f, 0.98679972f, 0.98594310f, 0.98508007f, 0.98421052f, 0.98333434f, 0.98245143f, 0.98156170f, + 0.98066506f, 0.97976145f, 0.97885080f, 0.97793305f, 0.97700814f, 0.97607603f, 0.97513666f, 0.97419000f, + 0.97323600f, 0.97227462f, 0.97130583f, 0.97032960f, 0.96934589f, 0.96835468f, 0.96735594f, 0.96634965f, + 0.96533578f, 0.96431430f, 0.96328520f, 0.96224846f, 0.96120406f, 0.96015197f, 0.95909219f, 0.95802469f, + 0.95694946f, 0.95586649f, 0.95477576f, 0.95367726f, 0.95257097f, 0.95145688f, 0.95033498f, 0.94920527f, + 0.94806772f, 0.94692233f, 0.94576909f, 0.94460799f, 0.94343902f, 0.94226217f, 0.94107743f, 0.93988480f, + 0.93868427f, 0.93747583f, 0.93625947f, 0.93503520f, 0.93380299f, 0.93256285f, 0.93131476f, 0.93005873f, + 0.92879475f, 0.92752281f, 0.92624292f, 0.92495505f, 0.92365922f, 0.92235541f, 0.92104362f, 0.91972385f, + 0.91839609f, 0.91706034f, 0.91571660f, 0.91436487f, 0.91300513f, 0.91163740f, 0.91026166f, 0.90887792f, + 0.90748616f, 0.90608640f, 0.90467862f, 0.90326283f, 0.90183902f, 0.90040720f, 0.89896735f, 0.89751949f, + 0.89606360f, 0.89459969f, 0.89312776f, 0.89164780f, 0.89015982f, 0.88866382f, 0.88715979f, 0.88564773f, + 0.88412765f, 0.88259954f, 0.88106340f, 0.87951924f, 0.87796706f, 0.87640684f, 0.87483861f, 0.87326235f, + 0.87167807f, 0.87008576f, 0.86848544f, 0.86687709f, 0.86526073f, 0.86363635f, 0.86200395f, 0.86036353f, + 0.85871510f, 0.85705867f, 0.85539422f, 0.85372176f, 0.85204129f, 0.85035282f, 0.84865635f, 0.84695188f, + 0.84523941f, 0.84351895f, 0.84179049f, 0.84005404f, 0.83830960f, 0.83655718f, 0.83479677f, 0.83302839f, + 0.83125203f, 0.82946769f, 0.82767538f, 0.82587511f, 0.82406687f, 0.82225067f, 0.82042651f, 0.81859440f, + 0.81675434f, 0.81490633f, 0.81305038f, 0.81118649f, 0.80931466f, 0.80743490f, 0.80554721f, 0.80365160f, + 0.80174807f, 0.79983662f, 0.79791726f, 0.79599000f, 0.79405483f, 0.79211177f, 0.79016081f, 0.78820196f, + 0.78623522f, 0.78426061f, 0.78227812f, 0.78028777f, 0.77828954f, 0.77628346f, 0.77426952f, 0.77224773f, + 0.77021809f, 0.76818061f, 0.76613530f, 0.76408216f, 0.76202120f, 0.75995241f, 0.75787581f, 0.75579140f, + 0.75369919f, 0.75159918f, 0.74949138f, 0.74737580f, 0.74525243f, 0.74312128f, 0.74098237f, 0.73883570f, + 0.73668126f, 0.73451908f, 0.73234915f, 0.73017147f, 0.72798607f, 0.72579293f, 0.72359208f, 0.72138350f, + 0.71916722f, 0.71694323f, 0.71471154f, 0.71247217f, 0.71022510f, 0.70797036f, 0.70570794f, 0.70343786f, + 0.70116012f, 0.69887472f, 0.69658167f, 0.69428098f, 0.69197265f, 0.68965669f, 0.68733312f, 0.68500192f, + 0.68266311f, 0.68031670f, 0.67796269f, 0.67560109f, 0.67323190f, 0.67085514f, 0.66847080f, 0.66607889f, + 0.66367943f, 0.66127241f, 0.65885784f, 0.65643574f, 0.65400609f, 0.65156892f, 0.64912423f, 0.64667201f, + 0.64421229f, 0.64174507f, 0.63927035f, 0.63678813f, 0.63429843f, 0.63180125f, 0.62929660f, 0.62678447f, + 0.62426489f, 0.62173785f, 0.61920336f, 0.61666143f, 0.61411206f, 0.61155525f, 0.60899102f, 0.60641937f, + 0.60384030f, 0.60125382f, 0.59865994f, 0.59605866f, 0.59344998f, 0.59083391f, 0.58821046f, 0.58557964f, + 0.58294143f, 0.58029586f, 0.57764293f, 0.57498264f, 0.57231499f, 0.56963999f, 0.56695765f, 0.56426797f, + 0.56157095f, 0.55886660f, 0.55615492f, 0.55343592f, 0.55070960f, 0.54797596f, 0.54523501f, 0.54248675f, + 0.53973118f, 0.53696832f, 0.53419815f, 0.53142069f, 0.52863593f, 0.52584388f, 0.52304455f, 0.52023793f, + 0.51742403f, 0.51460284f, 0.51177438f, 0.50893864f, 0.50609563f, 0.50324534f, 0.50038778f, 0.49752294f, + 0.49465084f, 0.49177147f, 0.48888482f, 0.48599091f, 0.48308973f, 0.48018128f, 0.47726556f, 0.47434256f, + 0.47141230f, 0.46847477f, 0.46552996f, 0.46257788f, 0.45961852f, 0.45665188f, 0.45367796f, 0.45069676f, + 0.44770827f, 0.44471249f, 0.44170942f, 0.43869905f, 0.43568138f, 0.43265640f, 0.42962411f, 0.42658451f, + 0.42353758f, 0.42048333f, 0.41742175f, 0.41435283f, 0.41127656f, 0.40819293f, 0.40510195f, 0.40200359f, + 0.39889786f, 0.39578474f, 0.39266422f, 0.38953629f, 0.38640095f, 0.38325818f, 0.38010797f, 0.37695031f, + 0.37378519f, 0.37061258f, 0.36743249f, 0.36424489f, 0.36104978f, 0.35784713f, 0.35463693f, 0.35141916f, + 0.34819381f, 0.34496085f, 0.34172027f, 0.33847206f, 0.33521618f, 0.33195262f, 0.32868136f, 0.32540237f, + 0.32211564f, 0.31882113f, 0.31551882f, 0.31220868f, 0.30889070f, 0.30556483f, 0.30223106f, 0.29888935f, + 0.29553966f, 0.29218198f, 0.28881626f, 0.28544246f, 0.28206056f, 0.27867052f, 0.27527229f, 0.27186583f, + 0.26845112f, 0.26502809f, 0.26159670f, 0.25815692f, 0.25470869f, 0.25125196f, 0.24778667f, 0.24431278f, + 0.24083023f, 0.23733896f, 0.23383891f, 0.23033001f, 0.22681220f, 0.22328542f, 0.21974958f, 0.21620462f, + 0.21265047f, 0.20908703f, 0.20551423f, 0.20193197f, 0.19834018f, 0.19473875f, 0.19112758f, 0.18750657f, + 0.18387561f, 0.18023459f, 0.17658339f, 0.17292189f, 0.16924994f, 0.16556742f, 0.16187418f, 0.15817007f, + 0.15445492f, 0.15072857f, 0.14699084f, 0.14324154f, 0.13948047f, 0.13570741f, 0.13192214f, 0.12812442f, + 0.12431400f, 0.12049059f, 0.11665391f, 0.11280364f, 0.10893944f, 0.10506094f, 0.10116776f, 0.09725946f, + 0.09333558f, 0.08939561f, 0.08543899f, 0.08146510f, 0.07747327f, 0.07346273f, 0.06943264f, 0.06538204f, + 0.06130985f, 0.05721482f, 0.05309551f, 0.04895024f, 0.04477702f, 0.04057343f, 0.03633653f, 0.03206261f, + 0.02774685f, 0.02338280f, 0.01896129f, 0.01446831f, 0.00987977f, 0.00514389f +}; + + +const float short_window_8kHz[80] = +{ + 0.01963369f, 0.05887080f, 0.09801714f, 0.13701234f, 0.17579628f, 0.21430915f, 0.25249158f, 0.29028468f, + 0.32763018f, 0.36447050f, 0.40074883f, 0.43640924f, 0.47139674f, 0.50565737f, 0.53913832f, 0.57178796f, + 0.60355594f, 0.63439328f, 0.66425244f, 0.69308736f, 0.72085360f, 0.74750833f, 0.77301045f, 0.79732065f, + 0.82040144f, 0.84221723f, 0.86273439f, 0.88192126f, 0.89974828f, 0.91618796f, 0.93121493f, 0.94480605f, + 0.95694034f, 0.96759909f, 0.97676588f, 0.98442657f, 0.99056934f, 0.99518473f, 0.99826561f, 0.99980724f, + 0.99980724f, 0.99826561f, 0.99518473f, 0.99056934f, 0.98442657f, 0.97676588f, 0.96759909f, 0.95694034f, + 0.94480605f, 0.93121493f, 0.91618796f, 0.89974828f, 0.88192126f, 0.86273439f, 0.84221723f, 0.82040144f, + 0.79732065f, 0.77301045f, 0.74750833f, 0.72085360f, 0.69308736f, 0.66425244f, 0.63439328f, 0.60355594f, + 0.57178796f, 0.53913832f, 0.50565737f, 0.47139674f, 0.43640924f, 0.40074883f, 0.36447050f, 0.32763018f, + 0.29028468f, 0.25249158f, 0.21430915f, 0.17579628f, 0.13701234f, 0.09801714f, 0.05887080f, 0.01963369f +}; + +const float short_window_16kHz[160] = +{ + 0.00981732f, 0.02944817f, 0.04906767f, 0.06866826f, + 0.08824237f, 0.10778246f, 0.12728100f, 0.14673047f, + 0.16612338f, 0.18545224f, 0.20470960f, 0.22388805f, + 0.24298018f, 0.26197864f, 0.28087610f, 0.29966528f, + 0.31833893f, 0.33688985f, 0.35531090f, 0.37359497f, + 0.39173501f, 0.40972403f, 0.42755509f, 0.44522133f, + 0.46271592f, 0.48003212f, 0.49716327f, 0.51410274f, + 0.53084403f, 0.54738066f, 0.56370626f, 0.57981455f, + 0.59569930f, 0.61135441f, 0.62677382f, 0.64195160f, + 0.65688190f, 0.67155895f, 0.68597711f, 0.70013081f, + 0.71401460f, 0.72762312f, 0.74095113f, 0.75399348f, + 0.76674516f, 0.77920124f, 0.79135693f, 0.80320753f, + 0.81474848f, 0.82597533f, 0.83688375f, 0.84746954f, + 0.85772861f, 0.86765701f, 0.87725091f, 0.88650662f, + 0.89542056f, 0.90398929f, 0.91220953f, 0.92007808f, + 0.92759194f, 0.93474818f, 0.94154407f, 0.94797697f, + 0.95404440f, 0.95974404f, 0.96507367f, 0.97003125f, + 0.97461487f, 0.97882275f, 0.98265328f, 0.98610498f, + 0.98917651f, 0.99186670f, 0.99417450f, 0.99609903f, + 0.99763955f, 0.99879546f, 0.99956631f, 0.99995181f, + 0.99995181f, 0.99956631f, 0.99879546f, 0.99763955f, + 0.99609903f, 0.99417450f, 0.99186670f, 0.98917651f, + 0.98610498f, 0.98265328f, 0.97882275f, 0.97461487f, + 0.97003125f, 0.96507367f, 0.95974404f, 0.95404440f, + 0.94797697f, 0.94154407f, 0.93474818f, 0.92759194f, + 0.92007808f, 0.91220953f, 0.90398929f, 0.89542056f, + 0.88650662f, 0.87725091f, 0.86765701f, 0.85772861f, + 0.84746954f, 0.83688375f, 0.82597533f, 0.81474848f, + 0.80320753f, 0.79135693f, 0.77920124f, 0.76674516f, + 0.75399348f, 0.74095113f, 0.72762312f, 0.71401460f, + 0.70013081f, 0.68597711f, 0.67155895f, 0.65688190f, + 0.64195160f, 0.62677382f, 0.61135441f, 0.59569930f, + 0.57981455f, 0.56370626f, 0.54738066f, 0.53084403f, + 0.51410274f, 0.49716327f, 0.48003212f, 0.46271592f, + 0.44522133f, 0.42755509f, 0.40972403f, 0.39173501f, + 0.37359497f, 0.35531090f, 0.33688985f, 0.31833893f, + 0.29966528f, 0.28087610f, 0.26197864f, 0.24298018f, + 0.22388805f, 0.20470960f, 0.18545224f, 0.16612338f, + 0.14673047f, 0.12728100f, 0.10778246f, 0.08824237f, + 0.06866826f, 0.04906767f, 0.02944817f, 0.00981732f +}; + +const float short_window_32kHz[320] = +{ + 0.00490872f, 0.01472568f, 0.02454123f, 0.03435441f, 0.04416428f, 0.05396989f, + 0.06377030f, 0.07356456f, 0.08335174f, 0.09313088f, 0.10290104f, 0.11266129f, + 0.12241068f, 0.13214826f, 0.14187312f, 0.15158430f, 0.16128086f, 0.17096189f, + 0.18062644f, 0.19027357f, 0.19990237f, 0.20951190f, 0.21910124f, 0.22866946f, + 0.23821564f, 0.24773886f, 0.25723821f, 0.26671276f, 0.27616160f, 0.28558383f, + 0.29497853f, 0.30434480f, 0.31368174f, 0.32298845f, 0.33226402f, 0.34150757f, + 0.35071820f, 0.35989504f, 0.36903718f, 0.37814376f, 0.38721389f, 0.39624670f, + 0.40524131f, 0.41419687f, 0.42311251f, 0.43198737f, 0.44082059f, 0.44961133f, + 0.45835873f, 0.46706195f, 0.47572016f, 0.48433252f, 0.49289819f, 0.50141636f, + 0.50988620f, 0.51830690f, 0.52667764f, 0.53499762f, 0.54326604f, 0.55148209f, + 0.55964499f, 0.56775395f, 0.57580819f, 0.58380693f, 0.59174941f, 0.59963485f, + 0.60746249f, 0.61523159f, 0.62294139f, 0.63059115f, 0.63818013f, 0.64570760f, + 0.65317284f, 0.66057513f, 0.66791374f, 0.67518798f, 0.68239715f, 0.68954054f, + 0.69661748f, 0.70362727f, 0.71056925f, 0.71744274f, 0.72424708f, 0.73098162f, + 0.73764570f, 0.74423869f, 0.75075995f, 0.75720885f, 0.76358476f, 0.76988708f, + 0.77611520f, 0.78226851f, 0.78834643f, 0.79434836f, 0.80027373f, 0.80612197f, + 0.81189252f, 0.81758481f, 0.82319831f, 0.82873246f, 0.83418673f, 0.83956061f, + 0.84485357f, 0.85006509f, 0.85519469f, 0.86024186f, 0.86520612f, 0.87008699f, + 0.87488400f, 0.87959669f, 0.88422459f, 0.88876728f, 0.89322430f, 0.89759523f, + 0.90187965f, 0.90607715f, 0.91018732f, 0.91420976f, 0.91814408f, 0.92198992f, + 0.92574689f, 0.92941463f, 0.93299280f, 0.93648104f, 0.93987902f, 0.94318642f, + 0.94640291f, 0.94952818f, 0.95256194f, 0.95550388f, 0.95835373f, 0.96111122f, + 0.96377607f, 0.96634802f, 0.96882685f, 0.97121229f, 0.97350412f, 0.97570213f, + 0.97780610f, 0.97981582f, 0.98173111f, 0.98355177f, 0.98527764f, 0.98690855f, + 0.98844433f, 0.98988485f, 0.99122996f, 0.99247953f, 0.99363345f, 0.99469160f, + 0.99565388f, 0.99652019f, 0.99729046f, 0.99796460f, 0.99854256f, 0.99902428f, + 0.99940971f, 0.99969882f, 0.99989157f, 0.99998795f, 0.99998795f, 0.99989157f, + 0.99969882f, 0.99940971f, 0.99902428f, 0.99854256f, 0.99796460f, 0.99729046f, + 0.99652019f, 0.99565388f, 0.99469160f, 0.99363345f, 0.99247953f, 0.99122996f, + 0.98988485f, 0.98844433f, 0.98690855f, 0.98527764f, 0.98355177f, 0.98173111f, + 0.97981582f, 0.97780610f, 0.97570213f, 0.97350412f, 0.97121229f, 0.96882685f, + 0.96634802f, 0.96377607f, 0.96111122f, 0.95835373f, 0.95550388f, 0.95256194f, + 0.94952818f, 0.94640291f, 0.94318642f, 0.93987902f, 0.93648104f, 0.93299280f, + 0.92941463f, 0.92574689f, 0.92198992f, 0.91814408f, 0.91420976f, 0.91018732f, + 0.90607715f, 0.90187965f, 0.89759523f, 0.89322430f, 0.88876728f, 0.88422459f, + 0.87959669f, 0.87488400f, 0.87008699f, 0.86520612f, 0.86024186f, 0.85519469f, + 0.85006509f, 0.84485357f, 0.83956061f, 0.83418673f, 0.82873246f, 0.82319831f, + 0.81758481f, 0.81189252f, 0.80612197f, 0.80027373f, 0.79434836f, 0.78834643f, + 0.78226851f, 0.77611520f, 0.76988708f, 0.76358476f, 0.75720885f, 0.75075995f, + 0.74423869f, 0.73764570f, 0.73098162f, 0.72424708f, 0.71744274f, 0.71056925f, + 0.70362727f, 0.69661748f, 0.68954054f, 0.68239715f, 0.67518798f, 0.66791374f, + 0.66057513f, 0.65317284f, 0.64570760f, 0.63818013f, 0.63059115f, 0.62294139f, + 0.61523159f, 0.60746249f, 0.59963485f, 0.59174941f, 0.58380693f, 0.57580819f, + 0.56775395f, 0.55964499f, 0.55148209f, 0.54326604f, 0.53499762f, 0.52667764f, + 0.51830690f, 0.50988620f, 0.50141636f, 0.49289819f, 0.48433252f, 0.47572016f, + 0.46706195f, 0.45835873f, 0.44961133f, 0.44082059f, 0.43198737f, 0.42311251f, + 0.41419687f, 0.40524131f, 0.39624670f, 0.38721389f, 0.37814376f, 0.36903718f, + 0.35989504f, 0.35071820f, 0.34150757f, 0.33226402f, 0.32298845f, 0.31368174f, + 0.30434480f, 0.29497853f, 0.28558383f, 0.27616160f, 0.26671276f, 0.25723821f, + 0.24773886f, 0.23821564f, 0.22866946f, 0.21910124f, 0.20951190f, 0.19990237f, + 0.19027357f, 0.18062644f, 0.17096189f, 0.16128086f, 0.15158430f, 0.14187312f, + 0.13214826f, 0.12241068f, 0.11266129f, 0.10290104f, 0.09313088f, 0.08335174f, + 0.07356456f, 0.06377030f, 0.05396989f, 0.04416428f, 0.03435441f, 0.02454123f, + 0.01472568f, 0.00490872f +}; + +const float short_window_48kHz[480] = +{ + 0.00326538f, 0.00982666f, 0.0163574f, 0.0229187f, 0.0294495f, 0.0359802f, + 0.0425415f, 0.0490723f, 0.055603f, 0.0621338f, 0.0686646f, 0.0751953f, + 0.0817261f, 0.0882568f, 0.0947571f, 0.101288f, 0.107788f, 0.114288f, + 0.120789f, 0.127289f, 0.133759f, 0.140259f, 0.146729f, 0.153198f, + 0.159668f, 0.166138f, 0.172577f, 0.179016f, 0.185455f, 0.191895f, + 0.198303f, 0.204712f, 0.211121f, 0.217499f, 0.223877f, 0.230255f, + 0.236633f, 0.242981f, 0.249329f, 0.255646f, 0.261993f, 0.26828f, + 0.274597f, 0.280884f, 0.28714f, 0.293427f, 0.299652f, 0.305908f, + 0.312134f, 0.318329f, 0.324524f, 0.330719f, 0.336884f, 0.343048f, + 0.349182f, 0.355316f, 0.36142f, 0.367523f, 0.373596f, 0.379669f, + 0.385712f, 0.391724f, 0.397736f, 0.403748f, 0.409729f, 0.41568f, + 0.421631f, 0.427551f, 0.433472f, 0.439362f, 0.445221f, 0.45108f, + 0.456909f, 0.462708f, 0.468506f, 0.474274f, 0.480042f, 0.485748f, + 0.491486f, 0.497162f, 0.502838f, 0.508484f, 0.514099f, 0.519714f, + 0.525299f, 0.530853f, 0.536377f, 0.541901f, 0.547394f, 0.552856f, + 0.558289f, 0.563721f, 0.569092f, 0.574463f, 0.579803f, 0.585144f, + 0.590424f, 0.595703f, 0.600952f, 0.606171f, 0.611359f, 0.616516f, + 0.621674f, 0.62677f, 0.631866f, 0.636932f, 0.641937f, 0.646942f, + 0.651947f, 0.656891f, 0.661804f, 0.666687f, 0.67157f, 0.676392f, + 0.681213f, 0.685974f, 0.690735f, 0.695435f, 0.700134f, 0.704803f, + 0.709412f, 0.71402f, 0.718567f, 0.723114f, 0.727631f, 0.732086f, + 0.736542f, 0.740936f, 0.745331f, 0.749664f, 0.753998f, 0.75827f, + 0.762512f, 0.766754f, 0.770935f, 0.775085f, 0.779205f, 0.783295f, + 0.787354f, 0.791351f, 0.795349f, 0.799286f, 0.803223f, 0.807098f, + 0.810944f, 0.814758f, 0.818512f, 0.822266f, 0.825989f, 0.829651f, + 0.833282f, 0.836884f, 0.840454f, 0.843964f, 0.847473f, 0.850922f, + 0.85434f, 0.857727f, 0.861084f, 0.86438f, 0.867645f, 0.87088f, + 0.874084f, 0.877258f, 0.880371f, 0.883453f, 0.886505f, 0.889526f, + 0.892487f, 0.895416f, 0.898315f, 0.901184f, 0.903992f, 0.906769f, + 0.909515f, 0.912201f, 0.914886f, 0.91748f, 0.920074f, 0.922607f, + 0.92514f, 0.927582f, 0.930023f, 0.932404f, 0.934753f, 0.937042f, + 0.939331f, 0.941559f, 0.943726f, 0.945862f, 0.947968f, 0.950043f, + 0.952057f, 0.954041f, 0.955994f, 0.957886f, 0.959747f, 0.961548f, + 0.963348f, 0.965088f, 0.966766f, 0.968414f, 0.970032f, 0.971588f, + 0.973114f, 0.974609f, 0.976074f, 0.977448f, 0.978821f, 0.980133f, + 0.981415f, 0.982666f, 0.983856f, 0.984985f, 0.986115f, 0.987183f, + 0.98819f, 0.989166f, 0.990112f, 0.990997f, 0.991852f, 0.992676f, + 0.993439f, 0.994171f, 0.994873f, 0.995514f, 0.996094f, 0.996643f, + 0.997162f, 0.99765f, 0.998077f, 0.998444f, 0.99881f, 0.999084f, + 0.999359f, 0.999573f, 0.999725f, 0.999878f, 0.999939f, 0.999969f, + 0.999969f, 0.999939f, 0.999878f, 0.999725f, 0.999573f, 0.999359f, + 0.999084f, 0.99881f, 0.998444f, 0.998077f, 0.99765f, 0.997162f, + 0.996643f, 0.996094f, 0.995514f, 0.994873f, 0.994171f, 0.993439f, + 0.992676f, 0.991852f, 0.990997f, 0.990112f, 0.989166f, 0.98819f, + 0.987183f, 0.986115f, 0.984985f, 0.983856f, 0.982666f, 0.981415f, + 0.980133f, 0.978821f, 0.977448f, 0.976074f, 0.974609f, 0.973114f, + 0.971588f, 0.970032f, 0.968414f, 0.966766f, 0.965088f, 0.963348f, + 0.961548f, 0.959747f, 0.957886f, 0.955994f, 0.954041f, 0.952057f, + 0.950043f, 0.947968f, 0.945862f, 0.943726f, 0.941559f, 0.939331f, + 0.937042f, 0.934753f, 0.932404f, 0.930023f, 0.927582f, 0.92514f, + 0.922607f, 0.920074f, 0.91748f, 0.914886f, 0.912201f, 0.909515f, + 0.906769f, 0.903992f, 0.901184f, 0.898315f, 0.895416f, 0.892487f, + 0.889526f, 0.886505f, 0.883453f, 0.880371f, 0.877258f, 0.874084f, + 0.87088f, 0.867645f, 0.86438f, 0.861084f, 0.857727f, 0.85434f, + 0.850922f, 0.847473f, 0.843964f, 0.840454f, 0.836884f, 0.833282f, + 0.829651f, 0.825989f, 0.822266f, 0.818512f, 0.814758f, 0.810944f, + 0.807098f, 0.803223f, 0.799286f, 0.795349f, 0.791351f, 0.787354f, + 0.783295f, 0.779205f, 0.775085f, 0.770935f, 0.766754f, 0.762512f, + 0.75827f, 0.753998f, 0.749664f, 0.745331f, 0.740936f, 0.736542f, + 0.732086f, 0.727631f, 0.723114f, 0.718567f, 0.71402f, 0.709412f, + 0.704803f, 0.700134f, 0.695435f, 0.690735f, 0.685974f, 0.681213f, + 0.676392f, 0.67157f, 0.666687f, 0.661804f, 0.656891f, 0.651947f, + 0.646942f, 0.641937f, 0.636932f, 0.631866f, 0.62677f, 0.621674f, + 0.616516f, 0.611359f, 0.606171f, 0.600952f, 0.595703f, 0.590424f, + 0.585144f, 0.579803f, 0.574463f, 0.569092f, 0.563721f, 0.558289f, + 0.552856f, 0.547394f, 0.541901f, 0.536377f, 0.530853f, 0.525299f, + 0.519714f, 0.514099f, 0.508484f, 0.502838f, 0.497162f, 0.491486f, + 0.485748f, 0.480042f, 0.474274f, 0.468506f, 0.462708f, 0.456909f, + 0.45108f, 0.445221f, 0.439362f, 0.433472f, 0.427551f, 0.421631f, + 0.41568f, 0.409729f, 0.403748f, 0.397736f, 0.391724f, 0.385712f, + 0.379669f, 0.373596f, 0.367523f, 0.36142f, 0.355316f, 0.349182f, + 0.343048f, 0.336884f, 0.330719f, 0.324524f, 0.318329f, 0.312134f, + 0.305908f, 0.299652f, 0.293427f, 0.28714f, 0.280884f, 0.274597f, + 0.26828f, 0.261993f, 0.255646f, 0.249329f, 0.242981f, 0.236633f, + 0.230255f, 0.223877f, 0.217499f, 0.211121f, 0.204712f, 0.198303f, + 0.191895f, 0.185455f, 0.179016f, 0.172577f, 0.166138f, 0.159668f, + 0.153198f, 0.146729f, 0.140259f, 0.133759f, 0.127289f, 0.120789f, + 0.114288f, 0.107788f, 0.101288f, 0.0947571f, 0.0882568f, 0.0817261f, + 0.0751953f, 0.0686646f, 0.0621338f, 0.055603f, 0.0490723f, 0.0425415f, + 0.0359802f, 0.0294495f, 0.0229187f, 0.0163574f, 0.00982666f, 0.00326538f +}; +const int16_t subf_norm_groups[4][11] = +{ + {0,1,8,9,16,20,24,28,32,36,40}, + {2,3,10,11,17,21,25,29,33,37,41}, + {4,5,12,13,18,22,26,30,34,38,42}, + {6,7,14,15,19,23,27,31,35,39,43} +}; + +const float gain_att[MAX_P_ATT] = +{ + 0.4794745f, 0.5910453f, 0.6647078f, 0.7245839f, 0.7598486f, 0.7912783f, 0.8165831f, 0.8396713f, + 0.8562786f, 0.8716393f, 0.8848335f, 0.8971617f, 0.9061614f, 0.9146075f, 0.9220175f, 0.9290045f, + 0.9344148f, 0.9395265f, 0.9440797f, 0.9484073f, 0.9518549f, 0.9551361f, 0.9581067f, 0.9609474f, + 0.9632704f, 0.9654923f, 0.9675346f, 0.9694900f, 0.9711209f, 0.9726879f, 0.9741332f, 0.9755263f, + 0.9767067f, 0.9778463f, 0.9789108f, 0.9799438f, 0.9808353f, 0.9816967f, 0.9825032f, 0.9832868f +}; + +const Word16 stab_trans_fx[10] = /* Q15 */ +{ + 16384, 11381, 7232, 4292, 2433, + 1341, 728, 391, 209, 112 +}; +const float stab_trans[L_STAB_TBL] = +{ + 0.500000f, 0.347332f, 0.220704f, 0.130976f, 0.074252f, + 0.040937f, 0.022211f, 0.011944f, 0.006392f, 0.003412f +}; + +const float env_stab_tp[2][2] = +{ + {0.999f, 0.5f}, + {0.001f, 0.5f} +}; + +const float att_step[NB_G] = { 4.0000000f, 2.0000000f, 1.3333333f, 1.0000000f}; + +const Word32 table_logcum_fx[563] = +{ + 0, 0, 0, 65536, 169408, 300480, 452650, 622058, 806041, + 1002649, 1210393, 1428099, 1654816, 1889761, 2132272, 2381791, 2637833, + 2899977, 3167853, 3441134, 3719526, 4002767, 4290623, 4582876, 4879332, + 5179812, 5484152, 5792200, 6103816, 6418871, 6737244, 7058822, 7383500, + 7711180, 8041769, 8375181, 8711333, 9050150, 9391557, 9735485, 10081869, + 10430647, 10781759, 11135150, 11490766, 11848556, 12208469, 12570461, 12934487, + 13300503, 13668469, 14038345, 14410092, 14783676, 15159061, 15536214, 15915101, + 16295692, 16677956, 17061866, 17447390, 17834504, 18223180, 18613394, 19005122, + 19398338, 19793020, 20189146, 20586692, 20985640, 21385968, 21787658, 22190686, + 22595040, 23000696, 23407638, 23815850, 24225314, 24636014, 25047934, 25461060, + 25875374, 26290862, 26707510, 27125304, 27544232, 27964278, 28385428, 28807674, + 29231000, 29655392, 30080844, 30507338, 30934866, 31363416, 31792978, 32223540, + 32655092, 33087624, 33521126, 33955588, 34391000, 34827352, 35264636, 35702840, + 36141960, 36581988, 37022908, 37464716, 37907404, 38350964, 38795388, 39240668, + 39686792, 40133760, 40581560, 41030188, 41479632, 41929888, 42380948, 42832808, + 43285456, 43738892, 44193104, 44648088, 45103840, 45560348, 46017612, 46475624, + 46934376, 47393864, 47854080, 48315024, 48776684, 49239060, 49702144, 50165928, + 50630412, 51095588, 51561452, 52028000, 52495224, 52963124, 53431688, 53900916, + 54370808, 54841348, 55312540, 55784380, 56256856, 56729972, 57203720, 57678096, + 58153096, 58628716, 59104952, 59581800, 60059256, 60537316, 61015980, 61495236, + 61975084, 62455524, 62936548, 63418156, 63900340, 64383100, 64866428, 65350328, + 65834792, 66319816, 66805396, 67291536, 67778224, 68265456, 68753240, 69241560, + 69730424, 70219816, 70709744, 71200208, 71691192, 72182704, 72674736, 73167280, + 73660344, 74153920, 74648008, 75142600, 75637704, 76133296, 76629400, 77125992, + 77623080, 78120656, 78618728, 79117280, 79616320, 80115840, 80615832, 81116312, + 81617256, 82118680, 82620568, 83122920, 83625744, 84129024, 84632768, 85136968, + 85641624, 86146728, 86652288, 87158304, 87664760, 88171664, 88679008, 89186792, + 89695016, 90203680, 90712776, 91222304, 91732256, 92242648, 92753464, 93264704, + 93776368, 94288448, 94800952, 95313872, 95827208, 96340960, 96855120, 97369696, + 97884672, 98400064, 98915856, 99432048, 99948648, 100465640, 100983040, 101500832, + 102019016, 102537592, 103056568, 103575928, 104095672, 104615808, 105136328, 105657232, + 106178520, 106700184, 107222232, 107744656, 108267456, 108790632, 109314176, 109838096, + 110362384, 110887040, 111412064, 111937448, 112463208, 112989320, 113515800, 114042640, + 114569832, 115097392, 115625304, 116153568, 116682184, 117211160, 117740480, 118270152, + 118800168, 119330536, 119861248, 120392312, 120923712, 121455448, 121987536, 122519960, + 123052720, 123585816, 124119248, 124653016, 125187120, 125721552, 126256320, 126791416, + 127326840, 127862592, 128398664, 128935072, 129471800, 130008856, 130546224, 131083920, + 131621936, 132160272, 132698920, 133237888, 133777176, 134316768, 134856688, 135396912, + 135937440, 136478288, 137019440, 137560912, 138102688, 138644768, 139187152, 139729840, + 140272832, 140816128, 141359712, 141903616, 142447808, 142992304, 143537104, 144082192, + 144627568, 145173248, 145719232, 146265504, 146812064, 147358912, 147906048, 148453488, + 149001200, 149549216, 150097504, 150646096, 151194960, 151744112, 152293536, 152843264, + 153393264, 153943536, 154494096, 155044944, 155596064, 156147456, 156699120, 157251072, + 157803296, 158355792, 158908560, 159461616, 160014928, 160568512, 161122368, 161676496, + 162230896, 162785568, 163340496, 163895696, 164451168, 165006896, 165562896, 166119152, + 166675664, 167232448, 167789504, 168346816, 168904368, 169462208, 170020288, 170578624, + 171137232, 171696080, 172255200, 172814560, 173374192, 173934064, 174494192, 175054576, + 175615216, 176176096, 176737232, 177298608, 177860256, 178422128, 178984256, 179546640, + 180109264, 180672128, 181235248, 181798608, 182362208, 182926064, 183490144, 184054480, + 184619056, 185183872, 185748928, 186314224, 186879760, 187445520, 188011536, 188577776, + 189144272, 189710992, 190277936, 190845136, 191412560, 191980208, 192548112, 193116224, + 193684592, 194253168, 194821984, 195391040, 195960320, 196529824, 197099568, 197669520, + 198239712, 198810144, 199380784, 199951648, 200522752, 201094080, 201665616, 202237392, + 202809376, 203381600, 203954032, 204526688, 205099568, 205672672, 206246000, 206819536, + 207393296, 207967280, 208541472, 209115888, 209690528, 210265376, 210840432, 211415712, + 211991216, 212566912, 213142848, 213718976, 214295328, 214871888, 215448672, 216025664, + 216602864, 217180272, 217757888, 218335712, 218913760, 219492000, 220070464, 220649120, + 221228000, 221807072, 222386368, 222965856, 223545552, 224125456, 224705568, 225285872, + 225866400, 226447120, 227028032, 227609168, 228190496, 228772016, 229353760, 229935680, + 230517824, 231100160, 231682688, 232265424, 232848352, 233431472, 234014800, 234598336, + 235182048, 235765968, 236350080, 236934400, 237518896, 238103600, 238688496, 239273600, + 239858880, 240444352, 241030032, 241615888, 242201952, 242788192, 243374640, 243961264, + 244548096, 245135104, 245722304, 246309696, 246897280, 247485056, 248073008, 248661152, + 249249488, 249838016, 250426720, 251015616, 251604704, 252193968, 252783424, 253373056, + 253962880, 254552896, 255143088, 255733472, 256324032, 256914768, 257505696, 258096800, + 258688096, 259279568, 259871216, 260463056, 261055056, 261647264, 262239632, 262832192, + 263424928, 264017840, 264610928, 265204192, 265797632, 266391264, 266985072, 267579040, + 268173200, 268767520, 269362048, 269956736, 270551584, 271146624, 271741824, 272337216, + 272932768, 273528480, 274124384, 274720480, 275316704, 275913120, 276509728, 277106496, + 277703424, 278300544, 278897824, 279495264, 280092896, 280690688, 281288640, 281886752, + 282485056, 283083520 +}; +const Word32 pow_getbitsfrompulses_fx[16] = /*Q21 */ +{ + 2097152, 2190001, 2286961, 2388214, 2493948, 2604365, 2719671, 2840081, + 2965822, 3097129, 3234251, 3377442, 3526976, 3683128, 3846194, 4016480 +}; +const Word16 DDP_fx[4] = { 3, 0, 1, 2 }; + +const float DDP[4] = { 3.0f, 0.0f, 1.0f, 2.0f }; + + +const int16_t step_tcq[8][STATES] = { {0,4}, {0,4}, {1,5}, {1,5}, {2,6}, {2,6}, {3,7}, {3,7} }; +const int16_t denc[8][STATES] = { {0,2}, {2,0}, {1,3}, {3,1}, {2,0}, {0,2}, {3,1}, {1,3} }; /* enc trellis */ +const int16_t ddec[8][STATES] = { {0,2}, {1,3}, {2,0}, {3,1}, {2,0}, {3,1}, {0,2}, {1,3} }; /* dec trellis */ + + +const int16_t step_LSB[STATES_LSB][2] = { {0,1}, {2,3}, {0,1}, {2,3} }; +const int16_t denc_LSB[STATES_LSB][2] = { {0,3}, {2,1}, {3,0}, {1,2} }; +const int16_t dqnt_LSB[STATES_LSB][4] = { {0,8,1,8}, {0,8,1,8}, {8,0,8,1}, {8,0,8,1} }; + +const int16_t dstep_LSB[4][2] = { {0,2}, {0,2}, {1,3}, {1,3} }; +const int16_t ddec_LSB[4][2] = { {0,3}, {3,0}, {2,1}, {1,2} }; + + +const int16_t nextstate[STATES][2] = {{0, 1}, {2, 3}, {4, 5}, {6, 7}, {0, 1}, {2, 3}, {4, 5}, {6, 7}};/*current state points to next two states */ + +/*------------------------------------------------------------------------------* + * PVQ tables + *------------------------------------------------------------------------------*/ + +const int16_t fine_gain_bits[8] = {0, 0, 0, 1, 2, 2, 4, 5}; +const float finegain_1[2] = {-0.7448924f, 0.7718827f}; +const float finegain_2[4] = {-1.0847910f, -0.3616628f, 0.3668007f, 1.1455675f}; +const float finegain_3[8] = {-1.0000000f, -0.7142857f, -0.4285714f, -0.1428571f, 0.1428571f, 0.4285714f, 0.7142857f, 1.0000000f}; +const float finegain_4[16] = {-1.3234321f, -1.1164439f, -0.9153915f, -0.7248241f, -0.5453916f, -0.3807825f, -0.2259278f, -0.0836715f, 0.0576803f, 0.1999166f, 0.3715899f, 0.5541582f, 0.7598588f, 0.9764980f, 1.2082281f, 1.4567725f}; +const float finegain_5[32] = {-1.3099370f, -1.1532731f, -0.9939113f, -0.8627403f, -0.7693628f, -0.6901322f, -0.6188556f, -0.5438313f, -0.4899869f, -0.4145289f, -0.3440915f, -0.2936875f, -0.2241453f, -0.1636186f, -0.1052746f, -0.0292431f, 0.0273763f, 0.0848355f, 0.1443042f, 0.2095194f, 0.2794882f, 0.3366661f, 0.4131591f, 0.4740591f, 0.5545165f, 0.6196313f, 0.6719442f, 0.7650533f, 0.9012053f, 1.0432675f, 1.2264170f, 1.5085750f}; +const float * const finegain[5] = { finegain_1, finegain_2, finegain_3, finegain_4, finegain_5 }; + +/* getk(16,8)+ maxqKIind=40 --> KMAX=127 needs support , 32bit- saturates at dim=6 + getK(21,9)+ maxqKInd=64 --> KMAX=512, needs support , 32bit saturates at dim=5 + getK(TBD,TBD)+ maxqKInd=TBD --> KMAX=1024, needs support , 32bit saturates at dim~=4 + getK(TBD,TBD)+ maxqKInd=TBD --> KMAX=32767, needs support, 32bit saturates at dim =3 +*/ +const uint8_t hBitsMinus1_N01[2] = {1, 7}; + +const uint8_t hBitsMinus1_N02[65]= +{ + 64, 15, 23, 28, 31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, + 47, 48, 49, 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, 57, 58, 59, + 60, 61, 62, 63, 63, 64, 65, 65, 67, 68, 69, 69, 70, 71, 72, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 80, 81, 82, 83, 84, 85, 86, 87, + 87 +}; + +const uint8_t hBitsMinus1_N03[65]= +{ + 64, 20, 33, 41, 48, 53, 57, 61, 64, 66, 69, 71, 73, 75, 76, 78, + 80, 81, 82, 83, 85, 86, 88, 90, 92, 93, 95, 96, 98, 99, 100, 102, + 104, 106, 108, 110, 111, 113, 114, 115, 118, 120, 122, 123, 125, 127, 128, 129, + 131, 133, 135, 137, 139, 141, 142, 144, 145, 146, 149, 151, 153, 155, 157, 158, + 160 +}; + +const uint8_t hBitsMinus1_N04[65]= +{ + 64, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94, 97, 100, 102, 105, + 107, 109, 111, 113, 115, 116, 119, 122, 125, 127, 130, 132, 134, 136, 138, 141, + 144, 147, 150, 152, 154, 156, 158, 160, 164, 167, 170, 173, 175, 177, 180, 182, + 184, 187, 190, 193, 196, 199, 201, 203, 205, 207, 211, 214, 217, 220, 222, 225, + 227 +}; + +const uint8_t hBitsMinus1_N05[54]= +{ + 53, 26, 45, 59, 70, 79, 87, 94, 100, 105, 110, 114, 118, 122, 125, 128, + 131, 134, 136, 139, 141, 144, 148, 152, 155, 158, 161, 164, 167, 170, 172, 176, + 181, 184, 188, 191, 194, 197, 200, 202, 207, 211, 215, 219, 222, 225, 228, 231, + 233, 238, 242, 246, 250, 253 +}; + +const uint8_t hBitsMinus1_N06[42]= +{ + 41, 28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149, + 153, 156, 159, 162, 165, 168, 173, 178, 183, 187, 191, 194, 198, 201, 204, 209, + 214, 219, 224, 228, 231, 235, 238, 241, 247, 253 +}; + +const uint8_t hBitsMinus1_N07[34]= +{ + 33, 30, 52, 70, 85, 98, 109, 118, 126, 134, 141, 147, 153, 158, 163, 168, + 172, 176, 180, 184, 188, 191, 197, 203, 208, 213, 218, 222, 226, 230, 233, 240, + 246, 252 +}; + +const uint8_t hBitsMinus1_N08[29]= +{ + 28, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180, 185, + 190, 195, 200, 204, 208, 212, 219, 226, 232, 238, 243, 248, 253 +}; + +const uint8_t hBitsMinus1_N09[25]= +{ + 24, 33, 58, 79, 97, 112, 125, 137, 148, 157, 166, 174, 182, 189, 195, 201, + 207, 212, 217, 222, 227, 231, 240, 247, 254 +}; + +const uint8_t hBitsMinus1_N10[22]= +{ + 21, 34, 61, 83, 101, 118, 132, 145, 157, 167, 177, 186, 194, 202, 209, 216, + 222, 228, 234, 239, 245, 250 +}; + +const uint8_t hBitsMinus1_N11[19]= +{ + 18, 35, 63, 86, 106, 123, 139, 152, 165, 176, 187, 197, 206, 214, 222, 230, + 237, 243, 250 +}; + +const uint8_t hBitsMinus1_N12[17]= +{ + 16, 36, 65, 89, 110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, + 250 +}; + +const uint8_t hBitsMinus1_N13[16]= +{ + 15, 37, 67, 92, 113, 133, 150, 165, 180, 193, 205, 216, 227, 237, 246, 254, +}; + +const uint8_t hBitsMinus1_N14[14]= +{ + 13, 38, 68, 94, 117, 137, 155, 171, 186, 200, 213, 225, 236, 247 +}; + +const uint8_t hBitsMinus1_N15[13]= +{ + 12, 39, 70, 97, 120, 141, 160, 177, 193, 207, 221, 233, 245 +}; + +const uint8_t hBitsMinus1_N16[13]= +{ + 12, 39, 71, 99, 123, 144, 164, 182, 198, 214, 228, 241, 253 +}; + +const uint8_t hBitsMinus1_N17[12]= +{ + 11, 40, 73, 101, 126, 148, 168, 187, 204, 220, 234, 248 +}; + +const uint8_t hBitsMinus1_N18[12]= +{ + 11, 41, 74, 103, 128, 151, 172, 191, 209, 225, 241, 255 +}; + +const uint8_t hBitsMinus1_N19[11]= +{ + 10, 41, 75, 105, 131, 154, 176, 196, 214, 231, 247 +}; + +const uint8_t hBitsMinus1_N20[11]= +{ + 10, 42, 77, 107, 133, 157, 179, 200, 219, 236, 253 +}; + +const uint8_t hBitsMinus1_N21[10]= +{ + 9, 43, 78, 108, 135, 160, 183, 204, 223, 241 +}; + +const uint8_t hBitsMinus1_N22[10]= +{ + 9, 43, 79, 110, 138, 163, 186, 207, 227, 246 +}; + +const uint8_t hBitsMinus1_N23[10]= +{ + 9, 44, 80, 111, 140, 165, 189, 211, 231, 250 +}; + +const uint8_t hBitsMinus1_N24[10]= +{ + 9, 44, 81, 113, 142, 168, 192, 214, 235, 255 +}; + +const uint8_t hBitsMinus1_N25[9]= +{ + 8, 45, 82, 114, 143, 170, 195, 217, 239 +}; + +const uint8_t hBitsMinus1_N26[9]= +{ + 8, 45, 83, 116, 145, 172, 197, 221, 242 +}; + +const uint8_t hBitsMinus1_N27[9]= +{ + 8, 46, 84, 117, 147, 175, 200, 224, 246 +}; + +const uint8_t hBitsMinus1_N28[9]= +{ + 8, 46, 84, 118, 149, 177, 202, 227, 249 +}; +const uint8_t hBitsMinus1_N29[9]= +{ + 8, 46, 85, 119, 150, 179, 205, 229, 252 +}; +const uint8_t hBitsMinus1_N30[8]= +{ + 7, 47, 86, 121, 152, 181, 207, 232 +}; +const uint8_t hBitsMinus1_N31[8]= +{ + 7, 47, 87, 122, 153, 182, 209, 235 +}; +const uint8_t hBitsMinus1_N32[8]= +{ + 7, 47, 87, 123, 155, 184, 212, 237 +}; +const uint8_t hBitsMinus1_N33[8]= +{ + 7, 48, 88, 124, 156, 186, 214, 240 +}; +const uint8_t hBitsMinus1_N34[8]= +{ + 7, 48, 89, 125, 158, 188, 216, 242 +}; +const uint8_t hBitsMinus1_N35[8]= +{ + 7, 49, 90, 126, 159, 189, 218, 245 +}; +const uint8_t hBitsMinus1_N36[8]= +{ + 7, 49, 90, 127, 160, 191, 220, 247 +}; +const uint8_t hBitsMinus1_N37[8]= +{ + 7, 49, 91, 128, 162, 193, 222, 249 +}; +const uint8_t hBitsMinus1_N38[8]= +{ + 7, 49, 91, 129, 163, 194, 224, 251 +}; +const uint8_t hBitsMinus1_N39[8]= +{ + 7, 50, 92, 130, 164, 196, 225, 253 +}; +const uint8_t hBitsMinus1_N40[8]= +{ + 7, 50, 93, 131, 165, 197, 227, 255 +}; +const uint8_t hBitsMinus1_N41[7]= +{ + 6, 50, 93, 131, 166, 199, 229 +}; +const uint8_t hBitsMinus1_N42[7]= +{ + 6, 51, 94, 132, 167, 200, 230 +}; +const uint8_t hBitsMinus1_N43[7]= +{ + 6, 51, 94, 133, 168, 201, 232 +}; +const uint8_t hBitsMinus1_N44[7]= +{ + 6, 51, 95, 134, 170, 203, 234 +}; +const uint8_t hBitsMinus1_N45[7]= +{ + 6, 51, 95, 135, 171, 204, 235 +}; +const uint8_t hBitsMinus1_N46[7]= +{ + 6, 52, 96, 135, 172, 205, 237 +}; +const uint8_t hBitsMinus1_N47[7]= +{ + 6, 52, 96, 136, 173, 206, 238 +}; +const uint8_t hBitsMinus1_N48[7]= +{ + 6, 52, 97, 137, 174, 208, 240 +}; +const uint8_t hBitsMinus1_N49[7]= +{ + 6, 52, 97, 138, 175, 209, 241 +}; +const uint8_t hBitsMinus1_N50[7]= +{ + 6, 53, 98, 138, 175, 210, 243 +}; +const uint8_t hBitsMinus1_N51[7]= +{ + 6, 53, 98, 139, 176, 211, 244 +}; +const uint8_t hBitsMinus1_N52[7]= +{ + 6, 53, 99, 140, 177, 212, 245 +}; +const uint8_t hBitsMinus1_N53[7]= +{ + 6, 53, 99, 140, 178, 213, 247 +}; +const uint8_t hBitsMinus1_N54[7]= +{ + 6, 54, 100, 141, 179, 214, 248 +}; +const uint8_t hBitsMinus1_N55[7]= +{ + 6, 54, 100, 142, 180, 216, 249 +}; +const uint8_t hBitsMinus1_N56[7]= +{ + 6, 54, 100, 142, 181, 217, 250 +}; +const uint8_t hBitsMinus1_N57[7]= +{ + 6, 54, 101, 143, 181, 218, 252 +}; +const uint8_t hBitsMinus1_N58[7]= +{ + 6, 54, 101, 143, 182, 219, 253 +}; +const uint8_t hBitsMinus1_N59[7]= +{ + 6, 55, 102, 144, 183, 220, 254 +}; +const uint8_t hBitsMinus1_N60[7]= +{ + 6, 55, 102, 145, 184, 221, 255 +}; +const uint8_t hBitsMinus1_N61[6]= +{ + 5, 55, 102, 145, 185, 221 +}; +const uint8_t hBitsMinus1_N62[6]= +{ + 5, 55, 103, 146, 185, 222 +}; +const uint8_t hBitsMinus1_N63[6]= +{ + 5, 55, 103, 146, 186, 223 +}; +const uint8_t hBitsMinus1_N64[6]= +{ + 5, 55, 103, 147, 187, 224 +}; +const int16_t dsHighDiracsTab[PVQ_MAX_BAND_SIZE - DS_INDEX_LINEAR_END ] = +{ + 23, 25, 27, 29, 31, 33, 35, 37, 39, + 43, 47, 51, 55, 59, 63, 67, 71, 75, + 83, 91, 99, 107, 115, 123, 131, 139, 147, + 163, 179, 195, 211, 227, 243, 259, 275, 291, + 323, 355, 387, 419, 451, 483, 512 +}; + +const uint32_t intLimCDivInvDQ31[67+1] = +{ + 0x00000000, 0x80000000, 0x40000000, 0x2aaaaaab, 0x20000000, 0x1999999a, 0x15555556, 0x12492493, + 0x10000000, 0x0e38e38f, 0x0ccccccd, 0x0ba2e8bb, 0x0aaaaaab, 0x09d89d8a, 0x0924924a, 0x08888889, + 0x08000000, 0x07878788, 0x071c71c8, 0x06bca1b0, 0x06666667, 0x06186187, 0x05d1745e, 0x0590b217, + 0x05555556, 0x051eb852, 0x04ec4ec5, 0x04bda130, 0x04924925, 0x0469ee59, 0x04444445, 0x04210843, + 0x04000000, 0x03e0f83f, 0x03c3c3c4, 0x03a83a84, 0x038e38e4, 0x03759f23, 0x035e50d8, 0x03483484, + 0x03333334, 0x031f3832, 0x030c30c4, 0x02fa0be9, 0x02e8ba2f, 0x02d82d83, 0x02c8590c, 0x02b93106, + 0x02aaaaab, 0x029cbc15, 0x028f5c29, 0x02828283, 0x02762763, 0x026a43a0, 0x025ed098, 0x0253c826, + 0x02492493, 0x023ee090, 0x0234f72d, 0x022b63cc, 0x02222223, 0x02192e2a, 0x02108422, 0x02082083, + 0x02000000, 0x01f81f82, 0x01f07c20, 0x01e9131b +}; + +const uint8_t obtainEnergyQuantizerDensity_f[57] = + { + 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 4, 4, 4, + 4, 4, 4, 6, 6, 6, 6, 8, + 8, 8, 10,10,12,12,14,14, + 16,18,20,20,22,24,26,30, + 32,34,38,42,46,50,54,58, + 64,70,76,82,90,98,108,118, 128 +}; + + +/* (char)ceil(log2(hBitsN[N][0])) - 2) */ +const uint8_t f_log2_n[ PVQ_MAX_BAND_SIZE + 1] = +{ + 0xff, 0xff, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01}; + +const uint8_t * const hBitsN[ PVQ_MAX_BAND_SIZE + 1 ]= +{ +f_log2_n/*N=0*/, hBitsMinus1_N01, hBitsMinus1_N02, hBitsMinus1_N03, hBitsMinus1_N04, +hBitsMinus1_N05, hBitsMinus1_N06, hBitsMinus1_N07, hBitsMinus1_N08, hBitsMinus1_N09, +hBitsMinus1_N10, hBitsMinus1_N11, hBitsMinus1_N12, hBitsMinus1_N13, hBitsMinus1_N14, +hBitsMinus1_N15, hBitsMinus1_N16, hBitsMinus1_N17, hBitsMinus1_N18, hBitsMinus1_N19, +hBitsMinus1_N20, hBitsMinus1_N21, hBitsMinus1_N22, hBitsMinus1_N23, hBitsMinus1_N24, +hBitsMinus1_N25, hBitsMinus1_N26, hBitsMinus1_N27, hBitsMinus1_N28, hBitsMinus1_N29, +hBitsMinus1_N30, hBitsMinus1_N31, hBitsMinus1_N32, hBitsMinus1_N33, hBitsMinus1_N34, +hBitsMinus1_N35, hBitsMinus1_N36, hBitsMinus1_N37, hBitsMinus1_N38, hBitsMinus1_N39, +hBitsMinus1_N40, hBitsMinus1_N41, hBitsMinus1_N42, hBitsMinus1_N43, hBitsMinus1_N44, +hBitsMinus1_N45, hBitsMinus1_N46, hBitsMinus1_N47, hBitsMinus1_N48, hBitsMinus1_N49, +hBitsMinus1_N50, hBitsMinus1_N51, hBitsMinus1_N52, hBitsMinus1_N53, hBitsMinus1_N54, +hBitsMinus1_N55, hBitsMinus1_N56, hBitsMinus1_N57, hBitsMinus1_N58, hBitsMinus1_N59, +hBitsMinus1_N60, hBitsMinus1_N61, hBitsMinus1_N62, hBitsMinus1_N63, hBitsMinus1_N64, +}; + +const int16_t lim_neg_inv_tbl_fx[MAX_SPLITS + 1 ] = +{ /* 1 = optimized inv_tbl_fx constant for div by 1, Q15 */ + /* 2-10 = negated inv_tbl_fx Q15*/ + 0, + -32768, -16384, -10923, -8192, -6554, + -5462, -4681, -4096, -3641, -3277 +}; + +const int16_t fg_inv_tbl_fx [HQ_MAX_BAND_LEN/8 + 1 ] = +{ /* i/8 , slice of inv_tbl_fx , Q15 */ + 0, + 4096, 2048, 1366, 1024, 820, 683, + 586, 512, 456, 410, 373, 342 +}; + + +const uint32_t exactdivodd[ODD_DIV_SIZE] = +{ + /* exactdivodd[0]=1/1, exactdivodd[1]=1/3, exactdivodd[n]=1/(2*n+1), exactdivodd[47]=1/95 ) */ + 1U, 2863311531U, 3435973837U, 3067833783U, 954437177U, 3123612579U, 3303820997U, 4008636143U, + 4042322161U, 678152731U, 1022611261U, 3921491879U, 3264175145U, 1749801491U, 1332920885U, 3186588639U, + 1041204193U, 2331553675U, 2437684141U, 2532929431U, 3247414297U, 799063683U, 2767867813U, 1736263375U, + 438261969U, 4210752251U, 2350076445U, 1483715975U, 3089362441U, 2693454067U, 3238827797U, 3204181951U, + 3237744577U, 128207979U, 2738819725U, 3811027319U, 3353604601U, 2519714147U, 1059797125U, 1631000239U, + 2014922929U, 724452315U, 4244438269U, 1875962727U, 4198451177U, 3539808211U, 1062196213U, 3571604383U +}; + +const int16_t gain_cb_size[MAX_GAIN_BITS] = {2, 4, 8, 16, 32}; + +const int16_t inner_frame_tbl[4] = {L_FRAME8k, L_FRAME16k, L_FRAME32k, L_FRAME48k}; /* corresponds to NB, WB, SWB, FB */ + +const int16_t l_spec_tbl[4] = {L_SPEC8k, L_SPEC16k, L_SPEC32k, L_SPEC48k}; /* corresponds to NB, WB, SWB, FB */ +const int16_t l_spec_ext_tbl[4] = {0, L_SPEC16k_EXT, L_SPEC32k_EXT, L_SPEC48k_EXT}; /* corresponds to NB, WB, SWB, FB */ + +/*------------------------------------------------------------------------------* + * LR-MDCT tables + *------------------------------------------------------------------------------*/ + +/* subband width tables */ + +/* NB short win: 7200/8000/9600, 13200/16400/24400 */ +const int16_t band_width_40_4_6_0_0_0[4] = { 6, 8, 11, 15 }; +const int16_t band_width_40_5_6_0_0_0[5] = { 6, 7, 7, 9, 11 }; + +/* NB long win: 7200, 8000, 9600, 13200, 16400 */ +const int16_t band_width_160_13_6_2_0_0[13] = { 6, 6, 6, 6, 7, 8, 9, 10, 13, 15, 19, 24, 31 }; +const int16_t band_width_160_14_6_3_0_0[14] = { 6, 6, 6, 6, 6, 7, 8, 9, 10, 12, 15, 18, 22, 29 }; +const int16_t band_width_160_17_6_3_0_0[17] = { 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 9, 10, 11, 13, 15, 17, 19 }; +const int16_t band_width_160_18_6_4_0_0[18] = { 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 9, 10, 11, 12, 14, 15, 17 }; + +/* WB short win: 13200/16400/24400 */ +const int16_t band_width_80_7_6_0_0_0[7] = { 6, 7, 8, 10, 12, 16, 21 }; + +/* WB long win: 13200, 16400 */ +const int16_t band_width_320_18_6_3_0_0[18] = { 6, 6, 6, 6, 6, 7, 7, 8, 10, 11, 13, 16, 19, 24, 30, 37, 47, 61 }; +const int16_t band_width_320_20_6_3_0_0[20] = { 6, 6, 6, 6, 6, 6, 7, 8, 8, 9, 11, 12, 14, 17, 20, 23, 28, 34, 42, 51 }; + +/* SWB short win: 13200, 16400 */ +const int16_t band_width_142_8_8_0_0_0[8] = {7,8,10,11,15,21,29,41}; +const int16_t band_width_160_8_8_0_0_0[8] = { 8, 9, 11,13,17,23,32,47}; + +/* SWB long win: 13200, 16400 */ +const int16_t band_width_568_22_6_2_0_0[22] = { 6, 6, 6, 6, 6, 6, 7, 8, 9, 10, 11, 13, 16, 19, 23, 28, 34, 42, 55, 68, 84, 105}; +const int16_t band_width_640_24_6_4_0_0[24] = { 6, 6, 6, 6, 6, 6, 7,7,8,9,10,11,13,15,18,21,26,32,39,48,59, 74,92,115}; + +/* LR-MDCT: NB configuration tables */ +const Xcore_Config xcore_config_8kHz_007200bps_long = { 13, L_FRAME8k, band_width_160_13_6_2_0_0, 536870912L, 24576, 13107, 2, 2, 0, 0.0f, 0.40f, 0.13f, 1.2f, 0.32f }; +const Xcore_Config xcore_config_8kHz_008000bps_long = { 14, L_FRAME8k, band_width_160_14_6_3_0_0, 536870912L, 24576, 13107, 2, 2, 0, 0.0f, 0.40f, 0.13f, 1.2f, 0.32f }; +const Xcore_Config xcore_config_8kHz_013200bps_long = { 17, L_FRAME8k, band_width_160_17_6_3_0_0, 429496730L, 24576, 13107, 2, 4, 2, 12.0f, 0.40f, 0.13f, 1.2f, 0.32f }; +const Xcore_Config xcore_config_8kHz_016400bps_long = { 18, L_FRAME8k, band_width_160_18_6_4_0_0, 322122547L, 24576, 13107, 2, 2, 0, 0.0f, 0.40f, 0.13f, 1.2f, 0.32f }; + +const Xcore_Config xcore_config_8kHz_007200bps_short = { 4, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_4_6_0_0_0, 966367642L, 24576, 13107, 2, 2, 0, 0.0f, 0.30f, 0.09f, 1.2f, 0.32f }; +const Xcore_Config xcore_config_8kHz_008000bps_short = { 4, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_4_6_0_0_0, 1181116006L, 24576, 13107, 2, 4, 0, 0.0f, 0.30f, 0.09f, 1.2f, 0.32f }; +const Xcore_Config xcore_config_8kHz_013200bps_short = { 5, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_5_6_0_0_0, 751619276L, 24576, 11469, 2, 4, 0, 0.0f, 0.70f, 0.11f, 1.2f, 0.32f }; +const Xcore_Config xcore_config_8kHz_016400bps_short = { 5, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_5_6_0_0_0, 536870912L, 24576, 11469, 2, 6, 0, 0.0f, 0.90f, 0.11f, 1.2f, 0.32f }; + +/* LR-MDCT: WB configuration tables */ +const Xcore_Config xcore_config_16kHz_013200bps_long = { 18, L_FRAME16k, band_width_320_18_6_3_0_0, 429496730L, 24576, 13106, 2, 6, 3, 12.0f, 0.40f, 0.12f, 1.1f, 0.32f }; +const Xcore_Config xcore_config_16kHz_016400bps_long = { 20, L_FRAME16k, band_width_320_20_6_3_0_0, 429496730L, 24576, 13106, 2, 6, 3, 12.0f, 0.40f, 0.12f, 1.2f, 0.32f }; + +const Xcore_Config xcore_config_16kHz_013200bps_short = { 7, L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, band_width_80_7_6_0_0_0, 966367642L, 24576, 9830, 2, 4, 0, 0.0f, 0.30f, 0.13f, 1.1f, 0.32f }; +const Xcore_Config xcore_config_16kHz_016400bps_short = { 7, L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, band_width_80_7_6_0_0_0, 966367642L, 24576, 11468, 2, 8, 0, 0.0f, 0.30f, 0.13f, 1.2f, 0.32f }; + +/* LR-MDCT: SWB configuration tables */ +const Xcore_Config xcore_config_32kHz_013200bps_long = { 22, 568, band_width_568_22_6_2_0_0, 322122547L, 24576, 6554, 2, 4, 5, 14.0f, 0.40f, 0.13f, 1.2f, 0.26f }; +const Xcore_Config xcore_config_32kHz_016400bps_long = { 24, 640, band_width_640_24_6_4_0_0, 322122547L, 24576, 8192, 2, 4, 5, 14.0f, 0.40f, 0.13f, 1.2f, 0.26f }; +const Xcore_Config xcore_config_32kHz_013200bps_short = { 8, 568 / NUM_TIME_SWITCHING_BLOCKS, band_width_142_8_8_0_0_0, 1610612736L, 24576, 13107, 2, 4, 0, 0.0f, 0.50f, 0.11f, 1.2f, 0.48f }; +const Xcore_Config xcore_config_32kHz_016400bps_short = { 8, 640 / NUM_TIME_SWITCHING_BLOCKS, band_width_160_8_8_0_0_0, 644245094L, 24576, 8192, 2, 4, 0, 0.0f, 0.30f, 0.13f, 1.2f, 0.32f }; + +/* bandwidths */ +const int16_t Nb[ NB_SFM] = +{ + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16, 16, 16, + 16, 16, 16, 16, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 32, 32, 32, 32, 32, 32, 32, 32 +}; + +/* log2(Nb) to calculate minimum bits for one pulse in PVQ */ +const int16_t LNb[ NB_SFM] = +{ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5 +}; + + +/*------------------------------------------------------------------------------* + * GSC tables + *------------------------------------------------------------------------------*/ + +const int16_t gsc_sfm_start[MBANDS_GN] = {0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240}; + +const int16_t gsc_sfm_end[MBANDS_GN] = {16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256}; + +const int16_t gsc_sfm_size[MBANDS_GN] = {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}; + +const float sm_table[] = +{ + 1.0f, 0.9804f, 0.9607f, 0.9411f, 0.9215f, 0.902f, 0.8825f, 0.863f, + 0.8436f, 0.8242f, 0.8049f, 0.7857f, 0.7666f, 0.7475f, 0.7286f, 0.7097f, 0.691f, 0.6724f, + 0.6539f, 0.6355f, 0.6173f, 0.5993f, 0.5813f, 0.5636f, 0.546f, 0.5286f, 0.5114f, 0.4943f, + 0.4775f, 0.4609f, 0.4444f, 0.4282f, 0.4122f, 0.3964f, 0.3809f, 0.3656f, 0.3506f, 0.3357f, + 0.3212f, 0.3069f, 0.2929f, 0.2791f, 0.2657f, 0.2525f, 0.2396f, 0.227f, 0.2147f, 0.2027f, + 0.191f, 0.1796f, 0.1685f, 0.1578f, 0.1474f, 0.1373f, 0.1275f, 0.1181f, 0.109f, 0.1003f, + 0.0919f, 0.0838f, 0.0761f, 0.0688f, 0.0618f, 0.0552f, 0.0489f, 0.0431f, 0.0375f, 0.0324f, + 0.0276f, 0.0232f, 0.0192f, 0.0156f, 0.0123f, 0.0094f, 0.0069f, 0.0048f, 0.0031f, 0.0017f, + 0.0008f, 0.0002f +}; + +const int16_t GSC_freq_bits[] = +{ + 21, 66, -6, 25, 15, 11, 10, 5, 0, 0, 5, 4, 0, 0, 4, 0, 0, /* ACELP_5k00*/ + 21, 66, -6, 25, 15, 11, 10, 5, 0, 0, 5, 4, 0, 0, 4, 0, 0, /* ACELP_6k15*/ + 21, 66, -6, 25, 15, 11, 10, 5, 0, 0, 5, 4, 0, 0, 4, 0, 0, /* ACELP_7k20*/ + 21, 74, -4, 26, 16, 12, 11, 9, 0, 0, 4, 4, 1, 1, 3, 0, 0, /* ACELP_8k00*/ + 26, 80, -3, 28, 18, 13, 12, 9, 0, 0, 4, 4, 1, 1, 3, 0, 0, /* ACELP_9k60*/ + 26, 96, -4, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4, /* ACELP_11k60*/ + 26, 96, -4, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4, /* ACELP_12k15*/ + 26, 96, -4, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4, /* ACELP_12k85*/ + 26, 96, -4, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4, /* ACELP_13k20*/ + 26, 96, -1, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4, /* ACELP_14k80*/ + 26, 96, -1, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4, /* ACELP_16k40*/ + 26, 96, 0, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4, /* ACELP_22k60*/ + 26, 96, 0, 28, 18, 13, 12,10,10, 5, 4, 4, 1, 0, 1, 3, 4 /* ACELP_24k40*/ +}; + +const int16_t Compl_GSC_freq_bits[] = +{ + 5, 10, 10, 10 /* bitrate > ACELP_16k40 && FS = 16kHz */ +}; + +const float mfreq_loc[] = +{ + 175.0f, 375.0f, 775.0f, 1175.0f, 1575.0f, 1975.0f, 2375.0f, 2775.0f, 3175.0f, 3575.0f, 3975.0f, + 4375.0f, 4775.0f, 5175.0f, 5575.0f, 6375.0f, 7175.0f, 7975.0f +}; + +const int16_t mfreq_bindiv_loc[] = { 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32 }; + +const float mean_gp[] = { 0.5853f }; + +const float dic_gp[] = +{ + -0.5847f, -0.4695f, -0.3897f, -0.2731f, + -0.1986f, -0.1244f, -0.0492f, -0.005f, + 0.0631f, 0.1379f, 0.211f, 0.2859f, + 0.3229f, 0.3994f, 0.5217f, 0.6135f, + -0.5471f, -0.5089f, -0.4285f, -0.3512f, + -0.3124f, -0.235f, -0.162f, -0.0872f, + 0.0249f, 0.1013f, 0.1741f, 0.2485f, + 0.361f, 0.4376f, 0.4776f, 0.5645f +}; + +const float Gain_meanNB[] = { 2.4052f }; + +const float Gain_mean_dicNB[] = +{ + -0.3197f, -0.2272f, -0.1386f, -0.0966f, + -0.0132f, 0.1970f, 0.2865f, 0.3743f, + 0.4640f, 0.5108f, 0.5581f, 0.6086f, + 0.6588f, 0.7642f, 0.7101f, 0.0698f, + -0.1827f, 0.2418f, 0.1540f, -0.2733f, + -0.4144f, -0.5162f, -0.6806f, -1.3182f, + -2.4026f, -0.4643f, -0.7983f, -1.9470f, + -1.8160f, -1.6910f, -1.7558f, -0.5677f, + -0.3673f, -0.6224f, -0.7379f, -0.8624f, + -0.9321f, -1.0098f, -1.1600f, -1.2380f, + -1.4052f, -1.4876f, -2.1967f, -1.5599f, + -2.1399f, -2.3041f, 0.8225f, 0.9564f, + 0.8835f, 1.1436f, -2.0176f, 1.0387f, + -1.0822f, -1.6264f, -2.2534f, -1.8746f, + 1.4304f, 0.0288f, 0.1116f, -0.0553f, + 0.4192f, 0.3303f, -2.0750f, + -2.3558f, +}; + +const float Mean_dic_NB[] = +{ + -0.1084f, -0.0243f, -0.0292f, -0.0091f, + 0.0061f, 0.0171f, 0.0362f, 0.0153f, + 0.0416f, 0.0558f, +}; + +const float Gain_dic1_NB[] = +{ + -0.1479f, -0.0224f, 0.0013f, + -0.4797f, 0.0718f, 0.1627f, + -0.1073f, 0.0291f, 0.1613f, + -0.0258f, 0.0652f, 0.0264f, + -0.2961f, 0.0842f, -0.0332f, + -0.3053f, 0.1508f, 0.1381f, + -0.4650f, -0.1832f, 0.1581f, + -0.2546f, -0.0879f, -0.1215f, + -0.0043f, -0.0785f, 0.0235f, + 0.0816f, 0.0283f, -0.0604f, + -0.4709f, 0.1612f, 0.0056f, + -0.4504f, 0.2876f, 0.1183f, + -0.0440f, 0.2040f, 0.0408f, + -0.4619f, -0.2252f, -0.0783f, + 0.1016f, -0.1067f, -0.0839f, + 0.1452f, -0.1337f, 0.0386f, + -0.0648f, -0.1970f, -0.0826f, + -0.2599f, -0.2477f, -0.0048f, + -0.1528f, 0.1452f, -0.0814f, + -0.1389f, 0.2661f, 0.1590f, + 0.0066f, 0.1432f, -0.0809f, + -0.0450f, -0.0207f, -0.1229f, + -0.4643f, -0.4412f, 0.0796f, + -0.4543f, -0.0387f, -0.2415f, + -0.1626f, 0.0349f, -0.2839f, + -0.4194f, 0.2517f, -0.1816f, + 0.2068f, 0.0736f, -0.0144f, + 0.1757f, -0.2445f, -0.0527f, + 0.3370f, -0.2115f, -0.2366f, + 0.1961f, -0.0010f, -0.1484f, + 0.0568f, 0.0997f, -0.2436f, + 0.3561f, 0.0213f, 0.0641f, + 0.0842f, -0.1502f, -0.2506f, + 0.2140f, -0.0362f, -0.0016f, + 0.0165f, -0.2625f, 0.0660f, + 0.1958f, 0.0804f, 0.1159f, + -0.4695f, -0.0308f, -0.0092f, + 0.3114f, -0.1023f, -0.0851f, + 0.0979f, 0.2260f, 0.1403f, + 0.2066f, -0.0569f, 0.1335f, + 0.1691f, -0.4590f, 0.0869f, + -0.0883f, -0.4109f, -0.0535f, + 0.0565f, -0.0827f, 0.1460f, + 0.2996f, -0.1503f, 0.0652f, + 0.2724f, 0.0221f, -0.3213f, + -0.1344f, -0.1588f, 0.1293f, + 0.1083f, 0.0079f, 0.0442f, + -0.0937f, 0.2946f, -0.1892f, + -0.2424f, 0.2840f, 0.0099f, + 0.1915f, -0.2486f, 0.1314f, + 0.1551f, 0.1553f, -0.1036f, + 0.3353f, -0.3337f, 0.0364f, + 0.3521f, 0.0979f, -0.1083f, + 0.2671f, 0.2169f, 0.0300f, + 0.2135f, 0.2717f, -0.2642f, + -0.1578f, -0.2715f, -0.2692f, + 0.1316f, -0.3985f, -0.1668f, + 0.0981f, 0.1393f, 0.0241f, + -0.4342f, -0.4417f, -0.2072f, + -0.1788f, -0.4128f, 0.1708f, + -0.1655f, 0.1284f, 0.0670f, + 0.0782f, 0.2996f, -0.0288f, + -0.2984f, -0.0440f, 0.1108f, + 0.0423f, 0.0853f, 0.1295f, +}; + +const float Gain_dic2_NB[] = +{ + 0.0069f, 0.0000f, -0.0160f, + -0.1361f, 0.0009f, 0.0504f, + 0.0686f, -0.1568f, 0.0088f, + -0.1019f, 0.0198f, -0.1206f, + -0.0927f, 0.1671f, 0.1099f, + 0.1272f, -0.3770f, 0.0631f, + -0.2733f, 0.1496f, -0.2809f, + 0.1256f, 0.0058f, 0.1945f, + 0.0714f, -0.0204f, -0.1284f, + 0.0723f, 0.1021f, -0.0563f, + -0.1024f, -0.0165f, 0.2383f, + 0.0004f, -0.0753f, 0.0971f, + -0.1114f, -0.2459f, 0.0641f, + -0.2982f, -0.0906f, 0.1089f, + -0.0539f, -0.0952f, -0.0441f, + -0.2955f, 0.1435f, 0.1833f, + -0.2669f, 0.1288f, -0.0425f, + 0.1440f, 0.0907f, -0.3104f, + -0.0192f, -0.0612f, -0.3029f, + -0.2480f, -0.1188f, -0.1250f, + 0.1324f, 0.1419f, 0.0826f, + -0.0648f, 0.1114f, -0.0257f, + 0.1196f, -0.0173f, 0.0218f, + 0.0103f, 0.0574f, 0.0926f, + 0.0076f, 0.2916f, -0.0493f, + 0.0422f, -0.2048f, 0.2074f, + -0.0113f, 0.1221f, -0.1958f, + 0.0371f, 0.2279f, 0.2620f, + 0.2392f, 0.0843f, -0.0641f, + 0.1969f, -0.1415f, -0.1273f, + -0.0055f, -0.2421f, -0.1429f, + 0.2138f, -0.1407f, 0.1003f, +}; + +const float Gain_dic3_NB[] = +{ + -0.0039f, 0.0159f, -0.0553f, 0.0027f, + -0.0523f, 0.1349f, 0.0894f, 0.0451f, + 0.0334f, -0.0825f, -0.0732f, -0.1526f, + -0.0298f, 0.0199f, 0.1314f, -0.1946f, + 0.0391f, 0.0695f, -0.2694f, 0.0085f, + -0.1451f, 0.0762f, -0.0925f, -0.1033f, + 0.0412f, -0.1568f, -0.0964f, 0.0887f, + 0.0856f, -0.2846f, 0.1538f, -0.0637f, + -0.2905f, 0.0529f, 0.1016f, 0.0456f, + -0.1409f, 0.0596f, -0.1553f, 0.2095f, + 0.1415f, 0.1177f, -0.0536f, 0.1551f, + 0.1159f, -0.0458f, 0.0909f, 0.0066f, + -0.0159f, -0.0901f, 0.1231f, 0.2221f, + -0.1032f, -0.1080f, 0.0302f, -0.0098f, + 0.1173f, 0.1404f, -0.0101f, -0.1590f, + 0.1665f, 0.1661f, 0.2222f, 0.1193f, +}; + +const float Gain_dic2_NBHR[] = +{ + 0.0070f, 0.0001f, -0.0229f, + -0.1476f, -0.0493f, -0.0424f, + 0.0791f, -0.0927f, -0.0399f, + -0.0308f, -0.0735f, -0.0748f, + -0.0704f, 0.0302f, 0.0273f, + -0.0211f, 0.1279f, -0.0281f, + 0.0572f, 0.0045f, -0.1133f, + -0.0134f, -0.0686f, 0.0436f, + 0.0393f, 0.1088f, 0.1543f, + 0.0893f, -0.0201f, 0.0237f, + 0.0556f, -0.2804f, 0.0660f, + 0.0715f, 0.0698f, -0.0348f, + -0.0301f, -0.0085f, -0.2187f, + -0.1319f, -0.1649f, 0.0427f, + 0.0807f, -0.1180f, -0.1678f, + -0.1901f, 0.0498f, -0.1630f, + -0.1202f, 0.1876f, -0.1245f, + -0.2966f, -0.1514f, -0.1179f, + 0.1663f, -0.0185f, -0.0722f, + -0.1638f, 0.0966f, -0.0110f, + -0.1854f, 0.0728f, 0.1377f, + -0.0693f, 0.1437f, 0.0784f, + -0.3336f, -0.1445f, 0.1210f, + -0.1093f, -0.1429f, -0.1739f, + 0.0029f, -0.1845f, -0.0220f, + 0.1253f, 0.0407f, -0.2262f, + -0.2861f, 0.2587f, -0.2925f, + -0.1164f, 0.1825f, 0.2457f, + 0.0103f, 0.0251f, 0.3118f, + -0.2296f, 0.2562f, 0.0336f, + -0.2257f, -0.0035f, -0.3586f, + 0.1669f, 0.1657f, -0.3857f, + 0.1019f, -0.0912f, -0.3838f, + 0.1482f, 0.0660f, 0.0626f, + 0.1384f, 0.1899f, 0.2057f, + 0.3452f, -0.0544f, -0.1323f, + 0.0236f, 0.0488f, 0.0614f, + 0.0541f, 0.2623f, -0.1335f, + -0.1744f, -0.0697f, 0.2553f, + 0.0943f, -0.1671f, 0.2403f, + 0.0826f, 0.1646f, 0.0282f, + -0.0668f, 0.0418f, -0.0898f, + 0.1419f, -0.4567f, 0.0836f, + 0.0229f, 0.1079f, -0.1457f, + -0.0715f, -0.2943f, 0.2078f, + -0.0311f, 0.1224f, -0.3045f, + 0.0428f, 0.4151f, 0.3314f, + -0.0059f, 0.2989f, 0.0695f, + 0.1725f, -0.2325f, -0.0715f, + 0.1631f, 0.1202f, -0.0993f, + 0.2841f, 0.1833f, 0.0490f, + 0.0929f, -0.1452f, 0.0702f, + -0.3833f, 0.1174f, -0.1297f, + -0.1458f, -0.0391f, 0.0797f, + -0.1412f, -0.3200f, -0.0097f, + -0.0287f, -0.1278f, 0.1406f, + -0.3695f, 0.1286f, 0.1848f, + -0.0450f, 0.0097f, 0.1487f, + -0.2966f, 0.0239f, 0.0167f, + -0.0159f, -0.3233f, -0.2040f, + 0.2004f, -0.0729f, 0.0498f, + 0.1943f, 0.0051f, 0.2050f, + 0.0757f, -0.0325f, 0.1324f, + 0.2545f, -0.2377f, 0.1312f, +}; + +const float Gain_dic3_NBHR[] = +{ + 0.0715f, 0.0018f, -0.0493f, -0.0232f, + 0.1305f, 0.0268f, 0.1323f, -0.1251f, + -0.1410f, 0.0158f, -0.1367f, -0.0843f, + 0.0502f, 0.0811f, 0.0024f, -0.1302f, + -0.0186f, 0.0869f, -0.0034f, 0.0203f, + 0.0363f, -0.0908f, -0.0475f, -0.1196f, + -0.1168f, -0.0588f, -0.0135f, 0.0275f, + -0.0716f, -0.1147f, -0.1479f, 0.0151f, + 0.1947f, -0.3535f, 0.1525f, -0.2753f, + 0.0423f, 0.1132f, -0.4115f, -0.0120f, + -0.0956f, -0.0720f, -0.0388f, -0.1134f, + -0.1746f, 0.1026f, -0.0357f, -0.2402f, + -0.0087f, 0.0068f, -0.1182f, 0.0290f, + 0.1152f, 0.0665f, -0.1780f, -0.0283f, + 0.0167f, -0.0212f, -0.1534f, -0.1048f, + 0.1047f, -0.2240f, -0.0385f, -0.0466f, + -0.1331f, 0.0561f, -0.1063f, 0.0637f, + -0.0312f, 0.0037f, -0.1930f, 0.1494f, + 0.0655f, -0.0945f, -0.3072f, 0.0248f, + 0.0922f, 0.0580f, 0.0735f, 0.0007f, + -0.1207f, 0.0363f, 0.0319f, -0.0303f, + 0.1547f, -0.0751f, 0.0242f, 0.0058f, + 0.1397f, 0.1735f, 0.1842f, -0.2776f, + -0.2707f, 0.0977f, 0.2668f, 0.0901f, + -0.2028f, -0.1033f, 0.3865f, 0.2659f, + -0.0203f, 0.0380f, -0.0256f, 0.2631f, + -0.2270f, 0.1163f, 0.0372f, 0.0927f, + 0.1894f, 0.2838f, 0.1924f, -0.0104f, + 0.0680f, 0.0122f, 0.0997f, 0.1458f, + 0.1162f, 0.1180f, 0.0179f, 0.1828f, + 0.2204f, 0.1676f, 0.0196f, -0.1003f, + 0.0476f, -0.1876f, 0.0683f, 0.0840f, + -0.0641f, -0.2440f, -0.0112f, -0.0693f, + -0.0161f, 0.0641f, 0.0769f, -0.3024f, + 0.1061f, 0.1410f, -0.0572f, -0.2854f, + 0.0487f, -0.4075f, 0.0459f, 0.0278f, + -0.0140f, 0.1022f, -0.1243f, -0.1545f, + 0.0240f, -0.0290f, 0.0314f, -0.1991f, + -0.0383f, -0.0890f, -0.0607f, 0.1311f, + 0.0164f, -0.1524f, 0.0296f, 0.2814f, + 0.3526f, 0.0346f, -0.1425f, 0.0093f, + 0.2652f, -0.0205f, 0.0395f, 0.2426f, + 0.0958f, -0.0937f, -0.0302f, 0.1301f, + 0.0615f, 0.0446f, -0.2835f, -0.2160f, + -0.1053f, -0.2025f, 0.0248f, 0.1055f, + -0.1728f, 0.2409f, -0.2493f, -0.1572f, + -0.0157f, 0.0293f, -0.4112f, 0.2406f, + 0.0512f, -0.1206f, -0.2211f, 0.3179f, + 0.0121f, -0.0455f, 0.0431f, 0.0451f, + -0.0626f, 0.2130f, -0.2451f, 0.0946f, + 0.1376f, -0.0196f, -0.1657f, 0.1258f, + -0.1862f, -0.0097f, -0.2866f, 0.0556f, + -0.2513f, 0.0485f, -0.0144f, -0.0726f, + 0.0073f, -0.0115f, 0.0484f, -0.0645f, + -0.0966f, -0.3504f, 0.2229f, -0.2486f, + -0.0344f, 0.2348f, 0.0088f, 0.1117f, + 0.0088f, -0.0947f, 0.1894f, -0.2441f, + -0.0181f, 0.1194f, 0.2775f, 0.0341f, + -0.2369f, -0.1871f, 0.1625f, -0.0285f, + 0.0220f, 0.1462f, 0.4066f, 0.3429f, + -0.0763f, -0.1673f, -0.1866f, -0.1501f, + 0.1374f, -0.1128f, -0.1530f, -0.1874f, + 0.1933f, 0.1366f, -0.3527f, 0.1357f, + -0.1419f, 0.1760f, -0.1364f, 0.2775f, + -0.1707f, -0.0667f, 0.0668f, -0.2065f, + 0.2295f, -0.1684f, 0.1824f, -0.0617f, + -0.0431f, -0.1322f, 0.3309f, -0.0529f, + -0.1430f, 0.1042f, 0.2921f, -0.2119f, + 0.0358f, 0.1299f, -0.1342f, 0.0989f, + 0.0631f, 0.1654f, -0.0598f, -0.0405f, + 0.1884f, 0.2592f, -0.0807f, 0.1176f, + 0.0948f, 0.4565f, -0.1406f, 0.3869f, + 0.1129f, 0.2113f, 0.1108f, 0.2958f, + 0.1392f, 0.1289f, -0.1663f, 0.3001f, + -0.0943f, 0.1483f, 0.1463f, 0.2112f, + -0.0376f, -0.0049f, -0.0515f, -0.0564f, + 0.0234f, 0.1798f, 0.0996f, -0.0633f, + 0.1864f, -0.3743f, 0.2672f, 0.0607f, + 0.1720f, -0.2764f, 0.4289f, -0.2641f, + 0.0758f, -0.1174f, 0.0803f, -0.0964f, + 0.0473f, -0.1906f, 0.0144f, -0.2328f, + -0.2278f, -0.2336f, -0.0060f, 0.4555f, + -0.2079f, -0.0547f, -0.1176f, 0.2006f, + -0.3511f, 0.1197f, 0.0539f, 0.3127f, + 0.0956f, 0.1653f, 0.1317f, 0.0846f, + 0.2158f, -0.1499f, 0.4502f, 0.1656f, + -0.1886f, 0.1181f, -0.2266f, 0.6047f, + -0.0670f, -0.1125f, 0.0923f, -0.0642f, + -0.0690f, -0.0762f, 0.1423f, 0.0834f, + 0.1107f, -0.3762f, 0.0924f, 0.3090f, + 0.1900f, 0.2673f, 0.3150f, 0.2012f, + -0.2339f, -0.1082f, -0.0508f, -0.0173f, + 0.2405f, -0.2444f, -0.0301f, 0.1156f, + 0.0136f, -0.2449f, -0.1253f, 0.1158f, + -0.0633f, 0.3504f, 0.2381f, 0.0768f, + -0.0143f, -0.0412f, 0.1767f, 0.2347f, + -0.0512f, 0.2515f, 0.0832f, -0.2386f, + 0.2573f, 0.7121f, -0.0018f, -0.2141f, + -0.2079f, -0.0557f, 0.0805f, 0.1525f, + 0.0022f, -0.1280f, -0.0237f, -0.0035f, + 0.0038f, -0.0122f, 0.1163f, 0.5874f, + 0.0644f, -0.0581f, 0.1875f, 0.0136f, + 0.0457f, 0.0263f, -0.0413f, 0.1088f, + 0.1644f, 0.0582f, 0.2423f, 0.1638f, + -0.0532f, 0.0697f, 0.1184f, 0.0443f, + 0.1633f, -0.1285f, 0.1561f, 0.1394f, + 0.1586f, 0.0050f, -0.0458f, -0.1260f, + 0.2517f, 0.0403f, 0.1285f, 0.0333f, + -0.0813f, 0.0750f, 0.0248f, -0.1389f, + -0.0383f, 0.0755f, -0.2281f, -0.0295f, + -0.0820f, 0.0345f, 0.0096f, 0.1308f, + 0.1616f, 0.0888f, -0.0324f, 0.0543f, + -0.3135f, 0.1556f, -0.1552f, 0.0187f, + 0.3031f, 0.2066f, 0.1139f, 0.1557f, + 0.2055f, 0.0801f, 0.3248f, -0.0781f, + 0.0372f, -0.2464f, 0.1343f, -0.0524f, + -0.1885f, 0.0032f, 0.1451f, -0.0297f, + 0.0820f, -0.1000f, -0.1336f, -0.0005f, + 0.2121f, -0.0259f, 0.0784f, -0.2882f, + 0.1259f, 0.3045f, -0.2021f, -0.1408f, + -0.1636f, 0.2132f, 0.0897f, -0.0322f, + -0.1013f, 0.1537f, -0.0700f, -0.0400f, + -0.0256f, 0.0338f, 0.1603f, -0.1077f, + -0.0390f, -0.2649f, 0.2294f, 0.1718f, + -0.0313f, -0.0166f, -0.0901f, -0.2568f, + -0.3501f, 0.1449f, 0.1334f, -0.1623f, + -0.4515f, 0.0182f, 0.0428f, 0.0424f, + -0.3133f, 0.1780f, -0.3883f, 0.2519f, +}; + +const float YG_mean16[] = +{ + -0.0968f, -0.0468f, -0.0409f, -0.0332f, + -0.0147f, -0.0042f, 0.0111f, 0.0096f, + 0.0293f, 0.0198f, 0.0219f, 0.0164f, + 0.0358f, 0.0083f, 0.0398f, 0.0448f, +}; + +const float YG_dicMR_1[] = +{ + -0.4588f, 0.2016f, 0.1315f, -0.0513f, + -0.0294f, 0.0652f, -0.0335f, -0.0347f, + -0.1948f, -0.1154f, 0.1059f, 0.0594f, + 0.0724f, -0.2188f, 0.0901f, 0.0750f, + -0.4597f, -0.3254f, 0.1015f, 0.1244f, + -0.4774f, -0.1611f, -0.1151f, 0.0548f, + -0.2210f, -0.1962f, -0.1262f, 0.1056f, + -0.2346f, 0.0050f, -0.0631f, -0.0547f, + 0.0510f, 0.2386f, -0.0519f, -0.0042f, + 0.1308f, -0.0595f, 0.0388f, 0.0238f, + -0.0647f, 0.1891f, 0.1005f, -0.0799f, + 0.0823f, -0.0955f, -0.0579f, -0.1152f, + -0.4790f, -0.4482f, -0.1689f, 0.1149f, + 0.1525f, 0.0422f, -0.1130f, -0.0037f, + -0.2356f, 0.0643f, 0.0151f, 0.1466f, + -0.1910f, 0.2170f, -0.1056f, 0.0514f, + -0.4373f, 0.2081f, -0.1106f, -0.1895f, + -0.0445f, -0.0433f, -0.2631f, 0.0195f, + -0.0889f, 0.0855f, 0.0683f, 0.0715f, + -0.2201f, 0.2731f, 0.0719f, -0.2914f, + 0.0038f, 0.1073f, -0.0835f, 0.1121f, + -0.4455f, -0.3868f, -0.3375f, -0.1949f, + 0.1764f, 0.0140f, -0.3015f, -0.1613f, + 0.2167f, -0.3999f, 0.0677f, 0.0572f, + 0.0831f, 0.0842f, 0.0345f, -0.1490f, + 0.3124f, -0.0055f, 0.0042f, 0.0352f, + -0.1561f, -0.2081f, -0.1269f, -0.1350f, + 0.2519f, 0.2059f, 0.0364f, 0.1061f, + 0.1418f, 0.1911f, 0.1266f, -0.0479f, + 0.1115f, 0.2308f, 0.1216f, -0.3146f, + -0.4631f, -0.0101f, 0.1038f, 0.1255f, + 0.1921f, 0.0393f, 0.1236f, 0.0941f, + -0.1365f, 0.2635f, 0.0780f, 0.1258f, + 0.1220f, 0.0830f, 0.0146f, 0.0258f, + 0.0614f, -0.2434f, -0.2840f, -0.2344f, + 0.0638f, -0.3144f, -0.1540f, 0.0817f, + 0.3029f, -0.1514f, -0.0944f, -0.1617f, + 0.0407f, 0.0474f, 0.1163f, 0.0163f, + 0.2027f, -0.0636f, 0.1049f, -0.2933f, + -0.1169f, -0.0300f, 0.0174f, -0.2837f, + 0.0550f, -0.3618f, 0.0322f, -0.1958f, + 0.1659f, 0.1862f, -0.2466f, 0.1048f, + 0.0488f, -0.0304f, 0.0638f, 0.1441f, + 0.1882f, -0.1807f, -0.0447f, 0.0559f, + -0.4542f, -0.0850f, 0.0678f, -0.1340f, + -0.4317f, 0.2362f, 0.0687f, 0.1451f, + -0.4217f, -0.4143f, 0.0213f, -0.1866f, + 0.2853f, 0.1540f, -0.0279f, -0.1151f, + -0.3994f, -0.0247f, -0.3232f, -0.0221f, + 0.2004f, -0.1819f, 0.1119f, -0.0644f, + 0.2475f, -0.1406f, 0.0951f, 0.1147f, + 0.2541f, -0.1261f, -0.2486f, 0.0897f, + 0.2016f, 0.0042f, 0.1040f, -0.0797f, + -0.1140f, -0.4007f, 0.0491f, 0.0794f, + -0.4653f, 0.1045f, -0.0824f, 0.0541f, + -0.2492f, 0.1539f, 0.1023f, -0.0183f, + -0.0211f, -0.0926f, -0.0495f, 0.0572f, + 0.1609f, 0.1286f, -0.1199f, -0.3680f, + -0.1378f, -0.4261f, -0.2389f, -0.0422f, + -0.4306f, -0.1056f, -0.1813f, -0.2662f, + 0.0590f, 0.1732f, 0.0657f, 0.1213f, + 0.1749f, 0.0180f, -0.0507f, 0.1508f, + -0.0724f, 0.1574f, -0.2109f, -0.1965f, + -0.0112f, -0.0797f, 0.1006f, -0.0723f, +}; + +const float YG_dicMR_2[] = +{ + 0.0228f, 0.0529f, -0.0298f, 0.0091f, + -0.0032f, -0.0203f, 0.0257f, -0.1199f, + -0.0972f, -0.1446f, 0.0973f, -0.0390f, + 0.1325f, -0.0197f, -0.1147f, 0.0997f, + 0.0963f, -0.1539f, -0.0230f, -0.0630f, + -0.1623f, 0.0325f, -0.0331f, -0.0305f, + 0.0970f, -0.0857f, 0.1538f, -0.0361f, + -0.2846f, 0.0992f, -0.2111f, 0.1353f, + -0.0333f, -0.0737f, -0.0642f, 0.0198f, + -0.1646f, -0.1605f, -0.1393f, -0.1688f, + -0.0503f, 0.0930f, -0.1707f, 0.0298f, + 0.0665f, -0.3677f, 0.0868f, 0.0036f, + 0.1102f, -0.2346f, 0.1557f, -0.2765f, + 0.0772f, -0.1922f, 0.0404f, 0.1428f, + 0.0762f, -0.0352f, 0.0451f, 0.0668f, + 0.0095f, -0.1723f, -0.2433f, 0.0611f, + -0.2235f, -0.2127f, -0.0279f, 0.1118f, + -0.2035f, 0.0849f, 0.0888f, -0.2901f, + 0.1098f, 0.1764f, -0.0625f, 0.1007f, + 0.0902f, 0.1143f, -0.3346f, 0.1015f, + 0.0841f, 0.0401f, 0.0707f, -0.2672f, + 0.1622f, 0.0297f, 0.0082f, -0.0532f, + 0.1355f, 0.0621f, 0.1365f, 0.2015f, + 0.0762f, 0.1201f, 0.1211f, -0.0066f, + -0.0974f, 0.0770f, 0.1685f, -0.0806f, + -0.1118f, 0.1734f, 0.0503f, 0.1013f, + 0.0709f, 0.0217f, -0.1615f, -0.1139f, + -0.0176f, 0.1448f, -0.0264f, -0.1122f, + -0.0531f, 0.0113f, 0.0778f, 0.0461f, + -0.3335f, 0.0486f, 0.0892f, 0.0152f, + -0.1348f, -0.0405f, 0.1884f, 0.2103f, + -0.0387f, 0.0294f, -0.0525f, 0.1893f, +}; + +const float YG_dicMR_3[] = +{ + -0.0251f, -0.0350f, -0.0207f, -0.0047f, + -0.0986f, 0.0444f, -0.1942f, 0.0205f, + 0.0972f, -0.1449f, -0.0134f, -0.0624f, + 0.0691f, 0.0313f, -0.1153f, 0.0682f, + -0.0600f, -0.1532f, 0.0686f, 0.0726f, + -0.2082f, 0.1143f, 0.0874f, -0.2235f, + 0.0664f, 0.0363f, 0.0510f, -0.1081f, + -0.0409f, -0.1231f, 0.1104f, -0.1281f, + 0.1524f, -0.1042f, 0.1901f, 0.0286f, + 0.2634f, 0.0987f, -0.0240f, 0.0196f, + 0.0332f, 0.0404f, 0.0347f, -0.3404f, + 0.1252f, -0.1383f, -0.0367f, 0.2006f, + 0.0302f, 0.1576f, 0.0487f, 0.0664f, + -0.0403f, -0.1715f, -0.1502f, 0.0404f, + 0.0814f, 0.1978f, -0.1116f, 0.2533f, + -0.0878f, 0.0256f, -0.0268f, 0.1310f, + -0.0548f, 0.0305f, 0.1372f, -0.0063f, + 0.1706f, -0.2698f, 0.1976f, -0.3231f, + -0.3001f, 0.2054f, -0.1872f, 0.1393f, + -0.0756f, 0.1066f, -0.0278f, -0.0562f, + -0.2551f, 0.1538f, 0.1377f, 0.0787f, + 0.0689f, 0.2857f, -0.1765f, -0.0746f, + -0.0800f, -0.0604f, -0.0612f, -0.1461f, + 0.0864f, 0.0811f, -0.3889f, 0.1219f, + 0.0810f, -0.0055f, 0.0534f, 0.0743f, + 0.0794f, -0.3690f, 0.0922f, 0.0731f, + -0.0230f, -0.0132f, 0.1657f, 0.2333f, + 0.1238f, 0.2026f, 0.2103f, -0.1805f, + -0.2186f, -0.0329f, 0.0040f, -0.0083f, + 0.1654f, 0.1588f, 0.2346f, 0.1744f, + 0.1993f, -0.1624f, -0.4251f, -0.1638f, + 0.0670f, 0.0227f, -0.1506f, -0.1057f, +}; + +const float YG_dicMR_4[] = +{ + -0.0398f, -0.0108f, -0.0263f, 0.0079f, + 0.1358f, 0.0373f, 0.0281f, 0.0293f, + 0.1507f, 0.1997f, 0.1958f, 0.1756f, + -0.1560f, -0.1623f, 0.0297f, 0.1620f, + 0.0863f, -0.1354f, -0.0860f, -0.0209f, + -0.2836f, 0.2034f, -0.2525f, 0.0796f, + -0.1247f, -0.0991f, -0.1167f, -0.1276f, + 0.1198f, -0.3596f, 0.0987f, -0.0051f, + 0.0362f, 0.0702f, -0.0111f, -0.1328f, + -0.0148f, 0.0420f, -0.1931f, -0.0108f, + 0.1745f, -0.1095f, 0.2103f, 0.1230f, + -0.0264f, 0.0641f, 0.1489f, 0.0289f, + 0.2348f, 0.2016f, -0.2473f, -0.0091f, + -0.0077f, -0.1208f, 0.0883f, -0.0523f, + -0.0091f, 0.1614f, -0.0183f, 0.0706f, + -0.2039f, 0.0593f, 0.0207f, -0.0256f, +}; + +const float mean_m[] = { 2.8717f }; + +const float mean_gain_dic[] = +{ + -0.1804f, -0.1267f, -0.0185f, 0.0358f, + 0.1402f, 0.1903f, 0.2399f, 0.2894f, + 0.3379f, 0.3858f, 0.4356f, 0.4857f, + 0.5380f, 0.6452f, 0.6992f, 0.5914f, + 0.0885f, -0.0721f, -0.2922f, -0.4726f, + -0.6732f, -2.8699f, -2.0059f, 0.7528f, + 0.8083f, -0.3501f, -0.4106f, -0.8156f, + -2.2665f, -2.2112f, -2.1036f, -1.9001f, + -1.7967f, -1.7001f, -1.6094f, -1.5218f, + -1.3355f, -1.2328f, -1.1354f, -0.9654f, + -0.6031f, -0.2352f, -0.5368f, -0.7426f, + -0.8894f, -1.0479f, -1.4292f, -2.4899f, + 1.0016f, 0.8661f, 1.0718f, 1.1517f, + 0.9318f, -2.5695f, -2.8128f, -2.3365f, + -2.4168f, -2.2389f, -2.6467f, -2.7259f, + 1.3428f, 1.2399f, 1.4988f, 1.7072f, +}; + +const float YGain_mean_LR[] = +{ + -0.0940f, -0.0435f, -0.0348f, -0.0284f, + -0.0113f, -0.0029f, 0.0156f, 0.0123f, + 0.0288f, 0.0167f, 0.0324f, 0.0369f, +}; + +const float YGain_dic1_LR[] = +{ + -0.4660f, 0.0389f, -0.0220f, + -0.0378f, 0.1016f, -0.0036f, + -0.0241f, -0.0205f, 0.0967f, + -0.4472f, -0.2070f, -0.0781f, + -0.1901f, 0.2501f, 0.0111f, + -0.4541f, -0.4299f, 0.0666f, + 0.0197f, -0.0832f, -0.0755f, + -0.1999f, -0.0008f, -0.0770f, + 0.1179f, 0.0525f, -0.0474f, + 0.0591f, 0.2288f, -0.0186f, + -0.4468f, -0.4279f, -0.2691f, + -0.3880f, 0.2118f, -0.1605f, + -0.2224f, 0.0950f, 0.1028f, + -0.4478f, 0.2234f, 0.0952f, + -0.0352f, 0.1378f, -0.2121f, + 0.2143f, -0.3769f, 0.0736f, + 0.1089f, 0.0811f, 0.0917f, + -0.1318f, -0.2008f, -0.2444f, + 0.1339f, -0.0469f, 0.0567f, + 0.2245f, -0.1437f, -0.0427f, + 0.2121f, 0.1750f, -0.1378f, + 0.1945f, -0.0252f, -0.2556f, + -0.0819f, -0.4228f, -0.0453f, + -0.4492f, -0.0842f, 0.1383f, + 0.2943f, 0.0266f, 0.0106f, + 0.2405f, -0.1113f, 0.1391f, + 0.1588f, -0.2987f, -0.2134f, + 0.2265f, 0.1837f, 0.0951f, + -0.0302f, 0.2034f, 0.1404f, + -0.4421f, -0.0608f, -0.2788f, + -0.1736f, -0.1872f, 0.0451f, + 0.0840f, -0.2138f, 0.0652f, +}; + +const float YGain_dic2_LR[] = +{ + -0.0718f, -0.0178f, -0.0101f, 0.0026f, + 0.0675f, 0.0806f, -0.3212f, 0.0423f, + 0.0064f, -0.1738f, 0.0211f, 0.0003f, + -0.2054f, -0.1316f, 0.0600f, -0.1170f, + 0.0105f, -0.0505f, 0.1732f, 0.0282f, + 0.0254f, -0.0482f, 0.0554f, -0.1338f, + 0.0638f, -0.0556f, 0.0402f, 0.1480f, + 0.1496f, 0.0983f, -0.0297f, -0.1025f, + 0.0034f, 0.0444f, -0.1327f, -0.1633f, + -0.1793f, 0.0958f, -0.1200f, -0.0319f, + -0.3214f, 0.0670f, 0.0283f, 0.0808f, + -0.3269f, 0.1307f, -0.3079f, 0.1485f, + -0.0844f, 0.0677f, -0.1040f, 0.1779f, + -0.2606f, -0.2042f, -0.1393f, 0.0948f, + 0.1570f, 0.1228f, 0.1182f, 0.1300f, + -0.0362f, 0.1092f, 0.0294f, -0.0957f, + -0.1465f, 0.0641f, 0.1266f, -0.0182f, + 0.1676f, -0.0844f, 0.0926f, 0.0055f, + 0.0318f, 0.0583f, 0.0917f, -0.3336f, + 0.0165f, 0.1601f, -0.0881f, 0.0224f, + 0.1485f, 0.0699f, -0.0988f, 0.1190f, + -0.2517f, 0.1238f, 0.1276f, -0.2371f, + 0.0124f, -0.0108f, -0.1272f, 0.0421f, + -0.1400f, -0.1221f, 0.0972f, 0.1542f, + 0.0587f, 0.0358f, 0.0254f, 0.0125f, + -0.0780f, -0.1659f, -0.2174f, -0.0971f, + -0.0475f, 0.1229f, 0.0746f, 0.1120f, + 0.0819f, 0.0898f, 0.1615f, -0.0950f, + 0.0923f, -0.1925f, -0.1311f, 0.1660f, + 0.1057f, -0.2756f, 0.1153f, -0.2155f, + 0.1153f, -0.0761f, -0.0735f, -0.0506f, + 0.0922f, -0.3286f, 0.1058f, 0.0996f, +}; + +const float YGain_dic3_LR[] = +{ + -0.0810f, -0.0466f, -0.0299f, -0.1110f, -0.0512f, + 0.0888f, -0.0116f, -0.1622f, 0.0996f, 0.0549f, + -0.1406f, -0.0835f, 0.0897f, 0.0128f, 0.0658f, + -0.0958f, -0.0384f, -0.0188f, 0.1526f, -0.0546f, + -0.0446f, -0.1591f, -0.0990f, 0.0242f, 0.0650f, + 0.0059f, 0.0158f, 0.0180f, 0.1281f, 0.1497f, + -0.1966f, 0.0746f, -0.0936f, -0.0051f, 0.0602f, + 0.0038f, 0.0325f, -0.1016f, -0.0009f, -0.1385f, + 0.0718f, -0.1831f, 0.1082f, -0.0897f, 0.0557f, + 0.1308f, 0.1992f, 0.1872f, 0.1371f, 0.1449f, + -0.0131f, 0.0489f, -0.2706f, -0.1422f, 0.0554f, + 0.0300f, -0.0106f, 0.1011f, -0.0918f, -0.1585f, + 0.1445f, -0.1593f, -0.1646f, -0.0943f, -0.0868f, + 0.0244f, -0.0142f, -0.0110f, -0.0264f, 0.0251f, + -0.1774f, -0.0473f, -0.2856f, 0.2274f, 0.2675f, + 0.1251f, 0.1851f, -0.1073f, -0.1877f, -0.2566f, + 0.0885f, 0.1921f, -0.0673f, -0.0339f, 0.0364f, + -0.0533f, 0.0944f, 0.1116f, -0.1010f, 0.0646f, + -0.0492f, 0.1618f, -0.2695f, 0.2154f, -0.0825f, + -0.0139f, 0.0988f, 0.0656f, 0.0628f, -0.0539f, + 0.0817f, 0.2109f, 0.2841f, -0.1492f, -0.1509f, + 0.3113f, 0.1205f, -0.4354f, 0.0290f, 0.2983f, + 0.1837f, 0.0186f, 0.0660f, 0.0179f, -0.0140f, + 0.0917f, -0.3063f, 0.0353f, 0.1767f, 0.1473f, + -0.2414f, 0.1508f, 0.1609f, 0.1647f, 0.1367f, + 0.0313f, -0.0359f, -0.0337f, -0.0899f, 0.2352f, + 0.0341f, -0.0414f, 0.2115f, 0.1313f, 0.0311f, + 0.0299f, -0.1503f, 0.0406f, 0.0575f, -0.0966f, + 0.0914f, 0.0680f, 0.0994f, 0.1587f, -0.3097f, + -0.2103f, 0.1496f, -0.1844f, -0.3256f, -0.2372f, + -0.2251f, 0.0767f, 0.1015f, -0.0279f, -0.1582f, + 0.0647f, 0.0207f, 0.0148f, -0.2710f, 0.0109f, +}; + +const float YG_mean16HR[] = +{ + -0.0968f, -0.0468f, -0.0409f, -0.0332f, + -0.0147f, -0.0042f, 0.0111f, 0.0096f, + 0.0293f, 0.0198f, 0.0219f, 0.0164f, + 0.0358f, 0.0083f, 0.0398f, 0.0448f, +}; + +const float YG_dicHR_1[] = +{ + -0.4774f, 0.1006f, 0.0327f, 0.0080f, + -0.0832f, 0.0217f, -0.0103f, 0.0049f, + -0.2440f, 0.0768f, -0.0353f, 0.1115f, + -0.1048f, -0.0464f, 0.0456f, 0.1336f, + -0.2582f, 0.0393f, 0.0595f, -0.0481f, + -0.0114f, -0.0198f, -0.1200f, -0.0546f, + 0.0351f, 0.2409f, -0.0276f, 0.0037f, + 0.0699f, -0.0765f, 0.0189f, 0.0008f, + 0.0610f, -0.3055f, 0.0930f, 0.0745f, + -0.4662f, -0.0631f, 0.1176f, 0.0212f, + 0.2203f, 0.0146f, 0.0104f, -0.0456f, + -0.4809f, -0.2422f, -0.0819f, 0.0545f, + -0.4672f, -0.0398f, -0.1137f, -0.0410f, + -0.1970f, 0.2933f, 0.0060f, 0.1176f, + -0.1377f, -0.4744f, 0.0520f, 0.0928f, + -0.0293f, -0.1688f, -0.0396f, 0.0339f, + -0.2359f, 0.2464f, 0.1067f, -0.1134f, + 0.1061f, 0.0360f, 0.0452f, 0.0388f, + -0.4747f, -0.0325f, -0.0765f, 0.1470f, + -0.2514f, 0.0578f, -0.1495f, -0.0912f, + -0.1831f, -0.1396f, -0.2463f, -0.0975f, + 0.1628f, -0.2331f, -0.0273f, 0.0217f, + 0.0455f, -0.0040f, -0.0425f, 0.0827f, + -0.0575f, -0.0769f, 0.0984f, -0.0597f, + 0.0696f, 0.0327f, 0.0209f, -0.0854f, + -0.4838f, -0.3677f, -0.3150f, 0.0826f, + -0.4827f, -0.4701f, -0.0899f, 0.2140f, + -0.4713f, 0.0627f, 0.1106f, 0.1629f, + -0.4600f, 0.0633f, -0.0302f, -0.1902f, + -0.1985f, 0.2655f, -0.1455f, -0.2476f, + 0.0968f, 0.0162f, -0.2139f, 0.1007f, + -0.1328f, 0.2215f, -0.1605f, 0.0736f, + -0.1185f, 0.1496f, 0.1259f, 0.1897f, + -0.0884f, 0.1026f, 0.1019f, -0.1266f, + -0.4284f, 0.3193f, 0.0159f, -0.2937f, + -0.1511f, 0.1722f, -0.0139f, -0.0138f, + -0.4732f, 0.2455f, 0.1371f, 0.0145f, + 0.0152f, 0.1274f, -0.1076f, 0.0780f, + -0.4338f, 0.2469f, -0.0683f, -0.0405f, + 0.1364f, 0.0873f, -0.1085f, -0.0116f, + 0.1958f, -0.4880f, 0.0765f, 0.0780f, + -0.4573f, -0.2017f, -0.4130f, -0.2389f, + -0.1437f, -0.0720f, -0.0801f, -0.2493f, + -0.0224f, 0.1254f, -0.0705f, -0.1295f, + -0.4750f, -0.4797f, -0.0855f, -0.0717f, + -0.0751f, -0.2582f, 0.0497f, -0.1541f, + 0.0231f, -0.4184f, -0.1340f, -0.0153f, + 0.1505f, -0.0029f, -0.1247f, -0.1905f, + 0.1667f, -0.3843f, 0.0636f, -0.1079f, + 0.1239f, -0.1901f, 0.1275f, -0.0215f, + 0.3226f, -0.1551f, -0.1057f, -0.1512f, + 0.0901f, -0.1502f, -0.0820f, -0.4019f, + 0.2507f, -0.1398f, 0.0648f, -0.0626f, + 0.1902f, 0.0312f, -0.0379f, 0.0871f, + -0.1130f, -0.0441f, -0.1557f, 0.0990f, + 0.3247f, 0.2615f, 0.1327f, 0.1916f, + 0.1061f, -0.1145f, 0.0293f, -0.1419f, + 0.3159f, -0.1299f, 0.0148f, 0.0922f, + 0.0156f, -0.3151f, -0.0822f, 0.1729f, + 0.1848f, 0.0104f, 0.1008f, 0.1483f, + 0.1787f, 0.2451f, 0.1461f, -0.3391f, + -0.4440f, -0.4068f, 0.1336f, 0.0454f, + -0.4677f, -0.1959f, 0.1186f, 0.1927f, + 0.2215f, 0.1068f, 0.1111f, 0.0264f, + 0.1240f, -0.0250f, 0.1399f, -0.0267f, + 0.2534f, -0.3155f, -0.1689f, 0.1250f, + 0.3487f, 0.0389f, 0.0050f, 0.0662f, + 0.0273f, -0.2017f, -0.1483f, -0.1375f, + -0.1520f, -0.3243f, -0.3398f, -0.2442f, + -0.0039f, 0.2672f, 0.0828f, -0.1671f, + 0.1096f, 0.1931f, -0.1074f, -0.3950f, + -0.4310f, -0.2304f, -0.1606f, -0.1649f, + 0.0262f, -0.2040f, -0.2784f, 0.0590f, + 0.0081f, 0.0298f, 0.1270f, 0.0592f, + 0.0475f, 0.0499f, 0.0766f, -0.2637f, + 0.3194f, 0.1340f, -0.1736f, -0.2076f, + 0.3712f, 0.1159f, 0.0816f, -0.1261f, + 0.2666f, -0.0103f, 0.0849f, -0.3768f, + 0.2682f, -0.0535f, 0.1662f, 0.0341f, + 0.2089f, -0.2186f, 0.1498f, -0.2405f, + -0.3982f, -0.3785f, 0.1317f, -0.3119f, + 0.1642f, 0.2211f, -0.2583f, 0.1052f, + 0.1357f, 0.1610f, -0.0094f, 0.1101f, + -0.2731f, -0.0130f, 0.1309f, 0.1191f, + 0.1376f, -0.1186f, -0.0500f, 0.1589f, + -0.1657f, -0.2271f, 0.1148f, 0.1038f, + 0.2881f, -0.0634f, -0.2417f, 0.0781f, + 0.2425f, 0.0780f, -0.0886f, 0.2261f, + 0.1911f, -0.0621f, -0.3533f, -0.1305f, + -0.4753f, 0.2355f, 0.0210f, 0.1508f, + -0.4033f, 0.1776f, -0.1987f, 0.1256f, + -0.1350f, 0.0966f, 0.1276f, 0.0305f, + -0.4175f, 0.1414f, 0.2031f, -0.1324f, + 0.0085f, 0.1132f, 0.0351f, 0.0005f, + -0.4254f, -0.0507f, -0.1569f, -0.3704f, + -0.4804f, -0.1808f, 0.0665f, -0.1480f, + 0.1621f, 0.1638f, 0.0143f, -0.1516f, + 0.0561f, 0.0670f, 0.0299f, 0.1654f, + 0.0160f, 0.2794f, 0.0060f, 0.1692f, + -0.3377f, 0.2591f, 0.1540f, 0.2183f, + 0.1311f, 0.1317f, 0.0259f, -0.0077f, + 0.2639f, 0.1890f, -0.0654f, 0.0164f, + 0.0867f, 0.1267f, 0.1488f, -0.0822f, + 0.1899f, -0.1796f, 0.1008f, 0.1346f, + 0.0535f, -0.1037f, 0.0958f, 0.1103f, + -0.1326f, -0.4661f, -0.0463f, -0.2278f, + -0.2291f, -0.0436f, 0.1196f, -0.2462f, + -0.1829f, -0.2971f, -0.1075f, -0.0384f, + 0.1663f, -0.0868f, -0.1033f, -0.0047f, + 0.0731f, 0.2571f, -0.2231f, -0.1236f, + -0.0632f, 0.0881f, -0.3559f, -0.0095f, + -0.0645f, 0.2361f, 0.1268f, 0.0144f, + -0.1754f, -0.4094f, -0.2893f, 0.0454f, + 0.1811f, -0.0769f, 0.0451f, 0.0513f, + -0.4348f, -0.0747f, -0.3173f, 0.0408f, + -0.4670f, -0.4717f, -0.3156f, -0.2369f, + -0.2484f, -0.1271f, -0.0235f, -0.0333f, + -0.4466f, 0.1222f, -0.3039f, -0.1527f, + -0.2543f, -0.1933f, -0.1126f, 0.1443f, + 0.1729f, -0.3386f, -0.2632f, -0.2335f, + 0.0828f, 0.1555f, 0.1244f, 0.0997f, + -0.0321f, 0.0260f, -0.2937f, -0.2730f, + 0.1999f, 0.0046f, 0.1166f, -0.1652f, + 0.1631f, 0.2872f, 0.1031f, -0.0089f, + 0.2623f, -0.3076f, 0.1038f, 0.0652f, + -0.0688f, 0.1318f, 0.0077f, 0.1051f, + -0.2922f, 0.1846f, 0.0826f, 0.0577f, + -0.1389f, 0.2515f, 0.1029f, -0.3880f, +}; + +const float YG_dicHR_2[] = +{ + 0.0357f, -0.0180f, -0.0164f, -0.0247f, + -0.0028f, 0.0807f, -0.0430f, -0.1487f, + -0.0693f, -0.0078f, -0.0931f, -0.0468f, + -0.0510f, -0.0198f, 0.0348f, 0.0573f, + 0.0345f, -0.0919f, -0.0162f, -0.1579f, + 0.1387f, -0.0093f, -0.1048f, 0.0391f, + 0.0406f, 0.2031f, 0.0219f, -0.0253f, + 0.0684f, -0.2153f, -0.0724f, -0.0201f, + -0.0288f, -0.0010f, 0.0831f, -0.2336f, + 0.0699f, -0.0333f, -0.1658f, -0.1001f, + 0.0345f, 0.0443f, -0.0483f, 0.1249f, + -0.1674f, 0.1583f, 0.0602f, -0.0893f, + 0.1526f, -0.1636f, 0.1444f, 0.0464f, + -0.0019f, -0.0723f, -0.1110f, 0.0575f, + 0.2052f, 0.0309f, 0.1594f, 0.2598f, + -0.1046f, -0.1393f, -0.0044f, -0.0189f, + -0.0728f, -0.2377f, 0.1556f, 0.0930f, + -0.1890f, -0.0078f, -0.0813f, -0.2203f, + -0.3685f, 0.0409f, 0.1152f, -0.0903f, + 0.1053f, -0.3510f, 0.0303f, 0.1491f, + -0.2241f, 0.1248f, 0.1267f, -0.3634f, + -0.0239f, 0.0640f, -0.2129f, 0.0604f, + 0.1341f, -0.0406f, 0.1471f, -0.1442f, + 0.1574f, -0.2515f, 0.1945f, -0.3124f, + 0.1283f, -0.0092f, 0.0518f, 0.0483f, + 0.0345f, 0.0844f, 0.0477f, 0.0517f, + 0.0223f, -0.0175f, 0.1646f, 0.0546f, + -0.3280f, -0.2203f, -0.0068f, 0.0572f, + -0.1142f, -0.2396f, -0.1043f, 0.1771f, + 0.0430f, -0.1288f, 0.0208f, 0.0672f, + -0.1597f, -0.2099f, 0.1155f, -0.2132f, + 0.1640f, -0.1117f, -0.0797f, 0.1813f, + 0.1707f, 0.1498f, -0.0192f, 0.1117f, + -0.1191f, 0.1235f, 0.0566f, 0.1413f, + -0.0476f, 0.2265f, -0.1205f, 0.1293f, + 0.1551f, 0.1354f, -0.2239f, 0.1299f, + -0.1354f, -0.0030f, -0.0768f, 0.1492f, + 0.0422f, 0.1630f, 0.1301f, -0.2134f, + 0.1451f, 0.0660f, -0.0068f, -0.0923f, + 0.0948f, -0.1294f, -0.3191f, 0.0669f, + 0.1581f, 0.1102f, 0.1638f, 0.0059f, + 0.1820f, -0.1148f, 0.0020f, -0.0635f, + -0.1771f, -0.0715f, -0.2487f, -0.0080f, + 0.0234f, 0.0451f, 0.0808f, -0.0684f, + -0.1860f, -0.0331f, 0.1349f, 0.0612f, + -0.1014f, -0.0008f, 0.0482f, -0.0750f, + 0.0347f, 0.1714f, 0.1427f, 0.1845f, + 0.1100f, 0.1455f, -0.2468f, -0.1282f, + -0.1112f, -0.2792f, -0.1894f, -0.1562f, + 0.0557f, 0.1211f, -0.4094f, 0.0976f, + 0.0201f, 0.0593f, -0.1301f, 0.2984f, + 0.0306f, -0.0523f, 0.0779f, 0.1963f, + -0.0715f, 0.0928f, -0.0309f, 0.0172f, + 0.0235f, -0.1172f, 0.0995f, -0.0633f, + -0.1553f, -0.0363f, 0.2174f, 0.3030f, + 0.0521f, 0.0987f, -0.0934f, -0.0018f, + -0.0770f, 0.1243f, 0.1613f, 0.0150f, + 0.1233f, 0.0046f, 0.0082f, -0.3383f, + -0.1388f, 0.1750f, -0.1521f, -0.0827f, + -0.1075f, 0.0095f, 0.2374f, -0.1111f, + -0.3469f, 0.1407f, -0.2749f, 0.1633f, + -0.3396f, 0.1176f, 0.0561f, 0.1449f, + 0.0819f, -0.3576f, 0.1050f, -0.0916f, + -0.2243f, 0.0304f, -0.0379f, 0.0084f, +}; + +const float YG_dicHR_3[] = +{ + -0.0426f, -0.0202f, -0.0387f, -0.0030f, + 0.0380f, -0.0984f, 0.0280f, -0.0324f, + 0.0460f, 0.0006f, -0.0566f, -0.1148f, + 0.1094f, -0.0542f, -0.1462f, -0.0253f, + -0.0863f, 0.0744f, -0.2866f, 0.1026f, + -0.0105f, -0.0188f, -0.1303f, 0.0944f, + 0.1286f, -0.0140f, 0.0879f, -0.0605f, + -0.2045f, -0.0537f, -0.0840f, 0.0103f, + -0.0578f, 0.0215f, -0.1623f, -0.0552f, + -0.2976f, 0.0162f, 0.0885f, -0.1293f, + -0.0974f, 0.1213f, -0.0734f, 0.0731f, + 0.0520f, 0.1242f, -0.1272f, 0.0196f, + -0.0653f, -0.1276f, 0.0112f, 0.0700f, + -0.0159f, -0.2792f, 0.0376f, -0.0414f, + 0.1771f, -0.3623f, 0.2157f, -0.3563f, + 0.0022f, -0.0268f, 0.0817f, -0.1837f, + -0.0095f, 0.2102f, -0.0056f, -0.0815f, + -0.1191f, 0.0831f, 0.0495f, -0.3733f, + -0.0854f, 0.0945f, 0.1575f, -0.1134f, + -0.0259f, 0.0180f, 0.0416f, 0.1044f, + 0.0441f, 0.0938f, -0.0713f, 0.2415f, + 0.0436f, -0.1234f, 0.1509f, 0.0916f, + 0.1176f, 0.1316f, -0.4339f, 0.2564f, + 0.1662f, -0.1935f, 0.0160f, 0.0334f, + -0.3389f, 0.1950f, -0.2663f, 0.1638f, + -0.0921f, -0.1238f, -0.0341f, -0.1417f, + 0.0737f, 0.1500f, 0.0476f, 0.0958f, + -0.0533f, -0.2820f, 0.0834f, 0.2038f, + 0.0826f, -0.2616f, -0.2874f, 0.1644f, + -0.0993f, 0.0460f, -0.0225f, -0.1335f, + -0.0142f, -0.1604f, 0.1888f, -0.1319f, + 0.1126f, 0.1585f, 0.2053f, -0.0266f, + -0.1893f, -0.0861f, 0.1514f, 0.0570f, + -0.0954f, 0.1628f, 0.1468f, 0.1070f, + -0.0964f, 0.3893f, -0.0730f, 0.2465f, + 0.0898f, 0.1094f, 0.0711f, -0.2164f, + 0.1926f, 0.0187f, 0.1170f, 0.1297f, + -0.0188f, -0.1601f, -0.1222f, -0.0035f, + 0.1257f, -0.4262f, 0.1214f, 0.0531f, + 0.2209f, -0.2352f, 0.1540f, 0.3080f, + 0.1894f, 0.0548f, -0.1943f, 0.1270f, + 0.0712f, -0.1064f, -0.0275f, 0.1659f, + 0.1207f, 0.3370f, -0.2487f, -0.0456f, + -0.0185f, 0.0212f, 0.1785f, 0.2561f, + 0.0161f, 0.0183f, 0.1507f, 0.0244f, + 0.1251f, -0.0114f, 0.1731f, -0.3995f, + -0.2262f, 0.3021f, 0.2663f, -0.1984f, + 0.0100f, 0.0727f, 0.0237f, -0.0320f, + 0.1602f, 0.1882f, 0.2873f, 0.2248f, + 0.3206f, -0.1423f, -0.4473f, -0.2229f, + 0.1197f, -0.1583f, -0.0106f, -0.1966f, + -0.1098f, -0.2154f, -0.3597f, -0.1705f, + 0.2511f, 0.1028f, -0.0370f, -0.0707f, + 0.2659f, 0.2704f, -0.0354f, 0.1857f, + 0.0461f, 0.0873f, -0.1559f, -0.2509f, + -0.0824f, -0.0513f, 0.0733f, -0.0475f, + 0.0781f, 0.0546f, -0.3875f, -0.0158f, + 0.2374f, 0.3380f, 0.1919f, -0.2505f, + 0.2268f, -0.1145f, 0.2727f, -0.0484f, + -0.3637f, 0.1569f, 0.0659f, 0.0942f, + -0.1531f, 0.0612f, 0.0375f, 0.0123f, + -0.2213f, 0.1497f, -0.1265f, -0.1066f, + 0.0926f, 0.0044f, -0.0167f, 0.0533f, + -0.1584f, -0.0208f, -0.0269f, 0.1868f, +}; + +const float YG_mean16HR_16kHz[] = +{ + 0.0837f, 0.0372f, 0.0912f, 0.0878f, +}; + +const float YG_dicHR_4_16kHz[] = +{ + 0.0336f, 0.0267f, 0.0526f, 0.0053f, + 0.0802f, -0.0065f, 0.1313f, -0.0660f, + -0.0335f, -0.2078f, -0.0942f, -0.1717f, + -0.1312f, -0.0199f, -0.0596f, -0.0058f, + -0.0426f, -0.1039f, -0.0428f, -0.0858f, + 0.2103f, 0.2687f, 0.1701f, 0.1402f, + -0.0368f, -0.0036f, -0.0953f, -0.0589f, + -0.2022f, 0.0406f, 0.0402f, -0.0370f, + -0.0552f, 0.1323f, 0.0499f, -0.0270f, + 0.0450f, 0.2002f, -0.0219f, 0.0645f, + -0.0065f, 0.2172f, 0.1731f, 0.1270f, + 0.0205f, -0.0432f, -0.1742f, -0.0674f, + -0.0365f, -0.3219f, 0.1785f, -0.0473f, + -0.0792f, -0.0136f, 0.0290f, 0.0446f, + 0.1158f, -0.1206f, -0.1005f, 0.0128f, + 0.0381f, -0.3563f, -0.0904f, -0.0175f, + 0.1253f, 0.1103f, 0.2376f, 0.0693f, + 0.2207f, -0.0725f, 0.0756f, 0.0296f, + 0.3080f, 0.0724f, 0.2164f, 0.1716f, + 0.2403f, -0.2941f, 0.2234f, 0.0037f, + -0.0980f, 0.1115f, -0.0772f, 0.0333f, + 0.1119f, -0.4345f, 0.0818f, -0.1924f, + 0.1152f, -0.1945f, 0.0584f, -0.0809f, + -0.0954f, -0.5530f, 0.1204f, -0.0747f, + 0.1146f, -0.4752f, 0.0950f, 0.0684f, + 0.0368f, 0.1132f, -0.1772f, 0.0279f, + -0.1005f, 0.0244f, -0.2212f, -0.0313f, + 0.1534f, 0.2169f, 0.3173f, 0.2538f, + 0.3552f, 0.3364f, 0.3457f, 0.3297f, + -0.0003f, 0.0593f, -0.0401f, -0.0028f, + 0.1544f, 0.1517f, 0.1017f, 0.1697f, + 0.0969f, -0.2516f, 0.0871f, 0.1202f, + 0.0119f, -0.0682f, -0.0240f, -0.0075f, + -0.1389f, -0.0520f, -0.0920f, -0.1396f, + 0.0672f, 0.1392f, 0.0935f, 0.0373f, + 0.1082f, 0.0185f, 0.1273f, 0.1021f, + -0.3336f, -0.3825f, -0.6008f, -0.7142f, + -0.2587f, 0.0157f, -0.1429f, -0.0564f, + 0.0328f, 0.1196f, -0.0725f, -0.0929f, + -0.3548f, -0.2175f, -0.2930f, -0.2825f, + -0.0066f, 0.0587f, -0.4138f, 0.0117f, + 0.1133f, 0.0211f, -0.0499f, -0.0194f, + 0.1823f, 0.1128f, 0.0573f, 0.0140f, + 0.2655f, -0.1803f, 0.2675f, 0.2565f, + 0.2253f, 0.1513f, -0.1007f, 0.1000f, + -0.0639f, 0.0086f, 0.0303f, -0.0766f, + -0.1939f, 0.2057f, -0.2423f, 0.0769f, + 0.0686f, -0.1137f, 0.2511f, 0.0480f, + 0.0571f, -0.0847f, 0.0629f, 0.0448f, + -0.4005f, 0.0596f, -0.0270f, 0.0070f, + 0.0922f, 0.0418f, -0.0140f, 0.0958f, + -0.0218f, 0.0900f, 0.0477f, 0.1115f, + 0.1225f, 0.3240f, 0.0291f, 0.2393f, + -0.0158f, -0.0206f, -0.1019f, 0.0642f, + -0.1011f, -0.1364f, -0.1560f, -0.0251f, + -0.4360f, 0.0958f, -0.4289f, -0.1051f, + -0.1723f, -0.0732f, -0.2905f, -0.1783f, + -0.1166f, 0.0848f, -0.0978f, -0.0897f, + -0.0229f, -0.2016f, -0.0050f, -0.0033f, + -0.1734f, -0.1320f, 0.0110f, -0.0649f, + -0.0370f, -0.1189f, 0.0929f, -0.0594f, + -0.0657f, 0.0080f, 0.1716f, 0.0350f, + 0.0503f, -0.0355f, -0.0068f, -0.1159f, + -0.1695f, 0.1897f, 0.0702f, 0.0873f, +}; + +const float YG_meanL2G_16kHz[] = +{ + 0.1036f, 0.1590f, +}; + +const float YG_dicL2G_16kHz[] = +{ + -0.0624f, 0.0298f, + 0.0723f, 0.0768f, + -0.0553f, -0.0814f, + 0.1633f, 0.1633f, + 0.0249f, -0.0130f, + -0.1415f, -0.1581f, + -0.2937f, -0.3039f, + 0.2962f, 0.3062f, +}; + +const int16_t Odx_fft64[64] = +{ + 0,59,54,49,44,39,34,29,24,19,14,9,4,63,58,53,48,43,38,33,28,23,18,13,8,3,62,57,52,47,42,37, + 32,27,22,17,12,7,2,61,56,51,46,41,36,31,26,21,16,11,6,1,60,55,50,45,40,35,30,25,20,15,10,5 +}; + +const float w_fft64[32] = +{ + 1.0000000f,0.00000000f,0.70710677f,0.70710677f,0.92387950f,0.38268346f,0.38268346f,0.92387950f, + 0.98078525f,0.19509032f,0.55557024f,0.83146960f,0.83146960f,0.55557024f,0.19509032f,0.98078525f, + 0.99518472f,0.098017141f,0.63439327f,0.77301043f,0.88192123f,0.47139674f,0.29028469f,0.95694035f, + 0.95694035f,0.29028469f,0.47139674f,0.88192123f,0.77301043f,0.63439327f,0.098017141f,0.99518472f +}; + +const int16_t Ip_fft64[6] = { 32,1,0,64,32,96 }; + +const int16_t Odx_fft32_15[32] = { 0,17,2,19,4,21,6,23,8,25,10,27,12,29,14,31,16,1,18,3,20,5,22,7,24,9,26,11,28,13,30,15 }; + +const float w_fft32[16] = +{ + 1.0000000f,0.00000000f,0.70710677f,0.70710677f,0.92387950f,0.38268346f,0.38268346f,0.92387950f, + 0.98078525f,0.19509032f,0.55557024f,0.83146960f,0.83146960f,0.55557024f,0.19509032f,0.98078525f +}; + +const int16_t Ip_fft32[6] = { 16,1,0,32,16,48 }; + +const int16_t Odx_fft32_5[32] = { 0,27,22,17,12,7,2,29,24,19,14,9,4,31,26,21,16,11,6,1,28,23,18,13,8,3,30,25,20,15,10,5 }; + +const int16_t Odx_fft16[16] = {0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5}; + +const float w_fft16[8] = { 1.0000000f,0.00000000f,0.70710677f,0.70710677f,0.92387950f,0.38268346f,0.38268346f,0.92387950f }; + +const int16_t Ip_fft16[6] = {8,1,0,16,8,24}; + +const float w_fft8[8] = {1.0000000f,0.00000000f,0.70710677f,0.70710677f }; + +const int16_t Ip_fft8[6] = {4,1,0,8,4,12}; + +const int16_t Idx_dortft80[80] = +{ + 0,65,50,35,20,5,70,55,40,25,10,75,60,45,30,15,16,1,66,51,36,21,6,71,56,41,26,11,76,61, + 46,31,32,17,2,67,52,37,22,7,72,57,42,27,12,77,62,47,48,33,18,3,68,53,38,23,8,73,58,43, + 28,13,78,63,64,49,34,19,4,69,54,39,24,9,74,59,44,29,14,79 +}; + +const int16_t Idx_dortft120[120] = +{ + 0,105,90,75,60,45,30,15,16,1,106,91,76,61,46,31,32,17,2,107,92,77,62,47, + 48,33,18,3,108,93,78,63,64,49,34,19,4,109,94,79,80,65,50,35,20,5,110,95, + 96,81,66,51,36,21,6,111,112,97,82,67,52,37,22,7,8,113,98,83,68,53,38,23, + 24,9,114,99,84,69,54,39,40,25,10,115,100,85,70,55,56,41,26,11,116,101,86, + 71,72,57,42,27,12,117,102,87,88,73,58,43,28,13,118,103,104,89,74,59,44,29,14,119 +}; + +const int16_t Idx_dortft160[160] = +{ + 0,65,130,35,100,5,70,135,40,105,10,75,140,45,110,15,80,145, + 50,115,20,85,150,55,120,25,90,155,60,125,30,95,96,1,66,131, + 36,101,6,71,136,41,106,11,76,141,46,111,16,81,146,51,116,21, + 86,151,56,121,26,91,156,61,126,31,32,97,2,67,132,37,102,7, + 72,137,42,107,12,77,142,47,112,17,82,147,52,117,22,87,152,57, + 122,27,92,157,62,127,128,33,98,3,68,133,38,103,8,73,138,43, + 108,13,78,143,48,113,18,83,148,53,118,23,88,153,58,123,28,93, + 158,63,64,129,34,99,4,69,134,39,104,9,74,139,44,109,14,79, + 144,49,114,19,84,149,54,119,24,89,154,59,124,29,94,159 +}; + +const int16_t Idx_dortft320[320] = +{ + 0,65,130,195,260,5,70,135,200,265,10,75,140,205,270,15,80,145,210,275,20,85,150,215,280,25,90,155,220,285,30,95, + 160,225,290,35,100,165,230,295,40,105,170,235,300,45,110,175,240,305,50,115,180,245,310,55,120,185,250,315,60,125, + 190,255,256,1,66,131,196,261,6,71,136,201,266,11,76,141,206,271,16,81,146,211,276,21,86,151,216,281,26,91,156,221, + 286,31,96,161,226,291,36,101,166,231,296,41,106,171,236,301,46,111,176,241,306,51,116,181,246,311,56,121,186,251, + 316,61,126,191,192,257,2,67,132,197,262,7,72,137,202,267,12,77,142,207,272,17,82,147,212,277,22,87,152,217,282,27, + 92,157,222,287,32,97,162,227,292,37,102,167,232,297,42,107,172,237,302,47,112,177,242,307,52,117,182,247,312,57,122, + 187,252,317,62,127,128,193,258,3,68,133,198,263,8,73,138,203,268,13,78,143,208,273,18,83,148,213,278,23,88,153,218, + 283,28,93,158,223,288,33,98,163,228,293,38,103,168,233,298,43,108,173,238,303,48,113,178,243,308,53,118,183,248,313, + 58,123,188,253,318,63,64,129,194,259,4,69,134,199,264,9,74,139,204,269,14,79,144,209,274,19,84,149,214,279,24,89,154, + 219,284,29,94,159,224,289,34,99,164,229,294,39,104,169,234,299,44,109,174,239,304,49,114,179,244,309,54,119,184,249, + 314,59,124,189,254,319 +}; + +const int16_t Idx_dortft480[480] = +{ + 0,225,450,195,420,165,390,135,360,105,330,75,300,45,270,15,240,465,210,435,180,405,150,375,120,345, + 90,315,60,285,30,255,256,1,226,451,196,421,166,391,136,361,106,331,76,301,46,271,16,241,466,211,436, + 181,406,151,376,121,346,91,316,61,286,31,32,257,2,227,452,197,422,167,392,137,362,107,332,77,302,47, + 272,17,242,467,212,437,182,407,152,377,122,347,92,317,62,287,288,33,258,3,228,453,198,423,168,393,138, + 363,108,333,78,303,48,273,18,243,468,213,438,183,408,153,378,123,348,93,318,63,64,289,34,259,4,229,454, + 199,424,169,394,139,364,109,334,79,304,49,274,19,244,469,214,439,184,409,154,379,124,349,94,319,320, + 65,290,35,260,5,230,455,200,425,170,395,140,365,110,335,80,305,50,275,20,245,470,215,440,185,410,155, + 380,125,350,95,96,321,66,291,36,261,6,231,456,201,426,171,396,141,366,111,336,81,306,51,276,21,246,471, + 216,441,186,411,156,381,126,351,352,97,322,67,292,37,262,7,232,457,202,427,172,397,142,367,112,337,82, + 307,52,277,22,247,472,217,442,187,412,157,382,127,128,353,98,323,68,293,38,263,8,233,458,203,428,173, + 398,143,368,113,338,83,308,53,278,23,248,473,218,443,188,413,158,383,384,129,354,99,324,69,294,39,264, + 9,234,459,204,429,174,399,144,369,114,339,84,309,54,279,24,249,474,219,444,189,414,159,160,385,130,355, + 100,325,70,295,40,265,10,235,460,205,430,175,400,145,370,115,340,85,310,55,280,25,250,475,220,445,190, + 415,416,161,386,131,356,101,326,71,296,41,266,11,236,461,206,431,176,401,146,371,116,341,86,311,56,281, + 26,251,476,221,446,191,192,417,162,387,132,357,102,327,72,297,42,267,12,237,462,207,432,177,402,147,372, + 117,342,87,312,57,282,27,252,477,222,447,448,193,418,163,388,133,358,103,328,73,298,43,268,13,238,463, + 208,433,178,403,148,373,118,343,88,313,58,283,28,253,478,223,224,449,194,419,164,389,134,359,104,329,74, + 299,44,269,14,239,464,209,434,179,404,149,374,119,344,89,314,59,284,29,254,479 +}; + +const int16_t Ip_fft128[10] = { 64, 1, 0, 128, 64, 192, 32, 160, 96, 224 }; + +const float w_fft128[64] = +{ + 1.0000000f, 0.00000000f, 0.70710677f, 0.70710677f, 0.92387950f, 0.38268346f, 0.38268346f, 0.92387950f, + 0.98078525f, 0.19509032f, 0.55557024f, 0.83146960f, 0.83146960f, 0.55557024f, 0.19509032f, 0.98078525f, + 0.99518472f, 0.09801714f, 0.63439327f, 0.77301043f, 0.88192123f, 0.47139674f, 0.29028469f, 0.95694035f, + 0.95694035f, 0.29028469f, 0.47139674f, 0.88192123f, 0.77301043f, 0.63439327f, 0.09801714f, 0.99518472f, + 0.99879545f, 0.04906767f, 0.67155895f, 0.74095112f, 0.90398929f, 0.42755509f, 0.33688985f, 0.94154406f, + 0.97003125f, 0.24298017f, 0.51410274f, 0.85772861f, 0.80320753f, 0.59569930f, 0.14673047f, 0.98917650f, + 0.98917650f, 0.14673047f, 0.59569930f, 0.80320753f, 0.85772861f, 0.51410274f, 0.24298017f, 0.97003125f, + 0.94154406f, 0.33688985f, 0.42755509f, 0.90398929f, 0.74095112f, 0.67155895f, 0.04906767f, 0.99879545f +}; + +const int16_t Ip_fft256[10] = {128, 1, 0, 256, 128, 384, 64, 320,192, 448}; + +const float w_fft256[128] = +{ + 1.00000000f, 0.00000000f, 0.70710678f, 0.70710678f, 0.92387953f, 0.38268343f, 0.38268343f, 0.92387953f, + 0.98078528f, 0.19509032f, 0.55557023f, 0.83146961f, 0.83146961f, 0.55557023f, 0.19509032f, 0.98078528f, + 0.99518473f, 0.09801714f, 0.63439328f, 0.77301045f, 0.88192126f, 0.47139674f, 0.29028468f, 0.95694034f, + 0.95694034f, 0.29028468f, 0.47139674f, 0.88192126f, 0.77301045f, 0.63439328f, 0.09801714f, 0.99518473f, + 0.99879546f, 0.04906767f, 0.67155895f, 0.74095113f, 0.90398929f, 0.42755509f, 0.33688985f, 0.94154407f, + 0.97003125f, 0.24298018f, 0.51410274f, 0.85772861f, 0.80320753f, 0.59569930f, 0.14673047f, 0.98917651f, + 0.98917651f, 0.14673047f, 0.59569930f, 0.80320753f, 0.85772861f, 0.51410274f, 0.24298018f, 0.97003125f, + 0.94154407f, 0.33688985f, 0.42755509f, 0.90398929f, 0.74095113f, 0.67155895f, 0.04906767f, 0.99879546f, + 0.99969882f, 0.02454123f, 0.68954054f, 0.72424708f, 0.91420976f, 0.40524131f, 0.35989504f, 0.93299280f, + 0.97570213f, 0.21910124f, 0.53499762f, 0.84485357f, 0.81758481f, 0.57580819f, 0.17096189f, 0.98527764f, + 0.99247953f, 0.12241068f, 0.61523159f, 0.78834643f, 0.87008699f, 0.49289819f, 0.26671276f, 0.96377607f, + 0.94952818f, 0.31368174f, 0.44961133f, 0.89322430f, 0.75720885f, 0.65317284f, 0.07356456f, 0.99729046f, + 0.99729046f, 0.07356456f, 0.65317284f, 0.75720885f, 0.89322430f, 0.44961133f, 0.31368174f, 0.94952818f, + 0.96377607f, 0.26671276f, 0.49289819f, 0.87008699f, 0.78834643f, 0.61523159f, 0.12241068f, 0.99247953f, + 0.98527764f, 0.17096189f, 0.57580819f, 0.81758481f, 0.84485357f, 0.53499762f, 0.21910124f, 0.97570213f, + 0.93299280f, 0.35989504f, 0.40524131f, 0.91420976f, 0.72424708f, 0.68954054f, 0.02454123f, 0.99969882f +}; + +const int16_t Ip_fft512[18] = {256, 1, 0, 512, 256, 768, 128, 640,384, 896, 64, 576, 320, 832, 192, 704,448, 960}; + +const float w_fft512[256] = +{ + 1.00000000f, 0.00000000f, 0.70710678f, 0.70710678f, 0.92387953f, 0.38268343f, 0.38268343f, 0.92387953f, + 0.98078528f, 0.19509032f, 0.55557023f, 0.83146961f, 0.83146961f, 0.55557023f, 0.19509032f, 0.98078528f, + 0.99518473f, 0.09801714f, 0.63439328f, 0.77301045f, 0.88192126f, 0.47139674f, 0.29028468f, 0.95694034f, + 0.95694034f, 0.29028468f, 0.47139674f, 0.88192126f, 0.77301045f, 0.63439328f, 0.09801714f, 0.99518473f, + 0.99879546f, 0.04906767f, 0.67155895f, 0.74095113f, 0.90398929f, 0.42755509f, 0.33688985f, 0.94154407f, + 0.97003125f, 0.24298018f, 0.51410274f, 0.85772861f, 0.80320753f, 0.59569930f, 0.14673047f, 0.98917651f, + 0.98917651f, 0.14673047f, 0.59569930f, 0.80320753f, 0.85772861f, 0.51410274f, 0.24298018f, 0.97003125f, + 0.94154407f, 0.33688985f, 0.42755509f, 0.90398929f, 0.74095113f, 0.67155895f, 0.04906767f, 0.99879546f, + 0.99969882f, 0.02454123f, 0.68954054f, 0.72424708f, 0.91420976f, 0.40524131f, 0.35989504f, 0.93299280f, + 0.97570213f, 0.21910124f, 0.53499762f, 0.84485357f, 0.81758481f, 0.57580819f, 0.17096189f, 0.98527764f, + 0.99247953f, 0.12241068f, 0.61523159f, 0.78834643f, 0.87008699f, 0.49289819f, 0.26671276f, 0.96377607f, + 0.94952818f, 0.31368174f, 0.44961133f, 0.89322430f, 0.75720885f, 0.65317284f, 0.07356456f, 0.99729046f, + 0.99729046f, 0.07356456f, 0.65317284f, 0.75720885f, 0.89322430f, 0.44961133f, 0.31368174f, 0.94952818f, + 0.96377607f, 0.26671276f, 0.49289819f, 0.87008699f, 0.78834643f, 0.61523159f, 0.12241068f, 0.99247953f, + 0.98527764f, 0.17096189f, 0.57580819f, 0.81758481f, 0.84485357f, 0.53499762f, 0.21910124f, 0.97570213f, + 0.93299280f, 0.35989504f, 0.40524131f, 0.91420976f, 0.72424708f, 0.68954054f, 0.02454123f, 0.99969882f, + 0.99992470f, 0.01227154f, 0.69837625f, 0.71573083f, 0.91911385f, 0.39399204f, 0.37131719f, 0.92850608f, + 0.97831737f, 0.20711138f, 0.54532499f, 0.83822471f, 0.82458930f, 0.56573181f, 0.18303989f, 0.98310549f, + 0.99390697f, 0.11022221f, 0.62485949f, 0.78073723f, 0.87607009f, 0.48218377f, 0.27851969f, 0.96043052f, + 0.95330604f, 0.30200595f, 0.46053871f, 0.88763962f, 0.76516727f, 0.64383154f, 0.08579731f, 0.99631261f, + 0.99811811f, 0.06132074f, 0.66241578f, 0.74913639f, 0.89867447f, 0.43861624f, 0.32531029f, 0.94560733f, + 0.96697647f, 0.25486566f, 0.50353838f, 0.86397286f, 0.79583690f, 0.60551104f, 0.13458071f, 0.99090264f, + 0.98730142f, 0.15885814f, 0.58579786f, 0.81045720f, 0.85135519f, 0.52458968f, 0.23105811f, 0.97293995f, + 0.93733901f, 0.34841868f, 0.41642956f, 0.90916798f, 0.73265427f, 0.68060100f, 0.03680722f, 0.99932238f, + 0.99932238f, 0.03680722f, 0.68060100f, 0.73265427f, 0.90916798f, 0.41642956f, 0.34841868f, 0.93733901f, + 0.97293995f, 0.23105811f, 0.52458968f, 0.85135519f, 0.81045720f, 0.58579786f, 0.15885814f, 0.98730142f, + 0.99090264f, 0.13458071f, 0.60551104f, 0.79583690f, 0.86397286f, 0.50353838f, 0.25486566f, 0.96697647f, + 0.94560733f, 0.32531029f, 0.43861624f, 0.89867447f, 0.74913639f, 0.66241578f, 0.06132074f, 0.99811811f, + 0.99631261f, 0.08579731f, 0.64383154f, 0.76516727f, 0.88763962f, 0.46053871f, 0.30200595f, 0.95330604f, + 0.96043052f, 0.27851969f, 0.48218377f, 0.87607009f, 0.78073723f, 0.62485949f, 0.11022221f, 0.99390697f, + 0.98310549f, 0.18303989f, 0.56573181f, 0.82458930f, 0.83822471f, 0.54532499f, 0.20711138f, 0.97831737f, + 0.92850608f, 0.37131719f, 0.39399204f, 0.91911385f, 0.71573083f, 0.69837625f, 0.01227154f, 0.99992470f +}; + +const int16_t Idx_dortft40[40] = +{ + 0, 25, 10, 35, 20, 5, 30, 15, 16, 1, 26, 11, 36, 21, 6, 31, 32, 17, 2, 27, + 12, 37, 22, 7, 8, 33, 18, 3, 28, 13, 38, 23, 24, 9, 34, 19, 4, 29, 14, 39 +}; + +const int16_t Odx_fft8_5[8] = {0, 3, 6, 1, 4, 7, 2, 5}; +const int16_t Idx_dortft20[20] = {0, 5, 10, 15, 16, 1, 6, 11, 12, 17, 2, 7, 8, 13, 18, 3, 4, 9, 14, 19}; +const int16_t Odx_fft4_5[4] = {0, 3, 2, 1}; +const float w_fft4[2] = {1.0000000f, 0.00000000f}; +const int16_t Ip_fft4[6] = {2,1,0,4,2,6}; +const int16_t ip_edct2_64[6] = {16, 64, 0, 32, 16, 48}; + +const float w_edct2_64[80] = +{ + 1.00000000f, 0.00000000f, 0.70710678f, 0.70710678f, 0.92387953f, 0.38268343f, 0.38268343f, 0.92387953f, + 0.98078528f, 0.19509032f, 0.55557023f, 0.83146961f, 0.83146961f, 0.55557023f, 0.19509032f, 0.98078528f, + 0.70710678f, 0.49984940f, 0.49939772f, 0.49864522f, 0.49759236f, 0.49623976f, 0.49458825f, 0.49263882f, + 0.49039264f, 0.48785106f, 0.48501562f, 0.48188803f, 0.47847016f, 0.47476409f, 0.47077203f, 0.46649639f, + 0.46193976f, 0.45710487f, 0.45199464f, 0.44661215f, 0.44096063f, 0.43504349f, 0.42886430f, 0.42242678f, + 0.41573480f, 0.40879240f, 0.40160376f, 0.39417321f, 0.38650522f, 0.37860442f, 0.37047556f, 0.36212354f, + 0.35355339f, 0.34477027f, 0.33577947f, 0.32658642f, 0.31719664f, 0.30761579f, 0.29784965f, 0.28790409f, + 0.27778511f, 0.26749880f, 0.25705137f, 0.24644909f, 0.23569836f, 0.22480566f, 0.21377754f, 0.20262065f, + 0.19134171f, 0.17994751f, 0.16844492f, 0.15684087f, 0.14514233f, 0.13335637f, 0.12149008f, 0.10955062f, + 0.09754516f, 0.08548094f, 0.07336523f, 0.06120533f, 0.04900857f, 0.03678228f, 0.02453383f, 0.01227061f +}; + +const float FFT_RotVector_32[40] = { + 0.9807852507f, -0.1950903237f, 0.9238796234f, -0.3826834261f, 0.8314696550f, -0.5555702448f, 0.7071067691f, -0.7071067691f, + 0.5555703044f, -0.8314695954f, 0.3826835155f, -0.9238795042f, 0.1950902939f, -0.9807852507f, 0.9238796234f, -0.3826834261f, + 0.7071067691f, -0.7071067691f, 0.3826835155f, -0.9238795042f, -0.3826833963f, -0.9238795042f, -0.7071067691f, -0.7071067691f, + -0.9238795042f, -0.3826834261f, 0.8314696550f, -0.5555702448f, 0.3826835155f, -0.9238795042f, -0.1950902939f, -0.9807852507f, + -0.7071067691f, -0.7071067691f, -0.9807852507f, -0.1950903237f, -0.9238796234f, 0.3826834261f, -0.5555703044f, 0.8314695954f +}; + +const float FFT_RotVector_256[448] = { + 1.0000000000f, -0.0000000000f, 0.9996988177f, -0.0245412290f, 0.9987954497f, -0.0490676761f, 0.9972904325f, -0.0735645667f, + 0.9951847196f, -0.0980171412f, 0.9924795628f, -0.1224106774f, 0.9891765118f, -0.1467304677f, 0.9852776527f, -0.1709618866f, + 0.9807852507f, -0.1950903237f, 0.9757021070f, -0.2191012353f, 0.9700312614f, -0.2429801822f, 0.9637760520f, -0.2667127550f, + 0.9569403529f, -0.2902846634f, 0.9495281577f, -0.3136817515f, 0.9415440559f, -0.3368898630f, 0.9329928160f, -0.3598950505f, + 0.9238795042f, -0.3826834261f, 0.9142097831f, -0.4052413106f, 0.9039893150f, -0.4275550842f, 0.8932242990f, -0.4496113360f, + 0.8819212914f, -0.4713967443f, 0.8700869679f, -0.4928981960f, 0.8577286005f, -0.5141027570f, 0.8448535800f, -0.5349976420f, + 0.8314695954f, -0.5555702448f, 0.8175848126f, -0.5758081675f, 0.8032075167f, -0.5956993103f, 0.7883464098f, -0.6152315736f, + 0.7730104327f, -0.6343932748f, 0.7572088242f, -0.6531728506f, 0.7409511209f, -0.6715589762f, 0.7242470980f, -0.6895405650f, + 1.0000000000f, -0.0000000000f, 0.9987954497f, -0.0490676761f, 0.9951847196f, -0.0980171412f, 0.9891765118f, -0.1467304677f, + 0.9807852507f, -0.1950903237f, 0.9700312614f, -0.2429801822f, 0.9569403529f, -0.2902846634f, 0.9415440559f, -0.3368898630f, + 0.9238795042f, -0.3826834261f, 0.9039893150f, -0.4275550842f, 0.8819212914f, -0.4713967443f, 0.8577286005f, -0.5141027570f, + 0.8314695954f, -0.5555702448f, 0.8032075167f, -0.5956993103f, 0.7730104327f, -0.6343932748f, 0.7409511209f, -0.6715589762f, + 0.7071067691f, -0.7071067691f, 0.6715589762f, -0.7409511209f, 0.6343932748f, -0.7730104327f, 0.5956993103f, -0.8032075167f, + 0.5555702448f, -0.8314695954f, 0.5141027570f, -0.8577286005f, 0.4713967443f, -0.8819212914f, 0.4275550842f, -0.9039893150f, + 0.3826834261f, -0.9238795042f, 0.3368898630f, -0.9415440559f, 0.2902846634f, -0.9569403529f, 0.2429801822f, -0.9700312614f, + 0.1950903237f, -0.9807852507f, 0.1467304677f, -0.9891765118f, 0.0980171412f, -0.9951847196f, 0.0490676761f, -0.9987954497f, + 1.0000000000f, -0.0000000000f, 0.9972904325f, -0.0735645667f, 0.9891765118f, -0.1467304677f, 0.9757021070f, -0.2191012353f, + 0.9569403529f, -0.2902846634f, 0.9329928160f, -0.3598950505f, 0.9039893150f, -0.4275550842f, 0.8700869679f, -0.4928981960f, + 0.8314695954f, -0.5555702448f, 0.7883464098f, -0.6152315736f, 0.7409511209f, -0.6715589762f, 0.6895405650f, -0.7242470980f, + 0.6343932748f, -0.7730104327f, 0.5758081675f, -0.8175848126f, 0.5141027570f, -0.8577286005f, 0.4496113360f, -0.8932242990f, + 0.3826834261f, -0.9238795042f, 0.3136817515f, -0.9495281577f, 0.2429801822f, -0.9700312614f, 0.1709618866f, -0.9852776527f, + 0.0980171412f, -0.9951847196f, 0.0245412290f, -0.9996988177f, -0.0490676761f, -0.9987954497f, -0.1224106774f, -0.9924795628f, + -0.1950903237f, -0.9807852507f, -0.2667127550f, -0.9637760520f, -0.3368898630f, -0.9415440559f, -0.4052413106f, -0.9142097831f, + -0.4713967443f, -0.8819212914f, -0.5349976420f, -0.8448535800f, -0.5956993103f, -0.8032075167f, -0.6531728506f, -0.7572088242f, + 1.0000000000f, -0.0000000000f, 0.9951847196f, -0.0980171412f, 0.9807852507f, -0.1950903237f, 0.9569403529f, -0.2902846634f, + 0.9238795042f, -0.3826834261f, 0.8819212914f, -0.4713967443f, 0.8314695954f, -0.5555702448f, 0.7730104327f, -0.6343932748f, + 0.7071067691f, -0.7071067691f, 0.6343932748f, -0.7730104327f, 0.5555702448f, -0.8314695954f, 0.4713967443f, -0.8819212914f, + 0.3826834261f, -0.9238795042f, 0.2902846634f, -0.9569403529f, 0.1950903237f, -0.9807852507f, 0.0980171412f, -0.9951847196f, + -0.0000000000f, -1.0000000000f, -0.0980171412f, -0.9951847196f, -0.1950903237f, -0.9807852507f, -0.2902846634f, -0.9569403529f, + -0.3826834261f, -0.9238795042f, -0.4713967443f, -0.8819212914f, -0.5555702448f, -0.8314695954f, -0.6343932748f, -0.7730104327f, + -0.7071067691f, -0.7071067691f, -0.7730104327f, -0.6343932748f, -0.8314695954f, -0.5555702448f, -0.8819212914f, -0.4713967443f, + -0.9238795042f, -0.3826834261f, -0.9569403529f, -0.2902846634f, -0.9807852507f, -0.1950903237f, -0.9951847196f, -0.0980171412f, + 1.0000000000f, -0.0000000000f, 0.9924795628f, -0.1224106774f, 0.9700312614f, -0.2429801822f, 0.9329928160f, -0.3598950505f, + 0.8819212914f, -0.4713967443f, 0.8175848126f, -0.5758081675f, 0.7409511209f, -0.6715589762f, 0.6531728506f, -0.7572088242f, + 0.5555702448f, -0.8314695954f, 0.4496113360f, -0.8932242990f, 0.3368898630f, -0.9415440559f, 0.2191012353f, -0.9757021070f, + 0.0980171412f, -0.9951847196f, -0.0245412290f, -0.9996988177f, -0.1467304677f, -0.9891765118f, -0.2667127550f, -0.9637760520f, + -0.3826834261f, -0.9238795042f, -0.4928981960f, -0.8700869679f, -0.5956993103f, -0.8032075167f, -0.6895405650f, -0.7242470980f, + -0.7730104327f, -0.6343932748f, -0.8448535800f, -0.5349976420f, -0.9039893150f, -0.4275550842f, -0.9495281577f, -0.3136817515f, + -0.9807852507f, -0.1950903237f, -0.9972904325f, -0.0735645667f, -0.9987954497f, 0.0490676761f, -0.9852776527f, 0.1709618866f, + -0.9569403529f, 0.2902846634f, -0.9142097831f, 0.4052413106f, -0.8577286005f, 0.5141027570f, -0.7883464098f, 0.6152315736f, + 1.0000000000f, -0.0000000000f, 0.9891765118f, -0.1467304677f, 0.9569403529f, -0.2902846634f, 0.9039893150f, -0.4275550842f, + 0.8314695954f, -0.5555702448f, 0.7409511209f, -0.6715589762f, 0.6343932748f, -0.7730104327f, 0.5141027570f, -0.8577286005f, + 0.3826834261f, -0.9238795042f, 0.2429801822f, -0.9700312614f, 0.0980171412f, -0.9951847196f, -0.0490676761f, -0.9987954497f, + -0.1950903237f, -0.9807852507f, -0.3368898630f, -0.9415440559f, -0.4713967443f, -0.8819212914f, -0.5956993103f, -0.8032075167f, + -0.7071067691f, -0.7071067691f, -0.8032075167f, -0.5956993103f, -0.8819212914f, -0.4713967443f, -0.9415440559f, -0.3368898630f, + -0.9807852507f, -0.1950903237f, -0.9987954497f, -0.0490676761f, -0.9951847196f, 0.0980171412f, -0.9700312614f, 0.2429801822f, + -0.9238795042f, 0.3826834261f, -0.8577286005f, 0.5141027570f, -0.7730104327f, 0.6343932748f, -0.6715589762f, 0.7409511209f, + -0.5555702448f, 0.8314695954f, -0.4275550842f, 0.9039893150f, -0.2902846634f, 0.9569403529f, -0.1467304677f, 0.9891765118f, + 1.0000000000f, -0.0000000000f, 0.9852776527f, -0.1709618866f, 0.9415440559f, -0.3368898630f, 0.8700869679f, -0.4928981960f, + 0.7730104327f, -0.6343932748f, 0.6531728506f, -0.7572088242f, 0.5141027570f, -0.8577286005f, 0.3598950505f, -0.9329928160f, + 0.1950903237f, -0.9807852507f, 0.0245412290f, -0.9996988177f, -0.1467304677f, -0.9891765118f, -0.3136817515f, -0.9495281577f, + -0.4713967443f, -0.8819212914f, -0.6152315736f, -0.7883464098f, -0.7409511209f, -0.6715589762f, -0.8448535800f, -0.5349976420f, + -0.9238795042f, -0.3826834261f, -0.9757021070f, -0.2191012353f, -0.9987954497f, -0.0490676761f, -0.9924795628f, 0.1224106774f, + -0.9569403529f, 0.2902846634f, -0.8932242990f, 0.4496113360f, -0.8032075167f, 0.5956993103f, -0.6895405650f, 0.7242470980f, + -0.5555702448f, 0.8314695954f, -0.4052413106f, 0.9142097831f, -0.2429801822f, 0.9700312614f, -0.0735645667f, 0.9972904325f, + 0.0980171412f, 0.9951847196f, 0.2667127550f, 0.9637760520f, 0.4275550842f, 0.9039893150f, 0.5758081675f, 0.8175848126f +}; + +const float FFT_RotVector_400[760] = { + 1.0000000000f, -0.0000000000f, 0.9995065331f, -0.0314107575f, 0.9980267286f, -0.0627905205f, 0.9955619574f, -0.0941083133f, + 0.9921147227f, -0.1253332347f, 0.9876883626f, -0.1564344615f, 0.9822872281f, -0.1873813123f, 0.9759167433f, -0.2181432396f, + 0.9685831666f, -0.2486898899f, 0.9602937102f, -0.2789911032f, 0.9510565400f, -0.3090170026f, 0.9408807755f, -0.3387379348f, + 0.9297764897f, -0.3681245446f, 0.9177546501f, -0.3971478939f, 0.9048270583f, -0.4257792830f, 0.8910065293f, -0.4539904892f, + 0.8763066530f, -0.4817536771f, 0.8607420325f, -0.5090414286f, 0.8443279266f, -0.5358268023f, 0.8270805478f, -0.5620833635f, + 1.0000000000f, -0.0000000000f, 0.9980267286f, -0.0627905205f, 0.9921147227f, -0.1253332347f, 0.9822872281f, -0.1873813123f, + 0.9685831666f, -0.2486898899f, 0.9510565400f, -0.3090170026f, 0.9297764897f, -0.3681245446f, 0.9048270583f, -0.4257792830f, + 0.8763066530f, -0.4817536771f, 0.8443279266f, -0.5358268023f, 0.8090170026f, -0.5877852440f, 0.7705132365f, -0.6374239922f, + 0.7289686203f, -0.6845471263f, 0.6845471263f, -0.7289686203f, 0.6374239922f, -0.7705132365f, 0.5877852440f, -0.8090170026f, + 0.5358268023f, -0.8443279266f, 0.4817536771f, -0.8763066530f, 0.4257792830f, -0.9048270583f, 0.3681245446f, -0.9297764897f, + 1.0000000000f, -0.0000000000f, 0.9955619574f, -0.0941083133f, 0.9822872281f, -0.1873813123f, 0.9602937102f, -0.2789911032f, + 0.9297764897f, -0.3681245446f, 0.8910065293f, -0.4539904892f, 0.8443279266f, -0.5358268023f, 0.7901549935f, -0.6129070520f, + 0.7289686203f, -0.6845471263f, 0.6613118649f, -0.7501110435f, 0.5877852440f, -0.8090170026f, 0.5090414286f, -0.8607420325f, + 0.4257792830f, -0.9048270583f, 0.3387379348f, -0.9408807755f, 0.2486898899f, -0.9685831666f, 0.1564344615f, -0.9876883626f, + 0.0627905205f, -0.9980267286f, -0.0314107575f, -0.9995065331f, -0.1253332347f, -0.9921147227f, -0.2181432396f, -0.9759167433f, + 1.0000000000f, -0.0000000000f, 0.9921147227f, -0.1253332347f, 0.9685831666f, -0.2486898899f, 0.9297764897f, -0.3681245446f, + 0.8763066530f, -0.4817536771f, 0.8090170026f, -0.5877852440f, 0.7289686203f, -0.6845471263f, 0.6374239922f, -0.7705132365f, + 0.5358268023f, -0.8443279266f, 0.4257792830f, -0.9048270583f, 0.3090170026f, -0.9510565400f, 0.1873813123f, -0.9822872281f, + 0.0627905205f, -0.9980267286f, -0.0627905205f, -0.9980267286f, -0.1873813123f, -0.9822872281f, -0.3090170026f, -0.9510565400f, + -0.4257792830f, -0.9048270583f, -0.5358268023f, -0.8443279266f, -0.6374239922f, -0.7705132365f, -0.7289686203f, -0.6845471263f, + 1.0000000000f, -0.0000000000f, 0.9876883626f, -0.1564344615f, 0.9510565400f, -0.3090170026f, 0.8910065293f, -0.4539904892f, + 0.8090170026f, -0.5877852440f, 0.7071067691f, -0.7071067691f, 0.5877852440f, -0.8090170026f, 0.4539904892f, -0.8910065293f, + 0.3090170026f, -0.9510565400f, 0.1564344615f, -0.9876883626f, -0.0000000000f, -1.0000000000f, -0.1564344615f, -0.9876883626f, + -0.3090170026f, -0.9510565400f, -0.4539904892f, -0.8910065293f, -0.5877852440f, -0.8090170026f, -0.7071067691f, -0.7071067691f, + -0.8090170026f, -0.5877852440f, -0.8910065293f, -0.4539904892f, -0.9510565400f, -0.3090170026f, -0.9876883626f, -0.1564344615f, + 1.0000000000f, -0.0000000000f, 0.9822872281f, -0.1873813123f, 0.9297764897f, -0.3681245446f, 0.8443279266f, -0.5358268023f, + 0.7289686203f, -0.6845471263f, 0.5877852440f, -0.8090170026f, 0.4257792830f, -0.9048270583f, 0.2486898899f, -0.9685831666f, + 0.0627905205f, -0.9980267286f, -0.1253332347f, -0.9921147227f, -0.3090170026f, -0.9510565400f, -0.4817536771f, -0.8763066530f, + -0.6374239922f, -0.7705132365f, -0.7705132365f, -0.6374239922f, -0.8763066530f, -0.4817536771f, -0.9510565400f, -0.3090170026f, + -0.9921147227f, -0.1253332347f, -0.9980267286f, 0.0627905205f, -0.9685831666f, 0.2486898899f, -0.9048270583f, 0.4257792830f, + 1.0000000000f, -0.0000000000f, 0.9759167433f, -0.2181432396f, 0.9048270583f, -0.4257792830f, 0.7901549935f, -0.6129070520f, + 0.6374239922f, -0.7705132365f, 0.4539904892f, -0.8910065293f, 0.2486898899f, -0.9685831666f, 0.0314107575f, -0.9995065331f, + -0.1873813123f, -0.9822872281f, -0.3971478939f, -0.9177546501f, -0.5877852440f, -0.8090170026f, -0.7501110435f, -0.6613118649f, + -0.8763066530f, -0.4817536771f, -0.9602937102f, -0.2789911032f, -0.9980267286f, -0.0627905205f, -0.9876883626f, 0.1564344615f, + -0.9297764897f, 0.3681245446f, -0.8270805478f, 0.5620833635f, -0.6845471263f, 0.7289686203f, -0.5090414286f, 0.8607420325f, + 1.0000000000f, -0.0000000000f, 0.9685831666f, -0.2486898899f, 0.8763066530f, -0.4817536771f, 0.7289686203f, -0.6845471263f, + 0.5358268023f, -0.8443279266f, 0.3090170026f, -0.9510565400f, 0.0627905205f, -0.9980267286f, -0.1873813123f, -0.9822872281f, + -0.4257792830f, -0.9048270583f, -0.6374239922f, -0.7705132365f, -0.8090170026f, -0.5877852440f, -0.9297764897f, -0.3681245446f, + -0.9921147227f, -0.1253332347f, -0.9921147227f, 0.1253332347f, -0.9297764897f, 0.3681245446f, -0.8090170026f, 0.5877852440f, + -0.6374239922f, 0.7705132365f, -0.4257792830f, 0.9048270583f, -0.1873813123f, 0.9822872281f, 0.0627905205f, 0.9980267286f, + 1.0000000000f, -0.0000000000f, 0.9602937102f, -0.2789911032f, 0.8443279266f, -0.5358268023f, 0.6613118649f, -0.7501110435f, + 0.4257792830f, -0.9048270583f, 0.1564344615f, -0.9876883626f, -0.1253332347f, -0.9921147227f, -0.3971478939f, -0.9177546501f, + -0.6374239922f, -0.7705132365f, -0.8270805478f, -0.5620833635f, -0.9510565400f, -0.3090170026f, -0.9995065331f, -0.0314107575f, + -0.9685831666f, 0.2486898899f, -0.8607420325f, 0.5090414286f, -0.6845471263f, 0.7289686203f, -0.4539904892f, 0.8910065293f, + -0.1873813123f, 0.9822872281f, 0.0941083133f, 0.9955619574f, 0.3681245446f, 0.9297764897f, 0.6129070520f, 0.7901549935f, + 1.0000000000f, -0.0000000000f, 0.9998766184f, -0.0157073177f, 0.9995065331f, -0.0314107575f, 0.9988898635f, -0.0471064523f, + 0.9980267286f, -0.0627905205f, 0.9969173074f, -0.0784590989f, 0.9955619574f, -0.0941083133f, 0.9939609766f, -0.1097343117f, + 0.9921147227f, -0.1253332347f, 0.9900236726f, -0.1409012377f, 0.9876883626f, -0.1564344615f, 0.9851093292f, -0.1719291061f, + 0.9822872281f, -0.1873813123f, 0.9792228341f, -0.2027872950f, 0.9759167433f, -0.2181432396f, 0.9723699093f, -0.2334453613f, + 0.9685831666f, -0.2486898899f, 0.9645574093f, -0.2638730407f, 0.9602937102f, -0.2789911032f, 0.9557930231f, -0.2940403223f, + 1.0000000000f, -0.0000000000f, 0.9988898635f, -0.0471064523f, 0.9955619574f, -0.0941083133f, 0.9900236726f, -0.1409012377f, + 0.9822872281f, -0.1873813123f, 0.9723699093f, -0.2334453613f, 0.9602937102f, -0.2789911032f, 0.9460853338f, -0.3239174187f, + 0.9297764897f, -0.3681245446f, 0.9114032984f, -0.4115143716f, 0.8910065293f, -0.4539904892f, 0.8686315417f, -0.4954586625f, + 0.8443279266f, -0.5358268023f, 0.8181497455f, -0.5750052333f, 0.7901549935f, -0.6129070520f, 0.7604059577f, -0.6494480371f, + 0.7289686203f, -0.6845471263f, 0.6959127784f, -0.7181262970f, 0.6613118649f, -0.7501110435f, 0.6252426505f, -0.7804304361f, + 1.0000000000f, -0.0000000000f, 0.9969173074f, -0.0784590989f, 0.9876883626f, -0.1564344615f, 0.9723699093f, -0.2334453613f, + 0.9510565400f, -0.3090170026f, 0.9238795042f, -0.3826834261f, 0.8910065293f, -0.4539904892f, 0.8526401520f, -0.5224985480f, + 0.8090170026f, -0.5877852440f, 0.7604059577f, -0.6494480371f, 0.7071067691f, -0.7071067691f, 0.6494480371f, -0.7604059577f, + 0.5877852440f, -0.8090170026f, 0.5224985480f, -0.8526401520f, 0.4539904892f, -0.8910065293f, 0.3826834261f, -0.9238795042f, + 0.3090170026f, -0.9510565400f, 0.2334453613f, -0.9723699093f, 0.1564344615f, -0.9876883626f, 0.0784590989f, -0.9969173074f, + 1.0000000000f, -0.0000000000f, 0.9939609766f, -0.1097343117f, 0.9759167433f, -0.2181432396f, 0.9460853338f, -0.3239174187f, + 0.9048270583f, -0.4257792830f, 0.8526401520f, -0.5224985480f, 0.7901549935f, -0.6129070520f, 0.7181262970f, -0.6959127784f, + 0.6374239922f, -0.7705132365f, 0.5490227938f, -0.8358073831f, 0.4539904892f, -0.8910065293f, 0.3534748554f, -0.9354440570f, + 0.2486898899f, -0.9685831666f, 0.1409012377f, -0.9900236726f, 0.0314107575f, -0.9995065331f, -0.0784590989f, -0.9969173074f, + -0.1873813123f, -0.9822872281f, -0.2940403223f, -0.9557930231f, -0.3971478939f, -0.9177546501f, -0.4954586625f, -0.8686315417f, + 1.0000000000f, -0.0000000000f, 0.9900236726f, -0.1409012377f, 0.9602937102f, -0.2789911032f, 0.9114032984f, -0.4115143716f, + 0.8443279266f, -0.5358268023f, 0.7604059577f, -0.6494480371f, 0.6613118649f, -0.7501110435f, 0.5490227938f, -0.8358073831f, + 0.4257792830f, -0.9048270583f, 0.2940403223f, -0.9557930231f, 0.1564344615f, -0.9876883626f, 0.0157073177f, -0.9998766184f, + -0.1253332347f, -0.9921147227f, -0.2638730407f, -0.9645574093f, -0.3971478939f, -0.9177546501f, -0.5224985480f, -0.8526401520f, + -0.6374239922f, -0.7705132365f, -0.7396311164f, -0.6730124950f, -0.8270805478f, -0.5620833635f, -0.8980275989f, -0.4399391711f, + 1.0000000000f, -0.0000000000f, 0.9851093292f, -0.1719291061f, 0.9408807755f, -0.3387379348f, 0.8686315417f, -0.4954586625f, + 0.7705132365f, -0.6374239922f, 0.6494480371f, -0.7604059577f, 0.5090414286f, -0.8607420325f, 0.3534748554f, -0.9354440570f, + 0.1873813123f, -0.9822872281f, 0.0157073177f, -0.9998766184f, -0.1564344615f, -0.9876883626f, -0.3239174187f, -0.9460853338f, + -0.4817536771f, -0.8763066530f, -0.6252426505f, -0.7804304361f, -0.7501110435f, -0.6613118649f, -0.8526401520f, -0.5224985480f, + -0.9297764897f, -0.3681245446f, -0.9792228341f, -0.2027872950f, -0.9995065331f, -0.0314107575f, -0.9900236726f, 0.1409012377f, + 1.0000000000f, -0.0000000000f, 0.9792228341f, -0.2027872950f, 0.9177546501f, -0.3971478939f, 0.8181497455f, -0.5750052333f, + 0.6845471263f, -0.7289686203f, 0.5224985480f, -0.8526401520f, 0.3387379348f, -0.9408807755f, 0.1409012377f, -0.9900236726f, + -0.0627905205f, -0.9980267286f, -0.2638730407f, -0.9645574093f, -0.4539904892f, -0.8910065293f, -0.6252426505f, -0.7804304361f, + -0.7705132365f, -0.6374239922f, -0.8837656379f, -0.4679298103f, -0.9602937102f, -0.2789911032f, -0.9969173074f, -0.0784590989f, + -0.9921147227f, 0.1253332347f, -0.9460853338f, 0.3239174187f, -0.8607420325f, 0.5090414286f, -0.7396311164f, 0.6730124950f, + 1.0000000000f, -0.0000000000f, 0.9723699093f, -0.2334453613f, 0.8910065293f, -0.4539904892f, 0.7604059577f, -0.6494480371f, + 0.5877852440f, -0.8090170026f, 0.3826834261f, -0.9238795042f, 0.1564344615f, -0.9876883626f, -0.0784590989f, -0.9969173074f, + -0.3090170026f, -0.9510565400f, -0.5224985480f, -0.8526401520f, -0.7071067691f, -0.7071067691f, -0.8526401520f, -0.5224985480f, + -0.9510565400f, -0.3090170026f, -0.9969173074f, -0.0784590989f, -0.9876883626f, 0.1564344615f, -0.9238795042f, 0.3826834261f, + -0.8090170026f, 0.5877852440f, -0.6494480371f, 0.7604059577f, -0.4539904892f, 0.8910065293f, -0.2334453613f, 0.9723699093f, + 1.0000000000f, -0.0000000000f, 0.9645574093f, -0.2638730407f, 0.8607420325f, -0.5090414286f, 0.6959127784f, -0.7181262970f, + 0.4817536771f, -0.8763066530f, 0.2334453613f, -0.9723699093f, -0.0314107575f, -0.9995065331f, -0.2940403223f, -0.9557930231f, + -0.5358268023f, -0.8443279266f, -0.7396311164f, -0.6730124950f, -0.8910065293f, -0.4539904892f, -0.9792228341f, -0.2027872950f, + -0.9980267286f, 0.0627905205f, -0.9460853338f, 0.3239174187f, -0.8270805478f, 0.5620833635f, -0.6494480371f, 0.7604059577f, + -0.4257792830f, 0.9048270583f, -0.1719291061f, 0.9851093292f, 0.0941083133f, 0.9955619574f, 0.3534748554f, 0.9354440570f, + 1.0000000000f, -0.0000000000f, 0.9557930231f, -0.2940403223f, 0.8270805478f, -0.5620833635f, 0.6252426505f, -0.7804304361f, + 0.3681245446f, -0.9297764897f, 0.0784590989f, -0.9969173074f, -0.2181432396f, -0.9759167433f, -0.4954586625f, -0.8686315417f, + -0.7289686203f, -0.6845471263f, -0.8980275989f, -0.4399391711f, -0.9876883626f, -0.1564344615f, -0.9900236726f, 0.1409012377f, + -0.9048270583f, 0.4257792830f, -0.7396311164f, 0.6730124950f, -0.5090414286f, 0.8607420325f, -0.2334453613f, 0.9723699093f, + 0.0627905205f, 0.9980267286f, 0.3534748554f, 0.9354440570f, 0.6129070520f, 0.7901549935f, 0.8181497455f, 0.5750052333f +}; + +const float FFT_RotVector_600[1140] = { + 1.0000000000f, -0.0000000000f, 0.9997806549f, -0.0209424198f, + 0.9991228580f, -0.0418756530f, 0.9980267286f, -0.0627905205f, 0.9964928627f, -0.0836778432f, 0.9945219159f, -0.1045284644f, + 0.9921147227f, -0.1253332347f, 0.9892723560f, -0.1460830271f, 0.9859960079f, -0.1667687446f, 0.9822872281f, -0.1873813123f, + 0.9781476259f, -0.2079116851f, 0.9735789299f, -0.2283508629f, 0.9685831666f, -0.2486898899f, 0.9631625414f, -0.2689198256f, + 0.9573194981f, -0.2890318036f, 0.9510565400f, -0.3090170026f, 0.9443763494f, -0.3288666606f, 0.9372819662f, -0.3485720456f, + 0.9297764897f, -0.3681245446f, 0.9218631387f, -0.3875155747f, 0.9135454297f, -0.4067366421f, 0.9048270583f, -0.4257792830f, + 0.8957117796f, -0.4446351826f, 0.8862035871f, -0.4632960260f, 0.8763066530f, -0.4817536771f, 0.8660253882f, -0.5000000000f, + 0.8553642631f, -0.5180270076f, 0.8443279266f, -0.5358268023f, 0.8329212666f, -0.5533915758f, 0.8211492300f, -0.5707135797f, + 1.0000000000f, -0.0000000000f, 0.9991228580f, -0.0418756530f, 0.9964928627f, -0.0836778432f, 0.9921147227f, -0.1253332347f, + 0.9859960079f, -0.1667687446f, 0.9781476259f, -0.2079116851f, 0.9685831666f, -0.2486898899f, 0.9573194981f, -0.2890318036f, + 0.9443763494f, -0.3288666606f, 0.9297764897f, -0.3681245446f, 0.9135454297f, -0.4067366421f, 0.8957117796f, -0.4446351826f, + 0.8763066530f, -0.4817536771f, 0.8553642631f, -0.5180270076f, 0.8329212666f, -0.5533915758f, 0.8090170026f, -0.5877852440f, + 0.7836934328f, -0.6211477518f, 0.7569950819f, -0.6534206271f, 0.7289686203f, -0.6845471263f, 0.6996633410f, -0.7144726515f, + 0.6691306233f, -0.7431448102f, 0.6374239922f, -0.7705132365f, 0.6045991182f, -0.7965298891f, 0.5707135797f, -0.8211492300f, + 0.5358268023f, -0.8443279266f, 0.5000000000f, -0.8660253882f, 0.4632960260f, -0.8862035871f, 0.4257792830f, -0.9048270583f, + 0.3875155747f, -0.9218631387f, 0.3485720456f, -0.9372819662f, 1.0000000000f, -0.0000000000f, 0.9980267286f, -0.0627905205f, + 0.9921147227f, -0.1253332347f, 0.9822872281f, -0.1873813123f, 0.9685831666f, -0.2486898899f, 0.9510565400f, -0.3090170026f, + 0.9297764897f, -0.3681245446f, 0.9048270583f, -0.4257792830f, 0.8763066530f, -0.4817536771f, 0.8443279266f, -0.5358268023f, + 0.8090170026f, -0.5877852440f, 0.7705132365f, -0.6374239922f, 0.7289686203f, -0.6845471263f, 0.6845471263f, -0.7289686203f, + 0.6374239922f, -0.7705132365f, 0.5877852440f, -0.8090170026f, 0.5358268023f, -0.8443279266f, 0.4817536771f, -0.8763066530f, + 0.4257792830f, -0.9048270583f, 0.3681245446f, -0.9297764897f, 0.3090170026f, -0.9510565400f, 0.2486898899f, -0.9685831666f, + 0.1873813123f, -0.9822872281f, 0.1253332347f, -0.9921147227f, 0.0627905205f, -0.9980267286f, -0.0000000000f, -1.0000000000f, + -0.0627905205f, -0.9980267286f, -0.1253332347f, -0.9921147227f, -0.1873813123f, -0.9822872281f, -0.2486898899f, -0.9685831666f, + 1.0000000000f, -0.0000000000f, 0.9964928627f, -0.0836778432f, 0.9859960079f, -0.1667687446f, 0.9685831666f, -0.2486898899f, + 0.9443763494f, -0.3288666606f, 0.9135454297f, -0.4067366421f, 0.8763066530f, -0.4817536771f, 0.8329212666f, -0.5533915758f, + 0.7836934328f, -0.6211477518f, 0.7289686203f, -0.6845471263f, 0.6691306233f, -0.7431448102f, 0.6045991182f, -0.7965298891f, + 0.5358268023f, -0.8443279266f, 0.4632960260f, -0.8862035871f, 0.3875155747f, -0.9218631387f, 0.3090170026f, -0.9510565400f, + 0.2283508629f, -0.9735789299f, 0.1460830271f, -0.9892723560f, 0.0627905205f, -0.9980267286f, -0.0209424198f, -0.9997806549f, + -0.1045284644f, -0.9945219159f, -0.1873813123f, -0.9822872281f, -0.2689198256f, -0.9631625414f, -0.3485720456f, -0.9372819662f, + -0.4257792830f, -0.9048270583f, -0.5000000000f, -0.8660253882f, -0.5707135797f, -0.8211492300f, -0.6374239922f, -0.7705132365f, + -0.6996633410f, -0.7144726515f, -0.7569950819f, -0.6534206271f, 1.0000000000f, -0.0000000000f, 0.9945219159f, -0.1045284644f, + 0.9781476259f, -0.2079116851f, 0.9510565400f, -0.3090170026f, 0.9135454297f, -0.4067366421f, 0.8660253882f, -0.5000000000f, + 0.8090170026f, -0.5877852440f, 0.7431448102f, -0.6691306233f, 0.6691306233f, -0.7431448102f, 0.5877852440f, -0.8090170026f, + 0.5000000000f, -0.8660253882f, 0.4067366421f, -0.9135454297f, 0.3090170026f, -0.9510565400f, 0.2079116851f, -0.9781476259f, + 0.1045284644f, -0.9945219159f, -0.0000000000f, -1.0000000000f, -0.1045284644f, -0.9945219159f, -0.2079116851f, -0.9781476259f, + -0.3090170026f, -0.9510565400f, -0.4067366421f, -0.9135454297f, -0.5000000000f, -0.8660253882f, -0.5877852440f, -0.8090170026f, + -0.6691306233f, -0.7431448102f, -0.7431448102f, -0.6691306233f, -0.8090170026f, -0.5877852440f, -0.8660253882f, -0.5000000000f, + -0.9135454297f, -0.4067366421f, -0.9510565400f, -0.3090170026f, -0.9781476259f, -0.2079116851f, -0.9945219159f, -0.1045284644f, + 1.0000000000f, -0.0000000000f, 0.9921147227f, -0.1253332347f, 0.9685831666f, -0.2486898899f, 0.9297764897f, -0.3681245446f, + 0.8763066530f, -0.4817536771f, 0.8090170026f, -0.5877852440f, 0.7289686203f, -0.6845471263f, 0.6374239922f, -0.7705132365f, + 0.5358268023f, -0.8443279266f, 0.4257792830f, -0.9048270583f, 0.3090170026f, -0.9510565400f, 0.1873813123f, -0.9822872281f, + 0.0627905205f, -0.9980267286f, -0.0627905205f, -0.9980267286f, -0.1873813123f, -0.9822872281f, -0.3090170026f, -0.9510565400f, + -0.4257792830f, -0.9048270583f, -0.5358268023f, -0.8443279266f, -0.6374239922f, -0.7705132365f, -0.7289686203f, -0.6845471263f, + -0.8090170026f, -0.5877852440f, -0.8763066530f, -0.4817536771f, -0.9297764897f, -0.3681245446f, -0.9685831666f, -0.2486898899f, + -0.9921147227f, -0.1253332347f, -1.0000000000f, 0.0000000000f, -0.9921147227f, 0.1253332347f, -0.9685831666f, 0.2486898899f, + -0.9297764897f, 0.3681245446f, -0.8763066530f, 0.4817536771f, 1.0000000000f, -0.0000000000f, 0.9892723560f, -0.1460830271f, + 0.9573194981f, -0.2890318036f, 0.9048270583f, -0.4257792830f, 0.8329212666f, -0.5533915758f, 0.7431448102f, -0.6691306233f, + 0.6374239922f, -0.7705132365f, 0.5180270076f, -0.8553642631f, 0.3875155747f, -0.9218631387f, 0.2486898899f, -0.9685831666f, + 0.1045284644f, -0.9945219159f, -0.0418756530f, -0.9991228580f, -0.1873813123f, -0.9822872281f, -0.3288666606f, -0.9443763494f, + -0.4632960260f, -0.8862035871f, -0.5877852440f, -0.8090170026f, -0.6996633410f, -0.7144726515f, -0.7965298891f, -0.6045991182f, + -0.8763066530f, -0.4817536771f, -0.9372819662f, -0.3485720456f, -0.9781476259f, -0.2079116851f, -0.9980267286f, -0.0627905205f, + -0.9964928627f, 0.0836778432f, -0.9735789299f, 0.2283508629f, -0.9297764897f, 0.3681245446f, -0.8660253882f, 0.5000000000f, + -0.7836934328f, 0.6211477518f, -0.6845471263f, 0.7289686203f, -0.5707135797f, 0.8211492300f, -0.4446351826f, 0.8957117796f, + 1.0000000000f, -0.0000000000f, 0.9859960079f, -0.1667687446f, 0.9443763494f, -0.3288666606f, 0.8763066530f, -0.4817536771f, + 0.7836934328f, -0.6211477518f, 0.6691306233f, -0.7431448102f, 0.5358268023f, -0.8443279266f, 0.3875155747f, -0.9218631387f, + 0.2283508629f, -0.9735789299f, 0.0627905205f, -0.9980267286f, -0.1045284644f, -0.9945219159f, -0.2689198256f, -0.9631625414f, + -0.4257792830f, -0.9048270583f, -0.5707135797f, -0.8211492300f, -0.6996633410f, -0.7144726515f, -0.8090170026f, -0.5877852440f, + -0.8957117796f, -0.4446351826f, -0.9573194981f, -0.2890318036f, -0.9921147227f, -0.1253332347f, -0.9991228580f, 0.0418756530f, + -0.9781476259f, 0.2079116851f, -0.9297764897f, 0.3681245446f, -0.8553642631f, 0.5180270076f, -0.7569950819f, 0.6534206271f, + -0.6374239922f, 0.7705132365f, -0.5000000000f, 0.8660253882f, -0.3485720456f, 0.9372819662f, -0.1873813123f, 0.9822872281f, + -0.0209424198f, 0.9997806549f, 0.1460830271f, 0.9892723560f, 1.0000000000f, -0.0000000000f, 0.9822872281f, -0.1873813123f, + 0.9297764897f, -0.3681245446f, 0.8443279266f, -0.5358268023f, 0.7289686203f, -0.6845471263f, 0.5877852440f, -0.8090170026f, + 0.4257792830f, -0.9048270583f, 0.2486898899f, -0.9685831666f, 0.0627905205f, -0.9980267286f, -0.1253332347f, -0.9921147227f, + -0.3090170026f, -0.9510565400f, -0.4817536771f, -0.8763066530f, -0.6374239922f, -0.7705132365f, -0.7705132365f, -0.6374239922f, + -0.8763066530f, -0.4817536771f, -0.9510565400f, -0.3090170026f, -0.9921147227f, -0.1253332347f, -0.9980267286f, 0.0627905205f, + -0.9685831666f, 0.2486898899f, -0.9048270583f, 0.4257792830f, -0.8090170026f, 0.5877852440f, -0.6845471263f, 0.7289686203f, + -0.5358268023f, 0.8443279266f, -0.3681245446f, 0.9297764897f, -0.1873813123f, 0.9822872281f, 0.0000000000f, 1.0000000000f, + 0.1873813123f, 0.9822872281f, 0.3681245446f, 0.9297764897f, 0.5358268023f, 0.8443279266f, 0.6845471263f, 0.7289686203f, + 1.0000000000f, -0.0000000000f, 0.9999451637f, -0.0104717845f, 0.9997806549f, -0.0209424198f, 0.9995065331f, -0.0314107575f, + 0.9991228580f, -0.0418756530f, 0.9986295104f, -0.0523359552f, 0.9980267286f, -0.0627905205f, 0.9973144531f, -0.0732381940f, + 0.9964928627f, -0.0836778432f, 0.9955619574f, -0.0941083133f, 0.9945219159f, -0.1045284644f, 0.9933727384f, -0.1149371490f, + 0.9921147227f, -0.1253332347f, 0.9907478690f, -0.1357155740f, 0.9892723560f, -0.1460830271f, 0.9876883626f, -0.1564344615f, + 0.9859960079f, -0.1667687446f, 0.9841955900f, -0.1770847440f, 0.9822872281f, -0.1873813123f, 0.9802711606f, -0.1976573467f, + 0.9781476259f, -0.2079116851f, 0.9759167433f, -0.2181432396f, 0.9735789299f, -0.2283508629f, 0.9711343050f, -0.2385334522f, + 0.9685831666f, -0.2486898899f, 0.9659258127f, -0.2588190436f, 0.9631625414f, -0.2689198256f, 0.9602937102f, -0.2789911032f, + 0.9573194981f, -0.2890318036f, 0.9542403221f, -0.2990407944f, 1.0000000000f, -0.0000000000f, 0.9995065331f, -0.0314107575f, + 0.9980267286f, -0.0627905205f, 0.9955619574f, -0.0941083133f, 0.9921147227f, -0.1253332347f, 0.9876883626f, -0.1564344615f, + 0.9822872281f, -0.1873813123f, 0.9759167433f, -0.2181432396f, 0.9685831666f, -0.2486898899f, 0.9602937102f, -0.2789911032f, + 0.9510565400f, -0.3090170026f, 0.9408807755f, -0.3387379348f, 0.9297764897f, -0.3681245446f, 0.9177546501f, -0.3971478939f, + 0.9048270583f, -0.4257792830f, 0.8910065293f, -0.4539904892f, 0.8763066530f, -0.4817536771f, 0.8607420325f, -0.5090414286f, + 0.8443279266f, -0.5358268023f, 0.8270805478f, -0.5620833635f, 0.8090170026f, -0.5877852440f, 0.7901549935f, -0.6129070520f, + 0.7705132365f, -0.6374239922f, 0.7501110435f, -0.6613118649f, 0.7289686203f, -0.6845471263f, 0.7071067691f, -0.7071067691f, + 0.6845471263f, -0.7289686203f, 0.6613118649f, -0.7501110435f, 0.6374239922f, -0.7705132365f, 0.6129070520f, -0.7901549935f, + 1.0000000000f, -0.0000000000f, 0.9986295104f, -0.0523359552f, 0.9945219159f, -0.1045284644f, 0.9876883626f, -0.1564344615f, + 0.9781476259f, -0.2079116851f, 0.9659258127f, -0.2588190436f, 0.9510565400f, -0.3090170026f, 0.9335803986f, -0.3583679497f, + 0.9135454297f, -0.4067366421f, 0.8910065293f, -0.4539904892f, 0.8660253882f, -0.5000000000f, 0.8386705518f, -0.5446390510f, + 0.8090170026f, -0.5877852440f, 0.7771459818f, -0.6293203831f, 0.7431448102f, -0.6691306233f, 0.7071067691f, -0.7071067691f, + 0.6691306233f, -0.7431448102f, 0.6293203831f, -0.7771459818f, 0.5877852440f, -0.8090170026f, 0.5446390510f, -0.8386705518f, + 0.5000000000f, -0.8660253882f, 0.4539904892f, -0.8910065293f, 0.4067366421f, -0.9135454297f, 0.3583679497f, -0.9335803986f, + 0.3090170026f, -0.9510565400f, 0.2588190436f, -0.9659258127f, 0.2079116851f, -0.9781476259f, 0.1564344615f, -0.9876883626f, + 0.1045284644f, -0.9945219159f, 0.0523359552f, -0.9986295104f, 1.0000000000f, -0.0000000000f, 0.9973144531f, -0.0732381940f, + 0.9892723560f, -0.1460830271f, 0.9759167433f, -0.2181432396f, 0.9573194981f, -0.2890318036f, 0.9335803986f, -0.3583679497f, + 0.9048270583f, -0.4257792830f, 0.8712137938f, -0.4909037650f, 0.8329212666f, -0.5533915758f, 0.7901549935f, -0.6129070520f, + 0.7431448102f, -0.6691306233f, 0.6921432018f, -0.7217602134f, 0.6374239922f, -0.7705132365f, 0.5792811513f, -0.8151277900f, + 0.5180270076f, -0.8553642631f, 0.4539904892f, -0.8910065293f, 0.3875155747f, -0.9218631387f, 0.3189592957f, -0.9477683902f, + 0.2486898899f, -0.9685831666f, 0.1770847440f, -0.9841955900f, 0.1045284644f, -0.9945219159f, 0.0314107575f, -0.9995065331f, + -0.0418756530f, -0.9991228580f, -0.1149371490f, -0.9933727384f, -0.1873813123f, -0.9822872281f, -0.2588190436f, -0.9659258127f, + -0.3288666606f, -0.9443763494f, -0.3971478939f, -0.9177546501f, -0.4632960260f, -0.8862035871f, -0.5269557834f, -0.8498926759f, + 1.0000000000f, -0.0000000000f, 0.9955619574f, -0.0941083133f, 0.9822872281f, -0.1873813123f, 0.9602937102f, -0.2789911032f, + 0.9297764897f, -0.3681245446f, 0.8910065293f, -0.4539904892f, 0.8443279266f, -0.5358268023f, 0.7901549935f, -0.6129070520f, + 0.7289686203f, -0.6845471263f, 0.6613118649f, -0.7501110435f, 0.5877852440f, -0.8090170026f, 0.5090414286f, -0.8607420325f, + 0.4257792830f, -0.9048270583f, 0.3387379348f, -0.9408807755f, 0.2486898899f, -0.9685831666f, 0.1564344615f, -0.9876883626f, + 0.0627905205f, -0.9980267286f, -0.0314107575f, -0.9995065331f, -0.1253332347f, -0.9921147227f, -0.2181432396f, -0.9759167433f, + -0.3090170026f, -0.9510565400f, -0.3971478939f, -0.9177546501f, -0.4817536771f, -0.8763066530f, -0.5620833635f, -0.8270805478f, + -0.6374239922f, -0.7705132365f, -0.7071067691f, -0.7071067691f, -0.7705132365f, -0.6374239922f, -0.8270805478f, -0.5620833635f, + -0.8763066530f, -0.4817536771f, -0.9177546501f, -0.3971478939f, 1.0000000000f, -0.0000000000f, 0.9933727384f, -0.1149371490f, + 0.9735789299f, -0.2283508629f, 0.9408807755f, -0.3387379348f, 0.8957117796f, -0.4446351826f, 0.8386705518f, -0.5446390510f, + 0.7705132365f, -0.6374239922f, 0.6921432018f, -0.7217602134f, 0.6045991182f, -0.7965298891f, 0.5090414286f, -0.8607420325f, + 0.4067366421f, -0.9135454297f, 0.2990407944f, -0.9542403221f, 0.1873813123f, -0.9822872281f, 0.0732381940f, -0.9973144531f, + -0.0418756530f, -0.9991228580f, -0.1564344615f, -0.9876883626f, -0.2689198256f, -0.9631625414f, -0.3778407872f, -0.9258705974f, + -0.4817536771f, -0.8763066530f, -0.5792811513f, -0.8151277900f, -0.6691306233f, -0.7431448102f, -0.7501110435f, -0.6613118649f, + -0.8211492300f, -0.5707135797f, -0.8813034296f, -0.4725507796f, -0.9297764897f, -0.3681245446f, -0.9659258127f, -0.2588190436f, + -0.9892723560f, -0.1460830271f, -0.9995065331f, -0.0314107575f, -0.9964928627f, 0.0836778432f, -0.9802711606f, 0.1976573467f, + 1.0000000000f, -0.0000000000f, 0.9907478690f, -0.1357155740f, 0.9631625414f, -0.2689198256f, 0.9177546501f, -0.3971478939f, + 0.8553642631f, -0.5180270076f, 0.7771459818f, -0.6293203831f, 0.6845471263f, -0.7289686203f, 0.5792811513f, -0.8151277900f, + 0.4632960260f, -0.8862035871f, 0.3387379348f, -0.9408807755f, 0.2079116851f, -0.9781476259f, 0.0732381940f, -0.9973144531f, + -0.0627905205f, -0.9980267286f, -0.1976573467f, -0.9802711606f, -0.3288666606f, -0.9443763494f, -0.4539904892f, -0.8910065293f, + -0.5707135797f, -0.8211492300f, -0.6768759489f, -0.7360970974f, -0.7705132365f, -0.6374239922f, -0.8498926759f, -0.5269557834f, + -0.9135454297f, -0.4067366421f, -0.9602937102f, -0.2789911032f, -0.9892723560f, -0.1460830271f, -0.9999451637f, -0.0104717845f, + -0.9921147227f, 0.1253332347f, -0.9659258127f, 0.2588190436f, -0.9218631387f, 0.3875155747f, -0.8607420325f, 0.5090414286f, + -0.7836934328f, 0.6211477518f, -0.6921432018f, 0.7217602134f, 1.0000000000f, -0.0000000000f, 0.9876883626f, -0.1564344615f, + 0.9510565400f, -0.3090170026f, 0.8910065293f, -0.4539904892f, 0.8090170026f, -0.5877852440f, 0.7071067691f, -0.7071067691f, + 0.5877852440f, -0.8090170026f, 0.4539904892f, -0.8910065293f, 0.3090170026f, -0.9510565400f, 0.1564344615f, -0.9876883626f, + -0.0000000000f, -1.0000000000f, -0.1564344615f, -0.9876883626f, -0.3090170026f, -0.9510565400f, -0.4539904892f, -0.8910065293f, + -0.5877852440f, -0.8090170026f, -0.7071067691f, -0.7071067691f, -0.8090170026f, -0.5877852440f, -0.8910065293f, -0.4539904892f, + -0.9510565400f, -0.3090170026f, -0.9876883626f, -0.1564344615f, -1.0000000000f, 0.0000000000f, -0.9876883626f, 0.1564344615f, + -0.9510565400f, 0.3090170026f, -0.8910065293f, 0.4539904892f, -0.8090170026f, 0.5877852440f, -0.7071067691f, 0.7071067691f, + -0.5877852440f, 0.8090170026f, -0.4539904892f, 0.8910065293f, -0.3090170026f, 0.9510565400f, -0.1564344615f, 0.9876883626f, + 1.0000000000f, -0.0000000000f, 0.9841955900f, -0.1770847440f, 0.9372819662f, -0.3485720456f, 0.8607420325f, -0.5090414286f, + 0.7569950819f, -0.6534206271f, 0.6293203831f, -0.7771459818f, 0.4817536771f, -0.8763066530f, 0.3189592957f, -0.9477683902f, + 0.1460830271f, -0.9892723560f, -0.0314107575f, -0.9995065331f, -0.2079116851f, -0.9781476259f, -0.3778407872f, -0.9258705974f, + -0.5358268023f, -0.8443279266f, -0.6768759489f, -0.7360970974f, -0.7965298891f, -0.6045991182f, -0.8910065293f, -0.4539904892f, + -0.9573194981f, -0.2890318036f, -0.9933727384f, -0.1149371490f, -0.9980267286f, 0.0627905205f, -0.9711343050f, 0.2385334522f, + -0.9135454297f, 0.4067366421f, -0.8270805478f, 0.5620833635f, -0.7144726515f, 0.6996633410f, -0.5792811513f, 0.8151277900f, + -0.4257792830f, 0.9048270583f, -0.2588190436f, 0.9659258127f, -0.0836778432f, 0.9964928627f, 0.0941083133f, 0.9955619574f, + 0.2689198256f, 0.9631625414f, 0.4352310896f, 0.9003187418f, 1.0000000000f, -0.0000000000f, 0.9802711606f, -0.1976573467f, + 0.9218631387f, -0.3875155747f, 0.8270805478f, -0.5620833635f, 0.6996633410f, -0.7144726515f, 0.5446390510f, -0.8386705518f, + 0.3681245446f, -0.9297764897f, 0.1770847440f, -0.9841955900f, -0.0209424198f, -0.9997806549f, -0.2181432396f, -0.9759167433f, + -0.4067366421f, -0.9135454297f, -0.5792811513f, -0.8151277900f, -0.7289686203f, -0.6845471263f, -0.8498926759f, -0.5269557834f, + -0.9372819662f, -0.3485720456f, -0.9876883626f, -0.1564344615f, -0.9991228580f, 0.0418756530f, -0.9711343050f, 0.2385334522f, + -0.9048270583f, 0.4257792830f, -0.8028174639f, 0.5962249041f, -0.6691306233f, 0.7431448102f, -0.5090414286f, 0.8607420325f, + -0.3288666606f, 0.9443763494f, -0.1357155740f, 0.9907478690f, 0.0627905205f, 0.9980267286f, 0.2588190436f, 0.9659258127f, + 0.4446351826f, 0.8957117796f, 0.6129070520f, 0.7901549935f, 0.7569950819f, 0.6534206271f, 0.8712137938f, 0.4909037650f +}; + +const float FFT_RotVector_640[1240] = { + 1.0000000000f, -0.0000000000f, 0.9998072386f, -0.0196336918f, 0.9992290139f, -0.0392598175f, 0.9982656240f, -0.0588708036f, + 0.9969173074f, -0.0784590989f, 0.9951847196f, -0.0980171412f, 0.9930684566f, -0.1175373942f, 0.9905693531f, -0.1370123476f, + 0.9876883626f, -0.1564344615f, 0.9844265580f, -0.1757962853f, 0.9807852507f, -0.1950903237f, 0.9767658710f, -0.2143091559f, + 0.9723699093f, -0.2334453613f, 0.9675990939f, -0.2524915636f, 0.9624552131f, -0.2714404464f, 0.9569403529f, -0.2902846634f, + 0.9510565400f, -0.3090170026f, 0.9448060393f, -0.3276301920f, 0.9381913543f, -0.3461170495f, 0.9312149286f, -0.3644705117f, + 1.0000000000f, -0.0000000000f, 0.9992290139f, -0.0392598175f, 0.9969173074f, -0.0784590989f, 0.9930684566f, -0.1175373942f, + 0.9876883626f, -0.1564344615f, 0.9807852507f, -0.1950903237f, 0.9723699093f, -0.2334453613f, 0.9624552131f, -0.2714404464f, + 0.9510565400f, -0.3090170026f, 0.9381913543f, -0.3461170495f, 0.9238795042f, -0.3826834261f, 0.9081431627f, -0.4186597466f, + 0.8910065293f, -0.4539904892f, 0.8724960089f, -0.4886212349f, 0.8526401520f, -0.5224985480f, 0.8314695954f, -0.5555702448f, + 0.8090170026f, -0.5877852440f, 0.7853169441f, -0.6190939546f, 0.7604059577f, -0.6494480371f, 0.7343224883f, -0.6788007617f, + 1.0000000000f, -0.0000000000f, 0.9982656240f, -0.0588708036f, 0.9930684566f, -0.1175373942f, 0.9844265580f, -0.1757962853f, + 0.9723699093f, -0.2334453613f, 0.9569403529f, -0.2902846634f, 0.9381913543f, -0.3461170495f, 0.9161879420f, -0.4007488191f, + 0.8910065293f, -0.4539904892f, 0.8627343774f, -0.5056573749f, 0.8314695954f, -0.5555702448f, 0.7973206639f, -0.6035559177f, + 0.7604059577f, -0.6494480371f, 0.7208535671f, -0.6930873394f, 0.6788007617f, -0.7343224883f, 0.6343932748f, -0.7730104327f, + 0.5877852440f, -0.8090170026f, 0.5391383171f, -0.8422172070f, 0.4886212349f, -0.8724960089f, 0.4364092350f, -0.8997482657f, + 1.0000000000f, -0.0000000000f, 0.9969173074f, -0.0784590989f, 0.9876883626f, -0.1564344615f, 0.9723699093f, -0.2334453613f, + 0.9510565400f, -0.3090170026f, 0.9238795042f, -0.3826834261f, 0.8910065293f, -0.4539904892f, 0.8526401520f, -0.5224985480f, + 0.8090170026f, -0.5877852440f, 0.7604059577f, -0.6494480371f, 0.7071067691f, -0.7071067691f, 0.6494480371f, -0.7604059577f, + 0.5877852440f, -0.8090170026f, 0.5224985480f, -0.8526401520f, 0.4539904892f, -0.8910065293f, 0.3826834261f, -0.9238795042f, + 0.3090170026f, -0.9510565400f, 0.2334453613f, -0.9723699093f, 0.1564344615f, -0.9876883626f, 0.0784590989f, -0.9969173074f, + 1.0000000000f, -0.0000000000f, 0.9951847196f, -0.0980171412f, 0.9807852507f, -0.1950903237f, 0.9569403529f, -0.2902846634f, + 0.9238795042f, -0.3826834261f, 0.8819212914f, -0.4713967443f, 0.8314695954f, -0.5555702448f, 0.7730104327f, -0.6343932748f, + 0.7071067691f, -0.7071067691f, 0.6343932748f, -0.7730104327f, 0.5555702448f, -0.8314695954f, 0.4713967443f, -0.8819212914f, + 0.3826834261f, -0.9238795042f, 0.2902846634f, -0.9569403529f, 0.1950903237f, -0.9807852507f, 0.0980171412f, -0.9951847196f, + -0.0000000000f, -1.0000000000f, -0.0980171412f, -0.9951847196f, -0.1950903237f, -0.9807852507f, -0.2902846634f, -0.9569403529f, + 1.0000000000f, -0.0000000000f, 0.9930684566f, -0.1175373942f, 0.9723699093f, -0.2334453613f, 0.9381913543f, -0.3461170495f, + 0.8910065293f, -0.4539904892f, 0.8314695954f, -0.5555702448f, 0.7604059577f, -0.6494480371f, 0.6788007617f, -0.7343224883f, + 0.5877852440f, -0.8090170026f, 0.4886212349f, -0.8724960089f, 0.3826834261f, -0.9238795042f, 0.2714404464f, -0.9624552131f, + 0.1564344615f, -0.9876883626f, 0.0392598175f, -0.9992290139f, -0.0784590989f, -0.9969173074f, -0.1950903237f, -0.9807852507f, + -0.3090170026f, -0.9510565400f, -0.4186597466f, -0.9081431627f, -0.5224985480f, -0.8526401520f, -0.6190939546f, -0.7853169441f, + 1.0000000000f, -0.0000000000f, 0.9905693531f, -0.1370123476f, 0.9624552131f, -0.2714404464f, 0.9161879420f, -0.4007488191f, + 0.8526401520f, -0.5224985480f, 0.7730104327f, -0.6343932748f, 0.6788007617f, -0.7343224883f, 0.5717879534f, -0.8204014301f, + 0.4539904892f, -0.8910065293f, 0.3276301920f, -0.9448060393f, 0.1950903237f, -0.9807852507f, 0.0588708036f, -0.9982656240f, + -0.0784590989f, -0.9969173074f, -0.2143091559f, -0.9767658710f, -0.3461170495f, -0.9381913543f, -0.4713967443f, -0.8819212914f, + -0.5877852440f, -0.8090170026f, -0.6930873394f, -0.7208535671f, -0.7853169441f, -0.6190939546f, -0.8627343774f, -0.5056573749f, + 1.0000000000f, -0.0000000000f, 0.9876883626f, -0.1564344615f, 0.9510565400f, -0.3090170026f, 0.8910065293f, -0.4539904892f, + 0.8090170026f, -0.5877852440f, 0.7071067691f, -0.7071067691f, 0.5877852440f, -0.8090170026f, 0.4539904892f, -0.8910065293f, + 0.3090170026f, -0.9510565400f, 0.1564344615f, -0.9876883626f, -0.0000000000f, -1.0000000000f, -0.1564344615f, -0.9876883626f, + -0.3090170026f, -0.9510565400f, -0.4539904892f, -0.8910065293f, -0.5877852440f, -0.8090170026f, -0.7071067691f, -0.7071067691f, + -0.8090170026f, -0.5877852440f, -0.8910065293f, -0.4539904892f, -0.9510565400f, -0.3090170026f, -0.9876883626f, -0.1564344615f, + 1.0000000000f, -0.0000000000f, 0.9844265580f, -0.1757962853f, 0.9381913543f, -0.3461170495f, 0.8627343774f, -0.5056573749f, + 0.7604059577f, -0.6494480371f, 0.6343932748f, -0.7730104327f, 0.4886212349f, -0.8724960089f, 0.3276301920f, -0.9448060393f, + 0.1564344615f, -0.9876883626f, -0.0196336918f, -0.9998072386f, -0.1950903237f, -0.9807852507f, -0.3644705117f, -0.9312149286f, + -0.5224985480f, -0.8526401520f, -0.6642524600f, -0.7475083470f, -0.7853169441f, -0.6190939546f, -0.8819212914f, -0.4713967443f, + -0.9510565400f, -0.3090170026f, -0.9905693531f, -0.1370123476f, -0.9992290139f, 0.0392598175f, -0.9767658710f, 0.2143091559f, + 1.0000000000f, -0.0000000000f, 0.9807852507f, -0.1950903237f, 0.9238795042f, -0.3826834261f, 0.8314695954f, -0.5555702448f, + 0.7071067691f, -0.7071067691f, 0.5555702448f, -0.8314695954f, 0.3826834261f, -0.9238795042f, 0.1950903237f, -0.9807852507f, + -0.0000000000f, -1.0000000000f, -0.1950903237f, -0.9807852507f, -0.3826834261f, -0.9238795042f, -0.5555702448f, -0.8314695954f, + -0.7071067691f, -0.7071067691f, -0.8314695954f, -0.5555702448f, -0.9238795042f, -0.3826834261f, -0.9807852507f, -0.1950903237f, + -1.0000000000f, 0.0000000000f, -0.9807852507f, 0.1950903237f, -0.9238795042f, 0.3826834261f, -0.8314695954f, 0.5555702448f, + 1.0000000000f, -0.0000000000f, 0.9767658710f, -0.2143091559f, 0.9081431627f, -0.4186597466f, 0.7973206639f, -0.6035559177f, + 0.6494480371f, -0.7604059577f, 0.4713967443f, -0.8819212914f, 0.2714404464f, -0.9624552131f, 0.0588708036f, -0.9982656240f, + -0.1564344615f, -0.9876883626f, -0.3644705117f, -0.9312149286f, -0.5555702448f, -0.8314695954f, -0.7208535671f, -0.6930873394f, + -0.8526401520f, -0.5224985480f, -0.9448060393f, -0.3276301920f, -0.9930684566f, -0.1175373942f, -0.9951847196f, 0.0980171412f, + -0.9510565400f, 0.3090170026f, -0.8627343774f, 0.5056573749f, -0.7343224883f, 0.6788007617f, -0.5717879534f, 0.8204014301f, + 1.0000000000f, -0.0000000000f, 0.9723699093f, -0.2334453613f, 0.8910065293f, -0.4539904892f, 0.7604059577f, -0.6494480371f, + 0.5877852440f, -0.8090170026f, 0.3826834261f, -0.9238795042f, 0.1564344615f, -0.9876883626f, -0.0784590989f, -0.9969173074f, + -0.3090170026f, -0.9510565400f, -0.5224985480f, -0.8526401520f, -0.7071067691f, -0.7071067691f, -0.8526401520f, -0.5224985480f, + -0.9510565400f, -0.3090170026f, -0.9969173074f, -0.0784590989f, -0.9876883626f, 0.1564344615f, -0.9238795042f, 0.3826834261f, + -0.8090170026f, 0.5877852440f, -0.6494480371f, 0.7604059577f, -0.4539904892f, 0.8910065293f, -0.2334453613f, 0.9723699093f, + 1.0000000000f, -0.0000000000f, 0.9675990939f, -0.2524915636f, 0.8724960089f, -0.4886212349f, 0.7208535671f, -0.6930873394f, + 0.5224985480f, -0.8526401520f, 0.2902846634f, -0.9569403529f, 0.0392598175f, -0.9992290139f, -0.2143091559f, -0.9767658710f, + -0.4539904892f, -0.8910065293f, -0.6642524600f, -0.7475083470f, -0.8314695954f, -0.5555702448f, -0.9448060393f, -0.3276301920f, + -0.9969173074f, -0.0784590989f, -0.9844265580f, 0.1757962853f, -0.9081431627f, 0.4186597466f, -0.7730104327f, 0.6343932748f, + -0.5877852440f, 0.8090170026f, -0.3644705117f, 0.9312149286f, -0.1175373942f, 0.9930684566f, 0.1370123476f, 0.9905693531f, + 1.0000000000f, -0.0000000000f, 0.9624552131f, -0.2714404464f, 0.8526401520f, -0.5224985480f, 0.6788007617f, -0.7343224883f, + 0.4539904892f, -0.8910065293f, 0.1950903237f, -0.9807852507f, -0.0784590989f, -0.9969173074f, -0.3461170495f, -0.9381913543f, + -0.5877852440f, -0.8090170026f, -0.7853169441f, -0.6190939546f, -0.9238795042f, -0.3826834261f, -0.9930684566f, -0.1175373942f, + -0.9876883626f, 0.1564344615f, -0.9081431627f, 0.4186597466f, -0.7604059577f, 0.6494480371f, -0.5555702448f, 0.8314695954f, + -0.3090170026f, 0.9510565400f, -0.0392598175f, 0.9992290139f, 0.2334453613f, 0.9723699093f, 0.4886212349f, 0.8724960089f, + 1.0000000000f, -0.0000000000f, 0.9569403529f, -0.2902846634f, 0.8314695954f, -0.5555702448f, 0.6343932748f, -0.7730104327f, + 0.3826834261f, -0.9238795042f, 0.0980171412f, -0.9951847196f, -0.1950903237f, -0.9807852507f, -0.4713967443f, -0.8819212914f, + -0.7071067691f, -0.7071067691f, -0.8819212914f, -0.4713967443f, -0.9807852507f, -0.1950903237f, -0.9951847196f, 0.0980171412f, + -0.9238795042f, 0.3826834261f, -0.7730104327f, 0.6343932748f, -0.5555702448f, 0.8314695954f, -0.2902846634f, 0.9569403529f, + 0.0000000000f, 1.0000000000f, 0.2902846634f, 0.9569403529f, 0.5555702448f, 0.8314695954f, 0.7730104327f, 0.6343932748f, + 1.0000000000f, -0.0000000000f, 0.9999517798f, -0.0098173190f, 0.9998072386f, -0.0196336918f, 0.9995663166f, -0.0294481739f, + 0.9992290139f, -0.0392598175f, 0.9987954497f, -0.0490676761f, 0.9982656240f, -0.0588708036f, 0.9976395369f, -0.0686682612f, + 0.9969173074f, -0.0784590989f, 0.9960990548f, -0.0882423669f, 0.9951847196f, -0.0980171412f, 0.9941744804f, -0.1077824607f, + 0.9930684566f, -0.1175373942f, 0.9918667078f, -0.1272810102f, 0.9905693531f, -0.1370123476f, 0.9891765118f, -0.1467304677f, + 0.9876883626f, -0.1564344615f, 0.9861049652f, -0.1661233753f, 0.9844265580f, -0.1757962853f, 0.9826532602f, -0.1854522377f, + 1.0000000000f, -0.0000000000f, 0.9995663166f, -0.0294481739f, 0.9982656240f, -0.0588708036f, 0.9960990548f, -0.0882423669f, + 0.9930684566f, -0.1175373942f, 0.9891765118f, -0.1467304677f, 0.9844265580f, -0.1757962853f, 0.9788227677f, -0.2047096044f, + 0.9723699093f, -0.2334453613f, 0.9650736451f, -0.2619786263f, 0.9569403529f, -0.2902846634f, 0.9479769468f, -0.3183389306f, + 0.9381913543f, -0.3461170495f, 0.9275919199f, -0.3735949695f, 0.9161879420f, -0.4007488191f, 0.9039893150f, -0.4275550842f, + 0.8910065293f, -0.4539904892f, 0.8772509098f, -0.4800321162f, 0.8627343774f, -0.5056573749f, 0.8474695683f, -0.5308440328f, + 1.0000000000f, -0.0000000000f, 0.9987954497f, -0.0490676761f, 0.9951847196f, -0.0980171412f, 0.9891765118f, -0.1467304677f, + 0.9807852507f, -0.1950903237f, 0.9700312614f, -0.2429801822f, 0.9569403529f, -0.2902846634f, 0.9415440559f, -0.3368898630f, + 0.9238795042f, -0.3826834261f, 0.9039893150f, -0.4275550842f, 0.8819212914f, -0.4713967443f, 0.8577286005f, -0.5141027570f, + 0.8314695954f, -0.5555702448f, 0.8032075167f, -0.5956993103f, 0.7730104327f, -0.6343932748f, 0.7409511209f, -0.6715589762f, + 0.7071067691f, -0.7071067691f, 0.6715589762f, -0.7409511209f, 0.6343932748f, -0.7730104327f, 0.5956993103f, -0.8032075167f, + 1.0000000000f, -0.0000000000f, 0.9976395369f, -0.0686682612f, 0.9905693531f, -0.1370123476f, 0.9788227677f, -0.2047096044f, + 0.9624552131f, -0.2714404464f, 0.9415440559f, -0.3368898630f, 0.9161879420f, -0.4007488191f, 0.8865066171f, -0.4627159238f, + 0.8526401520f, -0.5224985480f, 0.8147484660f, -0.5798145533f, 0.7730104327f, -0.6343932748f, 0.7276231050f, -0.6859771013f, + 0.6788007617f, -0.7343224883f, 0.6267738342f, -0.7792012691f, 0.5717879534f, -0.8204014301f, 0.5141027570f, -0.8577286005f, + 0.4539904892f, -0.8910065293f, 0.3917350173f, -0.9200780988f, 0.3276301920f, -0.9448060393f, 0.2619786263f, -0.9650736451f, + 1.0000000000f, -0.0000000000f, 0.9960990548f, -0.0882423669f, 0.9844265580f, -0.1757962853f, 0.9650736451f, -0.2619786263f, + 0.9381913543f, -0.3461170495f, 0.9039893150f, -0.4275550842f, 0.8627343774f, -0.5056573749f, 0.8147484660f, -0.5798145533f, + 0.7604059577f, -0.6494480371f, 0.7001308203f, -0.7140145898f, 0.6343932748f, -0.7730104327f, 0.5637062788f, -0.8259753585f, + 0.4886212349f, -0.8724960089f, 0.4097240269f, -0.9122095108f, 0.3276301920f, -0.9448060393f, 0.2429801822f, -0.9700312614f, + 0.1564344615f, -0.9876883626f, 0.0686682612f, -0.9976395369f, -0.0196336918f, -0.9998072386f, -0.1077824607f, -0.9941744804f, + 1.0000000000f, -0.0000000000f, 0.9941744804f, -0.1077824607f, 0.9767658710f, -0.2143091559f, 0.9479769468f, -0.3183389306f, + 0.9081431627f, -0.4186597466f, 0.8577286005f, -0.5141027570f, 0.7973206639f, -0.6035559177f, 0.7276231050f, -0.6859771013f, + 0.6494480371f, -0.7604059577f, 0.5637062788f, -0.8259753585f, 0.4713967443f, -0.8819212914f, 0.3735949695f, -0.9275919199f, + 0.2714404464f, -0.9624552131f, 0.1661233753f, -0.9861049652f, 0.0588708036f, -0.9982656240f, -0.0490676761f, -0.9987954497f, + -0.1564344615f, -0.9876883626f, -0.2619786263f, -0.9650736451f, -0.3644705117f, -0.9312149286f, -0.4627159238f, -0.8865066171f, + 1.0000000000f, -0.0000000000f, 0.9918667078f, -0.1272810102f, 0.9675990939f, -0.2524915636f, 0.9275919199f, -0.3735949695f, + 0.8724960089f, -0.4886212349f, 0.8032075167f, -0.5956993103f, 0.7208535671f, -0.6930873394f, 0.6267738342f, -0.7792012691f, + 0.5224985480f, -0.8526401520f, 0.4097240269f, -0.9122095108f, 0.2902846634f, -0.9569403529f, 0.1661233753f, -0.9861049652f, + 0.0392598175f, -0.9992290139f, -0.0882423669f, -0.9960990548f, -0.2143091559f, -0.9767658710f, -0.3368898630f, -0.9415440559f, + -0.4539904892f, -0.8910065293f, -0.5637062788f, -0.8259753585f, -0.6642524600f, -0.7475083470f, -0.7539935112f, -0.6568819284f, + 1.0000000000f, -0.0000000000f, 0.9891765118f, -0.1467304677f, 0.9569403529f, -0.2902846634f, 0.9039893150f, -0.4275550842f, + 0.8314695954f, -0.5555702448f, 0.7409511209f, -0.6715589762f, 0.6343932748f, -0.7730104327f, 0.5141027570f, -0.8577286005f, + 0.3826834261f, -0.9238795042f, 0.2429801822f, -0.9700312614f, 0.0980171412f, -0.9951847196f, -0.0490676761f, -0.9987954497f, + -0.1950903237f, -0.9807852507f, -0.3368898630f, -0.9415440559f, -0.4713967443f, -0.8819212914f, -0.5956993103f, -0.8032075167f, + -0.7071067691f, -0.7071067691f, -0.8032075167f, -0.5956993103f, -0.8819212914f, -0.4713967443f, -0.9415440559f, -0.3368898630f, + 1.0000000000f, -0.0000000000f, 0.9861049652f, -0.1661233753f, 0.9448060393f, -0.3276301920f, 0.8772509098f, -0.4800321162f, + 0.7853169441f, -0.6190939546f, 0.6715589762f, -0.7409511209f, 0.5391383171f, -0.8422172070f, 0.3917350173f, -0.9200780988f, + 0.2334453613f, -0.9723699093f, 0.0686682612f, -0.9976395369f, -0.0980171412f, -0.9951847196f, -0.2619786263f, -0.9650736451f, + -0.4186597466f, -0.9081431627f, -0.5637062788f, -0.8259753585f, -0.6930873394f, -0.7208535671f, -0.8032075167f, -0.5956993103f, + -0.8910065293f, -0.4539904892f, -0.9540444016f, -0.2996652722f, -0.9905693531f, -0.1370123476f, -0.9995663166f, 0.0294481739f, + 1.0000000000f, -0.0000000000f, 0.9826532602f, -0.1854522377f, 0.9312149286f, -0.3644705117f, 0.8474695683f, -0.5308440328f, + 0.7343224883f, -0.6788007617f, 0.5956993103f, -0.8032075167f, 0.4364092350f, -0.8997482657f, 0.2619786263f, -0.9650736451f, + 0.0784590989f, -0.9969173074f, -0.1077824607f, -0.9941744804f, -0.2902846634f, -0.9569403529f, -0.4627159238f, -0.8865066171f, + -0.6190939546f, -0.7853169441f, -0.7539935112f, -0.6568819284f, -0.8627343774f, -0.5056573749f, -0.9415440559f, -0.3368898630f, + -0.9876883626f, -0.1564344615f, -0.9995663166f, 0.0294481739f, -0.9767658710f, 0.2143091559f, -0.9200780988f, 0.3917350173f, + 1.0000000000f, -0.0000000000f, 0.9788227677f, -0.2047096044f, 0.9161879420f, -0.4007488191f, 0.8147484660f, -0.5798145533f, + 0.6788007617f, -0.7343224883f, 0.5141027570f, -0.8577286005f, 0.3276301920f, -0.9448060393f, 0.1272810102f, -0.9918667078f, + -0.0784590989f, -0.9969173074f, -0.2808761001f, -0.9597440362f, -0.4713967443f, -0.8819212914f, -0.6419516206f, -0.7667451501f, + -0.7853169441f, -0.6190939546f, -0.8954205513f, -0.4452213347f, -0.9675990939f, -0.2524915636f, -0.9987954497f, -0.0490676761f, + -0.9876883626f, 0.1564344615f, -0.9347481728f, 0.3553108871f, -0.8422172070f, 0.5391383171f, -0.7140145898f, 0.7001308203f, + 1.0000000000f, -0.0000000000f, 0.9746148586f, -0.2238880545f, 0.8997482657f, -0.4364092350f, 0.7792012691f, -0.6267738342f, + 0.6190939546f, -0.7853169441f, 0.4275550842f, -0.9039893150f, 0.2143091559f, -0.9767658710f, -0.0098173190f, -0.9999517798f, + -0.2334453613f, -0.9723699093f, -0.4452213347f, -0.8954205513f, -0.6343932748f, -0.7730104327f, -0.7913569212f, -0.6113544106f, + -0.9081431627f, -0.4186597466f, -0.9788227677f, -0.2047096044f, -0.9998072386f, 0.0196336918f, -0.9700312614f, 0.2429801822f, + -0.8910065293f, 0.4539904892f, -0.7667451501f, 0.6419516206f, -0.6035559177f, 0.7973206639f, -0.4097240269f, 0.9122095108f, + 1.0000000000f, -0.0000000000f, 0.9700312614f, -0.2429801822f, 0.8819212914f, -0.4713967443f, 0.7409511209f, -0.6715589762f, + 0.5555702448f, -0.8314695954f, 0.3368898630f, -0.9415440559f, 0.0980171412f, -0.9951847196f, -0.1467304677f, -0.9891765118f, + -0.3826834261f, -0.9238795042f, -0.5956993103f, -0.8032075167f, -0.7730104327f, -0.6343932748f, -0.9039893150f, -0.4275550842f, + -0.9807852507f, -0.1950903237f, -0.9987954497f, 0.0490676761f, -0.9569403529f, 0.2902846634f, -0.8577286005f, 0.5141027570f, + -0.7071067691f, 0.7071067691f, -0.5141027570f, 0.8577286005f, -0.2902846634f, 0.9569403529f, -0.0490676761f, 0.9987954497f, + 1.0000000000f, -0.0000000000f, 0.9650736451f, -0.2619786263f, 0.8627343774f, -0.5056573749f, 0.7001308203f, -0.7140145898f, + 0.4886212349f, -0.8724960089f, 0.2429801822f, -0.9700312614f, -0.0196336918f, -0.9998072386f, -0.2808761001f, -0.9597440362f, + -0.5224985480f, -0.8526401520f, -0.7276231050f, -0.6859771013f, -0.8819212914f, -0.4713967443f, -0.9746148586f, -0.2238880545f, + -0.9992290139f, 0.0392598175f, -0.9540444016f, 0.2996652722f, -0.8422172070f, 0.5391383171f, -0.6715589762f, 0.7409511209f, + -0.4539904892f, 0.8910065293f, -0.2047096044f, 0.9788227677f, 0.0588708036f, 0.9982656240f, 0.3183389306f, 0.9479769468f, + 1.0000000000f, -0.0000000000f, 0.9597440362f, -0.2808761001f, 0.8422172070f, -0.5391383171f, 0.6568819284f, -0.7539935112f, + 0.4186597466f, -0.9081431627f, 0.1467304677f, -0.9891765118f, -0.1370123476f, -0.9905693531f, -0.4097240269f, -0.9122095108f, + -0.6494480371f, -0.7604059577f, -0.8368837237f, -0.5473806858f, -0.9569403529f, -0.2902846634f, -0.9999517798f, -0.0098173190f, + -0.9624552131f, 0.2714404464f, -0.8474695683f, 0.5308440328f, -0.6642524600f, 0.7475083470f, -0.4275550842f, 0.9039893150f, + -0.1564344615f, 0.9876883626f, 0.1272810102f, 0.9918667078f, 0.4007488191f, 0.9161879420f, 0.6419516206f, 0.7667451501f, + 1.0000000000f, -0.0000000000f, 0.9540444016f, -0.2996652722f, 0.8204014301f, -0.5717879534f, 0.6113544106f, -0.7913569212f, + 0.3461170495f, -0.9381913543f, 0.0490676761f, -0.9987954497f, -0.2524915636f, -0.9675990939f, -0.5308440328f, -0.8474695683f, + -0.7604059577f, -0.6494480371f, -0.9200780988f, -0.3917350173f, -0.9951847196f, -0.0980171412f, -0.9788227677f, 0.2047096044f, + -0.8724960089f, 0.4886212349f, -0.6859771013f, 0.7276231050f, -0.4364092350f, 0.8997482657f, -0.1467304677f, 0.9891765118f, + 0.1564344615f, 0.9876883626f, 0.4452213347f, 0.8954205513f, 0.6930873394f, 0.7208535671f, 0.8772509098f, 0.4800321162f +}; + +const float FFT_RotVector_960[1860] = { + 1.0000000000f, -0.0000000000f, 0.9999143481f, -0.0130895954f, + 0.9996573329f, -0.0261769481f, 0.9992290139f, -0.0392598175f, 0.9986295104f, -0.0523359552f, 0.9978589416f, -0.0654031262f, + 0.9969173074f, -0.0784590989f, 0.9958049059f, -0.0915016159f, 0.9945219159f, -0.1045284644f, 0.9930684566f, -0.1175373942f, + 0.9914448857f, -0.1305261850f, 0.9896513820f, -0.1434926242f, 0.9876883626f, -0.1564344615f, 0.9855560660f, -0.1693495065f, + 0.9832549095f, -0.1822355241f, 0.9807852507f, -0.1950903237f, 0.9781476259f, -0.2079116851f, 0.9753423333f, -0.2206974328f, + 0.9723699093f, -0.2334453613f, 0.9692308903f, -0.2461532950f, 0.9659258127f, -0.2588190436f, 0.9624552131f, -0.2714404464f, + 0.9588197470f, -0.2840153575f, 0.9550199509f, -0.2965415716f, 0.9510565400f, -0.3090170026f, 0.9469301105f, -0.3214394748f, + 0.9426414967f, -0.3338068724f, 0.9381913543f, -0.3461170495f, 0.9335803986f, -0.3583679497f, 0.9288095236f, -0.3705574274f, + 1.0000000000f, -0.0000000000f, 0.9996573329f, -0.0261769481f, 0.9986295104f, -0.0523359552f, 0.9969173074f, -0.0784590989f, + 0.9945219159f, -0.1045284644f, 0.9914448857f, -0.1305261850f, 0.9876883626f, -0.1564344615f, 0.9832549095f, -0.1822355241f, + 0.9781476259f, -0.2079116851f, 0.9723699093f, -0.2334453613f, 0.9659258127f, -0.2588190436f, 0.9588197470f, -0.2840153575f, + 0.9510565400f, -0.3090170026f, 0.9426414967f, -0.3338068724f, 0.9335803986f, -0.3583679497f, 0.9238795042f, -0.3826834261f, + 0.9135454297f, -0.4067366421f, 0.9025852680f, -0.4305110872f, 0.8910065293f, -0.4539904892f, 0.8788171411f, -0.4771587551f, + 0.8660253882f, -0.5000000000f, 0.8526401520f, -0.5224985480f, 0.8386705518f, -0.5446390510f, 0.8241261840f, -0.5664062500f, + 0.8090170026f, -0.5877852440f, 0.7933533192f, -0.6087614298f, 0.7771459818f, -0.6293203831f, 0.7604059577f, -0.6494480371f, + 0.7431448102f, -0.6691306233f, 0.7253744006f, -0.6883545518f, 1.0000000000f, -0.0000000000f, 0.9992290139f, -0.0392598175f, + 0.9969173074f, -0.0784590989f, 0.9930684566f, -0.1175373942f, 0.9876883626f, -0.1564344615f, 0.9807852507f, -0.1950903237f, + 0.9723699093f, -0.2334453613f, 0.9624552131f, -0.2714404464f, 0.9510565400f, -0.3090170026f, 0.9381913543f, -0.3461170495f, + 0.9238795042f, -0.3826834261f, 0.9081431627f, -0.4186597466f, 0.8910065293f, -0.4539904892f, 0.8724960089f, -0.4886212349f, + 0.8526401520f, -0.5224985480f, 0.8314695954f, -0.5555702448f, 0.8090170026f, -0.5877852440f, 0.7853169441f, -0.6190939546f, + 0.7604059577f, -0.6494480371f, 0.7343224883f, -0.6788007617f, 0.7071067691f, -0.7071067691f, 0.6788007617f, -0.7343224883f, + 0.6494480371f, -0.7604059577f, 0.6190939546f, -0.7853169441f, 0.5877852440f, -0.8090170026f, 0.5555702448f, -0.8314695954f, + 0.5224985480f, -0.8526401520f, 0.4886212349f, -0.8724960089f, 0.4539904892f, -0.8910065293f, 0.4186597466f, -0.9081431627f, + 1.0000000000f, -0.0000000000f, 0.9986295104f, -0.0523359552f, 0.9945219159f, -0.1045284644f, 0.9876883626f, -0.1564344615f, + 0.9781476259f, -0.2079116851f, 0.9659258127f, -0.2588190436f, 0.9510565400f, -0.3090170026f, 0.9335803986f, -0.3583679497f, + 0.9135454297f, -0.4067366421f, 0.8910065293f, -0.4539904892f, 0.8660253882f, -0.5000000000f, 0.8386705518f, -0.5446390510f, + 0.8090170026f, -0.5877852440f, 0.7771459818f, -0.6293203831f, 0.7431448102f, -0.6691306233f, 0.7071067691f, -0.7071067691f, + 0.6691306233f, -0.7431448102f, 0.6293203831f, -0.7771459818f, 0.5877852440f, -0.8090170026f, 0.5446390510f, -0.8386705518f, + 0.5000000000f, -0.8660253882f, 0.4539904892f, -0.8910065293f, 0.4067366421f, -0.9135454297f, 0.3583679497f, -0.9335803986f, + 0.3090170026f, -0.9510565400f, 0.2588190436f, -0.9659258127f, 0.2079116851f, -0.9781476259f, 0.1564344615f, -0.9876883626f, + 0.1045284644f, -0.9945219159f, 0.0523359552f, -0.9986295104f, 1.0000000000f, -0.0000000000f, 0.9978589416f, -0.0654031262f, + 0.9914448857f, -0.1305261850f, 0.9807852507f, -0.1950903237f, 0.9659258127f, -0.2588190436f, 0.9469301105f, -0.3214394748f, + 0.9238795042f, -0.3826834261f, 0.8968727589f, -0.4422886968f, 0.8660253882f, -0.5000000000f, 0.8314695954f, -0.5555702448f, + 0.7933533192f, -0.6087614298f, 0.7518398166f, -0.6593458056f, 0.7071067691f, -0.7071067691f, 0.6593458056f, -0.7518398166f, + 0.6087614298f, -0.7933533192f, 0.5555702448f, -0.8314695954f, 0.5000000000f, -0.8660253882f, 0.4422886968f, -0.8968727589f, + 0.3826834261f, -0.9238795042f, 0.3214394748f, -0.9469301105f, 0.2588190436f, -0.9659258127f, 0.1950903237f, -0.9807852507f, + 0.1305261850f, -0.9914448857f, 0.0654031262f, -0.9978589416f, -0.0000000000f, -1.0000000000f, -0.0654031262f, -0.9978589416f, + -0.1305261850f, -0.9914448857f, -0.1950903237f, -0.9807852507f, -0.2588190436f, -0.9659258127f, -0.3214394748f, -0.9469301105f, + 1.0000000000f, -0.0000000000f, 0.9969173074f, -0.0784590989f, 0.9876883626f, -0.1564344615f, 0.9723699093f, -0.2334453613f, + 0.9510565400f, -0.3090170026f, 0.9238795042f, -0.3826834261f, 0.8910065293f, -0.4539904892f, 0.8526401520f, -0.5224985480f, + 0.8090170026f, -0.5877852440f, 0.7604059577f, -0.6494480371f, 0.7071067691f, -0.7071067691f, 0.6494480371f, -0.7604059577f, + 0.5877852440f, -0.8090170026f, 0.5224985480f, -0.8526401520f, 0.4539904892f, -0.8910065293f, 0.3826834261f, -0.9238795042f, + 0.3090170026f, -0.9510565400f, 0.2334453613f, -0.9723699093f, 0.1564344615f, -0.9876883626f, 0.0784590989f, -0.9969173074f, + -0.0000000000f, -1.0000000000f, -0.0784590989f, -0.9969173074f, -0.1564344615f, -0.9876883626f, -0.2334453613f, -0.9723699093f, + -0.3090170026f, -0.9510565400f, -0.3826834261f, -0.9238795042f, -0.4539904892f, -0.8910065293f, -0.5224985480f, -0.8526401520f, + -0.5877852440f, -0.8090170026f, -0.6494480371f, -0.7604059577f, 1.0000000000f, -0.0000000000f, 0.9958049059f, -0.0915016159f, + 0.9832549095f, -0.1822355241f, 0.9624552131f, -0.2714404464f, 0.9335803986f, -0.3583679497f, 0.8968727589f, -0.4422886968f, + 0.8526401520f, -0.5224985480f, 0.8012537956f, -0.5983245969f, 0.7431448102f, -0.6691306233f, 0.6788007617f, -0.7343224883f, + 0.6087614298f, -0.7933533192f, 0.5336145163f, -0.8457278013f, 0.4539904892f, -0.8910065293f, 0.3705574274f, -0.9288095236f, + 0.2840153575f, -0.9588197470f, 0.1950903237f, -0.9807852507f, 0.1045284644f, -0.9945219159f, 0.0130895954f, -0.9999143481f, + -0.0784590989f, -0.9969173074f, -0.1693495065f, -0.9855560660f, -0.2588190436f, -0.9659258127f, -0.3461170495f, -0.9381913543f, + -0.4305110872f, -0.9025852680f, -0.5112931132f, -0.8594064116f, -0.5877852440f, -0.8090170026f, -0.6593458056f, -0.7518398166f, + -0.7253744006f, -0.6883545518f, -0.7853169441f, -0.6190939546f, -0.8386705518f, -0.5446390510f, -0.8849876523f, -0.4656145275f, + 1.0000000000f, -0.0000000000f, 0.9945219159f, -0.1045284644f, 0.9781476259f, -0.2079116851f, 0.9510565400f, -0.3090170026f, + 0.9135454297f, -0.4067366421f, 0.8660253882f, -0.5000000000f, 0.8090170026f, -0.5877852440f, 0.7431448102f, -0.6691306233f, + 0.6691306233f, -0.7431448102f, 0.5877852440f, -0.8090170026f, 0.5000000000f, -0.8660253882f, 0.4067366421f, -0.9135454297f, + 0.3090170026f, -0.9510565400f, 0.2079116851f, -0.9781476259f, 0.1045284644f, -0.9945219159f, -0.0000000000f, -1.0000000000f, + -0.1045284644f, -0.9945219159f, -0.2079116851f, -0.9781476259f, -0.3090170026f, -0.9510565400f, -0.4067366421f, -0.9135454297f, + -0.5000000000f, -0.8660253882f, -0.5877852440f, -0.8090170026f, -0.6691306233f, -0.7431448102f, -0.7431448102f, -0.6691306233f, + -0.8090170026f, -0.5877852440f, -0.8660253882f, -0.5000000000f, -0.9135454297f, -0.4067366421f, -0.9510565400f, -0.3090170026f, + -0.9781476259f, -0.2079116851f, -0.9945219159f, -0.1045284644f, 1.0000000000f, -0.0000000000f, 0.9930684566f, -0.1175373942f, + 0.9723699093f, -0.2334453613f, 0.9381913543f, -0.3461170495f, 0.8910065293f, -0.4539904892f, 0.8314695954f, -0.5555702448f, + 0.7604059577f, -0.6494480371f, 0.6788007617f, -0.7343224883f, 0.5877852440f, -0.8090170026f, 0.4886212349f, -0.8724960089f, + 0.3826834261f, -0.9238795042f, 0.2714404464f, -0.9624552131f, 0.1564344615f, -0.9876883626f, 0.0392598175f, -0.9992290139f, + -0.0784590989f, -0.9969173074f, -0.1950903237f, -0.9807852507f, -0.3090170026f, -0.9510565400f, -0.4186597466f, -0.9081431627f, + -0.5224985480f, -0.8526401520f, -0.6190939546f, -0.7853169441f, -0.7071067691f, -0.7071067691f, -0.7853169441f, -0.6190939546f, + -0.8526401520f, -0.5224985480f, -0.9081431627f, -0.4186597466f, -0.9510565400f, -0.3090170026f, -0.9807852507f, -0.1950903237f, + -0.9969173074f, -0.0784590989f, -0.9992290139f, 0.0392598175f, -0.9876883626f, 0.1564344615f, -0.9624552131f, 0.2714404464f, + 1.0000000000f, -0.0000000000f, 0.9914448857f, -0.1305261850f, 0.9659258127f, -0.2588190436f, 0.9238795042f, -0.3826834261f, + 0.8660253882f, -0.5000000000f, 0.7933533192f, -0.6087614298f, 0.7071067691f, -0.7071067691f, 0.6087614298f, -0.7933533192f, + 0.5000000000f, -0.8660253882f, 0.3826834261f, -0.9238795042f, 0.2588190436f, -0.9659258127f, 0.1305261850f, -0.9914448857f, + -0.0000000000f, -1.0000000000f, -0.1305261850f, -0.9914448857f, -0.2588190436f, -0.9659258127f, -0.3826834261f, -0.9238795042f, + -0.5000000000f, -0.8660253882f, -0.6087614298f, -0.7933533192f, -0.7071067691f, -0.7071067691f, -0.7933533192f, -0.6087614298f, + -0.8660253882f, -0.5000000000f, -0.9238795042f, -0.3826834261f, -0.9659258127f, -0.2588190436f, -0.9914448857f, -0.1305261850f, + -1.0000000000f, 0.0000000000f, -0.9914448857f, 0.1305261850f, -0.9659258127f, 0.2588190436f, -0.9238795042f, 0.3826834261f, + -0.8660253882f, 0.5000000000f, -0.7933533192f, 0.6087614298f, 1.0000000000f, -0.0000000000f, 0.9896513820f, -0.1434926242f, + 0.9588197470f, -0.2840153575f, 0.9081431627f, -0.4186597466f, 0.8386705518f, -0.5446390510f, 0.7518398166f, -0.6593458056f, + 0.6494480371f, -0.7604059577f, 0.5336145163f, -0.8457278013f, 0.4067366421f, -0.9135454297f, 0.2714404464f, -0.9624552131f, + 0.1305261850f, -0.9914448857f, -0.0130895954f, -0.9999143481f, -0.1564344615f, -0.9876883626f, -0.2965415716f, -0.9550199509f, + -0.4305110872f, -0.9025852680f, -0.5555702448f, -0.8314695954f, -0.6691306233f, -0.7431448102f, -0.7688418031f, -0.6394389868f, + -0.8526401520f, -0.5224985480f, -0.9187912345f, -0.3947438598f, -0.9659258127f, -0.2588190436f, -0.9930684566f, -0.1175373942f, + -0.9996573329f, 0.0261769481f, -0.9855560660f, 0.1693495065f, -0.9510565400f, 0.3090170026f, -0.8968727589f, 0.4422886968f, + -0.8241261840f, 0.5664062500f, -0.7343224883f, 0.6788007617f, -0.6293203831f, 0.7771459818f, -0.5112931132f, 0.8594064116f, + 1.0000000000f, -0.0000000000f, 0.9876883626f, -0.1564344615f, 0.9510565400f, -0.3090170026f, 0.8910065293f, -0.4539904892f, + 0.8090170026f, -0.5877852440f, 0.7071067691f, -0.7071067691f, 0.5877852440f, -0.8090170026f, 0.4539904892f, -0.8910065293f, + 0.3090170026f, -0.9510565400f, 0.1564344615f, -0.9876883626f, -0.0000000000f, -1.0000000000f, -0.1564344615f, -0.9876883626f, + -0.3090170026f, -0.9510565400f, -0.4539904892f, -0.8910065293f, -0.5877852440f, -0.8090170026f, -0.7071067691f, -0.7071067691f, + -0.8090170026f, -0.5877852440f, -0.8910065293f, -0.4539904892f, -0.9510565400f, -0.3090170026f, -0.9876883626f, -0.1564344615f, + -1.0000000000f, 0.0000000000f, -0.9876883626f, 0.1564344615f, -0.9510565400f, 0.3090170026f, -0.8910065293f, 0.4539904892f, + -0.8090170026f, 0.5877852440f, -0.7071067691f, 0.7071067691f, -0.5877852440f, 0.8090170026f, -0.4539904892f, 0.8910065293f, + -0.3090170026f, 0.9510565400f, -0.1564344615f, 0.9876883626f, 1.0000000000f, -0.0000000000f, 0.9855560660f, -0.1693495065f, + 0.9426414967f, -0.3338068724f, 0.8724960089f, -0.4886212349f, 0.7771459818f, -0.6293203831f, 0.6593458056f, -0.7518398166f, + 0.5224985480f, -0.8526401520f, 0.3705574274f, -0.9288095236f, 0.2079116851f, -0.9781476259f, 0.0392598175f, -0.9992290139f, + -0.1305261850f, -0.9914448857f, -0.2965415716f, -0.9550199509f, -0.4539904892f, -0.8910065293f, -0.5983245969f, -0.8012537956f, + -0.7253744006f, -0.6883545518f, -0.8314695954f, -0.5555702448f, -0.9135454297f, -0.4067366421f, -0.9692308903f, -0.2461532950f, + -0.9969173074f, -0.0784590989f, -0.9958049059f, 0.0915016159f, -0.9659258127f, 0.2588190436f, -0.9081431627f, 0.4186597466f, + -0.8241261840f, 0.5664062500f, -0.7163019180f, 0.6977904439f, -0.5877852440f, 0.8090170026f, -0.4422886968f, 0.8968727589f, + -0.2840153575f, 0.9588197470f, -0.1175373942f, 0.9930684566f, 0.0523359552f, 0.9986295104f, 0.2206974328f, 0.9753423333f, + 1.0000000000f, -0.0000000000f, 0.9832549095f, -0.1822355241f, 0.9335803986f, -0.3583679497f, 0.8526401520f, -0.5224985480f, + 0.7431448102f, -0.6691306233f, 0.6087614298f, -0.7933533192f, 0.4539904892f, -0.8910065293f, 0.2840153575f, -0.9588197470f, + 0.1045284644f, -0.9945219159f, -0.0784590989f, -0.9969173074f, -0.2588190436f, -0.9659258127f, -0.4305110872f, -0.9025852680f, + -0.5877852440f, -0.8090170026f, -0.7253744006f, -0.6883545518f, -0.8386705518f, -0.5446390510f, -0.9238795042f, -0.3826834261f, + -0.9781476259f, -0.2079116851f, -0.9996573329f, -0.0261769481f, -0.9876883626f, 0.1564344615f, -0.9426414967f, 0.3338068724f, + -0.8660253882f, 0.5000000000f, -0.7604059577f, 0.6494480371f, -0.6293203831f, 0.7771459818f, -0.4771587551f, 0.8788171411f, + -0.3090170026f, 0.9510565400f, -0.1305261850f, 0.9914448857f, 0.0523359552f, 0.9986295104f, 0.2334453613f, 0.9723699093f, + 0.4067366421f, 0.9135454297f, 0.5664062500f, 0.8241261840f, 1.0000000000f, -0.0000000000f, 0.9807852507f, -0.1950903237f, + 0.9238795042f, -0.3826834261f, 0.8314695954f, -0.5555702448f, 0.7071067691f, -0.7071067691f, 0.5555702448f, -0.8314695954f, + 0.3826834261f, -0.9238795042f, 0.1950903237f, -0.9807852507f, -0.0000000000f, -1.0000000000f, -0.1950903237f, -0.9807852507f, + -0.3826834261f, -0.9238795042f, -0.5555702448f, -0.8314695954f, -0.7071067691f, -0.7071067691f, -0.8314695954f, -0.5555702448f, + -0.9238795042f, -0.3826834261f, -0.9807852507f, -0.1950903237f, -1.0000000000f, 0.0000000000f, -0.9807852507f, 0.1950903237f, + -0.9238795042f, 0.3826834261f, -0.8314695954f, 0.5555702448f, -0.7071067691f, 0.7071067691f, -0.5555702448f, 0.8314695954f, + -0.3826834261f, 0.9238795042f, -0.1950903237f, 0.9807852507f, 0.0000000000f, 1.0000000000f, 0.1950903237f, 0.9807852507f, + 0.3826834261f, 0.9238795042f, 0.5555702448f, 0.8314695954f, 0.7071067691f, 0.7071067691f, 0.8314695954f, 0.5555702448f, + 1.0000000000f, -0.0000000000f, 0.9999786019f, -0.0065449378f, 0.9999143481f, -0.0130895954f, 0.9998072386f, -0.0196336918f, + 0.9996573329f, -0.0261769481f, 0.9994645715f, -0.0327190831f, 0.9992290139f, -0.0392598175f, 0.9989506602f, -0.0457988679f, + 0.9986295104f, -0.0523359552f, 0.9982656240f, -0.0588708036f, 0.9978589416f, -0.0654031262f, 0.9974094629f, -0.0719326511f, + 0.9969173074f, -0.0784590989f, 0.9963824749f, -0.0849821791f, 0.9958049059f, -0.0915016159f, 0.9951847196f, -0.0980171412f, + 0.9945219159f, -0.1045284644f, 0.9938164353f, -0.1110353097f, 0.9930684566f, -0.1175373942f, 0.9922779202f, -0.1240344495f, + 0.9914448857f, -0.1305261850f, 0.9905693531f, -0.1370123476f, 0.9896513820f, -0.1434926242f, 0.9886910319f, -0.1499667615f, + 0.9876883626f, -0.1564344615f, 0.9866433144f, -0.1628954709f, 0.9855560660f, -0.1693495065f, 0.9844265580f, -0.1757962853f, + 0.9832549095f, -0.1822355241f, 0.9820411205f, -0.1886669695f, 1.0000000000f, -0.0000000000f, 0.9998072386f, -0.0196336918f, + 0.9992290139f, -0.0392598175f, 0.9982656240f, -0.0588708036f, 0.9969173074f, -0.0784590989f, 0.9951847196f, -0.0980171412f, + 0.9930684566f, -0.1175373942f, 0.9905693531f, -0.1370123476f, 0.9876883626f, -0.1564344615f, 0.9844265580f, -0.1757962853f, + 0.9807852507f, -0.1950903237f, 0.9767658710f, -0.2143091559f, 0.9723699093f, -0.2334453613f, 0.9675990939f, -0.2524915636f, + 0.9624552131f, -0.2714404464f, 0.9569403529f, -0.2902846634f, 0.9510565400f, -0.3090170026f, 0.9448060393f, -0.3276301920f, + 0.9381913543f, -0.3461170495f, 0.9312149286f, -0.3644705117f, 0.9238795042f, -0.3826834261f, 0.9161879420f, -0.4007488191f, + 0.9081431627f, -0.4186597466f, 0.8997482657f, -0.4364092350f, 0.8910065293f, -0.4539904892f, 0.8819212914f, -0.4713967443f, + 0.8724960089f, -0.4886212349f, 0.8627343774f, -0.5056573749f, 0.8526401520f, -0.5224985480f, 0.8422172070f, -0.5391383171f, + 1.0000000000f, -0.0000000000f, 0.9994645715f, -0.0327190831f, 0.9978589416f, -0.0654031262f, 0.9951847196f, -0.0980171412f, + 0.9914448857f, -0.1305261850f, 0.9866433144f, -0.1628954709f, 0.9807852507f, -0.1950903237f, 0.9738769531f, -0.2270762622f, + 0.9659258127f, -0.2588190436f, 0.9569403529f, -0.2902846634f, 0.9469301105f, -0.3214394748f, 0.9359059334f, -0.3522500396f, + 0.9238795042f, -0.3826834261f, 0.9108638167f, -0.4127070308f, 0.8968727589f, -0.4422886968f, 0.8819212914f, -0.4713967443f, + 0.8660253882f, -0.5000000000f, 0.8492021561f, -0.5280678272f, 0.8314695954f, -0.5555702448f, 0.8128466606f, -0.5824776888f, + 0.7933533192f, -0.6087614298f, 0.7730104327f, -0.6343932748f, 0.7518398166f, -0.6593458056f, 0.7298640609f, -0.6835923195f, + 0.7071067691f, -0.7071067691f, 0.6835923195f, -0.7298640609f, 0.6593458056f, -0.7518398166f, 0.6343932748f, -0.7730104327f, + 0.6087614298f, -0.7933533192f, 0.5824776888f, -0.8128466606f, 1.0000000000f, -0.0000000000f, 0.9989506602f, -0.0457988679f, + 0.9958049059f, -0.0915016159f, 0.9905693531f, -0.1370123476f, 0.9832549095f, -0.1822355241f, 0.9738769531f, -0.2270762622f, + 0.9624552131f, -0.2714404464f, 0.9490136504f, -0.3152349889f, 0.9335803986f, -0.3583679497f, 0.9161879420f, -0.4007488191f, + 0.8968727589f, -0.4422886968f, 0.8756753206f, -0.4829003513f, 0.8526401520f, -0.5224985480f, 0.8278156519f, -0.5610002279f, + 0.8012537956f, -0.5983245969f, 0.7730104327f, -0.6343932748f, 0.7431448102f, -0.6691306233f, 0.7117196321f, -0.7024636865f, + 0.6788007617f, -0.7343224883f, 0.6444573402f, -0.7646402717f, 0.6087614298f, -0.7933533192f, 0.5717879534f, -0.8204014301f, + 0.5336145163f, -0.8457278013f, 0.4943211973f, -0.8692793250f, 0.4539904892f, -0.8910065293f, 0.4127070308f, -0.9108638167f, + 0.3705574274f, -0.9288095236f, 0.3276301920f, -0.9448060393f, 0.2840153575f, -0.9588197470f, 0.2398044616f, -0.9708212018f, + 1.0000000000f, -0.0000000000f, 0.9982656240f, -0.0588708036f, 0.9930684566f, -0.1175373942f, 0.9844265580f, -0.1757962853f, + 0.9723699093f, -0.2334453613f, 0.9569403529f, -0.2902846634f, 0.9381913543f, -0.3461170495f, 0.9161879420f, -0.4007488191f, + 0.8910065293f, -0.4539904892f, 0.8627343774f, -0.5056573749f, 0.8314695954f, -0.5555702448f, 0.7973206639f, -0.6035559177f, + 0.7604059577f, -0.6494480371f, 0.7208535671f, -0.6930873394f, 0.6788007617f, -0.7343224883f, 0.6343932748f, -0.7730104327f, + 0.5877852440f, -0.8090170026f, 0.5391383171f, -0.8422172070f, 0.4886212349f, -0.8724960089f, 0.4364092350f, -0.8997482657f, + 0.3826834261f, -0.9238795042f, 0.3276301920f, -0.9448060393f, 0.2714404464f, -0.9624552131f, 0.2143091559f, -0.9767658710f, + 0.1564344615f, -0.9876883626f, 0.0980171412f, -0.9951847196f, 0.0392598175f, -0.9992290139f, -0.0196336918f, -0.9998072386f, + -0.0784590989f, -0.9969173074f, -0.1370123476f, -0.9905693531f, 1.0000000000f, -0.0000000000f, 0.9974094629f, -0.0719326511f, + 0.9896513820f, -0.1434926242f, 0.9767658710f, -0.2143091559f, 0.9588197470f, -0.2840153575f, 0.9359059334f, -0.3522500396f, + 0.9081431627f, -0.4186597466f, 0.8756753206f, -0.4829003513f, 0.8386705518f, -0.5446390510f, 0.7973206639f, -0.6035559177f, + 0.7518398166f, -0.6593458056f, 0.7024636865f, -0.7117196321f, 0.6494480371f, -0.7604059577f, 0.5930676460f, -0.8051526546f, + 0.5336145163f, -0.8457278013f, 0.4713967443f, -0.8819212914f, 0.4067366421f, -0.9135454297f, 0.3399692476f, -0.9404365420f, + 0.2714404464f, -0.9624552131f, 0.2015053183f, -0.9794874191f, 0.1305261850f, -0.9914448857f, 0.0588708036f, -0.9982656240f, + -0.0130895954f, -0.9999143481f, -0.0849821791f, -0.9963824749f, -0.1564344615f, -0.9876883626f, -0.2270762622f, -0.9738769531f, + -0.2965415716f, -0.9550199509f, -0.3644705117f, -0.9312149286f, -0.4305110872f, -0.9025852680f, -0.4943211973f, -0.8692793250f, + 1.0000000000f, -0.0000000000f, 0.9963824749f, -0.0849821791f, 0.9855560660f, -0.1693495065f, 0.9675990939f, -0.2524915636f, + 0.9426414967f, -0.3338068724f, 0.9108638167f, -0.4127070308f, 0.8724960089f, -0.4886212349f, 0.8278156519f, -0.5610002279f, + 0.7771459818f, -0.6293203831f, 0.7208535671f, -0.6930873394f, 0.6593458056f, -0.7518398166f, 0.5930676460f, -0.8051526546f, + 0.5224985480f, -0.8526401520f, 0.4481492043f, -0.8939588070f, 0.3705574274f, -0.9288095236f, 0.2902846634f, -0.9569403529f, + 0.2079116851f, -0.9781476259f, 0.1240344495f, -0.9922779202f, 0.0392598175f, -0.9992290139f, -0.0457988679f, -0.9989506602f, + -0.1305261850f, -0.9914448857f, -0.2143091559f, -0.9767658710f, -0.2965415716f, -0.9550199509f, -0.3766284883f, -0.9263643622f, + -0.4539904892f, -0.8910065293f, -0.5280678272f, -0.8492021561f, -0.5983245969f, -0.8012537956f, -0.6642524600f, -0.7475083470f, + -0.7253744006f, -0.6883545518f, -0.7812481523f, -0.6242205501f, 1.0000000000f, -0.0000000000f, 0.9951847196f, -0.0980171412f, + 0.9807852507f, -0.1950903237f, 0.9569403529f, -0.2902846634f, 0.9238795042f, -0.3826834261f, 0.8819212914f, -0.4713967443f, + 0.8314695954f, -0.5555702448f, 0.7730104327f, -0.6343932748f, 0.7071067691f, -0.7071067691f, 0.6343932748f, -0.7730104327f, + 0.5555702448f, -0.8314695954f, 0.4713967443f, -0.8819212914f, 0.3826834261f, -0.9238795042f, 0.2902846634f, -0.9569403529f, + 0.1950903237f, -0.9807852507f, 0.0980171412f, -0.9951847196f, -0.0000000000f, -1.0000000000f, -0.0980171412f, -0.9951847196f, + -0.1950903237f, -0.9807852507f, -0.2902846634f, -0.9569403529f, -0.3826834261f, -0.9238795042f, -0.4713967443f, -0.8819212914f, + -0.5555702448f, -0.8314695954f, -0.6343932748f, -0.7730104327f, -0.7071067691f, -0.7071067691f, -0.7730104327f, -0.6343932748f, + -0.8314695954f, -0.5555702448f, -0.8819212914f, -0.4713967443f, -0.9238795042f, -0.3826834261f, -0.9569403529f, -0.2902846634f, + 1.0000000000f, -0.0000000000f, 0.9938164353f, -0.1110353097f, 0.9753423333f, -0.2206974328f, 0.9448060393f, -0.3276301920f, + 0.9025852680f, -0.4305110872f, 0.8492021561f, -0.5280678272f, 0.7853169441f, -0.6190939546f, 0.7117196321f, -0.7024636865f, + 0.6293203831f, -0.7771459818f, 0.5391383171f, -0.8422172070f, 0.4422886968f, -0.8968727589f, 0.3399692476f, -0.9404365420f, + 0.2334453613f, -0.9723699093f, 0.1240344495f, -0.9922779202f, 0.0130895954f, -0.9999143481f, -0.0980171412f, -0.9951847196f, + -0.2079116851f, -0.9781476259f, -0.3152349889f, -0.9490136504f, -0.4186597466f, -0.9081431627f, -0.5169069171f, -0.8560416102f, + -0.6087614298f, -0.7933533192f, -0.6930873394f, -0.7208535671f, -0.7688418031f, -0.6394389868f, -0.8350879550f, -0.5501164198f, + -0.8910065293f, -0.4539904892f, -0.9359059334f, -0.3522500396f, -0.9692308903f, -0.2461532950f, -0.9905693531f, -0.1370123476f, + -0.9996573329f, -0.0261769481f, -0.9963824749f, 0.0849821791f, 1.0000000000f, -0.0000000000f, 0.9922779202f, -0.1240344495f, + 0.9692308903f, -0.2461532950f, 0.9312149286f, -0.3644705117f, 0.8788171411f, -0.4771587551f, 0.8128466606f, -0.5824776888f, + 0.7343224883f, -0.6788007617f, 0.6444573402f, -0.7646402717f, 0.5446390510f, -0.8386705518f, 0.4364092350f, -0.8997482657f, + 0.3214394748f, -0.9469301105f, 0.2015053183f, -0.9794874191f, 0.0784590989f, -0.9969173074f, -0.0457988679f, -0.9989506602f, + -0.1693495065f, -0.9855560660f, -0.2902846634f, -0.9569403529f, -0.4067366421f, -0.9135454297f, -0.5169069171f, -0.8560416102f, + -0.6190939546f, -0.7853169441f, -0.7117196321f, -0.7024636865f, -0.7933533192f, -0.6087614298f, -0.8627343774f, -0.5056573749f, + -0.9187912345f, -0.3947438598f, -0.9606580734f, -0.2777338326f, -0.9876883626f, -0.1564344615f, -0.9994645715f, -0.0327190831f, + -0.9958049059f, 0.0915016159f, -0.9767658710f, 0.2143091559f, -0.9426414967f, 0.3338068724f, -0.8939588070f, 0.4481492043f, + 1.0000000000f, -0.0000000000f, 0.9905693531f, -0.1370123476f, 0.9624552131f, -0.2714404464f, 0.9161879420f, -0.4007488191f, + 0.8526401520f, -0.5224985480f, 0.7730104327f, -0.6343932748f, 0.6788007617f, -0.7343224883f, 0.5717879534f, -0.8204014301f, + 0.4539904892f, -0.8910065293f, 0.3276301920f, -0.9448060393f, 0.1950903237f, -0.9807852507f, 0.0588708036f, -0.9982656240f, + -0.0784590989f, -0.9969173074f, -0.2143091559f, -0.9767658710f, -0.3461170495f, -0.9381913543f, -0.4713967443f, -0.8819212914f, + -0.5877852440f, -0.8090170026f, -0.6930873394f, -0.7208535671f, -0.7853169441f, -0.6190939546f, -0.8627343774f, -0.5056573749f, + -0.9238795042f, -0.3826834261f, -0.9675990939f, -0.2524915636f, -0.9930684566f, -0.1175373942f, -0.9998072386f, 0.0196336918f, + -0.9876883626f, 0.1564344615f, -0.9569403529f, 0.2902846634f, -0.9081431627f, 0.4186597466f, -0.8422172070f, 0.5391383171f, + -0.7604059577f, 0.6494480371f, -0.6642524600f, 0.7475083470f, 1.0000000000f, -0.0000000000f, 0.9886910319f, -0.1499667615f, + 0.9550199509f, -0.2965415716f, 0.8997482657f, -0.4364092350f, 0.8241261840f, -0.5664062500f, 0.7298640609f, -0.6835923195f, + 0.6190939546f, -0.7853169441f, 0.4943211973f, -0.8692793250f, 0.3583679497f, -0.9335803986f, 0.2143091559f, -0.9767658710f, + 0.0654031262f, -0.9978589416f, -0.0849821791f, -0.9963824749f, -0.2334453613f, -0.9723699093f, -0.3766284883f, -0.9263643622f, + -0.5112931132f, -0.8594064116f, -0.6343932748f, -0.7730104327f, -0.7431448102f, -0.6691306233f, -0.8350879550f, -0.5501164198f, + -0.9081431627f, -0.4186597466f, -0.9606580734f, -0.2777338326f, -0.9914448857f, -0.1305261850f, -0.9998072386f, 0.0196336918f, + -0.9855560660f, 0.1693495065f, -0.9490136504f, 0.3152349889f, -0.8910065293f, 0.4539904892f, -0.8128466606f, 0.5824776888f, + -0.7163019180f, 0.6977904439f, -0.6035559177f, 0.7973206639f, -0.4771587551f, 0.8788171411f, -0.3399692476f, 0.9404365420f, + 1.0000000000f, -0.0000000000f, 0.9866433144f, -0.1628954709f, 0.9469301105f, -0.3214394748f, 0.8819212914f, -0.4713967443f, + 0.7933533192f, -0.6087614298f, 0.6835923195f, -0.7298640609f, 0.5555702448f, -0.8314695954f, 0.4127070308f, -0.9108638167f, + 0.2588190436f, -0.9659258127f, 0.0980171412f, -0.9951847196f, -0.0654031262f, -0.9978589416f, -0.2270762622f, -0.9738769531f, + -0.3826834261f, -0.9238795042f, -0.5280678272f, -0.8492021561f, -0.6593458056f, -0.7518398166f, -0.7730104327f, -0.6343932748f, + -0.8660253882f, -0.5000000000f, -0.9359059334f, -0.3522500396f, -0.9807852507f, -0.1950903237f, -0.9994645715f, -0.0327190831f, + -0.9914448857f, 0.1305261850f, -0.9569403529f, 0.2902846634f, -0.8968727589f, 0.4422886968f, -0.8128466606f, 0.5824776888f, + -0.7071067691f, 0.7071067691f, -0.5824776888f, 0.8128466606f, -0.4422886968f, 0.8968727589f, -0.2902846634f, 0.9569403529f, + -0.1305261850f, 0.9914448857f, 0.0327190831f, 0.9994645715f, 1.0000000000f, -0.0000000000f, 0.9844265580f, -0.1757962853f, + 0.9381913543f, -0.3461170495f, 0.8627343774f, -0.5056573749f, 0.7604059577f, -0.6494480371f, 0.6343932748f, -0.7730104327f, + 0.4886212349f, -0.8724960089f, 0.3276301920f, -0.9448060393f, 0.1564344615f, -0.9876883626f, -0.0196336918f, -0.9998072386f, + -0.1950903237f, -0.9807852507f, -0.3644705117f, -0.9312149286f, -0.5224985480f, -0.8526401520f, -0.6642524600f, -0.7475083470f, + -0.7853169441f, -0.6190939546f, -0.8819212914f, -0.4713967443f, -0.9510565400f, -0.3090170026f, -0.9905693531f, -0.1370123476f, + -0.9992290139f, 0.0392598175f, -0.9767658710f, 0.2143091559f, -0.9238795042f, 0.3826834261f, -0.8422172070f, 0.5391383171f, + -0.7343224883f, 0.6788007617f, -0.6035559177f, 0.7973206639f, -0.4539904892f, 0.8910065293f, -0.2902846634f, 0.9569403529f, + -0.1175373942f, 0.9930684566f, 0.0588708036f, 0.9982656240f, 0.2334453613f, 0.9723699093f, 0.4007488191f, 0.9161879420f, + 1.0000000000f, -0.0000000000f, 0.9820411205f, -0.1886669695f, 0.9288095236f, -0.3705574274f, 0.8422172070f, -0.5391383171f, + 0.7253744006f, -0.6883545518f, 0.5824776888f, -0.8128466606f, 0.4186597466f, -0.9081431627f, 0.2398044616f, -0.9708212018f, + 0.0523359552f, -0.9986295104f, -0.1370123476f, -0.9905693531f, -0.3214394748f, -0.9469301105f, -0.4943211973f, -0.8692793250f, + -0.6494480371f, -0.7604059577f, -0.7812481523f, -0.6242205501f, -0.8849876523f, -0.4656145275f, -0.9569403529f, -0.2902846634f, + -0.9945219159f, -0.1045284644f, -0.9963824749f, 0.0849821791f, -0.9624552131f, 0.2714404464f, -0.8939588070f, 0.4481492043f, + -0.7933533192f, 0.6087614298f, -0.6642524600f, 0.7475083470f, -0.5112931132f, 0.8594064116f, -0.3399692476f, 0.9404365420f, + -0.1564344615f, 0.9876883626f, 0.0327190831f, 0.9994645715f, 0.2206974328f, 0.9753423333f, 0.4007488191f, 0.9161879420f, + 0.5664062500f, 0.8241261840f, 0.7117196321f, 0.7024636865f, 1.0000000000f, -0.0000000000f, 0.9794874191f, -0.2015053183f, + 0.9187912345f, -0.3947438598f, 0.8204014301f, -0.5717879534f, 0.6883545518f, -0.7253744006f, 0.5280678272f, -0.8492021561f, + 0.3461170495f, -0.9381913543f, 0.1499667615f, -0.9886910319f, -0.0523359552f, -0.9986295104f, -0.2524915636f, -0.9675990939f, + -0.4422886968f, -0.8968727589f, -0.6139408350f, -0.7893520594f, -0.7604059577f, -0.6494480371f, -0.8756753206f, -0.4829003513f, + -0.9550199509f, -0.2965415716f, -0.9951847196f, -0.0980171412f, -0.9945219159f, 0.1045284644f, -0.9530586600f, 0.3027857840f, + -0.8724960089f, 0.4886212349f, -0.7561390996f, 0.6544109583f, -0.6087614298f, 0.7933533192f, -0.4364092350f, 0.8997482657f, + -0.2461532950f, 0.9692308903f, -0.0457988679f, 0.9989506602f, 0.1564344615f, 0.9876883626f, 0.3522500396f, 0.9359059334f, + 0.5336145163f, 0.8457278013f, 0.6930873394f, 0.7208535671f, 0.8241261840f, 0.5664062500f, 0.9213551283f, 0.3887219727f +}; + + +/* HVQ */ +const float hvq_thr_adj[5] = { 0.7071068f, 0.5000000f, 0.2500000f, 0.5000000f, 0.7071068f}; + +const float hvq_class_c[16] = +{ + -0.2324457f, -0.4390556f, 0.0651793f, 0.2109977f, + 0.1471332f, -0.1351437f, 0.4312476f, -0.1384814f, + -0.1384814f, 0.4312476f, -0.1351437f, 0.1471332f, + 0.2109977f, 0.0651793f, -0.4390556f, -0.2324457f +}; + +const int16_t hvq_cb_search_overlap24k[17] = +{ + 0, 8, 17, 27, + 39, 53, 69, 89, + 113, 128, 128, 128, + 128, 128, 128, 128, + 128 +}; + +const int16_t hvq_cb_search_overlap32k[21] = +{ + 0, 6, 13, 21, + 30, 40, 51, 64, + 78, 96, 116, 128, + 128, 128, 128, 128, + 128, 128, 128, 128, + 128 +}; + +const float hvq_peak_cb[1024] = +{ + -0.6912956f, -0.6271097f, -0.7024875f, 0.4262808f, + -0.7780800f, -0.8390081f, -0.2123103f, 0.1755754f, + -0.6005284f, -0.6187206f, -0.1867433f, 0.5583949f, + -0.1626335f, -0.6971197f, -0.6486326f, 0.4250869f, + -0.8399908f, -0.8860587f, 0.0171807f, 0.2217064f, + -0.7976624f, -0.4009260f, -0.2953390f, 0.2432917f, + -0.0157667f, -0.6356865f, -0.3266405f, 0.8188483f, + -0.8489450f, -0.6545582f, 0.0063441f, 0.1921560f, + -0.4517379f, -0.8665710f, -0.2336057f, 0.1562026f, + 0.4618506f, -0.7325841f, -0.6645442f, 0.7730063f, + -0.3442883f, -0.7223252f, -0.6207414f, -0.0612312f, + -0.4947599f, -0.7362953f, 0.2769519f, 0.6891029f, + -0.6117975f, -0.7841619f, -0.0077496f, 0.1986304f, + -0.5240943f, -0.9067913f, 0.0485043f, 0.2167943f, + -0.5396412f, -0.1256491f, -0.1235545f, 0.6819669f, + -0.8648130f, -0.4241201f, 0.0204877f, 0.2068082f, + -0.5605495f, -0.5470207f, -0.2261054f, 0.1577327f, + -0.6742380f, -0.5969556f, 0.0214089f, 0.1821478f, + -0.2017185f, -0.8361119f, -0.1487647f, 0.2677230f, + -0.9043679f, -0.1694224f, 0.0082920f, 0.2133927f, + -0.2797693f, -0.6069181f, -0.2787998f, 0.1967338f, + -0.7057108f, -0.7816155f, 0.2978523f, 0.1754361f, + -0.3176815f, -0.9099026f, 0.0490125f, 0.2141907f, + -0.4198575f, -0.7583196f, 0.0635993f, 0.2175556f, + -0.5430584f, -0.4931615f, 0.0181889f, 0.2223880f, + -0.6798062f, -0.3401114f, 0.0158910f, 0.1975791f, + -0.4111015f, -0.6318658f, -0.0022674f, 0.2056921f, + 0.0577086f, -0.4957561f, -0.3895008f, 0.4151040f, + -0.0493461f, -0.8356919f, -0.2944458f, 0.0766301f, + -0.6653519f, -0.3581038f, -0.1475882f, -0.0488843f, + -0.2951041f, -0.8518280f, 0.1970185f, 0.1934331f, + -0.7088394f, -0.1404796f, 0.0230110f, 0.1779071f, + -0.2349629f, -0.7451124f, 0.0672633f, 0.1989080f, + -0.8420037f, 0.0843352f, 0.0575119f, 0.2087238f, + -0.4653422f, -0.3204370f, 0.0104996f, 0.2118398f, + -0.4042698f, -0.2978680f, -0.1369022f, 0.1310524f, + -0.3691715f, -0.4627771f, 0.0194469f, 0.1874501f, + -0.7932880f, -0.4999925f, 0.5272518f, 0.1987127f, + -0.3157207f, -0.7989150f, 0.0281708f, -0.0724433f, + -0.4063714f, -0.5531399f, 0.2087681f, 0.2166726f, + -0.6433928f, -0.7400934f, 0.1283951f, -0.2888276f, + -0.6992665f, -0.2153651f, 0.2638986f, 0.2449246f, + 0.0759221f, -0.6326668f, -0.0243810f, 0.4197445f, + -0.1053094f, -0.3928218f, 0.0776661f, 0.5284011f, + 0.0786145f, -0.5979541f, -0.3155530f, 0.1330860f, + -0.2138216f, -0.5920822f, 0.0591093f, 0.2060311f, + 0.5341295f, -0.7605932f, -0.5172090f, 0.2604366f, + -0.1048604f, -0.8851262f, 0.1927255f, 0.1973499f, + -0.5168340f, -0.1512779f, 0.0180467f, 0.2015491f, + 0.0335269f, -0.8175794f, -0.0216168f, 0.1691676f, + -0.1815545f, -0.4323540f, -0.1449728f, 0.1241323f, + -0.3259940f, -0.4574721f, -0.2285515f, -0.1586095f, + 0.0051494f, -0.1975091f, -0.1569577f, 0.4943931f, + -0.6204569f, 0.0525578f, 0.0120660f, 0.1902273f, + -0.4779290f, -0.6992531f, 0.7534508f, 0.4339787f, + -0.1187649f, -0.6976845f, 0.1573026f, 0.1922948f, + -0.2681343f, -0.3088476f, 0.0065871f, 0.2084513f, + -0.3780985f, -0.3375740f, 0.1472063f, 0.1975328f, + -0.2351356f, -0.1280155f, -0.1625378f, 0.2005500f, + -0.0170806f, -0.6339361f, -0.0847550f, 0.0556140f, + -0.2045688f, -0.4398525f, 0.0735149f, 0.1856326f, + -0.3233196f, -0.7640965f, 0.4361117f, 0.1472444f, + 0.0629942f, -0.7853858f, 0.5146322f, 0.6244928f, + -0.0839811f, -0.8881392f, 0.3847862f, 0.2300789f, + -0.2330840f, -0.5500582f, 0.0594403f, 0.0210406f, + -0.3345076f, -0.1781868f, 0.0208460f, 0.1883004f, + -0.7935783f, 0.3725855f, 0.3278117f, 0.4754694f, + -0.0642284f, -0.2632120f, -0.1505273f, 0.2129149f, + -0.3033468f, -0.4616954f, 0.3710885f, 0.2992681f, + -0.4248384f, -0.0016876f, 0.0134380f, 0.1927050f, + -0.0092953f, -0.1855540f, 0.3449483f, 0.7852289f, + -0.3791312f, -0.0964576f, 0.2097941f, 0.3001604f, + -0.0848375f, -0.5015270f, 0.1259740f, 0.1763195f, + 0.5429158f, -0.3354102f, -0.2024174f, 0.6442416f, + 0.3773962f, -0.8102532f, -0.3228953f, -0.0772150f, + -0.2048677f, -0.3115774f, 0.1465945f, 0.1916357f, + -0.1810441f, 0.0864401f, 0.1519246f, 0.5593738f, + 0.0822840f, -0.7269843f, -0.3622333f, -0.4062700f, + 0.1607091f, -0.3317170f, -0.2421061f, 0.1359637f, + -0.0962719f, -0.3355251f, 0.0679005f, 0.1770951f, + 0.0250174f, -0.3651731f, -0.0426421f, 0.1630863f, + -0.1534063f, -0.2206571f, 0.0377216f, 0.1773635f, + -0.0503107f, -0.6410940f, 0.2730565f, 0.1690477f, + -0.4957757f, -0.0244409f, -0.0162808f, -0.0955787f, + -0.2524313f, -0.0397484f, 0.0112025f, 0.1818186f, + -0.8109849f, -0.1058945f, 0.2174591f, -0.2708842f, + -0.1470562f, -0.1641739f, -0.1197168f, 0.0447477f, + 0.0588656f, -0.6303298f, 0.1348466f, 0.1117979f, + 0.0743650f, -0.8166042f, 0.3325572f, 0.1713777f, + -0.2014585f, -0.3172087f, 0.0655640f, 0.0041949f, + 0.4579843f, -0.6991156f, -0.1204969f, 0.1891217f, + -0.2764455f, -0.8453921f, 0.7031553f, 0.1247506f, + 0.2536679f, -0.0081430f, 0.0907404f, 0.7806163f, + -0.1158093f, -0.1102171f, -0.0149151f, 0.1648406f, + 0.2353252f, -0.7899960f, 0.1050820f, 0.0800406f, + -0.7417480f, 0.0943212f, 0.4042825f, 0.0998893f, + -0.0950040f, -0.0430378f, 0.1080511f, 0.3676440f, + 0.0093255f, -0.3641596f, -0.1371177f, -0.0609554f, + -0.5714336f, 0.2519692f, 0.2317291f, 0.2202618f, + -0.4146698f, -0.2566845f, 0.2659634f, -0.0347036f, + -0.3670773f, 0.1802618f, 0.5463926f, 0.6508593f, + -0.0678326f, -0.7015804f, 0.3010046f, -0.0498279f, + -0.0220688f, -0.1813971f, 0.0217875f, 0.1577779f, + 0.0649310f, -0.4638375f, 0.0635012f, 0.0496216f, + -0.0147237f, -0.2600337f, 0.2481463f, 0.3285215f, + 0.0016037f, -0.3668163f, 0.1572298f, 0.1535826f, + 0.0720517f, -0.4195340f, 0.7542142f, 0.8043668f, + 0.0327889f, -0.8709202f, 0.5519686f, 0.1322237f, + 0.0325743f, -0.6758953f, 0.4356905f, 0.1690573f, + 0.0222460f, -0.4592628f, 0.2421902f, 0.1418606f, + -0.5079813f, -0.1937920f, 0.7216264f, 0.2938249f, + -0.0027737f, -0.2586997f, 0.1006489f, 0.1311191f, + 0.1067900f, -0.2263411f, -0.0675541f, 0.0894570f, + -0.1463278f, -0.1350150f, 0.1979781f, 0.1301280f, + -0.2848267f, 0.1030649f, 0.2004989f, 0.1749749f, + 0.0528965f, -0.5370577f, 0.3406753f, 0.1271570f, + -0.0828084f, -0.4938643f, 0.4483900f, 0.1278149f, + -0.7256999f, 0.2998409f, 0.7843215f, 0.4678534f, + 0.0178764f, -0.5886182f, 0.6584490f, 0.3674424f, + 0.3457182f, -0.4777862f, 0.0898507f, 0.2238471f, + 0.2808650f, -0.5159423f, -0.1746428f, -0.1639121f, + -0.2412612f, -0.1413623f, 0.3805663f, 0.1746805f, + -0.0037664f, -0.5041469f, 0.0297737f, -0.2529321f, + 0.0385025f, -0.1210239f, -0.0919721f, -0.0045255f, + 0.0070289f, -0.0661929f, 0.0154059f, 0.1206527f, + -0.0688511f, -0.3501640f, 0.3048728f, 0.0806736f, + 0.1477360f, -0.2446724f, -0.1408905f, -0.0903137f, + 0.7393242f, -0.6937444f, 0.2281068f, 0.5408337f, + 0.2058932f, -0.1764501f, 0.1488327f, 0.2644186f, + -0.2103685f, -0.7390670f, 0.3717342f, -0.4480860f, + 0.0866347f, -0.2311362f, 0.1469333f, 0.0725029f, + 0.0817948f, -0.1216286f, 0.0533709f, 0.0628859f, + -0.0171689f, 0.0986378f, 0.0927410f, 0.1758267f, + 0.0104681f, -0.1266550f, 0.2014265f, 0.1157332f, + 0.1939706f, 0.2196828f, 0.3266076f, 0.7405447f, + -0.7823431f, -0.3710044f, 0.6980741f, -0.4465685f, + 0.0743889f, -0.2648934f, 0.2536655f, 0.0943156f, + 0.2177452f, -0.0949112f, 0.0081777f, 0.1387556f, + 0.1303671f, 0.1490959f, 0.1788726f, 0.4326436f, + 0.3473369f, -0.3169577f, -0.0234188f, 0.0441885f, + 0.0540186f, -0.8776336f, 0.8440490f, 0.1417058f, + -0.0917870f, -0.3147601f, 0.5500574f, 0.1602690f, + 0.2136007f, -0.5448702f, 0.2987510f, 0.0277404f, + 0.0474804f, -0.6571059f, 0.6386938f, 0.0971133f, + 0.8189747f, -0.7255339f, -0.0875124f, 0.1071008f, + -0.3016306f, -0.4416167f, 0.7533376f, 0.0058841f, + -0.1006996f, -0.1797670f, 0.1598059f, -0.1746155f, + -0.2759751f, -0.4375621f, 0.5324653f, -0.2187090f, + -0.0208548f, 0.0007885f, 0.1221271f, -0.0071798f, + 0.0937424f, -0.3872427f, 0.4131232f, 0.0814878f, + 0.1091490f, -0.3197269f, 0.3081368f, 0.0438068f, + 0.5405672f, -0.7493672f, 0.2284625f, 0.0522655f, + 0.2024367f, -0.2027840f, 0.0568407f, -0.0238867f, + 0.0971868f, -0.2548049f, 0.1213150f, -0.1210491f, + 0.2468838f, -0.7298202f, 0.2279600f, -0.2664659f, + 0.0852271f, -0.5106476f, 0.5313835f, 0.0594584f, + -0.1823397f, -0.4332103f, 0.0531194f, -0.6742789f, + 0.1030347f, -0.0238603f, 0.5571925f, 0.5078690f, + 0.1173396f, -0.1079135f, 0.1567269f, 0.0102248f, + 0.0996963f, -0.0219312f, 0.3216055f, 0.2366872f, + -0.3354882f, 0.1576330f, 0.5458030f, 0.1454629f, + 0.1444273f, -0.2365381f, 0.4773806f, 0.2506996f, + 0.1122540f, 0.0514636f, 0.1089756f, 0.0667886f, + -0.3413622f, 0.0448554f, 0.1877440f, -0.3506308f, + 0.1328394f, -0.0670468f, 0.0414011f, -0.0965496f, + 0.1299393f, -0.1839806f, 0.2569631f, -0.0070157f, + 0.1898328f, -0.0451201f, 0.0642396f, -0.0240266f, + -0.1290649f, -0.1413532f, 0.4606663f, -0.0510201f, + 0.0606055f, -0.4923670f, 0.4283018f, -0.1857787f, + 0.2395181f, -0.4428843f, 0.0877497f, -0.3090582f, + 0.1463607f, -0.4354426f, -0.2673760f, -0.7759982f, + 0.0363660f, -0.7473857f, 0.6714249f, -0.1897013f, + 0.0078778f, -0.3179395f, 0.8379888f, 0.3211752f, + -0.0229962f, 0.2191676f, 0.2311431f, 0.1050956f, + 0.1829474f, 0.0992829f, 0.7687454f, 0.7776823f, + 0.1946814f, -0.1941786f, 0.0124760f, -0.2574112f, + -0.1012860f, 0.0992883f, 0.3672758f, 0.0414330f, + 0.0971759f, -0.1978175f, 0.3925655f, -0.0065848f, + 0.7740223f, -0.2335201f, -0.0906675f, 0.1745083f, + 0.1516487f, -0.1042227f, 0.2148387f, -0.0795036f, + 0.0798246f, -0.6448072f, 0.8609363f, 0.0393394f, + 0.0779220f, -0.4600459f, 0.7273327f, 0.0570835f, + 0.4454859f, -0.2072924f, 0.2193948f, 0.1384101f, + 0.1703254f, -0.0609580f, 0.1299055f, -0.1323671f, + 0.1839394f, -0.3244128f, 0.3025059f, -0.1719029f, + 0.1127521f, -0.3544195f, 0.5826200f, 0.0178632f, + 0.1347488f, -0.2685010f, 0.4751232f, -0.0335460f, + -0.0268326f, 0.0229464f, 0.5944858f, 0.1651578f, + 0.1752550f, 0.0136593f, 0.3010034f, 0.0409467f, + 0.6297039f, -0.5169880f, -0.2259630f, -0.5169126f, + -0.3645581f, 0.5447856f, 0.5927204f, 0.1806151f, + 0.3826406f, -0.6356577f, 0.6929637f, 0.0339571f, + 0.1438846f, -0.1324825f, 0.3836886f, -0.1131758f, + 0.1225381f, -0.2508278f, 0.1022063f, -0.5355556f, + 0.1951728f, -0.0473224f, 0.1347071f, -0.2533568f, + 0.7506700f, -0.7468928f, 0.6686158f, 0.2984126f, + 0.1631571f, 0.0422823f, 0.2118532f, -0.1436800f, + -0.0460037f, 0.0633928f, 0.2509617f, -0.3180083f, + 0.1858027f, -0.1040863f, 0.2692820f, -0.1939493f, + 0.2203176f, 0.5295745f, 0.6812901f, 0.7900824f, + 0.2034420f, -0.0552806f, 0.0599414f, -0.4107925f, + 0.2479052f, -0.1359192f, 0.8121924f, 0.3484631f, + 0.1398457f, -0.2176905f, 0.5621405f, -0.1195728f, + -0.0080597f, 0.3218221f, 0.7571263f, 0.3912670f, + 0.2116680f, -0.6982532f, 0.3125198f, -0.7360096f, + 0.0948572f, -0.2203334f, 0.3659414f, -0.3956103f, + 0.1293136f, -0.3171252f, 0.7146217f, -0.0790813f, + 0.1411146f, -0.4510387f, 0.8887131f, -0.0377003f, + 0.2301871f, -0.0353170f, 0.5297350f, 0.0379717f, + 0.6152722f, -0.1928382f, 0.0785710f, -0.1588030f, + 0.1337912f, 0.1823085f, 0.3354832f, -0.0887607f, + 0.0494082f, -0.1225804f, 0.7939893f, 0.0220200f, + 0.1421773f, 0.3523192f, 0.4413828f, 0.1457048f, + -0.0882652f, 0.3232748f, 0.4595339f, -0.1386560f, + 0.0601664f, -0.4816208f, 0.8133457f, -0.3112419f, + 0.1845199f, -0.0171361f, 0.3659768f, -0.2448125f, + 0.1891260f, -0.0106495f, 0.2419292f, -0.3683512f, + 0.6530412f, -0.4171780f, 0.4613151f, 0.0030213f, + 0.1778989f, -0.1239391f, 0.5100323f, -0.2197134f, + -0.2717385f, 0.1272452f, 0.7572512f, -0.2318920f, + 0.3716251f, 0.1855403f, 0.5916812f, 0.3385713f, + 0.1300696f, 0.0471288f, 0.5215391f, -0.1457248f, + -0.2123145f, -0.1802899f, 0.5974199f, -0.7072856f, + 0.2174739f, -0.7171207f, 0.7595373f, -0.5396347f, + 0.1682724f, -0.1652717f, 0.7105864f, -0.1779208f, + 0.1949437f, -0.0545715f, 0.4387951f, -0.3539158f, + 0.1556118f, -0.2676762f, 0.8786431f, -0.1395478f, + 0.1839802f, -0.1270819f, 0.0981727f, -0.8218095f, + 0.1961324f, 0.0044393f, 0.2839973f, -0.5454667f, + 0.1691811f, 0.1170212f, 0.7761239f, -0.0004658f, + 0.2532176f, -0.3257096f, 0.6409724f, -0.4603164f, + 0.1836927f, -0.2327923f, 0.4239208f, -0.6877027f, + 0.8283811f, 0.0514265f, 0.3075364f, 0.1290827f, + 0.1590365f, -0.0471006f, 0.6768611f, -0.3246488f, + 0.1948562f, 0.1742693f, 0.4112475f, -0.3959884f, + 0.1608810f, 0.5362161f, 0.7247152f, 0.1551418f, + -0.0640990f, 0.2785439f, 0.4195016f, -0.6363523f, + -0.4977460f, 0.4795997f, 0.6537622f, -0.7041565f, + 0.1993300f, -0.0009453f, 0.5226769f, -0.5072073f, + 0.1647024f, -0.1025920f, 0.8690643f, -0.2884946f, + 0.1903634f, 0.0383981f, 0.4024816f, -0.6858912f, + 0.3935245f, -0.1394052f, 0.2460183f, -0.8132467f, + 0.0876800f, 0.1823305f, 0.6760031f, -0.4640969f, + 0.1928370f, -0.0154626f, 0.7054892f, -0.5314507f, + 0.7363694f, -0.4335648f, 0.3939214f, -0.6439396f, + 0.2216142f, 0.2584981f, 0.7753125f, -0.2883786f, + 0.1655171f, -0.0354699f, 0.9000988f, -0.4917610f, + 0.6522388f, 0.6980886f, 0.7493314f, 0.5121635f, + 0.2039644f, 0.0748634f, 0.4817260f, -0.8814858f, + 0.1984904f, 0.0331222f, 0.6597681f, -0.7397799f, + 0.6551378f, 0.0189344f, 0.7086707f, -0.2207969f, + 0.3331688f, 0.2704824f, 0.5667230f, -0.6593540f, + 0.2047795f, -0.0638265f, 0.8838190f, -0.7884763f, + 0.2100875f, 0.6368825f, 0.8423747f, -0.2746185f, + 0.2074577f, 0.1714071f, 0.8760290f, -0.6561672f, + 0.1851064f, 0.1440378f, 0.7655031f, -0.8835155f +}; + +const int16_t hvq_pg_huff_offset[NUM_PG_HUFFLEN] = {0,2,3,8,9,11,13,15,19}; +const int16_t hvq_pg_huff_thres[NUM_PG_HUFFLEN] = {0,0x2,0x4,0x18,0x20,0x40,0x80,0x100,0x300}; + +const int16_t hvq_pg_huff_tab[32] = +{ + 30, 31, 1, 0, 2, 3, 28, 29, 4, 5, 27, 25, 26, 6, 24, 7, 8, 22, 23, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21 +}; + +const int16_t hvq_cp_huff_len[52] = +{ + 3, 4, 5, 6, 6, 6, 6, 6, 4, 4, 5, 5, 5, 5, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 8, + 8, 8, 8, 8, 9, 10, 10, 11, 11, 11, 10, 10, 10, 10, 11, 12, 12, 13, 13, 12, 12, 11, 12 +}; + +const int16_t hvq_cp_huff_val[52] = +{ + 7, 8, 6, 3, 4, 5, 6, 7, 9, 10, 7, 8, 9, 10, 11, 12, 13, 11, 12, 13, 14, 15, 8, 9, 10, + 11, 4, 5, 3, 4, 5, 6, 7, 5, 4, 5, 3, 4, 5, 6, 7, 8, 9, 6, 1, 2, 0, 1, 3, 4, 7, 5 +}; + +const int16_t hvq_cp_layer1_map5[HVQ_CP_MAP_LEN] = { 16, 8, 4, 2, 1, 18, 17, 9 }; + +const int16_t hvq_cp_huff_thres[HVQ_CP_HUFF_NUM_LEN] = { 0x0, 0x2, 0xC, 0x20, 0x50, 0x60, 0x100, 0x180, 0x600, 0x1000, 0x1C00 }; +const int16_t hvq_cp_huff_offset[HVQ_CP_HUFF_NUM_LEN] = { 0, 2, 7, 12, 18, 19, 24, 26, 35, 45, 51 }; + +const int16_t hvq_cp_huff_tab[52] = +{ + 46, 47, 44, 45, 48, 49, 51, 36, 37, 38, 43, 50, 34, 35, 39, 40, 41, 42, 33, 28, 29, 30, 31, 32, 26, 27, + 3, 4, 5, 6, 7, 22, 23, 24, 25, 2, 10, 11, 12, 13, 17, 18, 19, 20, 21, 1, 8, 9, 14, 15, 16, 0 +}; + +/*----------------------------------------------------------------------------------* + * FEC for HQ core + *----------------------------------------------------------------------------------*/ + +const int16_t Num_bands_NB[MAX_SB_NB] = {8,8,2}; + +const float SmoothingWin_NB875[70] = +{ + 0.00000000f,0.00050347f,0.00201285f,0.00452512f,0.00803521f,0.01253604f,0.01801857f,0.02447174f,0.03188256f,0.04023611f, + 0.04951557f,0.05970223f,0.07077560f,0.08271337f,0.09549150f,0.10908426f,0.12346427f,0.13860257f,0.15446869f,0.17103064f, + 0.18825510f,0.20610736f,0.22455151f,0.24355036f,0.26306567f,0.28305814f,0.30348748f,0.32431260f,0.34549150f,0.36698157f, + 0.38873953f,0.41072154f,0.43288338f,0.45518035f,0.47756758f,0.50000000f,0.52243245f,0.54481965f,0.56711662f,0.58927846f, + 0.61126047f,0.63301843f,0.65450847f,0.67568743f,0.69651252f,0.71694189f,0.73693430f,0.75644964f,0.77544850f,0.79389262f, + 0.81174493f,0.82896936f,0.84553134f,0.86139745f,0.87653571f,0.89091575f,0.90450847f,0.91728663f,0.92922437f,0.94029778f, + 0.95048445f,0.95976388f,0.96811742f,0.97552824f,0.98198146f,0.98746395f,0.99196482f,0.99547487f,0.99798715f,0.99949653f +}; + +const float SmoothingWin_NB2[16] = +{ + 0.00000000f,0.00960736f,0.03806023f,0.08426519f,0.14644661f,0.22221488f,0.30865828f,0.40245484f,0.50000000f,0.59754516f, + 0.69134172f,0.77778512f,0.85355339f,0.91573481f,0.96193977f,0.99039264f +}; + +/*----------------------------------------------------------------------------------* + * SC-VBR + *----------------------------------------------------------------------------------*/ + +const float bp1_num_coef_wb[5] = {0.9329833984375,0,-1.865966796875,0,0.9329833984375}; +const float bp1_den_coef_wb[5] = {1,0,-1.8614501953125,0,0.8704833984375}; + +const float shape1_num_coef[11] = +{ + 0.959381103515625f, -0.074554443359375f, -0.4161376953125f, 0.1317138671875f, + -0.3109130859375f, 0.00146484375f, 0.080535888671875f, -0.109100341796875f, + -0.023681640625f, 0.03192138671875f, 0.012176513671875f +}; + +const float shape1_den_coef[11] = +{ + 1, 0.0897216796875f, -0.373443603515625f, 0.123046875f, -0.293243408203125f, + -0.06097412109375f, 0.071258544921875f, -0.1190185546875f, -0.048675537109375f, + 0.026153564453125f, 0.007720947265625f +}; + +const float shape2_num_coef[11] = +{ + 0.938720703125f, 0.000946044921875f, -0.295989990234375f, 0.2904052734375f, + -0.17938232421875f, -0.221221923828125f, -0.3194580078125f, 0.01348876953125f, + 0.10003662109375f, -0.001922607421875f, 0.034027099609375f +}; + +const float shape2_den_coef[11] = +{ + 1, 0.488861083984375f, -0.02716064453125f, 0.390594482421875f, 0.07159423828125f, + -0.213165283203125f, -0.402587890625f, -0.176849365234375f, -0.028961181640625f, + -0.0455322265625f, -0.00927734375f +}; + +const float shape3_num_coef[11] = +{ + 0.936431884765625f, -0.011688232421875f, -0.303253173828125f, -0.293121337890625f, + -0.183013916015625f, 0.232269287109375f, -0.317169189453125f, -0.010833740234375f, + 0.098846435546875f, 0.0003662109375f, 0.0364990234375f +}; + +const float shape3_den_coef[11] = +{ + 1, -0.50347900390625f, -0.027801513671875f, -0.395111083984375f, 0.06976318359375f, + 0.22674560546875f, -0.408477783203125f, 0.18511962890625f, -0.03607177734375f, + 0.0482177734375f, -0.008331298828125f +}; + +const float txlpf1_num_coef[11] = +{ + 0.016845703125, 0.024169921875, 0.062744140625, 0.0831298828125, 0.1124267578125, + 0.11767578125, 0.1124267578125, 0.0831298828125, 0.062744140625, 0.024169921875, + 0.016845703125 +}; + +const float txlpf1_den_coef[11] = +{ + 1, -2.3126220703125, 3.8590087890625, -3.8023681640625, 2.989990234375, + -1.5567626953125, 0.6748046875, -0.17529296875, 0.0423583984375, -0.0030517578125, + 0.00048828125 +}; + +const float txhpf1_num_coef[11] = +{ + 0.016845703125, -0.024169921875, 0.062744140625, -0.0831298828125, 0.1124267578125, + -0.11767578125, 0.1124267578125, -0.0831298828125, 0.062744140625, -0.024169921875, + 0.016845703125 +}; + +const float txhpf1_den_coef[11] = +{ + 1, 2.3126220703125, 3.8590087890625, 3.8023681640625, 2.989990234375, 1.5567626953125, + 0.6748046875, 0.17529296875, 0.0423583984375, 0.0030517578125, 0.00048828125 +}; + +/* NELP filter coefficients */ +const float bp1_num_coef_nb_fx_order7[8] = +{ + 0.180780569293627f, 0.821512462016641f, 1.901786162198923f, 2.798216464912205f, + 2.798216464912205f, 1.901786162198923f, 0.821512462016641f, 0.180780569293627f +}; + +const float bp1_den_coef_nb_fx_order7[8] = +{ + 1.0f, 1.972212566911875f, 2.906981567843655f, 2.667903533650106f, + 1.784691945273023f, 0.807367818229743f, 0.232764318343094f, 0.032669566591295f +}; + + +/* order 8 LPF for nelp frames when non-native sampling freq inputs used with -max_band NB */ +/* used to suppress frequencies above 4kHz present at the output of filters in pre_proc() */ + +const float num_nelp_lp[NELP_LP_ORDER+1] = +{ + 0.088754442436105f, 0.427948705228526f, 1.097120864220837f, 1.834535180016855f, + 2.164546590741725f, 1.833722723336889f, 1.096120298806107f, 0.427341227067866f, 0.088564563680987f +}; + +const float den_nelp_lp[NELP_LP_ORDER+1] = +{ + 1.000000000000000f, 1.076558216566388f, 2.638952788853937f, 1.485213059043660f, + 1.941109655171129f, 0.433697456681428f, 0.488030665133170f, -0.014677457543018f, 0.043067530202687f +}; + + + +/* NELP gain tables */ +const float UVG1CB_WB[UVG1_CBSIZE][2] = +{ + { -0.271424f, -0.258097f, }, + { 1.546157f, 1.503115f, }, + { 0.454480f, 1.182801f, }, + { 2.182661f, 2.194626f, }, + { 0.504902f, 0.481656f, }, + { 1.416585f, 2.597607f, }, + { 1.193427f, 1.140118f, }, + { 2.649107f, 2.640023f, }, + { 0.132870f, 0.204961f, }, + { 1.708137f, 1.672001f, }, + { 1.274749f, 0.636471f, }, + { 2.405026f, 2.403867f, }, + { 0.666233f, 0.649061f, }, + { 2.081430f, 2.065141f, }, + { 1.734086f, 1.037998f, }, + { 2.969951f, 2.962773f, }, + { -0.014392f, -0.034103f, }, + { 1.417866f, 1.814293f, }, + { 0.842041f, 0.798819f, }, + { 2.308757f, 2.275084f, }, + { 0.139464f, 0.831392f, }, + { 1.952503f, 1.961636f, }, + { 0.844903f, 1.609146f, }, + { 2.790210f, 2.775995f, }, + { 0.368318f, 0.275885f, }, + { 1.825159f, 1.830021f, }, + { 0.998048f, 0.987868f, }, + { 2.529417f, 2.508405f, }, + { 0.908356f, 0.289270f, }, + { 2.184707f, 1.707541f, }, + { 1.341007f, 1.338580f, }, + { 3.185808f, 3.172863f, }, +}; + +const float UVG1CB_NB[UVG1_CBSIZE][2] = +{ + { -0.584898f, -0.629564f, }, + { 0.588898f, 0.602697f, }, + { -0.420328f, 0.440621f, }, + { 0.676153f, 1.866763f, }, + { -0.057218f, -0.486523f, }, + { 0.973746f, 0.995785f, }, + { 0.335472f, 0.304245f, }, + { 1.717476f, 1.710655f, }, + { -0.303435f, -0.349463f, }, + { 0.736475f, 0.719210f, }, + { 0.326864f, -0.053863f, }, + { 1.433214f, 1.440908f, }, + { -0.031290f, -0.103346f, }, + { 1.117363f, 1.089082f, }, + { -0.012970f, 0.729895f, }, + { 2.060025f, 2.043535f, }, + { -0.437514f, -0.472825f, }, + { 0.428648f, 1.164362f, }, + { 0.049001f, 0.050772f, }, + { 1.352832f, 1.287837f, }, + { -0.173046f, -0.210522f, }, + { 1.097114f, 0.641427f, }, + { 0.765980f, 0.138765f, }, + { 1.876515f, 1.861232f, }, + { -0.475929f, 0.036795f, }, + { 0.851593f, 0.866113f, }, + { 0.192944f, 0.177338f, }, + { 1.585417f, 1.565396f, }, + { 0.328590f, -0.377592f, }, + { 1.193646f, 1.239326f, }, + { 0.480756f, 0.442872f, }, + { 2.297758f, 2.282144f, }, +}; + +const float UVG2CB1_WB[UVG2_CBSIZE][5] = +{ + { 0.223040f, 0.241651f, 0.363680f, 1.453550f, 0.639043f, }, + { 1.367034f, 1.128134f, 0.995599f, 0.852711f, 0.746318f, }, + { 1.203618f, 0.984239f, 0.732146f, 0.524829f, 0.416474f, }, + { 1.885173f, 0.737643f, 0.440409f, 0.360901f, 0.354375f, }, + { 0.285902f, 0.339404f, 1.683466f, 0.632872f, 0.362779f, }, + { 1.014419f, 1.046733f, 1.076532f, 1.102226f, 1.117500f, }, + { 0.886868f, 0.893899f, 0.901808f, 0.906043f, 0.912148f, }, + { 3.225548f, 1.222902f, 0.637340f, 0.530948f, 0.499932f, }, + { 0.907185f, 0.704885f, 0.549973f, 0.479615f, 0.420607f, }, + { 1.743322f, 1.114901f, 0.838360f, 0.725076f, 0.584914f, }, + { 0.697213f, 0.741751f, 0.795735f, 0.849916f, 0.905532f, }, + { 1.447413f, 1.332714f, 1.201884f, 1.085950f, 0.997001f, }, + { 0.239259f, 0.250031f, 0.378390f, 1.388066f, 1.962520f, }, + { 0.858277f, 1.795467f, 2.537226f, 0.883659f, 0.697253f, }, + { 0.634313f, 0.755069f, 0.874414f, 1.167114f, 1.456359f, }, + { 0.479120f, 2.683769f, 1.225698f, 0.698405f, 0.631620f, }, + { 0.194304f, 0.223532f, 0.246663f, 0.286883f, 1.884711f, }, + { 1.085250f, 1.075760f, 1.060584f, 1.037376f, 1.019217f, }, + { 0.355082f, 1.585122f, 0.637538f, 0.429221f, 0.431000f, }, + { 1.537046f, 1.876537f, 1.162872f, 0.718938f, 0.537773f, }, + { 0.366750f, 0.384063f, 0.462624f, 0.727828f, 1.333889f, }, + { 1.159580f, 1.178847f, 1.198408f, 1.203392f, 1.195077f, }, + { 0.889680f, 0.921507f, 0.957437f, 0.985704f, 1.004871f, }, + { 2.209824f, 1.807385f, 1.465675f, 1.158738f, 0.996400f, }, + { 0.380420f, 0.456231f, 0.569092f, 0.732313f, 0.877647f, }, + { 1.140464f, 1.134349f, 1.126392f, 1.111634f, 1.094200f, }, + { 0.552280f, 0.636810f, 0.771019f, 0.949718f, 1.090795f, }, + { 1.356338f, 1.328390f, 1.665898f, 1.744565f, 1.397443f, }, + { 0.358875f, 0.378330f, 0.492142f, 2.726906f, 0.934503f, }, + { 1.339929f, 1.530712f, 1.653071f, 2.002372f, 2.265826f, }, + { 0.848927f, 0.901721f, 1.004240f, 1.088962f, 1.148716f, }, + { 2.655634f, 4.390627f, 2.488829f, 1.779943f, 0.689514f, }, + { 0.323918f, 0.365752f, 0.360473f, 0.406899f, 0.521889f, }, + { 1.089529f, 1.049556f, 0.999532f, 0.947192f, 0.910775f, }, + { 0.778315f, 0.772521f, 0.770412f, 0.757735f, 0.766615f, }, + { 2.382149f, 1.389184f, 0.821738f, 0.560577f, 0.437522f, }, + { 0.422645f, 0.427987f, 3.028798f, 0.996559f, 0.548607f, }, + { 0.943902f, 0.991288f, 1.222348f, 1.287613f, 1.275699f, }, + { 0.976039f, 0.966009f, 0.952110f, 0.937347f, 0.925149f, }, + { 4.404412f, 2.299179f, 1.359051f, 0.845995f, 0.611213f, }, + { 0.527446f, 0.618156f, 0.706851f, 0.629108f, 0.566558f, }, + { 1.233373f, 1.169295f, 1.096161f, 1.026234f, 0.965180f, }, + { 0.825364f, 0.833740f, 0.844135f, 0.853512f, 0.863188f, }, + { 1.505253f, 1.418813f, 1.328096f, 1.229135f, 1.135295f, }, + { 0.693032f, 0.827423f, 1.234705f, 1.845313f, 2.542454f, }, + { 0.945943f, 1.081860f, 1.265427f, 1.540595f, 1.749407f, }, + { 1.052402f, 1.008307f, 0.871943f, 0.749492f, 2.088583f, }, + { 2.146194f, 2.016499f, 1.782081f, 1.524242f, 1.323508f, }, + { 0.290883f, 0.301913f, 0.334033f, 0.442895f, 2.885471f, }, + { 0.606905f, 1.398622f, 1.501382f, 1.030661f, 0.895216f, }, + { 0.980941f, 0.933889f, 0.878940f, 0.827155f, 0.794956f, }, + { 1.832121f, 1.420187f, 1.218118f, 0.992368f, 0.811142f, }, + { 0.349042f, 0.479090f, 1.353992f, 0.999951f, 1.142766f, }, + { 1.316650f, 1.312876f, 1.299885f, 1.276895f, 1.233464f, }, + { 0.986649f, 0.998506f, 1.008895f, 1.015456f, 1.020661f, }, + { 3.044209f, 2.251119f, 1.400128f, 0.883141f, 0.610713f, }, + { 0.606060f, 0.626282f, 0.675680f, 0.754010f, 0.845070f, }, + { 1.271739f, 1.240164f, 1.197404f, 1.148908f, 1.103891f, }, + { 0.766260f, 0.820830f, 0.890415f, 0.954560f, 1.014693f, }, + { 1.742866f, 1.608286f, 1.450560f, 1.281919f, 1.141203f, }, + { 0.419616f, 0.455676f, 1.951458f, 1.863714f, 0.973334f, }, + { 0.875636f, 1.291339f, 1.924261f, 3.300506f, 3.929508f, }, + { 0.588088f, 0.613937f, 0.671033f, 1.786119f, 1.131808f, }, + { 7.419703f, 4.514918f, 3.368681f, 1.171582f, 0.557291f, }, +}; + +const float UVG2CB2_WB[UVG2_CBSIZE][5] = +{ + { 0.382157f, 0.339570f, 0.399108f, 1.276274f, 0.654653f, }, + { 0.526317f, 0.624477f, 1.514850f, 1.357657f, 0.962890f, }, + { 0.497765f, 0.587492f, 0.755478f, 0.832206f, 0.968825f, }, + { 1.242760f, 1.236637f, 1.218059f, 1.186075f, 1.163104f, }, + { 0.350569f, 0.423863f, 0.687511f, 0.576640f, 0.586036f, }, + { 1.068227f, 1.080389f, 1.090163f, 1.093335f, 1.096811f, }, + { 1.134662f, 0.996393f, 0.866640f, 0.727742f, 0.651101f, }, + { 0.416366f, 0.476179f, 0.898235f, 1.911077f, 2.415833f, }, + { 0.693081f, 0.445820f, 0.352293f, 0.295523f, 0.303834f, }, + { 0.338564f, 0.344193f, 0.431633f, 2.166267f, 1.070002f, }, + { 0.981922f, 0.923891f, 0.870264f, 0.809574f, 0.755981f, }, + { 2.437343f, 1.744939f, 1.275522f, 0.913573f, 0.738923f, }, + { 1.652469f, 0.575451f, 0.373855f, 0.353600f, 0.379997f, }, + { 1.120803f, 1.140296f, 1.155888f, 1.163382f, 1.169191f, }, + { 1.051700f, 1.024805f, 0.989204f, 0.951249f, 0.920163f, }, + { 0.558571f, 0.622568f, 1.201735f, 2.024839f, 3.632277f, }, + { 0.332205f, 0.361342f, 0.368816f, 0.486187f, 2.551270f, }, + { 0.716016f, 0.764423f, 0.901925f, 1.144217f, 1.269692f, }, + { 0.972618f, 0.744037f, 0.605346f, 0.645594f, 1.346183f, }, + { 1.306825f, 1.337871f, 1.339887f, 1.326540f, 1.327383f, }, + { 0.810386f, 0.703444f, 0.617077f, 0.525349f, 0.470428f, }, + { 1.189609f, 1.159137f, 1.117761f, 1.075965f, 1.039311f, }, + { 1.509928f, 1.073290f, 0.915705f, 0.830047f, 0.707661f, }, + { 0.527199f, 1.969524f, 1.839455f, 1.250142f, 0.888607f, }, + { 0.553059f, 2.484691f, 0.928542f, 0.631924f, 0.595981f, }, + { 0.534157f, 0.538470f, 1.048001f, 3.098313f, 1.438832f, }, + { 0.875629f, 0.891265f, 0.918069f, 0.943470f, 0.966723f, }, + { 3.212350f, 2.380788f, 1.750784f, 1.325976f, 1.309454f, }, + { 1.393980f, 1.018875f, 0.714902f, 0.510150f, 0.433226f, }, + { 0.861995f, 0.935236f, 1.133018f, 1.412823f, 1.616763f, }, + { 1.073054f, 1.063390f, 1.045198f, 1.023854f, 1.003573f, }, + { 0.547694f, 0.604539f, 1.419472f, 0.968088f, 6.634663f, }, + { 0.384404f, 0.407015f, 1.841710f, 0.733522f, 0.484417f, }, + { 0.630723f, 0.612993f, 2.852480f, 1.407572f, 1.173696f, }, + { 0.886615f, 0.844153f, 0.800046f, 0.760230f, 0.725250f, }, + { 2.092080f, 1.654743f, 1.432156f, 1.346378f, 1.255149f, }, + { 0.797508f, 0.740916f, 0.717801f, 0.679101f, 0.657052f, }, + { 0.959244f, 1.037313f, 1.117438f, 1.190695f, 1.260351f, }, + { 1.084782f, 1.018723f, 0.943477f, 0.876418f, 0.814781f, }, + { 0.976114f, 1.153683f, 1.398515f, 1.677934f, 1.925023f, }, + { 1.066698f, 0.689574f, 0.546216f, 0.402266f, 0.342894f, }, + { 0.244053f, 0.249520f, 0.360608f, 0.654699f, 3.729612f, }, + { 0.955958f, 0.940178f, 0.919330f, 0.894537f, 0.876740f, }, + { 3.224046f, 1.094907f, 0.788658f, 0.951478f, 0.890611f, }, + { 2.441966f, 0.858237f, 0.584262f, 0.545170f, 0.539909f, }, + { 1.123818f, 1.180721f, 1.238015f, 1.283992f, 1.321097f, }, + { 0.956697f, 0.985042f, 1.019696f, 1.050902f, 1.078825f, }, + { 0.743688f, 2.034202f, 4.022331f, 2.727508f, 2.650772f, }, + { 0.250845f, 0.245822f, 0.291984f, 0.385336f, 1.449503f, }, + { 0.461815f, 0.591238f, 0.787875f, 0.956948f, 1.806615f, }, + { 0.875089f, 0.862359f, 0.856436f, 0.847061f, 0.839057f, }, + { 1.309442f, 1.502701f, 1.661279f, 1.673280f, 1.662961f, }, + { 0.985927f, 0.857309f, 0.739752f, 0.643488f, 0.569376f, }, + { 1.650427f, 1.495147f, 1.278185f, 1.049539f, 0.900202f, }, + { 1.006963f, 1.593657f, 0.993154f, 0.790603f, 0.850326f, }, + { 1.225572f, 1.441567f, 1.728901f, 2.088278f, 2.349483f, }, + { 0.341446f, 1.432559f, 0.749195f, 0.421280f, 0.404079f, }, + { 1.145314f, 1.033705f, 0.970105f, 0.917177f, 2.347552f, }, + { 0.971156f, 0.977194f, 0.977277f, 0.972506f, 0.966892f, }, + { 0.513513f, 4.115618f, 2.258778f, 1.186578f, 1.154071f, }, + { 1.963588f, 1.292572f, 0.969148f, 0.756260f, 0.630658f, }, + { 1.142688f, 1.247234f, 1.361439f, 1.456244f, 1.531956f, }, + { 1.188195f, 1.119173f, 1.043934f, 0.966349f, 0.898995f, }, + { 0.296171f, 0.760591f, 1.599661f, 5.561118f, 5.121441f, }, +}; + + +const float UVG2CB1_NB[UVG2_CBSIZE][5] = +{ + { 0.188739f, 0.191757f, 0.191531f, 0.191578f, 0.209839f, }, + { 0.869071f, 0.859505f, 0.832542f, 0.797074f, 0.773080f, }, + { 0.431109f, 0.727906f, 2.508026f, 0.925174f, 0.548901f, }, + { 1.217337f, 1.160289f, 1.097694f, 1.018471f, 0.957574f, }, + { 0.497102f, 0.495688f, 0.490534f, 0.481662f, 0.463058f, }, + { 0.803575f, 0.867673f, 0.944431f, 1.007241f, 1.060698f, }, + { 0.783034f, 0.762224f, 0.738827f, 0.711210f, 0.682893f, }, + { 3.227538f, 1.670940f, 0.968417f, 0.670516f, 0.602001f, }, + { 0.379041f, 0.397159f, 0.339889f, 0.431105f, 0.898154f, }, + { 1.313227f, 1.132838f, 0.938410f, 0.794448f, 0.643291f, }, + { 0.390638f, 0.395881f, 0.593166f, 2.306134f, 1.028762f, }, + { 1.248727f, 1.269418f, 1.296714f, 1.309796f, 1.304405f, }, + { 1.520874f, 0.734382f, 0.485483f, 0.396077f, 0.389855f, }, + { 0.421502f, 0.516180f, 1.720254f, 1.504402f, 1.050148f, }, + { 0.245081f, 0.257874f, 0.449391f, 1.466236f, 1.733604f, }, + { 1.559619f, 2.358229f, 1.100964f, 0.677191f, 0.515930f, }, + { 0.258870f, 0.281444f, 0.341911f, 0.423056f, 0.517793f, }, + { 0.841801f, 0.860159f, 0.881827f, 0.899050f, 0.920338f, }, + { 0.365189f, 0.499345f, 0.710492f, 0.869768f, 0.990808f, }, + { 1.078960f, 1.121199f, 1.170587f, 1.201313f, 1.215423f, }, + { 0.343519f, 1.297406f, 0.680773f, 0.408835f, 0.329668f, }, + { 1.027852f, 1.031491f, 1.031891f, 1.021937f, 1.017812f, }, + { 0.548592f, 2.012860f, 1.072282f, 0.615844f, 0.417353f, }, + { 1.760444f, 1.645651f, 1.491751f, 1.317721f, 1.142677f, }, + { 0.879361f, 0.558186f, 0.385066f, 0.300063f, 0.280186f, }, + { 1.629306f, 1.276033f, 0.873148f, 0.597645f, 0.464031f, }, + { 0.233010f, 0.252664f, 0.263381f, 0.410771f, 2.333462f, }, + { 0.979199f, 1.428996f, 2.192152f, 1.742747f, 1.094684f, }, + { 0.679754f, 0.659549f, 0.643852f, 0.621674f, 0.603191f, }, + { 1.077752f, 0.992367f, 1.129539f, 1.027383f, 2.264297f, }, + { 0.676422f, 0.735375f, 0.819505f, 0.911898f, 0.992613f, }, + { 4.819767f, 2.100243f, 0.962614f, 0.621495f, 0.509149f, }, + { 0.276365f, 0.274270f, 0.270315f, 0.266915f, 0.271854f, }, + { 0.955282f, 0.937005f, 0.911375f, 0.886292f, 0.866125f, }, + { 0.231384f, 0.382150f, 1.480144f, 0.647910f, 0.407074f, }, + { 1.503587f, 1.359087f, 1.192322f, 1.035379f, 0.920358f, }, + { 0.225897f, 0.284201f, 0.386850f, 1.479923f, 0.754288f, }, + { 0.932117f, 0.985694f, 1.055295f, 1.107535f, 1.153749f, }, + { 1.047555f, 0.950740f, 0.840054f, 0.733910f, 0.667261f, }, + { 2.085890f, 1.583746f, 1.211518f, 0.930697f, 0.725212f, }, + { 0.425680f, 0.429169f, 0.415950f, 0.398797f, 0.384700f, }, + { 1.078194f, 1.039819f, 0.987399f, 0.930104f, 0.885793f, }, + { 0.468506f, 0.527117f, 0.811323f, 3.412384f, 1.928112f, }, + { 1.453081f, 1.399223f, 1.322881f, 1.235534f, 1.155194f, }, + { 0.677564f, 0.686571f, 0.612173f, 0.620178f, 1.607781f, }, + { 0.838759f, 0.966836f, 1.138047f, 1.458807f, 1.531620f, }, + { 0.752352f, 0.769151f, 0.792542f, 0.814617f, 0.830990f, }, + { 0.998295f, 3.910764f, 2.022774f, 1.004988f, 0.660092f, }, + { 0.346421f, 0.347923f, 0.341870f, 0.334828f, 0.332826f, }, + { 0.933744f, 0.949722f, 0.965032f, 0.974951f, 0.980120f, }, + { 0.609754f, 0.656553f, 0.694920f, 0.735124f, 0.784513f, }, + { 1.250595f, 1.226482f, 1.191682f, 1.145255f, 1.104473f, }, + { 0.557881f, 0.567717f, 0.565744f, 0.564657f, 0.554475f, }, + { 1.096985f, 1.105627f, 1.102877f, 1.093358f, 1.084804f, }, + { 2.230968f, 0.968956f, 0.615720f, 0.542594f, 0.589697f, }, + { 2.443527f, 2.128707f, 1.780354f, 1.424964f, 1.106474f, }, + { 0.202766f, 0.221654f, 0.253737f, 0.404291f, 1.663403f, }, + { 0.505346f, 1.337503f, 1.263272f, 0.954743f, 0.901882f, }, + { 0.385023f, 0.382150f, 0.399218f, 0.630553f, 3.211494f, }, + { 1.364681f, 1.413025f, 1.445785f, 1.648508f, 1.724301f, }, + { 0.991474f, 0.853670f, 0.661673f, 0.512336f, 0.418893f, }, + { 0.671308f, 0.761259f, 4.046266f, 1.926581f, 0.891469f, }, + { 0.634219f, 0.750043f, 0.930049f, 1.197664f, 1.262605f, }, + { 3.747086f, 2.672835f, 1.889530f, 1.215477f, 0.841197f, }, +}; + +const float UVG2CB2_NB[UVG2_CBSIZE][5]= +{ + { 0.234676f, 0.211553f, 0.198300f, 0.188137f, 0.189102f, }, + { 0.621072f, 0.655881f, 0.734889f, 0.880212f, 1.232321f, }, + { 0.372062f, 0.443795f, 0.705281f, 0.739519f, 0.743747f, }, + { 1.024051f, 1.049997f, 1.079370f, 1.098001f, 1.118202f, }, + { 0.494519f, 0.485721f, 0.479727f, 0.474381f, 0.473326f, }, + { 1.059136f, 1.014755f, 0.967436f, 0.915428f, 0.876510f, }, + { 1.887753f, 0.709034f, 0.440367f, 0.343384f, 0.369381f, }, + { 0.393820f, 0.574466f, 2.762395f, 1.407229f, 1.047606f, }, + { 0.370772f, 0.356840f, 0.349999f, 0.327343f, 0.316005f, }, + { 0.397170f, 0.417453f, 0.528104f, 2.356989f, 1.370805f, }, + { 0.566954f, 1.780471f, 0.793633f, 0.493204f, 0.504320f, }, + { 1.212718f, 1.247958f, 1.263151f, 1.270187f, 1.276770f, }, + { 0.388100f, 0.353795f, 0.474245f, 1.451972f, 0.869892f, }, + { 1.891456f, 1.262146f, 0.797925f, 0.583916f, 0.508257f, }, + { 0.969344f, 0.868915f, 0.772349f, 0.677308f, 0.608680f, }, + { 0.486474f, 0.539484f, 0.782305f, 0.907366f, 5.745668f, }, + { 0.289328f, 0.301705f, 0.347406f, 0.516255f, 1.165024f, }, + { 0.960737f, 0.937409f, 0.906673f, 0.874736f, 0.848802f, }, + { 0.400429f, 0.378419f, 0.439385f, 0.636950f, 2.656142f, }, + { 0.992977f, 1.083218f, 1.174551f, 1.247095f, 1.351591f, }, + { 0.359381f, 0.333729f, 0.374249f, 0.520426f, 1.795028f, }, + { 1.052276f, 1.045824f, 1.029194f, 1.005147f, 0.990365f, }, + { 2.640896f, 1.119783f, 0.637471f, 0.504513f, 0.497219f, }, + { 0.510018f, 0.592500f, 1.147016f, 3.572948f, 1.835225f, }, + { 0.617425f, 0.380988f, 0.295255f, 0.238370f, 0.230673f, }, + { 0.709915f, 0.749521f, 0.990016f, 1.431043f, 1.574221f, }, + { 0.653333f, 0.698564f, 0.760571f, 0.804532f, 0.831992f, }, + { 0.715875f, 3.498556f, 1.594958f, 0.912733f, 0.845138f, }, + { 0.898701f, 0.751704f, 0.624648f, 0.525250f, 0.464610f, }, + { 1.375977f, 1.297850f, 1.215381f, 1.145089f, 1.080297f, }, + { 0.561123f, 1.764692f, 1.703012f, 1.037951f, 0.817155f, }, + { 0.611282f, 0.835322f, 1.656358f, 2.071091f, 3.677700f, }, + { 0.305955f, 0.288104f, 0.277282f, 0.266999f, 0.262681f, }, + { 0.842437f, 0.860463f, 0.878879f, 0.890085f, 0.905076f, }, + { 0.415168f, 0.495616f, 1.605015f, 1.158622f, 1.086554f, }, + { 1.144592f, 1.160015f, 1.162718f, 1.153999f, 1.152784f, }, + { 0.726849f, 0.577021f, 0.459744f, 0.381537f, 0.341456f, }, + { 1.240211f, 1.143782f, 1.043599f, 0.936329f, 0.857727f, }, + { 1.329362f, 0.934539f, 0.696166f, 0.547436f, 0.475481f, }, + { 0.470979f, 1.229760f, 4.335935f, 2.037582f, 1.538102f, }, + { 0.448859f, 0.435001f, 0.410153f, 0.387131f, 0.374390f, }, + { 0.753476f, 0.847563f, 0.984091f, 1.208422f, 2.367011f, }, + { 0.781083f, 0.745169f, 0.707134f, 0.671579f, 0.640062f, }, + { 1.421280f, 1.411590f, 1.398311f, 1.358993f, 1.337416f, }, + { 0.377859f, 0.545381f, 1.647399f, 0.625545f, 0.420396f, }, + { 1.635438f, 1.273369f, 1.092522f, 0.862149f, 0.739370f, }, + { 0.921246f, 0.885689f, 0.844748f, 0.800456f, 0.770371f, }, + { 0.385947f, 0.408195f, 0.715197f, 4.936704f, 4.011602f, }, + { 0.295343f, 0.296573f, 0.339012f, 0.409703f, 0.531531f, }, + { 0.943088f, 0.948849f, 0.961247f, 0.966943f, 0.973872f, }, + { 0.376239f, 0.425963f, 0.446486f, 0.849370f, 3.799501f, }, + { 1.085015f, 1.208963f, 1.360517f, 1.478597f, 1.597861f, }, + { 0.600520f, 0.585154f, 0.557646f, 0.520820f, 0.498211f, }, + { 1.173770f, 1.141539f, 1.096824f, 1.055073f, 1.028510f, }, + { 3.669747f, 1.622178f, 0.809242f, 0.707943f, 0.704413f, }, + { 0.977405f, 1.162230f, 1.695878f, 2.019914f, 2.051052f, }, + { 1.221003f, 0.609077f, 0.389066f, 0.326390f, 0.333196f, }, + { 0.836930f, 0.904878f, 0.994299f, 1.088050f, 1.140088f, }, + { 0.812087f, 0.799997f, 0.786734f, 0.767023f, 0.753822f, }, + { 1.504493f, 1.542127f, 1.585432f, 1.577024f, 1.594146f, }, + { 0.649261f, 0.634440f, 0.619454f, 0.606033f, 0.621463f, }, + { 2.088260f, 1.685051f, 1.277621f, 1.004769f, 0.891082f, }, + { 1.133569f, 1.000746f, 0.882781f, 0.781417f, 0.706843f, }, + { 2.340990f, 6.501577f, 3.762808f, 3.059604f, 2.127793f, }, +}; + +const float frac_4sf[NB_SUBFR+2] = {0.25f,0.5f,0.75f,1.0f,1.0f,1.0f}; + +/* ERB table for PPP-ampl-quant */ +const float erb_WB[NUM_ERB_WB+1] = {0.0f, 92.8061f, 185.6121f, 278.4182f, 371.2243f, 464.0304f, 556.8364f, 649.6425f, 746.4f, 853.6f, + 972.5f, 1104.0f, 1251.8f, 1415.8f, 1599.2f, 1804.6f, 2035.2f, 2294.9f, 2588.4f, 2921.2f, 3300.1f, + 3733.7f, 4400.0f, 5300.0f, 6400.0f+1 + }; + +/* ERB table for PPP-ampl-quant */ +const float erb_NB[NUM_ERB_NB+1] = {0.0f, 92.8061f, 185.6121f, 278.4182f, 371.2243f, 464.0304f, 556.8364f, 649.6425f, 746.4f, 853.6f, + 972.5f, 1104.0f, 1251.8f, 1415.8f, 1599.2f, 1804.6f, 2035.2f, 2294.9f, 2588.4f, 2921.2f, 3300.1f, + 3733.7f, 4000.0f+1.0f + }; + + + + +/*Amplitude and power tables for PPP*/ + + +const float AmpCB1_WB[64][10] = +{ + { 0.6903076f, 0.1939697f, -0.0797119f, 0.4355469f, -0.3873291f, -0.2260742f, -0.3911133f, -0.5643311f, -0.2563477f, -0.6229248f, }, + { -0.1126709f, -0.0081787f, -0.8730469f, -0.6052246f, -0.2464600f, -0.2209473f, -1.0415039f, -0.0791016f, 0.8033447f, 0.9818115f, }, + { 0.0195313f, 0.0949707f, -0.1873779f, 0.1053467f, 0.6691895f, 0.2043457f, -0.4365234f, 0.0150146f, -0.3861084f, -0.4388428f, }, + { -0.1040039f, -0.0064697f, -0.1318359f, -0.3275146f, -0.3905029f, -0.1159668f, -0.1651611f, 0.7639160f, -0.1746826f, 0.1524658f, }, + { 0.2513428f, 0.0826416f, 0.0178223f, 0.1234131f, 0.1166992f, -0.2468262f, -0.0030518f, 0.0366211f, 0.0513916f, -0.7152100f, }, + { 0.1253662f, -0.0551758f, -0.8963623f, -0.1284180f, 0.4660645f, 0.1341553f, -0.1226807f, 0.0804443f, -0.0623779f, -0.0803223f, }, + { 0.2552490f, 0.0878906f, -0.0732422f, 0.0177002f, -0.1835938f, -0.2094727f, -0.0539551f, -0.2651367f, -0.1837158f, 0.3298340f, }, + { 0.0892334f, 0.1798096f, -0.0260010f, -0.5029297f, -0.3632813f, 0.0839844f, 0.3912354f, 0.1480713f, 0.0828857f, 0.0283203f, }, + { 0.4482422f, 0.5822754f, -0.1462402f, -0.0363770f, -0.2092285f, -0.4478760f, -0.3458252f, -0.0810547f, -0.2269287f, -0.2905273f, }, + { -0.1427002f, -0.1944580f, -0.0552979f, 0.0360107f, -0.1495361f, -0.3796387f, -0.2167969f, 0.2578125f, 0.3308105f, 0.4068604f, }, + { 0.1247559f, 0.1523438f, 0.1331787f, 0.1420898f, 0.1464844f, 0.2175293f, -0.0987549f, -0.2814941f, -0.3813477f, -0.2678223f, }, + { -0.1912842f, 0.0567627f, 0.2713623f, -0.1588135f, -0.0565186f, -0.2633057f, 0.0889893f, 0.2781982f, -0.2365723f, 0.0744629f, }, + { 0.0533447f, -0.0980225f, -0.1251221f, 0.0946045f, -0.0208740f, -0.0777588f, 0.0198975f, 0.2747803f, 0.0385742f, -0.2030029f, }, + { -0.5032959f, -0.0024414f, -0.3450928f, -0.1866455f, -0.1752930f, 0.4207764f, 0.0096436f, -0.0334473f, 0.2014160f, 0.5001221f, }, + { 0.2891846f, 0.1131592f, 0.0546875f, -0.0548096f, 0.0357666f, -0.0291748f, -0.1254883f, -0.5865479f, 0.1652832f, 0.0526123f, }, + { -0.2708740f, -0.0598145f, -0.4698486f, 0.2000732f, -0.3570557f, 0.0997314f, 0.1812744f, 0.3084717f, 0.6645508f, -0.2434082f, }, + { 0.1801758f, 0.0617676f, -0.2005615f, 0.2445068f, -0.2045898f, -0.0961914f, -0.2052002f, -0.2454834f, 0.1695557f, 0.0551758f, }, + { 0.0723877f, 0.0003662f, -0.1464844f, -0.4866943f, -0.1994629f, -0.5261230f, -0.0837402f, 0.1076660f, 0.7611084f, 0.2954102f, }, + { -0.0239258f, -0.1534424f, -0.2487793f, -0.0607910f, 0.1701660f, 0.0819092f, -0.2810059f, -0.0987549f, -0.0544434f, 0.4448242f, }, + { -0.2005615f, -0.2812500f, -0.1010742f, 0.0128174f, -0.0394287f, -0.4768066f, -0.1171875f, 0.8940430f, 0.3778076f, -0.0959473f, }, + { 0.0115967f, 0.0772705f, 0.1545410f, 0.0915527f, 0.1842041f, -0.2481689f, -0.3825684f, 0.0527344f, 0.1254883f, -0.2227783f, }, + { 0.1535645f, 0.0312500f, -0.3966064f, -0.8383789f, -0.0638428f, -0.0396729f, -0.2171631f, 0.5264893f, 0.3081055f, 0.4190674f, }, + { -0.0732422f, -0.0500488f, -0.0107422f, 0.0500488f, -0.1442871f, -0.1391602f, -0.1767578f, -0.1640625f, -0.6193848f, 0.7390137f, }, + { 0.2678223f, 0.1837158f, -0.0831299f, -0.2939453f, 0.1679688f, 0.1695557f, 0.1475830f, 0.1279297f, -0.5125732f, -0.3587646f, }, + { 0.2264404f, 0.2128906f, -0.1640625f, -0.1746826f, -0.2386475f, -0.2203369f, -0.6093750f, 0.0625000f, 0.0761719f, 0.3355713f, }, + { -0.4206543f, -0.1483154f, -0.4594727f, -0.2647705f, -0.4395752f, -0.1612549f, 0.0081787f, 0.5280762f, 0.8085938f, 0.7099609f, }, + { -0.0407715f, -0.2131348f, -0.0538330f, -0.0920410f, 0.2261963f, 0.4747314f, -0.0726318f, -0.0601807f, 0.0538330f, -0.0989990f, }, + { -0.0058594f, -0.0932617f, -0.1798096f, -0.0833740f, 0.0736084f, -0.2141113f, 0.0952148f, 0.0852051f, 0.1323242f, 0.2091064f, }, + { 0.0683594f, -0.0986328f, -0.0920410f, -0.3527832f, -0.1470947f, -0.0388184f, -0.1246338f, 0.3900146f, 0.6949463f, -0.5618896f, }, + { 0.1639404f, -0.1295166f, -0.2979736f, -0.2177734f, 0.0880127f, 0.0325928f, 0.0277100f, -0.0759277f, 0.3677979f, -0.0937500f, }, + { -0.0576172f, 0.0109863f, 0.0015869f, 0.0354004f, 0.1287842f, 0.1157227f, 0.1973877f, -0.2890625f, -0.1326904f, 0.1346436f, }, + { -0.5839844f, -0.4726563f, 0.6256104f, -0.3073730f, -0.0262451f, 0.8498535f, 0.1336670f, -0.1856689f, 0.2552490f, -0.3615723f, }, + { 0.2789307f, 0.1363525f, 0.1433105f, 0.3216553f, -0.2327881f, -0.1235352f, 0.0993652f, -0.0509033f, -0.2639160f, -0.3424072f, }, + { -0.1450195f, -0.0863037f, -0.0986328f, -0.2144775f, 0.0317383f, -0.1334229f, -0.4830322f, -0.3986816f, 0.5043945f, 0.7299805f, }, + { 0.0216064f, -0.1804199f, 0.1171875f, 0.2476807f, 0.4869385f, 0.0728760f, -0.3737793f, -0.4809570f, -0.2060547f, 0.0288086f, }, + { -0.1903076f, 0.0183105f, 0.2968750f, 0.0424805f, -0.0295410f, -0.2458496f, -0.1253662f, 0.7687988f, -0.3609619f, -0.4833984f, }, + { 0.1330566f, 0.1237793f, -0.1539307f, -0.0908203f, -0.1164551f, -0.1145020f, -0.4532471f, -0.3994141f, 0.6538086f, -0.2875977f, }, + { -0.1756592f, 0.4648438f, -0.2844238f, -0.5416260f, 0.6319580f, -0.4401855f, -0.1687012f, 0.2226563f, 0.0496826f, 0.0396729f, }, + { 0.0792236f, 0.0402832f, 0.0103760f, 0.0251465f, -0.0506592f, 0.0223389f, -0.0788574f, 0.0734863f, -0.3242188f, 0.0986328f, }, + { 0.1268311f, 0.0035400f, -0.3908691f, -0.7529297f, -0.4443359f, 0.4560547f, 0.5106201f, 0.4832764f, 0.0402832f, 0.0413818f, }, + { 0.3297119f, 0.0418701f, 0.1832275f, 0.2293701f, -0.3898926f, -0.5673828f, -0.1989746f, 0.2021484f, -0.1926270f, -0.0102539f, }, + { -0.3741455f, -0.5036621f, 0.0029297f, -0.0317383f, 0.0321045f, -0.2081299f, -0.1573486f, 0.2968750f, 0.1500244f, 0.9132080f, }, + { 0.3156738f, 0.2070313f, 0.0788574f, -0.2164307f, -0.0966797f, 0.2358398f, -0.2329102f, -0.2315674f, -0.1378174f, 0.0136719f, }, + { -0.6917725f, -0.1943359f, 0.2750244f, -0.1196289f, 0.1929932f, 0.0257568f, 0.6441650f, 0.5915527f, -0.0351563f, -0.0194092f, }, + { 0.1166992f, 0.1459961f, 0.0941162f, -0.1187744f, -0.2178955f, -0.0629883f, -0.1239014f, 0.1033936f, 0.0749512f, -0.0965576f, }, + { -0.0539551f, -0.1945801f, -0.5654297f, -0.5361328f, -0.0507813f, 0.1706543f, 0.3137207f, 0.0917969f, 0.0322266f, 0.8020020f, }, + { 0.2020264f, 0.0666504f, 0.1511230f, -0.1662598f, -0.1623535f, -0.2447510f, 0.4382324f, -0.2630615f, -0.0224609f, -0.1494141f, }, + { -0.1772461f, -0.1871338f, -0.0651855f, 0.1232910f, -0.2083740f, 0.0977783f, 0.4428711f, -0.0352783f, 0.2946777f, 0.0161133f, }, + { 0.3226318f, -0.3433838f, -0.5522461f, 0.6215820f, -0.8986816f, 0.0903320f, 0.0522461f, -0.0622559f, 0.0098877f, -0.1475830f, }, + { 0.0751953f, 0.1774902f, 0.2271729f, -0.4831543f, -0.4985352f, 0.0230713f, -0.1488037f, -0.1068115f, 0.4594727f, 0.2546387f, }, + { -0.1896973f, -0.2528076f, 0.1849365f, 0.4140625f, 0.0014648f, -0.0837402f, -0.2946777f, -0.1687012f, 0.0214844f, 0.2056885f, }, + { 0.2508545f, -0.6955566f, 0.1931152f, 0.5025635f, -0.5915527f, -0.3566895f, 0.0744629f, 0.2541504f, 0.5715332f, -0.3035889f, }, + { 0.0424805f, 0.2756348f, -0.0412598f, -0.1683350f, 0.1796875f, 0.0754395f, -0.0246582f, -0.1369629f, -0.0092773f, -0.3012695f, }, + { -0.1484375f, -0.1203613f, -0.0399170f, -0.1759033f, 0.0124512f, 0.0491943f, -0.2569580f, 0.2943115f, 0.1843262f, 0.1572266f, }, + { -0.0872803f, -0.0704346f, 0.1311035f, 0.3092041f, -0.4298096f, -0.4210205f, 0.2612305f, -0.0916748f, -0.0374756f, 0.4644775f, }, + { 0.0192871f, -0.1690674f, -0.0493164f, -0.1682129f, -0.2377930f, 0.4620361f, 0.5146484f, 0.3255615f, -0.2312012f, -0.1903076f, }, + { 0.1265869f, 0.1673584f, 0.1207275f, -0.0250244f, -0.0406494f, -0.5839844f, -0.4185791f, -0.1566162f, 0.4027100f, 0.1048584f, }, + { -0.6008301f, -0.6690674f, -0.1459961f, -0.2133789f, -0.0878906f, 0.0629883f, 0.0137939f, 0.5603027f, 0.8631592f, 0.5303955f, }, + { -0.6993408f, -0.4714355f, 0.4382324f, 0.1785889f, 0.8659668f, 0.6092529f, 0.1042480f, -0.0080566f, -0.1989746f, -0.0837402f, }, + { -0.1126709f, -0.3986816f, -0.2426758f, 0.2862549f, 0.0958252f, -0.1733398f, 0.3666992f, 0.3581543f, -0.1519775f, -0.0079346f, }, + { -0.3291016f, -0.3769531f, -0.1755371f, 0.0749512f, 0.1933594f, -0.0291748f, -0.1894531f, 0.0708008f, 0.7672119f, -0.2042236f, }, + { -0.1950684f, -0.4904785f, -0.2330322f, 0.0911865f, 0.3895264f, 0.0446777f, 0.1790771f, -0.2359619f, 0.3367920f, 0.3422852f, }, + { 0.0632324f, 0.0235596f, -0.1402588f, -0.3793945f, 0.0538330f, 0.1779785f, 0.3406982f, -0.5042725f, 0.3288574f, 0.4116211f, }, + { -0.6131592f, -0.7923584f, 0.2189941f, 0.3343506f, 0.1785889f, 0.7132568f, 0.3502197f, 0.2432861f, -0.1719971f, 0.5898438f, }, +}; + +const float AmpCB2_WB[64][NUM_ERB_WB-11] = +{ + { -0.6440430f, -0.9412842f, -0.4294434f, -0.2949219f, -0.0466309f, 0.0389404f, -0.2319336f, -0.1098633f, 0.2105713f, 0.1079102f, 0.4969482f, }, + { -0.4946289f, -0.2966309f, -0.0410156f, 0.2607422f, 0.3669434f, 0.0721436f, -0.4752197f, -0.3333740f, 0.3204346f, 0.2917480f, -0.1278076f, }, + { -0.1077881f, -0.4111328f, -0.5169678f, -0.4548340f, 0.0230713f, -0.2200928f, 0.0957031f, 0.2851563f, 0.0251465f, -0.2612305f, 0.3663330f, }, + { -0.0891113f, -0.2781982f, 0.0103760f, -0.4144287f, 0.5330811f, 0.2702637f, -0.0310059f, -0.3801270f, -0.2866211f, 0.3372803f, 0.0837402f, }, + { -0.9149170f, -0.8078613f, 0.3862305f, -0.4830322f, -0.3272705f, -0.2501221f, 0.2025146f, 0.4436035f, 0.3615723f, 0.1921387f, 0.0462646f, }, + { -0.3024902f, 0.3492432f, 0.0751953f, 0.1372070f, 0.0250244f, -0.3753662f, -0.0424805f, -0.2448730f, -0.0109863f, 0.0928955f, 0.1412354f, }, + { -0.0139160f, -1.1547852f, -0.3400879f, -0.3972168f, -0.1367188f, -0.1831055f, -0.0544434f, 0.3460693f, -0.0383301f, 0.3912354f, 0.2581787f, }, + { -0.1021729f, -0.0318604f, 0.0043945f, 0.0097656f, -0.0592041f, 0.1383057f, 0.2592773f, -0.1258545f, -0.0489502f, -0.3864746f, 0.1397705f, }, + { -0.1972656f, -0.4180908f, -0.3748779f, -0.8411865f, -0.5124512f, 0.2797852f, 0.6298828f, -0.0056152f, 0.1745605f, 0.0341797f, 0.1682129f, }, + { 0.2075195f, -0.2042236f, -0.1374512f, 0.6433105f, 0.6220703f, -0.1190186f, -0.1306152f, 0.1604004f, -0.2916260f, -0.3640137f, 0.0024414f, }, + { -0.3928223f, -0.1088867f, -0.0776367f, -0.1069336f, -0.0368652f, -0.3568115f, -0.3955078f, 0.5030518f, 0.1983643f, -0.0679932f, 0.1213379f, }, + { 0.0664063f, 0.3243408f, 0.8707275f, -0.0333252f, -0.4309082f, -0.1732178f, 0.1746826f, -0.1142578f, -0.3200684f, 0.0369873f, 0.0091553f, }, + { -0.6645508f, -0.6773682f, 0.5106201f, 0.1523438f, 0.4240723f, -0.0963135f, 0.2899170f, -0.2170410f, 0.2026367f, 0.1855469f, -0.1749268f, }, + { -0.4940186f, 0.0648193f, 0.8546143f, 0.0848389f, 0.2305908f, 0.5201416f, -0.3406982f, -0.1900635f, -0.3637695f, -0.0385742f, 0.0506592f, }, + { 0.1384277f, 0.1832275f, -0.8450928f, 0.0635986f, -0.3825684f, -0.2211914f, 0.2255859f, 0.0825195f, -0.2115479f, 0.0895996f, 0.2694092f, }, + { 0.2476807f, -0.0581055f, -0.2412109f, -0.0196533f, 0.0035400f, 0.8724365f, -0.2165527f, 0.0878906f, -0.1306152f, -0.0454102f, -0.1984863f, }, + { -0.7901611f, -0.2988281f, -0.6390381f, -0.3236084f, -0.2197266f, -0.1802979f, -0.0936279f, 0.1629639f, 0.0574951f, 0.5928955f, 0.1083984f, }, + { 0.0723877f, -0.0451660f, 0.0239258f, 0.1107178f, 0.0212402f, 0.0679932f, -0.0878906f, -0.1634521f, 0.1940918f, 0.0045166f, -0.1522217f, }, + { -0.1595459f, 0.0336914f, -0.2122803f, -0.7363281f, -0.3769531f, -0.3050537f, -0.0606689f, -0.0479736f, -0.0694580f, 0.3665771f, 0.3288574f, }, + { 0.4578857f, 0.5678711f, -0.0314941f, -0.1593018f, 0.0213623f, 0.0230713f, -0.0419922f, -0.2906494f, -0.2431641f, 0.0565186f, 0.0645752f, }, + { -0.7781982f, 0.4841309f, -0.4343262f, -0.3663330f, -0.0781250f, 0.3804932f, 0.1367188f, 0.1179199f, 0.1606445f, -0.0684814f, 0.0032959f, }, + { 0.3410645f, 0.3455811f, 0.4287109f, 0.4215088f, -0.0510254f, -0.2830811f, -0.8228760f, -0.4202881f, 0.0097656f, 0.1563721f, 0.2064209f, }, + { 0.1831055f, -0.0721436f, -0.0902100f, 0.2911377f, -0.5708008f, -0.7106934f, -0.1754150f, 0.0891113f, 0.4385986f, -0.0533447f, 0.1330566f, }, + { 0.4268799f, -0.2358398f, 0.3483887f, 0.5930176f, 0.3239746f, 0.1156006f, 0.2293701f, -0.5023193f, 0.3295898f, -0.3774414f, -0.1860352f, }, + { 0.0274658f, -1.0097656f, -0.8222656f, -0.1558838f, 0.3651123f, 0.3641357f, 0.1378174f, -0.2027588f, 0.3438721f, 0.0571289f, 0.0599365f, }, + { -0.0908203f, 0.0476074f, 0.0826416f, 0.9923096f, -0.3820801f, -0.0838623f, -0.0528564f, 0.1816406f, -0.4593506f, -0.0216064f, -0.0709229f, }, + { -0.0932617f, 0.0047607f, 0.1876221f, -0.2689209f, -0.2048340f, 0.0321045f, -0.1481934f, 0.2655029f, -0.2266846f, 0.3780518f, -0.1091309f, }, + { 0.5135498f, -0.2371826f, -0.1018066f, 0.1846924f, -0.5032959f, 0.4859619f, 0.7374268f, 0.0797119f, -0.0924072f, -0.0382080f, -0.3691406f, }, + { -0.5632324f, -0.3831787f, -0.3620605f, 0.0217285f, 0.6049805f, -0.0521240f, -0.0050049f, 0.2900391f, 0.1230469f, -0.1649170f, -0.0112305f, }, + { 0.1193848f, 0.2438965f, 0.6281738f, 0.2525635f, 0.0142822f, -0.2141113f, -0.3364258f, 0.5401611f, 0.0205078f, -0.2205811f, -0.2149658f, }, + { -0.1483154f, 0.0217285f, -0.1906738f, -0.4112549f, -0.1121826f, -0.3144531f, 0.4411621f, 0.6064453f, -0.0036621f, -0.0483398f, -0.1405029f, }, + { -0.1398926f, 0.1059570f, 0.1309814f, -0.0438232f, 0.3334961f, 0.0666504f, 0.5408936f, -0.0391846f, -0.1319580f, 0.1721191f, -0.3923340f, }, + { -0.2827148f, -0.5968018f, -0.3002930f, -0.4692383f, -0.8939209f, -0.1755371f, -0.1816406f, 0.2257080f, 0.4927979f, 0.2955322f, 0.3292236f, }, + { -0.2895508f, -0.2291260f, 0.0817871f, 0.4484863f, -0.1107178f, 0.1083984f, -0.4520264f, 0.0457764f, -0.1560059f, -0.1802979f, 0.3052979f, }, + { -0.1142578f, -0.2053223f, -0.1651611f, -0.0408936f, -0.5419922f, 0.0467529f, -0.3332520f, -0.2600098f, -0.1348877f, 0.1938477f, 0.4077148f, }, + { 0.5878906f, -0.4910889f, 0.0612793f, -0.5061035f, 0.0288086f, 0.5469971f, 0.0718994f, -0.4511719f, 0.1008301f, -0.0118408f, 0.0270996f, }, + { -0.9810791f, -0.2739258f, 0.0173340f, 0.0988770f, -0.2679443f, 0.1605225f, 0.0800781f, 0.2320557f, -0.0592041f, 0.0386963f, 0.1845703f, }, + { 0.1788330f, -0.2473145f, 0.2261963f, 0.1134033f, 0.2038574f, -0.3339844f, -0.0565186f, -0.1020508f, -0.6037598f, -0.0163574f, 0.3380127f, }, + { 0.3627930f, -0.6284180f, -0.3841553f, 0.1114502f, -0.1810303f, 0.0325928f, -0.1904297f, 0.4764404f, 0.1839600f, 0.1348877f, -0.1826172f, }, + { 0.0256348f, -0.1459961f, 0.4594727f, 0.0733643f, 0.1989746f, 0.4689941f, 0.7780762f, -0.1578369f, -0.5560303f, -0.3768311f, 0.0242920f, }, + { -0.2340088f, -0.4066162f, -0.2828369f, -0.2165527f, 0.0584717f, 0.4531250f, 0.3331299f, 0.1597900f, -0.3719482f, -0.0627441f, 0.1051025f, }, + { -0.0260010f, 0.1607666f, -0.2484131f, 0.5333252f, 0.6381836f, 0.1149902f, -0.3725586f, -0.2827148f, -0.4122314f, 0.1370850f, -0.0079346f, }, + { 0.3060303f, 0.3309326f, -0.2558594f, -0.2641602f, -0.3215332f, -0.6365967f, -0.4783936f, 0.1893311f, -0.0057373f, 0.2429199f, 0.2893066f, }, + { 0.2471924f, -0.2930908f, 0.5899658f, -0.4735107f, -0.0197754f, -0.3760986f, 0.0611572f, -0.0622559f, 0.3349609f, -0.1107178f, 0.0308838f, }, + { -0.2131348f, -0.3076172f, 0.4172363f, -0.1783447f, 0.2612305f, 0.3060303f, 0.0164795f, 0.1778564f, 0.3900146f, -0.1558838f, -0.3122559f, }, + { -0.0080566f, 1.3244629f, -0.1993408f, -0.1282959f, -0.4194336f, -0.1973877f, 0.1755371f, -0.1502686f, -0.2128906f, 0.0849609f, -0.0424805f, }, + { 0.4191895f, 0.2589111f, -0.1988525f, -0.3002930f, -0.4962158f, 0.1414795f, -0.1572266f, 0.3470459f, 0.0850830f, -0.1052246f, 0.0004883f, }, + { 0.1179199f, -0.0541992f, -0.2270508f, 0.1770020f, 0.7844238f, 0.6767578f, 0.1777344f, -0.3449707f, -0.1590576f, -0.3391113f, -0.1560059f, }, + { -0.8125000f, -0.3956299f, -0.8646240f, 0.2727051f, 0.0249023f, 0.2139893f, 0.0980225f, 0.0609131f, 0.2003174f, 0.0106201f, 0.1795654f, }, + { -0.1617432f, 0.0485840f, 0.3641357f, 0.5297852f, -0.1687012f, 0.0897217f, -0.0732422f, -0.5701904f, -0.0310059f, 0.2840576f, -0.1230469f, }, + { -0.0175781f, -0.1773682f, -0.2204590f, -0.2037354f, 0.0482178f, -0.4010010f, -0.2200928f, -0.2586670f, 0.1503906f, 0.3557129f, 0.1806641f, }, + { 1.0510254f, 0.2182617f, 0.3227539f, 0.1658936f, 0.4617920f, -0.0134277f, -0.1634521f, -0.1632080f, -0.4183350f, -0.0769043f, -0.1451416f, }, + { -0.3125000f, 0.1191406f, 0.0589600f, -0.3349609f, -0.4459229f, -0.1573486f, 0.3552246f, -0.2974854f, 0.3870850f, 0.1805420f, 0.0191650f, }, + { 0.1004639f, 0.5653076f, -0.2331543f, 0.4560547f, -0.0517578f, -0.0189209f, -0.6677246f, -0.0904541f, 0.4674072f, -0.3410645f, -0.0067139f, }, + { -0.1766357f, -0.4234619f, -0.2376709f, 0.3557129f, -0.0074463f, -0.4187012f, 0.4326172f, -0.2279053f, 0.3645020f, 0.1231689f, -0.1282959f, }, + { 0.0885010f, 0.3580322f, 0.3571777f, 0.7139893f, 0.0313721f, -0.3254395f, 0.7673340f, -0.2785645f, -0.3659668f, -0.3144531f, -0.1190186f, }, + { -0.4461670f, -0.2279053f, -0.6152344f, -0.1757813f, 0.4323730f, -0.0736084f, 0.5866699f, -0.3427734f, -0.1993408f, 0.1694336f, 0.1402588f, }, + { -0.1972656f, -0.2259521f, 0.2590332f, 0.5465088f, 0.3033447f, 0.1679688f, 0.0880127f, 0.2653809f, -0.3750000f, 0.1682129f, -0.3142090f, }, + { -0.0045166f, 0.1613770f, -0.2009277f, -0.4409180f, 0.5423584f, 0.1967773f, -0.4154053f, 0.0867920f, 0.0161133f, 0.0145264f, -0.0277100f, }, + { 0.6175537f, 0.3530273f, 0.1025391f, 0.6667480f, -0.4237061f, -0.1635742f, 0.2559814f, 0.0174561f, 0.2136230f, -0.3725586f, -0.2358398f, }, + { -0.7753906f, -0.5085449f, -0.0787354f, 0.5269775f, 0.0772705f, 0.4493408f, 0.3431396f, 0.2863770f, 0.2897949f, -0.3660889f, -0.1544189f, }, + { -0.0256348f, 0.6243896f, 0.5678711f, 0.1593018f, 0.4521484f, -0.1777344f, -0.0374756f, -0.0557861f, -0.1776123f, -0.4370117f, 0.0822754f, }, + { 0.2703857f, 0.3000488f, -0.3687744f, -0.0080566f, 0.3094482f, -0.0795898f, 0.1496582f, 0.0836182f, 0.1068115f, -0.2139893f, -0.1420898f, }, + { -0.0743408f, 0.4204102f, 0.0687256f, 0.4670410f, 0.1961670f, 0.4636230f, 0.1690674f, 0.4763184f, -0.2429199f, -0.4978027f, -0.3062744f, }, +}; + +const float AmpCB1_NB[64][10] = +{ + { -0.1654053f, 0.0225830f, -0.0270996f, -0.0269775f, 0.2412109f, 0.3807373f, 0.0659180f, 0.1627197f, -0.4450684f, -0.3065186f, }, + { -0.1195068f, 0.2031250f, 0.2547607f, 0.1160889f, 0.0960693f, -0.2059326f, -0.1043701f, 0.1945801f, 0.1542969f, -0.6091309f, }, + { -0.2388916f, -0.0262451f, -0.1037598f, 0.1671143f, -0.0137939f, 0.3101807f, -0.3544922f, 0.0906982f, 0.0773926f, -0.0802002f, }, + { -0.4196777f, -0.2498779f, 0.0861816f, 0.0103760f, -0.0727539f, -0.0061035f, 0.0258789f, 0.1152344f, 0.0144043f, 0.1684570f, }, + { -0.1468506f, -0.0095215f, -0.0260010f, -0.2210693f, -0.0953369f, -0.2404785f, 0.8065186f, -0.3626709f, 0.0179443f, -0.1810303f, }, + { 0.0046387f, 0.6844482f, 0.6374512f, -0.5574951f, -0.4931641f, -0.2757568f, -0.3796387f, -0.2587891f, 0.1137695f, -0.0288086f, }, + { -0.1284180f, 0.1268311f, -0.1064453f, 0.0407715f, -0.1121826f, 0.3370361f, 0.4052734f, -0.7114258f, 0.0064697f, 0.1297607f, }, + { -0.1298828f, -0.0091553f, -0.1239014f, -0.2608643f, -0.0881348f, 0.0689697f, 0.0767822f, 0.2393799f, -0.0554199f, 0.1057129f, }, + { -0.1083984f, 0.3237305f, 0.2436523f, -0.2648926f, -0.1080322f, 0.4058838f, -0.0787354f, -0.2316895f, -0.1201172f, -0.0784912f, }, + { -0.1230469f, 0.3017578f, 0.2929688f, -0.4526367f, -0.2939453f, -0.1282959f, 0.2476807f, 0.1656494f, -0.0776367f, -0.0573730f, }, + { -0.1595459f, 0.0799561f, 0.0809326f, 0.0035400f, 0.1088867f, -0.0115967f, -0.0111084f, -0.3620605f, -0.1965332f, 0.3243408f, }, + { -0.2655029f, -0.3869629f, -0.4637451f, -0.3741455f, 0.1379395f, 0.1649170f, 0.4655762f, 0.3406982f, 0.1804199f, 0.1855469f, }, + { -0.1618652f, -0.0634766f, -0.0844727f, 0.1097412f, 0.2415771f, -0.0484619f, -0.0496826f, 0.0549316f, -0.0694580f, -0.0745850f, }, + { -0.1499023f, 0.1054688f, 0.3111572f, 0.3743896f, -0.3065186f, -0.5782471f, -0.3297119f, -0.0371094f, 0.0830078f, 0.1740723f, }, + { -0.1306152f, -0.0023193f, -0.1931152f, -0.3433838f, -0.2236328f, 0.3674316f, 0.0305176f, -0.0748291f, 0.4138184f, -0.0208740f, }, + { -0.1770020f, -0.0509033f, -0.0943604f, -0.0794678f, -0.0494385f, -0.2812500f, -0.0952148f, 0.8125000f, -0.3991699f, -0.1613770f, }, + { 0.0085449f, 0.6231689f, 0.3908691f, -0.0101318f, -0.1129150f, -0.0559082f, 0.1468506f, -0.1931152f, -0.5075684f, -0.4431152f, }, + { -0.2077637f, -0.1036377f, -0.0067139f, -0.1203613f, -0.2396240f, -0.1391602f, -0.2370605f, 0.4085693f, 0.4304199f, -0.0531006f, }, + { -0.1744385f, -0.2550049f, -0.1977539f, -0.1551514f, 0.3480225f, 0.2666016f, -0.3017578f, 0.3925781f, 0.3521729f, -0.3566895f, }, + { -0.1485596f, 0.0104980f, -0.0227051f, -0.0340576f, -0.0910645f, 0.1572266f, 0.3681641f, -0.0794678f, -0.3319092f, 0.0386963f, }, + { -0.1595459f, -0.0155029f, -0.1354980f, 0.1695557f, 0.0258789f, 0.2176514f, 0.3197021f, -0.2097168f, 0.2191162f, -0.4987793f, }, + { -0.1580811f, 0.0906982f, 0.0367432f, -0.2225342f, -0.0272217f, -0.0794678f, -0.2165527f, -0.0494385f, 0.2059326f, 0.2479248f, }, + { -0.1055908f, 0.1292725f, -0.0477295f, 0.0616455f, -0.3343506f, -0.3385010f, 0.0019531f, -0.3613281f, 0.3748779f, 0.4058838f, }, + { -0.0965576f, 0.2808838f, 0.0531006f, 0.0130615f, -0.4930420f, 0.0977783f, -0.1494141f, 0.2263184f, -0.1268311f, 0.0618896f, }, + { -0.0632324f, 0.1217041f, 0.1021729f, 0.4041748f, 0.0617676f, 0.1252441f, -0.0283203f, -0.2343750f, -0.4765625f, 0.0495605f, }, + { -0.2266846f, -0.0645752f, -0.0947266f, -0.0854492f, -0.0809326f, -0.1855469f, 0.2073975f, 0.0993652f, 0.2543945f, -0.0582275f, }, + { -0.1636963f, -0.1370850f, -0.3129883f, -0.3398438f, 0.2999268f, 0.3934326f, -0.1170654f, 0.0469971f, -0.2275391f, 0.4582520f, }, + { -0.1649170f, -0.1644287f, -0.2720947f, -0.3518066f, -0.1295166f, -0.1829834f, -0.3696289f, 0.4030762f, 0.2746582f, 0.6761475f, }, + { -0.1168213f, -0.0415039f, 0.0032959f, 0.1840820f, 0.0203857f, -0.4288330f, 0.2061768f, 0.3145752f, -0.2209473f, -0.0629883f, }, + { -0.1295166f, 0.2650146f, 0.2165527f, 0.2479248f, 0.1126709f, -0.2359619f, -0.2001953f, -0.3516846f, 0.1048584f, -0.1018066f, }, + { 0.0498047f, 0.3005371f, 0.2530518f, 0.2572021f, -0.3260498f, 0.1391602f, -0.4268799f, -0.3048096f, 0.3642578f, -0.3304443f, }, + { -0.2150879f, -0.3081055f, -0.2680664f, 0.0340576f, -0.3149414f, 0.0582275f, 0.2814941f, 0.5670166f, 0.0845947f, -0.1109619f, }, + { -0.1329346f, 0.2382813f, 0.3703613f, -0.2185059f, 0.0959473f, -0.1402588f, -0.3804932f, 0.4400635f, -0.2359619f, -0.2302246f, }, + { -0.1170654f, 0.1140137f, 0.0300293f, -0.2657471f, -0.2978516f, 0.1655273f, 0.1063232f, 0.4238281f, 0.3122559f, -0.5507813f, }, + { -0.0954590f, 0.1540527f, 0.1090088f, 0.2415771f, 0.2912598f, -0.2208252f, -0.5318604f, -0.0478516f, -0.2353516f, 0.1923828f, }, + { -0.2137451f, -0.0399170f, -0.1242676f, -0.0753174f, -0.2893066f, -0.3552246f, 0.5163574f, -0.0109863f, -0.1661377f, 0.4389648f, }, + { -0.1304932f, -0.0384521f, -0.0197754f, -0.0413818f, -0.0382080f, 0.0040283f, 0.5717773f, 0.3431396f, -0.3316650f, -0.4497070f, }, + { 0.0848389f, 0.5574951f, -0.0909424f, -0.2821045f, -0.0947266f, -0.3173828f, -0.1009521f, -0.1269531f, -0.1217041f, 0.3027344f, }, + { -0.1890869f, -0.0913086f, -0.0759277f, -0.0317383f, 0.1782227f, 0.1362305f, -0.0368652f, -0.3087158f, 0.2631836f, -0.0051270f, }, + { -0.1608887f, -0.0693359f, -0.0324707f, -0.0544434f, -0.2700195f, 0.3283691f, -0.5699463f, 0.6500244f, -0.2468262f, 0.1657715f, }, + { -0.1601563f, 0.2799072f, 0.1865234f, 0.0861816f, 0.1184082f, -0.0355225f, 0.0467529f, -0.0833740f, -0.1870117f, -0.2249756f, }, + { -0.1683350f, 0.1031494f, 0.1486816f, 0.0482178f, -0.2299805f, 0.0017090f, 0.0825195f, -0.2088623f, 0.0970459f, 0.0354004f, }, + { -0.0905762f, 0.0471191f, -0.0531006f, 0.0501709f, 0.1600342f, 0.0670166f, -0.5103760f, -0.6008301f, 0.1827393f, 0.5450439f, }, + { -0.2102051f, -0.0853271f, -0.2390137f, -0.5036621f, -0.4549561f, -0.0799561f, 0.1895752f, 0.2188721f, 0.6021729f, 0.3729248f, }, + { -0.1538086f, -0.0754395f, 0.0653076f, -0.2451172f, 0.4641113f, -0.4619141f, 0.3084717f, -0.1016846f, 0.0235596f, -0.1296387f, }, + { -0.1057129f, 0.1004639f, 0.1906738f, 0.0179443f, -0.0760498f, -0.2207031f, -0.1341553f, 0.0847168f, -0.0704346f, 0.0909424f, }, + { -0.2785645f, -0.5052490f, -0.3870850f, 0.0092773f, 0.0030518f, -0.1314697f, 0.0582275f, 0.0665283f, 0.7423096f, 0.3959961f, }, + { -0.1625977f, -0.0958252f, 0.0119629f, -0.2052002f, -0.4398193f, -0.4805908f, 0.0639648f, 0.5673828f, 0.1359863f, 0.3109131f, }, + { -0.1397705f, 0.0496826f, 0.2478027f, 0.3808594f, -0.2122803f, -0.0626221f, -0.0632324f, 0.1617432f, -0.2075195f, -0.3491211f, }, + { -0.1741943f, 0.0634766f, -0.1269531f, -0.0966797f, -0.0446777f, -0.2653809f, -0.0637207f, -0.0292969f, 0.6909180f, -0.3861084f, }, + { -0.1768799f, -0.2017822f, -0.1839600f, 0.0709229f, 0.1633301f, -0.3206787f, -0.2274170f, 0.2235107f, 0.1588135f, 0.2570801f, }, + { -0.1528320f, 0.1188965f, 0.0242920f, 0.0083008f, -0.0084229f, -0.1060791f, 0.1054688f, 0.2896729f, -0.7102051f, 0.3507080f, }, + { 0.0031738f, 0.1186523f, 0.0438232f, -0.0684814f, -0.0476074f, 0.0458984f, 0.0274658f, 0.0631104f, 0.0792236f, -0.2156982f, }, + { -0.0797119f, 0.2645264f, 0.1076660f, -0.0852051f, 0.0261230f, -0.4985352f, -0.5046387f, 0.2553711f, 0.3415527f, -0.0638428f, }, + { -0.1223145f, 0.0593262f, 0.0791016f, -0.1320801f, 0.0493164f, -0.1818848f, 0.1904297f, -0.6083984f, 0.6853027f, -0.1759033f, }, + { -0.1250000f, -0.0379639f, 0.0521240f, 0.0434570f, -0.2858887f, 0.0262451f, -0.2822266f, 0.0543213f, -0.2902832f, 0.6239014f, }, + { -0.0693359f, 0.0103760f, 0.1621094f, 0.2254639f, 0.4279785f, 0.1444092f, -0.3077393f, -0.2526855f, -0.0969238f, -0.2296143f, }, + { -0.0592041f, 0.1368408f, 0.1516113f, 0.1588135f, -0.5328369f, -0.2712402f, 0.3176270f, -0.0472412f, 0.1828613f, -0.1640625f, }, + { -0.1552734f, -0.1666260f, -0.2694092f, -0.0260010f, -0.2291260f, 0.3488770f, 0.1036377f, -0.1116943f, 0.0406494f, 0.3037109f, }, + { -0.2464600f, -0.2500000f, -0.1783447f, -0.2355957f, -0.1719971f, -0.0488281f, 0.0598145f, -0.2712402f, 0.1557617f, 0.8917236f, }, + { -0.1867676f, -0.2125244f, -0.3250732f, 0.3856201f, 0.1418457f, -0.1818848f, 0.1850586f, -0.1828613f, 0.1491699f, 0.1022949f, }, + { 0.1617432f, 0.6575928f, 0.4746094f, 0.2373047f, -0.2082520f, -0.3527832f, -0.2325439f, -0.4761963f, -0.3914795f, 0.0251465f, }, + { -0.1722412f, -0.1170654f, -0.0356445f, -0.0483398f, -0.1888428f, -0.0102539f, -0.5377197f, -0.1309814f, 0.6752930f, 0.2192383f, }, + { 0.3857422f, 0.0058594f, -0.2855225f, -0.7182617f, -0.0224609f, -0.0063477f, 0.0157471f, 0.6589355f, 0.0461426f, -0.0391846f, }, +}; + +const float AmpCB2_NB[64][NUM_ERB_NB-11] = +{ + { -0.3272705f, -0.5357666f, -0.5212402f, -0.5770264f, -0.0291748f, 0.2365723f, 0.2133789f, 0.2821045f, 0.5249023f, }, + { -0.4830322f, -0.1585693f, 0.4256592f, 0.1947021f, -0.0460205f, 0.0360107f, -0.1456299f, -0.1938477f, 0.2578125f, }, + { -0.1920166f, -0.7766113f, -0.0615234f, 0.2192383f, -0.3077393f, -0.0083008f, 0.1613770f, 0.1492920f, 0.2762451f, }, + { -0.0614014f, -0.4768066f, 0.4499512f, -0.4759521f, -0.0169678f, 0.2546387f, 0.0058594f, 0.0426025f, 0.0667725f, }, + { -0.7796631f, 0.1635742f, -0.1790771f, -0.1296387f, -0.0235596f, 0.1617432f, -0.1452637f, 0.2922363f, 0.2039795f, }, + { -0.2419434f, -0.3170166f, -0.0476074f, -0.1835938f, 0.2772217f, -0.0462646f, -0.2868652f, 0.4969482f, 0.0085449f, }, + { -0.1165771f, -0.1077881f, -0.2160645f, -0.1300049f, -0.2982178f, -0.2171631f, -0.1343994f, -0.0806885f, 0.7720947f, }, + { 0.2283936f, -0.3262939f, 0.4389648f, 0.4605713f, -0.0831299f, 0.4077148f, -0.1730957f, 0.0855713f, -0.5191650f, }, + { -0.4798584f, -0.2246094f, -0.2915039f, -0.3267822f, -0.4327393f, -0.0050049f, 0.4486084f, 0.4691162f, 0.2683105f, }, + { -0.2091064f, -0.0395508f, 0.0731201f, 0.1614990f, 0.2230225f, -0.5992432f, -0.2036133f, 0.0751953f, 0.3183594f, }, + { 0.0439453f, -0.2159424f, -0.6424561f, -0.1560059f, 0.4260254f, 0.2362061f, 0.1654053f, -0.1584473f, 0.1162109f, }, + { 0.2198486f, 0.0548096f, 0.0306396f, -0.1246338f, -0.4475098f, 0.0584717f, 0.4268799f, 0.1882324f, -0.2727051f, }, + { -0.4167480f, -0.5472412f, -0.7061768f, 0.1716309f, 0.1473389f, 0.3642578f, 0.2156982f, 0.3981934f, -0.0975342f, }, + { -0.3813477f, 0.6392822f, 0.0561523f, 0.2449951f, -0.1861572f, -0.2570801f, -0.0939941f, 0.0666504f, 0.0167236f, }, + { 0.0489502f, -0.1596680f, 0.1182861f, 0.0249023f, -0.1984863f, -0.0718994f, -0.5196533f, 0.2128906f, 0.3461914f, }, + { 0.2908936f, 0.3344727f, -0.0516357f, 0.3864746f, 0.2343750f, -0.0842285f, -0.3662109f, -0.5479736f, 0.3079834f, }, + { -0.8170166f, -0.6268311f, -0.0902100f, -0.2342529f, 0.1499023f, 0.2873535f, 0.4077148f, 0.2321777f, 0.1304932f, }, + { -0.3887939f, -0.3190918f, 0.3374023f, -0.0258789f, -0.2515869f, -0.1680908f, 0.0852051f, 0.4509277f, -0.0152588f, }, + { -0.1164551f, -0.5043945f, -0.0493164f, 0.5245361f, 0.1579590f, 0.2154541f, 0.2985840f, -0.2791748f, -0.1693115f, }, + { -0.0017090f, 0.0620117f, 0.1402588f, 0.0010986f, -0.0533447f, 0.0633545f, -0.0512695f, 0.0549316f, -0.0916748f, }, + { -0.1992188f, -0.1697998f, -0.2695313f, -0.2386475f, -0.1428223f, 0.5881348f, 0.1357422f, 0.1325684f, -0.0954590f, }, + { 0.1632080f, 0.1032715f, -0.4191895f, 0.0694580f, 0.2100830f, -0.0947266f, -0.3323975f, 0.1473389f, 0.1198730f, }, + { -0.1748047f, -0.1082764f, 0.0384521f, -0.3699951f, 0.4213867f, 0.0933838f, -0.1541748f, -0.2619629f, 0.3612061f, }, + { -0.3197021f, 0.1839600f, 0.1601563f, 0.4989014f, 0.3814697f, 0.1998291f, -0.1711426f, -0.0054932f, -0.3897705f, }, + { 0.1705322f, -0.3187256f, -0.4444580f, -0.3024902f, -0.2082520f, 0.0717773f, 0.0242920f, 0.4542236f, 0.1485596f, }, + { -0.1524658f, -0.1459961f, 0.8823242f, 0.1215820f, 0.1072998f, -0.1634521f, 0.0013428f, -0.1185303f, -0.2050781f, }, + { 0.0874023f, -0.0047607f, 0.0284424f, 0.2374268f, 0.1889648f, -0.1801758f, 0.0671387f, -0.2779541f, 0.0374756f, }, + { 0.9049072f, 0.2556152f, -0.1990967f, -0.0694580f, -0.1649170f, -0.0241699f, -0.0589600f, -0.0628662f, -0.1644287f, }, + { -0.0258789f, -0.3233643f, -0.0633545f, 0.0238037f, 0.3593750f, -0.0970459f, 0.1794434f, 0.0798340f, -0.1767578f, }, + { 0.3852539f, 0.1671143f, 0.4841309f, 0.4128418f, -0.3395996f, -0.5194092f, -0.1412354f, -0.0258789f, 0.0478516f, }, + { 0.1051025f, 0.6181641f, 0.5786133f, -0.3067627f, -0.4166260f, -0.0673828f, -0.2805176f, -0.0701904f, 0.1379395f, }, + { 0.1437988f, 0.1914063f, 0.5604248f, 0.1511230f, 0.0447998f, 0.1984863f, 0.0732422f, -0.7188721f, 0.0198975f, }, + { -0.4567871f, -0.4455566f, -0.4774170f, 0.0874023f, 0.1121826f, -0.1832275f, 0.0067139f, 0.2205811f, 0.4639893f, }, + { -0.6800537f, -0.5657959f, 0.1495361f, 0.3919678f, 0.4643555f, 0.1820068f, -0.1105957f, 0.0122070f, 0.0493164f, }, + { -0.2126465f, -0.2292480f, -0.2612305f, 0.2015381f, 0.2001953f, 0.4853516f, -0.4189453f, -0.1402588f, 0.1666260f, }, + { 0.2492676f, 0.0478516f, 0.0937500f, -0.1872559f, 0.1337891f, 0.4652100f, -0.0257568f, -0.2523193f, -0.1605225f, }, + { -0.5086670f, 0.1397705f, -0.3353271f, -0.0181885f, 0.6464844f, -0.0897217f, 0.0534668f, 0.0068359f, -0.0493164f, }, + { -0.0194092f, -0.2641602f, -0.1170654f, 0.4262695f, -0.0842285f, -0.0839844f, -0.1319580f, 0.3371582f, -0.1453857f, }, + { 0.0798340f, 0.2503662f, -0.2617188f, -0.3918457f, -0.2225342f, 0.0906982f, 0.0837402f, -0.0916748f, 0.3031006f, }, + { 0.0195313f, 0.1561279f, 0.3962402f, 0.2287598f, 0.3037109f, 0.1455078f, -0.7296143f, -0.0583496f, 0.0146484f, }, + { -0.0426025f, -0.0079346f, -0.2868652f, -0.0270996f, -0.2048340f, -0.4375000f, 0.1359863f, 0.3990479f, 0.1784668f, }, + { -0.1359863f, -0.0168457f, 0.2880859f, -0.3371582f, 0.0878906f, -0.4665527f, 0.3079834f, 0.0263672f, 0.1428223f, }, + { 0.5368652f, -0.5162354f, -0.2258301f, 0.1552734f, 0.0467529f, 0.2119141f, -0.0467529f, -0.1580811f, 0.0103760f, }, + { -0.0161133f, 0.1383057f, 0.1837158f, 0.1790771f, -0.2916260f, -0.2655029f, 0.4916992f, -0.3359375f, 0.0294189f, }, + { -0.5313721f, -0.2567139f, -0.0686035f, 0.0997314f, 0.4832764f, 0.6678467f, 0.2369385f, -0.1950684f, -0.2867432f, }, + { 0.0245361f, 0.1723633f, -0.0971680f, 0.3406982f, -0.5158691f, 0.3939209f, -0.2431641f, -0.0194092f, -0.0194092f, }, + { 0.4986572f, -0.1890869f, 0.1245117f, -0.2659912f, -0.0947266f, -0.2548828f, -0.0179443f, -0.0051270f, 0.2294922f, }, + { -0.1256104f, 0.6081543f, -0.2509766f, 0.0135498f, 0.1733398f, 0.2613525f, 0.0368652f, -0.3142090f, -0.1203613f, }, + { -0.0582275f, -0.4512939f, -0.2867432f, -0.2519531f, -0.0408936f, -0.0268555f, 0.7149658f, 0.0069580f, -0.0008545f, }, + { -0.6600342f, -0.0666504f, -0.0430908f, 0.3498535f, 0.0167236f, -0.0166016f, 0.4282227f, 0.1210938f, -0.2513428f, }, + { -0.2482910f, -0.1375732f, -0.0230713f, -0.0366211f, -0.2628174f, 0.4401855f, 0.3079834f, -0.4549561f, 0.1862793f, }, + { -0.4635010f, 0.2604980f, 0.5312500f, -0.1123047f, -0.0560303f, 0.3322754f, 0.2177734f, -0.0086670f, -0.3698730f, }, + { -0.1070557f, 0.2401123f, -0.2008057f, -0.5410156f, 0.0625000f, 0.0047607f, 0.2144775f, 0.3509521f, -0.1156006f, }, + { 0.2248535f, 0.1666260f, 0.1831055f, 0.1038818f, 0.0725098f, -0.3530273f, -0.0493164f, 0.4061279f, -0.3757324f, }, + { -0.1922607f, -0.1535645f, -0.1187744f, -0.0233154f, -0.0476074f, 0.0054932f, 0.0765381f, -0.0277100f, 0.1982422f, }, + { -0.0174561f, 0.0262451f, 0.2633057f, 0.5915527f, 0.6512451f, 0.4146729f, -0.0242920f, -0.5423584f, -0.3773193f, }, + { -0.0345459f, -0.0263672f, 0.1510010f, -0.1804199f, -0.6883545f, -0.0946045f, 0.0640869f, 0.2572021f, 0.3013916f, }, + { 0.3581543f, -0.0311279f, 0.2976074f, 0.1005859f, 0.7291260f, -0.2221680f, -0.1623535f, -0.1467285f, -0.2969971f, }, + { 0.1098633f, 0.0793457f, -0.6901855f, 0.3529053f, -0.1878662f, -0.0552979f, 0.2028809f, 0.0281982f, -0.0177002f, }, + { 0.2027588f, 0.0904541f, -0.0405273f, 0.1490479f, 0.2208252f, 0.1151123f, 0.5897217f, -0.1938477f, -0.5638428f, }, + { 0.0079346f, -0.0964355f, -0.1202393f, -0.1090088f, 0.4118652f, 0.3842773f, 0.0352783f, 0.3597412f, -0.6079102f, }, + { -0.0806885f, -0.0521240f, 0.1759033f, 0.9394531f, 0.0192871f, -0.2336426f, -0.2525635f, -0.2095947f, -0.0510254f, }, + { 0.3243408f, 0.5150146f, 0.1837158f, -0.1337891f, 0.0733643f, -0.1789551f, -0.2141113f, -0.0584717f, -0.0194092f, }, + { 0.4123535f, 0.6411133f, 0.6176758f, 0.4884033f, 0.1588135f, 0.0512695f, -0.1547852f, -0.3433838f, -0.5122070f, }, +}; + + + +const float PowerCB_WB[64][2] = +{ + { -1.6459961f, -0.8359375f, }, + { -0.083007813f, 0.17089844f, }, + { -0.31152344f, -0.45849609f, }, + { 0.02734375f, 0.52441406f, }, + { -0.76123047f, -0.30566406f, }, + { 0.09765625f, 0.16796875f, }, + { -0.19384766f, 0.11621094f, }, + { 0.13867188f, 0.69091797f, }, + { -0.64599609f, -0.91796875f, }, + { -0.265625f, 0.57128906f, }, + { -0.30224609f, -0.12451172f, }, + { 0.28662109f, 0.47558594f, }, + { -0.61621094f, -0.047851563f, }, + { 0.15966797f, 0.073730469f, }, + { 0.020019531f, -0.14746094f, }, + { 0.45947266f, 0.91601563f, }, + { -1.1020508f, -0.60205078f, }, + { 0.013671875f, 0.098632813f, }, + { -0.25390625f, -0.27392578f, }, + { 0.16503906f, 0.51171875f, }, + { -0.52734375f, -0.24169922f, }, + { 0.092773438f, 0.28417969f, }, + { -0.13867188f, -0.01171875f, }, + { 0.28222656f, 0.77392578f, }, + { -0.64648438f, -0.53173828f, }, + { -0.034667969f, 0.27734375f, }, + { -0.22998047f, -0.012695313f, }, + { 0.55664063f, 0.44384766f, }, + { -0.41796875f, -0.0625f, }, + { 0.20751953f, 0.36132813f, }, + { 0.068359375f, 0.005859375f, }, + { 0.77880859f, 0.92333984f, }, + { -1.0625f, -1.1279297f, }, + { -0.15039063f, 0.26416016f, }, + { -0.15380859f, -0.41943359f, }, + { -0.0390625f, 0.64160156f, }, + { -0.87011719f, 0.24902344f, }, + { 0.19677734f, 0.21972656f, }, + { -0.29638672f, 0.28417969f, }, + { 0.070800781f, 0.89697266f, }, + { -0.44921875f, -0.67675781f, }, + { -0.10986328f, 0.42578125f, }, + { -0.19287109f, -0.12597656f, }, + { 0.40478516f, 0.47900391f, }, + { -0.46142578f, 0.16845703f, }, + { 0.31396484f, 0.11767578f, }, + { -0.02734375f, -0.011230469f, }, + { 0.59130859f, 0.72363281f, }, + { -0.87548828f, -0.71240234f, }, + { 0.01953125f, 0.1953125f, }, + { -0.11669922f, -0.22998047f, }, + { 0.25976563f, 0.60449219f, }, + { -0.37792969f, -0.25195313f, }, + { 0.11914063f, 0.40576172f, }, + { -0.076660156f, 0.07421875f, }, + { 0.28125f, 1.1166992f, }, + { -0.453125f, -0.41210938f, }, + { 0.020019531f, 0.37060547f, }, + { -0.078613281f, -0.096679688f, }, + { 0.42626953f, 0.66064453f, }, + { -0.3125f, 0.051269531f, }, + { 0.33935547f, 0.30419922f, }, + { 0.17773438f, -0.08984375f, }, + { 0.60449219f, 1.1943359f, }, +}; + + +const float PowerCB_NB[64][2] = +{ + { -1.6352539f, -1.359375f, }, + { -0.3828125f, 0.18798828f, }, + { -0.43505859f, -0.27441406f, }, + { 0.061523438f, 0.44677734f, }, + { -0.74121094f, -0.70214844f, }, + { 0.1484375f, 0.025878906f, }, + { -0.15332031f, -0.21826172f, }, + { 0.33544922f, 0.59521484f, }, + { -1.262207f, -0.88232422f, }, + { -0.031738281f, 0.074707031f, }, + { -0.59521484f, -0.16455078f, }, + { 0.24267578f, 0.34179688f, }, + { -0.43652344f, -0.51318359f, }, + { 0.078613281f, 0.22021484f, }, + { -0.022460938f, -0.25195313f, }, + { 0.48193359f, 0.74169922f, }, + { -1.1118164f, -1.1245117f, }, + { -0.17285156f, 0.21728516f, }, + { -0.25976563f, -0.26367188f, }, + { 0.0024414063f, 0.62060547f, }, + { -0.51123047f, -0.69970703f, }, + { 0.328125f, -0.10986328f, }, + { -0.16357422f, -0.036621094f, }, + { 0.49169922f, 0.515625f, }, + { -0.66503906f, -0.91748047f, }, + { -0.045410156f, 0.17919922f, }, + { -0.22851563f, -0.12646484f, }, + { 0.87890625f, -0.14160156f, }, + { -0.54589844f, -0.38720703f, }, + { 0.20117188f, 0.23046875f, }, + { -0.0043945313f, -0.096191406f, }, + { 0.71826172f, 0.79785156f, }, + { -1.2827148f, -1.3901367f, }, + { -0.13134766f, 0.080078125f, }, + { -0.33642578f, -0.18212891f, }, + { 0.2109375f, 0.45898438f, }, + { -0.78173828f, -0.40966797f, }, + { 0.15185547f, 0.13232422f, }, + { -0.10351563f, -0.12255859f, }, + { 0.26513672f, 0.83691406f, }, + { -0.98339844f, -0.65234375f, }, + { 0.053222656f, 0.11767578f, }, + { -0.38525391f, -0.053710938f, }, + { 0.35595703f, 0.43359375f, }, + { -0.20410156f, -0.62353516f, }, + { 0.125f, 0.32910156f, }, + { 0.10644531f, -0.10595703f, }, + { 0.50146484f, 1.0083008f, }, + { -0.86376953f, -1.1196289f, }, + { -0.13476563f, 0.41650391f, }, + { -0.17578125f, -0.37304688f, }, + { 0.18359375f, 0.60888672f, }, + { -0.62207031f, -0.54785156f, }, + { 0.29394531f, 0.1328125f, }, + { -0.064941406f, -0.015625f, }, + { 0.67089844f, 0.54589844f, }, + { -0.90820313f, -0.87646484f, }, + { -0.011230469f, 0.30273438f, }, + { -0.25634766f, 0.029296875f, }, + { 0.52246094f, 0.26757813f, }, + { -0.33740234f, -0.39013672f, }, + { 0.34228516f, 0.27929688f, }, + { 0.039550781f, 0.0087890625f, }, + { 0.95166016f, 1.0351563f, }, +}; + +/* sinc for warp/extrapolate./16384., in Q14 */ +const float sinc[8][12] = +{ + {0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,16384.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,}, + {-388.0f/16384.0f,484.0f/16384.0f,-638.0f/16384.0f,939.0f/16384.0f,-1773.0f/16384.0f,15966.0f/16384.0f,2281.0f/16384.0f,-1063.0f/16384.0f,694.0f/16384.0f,-514.0f/16384.0f,409.0f/16384.0f,-339.0f/16384.0f,}, + {-701.0f/16384.0f,868.0f/16384.0f,-1134.0f/16384.0f,1639.0f/16384.0f,-2949.0f/16384.0f,14751.0f/16384.0f,4917.0f/16384.0f,-2106.0f/16384.0f,1341.0f/16384.0f,-982.0f/16384.0f,776.0f/16384.0f,-640.0f/16384.0f,}, + {-895.0f/16384.0f,1101.0f/16384.0f,-1427.0f/16384.0f,2029.0f/16384.0f,-3503.0f/16384.0f,12849.0f/16384.0f,7709.0f/16384.0f,-2964.0f/16384.0f,1835.0f/16384.0f,-1328.0f/16384.0f,1042.0f/16384.0f,-856.0f/16384.0f,}, + {-947.0f/16384.0f,1159.0f/16384.0f,-1489.0f/16384.0f,2086.0f/16384.0f,-3476.0f/16384.0f,10430.0f/16384.0f,10430.0f/16384.0f,-3476.0f/16384.0f,2086.0f/16384.0f,-1489.0f/16384.0f,1159.0f/16384.0f,-947.0f/16384.0f,}, + {-856.0f/16384.0f,1042.0f/16384.0f,-1328.0f/16384.0f,1835.0f/16384.0f,-2964.0f/16384.0f,7709.0f/16384.0f,12849.0f/16384.0f,-3503.0f/16384.0f,2029.0f/16384.0f,-1427.0f/16384.0f,1101.0f/16384.0f,-895.0f/16384.0f,}, + {-640.0f/16384.0f,776.0f/16384.0f,-982.0f/16384.0f,1341.0f/16384.0f,-2106.0f/16384.0f,4917.0f/16384.0f,14751.0f/16384.0f,-2949.0f/16384.0f,1639.0f/16384.0f,-1134.0f/16384.0f,868.0f/16384.0f,-701.0f/16384.0f,}, + {-339.0f/16384.0f,409.0f/16384.0f,-514.0f/16384.0f,694.0f/16384.0f,-1063.0f/16384.0f,2281.0f/16384.0f,15966.0f/16384.0f,-1773.0f/16384.0f,939.0f/16384.0f,-638.0f/16384.0f,484.0f/16384.0f,-388.0f/16384.0f,}, +}; + +/*----------------------------------------------------------------------------------* + * Highrate SWB BWE tables + *----------------------------------------------------------------------------------*/ + +const float overlap_coefs_48kHz[NSV_OVERLAP*WIDTH_BAND] = +{ 0.30f, 0.34f, 0.36f, 0.39f, 0.42f, 0.44f, 0.46f, 0.475f, 0.49f, 0.51f, 0.54f, 0.57f, 0.62f, 0.72f, 0.83f, 0.95f }; + +const float overlap_coefs[NSV_OVERLAP*WIDTH_BAND] = +{ 0.2700f, 0.3060f, 0.3240f, 0.3510f, 0.3780f, 0.3960f, 0.4140f, 0.4275f, 0.4410f, 0.4590f, 0.4860f, 0.5130f, 0.5580f, 0.6480f, 0.7470f, 0.855f }; + +const float swb_hr_env_code1[NUM_ENVLOPE_CODE_HR1*2] = +{ + 0.044983f, 0.041700f, + 0.524276f, 0.469365f, + 0.671757f, 0.605513f, + 0.983501f, 0.855093f, + 1.227874f, 1.132200f, + 1.672212f, 1.432704f, + 2.548211f, 2.361091f, + 3.196961f, 3.306999f, + 2.580753f, 5.217478f, + 4.207751f, 7.243802f, + 3.517157f, 1.738487f, + 4.381567f, 2.753657f, + 4.758266f, 4.696094f, + 6.827988f, 6.106459f, + 4.450459f, 10.131211f, + 7.256045f, 12.488036f, + 6.708720f, 1.953339f, + 6.604030f, 3.699560f, + 10.612728f, 2.537916f, + 9.387467f, 4.241173f, + 7.119045f, 8.281485f, + 9.062854f, 7.086526f, + 8.919388f, 9.762914f, + 11.299319f, 11.763904f, + 11.782217f, 5.879754f, + 14.050457f, 9.665228f, + 11.201525f, 9.001128f, + 14.434753f, 13.236565f, + 14.337260f, 3.904411f, + 20.071049f, 4.335061f, + 18.105812f, 8.223599f, + 22.352287f, 9.603263f, + 7.242756f, 16.564487f, + 11.777528f, 19.167645f, + 11.121798f, 15.455982f, + 14.563579f, 17.359568f, + 17.821218f, 11.894719f, + 17.466026f, 15.296063f, + 21.336960f, 13.455175f, + 20.544336f, 17.125366f, + 9.056358f, 22.338306f, + 11.238424f, 28.832520f, + 13.262732f, 25.143383f, + 16.243559f, 28.256853f, + 15.269305f, 21.539135f, + 16.983515f, 24.699589f, + 19.591730f, 22.689682f, + 20.146198f, 25.888466f, + 17.797417f, 19.453121f, + 21.290621f, 20.186579f, + 24.097319f, 19.086721f, + 23.613092f, 22.545858f, + 23.682005f, 16.328239f, + 26.886553f, 19.402439f, + 26.009769f, 15.632211f, + 28.939930f, 16.240620f, + 25.094482f, 12.366419f, + 27.713383f, 13.263280f, + 28.330946f, 10.329259f, + 30.632830f, 12.851279f, + 25.273802f, 6.138124f, + 29.195339f, 7.222413f, + 32.171322f, 5.019567f, + 31.979000f, 9.473855f, +}; + +const float swb_hr_env_code2[NUM_ENVLOPE_CODE_HR2*2] = +{ + 0.512539f, 0.472507f, + 1.338963f, 1.108591f, + 2.544041f, 1.759765f, + 3.124053f, 3.045299f, + 4.892713f, 3.721097f, + 4.010297f, 5.750862f, + 5.111215f, 2.164709f, + 6.667518f, 3.893404f, + 8.454117f, 2.751430f, + 11.123573f, 3.518174f, + 6.622948f, 5.960704f, + 8.562429f, 5.003579f, + 8.919363f, 7.784057f, + 10.759037f, 5.959438f, + 12.449193f, 8.359519f, + 13.677005f, 11.230577f, + 13.672631f, 5.457414f, + 16.471989f, 3.917684f, + 20.910328f, 6.432810f, + 25.457325f, 8.617220f, + 16.410700f, 7.574456f, + 18.574385f, 10.291498f, + 22.088757f, 12.512156f, + 21.170530f, 17.208714f, + 5.276107f, 9.622470f, + 9.093585f, 11.274686f, + 11.945659f, 15.538144f, + 16.550409f, 15.046564f, + 6.358148f, 17.547396f, + 13.316619f, 21.765524f, + 7.646096f, 26.106720f, + 2.451297f, 31.933104f +}; + +const float swb_hr_env_code3[NUM_ENVLOPE_CODE_HR_TR*N_BANDS_TRANS_BWE_HR] = +{ + 0.799219f, 0.677609f, + 1.754571f, 1.215689f, + 2.846222f, 2.017775f, + 4.379336f, 1.975914f, + 5.935472f, 2.945818f, + 3.938621f, 4.220399f, + 8.080808f, 2.632276f, + 7.579771f, 4.986835f, + 4.956485f, 10.363663f, + 7.739148f, 8.652471f, + 9.238397f, 7.051655f, + 10.205707f, 5.619638f, + 10.645117f, 4.374648f, + 11.660180f, 3.474015f, + 10.845836f, 2.664596f, + 11.724073f, 1.637023f +}; + +/* Searching thresholds for quantization of norms */ +const float thren_HQ[39] = +{ + 110217.974940f, 77935.877489f, + 55108.987470f, 38967.938744f, + 27554.493735f, 19483.969372f, + 13777.246868f, 9741.984686f, + 6888.623434f, 4870.992343f, + 3444.311717f, 2435.496172f, + 1722.155858f, 1217.748086f, + 861.077929f, 608.874043f, + 430.538965f, 304.437021f, + 215.269482f, 152.218511f, + 107.634741f, 76.109255f, + 53.817371f, 38.054628f, + 26.908685f, 19.027314f, + 13.454343f, 9.513657f, + 6.727171f, 4.756828f, + 3.363586f, 2.378414f, + 1.681793f, 1.189207f, + 0.840896f, 0.594604f, + 0.420448f, 0.297302f, + 0.210224f +}; + +/*----------------------------------------------------------------------------------* + * ACELP/HQ core switching + *----------------------------------------------------------------------------------*/ + +/* short filters for BWE of ACELP->HQ switching frame */ +const float hp12800_16000[21] = +{ + -0.00000000f, 0.00212227f, -0.00632535f, 0.01161181f, -0.01235466f, 0.00000000f, 0.03177450f, -0.08143591f, + 0.13749378f, -0.18212549f, 0.19916883f, -0.18212549f, 0.13749378f, -0.08143591f, 0.03177450f, 0.00000000f, + -0.01235466f, 0.01161181f, -0.00632535f, 0.00212227f, -0.00000000f +}; + +const float hp12800_32000[41] = +{ + -0.00000000f, 0.00136608f, 0.00106650f, -0.00143351f, -0.00317865f, 0.00000000f, 0.00583523f, 0.00477033f, + -0.00620853f, -0.01289218f, -0.00000000f, 0.02060233f, 0.01596749f, -0.02003257f, -0.04092361f, 0.00000000f, + 0.06909412f, 0.05929089f, -0.09152269f, -0.30127931f, 0.60052441f, -0.30127931f, -0.09152269f, 0.05929089f, + 0.06909412f, 0.00000000f, -0.04092361f, -0.02003257f, 0.01596749f, 0.02060233f, -0.00000000f, -0.01289218f, + -0.00620853f, 0.00477033f, 0.00583523f, 0.00000000f, -0.00317865f, -0.00143351f, 0.00106650f, 0.00136608f, + -0.00000000f +}; + +const float hp12800_48000[61] = +{ + -0.00000000f, 0.00067336f, 0.00101850f, 0.00071064f, -0.00030497f, -0.00156225f, -0.00211804f, -0.00111583f, + 0.00136699f, 0.00388820f, 0.00427438f, 0.00122967f, -0.00413694f, -0.00827775f, -0.00727539f, 0.00000000f, + 0.00994020f, 0.01548435f, 0.01063964f, -0.00437614f, -0.02123403f, -0.02726869f, -0.01372549f, 0.01631621f, + 0.04603958f, 0.05175432f, 0.01589299f, -0.06098444f, -0.15675008f, -0.23604172f, 0.73360516f, -0.23604172f, + -0.15675008f, -0.06098444f, 0.01589299f, 0.05175432f, 0.04603958f, 0.01631621f, -0.01372549f, -0.02726869f, + -0.02123403f, -0.00437614f, 0.01063964f, 0.01548435f, 0.00994020f, 0.00000000f, -0.00727539f, -0.00827775f, + -0.00413694f, 0.00122967f, 0.00427438f, 0.00388820f, 0.00136699f, -0.00111583f, -0.00211804f, -0.00156225f, + -0.00030497f, 0.00071064f, 0.00101850f, 0.00067336f, -0.00000000f +}; + + +const float hp16000_32000[33] = +{ + -0.00000000f, 0.00188788f, -0.00000000f, -0.00386248f, -0.00000000f, 0.00824247f, -0.00000000f, -0.01594711f, + -0.00000000f, 0.02867656f, -0.00000000f, -0.05071856f, -0.00000000f, 0.09801591f, -0.00000000f, -0.31594176f, + 0.50070579f, -0.31594176f, -0.00000000f, 0.09801591f, -0.00000000f, -0.05071856f, -0.00000000f, 0.02867656f, + -0.00000000f, -0.01594711f, -0.00000000f, 0.00824247f, -0.00000000f, -0.00386248f, -0.00000000f, 0.00188788f, + -0.00000000f +}; + +const float hp16000_48000[49] = +{ + -0.00000000f, 0.00100660f, 0.00119953f, -0.00000000f, -0.00195325f, -0.00254135f, -0.00000000f, 0.00421805f, + 0.00534416f, 0.00000000f, -0.00829341f, -0.01018351f, -0.00000000f, 0.01504620f, 0.01817861f, 0.00000000f, + -0.02654841f, -0.03231243f, -0.00000000f, 0.04992164f, 0.06470722f, 0.00000000f, -0.13575216f, -0.27474220f, + 0.66706142f, -0.27474220f, -0.13575216f, 0.00000000f, 0.06470722f, 0.04992164f, -0.00000000f, -0.03231243f, + -0.02654841f, 0.00000000f, 0.01817861f, 0.01504620f, -0.00000000f, -0.01018351f, -0.00829341f, 0.00000000f, + 0.00534416f, 0.00421805f, -0.00000000f, -0.00254135f, -0.00195325f, -0.00000000f, 0.00119953f, 0.00100660f, + -0.00000000f +}; + +const double cu15[28][3] = +{ + /* xx/3, xx*xx/3, xx*xx*xx/3 xx v */ + /* 0:*/ { 0.0222222222, 0.0014814815, 0.0000987654 }, /* 1/15 */ + /* 1:*/ { 0.0444444444, 0.0059259259, 0.0007901235 }, /* 2/15 */ + /* 2:*/ { 0.0666666667, 0.0133333333, 0.0026666667 }, + /* 3:*/ { 0.0888888889, 0.0237037037, 0.0063209877 }, + /* 4:*/ { 0.1111111111, 0.0370370370, 0.0123456790 }, + /* 5:*/ { 0.1333333333, 0.0533333333, 0.0213333333 }, + /* 6:*/ { 0.1555555556, 0.0725925926, 0.0338765432 }, + /* 7:*/ { 0.1777777778, 0.0948148148, 0.0505679012 }, + /* 8:*/ { 0.2000000000, 0.1200000000, 0.0720000000 }, /* 9/15 */ + /* 9:*/ { 0.2222222222, 0.1481481481, 0.0987654321 }, /* 10/15 */ + /*10:*/ { 0.2444444444, 0.1792592593, 0.1314567901 }, + /*11:*/ { 0.2666666667, 0.2133333333, 0.1706666667 }, + /*12:*/ { 0.2888888889, 0.2503703704, 0.2169876543 }, + /*13:*/ { 0.3111111111, 0.2903703704, 0.2710123457 }, /* 14/15 */ + /*14:*/ { 0.3555555556, 0.3792592593, 0.4045432099 }, /* 16/15 */ + /*15:*/ { 0.3777777778, 0.4281481481, 0.4852345679 }, + /*16:*/ { 0.4000000000, 0.4800000000, 0.5760000000 }, /* 18/15 */ + /*17:*/ { 0.4222222222, 0.5348148148, 0.6774320988 }, + /*18:*/ { 0.4444444444, 0.5925925926, 0.7901234568 }, /* 20/15 */ + /*19:*/ { 0.4666666667, 0.6533333333, 0.9146666667 }, + /*20:*/ { 0.4888888889, 0.7170370370, 1.0516543210 }, + /*21:*/ { 0.5111111111, 0.7837037037, 1.2016790123 }, + /*22:*/ { 0.5333333333, 0.8533333333, 1.3653333333 }, + /*23:*/ { 0.5555555556, 0.9259259259, 1.5432098765 }, + /*24:*/ { 0.5777777778, 1.0014814815, 1.7359012346 }, + /*25:*/ { 0.6000000000, 1.0800000000, 1.9440000000 }, /* 27/15 */ + /*26:*/ { 0.6222222222, 1.1614814815, 2.1680987654 }, + /*27:*/ { 0.6444444444, 1.2459259259, 2.4087901235 }, /* 29/15 */ +}; + +const double cu4[6][3] = +{ + /* xx/3, xx*xx/3, xx*xx*xx/3 */ + /* 0:*/ { 0.0833333333, 0.0208333333, 0.0052083333 }, /*0.25*/ + /* 1:*/ { 0.1666666667, 0.0833333333, 0.0416666667 }, /*0.5*/ + /* 2:*/ { 0.2500000000, 0.1875000000, 0.1406250000 }, /*0.75*/ + /* 3:*/ { 0.4166666667, 0.5208333333, 0.6510416667 }, /*1.25*/ + /* 4:*/ { 0.5000000000, 0.7500000000, 1.1250000000 }, /*1.5*/ + /* 5:*/ { 0.5833333333, 1.0208333333, 1.7864583333 } /*1.75*/ +}; + +const int16_t ct2[7][13] = +{ + /* accepted configurations */ + /*input 12.8, output :*/ + /*8*/ {30, 22, 30, 16, 25, 30, 19, 30, 30, 0, 8, 4, 15}, + /*16*/ {25, 22, 19, 16, 16, 0, 0, 0, 12, 1, 4, 4, 15}, + /*32*/ {19, 16, 19, 16, 16, 0, 0, 0, 6, 2, 2, 4, 15}, + /*48*/ {17, 14, 15, 16, 16, 0, 0, 0, 4, 3, 4, 4, 15}, + + /*input 16, output :*/ + /*12*/ { 9, 3, 4, 5, 9, 0, 0, 0, 5, 0, 5, 5, 4}, + /*32*/ { 4, 4, 4, 4, 4, 0, 0, 0, 2, 1, 1, 4, 4}, + /*48*/ {18, 18, 18, 18, 18, 0, 0, 0, 5, 2, 1, 4, 15}, +}; + + +/*----------------------------------------------------------------------------------* + * hp filter for filtering random part of excitation in frame error concealment + * Used in lib_dec\syn_bfi.c + *----------------------------------------------------------------------------------*/ + +const float h_high[5] = { -0.0125f, -0.1090f, 0.7813f, -0.1090f, -0.0125f }; + +const float sincos_t_rad3[T_SIN_PI_2+1] = +{ + 0.000000000000000f, 0.004090604026235f, 0.008181139603937f, 0.012271538285720f, 0.016361731626487f, 0.020451651184577f, 0.024541228522912f, 0.028630395210139f, + 0.032719082821776f, 0.036807222941359f, 0.040894747161583f, 0.044981587085452f, 0.049067674327418f, 0.053152940514528f, 0.057237317287569f, 0.061320736302209f, + 0.065403129230143f, 0.069484427760237f, 0.073564563599667f, 0.077643468475068f, 0.081721074133668f, 0.085797312344440f, 0.089872114899235f, 0.093945413613929f, + 0.098017140329561f, 0.102087226913474f, 0.106155605260457f, 0.110222207293883f, 0.114286964966846f, 0.118349810263305f, 0.122410675199216f, 0.126469491823675f, + 0.130526192220052f, 0.134580708507126f, 0.138632972840227f, 0.142682917412363f, 0.146730474455362f, 0.150775576241001f, 0.154818155082141f, 0.158858143333861f, + 0.162895473394589f, 0.166930077707230f, 0.170961888760301f, 0.174990839089060f, 0.179016861276633f, 0.183039887955141f, 0.187059851806832f, 0.191076685565203f, + 0.195090322016128f, 0.199100693998982f, 0.203107734407763f, 0.207111376192219f, 0.211111552358965f, 0.215108195972610f, 0.219101240156870f, 0.223090618095693f, + 0.227076263034373f, 0.231058108280671f, 0.235036087205927f, 0.239010133246176f, 0.242980179903264f, 0.246946160745958f, 0.250908009411060f, 0.254865659604515f, + 0.258819045102521f, 0.262768099752639f, 0.266712757474898f, 0.270652952262902f, 0.274588618184932f, 0.278519689385053f, 0.282446100084213f, 0.286367784581343f, + 0.290284677254462f, 0.294196712561769f, 0.298103825042740f, 0.302005949319228f, 0.305903020096553f, 0.309794972164597f, 0.313681740398891f, 0.317563259761712f, + 0.321439465303162f, 0.325310292162263f, 0.329175675568039f, 0.333035550840599f, 0.336889853392220f, 0.340738518728429f, 0.344581482449080f, 0.348418680249435f, + 0.352250047921233f, 0.356075521353776f, 0.359895036534988f, 0.363708529552498f, 0.367515936594704f, 0.371317193951837f, 0.375112238017038f, 0.378901005287410f, + 0.382683432365090f, 0.386459455958303f, 0.390229012882428f, 0.393992040061048f, 0.397748474527011f, 0.401498253423481f, 0.405241314004990f, 0.408977593638489f, + 0.412707029804395f, 0.416429560097637f, 0.420145122228702f, 0.423853654024676f, 0.427555093430282f, 0.431249378508924f, 0.434936447443717f, 0.438616238538528f, + 0.442288690219001f, 0.445953741033595f, 0.449611329654607f, 0.453261394879198f, 0.456903875630421f, 0.460538710958240f, 0.464165840040552f, 0.467785202184201f, + 0.471396736825998f, 0.475000383533732f, 0.478596082007181f, 0.482183772079123f, 0.485763393716340f, 0.489334887020625f, 0.492898192229784f, 0.496453249718633f, + 0.500000000000000f, 0.503538383725718f, 0.507068341687617f, 0.510589814818519f, 0.514102744193222f, 0.517607071029487f, 0.521102736689023f, 0.524589682678469f, + 0.528067850650368f, 0.531537182404149f, 0.534997619887097f, 0.538449105195327f, 0.541891580574752f, 0.545324988422046f, 0.548749271285616f, 0.552164371866554f, + 0.555570233019602f, 0.558966797754107f, 0.562354009234973f, 0.565731810783613f, 0.569100145878898f, 0.572458958158102f, 0.575808191417845f, 0.579147789615035f, + 0.582477696867802f, 0.585797857456439f, 0.589108215824328f, 0.592408716578875f, 0.595699304492433f, 0.598979924503229f, 0.602250521716282f, 0.605511041404326f, + 0.608761429008721f, 0.612001630140370f, 0.615231590580627f, 0.618451256282204f, 0.621660573370077f, 0.624859488142386f, 0.628047947071334f, 0.631225896804083f, + 0.634393284163645f, 0.637550056149777f, 0.640696159939861f, 0.643831542889791f, 0.646956152534857f, 0.650069936590618f, 0.653172842953777f, 0.656264819703058f, + 0.659345815100069f, 0.662415777590172f, 0.665474655803342f, 0.668522398555031f, 0.671558954847018f, 0.674584273868271f, 0.677598304995789f, 0.680600997795453f, + 0.683592302022871f, 0.686572167624217f, 0.689540544737067f, 0.692497383691237f, 0.695442635009612f, 0.698376249408973f, 0.701298177800824f, 0.704208371292213f, + 0.707106781186547f, 0.709993358984412f, 0.712868056384380f, 0.715730825283819f, 0.718581617779698f, 0.721420386169390f, 0.724247082951467f, 0.727061660826497f, + 0.729864072697836f, 0.732654271672413f, 0.735432211061519f, 0.738197844381584f, 0.740951125354959f, 0.743692007910687f, 0.746420446185274f, 0.749136394523459f, + 0.751839807478977f, 0.754530639815318f, 0.757208846506485f, 0.759874382737746f, 0.762527203906388f, 0.765167265622459f, 0.767794523709512f, 0.770408934205345f, + 0.773010453362737f, 0.775599037650177f, 0.778174643752598f, 0.780737228572094f, 0.783286749228650f, 0.785823163060853f, 0.788346427626606f, 0.790856500703845f, + 0.793353340291235f, 0.795836904608884f, 0.798307152099031f, 0.800764041426753f, 0.803207531480645f, 0.805637581373517f, 0.808054150443073f, 0.810457198252595f, + 0.812846684591615f, 0.815222569476594f, 0.817584813151584f, 0.819933376088899f, 0.822268218989775f, 0.824589302785025f, 0.826896588635696f, 0.829190037933717f, + 0.831469612302545f, 0.833735273597809f, 0.835986983907947f, 0.838224705554838f, 0.840448401094438f, 0.842658033317402f, 0.844853565249707f, 0.847034960153274f, + 0.849202181526579f, 0.851355193105265f, 0.853493958862750f, 0.855618443010829f, 0.857728610000272f, 0.859824424521420f, 0.861905851504774f, 0.863972856121587f, + 0.866025403784439f, 0.868063460147822f, 0.870086991108711f, 0.872095962807139f, 0.874090341626759f, 0.876070094195407f, 0.878035187385663f, 0.879985588315404f, + 0.881921264348355f, 0.883842183094633f, 0.885748312411290f, 0.887639620402854f, 0.889516075421856f, 0.891377646069366f, 0.893224301195515f, 0.895056009900018f, + 0.896872741532688f, 0.898674465693954f, 0.900461152235364f, 0.902232771260093f, 0.903989293123443f, 0.905730688433339f, 0.907456928050819f, 0.909167983090522f, + 0.910863824921176f, 0.912544425166069f, 0.914209755703531f, 0.915859788667400f, 0.917494496447491f, 0.919113851690058f, 0.920717827298248f, 0.922306396432559f, + 0.923879532511287f, 0.925437209210971f, 0.926979400466833f, 0.928506080473216f, 0.930017223684012f, 0.931512804813095f, 0.932992798834739f, 0.934457180984039f, + 0.935905926757326f, 0.937339011912575f, 0.938756412469813f, 0.940158104711519f, 0.941544065183021f, 0.942914270692887f, 0.944268698313317f, 0.945607325380521f, + 0.946930129495106f, 0.948237088522441f, 0.949528180593037f, 0.950803384102905f, 0.952062677713924f, 0.953306040354194f, 0.954533451218389f, 0.955744889768105f, + 0.956940335732209f, 0.958119769107168f, 0.959283170157394f, 0.960430519415566f, 0.961561797682962f, 0.962676986029777f, 0.963776065795440f, 0.964859018588927f, + 0.965925826289068f, 0.966976471044852f, 0.968010935275723f, 0.969029201671875f, 0.970031253194544f, 0.971017073076290f, 0.971986644821279f, 0.972939952205560f, + 0.973876979277334f, 0.974797710357222f, 0.975702130038528f, 0.976590223187499f, 0.977461974943572f, 0.978317370719628f, 0.979156396202234f, 0.979979037351883f, + 0.980785280403230f, 0.981575111865320f, 0.982348518521816f, 0.983105487431216f, 0.983846005927077f, 0.984570061618220f, 0.985277642388941f, 0.985968736399212f, + 0.986643332084879f, 0.987301418157858f, 0.987942983606322f, 0.988568017694885f, 0.989176509964781f, 0.989768450234042f, 0.990343828597665f, 0.990902635427780f, + 0.991444861373810f, 0.991970497362629f, 0.992479534598710f, 0.992971964564277f, 0.993447779019444f, 0.993906970002356f, 0.994349529829318f, 0.994775451094928f, + 0.995184726672197f, 0.995577349712672f, 0.995953313646548f, 0.996312612182778f, 0.996655239309180f, 0.996981189292537f, 0.997290456678690f, 0.997583036292635f, + 0.997858923238603f, 0.998118112900149f, 0.998360600940223f, 0.998586383301244f, 0.998795456205172f, 0.998987816153567f, 0.999163459927649f, 0.999322384588350f, + 0.999464587476366f, 0.999590066212200f, 0.999698818696204f, 0.999790843108610f, 0.999866137909562f, 0.999924701839145f, 0.999966533917401f, 0.999991633444351f, + 1.000000000000000f +}; + +/*----------------------------------------------------------------------------------* + * TCX + *----------------------------------------------------------------------------------*/ + +const float gain_corr_fac[3] = {1.0208f,1.0103f,1.0052f}; /*pow(10,2^(-n-2)/28)*/ +const float gain_corr_inv_fac[3] = {0.9797f,0.9898f,0.9949f};/*pow(10,-2^(-n-2)/28)*/ + +const float inter4_2tcx2[4][4] = +{ + { 0.2325402f, 0.5349195f, 0.2325402f, 0.0000000f }, + { 0.1353017f, 0.5094465f, 0.3400065f, 0.0152453f }, + { 0.0608774f, 0.4391226f, 0.4391226f, 0.0608774f }, + { 0.0152453f, 0.3400065f, 0.5094465f, 0.1353017f } +}; + +const float inter6_2tcx2[6][4] = +{ + { 0.2241379f, 0.5517241f, 0.2241379f, 0.0000000f }, + { 0.1562044f, 0.5388595f, 0.2990011f, 0.0059349f }, + { 0.0991379f, 0.5018346f, 0.3750000f, 0.0240275f }, + { 0.0549361f, 0.4450639f, 0.4450639f, 0.0549361f }, + { 0.0240275f, 0.3750000f, 0.5018346f, 0.0991379f }, + { 0.0059349f, 0.2990011f, 0.5388595f, 0.1562044f } +}; +const float inter_core_12_8kHz_output_8kHz[] = +{ + 0.5349196f, 0.5094466f, 0.4391227f, 0.3400065f, + 0.2325402f, 0.1353016f, 0.0608773f, 0.0152453f, + 0.0000000f +}; +const float inter_core_12_8kHz_output_16kHz[] = +{ + 0.4279357f, 0.4147958f, 0.3774199f, 0.3214508f, + 0.2548195f, 0.1860321f, 0.1225801f, 0.0699165f, + 0.0312127f, 0.0078047f, 0.0000000f, 0.0000000f, + 0.0000000f +}; +const float inter_core_12_8kHz_output_32kHz[] = +{ + 0.2139679f, 0.2123089f, 0.2073979f, 0.1994284f, + 0.1887100f, 0.1756491f, 0.1607254f, 0.1444646f, + 0.1274097f, 0.1100939f, 0.0930161f, 0.0766219f, + 0.0612900f, 0.0473253f, 0.0349583f, 0.0243509f, + 0.0156063f, 0.0087817f, 0.0039024f, 0.0009753f, + 0.0000000f +}; +const float inter_core_12_8kHz_output_48kHz[] = +{ + 0.1426452f, 0.1421528f, 0.1406841f, 0.1382653f, + 0.1349386f, 0.1307618f, 0.1258066f, 0.1201564f, + 0.1139041f, 0.1071503f, 0.1000000f, 0.0925607f, + 0.0849398f, 0.0772420f, 0.0695677f, 0.0620107f, + 0.0546572f, 0.0475844f, 0.0408600f, 0.0345417f, + 0.0286774f, 0.0233055f, 0.0184558f, 0.0141503f, + 0.0104042f, 0.0072274f, 0.0046257f, 0.0026016f, + 0.0011560f, 0.0002890f, 0.0000000f, 0.0000000f, + 0.0000000f +}; +const float inter_core_16kHz_output_8kHz[] = +{ + 0.5517241f, 0.5388595f, 0.5018346f, 0.4450639f, 0.3750000f, 0.2990011f, + 0.2241379f, 0.1562044f, 0.0991379f, 0.0549361f, 0.0240275f, 0.0059349f, + 0.0000000f +}; +const float inter_core_16kHz_output_16kHz[] = +{ + 0.5517241f, 0.5388595f, 0.5018346f, 0.4450639f, 0.3750000f, 0.2990011f, + 0.2241379f, 0.1562044f, 0.0991379f, 0.0549361f, 0.0240275f, 0.0059349f, + 0.0000000f +}; +const float inter_core_16kHz_output_32kHz[] = +{ + 0.2758621f, 0.2742414f, 0.2694298f, 0.2615753f, 0.2509173f, 0.2377748f, + 0.2225320f, 0.2056203f, 0.1875000f, 0.1686403f, 0.1495006f, 0.1305132f, + 0.1120690f, 0.0945060f, 0.0781022f, 0.0630725f, 0.0495690f, 0.0376861f, + 0.0274680f, 0.0189188f, 0.0120137f, 0.0067120f, 0.0029675f, 0.0007394f, + 0.0000000f +}; +const float inter_core_16kHz_output_48kHz[] = +{ + 0.1839080f, 0.1834272f, 0.1819912f, 0.1796198f, 0.1763457f, 0.1722133f, + 0.1672782f, 0.1616061f, 0.1552712f, 0.1483546f, 0.1409433f, 0.1331275f, + 0.1250000f, 0.1166535f, 0.1081796f, 0.0996670f, 0.0912002f, 0.0828579f, + 0.0747126f, 0.0668293f, 0.0592649f, 0.0520681f, 0.0452794f, 0.0389306f, + 0.0330460f, 0.0276422f, 0.0227295f, 0.0183120f, 0.0143894f, 0.0109575f, + 0.0080092f, 0.0055360f, 0.0035286f, 0.0019783f, 0.0008771f, 0.0002189f, + 0.0000000f +}; +const float inter_core_25_6kHz_output_8kHz[] = +{ + 0.5349196f, 0.5094466f, 0.4391227f, 0.3400065f, + 0.2325402f, 0.1353016f, 0.0608773f, 0.0152453f, + 0.0000000f +}; +const float inter_core_25_6kHz_output_16kHz[] = +{ + 0.5349196f, 0.5094466f, 0.4391227f, 0.3400065f, + 0.2325402f, 0.1353016f, 0.0608773f, 0.0152453f, + 0.0000000f +}; +const float inter_core_25_6kHz_output_32kHz[] = +{ + 0.4279357f, 0.4147958f, 0.3774199f, 0.3214508f, + 0.2548195f, 0.1860321f, 0.1225801f, 0.0699165f, + 0.0312127f, 0.0078047f, 0.0000000f, 0.0000000f, + 0.0000000f +}; +const float inter_core_25_6kHz_output_48kHz[] = +{ + 0.2852965f, 0.2813740f, 0.2698819f, 0.2516166f, + 0.2278099f, 0.2000000f, 0.1698781f, 0.1391327f, + 0.1093111f, 0.0817166f, 0.0573517f, 0.0369093f, + 0.0208069f, 0.0092505f, 0.0023118f, 0.0000000f, + 0.0000000f +}; + +const TCX_LTP_FILTER tcxLtpFilters[12] = +{ + { inter_core_12_8kHz_output_8kHz, 2 }, + { inter_core_12_8kHz_output_16kHz, 3 }, + { inter_core_12_8kHz_output_32kHz, 5 }, + { inter_core_12_8kHz_output_48kHz, 8 }, + { inter_core_16kHz_output_8kHz, 2 }, + { inter_core_16kHz_output_16kHz, 2 }, + { inter_core_16kHz_output_32kHz, 4 }, + { inter_core_16kHz_output_48kHz, 6 }, + { inter_core_25_6kHz_output_8kHz, 2 }, + { inter_core_25_6kHz_output_16kHz, 2 }, + { inter_core_25_6kHz_output_32kHz, 3 }, + { inter_core_25_6kHz_output_48kHz, 4 }, +}; + + +const SCALE_TCX_SETUP scaleTcxTable[SIZE_SCALE_TABLE_TCX] = +{ + { 0, 0, 8000, 0.67f }, + { 0, 8000, 9600, 0.70f }, + { 0, 9600, 13200, 0.76f }, + { 0, 13200, 16400, 0.86f }, + { 0, 16400, 24400, 0.90f }, + { 0, 24400, 64000, 0.96f }, + + { 1, 0, 8000, 1.f }, + { 1, 8000, 9600, 1.f }, + { 1, 9600, 13200, 1.f }, + { 1, 13200, 16400, 0.85f /*0.85f*/ }, + { 1, 16400, 24400, 0.88f /*0.90*/}, + { 1, 24400, 32000, 0.90f /*0.90*/}, + { 1, 32000, 32400, 0.95f /*0.91f*/}, +}; + + +/*----------------------------------------------------------------------------------* + * Arithmetic coder + *----------------------------------------------------------------------------------*/ + +const uint8_t ari_lookup_s17_LC[4096] = +{ + 0x01,0x04,0x29,0x13,0x0A,0x0D,0x05,0x10, + 0x10,0x0D,0x00,0x0D,0x2A,0x2A,0x22,0x25, + 0x25,0x28,0x2B,0x2E,0x31,0x34,0x34,0x0E, + 0x21,0x21,0x21,0x36,0x38,0x38,0x36,0x10, + 0x10,0x08,0x09,0x0B,0x0C,0x0E,0x0E,0x21, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x10, + 0x10,0x1A,0x09,0x1D,0x0C,0x20,0x20,0x21, + 0x36,0x36,0x36,0x36,0x36,0x0A,0x36,0x16, + 0x1A,0x1A,0x2D,0x0C,0x20,0x20,0x21,0x21, + 0x21,0x36,0x38,0x38,0x38,0x38,0x36,0x16, + 0x16,0x1A,0x3F,0x1F,0x20,0x21,0x24,0x06, + 0x36,0x36,0x36,0x38,0x00,0x0A,0x36,0x22, + 0x3E,0x3E,0x3F,0x30,0x20,0x21,0x06,0x06, + 0x06,0x38,0x36,0x36,0x36,0x26,0x36,0x1C, + 0x1C,0x3E,0x3F,0x02,0x20,0x21,0x06,0x36, + 0x36,0x38,0x0A,0x0A,0x0A,0x0A,0x05,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x3F,0x3F,0x0E,0x35,0x14,0x38,0x38, + 0x05,0x05,0x05,0x0D,0x13,0x13,0x1C,0x16, + 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, + 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, + 0x3F,0x3F,0x3F,0x20,0x35,0x14,0x27,0x38, + 0x38,0x0A,0x2A,0x2A,0x2A,0x16,0x05,0x10, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x3F,0x02,0x0E,0x02,0x14,0x13,0x0A, + 0x0D,0x0D,0x0D,0x13,0x00,0x00,0x16,0x19, + 0x19,0x3F,0x3F,0x02,0x02,0x14,0x38,0x36, + 0x0A,0x0A,0x0A,0x0D,0x0D,0x0D,0x1C,0x22, + 0x22,0x3F,0x3F,0x02,0x17,0x26,0x26,0x1C, + 0x1C,0x10,0x16,0x16,0x16,0x19,0x22,0x25, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x15,0x2C,0x2E,0x2E,0x2E,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x34,0x39, + 0x39,0x39,0x15,0x2C,0x2E,0x2E,0x0C,0x34, + 0x34,0x34,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x39,0x15,0x3C,0x2E,0x31,0x34,0x34, + 0x31,0x31,0x31,0x1F,0x1E,0x1E,0x1E,0x1E, + 0x1E,0x39,0x28,0x2C,0x2E,0x31,0x37,0x34, + 0x01,0x01,0x01,0x01,0x01,0x00,0x39,0x39, + 0x39,0x39,0x39,0x2C,0x2E,0x31,0x1E,0x34, + 0x34,0x35,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x39,0x39,0x3C,0x2E,0x03,0x07,0x34, + 0x34,0x0F,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x15,0x2B,0x31,0x1E,0x34, + 0x34,0x01,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x2C,0x39,0x2F,0x2E,0x2E, + 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E, + 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E, + 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E, + 0x2E,0x39,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x0F,0x2E,0x2E, + 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E, + 0x2E,0x2E,0x39,0x15,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x19,0x1C,0x16,0x22,0x22,0x25,0x25,0x25, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x3E,0x3E,0x2F,0x3D,0x21,0x36,0x38,0x05, + 0x0D,0x0D,0x0D,0x10,0x16,0x16,0x16,0x25, + 0x2D,0x2D,0x37,0x3D,0x33,0x38,0x05,0x0D, + 0x0D,0x10,0x16,0x16,0x16,0x16,0x16,0x25, + 0x2F,0x2F,0x30,0x12,0x06,0x05,0x0A,0x0D, + 0x0D,0x10,0x16,0x16,0x16,0x22,0x22,0x25, + 0x1F,0x1F,0x32,0x3B,0x29,0x0A,0x0A,0x10, + 0x16,0x16,0x16,0x16,0x22,0x22,0x22,0x25, + 0x02,0x02,0x14,0x29,0x05,0x0D,0x2A,0x10, + 0x16,0x16,0x16,0x22,0x22,0x22,0x22,0x25, + 0x35,0x35,0x14,0x29,0x0A,0x2A,0x2A,0x10, + 0x16,0x16,0x16,0x22,0x22,0x22,0x22,0x25, + 0x17,0x17,0x26,0x05,0x0D,0x10,0x10,0x16, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x25, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x1C,0x0D,0x16,0x16,0x16, + 0x22,0x22,0x22,0x22,0x22,0x22,0x25,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x26,0x1C,0x1C,0x10,0x16,0x16,0x22, + 0x22,0x22,0x22,0x22,0x22,0x25,0x25,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x1C,0x1C,0x1C,0x16,0x16,0x16,0x22, + 0x22,0x22,0x22,0x25,0x25,0x25,0x25,0x00, + 0x00,0x26,0x1C,0x1C,0x16,0x16,0x16,0x22, + 0x22,0x22,0x22,0x25,0x25,0x25,0x25,0x00, + 0x16,0x16,0x16,0x16,0x16,0x22,0x22,0x22, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x3C,0x1E,0x0F,0x06,0x27,0x2A, + 0x2A,0x10,0x16,0x16,0x16,0x16,0x16,0x22, + 0x2C,0x2C,0x0B,0x37,0x23,0x27,0x13,0x2A, + 0x10,0x10,0x10,0x16,0x16,0x16,0x16,0x22, + 0x1B,0x1B,0x1D,0x0F,0x24,0x13,0x13,0x2A, + 0x00,0x10,0x16,0x16,0x16,0x16,0x16,0x22, + 0x1F,0x1F,0x03,0x24,0x07,0x0A,0x0A,0x10, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x22, + 0x22,0x35,0x06,0x27,0x13,0x2A,0x2A,0x10, + 0x16,0x16,0x16,0x16,0x16,0x22,0x22,0x22, + 0x22,0x06,0x27,0x27,0x13,0x2A,0x2A,0x10, + 0x16,0x16,0x16,0x16,0x16,0x16,0x22,0x22, + 0x22,0x05,0x0A,0x2A,0x2A,0x10,0x10,0x16, + 0x16,0x16,0x16,0x16,0x16,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x0D,0x2A,0x10,0x10,0x10,0x10,0x16, + 0x16,0x16,0x16,0x16,0x16,0x22,0x22,0x25, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x16,0x16,0x16, + 0x16,0x16,0x16,0x22,0x22,0x22,0x22,0x25, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x16,0x16,0x16,0x16, + 0x16,0x22,0x22,0x22,0x22,0x22,0x22,0x25, + 0x0D,0x0D,0x10,0x10,0x10,0x16,0x16,0x16, + 0x16,0x22,0x22,0x22,0x22,0x22,0x22,0x25, + 0x0D,0x0D,0x0D,0x0D,0x0D,0x10,0x10,0x16, + 0x16,0x16,0x16,0x22,0x22,0x22,0x22,0x25, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x3A,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x11,0x3A,0x3A,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11,0x18, + 0x00,0x11,0x3A,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x11,0x11,0x11,0x18,0x18,0x18,0x18, + 0x18,0x25,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x3A,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x18,0x18, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x18,0x18, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x18,0x18,0x18,0x18, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x11,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x11,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x11,0x11,0x11,0x3A,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x18,0x3A,0x3A,0x11,0x11,0x11,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x11,0x11,0x11,0x3A,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x11,0x11,0x11,0x11,0x11,0x18, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x11,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x2A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x18, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x11,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x11, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A, + 0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A +}; + +const uint16_t ari_pk_s17_LC_ext[64][18] = +{ + { + 16384, 16368,16337,16231,16143,16115,16059,15916,15793,15710,15586,15472,15367,15302,15201,15107,15020, + 0 + }, + { + 16384, 8983, 8540, 8498, 8485, 4319, 3666, 3594, 3579, 2285, 1908, 1851, 1835, 1326, 1120, 1085, 1074, + 0 + }, + { + 16384, 12022,10039, 9520, 9346, 7347, 5335, 4648, 4382, 3815, 3083, 2728, 2562, 2363, 2050, 1869, 1777, + 0 + }, + { + 16384, 13429,11201,10562,10371, 8231, 5713, 4770, 4441, 3798, 2844, 2359, 2152, 1947, 1614, 1406, 1304, + 0 + }, + { + 16384, 13229,11403,10769,10529, 8415, 6431, 5645, 5311, 4448, 3547, 3176, 3001, 2617, 2181, 1984, 1886, + 0 + }, + { + 16384, 15168,13754,13120,12826,11553, 9705, 8723, 8227, 7675, 6762, 6180, 5842, 5585, 5141, 4816, 4607, + 0 + }, + { + 16384, 14625,12743,12034,11772,10059, 7706, 6652, 6223, 5594, 4594, 4023, 3742, 3501, 3089, 2818, 2664, + 0 + }, + { + 16384, 15275,13679,12951,12652,11158, 8852, 7652, 7121, 6406, 5242, 4542, 4196, 3894, 3398, 3063, 2864, + 0 + }, + { + 16384, 4860, 3338, 3214, 3193, 1428, 676, 571, 547, 356, 222, 189, 180, 139, 102, 89, 84, + 0 + }, + { + 16384, 8357, 5798, 5475, 5410, 3093, 1523, 1227, 1152, 849, 560, 470, 441, 370, 294, 261, 248, + 0 + }, + { + 16384, 15550,14350,13710,13387,12297,10541, 9493, 8929, 8354, 7371, 6696, 6299, 6008, 5491, 5107, 4856, + 0 + }, + { + 16384, 10346, 7298, 6933, 6865, 4052, 1863, 1471, 1381, 1055, 673, 536, 491, 429, 339, 293, 273, + 0 + }, + { + 16384, 11652, 8699, 8030, 7839, 5667, 3460, 2766, 2532, 2093, 1542, 1301, 1203, 1070, 893, 802, 759, + 0 + }, + { + 16384, 15639,14601,14037,13729,12847,11421,10520, 9978, 9521, 8720, 8136, 7750, 7493, 7033, 6676, 6426, + 0 + }, + { + 16384, 12427, 9590, 8715, 8386, 6641, 4708, 3886, 3515, 3071, 2490, 2198, 2052, 1886, 1670, 1549, 1478, + 0 + }, + { + 16384, 13605,10996,10363,10183, 7802, 5032, 4124, 3840, 3267, 2403, 1976, 1804, 1633, 1345, 1171, 1086, + 0 + }, + { + 16384, 15936,15224,14759,14464,13808,12678,11866,11331,10910,10150, 9549, 9122, 8853, 8352, 7938, 7626, + 0 + }, + { + 16384, 16383,16382,14829,14138,14137,14136,12895,12272,10935, 9788, 9082, 8674, 8073, 7508, 7118, 6867, + 0 + }, + { + 16384, 13888,11474,10840,10662, 8335, 5585, 4695, 4411, 3801, 2917, 2506, 2337, 2150, 1847, 1672, 1581, + 0 + }, + { + 16384, 15463,14162,13504,13196,11977,10063, 8978, 8429, 7811, 6768, 6088, 5705, 5406, 4882, 4504, 4266, + 0 + }, + { + 16384, 13764,11941,11367,11151, 9312, 7171, 6301, 5943, 5335, 4430, 3942, 3708, 3466, 3074, 2819, 2679, + 0 + }, + { + 16384, 5179, 3300, 3206, 3197, 1220, 374, 303, 293, 171, 81, 63, 59, 44, 29, 24, 22, + 0 + }, + { + 16384, 16026,15468,15096,14842,14329,13447,12790,12322,11985,11367,10860,10477,10248, 9811, 9443, 9148, + 0 + }, + { + 16384, 12809,11291,10848,10649, 8976, 7199, 6506, 6196, 5657, 4887, 4451, 4219, 3974, 3590, 3365, 3218, + 0 + }, + { + 16384, 16383,16382,15744,15348,15347,15346,14714,14288,13688,13097,12652,12328,11967,11584,11278,11045, + 0 + }, + { + 16384, 15415,14987,14866,14806,13751,13046,12818,12709,12187,11720,11527,11427,11096,10759,10601,10510, + 0 + }, + { + 16384, 5926, 4280, 4090, 4053, 2138, 1120, 947, 903, 632, 413, 353, 334, 264, 198, 174, 166, + 0 + }, + { + 16384, 9206, 6640, 6345, 6291, 3683, 1772, 1423, 1342, 1024, 652, 515, 467, 406, 314, 267, 245, + 0 + }, + { + 16384, 15086,13966,13505,13271,12238,10875,10157, 9763, 9331, 8629, 8155, 7845, 7608, 7198, 6892, 6670, + 0 + }, + { + 16384, 11427, 8599, 8132, 8027, 5406, 3012, 2429, 2270, 1823, 1244, 1006, 920, 814, 654, 564, 524, + 0 + }, + { + 16384, 11561, 8220, 7814, 7737, 4780, 2215, 1731, 1621, 1279, 830, 657, 599, 532, 424, 366, 339, + 0 + }, + { + 16384, 11649, 9374, 8867, 8724, 6398, 4154, 3470, 3253, 2718, 2010, 1695, 1570, 1412, 1172, 1042, 980, + 0 + }, + { + 16384, 13021,10503, 9726, 9443, 7520, 5271, 4369, 4016, 3495, 2741, 2365, 2181, 1990, 1719, 1561, 1478, + 0 + }, + { + 16384, 13815,11388,10605,10316, 8467, 6133, 5175, 4782, 4255, 3466, 3063, 2864, 2688, 2408, 2229, 2125, + 0 + }, + { + 16384, 16175,15807,15536,15338,15006,14402,13919,13549,13312,12871,12491,12182,12010,11681,11390,11143, + 0 + }, + { + 16384, 14310,12047,11336,11110, 9065, 6381, 5318, 4938, 4279, 3272, 2732, 2499, 2284, 1920, 1693, 1574, + 0 + }, + { + 16384, 14765,12824,12096,11834,10003, 7429, 6282, 5841, 5145, 4022, 3402, 3123, 2868, 2426, 2150, 2003, + 0 + }, + { + 16384, 16295,16127,15943,15802,15650,15360,15059,14816,14668,14401,14162,13954,13839,13634,13443,13275, + 0 + }, + { + 16384, 14182,12821,12340,12120,10698, 9040, 8284, 7908, 7378, 6549, 6053, 5772, 5520, 5080, 4785, 4597, + 0 + }, + { + 16384, 15164,13583,12892,12600,11161, 8997, 7888, 7386, 6744, 5673, 5015, 4673, 4391, 3898, 3555, 3349, + 0 + }, + { + 16384, 3758, 2571, 2481, 2467, 988, 478, 412, 397, 245, 154, 133, 127, 95, 69, 61, 58, + 0 + }, + { + 16384, 14805,13193,12553,12285,10706, 8596, 7623, 7178, 6542, 5563, 4996, 4703, 4426, 3967, 3662, 3482, + 0 + }, + { + 16384, 15787,14870,14320,14005,13147,11705,10747,10171, 9651, 8735, 8068, 7629, 7332, 6785, 6361, 6061, + 0 + }, + { + 16384, 7111, 4622, 4304, 4233, 2346, 1174, 938, 870, 659, 455, 389, 365, 316, 260, 236, 226, + 0 + }, + { + 16384, 7146, 4703, 4532, 4512, 2078, 740, 583, 556, 371, 201, 153, 141, 118, 87, 72, 66, + 0 + }, + { + 16384, 9593, 7184, 6853, 6790, 4144, 2206, 1832, 1745, 1320, 878, 741, 697, 599, 476, 424, 401, + 0 + }, + { + 16384, 9209, 5969, 5479, 5351, 3346, 1763, 1382, 1261, 1017, 733, 622, 578, 520, 446, 410, 392, + 0 + }, + { + 16384, 11324, 8681, 8252, 8159, 5450, 3114, 2606, 2473, 1987, 1412, 1211, 1142, 1017, 847, 765, 730, + 0 + }, + { + 16384, 12663,10073, 9527, 9392, 6827, 4204, 3489, 3286, 2713, 1966, 1666, 1554, 1400, 1172, 1051, 994, + 0 + }, + { + 16384, 10413, 7096, 6340, 6115, 4393, 2704, 2156, 1947, 1634, 1254, 1091, 1010, 925, 805, 742, 707, + 0 + }, + { + 16384, 13337,11073,10477,10306, 8045, 5534, 4705, 4438, 3804, 2942, 2530, 2360, 2164, 1850, 1668, 1574, + 0 + }, + { + 16384, 14323,12104,11391,11156, 9183, 6649, 5649, 5287, 4676, 3778, 3302, 3089, 2886, 2548, 2341, 2223, + 0 + }, + { + 16384, 11646, 8435, 7504, 7150, 5603, 3882, 3170, 2853, 2487, 2029, 1791, 1666, 1549, 1386, 1288, 1231, + 0 + }, + { + 16384, 13147,11339,10752,10524, 8775, 6682, 5776, 5398, 4813, 3908, 3406, 3154, 2933, 2554, 2310, 2176, + 0 + }, + { + 16384, 14551,12495,11707,11356, 9962, 8005, 7006, 6500, 6034, 5298, 4839, 4575, 4381, 4057, 3825, 3673, + 0 + }, + { + 16384, 12395, 9526, 9032, 8925, 6130, 3448, 2813, 2649, 2144, 1489, 1231, 1142, 1020, 836, 738, 694, + 0 + }, + { + 16384, 14921,13187,12475,12164,10758, 8775, 7752, 7257, 6727, 5864, 5306, 5004, 4777, 4393, 4119, 3942, + 0 + }, + { + 16384, 2151, 1301, 1276, 1274, 315, 84, 70, 68, 32, 14, 11, 10, 7, 4, 3, 2, + 0 + }, + { + 16384, 16383,16382,13774,13091,13090,13089,11287,10713, 7917, 6052, 5265, 4947, 4161, 3534, 3199, 3039, + 0 + }, + { + 16384, 14374,12331,11688,11474, 9505, 6993, 5998, 5634, 4991, 4008, 3498, 3265, 3036, 2658, 2417, 2285, + 0 + }, + { + 16384, 8798, 5867, 5626, 5593, 2841, 1038, 807, 765, 538, 302, 234, 215, 182, 139, 119, 111, + 0 + }, + { + 16384, 13325,10612,10015, 9860, 7343, 4583, 3802, 3571, 3023, 2269, 1945, 1817, 1670, 1440, 1309, 1243, + 0 + }, + { + 16384, 7741, 5790, 5571, 5528, 3110, 1698, 1464, 1409, 1034, 704, 613, 585, 487, 381, 342, 327, + 0 + }, + { + 16384, 9664, 7506, 7059, 6917, 4820, 3136, 2640, 2455, 2000, 1504, 1297, 1217, 1073, 896, 815, 777, + 0 + } +}; + +const int16_t NumRatioBits[2][17] = +{ + /* NB */ + { + 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 + }, + + /* WB */ + { + 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2 + } +}; + +const float Ratios_WB_2[32] = + /* 2 */ { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 60, 64, 72 }; + +const float Ratios_WB_3[32] = + /* 3 */ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 44, 48, 54, 60, 68, 78, 80 }; + +const float Ratios_WB_4[32] = + /* 4 */ { 1.5f, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 48, 52, 54, 68 }; + +const float Ratios_WB_5[32] = + /* 5 */ { 1, 1.5f, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 40, 44, 48, 54 }; + +const float Ratios_WB_6[32] = + /* 6 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 5.5f, 6, 6.5f, 7, 7.5f, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 34, 40, 41 }; + +const float Ratios_WB_7[32] = + /* 7 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22.5f, 24, 25, 27, 28, 30, 35 }; + +const float Ratios_WB_8[16] = + /* 8 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 5.5f, 6, 7, 8, 9, 10 }; + +const float Ratios_WB_9[16] = + /* 9 */ { 1, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 18, 27 }; + +const float Ratios_WB_10[16] = + /* 10 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 5, 6, 8, 10, 15, 18, 22, 24, 26 }; + +const float Ratios_WB_11[16] = + /* 11 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 5, 6, 8, 10, 12, 13, 14, 18, 21 }; + +const float Ratios_WB_12[16] = + /* 12 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 4, 5, 6, 8, 9, 11, 12, 13.5f, 16, 20 }; + +const float Ratios_WB_13[16] = + /* 13 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 4, 5, 6, 7, 8, 10, 11, 12, 14, 20 }; + +const float Ratios_WB_14[16] = + /* 14 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 4, 4.5f, 6, 7.5f, 9, 10, 12, 14, 15, 18 }; + +const float Ratios_WB_15[16] = + /* 15 */ { 0.5f, 1, 1.25f, 1.5f, 1.75f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 6, 8, 9, 14 }; + +const float Ratios_WB_16[4] = + /* 16 */ { 0.5f, 1, 2, 4 }; + +const float Ratios_WB_17[4] = + /* 17 */ { 1, 1.5f, 2, 4 }; + +const float Ratios_WB_18[4] = + /* 18 */ { 1, 2, 3, 4 }; + +const float Ratios_NB_2[32] = + /* 2 */ { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 36, 38, 40 }; + +const float Ratios_NB_3[16] = + /* 3 */ { 0.5f, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 20, 24, 30 }; + +const float Ratios_NB_4[16] = + /* 4 */ { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24, 30 }; + +const float Ratios_NB_5[16] = + /* 5 */ { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24, 30 }; + +const float Ratios_NB_6[16] = + /* 6 */ { 2, 2.5f, 3, 3.5f, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20 }; + +const float Ratios_NB_7[16] = + /* 7 */ { 1, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20 }; + +const float Ratios_NB_8[16] = + /* 8 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 6, 7, 8, 9, 10, 12, 16 }; + +const float Ratios_NB_9[8] = + /* 9 */ { 1, 2, 3, 4, 5, 6, 8, 10 }; + +const float Ratios_NB_10[8] = + /* 10 */ { 1, 2, 3, 4, 5, 6, 8, 10 }; + +const float Ratios_NB_11[8] = + /* 11 */ { 1, 1.5f, 2, 3, 4, 5, 6, 8 }; + +const float Ratios_NB_12[8] = + /* 12 */ { 1, 2, 2.5f, 3, 4, 5, 6, 8 }; + +const float Ratios_NB_13[4] = + /* 13 */ { 1, 2, 3, 4 }; + +const float Ratios_NB_14[4] = + /* 14 */ { 1, 2, 4, 6 }; + +const float Ratios_NB_15[4] = + /* 15 */ { 1, 2, 3, 4 }; + +const float Ratios_NB_16[4] = + /* 16 */ { 1, 1.5f, 2, 4 }; + +const float Ratios_NB_17[4] = + /* 17 */ { 1, 1.5f, 2, 3 }; + +const float Ratios_NB_18[4] = + /* 18 */ { 0.5f, 1, 2, 3 }; + +const float * const Ratios[2][17] = +{ + /* NB */ + { + Ratios_NB_2, + Ratios_NB_3, + Ratios_NB_4, + Ratios_NB_5, + Ratios_NB_6, + Ratios_NB_7, + Ratios_NB_8, + Ratios_NB_9, + Ratios_NB_10, + Ratios_NB_11, + Ratios_NB_12, + Ratios_NB_13, + Ratios_NB_14, + Ratios_NB_15, + Ratios_NB_16, + Ratios_NB_17, + Ratios_NB_18 + }, + + /* WB */ + { + Ratios_WB_2, + Ratios_WB_3, + Ratios_WB_4, + Ratios_WB_5, + Ratios_WB_6, + Ratios_WB_7, + Ratios_WB_8, + Ratios_WB_9, + Ratios_WB_10, + Ratios_WB_11, + Ratios_WB_12, + Ratios_WB_13, + Ratios_WB_14, + Ratios_WB_15, + Ratios_WB_16, + Ratios_WB_17, + Ratios_WB_18 + } +}; + +#define QGC(x) FL2WORD16_SCALE(x, 4) +const Word16 qGains[2][1 << kTcxHmNumGainBits] = +{ + /* GC */ { QGC(0.75f) }, + /* VC */ { QGC(0.6f), QGC(1.4f), QGC(4.5f), QGC(10.0f) } +}; + + +/*----------------------------------------------------------------------------------* + * TNS + *----------------------------------------------------------------------------------*/ + +const struct TnsParameters tnsParametersIGF32kHz_LowBR[1] = +{ + { 600, 3, 1.85f, 0.075f, 4.4f } +}; + +const struct TnsParameters tnsParameters32kHz[2] = +{ + { 4500, 3, 1.35f, 0.0300f, 1.0f }, + { 600, 1, 1.75f, 0.0625f, 4.4f } +}; + +const struct TnsParameters tnsParameters32kHz_grouped[2] = +{ + { 8400, 3, 1.375f, 0.03125f, 1.0f }, + { 800, 3, 1.375f, 0.03125f, 1.0f } +}; + +const struct TnsParameters tnsParameters16kHz[1] = +{ + { 600, 3, 1.5f, 0.05f, 4.4f } +}; + +const struct TnsParameters tnsParameters16kHz_grouped[2] = +{ + { 4400, 3, 1.5f, 0.05f, 1.0f }, + { 800, 3, 1.5f, 0.05f, 1.0f } +}; + +const struct TnsParameters tnsParameters48kHz_grouped[2] = +{ + { 10400, 3, 1.375f, 0.03125f, 1.0f }, + { 800, 3, 1.375f, 0.03125f, 1.0f } +}; + +const struct TnsParameters tnsParameters32kHz_Stereo[2]= +{ + { 4500, 3, 1.35f, 0.0300f, 1.0f }, + { 600, 3, 1.75f, 0.0625f, 4.4f } +}; + +const float tnsAcfWindow[TNS_MAX_FILTER_ORDER] = +{ + 0.997803f, 0.991211f, 0.980225f, 0.964844f, 0.945068f, 0.920898f, 0.892334f, 0.859375f +}; + + + +/* Definition of the mapping between TNS parameters and a bitstream */ +/* Helper structures for hufmann table coding */ + +const Coding codesTnsCoeff0TCX20[] = +{ + { -8+INDEX_SHIFT, 609, 11 }, /* 01001100001 */ + { -7+INDEX_SHIFT, 305, 10 }, /* 0100110001 */ + { -6+INDEX_SHIFT, 77, 8 }, /* 01001101 */ + { -5+INDEX_SHIFT, 39, 7 }, /* 0100111 */ + { -4+INDEX_SHIFT, 8, 5 }, /* 01000 */ + { -3+INDEX_SHIFT, 21, 5 }, /* 10101 */ + { -2+INDEX_SHIFT, 11, 4 }, /* 1011 */ + { -1+INDEX_SHIFT, 3, 3 }, /* 011 */ + { 0+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 1+INDEX_SHIFT, 0, 2 }, /* 00 */ + { 2+INDEX_SHIFT, 4, 3 }, /* 100 */ + { 3+INDEX_SHIFT, 5, 4 }, /* 0101 */ + { 4+INDEX_SHIFT, 20, 5 }, /* 10100 */ + { 5+INDEX_SHIFT, 18, 6 }, /* 010010 */ + { 6+INDEX_SHIFT, 153, 9 }, /* 010011001 */ + { 7+INDEX_SHIFT, 608, 11 } /* 01001100000 */ +}; + +const Coding codesTnsCoeff0TCX10[] = +{ + { -8+INDEX_SHIFT, 441, 9 }, /* 110111001 */ + { -7+INDEX_SHIFT, 111, 7 }, /* 1101111 */ + { -6+INDEX_SHIFT, 8, 4 }, /* 1000 */ + { -5+INDEX_SHIFT, 9, 4 }, /* 1001 */ + { -4+INDEX_SHIFT, 14, 4 }, /* 1110 */ + { -3+INDEX_SHIFT, 15, 4 }, /* 1111 */ + { -2+INDEX_SHIFT, 3, 3 }, /* 011 */ + { -1+INDEX_SHIFT, 5, 3 }, /* 101 */ + { 0+INDEX_SHIFT, 0, 2 }, /* 00 */ + { 1+INDEX_SHIFT, 2, 3 }, /* 010 */ + { 2+INDEX_SHIFT, 12, 4 }, /* 1100 */ + { 3+INDEX_SHIFT, 26, 5 }, /* 11010 */ + { 4+INDEX_SHIFT, 54, 6 }, /* 110110 */ + { 5+INDEX_SHIFT, 221, 8 }, /* 11011101 */ + { 6+INDEX_SHIFT, 881, 10 }, /* 1101110001 */ + { 7+INDEX_SHIFT, 880, 10 } /* 1101110000 */ +}; + +const Coding codesTnsCoeff1TCX20[] = +{ + { -8+INDEX_SHIFT, 30018, 15 }, /* 111010101000010 */ + { -7+INDEX_SHIFT, 30019, 15 }, /* 111010101000011 */ + { -6+INDEX_SHIFT, 7505, 13 }, /* 1110101010001 */ + { -5+INDEX_SHIFT, 3753, 12 }, /* 111010101001 */ + { -4+INDEX_SHIFT, 939, 10 }, /* 1110101011 */ + { -3+INDEX_SHIFT, 235, 8 }, /* 11101011 */ + { -2+INDEX_SHIFT, 28, 5 }, /* 11100 */ + { -1+INDEX_SHIFT, 6, 3 }, /* 110 */ + { 0+INDEX_SHIFT, 0, 1 }, /* 0 */ + { 1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 2+INDEX_SHIFT, 15, 4 }, /* 1111 */ + { 3+INDEX_SHIFT, 59, 6 }, /* 111011 */ + { 4+INDEX_SHIFT, 116, 7 }, /* 1110100 */ + { 5+INDEX_SHIFT, 468, 9 }, /* 111010100 */ + { 6+INDEX_SHIFT, 1877, 11 }, /* 11101010101 */ + { 7+INDEX_SHIFT, 15008, 14 } /* 11101010100000 */ +}; + +const Coding codesTnsCoeff1TCX10[] = +{ + { -8+INDEX_SHIFT, 2818, 12 }, /* 101100000010 */ + { -7+INDEX_SHIFT, 2819, 12 }, /* 101100000011 */ + { -6+INDEX_SHIFT, 705, 10 }, /* 1011000001 */ + { -5+INDEX_SHIFT, 353, 9 }, /* 101100001 */ + { -4+INDEX_SHIFT, 177, 8 }, /* 10110001 */ + { -3+INDEX_SHIFT, 45, 6 }, /* 101101 */ + { -2+INDEX_SHIFT, 10, 4 }, /* 1010 */ + { -1+INDEX_SHIFT, 3, 3 }, /* 011 */ + { 0+INDEX_SHIFT, 6, 3 }, /* 110 */ + { 1+INDEX_SHIFT, 0, 2 }, /* 00 */ + { 2+INDEX_SHIFT, 7, 3 }, /* 111 */ + { 3+INDEX_SHIFT, 4, 3 }, /* 100 */ + { 4+INDEX_SHIFT, 2, 3 }, /* 010 */ + { 5+INDEX_SHIFT, 23, 5 }, /* 10111 */ + { 6+INDEX_SHIFT, 89, 7 }, /* 1011001 */ + { 7+INDEX_SHIFT, 1408, 11 } /* 10110000000 */ +}; + +const Coding codesTnsCoeff2TCX20[] = +{ + { -8+INDEX_SHIFT, 13312, 14 }, /* 11010000000000 */ + { -7+INDEX_SHIFT, 13313, 14 }, /* 11010000000001 */ + { -6+INDEX_SHIFT, 3329, 12 }, /* 110100000001 */ + { -5+INDEX_SHIFT, 833, 10 }, /* 1101000001 */ + { -4+INDEX_SHIFT, 209, 8 }, /* 11010001 */ + { -3+INDEX_SHIFT, 53, 6 }, /* 110101 */ + { -2+INDEX_SHIFT, 12, 4 }, /* 1100 */ + { -1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 0+INDEX_SHIFT, 0, 1 }, /* 0 */ + { 1+INDEX_SHIFT, 7, 3 }, /* 111 */ + { 2+INDEX_SHIFT, 27, 5 }, /* 11011 */ + { 3+INDEX_SHIFT, 105, 7 }, /* 1101001 */ + { 4+INDEX_SHIFT, 417, 9 }, /* 110100001 */ + { 5+INDEX_SHIFT, 1665, 11 }, /* 11010000001 */ + { 6+INDEX_SHIFT, 13314, 14 }, /* 11010000000010 */ + { 7+INDEX_SHIFT, 13315, 14 } /* 11010000000011 */ +}; + +const Coding codesTnsCoeff2TCX10[] = +{ + { -8+INDEX_SHIFT, 512, 12 }, /* 001000000000 */ + { -7+INDEX_SHIFT, 513, 12 }, /* 001000000001 */ + { -6+INDEX_SHIFT, 65, 9 }, /* 001000001 */ + { -5+INDEX_SHIFT, 17, 7 }, /* 0010001 */ + { -4+INDEX_SHIFT, 5, 5 }, /* 00101 */ + { -3+INDEX_SHIFT, 0, 3 }, /* 000 */ + { -2+INDEX_SHIFT, 6, 3 }, /* 110 */ + { -1+INDEX_SHIFT, 1, 2 }, /* 01 */ + { 0+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 1+INDEX_SHIFT, 7, 3 }, /* 111 */ + { 2+INDEX_SHIFT, 3, 4 }, /* 0011 */ + { 3+INDEX_SHIFT, 9, 6 }, /* 001001 */ + { 4+INDEX_SHIFT, 33, 8 }, /* 00100001 */ + { 5+INDEX_SHIFT, 129, 10 }, /* 0010000001 */ + { 6+INDEX_SHIFT, 514, 12 }, /* 001000000010 */ + { 7+INDEX_SHIFT, 515, 12 } /* 001000000011 */ +}; + +const Coding codesTnsCoeff3TCX20[] = +{ + { -8+INDEX_SHIFT, 13318, 14 }, /* 11010000000110 */ + { -7+INDEX_SHIFT, 13319, 14 }, /* 11010000000111 */ + { -6+INDEX_SHIFT, 6656, 13 }, /* 1101000000000 */ + { -5+INDEX_SHIFT, 1665, 11 }, /* 11010000001 */ + { -4+INDEX_SHIFT, 417, 9 }, /* 110100001 */ + { -3+INDEX_SHIFT, 105, 7 }, /* 1101001 */ + { -2+INDEX_SHIFT, 27, 5 }, /* 11011 */ + { -1+INDEX_SHIFT, 7, 3 }, /* 111 */ + { 0+INDEX_SHIFT, 0, 1 }, /* 0 */ + { 1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 2+INDEX_SHIFT, 12, 4 }, /* 1100 */ + { 3+INDEX_SHIFT, 53, 6 }, /* 110101 */ + { 4+INDEX_SHIFT, 209, 8 }, /* 11010001 */ + { 5+INDEX_SHIFT, 833, 10 }, /* 1101000001 */ + { 6+INDEX_SHIFT, 6657, 13 }, /* 1101000000001 */ + { 7+INDEX_SHIFT, 6658, 13 } /* 1101000000010 */ +}; + +const Coding codesTnsCoeff3TCX10[] = +{ + { -8+INDEX_SHIFT, 1284, 12 }, /* 010100000100 */ + { -7+INDEX_SHIFT, 1285, 12 }, /* 010100000101 */ + { -6+INDEX_SHIFT, 1286, 12 }, /* 010100000110 */ + { -5+INDEX_SHIFT, 1287, 12 }, /* 010100000111 */ + { -4+INDEX_SHIFT, 161, 9 }, /* 010100001 */ + { -3+INDEX_SHIFT, 41, 7 }, /* 0101001 */ + { -2+INDEX_SHIFT, 11, 5 }, /* 01011 */ + { -1+INDEX_SHIFT, 0, 2 }, /* 00 */ + { 0+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 1+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 2+INDEX_SHIFT, 3, 3 }, /* 011 */ + { 3+INDEX_SHIFT, 4, 4 }, /* 0100 */ + { 4+INDEX_SHIFT, 21, 6 }, /* 010101 */ + { 5+INDEX_SHIFT, 81, 8 }, /* 01010001 */ + { 6+INDEX_SHIFT, 640, 11 }, /* 01010000000 */ + { 7+INDEX_SHIFT, 641, 11 } /* 01010000001 */ +}; + +const Coding codesTnsCoeff4TCX20[] = +{ + { -8+INDEX_SHIFT, 13318, 14 }, /* 11010000000110 */ + { -7+INDEX_SHIFT, 13319, 14 }, /* 11010000000111 */ + { -6+INDEX_SHIFT, 6656, 13 }, /* 1101000000000 */ + { -5+INDEX_SHIFT, 833, 10 }, /* 1101000001 */ + { -4+INDEX_SHIFT, 209, 8 }, /* 11010001 */ + { -3+INDEX_SHIFT, 53, 6 }, /* 110101 */ + { -2+INDEX_SHIFT, 12, 4 }, /* 1100 */ + { -1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 0+INDEX_SHIFT, 0, 1 }, /* 0 */ + { 1+INDEX_SHIFT, 7, 3 }, /* 111 */ + { 2+INDEX_SHIFT, 27, 5 }, /* 11011 */ + { 3+INDEX_SHIFT, 105, 7 }, /* 1101001 */ + { 4+INDEX_SHIFT, 417, 9 }, /* 110100001 */ + { 5+INDEX_SHIFT, 1665, 11 }, /* 11010000001 */ + { 6+INDEX_SHIFT, 6657, 13 }, /* 1101000000001 */ + { 7+INDEX_SHIFT, 6658, 13 } /* 1101000000010 */ +}; + +const Coding codesTnsCoeff4TCX10[] = +{ + { -8+INDEX_SHIFT, 20, 12 }, /* 000000010100 */ + { -7+INDEX_SHIFT, 21, 12 }, /* 000000010101 */ + { -6+INDEX_SHIFT, 22, 12 }, /* 000000010110 */ + { -5+INDEX_SHIFT, 3, 9 }, /* 000000011 */ + { -4+INDEX_SHIFT, 1, 7 }, /* 0000001 */ + { -3+INDEX_SHIFT, 1, 5 }, /* 00001 */ + { -2+INDEX_SHIFT, 1, 3 }, /* 001 */ + { -1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 0+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 1+INDEX_SHIFT, 1, 2 }, /* 01 */ + { 2+INDEX_SHIFT, 1, 4 }, /* 0001 */ + { 3+INDEX_SHIFT, 1, 6 }, /* 000001 */ + { 4+INDEX_SHIFT, 0, 8 }, /* 00000000 */ + { 5+INDEX_SHIFT, 23, 12 }, /* 000000010111 */ + { 6+INDEX_SHIFT, 8, 11 }, /* 00000001000 */ + { 7+INDEX_SHIFT, 9, 11 } /* 00000001001 */ +}; + +const Coding codesTnsCoeff5[] = +{ + { -8+INDEX_SHIFT, 6788, 13 }, /* 1101010000100 */ + { -7+INDEX_SHIFT, 6789, 13 }, /* 1101010000101 */ + { -6+INDEX_SHIFT, 6790, 13 }, /* 1101010000110 */ + { -5+INDEX_SHIFT, 849, 10 }, /* 1101010001 */ + { -4+INDEX_SHIFT, 213, 8 }, /* 11010101 */ + { -3+INDEX_SHIFT, 107, 7 }, /* 1101011 */ + { -2+INDEX_SHIFT, 27, 5 }, /* 11011 */ + { -1+INDEX_SHIFT, 7, 3 }, /* 111 */ + { 0+INDEX_SHIFT, 0, 1 }, /* 0 */ + { 1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 2+INDEX_SHIFT, 12, 4 }, /* 1100 */ + { 3+INDEX_SHIFT, 52, 6 }, /* 110100 */ + { 4+INDEX_SHIFT, 425, 9 }, /* 110101001 */ + { 5+INDEX_SHIFT, 6791, 13 }, /* 1101010000111 */ + { 6+INDEX_SHIFT, 3392, 12 }, /* 110101000000 */ + { 7+INDEX_SHIFT, 3393, 12 } /* 110101000001 */ +}; + +const Coding codesTnsCoeff6[] = +{ + { -8+INDEX_SHIFT, 4, 12 }, /* 000000000100 */ + { -7+INDEX_SHIFT, 5, 12 }, /* 000000000101 */ + { -6+INDEX_SHIFT, 6, 12 }, /* 000000000110 */ + { -5+INDEX_SHIFT, 1, 9 }, /* 000000001 */ + { -4+INDEX_SHIFT, 1, 7 }, /* 0000001 */ + { -3+INDEX_SHIFT, 1, 5 }, /* 00001 */ + { -2+INDEX_SHIFT, 1, 3 }, /* 001 */ + { -1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 0+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 1+INDEX_SHIFT, 1, 2 }, /* 01 */ + { 2+INDEX_SHIFT, 1, 4 }, /* 0001 */ + { 3+INDEX_SHIFT, 1, 6 }, /* 000001 */ + { 4+INDEX_SHIFT, 1, 8 }, /* 00000001 */ + { 5+INDEX_SHIFT, 7, 12 }, /* 000000000111 */ + { 6+INDEX_SHIFT, 0, 11 }, /* 00000000000 */ + { 7+INDEX_SHIFT, 1, 11 } /* 00000000001 */ +}; + +const Coding codesTnsCoeff7[] = +{ + { -8+INDEX_SHIFT, 14, 11 }, /* 00000001110 */ + { -7+INDEX_SHIFT, 15, 11 }, /* 00000001111 */ + { -6+INDEX_SHIFT, 0, 10 }, /* 0000000000 */ + { -5+INDEX_SHIFT, 1, 10 }, /* 0000000001 */ + { -4+INDEX_SHIFT, 1, 7 }, /* 0000001 */ + { -3+INDEX_SHIFT, 1, 5 }, /* 00001 */ + { -2+INDEX_SHIFT, 1, 4 }, /* 0001 */ + { -1+INDEX_SHIFT, 1, 2 }, /* 01 */ + { 0+INDEX_SHIFT, 2, 10 }, /* 0000000010 */ + { 1+INDEX_SHIFT, 1, 1 }, /* 1 */ + { 2+INDEX_SHIFT, 1, 3 }, /* 001 */ + { 3+INDEX_SHIFT, 1, 6 }, /* 000001 */ + { 4+INDEX_SHIFT, 3, 10 }, /* 0000000011 */ + { 5+INDEX_SHIFT, 4, 10 }, /* 0000000100 */ + { 6+INDEX_SHIFT, 5, 10 }, /* 0000000101 */ + { 7+INDEX_SHIFT, 6, 10 } /* 0000000110 */ +}; + +const Coding codesTnsCoeff456[] = +{ + { -8+INDEX_SHIFT, 516, 12 }, /* 001000000100 */ + { -7+INDEX_SHIFT, 517, 12 }, /* 001000000101 */ + { -6+INDEX_SHIFT, 518, 12 }, /* 001000000110 */ + { -5+INDEX_SHIFT, 65, 9 }, /* 001000001 */ + { -4+INDEX_SHIFT, 17, 7 }, /* 0010001 */ + { -3+INDEX_SHIFT, 5, 5 }, /* 00101 */ + { -2+INDEX_SHIFT, 3, 4 }, /* 0011 */ + { -1+INDEX_SHIFT, 1, 2 }, /* 01 */ + { 0+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 2+INDEX_SHIFT, 0, 3 }, /* 000 */ + { 3+INDEX_SHIFT, 9, 6 }, /* 001001 */ + { 4+INDEX_SHIFT, 33, 8 }, /* 00100001 */ + { 5+INDEX_SHIFT, 519, 12 }, /* 001000000111 */ + { 6+INDEX_SHIFT, 256, 11 }, /* 00100000000 */ + { 7+INDEX_SHIFT, 257, 11 } /* 00100000001 */ +}; + +const Coding codesTnsCoeff0WBTCX20[] = +{ + { -8+INDEX_SHIFT, 225, 10 }, /* 0011100001 */ + { -7+INDEX_SHIFT, 113, 9 }, /* 001110001 */ + { -6+INDEX_SHIFT, 29, 7 }, /* 0011101 */ + { -5+INDEX_SHIFT, 15, 6 }, /* 001111 */ + { -4+INDEX_SHIFT, 2, 4 }, /* 0010 */ + { -3+INDEX_SHIFT, 0, 3 }, /* 000 */ + { -2+INDEX_SHIFT, 13, 4 }, /* 1101 */ + { -1+INDEX_SHIFT, 2, 3 }, /* 010 */ + { 0+INDEX_SHIFT, 5, 3 }, /* 101 */ + { 1+INDEX_SHIFT, 3, 3 }, /* 011 */ + { 2+INDEX_SHIFT, 4, 3 }, /* 100 */ + { 3+INDEX_SHIFT, 7, 3 }, /* 111 */ + { 4+INDEX_SHIFT, 12, 4 }, /* 1100 */ + { 5+INDEX_SHIFT, 6, 5 }, /* 00110 */ + { 6+INDEX_SHIFT, 57, 8 }, /* 00111001 */ + { 7+INDEX_SHIFT, 224, 10 } /* 0011100000 */ +}; + + +const Coding codesTnsCoeff1WBTCX20[] = +{ + { -8+INDEX_SHIFT, 512, 12 }, /* 001000000000 */ + { -7+INDEX_SHIFT, 513, 12 }, /* 001000000001 */ + { -6+INDEX_SHIFT, 514, 12 }, /* 001000000010 */ + { -5+INDEX_SHIFT, 65, 9 }, /* 001000001 */ + { -4+INDEX_SHIFT, 17, 7 }, /* 0010001 */ + { -3+INDEX_SHIFT, 5, 5 }, /* 00101 */ + { -2+INDEX_SHIFT, 0, 3 }, /* 000 */ + { -1+INDEX_SHIFT, 2, 3 }, /* 010 */ + { 0+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 1+INDEX_SHIFT, 2, 2 }, /* 10 */ + { 2+INDEX_SHIFT, 3, 3 }, /* 011 */ + { 3+INDEX_SHIFT, 3, 4 }, /* 0011 */ + { 4+INDEX_SHIFT, 9, 6 }, /* 001001 */ + { 5+INDEX_SHIFT, 33, 8 }, /* 00100001 */ + { 6+INDEX_SHIFT, 129, 10 }, /* 0010000001 */ + { 7+INDEX_SHIFT, 515, 12 } /* 001000000011 */ +}; + + +const Coding codesTnsCoeff2WB[] = +{ + { -8+INDEX_SHIFT, 5632, 13 }, /* 1011000000000 */ + { -7+INDEX_SHIFT, 5633, 13 }, /* 1011000000001 */ + { -6+INDEX_SHIFT, 1409, 11 }, /* 10110000001 */ + { -5+INDEX_SHIFT, 353, 9 }, /* 101100001 */ + { -4+INDEX_SHIFT, 89, 7 }, /* 1011001 */ + { -3+INDEX_SHIFT, 23, 5 }, /* 10111 */ + { -2+INDEX_SHIFT, 4, 3 }, /* 100 */ + { -1+INDEX_SHIFT, 0, 2 }, /* 00 */ + { 0+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 1+INDEX_SHIFT, 1, 2 }, /* 01 */ + { 2+INDEX_SHIFT, 10, 4 }, /* 1010 */ + { 3+INDEX_SHIFT, 45, 6 }, /* 101101 */ + { 4+INDEX_SHIFT, 177, 8 }, /* 10110001 */ + { 5+INDEX_SHIFT, 705, 10 }, /* 1011000001 */ + { 6+INDEX_SHIFT, 5634, 13 }, /* 1011000000010 */ + { 7+INDEX_SHIFT, 5635, 13 } /* 1011000000011 */ +}; + +const Coding codesTnsCoeff3WB[] = +{ + { -8+INDEX_SHIFT, 5638, 13 }, /* 1011000000110 */ + { -7+INDEX_SHIFT, 5639, 13 }, /* 1011000000111 */ + { -6+INDEX_SHIFT, 2816, 12 }, /* 101100000000 */ + { -5+INDEX_SHIFT, 353, 9 }, /* 101100001 */ + { -4+INDEX_SHIFT, 177, 8 }, /* 10110001 */ + { -3+INDEX_SHIFT, 45, 6 }, /* 101101 */ + { -2+INDEX_SHIFT, 10, 4 }, /* 1010 */ + { -1+INDEX_SHIFT, 0, 2 }, /* 00 */ + { 0+INDEX_SHIFT, 3, 2 }, /* 11 */ + { 1+INDEX_SHIFT, 1, 2 }, /* 01 */ + { 2+INDEX_SHIFT, 4, 3 }, /* 100 */ + { 3+INDEX_SHIFT, 23, 5 }, /* 10111 */ + { 4+INDEX_SHIFT, 89, 7 }, /* 1011001 */ + { 5+INDEX_SHIFT, 705, 10 }, /* 1011000001 */ + { 6+INDEX_SHIFT, 2817, 12 }, /* 101100000001 */ + { 7+INDEX_SHIFT, 2818, 12 } /* 101100000010 */ +}; + +const int16_t nTnsCoeffCodes = sizeof(codesTnsCoeff0TCX20)/sizeof(codesTnsCoeff0TCX20[0]); + +const Coding * const codesTnsCoeffSWBTCX20[] = { codesTnsCoeff0TCX20, codesTnsCoeff1TCX20, codesTnsCoeff2TCX20, codesTnsCoeff3TCX20, codesTnsCoeff4TCX20, codesTnsCoeff5, codesTnsCoeff6, codesTnsCoeff7 }; +const Coding * const codesTnsCoeffSWBTCX10[] = { codesTnsCoeff0TCX10, codesTnsCoeff1TCX10, codesTnsCoeff2TCX10, codesTnsCoeff3TCX10, codesTnsCoeff4TCX10, codesTnsCoeff5, codesTnsCoeff6, codesTnsCoeff7 }; +const Coding * const codesTnsCoeffWBTCX20[] = { codesTnsCoeff0WBTCX20, codesTnsCoeff1WBTCX20, codesTnsCoeff2WB, codesTnsCoeff3WB, codesTnsCoeff456, codesTnsCoeff456, codesTnsCoeff456, codesTnsCoeff7 }; + +const int16_t nTnsCoeffTables = sizeof(codesTnsCoeffSWBTCX20)/sizeof(codesTnsCoeffSWBTCX20[0]); + +const Coding codesTnsOrderTCX20[] = +{ + { 1, 0, 2 }, /* 00 */ + { 2, 40, 6 }, /* 101000 */ + { 3, 41, 6 }, /* 101001 */ + { 4, 21, 5 }, /* 10101 */ + { 5, 11, 4 }, /* 1011 */ + { 6, 4, 3 }, /* 100 */ + { 7, 1, 2 }, /* 01 */ + { 8, 3, 2 } /* 11 */ +}; +const Coding codesTnsOrderTCX10[] = +{ + { 1, 0, 3 }, /* 000 */ + { 2, 16, 5 }, /* 10000 */ + { 3, 17, 5 }, /* 10001 */ + { 4, 9, 4 }, /* 1001 */ + { 5, 1, 3 }, /* 001 */ + { 6, 5, 3 }, /* 101 */ + { 7, 1, 2 }, /* 01 */ + { 8, 3, 2 } /* 11 */ +}; +const Coding codesTnsOrder[] = +{ + { 1, 96, 7 }, /* 1100000 */ + { 2, 97, 7 }, /* 1100001 */ + { 3, 49, 6 }, /* 110001 */ + { 4, 25, 5 }, /* 11001 */ + { 5, 13, 4 }, /* 1101 */ + { 6, 7, 3 }, /* 111 */ + { 7, 2, 2 }, /* 10 */ + { 8, 0, 1 } /* 0 */ +}; + +const int16_t nTnsOrderCodes = sizeof(codesTnsOrder)/sizeof(codesTnsOrder[0]); + +const ParamsBitMap tnsSWBTCX20FilterCoeffBitMap = +{ + 1, + { + { 0, GetSWBTCX20TnsFilterCoeffBits, TRUE, GetTnsFilterCoeff, SetTnsFilterCoeff, EncodeSWBTCX20TnsFilterCoeff, DecodeSWBTCX20TnsFilterCoeff, NULL } /* TNS filter coefficients */ + } +}; + +const ParamsBitMap tnsSWBTCX10FilterCoeffBitMap = +{ + 1, + { + { 0, GetSWBTCX10TnsFilterCoeffBits, TRUE, GetTnsFilterCoeff, SetTnsFilterCoeff, EncodeSWBTCX10TnsFilterCoeff, DecodeSWBTCX10TnsFilterCoeff, NULL } /* TNS filter coefficients */ + } +}; + +const ParamsBitMap tnsSWBTCX20FilterBitMap = +{ + 1, + { + { 0, GetTnsFilterOrderBitsSWBTCX20, FALSE, GetTnsFilterOrder, SetTnsFilterOrder, EncodeTnsFilterOrderSWBTCX20, DecodeTnsFilterOrderSWBTCX20, &tnsSWBTCX20FilterCoeffBitMap } /* TNS filter order */ + } +}; + +const ParamsBitMap tnsSWBTCX10FilterBitMap = +{ + 1, + { + { 0, GetTnsFilterOrderBitsSWBTCX10, FALSE, GetTnsFilterOrder, SetTnsFilterOrder, EncodeTnsFilterOrderSWBTCX10, DecodeTnsFilterOrderSWBTCX10, &tnsSWBTCX10FilterCoeffBitMap } /* TNS filter order */ + } +}; + +const ParamsBitMap tnsSWBTCX20BitMap = +{ + 1, + { + { 1, NULL, FALSE, GetNumOfTnsFilters, SetNumOfTnsFilters, NULL, NULL, &tnsSWBTCX20FilterBitMap } /* Number of TNS filters */ + } +}; + +/* For storing/reading bits in SWB/FB mode */ +const ParamsBitMap tnsEnabledSWBTCX20BitMap = +{ + 1, + { + { 1, NULL, TRUE, GetTnsEnabled, SetTnsEnabled, NULL, NULL, &tnsSWBTCX20BitMap } /* TNS Enabled/Disable */ + } +}; + +const ParamsBitMap tnsSWBTCX10BitMap = +{ + 1, + { + { 1, NULL, FALSE, GetNumOfTnsFilters, SetNumOfTnsFilters, NULL, NULL, &tnsSWBTCX10FilterBitMap } /* Number of TNS filters */ + } +}; + +/* For storing/reading bits in SWB/FB mode */ +const ParamsBitMap tnsEnabledSWBTCX10BitMap = +{ + 1, + { + { 1, NULL, TRUE, GetTnsEnabled, SetTnsEnabled, NULL, NULL, &tnsSWBTCX10BitMap } /* TNS Enabled/Disable */ + } +}; + +const ParamsBitMap tnsWBTCX20FilterCoeffBitMap = +{ + 1, + { + { 0, GetWBTCX20TnsFilterCoeffBits, TRUE, GetTnsFilterCoeff, SetTnsFilterCoeff, EncodeWBTCX20TnsFilterCoeff, DecodeWBTCX20TnsFilterCoeff, NULL } /* TNS filter coefficients */ + } +}; + + +const ParamsBitMap tnsWBTCX20FilterBitMap = +{ + 1, + { + { 0, GetTnsFilterOrderBits, FALSE, GetTnsFilterOrder, SetTnsFilterOrder, EncodeTnsFilterOrder, DecodeTnsFilterOrder, &tnsWBTCX20FilterCoeffBitMap } /* TNS filter order */ + } +}; + + +/* For storing/reading bits in WB mode */ +const ParamsBitMap tnsEnabledWBTCX20BitMap = +{ + 1, + { + { 1, NULL, TRUE, GetTnsEnabledSingleFilter, SetTnsEnabledSingleFilter, NULL, NULL, &tnsWBTCX20FilterBitMap } /* TNS Enabled/Disable */ + } +}; + +/* For storing/reading bits in SWB/FB mode */ +const ParamsBitMap tnsOnWhiteSWBTCX20BitMap = +{ + 2, + { + { 1, NULL, TRUE, GetTnsOnWhite, SetTnsOnWhite, NULL, NULL, NULL }, /* TNS Enabled/Disable */ + { 1, NULL, FALSE, GetNumOfTnsFilters, SetNumOfTnsFilters, NULL, NULL, &tnsSWBTCX20FilterBitMap } + } +}; + +const ParamsBitMap tnsEnabledOnWhiteSWBTCX20BitMap = +{ + 1, + { + { 1, NULL, TRUE, GetTnsEnabled, SetTnsEnabled, NULL, NULL, &tnsOnWhiteSWBTCX20BitMap } /* TNS Enabled/Disable */ + } +}; +/* For storing/reading bits in SWB/FB mode */ +const ParamsBitMap tnsOnWhiteSWBTCX10BitMap = +{ + 2, + { + { 1, NULL, TRUE, GetTnsOnWhite, SetTnsOnWhite, NULL, NULL, NULL }, /* TNS on whitened spectra */ + { 1, NULL, FALSE, GetNumOfTnsFilters, SetNumOfTnsFilters, NULL, NULL, &tnsSWBTCX10FilterBitMap } + } +}; + +/* For storing/reading bits in SWB/FB mode */ +const ParamsBitMap tnsEnabledOnWhiteSWBTCX10BitMap = +{ + 1, + { + { 1, NULL, TRUE, GetTnsEnabled, SetTnsEnabled, NULL, NULL, &tnsOnWhiteSWBTCX10BitMap } /* TNS Enabled/Disable */ + } +}; + + +/** + * 4 bit resolution TNS coefficients. + */ +const float tnsCoeff4[16]= +{ + -0.99573418F, /* = sin(-8*(EVS_PI/2.0)/(8 + 0.5)) */ + -0.96182564F, /* = sin(-7*(EVS_PI/2.0)/(8 + 0.5)) */ + -0.89516329F, + -0.79801723F, + -0.67369564F, + -0.52643216F, + -0.36124167F, + -0.18374952F, /* = sin(-1*(EVS_PI/2.0)/(8 + 0.5)) */ + 0.00000000F, /* = sin(0*(EVS_PI/2.0)/(8 + 0.5)) */ + 0.20791169F, /* = sin(1*(EVS_PI/2.0)/(8 - 0.5)) */ + 0.40673664F, + 0.58778525F, + 0.74314483F, + 0.86602540F, + 0.95105652F, /* = sin(6*(EVS_PI/2.0)/(8 - 0.5)) */ + 0.99452190F /* = sin(7*(EVS_PI/2.0)/(8 - 0.5)) */ +}; + + +/*----------------------------------------------------------------------------------* + * IGF settings for each bitrate + *----------------------------------------------------------------------------------*/ + +const int16_t swb_offset_LB_new[IGF_BITRATE_UNKNOWN][IGF_MAX_SFB] = +{ + /* 0: for 9600 kbs WB */ + { + 4, 164, 186, 242, 320 + }, + /* 1: for 13200 kbs WB RF */ + { + 4, 164, 186, 242, 320 + }, + /* 2: for 9600 kbs SWB */ + { + 4, 200, 322, 444, 566 + }, + /* 3: for 13200 kbs SWB */ + { + 7, 256, 288, 328, 376, 432, 496, 566 + }, + /* 4: for 13200 kbs SWB RF */ + { + 4, 200, 322, 444, 566 + }, + /* 5: for 16400 kbs SWB */ + { + 8, 256, 288, 328, 376, 432, 496, 576, 640 + }, + /* 6: for 24400 kbs SWB */ + { + 9, 256, 284, 318, 358, 402, 450, 508, 576, 640 + }, + /* 7: for 32000 kbs SWB */ + { + 9, 256, 284, 318, 358, 402, 450, 508, 576, 640 + }, + /* 8: for 48000 kbs SWB */ + { + 4, 512, 534, 576, 640 + }, + /* 9: for 64000 kbs SWB */ + { + 4, 512, 534, 576, 640 + }, + /* 10: for 16400 kbs FB */ + { + 10, 256, 288, 328, 376, 432, 496, 576, 640, 720, 800 + }, + /* 11: for 24400 kbs FB */ + { + 11, 256, 284, 318, 358, 402, 450, 508, 576, 640, 720, 800 + }, + /* 12: for 32000 kbs FB */ + { + 11, 256, 284, 318, 358, 402, 450, 508, 576, 640, 720, 800 + }, + /* 13: for 48000 kbs FB */ + { + 5, 512, 584, 656, 728, 800 + }, + /* 14: for 64000 kbs FB */ + { + 5, 512, 584, 656, 728, 800 + }, + /* 15: for 96000 kbs FB */ + { + 3, 640, 720, 800 /* old: 640, 760, 880 */ + }, + /* 16: for 128000 kbs FB */ + { + 3, 640, 720, 800 /* old: 640, 760, 880 */ + }, + /* 17: for 13200 kbs WB (stereo) */ + { + 3, 196, 248, 320 + }, + /* 18: for 16400 kbs WB (stereo) */ + { + 3, 228, 268, 320 + }, + /* 19: for 13200 kbs SWB (stereo) */ + { + 5, 200, 264, 344, 440, 566 + }, + /* 20: for 16400 kbs SWB (stereo) */ + { + 7, 228, 264, 308, 360, 420, 488, 566 + }, + /* 21: for 24400 kbs SWB (stereo) */ + { + 8, 256, 288, 328, 376, 432, 496, 576, 640 + }, + /* 22: for 32000 kbs SWB (stereo) */ + { + 9, 256, 284, 320, 360, 404, 452, 508, 576, 640 + }, + /* 23: for 48000 kbs SWB (stereo) */ + { + 7, 360, 392, 424, 464, 508, 560, 640 + }, + /* 24: for 48000 kbs SWB (stereo TCX10) */ + { + 4, 360, 424, 508, 640 + }, + /* 25: for 64000 kbs SWB (stereo) */ + { + 8, 400, 424, 448, 476, 508, 540, 576, 640 + }, + /* 26: for 80000 kbs SWB (stereo) */ + { + 5, 464, 496, 532, 576, 640 + }, + /* 27: for 96000 kbs SWB (stereo) */ + { + 4, 512, 536, 576, 640 + }, + /* 28: for 24400 kbs FB (stereo) */ + { + 10, 256, 288, 328, 376, 432, 496, 576, 640, 720, 800 + }, + /* 29: for 32000 kbs FB (stereo) */ + { + 11, 256, 284, 320, 360, 404, 452, 508, 576, 640, 720, 800 + }, + /* 30: for 48000 kbs FB (stereo) */ + { + 9, 360, 392, 424, 464, 508, 560, 640, 720, 800 + }, + /* 31: for 48000 kbs FB (stereo TCX10) */ + { + 5, 360, 424, 508, 640, 800 + }, + /* 32: for 64000 kbs FB (stereo) */ + { + 10, 400, 424, 448, 476, 508, 540, 576, 640, 720, 800 + }, + /* 33: for 80000 kbs FB (stereo) */ + { + 7, 464, 496, 532, 576, 640, 720, 800 + }, + /* 34: for 96000 kbs FB (stereo) */ + { + 6, 512, 536, 576, 640, 720, 800 + }, + /* 35: for 128000 kbs FB (stereo) */ + { + 3, 640, 720, 800 + } +}; + +const int16_t igf_tile_offset_table[IGF_BITRATE_UNKNOWN][2*IGF_MAX_TILES+1] = { + { 2, 2, 0, 3, 0}, /* 9600 WB*/ + { 2, 2, 0, 3, 0}, /* 13200 WB RF */ + { 3, 1, 0, 2, 32, 3, 46}, /* 9600 SWB */ + { 2, 4, 0, 6, 32}, /* 13200 SWB RF */ + { 3, 1, 0, 2, 32, 3, 46}, /* 13200 SWB */ + { 3, 4, 0, 6, 48, 7, 64}, /* 16400 SWB */ + { 3, 4, 0, 7, 32, 8, 64}, /* 24400 SWB */ + { 3, 4, 0, 7, 32, 8, 64}, /* 32000 SWB */ + { 1, 3, 320}, /* 48000 SWB */ + { 1, 3, 320}, /* 64000 SWB */ + { 3, 4, 0, 7, 0, 9, 0}, /* 16400 FB */ + { 4, 4, 0, 6, 32, 9, 0, 10, 80}, /* 24400 FB */ + { 4, 4, 0, 6, 32, 9, 0, 10, 80}, /* 32000 FB */ + { 1, 4, 160}, /* 48000 FB */ + { 1, 4, 160}, /* 64000 FB */ + { 1, 2, 416}, /* 96000 FB */ + { 1, 2, 416}, /*128000 FB */ + { 2, 1, 40, 2, 92}, /* 13200 WB (stereo) */ + { 2, 1, 80, 2, 120}, /* 16400 WB (stereo) */ + { 4, 1, 0, 2, 32, 3, 46, 4, 40}, /* 13200 SWB (stereo) */ + { 6, 1, 0, 2, 36, 3, 80, 4, 132, 5, 32, 6, 100 }, /* 16400 SWB (stereo) */ + { 7, 1, 0, 2, 32, 3, 72, 4, 120, 5, 48, 6, 112, 7, 64 }, /* 24400 SWB (stereo) */ + { 8, 1, 0, 2, 28, 3, 64, 4, 104, 5, 32, 6, 80, 7, 136, 8, 64 }, /* 32000 SWB (stereo) */ + { 6, 1, 120, 2, 152, 3, 184, 4, 224, 5, 140, 6, 192}, /* 48000 SWB (stereo) */ + { 3, 1, 0, 2, 40, 3, 80 }, /* 48000 SWB (stereo TCX10) */ + { 4, 2, 80, 4, 128, 6, 144, 7, 212 }, /* 64000 SWB (stereo) */ + { 2, 2, 212, 4, 280 }, /* 80000 SWB (stereo) */ + { 1, 3, 320}, /* 96000 SWB (stereo) */ + { 9, 1, 0, 2, 32, 3, 72, 4, 120, 5, 48, 6, 112, 7, 64, 8, 0, 9, 80 }, /* 24400 FB (stereo) */ + {10, 1, 0, 2, 28, 3, 64, 4, 104, 5, 32, 6, 80, 7, 136, 8, 64, 9, 0, 10, 80 }, /* 32000 FB (stereo) */ + { 7, 1, 120, 2, 152, 3, 184, 4, 224, 5, 140, 6, 192, 8, 140}, /* 48000 FB (stereo) */ + { 4, 1, 0, 2, 40, 3, 80, 4, 140 }, /* 48000 FB (stereo TCX10) */ + { 5, 2, 80, 4, 128, 6, 144, 7, 212, 9, 160 }, /* 64000 FB (stereo) */ + { 3, 2, 212, 4, 280, 6, 200 }, /* 80000 FB (stereo) */ + { 2, 3, 320, 5, 240}, /* 96000 FB (stereo) */ + { 1, 2, 416} /*128000 FB (stereo) */ +}; + +const float igf_whitening_TH[IGF_BITRATE_UNKNOWN][2][IGF_MAX_TILES] = +{ + /* 0: for 9600 kbs WB */ + { + /* medium */ {0.36f, 0.36f, 0.f, 0.f}, + /* strong */ {1.41f, 1.41f, 0.f, 0.f} + }, + /* 1: for 13200 kbs WB RF */ + { + /* medium */ {0.36f, 0.36f, 0.f, 0.f}, + /* strong */ {1.41f, 1.41f, 0.f, 0.f} + }, + /* 2: for 9600 kbs SWB */ + { + /* medium */ {0.84f, 0.89f, 0.f, 0.f}, + /* strong */ {1.30f, 1.25f, 0.f, 0.f} + }, + /* 3: for 13200 kbs SWB */ + { + /* medium */ {0.84f, 0.89f, 0.f, 0.f}, + /* strong */ {1.30f, 1.25f, 0.f, 0.f} + }, + /* 4: for 13200 kbs SWB RF */ + { + /* medium */ {0.84f, 0.89f, 0.f, 0.f}, + /* strong */ {1.30f, 1.25f, 0.f, 0.f} + }, + /* 5: for 16400 kbs SWB */ + { + /* medium */ {0.83f, 0.89f, 0.89f, 0.f}, + /* strong */ {1.31f, 1.19f, 1.19f, 0.f} + }, + /* 6: for 24400 kbs SWB*/ + { + /* medium */ {0.81f, 0.85f, 0.85f, 0.f}, + /* strong */ {1.35f, 1.23f, 1.23f, 0.f} + }, + /* 7: for 32000 kbs SWB */ + { + /* medium */ {0.91f, 0.85f, 0.85f, 0.f}, + /* strong */ {1.34f, 1.35f, 1.35f, 0.f} + }, + /* 8: for 48000 kbs SWB */ + { + /* medium */ {1.15f, 0.f, 0.f, 0.f}, + /* strong */ {1.19f, 0.f, 0.f, 0.f} + }, + /* 9: for 64000 kbs SWB */ + { + /* medium */ {1.15f, 0.f, 0.f, 0.f}, + /* strong */ {1.19f, 0.f, 0.f, 0.f} + }, + /* 10: for 16400 kbs FB */ + { + /* medium */ {0.63f, 0.27f, 0.36f, 0.f}, + /* strong */ {1.53f, 1.32f, 0.67f, 0.f} + }, + /* 11: for 24400 kbs FB */ + { + /* medium */ {0.78f, 0.31f, 0.34f, 0.34f}, + /* strong */ {1.49f, 1.38f, 0.65f, 0.65f} + }, + /* 12: for 32000 kbs FB */ + { + /* medium */ {0.78f, 0.31f, 0.34f, 0.34f}, + /* strong */ {1.49f, 1.38f, 0.65f, 0.65f} + }, + /* 13: for 48000 kbs FB */ + { + /* medium */ {0.80f, 0.f, 0.f, 0.f}, + /* strong */ {1.00f, 0.f, 0.f, 0.f} + }, + /* 14: for 64000 kbs FB */ + { + /* medium */ {0.80f, 0.f, 0.f, 0.f}, + /* strong */ {1.00f, 0.f, 0.f, 0.f} + }, + /* 15: for 96000 kbs FB */ + { + /* medium */ {0.f, 0.f, 0.f, 0.f}, + /* strong */ {2.82f, 0.f, 0.f, 0.f} + }, + /* 16: for 128000 kbs FB */ + { + /* medium */ {0.f, 0.f, 0.f, 0.f}, + /* strong */ {2.82f, 0.f, 0.f, 0.f} + }, + /* 17: for 13200 kbs WB (stereo) */ + { + /* medium */ {0.80f, 0.75f, 0.f, 0.f}, + /* strong */ {1.50f, 1.45f, 0.f, 0.f} + }, + /* 18: for 16400 kbs WB (stereo) */ + { + /* medium */ {0.90f, 0.85f, 0.f, 0.f}, + /* strong */ {1.60f, 1.50f, 0.f, 0.f} + }, + /* 19: for 13200 kbs SWB (stereo) */ + { + /* medium */ { 0.89f, 0.89f, 0.80f ,0.80f }, + /* strong */ { 1.25f, 1.25f, 1.19f, 1.19f } + }, + /* 20: for 16400 kbs SWB (stereo) */ + { + /* medium */{ 1.05f, 1.05f, 1.10f, 1.10f, 1.05f, 1.05f }, + /* strong */{ 1.70f, 1.70f, 1.65f, 1.65f, 1.6f, 1.5f } + }, + /* 21: for 24400 kbs SWB (stereo) */ + { + /* medium */{ 1.20f, 1.20f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f }, + /* strong */{ 1.70f, 1.70f, 1.70f, 1.70f, 1.55f, 1.45f, 1.20f } + }, + /* 22: for 32000 kbs SWB (stereo) */ + { + /* medium */{ 1.20f, 1.20f, 1.15f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f }, + /* strong */{ 1.80f, 1.80f, 1.80f, 1.80f, 1.65f, 1.55f, 1.45f, 1.20f } + }, + /* 23: for 48000 kbs SWB (stereo) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ + { + /* medium */ {0.75f, 0.70f, 0.50f, 0.f }, + /* strong */ {1.25f, 1.10f, 1.00f, 0.f } + }, + /* 24: for 48000 kbs SWB (stereo TCX10) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ + { + /* medium */ {0.75f, 0.70f, 0.50f, 0.f }, + /* strong */ {1.25f, 1.10f, 1.00f, 0.f } + }, + /* 25: for 64000 kbs SWB (stereo) */ + { + /* medium */ {1.00f, 1.00f, 1.20f, 1.25f}, + /* strong */ {1.50f, 1.50f, 1.60f, 1.60f} + }, + /* 26: for 80000 kbs SWB (stereo) */ + { + /* medium */ { 1.20f, 1.25f, 0.f, 0.f }, + /* strong */ { 1.60f, 1.60f, 0.f, 0.f } + }, + /* 27: for 96000 kbs SWB (stereo) */ + { + /* medium */ {1.15f, 0.f, 0.f, 0.f}, + /* strong */ {1.19f, 0.f, 0.f, 0.f} + }, + /* 28: for 24400 kbs FB (stereo) */ + { + /* medium */{ 1.20f, 1.20f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f, 0.34f, 0.34f }, + /* strong */{ 1.70f, 1.70f, 1.70f, 1.70f, 1.55f, 1.45f, 1.20f, 0.65f, 0.65f } + }, + /* 29: for 32000 kbs FB (stereo) */ + { + /* medium */{ 1.20f, 1.20f, 1.15f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f, 0.34f, 0.34f }, + /* strong */{ 1.80f, 1.80f, 1.80f, 1.80f, 1.65f, 1.55f, 1.45f, 1.20f, 0.65f, 0.65f } + }, + /* 30: for 48000 kbs FB (stereo) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ + { + /* medium */ {0.78f, 0.31f, 0.34f, 0.34f}, + /* strong */ {1.49f, 1.38f, 0.65f, 0.65f} + }, + /* 31: for 48000 kbs FB (stereo TCX10) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ + { + /* medium */ {0.75f, 0.70f, 0.50f, 0.50f }, + /* strong */ {1.25f, 1.10f, 1.00f, 1.00f } + }, + /* 32: for 64000 kbs FB (stereo) */ + { + /* medium */ {1.00f, 1.00f, 1.20f, 1.25f, 0.75f}, + /* strong */ {1.50f, 1.50f, 1.60f, 1.60f, 1.00f} + }, + /* 33: for 80000 kbs FB (stereo) */ + { + /* medium */ { 1.20f, 1.25f, 0.75f, 0.f }, + /* strong */ { 1.60f, 1.60f, 1.00f, 0.f } + }, + /* 34: for 96000 kbs FB (stereo) */ + { + /* medium */ {0.91f, 0.85f, 0.0f, 0.f}, + /* strong */ {1.34f, 1.35f, 0.0f, 0.f} + }, + /* 35: for 128000 kbs FB (stereo) */ + { + /* medium */ {0.f, 0.f, 0.f, 0.f}, + /* strong */ {2.82f, 0.f, 0.f, 0.f} + } +}; + +/* IGF SCF arithmetic coder cumulative frequency tables and offsets */ + +const int16_t cf_off_se01_tab[10] = { + +1, /* 9.6 kbs B*/ + +1, /* 13.2 kbs WB RF B*/ + +1, /* 9.6 kbs SWB B*/ + +1, /* 13.2 kbs A*/ + +1, /* 13.2 kbs SWB RF B*/ + +1, /* 16.4 kbs B*/ + +1, /* 24.4 kbs B*/ + +1, /* 32.0 kbs A*/ + -1, /* 48.0 kbs B*/ + -1 /* 64.0 kbs B*/ +}; + +const int16_t cf_off_se02_tab[10][IGF_CTX_COUNT] = { + { +1, +2, +2, +2, +3, +3, +4}, /* 9.6 kbs B*/ + { +1, +2, +2, +2, +3, +3, +4}, /* 13.2 kbs WB RF B*/ + { +0, +2, +3, +3, +2, +2, +4}, /* 9.6 kbs SWB B*/ + { +0, +2, +3, +3, +2, +2, +4}, /* 13.2 kbs A*/ + { +0, +2, +3, +3, +2, +2, +4}, /* 13.2 kbs SWB RF B*/ + { +0, +2, +3, +3, +2, +2, +4}, /* 16.4 kbs B*/ + { -1, +2, +2, +2, +2, +3, +5}, /* 24.4 kbs B*/ + { -1, +2, +2, +2, +2, +3, +5}, /* 32.0 kbs A*/ + { +3, +2, +3, +2, +3, +3, +6}, /* 48.0 kbs B*/ + { +3, +2, +3, +2, +3, +3, +6} /* 64.0 kbs B*/ +}; + +const int16_t cf_off_se10_tab = -7; + +const int16_t cf_off_se11_tab[IGF_CTX_COUNT][IGF_CTX_COUNT] = +{ + { -5, +0, +0, +0, +0, +0, +0}, + { +0, +0, +0, +0, +0, +0, +0}, + { +0, +0, +0, +0, +0, +0, +0}, + { +0, +0, +0, +0, +0, +0, +0}, + { +0, +0, +0, +0, +0, +0, +0}, + { +0, +0, +0, +0, +0, +0, +1}, + { +0, +1, +0, +0, +3, +0, +3} +}; + +const uint16_t cf_se00_tab[IGF_SYMBOLS_IN_TABLE + 1] = +{ + 16384, 16356, 16299, 16185, 15904, 15282, 14669, 13598, 11886, 9541, 6613, 3845, 1799, 606, 153, 32, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 +}; + +const uint16_t cf_se01_tab[10][IGF_SYMBOLS_IN_TABLE + 1] = +{ + {16384, 16320, 16285, 16237, 16163, 16049, 15864, 15604, 15187, 14557, 13612, 12308, 10590, 8535, 6346, 4396, 2900, 1917, 1289, 870, 593, 408, 279, 181, 122, 78, 52, 0}, /* 9.6 kbs B*/ + {16384, 16320, 16285, 16237, 16163, 16049, 15864, 15604, 15187, 14557, 13612, 12308, 10590, 8535, 6346, 4396, 2900, 1917, 1289, 870, 593, 408, 279, 181, 122, 78, 52, 0}, /* 13.2 kbs WB RF B*/ + {16384, 16375, 16362, 16339, 16307, 16258, 16180, 16061, 15845, 15463, 14795, 13680, 11828, 9252, 6358, 3769, 2079, 1186, 687, 415, 242, 150, 100, 67, 44, 30, 19, 0}, /* 9.6 kbs SWB B*/ + {16384, 16375, 16362, 16339, 16307, 16258, 16180, 16061, 15845, 15463, 14795, 13680, 11828, 9252, 6358, 3769, 2079, 1186, 687, 415, 242, 150, 100, 67, 44, 30, 19, 0}, /* 13.2 kbs A*/ + {16384, 16375, 16362, 16339, 16307, 16258, 16180, 16061, 15845, 15463, 14795, 13680, 11828, 9252, 6358, 3769, 2079, 1186, 687, 415, 242, 150, 100, 67, 44, 30, 19, 0}, /* 13.2 kbs SWB RF B*/ + {16384, 16375, 16362, 16339, 16307, 16258, 16180, 16061, 15845, 15463, 14795, 13680, 11828, 9252, 6358, 3769, 2079, 1186, 687, 415, 242, 150, 100, 67, 44, 30, 19, 0}, /* 16.4 kbs B*/ + {16384, 16369, 16356, 16337, 16311, 16268, 16197, 16073, 15876, 15544, 14977, 13987, 12327, 9908, 7017, 4393, 2545, 1446, 840, 493, 292, 183, 111, 70, 45, 31, 20, 0 }, /* 24.4 kbs B*/ + {16384, 16369, 16356, 16337, 16311, 16268, 16197, 16073, 15876, 15544, 14977, 13987, 12327, 9908, 7017, 4393, 2545, 1446, 840, 493, 292, 183, 111, 70, 45, 31, 20, 0}, /* 32.0 kbs A*/ + {16384, 16368, 16355, 16334, 16291, 16212, 16071, 15816, 15359, 14523, 13014, 10534, 7345, 4272, 2228, 1149, 626, 357, 215, 139, 93, 67, 53, 43, 36, 28, 22, 0}, /* 48.0 kbs B*/ + {16384, 16368, 16355, 16334, 16291, 16212, 16071, 15816, 15359, 14523, 13014, 10534, 7345, 4272, 2228, 1149, 626, 357, 215, 139, 93, 67, 53, 43, 36, 28, 22, 0} /* 64.0 kbs B*/ +}; + +const uint16_t cf_se02_tab[10][IGF_CTX_COUNT][IGF_SYMBOLS_IN_TABLE + 1] = +{ + { /* 9.6 kbs B */ + { 16384, 16369, 16348, 16316, 16256, 16172, 16017, 15735, 15246, 14363, 13036, 11139, 8916, 6724, 4757, 3282, 2221, 1549, 1105, 771, 548, 364, 238, 151, 89, 50, 30, 0}, + { 16384, 16371, 16358, 16339, 16290, 16241, 16153, 16040, 15813, 15397, 14601, 13301, 11360, 8916, 6254, 3911, 2220, 1280, 755, 461, 278, 177, 111, 70, 35, 20, 12, 0}, + { 16384, 16375, 16359, 16333, 16286, 16243, 16154, 16024, 15771, 15380, 14712, 13537, 11742, 9425, 6872, 4378, 2327, 1197, 671, 412, 259, 145, 93, 52, 26, 13, 5, 0}, + { 16384, 16372, 16358, 16326, 16289, 16241, 16147, 16014, 15765, 15321, 14670, 13546, 11912, 9787, 7323, 4824, 2536, 1330, 731, 438, 258, 148, 86, 37, 22, 11, 2, 0}, + { 16384, 16376, 16364, 16344, 16315, 16272, 16219, 16119, 15910, 15620, 15100, 14254, 13063, 11489, 9413, 7100, 4738, 2751, 1584, 973, 597, 349, 201, 96, 47, 22, 9, 0}, + { 16384, 16364, 16340, 16312, 16288, 16237, 16166, 16026, 15756, 15390, 14833, 13870, 12627, 10998, 8985, 6893, 4720, 3048, 1860, 1131, 725, 449, 215, 111, 56, 34, 14, 0}, + { 16384, 16326, 16297, 16246, 16183, 16064, 15884, 15632, 15240, 14763, 14107, 13230, 12185, 10886, 9390, 7781, 6194, 4696, 3350, 2259, 1506, 975, 604, 356, 201, 106, 48, 0} + }, + { /* 13.2 kbs WB RF B*/ + { 16384, 16369, 16348, 16316, 16256, 16172, 16017, 15735, 15246, 14363, 13036, 11139, 8916, 6724, 4757, 3282, 2221, 1549, 1105, 771, 548, 364, 238, 151, 89, 50, 30, 0}, + { 16384, 16371, 16358, 16339, 16290, 16241, 16153, 16040, 15813, 15397, 14601, 13301, 11360, 8916, 6254, 3911, 2220, 1280, 755, 461, 278, 177, 111, 70, 35, 20, 12, 0}, + { 16384, 16375, 16359, 16333, 16286, 16243, 16154, 16024, 15771, 15380, 14712, 13537, 11742, 9425, 6872, 4378, 2327, 1197, 671, 412, 259, 145, 93, 52, 26, 13, 5, 0}, + { 16384, 16372, 16358, 16326, 16289, 16241, 16147, 16014, 15765, 15321, 14670, 13546, 11912, 9787, 7323, 4824, 2536, 1330, 731, 438, 258, 148, 86, 37, 22, 11, 2, 0}, + { 16384, 16376, 16364, 16344, 16315, 16272, 16219, 16119, 15910, 15620, 15100, 14254, 13063, 11489, 9413, 7100, 4738, 2751, 1584, 973, 597, 349, 201, 96, 47, 22, 9, 0}, + { 16384, 16364, 16340, 16312, 16288, 16237, 16166, 16026, 15756, 15390, 14833, 13870, 12627, 10998, 8985, 6893, 4720, 3048, 1860, 1131, 725, 449, 215, 111, 56, 34, 14, 0}, + { 16384, 16326, 16297, 16246, 16183, 16064, 15884, 15632, 15240, 14763, 14107, 13230, 12185, 10886, 9390, 7781, 6194, 4696, 3350, 2259, 1506, 975, 604, 356, 201, 106, 48, 0} + }, + { /* 9.6 kbs SWB B*/ + { 16384, 16359, 16349, 16331, 16300, 16236, 16112, 15894, 15480, 14691, 13257, 10996, 8168, 5357, 3193, 1864, 1098, 676, 426, 265, 173, 117, 81, 59, 45, 35, 26, 0}, + { 16384, 16374, 16370, 16367, 16362, 16348, 16325, 16283, 16204, 16058, 15715, 14980, 13521, 11144, 7972, 4702, 2366, 1063, 480, 241, 128, 71, 42, 22, 14, 9, 5, 0}, + { 16384, 16380, 16377, 16375, 16372, 16365, 16354, 16334, 16295, 16216, 16056, 15716, 15034, 13690, 11467, 8404, 5150, 2385, 908, 417, 199, 106, 62, 35, 21, 13, 7, 0}, + { 16384, 16378, 16376, 16373, 16368, 16360, 16346, 16318, 16267, 16173, 15991, 15644, 14932, 13623, 11575, 8688, 5224, 2309, 891, 393, 202, 103, 57, 34, 20, 11, 8, 0}, + { 16384, 16375, 16372, 16365, 16348, 16322, 16279, 16201, 16046, 15728, 15214, 14297, 12811, 10673, 7918, 4530, 2109, 978, 466, 234, 121, 72, 46, 31, 25, 17, 13, 0}, + { 16384, 16366, 16357, 16341, 16325, 16289, 16220, 16084, 15768, 15300, 14466, 13206, 11402, 9176, 6633, 4092, 2192, 1171, 592, 315, 179, 111, 74, 46, 31, 26, 18, 0}, + { 16384, 16301, 16266, 16211, 16140, 16045, 15889, 15652, 15358, 14883, 14192, 13119, 11753, 10181, 8445, 6708, 5023, 3449, 2226, 1375, 849, 516, 353, 231, 153, 107, 78, 0} + }, + { /* 13.2 kbs A */ + { 16384, 16359, 16349, 16331, 16300, 16236, 16112, 15894, 15480, 14691, 13257, 10996, 8168, 5357, 3193, 1864, 1098, 676, 426, 265, 173, 117, 81, 59, 45, 35, 26, 0}, + { 16384, 16374, 16370, 16367, 16362, 16348, 16325, 16283, 16204, 16058, 15715, 14980, 13521, 11144, 7972, 4702, 2366, 1063, 480, 241, 128, 71, 42, 22, 14, 9, 5, 0}, + { 16384, 16380, 16377, 16375, 16372, 16365, 16354, 16334, 16295, 16216, 16056, 15716, 15034, 13690, 11467, 8404, 5150, 2385, 908, 417, 199, 106, 62, 35, 21, 13, 7, 0}, + { 16384, 16378, 16376, 16373, 16368, 16360, 16346, 16318, 16267, 16173, 15991, 15644, 14932, 13623, 11575, 8688, 5224, 2309, 891, 393, 202, 103, 57, 34, 20, 11, 8, 0}, + { 16384, 16375, 16372, 16365, 16348, 16322, 16279, 16201, 16046, 15728, 15214, 14297, 12811, 10673, 7918, 4530, 2109, 978, 466, 234, 121, 72, 46, 31, 25, 17, 13, 0}, + { 16384, 16366, 16357, 16341, 16325, 16289, 16220, 16084, 15768, 15300, 14466, 13206, 11402, 9176, 6633, 4092, 2192, 1171, 592, 315, 179, 111, 74, 46, 31, 26, 18, 0}, + { 16384, 16301, 16266, 16211, 16140, 16045, 15889, 15652, 15358, 14883, 14192, 13119, 11753, 10181, 8445, 6708, 5023, 3449, 2226, 1375, 849, 516, 353, 231, 153, 107, 78, 0} + }, + { /* 13.2 kbs SWB RF B*/ + { 16384, 16359, 16349, 16331, 16300, 16236, 16112, 15894, 15480, 14691, 13257, 10996, 8168, 5357, 3193, 1864, 1098, 676, 426, 265, 173, 117, 81, 59, 45, 35, 26, 0}, + { 16384, 16374, 16370, 16367, 16362, 16348, 16325, 16283, 16204, 16058, 15715, 14980, 13521, 11144, 7972, 4702, 2366, 1063, 480, 241, 128, 71, 42, 22, 14, 9, 5, 0}, + { 16384, 16380, 16377, 16375, 16372, 16365, 16354, 16334, 16295, 16216, 16056, 15716, 15034, 13690, 11467, 8404, 5150, 2385, 908, 417, 199, 106, 62, 35, 21, 13, 7, 0}, + { 16384, 16378, 16376, 16373, 16368, 16360, 16346, 16318, 16267, 16173, 15991, 15644, 14932, 13623, 11575, 8688, 5224, 2309, 891, 393, 202, 103, 57, 34, 20, 11, 8, 0}, + { 16384, 16375, 16372, 16365, 16348, 16322, 16279, 16201, 16046, 15728, 15214, 14297, 12811, 10673, 7918, 4530, 2109, 978, 466, 234, 121, 72, 46, 31, 25, 17, 13, 0}, + { 16384, 16366, 16357, 16341, 16325, 16289, 16220, 16084, 15768, 15300, 14466, 13206, 11402, 9176, 6633, 4092, 2192, 1171, 592, 315, 179, 111, 74, 46, 31, 26, 18, 0}, + { 16384, 16301, 16266, 16211, 16140, 16045, 15889, 15652, 15358, 14883, 14192, 13119, 11753, 10181, 8445, 6708, 5023, 3449, 2226, 1375, 849, 516, 353, 231, 153, 107, 78, 0} + }, + { /* 16.4 kbs B */ + { 16384, 16359, 16349, 16331, 16300, 16236, 16112, 15894, 15480, 14691, 13257, 10996, 8168, 5357, 3193, 1864, 1098, 676, 426, 265, 173, 117, 81, 59, 45, 35, 26, 0}, + { 16384, 16374, 16370, 16367, 16362, 16348, 16325, 16283, 16204, 16058, 15715, 14980, 13521, 11144, 7972, 4702, 2366, 1063, 480, 241, 128, 71, 42, 22, 14, 9, 5, 0}, + { 16384, 16380, 16377, 16375, 16372, 16365, 16354, 16334, 16295, 16216, 16056, 15716, 15034, 13690, 11467, 8404, 5150, 2385, 908, 417, 199, 106, 62, 35, 21, 13, 7, 0}, + { 16384, 16378, 16376, 16373, 16368, 16360, 16346, 16318, 16267, 16173, 15991, 15644, 14932, 13623, 11575, 8688, 5224, 2309, 891, 393, 202, 103, 57, 34, 20, 11, 8, 0}, + { 16384, 16375, 16372, 16365, 16348, 16322, 16279, 16201, 16046, 15728, 15214, 14297, 12811, 10673, 7918, 4530, 2109, 978, 466, 234, 121, 72, 46, 31, 25, 17, 13, 0}, + { 16384, 16366, 16357, 16341, 16325, 16289, 16220, 16084, 15768, 15300, 14466, 13206, 11402, 9176, 6633, 4092, 2192, 1171, 592, 315, 179, 111, 74, 46, 31, 26, 18, 0}, + { 16384, 16301, 16266, 16211, 16140, 16045, 15889, 15652, 15358, 14883, 14192, 13119, 11753, 10181, 8445, 6708, 5023, 3449, 2226, 1375, 849, 516, 353, 231, 153, 107, 78, 0} + }, + { /* 24.4 kbs B */ + { 16384, 16351, 16333, 16303, 16254, 16163, 15993, 15681, 15080, 13987, 12109, 9465, 6588, 4160, 2488, 1480, 912, 589, 389, 266, 190, 131, 93, 68, 47, 34, 24, 0}, + { 16384, 16379, 16375, 16369, 16360, 16345, 16328, 16286, 16211, 16078, 15810, 15233, 14058, 11933, 8881, 5609, 2940, 1290, 558, 274, 150, 80, 47, 29, 17, 11, 6, 0}, + { 16384, 16382, 16380, 16377, 16370, 16358, 16337, 16300, 16224, 16088, 15811, 15233, 14112, 12019, 9061, 5723, 2780, 1121, 480, 239, 123, 69, 41, 22, 13, 8, 5, 0}, + { 16384, 16377, 16375, 16369, 16363, 16351, 16325, 16268, 16172, 16009, 15686, 15039, 13830, 11799, 8924, 5422, 2444, 960, 441, 220, 111, 63, 37, 22, 11, 6, 3, 0}, + { 16384, 16374, 16369, 16363, 16356, 16335, 16290, 16214, 16068, 15826, 15382, 14550, 13126, 10956, 8000, 4622, 2090, 973, 478, 249, 128, 75, 42, 19, 13, 7, 4, 0}, + { 16384, 16375, 16370, 16367, 16362, 16340, 16298, 16232, 16097, 15860, 15440, 14718, 13570, 11874, 9557, 6790, 4053, 2166, 1150, 622, 323, 179, 96, 53, 33, 17, 12, 0}, + { 16384, 16335, 16304, 16276, 16228, 16166, 16094, 15983, 15775, 15501, 15040, 14417, 13552, 12326, 10847, 9117, 7308, 5373, 3666, 2297, 1336, 807, 495, 313, 216, 152, 114, 0} + }, + { /* 32.0 kbs A */ + { 16384, 16351, 16333, 16303, 16254, 16163, 15993, 15681, 15080, 13987, 12109, 9465, 6588, 4160, 2488, 1480, 912, 589, 389, 266, 190, 131, 93, 68, 47, 34, 24, 0}, + { 16384, 16379, 16375, 16369, 16360, 16345, 16328, 16286, 16211, 16078, 15810, 15233, 14058, 11933, 8881, 5609, 2940, 1290, 558, 274, 150, 80, 47, 29, 17, 11, 6, 0}, + { 16384, 16382, 16380, 16377, 16370, 16358, 16337, 16300, 16224, 16088, 15811, 15233, 14112, 12019, 9061, 5723, 2780, 1121, 480, 239, 123, 69, 41, 22, 13, 8, 5, 0}, + { 16384, 16377, 16375, 16369, 16363, 16351, 16325, 16268, 16172, 16009, 15686, 15039, 13830, 11799, 8924, 5422, 2444, 960, 441, 220, 111, 63, 37, 22, 11, 6, 3, 0}, + { 16384, 16374, 16369, 16363, 16356, 16335, 16290, 16214, 16068, 15826, 15382, 14550, 13126, 10956, 8000, 4622, 2090, 973, 478, 249, 128, 75, 42, 19, 13, 7, 4, 0}, + { 16384, 16375, 16370, 16367, 16362, 16340, 16298, 16232, 16097, 15860, 15440, 14718, 13570, 11874, 9557, 6790, 4053, 2166, 1150, 622, 323, 179, 96, 53, 33, 17, 12, 0}, + { 16384, 16335, 16304, 16276, 16228, 16166, 16094, 15983, 15775, 15501, 15040, 14417, 13552, 12326, 10847, 9117, 7308, 5373, 3666, 2297, 1336, 807, 495, 313, 216, 152, 114, 0} + }, + { /* 48.0 kbs B */ + { 16384, 16334, 16310, 16285, 16254, 16204, 16128, 16031, 15903, 15697, 15380, 14820, 13857, 12267, 9878, 7099, 4509, 2576, 1478, 871, 531, 349, 230, 163, 111, 80, 62, 0}, + { 16384, 16337, 16327, 16307, 16278, 16239, 16178, 16092, 15947, 15719, 15286, 14428, 12833, 10246, 7123, 4088, 1896, 849, 481, 287, 190, 139, 94, 66, 52, 34, 24, 0}, + { 16384, 16352, 16341, 16329, 16312, 16295, 16265, 16223, 16151, 16026, 15825, 15437, 14645, 13089, 10612, 7364, 4077, 1783, 779, 444, 281, 192, 138, 93, 65, 43, 30, 0}, + { 16384, 16354, 16347, 16337, 16314, 16284, 16233, 16165, 16051, 15847, 15450, 14621, 13069, 10623, 7298, 3789, 1569, 727, 445, 302, 207, 143, 96, 59, 36, 18, 9, 0}, + { 16384, 16352, 16342, 16330, 16314, 16295, 16266, 16215, 16127, 15984, 15709, 15190, 14242, 12540, 9979, 6448, 3160, 1392, 752, 481, 344, 251, 169, 115, 73, 28, 8, 0}, + { 16384, 16340, 16320, 16302, 16272, 16257, 16220, 16135, 16011, 15784, 15370, 14688, 13423, 11457, 8721, 5529, 2736, 1375, 784, 525, 353, 263, 172, 113, 78, 26, 11, 0}, + { 16384, 16238, 16170, 16113, 16077, 16030, 16000, 15948, 15873, 15752, 15535, 15157, 14595, 13788, 12569, 10767, 8611, 6186, 4101, 2459, 1478, 881, 607, 385, 243, 168, 116, 0} + }, + { /* 64.0 kbs B */ + { 16384, 16334, 16310, 16285, 16254, 16204, 16128, 16031, 15903, 15697, 15380, 14820, 13857, 12267, 9878, 7099, 4509, 2576, 1478, 871, 531, 349, 230, 163, 111, 80, 62, 0}, + { 16384, 16337, 16327, 16307, 16278, 16239, 16178, 16092, 15947, 15719, 15286, 14428, 12833, 10246, 7123, 4088, 1896, 849, 481, 287, 190, 139, 94, 66, 52, 34, 24, 0}, + { 16384, 16352, 16341, 16329, 16312, 16295, 16265, 16223, 16151, 16026, 15825, 15437, 14645, 13089, 10612, 7364, 4077, 1783, 779, 444, 281, 192, 138, 93, 65, 43, 30, 0}, + { 16384, 16354, 16347, 16337, 16314, 16284, 16233, 16165, 16051, 15847, 15450, 14621, 13069, 10623, 7298, 3789, 1569, 727, 445, 302, 207, 143, 96, 59, 36, 18, 9, 0}, + { 16384, 16352, 16342, 16330, 16314, 16295, 16266, 16215, 16127, 15984, 15709, 15190, 14242, 12540, 9979, 6448, 3160, 1392, 752, 481, 344, 251, 169, 115, 73, 28, 8, 0}, + { 16384, 16340, 16320, 16302, 16272, 16257, 16220, 16135, 16011, 15784, 15370, 14688, 13423, 11457, 8721, 5529, 2736, 1375, 784, 525, 353, 263, 172, 113, 78, 26, 11, 0}, + { 16384, 16238, 16170, 16113, 16077, 16030, 16000, 15948, 15873, 15752, 15535, 15157, 14595, 13788, 12569, 10767, 8611, 6186, 4101, 2459, 1478, 881, 607, 385, 243, 168, 116, 0} + } +}; + +/* only needed for >= 48 kbps */ + +const uint16_t cf_se10_tab[IGF_SYMBOLS_IN_TABLE + 1] = +{ + 16384, 15493, 15154, 14810, 14331, 13701, 13086, 12403, 11585, 10923, 10293, 9631, 8943, 8385, 7760, 7182, 6593, 6009, 5540, 5082, 4571, 4133, 3711, 3299, 2887, 2460, 2043, 0 +}; + +const uint16_t cf_se11_tab[IGF_CTX_COUNT][IGF_CTX_COUNT][IGF_SYMBOLS_IN_TABLE + 1] = +{ + { + { 16384, 16313, 16312, 16241, 16206, 16099, 15957, 15386, 14601, 12852, 10282, 7534, 4964, 2966, 1824, 896, 504, 255, 113, 112, 41, 40, 39, 38, 37, 36, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16207, 16206, 16205, 16120, 15949, 14663, 12777, 9947, 6860, 3773, 1972, 772, 430, 259, 174, 89, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16115, 15941, 14891, 12965, 11477, 8587, 5347, 3421, 1407, 620, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16254, 16253, 16004, 15005, 13756, 12006, 9256, 5755, 3755, 1755, 756, 132, 131, 130, 129, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 15964, 15550, 14929, 12856, 9954, 6430, 2906, 1456, 1042, 628, 214, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16087, 15503, 14334, 14333, 11994, 10240, 8193, 5268, 2929, 1760, 1176, 299, 298, 297, 296, 295, 294, 293, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 14922, 13467, 10919, 9464, 7280, 6189, 3641, 2914, 2187, 1824, 1823, 1096, 369, 368, 367, 4, 3, 2, 1, 0} + }, + { + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16238, 16237, 15678, 15399, 14840, 13441, 11341, 8681, 6161, 3781, 2522, 702, 283, 144, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 16374, 15693, 14671, 12625, 7507, 4778, 2390, 1368, 1028, 347, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 16374, 15595, 13776, 9877, 6498, 3639, 3120, 1561, 1042, 523, 265, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 15709, 13704, 12702, 11032, 7355, 3010, 1340, 1007, 674, 341, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 16374, 12816, 10683, 7125, 2854, 720, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 12738, 12737, 10920, 9103, 5466, 1828, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 15359, 15358, 14337, 14336, 14335, 14334, 14333, 10240, 7170, 5124, 2054, 1032, 1031, 1030, 1029, 7, 6, 5, 4, 3, 2, 1, 0} + }, + { + { 16384, 16383, 16382, 16107, 16106, 16105, 16104, 16103, 15966, 15965, 15690, 15140, 14315, 12939, 10324, 8122, 4956, 2479, 1654, 966, 691, 416, 141, 140, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 15320, 14265, 12945, 10568, 8984, 6343, 4230, 1853, 797, 270, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16112, 16111, 16110, 15037, 14501, 12622, 11012, 7790, 5374, 3226, 1347, 542, 275, 274, 273, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 15597, 14819, 12090, 7021, 4292, 1953, 1175, 787, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 15935, 14165, 12838, 9297, 6641, 3985, 1772, 1331, 890, 449, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 14740, 13923, 9010, 6555, 4100, 2464, 828, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 13104, 13103, 8192, 4920, 1647, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} + }, + { + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16077, 16076, 16075, 15926, 15176, 14425, 10819, 7664, 5711, 2856, 1354, 754, 454, 154, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16044, 16043, 14373, 12369, 10030, 7023, 5019, 1677, 676, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16077, 16076, 16075, 15470, 14258, 12743, 11531, 6375, 3040, 3039, 917, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 15309, 13531, 11396, 7480, 3564, 1786, 364, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 15833, 15289, 13652, 10377, 6556, 3827, 3283, 1646, 555, 554, 553, 552, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 14146, 13404, 13403, 13402, 10425, 7448, 3727, 2240, 2239, 752, 751, 750, 749, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 15562, 14745, 13928, 10653, 7378, 5742, 2467, 830, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} + }, + { + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 16219, 15590, 14803, 13544, 11339, 9292, 6930, 4568, 2521, 1419, 790, 318, 161, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16014, 15652, 14925, 14198, 12743, 10196, 5464, 3645, 1826, 371, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16050, 15396, 15395, 12447, 10810, 8518, 4915, 2950, 1313, 659, 333, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 14792, 14001, 11096, 8455, 6079, 3174, 2119, 535, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 15796, 15795, 15794, 15793, 11700, 8777, 6439, 4101, 1178, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 15473, 15472, 15471, 14563, 13655, 12746, 10017, 7288, 6379, 6378, 4559, 1830, 1829, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 15723, 15069, 13105, 9174, 7865, 3934, 3280, 1971, 1317, 663, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} + }, + { + { 16384, 16383, 16382, 16381, 16232, 16231, 16230, 16229, 16228, 16227, 16078, 15628, 15329, 13977, 12325, 10222, 5413, 4212, 1959, 908, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16109, 15842, 15841, 13694, 11815, 10205, 5640, 3493, 2151, 1347, 543, 542, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16168, 14699, 13650, 11761, 9452, 6093, 3784, 1685, 636, 427, 426, 425, 424, 423, 422, 421, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16122, 15611, 14332, 13053, 10238, 7423, 4608, 2561, 2050, 1027, 516, 515, 260, 259, 258, 257, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 16376, 16375, 15207, 13649, 10531, 6632, 3514, 1176, 398, 397, 396, 395, 394, 393, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16379, 16378, 16377, 15749, 15120, 12601, 10082, 8823, 6304, 3785, 3156, 1267, 638, 637, 636, 7, 6, 5, 4, 3, 2, 1, 0}, + { 16384, 16383, 15729, 15728, 15727, 15726, 15725, 15071, 14417, 12453, 10489, 8525, 5905, 1975, 1321, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} + }, + { + { 16384, 16383, 16372, 16340, 16339, 16328, 16285, 16253, 16136, 15923, 15614, 14931, 13833, 12201, 10175, 7615, 5269, 3243, 2123, 1142, 673, 342, 182, 150, 86, 54, 11, 0}, + { 16384, 16383, 16366, 16349, 16332, 16331, 16314, 16245, 16244, 16141, 15813, 15451, 14105, 12672, 9910, 7113, 4472, 2590, 1071, 484, 294, 156, 53, 36, 19, 18, 1, 0}, + { 16384, 16383, 16382, 16369, 16355, 16341, 16271, 16117, 15921, 15627, 14772, 13089, 10929, 8334, 5487, 3299, 1644, 999, 424, 228, 88, 46, 18, 17, 16, 15, 14, 0}, + { 16384, 16367, 16366, 16365, 16364, 16363, 16259, 16173, 15809, 15028, 13951, 12214, 9278, 6203, 3719, 2052, 1079, 402, 194, 125, 56, 22, 21, 20, 3, 2, 1, 0}, + { 16384, 16383, 16360, 16359, 16358, 16357, 16356, 16333, 16332, 16143, 15954, 15434, 14227, 12262, 9540, 6652, 3882, 1988, 1207, 829, 427, 191, 73, 50, 49, 2, 1, 0}, + { 16384, 16383, 16382, 16381, 16380, 16296, 16254, 15748, 14862, 13427, 11189, 8487, 5278, 3252, 2028, 1099, 551, 340, 298, 214, 172, 88, 46, 45, 3, 2, 1, 0}, + { 16384, 16383, 16307, 16269, 16231, 16230, 16077, 15886, 15464, 14620, 13546, 11896, 9671, 7024, 4338, 2382, 1423, 809, 541, 311, 158, 43, 5, 4, 3, 2, 1, 0} + } +}; + +const IGF_MODE igfMode[IGF_BITRATE_UNKNOWN] = +{ + /* sampleRate, frameLength, igfMinFq, maxHopsize */ + { 16000, 320, 774, 4 }, /* 9.6kbs WB 0 */ + { 16000, 320, 774, 4 }, /* 13.2kbs WB RF 1 */ + { 32000, 640, 800, 2 }, /* 9.6kbs SWB 2 */ + { 32000, 640, 800, 4 }, /* 13.2kbs SWB 3 */ + { 32000, 640, 800, 2 }, /* 13.2kbs SWB RF 4 */ + { 32000, 640, 800, 4 }, /* 16.4kbs SWB 5 */ + { 32000, 640, 800, 4 }, /* 24.4kbs SWB 6 */ + { 32000, 640, 800, 4 }, /* 32.0kbs SWB 7 */ + { 32000, 640, 1600, 4 }, /* 48.0kbs SWB 8 */ + { 32000, 640, 1600, 4 }, /* 64.0kbs SWB 9 */ + { 48000, 960, 800, 4 }, /* 16.4kbs FB 10 */ + { 48000, 960, 800, 2 }, /* 24.4kbs FB 11 */ + { 48000, 960, 800, 2 }, /* 32.0kbs FB 12 */ + { 48000, 960, 1600, 2 }, /* 48.0kbs FB 13 */ + { 48000, 960, 1600, 2 }, /* 64.0kbs FB 14 */ + { 48000, 960, 1600, 1 }, /* 96.0kbs FB 15 */ + { 48000, 960, 1600, 1 }, /*128.0kbs FB 16 */ + { 16000, 320, 800, 2 }, /* 13.2kbs WB CPE 17 */ /* stereo mode */ + { 16000, 320, 800, 2 }, /* 16.4kbs WB CPE 18 */ /* stereo mode */ + { 32000, 640, 800, 2 }, /* 13.2kbs SWB CPE 19 */ /* stereo mode */ + { 32000, 640, 800, 2 }, /* 16.4kbs SWB CPE 20 */ /* stereo mode */ + { 32000, 640, 800, 2 }, /* 24.4kbs SWB CPE 21 */ /* stereo mode */ + { 32000, 640, 800, 2 }, /* 32.0kbs SWB CPE 22 */ /* stereo mode */ + { 32000, 640, 1200, 2 }, /* 48.0kbs SWB CPE 23 */ /* stereo mode */ + { 32000, 640, 1200, 2 }, /* 48.0kbs SWB CPE 24 */ /* stereo TCX10 mode */ + { 32000, 640, 1200, 2 }, /* 64.0kbs SWB CPE 25 */ /* stereo mode */ + { 32000, 640, 1600, 2 }, /* 80.0kbs SWB CPE 26 */ /* stereo mode */ + { 32000, 640, 1600, 4 }, /* 96.0kbs SWB CPE 27 */ /* stereo mode */ + { 48000, 960, 800, 2 }, /* 24.4kbs FB CPE 28 */ /* stereo mode */ + { 48000, 960, 800, 2 }, /* 32.0kbs FB CPE 29 */ /* stereo mode */ + { 48000, 960, 1200, 2 }, /* 48.0kbs FB CPE 30 */ /* stereo mode */ + { 48000, 960, 1200, 2 }, /* 48.0kbs FB CPE 31 */ /* stereo TCX10 mode */ + { 48000, 960, 1200, 2 }, /* 64.0kbs FB CPE 32 */ /* stereo mode */ + { 48000, 960, 1600, 2 }, /* 80.0kbs FB CPE 33 */ /* stereo mode */ + { 48000, 960, 1600, 1 }, /* 96.0kbs FB CPE 34 */ /* stereo mode */ + { 48000, 960, 1600, 1 } /*128.0kbs FB CPE 35 */ /* stereo mode */ +}; + +const float normReciprocal[CHEAP_NORM_SIZE] = +{ + 0.0f, 1.0000000000f, 0.5000000000f, 0.3333333333f, 0.2500000000f, 0.2000000000f, 0.1666666667f, 0.1428571429f, 0.1250000000f, 0.1111111111f, 0.1000000000f, 0.0909090909f, 0.0833333333f, 0.0769230769f, 0.0714285714f, 0.0666666667f, 0.0625000000f, 0.0588235294f, 0.0555555556f, 0.0526315789f, 0.0500000000f, 0.0476190476f, 0.0454545455f, 0.0434782609f, 0.0416666667f, 0.0400000000f, 0.0384615385f, 0.0370370370f, 0.0357142857f, 0.0344827586f, 0.0333333333f, 0.0322580645f, 0.0312500000f, 0.0303030303f, 0.0294117647f, 0.0285714286f, 0.0277777778f, 0.0270270270f, 0.0263157895f, 0.0256410256f, 0.0250000000f, 0.0243902439f, 0.0238095238f, 0.0232558140f, 0.0227272727f, 0.0222222222f, 0.0217391304f, 0.0212765957f, 0.0208333333f, 0.0204081633f, 0.0200000000f, 0.0196078431f, 0.0192307692f, 0.0188679245f, 0.0185185185f, 0.0181818182f, 0.0178571429f, 0.0175438596f, 0.0172413793f, 0.0169491525f, 0.0166666667f, 0.0163934426f, 0.0161290323f, 0.0158730159f, 0.0156250000f, 0.0153846154f, 0.0151515152f, 0.0149253731f, 0.0147058824f, 0.0144927536f, 0.0142857143f, 0.0140845070f, 0.0138888889f, 0.0136986301f, 0.0135135135f, 0.0133333333f, 0.0131578947f, 0.0129870130f, 0.0128205128f, 0.0126582278f, 0.0125000000f, 0.0123456790f, 0.0121951220f, 0.0120481928f, 0.0119047619f, 0.0117647059f, 0.0116279070f, 0.0114942529f, 0.0113636364f, 0.0112359551f, 0.0111111111f, 0.0109890110f, 0.0108695652f, 0.0107526882f, 0.0106382979f, 0.0105263158f, 0.0104166667f, 0.0103092784f, 0.0102040816f, 0.0101010101f, 0.0100000000f, 0.0099009901f, 0.0098039216f, 0.0097087379f, 0.0096153846f, 0.0095238095f, 0.0094339623f, 0.0093457944f, 0.0092592593f, 0.0091743119f, 0.0090909091f, 0.0090090090f, 0.0089285714f, 0.0088495575f, 0.0087719298f, 0.0086956522f, 0.0086206897f, 0.0085470085f, 0.0084745763f, 0.0084033613f, 0.0083333333f, 0.0082644628f, 0.0081967213f, 0.0081300813f, 0.0080645161f, 0.0080000000f, 0.0079365079f, 0.0078740157f, 0.0078125000f, 0.0077519380f, 0.0076923077f, 0.0076335878f, 0.0075757576f, 0.0075187970f, 0.0074626866f, 0.0074074074f, 0.0073529412f, 0.0072992701f, 0.0072463768f, 0.0071942446f, 0.0071428571f, 0.0070921986f, 0.0070422535f, 0.0069930070f, 0.0069444444f, 0.0068965517f, 0.0068493151f, 0.0068027211f, 0.0067567568f, 0.0067114094f, 0.0066666667f, 0.0066225166f, 0.0065789474f, 0.0065359477f, 0.0064935065f, 0.0064516129f, 0.0064102564f, 0.0063694268f, 0.0063291139f, 0.0062893082f, 0.0062500000f +}; + +const float w1N8[30] = {0.998795f, -0.049068f, 0.995185f, -0.098017f, 0.989177f, -0.146730f, 0.980785f, -0.195090f, 0.970031f, -0.242980f, 0.956940f, -0.290285f, 0.941544f, -0.336890f, 0.923880f, -0.382683f, 0.903989f, -0.427555f, 0.881921f, -0.471397f, 0.857729f, -0.514103f, 0.831470f, -0.555570f, 0.803208f, -0.595699f, 0.773010f, -0.634393f, 0.740951f, -0.671559f}; +const float w2N8[30] = {0.995185f, -0.098017f, 0.980785f, -0.195090f, 0.956940f, -0.290285f, 0.923880f, -0.382683f, 0.881921f, -0.471397f, 0.831470f, -0.555570f, 0.773010f, -0.634393f, 0.707107f, -0.707107f, 0.634393f, -0.773010f, 0.555570f, -0.831470f, 0.471397f, -0.881921f, 0.382683f, -0.923880f, 0.290285f, -0.956940f, 0.195090f, -0.980785f, 0.098017f, -0.995185f}; +const float w3N8[30] = {0.989177f, -0.146730f, 0.956940f, -0.290285f, 0.903989f, -0.427555f, 0.831470f, -0.555570f, 0.740951f, -0.671559f, 0.634393f, -0.773010f, 0.514103f, -0.857729f, 0.382683f, -0.923880f, 0.242980f, -0.970031f, 0.098017f, -0.995185f, -0.049068f, -0.998795f, -0.195090f, -0.980785f, -0.336890f, -0.941544f, -0.471397f, -0.881921f, -0.595699f, -0.803208f}; +const float w4N8[30] = {0.980785f, -0.195090f, 0.923880f, -0.382683f, 0.831470f, -0.555570f, 0.707107f, -0.707107f, 0.555570f, -0.831470f, 0.382683f, -0.923880f, 0.195090f, -0.980785f, 0.000000f, -1.000000f, -0.195090f, -0.980785f, -0.382683f, -0.923880f, -0.555570f, -0.831470f, -0.707107f, -0.707107f, -0.831470f, -0.555570f, -0.923880f, -0.382683f, -0.980785f, -0.195090f}; +const float w5N8[30] = {0.970031f, -0.242980f, 0.881921f, -0.471397f, 0.740951f, -0.671559f, 0.555570f, -0.831470f, 0.336890f, -0.941544f, 0.098017f, -0.995185f, -0.146730f, -0.989177f, -0.382683f, -0.923880f, -0.595699f, -0.803208f, -0.773010f, -0.634393f, -0.903989f, -0.427555f, -0.980785f, -0.195090f, -0.998795f, 0.049068f, -0.956940f, 0.290285f, -0.857729f, 0.514103f}; +const float w6N8[30] = {0.956940f, -0.290285f, 0.831470f, -0.555570f, 0.634393f, -0.773010f, 0.382683f, -0.923880f, 0.098017f, -0.995185f, -0.195090f, -0.980785f, -0.471397f, -0.881921f, -0.707107f, -0.707107f, -0.881921f, -0.471397f, -0.980785f, -0.195090f, -0.995185f, 0.098017f, -0.923880f, 0.382683f, -0.773010f, 0.634393f, -0.555570f, 0.831470f, -0.290285f, 0.956940f}; +const float w7N8[30] = {0.941544f, -0.336890f, 0.773010f, -0.634393f, 0.514103f, -0.857729f, 0.195090f, -0.980785f, -0.146730f, -0.989177f, -0.471397f, -0.881921f, -0.740951f, -0.671559f, -0.923880f, -0.382683f, -0.998795f, -0.049068f, -0.956940f, 0.290285f, -0.803208f, 0.595699f, -0.555570f, 0.831470f, -0.242980f, 0.970031f, 0.098017f, 0.995185f, 0.427555f, 0.903989f}; +const float * const w_a[7] = {w1N8, w2N8, w3N8, w4N8, w5N8, w6N8, w7N8}; + + +#define STCP( a, b ) {{ WORD322WORD16( a ), WORD322WORD16( b ) }} + +const PWord16 SineTable512_fx[] = +{ + STCP(0x7fffffff, 0x00000000), STCP(0x7fffd886, 0x006487e3), STCP(0x7fff6216, 0x00c90f88), STCP(0x7ffe9cb2, 0x012d96b1), + STCP(0x7ffd885a, 0x01921d20), STCP(0x7ffc250f, 0x01f6a297), STCP(0x7ffa72d1, 0x025b26d7), STCP(0x7ff871a2, 0x02bfa9a4), + STCP(0x7ff62182, 0x03242abf), STCP(0x7ff38274, 0x0388a9ea), STCP(0x7ff09478, 0x03ed26e6), STCP(0x7fed5791, 0x0451a177), + STCP(0x7fe9cbc0, 0x04b6195d), STCP(0x7fe5f108, 0x051a8e5c), STCP(0x7fe1c76b, 0x057f0035), STCP(0x7fdd4eec, 0x05e36ea9), + STCP(0x7fd8878e, 0x0647d97c), STCP(0x7fd37153, 0x06ac406f), STCP(0x7fce0c3e, 0x0710a345), STCP(0x7fc85854, 0x077501be), + STCP(0x7fc25596, 0x07d95b9e), STCP(0x7fbc040a, 0x083db0a7), STCP(0x7fb563b3, 0x08a2009a), STCP(0x7fae7495, 0x09064b3a), + STCP(0x7fa736b4, 0x096a9049), STCP(0x7f9faa15, 0x09cecf89), STCP(0x7f97cebd, 0x0a3308bd), STCP(0x7f8fa4b0, 0x0a973ba5), + STCP(0x7f872bf3, 0x0afb6805), STCP(0x7f7e648c, 0x0b5f8d9f), STCP(0x7f754e80, 0x0bc3ac35), STCP(0x7f6be9d4, 0x0c27c389), + STCP(0x7f62368f, 0x0c8bd35e), STCP(0x7f5834b7, 0x0cefdb76), STCP(0x7f4de451, 0x0d53db92), STCP(0x7f434563, 0x0db7d376), + STCP(0x7f3857f6, 0x0e1bc2e4), STCP(0x7f2d1c0e, 0x0e7fa99e), STCP(0x7f2191b4, 0x0ee38766), STCP(0x7f15b8ee, 0x0f475bff), + STCP(0x7f0991c4, 0x0fab272b), STCP(0x7efd1c3c, 0x100ee8ad), STCP(0x7ef05860, 0x1072a048), STCP(0x7ee34636, 0x10d64dbd), + STCP(0x7ed5e5c6, 0x1139f0cf), STCP(0x7ec8371a, 0x119d8941), STCP(0x7eba3a39, 0x120116d5), STCP(0x7eabef2c, 0x1264994e), + STCP(0x7e9d55fc, 0x12c8106f), STCP(0x7e8e6eb2, 0x132b7bf9), STCP(0x7e7f3957, 0x138edbb1), STCP(0x7e6fb5f4, 0x13f22f58), + STCP(0x7e5fe493, 0x145576b1), STCP(0x7e4fc53e, 0x14b8b17f), STCP(0x7e3f57ff, 0x151bdf86), STCP(0x7e2e9cdf, 0x157f0086), + STCP(0x7e1d93ea, 0x15e21445), STCP(0x7e0c3d29, 0x16451a83), STCP(0x7dfa98a8, 0x16a81305), STCP(0x7de8a670, 0x170afd8d), + STCP(0x7dd6668f, 0x176dd9de), STCP(0x7dc3d90d, 0x17d0a7bc), STCP(0x7db0fdf8, 0x183366e9), STCP(0x7d9dd55a, 0x18961728), + STCP(0x7d8a5f40, 0x18f8b83c), STCP(0x7d769bb5, 0x195b49ea), STCP(0x7d628ac6, 0x19bdcbf3), STCP(0x7d4e2c7f, 0x1a203e1b), + STCP(0x7d3980ec, 0x1a82a026), STCP(0x7d24881b, 0x1ae4f1d6), STCP(0x7d0f4218, 0x1b4732ef), STCP(0x7cf9aef0, 0x1ba96335), + STCP(0x7ce3ceb2, 0x1c0b826a), STCP(0x7ccda169, 0x1c6d9053), STCP(0x7cb72724, 0x1ccf8cb3), STCP(0x7ca05ff1, 0x1d31774d), + STCP(0x7c894bde, 0x1d934fe5), STCP(0x7c71eaf9, 0x1df5163f), STCP(0x7c5a3d50, 0x1e56ca1e), STCP(0x7c4242f2, 0x1eb86b46), + STCP(0x7c29fbee, 0x1f19f97b), STCP(0x7c116853, 0x1f7b7481), STCP(0x7bf88830, 0x1fdcdc1b), STCP(0x7bdf5b94, 0x203e300d), + STCP(0x7bc5e290, 0x209f701c), STCP(0x7bac1d31, 0x21009c0c), STCP(0x7b920b89, 0x2161b3a0), STCP(0x7b77ada8, 0x21c2b69c), + STCP(0x7b5d039e, 0x2223a4c5), STCP(0x7b420d7a, 0x22847de0), STCP(0x7b26cb4f, 0x22e541af), STCP(0x7b0b3d2c, 0x2345eff8), + STCP(0x7aef6323, 0x23a6887f), STCP(0x7ad33d45, 0x24070b08), STCP(0x7ab6cba4, 0x24677758), STCP(0x7a9a0e50, 0x24c7cd33), + STCP(0x7a7d055b, 0x25280c5e), STCP(0x7a5fb0d8, 0x2588349d), STCP(0x7a4210d8, 0x25e845b6), STCP(0x7a24256f, 0x26483f6c), + STCP(0x7a05eead, 0x26a82186), STCP(0x79e76ca7, 0x2707ebc7), STCP(0x79c89f6e, 0x27679df4), STCP(0x79a98715, 0x27c737d3), + STCP(0x798a23b1, 0x2826b928), STCP(0x796a7554, 0x288621b9), STCP(0x794a7c12, 0x28e5714b), STCP(0x792a37fe, 0x2944a7a2), + STCP(0x7909a92d, 0x29a3c485), STCP(0x78e8cfb2, 0x2a02c7b8), STCP(0x78c7aba2, 0x2a61b101), STCP(0x78a63d11, 0x2ac08026), + STCP(0x78848414, 0x2b1f34eb), STCP(0x786280bf, 0x2b7dcf17), STCP(0x78403329, 0x2bdc4e6f), STCP(0x781d9b65, 0x2c3ab2b9), + STCP(0x77fab989, 0x2c98fbba), STCP(0x77d78daa, 0x2cf72939), STCP(0x77b417df, 0x2d553afc), STCP(0x7790583e, 0x2db330c7), + STCP(0x776c4edb, 0x2e110a62), STCP(0x7747fbce, 0x2e6ec792), STCP(0x77235f2d, 0x2ecc681e), STCP(0x76fe790e, 0x2f29ebcc), + STCP(0x76d94989, 0x2f875262), STCP(0x76b3d0b4, 0x2fe49ba7), STCP(0x768e0ea6, 0x3041c761), STCP(0x76680376, 0x309ed556), + STCP(0x7641af3d, 0x30fbc54d), STCP(0x761b1211, 0x3158970e), STCP(0x75f42c0b, 0x31b54a5e), STCP(0x75ccfd42, 0x3211df04), + STCP(0x75a585cf, 0x326e54c7), STCP(0x757dc5ca, 0x32caab6f), STCP(0x7555bd4c, 0x3326e2c3), STCP(0x752d6c6c, 0x3382fa88), + STCP(0x7504d345, 0x33def287), STCP(0x74dbf1ef, 0x343aca87), STCP(0x74b2c884, 0x34968250), STCP(0x7489571c, 0x34f219a8), + STCP(0x745f9dd1, 0x354d9057), STCP(0x74359cbd, 0x35a8e625), STCP(0x740b53fb, 0x36041ad9), STCP(0x73e0c3a3, 0x365f2e3b), + STCP(0x73b5ebd1, 0x36ba2014), STCP(0x738acc9e, 0x3714f02a), STCP(0x735f6626, 0x376f9e46), STCP(0x7333b883, 0x37ca2a30), + STCP(0x7307c3d0, 0x382493b0), STCP(0x72db8828, 0x387eda8e), STCP(0x72af05a7, 0x38d8fe93), STCP(0x72823c67, 0x3932ff87), + STCP(0x72552c85, 0x398cdd32), STCP(0x7227d61c, 0x39e6975e), STCP(0x71fa3949, 0x3a402dd2), STCP(0x71cc5626, 0x3a99a057), + STCP(0x719e2cd2, 0x3af2eeb7), STCP(0x716fbd68, 0x3b4c18ba), STCP(0x71410805, 0x3ba51e29), STCP(0x71120cc5, 0x3bfdfecd), + STCP(0x70e2cbc6, 0x3c56ba70), STCP(0x70b34525, 0x3caf50da), STCP(0x708378ff, 0x3d07c1d6), STCP(0x70536771, 0x3d600d2c), + STCP(0x7023109a, 0x3db832a6), STCP(0x6ff27497, 0x3e10320d), STCP(0x6fc19385, 0x3e680b2c), STCP(0x6f906d84, 0x3ebfbdcd), + STCP(0x6f5f02b2, 0x3f1749b8), STCP(0x6f2d532c, 0x3f6eaeb8), STCP(0x6efb5f12, 0x3fc5ec98), STCP(0x6ec92683, 0x401d0321), + STCP(0x6e96a99d, 0x4073f21d), STCP(0x6e63e87f, 0x40cab958), STCP(0x6e30e34a, 0x4121589b), STCP(0x6dfd9a1c, 0x4177cfb1), + STCP(0x6dca0d14, 0x41ce1e65), STCP(0x6d963c54, 0x42244481), STCP(0x6d6227fa, 0x427a41d0), STCP(0x6d2dd027, 0x42d0161e), + STCP(0x6cf934fc, 0x4325c135), STCP(0x6cc45698, 0x437b42e1), STCP(0x6c8f351c, 0x43d09aed), STCP(0x6c59d0a9, 0x4425c923), + STCP(0x6c242960, 0x447acd50), STCP(0x6bee3f62, 0x44cfa740), STCP(0x6bb812d1, 0x452456bd), STCP(0x6b81a3cd, 0x4578db93), + STCP(0x6b4af279, 0x45cd358f), STCP(0x6b13fef5, 0x4621647d), STCP(0x6adcc964, 0x46756828), STCP(0x6aa551e9, 0x46c9405c), + STCP(0x6a6d98a4, 0x471cece7), STCP(0x6a359db9, 0x47706d93), STCP(0x69fd614a, 0x47c3c22f), STCP(0x69c4e37a, 0x4816ea86), + STCP(0x698c246c, 0x4869e665), STCP(0x69532442, 0x48bcb599), STCP(0x6919e320, 0x490f57ee), STCP(0x68e06129, 0x4961cd33), + STCP(0x68a69e81, 0x49b41533), STCP(0x686c9b4b, 0x4a062fbd), STCP(0x683257ab, 0x4a581c9e), STCP(0x67f7d3c5, 0x4aa9dba2), + STCP(0x67bd0fbd, 0x4afb6c98), STCP(0x67820bb7, 0x4b4ccf4d), STCP(0x6746c7d8, 0x4b9e0390), STCP(0x670b4444, 0x4bef092d), + STCP(0x66cf8120, 0x4c3fdff4), STCP(0x66937e91, 0x4c9087b1), STCP(0x66573cbb, 0x4ce10034), STCP(0x661abbc5, 0x4d31494b), + STCP(0x65ddfbd3, 0x4d8162c4), STCP(0x65a0fd0b, 0x4dd14c6e), STCP(0x6563bf92, 0x4e210617), STCP(0x6526438f, 0x4e708f8f), + STCP(0x64e88926, 0x4ebfe8a5), STCP(0x64aa907f, 0x4f0f1126), STCP(0x646c59bf, 0x4f5e08e3), STCP(0x642de50d, 0x4faccfab), + STCP(0x63ef3290, 0x4ffb654d), STCP(0x63b0426d, 0x5049c999), STCP(0x637114cc, 0x5097fc5e), STCP(0x6331a9d4, 0x50e5fd6d), + STCP(0x62f201ac, 0x5133cc94), STCP(0x62b21c7b, 0x518169a5), STCP(0x6271fa69, 0x51ced46e), STCP(0x62319b9d, 0x521c0cc2), + STCP(0x61f1003f, 0x5269126e), STCP(0x61b02876, 0x52b5e546), STCP(0x616f146c, 0x53028518), STCP(0x612dc447, 0x534ef1b5), + STCP(0x60ec3830, 0x539b2af0), STCP(0x60aa7050, 0x53e73097), STCP(0x60686ccf, 0x5433027d), STCP(0x60262dd6, 0x547ea073), + STCP(0x5fe3b38d, 0x54ca0a4b), STCP(0x5fa0fe1f, 0x55153fd4), STCP(0x5f5e0db3, 0x556040e2), STCP(0x5f1ae274, 0x55ab0d46), + STCP(0x5ed77c8a, 0x55f5a4d2), STCP(0x5e93dc1f, 0x56400758), STCP(0x5e50015d, 0x568a34a9), STCP(0x5e0bec6e, 0x56d42c99), + STCP(0x5dc79d7c, 0x571deefa), STCP(0x5d8314b1, 0x57677b9d), STCP(0x5d3e5237, 0x57b0d256), STCP(0x5cf95638, 0x57f9f2f8), + STCP(0x5cb420e0, 0x5842dd54), STCP(0x5c6eb258, 0x588b9140), STCP(0x5c290acc, 0x58d40e8c), STCP(0x5be32a67, 0x591c550e), + STCP(0x5b9d1154, 0x59646498), STCP(0x5b56bfbd, 0x59ac3cfd), STCP(0x5b1035cf, 0x59f3de12), STCP(0x5ac973b5, 0x5a3b47ab), + STCP(0x5a82799a, 0x5a82799a) +}; + +/* Lookup-Table for binary logarithm */ +const Word16 ldCoeff[7] = +{ + -32768, -16384, -10923, -8192, -6554, -5461, -4681 + /* -4096, -3641, -3277 */ +}; + +/* Lookup-Table for binary power algorithm */ +/* This table is used for lookup 2^x with x in range [0...1.0[ in steps of 1/32 */ +const UWord32 exp2_tab_long[32] = +{ + 0x40000000,0x4166C34C,0x42D561B4,0x444C0740, + 0x45CAE0F2,0x47521CC6,0x48E1E9BA,0x4A7A77D4, + 0x4C1BF829,0x4DC69CDD,0x4F7A9930,0x51382182, + 0x52FF6B55,0x54D0AD5A,0x56AC1F75,0x5891FAC1, + 0x5A82799A,0x5C7DD7A4,0x5E8451D0,0x60962665, + 0x62B39509,0x64DCDEC3,0x6712460B,0x69540EC9, + 0x6BA27E65,0x6DFDDBCC,0x70666F76,0x72DC8374, + 0x75606374,0x77F25CCE,0x7A92BE8B,0x7D41D96E +}; + +/* Lookup-Table for binary power algorithm */ +/* This table is used for lookup 2^x with x in range [0...1/32[ in steps of 1/1024 */ +const UWord32 exp2w_tab_long[32] = +{ + 0x40000000,0x400B1818,0x4016321B,0x40214E0C, + 0x402C6BE9,0x40378BB4,0x4042AD6D,0x404DD113, + 0x4058F6A8,0x40641E2B,0x406F479E,0x407A7300, + 0x4085A051,0x4090CF92,0x409C00C4,0x40A733E6, + 0x40B268FA,0x40BD9FFF,0x40C8D8F5,0x40D413DD, + 0x40DF50B8,0x40EA8F86,0x40F5D046,0x410112FA, + 0x410C57A2,0x41179E3D,0x4122E6CD,0x412E3152, + 0x41397DCC,0x4144CC3B,0x41501CA0,0x415B6EFB +}; + +/* Lookup-Table for binary power algorithm */ +/* This table is used for lookup 2^x with x in range [0...1/1024[ in steps of 1/32768 */ +const UWord32 exp2x_tab_long[32] = +{ + 0x40000000,0x400058B9,0x4000B173,0x40010A2D, + 0x400162E8,0x4001BBA3,0x4002145F,0x40026D1B, + 0x4002C5D8,0x40031E95,0x40037752,0x4003D011, + 0x400428CF,0x4004818E,0x4004DA4E,0x4005330E, + 0x40058BCE,0x4005E48F,0x40063D51,0x40069613, + 0x4006EED5,0x40074798,0x4007A05B,0x4007F91F, + 0x400851E4,0x4008AAA8,0x4009036E,0x40095C33, + 0x4009B4FA,0x400A0DC0,0x400A6688,0x400ABF4F +}; + +/* square root tables */ +const Word32 SqrtTable[32] = /* Q31 */ +{ + 0x5A82D429, 0x5BEA10FE, 0x5D4BE6E5, 0x5EA89270, 0x60004BE2, 0x615347A1, 0x62A1B68C, 0x63EBC651, + 0x6531A1B5, 0x667370D4, 0x67B1595F, 0x68EB7EC8, 0x6A220277, 0x6B5503F0, 0x6C84A0F9, 0x6DB0F5BD, + 0x6EDA1CE9, 0x70002FC7, 0x7123465A, 0x72437773, 0x7360D8C5, 0x747B7EFA, 0x75937DC4, 0x76A8E7EB, + 0x77BBCF60, 0x78CC4545, 0x79DA5A00, 0x7AE61D3E, 0x7BEF9E07, 0x7CF6EAC2, 0x7DFC113F, 0x7EFF1EC0 +}; + +const Word16 SqrtDiffTable[32] = /* Q21 */ +{ + 0x59CF, 0x5875, 0x572B, 0x55EE, 0x54BF, 0x539C, 0x5284, 0x5177, + 0x5074, 0x4F7A, 0x4E89, 0x4DA1, 0x4CC0, 0x4BE7, 0x4B15, 0x4A4A, + 0x4985, 0x48C6, 0x480C, 0x4758, 0x46AA, 0x4600, 0x455B, 0x44BA, + 0x441D, 0x4385, 0x42F1, 0x4260, 0x41D3, 0x414A, 0x40C3, 0x4040 +}; + +const Word32 ISqrtTable[32] = /* Q31 */ +{ + 0x7FFE7F85, 0x7E0A4E25, 0x7C2C56C7, 0x7A63002C, 0x78ACD922, 0x7708939D, 0x75750088, 0x73F10C2D, + 0x727BBB1A, 0x71142774, 0x6FB97EA5, 0x6E6AFF54, 0x6D27F79D, 0x6BEFC388, 0x6AC1CBA4, 0x699D83DA, + 0x68826A53, 0x6770068E, 0x6665E882, 0x6563A7DF, 0x6468E364, 0x63754043, 0x62886999, 0x61A20FEE, + 0x60C1E8C8, 0x5FE7AE45, 0x5F131EBE, 0x5E43FC76, 0x5D7A0D4F, 0x5CB51A81, 0x5BF4F061, 0x5B395E26 +}; + +const Word16 ISqrtDiffTable[32] = /* Q21 */ +{ + 0x7D0C, 0x777E, 0x7256, 0x6D8A, 0x6911, 0x64E5, 0x60FD, 0x5D54, + 0x59E5, 0x56AA, 0x53A0, 0x50C2, 0x4E0D, 0x4B7E, 0x4912, 0x46C6, + 0x4499, 0x4288, 0x4090, 0x3EB1, 0x3CE9, 0x3B36, 0x3996, 0x380A, + 0x368F, 0x3524, 0x33C9, 0x327C, 0x313D, 0x300B, 0x2EE5, 0x2DCA +}; + +/* 1/x tables */ +const Word32 InvTable[32] = /* Q31 */ +{ + 0x7FFBFE40, 0x7C1B608E, 0x78752176, 0x750440BA, 0x71C44C49, 0x6EB14D0A, 0x6BC7B6B4, 0x69045A19, + 0x6664598A, 0x63E51EE2, 0x61845308, 0x5F3FD698, 0x5D15BB8E, 0x5B043FD0, 0x5909C861, 0x5724DD3C, + 0x555425B2, 0x53966532, 0x51EA787F, 0x504F5331, 0x4EC3FD84, 0x4D479267, 0x4BD93DBE, 0x4A783ADC, + 0x4923D31D, 0x47DB5CAE, 0x469E3974, 0x456BD608, 0x4443A8D9, 0x43253159, 0x420FF746, 0x41038A01 +}; + +const Word16 InvDiffTable[32] = /* Q20 */ +{ + 0x7C14, 0x74C8, 0x6E1C, 0x67FF, 0x6260, 0x5D33, 0x586C, 0x5400, + 0x4FE7, 0x4C19, 0x4890, 0x4543, 0x422F, 0x3F4F, 0x3C9D, 0x3A17, + 0x37B8, 0x357E, 0x3365, 0x316B, 0x2F8D, 0x2DCB, 0x2C20, 0x2A8D, + 0x290F, 0x27A4, 0x264C, 0x2506, 0x23CF, 0x22A7, 0x218E, 0x2081 +}; + +const float sns_vq_cdk1[8*32] = { + -2.0529254143208289e+00f, -2.0105187772519200e+00f, -1.9181418840663027e+00f, -2.0529955931580051e+00f, -1.7965682581646625e+00f, -1.2350476819733338e+00f, -7.4106681145668685e-01f, -1.3500749433562539e-01f, + +6.8395648103934958e-01f, -5.6618076612019363e-01f, -1.1629656439143417e+00f, -1.6994296999691509e+00f, -1.7665333688662666e+00f, -1.4601240490692278e+00f, -1.0934184548732562e+00f, -5.8974136946769384e-01f, + -2.7268374190678193e+00f, -2.1818157040224055e+00f, -6.0427109270377999e-01f, +3.1651466770121833e-01f, +9.3430762386407940e-01f, +1.0478771837003078e+00f, +9.9559582196380947e-01f, +1.1082403839542609e+00f, + +2.4379206786519574e+00f, +1.9640422580297323e+00f, +9.2771600149270417e-01f, +9.4135273318020941e-03f, -6.4013168732630366e-01f, -1.0138049129223088e+00f, -1.0924849368417169e+00f, -9.1129148479978594e-01f, + +8.1762121316616565e-01f, -1.9433974959365836e-02f, -4.0054937117179751e-01f, -3.9231079150228149e-01f, -2.9970406532808125e-01f, -6.2996056616087495e-02f, +3.7544100964377108e-01f, +6.3685372354777436e-01f, + +1.4734834246724329e+00f, +2.3539621556904251e+00f, +9.7194661426112050e-01f, -5.4110096556162990e-01f, -9.8129311847374545e-01f, -6.1342289097457547e-01f, +3.7249272152905366e-01f, +8.1252213656497096e-01f, + -1.2496145961286331e+00f, -3.2376394756447752e-01f, +5.1439178441534027e-02f, +1.0005059991983459e-01f, +2.3749822119608346e-01f, +4.0542724931792579e-01f, +5.1033138353497232e-01f, +5.5694404671095077e-01f, + +7.7965743766052975e-01f, +2.1917885215778097e+00f, +1.7164750043876311e+00f, +5.7945306635665195e-01f, -1.0190291924038120e-01f, -4.0418854005812310e-01f, -4.7849155803986132e-01f, -3.4725769238259874e-01f, + +6.8865034807898129e-01f, +5.7566331510263680e-01f, -7.7725260497355977e-03f, -5.3794851427474544e-01f, -7.6313855691212973e-01f, -7.8413803908382473e-01f, -7.0161107722315574e-01f, -4.8903452069978415e-01f, + +1.6928828230225725e+00f, +9.3495589460148931e-01f, +3.5426821621575499e-01f, +3.9507891687964890e-02f, -7.9631988607824541e-02f, -1.6624589421972935e-01f, -1.6180598135213178e-01f, -1.2860376999895359e-01f, + -1.6962541680165768e+00f, +4.3456061122651995e-01f, +1.0710566866483171e+00f, +1.3249974344239270e+00f, +1.0825630027900910e+00f, +9.0621333090389167e-01f, +6.5428541538000140e-01f, +6.7283424156333382e-01f, + +4.5763916137396308e+00f, +4.0870427709381518e+00f, +2.6750799962096261e+00f, +1.4487891616901025e+00f, +2.4432209950451603e-01f, -5.4383244175422862e-01f, -9.4142251186129933e-01f, -1.0862058366913647e+00f, + +1.1883989487611160e+00f, +1.1685324900978113e+00f, +9.3045980943772877e-01f, +8.3738457417173884e-01f, +6.3496480700237246e-01f, +4.6405143429051326e-01f, +3.1705534227338888e-01f, +2.0799507760170197e-01f, + +2.8980578835865609e+00f, +3.0880495072396617e+00f, +1.8680019598806248e+00f, +7.0446466488259230e-01f, +1.0107302845552169e-01f, -2.8986489567349910e-01f, -4.1462748482286188e-01f, -3.6206036514823836e-01f, + -1.7524799389036466e-01f, +1.1936698995397648e+00f, +1.6088971749375909e+00f, +1.7111901074418125e+00f, +1.4837525009734551e+00f, +5.2536808756057463e-01f, -3.1226889149907566e-01f, -3.5746958704581933e-01f, + +9.0352696786286879e-01f, +2.4731406386331605e+00f, +2.9079925242729416e+00f, +2.7918041274045429e+00f, +2.2373843929092465e+00f, +8.5208847870338755e-01f, -7.6200320575426320e-02f, -2.5316053664429367e-01f, + -1.1865763437968528e+00f, -7.4234595628060440e-01f, -6.0141100860138463e-01f, -8.5065089175547848e-01f, -8.8329724313055402e-01f, -6.5351381126344021e-01f, -5.0230651881879618e-01f, -2.3359707426927168e-01f, + +2.7673589888377261e+00f, +6.6328569264593351e-01f, -4.1472488624881343e-01f, -9.3187436659797018e-01f, -1.0754140202622839e+00f, -1.0146723389090857e+00f, -8.7888946611264573e-01f, -6.0836606213569688e-01f, + -1.8124429341308173e+00f, -9.7828066142280434e-01f, +6.5968430845517978e-01f, +2.1854499449267628e+00f, +2.2517483941731826e+00f, +2.3821501109065295e+00f, +1.9235238012956650e+00f, +1.5065083288921912e+00f, + +4.9050283992558246e+00f, +2.4264119698434983e+00f, +8.3367299614637902e-01f, -4.3119484392510427e-02f, -5.8100382033177300e-01f, -7.7353747986816990e-01f, -8.7895223350767071e-01f, -8.6819816920933113e-01f, + +6.5228388674538984e-01f, +1.1174683594915380e-01f, +1.2383281142011383e-01f, +6.0151217547540869e-01f, +9.5444246174773772e-01f, +1.2805750123888453e+00f, +9.2140926443564275e-01f, +5.7786881373204924e-01f, + +1.9490989723028713e+00f, +2.8004262751807882e+00f, +1.9081816065970161e+00f, +3.7248785750983177e-01f, +1.3095620385608037e-01f, +7.9016424306166244e-01f, +1.1640502521465221e+00f, +1.0066783002173452e+00f, + -1.0171864644867654e-01f, +1.7954757784640871e+00f, +1.8915637038163424e+00f, +1.0909542570620605e+00f, +6.1888445783828194e-01f, +7.6574083569028828e-01f, +8.9561325653114987e-01f, +8.0797624213033170e-01f, + +1.9350543800926379e+00f, +3.2339385307849722e+00f, +3.0806729276317419e+00f, +2.1684844197871249e+00f, +7.8035951982399498e-01f, -6.7854327548476567e-01f, -9.6732224945258960e-01f, -5.8068474286758409e-01f, + -1.5383985945543574e-01f, +7.1583722374971992e-01f, +5.8674384505519706e-01f, +3.7092544478085621e-01f, +1.0970155384441491e-01f, -2.3854313229153577e-02f, -5.3508967318497622e-02f, +3.3979575877473786e-02f, + +2.7095625819635165e+00f, +1.7832208238203791e+00f, +9.6783753432609421e-01f, +5.8919108500645523e-01f, +4.1191953120474317e-01f, +1.9592175852184501e-01f, -1.0134844291353281e-02f, -1.6725603195278577e-01f, + -2.6560188981865329e-01f, +1.4059113655935889e+00f, +1.9844196049902063e+00f, +2.4291429998935334e+00f, +2.2837873843112892e+00f, +1.8570922995202830e+00f, +1.2056879204230433e+00f, +8.4717915626409468e-01f, + +3.1939221203717074e+00f, +3.7963726820313615e+00f, +3.2748823221663406e+00f, +2.4724357608035472e+00f, +1.6860933687497499e+00f, +6.4628696101838046e-01f, -7.8170867286998971e-02f, -6.1406792037327973e-01f, + +1.6686627356973500e+00f, +2.4375118241337517e+00f, +2.2118134266295129e+00f, +1.4754862720822910e+00f, +1.0100987843177478e+00f, +4.8216927165041135e-01f, +5.0597779432044222e-02f, -7.2090396257990311e-02f, + +3.4953550651375287e+00f, +3.2379627985821369e+00f, +2.1155532232841976e+00f, +1.3293556793682053e+00f, +1.0159800928862721e+00f, +6.8710150035919371e-01f, +5.0950588745743997e-01f, +2.0092204555514792e-01f, + +1.6537233329850265e+00f, +1.8429927128987775e+00f, +1.5795688890212489e+00f, +1.5313117335176101e+00f, +1.4688051742099697e+00f, +1.3047757088193301e+00f, +9.3703047481911916e-01f, +6.6034404507297240e-01f, + +1.9642176175501569e+00f, +2.9388625018759811e+00f, +2.9051270203314714e+00f, +2.2145871562616142e+00f, +1.8151504726187455e+00f, +1.4766756664819134e+00f, +1.0710276243190799e+00f, +6.1861320930710639e-01f +}; + +const float sns_vq_cdk2[8*32] = { + -5.9829995937529679e-01f, -1.6330921039310822e+00f, -2.2069628561771211e+00f, -2.3101968732645872e+00f, -2.2987624447001700e+00f, -2.2585659584659474e+00f, -2.2426863949716420e+00f, -2.2717425510152180e+00f, + -1.4313340820994043e+00f, -1.7500847356351696e+00f, -1.7795938232358199e+00f, -1.7213803415353539e+00f, -1.6610776464291162e+00f, -1.6069804294990451e+00f, -1.5625217472935489e+00f, -1.5641247494491251e+00f, + -4.2712987825717169e-01f, -8.1657540705874065e-01f, -1.1438786300941690e+00f, -1.5047514473946468e+00f, -1.8039927073343207e+00f, -1.9709309014182719e+00f, -2.0721822202754367e+00f, -2.2015067008471854e+00f, + -8.8390021618372749e-01f, -9.1027146153915306e-01f, -8.4148501893353445e-01f, -7.0803242455046478e-01f, -4.0873435152568971e-01f, -5.8364530253510127e-02f, +1.5450950372912373e-01f, +2.3879767518520115e-01f, + +2.2959495262308716e-01f, -4.5380527270641730e-01f, -1.2610303555144773e+00f, -1.9593984147017431e+00f, -2.5055916891711632e+00f, -2.7888667896972388e+00f, -2.9113125863020777e+00f, -2.9748256948291001e+00f, + -1.1488842521346578e+00f, -1.3517692148186562e+00f, -1.3594824205078988e+00f, -1.2204819600745185e+00f, -9.1363085887906581e-01f, -6.8205390481915806e-01f, -5.8474638022763137e-01f, -6.3572794299637214e-01f, + -7.7093095554781843e-01f, -9.4474580908674310e-01f, -9.4836193194533303e-01f, -9.4516185118638463e-01f, -1.0483710354237581e+00f, -1.1355351751536940e+00f, -1.2428754319298756e+00f, -1.3831917119547590e+00f, + -9.3476137541952931e-01f, -7.0790164340965811e-01f, -3.3885900459516044e-01f, +8.2267549037198462e-02f, +4.8079994558165973e-01f, +8.0682939355530092e-01f, +1.0305358697421620e+00f, +1.0235050392855534e+00f, + +1.0095585388252226e+00f, -1.5967777106488176e-01f, -2.2123760679560007e+00f, -2.4162196770688293e+00f, -2.1066059048135193e+00f, -1.8818990363917070e+00f, -1.9958495939733885e+00f, -2.3481921543456847e+00f, + +9.2392277358713179e-02f, -1.8364442239470730e-01f, -5.9563356599054251e-01f, -1.0147004796192145e+00f, -1.3476180323301636e+00f, -1.5136187252106814e+00f, -1.5799100551406959e+00f, -1.7192022915180234e+00f, + -1.4222957040291027e-02f, -1.7371797028437352e-01f, -3.0805783645739226e-01f, -4.0484411256102021e-01f, -6.6432144720337050e-01f, -1.0344124279519349e+00f, -1.6814321622332238e+00f, -2.5032237993558693e+00f, + +6.8743182828212471e-02f, +3.3095426522069737e-01f, +5.0002819580392865e-01f, +5.6165737804402860e-01f, +5.0172311732338448e-01f, +3.6961533646464034e-01f, +8.5026798082935839e-02f, -3.9473330479310409e-01f, + +1.0356440140522545e+00f, +7.8065342952998484e-01f, +6.7193695552111687e-02f, -9.5261546302001587e-01f, -2.0142463788396388e+00f, -2.7767542927506610e+00f, -3.1928041080758338e+00f, -3.4042594311363201e+00f, + -6.6289350610256359e-01f, -6.3896764348680091e-01f, -5.1207254963552118e-01f, -3.6335660396488040e-01f, -2.8247932520862895e-01f, -3.1477486911353381e-01f, -4.4809778805307687e-01f, -6.9186118822875298e-01f, + +7.9969719144308171e-02f, +2.1588869900646174e-01f, +3.0323707912603959e-01f, +2.6884673422742911e-01f, +5.9642290590166340e-02f, -2.8613663980468629e-01f, -7.9406912376026706e-01f, -1.4470063450324298e+00f, + -2.0240948732059452e-01f, +2.3334712655850515e-01f, +5.7657451283939798e-01f, +7.9742677228839842e-01f, +9.3220814515190065e-01f, +1.0323450144255806e+00f, +1.0118085786908606e+00f, +7.9014188629614879e-01f, + -7.1530830084194669e-02f, -1.2396351139455990e+00f, -2.0842499795217195e+00f, -1.3035503744881123e+00f, -8.3471992091295932e-01f, -1.1295869482135590e+00f, -1.7132725973269993e+00f, -2.1802158117711343e+00f, + -1.7835942638423960e-01f, -7.1247931965515532e-01f, -1.5124017210947220e+00f, -1.9967695368388680e+00f, -1.8783401399959028e+00f, -1.4021324347049549e+00f, -1.0637376079630234e+00f, -1.1080152582418752e+00f, + +1.0480932547841233e+00f, +2.7493060468886921e-01f, -1.1919132498368252e+00f, -1.2523434724836580e+00f, -7.8936067946054767e-01f, -8.2091162445205956e-01f, -1.3128033132740213e+00f, -1.9655091841161074e+00f, + -3.3232308742031469e-01f, -2.2713591199678415e-01f, -1.4351679017954885e-01f, -1.9801985565791998e-02f, +1.0057467598256911e-01f, +2.2696827939185557e-01f, +3.0695375436198624e-01f, +2.2875897090753330e-01f, + +3.4676185796153502e-01f, -1.0768837168056489e-01f, -6.9753922421077807e-01f, -1.0937050061788010e+00f, -1.5428629138891437e+00f, -2.0449896355500123e+00f, -2.4848880613940572e+00f, -2.8583647439574880e+00f, + -1.2173513563721174e-02f, -3.2908222329502096e-01f, -7.4562386900667521e-01f, -1.0159346083066496e+00f, -9.9134754982937601e-01f, -8.0708475073517449e-01f, -5.9033001697337439e-01f, -5.3497643414524321e-01f, + -1.0362333131951586e-01f, -2.6988877087476748e-01f, -3.8890071054155473e-01f, -4.9037107401879965e-01f, -5.6504591412573135e-01f, -7.3336953439609320e-01f, -9.9258959592254403e-01f, -1.3661070412637724e+00f, + -7.9157092539986307e-01f, -3.3641122720876027e-01f, +2.9168895215304702e-01f, +1.0181013149521261e+00f, +1.5982627043961528e+00f, +1.9868228787387316e+00f, +2.1282934389276504e+00f, +1.9646952813708398e+00f, + +8.5453347281306224e-01f, +8.1178943134578940e-01f, -4.8818346255935796e-01f, -2.1067304958054955e+00f, -2.5063149014598722e+00f, -2.0640557329267200e+00f, -1.6543474135830516e+00f, -1.7651753795641250e+00f, + +6.2358146522917657e-01f, +5.4834889364422190e-01f, +1.7179524311839983e-01f, -3.5307730840525375e-01f, -7.7064726884538126e-01f, -1.0122724639555478e+00f, -1.1610381095678584e+00f, -1.4059777048358271e+00f, + +7.4374029892860283e-01f, +9.2218263151186131e-01f, +7.8921361199673412e-01f, +5.4697537641890215e-01f, +3.4695498575470718e-02f, -6.0728616781597766e-01f, -1.5817464846714542e+00f, -2.9492076413515940e+00f, + +1.0792513778563164e+00f, +1.4361817236342909e+00f, +1.4897259644477068e+00f, +1.4980968655148907e+00f, +1.3061906859741226e+00f, +9.2722643966101292e-01f, +4.6901200392574449e-01f, -8.4108696494310742e-02f, + +8.5358364275519205e-01f, +6.0645747733831856e-01f, +2.0465300574744516e-01f, -3.7181339249044437e-01f, -1.0727735914037746e+00f, -1.6784774674483536e+00f, -2.1020318554063260e+00f, -2.5024013237162377e+00f, + +1.2794365477031622e-01f, +1.2747703630869173e-01f, -4.1758739312140455e-02f, -2.4311752788462185e-01f, -3.1778646043737568e-01f, -2.8915217065224763e-01f, -2.9094454849599488e-01f, -4.4820832489443191e-01f, + +1.2951853228518271e+00f, +9.5620359941142952e-01f, +5.3144852217798388e-01f, +2.1179514725221937e-01f, -6.5987484250824083e-02f, -3.2087563737255587e-01f, -5.4468525409236357e-01f, -8.8065574221328113e-01f, + -1.0568174530545921e-02f, +8.7151888563731761e-01f, +1.5660992592896033e+00f, +1.9198797896705255e+00f, +2.0755726094083351e+00f, +2.1798356493630360e+00f, +2.0711596722334082e+00f, +1.7022476043512389e+00f +}; + +const float tcx_mdct_window_48[420] = +{ + 0.00186999f , 0.00560996f , 0.00934984f , 0.01308960f , 0.01682917f , 0.02056850f , 0.02430755f , 0.02804626f , 0.03178458f , 0.03552244f , + 0.03925982f , 0.04299664f , 0.04673287f , 0.05046843f , 0.05420330f , 0.05793741f , 0.06167070f , 0.06540313f , 0.06913465f , 0.07286520f , + 0.07659473f , 0.08032320f , 0.08405053f , 0.08777669f , 0.09150162f , 0.09522527f , 0.09894760f , 0.10266854f , 0.10638804f , 0.11010605f , + 0.11382252f , 0.11753740f , 0.12125064f , 0.12496217f , 0.12867197f , 0.13237998f , 0.13608611f , 0.13979036f , 0.14349262f , 0.14719291f , + 0.15089111f , 0.15458722f , 0.15828118f , 0.16197290f , 0.16566236f , 0.16934951f , 0.17303430f , 0.17671664f , 0.18039654f , 0.18407391f , + 0.18774869f , 0.19142085f , 0.19509032f , 0.19875708f , 0.20242107f , 0.20608221f , 0.20974047f , 0.21339579f , 0.21704814f , 0.22069745f , + 0.22434367f , 0.22798675f , 0.23162664f , 0.23526330f , 0.23889665f , 0.24252668f , 0.24615330f , 0.24977650f , 0.25339618f , 0.25701234f , + 0.26062489f , 0.26423380f , 0.26783898f , 0.27144048f , 0.27503812f , 0.27863196f , 0.28222188f , 0.28580785f , 0.28938982f , 0.29296774f , + 0.29654160f , 0.30011126f , 0.30367675f , 0.30723801f , 0.31079495f , 0.31434754f , 0.31789574f , 0.32143947f , 0.32497874f , 0.32851344f , + 0.33204356f , 0.33556902f , 0.33908981f , 0.34260586f , 0.34611708f , 0.34962347f , 0.35312498f , 0.35662156f , 0.36011314f , 0.36359966f , + 0.36708114f , 0.37055746f , 0.37402859f , 0.37749448f , 0.38095513f , 0.38441044f , 0.38786036f , 0.39130485f , 0.39474389f , 0.39817739f , + 0.40160531f , 0.40502763f , 0.40844429f , 0.41185522f , 0.41526040f , 0.41865978f , 0.42205328f , 0.42544088f , 0.42882255f , 0.43219820f , + 0.43556780f , 0.43893135f , 0.44228873f , 0.44563991f , 0.44898486f , 0.45232356f , 0.45565590f , 0.45898187f , 0.46230146f , 0.46561456f , + 0.46892112f , 0.47222117f , 0.47551456f , 0.47880134f , 0.48208141f , 0.48535472f , 0.48862126f , 0.49188098f , 0.49513379f , 0.49837968f , + 0.50161862f , 0.50485051f , 0.50807536f , 0.51129311f , 0.51450372f , 0.51770711f , 0.52090323f , 0.52409208f , 0.52727365f , 0.53044778f , + 0.53361452f , 0.53677386f , 0.53992558f , 0.54306978f , 0.54620641f , 0.54933536f , 0.55245668f , 0.55557030f , 0.55867606f , 0.56177408f , + 0.56486416f , 0.56794637f , 0.57102066f , 0.57408696f , 0.57714522f , 0.58019543f , 0.58323747f , 0.58627141f , 0.58929712f , 0.59231454f , + 0.59532380f , 0.59832466f , 0.60131711f , 0.60430121f , 0.60727680f , 0.61024398f , 0.61320257f , 0.61615258f , 0.61909395f , 0.62202674f , + 0.62495077f , 0.62786609f , 0.63077259f , 0.63367027f , 0.63655913f , 0.63943905f , 0.64231002f , 0.64517200f , 0.64802498f , 0.65086889f , + 0.65370369f , 0.65652937f , 0.65934587f , 0.66215312f , 0.66495109f , 0.66773981f , 0.67051917f , 0.67328912f , 0.67604965f , 0.67880082f , + 0.68154240f , 0.68427444f , 0.68699700f , 0.68970984f , 0.69241309f , 0.69510663f , 0.69779050f , 0.70046461f , 0.70312881f , 0.70578331f , + 0.70842785f , 0.71106249f , 0.71368724f , 0.71630198f , 0.71890670f , 0.72150135f , 0.72408593f , 0.72666037f , 0.72922462f , 0.73177868f , + 0.73432255f , 0.73685610f , 0.73937935f , 0.74189228f , 0.74439484f , 0.74688697f , 0.74936867f , 0.75183988f , 0.75430053f , 0.75675064f , + 0.75919020f , 0.76161915f , 0.76403743f , 0.76644498f , 0.76884186f , 0.77122796f , 0.77360326f , 0.77596778f , 0.77832144f , 0.78066421f , + 0.78299606f , 0.78531700f , 0.78762686f , 0.78992575f , 0.79221362f , 0.79449034f , 0.79675603f , 0.79901052f , 0.80125386f , 0.80348599f , + 0.80570680f , 0.80791646f , 0.81011480f , 0.81230175f , 0.81447738f , 0.81664157f , 0.81879437f , 0.82093573f , 0.82306564f , 0.82518393f , + 0.82729077f , 0.82938600f , 0.83146966f , 0.83354163f , 0.83560199f , 0.83765066f , 0.83968759f , 0.84171283f , 0.84372622f , 0.84572780f , + 0.84771764f , 0.84969556f , 0.85166162f , 0.85361582f , 0.85555798f , 0.85748821f , 0.85940647f , 0.86131269f , 0.86320680f , 0.86508894f , + 0.86695892f , 0.86881679f , 0.87066251f , 0.87249607f , 0.87431735f , 0.87612653f , 0.87792331f , 0.87970787f , 0.88148010f , 0.88324010f , + 0.88498765f , 0.88672286f , 0.88844568f , 0.89015603f , 0.89185393f , 0.89353943f , 0.89521235f , 0.89687276f , 0.89852065f , 0.90015596f , + 0.90177864f , 0.90338880f , 0.90498626f , 0.90657103f , 0.90814322f , 0.90970266f , 0.91124934f , 0.91278332f , 0.91430449f , 0.91581285f , + 0.91730851f , 0.91879123f , 0.92026114f , 0.92171818f , 0.92316234f , 0.92459357f , 0.92601186f , 0.92741722f , 0.92880958f , 0.93018895f , + 0.93155533f , 0.93290865f , 0.93424892f , 0.93557620f , 0.93689030f , 0.93819135f , 0.93947929f , 0.94075406f , 0.94201565f , 0.94326407f , + 0.94449931f , 0.94572133f , 0.94693017f , 0.94812572f , 0.94930798f , 0.95047700f , 0.95163274f , 0.95277512f , 0.95390421f , 0.95501995f , + 0.95612234f , 0.95721138f , 0.95828700f , 0.95934916f , 0.96039802f , 0.96143335f , 0.96245527f , 0.96346366f , 0.96445870f , 0.96544015f , + 0.96640813f , 0.96736264f , 0.96830356f , 0.96923089f , 0.97014475f , 0.97104502f , 0.97193170f , 0.97280478f , 0.97366422f , 0.97451007f , + 0.97534233f , 0.97616094f , 0.97696584f , 0.97775710f , 0.97853470f , 0.97929859f , 0.98004884f , 0.98078531f , 0.98150808f , 0.98221713f , + 0.98291242f , 0.98359400f , 0.98426181f , 0.98491579f , 0.98555607f , 0.98618257f , 0.98679525f , 0.98739409f , 0.98797917f , 0.98855042f , + 0.98910779f , 0.98965138f , 0.99018115f , 0.99069703f , 0.99119908f , 0.99168724f , 0.99216151f , 0.99262190f , 0.99306846f , 0.99350113f , + 0.99391985f , 0.99432468f , 0.99471563f , 0.99509263f , 0.99545574f , 0.99580491f , 0.99614018f , 0.99646151f , 0.99676889f , 0.99706233f , + 0.99734181f , 0.99760735f , 0.99785894f , 0.99809659f , 0.99832022f , 0.99852991f , 0.99872565f , 0.99890745f , 0.99907523f , 0.99922901f , + 0.99936891f , 0.99949473f , 0.99960661f , 0.99970454f , 0.99978846f , 0.99985838f , 0.99991435f , 0.99995631f , 0.99998426f , 0.99999827f , +}; + +const float tcx_mdct_window_half_48[180] = +{ + 0.00436331f , 0.01308960f , 0.02181488f , 0.03053851f , 0.03925982f , 0.04797813f , 0.05669279f , 0.06540313f , 0.07410849f , 0.08280820f , + 0.09150162f , 0.10018806f , 0.10886688f , 0.11753739f , 0.12619896f , 0.13485092f , 0.14349262f , 0.15212339f , 0.16074257f , 0.16934951f , + 0.17794354f , 0.18652403f , 0.19509032f , 0.20364176f , 0.21217766f , 0.22069743f , 0.22920039f , 0.23768589f , 0.24615328f , 0.25460196f , + 0.26303121f , 0.27144045f , 0.27982903f , 0.28819627f , 0.29654157f , 0.30486432f , 0.31316379f , 0.32143945f , 0.32969064f , 0.33791670f , + 0.34611705f , 0.35429105f , 0.36243802f , 0.37055743f , 0.37864861f , 0.38671094f , 0.39474386f , 0.40274671f , 0.41071883f , 0.41865975f , + 0.42656875f , 0.43444523f , 0.44228870f , 0.45009845f , 0.45787391f , 0.46561453f , 0.47331968f , 0.48098877f , 0.48862121f , 0.49621648f , + 0.50377399f , 0.51129311f , 0.51877326f , 0.52621394f , 0.53361452f , 0.54097444f , 0.54829323f , 0.55557024f , 0.56280494f , 0.56999677f , + 0.57714516f , 0.58424968f , 0.59130967f , 0.59832460f , 0.60529399f , 0.61221731f , 0.61909395f , 0.62592345f , 0.63270533f , 0.63943899f , + 0.64612401f , 0.65275973f , 0.65934581f , 0.66588163f , 0.67236680f , 0.67880076f , 0.68518299f , 0.69151300f , 0.69779044f , 0.70401472f , + 0.71018535f , 0.71630198f , 0.72236395f , 0.72837096f , 0.73432249f , 0.74021810f , 0.74605739f , 0.75183982f , 0.75756502f , 0.76323247f , + 0.76884180f , 0.77439266f , 0.77988446f , 0.78531694f , 0.79068959f , 0.79600197f , 0.80125380f , 0.80644459f , 0.81157398f , 0.81664157f , + 0.82164693f , 0.82658976f , 0.83146960f , 0.83628613f , 0.84103900f , 0.84572780f , 0.85035223f , 0.85491186f , 0.85940641f , 0.86383545f , + 0.86819881f , 0.87249601f , 0.87672675f , 0.88089073f , 0.88498765f , 0.88901716f , 0.89297891f , 0.89687276f , 0.90069824f , 0.90445518f , + 0.90814316f , 0.91176200f , 0.91531146f , 0.91879117f , 0.92220098f , 0.92554051f , 0.92880958f , 0.93200785f , 0.93513519f , 0.93819135f , + 0.94117600f , 0.94408906f , 0.94693011f , 0.94969910f , 0.95239580f , 0.95501995f , 0.95757139f , 0.96004987f , 0.96245521f , 0.96478730f , + 0.96704590f , 0.96923089f , 0.97134209f , 0.97337925f , 0.97534233f , 0.97723109f , 0.97904545f , 0.98078525f , 0.98245043f , 0.98404068f , + 0.98555607f , 0.98699635f , 0.98836148f , 0.98965138f , 0.99086589f , 0.99200493f , 0.99306846f , 0.99405634f , 0.99496853f , 0.99580491f , + 0.99656552f , 0.99725020f , 0.99785894f , 0.99839169f , 0.99884838f , 0.99922901f , 0.99953359f , 0.99976200f , 0.99991435f , 0.99999046f , +}; + +const float tcx_mdct_window_trans_48[60] = +{ + 0.01308960f , 0.03925982f , 0.06540313f , 0.09150162f , 0.11753740f , 0.14349262f , 0.16934951f , 0.19509032f , 0.22069745f , 0.24615330f , + 0.27144045f , 0.29654160f , 0.32143945f , 0.34611708f , 0.37055743f , 0.39474389f , 0.41865975f , 0.44228873f , 0.46561453f , 0.48862126f , + 0.51129311f , 0.53361452f , 0.55557024f , 0.57714522f , 0.59832460f , 0.61909395f , 0.63943899f , 0.65934587f , 0.67880076f , 0.69779050f , + 0.71630198f , 0.73432255f , 0.75183982f , 0.76884186f , 0.78531694f , 0.80125386f , 0.81664157f , 0.83146966f , 0.84572780f , 0.85940641f , + 0.87249607f , 0.88498765f , 0.89687276f , 0.90814316f , 0.91879123f , 0.92880958f , 0.93819135f , 0.94693011f , 0.95501995f , 0.96245527f , + 0.96923089f , 0.97534233f , 0.98078531f , 0.98555607f , 0.98965138f , 0.99306846f , 0.99580491f , 0.99785894f , 0.99922901f , 0.99991435f , +}; + + +/*----------------------------------------------------------------------------------* + * SWB TBE LSF tables (1.75 kbps) + *----------------------------------------------------------------------------------*/ + +const float sigma_BWE[] = { + 0.007921463476314f, 0.007777463575548f, 0.008177571366090f, 0.008137429089606f, 0.008964571099066f, + 0.009613750221879f, 0.018255917586799f, 0.018995351636606f, /* for 4 bits first stage */ + 0.008809121277345f, 0.008799007638233f, 0.009070002122415f, 0.009080199707624f, 0.009739951681282f, + 0.010572954192948f, 0.018255917586799f, 0.018995351636606f }; /* for 3 bits first stage */ + + +const float inv_sigma_BWE[] = { + 126.2392994665869f, 128.5766227364854f, 122.2856952550425f, 122.8889356808437f, 111.5502335749417f, + 104.0176806054527f, 54.7767591108706f, 52.6444584512409f, /* for 4 bits first stage */ + 113.5187005055512f, 113.6491796705346f, 110.2535574416955f, 110.1297363713734f, 102.6699138479089f, + 94.5809450935691f, 54.7767591108706f, 52.6444584512409f /* for 3 bits fiest stage */ + }; + +const float SHB_LSF_mean[10] = { + 0.04131f, 0.08078f, 0.12348f, 0.16567f, 0.21045f, 0.25449f, 0.30101f, 0.34693f, 0.39605f, 0.44428f +}; + +/* 4 bit VQ first stage */ +/* An 6-by-16 matrix */ +const float SHB_LSF_VQ4[96] = { + 0.00458f, 0.00158f, -0.01548f, -0.03011f, -0.03405f, -0.02881f, + -0.00563f, -0.00235f, 0.00290f, 0.00711f, 0.01343f, 0.01517f, + -0.00353f, -0.00329f, -0.00335f, -0.00740f, -0.01364f, -0.01809f, + 0.01182f, 0.02439f, 0.03457f, 0.03855f, 0.03844f, 0.03426f, + -0.00393f, -0.01831f, -0.03707f, -0.04240f, -0.04027f, -0.03102f, + 0.01627f, 0.01295f, 0.00453f, -0.00382f, -0.01155f, -0.01531f, + -0.01031f, -0.01803f, -0.01792f, -0.01925f, -0.02185f, -0.02290f, + 0.01540f, 0.02593f, 0.02290f, 0.01553f, 0.00715f, 0.00208f, + 0.00539f, -0.00543f, -0.01244f, 0.01000f, 0.00631f, 0.00066f, + -0.00329f, 0.01043f, 0.01291f, 0.00806f, -0.00054f, -0.00551f, + -0.00337f, -0.01163f, -0.02186f, -0.02214f, -0.00709f, -0.00129f, + 0.00521f, 0.00811f, 0.00835f, 0.01026f, 0.01212f, 0.01374f, + 0.00212f, 0.00871f, 0.01585f, 0.02096f, 0.02002f, 0.01723f, + 0.00368f, 0.00352f, -0.00376f, -0.01167f, -0.00058f, 0.00715f, + -0.01151f, -0.01920f, -0.00905f, -0.00292f, 0.00065f, 0.00195f, + -0.00631f, -0.01393f, 0.01581f, 0.01441f, 0.00548f, 0.00070f +}; + +/* 3 bit VQ first stage */ +const float SHB_LSF_VQ3[48] = { + 0.0085f, 0.0123f, 0.0087f, 0.0020f, -0.0063f, -0.0103f, + 0.0118f, 0.0235f, 0.0256f, 0.0230f, 0.0183f, 0.0136f, + -0.0060f, -0.0139f, -0.0186f, -0.0160f, -0.0063f, -0.0024f, + 0.0012f, 0.0061f, 0.0120f, 0.0157f, 0.0150f, 0.0141f, + -0.0028f, -0.0133f, -0.0299f, -0.0379f, -0.0374f, -0.0298f, + -0.0016f, -0.0030f, -0.0066f, -0.0129f, -0.0183f, -0.0210f, + 0.0039f, 0.0042f, 0.0000f, 0.0016f, 0.0092f, 0.0126f, + -0.0085f, -0.0129f, 0.0003f, 0.0061f, 0.0042f, 0.0022f +}; + +const float *const cb_LSF_BWE[] = { SHB_LSF_VQ4, SHB_LSF_VQ3 }; + +const int16_t mslvq_SHB_min_bits[] = {14, 12}; /* for 4 bits and 3 bits respectively */ +const float scales_BWE[] = { + 0.932f, 1.677f, 2.811f, /* 14 bits*/ + 0.891f, 1.770f, 3.002f, /* 15 bits */ + 0.849f, 1.769f, 3.226f}; /* 16 bits */ + + +const Word8 no_lead_BWE[] = { + 8, 6, 5, /* 14 bits */ + 10,9,5, /* 15 bits*/ + 16, 11, 5}; /* 16 bits */ + + +const float scales_BWE_3b[] = { + 0.958f, 1.741f, 3.532f, /* 12 bits */ + 0.929f, 1.559f, 2.630f, /* 13 bits */ + 0.885f, 1.549f, 2.815f /* 14 bits*/ +}; + +const Word8 no_lead_BWE_3b[] = { + 4, 5, 2, /* 12 bits */ + 5, 5, 5, /* 13 bits */ + 8, 6, 5 /* 14 bits */ + }; + +const float LastCoefPred_0bit[18] = { + 0.00509f, -0.01367f, -0.00675f, -0.00555f, 0.00160f, 0.04158f, 0.12546f, 0.51500f, -0.00000f, + 0.00817f, -0.00645f, -0.00937f, -0.00726f, 0.00363f, 0.02148f, 0.08237f, 0.20400f, 0.00000f +}; + + +const float LastCoefPred_1bit[36] = { + 0.01760f, -0.02193f, 0.01160f, 0.00841f, 0.01782f, 0.04071f, 0.10121f, 0.37727f, 0.00451f, + 0.02473f, -0.01250f, 0.00545f, -0.00340f, 0.00952f, 0.01055f, 0.06447f, 0.14326f, 0.00430f, + -0.01490f, -0.01315f, -0.00990f, -0.00583f, -0.01288f, 0.05020f, 0.14868f, 0.68413f, -0.01206f, + -0.01554f, -0.02277f, -0.00474f, 0.00468f, 0.01070f, 0.04327f, 0.09857f, 0.26611f, -0.01164f +}; + +const int16_t config_LSF_BWE[] = { + 4, 16, 1, /* 21 bits */ + 4, 16, 1, /* 20 */ + 4, 16, 1, /* 19 */ + 3, 8, 1, /* 18 */ + 3, 8, 1, /* 17 */ + 3, 8, 0 /* 16 */ +}; + +/* clang-format on */ diff --git a/lib_com/rom_com.h b/lib_com/rom_com.h new file mode 100644 index 0000000000..83a7581491 --- /dev/null +++ b/lib_com/rom_com.h @@ -0,0 +1,1330 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef ROM_COM_H +#define ROM_COM_H + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_enc.h" +#include "stat_dec.h" +#include "stl.h" +#include "basop_util.h" + +typedef struct +{ + int32_t fin; /* input frequency */ + int32_t fout; /* output frequency */ + int16_t fac_num; /* numerator of resampling factor */ + const float *filter; /* resampling filter coefficients */ + int16_t filt_len; /* number of filter coeff. */ + uint16_t flags; /* flags from config. table */ +} Resampling_cfg; + +typedef struct +{ + int16_t bands; + int16_t bw; + const int16_t *band_width; + Word32 L_qint; + Word16 eref_fx; + Word16 bit_alloc_weight_fx; + int16_t gqlevs; + int16_t Ngq; + int16_t p2a_bands; + float p2a_th; + float pd_thresh; + float ld_slope; + float ni_coef; + float ni_pd_th; +} Xcore_Config; + +/*-----------------------------------------------------------------* + * Table of bitrates + *-----------------------------------------------------------------*/ + +extern const int32_t brate_tbl[SIZE_BRATE_TBL]; +extern const int32_t brate_intermed_tbl[]; +extern const int32_t acelp_sig_tbl[MAX_ACELP_SIG]; + +/*-----------------------------------------------------------------* + * Bit-allocation tables + *-----------------------------------------------------------------*/ + +extern const int16_t LSF_bits_tbl[]; /* Bit allocation table for end-frame ISF quantizer */ +extern const int16_t mid_LSF_bits_tbl[]; /* Bit allocation table for mid-frame ISF quantizer */ +extern const int16_t Es_pred_bits_tbl[]; /* Bit allocation table for scaled innovation energy prediction */ +extern const int16_t gain_bits_tbl[]; /* Bit allocation table for gain quantizer */ + +extern const int16_t ACB_bits_tbl[]; /* Bit allocation table for adaptive codebook (pitch) */ +extern const int16_t FCB_bits_tbl[]; /* Bit allocation table for algebraic (fixed) codebook (innovation) */ +extern const int16_t reserved_bits_tbl[]; /* Bit allocation table for reseved bits */ + +extern const int16_t ACB_bits_16kHz_tbl[]; /* Bit allocation table for adaptive codebook (pitch) @16kHz */ +extern const int16_t FCB_bits_16kHz_tbl[]; /* Bit allocation table for algebraic (fixed) codebook (innovation) @16kHz */ +extern const int16_t gain_bits_16kHz_tbl[]; /* Bit allocation table for gain quantizer @16kHz */ +extern const int16_t AVQ_bits_16kHz_tbl[]; /* Bit allocation table for AVQ bits @16kHz ACELP, active segments */ + +extern const uint32_t pulsestostates[17][9]; /* Number of states for any combination of pulses in any combination of vector length */ + +extern const uint8_t ACELP_NRG_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX + RF_MODE_MAX]; +extern const uint8_t ACELP_NRG_BITS[3]; + +extern const uint8_t ACELP_LTP_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX + RF_MODE_MAX]; +extern const uint8_t ACELP_LTP_BITS[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX + RF_MODE_MAX]; +extern const uint8_t ACELP_LTP_BITS_SFR[8 + RF_MODE_MAX][5]; + +extern const uint8_t ACELP_LTF_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX + RF_MODE_MAX]; +extern const uint8_t ACELP_LTF_BITS[4]; + +extern const uint8_t ACELP_GAINS_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX + RF_MODE_MAX]; +extern const uint8_t ACELP_GAINS_BITS[10]; + +extern const uint8_t ACELP_BPF_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX + RF_MODE_MAX]; +extern const uint8_t ACELP_BPF_BITS[3]; + + +/*----------------------------------------------------------------------------------* + * Pre-processing + *----------------------------------------------------------------------------------*/ + +extern const float inv_tbl[]; /* Table of 1/x values */ + +extern const Resampling_cfg resampling_cfg_tbl[]; /* table of resampling configurations */ +extern const FrameSizeParams FrameSizeConfig[FRAME_SIZE_NB]; + +extern const float h_high[]; /* HP filter for filtering random part of excitation in FEC */ +extern const float crit_bands[]; /* Table of critical bands */ +extern const float sincos_t[]; /* FFT - sinus and cosinus tables */ +extern const float sincos_t_ext[]; +extern const float sincos_t_rad3[]; +extern const int16_t fft256_read_indexes[]; /* FFT */ +extern const float inter4_2[]; /* 1/4 resolution interpolation filter */ +extern const float LP_assym_window[]; /* Assymetric window for LP analysis @12.8kHz */ +extern const float LP_assym_window_16k[]; /* Assymetric window for LP analysis @16kHz */ +extern const float hamcos_window[]; /* Hamming-Cosinus window */ +extern const float grid50[]; /* Table of grid points for evaluating Chebyshev polynomials */ +extern const float grid40[]; /* Table of grid points for evaluating Chebyshev polynomials */ +extern const float grid100[]; /* Table of 100 grid points for evaluating Chebyshev polynomials */ + +extern const float wind_sss[LEN_WIN_SSS]; /* window for modify_sf ana */ +extern const float filter5_39s320_120[]; /* LP FIR filter for 8kHz signal resampling */ + +extern const float lag_window_8k[17]; +extern const float lag_window_12k8[][17]; +extern const float lag_window_16k[][17]; +extern const float lag_window_25k6[][17]; +extern const float lag_window_32k[][17]; +extern const float lag_window_48k[17]; +extern const float interpol_frac2[]; /* LPC interpolation coefficients for two-subframe mode */ +extern const float interpol_frac2_mid[]; /* LPC interpolation coefficients with mid-ISFs for two-subframe mode */ +extern const float interpol_frac_12k8[]; /* LPC interpolation coefficients */ +extern const float interpol_isp_amr_wb[]; /* LPC interpolation coefficients for AMR-WB interoperable mode */ +extern const float interpol_frac_16k[]; /* LPC interpolation coefficients @ 16kHz */ +extern const float interpol_frac_mid[]; /* LPC interpolation coefficients with mid-ISFs */ +extern const float interpol_frac_mid_16k[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz */ +extern const float interpol_frac_mid_relaxprev_12k8[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz - relaxed prev frame interp */ +extern const float interpol_frac_mid_FEC[]; /* LPC interpolation coefficients with mid-ISFs - FEC */ +extern const float interpol_frac_mid_relaxprev_16k[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz - relaxed prev frame interp */ +extern const float interpol_frac_mid_16k_FEC[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz - FEC */ +extern const float interpol_frac_mid_relaxprev_pred_12k8[]; +extern const float interpol_frac_mid_relaxprev_pred_16k[]; + +extern const float inter6_2[PIT_FIR_SIZE6_2]; +extern const float inter4_2tcx2[4][4]; +extern const float inter6_2tcx2[6][4]; +typedef struct TCX_LTP_FILTER +{ + const float *filt; + int16_t length; +} TCX_LTP_FILTER; +extern const TCX_LTP_FILTER tcxLtpFilters[12]; + +extern const float gain_qua_mless_7b[]; /* Gain quantization - gain quantization table */ +extern const float gain_qua_mless_6b_stereo[]; /* Gain quantization - gain quantization table in IVAS */ +extern const float gain_qua_mless_6b[]; /* Gain quantization - gain quantization table */ +extern const float gain_qua_mless_5b[]; /* Gain quantization - gain quantization table */ +extern const float pred_gain[]; /* Gain quantization - MA predicition coefficients for gain quantizer */ +extern const float t_qua_gain6b[]; /* Gain quantization - gain quantization table for AMR-WB interoperable mode */ +extern const float t_qua_gain7b[]; /* Gain quantization - gain quantization table for AMR-WB interoperable mode */ +extern const float Es_pred_qua_5b[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ +extern const float Es_pred_qua_4b[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ +extern const float Es_pred_qua_3b[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ +extern const float Es_pred_qua_4b_no_ltp[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ + +extern const float b_1sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ +extern const float b_2sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ +extern const float b_3sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ +extern const float b_4sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ + +extern const float gp_gamma_1sfr_8b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ + +extern const float gp_gamma_1sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ +extern const float gp_gamma_2sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ +extern const float gp_gamma_3sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ +extern const float gp_gamma_4sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ + +extern const float gp_gamma_1sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ +extern const float gp_gamma_2sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ +extern const float gp_gamma_3sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ +extern const float gp_gamma_4sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ + +extern const int16_t E_ROM_qua_gain5b_const[]; +extern const int16_t E_ROM_qua_gain6b_const[]; +extern const int16_t E_ROM_qua_gain7b_const[]; + +extern const float gain_qua_mless[]; + +extern const float tbl_gain_code_tc[]; /* TC - code gain quantization table */ +extern const float tbl_gain_trans_tc[]; /* TC - gain quantization table for g_trans */ +extern const float glottal_cdbk[]; /* TC - table of prototype glottal impulses */ + +extern const int32_t PI_select_table[23][8]; /* selection table for Pulse indexing */ +extern const int32_t PI_offset[8][8]; /* offset table for Pulse indexing */ +extern const int16_t PI_factor[]; /* EVS_PI factor table for Pulse indexing */ + +/* ACELP pulse coding */ +extern const uint16_t low_len[10]; +extern const uint16_t low_mask[10]; +extern const uint16_t indx_fact[10]; +extern const int16_t index_len[3]; +extern const int16_t index_mask_ACELP[3]; + + +extern const float deem_tab[]; /* HF BWE - de-emphasis coefficients */ +extern const float filt_hp[]; +extern const float exp_tab_p[]; /* HF BWE - Table of values exp(-j*w*i) */ +extern const float exp_tab_q[]; /* HF BWE - Table of values exp(-j*w*i) */ +extern const float HP_gain[]; /* HF BWE - quantization table for 23.85 */ +extern const float fir_6k_8k[]; /* HF BWE - band-pass filter coefficients */ + +extern const float b_hp400[]; /* HF (6-7kHz) BWE - 400Hz HP filter coefficients */ +extern const float a_hp400[]; /* HF (6-7kHz) BWE - 400Hz HP filter coefficients */ +extern const float fir_6k_7k[]; /* HF (6-7kHz) BWE - 6.0 - 7.0 kHz BP filter coefficients */ + +extern const float low_H[]; /* Enhacer - 2.0 - 6.4 kHz impulse response with phase dispersion */ +extern const float mid_H[]; /* Enhancer - 3.2 - 6.4 kHz impulse response with phase dispersion */ + +extern const float filt_lp[1 + L_FILT]; +extern const float filt_lp_16kHz[1 + L_FILT16k]; + +extern const float tab_hup_l[SIZ_TAB_HUP_L]; /* NB post-filter */ +extern const float tab_hup_s[SIZ_TAB_HUP_S]; /* NB post-filter */ + +extern const float edct_table_80[]; /* EDCT */ +extern const float edct_table_120[]; /* EDCT */ +extern const float edct_table_320[]; /* EDCT */ +extern const float edct_table_480[]; /* EDCT */ +extern const float edct_table_128[]; /* EDCT */ +extern const float edct_table_160[]; /* EDCT */ +extern const float edct_table_40[]; /* EDCT */ +extern const float edct_table_20[]; /* EDCT */ +extern const float edct_table_64[]; +extern const float edct_table_100[]; /* EDCT */ +extern const float edct_table_200[]; +extern const float edct_table_240[]; +extern const float edct_table_256[]; +extern const float edct_table_400[]; +extern const float edct_table_600[]; /* EDCT */ + +extern const int16_t crit_bins[]; /* (used only in AMR-WB IO mode) */ +extern const float crit_bins_corr[CRIT_NOIS_BAND]; +extern const float crit_bands_loc[]; /* (used only in AMR-WB IO mode) */ +extern const float mfreq_loc_LD[]; /* LD music post-filter */ +extern const int16_t mfreq_bindiv_LD[]; +extern const float post_dct_wind[OFFSET2]; +extern const float MAX_SNR_SNR1_tab[]; +extern const float INV_MAX_SNR_tab[]; +extern const float sc_qnoise[]; + +extern const float W_DTX_HO[HO_HIST_SIZE]; +extern const float ENR_ATT[5]; +extern const float HO_ATT[5]; + +extern const int16_t hq_swb_bwe_nb_bits[]; + +/*----------------------------------------------------------------------------------* + * ISF quantization (AMR-WB IO mode) + *----------------------------------------------------------------------------------*/ + +extern const float mean_isf_amr_wb[M]; /* Mean ISF vector (only in AMR-WB IO mode) */ +extern const float mean_isf_noise_amr_wb[]; /* Mean ISF vector for SID frame (only in AMR-WB IO mode) */ +extern const float gaus_dico[]; /* Gaussian codebook */ +extern const float gaus_dico_swb[]; /* Gaussian codebook for SWB TBE */ + +extern const float dico1_isf[]; /* ISF codebook - common 1st stage, 1st split (only in AMR-WB IO mode) */ +extern const float dico2_isf[]; /* ISF codebook - common 1st stage, 2nd split (only in AMR-WB IO mode) */ + +extern const float dico21_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 1st split (only in AMR-WB IO mode) */ +extern const float dico22_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 2st split (only in AMR-WB IO mode) */ +extern const float dico23_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 3rd split (only in AMR-WB IO mode) */ +extern const float dico24_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 4th split (only in AMR-WB IO mode) */ +extern const float dico25_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 5th split (only in AMR-WB IO mode) */ + +extern const float dico21_isf_36b[]; /* ISF codebook - 36b, 2nd stage, 1st split (only in AMR-WB IO mode) */ +extern const float dico22_isf_36b[]; /* ISF codebook - 36b, 2nd stage, 2nd split (only in AMR-WB IO mode) */ +extern const float dico23_isf_36b[]; /* ISF codebook - 36b, 2nd stage, 3rd split (only in AMR-WB IO mode) */ + +extern const float dico1_ns_28b[]; /* ISF codebook for SID frames - 28b, 1st split */ +extern const float dico2_ns_28b[]; /* ISF codebook for SID frames - 28b, 2nd spilt */ +extern const float dico3_ns_28b[]; /* ISF codebook for SID frames - 28b, 3rd spilt */ +extern const float dico4_ns_28b[]; /* ISF codebook for SID frames - 28b, 4th spilt */ +extern const float dico5_ns_28b[]; /* ISF codebook for SID frames - 28b, 5th spilt */ + +extern const float dico1_cng_ev[]; +extern const float dico2_cng_ev[]; +extern const float dico3_cng_ev[]; +extern const float dico4_cng_ev[]; +extern const float dico5_cng_ev[]; + +/*----------------------------------------------------------------------------------* + * LSF quantization - MSVQ tables + *----------------------------------------------------------------------------------*/ + +extern const float stable_ISP[]; +extern const float stable_LSP[]; +extern const float stable_ISF[]; + +extern const float UVWB_Ave[]; +extern const float UVNB_Ave[]; +extern const float SVWB_Ave[]; +extern const float SVNB_Ave[]; +extern const float IAWB_Ave[]; +extern const float IANB_Ave[]; +extern const float GENB_Ave[]; +extern const float GEWB_Ave[]; +extern const float GEWB2_Ave[]; +extern const float TRWB_Ave[]; +extern const float TRWB2_Ave[]; +extern const float means_wb_cleanspeech_lsf16k0[]; +extern const float means_swb_cleanspeech_lsf25k6[]; +extern const float means_swb_cleanspeech_lsf32k0[]; +extern const float ModeMean12[]; + +extern const float Predictor0[]; +extern const float Predictor1[]; +extern const float Predictor2[]; +extern const float Predictor3[]; +extern const float Predictor4[]; +extern const float Predictor5[]; +extern const float Predictor6[]; +extern const float Predictor7[]; +extern const float Predictor8[]; +extern const float CNG_SN1[]; + +extern const int16_t CB_lsf[]; +extern const int16_t CB_p_lsf[]; +extern const float *const ModeMeans[]; +extern const float *const Predictors[]; +extern const int16_t CBsizes[]; +extern const int16_t CBbits[]; + +extern const int16_t CBbits_p[]; +extern const float vals[NO_LEADERS][MAX_NO_VALS]; +extern const int16_t no_vals[NO_LEADERS]; +extern const int16_t no_vals_ind[NO_LEADERS][MAX_NO_VALS]; +extern const int16_t C_VQ[LATTICE_DIM + 1][LATTICE_DIM + 1]; +extern const int16_t BitsVQ[]; +extern const int16_t BitsVQ_p[]; +extern const UWord8 no_lead_idx[][2]; +extern const UWord8 no_lead_p_idx[][2]; +extern const Word8 leaders_short[][MAX_NO_SCALES]; +extern const float sigma_MSLVQ[][16]; +extern const float sigma_p[][16]; +extern const float inv_sigma_MSLVQ[][16]; +extern const float inv_sigma_p[][16]; +extern const float scales[][MAX_NO_SCALES * 2]; +extern const float scales_p[][MAX_NO_SCALES * 2]; +extern const int16_t predmode_tab[][6]; +extern const float pl_HQ[]; +extern const int16_t pi0[]; +extern const UWord32 table_no_cv[]; +extern const int16_t pl_par[]; +extern const float *const Quantizers[]; +extern const float *const Quantizers_p[]; +extern const int16_t cng_sort[]; +extern const int16_t perm_MSLVQ[][4]; +extern const int16_t min_lat_bits_SN[]; +extern const int16_t min_lat_bits_pred[]; +extern const int16_t offset_in_lvq_mode_SN[][21]; +extern const int16_t offset_in_lvq_mode_pred[][32]; +extern const int16_t offset_lvq_modes_SN[]; +extern const int16_t offset_lvq_modes_pred[]; + +/*-----------------------------------------------------------------* + * LSF quantization - BC-TCVQ tables + *-----------------------------------------------------------------*/ + +extern const int16_t FixBranch_tbl[4][4][N_STAGE_VQ - 4]; + +extern const int16_t BC_TCVQ_BIT_ALLOC_40B[]; + +extern const int16_t NTRANS[4][16]; +extern const int16_t NTRANS2[4][16]; + +extern const float AR_IntraCoeff[N_STAGE_VQ - 1][2][2]; +extern const float SN_IntraCoeff[N_STAGE_VQ - 1][2][2]; + +extern const float scale_ARSN[]; +extern const float scale_inv_ARSN[]; + +extern const float AR_TCVQ_CB_SUB1[2][128][2]; +extern const float AR_TCVQ_CB_SUB2[2][64][2]; +extern const float AR_TCVQ_CB_SUB3[4][32][2]; + +extern const float SN_TCVQ_CB_SUB1[2][128][2]; +extern const float SN_TCVQ_CB_SUB2[2][64][2]; +extern const float SN_TCVQ_CB_SUB3[4][32][2]; + +extern const float AR_SVQ_CB1[32][8]; +extern const float AR_SVQ_CB2[16][8]; + + +extern const int16_t uniform_model[]; + +/*-----------------------------------------------------------------* + * LSF quantization - mid-frame quantization tables + *-----------------------------------------------------------------*/ + +extern const float tbl_mid_gen_wb_2b[]; +extern const float tbl_mid_gen_wb_4b[]; +extern const float tbl_mid_gen_wb_5b[]; + +extern const float tbl_mid_unv_wb_4b[]; +extern const float tbl_mid_unv_wb_5b[]; + +extern const float tbl_mid_voi_wb_1b[]; +extern const float tbl_mid_voi_wb_4b[]; +extern const float tbl_mid_voi_wb_5b[]; + +/*-----------------------------------------------------------------* + * LSF quantization - Mode 2 quantization tables + *-----------------------------------------------------------------*/ + +extern const float lsf_init[16]; +extern const float means_wb_31bits_ma_lsf[16]; +extern const float means_nb_31bits_ma_lsf[16]; +extern const float *const lsf_means[2]; +extern const float *const lsf_codebook[2][2][TCXLPC_NUMSTAGES]; +extern const int16_t lsf_numbits[TCXLPC_NUMSTAGES]; +extern const int16_t lsf_dims[TCXLPC_NUMSTAGES]; +extern const int16_t lsf_offs[TCXLPC_NUMSTAGES]; + +extern const float dico_lsf_abs_8b[]; + +extern const float lsf_q_diff_cb_8b_rf[]; +extern const float lsf_cdk_nb_gc_stg1[]; +extern const float lsf_cdk_nb_gc_stg2[]; +extern const float lsf_cdk_nb_gc_stg3[]; +extern const float lsf_ind_cdk_nb_gc_stg4[]; +extern const float lsf_cdk_nb_vc_stg1[]; +extern const float lsf_cdk_nb_vc_stg2[]; +extern const float lsf_cdk_nb_vc_stg3[]; +extern const float lsf_ind_cdk_nb_vc_stg4[]; +extern const float lsf_cdk_wb_gc_stg1[]; +extern const float lsf_cdk_wb_gc_stg2[]; +extern const float lsf_cdk_wb_gc_stg3[]; +extern const float lsf_ind_cdk_wb_gc_stg4[]; +extern const float lsf_cdk_wb_vc_stg1[]; +extern const float lsf_cdk_wb_vc_stg2[]; +extern const float lsf_cdk_wb_vc_stg3[]; +extern const float lsf_ind_cdk_wb_vc_stg4[]; + +extern const float *const lsf_ind_codebook[2][2][TCXLPC_IND_NUMSTAGES]; +extern const int16_t lsf_ind_numbits[TCXLPC_IND_NUMSTAGES]; +extern const int16_t lsf_ind_dims[TCXLPC_IND_NUMSTAGES]; +extern const int16_t lsf_ind_offs[TCXLPC_IND_NUMSTAGES]; +extern const Word16 min_distance_thr[2][2]; + +typedef float lsp_unw_triplet[3]; +extern const lsp_unw_triplet p16_gamma0_92to1[16]; +extern const lsp_unw_triplet p16_gamma0_94to1[16]; + + +/*------------------------------------------------------------------------------* + * AVQ - RE8 tables + *------------------------------------------------------------------------------*/ + +extern const int16_t select_table22[][9]; +extern const int16_t vals_a[][4]; /* value of leader element */ +extern const int16_t vals_q[][4]; /* code parameter for every leader */ +extern const uint16_t Is[]; /* codebook start address for every leader */ +extern const int16_t AA3[]; /* A3 - Number of the absolute leaders in codebook Q3 */ +extern const int16_t AA4[]; /* A4 - Number of the absolute leaders in codebook Q4 */ +extern const uint16_t II3[]; /* I3 - Cardinality offsets for absolute leaders in Q3 */ +extern const uint16_t II4[]; /* I4 - Cardinality offset for absolute leaders in Q4 */ +extern const int16_t Da_pos[]; /* Position of the first absolute leader on a spherical shell (or sphere) */ +extern const int16_t Da_nb[]; /* Number of absolute leaders on a spherical shell */ +extern const int16_t Da_id[]; /* identification code of an absolute leader */ +extern const int16_t Da_nq[]; /* Codebook number for each absolute leader */ + +/*------------------------------------------------------------------------------* + * SWB TBE tables + *------------------------------------------------------------------------------*/ + +extern const int16_t skip_bands_SWB_TBE[]; /* bands for SWB TBE quantisation */ +extern const int16_t skip_bands_WB_TBE[]; /* bands for WB TBE quantisation */ + +extern const float interpol_frac_shb[]; + +extern const float AP1_STEEP[]; /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ +extern const float AP2_STEEP[]; /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ +extern const float STEPS[]; /* Granuality in conversion from lpc to lsp */ + +extern const float cos_fb_exc[]; +extern const float recip_order[]; + +extern const float win_lpc_shb[]; /* Window for calculating SHB LPC coeffs */ +extern const float win_lpc_hb_wb[]; +extern const float ola_win_shb_switch_fold[]; +extern const float win_flatten[]; /* Window for calculating whitening filter for SHB excitation */ +extern const float win_flatten_4k[]; /* Window for calculating whitening filter for WB excitation */ +extern const float window_shb[]; /* Overlap add window for SHB excitation used in anal and synth */ +extern const float window_shb_32k[]; /* Upsampled overlap add window for SHB excitation used transition generation */ +extern const float subwin_shb[]; /* Short overlap add window for SHB excitation used in anal and synth */ +extern const float window_wb[]; +extern const float subwin_wb[]; /* Short overlap add window for SHB excitation used in anal and synth */ + +extern const float Hilbert_coeffs[4 * NUM_HILBERTS][HILBERT_ORDER1 + 1]; + +extern const float wac[]; +extern const float wac_swb[]; + +extern const float wb_bwe_lsfvq_cbook_8bit[]; +extern const float lbr_wb_bwe_lsfvq_cbook_2bit[]; +extern const float swb_tbe_lsfvq_cbook_8b[]; +extern const float SHBCB_SubGain5bit[]; /* 5 bit Quantizer table for SHB gain shapes */ +extern const float SHBCB_SubGain5bit_Linear[]; +extern const float HBCB_SubGain5bit[]; /* 5-bit TD WB BWE temporal shaping codebook */ +extern const float SHBCB_FrameGain64[]; /* 6 bit Quantizer table for SHB overall gain */ +extern const float SHBCB_FrameGain16[]; + +extern const float full_band_bpf_1[][5]; +extern const float full_band_bpf_2[][5]; +extern const float full_band_bpf_3[][5]; + +extern const float lsf_q_cb_4b[]; /* 4 bit differential scalar quantizer table for TD SWB BWE LSFs 1 and 2*/ +extern const float lsf_q_cb_3b[]; /* 3 bit differential scalar quantizer table for TD SWB BWE LSFs 3, 4 and 5*/ +extern const float *const lsf_q_cb[]; /* Codebook array for each LSF */ +extern const int16_t lsf_q_cb_size[]; /* Size of each element of the above */ +extern const int16_t lsf_q_num_bits[]; /* Size of each element of the above, in bits */ +extern const float mirror_point_q_cb[]; /* LSF mirroring point codebook */ +extern const float lsf_grid[4][5]; /* LSF mirroring adjustment grid */ +extern const float grid_smoothing[]; /* LSF mirroring smoothing table */ + +extern const float overlap_coefs[]; /* HR SWB BWE - overlap coefficients */ +extern const float overlap_coefs_48kHz[]; /* HR SWB BWE - overlap coefficients @48kHz */ +extern const float swb_hr_env_code1[]; /* HR SWB BWE - envelope Q table - first two subabnds in non-transient frames */ +extern const float swb_hr_env_code2[]; /* HR SWB BWE - envelope Q table - second two subabnds in non-transient frames*/ +extern const float swb_hr_env_code3[]; /* HR SWB BWE - envelope Q table - two subabnds in transient frames */ + +extern const float allpass_poles_3_ov_2[]; +extern const float decimate_3_ov_2_lowpass_num[]; +extern const float decimate_3_ov_2_lowpass_den[]; + + +/*------------------------------------------------------------------------------* + * WB BWE tables + *------------------------------------------------------------------------------*/ + +extern const float F_2_5[64]; + +/*------------------------------------------------------------------------------* + * SWB BWE tables + *------------------------------------------------------------------------------*/ + +extern const int16_t swb_bwe_trans_subband[]; +extern const int16_t swb_bwe_trans_subband_width[]; +extern const int16_t swb_bwe_subband[]; +extern const float swb_inv_bwe_subband_width[]; +extern const int16_t swb_bwe_sm_subband[]; +extern const float smooth_factor[]; +extern const int16_t fb_bwe_subband[]; +extern const float fb_inv_bwe_subband_width[]; +extern const int16_t fb_bwe_sm_subband[]; +extern const float fb_smooth_factor[]; +extern const float EnvCdbk11[]; +extern const float EnvCdbk1st[]; +extern const float EnvCdbk2nd[]; +extern const float EnvCdbk3rd[]; +extern const float EnvCdbk4th[]; +extern const float EnvCdbkFB[]; +extern const float Env_TR_Cdbk1[]; +extern const float Env_TR_Cdbk2[]; +extern const float w_NOR[]; +extern const float Mean_env[]; +extern const float Mean_env_fb[]; +extern const float Mean_env_tr[]; + +/*------------------------------------------------------------------------------* + * ACEPL/HQ core switching tables + *------------------------------------------------------------------------------*/ + +extern const float hp12800_32000[]; +extern const float hp16000_32000[]; +extern const float hp12800_48000[]; +extern const float hp16000_48000[]; +extern const float hp12800_16000[]; + + +extern const double cu15[28][3]; +extern const double cu4[6][3]; +extern const int16_t ct2[7][13]; + +/*------------------------------------------------------------------------------* + * HQ core tables + *------------------------------------------------------------------------------*/ + +extern const float window_48kHz[]; +extern const float window_256kHz[]; +extern const float half_overlap_25[]; +extern const float half_overlap_48[]; +extern const float half_overlap_int[]; +extern const float small_overlap_25[]; +extern const float small_overlap_48[]; +extern const float small_overlap_int[]; +extern const float window_8_16_32kHz[]; + +extern const float short_window_48kHz[]; +extern const float short_window_32kHz[]; +extern const float short_window_16kHz[]; +extern const float short_window_8kHz[]; + +extern const float wscw16q15[]; +extern const float wscw16q15_8[]; +extern const float wscw16q15_16[]; +extern const float wscw16q15_32[]; + +/* Band structure */ +extern const int16_t band_len_HQ[]; +extern const int16_t band_start_HQ[]; +extern const int16_t band_end_HQ[]; +extern const int16_t band_len_wb[]; +extern const int16_t band_start_wb[]; +extern const int16_t band_end_wb[]; +extern const int16_t band_len_harm[]; +extern const int16_t band_start_harm[]; +extern const int16_t band_end_harm[]; +extern const float rat[SFM_N_WB]; + +extern const int16_t intl_bw_16[N_INTL_GRP_16]; +extern const int16_t intl_bw_32[N_INTL_GRP_32]; +extern const int16_t intl_bw_48[N_INTL_GRP_48]; +extern const int16_t intl_cnt_16[N_INTL_GRP_16]; +extern const int16_t intl_cnt_32[N_INTL_GRP_32]; +extern const int16_t intl_cnt_48[N_INTL_GRP_48]; +extern const int16_t norm_order_48[NB_SFM]; +extern const int16_t norm_order_32[SFM_N_SWB]; +extern const int16_t norm_order_16[SFM_N_WB]; + +extern const float dicn_pg[45]; +extern const int16_t expPkEnrg_tbl[45]; +extern const int32_t manPkEnrg_tbl[45]; +extern const int32_t E_max5_tbl[40]; + +extern const float thren_pg[44]; + +extern const float dicn[40]; +extern const float dicn_inv[40]; +extern const float thren_HQ[39]; +extern const int16_t dicnlg2[40]; +extern const int16_t huffnorm[32]; +extern const int16_t huffsizn[32]; +extern const int16_t huffcoef[60]; +extern const int16_t pgain_huffnorm[32]; +extern const int16_t pgain_huffsizn[32]; + +extern const int16_t resize_huffnorm[32]; +extern const int16_t resize_huffsizn[32]; + +extern const int16_t huffnorm_tran[32]; +extern const int16_t huffsizn_tran[32]; + +extern const int16_t sfm_width[20]; +extern const int16_t a_map[20]; +extern const int16_t subf_norm_groups[4][11]; + +extern const Word32 SQRT_DIM_fx[]; + +/* HQ inner_frame signallisation table */ +extern const int16_t inner_frame_tbl[]; + +/* HQ spectrum length lookup tables */ +extern const int16_t l_spec_tbl[]; +extern const int16_t l_spec_ext_tbl[]; + +/* NB short win: 7200/8000/9600, 13200/16400 */ +extern const int16_t band_width_40_4_6_0_0_0[4]; +extern const int16_t band_width_40_5_6_0_0_0[5]; + +/* NB long win: 7200, 8000, 9600, 13200, 16400 */ +extern const int16_t band_width_160_18_6_4_0_0[18]; +extern const int16_t band_width_160_17_6_3_0_0[17]; +extern const int16_t band_width_160_14_6_3_0_0[14]; +extern const int16_t band_width_160_13_6_2_0_0[13]; + +/* WB short win: 13200/16400 */ +extern const int16_t band_width_80_7_6_0_0_0[7]; + +/* WB long win: 13200, 16400 */ +extern const int16_t band_width_320_18_6_3_0_0[18]; +extern const int16_t band_width_320_20_6_3_0_0[20]; + +/* SWB short win: 13200, 16400 */ +extern const int16_t band_width_142_8_8_0_0_0[8]; +extern const int16_t band_width_160_8_8_0_0_0[8]; + +/* SWB long win: 13200, 16400 */ +extern const int16_t band_width_568_22_6_2_0_0[22]; +extern const int16_t band_width_640_24_6_4_0_0[24]; + +/* LR-MDCT configuration tables */ +extern const Xcore_Config xcore_config_8kHz_007200bps_long; +extern const Xcore_Config xcore_config_8kHz_008000bps_long; +extern const Xcore_Config xcore_config_8kHz_013200bps_long; +extern const Xcore_Config xcore_config_8kHz_016400bps_long; + +extern const Xcore_Config xcore_config_8kHz_007200bps_short; +extern const Xcore_Config xcore_config_8kHz_008000bps_short; +extern const Xcore_Config xcore_config_8kHz_013200bps_short; +extern const Xcore_Config xcore_config_8kHz_016400bps_short; + +extern const Xcore_Config xcore_config_16kHz_013200bps_long; +extern const Xcore_Config xcore_config_16kHz_016400bps_long; + +extern const Xcore_Config xcore_config_16kHz_013200bps_short; +extern const Xcore_Config xcore_config_16kHz_016400bps_short; + +extern const Xcore_Config xcore_config_32kHz_013200bps_long; +extern const Xcore_Config xcore_config_32kHz_016400bps_long; + +extern const Xcore_Config xcore_config_32kHz_013200bps_short; +extern const Xcore_Config xcore_config_32kHz_016400bps_short; + + +extern const int16_t Nb[NB_SFM]; +extern const int16_t LNb[NB_SFM]; + +extern const Word32 pow_getbitsfrompulses_fx[16]; +extern const Word32 table_logcum_fx[563]; +extern const Word16 DDP_fx[4]; +extern const float DDP[4]; + + +extern const int16_t step_tcq[8][STATES]; +extern const int16_t denc[8][STATES]; +extern const int16_t ddec[8][STATES]; + +extern const int16_t step_LSB[STATES_LSB][2]; +extern const int16_t denc_LSB[STATES_LSB][2]; +extern const int16_t dqnt_LSB[STATES_LSB][4]; +extern const int16_t dstep_LSB[4][2]; +extern const int16_t ddec_LSB[4][2]; + +extern const int16_t nextstate[STATES][2]; + +extern const int16_t fine_gain_bits[]; +extern const float *const finegain[]; + +extern const uint8_t hBitsMinus1_N01[2]; +extern const uint8_t hBitsMinus1_N02[65]; +extern const uint8_t hBitsMinus1_N03[65]; +extern const uint8_t hBitsMinus1_N04[65]; +extern const uint8_t hBitsMinus1_N05[54]; +extern const uint8_t hBitsMinus1_N06[42]; +extern const uint8_t hBitsMinus1_N07[34]; +extern const uint8_t hBitsMinus1_N08[29]; +extern const uint8_t hBitsMinus1_N09[25]; +extern const uint8_t hBitsMinus1_N10[22]; +extern const uint8_t hBitsMinus1_N11[19]; +extern const uint8_t hBitsMinus1_N12[17]; +extern const uint8_t hBitsMinus1_N13[16]; +extern const uint8_t hBitsMinus1_N14[14]; +extern const uint8_t hBitsMinus1_N15[13]; +extern const uint8_t hBitsMinus1_N16[13]; +extern const uint8_t hBitsMinus1_N17[12]; +extern const uint8_t hBitsMinus1_N18[12]; +extern const uint8_t hBitsMinus1_N19[11]; +extern const uint8_t hBitsMinus1_N20[11]; +extern const uint8_t hBitsMinus1_N21[10]; +extern const uint8_t hBitsMinus1_N22[10]; +extern const uint8_t hBitsMinus1_N23[10]; +extern const uint8_t hBitsMinus1_N24[10]; +extern const uint8_t hBitsMinus1_N25[9]; +extern const uint8_t hBitsMinus1_N26[9]; +extern const uint8_t hBitsMinus1_N27[9]; +extern const uint8_t hBitsMinus1_N28[9]; +extern const uint8_t hBitsMinus1_N29[9]; +extern const uint8_t hBitsMinus1_N30[8]; +extern const uint8_t hBitsMinus1_N31[8]; +extern const uint8_t hBitsMinus1_N32[8]; +extern const uint8_t hBitsMinus1_N33[8]; +extern const uint8_t hBitsMinus1_N34[8]; +extern const uint8_t hBitsMinus1_N35[8]; +extern const uint8_t hBitsMinus1_N36[8]; +extern const uint8_t hBitsMinus1_N37[8]; +extern const uint8_t hBitsMinus1_N38[8]; +extern const uint8_t hBitsMinus1_N39[8]; +extern const uint8_t hBitsMinus1_N40[8]; +extern const uint8_t hBitsMinus1_N41[7]; +extern const uint8_t hBitsMinus1_N42[7]; +extern const uint8_t hBitsMinus1_N43[7]; +extern const uint8_t hBitsMinus1_N44[7]; +extern const uint8_t hBitsMinus1_N45[7]; +extern const uint8_t hBitsMinus1_N46[7]; +extern const uint8_t hBitsMinus1_N47[7]; +extern const uint8_t hBitsMinus1_N48[7]; +extern const uint8_t hBitsMinus1_N49[7]; +extern const uint8_t hBitsMinus1_N50[7]; +extern const uint8_t hBitsMinus1_N51[7]; +extern const uint8_t hBitsMinus1_N52[7]; +extern const uint8_t hBitsMinus1_N53[7]; +extern const uint8_t hBitsMinus1_N54[7]; +extern const uint8_t hBitsMinus1_N55[7]; +extern const uint8_t hBitsMinus1_N56[7]; +extern const uint8_t hBitsMinus1_N57[7]; +extern const uint8_t hBitsMinus1_N58[7]; +extern const uint8_t hBitsMinus1_N59[7]; +extern const uint8_t hBitsMinus1_N60[7]; +extern const uint8_t hBitsMinus1_N61[6]; +extern const uint8_t hBitsMinus1_N62[6]; +extern const uint8_t hBitsMinus1_N63[6]; +extern const uint8_t hBitsMinus1_N64[6]; +extern const uint8_t *const hBitsN[65]; +extern const int16_t dsHighDiracsTab[43]; +extern const uint32_t intLimCDivInvDQ31[68]; +extern const uint8_t obtainEnergyQuantizerDensity_f[57]; +extern const int16_t lim_neg_inv_tbl_fx[11]; +extern const int16_t fg_inv_tbl_fx[13]; + +/* functions and tables for pvq_indexing */ +extern const uint32_t exactdivodd[ODD_DIV_SIZE]; + +extern const float gain_att[]; +extern const float att_step[]; +extern const float gain_qlow[]; +extern const int16_t gain_cb_size[]; +extern const float stab_trans[]; +extern const Word16 stab_trans_fx[]; +extern const float env_stab_tp[2][2]; + +/*----------------------------------------------------------------------------------* + * SWB BWE for LR MDCT core + *----------------------------------------------------------------------------------*/ +extern const float gain_table_SWB_BWE[NB_SWB_SUBBANDS]; +/* HQ_NORMAL mode */ +extern const int16_t bits_lagIndices_modeNormal[NB_SWB_SUBBANDS]; +extern const int16_t subband_offsets_12KBPS[NB_SWB_SUBBANDS]; +extern const int16_t subband_offsets_16KBPS[NB_SWB_SUBBANDS]; +extern const int16_t subband_search_offsets[NB_SWB_SUBBANDS]; +extern const int16_t bw_SPT_tbl[2][SPT_SHORTEN_SBNUM]; + +/* HQ_HARMONIC mode */ +extern const int16_t bits_lagIndices_mode0_Har[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; +extern const int16_t subband_offsets_sub5_13p2kbps_Har[NB_SWB_SUBBANDS_HAR]; +extern const int16_t subband_search_offsets_13p2kbps_Har[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; +extern const int16_t subband_offsets_sub5_16p4kbps_Har[NB_SWB_SUBBANDS_HAR]; +extern const int16_t subband_search_offsets_16p4kbps_Har[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; + +/*----------------------------------------------------------------------------------* + * SC-VBR + *----------------------------------------------------------------------------------*/ + +/* NELP filter coefficients */ +extern const float bp1_num_coef_wb[5]; +extern const float bp1_den_coef_wb[5]; +extern const float shape1_num_coef[11]; +extern const float shape1_den_coef[11]; +extern const float shape2_num_coef[11]; +extern const float shape2_den_coef[11]; +extern const float shape3_num_coef[11]; +extern const float shape3_den_coef[11]; +extern const float txlpf1_num_coef[11]; +extern const float txlpf1_den_coef[11]; +extern const float txhpf1_num_coef[11]; +extern const float txhpf1_den_coef[11]; +extern const float bp1_num_coef_nb_fx_order7[8]; +extern const float bp1_den_coef_nb_fx_order7[8]; +extern const float num_nelp_lp[NELP_LP_ORDER + 1]; +extern const float den_nelp_lp[NELP_LP_ORDER + 1]; + +extern const float UVG1CB_WB[UVG1_CBSIZE][2]; +extern const float UVG2CB1_WB[UVG2_CBSIZE][5]; +extern const float UVG2CB2_WB[UVG2_CBSIZE][5]; + +extern const float UVG1CB_NB[UVG1_CBSIZE][2]; +extern const float UVG2CB1_NB[UVG2_CBSIZE][5]; +extern const float UVG2CB2_NB[UVG2_CBSIZE][5]; + +extern const float frac_4sf[NB_SUBFR + 2]; + +extern const float erb_WB[NUM_ERB_WB + 1]; +extern const float erb_NB[NUM_ERB_NB + 1]; + +extern const float AmpCB1_WB[64][10]; +extern const float AmpCB2_WB[64][NUM_ERB_WB - 11]; + +extern const float AmpCB1_NB[64][10]; +extern const float AmpCB2_NB[64][NUM_ERB_NB - 11]; + +extern const float PowerCB_WB[64][2]; +extern const float PowerCB_NB[64][2]; +extern const float sinc[8][12]; + +extern const float hvq_thr_adj[5]; +extern const float hvq_peak_cb[1024]; +extern const float hvq_class_c[16]; +extern const int16_t hvq_cb_search_overlap24k[17]; +extern const int16_t hvq_cb_search_overlap32k[21]; + +extern const int16_t hvq_pg_huff_offset[NUM_PG_HUFFLEN]; +extern const int16_t hvq_pg_huff_thres[NUM_PG_HUFFLEN]; +extern const int16_t hvq_pg_huff_tab[32]; + +extern const int16_t hvq_cp_huff_len[52]; +extern const int16_t hvq_cp_huff_val[52]; +extern const int16_t hvq_cp_layer1_map5[HVQ_CP_MAP_LEN]; + +extern const int16_t hvq_cp_huff_thres[HVQ_CP_HUFF_NUM_LEN]; +extern const int16_t hvq_cp_huff_offset[HVQ_CP_HUFF_NUM_LEN]; +extern const int16_t hvq_cp_huff_tab[52]; + +/*------------------------------------------------------------------------------* + * GSC mode + *------------------------------------------------------------------------------*/ + +extern const float sin_table256[]; + +extern const int16_t gsc_sfm_start[]; +extern const int16_t gsc_sfm_end[]; +extern const int16_t gsc_sfm_size[]; + +extern const float sm_table[]; + +extern const float mfreq_loc[]; +extern const int16_t mfreq_bindiv_loc[]; + +extern const float mean_gp[]; +extern const float dic_gp[]; + +extern const float Gain_mean[]; +extern const float Gain_meanHR[]; +extern const float Gain_mean_dic[]; +extern const float Gain_mean_dicHR[]; + +extern const float YG_mean16[]; +extern const float YG_dicMR_1[]; +extern const float YG_dicMR_2[]; +extern const float YG_dicMR_3[]; +extern const float YG_dicMR_4[]; + +extern const float mean_m[]; +extern const float mean_gain_dic[]; + +extern const float YGain_mean_LR[]; +extern const float YGain_dic1_LR[]; +extern const float YGain_dic2_LR[]; +extern const float YGain_dic3_LR[]; +extern const float Gain_dic2_NBHR[]; +extern const float Gain_dic3_NBHR[]; +extern const float YG_mean16HR[]; +extern const float YG_dicHR_1[]; +extern const float YG_dicHR_2[]; +extern const float YG_dicHR_3[]; +extern const float YG_mean16HR_16kHz[]; +extern const float YG_dicHR_4_16kHz[]; +extern const float YG_meanL2G_16kHz[]; +extern const float YG_dicL2G_16kHz[]; +extern const int16_t GSC_freq_bits[]; +extern const int16_t GSC_freq_DL0_bits[]; +extern const int16_t Compl_GSC_freq_bits[]; +extern const float Gain_meanNB[]; +extern const float Gain_mean_dicNB[]; +extern const float Mean_dic_NB[]; +extern const float Gain_dic1_NB[]; +extern const float Gain_dic2_NB[]; +extern const float Gain_dic3_NB[]; + + +/*------------------------------------------------------------------------------* + * FFT transform + *------------------------------------------------------------------------------*/ + +extern const int16_t Odx_fft64[64]; +extern const float w_fft64[32]; +extern const int16_t Ip_fft64[6]; +extern const int16_t Odx_fft32_15[32]; +extern const float w_fft32[16]; +extern const int16_t Ip_fft32[6]; +extern const int16_t Odx_fft32_5[32]; +extern const int16_t Odx_fft16[16]; +extern const float w_fft16[8]; +extern const int16_t Ip_fft16[6]; +extern const float w_fft8[8]; +extern const int16_t Ip_fft8[6]; +extern const int16_t Idx_dortft80[80]; +extern const int16_t Idx_dortft120[120]; +extern const int16_t Idx_dortft160[160]; +extern const int16_t Idx_dortft320[320]; +extern const int16_t Idx_dortft480[480]; +extern const int16_t Ip_fft128[10]; +extern const float w_fft128[64]; +extern const int16_t Ip_fft256[10]; +extern const float w_fft256[128]; +extern const int16_t Ip_fft512[18]; +extern const float w_fft512[256]; +extern const int16_t Idx_dortft40[40]; +extern const int16_t Odx_fft8_5[8]; +extern const int16_t ip_edct2_64[6]; +extern const float w_edct2_64[80]; +extern const int16_t Idx_dortft20[20]; +extern const int16_t Odx_fft4_5[4]; +extern const float w_fft4[2]; +extern const int16_t Ip_fft4[6]; + +extern const float FFT_RotVector_32[40]; +extern const float FFT_RotVector_256[448]; +extern const float FFT_RotVector_400[760]; +extern const float FFT_RotVector_600[1140]; +extern const float FFT_RotVector_640[1240]; +extern const float FFT_RotVector_960[1860]; + + +/*----------------------------------------------------------------------------------* + * FEC for HQ core + *----------------------------------------------------------------------------------*/ + +extern const float Asr_LP32[41]; +extern const float Asr_LP16[21]; +extern const float Asr_LP48[61]; + +extern const int16_t Num_bands_NB[]; +extern const float SmoothingWin_NB875[]; +extern const float SmoothingWin_NB2[]; + +/*----------------------------------------------------------------------------------* + * CLDFB + *----------------------------------------------------------------------------------*/ + +extern const int16_t freqTable[2]; + +extern const float CLDFB80_10[100]; +extern const float CLDFB80_16[160]; +extern const float CLDFB80_20[200]; +extern const float CLDFB80_30[300]; +extern const float CLDFB80_32[320]; +extern const float CLDFB80_40[400]; +extern const float CLDFB80_60[600]; + +/*5ms delay*/ +extern const float LDQMF_10[100]; +extern const float LDQMF_16[160]; +extern const float LDQMF_20[200]; +extern const float LDQMF_30[300]; +extern const float LDQMF_32[320]; +extern const float LDQMF_40[400]; +extern const float LDQMF_60[600]; +extern const float rot_vec_delay_re_LDQMF[60]; +extern const float rot_vec_delay_im_LDQMF[60]; + +extern const float rot_vec_ana_re_L10[5]; +extern const float rot_vec_ana_im_L10[5]; +extern const float rot_vec_ana_re_L16[8]; +extern const float rot_vec_ana_im_L16[8]; +extern const float rot_vec_ana_re_L20[10]; +extern const float rot_vec_ana_im_L20[10]; +extern const float rot_vec_ana_re_L30[15]; +extern const float rot_vec_ana_im_L30[15]; +extern const float rot_vec_ana_re_L32[16]; +extern const float rot_vec_ana_im_L32[16]; +extern const float rot_vec_ana_re_L40[20]; +extern const float rot_vec_ana_im_L40[20]; +extern const float rot_vec_ana_re_L60[30]; +extern const float rot_vec_ana_im_L60[30]; + +extern const float rot_vec_syn_re_L10[5]; +extern const float rot_vec_syn_im_L10[5]; +extern const float rot_vec_syn_re_L16[8]; +extern const float rot_vec_syn_im_L16[8]; +extern const float rot_vec_syn_re_L20[10]; +extern const float rot_vec_syn_im_L20[10]; +extern const float rot_vec_syn_re_L30[15]; +extern const float rot_vec_syn_im_L30[15]; +extern const float rot_vec_syn_re_L32[16]; +extern const float rot_vec_syn_im_L32[16]; +extern const float rot_vec_syn_re_L40[20]; +extern const float rot_vec_syn_im_L40[20]; +extern const float rot_vec_syn_re_L60[30]; +extern const float rot_vec_syn_im_L60[30]; + +extern const float bpf_weights_16[CLDFB_NO_COL_MAX]; + +extern const float CNG_details_codebook[64][NUM_ENV_CNG]; + + +/*----------------------------------------------------------------------------------* + * FD CNG + *----------------------------------------------------------------------------------*/ + +extern const int16_t d_array[SIZE_SCALE_TABLE_CN]; +extern const float m_array[SIZE_SCALE_TABLE_CN]; +extern const float msQeqInvAv_thresh[3]; +extern const float msNoiseSlopeMax[4]; + +extern const SCALE_SETUP scaleTableStereo[SIZE_SCALE_TABLE_STEREO]; +extern const SCALE_SETUP scaleTableMono[SIZE_SCALE_TABLE_MONO]; +extern const SCALE_SETUP scaleTable_cn_only[SIZE_SCALE_TABLE_CN]; +extern const SCALE_SETUP scaleTable_cn_dirac[15]; +extern const float scaleTable_cn_only_amrwbio[SIZE_SCALE_TABLE_CN_AMRWB][2]; + +extern const int16_t sidparts_encoder_noise_est[SIZE_SIDPARTS_ENC_NOISE_EST]; + + +extern const FD_CNG_SETUP FdCngSetup_nb; +extern const FD_CNG_SETUP FdCngSetup_wb1; +extern const FD_CNG_SETUP FdCngSetup_wb2; +extern const FD_CNG_SETUP FdCngSetup_wb3; +extern const FD_CNG_SETUP FdCngSetup_swb1; +extern const FD_CNG_SETUP FdCngSetup_swb1_stereo; +extern const FD_CNG_SETUP FdCngSetup_swb2; + +extern const int16_t levels_37bits[FD_CNG_stages_37bits]; +extern const int16_t bits_37bits[FD_CNG_stages_37bits]; +extern const float *const cdk_37bits[]; +extern const float *const cdk_37bits_ivas[]; + +extern const float fftSineTab640[321]; + +extern const float olapWinAna512[512]; +extern const float olapWinAna640[640]; + +extern const float olapWinSyn256[256]; +extern const float olapWinSyn320[320]; + + +/*----------------------------------------------------------------------------------* + * TCX + *----------------------------------------------------------------------------------*/ + +extern const float gain_corr_fac[]; +extern const float gain_corr_inv_fac[]; + +extern const SCALE_TCX_SETUP scaleTcxTable[SIZE_SCALE_TABLE_TCX]; + + +/*----------------------------------------------------------------------------------* + * Arithmetic coder + *----------------------------------------------------------------------------------*/ + +extern const uint8_t ari_lookup_s17_LC[4096]; +extern const uint16_t ari_pk_s17_LC_ext[64][18]; + +extern const int16_t NumRatioBits[2][17]; +extern const float Ratios_WB_2[32]; +extern const float Ratios_WB_3[32]; +extern const float Ratios_WB_4[32]; +extern const float Ratios_WB_5[32]; +extern const float Ratios_WB_6[32]; +extern const float Ratios_WB_7[32]; +extern const float Ratios_WB_8[16]; +extern const float Ratios_WB_9[16]; +extern const float Ratios_WB_10[16]; +extern const float Ratios_WB_11[16]; +extern const float Ratios_WB_12[16]; +extern const float Ratios_WB_13[16]; +extern const float Ratios_WB_14[16]; +extern const float Ratios_WB_15[16]; +extern const float Ratios_WB_16[4]; +extern const float Ratios_WB_17[4]; +extern const float Ratios_WB_18[4]; +extern const float Ratios_NB_2[32]; +extern const float Ratios_NB_3[16]; +extern const float Ratios_NB_4[16]; +extern const float Ratios_NB_5[16]; +extern const float Ratios_NB_6[16]; +extern const float Ratios_NB_7[16]; +extern const float Ratios_NB_8[16]; +extern const float Ratios_NB_9[8]; +extern const float Ratios_NB_10[8]; +extern const float Ratios_NB_11[8]; +extern const float Ratios_NB_12[8]; +extern const float Ratios_NB_13[4]; +extern const float Ratios_NB_14[4]; +extern const float Ratios_NB_15[4]; +extern const float Ratios_NB_16[4]; +extern const float Ratios_NB_17[4]; +extern const float Ratios_NB_18[4]; +extern const float *const Ratios[2][17]; + +extern const Word16 qGains[2][1 << kTcxHmNumGainBits]; + +/*----------------------------------------------------------------------------------* + * Innovative codebook + *----------------------------------------------------------------------------------*/ + +extern const PulseConfig PulseConfTable[]; + +/*----------------------------------------------------------------------------------* + * TNS + *----------------------------------------------------------------------------------*/ + +extern const struct TnsParameters tnsParametersIGF32kHz_LowBR[1]; +extern const struct TnsParameters tnsParameters32kHz[2]; +extern const struct TnsParameters tnsParameters32kHz_grouped[2]; +extern const struct TnsParameters tnsParameters16kHz[1]; +extern const struct TnsParameters tnsParameters16kHz_grouped[2]; +extern const struct TnsParameters tnsParameters48kHz_grouped[2]; + +extern const struct TnsParameters tnsParameters32kHz_Stereo[2]; + +extern const float tnsAcfWindow[TNS_MAX_FILTER_ORDER]; + +extern const ParamsBitMap tnsEnabledSWBTCX20BitMap; +extern const ParamsBitMap tnsEnabledSWBTCX10BitMap; +extern const ParamsBitMap tnsEnabledWBTCX20BitMap; + +extern const ParamsBitMap tnsEnabledOnWhiteSWBTCX10BitMap; +extern const ParamsBitMap tnsEnabledOnWhiteSWBTCX20BitMap; + +extern const Coding codesTnsAllCoeffs[]; + +extern const Coding codesTnsCoeff0SWBTCX20[]; +extern const Coding codesTnsCoeff0SWBTCX10[]; +extern const Coding codesTnsCoeff1SWBTCX20[]; +extern const Coding codesTnsCoeff1SWBTCX10[]; +extern const Coding codesTnsCoeff2SWBTCX20[]; +extern const Coding codesTnsCoeff2SWBTCX10[]; +extern const Coding codesTnsCoeff3SWBTCX20[]; +extern const Coding codesTnsCoeff3SWBTCX10[]; +extern const Coding codesTnsCoeff4SWBTCX20[]; +extern const Coding codesTnsCoeff4SWBTCX10[]; +extern const Coding codesTnsCoeff5[]; +extern const Coding codesTnsCoeff6[]; + +extern const Coding codesTnsCoeff0WBTCX20[]; +extern const Coding codesTnsCoeff1WBTCX20[]; +extern const Coding codesTnsCoeff2WBTCX20[]; +extern const Coding codesTnsCoeff3WB[]; + +extern const Coding codesTnsCoeff456[]; +extern const Coding codesTnsCoeff7[]; + +extern const int16_t nTnsCoeffCodes; + +extern const Coding *const codesTnsCoeffSWBTCX20[]; +extern const Coding *const codesTnsCoeffSWBTCX10[]; +extern const Coding *const codesTnsCoeffWBTCX20[]; +extern const int16_t nTnsCoeffTables; + +extern const Coding codesTnsOrderTCX20[]; +extern const Coding codesTnsOrderTCX10[]; +extern const Coding codesTnsOrder[]; +extern const int16_t nTnsOrderCodes; + +extern const float tnsCoeff4[16]; + +/*----------------------------------------------------------------------------------* + * IGF settings for each bitrate + *----------------------------------------------------------------------------------*/ + +typedef struct igf_mode_type +{ + int32_t sampleRate; + int16_t frameLength; + int16_t igfMinFq; + int16_t maxHopsize; +} IGF_MODE; + +extern const IGF_MODE igfMode[IGF_BITRATE_UNKNOWN]; +extern const int16_t swb_offset_LB_new[IGF_BITRATE_UNKNOWN][IGF_MAX_SFB]; +extern const int16_t igf_tile_offset_table[IGF_BITRATE_UNKNOWN][2 * IGF_MAX_TILES + 1]; +extern const float igf_whitening_TH[IGF_BITRATE_UNKNOWN][2][IGF_MAX_TILES]; +extern const int16_t cf_off_se01_tab[10]; +extern const int16_t cf_off_se10_tab; +extern const int16_t cf_off_se02_tab[10][IGF_CTX_COUNT]; +extern const int16_t cf_off_se11_tab[IGF_CTX_COUNT][IGF_CTX_COUNT]; +extern const uint16_t cf_se00_tab[IGF_SYMBOLS_IN_TABLE + 1]; +extern const uint16_t cf_se01_tab[10][IGF_SYMBOLS_IN_TABLE + 1]; +extern const uint16_t cf_se02_tab[10][IGF_CTX_COUNT][IGF_SYMBOLS_IN_TABLE + 1]; +extern const uint16_t cf_se10_tab[IGF_SYMBOLS_IN_TABLE + 1]; +extern const uint16_t cf_se11_tab[IGF_CTX_COUNT][IGF_CTX_COUNT][IGF_SYMBOLS_IN_TABLE + 1]; + +extern const float normReciprocal[CHEAP_NORM_SIZE]; +extern const float *const w_a[7]; + +extern const PWord16 SineTable512_fx[]; +extern const Word16 ldCoeff[7]; +extern const UWord32 exp2_tab_long[32]; +extern const UWord32 exp2w_tab_long[32]; +extern const UWord32 exp2x_tab_long[32]; +extern const Word16 invTable[INV_TABLE_SIZE + 1]; +extern const Word16 sqrtTable[SQRT_TABLE_SIZE + 1]; +extern const Word16 invSqrtTable[SQRT_TABLE_SIZE + 1]; + +extern const float sns_vq_cdk1[8 * 32]; +extern const float sns_vq_cdk2[8 * 32]; + +extern const float tcx_mdct_window_48[420]; +extern const float tcx_mdct_window_half_48[180]; +extern const float tcx_mdct_window_trans_48[60]; + + +/*----------------------------------------------------------------------------------* + * SWB TBE LSF tables (1.75 kbps) + *----------------------------------------------------------------------------------*/ + +extern const float sigma_BWE[]; +extern const float inv_sigma_BWE[]; +extern const float scales_BWE[]; +extern const Word8 no_lead_BWE[]; + +extern const float scales_BWE_3b[]; +extern const Word8 no_lead_BWE_3b[]; +extern const int16_t mslvq_SHB_min_bits[]; + +extern const float SHB_LSF_mean[]; + +extern const float SHB_LSF_VQ3[48]; +extern const float SHB_LSF_VQ4[96]; +extern const float *const cb_LSF_BWE[]; +extern const float LastCoefPred_0bit[18]; +extern const float LastCoefPred_1bit[36]; +extern const int16_t config_LSF_BWE[]; + +#endif diff --git a/lib_com/stab_est.c b/lib_com/stab_est.c new file mode 100644 index 0000000000..0ee40153a6 --- /dev/null +++ b/lib_com/stab_est.c @@ -0,0 +1,234 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define BIN_4000 80 /* The frequency bin corresponding to 4kHz */ +#define MAX_SNR1 45.0f +#define INV_MAX_SNR ( 1.0f / ( MAX_SNR1 - 1.0f ) ) /* Max. SNR considered for noise subtraction in voiced segments */ +#define MAX_SNR_SNR1 ( MAX_SNR1 * INV_MAX_SNR ) /* 45 * (1 / (MAX_SNR1-1)) */ +#define MAX_BANDEXC 20 +#define TH_0_MAX ( 1.5f * 3.125f ) +#define TH_1_MAX ( 1.5f * 2.8125f ) +#define TH_2_MAX ( 1.5f * 2.1875f ) +#define TH_3_MAX ( 1.5f * 1.875f ) + +#define TH_UP 0.15625f +#define TH_DW 0.15625f +#define NB_TH3_MIN 30 +#define NB_TH1_MIN 30 + +#define MAX_THR 0.92f + +/*------------------------------------------------------------------------* + * stab_est() + * + * Signal stability estimation based on energy variation + *------------------------------------------------------------------------*/ + +int16_t stab_est( + float etot, /* i : Total energy of the current frame */ + float *lt_diff_etot, /* i/o: Long term total energy variation */ + float *mem_etot, /* i/o: Total energy memory */ + int16_t *nb_thr_3, /* i/o: Number of consecutives frames of level 3 */ + int16_t *nb_thr_1, /* i/o: Number of consecutives frames of level 1 */ + float *thresh, /* i/o: Detection thresold */ + int16_t *last_music_flag, /* i/o: Previous music detection ouptut */ + const int16_t vad_flag /* i : VAD flag */ +) +{ + int16_t i, music_flag2; + float mean_diff; + float ftmp_c, fcorr, dev; + + /*------------------------------------------------------------------------* + * Find mean of the past MAX_LT frames energy variation + *------------------------------------------------------------------------*/ + + mean_diff = 0.0f; + for ( i = 1; i < MAX_LT; i++ ) + { + mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; /* divide by MAX_LT */ + lt_diff_etot[i - 1] = lt_diff_etot[i]; + } + + mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; /* divide by MAX_LT */ + + /*------------------------------------------------------------------------* + * Find statistical deviation of the energy variation history + * against the last 15 frames + *------------------------------------------------------------------------*/ + + fcorr = 0.0f; + for ( i = MAX_LT - 15; i < MAX_LT; i++ ) + { + ftmp_c = lt_diff_etot[i] - mean_diff; + fcorr += ftmp_c * ftmp_c; + } + + lt_diff_etot[i - 1] = etot - *mem_etot; + *mem_etot = etot; + + /*------------------------------------------------------------------------* + * Compute statistical deviation + *------------------------------------------------------------------------*/ + + dev = (float) sqrt( fcorr / ( MAX_LT - 15 ) ); + + /*------------------------------------------------------------------------* + * State machine to decide level of inter-harmonic noise reduction and + * the first bins where this inter-harmonic noise reduction will be applied + * (only if this frame is GOOD or if we are already far from NB_BFI_THR) + * (if music_flag2 is 0, the spectral modification is deactivated, otherwise, it is activated) + *------------------------------------------------------------------------*/ + + music_flag2 = 0; + + /*--------------------------------------------------------------------* + * statistical deviation < Thresh3 and last signal category type >= 3 + * (last category was "tonal" and the new one is "very tonal") + *--------------------------------------------------------------------*/ + + if ( dev < thresh[3] && *last_music_flag >= 3 ) + { + music_flag2 = 4; + *nb_thr_3 += 1; + *nb_thr_1 = 0; + } + + /*--------------------------------------------------------------------* + * statistical deviation < Thresh2 and last signal category type >= 2 + * (last category was "moderatly tonal" and the new one is a "tonal" ) + *--------------------------------------------------------------------*/ + + else if ( dev < thresh[2] && *last_music_flag >= 2 ) + { + music_flag2 = 3; + *nb_thr_3 += 1; + *nb_thr_1 = 0; + } + + /*--------------------------------------------------------------------* + * statistical deviation < Thresh1 and last signal category type >= 1 + * (last category was "slightly tonal" and the new one is a "moderatly tonal") + *--------------------------------------------------------------------*/ + + else if ( dev < thresh[1] && *last_music_flag >= 1 ) + { + music_flag2 = 2; + } + + /*--------------------------------------------------------------------* + * statistical deviation < Thresh0 + * (last category was "not tonal" and the new one is "slightly tonal") + *--------------------------------------------------------------------*/ + + else if ( dev < thresh[0] ) + { + music_flag2 = 1; + } + + /*--------------------------------------------------------------------* + * statistical deviation > Thresh0 + * (Statistical deviation is high: the new tonal category is not tonal) + *--------------------------------------------------------------------*/ + + else + { + *nb_thr_1 += 1; + *nb_thr_3 = 0; + } + + /*------------------------------------------------------------------------* + * Update the thresholds + *------------------------------------------------------------------------*/ + + if ( *nb_thr_3 > NB_TH3_MIN ) + { + /* the number of consecutive categories type 3 or 4 (most tonal and tonal) */ + /* is greater than 30 frames ->increase the deviations thresholds to allow more variation */ + thresh[0] += TH_UP; + thresh[1] += TH_UP; + thresh[2] += TH_UP; + thresh[3] += TH_UP; + } + else if ( *nb_thr_1 > NB_TH1_MIN ) + { + /* the number of consecutive categories type 0 (non tonal frames) */ + /* is greater than 30 frames -> decrease the deviations thresholds to allow less variation */ + thresh[0] -= TH_DW; + thresh[1] -= TH_DW; + thresh[2] -= TH_DW; + thresh[3] -= TH_DW; + } + + /* limitation of the threshold (this local macro stores the highest of the two and it also counts the # of operations) */ + set_max( &thresh[0], TH_0_MIN2 ); + set_max( &thresh[1], TH_1_MIN2 ); + set_max( &thresh[2], TH_2_MIN2 ); + + set_min( &thresh[0], TH_0_MAX ); + set_min( &thresh[1], TH_1_MAX ); + set_min( &thresh[2], TH_2_MAX ); + + set_max( &thresh[3], TH_3_MIN2 ); + set_min( &thresh[3], TH_3_MAX ); + /*------------------------------------------------------------------------* + * Final updates + *------------------------------------------------------------------------*/ + + *last_music_flag = music_flag2; + if ( vad_flag == 0 ) + { + /* overwrite decision in unvoiced frames */ + music_flag2 = 0; + } + + return music_flag2; +} diff --git a/lib_com/stat_com.h b/lib_com/stat_com.h new file mode 100644 index 0000000000..7f82c9272f --- /dev/null +++ b/lib_com/stat_com.h @@ -0,0 +1,688 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + + +#ifndef STAT_COM_H +#define STAT_COM_H + +#include +#include "options.h" +#include "typedef.h" +#include "cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +/* Forward declaration of Decoder_State */ +struct Decoder_State; + + +/*----------------------------------------------------------------------------------* + * Declaration of structures + *----------------------------------------------------------------------------------*/ + +typedef struct +{ + float a[MAXLAG_WI]; + float b[MAXLAG_WI]; + int16_t lag; + int16_t nH; + int16_t nH_4kHz; + float upper_cut_off_freq_of_interest; + float upper_cut_off_freq; + int32_t sampling_rate; +} DTFS_STRUCTURE; + +typedef struct +{ + int16_t lead_sign_ind; + uint32_t index, size; + int16_t dim, k_val; +} PvqEntry; + +typedef struct +{ + uint8_t buf[MAX_SIZEBUF_PBITSTREAM]; + signed char curPos; + uint16_t numByte; + uint16_t numbits; + uint16_t maxBytes; +} TCQ_BITSTREAM, *TCQ_PBITSTREAM; + +typedef struct +{ + TCQ_PBITSTREAM bsInst; + + uint32_t low; + uint32_t high; + + uint32_t value; + int16_t bits_to_follow; + + int16_t num_bits; + int16_t max_bits; + +} ARCODEC, *PARCODEC; + +/*---------------------------------------------------------------* + * ACELP Encoder/Decoder Static RAM * + *---------------------------------------------------------------*/ + +typedef struct +{ + /*Coding mode info*/ + int16_t mode_index; + + /*LPC info*/ + int16_t midLpc; /*Flag for using or not mid LPC for the current frame*/ + int16_t midLpc_enable; /*Flag enabling or not the mid LPC for the current mode*/ + + /*ICB flags*/ + int16_t pre_emphasis; /*Flag for triggering pre-emphasis*/ + int16_t pitch_sharpening; /*Flag for triggering pitch sharpening*/ + int16_t phase_scrambling; /*Flag for triggering phase scrambling*/ + int16_t formant_enh; /*Flag for triggering formant enhancement*/ + int16_t formant_tilt; /*Flag for triggering formant tile*/ + + int16_t voice_tilt; /*Flag for triggering new voice factor tilt*/ + + float formant_enh_num; + float formant_enh_den; + + int16_t bpf_mode; + + int16_t nrg_mode; + int16_t nrg_bits; + + int16_t ltp_mode; + int16_t ltp_bits; + + int16_t ltf_mode; + int16_t ltf_bits; + + int16_t gains_mode[NB_SUBFR16k]; + + int16_t fixed_cdk_index[NB_SUBFR16k]; + + /* IVAS related parameters */ + int16_t pitch_bits[NB_SUBFR16k]; + int16_t lsf_bits; + int16_t mid_lsf_bits; + int16_t AVQ_cdk_bits[NB_SUBFR16k]; + int16_t FEC_mode; /* 0 == no FEC bits; 1 == class; 2 == clas+energy; 3== class+energy+pulse */ + int16_t ubits; + int16_t fcb_mode; /* 0 == mode1; 1 == mode2 */ + +} ACELP_config; + +typedef struct +{ + int16_t bits; /* bits per subframe */ + int16_t nbiter; /* number of iterations */ + float alp; /* initial energy of all fixed pulses */ + int16_t nb_pulse; /* number of pulses */ + int16_t fixedpulses; /* number of pulses whose position is determined from correlation and not by iteration */ + int16_t nbpos[13]; /* number of positions tried in the pair-wise search */ + enum TRACKPOS codetrackpos; /* ordering of tracks -mode */ + +} PulseConfig; + +/*---------------------------------------------------------------* + * TCX Encoder/Decoder Static RAM * + *---------------------------------------------------------------*/ + +typedef struct +{ + uint8_t maxOrder; + uint8_t nMaxFilters; /* Maximum number of filters. */ + uint8_t allowTnsOnWhite; + struct TnsParameters const *pTnsParameters; /* Parameters for each TNS filter */ + int16_t iFilterBorders[TNS_MAX_NUM_OF_FILTERS + 1]; /* Lower borders for each filter. Upper border for the first filter is nsbBorders-1. Upper borders for other filters is the lower border of previous filter. */ + +} STnsConfig; + +typedef struct TNS_filter_structure +{ + int16_t filterType; + int16_t spectrumLength; /* Number of subbands covered by the filter. */ + int16_t order; /* Filter order. */ + int16_t coefIndex[TNS_MAX_FILTER_ORDER]; /* Quantized filter coefficients. */ + float predictionGain; /* Prediction gain. The ratio of a signal and TNS residual energy. */ + float avgSqrCoef; /* Average squared filter coefficient. */ + +} STnsFilter; + +typedef struct /* TNS data describing all active filters. */ +{ + int16_t nFilters; /* Number of active filters. */ + int16_t tnsOnWhitenedSpectra; + STnsFilter filter[TNS_MAX_NUM_OF_FILTERS]; /* Active filters. */ + +} STnsData; + +/* Structure containing lengths for band division and polynomial aproximation for spectrum weighting. + Borders and weighting are available for TCX10 and TCX20 for a specific sampling rate. */ +typedef struct +{ + const uint8_t bandLengthsTCX20[FDNS_NPTS]; /* Length of a band in number of bins. Range is 2..31 */ + const uint8_t bandLengthsTCX10[FDNS_NPTS]; /* Length of a band in number of bins. Range is 2..20, always divisible by 2 */ + +} SpectrumWarping; + +typedef struct +{ + int16_t nBins; /* Range 0..1200 */ + uint8_t nBands; /* Range 0..64 */ + const uint8_t *bandLengths; /* Length of a band in number of bins. Range is 2..31 */ + +} PsychoacousticParameters; + + +typedef struct TCX_config_structure +{ + /* TCX mdct window */ + float tcx_mdct_window[L_MDCT_OVLP_MAX_CORE_FS]; /* Sine window for OL decision and DTX transitions*/ + float tcx_aldo_window_1[L_ALDO_WIN1_MAX_CORE_FS]; /* ALDO window long slope */ + float tcx_aldo_window_2[L_MDCT_OVLP_MAX_CORE_FS]; /* ALDO window short slope */ + float *tcx_aldo_window_1_trunc; /* ALDO window truncated long slope */ + + int16_t last_aldo; + float tcx_mdct_window_half[L_MDCT_HALF_OVLP_MAX_CORE_FS]; + float tcx_mdct_window_minimum[L_MDCT_MIN_OVLP_MAX_CORE_FS]; + float tcx_mdct_window_trans[L_MDCT_MIN_OVLP_MAX_CORE_FS]; /* transition window for ACELP->TCX */ + + int16_t tcx5Size; /* Size of the TCX5 spectrum in number of samples. Always 5ms. */ + + int16_t tcx_curr_overlap_mode; /* window overlap of current frame (0: full, 2: none, or 3: half) */ + int16_t tcx_last_overlap_mode; /* previous window overlap, i.e. left-side overlap of current frame */ + + int16_t tcx_mdct_window_length; /* length of overlap-add region*/ + int16_t tcx_mdct_window_half_length; /* length of the "half" overlap */ + int16_t tcx_mdct_window_min_length; /* length of the "minimum" overlap */ + int16_t tcx_mdct_window_trans_length; /* length of the ACELP->TCX overlap */ + + int16_t tcx_mdct_window_delay; /* length of window delay */ + int16_t tcx_offset; /* Offset of the folding point relative to the end of the previous synthetised frame */ + int16_t tcx_mdct_window_length_old; /* for keeping old value for sample rate switching */ + float tcx_mdct_windowFB[L_MDCT_OVLP_MAX]; + float tcx_aldo_window_1_FB[L_ALDO_WIN1_FB_MAX]; /* ALDO window long slope */ + float tcx_aldo_window_2_FB[L_MDCT_OVLP_MAX]; /* ALDO window short slope */ + float *tcx_aldo_window_1_FB_trunc; /* ALDO window truncated long slope */ + + float tcx_mdct_window_halfFB[L_MDCT_HALF_OVLP_MAX]; + float tcx_mdct_window_minimumFB[L_MDCT_MIN_OVLP_MAX]; + float tcx_mdct_window_transFB[L_MDCT_TRANS_OVLP_MAX]; /* transition window for ACELP->TCX */ + + int16_t tcx5SizeFB; /* Size of the TCX5 spectrum in number of samples. Always 5ms. */ + + int16_t tcx_mdct_window_lengthFB; /* length of window, length of overlap-add region */ + int16_t tcx_mdct_window_half_lengthFB; /* length of the "half" overlap window */ + int16_t tcx_mdct_window_min_lengthFB; /* length of the "minimum" overlap window */ + int16_t tcx_mdct_window_trans_lengthFB; /* length of the ACELP->TCX overlap */ + + int16_t tcx_mdct_window_delayFB; /* length of window delay */ + int16_t tcx_offsetFB; + + int16_t tcx_coded_lines; /* max number of coded lines, depending on audio bandwidth */ + + /* FAC window */ + int16_t lfacNext; + int16_t lfacNextFB; + + /* TNS */ + int16_t fIsTNSAllowed; + STnsConfig tnsConfig[2][2]; + STnsConfig const *pCurrentTnsConfig; + + /*Quantization*/ + float sq_rounding; /*set the sq deadzone (no deadzone=0.5f)*/ + int16_t tcxRateLoopOpt; + + /*Bandwidth*/ + float preemph_fac; /* preemphasis factor */ + float bandwidth; + + /* Context HM - Residual Quantization*/ + int16_t ctx_hm; /* Flag for enabling Context HM */ + int16_t resq; /* Flag for enabling Residual Quantization */ + int16_t coder_type; /* GC,VC,UC */ + + float na_scale; + + float SFM2; + + /* Psychoacoustic parameters for LPC in TCX */ + PsychoacousticParameters psychParamsTCX10; + PsychoacousticParameters psychParamsTCX20; + PsychoacousticParameters psychParamsTCX20AfterACELP; + PsychoacousticParameters const *psychParamsCurrent; + +} TCX_config, *TCX_CONFIG_HANDLE; + +typedef struct +{ + int32_t low; + int32_t high; + uint32_t value; + int32_t bits_to_follow; +} Tastat; + +/*---------------------------------------------------------------* + * FD CNG common structure * + *---------------------------------------------------------------*/ + +typedef struct +{ + int16_t fftlen; /* FFT length */ + int16_t stopFFTbin; /* Number of FFT bins to be actually processed */ + int16_t numPartitions; /* Number of partitions */ + const int16_t *sidPartitions; /* Upper boundaries for grouping the (sub)bands into partitions when transmitting SID frames (define as NULL pointer to avoid grouping) */ + + int16_t numShapingPartitions; /* Number of partitions */ + const int16_t *shapingPartitions; /* Upper boundaries for grouping the (sub)bands into partitions for shaping at the decoder (define as NULL pointer to avoid grouping) */ + +} FD_CNG_SETUP; + +typedef struct +{ + int16_t bwmode; + + int32_t bitrateFrom; + int32_t bitrateTo; + + float scale; + +} SCALE_SETUP; + +typedef struct +{ + FD_CNG_SETUP FdCngSetup; + + int16_t numSlots; /* Number of time slots in CLDFB matrix */ + int16_t regularStopBand; /* Number of CLDFB bands to be considered */ + + int16_t numCoreBands; /* Number of core bands to be decomposed into FFT subbands */ + int16_t stopBand; /* Total number of (sub)bands to be considered */ + int16_t startBand; /* First (sub)band to be considered */ + int16_t stopFFTbin; /* Total number of FFT subbands */ + int16_t frameSize; /* Frame size in samples */ + int16_t fftlen; /* FFT length used for the decomposition */ + + float timeDomainBuffer[L_FRAME16k]; + float fftBuffer[FFTLEN]; + float olapBufferAna[FFTLEN]; + float olapBufferSynth[FFTLEN]; + float olapBufferSynth2[FFTLEN]; + const float *olapWinAna; + const float *olapWinSyn; + const float *fftSineTab; + + float msM_win; + float msM_subwin; + + int16_t msFrCnt_init_counter; /* Frame counter at initialization */ + int16_t msFrCnt_init_thresh; + float init_old; + int16_t msFrCnt; /* Frame counter */ + float msAlphaCor[2]; /* Correction factor (smoothed) */ + float msSlope[2]; + float msQeqInvAv[2]; + int16_t msMinBufferPtr; + + float msPsdSum[2]; + float msPeriodogSum[2]; + + int16_t offsetflag; + + float periodog[PERIODOGLEN]; /* Periodogram */ + float cngNoiseLevel[FFTCLDFBLEN]; /* Noise level applied for the CNG in each (sub)band */ + int16_t seed; /* Seed memory (for random function) */ + int16_t seed2; /* Seed for second noise source in MDCT-Stereo DTX */ + int16_t seed3; /* Seed for third noise source in MDCT-Stereo DTX */ + + int16_t npart; /* Number of partitions */ + int16_t midband[NPART]; /* Central band of each partition */ + int16_t nFFTpart; /* Number of hybrid spectral partitions */ + int16_t part[NPART]; /* Partition upper boundaries (band indices starting from 0) */ + float psize[NPART]; /* Partition sizes */ + float psize_inv[NPART]; /* Inverse of partition sizes */ + float FFTscalingFactor; /* Squared ratio between core signal analysis FFT and noise estimator FFT */ + float scalingFactor; + int16_t nCLDFBpart; /* Number of CLDFB spectral partitions */ + int16_t CLDFBpart[NPARTCLDFB]; /* CLDFB Partition upper boundaries (band indices starting from 0 above the core coder bands) */ + float CLDFBpsize_inv[NPARTCLDFB]; /* Inverse of CLDFB partition sizes */ + + int16_t inactive_frame_counter; + int16_t sid_frame_counter; + int16_t active_frame_counter; /* Active frame counter limited to MSBUFLEN in stereo decoder */ + + float sidNoiseEst[NPART]; /* Transmitted noise level */ + + float sidNoiseEstLp[NPART]; + + int16_t frame_type_previous; + + float A_cng[17]; + float exc_cng[L_FRAME16k]; + + int32_t CngBitrate; + int16_t CngBandwidth; + + int16_t flag_noisy_speech; + float likelihood_noisy_speech; + + float coherence; /* inter-channel coherence of noise */ + int16_t no_side_flag; /* indicates whether the side noise shape should be zeroed-out or not */ +} FD_CNG_COM, *HANDLE_FD_CNG_COM; + + +/*---------------------------------------------------------------* + * TNS bitmapping * + *---------------------------------------------------------------*/ + +/** Function that gets specific value from p. + * @param p Pointer to a variable that can also be structure or array. + * @param index Index of a variable when p is an array, otherwise 0. + * @param pValue Pointer to the value. + * @return Substructure associated with this value or NULL if there is none. + */ +typedef void const *( *TGetParamValue )( void const *p, int16_t index, int16_t *pValue ); + +/** Function that puts specific value to p. + * @param p Pointer to a variable that can also be structure or array. + * @param index Index of a variable when p is an array, otherwise 0. + * @param value The value. + * @return Substructure associated with this value or NULL if there is none. + */ +typedef void *( *TSetParamValue )( void *p, int16_t index, int16_t value ); + +/** Function that return required number of bits for a value when it is coded. + * @param value The value. + * @param index Index of a variable when it is an element of an array, otherwise 0. + * @return Number of bits required to code the value. + */ +typedef int16_t ( *TGetNumberOfBits )( int16_t value, int16_t index ); + +/** Function that encodes a value. + * @param value The value. + * @param index Index of a variable when it is an element of an array, otherwise 0. + * @return Coded value. + */ +typedef int16_t ( *TEncodeValue )( int16_t value, int16_t index ); + +/** Function that decodes a value. + * @param bitstream Bitstream containing a coded value. + * @param index Index of a variable when it is an element of an array, otherwise 0. + * @param pValue A pointer where the decoded value should be stored. + * @return Number of bits read from the bitstream. + */ +typedef int16_t ( *TDecodeValue )( struct Decoder_State *st, int16_t index, int16_t *pValue ); + +/** Linear prediction analysis/synthesis filter definition. + * @param order filter order. + * @param parCoeff filter (PARCOR) coefficients. + * @param state state of the filter. Must be at least of 'order' size. + * @param x the current input value. + * @return the output of the filter. + */ +typedef float ( *TLinearPredictionFilter )( const int16_t order, const float parCoeff[], float *state, float x ); + +/** Structure that defines mapping between a parameter and a bistream. */ +typedef struct ParamBitMap +{ + /** Number of bits in a bitstream required for the parameter. + * If nBits is equal to 0 then GetNumberOfBits is used. + */ + int16_t nBits; + /** Function to get the number of bits required for a value of this parameter. + * If nBits != 0 it is not used and can be set to NULL. + * If fZeroAllowed == 0 then GetNumberOfBits must take care of this. + */ + TGetNumberOfBits GetNumberOfBits; + /** If fZeroAllowed is 0 then the value can be zero. + * If the value can't be zero then value-1 is stored in a bitstream. + * If EncodeValue is not equal to NULL, then the encode/decode function + * must take care of this flag - there is no additional processing in parameter bitmapping. + * If EncodeValue is equal to NULL, then the encode/decode function takes care of this. + */ + int16_t fZeroAllowed; + /** Function to get the value of this parameter. + * The function returns a pointer to be used in functions in pSubParamBitMap. + * If the function returns NULL then the same pointer as for the current + * parameter is to be used. + * The function should not do any additional processing if fZeroAllowed == 0, + * but just set the value as it is. + */ + TGetParamValue GetParamValue; + /** Function to set the value of this parameter. + * The function returns a pointer to be used in functions in pSubParamBitMap. + * If the function returns NULL then the same pointer as for the current + * parameter is to be used. + * The function should not do any additional processing if fZeroAllowed == 0, + * but just set the value as it is. + */ + TSetParamValue SetParamValue; + + /** Function to encode a value of this parameter. + * When it is equal to NULL, fixed-width coding is used. + * If fZeroAllowed == 0 then EncodeValue must take care of this. + */ + TEncodeValue EncodeValue; + + /** Function to decode a value of this parameter. + * When it is equal to NULL, fixed-width coding is used. + * If fZeroAllowed == 0 then DecodeValue must take care of this. + */ + TDecodeValue DecodeValue; + + /** Pointer to the map for substructure. + * The number of structures is determined by this parameter's value. + * NULL means that there is no substructure. + */ + struct ParamsBitMap const *pSubParamBitMap; +} ParamBitMap; + +/** Structure that defines mapping between parameters and a bistream. */ +typedef struct ParamsBitMap +{ + /** Number of parameters in params. */ + int16_t nParams; + /** Definition of the mapping for each parameter. */ + ParamBitMap params[10]; +} ParamsBitMap; + +struct TnsParameters +{ + /* Parameters for each TNS filter */ + int16_t startLineFrequency; /* Starting lower frequency of the TNS filter [20..16000] */ + int16_t nSubdivisions; /* Number of spectrum subdivisions in which the filter operates [1..8) */ + float minPredictionGain; /* Minimum prediction gain required to turn on the TNS filter */ + float minAvgSqrCoef; /* Minimum average square of coefficients required to turn on the TNS filter */ + float minEnergyChange; /* Minimum energy change required to turn on the TNS filter */ +}; + +/**********************************************/ +/* Helper structures for hufmann table coding */ +/**********************************************/ + +typedef struct +{ + uint8_t value; + uint16_t code; + uint8_t nBits; +} Coding; + + +/* Scale TCX setup */ +typedef struct +{ + int16_t bwmode; + + int32_t bitrateFrom; + int32_t bitrateTo; + + float scale; + +} SCALE_TCX_SETUP; + + +typedef struct +{ + uint16_t frame_bits; /*Bits per frame*/ + uint16_t frame_net_bits; /*Net Bits per frame*/ + uint8_t transmission_bits; /*max=1*/ + uint8_t transmission_mode[2]; /*SID,VBR/CBR*/ + uint8_t bandwidth_bits; /*max=2*/ + uint8_t bandwidth_min; /*first valid bandwidth (NB,WB,SWB,FB)*/ + uint8_t bandwidth_max; /*last valid bandwidth (NB,WB,SWB,FB)*/ + uint8_t reserved_bits; /*max=1*/ + +} FrameSizeParams; + +typedef struct +{ + int16_t no_channels; + int16_t no_col; + int16_t p_filter_length; + CLDFB_TYPE type; + int16_t ds; /* delay synthesis */ + int16_t da; /* delay analysis */ + CLDFB_PROTOTYPE prototype; + + const float *p_filter; + + /* rotation vectors */ + const float *rot_vec_ana_re; + const float *rot_vec_ana_im; + const float *rot_vec_syn_re; + const float *rot_vec_syn_im; + + /* rotation vectors for delay */ + const float *rot_vec_ana_delay_re; + const float *rot_vec_ana_delay_im; + const float *rot_vec_syn_delay_re; + const float *rot_vec_syn_delay_im; + + /* memory helper states */ + float *memory; + uint16_t memory_length; + + /* main filter state */ + float *cldfb_state; + + /* other parameters */ + int16_t bandsToZero; /* bands not synthesized */ + int16_t nab; /* number of active bands */ + float scale; /* scaling of frequency domain */ + +} CLDFB_FILTER_BANK, *HANDLE_CLDFB_FILTER_BANK; + + +typedef enum +{ + FRAME_0 = 0, + FRAME_2 = 40, + FRAME_2_4 = 48, + FRAME_4 = 80, + FRAME_5_6 = 112, + FRAME_7_2 = 144, + FRAME_8 = 160, + FRAME_9_6 = 192, + FRAME_13_2 = 264, + FRAME_16_4 = 328, + FRAME_24_4 = 488, + FRAME_32 = 640, + FRAME_48 = 960, + FRAME_64 = 1280, + FRAME_96 = 1920, + FRAME_128 = 2560 + +} FRAME_SIZE; + +/*---------------------------------------------------------------* + * IGF * + *---------------------------------------------------------------*/ + +typedef struct igf_grid_struct +{ + int16_t swb_offset[IGF_MAX_SFB]; + int16_t swb_offset_len; + int16_t startFrequency; + int16_t stopFrequency; + int16_t startLine; + int16_t stopLine; + int16_t startSfb; + int16_t stopSfb; + int16_t sfbWrap[IGF_MAX_TILES + 1]; + int16_t sbWrap[IGF_MAX_TILES]; + int16_t nTiles; + int16_t minSrcSubband; + int16_t minSrcFrequency; + int16_t tile[IGF_MAX_TILES + 1]; + int16_t infoIsRefined; + int16_t infoGranuleLen; + float whiteningThreshold[2][IGF_MAX_TILES]; + float gFactor; + float fFactor; + float lFactor; +} IGF_GRID, *H_IGF_GRID; + +typedef struct IGF_INFO_struct +{ + int16_t *nfSeed; + int16_t nfSeedBuf[2]; + int32_t sampleRate; + int16_t frameLength; + int16_t maxHopsize; + IGF_GRID grid[IGF_NOF_GRIDS]; + int16_t bitRateIndex; +} IGF_INFO, *H_IGF_INFO; + + +typedef struct +{ + int16_t *indexBuffer; + int16_t *peakIndices, *holeIndices; + int16_t numPeakIndices, numHoleIndices; +} CONTEXT_HM_CONFIG; + +typedef enum +{ + LPC_ABS_QUANT_BITS = 8, + SNS_ABS_QUANT_BITS = 10 +} ABS_QUANT_BITS; + +#endif diff --git a/lib_com/stat_noise_uv_mod.c b/lib_com/stat_noise_uv_mod.c new file mode 100644 index 0000000000..72b843d1db --- /dev/null +++ b/lib_com/stat_noise_uv_mod.c @@ -0,0 +1,241 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define TILT_COMP_LIM 0.75f + +/*---------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------*/ + +static float calc_tilt( const float *x, const int16_t len ); + +/*--------------------------------------------------------------------* + * stat_noise_uv_mod() + * + * Modifies excitation signal in stationary noise segments + *--------------------------------------------------------------------*/ + +void stat_noise_uv_mod( + const int16_t coder_type, /* i : coder type */ + float noisiness, /* i : noisiness parameter */ + const float *const lsp_old, /* i : old LSP vector at 4th sfr */ + const float *const lsp_new, /* i : LSP vector at 4th sfr */ + const float *const lsp_mid, /* i : LSP vector at 2nd sfr */ + float *Aq, /* o : A(z) quantized for the 4 subframes */ + float *exc2, /* o : excitation buffer */ + const int16_t bfi, /* i : bad frame indicator */ + float *ge_sm, /* i/o: smoothed excitation gain */ + int16_t *uv_count, /* i/o: unvoiced counter */ + int16_t *act_count, /* i/o: activation counter */ + float lspold_s[], /* i/o: old LSP */ + int16_t *noimix_seed, /* i/o: mixture seed */ + float *st_min_alpha, /* i/o: minimum alpha */ + float *exc_pe, /* i/o: memory of the preemphasis filter */ + const int32_t bitrate, /* i : core bitrate */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t i, k; + int16_t i_subfr; + float exctilt; + float vare, ge, randval; + float alpha, min_alpha; + float lspnew_s[M], oldlsp_mix[M], midlsp_mix[M], newlsp_mix[M]; + float beta; + float noimix_fac; + + alpha = 1.0f; + min_alpha = 0.5f; + + /*---------------------------------------------------------* + * Update minimum mixing factor alpha + *---------------------------------------------------------*/ + + /* Activate modifications for WB/SWB <= 9.6kbps for NB only at 9.6kbps */ + if ( coder_type == INACTIVE && ( bitrate == ACELP_9k60 || ( bitrate < ACELP_9k60 && bwidth > NB ) ) ) + { + if ( !bfi ) + { + min_alpha = max( noisiness / 31.0f * 0.5f + 0.5f, *st_min_alpha - 0.05f ); + *st_min_alpha = min_alpha; + } + else + { + min_alpha = *st_min_alpha; + } + } + + /*---------------------------------------------------------* + * Mix excitation signal with random noise + *---------------------------------------------------------*/ + + /* Activate modifications for WB/SWB <= 9.6kbps for NB only at 9.6kbps */ + if ( coder_type == INACTIVE && ( bitrate == ACELP_9k60 || ( bitrate < ACELP_9k60 && bwidth > NB ) ) ) + { + /* preemphasize the excitation signal with its tilt */ + if ( min_alpha < TILT_COMP_LIM ) + { + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + exctilt = calc_tilt( &exc2[i_subfr], L_SUBFR ); + exctilt = ( TILT_COMP_LIM - min_alpha ) / ( TILT_COMP_LIM - 0.5f ) * exctilt; + + preemph( &exc2[i_subfr], exctilt, L_SUBFR, exc_pe ); + } + } + + /* set the mixing factor alpha */ + ( *uv_count )++; + if ( *uv_count <= START_NG ) + { + *act_count = 3; + alpha = 1; + mvr2r( lsp_new, lspold_s, M ); + } + else + { + *act_count = 0; + if ( *uv_count > FULL_NG ) + { + *uv_count = FULL_NG; + } + + alpha = 1 + ( (float) *uv_count - START_NG ) / ( (float) FULL_NG - START_NG ) * ( min_alpha - 1.0f ); + } + + /* calculate lowpass-filtered excitation gain */ + vare = 0.01f; + for ( i = 0; i < L_FRAME; i++ ) + { + vare += exc2[i] * exc2[i]; + } + + ge = (float) sqrt( vare / (float) L_FRAME ); + if ( *uv_count == 1 ) + { + *ge_sm = ge; + } + else + { + *ge_sm = ISP_SMOOTHING_QUANT_A1 * *ge_sm + ( 1 - ISP_SMOOTHING_QUANT_A1 ) * ge; + } + + /* generate mixture of excitation and noise */ + beta = 2 * ( alpha - 0.5f ); + noimix_fac = ( beta + *ge_sm / ge * ( 1 - beta ) ) / (float) sqrt( alpha * alpha + ( 1 - alpha ) * ( 1 - alpha ) ); + + for ( i = 0; i < L_FRAME; i++ ) + { + randval = ge * (float) sqrt( 12.0f ) * ( (float) own_random( noimix_seed ) / 65536.0f ); + exc2[i] = noimix_fac * ( exc2[i] * alpha + randval * ( 1 - alpha ) ); + } + + /* generate low-pass filtered version of LSP coefficients */ + for ( k = 0; k < M; k++ ) + { + lspnew_s[k] = (float) ISP_SMOOTHING_QUANT_A1 * lspold_s[k] + (float) ( 1 - ISP_SMOOTHING_QUANT_A1 ) * lsp_new[k]; + } + + for ( i = 0; i < M; i++ ) + { + oldlsp_mix[i] = beta * lsp_old[i] + ( 1 - beta ) * lspold_s[i]; + midlsp_mix[i] = beta * lsp_mid[i] + ( 1 - beta ) * 0.5f * ( lspold_s[i] + lspnew_s[i] ); + newlsp_mix[i] = beta * lsp_new[i] + ( 1 - beta ) * lspnew_s[i]; + } + + /* redo the interpolation of LSP coefficients and recalculte A(z) */ + int_lsp4( L_FRAME, oldlsp_mix, midlsp_mix, newlsp_mix, Aq, M, 0 ); + + mvr2r( lspnew_s, lspold_s, M ); + } + else + { + /* active signal - reset counters */ + ( *act_count )++; + if ( *act_count > 3 ) + { + *act_count = 3; + *uv_count = 0; + } + } + + return; +} + +/*---------------------------------------------------------------------------* + * calc_tilt() + * + * Calculate spectral tilt by means of 1st-order LP analysis + *---------------------------------------------------------------------------*/ + +/*! r: estimated tilt */ +static float calc_tilt( + const float *x, /* i : Signal input */ + const int16_t len /* i : length */ +) +{ + int16_t i; + float r0, r1; + + r0 = 0; + r1 = 0; + + for ( i = 0; i < len - 1; i++ ) + { + r0 += x[i] * x[i]; + r1 += x[i] * x[i + 1]; + } + + if ( r0 == 0 ) + { + r0 = 0.005f; + } + + return r1 / r0; +} diff --git a/lib_com/stl.h b/lib_com/stl.h new file mode 100644 index 0000000000..c699fd899b --- /dev/null +++ b/lib_com/stl.h @@ -0,0 +1,71 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* + =========================================================================== + File: STL.H v.2.3 - 30.Nov.2009 + =========================================================================== + + ITU-T STL BASIC OPERATORS + + MAIN HEADER FILE + + History: + 07 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + March 06 v2.1 Changed to improve portability. + + ============================================================================ +*/ + + +#ifndef _STL_H +#define _STL_H + +#include "options.h" /* TODO: TEMPORARY during BASOP development - to be removed */ +#include "typedef.h" +#include "basop32.h" +#include "move.h" +#include "control.h" +#include "enh1632.h" +#include "enh40.h" + +#endif /* ifndef _STL_H */ + + +/* end of file */ diff --git a/lib_com/swb_bwe_com.c b/lib_com/swb_bwe_com.c new file mode 100644 index 0000000000..4e692fc22b --- /dev/null +++ b/lib_com/swb_bwe_com.c @@ -0,0 +1,1549 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * WB_BWE_gain_pred() + * + * predict WB frequency envelopes for 0b WB BWE + *-------------------------------------------------------------------*/ + +int16_t WB_BWE_gain_pred( + float *WB_fenv, /* o : WB frequency envelopes */ + const float *core_dec_freq, /* i : Frequency domain core decoded signal */ + const int16_t coder_type, /* i : coding type */ + const int16_t prev_coder_type, /* i : coding type of last frame */ + const float prev_WB_fenv, /* i : envelope for last frame */ + const float voice_factors[], /* i : voicing factors */ + const float pitch_buf[], /* i : pitch buffer */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + const float last_wb_bwe_ener, /* i : previous frame wb bwe signal energy */ + const int16_t last_extl, /* i : extl. layer for last frame */ + const float tilt ) +{ + float enerL, alfa = 1.0f; + int16_t n_freq, mode; + int16_t ener_var_flag = 0; + float voice_factor, pitch; + int16_t env_var_flag = 0; + + mode = NORMAL; + + enerL = EPSILON; + for ( n_freq = 128; n_freq < 192; n_freq++ ) + { + enerL += core_dec_freq[n_freq] * core_dec_freq[n_freq]; + } + WB_fenv[0] = EPSILON; + for ( n_freq = 192; n_freq < 224; n_freq++ ) + { + WB_fenv[0] += core_dec_freq[n_freq] * core_dec_freq[n_freq]; + } + + WB_fenv[1] = EPSILON; + for ( n_freq = 224; n_freq < 256; n_freq++ ) + { + WB_fenv[1] += core_dec_freq[n_freq] * core_dec_freq[n_freq]; + } + + voice_factor = sum_f( voice_factors, 4 ); + pitch = sum_f( pitch_buf, 4 ) + EPSILON; + + if ( enerL < 16.0f * max( WB_fenv[0], WB_fenv[1] ) && pitch < 308 ) + { + ener_var_flag = 1; + } + + if ( WB_fenv[0] > 2.0f * WB_fenv[1] ) + { + alfa = max( 2.0f * WB_fenv[1] / WB_fenv[0], 0.1f ); + WB_fenv[0] *= alfa; + } + else if ( 2.0f * WB_fenv[0] < WB_fenv[1] && coder_type != UNVOICED ) + { + alfa = max( 2.0f * WB_fenv[0] / WB_fenv[1], 0.1f ); + WB_fenv[1] *= alfa; + } + + WB_fenv[0] = (float) sqrt( ( WB_fenv[0] + WB_fenv[1] ) / 64 ); + + if ( coder_type != AUDIO && coder_type != UNVOICED && ener_var_flag == 0 ) + { + WB_fenv[0] *= 1.5f; + } + + if ( coder_type != TRANSITION && coder_type != AUDIO && coder_type != UNVOICED && sqrt( enerL ) > 40.0f * WB_fenv[0] && alfa > 0.9f && + !( coder_type == prev_coder_type && WB_fenv[0] > prev_WB_fenv ) ) + { + WB_fenv[0] *= min( (float) ( 0.025f * sqrt( enerL ) / WB_fenv[0] ), 4.0f ); + + if ( WB_fenv[0] > prev_WB_fenv ) + { + WB_fenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv; + } + } + + alfa = min( 1.5f, max( 0.5f, 77.0f * voice_factor / pitch ) ); + if ( sqrt( enerL ) > 64.0f * alfa * WB_fenv[0] && 3.0f * WB_fenv[0] * WB_fenv[0] < sqrt( enerL ) && prev_coder_type != UNVOICED ) + { + env_var_flag = 1; + WB_fenv[0] *= min( (float) ( 0.015625f * sqrt( enerL ) / WB_fenv[0] ), 4.0f ); + + if ( WB_fenv[0] > prev_WB_fenv ) + { + WB_fenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv; + } + } + + if ( coder_type == UNVOICED || prev_coder_type == UNVOICED ) + { + WB_fenv[0] *= 0.5f; + } + + if ( coder_type != AUDIO ) + { + WB_fenv[0] /= max( 1.2f * voice_factor, 1.0f ); + WB_fenv[0] *= min( 2.0f, max( 0.125f, pitch / 400.0f ) ); + } + + if ( last_core_brate > ACELP_8k00 && WB_fenv[0] > last_wb_bwe_ener ) + { + WB_fenv[0] = 0.9f * last_wb_bwe_ener + 0.1f * WB_fenv[0]; + } + + if ( last_extl != WB_BWE && ( tilt < 8.f ) ) + { + WB_fenv[0] *= min( 0.5f, 16.0f * tilt ); + } + + if ( env_var_flag == 1 ) + { + WB_fenv[1] = 1.5f * WB_fenv[0]; + WB_fenv[0] *= 0.75f; + } + else + { + WB_fenv[1] = WB_fenv[0]; + } + + if ( coder_type == UNVOICED || prev_coder_type == UNVOICED ) + { + WB_fenv[1] *= 0.5f; + } + + return ( mode ); +} + +/*-------------------------------------------------------------------* + * calc_normal_length() + * + *-------------------------------------------------------------------*/ + +void calc_normal_length( + const int16_t core, /* i : core */ + const float *sp, /* i : input signal */ + const int16_t mode, /* i : input mode */ + const int16_t extl, /* i : extension layer */ + int16_t *L_swb_norm, /* o : normalize length */ + int16_t *prev_L_swb_norm /* i/o: last normalize length */ +) +{ + int16_t i, n_freq, n_band, THRES; + const float *pit; + float peak, mean, mag; + int16_t L_swb_norm_trans, L_swb_norm_norm, L_swb_norm_harm, L_swb_norm_cur; + int16_t N; + + if ( core == HQ_CORE || extl == SWB_BWE || extl == FB_BWE ) + { + THRES = 8; + } + else + { + THRES = 4; + } + + if ( core == HQ_CORE && ( mode == HQ_HARMONIC || mode == HQ_HVQ ) ) + { + N = 13; + } + else + { + N = 16; + } + + n_band = 0; + pit = sp; + for ( i = 0; i < N; i++ ) + { + peak = 0.0f; + mean = 0; + + for ( n_freq = 0; n_freq < 16; n_freq++ ) + { + mag = (float) fabs( *pit ); + if ( mag > peak ) + { + peak = mag; + } + mean += mag; + pit++; + } + + if ( ( 15 + THRES ) * peak > THRES * mean && peak > 10 ) + { + n_band += 1; + } + } + + if ( core == ACELP_CORE ) + { + L_swb_norm_trans = (int16_t) ( 4 + 0.25f * n_band ); + L_swb_norm_norm = (int16_t) ( 8 + 0.5f * n_band ); + L_swb_norm_harm = max( (int16_t) ( 32 + 2.0f * n_band ), 24 ); + + if ( mode == HARMONIC ) + { + L_swb_norm_cur = L_swb_norm_harm; + } + else if ( mode == NORMAL ) + { + L_swb_norm_cur = L_swb_norm_norm; + } + else + { + L_swb_norm_cur = L_swb_norm_trans; + } + + *L_swb_norm = (int16_t) ( 0.5f * L_swb_norm_cur + 0.5f * ( *prev_L_swb_norm ) ); + *prev_L_swb_norm = L_swb_norm_cur; + } + else + { + if ( mode == HQ_HARMONIC || mode == HQ_HVQ ) + { + L_swb_norm_cur = (int16_t) ( 32 + 2.5f * n_band ); + } + else + { + L_swb_norm_cur = (int16_t) ( 8 + 0.5f * n_band ); + } + + *L_swb_norm = (int16_t) ( 0.1f * L_swb_norm_cur + 0.9f * ( *prev_L_swb_norm ) + 0.5f ); + *prev_L_swb_norm = L_swb_norm_cur; + } + + return; +} +/*-------------------------------------------------------------------* + * calc_tilt_bwe() + * + * calculate tilt parameter + *-------------------------------------------------------------------*/ + +void calc_tilt_bwe( + const float *sp, /* i : input signal */ + float *tilt, /* o : signal tilt */ + const int16_t N /* i : signal length */ +) +{ + int16_t i; + float r0, r1; + + r0 = EPSILON; + for ( i = 0; i < N; i++ ) + { + r0 += sp[i] * sp[i]; + } + + r1 = (float) fabs( sp[1] - sp[0] ); + for ( i = 2; i < N; i++ ) + { + if ( ( sp[i] - sp[i - 1] ) * ( sp[i - 1] - sp[i - 2] ) < 0 ) + { + r1 += (float) fabs( sp[i] - sp[i - 1] ); + } + } + + *tilt = (float) ( r1 / sqrt( r0 ) ); + + return; +} + +/*-------------------------------------------------------------------* + * calc_norm_envelop() + * + * calculate normalized parameter + *-------------------------------------------------------------------*/ + +void calc_norm_envelop( + const float SWB_signal[], /* i : SWB spectrum */ + float *envelope, /* o : normalized envelope */ + const int16_t L_swb_norm, /* i : length of envelope */ + const int16_t SWB_flength, /* i : Length of input/output */ + const int16_t st_offset /* i : offset */ +) +{ + int16_t i, lookback, env_index, n_freq, n_lag_now, n_lag; + + lookback = L_swb_norm / 2; + env_index = swb_bwe_subband[0] + st_offset; + n_lag_now = L_swb_norm; + for ( n_freq = swb_bwe_trans_subband[0] + st_offset - lookback; n_freq < SWB_flength + st_offset - L_swb_norm; n_freq++ ) + { + /* Apply MA filter */ + envelope[env_index] = EPSILON; + for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) + { + envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); + } + env_index++; + } + + for ( n_freq = SWB_flength + st_offset - L_swb_norm, i = 0; n_freq < SWB_flength + st_offset - lookback; n_freq++, i++ ) + { + n_lag_now = L_swb_norm - i; + /* Apply MA filter */ + envelope[env_index] = EPSILON; + for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) + { + envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); + } + env_index++; + } + + return; +} + + +/*-------------------------------------------------------------------* + * calc_norm_envelop_lf() + * + * calc_envelope of low frequency spectrum + *-------------------------------------------------------------------*/ +static void calc_norm_envelop_lf( + const float SWB_signal[], /* i : SWB spectrum */ + float *envelope, /* o : normalized envelope */ + int16_t *L_swb_norm, /* i/o: length of envelope */ + const int16_t HQ_mode, /* i : HQ mode */ + const int16_t hq_generic_offset, /* i : frequency offset for representing hq swb bwe */ + int16_t *sfreq, /* i : starting frequency index */ + int16_t *efreq ) /* i : ending frequency index */ +{ + int16_t lookback, env_index, n_freq, n_lag_now, n_lag; + + *sfreq = 2; + if ( hq_generic_offset == HQ_GENERIC_FOFFSET_24K4 ) + { + *efreq = 146; + if ( HQ_mode == HQ_GEN_FB ) + { + *efreq = 306; + } + if ( ( 328 - *efreq ) * 2 + 1 < *L_swb_norm ) + { + *L_swb_norm = ( 328 - *efreq ) * 2 + 1; + } + } + else + { + *efreq = 130; + if ( HQ_mode == HQ_GEN_FB ) + { + *efreq = 290; + } + if ( ( 400 - *efreq ) * 2 + 1 < *L_swb_norm ) + { + *L_swb_norm = ( 400 - *efreq ) * 2 + 1; + } + } + + lookback = *L_swb_norm / 2; + env_index = 0; + n_lag_now = *L_swb_norm; + for ( n_freq = 0; n_freq < lookback; n_freq++ ) + { + envelope[env_index] = EPSILON; + for ( n_lag = 0; n_lag < lookback + n_freq; n_lag++ ) + { + envelope[env_index] += (float) fabs( SWB_signal[n_lag] ); + } + env_index++; + } + for ( ; n_freq < *efreq; n_freq++ ) + { + /* Apply MA filter */ + envelope[env_index] = EPSILON; + for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) + { + envelope[env_index] += (float) fabs( SWB_signal[n_freq - lookback + n_lag] ); + } + env_index++; + } + return; +} + +/*-------------------------------------------------------------------* + * WB_BWE_decoding() + * + * WB BWE decoder + *-------------------------------------------------------------------*/ + +void WB_BWE_decoding( + const float *core_dec_freq, /* i : Frequency domain core decoded signal */ + float *WB_fenv, /* i : WB frequency envelopes */ + float *WB_signal, /* o : WB signal in MDCT domain */ + const int16_t WB_flength, /* i : Length of input/output */ + const int16_t mode, /* i : classification for WB signal */ + const int16_t last_extl, /* i : extl. layer for last frame */ + float *prev_Energy, /* i/o: energy for last frame */ + float *prev_WB_fenv, /* i/o: envelope for last frame */ + int16_t *prev_L_wb_norm, /* i/o: length for last frame wb norm */ + const int16_t extl, /* i : extension layer */ + const int16_t coder_type, /* i : coding type */ + const int32_t total_brate, /* i : core layer bitrate */ + int16_t *Seed, /* i/o: random generator seed */ + int16_t *prev_flag, /* i/o: attenu flag of last frame */ + int16_t prev_coder_type /* i : coding type of last frame */ +) +{ + int16_t n_freq, n_band; + int16_t i, L; + float envelope[L_FRAME16k]; + float energy, wfenv[2], EnergyL; + float *pit1; + int16_t L_wb_norm; + float alfa, beta; + int16_t flag = 0; + int16_t core_type = 1; + int16_t signum[L_FRAME16k]; + float inv_L_wb_norm, weight; + + calc_normal_length( ACELP_CORE, core_dec_freq, mode, extl, &L_wb_norm, prev_L_wb_norm ); + + set_f( WB_signal, 0, L_FRAME16k ); + + /* copy excitation */ + if ( coder_type != AUDIO && total_brate <= ACELP_8k00 ) + { + core_type = 0; + } + + if ( core_type == 0 ) + { + mvr2r( &core_dec_freq[160], &WB_signal[240], 80 ); + } + else + { + mvr2r( &core_dec_freq[80], &WB_signal[240], 80 ); + } + + /* calculate envelope */ + calc_norm_envelop( WB_signal, envelope, L_wb_norm, WB_flength, 0 ); + + if ( coder_type != UNVOICED && total_brate <= ACELP_8k00 ) + { + inv_L_wb_norm = 1.0f / L_wb_norm; + weight = ( mode != HARMONIC ) ? max( min( 3.0f * inv_L_wb_norm, 0.5f ), 0.25f ) : 0.25f; + for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) + { + signum[n_freq] = 1; + if ( WB_signal[n_freq] < 0 ) + { + signum[n_freq] = -1; + WB_signal[n_freq] *= signum[n_freq]; + } + + WB_signal[n_freq] = WB_signal[n_freq] - 0.45f * envelope[n_freq] * inv_L_wb_norm; + if ( WB_signal[n_freq] > 0 ) + { + WB_signal[n_freq] *= ( 0.55f - weight ); + } + WB_signal[n_freq] *= signum[n_freq]; + } + } + + /* Normalize with envelope */ + for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) + { + WB_signal[n_freq] /= envelope[n_freq]; + } + + if ( mode == HARMONIC ) + { + L = 4; + } + else + { + L = 1; + } + + if ( coder_type == UNVOICED ) + { + for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) + { + *Seed = (int16_t) ( 12345 * ( *Seed ) + 20101 ); + WB_signal[n_freq] = ( *Seed ) / PCM16_TO_FLT_FAC; + } + } + else + { + for ( n_band = 0; n_band < 4; n_band += L ) + { + energy = EPSILON; + for ( n_freq = swb_bwe_subband[n_band]; n_freq < swb_bwe_subband[n_band + L]; n_freq++ ) + { + energy += WB_signal[n_freq] * WB_signal[n_freq]; + } + + energy = (float) sqrt( ( swb_bwe_subband[n_band + L] - swb_bwe_subband[n_band] ) / energy ); + + for ( n_freq = swb_bwe_subband[n_band]; n_freq < swb_bwe_subband[n_band + L]; n_freq++ ) + { + WB_signal[n_freq] *= energy; + } + } + } + + + EnergyL = 0.0f; + if ( core_type == 1 ) + { + if ( prev_coder_type != AUDIO && total_brate <= ACELP_8k00 ) + { + for ( i = 160; i < 240; i++ ) + { + EnergyL += (float) fabs( core_dec_freq[i] ); + } + } + else + { + for ( i = 80; i < 240; i++ ) + { + EnergyL += (float) fabs( core_dec_freq[i] ); + } + } + + if ( total_brate <= ACELP_8k00 ) + { + alfa = 0.8f; + beta = 1.25f; + } + else + { + alfa = 0.5f; + beta = 2.0f; + } + } + else + { + if ( prev_coder_type == AUDIO ) + { + for ( i = 80; i < 240; i++ ) + { + EnergyL += (float) fabs( core_dec_freq[i] ); + } + } + else + { + for ( i = 160; i < 240; i++ ) + { + EnergyL += (float) fabs( core_dec_freq[i] ); + } + } + + if ( prev_coder_type == coder_type && WB_fenv[0] > prev_WB_fenv[0] ) + { + alfa = 0.4f; + beta = 2.5f; + } + else + { + alfa = 0.6f; + beta = 1.67f; + } + + if ( coder_type == GENERIC || ( EnergyL > 0.5f * ( *prev_Energy ) && EnergyL < 2.0f * ( *prev_Energy ) && *prev_flag == 1 ) ) + { + WB_fenv[0] *= 0.5f; + WB_fenv[1] *= 0.5f; + flag = 1; + } + } + if ( ( mode == HARMONIC && WB_fenv[1] < 0.25f * WB_fenv[0] ) || mode == NORMAL ) + { + if ( last_extl == WB_BWE && ( ( prev_coder_type == AUDIO && coder_type != AUDIO ) || ( prev_coder_type != AUDIO && coder_type == AUDIO ) ) && total_brate <= ACELP_8k00 ) + { + if ( WB_fenv[0] > prev_WB_fenv[0] ) + { + wfenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv[0]; + wfenv[1] = 0.3f * WB_fenv[1] + 0.7f * prev_WB_fenv[1]; + } + else + { + wfenv[0] = 0.5f * WB_fenv[0] + 0.5f * prev_WB_fenv[0]; + wfenv[1] = 0.4f * WB_fenv[1] + 0.4f * prev_WB_fenv[1]; + } + } + else if ( last_extl == WB_BWE && prev_WB_fenv[0] * EnergyL < WB_fenv[0] * ( *prev_Energy ) && WB_fenv[0] > prev_WB_fenv[0] && coder_type != AUDIO && coder_type != UNVOICED && total_brate <= ACELP_8k00 ) + { + wfenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv[0]; + wfenv[1] = 0.3f * WB_fenv[1] + 0.7f * prev_WB_fenv[1]; + } + else if ( last_extl == WB_BWE && EnergyL > alfa * ( *prev_Energy ) && EnergyL < beta * ( *prev_Energy ) && prev_coder_type != UNVOICED ) + { + wfenv[0] = 0.5f * ( WB_fenv[0] + prev_WB_fenv[0] ); + wfenv[1] = 0.5f * ( WB_fenv[1] + prev_WB_fenv[1] ); + } + else + { + wfenv[0] = WB_fenv[0]; + wfenv[1] = WB_fenv[1]; + } + for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[2]; n_freq++ ) + { + WB_signal[n_freq] *= wfenv[0]; + } + + for ( n_freq = swb_bwe_subband[2]; n_freq < swb_bwe_subband[4]; n_freq++ ) + { + WB_signal[n_freq] *= wfenv[1]; + } + + prev_WB_fenv[0] = wfenv[0]; + prev_WB_fenv[1] = wfenv[1]; + } + else + { + wfenv[0] = 0.5f * ( WB_fenv[0] + WB_fenv[1] ); + + if ( last_extl == WB_BWE && EnergyL > 0.5f * ( *prev_Energy ) && EnergyL < 2.0f * ( *prev_Energy ) ) + { + wfenv[0] = 0.25f * wfenv[0] + 0.375f * ( prev_WB_fenv[0] + prev_WB_fenv[1] ); + } + for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) + { + WB_signal[n_freq] *= wfenv[0]; + } + + prev_WB_fenv[0] = wfenv[0]; + prev_WB_fenv[1] = wfenv[0]; + } + + *prev_flag = flag; + *prev_Energy = EnergyL; + pit1 = &WB_signal[240]; + + for ( n_freq = 0; n_freq < 16; n_freq++ ) + { + *( pit1++ ) *= ( 0.2f + n_freq * 0.05f ); + } + + if ( core_type == 1 ) + { + pit1 = &WB_signal[280]; + for ( n_freq = 0; n_freq < 40; n_freq++ ) + { + *( pit1++ ) *= ( 1.0f - n_freq * 0.02f ); + } + } + else + { + pit1 = &WB_signal[300]; + for ( n_freq = 0; n_freq < 20; n_freq++ ) + { + *( pit1++ ) *= ( 1.0f - n_freq * 0.04f ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * SWB_BWE_decoding() + * + * SWB BWE decoder + *-------------------------------------------------------------------*/ + +void SWB_BWE_decoding( + const float *core_dec_freq, /* i : Frequency domain core decoded signal */ + float *SWB_fenv, /* i/o: SWB frequency envelopes */ + float *SWB_signal, /* o : SWB signal in MDCT domain */ + const int16_t SWB_flength, /* i : Length of input/output */ + const int16_t mode, /* i : classification for SWB signal */ + int16_t *frica_flag, /* o : fricative signal flag */ + float *prev_Energy, /* i/o: energy for last frame */ + float *prev_SWB_fenv, /* i/o: envelope for last frame */ + int16_t *prev_L_swb_norm, /* i/o: length for last frame wb norm */ + const float tilt_nb, /* i : tilt of synthesis wb signal */ + int16_t *Seed, /* i/o: random generator seed */ + const int16_t st_offset, /* i : offset value due to different core */ + float *prev_weight, /* i/o: excitation weight value of last frame */ + const int16_t extl, /* i : extension layer */ + const int16_t last_extl /* i : extension layer of last frame */ +) +{ + int16_t n_freq, n_band, L, L_swb_norm; + float *pit1; + float envelope[L_FRAME32k]; + float fenvL, EnergyL, Energy, energy, weight, wfenv, factor; + float mean, factor1, tmp1, tmp2, tmp3, tmp4, tmp_ener; + int16_t signum[L_FRAME32k]; + float inv_L_swb_norm; + + fenvL = EPSILON; + EnergyL = EPSILON; + for ( n_freq = 224 + st_offset; n_freq < swb_bwe_trans_subband[0] + st_offset; n_freq++ ) + { + fenvL += core_dec_freq[n_freq] * core_dec_freq[n_freq]; + } + + for ( n_freq = 16; n_freq < L_FRAME; n_freq++ ) + { + EnergyL += core_dec_freq[n_freq] * core_dec_freq[n_freq]; + } + fenvL = (float) sqrt( fenvL / 16 ); + EnergyL = (float) sqrt( EnergyL / 240 ); + if ( fenvL > 8.0f * SWB_fenv[0] ) + { + fenvL = SWB_fenv[0]; + } + calc_normal_length( ACELP_CORE, core_dec_freq, mode, extl, &L_swb_norm, prev_L_swb_norm ); + + if ( mode == TRANSIENT ) + { + Energy = 0.0f; + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + Energy += SWB_fenv[n_band] * SWB_fenv[n_band]; + } + Energy /= SWB_FENV_TRANS; + + /* Reconstruct excitation from LF signal */ + mvr2r( &core_dec_freq[112], &SWB_signal[240 + st_offset], 128 ); + mvr2r( &core_dec_freq[112], &SWB_signal[368 + st_offset], 128 ); + mvr2r( &core_dec_freq[176], &SWB_signal[496 + st_offset], 64 ); + + /* calculate envelope */ + calc_norm_envelop( SWB_signal, envelope, L_swb_norm, SWB_flength, st_offset ); + + /* Normalize with envelope */ + for ( n_freq = swb_bwe_trans_subband[0] + st_offset; n_freq < swb_bwe_trans_subband[SWB_FENV_TRANS] + st_offset; n_freq++ ) + { + SWB_signal[n_freq] /= envelope[n_freq]; + } + + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + energy = EPSILON; + for ( n_freq = swb_bwe_trans_subband[n_band] + st_offset; n_freq < swb_bwe_trans_subband[n_band + 1] + st_offset; n_freq++ ) + { + energy += SWB_signal[n_freq] * SWB_signal[n_freq]; + } + + tmp_ener = (float) ( sqrt( swb_bwe_trans_subband_width[n_band] / energy ) * SWB_fenv[n_band] ); + + for ( n_freq = swb_bwe_trans_subband[n_band] + st_offset; n_freq < swb_bwe_trans_subband[n_band + 1] + st_offset; n_freq++ ) + { + SWB_signal[n_freq] *= tmp_ener; + } + } + + for ( n_band = 0; n_band < 8; n_band++ ) + { + prev_SWB_fenv[n_band] = SWB_fenv[n_band / 4] * SWB_fenv[n_band / 4]; + } + + for ( n_band = 0; n_band < 6; n_band++ ) + { + prev_SWB_fenv[8 + n_band] = SWB_fenv[2 + n_band / 3] * SWB_fenv[2 + n_band / 3]; + } + + *prev_weight = 0.5f; + } + else + { + Energy = EPSILON; + for ( n_band = 0; n_band < SWB_FENV; n_band++ ) + { + Energy += SWB_fenv[n_band]; + } + Energy /= SWB_FENV; + if ( last_extl != SWB_BWE && last_extl != FB_BWE ) + { + if ( 16.0f * Energy < EnergyL && extl == FB_BWE ) + { + for ( n_band = 0; n_band < SWB_FENV; n_band++ ) + { + SWB_fenv[n_band] *= 0.2f; + } + fenvL *= 0.2f; + } + mvr2r( SWB_fenv, prev_SWB_fenv, SWB_FENV ); + } + if ( mode == HARMONIC ) + { + mvr2r( core_dec_freq, &SWB_signal[240 + st_offset], 240 ); + mvr2r( &core_dec_freq[128], &SWB_signal[480 + st_offset], 80 ); + + /* calculate envelope */ + calc_norm_envelop( SWB_signal, envelope, L_swb_norm, SWB_flength, st_offset ); + } + else + { + if ( mode == NOISE || ( ( Energy > EnergyL || ( tilt_nb > 7 && Energy > 0.5f * EnergyL ) || tilt_nb > 12 ) && Energy > 75 && fenvL > 25 ) ) + { + for ( n_freq = swb_bwe_subband[0] + st_offset; n_freq < swb_bwe_subband[SWB_FENV] + st_offset; n_freq++ ) + { + *Seed = (int16_t) ( 12345 * ( *Seed ) + 20101 ); + SWB_signal[n_freq] = ( *Seed ) / PCM16_TO_FLT_FAC; + } + if ( mode != NOISE ) + { + *frica_flag = 1; + } + } + else + { + /* modify SHB frequency envelopes when SHB spectrum is unflat */ + for ( n_band = 0; n_band < 13; n_band++ ) + { + if ( SWB_fenv[n_band] * 0.9f > SWB_fenv[n_band + 1] ) + { + SWB_fenv[n_band + 1] *= ( 0.8f + 0.015f * n_band ); + } + else if ( SWB_fenv[n_band + 1] * 0.9f > SWB_fenv[n_band] ) + { + SWB_fenv[n_band] *= ( 0.8f + 0.015f * n_band ); + } + } + + mvr2r( &core_dec_freq[112], &SWB_signal[240 + st_offset], 128 ); + mvr2r( &core_dec_freq[112], &SWB_signal[368 + st_offset], 128 ); + mvr2r( &core_dec_freq[176], &SWB_signal[496 + st_offset], 64 ); + + tmp1 = (float) ( fabs( SWB_signal[368 + st_offset] ) + fabs( SWB_signal[369 + st_offset] ) ) + EPSILON; + tmp2 = (float) ( fabs( SWB_signal[365 + st_offset] ) + fabs( SWB_signal[366 + st_offset] ) ) + EPSILON; + pit1 = &SWB_signal[368 + st_offset]; + + tmp3 = tmp2 / tmp1; + if ( tmp3 < 0.3 ) + { + tmp3 = 0.3f; + } + + while ( tmp3 < 1 ) + { + *pit1++ *= tmp3; + tmp3 += 0.1f; + } + + pit1 = &SWB_signal[367 + st_offset]; + tmp3 = tmp1 / tmp2; + + if ( tmp3 > 5 ) + { + tmp3 = 5; + while ( tmp3 > 1 ) + { + *pit1-- *= tmp3; + tmp3 -= 0.5f; + } + } + + tmp1 = (float) ( fabs( SWB_signal[496 + st_offset] ) + fabs( SWB_signal[497 + st_offset] ) ) + EPSILON; + tmp2 = (float) ( fabs( SWB_signal[492 + st_offset] ) + fabs( SWB_signal[493 + st_offset] ) + fabs( SWB_signal[494 + st_offset] ) + fabs( SWB_signal[495 + st_offset] ) ) + EPSILON; + pit1 = &SWB_signal[496 + st_offset]; + + tmp3 = tmp2 / tmp1; + if ( tmp3 < 0.3 ) + { + tmp3 = 0.3f; + } + + while ( tmp3 < 1 ) + { + *pit1++ *= tmp3; + tmp3 += 0.1f; + } + + pit1 = &SWB_signal[495 + st_offset]; + + tmp3 = tmp1 / tmp2; + tmp3 = 0.5f * tmp3; + tmp4 = 0.05f * tmp3; + + while ( tmp3 > 1 ) + { + *pit1-- *= tmp3; + tmp3 -= tmp4; + } + + /* calculate envelope */ + calc_norm_envelop( SWB_signal, envelope, L_swb_norm, SWB_flength, st_offset ); + } + } + + /* Normalize with envelope */ + if ( *frica_flag == 0 && mode != NOISE ) + { + L = swb_bwe_subband[0] + st_offset; + inv_L_swb_norm = 1.0f / L_swb_norm; + weight = ( mode != HARMONIC ) ? max( min( 3.0f * inv_L_swb_norm, 0.5f ), 0.2f ) : 0.2f; + weight = 0.4f * weight + 0.6f * ( *prev_weight ); + for ( n_freq = L; n_freq < swb_bwe_subband[SWB_FENV] + st_offset; n_freq++ ) + { + signum[n_freq] = 1; + if ( SWB_signal[n_freq] < 0 ) + { + signum[n_freq] = -1; + SWB_signal[n_freq] *= signum[n_freq]; + } + + SWB_signal[n_freq] = SWB_signal[n_freq] - envelope[n_freq] * inv_L_swb_norm; + if ( SWB_signal[n_freq] > 0 ) + { + SWB_signal[n_freq] *= ( 1.2f - weight ); + } + SWB_signal[n_freq] *= signum[n_freq]; + } + + for ( n_freq = L; n_freq < swb_bwe_subband[SWB_FENV] + st_offset; n_freq++ ) + { + SWB_signal[n_freq] /= envelope[n_freq]; + } + + *prev_weight = weight; + } + else + { + *prev_weight = max( min( 3.0f / L_swb_norm, 0.5f ), 0.2f ); + } + + if ( mode == HARMONIC ) + { + pit1 = &SWB_signal[swb_bwe_subband[0] + st_offset]; + for ( n_band = 0; n_band < 19; n_band++ ) + { + mean = 0; + for ( n_freq = 0; n_freq < 16; n_freq++ ) + { + mean += (float) fabs( *pit1 ); + pit1++; + } + mean /= 16; + pit1 -= 16; + for ( n_freq = 0; n_freq < 16; n_freq++ ) + { + if ( fabs( *pit1 ) < mean ) + { + *pit1 *= 0.2f; + } + pit1++; + } + } + } + + if ( mode == HARMONIC ) + { + L = 2; + } + else + { + L = 1; + } + + for ( n_band = 0; n_band < SWB_FENV; n_band += L ) + { + energy = EPSILON; + for ( n_freq = swb_bwe_subband[n_band] + st_offset; n_freq < swb_bwe_subband[n_band + L] + st_offset; n_freq++ ) + { + energy += SWB_signal[n_freq] * SWB_signal[n_freq]; + } + + tmp_ener = (float) sqrt( ( swb_bwe_subband[n_band + L] - swb_bwe_subband[n_band] ) / energy ); + + for ( n_freq = swb_bwe_subband[n_band] + st_offset; n_freq < swb_bwe_subband[n_band + L] + st_offset; n_freq++ ) + { + SWB_signal[n_freq] *= tmp_ener; + } + } + + if ( *prev_Energy > 1.25f * Energy && Energy > 0 ) + { + weight = 0.5f * Energy / ( *prev_Energy ); + } + else + { + weight = 0.5f; + } + + wfenv = weight * prev_SWB_fenv[0] + ( 1 - weight ) * SWB_fenv[0]; + factor = fenvL; + factor1 = ( wfenv - fenvL ) * 0.125f; + for ( n_freq = swb_bwe_subband[0] + st_offset; n_freq < swb_bwe_subband[0] + 8 + st_offset; n_freq++ ) + { + SWB_signal[n_freq] *= factor; + factor += factor1; + } + + for ( n_band = 0; n_band < 12; n_band++ ) + { + wfenv = weight * prev_SWB_fenv[n_band + 1] + ( 1 - weight ) * SWB_fenv[n_band + 1]; + factor = SWB_fenv[n_band]; + factor1 = ( wfenv - SWB_fenv[n_band] ) * smooth_factor[n_band]; + for ( ; n_freq < swb_bwe_sm_subband[n_band + 1] + st_offset; n_freq++ ) + { + SWB_signal[n_freq] *= factor; + factor += factor1; + } + } + + wfenv = weight * prev_SWB_fenv[13] + ( 1 - weight ) * SWB_fenv[13]; + factor = SWB_fenv[12]; + factor1 = ( wfenv - SWB_fenv[12] ) * smooth_factor[12]; + for ( ; n_freq < swb_bwe_sm_subband[13] + st_offset; n_freq++ ) + { + SWB_signal[n_freq] *= factor; + factor += factor1; + } + + for ( n_band = 13; n_band < SWB_FENV; n_band++ ) + { + wfenv = weight * prev_SWB_fenv[n_band] + ( 1 - weight ) * SWB_fenv[n_band]; + for ( ; n_freq < swb_bwe_subband[n_band + 1] + st_offset; n_freq++ ) + { + SWB_signal[n_freq] *= wfenv; + } + } + + for ( n_band = 0; n_band < SWB_FENV; n_band++ ) + { + prev_SWB_fenv[n_band] = SWB_fenv[n_band]; + } + } + + pit1 = &SWB_signal[240 + st_offset]; + for ( n_freq = 0; n_freq < 4; n_freq++ ) + { + *( pit1++ ) *= 0.5f; + } + *prev_Energy = Energy; + + return; +} + +/*-------------------------------------------------------------------* + * time_envelop_shaping() + * + * time shaping of the SHB signal + *-------------------------------------------------------------------*/ + +void time_envelop_shaping( + float werr[], /* i/o: SHB synthesis */ + float SWB_tenv[], /* i/o: frequency envelope */ + const int16_t L /* i : frame length */ +) +{ + float *pit; + float Energy; + int16_t i, j; + float tmp_ener; + + pit = werr; + for ( i = 0; i < SWB_TENV; i++ ) + { + Energy = EPSILON; + for ( j = 0; j < L / 4; j++ ) + { + Energy += *pit * *pit; + pit++; + } + Energy = (float) sqrt( 4 * Energy / L ); + + if ( SWB_tenv[i] < 2 && Energy < SWB_tenv[i] ) + { + SWB_tenv[i] = Energy; + } + + pit -= L / 4; + tmp_ener = 1.0f / Energy; + for ( j = 0; j < L / 4; j++ ) + { + *pit *= SWB_tenv[i] * tmp_ener; + pit++; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * time_reduce_pre_echo() + * + * Pre-echo reduction. + *-------------------------------------------------------------------*/ + +void time_reduce_pre_echo( + const float *synth, /* i : ACELP core synthesis */ + float *error, /* o : SHB BWE synthesis */ + float prev_td_energy, /* o : last td energy */ + const int16_t L /* i : subframe length */ +) +{ + int16_t i, j, pos = 0; + float energy; + float energyL[4]; + float tmp_ener; + float *pit; + float tmpi; + + for ( i = 0; i < 4; i++ ) + { + energyL[i] = 0; + for ( j = 0; j < L; j++ ) + { + energyL[i] += synth[L * i + j] * synth[L * i + j]; + } + energyL[i] = (float) sqrt( energyL[i] / L ); + } + + for ( i = 0; i < 3; i++ ) + { + if ( energyL[i + 1] > 1.8f * energyL[i] && energyL[i + 1] > 50 ) + { + pos = i + 1; + break; + } + } + + if ( pos > 0 ) + { + if ( pos < 3 ) + { + pos++; + } + + energy = EPSILON; + j = L * pos; + for ( i = 0; i < j; i++ ) + { + energy += error[i] * error[i]; + } + energy = (float) sqrt( energy / j ); + + if ( prev_td_energy < 0.2f * energy ) + { + prev_td_energy = 0.2f * energy; + } + + tmp_ener = prev_td_energy / energy; + for ( i = 0; i < j; i++ ) + { + error[i] *= tmp_ener; + } + + energy = EPSILON; + for ( i = j; i < ( j + L ); i++ ) + { + energy += error[i] * error[i]; + } + energy = (float) sqrt( energy / L ); + + pit = &error[j]; + tmp_ener = prev_td_energy / energy; + for ( i = 0; i < L; i++ ) + { + tmpi = i / ( 1.0f * L ); + *pit++ *= ( ( 1.0f - tmpi ) * tmp_ener + tmpi ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * hq_generic_hf_decoding() + * + *-------------------------------------------------------------------*/ +void hq_generic_hf_decoding( + const int16_t HQ_mode, /* i : HQ mode */ + float *coeff_out1, /* i/o: BWE input & temporary buffer */ + const float *hq_generic_fenv, /* i : SWB frequency envelopes */ + float *coeff_out, /* o : SWB signal in MDCT domain */ + const int16_t hq_generic_offset, /* i : frequency offset for representing hq swb bwe*/ + int16_t *prev_L_swb_norm, /* i/o: last normalize length */ + const int16_t hq_generic_exc_clas, /* i : bwe excitation class */ + const int16_t *R ) +{ + int16_t i, n_freq, n_band, L_swb_norm; + float fenvL, energy, wfenv, factor; + float envelope[L_FRAME16k]; + float *pit1; + float tmp1, tmp2, tmp3, tmp4; + float mean_vector[20]; + int16_t k; + int16_t nenv; + int16_t tenv; + float rn_weight0; + int16_t blen, nband_lf, sfidx, efidx; + int16_t bwe_seed; + int16_t signum[L_FRAME16k]; + + if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) + { + nenv = SWB_FENV; + } + else + { + nenv = SWB_FENV - 2; + } + + if ( HQ_mode == HQ_GEN_FB ) + { + tenv = nenv + DIM_FB; + } + else + { + tenv = nenv; + } + + fenvL = EPSILON; + for ( n_freq = HQ_GENERIC_ST_FREQ + hq_generic_offset; n_freq < swb_bwe_subband[0] + hq_generic_offset; n_freq++ ) + { + fenvL += coeff_out1[n_freq] * coeff_out1[n_freq]; + } + + fenvL = (float) sqrt( fenvL / 16 ); + + calc_normal_length( HQ_CORE, coeff_out1, HQ_GEN_SWB, -1, &L_swb_norm, prev_L_swb_norm ); + + /* calculate envelope */ + calc_norm_envelop_lf( coeff_out1, envelope, &L_swb_norm, HQ_mode, hq_generic_offset, &sfidx, &efidx ); + + blen = 16; + if ( hq_generic_exc_clas == HQ_GENERIC_EXC0 ) + { + rn_weight0 = 0.8f; + } + else if ( hq_generic_exc_clas == HQ_GENERIC_EXC1 ) + { + rn_weight0 = 0.05f; + } + else + { + rn_weight0 = 0.2f; + } + + nband_lf = ( efidx - sfidx ) / blen; + for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) + { + if ( coeff_out1[n_freq] < 0 ) + { + signum[n_freq] = -1; + coeff_out1[n_freq] *= signum[n_freq]; + } + else + { + signum[n_freq] = 1; + } + } + + /* applying whitening */ + for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) + { + coeff_out1[n_freq] = coeff_out1[n_freq] / envelope[n_freq]; + } + + /* mean vector generation for controlling dynamic range */ + for ( k = 0; k < nband_lf; ++k ) + { + energy = EPSILON; + for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) + { + energy += coeff_out1[i]; + } + mean_vector[k] = energy / blen; + } + + /* dynamic range control */ + for ( k = 0; k < nband_lf; ++k ) + { + for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) + { + coeff_out1[i] = coeff_out1[i] - ( coeff_out1[i] - mean_vector[k] ) * rn_weight0; + } + } + + if ( hq_generic_exc_clas == HQ_GENERIC_EXC0 ) + { + /* applying random sign */ + bwe_seed = R[0] * 8 + R[1] * 4 + R[2] * 2 + R[3]; + for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) + { + coeff_out1[n_freq] = coeff_out1[n_freq] * signum[n_freq] * ( own_random( &bwe_seed ) > 0 ? 1.0f : -1.0f ); + } + } + else + { + for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) + { + coeff_out1[n_freq] = coeff_out1[n_freq] * signum[n_freq]; + } + } + + /* normalizing modified low frequency spectrum */ + for ( k = 0; k < nband_lf; ++k ) + { + energy = EPSILON; + for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) + { + energy += coeff_out1[i] * coeff_out1[i]; + } + energy = (float) sqrt( energy / blen ); + + for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) + { + coeff_out1[i] /= energy; + } + } + mvr2r( coeff_out1 + HQ_GENERIC_OFFSET, &coeff_out[HQ_GENERIC_HIGH0 + hq_generic_offset], HQ_GENERIC_LEN0 ); + mvr2r( coeff_out1 + HQ_GENERIC_OFFSET, &coeff_out[HQ_GENERIC_HIGH1 + hq_generic_offset], HQ_GENERIC_LEN0 ); + + if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) + { + mvr2r( &coeff_out1[HQ_GENERIC_LOW0], &coeff_out[HQ_GENERIC_HIGH2 + hq_generic_offset], HQ_GENERIC_END_FREQ - HQ_GENERIC_HIGH2 ); + } + + if ( HQ_mode == HQ_GEN_FB ) + { + if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) + { + mvr2r( coeff_out1 + HQ_GENERIC_LOW0 + HQ_GENERIC_END_FREQ - HQ_GENERIC_HIGH2, &coeff_out[fb_bwe_subband[0]], 160 ); + } + else + { + mvr2r( coeff_out1 + HQ_GENERIC_OFFSET + HQ_GENERIC_LEN0, &coeff_out[fb_bwe_subband[0]], 160 ); + } + } + tmp1 = EPSILON; + tmp2 = EPSILON; + for ( i = 0; i < 5; ++i ) + { + tmp1 += (float) fabs( coeff_out[HQ_GENERIC_HIGH1 + hq_generic_offset + i] ); + tmp2 += (float) fabs( coeff_out[HQ_GENERIC_HIGH1 - 2 + hq_generic_offset - i] ); + } + + pit1 = &coeff_out[HQ_GENERIC_HIGH1 + hq_generic_offset]; + tmp3 = tmp2 / tmp1; + if ( tmp3 < 0.3f ) + { + tmp3 = 0.3f; + } + + while ( tmp3 < 1 ) + { + *pit1++ *= tmp3; + tmp3 += 0.1f; + } + + pit1 = &coeff_out[HQ_GENERIC_HIGH1 - 1 + hq_generic_offset]; + tmp3 = tmp1 / tmp2; + if ( tmp3 > 5 ) + { + tmp3 = 5; + while ( tmp3 > 1 ) + { + *pit1-- *= tmp3; + tmp3 -= 0.5f; + } + } + + if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) + { + tmp1 = (float) ( fabs( coeff_out[HQ_GENERIC_HIGH2 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 + 1 + hq_generic_offset] ) ) + EPSILON; + tmp2 = (float) ( fabs( coeff_out[HQ_GENERIC_HIGH2 - 4 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 - 3 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 - 2 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 - 1 + hq_generic_offset] ) ) + + EPSILON; + + pit1 = &coeff_out[HQ_GENERIC_HIGH2 + hq_generic_offset]; + tmp3 = tmp2 / tmp1; + if ( tmp3 < 0.3f ) + { + tmp3 = 0.3f; + } + + while ( tmp3 < 1 ) + { + *pit1++ *= tmp3; + tmp3 += 0.1f; + } + + pit1 = &coeff_out[HQ_GENERIC_HIGH2 - 1 + hq_generic_offset]; + tmp3 = tmp1 / tmp2; + tmp3 = 0.5f * tmp3; + tmp4 = 0.05f * tmp3; + while ( tmp3 > 1 ) + { + *pit1-- *= tmp3; + tmp3 -= tmp4; + } + } + + wfenv = hq_generic_fenv[0]; + for ( n_freq = swb_bwe_subband[0] + hq_generic_offset, i = 0; n_freq < swb_bwe_subband[0] + hq_generic_offset + 8; n_freq++, i++ ) + { + factor = i * 0.125f; + coeff_out[n_freq] *= ( ( 1 - factor ) * fenvL + factor * wfenv ); + } + + for ( n_band = 0; n_band < nenv - 2; n_band++ ) + { + wfenv = hq_generic_fenv[n_band + 1]; + for ( i = 0; n_freq < swb_bwe_sm_subband[n_band + 1] + hq_generic_offset; n_freq++, i++ ) + { + factor = i * smooth_factor[n_band]; + coeff_out[n_freq] *= ( ( 1 - factor ) * hq_generic_fenv[n_band] + factor * wfenv ); + } + } + + wfenv = hq_generic_fenv[nenv - 1]; + for ( i = 0; n_freq < swb_bwe_sm_subband[nenv - 1] + hq_generic_offset; n_freq++, i++ ) + { + factor = i * smooth_factor[nenv - 2]; + + coeff_out[n_freq] *= ( ( 1 - factor ) * hq_generic_fenv[nenv - 2] + factor * wfenv ); + } + + if ( HQ_mode == HQ_GEN_SWB ) + { + for ( n_band = nenv - 1; n_band < nenv; ++n_band ) + { + wfenv = hq_generic_fenv[n_band]; + for ( ; n_freq < swb_bwe_subband[n_band + 1] + hq_generic_offset; n_freq++ ) + { + coeff_out[n_freq] *= wfenv; + } + } + } + else + { + if ( hq_generic_fenv[nenv - 1] - hq_generic_fenv[nenv] > 15.f || hq_generic_fenv[nenv] < 5.f ) + { + wfenv = hq_generic_fenv[nenv - 1]; + for ( i = 0; n_freq < fb_bwe_subband[0]; n_freq++, i++ ) + { + coeff_out[n_freq] *= wfenv; + } + + for ( n_band = 0; n_band < DIM_FB; n_band++ ) + { + wfenv = hq_generic_fenv[n_band + nenv]; + for ( i = 0; n_freq < fb_bwe_subband[n_band + 1]; n_freq++, i++ ) + { + coeff_out[n_freq] *= wfenv; + } + } + } + else + { + for ( n_band = 0; n_band < DIM_FB; n_band++ ) + { + wfenv = hq_generic_fenv[n_band + nenv - 1]; + + for ( i = 0; n_freq < fb_bwe_sm_subband[n_band]; n_freq++, i++ ) + { + factor = i * fb_smooth_factor[n_band]; + coeff_out[n_freq] *= ( ( 1 - factor ) * hq_generic_fenv[n_band + nenv] + factor * wfenv ); + } + } + + wfenv = hq_generic_fenv[tenv - 1]; + + for ( ; n_freq < fb_bwe_subband[DIM_FB]; n_freq++ ) + { + coeff_out[n_freq] *= wfenv; + } + } + } + return; +} + + +/*-------------------------------------------------------------------* + * save_old_syn() + * + * Save and delay the ACELP core synthesis signal by + * DELAY_FD_BWE_ENC_xxkx to be used by SWB BWE + *-------------------------------------------------------------------*/ + +void save_old_syn( + const int16_t L_frame, /* i : frame length */ + const float syn[], /* i : ACELP synthesis */ + float old_syn[], /* o : old synthesis buffer */ + float old_syn_mem[], /* i/o: old synthesis buffer memory */ + const float preemph_fac, /* i : preemphasis factor */ + float *mem_deemph /* i/o: deemphasis filter memory */ +) +{ + int16_t tmps; + + if ( L_frame == L_FRAME ) + { + tmps = NS2SA( 12800, DELAY_FD_BWE_ENC_12k8_NS ); + } + else + { + tmps = NS2SA( 16000, DELAY_FD_BWE_ENC_16k_NS ); + } + + mvr2r( old_syn_mem, old_syn, tmps ); + mvr2r( syn, old_syn + tmps, L_frame - tmps ); + mvr2r( syn + L_frame - tmps, old_syn_mem, tmps ); + + deemph( old_syn, preemph_fac, L_frame, mem_deemph ); + + return; +} diff --git a/lib_com/swb_bwe_com_hr.c b/lib_com/swb_bwe_com_hr.c new file mode 100644 index 0000000000..ebad781a99 --- /dev/null +++ b/lib_com/swb_bwe_com_hr.c @@ -0,0 +1,323 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * swb_hr_nonzero_subband_noise_fill() + * + * SWB BWE HR noise filling of zero subbands + *-------------------------------------------------------------------*/ + +static void swb_hr_nonzero_subband_noise_fill( + const float tilt_wb, /* i : tilt of wideband signal */ + float *t_audio, /* i/o: mdct spectrum */ + int16_t *bwe_highrate_seed, /* i/o: seed of random noise */ + const int16_t N, /* i : length of subband */ + const int16_t Nsv /* i : number of subband */ +) +{ + int16_t i, j; + float *ptr; + float min_bwe, max_bwe, tmpF; + + if ( tilt_wb > 5.0f ) + { + for ( i = 0; i < Nsv; i++ ) + { + min_bwe = FLT_MAX; + max_bwe = FLT_MIN; + for ( j = 0; j < N; j++ ) + { + tmpF = (float) fabs( t_audio[i * N + j] ); + + if ( tmpF > 0 ) + { + min_bwe = min( tmpF, min_bwe ); + max_bwe = max( tmpF, max_bwe ); + } + } + + if ( max_bwe == min_bwe && min_bwe > 1.0f ) + { + min_bwe *= 0.5f; + } + + ptr = &t_audio[i * N]; + for ( j = 0; j < N; j++ ) + { + if ( *ptr == 0 ) + { + if ( own_random( bwe_highrate_seed ) > 0 ) + { + *ptr = 0.5f * min_bwe; + } + else + { + *ptr = -0.5f * min_bwe; + } + } + ptr++; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * swb_hr_noise_fill() + * + * SWB BWE HR noise filling + *-------------------------------------------------------------------*/ + +void swb_hr_noise_fill( + const int16_t is_transient, /* i : transient flag */ + const int16_t spect_start, /* i : spectrum start point */ + const int16_t spect_end, /* i : spectrum end point */ + const float tilt_wb, /* i : tilt of wideband signal */ + const float pitch, /* i : pitch value */ + const int16_t nq[], /* i : AVQ nq index */ + int16_t Nsv, /* i : number of subband */ + int16_t *bwe_highrate_seed, /* i/o: seed of random noise */ + float *t_audio /* i/o: mdct spectrum */ +) +{ + int16_t i, j, k; + float alpha, beta; + int16_t pos_start, pos_end, incr; + + if ( is_transient ) + { + for ( i = 0; i < Nsv; i++ ) + { + if ( nq[i] == 0 ) + { + for ( j = 0; j < WIDTH_BAND; j++ ) + { + t_audio[i * WIDTH_BAND + j] = own_random( bwe_highrate_seed ) / 65536.0f; + } + } + } + } + else + { + Nsv = ( spect_end - spect_start ) / WIDTH_BAND; + alpha = 0.25f; + if ( tilt_wb > 5.0f ) + { + beta = 0.25f; + } + else + { + if ( 100 > 0.25f * pitch ) + { + beta = 0.25f; + } + else + { + beta = 100 / pitch; + } + } + + i = 0; + if ( nq[i] == 0 ) + { + i = 1; + while ( i < Nsv && nq[i] == 0 ) + { + i++; + } + + pos_start = i; + + + while ( i < Nsv && nq[i] != 0 ) + { + i++; + } + + pos_end = i - 1; + + if ( pos_end - pos_start > pos_start ) + { + pos_end = 2 * pos_start - 1; + } + + incr = pos_end; + + for ( j = pos_start - 1; j >= 0; j-- ) + { + for ( k = 0; k < WIDTH_BAND; k++ ) + { + t_audio[j * WIDTH_BAND + k] = alpha * t_audio[incr * WIDTH_BAND + k] + beta * own_random( bwe_highrate_seed ) / PCM16_TO_FLT_FAC; + } + + incr = ( incr < pos_start ) ? pos_end : incr - 1; + } + } + + while ( i < Nsv ) + { + if ( nq[i] == 0 ) + { + pos_start = i; + pos_end = i; + + for ( j = pos_start; j < Nsv; j++ ) + { + if ( nq[j] != 0 ) + { + i = j; + pos_end = j; + break; + } + } + + if ( pos_start == pos_end ) + { + i = Nsv; + pos_end = Nsv; + } + + incr = ( pos_start - 1 ); + + for ( j = pos_end - 1; j >= pos_start; j-- ) + { + for ( k = 0; k < WIDTH_BAND; k++ ) + { + t_audio[j * WIDTH_BAND + k] = alpha * t_audio[incr * WIDTH_BAND + k] + beta * own_random( bwe_highrate_seed ) / PCM16_TO_FLT_FAC; + } + incr = ( incr == 0 ) ? ( pos_start - 1 ) : incr - 1; + } + } + else + { + i++; + } + } + } + + swb_hr_nonzero_subband_noise_fill( tilt_wb, t_audio, bwe_highrate_seed, WIDTH_BAND, Nsv ); + + return; +} + + +/*-------------------------------------------------------------------* + * td_postprocess() + * + * post processing in time domain for td/fd switching + *-------------------------------------------------------------------*/ + +/*! r: gain */ +float td_postprocess( + float hb_synth[], /* i/o: high-band synthesis */ + const int16_t input_frame, /* i : frame length */ + const int16_t last_extl /* i : last extension layer */ +) +{ + int16_t i; + int16_t pos, ind1, ind2; + float max_samp, gain, tmpF; + float alpha, beta, step; + + max_samp = (float) fabs( hb_synth[0] ); + pos = 0; + for ( i = 1; i < input_frame; i++ ) + { + if ( fabs( hb_synth[i] ) > max_samp ) + { + max_samp = (float) fabs( hb_synth[i] ); + pos = i; + } + } + + if ( pos < 160 ) + { + gain = sum2_f( hb_synth + input_frame - 80, 80 ) + EPSILON; + } + else + { + gain = sum2_f( hb_synth, 80 ) + EPSILON; + } + + gain = (float) sqrt( gain / 80 ); + + ind1 = max( 0, pos - 40 ); + ind2 = min( input_frame, pos + 40 ); + tmpF = sum2_f( hb_synth + ind1, ind2 - ind1 ) + EPSILON; + tmpF = (float) sqrt( tmpF / ( ind2 - ind1 ) ); + + gain = min( 1.0f, gain / tmpF ); + + if ( last_extl == SWB_BWE || last_extl == FB_BWE ) + { + for ( i = ind1; i < input_frame; i++ ) + { + hb_synth[i] *= gain; + } + } + else + { + for ( i = ind1; i < ind2; i++ ) + { + hb_synth[i] *= gain; + } + + if ( ind2 != input_frame ) + { + step = 0.0f; + alpha = ( gain > 0.5f ) ? 1.0f : 0.5f; + beta = ( alpha - gain ) / ( input_frame - ind2 ); + + for ( i = ind2; i < input_frame; i++ ) + { + hb_synth[i] *= ( gain + step ); + step += beta; + } + } + } + + return ( gain ); +} diff --git a/lib_com/swb_bwe_com_lr.c b/lib_com/swb_bwe_com_lr.c new file mode 100644 index 0000000000..963d881cb3 --- /dev/null +++ b/lib_com/swb_bwe_com_lr.c @@ -0,0 +1,2113 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * hf_parinitiz() + * + * + *-------------------------------------------------------------------*/ + +void hf_parinitiz( + const int32_t total_brate, + const int16_t hqswb_clas, + int16_t lowlength, + int16_t highlength, + int16_t wBands[], + const int16_t **subband_search_offset, + const int16_t **subband_offsets, + int16_t *nBands, + int16_t *nBands_search, + int16_t *swb_lowband, + int16_t *swb_highband ) +{ + *swb_lowband = lowlength; + *swb_highband = highlength; + + if ( hqswb_clas == HQ_HARMONIC ) + { + /* Mode dependent initializations (performed every frame in case mode-switching implemented) */ + *nBands = NB_SWB_SUBBANDS_HAR; + *nBands_search = NB_SWB_SUBBANDS_HAR_SEARCH_SB; + + if ( total_brate == HQ_13k20 ) + { + wBands[0] = SWB_SB_BW_LEN0_12KBPS_HAR; + wBands[1] = SWB_SB_BW_LEN1_12KBPS_HAR; + wBands[2] = SWB_SB_BW_LEN2_12KBPS_HAR; + wBands[3] = SWB_SB_BW_LEN3_12KBPS_HAR; + *subband_offsets = subband_offsets_sub5_13p2kbps_Har; + *subband_search_offset = subband_search_offsets_13p2kbps_Har; + } + else + { + wBands[0] = SWB_SB_BW_LEN0_16KBPS_HAR; + wBands[1] = SWB_SB_BW_LEN1_16KBPS_HAR; + wBands[2] = SWB_SB_BW_LEN2_16KBPS_HAR; + wBands[3] = SWB_SB_BW_LEN3_16KBPS_HAR; + *subband_offsets = subband_offsets_sub5_16p4kbps_Har; + *subband_search_offset = subband_search_offsets_16p4kbps_Har; + } + } + else + { + /* Mode-dependent initializations (performed every frame in case mode-switching implemented) */ + *nBands = NB_SWB_SUBBANDS; + *nBands_search = NB_SWB_SUBBANDS; + + if ( total_brate == HQ_13k20 ) + { + wBands[0] = SWB_SB_LEN0_12KBPS; + wBands[1] = SWB_SB_LEN1_12KBPS; + wBands[2] = SWB_SB_LEN2_12KBPS; + wBands[3] = SWB_SB_LEN3_12KBPS; + *subband_offsets = subband_offsets_12KBPS; + } + else + { + wBands[0] = SWB_SB_LEN0_16KBPS; + wBands[1] = SWB_SB_LEN1_16KBPS; + wBands[2] = SWB_SB_LEN2_16KBPS; + wBands[3] = SWB_SB_LEN3_16KBPS; + *subband_offsets = subband_offsets_16KBPS; + } + } + return; +} + +/*-------------------------------------------------------------------* + * GetPredictedSignal() + * + * Routine for calculating the predicted signal + *-------------------------------------------------------------------*/ +void GetPredictedSignal( + const float *predBuf, /* i : prediction buffer */ + float *outBuf, /* o : output buffer */ + const int16_t lag, /* i : prediction buffer offset */ + const int16_t fLen, /* i : length of loop (output) */ + const float gain /* i : gain to be applied */ +) +{ + int16_t i; + + predBuf += lag; + + for ( i = 0; i < fLen; i++ ) + { + *outBuf++ = *predBuf++ * gain; + } + + return; +} +/*-------------------------------------------------------------------* + * est_freq_har_decis() + * + * Harmonic frequency decision matrix + *-------------------------------------------------------------------*/ + +static void est_freq_har_decis( + int16_t *har_freq_est1, /* o : harmonic analysis 1*/ + int16_t *har_freq_est2, /* o : harmonic analysis 2*/ + int16_t sharp, /* i : pka-avg for group 1 */ + int16_t sharp1, /* i : pka-avg for group 2 */ + int16_t hfe_est_countk1, /* i : group pks count 1*/ + int16_t hfe_est_countk2, /* i : group pks count 2*/ + int16_t k, /* i : group count */ + int16_t k1, + int16_t k2, + int16_t *prev_frm_hfe2 /* i : harmonic estimation */ +) +{ + int16_t temp_hfe2 = 0; + + if ( k != 0 ) + { + *har_freq_est1 = (int16_t) sharp / k; + } + if ( k1 > 1 ) + { + *har_freq_est2 = (int16_t) sharp1 / k1; + } + else if ( ( k1 < 2 && ( k2 != 0 || k > 1 ) ) ) + { + *har_freq_est2 = *har_freq_est1; + } + else + { + if ( ( hfe_est_countk1 != 0 || hfe_est_countk2 != 0 ) && ( k1 == 0 && k2 == 0 ) ) + { + *har_freq_est2 = ( *har_freq_est1 ); + } + else + { + *har_freq_est2 = 2 * ( *har_freq_est1 ); + } + } + + /* Consider Estimation Error upto 200Hz */ + if ( *prev_frm_hfe2 != 0 && ( (int16_t) abs( *prev_frm_hfe2 - *har_freq_est2 ) < 10 || abs( *prev_frm_hfe2 - 2 * ( *har_freq_est2 ) ) < 10 ) ) + { + *har_freq_est2 = *prev_frm_hfe2; + } + else if ( *prev_frm_hfe2 != 0 && abs( *har_freq_est2 - 2 * ( *prev_frm_hfe2 ) ) < 10 ) + { + *har_freq_est2 = 2 * ( *prev_frm_hfe2 ); + } + else + { + temp_hfe2 = (int16_t) ( *prev_frm_hfe2 + *har_freq_est2 ) / 2; + + if ( abs( temp_hfe2 - *prev_frm_hfe2 ) < 2 ) + { + temp_hfe2 = *prev_frm_hfe2; + *har_freq_est2 = temp_hfe2; + } + } + if ( *har_freq_est2 < *har_freq_est1 && ( k > 1 && k1 < 2 ) ) + { + *har_freq_est2 = *har_freq_est1; + } + return; +} + +/*--------------------------------------------------------------------------* + * har_est() + * + * Harmonic Structure analysis using LF spectrum + *--------------------------------------------------------------------------*/ + +int16_t har_est( + float spectra[], /* i : coded spectrum */ + const int16_t N, /* i : length of the desired spectrum */ + int16_t *har_freq_est1, /* i/o: Estimation harmonics 1 */ + int16_t *har_freq_est2, /* o : Estimation harmonics 2 */ + int16_t *flag_dis, /* i/o: flag for BWE reconstruction */ + int16_t *prev_frm_hfe2, /* i/o: Estimated harmonic update */ + const int16_t subband_search_offset[], /* i : Subband Search range */ + const int16_t sbWidth[], /* i : Subband Search range */ + int16_t *prev_stab_hfe2 /* i/o: Estimated harmonic position */ +) +{ + float peak; + int16_t i, j, q, k, k1, k2; + float input_abs[L_FRAME32k], blk_peak[30]; + int16_t blk_end, blk_st; + int16_t peak_pos, blk_peak_pos[30], diff_peak_pos[30], sharp, sharp1; + int16_t min_har_pos; + int16_t blk_peak_pos_te[30]; + float blk_peak_te[30]; + int16_t temp; + int16_t hfe_est_countk, hfe_est_countk1, hfe_est_countk2; + int16_t r1, r2, r3; + int16_t start_pos; + float blk_peak_max; + int16_t blk_peak_pos_max; + int16_t nlags, ct_hfsb2, sum_diff = 0; + int16_t blk_peak_pos_hfsb2[30], diff_peak_pos_hfsb2[30]; + int16_t rem_hfe2, q_diffpos_hfe2 = 0, diff_posmax_hfe2, q_diffpos_prevhfe2; + int16_t blk_peak_max_idx, blk_peak_pos_max_diff, diff_peak_pos_te[30]; + + rem_hfe2 = 0; + q_diffpos_hfe2 = 0; + diff_posmax_hfe2 = 0; + q_diffpos_prevhfe2 = 0; + + set_s( blk_peak_pos_te, 0, 30 ); + set_s( diff_peak_pos, 0, 30 ); + + r1 = SWB_HAR_RAN1; + r2 = SWB_HAR_RAN2; + r3 = SWB_HAR_RAN3; + start_pos = r1; + + /* Copy the abs values of LF spectrum*/ + for ( i = start_pos; i < N; i++ ) + { + input_abs[i] = (float) fabs( spectra[i] ); + } + + blk_end = (int16_t) N / LR_BLK_LEN; + blk_st = (int16_t) start_pos / LR_BLK_LEN; + + if ( (float) N / (LR_BLK_LEN) -blk_end > 0.0f ) + { + blk_end++; + } + + /* initialization of over buffer for fractional point */ + for ( i = N; i < ( blk_end * LR_BLK_LEN ); i++ ) + { + input_abs[i] = 0.0f; + } + + q = start_pos; + + /* Block Processing, to detect the spectral peaks*/ + for ( i = blk_st; i < blk_end; i++ ) + { + peak = 0.0f; + peak_pos = 0; + + for ( j = 0; j < LR_BLK_LEN; j++, q++ ) + { + if ( input_abs[q] > peak ) + { + peak = input_abs[q]; + peak_pos = q; + } + + if ( i > blk_st && input_abs[q] != 0 && input_abs[q] == peak && ( peak_pos - blk_peak_pos[i - 1] ) < LR_HLF_PK_BLK_LEN ) + { + peak = input_abs[q]; + peak_pos = q; + } + } + + blk_peak[i] = peak; + blk_peak_pos[i] = peak_pos; + } + + for ( i = blk_st; i < blk_end; i++ ) + { + if ( i > blk_st ) + { + if ( blk_peak_pos[i] != 0 && blk_peak_pos[i - 1] != 0 ) + { + if ( ( blk_peak_pos[i] - blk_peak_pos[i - 1] ) < LR_LOWBAND_DIF_PK_LEN ) + { + if ( blk_peak[i] > blk_peak[i - 1] ) + { + blk_peak[i - 1] = 0.0f; + blk_peak_pos[i - 1] = 0; + } + else + { + blk_peak[i] = blk_peak[i - 1]; + blk_peak_pos[i] = blk_peak_pos[i - 1]; + blk_peak[i - 1] = 0.0f; + blk_peak_pos[i - 1] = 0; + } + } + } + } + } + + /* peak counts in each group */ + j = 0; + hfe_est_countk = 0; + hfe_est_countk1 = 0; + hfe_est_countk2 = 0; + for ( i = blk_st; i < blk_end; i++ ) + { + if ( blk_peak_pos[i] != 0 ) + { + blk_peak_pos_te[j] = blk_peak_pos[i]; + if ( blk_peak_pos[i] < r2 ) + { + hfe_est_countk++; + } + else if ( blk_peak_pos[i] < r3 ) + { + hfe_est_countk1++; + } + else + { + hfe_est_countk2++; + } + + blk_peak_te[j] = blk_peak[i]; + j++; + } + } + + min_har_pos = SWB_HAR_RAN1; + temp = 0; + blk_peak_max = blk_peak_te[0]; + blk_peak_pos_max = blk_peak_pos_te[0]; + blk_peak_max_idx = 0; + for ( i = 1; i < j; i++ ) + { + diff_peak_pos[i - 1] = blk_peak_pos_te[i] - blk_peak_pos_te[i - 1]; + if ( diff_peak_pos[i - 1] <= min_har_pos ) + { + min_har_pos = diff_peak_pos[i - 1]; + } + + if ( blk_peak_te[i - 1] > blk_peak_max ) + { + blk_peak_max = blk_peak_te[i - 1]; + blk_peak_pos_max = blk_peak_pos_te[i - 1]; + blk_peak_max_idx = i - 1; + } + + temp++; + } + blk_peak_pos_max_diff = diff_peak_pos[blk_peak_max_idx]; + + /* Decision for BWE reconstruction */ + if ( ( hfe_est_countk < 2 && hfe_est_countk1 < 2 && hfe_est_countk2 < 2 ) || min_har_pos >= SWB_HAR_RAN1 ) + { + *flag_dis = 0; + if ( ( hfe_est_countk == 1 && hfe_est_countk1 == 1 ) && ( hfe_est_countk2 == 1 || hfe_est_countk2 == 0 ) ) + { + *flag_dis = 1; + } + } + for ( i = 0; i < temp; i++ ) + { + if ( blk_peak_pos_max_diff + LR_LOWBAND_DIF_PK_LEN < diff_peak_pos[i] ) + { + diff_peak_pos[i] = 0; + } + } + mvs2s( diff_peak_pos, diff_peak_pos_te, temp ); + set_s( diff_peak_pos, -1, temp ); + j = 0; + for ( i = 0; i < temp; i++ ) + { + if ( diff_peak_pos_te[i] != 0 ) + { + diff_peak_pos[j] = diff_peak_pos_te[i]; + j++; + } + } + temp = j; + /* harmonic estimation analysis to perform BWE Reconstruction */ + if ( *flag_dis ) + { + sharp = 0; + k = 0; + k1 = 0; + sharp1 = 0; + k2 = 0; + + for ( i = 0, q = 1; i < temp; i++, q++ ) + { + if ( ( diff_peak_pos[i] <= ( min_har_pos + LR_LOWBAND_DIF_PK_LEN ) ) && diff_peak_pos[i] > 0 ) + { + sharp += diff_peak_pos[i]; + k++; + } + else if ( ( diff_peak_pos[i] <= ( min_har_pos + 2 * LR_LOWBAND_DIF_PK_LEN ) ) && diff_peak_pos[i] > 0 ) + { + sharp1 += diff_peak_pos[i]; + k1++; + } + else if ( diff_peak_pos[i] > 0 ) + { + k2++; + } + } + + est_freq_har_decis( har_freq_est1, har_freq_est2, sharp, sharp1, hfe_est_countk1, hfe_est_countk2, k, k1, k2, prev_frm_hfe2 ); + + blk_peak_pos_max = blk_peak_pos_te[temp - 1]; + + if ( ( *prev_stab_hfe2 ) > 0 && ( *prev_frm_hfe2 ) > 0 && *prev_stab_hfe2 < N ) + { + rem_hfe2 = *har_freq_est2 % ( *prev_frm_hfe2 ); + diff_posmax_hfe2 = (int16_t) abs( blk_peak_pos_max - *prev_stab_hfe2 ); + if ( rem_hfe2 == 0 ) + { + if ( diff_posmax_hfe2 < 9 || *har_freq_est2 == 0 ) + { + blk_peak_pos_max = *prev_stab_hfe2; + } + else + { + q_diffpos_hfe2 = diff_posmax_hfe2 / ( *har_freq_est2 ); + q_diffpos_prevhfe2 = diff_posmax_hfe2 / ( *prev_frm_hfe2 ); + if ( q_diffpos_hfe2 < 10 || q_diffpos_prevhfe2 < 10 ) + { + blk_peak_pos_max = *prev_stab_hfe2; + } + else + { + *prev_stab_hfe2 = blk_peak_pos_max; + } + } + } + else + { + *prev_stab_hfe2 = blk_peak_pos_max; + } + } + else + { + *prev_stab_hfe2 = blk_peak_pos_max; + } + + if ( *har_freq_est1 == 0 || *har_freq_est2 == 0 ) + { + *flag_dis = 0; + } + } + + if ( *flag_dis == 0 ) + { + if ( *prev_frm_hfe2 != 0 ) + { + *har_freq_est2 = *prev_frm_hfe2; + } + else + { + nlags = (int16_t) pow( 2, bits_lagIndices_mode0_Har[0] ); + ct_hfsb2 = 0; + for ( i = 0; i < j; i++ ) + { + if ( blk_peak_pos_te[i] >= ( subband_search_offset[0] - nlags / 2 ) && blk_peak_pos_te[i] < ( subband_search_offset[0] + sbWidth[0] + nlags / 2 ) ) + { + blk_peak_pos_hfsb2[ct_hfsb2] = blk_peak_pos_te[i]; + ct_hfsb2++; + } + } + + if ( ct_hfsb2 > 1 ) + { + for ( i = 1; i < ct_hfsb2; i++ ) + { + diff_peak_pos_hfsb2[i - 1] = blk_peak_pos_hfsb2[i] - blk_peak_pos_hfsb2[i - 1]; + sum_diff += diff_peak_pos_hfsb2[i - 1]; + } + *har_freq_est2 = sum_diff / ct_hfsb2; + } + else + { + *har_freq_est2 = min_har_pos; + } + } + } + + + return blk_peak_pos_max; +} + + +/*-------------------------------------------------------------------* + * genhf_noise() + * + * + *-------------------------------------------------------------------*/ + +void genhf_noise( + float noise_flr[], /* i : smoothed non tonal */ + float xSynth_har[], /* o : hf non tonal components */ + float *predBuf, /* i : smoothed tonal compone */ + int16_t bands, /* i : total number of subbands in a frame */ + int16_t harmonic_band, /* i : Number of LF harmonic frames */ + int16_t har_freq_est2, /* i : harmonic signal parameter */ + int16_t pos_max_hfe2, /* i : last pulse in core coder */ + int16_t *pul_res, /* o : pulse resolution */ + GainItem pk_sf[], /* o : representative region */ + const int16_t fLenLow, /* i : low frequency length */ + const int16_t fLenHigh, /* i : high frequency length */ + const int16_t sbWidth[], /* i : bandwidth for high bands */ + const int16_t lagIndices[], /* i : correlation indices for most representative */ + const int16_t subband_offsets[], /* i : band offsets for HF reconstruction */ + const int16_t subband_search_offset[] /* i : most representative regions offsets in LF */ +) +{ + int16_t k, j, ii, st_pos, dst_pos; + int16_t nlags[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; + float tmpbuf[L_FRAME32k]; + int16_t hfband_end[NB_SWB_SUBBANDS]; + int16_t rem_hfe, temp_last_peakpos, i, l, pos, res; + float hf_pulse_peaks[160], pulse_peak_sb[320]; + int16_t st_last_peakpos; + + set_f( tmpbuf, 0.0f, L_FRAME32k ); + for ( k = 0; k < 3; k++ ) + { + hfband_end[k] = fLenLow + subband_offsets[k + 1]; + } + hfband_end[3] = fLenLow + fLenHigh; + + rem_hfe = (int16_t) ( fLenLow - pos_max_hfe2 - 1 ) / har_freq_est2; + st_last_peakpos = pos_max_hfe2 + ( rem_hfe * har_freq_est2 ); + temp_last_peakpos = st_last_peakpos; + i = 0; + + for ( k = 0; k < 2; k++ ) + { + nlags[k] = (int16_t) pow( 2, bits_lagIndices_mode0_Har[k] ); + + l = 0; + while ( st_last_peakpos < ( fLenLow + subband_offsets[k] ) ) + { + st_last_peakpos += har_freq_est2; + } + st_last_peakpos -= har_freq_est2; + + if ( k == 0 ) + { + st_pos = subband_search_offset[k] - nlags[k] / 2 + lagIndices[k]; + + /*Copy the LF Smoothed Noise to the HF*/ + for ( j = 0; j < sbWidth[k]; j++ ) + { + xSynth_har[j] = noise_flr[st_pos + j]; + tmpbuf[j] = xSynth_har[j]; + if ( predBuf[st_pos + j] != 0.0f ) + { + hf_pulse_peaks[l] = predBuf[st_pos + j]; + l++; + } + } + } + else + { + st_pos = subband_search_offset[k] + nlags[k] / 2 - lagIndices[k]; + dst_pos = st_pos - sbWidth[k]; + ii = sbWidth[k - 1]; + /*Copy the LF Smoothed Noise floor to the HF*/ + for ( j = st_pos; j > ( dst_pos ) && ii < ( sbWidth[k] + sbWidth[k - 1] ); j-- ) + { + xSynth_har[ii] = noise_flr[j]; + tmpbuf[ii] = xSynth_har[ii]; + if ( predBuf[j] != 0.0f ) + { + hf_pulse_peaks[l] = predBuf[j]; + l++; + } + ii++; + } + } + pos = 0; + for ( j = 0; j < l; j++ ) + { + st_last_peakpos += har_freq_est2; + if ( st_last_peakpos < hfband_end[k] ) + { + pk_sf[k * 8 + pos].nmrValue = hf_pulse_peaks[j]; + pk_sf[k * 8 + pos].gainIndex = st_last_peakpos - fLenLow; + pul_res[k]++; + pulse_peak_sb[i] = hf_pulse_peaks[j]; + i++; + pos++; + } + } + st_last_peakpos = temp_last_peakpos; + } + res = i - 1; + l = 1; + ii = hfband_end[k - 1] - fLenLow - 1; + for ( ; k < ( bands - harmonic_band ); k++ ) + { + for ( j = hfband_end[k - 1] - fLenLow; j < ( hfband_end[k] - fLenLow ); j++ ) + { + xSynth_har[j] = tmpbuf[ii]; + tmpbuf[j] = xSynth_har[j]; + ii--; + } + pos = 0; + while ( st_last_peakpos < hfband_end[k - 1] ) + { + st_last_peakpos += har_freq_est2; + } + while ( st_last_peakpos < hfband_end[k] && pul_res[k] < pul_res[2 - l] && l <= 2 ) + { + pk_sf[k * 8 + pos].nmrValue = pulse_peak_sb[res]; + pk_sf[k * 8 + pos].gainIndex = st_last_peakpos - fLenLow; + pul_res[k]++; + res--; + pos++; + st_last_peakpos += har_freq_est2; + } + l++; + } + + return; +} + +/*-------------------------------------------------------------------* + * SmoothSpec() + * + * Smoothes specified samples using moving average method. The number + * of points in the average is given by 'span'. Note that current + * implementation does not accept 'span' to be smaller than 'fLen'. + *-------------------------------------------------------------------*/ + +static void SmoothSpec( + const float *inBuf, /* i : input */ + float *outBuf, /* o : output */ + const int16_t fLen, /* i : length */ + int16_t span /* i : averaging length */ +) +{ + int16_t i, span1, nItems; + float sum, ispan; + const float *oldPtr, *newPtr; + + /* not accepted */ + if ( span > fLen ) + { + mvr2r( inBuf, outBuf, fLen ); + return; + } + + /* span must be odd */ + if ( ( span & 0x1 ) == 0 ) + { + span--; + } + + span1 = span >> 1; + + /* first sample */ + sum = *inBuf; + *outBuf++ = sum; + + oldPtr = inBuf; + newPtr = inBuf + 2; + + /* handle start */ + inBuf++; + sum += *inBuf; + + for ( i = 1, nItems = 3; i < span1; i++, inBuf++ ) + { + sum += *newPtr++; + *outBuf++ = sum / nItems; + + sum += *newPtr++; + nItems += 2; + } + + ispan = 1.0f / span; + inBuf++; + i++; + sum += *newPtr++; + *outBuf++ = sum * ispan; + + /* moving average */ + for ( ; i < fLen - span1; i++, inBuf++ ) + { + sum += *newPtr++; + sum -= *oldPtr++; + *outBuf++ = sum * ispan; + } + + /* handle end */ + nItems = span - 2; + sum -= *oldPtr++; + + for ( ; i < fLen - 1; i++, inBuf++ ) + { + sum -= *oldPtr++; + *outBuf++ = sum / nItems; + nItems -= 2; + sum -= *oldPtr++; + } + + /* last sample */ + *outBuf = *inBuf; + + return; +} + +/*-------------------------------------------------------------------* + * SpectrumSmoothing() + * + * Smoothing of the low-frequency envelope + *-------------------------------------------------------------------*/ + +void SpectrumSmoothing( + float *inBuf, /* i : input */ + float *outBuf, /* o : output */ + const int16_t fLen, /* i : length */ + const float th_cut /* i : threshold of cut */ +) +{ + int16_t i, k; + float inBuf_pss[L_FRAME32k]; + float outBuf_pss[L_FRAME32k]; + float max_val[L_FRAME32k / L_SB]; + float max_val_norm; + float inBuf_abs; + int16_t j; + int16_t num_subband_smooth; + int16_t m, n; + int16_t cnt_zero_cont; + int16_t n_list[BANDS_MAX]; + int16_t reset_flag; + + num_subband_smooth = (int16_t) fLen / L_SB; + if ( (float) fLen / L_SB - num_subband_smooth > 0.0f ) + { + num_subband_smooth++; + } + + for ( i = 0; i < fLen; i++ ) + { + inBuf_pss[i] = inBuf[i]; + outBuf_pss[i] = 0.0f; + } + + for ( i = fLen; i < fLen + ( num_subband_smooth * L_SB - fLen ); i++ ) + { + inBuf_pss[i] = 0.0f; + outBuf_pss[i] = 0.0f; + } + + j = 0; + for ( i = 0; i < num_subband_smooth; i++ ) + { + max_val[i] = 0; + for ( k = 0; k < L_SB; k++ ) + { + inBuf_abs = (float) fabs( inBuf_pss[j] ); + if ( max_val[i] < inBuf_abs ) + { + max_val[i] = inBuf_abs; + } + + j++; + } + } + + /* convert to maximum amplitude frequency log scale envelope */ + j = 0; + for ( i = 0; i < num_subband_smooth; i++ ) + { + max_val_norm = 0.0f; + if ( max_val[i] != 0.0f ) + { + max_val_norm = 10.0f / max_val[i]; + } + + for ( k = 0; k < L_SB; k++ ) + { + if ( inBuf_pss[j] == 0.0f ) + { + outBuf_pss[j] = 0.0f; + } + else if ( fabs( inBuf_pss[j] ) < max_val[i] ) + { + outBuf_pss[j] = inBuf_pss[j] * max_val_norm; + } + else + { + /* CLIP , for avoiding computational difference */ + outBuf_pss[j] = 10.0f; + if ( inBuf_pss[j] < 0.0f ) + { + outBuf_pss[j] = -10.0f; + } + } + j++; + } + } + k = 0; + m = 0; + n = 0; + reset_flag = 0; + n_list[0] = 0; + for ( j = 0; j < num_subband_smooth; j++ ) + { + cnt_zero_cont = 0; + for ( i = 0; i < L_SB; i++ ) + { + if ( outBuf_pss[k] == 0.0f ) + { + cnt_zero_cont++; + } + else + { + cnt_zero_cont = 0; + } + k++; + } + + if ( cnt_zero_cont != 0 ) + { + if ( j > subband_search_offsets[0] / L_SB && reset_flag == 0 ) + { + n = 0; + reset_flag = 1; + } + n_list[n] = j; + n++; + } + + if ( reset_flag == 1 && n == 1 ) + { + m = 0; + } + + if ( cnt_zero_cont > 3 * L_SB / 4 ) + { + for ( i = 0; i < L_SB; i++ ) + { + if ( outBuf_pss[k - L_SB + i] == 0.0f ) + { + outBuf_pss[k - L_SB + i] = outBuf_pss[n_list[m] * L_SB + i] * 0.5f; + } + } + m++; + } + } + + for ( i = 0; i < fLen; i++ ) + { + outBuf[i] = 0.0f; + if ( fabs( outBuf_pss[i] ) > th_cut ) + { + outBuf[i] = outBuf_pss[i]; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * Get20Log10Spec() + * + * Calculates 20*log10() for the specified samples. Input and output buffers can be the same. + *-------------------------------------------------------------------*/ + +static void Get20Log10Spec( + const float *inBuf, /* i : input */ + float *outBuf, /* o : output */ + const int16_t fLen /* i : loop length */ +) +{ + int16_t i; + + for ( i = 0; i < fLen; i++, inBuf++ ) + { + *outBuf++ = (float) ( 20.0f * log10( fabs( *inBuf + 1.0 ) ) ); + } + + return; +} + +/*-------------------------------------------------------------------* + * convert_lagIndices_pls2smp() + * + * + *-------------------------------------------------------------------*/ + +void convert_lagIndices_pls2smp( + int16_t lagIndices_in[], + int16_t nBands_search, + int16_t lagIndices_out[], + const float sspectra[], + const int16_t sbWidth[], + const int16_t fLenLow ) +{ + int16_t sb; + int16_t i, cnt; + + for ( sb = 0; sb < nBands_search; sb++ ) + { + cnt = 0; + i = 0; + while ( cnt <= lagIndices_in[sb] ) + { + if ( sspectra[subband_search_offsets[sb] + i] != 0.0f ) + { + cnt++; + } + + i++; + + if ( subband_search_offsets[sb] + i + sbWidth[sb] >= fLenLow ) + { + /* over fLenLow, no need for more search */ + break; + } + } + + lagIndices_out[sb] = i - 1 + subband_search_offsets[sb]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * get_usebit_npswb() + * + * + *-------------------------------------------------------------------*/ + +int16_t get_usebit_npswb( + const int16_t hqswb_clas ) +{ + int16_t i; + int16_t bits; + int16_t up_lmt; + const int16_t *bits_req; + + up_lmt = 0; + bits_req = bits_lagIndices_modeNormal; + bits = 0; + if ( hqswb_clas == HQ_NORMAL ) + { + up_lmt = NB_SWB_SUBBANDS; + bits_req = bits_lagIndices_modeNormal; + } + else if ( hqswb_clas == HQ_HARMONIC ) + { + up_lmt = NB_SWB_SUBBANDS_HAR_SEARCH_SB; + bits_req = bits_lagIndices_mode0_Har; + bits = 2; /*noise gain*/ + } + for ( i = 0; i < up_lmt; i++ ) + { + bits += bits_req[i]; + } + + return bits; +} + + +/*-------------------------------------------------------------------* + * SpectrumSmoothing_nss() + * + * + *-------------------------------------------------------------------*/ + +static void SpectrumSmoothing_nss( + const float *inBuf, + float *outBuf, + const int16_t fLen ) +{ + int16_t i, k; + float inBufw[L_FRAME32k + L_SB_NSS]; + float outBufw[L_FRAME32k + L_SB_NSS]; + float temp_sum_1[NUM_SUBBAND_SMOOTH_MAX]; + float temp_sum_2[NUM_SUBBAND_SMOOTH_MAX]; + float temp_sum_3[NUM_SUBBAND_SMOOTH_MAX]; + float temp_sum_log[NUM_SUBBAND_SMOOTH_MAX]; + float temp_sum_smooth[NUM_SUBBAND_SMOOTH_MAX]; + float temp_sum_div[NUM_SUBBAND_SMOOTH_MAX]; + int16_t num_subband_smooth; + float smr, avg_val, r0; + float clip_cof, avg_val2, thre; + float thre_min; + float max_peak; + + /* calculate subband number */ + num_subband_smooth = (int16_t) ( fLen / L_SB_NSS ); + if ( fLen / ( L_SB_NSS + 0.0f ) - num_subband_smooth > 0.0f ) + { + num_subband_smooth++; + } + + /* buffer copy for fractional point */ + for ( i = 0; i < fLen; i++ ) + { + inBufw[i] = inBuf[i]; + outBufw[i] = 0.0f; + } + + /* initialization of over buffer for fractional point */ + for ( i = fLen; i < fLen + L_SB_NSS; i++ ) + { + inBufw[i] = 0.0f; + outBufw[i] = 0.0f; + } + + avg_val = 0.0f; + for ( i = 0; i < fLen; i++ ) + { + r0 = (float) fabs( inBufw[i] ); + avg_val += r0; + } + avg_val /= (float) fLen; + + max_peak = 0.0f; + for ( i = 0; i < fLen; i++ ) + { + r0 = (float) fabs( inBufw[i] ); + if ( max_peak < r0 ) + { + max_peak = r0; + } + } + + smr = 10.0f * (float) log10( max_peak / ( avg_val + 1.0e-20 ) + 1.0e-20 ); + + for ( i = 0; i < num_subband_smooth; i++ ) + { + temp_sum_1[i] = 0.0; + temp_sum_2[i] = 0.0; + + for ( k = 0; k < L_SB_NSS_HALF; k++ ) + { + temp_sum_1[i] += (float) ( fabs( inBufw[k + L_SB_NSS * i] ) ); + } + + for ( k = L_SB_NSS_HALF; k < L_SB_NSS; k++ ) + { + temp_sum_2[i] += (float) ( fabs( inBufw[k + L_SB_NSS * i] ) ); + } + + temp_sum_1[i] *= 0.25f; + temp_sum_2[i] *= 0.25f; + temp_sum_3[i] = temp_sum_1[i] * temp_sum_2[i]; + + if ( temp_sum_3[i] == 0.0f ) + { + temp_sum_3[i] = temp_sum_1[i] + temp_sum_2[i]; + } + } + + Get20Log10Spec( temp_sum_3, temp_sum_log, num_subband_smooth ); + + for ( i = 0; i < num_subband_smooth; i++ ) + { + temp_sum_log[i] *= 0.5f; + } + + SmoothSpec( temp_sum_log, temp_sum_smooth, num_subband_smooth, MA_LEN ); + + for ( i = 0; i < num_subband_smooth; i++ ) + { + temp_sum_div[i] = (float) pow( 10, -1.0f * temp_sum_smooth[i] / 20 ); + } + + for ( i = 0; i < num_subband_smooth; i++ ) + { + for ( k = 0; k < L_SB_NSS; k++ ) + { + outBufw[k + L_SB_NSS * i] = inBufw[k + L_SB_NSS * i] * temp_sum_div[i]; + } + } + + avg_val2 = 0.0f; + for ( i = 0; i < fLen; i++ ) + { + r0 = (float) fabs( outBufw[i] ); + avg_val2 += r0; + } + avg_val2 /= (float) fLen; + + clip_cof = smr - 16.0f; + if ( clip_cof < 0.0f ) + { + clip_cof = 0.0f; + } + clip_cof += 2.5f; + + thre = avg_val2 * clip_cof; + thre_min = avg_val2 * 0.25f; + for ( i = 0; i < fLen; i++ ) + { + if ( fabs( outBufw[i] ) > thre ) + { + if ( outBufw[i] < 0.0f ) + { + outBufw[i] = -1.0f * thre; + } + else + { + outBufw[i] = thre; + } + } + + if ( fabs( outBufw[i] ) < thre_min ) + { + outBufw[i] = 0.0f; + } + } + + for ( i = 0; i < fLen; i++ ) + { + outBuf[i] = outBufw[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * get_sigma() + * + * + *-------------------------------------------------------------------*/ + +static float get_sigma( + const float x_abs[], + const float avg, + const int16_t length ) +{ + int16_t i; + float d; + float sigma; + + d = 0; + for ( i = 0; i < length; i++ ) + { + d += x_abs[i] * x_abs[i]; + } + + d /= ( length - 1 ); + d -= avg * avg; + + sigma = (float) sqrt( d ); + + return sigma; +} + +/*--------------------------------------------------------------------------* + * FindNBiggest2_simple() + * + * Finds N biggest components from input + * Maximum value allowed for nIdx is currently 140 and the maximum value of n is currently 20 + *--------------------------------------------------------------------------*/ + +void FindNBiggest2_simple( + const float *inBuf, /* i : input buffer (searched) */ + GainItem *g, /* o : N biggest components found */ + const int16_t nIdx, /* i : search length */ + int16_t *n, /* i : number of components searched (N biggest) */ + const int16_t N_NBIGGESTSEARCH ) +{ + int16_t j; + float abs_in[400]; + float avg_in; + float max_in; + float thr; + int16_t peak_cnt; + float sigma; + + max_in = 0; + avg_in = 0; + for ( j = 0; j < nIdx; j++ ) + { + abs_in[j] = (float) fabs( inBuf[j] ); + + if ( max_in < abs_in[j] ) + { + max_in = abs_in[j]; + } + + avg_in += abs_in[j]; + } + + avg_in /= (float) nIdx; + + peak_cnt = 0; + if ( max_in <= 0.0001f ) + { + for ( j = 0; j < N_NBIGGESTSEARCH; j++ ) + { + g[peak_cnt].nmrValue = 0.0f; + g[peak_cnt].gainIndex = j; + peak_cnt++; + } + } + + sigma = get_sigma( abs_in, avg_in, nIdx ); + thr = avg_in + sigma * 1.15f; + + if ( peak_cnt < N_NBIGGESTSEARCH ) + { + for ( j = 0; j < nIdx; j++ ) + { + if ( abs_in[j] > thr ) + { + g[peak_cnt].nmrValue = abs_in[j]; + g[peak_cnt].gainIndex = j; + abs_in[j] = 0.0f; + peak_cnt++; + } + + if ( peak_cnt == N_NBIGGESTSEARCH ) + { + break; + } + } + } + + thr *= ( 0.3f / N_NBIGGESTSEARCH ) * peak_cnt + 0.7f; + + if ( peak_cnt < N_NBIGGESTSEARCH ) + { + for ( j = 0; j < nIdx; j++ ) + { + if ( abs_in[j] > thr ) + { + g[peak_cnt].nmrValue = abs_in[j]; + g[peak_cnt].gainIndex = j; + abs_in[j] = 0.0f; + peak_cnt++; + } + + if ( peak_cnt == N_NBIGGESTSEARCH ) + { + break; + } + } + } + + thr *= ( 0.6f / N_NBIGGESTSEARCH ) * peak_cnt + 0.3f; + if ( peak_cnt < N_NBIGGESTSEARCH ) + { + for ( j = 0; j < nIdx; j++ ) + { + if ( abs_in[j] > thr ) + { + g[peak_cnt].nmrValue = abs_in[j]; + g[peak_cnt].gainIndex = j; + abs_in[j] = 0.0f; + peak_cnt++; + } + + if ( peak_cnt == N_NBIGGESTSEARCH ) + { + break; + } + } + } + + *n = peak_cnt; + + return; +} + +/*--------------------------------------------------------------------------* + * spectrumsmooth_noiseton() + * + * Spectrum normalization for the the core coder + *--------------------------------------------------------------------------*/ + +float spectrumsmooth_noiseton( + float spectra[], /* i : core coder */ + const float spectra_ni[], /* i : core coder with sparse filling */ + float sspectra[], /* o : Smoothed tonal information from core coder */ + float sspectra_diff[], /* o : non tonal infomration for gap filling */ + float sspectra_ni[], /* o : smoothed core coder */ + const int16_t fLenLow, /* i : low frequency boundaries */ + int16_t *ni_seed /* io : random seed */ +) +{ + float spectra_diff[L_FRAME32k]; + float ni_ratio, ss_min, cut_sig_th, cut_ni_th; + int16_t i, pcnt, sign; + float spectra_rm[L_FRAME32k]; + float cut_input = 0.1f; + float rand_a[L_FRAME32k]; + + /* pre-prepare random array for float-fix interoperability */ + for ( i = 0; i < fLenLow; i++ ) + { + rand_a[i] = own_random( ni_seed ) / PCM16_TO_FLT_FAC; + } + + /*Get the pulse resolution for the core coder*/ + pcnt = 0; + for ( i = 0; i < fLenLow; i++ ) + { + if ( spectra[i] != 0.0 ) + { + pcnt++; + } + } + + ni_ratio = 4.0f * ( pcnt ) / ( fLenLow + 0.0f ); + ni_ratio = min( 0.9f, ni_ratio ); + + ss_min = ni_ratio * 10.0f; + cut_sig_th = ss_min / 4.0f; + cut_sig_th = max( 0.95f, cut_sig_th ); + /*core coder normalization for gap filling*/ + for ( i = 0; i < fLenLow; i++ ) + { + spectra_rm[i] = 0.0f; + if ( fabs( spectra[i] ) > cut_input ) + { + spectra_rm[i] = spectra[i]; + } + } + SpectrumSmoothing( spectra_rm, sspectra, fLenLow, cut_sig_th ); + /*Extract noise informaton from the core coder*/ + mvr2r( sspectra, sspectra_ni, fLenLow ); + for ( i = 0; i < fLenLow; i++ ) + { + spectra_diff[i] = spectra_ni[i] - spectra[i]; + } + cut_ni_th = 0.0f; + /*normalize sparse filled components*/ + for ( i = 0; i < fLenLow; i++ ) + { + spectra_rm[i] = 0.0f; + if ( fabs( spectra_diff[i] ) > cut_input ) + { + spectra_rm[i] = spectra_diff[i]; + } + } + SpectrumSmoothing( spectra_rm, sspectra_diff, fLenLow, cut_ni_th ); + /*Normalized corecoder for Gap filling */ + for ( i = 0; i < fLenLow; i++ ) + { + sign = 1; + if ( sspectra[i] < 0 ) + { + sign = -1; + } + if ( fabs( sspectra[i] ) > ss_min ) + { + sspectra[i] = sign * ( ( 10 - ss_min ) / 10.0f * (float) fabs( sspectra[i] ) + ss_min ); + } + if ( sspectra[i] != 0.0 ) + { + sspectra_ni[i] = sspectra[i]; + } + else + { + sspectra_ni[i] = sspectra_diff[i] * ni_ratio; + } + if ( sspectra_ni[i] == 0.0f ) + { + sspectra_ni[i] = 0.5f * 10.0f * ni_ratio * rand_a[i]; + } + } + + return ( ss_min ); +} + +/*--------------------------------------------------------------------------* + * noiseinj_hf() + * + * level adjustments for the missing bands in the core coder + *--------------------------------------------------------------------------*/ + +void noiseinj_hf( + float xSynth_har[], /* o : gap filled information */ + const float th_g[], /* i : level adjustment information */ + const float band_energy[], /* i : subband energies */ + float *prev_En_sb, /* i/o: band Energies */ + const int16_t p2a_flags[], /* i : Missing bands in the core coder */ + const int16_t BANDS, /* i : total bands */ + const int16_t band_start[], /* i : band start indices */ + const int16_t band_end[], /* i : band end indices */ + const int16_t fLenLow /* i : low frequency bandwidth */ +) +{ + + float *p_En, ni_scale, *p_Enn_sm_sb, En[NB_SWB_SUBBANDS], Enn_sm_sb[NB_SWB_SUBBANDS]; + int16_t k, i; + + int16_t map_pulse_t[L_FRAME32k]; + int16_t map_pulse[L_FRAME32k]; + + set_s( map_pulse_t, 0, band_end[BANDS - 1] + 1 ); + set_s( map_pulse, 0, band_end[BANDS - 1] + 1 ); + /*level adjust the missing bands in the core coder */ + p_En = En; + for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) + { + *p_En = 0.0f; + if ( p2a_flags[k] == 0 ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( fabs( xSynth_har[i - fLenLow] ) <= th_g[k - ( BANDS - NB_SWB_SUBBANDS )] ) + { + *p_En += xSynth_har[i - fLenLow] * xSynth_har[i - fLenLow]; + } + else + { + map_pulse_t[i] = 1; + } + } + *p_En = (float) sqrt( *p_En ); + } + p_En++; + } + + p_En = En; + p_Enn_sm_sb = Enn_sm_sb; + for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) + { + *p_Enn_sm_sb = prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )]; + if ( p2a_flags[k] == 0 ) + { + if ( prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] < 0.8f * band_energy[k] ) + { + *p_Enn_sm_sb = ( 0.15f * ( *p_En ) ) + ( 0.85f * prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] ); + } + else + { + *p_Enn_sm_sb = ( 0.8f * ( *p_En ) ) + ( 0.2f * prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] ); + } + } + + p_Enn_sm_sb++; + p_En++; + } + + p_En = En; + p_Enn_sm_sb = Enn_sm_sb; + map_pulse[fLenLow] = ( map_pulse_t[fLenLow] | map_pulse_t[fLenLow + 1] ); + for ( i = fLenLow + 1; i < band_end[BANDS - 1]; i++ ) + { + map_pulse[i] = ( map_pulse_t[i - 1] | map_pulse_t[i] | map_pulse_t[i + 1] ); + } + map_pulse[i] = ( map_pulse_t[i - 1] | map_pulse_t[i] ); + for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) + { + if ( p2a_flags[k] == 0 && *p_En != 0.0f ) + { + ni_scale = (float) sqrt( ( *p_Enn_sm_sb ) / ( *p_En ) ); + ni_scale = min( 1.25f, ni_scale ); + ni_scale = max( 0.75f, ni_scale ); + ni_scale *= 0.8f; + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( fabs( xSynth_har[i - fLenLow] ) <= th_g[k - ( BANDS - NB_SWB_SUBBANDS )] ) + { + if ( map_pulse[i] == 0 ) + { + xSynth_har[i - fLenLow] *= ni_scale; + } + } + } + prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] = *p_Enn_sm_sb; + } + p_Enn_sm_sb++; + p_En++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * noise_extr_corcod() + * + * Spectrum normalization for the core coder + *--------------------------------------------------------------------------*/ + +void noise_extr_corcod( + float spectra[], /* i : core coder */ + const float spectra_ni[], /* i : core coder with sparse filling */ + float sspectra[], /* o : Smoothed tonal information from core coder */ + float sspectra_diff[], /* o : non tonal infomration for gap filling */ + float sspectra_ni[], /* o : smoothed core coder */ + const int16_t fLenLow, /* i : low frequency bands width */ + int16_t prev_hqswb_clas, /* i : classification information */ + float *prev_ni_ratio /* i/o: noise parameter */ +) +{ + int16_t i, pulse_num; + float spectra_diff[L_FRAME32k]; + float ni_ratio, ni_ratio_cur, br_adj; + + /*Spectrum Smoothing for tonal signals*/ + SpectrumSmoothing_nss( spectra, sspectra, fLenLow ); + + mvr2r( sspectra, sspectra_ni, fLenLow ); + /*noise extraction*/ + for ( i = 0; i < fLenLow; i++ ) + { + spectra_diff[i] = spectra_ni[i] - spectra[i]; + } + SpectrumSmoothing_nss( spectra_diff, sspectra_diff, fLenLow ); + /*Smoothing the noise components*/ + br_adj = 0.9f; + pulse_num = 0; + for ( i = 0; i < fLenLow; i++ ) + { + if ( spectra[i] != 0.0f ) + { + pulse_num++; + } + } + ni_ratio_cur = 0.0f; + if ( pulse_num != 0 ) + { + ni_ratio_cur = ( fLenLow - pulse_num ) / ( fLenLow + 0.0f ); + ni_ratio_cur *= br_adj; + } + if ( prev_hqswb_clas == HQ_HARMONIC ) + { + if ( ni_ratio_cur > ( *prev_ni_ratio ) ) + { + ni_ratio = 0.8f * ni_ratio_cur + ( *prev_ni_ratio ) * 0.2f; + } + else + { + ni_ratio = 0.6f * ni_ratio_cur + ( *prev_ni_ratio ) * 0.4f; + } + } + else + { + ni_ratio = 0.7f * ni_ratio_cur; + } + *prev_ni_ratio = ni_ratio; + + for ( i = 0; i < fLenLow; i++ ) + { + sspectra_diff[i] *= ni_ratio; + sspectra_ni[i] = sspectra[i] + sspectra_diff[i]; + } + + return; +} + +/*--------------------------------------------------------------------------* + * ton_ene_est() + * + * band energies for missing bands in the core coder + *--------------------------------------------------------------------------*/ + +void ton_ene_est( + float xSynth_har[], /* i : buffer with non tonal compoents */ + float be_tonal[], /* o : tonal energy of the missing bands */ + float band_energy[], /* i : subband energies */ + int16_t band_start[], /* i : subband start indices */ + int16_t band_end[], /* i : subband end indices */ + int16_t band_width[], /* i : subband widths */ + const int16_t fLenLow, /* i : low frequency width */ + const int16_t fLenHigh, /* i : High frequency width */ + int16_t bands, /* i : total subbands */ + int16_t har_bands, /* i : total number of harmonics bands */ + float ni_lvl, /* i : noise enve for the hf bands */ + GainItem pk_sf[], /* i : subband widths */ + int16_t *pul_res /* i : tonal resolution */ +) +{ + int16_t sb_ton_loc[SWB_HAR_RAN1]; + float sb_ton[SWB_HAR_RAN1], peak[NB_SWB_SUBBANDS]; + int16_t pos, count_pos_st, count_pos_end; + int16_t pul_res_bnd[NB_SWB_SUBBANDS]; + int16_t k, i, j; + float E = 0.0f, E_r = 0.0f, fac, ni_gain[NB_SWB_SUBBANDS], avg_pe[NB_SWB_SUBBANDS]; + + set_s( sb_ton_loc, -1, SWB_HAR_RAN1 ); + set_f( ni_gain, 0.0f, NB_SWB_SUBBANDS ); + set_f( avg_pe, 0.0f, NB_SWB_SUBBANDS ); + set_f( sb_ton, 0.0f, NB_SWB_SUBBANDS ); + set_f( peak, 0.0f, NB_SWB_SUBBANDS ); + /*non tonal adjustments*/ + for ( i = 0; i < fLenHigh; i++ ) + { + xSynth_har[i] *= ni_lvl; + } + + pos = 0; + for ( k = 0; k < bands - har_bands; k++ ) + { + for ( j = 0; j < pul_res[k]; j++ ) + { + sb_ton_loc[pos] = pk_sf[k * 8 + j].gainIndex; + sb_ton[pos] = pk_sf[k * 8 + j].nmrValue; + pos++; + } + } + k = 0; + pos = 0; + do + { + count_pos_st = pos; + while ( sb_ton_loc[pos] <= ( band_end[k + har_bands] - fLenLow ) && sb_ton_loc[pos] >= 0 ) + { + pos++; + } + count_pos_end = pos; + pul_res_bnd[k] = count_pos_end - count_pos_st; + if ( pul_res_bnd[k] > 0 ) + { + peak[k] = (float) fabs( sb_ton[count_pos_st] ); + } + k++; + } while ( k < NB_SWB_SUBBANDS ); + + k = 0; + /*energy calculation for tonal components*/ + for ( i = har_bands; i < bands; i++ ) + { + E = sum2_f( &xSynth_har[band_start[i] - fLenLow], band_width[i] ); /*noise energy*/ + E_r = (float) E / (float) pow( 2.0f, band_energy[i] ); + + if ( E_r < 0.06f ) + { + avg_pe[k] = (float) sqrt( pow( 2.0f, band_energy[i] ) / band_width[i] ); + fac = 0.6f; + if ( pul_res_bnd[k] != 0 ) + { + fac = ( (float) sqrt( E / band_width[i] ) / peak[k] ); + } + ni_gain[k] = fac * avg_pe[k]; + + ni_gain[k] = max( ( ( ni_gain[k] * ni_gain[k] * E_r ) >= 0.12f ) ? 0.05f * ni_gain[k] : 1.0f * ni_gain[k], 1.4f ); + + for ( j = band_start[i]; j <= band_end[i]; j++ ) + { + xSynth_har[j - fLenLow] *= ni_gain[k]; + } + E = sum2_f( &xSynth_har[band_start[i] - fLenLow], band_width[i] ); /*noise energy*/ + } + k++; + be_tonal[i] = (float) pow( 2.0f, band_energy[i] ) - E; /*tonal energy*/ + + if ( be_tonal[i] < 0.0f ) + { + E = 0; + for ( j = ( band_start[i] - fLenLow ); j <= ( band_end[i] - fLenLow ); j++ ) + { + xSynth_har[j] *= 0.25f; + E += xSynth_har[j] * xSynth_har[j]; + } + be_tonal[i] = (float) pow( 2.0f, band_energy[i] ) - E; /*tonal energy*/ + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * Gettonl_scalfact() + * + * Gap filling for the core coder + *--------------------------------------------------------------------------*/ +void Gettonl_scalfact( + float *outBuf, /* o : synthesized spectrum */ + const float *codbuf, /* i : core coder */ + const int16_t fLenLow, /* i : lowband length */ + const int16_t fLenHigh, /* i : highband length */ + int16_t harmonic_band, /* i : total number of Low frequency bands */ + int16_t bands, /* i : total number of subbands in a frame */ + float *band_energy, /* i : band energy of each subband */ + int16_t *band_start, /* i : subband start indices */ + int16_t *band_end, /* i : subband end indices */ + const int16_t p2aflags[], /* i : missing bands in the core coder */ + float be_tonal[], /* i : tonal energy */ + GainItem *pk_sf, /* i : toanl information for Sparse filling */ + int16_t *pul_res_pk /* i : pulse resolution information */ +) +{ + int16_t k, i, band_pos; + int16_t sb_ton_loc[SWB_HAR_RAN1]; + int16_t pos_tmp; + float sb_ton[SWB_HAR_RAN1], est_ton_ene[NB_SWB_SUBBANDS], ton_sf; + float step, enrd_r = 0.9f; + float band_sf[SWB_HAR_RAN1]; + int16_t pos, count_pos_st, count_pos_end, j; + + set_f( est_ton_ene, 0.0f, NB_SWB_SUBBANDS ); + set_s( sb_ton_loc, -1, SWB_HAR_RAN1 ); + /* Get the tonal information for sparse filling */ + pos = 0; + for ( k = 0; k < bands - harmonic_band; k++ ) + { + for ( j = 0; j < pul_res_pk[k]; j++ ) + { + sb_ton_loc[pos] = pk_sf[k * 8 + j].gainIndex; + sb_ton[pos] = pk_sf[k * 8 + j].nmrValue; + pos++; + } + } + k = 0; + pos = 0; + pos_tmp = 0; + + do + { + band_pos = k + harmonic_band; + count_pos_st = pos; + while ( sb_ton_loc[pos] <= ( band_end[band_pos] - fLenLow ) && sb_ton_loc[pos] >= 0 ) + { + pos++; + } + count_pos_end = pos; + for ( i = count_pos_st; i < count_pos_end; i++ ) + { + est_ton_ene[k] += ( sb_ton[i] * sb_ton[i] ); + } + if ( est_ton_ene[k] <= 0.0f ) + { + est_ton_ene[k] = 0.01f; + } + ton_sf = 0.0f; + if ( be_tonal[band_pos] > 0.0f ) + { + ton_sf = (float) sqrt( be_tonal[band_pos] / est_ton_ene[k] ); + } + for ( i = count_pos_st; i < count_pos_end; i++ ) + { + band_sf[pos_tmp] = ton_sf; + pos_tmp++; + } + k++; + } while ( k < NB_SWB_SUBBANDS ); + /* Gap filling for the core coder */ + step = 1.0f / ( 0.077f * fLenHigh ); + pos_tmp = 0; + for ( k = 0; k < bands - harmonic_band; k++ ) + { + band_pos = k + harmonic_band; + if ( be_tonal[band_pos] > 0.0f ) + { + enrd_r *= (float) sqrt( be_tonal[band_pos] / pow( 2.0f, band_energy[band_pos] ) ); + } + else + { + enrd_r = 0.0f; + } + enrd_r -= step; + if ( p2aflags[band_pos] == 1 ) + { + for ( i = band_start[band_pos]; i <= band_end[band_pos]; i++ ) + { + outBuf[i - fLenLow] = codbuf[i]; + } + } + else + { + pos = 0; + pos += pos_tmp; + for ( j = 0; j < pul_res_pk[k]; j++ ) + { + outBuf[pk_sf[k * 8 + j].gainIndex] = pk_sf[k * 8 + j].nmrValue * band_sf[pos] * enrd_r; + pos++; + } + } + pos_tmp += pul_res_pk[k]; + } + + return; +} + + +/*--------------------------------------------------------------------------* + * return_bits_normal2() + * + * + *--------------------------------------------------------------------------*/ + +void return_bits_normal2( + int16_t *bit_budget, + const int16_t p2a_flags[], + const int16_t bands, + const int16_t bits_lagIndices[] ) +{ + int16_t i; + + for ( i = 0; i < NB_SWB_SUBBANDS; i++ ) + { + if ( p2a_flags[bands - NB_SWB_SUBBANDS + i] == 1 ) + { + *bit_budget += bits_lagIndices[i]; + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * preset_hq2_swb() + * + * + *--------------------------------------------------------------------------*/ + +void preset_hq2_swb( + const int16_t hqswb_clas, + const int16_t band_end[], + int16_t *har_bands, + int16_t p2a_bands, + const int16_t length, + const int16_t bands, + int16_t *lowlength, + int16_t *highlength, + float m[] ) +{ + if ( hqswb_clas == HQ_HARMONIC ) + { + *har_bands = bands - p2a_bands + 1; + *lowlength = band_end[*har_bands - 1] + 1; + } + else + { + *lowlength = band_end[bands - NB_SWB_SUBBANDS - 1] + 1; + } + + *highlength = ( length - *lowlength ); + set_f( m, 0.0f, length ); + + return; +} + + +/*--------------------------------------------------------------------------* + * post_hq2_swb() + * + * + *--------------------------------------------------------------------------*/ + +void post_hq2_swb( + const float m[], + const int16_t lowlength, + const int16_t highlength, + const int16_t hqswb_clas, + const int16_t har_bands, + const int16_t bands, + const int16_t p2a_flags[], + const int16_t band_start[], + const int16_t band_end[], + float y2[], + int16_t npulses[] ) +{ + int16_t i, k; + + /* copy the scratch buffer to the output */ + mvr2r( &m[lowlength], &y2[lowlength], highlength ); + + if ( hqswb_clas == HQ_HARMONIC ) + { + k = har_bands; + } + else + { + k = bands - NB_SWB_SUBBANDS; + } + + for ( ; k < bands; k++ ) + { + if ( p2a_flags[k] == 0 && npulses[k] == 0 ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( y2[i] != 0.0f ) + { + npulses[k]++; + } + } + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * GetSynthesizedSpecThinOut() + * + * Synthesize the spectrum in generic subband coding + *--------------------------------------------------------------------------*/ + +void GetSynthesizedSpecThinOut( + const float *predBuf, /* i : prediction buffer (i.e., lowband) */ + float *outBuf, /* o : synthesized spectrum */ + const int16_t nBands, /* i : number of subbands calculated */ + const int16_t *sbWidth, /* i : subband lengths */ + const int16_t *lagIndices, /* i : lowband index for each subband */ + const float *lagGains, /* i : first gain for each subband */ + const int16_t predBufLen /* i : lowband length */ +) +{ + int16_t sb; + int16_t fLen, lag; + float *ptr_in_outBuf; + + ptr_in_outBuf = outBuf; + + for ( sb = 0; sb < nBands; sb++ ) + { + fLen = sbWidth[sb]; + lag = lagIndices[sb]; + + if ( lag + fLen > predBufLen ) + { + /* should never happen */ + lag = predBufLen - fLen; + } + + GetPredictedSignal( predBuf, outBuf, lag, fLen, lagGains[sb] ); + outBuf += fLen; + } + + outBuf = ptr_in_outBuf; + + return; +} + + +/*--------------------------------------------------------------------------* + * GetlagGains() + * + * + *--------------------------------------------------------------------------*/ + +void GetlagGains( + const float *predBuf, /* i : predictve buffer */ + const float *band_energy, /* i : band Energies */ + const int16_t nBands, /* i : high frequency bands */ + const int16_t *sbWidth, /* i : high frequency band resolution */ + const int16_t *lagIndices, /* i : correlation indices */ + const int16_t predBufLen, /* i : predictive buffer length */ + float *lagGains /* o : lag gains */ +) +{ + int16_t i; + int16_t sb, fLen, lag; + float outBuf[L_FRAME32k]; + float lagEnergy; + + /* Get the gain information for the missing bands*/ + for ( sb = 0; sb < nBands; sb++ ) + { + fLen = sbWidth[sb]; + lag = lagIndices[sb]; + + if ( lag + fLen > predBufLen ) + { + /* should never happen */ + lag = predBufLen - fLen; + } + + GetPredictedSignal( predBuf, outBuf, lag, fLen, 1.0 ); + + lagEnergy = 0.0f; + for ( i = 0; i < fLen; i++ ) + { + lagEnergy += outBuf[i] * outBuf[i]; + } + + if ( lagEnergy != 0.0f ) + { + lagGains[sb] = (float) sqrt( pow( 2.0f, band_energy[sb] ) / lagEnergy ); + } + else + { + lagGains[sb] = (float) sqrt( pow( 2.0f, band_energy[sb] ) / ( lagEnergy + 0.001f ) ); + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * updat_prev_frm() + * + * + *--------------------------------------------------------------------------*/ + +void updat_prev_frm( + float y2[], /* i/o: core coder buffer */ + float t_audio[], /* o : core coder buffer */ + const int32_t bwe_br, /* i : core bitrate */ + const int16_t length, /* i : frame length coded bw */ + const int16_t inner_frame, /* i : input frame length */ + const int16_t bands, /* i : sub band resolution */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t is_transient, /* i : signal class information */ + const int16_t hqswb_clas, /* i : signal class information */ + int16_t *prev_hqswb_clas, /* o : update signal class information */ + int16_t prev_SWB_peak_pos[], /* o : update core coder last coded peaks*/ + int16_t prev_SWB_peak_pos_tmp[], /* o : update core coder last coded peaks*/ + int16_t *prev_frm_hfe2, /* o : update harmonics */ + int16_t *prev_stab_hfe2, /* o : update harmonics */ + const int16_t bws_cnt /* i : band width detector counter */ +) +{ + int16_t i, k, k1, k2, j; + + /* Copy the coded MDCT coefficient to the output buffer */ + if ( !is_transient ) + { + /* Copy the scratch buffer to the output */ + mvr2r( y2, t_audio, length ); + + /* If the input frame is larger than coded bandwidth, zero out uncoded MDCT coefficients */ + if ( inner_frame > length ) + { + set_f( t_audio + length, 0.0f, inner_frame - length ); + } + } + else /* transient frame */ + { + if ( inner_frame == length || bws_cnt > 0 ) + { + /* Copy the scratch buffer to the output */ + mvr2r( y2, t_audio, length ); + } + else + { + /* un-collapse transient frame and interleave zeros */ + for ( i = 0; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) + { + k1 = i * length / NUM_TIME_SWITCHING_BLOCKS; + k2 = i * inner_frame / NUM_TIME_SWITCHING_BLOCKS; + + mvr2r( y2 + k1, t_audio + k2, length / NUM_TIME_SWITCHING_BLOCKS ); + set_f( t_audio + k2 + length / NUM_TIME_SWITCHING_BLOCKS, 0.0f, ( inner_frame - length ) / NUM_TIME_SWITCHING_BLOCKS ); + } + } + } + + /* update */ + if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && bwidth == SWB ) + { + *prev_hqswb_clas = hqswb_clas; + if ( hqswb_clas != HQ_HARMONIC ) + { + *prev_frm_hfe2 = 0; + *prev_stab_hfe2 = 0; + } + } + else + { + *prev_hqswb_clas = is_transient; + } + + if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && bwidth == SWB && hqswb_clas == HQ_NORMAL ) + { + j = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + prev_SWB_peak_pos[j] = prev_SWB_peak_pos_tmp[j]; + j++; + } + } + + return; +} diff --git a/lib_com/swb_tbe_com.c b/lib_com/swb_tbe_com.c new file mode 100644 index 0000000000..4291feaed9 --- /dev/null +++ b/lib_com/swb_tbe_com.c @@ -0,0 +1,2066 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" +#include "ivas_prot.h" +#include + +#define POW_EXC16k_WHTND 1.14e11f /* power of random excitation, length 320 samples, uniform distribution */ +#define THR_ENV_ERROR_PLOSIVE 200.0f /* threshold for envelope error used in plosive detection */ + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void create_random_vector( float output[], const int16_t length, int16_t seed[] ); +static void flip_spectrum( const float input[], float output[], const int16_t length ); +static void Hilbert_transform( float tmp_R[], float tmp_I[], float *tmpi_R, float *tmpi_I, const int16_t length, const int16_t HB_stage_id ); +static void Estimate_mix_factors( const float *shb_res, const float *exc16kWhtnd, const float *White_exc16k, const float pow1, const float pow22, float *vf_modified, int16_t *vf_ind ); + +/*-------------------------------------------------------------------* + * swb_tbe_reset() + * + * Reset the SWB TBE encoder + *-------------------------------------------------------------------*/ + +void swb_tbe_reset( + float mem_csfilt[], + float mem_genSHBexc_filt_down_shb[], + float state_lpc_syn[], + float syn_overlap[], + float state_syn_shbexc[], + float *tbe_demph, + float *tbe_premph, + float mem_stp_swb[], + float *gain_prec_swb ) +{ + set_f( mem_csfilt, 0, 2 ); + set_f( mem_genSHBexc_filt_down_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( state_lpc_syn, 0.0f, LPC_SHB_ORDER ); + set_f( syn_overlap, 0.0f, L_SHB_LAHEAD ); + set_f( state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); + *tbe_demph = 0.0f; + *tbe_premph = 0.0f; + set_f( mem_stp_swb, 0, LPC_SHB_ORDER ); + *gain_prec_swb = 1.0f; + + return; +} + +/*-------------------------------------------------------------------* + * swb_tbe_reset_synth() + * + * Reset the extra parameters needed for synthesis of the SWB TBE output + *-------------------------------------------------------------------*/ + +void swb_tbe_reset_synth( + float genSHBsynth_Hilbert_Mem[], + float genSHBsynth_state_lsyn_filt_shb_local[] ) +{ + set_f( genSHBsynth_Hilbert_Mem, 0.0f, HILBERT_MEM_SIZE ); + set_f( genSHBsynth_state_lsyn_filt_shb_local, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); + + return; +} + +/*-------------------------------------------------------------------* + * tbe_celp_exc_offset() + * + * Compute tbe bwe celp excitation offset + *-------------------------------------------------------------------*/ +int16_t tbe_celp_exc_offset( + const int16_t T0, /* i : Integer pitch */ + const int16_t T0_frac /* i : Fractional part of the pitch */ +) +{ + int16_t offset; + offset = T0 * HIBND_ACB_L_FAC + (int16_t) ( (float) T0_frac * 0.25f * HIBND_ACB_L_FAC + 2 * HIBND_ACB_L_FAC + 0.5f ) - 2 * HIBND_ACB_L_FAC; + + return offset; +} +/*-------------------------------------------------------------------* + * flip_and_downmix_generic() + * + * flips the spectrum and downmixes the signals, lpf if needed + *-------------------------------------------------------------------*/ + +void flip_and_downmix_generic( + float input[], /* i : input spectrum */ + float output[], /* o : output spectrum */ + const int16_t length, /* i : length of spectra */ + float mem1_ext[HILBERT_ORDER1], /* i/o: Hilbert filter memory */ + float mem2_ext[2 * HILBERT_ORDER2], /* i/o: memory */ + float mem3_ext[2 * HILBERT_ORDER2], /* i/o: memory */ + int16_t *phase_state /* i/o: Phase state in case frequency isn't multiple of 50 Hz */ +) +{ + int16_t i, j; + float tmp[L_FRAME32k + HILBERT_ORDER1]; + float tmpi_R[L_FRAME32k]; + float tmpi_I[L_FRAME32k]; + float tmpi2_R[L_FRAME32k + HILBERT_ORDER2]; + float tmpi2_I[L_FRAME32k + HILBERT_ORDER2]; + float tmp_R[L_FRAME32k + HILBERT_ORDER2]; + float tmp_I[L_FRAME32k + HILBERT_ORDER2]; + int16_t k, period; + float recip_period; + float local_negsin_table[L_FRAME16k]; + float local_cos_table[L_FRAME16k]; + + period = 17; /* == (int16_t) (32000.0f / 1850.0f + 0.5f); */ + + recip_period = 256.0f / (float) period; + for ( i = 0; i < period; i++ ) + { + k = (int16_t) ( i * recip_period + 0.5f ); + if ( k <= 64 ) + { + local_negsin_table[i] = -sincos_t[k]; + local_cos_table[i] = sincos_t[64 - k]; + } + else if ( k <= 128 ) + { + local_negsin_table[i] = -sincos_t[128 - k]; + local_cos_table[i] = -sincos_t[k - 64]; + } + else if ( k <= 192 ) + { + local_negsin_table[i] = sincos_t[k - 128]; + local_cos_table[i] = -sincos_t[192 - k]; + } + else + { + local_negsin_table[i] = sincos_t[256 - k]; + local_cos_table[i] = sincos_t[k - 192]; + } + } + + for ( i = 0; i < length; i = i + 2 ) + { + input[i] = -input[i]; + } + + mvr2r( input, tmp + HILBERT_ORDER1, length ); + + mvr2r( mem1_ext, tmp, HILBERT_ORDER1 ); + + /* Hilber transform stage - 0 */ + Hilbert_transform( tmp, tmp, tmpi_R, tmpi_I, length, 0 ); + + mvr2r( mem2_ext, tmpi2_R, HILBERT_ORDER2 ); + mvr2r( mem3_ext, tmpi2_I, HILBERT_ORDER2 ); + + /* Hilber transform stage - 1 */ + Hilbert_transform( tmpi_R, tmpi_I, tmpi2_R, tmpi2_I, length, 1 ); + + mvr2r( tmp + length, mem1_ext, HILBERT_ORDER1 ); + mvr2r( mem2_ext + HILBERT_ORDER2, tmp_R, HILBERT_ORDER2 ); + mvr2r( mem3_ext + HILBERT_ORDER2, tmp_I, HILBERT_ORDER2 ); + + /* Hilber transform stage - 2 */ + Hilbert_transform( tmpi2_R, tmpi2_I, tmpi_R, tmpi_I, length, 2 ); + + mvr2r( tmpi2_R + length, mem2_ext, HILBERT_ORDER2 ); + mvr2r( tmpi2_I + length, mem3_ext, HILBERT_ORDER2 ); + + /* Hilber transform stage - 3 */ + Hilbert_transform( tmpi_R, tmpi_I, tmp_R, tmp_I, length, 3 ); + + mvr2r( tmp_R + length, mem2_ext + HILBERT_ORDER2, HILBERT_ORDER2 ); + mvr2r( tmp_I + length, mem3_ext + HILBERT_ORDER2, HILBERT_ORDER2 ); + + if ( *phase_state >= period ) + { + *phase_state = 0; + } + + for ( i = 0, j = *phase_state; i < length; ) + { + for ( ; ( j < period ) && ( i < length ); j++, i++ ) + { + output[i] = tmp_R[i + HILBERT_ORDER2] * local_cos_table[j] + tmp_I[i + HILBERT_ORDER2] * local_negsin_table[j]; + } + + if ( j >= period ) + { + j = 0; + } + } + + *phase_state = j; + + return; +} + +/*---------------------------------------------- + * Hilbert_transform() + * + * Hilbert transform + *------------------------------------------------*/ + +static void Hilbert_transform( + float tmp_R[], /* i : Real component of HB */ + float tmp_I[], /* i : Real component of HB */ + float tmpi_R[], /* o : Real component of HB */ + float tmpi_I[], /* o : Imag. component of HB */ + const int16_t length, /* i : input length */ + const int16_t HB_stage_id /* i : HB transform stage */ +) +{ + int16_t i, hb_filter_stage, offset; + + hb_filter_stage = 2 * HB_stage_id; + offset = ( HB_stage_id == 0 ) ? 1 : 0; + + if ( HB_stage_id == 0 || HB_stage_id == 2 ) + { + for ( i = 0; i < length; i++ ) + { + tmpi_R[i] = tmp_R[i + 4] * Hilbert_coeffs[hb_filter_stage][0 + offset] + tmp_R[i + 2] * Hilbert_coeffs[hb_filter_stage][2 + offset] + tmp_R[i] * Hilbert_coeffs[hb_filter_stage][4 + offset]; + + tmpi_I[i] = tmp_I[i + 4 + offset] * Hilbert_coeffs[hb_filter_stage + 1][0] + tmp_I[i + 2 + offset] * Hilbert_coeffs[hb_filter_stage + 1][2] + tmp_I[i + offset] * Hilbert_coeffs[hb_filter_stage + 1][4]; + } + } + else if ( HB_stage_id == 1 || HB_stage_id == 3 ) + { + for ( i = 0; i < length; i++ ) + { + tmpi_R[i + 4] = tmp_R[i] - tmpi_R[i + 2] * Hilbert_coeffs[hb_filter_stage][2] - tmpi_R[i] * Hilbert_coeffs[hb_filter_stage][4]; + + tmpi_I[i + 4] = tmp_I[i] - tmpi_I[i + 2] * Hilbert_coeffs[hb_filter_stage + 1][2] - tmpi_I[i] * Hilbert_coeffs[hb_filter_stage + 1][4]; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * flip_spectrum() + * + * + *-------------------------------------------------------------------*/ + +void flip_spectrum( + const float input[], /* i : input spectrum */ + float output[], /* o : output spectrum */ + const int16_t length /* i : vector length */ +) +{ + int16_t i; + + for ( i = 0; i < length; i = i + 2 ) + { + output[i] = -input[i]; + output[i + 1] = input[i + 1]; + } + + return; +} + +/*-------------------------------------------------------------------* + * flip_spectrum_and_decimby4() + * + * + *-------------------------------------------------------------------*/ + +void flip_spectrum_and_decimby4( + const float input[], /* i : input spectrum */ + float output[], /* o : output spectrum */ + const int16_t length, /* i : vector length */ + float mem1[], /* i/o: memory */ + float mem2[], /* i/o: memory */ + const int16_t ramp_flag /* i : flag to trigger slow ramp-up of output following change of core (HQ to ACELP or 12k8 to 16k ACELP) */ +) +{ + int16_t i; + float factor, tmp[L_FRAME16k / 2]; + float input_change[L_FRAME16k]; + + if ( ramp_flag ) + { + factor = 4.0f / length; + for ( i = 0; i < length / 4; i = i + 2 ) + { + input_change[i] = -input[i] * ( i * factor ); + input_change[i + 1] = input[i + 1] * ( ( i + 1.0f ) * factor ); + } + } + else + { + i = 0; + } + + for ( ; i < length; i = i + 2 ) + { + input_change[i] = -input[i]; + input_change[i + 1] = input[i + 1]; + } + + Decimate_allpass_steep( input_change, mem1, length, tmp ); + Decimate_allpass_steep( tmp, mem2, length / 2, output ); + + return; +} + +/*-------------------------------------------------------------------* + * GenShapedWBExcitation() + * + * Synthesize spectrally shaped highband excitation signal for the wideband + *-------------------------------------------------------------------*/ + +void GenShapedWBExcitation( + float *excSHB, /* o : synthesized shaped shb exctiation */ + const float *lpc_shb, /* i : lpc coefficients */ + float *exc4kWhtnd, /* o : whitened synthesized shb excitation */ + float *mem_csfilt, /* i/o: memory */ + float *mem_genSHBexc_filt_down1, /* i/o: memory */ + float *mem_genSHBexc_filt_down2, /* i/o: memory */ + float *mem_genSHBexc_filt_down3, /* i/o: memory */ + float *state_lpc_syn, /* i/o: memory */ + const int16_t coder_type, /* i : coding type */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + int16_t bwe_seed[], /* i/o: random number generator seed */ + const float voice_factors[], /* i : voicing factor */ + const int16_t uv_flag, /* i : unvoiced flag */ + const int16_t igf_flag ) +{ + int16_t i, j, k; + float wht_fil_mem[LPC_WHTN_ORDER_WB]; + float lpc_whtn[LPC_WHTN_ORDER_WB + 1]; + float R[LPC_WHTN_ORDER_WB + 2]; + float excTmp[L_FRAME16k]; + float excTmp2[L_FRAME16k / 4]; + float exc4k[L_FRAME16k / 4]; + float pow1, pow22, scale; + float excNoisyEnv[L_FRAME16k / 4]; + float csfilt_num2[1] = { 0.05f }; + float csfilt_den2[2] = { 1.0f, -0.96f }; + float temp1, temp2; + float ervec[LPC_WHTN_ORDER_WB + 2]; + float tmp_vfac; + float avg_voice_fac = 0.25f * sum_f( voice_factors, NB_SUBFR ); + + if ( igf_flag && ( coder_type == VOICED || avg_voice_fac > 0.35f ) ) + { + csfilt_num2[0] = 0.2f; + csfilt_den2[1] = -0.8f; + } + else if ( igf_flag && ( coder_type == UNVOICED || avg_voice_fac < 0.2f ) ) + { + csfilt_num2[0] = 0.01f; + csfilt_den2[1] = -0.99f; + } + set_f( wht_fil_mem, 0, LPC_WHTN_ORDER_WB ); + + Decimate_allpass_steep( bwe_exc_extended, mem_genSHBexc_filt_down1, L_FRAME32k, excTmp ); + + flip_spectrum_and_decimby4( excTmp, exc4k, L_FRAME16k, mem_genSHBexc_filt_down2, mem_genSHBexc_filt_down3, 0 ); + + if ( uv_flag ) + { + /* unvoiced signal */ + create_random_vector( exc4kWhtnd, L_FRAME16k / 4, bwe_seed ); + } + else + { + autocorr( exc4k, R, LPC_WHTN_ORDER_WB + 1, L_FRAME16k / 4, win_flatten_4k, 0, 1, 1 ); + + /* Ensure R[0] isn't zero when entering Levinson Durbin */ + R[0] = max( R[0], 1.0e-8f ); + for ( i = 0; i <= LPC_WHTN_ORDER_WB; i++ ) + { + R[i] = R[i] * wac[i]; + } + lev_dur( lpc_whtn, R, LPC_WHTN_ORDER_WB, ervec ); + + fir( exc4k, lpc_whtn, exc4kWhtnd, wht_fil_mem, L_FRAME16k / 4, LPC_WHTN_ORDER_WB, 0 ); + + /* Ensure pow1 is greater than zero when computing normalization */ + for ( i = 0, pow1 = 0.00001f; i < L_FRAME16k / 4; i++ ) + { + excTmp2[i] = (float) ( fabs( exc4kWhtnd[i] ) ); + pow1 += exc4kWhtnd[i] * exc4kWhtnd[i]; + } + + for ( i = 0; i < L_FRAME16k / 4; i++ ) + { + excNoisyEnv[i] = *mem_csfilt + csfilt_num2[0] * excTmp2[i]; + *mem_csfilt = -csfilt_den2[1] * excNoisyEnv[i]; + } + + create_random_vector( exc4k, L_FRAME16k / 4, bwe_seed ); + + /* Ensure pow22 is greater than zero when computing normalization */ + for ( i = 0, pow22 = 0.00001f; i < L_FRAME16k / 4; i++ ) + { + exc4k[i] *= excNoisyEnv[i]; + pow22 += exc4k[i] * exc4k[i]; + } + + if ( coder_type == UNVOICED || ( igf_flag && avg_voice_fac < 0.2f ) ) + { + scale = (float) sqrt( pow1 / pow22 ); + if ( pow22 == 0.f ) + { + scale = 0; + } + + for ( i = 0; i < L_FRAME16k / 4; i++ ) + { + exc4kWhtnd[i] = exc4k[i] * scale; + } + } + else + { + for ( i = 0, k = 0; i < 4; i++ ) + { + + if ( igf_flag && coder_type == VOICED ) + { + tmp_vfac = 2 * voice_factors[i]; + tmp_vfac = min( 1, tmp_vfac ); + } + else + { + tmp_vfac = voice_factors[i]; + } + + temp1 = root_a( tmp_vfac ); + temp2 = root_a_over_b( pow1 * ( 1.0f - tmp_vfac ), pow22 ); + + + for ( j = 0; j < L_FRAME16k / 16; j++, k++ ) + { + exc4kWhtnd[k] = temp1 * exc4kWhtnd[k] + temp2 * exc4k[k]; + } + } + } + } + + syn_filt( lpc_shb, LPC_SHB_ORDER_WB, exc4kWhtnd, excSHB, L_FRAME16k / 4, state_lpc_syn, 1 ); + + return; +} + +/*-------------------------------------------------------------------* + * GenWBSynth() + * + * Generate 16 KHz sampled highband component from synthesized highband + *-------------------------------------------------------------------*/ + +void GenWBSynth( + const float *input_synspeech, /* i : input synthesized speech */ + float *shb_syn_speech_16k, /* o : output highband compnent */ + float *state_lsyn_filt_shb1, /* i/o: memory */ + float *state_lsyn_filt_shb2 /* i/o: memory */ +) +{ + float speech_buf_16k1[L_FRAME16k], speech_buf_16k2[L_FRAME16k]; + + Interpolate_allpass_steep( input_synspeech, state_lsyn_filt_shb1, L_FRAME16k / 4, speech_buf_16k1 ); + + Interpolate_allpass_steep( speech_buf_16k1, state_lsyn_filt_shb2, L_FRAME16k / 2, speech_buf_16k2 ); + + flip_spectrum( speech_buf_16k2, shb_syn_speech_16k, L_FRAME16k ); + + return; +} + +/*-------------------------------------------------------------------* + * PostShortTerm() + * + * Short term processing + *-------------------------------------------------------------------*/ + +void PostShortTerm( + float *sig_in, /* i : input signal (pointer to current subframe */ + float *lpccoeff, /* i : LPC coefficients for current subframe */ + float *sig_out, /* o : postfiltered output */ + float *mem_stp, /* i/o: postfilter memory*/ + float *ptr_mem_stp, /* i/o: pointer to postfilter memory*/ + float *ptr_gain_prec, /* i/o: for gain adjustment*/ + float *mem_zero, /* i/o: null memory to compute h_st*/ + const float formant_fac /* i : Strength of post-filter [0,1] */ +) +{ + float apond1[LPC_SHB_ORDER + 1]; /* denominator coeff.*/ + float apond2[LONG_H_ST]; /* numerator coeff. */ + float sig_ltp[L_SUBFR16k + 1]; /* residual signal */ + float parcor0; + float g1, g2; + + set_f( apond1, 0, LPC_SHB_ORDER + 1 ); + set_f( apond2, 0, LONG_H_ST ); + set_f( sig_ltp, 0, L_SUBFR16k + 1 ); + + /* Obtain post-filter weights */ + g1 = GAMMA0 + GAMMA_SHARP * formant_fac; + g2 = GAMMA0 - GAMMA_SHARP * formant_fac; + + /* Compute weighted LPC coefficients */ + weight_a( lpccoeff, apond1, g1, LPC_SHB_ORDER ); + weight_a( lpccoeff, apond2, g2, LPC_SHB_ORDER ); + + /* Compute A(gamma2) residual */ + residu( apond2, LPC_SHB_ORDER, sig_in, sig_ltp + 1, L_SUBFR16k ); + + /* Save last output of 1/A(gamma1) */ + sig_ltp[0] = *ptr_mem_stp; + + /* Control short term pst filter gain and compute parcor0 */ + calc_st_filt( apond2, apond1, &parcor0, sig_ltp + 1, mem_zero, L_SUBFR16k, SWB_TBE ); + + /* 1/A(gamma1) filtering, mem_stp is updated */ + syn_filt( apond1, LPC_SHB_ORDER, sig_ltp + 1, sig_ltp + 1, L_SUBFR16k, mem_stp, 1 ); + + /* (1 + mu z-1) tilt filtering */ + filt_mu( sig_ltp, sig_out, parcor0, L_SUBFR16k, SWB_TBE ); + + /* gain control */ + scale_st( sig_in, sig_out, ptr_gain_prec, L_SUBFR16k, SWB_TBE ); + + return; +} + +/*-------------------------------------------------------------------* + * swb_formant_fac() + * + * Find strength of adaptive formant postfilter using tilt of the high + * band. The 2nd lpc coefficient is used as a tilt approximation. + *-------------------------------------------------------------------*/ + +/*! r: Formant filter strength [0,1] */ +float swb_formant_fac( + const float lpc_shb2, /* i : 2nd HB LPC coefficient */ + float *tilt_mem /* i/o: Tilt smoothing memory */ +) +{ + float formant_fac; + float tmp; + + /* Smoothen tilt value */ + tmp = 0.5f * (float) fabs( lpc_shb2 ) + 0.5f * *tilt_mem; + *tilt_mem = tmp; + + /* Map to PF strength */ + formant_fac = ( tmp - SWB_TILT_LOW ) * SWB_TILT_DELTA; + if ( formant_fac > 1.0f ) + { + formant_fac = 1.0f; + } + else if ( formant_fac < 0.0f ) + { + formant_fac = 0.0f; + } + + formant_fac = 1.0f - 0.5f * formant_fac; + + return formant_fac; +} + +void find_td_envelope( + const float inp[], /* i : input signal */ + const int16_t len, /* i : length of the input signal */ + const int16_t len_h, /* i : length of the MA filter */ + float mem_h[], /* i/o: memory of the MA filter, length len_h/2 */ + float out[] /* o : td envelope of the input signal */ +) +{ + int16_t k, K; + float buf_in[L_FRAME16k + MAX_LEN_MA_FILTER], *p_in, *p_out, *p_prev, w; + + assert( len > 0 && len <= L_FRAME16k ); + + K = (int16_t) ( len_h / 2 ); /* length of FIR filter memory = half of the total filter length */ + w = 1.0f / len_h; /* MA filtering coefficient */ + + /* copy filter memory to the input buffer */ + if ( mem_h != NULL ) + { + mvr2r( mem_h, buf_in, K ); + } + else + { + /* no memory available, use the first len_h/2 samples as memory */ + p_in = buf_in; + for ( k = 0; k < K; k++ ) + { + *p_in++ = (float) fabs( inp[k] ) * w; + } + } + + /* take the absolute value of the input signal and copy it to the input buffer */ + /* multiply each value by 1 / filter length */ + p_in = &buf_in[K]; + for ( k = 0; k < len; k++ ) + { + *p_in++ = (float) fabs( inp[k] ) * w; + } + + /* update filter memory from the end of the input buffer */ + if ( mem_h != NULL ) + { + mvr2r( &buf_in[len], mem_h, K ); + } + + /* do MA filtering */ + out[0] = sum_f( buf_in, len_h ); + p_out = &buf_in[0]; /* pointer to leaving sample */ + p_in = &buf_in[len_h]; /* pointer to entering sample*/ + for ( k = 1; k < len - K; k++ ) + { + out[k] = out[k - 1] - *p_out++ + *p_in++; + } + + /* use IIR filtering to extrapolate the last K samples */ + p_in = &buf_in[len - K]; + p_out = &out[len - K]; + p_prev = p_out - 1; + for ( k = 0; k < K; k++ ) + { + *p_out++ = 0.05f * ( *p_in++ ) + 0.95f * ( *p_prev++ ); + } + + return; +} + +/*-------------------------------------------------------------------* + * GenShapedSHBExcitation() + * + * Synthesize spectrally shaped highband excitation signal + *-------------------------------------------------------------------*/ + +void GenShapedSHBExcitation( + float *excSHB, /* o : synthesized shaped shb excitation */ + const float *lpc_shb, /* i : lpc coefficients */ + float *White_exc16k_FB, /* o : white excitation for the Fullband extension */ + float *mem_csfilt, /* i/o: memory */ + float *mem_genSHBexc_filt_down_shb, /* i/o: memory */ + float *state_lpc_syn, /* i/o: memory */ + const int16_t coder_type, /* i : coding type */ + const float *bwe_exc_extended, /* i : bandwidth extended excitation */ + int16_t bwe_seed[], /* i/o: random number generator seed */ + float voice_factors[], /* i : voicing factor */ + const int16_t extl, /* i : extension layer */ + float *tbe_demph, /* i/o: de-emphasis memory */ + float *tbe_premph, /* i/o: pre-emphasis memory */ + float *lpc_shb_sf, /* i : LP coefficients */ + float *shb_ener_sf, + float *shb_res_gshape, + float *shb_res, + int16_t *vf_ind, + const float formant_fac, /* i : Formant sharpening factor [0..1] */ + float fb_state_lpc_syn[], /* i/o: memory */ + float *fb_tbe_demph, /* i/o: fb de-emphasis memory */ + const int32_t total_brate, /* i : bitrate */ + const int16_t prev_bfi, /* i : previous frame was concealed */ + const int16_t element_mode, /* i : element mode */ + const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ + float *nlExc16k, /* i/o: NL exc for IC-BWE */ + float *mixExc16k, /* i/o: exc spreading for IC-BWE */ + const int32_t extl_brate, /* i : extension layer bitarte */ + const int16_t MSFlag, /* i : Multi Source flag */ + float EnvSHBres_4k[], /* i/o: TD envelope of the SHB residual signal */ + float *prev_pow_exc16kWhtnd, /* i/o: power of the LB excitation signal in the previous frame */ + float *prev_mix_factor, /* i/o: mixing factor in the previous frame */ + float *Env_error, /* o : error in SHB residual envelope modelling*/ + float Env_error_part[] /* o : per-segment error in SHB residual envelope modelling */ +) +{ + int16_t i, j, k; + float wht_fil_mem[LPC_WHTN_ORDER]; + float lpc_whtn[LPC_WHTN_ORDER + 1]; + float R[LPC_WHTN_ORDER + 2]; + float exc32k[L_FRAME32k], exc16k[L_FRAME16k]; + float pow1, pow22, scale, temp1, temp2; + float excTmp2[L_FRAME16k]; + int16_t nbSubFr; + float excNoisyEnv[L_FRAME16k]; + float csfilt_num2[1] = { 0.2f }; + float csfilt_den2[2] = { 1.0f, -0.8f }; + float varEnvShape; + float ervec[LPC_WHTN_ORDER + 2]; + float exc16kWhtnd[L_FRAME16k]; + float temp = 0.0f; + float *White_exc16k; + float voiceFacEst[NB_SUBFR16k]; + float syn_shb_ener_sf[4], tempSHB[80]; + float zero_mem[LPC_SHB_ORDER]; + float vf_tmp; + float White_exc16k_FB_temp[L_FRAME16k]; + float fb_deemph_fac = 0.48f; + double tempD; + float alpha, step, mem_csfilt_left, mem_csfilt_right, excNoisyEnvLeft[L_FRAME16k], excNoisyEnvRight[L_FRAME16k]; + int16_t cbsize; + float mix_factor, old_fact, new_fact, fact, old_scale, new_scale, step_scale; + float c0, c1, c2, c3, c4, c5, g1, g2, g, den; + float EnvWhiteExc16k[L_FRAME16k], EnvExc16kWhtnd[L_FRAME16k]; + float EnvWhiteExc16k_4k[L_FRAME4k] = { 0 }, EnvExc16kWhtnd_4k[L_FRAME4k] = { 0 }; + int16_t flag_plosive; + float delta; + float c0_part[NUM_SHB_SUBGAINS], c1_part[NUM_SHB_SUBGAINS], c2_part[NUM_SHB_SUBGAINS], c3_part[NUM_SHB_SUBGAINS], c4_part[NUM_SHB_SUBGAINS], c5_part[NUM_SHB_SUBGAINS]; + + mix_factor = 0.0f; + + set_f( zero_mem, 0, LPC_SHB_ORDER ); + set_f( wht_fil_mem, 0, LPC_WHTN_ORDER ); + + /* Mirror the spectrum */ + for ( i = 0; i < L_FRAME32k; i++ ) + { + exc32k[i] = ( ( i % 2 ) == 0 ) ? ( -bwe_exc_extended[i] ) : ( bwe_exc_extended[i] ); + } + + /* Decimate by 2 */ + Decimate_allpass_steep( exc32k, mem_genSHBexc_filt_down_shb, 2 * L_FRAME16k, exc16k ); + + + autocorr( exc16k, R, LPC_WHTN_ORDER + 1, L_FRAME16k, win_flatten, 0, 1, 1 ); + + /* Ensure R[0] isn't zero when entering Levinson-Durbin */ + R[0] = max( R[0], 1.0e-8f ); + for ( i = 0; i <= LPC_WHTN_ORDER; i++ ) + { + R[i] = R[i] * wac[i]; + } + + /* Ensure R[0] isn't zero when entering Levinson-Durbin */ + R[0] += 1.0e-8f; + + lev_dur( lpc_whtn, R, LPC_WHTN_ORDER, ervec ); + + fir( exc16k, lpc_whtn, exc16kWhtnd, wht_fil_mem, L_FRAME16k, LPC_WHTN_ORDER, 0 ); + + if ( extl_brate >= SWB_TBE_2k8 ) + { + for ( i = 0; i < L_FRAME16k; i++ ) + { + exc16kWhtnd[i] *= shb_res_gshape[(int16_t) ( i / 80 )]; + } + } + + for ( k = 0, pow1 = 0.00001f; k < L_FRAME16k; k++ ) + { + excTmp2[k] = (float) ( fabs( exc16kWhtnd[k] ) ); + pow1 += exc16kWhtnd[k] * exc16kWhtnd[k]; + } + + if ( !flag_ACELP16k ) + { + varEnvShape = mean( voice_factors, NB_SUBFR ); + } + else + { + varEnvShape = mean( voice_factors, NB_SUBFR16k ); + } + + if ( extl == FB_TBE ) + { + fb_deemph_fac = max( ( 0.68f - (float) pow( varEnvShape, 3 ) ), 0.48f ); + } + + varEnvShape = 1.09875f - 0.49875f * varEnvShape; + varEnvShape = min( max( varEnvShape, 0.6f ), 0.999f ); + csfilt_num2[0] = 1.0f - varEnvShape; + csfilt_den2[1] = -varEnvShape; + + if ( element_mode == EVS_MONO && *mem_csfilt == 0 && ( total_brate == ACELP_9k60 || total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) ) + { + /* pre-init smoothing avoid energy drop outs */ + float tmp_scale = 0; + for ( i = 0; i < L_SUBFR16k / 4; i++ ) + { + tmp_scale += excTmp2[i]; + } + + /* don't apply for FB in case the FB start-frame was potentially lost - White_exc16k is very sensitive to enery mismatch between enc - dec */ + /* rather stick to the more conservative approach, to avoid potential clippings */ + if ( !( prev_bfi && extl == FB_TBE ) ) + { + /* use weak smoothing for 1st frame after switching to make filter recover more quickly */ + varEnvShape = 0.8f; + csfilt_num2[0] = 1.0f - varEnvShape; + csfilt_den2[1] = -varEnvShape; + } + *mem_csfilt = varEnvShape * ( tmp_scale / ( L_SUBFR16k / 4 ) ); + } + + if ( MSFlag > 0 ) + { + varEnvShape = 0.995f; + csfilt_num2[0] = 1.0f - varEnvShape; + csfilt_den2[1] = -varEnvShape; + } + + White_exc16k = exc16k; + + /* Track the low band envelope */ + if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) + { + if ( extl_brate != SWB_TBE_1k10 && extl_brate != SWB_TBE_1k75 ) + { + mem_csfilt_left = 0.0f; + mem_csfilt_right = 0.0f; + for ( k = 0; k < L_FRAME16k; k++ ) + { + excNoisyEnvLeft[k] = mem_csfilt_left + csfilt_num2[0] * excTmp2[k]; + mem_csfilt_left = -csfilt_den2[1] * excNoisyEnvLeft[k]; + excNoisyEnvRight[L_FRAME16k - k - 1] = mem_csfilt_right + csfilt_num2[0] * excTmp2[L_FRAME16k - k - 1]; + mem_csfilt_right = -csfilt_den2[1] * excNoisyEnvRight[L_FRAME16k - k - 1]; + } + + alpha = 0.0f; + step = 1.0f / L_FRAME16k; + for ( k = 0; k < L_FRAME16k; k++ ) + { + excNoisyEnv[k] = alpha * excNoisyEnvLeft[k] + ( 1 - alpha ) * excNoisyEnvRight[k]; + alpha += step; + } + } + } + else + { + for ( k = 0; k < L_FRAME16k; k++ ) + { + excNoisyEnv[k] = *mem_csfilt + csfilt_num2[0] * excTmp2[k]; + *mem_csfilt = -csfilt_den2[1] * excNoisyEnv[k]; + } + } + + if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) + { + /* generate gaussian (white) excitation */ + for ( k = 0; k < L_FRAME16k; k++ ) + { + White_exc16k[k] = (float) own_random( &bwe_seed[0] ); + } + + /* normalize the amplitude of the gaussian excitation to that of the LB exc. */ + pow22 = POW_EXC16k_WHTND; + v_multc( White_exc16k, (float) sqrt( pow1 / pow22 ), White_exc16k, L_FRAME16k ); + } + else + { + create_random_vector( White_exc16k, L_FRAME, bwe_seed ); + create_random_vector( White_exc16k + L_FRAME, L_FRAME16k - L_FRAME, bwe_seed ); + + for ( k = 0, pow22 = 0.00001f; k < L_FRAME16k; k++ ) + { + White_exc16k[k] *= excNoisyEnv[k]; + pow22 += White_exc16k[k] * White_exc16k[k]; + } + } + + flag_plosive = 0; + + if ( extl_brate >= SWB_TBE_2k8 || extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) + { + if ( *vf_ind == 20 ) /* encoder side */ + { + if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) + { + /* calculate TD envelopes of exc16kWhtnd and White_exc16k */ + find_td_envelope( White_exc16k, L_FRAME16k, 20, NULL, EnvWhiteExc16k ); + find_td_envelope( exc16kWhtnd, L_FRAME16k, 20, NULL, EnvExc16kWhtnd ); + + for ( k = 0; k < L_FRAME4k; k++ ) + { + EnvWhiteExc16k_4k[k] = EnvWhiteExc16k[4 * k]; + EnvExc16kWhtnd_4k[k] = EnvExc16kWhtnd[4 * k]; + } + + /* calculate the optimal mix factor */ + c0 = c1 = c2 = c3 = c4 = c5 = 0.0f; + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + c0_part[i] = sum2_f( &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); + c1_part[i] = -2.0f * dotp( &EnvSHBres_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); + c2_part[i] = sum2_f( &EnvWhiteExc16k_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); + c3_part[i] = -2.0f * dotp( &EnvSHBres_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], &EnvWhiteExc16k_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); + c4_part[i] = 2.0f * dotp( &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], &EnvWhiteExc16k_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); + c5_part[i] = sum2_f( &EnvSHBres_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); + + c0 += c0_part[i]; + c1 += c1_part[i]; + c2 += c2_part[i]; + c3 += c3_part[i]; + c4 += c4_part[i]; + c5 += c5_part[i]; + } + + den = 4.0f * c0 * c2 - c4 * c4; + g1 = ( c3 * c4 - 2 * c1 * c2 ) / den; + g2 = ( c1 * c4 - 2 * c0 * c3 ) / den; + + *Env_error = 0.0f; + flag_plosive = 0; + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + Env_error_part[i] = c5_part[i] + g1 * g1 * c0_part[i] + g1 * c1_part[i] + g2 * g2 * c2_part[i] + g2 * c3_part[i] + g1 * g2 * c4_part[i]; + *Env_error += Env_error_part[i]; + + if ( Env_error_part[i] > THR_ENV_ERROR_PLOSIVE ) + { + /* envelope error is too high -> likely a plosive */ + flag_plosive = 1; + } + } + + if ( flag_plosive ) + { + /* plosive detected -> set the mixing factor to 0 */ + *vf_ind = 0; + mix_factor = 0.0f; + } + else + { + /* normalize gain */ + g = g2 / ( g1 + g2 ); + + /* quantization of the mixing factor */ + cbsize = 1 << NUM_BITS_SHB_VF; + delta = 1.0f / ( cbsize - 1 ); + if ( g > 1.0f ) + { + g = 1.0f; + } + else if ( g < delta ) + { + /* prevent low gains to be quantized to 0 as this is reserved for plosives */ + g = delta; + } + + *vf_ind = usquant( g, &mix_factor, 0.0f, 1.0f / ( cbsize - 1 ), cbsize ); + } + } + else + { + Estimate_mix_factors( shb_res, exc16kWhtnd, White_exc16k, pow1, pow22, voiceFacEst, vf_ind ); + temp = ( voiceFacEst[0] > 0.7f ) ? 1.0f : 0.8f; + } + } + else /* decoder side */ + { + if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) + { + if ( *vf_ind == 0 ) + { + mix_factor = 0.0f; + flag_plosive = 1; + } + else + { + mix_factor = usdequant( *vf_ind, 0.0f, 1.0f / ( ( 1 << NUM_BITS_SHB_VF ) - 1 ) ); + } + } + else + { + temp = ( ( *vf_ind * 0.125f ) > 0.7f ) ? 1.0f : 0.8f; + } + } + + if ( extl_brate != SWB_TBE_1k10 && extl_brate != SWB_TBE_1k75 ) + { + for ( i = 0; i < NB_SUBFR16k; i++ ) + { + voice_factors[i] *= temp; + } + } + } + + if ( element_mode >= IVAS_CPE_DFT && nlExc16k != NULL ) + { + /* save buffers for IC-BWE */ + mvr2r( exc16kWhtnd, nlExc16k, L_FRAME16k ); + v_multc( White_exc16k, (float) sqrt( pow1 / pow22 ), mixExc16k, L_FRAME16k ); + } + + mvr2r( White_exc16k, White_exc16k_FB, L_FRAME16k ); + deemph( White_exc16k, PREEMPH_FAC, L_FRAME16k, tbe_demph ); + + if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) + { + if ( !flag_plosive ) /* use only LB excitation in case of plosives */ + { + /* re-scale gaussian excitation at the beginning to gradually move from old energy to new energy */ + old_scale = (float) sqrt( *prev_pow_exc16kWhtnd / pow1 ); + new_scale = 1.0f; + step_scale = ( new_scale - old_scale ) / ( L_FRAME16k / 2 ); + scale = old_scale; + + /* interpolate between the old and the new value of the mixing factor */ + old_fact = *prev_mix_factor; + new_fact = mix_factor; + step = ( new_fact - old_fact ) / ( L_FRAME16k / 2 ); + fact = old_fact; + + /* mixing of LB and gaussian excitation in the first half of the frame */ + for ( k = 0; k < L_FRAME16k / 2; k++ ) + { + exc16kWhtnd[k] = (float) fact * ( White_exc16k[k] * scale ) + (float) ( 1 - fact ) * exc16kWhtnd[k]; + fact += step; + scale += step_scale; + } + + /* mixing of LB and gaussian excitation in the second half of the frame */ + for ( ; k < L_FRAME16k; k++ ) + { + exc16kWhtnd[k] = (float) new_fact * White_exc16k[k] + (float) ( 1 - new_fact ) * exc16kWhtnd[k]; + } + } + preemph( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); + } + else + { + if ( coder_type == UNVOICED || MSFlag == 1 ) + { + scale = (float) sqrt( pow1 / pow22 ); + if ( pow22 == 0.f ) + { + scale = 0; + } + for ( k = 0; k < L_FRAME16k; k++ ) + { + exc16kWhtnd[k] = White_exc16k[k] * scale; + } + + preemph( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); + } + else + { + nbSubFr = ( extl_brate < SWB_TBE_2k8 ) ? NB_SUBFR : NB_SUBFR16k; /* note: this condition is designed based on TBE bitrate rather than internal sampling rate */ + + for ( i = 0, k = 0; i < nbSubFr; i++ ) + { + if ( coder_type == VOICED && extl_brate < SWB_TBE_2k8 ) + { + temp = (float) sqrt( voice_factors[i] ); + temp1 = (float) sqrt( temp ); + temp2 = (float) sqrt( ( pow1 * ( 1.0f - temp ) ) / pow22 ); + if ( pow22 == 0.f ) + { + temp2 = 0; + } + } + else + { + /* Adjust noise mixing for formant sharpening filter */ + vf_tmp = SWB_NOISE_MIX_FAC * formant_fac; + vf_tmp = voice_factors[i] * ( 1.0f - vf_tmp ); + + temp1 = (float) sqrt( vf_tmp ); + temp2 = (float) sqrt( ( pow1 * ( 1.0f - vf_tmp ) ) / pow22 ); + if ( pow22 == 0.f ) + { + temp2 = 0; + } + } + + for ( j = 0; j < L_FRAME16k / nbSubFr; j++, k++ ) + { + exc16kWhtnd[k] = temp1 * exc16kWhtnd[k] + temp2 * White_exc16k[k]; + } + + temp = (float) sqrt( 1.0f - voice_factors[i] ); + temp = PREEMPH_FAC * temp / ( temp1 + temp ); + + preemph( &exc16kWhtnd[i * L_FRAME16k / nbSubFr], temp, L_FRAME16k / nbSubFr, tbe_premph ); + } + } + } + + if ( extl_brate < SWB_TBE_2k8 ) + { + syn_filt( lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 ); + } + else + { + set_f( zero_mem, 0, LPC_SHB_ORDER ); + syn_filt( lpc_shb_sf, LPC_SHB_ORDER, exc16kWhtnd, tempSHB, 80, zero_mem, 1 ); + syn_shb_ener_sf[0] = 0.125f * sum2_f( tempSHB, 80 ); + syn_filt( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 80, tempSHB, 80, zero_mem, 1 ); + syn_shb_ener_sf[1] = 0.125f * sum2_f( tempSHB, 80 ); + syn_filt( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 160, tempSHB, 80, zero_mem, 1 ); + syn_shb_ener_sf[2] = 0.125f * sum2_f( tempSHB, 80 ); + syn_filt( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 240, tempSHB, 80, zero_mem, 1 ); + syn_shb_ener_sf[3] = 0.125f * sum2_f( tempSHB, 80 ); + + if ( total_brate <= MAX_ACELP_BRATE ) + { + tempSHB[0] = (float) ( shb_ener_sf[0] ) / ( syn_shb_ener_sf[0] + syn_shb_ener_sf[1] + syn_shb_ener_sf[2] + syn_shb_ener_sf[3] ); + tempD = sqrt( tempSHB[0] ); + + for ( i = 0; i < L_FRAME16k; i++ ) + { + exc16kWhtnd[i] = (float) ( exc16kWhtnd[i] * tempD ); + } + } + + syn_filt( lpc_shb_sf, LPC_SHB_ORDER, exc16kWhtnd, excSHB, 80, state_lpc_syn, 1 ); + syn_filt( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 80, excSHB + 80, 80, state_lpc_syn, 1 ); + syn_filt( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 160, excSHB + 160, 80, state_lpc_syn, 1 ); + syn_filt( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 240, excSHB + 240, 80, state_lpc_syn, 1 ); + } + + if ( extl == FB_TBE ) + { + syn_filt( lpc_shb, LPC_SHB_ORDER, White_exc16k_FB, White_exc16k_FB_temp, L_FRAME16k, fb_state_lpc_syn, 1 ); + + for ( i = 0; i < L_FRAME16k; i++ ) + { + White_exc16k_FB_temp[i] *= cos_fb_exc[i % 32]; + } + + flip_spectrum( White_exc16k_FB_temp, White_exc16k_FB, L_FRAME16k ); + + deemph( White_exc16k_FB, fb_deemph_fac, L_FRAME16k, fb_tbe_demph ); + } + else + { + for ( i = 0; i < L_FRAME16k; i++ ) + { + White_exc16k_FB[i] = 0.0f; + } + } + + *prev_pow_exc16kWhtnd = pow1; + *prev_mix_factor = mix_factor; + + return; +} + +/*-------------------------------------------------------------------* + * GenSHBSynth() + * + * Generate 32 KHz sampled highband component from synthesized highband + *-------------------------------------------------------------------*/ + +void GenSHBSynth( + const float *input_synspeech, /* i : input synthesized speech */ + float *shb_syn_speech_32k, /* o : output highband component */ + float Hilbert_Mem[], /* i/o: memory */ + float state_lsyn_filt_shb_local[], /* i/o: memory */ + const int16_t L_frame, /* i : ACELP frame length */ + int16_t *syn_dm_phase ) +{ + float speech_buf_32k[L_FRAME32k]; + int16_t i; + + Interpolate_allpass_steep( input_synspeech, state_lsyn_filt_shb_local, L_FRAME16k, speech_buf_32k ); + + if ( L_frame == L_FRAME ) + { + flip_and_downmix_generic( speech_buf_32k, shb_syn_speech_32k, L_FRAME32k, Hilbert_Mem, Hilbert_Mem + HILBERT_ORDER1, Hilbert_Mem + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), syn_dm_phase ); + } + else + { + for ( i = 0; i < L_FRAME32k; i++ ) + { + shb_syn_speech_32k[i] = ( ( i % 2 ) == 0 ) ? ( -speech_buf_32k[i] ) : ( speech_buf_32k[i] ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * ScaleShapedSHB() + * + * + *-------------------------------------------------------------------*/ + +void ScaleShapedSHB( + const int16_t length, /* i : SHB overlap length */ + float *synSHB, /* i/o: synthesized shb signal */ + float *overlap, /* i/o: buffer for overlap-add */ + const float *subgain, /* i : subframe gain */ + const float frame_gain, /* i : frame gain */ + const float *win, /* i : window */ + const float *subwin /* i : subframes window */ +) +{ + const int16_t *skip; + int16_t i, j, k, l_shb_lahead, l_frame; + int16_t join_length, num_join; + float mod_syn[L_FRAME16k + L_SHB_LAHEAD], sum_gain; + + /* initilaization */ + l_frame = L_FRAME16k; + l_shb_lahead = L_SHB_LAHEAD; + skip = skip_bands_SWB_TBE; + + if ( length == SHB_OVERLAP_LEN / 2 ) + { + skip = skip_bands_WB_TBE; + l_frame = L_FRAME16k / 4; + l_shb_lahead = L_SHB_LAHEAD / 4; + } + + /* apply gain for each subframe, and store noise output signal using overlap-add */ + set_f( mod_syn, 0, l_frame + l_shb_lahead ); + + if ( length == SHB_OVERLAP_LEN / 2 ) + { + sum_gain = 0; + for ( k = 0; k < length / 2; k++ ) + { + sum_gain = subwin[2 * k + 2] * subgain[0]; + mod_syn[skip[0] + k] = synSHB[skip[0] + k] * sum_gain; + mod_syn[skip[0] + k + length / 2] = synSHB[skip[0] + k + length / 2] * subgain[0]; + } + for ( i = 1; i < NUM_SHB_SUBFR / 2; i++ ) + { + for ( k = 0; k < length; k++ ) + { + sum_gain = subwin[k + 1] * subgain[i] + subwin[length - k - 1] * subgain[i - 1]; + mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; + } + } + for ( k = 0; k < length / 2; k++ ) + { + sum_gain = subwin[length - 2 * k - 2] * subgain[i - 1]; + mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; + } + } + else + { + num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; + join_length = num_join * length; + for ( k = 0, j = 0; k < length; k++ ) + { + mod_syn[j] = synSHB[j] * subwin[k + 1] * subgain[0]; + j++; + } + for ( i = 0; i < NUM_SHB_SUBGAINS - 1; i++ ) + { + for ( k = 0; k < join_length - length; k++ ) + { + mod_syn[j] = synSHB[j] * subgain[i * num_join]; + j++; + } + + for ( k = 0; k < length; k++ ) + { + mod_syn[j] = synSHB[j] * ( subwin[length - k - 1] * subgain[i * num_join] + subwin[k + 1] * subgain[( i + 1 ) * num_join] ); + j++; + } + } + for ( k = 0; k < join_length - length; k++ ) + { + mod_syn[j] = synSHB[j] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; + j++; + } + for ( k = 0; k < length; k++ ) + { + mod_syn[j] = synSHB[j] * subwin[length - k - 1] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; + j++; + } + } + + for ( i = 0; i < l_shb_lahead; i++ ) + { + synSHB[i] = mod_syn[i] * win[i] * frame_gain; + synSHB[i] += overlap[i]; + synSHB[i + l_shb_lahead] = mod_syn[i] * frame_gain; + } + + for ( ; i < l_frame; i++ ) + { + synSHB[i] = mod_syn[i] * frame_gain; + } + + for ( ; i < l_frame + l_shb_lahead; i++ ) + { + overlap[i - l_frame] = mod_syn[i] * win[l_frame + l_shb_lahead - 1 - i] * frame_gain; + } + + return; +} + +/*-------------------------------------------------------------------* + * non_linearity() + * + * Apply a non linearity to the SHB excitation + * -------------------------------------------------------------------*/ + +void non_linearity( + const float input[], /* i : input signal */ + float output[], /* o : output signal */ + float old_bwe_exc_extended[], /* i/o: memory bugffer */ + const int16_t length, /* i : input length */ + float *prev_scale, /* i/o: memory */ + const int16_t coder_type, /* i : Coder Type */ + const float *voice_factors, /* i : Voice Factors */ + const int16_t L_frame /* i : ACELP frame length */ +) +{ + int16_t i, j; + + float max_val = 0.0; + float scale, temp; + float scale_step; + float *p_out; + + int16_t en_abs = 0; + float v_fac = 0, ths; + int16_t nframes; + + if ( L_frame == L_FRAME16k ) + { + nframes = 5; + ths = 0.87f; + } + else + { + nframes = 4; + ths = 0.94f; + } + + for ( i = 0; i < nframes; i++ ) + { + v_fac += voice_factors[i]; + } + v_fac /= nframes; + + if ( coder_type == VOICED && v_fac > ths ) + { + en_abs = 1; + } + + p_out = output + NL_BUFF_OFFSET; /* NL_BUFF_OFFSET = 12 */ + /* update buffer memory */ + mvr2r( old_bwe_exc_extended, output, NL_BUFF_OFFSET ); + + for ( i = j = 0; i < length / 2; i++ ) + { + if ( ( temp = (float) fabs( input[i] ) ) > max_val ) + { + max_val = temp; + j = i; + } + } + + if ( max_val > 1.0f ) + { + scale = 0.67f / max_val; + } + else + { + scale = 0.67f; + } + + + if ( *prev_scale <= 0.0 || *prev_scale > 1024.0f * scale ) + { + scale_step = 1.0; + *prev_scale = scale; + } + else + { + scale_step = 1.0f; + if ( j != 0 ) + { + scale_step = (float) exp( 1.0f / (float) j * (float) log( scale / *prev_scale ) ); + } + } + + for ( i = 0; i < length / 2; i++ ) + { + if ( input[i] >= 0.0 ) + { + *p_out++ = ( input[i] * input[i] ) * *prev_scale; + } + else + { + if ( en_abs ) + { + *p_out++ = 1.0f * ( input[i] * input[i] ) * *prev_scale; + } + else + { + *p_out++ = -1.0f * ( input[i] * input[i] ) * *prev_scale; + } + } + + if ( i < j ) + { + *prev_scale *= scale_step; + } + } + + max_val = 0.0f; + for ( i = j = length / 2; i < length; i++ ) + { + if ( ( temp = (float) fabs( input[i] ) ) > max_val ) + { + max_val = temp; + j = i; + } + } + + if ( max_val > 1.0f ) + { + scale = 0.67f / max_val; + } + else + { + scale = 0.67f; + } + + + if ( *prev_scale <= 0.0 || *prev_scale > 1024.0f * scale ) + { + scale_step = 1.0; + *prev_scale = scale; + } + else + { + scale_step = 1.0f; + if ( j != length / 2 ) + { + scale_step = (float) exp( 1.0f / (float) ( j - length / 2 ) * (float) log( scale / *prev_scale ) ); + } + } + + for ( i = length / 2; i < length; i++ ) + { + if ( input[i] >= 0.0 ) + { + *p_out++ = ( input[i] * input[i] ) * *prev_scale; + } + else + { + if ( en_abs ) + { + *p_out++ = 1.0f * ( input[i] * input[i] ) * *prev_scale; + } + else + { + *p_out++ = -1.0f * ( input[i] * input[i] ) * *prev_scale; + } + } + + if ( i < j ) + { + *prev_scale *= scale_step; + } + } + + /* update buffer memory */ + mvr2r( output + L_FRAME32k, old_bwe_exc_extended, NL_BUFF_OFFSET ); + + return; +} + + +/*-------------------------------------------------------------------* + * create_random_vector() + * + * creates random number vector + * -------------------------------------------------------------------*/ + +void create_random_vector( + float output[], /* o : output random vector */ + const int16_t length, /* i : length of random vector */ + int16_t seed[] /* i/o: start seed */ +) +{ + int16_t i, j, k; + float scale1, scale2; + + j = (int16_t) ( own_random( &seed[0] ) * 0.0078f ); + j = abs( j ) & 0xff; + k = (int16_t) ( own_random( &seed[1] ) * 0.0078f ); + k = abs( k ) & 0xff; + + while ( k == j ) + { + k = (int16_t) ( own_random( &seed[1] ) * 0.0078f ); + k = abs( k ) & 0xff; + } + + if ( own_random( &seed[0] ) < 0 ) + { + scale1 = -563.154f; /* -200.00f * 0.35f/0.1243f; */ + } + else + { + scale1 = 563.154f; /* 200.00f * 0.35f/0.1243f; */ + } + + if ( own_random( &seed[1] ) < 0 ) + { + scale2 = -225.261f; /* -80.00f * 0.35f/0.1243f; */ + } + else + { + scale2 = 225.261f; /* 80.00f * 0.35f/0.1243f; */ + } + + for ( i = 0; i < length; i++, j++, k++ ) + { + j &= 0xff; + k &= 0xff; + output[i] = scale1 * gaus_dico_swb[j] + scale2 * gaus_dico_swb[k]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * interp_code_5over2() + * + * Used to interpolate the excitation from the core sample rate + * of 12.8 kHz to 32 kHz. + * Simple linear interpolator - No need for precision here. + *-------------------------------------------------------------------*/ + +void interp_code_5over2( + const float inp_code[], /* i : input vector */ + float interp_code[], /* o : output vector */ + const int16_t inp_length /* i : length of input vector */ +) +{ + int16_t i, kk, kkp1; + float factor_i[5] = { 0.2f, 0.6f, 1.0f, 0.6f, 0.2f }; + float factor_j[5] = { 0.8f, 0.4f, 0.0f, 0.4f, 0.8f }; + + interp_code[0] = inp_code[0]; + interp_code[1] = inp_code[0] * factor_i[3] + inp_code[1] * factor_j[3]; + interp_code[2] = inp_code[0] * factor_i[4] + inp_code[1] * factor_j[4]; + + for ( i = 3, kk = 1, kkp1 = 2; i < ( inp_length - 2 ) * HIBND_ACB_L_FAC; i += 5, kk++, kkp1++ ) + { + interp_code[i] = inp_code[kk] * factor_j[0] + inp_code[kkp1] * factor_i[0]; + interp_code[i + 1] = inp_code[kk] * factor_j[1] + inp_code[kkp1] * factor_i[1]; + interp_code[i + 2] = inp_code[kkp1] * factor_i[2]; + kk++; + kkp1++; + interp_code[i + 3] = inp_code[kk] * factor_i[3] + inp_code[kkp1] * factor_j[3]; + interp_code[i + 4] = inp_code[kk] * factor_i[4] + inp_code[kkp1] * factor_j[4]; + } + + interp_code[i] = inp_code[kk] * factor_j[0]; + interp_code[i + 1] = inp_code[kk] * factor_j[1]; + + return; +} + +/*-------------------------------------------------------------------* + * interp_code_4over2() + * + * Used to interpolate the excitation from the core sample rate + * of 16 kHz to 32 kHz. + * Simple linear interpolator - No need for precision here. + *-------------------------------------------------------------------*/ + +void interp_code_4over2( + const float inp_code[], /* i : input vector */ + float interp_code[], /* o : output vector */ + const int16_t inp_length /* i : length of input vector */ +) +{ + int16_t i, j; + for ( i = j = 0; i < inp_length - 1; i++, j += 2 ) + { + interp_code[j] = inp_code[i]; + interp_code[j + 1] = inp_code[i] * 0.5f + inp_code[i + 1] * 0.5f; + } + + interp_code[j] = inp_code[i]; + interp_code[j + 1] = inp_code[i] * 0.5f; + + return; +} + +/*-------------------------------------------------------------------* + * fb_tbe_reset_synth() + * + * Reset the extra parameters needed for synthesis of the FB TBE output + *-------------------------------------------------------------------*/ + +void fb_tbe_reset_synth( + float fbbwe_hpf_mem[][4], + float *prev_fbbwe_ratio ) +{ + set_f( fbbwe_hpf_mem[0], 0, 4 ); + set_f( fbbwe_hpf_mem[1], 0, 4 ); + set_f( fbbwe_hpf_mem[2], 0, 4 ); + set_f( fbbwe_hpf_mem[3], 0, 4 ); + *prev_fbbwe_ratio = 1.0f; + + return; +} + +/*-------------------------------------------------------------------* + * wb_tbe_extras_reset() + * + * Reset the extra parameters only required for WB TBE encoding + *-------------------------------------------------------------------*/ + +void wb_tbe_extras_reset( + float mem_genSHBexc_filt_down_wb2[], + float mem_genSHBexc_filt_down_wb3[] ) +{ + set_f( mem_genSHBexc_filt_down_wb2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( mem_genSHBexc_filt_down_wb3, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + return; +} + +/*-------------------------------------------------------------------* + * wb_tbe_extras_reset_synth() + * + * Reset the extra parameters only required for WB TBE synthesis + *-------------------------------------------------------------------*/ + +void wb_tbe_extras_reset_synth( + float state_lsyn_filt_shb[], + float state_lsyn_filt_dwn_shb[], + float mem_resamp_HB[] ) +{ + set_f( state_lsyn_filt_shb, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); + set_f( state_lsyn_filt_dwn_shb, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); + set_f( mem_resamp_HB, 0.0f, INTERP_3_1_MEM_LEN ); + + return; +} + +/*-------------------------------------------------------------------* + * elliptic_bpf_48k_generic() + * + * 18th-order elliptic bandpass filter at 14.0 to 20 kHz sampled at 48 kHz + * Implemented as 3 fourth order sections cascaded. + *-------------------------------------------------------------------*/ + +void elliptic_bpf_48k_generic( + const float input[], /* i : input signal */ + float output[], /* o : output signal */ + float memory[][4], /* i/o: 4 arrays of 4 for memory */ + const float full_band_bpf[][5] /* i : filter coefficients b0,b1,b2,a0,a1,a2 */ +) +{ + int16_t i; + float tmp[L_FRAME48k], tmp2[L_FRAME48k]; + + tmp[0] = memory[0][0] * full_band_bpf[0][4] + memory[0][1] * full_band_bpf[0][3] + memory[0][2] * full_band_bpf[0][2] + memory[0][3] * full_band_bpf[0][1] + input[0] * full_band_bpf[0][0] - full_band_bpf[3][1] * memory[1][3] - full_band_bpf[3][2] * memory[1][2] - full_band_bpf[3][3] * memory[1][1] - full_band_bpf[3][4] * memory[1][0]; + tmp[1] = memory[0][1] * full_band_bpf[0][4] + memory[0][2] * full_band_bpf[0][3] + memory[0][3] * full_band_bpf[0][2] + input[0] * full_band_bpf[0][1] + input[1] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[0] - full_band_bpf[3][2] * memory[1][3] - full_band_bpf[3][3] * memory[1][2] - full_band_bpf[3][4] * memory[1][1]; + tmp[2] = memory[0][2] * full_band_bpf[0][4] + memory[0][3] * full_band_bpf[0][3] + input[0] * full_band_bpf[0][2] + input[1] * full_band_bpf[0][1] + input[2] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[1] - full_band_bpf[3][2] * tmp[0] - full_band_bpf[3][3] * memory[1][3] - full_band_bpf[3][4] * memory[1][2]; + tmp[3] = memory[0][3] * full_band_bpf[0][4] + input[0] * full_band_bpf[0][3] + input[1] * full_band_bpf[0][2] + input[2] * full_band_bpf[0][1] + input[3] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[2] - full_band_bpf[3][2] * tmp[1] - full_band_bpf[3][3] * tmp[0] - full_band_bpf[3][4] * memory[1][3]; + + for ( i = 4; i < L_FRAME48k; i++ ) + { + tmp[i] = input[i - 4] * full_band_bpf[0][4] + input[i - 3] * full_band_bpf[0][3] + input[i - 2] * full_band_bpf[0][2] + input[i - 1] * full_band_bpf[0][1] + input[i] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[i - 1] - full_band_bpf[3][2] * tmp[i - 2] - full_band_bpf[3][3] * tmp[i - 3] - full_band_bpf[3][4] * tmp[i - 4]; + } + + memory[0][0] = input[L_FRAME48k - 4]; + memory[0][1] = input[L_FRAME48k - 3]; + memory[0][2] = input[L_FRAME48k - 2]; + memory[0][3] = input[L_FRAME48k - 1]; + + tmp2[0] = memory[1][0] * full_band_bpf[1][4] + memory[1][1] * full_band_bpf[1][3] + memory[1][2] * full_band_bpf[1][2] + memory[1][3] * full_band_bpf[1][1] + tmp[0] * full_band_bpf[1][0] - full_band_bpf[4][1] * memory[2][3] - full_band_bpf[4][2] * memory[2][2] - full_band_bpf[4][3] * memory[2][1] - full_band_bpf[4][4] * memory[2][0]; + tmp2[1] = memory[1][1] * full_band_bpf[1][4] + memory[1][2] * full_band_bpf[1][3] + memory[1][3] * full_band_bpf[1][2] + tmp[0] * full_band_bpf[1][1] + tmp[1] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[0] - full_band_bpf[4][2] * memory[2][3] - full_band_bpf[4][3] * memory[2][2] - full_band_bpf[4][4] * memory[2][1]; + tmp2[2] = memory[1][2] * full_band_bpf[1][4] + memory[1][3] * full_band_bpf[1][3] + tmp[0] * full_band_bpf[1][2] + tmp[1] * full_band_bpf[1][1] + tmp[2] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[1] - full_band_bpf[4][2] * tmp2[0] - full_band_bpf[4][3] * memory[2][3] - full_band_bpf[4][4] * memory[2][2]; + tmp2[3] = memory[1][3] * full_band_bpf[1][4] + tmp[0] * full_band_bpf[1][3] + tmp[1] * full_band_bpf[1][2] + tmp[2] * full_band_bpf[1][1] + tmp[3] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[2] - full_band_bpf[4][2] * tmp2[1] - full_band_bpf[4][3] * tmp2[0] - full_band_bpf[4][4] * memory[2][3]; + + for ( i = 4; i < L_FRAME48k; i++ ) + { + tmp2[i] = tmp[i - 4] * full_band_bpf[1][4] + tmp[i - 3] * full_band_bpf[1][3] + tmp[i - 2] * full_band_bpf[1][2] + tmp[i - 1] * full_band_bpf[1][1] + tmp[i] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[i - 1] - full_band_bpf[4][2] * tmp2[i - 2] - full_band_bpf[4][3] * tmp2[i - 3] - full_band_bpf[4][4] * tmp2[i - 4]; + } + + memory[1][0] = tmp[L_FRAME48k - 4]; + memory[1][1] = tmp[L_FRAME48k - 3]; + memory[1][2] = tmp[L_FRAME48k - 2]; + memory[1][3] = tmp[L_FRAME48k - 1]; + + output[0] = memory[2][0] * full_band_bpf[2][4] + memory[2][1] * full_band_bpf[2][3] + memory[2][2] * full_band_bpf[2][2] + memory[2][3] * full_band_bpf[2][1] + tmp2[0] * full_band_bpf[2][0] - full_band_bpf[5][1] * memory[3][3] - full_band_bpf[5][2] * memory[3][2] - full_band_bpf[5][3] * memory[3][1] - full_band_bpf[5][4] * memory[3][0]; + output[1] = memory[2][1] * full_band_bpf[2][4] + memory[2][2] * full_band_bpf[2][3] + memory[2][3] * full_band_bpf[2][2] + tmp2[0] * full_band_bpf[2][1] + tmp2[1] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[0] - full_band_bpf[5][2] * memory[3][3] - full_band_bpf[5][3] * memory[3][2] - full_band_bpf[5][4] * memory[3][1]; + output[2] = memory[2][2] * full_band_bpf[2][4] + memory[2][3] * full_band_bpf[2][3] + tmp2[0] * full_band_bpf[2][2] + tmp2[1] * full_band_bpf[2][1] + tmp2[2] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[1] - full_band_bpf[5][2] * output[0] - full_band_bpf[5][3] * memory[3][3] - full_band_bpf[5][4] * memory[3][2]; + output[3] = memory[2][3] * full_band_bpf[2][4] + tmp2[0] * full_band_bpf[2][3] + tmp2[1] * full_band_bpf[2][2] + tmp2[2] * full_band_bpf[2][1] + tmp2[3] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[2] - full_band_bpf[5][2] * output[1] - full_band_bpf[5][3] * output[0] - full_band_bpf[5][4] * memory[3][3]; + + for ( i = 4; i < L_FRAME48k; i++ ) + { + output[i] = tmp2[i - 4] * full_band_bpf[2][4] + tmp2[i - 3] * full_band_bpf[2][3] + tmp2[i - 2] * full_band_bpf[2][2] + tmp2[i - 1] * full_band_bpf[2][1] + tmp2[i] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[i - 1] - full_band_bpf[5][2] * output[i - 2] - full_band_bpf[5][3] * output[i - 3] - full_band_bpf[5][4] * output[i - 4]; + } + + memory[2][0] = tmp2[L_FRAME48k - 4]; + memory[2][1] = tmp2[L_FRAME48k - 3]; + memory[2][2] = tmp2[L_FRAME48k - 2]; + memory[2][3] = tmp2[L_FRAME48k - 1]; + + memory[3][0] = output[L_FRAME48k - 4]; + memory[3][1] = output[L_FRAME48k - 3]; + memory[3][2] = output[L_FRAME48k - 2]; + memory[3][3] = output[L_FRAME48k - 1]; + + return; +} + + +/*-------------------------------------------------------------------* + * synthesise_fb_high_band() + * + * Creates the highband output for full band - 14.0 to 20 kHz + * Using the energy shaped white excitation signal from the SWB BWE. + * The excitation signal input is sampled at 16kHz and so is upsampled + * to 48 kHz first. + * Uses a complementary split filter to code the two regions from + * 14kHz to 16kHz and 16 kHz to 20 kHz. + * One of 16 tilt filters is also applied afterwards to further + * refine the spectral shape of the fullband signal. + * The tilt is specified in dB per kHz. N.B. Only negative values are + * accomodated. + *-------------------------------------------------------------------*/ + +void synthesise_fb_high_band( + const float excitation_in[], /* i : full band excitation */ + float output[], /* o : high band speech - 14.0 to 20 kHz */ + const float fb_exc_energy, /* i : full band excitation energy */ + const float ratio, /* i : energy ratio */ + const int16_t L_frame, /* i : ACELP frame length */ + const int16_t bfi, /* i : BFI flag */ + float *prev_fbbwe_ratio, /* o : previous frame energy for FEC */ + float bpf_memory[][4] /* i/o: memory for elliptic bpf 48k */ +) +{ + int16_t i, j; + float excitation_in_interp3[L_FRAME48k]; + float tmp[L_FRAME48k]; + float temp1, ratio2; + + /* Interpolate the white energy shaped gaussian excitation from 16 kHz to 48 kHz with zeros */ + /* white excitation from DC to 8 kHz resampled to produce DC to 24 kHz excitation. */ + for ( i = 0, j = 0; i < L_FRAME48k; i += 3, j++ ) + { + excitation_in_interp3[i] = 3.0f * excitation_in[j]; + excitation_in_interp3[i + 1] = 0.0f; + excitation_in_interp3[i + 2] = 0.0f; + } + + if ( L_frame == L_FRAME16k ) + { + /* for 16kHz ACELP core */ + elliptic_bpf_48k_generic( excitation_in_interp3, tmp, bpf_memory, full_band_bpf_3 ); + } + else + { + /* for 12.8kHz ACELP core */ + elliptic_bpf_48k_generic( excitation_in_interp3, tmp, bpf_memory, full_band_bpf_1 ); + } + temp1 = sum2_f( tmp, L_FRAME48k ) + 0.001f; + ratio2 = (float) ( ratio * sqrt( fb_exc_energy / temp1 ) ); + + if ( !bfi ) + { + *prev_fbbwe_ratio = ratio; + } + else + { + *prev_fbbwe_ratio = ratio * 0.5f; + } + for ( i = 0; i < L_FRAME48k; i++ ) + { + output[i] = tmp[i] * ratio2; + } + + return; +} + +/*-------------------------------------------------------------------* + * Estimate_mix_factors() * + * * + * Estimate mix factors for SHB excitation generation * + *-------------------------------------------------------------------*/ + +static void Estimate_mix_factors( + const float *shb_res, /* i : SHB LP residual */ + const float *exc16kWhtnd, /* i : SHB transformed low band excitation */ + const float *White_exc16k, /* i : Modulated envelope shaped white noise */ + const float pow1, /* i : SHB exc. power for normalization */ + const float pow22, /* i : White noise excitation for normalization*/ + float *vf_modified, /* o : Estimated voice factors */ + int16_t *vf_ind /* o : voice factors VQ index */ +) +{ + float shb_res_local[L_FRAME16k], WN_exc_local[L_FRAME16k]; + float pow3, temp_p1_p2, temp_p1_p3; + float temp_numer1[L_FRAME16k], temp_numer2[L_FRAME16k]; + int16_t i, length; + + mvr2r( shb_res, shb_res_local, L_FRAME16k ); + mvr2r( White_exc16k, WN_exc_local, L_FRAME16k ); + + pow3 = dotp( shb_res_local, shb_res_local, L_FRAME16k ); + + pow3 += 0.00001f; + temp_p1_p2 = (float) sqrt( pow1 / pow22 ); + temp_p1_p3 = (float) sqrt( pow1 / pow3 ); + + + for ( i = 0; i < L_FRAME16k; i++ ) + { + WN_exc_local[i] *= temp_p1_p2; + shb_res_local[i] *= temp_p1_p3; + } + for ( i = 0; i < L_FRAME16k; i++ ) + { + temp_numer1[i] = shb_res_local[i] - WN_exc_local[i]; + temp_numer2[i] = exc16kWhtnd[i] - WN_exc_local[i]; + } + + length = L_FRAME16k; + for ( i = 0; i < 1; i++ ) + { + temp_p1_p2 = dotp( temp_numer1 + i * length, temp_numer2 + i * length, length ); + temp_p1_p3 = dotp( temp_numer2 + i * length, temp_numer2 + i * length, length ); + vf_modified[i] = min( max( ( temp_p1_p2 / temp_p1_p3 ), 0.1f ), 0.99f ); + } + + *vf_ind = usquant( vf_modified[0], &temp_p1_p2, 0.125, 0.125, 1 << NUM_BITS_SHB_VF ); + set_f( vf_modified, temp_p1_p2, NB_SUBFR16k ); + + return; +} + +/*-------------------------------------------------------------------* + * tbe_celp_exc() * + * * + * Prepare adaptive part of TBE excitation * + *-------------------------------------------------------------------*/ + +void tbe_celp_exc( + const int16_t element_mode, /* i : element mode */ + const int16_t idchan, /* i : channel ID */ + float *bwe_exc, /* i/o: BWE excitation */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : fraction of lag */ + float *error, /* i/o: error */ + const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ +) +{ + int16_t i, offset; + + if ( element_mode == IVAS_CPE_TD && idchan == 1 && !tdm_LRTD_flag ) + { + return; + } + + if ( L_frame == L_FRAME ) + { + offset = tbe_celp_exc_offset( T0, T0_frac ); + + for ( i = 0; i < L_subfr * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset + (int16_t) *error]; + } + *error += (float) offset - (float) T0 * HIBND_ACB_L_FAC - 0.25f * HIBND_ACB_L_FAC * (float) T0_frac; + } + else + { + offset = T0 * 2 + (int16_t) ( (float) T0_frac * 0.5f + 4 + 0.5f ) - 4; + for ( i = 0; i < L_subfr * 2; i++ ) + { + bwe_exc[i + i_subfr * 2] = bwe_exc[i + i_subfr * 2 - offset + (int16_t) *error]; + } + *error += (float) offset - (float) T0 * 2 - 0.5f * (float) T0_frac; + } + + return; +} + +/*-------------------------------------------------------------------* + * prep_tbe_exc() * + * * + * Prepare TBE excitation * + *-------------------------------------------------------------------*/ + +void prep_tbe_exc( + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t i_subfr, /* i : subframe index */ + const float gain_pit, /* i : Pitch gain */ + const float gain_code, /* i : algebraic codebook gain */ + const float code[], /* i : algebraic excitation */ + const float voice_fac, /* i : voicing factor */ + float *voice_factors, /* o : TBE voicing factor */ + float bwe_exc[], /* i/o: excitation for TBE */ + const float gain_preQ, /* i : prequantizer excitation gain*/ + const float code_preQ[], /* i : prequantizer excitation */ + const int16_t T0, /* i : integer pitch variables */ + const int16_t coder_type, /* i : coding type */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t element_mode, /* i : element mode */ + const int16_t idchan, /* i : channel ID */ + const int16_t flag_TD_BWE, /* i : flag indicating whether hTD_BWE exists */ + const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ +) +{ + int16_t i; + float tmp_code[2 * L_SUBFR * HIBND_ACB_L_FAC]; + float tmp_code_preInt[L_SUBFR]; + float tmp = 1.0f; + + *voice_factors = VF_0th_PARAM + VF_1st_PARAM * voice_fac + VF_2nd_PARAM * voice_fac * voice_fac; + + if ( ( coder_type == VOICED || T0 > 115.5f ) && core_brate > ACELP_8k00 ) + { + tmp = 1.0f; + *voice_factors *= tmp; + } + + *voice_factors = min( max( 0.000001f, *voice_factors ), 0.999999f ); + + if ( element_mode == IVAS_CPE_TD && idchan == 1 && !tdm_LRTD_flag ) + { + if ( flag_TD_BWE && i_subfr == 0 ) + { + set_f( bwe_exc, 0, L_FRAME32k ); + } + + return; + } + + if ( L_frame == L_FRAME ) + { + interp_code_5over2( code, tmp_code, L_subfr ); + + for ( i = 0; i < L_subfr * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = gain_pit * bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] + + gain_code * tmp_code[i]; + } + } + else + { + for ( i = 0; i < L_subfr; i++ ) + { + tmp_code_preInt[i] = gain_code * code[i] + 2 * gain_preQ * code_preQ[i]; + } + + interp_code_4over2( tmp_code_preInt, tmp_code, L_subfr ); + + for ( i = 0; i < L_subfr * 2; i++ ) + { + bwe_exc[i + i_subfr * 2] = gain_pit * bwe_exc[i + i_subfr * 2] + tmp_code[i]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * get_tbe_bits() * + * * + * Determine TBE bit consumption per frame from bitrate * + *-------------------------------------------------------------------*/ + +int16_t get_tbe_bits( + const int32_t total_brate, + const int16_t bwidth, + const int16_t rf_mode ) +{ + int16_t i, bits = 0; + + if ( rf_mode ) + { + /* TBE bits for core, primary frame */ + if ( bwidth == WB && total_brate == ACELP_13k20 ) + { + /* Gain frame: 4, Gain shapes: 0, and LSFs: 2 */ + bits = NUM_BITS_SHB_FrameGain_LBR_WB + NUM_BITS_LBR_WB_LSF; + } + else if ( bwidth == SWB && total_brate == ACELP_13k20 ) + { + /* Gain frame: 5, Gain shapes: 5, and lowrate LSFs: 8 */ + bits = NUM_BITS_SHB_FRAMEGAIN + NUM_BITS_SHB_SUBGAINS + 8; + } + } + else + { + if ( bwidth == WB && total_brate == ACELP_9k60 ) + { + bits = NUM_BITS_LBR_WB_LSF + NUM_BITS_SHB_FrameGain_LBR_WB; + } + else if ( bwidth == SWB || bwidth == FB ) + { + if ( total_brate == ACELP_9k60 ) + { + bits = NUM_BITS_SHB_FRAMEGAIN + NUM_BITS_SHB_SUBGAINS + 8; + } + else if ( total_brate >= ACELP_13k20 && total_brate <= ACELP_32k ) + { + bits = NUM_BITS_SHB_SUBGAINS + NUM_BITS_SHB_FRAMEGAIN + NUM_LSF_GRID_BITS + MIRROR_POINT_BITS; + + for ( i = 0; i < NUM_Q_LSF; i++ ) + { + bits += lsf_q_num_bits[i]; + } + } + + if ( total_brate >= ACELP_24k40 ) + { + bits += NUM_BITS_SHB_ENER_SF + NUM_BITS_SHB_VF + NUM_BITS_SHB_RES_GS * NB_SUBFR16k; + } + + if ( bwidth == SWB && ( total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) ) + { + bits += BITS_TEC + BITS_TFA; + } + + if ( bwidth == FB ) + { + /* fullband slope */ + bits += 4; + } + } + } + + return bits; +} diff --git a/lib_com/syn_12k8.c b/lib_com/syn_12k8.c new file mode 100644 index 0000000000..4323853f98 --- /dev/null +++ b/lib_com/syn_12k8.c @@ -0,0 +1,72 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------ + * syn_12k8() + * + * perform the synthesis filtering 1/A(z) + *------------------------------------------------------------------*/ + +void syn_12k8( + const int16_t L_frame, /* i : length of the frame */ + const float *Aq, /* i : LP filter coefficients */ + const float *exc, /* i : input signal */ + float *synth, /* o : output signal */ + float *mem, /* i/o: initial filter states */ + const int16_t update_m /* i : update memory flag: 0 --> no memory update */ + ) /* 1 --> update of memory */ +{ + const float *p_Aq; + int16_t i_subfr; + + p_Aq = Aq; /* pointer to interpolated LPC parameters */ + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + syn_filt( p_Aq, M, &exc[i_subfr], &synth[i_subfr], L_SUBFR, mem, update_m ); + p_Aq += ( M + 1 ); /* interpolated LPC parameters for next subframe */ + } + + return; +} diff --git a/lib_com/syn_filt.c b/lib_com/syn_filt.c new file mode 100644 index 0000000000..d571b9cb7f --- /dev/null +++ b/lib_com/syn_filt.c @@ -0,0 +1,173 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" +#include + +/*------------------------------------------------------------------* + * syn_filt() + * + * perform the synthesis filtering 1/A(z) + *------------------------------------------------------------------*/ + +void syn_filt( + const float a[], /* i : LP filter coefficients */ + const int16_t m, /* i : order of LP filter */ + const float x[], /* i : input signal */ + float y[], /* o : output signal */ + const int16_t l, /* i : size of filtering */ + float mem[], /* i/o: initial filter states */ + const int16_t update_m /* i : update memory flag: 0 --> no memory update */ + ) /* 1 --> update of memory */ +{ + int16_t i, j; + float buf[L_FRAME48k + L_FRAME48k / 2 + TCXLTP_LTP_ORDER]; /* temporary synthesis buffer */ + float s, *yy; + + yy = &buf[0]; + + /*------------------------------------------------------------------* + * copy initial filter states into synthesis buffer and do synthesis + *------------------------------------------------------------------*/ + + for ( i = 0; i < m; i++ ) + { + *yy++ = mem[i]; + } + + /*-----------------------------------------------------------------------* + * Do the filtering + *-----------------------------------------------------------------------*/ + + for ( i = 0; i < l; i++ ) + { + s = x[i]; + for ( j = 1; j <= m; j++ ) + { + s -= a[j] * yy[i - j]; + } + + yy[i] = s; + y[i] = s; + } + + /*------------------------------------------------------------------* + * Update memory if required + *------------------------------------------------------------------*/ + + if ( update_m ) + { + for ( i = 0; i < m; i++ ) + { + mem[i] = yy[l - m + i]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * synth_mem_updt2() + * + * Update of synthesis filter memories in case of ACELP@12k8 <-> ACELP@16k switching + *--------------------------------------------------------------------*/ + +void synth_mem_updt2( + const int16_t L_frame, /* i : frame length */ + const int16_t last_L_frame, /* i : frame length */ + float old_exc[], /* i/o: excitation buffer */ + float mem_syn_r[], /* i/o: synthesis filter memory */ + float mem_syn2[], /* o : synthesis filter memory for find_target */ + float mem_syn[], /* o : synthesis filter memory for find_target */ + const int16_t dec /* i : flag for decoder indication */ +) +{ + int16_t mem_syn_r_size_old, mem_syn_r_size_new; + int16_t i; + float en1, en2, loc_rat; + + /* Residual and update old_exc */ + if ( dec >= DEC ) + { + lerp( old_exc + L_EXC_MEM_DEC - ( last_L_frame + last_L_frame / 2 ), old_exc + L_EXC_MEM_DEC - ( L_frame + L_frame / 2 ), L_frame + L_frame / 2, last_L_frame + last_L_frame / 2 ); + } + else + { + lerp( old_exc + L_EXC_MEM - last_L_frame, old_exc + L_EXC_MEM - L_frame, L_frame, last_L_frame ); + } + + /*Resamp memory*/ + /*Size of LPC syn memory*/ + mem_syn_r_size_old = (int16_t) ( 1.25 * last_L_frame / 20.f ); + mem_syn_r_size_new = (int16_t) ( 1.25 * L_frame / 20.f ); + + lerp( mem_syn_r + L_SYN_MEM - mem_syn_r_size_old, mem_syn_r + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + + if ( dec == DEC_IVAS ) + { + if ( L_frame == L_FRAME16k ) + { + /* find scaling factor */ + en1 = 1.25f * sum2_f( mem_syn2, M ); + en2 = sum2_f( mem_syn_r + L_SYN_MEM - M, M ); + + loc_rat = sqrtf( en2 ) / ( sqrtf( en1 ) + 0.01f ); + /* scale synthesis filter memory */ + for ( i = 0; i < M; i++ ) + { + mem_syn_r[L_SYN_MEM - M + i] *= loc_rat; + } + } + } + + mvr2r( mem_syn_r + L_SYN_MEM - M, mem_syn2, M ); + + if ( mem_syn != NULL ) + { + mvr2r( mem_syn2, mem_syn, M ); + } + + return; +} diff --git a/lib_com/tcq_position_arith.c b/lib_com/tcq_position_arith.c new file mode 100644 index 0000000000..4c3c49e197 --- /dev/null +++ b/lib_com/tcq_position_arith.c @@ -0,0 +1,2198 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + + +static void bitstream_save_bit( TCQ_PBITSTREAM pBS, const int16_t bit ); +static uint32_t bitstream_load_bit( TCQ_PBITSTREAM pBS ); +static void bitstream_rollback( TCQ_PBITSTREAM pBS, int16_t numBits ); + +static int32_t ar_make_model( const int16_t *freq, int16_t *model, const int16_t len ); +static int32_t ar_decode( PARCODEC arInst, const int16_t *model ); +static void ar_encode( PARCODEC arInst, const int16_t *model, int32_t symbol ); +static void ar_encode_uniform( PARCODEC arInst, uint16_t data, const int16_t bits ); + + +/* 32x16 multiply: */ +Word32 Mult_32_16( Word32 a, Word16 b ) +{ + Word32 result; + UWord16 lo; + /* use Mpy_32_16_ss(): */ + Mpy_32_16_ss( a, b, &result, &lo ); + + return result; +} + +/* 32x32 multiply: */ +Word32 Mult_32_32( Word32 a, Word32 b ) +{ + Word32 result; + UWord32 lo; + /* use Mpy_32_32_ss(): */ + Mpy_32_32_ss( a, b, &result, &lo ); + + return result; +} + +static void set16_fx( + Word16 y[], /* i/o: Vector to set */ + const Word16 a, /* i : Value to set the vector to */ + const Word16 N /* i : Lenght of the vector */ +) +{ + Word16 i; + + for ( i = 0; i < N; i++ ) + { + y[i] = a; + } + + return; +} + +static void set32_fx( + Word32 y[], /* i/o: Vector to set */ + const Word32 a, /* i : Value to set the vector to */ + const Word16 N /* i : Lenght of the vector */ +) +{ + Word16 i; + for ( i = 0; i < N; i++ ) + { + y[i] = a; + } + + return; +} + +Word32 ar_div( + Word32 num, + Word32 denum ) +{ + Word16 exp1, exp2, exp, i; + Word32 varout; + Word32 sign; + + sign = L_and( L_xor( num, denum ), 0x80000000 ); + + num = L_abs( num ); + denum = L_abs( denum ); + + if ( L_sub( num, denum ) < 0 || denum == 0 ) + { + return 0; + } + else if ( L_sub( num, denum ) == 0 ) + { + return 1; + } + else + { + exp1 = norm_l( num ); + exp2 = norm_l( denum ); + exp = sub( exp2, exp1 ); + denum = L_shl( denum, exp ); + exp = add( exp, 1 ); + varout = 0; + for ( i = 0; i < exp; i++ ) + { + num = L_sub( num, denum ); + varout = L_shl( varout, 1 ); + if ( num >= 0 ) + { + num = L_shl( num, 1 ); + varout = L_add( varout, 1 ); + } + else + { + num = L_add( num, denum ); + num = L_shl( num, 1 ); + } + } + } + + if ( sign != 0 ) + { + varout = L_negate( varout ); + } + + return varout; +} + +void srt_vec_ind_fx( + const Word32 *linear, /* linear input */ + Word32 *srt, /* sorted output*/ + Word16 *I, /* index for sorted output */ + Word16 length ) +{ + Word16 pos, npos; + Word16 idxMem; + Word32 valMem; + + /*initialize */ + for ( pos = 0; pos < length; pos++ ) + { + I[pos] = pos; + } + + for ( pos = 0; pos < length; pos++ ) + { + srt[pos] = linear[pos]; + } + + /* now iterate */ + for ( pos = 0; pos < ( length - 1 ); pos++ ) + { + for ( npos = ( pos + 1 ); npos < length; npos++ ) + { + if ( L_sub( srt[npos], srt[pos] ) < 0 ) + { + idxMem = I[pos]; + I[pos] = I[npos]; + I[npos] = idxMem; + + valMem = srt[pos]; + srt[pos] = srt[npos]; + srt[npos] = valMem; + } + } + } + + return; +} + +static Word32 GetBitsFromPulses_fx( + Word16 m, + Word16 n ) +{ + Word16 i, integer_fx, temp_fx1, temp_fx2, exp1, exp2; + Word32 temp32; + Word32 frac_fx32; + Word32 logCoeff_fx; + Word16 exp = 0; + Word32 mantissa_fx = 0; + + if ( m == 0 ) + { + return 0; + } + + for ( i = 0; i < min( m, n ); i++ ) + { + logCoeff_fx = L_add( L_shl( i + 1, 16 ), L_sub( table_logcum_fx[n + 1], L_add( table_logcum_fx[i + 2], table_logcum_fx[n - i] ) ) ); + logCoeff_fx = L_add( logCoeff_fx, L_sub( table_logcum_fx[m], L_add( table_logcum_fx[i + 1], table_logcum_fx[m - i] ) ) ); /*Q16 */ + + integer_fx = extract_h( logCoeff_fx ); /*Q0 */ + frac_fx32 = L_sub( logCoeff_fx, L_shl( integer_fx, 16 ) ); /*Q16 */ + + /*ln2, 0.987, ln2 * ln2, 0.977 */ + /*temp1 = (long) (frac / 0.0625); */ + /*temp2 = frac - (float)temp1 * 0.0625f; */ + + /* frac = pow(2.0, temp1 * 0.0625) * (1 + 0.693 * temp2 + 0.480 * temp2 * temp2 * 0.5);*/ + /*frac = pow_getbitsfrompulses[temp1] * (1 + 0.693f * temp2 + 0.480f * temp2 * temp2 * 0.5f); */ + + temp_fx1 = extract_h( L_shl( frac_fx32, 4 ) ); + temp_fx2 = extract_l( L_and( frac_fx32, 0xfff ) ); /*Q16 */ + + frac_fx32 = L_add( L_mult( temp_fx2, 22708 ), Mult_32_16( L_mult0( temp_fx2, temp_fx2 ), 7864 ) ); /*Q32 */ + frac_fx32 = L_add( 0x40000000, L_shr( frac_fx32, 2 ) ); /*30 */ + + exp1 = norm_l( pow_getbitsfrompulses_fx[temp_fx1] ); + exp2 = norm_l( frac_fx32 ); + frac_fx32 = Mult_32_32( L_shl( pow_getbitsfrompulses_fx[temp_fx1], exp1 ), L_shl( frac_fx32, exp2 ) ); /*21 + exp1 + 30 + exp2 - 31 */ + frac_fx32 = L_shr( frac_fx32, exp1 + exp2 ) + 1; /*20 */ + + if ( sub( exp, integer_fx ) < 0 ) + { + mantissa_fx = L_shr( mantissa_fx, sub( integer_fx, exp ) ); + mantissa_fx = L_add( mantissa_fx, frac_fx32 ); + + exp = integer_fx; + } + else + { + mantissa_fx = L_add( mantissa_fx, L_shr( frac_fx32, sub( exp, integer_fx ) ) ); + } + if ( L_sub( mantissa_fx, 0x200000 ) >= 0 ) + { + exp++; + + mantissa_fx = L_shr( mantissa_fx, 1 ); + } + } + + mantissa_fx = L_shl( mantissa_fx, 2 ); /*22 */ + temp_fx1 = extract_h( mantissa_fx ); + temp32 = L_shl( L_sub( mantissa_fx, L_deposit_h( temp_fx1 ) ), 15 ); /*31 */ + exp1 = sub( norm_l( temp32 ), 1 ); + temp32 = ar_div( L_shl( temp32, exp1 ), temp_fx1 ); /*31 + exp1 */ + temp32 = L_shr( temp32, exp1 + 1 ); /*30 */ + + frac_fx32 = L_sub( 0x40000000, L_shr( temp32, 1 ) ); /*30 */ + frac_fx32 = Mult_32_32( frac_fx32, temp32 ); /*29 */ + frac_fx32 = L_shr( frac_fx32, 13 ); /*16 */ + exp1 = norm_l( temp_fx1 ); + temp_fx1 = Log2_norm_lc( L_shl( temp_fx1, exp1 ) ); /*15 */ + frac_fx32 = frac_fx32 + Mult_32_32( frac_fx32, 950680361 ); /* frac_fx32 *= 1/ln(2) */ + return L_add( L_deposit_h( exp ), L_add( L_shl( temp_fx1, 1 ), frac_fx32 ) ); +} + +void decode_position_ari_fx( + PARCODEC pardec, + Word16 size, + Word16 npulses, + Word16 *nz, + Word32 *position ) +{ + Word16 i, nzp; + Word16 mode_num_nz[TCQ_MAX_BAND_SIZE]; + Word16 prob[TCQ_MAX_BAND_SIZE]; + + Word32 btcq_fx, pnzp_fx; + Word16 integer, frac; + + Word32 cp, scp, fxone, fxp1; + Word16 stpos = 0, pos, ovrflag, temppos, storepos; + + fxone = 32768; + fxp1 = 512 * 32768; + temppos = 0; + storepos = 0; + ovrflag = 0; + + set16_fx( mode_num_nz, 0, TCQ_MAX_BAND_SIZE ); + set16_fx( prob, 0, TCQ_MAX_BAND_SIZE ); + + for ( i = 0; i < size; i++ ) + { + position[i] = 0; + } + + if ( L_sub( npulses, 1 ) > 0 ) + { + btcq_fx = GetBitsFromPulses_fx( npulses, size ); + for ( i = 0; i < L_min( npulses, size ); i++ ) + { + /*calculate the probability of #nz */ + + pnzp_fx = L_sub( L_deposit_h( add( i, 1 ) ), btcq_fx ); + pnzp_fx = L_add( pnzp_fx, L_add( L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[i + 2], table_logcum_fx[size - i] ) ), L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[i + 1], table_logcum_fx[npulses - i] ) ) ) ); + pnzp_fx = L_add( pnzp_fx, 917498 ); /*16 */ + if ( L_sub( pnzp_fx, 0 ) > 0 ) + { + integer = extract_h( pnzp_fx ); + frac = extract_l( L_shr( L_sub( pnzp_fx, L_deposit_h( integer ) ), 1 ) ); /*15 */ + prob[i] = extract_h( L_shl( Pow2( integer, frac ), 16 ) ); /*0 */ + if ( prob[i] == 0 ) + { + prob[i] = 1; + } + } + else + { + prob[i] = 1; + } + } + + ar_make_model( prob, mode_num_nz, min( npulses, size ) ); + *nz = add( 1, (Word16) ar_decode( pardec, mode_num_nz ) ); /*get #nz */ + nzp = *nz; + + if ( nzp == 1 ) + { + Word16 tmp; + mode_num_nz[0] = MAX_AR_FREQ; + for ( i = 0; i < size; i++ ) + { + div_l( &tmp, L_deposit_h( size - i - 1 ), size ); + mode_num_nz[i + 1] = round_fx( L_shr( L_deposit_h( tmp ), 1 ) ); + } + + position[ar_decode( pardec, mode_num_nz )] = 1; + } + else + { + Word16 tmp; + mode_num_nz[0] = MAX_AR_FREQ; + + for ( ; nzp > 0; nzp-- ) + { + scp = fxp1; + temppos = 0; + storepos = 0; + + for ( i = stpos; i < size; i++ ) + { + ovrflag = 0; + + if ( nzp == ( size - i ) ) + { + cp = 0; + } + else + { + div_l( &tmp, L_deposit_h( nzp ), ( size - i ) ); + cp = L_sub( fxone, tmp ); + } + scp = Mult_32_16( scp, extract_l( cp ) ); + mode_num_nz[i + 1 - storepos - stpos] = round_fx( L_shl( scp, 6 ) ); + + if ( ( mode_num_nz[i + 1 - storepos - stpos] == 0 && scp > 0 ) || mode_num_nz[i - storepos - stpos] == mode_num_nz[i + 1 - storepos - stpos] ) + { + ovrflag = 1; + temppos = (Word16) ar_decode( pardec, mode_num_nz ); + storepos += temppos; + scp = fxp1; + + if ( temppos == i - stpos ) /* esc transmitted */ + { + i--; + } + else + { + break; + } + } + } + if ( !ovrflag ) + { + pos = (Word16) ar_decode( pardec, mode_num_nz ) + storepos; + } + else + { + pos = storepos; + } + + position[stpos + pos] = 1; + stpos += pos + 1; + } + } + } + else if ( L_sub( npulses, 1 ) == 0 ) + { + Word16 tmp; + *nz = npulses; + nzp = *nz; + mode_num_nz[0] = MAX_AR_FREQ; + for ( i = 0; i < size; i++ ) + { + div_l( &tmp, L_deposit_h( size - i - 1 ), size ); + mode_num_nz[i + 1] = round_fx( L_shr( L_deposit_h( tmp ), 1 ) ); + } + + position[ar_decode( pardec, mode_num_nz )] = 1; + } + else + { + *nz = 0; + } + + return; +} + + +void decode_magnitude_usq_fx( + ARCODEC *pardec, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *positions, + Word32 *out ) +{ + Word16 i, magnp, magnzp; + Word16 magns[TCQ_MAX_BAND_SIZE], magncout = 0; + + Word16 storemagn, ovrflag, pos, tempmagn = 0, mmodel[MAX_PULSES + 2]; + Word32 cp, scp, fxone, fxp1; + + fxone = 32768; + fxp1 = 512 * 32768; + ovrflag = 0; + + + set16_fx( magns, 1, TCQ_MAX_BAND_SIZE ); + if ( sub( nzpos, npulses ) == 0 ) + { + for ( i = 0; i < size; i++ ) + { + out[i] = positions[i]; + } + return; + } + else if ( sub( nzpos, 1 ) == 0 ) + { + for ( i = 0; i < size; i++ ) + { + if ( positions[i] != 0 ) + { + out[i] = npulses; + return; + } + } + } + + magnzp = sub( nzpos, 1 ); + magnp = sub( npulses, 1 ); + + magncout = 0; + + set32_fx( out, 0, size ); + set16_fx( mmodel, 0, MAX_PULSES + 2 ); + + mmodel[0] = MAX_AR_FREQ; + magncout = 0; + for ( pos = 0; pos < size; pos++ ) + { + scp = fxp1; + if ( positions[pos] != 0 ) + { + storemagn = 0; + + for ( i = 0; i < magnp; i++ ) + { + ovrflag = 0; + + if ( magnzp == ( magnp - i ) ) + { + cp = 0; + } + else + { + Word16 tmp; + div_l( &tmp, L_deposit_h( magnzp ), magnp - i ); + cp = L_sub( fxone, tmp ); + } + + if ( cp == fxone ) + { + break; + } + + scp = Mult_32_16( scp, extract_l( cp ) ); + mmodel[i + 1 - storemagn] = round_fx( L_shl( scp, 6 ) ); + + if ( ( mmodel[i + 1 - storemagn] == 0 && scp > 0 ) || mmodel[i - storemagn] == mmodel[i + 1 - storemagn] ) + { + mmodel[i + 1 - storemagn] = 0; + /* read data */ + tempmagn = (Word16) ar_decode( pardec, mmodel ); + storemagn += tempmagn; + + if ( tempmagn < i ) + { + /* just magnitude */ + ovrflag = 1; + break; + } + else + { + /* esc code */ + scp = fxp1; + i--; + } + } + } + + if ( ovrflag ) + { + out[magncout] = storemagn + 1; + } + else + { + out[magncout] = ar_decode( pardec, mmodel ) + storemagn + 1; + } + magnp -= (Word16) out[magncout]; + magnzp--; + magncout++; + + if ( magnzp == 0 ) /* last magnitude generation */ + { + for ( pos = pos + 1; pos < size; pos++ ) + { + if ( positions[pos] != 0 ) + { + out[magncout] = magnp + 1; + return; + } + else + { + out[magncout] = 0; + magncout++; + } + } + } + else if ( magnzp == magnp ) /* rest magnitudes generation */ + { + for ( pos = pos + 1; pos < size; pos++ ) + { + out[magncout] = positions[pos]; + magncout++; + } + return; + } + } + else + { + out[magncout] = 0; + magncout++; + } + } + + return; +} + +static Word16 quantize_fx( + Word16 val, + Word16 D ) +{ + Word16 qval4_fx; + Word16 retval_fx; + + qval4_fx = shr( abs_s( add( val, 512 ) ), 12 ); + retval_fx = add( shl( qval4_fx, 2 ), DDP_fx[D] ); + /* 2nd zero check */ + if ( D == 0 ) + { + if ( sub( abs_s( sub( shl( abs_s( retval_fx ), 10 ), abs_s( val ) ) ), abs_s( val ) ) > 0 ) + { + retval_fx = 0; + } + } + + return retval_fx; +} + +void decode_mangitude_tcq_fx( + ARCODEC *pardec, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *positions, + Word32 *out, + Word32 *surplus_fx ) +{ + Word32 tcq_bits_fx, bits_fx /*, surplus_fx*/; + Word16 prob0_fx, prob1_fx, num, denum, quantum1_fx, quantum2_fx; + Word16 exp, exp1, exp2, tmp16; + Word32 tmp32; + + Word16 i, j, symbol, st; + Word16 leftp = npulses; /*pulsesnum; */ + Word16 leftnz = nzpos; /*nzpos; */ + Word16 magn_mode[3] = { MAX_AR_FREQ, 0, 0 }; + + bits_fx = 0; + tcq_bits_fx = L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[nzpos], table_logcum_fx[npulses - ( nzpos - 1 )] ) ); + + if ( sub( nzpos, npulses ) == 0 ) + { + for ( i = 0; i < size; i++ ) + { + out[i] = positions[i]; + } + + return; + } + else if ( sub( nzpos, 1 ) == 0 ) + { + for ( i = 0; i < size; i++ ) + { + if ( positions[i] != 0 ) + { + out[i] = npulses; + return; + } + } + } + st = 0; + for ( i = 0; i < size && leftnz > 1; i++ ) + { + out[i] = positions[i]; + if ( positions[i] != 0 ) + { + /*generate the trellis path */ + symbol = 0; + for ( j = 0; j < leftp; j++ ) + { + num = sub( leftnz, 1 ); + denum = sub( leftp, add( j, 1 ) ); + if ( sub( num, denum ) >= 0 ) + { + prob1_fx = MAX_16; + prob0_fx = 0; + } + else + { + exp1 = sub( norm_s( num ), 1 ); + exp2 = norm_s( denum ); + div_s( &prob1_fx, shl( num, exp1 ), shl( denum, exp2 ) ); /*15 + exp1 - exp2 */ + exp = 15 + exp1 - exp2; + prob1_fx = shl( prob1_fx, sub( 15, exp ) ); + prob0_fx = sub( MAX_16, prob1_fx ); + } + if ( L_sub( sub( leftp, j ), leftnz ) == 0 ) + { + symbol = add( j, 1 ); + break; + } + + quantum1_fx = quantize_fx( shl( add( j, 1 ), 10 ), ddec[st][0] ); + quantum2_fx = quantize_fx( shl( add( j, 1 ), 10 ), ddec[st][1] ); + + if ( sub( quantum1_fx, add( j, 1 ) ) != 0 && sub( quantum2_fx, add( j, 1 ) ) != 0 ) + { + prob0_fx = MAX_16; + move16(); + prob1_fx = 0; + move16(); + } + if ( sub( prob0_fx, MAX_16 ) == 0 || sub( prob1_fx, MAX_16 ) == 0 ) + { + symbol = add( j, 1 ); + continue; + } + + /*magn_mode[1] = (int16_t)(prob1 * MAX_AR_FREQ); */ + magn_mode[1] = mult( prob1_fx, MAX_AR_FREQ ); + + if ( ar_decode( pardec, magn_mode ) ) + { + exp1 = norm_s( prob1_fx ); + tmp32 = L_deposit_h( shl( prob1_fx, exp1 ) ); /*exp1 + 15 + 16 */ + tmp16 = Log2_norm_lc( tmp32 ); /*15 */ + bits_fx = L_sub( bits_fx, L_sub( tmp16, L_shl( add( exp1, 1 ), 15 ) ) ); /*15 */ + + symbol = add( j, 1 ); + break; + } + else + { + exp1 = norm_s( prob0_fx ); + tmp32 = L_deposit_h( shl( prob0_fx, exp1 ) ); /*exp1 + 15 + 16 */ + tmp16 = Log2_norm_lc( tmp32 ); /*15 */ + bits_fx = L_sub( bits_fx, L_sub( tmp16, L_shl( add( exp1, 1 ), 15 ) ) ); /*15 */ + } + } + out[i] = symbol; + /*leftp -= symbol; */ + leftp = sub( leftp, symbol ); + leftnz--; + } + + quantum1_fx = quantize_fx( (Word16) out[i], ddec[st][0] ); + quantum2_fx = quantize_fx( (Word16) out[i], ddec[st][1] ); + + /*generate the next state */ + if ( sub( quantum1_fx, (Word16) out[i] ) == 0 ) + { + st = nextstate[st][0]; + } + else + { + st = nextstate[st][1]; + } + } + + /*generate the magnitudes */ + for ( ; i < size; i++ ) + { + out[i] = 0; + if ( positions[i] != 0 ) + { + out[i] = add( sub( leftp, leftnz ), 1 ); + } + } + + if ( sub( nzpos, npulses ) != 0 && sub( nzpos, 1 ) > 0 ) + { + /*update the surplus */ + *surplus_fx = L_add( *surplus_fx, L_sub( tcq_bits_fx, L_shl( bits_fx, 1 ) ) ); + } + + return; +} + +Word16 GetScale_fx( + Word16 blen, + Word32 bits_fx /*Q16*/, + Word32 *surplus_fx /*Q16*/ +) +{ + Word16 pulses = MAX_PULSES, p_est, exp, exp1, exp2, magicnum, tmp; + Word32 t, a, b, ab, estbits_fx = 0; + + magicnum = 24773; /*Q17: 0.188992013101951f; */ + + t = L_shr( L_mult( magicnum, blen ), 2 ); + exp = norm_l( t ); + a = L_shl( 14 - exp, 15 ) + Log2_norm_lc( L_shl( t, exp ) ); + + exp1 = sub( norm_l( bits_fx ), 1 ); + exp2 = norm_s( blen - 1 ); + + div_l( &tmp, L_shl( bits_fx, exp1 ), shl( blen - 1, exp2 ) ); + b = L_shr( L_deposit_l( tmp ), exp1 - exp2 ); + + ab = L_add( a, b ); + + p_est = extract_h( L_shl( Pow2( extract_l( L_shr( ab, 15 ) ), ab & 0x7FFF ), 16 ) ); /* enable saturation of pow2 result */ + + pulses = min( p_est, MAX_PULSES ); + + for ( ; pulses >= 0; pulses-- ) + { + estbits_fx = GetBitsFromPulses_fx( pulses, blen ); + if ( L_sub( bits_fx, estbits_fx ) >= 0 ) + { + break; + } + } + + if ( surplus_fx != NULL ) + { + *surplus_fx = L_add( *surplus_fx, L_sub( bits_fx, estbits_fx ) ); + } + + return pulses; +} + + +void decode_signs_fx( + ARCODEC *pardec, + Word16 size, + Word32 *out ) +{ + Word16 i; + + for ( i = 0; i < size; i++ ) + { + if ( out[i] != 0 ) + { + out[i] = ( ar_decode( pardec, uniform_model ) > 0 ) ? out[i] : -out[i]; + } + } + + return; +} + +Word32 encode_position_ari_fx( + PARCODEC parenc, + float *quants, + Word16 size, + Word32 *est_bits_frame_fx ) +{ + Word16 i; + Word16 nz = 0, pulses = 0; + Word16 prob[TCQ_MAX_BAND_SIZE]; + Word16 model_num_nz[TCQ_MAX_BAND_SIZE]; + float *cur_quants = quants; + Word16 integer, frac; + Word32 /*est_bits_frame_fx, */ btcq_fx = 0, bits_fx = 0, pnzp_fx; + Word32 cp, scp, fxone, fxp1; + Word16 pos; + + fxone = 32768; + fxp1 = 512 * 32768; + + set16_fx( prob, 0, TCQ_MAX_BAND_SIZE ); + set16_fx( model_num_nz, 0, TCQ_MAX_BAND_SIZE ); + + for ( i = 0; i < size; i++ ) + { + pulses = add( pulses, abs_s( (int16_t) cur_quants[i] ) ); + if ( cur_quants[i] != 0 ) + { + nz++; + } + } + + btcq_fx = GetBitsFromPulses_fx( pulses, size ); + /* Estimate TCQ bits */ + bits_fx = L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[nz + 1], table_logcum_fx[size - nz + 1] ) ); + bits_fx = L_add( bits_fx, L_sub( btcq_fx, L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[nz + 1], table_logcum_fx[size - nz + 1] ) ) ) ); + bits_fx = L_sub( bits_fx, L_sub( table_logcum_fx[pulses], L_add( table_logcum_fx[nz], table_logcum_fx[pulses - ( nz - 1 )] ) ) ); + + bits_fx = L_sub( bits_fx, nz ); + *est_bits_frame_fx = L_add( *est_bits_frame_fx, bits_fx ); + + /*caculate the #nz probability */ + for ( i = 0; i < min( pulses, size ); i++ ) + { + pnzp_fx = L_sub( L_deposit_h( add( i, 1 ) ), btcq_fx ); + + pnzp_fx = L_add( pnzp_fx, L_add( L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[i + 2], table_logcum_fx[size - i] ) ), L_sub( table_logcum_fx[pulses], L_add( table_logcum_fx[i + 1], table_logcum_fx[pulses - i] ) ) ) ); + + pnzp_fx = L_add( pnzp_fx, 917498 ); /*16 */ + if ( L_sub( pnzp_fx, 0 ) > 0 ) + { + integer = extract_h( pnzp_fx ); + frac = extract_l( L_shr( L_sub( pnzp_fx, L_deposit_h( integer ) ), 1 ) ); /*15 */ + prob[i] = extract_h( L_shl( Pow2( integer, frac ), 16 ) ); /*0 */ + + /*zero probability will incur problems in ar_make_model() */ + if ( prob[i] == 0 ) + { + prob[i] = 1; + } + } + else + { + prob[i] = 1; + } + } + + ar_make_model( prob, model_num_nz, min( pulses, size ) ); + + if ( sub( nz, 1 ) > 0 ) + { + ar_encode( parenc, model_num_nz, nz - 1 ); /*encode #nz */ + + scp = fxp1; + pos = 0; + for ( i = 0; i < size && nz > 0; i++ ) + { + if ( nz == ( size - i ) ) + { + cp = 0; + } + else + { + Word16 tmp; + div_l( &tmp, L_deposit_h( nz ), ( size - i ) ); + cp = L_sub( fxone, tmp ); + } + scp = Mult_32_16( scp, extract_l( cp ) ); + model_num_nz[pos + 1] = round_fx( L_shl( scp, 6 ) ); + + if ( ( model_num_nz[pos + 1] == 0 && scp > 0 ) || model_num_nz[pos] == model_num_nz[pos + 1] ) + { + model_num_nz[pos + 1] = 0; + ar_encode( parenc, model_num_nz, pos ); + i--; + scp = fxp1; + pos = 0; + continue; + } + + if ( cur_quants[i] != 0 ) + { + ar_encode( parenc, model_num_nz, pos ); + pos = 0; + scp = fxp1; + nz--; + } + else + { + pos++; + } + } + } + else if ( sub( nz, 1 ) == 0 ) + { + if ( sub( pulses, 1 ) > 0 ) + { + /*temp -= log2_f((float)(model_num_nz[nz-1] - model_num_nz[nz]) / MAX_AR_FREQ); */ + ar_encode( parenc, model_num_nz, 0 ); /*encode #nz */ + } + + pos = 0; + for ( i = 0; i < size; i++ ) + { + Word16 tmp; + div_l( &tmp, L_deposit_h( size - i - 1 ), size ); + model_num_nz[i + 1] = round_fx( L_shr( L_deposit_h( tmp ), 1 ) ); + + if ( cur_quants[i] != 0 ) + { + pos = i; + } + } + ar_encode( parenc, model_num_nz, pos ); /* encode pos */ + } + return bits_fx; +} + + +Word32 encode_magnitude_tcq_fx( + ARCODEC *parenc, + float *magn_fx, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *savedstates, + Word32 *est_frame_bits_fx ) +{ + Word32 tcq_bits_fx, bits_fx /*, est_frame_bits_fx*/; + Word16 prob0_fx, prob1_fx, num, denum, quantum1_fx, quantum2_fx; + Word16 exp, exp1, exp2; + + Word16 i, j; + Word32 st; + Word16 magn_mode[3] = { MAX_AR_FREQ, 0, 0 }; + + Word16 leftp = npulses; /*pulsesnum; */ + Word16 leftnz = nzpos; /*nzpos; */ + + bits_fx = 0; + + tcq_bits_fx = L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[nzpos], table_logcum_fx[npulses - ( nzpos - 1 )] ) ); + + *est_frame_bits_fx = L_add( *est_frame_bits_fx, tcq_bits_fx ); + + if ( sub( nzpos, npulses ) == 0 || sub( nzpos, 1 ) == 0 ) + { + return bits_fx; + } + + st = 0; + for ( i = 0; i < size && leftnz > 1; i++ ) + { + st = savedstates[i]; + if ( magn_fx[i] != 0 ) + { + for ( j = 0; j < leftp; j++ ) + { + /*calculate the two path probs point to next two states */ + num = sub( leftnz, 1 ); + denum = sub( leftp, add( j, 0x1 ) ); + if ( sub( num, denum ) >= 0 ) + { + prob1_fx = MAX_16; + prob0_fx = 0; + } + else + { + exp1 = sub( norm_s( num ), 1 ); + exp2 = norm_s( denum ); + div_s( &prob1_fx, shl( num, exp1 ), shl( denum, exp2 ) ); /*15 + exp1 - exp2 */ + exp = 15 + exp1 - exp2; + prob1_fx = shl( prob1_fx, sub( 15, exp ) ); + prob0_fx = sub( MAX_16, prob1_fx ); + } + + quantum1_fx = quantize_fx( shl( add( j, 1 ), 10 ), ddec[st][0] ); + quantum2_fx = quantize_fx( shl( add( j, 1 ), 10 ), ddec[st][1] ); + + if ( sub( quantum1_fx, add( j, 1 ) ) != 0 && sub( quantum2_fx, add( j, 1 ) ) != 0 ) + { + prob0_fx = MAX_16; + prob1_fx = 0; + } + if ( sub( prob0_fx, MAX_16 ) == 0 || sub( prob1_fx, MAX_16 ) == 0 ) + { + continue; + } + + magn_mode[1] = mult( prob1_fx, MAX_AR_FREQ ); + if ( sub( j, sub( abs_s( (int16_t) magn_fx[i] ), 1 ) ) < 0 ) + { + ar_encode( parenc, magn_mode, 0 ); + } + else + { + if ( sub( leftp, j ) > leftnz ) + { + ar_encode( parenc, magn_mode, 1 ); + } + break; + } + } + + leftnz--; + leftp = sub( leftp, abs_s( (int16_t) magn_fx[i] ) ); + } + } + + return bits_fx; +} + + +Word32 encode_signs_fx( + ARCODEC *parenc, + float *magn, + Word16 size, + Word16 npos, + Word32 *est_frame_bits_fx ) +{ + Word32 i, sign; + + *est_frame_bits_fx = L_add( *est_frame_bits_fx, L_deposit_h( npos ) ); + for ( i = 0; i < size; i++ ) + { + if ( magn[i] != 0 ) + { + sign = ( magn[i] > 0 ) ? 1 : 0; + ar_encode_uniform( parenc, (uint16_t) sign, 1 ); + } + } + + return L_deposit_h( npos ); +} + + +Word32 encode_magnitude_usq_fx( + ARCODEC *parenc, + float *magn_fx, + Word16 size, + Word16 npulses, + Word16 nzpos, + Word32 *est_frame_bits_fx ) +{ + Word16 i, j, k, magnp, magnzp; + Word16 magn_position[MAX_PULSES]; + Word32 /*est_frame_bits_fx, */ bits_fx; + + Word16 pos, model_m[MAX_PULSES + 2]; + Word32 fxone, fxp1, cp, scp; + + fxone = 32768; + fxp1 = 512 * 32768; + + /*estimate fac bits */ + bits_fx = L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[nzpos], table_logcum_fx[npulses - nzpos + 1] ) ); + + *est_frame_bits_fx = L_add( *est_frame_bits_fx, bits_fx ); + + if ( sub( npulses, nzpos ) == 0 || sub( nzpos, 1 ) == 0 ) + { + return bits_fx; + } + magnp = sub( npulses, 1 ); + magnzp = sub( nzpos, 1 ); + + /*generate the binary sequences of magnitudes */ + k = 0; + for ( i = 0; i < size; i++ ) + { + if ( magn_fx[i] != 0 ) + { + for ( j = 0; j < abs_s( (int16_t) magn_fx[i] ) - 1; j++ ) + { + magn_position[k++] = 0; + } + magn_position[k++] = 1; + } + } + + set16_fx( model_m, 0, MAX_PULSES + 2 ); + scp = fxp1; + model_m[0] = MAX_AR_FREQ; + pos = 0; + for ( i = 0; i < npulses - 1 && magnzp > 0; i++ ) + { + if ( magnzp == magnp ) + { + cp = 0; + } + else + { + Word16 tmp; + div_l( &tmp, L_deposit_h( magnzp ), magnp ); + cp = L_sub( fxone, tmp ); + } + scp = Mult_32_16( scp, extract_l( cp ) ); + model_m[pos + 1] = round_fx( L_shl( scp, 6 ) ); + + if ( ( model_m[pos + 1] == 0 && scp > 0 ) || model_m[pos] == model_m[pos + 1] ) + { + model_m[pos + 1] = 0; + + ar_encode( parenc, model_m, pos ); + pos = 0; + i--; + scp = fxp1; + continue; + } + + if ( magn_position[i] != 0 ) + { + ar_encode( parenc, model_m, pos ); + pos = 0; + magnzp--; + scp = fxp1; + } + else + { + pos++; + } + + magnp--; + } + return bits_fx; +} + + +static void transmission_bits( + PARCODEC arInst, + int16_t bit ) +{ + bitstream_save_bit( arInst->bsInst, bit ); + arInst->num_bits++; + bit = !bit; + + for ( ; arInst->bits_to_follow > 0 && arInst->num_bits < arInst->max_bits; arInst->bits_to_follow-- ) + { + bitstream_save_bit( arInst->bsInst, bit ); + arInst->num_bits++; + } + + return; +} + +void ar_encoder_start( + PARCODEC arInst, + TCQ_PBITSTREAM bsInst, + int16_t max_bits ) +{ + arInst->bsInst = bsInst; + + arInst->low = 0; + arInst->high = AR_TOP; + arInst->bits_to_follow = 0; + + arInst->num_bits = 0; + arInst->max_bits = max_bits; + + return; +} + + +static void ar_encode( + PARCODEC arInst, + const int16_t *model, + int32_t symbol ) +{ + uint32_t range, high, low; + + high = arInst->high; + low = arInst->low; + + symbol++; + range = high - low + 1; + + high = low + ( range * model[symbol - 1] ) / model[0] - 1; + low = low + ( range * model[symbol] ) / model[0]; + + for ( ;; ) + { + if ( high < AR_HALF ) + { + transmission_bits( arInst, 0 ); + } + else + { + if ( low >= AR_HALF ) + { + transmission_bits( arInst, 1 ); + + low -= AR_HALF; + high -= AR_HALF; + } + else + { + if ( low >= AR_FIRST && high < AR_THIRD ) + { + arInst->bits_to_follow++; + + low -= AR_FIRST; + high -= AR_FIRST; + } + else + { + break; + } + } + } + + low = low << 1; + high = ( high << 1 ) + 1; + } + + arInst->high = high; + arInst->low = low; + + return; +} + + +static void ar_encode_uniform( + PARCODEC arInst, + uint16_t data, + const int16_t bits ) +{ + int16_t i; + + for ( i = 0; i < bits; i++ ) + { + ar_encode( arInst, uniform_model, data & 0x1 ); + data >>= 1; + } + + return; +} + + +void ar_encoder_done( + PARCODEC arInst ) +{ + arInst->bits_to_follow++; + transmission_bits( arInst, arInst->low >= AR_FIRST ); + + return; +} + + +void ar_decoder_start( + PARCODEC arInst, + TCQ_PBITSTREAM bsInst ) +{ + int16_t i; + + arInst->bsInst = bsInst; + + arInst->low = 0; + arInst->high = AR_TOP; + arInst->value = 0; + + for ( i = 0; i < AR_BITS; i++ ) + { + arInst->value = ( arInst->value << 1 ) + bitstream_load_bit( arInst->bsInst ); + } + + return; +} + + +static int32_t ar_decode( + PARCODEC arInst, + const int16_t *model ) +{ + uint32_t range; + int16_t cum; + int16_t symbol; + + range = (uint32_t) ( arInst->high - arInst->low ) + 1; + cum = (int16_t) ( ( ( (uint32_t) ( arInst->value - arInst->low ) + 1 ) * model[0] - 1 ) / range ); + + for ( symbol = 1; model[symbol] > cum; symbol++ ) + { + ; + } + + arInst->high = arInst->low + ( range * model[symbol - 1] ) / model[0] - 1; + arInst->low = arInst->low + ( range * model[symbol] ) / model[0]; + + for ( ;; ) + { + if ( arInst->high >= AR_HALF ) + { + if ( arInst->low >= AR_HALF ) + { + arInst->value -= AR_HALF; + arInst->low -= AR_HALF; + arInst->high -= AR_HALF; + } + else + { + if ( arInst->low >= AR_FIRST && arInst->high < AR_THIRD ) + { + arInst->value -= AR_FIRST; + arInst->low -= AR_FIRST; + arInst->high -= AR_FIRST; + } + else + { + break; + } + } + } + arInst->low <<= 1; + arInst->high = ( arInst->high << 1 ) + 1; + arInst->value = ( arInst->value << 1 ) + bitstream_load_bit( arInst->bsInst ); + } + + return ( symbol - 1 ); +} + +void ar_decoder_done( + PARCODEC arInst ) +{ + bitstream_rollback( arInst->bsInst, AR_BITS - 2 ); + + return; +} + + +static int32_t ar_make_model( + const int16_t *freq, + int16_t *model, + const int16_t len ) +{ + int16_t dist; + uint32_t sum = 0; + uint32_t cum = 0; + int16_t i; + + for ( i = 0; i < len; i++ ) + { + sum += freq[i]; + } + + if ( sum == 0 ) + { + return 0; + } + + for ( i = len;; i-- ) + { + model[i] = (int16_t) ( ( cum * MAX_AR_FREQ ) / sum ); + + if ( !i ) + { + break; + } + + cum += freq[i - 1]; + } + + + for ( i = 0; i < len - 1; i++ ) + { + dist = model[i] - model[i + 1]; + + if ( dist <= 0 ) + { + model[i + 1] += dist - 1; + } + } + + for ( i = len; i; i-- ) + { + dist = model[i - 1] - model[i]; + + if ( dist <= 0 ) + { + model[i - 1] -= dist - 1; + } + } + + return ( model[0] > model[1] ); +} + +static void bitstream_save_bit( + TCQ_PBITSTREAM pBS, + const int16_t bit ) +{ + uint8_t cur; + + cur = pBS->buf[pBS->numByte]; + + cur = (uint8_t) ( cur | ( bit << pBS->curPos-- ) ); + pBS->buf[pBS->numByte] = cur; + pBS->numbits++; + + if ( pBS->curPos < 0 ) + { + pBS->curPos = 7; + pBS->numByte++; + } + + return; +} + + +static uint32_t bitstream_load_bit( + TCQ_PBITSTREAM pBS ) +{ + uint32_t bit; + signed char *curPos; + + /* safety check in case of bit errors */ + if ( pBS->numByte >= pBS->maxBytes ) + { + return 0; + } + + curPos = &pBS->curPos; + bit = ( ( pBS->buf[pBS->numByte] >> ( *curPos )-- ) & 0x00000001 ); + + if ( *curPos < 0 ) + { + pBS->numByte++; + *curPos = 7; + } + + return bit; +} + + +static void bitstream_rollback( + TCQ_PBITSTREAM pBS, + int16_t numBits ) +{ + while ( numBits > 0 ) + { + pBS->curPos++; + pBS->numbits--; + if ( pBS->curPos == 8 ) + { + pBS->curPos = 0; + pBS->numByte--; + } + numBits--; + } + + return; +} + + +static float quantize( + float val, + const int16_t D ) +{ + int32_t qval4; + float retval; /* = qval4*4.0f + DD[D]; */ + + qval4 = (int32_t) fabs( ( val + 0.5 ) / 4.0 ); + retval = qval4 * 4.0f + DDP[D]; + + /* 2nd zero check */ + if ( D == 0 ) + { + if ( fabs( fabs( retval ) - fabs( val ) ) > fabs( val ) ) + { + retval = 0; + } + } + + return retval; +} + + +static void TCQnew( + float *v, + float scale, + int16_t length, + float *vout, + int32_t pulses, + int32_t *pulsesout, + int32_t *nzposout, + int32_t *savedstates, + int32_t *lasttrellislevel, + int32_t terminate ) +{ + int16_t i, st, dminpos, position, pulsesnum, nzpos = 0; + float dmin, quantum1, quantum2, curdist1, curdist2, newdist1, newdist2, signq; + + float metric[STATES][TCQ_MAX_BAND_SIZE]; + int16_t path[STATES][TCQ_MAX_BAND_SIZE]; + int16_t quant[STATES][TCQ_MAX_BAND_SIZE]; + int16_t pused[STATES][TCQ_MAX_BAND_SIZE]; + + set_f( *metric, 0.0f, STATES * TCQ_MAX_BAND_SIZE ); + set_s( *path, 0, STATES * TCQ_MAX_BAND_SIZE ); + set_s( *quant, 0, STATES * TCQ_MAX_BAND_SIZE ); + set_s( *pused, 0, STATES * TCQ_MAX_BAND_SIZE ); + + /* Initialize metric */ + for ( st = 1; st < STATES; st++ ) + { + metric[st][0] = 1000; + } + for ( st = 2; st < STATES; st++ ) + { + metric[st][1] = 1000; + } + for ( st = 4; st < STATES; st++ ) + { + metric[st][2] = 1000; + } + + /* Viterbi for input sequence */ + for ( i = 0; i < length; i++ ) /* cycle over symbols */ + { + for ( st = 0; st < STATES; st++ ) /* cycle over conditions */ + { + curdist1 = metric[step_tcq[st][0]][i]; + curdist2 = metric[step_tcq[st][1]][i]; + + /* step 1 */ + quantum1 = quantize( v[i] * scale, denc[st][0] ); + newdist1 = (float) ( quantum1 - fabs( v[i] ) * scale ); + newdist1 *= newdist1; + + if ( quantum1 + pused[step_tcq[st][0]][i] > pulses && terminate ) + { + newdist1 = 10000.0f; /* pulses check */ + } + + /* step 2 */ + quantum2 = quantize( v[i] * scale, denc[st][1] ); + newdist2 = (float) ( quantum2 - fabs( v[i] ) * scale ); + newdist2 *= newdist2; + + if ( quantum2 + pused[step_tcq[st][1]][i] > pulses && terminate ) + { + newdist2 = 10000.0f; /* pulses check */ + } + + /* decision */ + if ( curdist1 + newdist1 < curdist2 + newdist2 ) + { + path[st][i + 1] = step_tcq[st][0]; + metric[st][i + 1] = curdist1 + newdist1; + quant[st][i + 1] = (int16_t) quantize( v[i] * scale, denc[st][0] ); + pused[st][i + 1] = (int16_t) ( pused[step_tcq[st][0]][i] + abs( quant[st][i + 1] ) ); + } + else + { + path[st][i + 1] = step_tcq[st][1]; + metric[st][i + 1] = curdist2 + newdist2; + quant[st][i + 1] = (int16_t) quantize( v[i] * scale, denc[st][1] ); + pused[st][i + 1] = (int16_t) ( pused[step_tcq[st][1]][i] + abs( quant[st][i + 1] ) ); + } + } + } + + /* Find path with minimal metric */ + dminpos = 0; + dmin = metric[dminpos][length]; + for ( i = 1; i < STATES; i++ ) + { + if ( ( dmin > metric[i][length] && pused[i][length] == pulses ) || + ( pused[dminpos][length] != pulses && pused[i][length] == pulses ) ) + { + dmin = metric[i][length]; + dminpos = i; + } + } + + /* Trace back to get output */ + pulsesnum = 0; + position = dminpos; + + for ( i = length; i > 0; i-- ) + { + signq = ( v[i - 1] > 0.0f ) ? ( 1.0f ) : ( -1.0f ); + vout[i - 1] = signq * quant[position][i]; + + position = path[position][i]; + savedstates[i - 1] = position; + + /* calculate output pulses number & nz */ + pulsesnum += (int16_t) fabs( vout[i - 1] ); /*quant[position][i]; */ + if ( fabs( vout[i - 1] ) > 0.0f ) + { + if ( nzpos == 0 ) + { + *lasttrellislevel = i; + } + + nzpos++; + } + } + + if ( pulsesout != NULL ) + { + *pulsesout = pulsesnum; + } + if ( nzposout != NULL ) + { + *nzposout = nzpos; + } + + return; +} + + +float GetISCScale( + float *quants, + int16_t size, + Word32 bits_fx, + float *magn, + float *qscale, + Word32 *surplus_fx, + float *pulses, + int32_t *savedstates, + int16_t noTCQ, + int32_t *nzpout, + int16_t *bcount, + float *abuffer, + float *mbuffer, + float *sbuffer ) +{ + float scale, m, t, actualt, magnbits = 0.0f; + int32_t pulsesnum, pos, terminate, leftp, leftnz, trellislevel, st; + int32_t i, j, nzpos, direction, pulsescurr, nzposcurr, lasttrellislevel; + float dist[TCQ_MAX_BAND_SIZE]; + float aquants[TCQ_MAX_BAND_SIZE]; + float dmin, prob0, prob1, quantum1, quantum2; + float sx2 = 0, sy2 = 0, sxy = 0, g; + int32_t pn = 0; + float pt = 0.f; + int32_t diff; + int16_t sign; + int32_t m_int; + int8_t flag_g1; + + set_f( dist, 0.0f, TCQ_MAX_BAND_SIZE ); + set_f( aquants, 0.0f, TCQ_MAX_BAND_SIZE ); + + if ( bits_fx < 0 ) + { + pulsesnum = 0; + + if ( surplus_fx != NULL ) + { + *surplus_fx = L_add( *surplus_fx, bits_fx ); + } + } + else + { + pulsesnum = GetScale_fx( size, bits_fx, surplus_fx ); + } + *nzpout = 0; + + if ( pulses != NULL ) + { + *pulses = (float) pulsesnum; + } + + if ( pulsesnum > 0 ) + { + /* Initial quantization */ + for ( i = 0, m = 0; i < size; i++ ) + { + aquants[i] = (float) fabs( quants[i] ); + m += aquants[i]; + } + + scale = ( pulsesnum + EPSILON ) / ( m + EPSILON ); + + for ( i = 0, t = 0.0f; i < size; i++ ) + { + magn[i] = (float) ( (int16_t) ( 0.5f + aquants[i] * scale ) ); + + t += magn[i]; + } + + /* Pulses redistribution */ + while ( t != pulsesnum ) + { + pn = 0; + pt = 0.f; + + + for ( i = 0, nzpos = 0; i < size; i++ ) + { + if ( magn[i] > 0.0f ) + { + pn += (int32_t) magn[i]; + pt += aquants[i]; + } + } + + direction = ( pulsesnum - t > 0 ) ? ( 1 ) : ( -1 ); + + /* new alg */ + { + for ( i = 0; i < size; i++ ) + { + sxy += aquants[i] * magn[i]; + sx2 += aquants[i] * aquants[i]; + sy2 += magn[i] * magn[i]; + } + for ( i = 0; i < size; i++ ) + { + if ( magn[i] > 0.0f ) + { + g = ( pt ) / ( pn + direction + EPSILON ); + } + else + { + g = ( pt + aquants[i] ) / ( pn + direction + EPSILON ); + } + + dist[i] = sx2 - 2.0f * ( sxy + direction * aquants[i] ) * g + g * g * ( sy2 + 2.0f * magn[i] * direction + 1.0f ); + } + } + + { + pos = 0; + dmin = dist[0]; + + /* find min */ + for ( i = 1; i < size; i++ ) + { + if ( dmin > dist[i] ) + { + pos = i; + dmin = dist[i]; + } + } + + magn[pos] += direction; + t += direction; + } + } + + /* calculate actual nz positions */ + actualt = 0.0f; + for ( i = 0, nzpos = 0; i < size; i++ ) + { + if ( magn[i] > 0.0f ) + { + if ( quants[i] < 0 ) + { + magn[i] *= -1; + } + + actualt += aquants[i]; + nzpos++; + } + } + + /* calculate scale */ + if ( actualt > 0 ) + { + scale = pulsesnum / actualt; + } + else + { + scale = FLT_MAX; + } + *qscale = scale; + *nzpout = nzpos; + + if ( ( nzpos != pulsesnum && nzpos > 1 ) && noTCQ == 0 ) + { + terminate = 1; + TCQnew( quants, scale, size, magn, pulsesnum, &pulsescurr, &nzposcurr, savedstates, &lasttrellislevel, terminate ); + + if ( pulsesnum > pulsescurr ) + { + scale *= 1.1f; + } + + if ( pulsesnum < pulsescurr ) + { + scale *= 0.9f; + } + if ( pulsesnum > pulsescurr ) + { + diff = pulsesnum - pulsescurr; + + for ( i = size - 1; i >= 0; i-- ) + { + if ( fabs( magn[i] ) > 0 ) + { + sign = ( magn[i] > 0 ) ? ( 1 ) : ( -1 ); + magn[i] = (float) ( sign * ( fabs( magn[i] ) + diff ) ); + + break; + } + } + } + else if ( pulsesnum < pulsescurr ) + { + diff = pulsescurr - pulsesnum; + + for ( i = size - 1; i >= 0 && diff > 0; i-- ) + { + if ( fabs( magn[i] ) > 0 ) + { + sign = ( magn[i] > 0 ) ? ( 1 ) : ( -1 ); + m_int = (int32_t) fabs( magn[i] ); + + if ( diff < m_int ) + { + magn[i] = (float) ( sign * ( fabs( magn[i] ) - diff ) ); + break; + } + else + { + diff = diff - m_int; + magn[i] = 0; + nzposcurr--; + } + } + } + } + + pulsescurr = pulsesnum; + + /* Magnitudes coding */ + { + leftp = pulsescurr; /*pulsesnum; */ + leftnz = nzposcurr; /*nzpos; */ + trellislevel = 0; + + for ( i = 0; i < size && leftnz > 1; i++ ) + { + if ( magn[i] != 0.0f ) + { + for ( j = 0; j < leftp; j++ ) + { + prob1 = ( leftnz - 1.0f ) / ( leftp - j - 1.0f ); + prob0 = 1.0f - prob1; + + st = savedstates[trellislevel]; + quantum1 = (float) quantize( (float) ( j + 1 ), ddec[st][0] ); + quantum2 = (float) quantize( (float) ( j + 1 ), ddec[st][1] ); + + if ( quantum1 != ( j + 1 ) && quantum2 != ( j + 1 ) ) + { + /* this magnitude is not possible so set probabilities */ + prob0 = 1.0f; + prob1 = 0.0f; + } + + if ( j < fabs( magn[i] ) - 1 ) + { + magnbits -= log2_f( prob0 ); + } + else + { + magnbits -= log2_f( prob1 ); + break; + } + } + + leftnz--; + leftp -= (int32_t) fabs( magn[i] ); + } + + trellislevel++; + } + + /* Update actual occured surplus */ + *nzpout = nzposcurr; + } + } + + if ( *nzpout > 1 && bcount != NULL ) + { + flag_g1 = 0; + + for ( i = 0; i < size; i++ ) + { + if ( fabs( magn[i] ) > 1.0f ) + { + flag_g1 = 1; + } + } + /* prepare vector for TCQ */ + for ( i = 0; i < size && flag_g1 && *bcount < 2 * TCQ_AMP; i++ ) + { + if ( fabs( magn[i] ) > 0.0f ) + { + abuffer[*bcount] = quants[i]; + mbuffer[*bcount] = magn[i]; + sbuffer[*bcount] = scale; + + ( *bcount )++; + } + } + } + + if ( actualt > 0 ) + { + *qscale = pulsesnum / actualt; + } + else + { + *qscale = FLT_MAX; + } + } + + return magnbits; +} + + +void InitLSBTCQ( + int16_t *bcount ) +{ + *bcount = 0; + + return; +} + + +void TCQLSB( + int16_t bcount, + float *abuffer, + float *mbuffer, + float *sbuffer, + int16_t *dpath ) +{ + int16_t i, st, dminpos, position; + float q = QTCQ; + float dmin, curdist1, curdist2, newdist1, newdist2; + float metric[STATES_LSB][TCQ_LSB_SIZE]; + int16_t path[STATES_LSB][TCQ_LSB_SIZE]; + int16_t quant[STATES_LSB][TCQ_LSB_SIZE]; + int16_t dquant[STATES_LSB][TCQ_LSB_SIZE]; + int16_t qout[TCQ_LSB_SIZE]; + float q1, q2, s1, s2, a1, a2, sign1, sign2; + float dbuffer[MAX_PULSES]; + + set_f( *metric, 0.0f, STATES_LSB * TCQ_LSB_SIZE ); + set_s( *path, 0, STATES_LSB * TCQ_LSB_SIZE ); + set_s( *quant, 0, STATES_LSB * TCQ_LSB_SIZE ); + set_s( *dquant, 0, STATES_LSB * TCQ_LSB_SIZE ); + set_s( qout, 0, TCQ_LSB_SIZE ); + set_f( dbuffer, 0.0f, MAX_PULSES ); + + metric[1][0] = 16777216.0f; + metric[2][0] = 16777216.0f; + metric[3][0] = 16777216.0f; + + for ( i = 0; i < 2 * TCQ_AMP; i += 2 ) + { + q1 = mbuffer[i]; + q2 = mbuffer[i + 1]; + + s1 = sbuffer[i]; + s2 = sbuffer[i + 1]; + + a1 = abuffer[i]; + a2 = abuffer[i + 1]; + + /* cycle over conditions */ + for ( st = 0; st < 4; st++ ) + { + curdist1 = metric[step_LSB[st][0]][i / 2]; + curdist2 = metric[step_LSB[st][1]][i / 2]; + + /* step 1 */ + sign1 = ( denc_LSB[st][0] & 0x1 ) ? ( q ) : ( -q ); + sign2 = ( denc_LSB[st][0] & 0x2 ) ? ( q ) : ( -q ); + newdist1 = ( a1 - ( q1 + sign1 ) / s1 ) * ( a1 - ( q1 + sign1 ) / s1 ) + ( a2 - ( q2 + sign2 ) / s2 ) * ( a2 - ( q2 + sign2 ) / s2 ); + + /* step 2 */ + sign1 = ( denc_LSB[st][1] & 0x1 ) ? ( q ) : ( -q ); + sign2 = ( denc_LSB[st][1] & 0x2 ) ? ( q ) : ( -q ); + newdist2 = ( a1 - ( q1 + sign1 ) / s1 ) * ( a1 - ( q1 + sign1 ) / s1 ) + ( a2 - ( q2 + sign2 ) / s2 ) * ( a2 - ( q2 + sign2 ) / s2 ); + + /* decision */ + if ( curdist1 + newdist1 < curdist2 + newdist2 ) + { + path[st][i / 2 + 1] = step_LSB[st][0]; + metric[st][i / 2 + 1] = curdist1 + newdist1; + quant[st][i / 2 + 1] = 0; + dquant[st][i / 2 + 1] = dqnt_LSB[step_LSB[st][0]][st]; + } + else + { + path[st][i / 2 + 1] = step_LSB[st][1]; + metric[st][i / 2 + 1] = curdist2 + newdist2; + quant[st][i / 2 + 1] = 1; + dquant[st][i / 2 + 1] = dqnt_LSB[step_LSB[st][0]][st]; + } + } + } + + /* Find path with minimal metric */ + dminpos = 0; + dmin = metric[dminpos][i / 2]; + for ( st = 1; st < 4; st++ ) + { + if ( dmin > metric[st][i / 2] ) + { + dmin = metric[st][i / 2]; + dminpos = st; + } + } + + /* Trace back to get output */ + position = dminpos; + + for ( ; i >= 0; i -= 2 ) + { + qout[i / 2] = quant[position][i / 2 + 1]; + dpath[i / 2] = dquant[position][i / 2 + 1]; + + dbuffer[i] = ( denc_LSB[position][qout[i / 2]] & 0x1 ) ? ( q ) : ( -q ); + dbuffer[i + 1] = ( denc_LSB[position][qout[i / 2]] & 0x2 ) ? ( q ) : ( -q ); + + position = path[position][i / 2 + 1]; + } + + /* add decoded sequence to quanta */ + for ( i = 0; i < bcount; i++ ) + { + mbuffer[i] += dbuffer[i]; + } + + return; +} + +void TCQLSBdec( + int16_t *dpath, + float *mbuffer, + int16_t bcount ) +{ + float q = QTCQ; + int16_t i, state = 0; + + for ( i = 0; i < bcount / 2; i++ ) + { + mbuffer[2 * i] = ( ddec_LSB[state][dpath[i]] & 0x1 ) ? ( q ) : ( -q ); + mbuffer[2 * i + 1] = ( ddec_LSB[state][dpath[i]] & 0x2 ) ? ( q ) : ( -q ); + + state = dstep_LSB[state][dpath[i]]; + } + + return; +} + +void SaveTCQdata( + PARCODEC arInst, + int16_t *dpath, + int16_t bcount ) +{ + int16_t i; + + for ( i = 0; i < bcount; i++ ) + { + ar_encode_uniform( arInst, dpath[i], 1 ); + } + + return; +} + +void LoadTCQdata( + PARCODEC arInst, + int16_t *dpath, + int16_t bcount ) +{ + int16_t i; + + for ( i = 0; i < bcount; i++ ) + { + dpath[i] = (int16_t) ar_decode( arInst, uniform_model ); + } + + return; +} + +void RestoreTCQdec( + int32_t *magn, + int16_t size, + int16_t *bcount, + float *mbuffer ) +{ + int16_t i, nzpos = 0, flag_g1 = 0; + + /* calculate actual nz positions */ + for ( i = 0, nzpos = 0; i < size; i++ ) + { + if ( magn[i] != 0 ) + { + nzpos++; + if ( abs( magn[i] ) > 1 ) + { + flag_g1 = 1; + } + magn[i] *= (int32_t) ( 1.0f / QTCQ ); + } + } + + if ( nzpos > 1 ) + { + for ( i = 0; i < size && flag_g1 && *bcount < 2 * TCQ_AMP; i++ ) + { + if ( magn[i] != 0 ) + { + mbuffer[*bcount] = magn[i] + ( 1.0f / QTCQ ) * mbuffer[*bcount]; + magn[i] = round_f( mbuffer[*bcount] ); + ( *bcount )++; + } + } + } + + return; +} + + +void RestoreTCQ( + float *magn, + int16_t size, + int16_t *bcount, + float *mbuffer ) +{ + int16_t i, nzpos = 0, flag_g1 = 0; + + /* calculate actual nz positions */ + for ( i = 0, nzpos = 0; i < size; i++ ) + { + if ( magn[i] != 0.0f ) + { + nzpos++; + if ( fabs( magn[i] ) > 1.0f ) + { + flag_g1 = 1; + } + } + } + + if ( nzpos > 1 ) + { + for ( i = 0; i < size && flag_g1 && *bcount < 2 * TCQ_AMP; i++ ) + { + if ( fabs( magn[i] ) > 0.0f ) + { + magn[i] = mbuffer[*bcount]; + ( *bcount )++; + } + } + } + + return; +} diff --git a/lib_com/tcx_ltp.c b/lib_com/tcx_ltp.c new file mode 100644 index 0000000000..160a6e7875 --- /dev/null +++ b/lib_com/tcx_ltp.c @@ -0,0 +1,1097 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------- + * Local constants + *-------------------------------------------------------------------*/ + +#define ALPHA 0.85f + +/*------------------------------------------------------------------- + * tcx_ltp_get_lpc() + * + * + *-------------------------------------------------------------------*/ + +static void tcx_ltp_get_lpc( + float *input, + const int16_t length, + float *A, + const int16_t lpcorder ) +{ + int16_t i, j; + float s, r[TCXLTP_LTP_ORDER + 1]; + + for ( i = 0; i <= lpcorder; i++ ) + { + s = 0.0; + + for ( j = 0; j < length - i; j++ ) + { + s += input[j] * input[j + i]; + } + r[i] = s; + } + + if ( r[0] < 100.0f ) + { + r[0] = 100.0f; + } + r[0] *= 1.0001f; + + lev_dur( A, r, lpcorder, NULL ); + + return; +} + + +/*------------------------------------------------------------------- + * tcx_ltp_get_zir() + * + * + *-------------------------------------------------------------------*/ + +static void tcx_ltp_get_zir( + float *zir, + const int16_t length, + float *synth_ltp, + float *synth, + float *A, + const int16_t lpcorder, + const float gain, + const int16_t pitch_int, + const int16_t pitch_fr, + const int16_t pitres, + const int16_t filtIdx ) +{ + float buf[TCXLTP_LTP_ORDER], alpha, step; + float *x0, *x1, s; + float *y0, *y1, s2; + const float *w0, *w1, *v0, *v1; + int16_t i, j, k, L; + + x0 = &synth_ltp[-pitch_int]; + x1 = x0 - 1; + y0 = synth; + y1 = y0 - 1; + + assert( filtIdx >= 0 ); + + w0 = &tcxLtpFilters[filtIdx].filt[pitch_fr]; + w1 = &tcxLtpFilters[filtIdx].filt[pitres - pitch_fr]; + v0 = &tcxLtpFilters[filtIdx].filt[0]; + v1 = &tcxLtpFilters[filtIdx].filt[pitres]; + L = tcxLtpFilters[filtIdx].length; + + for ( j = 0; j < lpcorder; j++ ) + { + s = 0; + s2 = 0; + for ( i = 0, k = 0; i < L; i++, k += pitres ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + s2 *= ALPHA; + + buf[j] = ( synth[j] - gain * s2 ) - ( synth_ltp[j] - gain * s ); + + + x0++; + x1++; + y0++; + y1++; + } + + set_f( zir, 0.0f, length ); + + syn_filt( A, lpcorder, zir, zir, length, buf, 0 ); + + alpha = 1.f; + step = 1.f / (float) ( length / 2 ); + + for ( j = length / 2; j < length; j++ ) + { + zir[j] *= alpha; + alpha -= step; + } + + return; +} + + +/*------------------------------------------------------------------- + * predict_signal() + * + * + *-------------------------------------------------------------------*/ + +void predict_signal( + const float excI[], /* i : input excitation buffer */ + float excO[], /* o : output excitation buffer */ + const int16_t T0, /* i : integer pitch lag */ + int16_t frac, /* i : fraction of lag */ + const int16_t frac_max, /* i : max fraction */ + const int16_t L_subfr /* i : subframe size */ +) +{ + int16_t j; + float s; + const float *x0, *win; + + x0 = &excI[-T0 - 1]; + frac = -frac; + + if ( frac < 0 ) + { + frac += frac_max; + x0--; + } + + if ( frac_max == 6 ) + { + win = &inter6_2tcx2[frac][0]; + } + else + { + win = &inter4_2tcx2[frac][0]; + } + + for ( j = 0; j < L_subfr; j++ ) + { + s = win[1] * x0[1] + win[2] * x0[2]; + excO[j] = s + win[0] * x0[0] + win[3] * x0[3]; + x0++; + } + + return; +} + + +/*------------------------------------------------------------------- + * tcx_ltp_synth_filter() + * + * + *-------------------------------------------------------------------*/ + +static void tcx_ltp_synth_filter( + float *synth_ltp, + float *synth, + const int16_t length, + const int16_t pitch_int, + const int16_t pitch_fr, + const float gain, + const int16_t pitch_res, + const int16_t filtIdx ) +{ + float *x0, *x1, s; + float *y0, *y1, s2; + const float *v0, *v1; + const float *w0, *w1; + int16_t i, j, k, L; + + if ( gain > 0.f ) + { + x0 = &synth_ltp[-pitch_int]; + x1 = x0 - 1; + y0 = synth; + y1 = y0 - 1; + + assert( filtIdx >= 0 ); + + w0 = &tcxLtpFilters[filtIdx].filt[pitch_fr]; + w1 = &tcxLtpFilters[filtIdx].filt[pitch_res - pitch_fr]; + v0 = &tcxLtpFilters[filtIdx].filt[0]; + v1 = &tcxLtpFilters[filtIdx].filt[pitch_res]; + + L = tcxLtpFilters[filtIdx].length; + + + for ( j = 0; j < length; j++ ) + { + s = 0; + s2 = 0; + for ( i = 0, k = 0; i < L; i++, k += pitch_res ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + + s2 *= ALPHA; + synth_ltp[j] = synth[j] - gain * s2 + gain * s; + + x0++; + x1++; + y0++; + y1++; + } + } + else + { + mvr2r( synth, synth_ltp, length ); + } + + return; +} + + +/*------------------------------------------------------------------- + * tcx_ltp_synth_filter_zir() + * + * + *-------------------------------------------------------------------*/ + +static void tcx_ltp_synth_filter_zir( + float *synth_ltp, + float *synth, + const int16_t length, + const int16_t pitch_int, + const int16_t pitch_fr, + const float gain, + const int16_t pitch_res, + float *zir, + const int16_t filtIdx ) +{ + float *x0, *x1, s; + float *y0, *y1, s2; + const float *v0, *v1; + const float *w0, *w1; + int16_t i, j, k, L; + + x0 = &synth_ltp[-pitch_int]; + x1 = x0 - 1; + y0 = synth; + y1 = y0 - 1; + + assert( filtIdx >= 0 ); + + w0 = &tcxLtpFilters[filtIdx].filt[pitch_fr]; + w1 = &tcxLtpFilters[filtIdx].filt[pitch_res - pitch_fr]; + v0 = &tcxLtpFilters[filtIdx].filt[0]; + v1 = &tcxLtpFilters[filtIdx].filt[pitch_res]; + L = tcxLtpFilters[filtIdx].length; + + for ( j = 0; j < length; j++ ) + { + s = 0; + s2 = 0; + + for ( i = 0, k = 0; i < L; i++, k += pitch_res ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + + s2 *= ALPHA; + + synth_ltp[j] = ( synth[j] - gain * s2 + gain * s ) - zir[j]; + + x0++; + x1++; + y0++; + y1++; + } + + return; +} + + +/*------------------------------------------------------------------- + * tcx_ltp_synth_filter_fadein() + * + * + *-------------------------------------------------------------------*/ + +static void tcx_ltp_synth_filter_fadein( + float *synth_ltp, + float *synth, + const int16_t length, + const int16_t pitch_int, + const int16_t pitch_fr, + const float gain, + const int16_t pitch_res, + const int16_t filtIdx ) +{ + float *x0, *x1, s; + float *y0, *y1, s2; + const float *v0, *v1; + const float *w0, *w1; + int16_t i, j, k, L; + float alpha, step; + + if ( gain > 0.f ) + { + x0 = &synth_ltp[-pitch_int]; + x1 = x0 - 1; + y0 = synth; + y1 = y0 - 1; + + assert( filtIdx >= 0 ); + + w0 = &tcxLtpFilters[filtIdx].filt[pitch_fr]; + w1 = &tcxLtpFilters[filtIdx].filt[pitch_res - pitch_fr]; + v0 = &tcxLtpFilters[filtIdx].filt[0]; + v1 = &tcxLtpFilters[filtIdx].filt[pitch_res]; + L = tcxLtpFilters[filtIdx].length; + + alpha = 0.f; + step = 1.f / (float) ( length ); + + + for ( j = 0; j < length; j++ ) + { + s = 0; + s2 = 0; + + for ( i = 0, k = 0; i < L; i++, k += pitch_res ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + + s2 *= ALPHA; + + synth_ltp[j] = synth[j] - alpha * gain * s2 + alpha * gain * s; + + alpha += step; + + x0++; + x1++; + y0++; + y1++; + } + } + else + { + mvr2r( synth, synth_ltp, length ); + } + + return; +} + + +/*------------------------------------------------------------------- + * tcx_ltp_synth_filter_fadeout() + * + * + *-------------------------------------------------------------------*/ + +static void tcx_ltp_synth_filter_fadeout( + float *synth_ltp, + float *synth, + const int16_t length, + const int16_t pitch_int, + const int16_t pitch_fr, + const float gain, + const int16_t pitch_res, + const int16_t filtIdx ) +{ + float *x0, *x1, s; + float *y0, *y1, s2; + const float *v0, *v1; + const float *w0, *w1; + int16_t i, j, k, L; + float alpha, step; + + if ( gain > 0.f ) + { + x0 = &synth_ltp[-pitch_int]; + x1 = x0 - 1; + y0 = synth; + y1 = y0 - 1; + + assert( filtIdx >= 0 ); + + w0 = &tcxLtpFilters[filtIdx].filt[pitch_fr]; + w1 = &tcxLtpFilters[filtIdx].filt[pitch_res - pitch_fr]; + v0 = &tcxLtpFilters[filtIdx].filt[0]; + v1 = &tcxLtpFilters[filtIdx].filt[pitch_res]; + L = tcxLtpFilters[filtIdx].length; + + alpha = 1.f; + step = 1.f / (float) ( length ); + + for ( j = 0; j < length; j++ ) + { + s = 0; + s2 = 0; + + for ( i = 0, k = 0; i < L; i++, k += pitch_res ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + + s2 *= ALPHA; + synth_ltp[j] = synth[j] - alpha * gain * s2 + alpha * gain * s; + alpha -= step; + + x0++; + x1++; + y0++; + y1++; + } + } + else + { + mvr2r( synth, synth_ltp, length ); + } + + return; +} + + +/*------------------------------------------------------------------- + * tcx_ltp_decode_params() + * + * + *-------------------------------------------------------------------*/ + +int16_t tcx_ltp_decode_params( + int16_t *ltp_param, + int16_t *pitch_int, + int16_t *pitch_fr, + float *gain, + const int16_t pitmin, + const int16_t pitfr1, + const int16_t pitfr2, + const int16_t pitmax, + const int16_t pitres ) +{ + int16_t gainbits = 2; + + /* Decode Pitch and Gain */ + if ( ( ltp_param ) && ( ltp_param[0] ) ) + { + if ( ltp_param[1] < ( ( pitfr2 - pitmin ) * pitres ) ) + { + *pitch_int = pitmin + ( ltp_param[1] / pitres ); + *pitch_fr = ltp_param[1] - ( *pitch_int - pitmin ) * pitres; + } + else if ( ltp_param[1] < ( ( pitfr2 - pitmin ) * pitres + ( pitfr1 - pitfr2 ) * ( pitres >> 1 ) ) ) + { + *pitch_int = pitfr2 + ( ( ltp_param[1] - ( pitfr2 - pitmin ) * pitres ) / ( pitres >> 1 ) ); + *pitch_fr = ( ltp_param[1] - ( pitfr2 - pitmin ) * pitres ) - ( *pitch_int - pitfr2 ) * ( pitres >> 1 ); + *pitch_fr = *pitch_fr << 1; /* was *= (pitres>>1); */ + } + else + { + *pitch_int = ltp_param[1] + pitfr1 - ( ( pitfr2 - pitmin ) * pitres ) - ( ( pitfr1 - pitfr2 ) * ( pitres >> 1 ) ); + *pitch_fr = 0; + } + *gain = (float) ( ltp_param[2] + 1 ) * 0.625f / (float) ( 1 << gainbits ); + if ( *pitch_int < PIT_MIN_SHORTER ) + { + /*pitch out of range due to bit error */ + *pitch_int = PIT_MIN_SHORTER; + return 1; + } + if ( *pitch_int > PIT_MAX_MAX ) + { + /*pitch out of range due to bit error */ + *pitch_int = PIT_MAX_MAX; + return 1; + } + } + else + { + *pitch_int = pitmax; + *pitch_fr = 0; + *gain = 0.0f; + } + + return 0; +} + +/*------------------------------------------------------------------- + *tcx_ltp_synth_filter_10() + * + * + ---------------------------------------------------------------------*/ +static void tcx_ltp_synth_filter_10( + float *out, + float *in, + const int16_t length, + const int16_t pitch_int, + const int16_t pitch_fr, + const float gain, + const int16_t pitch_res, + const int16_t filtIdx ) +{ + float *x0, *x1, s; + float *y0, *y1, s2; + const float *v0, *v1; + const float *w0, *w1; + int16_t i, j, k, L; + float curr_gain, gain_step; + + x0 = &out[-pitch_int]; + x1 = x0 - 1; + y0 = in; + y1 = y0 - 1; + + assert( filtIdx >= 0 ); + + w0 = &tcxLtpFilters[filtIdx].filt[pitch_fr]; + w1 = &tcxLtpFilters[filtIdx].filt[pitch_res - pitch_fr]; + v0 = &tcxLtpFilters[filtIdx].filt[0]; + v1 = &tcxLtpFilters[filtIdx].filt[pitch_res]; + L = tcxLtpFilters[filtIdx].length; + + curr_gain = gain; + gain_step = -gain / length; + + for ( j = 0; j < length; j++ ) + { + s = 0; + s2 = 0; + + for ( i = 0, k = 0; i < L; i++, k += pitch_res ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + + out[j] = in[j] - curr_gain * s2 * ALPHA + curr_gain * s; + + x0++; + x1++; + y0++; + y1++; + + curr_gain += gain_step; + } + + return; +} + + +/*------------------------------------------------------------------- + *tcx_ltp_synth_filter_01() + * + * + ---------------------------------------------------------------------*/ + +static void tcx_ltp_synth_filter_01( + float *out, + float *in, + const int16_t length, + const int16_t pitch_int, + const int16_t pitch_fr, + const float gain, + const int16_t pitch_res, + const int16_t filtIdx ) +{ + float *x0, *x1, s; + float *y0, *y1, s2; + const float *v0, *v1; + const float *w0, *w1; + int16_t i, j, k, L; + float curr_gain, gain_step; + + x0 = &out[-pitch_int]; + x1 = x0 - 1; + y0 = in; + y1 = y0 - 1; + + assert( filtIdx >= 0 ); + + w0 = &tcxLtpFilters[filtIdx].filt[pitch_fr]; + w1 = &tcxLtpFilters[filtIdx].filt[pitch_res - pitch_fr]; + v0 = &tcxLtpFilters[filtIdx].filt[0]; + v1 = &tcxLtpFilters[filtIdx].filt[pitch_res]; + L = tcxLtpFilters[filtIdx].length; + + curr_gain = 0.0f; + gain_step = gain / length; + + for ( j = 0; j < length; j++ ) + { + s = 0; + s2 = 0; + + for ( i = 0, k = 0; i < L; i++, k += pitch_res ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + + out[j] = in[j] - curr_gain * s2 * ALPHA + curr_gain * s; + + x0++; + x1++; + y0++; + y1++; + + curr_gain += gain_step; + } + + return; +} + +#define MAX_TCX_LTP_FILTER_LEN 8 +#define MAX_TRANSITION_LEN 240 /* L_FRAME_48K / 4 */ + +/*------------------------------------------------------------------- + *tcx_ltp_synth_filter_11_unequal_pitch() + * + * blend between two filters by means of OAO + * filter the input signal at the initial subinterval with + * the first filter unit according to parameters associated to + * the preceding update interval with scaling from non-zero gain towards 0 + * followed by the second filter unit according to parameters associated to + * the current update interval with scaling from 0 towards non-zero gain + ---------------------------------------------------------------------*/ + +static void tcx_ltp_synth_filter_11_unequal_pitch( + float *out, + float *in, + const int16_t length, + const int16_t cur_pitch_int, + const int16_t cur_pitch_fr, + const float cur_gain, + const int16_t pitch_res, + const int16_t filtIdx, + const int16_t prev_pitch_int, + const int16_t prev_pitch_fr, + const float prev_gain, + const int16_t prev_pitch_res, + const int16_t prev_filtIdx ) +{ + float *x0, *x1, s; + float *y0, *y1, s2; + float *l0, *l1, s3; + float *m0, *m1, s4; + const float *v0, *v1; + const float *w0, *w1; + const float *p0, *p1; + const float *q0, *q1; + int16_t i, j, k, L; + int16_t prev_L; + float temp_buf[MAX_TRANSITION_LEN + 2 * MAX_TCX_LTP_FILTER_LEN]; + float *temp_ptr; + float gain, gain_step; + + x0 = &out[-prev_pitch_int]; + x1 = x0 - 1; + y0 = in; + y1 = y0 - 1; + + assert( filtIdx >= 0 && prev_filtIdx >= 0 ); + + w0 = &tcxLtpFilters[prev_filtIdx].filt[prev_pitch_fr]; + w1 = &tcxLtpFilters[prev_filtIdx].filt[prev_pitch_res - prev_pitch_fr]; + v0 = &tcxLtpFilters[prev_filtIdx].filt[0]; + v1 = &tcxLtpFilters[prev_filtIdx].filt[prev_pitch_res]; + + prev_L = tcxLtpFilters[prev_filtIdx].length; + + p0 = &tcxLtpFilters[filtIdx].filt[cur_pitch_fr]; + p1 = &tcxLtpFilters[filtIdx].filt[pitch_res - cur_pitch_fr]; + q0 = &tcxLtpFilters[filtIdx].filt[0]; + q1 = &tcxLtpFilters[filtIdx].filt[pitch_res]; + + L = tcxLtpFilters[filtIdx].length; + + /* 1. decreasing gain filter. The first filter unit with the parameters associated to the previous interval and scaling towards 0 */ + gain = prev_gain; + gain_step = -prev_gain / length; + + for ( j = 0; j < length + L; j++ ) + { + s = 0; + s2 = 0; + + for ( i = 0, k = 0; i < prev_L; i++, k += prev_pitch_res ) + { + s += w0[k] * x0[i] + w1[k] * x1[-i]; + s2 += v0[k] * y0[i] + v1[k] * y1[-i]; + } + + out[j] = in[j] - gain * s2 * ALPHA + gain * s; + + x0++; + x1++; + y0++; + y1++; + + gain += gain_step; + } + + mvr2r( out - MAX_TCX_LTP_FILTER_LEN, temp_buf, MAX_TRANSITION_LEN + 2 * MAX_TCX_LTP_FILTER_LEN ); + temp_ptr = &temp_buf[0] + MAX_TCX_LTP_FILTER_LEN; + + m0 = temp_ptr; + m1 = temp_ptr - 1; + l0 = &out[-cur_pitch_int]; + l1 = l0 - 1; + + /* 2. increasing gain filter. The second filter unit with the parameters associated to the current interval and scaling from 0 towards current gain */ + gain = 0.0f; + gain_step = cur_gain / length; + + for ( j = 0; j < length; j++ ) + { + s3 = 0; + s4 = 0; + + for ( i = 0, k = 0; i < L; i++, k += pitch_res ) + { + s3 += p0[k] * l0[i] + p1[k] * l1[-i]; + s4 += q0[k] * m0[i] + q1[k] * m1[-i]; + } + + out[j] = *( temp_ptr + j ) - gain * s4 * ALPHA + gain * s3; + + l0++; + l1++; + m0++; + m1++; + + gain += gain_step; + } + + return; +} + + +/*------------------------------------------------------------------- + * tcx_ltp_post() + * + * + *-------------------------------------------------------------------*/ + +void tcx_ltp_post( + Decoder_State *st, + TCX_LTP_DEC_HANDLE hTcxLtpDec, + const int16_t core, + const int16_t output_frame, + const int16_t delay, + float sig[], + const float tcx_buf[] ) +{ + int16_t tmp, L_transition, lpcorder, filtIdx; + int16_t bfi, L_frame_core, SideInfoOnly; + float gain, gain2; + float zir[L_FRAME_PLUS / 4], A[TCXLTP_LTP_ORDER + 1]; + float buf_in[TCXLTP_MAX_DELAY + L_FRAME48k + TCXLTP_MAX_DELAY], buf_out[2 * L_FRAME48k]; + float *sig_in, *sig_out; + int16_t pitch_int, pitch_fr; + int16_t tcx_buf_len; + int32_t total_brate; + + total_brate = ( st->element_mode == IVAS_CPE_MDCT ? st->bits_frame_nominal * FRAMES_PER_SEC : st->total_brate ); + filtIdx = 0; /* just to avoid compilation warnings */ + tcx_buf_len = NS2SA( st->output_Fs, TCXLTP_DELAY_NS ); + SideInfoOnly = 0; + + if ( total_brate >= HQ_96k ) + { + SideInfoOnly = 1; + } + + L_frame_core = st->L_frame; + if ( st->element_mode == IVAS_CPE_MDCT ) + { + L_frame_core = L_FRAME; + } + + if ( core == ACELP_CORE ) + { + bfi = 0; + pitch_int = 0; + pitch_fr = 0; + gain = 0.0f; + + L_frame_core = st->L_frame_past; + } + else + { + bfi = st->bfi; + pitch_int = hTcxLtpDec->tcxltp_pitch_int; + pitch_fr = hTcxLtpDec->tcxltp_pitch_fr; + gain = hTcxLtpDec->tcxltp_gain; + } + + /******** Init ********/ + + /* Parameters */ + L_transition = output_frame / 4; + lpcorder = TCXLTP_LTP_ORDER; + + + /* Input buffer */ + sig_in = buf_in + tcx_buf_len; + mvr2r( hTcxLtpDec->tcxltp_mem_in, buf_in, tcx_buf_len ); + mvr2r( sig, buf_in + tcx_buf_len, output_frame ); + if ( core > ACELP_CORE ) + { + mvr2r( tcx_buf, sig_in + output_frame, tcx_buf_len ); + } + mvr2r( sig + output_frame - tcx_buf_len, hTcxLtpDec->tcxltp_mem_in, tcx_buf_len ); + + /* Output buffer */ + sig_out = buf_out + output_frame; + mvr2r( hTcxLtpDec->tcxltp_mem_out, buf_out, output_frame ); + + /* TCX-LTP parameters: integer pitch, fractional pitch, gain */ + + if ( !( SideInfoOnly || hTcxLtpDec->tcxltp ) || core == ACELP_CORE ) + { + /* No LTP */ + pitch_int = 0; + pitch_fr = 0; + gain = 0.f; + } + else if ( !bfi ) + { + /* LTP and good frame */ + if ( output_frame != L_frame_core ) + { + tmp = pitch_int * st->pit_res_max + pitch_fr; + tmp = ( tmp * output_frame + L_frame_core / 2 ) / L_frame_core; + pitch_int = tmp / st->pit_res_max; + pitch_fr = tmp % st->pit_res_max; + } + + if ( st->element_mode == EVS_MONO ) /* hard tunings for EVS_MONO, HQ_48k is TCX only */ + { + if ( total_brate == HQ_48k && L_frame_core == L_FRAME16k ) + { + gain *= 0.32f; + } + else if ( total_brate == HQ_48k && L_frame_core == 512 ) + { + gain *= 0.40f; + } + else + { + gain *= 0.64f; + } + } + else if ( ( st->element_mode > IVAS_SCE ) && ( total_brate >= IVAS_96k ) ) + { + gain *= 0.40f; + } + else + { + gain *= 0.64f; + } + } + else + { + /* PLC: [TCX: Fade-out] + * PLC: LTP and bad frame (concealment) */ + if ( st->pit_res_max == st->pit_res_max_past ) /* ensure consistent core SR to previous frame; otherwise, set gain to 0 */ + { + pitch_int = hTcxLtpDec->tcxltp_pitch_int_post_prev; + pitch_fr = hTcxLtpDec->tcxltp_pitch_fr_post_prev; + gain = hTcxLtpDec->tcxltp_gain_post_prev * st->hTcxDec->damping; + } + else + { + gain = 0.f; + } + } + + if ( SideInfoOnly ) + { + gain = 0.f; + if ( bfi ) + { + hTcxLtpDec->tcxltp_gain_post_prev = 0.f; + } + } + gain2 = gain; + + if ( L_frame_core == L_FRAME ) + { + switch ( output_frame ) + { + case L_FRAME8k: + filtIdx = 0; + break; + case L_FRAME16k: + filtIdx = 1; + break; + case L_FRAME32k: + filtIdx = 2; + break; + case L_FRAME48k: + filtIdx = 3; + break; + default: + assert( 0 ); + break; + } + } + else if ( L_frame_core == L_FRAME16k ) + { + switch ( output_frame ) + { + case L_FRAME8k: + filtIdx = 4; + break; + case L_FRAME16k: + filtIdx = 5; + break; + case L_FRAME32k: + filtIdx = 6; + break; + case L_FRAME48k: + filtIdx = 7; + break; + default: + assert( 0 ); + break; + } + } + else if ( L_frame_core == 512 ) + { + switch ( output_frame ) + { + case L_FRAME8k: + filtIdx = 8; + break; + case L_FRAME16k: + filtIdx = 9; + break; + case L_FRAME32k: + filtIdx = 10; + break; + case L_FRAME48k: + filtIdx = 11; + break; + default: + assert( 0 ); + break; + } + } + else + { + filtIdx = -1; + } + + + /******** Previous-frame part ********/ + tcx_ltp_synth_filter( sig_out, sig_in, delay, hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); + + /******** Transition part - initial subinterval ********/ + + if ( st->element_mode != EVS_MONO ) + { + if ( gain == 0.f && hTcxLtpDec->tcxltp_gain_post_prev == 0.f ) + { + /* The filtering is deactivated, just copy input to the output */ + mvr2r( sig_in + delay, sig_out + delay, L_transition ); + } + else if ( gain == 0.f && hTcxLtpDec->tcxltp_gain_post_prev != 0.f ) + { + /* Filtering with the first filter unit */ + tcx_ltp_synth_filter_10( sig_out + delay, sig_in + delay, L_transition, hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); + } + else if ( gain != 0.f && hTcxLtpDec->tcxltp_gain_post_prev == 0.f ) + { + /* Filtering with the second filter unit */ + tcx_ltp_synth_filter_01( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); + } + else if ( gain == hTcxLtpDec->tcxltp_gain_post_prev && pitch_int == hTcxLtpDec->tcxltp_pitch_int_post_prev && pitch_fr == hTcxLtpDec->tcxltp_pitch_fr_post_prev && st->pit_res_max == st->pit_res_max_past && filtIdx == hTcxLtpDec->tcxltp_filt_idx_prev ) + { + tcx_ltp_synth_filter( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); + } + else + { + /* Filtering with the first filter unit, followed by the filtering with the second filter unit */ + tcx_ltp_synth_filter_11_unequal_pitch( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx, + hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); + } + } + else + { + if ( gain == 0.f && hTcxLtpDec->tcxltp_gain_post_prev == 0.f ) + { + mvr2r( sig_in + delay, sig_out + delay, L_transition ); + } + else if ( hTcxLtpDec->tcxltp_gain_post_prev == 0.f ) + { + tcx_ltp_synth_filter_fadein( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); + } + else if ( gain == 0.f ) + { + tcx_ltp_synth_filter_fadeout( sig_out + delay, sig_in + delay, L_transition, hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); + } + else if ( gain == hTcxLtpDec->tcxltp_gain_post_prev && pitch_int == hTcxLtpDec->tcxltp_pitch_int_post_prev && pitch_fr == hTcxLtpDec->tcxltp_pitch_fr_post_prev ) + { + tcx_ltp_synth_filter( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); + } + else + { + { + tcx_ltp_get_lpc( sig_out + delay - output_frame, output_frame, A, lpcorder ); + tcx_ltp_get_zir( zir, L_transition, sig_out + delay - lpcorder, sig_in + delay - lpcorder, A, lpcorder, gain, pitch_int, pitch_fr, st->pit_res_max, filtIdx ); + tcx_ltp_synth_filter_zir( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, zir, filtIdx ); + } + } + } + + /******** Current-frame part - subsequent subinterval, filtered with the third filter unit ********/ + tcx_ltp_synth_filter( sig_out + ( delay + L_transition ), sig_in + ( delay + L_transition ), output_frame - ( delay + L_transition ), pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); + + /******** Output ********/ + + /* copy to output */ + mvr2r( sig_out, sig, output_frame ); + + /* Update */ + hTcxLtpDec->tcxltp_pitch_int_post_prev = pitch_int; + hTcxLtpDec->tcxltp_pitch_fr_post_prev = pitch_fr; + hTcxLtpDec->tcxltp_gain_post_prev = gain2; + hTcxLtpDec->tcxltp_filt_idx_prev = filtIdx; + st->pit_res_max_past = st->pit_res_max; + mvr2r( sig_out, hTcxLtpDec->tcxltp_mem_out, output_frame ); + + return; +} diff --git a/lib_com/tcx_mdct.c b/lib_com/tcx_mdct.c new file mode 100644 index 0000000000..d9713c9cfc --- /dev/null +++ b/lib_com/tcx_mdct.c @@ -0,0 +1,255 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * TCX_MDCT() + * + * + *-------------------------------------------------------------------*/ + +void TCX_MDCT( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ) +{ + int16_t i; + float dctInBuffer[N_MAX]; + + /* Init */ + for ( i = 0; i < m / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 + i] = -1.0f * x[l + m / 2 - 1 - i]; + } + + for ( i = 0; i < l / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 + m / 2 + i] = x[i] - x[l - 1 - i]; + } + + for ( i = 0; i < m / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 - 1 - i] = -1.0f * x[l + m / 2 + i]; + } + + for ( i = 0; i < r / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 - 1 - m / 2 - i] = -1.0f * x[l + m + i] - x[l + m + r - 1 - i]; + } + + edct( dctInBuffer, y, l / 2 + m + r / 2, element_mode ); + + v_multc( y, (float) sqrt( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); + + return; +} + + +/*-------------------------------------------------------------------* + * TCX_MDST() + * + * + *-------------------------------------------------------------------*/ + +void TCX_MDST( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ) +{ + int16_t i; + float dctInBuffer[N_MAX]; + + /* Init */ + for ( i = 0; i < m / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 + i] = -1.0f * x[l + m / 2 - 1 - i]; + } + for ( i = 0; i < l / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 + m / 2 + i] = -1.0f * x[i] - x[l - 1 - i]; + } + for ( i = 0; i < m / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 - 1 - i] = -1.0f * x[l + m / 2 + i]; + } + for ( i = 0; i < r / 2; i++ ) + { + dctInBuffer[m / 2 + r / 2 - 1 - m / 2 - i] = -1.0f * x[l + m + i] + x[l + m + r - 1 - i]; + } + + edst( dctInBuffer, y, l / 2 + m + r / 2, element_mode ); + + v_multc( y, (float) sqrt( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); + + return; +} + + +/*-------------------------------------------------------------------* + * TCX_MDCT_Inverse() + * + * + *-------------------------------------------------------------------*/ + +void TCX_MDCT_Inverse( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ) +{ + int16_t i; + const int16_t L2 = l >> 1, R2 = r >> 1; + float f; + + edct( x, y + L2, L2 + m + R2, element_mode ); + + for ( i = 0; i < R2; i++ ) + { + y[l + m + R2 + i] = -1.0f * y[L2 + i]; /* fold out right end of DCT */ + } + + mvr2r( y + L2 + m + R2, y, L2 ); /* negate, fold out left end of DCT */ + + for ( i = 0; i < ( ( L2 + m + R2 ) >> 1 ); i++ ) + { + f = y[L2 + i]; + y[L2 + i] = -1.0f * y[l + m + R2 - 1 - i]; /* time-reverse mid of DCT */ + y[l + m + R2 - 1 - i] = -1.0f * f; + } + + v_multc( y, (float) sqrt( (float) ( l / 2 + m + r / 2 ) / NORM_MDCT_FACTOR ), y, l + m + r ); + + return; +} + + +/*-------------------------------------------------------------------* + * TCX_MDST_Inverse() + * + * + *-------------------------------------------------------------------*/ + +void TCX_MDST_Inverse( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const int16_t element_mode ) +{ + int16_t i; + const int16_t L2 = l >> 1, R2 = r >> 1; + float f; + + edst( x, y + L2, L2 + m + R2, element_mode ); + + mvr2r( y + L2, y + l + m + R2, R2 ); /* negate, fold out right end of DST */ + + for ( i = 0; i < L2; i++ ) + { + y[i] = -1.0f * y[L2 + m + R2 + i]; /* fold out left end of DST */ + } + + for ( i = 0; i < ( ( L2 + m + R2 ) >> 1 ); i++ ) + { + f = y[L2 + i]; + y[L2 + i] = -1.0f * y[l + m + R2 - 1 - i]; /* time-reverse mid of DST */ + y[l + m + R2 - 1 - i] = -1.0f * f; + } + + v_multc( y, (float) sqrt( (float) ( l / 2 + m + r / 2 ) / NORM_MDCT_FACTOR ), y, l + m + r ); + + return; +} + + +/*-------------------------------------------------------------------* + * TCX_MDXT_Inverse() + * + * + *-------------------------------------------------------------------*/ + +void TCX_MDXT_Inverse( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const uint16_t kernel_type ) +{ + const float signLeft = ( kernel_type >= MDCT_II ? -1.f : 1.f ); + const float signRight = ( kernel_type & 1 ? 1.f : -1.f ); + int16_t i; + const int16_t L2 = l >> 1, R2 = r >> 1; + float f; + + edxt( x, y + L2, L2 + m + R2, kernel_type, TRUE ); + + for ( i = 0; i < L2; i++ ) + { + y[i] = signLeft * y[L2 + m + R2 + i]; /* fold out the left end */ + } + + for ( i = 0; i < R2; i++ ) + { + y[l + m + R2 + i] = signRight * y[L2 + i]; /* ...and right end */ + } + + for ( i = 0; i < ( ( L2 + m + R2 ) >> 1 ); i++ ) + { + f = y[L2 + i]; + y[L2 + i] = -1.0f * y[l + m + R2 - 1 - i]; /* time-reverse mid */ + y[l + m + R2 - 1 - i] = -1.0f * f; + } + + v_multc( y, (float) sqrt( (float) ( l / 2 + m + r / 2 ) / NORM_MDCT_FACTOR ), y, l + m + r ); + + return; +} diff --git a/lib_com/tcx_mdct_window.c b/lib_com/tcx_mdct_window.c new file mode 100644 index 0000000000..2d1d474404 --- /dev/null +++ b/lib_com/tcx_mdct_window.c @@ -0,0 +1,263 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------- + * mdct_window_sine() + * + * + *-------------------------------------------------------------------*/ +void mdct_window_sine( + float *window, + const int32_t Fs, + const int16_t n, + const int16_t window_type, + const int16_t element_mode ) +{ + if ( element_mode == EVS_MONO ) + { + int16_t i; + float c; + + c = EVS_PI / ( 2.0f * (float) n ); + + for ( i = 0; i < n; i++ ) + { + window[i] = (float) sin( c * ( 0.5f + (float) i ) ); + } + } + else + { + const float *window_table = 0; + int16_t buf_in_size = 0; + switch ( window_type ) + { + case FULL_OVERLAP: + window_table = tcx_mdct_window_48; + buf_in_size = 420; + break; + case HALF_OVERLAP: + window_table = tcx_mdct_window_half_48; + buf_in_size = 180; + break; + case TRANSITION_OVERLAP: + case MIN_OVERLAP: + window_table = tcx_mdct_window_trans_48; + buf_in_size = 60; + break; + + default: + assert( 0 && "Unsupported window type" ); + break; + } + + if ( Fs == 48000 ) + { + mvr2r( window_table, window, n ); + } + else + { + lerp( window_table, window, n, buf_in_size ); + } + } + + return; +} + + +/*------------------------------------------------------------------- + * mdct_window_aldo() + * + * + *-------------------------------------------------------------------*/ + +void mdct_window_aldo( + float *window1, + float *window2, + const int16_t n ) +{ + int16_t i, n1, n2, d; + const float *p1, *p2; + + /* set table pointers and decimation factor */ + switch ( n ) + { + case 320 / 2: + p1 = window_48kHz + 2; + p2 = window_48kHz + 1110 - 3; + d = 6; + break; + case 512 / 2: + p1 = window_256kHz; + p2 = window_256kHz + 592 - 1; + d = 2; + break; + case 640 / 2: + p1 = window_48kHz + 1; + p2 = window_48kHz + 1110 - 2; + d = 3; + break; + case 1024 / 2: + p1 = window_256kHz; + p2 = window_256kHz + 592 - 1; + d = 1; + break; + case 1280 / 2: + p1 = window_48kHz + 1; + p2 = window_48kHz + 1110 - 2; + d = 3; + break; + case 1920 / 2: + p1 = window_48kHz; + p2 = window_48kHz + 1110 - 1; + d = 1; + break; + default: + assert( 0 ); + return; + } + + /* set lengths */ + n1 = n * 23 / 32; /* left slope length */ + n2 = n * 14 / 32; /* right slope length */ + + /* first part (long slope) */ + if ( n != 1280 / 2 ) + { + for ( i = 0; i < n / 2; i++ ) + { + *window1 = *p1; + window1++; + p1 += d; + } + + if ( ( n == 512 / 2 ) || ( n == 320 / 2 ) ) + p1++; + + for ( ; i < n1; i++ ) + { + *window1 = *p1; + window1++; + p1 += d; + } + } + else + { + const float *pi = window_8_16_32kHz; + + for ( i = 0; i < n / 2; i += 2 ) + { + *window1 = *p1; + window1++; + p1 += d; + + *window1 = *pi; + window1++; + pi++; + } + for ( ; i < n1; i += 2 ) + { + *window1 = *pi; + window1++; + pi++; + + *window1 = *p1; + window1++; + p1 += d; + } + } + + /* second part (short slope) */ + + if ( n != 1280 / 2 ) + { + for ( i = 0; i < n2 / 2; i++ ) + { + *window2 = *p2; + window2++; + p2 -= d; + } + + if ( ( n == 512 / 2 ) || ( n == 320 / 2 ) ) + p2--; + + for ( ; i < n2; i++ ) + { + *window2 = *p2; + window2++; + p2 -= d; + } + } + else + { + const float *pi = window_8_16_32kHz + 370 - 1; + + for ( i = 0; i < n2 / 2; i += 2 ) + { + *window2 = *p2; + window2++; + p2 -= d; + + *window2 = *pi; + window2++; + pi--; + } + + for ( ; i < n2; i += 2 ) + { + *window2 = *pi; + window2++; + pi--; + + *window2 = *p2; + window2++; + p2 -= d; + } + } + + return; +} diff --git a/lib_com/tcx_utils.c b/lib_com/tcx_utils.c new file mode 100644 index 0000000000..19e0220439 --- /dev/null +++ b/lib_com/tcx_utils.c @@ -0,0 +1,1048 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * tcx_get_windows() + * + * + *-------------------------------------------------------------------*/ +void tcx_get_windows( + TCX_CONFIG_HANDLE hTcxCfg, /* i : TCX configuration */ + const int16_t left_mode, /* i : overlap mode of left window half */ + const int16_t right_mode, /* i : overlap mode of right window half */ + int16_t *left_overlap, /* o : left overlap length */ + const float **left_win, /* o : left overlap window */ + int16_t *right_overlap, /* o : right overlap length */ + const float **right_win, /* o : right overlap window */ + const int16_t fullband, /* i : fullband flag */ + const int16_t isLfe /* i : LFE flag */ +) +{ + /* LFE is only FULL_OVERLAP*/ + if ( isLfe ) + { + assert( left_mode == FULL_OVERLAP && right_mode == FULL_OVERLAP ); + } + + if ( !fullband ) + { + /* Left part */ + + if ( left_mode == TRANSITION_OVERLAP ) + { + /* ACELP->TCX transition */ + *left_overlap = hTcxCfg->tcx_mdct_window_trans_length; + *left_win = hTcxCfg->tcx_mdct_window_trans; + } + else if ( left_mode == MIN_OVERLAP ) + { + *left_overlap = hTcxCfg->tcx_mdct_window_min_length; + *left_win = hTcxCfg->tcx_mdct_window_minimum; + } + else if ( left_mode == HALF_OVERLAP ) + { + *left_overlap = hTcxCfg->tcx_mdct_window_half_length; + *left_win = hTcxCfg->tcx_mdct_window_half; + } + else if ( left_mode == FULL_OVERLAP ) + { + if ( isLfe ) + { + *left_overlap = hTcxCfg->tcx_mdct_window_length; + *left_win = hTcxCfg->tcx_mdct_window; + } + else + { + *left_overlap = hTcxCfg->tcx_mdct_window_length; + *left_win = hTcxCfg->tcx_aldo_window_1_trunc; + } + } + else + { + assert( !"Not supported overlap" ); + } + + /* Right part */ + + if ( right_mode == MIN_OVERLAP ) + { + *right_overlap = hTcxCfg->tcx_mdct_window_min_length; + *right_win = hTcxCfg->tcx_mdct_window_minimum; + } + else if ( right_mode == HALF_OVERLAP ) + { + *right_overlap = hTcxCfg->tcx_mdct_window_half_length; + *right_win = hTcxCfg->tcx_mdct_window_half; + } + else if ( right_mode == FULL_OVERLAP ) + { + if ( isLfe ) + { + *right_overlap = hTcxCfg->tcx_mdct_window_length; + *right_win = hTcxCfg->tcx_mdct_window; + } + else + { + *right_overlap = hTcxCfg->tcx_mdct_window_delay; + *right_win = hTcxCfg->tcx_aldo_window_2; + } + } + else + { + assert( !"Not supported overlap" ); + } + } + else + { + /* Left part */ + + if ( left_mode == TRANSITION_OVERLAP ) + { + /* ACELP->TCX transition */ + *left_overlap = hTcxCfg->tcx_mdct_window_trans_lengthFB; + *left_win = hTcxCfg->tcx_mdct_window_transFB; + } + else if ( left_mode == MIN_OVERLAP ) + { + *left_overlap = hTcxCfg->tcx_mdct_window_min_lengthFB; + *left_win = hTcxCfg->tcx_mdct_window_minimumFB; + } + else if ( left_mode == HALF_OVERLAP ) + { + *left_overlap = hTcxCfg->tcx_mdct_window_half_lengthFB; + *left_win = hTcxCfg->tcx_mdct_window_halfFB; + } + else if ( left_mode == RECTANGULAR_OVERLAP ) + { + *left_overlap = 0; + *left_win = NULL; + } + else if ( left_mode == FULL_OVERLAP ) + { + if ( isLfe ) + { + *left_overlap = hTcxCfg->tcx_mdct_window_lengthFB; + *left_win = hTcxCfg->tcx_mdct_windowFB; + } + else + { + *left_overlap = hTcxCfg->tcx_mdct_window_lengthFB; + *left_win = hTcxCfg->tcx_aldo_window_1_FB_trunc; + } + } + else + { + assert( !"Not supported overlap" ); + } + + /* Right part */ + + if ( right_mode == MIN_OVERLAP ) + { + *right_overlap = hTcxCfg->tcx_mdct_window_min_lengthFB; + *right_win = hTcxCfg->tcx_mdct_window_minimumFB; + } + else if ( right_mode == HALF_OVERLAP ) + { + *right_overlap = hTcxCfg->tcx_mdct_window_half_lengthFB; + *right_win = hTcxCfg->tcx_mdct_window_halfFB; + } + else if ( right_mode == RECTANGULAR_OVERLAP ) + { + *right_overlap = 0; + *right_win = NULL; + } + else if ( right_mode == FULL_OVERLAP ) + { + if ( isLfe ) + { + *right_overlap = hTcxCfg->tcx_mdct_window_lengthFB; + *right_win = hTcxCfg->tcx_mdct_windowFB; + } + else + { + *right_overlap = hTcxCfg->tcx_mdct_window_delayFB; + *right_win = hTcxCfg->tcx_aldo_window_2_FB; + } + } + else + { + assert( !"Not supported overlap" ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * tcx_windowing_analysis() + * + * + *-------------------------------------------------------------------*/ + +void tcx_windowing_analysis( + const float *signal, /* i : signal vector */ + const int16_t L_frame, /* i : frame length */ + const int16_t left_overlap, /* i : left overlap length */ + const float *left_win, /* i : left overlap window */ + const int16_t right_overlap, /* i : right overlap length */ + const float *right_win, /* i : right overlap window */ + float *output /* o : windowed signal vector */ +) +{ + int16_t w; + + /* Left overlap */ + for ( w = 0; w < left_overlap; w++ ) + { + *output++ = *signal++ * left_win[w]; + } + + /* Non overlapping region */ + for ( w = 0; w < L_frame - ( left_overlap + right_overlap ) / 2; w++ ) + { + *output++ = *signal++; + } + + /* Right overlap */ + for ( w = 0; w < right_overlap; w++ ) + { + *output++ = *signal++ * right_win[right_overlap - 1 - w]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * WindowSignal() + * + * + *-------------------------------------------------------------------*/ + +void WindowSignal( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + int16_t offset, /* i : left folding point offset relative to the input signal pointer */ + const int16_t left_overlap_mode, /* i : overlap mode of left window half */ + const int16_t right_overlap_mode, /* i : overlap mode of right window half */ + int16_t *left_overlap_length, /* o : TCX window left overlap length */ + int16_t *right_overlap_length, /* o : TCX window right overlap length */ + const float in[], /* i : input signal */ + int16_t *L_frame, /* i/o: frame length */ + float out[], /* o : output windowed signal */ + const int16_t truncate_aldo, /* i : nonzero to truncate long ALDO slope */ + const int16_t fullband, /* i : fullband flag */ + const int16_t isLfe /* i : LFE flag */ +) +{ + int16_t l, r; + const float *left_win; + const float *right_win; + + /*-----------------------------------------------------------* + * Init * + *-----------------------------------------------------------*/ + + tcx_get_windows( hTcxCfg, left_overlap_mode, right_overlap_mode, &l, &left_win, &r, &right_win, fullband, isLfe ); + + /* Init lengths */ + + /* if past frame is ACELP */ + if ( left_overlap_mode == TRANSITION_OVERLAP ) + { + /* Increase frame size for 5ms */ + if ( !fullband ) + { + *L_frame += hTcxCfg->tcx5Size; + offset = -hTcxCfg->tcx_mdct_window_trans_length / 2; + } + else + { + *L_frame += hTcxCfg->tcx5SizeFB; + offset = -hTcxCfg->tcx_mdct_window_trans_lengthFB / 2; + } + } + + /*-----------------------------------------------------------* + * Windowing * + *-----------------------------------------------------------*/ + + tcx_windowing_analysis( in - l / 2 + offset, *L_frame, l, left_win, r, right_win, out ); + + if ( left_overlap_mode == FULL_OVERLAP && truncate_aldo && !isLfe ) + { + /* fade truncated ALDO window to avoid discontinuities */ + if ( !fullband ) + { + v_mult( out, hTcxCfg->tcx_mdct_window_minimum, out, hTcxCfg->tcx_mdct_window_min_length ); + } + else + { + v_mult( out, hTcxCfg->tcx_mdct_window_minimumFB, out, hTcxCfg->tcx_mdct_window_min_lengthFB ); + } + } + + *left_overlap_length = l; + *right_overlap_length = r; + + return; +} + + +/*-------------------------------------------------------------------* + * tcx_windowing_synthesis_current_frame() + * + * + *-------------------------------------------------------------------*/ + +void tcx_windowing_synthesis_current_frame( + float *signal, /* i/o: signal vector */ + const float *window, /* i : TCX window vector */ + const float *window_half, /* i : TCX window vector for half-overlap window */ + const float *window_min, /* i : TCX minimum overlap window */ + const int16_t window_length, /* i : TCX window length */ + const int16_t window_half_length, /* i : TCX half window length */ + const int16_t window_min_length, /* i : TCX minimum overlap length */ + const int16_t left_rect, /* i : left part is rectangular */ + const int16_t left_mode, /* i : overlap mode of left window half */ + float *acelp_zir, /* i/o: acelp ZIR */ + const float *old_syn, /* i : old synthesis */ + const float *syn_overl, /* i : overlap synthesis */ + const float *A_zir, + const float *window_trans, + int16_t acelp_zir_len, + const int16_t acelp_mem_len, + const int16_t last_core_bfi, /* i : last mode */ + const int16_t last_is_cng, + const int16_t fullbandScale ) +{ + int16_t i, w, overlap; + float tmp[L_FRAME_MAX / 2]; + + /* Init */ + overlap = window_length >> 1; + + /* Past-frame is TCX concealed as CNG and current-frame is TCX */ + if ( last_is_cng == 1 && left_rect == 0 ) + { + if ( !fullbandScale ) + { + set_zero( acelp_zir, acelp_zir_len ); + syn_filt( A_zir, M, acelp_zir, acelp_zir, acelp_zir_len, signal + overlap + acelp_mem_len - M, 0 ); + } + else + { + lerp( acelp_zir, tmp, acelp_zir_len, acelp_zir_len * FSCALE_DENOM / fullbandScale ); + acelp_zir = tmp; + } + + for ( i = 0; i < acelp_zir_len; i++ ) + { + signal[i] *= (float) ( i ) / (float) ( acelp_zir_len ); + signal[i] += acelp_zir[i] * (float) ( acelp_zir_len - i ) / (float) ( acelp_zir_len ); + } + } + else if ( left_rect == 1 && last_core_bfi == ACELP_CORE ) /* Rectangular window (past-frame is ACELP) */ + { + for ( i = 0; i < overlap - acelp_mem_len; i++ ) + { + signal[i] = 0; + } + + if ( fullbandScale == 0 ) + { + /*OLA with ACELP*/ + for ( i = 0; i < 2 * acelp_mem_len; i++ ) + { + /*window decoded TCX with aliasing*/ + signal[i + overlap - acelp_mem_len] *= window_trans[i]; + /*Time TDAC: 1)forward part of ACELP*/ + signal[i + overlap - acelp_mem_len] += old_syn[acelp_zir_len - 2 * acelp_mem_len + i] * window_trans[2 * acelp_mem_len - i - 1] * window_trans[2 * acelp_mem_len - i - 1]; + + /*Time TDAC: 1)reward part of ACELP*/ + signal[i + overlap - acelp_mem_len] += old_syn[acelp_zir_len - i - 1] * window_trans[i] * window_trans[2 * acelp_mem_len - i - 1]; + } + + for ( i = 0; i < M; i++ ) + { + signal[overlap + acelp_mem_len - M + i] -= old_syn[acelp_zir_len - M + i]; + } + } + + /* ZIR at the end of the ACELP frame */ + acelp_zir_len = 64; + + if ( !fullbandScale ) + { + set_zero( acelp_zir, acelp_zir_len ); + syn_filt( A_zir, M, acelp_zir, acelp_zir, acelp_zir_len, signal + overlap + acelp_mem_len - M, 0 ); + } + else + { + lerp( acelp_zir, tmp, acelp_zir_len * fullbandScale / FSCALE_DENOM, acelp_zir_len ); + acelp_zir_len = acelp_zir_len * fullbandScale / FSCALE_DENOM; + acelp_zir = tmp; + + if ( acelp_zir_len >= 2.0f * 64 ) + { + /* apply a simple low-pass to the ZIR, to avoid potentially unmasked HF content */ + for ( i = 2; i < acelp_zir_len; i++ ) + { + acelp_zir[i] = 0.25f * acelp_zir[i - 2] + 0.35f * acelp_zir[i - 1] + 0.40f * acelp_zir[i]; + } + acelp_zir[acelp_zir_len - 1] = 0.40f * acelp_zir[acelp_zir_len - 1] + 0.35f * acelp_zir[acelp_zir_len - 1] + 0.25f * acelp_zir[acelp_zir_len - 2]; + acelp_zir[acelp_zir_len - 2] = 0.40f * acelp_zir[acelp_zir_len - 2] + 0.35f * acelp_zir[acelp_zir_len - 1] + 0.25f * acelp_zir[acelp_zir_len - 1]; + for ( i = acelp_zir_len - 3; i >= 0; i-- ) + { + acelp_zir[i] = 0.40f * acelp_zir[i] + 0.35f * acelp_zir[i + 1] + 0.25f * acelp_zir[i + 2]; + } + } + } + + for ( i = 0; i < acelp_zir_len; i++ ) + { + /*remove reconstructed ZIR and add ACELP ZIR*/ + signal[i + overlap + acelp_mem_len] -= acelp_zir[i] * (float) ( acelp_zir_len - i ) / (float) acelp_zir_len; + } + } + else if ( left_rect == 1 && last_core_bfi != 0 ) /* Rectangular window (past-frame is TCX) */ + { + for ( i = 0; i < overlap + acelp_mem_len; i++ ) + { + signal[i] = 0; + } + for ( i = 0; i < window_length; i++ ) + { + signal[i + overlap + acelp_mem_len] *= window[i]; + } + } + else if ( left_rect != 1 && last_core_bfi == 0 ) /* Normal window (past-frame is ACELP) */ + { + for ( i = 0; i < window_length; i++ ) + { + signal[i] *= window[i]; + } + + for ( i = 0; i < window_length; i++ ) + { + signal[i] += syn_overl[i]; + } + } + else /* Normal window (past-frame is TCX) */ + { + if ( left_mode == 2 ) + { + /* min. overlap */ + for ( i = 0; i < ( window_length - window_min_length ) / 2; i++ ) + { + signal[i] = 0.0f; + } + for ( w = 0; w < window_min_length; i++, w++ ) + { + signal[i] *= window_min[w]; + } + } + else if ( left_mode == 3 ) + { + /* half OL */ + for ( i = 0; i < ( window_length - window_half_length ) / 2; i++ ) + { + signal[i] = 0.0f; + } + for ( w = 0; w < window_half_length; i++, w++ ) + { + signal[i] *= window_half[w]; + } + } + else + { + /* normal full/maximum overlap */ + for ( i = 0; i < window_length; i++ ) + { + signal[i] *= window[i]; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * tcx_windowing_synthesis_past_frame() + * + * + *-------------------------------------------------------------------*/ + +void tcx_windowing_synthesis_past_frame( + float *signal, /* i/o: signal vector */ + const float *window, /* i : TCX window vector */ + const float *window_half, /* i : TCX window vector for half-overlap window */ + const float *window_min, /* i : TCX minimum overlap window */ + const int16_t window_length, /* i : TCX window length */ + const int16_t window_half_length, /* i : TCX half window length */ + const int16_t window_min_length, /* i : TCX minimum overlap length */ + const int16_t right_mode /* i : overlap mode (left_mode of current frame) */ +) +{ + int16_t i, w; + + if ( right_mode == MIN_OVERLAP ) + { + /* min. overlap */ + for ( i = ( window_length - window_min_length ) / 2, w = 0; w < window_min_length; i++, w++ ) + { + signal[i] *= window_min[window_min_length - 1 - w]; + } + for ( ; i < window_length; i++ ) + { + signal[i] = 0.0f; + } + } + else if ( right_mode == HALF_OVERLAP ) + { + /* half OL */ + for ( i = ( window_length - window_half_length ) / 2, w = 0; w < window_half_length; i++, w++ ) + { + signal[i] *= window_half[window_half_length - 1 - w]; + } + for ( ; i < window_length; i++ ) + { + signal[i] = 0.0f; + } + } + else if ( right_mode == FULL_OVERLAP ) + { + /* normal full/maximum overlap */ + for ( i = 0; i < window_length; i++ ) + { + signal[i] *= window[window_length - 1 - i]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * lpc2mdct() + * + * + *-------------------------------------------------------------------*/ + +void lpc2mdct( + float *lpcCoeffs, + const int16_t lpcOrder, + float mdct_gains[], + const int16_t length, + const int16_t noInverse ) +{ + float RealData[2 * FDNS_NPTS], ImagData[2 * FDNS_NPTS]; + float tmp; + int16_t i, sizeN; + + assert( length <= FDNS_NPTS ); + + sizeN = 2 * length; + + /* ODFT */ + for ( i = 0; i < lpcOrder + 1; i++ ) + { + tmp = (float) ( ( (float) i ) * EVS_PI / (float) ( sizeN ) ); + RealData[i] = (float) ( lpcCoeffs[i] * cos( tmp ) ); + ImagData[i] = (float) ( -lpcCoeffs[i] * sin( tmp ) ); + } + + for ( ; i < sizeN; i++ ) + { + RealData[i] = 0.f; + ImagData[i] = 0.f; + } + + DoFFT( RealData, ImagData, sizeN ); + + if ( noInverse ) + { + for ( i = 0; i < length; i++ ) + { + mdct_gains[i] = (float) ( sqrt( RealData[i] * RealData[i] + ImagData[i] * ImagData[i] ) ); + } + } + else + /* Get amplitude */ + { + for ( i = 0; i < length; i++ ) + { + mdct_gains[i] = (float) ( 1.0f / max( EPSILON, sqrt( RealData[i] * RealData[i] + ImagData[i] * ImagData[i] ) ) ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * mdct_noiseShaping() + * + * + *-------------------------------------------------------------------*/ + +void mdct_noiseShaping( + float x[], + const int16_t lg, + const float gains[], + const int16_t nBands ) +{ + int16_t i, j, k, l; + float g; + int16_t m, n, k1, k2; + + j = 0; + assert( nBands != 0 ); + k = lg / nBands; + m = lg % nBands; + + if ( m ) + { + if ( m <= ( FDNS_NPTS / 2 ) ) + { + n = FDNS_NPTS / m; + k1 = k; + k2 = k + 1; + } + else + { + n = FDNS_NPTS / ( FDNS_NPTS - m ); + k1 = k + 1; + k2 = k; + } + + for ( i = 0; i < lg; ) + { + if ( j % n ) + { + k = k1; + } + else + { + k = k2; + } + g = gains[j++]; + + /* Limit number of loops, if end is reached */ + k = min( k, lg - i ); + + for ( l = 0; l < k; l++ ) + { + x[i++] *= g; + } + } + } + else + { + for ( i = 0; i < lg; ) + { + g = gains[j++]; + + for ( l = 0; l < k; l++ ) + { + x[i++] *= g; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * PsychAdaptLowFreqDeemph() + * + * + *-------------------------------------------------------------------*/ + +void PsychAdaptLowFreqDeemph( + float x[], + const float lpcGains[], + float lf_deemph_factors[] ) +{ + int16_t i; + float max_val, fac, tmp; + + max_val = tmp = lpcGains[0]; + + /* find minimum (tmp) and maximum (max) of LPC gains in low frequencies */ + for ( i = 1; i < 9; i++ ) + { + if ( tmp > lpcGains[i] ) + { + tmp = lpcGains[i]; + } + if ( max_val < lpcGains[i] ) + { + max_val = lpcGains[i]; + } + } + + tmp *= 32.0f; + + if ( ( max_val < tmp ) && ( tmp > FLT_MIN ) ) + { + fac = tmp = (float) pow( max_val / tmp, 0.0078125f ); + + if ( lf_deemph_factors ) + { + /* gradual lowering of lowest 32 bins; DC is lowered by (max/tmp)^1/4 */ + for ( i = 31; i >= 0; i-- ) + { + x[i] *= fac; + lf_deemph_factors[i] *= fac; + fac *= tmp; + } + } + else + { + /* gradual lowering of lowest 32 bins; DC is lowered by (max/tmp)^1/4 */ + for ( i = 31; i >= 0; i-- ) + { + x[i] *= fac; + fac *= tmp; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * AdaptLowFreqDeemph() + * + * + *-------------------------------------------------------------------*/ + +void AdaptLowFreqDeemph( + float x[], + int16_t tcx_lpc_shaped_ari, + const float lpcGains[], + const int16_t lg, + float lf_deemph_factors[] ) +{ + int16_t i, i_max_old, i_max; + + if ( !tcx_lpc_shaped_ari ) + { + /* 1. find first magnitude maximum in lower quarter of spectrum */ + i_max = -1; + + for ( i = 0; i < lg / 4; i++ ) + { + if ( ( x[i] <= -4.0f ) || ( x[i] >= 4.0f ) ) + { + x[i] += ( x[i] < 0.0f ) ? 2.0f : -2.0f; + i_max = i; + break; + } + } + /* 2. expand value range of all xi up to i_max: two extra steps */ + + for ( i = 0; i < i_max; i++ ) + { + x[i] *= 0.5f; + lf_deemph_factors[i] *= 0.5f; + } + /* 3. find first magnitude maximum in lower quarter of spectrum */ + i_max_old = i_max; + + if ( i_max_old > -1 ) + { + i_max = -1; + + for ( i = 0; i < lg / 4; i++ ) + { + if ( ( x[i] <= -4.0f ) || ( x[i] >= 4.0f ) ) + { + x[i] += ( x[i] < 0.0f ) ? 2.0f : -2.0f; + i_max = i; + break; + } + } + } + /* 4. expand value range of all xi up to i_max: two extra steps */ + for ( i = 0; i < i_max; i++ ) + { + x[i] *= 0.5f; + lf_deemph_factors[i] *= 0.5f; + } + /* 5. always expand two lines; lines could be at index 0 and 1! */ + if ( i_max < i_max_old ) + { + i_max = i_max_old; + } + i = i_max + 1; + if ( x[i] < 0.0f ) + { + if ( x[i] > -4.0f ) + { + lf_deemph_factors[i] *= 0.5f; + } + x[i] = ( x[i] <= -4.0f ) ? x[i] + 2.0f : x[i] * 0.5f; + } + else + { + if ( x[i] < 4.0f ) + { + lf_deemph_factors[i] *= 0.5f; + } + x[i] = ( x[i] >= 4.0f ) ? x[i] - 2.0f : x[i] * 0.5f; + } + i++; + if ( x[i] < 0.0f ) + { + if ( x[i] > -4.0f ) + { + lf_deemph_factors[i] *= 0.5f; + } + x[i] = ( x[i] <= -4.0f ) ? x[i] + 2.0f : x[i] * 0.5f; + } + else + { + if ( x[i] < 4.0f ) + { + lf_deemph_factors[i] *= 0.5f; + } + x[i] = ( x[i] >= 4.0f ) ? x[i] - 2.0f : x[i] * 0.5f; + } + } + else + { + PsychAdaptLowFreqDeemph( x, lpcGains, lf_deemph_factors ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * tcx_noise_filling() + * + * + *-------------------------------------------------------------------*/ + +void tcx_noise_filling( + float *Q, + const int16_t noiseFillSeed, + const int16_t iFirstLine, + const int16_t lowpassLine, + const int16_t nTransWidth, + const int16_t L_frame, + const float tiltCompFactor, + float fac_ns, + uint8_t *infoTCXNoise, + const int16_t element_mode /* i : IVAS element mode */ +) +{ + int16_t i, m, segmentOffset; + int16_t win; /* window coefficient */ + Word16 seed; + float tilt_factor, nrg, tmp1, tmp2; + + /* 16-bit random number generator seed for generating filled lines */ + seed = (Word16) noiseFillSeed; + + tilt_factor = (float) pow( max( 0.375f, tiltCompFactor ), 1.0f / (float) L_frame ); + fac_ns /= (float) ( nTransWidth * nTransWidth ); + + /* find last nonzero line below iFirstLine, use it as start offset */ + i = iFirstLine; + + if ( element_mode == IVAS_CPE_MDCT ) /* ... but only in mono or parametric stereo since it may cause binaural unmasking in discrete stereo */ + { + segmentOffset = i; + } + else + { + for ( ; i > ( iFirstLine >> 1 ); i-- ) + { + if ( Q[i] != 0.0f ) + { + break; + } + } + + fac_ns *= (float) pow( tilt_factor, (float) i ); + segmentOffset = ++i; + } + + nrg = 1e-9f; + win = 0; + + for ( ; i < lowpassLine; i++ ) + { + fac_ns *= tilt_factor; + + if ( Q[i] != 0.0f ) + { + if ( win > 0 ) + { + /* RMS-normalize current noise-filled segment */ + tmp1 = (float) sqrt( ( i - segmentOffset ) / nrg ); + tmp2 = tmp1 * (float) nTransWidth; + + for ( m = segmentOffset; m < i - win; m++ ) + { + Q[m] *= tmp2; + } + + for ( ; win > 0; win-- ) + { + Q[m++] *= tmp1 * (float) win; + } + nrg = 1e-9f; /* start new segment: reset noise segment energy */ + } + segmentOffset = i + 1; + } + else + { + /* line is zero, so fill line and update window and energy */ + if ( win < nTransWidth ) + { + win++; + } + tmp1 = (float) own_random( &seed ); + nrg += tmp1 * tmp1; /* sum up energy of current noise segment */ + Q[i] = tmp1 * (float) win * fac_ns; + + if ( infoTCXNoise ) + { + /* set noiseflags for IGF */ + infoTCXNoise[i] = 1; + } + } + } + + if ( win > 0 ) + { + /* RMS-normalize uppermost noise-filled segment */ + tmp1 = (float) sqrt( ( lowpassLine - segmentOffset ) / nrg ); + tmp2 = tmp1 * (float) nTransWidth; + + for ( m = segmentOffset; m < lowpassLine; m++ ) + { + Q[m] *= tmp2; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * InitTnsConfigs() + * + * + *-------------------------------------------------------------------*/ + +void InitTnsConfigs( + const int16_t bwidth, + const int16_t L_frame, + STnsConfig tnsConfig[2][2], + const int16_t igfStopFreq, + const int32_t total_brate, + const int16_t element_mode, + const int16_t is_mct ) +{ + if ( total_brate > ACELP_32k ) + { + InitTnsConfiguration( bwidth, L_frame / 2, &tnsConfig[0][0], igfStopFreq, total_brate, element_mode, is_mct ); + } + + InitTnsConfiguration( bwidth, L_frame, &tnsConfig[1][0], igfStopFreq, total_brate, element_mode, is_mct ); + + InitTnsConfiguration( bwidth, L_frame + L_frame / 4, &tnsConfig[1][1], igfStopFreq, total_brate, element_mode, is_mct ); + + return; +} + + +/*-------------------------------------------------------------------* + * SetAllowTnsOnWhite + * + * set TNS config flag for possible application of TNS in the whitened domain + *-------------------------------------------------------------------*/ + +void SetAllowTnsOnWhite( + STnsConfig tnsConfig[2][2], /* o : updated TNS configurations */ + const int8_t allowTnsOnWhite /* i : flag for TNS in whiteded domain mode */ +) +{ + tnsConfig[0][0].allowTnsOnWhite = allowTnsOnWhite; + tnsConfig[0][1].allowTnsOnWhite = allowTnsOnWhite; + tnsConfig[1][0].allowTnsOnWhite = allowTnsOnWhite; + tnsConfig[1][1].allowTnsOnWhite = allowTnsOnWhite; + + return; +} + + +/*-------------------------------------------------------------------* + * SetTnsConfig() + * + * + *-------------------------------------------------------------------*/ + +void SetTnsConfig( + TCX_CONFIG_HANDLE hTcxCfg, + const int16_t isTCX20, + const int16_t isAfterACELP ) +{ + hTcxCfg->pCurrentTnsConfig = &hTcxCfg->tnsConfig[isTCX20][isAfterACELP]; + assert( hTcxCfg->pCurrentTnsConfig != NULL ); + + return; +} diff --git a/lib_com/tec_com.c b/lib_com/tec_com.c new file mode 100644 index 0000000000..18b2e79b94 --- /dev/null +++ b/lib_com/tec_com.c @@ -0,0 +1,934 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include +#include "rom_com.h" +#include "prot.h" +#include "stat_dec.h" +#include "wmops.h" + +/*------------------------------------------------------------------- + * Local constants + *-------------------------------------------------------------------*/ + +#define LOBUF_NO_SMOOTHING_MODE 1 + +#define EPS ( 1e-12f ) +#define ENV_SCALE_OFFSET_1 90.309f /* 10*log10(2^30) */ +#define MAX_TEC_BW_LO ( 12 ) +#define MAX_NB_TEC_LOW_BAND ( 3 ) + +const float TecSC[] = { 0.3662f, 0.1078f, 0.1194f, 0.1289f, 0.1365f, 0.1412f }; +const int16_t TecLowBandTable[] = { 0, 2, 4, 6 }; + +#define TecSmoothingDeg 5 +#define NbTecLowBand 3 + +#define ratioHiLoFac 1.5894f +#define thRatio 0.3649f +#define thRatio2 2.0288f +#define thCorrCoef 0.8795f +#define ratioHiLoFacDec ( 1.5894f * 0.75f ) + +/*------------------------------------------------------------------- + * calcLoBufferDec() + * + * + *-------------------------------------------------------------------*/ + +static void calcLoBufferDec( + float **pCldfbReal, + float **pCldfbImag, + float *loBuffer, + const int16_t startPos, + const int16_t stopPos, + const int16_t bandOffsetBottom, + const float scaleOffset ) +{ + int16_t slot, k, lb, li, ui; + float nrg, tmp; + + /* calc loTempEnv */ + for ( slot = startPos; slot < stopPos; slot++ ) + { + tmp = 0; + + for ( lb = 0; lb < NbTecLowBand; lb++ ) + { + li = TecLowBandTable[lb]; + ui = TecLowBandTable[lb + 1]; + + nrg = 0; + for ( k = li; k < ui; k++ ) + { + nrg += pCldfbReal[slot][k + bandOffsetBottom] * pCldfbReal[slot][k + bandOffsetBottom] + pCldfbImag[slot][k + bandOffsetBottom] * pCldfbImag[slot][k + bandOffsetBottom]; + } + tmp += (float) log10( nrg * normReciprocal[ui - li] + EPS ); + } + + loBuffer[slot] = 10.0f * tmp / NbTecLowBand + scaleOffset; + } + + return; +} + + +/*------------------------------------------------------------------- + * calcLoBufferEnc() + * + * + *-------------------------------------------------------------------*/ + +static void calcLoBufferEnc( + float **pCldfbPow, + const int16_t startPos, + const int16_t stopPos, + const int16_t bandOffsetBottom, + const float scaleOffset, + float *loBuffer ) +{ + int16_t slot, k, lb, li, ui; + float nrg, tmp; + + /* calc loTempEnv */ + for ( slot = startPos; slot < stopPos; slot++ ) + { + tmp = 0; + + for ( lb = 0; lb < NbTecLowBand; lb++ ) + { + li = TecLowBandTable[lb]; + ui = TecLowBandTable[lb + 1]; + + nrg = 0; + for ( k = li; k < ui; k++ ) + { + nrg += pCldfbPow[slot][k + bandOffsetBottom]; + } + tmp += (float) log10( nrg * normReciprocal[ui - li] + EPS ); + } + + loBuffer[slot] = 10.0f * tmp / NbTecLowBand + scaleOffset; + } + + return; +} + + +/*------------------------------------------------------------------- + * calcLoTempEnv() + * + * + *-------------------------------------------------------------------*/ + +static void calcLoTempEnv( + const float *loBuffer, + const int16_t noCols, + float *loTempEnv, + const float adjFac ) +{ + int16_t slot, i; + + for ( slot = 0; slot < noCols; slot++ ) + { + loTempEnv[slot] = TecSC[0] * loBuffer[slot]; + for ( i = 1; i < TecSmoothingDeg + 1; i++ ) + { + loTempEnv[slot] += TecSC[i] * loBuffer[slot - i]; + } + + loTempEnv[slot] *= adjFac; + } + + return; +} + +/*------------------------------------------------------------------- + * calcHiTempEnv() + * + * + *-------------------------------------------------------------------*/ + +static void calcHiTempEnv( + float **pCldfbPow, + const int16_t startPos, + const int16_t stopPos, + const int16_t lowSubband, + const int16_t highSubband, + const float scaleOffset, + float *hiTempEnv ) +{ + int16_t timeIndex, k; + int16_t bwHigh = highSubband - lowSubband; + + /* set hiTempEnv */ + for ( timeIndex = startPos; timeIndex < stopPos; timeIndex++ ) + { + hiTempEnv[timeIndex] = 0; + for ( k = lowSubband; k < highSubband; k++ ) + { + hiTempEnv[timeIndex] += pCldfbPow[timeIndex][k]; + } + hiTempEnv[timeIndex] = (float) ( 10 * log10( hiTempEnv[timeIndex] / bwHigh + EPS ) + scaleOffset ); + } + + return; +} + + +/*------------------------------------------------------------------- + * calcVar() + * + * + *-------------------------------------------------------------------*/ + +static float calcVar( + const float in[], + const int16_t len, + float *x ) +{ + float xx; + int16_t i; + + xx = 0; + *x = 0; + + for ( i = 0; i < len; i++ ) + { + xx += in[i] * in[i]; + *x += in[i]; + } + + return ( xx - ( *x * *x ) / (float) len ); +} + + +/*------------------------------------------------------------------- + * calcCorrelationCoefficient2() + * + * + *-------------------------------------------------------------------*/ + +static float calcCorrelationCoefficient2( + const float in_vec1[], + const float in_vec2[], + const int16_t len, + float var_x, + float var_y, + float x, + float y ) +{ + int16_t i; + float xy; + float ans; + + xy = 0; + + for ( i = 0; i < len; i++ ) + { + xy += ( in_vec1[i] * in_vec2[i] ); + } + + ans = ( xy - x * y / (float) ( len ) ) / (float) sqrt( var_x * var_y + EPS ); + + return ans; +} + + +/*------------------------------------------------------------------- + * resetTecDec() + * + * + *-------------------------------------------------------------------*/ + +void resetTecDec( + TEC_DEC_HANDLE hTecDec ) +{ + set_f( hTecDec->pGainTemp, 0, CLDFB_NO_COL_MAX ); + + set_f( hTecDec->loBuffer, 0.f, CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG ); + + return; +} + + +/*------------------------------------------------------------------- + * calcLoTempEnv_TBE() + * + * + *-------------------------------------------------------------------*/ + +static void calcLoTempEnv_TBE( + const float *loBuffer, + const int16_t noCols, + float *loTempEnv, + const float adjFac ) +{ + int16_t slot, i; + int16_t delay = 1; + + for ( slot = 0; slot < noCols; slot++ ) + { + loTempEnv[slot] = TecSC[0] * loBuffer[slot - delay]; + + for ( i = 1; i < TecSmoothingDeg + 1; i++ ) + { + loTempEnv[slot] += TecSC[i] * loBuffer[slot - delay - i]; + } + + loTempEnv[slot] *= adjFac; + } + + return; +} + + +/*------------------------------------------------------------------- + * set_TEC_TFA_code() + * + * + *-------------------------------------------------------------------*/ + +void set_TEC_TFA_code( + const int16_t corrFlag, + int16_t *tec_flag, + int16_t *tfa_flag ) +{ + *tec_flag = 0; + if ( *tfa_flag == 0 ) + { + if ( corrFlag == 1 ) + { + *tec_flag = 1; + } + else if ( corrFlag == 2 ) + { + *tec_flag = 1; + *tfa_flag = 1; + } + } + + return; +} + + +/*------------------------------------------------------------------- + * calcLoTempEnv_ns_TBE() + * + * + *-------------------------------------------------------------------*/ + +static void calcLoTempEnv_ns_TBE( + const float *loBuffer, + const int16_t noCols, + float *loTempEnv ) +{ + int16_t slot; + int16_t delay = 1; + float fac = 1.4f; + + for ( slot = 0; slot < noCols; slot++ ) + { + loTempEnv[slot] = fac * loBuffer[slot - delay]; + } + + return; +} + + +/*------------------------------------------------------------------- + * calcLoTempEnv_ns() + * + * + *-------------------------------------------------------------------*/ + +static void calcLoTempEnv_ns( + const float *loBuffer, + const int16_t noCols, + float *loTempEnv ) +{ + int16_t slot; + + for ( slot = 0; slot < noCols; slot++ ) + { + loTempEnv[slot] = loBuffer[slot]; + } + + return; +} + +/*------------------------------------------------------------------- + * calcGainLinear_TBE() + * + * + *-------------------------------------------------------------------*/ + +static void calcGainLinear_TBE( + const float *loTempEnv, + const int16_t startPos, + const int16_t stopPos, + float *pGainTemp ) +{ + int16_t timeIndex; + float ftmp; + + for ( timeIndex = startPos; timeIndex < stopPos; timeIndex++ ) + { + ftmp = loTempEnv[timeIndex]; + pGainTemp[timeIndex] = (float) pow( 10.0, 0.1 * ftmp ); + } + + return; +} + + +/*------------------------------------------------------------------- + * calcGainTemp_TBE() + * + * + *-------------------------------------------------------------------*/ + +void calcGainTemp_TBE( + float **pCldfbRealSrc, + float **pCldfbImagSrc, + float *loBuffer, + const int16_t startPos, /*!< Start position of the current envelope. */ + const int16_t stopPos, /*!< Stop position of the current envelope. */ + const int16_t lowSubband, /* lowSubband */ + float *pGainTemp, + const int16_t code ) +{ + float loTempEnv[16]; + const int16_t BW_LO = TecLowBandTable[NbTecLowBand]; + int16_t slot; + int16_t noCols = stopPos - startPos; + int16_t bandOffset = 0; + float scaleOffset = 0; + + assert( lowSubband >= BW_LO ); + + bandOffset = lowSubband - BW_LO; + + calcLoBufferDec( pCldfbRealSrc, pCldfbImagSrc, loBuffer + MAX_TEC_SMOOTHING_DEG, startPos, stopPos, bandOffset, scaleOffset ); + + if ( code > 0 ) + { + if ( code != 2 ) + { + calcLoTempEnv_TBE( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv, ratioHiLoFacDec ); + } + else + { + calcLoTempEnv_ns_TBE( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv ); + } + + calcGainLinear_TBE( loTempEnv, startPos, stopPos, pGainTemp ); + } + + + for ( slot = 0; slot < MAX_TEC_SMOOTHING_DEG; slot++ ) + { + loBuffer[slot] = loBuffer[slot + stopPos]; + } + + return; +} + + +/*------------------------------------------------------------------- + * setSubfrConfig() + * + * + *-------------------------------------------------------------------*/ + +static void setSubfrConfig( + const int16_t i_offset, + int16_t *k_offset, + int16_t *n_subfr, + const int16_t l_subfr ) +{ + *n_subfr = N_TEC_TFA_SUBFR - i_offset; + *k_offset = i_offset * l_subfr; + + return; +} + + +/*------------------------------------------------------------------- + * calcSubfrNrg() + * + * + *-------------------------------------------------------------------*/ + +static float calcSubfrNrg( + const float *hb_synth, + const int16_t i_offset, + float *enr, + const int16_t k_offset, + const int16_t l_subfr ) +{ + int16_t i, j, k; + float enr_all = 1e-12f; + + for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) + { + enr[i] = 1e-12f; + for ( j = 0; j < l_subfr; j++ ) + { + enr[i] += hb_synth[k] * hb_synth[k]; + k++; + } + enr_all += enr[i]; + } + + return enr_all; +} + + +/*------------------------------------------------------------------- + * procTfa() + * + * + *-------------------------------------------------------------------*/ + +static void procTfa( + float *hb_synth, + const int16_t i_offset, + const int16_t l_subfr ) +{ + int16_t i, j, k; + int16_t k_offset, n_subfr; + float enr[N_TEC_TFA_SUBFR], enr_ave; + + setSubfrConfig( i_offset, &k_offset, &n_subfr, l_subfr ); + + enr_ave = calcSubfrNrg( hb_synth, i_offset, enr, k_offset, l_subfr ) / n_subfr; + + for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) + { + float gain; + + gain = (float) sqrt( enr_ave / enr[i] ); + + for ( j = 0; j < l_subfr; j++ ) + { + hb_synth[k] *= gain; + k++; + } + } + + return; +} + + +/*------------------------------------------------------------------- + * procTec() + * + * + *-------------------------------------------------------------------*/ + +static void procTec( + float *hb_synth, + const int16_t i_offset, + const int16_t l_subfr, + float *gain, + const int16_t code ) +{ + int16_t i, j, k; + int16_t k_offset, n_subfr; + float enr[N_TEC_TFA_SUBFR], enr_ave, gain_ave; + float inv_curr_enr[N_TEC_TFA_SUBFR]; + float max_inv_curr_enr, lower_limit_gain; + float upper_limit_gain; + float tmp; + + setSubfrConfig( i_offset, &k_offset, &n_subfr, l_subfr ); + + enr_ave = calcSubfrNrg( hb_synth, i_offset, enr, k_offset, l_subfr ) / n_subfr; + + gain_ave = ( sum_f( &gain[i_offset], n_subfr ) + 1.0e-12f ) / n_subfr; + + max_inv_curr_enr = 10e-6f; + for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) + { + inv_curr_enr[i] = enr_ave / enr[i]; + gain[i] /= gain_ave; + if ( max_inv_curr_enr < inv_curr_enr[i] ) + { + max_inv_curr_enr = inv_curr_enr[i]; + } + } + + lower_limit_gain = 0.1f; + if ( lower_limit_gain > ( tmp = 1.f / max_inv_curr_enr ) ) + { + lower_limit_gain = tmp * 0.5f; + } + + upper_limit_gain = 1.2f; + if ( code == LOBUF_NO_SMOOTHING_MODE ) + { + upper_limit_gain = 3.0; + } + + for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) + { + if ( lower_limit_gain > gain[i] ) + { + gain[i] = lower_limit_gain; + } + gain[i] *= inv_curr_enr[i]; + + if ( gain[i] > upper_limit_gain ) + { + gain[i] = upper_limit_gain; + } + + gain[i] = (float) sqrt( gain[i] ); + for ( j = 0; j < l_subfr; j++ ) + { + hb_synth[k] *= gain[i]; + k++; + } + } + + return; +} + + +/*------------------------------------------------------------------- + * procTecTfa_TBE() + * + * + *-------------------------------------------------------------------*/ + +void procTecTfa_TBE( + float *hb_synth, + float *gain, + const int16_t flat_flag, + const int16_t last_core, + const int16_t l_subfr, + const int16_t code ) +{ + int16_t i_offset = 0; + + if ( flat_flag ) + { + procTfa( hb_synth, i_offset, l_subfr ); + } + else + { + if ( last_core != ACELP_CORE ) + { + i_offset = 1; + } + + procTec( hb_synth, i_offset, l_subfr, gain, code ); + } + + return; +} + + +/*------------------------------------------------------------------- + * resetTecEnc() + * + * + *-------------------------------------------------------------------*/ + +void resetTecEnc( + TEC_ENC_HANDLE hTecEnc, + const int16_t flag ) +{ + if ( flag == 0 ) + { + set_f( hTecEnc->loBuffer, 0.f, CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC ); + set_f( hTecEnc->hiTempEnv, 0.f, CLDFB_NO_COL_MAX + DELAY_TEMP_ENV_BUFF_TEC + EXT_DELAY_HI_TEMP_ENV ); + set_f( hTecEnc->loTempEnv, 0.f, CLDFB_NO_COL_MAX ); + set_f( hTecEnc->loTempEnv_ns, 0.f, CLDFB_NO_COL_MAX ); + } + else + { + set_f( hTecEnc->loBuffer, 0.f, MAX_TEC_SMOOTHING_DEG ); + } + + return; +} + + +/*------------------------------------------------------------------- + * calcHiEnvLoBuff() + * + * + *-------------------------------------------------------------------*/ + +void calcHiEnvLoBuff( + const int16_t noCols, + const int16_t *pFreqBandTable, /*!< freqbandTable. */ + const int16_t nSfb, /*!< Number of scalefactors. */ + float **pCldfbPow, + float *loBuffer, + float *hiTempEnvOrig ) +{ + const int16_t BW_LO = TecLowBandTable[NbTecLowBand]; + const int16_t lowSubband = pFreqBandTable[0]; + const int16_t highSubband = pFreqBandTable[nSfb]; + + int16_t bandOffsetBottom = lowSubband - BW_LO; + + float scaleOffset = 0; + float *hiTempEnv = hiTempEnvOrig + EXT_DELAY_HI_TEMP_ENV; + + assert( bandOffsetBottom > 0 ); + + /* calc hiTempEnv*/ + calcHiTempEnv( pCldfbPow, 0, noCols, lowSubband, highSubband, scaleOffset, hiTempEnv + DELAY_TEMP_ENV_BUFF_TEC ); + + /* calc loBuffer */ + calcLoBufferEnc( pCldfbPow, 0, noCols, bandOffsetBottom, scaleOffset, loBuffer + MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC ); + + return; +} + + +/*------------------------------------------------------------------- + * calcLoEnvCheckCorrHiLo() + * + * + *-------------------------------------------------------------------*/ + +void calcLoEnvCheckCorrHiLo( + const int16_t noCols, + const int16_t *pFreqBandTable, /*!< freqbandTable. */ + float *loBuffer, + float *loTempEnv, + float *loTempEnv_ns, + float *hiTempEnvOrig, + int16_t *corrFlag ) +{ + const int16_t BW_LO = TecLowBandTable[NbTecLowBand]; + const int16_t lowSubband = pFreqBandTable[0]; + int16_t i; + float corrCoef; + int16_t bandOffsetBottom = lowSubband - BW_LO; + float ratio; + float hiVar, loVar; + float hiSum, loSum; + int16_t code = 0; /* SET TENTATIVELY */ + float loVar_ns; + float loSum_ns; + float diff_hi_lo_sum; + + float *hiTempEnv = hiTempEnvOrig + EXT_DELAY_HI_TEMP_ENV; + + assert( bandOffsetBottom > 0 ); + + hiVar = calcVar( hiTempEnv, noCols, &hiSum ); + + /* calc loTempEnv */ + calcLoTempEnv( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv, ratioHiLoFac ); + + calcLoTempEnv_ns( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv_ns ); + + loVar_ns = calcVar( loTempEnv_ns, noCols, &loSum_ns ); + diff_hi_lo_sum = loSum_ns - hiSum; + + if ( hiVar > 800 && loVar_ns > 720 && diff_hi_lo_sum < 100 ) + { + code = 1; + } + + *corrFlag = 0; + + assert( code == 0 || code == 1 ); + + if ( code ) + { + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + /* ++++ code == 1 +++++*/ + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + int16_t maxPosHi, maxPosLo; + float maxHi, maxLo; + + maxHi = hiTempEnv[0]; + maxLo = loTempEnv_ns[0]; + maxPosHi = maxPosLo = 0; + + for ( i = 1; i < noCols; i++ ) + { + if ( maxHi < hiTempEnv[i] ) + { + maxHi = hiTempEnv[i]; + maxPosHi = i; + } + + if ( maxLo < loTempEnv_ns[i] ) + { + maxLo = loTempEnv_ns[i]; + maxPosLo = i; + } + } + + if ( abs( maxPosHi - maxPosLo ) < 2 ) + { + *corrFlag = 2; + } + + { + float feature_max = 0; + int16_t pos_feature_max = 0; + float feature[16]; + + float min_local, max_local; + int16_t j; + int16_t len_window = EXT_DELAY_HI_TEMP_ENV + 1; + float *curr_pos = hiTempEnv; + + feature_max = 0; + pos_feature_max = 0; + + for ( i = 0; i < 16; i++, curr_pos++ ) + { + max_local = min_local = curr_pos[0]; + + for ( j = 1; j < len_window; j++ ) + { + if ( max_local < curr_pos[-j] ) + { + max_local = curr_pos[-j]; + } + + if ( min_local > curr_pos[-j] ) + { + min_local = curr_pos[-j]; + } + } + + feature[i] = max_local - min_local; + + if ( feature_max < feature[i] ) + { + feature_max = feature[i]; + pos_feature_max = i; + } + } + + if ( *corrFlag > 0 ) + { + if ( !( feature_max > 20 && abs( pos_feature_max - maxPosHi ) < 3 ) ) + { + *corrFlag = 0; + } + } + } + } + else + { + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + /* ++++ code == 0 ++++*/ + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + + /* calc the variance of loTempEnv */ + loVar = calcVar( loTempEnv, noCols, &loSum ); + + /* calc correlation coefficient between loTempEnv and hiTempEnv */ + corrCoef = calcCorrelationCoefficient2( hiTempEnv, loTempEnv, noCols, hiVar, loVar, hiSum, loSum ); + + ratio = hiVar / ( loVar + EPS ); + + if ( corrCoef >= thCorrCoef && ratio > thRatio && ratio < thRatio2 ) + { + *corrFlag = 1; + } + } + + for ( i = 0; i < MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC; i++ ) + { + loBuffer[i] = loBuffer[noCols + i]; + } + + for ( i = 0; i < DELAY_TEMP_ENV_BUFF_TEC + EXT_DELAY_HI_TEMP_ENV; i++ ) + { + hiTempEnvOrig[i] = hiTempEnvOrig[noCols + i]; + } + + return; +} + + +/*------------------------------------------------------------------- + * tecEnc_TBE() + * + * + *-------------------------------------------------------------------*/ + +void tecEnc_TBE( + int16_t *corrFlag, + const float *voicing, + const int16_t coder_type ) +{ + float voice_sum; + float voice_diff; + + /*-----------------------------------------------------------------* + * TEC updates + *-----------------------------------------------------------------*/ + + voice_sum = voicing[0] + voicing[1]; + voice_diff = voicing[0] - voicing[1]; + + if ( voice_diff < 0 ) + { + voice_diff *= -1.0f; + } + + if ( *corrFlag == 1 ) + { + if ( coder_type == INACTIVE || ( ( voice_sum > 0.35 * 2 && voice_sum < 0.55 * 2 ) && ( voice_diff < 0.2 ) ) ) + { + *corrFlag = 0; + } + } + if ( voice_sum > 0.6 * 2 ) + { + *corrFlag = 0; + } + + return; +} diff --git a/lib_com/tns_base.c b/lib_com/tns_base.c new file mode 100644 index 0000000000..1be0b73b0c --- /dev/null +++ b/lib_com/tns_base.c @@ -0,0 +1,850 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "stat_com.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------------- + * Local constants + *---------------------------------------------------------------------------*/ + +#define HLM_MIN_NRG PCM16_TO_FLT_FAC +#define MAX_SUBDIVISIONS 3 + + +/*---------------------------------------------------------------------------- + * Local prototypes + *---------------------------------------------------------------------------*/ + + +static void Index2Parcor( const int16_t index[], float parCoeff[], const int16_t order ); + +static float FIRLattice( const int16_t order, const float *parCoeff, float *state, float x ); + +static float IIRLattice( const int16_t order, const float *parCoeff, float *state, float x ); + +static void TnsFilter( const float spectrum[], const int16_t numOfLines, const float parCoeff[], const int16_t order, TLinearPredictionFilter filter, float *state, float output[] ); + + +/*-------------------------------------------------------------------* + * InitTnsConfiguration() + * + *-------------------------------------------------------------------*/ + +void InitTnsConfiguration( + const int16_t bwidth, + const int16_t frameLength, + STnsConfig *pTnsConfig, + const int16_t igfStopFreq, + const int32_t total_brate, + const int16_t element_mode, + const int16_t is_mct ) +{ + int32_t nSampleRate; + int16_t iFilter; + int16_t *startLineFilter = &pTnsConfig->iFilterBorders[1]; + + nSampleRate = inner_frame_tbl[bwidth] * FRAMES_PER_SEC; + + /* Sanity checks */ + assert( ( nSampleRate > 0 ) && ( frameLength > 0 ) && ( pTnsConfig != NULL ) ); + if ( ( nSampleRate <= 0 ) || ( frameLength <= 0 ) || ( pTnsConfig == NULL ) ) + { + return /*TNS_FATAL_ERROR*/; + } + + /* WMOPS: All initializations are either for safety or static (tables) and thus not to be counted */ + /* Initialize TNS filter flag and maximum order */ + pTnsConfig->maxOrder = TNS_MAX_FILTER_ORDER; + if ( total_brate <= ACELP_32k ) + { + pTnsConfig->nMaxFilters = sizeof( tnsParametersIGF32kHz_LowBR ) / sizeof( tnsParametersIGF32kHz_LowBR[0] ); + + pTnsConfig->pTnsParameters = tnsParametersIGF32kHz_LowBR; + } + else + { + if ( nSampleRate > 32000 && nSampleRate == 100 * frameLength ) + { + pTnsConfig->nMaxFilters = sizeof( tnsParameters48kHz_grouped ) / sizeof( tnsParameters48kHz_grouped[0] ); + pTnsConfig->pTnsParameters = tnsParameters48kHz_grouped; + } + else if ( nSampleRate > 16000 ) + { + + if ( ( element_mode > IVAS_SCE ) && ( total_brate >= ( is_mct ? IVAS_32k : IVAS_48k ) ) ) + { + pTnsConfig->nMaxFilters = sizeof( tnsParameters32kHz_Stereo ) / sizeof( tnsParameters32kHz_Stereo[0] ); + if ( nSampleRate == 100 * frameLength ) /* sub-frame length is <= 10 ms */ + { + pTnsConfig->pTnsParameters = tnsParameters32kHz_grouped; + } + else + { + pTnsConfig->pTnsParameters = tnsParameters32kHz_Stereo; + } + } + else + { + pTnsConfig->nMaxFilters = sizeof( tnsParameters32kHz ) / sizeof( tnsParameters32kHz[0] ); + if ( nSampleRate == 100 * frameLength ) /* sub-frame length is <= 10 ms */ + { + pTnsConfig->pTnsParameters = tnsParameters32kHz_grouped; + } + else + { + pTnsConfig->pTnsParameters = tnsParameters32kHz; + } + } + } + else + { + if ( nSampleRate == 100 * frameLength ) /* sub-frame length is <= 10 ms */ + { + pTnsConfig->nMaxFilters = sizeof( tnsParameters16kHz_grouped ) / sizeof( tnsParameters16kHz_grouped[0] ); + pTnsConfig->pTnsParameters = tnsParameters16kHz_grouped; + } + else + { + pTnsConfig->nMaxFilters = sizeof( tnsParameters16kHz ) / sizeof( tnsParameters16kHz[0] ); + pTnsConfig->pTnsParameters = tnsParameters16kHz; + } + } + } + + assert( pTnsConfig->nMaxFilters <= TNS_MAX_NUM_OF_FILTERS ); + + /* Set starting MDCT line for each filter based on the starting frequencies from the TNS table */ + for ( iFilter = 0; iFilter < pTnsConfig->nMaxFilters; iFilter++ ) + { + assert( pTnsConfig->pTnsParameters[iFilter].startLineFrequency < 0.5f * nSampleRate ); + startLineFilter[iFilter] = (int16_t) ( ( frameLength * 2 * pTnsConfig->pTnsParameters[iFilter].startLineFrequency ) / nSampleRate ); + } + if ( igfStopFreq > 0 ) + { + pTnsConfig->iFilterBorders[0] = (int16_t) ( ( frameLength * 2 * igfStopFreq ) / nSampleRate ); + } + else + { + pTnsConfig->iFilterBorders[0] = frameLength; + } + + pTnsConfig->allowTnsOnWhite = 0; + + return /*TNS_NO_ERROR*/; +} + + +/*-------------------------------------------------------------------* + * ApplyTnsFilter() + * + *-------------------------------------------------------------------*/ + +void ApplyTnsFilter( + STnsConfig const *pTnsConfig, + STnsData const *pTnsData, + float spectrum[], + const int16_t fIsAnalysis ) +{ + TLinearPredictionFilter filter; + float state[TNS_MAX_FILTER_ORDER]; + int16_t iFilter; + int16_t stopLine, startLine; + const int16_t *pBorders; + + filter = fIsAnalysis ? FIRLattice : IIRLattice; + set_f( state, 0, TNS_MAX_FILTER_ORDER ); + pBorders = pTnsConfig->iFilterBorders; + + for ( iFilter = pTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + float parCoeff[TNS_MAX_FILTER_ORDER]; + const STnsFilter *pFilter = &pTnsData->filter[iFilter]; + + set_f( parCoeff, 0, TNS_MAX_FILTER_ORDER ); + stopLine = pBorders[iFilter]; + startLine = pBorders[iFilter + 1]; + + Index2Parcor( pFilter->coefIndex, parCoeff, pFilter->order ); + + TnsFilter( &spectrum[startLine], stopLine - startLine, parCoeff, pFilter->order, filter, state, &spectrum[startLine] ); + } + + return /*( pTnsData->nFilters < 0 ) ? TNS_FATAL_ERROR : TNS_NO_ERROR*/; +} + + +/*********************************************************************************************/ +/* Definitions of functions used in the mapping between TNS parameters and a bitstream. */ +/*********************************************************************************************/ + +/* Helper functions for hufmann table coding */ + +/** Get number of bits from a Huffman table. + * The table must be sorted by values. + */ +static int16_t GetBitsFromTable( int16_t value, const Coding codes[], const int16_t nSize ) +{ + (void) nSize; + assert( ( value >= 0 ) && ( value < nSize ) && ( nSize >= 0 ) && ( nSize <= 256 ) ); + return codes[value].nBits; +} + +/** Get the code for a value from a Huffman table. + * The table must be sorted by values. + */ +static int16_t EncodeUsingTable( int16_t value, const Coding codes[], const int16_t nSize ) +{ + (void) nSize; + assert( ( value >= 0 ) && ( value < nSize ) && ( nSize >= 0 ) && ( nSize <= 256 ) ); + return codes[value].code; +} + +/** Decode a value from a bitstream using a Huffman table. */ +static int16_t DecodeUsingTable( Decoder_State *st, int16_t *pValue, const Coding codes[], const int16_t nSize ) +{ + uint16_t code = 0; + uint8_t nBits = 0; + int16_t valueIndex = nSize; + + assert( ( nSize >= 0 ) && ( nSize <= 256 ) ); + /* Variable initialization. All are required! */ + while ( valueIndex == nSize ) + { + code = ( code << 1 ) + get_next_indice( st, 1 ); + ++nBits; + if ( nBits > nSize || nBits > 16 ) + { + st->BER_detect = 1; + *pValue = 0; + return -1; + } + for ( valueIndex = 0; valueIndex < nSize; valueIndex++ ) + { + if ( codes[valueIndex].nBits == nBits ) + { + if ( codes[valueIndex].code == code ) + { + break; + } + } + } + /* Loop condition */ + } + + if ( valueIndex < nSize ) + { + *pValue = codes[valueIndex].value; + } + else + { + st->BER_detect = 1; + *pValue = 0; + return -1; + } + + return nBits; +} + +/* TNS filter coefficients */ + +void const *GetTnsFilterCoeff( void const *p, int16_t index, int16_t *pValue ) +{ + *pValue = ( (int16_t const *) p )[index] + INDEX_SHIFT; + return NULL; +} + +void *SetTnsFilterCoeff( void *p, int16_t index, int16_t value ) +{ + ( (int16_t *) p )[index] = value - INDEX_SHIFT; + return NULL; +} + +int16_t GetSWBTCX20TnsFilterCoeffBits( int16_t value, int16_t index ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return GetBitsFromTable( value, codesTnsCoeffSWBTCX20[index], nTnsCoeffCodes ); +} + +int16_t EncodeSWBTCX20TnsFilterCoeff( int16_t value, int16_t index ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return EncodeUsingTable( value, codesTnsCoeffSWBTCX20[index], nTnsCoeffCodes ); +} + +int16_t DecodeSWBTCX20TnsFilterCoeff( Decoder_State *st, int16_t index, int16_t *pValue ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return DecodeUsingTable( st, pValue, codesTnsCoeffSWBTCX20[index], nTnsCoeffCodes ); +} + +int16_t GetSWBTCX10TnsFilterCoeffBits( int16_t value, int16_t index ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return GetBitsFromTable( value, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); +} + +int16_t EncodeSWBTCX10TnsFilterCoeff( int16_t value, int16_t index ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return EncodeUsingTable( value, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); +} + +int16_t DecodeSWBTCX10TnsFilterCoeff( Decoder_State *st, int16_t index, int16_t *pValue ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return DecodeUsingTable( st, pValue, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); +} + +int16_t GetWBTCX20TnsFilterCoeffBits( int16_t value, int16_t index ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return GetBitsFromTable( value, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); +} + +int16_t EncodeWBTCX20TnsFilterCoeff( int16_t value, int16_t index ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return EncodeUsingTable( value, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); +} + +int16_t DecodeWBTCX20TnsFilterCoeff( Decoder_State *st, int16_t index, int16_t *pValue ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return DecodeUsingTable( st, pValue, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); +} + + +/* TNS filter order */ + +void const *GetTnsFilterOrder( void const *p, int16_t index, int16_t *pValue ) +{ + *pValue = ( (STnsFilter const *) p )[index].order; + return ( (STnsFilter const *) p )[index].coefIndex; +} + +void *SetTnsFilterOrder( void *p, int16_t index, int16_t value ) +{ + ( (STnsFilter *) p )[index].order = value; + return ( (STnsFilter *) p )[index].coefIndex; +} + +int16_t GetTnsFilterOrderBitsSWBTCX20( int16_t value, int16_t index ) +{ + (void) index; + return GetBitsFromTable( value - 1, codesTnsOrderTCX20, nTnsOrderCodes ); +} + +int16_t EncodeTnsFilterOrderSWBTCX20( int16_t value, int16_t index ) +{ + (void) index; + return EncodeUsingTable( value - 1, codesTnsOrderTCX20, nTnsOrderCodes ); +} + +int16_t DecodeTnsFilterOrderSWBTCX20( Decoder_State *st, int16_t index, int16_t *pValue ) +{ + (void) index; + return DecodeUsingTable( st, pValue, codesTnsOrderTCX20, nTnsOrderCodes ); +} + +int16_t GetTnsFilterOrderBitsSWBTCX10( int16_t value, int16_t index ) +{ + (void) index; + return GetBitsFromTable( value - 1, codesTnsOrderTCX10, nTnsOrderCodes ); +} + +int16_t EncodeTnsFilterOrderSWBTCX10( int16_t value, int16_t index ) +{ + (void) index; + return EncodeUsingTable( value - 1, codesTnsOrderTCX10, nTnsOrderCodes ); +} + +int16_t DecodeTnsFilterOrderSWBTCX10( Decoder_State *st, int16_t index, int16_t *pValue ) +{ + (void) index; + return DecodeUsingTable( st, pValue, codesTnsOrderTCX10, nTnsOrderCodes ); +} + +int16_t GetTnsFilterOrderBits( int16_t value, int16_t index ) +{ + (void) index; + return GetBitsFromTable( value - 1, codesTnsOrder, nTnsOrderCodes ); +} + +int16_t EncodeTnsFilterOrder( int16_t value, int16_t index ) +{ + (void) index; + return EncodeUsingTable( value - 1, codesTnsOrder, nTnsOrderCodes ); +} + +int16_t DecodeTnsFilterOrder( Decoder_State *st, int16_t index, int16_t *pValue ) +{ + (void) index; + return DecodeUsingTable( st, pValue, codesTnsOrder, nTnsOrderCodes ); +} + +/* Number of TNS filters */ + +void const *GetNumOfTnsFilters( void const *p, int16_t index, int16_t *pValue ) +{ + *pValue = (int16_t) abs( ( (STnsData const *) p )[index].nFilters ); + return ( (STnsData const *) p )[index].filter; +} + +void *SetNumOfTnsFilters( void *p, int16_t index, int16_t value ) +{ + ( (STnsData *) p )[index].nFilters = (int16_t) abs( value ); + return ( (STnsData *) p )[index].filter; +} + +/* TNS enabled/disabled flag */ + +void const *GetTnsEnabled( void const *p, int16_t index, int16_t *pValue ) +{ + *pValue = ( (STnsData const *) p )[index].nFilters != 0 ? 1 : 0; + return NULL; +} + +void *SetTnsEnabled( void *p, int16_t index, int16_t value ) +{ + (void) p, (void) index, (void) value; + return NULL; +} + +/* TNS on whitened spectra flag */ + +void const *GetTnsOnWhite( void const *p, int16_t index, int16_t *pValue ) +{ + *pValue = ( (STnsData const *) p )[index].tnsOnWhitenedSpectra > 0 ? 1 : 0; + return NULL; +} + +void *SetTnsOnWhite( void *p, int16_t index, int16_t value ) +{ + ( (STnsData *) p )[index].tnsOnWhitenedSpectra = value; + return NULL; +} + +void const *GetTnsEnabledSingleFilter( void const *p, int16_t index, int16_t *pValue ) +{ + *pValue = ( (STnsData const *) p )[index].nFilters != 0 ? 1 : 0; + return ( (STnsData const *) p )[index].filter; +} + +void *SetTnsEnabledSingleFilter( void *p, int16_t index, int16_t value ) +{ + ( (STnsData *) p )[index].nFilters = value; + return ( (STnsData *) p )[index].filter; +} + + +/*-------------------------------------------------------------------* + * ResetTnsData() + * + *-------------------------------------------------------------------*/ + +void ResetTnsData( + STnsData *pTnsData ) +{ + uint16_t iFilter; + + pTnsData->nFilters = 0; + pTnsData->tnsOnWhitenedSpectra = 0; + + for ( iFilter = 0; iFilter < sizeof( pTnsData->filter ) / sizeof( pTnsData->filter[0] ); iFilter++ ) + { + STnsFilter *const pTnsFilter = &pTnsData->filter[iFilter]; + pTnsFilter->spectrumLength = 0; + pTnsFilter->predictionGain = 1.0f; + pTnsFilter->avgSqrCoef = 0; + pTnsFilter->filterType = TNS_FILTER_OFF; + ClearTnsFilterCoefficients( pTnsFilter ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * ClearTnsFilterCoefficients() + * + *-------------------------------------------------------------------*/ + +void ClearTnsFilterCoefficients( + STnsFilter *pTnsFilter ) +{ + pTnsFilter->order = 0; + set_s( pTnsFilter->coefIndex, 0, TNS_MAX_FILTER_ORDER ); + + return; +} + +/** Inverse quantization for reflection coefficients. + * + * @param index input quantized values. + * @param parCoeff output reflection coefficients. + * @param order number of coefficients/values. + */ +static void Index2Parcor( + const int16_t index[], + float parCoeff[], + const int16_t order ) +{ + const float *values = tnsCoeff4; + int16_t i; + + for ( i = 0; i < order; i++ ) + { + parCoeff[i] = values[index[i] + INDEX_SHIFT]; + } + + return; +} + +/* Linear prediction analysis filter. */ +static float FIRLattice( + const int16_t order, + const float *parCoeff, + float *state, + float x ) +{ + int16_t i; + float tmpSave; + + tmpSave = x; + for ( i = 0; i < order - 1; i++ ) + { + const float tmp = parCoeff[i] * x + state[i]; + /* Variable initialization */ + x += parCoeff[i] * state[i]; + state[i] = tmpSave; + tmpSave = tmp; + } + + /* last stage: only need half operations */ + x += parCoeff[order - 1] * state[order - 1]; + state[order - 1] = tmpSave; + + return x; +} + +/* Linear prediction synthesis filter. */ +static float IIRLattice( + const int16_t order, + const float *parCoeff, + float *state, + float x ) +{ + int16_t i; + + /* first stage: no need to calculate state[order-1] */ + x -= parCoeff[order - 1] * state[order - 1]; + for ( i = order - 2; i >= 0; i-- ) + { + x -= parCoeff[i] * state[i]; + state[i + 1] = parCoeff[i] * x + state[i]; + } + + state[0] = x; + + return x; +} + +/** TNS analysis/synthesis filter. + * @param spectrum input spectrum values. + * @param numOfLines number of lines in the spectrum. + * @param parCoeff filter (PARCOR) coefficients. + * @param order filter order. + * @param filter function that implements filtering. + By this function it is defined whether analysis or synthesis is performed. + * @param output filtered output spectrum values. + Inplace operation is supported, so it can be equal to spectrum. + */ +static void TnsFilter( + const float spectrum[], + const int16_t numOfLines, + const float parCoeff[], + const int16_t order, + TLinearPredictionFilter filter, + float *state, + float output[] ) +{ + int16_t j; + + assert( ( order >= 0 ) && ( order <= TNS_MAX_FILTER_ORDER ) ); + assert( ( numOfLines > 0 ) || ( ( numOfLines == 0 ) && ( order == 0 ) ) ); + + if ( order == 0 ) + { + if ( ( spectrum != output ) && ( numOfLines > 0 ) ) + { + mvr2r( spectrum, output, numOfLines ); + } + } + else + { + for ( j = 0; j < numOfLines; j++ ) + { + output[j] = filter( order, parCoeff, state, spectrum[j] ); + } + } + + return; +} + + +static void ITF_TnsFilter( + const float spectrum[], + const int16_t numOfLines, + const float A[], + const int16_t order, + float output[] ) +{ + int16_t i, j; + float *p, buf[ITF_MAX_FILTER_ORDER + N_MAX]; + + assert( ( order >= 0 ) && ( order <= ITF_MAX_FILTER_ORDER ) ); + assert( ( numOfLines > 0 ) || ( ( numOfLines == 0 ) && ( order == 0 ) ) ); + + if ( order == 0 ) + { + if ( ( spectrum != output ) && ( numOfLines > 0 ) ) + { + mvr2r( spectrum, output, numOfLines ); + } + } + else + { + p = buf + ITF_MAX_FILTER_ORDER; + + set_f( buf, 0, ITF_MAX_FILTER_ORDER ); + mvr2r( spectrum, p, numOfLines ); + + for ( j = 0; j < numOfLines; j++, p++ ) + { + output[j] = p[0]; + for ( i = 1; i < order; i++ ) + { + output[j] += A[i] * p[-i]; + } + } + } + + return; +} + + +/*********************************************************************************************/ +/* Definitions of functions used in the mapping between TNS parameters and a bitstream. */ +/*********************************************************************************************/ + +/* Helper functions for hufmann table coding */ + +/********************************/ +/* Private functions */ +/********************************/ + +/** Autocorrelation to parcor coefficients. + * Conversion of autocorrelation to parcor/reflection coefficients. + * @param input Autocorrelation function/coefficients. + * @param parCoeff output filter (PARCOR) coefficients. + * @param order filter order. + * @return prediction gain. + */ +static float ITF_AutoToLPcoef( + const float input[], + float a[], + const int16_t order ) +{ + int16_t i, j; + float tmp, tmp2; + float workBuffer[2 * ITF_MAX_FILTER_ORDER]; + float parCoeff[ITF_MAX_FILTER_ORDER]; + float *const pWorkBuffer = &workBuffer[order]; /* temp pointer */ + + for ( i = 0; i < order; i++ ) + { + workBuffer[i] = input[i]; + pWorkBuffer[i] = input[i + 1]; + } + + for ( i = 0; i < order; i++ ) + { + if ( workBuffer[0] < 1.0f / 65536.0f ) + { + tmp = 0; + } + else + { + tmp = -pWorkBuffer[i] / workBuffer[0]; + } + + /* compensate for calculation inaccuracies limit reflection coefs to ]-1,1[ */ + tmp = min( 0.999f, max( -0.999f, tmp ) ); + + parCoeff[i] = tmp; + for ( j = i; j < order; j++ ) + { + tmp2 = pWorkBuffer[j] + tmp * workBuffer[j - i]; + workBuffer[j - i] += tmp * pWorkBuffer[j]; + pWorkBuffer[j] = tmp2; + } + } + + /* Convert ParCor / reflection coefficients to LPC */ + a[0] = 1.0f; + a[1] = parCoeff[0]; + + for ( i = 1; i < order; i++ ) + { + for ( j = 0; j < i / 2; j++ ) + { + tmp = a[j + 1]; + a[j + 1] += parCoeff[i] * a[i - 1 - j + 1]; + a[i - 1 - j + 1] += parCoeff[i] * tmp; + } + if ( i & 1 ) + { + a[j + 1] += parCoeff[i] * a[j + 1]; + } + + a[i + 1] = parCoeff[i]; + } + + return ( ( input[0] + 1e-30f ) / ( workBuffer[0] + 1e-30f ) ); +} + + +/*-------------------------------------------------------------------* + * ITF_Apply() + * + *-------------------------------------------------------------------*/ + +void ITF_Apply( + float spectrum[], + const int16_t startLine, + const int16_t stopLine, + const float *A, + const int16_t order ) +{ + ITF_TnsFilter( &spectrum[startLine], stopLine - startLine, A, order, &spectrum[startLine] ); + + return; +} + + +/*-------------------------------------------------------------------* + * ITF_Detect() + * + * + *-------------------------------------------------------------------*/ + +int16_t ITF_Detect( + const float pSpectrum[], + const int16_t startLine, + const int16_t stopLine, + const int16_t maxOrder, + float *A, + float *predictionGain, + int16_t *curr_order ) +{ + float norms[MAX_SUBDIVISIONS]; + int16_t nSubdivisions; + int16_t iStartLine, iEndLine, spectrumLength; + float rxx[ITF_MAX_FILTER_ORDER + 1]; + float fac; + const float *pWindow; + int16_t iSubdivisions, lag; + + nSubdivisions = MAX_SUBDIVISIONS; + set_f( norms, 0.f, MAX_SUBDIVISIONS ); + set_f( rxx, 0.f, ITF_MAX_FILTER_ORDER + 1 ); /* This initialization is required */ + + if ( maxOrder <= 0 ) + { + return 0; + } + + /* Calculate norms for each spectrum part */ + for ( iSubdivisions = 0; iSubdivisions < nSubdivisions; iSubdivisions++ ) + { + iStartLine = startLine + ( stopLine - startLine ) * iSubdivisions / nSubdivisions; + iEndLine = startLine + ( stopLine - startLine ) * ( iSubdivisions + 1 ) / nSubdivisions; + + /* Variable initialization */ + norms[iSubdivisions] = sum2_f( pSpectrum + iStartLine - IGF_START_MN, iEndLine - iStartLine ); + } + + /* Calculate normalized autocorrelation for spectrum subdivision and get TNS filter parameters based on it */ + spectrumLength = stopLine - startLine; + + /* Variable initialization */ + for ( iSubdivisions = 0; ( iSubdivisions < nSubdivisions ) && ( norms[iSubdivisions] > HLM_MIN_NRG ); iSubdivisions++ ) + { + fac = 1.0f / norms[iSubdivisions]; + iStartLine = startLine + spectrumLength * iSubdivisions / nSubdivisions; + iEndLine = startLine + spectrumLength * ( iSubdivisions + 1 ) / nSubdivisions; + pWindow = tnsAcfWindow; + + /* For additional loop condition */ + /* Variable initialization */ + for ( lag = 1; lag <= maxOrder; lag++ ) + { + rxx[lag] += fac * ( *pWindow ) * dotp( pSpectrum + iStartLine - IGF_START_MN, pSpectrum + iStartLine - IGF_START_MN + lag, iEndLine - iStartLine - lag ); + pWindow++; + } + } + + *predictionGain = 0; + if ( iSubdivisions == nSubdivisions ) /* meaning there is no subdivision with low energy */ + { + rxx[0] = (float) nSubdivisions; + + /* Limit the maximum order to spectrum length/4 */ + *predictionGain = ITF_AutoToLPcoef( rxx, A, min( maxOrder, spectrumLength / 4 ) ); + + *curr_order = maxOrder; + } + + return 1; +} diff --git a/lib_com/tools.c b/lib_com/tools.c new file mode 100644 index 0000000000..3d08b428fd --- /dev/null +++ b/lib_com/tools.c @@ -0,0 +1,1754 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * own_random() + * + * Random generator + *------------------------------------------------------------------*/ + +/*! r: output random value */ +int16_t own_random( + int16_t *seed /* i/o: random seed */ +) +{ + *seed = (int16_t) ( *seed * 31821L + 13849L ); + + return ( *seed ); +} + +/*--------------------------------------------------------------------- + * sign() + * + *---------------------------------------------------------------------*/ + +/*! r: sign of x (+1/-1) */ +float sign( + const float x /* i : input value of x */ +) +{ + if ( x < 0.0f ) + { + return -1.0f; + } + else + { + return 1.0f; + } +} + +/*--------------------------------------------------------------------- + * log2_f() + * + *---------------------------------------------------------------------*/ + +/*! r: logarithm2 of x */ +float log2_f( + const float x /* i : input value of x */ +) +{ + return (float) ( log( x ) / log( 2.0f ) ); +} + +int16_t norm_ul( uint32_t UL_var1 ) +{ + int16_t var_out; + + if ( UL_var1 == 0 ) + { + var_out = 0; + } + else + { + for ( var_out = 0; UL_var1 < (uint32_t) 0x80000000U; var_out++ ) + { + UL_var1 <<= 1; + } + } + BASOP_CHECK(); + + return ( var_out ); +} + + +/*--------------------------------------------------------------------- + * sum_s() + * sum_l() + * sum_f() + * + *---------------------------------------------------------------------*/ + +/*! r: sum of all vector elements */ +int16_t sum_s( + const int16_t *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +) +{ + int16_t i; + int16_t tmp; + + tmp = 0; + for ( i = 0; i < lvec; i++ ) + { + tmp += vec[i]; + } + + return tmp; +} + +/*! r: sum of all vector elements */ +int32_t sum_l( + const int32_t *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +) +{ + int16_t i; + int32_t tmpL; + + tmpL = 0; + for ( i = 0; i < lvec; i++ ) + { + tmpL += vec[i]; + } + + return tmpL; +} + +/*! r: sum of all vector elements */ +float sum_f( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +) +{ + int16_t i; + float tmp; + + tmp = 0.0f; + for ( i = 0; i < lvec; i++ ) + { + tmp += vec[i]; + } + + return tmp; +} + +/*---------------------------------------------------------------------- + * sum2_f() + * + *---------------------------------------------------------------------*/ + +/*! r: sum of all squared vector elements */ +float sum2_f( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +) +{ + int16_t i; + float tmp; + + tmp = 0.0f; + for ( i = 0; i < lvec; i++ ) + { + tmp += vec[i] * vec[i]; + } + + return tmp; +} + +/*-------------------------------------------------------------------* + * set_c() + * set_s() + * set_f() + * set_l() + * set_d() + * + * Set the vector elements to a value + *-------------------------------------------------------------------*/ + +void set_c( + int8_t y[], /* i/o: Vector to set */ + const int8_t a, /* i : Value to set the vector to */ + const int16_t N /* i : Length of the vector */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = a; + } + + return; +} + + +void set_s( + int16_t y[], /* i/o: Vector to set */ + const int16_t a, /* i : Value to set the vector to */ + const int16_t N /* i : Length of the vector */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = a; + } + + return; +} + + +void set_l( + int32_t y[], /* i/o: Vector to set */ + const int32_t a, /* i : Value to set the vector to */ + const int16_t N /* i : Length of the vector */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = a; + } + + return; +} + +void set_f( + float y[], /* i/o: Vector to set */ + const float a, /* i : Value to set the vector to */ + const int16_t N /* i : Lenght of the vector */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = a; + } + + return; +} + + +/*---------------------------------------------------------------------* + * set_zero() + * + * Set a vector vec[] of dimension lvec to zero + *---------------------------------------------------------------------*/ + +void set_zero( + float *vec, /* o : input vector */ + const int16_t lvec /* i : length of the vector */ +) +{ + int16_t i; + + for ( i = 0; i < lvec; i++ ) + { + *vec++ = 0.0f; + } + + return; +} + + +/*---------------------------------------------------------------------* + * mvr2r() + * mvs2s() + * mvr2s() + * mvs2r() + * mvr2d() + * mvd2r() + * + * Transfer the contents of vector x[] to vector y[] + *---------------------------------------------------------------------*/ + +void mvr2r( + const float x[], /* i : input vector */ + float y[], /* o : output vector */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + + if ( n <= 0 ) + { + /* cannot transfer vectors with size 0 */ + return; + } + + if ( y < x ) + { + for ( i = 0; i < n; i++ ) + { + y[i] = x[i]; + } + } + else + { + for ( i = n - 1; i >= 0; i-- ) + { + y[i] = x[i]; + } + } + + return; +} + +void mvs2s( + const int16_t x[], /* i : input vector */ + int16_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + + if ( n <= 0 ) + { + /* cannot transfer vectors with size 0 */ + return; + } + + if ( y < x ) + { + for ( i = 0; i < n; i++ ) + { + y[i] = x[i]; + } + } + else + { + for ( i = n - 1; i >= 0; i-- ) + { + y[i] = x[i]; + } + } + + return; +} + +uint32_t mvr2s( + const float x[], /* i : input vector */ + int16_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + float temp; + uint32_t noClipping = 0; + + if ( n <= 0 ) + { + /* cannot transfer vectors with size 0 */ + return 0; + } + + if ( (void *) y < (const void *) x ) + { + for ( i = 0; i < n; i++ ) + { + temp = x[i]; + temp = (float) floor( temp + 0.5f ); + + if ( temp > MAX16B_FLT ) + { + temp = MAX16B_FLT; + noClipping++; + } + else if ( temp < MIN16B_FLT ) + { + temp = MIN16B_FLT; + noClipping++; + } + + y[i] = (int16_t) temp; + } + } + else + { + for ( i = n - 1; i >= 0; i-- ) + { + temp = x[i]; + temp = (float) floor( temp + 0.5f ); + + if ( temp > MAX16B_FLT ) + { + temp = MAX16B_FLT; + noClipping++; + } + else if ( temp < MIN16B_FLT ) + { + temp = MIN16B_FLT; + noClipping++; + } + + y[i] = (int16_t) temp; + } + } + + return noClipping; +} + +void mvs2r( + const int16_t x[], /* i : input vector */ + float y[], /* o : output vector */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + + if ( n <= 0 ) + { + /* cannot transfer vectors with size 0 */ + return; + } + + if ( (void *) y < (const void *) x ) + { + for ( i = 0; i < n; i++ ) + { + y[i] = (float) x[i]; + } + } + else + { + for ( i = n - 1; i >= 0; i-- ) + { + y[i] = (float) x[i]; + } + } + + return; +} + + +void mvl2l( + const int32_t x[], /* i : input vector */ + int32_t y[], /* o : output vector */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + + if ( n <= 0 ) + { + /* no need to transfer vectors with size 0 */ + return; + } + + if ( y < x ) + { + for ( i = 0; i < n; i++ ) + { + y[i] = x[i]; + } + } + else + { + for ( i = n - 1; i >= 0; i-- ) + { + y[i] = x[i]; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * thr_f() + * + * Thresholding of input value such that x_min < x < x_max + *---------------------------------------------------------------------*/ + +/*! r: thresholded value */ +float thr_f( + const float x, /* i : input value */ + const float x_min, /* i : lower thresholod */ + const float x_max /* o : upper threshold */ +) +{ + float y; + + if ( x < x_min ) + { + y = x_min; + } + else if ( x > x_max ) + { + y = x_max; + } + else + { + y = x; + } + + return y; +} + + +/*---------------------------------------------------------------------* + * maximum() + * + * Find index and value of the maximum in a vector + *---------------------------------------------------------------------*/ + +/*! r: index of the maximum value in the input vector */ +int16_t maximum( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *max_val /* o : maximum value in the input vector */ +) +{ + int16_t j, ind; + float tmp; + + ind = 0; + tmp = vec[0]; + + for ( j = 1; j < lvec; j++ ) + { + if ( vec[j] > tmp ) + { + ind = j; + tmp = vec[j]; + } + } + + if ( max_val != NULL ) + { + *max_val = tmp; + } + + return ind; +} + + +/*! r: index of the maximum value in the input vector */ +int16_t maximum_s( + const int16_t *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + int16_t *max /* o : maximum value in the input vector */ +) +{ + int16_t i, ind; + int16_t tmp; + + ind = 0; + tmp = vec[0]; + + for ( i = 1; i < lvec; i++ ) + { + if ( vec[i] > tmp ) + { + tmp = vec[i]; + } + } + + if ( max != NULL ) + { + *max = tmp; + } + + return ind; +} + +/*---------------------------------------------------------------------* + * maximumAbs() + * + * Find index and value of the maximum in a vector + *---------------------------------------------------------------------*/ + +/*! r: index of the maximum value in the input vector */ +int16_t maximumAbs( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *max_val /* o : maximum value in the input vector */ +) +{ + int16_t j, ind; + float tmp; + + ind = 0; + tmp = (float) fabs( vec[0] ); + + for ( j = 1; j < lvec; j++ ) + { + if ( (float) fabs( vec[j] ) > tmp ) + { + ind = j; + tmp = (float) fabs( vec[j] ); + } + } + + if ( max_val != NULL ) + { + *max_val = tmp; + } + + return ind; +} + +/*---------------------------------------------------------------------* + * minimum() + * + * Find index of a minimum in a vector + *---------------------------------------------------------------------*/ + +/*! r: index of the minimum value in the input vector */ +int16_t minimum( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *min_val /* o : minimum value in the input vector */ +) +{ + int16_t j, ind; + float tmp; + + ind = 0; + tmp = vec[0]; + + for ( j = 1; j < lvec; j++ ) + { + if ( vec[j] < tmp ) + { + ind = j; + tmp = vec[j]; + } + } + + if ( min_val != NULL ) + { + *min_val = tmp; + } + + return ind; +} + +/*-------------------------------------------------------------------* + * minimum_s() + * + * Finds minimum 16-bit signed integer value in the array and returns it. + *-------------------------------------------------------------------*/ + +/*! r: index of the minimum value in the input vector */ +int16_t minimum_s( + const int16_t *vec, /* i : Input vector */ + const int16_t lvec, /* i : Vector length */ + int16_t *min_val /* o : minimum value in the input vector */ +) +{ + int16_t i, ind, tmp; + + ind = 0; + tmp = vec[0]; + + for ( i = 1; i < lvec; i++ ) + { + if ( vec[i] < tmp ) + { + ind = i; + tmp = vec[i]; + } + } + + if ( min_val != NULL ) + { + *min_val = tmp; + } + + return ind; +} + + +/*---------------------------------------------------------------------* + * emaximum() + * + * Find index of a maximum energy in a vector + *---------------------------------------------------------------------*/ + +/*! r: return index with max energy value in vector */ +int16_t emaximum( + const float *vec, /* i : input vector */ + const int16_t lvec, /* i : length of input vector */ + float *ener_max /* o : maximum energy value */ +) +{ + int16_t j, ind; + float temp; + + *ener_max = 0.0f; + ind = 0; + + for ( j = 0; j < lvec; j++ ) + { + temp = vec[j] * vec[j]; + + if ( temp > *ener_max ) + { + ind = j; + *ener_max = temp; + } + } + + return ind; +} + + +/*---------------------------------------------------------------------* + * mean() + * + * Find the mean of the vector + *---------------------------------------------------------------------*/ + +/*! r: mean of vector */ +float mean( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +) +{ + float tmp; + + tmp = sum_f( vec, lvec ) / (float) lvec; + + return tmp; +} + +/*---------------------------------------------------------------------* + * dotp() + * + * Dot product of vector x[] and vector y[] + *---------------------------------------------------------------------*/ + +/*! r: dot product of x[] and y[] */ +float dotp( + const float x[], /* i : vector x[] */ + const float y[], /* i : vector y[] */ + const int16_t n /* i : vector length */ +) +{ + int16_t i; + float suma; + + suma = x[0] * y[0]; + + for ( i = 1; i < n; i++ ) + { + suma += x[i] * y[i]; + } + + return suma; +} + + +/*---------------------------------------------------------------------* + * inv_sqrt() + * + * Find the inverse square root of the input value + *---------------------------------------------------------------------*/ + +/*! r: inverse square root of input value */ +float inv_sqrt( + const float x /* i : input value */ +) +{ + return (float) ( 1.0 / sqrt( x ) ); +} + +/*-------------------------------------------------------------------* + * conv() + * + * Convolution between vectors x[] and h[] written to y[] + * All vectors are of length L. Only the first L samples of the + * convolution are considered. + *-------------------------------------------------------------------*/ + +void conv( + const float x[], /* i : input vector */ + const float h[], /* i : impulse response (or second input vector) */ + float y[], /* o : output vetor (result of convolution) */ + const int16_t L /* i : vector size */ +) +{ + float temp; + int16_t i, n; + for ( n = 0; n < L; n++ ) + { + temp = x[0] * h[n]; + for ( i = 1; i <= n; i++ ) + { + temp += x[i] * h[n - i]; + } + y[n] = temp; + } + + return; +} + +/*-------------------------------------------------------------------* + * fir() + * + * FIR filtering of vector x[] with filter having impulse response h[] + * written to y[] + * The input vector has length L and the FIR filter has an order of K, i.e. + * K+1 coefficients. The memory of the input signal is provided in the vector mem[] + * which has K values + * The maximum length of the input signal is L_FRAME32k and the maximum order + * of the FIR filter is L_FILT_MAX + *-------------------------------------------------------------------*/ + +void fir( + const float x[], /* i : input vector */ + const float h[], /* i : impulse response of the FIR filter */ + float y[], /* o : output vector (result of filtering) */ + float mem[], /* i/o: memory of the input signal (L samples) */ + const int16_t L, /* i : input vector size */ + const int16_t K, /* i : order of the FIR filter (K+1 coefs.) */ + const int16_t upd /* i : 1 = update the memory, 0 = not */ +) +{ + float buf_in[L_FRAME48k + 60], buf_out[L_FRAME48k], s; + int16_t i, j; + + /* prepare the input buffer (copy and update memory) */ + mvr2r( mem, buf_in, K ); + mvr2r( x, buf_in + K, L ); + + if ( upd ) + { + mvr2r( buf_in + L, mem, K ); + } + + /* do the filtering */ + for ( i = 0; i < L; i++ ) + { + s = buf_in[K + i] * h[0]; + + for ( j = 1; j <= K; j++ ) + { + s += h[j] * buf_in[K + i - j]; + } + + buf_out[i] = s; + } + + /* copy to the output buffer */ + mvr2r( buf_out, y, L ); + + return; +} + +/*-------------------------------------------------------------------* + * v_add() + * + * Addition of two vectors sample by sample + *-------------------------------------------------------------------*/ + +void v_add( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 + vector 2 */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = x1[i] + x2[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * v_sub() + * + * Subtraction of two vectors sample by sample + *-------------------------------------------------------------------*/ + +void v_sub( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 - vector 2 */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = x1[i] - x2[i]; + } + + return; +} + +/*-------------------------------------------------------------------* + * v_mult() + * + * Multiplication of two vectors + *-------------------------------------------------------------------*/ + +void v_mult( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = x1[i] * x2[i]; + } + + return; +} + +/*-------------------------------------------------------------------* + * v_multc() + * + * Multiplication of vector by constant + *-------------------------------------------------------------------*/ + +void v_multc( + const float x[], /* i : Input vector */ + const float c, /* i : Constant */ + float y[], /* o : Output vector that contains c*x */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i; + + for ( i = 0; i < N; i++ ) + { + y[i] = c * x[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * squant() + * + * Scalar quantizer according to MMSE criterion (nearest neighbour in Euclidean space) + * + * Searches a given codebook to find the nearest neighbour in Euclidean space. + * Index of the winning codeword and the winning codeword itself are returned. + *-------------------------------------------------------------------*/ + +/*! r: index of the winning codeword */ +int16_t squant( + const float x, /* i : scalar value to quantize */ + float *xq, /* o : quantized value */ + const float cb[], /* i : codebook */ + const int16_t cbsize /* i : codebook size */ +) +{ + float dist, mindist, tmp; + int16_t c, idx; + + idx = 0; + mindist = 1e16f; + + for ( c = 0; c < cbsize; c++ ) + { + dist = 0.0f; + tmp = x - cb[c]; + dist += tmp * tmp; + if ( dist < mindist ) + { + mindist = dist; + idx = c; + } + } + + *xq = cb[idx]; + + return idx; +} + +/*! r: index of the winning codeword */ +int16_t squant_int( + uint8_t x, /* i : scalar value to quantize */ + uint8_t *xq, /* o : quantized value */ + const uint8_t *cb, /* i : codebook */ + const int16_t cbsize /* i : codebook size */ +) +{ + int16_t i, idx; + float mindist, d; + + idx = 0; + mindist = 10000000.0f; + for ( i = 0; i < cbsize; i++ ) + { + d = (float) ( x - cb[i] ) * ( x - cb[i] ); + if ( d < mindist ) + { + mindist = d; + idx = i; + } + } + *xq = cb[idx]; + + return idx; +} + + +/*-------------------------------------------------------------------* + * usquant() + * + * Uniform scalar quantizer according to MMSE criterion + * (nearest neighbour in Euclidean space) + * + * Applies quantization based on scale and round operations. + * Index of the winning codeword and the winning codeword itself are returned. + *-------------------------------------------------------------------*/ + +/*! r: index of the winning codeword */ +int16_t usquant( + const float x, /* i : scalar value to quantize */ + float *xq, /* o : quantized value */ + const float qlow, /* i : lowest codebook entry (index 0) */ + const float delta, /* i : quantization step */ + const int16_t cbsize /* i : codebook size */ +) +{ + int16_t idx; + + idx = (int16_t) max( 0.f, min( cbsize - 1, ( ( x - qlow ) / delta + 0.5f ) ) ); + *xq = idx * delta + qlow; + + return idx; +} + +/*-------------------------------------------------------------------* + * usdequant() + * + * Uniform scalar de-quantizer routine + * + * Applies de-quantization based on scale and round operations. + *-------------------------------------------------------------------*/ + +float usdequant( + const int16_t idx, /* i : quantizer index */ + const float qlow, /* i : lowest codebook entry (index 0) */ + const float delta /* i : quantization step */ +) +{ + float g; + + g = idx * delta + qlow; + + return ( g ); +} + + +/*-------------------------------------------------------------------* + * vquant() + * + * Vector quantizer according to MMSE criterion (nearest neighbour in Euclidean space) + * + * Searches a given codebook to find the nearest neighbour in Euclidean space. + * Index of the winning codevector and the winning vector itself are returned. + *-------------------------------------------------------------------*/ + +/*! r: index of the winning codevector */ +int16_t vquant( + float x[], /* i : vector to quantize */ + const float x_mean[], /* i : vector mean to subtract (0 if none) */ + float xq[], /* o : quantized vector */ + const float cb[], /* i : codebook */ + const int16_t dim, /* i : dimension of codebook vectors */ + const int16_t cbsize /* i : codebook size */ +) +{ + float dist, mindist, tmp; + int16_t c, d, idx, j; + + idx = 0; + mindist = 1e16f; + + if ( x_mean != 0 ) + { + for ( d = 0; d < dim; d++ ) + { + x[d] -= x_mean[d]; + } + } + + j = 0; + for ( c = 0; c < cbsize; c++ ) + { + dist = 0.0f; + for ( d = 0; d < dim; d++ ) + { + tmp = x[d] - cb[j++]; + dist += tmp * tmp; + } + + if ( dist < mindist ) + { + mindist = dist; + idx = c; + } + } + + if ( xq == 0 ) + { + return idx; + } + + j = idx * dim; + for ( d = 0; d < dim; d++ ) + { + xq[d] = cb[j++]; + } + + if ( x_mean != 0 ) + { + for ( d = 0; d < dim; d++ ) + { + xq[d] += x_mean[d]; + } + } + + return idx; +} + +/*-------------------------------------------------------------------* + * w_vquant() + * + * Vector quantizer according to MMSE criterion (nearest neighbour in Euclidean space) + * + * Searches a given codebook to find the nearest neighbour in Euclidean space. + * Weights are put on the error for each vector element. + * Index of the winning codevector and the winning vector itself are returned. + *-------------------------------------------------------------------*/ + +/*! r: index of the winning codevector */ +int16_t w_vquant( + float x[], /* i : vector to quantize */ + const float x_mean[], /* i : vector mean to subtract (0 if none) */ + const int16_t weights[], /* i : error weights */ + float xq[], /* o : quantized vector */ + const float cb[], /* i : codebook */ + const int16_t dim, /* i : dimension of codebook vectors */ + const int16_t cbsize, /* i : codebook size */ + const int16_t rev_vect /* i : reverse codebook vectors */ +) +{ + float dist, mindist, tmp; + int16_t c, d, idx, j, k; + + idx = 0; + mindist = 1e16f; + + if ( x_mean != 0 ) + { + for ( d = 0; d < dim; d++ ) + { + x[d] -= x_mean[d]; + } + } + + j = 0; + if ( rev_vect ) + { + k = dim - 1; + for ( c = 0; c < cbsize; c++ ) + { + dist = 0.0f; + + for ( d = k; d >= 0; d-- ) + { + tmp = x[d] - cb[j++]; + dist += weights[d] * ( tmp * tmp ); + } + + if ( dist < mindist ) + { + mindist = dist; + idx = c; + } + } + + if ( xq == 0 ) + { + return idx; + } + + j = idx * dim; + for ( d = k; d >= 0; d-- ) + { + xq[d] = cb[j++]; + } + } + else + { + for ( c = 0; c < cbsize; c++ ) + { + dist = 0.0f; + + for ( d = 0; d < dim; d++ ) + { + tmp = x[d] - cb[j++]; + dist += weights[d] * ( tmp * tmp ); + } + + if ( dist < mindist ) + { + mindist = dist; + idx = c; + } + } + + if ( xq == 0 ) + { + return idx; + } + + j = idx * dim; + for ( d = 0; d < dim; d++ ) + { + xq[d] = cb[j++]; + } + } + + if ( x_mean != 0 ) + { + for ( d = 0; d < dim; d++ ) + { + xq[d] += x_mean[d]; + } + } + + return idx; +} + + +/*----------------------------------------------------------------------------------* + * v_sort() + * + * Sorting of vectors. This is very fast with almost ordered vectors. + *----------------------------------------------------------------------------------*/ + +void v_sort( + float *r, /* i/o: Vector to be sorted in place */ + const int16_t lo, /* i : Low limit of sorting range */ + const int16_t up /* I : High limit of sorting range */ +) +{ + int16_t i, j; + float tempr; + + for ( i = up - 1; i >= lo; i-- ) + { + tempr = r[i]; + for ( j = i + 1; j <= up && ( tempr > r[j] ); j++ ) + { + r[j - 1] = r[j]; + } + + r[j - 1] = tempr; + } + + return; +} + +void sort( + uint16_t *x, /* i/o: Vector to be sorted */ + uint16_t len /* i/o: vector length */ +) +{ + int16_t i; + uint16_t j, tempr; + + for ( i = len - 2; i >= 0; i-- ) + { + tempr = x[i]; + for ( j = i + 1; ( j < len ) && ( tempr > x[j] ); j++ ) + { + x[j - 1] = x[j]; + } + x[j - 1] = tempr; + } + + return; +} + + +/*---------------------------------------------------------------------* + * var() + * + * Calculate the variance of a vector + *---------------------------------------------------------------------*/ + +/*! r: variance of vector */ +float var( + const float *x, /* i : input vector */ + const int16_t len /* i : length of inputvector */ +) +{ + float m; + float v; + int16_t i; + + m = mean( x, (const int16_t) len ); + + v = 0.0f; + for ( i = 0; i < len; i++ ) + { + v += ( x[i] - m ) * ( x[i] - m ); + } + v /= len; + + return v; +} + + +/*---------------------------------------------------------------------* + * std_dev() + * + * Calculate the standard deviation of a vector + *---------------------------------------------------------------------*/ + +/*! r: standard deviation */ +float std_dev( + const float *x, /* i : input vector */ + const int16_t len /* i : length of the input vector */ +) +{ + int16_t i; + float std; + + std = 1e-16f; + for ( i = 0; i < len; i++ ) + { + std += x[i] * x[i]; + } + + std = (float) sqrt( std / len ); + + return std; +} + + +/*---------------------------------------------------------------------* + * dot_product_mat() + * + * Calculates dot product of type x'*A*x, where x is column vector of size m, + * and A is square matrix of size m*m + *---------------------------------------------------------------------*/ + +/*! r: the dot product x'*A*x */ +float dot_product_mat( + const float *x, /* i : vector x */ + const float *A, /* i : matrix A */ + const int16_t m /* i : vector & matrix size */ +) +{ + int16_t i, j; + float suma, tmp_sum; + const float *pt_x, *pt_A; + + pt_A = A; + suma = 0; + + for ( i = 0; i < m; i++ ) + { + tmp_sum = 0; + pt_x = x; + for ( j = 0; j < m; j++ ) + { + tmp_sum += *pt_x++ * *pt_A++; + } + + suma += x[i] * tmp_sum; + } + + return suma; +} + + +/*--------------------------------------------------------------------------------* + * polezero_filter() + * + * Y(Z)=X(Z)(b[0]+b[1]z^(-1)+..+b[L]z^(-L))/(a[0]+a[1]z^(-1)+..+a[M]z^(-M)) + * mem[n]=x[n]+cp[0]mem[n-1]+..+cp[M-1]mem[n-M], where cp[i]=-a[i+1]/a[0] + * y[n]=cz[0]mem[n]+cz[1]mem[n-1]+..+cz[L]mem[n-L], where cz[i]=b[i]/a[0] + * mem={mem[n-K] mem[n-K+1] . . . . mem[n-2] mem[n-1]}, where K=max(L,M) + * + * a[0] must be equal to 1.0f! + *---------------------------------------------------------------------------------*/ + +void polezero_filter( + const float *in, /* i : input vector */ + float *out, /* o : output vector */ + const int16_t N, /* i : input vector size */ + const float *b, /* i : numerator coefficients */ + const float *a, /* i : denominator coefficients */ + const int16_t order, /* i : filter order */ + float *mem /* i/o: filter memory */ +) +{ + int16_t i, j, k; + + + for ( i = 0; i < order; i++ ) + { + out[i] = in[i] * b[0]; + for ( j = 0; j < i; j++ ) + { + out[i] += in[i - 1 - j] * b[j + 1] - out[i - 1 - j] * a[j + 1]; + } + + for ( k = order - 1; j < order; j++, k-- ) + { + out[i] += mem[k] * b[j + 1] - mem[k + order] * a[j + 1]; + } + } + + for ( ; i < N; i++ ) + { + out[i] = in[i] * b[0]; + for ( j = 0; j < order; j++ ) + { + out[i] += in[i - 1 - j] * b[j + 1] - out[i - 1 - j] * a[j + 1]; + } + } + + for ( i = 0; i < order; i++ ) + { + mem[i] = in[N - order + i]; + mem[i + order] = out[N - order + i]; + } + + return; +} + +#define WMC_TOOL_MAN + +static float fleft_shift( float input, const int16_t shift ) +{ + return ( input * (float) pow( 2.0, (double) shift ) ); +} + +static float fright_shift( float input, const int16_t shift ) +{ + return ( input * (float) pow( 0.5, (double) shift ) ); +} +#undef WMC_TOOL_MAN + + +/*--------------------------------------------------------------------------------* + * root_a() + * + * Implements a quadratic approximation to sqrt(a) + * Firstly, a is normalized to lie between 0.25 & 1.0 + * by shifting the input left or right by an even number of + * shifts. Even shifts represent powers of 4 which, after + * the sqrt, can easily be converted to powers of 2 and are + * easily dealt with. + * At the heart of the algorithm is a quadratic + * approximation of the curve sqrt(a) for 0.25 <= a <= 1.0. + * Sqrt(a) approx = 0.27 + 1.0127 * a - 0.2864 * a^2 + * + *---------------------------------------------------------------------------------*/ + +float root_a( + float a ) +{ + int16_t shift_a; + float mod_a; + float approx; + + if ( a <= 0.0f ) + { + return 0.0; + } + +#define WMC_TOOL_MAN + /* This next piece of code implements a "norm" function */ + /* and returns the shift needed to scale "a" to have a */ + /* 1 in the (MSB-1) position. This is equivalent to */ + /* giving a value between 0.5 & 1.0. */ + mod_a = a; + + shift_a = 0; + while ( mod_a > 1.0 ) + { + mod_a /= 2.0; + shift_a--; + } + + while ( mod_a < 0.5 ) + { + mod_a *= 2.0; + shift_a++; + } +#undef WMC_TOOL_MAN + + shift_a &= 0xfffe; + mod_a = fleft_shift( a, shift_a ); + + approx = 0.27f + 1.0127f * mod_a - 0.2864f * mod_a * mod_a; + + approx = fright_shift( approx, ( shift_a >> 1 ) ); + + return ( approx ); +} + +/*--------------------------------------------------------------------------------* + * root_a_over_b() + * + * Implements an approximation to sqrt(a/b) + * Firstly a & b are normalized to lie between 0.25 & 1.0 + * by shifting the inputs left or right by an even number + * of shifts. + * Even shifts represent powers of 4 which, after the sqrt, + * become powers of 2 and are easily dealt with. + * At the heart of the algorithm is an approximation of the + * curve sqrt(a/b) for 0.25 <= a <= 1.0 & 0.25 <= b <= 1.0. + * Given the value of b, the 2nd order coefficients p0, p1 + * & p2 can be determined so that... + * Sqrt(a/b) approx = p0 + p1 * a + p2 * a^2 + * where p0 approx = 0.7176 - 0.8815 * b + 0.4429 * b^2 + * p1 approx = 2.6908 - 3.3056 * b + 1.6608 * b^2 + * p2 approx = -0.7609 + 0.9346 * b - 0.4695 * b^2 + * + *---------------------------------------------------------------------------------*/ + +float root_a_over_b( + float a, + float b ) +{ + int16_t shift_a, shift_b, shift; + float mod_a, mod_b; + float p2 = -0.7609f; + float p1 = 2.6908f; + float p0 = 0.7176f; + float b_sqr; + float approx; + + if ( ( a <= 0.0f ) || ( b <= 0.0f ) ) + { + return 0.0; + } +#define WMC_TOOL_MAN + if ( isinf( a ) ) + { + return FLT_MAX; + } + if ( isinf( b ) ) + { + return 0.f; + } +#undef WMC_TOOL_MAN + + a += 0x00000001; + b += 0x00000001; + +#define WMC_TOOL_MAN + /* This next piece of code implements a "norm" function */ + /* and returns the shift needed to scale "a" to have a */ + /* 1 in the (MSB-1) position. This is equivalent to */ + /* giving a value between 0.5 & 1.0. */ + mod_a = a; + + shift_a = 0; + while ( mod_a > 1.0 ) + { + mod_a /= 2.0; + shift_a--; + } + + while ( mod_a < 0.5 ) + { + mod_a *= 2.0; + shift_a++; + } +#undef WMC_TOOL_MAN + + shift_a &= 0xfffe; + mod_a = fleft_shift( a, shift_a ); + +#define WMC_TOOL_MAN + /* This next piece of code implements a "norm" function */ + /* and returns the shift needed to scale "b" to have a */ + /* 1 in the (MSB-1) position. This is equivalent to */ + /* giving a value between 0.5 & 1.0. */ + mod_b = b; + + shift_b = 0; + while ( mod_b > 1.0 ) + { + mod_b /= 2.0; + shift_b--; + } + + while ( mod_b < 0.5 ) + { + mod_b *= 2.0; + shift_b++; + } +#undef WMC_TOOL_MAN + + shift_b &= 0xfffe; + mod_b = fleft_shift( b, shift_b ); + + shift = ( shift_b - shift_a ) >> 1; + + b_sqr = mod_b * mod_b; + + p2 += 0.9346f * mod_b + -0.4695f * b_sqr; + p1 += -3.3056f * mod_b + 1.6608f * b_sqr; + p0 += -0.8815f * mod_b + 0.4429f * b_sqr; + + approx = p0 + p1 * mod_a + p2 * mod_a * mod_a; + + approx = fleft_shift( approx, shift ); + + return ( approx ); +} + +/*--------------------------------------------------------------------------------* + * rint_new() + * + * Round to the nearest integer with mid-point exception + *---------------------------------------------------------------------------------*/ + +double rint_new( + double x ) +{ + int16_t a; + + /* middle value point test */ + if ( ceil( x + 0.5 ) == floor( x + 0.5 ) ) + { + a = (int16_t) ceil( x ); + + if ( a % 2 == 0 ) + { + return ceil( x ); + } + else + { + return floor( x ); + } + } + else + { + return floor( x + 0.5 ); + } +} + + +/*-------------------------------------------------------------------* + * anint() + * + * Round to the nearest integer. + *-------------------------------------------------------------------*/ + +double anint( + double x ) +{ + return ( x ) >= 0 ? (int32_t) ( ( x ) + 0.5 ) : (int32_t) ( (x) -0.5 ); +} + +/*-------------------------------------------------------------------* + * is_numeric_float() + * + * Returns 0 for all NaN and Inf values defined according to IEEE 754 + * floating point number's definition. Returns 1 for numeric values. + *-------------------------------------------------------------------*/ + +int16_t is_numeric_float( + float x ) +{ +#ifndef BASOP_NOGLOB + union float_int +#else /* BASOP_NOGLOB */ + union float_int +#endif /* BASOP_NOGLOB */ + { + float float_val; + int32_t int_val; + } float_int; + + float_int.float_val = x; + + return ( ( float_int.int_val & 0x7f800000 ) != 0x7f800000 ); +} + +/*-------------------------------------------------------------------* + * delay_signal() + * + * Delay buffer by defined number of samples + *-------------------------------------------------------------------*/ + +void delay_signal( + float x[], /* i/o: signal to be delayed */ + const int16_t len, /* i : length of the input signal */ + float mem[], /* i/o: synchronization memory */ + const int16_t delay /* i : delay in samples */ +) +{ + float tmp_buffer[L_FRAME48k]; + + mvr2r( mem, tmp_buffer, delay ); + mvr2r( x + len - delay, mem, delay ); + mvr2r( x, x + delay, len - delay ); + mvr2r( tmp_buffer, x, delay ); + + return; +} diff --git a/lib_com/trans_direct.c b/lib_com/trans_direct.c new file mode 100644 index 0000000000..d6e35d583e --- /dev/null +++ b/lib_com/trans_direct.c @@ -0,0 +1,178 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------- + * direct_transform() + * + * Transformation of the signal to DCT domain + *-------------------------------------------------------------------*/ + +void direct_transform( + const float *in32, /* i : input signal */ + float *out32, /* o : transformation */ + const int16_t is_transient, /* i : is transient */ + const int16_t L, /* i : length */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + int16_t i; + int16_t seg; + int16_t segment_length; + + const float *wh; + const float *wl; + float *sh; + float *sl; + float *iseg; + float *oseg; + float dctin32[L_FRAME48k]; + float in32_r16[L_FRAME48k]; + + const float *win; + + + segment_length = L / 2; + + if ( is_transient ) + { + if ( L == L_FRAME48k ) + { + win = wscw16q15; + } + else if ( L == L_FRAME32k ) + { + win = wscw16q15_32; + } + else if ( L == L_FRAME8k ) + { + win = wscw16q15_8; + } + else + { + win = wscw16q15_16; + } + + for ( i = 0; i < L / 2; i++ ) + { + in32_r16[i] = in32[L - 1 - i]; + in32_r16[L - 1 - i] = in32[i]; + } + iseg = in32_r16 - segment_length / 4; + oseg = out32; + + wh = win + segment_length / 4; + wl = win + segment_length / 4 - 1; + sh = iseg + 3 * segment_length / 4; + sl = iseg + 3 * segment_length / 4 - 1; + for ( i = 0; i < segment_length / 4; i++ ) + { + dctin32[i] = ( ( *wl-- * *sl-- ) - ( *wh++ * *sh++ ) ); + } + + sl = iseg + segment_length / 2 - 1; + + for ( i = 0; i < segment_length / 4; i++ ) + { + dctin32[segment_length / 4 + i] = -( *sl-- ); + } + + edct( dctin32, oseg, segment_length / 2, element_mode ); + + iseg = iseg + segment_length / 2; + oseg = oseg + segment_length / 2; + + for ( seg = 1; seg < NUM_TIME_SWITCHING_BLOCKS - 1; seg++ ) + { + wh = win + segment_length / 4; + wl = win + segment_length / 4 - 1; + sh = iseg + 3 * segment_length / 4; + sl = iseg + 3 * segment_length / 4 - 1; + for ( i = 0; i < segment_length / 4; i++ ) + { + dctin32[i] = ( ( *wl-- * *sl-- ) - ( *wh++ * *sh++ ) ); + } + + sh = iseg; + sl = iseg + segment_length / 2 - 1; + wh = win + segment_length / 2 - 1; + wl = win + 0; + + for ( i = 0; i < segment_length / 4; i++ ) + { + dctin32[segment_length / 4 + i] = ( ( *wl++ * *sl-- ) + ( *wh-- * *sh++ ) ); + } + + edct( dctin32, oseg, segment_length / 2, element_mode ); + + iseg = iseg + segment_length / 2; + oseg = oseg + segment_length / 2; + } + + sh = iseg + 3 * segment_length / 4 - 1; + for ( i = 0; i < segment_length / 4; i++ ) + { + dctin32[i] = -( *sh-- ); + } + + sh = iseg; + sl = iseg + segment_length / 2 - 1; + wh = win + segment_length / 2 - 1; + wl = win + 0; + + for ( i = 0; i < segment_length / 4; i++ ) + { + dctin32[segment_length / 4 + i] = ( ( *wh-- * *sh++ ) + ( *wl++ * *sl-- ) ); + } + + edct( dctin32, oseg, segment_length / 2, element_mode ); + } + else + { + edct( in32, out32, L, element_mode ); + } + + return; +} diff --git a/lib_com/trans_inv.c b/lib_com/trans_inv.c new file mode 100644 index 0000000000..18c5fe0431 --- /dev/null +++ b/lib_com/trans_inv.c @@ -0,0 +1,897 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * Local constants + *--------------------------------------------------------------------------*/ + +#define NUMSF 8 +#define LOG2_NUMSF 3 +#define INV_NUMSF 0.125f + +/*--------------------------------------------------------------------------* + * preecho_sb() + * + * Time-domain sub-band based pre-echo reduction + *--------------------------------------------------------------------------*/ + +void preecho_sb( + const int32_t core_brate, /* i : core bitrate */ + const float wtda_audio[], /* i : imdct signal */ + float *rec_sig, /* i : reconstructed signal, output of the imdct transform */ + const int16_t framelength, /* i : frame length */ + float *memfilt_lb, /* i/o: memory */ + float *mean_prev_hb, /* i/o: memory */ + float *smoothmem, /* i/o: memory */ + float *mean_prev, /* i/o: memory */ + float *mean_prev_nc, /* i/o: memory */ + float *wmold_hb, /* i/o: memory */ + int16_t *prevflag, /* i/o: flag */ + int16_t *pastpre, /* i/o: flag */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t i, j, len3xLp20; + float es_mdct[9]; /* 0..3 (0..7): energy of the 4 (8) subframes, 4..5: (8..10) energy of the future subframes */ + float es_mdct_hb[9]; /* 0..3 (0..7): energy of the 4 (8) subframes, 4..5: (8..10) energy of the future subframes */ + int16_t zcr[9]; /* 0..3 (0..7): zero crossing of the 4 (8) subframes, 4..5: (8..10) zero crossing of the future subframes */ + int16_t maxnzcr[8], cntnzcr; /* max number of samples without zero crossing */ + float plus_es_mdct[64]; /* 8*8 subsubframes */ + float imdct_mem[L_FRAME48k]; /* memory of the imdct transform, used in the next frame */ + + int16_t maxind, stind, stind_hb, cnt2, cnt5, adv, advmem; + int16_t ind2, ind3, pluslim; + float max_es; + float *ptr; + float min_g[13], g, gt[13]; + float min_g_hb[13], gt_hb[13]; + float preechogain[L_FRAME48k + PREECHO_SMOOTH_LEN]; + float preechogain_hb[L_FRAME48k]; + int16_t subframelength, subsubframelength; + float maxcrit, savehalfe, savehalfe_hb; + float rec_sig_lb[L_FRAME48k], rec_sig_hb[L_FRAME48k]; + float eshbmean2, eshbmean3, sxyhb2, sxylb3, sxyhb3; + float *fptr1, *fptr2, *fptr3, *fptr4, *fptr5, *fptr6; + int16_t *sptr1, *sptr2; + float wmold; + float lim16, lim32; + int16_t limzcr, limmaxnzcr; + float max_es_hb; + int16_t num_subsubframes, log2_num_subsubframes; + float ftmp, fattnext; + float sum_plus_es, mean_plus_es[65]; + float last2, last2_hb; + float max_plus_es_mdct; + int16_t nb_flag, smooth_len; + int16_t firstnzcr; + float es_mdct_half[9]; + float es_mdct_quart[9]; + double invsmoothlenp1; /*double just to have bit-exactness with the previous version, otherwise rounding difference of +-1*/ + int16_t subframelength_s2, subframelength_s34; + float oldgain, oldgain_hb; + + if ( core_brate <= HQ_32k ) + { + nb_flag = 0; + if ( bwidth == NB ) + { + nb_flag = 1; + } + + limzcr = 16; + smooth_len = 4; + invsmoothlenp1 = 0.2; + + if ( nb_flag == 1 ) + { + limzcr = 10; + smooth_len = PREECHO_SMOOTH_LEN; + invsmoothlenp1 = INV_PREECHO_SMOOTH_LENP1; + } + + limmaxnzcr = framelength / 24; + num_subsubframes = 8; + log2_num_subsubframes = 3; + + if ( framelength == L_FRAME8k ) + { + num_subsubframes = 4; + log2_num_subsubframes = 2; + } + len3xLp20 = framelength / 2 - (int16_t) ( (float) framelength * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + for ( i = 0; i < len3xLp20; i++ ) + { + imdct_mem[i] = -wtda_audio[len3xLp20 - 1 - i]; + } + + for ( i = 0; i < framelength / 2; i++ ) + { + imdct_mem[len3xLp20 + i] = -wtda_audio[i]; + } + + + subframelength = framelength >> LOG2_NUMSF; + subsubframelength = subframelength >> log2_num_subsubframes; + wmold = *smoothmem; + subframelength_s2 = subframelength / 2; + subframelength_s34 = subframelength * 3 / 4; + + cntnzcr = -1; + + lim16 = 0.1f; + lim32 = 0.01f; + savehalfe = 0.0f; + savehalfe_hb = 0.0f; + + if ( *pastpre == 0 ) + { + /* if past frame mean energies are not known (no preecho_sb in the past frame), limit max attenuation to 1*/ + lim16 = (float) 1; + lim32 = (float) 1; + } + + *pastpre = 2; + fptr1 = rec_sig_lb; + fptr2 = rec_sig; + fptr3 = rec_sig + 1; + fptr4 = rec_sig + 2; + *fptr1 = (float) ( 0.25 * ( *memfilt_lb + *fptr3 ) + 0.5 * *fptr2 ); + fptr1++; + + for ( j = 1; j < framelength - 1; j++ ) + { + *fptr1 = (float) ( 0.25 * ( *fptr2 + *fptr4 ) + 0.5 * *fptr3 ); + fptr1++; + fptr2++; + fptr3++; + fptr4++; + } + + *fptr1 = (float) ( 0.25 * ( *fptr2 ) + 0.5 * *fptr3 ); + fptr1 = rec_sig_lb; + fptr2 = rec_sig; + fptr3 = rec_sig_hb; + + for ( j = 0; j < framelength; j++ ) + { + *fptr3 = *fptr2 - *fptr1; + fptr1++; + fptr2++; + fptr3++; + } + + fptr2--; + *memfilt_lb = *fptr2; + + /* energy of low bands 8 present and 1 future sub-frames */ + fptr1 = es_mdct; + fptr5 = es_mdct_half; + fptr6 = es_mdct_quart; + fptr4 = es_mdct_hb; + fptr2 = rec_sig; + fptr3 = rec_sig_hb; + sptr1 = zcr; + *sptr1 = 0; + sptr2 = maxnzcr; + for ( j = 0; j < NUMSF; j++ ) /* 8 present subframes */ + { + *fptr1 = 100 + *fptr2 * *fptr2; + *fptr4 = 100 + *fptr3 * *fptr3; + + *sptr2 = 0; + firstnzcr = 1; + if ( j == 0 ) + { + firstnzcr = 0; + } + + fptr2++; + fptr3++; + + for ( i = 1; i < subframelength; i++ ) + { + if ( i == subframelength_s2 ) + { + *fptr5 = *fptr1; + } + + if ( i == subframelength_s34 ) + { + *fptr6 = *fptr1; + } + *fptr1 += *fptr2 * *fptr2; + *fptr4 += *fptr3 * *fptr3; + cntnzcr++; + if ( *fptr2 * *( fptr2 - 1 ) < 0 ) + { + ( *sptr1 )++; + if ( cntnzcr > *sptr2 ) + { + *sptr2 = cntnzcr; + } + + if ( ( firstnzcr > 0 ) && ( cntnzcr > maxnzcr[j - 1] ) ) + { + maxnzcr[j - 1] = cntnzcr; + } + + firstnzcr = 0; + cntnzcr = -1; + } + fptr2++; + fptr3++; + } + + if ( cntnzcr > *sptr2 ) + { + *sptr2 = cntnzcr; + } + fptr4++; + sptr1++; + sptr2++; + + if ( ( firstnzcr > 0 ) && ( cntnzcr > maxnzcr[j - 1] ) ) + { + maxnzcr[j - 1] = cntnzcr; + } + + *sptr1 = 0; + if ( ( j < NUMSF - 1 ) && ( *fptr2 * *( fptr2 - 1 ) < 0 ) ) /* zcr between 2 subframes */ + { + ( *sptr1 )++; /* counts for the nexte subframe */ + cntnzcr = -1; + } + + if ( *fptr5 < ( *fptr1 ) / 2 ) + { + *fptr5 = 2 * ( *fptr1 - *fptr5 ); + } + else + { + *fptr5 = *fptr1; + } + fptr1++; + fptr5++; + fptr6++; + } + + fptr2 = imdct_mem; + j = NUMSF; + *fptr1 = 100 + *fptr2 * *fptr2; + *sptr1 = 0; + fptr2++; + for ( i = 1; i < len3xLp20; i++ ) /* one future subframe but 140 samples (not 80) (enough with ALDO window) */ + { + *fptr1 += *fptr2 * *fptr2; + + if ( *fptr2 * *( fptr2 - 1 ) < 0 ) + { + ( *sptr1 )++; + } + + fptr2++; + } + + fptr2 = imdct_mem; + fptr3 = imdct_mem + 1; + fptr4 = imdct_mem + 2; + ftmp = (float) ( -0.25 * ( rec_sig[framelength - 1] + *fptr3 ) + 0.5 * *fptr2 ); + es_mdct_hb[NUMSF] = 100 + ftmp * ftmp; + + for ( j = 1; j < len3xLp20 - 1; j++ ) + { + ftmp = (float) ( -0.25 * ( *fptr2 + *fptr4 ) + 0.5 * *fptr3 ); + es_mdct_hb[NUMSF] += ftmp * ftmp; + fptr2++; + fptr3++; + fptr4++; + } + + ftmp = (float) ( -0.25 * ( *fptr2 ) + 0.5 * *fptr3 ); + es_mdct_hb[NUMSF] += ftmp * ftmp; + max_es_hb = es_mdct_hb[0]; /* for memorising the max energy */ + + max_es = es_mdct[0]; /* for memorising the max energy */ + maxind = 0; + for ( i = 1; i <= NUMSF; i++ ) + { + if ( es_mdct_hb[i] >= max_es_hb ) /* '=' to handle the first window*/ + { + max_es_hb = es_mdct_hb[i]; /* max energy low band, 8 present and 1 future subframes */ + } + + if ( es_mdct[i] >= max_es ) /* '=' to handle the first window*/ + { + max_es = es_mdct[i]; /* max energy low band, 8 present and 1 future subframes */ + maxind = i; + } + } + + cnt2 = cnt5 = 0; + if ( *prevflag != 0 || max_es < subframelength * 10000 ) + { + maxind = 0; + } + + if ( max_es < 4 * *mean_prev ) + { + maxind = 0; + } + *prevflag = 0; + + for ( i = 0; i < maxind; i++ ) /* only subbands before max energy subband are handled */ + { + g = 1; /* default gain */ + min_g[i] = 1; + min_g_hb[i] = 1; + if ( ( es_mdct_half[i] > 100 * ( *mean_prev_nc + 500000 ) ) || /* less then 20% energy in 3/4 of the subframe -> starting onset in the last quarter */ + ( ( es_mdct_half[i] > 10 * ( *mean_prev_nc + 500000 ) ) && + ( ( zcr[i] < limzcr ) || ( es_mdct_quart[i] < es_mdct[i] / 6 ) ) ) ) /* already an offset, plosif, do not touch */ + { + maxind = i; /* no preecho reduction after the first subframe with gain 1 */ + *prevflag = 1; + for ( j = i - 1; j >= 0; j-- ) + { + if ( es_mdct[j] > es_mdct[i] / 2 ) + { + maxind = j; + } + } + } + else + { + if ( es_mdct[i] < max_es / 16 ) + { + g = lim16; + cnt5++; + + if ( es_mdct[i] < max_es / 32 ) + { + g = lim32; + cnt2++; + } + + min_g[i] = (float) sqrt( (double) ( *mean_prev / es_mdct[i] ) ); /*limitation of attenuation gain */ + min_g_hb[i] = (float) sqrt( (double) ( *mean_prev_hb / es_mdct_hb[i] ) ); /*limitation of attenuation gain */ + if ( ( zcr[i] < limzcr / 2 ) || ( maxnzcr[i] > limmaxnzcr ) ) + { + if ( min_g[i] < 1 ) /* *mean_prev < es_mdct[i]) */ + { + *mean_prev = es_mdct[i]; + } + min_g[i] = 1; /* not noise-like, do not touch the amplitude, but may do in HB*/ + } + + if ( min_g[i] > 1 ) /* in fix point will be min_g = min(min_g, 1), weight 1 */ + { + min_g[i] = (float) 1; + } + + if ( min_g_hb[i] > 1 ) /* in fix point will be min_g = min(min_g, 1), weight 1 */ + { + min_g_hb[i] = (float) 1; + } + } + else + { + if ( i > 0 && maxind < NUMSF ) + { + *prevflag = 1; + } + maxind = i; /* no preecho reduction after the first subframe with gain 1*/ + } + } + gt[i] = g; + gt_hb[i] = g; + } + + for ( i = maxind; i <= NUMSF; i++ ) /* also for the first memory subframe */ + { + gt[i] = 1; + min_g[i] = 1; + gt_hb[i] = 1; + min_g_hb[i] = 1; + } + + ind2 = 0; + for ( i = 0; i < NUMSF; i++ ) + { + if ( gt[i] < 1 ) /*gt not yet limited by min_g*/ + { + ind2 = i + 1; /* first subframe with gain = 1 after last gain < 1 --> frame with the attack*/ + } + } + + if ( ( wmold > 0.5 ) && ( ( cnt2 + cnt5 ) < 2 ) ) /* mini either 1 cnt2 (and so also cnt5) or 2 cnt5 */ + { + /* maxind = 0; false alarm, no echo reduction */ + ind2 = 0; + } + + fptr3 = gt; + fptr4 = gt_hb; + fptr5 = min_g; + fptr6 = min_g_hb; + + for ( i = 0; i < ind2; i++ ) /* only subbands before max energy subband are handled*/ + { + if ( *fptr3 < *fptr5 ) /* in fix point will be g = max(g, min_g), weight 1 */ + { + *fptr3 = *fptr5; + } + + if ( *fptr4 < *fptr6 ) /* in fix point will be g = max(g, min_g), weight 1 */ + { + *fptr4 = *fptr6; + } + + fptr1 = preechogain + i * subframelength + smooth_len; + fptr2 = preechogain_hb + i * subframelength; + for ( j = 0; j < subframelength; j++ ) + { + *fptr1 = *fptr3; + *fptr2 = *fptr4; + fptr1++; + fptr2++; + } + + fptr3++; + fptr4++; + fptr5++; + fptr6++; + } + + max_plus_es_mdct = 0; + adv = smooth_len; /* samples needed to have near 1 gain after smoothing at the beggining of the attack subframe*/ + advmem = adv; + + if ( ind2 > 0 || wmold < 1 || *wmold_hb < 1 ) + { + ptr = imdct_mem; + pluslim = num_subsubframes; /* if ind2 == NUMSF */ + + if ( ind2 < NUMSF ) + { + ptr = rec_sig + subframelength * ind2; + pluslim = ( NUMSF - ind2 ) * num_subsubframes; + } + + maxcrit = *mean_prev_nc; + if ( ind2 == 0 ) + { + sum_plus_es = *mean_prev_nc; /* 8 times mean sususb enenrgy (=maxcrit)*/ + pluslim = num_subsubframes; + oldgain = wmold; + oldgain_hb = *wmold_hb; + } + else /* ind2 > 0*/ + { + sum_plus_es = es_mdct[ind2 - 1]; /* 8 times mean sususb enenrgy (=maxcrit)*/ + oldgain = gt[ind2 - 1]; + oldgain_hb = gt_hb[ind2 - 1]; + maxcrit = es_mdct[ind2 - 1] * gt[ind2 - 1] * gt[ind2 - 1]; /* /1 (iso /8) : 8 times of the pevious subframe mean*/ + + if ( ( max_es / 80 > maxcrit ) && ( zcr[ind2] > limzcr ) ) + { + maxcrit = max_es / 80; /* still 10 times smaller then mean max_es*/ + } + } + + for ( j = 0; j < pluslim; j++ ) /* 8 sub-subframes */ + { + plus_es_mdct[j] = 100; + for ( i = 0; i < subsubframelength; i++ ) + { + + ftmp = *ptr * *ptr; + plus_es_mdct[j] += ftmp; + if ( plus_es_mdct[j] > max_plus_es_mdct ) + { + max_plus_es_mdct = plus_es_mdct[j]; + } + ptr++; + } + + sum_plus_es += 4 * plus_es_mdct[j]; + mean_plus_es[j + 1] = sum_plus_es / ( j + 2 ); /* 4/j could be tabulated in fixed point */ + if ( mean_plus_es[j + 1] < maxcrit ) + { + mean_plus_es[j + 1] = maxcrit; + } + } + mean_plus_es[0] = plus_es_mdct[0]; + if ( mean_plus_es[0] < maxcrit ) + { + mean_plus_es[0] = maxcrit; + } + mean_plus_es[pluslim] = -1; + + j = 0; + while ( ( plus_es_mdct[j] < mean_plus_es[j] ) && ( plus_es_mdct[j] < max_plus_es_mdct / 8 ) ) + { + j++; + } + + adv -= j * subsubframelength; + + if ( ind2 < NUMSF ) /* onset not in future frame */ + { + fptr1 = preechogain + ind2 * subframelength + smooth_len; + fptr2 = preechogain_hb + ind2 * subframelength; + + for ( i = 0; i < j * subsubframelength; i++ ) + { + *fptr1 = oldgain; /*keep the gain of the previous subframe*/ + *fptr2 = oldgain_hb; /*keep the gain of the previous subframe*/ + fptr1++; + fptr2++; + } + } + } + + if ( ind2 > 0 ) + { + /* check increasing energy of preecho by regression last 3 subframes (if possible) */ + ind3 = ind2 + ( j >> log2_num_subsubframes ); /* return (with rounding) to subframe basis */ + if ( ind3 > 1 ) + { + /* case of 3 points is simply */ + eshbmean2 = es_mdct_hb[ind3 - 1] + es_mdct_hb[ind3 - 2]; + sxyhb2 = ( es_mdct_hb[ind3 - 1] - es_mdct_hb[ind3 - 2] ); /* / eshbmean2 * 2; 04042013: division not needed, only sign of sxyhb2 is used*/ + + if ( ind3 > 2 ) + { + eshbmean3 = ( eshbmean2 + es_mdct_hb[ind3 - 3] ) / 3; + sxylb3 = ( es_mdct[ind3 - 1] - es_mdct[ind3 - 3] ); /* /eslbmean3 / 2; /2 for 3 points regression calc; 04042013: division not needed, only sign of sxylb3 is used*/ + sxyhb3 = ( es_mdct_hb[ind3 - 1] - es_mdct_hb[ind3 - 3] ) / eshbmean3 / 2; + if ( ( sxyhb3 < 0.2f ) || ( sxylb3 < 0 ) ) + { + ind2 = 0; + adv = advmem; + } + } + else + { + if ( sxyhb2 < 0.0f ) + { + ind2 = 0; + adv = advmem; /* 04042013: small bug corection*/ + } + } + + eshbmean3 = ( eshbmean2 + es_mdct_hb[ind3] ) / 3; /*verif toward future subsubframe*/ + sxyhb3 = ( es_mdct_hb[ind3] - es_mdct_hb[ind3 - 2] ) / eshbmean3 / 2; + if ( sxyhb3 < 0.2f ) + { + ind2 = 0; + adv = advmem; + } + } + } + + stind = ind2 * subframelength - adv; + stind_hb = stind + advmem; + if ( stind < 0 ) + { + stind = 0; + } + + if ( stind_hb < 0 ) + { + stind_hb = 0; + } + + fptr1 = preechogain + stind + smooth_len; + fptr2 = preechogain_hb + stind_hb; + + for ( i = stind + smooth_len; i < framelength; i++ ) /* rest of the gains, without 4 (PREECHO_SMOOTH_LEN) 1 for fadeout */ + { + *( fptr1++ ) = 1; + } + + for ( i = stind_hb; i < framelength; i++ ) /* rest of the gains*/ + { + *( fptr2++ ) = 1; + } + + for ( i = 0; i < smooth_len; i++ ) + { + preechogain[i] = *smoothmem; + } + + fattnext = 1; + if ( stind > framelength ) + { + fattnext = gt[ind2 - 1]; + } + + for ( i = 0; i < smooth_len; i++ ) + { + preechogain[framelength + i] = fattnext; + } + + fptr1 = preechogain; + for ( i = 0; i < framelength; i++ ) + { + fptr2 = fptr1; + for ( j = 1; j <= smooth_len; j++ ) + { + *fptr1 += *( ++fptr2 ); + } + + *fptr1 *= (float) invsmoothlenp1; + fptr1++; + } + + *smoothmem = fattnext; + *wmold_hb = preechogain_hb[framelength - 1]; + + /* apply gain */ + fptr1 = preechogain; + fptr2 = preechogain_hb; + fptr3 = rec_sig; + fptr4 = rec_sig_lb; + fptr5 = rec_sig_hb; + + for ( i = 0; i < framelength; i++ ) + { + *fptr3 = *fptr4 * *fptr1 + *fptr5 * *fptr2; + fptr1++; + fptr2++; + fptr3++; + fptr4++; + fptr5++; + } + + *mean_prev_nc = es_mdct[0]; /* compute mean not corrected by the actual gains*/ + + for ( i = 1; i < NUMSF; i++ ) /* all present subbands */ + { + if ( i == NUMSF / 2 ) + { + savehalfe = *mean_prev_nc; + } + *mean_prev_nc += es_mdct[i]; + } + + if ( savehalfe < *mean_prev_nc / 2 ) + { + *mean_prev_nc = 2 * ( *mean_prev_nc - savehalfe ); + } + *mean_prev_nc = *mean_prev_nc * INV_NUMSF; /* >> LOG2_NUMSF in fixpoint */ + + for ( i = 0; i < ind2; i++ ) /* only subbands before max energy subband are handled*/ + { + es_mdct[i] = es_mdct[i] * gt[i] * gt[i]; + es_mdct_hb[i] = es_mdct_hb[i] * gt_hb[i] * gt_hb[i]; + } + + *mean_prev = es_mdct[0]; /* compute mean used in next frame to limit gain*/ + *mean_prev_hb = es_mdct_hb[0]; /* compute mean used in next frame to limit gain*/ + + for ( i = 1; i < NUMSF; i++ ) /* all present subbands */ + { + if ( i == NUMSF / 2 ) + { + savehalfe = *mean_prev; + savehalfe_hb = *mean_prev_hb; + } + + *mean_prev += es_mdct[i]; + *mean_prev_hb += es_mdct_hb[i]; + } + + if ( savehalfe < *mean_prev / 2 ) + { + *mean_prev = 2 * ( *mean_prev - savehalfe ); + } + + if ( savehalfe_hb < *mean_prev_hb / 2 ) + { + *mean_prev_hb = 2 * ( *mean_prev_hb - savehalfe_hb ); + } + + *mean_prev = *mean_prev * INV_NUMSF; /* >> LOG2_NUMSF in fixpoint */ + *mean_prev_hb = *mean_prev_hb * INV_NUMSF; /* >> LOG2_NUMSF in fixpoint */ + last2 = ( es_mdct[NUMSF - 1] + es_mdct[NUMSF - 2] ) / 2; + last2_hb = ( es_mdct_hb[NUMSF - 1] + es_mdct_hb[NUMSF - 2] ) / 2; + + if ( last2 > *mean_prev ) + { + *mean_prev = last2; + } + + if ( last2_hb > *mean_prev_hb ) + { + *mean_prev_hb = last2_hb; + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * inverse_transform() + * + * Inverse transform from the DCT domain to time domain + *--------------------------------------------------------------------------*/ + +void inverse_transform( + const float *in_mdct, /* i : input MDCT vector */ + float *out, /* o : output vector */ + const int16_t is_transient, /* i : transient flag */ + const int16_t L, /* i : output frame length */ + const int16_t L_inner, /* i : length of the transform */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + float out_alias[L_FRAME48k]; + float alias[MAX_SEGMENT_LENGTH]; + const float *in_segment; + float *out_segment; + float tmp; + int16_t ta, seg; + int16_t segment_length; + float in_mdct_modif[L_FRAME48k]; + float *in_segment_modif; + const float *win; + + segment_length = L / 2; + + if ( is_transient ) + { + if ( L == L_FRAME48k ) + { + win = short_window_48kHz; + } + else if ( L == L_FRAME32k ) + { + win = short_window_32kHz; + } + else if ( L == L_FRAME16k ) + { + win = short_window_16kHz; + } + else /* L == L_FRAME8k */ + { + win = short_window_8kHz; + } + + set_f( out_alias, 0.0f, L ); + + in_segment = in_mdct; + in_segment_modif = in_mdct_modif; + + if ( L == L_inner ) + { + mvr2r( in_mdct, in_mdct_modif, L ); + } + else if ( L > L_inner ) + { + for ( seg = 0; seg < NUM_TIME_SWITCHING_BLOCKS; seg++ ) + { + for ( ta = 0; ta < L_inner / NUM_TIME_SWITCHING_BLOCKS; ta++ ) + { + *in_segment_modif++ = *in_segment++; + } + + for ( ta = 0; ta < ( L - L_inner ) / NUM_TIME_SWITCHING_BLOCKS; ta++ ) + { + *in_segment_modif++ = 0; + } + } + } + else /* L < L_inner */ + { + for ( seg = 0; seg < NUM_TIME_SWITCHING_BLOCKS; seg++ ) + { + for ( ta = 0; ta < segment_length / 2; ta++ ) + { + *in_segment_modif++ = *in_segment++; + } + in_segment += ( L_inner - L ) / NUM_TIME_SWITCHING_BLOCKS; + } + } + + out_segment = out_alias - segment_length / 4; + in_segment = in_mdct_modif; + + iedct_short( in_segment, alias, segment_length, element_mode ); + + for ( ta = segment_length / 4; ta < segment_length / 2; ta++ ) + { + out_segment[ta] = alias[ta]; + } + + for ( ta = segment_length / 2; ta < segment_length; ta++ ) + { + out_segment[ta] = alias[ta] * win[ta]; + } + + out_segment = out_segment + segment_length / 2; + in_segment = in_segment + segment_length / 2; + + for ( seg = 1; seg < NUM_TIME_SWITCHING_BLOCKS - 1; seg++ ) + { + iedct_short( in_segment, alias, segment_length, element_mode ); + + for ( ta = 0; ta < segment_length; ta++ ) + { + out_segment[ta] = out_segment[ta] + alias[ta] * win[ta]; + } + + in_segment = in_segment + segment_length / 2; + out_segment = out_segment + segment_length / 2; + } + + iedct_short( in_segment, alias, segment_length, element_mode ); + + for ( ta = 0; ta < segment_length / 2; ta++ ) + { + out_segment[ta] = out_segment[ta] + alias[ta] * win[ta]; + } + + for ( ta = segment_length / 2; ta < 3 * segment_length / 4; ta++ ) + { + out_segment[ta] = alias[ta]; + } + + for ( ta = 0; ta < L / 2; ta++ ) + { + tmp = out_alias[ta]; + out[ta] = out_alias[L - 1 - ta]; + out[L - 1 - ta] = tmp; + } + } + else + { + edct( in_mdct, out, L, element_mode ); + } + + return; +} diff --git a/lib_com/typedef.h b/lib_com/typedef.h new file mode 100644 index 0000000000..ec617a5857 --- /dev/null +++ b/lib_com/typedef.h @@ -0,0 +1,129 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/* + =========================================================================== + File: TYPEDEF.H v.2.3 - 30.Nov.2009 + =========================================================================== + + ITU-T STL BASIC OPERATORS + + TYPE DEFINITION PROTOTYPES + + History: + 26.Jan.00 v1.0 Incorporated to the STL from updated G.723.1/G.729 + basic operator library (based on basic_op.h) + + 03 Nov 04 v2.0 Incorporation of new 32-bit / 40-bit / control + operators for the ITU-T Standard Tool Library as + described in Geneva, 20-30 January 2004 WP 3/16 Q10/16 + TD 11 document and subsequent discussions on the + wp3audio@yahoogroups.com email reflector. + March 06 v2.1 Changed to improve portability. + + ============================================================================ +*/ + +/*_____________________ + | | + | Basic types. | + |_____________________| +*/ + +#ifndef TYPEDEF_H +#define TYPEDEF_H + +#include +#include + +#if __STDC_VERSION__ >= 199901L +typedef int8_t Word8; +typedef uint8_t UWord8; +typedef int16_t Word16; +typedef int32_t Word32; +typedef uint16_t UWord16; +typedef uint32_t UWord32; +typedef int64_t Word40; +typedef bool Flag; +#define TYPEDEF_INITIALIZED +#else +/* + * This is the original code from the file typedef.h + */ +#if defined( __BORLANDC__ ) || defined( __WATCOMC__ ) || defined( _MSC_VER ) || defined( __ZTC__ ) +typedef signed char Word8; +typedef unsigned char UWord8; +typedef short Word16; +typedef int Word32; +typedef unsigned short UWord16; +typedef unsigned int UWord32; +typedef __int64 Word40; +typedef int Flag; +#define TYPEDEF_INITIALIZED +#elif defined( __sun ) +typedef signed char Word8; +typedef unsigned char UWord8; +typedef short Word16; +typedef long Word32; +/*#error "The 40-bit operations have not been tested on __sun : need to define Word40"*/ +typedef unsigned short UWord16; +typedef unsigned long UWord32; +typedef long long Word40; +typedef int Flag; +#define TYPEDEF_INITIALIZED +#elif defined( __unix__ ) || defined( __unix ) || defined( __APPLE__ ) || defined( __CYGWIN__ ) || defined( __MINGW32__ ) +typedef signed char Word8; +typedef unsigned char UWord8; +typedef short Word16; +typedef int Word32; +typedef unsigned short UWord16; +typedef unsigned int UWord32; +/*#error "The 40-bit operations have not been tested on unix : need to define Word40"*/ +typedef long long Word40; +typedef int Flag; +#endif +#define TYPEDEF_INITIALIZED +#endif + +typedef float Float32; + +#ifndef TYPEDEF_INITIALIZED +#error types in typedef.h not initialized +#endif +#endif /* ifndef _TYPEDEF_H */ + + +/* end of file */ diff --git a/lib_com/vlpc_2st_com.c b/lib_com/vlpc_2st_com.c new file mode 100644 index 0000000000..86fdf68c5f --- /dev/null +++ b/lib_com/vlpc_2st_com.c @@ -0,0 +1,90 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * lsf_weight_2st() + * + * + *------------------------------------------------------------------*/ + +void lsf_weight_2st( + const float *lsfq, + float *w, + const int16_t mode, + const int32_t sr_core ) +{ + int16_t i; + float d[M + 1]; + float freq_max = sr_core / 2.f; + float freq_div = freq_max / (float) M; + + /* compute lsf distance */ + d[0] = lsfq[0]; + for ( i = 1; i < M; i++ ) + { + d[i] = lsfq[i] - lsfq[i - 1]; + } + d[M] = freq_max - lsfq[M - 1]; + + /* weighting function */ + for ( i = 0; i < M; i++ ) + { + assert( d[i] > 0 ); + + if ( mode == 0 ) + { + w[i] = (float) ( 60.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* abs */ + } + else if ( mode == 1 ) + { + w[i] = (float) ( 65.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* mid */ + } + else + { + w[i] = (float) ( 63.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ + } + } + + return; +} diff --git a/lib_com/weight.c b/lib_com/weight.c new file mode 100644 index 0000000000..e50707b688 --- /dev/null +++ b/lib_com/weight.c @@ -0,0 +1,370 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * sfm2mqb() + * + * Map sub-vectors to pbands + *--------------------------------------------------------------------------*/ + +static void sfm2mqb( + int16_t spe[], /* i : sub-vectors */ + int16_t spe2q[], /* o : pbands */ + const int16_t nb_sfm /* i : number of norms */ +) +{ + int16_t tmp, i; + + /* short groups */ + spe2q[0] = spe[0] + 3; + spe2q[1] = spe[1] + 3; + spe2q[2] = spe[2] + 3; + spe2q[3] = spe[3] + 3; + spe2q[4] = spe[4] + 3; + spe2q[5] = spe[5] + 3; + spe2q[6] = spe[6] + 3; + spe2q[7] = spe[7] + 3; + spe2q[8] = spe[8] + 3; + spe2q[9] = spe[9] + 3; + + spe2q[10] = ( ( spe[10] + spe[11] ) >> 1 ) + 4; + spe2q[11] = ( ( spe[12] + spe[13] ) >> 1 ) + 4; + spe2q[12] = ( ( spe[14] + spe[15] ) >> 1 ) + 4; + + spe2q[13] = ( ( spe[16] + spe[17] ) >> 1 ) + 5; + spe2q[14] = ( ( spe[18] + spe[19] ) >> 1 ) + 5; + + tmp = 0; + for ( i = 20; i < 24; i++ ) + { + tmp += spe[i]; + } + spe2q[15] = (int16_t) ( ( (int32_t) tmp * 8192L ) >> 15 ) + 6; + + tmp = 0; + for ( i = 24; i < 27; i++ ) + { + tmp += spe[i]; + } + spe2q[16] = (int16_t) ( ( (int32_t) tmp * 10923L ) >> 15 ) + 6; + + if ( nb_sfm > 27 ) + { + tmp = 0; + for ( i = 27; i < 30; i++ ) + { + tmp += spe[i]; + } + spe2q[17] = (int16_t) ( ( (int32_t) tmp * 10923L ) >> 15 ) + 6; + + if ( nb_sfm > 30 ) + { + tmp = 0; + for ( i = 30; i < 35; i++ ) + { + tmp += spe[i]; + } + spe2q[18] = (int16_t) ( ( (int32_t) tmp * 6553L ) >> 15 ) + 7; + + tmp = 0; + for ( i = 35; i < 44; i++ ) + { + tmp += spe[i]; + } + spe2q[19] = (int16_t) ( ( (int32_t) tmp * 3641L ) >> 15 ) + 8; + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * mqb2sfm() + * + * Map pbands to sub-vectors + *--------------------------------------------------------------------------*/ + +static void mqb2sfm( + int16_t spe2q[], /* i : pbands */ + int16_t spe[], /* o : sub-vectors */ + const int16_t lnb_sfm /* i : number of norms */ +) +{ + int16_t i; + + spe[0] = spe2q[0]; + spe[1] = spe2q[1]; + spe[2] = spe2q[2]; + spe[3] = spe2q[3]; + spe[4] = spe2q[4]; + spe[5] = spe2q[5]; + spe[6] = spe2q[6]; + spe[7] = spe2q[7]; + spe[8] = spe2q[8]; + spe[9] = spe2q[9]; + + spe[10] = spe2q[10]; + spe[11] = spe2q[10]; + + spe[12] = spe2q[11]; + spe[13] = spe2q[11]; + + spe[14] = spe2q[12]; + spe[15] = spe2q[12]; + + spe[16] = spe2q[13]; + spe[17] = spe2q[13]; + + spe[18] = spe2q[14]; + spe[19] = spe2q[14]; + for ( i = 20; i < 24; i++ ) + { + spe[i] = spe2q[15]; + } + + for ( i = 24; i < 27; i++ ) + { + spe[i] = spe2q[16]; + } + + if ( lnb_sfm > SFM_N_STA_8k ) + { + for ( i = 27; i < 30; i++ ) + { + spe[i] = spe2q[17]; + } + + if ( lnb_sfm > SFM_N_STA_10k ) + { + for ( i = 30; i < 35; i++ ) + { + spe[i] = spe2q[18]; + } + + for ( i = 35; i < 44; i++ ) + { + spe[i] = spe2q[19]; + } + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * map_quant_weight() + * + * Calculate the quantization weights + *--------------------------------------------------------------------------*/ + +void map_quant_weight( + const int16_t normqlg2[], /* i : quantized norms */ + int16_t wnorm[], /* o : weighted norm */ + const int16_t is_transient /* i : transient flag */ +) +{ + int16_t sfm; + int16_t tmp16; + int16_t spe2q[NUM_MAP_BANDS]; + int16_t spe[NB_SFM]; + + int16_t spe2q_max; + int16_t spe2q_min; + int16_t norm_max; + int16_t shift; + int16_t sum; + int16_t k; + int16_t lnb_sfm, num_map_bands; + + if ( is_transient ) + { + lnb_sfm = NB_SFM; + num_map_bands = NUM_MAP_BANDS; + + for ( sfm = 0; sfm < lnb_sfm; sfm += 4 ) + { + sum = 0; + for ( k = 0; k < 4; k++ ) + { + sum = sum + normqlg2[sfm + k]; + } + sum = sum >> 2; + for ( k = 0; k < 4; k++ ) + { + spe[sfm + k] = sum; + } + } + } + else + { + lnb_sfm = NB_SFM; + num_map_bands = NUM_MAP_BANDS; + + + for ( sfm = 0; sfm < lnb_sfm; sfm++ ) + { + spe[sfm] = normqlg2[sfm]; + } + } + + sfm2mqb( spe, spe2q, lnb_sfm ); + + for ( sfm = 0; sfm < num_map_bands; sfm++ ) + { + spe2q[sfm] = spe2q[sfm] - 10; + } + + /* spectral smoothing */ + for ( sfm = 1; sfm < num_map_bands; sfm++ ) + { + tmp16 = spe2q[sfm - 1] - 4; + if ( spe2q[sfm] < tmp16 ) + { + spe2q[sfm] = tmp16; + } + } + + for ( sfm = num_map_bands - 2; sfm >= 0; sfm-- ) + { + tmp16 = spe2q[sfm + 1] - 8; + if ( spe2q[sfm] < tmp16 ) + { + spe2q[sfm] = tmp16; + } + } + + for ( sfm = 0; sfm < num_map_bands; sfm++ ) + { + if ( spe2q[sfm] < a_map[sfm] ) + { + spe2q[sfm] = a_map[sfm]; + } + } + + /* Saturate by the Absolute Threshold of Hearing */ + spe2q_max = MIN16B; + spe2q_min = MAX16B; + + for ( sfm = 0; sfm < num_map_bands; sfm++ ) + { + spe2q[sfm] = sfm_width[sfm] - spe2q[sfm]; + + if ( spe2q_max < spe2q[sfm] ) + { + spe2q_max = spe2q[sfm]; + } + + if ( spe2q_min > spe2q[sfm] ) + { + spe2q_min = spe2q[sfm]; + } + } + + for ( sfm = 0; sfm < num_map_bands; sfm++ ) + { + spe2q[sfm] = spe2q[sfm] - spe2q_min; + } + + spe2q_max = spe2q_max - spe2q_min; + + if ( spe2q_max == 0 ) + { + norm_max = 0; + } + else + { + if ( spe2q_max < 0 ) + { + spe2q_max = ~spe2q_max; + } + for ( norm_max = 0; spe2q_max < 0x4000; norm_max++ ) + { + spe2q_max <<= 1; + } + } + + shift = norm_max - 13; + for ( sfm = 0; sfm < num_map_bands; sfm++ ) + { + if ( shift < 0 ) + { + spe2q[sfm] = spe2q[sfm] >> ( -shift ); + } + else + { + spe2q[sfm] = spe2q[sfm] << shift; + } + } + + mqb2sfm( spe2q, spe, lnb_sfm ); + + if ( is_transient ) + { + for ( sfm = 0; sfm < lnb_sfm; sfm += 4 ) + { + sum = 0; + for ( k = 0; k < 4; k++ ) + { + sum = sum + spe[sfm + k]; + } + + sum = sum >> 2; + + for ( k = 0; k < 4; k++ ) + { + spe[sfm + k] = sum; + } + } + } + + /* modify the norms for bit-allocation */ + for ( sfm = 0; sfm < lnb_sfm; sfm++ ) + { + wnorm[sfm] = spe[sfm] + normqlg2[sfm]; + } + + return; +} diff --git a/lib_com/weight_a.c b/lib_com/weight_a.c new file mode 100644 index 0000000000..0eda2133ce --- /dev/null +++ b/lib_com/weight_a.c @@ -0,0 +1,109 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------ + * weight_a() + * + * Weighting of LP filter coefficients, ap[i] = a[i] * (gamma^i) + *------------------------------------------------------------------*/ + +void weight_a( + const float *a, /* i : LP filter coefficients */ + float *ap, /* o : weighted LP filter coefficients */ + const float gamma, /* i : weighting factor */ + const int16_t m /* i : order of LP filter */ +) +{ + float f; + int16_t i; + + ap[0] = a[0]; + f = gamma; + + for ( i = 1; i <= m; i++ ) + { + ap[i] = f * a[i]; + f *= gamma; + } + + return; +} + + +/*------------------------------------------------------------------ + * weight_a_subfr() + * + * Weighting of LP filter coefficients for multiple subframes, + * ap[i] = a[i] * (gamma^i) + *------------------------------------------------------------------*/ + +void weight_a_subfr( + const int16_t nb_subfr, /* i : number of subframes */ + const float *A, /* i : LP filter coefficients */ + float *Aw, /* o : weighted LP filter coefficients */ + const float gamma, /* i : weighting factor */ + const int16_t m /* i : order of LP filter */ +) +{ + int16_t i, j; + float tmp; + + for ( j = 0; j < nb_subfr; j++ ) + { + Aw[j * ( m + 1 )] = A[j * ( m + 1 )]; + } + + /* Smoothing aka spreading aka masking envelope generation */ + tmp = gamma; + for ( i = 1; i < m + 1; i++ ) + { + for ( j = 0; j < nb_subfr; j++ ) + { + Aw[i + j * ( m + 1 )] = A[i + j * ( m + 1 )] * tmp; + } + tmp *= gamma; + } + + return; +} diff --git a/lib_com/wi.c b/lib_com/wi.c new file mode 100644 index 0000000000..6cf3c1d2b1 --- /dev/null +++ b/lib_com/wi.c @@ -0,0 +1,1704 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define WARP_OS_RATE 8 +#define LL 256 +#define LL_OS ( WARP_OS_RATE * LL ) +#define OSLENGTH 12 +#define WI_THRESHLD 0.8 +#define WI_SAMPLE_THLD 20 +#define ERB_CBSIZE1 64 +#define ERB_CBSIZE2 64 + +#define _POLY1( x, c ) ( ( c )[0] * ( x ) + ( c )[1] ) +#define _POLY2( x, c ) ( _POLY1( ( x ), ( c ) ) * ( x ) + ( c )[2] ) +#define _POLY3( x, c ) ( _POLY2( ( x ), ( c ) ) * ( x ) + ( c )[3] ) + + +/*-------------------------------------------------------------------* + * DTFS_new() + * + * DTFS structure initialization. + *-------------------------------------------------------------------*/ + +/*! r: DTFS structure */ +ivas_error DTFS_new( + DTFS_STRUCTURE **dtfs_out ) +{ + int16_t i; + DTFS_STRUCTURE *dtfs = NULL; + + dtfs = (DTFS_STRUCTURE *) count_malloc( sizeof( DTFS_STRUCTURE ) ); + + if ( dtfs == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTFS (SC-VBR) structure\n" ) ); + } + + dtfs->lag = 0; + dtfs->nH = 0; + dtfs->nH_4kHz = 0; + dtfs->upper_cut_off_freq_of_interest = 3300.0; + dtfs->upper_cut_off_freq = 4000.0; + + for ( i = 0; i < MAXLAG_WI; i++ ) + { + dtfs->a[i] = dtfs->b[i] = 0.0; + } + + dtfs->sampling_rate = -1; + + *dtfs_out = dtfs; + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * DTFS_copy() + * + * Copy from one DTFS STRUCTURE to another. + *-------------------------------------------------------------------*/ + +void DTFS_copy( + DTFS_STRUCTURE *Xout, /* o : DTFS structure */ + DTFS_STRUCTURE Xinp /* i : DTFS structure */ +) +{ + int16_t k; + for ( k = 0; k < MAXLAG_WI; k++ ) + { + Xout->a[k] = Xinp.a[k]; + } + for ( k = 0; k < MAXLAG_WI; k++ ) + { + Xout->b[k] = Xinp.b[k]; + } + Xout->lag = Xinp.lag; + Xout->nH = Xinp.nH; + Xout->nH_4kHz = Xinp.nH_4kHz; + Xout->upper_cut_off_freq_of_interest = Xinp.upper_cut_off_freq_of_interest; + Xout->upper_cut_off_freq = Xinp.upper_cut_off_freq; + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_sub() + * + * Difference of A and B coefficients in cartesian domain. + * Equivalent to time domain subtraction. + *-------------------------------------------------------------------*/ + +void DTFS_sub( + DTFS_STRUCTURE *tmp, /* o : output DFTS */ + DTFS_STRUCTURE X1, /* i : DTFS input 1 */ + DTFS_STRUCTURE X2 /* i : DTFS input 2 */ +) +{ + int16_t i; + for ( i = 0; i <= X1.lag / 2; i++ ) + { + tmp->a[i] = X1.a[i]; + tmp->b[i] = X1.b[i]; + } + for ( i = 0; i <= X2.lag / 2; i++ ) + { + tmp->a[i] -= X2.a[i]; + tmp->b[i] -= X2.b[i]; + } + tmp->lag = max( X1.lag, X2.lag ); + tmp->nH = max( X1.nH, X2.nH ); + tmp->nH_4kHz = max( X1.nH_4kHz, X2.nH_4kHz ); + tmp->upper_cut_off_freq_of_interest = X1.upper_cut_off_freq_of_interest; + tmp->upper_cut_off_freq = X1.upper_cut_off_freq; + + return; +} + +/*-------------------------------------------------------------------* + * DTFS_fast_fs_inv() + * + * DTFS inverse. + *-------------------------------------------------------------------*/ + +static void DTFS_fast_fs_inv( + DTFS_STRUCTURE *X1_DTFS, /* i : DTFS */ + float *out, /* o : time domain output */ + int16_t N /* i : number of output samples */ +) +{ + uint16_t i, M_2 = (uint16_t) min( X1_DTFS->lag >> 1, X1_DTFS->nH ), N_2 = (uint16_t) N >> 1; + float dbuf[256 + 1]; /* N can't be > 256 */ + + if ( N < X1_DTFS->lag ) + { + N = X1_DTFS->lag; + } + + /* Populate the dbuf array */ + dbuf[1] = X1_DTFS->a[0]; + dbuf[2] = 0.0; + for ( i = 1; i < M_2; i++ ) + { + dbuf[2 * i + 1] = X1_DTFS->a[i] * N_2; + dbuf[2 * i + 2] = X1_DTFS->b[i] * N_2; + } + + if ( N_2 != M_2 ) + { + dbuf[2 * i + 1] = X1_DTFS->a[i] * N_2; + dbuf[2 * i + 2] = X1_DTFS->b[i] * N_2; + i++; + } + + /* Zero-padding in the frequency domain */ + for ( ; i < N_2; i++ ) + { + dbuf[2 * i + 1] = dbuf[2 * i + 2] = 0.0; + } + + realft( dbuf, N_2, -1 ); + + for ( i = 1; i <= N; i++ ) + { + out[i - 1] = dbuf[i] / N_2; + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_alignment_weight() + * + * Estimate the shift to find the best match between the reference + * DTFS and the test DTFS. + *-------------------------------------------------------------------*/ + +/*! r: shift value to shift X2_DTFS by */ +static float DTFS_alignment_weight( + DTFS_STRUCTURE refX1_DTFS, /* i : X1 the reference DTFS to keep fixed */ + DTFS_STRUCTURE X2_DTFS, /* i : X2 the test DTFS to shift to find best match */ + float Eshift, /* i : Expected shift - coarse value */ + const float *LPC1, /* i : LPC to filter to find correlation in spch */ + const float *LPC2 /* i : LPC to filter to find correlation in spch */ +) +{ + /* Eshift is w.r.t X2 */ + int16_t k; + float maxcorr, corr, Adiff, diff, tmp, tmp1, fshift, n, wcorr; + float pwf = 0.7f, tmplpc[M + 1]; + DTFS_STRUCTURE X1_DTFS; + + DTFS_copy( &X1_DTFS, refX1_DTFS ); + DTFS_adjustLag( &X1_DTFS, X2_DTFS.lag ); + DTFS_poleFilter( &X1_DTFS, LPC1, M + 1 ); + tmp = 1.0; + for ( k = 0, tmp = 1.0; k < M + 1; k++ ) + { + tmplpc[k] = LPC1[k] * ( tmp *= pwf ); + } + + + DTFS_zeroFilter( &X1_DTFS, tmplpc, M + 1 ); + DTFS_poleFilter( &X2_DTFS, LPC2, M + 1 ); + for ( k = 0, tmp = 1.0; k < M + 1; k++ ) + { + /* can be stored as a table */ + tmplpc[k] = LPC2[k] * ( tmp *= pwf ); + } + DTFS_zeroFilter( &X2_DTFS, tmplpc, M + 1 ); + maxcorr = (float) -HUGE_VAL; + fshift = Eshift; + Adiff = max( 6, 0.15f * X2_DTFS.lag ); + if ( X2_DTFS.lag < 60 ) + { + diff = 0.25; + } + else + { + diff = 0.5; + } + for ( n = Eshift - Adiff; n <= Eshift + Adiff; n += diff ) + { + corr = tmp = 0.0f; + /* bit-exact optimization - PI2/X2_DTFS.lag should be counted as a single divide */ + tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); + for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, tmp += tmp1 ) + { + /* Not counting math function cos and sin since they will be implemented as look-up tables */ + corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); + corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); + } + wcorr = (float) ( corr * ( 1.0f - 0.01f * fabs( n - Eshift ) ) ); + if ( wcorr > maxcorr ) + { + fshift = n; + maxcorr = wcorr; + } + } + + return fshift; +} + + +/*-------------------------------------------------------------------* + * DTFS_alignment_full() + * + * Shift value for DTFS full alignment. + *-------------------------------------------------------------------*/ + +float DTFS_alignment_full( + DTFS_STRUCTURE X1_DTFS, /* i : reference DTFS */ + DTFS_STRUCTURE X2_DTFS, /* i : DTFS to shift */ + const int16_t num_steps /* i : resolution */ +) +{ + int16_t k; + float maxcorr, corr, tmp, tmp1, fshift, n, diff; + + if ( X1_DTFS.lag < X2_DTFS.lag ) + { + DTFS_zeroPadd( X2_DTFS.lag, &X1_DTFS ); + } + + maxcorr = (float) -HUGE_VAL; + /* bit-exact optimization - 1/num_steps can be constant => should be counted as a multiply */ + diff = (float) X2_DTFS.lag / num_steps; + + for ( fshift = n = 0.0; n < (float) X2_DTFS.lag; n += diff ) + { + corr = tmp = 0.0f; + tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); + + for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, tmp += tmp1 ) + + { + corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); + corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); + } + if ( corr > maxcorr ) + { + fshift = n; + maxcorr = corr; + } + } + + return fshift; +} + + +/*-------------------------------------------------------------------* + * DTFS_phaseShift() + * + * Phase shift the DTFS coefficients. + * ph is the amount of phase shift (between 0 and 2pi), where positive + * value indicates a shift to right, and a negative ph value indicates a + * left shift. + *-------------------------------------------------------------------*/ + +void DTFS_phaseShift( + DTFS_STRUCTURE *X, /* i/o: DTFS to shift */ + float ph /* i : phase to shift */ +) +{ + int16_t k; + float tmp, tmp2 = 0.0f; + for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++, tmp2 += ph ) + { + tmp = X->a[k]; + X->a[k] = (float) ( tmp * cos( tmp2 ) - X->b[k] * sin( tmp2 ) ); + X->b[k] = (float) ( tmp * sin( tmp2 ) + X->b[k] * cos( tmp2 ) ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_zeroPadd() + * + * Zero-pad the DTFS coefficients. + *-------------------------------------------------------------------*/ + +void DTFS_zeroPadd( + const int16_t N, /* i : Target lag */ + DTFS_STRUCTURE *X /* i/o: DTFS */ +) +{ + int16_t i; + float diff; + + if ( N == X->lag ) + { + return; + } + for ( i = ( X->lag >> 1 ) + 1; i <= N >> 1; i++ ) + { + X->a[i] = X->b[i] = 0.0; + } + X->lag = N; + /* recompute nH for new lag */ + X->nH = (int16_t) floor( X->upper_cut_off_freq / ( 12800.0 / X->lag ) ); + diff = 12800.0f / X->lag; + if ( X->upper_cut_off_freq - ( diff * X->nH ) >= diff ) + { + X->nH++; + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_to_fs() + * + * DTFS to fs conversion. + *-------------------------------------------------------------------*/ + +void DTFS_to_fs( + const float *x, /* i : time domain signal */ + const int16_t N, /* i : Length of input vector */ + DTFS_STRUCTURE *X, /* o : DTFS structure with a, b, lag */ + const int32_t sampling_rate, /* i : sampling rate */ + const int16_t FR_flag /* i : FR flag */ +) +{ + int16_t n; + int16_t nH, k, nH_band, nH_4kHz; + float sum, tmp, diff; + + if ( !FR_flag ) + { + if ( sampling_rate == 16000 ) + { + X->upper_cut_off_freq_of_interest = 4000.0; + X->upper_cut_off_freq = 6400.0; + X->sampling_rate = INT_FS_12k8; + } + else if ( sampling_rate == 8000 ) + { + X->upper_cut_off_freq_of_interest = 3300.0; + X->upper_cut_off_freq = 4000.0; + X->sampling_rate = INT_FS_12k8; + } + } + else + { + X->upper_cut_off_freq_of_interest = 8000.0; + X->upper_cut_off_freq = 8000.0; + X->sampling_rate = INT_FS_16k; + } + + X->lag = N; + nH_band = (int16_t) floor( X->upper_cut_off_freq / ( 12800.0 / X->lag ) ); + + nH_4kHz = (int16_t) floor( 4000 / ( 12800.0 / X->lag ) ); + diff = 12800.0f / X->lag; + if ( X->upper_cut_off_freq - ( diff * nH_band ) >= diff ) + { + nH_band++; + } + if ( 4000 - ( diff * nH_4kHz ) >= diff ) + { + nH_4kHz++; + } + /* Number of harmonics excluding the ones at 0 and at pi */ + nH = ( N - 1 ) >> 1; + /* The DC component */ + X->a[0] = 0.0; + X->b[0] = 0.0; + for ( n = 0; n < N; n++ ) + { + X->a[0] += x[n]; + } + X->a[0] /= N; + + /* Strictly set the DC componet to zero */ + X->a[0] = 0.0; + + /* The harmonics excluding the one at pi */ + for ( k = 1; k <= nH; k++ ) + { + X->a[k] = x[0]; + X->b[k] = 0.0; + sum = tmp = (float) ( PI2 * k / N ); + for ( n = 1; n < N; n++, sum += tmp ) + { + X->a[k] += (float) ( x[n] * cos( sum ) ); + X->b[k] += (float) ( x[n] * sin( sum ) ); + } + X->a[k] *= ( 2.0f / N ); + X->b[k] *= ( 2.0f / N ); + } + + /* The harmonic at 'pi' */ + if ( N % 2 == 0 ) + { + X->a[k] = 0.0; + tmp = 1.0; + for ( n = 0; n < N; n++, tmp *= -1.0 ) + { + X->a[k] += x[n] * tmp; + } + X->a[k] /= N; + X->b[k] = 0.0; + } + for ( k = nH_band + 1; k <= min( ( X->lag >> 1 ), ( MAXLAG_WI - 1 ) ); k++ ) + { + X->a[k] = 0.0; + X->b[k] = 0.0; + } + X->nH = nH_band; + X->nH_4kHz = nH_4kHz; + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_fs_inv() + * + * DTFS Inverse + *-------------------------------------------------------------------*/ + +void DTFS_fs_inv( + DTFS_STRUCTURE *X, /* i : DTFS input */ + float *x, /* o : time domain sig */ + const int16_t N, /* i : Output length */ + float ph0 /* i : phase shift applied to the output */ +) +{ + float phase, tmp; + int16_t k, n; + + for ( n = 0; n < N; n++ ) + { + x[n] = X->a[0]; + tmp = phase = (float) ( PI2 * n / X->lag + ph0 ); + for ( k = 1; k <= min( X->lag >> 1, X->nH ); k++, tmp += phase ) + { + x[n] += (float) ( X->a[k] * cos( tmp ) + X->b[k] * sin( tmp ) ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_transform() + * + * DTFS transform. + *-------------------------------------------------------------------*/ + +static void DTFS_transform( + DTFS_STRUCTURE X, /* i : Starting DTFS to use in WI */ + DTFS_STRUCTURE X2, /* i : Ending DTFS to use in WI */ + const float *phase, /* i : Phase contour */ + float *out, /* o : Output time domain waveform */ + int16_t N, /* i : Number of samples to generate */ + const int16_t FR_flag /* i : Flag to indicate called in FR context */ +) +{ + int16_t i, j, j1; + float w, tmp; + float x1_256[256], x2_256[256]; + float sum1, sum2; + int16_t m, l1, k; + int16_t N1; + float nrg_flag = 0; + float x_r_fx[L_FRAME]; + float temp_w; + ivas_error error; + + DTFS_STRUCTURE *tmp1_dtfs; + DTFS_STRUCTURE *tmp2_dtfs; + DTFS_STRUCTURE *tmp3_dtfs; + + error = IVAS_ERR_OK; + + if ( ( error = DTFS_new( &tmp1_dtfs ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure 1" ); + } + if ( ( error = DTFS_new( &tmp2_dtfs ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure 2" ); + } + if ( ( error = DTFS_new( &tmp3_dtfs ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure 3" ); + } + + DTFS_copy( tmp1_dtfs, X ); + DTFS_copy( tmp2_dtfs, X2 ); + DTFS_fast_fs_inv( tmp1_dtfs, x1_256, 256 ); + DTFS_fast_fs_inv( tmp2_dtfs, x2_256, 256 ); + + tmp = (float) ( log( 1.0 - WI_THRESHLD ) / ( X.lag - N ) ); + for ( i = 0; i < N; i++ ) + { + if ( FR_flag == 0 ) + { + /* should not be counted inside the loop */ + if ( N - WI_SAMPLE_THLD > X.lag ) + { + /* pre-computed and stored in a table */ + w = (float) ( 1.0 - exp( -( i + 1 ) * tmp ) ); + } + else + { + /* can be a look-up table */ + w = (float) ( i + 1 ) / N; + } + } + else + { + if ( nrg_flag ) + { + w = (float) ( i + 1 ) / N; + } + else + { + if ( N <= tmp2_dtfs->lag ) + { + N = tmp2_dtfs->lag + 1; + } + + N1 = N - tmp2_dtfs->lag; + if ( i < N1 ) + { + w = (float) ( i + 1 ) / N1; + } + else + { + w = 1.0; + } + } + } + + /* add sinc interpolation of two time domain waveforms at + appropriate phase position */ + j = ( LL_OS * 10 + (int16_t) rint_new( phase[i] * LL_OS / PI2 ) ) % LL_OS; + + if ( j < 0 ) + { + j = 0; + } + + k = j % WARP_OS_RATE; + l1 = j / WARP_OS_RATE; + + set_f( x_r_fx, 0.0f, L_FRAME ); + + temp_w = ( 1 - w ); + + for ( j1 = 0; j1 < 12; j1++ ) + { + m = ( 1000 * LL + l1 - OSLENGTH / 2 + j1 ) % LL; + + if ( m < 0 ) + { + m = 0; + } + + x_r_fx[m] = x1_256[m] * temp_w + x2_256[m] * w; + } + + for ( j1 = 0, sum1 = sum2 = 0.0; j1 < OSLENGTH; j1++ ) + { + /* mult or div by constants should be done once outside the loop */ + m = ( 1000 * LL + l1 - OSLENGTH / 2 + j1 ) % LL; + + if ( m < 0 ) + { + m = 0; + } + + sum1 += x_r_fx[m] * sinc[k][j1]; + } + + out[i] = sum1; + } + + count_free( tmp1_dtfs ); + count_free( tmp2_dtfs ); + count_free( tmp3_dtfs ); + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_zeroFilter() + * + * DTFS zero filter response. + *-------------------------------------------------------------------*/ + +void DTFS_zeroFilter( + DTFS_STRUCTURE *X, /* i/o: DTFS to zeroFilter inplace */ + const float *LPC, /* i : LPCs */ + const int16_t N /* i : LPC order */ +) +{ + float tmp, tmp1, tmp2, sum1, sum2; + int16_t k, n; + + tmp1 = (float) ( PI2 / X->lag ); + for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++ ) + { + tmp = tmp2 = k * tmp1; + /* Calculate sum1 and sum2 */ + sum1 = 1.0; + sum2 = 0.0; + for ( n = 0; n < N; n++, tmp2 += tmp ) + { + sum1 += (float) ( LPC[n] * cos( tmp2 ) ); + sum2 += (float) ( LPC[n] * sin( tmp2 ) ); + } + /* Calculate the circular convolution */ + tmp = X->a[k]; + X->a[k] = tmp * sum1 - X->b[k] * sum2; + X->b[k] = X->b[k] * sum1 + tmp * sum2; + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_poleFilter() + * + * DTFS pole filter response. + *-------------------------------------------------------------------*/ + +void DTFS_poleFilter( + DTFS_STRUCTURE *X, /* i/o: DTFS to poleFilter inplace */ + const float *LPC, /* i : LPCs */ + const int16_t N /* i : LPC order */ +) +{ + float tmp, tmp1, tmp2, sum1, sum2; + int16_t k, n; + + tmp1 = (float) ( PI2 / X->lag ); + for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++ ) + { + tmp = tmp2 = k * tmp1; + /* Calculate sum1 and sum2 */ + sum1 = 1.0; + sum2 = 0.0; + for ( n = 0; n < N; n++, tmp2 += tmp ) + { + sum1 += (float) ( LPC[n] * cos( tmp2 ) ); + sum2 += (float) ( LPC[n] * sin( tmp2 ) ); + } + /* Calculate the circular convolution */ + tmp = X->a[k]; + tmp2 = sum1 * sum1 + sum2 * sum2; + X->a[k] = ( tmp * sum1 + X->b[k] * sum2 ) / tmp2; + X->b[k] = ( -tmp * sum2 + X->b[k] * sum1 ) / tmp2; + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_setEngy() + * + * Set DTFS energy. + *-------------------------------------------------------------------*/ + +static float DTFS_setEngy( + DTFS_STRUCTURE *X_DTFS, /* i/o: DTFS structure to set engy */ + float en2 /* i : Energy to set to */ +) +{ + int16_t k; + float en1, tmp; + + en1 = DTFS_getEngy( *X_DTFS ); + if ( en1 == 0.0 ) + { + return 0.0; + } + tmp = (float) sqrt( en2 / en1 ); + for ( k = 0; k <= min( X_DTFS->lag >> 1, X_DTFS->nH ); k++ ) + { + X_DTFS->a[k] *= tmp; + X_DTFS->b[k] *= tmp; + } + + return en1; +} + + +/*-------------------------------------------------------------------* + * DTFS_adjustLag() + * + * Adjust DTFS lag based on a target lag. + *-------------------------------------------------------------------*/ + +void DTFS_adjustLag( + DTFS_STRUCTURE *X_DTFS, /* i/o: DTFS to adjust lag for */ + const int16_t N /* i : Target lag */ +) +{ + int16_t k; + float en, diff; + + if ( N == X_DTFS->lag ) + { + return; + } + + if ( N > X_DTFS->lag ) + { + DTFS_zeroPadd( N, X_DTFS ); + } + else + { + en = DTFS_getEngy( *X_DTFS ); + for ( k = ( N >> 1 ) + 1; k <= min( X_DTFS->lag >> 1, X_DTFS->nH ); k++ ) + { + X_DTFS->a[k] = 0.0; + X_DTFS->b[k] = 0.0; + } + DTFS_setEngy( X_DTFS, en ); + X_DTFS->lag = N; + /* recompute nH for new lag */ + X_DTFS->nH = (int16_t) floor( X_DTFS->upper_cut_off_freq / ( 12800.0 / X_DTFS->lag ) ); + + X_DTFS->nH_4kHz = (int16_t) floor( 4000.0 / ( 12800.0 / X_DTFS->lag ) ); + diff = 12800.0f / X_DTFS->lag; + if ( X_DTFS->upper_cut_off_freq - ( diff * X_DTFS->nH ) >= diff ) + { + X_DTFS->nH++; + } + if ( 4000.0 - ( diff * X_DTFS->nH_4kHz ) >= diff ) + { + X_DTFS->nH_4kHz++; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_getEngy() + * + * Get DTFS energy. + *-------------------------------------------------------------------*/ + +float DTFS_getEngy( + DTFS_STRUCTURE X /* i : DTFS to compute energy of */ +) +{ + int16_t k; + float en; + + en = 0.0f; + for ( k = 1; k <= min( ( X.lag - 1 ) >> 1, X.nH ); k++ ) + { + en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; + } + en /= 2.0; + en += X.a[0] * X.a[0]; + if ( X.lag % 2 == 0 ) + { + en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; + } + + return en; +} + + +/*-------------------------------------------------------------------* + * DTFS_car2pol() + * + * DTFS cartesian to polar co-ordinates conversion. + *-------------------------------------------------------------------*/ + +void DTFS_car2pol( + DTFS_STRUCTURE *X /* i/o: DTFS structure a, b, lag */ +) +{ + int16_t k; + float tmp; + + for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) + { + tmp = X->a[k]; + X->a[k] = (float) ( 0.5f * sqrt( tmp * tmp + X->b[k] * X->b[k] ) ); + X->b[k] = (float) atan2( X->b[k], tmp ); + } + + if ( X->lag % 2 == 0 ) + { + tmp = X->a[k]; + X->a[k] = (float) sqrt( tmp * tmp + X->b[k] * X->b[k] ); + X->b[k] = (float) atan2( X->b[k], tmp ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_pol2car() + * + * DTFS polar to cartesian co-ordinates conversion. + *-------------------------------------------------------------------*/ + +void DTFS_pol2car( + DTFS_STRUCTURE *X /* i/o: DTFS structure a, b, lag */ +) +{ + int16_t k; + float tmp; + + for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) + { + tmp = X->b[k]; + X->b[k] = (float) ( 2.0f * X->a[k] * sin( tmp ) ); + X->a[k] = (float) ( 2.0f * X->a[k] * cos( tmp ) ); + } + + if ( X->lag % 2 == 0 ) + { + tmp = X->b[k]; + X->b[k] = (float) ( X->a[k] * sin( tmp ) ); + X->a[k] = (float) ( X->a[k] * cos( tmp ) ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_setEngyHarm() + * + * Adjust DTFS energy based on the input target energy. + *-------------------------------------------------------------------*/ + +/*! r: Input RMS between f1 and f2 before scaling */ +float DTFS_setEngyHarm( + float f1, /* i : lower band freq of input to control energy */ + float f2, /* i : upper band freq of input to control energy */ + float g1, /* i : lower band freq of output to control energy */ + float g2, /* i : upper band freq of output to control energy */ + float en2, /* i : Target Energy to set the DTFS to */ + DTFS_STRUCTURE *X /* i/o: DTFS to adjust the energy of */ +) +{ + int16_t k, count; + float en1, tmp, factor, diff; + + diff = (float) INT_FS_12k8 / X->lag; + + en1 = 0.0f; + count = 0; + if ( f1 == 0.0 ) + { + en1 += X->a[0] * X->a[0]; + count++; + } + for ( k = 1, tmp = diff; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++, tmp += diff ) + { + if ( X->a[k] < EPSILON ) + { + X->a[k] = 0; + } + + if ( tmp > f1 && tmp <= f2 ) + { + en1 += X->a[k] * X->a[k]; + count++; + } + } + + if ( count <= 0.0 ) + { + count = 1; + } + + en1 /= count; + + if ( en2 < 0.0 ) + { + en2 = 0.0; + } + + if ( en1 > 0.0 ) + { + factor = (float) sqrt( en2 / en1 ); + } + else + { + factor = 0.0f; + } + if ( g1 == 0.0 ) + { + X->a[k] *= factor; + } + for ( k = 1, tmp = diff; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++, tmp += diff ) + { + if ( tmp > g1 && tmp <= g2 ) + { + X->a[k] *= factor; + } + } + + return (float) ( en1 + 1e-20 ); +} + + +/*-------------------------------------------------------------------* + * cubicPhase() + * + * Compute coefficients of cubic phase function + *-------------------------------------------------------------------*/ + +static void cubicPhase( + float ph1, /* i : phase offset */ + float ph2, /* i : phase 2 */ + const float L1, /* i : previous lag */ + const float L2, /* i : current lag */ + int16_t N, /* i : input length */ + float *phOut /* o : cubic phase output */ +) +{ + float coef[4], f1, f2, c1, c2, factor; + int16_t n; + double diff; + + N -= (int16_t) L2; + + if ( N <= 0 ) + { + N = 1; + } + + /* Computation of the coefficients of the cubic phase function */ + f1 = (float) ( PI2 / L1 ); + f2 = (float) ( PI2 / L2 ); + ph1 = (float) fmod( (double) ( ph1 ), PI2 ); + ph2 = (float) fmod( (double) ( ph2 ), PI2 ); + coef[3] = ph1; + coef[2] = f1; + factor = (float) ( anint( ( ph1 - ph2 + 0.5 * N * ( f2 + f1 ) ) / PI2 ) ); + c1 = f2 - f1; + c2 = (float) ( ph2 - ph1 - N * f1 + PI2 * factor ); + coef[0] = ( N * c1 - 2 * c2 ) / ( N * N * N ); + coef[1] = ( c1 - 3 * N * N * coef[0] ) / ( 2 * N ); + + /* Computation of the phase value at each sample point */ + phOut[0] = ph1; + for ( n = 1; n < N; n++ ) + { + phOut[n] = _POLY3( n, coef ); + } + diff = (float) ( PI2 / L2 ); + for ( ; n < N + (int16_t) L2; n++ ) + { + phOut[n] = (float) ( phOut[n - 1] + diff ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_to_erb() + * + * DTFS to ERB conversion + *-------------------------------------------------------------------*/ + +void DTFS_to_erb( + DTFS_STRUCTURE X, /* i : DTFS input */ + float *out /* o : ERB output */ +) +{ + int16_t num_erb; + uint16_t i, j, count[NUM_ERB_WB]; + float freq, diff; + + const float *erb = NULL; + num_erb = NUM_ERB_NB; + if ( X.upper_cut_off_freq == 4000.0 ) + { + num_erb = NUM_ERB_NB; + erb = &( erb_NB[0] ); + } + else if ( X.upper_cut_off_freq == 6400.0 ) + { + num_erb = NUM_ERB_WB; + erb = &( erb_WB[0] ); + } + + for ( i = 0; i < num_erb; i++ ) + { + count[i] = 0; + out[i] = 0.0; + } + diff = 12800.0f / X.lag; + for ( i = j = 0, freq = 0.0; i <= min( X.lag >> 1, X.nH ); i++, freq += diff ) + { + if ( !( freq <= erb[num_erb] ) ) + { + freq = erb[num_erb]; + } + + for ( ; j < num_erb; j++ ) + { + if ( freq < erb[j + 1] ) + { + if ( X.a[i] < 0.0f ) + { + X.a[i] = 0.0f; + } + + out[j] += X.a[i]; + count[j]++; + break; + } + } + } + for ( i = 0; i < num_erb; i++ ) + { + if ( count[i] > 1 ) + { + out[i] /= count[i]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * erb_slot() + * + * Estimation of ERB slots. + *-------------------------------------------------------------------*/ + +void erb_slot( + int16_t lag, /* i : input lag */ + int16_t *out, /* o : ERB slots */ + float *mfreq, /* i : ERB frequencies */ + int16_t num_erb /* i : number of ERBs */ +) +{ + uint16_t i, j; + float freq, diff; + int16_t upper_cut_off_freq; + const float *erb = NULL; + int16_t nH_band; + + upper_cut_off_freq = 4000; + if ( num_erb == NUM_ERB_NB ) + { + upper_cut_off_freq = 4000; + erb = &( erb_NB[0] ); + } + else if ( num_erb == NUM_ERB_WB ) + { + upper_cut_off_freq = 6400; + erb = &( erb_WB[0] ); + } + nH_band = (int16_t) floor( upper_cut_off_freq / ( 12800.0 / lag ) ); + + for ( i = 0; i < num_erb; i++ ) + { + out[i] = 0; + mfreq[i] = 0.0; + } + diff = 12800.0f / lag; + if ( upper_cut_off_freq - ( diff * nH_band ) >= diff ) + { + nH_band++; + } + for ( i = j = 0, freq = 0.0; i <= min( lag >> 1, nH_band ); i++, freq += diff ) + { + + if ( !( freq <= erb[num_erb] ) ) + { + freq = erb[num_erb]; + } + + freq = min( freq, upper_cut_off_freq ); + + for ( ; j < num_erb; j++ ) + { + if ( freq < erb[j + 1] ) + { + mfreq[j] += freq; + out[j]++; + break; + } + } + } + + for ( j = 0; j < num_erb; j++ ) + { + if ( out[j] > 1 ) + { + mfreq[j] /= out[j]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * DTFS_erb_inv() + * + * .DTFS after ERB inverse + *-------------------------------------------------------------------*/ + +void DTFS_erb_inv( + float *in, /* i : ERB inpt */ + int16_t *slot, /* i : ERB slots filled based on lag */ + float *mfreq, /* i : erb frequence edges */ + DTFS_STRUCTURE *X, /* o : DTFS after erb-inv */ + const int16_t num_erb /* i : Number of ERB bands */ +) +{ + int16_t i, j, m = 0; + float diff; + float freq, f[NUM_ERB_WB + 2], amp[NUM_ERB_WB + 2]; + int16_t upper_cut_off_freq = 0; + + const float *erb = NULL; + + if ( num_erb == NUM_ERB_NB ) + { + upper_cut_off_freq = 4000; + erb = &( erb_NB[0] ); + } + else if ( num_erb == NUM_ERB_WB ) + { + upper_cut_off_freq = 6400; + erb = &( erb_WB[0] ); + } + + f[m] = 0.0; + amp[m] = 0.0; + m++; + for ( i = 0; i < num_erb; i++ ) + { + if ( slot[i] != 0 ) + { + f[m] = mfreq[i]; + amp[m] = in[i]; + m++; + } + } + f[m] = upper_cut_off_freq; + amp[m] = 0.0; + m++; + + diff = 12800.0f / X->lag; + + for ( i = 0, j = 1, freq = 0.0; i <= min( X->lag >> 1, X->nH ); i++, freq += diff ) + { + if ( !( freq <= erb[num_erb] ) ) + { + freq = erb[num_erb]; + } + + if ( !( m <= num_erb + 2 ) ) + { + m = num_erb + 2; + } + + if ( freq > upper_cut_off_freq ) + { + freq = upper_cut_off_freq; + } + for ( ; j < m; j++ ) + { + if ( freq <= f[j] ) + { + X->a[i] = amp[j] * ( freq - f[j - 1] ) + amp[j - 1] * ( f[j] - freq ); + if ( f[j] != f[j - 1] ) + { + X->a[i] /= ( f[j] - f[j - 1] ); + } + break; + } + } + + X->a[0] = 0.0f; + } + + return; +} + + +/*-------------------------------------------------------------------* + * LPCPowSpect() + * + * LPC power spectrum + *-------------------------------------------------------------------*/ + +static void LPCPowSpect( + const float *freq, /* i : ERB frequencies */ + const int16_t Nf, /* i : Number of ERBs */ + const float *LPC, /* i : LPC coefficients */ + const int16_t Np, /* i : Number of LPCs */ + float *out /* o : LPC power spectrum */ +) +{ + float w, tmp, Re, Im; + int16_t i, k; + + for ( k = 0; k < Nf; k++ ) + { + Re = 1.0; + Im = 0.0; + /* Note that freq ranges between [0 UPPER_CUT_OFF_FREQ] */ + tmp = (float) ( freq[k] / 12800.0f * PI2 ); + for ( i = 0, w = tmp; i < Np; i++, w += tmp ) + { + Re += (float) ( LPC[i] * cos( w ) ); + Im -= (float) ( LPC[i] * sin( w ) ); + } + out[k] = 1.0f / ( Re * Re + Im * Im ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * erb_diff() + * + * ERB difference + *-------------------------------------------------------------------*/ + +void erb_diff( + const float *prev_erb, /* i : previous ERB */ + const int16_t pl, /* i : previous lag */ + const float *curr_erb, /* i : current ERB */ + const int16_t l, /* i : current lag */ + const float *curr_lsp, /* i : current LSP coefficients */ + float *out, /* o : ERB difference */ + int16_t *index, /* i : ERB index */ + const int16_t num_erb /* i : Number of ERBs */ +) +{ + int16_t i, j; + int16_t pslot[NUM_ERB_WB], cslot[NUM_ERB_WB], mmseindex; + float tmp, tmp1, t_prev_erb[NUM_ERB_WB], LPC[M + 1], mfreq[NUM_ERB_WB], PowSpect[NUM_ERB_WB], mmse; + const float( *AmpCB1 )[10] = 0; + + if ( num_erb == NUM_ERB_NB ) + { + AmpCB1 = AmpCB1_NB; + } + else if ( num_erb == NUM_ERB_WB ) + { + AmpCB1 = AmpCB1_WB; + } + + erb_slot( l, cslot, mfreq, num_erb ); + erb_slot( pl, pslot, t_prev_erb, num_erb ); + for ( i = 0, tmp = 1.0f; i < M + 1; i++ ) + { + LPC[i] = curr_lsp[i] * ( tmp *= 0.78f ); + } + LPCPowSpect( mfreq, num_erb, LPC, M + 1, PowSpect ); + + for ( i = 0; i < num_erb; i++ ) + { + t_prev_erb[i] = prev_erb[i]; + } + + if ( pl > l ) + { + tmp = t_prev_erb[0]; + for ( i = 0; i < num_erb; i++ ) + { + if ( pslot[i] < 0 ) + { + pslot[i] = 0; + } + + if ( pslot[i] != 0 ) + { + tmp = t_prev_erb[i]; + } + else + { + t_prev_erb[i] = tmp; + } + } + } + else if ( l > pl ) + { + tmp = t_prev_erb[num_erb - 1]; + for ( i = num_erb - 1; i >= 0; i-- ) + { + if ( pslot[i] != 0 ) + { + tmp = t_prev_erb[i]; + } + else + { + t_prev_erb[i] = tmp; + } + } + } + + for ( i = 0; i < num_erb; i++ ) + { + out[i] = curr_erb[i] - t_prev_erb[i]; + } + + /* First Band Amplitude Search */ + mmse = (float) HUGE_VAL; + mmseindex = -1; + for ( j = 0; j < ERB_CBSIZE1; j++ ) + { + tmp = 0.0; + for ( i = 1; i < 11; i++ ) + { + if ( cslot[i] != 0 ) + { + if ( AmpCB1[j][i - 1] < -t_prev_erb[i] ) + { + tmp1 = PowSpect[i] * SQR( curr_erb[i] ); + } + else + { + tmp1 = (float) ( PowSpect[i] * SQR( out[i] - AmpCB1[j][i - 1] ) ); + } + if ( AmpCB1[j][i - 1] < out[i] ) + { + tmp1 *= 0.9f; + } + tmp += tmp1; + } + } + + if ( tmp < mmse ) + { + mmse = tmp; + mmseindex = j; + } + } + + if ( !( mmseindex < ERB_CBSIZE1 && mmseindex >= 0 ) ) + { + mmseindex = 0; + } + + index[0] = mmseindex; + + /* Second Band Amplitude Search */ + mmse = (float) HUGE_VAL; + mmseindex = -1; + for ( j = 0; j < ERB_CBSIZE2; j++ ) + { + tmp = 0.0; + for ( i = 11; i < num_erb; i++ ) + { + if ( num_erb == NUM_ERB_NB ) + { + if ( cslot[i] != 0 ) + { + if ( AmpCB2_NB[j][i - 11] < -t_prev_erb[i] ) + { + tmp1 = PowSpect[i] * SQR( curr_erb[i] ); + } + else + { + tmp1 = (float) ( PowSpect[i] * SQR( out[i] - AmpCB2_NB[j][i - 11] ) ); + } + + if ( AmpCB2_NB[j][i - 11] < out[i] ) + { + tmp1 *= 0.9f; + } + tmp += tmp1; + } + } + else if ( num_erb == NUM_ERB_WB ) + { + if ( cslot[i] != 0 ) + { + if ( AmpCB2_WB[j][i - 11] < -t_prev_erb[i] ) + { + tmp1 = PowSpect[i] * SQR( curr_erb[i] ); + } + else + { + tmp1 = (float) ( PowSpect[i] * SQR( out[i] - AmpCB2_WB[j][i - 11] ) ); + } + + if ( AmpCB2_WB[j][i - 11] < out[i] ) + { + tmp1 *= 0.9f; + } + tmp += tmp1; + } + } + } + + if ( tmp < mmse ) + { + mmse = tmp; + mmseindex = j; + } + } + + if ( !( mmseindex < ERB_CBSIZE2 && mmseindex >= 0 ) ) + { + mmseindex = 0; + } + + index[1] = mmseindex; + + return; +} + +/*-------------------------------------------------------------------* + * erb_add() + * + * Add current and past ERB + *-------------------------------------------------------------------*/ + +void erb_add( + float *curr_erb, /* i/o: current ERB */ + const int16_t l, /* i : current lag */ + const float *prev_erb, /* i : previous ERB */ + const int16_t pl, /* i : previous lag */ + const int16_t *index, /* i : ERB index */ + const int16_t num_erb /* i : number of ERBs */ +) +{ + int16_t i, pslot[NUM_ERB_WB], cslot[NUM_ERB_WB]; + float tmp, t_prev_erb[NUM_ERB_WB]; + const float( *AmpCB1 )[10] = 0; + + if ( num_erb == NUM_ERB_NB ) + { + AmpCB1 = AmpCB1_NB; + } + else if ( num_erb == NUM_ERB_WB ) + { + AmpCB1 = AmpCB1_WB; + } + erb_slot( l, cslot, t_prev_erb, num_erb ); + erb_slot( pl, pslot, t_prev_erb, num_erb ); + + for ( i = 0; i < num_erb; i++ ) + { + t_prev_erb[i] = prev_erb[i]; + } + + if ( pl > l ) + { + tmp = t_prev_erb[0]; + for ( i = 0; i < num_erb; i++ ) + { + if ( !( pslot[i] >= 0 ) ) + { + pslot[i] = 0; + } + + if ( pslot[i] != 0 ) + { + tmp = t_prev_erb[i]; + } + else + { + t_prev_erb[i] = tmp; + } + } + } + else if ( l > pl ) + { + tmp = t_prev_erb[num_erb - 1]; + for ( i = num_erb - 1; i >= 0; i-- ) + { + if ( pslot[i] != 0 ) + { + tmp = t_prev_erb[i]; + } + else + { + t_prev_erb[i] = tmp; + } + } + } + + for ( i = 1; i < 11; i++ ) + { + if ( cslot[i] != 0 ) + { + curr_erb[i] = (float) ( AmpCB1[index[0]][i - 1] + t_prev_erb[i] ); + curr_erb[i] = max( 0.0f, curr_erb[i] ); + } + else + { + curr_erb[i] = 0.0; + } + } + for ( i = 11; i < ( num_erb - 2 ); i++ ) + { + if ( cslot[i] != 0 ) + { + if ( num_erb == NUM_ERB_NB ) + { + curr_erb[i] = (float) ( AmpCB2_NB[index[1]][i - 11] + t_prev_erb[i] ); + curr_erb[i] = max( 0.0f, curr_erb[i] ); + } + else if ( num_erb == NUM_ERB_WB ) + { + curr_erb[i] = (float) ( AmpCB2_WB[index[1]][i - 11] + t_prev_erb[i] ); + curr_erb[i] = max( 0.0f, curr_erb[i] ); + } + } + else + { + curr_erb[i] = 0.0f; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * WIsyn() + * + * Synthesis using waveform interpolation + *-------------------------------------------------------------------*/ + +ivas_error WIsyn( + DTFS_STRUCTURE PREVCW, /* i : Prev frame DTFS */ + DTFS_STRUCTURE *CURRCW_DTFS_out, /* i/o: Curr frame DTFS */ + const float *curr_lpc, /* i : LPC */ + float *ph_offset, /* i/o: Phase offset to line up at end of frame */ + float *out, /* o : Waveform Interpolated time domain signal */ + const int16_t N, /* i : Number of output samples to generate */ + const int16_t FR_flag /* i : called for post-smoothing in FR */ +) +{ + DTFS_STRUCTURE *CURRCW_DTFS; + uint16_t I = 1, flag = 0; + float alignment, tmp, *phase; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( phase = (float *) count_malloc( N * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for WI structure\n" ) ); + } + + if ( ( error = DTFS_new( &CURRCW_DTFS ) ) != IVAS_ERR_OK ) + { + return IVAS_ERROR( error, "Error creating new DTFS structure\n" ); + } + + DTFS_copy( CURRCW_DTFS, *CURRCW_DTFS_out ); + + /* Calculating the expected alignment shift */ + alignment = (float) ( *ph_offset / PI2 * PREVCW.lag ); + if ( flag == 1 ) + { + alignment *= I; + } + /* Calculating the expected alignment shift */ + tmp = (float) fmod( ( N % ( ( PREVCW.lag + CURRCW_DTFS->lag ) >> 1 ) + alignment ), CURRCW_DTFS->lag ); + + /* Compute the alignment shift */ + if ( FR_flag == 0 ) + { + alignment = DTFS_alignment_weight( PREVCW, *CURRCW_DTFS, tmp, curr_lpc, curr_lpc ); + } + else /* FR case */ + { + alignment = DTFS_alignment_full( PREVCW, *CURRCW_DTFS, CURRCW_DTFS->lag * 2 ); + } + + tmp = (float) ( PI2 * alignment / CURRCW_DTFS->lag ); + DTFS_phaseShift( CURRCW_DTFS, tmp ); + DTFS_phaseShift( CURRCW_DTFS_out, (float) ( PI2 * alignment / CURRCW_DTFS_out->lag ) ); + + /* Compute the cubic phase track and transform to 1-D signal */ + cubicPhase( *ph_offset, tmp, (float) PREVCW.lag, (float) CURRCW_DTFS->lag, N, phase ); + + if ( FR_flag == 0 ) + { + DTFS_transform( PREVCW, *CURRCW_DTFS, phase, out, N, 0 ); + } + else + { + DTFS_transform( PREVCW, *CURRCW_DTFS, phase, out, N, 1 ); + } + + /* Adjust the phase offset and wrap it between 0 and 2pi */ + if ( flag == 2 ) + { + tmp *= I; + } + *ph_offset = (float) fmod( (double) ( tmp ), PI2 ); + + count_free( phase ); + count_free( CURRCW_DTFS ); + + return error; +} diff --git a/lib_com/window.c b/lib_com/window.c new file mode 100644 index 0000000000..a3bf82ac7e --- /dev/null +++ b/lib_com/window.c @@ -0,0 +1,77 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" + +/*------------------------------------------------------------------- + * ham_cos_window() + * + * + *-------------------------------------------------------------------*/ + +void ham_cos_window( + float *fh, + const int16_t n1, + const int16_t n2 ) +{ + float cc, cte; + int16_t i; + + cte = PI2 / (float) ( 2 * n1 - 1 ); + cc = 0.0f; + for ( i = 0; i < n1; i++ ) + { + *fh++ = 0.54f - 0.46f * (float) cos( cc ); + cc += cte; + } + + cte = PI2 / (float) ( 4 * n2 - 1 ); + cc = 0.0f; + for ( i = 0; i < n2; i++ ) + { + *fh++ = (float) cos( cc ); + cc += cte; + } + + return; +} diff --git a/lib_com/window_ola.c b/lib_com/window_ola.c new file mode 100644 index 0000000000..7a5b153636 --- /dev/null +++ b/lib_com/window_ola.c @@ -0,0 +1,607 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * window_ola() + * + * Windowing, Overlap and Add + *--------------------------------------------------------------------------*/ + + +void window_ola( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + const int16_t L, /* i : length */ + const int16_t right_mode, + const int16_t left_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const int16_t use_bfi_win, /* i : use BFI windowing */ + const int16_t oldHqVoicing, /* i : previous HqVoicing */ + float *oldgapsynth /* i : previous gapsynth */ +) +{ + int16_t i, decimate, decay; + int16_t n, n16, windecay48, windecay16; + float win_right[R2_48]; + float win_int_left[R1_16]; + float win_left[R1_48]; + float win_int_right[R2_16]; + + + float SS2[L_FRAME48k - NS2SA( 48000, N_ZERO_MDCT_NS )]; + float wret2[L_FRAME48k - NS2SA( 48000, N_ZERO_MDCT_NS )]; + + float *paout; + + + n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + n16 = (int16_t) ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; + windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; + decimate = 1; + decay = 0; + + tcx_get_windows_mode1( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); + + if ( L == L_FRAME32k || L == L_FRAME16k ) + { + decimate = 3; + decay = 1; + } + else if ( L == L_FRAME8k ) + { + decimate = 6; + decay = 2; + } + + else if ( L == 512 ) + { + windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; + decimate = 1; + decay = 0; + } + else if ( L == 256 ) + { + windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; + decimate = 2; + decay = 0; + } + + paout = auOut - n; + + if ( use_bfi_win ) + { + if ( L == L_FRAME32k ) + { + for ( i = 0; i < L / 2; i += 2 ) + { + wret2[L / 2 - n + i + 1] = win_left[( L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay]; + wret2[L / 2 - n + i] = win_int_left[( L_FRAME16k / 2 - i / 2 - 1 )]; + } + + for ( i = n; i < L / 2; i += 2 ) + { + wret2[i - n] = win_left[( L_FRAME16k - i / 2 ) * decimate - decay - 1]; + wret2[i + 1 - n] = win_int_left[L_FRAME16k - ( i / 2 ) - 1]; + } + } + else + { + for ( i = 0; i < L / 2; i++ ) + { + wret2[i + L / 2 - n] = win_left[( L / 2 - i - 1 ) * decimate + decay]; + } + + for ( i = n; i < L / 2; i++ ) + { + wret2[i - n] = win_left[( L - i ) * decimate - decay - 1]; + } + } + sinq( EVS_PI / ( 2 * ( L - n ) ), EVS_PI / ( 4 * ( L - n ) ), L - n, SS2 ); + + for ( i = n; i < L / 2; i++ ) + { + paout[i] = ImdctOut[L / 2 + i]; + } + + for ( i = 0; i < L / 2; i++ ) + { + paout[L / 2 + i] = -ImdctOut[L - 1 - i]; + } + + if ( oldHqVoicing ) + { + for ( i = 0; i < L - n; i++ ) + { + auOut[i] = auOut[i] * SS2[i] + oldgapsynth[i + n] * ( SS2[L - n - i - 1] ); + } + } + else + { + for ( i = 0; i < L - n; i++ ) + { + auOut[i] = auOut[i] * SS2[i] + OldauOut[i + n] * ( SS2[L - n - i - 1] ) / ( wret2[i] + 0.01f ); + } + } + } + + if ( L == L_FRAME32k ) + { + if ( use_bfi_win == 0 ) + { + for ( i = n; i < L / 2; i += 2 ) + { + paout[i] = ImdctOut[L / 2 + i] * win_right[( 2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) ) * decimate - 1 - decay - windecay48] + OldauOut[i]; + paout[i + 1] = ImdctOut[L / 2 + i + 1] * win_int_right[2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) - 1 - windecay16] + OldauOut[i + 1]; + } + + for ( i = 0; i < L / 2 - n; i += 2 ) + { + paout[L / 2 + i + 1] = -ImdctOut[L - 1 - ( i + 1 )] * win_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) * decimate + decay - windecay48] + OldauOut[i + L / 2 + 1]; + paout[L / 2 + i] = -ImdctOut[L - 1 - i] * win_int_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) - windecay16] + OldauOut[i + L / 2]; + } + + for ( i = L / 2 - n; i < L / 2; i += 2 ) + { + paout[L / 2 + i + 1] = -ImdctOut[L - 1 - ( i + 1 )] + OldauOut[i + L / 2 + 1]; + paout[L / 2 + i] = -ImdctOut[L - 1 - i] + OldauOut[i + L / 2]; + } + } + + for ( i = 0; i < L / 2; i += 2 ) + { + OldauOut[L / 2 + i + 1] = -ImdctOut[i + 1] * win_left[( L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay]; + OldauOut[L / 2 + i] = -ImdctOut[i] * win_int_left[( L_FRAME16k / 2 - i / 2 - 1 )]; + } + + + for ( i = n; i < L / 2; i += 2 ) + { + OldauOut[i] = -ImdctOut[L / 2 - 1 - i] * win_left[( L_FRAME16k - i / 2 ) * decimate - decay - 1]; + OldauOut[i + 1] = -ImdctOut[L / 2 - 1 - ( i + 1 )] * win_int_left[L_FRAME16k - ( i / 2 ) - 1]; + } + } + else + { + if ( use_bfi_win == 0 ) + { + + for ( i = n; i < L / 2; i++ ) + { + paout[i] = ImdctOut[L / 2 + i] * win_right[( 2 * L - i ) * decimate - 1 - decay - windecay48] + OldauOut[i]; + } + + for ( i = 0; i < L / 2 - n; i++ ) + { + paout[L / 2 + i] = -ImdctOut[L - 1 - i] * win_right[( 3 * L / 2 - 1 - i ) * decimate + decay - windecay48] + OldauOut[i + L / 2]; + } + + for ( i = L / 2 - n; i < L / 2; i++ ) + { + paout[L / 2 + i] = -ImdctOut[L - 1 - i] + OldauOut[i + L / 2]; + } + } + + for ( i = 0; i < L / 2; i++ ) + { + OldauOut[L / 2 + i] = -ImdctOut[i] * win_left[( L / 2 - i - 1 ) * decimate + decay]; + } + + + for ( i = n; i < L / 2; i++ ) + { + OldauOut[i] = -ImdctOut[L / 2 - 1 - i] * win_left[( L - i ) * decimate - decay - 1]; + } + } + + for ( i = 0; i < n; i++ ) + { + OldauOut[i] = -ImdctOut[L / 2 - 1 - i]; + } + for ( i = 0; i < n; i++ ) + { + paout[L + i] = OldauOut[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * window_ola_ext() + * + * + *-------------------------------------------------------------------*/ + +void window_ola_ext( + const float *ImdstOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + const int16_t L, /* i : length */ + const int16_t right_mode, + const int16_t left_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const uint16_t kernel_type /* i : transform kernel type */ +) +{ + const float sign_left = ( kernel_type & 1 ? 1.f : -1.f ); + const float sign_right = ( kernel_type >= MDCT_II ? -1.f : 1.f ); + int16_t i, decimate, decay; + int16_t n, n16, windecay48, windecay16; + float win_right[R2_48]; + float win_int_left[R1_16]; + float win_left[R1_48]; + float win_int_right[R2_16]; + float *paout; + + n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + n16 = (int16_t) ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; + windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; + decimate = 1; + decay = 0; + + tcx_get_windows_mode1( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); + + if ( L == L_FRAME32k || L == L_FRAME16k ) + { + decimate = 3; + decay = 1; + } + else if ( L == L_FRAME8k ) + { + decimate = 6; + decay = 2; + } + + else if ( L == 512 ) + { + windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; + decimate = 1; + decay = 0; + } + else if ( L == 256 ) + { + windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; + decimate = 2; + decay = 0; + } + + paout = auOut - n; + + if ( L == L_FRAME32k ) + { + for ( i = n; i < L / 2; i += 2 ) + { + paout[i] = sign_right * ImdstOut[L / 2 + i] * win_right[( 2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) ) * decimate - 1 - decay - windecay48] + OldauOut[i]; + paout[i + 1] = sign_right * ImdstOut[L / 2 + i + 1] * win_int_right[2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) - 1 - windecay16] + OldauOut[i + 1]; + } + + for ( i = 0; i < L / 2 - n; i += 2 ) + { + paout[L / 2 + i + 1] = -ImdstOut[L - 1 - ( i + 1 )] * win_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) * decimate + decay - windecay48] + OldauOut[i + L / 2 + 1]; + paout[L / 2 + i] = -ImdstOut[L - 1 - i] * win_int_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) - windecay16] + OldauOut[i + L / 2]; + } + + for ( i = L / 2 - n; i < L / 2; i += 2 ) + { + paout[L / 2 + i + 1] = -ImdstOut[L - 1 - ( i + 1 )] + OldauOut[i + L / 2 + 1]; + paout[L / 2 + i] = -ImdstOut[L - 1 - i] + OldauOut[i + L / 2]; + } + + for ( i = 0; i < L / 2; i += 2 ) + { + OldauOut[L / 2 + i + 1] = sign_left * ImdstOut[i + 1] * win_left[( L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay]; + OldauOut[L / 2 + i] = sign_left * ImdstOut[i] * win_int_left[( L_FRAME16k / 2 - i / 2 - 1 )]; + } + + + for ( i = n; i < L / 2; i += 2 ) + { + OldauOut[i] = -ImdstOut[L / 2 - 1 - i] * win_left[( L_FRAME16k - i / 2 ) * decimate - decay - 1]; + OldauOut[i + 1] = -ImdstOut[L / 2 - 1 - ( i + 1 )] * win_int_left[L_FRAME16k - ( i / 2 ) - 1]; + } + } + else + { + for ( i = n; i < L / 2; i++ ) + { + paout[i] = sign_right * ImdstOut[L / 2 + i] * win_right[( 2 * L - i ) * decimate - 1 - decay - windecay48] + OldauOut[i]; + } + + for ( i = 0; i < L / 2 - n; i++ ) + { + paout[L / 2 + i] = -ImdstOut[L - 1 - i] * win_right[( 3 * L / 2 - 1 - i ) * decimate + decay - windecay48] + OldauOut[i + L / 2]; + } + + for ( i = L / 2 - n; i < L / 2; i++ ) + { + paout[L / 2 + i] = -ImdstOut[L - 1 - i] + OldauOut[i + L / 2]; + } + + for ( i = 0; i < L / 2; i++ ) + { + OldauOut[L / 2 + i] = sign_left * ImdstOut[i] * win_left[( L / 2 - i - 1 ) * decimate + decay]; + } + + + for ( i = n; i < L / 2; i++ ) + { + OldauOut[i] = -ImdstOut[L / 2 - 1 - i] * win_left[( L - i ) * decimate - decay - 1]; + } + } + + for ( i = 0; i < n; i++ ) + { + OldauOut[i] = -ImdstOut[L / 2 - 1 - i]; + } + for ( i = 0; i < n; i++ ) + { + paout[L + i] = OldauOut[i]; + } + + return; +} + + +/*---------------------------------------------------------------------* + * core_switching_OLA() + * + * modify window after HQ core decoding + * Overlap ACELP and HQ + *---------------------------------------------------------------------*/ + +void core_switching_OLA( + const float *mem_over_hp, /* i : upsampling filter memory */ + const int16_t last_L_frame, /* i : last L_frame lengthture */ + const int32_t output_Fs, /* i : output sampling rate */ + float *synth, /* i/o: synthesized signal from HQ core */ + const float *synth_subfr_out, /* i : synthesized signal from ACELP core */ + float *synth_subfr_bwe, /* i : synthesized BWE from ACELP core */ + const int16_t output_frame, /* i : output frame length */ + const int16_t bwidth /* i : output bandwidth */ +) +{ + int16_t i, L, Loverlapp, out_filt_length, filt_delay, decimate, decay; + float tmp_buf_switch[SWITCH_MAX_GAP], tmp_buf_switch2[HQ_DELAY_COMP * HQ_DELTA_MAX + 2]; + float delta; + const float *win, *win_int; + + win = window_48kHz; + win_int = window_8_16_32kHz; + decimate = 1; + decay = 0; + + if ( output_frame == L_FRAME32k || output_frame == L_FRAME16k ) + { + decimate = 3; + decay = 1; + } + else if ( output_frame == L_FRAME8k ) + { + decimate = 6; + decay = 2; + } + + /* set multiplication factor according to the sampling rate */ + delta = 1; + if ( output_frame == L_FRAME16k ) + { + delta = 2; + } + else if ( output_frame == L_FRAME32k ) + { + delta = 4; + } + else if ( output_frame == L_FRAME48k ) + { + delta = 6; + } + + set_f( tmp_buf_switch, 0, SWITCH_MAX_GAP ); + set_f( tmp_buf_switch2, 0, HQ_DELAY_COMP * HQ_DELTA_MAX + 2 ); + + Loverlapp = (int16_t) ( delta * SWITCH_OVERLAP_8k ); + + mvr2r( synth_subfr_out, tmp_buf_switch, NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) ); /* copy 6.25 ms subframe */ + + /* conversion from 12.8kHz to output_Fs */ + if ( last_L_frame == L_FRAME ) + { + /* resample filter memory */ + if ( output_frame == L_FRAME8k ) + { + mvr2r( synth_subfr_out + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), NS2SA( output_Fs, DELAY_CLDFB_NS ) ); /* copy subframe to tmp buffer */ + } + else + { + out_filt_length = modify_Fs_intcub3m_sup( mem_over_hp + 2, NS2SA( 12800, DELAY_CLDFB_NS ), 12800, tmp_buf_switch2, output_Fs, &filt_delay ); + + for ( i = 0; i < filt_delay; i++ ) + { + tmp_buf_switch2[out_filt_length + i - filt_delay] = tmp_buf_switch2[out_filt_length - 1 - filt_delay]; + } + + if ( ( bwidth == NB && output_Fs >= 16000 ) || ( bwidth > NB && output_Fs > 16000 ) ) + { + /* mix cubic and CLDFB resampled buffers in case of resampling to higher frequency rates */ + for ( i = 0; i < out_filt_length; i++ ) + { + float a = (float) i / out_filt_length; + float b = 1.f - a; + + tmp_buf_switch[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i] = a * tmp_buf_switch2[i] + b * synth_subfr_out[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i]; + } + } + else + { + /* copy cubic resampled buffer (memory) */ + mvr2r( tmp_buf_switch2, tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), out_filt_length ); + } + } + } + else + { + if ( output_frame == L_FRAME16k ) + { + /* no resampling */ + mvr2r( mem_over_hp + 2, tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), NS2SA( output_Fs, DELAY_CLDFB_NS ) ); + } + else + { + if ( output_frame == L_FRAME8k ) + { + mvr2r( synth_subfr_out + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), NS2SA( output_Fs, DELAY_CLDFB_NS ) ); /* copy subframe to tmp buffer */ + } + else + { + /* resample filter memory */ + out_filt_length = modify_Fs_intcub3m_sup( mem_over_hp + 2, NS2SA( 16000, DELAY_CLDFB_NS ), 16000, tmp_buf_switch2, output_Fs, &filt_delay ); + + for ( i = 0; i < filt_delay; i++ ) + { + tmp_buf_switch2[out_filt_length + i - filt_delay] = tmp_buf_switch2[out_filt_length - 1 - filt_delay]; + } + + if ( ( bwidth == NB && output_Fs >= 16000 ) || ( bwidth > NB && output_Fs > 16000 ) ) + { + /* mix cubic and CLDFB resampled buffers in case of resampling to higher frequency rates */ + for ( i = 0; i < out_filt_length; i++ ) + { + float a = (float) i / out_filt_length; + float b = 1.f - a; + + tmp_buf_switch[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i] = a * tmp_buf_switch2[i] + b * synth_subfr_out[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i]; + } + } + else + { + /* copy cubic resampled buffer (memory) */ + mvr2r( tmp_buf_switch2, tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), out_filt_length ); + } + } + } + } + + /* Windowing for overlapadd */ + L = NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ); /* 6.25 ms gap + 1.25 ms resamp */ + + set_f( synth, 0, L - Loverlapp ); + + if ( output_frame == L_FRAME32k ) + { + for ( i = 0; i < NS2SA( output_Fs, 10000000.0f - N_ZERO_MDCT_NS ); i += 2 ) + { + synth[L - Loverlapp + i] /= win[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) * decimate + decay - (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) )]; + synth[L - Loverlapp + i + 1] /= win_int[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) - (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) )]; + } + } + else + { + for ( i = 0; i < NS2SA( output_Fs, 10000000.0f - N_ZERO_MDCT_NS ); i++ ) + { + synth[L - Loverlapp + i] /= win[( 3 * output_frame / 2 - 1 - i ) * decimate + decay - (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) )]; + } + } + + + for ( i = 0; i < Loverlapp; i++ ) /* Windowing for overlapadd */ + { + synth[i + (int16_t) ( L - Loverlapp )] *= (float) sin( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); + synth_subfr_bwe[i + (int16_t) ( L - Loverlapp ) - NS2SA( output_Fs, DELAY_CLDFB_NS )] *= (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ) * (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); + tmp_buf_switch[i + (int16_t) ( L - Loverlapp )] *= (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ) * (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); + } + + /* overlap-add ACELP (tmp_buf_switch) + HQ (synth) */ + for ( i = 0; i < NS2SA( output_Fs, DELAY_CLDFB_NS ); i++ ) + { + synth[i] += tmp_buf_switch[i]; + } + for ( i = NS2SA( output_Fs, DELAY_CLDFB_NS ); i < L; i++ ) + { + synth[i] += tmp_buf_switch[i] + synth_subfr_bwe[i - NS2SA( output_Fs, DELAY_CLDFB_NS )]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * sinq() + * + * Fast sinus generate sin(tmp*i+phi) + *-------------------------------------------------------------------*/ + +void sinq( + const float tmp, /* i : sinus factor cos(tmp*i+phi) */ + const float phi, /* i : sinus phase cos(tmp*i+phi) */ + const int16_t N, /* i : size of output */ + float x[] /* o : output vector */ +) +{ + float A; + int16_t i; + + x[0] = (float) sin( phi ); + x[1] = (float) sin( tmp + phi ); + x[2] = (float) sin( 2 * tmp + phi ); + + if ( fabs( (float) ( tmp ) ) > 0.0001f ) + { + A = ( x[2] + x[0] ) / x[1]; + } + else + { + A = 0; + } + + for ( i = 3; i < N; i++ ) + { + x[i] = A * x[i - 1] - x[i - 2]; + } + + return; +} diff --git a/lib_com/wtda.c b/lib_com/wtda.c new file mode 100644 index 0000000000..cd8d588ed5 --- /dev/null +++ b/lib_com/wtda.c @@ -0,0 +1,451 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + +/*--------------------------------------------------------------------------* + * mvr2r_inv() + * + * + *--------------------------------------------------------------------------*/ + +static void mvr2r_inv( + const float *in, /* i : input vector */ + float *out, /* o : output vector */ + const int16_t L, /* i : length */ + const int16_t decimate /* i : decimation flag [-1,1] */ +) +{ + int16_t i; + + in = in + (int16_t) ( ( decimate - 1 ) / 2 ); + out = out + L - 1; + + for ( i = 0; i < L; i++ ) + { + *out = *in; + in += decimate; + out--; + } + + return; +} + +/*--------------------------------------------------------------------------* + * mvr2r_dec() + * + * + *--------------------------------------------------------------------------*/ + +static void mvr2r_dec( + const float *in, /* i : input vector */ + float *out, /* o : output vector */ + int16_t L, /* i : length */ + int16_t decimate /* i : decimation flag [-1,1] */ +) +{ + int16_t i; + in = in + (int16_t) ( ( decimate - 1 ) / 2 ); + for ( i = 0; i < L; i++ ) + { + *out = *in; + in += decimate; + out++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * copy_win() + * + * + *--------------------------------------------------------------------------*/ + +static void copy_win( + float *out_win, /* o : output window buffer */ + const int16_t nb_zero, /* i : length of zero padding */ + const float *in_win, /* i : input window */ + const int16_t win_lenght, /* i : length */ + const int16_t nb_one, /* i : length of flat section (ones) */ + const int16_t decimate /* i : input window */ +) +{ + if ( decimate < 0 ) + { + set_f( out_win, 1, nb_one ); + mvr2r_inv( in_win, out_win + nb_one, win_lenght, -decimate ); + set_f( out_win + win_lenght + nb_one, 0, nb_zero ); + } + else + { + set_f( out_win, 0, nb_zero ); + mvr2r_dec( in_win, out_win + nb_zero, win_lenght, decimate ); + set_f( out_win + nb_zero + win_lenght, 1, nb_one ); + } + + return; +} + +/*--------------------------------------------------------------------------* + * tcx_get_windows_mode1() + * + * + *--------------------------------------------------------------------------*/ + +void tcx_get_windows_mode1( + const int16_t left_mode, /* i : overlap mode of left window half */ + const int16_t right_mode, /* i : overlap mode of right window half */ + float *left_win, /* o : left overlap window */ + float *right_win, /* o : right overlap window */ + float *left_win_int, /* o : left overlap window */ + float *right_win_int, /* o : right overlap window */ + const int16_t L /* i : length */ +) +{ + /* Left part */ + if ( left_mode == MIN_OVERLAP || left_mode == TRANSITION_OVERLAP ) + { + if ( L == 256 || L == 512 ) + { + copy_win( left_win, R1_25 - 4 * R2_25 / 7, small_overlap_25, R2_25 / 7, 3 * R2_25 / 7, 1 ); + } + else + { + copy_win( left_win, R1_48 - 4 * R2_48 / 7, small_overlap_48, R2_48 / 7, 3 * R2_48 / 7, 1 ); + copy_win( left_win_int, R1_16 - 4 * R2_16 / 7, small_overlap_int, R2_16 / 7, 3 * R2_16 / 7, 1 ); + } + } + else if ( left_mode == HALF_OVERLAP ) + { + if ( L == 256 || L == 512 ) + { + copy_win( left_win, R1_25 - 5 * R2_25 / 7, half_overlap_25, 3 * R2_25 / 7, 2 * R2_25 / 7, 1 ); + } + else + { + copy_win( left_win, R1_48 - 5 * R2_48 / 7, half_overlap_48, 3 * R2_48 / 7, 2 * R2_48 / 7, 1 ); + copy_win( left_win_int, R1_16 - 5 * R2_16 / 7, half_overlap_int, 3 * R2_16 / 7, 2 * R2_16 / 7, 1 ); + } + } + else if ( left_mode == ALDO_WINDOW ) + { + /* ALDO */ + if ( L == 256 || L == 512 ) + { + mvr2r( window_256kHz, left_win, R1_25 ); + } + else + { + mvr2r( window_48kHz, left_win, R1_48 ); + mvr2r( window_8_16_32kHz, left_win_int, R1_16 ); + } + } + else + { + assert( !"Window not supported" ); + } + + /* Right part */ + if ( right_mode == MIN_OVERLAP || right_mode == TRANSITION_OVERLAP ) + { + + if ( L == 256 || L == 512 ) + { + copy_win( right_win, 3 * R2_25 / 7, small_overlap_25, R2_25 / 7, 3 * R2_25 / 7, -1 ); + } + else + { + copy_win( right_win, 3 * R2_48 / 7, small_overlap_48, R2_48 / 7, 3 * R2_48 / 7, -1 ); + copy_win( right_win_int, 3 * R2_16 / 7, small_overlap_int, R2_16 / 7, 3 * R2_16 / 7, -1 ); + } + } + else if ( right_mode == HALF_OVERLAP ) + { + + if ( L == 256 || L == 512 ) + { + copy_win( right_win, 2 * R2_25 / 7, half_overlap_25, 3 * R2_25 / 7, 2 * R2_25 / 7, -1 ); + } + else + { + copy_win( right_win, 2 * R2_48 / 7, half_overlap_48, 3 * R2_48 / 7, 2 * R2_48 / 7, -1 ); + copy_win( right_win_int, 2 * R2_16 / 7, half_overlap_int, 3 * R2_16 / 7, 2 * R2_16 / 7, -1 ); + } + } + else if ( right_mode == ALDO_WINDOW ) + { + if ( L == 256 || L == 512 ) + { + mvr2r( window_256kHz + R1_25, right_win, R2_25 ); + } + else + { + mvr2r( window_48kHz + R1_48, right_win, R2_48 ); + mvr2r( window_8_16_32kHz + R1_16, right_win_int, R2_16 ); + } + } + else + { + assert( !"Window not supported" ); + } + + return; +} + + +/*--------------------------------------------------------------------------* + * wtda() + * + * Windowing and time-domain aliasing + *--------------------------------------------------------------------------*/ + +void wtda( + const float *new_audio, /* i : input audio */ + float *wtda_audio, /* o : windowed audio */ + float *old_wtda, /* i/o: windowed audio from previous frame */ + const int16_t left_mode, /* i : window overlap of previous frame (0: full, 2: none, or 3: half) */ + const int16_t right_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const int16_t L /* i : length */ +) +{ + int16_t i, decimate, decay; + int16_t n, windecay48, windecay16; + const float *allsig_l, *allsig_r; + float win_right[R2_48]; + float win_int_left[R1_16]; + float win_left[R1_48]; + float win_int_right[R2_16]; + + tcx_get_windows_mode1( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); + + decimate = 1; /* L_FRAME 48k */ + decay = 0; + windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; + + if ( L == L_FRAME32k || L == L_FRAME16k ) + { + decimate = 3; + decay = 1; + } + else if ( L == L_FRAME8k ) + { + decimate = 6; + decay = 2; + } + + n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + + windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; + + /* algorithmic delay reduction */ + i = 0; + + if ( old_wtda == NULL ) + { + allsig_r = new_audio + n; + allsig_l = new_audio + n - L; +#ifdef DEBUG_PLOT + sendDebout( "tcx_mdct", 2 * L, 1, "mdct_sig", MTV_FLOAT, allsig_l ); +#endif + } + else + { + allsig_r = new_audio + n; + allsig_l = old_wtda + n; + } + + if ( L == L_FRAME32k ) + { + for ( i = 0; i < L / 2 - n; i += 2 ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_int_right[3 * L_FRAME16k / 2 - i / 2 - 1 - windecay16] - allsig_r[L / 2 + i] * win_int_right[3 * L_FRAME16k / 2 + i / 2 - windecay16]; + wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1] * win_right[( 3 * L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay - windecay48] - allsig_r[L / 2 + i + 1] * win_right[( 3 * L_FRAME16k / 2 + 1 + i / 2 ) * decimate - decay - 1 - windecay48]; + } + + for ( i = L / 2 - n; i < L / 2; i += 2 ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1]; + wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1]; + } + for ( i = 0; i < n; i += 2 ) + { + wtda_audio[i + L / 2] = allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - new_audio[n - i - 1]; + wtda_audio[i + L / 2 + 1] = allsig_l[i + 1] * win_int_left[i / 2] - new_audio[n - ( i + 1 ) - 1]; + } + + for ( i = n; i < L / 2; i += 2 ) + { + wtda_audio[i + L / 2] = allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - allsig_l[L - i - 1] * win_left[( L / 2 - i / 2 ) * decimate - 1 - decay]; + wtda_audio[i + L / 2 + 1] = allsig_l[i + 1] * win_int_left[i / 2] - allsig_l[L - ( i + 1 ) - 1] * win_int_left[L / 2 - i / 2 - 1]; + } + } + else + { + for ( i = 0; i < L / 2 - n; i++ ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_right[3 * L / 2 * decimate - ( i + 1 ) * decimate + decay - windecay48] - allsig_r[L / 2 + i] * win_right[3 * L / 2 * decimate - 1 + ( i + 1 ) * decimate - decay - windecay48]; + } + + for ( i = L / 2 - n; i < L / 2; i++ ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1]; + } + + for ( i = 0; i < n; i++ ) + { + wtda_audio[i + L / 2] = allsig_l[i] * win_left[i * decimate + decay] - new_audio[n - i - 1]; + } + + for ( i = n; i < L / 2; i++ ) + { + wtda_audio[i + L / 2] = allsig_l[i] * win_left[i * decimate + decay] - allsig_l[L - i - 1] * win_left[L * decimate - i * decimate - 1 - decay]; + } + } + + if ( old_wtda != NULL ) + { + mvr2r( new_audio, old_wtda, L ); + } + + return; +} + +void wtda_ext( + const float *new_audio, /* i : input audio */ + float *wtda_audio, /* o : windowed audio */ + const int16_t left_mode, /* i : window overlap of previous frame (0: full, 2: none, or 3: half) */ + const int16_t right_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ + const int16_t L, /* i : length */ + const uint16_t kernel_type /* i : transform kernel type (0 - 3) */ +) +{ + const float sign_left = ( kernel_type >= 2 ? -1.f : 1.f ); + const float sign_right = ( kernel_type & 1 ? 1.f : -1.f ); + int16_t i, decimate, decay; + int16_t n, windecay48, windecay16; + const float *allsig_l, *allsig_r; + float win_right[R2_48]; + float win_int_left[R1_16]; + float win_left[R1_48]; + float win_int_right[R2_16]; + + tcx_get_windows_mode1( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); + + decimate = 1; /* L_FRAME 48k */ + decay = 0; + windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; + + if ( L == L_FRAME32k || L == L_FRAME16k ) + { + decimate = 3; + decay = 1; + } + else if ( L == L_FRAME8k ) + { + decimate = 6; + decay = 2; + } + + n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + + windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; + + allsig_r = new_audio + n; + allsig_l = new_audio + n - L; + + if ( L == L_FRAME32k ) + { + for ( i = 0; i < L / 2 - n; i += 2 ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_int_right[3 * L_FRAME16k / 2 - i / 2 - 1 - windecay16] + sign_right * allsig_r[L / 2 + i] * win_int_right[3 * L_FRAME16k / 2 + i / 2 - windecay16]; + wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1] * win_right[( 3 * L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay - windecay48] + sign_right * allsig_r[L / 2 + i + 1] * win_right[( 3 * L_FRAME16k / 2 + 1 + i / 2 ) * decimate - decay - 1 - windecay48]; + } + + for ( i = L / 2 - n; i < L / 2; i += 2 ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1]; + wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1]; + } + for ( i = 0; i < n; i += 2 ) + { + wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - new_audio[n - i - 1]; + wtda_audio[i + L / 2 + 1] = sign_left * allsig_l[i + 1] * win_int_left[i / 2] - new_audio[n - ( i + 1 ) - 1]; + } + + for ( i = n; i < L / 2; i += 2 ) + { + wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - allsig_l[L - i - 1] * win_left[( L / 2 - i / 2 ) * decimate - 1 - decay]; + wtda_audio[i + L / 2 + 1] = sign_left * allsig_l[i + 1] * win_int_left[i / 2] - allsig_l[L - ( i + 1 ) - 1] * win_int_left[L / 2 - i / 2 - 1]; + } + } + else + { + for ( i = 0; i < L / 2 - n; i++ ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_right[3 * L / 2 * decimate - ( i + 1 ) * decimate + decay - windecay48] + sign_right * allsig_r[L / 2 + i] * win_right[3 * L / 2 * decimate - 1 + ( i + 1 ) * decimate - decay - windecay48]; + } + + for ( i = L / 2 - n; i < L / 2; i++ ) + { + wtda_audio[i] = -allsig_r[L / 2 - i - 1]; + } + + for ( i = 0; i < n; i++ ) + { + wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[i * decimate + decay] - new_audio[n - i - 1]; + } + + for ( i = n; i < L / 2; i++ ) + { + wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[i * decimate + decay] - allsig_l[L - i - 1] * win_left[L * decimate - i * decimate - 1 - decay]; + } + } + + return; +} diff --git a/lib_debug/debug.c b/lib_debug/debug.c new file mode 100644 index 0000000000..5ee8f10e31 --- /dev/null +++ b/lib_debug/debug.c @@ -0,0 +1,849 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include +#include +#include "options.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK +#include +#include +#endif +#endif +#endif +#include +#include +#include +#ifdef _WIN32 +#include +#else +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Global variables used for debugging but not under DEBUGGING flag + *--------------------------------------------------------------------*/ + +#ifdef DEBUGGING +uint16_t g_nPrintedLines = 0; + +int16_t g_verbose = 0; /* global variable for debugging */ +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK +char infoFolder[FILENAME_MAX]; +#endif +#endif +#endif + +FILE *DJB_delay = NULL; /* per-frame de-jitter buffer delay dump out file */ + +#ifdef DEBUGGING +int16_t debug_level = 0; +#endif + +/*-------------------------------------------------------------------* + * Read/write I/O tool + *--------------------------------------------------------------------*/ + +#ifdef DEBUGGING +#define N_FILEPTR 500 +#define N_DBGFLAG 100 +#define N_DBGVAL 100 +#define N_TYPES 6 + +static FILE *in_fileptr[N_FILEPTR]; +static FILE *out_fileptr[N_FILEPTR]; + +static char *in_filename[N_FILEPTR]; +static char *out_filename[N_FILEPTR]; + +static int16_t in_count = 0; +static int16_t out_count = 0; + +static int16_t flag_count = 0; +static char *flag_name[N_DBGFLAG]; +static int16_t val_count = 0; +static char *val_name[N_DBGVAL]; +static char *val[N_DBGVAL]; + +static char *type_list[N_TYPES] = { "char", "short", "int", "long", "float", "double" }; + +static void setvalue( + const char *value_name, /* i : Value name */ + const char *value /* i : Value as string */ +); + +static int16_t make_dirs( const char *const pathname ); + +/*-------------------------------------------------------------------* + * dbgwrite() + * + * Writes the buffer content to the specified file. If the file is not in the + * debug file list, it is opened before write. + *--------------------------------------------------------------------*/ + +int16_t dbgwrite( + const void *const buffer, /* i : Write buffer */ + const int16_t size, /* i : Element size */ + const int16_t count, /* i : Number of elements */ + const int16_t repeat, /* i : Number of times the elements are repeated */ +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename /* i : Output file name */ +#else + const char *const filename +#endif +) +{ + int16_t index, i; + void *tmp_buf; + +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + char filename_mod[FILENAME_MAX]; + int16_t textmode = 0; + int16_t x = *(const int16_t *const) buffer; /* currently the textmode is only defined with "short" as input */ + memset( filename_mod, 0, FILENAME_MAX ); + tweakdbgfolder( filename, filename_mod, &textmode ); + if ( filename_mod[0] != 0 ) + { + filename = filename_mod; + } +#endif +#endif + + index = lookup( filename, (const char *const *) out_filename, out_count ); + + if ( index == -1 ) + { + if ( make_dirs( filename ) != 0 ) + { + fprintf( stderr, "dbgwrite: Could not create directory structure for %s. Exiting..\n", filename ); + exit( -1 ); + } + + index = out_count; + out_fileptr[index] = fopen( filename, "wb" ); + out_filename[index] = malloc( sizeof( char ) * ( strlen( filename ) + 1 ) ); + strcpy( out_filename[index], filename ); + out_count++; + } + + if ( out_fileptr[index] != NULL ) + { + tmp_buf = calloc( count * repeat, size ); + if ( buffer != NULL ) + { + for ( i = 0; i < repeat; i++ ) + { + memcpy( (char *) tmp_buf + i * size * count, buffer, size * count ); + } + } +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + if ( 1 == textmode && 2 == size ) + { /* currently the textmode is only defined with "short" as input */ + fprintf( out_fileptr[index], "%d\n", x ); + } + else + { +#endif +#endif + fwrite( tmp_buf, size * count * repeat, 1, out_fileptr[index] ); +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + } +#endif +#endif + free( tmp_buf ); + } + else + { + fprintf( stderr, "dbgwrite: Could not write to file: %s. Exiting..\n", filename ); + exit( -1 ); + } + + return 0; +} + +/*-------------------------------------------------------------------* + * dbgwrite_mat_repeat() + * + * Writes buffer a buffer containing a column-wise ordered matrix + * to the specified file. If the file is not in the + * debug file list, it is opened before write. + *--------------------------------------------------------------------*/ + +void dbgwrite_mat_repeat( float *buffer, /* i : write buffer */ + int16_t nRow, /* i : matrix size (rows) */ + int16_t mCol, /* i : matrix size (columns) */ + int16_t row_repeat, /* i : number of times rows are repeated */ + int16_t col_repeat, /* i : number of times columns are repeated */ +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename /* i : Output file name */ +#else + const char *const filename +#endif +) +{ + float *copy_buffer = calloc( nRow * row_repeat * mCol * col_repeat, sizeof( float ) ); + int16_t r, c, rr, cc; + float *cp = ©_buffer[0]; + float *colp; + for ( c = 0; c < mCol; c++ ) + { + for ( cc = 0; cc < col_repeat; cc++ ) + { + colp = buffer + c * nRow; + for ( r = 0; r < nRow; r++ ) + { + for ( rr = 0; rr < row_repeat; rr++ ) + { + *( cp++ ) = *colp; + } + colp++; + } + } + } + + dbgwrite( copy_buffer, sizeof( float ), nRow * row_repeat * mCol * col_repeat, 1, filename ); + free( copy_buffer ); +} + + +/*-------------------------------------------------------------------* + * dbgappend() + * + * Appends the buffer content to the specified file. If the file is not in the + * debug file list, it is opened before first write. + *--------------------------------------------------------------------*/ + +int16_t dbgappend( + const void *const buffer, /* i : Append buffer */ + const int16_t size, /* i : Element size */ + const int16_t count, /* i : Number of elements */ + const int16_t repeat, /* i : Number of times the elements are repeated */ +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename /* i : Output file name */ +#else + const char *const filename +#endif +) +{ + int16_t index, i; + +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + char filename_mod[FILENAME_MAX]; + int16_t textmode = 0; /* textmode is only implemented in dbgwrite() currently */ + memset( filename_mod, 0, FILENAME_MAX ); + tweakdbgfolder( filename, filename_mod, &textmode ); + if ( filename_mod[0] != 0 ) + { + filename = filename_mod; + } +#endif +#endif + index = lookup( filename, (const char *const *) out_filename, out_count ); + + if ( index == -1 ) + { + if ( make_dirs( filename ) != 0 ) + { + fprintf( stderr, "dbgwrite: Could not create directory structure for %s. Exiting..\n", filename ); + exit( -1 ); + } + + index = out_count; + out_fileptr[index] = fopen( filename, "ab" ); + out_filename[index] = malloc( sizeof( char ) * ( strlen( filename ) + 1 ) ); + strcpy( out_filename[index], filename ); + out_count++; + } + + if ( out_fileptr[index] != NULL ) + { + for ( i = 0; i < repeat; i++ ) + { + fwrite( buffer, size, count, out_fileptr[index] ); + } + } + else + { + fprintf( stderr, "dbgappend: Could not write to file: %s. Exiting..\n", filename ); + exit( -1 ); + } + + return 0; +} + +/*-------------------------------------------------------------------* + * dbgread() + * + * Reads data from the specified file. If the file is not open, it will be + * opened. + *--------------------------------------------------------------------*/ + +int16_t dbgread( + void *const buffer, /* o : Read buffer */ + const int16_t size, /* i : Element size */ + const int16_t count, /* i : Number of elements */ +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename /* i : Input file name */ +#else + const char *const filename +#endif +) +{ + int16_t index; + +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK + char filename_mod[FILENAME_MAX]; + int16_t textmode = 0; /* textmode is only implemented in dbgwrite() currently */ + memset( filename_mod, 0, FILENAME_MAX ); + tweakdbgfolder( filename, filename_mod, &textmode ); + if ( filename_mod[0] != 0 ) + { + filename = filename_mod; + } +#endif +#endif + + index = lookup( filename, (const char *const *) in_filename, in_count ); + + if ( index == -1 ) + { + index = in_count; + in_fileptr[index] = fopen( filename, "rb" ); + in_filename[index] = malloc( sizeof( char ) * ( strlen( filename ) + 1 ) ); + strcpy( in_filename[index], filename ); + in_count++; + } + + if ( in_fileptr[index] != NULL ) + { + fread( buffer, size, count, in_fileptr[index] ); + } + else + { + fprintf( stderr, "dbgread: Could not read from file: %s. Exiting..\n", filename ); + exit( -1 ); + } + + return 0; +} + +/*-------------------------------------------------------------------* + * dbgclose() + * + * Closes opened files and frees allocated memory + *--------------------------------------------------------------------*/ + +void dbgclose() +{ + int16_t i; + + for ( i = 0; i < in_count; i++ ) + { + fclose( in_fileptr[i] ); + free( in_filename[i] ); + } + + for ( i = 0; i < out_count; i++ ) + { + fclose( out_fileptr[i] ); + free( out_filename[i] ); + } + + for ( i = 0; i < snr_count; i++ ) + { + free( snr_name[i] ); + } + + for ( i = 0; i < flag_count; i++ ) + { + free( flag_name[i] ); + } + + for ( i = 0; i < val_count; i++ ) + { + free( val_name[i] ); + free( val[i] ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * dbgflag() + * + * Checks if a debug flag is set. The flag is identified with a string. + *--------------------------------------------------------------------*/ + +int16_t dbgflag( + const char *flagname /* i : Flag name */ +) +{ + int16_t result; + + result = lookup( flagname, (const char *const *) flag_name, flag_count ); + + return ( result != -1 ); +} + +/*-------------------------------------------------------------------* + * setflag() + * + * Sets the flag with the specified string + *--------------------------------------------------------------------*/ + +void setflag( + const char *flagname /* i : Flag name */ +) +{ + int16_t result; + + result = lookup( flagname, (const char *const *) flag_name, flag_count ); + + if ( result == -1 ) + { + flag_name[flag_count] = malloc( sizeof( char ) * ( strlen( flagname ) + 1 ) ); + strcpy( flag_name[flag_count], flagname ); + flag_count++; + } + + return; +} + +/*----------------------------------------------------------------------------* + * dbgargs() + * + * N.B. Should be run before existing command line interpretation + * + * Command line interpreter for debug arguments. Removes the debug + * arguments after interpretation so that existing command line interpretation + * may be run afterwards. + * + * Arguments: + * -D flag_name Sets the debug flag labelled flag_name. + * The function dbgflag("flag_name") will return 1. + * + * -V val_name val Sets the debug value labelled val_name to val. + * dbgvalue("type","val_name",&value) will retrieve the value + * + *-----------------------------------------------------------------------------*/ + +/*! r: No. debug arguments */ +int16_t dbgargs( + int32_t *argc, /* i/o: No. input arguments / No. arguments without dbg arguments */ + char *argv[] /* i/o: Input arguments / Input arguments without dbg arguments */ +) +{ + int16_t i, j, dbgargs; + + i = 0; + dbgargs = 0; + while ( i < *argc ) + { + if ( strcmp( argv[i], "-D" ) == 0 ) + { + j = i; + dbgargs++; + i++; + setflag( argv[i] ); + for ( ; j < *argc - 2; j++ ) + { + argv[j] = argv[j + 2]; + } + *argc -= 2; + i -= 2; + } + + if ( strcmp( argv[i], "-V" ) == 0 ) + { + j = i; + dbgargs++; + i++; + setvalue( argv[i], argv[i + 1] ); + for ( ; j < *argc - 3; j++ ) + { + argv[j] = argv[j + 3]; + } + *argc -= 3; + i -= 3; + } + i++; + } + + return dbgargs; +} + +/*-------------------------------------------------------------------* + * dbgvalue() + * + * Lookup a debug value + * + * Allowed typestr values: + * "char","short","int","long","float","double" + * + * If the value is not set, the output value is not assigned + * + *-------------------------------------------------------------------*/ + +/*! r: Returns 1 if value is assigned, otherwise 0 */ +int16_t dbgvalue( + const char *typestr, /* i : Type as string:"int","char",... */ + const char *value_name, /* i : Value tag name given on command line */ + ... /* o : Output variable, type: pointer to "typestr" */ +) +{ + int16_t index; + char *value; + int16_t assigned; + char *c; + int16_t *sh; + int *i; + int32_t *l; + float *f; + double *d; + va_list ap; + va_start( ap, value_name ); + + index = lookup( value_name, (const char *const *) val_name, val_count ); + + if ( index != -1 ) + { + value = val[index]; + index = lookup( typestr, (const char *const *) type_list, N_TYPES ); + switch ( index ) + { + case 0: + c = va_arg( ap, char * ); + sscanf( value, "%c", c ); + break; + case 1: + sh = va_arg( ap, int16_t * ); + sscanf( value, "%hi", sh ); + break; + case 2: + i = va_arg( ap, int * ); + sscanf( value, "%i", i ); + break; + case 3: + l = va_arg( ap, int32_t * ); + sscanf( value, "%i", l ); + break; + case 4: + f = va_arg( ap, float * ); + sscanf( value, "%f", f ); + break; + case 5: + d = va_arg( ap, double * ); + sscanf( value, "%lf", d ); + break; + default: + fprintf( stderr, "dbgvalue::Unsupported type string %s. Exiting...\n", typestr ); + exit( -1 ); + } + assigned = 1; + } + else + { + assigned = 0; + } + + va_end( ap ); + + return assigned; +} + +/*-------------------------------------------------------------------* + * lookup() + * + * Returns the index of the given string, or -1 if not found + *--------------------------------------------------------------------*/ + +/*! r: Index of string, -1 if not found */ +int16_t lookup( + const char *const str, /* i : String to lookup */ + const char *const *const list, /* i : List of strings */ + const int16_t n_elem /* i : Number of elements */ +) +{ + int16_t i, result; + + result = -1; + i = 0; + while ( i < n_elem && result == -1 ) + { + if ( strcmp( str, list[i] ) == 0 ) + { + result = i; + } + i++; + } + + return result; +} + +/*-------------------------------------------------------------------* + * setvalue() + * + * Sets the debug name value pair + *--------------------------------------------------------------------*/ + +static void setvalue( + const char *value_name, /* i : Value name */ + const char *value ) /* i : Value as string */ + +{ + int16_t result; + + result = lookup( value_name, (const char *const *) val_name, val_count ); + + if ( result == -1 ) + { + val_name[val_count] = malloc( sizeof( char ) * ( strlen( value_name ) + 1 ) ); + strcpy( val_name[val_count], value_name ); + val[val_count] = malloc( sizeof( char ) * ( strlen( value ) + 1 ) ); + strcpy( val[val_count], value ); + val_count++; + fprintf( stdout, "\nDebug value set: %s = %s\n", value_name, value ); + } + else + { + fprintf( stdout, "\n*** Value %s already set: %s\n", value_name, val[result] ); + } + + return; +} + +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK +/*-------------------------------------------------------------------* + * tweakdbgfolder() + * + * in: filename + * out: filename_mod + * + * returns modified path to debug files for reading and writing functions. + * creates in "./res" if given on command line + * with switch -info . + * + *--------------------------------------------------------------------*/ + +int16_t tweakdbgfolder( const char *filename, char *filename_mod, int16_t *textmode ) +{ + int16_t i, j; + char *p_infoFolder = infoFolder; + char *p_filename_mod = filename_mod; + int16_t n_prefix = 0; + char *suffix; + + /* if debug folder name given on command line, write debug info to sub folder */ + if ( infoFolder[0] != 0 ) + { + if ( filename[0] == '.' ) + { + n_prefix = 5; + } + else if ( filename[0] == 'r' ) + { + n_prefix = 3; + } + else + { + fprintf( stderr, "tweakdbgfolder: Unexpected debug folder. Exiting..\n" ); + exit( -1 ); + } + for ( i = 0; i <= n_prefix; i++ ) + { + p_filename_mod[i] = filename[i]; + } + j = i; + while ( *p_infoFolder != 0 ) + { + p_filename_mod[i] = *p_infoFolder; + i++; + p_infoFolder++; + } + p_filename_mod[i] = '/'; + i++; + + while ( filename[j] != 0 ) + { + p_filename_mod[i] = filename[j]; + i++; + j++; + } + /* detect textmode, only working with given debug folder name, otherwise no counter available for length of filename */ + suffix = &p_filename_mod[i - 4]; + if ( strncmp( suffix, ".txt", 4 ) == 0 ) + { + *textmode = 1; + } + else + { + *textmode = 0; + } + } + + + return 0; +} +#endif +#endif + + +#ifdef DEBUG_MODE_INFO +/*-------------------------------------------------------------------* + * fname() + * + * returns file name (string) that identifies - parameter/signal to be outputted + - channel ID (0 or 1) + - element ID (0, 1, etc.) + *--------------------------------------------------------------------*/ + +char debug_dir[6] = "res/"; + +char tmp_fname[FILENAME_MAX]; + +char *fname( + char *dir, + char *file, + const int16_t n, + const int16_t id, + const int16_t enc_dec ) +{ + char idd[5] = ".idX"; + idd[3] = (char) ( id + '0' ); + + strcpy( tmp_fname, dir ); + strcat( tmp_fname, file ); + + if ( enc_dec == DEC ) + strcat( tmp_fname, ".dec" ); + if ( id > 0 ) + strcat( tmp_fname, idd ); + if ( n > 0 ) + strcat( tmp_fname, ".ch2" ); + + return tmp_fname; +} +#endif + + +/*-------------------------------------------------------------------* + * make_dirs() + * + * extract path(s) form the pathname and create them if not existing + *--------------------------------------------------------------------*/ + +int16_t make_dirs( const char *const pathname ) +{ + const char *p; + char *temp; + char sep = 0; +#ifdef _WIN32 + struct _stat s = { 0 }; +#else + struct stat s = { 0 }; +#endif + /* find path separator */ + if ( strchr( pathname, '\\' ) != NULL ) + { + sep = '\\'; + } + else if ( strchr( pathname, '/' ) != NULL ) + { + sep = '/'; + } + + if ( sep != 0 ) + { + temp = calloc( 1, strlen( pathname ) + 1 ); + p = pathname; + while ( ( p = strchr( p, sep ) ) != NULL ) + { + /* skip consecutive separators and '.', '..' symbols */ + if ( p != pathname && ( *( p - 1 ) == sep || *( p - 1 ) == '.' ) ) + { + p++; + continue; + } + + /* put the path up to this point into a temp dir */ + memcpy( temp, pathname, p - pathname ); + temp[p - pathname] = '\0'; + p++; + + /* check if path exists and create it with mkdir() if not */ +#ifdef _WIN32 + if ( _stat( temp, &s ) == -1 ) + { + if ( _mkdir( temp ) != 0 ) + { + if ( errno != 0 ) + { + return 1; + } + } + } +#else + if ( stat( temp, &s ) == -1 ) + { + if ( mkdir( temp, 0755 ) != 0 ) + { + if ( errno != 0 ) + { + return 1; + } + } + } +#endif + } + + free( temp ); + } + + return 0; +} + +#endif /* DEBUGGING */ diff --git a/lib_debug/debug.h b/lib_debug/debug.h new file mode 100644 index 0000000000..9b38b16b66 --- /dev/null +++ b/lib_debug/debug.h @@ -0,0 +1,239 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef DEBUG_H +#define DEBUG_H + +#include "options.h" +#include +#include + +/*------------------------------------------------------------------------------------------* + * Global variables used for debugging + *------------------------------------------------------------------------------------------*/ + +extern int32_t frame; + +#ifdef DEBUGGING +extern uint16_t g_nPrintedLines; +extern int16_t g_verbose; +#endif + +#ifdef DEBUGGING +extern int16_t debug_level; +#define DEBUG_LINE( level ) if ( ( level ) <= debug_level ) +#else +#define DEBUG_LINE( level ) if ( 0 ) +#endif + +#ifdef DEBUG_MODE_INFO +extern char tmp_fname[]; +extern char debug_dir[6]; +char *fname( char *dir, char *file, const int16_t n, const int16_t id, const int16_t enc_dec ); +#endif + +/*------------------------------------------------------------------------------------------* + * Read/write I/O tool + *------------------------------------------------------------------------------------------*/ + +#ifdef DEBUGGING + +int16_t lookup( + const char *const str, + const char *const *const list, + const int16_t n_elem ); + +#ifdef DEBUG_MODE_INFO +#ifdef DEBUG_MODE_INFO_TWEAK +int16_t tweakdbgfolder( + const char *filename, + char *filename_mod, + int16_t *textmode ); +#endif +#endif + +int16_t dbgwrite( + const void *const buffer, + const int16_t size, + const int16_t count, + const int16_t repeat, +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename +#else + const char *const filename +#endif +); + +void dbgwrite_mat_repeat( + float *buffer, /* i : write buffer */ + int16_t nRow, /* i : matrix size (rows) */ + int16_t mCol, /* i : matrix size (columns) */ + int16_t row_repeat, /* i : number of times rows are repeated */ + int16_t col_repeat, /* i : number of times columns are repeated */ +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename /* i : Output file name */ +#else + const char *const filename +#endif +); + +int16_t dbgappend( + const void *const buffer, + const int16_t size, + const int16_t count, + const int16_t repeat, +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename +#else + const char *const filename +#endif +); + +int16_t dbgread( + void *const buffer, + const int16_t size, + const int16_t count, +#ifdef DEBUG_MODE_INFO_TWEAK + const char *filename +#else + const char *const filename +#endif +); + +void dbgclose( void ); + +int16_t dbgflag( + const char *flagname ); + +void setflag( + const char *flagname ); + +int16_t dbgargs( + int32_t *argc, + char *argv[] ); + +int16_t dbgvalue( + const char *typestr, + const char *value_name, + ... ); + +extern FILE *DJB_delay; + +extern FILE *FEC_pattern; + +#endif /* DEBUGGING */ + +/*------------------------------------------------------------------------------------------* + * SNR measurement tool + *------------------------------------------------------------------------------------------*/ + +#ifdef DEBUGGING + +extern int16_t snr_count; +extern char *snr_name[]; + +void snr( + const float *const signal, + const float *const noise, + const int16_t length, + const char *const name ); + +void snr_diff( + const float *const clean, + const float *const degraded, + const int16_t length, + const int16_t delay, + const char *const name ); + +void snr_celp( + const int16_t L_frame, + const int16_t L_subfr, + const float gamma, + const float tilt_fac, + const int16_t vad_flag, + const int16_t coder_type, + const float *input, + const float *output, + const float *A, + const int16_t idchan, + const char *name ); + +void print_snr( void ); + +#else + +#define print_snr( void ) + +#endif + +/*------------------------------------------------------------------------------------------* + * SD analysis tool + *------------------------------------------------------------------------------------------*/ + +#ifdef DEBUGGING + +/*! r: SD in a given frequency range */ +float sd_range( + const float lsf[], /* i : vector of unquantized LSF values */ + const float lsf_q[], /* i : vector of quantized LSF values */ + const int16_t order, /* i : dimension of the vectors */ + const int32_t fs, /* i : sampling frequency */ + const float min_freq, /* i : minimum frequency of interest */ + const float max_freq, /* i : maximum frequency of interest */ + const char *const name, /* i : string for SD entry in the global table */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +); + +/*! r: SD respecting critical bands */ +float sd_crit( + const float lsf[], /* i : vector of unquantized LSF values */ + const float lsf_q[], /* i : vector of quantized LSF values */ + const int16_t order, /* i : dimension of the vectors */ + const int32_t fs, /* i : sampling frequency */ + const float min_freq, /* i : minimal frequency */ + const float max_freq, /* i : maximal frequency */ + int16_t *min_band, /* o : minimal critical band */ + int16_t *max_band, /* o : maximal critical band */ + float sd_bands[], /* i/o: SD in critical bands */ + const char *const name, /* i : string for SD entry in the global table */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +); + +void print_sd( void ); + +#else + +#define print_sd( void ) + +#endif + +#endif /* DEBUG_H */ diff --git a/lib_debug/mem_count.c b/lib_debug/mem_count.c new file mode 100644 index 0000000000..b12639ae3f --- /dev/null +++ b/lib_debug/mem_count.c @@ -0,0 +1,906 @@ +/* + * Memory Counting Tool + * + * Copyright 2022 VoiceAge Corporation. All Rights Reserved. + * + * This software is protected by copyright law and by international treaties. + * VoiceAge Corporation retains full ownership rights in their respective contributions in the software. + * No license of any kind, including but not limited to patent license, of any foregoing parties is + * hereby granted by implication, estoppel or otherwise. + * + * This software is provided "AS IS", without any express or implied warranties. The software is in the + * development stage. It is intended exclusively for experts who have experience with such software and + * solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + * and/or fitness for a particular purpose are hereby disclaimed and excluded. + * + * Written by : Guy J. Richard - August 2017 + * + */ + +#include +#include "options.h" +#include "mem_count.h" + +#include /* for printf, ... */ +#include /* for stricmp, ... */ +#include /* for alloc, NULL, ... */ +#include /* for tolower */ + +/* Mostly to get a 'int32_t' */ +#if !defined( _MSC_VER ) || _MSC_VER >= 1600 +#include +#else +#include +#endif + +#ifdef RAM_COUNTING_TOOL + +#if defined( _MSC_VER ) && _MSC_VER < 1600 +typedef UINT32 uint32_t; +typedef INT32 int32_t; +typedef UINT64 uint64_t; +typedef INT64 int64_t; +#endif + +#ifndef TRUE +#define TRUE ( 0 == 0 ) +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +/* How to use the tool notes + ========================= + + The tool measure SRAM memory allocated by malloc(), calloc() and + deallocated by free(). + + In order to run the tool, one needs to: + 1) Prepend 'count_' to all calls to 'malloc', 'calloc' and 'free' except debug files. + 2) Add the following code into e.g. prot.h, so that all files with calls to these functions see it. + #ifdef RAM_COUNTING_TOOL + #define count_malloc(n1) MALLOC_FCT_CALL(n1) + #define count_calloc(n1,n2) CALLOC_FCT_CALL(n1, n2) + #define count_free(ptr) FREE_FCT_CALL(ptr) + #else + #define count_malloc(n1) malloc(n1) + #define count_calloc(n1,n2) calloc(n1, n2) + #define count_free(ptr) free(ptr) + #endif + 3) Call mem_count_init() at the beginning of encoding/decoding + - The first param allows to set a limit on the RAM that can be allocated. + While the codec is running, if memory is requested such that the maximum + is passed (Mem Alloc > Limit), the codec will stop and the summary will + be printed. + - The second param allows to decide the units (bytes, shorts or longs). + Please note that the unit specified is combined with the limit param to + produce the total size that can be allocated. Ex ..init(1000, USE_16BITS); + will set the limit to 1000 x 16 Bits Word (2000 bytes in total). + 4) Call mem_count_summary() at the end of encoding/decoding to print-out the results. + - The first parameter allows to overwrite the initial units configuration. + The Total size allocated (always in bytes internally) will be converted + to the unit selected before being reported. + + The switch 'RAM_COUNTING_TOOL' also has to be defined to enable memory counting. + + There is a define 'MEM_COUNT_DETAILS' in options.h that enables printing per + sub-structure details when DEBUGGING is activated. +*/ + +/*-------------------------------------------------------------------* + * LOCAL CONSTANTS + *-------------------------------------------------------------------*/ + +/* This is the maximum number of allocations for which to keep information. + It can be increased if required. */ +#define MAX_INFO_RECORDS 3000 + +/* This is the length after which the function name + will be truncated when the summary is printed. */ +#define MAX_FUNCTION_NAME_LENGTH 18 + +/* This is the length after which the parameter to + the allocating function will be truncated when + the summary is printed. */ +#define MAX_PARAMS_LENGTH 36 + +/* This is the value (in bytes) towards which the block size + is rounded. For example, a block of 123 bytes, when using + a 32 bits system, will end up taking 124 bytes since + the last unused byte cannot be used for another block. */ +#ifdef MEM_ALIGN_64BITS +#define BLOCK_ROUNDING 8 +#else /* Align on 32 Bits Instead */ +#define BLOCK_ROUNDING 4 +#endif + +#define N_32BITS_BLOCKS ( BLOCK_ROUNDING / sizeof( int32_t ) ) + +/* Special Value to See if Memory was ever written */ +#define MAGIC_VALUE_OOB 0x12A534F0 /* Put Before & After Buffer */ +#define MAGIC_VALUE_USED ( ~MAGIC_VALUE_OOB ) /* To Detect if Memory was Written */ +/* OOB Flags */ +#define OOB_START 0x1 +#define OOB_END 0x2 + +/*-------------------------------------------------------------------* + * LOCAL MACROS + *-------------------------------------------------------------------*/ + +#define ROUND_BLOCK_SIZE( n ) ( ( ( n ) + BLOCK_ROUNDING - 1 ) & ~( BLOCK_ROUNDING - 1 ) ) +#define IS_CALLOC( str ) ( ( size_str[0] ) == 'c' ) + +#define WARNING( msg ) \ + do \ + { \ + printf( "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, msg ); \ + } while ( 0 ) +#define ERROR( msg ) \ + do \ + { \ + WARNING( msg ); \ + exit( -1 ); \ + } while ( 0 ) + +/*-------------------------------------------------------------------* + * LOCAL TYPES + *-------------------------------------------------------------------*/ + +typedef struct +{ + void *block_ptr; + size_t block_size; + int lineno; + char name[MAX_FUNCTION_NAME_LENGTH + 1]; /* +1 for NUL */ + char params[1 + MAX_PARAMS_LENGTH + 1]; /* +1 for 'm'/'c' alloc & +1 for NUL */ + int used; + int OOB_Flag; + int seq_no; /* To Help Sorting by Order of Creation when all else is identical */ + int noccurances; +} allocator_record; + +typedef allocator_record allocation_list[MAX_INFO_RECORDS]; + +/*-------------------------------------------------------------------* + * LOCAL DATA + *-------------------------------------------------------------------*/ + +static allocation_list Current_Allocations, Peak_Allocations, Freed_Allocations; +static size_t RAM_Limit = NO_RAM_LIMIT; /* Always in Bytes */ +static size_t Current_RAM = 0, Peak_RAM = 0; /* In Bytes */ +static unsigned int Num_Records_Cur_RAM = 0, Num_Records_Peak_RAM = 0, Num_Records_Freed_RAM = 0; +static int Seq_No = 0; + +static size_t Stat_Cnt_Size = USE_BYTES; + +#ifndef DISABLE_NULL_PTR_FREE_WARNING +static allocation_list Missing_Allocations; +static unsigned int Num_Records_Missing_Alloc_Warnings = 0; +#endif + +/*-------------------------------------------------------------------* + * LOCAL CONST DATA + *-------------------------------------------------------------------*/ + +/* Suffix after numeral value printed in the summary */ +/* One char for each size */ +static const char Count_suffix[] = "BsL"; /* Using 's' because 'S' + looks a lot like '5'. */ +/* */ +static const char *Count_Name[] = { "Bytes", "Shorts", "Longs" }; + +/*-------------------------------------------------------------------* + * GLOBAL FUNCTIONS + *-------------------------------------------------------------------*/ + +/* It is not necessary to call dyn_mem_stats_init() since all static + variables are pre-initialised. It can be used to run stats again. */ +void mem_count_init( size_t limit, Counting_Size cnt_size ) +{ + if ( cnt_size != USE_DEFAULT ) + Stat_Cnt_Size = cnt_size; + Current_RAM = Peak_RAM = 0; + RAM_Limit = limit << Stat_Cnt_Size; + Num_Records_Cur_RAM = Num_Records_Peak_RAM = Num_Records_Freed_RAM = 0; +#ifndef DISABLE_NULL_PTR_FREE_WARNING + Num_Records_Missing_Alloc_Warnings = 0; +#endif + Seq_No = 0; +} + +/* This Function basically uses 'malloc' to allocate memory but also + records information about which functions allocated memory, the peak, ... + When, dyn_mem_print_stats() is called, all this info is printed as + well as the memory that has not been de-allocated; it is useful to + find memory leaks. */ +void *mem_alloc( + const char *func_name, + int func_lineno, + size_t size, + char *size_str /* the first char indicates m-alloc or c-alloc */ ) +{ + size_t rounded_size; + void *block_ptr; + char *tmp_ptr; + allocator_record *record_ptr; + size_t n, f; + int32_t fill_value; + int32_t *ptr32; + int32_t mask, temp; + unsigned int check; + + /* Do not Support Empty Requests */ + if ( size == 0 ) + { + ERROR( "Size of Zero not Supported" ); + } + + if ( Num_Records_Cur_RAM == MAX_INFO_RECORDS ) + { + ERROR( "Too Many Allocs. Increase 'MAX_INFO_RECORDS'" ); + } + + /* Round Up Block Size */ + rounded_size = ROUND_BLOCK_SIZE( size ); + + /* Allocate using the standard mem allocator. + Allocate a bit More to Have Room for Signature Values */ + block_ptr = malloc( rounded_size + BLOCK_ROUNDING * 2 ); + + /* the split line is to prevent a 'search/replace' adding a '_' to the name */ + /* We request more memory to have room to put signatures at the start + and end of the allocated buffer to check for OOBounds accesses. */ + /* Stop if it Failed */ + if ( block_ptr == NULL ) + { + ERROR( "Out of System RAM" ); + } + + /* Cannot use #if sizeof(int32_t) to catch this at compile time + because the preprocessor doesn't know anything about types + or sizes. */ + check = sizeof( int32_t ); + if ( check != 4 ) + { + ERROR( "Expecting 'int32_t' to be a 32 Bits Integer" ); + } + + /* Set Signatures and Fill (or Clear) Memory */ + ptr32 = (int32_t *) block_ptr; + /* Signature at Start of Block */ + n = N_32BITS_BLOCKS; + do + { + *ptr32++ = MAGIC_VALUE_OOB; + } while ( --n ); + /* Fill with Pattern or Clear Memory */ + fill_value = MAGIC_VALUE_USED; + if ( IS_CALLOC( size_str ) ) + { + fill_value = 0x00000000; + } + n = size / sizeof( int32_t ); + while ( n-- ) + { + *ptr32++ = fill_value; + } + n = rounded_size - size; + /* When Initializing with '0' */ + /* Need to Adapt the Magic Value */ + f = n % sizeof( int32_t ); + if ( f != 0 ) + { + /* For f=, shift by [1->24, 2->16, 3->8] */ + mask = 0xFFFFFFFF << ( ( sizeof( int32_t ) - f ) * 8 ); /* (1) */ + temp = MAGIC_VALUE_OOB & mask; + if ( fill_value != 0x0 ) + { /* Using M-Alloc */ + /* Merge Fill Value */ + temp += ( ~mask ) & MAGIC_VALUE_USED; + } /* for C-Alloc, the code in (1) hereabove already introduces zeros */ + *ptr32++ = temp; + } + n /= sizeof( int32_t ); + n += N_32BITS_BLOCKS; + /* Signature at End of Block */ + do + { + *ptr32++ = MAGIC_VALUE_OOB; + } while ( --n ); + + /* Adjust Pointer (Magic Value Before and After the Memory Region Requested) */ + tmp_ptr = (char *) block_ptr; + tmp_ptr += BLOCK_ROUNDING; + block_ptr = (void *) tmp_ptr; + + /* Save Information about Function Requesting the RAM */ + record_ptr = &Current_Allocations[Num_Records_Cur_RAM]; + + /* Save Name (and NUL Terminate it) */ + strncpy( record_ptr->name, func_name, MAX_FUNCTION_NAME_LENGTH ); + record_ptr->name[MAX_FUNCTION_NAME_LENGTH] = '\0'; + /* Save Params (and NUL Terminate it) + There string starts with a Marker (either 'm' or 'c') + that indicates the type of allocation requested. */ + strncpy( record_ptr->params, size_str, MAX_PARAMS_LENGTH ); + record_ptr->params[MAX_PARAMS_LENGTH] = '\0'; + /* Save Other Info */ + record_ptr->lineno = func_lineno; + record_ptr->block_ptr = block_ptr; + record_ptr->block_size = size; + record_ptr->used = -1; /* By default do not check mem usage */ + record_ptr->seq_no = ++Seq_No; + record_ptr->noccurances = 1; + + /* Increase # of Records */ + Num_Records_Cur_RAM++; + /* Update Amount of RAM Allocated */ + Current_RAM += rounded_size; + + /* Is this the Worst Case */ + if ( Peak_RAM < Current_RAM ) + { /* Yes */ + /* Update the Peak RAM */ + Peak_RAM = Current_RAM; + /* Keep the Information */ + memmove( Peak_Allocations, Current_Allocations, sizeof( allocator_record ) * Num_Records_Cur_RAM ); + Num_Records_Peak_RAM = Num_Records_Cur_RAM; + } + + /* Limit Busted? */ + if ( RAM_Limit != NO_RAM_LIMIT ) + { + if ( Current_RAM > RAM_Limit ) + { + char info_msg[100]; + + mem_count_summary( USE_DEFAULT ); + + sprintf( info_msg, "Alloc Limit of %lu %s was Passed", (unsigned long) RAM_Limit >> Stat_Cnt_Size, Count_Name[Stat_Cnt_Size] ); + ERROR( info_msg ); + } + } + + return block_ptr; +} + +/* Calculate Memory Usage of Block (Look for Signature) */ +static void mem_set_usage( allocator_record *record_ptr ) +{ + int total_bytes_used; + + size_t n; + int32_t *ptr32; + char *ptr8; + size_t total_bytes; + int32_t fill_value; + + fill_value = MAGIC_VALUE_USED; + if ( ( record_ptr->params[0] ) == 'c' ) + { + fill_value = 0x00000000; + } + + total_bytes = record_ptr->block_size; + + /* Check 4 bytes at a time */ + ptr32 = (int32_t *) record_ptr->block_ptr; + total_bytes_used = 0; + for ( n = total_bytes / sizeof( int32_t ); n > 0; n-- ) + { + if ( *ptr32++ != fill_value ) + total_bytes_used += sizeof( int32_t ); + } + + /* Check Remaining Bytes (If Applicable) */ + ptr8 = (char *) ptr32; + for ( n = total_bytes % sizeof( int32_t ); n > 0; n-- ) + { + if ( *ptr8++ != (char) fill_value ) + total_bytes_used++; + /* Update Value */ + fill_value >>= 8; + } + + /* Save Space Used */ + record_ptr->used = total_bytes_used; +} + +static void mem_check_OOB( allocator_record *record_ptr ) +{ + int32_t *ptr32; + unsigned int OOB_Flag = 0x0; + int32_t mask; + size_t i; + int f; + + ptr32 = (int32_t *) record_ptr->block_ptr - N_32BITS_BLOCKS; + /* Check at Beginning of Block */ + i = N_32BITS_BLOCKS; + do + { + if ( *ptr32++ ^ MAGIC_VALUE_OOB ) + OOB_Flag |= OOB_START; + } while ( --i ); + + /* Advance to End (Snap to lowest 32 Bits) */ + ptr32 += record_ptr->block_size / sizeof( int32_t ); + + /* Calculate Unused Space That has been + added to get to the rounded Block Size */ + i = ROUND_BLOCK_SIZE( record_ptr->block_size ) - record_ptr->block_size; + + /* Partial Check (For Block Size that have been rounded) */ + f = i % sizeof( int32_t ); + if ( f != 0 ) + { + mask = 0xFFFFFFFF << ( ( sizeof( int32_t ) - f ) * 8 ); + if ( ( *ptr32++ ^ MAGIC_VALUE_OOB ) & mask ) + OOB_Flag |= OOB_END; + } + + /* Full Check (all 32 Bits) for Remaining */ + i /= sizeof( int32_t ); + i += N_32BITS_BLOCKS; + do + { + if ( *ptr32++ ^ MAGIC_VALUE_OOB ) + OOB_Flag |= OOB_END; + } while ( --i ); + + record_ptr->OOB_Flag = OOB_Flag; +} + +/* Just to make the code cleaner */ +static int is_same_record( const allocator_record *record_ptr1, allocator_record *record_ptr2 ) +{ + return record_ptr2->block_size == record_ptr1->block_size && + record_ptr2->lineno == record_ptr1->lineno && + strcmp( record_ptr2->name, record_ptr1->name ) == 0 && + strcmp( record_ptr2->params, record_ptr1->params ) == 0 && + record_ptr2->OOB_Flag == record_ptr1->OOB_Flag + ? 1 + : 0; +} + +/* This Function basically uses 'free' and removes the + Information about the memory block from the list of + currently allocated Memory */ +void mem_free( const char *func_name, int func_lineno, void *ptr ) +{ + unsigned int i, j, k; + char *tmp_ptr; + allocator_record *record_ptr, *record_ptr2; + + char info_msg[100]; + + /* Search for the Block Pointer in the List */ + record_ptr = &Current_Allocations[0]; + for ( i = 0; i < Num_Records_Cur_RAM; i++ ) + { + /* Same Pointer? */ + if ( ptr == record_ptr->block_ptr ) + { /* Yes, Found it */ + if ( Num_Records_Freed_RAM == MAX_INFO_RECORDS ) + { + ERROR( "Too Many Allocs. Increase 'MAX_INFO_RECORDS'" ); + } + + for ( j = 0; j < Num_Records_Peak_RAM; j++ ) + { + /* Is this Block Part of the Peak RAM? */ + if ( memcmp( record_ptr, &Peak_Allocations[j], sizeof( *record_ptr ) ) == 0 ) + { + break; /* Stop the 'j' loop */ + } + } + + mem_set_usage( record_ptr ); + mem_check_OOB( record_ptr ); + + /* De-Allocated Block was Part of Peak RAM? */ + if ( j == Num_Records_Peak_RAM ) + { /* No */ + /* Here, in order to avoid filling this list with repetitive blocks */ + /* that are allocated and deallocated repeatedly, we look for a block */ + /* that has the same module, line #, size & same OOB characteristics. */ + /* We then just increase the # of occurances of this block definition. */ + /* The % used will be merged */ + record_ptr2 = &Freed_Allocations[0]; + for ( k = 0; k < Num_Records_Freed_RAM; k++ ) + { + /* Same Block but allocated many times */ + if ( is_same_record( record_ptr2, record_ptr ) ) + { + record_ptr2->noccurances++; + record_ptr2->used += record_ptr->used; + break; + } + record_ptr2++; + } + /* Found it */ + } + else + { + /* Force Add to List */ + k = Num_Records_Freed_RAM; + } + + if ( k == Num_Records_Freed_RAM ) + { /* No */ + /* Add to List */ + memmove( &Freed_Allocations[Num_Records_Freed_RAM], record_ptr, sizeof( allocator_record ) ); + /* Increase # of Records for Deallocated Block List */ + Num_Records_Freed_RAM++; + } + + /* De-Allocated Block was Part of Peak RAM? */ + if ( j != Num_Records_Peak_RAM ) + { /* Yes */ + /* Update Block Info There too (The Info here is Bytes Used and OOB Flags) */ + memmove( &Peak_Allocations[j], record_ptr, sizeof( *record_ptr ) ); + } + + /* First Adjust Pointer to Get to the Start of the Block */ + tmp_ptr = (char *) ptr; + tmp_ptr -= BLOCK_ROUNDING; + ptr = (void *) tmp_ptr; + /* De-allocate using the standard memory facilities */ + fr\ +ee( ptr ); /* the split line is to prevent a 'search/replace' adding a '_' to the name */ + + /* Decrease # of Records */ + Num_Records_Cur_RAM--; + /* Update (decrease) Amount of RAM Allocated */ + Current_RAM -= ROUND_BLOCK_SIZE( record_ptr->block_size ); + + /* Erase the entry (Move the Last One over it) */ + memmove( record_ptr, &Current_Allocations[Num_Records_Cur_RAM], sizeof( allocator_record ) ); + + return; + } + record_ptr++; + } + + /* Not Found, Problem! */ + if ( ptr != NULL ) + { + /* Stop */ + sprintf( info_msg, "Invalid Pointer: '%p'", ptr ); + ERROR( info_msg ); + } +#ifndef DISABLE_NULL_PTR_FREE_WARNING + else + { /* Warn about Freeing of NULL Pointers */ + /* Search to Warn Only Once. */ + record_ptr = &Missing_Allocations[0]; + for ( i = 0; i < Num_Records_Missing_Alloc_Warnings; i++ ) + { + /* Same Name? */ + if ( strncmp( record_ptr->name, func_name, MAX_FUNCTION_NAME_LENGTH ) == 0 ) + { /* Yes */ + /* Same Line Number? */ + if ( record_ptr->lineno == func_lineno ) + { /* Yes */ + /* No Need to Warn Again */ + return; + } + } + record_ptr++; + } + /* Save Name */ + strncpy( record_ptr->name, func_name, MAX_FUNCTION_NAME_LENGTH ); + record_ptr->name[MAX_FUNCTION_NAME_LENGTH] = '\0'; + + /* Save Line No */ + record_ptr->lineno = func_lineno; + /* Save Pointer */ + record_ptr->block_ptr = ptr; + /* Save Size */ + record_ptr->block_size = 0; /* It is an Unknown Block, so there is no size, we put a '0' */ + + Num_Records_Missing_Alloc_Warnings++; + + WARNING( "Trying to Free 'NULL' Pointer" ); + } +#endif +} + +#ifdef MEM_COUNT_DETAILS +/* Used to Sort Block Information Records */ +static int compare_mem_records( const void *ptr1, const void *ptr2 ) +{ + const allocator_record *record_ptr1 = (const allocator_record *) ptr1, + *record_ptr2 = (const allocator_record *) ptr2; + int result; + + /* Sort First by 'Name', then by 'Line No' and finaly by 'Block Size' */ + + /* Compare Function Name */ + result = strcmp( record_ptr1->name, record_ptr2->name ); + /* Same Function Name? */ + if ( result == 0 ) + { /* Yes */ + /* Compare Line Number */ + result = record_ptr1->lineno - record_ptr2->lineno; + /* Same Line Number */ + if ( result == 0 ) + { /* Yes */ + /* Compare Block Size */ + result = record_ptr1->block_size - record_ptr2->block_size; + /* Same Size? */ + if ( result == 0 ) + { + result = record_ptr1->seq_no - record_ptr2->seq_no; + } + } + } + + return result; +} + +static void mem_print_records( allocator_record *record_ptr, int num_records, Counting_Size cnt_size, int print_size ) +{ + int i, sum, total; + char *last_name = NULL; + int single_flag; + char chr = Count_suffix[cnt_size]; + size_t nwords, rounded_block_size; + char nblocks_str[22]; + char quantity_str[22]; + char format_str[50]; + char *tmp_ptr; + int nblocks; + + char *OOB_str[] = { "- ", "beg", "end", "b+e" }; + + strcpy( format_str, "\n %-*s %5i %-*s %3s %3.0f%% %8s" ); + if ( print_size != FALSE ) + strcat( format_str, " %6u" ); + + /* Sort it */ + qsort( record_ptr, num_records, sizeof( allocator_record ), compare_mem_records ); + + single_flag = 0; + + nblocks = 0; + + if ( num_records > 0 ) + { + /* Print Header */ + printf( " %-*s Ln No %-*s OOB Used Quantity%s", MAX_FUNCTION_NAME_LENGTH, "Function Name", MAX_PARAMS_LENGTH, "Parameters ('m' or 'c' alloc)", print_size != FALSE ? " Size" : "" ); + + total = sum = 0; + for ( i = num_records - 1; i >= 0; i-- ) + { + if ( sum == 0 ) + { + last_name = record_ptr->name; + } + + rounded_block_size = ROUND_BLOCK_SIZE( record_ptr->block_size ) >> cnt_size; + nwords = rounded_block_size * record_ptr->noccurances; + + /* Calc Usage (It has already been done for a De-Allocated Block + That was part of the Peak Mem. But not for a Block that is + still allocated (never freed). */ + if ( record_ptr->used < 0 ) + { + mem_set_usage( record_ptr ); + /* Check Out of Bounds Too */ + mem_check_OOB( record_ptr ); + } + + sprintf( quantity_str, "%i", record_ptr->noccurances ); + + /* Print Quantity x Size */ + tmp_ptr = strchr( quantity_str, '\0' ); + *tmp_ptr++ = 'x'; + sprintf( tmp_ptr, "%i", (int) rounded_block_size ); + + printf( format_str, MAX_FUNCTION_NAME_LENGTH, record_ptr->name, record_ptr->lineno, MAX_PARAMS_LENGTH, record_ptr->params, OOB_str[record_ptr->OOB_Flag], ( record_ptr->used * 100.0f / record_ptr->block_size / record_ptr->noccurances ), quantity_str, (uint32_t) nwords ); + /* Count $ of Blocks */ + nblocks += record_ptr->noccurances; + /* Add Size */ + sum += nwords; + /* Advance */ + record_ptr++; + + if ( print_size != FALSE ) + { + /* End Reached or New Function? */ + if ( i == 0 || strcmp( last_name, record_ptr->name ) != 0 ) + { + /* Cumulate Total */ + total += sum; + + if ( i == 0 && total == sum ) + single_flag = 1; +#ifdef MEM_COUNT_TOTAL_PER_FUNC + /* Print 'Total' on the Line if there is only one Function + that allocated all the RAM */ + printf( " %7i%c", sum, chr ); +#endif + /* Reset Sum */ + sum = 0; + } + } + } + /* Print the Total */ + if ( !single_flag && print_size != FALSE ) + { +#ifdef MEM_COUNT_TOTAL_PER_FUNC +#define SPACES 9 +#else +#define SPACES 0 +#endif + + sprintf( nblocks_str, "%i Blocks", nblocks ); + + printf( "\n %*s %*s %*s --------\n", MAX_FUNCTION_NAME_LENGTH, "", MAX_PARAMS_LENGTH, "", SPACES, "" ); + printf( " %-*s %-*s %*s%7i%c\n", MAX_FUNCTION_NAME_LENGTH, "Total", MAX_PARAMS_LENGTH, nblocks_str, SPACES, "", total, chr ); + } + else + printf( "\n" ); + } + else + { + printf( " \n" ); + } +} +#endif + +/* Print Memory Summary. + Return Peak Memory Used (according to Units Specified) */ +size_t mem_count_summary( Counting_Size cnt_size ) +{ + size_t size; +#ifdef MEM_COUNT_DETAILS + unsigned int i, j; + size_t num; + allocation_list Allocations; +#endif + if ( cnt_size == USE_DEFAULT ) + cnt_size = Stat_Cnt_Size; + + size = Peak_RAM >> cnt_size; +#ifdef MEM_COUNT_DETAILS + printf( "\n\n====== STATIC RAM COUNTING TOOL: MEMORY SUMMARY ======\n\n" ); + + printf( " NOTES\n" + " 1) %c = %s, %c = %s (16 Bits Words) & %c = %s (32 Bits Words).\n" + " 2) The '%%' of 'Used' memory is not very reliable for c-alloc.\n" + " 3) The Out Of Bounds (OOB) Checking is primitive as it checks\n" + " only for writing before and past the buffer when it is freed\n" + " or when the summary is printed.\n" + " 4) Quantity Filed format is N x Block Size.\n" + " When it is 1: Size = Block Size\n" + " Otherwise, Size = The Total Size Allocated for the 'N' Blocks.\n" + "\n", + Count_suffix[USE_BYTES], Count_Name[USE_BYTES], Count_suffix[USE_16BITS], Count_Name[USE_16BITS], Count_suffix[USE_32BITS], Count_Name[USE_32BITS] ); + + /* Create a Temporary List of Block to Print */ + /* from all the Block Allocated in the Peak */ + /* Scenario. We want to Merge Entries allocated */ + /* from the exact same code location and having */ + /* the same block size. In order to simplifiy the */ + /* printout. */ + num = 0; + for ( i = 0; i < Num_Records_Peak_RAM; i++ ) + { + /* Check if an Identical Block Before Adding to List */ + for ( j = 0; j < num; j++ ) + { + if ( is_same_record( &Peak_Allocations[i], &Allocations[j] ) ) + { + Allocations[j].noccurances++; + Allocations[j].used += Peak_Allocations[i].used; + break; + } + } + + /* Unique Block? */ + if ( j == num ) + { /* Yes */ + /* Add to List */ + memmove( &Allocations[num++], &Peak_Allocations[i], sizeof( allocator_record ) ); + } + } + /* Print the Peak Allocated */ + printf( " Peak Memory Allocated\n" ); + mem_print_records( &Allocations[0], num, cnt_size, TRUE ); + printf( "\n" ); + + /* Create a Temporary List of Block to Print */ + /* from all the Block Allocated BUT excluding */ + /* blocks that are part of the peak (and that */ + /* are already printed). */ + /* This is done every time the summary is printed */ + /* so that the code can continue to be executed */ + /* and the summary can be printed again with blocks */ + /* that are part of the peak having changed and thus */ + /* those that end up in this 'catch all' category. */ + num = 0; + for ( i = 0; i < Num_Records_Freed_RAM; i++ ) + { + /* Check if Record is in the Peak */ + for ( j = 0; j < Num_Records_Peak_RAM; j++ ) + { + /* Is this Block Part of the Peak RAM OR Still Allocated ? */ + if ( is_same_record( &Freed_Allocations[i], &Peak_Allocations[j] ) ) + { /* Yes */ + break; /* Stop the 'j' loop */ + } + } + /* If part of the Peak, skip it */ + if ( j == Num_Records_Peak_RAM ) + { /* Not Part of Peak */ + /* Check if an Identical Block Before Adding to List */ + for ( j = 0; j < num; j++ ) + { +#ifndef MEM_COUNT_SEPARATE_OTHER_BLOCKS + /* Just Check for Same Size, Params and OOB Result */ + if ( Freed_Allocations[i].block_size == Allocations[j].block_size && + strcmp( Freed_Allocations[i].params, Allocations[j].params ) == 0 && + Freed_Allocations[i].OOB_Flag == Allocations[j].OOB_Flag ) + { + Allocations[j].noccurances += Freed_Allocations[i].noccurances; + Allocations[j].used += Freed_Allocations[i].used; + /* Indicate that Locations are Multiple */ + strncpy( Allocations[j].name, "MULTIPLE LOCATIONS", MAX_FUNCTION_NAME_LENGTH ); + /* Wipe the Line # */ + Allocations[j].lineno = 0; + break; + } +#else + if ( is_same_record( &Freed_Allocations[i], &Allocations[j] ) ) + { + Allocations[j].noccurances++; + Allocations[j].used += Freed_Allocations[i].used; + break; + } +#endif + } + + /* Unique Block? */ + if ( j == num ) + { /* Yes */ + /* Add to List */ + memmove( &Allocations[num++], &Freed_Allocations[i], sizeof( allocator_record ) ); + } + } + } + + if ( num != 0 ) + { + /* Print all Other Block (Those that have been Freed but are not Part + of the Peak Memory). */ + printf( " Other Memory Allocated\n" ); + mem_print_records( &Allocations[0], num, cnt_size, FALSE /*Do not print the size column*/ ); + printf( "\n" ); + } + + /* If we have busted the RAM Limit, we will end up in the + summary function (here) and abort. Hence, no point printing + the memory still allocated, it will be the same as the Peak! */ + if ( RAM_Limit == 0 || Current_RAM <= RAM_Limit ) + { + /* Print the Not Deallocated */ + printf( " Memory Still Allocated\n" ); + mem_print_records( &Current_Allocations[0], Num_Records_Cur_RAM, cnt_size, TRUE ); + printf( "\n" ); + } +#endif + +#ifndef MEM_COUNT_DETAILS + if ( Num_Records_Cur_RAM > 0 ) + { + printf( "\nWarning: Part of the SRAM is still allocated! Activate MEM_COUNT_DETAILS for more details.\n" ); + } +#endif + printf( "Peak SRAM Allocated: %i%c\n\n\n", (int) size, Count_suffix[cnt_size] ); + + return size; +} + +#endif diff --git a/lib_debug/mem_count.h b/lib_debug/mem_count.h new file mode 100644 index 0000000000..d30fc3ab1a --- /dev/null +++ b/lib_debug/mem_count.h @@ -0,0 +1,104 @@ +/* + * mem_count.h + * + * Copyright 2022 VoiceAge Corporation. All Rights Reserved. + * + * This software is protected by copyright law and by international treaties. + * VoiceAge Corporation retains full ownership rights in their respective contributions in the software. + * No license of any kind, including but not limited to patent license, of any foregoing parties is + * hereby granted by implication, estoppel or otherwise. + * + * This software is provided "AS IS", without any express or implied warranties. The software is in the + * development stage. It is intended exclusively for experts who have experience with such software and + * solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + * and/or fitness for a particular purpose are hereby disclaimed and excluded. + * + * Written by : Guy J. Richard - August 2017 + * + */ + +#ifndef __MEM_COUNT_H__ +#define __MEM_COUNT_H__ + +#include +#include "options.h" +#include /* for size_t, ... */ + +#ifdef RAM_COUNTING_TOOL +/*-------------------------------------------------------------------* + * Global Constants + *-------------------------------------------------------------------*/ + +#define NO_RAM_LIMIT 0 + +/* Define this when using 64 Bits values in the code (ex: double) */ +/*#define MEM_ALIGN_64BITS */ /* Will Align on 32 Bits if not Defined */ + +/*#define DISABLE_NULL_PTR_FREE_WARNING*/ + +/*#define MEM_COUNT_DETAILS*/ + +/*#define MEM_COUNT_SEPARATE_OTHER_BLOCKS */ /* Print separate lines with location details if the same block is allocated in multiple places and is not a part of the Peak memory */ + /* if not defined, MULTIPLE LOCATIONS is printed instead */ + +/*-------------------------------------------------------------------* + * Global Types + *-------------------------------------------------------------------*/ + +typedef enum +{ + USE_DEFAULT = -1, + USE_BYTES, + USE_16BITS, + USE_32BITS +} Counting_Size; + +/*-------------------------------------------------------------------* + * Global Macros + *-------------------------------------------------------------------*/ + +#define STRINGIFY( x ) #x +#define TO_STRING( x ) STRINGIFY( x ) + +#if ( defined( _WIN32 ) && ( _MSC_VER <= 1800 ) && ( _MSC_VER >= 1300 ) ) +#define __func__ __FUNCTION__ +#elif defined( __STDC_VERSION__ ) && __STDC_VERSION__ < 199901L +#if ( __GNUC__ >= 2 ) +#define __func__ __FUNCTION__ +#else +#define __func__ "" +#endif +#elif defined( __GNUC__ ) +#define __func__ __extension__ __FUNCTION__ +#endif + +/* MALLOC_FCT_CALL, FREE_FCT_CALL, ... are defined here because 'wmc_auto.h' uses */ +/* them to map malloc, free & calloc to a Memory Counting Mechanism. If the WMC Tool */ +/* is not used, then these definitions will have no effect and are harmless. */ +#define MALLOC_FCT_CALL( size ) mem_alloc( __func__, __LINE__, size, "m:" TO_STRING( size ) ) +#define FREE_FCT_CALL( ptr ) mem_free( __func__, __LINE__, ptr ) +#define CALLOC_FCT_CALL( n, sz ) mem_alloc( __func__, __LINE__, ( n ) * ( sz ), "c:" TO_STRING( n ) ", " TO_STRING( sz ) ) + + +/*-------------------------------------------------------------------* + * Prototypes + *-------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" +{ +#endif + + extern void mem_count_init( size_t limit, Counting_Size cnt_size ); + extern size_t mem_count_summary( Counting_Size cnt_size ); + + extern void *mem_alloc( const char *func_name, int func_lineno, size_t size, char *alloc_str ); + extern void mem_free( const char *func_name, int func_lineno, void *ptr ); + +#ifdef __cplusplus +} +#endif + +#endif + +#endif diff --git a/lib_debug/memory.c b/lib_debug/memory.c new file mode 100644 index 0000000000..afd292ddbc --- /dev/null +++ b/lib_debug/memory.c @@ -0,0 +1,187 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "options.h" +#include +#include +#include +#include + +#include "prot.h" +#include "debug.h" +#include "wmops.h" +#include "rom_enc.h" +#include "rom_dec.h" +#include "rom_com.h" +#include "stat_enc.h" +#include "stat_dec.h" + +#ifdef WMOPS + +/*-------------------------------------------------------------------* + * Memory counting tool + *--------------------------------------------------------------------*/ + +int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ +int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ +int32_t wc_frame = 0; /* Frame corresponding to the worst-case stack usage */ +char location_max_stack[256] = "undefined"; +#define MAX_FCT_NAME_LENGTH 30 +typedef struct +{ + char function_name[MAX_FCT_NAME_LENGTH + 1]; + int16_t *stack_ptr; +} caller_info; +int current_calls = 0; +#define MAX_RECORDABLE_CALLS 40 +caller_info stack_callers[2][MAX_RECORDABLE_CALLS]; + + +/*-------------------------------------------------------------------* + * reset_stack() + * + * Initialize/reset the base stack counter.. + *--------------------------------------------------------------------*/ + +void reset_stack() +{ + int16_t something; + + ptr_base_stack = &something; + ptr_max_stack = ptr_base_stack; +} + +/*-------------------------------------------------------------------* + * push_stack() + * + * Check the current stack pointer and update the maximum stack pointer, if new maximum found. + *--------------------------------------------------------------------*/ + +int push_stack( const char *filename, const char *fctname ) +{ + int16_t something; + + (void) *filename; /* to avoid compilation warning */ + + /* Is there room to save the caller's information? */ + if ( current_calls >= MAX_RECORDABLE_CALLS ) + { /* No */ + fprintf( stderr, "memory.c: No more room to store call stack info. Please increase MAX_RECORDABLE_CALLS" ); + exit( -1 ); + } + /* Valid Function Name? */ + if ( fctname[0] == 0 ) + { /* No */ + fprintf( stderr, "memory.c: Invalid function name for call stack info." ); + exit( -1 ); + } + /* Save the Name of the Calling Function in the Table */ + strncpy( stack_callers[0][current_calls].function_name, fctname, MAX_FCT_NAME_LENGTH ); + stack_callers[0][current_calls].function_name[MAX_FCT_NAME_LENGTH] = 0; /* Nul Terminate */ + /* Save the Stack Pointer */ + stack_callers[0][current_calls].stack_ptr = &something; + /* Increase Stack Calling Tree Level */ + current_calls++; + /* Is this the First Time or the Worst Case? */ + if ( &something < ptr_max_stack || ptr_max_stack == NULL ) + { /* Yes */ + /* Save Info about it */ + ptr_max_stack = &something; + wc_frame = frame; + strncpy( location_max_stack, fctname, sizeof( location_max_stack ) - 1 ); + location_max_stack[sizeof( location_max_stack ) - 1] = '\0'; + + /* Save Call Tree */ + memmove( stack_callers[1], stack_callers[0], sizeof( caller_info ) * current_calls ); + + /* Terminate the List (Unless Full) */ + if ( current_calls < MAX_RECORDABLE_CALLS ) + { + stack_callers[1][current_calls].function_name[0] = 0; + } + } + return 0 /* for Now */; +} + +int pop_stack( const char *filename, const char *fctname ) +{ + caller_info *caller_info_ptr; + + (void) *filename; /* to avoid compilation warning */ + + /* Decrease Stack Calling */ + current_calls--; + + /* Get Pointer to Caller Information */ + caller_info_ptr = &stack_callers[0][current_calls]; + + /* Check if Names Match */ + if ( strncmp( caller_info_ptr->function_name, fctname, MAX_FCT_NAME_LENGTH ) != 0 ) + { + fprintf( stderr, "memory.c: Invalid pop_stack()" ); + exit( -1 ); + } + + /* Erase Entry */ + caller_info_ptr->function_name[0] = 0; + + return 0 /* for Now */; +} + +void print_stack_call_tree( void ) +{ + caller_info *caller_info_ptr; + int call_level; + + fprintf( stdout, "Stack Call Tree (frame #%5d) Stack Usage in words\n", wc_frame ); + caller_info_ptr = &stack_callers[1][0]; + for ( call_level = 0; call_level < MAX_RECORDABLE_CALLS; call_level++ ) + { + /* Done? */ + if ( caller_info_ptr->function_name[0] == 0 ) + break; + /* Print Name */ + fprintf( stdout, "%-42s", caller_info_ptr->function_name ); + /* Print Stack Usage (Based on Difference) */ + if ( call_level != 0 ) + { + fprintf( stdout, "%ld\n", ( ( caller_info_ptr - 1 )->stack_ptr - caller_info_ptr->stack_ptr ) * sizeof( int16_t ) / sizeof( float ) ); + } + else + fprintf( stdout, "\n" ); + /* Advance */ + caller_info_ptr++; + } + fprintf( stdout, "\n" ); +} + +#endif /* WMOPS */ diff --git a/lib_debug/segsnr.c b/lib_debug/segsnr.c new file mode 100644 index 0000000000..561a4e239d --- /dev/null +++ b/lib_debug/segsnr.c @@ -0,0 +1,103 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include +#include "options.h" +#include "prot.h" + +#define WMC_TOOL_MAN + +#ifdef OUTPUT_SNR +/*_____________________________________________________________________ + | | + | FUNCTION NAME segsnr | + | Computes the segmential signal-to-noise ratio between the | + | signal x and its estimate xe of length n samples. The segment | + | length is nseg samples. | + | + | INPUT + | x[0:n-1] Signal of n samples. + | xe[0:n-1] Estimated signal of n samples. + | n Signal length. + | nseg Segment length, must be a submultiple of n. + | + | RETURN VALUE + | snr Segmential signal to noise ratio in dB. + |_____________________________________________________________________| +*/ + +float segsnr( float x[], float xe[], int16_t n, int16_t nseg ) +{ + float snr = 0.0f; + float signal, noise, error, fac; + int16_t i, j; + LOOP( 1 ); + for ( i = 0; i < n; i += nseg ) + { + signal = 1e-6f; + MOVE( 2 ); + noise = 1e-6f; + LOOP( 1 ); + for ( j = 0; j < nseg; j++ ) + { + signal += ( *x ) * ( *x ); + MAC( 1 ); + error = *x++ - *xe++; + ADD( 1 ); + noise += error * error; + MAC( 1 ); + } + snr += (float) log10( signal / noise ); + TRANS( 1 ); + DIV( 1 ); + ADD( 1 ); + } + fac = ( (float) ( 10 * nseg ) ) / (float) n; + DIV( 1 ); + MULT( 1 ); + snr = fac * snr; + MULT( 1 ); + ADD( 1 ); + BRANCH( 1 ); + if ( snr < -99.0f ) + { + snr = -99.0f; + MOVE( 1 ); + } + return ( snr ); +} +#endif diff --git a/lib_debug/snr.c b/lib_debug/snr.c new file mode 100644 index 0000000000..a524b35c26 --- /dev/null +++ b/lib_debug/snr.c @@ -0,0 +1,320 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include +#include "wmops.h" +#include "cnst.h" +#include "prot.h" + +#ifdef DEBUGGING + +/*-------------------------------------------------------------------* + * Local constants + *--------------------------------------------------------------------*/ + +#define N_SNRPTR 100 +#define MAX_SIGNAL_LENGTH 1024 +#define MAX_DELAY 320 + +/*-------------------------------------------------------------------* + * Global variables + *--------------------------------------------------------------------*/ + +int16_t snr_count = 0; +char *snr_name[N_SNRPTR] = { 0 }; + +#ifdef DEBUG_MODE_INFO +float snr_[2][320]; +#endif + +/*-------------------------------------------------------------------* + * Local variables + *--------------------------------------------------------------------*/ + +static double signal_energy[N_SNRPTR]; +static double noise_energy[N_SNRPTR]; +static double acc_seg_snr[N_SNRPTR]; +static int32_t seg_count[N_SNRPTR]; +static double acc_wseg_snr[N_SNRPTR]; +static double wseg_count[N_SNRPTR]; +static float *mem_delay_comp[N_SNRPTR] = { 0 }; +static float mem_deemph_x[MAX_INPUT_CHANNELS] = { 0 }; +static float mem_deemph_y[MAX_INPUT_CHANNELS] = { 0 }; +static float mem_synth_snr[MAX_INPUT_CHANNELS][M]; + + +/*-------------------------------------------------------------------* + * snr() + * + * Calculates and accumulates SNR values for a signal specified with a + * certain string. The signal is input in segments having certain length, + * for which a global SNR, segmental SNR and weighted segmental SNR is computed. + *--------------------------------------------------------------------*/ + +void snr( + const float *const signal, + const float *const noise, + const int16_t length, + const char *const name ) +{ + int16_t index; + double signal_sumsq, noise_sumsq, frame_snr, seg_en; + + index = lookup( name, (const char *const *) snr_name, snr_count ); + if ( index == -1 ) + { + index = snr_count; + signal_energy[index] = 0; + noise_energy[index] = 0; + acc_seg_snr[index] = 0; + seg_count[index] = 0; + acc_wseg_snr[index] = 0; + wseg_count[index] = 0; + snr_name[index] = malloc( sizeof( char ) * ( strlen( name ) + 1 ) ); + strcpy( snr_name[index], name ); + snr_count++; + } + + signal_sumsq = sum2_f( signal, length ) + 0.001f; + noise_sumsq = sum2_f( noise, length ) + 0.001f; + if ( signal_sumsq < noise_sumsq ) + signal_sumsq = noise_sumsq; + frame_snr = 10 * log10( signal_sumsq / noise_sumsq ); + seg_en = 10 * log10( signal_sumsq / length ); + if ( seg_en < 0.0 ) + seg_en = 0.0; + + signal_energy[index] += signal_sumsq; + noise_energy[index] += noise_sumsq; + acc_seg_snr[index] += frame_snr; + seg_count[index]++; + acc_wseg_snr[index] += frame_snr * seg_en; + wseg_count[index] += seg_en; + + return; +} + + +/*-------------------------------------------------------------------* + * snr_diff() + * + * Calculates and accumulates SNR values for a signal specified with a + * certain string. The signal is input in segments having certain length, + * for which a global SNR, segmental SNR and weighted segmental SNR is computed. + * A delay between both signals is taken into account + * and compensated for (positive value means degraded signal is delayed). + *--------------------------------------------------------------------*/ + +void snr_diff( + const float *const clean, + const float *const degraded, + const int16_t length, + const int16_t delay, + const char *const name ) +{ + int16_t i, index; + float noise[MAX_SIGNAL_LENGTH], comp_buf[MAX_SIGNAL_LENGTH + MAX_DELAY]; + + if ( length > MAX_SIGNAL_LENGTH ) + { + fprintf( stdout, "snr_diff::Input segment too long. Exiting...\n" ); + exit( -1 ); + } + + if ( delay < 0 ) + { + fprintf( stdout, "snr_diff::Degraded signal cannot have negative delay. Exiting...\n" ); + exit( -1 ); + } + + /* search for the name in the database */ + index = (int16_t) lookup( name, (const char *const *) snr_name, snr_count ); + if ( index == -1 ) + { + index = (int16_t) snr_count; + signal_energy[index] = 0.0f; + noise_energy[index] = 0.0f; + acc_seg_snr[index] = 0.0f; + seg_count[index] = 0; + acc_wseg_snr[index] = 0.001f; + wseg_count[index] = 0.001f; + snr_name[index] = malloc( sizeof( char ) * ( strlen( name ) + 1 ) ); + mem_delay_comp[index] = calloc( delay, sizeof( float ) ); + strcpy( snr_name[index], name ); + snr_count++; + } + + /* delay compensation - introduction of delay to the clean signal */ + mvr2r( mem_delay_comp[index], comp_buf, delay ); + mvr2r( clean, comp_buf + delay, length ); + mvr2r( comp_buf + length, mem_delay_comp[index], delay ); + + for ( i = 0; i < length; i++ ) + { + noise[i] = comp_buf[i] - degraded[i]; + } + + snr( comp_buf, noise, length, name ); + + return; +} + + +/*-------------------------------------------------------------------* + * snr_celp() + * + * Calculates SNR, segmental SNR and weighted segmental SNR values for active + * frames (GENERIC, VOICED, TRANSITION and AUDIO) of CELP-coded signals. Both, the input and output + * signals are first converted to the perceptually weighted domain, subtracted to + * obtain the noise signal and de-emphasized. + *--------------------------------------------------------------------*/ + +void snr_celp( + const int16_t L_frame, + const int16_t L_subfr, + const float gamma, + const float tilt_fac, + const int16_t vad_flag, + const int16_t coder_type, + const float *input, + const float *output, + const float *A, + const int16_t idchan, + const char *name ) +{ + int16_t i; + float noise[L_FRAME16k], Ap[M + 1], x[L_FRAME16k], y[L_FRAME16k], synth_buf[M + L_FRAME16k], *synth; + const float *p_A; + int16_t j; +#ifdef DEBUG_MODE_INFO + float signal2, noise2, subframe_snr; +#endif + + synth = synth_buf + M; + mvr2r( mem_synth_snr[idchan], synth_buf, M ); + mvr2r( output, synth, L_frame ); + mvr2r( synth_buf + L_frame, mem_synth_snr[idchan], M ); + + p_A = A; + for ( i = 0; i < L_frame; i += L_subfr ) + { + weight_a( p_A, Ap, gamma, M ); + residu( Ap, M, &input[i], &x[i], L_subfr ); + residu( Ap, M, &synth[i], &y[i], L_subfr ); + p_A += ( M + 1 ); + + deemph( &x[i], tilt_fac, L_subfr, &mem_deemph_x[idchan] ); + deemph( &y[i], tilt_fac, L_subfr, &mem_deemph_y[idchan] ); + + for ( j = 0; j < L_subfr; j++ ) + { + noise[i + j] = x[i + j] - y[i + j]; + } + +#ifdef DEBUG_MODE_INFO + signal2 = sum2_f( &x[i], L_subfr ) + 0.001f; + noise2 = sum2_f( &noise[i], L_subfr ) + 0.001f; + if ( signal2 < noise2 ) + signal2 = noise2; + subframe_snr = 10.0f * (float) log10( signal2 / noise2 ); + + if ( L_frame == L_FRAME ) + { + set_f( snr_[idchan] + i * 5 / 4, subframe_snr, L_subfr * 5 / 4 ); + } + else + { + set_f( snr_[idchan] + i, subframe_snr, L_subfr ); + } +#endif + } + + if ( vad_flag == 1 && ( coder_type == GENERIC || coder_type == VOICED || coder_type == TRANSITION || coder_type == AUDIO ) ) + { + snr( x, noise, L_frame, name ); + } + + return; +} + +/*-------------------------------------------------------------------* + * print_snr() + * + * Finalizes and presents accumulated SNR data + *--------------------------------------------------------------------*/ + +void print_snr() +{ + int16_t i; + double snr, segsnr, wsegsnr; + + if ( snr_count > 0 ) + { + fprintf( stdout, "\n --- SNR report --- \n" ); + + for ( i = 0; i < snr_count; i++ ) + { + snr = 10 * log10( signal_energy[i] / ( noise_energy[i] + 0.0001f ) ); + segsnr = acc_seg_snr[i] / ( seg_count[i] + 0.0001f ); + wsegsnr = acc_wseg_snr[i] / ( wseg_count[i] + 0.0001f ); + fprintf( stdout, "%-22s %6.3f dB SNR %6.3f dB SegSNR %6.3f dB WSegSNR\n", snr_name[i], snr, segsnr, wsegsnr ); + } + fprintf( stdout, "\n" ); + } + + /* free allocated memory */ + for ( i = 0; i < N_SNRPTR; i++ ) + { + if ( snr_name[i] ) + { + free( snr_name[i] ); + snr_name[i] = NULL; + } + + if ( mem_delay_comp[i] ) + { + free( mem_delay_comp[i] ); + mem_delay_comp[i] = NULL; + } + } + + return; +} + +#endif diff --git a/lib_debug/spar_debug.c b/lib_debug/spar_debug.c new file mode 100644 index 0000000000..a1dd7a9ee8 --- /dev/null +++ b/lib_debug/spar_debug.c @@ -0,0 +1,283 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "spar_debug.h" +#include +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Global variables used for debugging but not under DEBUGGING flag + *--------------------------------------------------------------------*/ +#ifdef DEBUG_SPAR_FOA +#define MAX_IN_FILE_LEN ( 1000 ) +#define MAX_PLUG_IN_FILE_LEN ( MAX_IN_FILE_LEN ) +#define MAX_DEBUG_TAG_LEN ( 50 ) +#define NUM_DEBUG_FILES ( 4 ) +#define MAX_TAG_LEN ( 200 ) + +FILE *fEvs_enc_in; +FILE *fMd_data; +FILE *fModels_data; +FILE *fEig_iters; +FILE *fFb_out[4]; +float max_diff = 0; +int32_t dbg_frm_num; +int32_t dbg_band; +int32_t dbg_type; +int32_t iter_max = 0; +FILE *fFb_pcm = NULL; +int8_t file_names[NUM_DEBUG_FILES][MAX_TAG_LEN + MAX_DEBUG_TAG_LEN]; + + +#ifdef DEBUG_AGC +FILE *agcOut; /* temporary AGC bitstream */ +#endif + +/*-----------------------------------------------------------------------------------------* + * Function description + * cstrcpy() - Custom implementation of strcpy + * + * Inputs: + * const char* _Source -> Source buffer + * _SizeInBytes -> Destination buffer size in bytes + * + * Outputs: + * char* _Destination -> Destination buffer + *-----------------------------------------------------------------------------------------*/ + +static void cstrcpy( char *_Destination, size_t _SizeInBytes, const char *_Source ) +{ + size_t SourceSizeInBytes = strlen( _Source ); + if ( _SizeInBytes > SourceSizeInBytes ) + { + strcpy( _Destination, _Source ); + } + else + { + assert( 0 ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function description + * cstrcat() - Custom implementation of strcat + * + * Inputs: + * const char* _Source -> Source buffer + * _SizeInBytes -> Destination buffer size in bytes + * + * Outputs: + * char* _Destination -> Destination buffer + *-----------------------------------------------------------------------------------------*/ + +static void cstrcat( char *_Destination, size_t _SizeInBytes, const char *_Source ) +{ + size_t SourceSizeInBytes = strlen( _Source ); + size_t DestSizeInBytes = _SizeInBytes - strlen( _Destination ); + if ( DestSizeInBytes > SourceSizeInBytes ) + { + strcat( _Destination, _Source ); + } + else + { + assert( 0 ); + } + + return; +} + + +#ifdef DEBUG_AGC +void ivas_close_agc_debug_files( spar_debug_t *pDebug_params ) +{ + if ( pDebug_params->agc > 0 ) /* temporary */ + { + if ( agcOut != NULL ) + { + fclose( agcOut ); + } + } +} + +void ivas_open_agc_debug_files( spar_debug_t *pDebug_params ) +{ + /* Temporary AGC file */ + if ( pDebug_params->agc > 0 ) + { + char agcFilename[50] = "agcBitstream.bin"; + if ( ( agcOut = fopen( agcFilename, "wb" ) ) == NULL ) + { + fprintf( stderr, "Error: Gain Control bitstream file %s could not be opened\n\n", agcFilename ); + exit( -1 ); + } + fprintf( stdout, "Temporary gain control bitstream file %s is opened\n", agcFilename ); + } +} + +#endif + + +void ivas_close_remove_debug_files( void ) +{ + if ( fEvs_enc_in != NULL ) + fclose( fEvs_enc_in ); + if ( fMd_data != NULL ) + fclose( fMd_data ); + if ( fModels_data != NULL ) + fclose( fModels_data ); + if ( fEig_iters != NULL ) + fclose( fEig_iters ); + + /* Enable print max diff to a file */ + + /* FILE *fp = fopen("max_diff.txt", "a"); + fprintf(fp, "%s\n", file_names[0]); + fprintf(fp, "max diff = %0.15f\n frame_no = %d\n band num = %d\n coeff type %d\n", max_diff, dbg_frm_num, dbg_band, dbg_type); + fclose(fp); */ + + /* Enable print max eig iters to a file */ + + /*FILE *fp = fopen("max_iters.txt", "a"); + fprintf(fp, "%s\n", file_names[0]); + fprintf(fp, "%d\n", iter_max); + fclose(fp); */ +} + +void ivas_open_debug_files( spar_debug_t *pDebug_params ) +{ +#ifndef MSVS_DEBUG + int8_t evs_in_path[MAX_PLUG_IN_FILE_LEN] = "spar_foa_bs/enc/evs_pcm_in/"; + int8_t mat_md_path[MAX_PLUG_IN_FILE_LEN] = "spar_foa_bs/enc/mat_md/"; + int8_t models_data_path[MAX_PLUG_IN_FILE_LEN] = "spar_foa_bs/enc/ec_models/"; + int8_t fb_pcm_dump_path[4][MAX_PLUG_IN_FILE_LEN] = { "spar_foa_bs/fb_dumps/", "spar_foa_bs/fb_dumps/", "spar_foa_bs/fb_dumps/", "spar_foa_bs/fb_dumps/" }; +#else + int8_t evs_in_path[MAX_PLUG_IN_FILE_LEN] = "../scripts/ivas_pytests/tests/restricted/system_tests/spar_foa_bs/enc/evs_pcm_in/"; + int8_t mat_md_path[MAX_PLUG_IN_FILE_LEN] = "../scripts/ivas_pytests/tests/restricted/system_tests/spar_foa_bs/enc/mat_md/"; + int8_t models_data_path[MAX_PLUG_IN_FILE_LEN] = "../scripts/ivas_pytests/tests/restricted/system_tests/spar_foa_bs/enc/ec_models/"; + int8_t fb_pcm_dump_path[4][MAX_PLUG_IN_FILE_LEN] = { "../scripts/ivas_pytests/tests/restricted/system_tests/spar_foa_bs/fb_dumps/", "../tests/restricted/system_tests/spar_foa_bs/fb_dumps/", "../tests/restricted/system_tests/spar_foa_bs/fb_dumps/", "../tests/restricted/system_tests/spar_foa_bs/fb_dumps/" }; +#endif + + if ( pDebug_params->file_tag != NULL ) + { + cstrcpy( (char *) file_names[0], sizeof( file_names[0] ), (const char *) pDebug_params->file_tag ); + } + + /* ivas_total_brate */ + switch ( pDebug_params->ivas_total_brate ) + { + case 32000: + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_ivasbr32k" ); + break; + case 64000: + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_ivasbr64k" ); + break; + case 96000: + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_ivasbr96k" ); + break; + case 160000: + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_ivasbr160k" ); + break; + case 256000: + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_ivasbr256k" ); + break; + case 384000: + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_ivasbr384k" ); + break; + case 512000: + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_ivasbr512k" ); + break; + } + + /* fb id */ + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_48dly" ); + + /* DTX */ + if ( pDebug_params->dtx_on ) + { + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_DTX1" ); + } + else + { + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_DTX0" ); + } + + cstrcpy( (char *) file_names[1], sizeof( file_names[1] ), (const char *) file_names[0] ); + cstrcpy( (char *) file_names[2], sizeof( file_names[2] ), (const char *) file_names[0] ); + cstrcpy( (char *) file_names[3], sizeof( file_names[3] ), (const char *) file_names[0] ); + cstrcat( (char *) file_names[0], sizeof( file_names[0] ), "_pcm.txt" ); + + cstrcat( (char *) evs_in_path, sizeof( evs_in_path ), (const char *) file_names[0] ); + fEvs_enc_in = fopen( (const char *) evs_in_path, "rb" ); + + cstrcat( (char *) file_names[1], sizeof( file_names[1] ), ".md" ); + cstrcat( (char *) mat_md_path, sizeof( mat_md_path ), (const char *) file_names[1] ); + fMd_data = fopen( (const char *) mat_md_path, "rb" ); + + cstrcat( (char *) file_names[3], sizeof( file_names[3] ), ".txt" ); + cstrcat( (char *) models_data_path, sizeof( models_data_path ), (const char *) file_names[3] ); + fModels_data = fopen( (const char *) models_data_path, "rb" ); + + fEig_iters = NULL; + /*Enable this below to dump iteration count for each frame + fEig_iters = fopen(strcat(eig_iter_dmp_path, strcat(file_names[1], "_eig_iters.txt")), "wb"); */ + + /* Enable for fb pcm dumps */ + cstrcat( (char *) fb_pcm_dump_path[0], sizeof( fb_pcm_dump_path[0] ), (const char *) file_names[2] ); + cstrcat( (char *) fb_pcm_dump_path[0], sizeof( fb_pcm_dump_path[0] ), "/ch1.raw" ); + fFb_out[0] = fopen( (const char *) fb_pcm_dump_path[0], "wb" ); + + cstrcat( (char *) fb_pcm_dump_path[1], sizeof( fb_pcm_dump_path[1] ), (const char *) file_names[2] ); + cstrcat( (char *) fb_pcm_dump_path[1], sizeof( fb_pcm_dump_path[1] ), "/ch2.raw" ); + fFb_out[1] = fopen( (const char *) fb_pcm_dump_path[1], "wb" ); + + cstrcat( (char *) fb_pcm_dump_path[2], sizeof( fb_pcm_dump_path[2] ), (const char *) file_names[2] ); + cstrcat( (char *) fb_pcm_dump_path[2], sizeof( fb_pcm_dump_path[2] ), "/ch3.raw" ); + fFb_out[2] = fopen( (const char *) fb_pcm_dump_path[2], "wb" ); + + cstrcat( (char *) fb_pcm_dump_path[3], sizeof( fb_pcm_dump_path[3] ), (const char *) file_names[2] ); + cstrcat( (char *) fb_pcm_dump_path[3], sizeof( fb_pcm_dump_path[3] ), "/ch4.raw" ); + fFb_out[3] = fopen( (const char *) fb_pcm_dump_path[3], "wb" ); +} + +#endif /* DEBUG_SPAR_FOA */ diff --git a/lib_debug/spar_debug.h b/lib_debug/spar_debug.h new file mode 100644 index 0000000000..530996d81b --- /dev/null +++ b/lib_debug/spar_debug.h @@ -0,0 +1,60 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef SPAR_DEBUG_H +#define SPAR_DEBUG_H + +#include "options.h" +#include +#include + +/*------------------------------------------------------------------------------------------* + * Global variables used for debugging + *------------------------------------------------------------------------------------------*/ +#ifdef DEBUG_SPAR_FOA +typedef struct spar_debug_t +{ + const char *file_tag; + int32_t ivas_total_brate; + int16_t dtx_on; + int16_t agc; +} spar_debug_t; + +#ifdef DEBUG_AGC +void ivas_close_agc_debug_files( spar_debug_t *pDebug_params ); +void ivas_open_agc_debug_files( spar_debug_t *pDebug_params ); +#endif +void ivas_close_remove_debug_files( void ); +void ivas_open_debug_files( spar_debug_t *pDebug_params ); +#endif + +#endif /* SPAR_DEBUG_H */ diff --git a/lib_debug/wmops.c b/lib_debug/wmops.c new file mode 100644 index 0000000000..fe75a207ff --- /dev/null +++ b/lib_debug/wmops.c @@ -0,0 +1,503 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * WMOPS counting tool + *--------------------------------------------------------------------*/ + +#ifdef WMOPS + +#define MAX_RECORDS 1024 +#define MAX_CHAR 64 +#define MAX_STACK 64 +#define DOUBLE_MAX 0x80000000; + +struct wmops_record +{ + char label[MAX_CHAR]; + int32_t call_number; + int32_t update_cnt; + int call_tree[MAX_RECORDS]; + double start_selfcnt; + double current_selfcnt; + double max_selfcnt; + double min_selfcnt; + double tot_selfcnt; + double start_cnt; /* The following take into account the decendants */ + double current_cnt; + double max_cnt; + double min_cnt; + double tot_cnt; +#ifdef WMOPS_WC_FRAME_ANALYSIS + int32_t current_call_number; + double wc_cnt; + double wc_selfcnt; + int32_t wc_call_number; +#endif +}; + +double ops_cnt; +double prom_cnt; +double inst_cnt[NUM_INST]; + +int ops_cnt_activ = 1; + +static struct wmops_record wmops[MAX_RECORDS]; +static int stack[MAX_STACK]; +static int sptr; +static int num_records; +static int current_record; +static int32_t update_cnt; +static double start_cnt; +static double max_cnt; +static double min_cnt; +static double inst_cnt_wc[NUM_INST]; +static int32_t fnum_cnt_wc; + + +void reset_wmops( void ) +{ + int i, j; + + for ( i = 0; i < MAX_RECORDS; i++ ) + { + strcpy( &wmops[i].label[0], "\0" ); + wmops[i].call_number = 0; + wmops[i].update_cnt = 0; + for ( j = 0; j < MAX_RECORDS; j++ ) + { + wmops[i].call_tree[j] = -1; + } + wmops[i].start_selfcnt = 0.0; + wmops[i].current_selfcnt = 0.0; + wmops[i].max_selfcnt = 0.0; + wmops[i].min_selfcnt = DOUBLE_MAX; + wmops[i].tot_selfcnt = 0.0; + wmops[i].start_cnt = 0.0; + wmops[i].current_cnt = 0.0; + wmops[i].max_cnt = 0.0; + wmops[i].min_cnt = DOUBLE_MAX; + wmops[i].tot_cnt = 0.0; +#ifdef WMOPS_WC_FRAME_ANALYSIS + wmops[i].wc_cnt = 0.0; + wmops[i].wc_selfcnt = 0.0; + wmops[i].current_call_number = 0; +#endif + } + + for ( i = 0; i < MAX_STACK; i++ ) + { + stack[i] = -1; + } + sptr = 0; + num_records = 0; + current_record = -1; + update_cnt = 0; + + max_cnt = 0.0; + min_cnt = DOUBLE_MAX; + start_cnt = 0.0; + ops_cnt = 0.0; +} + + +void push_wmops( const char *label ) +{ + int new_flag; + int i, j; + + /* Check if new function record label */ + new_flag = 1; + for ( i = 0; i < num_records; i++ ) + { + if ( strcmp( wmops[i].label, label ) == 0 ) + { + new_flag = 0; + break; + } + } + + /* Configure new record */ + if ( new_flag ) + { + if ( num_records >= MAX_RECORDS ) + { + fprintf( stdout, "push_wmops(): exceeded MAX_RECORDS count.\n\n" ); + exit( -1 ); + } + strcpy( wmops[i].label, label ); + num_records++; + } + + /* Push current context onto stack */ + if ( current_record >= 0 ) + { + if ( sptr >= MAX_STACK ) + { + fprintf( stdout, "\r push_wmops(): stack exceeded, try inreasing MAX_STACK\n" ); + exit( -1 ); + } + stack[sptr++] = current_record; + + /* accumulate op counts */ + wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; + + /* update call tree */ + for ( j = 0; j < MAX_RECORDS; j++ ) + { + if ( wmops[i].call_tree[j] == current_record ) + { + break; + } + else if ( wmops[i].call_tree[j] == -1 ) + { + wmops[i].call_tree[j] = current_record; + break; + } + } + } + + /* init current record */ + current_record = i; + wmops[current_record].start_selfcnt = ops_cnt; + wmops[current_record].start_cnt = ops_cnt; + wmops[current_record].call_number++; +#ifdef WMOPS_WC_FRAME_ANALYSIS + wmops[current_record].current_call_number++; +#endif +} + +void wmops_sub_start( const char *label ) +{ +#ifndef WMOPS_DETAIL + push_wmops( label ); +#endif +} + +void pop_wmops( void ) +{ + + /* Check for underflow */ + if ( current_record < 0 ) + { + fprintf( stdout, "\r pop_wmops(): stack underflow, too many calls to pop_wmops()\n" ); + exit( -1 ); + } + + /* update count of current record */ + wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; + wmops[current_record].current_cnt += ops_cnt - wmops[current_record].start_cnt; + + /* Get back previous context from stack */ + if ( sptr > 0 ) + { + current_record = stack[--sptr]; + wmops[current_record].start_selfcnt = ops_cnt; + } + else + { + current_record = -1; + } +} + +void wmops_sub_end( void ) +{ +#ifndef WMOPS_DETAIL + pop_wmops(); +#endif +} + +void update_wmops( void ) +{ + int i; + double current_cnt; + + if ( sptr != 0 ) + { + fprintf( stdout, "update_wmops(): Stack must be empty!\n" ); + exit( -1 ); + } + +#ifdef WMOPS_PER_FRAME /* output complexity in WMOPS per frame - note that "frame" number was already incremented before calling this function */ + { + float tmpF = (float) ( FAC * wmops[0].current_cnt ); + dbgwrite( &tmpF, 4, 1, 1, "res/wmops" ); + } +#endif + +#ifdef WMOPS_WC_FRAME_ANALYSIS + if ( ops_cnt - start_cnt > max_cnt ) + { + for ( i = 0; i < num_records; i++ ) + { + wmops[i].wc_cnt = wmops[i].current_cnt; + wmops[i].wc_selfcnt = wmops[i].current_selfcnt; + wmops[i].wc_call_number = wmops[i].current_call_number; + } + } +#endif + + for ( i = 0; i < num_records; i++ ) + { + wmops[i].tot_selfcnt += wmops[i].current_selfcnt; + wmops[i].tot_cnt += wmops[i].current_cnt; + + if ( wmops[i].current_selfcnt > 0 ) + { + if ( wmops[i].current_selfcnt > wmops[i].max_selfcnt ) + { + wmops[i].max_selfcnt = wmops[i].current_selfcnt; + } + + if ( wmops[i].current_selfcnt < wmops[i].min_selfcnt ) + { + wmops[i].min_selfcnt = wmops[i].current_selfcnt; + } + } + + wmops[i].current_selfcnt = 0; + + if ( wmops[i].current_cnt > 0 ) + { + if ( wmops[i].current_cnt > wmops[i].max_cnt ) + { + wmops[i].max_cnt = wmops[i].current_cnt; + } + + if ( wmops[i].current_cnt < wmops[i].min_cnt ) + { + wmops[i].min_cnt = wmops[i].current_cnt; + } + + wmops[i].update_cnt++; + } + + wmops[i].current_cnt = 0; +#ifdef WMOPS_WC_FRAME_ANALYSIS + wmops[i].current_call_number = 0; +#endif + } + + current_cnt = ops_cnt - start_cnt; + if ( current_cnt > max_cnt ) + { + max_cnt = current_cnt; + + for ( i = 0; i < NUM_INST; i++ ) + { + inst_cnt_wc[i] = inst_cnt[i]; + } + + fnum_cnt_wc = update_cnt; + } + + if ( current_cnt < min_cnt ) + { + min_cnt = current_cnt; + } + + for ( i = 0; i < NUM_INST; i++ ) + { + inst_cnt[i] = 0.0; + } + + + start_cnt = ops_cnt; + update_cnt++; +} + + +void print_wmops( void ) +{ + int i, label_len, max_label_len; + + char *sfmts = "%*s %8s %8s %7s %7s\n"; + char *dfmts = "%*s %8.2f %8.3f %7.3f %7.3f\n"; + char *sfmt = "%*s %8s %8s %7s %7s %7s %7s %7s\n"; + char *dfmt = "%*s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; + +#if ENABLE_TREE + int j; + char *sfmtt = "%20s %4s %15s\n"; + char *dfmtt = "%20s %4d "; +#endif + + /* fprintf( stdout, "\nProgram Memory Analysis: %12.0f words\n", prom_cnt ); */ + /* fprintf (stdout, "\nInstruction Type Analysis (for worst case frame):\n\n"); */ + fprintf( stdout, "\nInstruction Type Analysis (for worst case frame number %d):\n\n", fnum_cnt_wc ); /* added -- JPA */ + for ( i = 0; i < NUM_INST; i++ ) + { + switch ( (enum instructions) i ) + { + case _ADD: + fprintf( stdout, "\tAdds: %12.1f\n", inst_cnt_wc[i] ); + break; + case _ABS: + fprintf( stdout, "\tAbsolutes: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MULT: + fprintf( stdout, "\tMultiplies: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MAC: + fprintf( stdout, "\tMACs: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MOVE: + fprintf( stdout, "\tMoves: %12.1f\n", inst_cnt_wc[i] ); + break; + case _STORE: + fprintf( stdout, "\tStores: %12.1f\n", inst_cnt_wc[i] ); + break; + case _LOGIC: + fprintf( stdout, "\tLogicals: %12.1f\n", inst_cnt_wc[i] ); + break; + case _SHIFT: + fprintf( stdout, "\tShifts: %12.1f\n", inst_cnt_wc[i] ); + break; + case _BRANCH: + fprintf( stdout, "\tBranches: %12.1f\n", inst_cnt_wc[i] ); + break; + case _DIV: + fprintf( stdout, "\tDivisions: %12.1f\n", inst_cnt_wc[i] ); + break; + case _SQRT: + fprintf( stdout, "\tSquare Root: %12.1f\n", inst_cnt_wc[i] ); + break; + case _TRANS: + fprintf( stdout, "\tTrans: %12.1f\n", inst_cnt_wc[i] ); + break; + case _FUNC: + fprintf( stdout, "\tFunc Call: %12.1f\n", inst_cnt_wc[i] ); + break; + case _LOOP: + fprintf( stdout, "\tLoop Init: %12.1f\n", inst_cnt_wc[i] ); + break; + case _INDIRECT: + fprintf( stdout, "\tIndirect Addr: %12.1f\n", inst_cnt_wc[i] ); + break; + case _PTR_INIT: + fprintf( stdout, "\tPointer Init: %12.1f\n", inst_cnt_wc[i] ); + break; + case _TEST: + fprintf( stdout, "\tExtra condit.: %12.1f\n", inst_cnt_wc[i] ); + break; + case _POWER: + fprintf( stdout, "\tExponential: %12.1f\n", inst_cnt_wc[i] ); + break; + case _LOG: + fprintf( stdout, "\tLogarithm: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MISC: + fprintf( stdout, "\tAll other op.: %12.1f\n", inst_cnt_wc[i] ); + break; + default: + fprintf( stdout, "\tERROR: Invalid instruction type: %d\n\n", i ); + } + } + + max_label_len = 0; + for ( i = 0; i < num_records; i++ ) + { + label_len = strlen( wmops[i].label ); + if ( label_len > max_label_len ) + { + max_label_len = label_len; + } + } + max_label_len += 4; + +#ifdef WMOPS_WC_FRAME_ANALYSIS + fprintf( stdout, "\n\nWeighted MOPS Analysis for worst case frame number %d ( WMOPS boost factor %4.2f ):\n", fnum_cnt_wc, WMOPS_BOOST_FAC ); + fprintf( stdout, "%*s %8s %10s %12s\n", max_label_len, " routine", " calls", " SELF", " CUMULATIVE" ); + fprintf( stdout, "%*s %8s %10s %10s\n", max_label_len, "---------------", "------", "------", "----------" ); + + for ( i = 0; i < num_records; i++ ) + { + fprintf( stdout, "%*s %8d %10.3f %12.3f\n", max_label_len, wmops[i].label, wmops[i].wc_call_number, FAC * wmops[i].wc_selfcnt, FAC * wmops[i].wc_cnt ); + } + +#endif + + fprintf( stdout, "\n\nWeighted MOPS Analysis ( WMOPS boost factor %4.2f ):\n", WMOPS_BOOST_FAC ); + fprintf( stdout, "%*s %34s %23s\n", max_label_len, "", "|------ SELF ------|", "|--- CUMULATIVE ---|" ); + fprintf( stdout, sfmt, max_label_len, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg " ); + fprintf( stdout, sfmt, max_label_len, "---------------", "------", "------", "------", "------", "------", "------", "------" ); + for ( i = 0; i < num_records; i++ ) + { + fprintf( stdout, dfmt, max_label_len, wmops[i].label, + update_cnt == 0 ? 0.0f : (float) wmops[i].call_number / update_cnt, + wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].min_selfcnt, FAC * wmops[i].max_selfcnt, + wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, + wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].min_cnt, FAC * wmops[i].max_cnt, + wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].tot_cnt / wmops[i].update_cnt ); + } + fprintf( stdout, sfmts, max_label_len, "---------------", "------", "------", "------", "------" ); + fprintf( stdout, dfmts, max_label_len, "total", (float) update_cnt, FAC * min_cnt, FAC * max_cnt, FAC * ops_cnt / update_cnt ); + fprintf( stdout, "\n" ); + +#if ENABLE_TREE + + fprintf( stdout, "\nCall Tree:\n\n" ); + fprintf( stdout, sfmtt, " function", "num", "called by: " ); + fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); + + for ( i = 0; i < num_records; i++ ) + { + fprintf( stdout, dfmtt, wmops[i].label, i ); + for ( j = 0; wmops[i].call_tree[j] != -1; j++ ) + { + if ( j != 0 ) + { + fprintf( stdout, ", " ); + } + fprintf( stdout, "%d", wmops[i].call_tree[j] ); + } + fprintf( stdout, "\n" ); + } + + fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); + fprintf( stdout, "\n\n" ); + +#endif +} + +#endif /* WMOPS */ diff --git a/lib_debug/wmops.h b/lib_debug/wmops.h new file mode 100644 index 0000000000..f18c990ed5 --- /dev/null +++ b/lib_debug/wmops.h @@ -0,0 +1,777 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef WMOPS_H +#define WMOPS_H + +#include +#include "options.h" + + +/*------------------------------------------------------------------------------------------* + * Memory calculation tool + *------------------------------------------------------------------------------------------*/ + +#ifdef WMOPS + +#ifdef _MSC_VER +#pragma warning( disable : 4033 ) +#pragma warning( disable : 4702 ) +#pragma warning( disable : 4709 ) +#endif + +extern int Const_Data_Size_rom_enc( void ); +extern int Const_Data_Size_rom_com( void ); +extern int Const_Data_Size_rom_dec( void ); +extern int Const_Data_Size_ivas_rom_enc( void ); +extern int Const_Data_Size_ivas_rom_com( void ); +extern int Const_Data_Size_ivas_rom_dec( void ); +extern int Const_Data_Size_ivas_spar_rom_com( void ); +extern int Const_Data_Size_ivas_rom_binauralRen( void ); +extern int Const_Data_Size_ivas_rom_TdBinauralR( void ); +extern int Const_Data_Size_ivas_rom_binaural_cr( void ); + +int push_stack( const char *filename, const char *fctname ); +int pop_stack( const char *filename, const char *fctname ); +void reset_stack( void ); +void print_stack_call_tree( void ); + +#else + +#define push_stack( file, fct ) +#define pop_stack( file, fct ) +#define reset_stack() +#define print_mem_enc( x ) +#define print_mem_dec( x ) +#define print_stack_call_tree() + +#endif + +/******************************************************************************************/ + +/* Real-time relationships */ +#define FRAMES_PER_SECOND 50.0 +#define MILLION_CYCLES 1e6 + +#define WMC_AUTO_WEIGHTING_FACT 0.91f /* constant to equalize difference between automatic and manual instrumentation */ +#define WMOPS_BOOST_FAC ( 1.0f / WMC_AUTO_WEIGHTING_FACT ) /* complexity scaling factor for manually instrumented code */ + +#define FAC ( FRAMES_PER_SECOND / MILLION_CYCLES * WMOPS_BOOST_FAC ) + +/******************************************************************************************/ + + +#define FLC_MSU( c ) MAC( c ) /* multiply and subtract is currently seen as MAC operation */ +#define FLC_MAX( c ) MISC( c ) /* max() is seen as MISC like abs() */ +#define FLC_MIN( c ) MISC( c ) /* min() is seen as MISC like abs() */ +#define FLC_NEG( c ) ADD( c ) /* negation is seen as addion: a = 0 - a */ +#define FLC_CAST( c ) /* type conversion is costfree for the moment, but who knows it for the future ? */ +#define FLC_INLINE_FUNC( c ) /* inline function calls are costfree, parameters/retval are currently not counted */ + /* example: FLC_INLINE_FUNC(3); SET_FLOAT(ptr,value,num); */ +#define FLC_ATAN2( c ) \ + DIV( c ); \ + TRANS( c ) /* atan2 is curently seen as division followed by atan */ + +/* inline function for memset in combination with float pointer */ +#define SET_FLOAT( ptr, value, num ) \ + { \ + int i; \ + LOOP( 1 ); \ + MOVE( num ); \ + for ( i = 0; i < num; i++ ) \ + { \ + ptr[i] = value; \ + } \ + } + +/* inline function for memset in combination with integer */ +#define SET_INT( ptr, value, num ) \ + { \ + int i; \ + LOOP( 1 ); \ + MOVE( num ); \ + for ( i = 0; i < num; i++ ) \ + { \ + ptr[i] = value; \ + } \ + } + +#ifdef WMOPS +#ifndef WMOPS_DETAIL +#define STACK_DEPTH_FCT_CALL push_stack( __FILE__, __func__ ) /* Define stack counting function for WMC Tool */ + +#define STACK_DEPTH_FCT_RETURN pop_stack( __FILE__, __func__ ) /* Define stack counting function for WMC Tool */ +#else +#define STACK_DEPTH_FCT_CALL ( push_wmops( __func__ ), push_stack( __FILE__, __func__ ) ) /* Define stack counting function for WMC Tool */ + +#define STACK_DEPTH_FCT_RETURN ( pop_wmops(), pop_stack( __FILE__, __func__ ) ) /* Define stack counting function for WMC Tool */ +#endif + +#define ENABLE_WMOPS 1 /* Only for the WMC_Tool */ +#define ENABLE_TREE 0 /* Call tree may be activated by setting this flag to 1 */ +#define NUM_INST 20 /* Total number of instruction types (in enum below) */ + +#define FLC_OPS_COND if ( ops_cnt_activ > 0 ) + +enum instructions +{ + _ADD, + _ABS, + _MULT, + _MAC, + _MOVE, + _STORE, + _LOGIC, + _SHIFT, + _BRANCH, + _DIV, + _SQRT, + _TRANS, + _FUNC, + _LOOP, + _INDIRECT, + _PTR_INIT, + _TEST, + _POWER, + _LOG, + _MISC +}; +enum flc_fields +{ + FLC_NOP = 0, + FLC_ADD, + FLC_MULT, + FLC_MAC, + FLC_MOVE, + FLC_STORE, + FLC_LOGIC, + FLC_SHIFT, + FLC_BRANCH, + FLC_DIV, + FLC_SQRT, + FLC_TRANS, + FLC_FUNC, + FLC_LOOP, + FLC_INDIRECT, + FLC_PTR_INIT, + FLC_MISC, + FLC_TEST, + FLC_POWER, + FLC_LOG, + FLC_OPEND +}; + + +#define _ADD_C 1 +#define _ABS_C 1 +#define _MULT_C 1 +#define _MAC_C 1 +#define _MOVE_C 1 +#define _STORE_C 1 +#define _LOGIC_C 1 +#define _SHIFT_C 1 +#define _BRANCH_C 4 +#define _DIV_C 18 +#define _SQRT_C 10 +#define _TRANS_C 25 +#define _FUNC_C 2 /* need to add number of arguments */ +#define _LOOP_C 3 +#define _INDIRECT_C 2 +#define _PTR_INIT_C 1 +#define _TEST_C 2 +#define _POWER_C 25 +#define _LOG_C 25 +#define _MISC_C 1 + +#define _ADD_P 1 +#define _ABS_P 1 +#define _MULT_P 1 +#define _MAC_P 1 +#define _MOVE_P 1 +#define _STORE_P 0 +#define _LOGIC_P 1 +#define _SHIFT_P 1 +#define _BRANCH_P 2 +#define _DIV_P 2 +#define _SQRT_P 2 +#define _TRANS_P 2 +#define _FUNC_P 2 /* need to add number of arguments */ +#define _LOOP_P 1 +#define _INDIRECT_P 2 +#define _PTR_INIT_P 1 +#define _TEST_P 1 +#define _POWER_P 2 +#define _LOG_P 2 +#define _MISC_P 1 + +#define ADD( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _ADD_C * ( x ) ); \ + inst_cnt[_ADD] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _ADD_P * ( x ) ); \ + } \ + } \ + } \ + } +#define ABS( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _ABS_C * ( x ) ); \ + inst_cnt[_ABS] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _ABS_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MULT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _MULT_C * ( x ) ); \ + inst_cnt[_MULT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MULT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MAC( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _MAC_C * ( x ) ); \ + inst_cnt[_MAC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MAC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MOVE( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _MOVE_C * ( x ) ); \ + inst_cnt[_MOVE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MOVE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define STORE( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _STORE_C * ( x ) ); \ + inst_cnt[_STORE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _STORE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define LOGIC( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _LOGIC_C * ( x ) ); \ + inst_cnt[_LOGIC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOGIC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define SHIFT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _SHIFT_C * ( x ) ); \ + inst_cnt[_SHIFT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SHIFT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define BRANCH( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _BRANCH_C * ( x ) ); \ + inst_cnt[_BRANCH] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _BRANCH_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DIV( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _DIV_C * ( x ) ); \ + inst_cnt[_DIV] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _DIV_P * ( x ) ); \ + } \ + } \ + } \ + } +#define SQRT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _SQRT_C * ( x ) ); \ + inst_cnt[_SQRT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SQRT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define TRANS( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _TRANS_C * ( x ) ); \ + inst_cnt[_TRANS] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _TRANS_P * ( x ) ); \ + } \ + } \ + } \ + } +#define LOOP( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _LOOP_C * ( x ) ); \ + inst_cnt[_LOOP] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOOP_P * ( x ) ); \ + } \ + } \ + } \ + } +#define INDIRECT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _INDIRECT_C * ( x ) ); \ + inst_cnt[_INDIRECT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _INDIRECT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define PTR_INIT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _PTR_INIT_C * ( x ) ); \ + inst_cnt[_PTR_INIT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _PTR_INIT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define TEST( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _TEST_C * ( x ) ); \ + inst_cnt[_TEST] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _TEST_P * ( x ) ); \ + } \ + } \ + } \ + } +#define POWER( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _POWER_C * ( x ) ); \ + inst_cnt[_POWER] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _POWER_P * ( x ) ); \ + } \ + } \ + } \ + } +#define LOG( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _LOG_C * ( x ) ); \ + inst_cnt[_LOG] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOG_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MISC( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _MISC_C * ( x ) ); \ + inst_cnt[_MISC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MISC_P * ( x ) ); \ + } \ + } \ + } \ + } + +#define FUNC( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( _FUNC_C + _MOVE_C * ( x ) ); \ + inst_cnt[_FUNC]++; \ + inst_cnt[_MOVE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _FUNC_P + _MOVE_P * ( x ) ); \ + } \ + } \ + } \ + } + +#define DADD( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _ADD_C * ( x ) ); \ + inst_cnt[_ADD] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _ADD_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DMULT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _MULT_C * ( x ) ); \ + inst_cnt[_MULT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MULT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DMAC( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _MAC_C * ( x ) ); \ + inst_cnt[_MAC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MAC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DMOVE( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _MOVE_C * ( x ) ); \ + inst_cnt[_MOVE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MOVE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DSTORE( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _STORE_C * ( x ) ); \ + inst_cnt[_STORE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _STORE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DLOGIC( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _LOGIC_C * ( x ) ); \ + inst_cnt[_LOGIC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOGIC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DSHIFT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _SHIFT_C * ( x ) ); \ + inst_cnt[_SHIFT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SHIFT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DDIV( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _DIV_C * ( x ) ); \ + inst_cnt[_DIV] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _DIV_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DSQRT( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _SQRT_C * ( x ) ); \ + inst_cnt[_SQRT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SQRT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DTRANS( x ) \ + { \ + FLC_OPS_COND \ + { \ + ops_cnt += ( 2 * _TRANS_C * ( x ) ); \ + inst_cnt[_TRANS] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _TRANS_P * ( x ) ); \ + } \ + } \ + } \ + } + +extern double ops_cnt; +extern double prom_cnt; +extern double inst_cnt[NUM_INST]; +extern int ops_cnt_activ; + +void reset_wmops( void ); +void push_wmops( const char *label ); +void pop_wmops( void ); +void wmops_sub_start( const char *label ); +void wmops_sub_end( void ); +void update_wmops( void ); +void print_wmops( void ); + +#else /* WMOPS counting disabled */ + +#define reset_wmops() +#define push_wmops( x ) +#define pop_wmops() +#define wmops_sub_start( x ) +#define wmops_sub_end() +#define update_wmops() +#define print_wmops() + +#define ADD( x ) +#define ABS( x ) +#define MULT( x ) +#define MAC( x ) +#define MOVE( x ) +#define STORE( x ) +#define LOGIC( x ) +#define SHIFT( x ) +#define BRANCH( x ) +#define DIV( x ) +#define SQRT( x ) +#define TRANS( x ) +#define FUNC( x ) +#define LOOP( x ) +#define INDIRECT( x ) +#define PTR_INIT( x ) +#define TEST( x ) +#define POWER( x ) +#define LOG( x ) +#define MISC( x ) + +#define DADD( x ) +#define DMULT( x ) +#define DMAC( x ) +#define DMOVE( x ) +#define DSTORE( x ) +#define DLOGIC( x ) +#define DSHIFT( x ) +#define DDIV( x ) +#define DSQRT( x ) +#define DTRANS( x ) + +#endif + +#endif diff --git a/lib_dec/ACcontextMapping_dec.c b/lib_dec/ACcontextMapping_dec.c new file mode 100644 index 0000000000..10fb369741 --- /dev/null +++ b/lib_dec/ACcontextMapping_dec.c @@ -0,0 +1,684 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "ivas_rom_com.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_prot.h" /* Range coder header file */ +#include + +/*-------------------------------------------------------------------* + * ACcontextMapping_decode2_no_mem_s17_LC() + * + * Arithmetic decoder + *-------------------------------------------------------------------*/ + +/*! r: resQBits */ +int16_t ACcontextMapping_decode2_no_mem_s17_LC( + Decoder_State *st, /* i/o: decoder state */ + int16_t *x, /* o : decoded spectrum */ + int16_t nt, /* i : size of spectrum */ + int16_t nbbits, /* i : bit budget */ + int16_t resQMaxBits, /* i : residual coding maximum bits */ + CONTEXT_HM_CONFIG *hm_cfg /* i : context-based harmonic model configuration*/ +) +{ + Tastat as; + int16_t start_bit_pos, lsbs_bit_pos, overflow_bit_pos; + int16_t a, b, a1, b1, a1_i, b1_i, k; + uint16_t t; + int16_t lev, pki, esc_nb; + int16_t rateFlag; + int16_t lastnz, n; + uint16_t r; + int16_t resQBits; + int16_t rest_bits, rest_bits_overflow; + int16_t nt_half; + int32_t c[2], *ctx; + int32_t p1, p2; + int16_t ii[2]; + int16_t idx1, idx2, idx; + int16_t numPeakIndicesOrig, numHoleIndices; + int16_t nbbits_m2; + + set_s( x, 0, nt ); + + /* Rate flag */ + if ( nbbits > 400 ) + { + rateFlag = 2 << NBITS_CONTEXT; + } + else + { + rateFlag = 0; + } + + /*Decode number of ntuples*/ + start_bit_pos = st->next_bit_pos; + lsbs_bit_pos = start_bit_pos + nbbits - 1; + + n = 0; + k = 1; + nt_half = nt >> 1; + + while ( k < nt_half ) + { + ++n; + k = k << 1; + } + n = get_next_indice( st, n ) + 1; + + /* Init */ + c[0] = c[1] = 0; + + t = 0; + + lastnz = n << 1; + + if ( lastnz > nt || st->BER_detect ) + { + st->BER_detect = 1; + return 0; + } + + if ( hm_cfg ) + { + /* mapped domain */ + numPeakIndicesOrig = hm_cfg->numPeakIndices; + hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); + numHoleIndices = lastnz - hm_cfg->numPeakIndices; + + /* Mark hole indices beyond lastnz as pruned */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; + } + + ii[0] = numPeakIndicesOrig; + ii[1] = 0; + + p1 = p2 = 0; /* to avoid compilation warnings */ + } + else + { + /* unmapped domain */ + ii[0] = 0; + p1 = p2 = 0; + } + + /* Start Decoding */ + + ari_start_decoding_14bits( st, &as ); + overflow_bit_pos = st->next_bit_pos; + + nbbits_m2 = nbbits + cbitsnew - 2; + rest_bits_overflow = rest_bits = -nbbits_m2; + + /* Main Loop through the 2-tuples */ + for ( k = 0; k < lastnz; k += 2 ) + { + if ( hm_cfg ) + { + a1_i = get_next_coeff_mapped( ii, &p1, &idx1, hm_cfg ); + b1_i = get_next_coeff_mapped( ii, &p2, &idx2, hm_cfg ); + } + else + { + a1_i = get_next_coeff_unmapped( ii, &idx1 ); + b1_i = get_next_coeff_unmapped( ii, &idx2 ); + } + + idx = min( idx1, idx2 ); + + /* Get context */ + ctx = &c[p1 | p2]; + + t = (uint16_t) ( *ctx + rateFlag ); + t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); + + esc_nb = 0; + r = 0; + /* BER detection: Check max value of context t leading to out-of-bound access to ari_lookup_s17_LC[]*/ + if ( ( t >= ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ) ) || lsbs_bit_pos <= 0 ) + { + st->BER_detect = 1; + return 0; + } + + a = b = 0; + /* MSBs decoding */ + for ( lev = 0; lev < 15 && lsbs_bit_pos > 0; ++lev ) + { + esc_nb = min( lev, 3 ); + pki = ari_lookup_s17_LC[t + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + ari_decode_14bits_s17_ext( st, &r, &as, ari_pk_s17_LC_ext[pki] ); + + if ( r < VAL_ESC ) + { + break; + } + + /* LSBs decoding */ + a += get_indice_1( st, lsbs_bit_pos-- ) << lev; + b += get_indice_1( st, lsbs_bit_pos-- ) << lev; + } + + if ( ( lsbs_bit_pos < -1 && r >= VAL_ESC ) || ( lev > 14 ) ) + { + x[a1_i] = 0; + x[b1_i] = 0; + st->BER_detect = 1; + return 0; + } + + /* MSBs contributions */ + b1 = r >> 2; + a1 = r & 0x3; + a += a1 << lev; + b += b1 << lev; + + /* lsbs bits sign bits */ + rest_bits += 2 * lev; + + rest_bits += min( a, 1 ); + rest_bits += min( b, 1 ); + + /* Dectect overflow */ + + if ( st->next_bit_pos - start_bit_pos + rest_bits > 0 ) + { + /* Roll back bitstream position to overflow_bit_pos */ + get_next_indice_tmp( st, overflow_bit_pos - st->next_bit_pos ); + rest_bits = rest_bits_overflow; + x[a1_i] = 0; + x[b1_i] = 0; + break; + } + + overflow_bit_pos = st->next_bit_pos; + rest_bits_overflow = rest_bits; + + /* Store decoded data */ + x[a1_i] = a; + x[b1_i] = b; + + /* Update context for next 2-tuple */ + if ( p1 == p2 ) + { + /* peak-peak or hole-hole context */ + lev = esc_nb - 1; + + if ( lev <= 0 ) + { + t = 1 + ( a1 + b1 ) * ( lev + 2 ); + } + else + { + t = 13 + lev; + } + + *ctx = ( *ctx & 0xf ) * 16 + t; + } + else + { + /* mixed context */ + + if ( idx1 & 1 ) + { + /* update first context */ + c[p1] = update_mixed_context( c[p1], a ); + } + + if ( idx2 & 1 ) + { + /* update second context */ + c[p2] = update_mixed_context( c[p2], b ); + } + } + } + + /* Total number of decoded AC bits */ + get_next_indice_tmp( st, -( cbitsnew - 2 ) ); + + /* detect overflow */ + + if ( k != lastnz ) + { + rest_bits += nbbits_m2; + /* Set bitstream position to (start_bit_pos+nbbits-rest_bits) */ + get_next_indice_tmp( st, ( start_bit_pos + nbbits - rest_bits ) - st->next_bit_pos ); + } + + /* Decode signs */ + if ( hm_cfg ) + { + n = nt; + } + else + { + n = lastnz; + } + + for ( k = 0; k < n; k++ ) + { + if ( x[k] > 0 ) + { + x[k] *= 1 - 2 * get_next_indice_1( st ); + } + } + + /* Decode Residual Q */ + resQBits = min( resQMaxBits, lsbs_bit_pos + 1 - st->next_bit_pos ); + + for ( k = 0; k < resQBits; ++k ) + { + x[nt + k] = get_indice_1( st, lsbs_bit_pos - k ); + } + + /* Set bitstream pointer to end of buffer */ + get_next_indice_tmp( st, ( start_bit_pos + nbbits ) - st->next_bit_pos ); + + + return resQBits; +} + + +/*-------------------------------------------------------------------* + * RCcontextMapping_decode2_no_mem_s17_LCS() + * + * Range decoder + *-------------------------------------------------------------------*/ + +/*! r: resQBits */ +int16_t RCcontextMapping_decode2_no_mem_s17_LCS( + Decoder_State *st, /* i/o: decoder state */ + int16_t *x, /* o : decoded spectrum */ + const int16_t nt, /* i : size of spectrum */ + const int16_t nbbits, /* i : bit budget */ + const int16_t resQMaxBits, /* i : residual coding maximum bits */ + CONTEXT_HM_CONFIG *hm_cfg /* i : context-based harmonic model configuration*/ +) +{ + RangeUniDecState rc_st_dec; /* State of the range decoder */ + int16_t start_bit_pos, lsbs_bit_pos; + int16_t a, b, a1, b1, k; + uint16_t t; + int16_t lev, pki, esc_nb; + int16_t rateFlag; + int16_t lastnz, n; + uint16_t r; + int16_t resQBits; + int16_t rest_bits; + int16_t nt_half; + int16_t nbbits_m2; + int16_t bits_tups; /* No. of bits for coding the no. of tuples */ + + set_s( x, 0, nt ); + + /*Decode number of ntuples*/ + start_bit_pos = st->next_bit_pos; + lsbs_bit_pos = start_bit_pos + nbbits - 1; + n = 0; + k = 1; + nt_half = nt >> 1; + + while ( k < nt_half ) + { + ++n; + k = k << 1; + } + + bits_tups = n; + + n = get_next_indice( st, n ) + 1; + + t = 0; + + lastnz = n << 1; + + if ( lastnz > nt ) + { + st->BER_detect = 1; + return 0; + } + + if ( hm_cfg ) + { + int16_t a1_i, b1_i; + int32_t c[2], *ctx; + int32_t p1, p2; + int16_t ii[2]; + int16_t idx1, idx2, idx; + int16_t numPeakIndicesOrig, numHoleIndices; + + /* Rate flag */ + if ( nbbits > 400 ) + { + rateFlag = 2 << NBITS_CONTEXT; + } + else + { + rateFlag = 0; + } + + /* Init */ + c[0] = c[1] = 0; + + /* mapped domain */ + numPeakIndicesOrig = hm_cfg->numPeakIndices; + hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); + numHoleIndices = lastnz - hm_cfg->numPeakIndices; + + /* Mark hole indices beyond lastnz as pruned */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; + } + + ii[0] = numPeakIndicesOrig; + ii[1] = 0; + + p1 = p2 = 0; /* to avoid compilation warnings */ + + /* Start Decoding */ + /* Initialize range decoder */ + rc_uni_dec_init( &rc_st_dec, &st->bit_stream[st->next_bit_pos], nbbits ); /* (nbbits + 30) entries are read by the decoder */ + + nbbits_m2 = nbbits; + rest_bits = -nbbits_m2; + + /* Main Loop through the 2-tuples */ + for ( k = 0; k < lastnz; k += 2 ) + { + a1_i = get_next_coeff_mapped( ii, &p1, &idx1, hm_cfg ); + b1_i = get_next_coeff_mapped( ii, &p2, &idx2, hm_cfg ); + idx = min( idx1, idx2 ); + + /* Get context */ + ctx = &c[p1 | p2]; + + t = (uint16_t) ( *ctx + rateFlag ); + t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); + + esc_nb = 0; + r = 0; + + /* BER detection: Check max value of context t leading to out-of-bound access to ari_lookup_s17_LC[]*/ + if ( ( t >= ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ) ) || lsbs_bit_pos <= 0 ) + { + st->BER_detect = 1; + return 0; + } + + a = b = 0; + + /* MSBs decoding */ + for ( lev = 0; lev < 15 && lsbs_bit_pos > 0; ++lev ) + { + esc_nb = min( lev, 3 ); + pki = ari_lookup_s17_LC[t + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + r = rc_uni_dec_read_symbol_fastS( &rc_st_dec, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 17, 14 ); /*Alphabet size = 17 (2^4 = 16 MSB symbols + 1 ESC symbol) */ + /* r is the symbol read, the possible values are {0,1,....alphabet_size - 1} */ + + if ( r < VAL_ESC ) /* If symbol read corresponds to MSB */ + { + break; + } + + /* LSBs decoding */ + a += get_indice_1( st, lsbs_bit_pos-- ) << lev; + b += get_indice_1( st, lsbs_bit_pos-- ) << lev; + } + + if ( ( lsbs_bit_pos < -1 && r >= VAL_ESC ) || ( lev > 14 ) ) + { + x[a1_i] = 0; + x[b1_i] = 0; + st->BER_detect = 1; + return 0; + } + + /* MSBs contributions */ + b1 = r >> 2; + a1 = r & 0x3; + a += a1 << lev; + b += b1 << lev; + + /* Add 2 LSB bits per bit-plane */ + rest_bits += 2 * lev; + /* Sign bits */ + rest_bits += min( a, 1 ); + rest_bits += min( b, 1 ); + + /* Update bitstream pointer */ + st->next_bit_pos = start_bit_pos + bits_tups + rc_uni_dec_virtual_finish( &rc_st_dec ); + + /* Confirm that there is no overflow */ +#ifdef DEBUGGING + assert( st->next_bit_pos - start_bit_pos + rest_bits <= 0 ); +#endif + + /* Store decoded data */ + x[a1_i] = a; + x[b1_i] = b; + + /* Update context for next 2-tuple */ + if ( p1 == p2 ) + { + /* peak-peak or hole-hole context */ + lev = esc_nb - 1; + + if ( lev <= 0 ) + { + t = 1 + ( a1 + b1 ) * ( lev + 2 ); + } + else + { + t = 13 + lev; + } + + *ctx = ( *ctx & 0xf ) * 16 + t; + } + else + { + /* mixed context */ + + if ( idx1 & 1 ) + { + /* update first context */ + c[p1] = update_mixed_context( c[p1], a ); + } + + if ( idx2 & 1 ) + { + /* update second context */ + c[p2] = update_mixed_context( c[p2], b ); + } + } + } + + /* We don't need to finish because virtual_finish() already does the same */ + /*st->next_bit_pos = rc_uni_dec_finish(&rc_st_dec);*/ + + /* Check for bitstream errors */ + assert( rc_st_dec.bit_error_detected == 0 ); + + /* Cross-check: No overflow */ +#ifdef DEBUGGING + assert( k == lastnz ); +#endif + + /* Decode signs */ + n = nt; + } + else /* if(!hm_cfg) */ + { + int16_t c, rateQ; + uint16_t s; + + /* Rate flag */ + if ( nbbits > 400 ) + { + rateFlag = 2; + } + else + { + rateFlag = 0; + } + + /* Start Decoding */ + /* Initialize range decoder */ + rc_uni_dec_init( &rc_st_dec, &st->bit_stream[st->next_bit_pos], nbbits ); /* (nbbits + 30) entries are read by the decoder */ + + nbbits_m2 = nbbits; + rest_bits = -nbbits_m2; + + t = 0; + s = 0; + + /* Main Loop through the 2-tuples */ + for ( k = 0; k < lastnz; k += 2 ) + { + rateQ = rateFlag + ( k > ( nt_half ) ); + + /* BER detection: Check max value of context t leading to out-of-bound access to ari_lookup_s17_LC[]*/ + if ( ( t >= ( 1 << ( NBITS_CONTEXT ) ) ) || lsbs_bit_pos <= 0 ) + { + st->BER_detect = 1; + return 0; + } + + a = b = 0; + esc_nb = 0; + r = 0; + + /* MSBs decoding */ + for ( lev = 0; lev < 15 && lsbs_bit_pos > 0; ++lev ) + { + esc_nb = min( lev, 3 ); + pki = ari_lookup_s17_LC[t + ( ( rateQ ) << NBITS_CONTEXT ) + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + r = rc_uni_dec_read_symbol_fastS( &rc_st_dec, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 17, 14 ); /*Alphabet size = 17 (2^4 = 16 MSB symbols + 1 ESC symbol) */ + /* r is the symbol read, the possible values are {0,1,....alphabet_size - 1} */ + + if ( r < VAL_ESC ) /* If symbol read corresponds to MSB */ + { + break; + } + + /* LSBs decoding */ + a += get_indice_1( st, lsbs_bit_pos-- ) << lev; + b += get_indice_1( st, lsbs_bit_pos-- ) << lev; + } + + if ( ( lsbs_bit_pos < -1 && r >= VAL_ESC ) || ( lev > 14 ) ) + { + x[k + 0] = 0; + x[k + 1] = 0; + st->BER_detect = 1; + return 0; + } + + /* MSBs contributions */ + b1 = r >> 2; + a1 = r & 0x3; + a += a1 << lev; + b += b1 << lev; + + /* Add 2 LSB bits per bit-plane */ + rest_bits += 2 * lev; + /* Sign bits */ + rest_bits += min( a, 1 ); + rest_bits += min( b, 1 ); + + /* Update bitstream pointer */ + st->next_bit_pos = start_bit_pos + bits_tups + rc_uni_dec_virtual_finish( &rc_st_dec ); + + /* Confirm that there is no overflow */ +#ifdef DEBUGGING + assert( st->next_bit_pos - start_bit_pos + rest_bits <= 0 ); +#endif + + /* Store decoded data */ + x[k + 0] = a; + x[k + 1] = b; + + /* Update context for next 2-tuple */ + if ( esc_nb < 2 ) + { + c = 1 + ( ( a1 + b1 ) * ( esc_nb + 1 ) ); + } + else + { + c = 12 + esc_nb; + } + + s = s << 4; /*Shift old 4 bits*/ + s = s + c; /*replace last 4 bits*/ + t = s & 0xFF; + } + + /* Decode signs */ + n = lastnz; + } /* end of if(hm_cfg) */ + + for ( k = 0; k < n; k++ ) + { + if ( x[k] > 0 ) + { + x[k] *= 1 - 2 * get_next_indice_1( st ); + } + } + + /* Decode Residual Q */ + resQBits = min( resQMaxBits, lsbs_bit_pos + 1 - st->next_bit_pos ); + + for ( k = 0; k < resQBits; ++k ) + { + x[nt + k] = get_indice_1( st, lsbs_bit_pos - k ); + } + + /* Set bitstream pointer to end of buffer */ + get_next_indice_tmp( st, ( start_bit_pos + nbbits ) - st->next_bit_pos ); + + return resQBits; +} diff --git a/lib_dec/FEC.c b/lib_dec/FEC.c new file mode 100644 index 0000000000..3267092e7e --- /dev/null +++ b/lib_dec/FEC.c @@ -0,0 +1,580 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "rom_dec.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void gain_dec_bfi( float *past_qua_en ); + +static void pulseRes_preCalc( Word16 *cond1, Word16 *cond2, Word32 *cond3, Word16 new_pit, Word16 Tc, Word16 L_frame ); + + +/*-------------------------------------------------------------------* + * FEC_exc_estim() + * + * Calculation of excitation signal + *-------------------------------------------------------------------*/ + +void FEC_exc_estim( + Decoder_State *st, /* i/o: Decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + float *exc, /* o : pointer to excitation buffer (with past) */ + float *exc2, /* o : total excitation (for synthesis) */ + float *exc_dct_in, /* o : GSC excitation in DCT domain */ + float *pitch_buf, /* o : pitch buffer for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *tmp_tc, /* o : FEC pitch */ + float *bwe_exc, /* o : excitation for SWB TBE */ + float *lsf_new, /* i : ISFs at the end of the frame */ + float *tmp_noise /* o : long-term noise energy */ +) +{ + int16_t i, Tc, new_pit; + float exc2_buf[L_FRAME16k + MODE1_L_FIR_FER - 1]; + float *pt_exc, *pt1_exc, alpha, step, gain_inov, gain, gainCNG, hp_filt[5]; + float fT0, delta, ftmp; + int16_t Diff_len; + int16_t Len, max_len; + int16_t last_bin; + int16_t extrapolationFailed = 1; + float predPitchLag; + Word16 cond1, cond2; + Word32 cond3; + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + gainCNG = (float) sqrt( st->lp_ener ); + + ftmp = 2.0f * st->lp_gainc; + if ( gainCNG > ftmp ) + { + gainCNG = ftmp; + } + + Diff_len = 0; + set_f( exc_dct_in, 0.0f, L_FRAME16k ); + + /*-----------------------------------------------------------------* + * Pitch extrapolation + *-----------------------------------------------------------------*/ + + /* pitch extrapolation */ + pitch_pred_linear_fit( st->nbLostCmpt, st->last_good, st->old_pitch_buf, L_frame == L_FRAME ? &st->old_pitch_buf[2 * NB_SUBFR - 1] : &st->old_pitch_buf[2 * NB_SUBFR16k - 1], &predPitchLag, L_frame == L_FRAME ? PIT_MIN_DOUBLEEXTEND : PIT16k_MIN_EXTEND, L_frame == L_FRAME ? PIT_MAX : PIT16k_MAX, st->mem_pitch_gain, 0, 0, &extrapolationFailed, L_frame / L_SUBFR ); + + new_pit = (int16_t) ( predPitchLag + 0.5f ); + + /* initialize FEC pitch to the long-term pitch */ + *tmp_tc = st->bfi_pitch; + if ( L_frame == L_FRAME ) + { + if ( ( ( st->old_pitch_buf[2 * NB_SUBFR - 1] < 1.8f * st->bfi_pitch ) && + ( st->old_pitch_buf[2 * NB_SUBFR - 1] > 0.6f * st->bfi_pitch ) ) || /* last pitch coherent with the past */ + ( st->upd_cnt >= MAX_UPD_CNT ) ) /* or last update too far in the past */ + { + /* take the pitch value of last subframe of the previous frame */ + *tmp_tc = st->old_pitch_buf[2 * NB_SUBFR - 1]; + } + } + else /* L_frame == L_FRAME16k */ + { + if ( ( ( st->old_pitch_buf[2 * NB_SUBFR16k - 1] < 1.8f * st->bfi_pitch ) && + ( st->old_pitch_buf[2 * NB_SUBFR16k - 1] > 0.6f * st->bfi_pitch ) ) || /* last pitch coherent with the past */ + ( st->upd_cnt >= MAX_UPD_CNT ) ) /* or last update too far in the past */ + { + /* take the pitch value of last subframe of the previous frame */ + *tmp_tc = st->old_pitch_buf[2 * NB_SUBFR16k - 1]; + } + } + /* convert pitch period */ + Tc = (int16_t) ( *tmp_tc + 0.5f ); + + pulseRes_preCalc( &cond1, &cond2, &cond3, (Word16) new_pit, (Word16) Tc, (Word16) L_frame ); + + if ( ( cond1 < 0 ) && ( new_pit > 0 ) && ( cond2 != 0 ) && ( cond3 > 0 ) && extrapolationFailed == 0 ) + { + fT0 = *tmp_tc; + delta = (float) ( new_pit - fT0 ) / ( L_frame / L_SUBFR ); /* # of subframes */ + for ( i = 0; i < L_frame / L_SUBFR; i++ ) /* subframe pitch values */ + { + fT0 += delta; + pitch_buf[i] = (int16_t) ( fT0 + 0.5f ); + } + } + else + { + for ( i = 0; i < L_frame / L_SUBFR; i++ ) + { + pitch_buf[i] = *tmp_tc; + } + } + + /*-----------------------------------------------------------------* + * Estimate gain damping factor + *-----------------------------------------------------------------*/ + + alpha = ALPHA_VT; /* rapid convergence to 0 */ + if ( st->last_coder_type == UNVOICED && st->nbLostCmpt <= 3 ) + { + /* last good frame was clearly unvoiced */ + alpha = ALPHA_UU; + } + else if ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) + { + if ( st->hGSCDec->Last_GSC_pit_band_idx > 0 && st->nbLostCmpt > 1 ) + { + alpha = 0.8f; + } + else if ( st->nbLostCmpt <= 5 ) + { + alpha = 0.995f; + } + else + { + alpha = 0.95f; + } + } + else if ( st->last_good == UNVOICED_CLAS ) + { + if ( st->nbLostCmpt <= 1 ) + { + /* If stable, do not decrease the energy, pitch gain = 0 */ + alpha = st->stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; /* [0.8, 1.0] */ + } + else if ( st->nbLostCmpt == 2 ) + { + alpha = ALPHA_U * 1.5f; /* 0.6 */ + } + else + { + alpha = ALPHA_U; /* 0.4 go rapidly to CNG gain, pitch gain = 0 */ + } + } + else if ( st->last_good == UNVOICED_TRANSITION ) + { + alpha = ALPHA_UT; + } + else if ( st->last_good == ONSET && st->nbLostCmpt <= 3 && ( st->last_coder_type == GENERIC || st->last_coder_type == TRANSITION ) ) + { + alpha = 0.8f; /* mild convergence to 0 for the first 3 erased frames */ + } + else if ( ( st->last_good == VOICED_CLAS || st->last_good == ONSET ) && st->nbLostCmpt <= 3 ) + { + alpha = ALPHA_V; /* constant for the first 3 erased frames */ + } + else if ( st->last_good == SIN_ONSET ) + { + alpha = ALPHA_S; + } + + if ( st->last_good >= VOICED_CLAS && st->last_good < INACTIVE_CLAS && st->last_coder_type != AUDIO ) + { + if ( st->nbLostCmpt == 1 ) + { + /* if this is the first erased frame, move pitch gain towards 1 for voiced to remove energy fluctuations */ + gain = (float) sqrt( st->lp_gainp ); + if ( gain > 0.98f ) + { + gain = 0.98f; + } + else if ( gain < 0.85f ) + { + gain = 0.85f; + } + + alpha *= gain; + } + else + { + alpha = st->lp_gainp; + } + } + + /*-----------------------------------------------------------------* + * Extrapolate past excitation signal using estimated pitch period + *-----------------------------------------------------------------*/ + + if ( ( st->last_good >= UNVOICED_TRANSITION && st->last_good < INACTIVE_CLAS ) || + ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->hGSCDec->Last_GSC_pit_band_idx > 0 ) ) + { + /* Do pitch-based extrapolation only for stable voiced and audio signals */ + + pt_exc = exc; + pt1_exc = pt_exc - Tc; + + if ( st->nbLostCmpt == 1 ) + { + /* first pitch cycle is low-pass filtered */ + for ( i = 0; i < Tc; i++ ) + { + *pt_exc++ = ( 0.18f * pt1_exc[-1] + 0.64f * pt1_exc[0] + 0.18f * pt1_exc[1] ); + pt1_exc++; + } + } + + /* last pitch cycle of the previous frame is repeatedly copied up to an extra subframe */ + while ( pt_exc < exc + L_frame + L_SUBFR ) + { + *pt_exc++ = *pt1_exc++; + } + + /* resynchronization of excitation based on glottal pulse locations in the last good frame */ + if ( new_pit > 0 ) + { + if ( ( cond1 < 0 ) && ( new_pit > 0 ) && ( cond2 != 0 ) && ( cond3 > 0 ) && extrapolationFailed == 0 ) + { + mvr2r( exc, exc - L_frame - L_SUBFR, L_frame + L_SUBFR ); + PulseResynchronization( exc - L_frame - L_SUBFR, exc, L_frame, L_frame / L_SUBFR, Tc, new_pit ); + } + } + + if ( st->last_good == UNVOICED_TRANSITION && ( st->last_coder_type == GENERIC || st->last_coder_type == TRANSITION ) ) + { + /* start of the frame gain */ + gain = 0.0f; + + /* end of the frame gain */ + st->lp_gainp = 0.0f; + + step = 0.0f; + } + else + { + /* start of the frame gain */ + gain = 1.0f; + + /* end of the frame gain */ + st->lp_gainp = alpha; + + /* linearly attenuate the gain throughout the frame */ + step = ( 1.0f / L_frame ) * ( gain - st->lp_gainp ); + } + + /* scaling of the harmonic part of excitation */ + for ( i = 0; i < L_frame; i++ ) + { + exc[i] *= gain; + gain -= step; + } + + if ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->hGSCDec->Last_GSC_pit_band_idx > 0 ) + { + /* in case the last frame was coded by GSC, convert the excitation signal to frequency domain */ + edct( exc, exc_dct_in, st->L_frame, st->element_mode ); + + /* Reset unvaluable part of the adaptive (pitch) excitation contribution */ + Diff_len = (int16_t) ( mfreq_loc[st->hGSCDec->Last_GSC_pit_band_idx] / BIN_SIZE ); + max_len = st->L_frame - Diff_len; + Len = min( max_len, 80 ); + + for ( i = 0; i < Len; i++ ) + { + exc_dct_in[i + Diff_len] *= sm_table[i]; + } + + for ( ; i < max_len; i++ ) + { + exc_dct_in[i + Diff_len] = 0.0f; + } + + Diff_len++; + } + } + + /*-----------------------------------------------------------------* + * Replicate the last spectrum in case the last good frame was coded by GSC + *-----------------------------------------------------------------*/ + + if ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->total_brate <= ACELP_24k40 && !st->Opt_AMR_WB ) + { + /* Replication of the last spectrum, with a slight downscaling of its dynamic */ + st->GSC_noisy_speech = st->Last_GSC_noisy_speech_flag; + gsc_dec( st, exc_dct_in, st->hGSCDec->Last_GSC_pit_band_idx, Diff_len, 0, st->L_frame / L_SUBFR, st->last_coder_type, &last_bin, lsf_new, NULL, tmp_noise ); + + /* Transform back to time domain */ + edct( exc_dct_in, exc, st->L_frame, st->element_mode ); + } + + /*-----------------------------------------------------------------* + * Construct the random part of excitation + *-----------------------------------------------------------------*/ + + else + { + /* generate the random part of the excitation */ + for ( i = 0; i < L_frame + MODE1_L_FIR_FER - 1; i++ ) + { + exc2_buf[i] = (float) own_random( &st->seed ); + } + + /* start of the frame gain */ + gain = st->lp_gainc; + + /* end of the frame gain */ + st->lp_gainc = alpha * st->lp_gainc + ( 1.0f - alpha ) * gainCNG; + + if ( st->last_good == UNVOICED_TRANSITION && ( st->last_coder_type == GENERIC || st->last_coder_type == TRANSITION ) && gainCNG > 0 ) + { + st->lp_gainc = gainCNG; + } + + /* linearly attenuate the gain throughout the frame */ + step = ( 1.0f / L_frame ) * ( gain - st->lp_gainc ); + + /* calculate gain to normalize energy */ + pt_exc = exc2_buf + MODE1_L_FIR_FER / 2; + + gain_inov = 1.0f / (float) sqrt( dotp( pt_exc, pt_exc, L_frame ) / L_frame + 0.01f ); + + /* attenuate somewhat on unstable unvoiced */ + if ( ( st->last_good == UNVOICED_CLAS || st->last_good == INACTIVE_CLAS ) && st->last_coder_type != UNVOICED ) + { + gain_inov *= 0.8f; + } + + /* scaling of the random part of excitation */ + pt_exc = exc2_buf; + for ( i = 0; i < MODE1_L_FIR_FER / 2; i++ ) + { + /* non-causal ringing of the FIR filter */ + *pt_exc++ *= ( gain_inov * gain ); + } + + for ( i = 0; i < L_frame; i++ ) + { + /* the inner part of the FIR filter */ + *pt_exc++ *= ( gain_inov * gain ); + gain -= step; + } + + for ( i = 0; i < MODE1_L_FIR_FER / 2; i++ ) + { + /* causal ringing of the FIR filter */ + *pt_exc++ *= ( gain_inov * gain ); + } + } + + /*-----------------------------------------------------------------* + * Total excitation + *-----------------------------------------------------------------*/ + + if ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->total_brate <= ACELP_24k40 && !st->Opt_AMR_WB ) + { + /* For GSC - the excitation is already computed */ + mvr2r( exc, exc2, st->L_frame ); + } + else if ( st->last_good >= UNVOICED_TRANSITION && st->last_good < INACTIVE_CLAS ) + { + /* For voiced and generic signals - prepare a HP filter for the random part of excitation */ + for ( i = 0; i < MODE1_L_FIR_FER; i++ ) + { + hp_filt[i] = ( 1.0f - st->tilt_code ) * h_high[i]; + } + + /* HP filter the random part of the excitation and add the adaptive part */ + for ( i = 0; i < L_frame; i++ ) + { + exc2[i] = exc[i] + dotp( &exc2_buf[i], hp_filt, MODE1_L_FIR_FER ); + } + } + else + { + /* For purely unvoiced signals - just copy the unfiltered random part of the excitation */ + mvr2r( exc2_buf + MODE1_L_FIR_FER / 2, exc, L_frame ); + mvr2r( exc2_buf + MODE1_L_FIR_FER / 2, exc2, L_frame ); + } + + if ( st->hBWE_TD != NULL ) + { + if ( L_frame == L_FRAME ) + { + interp_code_5over2( exc, bwe_exc, L_frame ); + } + else + { + interp_code_4over2( exc, bwe_exc, L_frame ); + } + } + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + /* Update voicing factors of TBE */ + if ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) + { + if ( st->L_frame == L_FRAME ) + { + set_f( voice_factors, 1.0f, NB_SUBFR ); + } + else + { + set_f( voice_factors, 1.0f, NB_SUBFR16k ); + } + } + else + { + if ( st->L_frame == L_FRAME ) + { + set_f( voice_factors, st->last_voice_factor, NB_SUBFR ); + } + else + { + set_f( voice_factors, st->last_voice_factor, NB_SUBFR16k ); + } + } + + if ( st->Opt_AMR_WB ) + { + /* update buffer of gains for the next frame */ + gain_dec_bfi( st->hAmrwb_IO->past_qua_en ); + } + + st->bfi_pitch = pitch_buf[L_frame / L_SUBFR - 1]; + st->bfi_pitch_frame = st->L_frame; + + return; +} + + +/*-------------------------------------------------------------------* + * gain_dec_bfi() + * + * Estimate past quantized gain prediction residual to be used in + * next frame + *-------------------------------------------------------------------*/ + +static void gain_dec_bfi( + float *past_qua_en /* i/o: gain quantization memory (4 words) */ +) +{ + int16_t i; + float av_pred_en; + + av_pred_en = 0.0f; + for ( i = 0; i < GAIN_PRED_ORDER; i++ ) + { + av_pred_en += past_qua_en[i]; + } + + av_pred_en = (float) ( av_pred_en * ( 1.0f / (float) GAIN_PRED_ORDER ) - 3.0f ); + + if ( av_pred_en < -14.0f ) + { + av_pred_en = -14.0f; + } + + for ( i = GAIN_PRED_ORDER - 1; i > 0; i-- ) + { + past_qua_en[i] = past_qua_en[i - 1]; + } + + past_qua_en[0] = av_pred_en; + + return; +} + + +#define WMC_TOOL_MAN +/*-------------------------------------------------------------------* + * pulseRes_preCalc() + * + * calculates some conditions for Pulse resynchronization to take place + *-------------------------------------------------------------------*/ + +static void pulseRes_preCalc( + Word16 *cond1, + Word16 *cond2, + Word32 *cond3, + Word16 new_pit, + Word16 Tc, + Word16 L_frame ) +{ + Word16 tmp_pit, tmp_pit_e, tmp_frame, tmp_frame_e; + Word32 tmp_pit2; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + tmp_pit = BASOP_Util_Divide1616_Scale( new_pit /*Q0*/, Tc /*Q0*/, &tmp_pit_e ) /*Q15*/; + tmp_frame = add( extract_l( L_mult0( L_frame, 64 /*1.f/L_SUBFR Q12*/ ) /*Q12*/ ), 4096 /*1.f Q12*/ ); /*Q12*/ + tmp_frame = BASOP_Util_Divide1616_Scale( 4096 /*1.f Q12*/, tmp_frame, &tmp_frame_e ); /*Q15*/ + tmp_frame = shl( tmp_frame, add( tmp_frame_e, 1 ) ); + tmp_frame = sub( 32767 /*1.f Q15*/, tmp_frame ); /*Q15*/ + +#ifndef BASOP_NOGLOB + BASOP_SATURATE_WARNING_OFF +#endif /* ! BASOP_NOGLOB */ + /*To calc Q15 threshold, overflow may happen - do negation and compare with negated value to check also highest possible value*/ +#ifndef BASOP_NOGLOB + tmp_pit = shl( negate( tmp_pit ), tmp_pit_e ); + BASOP_SATURATE_WARNING_ON +#else /* BASOP_NOGLOB */ + tmp_pit = shl_o( negate( tmp_pit ), tmp_pit_e, &Overflow ); +#endif /* BASOP_NOGLOB */ + + *cond1 = sub( tmp_pit, negate( tmp_frame ) ); + + *cond2 = sub( Tc, new_pit ); + + tmp_pit_e = BASOP_Util_Add_MantExp( new_pit, 15 - 0, negate( Tc ), 15 - 0, &tmp_pit ); /*Q15*/ + tmp_pit = abs_s( tmp_pit ); + tmp_pit2 = L_mult( Tc, 4915 /*0.15f Q15*/ ); /*Q16*/ + + BASOP_SATURATE_WARNING_OFF + /*To calc Q15 threshold, overflow may happen - do negation and compare with negated value to check also highest possible value*/ + tmp_pit2 = L_shl( L_negate( tmp_pit2 ), sub( 15 - 16, tmp_pit_e ) ); + BASOP_SATURATE_WARNING_ON + + *cond3 = L_sub( L_mult0( -1, tmp_pit ), tmp_pit2 ); + + return; +} +#undef WMC_TOOL_MAN diff --git a/lib_dec/FEC_HQ_core.c b/lib_dec/FEC_HQ_core.c new file mode 100644 index 0000000000..53eca76982 --- /dev/null +++ b/lib_dec/FEC_HQ_core.c @@ -0,0 +1,1535 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_dec.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local prototypes + *---------------------------------------------------------------------*/ + +static int16_t FEC_phase_matching( HQ_NBFEC_HANDLE st, float *ImdctOut, float *auOut, float *OldauOut, float OldauOut_pha[2][N_LEAD_NB] ); + +static void FEC_phase_matching_nextgood( const float *ImdctOut, float *auOut, float *OldauOut, float OldauOut_pha[2][N_LEAD_NB], float mean_en_high ); + +static void FEC_phase_matching_burst( const float *ImdctOut, float *auOut, float *OldauOut, float OldauOut_pha[2][N_LEAD_NB], float *prev_oldauOut ); + +static void Repetition_smoothing_nextgood( const float *ImdctOut, float *auOut, float *OldImdctOut, float *OldauOut, int16_t cur_data_use_flag, int16_t overlap_time ); + +static int16_t Repetition_smoothing( const float *ImdctOut, float *auOut, float *OldImdctOut, float *OldauOut, const int16_t L, float *prev_oldauOut, int16_t overlap_time ); + +static void Windowing_1st_NB( float *ImdctOutWin, const float *ImdctOut, const float *win, const float *smoothingWin, const int16_t smoothing_flag ); + +static void Windowing_2nd_NB( float *ImdctOutWin, const float *ImdctOut, const float *win ); + +static void common_overlapping( float *auOut, float *ImdctOutWin, float *OldauOut, const int16_t end1, const int16_t offset1, const int16_t start2, const int16_t end2, const int16_t offset_i2, const int16_t offset2 ); + +static void Smoothing_vector_NB( const float OldauOutnoWin[], const float ImdctOutWin[], const float SmoothingWin[], float auOut[], const int16_t ol_size ); + +static void Smoothing_vector_scaledown_NB( const float OldauOutnoWin[], const float ImdctOutWin[], const float SmoothingWin[], float auOut[], const int16_t ol_size ); + + +/*--------------------------------------------------------------------------* + * Regression_Anal() + * + * + *--------------------------------------------------------------------------*/ + +static void Regression_Anal( + const float *values, /* i : Previous values */ + float *r_p, /* o : Output r[a b] array : y=ax+b */ + const int16_t num_pgf /* i : Number of previous good frame */ +) +{ + int16_t i; + float aindex[MAX_PGF + 1], b_p[MAX_PGF + 1]; + + /* Initialize */ + for ( i = 0; i < num_pgf + 1; i++ ) + { + aindex[i] = 0.f; + b_p[i] = 0.f; + } + + /* [aindex[0] aindex[1]][r[0]]=[b[0]]*/ + /* [aindex[1] aindex[2]][r[1]] [b[1]]*/ + /* r[0] is the y-intercept(initial value). r[1] is slope*/ + + /* r[0] = (b[0]a[2]-a[1]b[1])/(a[0]a[2]-a[1]a[1]) + r[1] = (b[0]a[1]-a[0]b[1])/(a[1]a[1]-a[0]a[2]) */ + + aindex[0] = num_pgf; + for ( i = 1; i < num_pgf + 1; i++ ) + { + aindex[1] += (float) i; + aindex[2] += ( (float) i * (float) i ); + } + /* Calculate b[] */ + for ( i = 0; i < num_pgf; i++ ) + { + b_p[0] += ( values[i] ); + b_p[1] += ( (float) ( num_pgf - i ) * values[i] ); + } + r_p[0] = ( b_p[0] * aindex[2] - aindex[1] * b_p[1] ) / ( aindex[0] * aindex[2] - aindex[1] * aindex[1] ); + r_p[1] = ( b_p[0] * aindex[1] - aindex[0] * b_p[1] ) / ( aindex[1] * aindex[1] - aindex[0] * aindex[2] ); + + return; +} + + +/*--------------------------------------------------------------------------* + * FEC_scaling() + * + * + *--------------------------------------------------------------------------*/ +static void FEC_scaling( + float *old_coeffs, /* i/o: Pointer to old MDCT coeffs. */ + float *t_audio_q, /* o : MDCT coeffs. (for synthesis) */ + float *Norm_gain, /* i : Gain for Norm of each band */ + int16_t *HQ_FEC_seed, /* i/o: Seed for Ransom number Generator */ + int16_t nb_sfm, /* i : Number of sub-band */ + const int16_t *start_band, + const int16_t *end_band ) +{ + int16_t i, j; + + for ( i = 0; i < RANDOM_START; i++ ) + { + for ( j = start_band[i]; j < end_band[i]; j++ ) + { + t_audio_q[j] = Norm_gain[i] * old_coeffs[j]; + } + } + + for ( i = RANDOM_START; i < nb_sfm; i++ ) + { + for ( j = start_band[i]; j < end_band[i]; j++ ) + { + if ( (float) own_random( HQ_FEC_seed ) < 0.f ) + { + t_audio_q[j] = Norm_gain[i] * ( -old_coeffs[j] ); + } + else + { + t_audio_q[j] = Norm_gain[i] * old_coeffs[j]; + } + } + } + return; +} + + +/*--------------------------------------------------------------------------* + * HQ_FEC_processing() + * + * + *--------------------------------------------------------------------------*/ + +void HQ_FEC_processing( + Decoder_State *st, /* i/o: decoder state structure */ + float *t_audio_q, /* o : MDCT coeffs. (for synthesis) */ + int16_t is_transient, /* i : Old flag for transient */ + float ynrm_values[][MAX_PGF], /* i : Old average Norm values for each group of bands */ + float r_p_values[][MAX_ROW], /* i : Computed y-intercept and slope by Regression */ + int16_t num_Sb, /* i : Number of sub-band group */ + int16_t nb_sfm, /* i : Number of sub-band */ + int16_t *Num_bands_p, /* i : Number of coeffs. for each sub-band */ + int16_t output_frame, /* i : Frame size */ + const int16_t *sfm_start, /* i : Start of bands */ + const int16_t *sfm_end /* i : End of bands */ +) +{ + int16_t i, j, k; + float energy_diff; + int16_t mute_start, num_pgf; + int16_t Num_sb_bwe; + float tmp, norm_p[MAX_SB_NB]; + float *norm_values; + float *r_p; + int16_t sfm; + + HQ_DEC_HANDLE hHQ_core = st->hHQ_core; + HQ_NBFEC_HANDLE hHQ_nbfec = st->hHQ_nbfec; + + + /* Make sure 'energy_MA_Curr[0]' is not zero to prevent a 'div by 0' error. */ + if ( hHQ_nbfec->energy_MA_Curr[0] < 1.0f ) + { + hHQ_nbfec->energy_MA_Curr[0] = 1.0f; /*It seems to be in Q0 the FxP*/ + } + /* Decide the start frame number for adaptive muting */ + /* Normalized energy difference between the current frame and the moving average */ + energy_diff = (float) fabs( ( hHQ_nbfec->energy_MA_Curr[1] - hHQ_nbfec->energy_MA_Curr[0] ) / hHQ_nbfec->energy_MA_Curr[0] ); + + if ( ( energy_diff < ED_THRES ) && ( is_transient == 0 ) ) /* First erasure frame */ + { + mute_start = 5; + } + else + { + mute_start = 2; + } + + if ( st->prev_old_bfi == 1 && st->nbLostCmpt == 1 && output_frame == L_FRAME8k ) + { + st->nbLostCmpt++; + } + + /* Frequency-domain FEC */ + if ( st->nbLostCmpt == 1 ) /* First erasure frame */ + { + if ( is_transient == 0 ) + { + if ( energy_diff < ED_THRES ) + { + for ( i = 0; i < output_frame; i++ ) + { + t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; + } + } + else + { + for ( i = 0; i < output_frame; i++ ) + { + hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; + t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; + } + } + + /* Sign prediction in 4-dim bands up to 1.6 kHz*/ + if ( hHQ_core->old_is_transient[1] == 0 ) + { + if ( hHQ_core->old_is_transient[2] == 0 ) + { + for ( sfm = 0; sfm < HQ_FEC_SIGN_SFM; sfm++ ) + { + if ( hHQ_nbfec->prev_sign_switch[sfm] >= HQ_FEC_SIGN_THRES ) + { + for ( i = 0; i < HQ_FEC_BAND_SIZE; i++ ) + { + t_audio_q[i + sfm * HQ_FEC_BAND_SIZE] *= -1.0f; + } + } + } + } + else + { + for ( sfm = 0; sfm < HQ_FEC_SIGN_SFM; sfm++ ) + { + if ( hHQ_nbfec->prev_sign_switch[sfm] >= HQ_FEC_SIGN_THRES_TRANS ) + { + for ( i = 0; i < HQ_FEC_BAND_SIZE; i++ ) + { + t_audio_q[i + sfm * HQ_FEC_BAND_SIZE] *= -1.0f; + } + } + } + } + } + else + { + for ( i = RANDOM_START * 8; i < output_frame; i++ ) + { + if ( (float) own_random( &hHQ_nbfec->HQ_FEC_seed ) < 0.0f ) + { + t_audio_q[i] *= -1.0f; + } + } + } + } + else + { + if ( hHQ_core->old_is_transient[1] ) /* hangover */ + { + for ( i = 0; i < output_frame; i++ ) + { + hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; + t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; + } + } + else + { + for ( i = 0; i < RANDOM_START * 8; i++ ) + { + hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; + t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; + } + + for ( i = RANDOM_START * 8; i < output_frame; i++ ) + { + hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; + if ( (float) own_random( &hHQ_nbfec->HQ_FEC_seed ) < 0.0f ) + { + t_audio_q[i] = ( -hHQ_nbfec->old_coeffs[i] ); + } + else + { + t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; + } + } + } + } + } + else /* st->nbLostCmpt > 1 */ + { + if ( energy_diff < ED_THRES && is_transient == 0 ) + { + num_pgf = 4; + } + else + { + num_pgf = 2; + } + + Num_sb_bwe = num_Sb; + if ( st->nbLostCmpt == 2 ) + { + for ( i = 0; i < Num_sb_bwe; i++ ) + { + norm_values = &ynrm_values[i][0]; + r_p = &r_p_values[i][0]; + Regression_Anal( norm_values, r_p, num_pgf ); + } + } + + /* Fade-out Norm by the result of Regression */ + if ( st->nbLostCmpt >= mute_start ) + { + /* Scaling */ + for ( i = 0; i < output_frame; i++ ) + { + hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; + } + } + + k = 0; + for ( i = 0; i < Num_sb_bwe; i++ ) + { + norm_values = &ynrm_values[i][0]; + r_p = &r_p_values[i][0]; + + /* Predict the average energy of each sub-band using Regression */ + /* Linear Regression */ + if ( r_p[1] > MAX_TILT ) + { + r_p[1] = MAX_TILT; + norm_p[i] = (float) ( norm_values[0] + r_p[1] * (float) ( st->nbLostCmpt - 1 ) ); + } + else + { + norm_p[i] = (float) ( r_p[0] + r_p[1] * (float) ( st->nbLostCmpt - 1 + num_pgf ) ); + } + + if ( norm_values[0] != 0.0f && norm_p[i] > 0.0f ) /* Avoid negative value of the predicted energy */ + { + tmp = norm_p[i] / norm_values[0]; /* Pred_new / Old */ + + if ( tmp > 1.0f ) + { + tmp = 1.f; + } + + for ( j = 0; j < Num_bands_p[i]; j++ ) + { + hHQ_nbfec->Norm_gain[k++] = tmp; + } + } + else + { + /* Scale down the last gain with the fixed gain(-3dB) */ + for ( j = 0; j < Num_bands_p[i]; j++ ) + { + hHQ_nbfec->Norm_gain[k++] *= SCALE_DOWN_3dB; + } + } + } + + /* Scaling for core band */ + FEC_scaling( hHQ_nbfec->old_coeffs, t_audio_q, hHQ_nbfec->Norm_gain, &hHQ_nbfec->HQ_FEC_seed, nb_sfm, sfm_start, sfm_end ); + } + + return; +} + + +/*--------------------------------------------------------------------------* + * HQ_FEC_Mem_update() + * + * + *--------------------------------------------------------------------------*/ + +void HQ_FEC_Mem_update( + Decoder_State *st, /* i/o: decoder state structure */ + const float *t_audio_q, + float *normq, + int16_t *ynrm, + const int16_t *Num_bands_p, + const int16_t is_transient, + const int16_t hqswb_clas, + const int16_t c_switching_flag, + const int16_t nb_sfm, + const int16_t num_Sb, + float *mean_en_high, + const int16_t hq_core_type, /* i : normal or low-rate MDCT(HQ) core */ + const int16_t output_frame /* i : Frame size */ +) +{ + int16_t i, j, k; + float tmp; + float tmp_energy = 0; + float *norm_values; + int16_t offset; + int16_t Min_ind; + int16_t Min_value; + float Max_coeff; + int16_t Max_ind; + int16_t stat_mode_curr; + float en_high[MAX_SB_NB]; + + HQ_DEC_HANDLE hHQ_core = st->hHQ_core; + HQ_NBFEC_HANDLE hHQ_nbfec = st->hHQ_nbfec; + + if ( output_frame == L_FRAME8k ) + { + if ( is_transient ) + { + set_s( hHQ_nbfec->prev_sign_switch_2, 0, HQ_FEC_SIGN_SFM ); + set_s( hHQ_nbfec->prev_sign_switch, 0, HQ_FEC_SIGN_SFM ); + } + else + { + for ( j = 0; j < HQ_FEC_SIGN_SFM; j++ ) + { + hHQ_nbfec->prev_sign_switch[j] = hHQ_nbfec->prev_sign_switch_2[j]; + hHQ_nbfec->prev_sign_switch_2[j] = 0; + + for ( i = 0; i < HQ_FEC_BAND_SIZE; i++ ) + { + tmp = hHQ_nbfec->old_coeffs[i + j * HQ_FEC_BAND_SIZE] * t_audio_q[i + j * HQ_FEC_BAND_SIZE]; + if ( tmp < 0 ) + { + hHQ_nbfec->prev_sign_switch[j]++; + hHQ_nbfec->prev_sign_switch_2[j]++; + } + } + } + } + + /* if LR MDCT core is used, recalculate norms from decoded MDCT spectrum (using code from hq_hr_enc()) */ + if ( ( hqswb_clas == HQ_HVQ ) || ( hq_core_type == LOW_RATE_HQ_CORE ) ) + { + /* First group */ + logqnorm( t_audio_q, ynrm, 32, WID_G1, thren_HQ ); + j = ynrm[0]; + offset = WID_G1; + + for ( i = 1; i < SFM_G1; i++ ) + { + logqnorm( &t_audio_q[offset], &ynrm[i], 40, WID_G1, thren_HQ ); + offset += WID_G1; + } + + /* Second group */ + for ( i = SFM_G1; i < SFM_G1 + 2; i++ ) + { + logqnorm( &t_audio_q[offset], &ynrm[i], 40, WID_G2, thren_HQ ); + offset += WID_G2; + } + } + + /* Memory update for the LGF log2 Norm */ + for ( i = 0; i < nb_sfm; i++ ) + { + normq[i] = dicn[ynrm[i]]; + } + + k = 0; + for ( i = 0; i < num_Sb; i++ ) + { + norm_values = &hHQ_nbfec->ynrm_values[i][0]; + mvr2r( norm_values, &norm_values[1], MAX_PGF - 1 ); + + tmp = 0.f; + for ( j = 0; j < Num_bands_p[i]; j++ ) + { + tmp += (float) normq[k++]; + } + norm_values[0] = tmp / (float) Num_bands_p[i]; + tmp_energy += tmp; + } + + if ( ( c_switching_flag ) || ( ( st->last_core == ACELP_CORE ) && ( st->core == HQ_CORE ) ) ) + { + for ( i = 0; i < MAX_SB_NB; i++ ) + { + for ( j = 1; j < MAX_PGF; j++ ) + { + hHQ_nbfec->ynrm_values[i][j] = hHQ_nbfec->ynrm_values[i][0]; + } + } + } + set_f( hHQ_nbfec->Norm_gain, 1.f, SFM_N_NB ); + + /* hHQ_nbfec->energy_MA_Curr[1]=Energy of the current frame */ + hHQ_nbfec->energy_MA_Curr[1] = tmp_energy / (float) nb_sfm; + + /* Moving Average */ + hHQ_nbfec->energy_MA_Curr[0] = 0.8f * hHQ_nbfec->energy_MA_Curr[0] + 0.2f * hHQ_nbfec->energy_MA_Curr[1]; + + hHQ_nbfec->diff_energy = (float) fabs( ( hHQ_nbfec->energy_MA_Curr[1] - hHQ_nbfec->energy_MA_Curr[0] ) / hHQ_nbfec->energy_MA_Curr[0] ); + /* Classify the stationary mode : 12% */ + if ( ( hHQ_nbfec->diff_energy < ED_THRES_12P ) ) + { + stat_mode_curr = 1; + } + else + { + stat_mode_curr = 0; + } + + /* Apply Hysteresis to prevent frequent mode changing */ + if ( hHQ_nbfec->stat_mode_old == stat_mode_curr ) + { + hHQ_nbfec->stat_mode_out = stat_mode_curr; + } + + hHQ_nbfec->stat_mode_old = stat_mode_curr; + + + /* Find max. band index (Minimum value means maximum energy) */ + Min_ind = 0; + Min_value = 100; + for ( i = 0; i < num_Sb; i++ ) + { + if ( Min_value > ynrm[i] ) + { + Min_value = ynrm[i]; + Min_ind = i; + } + } + + /* Find max. coeff in band 0 */ + Max_ind = 0; + if ( Min_ind == 0 ) + { + Max_coeff = 0.f; + for ( i = 0; i < 8; i++ ) + { + tmp = (float) fabs( t_audio_q[i] ); + if ( Max_coeff < tmp ) + { + Max_coeff = tmp; + Max_ind = i; + } + } + } + + /* Find energy difference from band 16 */ + k = 1; + + for ( i = k; i < num_Sb; i++ ) + { + en_high[i] = 0.f; + for ( j = 0; j < 2; j++ ) + { + en_high[i] += 0.5f * hHQ_nbfec->ynrm_values[i][j + 1]; + } + } + + *mean_en_high = 0.f; + for ( i = k; i < num_Sb; i++ ) + { + *mean_en_high += (float) ( en_high[i] / hHQ_nbfec->ynrm_values[i][0] ); + } + *mean_en_high /= (float) ( num_Sb - k ); + + if ( ( Min_ind < 5 ) && ( abs( Min_ind - hHQ_nbfec->old_Min_ind ) < 2 ) && ( hHQ_nbfec->diff_energy < ED_THRES_90P ) && ( !st->bfi ) && ( !st->prev_bfi ) && ( !st->prev_old_bfi ) && ( !is_transient ) && ( !hHQ_core->old_is_transient[1] ) && ( hHQ_nbfec->prev_last_core == HQ_CORE ) && ( st->last_core == HQ_CORE ) ) + { + if ( ( Min_ind == 0 ) && ( Max_ind < 3 ) ) + { + hHQ_nbfec->phase_mat_flag = 0; + } + else + { + hHQ_nbfec->phase_mat_flag = 1; + } + } + else + { + hHQ_nbfec->phase_mat_flag = 0; + } + + hHQ_nbfec->old_Min_ind = Min_ind; + + for ( i = 0; i < L_FRAME8k; i++ ) + { + hHQ_nbfec->old_coeffs[i] = t_audio_q[i]; + } + } + + hHQ_core->old_is_transient[2] = hHQ_core->old_is_transient[1]; + hHQ_core->old_is_transient[1] = hHQ_core->old_is_transient[0]; + hHQ_core->old_is_transient[0] = is_transient; + + return; +} + +/*--------------------------------------------------------------------------* + * find_best_delay() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t find_best_delay( + float *mu_o, + float *in, + int16_t mind1, + int16_t maxd1, + int16_t lin, + int16_t delta, + int16_t *false_flag + +) +{ + int16_t i, d1, k; + int16_t d1m = 0; + float min_sq_cross, min_corr; + float accA, accB; + float Rxy[MAXDELAY_FEC], Ryy[MAXDELAY_FEC]; + + for ( k = 0, d1 = mind1; k < ( maxd1 - mind1 ) / delta; d1 += delta, k++ ) + { + accA = accB = 0; + for ( i = 0; i < lin; i += delta ) + { + accA += mu_o[d1 + i] * mu_o[d1 + i]; + accB += mu_o[d1 + i] * in[i]; + } + + Rxy[k] = accB; + Ryy[k] = accA; + } + + /* Obtain the best delay values */ + min_sq_cross = -FLT_MAX; + min_corr = 0; + + for ( d1 = 0; d1 < ( maxd1 - mind1 ) / delta; d1++ ) + { + if ( Rxy[d1] * min_corr >= min_sq_cross * Ryy[d1] ) + { + d1m = d1; + min_corr = Ryy[d1]; + min_sq_cross = Rxy[d1]; + } + } + d1m *= delta; + + if ( min_sq_cross <= 0.f || min_corr <= 0.f ) + { + accA = 0.f; + } + else + { + accA = min_sq_cross / min_corr; + } + if ( accA < 0.5 || accA > 1.5 ) + { + *false_flag = 1; + } + else + { + *false_flag = 0; + } + + return d1m; +} + +/*--------------------------------------------------------------------------* + * Search_Max_Corr() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t Search_Max_Corr( + float *mu_o, /* i : *old_auOut_2fr */ + int16_t old_Min_ind, /* i : * Old Minimum index */ + const int16_t L /* i : L/2 */ +) +{ + int16_t pos; + int16_t pos2, delta2; + int16_t lin, delta; + int16_t mind1, maxd1; + float *in; + int16_t false_flag; + int16_t min_d1, max_d1; + + if ( old_Min_ind == 0 ) + { + lin = 8 * L / 20; /* Basic size of the block for phase matching */ + + mind1 = 0; /* min value of delay d1 to search for */ + maxd1 = 12 * L / 20; /* max value of delay d1 to search for */ + + in = mu_o + 2 * L - lin; + + /* generate correlation */ + delta = 2; + delta2 = 1; + + pos = find_best_delay( mu_o, in, mind1, maxd1, lin, delta, &false_flag ); + + if ( false_flag ) + { + return 0; + } + min_d1 = max( mind1, mind1 + pos - delta + 1 ); + max_d1 = min( maxd1, mind1 + pos + delta ); + pos2 = find_best_delay( mu_o, in, min_d1, max_d1, lin, delta2, &false_flag ); + + if ( mind1 > ( mind1 + pos - delta + 1 ) ) + { + pos = pos2; + } + else + { + pos = pos + pos2 - delta + 1; + } + pos = pos + lin + mind1; + } + else + { + lin = 6 * L / 20; + + mind1 = 9 * L / 20; /* min value of delay d1 to search for */ + maxd1 = 14 * L / 20; /* max value of delay d1 to search for */ + + in = mu_o + 2 * L - lin; + + /* generate correlation */ + delta = 2; + delta2 = 1; + + pos = find_best_delay( mu_o, in, mind1, maxd1, lin, delta, &false_flag ); + + if ( false_flag ) + { + return 0; + } + + min_d1 = max( mind1, mind1 + pos - delta + 1 ); + max_d1 = min( maxd1, mind1 + pos + delta ); + pos2 = find_best_delay( mu_o, in, min_d1, max_d1, lin, delta2, &false_flag ); + + if ( mind1 > ( mind1 + pos - delta + 1 ) ) + { + pos = pos2; + } + else + { + pos = pos + pos2 - delta + 1; + } + + pos = pos + lin + mind1; + } + + return pos; +} + +/*--------------------------------------------------------------------------* + * FEC_phase_matching() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t FEC_phase_matching( + HQ_NBFEC_HANDLE st, /* i/o: HQ NB FEC handle */ + float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, + float OldauOut_pha[2][N_LEAD_NB] ) +{ + int16_t i; + float ImdctOutWin[2 * L_FRAME8k]; + int16_t pos, remain; + int16_t ol_size; + float OldauOutnoWin[L_FRAME8k]; + int16_t L_overlap, L; + float OldauOut2[L_FRAME8k]; + float pow1 = 0, pow22 = 0; + float win_NB[L_FRAME8k + 25]; + float SmoothingWin_NB3[24]; + + L = L_FRAME8k; + + for ( i = 0; i < 3 * L / 20; i++ ) + { + SmoothingWin_NB3[i] = SmoothingWin_NB875[i * 3]; + } + + for ( i = 0; i < L + 25; i++ ) + { + win_NB[i] = window_48kHz[i * 6 + 3]; + } + + set_f( ImdctOutWin, 0.0, 2 * L ); + + /* OLA */ + ol_size = 2 * L / 20; + pos = Search_Max_Corr( st->old_auOut_2fr, st->old_Min_ind, L ); + + if ( pos == 0 ) + { + return 1; + } + + /* Repetition */ + remain = L + N_Z_L_NB - ( ( 2 * L ) - pos ); + mvr2r( &st->old_auOut_2fr[pos], &ImdctOutWin[N_ZERO_NB], ( 2 * L ) - pos ); + + /* OldauOut without windowing */ + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + OldauOutnoWin[i - N_ZERO_NB] = -st->oldIMDCTout[L / 2 - 1 - i]; + } + for ( i = 0; i < L / 2; i++ ) + { + OldauOutnoWin[i + N_ZERO_O_NB] = -st->oldIMDCTout[i]; + } + + mvr2r( OldauOutnoWin, &ImdctOutWin[N_ZERO_NB + ( 2 * L ) - pos], remain ); + + for ( i = 0; i < L; i++ ) + { + pow1 += (float) fabs( st->old_auOut_2fr[L + i] ); + pow22 += (float) fabs( ImdctOutWin[N_ZERO_NB + i] ); + } + if ( pow22 != 0 ) + { + pow1 /= pow22; + for ( i = N_ZERO_NB; i < 2 * L; i++ ) + { + ImdctOutWin[i] *= pow1; + } + } + Smoothing_vector_NB( OldauOutnoWin, &ImdctOutWin[N_ZERO_NB], SmoothingWin_NB2, auOut, ol_size ); + + for ( i = 0; i < L / 2; i++ ) + { + ImdctOutWin[3 * L / 2 + i] *= win_NB[L / 2 - i - 1]; + } + + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + ImdctOutWin[L + i] *= win_NB[( L - 1 - i )]; + } + mvr2r( &ImdctOutWin[N_Z_L_O_NB], &OldauOut_pha[0][0], N_LEAD_NB ); + mvr2r( &ImdctOutWin[ol_size + N_ZERO_NB], &auOut[ol_size], N_Z_L_NB - ol_size ); + mvr2r( &ImdctOutWin[L], &auOut[N_Z_L_NB], N_ZERO_NB ); + mvr2r( &ImdctOutWin[L], OldauOut, L ); + + for ( i = 0; i < L / 2; i++ ) + { + OldauOut2[i] = -ImdctOut[L / 2 - 1 - i]; + OldauOut2[L / 2 + i] = -ImdctOut[i]; + } + + L_overlap = 3 * L / 20; + Smoothing_vector_NB( &ImdctOutWin[N_Z_L_O_NB], &OldauOut2[N_ZERO_NB], SmoothingWin_NB3, &OldauOut_pha[1][0], L_overlap ); + + for ( i = L_overlap; i < N_LEAD_NB; i++ ) + { + OldauOut_pha[1][i] = OldauOut2[i + N_ZERO_NB]; + } + + return 0; +} + +/*--------------------------------------------------------------------------* + * FEC_phase_matching_nextgood() + * + * + *--------------------------------------------------------------------------*/ + +void FEC_phase_matching_nextgood( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + float OldauOut_pha[2][N_LEAD_NB], + float mean_en_high ) +{ + int16_t i; + float ImdctOutWin[2 * L_FRAME8k]; + int16_t L_overlap, L; + int16_t oldout_pha_idx; + float *OldOut_pha; + float win_NB[L_FRAME8k + 25]; + + L = L_FRAME8k; + for ( i = 0; i < L + 25; i++ ) + { + win_NB[i] = window_48kHz[i * 6 + 3]; + } + + if ( ( mean_en_high > 2.f ) || ( mean_en_high < 0.5f ) ) + { + oldout_pha_idx = 1; + } + else + { + oldout_pha_idx = 0; + } + + /* Overlapping with next good frame : Overlapping to remove the discontinuity */ + L_overlap = N_LEAD_NB; + OldOut_pha = OldauOut_pha[oldout_pha_idx]; + for ( i = 0; i < N_LEAD_NB; i++ ) + { + OldOut_pha[i] *= SmoothingWin_NB875[L_overlap - i - 1]; + } + + if ( oldout_pha_idx == 1 ) + { + /* Use phase matching and overlapping with the Oldauout*/ + /* Windowing */ + Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); + Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); + } + else + { + /* Only use phase matching */ + /* Windowing */ + Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, SmoothingWin_NB875, 1 ); + Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); + } + + common_overlapping( auOut, ImdctOutWin, OldOut_pha, N_LEAD_NB, 0, N_LEAD_NB, L, N_ZERO_NB, 0 ); + mvr2r( &ImdctOutWin[L], OldauOut, L ); + + return; +} + +/*--------------------------------------------------------------------------* + * FEC_phase_matching_burst() + * + * + *--------------------------------------------------------------------------*/ + +static void FEC_phase_matching_burst( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + float OldauOut_pha[2][N_LEAD_NB], + float *prev_oldauOut /* i : OldauOut from previous frame */ +) +{ + int16_t i; + int16_t L_overlap; + float OldauOut2[L_FRAME8k]; + float ImdctOutWin[2 * L_FRAME8k]; + int16_t L; + float win_NB[L_FRAME8k + 25]; + float SmoothingWin_NB3[24]; + + L = L_FRAME8k; + + for ( i = 0; i < 3 * L / 20; i++ ) + { + SmoothingWin_NB3[i] = SmoothingWin_NB875[i * 3]; + } + + for ( i = 0; i < L + 25; i++ ) + { + win_NB[i] = window_48kHz[i * 6 + 3]; + } + + /* Windowing */ + Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); + Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); + + /* Repetition with old frame to reserve energy */ + common_overlapping( auOut, ImdctOutWin, prev_oldauOut, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); + + /* data transition from OldauOut to auOut using smoothing win*/ + Smoothing_vector_NB( OldauOut_pha[0], auOut, SmoothingWin_NB875, auOut, N_LEAD_NB ); + + /* Update the OldauOut array for next overlapping */ + mvr2r( &ImdctOutWin[N_Z_L_O_NB], &OldauOut_pha[0][0], N_LEAD_NB ); + mvr2r( &ImdctOutWin[L], OldauOut, L ); + v_multc( prev_oldauOut, SCALE_DOWN_3dB, prev_oldauOut, L ); + + for ( i = 0; i < L / 2; i++ ) + { + OldauOut2[i] = -ImdctOut[L / 2 - 1 - i]; + OldauOut2[L / 2 + i] = -ImdctOut[i]; + } + + L_overlap = 3 * L / 20; + Smoothing_vector_NB( &ImdctOutWin[N_Z_L_O_NB], &OldauOut2[N_ZERO_NB], SmoothingWin_NB3, &OldauOut_pha[1][0], L_overlap ); + + for ( i = L_overlap; i < N_LEAD_NB; i++ ) + { + OldauOut_pha[1][i] = OldauOut2[i + N_ZERO_NB]; + } + + return; +} + + +/*--------------------------------------------------------------------------* + * Repetition_smoothing_nextgood() + * + * + *--------------------------------------------------------------------------*/ + +static void Repetition_smoothing_nextgood( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldImdctOut, /* i : input */ + float *OldauOut, /* i/o: audio from previous frame */ + int16_t cur_data_use_flag, /* i : current imdct data use flag */ + int16_t overlap_time ) +{ + int16_t i; + float ImdctOutWin[2 * L_FRAME8k]; + float win_NB[L_FRAME8k + 25]; + int16_t L_overlap; + int16_t ol_size; + int16_t L; + + L = L_FRAME8k; + + for ( i = 0; i < L_FRAME8k + 25; i++ ) + { + win_NB[i] = window_48kHz[i * 6 + 3]; + } + + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + OldauOut[i - N_ZERO_NB] = -OldImdctOut[L / 2 - 1 - i]; + } + for ( i = 0; i < L / 2; i++ ) + { + OldauOut[i + N_ZERO_O_NB] = -OldImdctOut[i]; + } + + /* Overlapping with next good frame : Overlapping to remove the discontinuity */ + if ( cur_data_use_flag ) + { + ol_size = N_LEAD_NB; + + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + ImdctOutWin[i + L] = -ImdctOut[L / 2 - 1 - i]; + } + for ( i = 0; i < L / 2; i++ ) + { + ImdctOutWin[i + 3 * L / 2] = -ImdctOut[i]; + } + + /*a = (float)(1./(float)(ol_size)); y = ax */ + Smoothing_vector_scaledown_NB( OldauOut, &ImdctOutWin[N_Z_L_O_NB], SmoothingWin_NB875, OldauOut, ol_size ); + + /* Scale down the overlapped signal */ + v_multc( &ImdctOutWin[ol_size + N_Z_L_O_NB], SCALE_DOWN_3dB, &OldauOut[ol_size], N_Z_L_NB - ol_size ); + } + + L_overlap = overlap_time; + for ( i = 0; i < L_overlap; i++ ) + { + OldauOut[i] *= SmoothingWin_NB875[L_overlap - i - 1]; + } + for ( i = L_overlap; i < L; i++ ) + { + OldauOut[i] = 0.f; + } + + /* Windowing */ + Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, SmoothingWin_NB875, 1 ); + Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); + + v_add( &ImdctOutWin[N_ZERO_NB], OldauOut, auOut, L ); + mvr2r( &ImdctOutWin[L], OldauOut, L ); + + return; +} + +/*--------------------------------------------------------------------------* + * Repetition_smoothing() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t Repetition_smoothing( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldImdctOut, /* i : input */ + float *OldauOut, /* i/o: audio from previous frame */ + const int16_t L, /* i : length */ + float *prev_oldauOut, /* i : OldauOut from previous frame */ + int16_t overlap_time /* i : overlap time */ +) +{ + int16_t i; + float ImdctOutWin[2 * L_FRAME8k]; + float pow1 = 0.f; + float pow22 = 0.f; + float OldauOutnoWin[L_FRAME8k]; + float win_NB[L_FRAME8k + 25]; + + for ( i = 0; i < L_FRAME8k + 25; i++ ) + { + win_NB[i] = window_48kHz[i * 6 + 3]; + } + + /* Windowing */ + Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); + Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); + + /* Repetition with old frame to reserve energy */ + common_overlapping( auOut, ImdctOutWin, prev_oldauOut, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); + + /* OldauOut without windowing */ + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + OldauOutnoWin[i - N_ZERO_NB] = -OldImdctOut[L / 2 - 1 - i]; + } + for ( i = 0; i < L / 2; i++ ) + { + OldauOutnoWin[i + N_ZERO_O_NB] = -OldImdctOut[i]; + } + + /* data transition from OldauOut to auOut using smoothing win*/ + Smoothing_vector_NB( OldauOutnoWin, auOut, SmoothingWin_NB875, auOut, overlap_time ); + + pow1 = sum2_f( &auOut[1 * L / 20], 4 * L / 20 ); + pow22 = sum2_f( &auOut[N_LEAD_NB], 4 * L / 20 ); + + + if ( pow22 > pow1 * 3 ) + { + return 1; + } + + /* Update the OldauOut array for next overlapping */ + mvr2r( &ImdctOutWin[L], OldauOut, L ); + v_multc( prev_oldauOut, SCALE_DOWN_3dB, prev_oldauOut, L ); + + return 0; +} + + +/*--------------------------------------------------------------------------* + * Windowing_1st() + * + * + *--------------------------------------------------------------------------*/ + +static void Windowing_1st_NB( + float *ImdctOutWin, /* o : Output */ + const float *ImdctOut, /* i : Input */ + const float *win, /* i : Window */ + const float *smoothingWin, /* i : Smoothing Window */ + const int16_t smoothing_flag /* i : 1=Smoothing window, 0=Original window */ +) +{ + int16_t i; + int16_t L; + + L = L_FRAME8k; + if ( smoothing_flag == 0 ) + { + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + ImdctOutWin[i] = ImdctOut[L / 2 + i] * win[( 2 * L - 1 - i ) - N_LEAD_O_NB]; + } + + for ( i = 0; i < N_ZERO_O_NB; i++ ) + { + ImdctOutWin[L / 2 + i] = -ImdctOut[L - 1 - i] * win[( 3 * L / 2 - 1 - i ) - N_LEAD_O_NB]; + ImdctOutWin[3 * L / 2 + i] = -ImdctOut[i] * win[( L / 2 - i - 1 )]; + } + } + else + { + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + ImdctOutWin[i] = ImdctOut[L / 2 + i] * smoothingWin[( i - N_ZERO_NB )]; /*win[(2*L-i)*decimate-1-decay-14*L_FRAME48k/20];*/ + } + + for ( i = 0; i < N_ZERO_O_NB; i++ ) + { + ImdctOutWin[L / 2 + i] = -ImdctOut[L - 1 - i] * smoothingWin[( i + N_ZERO_O_NB )]; /*win[(3*L/2-1-i)*decimate+decay-L_FRAME48k*14/20];*/ + ImdctOutWin[3 * L / 2 + i] = -ImdctOut[i] * win[( L / 2 - i - 1 )]; + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * Windowing_2nd() + * + * + *--------------------------------------------------------------------------*/ + +static void Windowing_2nd_NB( + float *ImdctOutWin, /* o : Output */ + const float *ImdctOut, /* i : Input */ + const float *win /* i : Window */ +) +{ + int16_t i; + int16_t L; + + L = L_FRAME8k; + for ( i = N_ZERO_O_NB; i < L / 2; i++ ) + { + ImdctOutWin[L / 2 + i] = -ImdctOut[L - 1 - i]; + ImdctOutWin[3 * L / 2 + i] = -ImdctOut[i] * win[L / 2 - i - 1]; + } + + for ( i = 0; i < N_ZERO_NB; i++ ) + { + ImdctOutWin[L + i] = -ImdctOut[L / 2 - 1 - i]; + } + + for ( i = N_ZERO_NB; i < L / 2; i++ ) + { + ImdctOutWin[L + i] = -ImdctOut[L / 2 - 1 - i] * win[L - 1 - i]; + } + + return; +} + +/*--------------------------------------------------------------------------* + * common_overlapping() + * + * + *--------------------------------------------------------------------------*/ + +static void common_overlapping( + float *auOut, /* i : Input */ + float *ImdctOutWin, /* o : Output */ + float *OldauOut, /* i : Window */ + const int16_t end1, /* i : Decay */ + const int16_t offset1, + const int16_t start2, + const int16_t end2, + const int16_t offset_i2, + const int16_t offset2 ) +{ + int16_t i; + + /* Common Overlapping */ + for ( i = 0; i < end1; i++ ) + { + auOut[i] = ImdctOutWin[i + N_ZERO_NB] + OldauOut[i + offset1]; + } + for ( i = start2; i < end2; i++ ) + { + auOut[i + offset2] = ImdctOutWin[i + offset_i2]; + } + + return; +} + + +/*--------------------------------------------------------------------------* + * Smoothing_vector() + * + * + *--------------------------------------------------------------------------*/ + +static void Smoothing_vector_NB( + const float OldauOutnoWin[], /* i : Input vector 1 */ + const float ImdctOutWin[], /* i : Input vector 2 */ + const float SmoothingWin[], /* i : Smoothing window */ + float auOut[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t ol_size /* i : Overlap size */ +) +{ + int16_t i; + float weight; + + for ( i = 0; i < ol_size; i++ ) + { + weight = SmoothingWin[i]; + auOut[i] = ( OldauOutnoWin[i] * ( 1.f - weight ) ) + ( ImdctOutWin[i] * weight ); + } + + return; +} + +/*--------------------------------------------------------------------------* + * Smoothing_vector_scaledown() + * + * + *--------------------------------------------------------------------------*/ + +static void Smoothing_vector_scaledown_NB( + const float OldauOutnoWin[], /* i : Input vector 1 */ + const float ImdctOutWin[], /* i : Input vector 2 */ + const float SmoothingWin[], /* i : Smoothing window */ + float auOut[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t ol_size /* i : Overlap size */ +) +{ + int16_t i; + float weight; + + for ( i = 0; i < ol_size; i++ ) + { + weight = SmoothingWin[i]; + auOut[i] = ( OldauOutnoWin[i] * ( 1.f - weight ) ) + ( ImdctOutWin[i] * SCALE_DOWN_3dB * weight ); + } + + return; +} + + +/*--------------------------------------------------------------------------* + * time_domain_FEC_HQ() + * + * + *--------------------------------------------------------------------------*/ + +void time_domain_FEC_HQ( + Decoder_State *st, /* i : Decoder State */ + float *wtda_audio, /* i : input */ + float *out, /* o : output audio */ + const float mean_en_high, /* i : transient flag */ + const int16_t output_frame /* i : Frame size */ +) +{ + HQ_DEC_HANDLE hHQ_core = st->hHQ_core; + HQ_NBFEC_HANDLE hHQ_nbfec = st->hHQ_nbfec; + + if ( ( st->nbLostCmpt == 1 ) && ( hHQ_nbfec->phase_mat_flag == 1 ) && ( hHQ_nbfec->phase_mat_next == 0 ) ) + { + if ( FEC_phase_matching( hHQ_nbfec, wtda_audio, out, hHQ_core->old_out, hHQ_nbfec->old_out_pha ) ) + { + window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + hHQ_nbfec->phase_mat_next = 0; + } + else + { + hHQ_nbfec->phase_mat_next = 1; + } + } + else if ( ( st->prev_bfi == 1 ) && ( st->bfi == 0 ) && ( hHQ_nbfec->phase_mat_next == 1 ) ) + { + FEC_phase_matching_nextgood( wtda_audio, out, hHQ_core->old_out, hHQ_nbfec->old_out_pha, mean_en_high ); + hHQ_nbfec->phase_mat_next = 0; + } + else if ( ( st->prev_bfi == 1 ) && ( st->bfi == 1 ) && ( hHQ_nbfec->phase_mat_next == 1 ) ) + { + FEC_phase_matching_burst( wtda_audio, out, hHQ_core->old_out, hHQ_nbfec->old_out_pha, hHQ_nbfec->prev_oldauOut ); + hHQ_nbfec->phase_mat_next = 1; + } + else + { + if ( st->bfi == 0 && st->prev_bfi == 1 ) + { + if ( ( hHQ_nbfec->stat_mode_out == 1 ) || ( hHQ_nbfec->diff_energy < ED_THRES_50P ) ) /* hHQ_nbfec->diff_energyoldIMDCTout, hHQ_core->old_out, st->old_bfi_cnt > 1 ? 1 : 0, N_LEAD_NB ); + } + else if ( st->old_bfi_cnt > 1 ) + { + Next_good_after_burst_erasures( wtda_audio, out, hHQ_core->old_out, N_LEAD_NB ); + } + else + { + window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + } + } + else /* if(st->bfi == 1) */ + { + if ( ( hHQ_nbfec->stat_mode_out == 1 ) || ( hHQ_nbfec->diff_energy < ED_THRES_50P ) ) + { + if ( Repetition_smoothing( wtda_audio, out, hHQ_nbfec->oldIMDCTout, hHQ_core->old_out, output_frame, hHQ_nbfec->prev_oldauOut, N_LEAD_NB ) ) + { + window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + } + } + else + { + window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + } + } + + hHQ_nbfec->phase_mat_next = 0; + } + + return; +} + + +/*--------------------------------------------------------------------------* + * Next_good_after_burst_erasures() + * + * Windowing, Overlap and Add + *--------------------------------------------------------------------------*/ + +void Next_good_after_burst_erasures( + const float *ImdctOut, /* i : input */ + float *auOut, /* o : output audio */ + float *OldauOut, /* i/o: audio from previous frame */ + const int16_t ol_size /* i : overlap size */ +) +{ + float ImdctOutWin[2 * L_FRAME8k]; + int16_t i, L; + float win_NB[L_FRAME8k + 25]; + + L = L_FRAME8k; + for ( i = 0; i < L + 25; i++ ) + { + win_NB[i] = window_48kHz[i * 6 + 3]; + } + + /* Windowing */ + Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); + Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); + + /* Overlapping with next good frame : Overlapping to remove the discontinuity */ + Smoothing_vector_scaledown_NB( &OldauOut[N_ZERO_NB], &ImdctOutWin[N_Z_L_O_NB], SmoothingWin_NB875, &OldauOut[N_ZERO_NB], ol_size ); + + /* Scale down the overlapped signal */ + v_multc( &ImdctOutWin[ol_size + N_Z_L_O_NB], SCALE_DOWN_3dB, &OldauOut[ol_size + N_ZERO_NB], N_Z_L_NB - ol_size ); + + /* Common Overlapping */ + common_overlapping( auOut, ImdctOutWin, OldauOut, N_Z_L_NB, N_ZERO_NB, 0, N_ZERO_NB, L, N_Z_L_NB ); + mvr2r( &ImdctOutWin[L], OldauOut, L ); + + return; +} + +/*-------------------------------------------------------------------------- + * save_synthesis_hq_fec() + * + * Save synthesis for HQ FEC + *-------------------------------------------------------------------------*/ + +void save_synthesis_hq_fec( + Decoder_State *st, /* i/o: decoder state structure */ + const float *output, /* i : decoded synthesis */ + const int16_t output_frame, /* i : decoded synthesis */ + CPE_DEC_HANDLE hCPE /* i : CPE decoder structure */ +) +{ + int16_t post_hq_delay; + + switch ( st->element_mode ) + { + case EVS_MONO: + post_hq_delay = NS2SA( st->output_Fs, POST_HQ_DELAY_NS ); + break; + case IVAS_SCE: + post_hq_delay = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + break; + case IVAS_CPE_DFT: + if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + post_hq_delay = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + } + else + { + post_hq_delay = 0; + } + break; + default: + post_hq_delay = 0; + break; + } + + + if ( ( st->codec_mode == MODE1 && st->hTcxDec != NULL ) && ( ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) ) || st->core == HQ_CORE ) ) + { + mvr2r( st->hTcxDec->synth_history + output_frame, st->hTcxDec->synth_history, output_frame - post_hq_delay + NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); + mvr2r( output, st->hTcxDec->old_synthFB + output_frame - post_hq_delay, output_frame ); + + if ( st->element_mode == EVS_MONO ) + { + /* reset the remaining buffer, which is read in TCX concealment the necessary samples to fill + this buffer are not available for all cases, the impact on the output is limited */ + set_f( st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, 0.f, post_hq_delay ); + if ( output_frame >= L_FRAME16k ) + { + mvr2r( st->prev_synth_buffer, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); + } + else + { + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + } + + if ( st->core != ACELP_CORE ) + { + if ( output_frame >= L_FRAME16k ) + { + mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_CLDFB_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + } + else + { + mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + } + } + } + else + { + if ( st->core != ACELP_CORE ) + { + mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, post_hq_delay ); + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + } + } + } + + return; +} diff --git a/lib_dec/FEC_HQ_phase_ecu.c b/lib_dec/FEC_HQ_phase_ecu.c new file mode 100644 index 0000000000..fd71f5c41b --- /dev/null +++ b/lib_dec/FEC_HQ_phase_ecu.c @@ -0,0 +1,2221 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "rom_dec.h" +#include "rom_com.h" +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define FEC_MAX 512 +#define FEC_NB_PULSE_MAX 20 +#define FEC_FFT_MAX_SIZE 512 +#define FEC_DCIM_FILT_SIZE_MAX 60 + +#define PHASE_DITH ( PI2 ) + +#define DELTA_CORR 6 /* Range for phase correction around peak */ +#define THRESH_TR_dB 10.0f +#define THRESH_TR_LIN (float) pow( 10.0f, THRESH_TR_dB / 10.0f ) +#define THRESH_TR_LIN_INV (float) pow( 10.0f, -THRESH_TR_dB / 10.0f ) +#define MAX_INCREASE_GRPOW 0.0f /* maximum amplification in case of transients */ +#define MAX_INCREASE_GRPOW_LIN (float) pow( 10.0f, MAX_INCREASE_GRPOW / 10.0f ) + +#define PHASE_DITH_SCALE (float) pow( 2.0, -16.0 ) /* for scaling random short values to +/- pi */ + +#define BURST_PHDITH_THRESH ( 4 - 1 ) /* speech start phase dither with losses in a row */ +#define BURST_PHDITH_RAMPUP_LEN 2 /* speech ramp up degree of phase dither over a length of frames */ +#define BURST_ATT_THRESH ( 3 - 1 ) /* speech start attenuate with losses in a row */ +#define ATT_PER_FRAME 4 /* speech attenuation in dB */ +#define BETA_MUTE_THR 10 /* time threshold to start beta-noise attenuation */ +#define BETA_MUTE_FAC 0.5f /* attenuation factor per additional bad frame */ + +#define LGW32k 7 +#define LGW16k 6 +#define LGW48k LGW32k + 1 /* Use the same frequency groups as for SWB + 1 */ + +#define L_TRANA_LOG32k 8 +#define L_TRANA_LOG16k 7 + +#define DELTA_CORR_F0_INT 2 /* Constant controls the bin range where Jacobsen is used */ +#define ST_PFIND_SENS 0.93f /* peakfinder sensitivity */ +#define L_PROT_NS 32000000L /* Prototype frame length in nanoseconds (32 ms) */ +#define PH_ECU_CORR_LIMIT 0.85f /* Correlation limit for IVAS Phase ECU activation */ +#define PH_ECU_N_LIMIT 56 /* fec_alg analysis frame limit for IVAS Phase ECU activation */ +#define PFIND_SENS 0.97f /* peakfinder sensitivity */ + +/*---------------------------------------------------------------------* + * Local functions + *---------------------------------------------------------------------*/ + +static int16_t rand_phase( const int16_t seed, float *sin_F, float *cos_F ); +static float imax2_jacobsen_mag( const float *y_re, const float *y_im ); + +/*-------------------------------------------------------------------* + * mult_rev2() + * + * Multiplication of two vectors second vector is multiplied in reverse order + *-------------------------------------------------------------------*/ + +static void mult_rev2( + const float x1[], /* i : Input vector 1 */ + const float x2[], /* i : Input vector 2 */ + float y[], /* o : Output vector that contains vector 1 .* vector 2 */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i, j; + + for ( i = 0, j = N - 1; i < N; i++, j-- ) + { + y[i] = x1[i] * x2[j]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * fft_spec2() + * + * Square magnitude of fft spectrum + *-------------------------------------------------------------------*/ + +static void fft_spec2( + float x[], /* i/o: Input vector: complex spectrum -> square magnitude spectrum */ + const int16_t N /* i : Vector length */ +) +{ + int16_t i, j; + + for ( i = 1, j = N - 1; i < N / 2; i++, j-- ) + { + x[i] = x[i] * x[i] + x[j] * x[j]; + } + + x[0] *= x[0]; + x[N / 2] *= x[N / 2]; + + return; +} + +/*------------------------------------------------------------------* + * rand_phase() + * + * randomized phase in form of sin and cos components + *------------------------------------------------------------------*/ + +/*! r: Updated seed from RNG */ +static int16_t rand_phase( + const int16_t seed, /* i : RNG seed */ + float *sin_F, /* o : random phase sin value */ + float *cos_F /* o : random phase cos value */ +) +{ + const float *sincos = sincos_t_ext + 128; + int16_t seed2 = seed; + own_random( &seed2 ); + + if ( seed2 & 0x40 ) + { + *sin_F = sincos[seed2 >> 8]; + } + else + { + *sin_F = -sincos[seed2 >> 8]; + } + + if ( seed2 & 0x80 ) + { + *cos_F = sincos[-( seed2 >> 8 )]; + } + else + { + *cos_F = -sincos[-( seed2 >> 8 )]; + } + + return seed2; +} + +/*----------------------------------------------------------------------------- + * imax2_jacobsen_mag() + * + * refine peak interpolation using jacobsen and periodic speca ana windows + *----------------------------------------------------------------------------*/ + +/*! r: The location, relative to the middle of the 3 given data point, of the maximum. (Q15)*/ +float imax2_jacobsen_mag( + const float *y_re, /* i : The 3 given data points. real part order -1 0 1 */ + const float *y_im /* i : The 3 given data points. imag part order 1 0 -1 (from FFT) */ +) +{ + float posi; + const float *pY; + float y_m1_re, y_0_re, y_p1_re; + float y_m1_im, y_0_im, y_p1_im; + float N_re, N_im; + float D_re, D_im; + float numer, denom; + +/* Jacobsen estimates peak offset relative y_0 using + * X_m1 - X_p1 + * d = REAL ( ------------------- ) * c_jacob + * 2*X_0 - X_m1 -Xp1 + * + * Where c_jacob is a window dependent constant + */ +#define C_JACOB 1.1453f /* % assume 0.1875 hammrect window 'symmetric' */ + + /* Get the bin parameters into variables */ + pY = y_re; + y_m1_re = *pY++; + y_0_re = *pY++; + y_p1_re = *pY++; + + /* Same for imaginary parts - note reverse order from FFT */ + pY = y_im; + y_p1_im = *pY++; + y_0_im = *pY++; + y_m1_im = *pY++; + + /* prepare numerator real and imaginary parts*/ + N_re = y_m1_re - y_p1_re; + N_im = y_m1_im - y_p1_im; + + /* prepare denominator real and imaginary parts */ + + D_re = 2 * y_0_re - y_m1_re - y_p1_re; + D_im = 2 * y_0_im - y_m1_im - y_p1_im; + + /* REAL part of complex division */ + numer = N_re * D_re + N_im * D_im; + denom = D_re * D_re + D_im * D_im; + + test(); + if ( numer != 0 && denom != 0 ) + { + posi = numer / denom * C_JACOB; + } + else + { + posi = 0; /* flat top, division is not possible choose center freq */ + } + + return posi; +} + + +/*------------------------------------------------------------------* + * trans_ana() + * + * Transient analysis + *------------------------------------------------------------------*/ + +static void trans_ana( + const float *xfp, /* i : Input signal */ + float *mag_chg, /* i/o: Magnitude modification */ + float *ph_dith, /* i/o: Phase dither */ + float *mag_chg_1st, /* i/o: per band magnitude modifier for transients */ + const int16_t output_frame, /* i : Frame length */ + const int16_t time_offs, /* i : Time offset */ + const float est_mus_content, /* i : 0.0=speech_like ... 1.0=Music (==st->env_stab ) */ + const int16_t last_fec, /* i : signal that previous frame was concealed with fec_alg*/ + float *alpha, /* o : Magnitude modification factors for fade to average */ + float *beta, /* o : Magnitude modification factors for fade to average */ + float *beta_mute, /* o : Factor for long-term mute */ + float Xavg[LGW_MAX] /* o : Frequency group average gain to fade to */ +) +{ + const float *w_hamm; + float grp_pow_chg, att_val, att_degree; + float xfp_left[L_TRANA48k], xfp_right[L_TRANA48k]; + float gr_pow_left[LGW_MAX], gr_pow_right[LGW_MAX]; + const float *xfp_; + int16_t Ltrana, Ltrana_2, Lprot, LtranaLog = 0, Lgw, k, burst_len; + int16_t att_always[LGW_MAX]; /* fixed attenuation per frequency group if set to 1*/ + int16_t burst_phdith_thresh; + int16_t burst_att_thresh; + float att_per_frame; + int16_t tr_dec[LGW_MAX]; + + /* check burst error */ + burst_len = time_offs / output_frame + 1; + + set_s( att_always, 0, LGW_MAX ); + *ph_dith = 0.0f; + + /* softly shift attenuation just a bit later for estimated "stable" music_content */ + burst_phdith_thresh = BURST_PHDITH_THRESH + (int16_t) ( est_mus_content * 1.0f + 0.5f ); + burst_att_thresh = BURST_ATT_THRESH + (int16_t) ( est_mus_content * 1.0f + 0.5f ); + att_per_frame = (float) ( ATT_PER_FRAME - (int16_t) ( est_mus_content * 1.0f + 0.5f ) ); /* only slighty less att for music */ + att_per_frame *= 0.1f; + + if ( burst_len > burst_phdith_thresh ) + { + /* increase degree of dither */ + *ph_dith = PHASE_DITH * min( 1.0f, ( (float) burst_len - (float) burst_phdith_thresh ) / (float) BURST_PHDITH_RAMPUP_LEN ); + } + + att_degree = 0; + if ( burst_len > burst_att_thresh ) + { + set_s( att_always, 1, LGW_MAX ); + + /* increase degree of attenuation */ + if ( burst_len - burst_att_thresh <= PH_ECU_MUTE_START ) + { + att_degree = (float) ( burst_len - burst_att_thresh ) * att_per_frame; + } + else + { + att_degree = (float) PH_ECU_MUTE_START * att_per_frame + ( burst_len - burst_att_thresh - PH_ECU_MUTE_START ) * 6.0206f; + } + } + + Lprot = ( 2 * output_frame * 4 ) / 5; /* 4/5==1024/1280, keep mult within short */ + Ltrana = Lprot / QUOT_LPR_LTR; + Ltrana_2 = Ltrana / 2; + + if ( output_frame == L_FRAME48k ) + { + w_hamm = w_hamm48k_2; + Lgw = LGW48k; + } + else if ( output_frame == L_FRAME32k ) + { + w_hamm = w_hamm32k_2; + LtranaLog = L_TRANA_LOG32k; + Lgw = LGW32k; + } + else + { + w_hamm = w_hamm16k_2; + LtranaLog = L_TRANA_LOG16k; + Lgw = LGW16k; + } + + if ( burst_len <= 1 || ( burst_len == 2 && last_fec ) ) + { + set_f( alpha, 1.0f, LGW_MAX ); + set_f( beta, 0.0f, LGW_MAX ); + *beta_mute = BETA_MUTE_FAC_INI; + + /* apply hamming window */ + v_mult( xfp, w_hamm, xfp_left, Ltrana_2 ); + mult_rev2( xfp + Ltrana_2, w_hamm, xfp_left + Ltrana_2, Ltrana_2 ); + + xfp_ = xfp + Lprot - Ltrana; + v_mult( xfp_, w_hamm, xfp_right, Ltrana_2 ); + mult_rev2( xfp_ + Ltrana_2, w_hamm, xfp_right + Ltrana_2, Ltrana_2 ); + + /* spectrum */ + if ( output_frame == L_FRAME48k ) + { + fft3( xfp_left, xfp_left, Ltrana ); + fft3( xfp_right, xfp_right, Ltrana ); + } + else + { + fft_rel( xfp_left, Ltrana, LtranaLog ); + fft_rel( xfp_right, Ltrana, LtranaLog ); + } + + /* square representation */ + fft_spec2( xfp_left, Ltrana ); + fft_spec2( xfp_right, Ltrana ); + + /* band powers in frequency groups + exclude bin at 0 and at EVS_PI from calculation */ + xfp_left[Ltrana_2] = 0.0f; + xfp_right[Ltrana_2] = 0.0f; + } + + for ( k = 0; k < Lgw; k++ ) + { + if ( burst_len <= 1 || ( burst_len == 2 && last_fec ) ) + { + gr_pow_left[k] = sum_f( xfp_left + gw[k], gw[k + 1] - gw[k] ); + gr_pow_right[k] = sum_f( xfp_right + gw[k], gw[k + 1] - gw[k] ); + + /* check if transient in any of the bands */ + gr_pow_left[k] += FLT_MIN; /* otherwise div by zero may occur */ + gr_pow_right[k] += FLT_MIN; + + Xavg[k] = (float) ( sqrt( 0.5f * ( gr_pow_left[k] + gr_pow_right[k] ) / (float) ( gw[k + 1] - gw[k] ) ) ); + + grp_pow_chg = gr_pow_right[k] / gr_pow_left[k]; + + /* dither phase in case of transient */ + /* separate transition detection and application of forced burst dithering */ + tr_dec[k] = ( grp_pow_chg > THRESH_TR_LIN ) || ( grp_pow_chg < THRESH_TR_LIN_INV ); + + /* magnitude modification */ + if ( tr_dec[k] || att_always[k] ) + { + att_val = min( MAX_INCREASE_GRPOW_LIN, grp_pow_chg ); + att_val = (float) sqrt( att_val ); + mag_chg_1st[k] = att_val; + mag_chg[k] = att_val; + } + else + { + mag_chg_1st[k] = 1.0f; + mag_chg[k] = 1.0f; + } + } + else + { + if ( burst_len < OFF_FRAMES_LIMIT ) + { + mag_chg[k] = mag_chg_1st[k] * (float) pow( 10.0, -att_degree / 20.0 ); + } + else + { + mag_chg[k] = 0; + } + if ( burst_len > BETA_MUTE_THR ) + { + *beta_mute *= BETA_MUTE_FAC; + } + alpha[k] = mag_chg[k]; + beta[k] = (float) ( sqrt( 1.0f - SQR( alpha[k] ) ) * *beta_mute ); + if ( k >= LGW32k - 1 ) + { + beta[k] *= 0.1f; + } + else if ( k >= LGW16k - 1 ) + { + beta[k] *= 0.5f; + } + } + } + + return; +} + + +/*------------------------------------------------------------------* + * peakfinder() + * + * Peak-picking algorithm + *------------------------------------------------------------------*/ + +void peakfinder( + const float *x0, /* i : vector from which the maxima will be found */ + const int16_t len0, /* i : length of input vector */ + int16_t *plocs, /* o : the indicies of the identified peaks in x0 */ + int16_t *cInd, /* o : number of identified peaks */ + const float sel, /* i : The amount above surrounding data for a peak to be identified */ + const int16_t endpoints /* i : Flag to include endpoints in peak search */ +) +{ + float minMag, tempMag, leftMin; + float dx0[L_PROT48k_2], x[L_PROT48k_2 + 1], peakMag[MAX_PLOCS]; + int16_t k, i, len, tempLoc = 0, foundPeak, ii, xInd; + int16_t *ind, indarr[L_PROT48k_2 + 1], peakLoc[MAX_PLOCS]; + + ind = indarr; + + /* Find derivative */ + v_sub( x0 + 1, x0, dx0, len0 - 1 ); + + /* This is so we find the first of repeated values */ + for ( i = 0; i < len0 - 1; i++ ) + { + if ( dx0[i] == 0.0f ) + { + dx0[i] = -1.0e-12f; + } + } + + /* Find where the derivative changes sign + Include endpoints in potential peaks and valleys */ + k = 0; + + if ( endpoints ) + { + x[k] = x0[0]; + ind[k++] = 0; + } + + for ( i = 1; i < len0 - 1; i++ ) + { + if ( dx0[i - 1] * dx0[i] < 0 ) + { + ind[k] = i; + x[k++] = x0[i]; + } + } + + if ( endpoints ) + { + ind[k] = len0 - 1; + x[k++] = x0[len0 - 1]; + } + /* x only has the peaks, valleys, and endpoints */ + len = k; + minimum( x, len, &minMag ); + + if ( ( len > 2 ) || ( !endpoints && ( len > 0 ) ) ) + { + /* Set initial parameters for loop */ + tempMag = minMag; + foundPeak = 0; + leftMin = minMag; + + if ( endpoints ) + { + /* Deal with first point a little differently since tacked it on + Calculate the sign of the derivative since we taked the first point + on it does not necessarily alternate like the rest. */ + + /* The first point is larger or equal to the second */ + if ( x[0] >= x[1] ) + { + ii = -1; + if ( x[1] >= x[2] ) /* x[1] is not extremum -> overwrite with x[0] */ + { + x[1] = x[0]; + ind[1] = ind[0]; + ind++; + len--; + } + } + else /* First point is smaller than the second */ + { + ii = 0; + if ( x[1] < x[2] ) /* x[1] is not extremum -> overwrite with x[0] */ + { + x[1] = x[0]; + ind[1] = ind[0]; + ind++; + len--; + } + } + } + else + { + ii = -1; /* First point is a peak */ + if ( len >= 2 ) + { + if ( x[1] >= x[0] ) + { + ii = 0; /* First point is a valley, skip it */ + } + } + } + *cInd = 0; + + /* Loop through extrema which should be peaks and then valleys */ + while ( ii < len - 1 ) + { + ii++; /* This is a peak */ + + /*Reset peak finding if we had a peak and the next peak is bigger + than the last or the left min was small enough to reset.*/ + if ( foundPeak ) + { + tempMag = minMag; + foundPeak = 0; + } + + /* Make sure we don't iterate past the length of our vector */ + if ( ii == len - 1 ) + { + break; /* We assign the last point differently out of the loop */ + } + + /* Found new peak that was larger than temp mag and selectivity larger + than the minimum to its left. */ + if ( ( x[ii] > tempMag ) && ( x[ii] > leftMin + sel ) ) + { + tempLoc = ii; + tempMag = x[ii]; + } + + ii++; /* Move onto the valley */ + + /* Come down at least sel from peak */ + if ( !foundPeak && ( tempMag > sel + x[ii] ) ) + { + foundPeak = 1; /* We have found a peak */ + leftMin = x[ii]; + peakLoc[*cInd] = tempLoc; /* Add peak to index */ + peakMag[*cInd] = tempMag; + ( *cInd )++; + } + else if ( x[ii] < leftMin ) /* New left minimum */ + { + leftMin = x[ii]; + } + } + + /* Check end point */ + if ( x[len - 1] > tempMag && x[len - 1] > leftMin + sel ) + { + peakLoc[*cInd] = len - 1; + peakMag[*cInd] = x[len - 1]; + ( *cInd )++; + } + else if ( !foundPeak && tempMag > minMag ) /* Check if we still need to add the last point */ + { + peakLoc[*cInd] = tempLoc; + peakMag[*cInd] = tempMag; + ( *cInd )++; + } + + /* Create output */ + for ( i = 0; i < *cInd; i++ ) + { + plocs[i] = ind[peakLoc[i]]; + } + } + else + { + if ( endpoints ) + { + /* This is a monotone function where an endpoint is the only peak */ + xInd = ( x[0] > x[1] ) ? 0 : 1; + peakMag[0] = x[xInd]; + if ( peakMag[0] > minMag + sel ) + { + plocs[0] = ind[xInd]; + *cInd = 1; + } + else + { + *cInd = 0; + } + } + else + { + /* Input constant or all zeros -- no peaks found */ + *cInd = 0; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * imax_pos() + * + * Get interpolated maximum position + *-------------------------------------------------------------------*/ + +/*! r: interpolated maximum position */ +float imax_pos( + const float *y /* i : Input vector for peak interpolation */ +) +{ + float posi, y1, y2, y3, y3_y1, y2i; + float ftmp_den1, ftmp_den2; + /* Seek the extrema of the parabola P(x) defined by 3 consecutive points so that P([-1 0 1]) = [y1 y2 y3] */ + y1 = y[0]; + y2 = y[1]; + y3 = y[2]; + y3_y1 = y3 - y1; + ftmp_den1 = ( y1 + y3 - 2 * y2 ); + ftmp_den2 = ( 4 * y2 - 2 * y1 - 2 * y3 ); + + if ( ftmp_den2 == 0.0f || ftmp_den1 == 0.0f ) + { + return ( 0.0f ); /* early exit with left-most value */ + } + + y2i = -0.125f * SQR( y3_y1 ) / ( ftmp_den1 ) + y2; + /* their corresponding normalized locations */ + posi = y3_y1 / ( ftmp_den2 ); + /* Interpolated maxima if locations are not within [-1,1], calculated extrema are ignored */ + if ( posi >= 1.0f || posi <= -1.0f ) + { + posi = y3 > y1 ? 1.0f : -1.0f; + } + else + { + if ( y1 >= y2i ) + { + posi = ( y1 > y3 ) ? -1.0f : 1.0f; + } + else if ( y3 >= y2i ) + { + posi = 1.0f; + } + } + + return posi + 1.0f; +} + + +/*-------------------------------------------------------------------* + * spec_ana() + * + * Spectral analysis + *-------------------------------------------------------------------*/ + +static void spec_ana( + const float *prevsynth, /* i : Input signal */ + int16_t *plocs, /* o : The indicies of the identified peaks */ + float *plocsi, /* o : Interpolated positions of the identified peaks */ + int16_t *num_plocs, /* o : Number of identified peaks */ + float *X_sav, /* o : Stored fft spectrum */ + const int16_t output_frame, /* i : Frame length */ + const int16_t bwidth, /* i : Encoded bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + float *noise_fac, /* o : for few peaks zeroing valleys decision making */ + const float pcorr ) +{ + int16_t i, Lprot, LprotLog2 = 0, hamm_len2 = 0, Lprot2_1, m; + float *pPlocsi; + int16_t *pPlocs; + int16_t currPlocs, endPlocs, Lprot2p1, nJacob; + int16_t n, k; + int16_t st_point; + int16_t end_point; + + float sig, noise, nsr; + float window_corr_step, window_corr; + const float *w_hamm = NULL; + float xfp[L_PROT48k]; + float Xmax, Xmin, sel; + int16_t stop_band_start; + int16_t stop_band_length; + + Lprot = 2 * output_frame * L_PROT32k / 1280; + Lprot2_1 = Lprot / 2 + 1; + + if ( output_frame == L_FRAME48k ) + { + w_hamm = w_hamm_sana48k_2; + hamm_len2 = L_PROT_HAMM_LEN2_48k; + } + else if ( output_frame == L_FRAME32k ) + { + w_hamm = w_hamm_sana32k_2; + hamm_len2 = L_PROT_HAMM_LEN2_32k; + LprotLog2 = 10; + } + else + { + w_hamm = w_hamm_sana16k_2; + hamm_len2 = L_PROT_HAMM_LEN2_16k; + LprotLog2 = 9; + } + + /* Apply hamming-rect window */ + mvr2r( prevsynth + hamm_len2, xfp + hamm_len2, Lprot - 2 * hamm_len2 ); + if ( element_mode == EVS_MONO ) + { + v_mult( prevsynth, w_hamm, xfp, hamm_len2 ); + mult_rev2( prevsynth + Lprot - hamm_len2, w_hamm, xfp + Lprot - hamm_len2, hamm_len2 ); + } + else + { + window_corr = w_hamm[0]; + window_corr_step = w_hamm[0] / hamm_len2; + for ( i = 0; i < hamm_len2; i++ ) + { + xfp[i] = prevsynth[i] * ( w_hamm[i] - window_corr ); + xfp[Lprot - i - 1] = prevsynth[Lprot - i - 1] * ( w_hamm[i] - window_corr ); + window_corr -= window_corr_step; + } + } + + /* Spectrum */ + if ( output_frame == L_FRAME48k ) + { + fft3( xfp, xfp, Lprot ); + } + else + { + fft_rel( xfp, Lprot, LprotLog2 ); + } + + /* Apply zeroing of non-coded FFT spectrum */ + if ( output_frame > inner_frame_tbl[bwidth] ) + { + stop_band_start = 128 << bwidth; + stop_band_length = Lprot - ( stop_band_start << 1 ); + stop_band_start = stop_band_start + 1; + set_f( xfp + stop_band_start, 0, stop_band_length ); + } + + mvr2r( xfp, X_sav, Lprot ); + + /* Magnitude representation */ + fft_spec2( xfp, Lprot ); + + for ( i = 0; i < Lprot2_1; i++ ) + { + xfp[i] = (float) sqrt( (double) xfp[i] ); + } + + /* Find maxima */ + maximum( xfp, Lprot2_1, &Xmax ); + minimum( xfp, Lprot2_1, &Xmin ); + if ( element_mode == EVS_MONO ) + { + sel = ( Xmax - Xmin ) * ( 1.0f - PFIND_SENS ); + } + else + { + sel = ( Xmax - Xmin ) * ( 1.0f - ST_PFIND_SENS ); + } + + peakfinder( xfp, Lprot2_1, plocs, num_plocs, sel, TRUE ); /* NB peak at xfp[0] and xfp Lprot2_1-1 may occur */ + + /* Currently not the pitch correlation but some LF correlation */ + if ( element_mode != EVS_MONO && *num_plocs > 50 && pcorr < 0.6f ) + { + *num_plocs = 0; + } + + if ( element_mode == EVS_MONO ) + { + /* Refine peaks */ + for ( m = 0; m < *num_plocs; m++ ) + { + if ( plocs[m] == 0 ) + { + plocsi[m] = plocs[m] + imax_pos( &xfp[plocs[m]] ); + } + else if ( plocs[m] == Lprot / 2 ) + { + plocsi[m] = plocs[m] - 2 + imax_pos( &xfp[plocs[m] - 2] ); + } + else + { + plocsi[m] = plocs[m] - 1 + imax_pos( &xfp[plocs[m] - 1] ); + } + } + } + else + { + + Lprot2p1 = Lprot / 2 + 1; + + /* Refine peaks */ + pPlocsi = plocsi; + pPlocs = plocs; + n = *num_plocs; /* number of peaks to process */ + + /* Special case-- The very 1st peak if it is at 0 index position (DC) */ + /* With DELTA_CORR_F0_INT == 2 one needs to handle both *pPlocs==0 and *pPlocs==1 */ + if ( n > 0 && *pPlocs == 0 ) /* Very 1st peak position possible to have a peak at 0/DC index position. */ + { + *pPlocsi++ = *pPlocs + imax_pos( &xfp[*pPlocs] ); + pPlocs++; + n = n - 1; + } + + if ( n > 0 && *pPlocs == 1 ) /* Also 2nd peak position uses DC which makes jacobsen unsuitable. */ + { + *pPlocsi++ = *pPlocs - 1 + imax_pos( &xfp[*pPlocs - 1] ); + currPlocs = *pPlocs++; + n = n - 1; + } + + /* All remaining peaks except the very last two possible integer positions */ + currPlocs = *pPlocs++; + endPlocs = Lprot2p1 - DELTA_CORR_F0_INT; /* last *pPlocs position for Jacobsen */ + + /* precompute number of turns based on endpoint integer location and make into a proper for loop */ + if ( n > 0 ) + { + nJacob = n; + if ( sub( endPlocs, plocs[sub( *num_plocs, 1 )] ) <= 0 ) + { + nJacob = sub( nJacob, 1 ); + } + + for ( k = 0; k < nJacob; k++ ) + { + *pPlocsi++ = currPlocs + imax2_jacobsen_mag( &( X_sav[currPlocs - 1] ), &( X_sav[Lprot - 1 - currPlocs] ) ); + currPlocs = *pPlocs++; + } + n = n - nJacob; + } + + /* At this point there should at most two plocs left to process */ + /* the position before fs/2 and fs/2 both use the same magnitude points */ + if ( n > 0 ) + { + /* [ . . . . . . . ] Lprot/2+1 positions */ + /* | | | */ + /* 0 (Lprot/2-2) (Lprot/2) */ + + if ( currPlocs == ( Lprot2p1 - DELTA_CORR_F0_INT ) ) /* Also 2nd last peak position uses fs/2 which makes jacobsen less suitable. */ + { + *pPlocsi++ = currPlocs - 1 + imax_pos( &xfp[currPlocs - 1] ); + currPlocs = *pPlocs++; + n = n - 1; + } + + /* Here the only remaining point would be a fs/2 plocs */ + /* pXfp = xfp + sub(Lprot2,1); already set just a reminder where it + * whould point */ + if ( n > 0 ) /* fs/2 which makes special case . */ + { + *pPlocsi++ = currPlocs - 2 + imax_pos( &xfp[currPlocs - 2] ); + currPlocs = *pPlocs++; + n = n - 1; + } + } + + /* For few peaks decide noise floor attenuation */ + if ( *num_plocs < 3 && *num_plocs > 0 ) + { + sig = sum_f( xfp, Lprot2_1 ) + EPSILON; + + /*excluding peaks and neighboring bins*/ + for ( i = 0; i < *num_plocs; i++ ) + { + st_point = max( 0, plocs[i] - DELTA_CORR ); + end_point = min( Lprot2_1 - 1, plocs[i] + DELTA_CORR ); + set_f( &xfp[st_point], 0.0f, end_point - st_point + 1 ); + } + noise = sum_f( xfp, Lprot2_1 ) + EPSILON; + nsr = noise / sig; + + if ( nsr < 0.03f ) + { + *noise_fac = 0.5f; + } + else + { + *noise_fac = 1.0f; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * subst_spec() + * + * Substitution spectrum calculation + *-------------------------------------------------------------------*/ + +static void subst_spec( + const int16_t *plocs, /* i : The indicies of the identified peaks */ + const float *plocsi, /* i : Interpolated positions of the identified peaks */ + int16_t *num_plocs, /* i/o: Number of identified peaks */ + const int16_t time_offs, /* i : Time offset */ + float *X, /* i/o: FFT spectrum */ + const float *mag_chg, /* i : Magnitude modification */ + const float ph_dith, /* i : Phase dither */ + const int16_t *is_trans, /* i : Transient flags */ + const int16_t output_frame, /* i : Frame length */ + int16_t *seed, /* i/o: Random seed */ + const float *alpha, /* i : Magnitude modification factors for fade to average */ + const float *beta, /* i : Magnitude modification factors for fade to average */ + float beta_mute, /* i : Factor for long-term mute */ + const float Xavg[LGW_MAX], /* i : Frequency group averages to fade to */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t ph_ecu_lookahead, /* i : Phase ECU lookahead */ + const float noise_fac /* i : noise factor */ + +) +{ + const float *sincos; + int16_t Xph_short; + float corr_phase[MAX_PLOCS], Xph; + float Lprot_1, cos_F, sin_F, tmp; + int16_t Lprot, Lecu, m, i, e, im_ind, delta_corr_up, delta_corr_dn, delta_tmp; + float mag_chg_local; /* for peak attenuation in burst */ + int16_t k; + float one_peak_flag_mask; + float alpha_local; + float beta_local; + + + sincos = sincos_t_ext + 128; + Lprot = (int16_t) ( L_PROT32k * output_frame / 640 ); + Lprot_1 = 1.0f / Lprot; + Lecu = output_frame * 2; + + /* Correction phase of the identified peaks */ + if ( is_trans[0] || is_trans[1] ) + { + *num_plocs = 0; + } + else + { + tmp = PI2 * ( Lecu - ( Lecu - Lprot ) / 2 + NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_ALDO_OLP2_NS ) - ph_ecu_lookahead - output_frame / 2 + time_offs ) * Lprot_1; + for ( m = 0; m < *num_plocs; m++ ) + { + corr_phase[m] = plocsi[m] * tmp; + } + } + one_peak_flag_mask = 1; /* all ones mask -> keep */ + if ( element_mode != EVS_MONO ) + { + if ( ( *num_plocs > 0 ) && sub( *num_plocs, 3 ) < 0 ) + { + one_peak_flag_mask = noise_fac; /* all zeroes mask -> zero */ + } + if ( *num_plocs == 0 ) + { + X[0] = 0; /* reset DC if there are no peaks */ + X[shr( Lprot, 1 )] = 0; /* also reset fs/2 if there are no peaks */ + } + } + + i = 1; + k = 0; + im_ind = Lprot - 1; + for ( m = 0; m < *num_plocs; m++ ) + { + delta_corr_dn = DELTA_CORR; + delta_corr_up = DELTA_CORR; + + if ( m > 0 ) + { + delta_tmp = ( plocs[m] - plocs[m - 1] - 1 ) / 2; + if ( delta_tmp < DELTA_CORR ) + { + delta_corr_dn = delta_tmp; + } + } + + if ( m < *num_plocs - 1 ) + { + delta_tmp = ( plocs[m + 1] - plocs[m] - 1 ) / 2; + if ( delta_tmp < DELTA_CORR ) + { + delta_corr_up = delta_tmp; + } + } + + /* Input Xph */ + while ( i < plocs[m] - delta_corr_dn ) + { + *seed = own_random( seed ); + + if ( *seed & 0x40 ) + { + sin_F = sincos[*seed >> 8]; + } + else + { + sin_F = -sincos[*seed >> 8]; + } + + if ( *seed & 0x80 ) + { + cos_F = sincos[-( *seed >> 8 )]; + } + else + { + cos_F = -sincos[-( *seed >> 8 )]; + } + + if ( element_mode == EVS_MONO ) + { + tmp = ( X[i] * cos_F - X[im_ind] * sin_F ); + X[im_ind] = ( X[i] * sin_F + X[im_ind] * cos_F ); + } + else + { + tmp = one_peak_flag_mask * ( X[i] * cos_F - X[im_ind] * sin_F ); + X[im_ind] = one_peak_flag_mask * ( X[i] * sin_F + X[im_ind] * cos_F ); + } + + if ( alpha[k] < 1.0f ) + { + *seed = rand_phase( *seed, &sin_F, &cos_F ); + X[i] = alpha[k] * tmp + beta[k] * Xavg[k] * cos_F; + X[im_ind] = alpha[k] * X[im_ind] + beta[k] * Xavg[k] * sin_F; + } + else + { + X[i] = mag_chg[k] * tmp; + X[im_ind] *= mag_chg[k]; + } + i++; + im_ind--; + if ( i >= gwlpr[k + 1] ) + { + k++; + } + } + + e = plocs[m] + delta_corr_up; + if ( e > Lprot / 2 - 1 ) + { + e = Lprot / 2 - 1; + } + + Xph = corr_phase[m]; + Xph_short = (int16_t) ( ( (int32_t) ( Xph * 512 / EVS_PI ) ) % 32768 ) & 0x03ff; + if ( Xph_short >= 512 ) + { + sin_F = -sincos_t_ext[Xph_short - 512]; + if ( Xph_short < 768 ) + { + cos_F = -sincos_t_ext[Xph_short - 512 + 256]; + } + else + { + cos_F = sincos_t_ext[-Xph_short + 1024 + 256]; + } + } + else + { + sin_F = sincos_t_ext[Xph_short]; + if ( Xph_short < 256 ) + { + cos_F = sincos_t_ext[Xph_short + 256]; + } + else + { + cos_F = -sincos_t_ext[-Xph_short + 256 + 512]; + } + } + + while ( i <= e ) + { + mag_chg_local = mag_chg[k]; + + if ( ph_dith != 0.0f ) + { + /* Call phase randomization only when needed */ + Xph = corr_phase[m]; + *seed = own_random( seed ); + Xph += *seed * ph_dith * PHASE_DITH_SCALE; /* where ph_dith is 0..2PI, or -2PI (in transient), bin phase scaling factor from trans_ana */ + + if ( ph_dith > 0.0f ) + { + /* up to 6 dB additional att of peaks in non_transient longer bursts, (when peak phase is randomized) */ + /* 0.5~= sqrt((float)pow(10.0,-6/10.0)); ph_dith= 0..2pi,--> scale=1.0 ...5 */ + mag_chg_local *= 0.5f + ( 1.0f - ( 1.0f / PHASE_DITH ) * ph_dith ) * 0.5f; + } + + Xph_short = (int16_t) ( Xph * 512 / EVS_PI ) & 0x03ff; + + if ( Xph_short >= 512 ) + { + sin_F = -sincos_t_ext[Xph_short - 512]; + if ( Xph_short < 768 ) + { + cos_F = -sincos_t_ext[Xph_short - 512 + 256]; + } + else + { + cos_F = sincos_t_ext[-Xph_short + 1024 + 256]; + } + } + else + { + sin_F = sincos_t_ext[Xph_short]; + if ( Xph_short < 256 ) + { + cos_F = sincos_t_ext[Xph_short + 256]; + } + else + { + cos_F = -sincos_t_ext[-Xph_short + 256 + 512]; + } + } + } + + tmp = ( X[i] * cos_F - X[im_ind] * sin_F ); + X[im_ind] = ( X[i] * sin_F + X[im_ind] * cos_F ); + if ( alpha[k] < 1.0f ) + { + alpha_local = mag_chg_local; + beta_local = (float) ( beta_mute * sqrt( 1.0f - SQR( alpha_local ) ) ); + if ( k >= LGW32k - 1 ) + { + beta_local *= 0.1f; + } + else if ( k >= LGW16k - 1 ) + { + beta_local *= 0.5f; + } + + *seed = rand_phase( *seed, &sin_F, &cos_F ); + X[i] = alpha_local * tmp + beta_local * Xavg[k] * cos_F; + X[im_ind] = alpha_local * X[im_ind] + beta_local * Xavg[k] * sin_F; + } + else + { + X[i] = mag_chg_local * tmp; + X[im_ind] *= mag_chg_local; + } + + i++; + im_ind--; + if ( i >= gwlpr[k + 1] ) + { + k++; + } + } + } + + while ( i < Lprot / 2 ) + { + *seed = own_random( seed ); + + if ( *seed & 0x40 ) + { + sin_F = sincos[*seed >> 8]; + } + else + { + sin_F = -sincos[*seed >> 8]; + } + + if ( *seed & 0x80 ) + { + cos_F = sincos[-( *seed >> 8 )]; + } + else + { + cos_F = -sincos[-( *seed >> 8 )]; + } + + + if ( element_mode == EVS_MONO ) + { + tmp = ( X[i] * cos_F - X[im_ind] * sin_F ); + X[im_ind] = ( X[i] * sin_F + X[im_ind] * cos_F ); + } + else + { + tmp = one_peak_flag_mask * ( X[i] * cos_F - X[im_ind] * sin_F ); + X[im_ind] = one_peak_flag_mask * ( X[i] * sin_F + X[im_ind] * cos_F ); + } + + if ( alpha[k] < 1.0f ) + { + *seed = rand_phase( *seed, &sin_F, &cos_F ); + X[i] = alpha[k] * tmp + beta[k] * Xavg[k] * cos_F; + X[im_ind] = alpha[k] * X[im_ind] + beta[k] * Xavg[k] * sin_F; + im_ind--; + } + else + { + X[i] = mag_chg[k] * tmp; + X[im_ind--] *= mag_chg[k]; + } + i++; + + if ( i >= gwlpr[k + 1] ) + { + k++; + } + } + + return; +} + +/*-------------------------------------------------------------------------- + * rec_wtda() + * + * Windowing and TDA of reconstructed frame + *--------------------------------------------------------------------------*/ + +static void rec_wtda( + float *X, /* i/o: ECU frame / unwindowed ECU frame */ + float *ecu_rec, /* o : Reconstructed frame in tda domain */ + const int16_t output_frame, /* i : Frame length */ + const int16_t Lprot, /* i : Prototype frame length */ + const float old_dec[270], /* i : end of last decoded for OLA before tda and itda */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t *num_p, /* i : Number of peaks */ + const int16_t *plocs /* i : Peak locations */ +) +{ + int16_t timesh; + int16_t xf_len; + int16_t i; + float *p_ecu; + float g; + float tbl_delta; + float xsubst_[2 * L_FRAME48k]; + const float *w_hamm; + float *pX_start, *pX_end; + float tmp; + int16_t hamm_len2; + float *pNew; + const float *pOldW, *pNewW; + float xfwin[NS2SA( L_FRAME48k * FRAMES_PER_SEC, N_ZERO_MDCT_NS - ( 2 * FRAME_SIZE_NS - L_PROT_NS ) / 2 )]; + const float *pOld; + int16_t copy_len; + int16_t ola_len; + + copy_len = NS2SA( output_frame * FRAMES_PER_SEC, ( 2 * FRAME_SIZE_NS - L_PROT_NS ) / 2 ); /* prototype fill on each side of xsubst to fill MDCT Frame */ + ola_len = NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS - ( 2 * FRAME_SIZE_NS - L_PROT_NS ) / 2 ); /* remaining lengt of LA_ZEROS to overlap add decoded with xsubst */ + + if ( output_frame == L_FRAME48k ) + { + w_hamm = w_hamm_sana48k_2; + hamm_len2 = L_PROT_HAMM_LEN2_48k; + } + else if ( output_frame == L_FRAME32k ) + { + w_hamm = w_hamm_sana32k_2; + hamm_len2 = L_PROT_HAMM_LEN2_32k; + } + else + { + w_hamm = w_hamm_sana16k_2; + hamm_len2 = L_PROT_HAMM_LEN2_16k; + } + + if ( element_mode != EVS_MONO && *num_p > 0 && plocs[0] > 3 ) + { + /* Perform inverse windowing of hammrect */ + pX_start = X; + pX_end = X + Lprot - 1; + for ( i = 0; i < hamm_len2; i++ ) + { + tmp = 1.0f / *w_hamm; + *pX_start *= tmp; + *pX_end *= tmp; + pX_start++; + pX_end--; + w_hamm++; + } + } + + /* extract reconstructed frame with aldo window */ + timesh = NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ) - ( 2 * output_frame - Lprot ) / 2; + + set_f( xsubst_, 0.0f, 2 * output_frame - Lprot + timesh ); + mvr2r( X, xsubst_ + 2 * output_frame - Lprot + timesh, Lprot - timesh ); + + /* Copy and OLA look ahead zero part of MDCT window from decoded signal */ + if ( element_mode != EVS_MONO ) + { + mvr2r( old_dec, xsubst_ + NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ), copy_len ); /* also need to scale to Q0 ?? */ + pOld = old_dec + copy_len; + pNew = xsubst_ + copy_len + NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); + sinq( EVS_PI / ( ola_len * 2 ), 0.0f, ola_len, xfwin ); + v_mult( xfwin, xfwin, xfwin, ola_len ); /* xfwin = sin^2 of 0..pi/4 */ + pOldW = xfwin + ola_len - 1; + pNewW = xfwin; + for ( i = 0; i < ola_len; i++ ) + { + *pNew = *pOld * *pOldW + *pNew * *pNewW; + pOld += 1; + pNew += 1; + pOldW -= 1; + pNewW += 1; + } + } + else + { + /* Smoothen onset of ECU frame */ + xf_len = (int16_t) ( (float) output_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) - ( output_frame - Lprot / 2 ); + p_ecu = xsubst_ + 2 * output_frame - Lprot + timesh; + tbl_delta = 64.f / xf_len; /* 64 samples = 1/4 cycle in sincos_t */ + for ( i = 0; i < xf_len; i++, p_ecu++ ) + { + g = sincos_t[( (int16_t) ( i * tbl_delta ) )]; + g *= g; + *p_ecu = g * ( *p_ecu ); + } + } + + /* Apply TDA and windowing to ECU frame */ + wtda( xsubst_ + output_frame, ecu_rec, NULL, ALDO_WINDOW, ALDO_WINDOW, output_frame ); + + return; +} + + +/*-------------------------------------------------------------------------- + * rec_frame() + * + * Frame reconstruction + *--------------------------------------------------------------------------*/ + +static void rec_frame( + float *X, /* i/o: FFT spectrum / IFFT of spectrum */ + float *ecu_rec, /* o : Reconstructed frame in tda domain */ + const int16_t output_frame, /* i : Frame length */ + const float *old_dec, /* i : end of last decoded for OLA before tda and itda */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t *num_p, /* i : Number of peaks */ + const int16_t *plocs /* i : Peak locations */ +) +{ + int16_t Lprot, LprotLog2 = 0; + + Lprot = 2 * output_frame * L_PROT32k / 1280; + + if ( output_frame == L_FRAME48k ) + { + LprotLog2 = 9; + } + else if ( output_frame == L_FRAME32k ) + { + LprotLog2 = 10; + } + else + { + LprotLog2 = 9; + } + + /* extend spectrum and IDFT */ + if ( output_frame == L_FRAME48k ) + { + ifft3( X, X, Lprot ); + } + else + { + ifft_rel( X, Lprot, LprotLog2 ); + } + + rec_wtda( X, ecu_rec, output_frame, Lprot, old_dec, element_mode, num_p, plocs ); + + return; +} + + +/*-------------------------------------------------------------------------- + * fir_dwn() + * + * FIR downsampling filter + *--------------------------------------------------------------------------*/ + +static void fir_dwn( + const float x[], /* i : input vector */ + const float h[], /* i : impulse response of the FIR filter */ + float y[], /* o : output vector (result of filtering) */ + const int16_t L, /* i : input vector size */ + const int16_t K, /* i : order of the FIR filter (K+1 coefs.) */ + const int16_t decimation /* i : decimation */ +) +{ + float s; + int16_t i, j, k, mmax; + + k = 0; + + /* do the filtering */ + for ( i = K / 2; i < L; i += decimation ) + { + s = x[i] * h[0]; + + if ( i < K ) + { + mmax = i; + } + else + { + mmax = K; + } + + for ( j = 1; j <= mmax; j++ ) + { + s += h[j] * x[i - j]; + } + + y[k] = s; + k++; + } + + for ( ; i < L + K / 2; i += decimation ) + { + s = 0; + + for ( j = i - L + 1; j <= K; j++ ) + { + s += h[j] * x[i - j]; + } + + y[k] = s; + k++; + } + + return; +} + + +/*-------------------------------------------------------------------------- + * fec_ecu_pitch() + * + * Pitch/correlation analysis and adaptive analysis frame length calculation + *--------------------------------------------------------------------------*/ + +static void fec_ecu_pitch( + const float *prevsynth, /* i : previous synthesis */ + float *prevsynth_LP, /* o : down-sampled synthesis */ + const int16_t L, /* i : Output frame length */ + int16_t *N, /* o : Analysis frame length in 8kHz */ + float *min_corr, /* o : correlation */ + int16_t *decimatefator, /* o : Decimation factor */ + const int16_t HqVoicing /* i : Hq voicing flag */ +) +{ + int16_t i, filt_size; + float accA, accB, accC, Ryy; + int16_t delay_ind, k, cb_start, cb_end, tmp_short, Lon20; + float Asr_LP[FEC_DCIM_FILT_SIZE_MAX + 1]; + + switch ( L ) + { + case L_FRAME48k: + *decimatefator = 6; + filt_size = 60; + mvr2r( Asr_LP48, Asr_LP, filt_size + 1 ); + break; + case L_FRAME32k: + *decimatefator = 4; + filt_size = 40; + mvr2r( Asr_LP32, Asr_LP, filt_size + 1 ); + break; + case L_FRAME16k: + *decimatefator = 2; + filt_size = 20; + mvr2r( Asr_LP16, Asr_LP, filt_size + 1 ); + break; + default: + *decimatefator = 2; + filt_size = 40; + mvr2r( Asr_LP16, Asr_LP, filt_size + 1 ); + break; + } + + /* We need to inverse the ALDO window */ + + /* Resampling to work at 8Khz */ + fir_dwn( prevsynth, Asr_LP, prevsynth_LP, 2 * L, filt_size, *decimatefator ); /* resampling without delay */ + + Lon20 = (int16_t) ( ( L / 20 ) / *decimatefator ); + + /* Correlation analysis */ + *min_corr = 0; + accC = 0; + for ( k = 0; k < 6 * Lon20; k++ ) + { + accC += prevsynth_LP[34 * Lon20 + k] * prevsynth_LP[34 * Lon20 + k]; + } + + if ( HqVoicing == 1 ) + { + cb_start = 0; + cb_end = 33 * Lon20; + } + else + { + cb_start = 0; + cb_end = 28 * Lon20; + } + + tmp_short = 34 * Lon20; + accB = 0; + delay_ind = cb_start; + for ( i = cb_start; i < cb_end; i++ ) /* cb_end = 35 let 6 ms min of loop size */ + { + accA = 0; + if ( i == cb_start ) + { + accB = 0; + for ( k = 0; k < 6 * Lon20; k++ ) + { + accA += prevsynth_LP[i + k] * prevsynth_LP[tmp_short + k]; + accB += prevsynth_LP[i + k] * prevsynth_LP[i + k]; + } + } + else + { + accB = accB - prevsynth_LP[i - 1] * prevsynth_LP[i - 1] + prevsynth_LP[i + 6 * Lon20 - 1] * prevsynth_LP[i + 6 * Lon20 - 1]; + for ( k = 0; k < 6 * Lon20; k++ ) + { + accA += prevsynth_LP[i + k] * prevsynth_LP[tmp_short + k]; + } + } + + /* tests to avoid division by zero */ + if ( accB <= 0 ) + { + accB = 1.0f; + } + + if ( accC <= 0 ) + { + accC = 1.0f; + } + + if ( accB * accC <= 0 ) + { + Ryy = accA; + } + else + { + Ryy = accA / (float) sqrt( ( accB * accC ) ); + } + + if ( Ryy > *min_corr ) + { + *min_corr = Ryy; + delay_ind = i; + } + + if ( HqVoicing == 0 && *min_corr > 0.95f ) + { + break; + } + } + + *N = 40 * Lon20 - delay_ind - 6 * Lon20; + + return; +} + + +/*-------------------------------------------------------------------------- + * fec_ecu_dft() + * + * DFT analysis on adaptive frame length. Analysis frame stretched to + * next power of 2 using linear interpolation. + *--------------------------------------------------------------------------*/ + +static void fec_ecu_dft( + const float *prevsynth_LP, /* i : Downsampled past synthesis (2*160 samples) */ + const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ + float *Tfr, /* o : DFT coefficients, real part */ + float *Tfi, /* o : DFT coefficients, imag part */ + float *sum_Tf_abs, /* o : Sum of magnitude spectrum */ + float *Tf_abs, /* o : Magnitude spectrum */ + int16_t *Nfft, /* o : DFT analysis length 2^(nextpow2(N)) */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + float target[2 * L_FRAME8k], tmp; + int16_t i, Lon20, tmp_short, N_LP, k; + int16_t alignment_point; + + Lon20 = (int16_t) 160 / 20; + if ( element_mode == EVS_MONO ) + { + alignment_point = 2 * 160 - 3 * Lon20; + } + else + { + alignment_point = 2 * 160; + } + + + for ( i = 0; i < N; i++ ) + { + target[i] = prevsynth_LP[alignment_point - N + i]; + } + + /* DFT */ + *sum_Tf_abs = 0; + *Nfft = (int16_t) pow( 2, (int16_t) ceil( log( N ) / log( 2 ) ) ); + tmp = ( (float) N - 1.0f ) / ( (float) *Nfft - 1.0f ); + + set_f( Tfr, 0.0f, *Nfft ); + set_f( Tfi, 0.0f, *Nfft ); + Tfr[0] = target[0]; + Tfr[*Nfft - 1] = target[N - 1]; + for ( i = 1; i < *Nfft - 1; i++ ) /* interpolation for FFT */ + { + tmp_short = (int16_t) floor( i * tmp ); + Tfr[i] = target[tmp_short] + ( (float) i * tmp - ( (float) tmp_short ) ) * ( target[tmp_short + 1] - target[tmp_short] ); + } + + DoRTFTn( Tfr, Tfi, *Nfft ); + N_LP = (int16_t) ceil( *Nfft / 2 ); + + for ( k = 0; k < N_LP; k++ ) + { + Tf_abs[k] = (float) sqrt( Tfr[k] * Tfr[k] + Tfi[k] * Tfi[k] ); + *sum_Tf_abs += Tf_abs[k]; + } + + return; +} + +/*--------------------------------------------------------------------------* + * singenerator() + * + * fast cosinus generator Amp*cos(2*pi*freq+phi) + *--------------------------------------------------------------------------*/ + + +static void singenerator( + const int16_t L, /* i : size of output */ + const float cosfreq, /* i : cosine of 1-sample dephasing at the given frequency */ + const float sinfreq, /* i : sine of 1-sample dephasing at the given frequency */ + const float a_re, /* i : real part of complex spectral coefficient at the given frequency */ + const float a_im, /* i : imag part of complex spectral coefficient at the given frequency */ + float xx[] /* o : output vector */ +) +{ + + float *ptr, L_C0, L_S0, L_C1, L_S1; + float C0, S0, C1, S1; + int16_t i; + + L_C0 = a_re; + S0 = a_im; + + ptr = xx; + + *ptr = *ptr + L_C0; + ptr++; + + for ( i = 0; i < L / 2 - 1; i++ ) + { + C0 = L_C0; + L_C1 = C0 * cosfreq; + L_C1 = L_C1 - S0 * sinfreq; + L_S1 = C0 * sinfreq; + S1 = L_S1 + S0 * cosfreq; + *ptr = *ptr + L_C1; + ptr++; + + C1 = L_C1; + L_C0 = C1 * cosfreq; + L_C0 = L_C0 - S1 * sinfreq; + L_S0 = C1 * sinfreq; + S0 = L_S0 + S1 * cosfreq; + *ptr = *ptr + L_C0; + ptr++; + } + + C0 = L_C0; + L_C1 = C0 * cosfreq; + L_C1 = L_C1 - S0 * sinfreq; + *ptr = *ptr + L_C1; + ptr++; + + return; +} + + +/*-------------------------------------------------------------------------- + * sinusoidal_synthesis() + * + * ECU frame sinusoid generation + *--------------------------------------------------------------------------*/ + +static void sinusoidal_synthesis( + const float *Tfr, /* i : DFT coefficients, real part */ + const float *Tfi, /* i : DFT coefficients, imag part */ + float *Tf_abs, /* i : Magnitude spectrum */ + const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ + const int16_t L, /* i : Output frame length */ + const int16_t decimate_factor, /* i : Downsampling factor */ + const int16_t Nfft, /* i : DFT analysis length 2^(nextpow2(N)) */ + const float sum_Tf_abs, /* i : Sum of magnitude spectrum */ + float *synthesis, /* o : ECU sinusoidal synthesis */ + const int16_t HqVoicing /* i : HQ voicing flag */ +) +{ + int16_t i, k, nb_pulses, indmax = 0, nb_pulses_final; + int16_t pulses[FEC_MAX / 2]; + float a_re[FEC_NB_PULSE_MAX], a_im[FEC_NB_PULSE_MAX], cosfreq, sinfreq; + float freq[FEC_NB_PULSE_MAX], tmp; + float mmax, cumsum; + int16_t Lon20 = 8; + + /* peak selection */ + int16_t PL, cpt; + float old, new_s; + int16_t *p_pulses; + int16_t glued; + + p_pulses = pulses; + nb_pulses = 0; + new_s = Tf_abs[1]; + glued = 1; + cpt = 0; + old = 0; + + PL = 0; + if ( N > Lon20 * 10 || HqVoicing ) + { + PL = 1; + } + while ( cpt <= N / 2 - 1 - 2 ) + { + if ( Tf_abs[cpt] > old && Tf_abs[cpt] > new_s ) + { + glued = cpt; + + for ( i = glued; i < cpt + PL + 1; i++ ) + { + *p_pulses++ = i; + nb_pulses++; + } + old = Tf_abs[cpt + PL]; + new_s = Tf_abs[cpt + 2 + PL]; + cpt = cpt + PL + 1; + glued = 1; + } + else + { + old = Tf_abs[cpt]; + new_s = Tf_abs[cpt + 2]; + cpt++; + glued = 0; + } + } + + + nb_pulses_final = 0; + + /* peak selection : keep the more energetics (max 20) */ + tmp = 1.0f / (float) ( Nfft / 2 ); + cumsum = 0; + for ( i = 0; i < min( FEC_NB_PULSE_MAX, nb_pulses ); i++ ) + { + mmax = 0; + for ( k = 0; k < nb_pulses; k++ ) + { + if ( Tf_abs[pulses[k]] > mmax ) + { + mmax = Tf_abs[pulses[k]]; + indmax = pulses[k]; + } + } + cumsum += Tf_abs[indmax]; + + if ( HqVoicing || cumsum < sum_Tf_abs * 0.7f ) + { + a_re[i] = Tfr[indmax] * tmp; + a_im[i] = Tfi[indmax] * tmp; + freq[i] = (float) indmax * 2 / ( (float) N ); + nb_pulses_final++; + Tf_abs[indmax] = -1; + } + else + { + a_re[i] = Tfr[indmax] * tmp; + a_im[i] = Tfi[indmax] * tmp; + freq[i] = (float) indmax * 2 / ( (float) N ); + nb_pulses_final++; + break; + } + } + + nb_pulses = nb_pulses_final; + + /* sinusoidal synthesis */ + set_f( synthesis, 0.0f, 40 * L / 20 ); + + if ( HqVoicing ) + { + k = 40 * L / 20; + } + else + { + k = 40 * L / 20; + } + + for ( i = 0; i < nb_pulses; i++ ) + { + cosfreq = (float) cos( EVS_PI * freq[i] / (float) decimate_factor ); + sinfreq = (float) sin( EVS_PI * freq[i] / (float) decimate_factor ); + singenerator( k, cosfreq, sinfreq, a_re[i], a_im[i], synthesis ); + } + + return; +} + +/*-------------------------------------------------------------------------- + * fec_noise_filling() + * + * Adds noise component to ECU frame by + * - subtracting the sinusoidal synthesis from the analysis frame + * - copying noise segments at random indices and adding them together + * with an overlap-add operation + * Copying the beginning of the frame from the past synthesis and aligning + * it to be inserted into wtda + *--------------------------------------------------------------------------*/ + +static void fec_noise_filling( + const float *prevsynth, /* i : Past synthesis buffer (length 2*L) */ + float *synthesis, /* i/o: Sinusoidal ECU / Sinusoidal ECU + noise */ + const int16_t L, /* i : Output frame length */ + const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ + const int16_t HqVoicing, /* i : HQ voicing flag */ + float *gapsynth, /* o : Buffer for crossfade to good frame */ + int16_t *ni_seed_forfec, /* i/o: Random seed for picking noise segments */ + const int16_t element_mode, /* i : IVAS element mode */ + const float *old_out ) +{ + float SS[L_FRAME48k / 2], tmp; + int16_t Rnd_N_noise; + int16_t k, kk, i; + int16_t N_noise; + float noisevect[34 * L_FRAME48k / 20]; + const float *p_mdct_ola; + int16_t alignment_point; + + if ( element_mode == EVS_MONO ) + { + alignment_point = 2 * L - 3 * L / 20; + } + else + { + alignment_point = 2 * L; + } + mvr2r( prevsynth + alignment_point - N, noisevect, N ); + + + /* Noise addition on full band */ + /* residual */ + if ( N < L ) + { + N_noise = ( N / 2 ); + for ( k = 0; k < N; k++ ) + { + noisevect[k] = ( noisevect[k] - synthesis[k] ); + } + } + else + { + N_noise = L / 2; + for ( k = 0; k < L; k++ ) + { + noisevect[k] = ( noisevect[N - L + k] - synthesis[N - L + k] ); + } + } + + if ( HqVoicing ) + { + for ( i = 0; i < N; i++ ) + { + noisevect[i] *= 0.25f; + } + } + + kk = 0; + k = 0; + Rnd_N_noise = N_noise; + + while ( k < 2 * L ) + { + if ( kk == 0 ) + { + tmp = ( ( own_random( ni_seed_forfec ) / (PCM16_TO_FLT_FAC) *0.2f ) + 0.5f ); + kk = 1; + } + else + { + tmp = ( ( own_random( ni_seed_forfec ) / (PCM16_TO_FLT_FAC) *0.3f ) + 0.7f ); + kk = 0; + } + + Rnd_N_noise = (int16_t) ( (float) N_noise * tmp ); + + sinq( (const float) EVS_PI / ( 2.0f * (float) Rnd_N_noise ), (const float) EVS_PI / ( 4.0f * (float) Rnd_N_noise ), (const int16_t) Rnd_N_noise, SS ); + + for ( i = 0; i < Rnd_N_noise; i++ ) + { + if ( k < 2 * L ) + { + synthesis[k] += ( noisevect[N_noise - Rnd_N_noise + i] * SS[i] + noisevect[N_noise + i] * SS[Rnd_N_noise - i - 1] ); /* *noisefact; */ + } + k++; + } + } + + if ( element_mode == EVS_MONO ) + { + kk = 7 * L / 20; + p_mdct_ola = prevsynth + 37 * L / 20; + } + else + { + kk = NS2SA( L * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); + p_mdct_ola = old_out + kk; + } + + /* overlappadd with the ms of valid mdct of the last frame */ + sinq( EVS_PI / ( 6.0f * L / 20.0f ), EVS_PI / ( 12.0f * L / 20.0f ), 3 * L / 20, SS ); + + for ( k = 0; k < 3 * L / 20; k++ ) + { + tmp = SS[k] * SS[k]; + synthesis[k] = p_mdct_ola[k] * ( 1 - tmp ) + synthesis[k] * tmp; + } + + mvr2r( synthesis, synthesis + kk, 2 * L - kk ); + mvr2r( synthesis + L, gapsynth, L ); + + mvr2r( prevsynth + alignment_point - kk, synthesis, kk ); + + return; +} + + +/*-------------------------------------------------------------------------- + * fec_alg() + * + * Pitch based error-concealment algorithm with adaptive analysis frame + * length + *--------------------------------------------------------------------------*/ + +static void fec_alg( + const float *prevsynth, /* i : previous synthesis */ + const float *prevsynth_LP, /* i : down-sampled synthesis */ + float *ecu_rec, /* o : ECU frame with Windowing/TDA */ + const int16_t output_frame, /* i : Output frame length */ + const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ + const int16_t decimatefactor, /* i : Downsampling factor */ + const int16_t HqVoicing, /* i : HQ voicing flag */ + float *gapsynth, /* o : Buffer for crossfade to good frame */ + int16_t *ni_seed_forfec, /* i/o: Random seed for picking noise segments */ + const int16_t element_mode, /* i : IVAS element mode */ + const float *old_out + +) +{ + int16_t n, Nfft; + float sum_Tf_abs; + float Tfr[FEC_FFT_MAX_SIZE]; + float Tfi[FEC_FFT_MAX_SIZE]; + float Tf_abs[FEC_FFT_MAX_SIZE / 2]; + float synthesis[2 * L_FRAME48k]; + + fec_ecu_dft( prevsynth_LP, N, Tfr, Tfi, &sum_Tf_abs, Tf_abs, &Nfft, element_mode ); + + sinusoidal_synthesis( Tfr, Tfi, Tf_abs, N, output_frame, decimatefactor, Nfft, sum_Tf_abs, synthesis, HqVoicing ); + + fec_noise_filling( prevsynth, synthesis, output_frame, N * decimatefactor, HqVoicing, gapsynth, ni_seed_forfec, element_mode, old_out ); + + n = (int16_t) ( (float) output_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + wtda( synthesis + ( output_frame - n ), ecu_rec, NULL, ALDO_WINDOW, ALDO_WINDOW, output_frame ); + + return; +} + + +/*-------------------------------------------------------------------------- + * hq_phase_ecu() + * + * Main routine for HQ phase ECU + *--------------------------------------------------------------------------*/ + +static void hq_phase_ecu( + const float *prevsynth, /* i : buffer of previously synthesized signal */ + float *ecu_rec, /* o : reconstructed frame in tda domain */ + int16_t *time_offs, /* i/o: Sample offset for consecutive frame losses*/ + float *X_sav, /* i/o: Stored spectrum of prototype frame */ + int16_t *num_p, /* i/o: Number of identified peaks */ + int16_t *plocs, /* i/o: Peak locations */ + float *plocsi, /* i/o: Interpolated peak locations */ + const float env_stab, /* i : Envelope stability parameter */ + int16_t *last_fec, /* i/o: Flag for usage of pitch dependent ECU */ + const int16_t prev_bfi, /* i : indicating burst frame error */ + const int16_t old_is_transient[2], /* i : flags indicating previous transient frames*/ + float *mag_chg_1st, /* i/o: per band magnitude modifier for transients*/ + float Xavg[LGW_MAX], /* i/o: Frequency group average gain to fade to */ + float *beta_mute, /* o : Factor for long-term mute */ + const int16_t bwidth, /* i : Encoded bandwidth */ + const int16_t output_frame, /* i : frame length */ + const float pcorr, /* i : pitch correlation */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + int16_t Lprot; + float mag_chg[LGW_MAX], ph_dith, X[L_PROT48k]; + int16_t seed; + float alpha[LGW_MAX], beta[LGW_MAX]; + const float *old_dec; + float noise_fac; + int16_t ph_ecu_lookahead; + + noise_fac = 1.0f; + + if ( element_mode == EVS_MONO ) + { + ph_ecu_lookahead = NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_LOOKAHEAD_NS ); + } + else + { + ph_ecu_lookahead = 0; + } + + + Lprot = ( 2 * output_frame * 4 ) / 5; + + if ( !prev_bfi || ( prev_bfi && *last_fec && ( *time_offs == output_frame ) ) ) + { + if ( prev_bfi && *last_fec && element_mode == EVS_MONO ) + { + *time_offs += 0; + } + else + { + *time_offs = 0; + } + + trans_ana( prevsynth + 2 * output_frame - Lprot - *time_offs + ph_ecu_lookahead, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, *last_fec, alpha, beta, beta_mute, Xavg ); + spec_ana( prevsynth + 2 * output_frame - Lprot - *time_offs + ph_ecu_lookahead, plocs, plocsi, num_p, X_sav, output_frame, bwidth, element_mode, &noise_fac, pcorr ); + + if ( prev_bfi && *last_fec ) + { + *time_offs += output_frame; + } + } + else + { + *time_offs += output_frame; + if ( *time_offs <= 0 ) + { + /* detect wrap around of st->time_offs */ + *time_offs = MAX16B; /* continued muting will ensure that the now fixed seeds are not creating tones */ + } + + trans_ana( prevsynth + 2 * output_frame - Lprot, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, 0, alpha, beta, beta_mute, Xavg ); /* 1.0 stable-music, 0.0 speech-like */ + } + + mvr2r( X_sav, X, Lprot ); + + /* seed for own_rand2 */ + seed = *time_offs; + if ( *num_p > 0 ) + { + seed += plocs[*num_p - 1]; + } + + subst_spec( plocs, plocsi, num_p, *time_offs, X, mag_chg, ph_dith, old_is_transient, output_frame, &seed, alpha, beta, *beta_mute, Xavg, element_mode, ph_ecu_lookahead, noise_fac ); + + /* reconstructed frame in tda domain */ + old_dec = prevsynth + 2 * output_frame - NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); + rec_frame( X, ecu_rec, output_frame, old_dec, element_mode, num_p, plocs ); + + return; +} + + +/*-------------------------------------------------------------------------- + * hq_ecu() + * + * Main routine for HQ ECU + *--------------------------------------------------------------------------*/ + +void hq_ecu( + const float *prevsynth, /* i : buffer of previously synthesized signal */ + float *ecu_rec, /* o : reconstructed frame in tda domain */ + int16_t *time_offs, /* i/o: Sample offset for consecutive frame losses*/ + float *X_sav, /* i/o: Stored spectrum of prototype frame */ + int16_t *num_p, /* i/o: Number of identified peaks */ + int16_t *plocs, /* i/o: Peak locations */ + float *plocsi, /* i/o: Interpolated peak locations */ + const float env_stab, /* i : Envelope stability parameter */ + int16_t *last_fec, /* i/o: Flag for usage of pitch dependent ECU */ + const int16_t ph_ecu_HqVoicing, /* i : HQ Voicing flag */ + int16_t *ph_ecu_active, /* i : Phase ECU active flag */ + float *gapsynth, /* o : Gap synthesis for crossfade to good frame */ + const int16_t prev_bfi, /* i : indicating burst frame error */ + const int16_t old_is_transient[2], /* i : flags indicating previous transient frames*/ + float *mag_chg_1st, /* i/o: per band magnitude modifier for transients*/ + float Xavg[LGW_MAX], /* i/o: Frequency group average gain to fade to */ + float *beta_mute, /* o : Factor for long-term mute */ + const int16_t output_frame, /* i : frame length */ + Decoder_State *st /* i/o: decoder state structure */ +) +{ + int16_t N; + float corr = 0.0f; + int16_t decimatefactor; + float prevsynth_LP[2 * L_FRAME8k]; + HQ_DEC_HANDLE hHQ_core; + const float *fec_alg_input; + int16_t evs_mode_selection; + int16_t ivas_mode_selection; + + hHQ_core = st->hHQ_core; + if ( st->element_mode == EVS_MONO ) + { + fec_alg_input = prevsynth + NS2SA( output_frame * FRAMES_PER_SEC, ACELP_LOOK_NS / 2 - PH_ECU_LOOKAHEAD_NS ); + } + else + { + fec_alg_input = prevsynth - NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_LOOKAHEAD_NS ); + } + + /* find pitch and R value */ + if ( !( output_frame < L_FRAME16k ) ) + { + fec_ecu_pitch( fec_alg_input, prevsynth_LP, output_frame, &N, &corr, &decimatefactor, ph_ecu_HqVoicing ); + } + else + { + corr = 0.0f; + decimatefactor = 4; + N = output_frame / 4; + } + + evs_mode_selection = ( st->total_brate >= 48000 && ( output_frame >= L_FRAME16k && !prev_bfi && ( !old_is_transient[0] || old_is_transient[1] ) && + ( ph_ecu_HqVoicing || ( ( ( hHQ_core->env_stab_plc > 0.5 ) && ( corr < 0.6 ) ) || ( hHQ_core->env_stab_plc < 0.5 && ( corr > 0.85 ) ) ) ) ) ) || + ( st->total_brate < 48000 && ( ( ph_ecu_HqVoicing || corr > 0.85 ) && !prev_bfi && ( !old_is_transient[0] || old_is_transient[1] ) ) ); + + ivas_mode_selection = ( N < PH_ECU_N_LIMIT ) || ( corr < PH_ECU_CORR_LIMIT ); + + if ( ( ( st->element_mode == EVS_MONO ) && evs_mode_selection ) || + ( ( st->element_mode != EVS_MONO ) && evs_mode_selection && ivas_mode_selection ) ) + + { + fec_alg( fec_alg_input, prevsynth_LP, ecu_rec, output_frame, N, decimatefactor, ph_ecu_HqVoicing, gapsynth, &hHQ_core->ni_seed_forfec, st->element_mode, st->hHQ_core->old_out ); + *last_fec = 1; + *ph_ecu_active = 0; + *time_offs = output_frame; + } + else + { + hq_phase_ecu( prevsynth - NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_LOOKAHEAD_NS ), ecu_rec, time_offs, X_sav, num_p, plocs, plocsi, env_stab, last_fec, prev_bfi, old_is_transient, mag_chg_1st, Xavg, beta_mute, st->bwidth, output_frame, corr, st->element_mode ); + + *last_fec = 0; + *ph_ecu_active = 1; + } + + return; +} diff --git a/lib_dec/FEC_adapt_codebook.c b/lib_dec/FEC_adapt_codebook.c new file mode 100644 index 0000000000..5ffd9a1fde --- /dev/null +++ b/lib_dec/FEC_adapt_codebook.c @@ -0,0 +1,496 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_dec.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------------- + * FEC_synchro_exc() + * + * Perform resynchronisation of the last glottal pulse in voiced frame lost + *------------------------------------------------------------------------*/ + +/*! r: do_WI flag */ +static int16_t FEC_synchro_exc( + const int16_t L_frame, /* i : length of the frame */ + float *exc, /* i/o: exc vector to modify */ + const int16_t desire_puls_pos, /* i : Pulse position send by the encoder */ + const int16_t true_puls_pos, /* i : Present pulse location */ + const int16_t Old_pitch /* i : Pitch use to create temporary adaptive codebook */ +) +{ + float exc_tmp[L_FRAME16k + L_SUBFR], min_energy, *pt_exc, *pt_exc1, ftmp, fact; + int16_t i, j, point_to_remove, point_to_add = -1, nb_min; + int16_t min_pos[L_FRAME16k / PIT_MIN_DOUBLEEXTEND], points_by_pos[L_FRAME16k / PIT_MIN_DOUBLEEXTEND], total_point, tmp_len; + int16_t *pt_pos, pos, start_search, tmp16; + int16_t remaining_len; + + /* Init */ + for ( i = 0; i < L_FRAME16k / PIT_MIN_DOUBLEEXTEND; i++ ) + { + min_pos[i] = 10000; + points_by_pos[i] = 0; + } + + /* Find number of point to remove and number of minimum */ + point_to_remove = true_puls_pos - desire_puls_pos; /* if it is negative it means remove point else it means add point */ + + pos = L_frame - true_puls_pos; + nb_min = pos / Old_pitch; + + /* if Old pitch < 128, must have at least 2 min */ + if ( Old_pitch <= 128 && nb_min < 2 ) + { + nb_min = 2; + } + + /* Must have at least 1 min */ + if ( nb_min == 0 ) + { + /* Safety check, should be very rare but still needed*/ + nb_min = 1; + } + + pt_exc = exc + pos; + + /* Find start_search for minimum energy search*/ + start_search = -3 * Old_pitch / 4; + + if ( start_search + pos < 0 ) + { + /* This case is rare but still need to be taken care*/ + start_search = -pos; + + if ( abs( start_search ) < Old_pitch / 8 ) + { + /* it's not safe to remove/add point inside 1/8 of the pulse position */ + return 0; + } + } + + /* Find min energy in the first pitch section */ + min_energy = 65536 * 65536.0f; + + /* -------------------------------------------------------------------- + * The minimum energy regions are determined by the computing the energy + * using a sliding 5-sample window. The minimum energy position is set + * at the middle of the window at which the energy is at minimum + * --------------------------------------------------------------------*/ + + ftmp = ( pt_exc[start_search] * pt_exc[start_search] ); + ftmp += ( pt_exc[start_search + 1] * pt_exc[start_search + 1] ); + ftmp += ( pt_exc[start_search + 2] * pt_exc[start_search + 2] ); + ftmp += ( pt_exc[start_search + 3] * pt_exc[start_search + 3] ); + ftmp += ( pt_exc[start_search + 4] * pt_exc[start_search + 4] ); + + if ( ftmp < min_energy ) + { + min_energy = ftmp; + min_pos[0] = ( pos + start_search + 2 ); + } + + for ( i = start_search; i < -5; i++ ) + { + ftmp -= pt_exc[i] * pt_exc[i]; + ftmp += pt_exc[i + 5] * pt_exc[i + 5]; + if ( ftmp < min_energy ) + { + min_energy = ftmp; + min_pos[0] = pos + i + 2; + } + } + + for ( j = 1; j < nb_min; j++ ) + { + min_pos[j] = min_pos[j - 1] - Old_pitch; + /* If the first minimum is in the past, forget this minimum */ + if ( min_pos[j] < 0 ) + { + /* Safety check */ + min_pos[j] = -10000; + nb_min = nb_min - 1; + } + } + + /* safety-measure against not properly initialized min_pos[] */ + if ( min_energy >= 65536 * 65536.0f ) + { + return 0; + } + + /*-------------------------------------------------------------------- + * Determine the number of samples to be added or removed at each pitch + * cycle whereby less samples are added/removed at the beginning and + * more towards the end of the frame + * --------------------------------------------------------------------*/ + + if ( nb_min == 1 || abs( point_to_remove ) == 1 ) + { + nb_min = 1; + points_by_pos[0] = (int16_t) abs( point_to_remove ); + } + else + { + /* First position */ + fact = (float) abs( point_to_remove ) / ( nb_min * nb_min ); + + total_point = (int16_t) ( fact + 0.5 ); + points_by_pos[0] = total_point; + + for ( i = 2; i <= nb_min; i++ ) + { + points_by_pos[i - 1] = (int16_t) ( fact * ( i * i ) - total_point + 0.5 ); + total_point += points_by_pos[i - 1]; + + /* ensure a constant increase */ + if ( points_by_pos[i - 1] < points_by_pos[i - 2] ) + { + tmp16 = points_by_pos[i - 2]; + points_by_pos[i - 2] = points_by_pos[i - 1]; + points_by_pos[i - 1] = tmp16; + } + } + } + + /* -------------------------------------------------------------------- + * Sample deletion or insertion is performed in minimum energy regions. + * At the end of this section the last maximum pulse in the concealed + * excitation is forced to align to the actual maximum pulse position + * at the end of the frame which is transmitted in the future frame. + * --------------------------------------------------------------------*/ + + if ( point_to_remove > 0 ) + { + point_to_add = point_to_remove; + } + + pt_exc = exc_tmp; + pt_exc1 = exc; + + i = 0; + pt_pos = min_pos + nb_min - 1; + if ( point_to_add > 0 ) /* add some points */ + { + remaining_len = L_frame; + + for ( i = 0; i < nb_min; i++ ) + { + /* Copy section */ + if ( i == 0 ) + { + /* Compute len to copy */ + tmp_len = *pt_pos; + } + else + { + /* Compute len to copy */ + tmp_len = *pt_pos - *( pt_pos + 1 ) - points_by_pos[i - 1]; + } + + mvr2r( pt_exc1, pt_exc, tmp_len ); + remaining_len -= tmp_len; + pt_exc1 += tmp_len; + pt_exc += tmp_len; + + /* add some points */ + ftmp = -( *pt_exc1 / 20 ); + for ( j = 0; j < points_by_pos[i]; j++ ) + { + *pt_exc++ = ftmp; + ftmp = -ftmp; + } + + remaining_len -= points_by_pos[i]; + pt_pos--; + } + + /* Copy remaining length */ + remaining_len = max( 0, remaining_len ); + mvr2r( pt_exc1, pt_exc, remaining_len ); + + /* Update true excitation buffer*/ + mvr2r( exc_tmp, exc, L_frame ); + } + else /* Remove points */ + { + remaining_len = L_frame; + + for ( i = 0; i < nb_min; i++ ) + { + if ( i == 0 ) + { + /* Compute len to copy */ + tmp_len = *pt_pos; + } + else + { + /* Compute len to copy */ + tmp_len = *pt_pos - *( pt_pos + 1 ) - points_by_pos[i - 1]; + } + + mvr2r( pt_exc1, pt_exc, tmp_len ); + remaining_len -= tmp_len; + pt_exc1 += tmp_len; + pt_exc += tmp_len; + + /* Remove points */ + for ( j = 0; j < points_by_pos[i]; j++ ) + { + pt_exc1++; + } + pt_pos--; + } + + /* Copy remaining length */ + remaining_len = max( 0, remaining_len ); + mvr2r( pt_exc1, pt_exc, remaining_len ); + + /* Update true excitation buffer*/ + mvr2r( exc_tmp, exc, L_frame ); + } + + return 1; +} + + +/*---------------------------------------------------------------------* + * FEC_SinOnset() + * + * Create an artificial onset when it is lost + *---------------------------------------------------------------------*/ + +void FEC_SinOnset( + float *exc, /* i/o: exc vector to modify */ + int16_t puls_pos, /* i : last pulse position desired */ + int16_t T0, + float enr_q, /* i : energy provided by the encoder */ + float *Aq, /* i : A(z) filter */ + const int16_t L_frame /* i : frame length */ +) +{ + int16_t P0, onset_len, sign = 0, i, len, L_subfr; + float h1[L_SUBFR16k], mem[M], exc_tmp[L_FRAME16k + MODE1_L_FIR_FER]; + float *pt_end, *pt_exc, enr_LP, gain; + + L_subfr = L_SUBFR; + if ( L_frame == L_FRAME16k ) + { + L_subfr = L_SUBFR16k; + } + + if ( T0 < 2 * L_subfr ) + { + onset_len = 2 * L_subfr; + } + else + { + onset_len = T0; + } + + + P0 = puls_pos; + + if ( P0 < 0 ) + { + sign = 1; + P0 = -P0; + } + + if ( P0 > PIT_MAX && L_frame == L_FRAME ) + { + P0 = PIT_MAX; /* Should never be the case, however... */ + } + else if ( P0 > PIT16k_MAX && L_frame == L_FRAME16k ) + { + P0 = PIT16k_MAX; /* Should never be the case, however... */ + } + set_f( exc_tmp, 0, L_frame + MODE1_L_FIR_FER ); /* Reset excitation vector */ + + /*--------------------------------------------* + * Find LP filter impulse response energy + *--------------------------------------------*/ + + set_f( h1, 0, L_subfr ); /* Find the impulse response */ + set_f( mem, 0, M ); + h1[0] = 1.0f; + syn_filt( Aq, M, h1, h1, L_subfr, mem, 0 ); + enr_LP = dotp( h1, h1, L_subfr ) + 0.01f; /* Find the impulse response energy */ + + /*------------------------------------------------------------------------------------------* + * Construct the harmonic part as a train of low-pass filtered pulses + *------------------------------------------------------------------------------------------*/ + + pt_exc = exc_tmp + L_frame - 1 - MODE1_L_FIR_FER / 2 - P0; /* beginning of the 1st pulse */ + pt_end = exc_tmp + onset_len; + + len = (int16_t) ( pt_exc - pt_end ); + if ( len > MODE1_L_FIR_FER ) + { + len = MODE1_L_FIR_FER; + } + if ( !sign ) + { + for ( i = 0; i < len; i++ ) + { + /* The filter response would have E=1 in full band. */ + pt_exc[i] += h_low[i]; /* As it is lp filtered, the E is somewhat lower */ + } + } + else + { + for ( i = 0; i < len; i++ ) + { + /* The filter response would have E=1 in full band. */ + pt_exc[i] -= h_low[i]; /* As it is lp filtered, the E is somewhat lower */ + } + } + + gain = (float) sqrt( 1.5 * enr_q / enr_LP ); /* divide by LP filter E, scale by transmitted E */ + gain *= 0.96f; + for ( i = 0; i < L_frame; i++ ) + { + exc_tmp[i] *= gain; + } + + mvr2r( &exc_tmp[L_frame - L_EXC_MEM], exc, L_EXC_MEM ); + + return; +} + +int16_t FEC_enhACB( + const int16_t L_frame, /* i : frame length */ + const int16_t last_L_frame, /* i : frame length of last frame */ + float *exc_io, /* i/o : adaptive codebook memory */ + const int16_t new_pit, /* i : decoded first frame pitch */ + const int16_t puls_pos, /* i : decoder position of the last glottal pulses decoded in the previous frame */ + const float bfi_pitch /* i : pitch used for concealment */ +) +{ + int16_t Tc, P0, sign, pit_search; + int16_t Tlist[10], Terr, diff_pit, dist_Plast; + float ftmp; + float exc[L_FRAME16k + L_SUBFR]; + int16_t do_WI = 1; + + set_f( exc, 0.0f, L_FRAME16k - L_EXC_MEM ); + set_f( exc + L_FRAME16k, 0.0f, L_SUBFR ); + mvr2r( exc_io, exc + L_FRAME16k - L_EXC_MEM, L_EXC_MEM ); + + Tc = (int16_t) bfi_pitch; + mvr2r( exc + L_FRAME16k - Tc, exc + L_FRAME16k, L_SUBFR ); + + /*------------------------------------------------------------ + * Decode phase information transmitted in the bitstream + * (The position of the absolute maximum glottal pulse from + * the end of the frame and its sign) + *------------------------------------------------------------*/ + + P0 = puls_pos; + sign = 0; + if ( P0 < 0 ) + { + sign = 1; + P0 = -P0; + } + + if ( L_frame == L_FRAME ) + { + if ( P0 > PIT_MAX ) + { + P0 = PIT_MAX; /* Should never be the case, however... */ + } + } + else /* L_frame == L_FRAME16k */ + { + if ( P0 > PIT16k_MAX ) + { + P0 = PIT16k_MAX; /* Should never be the case, however... */ + } + } + + /*---------------------------------------------------------------------------------- + * Find the position of the first the maximum(minimum) lp_filtered pulse + * <----- Mem --->|<--------------------- L_frame ------------>|<----- L_SUBFR --->| + * |<-------pit_search----> | | + *----------------------------------------------------------------------------------*/ + + pit_search = Tc; + + Tlist[0] = findpulse( L_frame, exc + L_frame - pit_search, pit_search, DEC, &sign ); + + Terr = (int16_t) abs( pit_search - Tlist[0] - P0 ); + + dist_Plast = Tc - Tlist[0]; + + Tlist[1] = findpulse( L_frame, exc + L_frame - pit_search, pit_search + L_SUBFR, DEC, &sign ); + + if ( Terr > abs( Tlist[1] - Tc + P0 ) ) + { + dist_Plast = Tc - Tlist[1]; + Terr = (int16_t) abs( Tlist[1] - Tc + P0 ); + } + + diff_pit = (int16_t) abs( new_pit - Tc ); + ftmp = (float) (int16_t) ( (float) L_frame / (float) Tc + 0.5 ); + + if ( Terr <= ftmp * diff_pit && Terr != 0 /* If Terr = 0, no resynchronization required */ + && Terr < L_SUBFR ) /* prevent catastrophy search */ + { + /* perform excitation resynchronization here */ + do_WI = FEC_synchro_exc( L_frame, exc, P0, dist_Plast, Tc ); + mvr2r( exc + L_FRAME16k - L_EXC_MEM, exc_io, L_EXC_MEM ); + } + else + { + do_WI = 0; + } + + if ( last_L_frame != L_FRAME16k ) + { + /* This is essential in case of bitrate switching + FEC*/ + do_WI = 0; + } + + return do_WI; +} diff --git a/lib_dec/FEC_clas_estim.c b/lib_dec/FEC_clas_estim.c new file mode 100644 index 0000000000..7a27532f17 --- /dev/null +++ b/lib_dec/FEC_clas_estim.c @@ -0,0 +1,803 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include "cnst.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "stat_dec.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define K_COR_DEC 0.8547f /* <-0.29, 0.88> */ +#define C_COR_DEC 0.2479f + +#define K_TILT_DEC 0.8333f /* <-0.35, 0.85> */ +#define C_TILT_DEC 0.2917f + +#define K_ZC_DEC -0.04f /* <63, 38> */ +#define C_ZC_DEC 2.52f + +#define K_ENR_DEC 0.04f /* <-14, 11> */ +#define C_ENR_DEC 0.56f + +#define K_PC_DEC -0.0357f /* <45, 17> */ +#define C_PC_DEC 1.6071f + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static float calculate_zero_crossings( const float *synth, const int16_t L_frame ); + +static float calculate_pitch_synchr_norm_correlation( const float *pitch, const float *synth, const int16_t L_frame, const int16_t L_subfr ); + +static float calculate_spectral_tilt( const float *synth, const int16_t nbSubfr, const int16_t L_subfr ); + +static int16_t calculate_classification_result( const int16_t last_good, float fmerit1, const float ener, const int16_t codec_mode ); + +static void FEC_ClassifierCore( const float *synth, const float *pitch, const int16_t L_frame, const int16_t codec_mode, int16_t *clas, float *lp_speech, float *frame_ener, float *ener, float *enern, float *class_para, const float LTP_Gain, const int16_t narrowBand, const SIGNAL_CLASSIFIER_MODE mode ); + +static int16_t FEC_dec_class( Decoder_State *st, float *enr_q ); + +static void FEC_classificationMusic( const int16_t coder_type, int16_t *decision_hyst, int16_t *clas ); + + +/*------------------------------------------------------------------------* + * calculate_zero_crossings() + * + * + *------------------------------------------------------------------------*/ + +static float calculate_zero_crossings( + const float *synth, + const int16_t L_frame ) +{ + int16_t i; + float zc_frame; + + zc_frame = 0.f; + + for ( i = 0; i < L_frame; ++i ) + { + if ( ( synth[i] <= 0.0f ) && ( synth[i - 1] > 0.0f ) ) + { + zc_frame += 1.0f; + } + } + + /* Renormalization for 12.8kHz core*/ + zc_frame *= 256.0f / (float) L_frame; + + return zc_frame; +} + +/*------------------------------------------------------------------------* + * calculate_pitch_synchr_norm_correlation() + * + * + *------------------------------------------------------------------------*/ + +static float calculate_pitch_synchr_norm_correlation( + const float *pitch, + const float *synth, + const int16_t L_frame, + const int16_t L_subfr ) +{ + int16_t T0, pos; + int16_t j, i; + float cor_max[16] = { 0.f }; + float enr1t, enr2t, voicing; + + T0 = (int16_t) pitch[3]; + + if ( T0 > ( 3 * ( L_subfr / 2 ) ) ) + { + T0 = (int16_t) ( 0.5f * ( pitch[2] + pitch[3] ) + 0.5f ); + } + + pos = L_frame; + j = 0; + + while ( pos > ( L_frame / L_subfr == 4 ? 3 * L_subfr : 4 * L_subfr ) ) + { + pos -= T0; + + cor_max[j] = dotp( &synth[pos], &synth[pos - T0], T0 ); + enr1t = dotp( &synth[pos - T0], &synth[pos - T0], T0 ); + enr2t = dotp( &synth[pos], &synth[pos], T0 ); + + cor_max[j] *= inv_sqrt( enr1t * enr2t + 0.1f ); + + + if ( ( pos - T0 ) < ( L_frame - L_subfr ) ) + { + T0 = (int16_t) ( 0.5f * ( pitch[2] + pitch[3] ) + 0.5f ); + } + j++; + } + + voicing = cor_max[0]; + + for ( i = 1; i < j; ++i ) + { + voicing += cor_max[i]; + } + + if ( j > 1 ) + { + voicing /= j; + } + + return voicing; +} + + +/*------------------------------------------------------------------------* + * calculate_spectral_tilt() + * + * + *------------------------------------------------------------------------*/ + +static float calculate_spectral_tilt( + const float *synth, + const int16_t nbSubfr, + const int16_t L_subfr ) +{ + int16_t i; + float tilt; + + float enr1t = 0.0f; + float enr2t = 0.0f; + const float *pt1 = synth + L_subfr; + const float *pt2 = synth + L_subfr - 1; + + for ( i = 0; i < nbSubfr - 1; ++i ) + { + enr1t += dotp( pt1, pt1, L_subfr ); + enr2t += dotp( pt1, pt2, L_subfr ); + + pt1 += L_subfr; + pt2 += L_subfr; + } + + tilt = enr2t / ( enr1t + 0.1f ); + + return tilt; +} + +/*------------------------------------------------------------------------* + * calculate_classification_result() + * + * + *------------------------------------------------------------------------*/ + +static int16_t calculate_classification_result( + const int16_t last_good, + float fmerit1, + const float ener, + const int16_t codec_mode ) +{ + int16_t result = UNVOICED_CLAS; + + switch ( last_good ) + { + case VOICED_CLAS: + case ONSET: + case SIN_ONSET: + case VOICED_TRANSITION: + + if ( fmerit1 < 0.39f ) + { + result = UNVOICED_CLAS; + } + else if ( fmerit1 < 0.63f && ( codec_mode == MODE2 || ener < -15.0f ) ) + { + result = VOICED_TRANSITION; + } + else + { + result = VOICED_CLAS; + } + break; + + case UNVOICED_CLAS: + case UNVOICED_TRANSITION: + case INACTIVE_CLAS: /* relevant for MODE2 only */ + + if ( fmerit1 > 0.56f ) + { + result = ONSET; + } + else if ( fmerit1 > 0.45f ) + { + result = UNVOICED_TRANSITION; + } + else + { + result = UNVOICED_CLAS; + } + break; + } + + return result; +} + + +/*------------------------------------------------------------------------* + * FEC_ClassifierCore() + * + * + *------------------------------------------------------------------------*/ + +static void FEC_ClassifierCore( + const float *synth, + const float *pitch, /* i : pitch values for each subframe */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t codec_mode, /* i : codec mode */ + int16_t *clas, /* i/o: frame classification */ + float *lp_speech, /* i/o: long term active speech energy average */ + float *frame_ener, /* o : */ + float *ener, /* o : */ + float *enern, /* o : */ + float *class_para, /* o : classification para. fmerit1 */ + const float LTP_Gain, /* i : */ + const int16_t narrowBand, /* i : */ + const SIGNAL_CLASSIFIER_MODE mode /* i : */ +) +{ + float zc_frame; + float tiltn, corn, zcn, pcn, fmerit1, tilt; + float voicing; + float pc = 0.0f; + + /*------------------------------------------------------------------------* + * Compute the zero crossing rate for all subframes + *------------------------------------------------------------------------*/ + + zc_frame = calculate_zero_crossings( synth, L_frame ); + + /*------------------------------------------------------------------------* + * Compute the normalized correlation pitch-synch at the end of the frame + *------------------------------------------------------------------------*/ + + voicing = calculate_pitch_synchr_norm_correlation( pitch, synth, L_frame, L_SUBFR ); + + /*------------------------------------------------------------------------* + * Compute pitch coherence + *------------------------------------------------------------------------*/ + + pc = 0; /* just to remove MSVC warnings */ + if ( codec_mode == MODE1 || !( LTP_Gain != -1.0f && mode == CLASSIFIER_TCX ) ) + { + pc = (float) fabs( pitch[3] + pitch[2] - pitch[1] - pitch[0] ) * 256.0f / (float) L_frame; + } + + /*------------------------------------------------------------------------* + * Compute spectral tilt + *------------------------------------------------------------------------*/ + + tilt = calculate_spectral_tilt( synth, L_frame / L_SUBFR, L_SUBFR ); + + /*------------------------------------------------------------------------* + * Compute pitch-synchronous energy at the frame end + *------------------------------------------------------------------------*/ + + *ener = frame_energy( L_frame, pitch, synth, *lp_speech, frame_ener ); + + /*------------------------------------------------------------------------* + * transform parameters between 0 & 1 + * find unique merit function + *------------------------------------------------------------------------*/ + + *enern = K_ENR_DEC * *ener + C_ENR_DEC; + tiltn = K_TILT_DEC * tilt + C_TILT_DEC; + corn = K_COR_DEC * voicing + C_COR_DEC; + zcn = K_ZC_DEC * zc_frame + C_ZC_DEC; + + if ( codec_mode == MODE2 && LTP_Gain != -1.0f && mode == CLASSIFIER_TCX ) + { + pcn = LTP_Gain * C_PC_DEC; + } + else + { + pcn = K_PC_DEC * pc + C_PC_DEC; + } + + if ( pcn > 1.0f ) + { + pcn = 1.0f; + } + else if ( pcn < 0.0f ) + { + pcn = 0.0f; + } + + fmerit1 = ( 1.0f / 6.0f ) * ( tiltn + 2.0f * corn + zcn + pcn + *enern ); + + if ( codec_mode == MODE2 && narrowBand ) + { + fmerit1 *= 0.9f; + } + + /*------------------------------------------------------------------------* + * frame classification + *------------------------------------------------------------------------*/ + + if ( codec_mode == MODE1 ) + { + *class_para = fmerit1; + } + *clas = calculate_classification_result( *clas, fmerit1, *ener, codec_mode ); + + return; +} + + +/*------------------------------------------------------------------------* + * FEC_clas_estim() + * + * Estimation of frame class, if not available in the bitstream + *------------------------------------------------------------------------*/ + +void FEC_clas_estim( + const float *syn, + const float *pitch, /* i : pitch values for each subframe */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t coder_type, /* i : coder type */ + const int16_t codec_mode, /* i : codec mode */ + float *mem_syn_clas_estim, /* i/o: memory of the synthesis signal for frame class estimation */ + int16_t *clas, /* i/o: frame classification */ + float *lp_speech, /* i/o: long term active speech energy average */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + int16_t *decision_hyst, /* i/o: hysteresis of the music/speech decision */ + int16_t *locattack, /* i/o: detection of attack (mainly to localized speech burst) */ + int16_t *UV_cnt, /* i/o: number of consecutives frames classified as UV */ + float *LT_UV_cnt, /* i/o: long term consecutives frames classified as UV */ + float *Last_ener, /* i/o: last_energy frame */ + int16_t *amr_io_class, /* i/o: classification for AMR-WB IO mode */ + float *lt_diff_etot, /* i/o: long-term total energy variation */ + float *class_para, /* o : classification para. fmerit1 */ + const float LTP_Gain, /* i : */ + const int16_t narrowBand, /* i : */ + const SIGNAL_CLASSIFIER_MODE mode, /* i : */ + const int16_t bfi, /* i : */ + const float preemph_fac, /* i : */ + const int16_t tcxonly, /* i : */ + const int32_t last_core_brate, /* i : last core bitrate */ + const int16_t FEC_mode /* i : ACELP FEC mode */ +) +{ + float diff_ener; + float mean_diff; + int16_t i; + float ftmp_c, fcorr, dev; + float frame_ener = 0.0f; + float ener = 0.0f; + float enern = 0.0f; + float tmp; + float old_synth[L_SYN_CLAS_ESTIM], *synth; + + /* After Rate Switching st->last_core is reset to 0. Check for last_core_brate is needed */ + if ( ( last_core_brate == SID_1k75 || last_core_brate == ACELP_6k60 || last_core_brate == ACELP_8k85 || last_core_brate == ACELP_12k65 || last_core_brate == ACELP_14k25 || last_core_brate == ACELP_15k85 || last_core_brate == ACELP_18k25 || last_core_brate == ACELP_19k85 || last_core_brate == ACELP_23k05 || last_core_brate == ACELP_23k85 ) && !Opt_AMR_WB && codec_mode == MODE2 && L_frame > L_FRAME ) + { + int16_t oldLenClasBuff, newLenClasBuff; + oldLenClasBuff = (int16_t) ( L_SYN_MEM_CLAS_ESTIM * L_FRAME / L_frame ); + newLenClasBuff = L_SYN_MEM_CLAS_ESTIM; + lerp( &mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - oldLenClasBuff], &mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - newLenClasBuff], newLenClasBuff, oldLenClasBuff ); + } + + synth = old_synth + L_SYN_MEM_CLAS_ESTIM; /* Set pointer to current frame */ + mvr2r( mem_syn_clas_estim, old_synth, L_SYN_MEM_CLAS_ESTIM ); /* Copy old synthesis into local buffer */ + mvr2r( syn, synth, L_frame ); /* Copy current synthesis into local buffer */ + + /* TCX outputs non-pre-speech */ + if ( codec_mode == MODE2 && mode == CLASSIFIER_TCX ) + { + tmp = syn[-1]; + preemph( synth, preemph_fac, L_frame, &tmp ); + } + + /* Do the classification only + - MODE1: when the class is not transmitted in the bitstream + - MODE2: on good frames (classifier is also called for bfi=1) */ + if ( ( codec_mode == MODE1 && ( FEC_mode == 0 || coder_type <= UNVOICED || Opt_AMR_WB ) ) || ( codec_mode == MODE2 && bfi != 1 && !tcxonly ) ) + { + + /*------------------------------------------------------------------------* + * classification decision depending on coder_type information + *------------------------------------------------------------------------*/ + + if ( coder_type == UNVOICED ) + { + *clas = UNVOICED_CLAS; + } + else if ( coder_type == VOICED ) + { + *clas = VOICED_CLAS; + } + else if ( coder_type == INACTIVE && !Opt_AMR_WB ) + { + *clas = INACTIVE_CLAS; + } + else + { + /*------------------------------------------------------------------------* + * GC, TC and AC frames + *------------------------------------------------------------------------*/ + + FEC_ClassifierCore( synth, pitch, L_frame, codec_mode, clas, lp_speech, &frame_ener, &ener, &enern, class_para, LTP_Gain, narrowBand, mode ); + } + + /*------------------------------------------------------------------------* + * Overwrite classification decision in case of music + *------------------------------------------------------------------------*/ + + if ( codec_mode == MODE1 ) + { + FEC_classificationMusic( coder_type, decision_hyst, clas ); + } + + /*---------------------------------------------------------------------------------* + * Measure energy on active voice frames (to improve FEC performance) + *---------------------------------------------------------------------------------*/ + + if ( *clas == VOICED_CLAS ) + { + if ( ( codec_mode == MODE2 && coder_type == VOICED ) || + ( codec_mode == MODE1 && ( Opt_AMR_WB || ( coder_type != GENERIC && coder_type != TRANSITION ) ) ) ) + { + enern = frame_energy( L_frame, pitch, synth, *lp_speech, &frame_ener ); + } + + *lp_speech = 0.99f * *lp_speech + 0.01f * frame_ener; + } + + if ( codec_mode == MODE1 ) + { + /*---------------------------------------------------------------------------------* + * Overwrite classification decision to UNVOICED_CLAS in case of INACTIVE frame + *---------------------------------------------------------------------------------*/ + + if ( coder_type == INACTIVE && *clas != INACTIVE_CLAS ) + { + *clas = UNVOICED_CLAS; + } + + /*---------------------------------------------------------------------------------* + * Classification refinement to improve noise coding (only in AMR-WB IO mode) + *---------------------------------------------------------------------------------*/ + + if ( Opt_AMR_WB ) + { + *locattack = 0; + + if ( *clas == UNVOICED_CLAS && coder_type != INACTIVE ) + { + /* unvoiced signal but not silence */ + if ( *lp_speech <= 40 ) + { + *UV_cnt = 16; + } + else + { + *UV_cnt -= 8; + } + } + else if ( coder_type != INACTIVE ) + { + /* neither unvoiced nor clean silence */ + ( *UV_cnt )++; + } + + if ( *UV_cnt > 300 ) + { + *UV_cnt = 300; + } + else if ( *UV_cnt < 0 ) + { + *UV_cnt = 0; + } + + /* Update long-term average number of frames between UNVOICED */ + if ( coder_type == INACTIVE ) + { + /* tends to speech if no activity */ + *LT_UV_cnt = 0.95f * *LT_UV_cnt; + + if ( *UV_cnt > 125 ) + { + *UV_cnt = 125; + } + } + else + { + *LT_UV_cnt = 0.9f * *LT_UV_cnt + 0.1f * *UV_cnt; + } + + /*-----------------------------------------------------------------------------* + * Compute frame energy difference + * IF long-term average is high and energy difference is relatively low + * classification is overwritten to AUDIO + * IF energy difference > 6.0dB + * consider an attack + *-----------------------------------------------------------------------------*/ + + diff_ener = ener - *Last_ener; + *Last_ener = ener; + *amr_io_class = *clas; + + if ( *LT_UV_cnt > LT_UV_THR && diff_ener < 12.0f ) + { + *amr_io_class = AUDIO_CLAS; + } + + if ( ( diff_ener > 6.0f && *clas == AUDIO_CLAS ) || ( diff_ener > 9.0f ) ) + { + *locattack = 1; + } + + /*------------------------------------------------------------------------* + * Compute statistical deviation of long-term energy variation and + * overwrite classification, if needed + *------------------------------------------------------------------------*/ + + if ( coder_type != INACTIVE ) + { + /* calculate mean energy variation of past MAX_LT frames */ + mean_diff = 0.0f; + for ( i = 1; i < MAX_LT; i++ ) + { + mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; + lt_diff_etot[i - 1] = lt_diff_etot[i]; + } + mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; + + /* find statistical deviation of the energy variation history against the last 15 frames */ + fcorr = 0.0f; + for ( i = MAX_LT - 15; i < MAX_LT; i++ ) + { + ftmp_c = lt_diff_etot[i] - mean_diff; + fcorr += ftmp_c * ftmp_c; + } + lt_diff_etot[i - 1] = diff_ener; + + /* compute statistical deviation */ + dev = (float) sqrt( fcorr / ( MAX_LT - 15 ) ); + + /* overwrite classification, if needed */ + if ( *amr_io_class == AUDIO_CLAS && dev > 5.0f ) + { + *amr_io_class = *clas; + *UV_cnt = (int16_t) ( 80 + *UV_cnt * 0.2f ); + } + } + } + } + } + + /* update the memory of synthesis for frame class estimation */ + mvr2r( old_synth + L_frame, mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + + return; +} + + +/*------------------------------------------------------------------------* + * FEC_dec_class() + * + * Decode class and energy information + *------------------------------------------------------------------------*/ + +static int16_t FEC_dec_class( + Decoder_State *st, /* i/o: decoder state structure */ + float *enr_q /* i : decoded energy */ +) +{ + int16_t clas, tmpS; + + clas = ONSET; + + if ( st->coder_type != VOICED ) + { + /* decode the class */ + tmpS = get_next_indice( st, FEC_BITS_CLS ); + + if ( tmpS == 0 ) + { + clas = UNVOICED_CLAS; + } + else if ( tmpS == 1 ) + { + if ( st->last_good >= VOICED_TRANSITION ) + { + clas = VOICED_TRANSITION; + } + else + { + clas = UNVOICED_TRANSITION; + } + } + else if ( tmpS == 2 ) + { + clas = VOICED_CLAS; + } + } + else + { + clas = VOICED_CLAS; + } + + /* decode the energy */ + if ( st->acelp_cfg.FEC_mode > 1 ) + { + tmpS = get_next_indice( st, FEC_BITS_ENR ); + + /* convert from logarithmic to linear domain (the range is 0 : 1.55 : 96 dB) */ + *enr_q = (float) pow( 10.0f, ( (float) tmpS * FEC_ENR_STEP ) / 10.0f ); + } + + return clas; +} + + +/*------------------------------------------------------------------------* + * FEC_classificationMusic() + * + * + *------------------------------------------------------------------------*/ + +static void FEC_classificationMusic( + const int16_t coder_type, /* i : coder type */ + int16_t *decision_hyst, /* i/o: hysteresis of the music/speech decision */ + int16_t *clas /* i/o: frame classification */ +) +{ + if ( coder_type == AUDIO ) + { + ( *decision_hyst ) += 4; + } + else + { + ( *decision_hyst )--; + } + + if ( coder_type == INACTIVE ) + { + *decision_hyst -= 10; + } + + if ( *decision_hyst > 200 ) + { + *decision_hyst = 200; + } + else if ( *decision_hyst < 0 ) + { + *decision_hyst = 0; + } + + if ( *decision_hyst > 16 && *clas < VOICED_CLAS && coder_type == AUDIO ) + { + *clas = VOICED_CLAS; + } + + return; +} + + +/*------------------------------------------------------------------------* + * FEC_pos_dec() + * + * Decode class, energy and last glottal pulse position at higher bitrates + * ( last glottal pulse position is encoded only in GENERIC frames ) + *------------------------------------------------------------------------*/ + +int16_t FEC_pos_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *last_pulse_pos, /* o : last glotal pulse position in the lost ACB */ + float *enr_q, /* o : decoded energy */ + const int16_t nBits_es_Pred /* i : number of bits for Es_pred Q */ + +) +{ + int16_t pitch_index, T0, T0_frac, T0_min, T0_max; + int16_t bit_pos_pitch_index, nBits; + + T0 = 0; + if ( st->coder_type > UNVOICED ) + { + /* decode the clas and energy information */ + if ( st->coder_type < AUDIO ) + { + st->clas_dec = FEC_dec_class( st, enr_q ); + + if ( st->coder_type == GENERIC && st->clas_dec == VOICED_CLAS && ( st->last_good <= UNVOICED_CLAS || st->last_good == INACTIVE_CLAS ) ) + { + st->clas_dec = SIN_ONSET; + } + } + + if ( st->coder_type == GENERIC && st->acelp_cfg.FEC_mode > 2 ) + { + nBits = st->acelp_cfg.pitch_bits[0]; + + /* The first pitch index is located right after the actual position + the last pulse position index + predicted innovation energy index */ + bit_pos_pitch_index = st->next_bit_pos + FEC_BITS_POS + nBits_es_Pred; + if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && st->coder_type == GENERIC ) + { + /* Harmonic flag is present */ + bit_pos_pitch_index++; + } + + /* retrieve the pitch index */ + pitch_index = get_indice( st, bit_pos_pitch_index, nBits ); + + /* decode pitch period */ + T0_min = PIT_MIN; + T0_max = PIT_MAX; + pit16k_Q_dec( pitch_index, 10, 1, &T0, &T0_frac, &T0_min, &T0_max, &st->BER_detect ); + + /* decode last pulse position */ + *last_pulse_pos = get_next_indice( st, FEC_BITS_POS ); + + /* respect the sign */ + if ( *last_pulse_pos >= 128 ) + { + *last_pulse_pos = -( *last_pulse_pos & 0x7F ); + } + + if ( T0 >= 128 ) + { + *last_pulse_pos *= 2; + } + + if ( st->BER_detect ) + { + *last_pulse_pos = 0; + } + } + } + + return T0; +} diff --git a/lib_dec/FEC_lsf_estim.c b/lib_dec/FEC_lsf_estim.c new file mode 100644 index 0000000000..f971ec4434 --- /dev/null +++ b/lib_dec/FEC_lsf_estim.c @@ -0,0 +1,93 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * FEC_lsf_estim() + * + * - LSP calculation + * - A(z) calculation + *-------------------------------------------------------------------*/ + +void FEC_lsf2lsp_interp( + Decoder_State *st, /* i/o: Decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + float *Aq, /* o : calculated A(z) for 4 subframes */ + float *lsf, /* o : estimated LSF vector */ + float *lsp /* o : estimated LSP vector */ +) +{ + /* convert LSFs to LSPs */ + if ( st->Opt_AMR_WB ) + { + isf2isp( lsf, lsp, M, INT_FS_12k8 ); + } + else + { + if ( L_frame == L_FRAME ) + { + lsf2lsp( lsf, lsp, M, INT_FS_12k8 ); + } + else /* L_frame == L_FRAME16k */ + { + lsf2lsp( lsf, lsp, M, INT_FS_16k ); + } + } + + /*----------------------------------------------------------------------* + * Interpolate LSP vector and find A(z) + *----------------------------------------------------------------------*/ + + if ( st->Opt_AMR_WB ) + { + int_lsp( L_frame, st->lsp_old, lsp, Aq, M, interpol_isp_amr_wb, 1 ); + } + else + { + int_lsp( L_frame, st->lsp_old, lsp, Aq, M, interpol_frac_12k8, 0 ); + } + + return; +} diff --git a/lib_dec/FEC_pitch_estim.c b/lib_dec/FEC_pitch_estim.c new file mode 100644 index 0000000000..e2f6491cc3 --- /dev/null +++ b/lib_dec/FEC_pitch_estim.c @@ -0,0 +1,92 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------------* + * FEC_pitch_estim() + * + * Estimation of pitch for FEC + *------------------------------------------------------------------------*/ + +void FEC_pitch_estim( + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t last_core, /* i : last core */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t clas, /* i : current frame classification */ + const int16_t last_good, /* i : last good clas information */ + const float pitch_buf[], /* i : Floating pitch for each subframe */ + const float old_pitch_buf[], /* i : buffer of old subframe pitch values */ + float *bfi_pitch, /* i/o: update of the estimated pitch for FEC */ + int16_t *bfi_pitch_frame, /* o : frame length when pitch was updated */ + int16_t *upd_cnt, /* i/o: update counter */ + const int16_t coder_type /* i : coder_type */ +) +{ + if ( last_core == HQ_CORE || last_core == TCX_20_CORE || last_core == TCX_10_CORE ) + { + *bfi_pitch = pitch_buf[( L_frame / L_SUBFR ) - 1]; + *bfi_pitch_frame = L_frame; + *upd_cnt = MAX_UPD_CNT; + } + + if ( ( clas == VOICED_CLAS && last_good >= VOICED_TRANSITION ) || ( Opt_AMR_WB && clas == VOICED_CLAS ) ) + { + /* update pitch for FEC if pitch is coherent */ + if ( ( ( pitch_buf[3] < 1.4f * pitch_buf[1] ) && ( pitch_buf[3] > 0.7f * pitch_buf[1] ) && + ( pitch_buf[1] < 1.4f * old_pitch_buf[2 * NB_SUBFR - 1] ) && ( pitch_buf[1] > 0.7f * old_pitch_buf[2 * NB_SUBFR - 1] ) && + ( L_frame == L_FRAME ) ) || + ( ( pitch_buf[3] < 1.4f * pitch_buf[1] ) && ( pitch_buf[3] > 0.7f * pitch_buf[1] ) && + ( pitch_buf[1] < 1.4f * old_pitch_buf[2 * NB_SUBFR16k - 1] ) && ( pitch_buf[1] > 0.7f * old_pitch_buf[2 * NB_SUBFR16k - 1] ) && + ( L_frame == L_FRAME16k ) ) || + ( coder_type == TRANSITION ) ) + { + *bfi_pitch = pitch_buf[( L_frame / L_SUBFR ) - 1]; + *bfi_pitch_frame = L_frame; + *upd_cnt = 0; + } + } + + return; +} diff --git a/lib_dec/FEC_scale_syn.c b/lib_dec/FEC_scale_syn.c new file mode 100644 index 0000000000..66fae0fc05 --- /dev/null +++ b/lib_dec/FEC_scale_syn.c @@ -0,0 +1,444 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +#define SCLSYN_LAMBDA 0.3f + +/*-------------------------------------------------------------------* + * FEC_scale_syn() + * + * Smooth speech energy evolution when recovering after erasure(s) + *-------------------------------------------------------------------*/ + +void FEC_scale_syn( + const int16_t L_frame, /* i : length of the frame */ + int16_t clas, /* i/o: frame classification */ + const int16_t last_good, /* i : last good frame classification */ + float *synth, /* i/o: synthesized speech at Fs = 12k8 Hz */ + const float *pitch, /* i : pitch values for each subframe */ + float enr_old, /* i : energy at the end of previous frame */ + float enr_q, /* i : transmitted energy for current frame */ + const int16_t coder_type, /* i : coder type */ + const int16_t LSF_Q_prediction, /* i : LSF prediction mode */ + int16_t *scaling_flag, /* i/o: flag to indicate energy control of syn */ + float *lp_ener_FEC_av, /* i/o: averaged voiced signal energy */ + float *lp_ener_FEC_max, /* i/o: averaged voiced signal energy */ + const int16_t bfi, /* i : current frame BFI */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t prev_bfi, /* i : previous frame BFI */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + float *exc, /* i/o: excitation signal without enhancement */ + float *exc2, /* i/o: excitation signal with enhancement */ + const float Aq[], /* i : LP filter coefs */ + float *old_enr_LP, /* i/o: LP filter E of last good voiced frame */ + const float *mem_tmp, /* i : temp. initial synthesis filter states */ + float *mem_syn, /* o : initial synthesis filter states */ + const int16_t avoid_lpc_burst_on_recovery, /* i : if true the excitation energy is limited if LP has big gain */ + const int16_t force_scaling /* i : force scaling */ +) +{ + int16_t i; + float enr1, enr2, gain1, gain2; + float scaling, ener_max, enr2_av, enr2_max; + float enr_LP; + float h1[L_FRAME / 2], tilt, rr0, rr1, pitch_dist, mean_pitch; + int16_t k; + + gain2 = 0.0f; + gain1 = 0.0f; + scaling = 1.0f; + enr_LP = 0.0f; + + /*-----------------------------------------------------------------* + * Find the synthesis filter impulse response on voiced + *-----------------------------------------------------------------*/ + + if ( clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) + { + if ( L_frame == L_FRAME ) + { + enr_LP = enr_1_Az( Aq + ( NB_SUBFR - 1 ) * ( M + 1 ), L_SUBFR ); + } + else /* L_frame == L_FRAME16k */ + { + enr_LP = enr_1_Az( Aq + ( NB_SUBFR16k - 1 ) * ( M + 1 ), L_SUBFR ); + } + } + + /*-----------------------------------------------------------------* + * Define when to scale the synthesis + *-----------------------------------------------------------------*/ + + if ( bfi ) + { + *scaling_flag = 1; /* Always check synthesis on bad frames */ + } + else if ( prev_bfi ) + { + if ( ( LSF_Q_prediction == AUTO_REGRESSIVE ) || ( LSF_Q_prediction == MOVING_AVERAGE ) ) + { + *scaling_flag = 2; /* Decoded LSFs affected */ + } + else if ( coder_type != TRANSITION ) + { + *scaling_flag = 1; /* SN, but not TC mode - LSF still affected by the interpolation */ + } + else + { + *scaling_flag = 0; /* LSF still possibly affected due to interpolation */ + } + scaling = 1.5f; + } + else + { + if ( ( LSF_Q_prediction == AUTO_REGRESSIVE ) && ( *scaling_flag == 2 ) ) + { + *scaling_flag = 2; /* Continue with energy control till the end of AR prediction */ + } + else if ( *scaling_flag > 0 ) + { + ( *scaling_flag )--; /* If scaling flag was equal to 2, add one control frame to account for the LSF interpolation */ + } + scaling = 2.0f; + } + + /*-----------------------------------------------------------------* + * Find the energy/gain at the end of the frame + *-----------------------------------------------------------------*/ + + fer_energy( L_frame, clas, synth, pitch[( L_frame >> 6 ) - 1], &enr2, L_frame ); + + if ( bfi || ( total_brate == ACELP_7k20 ) || ( total_brate == ACELP_8k00 ) ) + { + /* previous frame erased and no TC frame */ + if ( *scaling_flag > 0 ) + { + enr2 += 0.01f; + + if ( bfi ) /* In all bad frames, limit the gain to 1 */ + { + gain2 = (float) sqrt( enr_old / enr2 ); + if ( gain2 > 1.0f ) + { + gain2 = 1.0f; + } + + /* find the energy/gain at the beginning of the frame */ + fer_energy( L_frame, clas, synth, pitch[0], &enr1, 0 ); + + enr1 += 0.1f; + gain1 = (float) sqrt( enr_old / enr1 ); + if ( gain1 > 1.0f ) + { + gain1 = 1.0f; + } + } + else /* good frame */ + { + if ( enr_q == 0 ) /* If E info (FEC protection bits) is not available in the bitstream */ + { + enr_q = enr2; + + set_f( h1, 0.0f, L_FRAME / 2 ); + h1[0] = 1.0f; + syn_filt( Aq + ( 3 * ( M + 1 ) ), M, h1, h1, L_FRAME / 2, h1 + ( M + 1 ), 0 ); + rr0 = dotp( h1, h1, L_FRAME / 2 - 1 ) + 0.001f; + rr1 = dotp( h1, h1 + 1, L_FRAME / 2 - 1 ); + tilt = rr1 / rr0; + + pitch_dist = 0.0f; + mean_pitch = pitch[0]; + for ( k = 0; k < ( NB_SUBFR - 1 ); k++ ) + { + pitch_dist += abs( (int16_t) ( pitch[k + 1] + 0.5f ) - (int16_t) ( pitch[k] + 0.5f ) ); + mean_pitch += pitch[k + 1]; + } + pitch_dist /= (float) ( NB_SUBFR - 1 ); + mean_pitch /= (float) ( NB_SUBFR ); + + if ( ( tilt > 0.7f ) && /* HF resonnant filter */ + ( ( pitch_dist > 8.0f ) || ( mean_pitch < PIT_MIN ) ) && /* pitch unstable or very short */ + ( ( prev_bfi ) || ( ( coder_type == GENERIC ) && ( LSF_Q_prediction == AUTO_REGRESSIVE ) ) ) ) + { + if ( enr_q > scaling * enr_old ) + { + enr_q = scaling * enr_old; + } + } + else + { + if ( ( clas <= VOICED_TRANSITION ) || ( clas >= INACTIVE_CLAS ) ) + { + ener_max = *lp_ener_FEC_av; + } + else + { + ener_max = *lp_ener_FEC_max; + } + + if ( enr_old > ener_max ) + { + ener_max = enr_old; + } + if ( enr_q > scaling * ener_max ) + { + enr_q = scaling * ener_max; + } + } + } + + gain2 = (float) sqrt( enr_q / enr2 ); + + + /*-----------------------------------------------------------------* + * Find the energy/gain at the beginning of the frame to ensure smooth transition after erasure(s) + *-----------------------------------------------------------------*/ + + if ( ( ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && ( clas == UNVOICED_CLAS || clas == INACTIVE_CLAS ) ) || + last_core_brate == SID_1k75 || last_core_brate == SID_2k40 || last_core_brate == FRAME_NO_DATA ) && + prev_bfi ) + { + /* voiced -> unvoiced signal transition */ + /* CNG -> active signal transition */ + gain1 = gain2; + } + else + { + /* find the energy at the beginning of the frame */ + fer_energy( L_frame, clas, synth, pitch[0], &enr1, 0 ); + + enr1 += 0.1f; + gain1 = (float) sqrt( enr_old / enr1 ); + if ( gain1 > 1.2f ) + { + /* prevent clipping */ + gain1 = 1.2f; + } + + /* prevent amplifying the unvoiced or inactive part of the frame in case an offset is followed by an onset */ + if ( clas == ONSET && gain1 > gain2 && prev_bfi ) + { + gain1 = gain2; + } + } + + enr2 = enr_q; /* Set the end frame energy to the scaled energy, to be used in the lp_ener_FEC */ + } + + /*------------------------------------------------------------------------------* + * Smooth the energy evolution by exponentially evolving from gain1 to gain2 + *------------------------------------------------------------------------------*/ + + gain2 *= ( 1.0f - AGC ); + for ( i = 0; i < L_frame; i++ ) + { + gain1 = gain1 * AGC + gain2; + exc[i] *= gain1; + exc2[i] *= gain1; + } + + /* smoothing is done in excitation domain, so redo synthesis */ + mvr2r( mem_tmp, mem_syn, M ); + syn_12k8( L_frame, Aq, exc2, synth, mem_syn, 1 ); + } + } + else + { + /* previous frame erased and no TC frame */ + if ( prev_bfi && coder_type != TRANSITION ) + { + enr2 += 0.01f; + if ( enr_q == 0 ) /* If E info (FEC protection bits) is not available in the bitstream */ + { + enr_q = enr2; + + set_f( h1, 0.0f, L_FRAME / 2 ); + h1[0] = 1.0f; + syn_filt( Aq + ( 3 * ( M + 1 ) ), M, h1, h1, L_FRAME / 2, h1 + ( M + 1 ), 0 ); + rr0 = dotp( h1, h1, L_FRAME / 2 - 1 ) + 0.001f; + rr1 = dotp( h1, h1 + 1, L_FRAME / 2 - 1 ); + tilt = rr1 / rr0; + + if ( ( ( ( total_brate == ACELP_13k20 ) || ( total_brate == ACELP_12k85 ) || ( total_brate == ACELP_12k15 ) || ( total_brate == ACELP_11k60 ) || + ( total_brate == ACELP_9k60 ) ) && + ( tilt > 0.7f ) && /* HF resonnant filter */ + ( ( clas == UNVOICED_CLAS ) || ( clas == INACTIVE_CLAS ) ) ) ) /* unvoiced classification */ + { + if ( enr_q > scaling * enr_old ) + { + enr_q = scaling * enr_old; + } + } + else if ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) + { + /* voiced -> voiced recovery */ + if ( ( *old_enr_LP != 0.0f ) && ( enr_LP > 2 * *old_enr_LP ) ) + { + enr_q /= enr_LP; + enr_q *= 2 * *old_enr_LP; + } + else if ( avoid_lpc_burst_on_recovery && enr_LP > 20.0f ) + { + enr_q = (float) ( enr_q * sqrt( 20.0f / enr_LP ) ); + } + } + + if ( ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) || force_scaling ) + { + if ( enr_q > enr_old ) + { + enr_q = ( 1 - SCLSYN_LAMBDA ) * enr_old + SCLSYN_LAMBDA * enr_q; + } + } + } + + gain2 = (float) sqrt( enr_q / enr2 ); + + /* do not allow E increase if enr_q index == 0 (lower end Q clipping) */ + if ( enr_q < 1.1f ) + { + if ( gain2 > 1.0f ) + { + gain2 = 1.0f; + } + } + else + { + if ( gain2 > 1.2f ) + { + gain2 = 1.2f; + } + } + + /*-----------------------------------------------------------------* + * Find the energy/gain at the beginning of the frame to ensure smooth transition after erasure(s) + *-----------------------------------------------------------------*/ + + if ( clas == SIN_ONSET ) + { + /* allow only slow increase */ + gain1 = 0.5f * gain2; + } + else if ( ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && ( clas == UNVOICED_CLAS || clas == INACTIVE_CLAS ) ) || last_core_brate == SID_1k75 || last_core_brate == SID_2k40 || last_core_brate == FRAME_NO_DATA ) + { + /* voiced -> unvoiced signal transition */ + /* CNG -> active signal transition */ + gain1 = gain2; + } + else + { + /* find the energy at the beginning of the frame */ + fer_energy( L_frame, clas, synth, pitch[0], &enr1, 0 ); + + enr1 += 0.1f; + gain1 = (float) sqrt( enr_old / enr1 ); + if ( gain1 > 1.2f ) + { + /* prevent clipping */ + gain1 = 1.2f; + } + if ( avoid_lpc_burst_on_recovery && ( enr_LP > 20.0f ) && ( enr_LP <= 2 * *old_enr_LP ) && ( gain1 > 1.0f ) ) + { + gain1 = 1.0f; + } + + /* prevent amplifying the unvoiced or inactive part of the frame in case an offset is followed by an onset */ + if ( clas == ONSET && gain1 > gain2 ) + { + gain1 = gain2; + } + } + + /*-----------------------------------------------------------------* + * Smooth the energy evolution by exponentially evolving from gain1 to gain2 + *-----------------------------------------------------------------*/ + + gain2 *= ( 1.0f - AGC ); + for ( i = 0; i < L_frame; i++ ) + { + gain1 = gain1 * AGC + gain2; + exc[i] *= gain1; + exc2[i] *= gain1; + } + + /* smoothing is done in excitation domain, so redo synthesis */ + mvr2r( mem_tmp, mem_syn, M ); + syn_12k8( L_frame, Aq, exc2, synth, mem_syn, 1 ); + } + } + + /*-----------------------------------------------------------------* + * Update low-pass filtered energy for voiced frames + *-----------------------------------------------------------------*/ + + if ( !bfi && ( clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) ) + { + if ( clas == VOICED_TRANSITION ) + { + enr2_av = enr2; + fer_energy( L_frame, VOICED_CLAS, synth, pitch[( L_frame >> 6 ) - 1], &enr2_max, L_frame ); + } + else + { + enr2_max = enr2; + fer_energy( L_frame, UNVOICED_CLAS, synth, pitch[( L_frame >> 6 ) - 1], &enr2_av, L_frame ); + } + + *lp_ener_FEC_av = 0.05f * enr2_av + 0.95f * *lp_ener_FEC_av; + *lp_ener_FEC_max = 0.05f * enr2_max + 0.95f * *lp_ener_FEC_max; + } + + /*-----------------------------------------------------------------* + * Update the LP filter energy for voiced frames + *-----------------------------------------------------------------*/ + + if ( clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) + { + *old_enr_LP = enr_LP; + } + + + return; +} diff --git a/lib_dec/LD_music_post_filter.c b/lib_dec/LD_music_post_filter.c new file mode 100644 index 0000000000..f19e737595 --- /dev/null +++ b/lib_dec/LD_music_post_filter.c @@ -0,0 +1,769 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define MAX_SNR1 45.0f +#define INV_MAX_SNR ( 1.f / ( MAX_SNR1 - 1.0f ) ) /* max. SNR considered for noise subtraction in voiced segments */ +#define MAX_SNR_SNR1 ( MAX_SNR1 * INV_MAX_SNR ) /* 45 * (1 / (MAX_SNR1-1)) */ + + +#define BIN_1KHZ ( int16_t )( 1000.f / BIN_16kdct ) +#define BIN_2KHZ ( int16_t )( 2000.f / BIN_16kdct ) +#define BIN_4KHZ ( int16_t )( 4000.f / BIN_16kdct ) + +#define MAX_GN_R 0.2f +#define ALPH 1.00f +#define BET ( 1.925f - ALPH ) +#define MAXX 5 + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void spectrum_mod_dct( float data[], const float lf_E[], float lf_EO[], const float noiseE[], const float minGain, float lp_gbin[], const int16_t music_flag, int16_t min_band, const float MAX_GN, const int16_t max_band ); + +static void analy_sp_dct( const float dct_in[], float dct_buf[], float *fr_bands, float *lf_E, float *etot ); + +static void find_enr_dct( const float data[], float band[], float *ptE, float *Etot, const int16_t min_band, const int16_t max_band, float *Bin_E, const float bin_freq ); + + +/*------------------------------------------------------------------------* + * LD_music_post_filter() + * + * Music post-filter + *------------------------------------------------------------------------*/ + +void LD_music_post_filter( + MUSIC_POSTFILT_HANDLE hMusicPF, /* i/o: LD music postfilter handle */ + const float dtc_in[], /* i : input synthesis */ + float dtc_out[], /* o : output synthesis */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t coder_type, /* i : Coder type : -1 in case of IO */ + const int16_t Last_coder_type /* i : last Coder type */ +) +{ + float DCT_buf[DCT_L_POST]; + float fr_bands[MBANDS_GN_LD]; + float lf_E[VOIC_BINS_HR]; + float etot, ftmp; + int16_t i, j, k; + int16_t min_band = 0; + float local_min_gain = hMusicPF->LDm_enh_min_ns_gain; + int16_t music_flag2 = 0; + float max_val; + float max_ovf_2k, max_ovf_4k, max_ovf_6k; + float min_g_2k, min_g_4k, min_g_6k; + float m_ave, old_ftmp; + float old_ftmp_1; + float tmp_lfE[DCT_L_POST]; + float MAX_GN = MAX_GN_R; + int16_t MAX_band = MBANDS_GN_LD; + + /*------------------------------------------------------------------------* + * Frequency analysis + *------------------------------------------------------------------------*/ + + analy_sp_dct( dtc_in, DCT_buf, fr_bands, lf_E, &etot ); + + /*------------------------------------------------------------------------* + * Find signal classification + *------------------------------------------------------------------------*/ + + music_flag2 = stab_est( etot, hMusicPF->LDm_lt_diff_etot, &hMusicPF->LDm_mem_etot, &hMusicPF->LDm_nb_thr_3, &hMusicPF->LDm_nb_thr_1, hMusicPF->LDm_thres, &hMusicPF->LDm_last_music_flag, 1 ); + + if ( core_brate < ACELP_6k60 || Last_coder_type != AUDIO ) + { + /* do not perform music improvement on SID frames */ + music_flag2 = 0; + } + + if ( music_flag2 < 4 ) + { + hMusicPF->last_nonfull_music = 0; + } + else + { + ( hMusicPF->last_nonfull_music )++; + } + + hMusicPF->last_nonfull_music = min( 51, hMusicPF->last_nonfull_music ); + + /*------------------------------------------------------------------------* + * Remapping of bands + * Section to "remap" the minimal band and the minimum gain for our needs + *------------------------------------------------------------------------*/ + + if ( music_flag2 > 3 ) + { + min_band = 2; + local_min_gain = 0.25119f; + } + else if ( music_flag2 == 3 ) + { + min_band = 3; + local_min_gain = 0.25119f; + } + else if ( music_flag2 == 2 ) + { + min_band = 4; + local_min_gain = 0.35481f; + } + else if ( music_flag2 == 1 ) + { + min_band = 4; + local_min_gain = 0.50119f; + } + + min_band += 4; + + MAX_GN = 0.1f; + if ( core_brate > ACELP_9k60 ) + { + /* overshoot not allowed, since GSC already matches the energy */ + MAX_GN = 0.0f; + } + + if ( coder_type == AUDIO ) + { + /* with GSC we know for sure that we are in music */ + min_band = min( min_band, 3 ); + } + + /*------------------------------------------------------------------------* + * Approximation of the inter-harmonic noise level + * - sort the bin energy + * - compupte the average energy per band excluding the maximum energy bin + *------------------------------------------------------------------------*/ + + j = 0; + for ( i = 0; i < MBANDS_GN_LD; i++ ) + { + m_ave = 0.0f; + max_val = 0.0f; + + for ( k = j; k < mfreq_bindiv_LD[i] + j; k++ ) + { + m_ave += lf_E[k]; + max_val = max( max_val, lf_E[k] ); + } + + m_ave -= max_val; + m_ave /= mfreq_bindiv_LD[i] - 1; + + hMusicPF->LDm_bckr_noise[i] = m_ave * sc_qnoise[i]; + j += mfreq_bindiv_LD[i]; + } + + i = maximum( lf_E, DCT_L_POST, &m_ave ); + + /*------------------------------------------------------------------------* + * - Normalisation of the energy vector between [0.72, 5], with the form of pow(x,4) + * - Simple LP filtering along the frequency domain + * - LT averaging with the past and in function of the stability factor + *------------------------------------------------------------------------*/ + + m_ave = ALPH / lf_E[i]; + + ftmp = lf_E[0] * m_ave + BET; + ftmp *= ftmp; + ftmp *= ftmp; + ftmp *= ftmp; + ftmp = min( ftmp, MAXX ); + old_ftmp = ftmp; + + ftmp = lf_E[1] * m_ave + BET; + ftmp *= ftmp; + ftmp *= ftmp; + ftmp *= ftmp; + ftmp = min( ftmp, MAXX ); + old_ftmp_1 = ftmp; + tmp_lfE[0] = 0.5f * old_ftmp + 0.5f * ftmp; + + for ( i = 1; i < DCT_L_POST - 1; i++ ) + { + tmp_lfE[i] = 0.333f * old_ftmp + 0.333f * old_ftmp_1; + old_ftmp = old_ftmp_1; + ftmp = lf_E[i + 1] * m_ave + BET; + ftmp *= ftmp; + ftmp *= ftmp; + ftmp *= ftmp; + old_ftmp_1 = min( ftmp, MAXX ); + tmp_lfE[i] += 0.333f * old_ftmp_1; + } + + ftmp = lf_E[i] * m_ave + BET; + ftmp *= ftmp; + ftmp *= ftmp; + ftmp *= ftmp; + ftmp = min( ftmp, MAXX ); + tmp_lfE[i] = 0.5f * old_ftmp + 0.5f * ftmp; + + for ( i = 0; i < BIN_4KHZ; i++ ) + { + hMusicPF->filt_lfE[i] = tmp_lfE[i] * 0.05f + 0.95f * hMusicPF->filt_lfE[i]; + } + + for ( ; i < DCT_L_POST; i++ ) + { + hMusicPF->filt_lfE[i] = tmp_lfE[i] * 0.15f + 0.85f * hMusicPF->filt_lfE[i]; + } + + /*------------------------------------------------------------------------* + * Reduce inter-harmonic noise with SNR based method + * Second stage of spectral shaping modification based on the pow(x,4) energy spectrum + *------------------------------------------------------------------------*/ + + if ( coder_type == AUDIO ) + { + MAX_band = 16; + } + + spectrum_mod_dct( DCT_buf, lf_E, hMusicPF->LDm_enh_lf_EO, hMusicPF->LDm_bckr_noise, local_min_gain, hMusicPF->LDm_enh_lp_gbin, music_flag2, min_band, MAX_GN, MAX_band ); + + i = 0; + if ( music_flag2 >= 1 ) + { + for ( i = 0; i < BIN_1KHZ; i++ ) + { + ftmp = min( 1.0f, hMusicPF->filt_lfE[i] ); + DCT_buf[i] *= ftmp; + } + } + + if ( hMusicPF->last_nonfull_music > 40 ) + { + max_ovf_2k = 1.25f; + max_ovf_4k = 1.5f; + max_ovf_6k = 1.5f; + + min_g_2k = 0.0f; + min_g_4k = 0.0f; + min_g_6k = 0.0f; + + if ( coder_type == AUDIO ) + { + max_ovf_2k = 1.0f; + max_ovf_4k = 1.1f; + max_ovf_6k = 1.25f; + + min_g_2k = 0.75f; + min_g_4k = 0.5f; + min_g_6k = 0.5f; + + if ( core_brate > ACELP_9k60 ) + { + max_ovf_4k = 1.0f; + max_ovf_6k = 1.15f; + + min_g_2k = 0.925f; + min_g_4k = 0.825f; + min_g_6k = 0.75f; + } + } + else if ( core_brate >= ACELP_12k65 ) + { + max_ovf_2k = 1.0f; + max_ovf_4k = 1.25f; + + if ( core_brate > ACELP_15k85 ) + { + max_ovf_4k = 1.0f; + max_ovf_6k = 1.25f; + + min_g_2k = 0.75f; + min_g_4k = 0.5f; + min_g_6k = 0.5f; + } + } + + for ( ; i < BIN_2KHZ; i++ ) + { + ftmp = min( max_ovf_2k, hMusicPF->filt_lfE[i] ); + ftmp = max( min_g_2k, ftmp ); + DCT_buf[i] *= ftmp; + } + + for ( ; i < BIN_4KHZ; i++ ) + { + ftmp = min( max_ovf_4k, hMusicPF->filt_lfE[i] ); + ftmp = max( min_g_4k, ftmp ); + DCT_buf[i] *= ftmp; + } + + if ( coder_type != AUDIO || core_brate > ACELP_8k85 ) + { + /* Do not modify HF when coded with GSC at LR, because the spectrum is just noise */ + for ( ; i < DCT_L_POST; i++ ) + { + ftmp = min( max_ovf_6k, hMusicPF->filt_lfE[i] ); + ftmp = max( min_g_6k, ftmp ); + DCT_buf[i] *= ftmp; + } + } + } + else if ( hMusicPF->last_nonfull_music > 25 ) + { + /* When unsure on content type only slight clean-up allowed, no overshoot allowed */ + for ( ; i < DCT_L_POST; i++ ) + { + ftmp = min( 1.f, hMusicPF->filt_lfE[i] ); + DCT_buf[i] *= ftmp; + } + } + + /* reconstruction of the enhanced synthesis */ + mvr2r( DCT_buf, dtc_out, DCT_L_POST ); +} + +/*---------------------------------------------------------------------------* + * spectrum_mod_dct() + * + * spectrum enhancement according to the output of signal_type_clas() + *---------------------------------------------------------------------------*/ + +static void spectrum_mod_dct( + float data[], /* i/o: DCT spectrum */ + const float lf_E[], /* i : per bin E for first 46 bins (without DC) */ + float lf_EO[], /* i/o: old per bin E for previous half frame */ + const float noiseE[], /* i : per band background noise energy estimate */ + const float minGain, /* i : minimum suppression gain */ + float lp_gbin[], /* i/o: Smoothed suppression gain, per FFT bin */ + const int16_t music_flag, /* i : music ? 1:0 */ + int16_t min_band, + const float MAX_GN, + const int16_t MAX_band ) +{ + float maxNoise; + float binE[VOIC_BINS_HR]; + float gain, minE; + float freq; + float slope; + float inv_noise[MBANDS_GN_LD]; + float *pt_gbin, alpha, tmpN; + int16_t i, cnt; + float *pt; + float tmp, shift; + const float *pt2; + + gain = 0.0f; + + /*-----------------------------------------------------------------* + * Compute the inverse of noise + *-----------------------------------------------------------------*/ + + for ( i = 0; i <= MBANDS_GN_LD - 1; i++ ) + { + inv_noise[i] = 1.0f / noiseE[i]; + } + + /*----------------------------------------------------------------------* + * Perform noise reduction for 1 frames + *----------------------------------------------------------------------*/ + + for ( i = 0; i < VOIC_BINS_HR; i++ ) + { + binE[i] = 0.3f * lf_EO[i] + 0.7f * lf_E[i]; + } + mvr2r( lf_E, lf_EO, VOIC_BINS_HR ); /* update */ + + /*----------------------------------------------------------------------* + * Find the maximum noise in a critical band + *----------------------------------------------------------------------*/ + + maxNoise = 0.0f; + for ( i = 0; i <= MBANDS_GN_LD - 1; i++ ) + { + set_max( &maxNoise, noiseE[i] ); + } + + /* pointer initialization */ + pt = &data[0]; + + /*-----------------------------------------------------------------* + * Initialization for active speech frames or VAD hangover frames, + * (exclude Clean speech) + *-----------------------------------------------------------------*/ + + if ( music_flag != 0 ) /* prevent subtraction on clean speech */ + { + if ( maxNoise <= 10.0f ) + { + minE = .5625f; + } + else + { + minE = minGain * minGain; + } + + pt2 = binE; + freq = 0; + + pt_gbin = lp_gbin; + tmp = INV_MAX_SNR; + slope = tmp - tmp * minE; + shift = MAX_SNR_SNR1 * minE - tmp; + for ( i = 0; i < min_band; i++ ) + { + for ( ; freq <= mfreq_loc_LD[i]; freq += BIN_16kdct ) + { + pt2++; + pt++; + *pt_gbin++ = 1.0f; + } + } + + /*-----------------------------------------------------------------* + * Per Frequency MODE1_BIN processing + * For highly voiced and highly pitched speech, use per bin + * subtraction in low frequencies (maximum up to 3700 Hz, + * first 17 critical bands) + *-----------------------------------------------------------------*/ + + for ( ; i < MAX_band /*MBANDS_GN_LD*/; i++ ) + { + + tmp = INV_MAX_SNR_tab[i]; + slope = tmp - tmp * minE; + shift = MAX_SNR_SNR1_tab[i] * minE - tmp; + + tmpN = slope * inv_noise[i]; + tmp = 0.0f; + cnt = 0; + while ( freq <= mfreq_loc_LD[i] ) + { + gain = 1.0f; + + if ( noiseE[i] >= 0.5f ) /* Do not alter if noise E very low */ + { + gain = tmpN * *pt2 + shift; /* limits: [x,y] = {[1, minE], [MAX_SNR1, 1]}, */ + } + + pt2++; + + if ( gain < minE ) + { + gain = minE; + } + + if ( gain > 1.0f + MAX_GN ) + { + gain = 1.0f + MAX_GN; + } + + /* the gain smoothing control: stronger lp filtering for lower gains */ + alpha = 1.0f - (float) sqrt( gain ); + + *pt_gbin = gain + alpha * *pt_gbin; + *pt++ *= *pt_gbin; + cnt++; + freq += BIN_16kdct; + pt_gbin++; + } + } + } + else + { + freq = BIN_16kdct; + pt_gbin = lp_gbin; + for ( i = 0; i < MBANDS_GN_LD; i++ ) + { + for ( ; freq <= mfreq_loc_LD[i]; freq += BIN_16kdct ) + { + *pt_gbin = 0.9f * *pt_gbin + 0.1f; + pt_gbin++; + } + } + } + + return; +} + +/*----------------------------------------------------------------------------------* + * analy_sp_dct() + * + * Spectral analysis of the current synthesized frame + *----------------------------------------------------------------------------------*/ + +static void analy_sp_dct( + const float dct_in[], /* i : input DCT spectrum */ + float dct_buf[], /* i : output DCT spectrum */ + float *fr_bands, /* o : energy in critical frequency bands */ + float *lf_E, /* o : per bin E for first... */ + float *etot /* o : total input energy */ +) +{ + float Bin_E[DCT_L_POST]; + + *etot = 0.0f; + mvr2r( dct_in, dct_buf, DCT_L_POST ); + + /*-----------------------------------------------------------------* + * Windowing + * Compute spectrum + * find energy per critical frequency band and total energy in dB + *-----------------------------------------------------------------*/ + + find_enr_dct( dct_buf, fr_bands, lf_E, etot, 0, MBANDS_GN_LD, Bin_E, BIN_16kdct ); + + /* find average log total energy over both half-frames */ + *etot = 10.0f * (float) log10( *etot ) - 3.0103f; + + return; +} + +/*------------------------------------------------------------------------* + * find_enr_dct) + * + * find input signal energy for each critical band and first 74 LF bins + * The energy is normalized by the number of frequency bins in a channel + *------------------------------------------------------------------------*/ + +void find_enr_dct( + const float data[], /* i : fft result, for the format see fft_rel.c */ + float band[], /* o : per band energy */ + float *ptE, /* o : per bin energy for low frequencies */ + float *Etot, /* o : total energy */ + const int16_t min_band, /* i : minimum critical band */ + const int16_t max_band, /* i : maximum critical band */ + float *Bin_E, /* o : Per bin energy */ + const float bin_freq /* i : Number of frequency bins */ +) +{ + int16_t i, cnt; + float freq, tmp; + const float *ptR; + + ptR = &data[0]; /* pointer to first real coefficient */ + freq = 0; + for ( i = 0; i < max_band; i++ ) + { + band[i] = 0.0f; + cnt = 0; + while ( freq <= mfreq_loc_LD[i] ) + { + /* energy */ + *ptE = *ptR * *ptR; + + /* normalization - corresponds to FFT normalization by 2/L_FFT */ + *ptE *= 1.0f / ( DCT_L_POST ); + + *Bin_E = *ptE; + Bin_E++; + band[i] += *ptE++; + ptR++; + + freq += bin_freq; + cnt++; + } + + /* normalization per frequency bin */ + band[i] /= cnt; + + if ( band[i] < E_MIN ) + { + band[i] = E_MIN; + } + } + + /*-----------------------------------------------------------------* + * Find the total energy over the input bandwidth + *-----------------------------------------------------------------*/ + + tmp = *Etot; + for ( i = min_band; i <= NB_LIMIT_BAND; i++ ) + { + /* total channel energy */ + tmp += band[i]; + } + + *Etot = tmp; + + return; +} + +/*------------------------------------------------------------------------* + * Prep_music_postP() + * + * Performs the steps needed to do the music post processing + *------------------------------------------------------------------------*/ + +void Prep_music_postP( + float exc_buffer_in[], /* i/o: excitation buffer */ + float dct_buffer_out[], /* o : DCT output buffer */ + float filt_lfE[], /* i/o: long term spectrum energy */ + const int16_t last_core, /* i : last core */ + const float *pitch_buf, /* i : current frame pitch information */ + float *LDm_enh_lp_gbin /* o : smoothed suppression gain, per bin FFT */ +) +{ + int16_t i; + float *pt1; + const float *pt2; + int16_t s_pit, fr_pit; + int16_t offset2; + + offset2 = OFFSET2; + + s_pit = (int16_t) ( pitch_buf[3] ); + fr_pit = (int16_t) ( ( pitch_buf[3] - s_pit ) * 4.0f ); + + /*------------------------------------------------------------* + * Extrapolation of the last future part and windowing + *------------------------------------------------------------*/ + + if ( last_core == HQ_CORE || last_core == TCX_20_CORE || last_core == TCX_10_CORE ) + { + set_f( filt_lfE, 1.0f, DCT_L_POST ); + set_f( LDm_enh_lp_gbin, 1.0f, VOIC_BINS_HR ); + pt1 = exc_buffer_in + offset2 - 1; + pt2 = pt1 + (int16_t) ( pitch_buf[0] + 0.5f ); + for ( i = 0; i < offset2; i++ ) + { + *pt1 = *pt2; + pt1--; + pt2--; + } + } + + pt1 = exc_buffer_in + DCT_L_POST - offset2; + pred_lt4( pt1, pt1, s_pit, fr_pit, offset2, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + pt2 = post_dct_wind; + for ( i = 0; i < offset2; i++ ) + { + *pt1 *= *pt2; + pt1++; + pt2++; + } + + pt1 = exc_buffer_in; + pt2--; + for ( i = 0; i < offset2; i++ ) + { + *pt1 *= *pt2; + pt1++; + pt2--; + } + + edct( exc_buffer_in, dct_buffer_out, DCT_L_POST, EVS_MONO ); + + return; +} + +/*------------------------------------------------------------------------* + * Post_music_postP() + * + * Going back from frequency to time domain from the enhanced spectrum + * to retreive the aligned excitation and redo the synthesis + *------------------------------------------------------------------------*/ + +void Post_music_postP( + float dct_buffer_in[], /* i/o: excitation buffer */ + float exc_buffer_out[], /* o : DCT output buffer */ + float *exc2, /* i/o: Current excitation to be overwriten */ + const float *mem_tmp, /* i : previous frame synthesis memory */ + float *st_mem_syn2, /* i/o: current frame synthesis memory */ + const float *Aq, /* i : LPC filter coefficients */ + float *syn /* i/o: 12k8 synthesis */ + +) +{ + edct( dct_buffer_in, exc_buffer_out, DCT_L_POST, EVS_MONO ); + + mvr2r( exc_buffer_out + OFFSET2, exc2, L_FRAME ); + mvr2r( mem_tmp, st_mem_syn2, M ); + + syn_12k8( L_FRAME, Aq, exc2, syn, st_mem_syn2, 1 ); + + return; +} + + +/*-------------------------------------------------------------------* + * music_postfilt_init() + * + * Initialize LD music postfilter state structure + *-------------------------------------------------------------------*/ + +void music_postfilt_init( + MUSIC_POSTFILT_HANDLE hMusicPF /* i/o: LD music postfilter handle */ +) +{ + int16_t i; + + set_f( hMusicPF->dct_post_old_exc, 0, DCT_L_POST - OFFSET2 ); + + hMusicPF->LDm_enh_min_ns_gain = (float) pow( 10.0f, -12 / 20.0f ); + hMusicPF->LDm_last_music_flag = 0; + set_f( hMusicPF->LDm_lt_diff_etot, 0, MAX_LT ); + hMusicPF->LDm_thres[0] = TH_0_MIN; + hMusicPF->LDm_thres[1] = TH_1_MIN; + hMusicPF->LDm_thres[2] = TH_2_MIN; + hMusicPF->LDm_thres[3] = TH_3_MIN; + hMusicPF->LDm_nb_thr_1 = 0; + hMusicPF->LDm_nb_thr_3 = 0; + hMusicPF->LDm_mem_etot = 0.0f; + + for ( i = 0; i < VOIC_BINS_HR; i++ ) + { + hMusicPF->LDm_enh_lp_gbin[i] = 1.0f; + hMusicPF->LDm_enh_lf_EO[i] = 0.01f; + } + + for ( i = 0; i < MBANDS_GN_LD; i++ ) + { + hMusicPF->LDm_bckr_noise[i] = E_MIN; + } + + set_f( hMusicPF->filt_lfE, 1.0f, DCT_L_POST ); + hMusicPF->last_nonfull_music = 0; + + return; +} diff --git a/lib_dec/TonalComponentDetection.c b/lib_dec/TonalComponentDetection.c new file mode 100644 index 0000000000..230dfe4086 --- /dev/null +++ b/lib_dec/TonalComponentDetection.c @@ -0,0 +1,849 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#define _USE_MATH_DEFINES + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "cnst.h" +#include "stat_com.h" +#include "wmops.h" +#include "ivas_prot.h" + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void findStrongestHarmonics( const uint16_t nSamples, const float *powerSpectrum, const float F0, const uint16_t nTotalHarmonics, uint16_t *pHarmonicIndexes, int16_t *pnHarmonics ); +static void CorrectF0( const uint16_t *pHarmonicIndexes, const uint16_t nHarmonics, float *pF0 ); +static void findCandidates( const uint16_t nSamples, const float *MDCTSpectrum, float *thresholdModificationNew, float floorPowerSpectrum ); +static void RefineThresholdsUsingPitch( const uint16_t nSamples, const uint16_t nSamplesCore, const float *powerSpectrum, const float lastPitchLag, const float currentPitchLag, float *pF0, float *thresholdModification ); +static void findTonalComponents( uint16_t *indexOfTonalPeak, uint16_t *lowerIndex, uint16_t *upperIndex, uint16_t *numIndexes, const uint16_t nSamples, const float *powerSpectrum, const float F0, const float *thresholdModification ); + + +/*-------------------------------------------------------------------* + * DetectTonalComponents() + * + * Detect tonal components in the lastMDCTSpectrum, use + * secondLastPowerSpectrum for the precise location of the peaks and + * store them in indexOfTonalPeak. Updates lowerIndex, upperIndex, + * pNumIndexes accordingly. + *-------------------------------------------------------------------*/ + +void DetectTonalComponents( + uint16_t indexOfTonalPeak[], + uint16_t lowerIndex[], + uint16_t upperIndex[], + uint16_t *pNumIndexes, + const float lastPitchLag, + const float currentPitchLag, + const float lastMDCTSpectrum[], + const float scaleFactors[], + const float secondLastPowerSpectrum[], + const uint16_t nSamples, + const uint16_t nSamplesCore, + float floorPowerSpectrum, /* i : lower limit for power spectrum bins */ + const PsychoacousticParameters *psychParamsCurrent ) +{ + float F0; + float thresholdModification[L_FRAME_MAX]; + float *pScaledMdctSpectrum = thresholdModification; + int16_t nBands; + + /* Convert from 16 bit to 32 bit */ + mvr2r( lastMDCTSpectrum, pScaledMdctSpectrum, nSamples ); + if ( psychParamsCurrent == NULL ) + { + nBands = FDNS_NPTS; + mdct_noiseShaping( pScaledMdctSpectrum, nSamplesCore, scaleFactors, nBands ); + } + else + { + sns_shape_spectrum( pScaledMdctSpectrum, psychParamsCurrent, scaleFactors, nSamplesCore ); + nBands = psychParamsCurrent->nBands; + } + + v_multc( pScaledMdctSpectrum + nSamplesCore, scaleFactors[nBands - 1], pScaledMdctSpectrum + nSamplesCore, nSamples - nSamplesCore ); + + /* Find peak candidates in the last frame. */ + findCandidates( nSamples, pScaledMdctSpectrum, thresholdModification, floorPowerSpectrum ); + + /* Refine peak candidates using the pitch information */ + RefineThresholdsUsingPitch( nSamples, nSamplesCore, secondLastPowerSpectrum, lastPitchLag, currentPitchLag, &F0, thresholdModification ); + + /* Find peaks in the second last frame */ + findTonalComponents( indexOfTonalPeak, lowerIndex, upperIndex, pNumIndexes, nSamples, secondLastPowerSpectrum, F0, thresholdModification ); + + return; +} + + +/*-------------------------------------------------------------------* + * RefineTonalComponents() + * + *-------------------------------------------------------------------*/ + +/* When called, the tonal components are already stored in + * indexOfTonalPeak. Detect tonal components in the lastMDCTSpectrum, + * use secondLastPowerSpectrum for the precise location of the peaks and + * then keep in indexOfTonalPeak only the tonal components that are + * again detected Updates indexOfTonalPeak, lowerIndex, upperIndex, + * phaseDiff, phases, pNumIndexes accordingly. */ +void RefineTonalComponents( + uint16_t indexOfTonalPeak[], + uint16_t lowerIndex[], + uint16_t upperIndex[], + float phaseDiff[], + float phases[], + uint16_t *pNumIndexes, + const float lastPitchLag, + const float currentPitchLag, + const float lastMDCTSpectrum[], + const float scaleFactors[], + const float secondLastPowerSpectrum[], + const uint16_t nSamples, + const uint16_t nSamplesCore, + float floorPowerSpectrum, /* i : lower limit for power spectrum bins */ + const PsychoacousticParameters *psychParamsCurrent ) +{ + uint16_t newIndexOfTonalPeak[MAX_NUMBER_OF_IDX]; + uint16_t newLowerIndex[MAX_NUMBER_OF_IDX]; + uint16_t newUpperIndex[MAX_NUMBER_OF_IDX]; + uint16_t newNumIndexes, nPreservedPeaks; + uint16_t iNew, iOld, j; + float *pOldPhase, *pNewPhase; + + DetectTonalComponents( newIndexOfTonalPeak, newLowerIndex, newUpperIndex, &newNumIndexes, lastPitchLag, currentPitchLag, lastMDCTSpectrum, scaleFactors, secondLastPowerSpectrum, + nSamples, nSamplesCore, floorPowerSpectrum, psychParamsCurrent ); + + nPreservedPeaks = 0; + iNew = 0; + pOldPhase = phases; + pNewPhase = phases; + for ( iOld = 0; iOld < *pNumIndexes; iOld++ ) + { + /* We don't want that the old peak index is at the border of the new peak region, that is why >= newUpperIndex and > newLowerIndex */ + while ( ( iNew < newNumIndexes ) && ( indexOfTonalPeak[iOld] >= newUpperIndex[iNew] ) ) + { + ++iNew; + } + + if ( ( iNew < newNumIndexes ) && ( indexOfTonalPeak[iOld] > newLowerIndex[iNew] ) ) + { + newIndexOfTonalPeak[nPreservedPeaks] = indexOfTonalPeak[iOld]; + newLowerIndex[nPreservedPeaks] = lowerIndex[iOld]; + newUpperIndex[nPreservedPeaks] = upperIndex[iOld]; + phaseDiff[nPreservedPeaks] = phaseDiff[iOld]; + + for ( j = lowerIndex[iOld]; j <= upperIndex[iOld]; j++ ) + { + *pNewPhase++ = *pOldPhase++; + } + + ++nPreservedPeaks; + } + else + { + pOldPhase += upperIndex[iOld] - lowerIndex[iOld] + 1; + } + } + + for ( iNew = 0; iNew < nPreservedPeaks; iNew++ ) + { + indexOfTonalPeak[iNew] = newIndexOfTonalPeak[iNew]; + lowerIndex[iNew] = newLowerIndex[iNew]; + upperIndex[iNew] = newUpperIndex[iNew]; + } + + *pNumIndexes = nPreservedPeaks; + + return; +} + + +/*-------------------------------------------------------------------* + * Local functions + *-------------------------------------------------------------------*/ + +static void calcPseudoSpec( + const float *mdctSpec, + const uint16_t nSamples, + float floorPowerSpectrum, + float *powerSpec ) +{ + int16_t k; + float x; + + for ( k = 1; k <= nSamples - 2; k++ ) + { + x = ( mdctSpec[k + 1] - mdctSpec[k - 1] ); /* An MDST estimate */ + x = mdctSpec[k] * mdctSpec[k] + x * x; + powerSpec[k] = max( floorPowerSpectrum, x ); + } + + powerSpec[0] = 0.5f * powerSpec[1]; + powerSpec[nSamples - 1] = 0.5f * powerSpec[nSamples - 2]; + + return; +} + +static void getEnvelope( + const int16_t nSamples, + const float *powerSpec, + float F0, + float *envelope, + float *smoothedSpectrum ) +{ + int16_t nFilterLength, nHalfFilterLength, nSecondHalfFilterLength, n1, n2; + int16_t i; + double sum; /* double is required to avoid precision problems in the optimized version. */ + + if ( F0 == 0 ) + { + nFilterLength = 15; + } + else if ( F0 <= 10.0f ) + { + nFilterLength = 11; + } + else if ( F0 >= 22.0f ) + { + /* For F0 >= 22 peak is isolated well enough with the filter length of 23. + This case is however not triggered due to the limit of pit_min, + but the line is left for security reasons. */ + nFilterLength = 23; + } + else + { + nFilterLength = 1 + 2 * (int16_t) ( F0 / 2 ); + } + + nHalfFilterLength = nFilterLength / 2; + n1 = nHalfFilterLength + 1; + nSecondHalfFilterLength = nFilterLength - nHalfFilterLength; + n2 = nSecondHalfFilterLength - 1; + + assert( ( nFilterLength >= 7 ) && ( nFilterLength <= 23 ) && ( nFilterLength % 2 == 1 ) ); + + sum = 0; + for ( i = 0; i < n2; i++ ) + { + sum += LEVEL_ABOVE_ENVELOPE * powerSpec[i]; + } + + /* No need for PTR_INIT for powerSpec[i+n2] as we continue from the previous loop */ + for ( i = 0; i < n1; i++ ) + { + sum += LEVEL_ABOVE_ENVELOPE * powerSpec[i + n2]; + /* 1/(i+nSecondHalfFilterLength) needs to be stored in a table for each filter length */ + envelope[i] = (float) sum / ( i + nSecondHalfFilterLength ); + } + sum /= nFilterLength; /* 1/nFilterLength is from a table */ + + /* No need for PTR_INIT for powerSpec[i+n2] as we continue from the previous loop */ + for ( i = n1; i < nSamples - n2; i++ ) + { + sum += LEVEL_ABOVE_ENVELOPE * ( powerSpec[i + n2] - powerSpec[i - n1] ) / nFilterLength; /* LEVEL_ABOVE_ENVELOPE/nFilterLength is from a table */ + envelope[i] = (float) sum; + } + sum *= nFilterLength; + + /* No need for PTR_INIT for powerSpec[i-n1] as we continue from the previous loop */ + for ( i = nSamples - n2; i < nSamples; i++ ) + { + sum -= LEVEL_ABOVE_ENVELOPE * powerSpec[i - n1]; + /* 1/(nSamples-(i-nHalfFilterLength)) needs to be stored in a table for each filter length */ + envelope[i] = (float) sum / ( nSamples - ( i - nHalfFilterLength ) ); + } + + for ( i = 1; i < nSamples - 1; i++ ) + { + smoothedSpectrum[i] = 0.75f * powerSpec[i - 1] + powerSpec[i] + 0.75f * powerSpec[i + 1]; + } + + smoothedSpectrum[0] = powerSpec[0] + 0.75f * powerSpec[1]; + smoothedSpectrum[nSamples - 1] = 0.75f * powerSpec[nSamples - 2] + powerSpec[nSamples - 1]; + + return; +} + +static void GetF0( + const uint16_t nSamples, /* i*/ + const uint16_t nSamplesCore, /* i*/ + const float *powerSpectrum, /* i*/ + const float pitchLag, /* i*/ + float *pOrigF0, /* i/o*/ + float *pF0 /* i/o*/ +) +{ + float halfPitchLag; + uint16_t rgiStrongHarmonics[MAX_PEAKS_FROM_PITCH]; + int16_t nTotalHarmonics, nStrongHarmonics; + + assert( LAST_HARMONIC_POS_TO_CHECK <= nSamplesCore ); + + /* Use only F0 >= 100 Hz */ + if ( ( pitchLag > 0 ) && ( pitchLag <= 0.5f * nSamplesCore ) ) + { + halfPitchLag = 0.5f * pitchLag; + *pF0 = nSamplesCore / halfPitchLag; + *pOrigF0 = *pF0; + if ( nSamples < 2 * LAST_HARMONIC_POS_TO_CHECK ) + { + nTotalHarmonics = (int16_t) ( nSamples / ( *pF0 ) ); + } + else + { + nTotalHarmonics = (int16_t) ( 2 * LAST_HARMONIC_POS_TO_CHECK / ( *pF0 ) ); /* For correcting F0 we go 2 times the last harmonic position that will be used */ + } + + /* Get in rgiStrongHarmonics all i for which i*F0 are the strongest harmonics */ + findStrongestHarmonics( nSamples, powerSpectrum, *pF0, nTotalHarmonics, rgiStrongHarmonics, &nStrongHarmonics ); + CorrectF0( rgiStrongHarmonics, nStrongHarmonics, pF0 ); + } + else + { + *pF0 = 0; + *pOrigF0 = 0; + } + + return; +} + +static void findStrongestHarmonics( + const uint16_t nSamples, + const float *powerSpectrum, + const float F0, + const uint16_t nTotalHarmonics, + uint16_t *pHarmonicIndexes, + int16_t *pnHarmonics ) +{ + float peaks[MAX_PEAKS_FROM_PITCH], smallestPeak; + uint16_t nPeaksToCheck, nPeaks, iSmallestPeak; + int16_t i, l, k; + + nPeaks = 0; + iSmallestPeak = 0; + smallestPeak = FLT_MAX; + nPeaksToCheck = min( nTotalHarmonics, MAX_PEAKS_FROM_PITCH + 1 ); + + for ( i = 1; i < nPeaksToCheck; i++ ) + { + float newPeak; + + k = (int16_t) ( i * F0 ); + assert( k > 0 && k < 2 * LAST_HARMONIC_POS_TO_CHECK && k < nSamples ); + + newPeak = powerSpectrum[k]; + peaks[nPeaks] = newPeak; + pHarmonicIndexes[nPeaks] = i; + if ( newPeak <= smallestPeak ) + { + iSmallestPeak = nPeaks; + smallestPeak = newPeak; + } + ++nPeaks; + } + + for ( ; i < nTotalHarmonics; i++ ) + { + float newPeak; + + k = (int16_t) ( i * F0 ); + assert( k > 0 && k < 2 * LAST_HARMONIC_POS_TO_CHECK && k < nSamples ); + newPeak = powerSpectrum[k]; + + if ( newPeak > smallestPeak ) + { + peaks[iSmallestPeak] = newPeak; + pHarmonicIndexes[iSmallestPeak] = i; + smallestPeak = newPeak; + for ( l = 0; l < MAX_PEAKS_FROM_PITCH; l++ ) + { + if ( peaks[l] <= smallestPeak ) + { + iSmallestPeak = l; + smallestPeak = peaks[l]; + } + } + } + } + sort( pHarmonicIndexes, nPeaks ); + *pnHarmonics = nPeaks; + + return; +} + +/* Use new F0, for which harmonics are most common in pHarmonicIndexes */ +static void CorrectF0( + const uint16_t *pHarmonicIndexes, + const uint16_t nHarmonics, + float *pF0 ) +{ + int16_t i; + float F0; + uint16_t diff[MAX_PEAKS_FROM_PITCH - 1], sortedDiff[MAX_PEAKS_FROM_PITCH - 1]; + uint16_t iMostCommonDiff, nMostCommonDiff, nSameDiff, iMult; + + for ( i = 0; i < MAX_PEAKS_FROM_PITCH - 1; i++ ) + { + diff[i] = 0; + sortedDiff[i] = 0; + } + + F0 = *pF0; + if ( F0 > 0 && nHarmonics > 0 ) + { + for ( i = 0; i < nHarmonics - 1; i++ ) + { + diff[i] = pHarmonicIndexes[i + 1] - pHarmonicIndexes[i]; + sortedDiff[i] = diff[i]; + } + sort( sortedDiff, nHarmonics - 1 ); + iMostCommonDiff = sortedDiff[0]; + nSameDiff = 1; + i = 1; + if ( sortedDiff[0] * pHarmonicIndexes[0] == 1 ) + { + /* Find how many distances between peaks have length 1 */ + for ( ; i < nHarmonics - 1; i++ ) + { + if ( sortedDiff[i] == 1 ) + { + ++nSameDiff; + } + } + } + nMostCommonDiff = nSameDiff; + + /* If there are at least 3 distances between peaks with length 1 and if the 1st harmonic is in pHarmonicIndexes then keep the original F0 */ + /* Otherwise find the most common distance between peaks */ + if ( nSameDiff < 3 ) + { + /* Find the most common difference */ + for ( i = nSameDiff; i < nHarmonics - 1; i++ ) + { + if ( sortedDiff[i] == sortedDiff[i - 1] ) + { + ++nSameDiff; + } + else + { + if ( nSameDiff > nMostCommonDiff ) + { + nMostCommonDiff = nSameDiff; + iMostCommonDiff = sortedDiff[i - 1]; + } + else + { + if ( ( nSameDiff == nMostCommonDiff ) && ( abs( (int16_t) iMostCommonDiff - (int16_t) pHarmonicIndexes[0] ) > abs( (int16_t) sortedDiff[i - 1] - (int16_t) pHarmonicIndexes[0] ) ) ) + { + nMostCommonDiff = nSameDiff; + iMostCommonDiff = sortedDiff[i - 1]; + } + } + nSameDiff = 1; + } + } + + if ( nSameDiff > nMostCommonDiff ) + { + nMostCommonDiff = nSameDiff; + iMostCommonDiff = sortedDiff[nHarmonics - 2]; + } + } + + /* If there are enough peaks at the same distance */ + if ( nMostCommonDiff >= MAX_PEAKS_FROM_PITCH / 2 ) + { + iMult = 1; + for ( i = 0; i < nHarmonics - 1; i++ ) + { + if ( diff[i] == iMostCommonDiff ) + { + iMult = pHarmonicIndexes[i]; + break; + } + + /* for rare cases of octave mismatch or missing harmonics */ + if ( ( i < nHarmonics - 2 ) && ( diff[i] == diff[i + 1] ) && ( diff[i] + diff[i + 1] == iMostCommonDiff ) ) + { + iMult = pHarmonicIndexes[i]; + break; + } + } + + /* If the real F0 is much higher than the original F0 from the pitch */ + if ( iMult <= 3 ) + { + /* Use iMostCommonDiff, because the lowest pHarmonicIndexes[i] (which is equal to iMult) may not correspond to the new F0, but to it's multiple */ + F0 = iMostCommonDiff * F0; + } + else + { + F0 = 0; + } + } + /* Otherwise if there are at least 3 distances between peaks with length 1 and if the 1st harmonic is in pHarmonicIndexes then keep the original F0 */ + /* Otherwise don't use F0 */ + else if ( ( iMostCommonDiff > 1 ) || ( nMostCommonDiff < 3 ) ) + { + /* Not enough peaks at the same distance => don't use the pitch. */ + F0 = 0; + } + *pF0 = F0; + } + + return; +} + +static void modifyThreshold( + const int16_t i, + float F0, + float threshold, + float *thresholdModification ) +{ + float harmonic, fractional, twoTimesFract; + int16_t k; + + harmonic = i * F0; + k = (int16_t) harmonic; + fractional = harmonic - k; /* Fractional part of the i*F0 */ + twoTimesFract = 2.0f * fractional; /* threshold if the centar of the peek is between k-1 and k, threshold+2 if the centar of the peek is between k and k+1 */ + thresholdModification[k] = threshold; + thresholdModification[k - 1] = threshold + twoTimesFract; + thresholdModification[k + 1] = threshold + 2.0f - twoTimesFract; + + return; +} + +static void modifyThresholds( + float F0, + float origF0, + float *thresholdModification ) +{ + int16_t i, nHarmonics; + + if ( ( F0 == 0 ) && ( origF0 > 0 ) ) + { + nHarmonics = min( MAX_PEAKS_FROM_PITCH, (int16_t) ( LAST_HARMONIC_POS_TO_CHECK / origF0 ) ); + for ( i = 1; i <= nHarmonics; i++ ) + { + modifyThreshold( i, origF0, 0.7f, thresholdModification ); + } + } + else if ( ( F0 > 0 ) && ( origF0 > 0 ) ) + { + nHarmonics = min( MAX_PEAKS_FROM_PITCH, (int16_t) ( LAST_HARMONIC_POS_TO_CHECK / F0 ) ); + + for ( i = (int16_t) ( F0 / origF0 + 0.5f ); i > 0; i-- ) + { + modifyThreshold( i, origF0, 0.35f, thresholdModification ); + } + for ( i = 1; i <= nHarmonics; i++ ) + { + modifyThreshold( i, F0, 0.35f, thresholdModification ); + } + } + + return; +} + +static void findCandidates( + const uint16_t nSamples, + const float *MDCTSpectrum, + float *thresholdModificationNew, + float floorPowerSpectrum /* i : lower limit for power spectrum bins */ +) +{ + float powerSpectrum[L_FRAME_MAX]; + float envelope[L_FRAME_MAX]; + float smoothedSpectrum[L_FRAME_MAX]; + uint16_t upperIdx, lowerIdx; + int16_t k, j; + + calcPseudoSpec( MDCTSpectrum, nSamples, floorPowerSpectrum, powerSpectrum ); + getEnvelope( nSamples, powerSpectrum, 0, envelope, smoothedSpectrum ); + + set_f( thresholdModificationNew, UNREACHABLE_THRESHOLD, nSamples ); + for ( k = GROUP_LENGTH / 2; k <= nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ); k++ ) + { + if ( smoothedSpectrum[k] > envelope[k] ) + { + /* The check that bin at k is bigger than bins at k-1 and k+1 is needed to avoid deadlocks when the thresholds are low. */ + /* It removes some true peaks, especially if non weighted sum is used for the smoothed spectrum. */ + float biggerNeighbor; + biggerNeighbor = max( powerSpectrum[k - 1], powerSpectrum[k + 1] ); + if ( powerSpectrum[k] >= biggerNeighbor ) + { + /* Find the right foot */ + for ( upperIdx = k + 1; upperIdx < nSamples - 1; upperIdx++ ) + { + if ( powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) + { + /* Side lobes may increase for certain ammount */ + if ( ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) + { + break; + } + /* Check for further decrease after a side lobe increase */ + for ( j = upperIdx + 1; j < nSamples - 1; j++ ) + { + if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[j + 1] ) + { + break; + } + } + /* Side lobe increase must be 2 times smaller than the decrease to the foot */ + /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ + if ( 2.0f * powerSpectrum[upperIdx + 1] * powerSpectrum[j] > powerSpectrum[upperIdx] * powerSpectrum[upperIdx] ) + { + break; + } + upperIdx = j - 1; /* Reinitialize pointers due to the change of upperIdx */ + } + } + /* left foot */ + for ( lowerIdx = k - 1; lowerIdx > 0; lowerIdx-- ) + { + if ( powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) + { + /* Side lobes may increase for certain ammount */ + if ( ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) + { + break; + } + /* Check for further decrease after a side lobe increase */ + for ( j = lowerIdx - 1; j > 0; j-- ) + { + if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[j - 1] ) + { + break; + } + } + /* Side lobe increase must be 2 times smaller than the decrease to the foot */ + /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ + if ( 2.0f * powerSpectrum[lowerIdx - 1] * powerSpectrum[j] > powerSpectrum[lowerIdx] * powerSpectrum[lowerIdx] ) + { + break; + } + lowerIdx = j + 1; /* Reinitialize pointers due to the change of lowerIdx */ + } + } + + /* Check if there is a bigger peak up to the next peak foot */ + for ( j = max( GROUP_LENGTH / 2, lowerIdx ); j <= min( upperIdx, nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ) ); j++ ) + { + if ( powerSpectrum[j] > powerSpectrum[k] ) + { + k = j; /* PTR_INIT for powerSpectrum[k] */ + } + } + + /* Modify thresholds for the following frame */ + for ( j = k - 1; j < k + 2; j++ ) + { + if ( smoothedSpectrum[j] > envelope[j] ) + { + thresholdModificationNew[j] = SMALL_THRESHOLD; + } + else + { + thresholdModificationNew[j] = BIG_THRESHOLD; + } + } + /* Jump to the next foot of the peak. */ + k = upperIdx; /* Reinitialize pointers due to the change of k */ + } + } + } + + return; +} + +static void RefineThresholdsUsingPitch( + const uint16_t nSamples, + const uint16_t nSamplesCore, + const float *powerSpectrum, + const float lastPitchLag, + const float currentPitchLag, + float *pF0, + float *thresholdModification ) +{ + int16_t pitchIsStable; + float origF0; + + pitchIsStable = ( fabs( lastPitchLag - currentPitchLag ) < 0.25f ); + if ( pitchIsStable ) + { + GetF0( nSamples, nSamplesCore, powerSpectrum, lastPitchLag, &origF0, pF0 ); + + modifyThresholds( *pF0, origF0, thresholdModification ); + } + else + { + *pF0 = 0; + } + + return; +} + +static void findTonalComponents( + uint16_t *indexOfTonalPeak, /* OUT */ + uint16_t *lowerIndex, /* OUT */ + uint16_t *upperIndex, /* OUT */ + uint16_t *numIndexes, /* OUT */ + const uint16_t nSamples, /* IN */ + const float *powerSpectrum, /* IN */ + const float F0, /* IN */ + const float *thresholdModification /* IN */ +) +{ + float envelope[L_FRAME_MAX]; + float smoothedSpectrum[L_FRAME_MAX]; + + uint16_t nrOfFIS; + uint16_t upperIdx, lowerIdx, lowerBound; + int16_t k, j; + + getEnvelope( nSamples, powerSpectrum, F0, envelope, smoothedSpectrum ); + nrOfFIS = 0; + lowerBound = 0; + for ( k = GROUP_LENGTH / 2; k <= nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ); k++ ) + { + if ( smoothedSpectrum[k] > envelope[k] * thresholdModification[k] ) + { + /* The check that bin at k is bigger than bins at k-1 and k+1 is needed to avoid deadlocks when the thresholds are low. */ + /* It removes some true peaks, especially if non weighted sum is used for the smoothed spectrum. */ + float biggerNeighbor; + biggerNeighbor = max( powerSpectrum[k - 1], powerSpectrum[k + 1] ); + if ( powerSpectrum[k] >= biggerNeighbor ) + { + /* Find the right foot */ + for ( upperIdx = k + 1; upperIdx < nSamples - 1; upperIdx++ ) + { + if ( powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) + { + /* Side lobes may increase for certain ammount */ + if ( ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) + { + break; + } + /* Check for further decrease after a side lobe increase */ + for ( j = upperIdx + 1; j < nSamples - 1; j++ ) + { + if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[j + 1] ) + { + break; + } + } + /* Side lobe increase must be 2 times smaller than the decrease to the foot */ + /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ + if ( 2.0f * powerSpectrum[upperIdx + 1] * powerSpectrum[j] > powerSpectrum[upperIdx] * powerSpectrum[upperIdx] ) + { + break; + } + upperIdx = j - 1; /* Reinitialize pointers due to the change of upperIdx */ + } + } + /* left foot */ + for ( lowerIdx = k - 1; lowerIdx > lowerBound; lowerIdx-- ) + { + if ( powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) + { + /* Side lobes may increase for certain ammount */ + if ( ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) + { + break; + } + /* Check for further decrease after a side lobe increase */ + for ( j = lowerIdx - 1; j > 0; j-- ) + { + if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION * powerSpectrum[j - 1] ) + { + break; + } + } + /* Side lobe increase must be 2 times smaller than the decrease to the foot */ + /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ + if ( 2.0f * powerSpectrum[lowerIdx - 1] * powerSpectrum[j] > powerSpectrum[lowerIdx] * powerSpectrum[lowerIdx] ) + { + break; + } + lowerIdx = j + 1; /* Reinitialize pointers due to the change of lowerIdx */ + } + } + lowerBound = upperIdx; + + /* Check if there is a bigger peak up to the next peak foot */ + for ( j = max( GROUP_LENGTH / 2, lowerIdx ); j <= min( upperIdx, nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ) ); j++ ) + { + if ( powerSpectrum[j] > powerSpectrum[k] ) + { + k = j; /* PTR_INIT for powerSpectrum[k] */ + } + } + + assert( ( nrOfFIS == 0 ) || ( indexOfTonalPeak[nrOfFIS - 1] < k ) ); + lowerIndex[nrOfFIS] = k - GROUP_LENGTH / 2; + upperIndex[nrOfFIS] = k + ( GROUP_LENGTH - GROUP_LENGTH / 2 - 1 ); + if ( ( nrOfFIS > 0 ) && ( lowerIndex[nrOfFIS] <= upperIndex[nrOfFIS - 1] ) ) + { + int16_t m = ( k + indexOfTonalPeak[nrOfFIS - 1] ) / 2; + upperIndex[nrOfFIS - 1] = m; + lowerIndex[nrOfFIS] = m + 1; + } + indexOfTonalPeak[nrOfFIS++] = k; + if ( nrOfFIS == MAX_NUMBER_OF_IDX ) + { + break; + } + /* Jump to the next foot of the peak. */ + k = upperIdx; /* Reinitialize pointers due to the change of k */ + } + } + } + *numIndexes = nrOfFIS; + + return; +} diff --git a/lib_dec/acelp_core_dec.c b/lib_dec/acelp_core_dec.c new file mode 100644 index 0000000000..17b5a82aa9 --- /dev/null +++ b/lib_dec/acelp_core_dec.c @@ -0,0 +1,1448 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +#include "ivas_rom_com.h" +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------* + * acelp_core_dec() + * + * ACELP core decoder + *-------------------------------------------------------------------*/ + +ivas_error acelp_core_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float output[], /* o : synthesis @internal Fs */ + float synth[], /* o : synthesis */ + float save_hb_synth[], /* o : HB synthesis */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float old_syn_12k8_16k[], /* o : intermediate ACELP synthesis at 12.8kHz or 16kHz to be used by SWB BWE */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ + int16_t *unbits, /* o : number of unused bits */ + int16_t *sid_bw, /* o : 0-NB/WB, 1-SWB SID */ + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ + const float tdm_lspQ_PCh[M], /* i : Q LSPs for primary channel */ + const float tdm_lsfQ_PCh[M], /* i : Q LSFs for primary channel */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t last_element_mode, /* i : last element mode */ + const int32_t last_element_brate, /* i : last element bitrate */ + const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ + const int16_t nchan_out, /* i : number of output channels */ + STEREO_CNG_DEC_HANDLE hStereoCng /* i : stereo CNG handle */ +) +{ + float old_exc[L_EXC_DEC], *exc; /* excitation signal buffer */ + float syn_tmp[L_FRAME16k + L_SUBFR], *syn; /* synthesis signal buffer */ + int16_t output_frame; /* frame length at output sampling freq. */ + float lsf_new[M]; /* LSFs at the end of the frame */ + float lsp_new[M]; /* LSPs at the end of the frame */ + float lsp_mid[M]; /* LSPs in the middle of the frame */ + float Aq[NB_SUBFR16k * ( M + 1 )]; /* A(q) quantized for the 4 subframes */ + float old_exc2[L_FRAME16k + L_EXC_MEM], *exc2; /* total excitation buffer */ + float mem_tmp[M]; /* temporary synthesis filter memory */ + float enr_q; /* E information for FER protection */ + float tmp_noise; /* Long term temporary noise energy */ + float Es_pred; /* predicted scaled innov. energy */ + float FEC_pitch; /* FEC pitch */ + float old_bwe_exc[( ( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 )]; /* excitation buffer */ + float *bwe_exc; /* Excitation for SWB TBE */ + int16_t i, int_fs; + int16_t tc_subfr; + int16_t allow_cn_step; + float temp_buf[L_FRAME16k + L_SYN_MEM]; + int16_t last_pulse_pos; + int16_t T0_tmp; + int16_t do_WI; + float dct_buffer[DCT_L_POST]; + float exc_buffer[DCT_L_POST]; + float dct_exc_tmp[L_FRAME16k]; + float bpf_error_signal[L_FRAME16k]; + int16_t nb_bits; /* number of bits */ + int16_t indice; /* parameter indices to write */ + float gain_buf[NB_SUBFR16k]; + float q_env[20]; + float exc3[L_FRAME16k]; + float syn1_tmp[L_FRAME16k + 2], *syn1; + float *realBuffer[CLDFB_NO_COL_MAX], *imagBuffer[CLDFB_NO_COL_MAX]; + float realBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float imagBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + int16_t LSF_Q_prediction; /* LSF prediction mode */ + float tmpF; + int16_t uc_two_stage_flag; + int16_t tdm_lp_reuse_flag, tdm_low_rate_mode, tdm_Pitch_reuse_flag; + float *old_exc_s; /* Start of last excitation frame */ + float *p_tdm_Pri_pitch_buf; + int16_t local_element_mode; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( st->element_mode == IVAS_CPE_MDCT && nchan_out == 1 && st->idchan == 1 && last_element_brate <= IVAS_SID_4k4 ) + { + /* In MDCT-Stereo DTX with mono output, we can skip CNG for the second channel, except for the first inactive frame following an active period */ + return error; + } + + wmops_sub_start( "acelp_core_dec" ); + + output_frame = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); + + /*----------------------------------------------------------------* + * stereo SID and CNG frames processing + *----------------------------------------------------------------*/ + + if ( st->core_brate <= SID_2k40 && st->element_mode == IVAS_CPE_DFT && nchan_out == 2 ) + { + if ( st->cng_type == FD_CNG ) + { + configureFdCngDec( st->hFdCngDec, st->bwidth, ACELP_14k25, st->L_frame, st->last_L_frame, st->element_mode ); + + /* Only run parameter decoding in SID frames */ + if ( st->core_brate == SID_2k40 ) + { + FdCng_decodeSID( st ); + } + + for ( i = 0; i < NPART; i++ ) + { + st->hFdCngDec->hFdCngCom->sidNoiseEstLp[i] = STEREO_DFT_FD_FILT * st->hFdCngDec->hFdCngCom->sidNoiseEstLp[i] + ( 1 - STEREO_DFT_FD_FILT ) * st->hFdCngDec->hFdCngCom->sidNoiseEst[i]; + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( NULL, NULL, NULL, NULL, st, 0, 0 ); +#else + ApplyFdCng( NULL, NULL, NULL, st, 0, 0 ); +#endif + } + else + { + configureFdCngDec( st->hFdCngDec, st->bwidth, ACELP_14k25, st->L_frame, st->last_L_frame, st->element_mode ); + + /* decode CNG parameters */ + CNG_dec( st, last_element_mode, Aq, lsp_new, lsf_new, &allow_cn_step, sid_bw, q_env ); + + /* comfort noise generation */ + CNG_exc( st->core_brate, st->L_frame, &st->hTdCngDec->Enew, &st->hTdCngDec->cng_seed, NULL, NULL, &st->lp_ener, st->last_core_brate, &st->first_CNG, &( st->hTdCngDec->cng_ener_seed ), NULL, allow_cn_step, &st->hTdCngDec->last_allow_cn_step, st->hTdCngDec->num_ho, q_env, st->hTdCngDec->lp_env, st->hTdCngDec->old_env, st->hTdCngDec->exc_mem, st->hTdCngDec->exc_mem1, sid_bw, &st->hTdCngDec->cng_ener_seed1, NULL, st->Opt_AMR_WB, st->element_mode ); + + mvr2r( Aq, st->Aq_cng, M + 1 ); + + /* update old LSP and LSF vector */ + mvr2r( lsf_new, st->lsf_old, M ); + mvr2r( lsp_new, st->lsp_old, M ); + } + + set_f( output, 0, output_frame ); /* output and synth are not used in DFT domain CNG generation and the decoder output is unaffected if they are left uninitalized */ + set_f( synth, 0, output_frame ); /* They are however read in a few places which causes errors in the valgrind tests. Simplest solution from a code perspective was to set them to zero. */ + + /* CN generation done in DFT domain */ + wmops_sub_end(); + return error; + } + + /*----------------------------------------------------------------* + * Active frames processing + *----------------------------------------------------------------*/ + + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + realBuffer[i] = realBufferTmp[i]; + imagBuffer[i] = imagBufferTmp[i]; + } + + /*----------------------------------------------------------------* + * Initialization + *----------------------------------------------------------------*/ + + LSF_Q_prediction = -1; + set_f( syn_tmp, 0, L_SUBFR ); + syn = syn_tmp + L_SUBFR; + syn1_tmp[0] = 0; + syn1_tmp[1] = 0; + syn1 = syn1_tmp + 2; + st->bpf_off = 0; + + if ( st->last_core == HQ_CORE || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || ( st->element_mode == IVAS_CPE_DFT && st->last_core_brate <= SID_2k40 ) || ( st->element_mode == IVAS_CPE_MDCT && st->last_core_brate <= SID_2k40 ) ) + { + /* in case of HQ->ACELP switching, do not apply BPF */ + st->bpf_off = 1; + + if ( st->hPFstat != NULL ) + { + /* in case of core switching, reset post-filter memories */ + st->hPFstat->on = 0; + } + + if ( st->hGSCDec != NULL ) + { + /* reset the GSC pre echo energy threshold in case of switching */ + st->hGSCDec->Last_frame_ener = (float) MAX_32; + } + } + + if ( st->hGSCDec != NULL && st->prev_bfi > 0 ) + { + /* reset the GSC pre echo energy threshold in case of FEC */ + st->hGSCDec->Last_frame_ener = (float) MAX_32; + } + + if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && ( st->last_core_brate == SID_2k40 || st->last_core_brate == FRAME_NO_DATA ) ) + { + set_zero( st->hFdCngDec->hFdCngCom->olapBufferSynth2, FFTLEN ); + set_zero( hStereoCng->olapBufferSynth22, FFTLEN ); + } + + st->clas_dec = st->last_good; + enr_q = 0.0f; + Es_pred = 0.0f; + tmp_noise = 0.0f; + + mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); + exc = old_exc + L_EXC_MEM_DEC; + if ( st->hWIDec != NULL ) + { + mvr2r( st->hWIDec->old_exc2, old_exc2, L_EXC_MEM ); + } + else + { + set_f( old_exc2, 0, L_EXC_MEM ); + } + exc2 = old_exc2 + L_EXC_MEM; + if ( st->hBWE_TD != NULL ) + { + mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); + bwe_exc = old_bwe_exc + PIT16k_MAX * 2; + } + else + { + bwe_exc = NULL; + } + + last_pulse_pos = 0; + do_WI = 0; + st->GSC_noisy_speech = 0; + st->relax_prev_lsf_interp = 0; + set_zero( gain_buf, NB_SUBFR16k ); + + if ( st->L_frame == L_FRAME ) + { + st->gamma = GAMMA1; + st->preemph_fac = PREEMPH_FAC; + int_fs = INT_FS_12k8; + } + else + { + st->gamma = GAMMA16k; + st->preemph_fac = PREEMPH_FAC_16k; + int_fs = INT_FS_16k; + } + + /* reset post-filter in case of switching */ + if ( st->hPFstat != NULL && st->hPFstat->on == 0 ) + { + st->hPFstat->reset = 1; + } + + /* TD stereo parameters */ + if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) + { + tdm_lp_reuse_flag = hStereoTD->tdm_lp_reuse_flag; + tdm_low_rate_mode = hStereoTD->tdm_low_rate_mode; + tdm_Pitch_reuse_flag = hStereoTD->tdm_Pitch_reuse_flag; + p_tdm_Pri_pitch_buf = hStereoTD->tdm_Pri_pitch_buf; + } + else + { + tdm_lp_reuse_flag = 0; + tdm_low_rate_mode = 0; + if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) + { + tdm_low_rate_mode = 1; + } + tdm_Pitch_reuse_flag = 0; + p_tdm_Pri_pitch_buf = NULL; + } + + /*----------------------------------------------------------------* + * Updates in case of internal sampling rate switching + *----------------------------------------------------------------*/ + + if ( st->last_L_frame != st->L_frame && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + int16_t dec; + + if ( st->hPFstat->on != 0 ) + { + int16_t mem_syn_r_size_old, mem_syn_r_size_new; + + mem_syn_r_size_old = (int16_t) ( 1.25 * st->last_L_frame / 20.f ); + mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); + lerp( st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + lerp( st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + } + + /* convert quantized LSP vector */ + st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); + + /* convert old quantized LSF vector */ + lsp2lsf( st->lsp_old, st->lsf_old, M, int_fs ); + + /* FEC - update adaptive LSF mean vector */ + mvr2r( st->lsf_old, st->lsfoldbfi1, M ); + mvr2r( st->lsf_old, st->lsfoldbfi0, M ); + mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); + + /* Reset LPC mem */ + if ( st->sr_core == INT_FS_16k ) + { + mvr2r( GEWB2_Ave, st->mem_AR, M ); + } + else + { + mvr2r( GEWB_Ave, st->mem_AR, M ); + } + set_zero( st->mem_MA, M ); + + /* update synthesis filter memories */ + dec = DEC; + if ( st->element_mode != EVS_MONO ) + { + dec = DEC_IVAS; + } + synth_mem_updt2( st->L_frame, st->last_L_frame, st->old_exc, st->mem_syn_r, st->mem_syn2, NULL, dec ); + mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); + mvr2r( st->mem_syn2, st->mem_syn1, M ); + mvr2r( st->mem_syn2, st->mem_syn3, M ); + } + + /* update buffer of old subframe pitch values */ + if ( st->last_L_frame != st->L_frame ) + { + if ( st->L_frame == L_FRAME ) + { + if ( st->last_L_frame == L_FRAME32k ) + { + tmpF = (float) 12800 / (float) 32000; + } + else if ( st->last_L_frame == 512 ) + { + tmpF = (float) 12800 / (float) 25600; + } + else /* st->last_L_frame == L_FRAME16k */ + { + tmpF = (float) 12800 / (float) 16000; + } + + for ( i = NB_SUBFR16k - NB_SUBFR; i < NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i - 1] = tmpF * st->old_pitch_buf[i]; + } + + for ( i = 2 * NB_SUBFR16k - NB_SUBFR; i < 2 * NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i - 2] = tmpF * st->old_pitch_buf[i]; + } + } + else + { + if ( st->last_L_frame == L_FRAME32k ) + { + tmpF = (float) 16000 / (float) 32000; + } + else if ( st->last_L_frame == 512 ) + { + tmpF = (float) 16000 / (float) 25600; + } + else /* st->last_L_frame == L_FRAME12k8 */ + { + tmpF = (float) 16000 / (float) 12800; + } + + for ( i = 2 * NB_SUBFR - 1; i >= NB_SUBFR; i-- ) + { + st->old_pitch_buf[i + 2] = tmpF * st->old_pitch_buf[i]; + } + st->old_pitch_buf[NB_SUBFR + 1] = st->old_pitch_buf[NB_SUBFR + 2]; + + for ( i = NB_SUBFR - 1; i >= 0; i-- ) + { + st->old_pitch_buf[i + 1] = tmpF * st->old_pitch_buf[i]; + } + st->old_pitch_buf[0] = st->old_pitch_buf[1]; + } + } + + if ( st->bfi_pitch_frame != st->L_frame ) + { + if ( st->L_frame == L_FRAME ) + { + if ( st->bfi_pitch_frame == L_FRAME32k ) + { + tmpF = (float) 12800 / (float) 32000; + } + else if ( st->bfi_pitch_frame == 512 ) + { + tmpF = (float) 12800 / (float) 25600; + } + else /* st->bfi_pitch_frame == L_FRAME16k */ + { + tmpF = (float) 12800 / (float) 16000; + } + st->bfi_pitch *= tmpF; + st->bfi_pitch_frame = L_FRAME; + } + else + { + if ( st->bfi_pitch_frame == L_FRAME32k ) + { + tmpF = (float) 16000 / (float) 32000; + } + else if ( st->bfi_pitch_frame == 512 ) + { + tmpF = (float) 16000 / (float) 25600; + } + else /* st->bfi_pitch_frame == L_FRAME12k8 */ + { + tmpF = (float) 16000 / (float) 12800; + } + st->bfi_pitch *= tmpF; + st->bfi_pitch_frame = L_FRAME16k; + } + } + + if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) + { + st->rate_switching_reset = 1; + } + + /*----------------------------------------------------------------------* + * GOOD frame + *----------------------------------------------------------------------*/ + + if ( !st->bfi ) + { + + /*----------------------------------------------------------------* + * Decoding of TC subframe classification + *----------------------------------------------------------------*/ + + tc_subfr = -1; + if ( st->coder_type == TRANSITION ) + { + tc_subfr = tc_classif( st ); + } + + /*----------------------------------------------------------------* + * Decoding of GSC IVAS mode + *----------------------------------------------------------------*/ + + if ( st->element_mode > EVS_MONO && st->idchan == 0 && !( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && !tdm_low_rate_mode ) + { + if ( st->coder_type == AUDIO || ( st->coder_type == INACTIVE && st->total_brate <= MAX_GSC_INACTIVE_BRATE ) ) + { + st->GSC_IVAS_mode = get_next_indice( st, 2 ); + } + } + + /*----------------------------------------------------------------* + * Decoding of inactive CNG frames + *----------------------------------------------------------------*/ + + if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) + { + /* decode CNG parameters */ + if ( st->cng_type == LP_CNG ) + { + CNG_dec( st, last_element_mode, Aq, lsp_new, lsf_new, &allow_cn_step, sid_bw, q_env ); + + /* comfort noise generation */ + local_element_mode = st->element_mode; + if ( ( nchan_out == 1 && st->element_mode == IVAS_CPE_DFT ) || ( st->masa_sid_format == 1 ) ) + { + local_element_mode = IVAS_SCE; /* For DFT Stereo mono decoding, run CNG_exc as in SCE */ + } + CNG_exc( st->core_brate, st->L_frame, &st->hTdCngDec->Enew, &st->hTdCngDec->cng_seed, exc, exc2, &st->lp_ener, st->last_core_brate, &st->first_CNG, &( st->hTdCngDec->cng_ener_seed ), bwe_exc, allow_cn_step, &st->hTdCngDec->last_allow_cn_step, st->hTdCngDec->num_ho, q_env, st->hTdCngDec->lp_env, st->hTdCngDec->old_env, st->hTdCngDec->exc_mem, st->hTdCngDec->exc_mem1, sid_bw, &st->hTdCngDec->cng_ener_seed1, exc3, st->Opt_AMR_WB, local_element_mode ); + mvr2r( Aq, st->Aq_cng, M + 1 ); + } + else + { + if ( st->core_brate == SID_2k40 && st->element_mode != IVAS_CPE_MDCT ) + { + FdCng_decodeSID( st ); + *sid_bw = 0; + } + + if ( st->element_mode == IVAS_CPE_DFT ) + { + assert( nchan_out == 1 ); + + for ( i = 0; i < NPART; i++ ) + { + st->hFdCngDec->hFdCngCom->sidNoiseEstLp[i] = STEREO_DFT_FD_FILT * st->hFdCngDec->hFdCngCom->sidNoiseEstLp[i] + ( 1 - STEREO_DFT_FD_FILT ) * st->hFdCngDec->hFdCngCom->sidNoiseEst[i]; + } +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( syn, NULL, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); +#else + ApplyFdCng( syn, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); +#endif + } + + generate_comfort_noise_dec( NULL, NULL, st, nchan_out ); + + FdCng_exc( st->hFdCngDec->hFdCngCom, &st->CNG_mode, st->L_frame, st->lsp_old, st->first_CNG, st->lspCNG, Aq, lsp_new, lsf_new, exc, exc2, bwe_exc ); + + mvr2r( exc2, exc3, st->L_frame ); + } + + /* update past excitation signals for LD music post-filter */ + if ( st->hMusicPF != NULL ) + { + mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); + mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); + + /* Update music post processing values */ + /* Filter energies update */ + for ( i = 0; i < DCT_L_POST; i++ ) + { + st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; + } + } + +#ifdef DEBUG_MODE_ACELP + dbgwrite( exc, sizeof( float ), st->L_frame, 1, fname( debug_dir, "exc", st->idchan, st->id_element, DEC ) ); +#endif + + /* synthesis at 12.8kHz sampling rate */ + syn_12k8( st->L_frame, Aq, exc2, syn, st->mem_syn2, 1 ); + syn_12k8( st->L_frame, Aq, exc3, syn1, st->mem_syn3, 1 ); + + /* reset the decoder */ + CNG_reset_dec( st, pitch_buf, voice_factors ); + + /* update st->mem_syn1 for ACELP core switching */ + mvr2r( st->mem_syn3, st->mem_syn1, M ); + + /* update old synthesis for classification */ + mvr2r( syn1 + st->L_frame - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + + /* save and delay synthesis to be used by SWB BWE */ + if ( st->hBWE_FD != NULL ) + { + save_old_syn( st->L_frame, syn1, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac, &st->hBWE_FD->mem_deemph_old_syn ); + } + } + + /*----------------------------------------------------------------* + * Decoding of all other frames + *----------------------------------------------------------------*/ + + else + { + /*-----------------------------------------------------------------* + * Configure ACELP bit allocation + *-----------------------------------------------------------------*/ + + nb_bits = 0; + st->acelp_cfg.FEC_mode = 0; + uc_two_stage_flag = 0; + + if ( !st->nelp_mode_dec && !st->ppp_mode_dec ) + { + int16_t tc_subfr_tmp; + + tc_subfr_tmp = tc_subfr; + if ( tc_subfr_tmp < L_SUBFR ) + { + tc_subfr_tmp = 0; + } + + if ( tc_subfr == TC_0_192 ) + { + nb_bits = -1; + } + + config_acelp1( DEC, st->total_brate, st->core_brate, st->core, st->extl_orig, st->extl_brate_orig, st->L_frame, st->GSC_noisy_speech, &( st->acelp_cfg ), st->next_bit_pos, st->coder_type, tc_subfr_tmp, 1, &nb_bits, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); + + if ( st->coder_type == TRANSITION && tc_subfr < L_SUBFR && st->L_frame == L_FRAME ) /* ISfm: why is this called again after above */ + { + config_acelp1( DEC, st->total_brate, st->core_brate, st->core, st->extl_orig, st->extl_brate_orig, st->L_frame, -1, &( st->acelp_cfg ), st->next_bit_pos, st->coder_type, tc_subfr, 2, &nb_bits, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); + } + } + + /*-----------------------------------------------------------------* + * After CNG period, use the most up-to-date LSPs + *-----------------------------------------------------------------*/ + + if ( st->hTdCngDec != NULL && ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_2k40 ) ) + { + mvr2r( st->lspCNG, st->lsp_old, M ); + lsp2lsf( st->lspCNG, st->lsf_old, M, int_fs ); + } + + /*-----------------------------------------------------------------* + * Reset higher ACELP pre-quantizer in case of switching + *-----------------------------------------------------------------*/ + + if ( !st->use_acelp_preq ) + { + st->mem_preemp_preQ = 0.0f; + st->last_nq_preQ = 0; + st->last_code_preq = 0; + } + st->use_acelp_preq = 0; + + /*-----------------------------------------------------------------* + * LSF de-quantization and interpolation + *-----------------------------------------------------------------*/ + + if ( !tdm_lp_reuse_flag ) + { + lsf_dec( st, tc_subfr, Aq, &LSF_Q_prediction, lsf_new, lsp_new, lsp_mid, tdm_low_rate_mode +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + tdm_lsfQ_PCh +#endif + ); + } + else + { + const float *pt_interp_2; +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE + int16_t beta_index[1]; + + beta_index[0] = get_next_indice( st, TDM_IC_LSF_PRED_BITS ); + tdm_SCh_lsf_reuse( DEC, st->element_brate, lsf_new, lsp_new, tdm_lsfQ_PCh, NULL, beta_index ); +#else + mvr2r( tdm_lspQ_PCh, lsp_new, M ); + mvr2r( tdm_lsfQ_PCh, lsf_new, M ); +#endif + if ( st->rate_switching_reset ) + { + /* extrapolation in case of unstable LSF convert */ + mvr2r( lsp_new, st->lsp_old, M ); + mvr2r( lsf_new, st->lsf_old, M ); + } + + pt_interp_2 = interpol_frac_12k8; + if ( tdm_low_rate_mode == 1 && st->coder_type > UNVOICED ) + { + pt_interp_2 = interpol_frac2; + } + + if ( st->active_cnt == 1 ) + { + mvr2r( lsp_new, st->lsp_old, M ); + lsp2lsf( lsp_new, st->lsf_old, M, st->sr_core ); + } + + /* LSP interpolation and conversion of LSPs to A(z) */ + int_lsp( st->L_frame, st->lsp_old, lsp_new, Aq, M, pt_interp_2, 0 ); + /* Check LSF stability (distance between old LSFs and current LSFs) */ + st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); + } + + if ( st->last_core == HQ_CORE && st->element_mode > EVS_MONO ) + { + /* Prepare ACB memory from last HQ frame */ + old_exc_s = st->old_exc + L_EXC_MEM_DEC - st->L_frame; + tmpF = *old_exc_s; + st->mem_deemph = old_exc_s[st->L_frame - 1]; + preemph( old_exc_s, st->preemph_fac, L_FRAME16k, &tmpF ); + mvr2r( old_exc_s + st->L_frame - M, st->mem_syn2, M ); + residu( Aq, M, old_exc_s, old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame ); + } + + /*-----------------------------------------------------------------* + * FEC - first good frame after lost frame(s) (possibility to correct the ACB) + *-----------------------------------------------------------------*/ + + if ( st->acelp_cfg.FEC_mode > 0 ) + { + last_pulse_pos = 0; + + /* decode the last glottal pulse position */ + T0_tmp = FEC_pos_dec( st, &last_pulse_pos, &enr_q, nb_bits ); + + if ( st->last_core != HQ_CORE || ( st->last_core == HQ_CORE && st->last_con_tcx ) ) + { + if ( st->clas_dec == SIN_ONSET && last_pulse_pos != 0 && st->prev_bfi == 1 ) + { + FEC_SinOnset( old_exc + L_EXC_MEM_DEC - L_EXC_MEM, last_pulse_pos, T0_tmp, enr_q, Aq, st->L_frame ); + } + else if ( ( st->coder_type == GENERIC || st->coder_type == VOICED ) && last_pulse_pos != 0 && st->old_bfi_cnt == 1 && st->hWIDec != NULL ) + { + do_WI = FEC_enhACB( st->L_frame, st->last_L_frame, old_exc + L_EXC_MEM_DEC - L_EXC_MEM, T0_tmp, last_pulse_pos, st->bfi_pitch ); + } + } + } + + /*------------------------------------------------------------* + * In case of first frame after an erasure and transition from voiced to unvoiced or inactive + * redo the LPC interpolation + *------------------------------------------------------------*/ + + if ( st->stab_fac == 0 && st->old_bfi_cnt > 0 && st->clas_dec != VOICED_CLAS && st->clas_dec != ONSET && st->relax_prev_lsf_interp == 0 && !( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) ) + { + int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, 2 ); + } + + /*---------------------------------------------------------------* + * Decoding of the scaled predicted innovation energy + *---------------------------------------------------------------*/ + + if ( nb_bits > 0 ) + { + indice = get_next_indice( st, nb_bits ); + Es_pred_dec( &Es_pred, indice, nb_bits, uc_two_stage_flag ); + } + + /*------------------------------------------------------------* + * Decode excitation according to coding type + *------------------------------------------------------------*/ + + if ( tdm_low_rate_mode ) /* tdm stereo low rate mode */ + { + if ( st->coder_type <= UNVOICED ) + { + tdm_low_rate_dec( st, dct_exc_tmp, &tmp_noise, pitch_buf, voice_factors, exc, exc2, bwe_exc, lsf_new ); + } + else /* GENERIC */ + { + decod_gen_2sbfr( st, sharpFlag, Aq, pitch_buf, voice_factors, exc, exc2, bwe_exc, gain_buf, tdm_Pitch_reuse_flag, p_tdm_Pri_pitch_buf ); + + if ( st->element_mode == IVAS_CPE_TD ) + { + tmp_noise = st->lp_gainc; + } + } + } + else if ( st->nelp_mode_dec ) + { + /* SC-VBR - NELP frames */ + decod_nelp( st, &tmp_noise, pitch_buf, exc, exc2, voice_factors, bwe_exc, st->bfi, gain_buf ); + } + else if ( st->coder_type == UNVOICED ) + { + /* UNVOICED frames */ + decod_unvoiced( st, Aq, Es_pred, uc_two_stage_flag, &tmp_noise, pitch_buf, voice_factors, exc, exc2, bwe_exc, gain_buf ); + } + else if ( st->ppp_mode_dec ) + { + /* SC-VBR - PPP frames */ + if ( ( error = decod_ppp( st, Aq, pitch_buf, exc, exc2, voice_factors, bwe_exc, gain_buf, st->bfi ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st->coder_type == TRANSITION ) + { + decod_tran( st, st->L_frame, tc_subfr, Aq, Es_pred, pitch_buf, voice_factors, exc, exc2, bwe_exc, unbits, sharpFlag, gain_buf ); + } + else if ( st->coder_type == AUDIO || ( st->coder_type == INACTIVE && st->total_brate <= MAX_GSC_INACTIVE_BRATE ) ) + { + /* AUDIO and INACTIVE frames (coded by GSC technology) */ + decod_audio( st, dct_exc_tmp, Aq, &tmp_noise, pitch_buf, voice_factors, exc, exc2, bwe_exc, lsf_new, gain_buf, tdm_lp_reuse_flag, tdm_low_rate_mode, tdm_Pitch_reuse_flag, p_tdm_Pri_pitch_buf ); + } + else + { + /* GENERIC, VOICED and INACTIVE frames (coded by AVQ technology) */ + if ( ( error = decod_gen_voic( st, st->L_frame, sharpFlag, Aq, Es_pred, do_WI, pitch_buf, voice_factors, exc, exc2, bwe_exc, unbits, gain_buf, tdm_Pitch_reuse_flag, p_tdm_Pri_pitch_buf ) ) != IVAS_ERR_OK ) + { + return error; + } + + + if ( st->element_mode == IVAS_CPE_TD ) + { + tmp_noise = st->lp_gainc; + } + } + +#ifdef DEBUG_MODE_ACELP + dbgwrite( exc, sizeof( float ), st->L_frame, 1, fname( debug_dir, "exc", st->idchan, st->id_element, DEC ) ); +#endif + + /* synthesis for ACELP core switching and SWB BWE */ + syn_12k8( st->L_frame, Aq, exc, temp_buf, st->mem_syn1, 1 ); + + /* save and delay synthesis to be used by SWB BWE */ + if ( st->hBWE_FD != NULL ) + { + save_old_syn( st->L_frame, temp_buf, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac, &st->hBWE_FD->mem_deemph_old_syn ); + } + + /*-----------------------------------------------------------------* + * Apply energy matching when switching to inactive frames + *-----------------------------------------------------------------*/ + + inact_switch_ematch( exc2, dct_exc_tmp, st->hGSCDec->lt_ener_per_band, st->coder_type, st->L_frame, st->total_brate, st->bfi, st->last_core, st->last_codec_mode, tdm_low_rate_mode, st->element_mode ); + + /*------------------------------------------------------------* + * Decode information and modify the excitation signal of stationary unvoiced frames + *------------------------------------------------------------*/ + + if ( !( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) && st->nelp_mode_dec != 1 && !( st->element_mode == IVAS_SCE && tdm_low_rate_mode ) ) + { + stat_noise_uv_dec( st, lsp_new, lsp_mid, Aq, exc2, uc_two_stage_flag ); + } + + /*------------------------------------------------------------* + * Save filter memory in case the synthesis is redone after scaling + * Synthesis at 12k8 Hz sampling rate + *------------------------------------------------------------*/ + + /* update past excitation signals for LD music post-filter */ + if ( st->hMusicPF != NULL ) + { + mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); + mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); + mvr2r( st->hMusicPF->dct_post_old_exc, exc_buffer, DCT_L_POST - OFFSET2 ); + } + + if ( ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) || ( st->GSC_IVAS_mode >= 1 && st->L_frame == L_FRAME ) ) + { + int16_t last_coder_type = st->last_coder_type; + + if ( ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) || ( st->GSC_IVAS_mode >= 1 && st->GSC_noisy_speech == 0 ) ) + { + last_coder_type = AUDIO; + } + + /* Extrapolation of the last future part, windowing and high resolution DCT transform */ + Prep_music_postP( exc_buffer, dct_buffer, st->hMusicPF->filt_lfE, st->last_core, pitch_buf, st->hMusicPF->LDm_enh_lp_gbin ); + + /* LD music post-filter */ + LD_music_post_filter( st->hMusicPF, dct_buffer, dct_buffer, st->core_brate, AUDIO, last_coder_type ); + + /* Inverse DCT transform, retrieval of the aligned excitation, re-synthesis */ + mvr2r( st->mem_syn2, mem_tmp, M ); + Post_music_postP( dct_buffer, exc_buffer, exc2, st->mem_syn2, st->mem_syn2, Aq, syn ); + } + else + { + /* Core synthesis at 12.8kHz or 16kHz */ + mvr2r( st->mem_syn2, mem_tmp, M ); + syn_12k8( st->L_frame, Aq, exc2, syn, st->mem_syn2, 1 ); + + if ( st->hMusicPF != NULL ) + { + for ( i = 0; i < DCT_L_POST; i++ ) + { + st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; + } + } + } + + /*------------------------------------------------------------* + * FEC - Estimate the classification information + *------------------------------------------------------------*/ + + FEC_clas_estim( syn, pitch_buf, st->L_frame, st->coder_type, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, st->Opt_AMR_WB, &st->decision_hyst, NULL, NULL, NULL, NULL, NULL, NULL, temp_buf, 0, 0, 0, 0, 0, 0, st->last_core_brate, st->acelp_cfg.FEC_mode ); + + /*------------------------------------------------------------* + * FEC - Estimate pitch + *------------------------------------------------------------*/ + + FEC_pitch_estim( st->Opt_AMR_WB, st->last_core, st->L_frame, st->clas_dec, st->last_good, pitch_buf, st->old_pitch_buf, &st->bfi_pitch, &st->bfi_pitch_frame, &st->upd_cnt, st->coder_type ); + + /*------------------------------------------------------------* + * FEC - Smooth the speech energy evolution when recovering after a BAD frame + * (smoothing is performed in the excitation domain and signal is resynthesized after) + *------------------------------------------------------------*/ + + FEC_scale_syn( st->L_frame, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, st->coder_type, LSF_Q_prediction, &st->scaling_flag, &st->lp_ener_FEC_av, &st->lp_ener_FEC_max, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP, mem_tmp, st->mem_syn2, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), 0 ); + + /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ + if ( ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && st->total_brate <= ACELP_7k20 ) || ( st->total_brate == ACELP_7k20 ) || ( st->total_brate == ACELP_8k00 ) ) + { + fer_energy( st->L_frame, st->clas_dec, syn, pitch_buf[( ( st->L_frame ) >> 6 ) - 1], &st->enr_old, st->L_frame ); + } + } + + } /* End of GOOD FRAME */ + + /*----------------------------------------------------------------* + * BAD frame + *----------------------------------------------------------------*/ + + else + { + /* SC-VBR */ + if ( st->last_nelp_mode_dec == 1 ) + { + st->nelp_mode_dec = 1; + } + + /* long burst frame erasures */ + if ( st->nbLostCmpt > 5 && st->clas_dec >= VOICED_CLAS && st->clas_dec < INACTIVE_CLAS ) + { + st->last_good = VOICED_TRANSITION; + } + + /* LSF estimation and A(z) calculation */ + lsf_dec_bfi( MODE1, lsf_new, st->lsf_old, st->lsf_adaptive_mean, NULL, st->mem_MA, st->mem_AR, st->stab_fac, st->last_coder_type, st->L_frame, st->last_good, st->nbLostCmpt, 0, NULL, NULL, NULL, st->hGSCDec->Last_GSC_pit_band_idx, st->Opt_AMR_WB, st->bwidth ); + + FEC_lsf2lsp_interp( st, st->L_frame, Aq, lsf_new, lsp_new ); + + if ( st->nelp_mode_dec == 1 ) + { + /* SC-VBR */ + decod_nelp( st, &tmp_noise, pitch_buf, exc, exc2, voice_factors, bwe_exc, st->bfi, gain_buf ); + FEC_pitch = pitch_buf[3]; + } + else + { + /* calculation of excitation signal */ + FEC_exc_estim( st, st->L_frame, exc, exc2, dct_exc_tmp, pitch_buf, voice_factors, &FEC_pitch, bwe_exc, lsf_new, &tmp_noise ); + + tmp_noise = st->lp_gainc; + + /* SC-VBR */ + st->prev_gain_pit_dec = st->lp_gainp; + } + + /* synthesis for ACELP core switching and SWB BWE */ + syn_12k8( st->L_frame, Aq, exc, temp_buf, st->mem_syn1, 1 ); + + /* save and delay synthesis to be used by SWB BWE */ + if ( st->hBWE_FD != NULL ) + { + save_old_syn( st->L_frame, temp_buf, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac, &st->hBWE_FD->mem_deemph_old_syn ); + } + + /* Apply energy matching when switching to inactive frames */ + inact_switch_ematch( exc2, dct_exc_tmp, st->hGSCDec->lt_ener_per_band, st->coder_type, st->L_frame, st->total_brate, st->bfi, st->last_core, st->last_codec_mode, tdm_low_rate_mode, st->element_mode ); + + /* update past excitation signals for LD music post-filter */ + if ( st->hMusicPF != NULL ) + { + mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); + mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); + + /* Update music post processing values */ + /* Filter energies update */ + for ( i = 0; i < DCT_L_POST; i++ ) + { + st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; + } + /* Update circular buffer, keep last energy difference unchanged */ + for ( i = 1; i < MAX_LT; i++ ) + { + st->hMusicPF->LDm_lt_diff_etot[i - 1] = st->hMusicPF->LDm_lt_diff_etot[i]; + } + } + + /* synthesis at 12k8 Hz sampling rate */ + if ( ( st->total_brate == ACELP_7k20 ) || ( st->total_brate == ACELP_8k00 ) ) + { + mvr2r( st->mem_syn2, mem_tmp, M ); + } + syn_12k8( st->L_frame, Aq, exc2, syn, st->mem_syn2, 1 ); + + /* update buffer for classifier */ + if ( st->hWIDec != NULL ) + { + mvr2r( exc2 + st->L_frame - L_EXC_MEM, st->hWIDec->old_exc2, L_EXC_MEM ); + mvr2r( syn + st->L_frame - L_EXC_MEM, st->hWIDec->old_syn2, L_EXC_MEM ); + } + mvr2r( syn + st->L_frame - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + + /*------------------------------------------------------------* + * FEC - Smooth the speech energy evolution when recovering after a BAD frame + * (smoothing is performed in the excitation domain and signal is resynthesized after) + *------------------------------------------------------------*/ + + if ( ( st->total_brate == ACELP_7k20 ) || ( st->total_brate == ACELP_8k00 ) ) + { + FEC_scale_syn( st->L_frame, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, st->coder_type, LSF_Q_prediction, &st->scaling_flag, &st->lp_ener_FEC_av, &st->lp_ener_FEC_max, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP, mem_tmp, st->mem_syn2, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), 0 ); + } + + /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ + fer_energy( st->L_frame, st->last_good, syn, FEC_pitch, &st->enr_old, st->L_frame ); + + if ( st->nelp_mode_dec != 1 ) + { + /* modify the excitation signal of stationary unvoiced frames */ + stat_noise_uv_mod( st->coder_type, 0, st->lsp_old, lsp_new, lsp_new, Aq, exc2, 1, &st->ge_sm, &st->uv_count, &st->act_count, st->lspold_s, &st->noimix_seed, &st->min_alpha, &st->exc_pe, st->core_brate, st->bwidth ); + } + } + + if ( st->hBWE_TD != NULL ) + { + if ( st->L_frame == L_FRAME ) + { + mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + else + { + mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + } + + /*--------------------------------------------------------* + * Apply NB postfilter in case of 8kHz output + *--------------------------------------------------------*/ + + if ( st->last_bwidth == NB && st->hPFstat != NULL ) + { + if ( st->bwidth == NB ) + { + st->hPFstat->on = 1; + nb_post_filt( st->L_frame, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, st->coder_type, st->BER_detect, 0 ); + } + else + { + st->hPFstat->on = 0; + nb_post_filt( st->L_frame, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, AUDIO, st->BER_detect, 0 ); + } + } + else + { + st->psf_lp_noise = st->lp_noise; + } + + /*------------------------------------------------------------------* + * Perform fixed deemphasis through 1/(1 - g*z^-1) + *-----------------------------------------------------------------*/ + + /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ + mvr2r( syn + st->L_frame - L_SYN_MEM, st->mem_syn_r, L_SYN_MEM ); + deemph( syn, st->preemph_fac, st->L_frame, &( st->mem_deemph ) ); + + AGC_dec( syn, st->agc_mem2, st->L_frame ); + + if ( st->hTcxDec != NULL ) + { + mvr2r( syn + st->L_frame / 2, st->hTcxDec->old_syn_Overl, st->L_frame / 2 ); + } + mvr2r( syn + st->L_frame - M - 1, st->syn, M + 1 ); + + /*------------------------------------------------------------------* + * Formant post-filter + *-----------------------------------------------------------------*/ + + if ( st->hPFstat != NULL && st->last_bwidth >= WB && ( st->core_brate > ACELP_24k40 || st->element_mode > EVS_MONO ) && st->core_brate <= ACELP_32k ) /* VE2TV: TBV for TD stereo */ + { + mvr2r( syn, temp_buf + L_SYN_MEM, L_FRAME16k ); + + st->hPFstat->on = 1; + formant_post_filt( st->hPFstat, temp_buf + L_SYN_MEM, Aq, syn, st->L_frame, L_SUBFR, st->lp_noise, st->total_brate, 0 ); + } + else if ( st->hPFstat != NULL && st->last_bwidth >= WB ) + { + if ( st->hPFstat->on ) + { + mvr2r( st->hPFstat->mem_pf_in + L_SYN_MEM - M, temp_buf, M ); + mvr2r( syn, temp_buf + M, L_SUBFR ); + residu( Aq, M, temp_buf + M, temp_buf + M + L_SUBFR, L_SUBFR ); + syn_filt( Aq, M, temp_buf + M + L_SUBFR, temp_buf, L_SUBFR, st->hPFstat->mem_stp + L_SYN_MEM - M, 0 ); + scale_st( syn, temp_buf, &st->hPFstat->gain_prec, L_SUBFR, -1 ); + mvr2r( temp_buf, syn, L_SUBFR / 2 ); + blend_subfr2( temp_buf + L_SUBFR / 2, syn + L_SUBFR / 2, syn + L_SUBFR / 2 ); + } + st->hPFstat->on = 0; + } + + /*----------------------------------------------------------------* + * Comfort noise addition + *----------------------------------------------------------------*/ + + if ( ( st->hFdCngDec != NULL || st->idchan == 1 ) && st->element_mode != IVAS_CPE_MDCT ) + { + if ( st->element_mode == IVAS_CPE_TD || st->flag_cna || ( st->cng_type == FD_CNG && st->total_brate <= ACELP_32k ) || ( st->cng_type == LP_CNG && st->core_brate <= SID_2k40 ) ) + { + /*VAD only for non inactive frame*/ + st->VAD = st->VAD && ( st->coder_type != INACTIVE ); + + if ( st->idchan == 0 && ( st->flag_cna || ( st->cng_type == FD_CNG && st->total_brate <= ACELP_32k ) || ( st->cng_type == LP_CNG && st->core_brate <= SID_2k40 ) ) ) + { + /*Noisy speech detector*/ + noisy_speech_detection( st->hFdCngDec, st->VAD, syn ); + + st->hFdCngDec->hFdCngCom->likelihood_noisy_speech = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; + } + + if ( st->idchan == 0 ) + { + st->lp_noise = st->hFdCngDec->lp_noise; + } + + if ( st->element_mode != IVAS_CPE_TD ) + { + /*Noise estimate*/ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( syn, NULL, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); +#else + ApplyFdCng( syn, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); +#endif + } + + if ( !st->cna_dirac_flag ) + { + /* CNA: Generate additional comfort noise to mask potential coding artefacts */ + if ( st->flag_cna && !( st->coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->GSC_noisy_speech ) ) ) + { + if ( st->element_mode == IVAS_CPE_TD && nchan_out == 2 ) + { + if ( hStereoCng->flag_cna_fade ) + { + generate_stereo_masking_noise( syn, st, hStereoTD, flag_sec_CNA, 1, hStereoCng, nchan_out ); + hStereoCng->flag_cna_fade = 0; + } + else + { + if ( st->element_mode != last_element_mode && st->idchan == 0 ) + { + /* Clear memory for secondary channel CNA */ + set_f( hStereoCng->olapBufferSynth22, 0.0f, st->hFdCngDec->hFdCngCom->frameSize / 2 ); + } + + generate_stereo_masking_noise( syn, st, hStereoTD, flag_sec_CNA, 0, hStereoCng, nchan_out ); + } + } + else if ( st->element_mode != IVAS_CPE_DFT ) + { + if ( st->idchan == 0 ) + { + if ( st->element_mode != last_element_mode ) + { + set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2, 0.0f, st->hFdCngDec->hFdCngCom->fftlen ); + } + generate_masking_noise( syn, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, hStereoCng, nchan_out ); + } + } + } + else if ( st->flag_cna && st->coder_type == AUDIO && ( ( st->last_core == ACELP_CORE && !( st->last_coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->Last_GSC_noisy_speech_flag ) ) ) || st->last_core == TCX_20_CORE ) ) + { + if ( st->element_mode == IVAS_CPE_TD && nchan_out == 2 ) + { + generate_stereo_masking_noise( syn, st, hStereoTD, flag_sec_CNA, 1, hStereoCng, nchan_out ); + hStereoCng->flag_cna_fade = 1; + } + else + { + v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2 + 5 * st->hFdCngDec->hFdCngCom->frameSize / 4, (float) ( st->hFdCngDec->hFdCngCom->fftlen / 2 ), temp_buf, st->hFdCngDec->hFdCngCom->frameSize / 2 ); + v_add( temp_buf, syn, syn, st->hFdCngDec->hFdCngCom->frameSize / 2 ); + } + } + else + { + if ( hStereoCng != NULL ) + { + hStereoCng->flag_cna_fade = 1; + hStereoCng->enableSecCNA = 0; + } + } + + if ( st->element_mode == IVAS_CPE_TD ) + { + /*Noise estimate*/ + if ( st->idchan == 0 && ( nchan_out == 2 || ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) ) ) + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( syn, NULL, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); +#else + ApplyFdCng( syn, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); +#endif + } + } + } + } + + if ( !st->cna_dirac_flag ) + { + if ( st->flag_cna == 0 && st->L_frame == L_FRAME16k && st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && !( st->last_coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->Last_GSC_noisy_speech_flag ) ) ) || st->last_core == AMR_WB_CORE ) ) + { + v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2 + 5 * st->L_frame / 4, 256.f, temp_buf, st->L_frame / 2 ); + v_add( temp_buf, syn, syn, st->L_frame / 2 ); + } + + if ( st->flag_cna == 0 || ( st->coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->GSC_noisy_speech ) ) ) + { + if ( st->idchan == 0 ) + { + set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2, 0.f, st->hFdCngDec->hFdCngCom->fftlen ); + } + if ( hStereoCng != NULL && st->idchan == 0 ) + { + set_f( hStereoCng->olapBufferSynth22, 0.f, st->hFdCngDec->hFdCngCom->fftlen ); + } + } + } + } + +#ifdef DEBUG_MODE_ACELP + dbgwrite( syn, sizeof( float ), st->L_frame, 1, fname( debug_dir, "syn.intFs", st->idchan, st->id_element, DEC ) ); +#endif + + /*----------------------------------------------------------------* + * Resample to the output sampling rate (8/16/32/48 kHz) + * Bass post-filter + *----------------------------------------------------------------*/ + + /* check if the CLDFB works on the right sample rate */ + if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) + { + resampleCldfb( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); + resampleCldfb( st->cldfbBPF, st->L_frame * FRAMES_PER_SEC ); + + if ( st->ini_frame > 0 ) + { + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; + } + } + + /* analyze pitch coherence for bass post-filter */ + bpf_pitch_coherence( st, pitch_buf ); + + if ( !( st->element_mode == IVAS_CPE_MDCT && st->bpf_off ) ) + { + if ( st->L_frame != st->last_L_frame && st->last_codec_mode != MODE2 ) + { + if ( st->L_frame == L_FRAME ) + { + retro_interp5_4( st->hBPF->pst_old_syn ); + } + else if ( st->L_frame == L_FRAME16k ) + { + retro_interp4_5( syn, st->hBPF->pst_old_syn ); + } + } + + /* bass post-filter */ + bass_psfilter( st->hBPF, st->Opt_AMR_WB, syn, st->L_frame, pitch_buf, st->bpf_off, st->stab_fac, &st->stab_fac_smooth, st->coder_type, bpf_error_signal ); + } + + if ( st->element_mode != IVAS_CPE_DFT || use_cldfb_for_dft ) + { + float realBufferSave[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float imagBufferSave[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float *pRealSave[CLDFB_NO_COL_MAX], *pImagSave[CLDFB_NO_COL_MAX]; + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + pRealSave[i] = realBufferSave[i]; + pImagSave[i] = imagBufferSave[i]; + } + if ( st->p_bpf_noise_buf ) + { + mvr2r( bpf_error_signal, st->p_bpf_noise_buf, st->L_frame ); + } + + /* analysis of the synthesis at internal sampling rate */ + cldfbAnalysis( syn, realBuffer, imagBuffer, -1, st->cldfbAna ); + + /* analysis and add the BPF error signal */ + addBassPostFilter( bpf_error_signal, st->bpf_off ? 0 : -1, realBuffer, imagBuffer, st->cldfbBPF ); + + /* set output mask for upsampling */ + if ( st->bwidth == NB ) + { + /* set NB mask for upsampling */ + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - 10; + } + else if ( st->cldfbSyn->bandsToZero != st->cldfbSyn->no_channels - st->cldfbAna->no_channels ) + { + /* in case of BW switching, re-init to default */ + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; + } + + if ( !st->cng_dirac_flag || st->element_mode == IVAS_CPE_MDCT ) + { + /*WB/SWB-FD_CNG*/ + if ( ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && ( st->cng_type == FD_CNG ) && ( st->hFdCngDec->hFdCngCom->numCoreBands < st->cldfbSyn->no_channels ) ) + { + generate_comfort_noise_dec_hf( realBuffer, imagBuffer, st->hFdCngDec->hFdCngCom ); + + if ( st->hFdCngDec->hFdCngCom->regularStopBand < st->cldfbSyn->no_channels ) + { + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->hFdCngDec->hFdCngCom->regularStopBand; + } + else + { + st->cldfbSyn->bandsToZero = 0; + } + } + } + + if ( save_hb_synth != NULL ) + { + /* save and then zero-out lowband */ + for ( int16_t j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ ) + { + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + realBufferSave[i][j] = realBuffer[i][j]; + imagBufferSave[i][j] = imagBuffer[i][j]; + if ( j < st->hFdCngDec->hFdCngCom->numCoreBands && i < st->hFdCngDec->hFdCngCom->numSlots ) + { + realBuffer[i][j] = 0.0f; + imagBuffer[i][j] = 0.0f; + } + } + } + + cldfbSynthesis( realBuffer, imagBuffer, save_hb_synth, -1, st->cldfbSynHB ); + + /* restore lowband */ + for ( int16_t j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ ) + { + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + realBuffer[i][j] = realBufferSave[i][j]; + imagBuffer[i][j] = imagBufferSave[i][j]; + } + } + + cldfbSynthesis( pRealSave, pImagSave, synth, -1, st->cldfbSyn ); + } + else + { + /* synthesis of the combined signal */ + cldfbSynthesis( realBuffer, imagBuffer, synth, -1, st->cldfbSyn ); + } + + /* save synthesis - needed in case of core switching */ + mvr2r( synth, st->previoussynth, output_frame ); + +#ifdef DEBUG_MODE_ACELP + dbgwrite( synth, sizeof( float ), output_frame, 1, fname( debug_dir, "output.Fs", st->idchan, st->id_element, DEC ) ); +#endif + } + else + { + int16_t nSamples = NS2SA( st->L_frame * FRAMES_PER_SEC, FRAME_SIZE_NS /*DELAY_CLDFB_NS*/ ); /* IVAS-64: optimization is likely possible here (don't resample the whole frame) */ + + /* analysis of the synthesis at internal sampling rate - needed for DFT stereo -> TD stereo switching */ + cldfbAnalysis( syn + st->L_frame - nSamples, realBuffer, imagBuffer, nSamples, st->cldfbAna ); + + /* analysis and add the BPF error signal - needed for DFT stereo -> TD stereo switching */ + addBassPostFilter( bpf_error_signal + st->L_frame - nSamples, st->bpf_off ? 0 : nSamples, realBuffer, imagBuffer, st->cldfbBPF ); + + /* synthesis of the combined signal - needed for DFT stereo -> TD stereo switching */ + cldfbSynthesis( realBuffer, imagBuffer, synth /*dummy*/, NS2SA( st->output_Fs, FRAME_SIZE_NS /*DELAY_CLDFB_NS*/ ), st->cldfbSyn ); + + if ( st->p_bpf_noise_buf ) + { + mvr2r( bpf_error_signal, st->p_bpf_noise_buf, st->L_frame ); + } + +#ifdef DEBUG_MODE_ACELP + dbgwrite( synth, sizeof( float ), output_frame, 1, fname( debug_dir, "output.Fs", st->idchan, st->id_element, DEC ) ); +#endif + set_f( synth, 0.0f, output_frame ); + } + + /* Copy output signal */ + if ( st->element_mode > EVS_MONO ) + { + mvr2r( syn, output, st->L_frame ); + } + + /*-----------------------------------------------------------------* + * Bandwidth extension 6kHz-7kHz + *-----------------------------------------------------------------*/ + + if ( st->hBWE_zero != NULL ) + { + if ( ( st->L_frame == L_FRAME && st->bwidth != NB && output_frame >= L_FRAME16k && + ( st->extl == -1 || st->extl == SWB_CNG || ( st->extl == WB_BWE && st->extl_brate == 0 && st->coder_type != AUDIO ) ) ) ) + { + hf_synth( st->hBWE_zero, st->core_brate, output_frame, Aq, exc2, syn, synth ); + } + else + { + hf_synth_reset( st->hBWE_zero ); + } + } + + /*-----------------------------------------------------------------* + * Populate parameters for SWB TBE + *-----------------------------------------------------------------*/ + + if ( st->hBWE_TD != NULL ) + { + if ( ( !st->bfi && st->prev_bfi ) || ( st->last_vbr_hw_BWE_disable_dec == 1 && st->vbr_hw_BWE_disable_dec == 0 ) || ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->last_extl != SWB_TBE && st->last_extl != WB_TBE && st->last_extl != FB_TBE ) || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && !st->tdm_LRTD_flag ) ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); + } + + if ( !st->ppp_mode_dec && ( st->idchan == 0 || st->element_mode != IVAS_CPE_TD || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) ) + { + non_linearity( bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); + } + + if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + } + } + + /*----------------------------------------------------------------------* + * Updates + *----------------------------------------------------------------------*/ + + updt_dec( st, old_exc, pitch_buf, Es_pred, Aq, lsf_new, lsp_new, voice_factors, old_bwe_exc, gain_buf ); + + if ( st->core_brate > SID_2k40 && st->hTdCngDec != NULL && st->hFdCngDec != NULL ) + { + /* update CNG parameters in active frames */ + cng_params_upd( lsp_new, exc, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); + + /* Set 16k LSP flag for CNG buffer */ + st->hTdCngDec->ho_16k_lsp[st->hTdCngDec->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); + } + + wmops_sub_end(); + return error; +} diff --git a/lib_dec/acelp_core_switch_dec.c b/lib_dec/acelp_core_switch_dec.c new file mode 100644 index 0000000000..9daac37b74 --- /dev/null +++ b/lib_dec/acelp_core_switch_dec.c @@ -0,0 +1,640 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void decod_gen_voic_core_switch( Decoder_State *st, const int16_t L_frame, const int16_t sharpFlag, const float *Aq, float *exc, const int32_t core_brate ); + + +/*-------------------------------------------------------------------* + * acelp_core_switch_dec() + * + * ACELP core decoder in the first ACELP->HQ switching frame + *-------------------------------------------------------------------*/ + +ivas_error acelp_core_switch_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *synth_subfr_out, /* o : synthesized ACELP subframe */ + float *tmp_synth_bwe, /* o : synthesized ACELP subframe BWE */ + const int16_t output_frame, /* i : input frame legth */ + const int16_t core_switching_flag, /* i : core switching flag */ + float *mem_synth, /* o : synthesis to overlap */ + const int16_t nchan_out /* i : number of output channels */ +) +{ + int16_t i, delta, L_frame_for_cs, decode_bwe; + int16_t d1m, ind1, fdelay, gapsize; + int32_t cbrate; + float synth_intFreq[2 * L_SUBFR]; + float old_exc[L_EXC_DEC], *exc; + float tmp_mem2[2 * L_FILT48k], gain; + float hb_synth_tmp[NS2SA( 48000, 10000000L )]; + const float *hp_filter; + float Aq[2 * ( M + 1 )]; + float bpf_error_signal[2 * L_SUBFR]; + float *realBuffer[CLDFB_NO_COL_MAX_SWITCH], *imagBuffer[CLDFB_NO_COL_MAX_SWITCH]; + float realBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX]; + ivas_error error; + + error = IVAS_ERR_OK; + + /*----------------------------------------------------------------* + * Initializations + *----------------------------------------------------------------*/ + + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < CLDFB_NO_COL_MAX_SWITCH; i++ ) + { + set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + realBuffer[i] = realBufferTmp[i]; + imagBuffer[i] = imagBufferTmp[i]; + } + + d1m = 0; + gain = 0; + + mvr2r( st->old_Aq_12_8, Aq, M + 1 ); + mvr2r( st->old_Aq_12_8, Aq + ( M + 1 ), M + 1 ); + + set_f( mem_synth, 0, NS2SA( 16000, DELAY_CLDFB_NS ) + 2 ); + + /* set multiplication factor according to the sampling rate */ + delta = 1; + if ( output_frame == L_FRAME32k ) + { + delta = 2; + } + else if ( output_frame == L_FRAME48k ) + { + delta = 3; + } + + /*----------------------------------------------------------------* + * set switching frame bitrate + *----------------------------------------------------------------*/ + + if ( core_switching_flag && st->last_L_frame == st->last_L_frame_ori && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + exc = old_exc + L_EXC_MEM_DEC; + mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); + + if ( st->last_L_frame == L_FRAME ) + { + if ( st->core_brate > ACELP_24k40 ) + { + cbrate = ACELP_24k40; + } + else + { + cbrate = st->core_brate; + } + L_frame_for_cs = L_FRAME; + } + else + { + if ( st->core_brate <= ACELP_8k00 ) + { + cbrate = ACELP_8k00; + } + else if ( st->core_brate <= ACELP_14k80 ) + { + cbrate = ACELP_14k80; + } + else + { + cbrate = min( st->core_brate, ACELP_22k60 ); + } + + L_frame_for_cs = L_FRAME16k; + } + + /*----------------------------------------------------------------* + * Excitation decoding + *----------------------------------------------------------------*/ + + config_acelp1( DEC, st->total_brate, cbrate, st->core, -1, -1, st->last_L_frame, -1, &( st->acelp_cfg ), st->next_bit_pos, GENERIC, -1, -1, &decode_bwe /* dummy */, &i, st->element_mode, &i /*dummy*/, 0, 0, st->idchan, 0, 0, 0 /*st->GSC_IVAS_mode*/ + ); + + decod_gen_voic_core_switch( st, L_frame_for_cs, 0, Aq, exc, cbrate ); + + /*----------------------------------------------------------------* + * synthesis, deemphasis, postprocessing and resampling + *----------------------------------------------------------------*/ + + /* synthesis and deemphasis */ + syn_12k8( 2 * L_SUBFR, Aq, exc, synth_intFreq, st->mem_syn2, 1 ); + + if ( st->hPFstat->on && st->last_bwidth == NB ) + { + float tmp_noise, pitch_buf_tmp[2]; + tmp_noise = 0; + + for ( i = 0; i < 2; i++ ) + { + pitch_buf_tmp[i] = L_SUBFR; + } + + nb_post_filt( 2 * L_SUBFR, L_SUBFR, st->hPFstat, &tmp_noise, 0, synth_intFreq, Aq, pitch_buf_tmp, AUDIO, st->BER_detect, 0 ); + } + + if ( L_frame_for_cs == L_FRAME ) + { + deemph( synth_intFreq, PREEMPH_FAC, 2 * L_SUBFR, &st->mem_deemph ); + } + else + { + deemph( synth_intFreq, PREEMPH_FAC_16k, 2 * L_SUBFR, &st->mem_deemph ); + } + + AGC_dec( synth_intFreq, st->agc_mem2, 2 * L_SUBFR ); + + if ( st->hPFstat->on && st->last_bwidth != NB ) + { + mvr2r( st->hPFstat->mem_pf_in + L_SYN_MEM - M, bpf_error_signal, M ); /*bpf_error_signal used as temporary buffer*/ + mvr2r( synth_intFreq, bpf_error_signal + M, L_SUBFR ); + residu( Aq, M, bpf_error_signal + M, old_exc, L_SUBFR ); + syn_filt( Aq, M, old_exc, bpf_error_signal, L_SUBFR, st->hPFstat->mem_stp + L_SYN_MEM - M, 0 ); + scale_st( synth_intFreq, bpf_error_signal, &st->hPFstat->gain_prec, L_SUBFR, -1 ); + mvr2r( bpf_error_signal, synth_intFreq, L_SUBFR / 2 ); + blend_subfr2( bpf_error_signal + L_SUBFR / 2, synth_intFreq + L_SUBFR / 2, synth_intFreq + L_SUBFR / 2 ); + } + st->hPFstat->on = 0; + + if ( st->flag_cna ) + { + generate_masking_noise( synth_intFreq, st->hFdCngDec->hFdCngCom, 2 * L_SUBFR, 0, 0, 0, st->element_mode, NULL, nchan_out ); + } + + /*----------------------------------------------------------------* + * Resample to the output sampling rate (8/16/32/48 kHz) + * Bass post-filter + *----------------------------------------------------------------*/ + + /* bass post-filter */ + bass_psfilter( st->hBPF, st->Opt_AMR_WB, synth_intFreq, 2 * L_SUBFR, NULL, st->bpf_off, st->stab_fac, &st->stab_fac_smooth, GENERIC, bpf_error_signal ); + + /* CLDFB analysis of the synthesis at internal sampling rate */ + if ( ( error = cldfb_save_memory( st->cldfbAna ) ) != IVAS_ERR_OK ) + { + return error; + } + + cldfbAnalysis( synth_intFreq, realBuffer, imagBuffer, NS2SA( L_frame_for_cs * FRAMES_PER_SEC, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ), st->cldfbAna ); + cldfb_restore_memory( st->cldfbAna ); + + /* CLDFB analysis and add the BPF error signal */ + if ( ( error = cldfb_save_memory( st->cldfbBPF ) ) != IVAS_ERR_OK ) + { + return error; + } + + addBassPostFilter( bpf_error_signal, st->bpf_off ? 0 : NS2SA( L_frame_for_cs * FRAMES_PER_SEC, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ), realBuffer, imagBuffer, st->cldfbBPF ); + cldfb_restore_memory( st->cldfbBPF ); + + /* CLDFB synthesis of the combined signal */ + if ( ( error = cldfb_save_memory( st->cldfbSyn ) ) != IVAS_ERR_OK ) + { + return error; + } + + cldfbSynthesis( realBuffer, imagBuffer, synth_subfr_out, NS2SA( st->output_Fs, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ), st->cldfbSyn ); + cldfb_restore_memory( st->cldfbSyn ); + + mvr2r( synth_intFreq + NS2SA( L_frame_for_cs * FRAMES_PER_SEC, SWITCH_GAP_LENGTH_NS - DELAY_CLDFB_NS ) - 2, mem_synth, NS2SA( L_frame_for_cs * FRAMES_PER_SEC, DELAY_CLDFB_NS ) + 2 ); /* need for switching (-2 is due to 0 delay filtering) */ + + /*----------------------------------------------------------------* + * BWE decoding + *----------------------------------------------------------------*/ + + decode_bwe = 0; + if ( !( ( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) + { + /* Decoding of BWE */ + d1m = get_next_indice( st, AUDIODELAYBITS ); + ind1 = get_next_indice( st, NOOFGAINBITS1 ); + gain = usdequant( ind1, MINVALUEOFFIRSTGAIN, DELTAOFFIRSTGAIN ); + decode_bwe = 1; + } + + + if ( decode_bwe && !( ( output_frame == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || output_frame == L_FRAME8k ) ) + { + set_f( tmp_mem2, 0, 2 * L_FILT48k ); + + hp_filter = hp16000_48000; + fdelay = 48; + if ( st->output_Fs == 16000 ) + { + if ( st->last_L_frame == L_FRAME ) + { + hp_filter = hp12800_16000; + fdelay = 20; + } + } + else if ( st->output_Fs == 32000 ) + { + + if ( st->last_L_frame == L_FRAME ) + { + hp_filter = hp12800_32000; + fdelay = 40; + } + else + { + hp_filter = hp16000_32000; + fdelay = 32; + } + } + else if ( st->last_L_frame == L_FRAME ) + { + hp_filter = hp12800_48000; + fdelay = 60; + } + + /* safety check in case of bit errors */ + i = MAX_D1M_16k; + if ( st->last_L_frame == L_FRAME ) + { + i = MAX_D1M_12k8; + } + + if ( d1m >= i ) + { + d1m = i - 1; + gain = 0; /* force muting */ + st->BER_detect = 1; + } + + i = NS2SA( st->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ); + mvr2r( st->old_synth_sw, hb_synth_tmp, i ); + set_f( hb_synth_tmp + i, 0, NS2SA( st->output_Fs, 10000000L ) - i ); + fir( hb_synth_tmp, hp_filter, hb_synth_tmp, tmp_mem2, output_frame >> 1, fdelay, 0 ); /* put the 40 past samples into the memory */ + set_f( tmp_synth_bwe, 0, SWITCH_MAX_GAP ); + + gapsize = delta * ( NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) ); + for ( i = 0; i < gapsize; i++ ) + { + tmp_synth_bwe[i] = hb_synth_tmp[i + d1m * delta + fdelay] * gain; + } + } + else + { + set_f( tmp_synth_bwe, 0, SWITCH_MAX_GAP ); + } + } + + return error; +} + + +/*-------------------------------------------------------------------* + * acelp_core_switch_dec_bfi() + * + * ACELP core decoder in the first ACELP->HQ switching frame in case of BAD frame + *-------------------------------------------------------------------*/ + +ivas_error acelp_core_switch_dec_bfi( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + int16_t i; + float old_exc[L_EXC_DEC], *exc; /* excitation signal buffer */ + float syn[L_FRAME16k]; /* synthesis signal buffer */ + float lsf_new[M]; /* LSFs at the end of the frame */ + float lsp_new[M]; /* LSPs at the end of the frame */ + float Aq[NB_SUBFR16k * ( M + 1 )]; /* A(q) quantized for the 4 subframes */ + float old_exc2[L_FRAME16k + L_EXC_MEM], *exc2; /* total excitation buffer */ + float tmp_noise; /* Long term temporary noise energy */ + float FEC_pitch; /* FEC pitch */ + float old_bwe_exc[( ( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 )]; /* excitation buffer */ + float *bwe_exc; /* Excitation for SWB TBE */ + float tmp_float[NBPSF_PIT_MAX]; + float tmp_float2[M]; + float tmp_float3; + float tmp_float4[L_TRACK_HIST]; + int16_t tmp_float5[L_TRACK_HIST]; + int16_t tmp_float6[L_TRACK_HIST]; + float tmp_float7; + + float voice_factors[NB_SUBFR16k]; + float pitch_buf[NB_SUBFR16k]; + float *realBuffer[CLDFB_NO_COL_MAX_SWITCH_BFI], *imagBuffer[CLDFB_NO_COL_MAX_SWITCH_BFI]; + float realBufferTmp[CLDFB_NO_COL_MAX_SWITCH_BFI][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX_SWITCH_BFI][CLDFB_NO_CHANNELS_MAX]; + ivas_error error; + + error = IVAS_ERR_OK; + + /*----------------------------------------------------------------* + * Initialization + *----------------------------------------------------------------*/ + + /* initialize CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < CLDFB_NO_COL_MAX_SWITCH_BFI; i++ ) + { + set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + realBuffer[i] = realBufferTmp[i]; + imagBuffer[i] = imagBufferTmp[i]; + } + + st->bpf_off = 1; + st->clas_dec = st->last_good; + tmp_noise = 0.0f; + + mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); + exc = old_exc + L_EXC_MEM_DEC; + + if ( st->hWIDec != NULL ) + { + mvr2r( st->hWIDec->old_exc2, old_exc2, L_EXC_MEM ); + } + else + { + set_f( old_exc2, 0, L_EXC_MEM ); + } + exc2 = old_exc2 + L_EXC_MEM; + + if ( st->hBWE_TD != NULL ) + { + mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); + bwe_exc = old_bwe_exc + PIT16k_MAX * 2; + } + else + { + bwe_exc = NULL; + } + + st->GSC_noisy_speech = 0; + st->relax_prev_lsf_interp = 0; + + /* SC-VBR */ + if ( st->last_nelp_mode_dec == 1 ) + { + st->nelp_mode_dec = 1; + } + + mvr2r( st->mem_AR, tmp_float, M ); + mvr2r( st->mem_MA, tmp_float2, M ); + + /* LSF estimation and A(z) calculation */ + lsf_dec_bfi( MODE1, lsf_new, st->lsf_old, st->lsf_adaptive_mean, NULL, st->mem_MA, st->mem_AR, st->stab_fac, st->last_coder_type, st->L_frame, st->last_good, st->nbLostCmpt, 0, NULL, NULL, NULL, st->hGSCDec->Last_GSC_pit_band_idx, st->Opt_AMR_WB, st->bwidth ); + + FEC_lsf2lsp_interp( st, st->L_frame, Aq, lsf_new, lsp_new ); + + mvr2r( tmp_float, st->mem_AR, M ); + mvr2r( tmp_float2, st->mem_MA, M ); + + /*----------------------------------------------------------------* + * Excitation decoding + *----------------------------------------------------------------*/ + + if ( st->nelp_mode_dec == 1 ) + { + /* SC-VBR */ + decod_nelp( st, &tmp_noise, pitch_buf, exc, exc2, voice_factors, bwe_exc, st->bfi, tmp_float2 ); + FEC_pitch = pitch_buf[3]; + } + else + { + tmp_float[0] = st->bfi_pitch; + tmp_float[1] = (float) st->bfi_pitch_frame; + tmp_float[2] = st->lp_gainp; + tmp_float[3] = st->lp_gainc; + tmp_float[4] = st->upd_cnt; + tmp_float[5] = st->seed; + + /* calculation of excitation signal */ + FEC_exc_estim( st, st->L_frame, exc, exc2, syn /* dummy buffer */, pitch_buf, voice_factors, &FEC_pitch, bwe_exc, lsf_new, &tmp_noise ); + + st->seed = (int16_t) tmp_float[5]; + st->bfi_pitch = tmp_float[0]; + st->bfi_pitch_frame = (int16_t) tmp_float[1]; + st->lp_gainp = tmp_float[2]; + st->lp_gainc = tmp_float[3]; + st->upd_cnt = (int16_t) tmp_float[4]; + } + + /*------------------------------------------------------------------* + * Synthesis + *-----------------------------------------------------------------*/ + + mvr2r( st->mem_syn2, tmp_float, M ); + syn_12k8( st->L_frame, Aq, exc2, syn, tmp_float, 1 ); + + tmp_float[0] = st->enr_old; + fer_energy( st->L_frame, st->last_good, syn, FEC_pitch, tmp_float, st->L_frame ); + + /*------------------------------------------------------------------* + * Perform fixed deemphasis through 1/(1 - g*z^-1) + *-----------------------------------------------------------------*/ + + mvr2r( &( st->mem_deemph ), tmp_float, 1 ); + if ( st->L_frame == L_FRAME ) + { + deemph( syn, PREEMPH_FAC, L_FRAME, tmp_float ); + } + else + { + deemph( syn, PREEMPH_FAC_16k, L_FRAME16k, tmp_float ); + } + + /*----------------------------------------------------------------* + * Bass post-filter + *----------------------------------------------------------------*/ + + st->bpf_off = 1; + mvr2r( st->hBPF->pst_old_syn, tmp_float, NBPSF_PIT_MAX ); + tmp_float3 = st->stab_fac_smooth; + mvr2r( st->hBPF->mem_mean_pit, tmp_float4, L_TRACK_HIST ); + mvs2s( st->hBPF->Track_on_hist, tmp_float5, L_TRACK_HIST ); + mvs2s( st->hBPF->vibrato_hist, tmp_float6, L_TRACK_HIST ); + tmp_float7 = st->hBPF->psf_att; + + /* apply bass post-filter */ + bass_psfilter( st->hBPF, st->Opt_AMR_WB, syn, st->L_frame, pitch_buf, st->bpf_off, st->stab_fac, &tmp_float3, st->coder_type, old_exc /* tmp buffer */ ); + + mvr2r( tmp_float, st->hBPF->pst_old_syn, NBPSF_PIT_MAX ); + mvr2r( tmp_float4, st->hBPF->mem_mean_pit, L_TRACK_HIST ); + mvs2s( tmp_float5, st->hBPF->Track_on_hist, L_TRACK_HIST ); + mvs2s( tmp_float6, st->hBPF->vibrato_hist, L_TRACK_HIST ); + st->hBPF->psf_att = tmp_float7; + + /*----------------------------------------------------------------* + * Resampling to the output sampling frequency + *----------------------------------------------------------------*/ + + /* CLDFB analysis of the synthesis at internal sampling rate */ + if ( ( error = cldfb_save_memory( st->cldfbAna ) ) != IVAS_ERR_OK ) + { + return error; + } + + cldfbAnalysis( syn, realBuffer, imagBuffer, st->L_frame / 2, st->cldfbAna ); + cldfb_restore_memory( st->cldfbAna ); + + /* CLDFB synthesis of the combined signal */ + if ( ( error = cldfb_save_memory( st->cldfbSyn ) ) != IVAS_ERR_OK ) + { + return error; + } + + cldfbSynthesis( realBuffer, imagBuffer, st->hHQ_core->fer_samples, (int16_t) ( st->output_Fs * 0.01f ), st->cldfbSyn ); + cldfb_restore_memory( st->cldfbSyn ); + + return error; +} + + +/*-------------------------------------------------------------------* + * decod_gen_voic_core_switch() + * + * Decode excitation signal in teh first ACELP->HQ switching frame + *-------------------------------------------------------------------*/ + +static void decod_gen_voic_core_switch( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t sharpFlag, /* i : flag for formant sharpening */ + const float *Aq, /* i : LP filter coefficient */ + float *exc, /* i/o: adapt. excitation exc */ + const int32_t core_brate /* i : switching frame bitrate */ +) +{ + int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ + float gain_pit; /* pitch gain */ + float gain_code; /* gain/normalized gain of the algebraic excitation */ + float norm_gain_code; /* normalized gain of the algebraic excitation */ + float gain_inov; /* Innovation gain */ + float voice_fac; /* voicing factor */ + float code[L_SUBFR]; /* algebraic codevector */ + float pitch; /* pointer to floating pitch */ + int16_t i; /* tmp variables */ + int16_t pitch_limit_flag; + float tmpF; + + /* initializations */ + if ( L_frame == L_FRAME ) + { + T0_max = PIT_MAX; + T0_min = PIT_MIN; + } + else /* L_frame == L_FRAME16k */ + { + T0_max = PIT16k_MAX; + T0_min = PIT16k_MIN; + } + + /*----------------------------------------------------------------------* + * Decode pitch lag + *----------------------------------------------------------------------*/ + + pitch = pit_decode( st, core_brate, 0, L_frame, 0, GENERIC, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_SUBFR, 0, NULL ); + + /*--------------------------------------------------------------* + * Find the adaptive codebook vector. + *--------------------------------------------------------------*/ + + pred_lt4( &exc[0], &exc[0], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*--------------------------------------------------------------* + * LP filtering of the adaptive excitation + *--------------------------------------------------------------*/ + + lp_filt_exc_dec( st, MODE1, 0, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); + + /*--------------------------------------------------------------* + * Innovation decoding + *--------------------------------------------------------------*/ + + inov_decode( st, core_brate, 0, L_frame, sharpFlag, 0, Aq, st->tilt_code, pitch, code, L_SUBFR ); + + /*--------------------------------------------------------------* + * Gain decoding + * Estimate spectrum tilt and voicing + *--------------------------------------------------------------*/ + + if ( L_frame == L_FRAME ) + { + gain_dec_mless( st, L_frame, TRANSITION, 0, -1, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + else + { + gain_dec_mless( st, L_frame, GENERIC, 0, -1, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + + st->tilt_code = est_tilt( exc, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*----------------------------------------------------------------------* + * Find the total excitation + *----------------------------------------------------------------------*/ + + if ( st->prev_bfi ) + { + gain_code = min( gain_code, 0.5f * gain_code + 0.5f * st->lp_gainc ); + } + + for ( i = 0; i < L_SUBFR; i++ ) + { + tmpF = gain_pit * exc[i]; + exc[i] = tmpF + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * long term prediction on the 2nd sub frame + *-----------------------------------------------------------------*/ + + pred_lt4( &exc[L_SUBFR], &exc[L_SUBFR], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc[i + L_SUBFR] *= gain_pit; + } + + return; +} diff --git a/lib_dec/amr_wb_dec.c b/lib_dec/amr_wb_dec.c new file mode 100644 index 0000000000..c220c8201e --- /dev/null +++ b/lib_dec/amr_wb_dec.c @@ -0,0 +1,863 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * amr_wb_dec() + * + * AMR-WB decoder + *------------------------------------------------------------------*/ + +ivas_error amr_wb_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float mem_hp20_out[L_HP20_MEM], /* i/o: HP filter memory for synthesis */ + float *output /* o : synthesis output */ +) +{ + int16_t i; + int16_t vad_flag; + float ftmp; + float old_exc[L_EXC_DEC], *exc; /* excitation signal buffer */ + float syn_tmp[L_FRAME + 2], *syn; /* synthesis signal buffer */ + float synth_out[L_FRAME48k]; /* synthesis output */ + int16_t output_frame; /* frame length at output sampling freq. */ + float lsf_new[M]; /* LSFs at the end of the frame */ + float lsp_new[M]; /* LSPs at the end of the frame */ + float Aq[NB_SUBFR * ( M + 1 )]; /* A(q) quantized for the 4 subframes */ + float exc2[L_FRAME]; /* total excitation buffer */ + float mem_tmp[M]; /* temporary synthesis filter memory */ + float pitch_buf[NB_SUBFR]; /* floating pitch for each subframe */ + float enr_q; /* E information for FER protection */ + float tmp_noise; /* Long term temporary noise energy */ + float FEC_pitch; /* FEC pitch */ + float dummy_buf[L_FRAME32k]; /* dummy buffer - no usage */ + int16_t allow_cn_step; + int16_t locattack, amr_io_class; + int16_t tmps; + float xsp_tmp[M]; + float tmp_buffer[L_FRAME48k]; + float dct_buffer[DCT_L_POST]; + float frame_e; + float exc_buffer[DCT_L_POST]; + float class_para; + float voice_factors[NB_SUBFR]; + int16_t hf_gain[NB_SUBFR]; + int16_t delay_comp; + int16_t nZeros; + float tmp; + int16_t last_core_ori; + int16_t sid_bw = 0; + float bpf_error_signal[L_FRAME]; + float ng_ener; + float gain_buf[NB_SUBFR16k]; + float q_env[20]; + float exc3[L_FRAME]; + float *realBuffer[CLDFB_NO_COL_MAX], *imagBuffer[CLDFB_NO_COL_MAX]; + float realBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + int16_t flag_cna; + int16_t waveadj_rec = 0; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + ivas_error error; + + error = IVAS_ERR_OK; + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + st->idchan = 0; + + syn_tmp[0] = 0; + syn_tmp[1] = 0; + syn = syn_tmp + 2; + + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + realBuffer[i] = realBufferTmp[i]; + imagBuffer[i] = imagBufferTmp[i]; + } + + set_f( gain_buf, 0, NB_SUBFR16k ); + + st->use_partial_copy = 0; + st->rf_frame_type = RF_NO_DATA; + st->rf_flag = 0; + st->rf_flag_last = 0; + + st->L_frame = L_FRAME; + st->nb_subfr = NB_SUBFR; + st->core = AMR_WB_CORE; + st->core_brate = st->total_brate; + st->extl = -1; + st->bwidth = WB; + st->coder_type = GENERIC; + output_frame = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); /* frame length of the input signal */ + + st->bpf_off = 0; + if ( st->last_core == HQ_CORE ) + { + st->bpf_off = 1; + st->hPFstat->on = 0; + } + st->igf = 0; + + st->sr_core = st->L_frame * FRAMES_PER_SEC; + st->fscale_old = st->fscale; + st->fscale = sr2fscale( st->sr_core ); + + /* Initialization in case that the first frame is the good received AMR-WB (IO) frame */ + if ( st->ini_frame == 0 ) + { + st->last_core = AMR_WB_CORE; + mvr2r( mean_isf_amr_wb, st->lsf_old, M ); + isf2isp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); + } + + /* Updates in case of EVS primary mode -> AMR-WB IO mode switching */ + if ( st->last_core != AMR_WB_CORE ) + { + updt_IO_switch_dec( output_frame, st ); + } + + /* Updates in case of HQ -> AMR-WB IO switching */ + if ( ( error = core_switching_pre_dec( st, output_frame, -1, -1, EVS_MONO, -1 ) ) != IVAS_ERR_OK ) + { + return error; + } + + + last_core_ori = st->last_core; + set_s( hf_gain, 0, NB_SUBFR ); + + enr_q = 0.0f; + tmp_noise = 0.0f; + amr_io_class = UNVOICED_CLAS; + + mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); + exc = old_exc + L_EXC_MEM_DEC; + + /* reset post-filter in case of switching */ + if ( st->hPFstat->on == 0 ) + { + st->hPFstat->reset = 1; + } + + if ( st->bfi ) + { + st->nbLostCmpt++; + } + else + { + st->nbLostCmpt = 0; + } + + /* PLC: [TCX: Fade-out-recovery] + * PLC: overlapping part needs to be attenuated for first good frame */ + if ( !st->bfi && st->prev_bfi && ( st->last_codec_mode == MODE2 ) && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) ) + { + v_multc( st->hHQ_core->old_out, st->hPlcInfo->recovery_gain, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX ); + } + + /*-----------------------------------------------------------------* + * switching from ACELP@16k core to AMR-WB IO mode + *-----------------------------------------------------------------*/ + + st->rate_switching_reset = 0; + + if ( st->last_core != AMR_WB_CORE && st->last_L_frame == L_FRAME16k && st->last_core != HQ_CORE ) + { + /* in case of switching, do not apply BPF */ + st->bpf_off = 1; + if ( st->hPFstat->on != 0 ) + { + int16_t mem_syn_r_size_old, mem_syn_r_size_new; + + mem_syn_r_size_old = (int16_t) ( 1.25 * st->last_L_frame / 20.f ); + mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); + lerp( st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + lerp( st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + } + + /* convert old quantized LSP vector */ + st->rate_switching_reset = lsp_convert_poly( st->lsp_old, L_FRAME, 1 ); + + /* convert old quantized LSF vector */ + lsp2lsf( st->lsp_old, st->lsf_old, M, INT_FS_12k8 ); + + /* FEC - update adaptive LSF mean vector */ + mvr2r( st->lsf_old, st->lsfoldbfi1, M ); + mvr2r( st->lsf_old, st->lsfoldbfi0, M ); + mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); + + /* Reset LPC mem */ + mvr2r( GEWB_Ave, st->mem_AR, M ); + set_zero( st->mem_MA, M ); + + /* update synthesis filter memories */ + synth_mem_updt2( L_FRAME, st->last_L_frame, st->old_exc, st->mem_syn_r, st->mem_syn2, NULL, DEC ); + mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); + mvr2r( st->mem_syn2, st->mem_syn1, M ); + mvr2r( st->mem_syn2, st->mem_syn3, M ); + + /* LSP -> ISP */ + mvr2r( stable_ISP, xsp_tmp, M ); + lsp2isp( st->lsp_old, st->lsp_old, xsp_tmp, M ); + } + + /* update buffer of old subframe pitch values */ + if ( st->last_L_frame != L_FRAME ) + { + if ( st->last_L_frame == L_FRAME32k ) + { + tmp = (float) 12800 / (float) 32000; + } + else if ( st->last_L_frame == 512 ) + { + tmp = (float) 12800 / (float) 25600; + } + else /* st->last_L_frame == L_FRAME16k */ + { + tmp = (float) 12800 / (float) 16000; + } + + for ( i = NB_SUBFR16k - NB_SUBFR; i < NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i - 1] = tmp * st->old_pitch_buf[i]; + } + + for ( i = 2 * NB_SUBFR16k - NB_SUBFR; i < 2 * NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i - 2] = tmp * st->old_pitch_buf[i]; + } + } + + if ( st->bfi_pitch_frame != L_FRAME ) + { + if ( st->bfi_pitch_frame == L_FRAME32k ) + { + tmp = (float) 12800 / (float) 32000; + } + else if ( st->bfi_pitch_frame == 512 ) + { + tmp = (float) 12800 / (float) 25600; + } + else /* st->bfi_pitch_frame == L_FRAME16k */ + { + tmp = (float) 12800 / (float) 16000; + } + + st->bfi_pitch *= tmp; + st->bfi_pitch_frame = L_FRAME; + } + + if ( st->last_bwidth == NB && st->ini_frame != 0 ) + { + st->rate_switching_reset = 1; + } + + /*----------------------------------------------------------------------* + * GOOD frame + *----------------------------------------------------------------------*/ + + if ( !st->bfi ) + { + /*----------------------------------------------------------------* + * Processing of FRAME_NO_DATA frames + * Decoding of SID frames + *----------------------------------------------------------------*/ + + if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_1k75 ) + { + /* decode CNG parameters */ + CNG_dec( st, EVS_MONO, Aq, lsp_new, lsf_new, &allow_cn_step, &sid_bw, q_env ); + + /* comfort noise generation */ + CNG_exc( st->core_brate, L_FRAME, &st->hTdCngDec->Enew, &st->hTdCngDec->cng_seed, exc, exc2, &st->lp_ener, st->last_core_brate, &st->first_CNG, &st->hTdCngDec->cng_ener_seed, dummy_buf, allow_cn_step, &st->hTdCngDec->last_allow_cn_step, st->hTdCngDec->num_ho, q_env, st->hTdCngDec->lp_env, st->hTdCngDec->old_env, st->hTdCngDec->exc_mem, st->hTdCngDec->exc_mem1, &sid_bw, &st->hTdCngDec->cng_ener_seed1, exc3, st->Opt_AMR_WB, EVS_MONO ); + set_f( voice_factors, 1.0f, NB_SUBFR ); + class_para = 0.0f; + + /* update past excitation signals for LD music post-filter */ + mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); + mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); + + /* synthesis at 12k8 Hz sampling rate */ + syn_12k8( L_FRAME, Aq, exc2, syn, st->mem_syn2, 1 ); + syn_12k8( st->L_frame, Aq, exc2, dummy_buf, st->mem_syn3, 1 ); + + /* reset the decoder */ + CNG_reset_dec( st, pitch_buf, dummy_buf + L_FRAME ); + + /* update st->mem_syn1 for ACELP core switching */ + mvr2r( st->mem_syn3, st->mem_syn1, M ); + if ( output_frame != L_FRAME8k ) + { + frame_e = 10.0f * (float) log10( dotp( syn, syn, L_FRAME ) / (float) L_FRAME ); + st->psf_lp_noise = 0.99f * st->psf_lp_noise + 0.01f * frame_e; + } + + /* update old synthesis for classification */ + mvr2r( syn + L_FRAME - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + + /* Update music post processing values */ + /* Filter energies update */ + for ( i = 0; i < DCT_L_POST; i++ ) + { + st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; + } + + vad_flag = 0; + } + + /*----------------------------------------------------------------* + * Decoding of all other frames + *----------------------------------------------------------------*/ + + else + { + /*-----------------------------------------------------------------* + * After CNG period, use the most up-to-date ISPs + *-----------------------------------------------------------------*/ + + if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 ) + { + mvr2r( st->lspCNG, st->lsp_old, M ); + isp2isf( st->lspCNG, st->lsf_old, M, INT_FS_12k8 ); + set_f( old_exc, 0, L_EXC_MEM_DEC ); + } + + /*------------------------------------------------------------* + * Extracts VAD information from the bitstream in AMR-WB IO mode + *------------------------------------------------------------*/ + + vad_flag = get_next_indice( st, 1 ); + + if ( vad_flag == 0 ) + { + st->coder_type = INACTIVE; + } + else + { + st->coder_type = GENERIC; + } + + /*-----------------------------------------------------------------* + * ISF de-quantization and interpolation + *-----------------------------------------------------------------*/ + + isf_dec_amr_wb( st, Aq, lsf_new, lsp_new ); + + /*------------------------------------------------------------* + * Decode excitation + *------------------------------------------------------------*/ + + decod_amr_wb( st, Aq, pitch_buf, exc, exc2, hf_gain, voice_factors, gain_buf ); + + /* synthesis for ACELP core switching and SWB BWE */ + syn_12k8( L_FRAME, Aq, exc, tmp_buffer, st->mem_syn1, 1 ); + + /*------------------------------------------------------------* + * Update long-term energies for FEC + * Update ISP vector for CNG + *------------------------------------------------------------*/ + + if ( st->coder_type == INACTIVE ) + { + if ( st->unv_cnt > 20 ) + { + ftmp = st->lp_gainc * st->lp_gainc; + st->lp_ener = 0.7f * st->lp_ener + 0.3f * ftmp; + for ( i = 0; i < M; i++ ) + { + st->lspCNG[i] = (float) ( 0.9f * st->lspCNG[i] + 0.1f * lsp_new[i] ); + } + } + else + { + st->unv_cnt++; + } + } + else + { + st->unv_cnt = 0; + } + + /*------------------------------------------------------------* + * Save filter memory in case the synthesis is redone after scaling + * Core synthesis at 12k8 Hz + *------------------------------------------------------------*/ + + mvr2r( st->mem_syn2, mem_tmp, M ); + syn_12k8( L_FRAME, Aq, exc2, syn, st->mem_syn2, 1 ); + + /*------------------------------------------------------------* + * FEC - Estimate the classification information + *------------------------------------------------------------*/ + + FEC_clas_estim( syn, pitch_buf, st->L_frame, st->coder_type, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, st->Opt_AMR_WB, &st->decision_hyst, &locattack, &st->hAmrwb_IO->UV_cnt, &st->hAmrwb_IO->LT_UV_cnt, &st->hAmrwb_IO->Last_ener, &amr_io_class, st->hAmrwb_IO->lt_diff_etot, &class_para, 0, 0, CLASSIFIER_ACELP, 0, 0, 0, st->last_core_brate, -1 ); + + /* update past excitation signals for LD music post-filter */ + mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); + mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); + mvr2r( st->hMusicPF->dct_post_old_exc, exc_buffer, DCT_L_POST - OFFSET2 ); + + if ( output_frame != L_FRAME8k ) + { + if ( st->coder_type == INACTIVE ) + { + frame_energy( L_FRAME, pitch_buf, syn, 0.0f, &frame_e ); + st->psf_lp_noise = 0.99f * st->psf_lp_noise + 0.01f * frame_e; + } + } + + if ( amr_io_class != UNVOICED_CLAS && st->coder_type != INACTIVE && st->psf_lp_noise < 15.0f ) + { + int16_t tmp_coder_type = AUDIO; + if ( st->last_coder_type == INACTIVE || st->last_coder_type == UNVOICED ) + { + tmp_coder_type = INACTIVE; + } + /* Extrapolation of the last future part, windowing and high resolution DCT transform */ + Prep_music_postP( exc_buffer, dct_buffer, st->hMusicPF->filt_lfE, st->last_core, pitch_buf, st->hMusicPF->LDm_enh_lp_gbin ); + + /* LD music post-filter */ + LD_music_post_filter( st->hMusicPF, dct_buffer, dct_buffer, st->core_brate, -1, tmp_coder_type ); + + /* Inverse DCT transform, retrieval of the aligned excitation, re-synthesis */ + Post_music_postP( dct_buffer, exc_buffer, exc2, mem_tmp, st->mem_syn2, Aq, syn ); + } + else + { + /*------------------------------------------------------------* + * Improvement for unvoiced and audio signals + *------------------------------------------------------------*/ + + improv_amr_wb_gs( amr_io_class, st->coder_type, st->core_brate, &st->hGSCDec->seed_tcx, st->hAmrwb_IO->old_Aq, st->mem_syn2, st->hAmrwb_IO->lt_voice_fac, locattack, Aq, exc2, mem_tmp, syn, pitch_buf, st->hAmrwb_IO->Last_ener, st->rate_switching_reset, st->last_coder_type, 0 ); + + for ( i = 0; i < DCT_L_POST; i++ ) + { + st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; + } + } + + /*------------------------------------------------------------* + * FEC - Estimate pitch + *------------------------------------------------------------*/ + + FEC_pitch_estim( 1, st->last_core, L_FRAME, st->clas_dec, st->last_good, pitch_buf, st->old_pitch_buf, &st->bfi_pitch, &st->bfi_pitch_frame, &st->upd_cnt, GENERIC ); + + /*------------------------------------------------------------* + * FEC - Smooth the speech energy evolution when recovering after a BAD frame + * (smoothing is performed in the excitation domain and signal is resynthesized after) + *------------------------------------------------------------*/ + + FEC_scale_syn( L_FRAME, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, -1, MOVING_AVERAGE, &st->scaling_flag, &st->lp_ener_FEC_av, &st->lp_ener_FEC_max, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP, mem_tmp, st->mem_syn2, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), 0 ); + + /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ + fer_energy( L_FRAME, st->clas_dec, syn, pitch_buf[3], &st->enr_old, L_FRAME ); + } + + } /* End of GOOD FRAME */ + + /*----------------------------------------------------------------* + * BAD frame + *----------------------------------------------------------------*/ + + else + { + /* long burst frame erasures */ + if ( st->nbLostCmpt > 5 && st->clas_dec >= VOICED_CLAS ) + { + st->last_good = VOICED_TRANSITION; + } + + vad_flag = st->last_vad; + amr_io_class = st->last_good; + class_para = 0.0f; + + /* LSF estimation and A(z) calculation */ + lsf_dec_bfi( MODE1, lsf_new, st->lsf_old, st->lsf_adaptive_mean, NULL, st->mem_MA, st->mem_AR, st->stab_fac, st->last_coder_type, L_FRAME, st->last_good, st->nbLostCmpt, 0, NULL, NULL, NULL, st->hGSCDec->Last_GSC_pit_band_idx, st->Opt_AMR_WB, st->bwidth ); + + FEC_lsf2lsp_interp( st, L_FRAME, Aq, lsf_new, lsp_new ); + + /* calculation of excitation signal */ + FEC_exc_estim( st, L_FRAME, exc, exc2, tmp_buffer, pitch_buf, voice_factors, &FEC_pitch, dummy_buf, lsf_new, &tmp_noise ); + + /* synthesis for ACELP core switching and SWB BWE */ + syn_12k8( L_FRAME, Aq, exc, tmp_buffer, st->mem_syn1, 1 ); + + /* update past excitation signals */ + mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); + mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); + + /* Update music post processing values */ + /* Update circular buffer, keep last energy difference unchanged */ + for ( i = 1; i < MAX_LT; i++ ) + { + st->hMusicPF->LDm_lt_diff_etot[i - 1] = st->hMusicPF->LDm_lt_diff_etot[i]; + } + /* Filter energies update */ + for ( i = 0; i < DCT_L_POST; i++ ) + { + st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; + } + + /* synthesis at 12k8 Hz sampling rate */ + mvr2r( st->mem_syn2, mem_tmp, M ); + syn_12k8( L_FRAME, Aq, exc2, syn, st->mem_syn2, 1 ); + + /* update old synthesis for classification */ + mvr2r( syn + L_FRAME - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + + + /*------------------------------------------------------------* + * FEC - Smooth the speech energy evolution when recovering after a BAD frame + * (smoothing is performed in the excitation domain and signal is resynthesized after) + *------------------------------------------------------------*/ + + FEC_scale_syn( L_FRAME, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, -1, MOVING_AVERAGE, &st->scaling_flag, &st->lp_ener_FEC_av, &st->lp_ener_FEC_max, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP, mem_tmp, st->mem_syn2, 0, 0 ); + + /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ + fer_energy( L_FRAME, st->last_good, syn, FEC_pitch, &st->enr_old, L_FRAME ); + } + + /*--------------------------------------------------------* + * NB post-filter + *--------------------------------------------------------*/ + + if ( output_frame == L_FRAME8k || st->last_bwidth == NB ) + { + if ( output_frame == L_FRAME8k ) + { + st->hPFstat->on = 1; + nb_post_filt( L_FRAME, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, st->coder_type, st->BER_detect, 0 ); + } + else + { + st->hPFstat->on = 0; + nb_post_filt( L_FRAME, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, AUDIO, st->BER_detect, 0 ); + } + } + + /*------------------------------------------------------------------* + * Perform fixed deemphasis through 1/(1 - g*z^-1) + *-----------------------------------------------------------------*/ + + /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ + mvr2r( syn + L_FRAME - L_SYN_MEM, st->mem_syn_r, L_SYN_MEM ); + + + deemph( syn, PREEMPH_FAC, L_FRAME, &( st->mem_deemph ) ); + AGC_dec( syn, st->agc_mem2, L_FRAME ); + if ( st->hTcxDec != NULL ) + { + mvr2r( syn + L_FRAME / 2, st->hTcxDec->old_syn_Overl, L_FRAME / 2 ); + } + mvr2r( syn + L_FRAME - M - 1, st->syn, M + 1 ); + + /*------------------------------------------------------------------* + * Formant post-filter + *-----------------------------------------------------------------*/ + + mvr2r( syn, tmp_buffer + L_SYN_MEM, L_FRAME ); + + if ( output_frame != L_FRAME8k && st->last_bwidth != NB ) + { + st->hPFstat->on = 1; + formant_post_filt( st->hPFstat, tmp_buffer + L_SYN_MEM, Aq, syn, L_FRAME, L_SUBFR, st->psf_lp_noise, st->total_brate, amr_io_class == AUDIO_CLAS ); + } + + /*----------------------------------------------------------------* + * Comfort Noise Addition + *----------------------------------------------------------------*/ + + flag_cna = 0; + if ( st->psf_lp_noise >= 15.f || st->coder_type == INACTIVE ) + { + /*VAD only for non inactive frame*/ + st->VAD = ( st->VAD && ( st->coder_type != INACTIVE ) ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( syn, NULL, NULL, NULL, st, 0, 0 ); +#else + ApplyFdCng( syn, NULL, NULL, st, 0, 0 ); +#endif + + st->hFdCngDec->hFdCngCom->frame_type_previous = st->m_frame_type; + + /*Noisy speech detector*/ + noisy_speech_detection( st->hFdCngDec, st->VAD, syn ); + + st->hFdCngDec->hFdCngCom->likelihood_noisy_speech = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; + st->lp_noise = st->hFdCngDec->lp_noise; + + if ( st->flag_cna && ( st->psf_lp_noise >= 15.f ) ) + { + flag_cna = 1; + generate_masking_noise( syn, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, AMR_WB_CORE, 0, 0, st->element_mode, NULL, -1 ); + } + else if ( st->flag_cna ) + { + generate_masking_noise_update_seed( st->hFdCngDec->hFdCngCom ); + } + } + else if ( st->flag_cna ) + { + generate_masking_noise_update_seed( st->hFdCngDec->hFdCngCom ); + } + + if ( flag_cna == 0 ) + { + if ( st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && st->last_coder_type != AUDIO ) || st->last_core == AMR_WB_CORE ) ) + { + v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2 + 5 * L_FRAME / 4, 256.f, tmp_buffer, L_FRAME / 2 ); + v_add( tmp_buffer, syn, syn, L_FRAME / 2 ); + } + set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2, 0.f, L_FRAME * 2 ); + } + + /*----------------------------------------------------------------* + * Change the sampling frequency to 8/16/32 kHz + * Bass post-filter + *----------------------------------------------------------------*/ + + /* check if the cldfb works on the right sample rate */ + if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != L_FRAME ) + { + /* resample to ACELP internal sampling rate */ + resampleCldfb( st->cldfbAna, INT_FS_12k8 ); + resampleCldfb( st->cldfbBPF, INT_FS_12k8 ); + + if ( st->ini_frame > 0 ) + { + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; + } + } + + /* bass post-filter */ + bass_psfilter( st->hBPF, st->Opt_AMR_WB, syn, L_FRAME, pitch_buf, st->bpf_off, st->stab_fac, &st->stab_fac_smooth, GENERIC, bpf_error_signal ); + + /* analysis of the synthesis at internal sampling rate */ + cldfbAnalysis( syn, realBuffer, imagBuffer, -1, st->cldfbAna ); + + /* analysis and add the BPF error signal */ + addBassPostFilter( bpf_error_signal, st->bpf_off ? 0 : -1, realBuffer, imagBuffer, st->cldfbBPF ); + + if ( st->cldfbSyn->bandsToZero != st->cldfbSyn->no_channels - st->cldfbAna->no_channels ) + { + /* in case of BW switching, re-init to default */ + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; + } + + cldfb_synth_set_bandsToZero( st, realBuffer, imagBuffer, CLDFB_NO_COL_MAX ); + + /* synthesis of the combined signal */ + cldfbSynthesis( realBuffer, imagBuffer, synth_out, -1, st->cldfbSyn ); + + /* save synthesis - needed in case of core switching */ + mvr2r( synth_out, st->previoussynth, output_frame ); + + /*--------------------------------------------------------* + * calculate the average frame energy + *--------------------------------------------------------*/ + + fer_energy( L_FRAME, st->clas_dec, syn, pitch_buf[3], &ng_ener, L_FRAME ); + + /*--------------------------------------------------------* + * optimized for NO_S@-26dBov with street noise @ SNR=25dB + *--------------------------------------------------------*/ + + ng_ener = 10.0f * (float) log10( ng_ener + 0.01f ) - 90.3087f + 15; + st->ng_ener_ST = 0.7f * st->ng_ener_ST + 0.3f * ng_ener; + + /*-----------------------------------------------------------------* + * Bandwidth extension 6kHz-8kHz + *-----------------------------------------------------------------*/ + + if ( output_frame >= L_FRAME16k && ( ( st->cldfbSyn->bandsToZero - st->cldfbSyn->no_channels + 10 ) != 0 || st->last_flag_filter_NB != 1 ) ) + { + hf_synth_amr_wb( st->hAmrwb_IO, st->hBWE_zero, st->core_brate, output_frame, Aq, exc2, syn, &amr_io_class, synth_out, class_para, hf_gain, voice_factors, pitch_buf, st->ng_ener_ST, lsf_new ); + } + else + { + hf_synth_amr_wb_reset( st->hAmrwb_IO, st->hBWE_zero ); + } + + /*----------------------------------------------------------------------* + * Updates + *----------------------------------------------------------------------*/ + + updt_dec( st, old_exc, pitch_buf, 0, Aq, lsf_new, lsp_new, voice_factors, dummy_buf, gain_buf ); + + /* update old_Aq[] - needed in improv_amr_wb_gs_fx() */ + mvr2r( Aq, st->hAmrwb_IO->old_Aq, NB_SUBFR * ( M + 1 ) ); + + if ( !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) + { + waveadj_rec = 1; + } + + st->last_vad = vad_flag; + + /* Update main codec parameters */ + updt_dec_common( st, -1, -1, NULL ); + + /*----------------------------------------------------------------* + * Overlap of ACELP synthesis with old MDCT memory + *----------------------------------------------------------------*/ + + if ( st->bfi ) + { + /* calculate another loss frame to fill gap in case of switching frame loss */ + if ( ( error = acelp_core_switch_dec_bfi( st ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + if ( last_core_ori == HQ_CORE ) + { + nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); + + if ( st->prev_bfi && st->hHQ_core->HqVoicing ) + { + mvr2r( st->hHQ_core->fer_samples, st->hHQ_core->old_out + nZeros, NS2SA( st->output_Fs, 6000000 ) ); + } + + /* copy the HQ/ACELP delay synchroniation buffer to the beginning of ACELP frame */ + mvr2r( st->delay_buf_out, synth_out, delay_comp ); + + tmp = 1.0f / (float) NS2SA( st->output_Fs, 6000000 ); + for ( i = 0; i < NS2SA( st->output_Fs, 6000000 ); i++ ) + { + synth_out[i + delay_comp] = ( 1 - tmp * (float) i ) * st->hHQ_core->old_out[i + nZeros] + tmp * (float) i * synth_out[i + delay_comp]; + } + } + + /*----------------------------------------------------------------* + * HP filtering + * Final synthesis output + *----------------------------------------------------------------*/ + + /* Delay ACELP synthesis by DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS delay */ + if ( output_frame >= L_FRAME16k ) + { + tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); + delay_signal( synth_out, output_frame, st->prev_synth_buffer, tmps ); + } + + if ( waveadj_rec ) + { + tmps = 0; + if ( output_frame >= L_FRAME16k ) + { + tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); + } + waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut, synth_out + tmps, tmps, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); + } + + /* HP filter */ + hp20( synth_out, output_frame, mem_hp20_out, st->output_Fs ); + + /* save synthesis for core switching */ + mvr2r( synth_out + NS2SA( st->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st->old_synth_sw, NS2SA( st->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) ); + + /* TCX-LTP Postfilter: used in AMR-WB IO to update memories and to avoid discontinuities when the past frame was TCX */ + tcx_ltp_post( st, hTcxLtpDec, ACELP_CORE, output_frame, 0, synth_out, NULL ); + + /* final output of synthesis signal */ + mvr2r( synth_out, output, output_frame ); + +#ifdef DEBUG_MODE_INFO + dbgwrite( &st->clas_dec, sizeof( int16_t ), 1, output_frame, "res/clas.dec" ); + dbgwrite( &st->codec_mode, sizeof( int16_t ), 1, output_frame, "res/codec.dec" ); + dbgwrite( &st->core, sizeof( int16_t ), 1, output_frame, "res/core.dec" ); + dbgwrite( &st->extl, sizeof( int16_t ), 1, output_frame, "res/extl.dec" ); + dbgwrite( &st->bwidth, sizeof( int16_t ), 1, output_frame, "res/bwidth.dec" ); + dbgwrite( &st->cng_type, sizeof( int16_t ), 1, output_frame, "res/cng_type.dec" ); + tmp = st->core_brate / 1000.0f; + dbgwrite( &tmp, sizeof( float ), 1, output_frame, "res/core_brate.dec" ); + dbgwrite( &tmp, sizeof( float ), 1, output_frame, "res/total_brate.dec" ); + dbgwrite( &st->coder_type, sizeof( int16_t ), 1, output_frame, "res/coder_type.dec" ); + dbgwrite( &st->L_frame, sizeof( int16_t ), 1, output_frame, "res/L_frame.dec" ); + dbgwrite( &st->bfi, sizeof( int16_t ), 1, output_frame, "res/bfi" ); +#endif + + return error; +} + + +/*------------------------------------------------------------------* + * amr_wb_dec_init() + * + * AMR-WB decoder initialization + *------------------------------------------------------------------*/ + +void amr_wb_dec_init( + AMRWB_IO_DEC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO data handle */ +) +{ + /* gain quantization memory (used in AMR-WB IO mode) */ + set_f( hAmrwb_IO->past_qua_en, -14.0f, GAIN_PRED_ORDER ); + + /* Improvement of unvoiced and audio signals in AMR-WB IO mode */ + hAmrwb_IO->UV_cnt = 30; + hAmrwb_IO->LT_UV_cnt = 60.0f; + set_f( hAmrwb_IO->lt_diff_etot, 0, MAX_LT ); + hAmrwb_IO->Last_ener = 0.0f; + + set_f( hAmrwb_IO->old_Aq, 0, NB_SUBFR * ( M + 1 ) ); + hAmrwb_IO->old_Aq[0] = 1.0f; + hAmrwb_IO->old_Aq[M + 1] = 1.0f; + hAmrwb_IO->old_Aq[2 * ( M + 1 )] = 1.0f; + hAmrwb_IO->old_Aq[3 * ( M + 1 )] = 1.0f; + + hAmrwb_IO->lt_voice_fac = 0.0f; + + return; +} diff --git a/lib_dec/ari_dec.c b/lib_dec/ari_dec.c new file mode 100644 index 0000000000..fe97e69a52 --- /dev/null +++ b/lib_dec/ari_dec.c @@ -0,0 +1,666 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "stat_com.h" +#include "basop_util.h" +#include "wmops.h" + + +/*--------------------------------------------------------------- + * Ari decode 14 bits routines + -------------------------------------------------------------*/ + +/*--------------------------------------------------------------- + * ari_start_decoding_14bits() + * + * Start ArCo decoding + *-------------------------------------------------------------*/ + +void ari_start_decoding_14bits( + Decoder_State *st, + Tastat *s ) +{ + uint32_t val; + + val = get_next_indice( st, cbitsnew ); + + s->low = 0; + s->high = ari_q4new; + s->value = val; + + return; +} + +/*--------------------------------------------------------------- + * ari_start_decoding_14bits_prm() + * + * Start ArCo decoding + *-------------------------------------------------------------*/ + +int16_t ari_start_decoding_14bits_prm( + const int16_t *ptr, + int16_t bp, + Tastat *s ) +{ + int32_t val; + int16_t i; + const int16_t *p; + + val = 0; + p = ptr + bp; + for ( i = 0; i < cbitsnew; i++ ) + { + val = ( val << 1 ) | *( p + i ); + } + + s->low = 0; + s->high = ari_q4new; + s->value = val; + + bp = bp + i; + + return bp; +} + +/*--------------------------------------------------------------- + * ari_decode_14bits_s17_ext() + * + * Only for 17 symbols with new extended Tables: + * based on tri's optimization + * based on extended Tables which need less branches for coding + *-------------------------------------------------------------*/ + +void ari_decode_14bits_s17_ext( + Decoder_State *st, + uint16_t *res, + Tastat *s, + const uint16_t *cum_freq ) +{ + uint16_t symbol; + int32_t low, high; + uint32_t range, value, cum; + const uint16_t *p; + + /* read s->low,high,value sequentially */ + low = s->low; + high = s->high; + value = s->value; + + range = high - low + 1; /* keep: tmp=low-1 */ + cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); + + p = cum_freq; + + /* Note: For each indirect addressing p[i], we assume a tmp pointer init followed by a costfree reading the value */ + /* If the value multiplied by range is greater than cum, the pointer p is set to the tmp pointer */ + /* tmp_p = p+8; if (tmp_p[0]*range>cum) p = tmp_p; */ + + if ( p[8] * range > cum ) + { + p += 8; + } + /* */ + if ( p[4] * range > cum ) + { + p += 4; + } + /* */ + if ( p[2] * range > cum ) + { + p += 2; + } + /* */ + if ( p[1] * range > cum ) + { + p += 1; + if ( ( p == cum_freq + 15 ) && ( p[1] * range > cum ) ) + { + p += 1; + } + } + + symbol = (uint16_t) ( p - cum_freq ); + + high = low + mul_sbc_14bits( range, cum_freq[symbol] ) - 1; + low += mul_sbc_14bits( range, cum_freq[symbol + 1] ); + + for ( ;; ) + { + if ( high >= ari_q2new ) + { + if ( low >= ari_q2new ) + { + value -= ari_q2new; + low -= ari_q2new; + high -= ari_q2new; + } + else + { + if ( low >= ari_q1new && high < ari_q3new ) + { + value -= ari_q1new; + low -= ari_q1new; + high -= ari_q1new; + } + else + { + break; + } + } + } + low += low; + high += high + 1; + + value = ( value << 1 ) | get_next_indice_1( st ); + } + + s->low = low; + s->high = high; + s->value = value; + + *res = symbol; + + return; +} + + +/*--------------------------------------------------------------- + * ari_decode_14bits_s27_ext() + * + * Only for 17 symbols with new extended Tables: + * based on tri's optimization + * based on extended Tables which need less branches for coding + * copied from ari_decode_14bits_s17_ext, with changes marked + *-------------------------------------------------------------*/ + +void ari_decode_14bits_s27_ext( + Decoder_State *st, + uint16_t *res, + Tastat *s, + const uint16_t *cum_freq ) +{ + uint16_t symbol; + int32_t low, high; + uint32_t range, value, cum; + uint16_t il, ih, im; + + /* read s->low,high,value sequentially */ + low = s->low; + high = s->high; + value = s->value; + + range = high - low + 1; /* keep: tmp=low-1 */ + cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); + + + /* Note: For each indirect addressing p[i], we assume a tmp pointer init followed by a costfree reading the value */ + /* If the value multiplied by range is greater than cum, the pointer p is set to the tmp pointer */ + /* tmp_p = p+8; if (tmp_p[0]*range>cum) p = tmp_p; */ + + /* begin change when compared with ari_decode_14bits_s17_ext, + starting with line: if (p[8] * range > cum) { */ + il = 0; + ih = 27; + + /* do a five step binary search, using the interval [il, ih) */ + im = 13; /* (il + ih) >> 1 */ + if ( cum_freq[im] * range > cum ) + { + il = im; + } + else + { + ih = im; + } + + im = ( il + ih ) >> 1; + if ( cum_freq[im] * range > cum ) + { + il = im; + } + else + { + ih = im; + } + + im = ( il + ih ) >> 1; + if ( cum_freq[im] * range > cum ) + { + il = im; + } + else + { + ih = im; + } + + im = ( il + ih ) >> 1; + if ( cum_freq[im] * range > cum ) + { + il = im; + } + else + { + ih = im; + } + + if ( ih - il > 1 ) /* if the interval has more than one symbol */ + { + /* here, only ih == il + 2 is possible, which means two symbols in the interval */ + im = il + 1; /* (il + ih) >> 1 */ + if ( cum_freq[im] * range > cum ) + { + il = im; + } + } + + symbol = il; + /* end change when compared with ari_decode_14bits_s17_ext, + ending with line: symbol = p - cum_freq; */ + + high = low + mul_sbc_14bits( range, cum_freq[symbol] ) - 1; + low += mul_sbc_14bits( range, cum_freq[symbol + 1] ); + + for ( ;; ) + { + if ( high >= ari_q2new ) + { + if ( low >= ari_q2new ) + { + value -= ari_q2new; + low -= ari_q2new; + high -= ari_q2new; + } + else + { + if ( low >= ari_q1new && high < ari_q3new ) + { + value -= ari_q1new; + low -= ari_q1new; + high -= ari_q1new; + } + else + { + break; + } + } + } + low += low; + high += high + 1; + + value = ( value << 1 ) | get_next_indice_1( st ); + } + + s->low = low; + s->high = high; + s->value = value; + + *res = symbol; + + return; +} + + +/*--------------------------------------------------------------- + * ari_decode_14bits_bit_ext() + * + * Only for decoding one bit with uniform probability: + * based on tri's optimization + * copied from ari_decode_14bits_s17_ext, with changes marked + * the equivalent cum_freq table used is {16384, 8192, 0} + *-------------------------------------------------------------*/ + +void ari_decode_14bits_bit_ext( + Decoder_State *st, + uint16_t *res, + Tastat *s ) +{ + uint16_t symbol; + int32_t low, high; + uint32_t range, value, cum; + + /* read s->low,high,value sequentially */ + low = s->low; + high = s->high; + value = s->value; + + range = high - low + 1; /* keep: tmp=low-1 */ + cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); + + + /* Note: For each indirect addressing p[i], we assume a tmp pointer init followed by a costfree reading the value */ + /* If the value multiplied by range is greater than cum, the pointer p is set to the tmp pointer */ + /* tmp_p = p+8; if (tmp_p[0]*range>cum) p = tmp_p; */ + + /* begin change when compared with ari_decode_14bits_s17_ext, + starting with line: if (p[8] * range > cum) { */ + symbol = 0; + + if ( ( range << 13 ) > cum ) + { + symbol = 1; + } + + if ( symbol == 0 ) + { + /* high is unchanged */ + low = low + ( range >> 1 ); + } + else + { + high = low + ( range >> 1 ) - 1; + /* low is unchanged */ + } + /* end change when compared with ari_decode_14bits_s17_ext, + ending with line: low += mul_sbc_14bits(range, cum_freq[symbol + 1]); */ + + + for ( ;; ) + { + if ( high >= ari_q2new ) + { + if ( low >= ari_q2new ) + { + value -= ari_q2new; + low -= ari_q2new; + high -= ari_q2new; + } + else + { + if ( low >= ari_q1new && high < ari_q3new ) + { + value -= ari_q1new; + low -= ari_q1new; + high -= ari_q1new; + } + else + { + break; + } + } + } + low += low; + high += high + 1; + + value = ( value << 1 ) | get_next_indice_1( st ); + } + + s->low = low; + s->high = high; + s->value = value; + + *res = symbol; + + return; +} + +/*------------------------------------------------------------------------ + * Function: ari_decode_14bits_pow() + * + * Decode a symbol which follows the exponential distribution. That is, + * symbols are in the following intervals + * + * p(x = 0) = 1 - exp(- 0.5 * base * 2) + * p(x = q>0) = exp(- (q-0.5)*base* 2) - exp(- (q+0.5)*base*2 ) + * + *-------------------------------------------------------------------------*/ + +int16_t ari_decode_14bits_pow( + const int16_t *ptr, + int16_t bp, + int16_t bits, + int16_t *res, + Tastat *s, + uint16_t base ) +{ + uint16_t symbol; + int32_t low, high; + uint32_t range, value, cum; + Word16 pows[12]; /* "base" to the power of 2, 4, 8,... 2^12 */ + Word16 lowlim, highlim = 0, testval; + int16_t k; + + low = s->low; + high = s->high + 1; + value = s->value; + lowlim = 0; + symbol = 0; + + range = high - low; + + /* the value read from bitstream */ + assert( value >= (uint32_t) low ); + cum = ( ( ( (uint32_t) ( value - low ) ) << stat_bitsnew ) + ( 1 << stat_bitsnew ) - 1 ); + + /* search for the interval where "cum" fits */ + if ( ( ( base >> 1 ) * range ) > cum ) /* below pow-1 */ + { + pows[0] = testval = base; + /* increase exponent until it is smaller than "cum" */ + for ( k = 1; k < 12; k++ ) + { + highlim = testval; + pows[k] = mult_r( pows[k - 1], pows[k - 1] ); + move16(); + testval = mult_r( pows[k], base ); + if ( ( ( testval >> 1 ) * range ) <= cum ) /* found! big range is [lowlim,testval], (now narrow it down) */ + { + lowlim = testval; + k--; + symbol = 1 << k; + break; + } + } + assert( k < 12 ); /* maximum 2^10-1*/ + /* narrow the range down */ + for ( k--; k > 0; k-- ) + { + testval = mult_r( highlim, pows[k] ); + if ( ( ( testval >> 1 ) * range ) <= cum ) + { + lowlim = testval; + symbol -= 1 << ( k - 1 ); + } + else + { + highlim = testval; + } + } + highlim >>= 1; + lowlim >>= 1; + } + else /* trivial case, above pow-1, that is, first symbol */ + { + symbol = 0; + lowlim = base >> 1; + highlim = 16384; + } + + + high = low + mul_sbc_14bits( range, highlim ); + + low += mul_sbc_14bits( range, lowlim ); + + /*ptr init for ptr*/ + for ( ; bp < bits; ) + { + if ( high > ari_q2new ) + { + if ( low >= ari_q2new ) + { + value -= ari_q2new; + low -= ari_q2new; + high -= ari_q2new; + } + else + { + if ( low >= ari_q1new && high <= ari_q3new ) + { + value -= ari_q1new; + low -= ari_q1new; + high -= ari_q1new; + } + else + { + break; + } + } + } + low += low; + high += high; + + assert( abs( ptr[bp] ) <= 1 && "AC expects reading binary values!!!" ); + + value = ( value << 1 ) | ptr[bp++]; + } + + if ( !( bp != bits || !( ( s->low == low ) && ( s->high == high ) && ( s->value == value ) ) ) ) + { + /* This should not happen except of bit errors. */ + s->high = s->low = 0; + *res = 0; + return -1; + } + + s->low = low; + s->high = high - 1; + s->value = value; + + *res = symbol; + + return bp; +} + + +/*------------------------------------------------------------------------ + * Function: ari_decode_14bits_sign() + * + * Decode a sign with equal probabilities. + *-------------------------------------------------------------------------*/ + +int16_t ari_decode_14bits_sign( + const int16_t *ptr, + int16_t bp, + int16_t bits, + uint16_t *res, + Tastat *s ) +{ + uint16_t symbol; + int32_t low, high; + uint32_t range, value, cum; + + low = s->low; + high = s->high + 1; + value = s->value; + + range = high - low; + + if ( bp < bits ) + { + assert( value >= (uint32_t) low ); + cum = ( ( ( (uint32_t) ( value - low ) ) << stat_bitsnew ) + ( 1 << stat_bitsnew ) - 1 ); + if ( 8192 * range > cum ) + { + symbol = 2; + high = low + ( range >> 1 ); + } + else + { + symbol = 1; + low += range >> 1; + } + + /*ptr init for ptr*/ + for ( ; bp < bits; ) + { + if ( high > ari_q2new ) + { + if ( low >= ari_q2new ) + { + value -= ari_q2new; + low -= ari_q2new; + high -= ari_q2new; + } + else + { + if ( low >= ari_q1new && high <= ari_q3new ) + { + value -= ari_q1new; + low -= ari_q1new; + high -= ari_q1new; + } + else + { + break; + } + } + } + low += low; + high += high; + + assert( abs( ptr[bp] ) <= 1 && "AC expects reading binary values!!!" ); + + value = ( value << 1 ) | ptr[bp++]; + } + } + else + { + cum = value - low; + range >>= 1; + if ( range > cum ) + { + symbol = 2; + high = low + range; + } + else + { + symbol = 1; + low += range; + } + } + + s->low = low; + s->high = high - 1; + s->value = value; + + *res = symbol; + + return bp; +} diff --git a/lib_dec/ari_hm_dec.c b/lib_dec/ari_hm_dec.c new file mode 100644 index 0000000000..78f14e4a28 --- /dev/null +++ b/lib_dec/ari_hm_dec.c @@ -0,0 +1,168 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "stl.h" +#include "basop_util.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * DecodeIndex() + * + * + *-------------------------------------------------------------------*/ + +int16_t DecodeIndex( + Decoder_State *st, + const int16_t Bandwidth, + int16_t *PeriodicityIndex ) +{ + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + if ( ( hTcxDec->tcx_hm_LtpPitchLag > 0 ) && ( hTcxLtpDec->tcxltp_gain > kLtpHmGainThr ) ) + { + int16_t LtpPitchIndex = ( ( hTcxDec->tcx_hm_LtpPitchLag + ( 1 << ( kLtpHmFractionalResolution - 1 ) ) ) >> kLtpHmFractionalResolution ) - 2; + *PeriodicityIndex = kLtpHmFlag; + *PeriodicityIndex |= get_next_indice( st, NumRatioBits[Bandwidth][LtpPitchIndex] ); + ++*PeriodicityIndex; + *PeriodicityIndex |= LtpPitchIndex << 9; + + return NumRatioBits[Bandwidth][LtpPitchIndex]; + } + else + { + *PeriodicityIndex = get_next_indice( st, 8 ); + + return 8; + } +} + + +/*-------------------------------------------------------------------* + * tcx_hm_dequantize_gain() + * + * + *-------------------------------------------------------------------*/ + +static int16_t tcx_hm_dequantize_gain( + const int16_t coder_type, /* i : GC/VC coder type */ + const int16_t gain_idx, /* i : quantization index */ + Word16 *gain /* o : dequantized gain (Q11) */ +) +{ + assert( 0 <= coder_type && coder_type <= UNVOICED ); + + /* safety check in case of bit errors */ + if ( !( 0 <= gain_idx && gain_idx < ( 1 << kTcxHmNumGainBits ) ) ) + { + *gain = 0; + return 1; + } + + *gain = qGains[coder_type][gain_idx]; + + return 0; +} + + +/*-------------------------------------------------------------------* + * tcx_hm_decode() + * + * + *-------------------------------------------------------------------*/ + +void tcx_hm_decode( + const int16_t L_frame, /* i : number of spectral lines */ + Word32 env[], /* i/o: envelope shape (Q16) */ + const int16_t targetBits, /* i : target bit budget */ + const int16_t coder_type, /* i : GC/VC coder type */ + const int16_t prm_hm[], /* i : HM parameters */ + const int16_t LtpPitchLag, /* i : LTP pitch lag or -1 if none */ + int16_t *hm_bits /* o : bit consumption */ +) +{ + int16_t lag; + int32_t tmpL; + int16_t NumTargetBits, fract_res; + Word16 p[2 * kTcxHmParabolaHalfWidth + 1], gain; + + *hm_bits = 0; + + if ( !( coder_type == VOICED || coder_type == GENERIC ) ) + { + /* A bit error was encountered */ + *hm_bits = -1; + return; + } + + NumTargetBits = CountIndexBits( L_frame >= 256, prm_hm[1] ) + targetBits; + + if ( coder_type == VOICED ) + { + NumTargetBits += kTcxHmNumGainBits; + } + *hm_bits = NumTargetBits - targetBits + 1; + + /* Convert the index to lag */ + UnmapIndex( prm_hm[1], L_frame >= 256, LtpPitchLag, ( NumTargetBits <= kSmallerLagsTargetBitsThreshold ) || ( L_frame < 256 ), &fract_res, &tmpL ); + lag = (int16_t) tmpL; + + /* Render the harmonic model */ + if ( tcx_hm_render( lag, fract_res, p ) ) + { + /* A bit error was encountered */ + *hm_bits = -1; + return; + } + + /* Dequantize gain */ + + if ( tcx_hm_dequantize_gain( coder_type == VOICED, prm_hm[2], &gain ) ) + { + /* A bit error was encountered */ + *hm_bits = -1; + return; + } + tcx_hm_modify_envelope( gain, lag, fract_res, p, env, L_frame ); + + return; +} diff --git a/lib_dec/arith_coder_dec.c b/lib_dec/arith_coder_dec.c new file mode 100644 index 0000000000..793edcef26 --- /dev/null +++ b/lib_dec/arith_coder_dec.c @@ -0,0 +1,224 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*-------------------------------------------------------* + * tcx_arith_decode() + * + * + *-------------------------------------------------------*/ + +/*! r: number of bits consumed */ +static int16_t tcx_arith_decode( + const int16_t L_frame, /* i : number of spectral lines */ + const Word16 envelope[], /* i : scaled envelope (Q15-e) */ + Word16 envelope_e, /* i : scaled envelope exponent (Q0) */ + const int16_t target_bits, /* i : target bit budget */ + const int16_t prm[], /* i : bitstream parameters */ + float q_spectrum[] /* o : scalar quantized spectrum */ +) +{ + int16_t bp, k, q; + uint16_t s; + Tastat as; + uint16_t exp_k; + Word16 tmp; + + bp = ari_start_decoding_14bits_prm( prm, 0, &as ); + tmp = sub( envelope_e, 1 ); + + for ( k = 0; k < L_frame; ++k ) + { + if ( envelope[k] == 0 ) /* safety check in case of bit errors */ + { + set_zero( q_spectrum, L_frame ); + + return -1; + } + else + { + exp_k = expfp( negate( envelope[k] ), tmp ); + } + + /* decode line magnitude */ + bp = ari_decode_14bits_pow( prm, bp, target_bits, &q, &as, exp_k ); + + if ( q ) + { + /* line is non-zero, decode sign */ + bp = ari_decode_14bits_sign( prm, bp, target_bits, &s, &as ); + q_spectrum[k] = (float) q * ( 3 - 2 * s ); + } + else + { + /* line is zero, no sign needed */ + q_spectrum[k] = 0.0f; + } + + if ( as.high <= as.low ) + { + if ( bp < target_bits ) /* safety check in case of bit errors */ + { + bp = -1; + } + break; /* no bits left, so exit loop */ + } + } + for ( ; k < L_frame; k++ ) + { + q_spectrum[k] = 0.0f; + } + + return bp; +} + + +/*-------------------------------------------------------* + * tcx_arith_decode_envelope() + * + * + *-------------------------------------------------------*/ + +void tcx_arith_decode_envelope( + Decoder_State *st, /* i/o: coder state */ + float q_spectrum[], /* o : quantised MDCT coefficients */ + const int16_t L_frame, /* i : frame or MDCT length */ + int16_t L_spec, /* i : length w/o BW limitation */ + const Word16 A_ind[], /* i : quantised LPC coefficients */ + const int16_t target_bits, /* i : number of available bits */ + const int16_t prm[], /* i : bitstream parameters */ + const int16_t use_hm, /* i : use HM in current frame? */ + const int16_t prm_hm[], /* i : HM parameter area */ + int16_t tcxltp_pitch, /* i : TCX LTP pitch in FD, -1 if n/a*/ + int16_t *arith_bits, /* o : bits used for ari. coding */ + int16_t *signaling_bits, /* o : bits used for signaling */ + const int16_t low_complexity /* i : low-complexity flag */ +) +{ + Word32 env[N_MAX_ARI]; /* unscaled envelope (Q16) */ + Word16 *envelope; /* scaled envelope (Q15-e) */ + Word16 envelope_e; + int16_t L_spec_core; + TCX_CONFIG_HANDLE hTcxCfg; + TCX_DEC_HANDLE hTcxDec; + int16_t k; + float gamma_w, gamma_uw; + int16_t hm_bits; + + if ( L_spec > N_MAX_ARI || ( st->element_mode == EVS_MONO && ( target_bits > ( ACELP_13k20 / FRAMES_PER_SEC ) ) ) || ( st->element_mode == IVAS_SCE && ( st->bits_frame_nominal > ( LPC_SHAPED_ARI_MAX_RATE / FRAMES_PER_SEC ) ) ) || ( st->element_mode > IVAS_SCE && ( st->bits_frame_nominal > ( LPC_SHAPED_ARI_MAX_RATE_CPE / FRAMES_PER_SEC ) ) ) || ( target_bits <= 0 ) ) + { + /* this could happen in case of bit errors */ + st->BER_detect = 1; + L_spec = N_MAX_ARI; + *signaling_bits = 0; + *arith_bits = 0; + set_zero( q_spectrum, L_frame ); + + return; + } + + hTcxCfg = st->hTcxCfg; + hTcxDec = st->hTcxDec; + *signaling_bits = 0; + + assert( hTcxDec->enableTcxLpc ); + gamma_w = 1.0f; + gamma_uw = 1.0f / st->gamma; + +#define WMC_TOOL_MAN + tcx_arith_render_envelope( A_ind, L_frame, L_spec, FL2WORD16( hTcxCfg->preemph_fac ), FL2WORD16( gamma_w ), FL2WORD16( 0.5f * gamma_uw ), env ); +#undef WMC_TOOL_MAN + + if ( use_hm ) + { + if ( prm_hm[0] ) + { + tcx_hm_decode( L_spec, env, target_bits, st->coder_type, prm_hm, tcxltp_pitch, &hm_bits ); + + if ( hm_bits < 0 ) + { + st->BER_detect = 1; + *signaling_bits = 0; + *arith_bits = 0; + set_zero( q_spectrum, L_frame ); + + return; + } + } + else + { + hm_bits = 1; + } + *signaling_bits += hm_bits; + } + + L_spec_core = L_spec; + if ( st->igf ) + { + L_spec_core = min( L_spec_core, st->hIGFDec->infoIGFStartLine ); + } + + envelope = (Word16 *) env; + tcx_arith_scale_envelope( L_spec, L_spec_core, env, target_bits, low_complexity, envelope, &envelope_e ); + + *arith_bits = tcx_arith_decode( L_spec, envelope, envelope_e, target_bits, prm, q_spectrum ); + + /* safety check in case of bit errors */ + if ( *arith_bits < 0 ) + { + st->BER_detect = 1; + set_zero( q_spectrum, L_frame ); + } + + for ( k = L_spec; k < L_frame; ++k ) + { + q_spectrum[k] = 0; + } + + return; +} diff --git a/lib_dec/avq_dec.c b/lib_dec/avq_dec.c new file mode 100644 index 0000000000..99aabbb04c --- /dev/null +++ b/lib_dec/avq_dec.c @@ -0,0 +1,427 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "cnst.h" +#include "wmops.h" +#include + +/*-------------------------------------------------------------------* + * Local prototypes + *-------------------------------------------------------------------*/ + +static void read_cv( Decoder_State *st, uint16_t *I, int16_t *kv, int16_t nq, int16_t *nbits ); + +/*-----------------------------------------------------------------* + * AVQ_demuxdec() + * + * Demultiplex and decode subvectors using + * split algebraic vector dequantizer based on RE8 latice. + *-----------------------------------------------------------------*/ + +void AVQ_demuxdec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t xriq[], /* o : decoded subvectors [0..8*Nsv-1]*/ + int16_t *nb_bits, /* i/o: number of allocated bits */ + const int16_t Nsv, /* i : number of subvectors */ + int16_t nq[], /* i/o: AVQ nq index */ + int16_t avq_bit_sFlag, /* i : flag for AVQ bit saving solution */ + int16_t trgtSvPos /* i : target SV for AVQ bit savings */ +) +{ + int16_t i, j, bits; + uint16_t I[NSV_MAX]; + int16_t code[8]; + int16_t *kv; + int16_t nq_est, unused_bits_idx; + int16_t bitsMod; + int16_t underflow; + int16_t unusedbitsFlag; + int16_t svOrder[NSV_MAX], k, nullVec, dummy_bits; + + kv = xriq; /* reuse vector to save memory */ + bits = *nb_bits; + bitsMod = 0; + underflow = 0; + unusedbitsFlag = 0; + nullVec = 0; + dummy_bits = 0; + svOrder[Nsv - 1] = trgtSvPos; + svOrder[0] = 0; + svOrder[1] = 1; + i = 2; + j = i; + if ( avq_bit_sFlag == 2 ) + { + j = i + 1; + } + + while ( i < Nsv - 1 ) + { + svOrder[i] = j; + i++; + j++; + } + + for ( i = 0; i < NSV_MAX; i++ ) + { + I[i] = (uint16_t) -1; + } + + for ( i = 0; i < Nsv; i++ ) + { + k = svOrder[i]; + if ( avq_bit_sFlag == 2 && bits % 5 == 4 && bits > 8 && bits < 30 && k >= trgtSvPos && i < Nsv - 1 ) + { + ordr_esti( Nsv - i, &trgtSvPos, &svOrder[i], Nsv ); + k = svOrder[i]; + avq_bit_sFlag = 1; + } + + if ( k == trgtSvPos && avq_bit_sFlag > 0 ) + { + if ( ( *nb_bits - bits ) == 7 || bits < BIT_SAVING_LOW_THR || bits >= BIT_SAVING_HIGH_THR ) + { + avq_bit_sFlag = 0; + } + else + { + break; + } + } + + nq[k] = 0; /* initialization and also forced if the budget is exceeded */ + + if ( bits > 8 ) + { + /* read the unary code including the stop bit for nq[i] */ + nq[k] = -1; + do + { + ( nq[k] )++; + + if ( 5 * nq[k] + 4 == bits ) + { + break; + } + } while ( get_next_indice_1( st ) ); + + if ( 5 * nq[k] + 4 == bits ) /* check the overflow */ + { + bits++; /* overflow stop bit */ + } + + /* check for potential bit errors */ + if ( nq[k] > NB_SPHERE ) + { + st->BER_detect = 1; + set_s( xriq, 0, Nsv * 8 ); + set_s( nq, 0, Nsv ); + *nb_bits = 0; + + return; + } + + bits -= nq[k]; + bits--; /* count the stop bit */ + + if ( nq[k] > 0 ) + { + nq[k]++; + } + + /* read codebook indices (rank I and event. Voronoi index kv) */ + read_cv( st, &I[k], &kv[k * 8], nq[k], &bits ); + } + } /* for */ + + /* Bit Saving Solution */ + if ( avq_bit_sFlag > 0 && bits > 8 ) + { + i = svOrder[Nsv - 1]; + nq[i] = 0; + bitsMod = bits % 5; + if ( i != Nsv - 1 ) + { + nullVec = 0; + for ( j = i; j < Nsv - 1; j++ ) + { + if ( nq[svOrder[j]] == 0 ) + { + nullVec++; + } + } + nq_est = bits / 5; + if ( ( bitsMod > 0 || ( nullVec == 4 && nq_est == 5 ) ) && bitsMod != 4 && ( bits + nullVec ) >= 5 * nq_est + 4 && nq[svOrder[Nsv - 2]] == 0 ) /* dummy bits */ + { + dummy_bits = 5 - bitsMod; + bits = bits + dummy_bits; /* add dummy bits */ + bitsMod = 0; + } + else if ( nq_est > 4 && ( ( bitsMod == 0 && nullVec > 3 && nullVec < 6 ) || ( bitsMod == 4 && nullVec == 5 ) ) && nq[svOrder[Nsv - 2]] == 0 ) /* wasted bits 4, 5 for nq 6,7..*/ + { + underflow = 0; + if ( ( bitsMod + nullVec ) % 5 != 0 ) + { + underflow = 1; + } + dummy_bits = nullVec + underflow; + bits = bits + dummy_bits; /* add dummy bits */ + bitsMod = 0; + } + } + underflow = 1; + if ( bitsMod != 4 ) + { + underflow = 0; + bits -= bitsMod; + } + bits += underflow; + + /* read the unary code for unused bit*/ + unused_bits_idx = -1; + do + { + ( unused_bits_idx )++; + if ( 5 * unused_bits_idx + 4 == bits - 1 ) + { + break; + } + } while ( get_next_indice_1( st ) ); + + unusedbitsFlag = 0; + + if ( dummy_bits == 0 ) + { + if ( unused_bits_idx == 0 && bits > BIT_SAVING_LOW_THR ) + { + unusedbitsFlag = 1; + } + else if ( unused_bits_idx == 1 && bits > BIT_SAVING_LOW_THR ) + { + unusedbitsFlag = -1; + } + } + + /*Compute AVQ code book number from unused Bits */ + nq_est = (int16_t) ceil( 0.2f * ( bits - 5 * ( unusedbitsFlag + unused_bits_idx ) ) ); + + if ( nq_est == 1 ) + { + nq_est = 0; + } + bits -= underflow; + + bits -= unused_bits_idx; + + if ( nq_est != 0 ) + { + bits--; + } + + nq[i] = nq_est; + /* read codebook indices (rank I and event. Voronoi index kv) */ + read_cv( st, &I[i], &kv[i * 8], nq[i], &bits ); + + bits -= dummy_bits; + + if ( bitsMod != 4 ) + { + bits += bitsMod; + } + } + + /* decode all subvectors */ + for ( i = 0; i < Nsv; i++ ) + { + /* multi-rate RE8 decoder */ + re8_dec( nq[i], I[i], &kv[8 * i], code ); + + /* write decoded RE8 vector to decoded subvector #i */ + for ( j = 0; j < 8; j++ ) + { + xriq[i * 8 + j] = code[j]; + } + } + + *nb_bits = bits; + + return; +} + + +/*-----------------------------------------------------------------* + * AVQ_dec_lpc() + * + * Demultiplex and decode subvectors for LPC dequantization + * using split algebraic vector dequantizer + *-----------------------------------------------------------------*/ + +void AVQ_dec_lpc( + const int16_t indx[], /* i : index[] (4 bits per words) */ + int16_t nvecq[], /* o : vector quantized */ + const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ +) +{ + int16_t i, l, n, nq, nk, pos, ival, c[8], kv[8]; + int32_t I; + + /* last index word */ + pos = Nsv - 1; + + for ( l = 0; l < Nsv; l++ ) + { + pos += indx[l]; + } + + /* decode all subvectors */ + for ( l = Nsv - 1; l >= 0; l-- ) + { + nq = indx[l]; /* quantizer number (0,2,3..n) */ + + nk = 0; + n = nq; + + if ( nq > 4 ) + { + nk = ( nq - 3 ) >> 1; + n = nq - nk * 2; + } + + /* read n groups of 4-bit for Voronoi index (k[]) */ + for ( i = 0; i < 8; i++ ) + { + kv[i] = 0; + } + + while ( nk-- > 0 ) + { + ival = ( indx[pos--] & 0x0F ); + ival <<= 4; + ival += ( indx[pos--] & 0x0F ); + + for ( i = 7; i >= 0; i-- ) + { + kv[i] <<= 1; + kv[i] += ( ival & 0x01 ); + ival >>= 1; + } + } + + /* read n groups of 4-bit for base codebook index (I) */ + I = 0; + while ( n-- > 0 ) + { + I <<= 4; + I += ( indx[pos--] & 0x0F ); + } + + /* multi-rate RE8 decoder */ + re8_dec( nq, (int16_t) I, kv, c ); + + /* write decoded RE8 vector */ + for ( i = 0; i < 8; i++ ) + { + nvecq[( l * 8 ) + i] = c[i]; + } + } + + return; +} + + +/*-----------------------------------------------------------------* + * read_cv() + * + * read codebook indices (rank I and event. Voronoi index kv) + *-----------------------------------------------------------------*/ + +static void read_cv( + Decoder_State *st, /* i/o: decoder state structure */ + uint16_t *I, /* o : rank I code book index */ + int16_t *kv, /* o : Voronoi index kv */ + int16_t nq, /* i : AVQ nq index */ + int16_t *nbits /* i/o: bits available */ +) + +{ + int16_t j, bits, order_v; + + bits = *nbits; + + /* read codebook indices (rank I and event. Voronoi index kv) */ + if ( nq == 0 ) /* Q0 */ + { + /* nothing to read */ + } + else if ( nq < 5 ) /* Q2, Q3, Q4 */ + { + *I = get_next_indice( st, 4 * nq ); + bits -= ( 4 * nq ); + } + else if ( nq % 2 == 0 ) /* Q4 + Voronoi extensions r=1,2,3,... */ + { + *I = get_next_indice( st, 4 * 4 ); + bits -= 4 * 4; + order_v = (int16_t) ( nq / 2 ) - 2; + + for ( j = 0; j < 8; j++ ) + { + kv[j] = get_next_indice( st, order_v ); + } + bits -= 8 * order_v; + } + else /* Q3 + Voronoi extensions r=1,2,3,... */ + { + *I = get_next_indice( st, 4 * 3 ); + bits -= 4 * 3; + order_v = (int16_t) ( nq / 2 ) - 1; + + for ( j = 0; j < 8; j++ ) + { + kv[j] = get_next_indice( st, order_v ); + } + bits -= 8 * order_v; + } + *nbits = bits; + + return; +} diff --git a/lib_dec/bass_psfilter.c b/lib_dec/bass_psfilter.c new file mode 100644 index 0000000000..85c595460c --- /dev/null +++ b/lib_dec/bass_psfilter.c @@ -0,0 +1,616 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "ivas_prot.h" +#include "cnst.h" +#include "stat_dec.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define NBPSF_L_EXTRA 120 +#define BPF_STOP_STOPBAND_16 16 + +#define K_PC_DEC -0.0357f /* <45, 17> */ +#define C_PC_DEC 1.6071f + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static int16_t Pit_track( const float syn[], int16_t T ); + +/*---------------------------------------------------------------------* + * bass_psfilter_init() + * + * Initialisation of postfiltering variables + *---------------------------------------------------------------------*/ + +void bass_psfilter_init( + BPF_DEC_HANDLE hBPF /* o : BPF data handle */ +) +{ + /* post-filter memories */ + hBPF->pst_mem_deemp_err = 0.0f; + hBPF->pst_lp_ener = 0.0f; + set_f( hBPF->pst_old_syn, 0, NBPSF_PIT_MAX ); + + set_s( hBPF->Track_on_hist, 0, L_TRACK_HIST ); + set_s( hBPF->vibrato_hist, 0, L_TRACK_HIST ); + set_f( hBPF->mem_mean_pit, 80, L_TRACK_HIST ); + hBPF->psf_att = 1.0f; + + return; +} + +/*---------------------------------------------------------------------* + * bass_psfilter() + * + * Perform low-frequency postfiltering + *---------------------------------------------------------------------*/ + +void bass_psfilter( + BPF_DEC_HANDLE hBPF, /* o : BPF data handle */ + const int16_t Opt_AMR_WB, /* i : AMR-WB IO flag */ + const float synth_in[], /* i : input synthesis (at 16kHz) */ + const int16_t L_frame, /* i : length of the last frame */ + const float pitch_buf[], /* i : pitch for every subfr [0,1,2,3] */ + const int16_t bpf_off, /* i : do not use BPF when set to 1 */ + float v_stab, /* i : stability factor */ + float *v_stab_smooth, /* i/o: smoothed stability factor */ + const int16_t coder_type, /* i : coder_type */ + float bpf_noise_buf[] /* o : BPF error signal (at int_fs) */ +) +{ + int16_t i, i_subfr, T; + float gain, alpha, corr, ener; + float syn_buf[NBPSF_PIT_MAX + L_FRAME16k + NBPSF_PIT_MAX], *syn; + float syn2_buf[L_FRAME16k], *syn2; + float err[L_HALFR16k]; + int16_t T_sf[NB_SUBFR16k]; + int16_t nb_subfr, T_update; + float delta_v_stab; + int16_t dist_pit_diff, idx_pit_min, idx_pit_max, vibrato, Track_on; + float loc_pit_max, loc_pit_min, diff_pit; + float TrackOnR, vibratR, alp_tmp; + int16_t subfr_len; + int16_t nbpsf_pit_max; + + subfr_len = ( L_frame == L_FRAME8k ) ? STEREO_DFT_L_SUBFR_8k : L_SUBFR; + nbpsf_pit_max = ( L_frame == L_FRAME8k ) ? STEREO_DFT_NBPSF_PIT_MAX_8k : NBPSF_PIT_MAX; + + Track_on = 0; + T_update = 01; + vibrato = 0; + nb_subfr = L_frame / subfr_len; + + /*------------------------------------------------------- + * Initialize pointers to various synthesis buffers + * + * |--------------------syn_buf--------------------------------| + * |-----old_syn-----|-------synth_in--------|----extrapol---- | + * |--NBPSF_PIT_MAX--| sf1 | sf2 | sf3 | sf4 |--NBPSF_PIT_MAX--| + * |------syn2_buf---------| + * |------L_frame----------| + * |----bpf_noise_buf------| + * + *-------------------------------------------------------*/ + + mvr2r( hBPF->pst_old_syn, syn_buf, nbpsf_pit_max ); + mvr2r( synth_in, syn_buf + nbpsf_pit_max, L_frame ); + + if ( !( pitch_buf == NULL || bpf_off ) ) + { + for ( i = L_TRACK_HIST - 1; i > 0; i-- ) + { + hBPF->mem_mean_pit[i] = hBPF->mem_mean_pit[i - 1]; + } + + hBPF->mem_mean_pit[i] = mean( pitch_buf, nb_subfr ); + } + + idx_pit_min = minimum( hBPF->mem_mean_pit, L_TRACK_HIST, &loc_pit_min ); + idx_pit_max = maximum( hBPF->mem_mean_pit, L_TRACK_HIST, &loc_pit_max ); + + dist_pit_diff = (int16_t) abs( idx_pit_max - idx_pit_min ); + diff_pit = loc_pit_max - loc_pit_min; + + if ( L_frame == L_FRAME16k || L_frame == L_FRAME8k ) + { + diff_pit *= 0.8f; + } + + if ( coder_type != INACTIVE && diff_pit >= 2.0f && diff_pit < 10 && dist_pit_diff >= 3 ) + { + vibrato = 1; + } + + TrackOnR = (float) sum_s( hBPF->Track_on_hist, L_TRACK_HIST ) / L_TRACK_HIST; + vibratR = (float) sum_s( hBPF->vibrato_hist, L_TRACK_HIST ); + alp_tmp = 1.0f - TrackOnR; + + if ( vibrato ) + { + vibratR = vibratR * vibratR * -0.009f + 1.0f; + alp_tmp *= vibratR; + } + + alp_tmp = max( 0.1f, alp_tmp ); + + if ( alp_tmp > hBPF->psf_att ) + { + hBPF->psf_att = 0.05f * alp_tmp + 0.95f * hBPF->psf_att; + } + else + { + hBPF->psf_att = 0.4f * alp_tmp + 0.6f * hBPF->psf_att; + } + + if ( pitch_buf == NULL || bpf_off ) + { + /* do not use BPF for HQ core */ + T_update = L_frame == L_FRAME8k ? 40 : 80; + set_s( T_sf, 0, 5 ); + syn = &syn_buf[nbpsf_pit_max + L_frame]; + for ( i = 0; i < nbpsf_pit_max; i++ ) + { + syn[i] = syn[i - T_update]; + } + } + else + { + /* extrapolation of synth_in */ + for ( i = 0; i < nb_subfr; i++ ) + { + /* copy subframe pitch values [1,2,3,4] of the current frame */ + T_sf[i] = ( L_frame == L_FRAME8k ) ? (int16_t) ( pitch_buf[i] / 2 + 0.5f ) : (int16_t) ( pitch_buf[i] + 0.5f ); + + if ( L_frame == L_FRAME16k || L_frame == L_FRAME8k ) + { + /* Safety check, should be very rare */ + if ( T_sf[i] > nbpsf_pit_max ) + { + T_sf[i] = nbpsf_pit_max; + } + } + else + { + if ( T_sf[i] > PIT_MAX ) + { + T_sf[i] = PIT_MAX; + } + } + } + + T = T_sf[nb_subfr - 1]; + syn = &syn_buf[nbpsf_pit_max + L_frame]; + for ( i = 0; i < nbpsf_pit_max; i++ ) + { + syn[i] = syn[i - T]; + } + } + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += subfr_len ) + { + T = T_sf[i_subfr / subfr_len]; + + /* Pitch limitation already done in the previous loop */ + syn = &syn_buf[nbpsf_pit_max + i_subfr]; + syn2 = &syn2_buf[i_subfr]; + + if ( T != 0 ) + { + if ( T >= PIT_MIN && Opt_AMR_WB ) + { + T = Pit_track( syn, T ); + + if ( T != T_sf[i_subfr / L_SUBFR] ) + { + Track_on = 1; + } + } + + /* symetric pitch prediction : phase is opposite between harmonic */ + for ( i = 0; i < subfr_len; i++ ) + { + syn2[i] = 0.5f * ( syn[i - T] + syn[i + T] ); + } + + /* gain of prediction */ + corr = 0.0001f; + for ( i = 0; i < subfr_len; i++ ) + { + corr += syn[i] * syn2[i]; + } + + ener = 0.0001f; + for ( i = 0; i < subfr_len; i++ ) + { + ener += syn2[i] * syn2[i]; + } + gain = corr / ener; + + /* error of prediction for noise estimator */ + for ( i = 0; i < subfr_len; i++ ) + { + err[i] = syn[i] - ( gain * syn2[i] ); + } + + /* alpha = post-filtering factor (0=OFF, 1=100%) */ + ener = (float) ( ener + pow( 10.0, 0.1 * hBPF->pst_lp_ener ) ); /* limit alpha (post-filtering) when noise is high */ + alpha = corr / ener; + if ( alpha > 0.5f ) + { + alpha = 0.5f; + } + + alpha *= ( hBPF->psf_att ); + if ( alpha > 0.3f && Track_on ) + { + alpha = 0.3f; + } + else if ( alpha > 0.4f && vibrato ) + { + alpha = 0.4f; + } + + if ( alpha < 0.0f ) + { + alpha = 0.0f; + } + + *v_stab_smooth = 0.8f * v_stab + 0.2f * ( *v_stab_smooth ); + delta_v_stab = (float) fabs( *v_stab_smooth - v_stab ); + v_stab = (float) pow( v_stab, 0.5f ); + alpha = ( 1.0f + 0.15f * v_stab - 2.0f * delta_v_stab ) * alpha; + + for ( i = 0; i < subfr_len; i++ ) + { + syn2[i] = alpha * ( syn[i] - syn2[i] ); + } + } + + else + { + /* symetric pitch prediction : phase is opposite between harmonic */ + for ( i = 0; i < subfr_len; i++ ) + { + syn2[i] = 0.5f * ( syn[i - T_update] + syn[i + T_update] ); + } + + if ( coder_type == AUDIO ) /* GSC mode without temporal component */ + { + Track_on = 1; + } + else + { + Track_on = 0; + } + + /* gain of prediction */ + corr = 0.0001f; + for ( i = 0; i < subfr_len; i++ ) + { + corr += syn[i] * syn2[i]; + } + ener = 0.0001f; + for ( i = 0; i < subfr_len; i++ ) + { + ener += syn2[i] * syn2[i]; + } + + gain = corr / ener; + + /* error of prediction for noise estimator */ + for ( i = 0; i < subfr_len; i++ ) + { + err[i] = syn[i] - ( gain * syn2[i] ); + } + + /* alpha = post-filtering factor (0=OFF, 1=100%) */ + alpha = 0.0f; + + *v_stab_smooth = 0.8f * v_stab + 0.2f * ( *v_stab_smooth ); + + set_f( syn2, 0.0f, subfr_len ); + } + + /* low-frequency noise estimator (lp_ener is average in dB) */ + deemph( err, 0.9f, subfr_len, &( hBPF->pst_mem_deemp_err ) ); /* +20dB at 50Hz */ + + ener = 0.0001f; + for ( i = 0; i < subfr_len; i++ ) + { + ener += err[i] * err[i]; + } + ener = (float) ( 10.0 * log10( ener ) ); + hBPF->pst_lp_ener = (float) ( 0.99f * hBPF->pst_lp_ener + 0.01f * ener ); + + /* just write out the error signal */ + mvr2r( syn2, bpf_noise_buf + i_subfr, subfr_len ); + } + + /*-------------------------------------------------------* + * update memory for next frame + *-------------------------------------------------------*/ + + for ( i = L_TRACK_HIST - 1; i > 0; i-- ) + { + hBPF->Track_on_hist[i] = hBPF->Track_on_hist[i - 1]; + hBPF->vibrato_hist[i] = hBPF->vibrato_hist[i - 1]; + } + + hBPF->Track_on_hist[i] = Track_on; + hBPF->vibrato_hist[i] = vibrato; + + mvr2r( syn_buf + L_frame, hBPF->pst_old_syn, nbpsf_pit_max ); + + return; +} + + +/*---------------------------------------------------------------------* + * Pit_track() + * + * Perform pitch tracking and test pitch/2 to avoid continuous pitch doubling + *---------------------------------------------------------------------*/ + +/*! r: Pitch */ +static int16_t Pit_track( + const float syn[], /* i : synthesis [-NBPSF_PIT_MAX..L_HALFR16k] */ + int16_t T /* i : pitch period (>= PIT_MIN) */ +) +{ + int16_t i, T2; + float tmp, corr, ener, cn; + const float *v1, *v2; + + /*----------------------------------------------------------------* + * Test pitch/2 to avoid continuous pitch doubling + * (short pitch is limited to PIT_MIN (34 = 376Hz) by the encoder + *----------------------------------------------------------------*/ + + T2 = T >> 1; + + v1 = &syn[-NBPSF_L_EXTRA]; + v2 = &syn[-T2 - NBPSF_L_EXTRA]; + + ener = 0.01f; + for ( i = 0; i < L_HALFR16k + NBPSF_L_EXTRA; i++ ) + { + ener += v1[i] * v1[i]; + } + corr = 0.01f; + for ( i = 0; i < L_HALFR16k + NBPSF_L_EXTRA; i++ ) + { + corr += v1[i] * v2[i]; + } + tmp = 0.01f; + for ( i = 0; i < L_HALFR16k + NBPSF_L_EXTRA; i++ ) + { + tmp += v2[i] * v2[i]; + } + + /* cn = normalized correlation of pitch/2 */ + cn = corr / (float) sqrt( ener * tmp ); + if ( cn > 0.95f ) + { + T = T2; + } + + return ( T ); +} + + +/*---------------------------------------------------------------------* + * addBassPostFilter() + * + * Add BPF component in cldfb domain + *---------------------------------------------------------------------*/ + +void addBassPostFilter( + const float *harm_timeIn, + const int16_t samplesToProcess, + float **rAnalysis, + float **iAnalysis, + HANDLE_CLDFB_FILTER_BANK cldfb ) +{ + float *tmp_R[CLDFB_NO_COL_MAX]; + float *tmp_I[CLDFB_NO_COL_MAX]; + float cldfbBufferReal[CLDFB_NO_COL_MAX][20]; + float cldfbBufferImag[CLDFB_NO_COL_MAX][20]; + int16_t i, b; + int16_t maxBand; + const float *weights; + int16_t nCol = cldfb->no_col; + int16_t nColToProcess = nCol; + int16_t nChan = cldfb->no_channels; + + if ( samplesToProcess > -1 ) + { + nColToProcess = ( ( samplesToProcess + cldfb->no_channels - 1 ) / cldfb->no_channels ); + } + + assert( nCol == 16 ); + + weights = bpf_weights_16; + + if ( nChan > BPF_STOP_STOPBAND_16 ) + { + maxBand = BPF_STOP_STOPBAND_16; + } + else + { + maxBand = nChan; + } + + for ( i = 0; i < nColToProcess; i++ ) + { + tmp_R[i] = cldfbBufferReal[i]; + tmp_I[i] = cldfbBufferImag[i]; + } + + /* do the analysis of filtered signal */ + cldfbAnalysis( harm_timeIn, tmp_R, tmp_I, samplesToProcess, cldfb ); + + /* now do the subtraction */ + for ( i = 0; i < nColToProcess; i++ ) + { + /* loop over low frequency bands */ + for ( b = 0; b < maxBand; b++ ) + { + rAnalysis[i][b] -= weights[b] * tmp_R[i][b]; + iAnalysis[i][b] -= weights[b] * tmp_I[i][b]; + } + } + + return; +} + +/*---------------------------------------------------------------------* + * res_bpf_adapt() + * + * Analyze BPF output and decide if it should be applied on DFT stereo + * residual signal + *---------------------------------------------------------------------*/ + +/*! r: Decision to enable or disable BPF on DFT stereo residual */ +int16_t res_bpf_adapt( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo decoder handle */ + const float *bpf_error_signal_8k, /* i : BPF modification signal */ + float res_buf[STEREO_DFT_BUF_MAX] /* i : residual buffer */ +) +{ + float error_nrg; + float tmp; + float res_hb_nrg; + float bpf_error_ratio; + int16_t res_bpf_flag; + int16_t i; + int16_t i_start; + int16_t i_end; + float bw_inv; + + if ( hStereoDft->res_cod_band_max == 6 ) + { + i_start = 39; + i_end = 64; + bw_inv = 0.04f; /* 1/(64 - 39) */ + } + else + { + i_start = 28; + i_end = 40; + bw_inv = 0.083f; /* 1/(40 - 28) */ + } + + /* Measure energy of high frequency band in MDCT domain */ + res_hb_nrg = EPSILON; + for ( i = i_start; i < i_end; i++ ) + { + res_hb_nrg += res_buf[i] * res_buf[i]; + } + res_hb_nrg *= bw_inv; + res_hb_nrg = STEREO_DFT_BPF_ADAPT_ALPHA * res_hb_nrg + ( 1 - STEREO_DFT_BPF_ADAPT_ALPHA ) * hStereoDft->res_hb_nrg_mem; + hStereoDft->res_hb_nrg_mem = res_hb_nrg; + + /* Measure energy of discontinuities at subframe boundaries */ + error_nrg = 0; + for ( i = 0; i < L_FRAME8k; i += STEREO_DFT_L_SUBFR_8k ) + { + tmp = bpf_error_signal_8k[i] - hStereoDft->bpf_error_signal_last; + error_nrg += tmp * tmp; + hStereoDft->bpf_error_signal_last = bpf_error_signal_8k[i + STEREO_DFT_L_SUBFR_8k - 1]; + } + error_nrg *= 0.2f; /* Division by 5 for average value */ + bpf_error_ratio = min( 2, error_nrg / res_hb_nrg ); /* Form decision variable and apply limit */ + bpf_error_ratio = STEREO_DFT_BPF_ADAPT_BETA * bpf_error_ratio + ( 1 - STEREO_DFT_BPF_ADAPT_BETA ) * hStereoDft->bpf_error_ratio_mem; + hStereoDft->bpf_error_ratio_mem = bpf_error_ratio; + + res_bpf_flag = bpf_error_ratio < 1; + + return res_bpf_flag; +} + +/*---------------------------------------------------------------------* + * bpf_pitch_coherence() + * + * Analyse pitch coherence + *---------------------------------------------------------------------*/ +void bpf_pitch_coherence( + Decoder_State *st, /* i/o: decoder state structure */ + const float pitch_buf[] /* i : pitch for every subfr [0,1,2,3] */ +) +{ + int16_t nb_subfr; + float pc, pcn1, pcn2, pcn3; + + nb_subfr = st->L_frame / L_SUBFR; + + if ( st->clas_dec > UNVOICED_CLAS && st->element_mode != EVS_MONO ) + { + pc = (float) fabs( st->old_pitch_buf[nb_subfr + 3] + st->old_pitch_buf[nb_subfr + 2] - st->old_pitch_buf[nb_subfr] - st->old_pitch_buf[nb_subfr + 1] ) * 256.0f / (float) st->L_frame; + pcn1 = K_PC_DEC * pc + C_PC_DEC; + pcn1 = max( min( pcn1, 1.0f ), 0.0f ); + + pc = (float) fabs( pitch_buf[nb_subfr - 1] + pitch_buf[nb_subfr - 2] - pitch_buf[1] - pitch_buf[0] ) * 256.0f / (float) st->L_frame; + pcn2 = K_PC_DEC * pc + C_PC_DEC; + pcn2 = max( min( pcn2, 1.0f ), 0.0f ); + + pc = (float) fabs( st->old_pitch_buf[nb_subfr + 3] + st->old_pitch_buf[nb_subfr + 2] - pitch_buf[1] - pitch_buf[0] ) * 256.0f / (float) st->L_frame; + pcn3 = K_PC_DEC * pc + C_PC_DEC; + pcn3 = max( min( pcn3, 1.0f ), 0.0f ); + + if ( pcn1 + pcn2 + pcn3 < 2.5f ) + { + st->hBPF->psf_att = 0.4f; + set_s( &st->hBPF->Track_on_hist[L_TRACK_HIST - nb_subfr], 1, nb_subfr ); + } + } + + return; +} diff --git a/lib_dec/cng_dec.c b/lib_dec/cng_dec.c new file mode 100644 index 0000000000..415ac27b3a --- /dev/null +++ b/lib_dec/cng_dec.c @@ -0,0 +1,838 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void shb_CNG_decod( Decoder_State *st, const float *synth, float *shb_synth, const int16_t sid_bw ); + + +/*---------------------------------------------------------------------* + * CNG_dec() + * + * Decoding of CNG parameters + *---------------------------------------------------------------------*/ + +void CNG_dec( + Decoder_State *st, /* i/o: State structure */ + const int16_t last_element_mode, /* i : last element mode */ + float Aq[], /* o : LP coefficients */ + float *lsp_new, /* i/o: current frame LSPs */ + float *lsf_new, /* i/o: current frame LSFs */ + int16_t *allow_cn_step, /* o : allow CN step */ + int16_t *sid_bw, /* i : 0-NB/WB, 1-SWB SID */ + float *q_env ) +{ + int16_t i, enr_index, num_bits; + TD_CNG_DEC_HANDLE hTdCngDec; + float step; + float enr, weights; + int16_t m = 0; + int16_t ptr, j, k; + int16_t m1; + float tmp[HO_HIST_SIZE * M]; + int16_t burst_ho_cnt = 0; + int16_t ll, s_ptr; + float lsf_tmp[M]; + float C[M]; + float max_val[2]; + int16_t max_idx[2]; + float ftmp; + float lsp_tmp[M]; + float dev; + float max_dev; + float dist; + int16_t env_idx[2]; + float enr1; + float env[NUM_ENV_CNG]; + float tmp_env[HO_HIST_SIZE * NUM_ENV_CNG]; + int16_t LSF_Q_prediction; /* o : LSF prediction mode - just temporary variable in CNG */ + int16_t tmp1; + + hTdCngDec = st->hTdCngDec; + + /*-----------------------------------------------------------------* + * Decode CNG spectral envelope (only in SID frame) + *-----------------------------------------------------------------*/ + + if ( st->core_brate == SID_1k75 || st->core_brate == SID_2k40 ) + { + /* de-quantize the LSF vector */ + if ( st->Opt_AMR_WB ) + { + isf_dec_amr_wb( st, Aq, lsf_new, lsp_new ); + } + else + { + lsf_dec( st, 0, Aq, &LSF_Q_prediction, lsf_new, lsp_new, 0, 0 +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + NULL +#endif + ); + } + } + else + { + /* Use old LSP vector */ + mvr2r( st->lsp_old, lsp_new, M ); + mvr2r( st->lsf_old, lsf_new, M ); + } + + /* Initialize the CNG spectral envelope in case of the very first CNG frame */ + if ( st->first_CNG == 0 ) + { + mvr2r( st->lsp_old, st->lspCNG, M ); + } + + /*-----------------------------------------------------------------* + * Decode residual signal energy + *-----------------------------------------------------------------*/ + + *allow_cn_step = 0; + if ( st->core_brate == SID_1k75 || st->core_brate == SID_2k40 ) + { + if ( st->core_brate == SID_2k40 ) + { + step = STEP_SID; + } + else + { + step = STEP_AMR_WB_SID; + } + + /* intialize the energy quantization parameters */ + if ( !st->Opt_AMR_WB ) + { + num_bits = 7; + } + else + { + num_bits = 6; + } + + /* decode the energy index */ + enr_index = get_next_indice( st, num_bits ); + + if ( st->last_core_brate <= SID_2k40 || st->prev_bfi == 1 ) + { + tmp1 = hTdCngDec->old_enr_index + 20; + } + else + { + tmp1 = hTdCngDec->old_enr_index + 40; + } + if ( ( enr_index > tmp1 ) && ( hTdCngDec->old_enr_index >= 0 ) ) /* Likely bit error , and not startup */ + { + enr_index = tmp1; + enr_index = min( enr_index, 127 ); + if ( st->Opt_AMR_WB != 0 ) + { + enr_index = min( enr_index, 63 ); + } + } + + if ( st->last_core_brate > SID_2k40 && + st->first_CNG != 0 && + hTdCngDec->old_enr_index >= 0 && + enr_index > hTdCngDec->old_enr_index + 1 ) + { + *allow_cn_step = 1; + } + hTdCngDec->old_enr_index = enr_index; + if ( enr_index == 0 ) + { + enr_index = -5; + } + hTdCngDec->Enew = enr_index / step - 2.0f; + + /* find the new energy value */ + hTdCngDec->Enew = (float) ( pow( 2.0, hTdCngDec->Enew ) ); + + /* decode SID type */ + if ( st->core_brate == SID_2k40 ) + { + burst_ho_cnt = get_next_indice( st, 3 ); + + *sid_bw = get_next_indice( st, 1 ); + + if ( *sid_bw == 0 ) + { + env_idx[0] = get_next_indice( st, 6 ); + + /* get quantized res_env_details */ + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + q_env[i] = CNG_details_codebook[env_idx[0]][i]; + } + } + } + + /* Reset CNG history if CNG frame length is changed */ + if ( st->bwidth == WB && st->first_CNG && st->L_frame != st->last_CNG_L_frame ) + { + hTdCngDec->ho_hist_size = 0; + } + } + + /*---------------------------------------------------------------------* + * CNG spectral envelope update + * Find A(z) coefficients + *---------------------------------------------------------------------*/ + + if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 || st->last_core_brate == SID_2k40 ) + { + /* Reset hangover counter if not first SID period */ + if ( st->core_brate > FRAME_NO_DATA ) + { + hTdCngDec->num_ho = 0; + } + + /* Update LSPs if last SID energy not outlier or insufficient number of hangover frames */ + if ( hTdCngDec->num_ho < 3 || hTdCngDec->Enew < 1.5f * st->lp_ener ) + { + for ( i = 0; i < M; i++ ) + { + /* AR low-pass filter */ + st->lspCNG[i] = CNG_ISF_FACT * st->lspCNG[i] + ( 1 - CNG_ISF_FACT ) * lsp_new[i]; + } + } + } + else + { + /* Update CNG_mode, if allowed */ + if ( ( st->Opt_AMR_WB || st->bwidth == WB ) && ( !st->first_CNG || hTdCngDec->act_cnt2 >= MIN_ACT_CNG_UPD ) ) + { + if ( st->last_active_brate > ACELP_16k40 ) + { + st->CNG_mode = -1; + } + else + { + st->CNG_mode = get_cng_mode( st->last_active_brate ); + } + } + + /* If first sid after active burst update LSF history from circ buffer */ + burst_ho_cnt = min( burst_ho_cnt, hTdCngDec->ho_circ_size ); + hTdCngDec->act_cnt = 0; + s_ptr = hTdCngDec->ho_circ_ptr - burst_ho_cnt + 1; + if ( s_ptr < 0 ) + { + s_ptr += hTdCngDec->ho_circ_size; + } + + for ( ll = burst_ho_cnt; ll > 0; ll-- ) + { + if ( ++( hTdCngDec->ho_hist_ptr ) == HO_HIST_SIZE ) + { + hTdCngDec->ho_hist_ptr = 0; + } + /* Conversion between 12.8k and 16k LSPs */ + if ( ( st->L_frame == L_FRAME16k && hTdCngDec->ho_16k_lsp[s_ptr] == 0 ) || ( st->L_frame == L_FRAME && hTdCngDec->ho_16k_lsp[s_ptr] == 1 ) ) + { + lsp_convert_poly( &hTdCngDec->ho_lsp_circ[s_ptr * M], st->L_frame, 0 ); + } + + /* update circular buffers */ + mvr2r( &( hTdCngDec->ho_lsp_circ[s_ptr * M] ), &( hTdCngDec->ho_lsp_hist[hTdCngDec->ho_hist_ptr * M] ), M ); + mvr2r( &( hTdCngDec->ho_ener_circ[s_ptr] ), &( hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] ), 1 ); + hTdCngDec->ho_sid_bw = ( hTdCngDec->ho_sid_bw & 0x3fffffffL ) << 1; + mvr2r( &( hTdCngDec->ho_env_circ[s_ptr * NUM_ENV_CNG] ), &( hTdCngDec->ho_env_hist[hTdCngDec->ho_hist_ptr * NUM_ENV_CNG] ), NUM_ENV_CNG ); + + hTdCngDec->ho_hist_size++; + if ( hTdCngDec->ho_hist_size > HO_HIST_SIZE ) + { + hTdCngDec->ho_hist_size = HO_HIST_SIZE; + } + + s_ptr++; + + if ( s_ptr == hTdCngDec->ho_circ_size ) + { + s_ptr = 0; + } + } + + if ( hTdCngDec->ho_hist_size > 0 ) + { + *allow_cn_step |= ( st->first_CNG || st->element_mode == EVS_MONO ) && ( hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] > 4.0f * st->lp_ener ); + } + + if ( last_element_mode == IVAS_CPE_TD ) + { + *allow_cn_step = 1; + } + + if ( !*allow_cn_step && hTdCngDec->ho_hist_size > 0 ) + { + ptr = hTdCngDec->ho_hist_ptr; + mvr2r( &( hTdCngDec->ho_lsp_hist[ptr * M] ), tmp, M ); + m1 = 0; + if ( ( hTdCngDec->ho_sid_bw & 0x1L ) == 0 ) + { + mvr2r( &hTdCngDec->ho_env_hist[ptr * NUM_ENV_CNG], tmp_env, NUM_ENV_CNG ); + m1 = 1; + } + enr = W_DTX_HO[0] * hTdCngDec->ho_ener_hist[ptr]; + weights = W_DTX_HO[0]; + m = 1; + for ( k = 1; k < hTdCngDec->ho_hist_size; k++ ) + { + ptr--; + if ( ptr < 0 ) + { + ptr = HO_HIST_SIZE - 1; + } + + if ( hTdCngDec->ho_ener_hist[ptr] < hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] * BUF_H_NRG && + hTdCngDec->ho_ener_hist[ptr] > hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] * BUF_L_NRG ) + { + enr += W_DTX_HO[k] * hTdCngDec->ho_ener_hist[ptr]; + weights += W_DTX_HO[k]; + mvr2r( &hTdCngDec->ho_lsp_hist[ptr * M], &tmp[m * M], M ); + if ( ( hTdCngDec->ho_sid_bw & ( 0x1L << k ) ) == 0 ) + { + mvr2r( &hTdCngDec->ho_env_hist[ptr * NUM_ENV_CNG], &tmp_env[m1 * NUM_ENV_CNG], NUM_ENV_CNG ); + m1++; + } + m++; + } + } + + enr /= weights; + st->lp_ener = enr; + + set_f( max_val, 0.0f, 2 ); + set_s( max_idx, 0, 2 ); + + for ( i = 0; i < m; i++ ) + { + if ( st->L_frame == L_FRAME ) + { + lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_12k8 ); + ftmp = 6400.0f / ( M + 1 ); + C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); + } + else + { + lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_16k ); + ftmp = 8000.0f / ( M + 1 ); + C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); + } + + C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); + + for ( j = 0; j < M - 1; j++ ) + { + C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); + } + + C[i] *= 0.0588235f; /* 1/M+1 */ + + if ( C[i] > max_val[0] ) + { + max_val[1] = max_val[0]; + max_idx[1] = max_idx[0]; + max_val[0] = C[i]; + max_idx[0] = i; + } + else if ( C[i] > max_val[1] ) + { + max_val[1] = C[i]; + max_idx[1] = i; + } + } + + if ( m == 1 ) + { + mvr2r( tmp, lsp_tmp, M ); + } + else if ( m < 4 ) + { + for ( i = 0; i < M; i++ ) + { + lsp_tmp[i] = 0.0f; + for ( j = 0; j < m; j++ ) + { + lsp_tmp[i] += tmp[j * M + i]; + } + + lsp_tmp[i] -= tmp[max_idx[0] * M + i]; + lsp_tmp[i] /= (float) ( m - 1 ); + } + } + else + { + for ( i = 0; i < M; i++ ) + { + lsp_tmp[i] = 0.0f; + for ( j = 0; j < m; j++ ) + { + lsp_tmp[i] += tmp[j * M + i]; + } + + lsp_tmp[i] -= ( tmp[max_idx[0] * M + i] + tmp[max_idx[1] * M + i] ); + lsp_tmp[i] /= (float) ( m - 2 ); + } + } + + dist = 0.0f; + max_dev = 0.0f; + for ( i = 0; i < M; i++ ) + { + dev = (float) fabs( lsp_tmp[i] - lsp_new[i] ); + dist += dev; + if ( dev > max_dev ) + { + max_dev = dev; + } + } + + if ( dist > 0.4f || max_dev > 0.1f ) + { + for ( i = 0; i < M; i++ ) + { + st->lspCNG[i] = lsp_tmp[i]; + } + } + else + { + for ( i = 0; i < M; i++ ) + { + /* AR low-pass filter */ + st->lspCNG[i] = 0.8f * lsp_tmp[i] + ( 1 - 0.8f ) * lsp_new[i]; + } + } + if ( m1 > 0 ) + { + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + env[i] = 0; + for ( j = 0; j < m1; j++ ) + { + env[i] += tmp_env[j * NUM_ENV_CNG + i]; + } + + env[i] /= (float) m1; + env[i] = env[i] - 2 * st->lp_ener; + } + mvr2r( env, hTdCngDec->lp_env, NUM_ENV_CNG ); + } + } + else + { + mvr2r( lsp_new, st->lspCNG, M ); /* use newly analyzed parameters */ + } + } + + if ( st->core_brate == SID_1k75 || st->core_brate == SID_2k40 ) + { + /* Update hangover memory during CNG */ + if ( !*allow_cn_step && ( hTdCngDec->Enew < 1.5f * st->lp_ener ) ) + { + /* update the pointer to circular buffer of old LSP vectors */ + if ( ++( hTdCngDec->ho_hist_ptr ) == HO_HIST_SIZE ) + { + hTdCngDec->ho_hist_ptr = 0; + } + + /* update the circular buffer of old LSP vectors with the new LSP vector */ + mvr2r( lsp_new, &( hTdCngDec->ho_lsp_hist[( hTdCngDec->ho_hist_ptr ) * M] ), M ); + + /* update the hangover energy buffer */ + hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] = hTdCngDec->Enew; + + if ( st->core_brate == SID_2k40 && *sid_bw == 0 ) + { + enr1 = (float) log10( hTdCngDec->Enew * st->L_frame + 0.1f ) / (float) log10( 2.0f ); + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + /* get quantized envelope */ + env[i] = (float) ( pow( 2.0f, ( enr1 - q_env[i] ) ) + 2 * hTdCngDec->Enew ); + } + hTdCngDec->ho_sid_bw = ( hTdCngDec->ho_sid_bw & 0x3fffffffL ) << 1; + mvr2r( env, &( hTdCngDec->ho_env_hist[( hTdCngDec->ho_hist_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); + } + else if ( *sid_bw != 0 ) + { + hTdCngDec->ho_sid_bw = ( hTdCngDec->ho_sid_bw & 0x3fffffffL ) << 1; + hTdCngDec->ho_sid_bw |= 0x1L; + } + if ( ++( hTdCngDec->ho_hist_size ) > HO_HIST_SIZE ) + { + hTdCngDec->ho_hist_size = HO_HIST_SIZE; + } + } + + /* Update the frame length memory */ + st->last_CNG_L_frame = st->L_frame; + + if ( st->core_brate != SID_1k75 ) + { + hTdCngDec->num_ho = m; + } + } + + if ( st->Opt_AMR_WB ) + { + isp2a( st->lspCNG, Aq, M ); + } + else + { + lsp2a_stab( st->lspCNG, Aq, M ); + } + + for ( i = 1; i < st->L_frame / L_SUBFR; i++ ) + { + mvr2r( Aq, &Aq[i * ( M + 1 )], M + 1 ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * swb_CNG_dec() + * + * Comfort noise generation for SHB signal + *---------------------------------------------------------------------*/ + +void swb_CNG_dec( + Decoder_State *st, /* i/o: State structure */ + const float *synth, /* i : ACELP core synthesis at 32kHz */ + float *shb_synth, /* o : high-band CNG synthesis */ + const int16_t sid_bw /* i : 0-NB/WB, 1-SWB SID */ +) +{ + if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) + { + /* SHB SID decoding and CNG */ + if ( st->cng_type == LP_CNG && st->extl == SWB_CNG ) + { + shb_CNG_decod( st, synth, shb_synth, sid_bw ); + } + st->last_vad = 0; + st->hTdCngDec->burst_cnt = 0; + } + else + { + st->last_vad = 1; + st->hTdCngDec->burst_cnt++; + if ( st->hTdCngDec->burst_cnt > 10 ) + { + st->hTdCngDec->burst_cnt = 0; + } + } + + return; +} + +/*---------------------------------------------------------------------* + * shb_CNG_decod() + * + * Main routine of SHB SID decoding and CNG + *---------------------------------------------------------------------*/ + +static void shb_CNG_decod( + Decoder_State *st, /* i/o: State structure */ + const float *synth, /* i : ACELP core synthesis at 32kHz */ + float *shb_synth, /* o : high-band CNG synthesis */ + const int16_t sid_bw /* i : 0-NB/WB, 1-SWB SID */ +) +{ + int16_t i; + int16_t idx_ener; + TD_CNG_DEC_HANDLE hTdCngDec; + float shb_lpcCNG[LPC_SHB_ORDER + 1]; + float shb_lspCNG[LPC_SHB_ORDER]; + float excTmp[L_FRAME16k]; + float excSHB[L_FRAME16k]; + float ener_excSHB; + float wb_ener; + float gain; + float shb_syn16k[L_FRAME16k]; + float ftmp; + float step; + float interp; + float ener; + int16_t allow_cn_step = 0; + + hTdCngDec = st->hTdCngDec; + + if ( !st->bfi ) + { + if ( st->core_brate == SID_2k40 && sid_bw == 1 ) + { + idx_ener = get_next_indice( st, 4 ); + + if ( idx_ener == 0 ) + { + idx_ener = -15; + } + + /* de-quantization of SHB CNG parameters */ + if ( st->element_mode == EVS_MONO ) + { + hTdCngDec->last_shb_cng_ener = ( (float) idx_ener / 0.9f - 6.0f ) * (float) log10( 2.0f ) * 10.0f; + } + else + { + hTdCngDec->last_shb_cng_ener = ( (float) idx_ener / 0.7f - 6.0f ) * (float) log10( 2.0f ) * 10.0f; + } + } + } + + /* SHB spectrum estimation */ + interp = ( (float) hTdCngDec->shb_dtx_count ) / 32; + interp = min( interp, 1.0f ); + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + shb_lspCNG[i] = interp * hTdCngDec->lsp_shb_prev[i]; + shb_lspCNG[i] += ( 1 - interp ) * hTdCngDec->lsp_shb_prev_prev[i]; + } + + if ( hTdCngDec->shb_dtx_count < 1000 ) + { + hTdCngDec->shb_dtx_count++; + } + + lsp2a( shb_lpcCNG, shb_lspCNG, LPC_SHB_ORDER ); + shb_lpcCNG[0] = 1.0f; + + mvr2r( shb_lpcCNG, st->hTdCngDec->shb_lpcCNG, LPC_SHB_ORDER + 1 ); + + /* SHB energy estimation */ + wb_ener = 0.001f; + + if ( st->element_mode != IVAS_CPE_DFT ) + { + for ( i = 0; i < L_FRAME32k; i++ ) + { + wb_ener += synth[i] * synth[i]; + } + } + + wb_ener /= L_FRAME32k; + wb_ener = 10 * (float) log10( wb_ener ); + + if ( st->first_CNG == 0 ) + { + hTdCngDec->wb_cng_ener = wb_ener; + } + if ( fabs( wb_ener - hTdCngDec->wb_cng_ener ) > 12.0f ) + { + allow_cn_step = 1; + } + + if ( allow_cn_step == 1 ) + { + hTdCngDec->wb_cng_ener = wb_ener; + } + else + { + ftmp = wb_ener - hTdCngDec->wb_cng_ener; + hTdCngDec->wb_cng_ener += 0.9f * ftmp; + } + if ( st->core_brate == SID_2k40 && sid_bw == 1 && !st->bfi ) + { + hTdCngDec->last_wb_cng_ener = hTdCngDec->wb_cng_ener; + + if ( st->first_CNG == 0 ) + { + hTdCngDec->shb_cng_ener = hTdCngDec->last_shb_cng_ener; + } + } + + gain = hTdCngDec->wb_cng_ener - hTdCngDec->last_wb_cng_ener; + if ( gain > 15 ) + { + gain = 15; + } + step = gain + hTdCngDec->last_shb_cng_ener - hTdCngDec->shb_cng_ener; + if ( allow_cn_step == 1 || st->last_core_brate > SID_2k40 ) + { + hTdCngDec->shb_cng_ener += step; + } + else + { + hTdCngDec->shb_cng_ener += 0.25f * step; + } + /* generate white noise excitation */ + for ( i = 0; i < L_FRAME16k; i++ ) + { + excTmp[i] = (float) own_random( &hTdCngDec->swb_cng_seed ); + } + + /* synthesis filtering */ + syn_filt( shb_lpcCNG, LPC_SHB_ORDER, excTmp, excSHB, L_FRAME16k, st->hBWE_TD->state_lpc_syn, 1 ); + + /* synthesis signal gain shaping */ + ener_excSHB = 0.001f; + for ( i = 0; i < L_FRAME16k; i++ ) + { + ener_excSHB += excSHB[i] * excSHB[i]; + } + + if ( st->last_vad == 1 ) + { + if ( hTdCngDec->burst_cnt > 3 && st->last_core != HQ_CORE ) + { + hTdCngDec->trans_cnt = 5; + } + else + { + hTdCngDec->trans_cnt = 0; + } + } + + if ( hTdCngDec->trans_cnt > 0 ) + { + i = (int16_t) ( (float) hTdCngDec->trans_cnt / 15.0f * 255 ); + ener = hTdCngDec->shb_cng_ener + sin_table256[i] * ( hTdCngDec->last_shb_ener - hTdCngDec->shb_cng_ener ); + hTdCngDec->trans_cnt--; + } + else + { + ener = hTdCngDec->shb_cng_ener; + } + + gain = (float) sqrt( pow( 10, 0.1f * ener ) * L_FRAME16k / ener_excSHB ); + + st->hTdCngDec->shb_cng_gain = ener; + + for ( i = 0; i < L_FRAME16k; i++ ) + { + shb_syn16k[i] = gain * excSHB[i]; + } + + /* generate 32kHz SHB signal (12.8 - 14.4kHz) from 12.8kHz signal */ + GenSHBSynth( shb_syn16k, shb_synth, st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, st->L_frame, &( st->hBWE_TD->syn_dm_phase ) ); + + if ( st->output_Fs == 48000 ) + { + interpolate_3_over_2_allpass( shb_synth, L_FRAME32k, shb_synth, hTdCngDec->interpol_3_2_cng_dec ); + } + + ResetSHBbuffer_Dec( st->hBWE_TD, st->extl ); + + return; +} + + +/*-------------------------------------------------------------------* + * td_cng_dec_init() + * + * + *-------------------------------------------------------------------*/ + +void td_cng_dec_init( + DEC_CORE_HANDLE st /* i/o: decoder state structure */ +) +{ + int16_t i; + TD_CNG_DEC_HANDLE hTdCngDec; + + hTdCngDec = st->hTdCngDec; + + hTdCngDec->cng_seed = RANDOM_INITSEED; + hTdCngDec->cng_ener_seed = RANDOM_INITSEED; + hTdCngDec->cng_ener_seed1 = RANDOM_INITSEED; + hTdCngDec->old_enr_index = -1; + hTdCngDec->Enew = 0.0f; + mvr2r( st->lsp_old, st->lspCNG, M ); + hTdCngDec->last_allow_cn_step = 0; + hTdCngDec->shb_cng_ener = -6.02f; + hTdCngDec->wb_cng_ener = -6.02f; + hTdCngDec->last_wb_cng_ener = -6.02f; + hTdCngDec->last_shb_cng_ener = -6.02f; + hTdCngDec->swb_cng_seed = RANDOM_INITSEED; + hTdCngDec->ho_hist_ptr = -1; + hTdCngDec->ho_sid_bw = 0; + set_f( hTdCngDec->ho_lsp_hist, 0, HO_HIST_SIZE * M ); + set_f( hTdCngDec->ho_ener_hist, 0, HO_HIST_SIZE ); + set_f( hTdCngDec->ho_env_hist, 0, HO_HIST_SIZE * NUM_ENV_CNG ); + hTdCngDec->ho_hist_size = 0; + hTdCngDec->act_cnt = 0; + hTdCngDec->ho_circ_ptr = -1; + set_f( hTdCngDec->ho_lsp_circ, 0, HO_HIST_SIZE * M ); + set_f( hTdCngDec->ho_ener_circ, 0, HO_HIST_SIZE ); + set_f( hTdCngDec->ho_env_circ, 0, HO_HIST_SIZE * NUM_ENV_CNG ); + hTdCngDec->ho_circ_size = 0; + + set_s( hTdCngDec->ho_16k_lsp, 0, HO_HIST_SIZE ); + st->CNG_mode = -1; + hTdCngDec->act_cnt2 = 0; + hTdCngDec->num_ho = 0; + set_f( hTdCngDec->lp_env, 0.0f, NUM_ENV_CNG ); + set_f( hTdCngDec->exc_mem, 0.0f, 24 ); + set_f( hTdCngDec->exc_mem1, 0.0f, 30 ); + set_f( hTdCngDec->old_env, 0.0f, NUM_ENV_CNG ); + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + if ( st->element_mode != EVS_MONO ) + { + hTdCngDec->lsp_shb_prev[i] = 0.5f * ( (float) ( i + 1 ) ) / ( (float) ( LPC_SHB_ORDER + 1 ) ); + } + else + { + hTdCngDec->lsp_shb_prev[i] = 0.5f * ( (float) i ) / ( (float) LPC_SHB_ORDER ); + } + hTdCngDec->lsp_shb_prev_prev[i] = hTdCngDec->lsp_shb_prev[i]; + } + + hTdCngDec->shb_dtx_count = 0; + hTdCngDec->trans_cnt = 0; + hTdCngDec->burst_cnt = 0; + hTdCngDec->last_shb_ener = 0.001f; + + set_f( hTdCngDec->interpol_3_2_cng_dec, 0.0f, INTERP_3_2_MEM_LEN ); + + return; +} diff --git a/lib_dec/core_dec_init.c b/lib_dec/core_dec_init.c new file mode 100644 index 0000000000..d2d94799ef --- /dev/null +++ b/lib_dec/core_dec_init.c @@ -0,0 +1,821 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_com.h" +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * open_decoder_LPD() + * + * Initialization of state variables + *-----------------------------------------------------------------------*/ + +void open_decoder_LPD( + Decoder_State *st, + const int32_t total_brate, + const int32_t last_total_brate, + const int16_t bwidth, + const int16_t is_mct, /* i : MCT mode flag */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t last_element_mode, +#endif + const int16_t is_init /* i : indicate call from init_decoder() to avoid double TC initialization */ +) +{ + int16_t i; + int16_t mem_syn_r_size_old; + int16_t mem_syn_r_size_new; + int16_t fscaleFB; + int16_t encoderLookahead, encoderLookaheadFB; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + if ( st->codec_mode != MODE1 ) /*already updated in MODE1*/ + { + st->fscale_old = st->fscale; + } + st->sr_core = getCoreSamplerateMode2( st->element_mode, total_brate, bwidth, st->flag_ACELP16k, st->rf_flag ); + st->fscale = sr2fscale( st->sr_core ); + fscaleFB = sr2fscale( st->output_Fs ); + + /* initializing variables for frame lengths etc. right in the beginning */ + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + if ( st->ini_frame == 0 ) + { + st->last_L_frame = st->L_frame_past = st->L_frame; + } + if ( st->hTcxDec != NULL ) + { + st->hTcxDec->L_frameTCX = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); + if ( st->ini_frame == 0 ) + { + st->L_frameTCX_past = st->hTcxDec->L_frameTCX; + } + } + + st->tcxonly = getTcxonly( st->element_mode, total_brate, is_mct ); + + /* the TD TCX PLC in MODE1 still runs with 80ms subframes */ + if ( ( st->element_mode == EVS_MONO && st->L_frame == L_FRAME16k && total_brate <= ACELP_32k ) || ( st->element_mode > EVS_MONO && st->L_frame == L_FRAME16k && total_brate <= MAX_ACELP_BRATE ) || ( st->tcxonly && ( st->sr_core == 32000 || st->sr_core == 16000 ) ) ) + { + st->nb_subfr = NB_SUBFR16k; + } + else + { + st->nb_subfr = NB_SUBFR; + } + st->bits_frame = (int16_t) ( ( (float) st->L_frame / (float) st->fscale ) * (float) FSCALE_DENOM / 128.0f * (float) total_brate / 100.0f + 0.49f ); + + st->TcxBandwidth = getTcxBandwidth( bwidth ); + st->narrowBand = ( bwidth == NB ) ? 1 : 0; + encoderLookahead = ( L_LOOK_12k8 * st->fscale ) / FSCALE_DENOM; + encoderLookaheadFB = ( L_LOOK_12k8 * fscaleFB ) / FSCALE_DENOM; + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + st->pit_res_max = initPitchLagParameters( 12800, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); + hTcxDec->pit_max_TCX = (int16_t) ( st->pit_max * st->output_Fs / 12800 ); + hTcxDec->pit_min_TCX = (int16_t) ( st->pit_min * st->output_Fs / 12800 ); + } + else + { + st->pit_res_max = initPitchLagParameters( st->sr_core, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); + if ( hTcxDec != NULL ) + { + hTcxDec->pit_max_TCX = (int16_t) ( st->pit_max * st->output_Fs / st->sr_core ); + hTcxDec->pit_min_TCX = (int16_t) ( st->pit_min * st->output_Fs / st->sr_core ); + } + } + + if ( st->ini_frame == 0 ) + { + st->pit_res_max_past = st->pit_res_max; + } + + /*Preemphasis param*/ + if ( st->fscale < ( 16000 * FSCALE_DENOM ) / 12800 ) + { + st->preemph_fac = PREEMPH_FAC; /*NB*/ + } + else if ( st->fscale < ( 24000 * FSCALE_DENOM ) / 12800 ) + { + st->preemph_fac = PREEMPH_FAC_16k; /*WB*/ + } + else + { + st->preemph_fac = PREEMPH_FAC_SWB; /*SWB*/ + } + + if ( st->sr_core == INT_FS_16k ) + { + st->gamma = GAMMA16k; + } + else if ( st->sr_core > INT_FS_16k && st->element_mode == IVAS_CPE_MDCT ) + { + st->gamma = GAMMA16k; + } + else + { + st->gamma = GAMMA1; + } + + /* LPC quantization */ + if ( st->sr_core <= INT_FS_16k && st->tcxonly == 0 ) + { + st->lpcQuantization = 1; + } + else + { + st->lpcQuantization = 0; + } + + if ( st->tcxonly == 0 ) + { + st->numlpc = 1; + } + else + { + st->numlpc = 2; + } + + /* Initialize TBE */ + st->prev_coder_type = GENERIC; + if ( st->hBWE_TD != NULL ) + { + set_f( st->hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); + st->hBWE_TD->prev_tilt_para = 0.0f; + set_zero( st->hBWE_TD->cur_sub_Aq, M + 1 ); + } + + if ( st->hIGFDec != NULL ) + { + if ( !is_init || st->element_mode != IVAS_CPE_MDCT ) + { + init_tcx_cfg( st->hTcxCfg, total_brate, st->sr_core, st->output_Fs, st->L_frame, st->bwidth, st->hTcxDec->L_frameTCX, st->fscale, encoderLookahead, encoderLookaheadFB, st->preemph_fac, st->tcxonly, st->rf_flag, st->igf, st->hIGFDec->infoIGFStopFreq, st->element_mode, st->ini_frame, is_mct, st->mct_chan_mode ); + } + else + { + st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + st->hTcxCfg->last_aldo = 1; + } + } + + if ( st->hTECDec != NULL ) + { + resetTecDec( st->hTECDec ); + } + + if ( st->element_mode != IVAS_SCE ) + { + st->flag_cna = 0; + } + if ( st->ini_frame == 0 ) + { + st->flag_cna = 0; + st->last_flag_cna = 0; + } + + /* Static vectors to zero */ + if ( st->ini_frame == 0 ) + { + st->last_is_cng = 0; + + st->rate_switching_reset = 0; + + if ( st->hTcxDec != NULL ) + { + reset_tcx_overl_buf( st->hTcxDec ); + + set_zero( st->hTcxDec->syn_OverlFB, L_FRAME_MAX / 2 ); + set_zero( st->hTcxDec->old_synth, OLD_SYNTH_INTERNAL_DEC ); + + set_zero( st->hTcxDec->synth_history, L_PROT48k + L_FRAME_MAX ); + } + + set_zero( st->syn, M + 1 ); + + set_zero( st->mem_syn_r, L_SYN_MEM ); + + mem_syn_r_size_old = 0; /* just to avoid MSVC warnings */ + mem_syn_r_size_new = 0; /* just to avoid MSVC warnings */ + + st->con_tcx = 0; + } + else + { + /* Reset old_synth in case of core sampling rate switching and Mode 1/2 switching*/ + if ( st->hTcxDec != NULL && ( ( st->L_frame != st->last_L_frame ) || ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) ) ) + { + set_zero( st->hTcxDec->old_synth, OLD_SYNTH_INTERNAL_DEC ); + } + + /*Compute size of old and new memories*/ + mem_syn_r_size_old = (int16_t) ( 1.25 * st->last_L_frame / 20.f ); + mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); + + /*Reset LPC mem*/ + if ( ( st->L_frame != st->last_L_frame ) || ( st->last_core == AMR_WB_CORE ) || ( st->last_core == HQ_CORE ) ) + { + set_zero( st->mem_MA, M ); + if ( st->sr_core == INT_FS_16k ) + { + mvr2r( GEWB2_Ave, st->mem_AR, M ); + } + else + { + mvr2r( GEWB_Ave, st->mem_AR, M ); + } + } + + /*Mode 1/2 switching*/ + if ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) + { + mvr2r( st->lsp_old, st->lspold_uw, M ); + mvr2r( st->lsf_old, st->lsfold_uw, M ); + set_zero( st->syn, M ); + } + if ( st->last_core == AMR_WB_CORE ) + { + st->last_core = ACELP_CORE; + st->last_core_bfi = ACELP_CORE; + } + + if ( st->element_mode != IVAS_CPE_DFT && st->last_codec_mode == MODE1 && st->last_core == ACELP_CORE ) + { + /* Switching from Mode 1 ACELP */ + st->last_core_bfi = ACELP_CORE; + acelp_plc_mdct_transition( st ); + } + + if ( st->last_codec_mode == MODE2 && + st->L_frame != st->last_L_frame && + ( ( st->m_frame_type == SID_FRAME && st->last_core > ACELP_CORE ) || + ( st->last_core > ACELP_CORE && st->core > ACELP_CORE ) || st->prev_bfi ) ) + { + lerp( st->hHQ_core->old_outLB, st->hHQ_core->old_outLB, st->L_frame, st->last_L_frame ); + } + + /* Rate switching */ + if ( st->last_codec_mode == MODE1 && st->last_core == HQ_CORE ) + { + /* Switching from MDCT */ + + /*Reset of ACELP memories*/ + st->rate_switching_reset = 1; + st->tilt_code = TILT_CODE; + set_zero( st->old_exc, L_EXC_MEM_DEC ); + set_zero( st->syn, 1 + M ); + set_zero( st->mem_syn2, M ); + + /*OLA -> zero */ + if ( st->hTcxDec != NULL ) + { + reset_tcx_overl_buf( st->hTcxDec ); + } + + if ( st->hTcxCfg != NULL ) + { + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->syn_OverlFB, st->hTcxCfg->tcx_mdct_window_lengthFB ); + st->hTcxCfg->last_aldo = 1; /*It was previously ALDO*/ + st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + } + + /*OLA for Mode 2 TCX always reset in Mode switching cases*/ + if ( st->hHQ_core != NULL ) + { + set_f( st->hHQ_core->old_outLB, 0, st->L_frame ); + } + + st->last_core_bfi = TCX_20_CORE; + + if ( st->hPFstat != NULL ) + { + st->hPFstat->on = 0; + } + + /* reset CLDFB memories */ + cldfb_reset_memory( st->cldfbAna ); + cldfb_reset_memory( st->cldfbBPF ); + cldfb_reset_memory( st->cldfbSyn ); + if ( st->cldfbSynHB != NULL ) + { + cldfb_reset_memory( st->cldfbSynHB ); + } + } + else if ( ( st->L_frame != st->last_L_frame ) && ( st->L_frame <= L_FRAME16k ) && ( st->last_L_frame <= L_FRAME16k ) ) /* Rate switching between 12.8 and 16 kHz*/ + { + /*Interpolation of ACELP memories*/ + + /* convert quantized LSP vector */ + st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); + lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); + + lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); + mvr2r( st->lsp_old, st->lspold_uw, M ); + mvr2r( st->lsf_old, st->lsfold_uw, M ); + + if ( !st->last_con_tcx ) + { + synth_mem_updt2( st->L_frame, st->last_L_frame, st->old_exc, st->mem_syn_r, st->mem_syn2, NULL, DEC ); + } + + /*mem of deemphasis stayed unchanged.*/ + } + else if ( st->L_frame != st->last_L_frame ) /* Rate switching involving TCX only modes */ + { + /*Partial reset of ACELP memories*/ + st->rate_switching_reset = 1; + + /*reset partly some memories*/ + st->tilt_code = TILT_CODE; + if ( !st->last_con_tcx ) + { + set_zero( st->old_exc, L_EXC_MEM_DEC ); + } + set_zero( st->old_Aq_12_8, M + 1 ); + + /*Resamp others memories*/ + /*Size of LPC syn memory*/ + lerp( st->mem_syn_r + L_SYN_MEM - mem_syn_r_size_old, st->mem_syn_r + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + mvr2r( st->mem_syn_r + L_SYN_MEM - M, st->mem_syn2, M ); + } + /* update of lsf_old only needed in BASOP */ + /* else if( !st->tcxonly && (st->L_frame == L_FRAME16k) && (st->last_total_brate > ACELP_32k) ) */ + /* { */ + /* lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); */ + /* } */ + } + + if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) + { + st->rate_switching_reset = 1; + } + + if ( st->hTcxDec != NULL ) + { + st->hTcxDec->old_synth_len = 2 * st->L_frame; + st->hTcxDec->old_synth_lenFB = 2 * st->hTcxDec->L_frameTCX; + } + + /* bass pf reset */ + st->bpf_gain_param = 0; + if ( st->hBPF != NULL ) + { + set_f( st->hBPF->pst_old_syn, 0, NBPSF_PIT_MAX ); + } + + /* Formant postfilter */ + if ( st->ini_frame == 0 ) + { + /* do nothing */ + } + else if ( st->last_codec_mode == MODE2 ) + { + if ( !st->tcxonly ) + { + if ( st->hPFstat->on ) + { + lerp( st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + lerp( st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + } + else + { + set_zero( st->hPFstat->mem_stp, L_SYN_MEM ); + set_zero( st->hPFstat->mem_pf_in, L_SYN_MEM ); + st->hPFstat->reset = 1; + st->hPFstat->gain_prec = 1.f; + } + } + else if ( st->hPFstat->on ) + { + lerp( st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + lerp( st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + } + } + else + { + /*codec mode switching*/ + + /*reset post-filter except for Narrowband*/ + if ( ( (int16_t) ( st->output_Fs / FRAMES_PER_SEC ) ) != L_FRAME8k ) + { + if ( st->hPFstat != NULL ) + { + st->hPFstat->reset = 1; + if ( st->hPFstat->on != 0 ) + { + st->hPFstat->reset = 0; + lerp( st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + lerp( st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + } + } + } + else + { + /*feed last value old_synth as it is used for pre-emphasis mem*/ + if ( st->hTcxDec != NULL ) + { + st->hTcxDec->old_synth[st->hTcxDec->old_synth_len - 1] = st->syn[M]; + } + if ( st->hBPF != NULL ) + { + st->hBPF->pst_old_syn[NBPSF_PIT_MAX - 1] = st->syn[M]; + } + } + } + + /* lsf and lsp initialization */ + if ( st->ini_frame == 0 ) + { + mvr2r( st->lsp_old, st->lspold_uw, M ); + mvr2r( st->lsf_old, st->lsfold_uw, M ); + + set_zero( st->lsf_cng, M ); + } + + st->seed_tcx_plc = RANDOM_INITSEED; + st->past_gpit = 0.0f; + st->past_gcode = 0.0f; + st->gc_threshold = 0.0f; + + lsf2lsp( st->lsf_cng, st->lspold_cng, M, INT_FS_12k8 ); + lsp2a_stab( st->lspold_cng, st->Aq_cng, M ); + st->plcBackgroundNoiseUpdated = 0; + mvr2r( st->lsf_old, st->lsf_q_cng, M ); + mvr2r( st->lsf_old, st->old_lsf_q_cng, M ); + mvr2r( st->lsp_old, st->lsp_q_cng, M ); + mvr2r( st->lsp_old, st->old_lsp_q_cng, M ); + set_zero( st->mem_syn_unv_back, M ); + st->last_gain_syn_deemph = 1.f; + + if ( st->last_codec_mode == MODE1 || st->ini_frame == 0 ) + { + /* this assumes that MODE1 fades out in the frequency domain - + otherwise some data from MODE1 would be needed here */ + st->last_concealed_gain_syn_deemph = 1.f; + if ( hTcxDec != NULL ) + { + hTcxDec->conceal_eof_gain = 1.0f; + } + } + /* Post processing */ + set_zero( st->mem_Aq, NB_SUBFR16k * ( M + 1 ) ); + + st->lp_ener_bfi = 60.0f; + if ( st->ini_frame == 0 ) + { + st->prev_bfi = 0; + st->last_core_bfi = -1; + if ( st->hTcxDec != NULL ) + { + hTcxDec->tcxConceal_recalc_exc = 0; + } + } + st->prev_old_bfi = 0; + + if ( st->hTcxDec != NULL ) + { + st->hTcxDec->noise_filling_index[0] = st->hTcxDec->noise_filling_index[1] = 0; + st->hTcxDec->tnsActive[0] = st->hTcxDec->tnsActive[1] = 0; + set_f( st->hTcxDec->ltpGainMemory, 0.0f, N_LTP_GAIN_MEMS ); + } + + mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); + mvr2r( st->lsf_old, st->lsfoldbfi0, M ); + mvr2r( st->lsf_old, st->lsfoldbfi1, M ); + + st->clas_dec = UNVOICED_CLAS; + + if ( !st->last_con_tcx ) + { + st->old_enr_LP = 0.0f; /* LP filter E of last good voiced frame or local LP filter E in TD TCX PLC */ + } + + if ( st->prev_bfi ) + { + /* calculate energy at the end of the previous frame */ + if ( st->core == ACELP_CORE && st->last_core == HQ_CORE ) + { + fer_energy( st->hTcxDec->L_frameTCX, UNVOICED_CLAS, st->previoussynth, -1, &st->enr_old, 1 ); + } + } + else + { + st->last_good = UNVOICED_CLAS; /* last good received frame for concealment */ + st->enr_old = 0.0f; /* energy at the end of the previous frame */ + } + st->lp_gainc = 0.0f; + st->lp_gainp = 0.0f; + + if ( st->hTcxDec != NULL ) + { + st->hTcxDec->prev_widow_left_rect = 0; + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + /* Todo: should be considered for other stereo modes as well */ + if ( is_init || !( st->element_mode == IVAS_CPE_MDCT && st->element_mode == last_element_mode ) ) + { + st->hTcxDec->CngLevelBackgroundTrace_bfi = PLC_MIN_CNG_LEV; + st->hTcxDec->NoiseLevelIndex_bfi = PLC_MIN_STAT_BUFF_SIZE - 1; + st->hTcxDec->CurrLevelIndex_bfi = 0; + st->hTcxDec->LastFrameLevel_bfi = PLC_MIN_CNG_LEV; + set_f( st->hTcxDec->NoiseLevelMemory_bfi, PLC_MIN_CNG_LEV, PLC_MIN_STAT_BUFF_SIZE ); + + st->hTcxDec->cummulative_damping_tcx = 1.0f; + } +#else + st->hTcxDec->CngLevelBackgroundTrace_bfi = PLC_MIN_CNG_LEV; + st->hTcxDec->NoiseLevelIndex_bfi = PLC_MIN_STAT_BUFF_SIZE - 1; + st->hTcxDec->CurrLevelIndex_bfi = 0; + st->hTcxDec->LastFrameLevel_bfi = PLC_MIN_CNG_LEV; + set_f( st->hTcxDec->NoiseLevelMemory_bfi, PLC_MIN_CNG_LEV, PLC_MIN_STAT_BUFF_SIZE ); + + st->hTcxDec->cummulative_damping_tcx = 1.0f; +#endif + } + + st->cummulative_damping = 1.0f; + + for ( i = 0; i < 2 * NB_SUBFR16k + 2; i++ ) + { + st->old_pitch_buf[i] = (float) st->pit_min; + } + + for ( i = 0; i < 2 * NB_SUBFR16k + 2; i++ ) + { + st->mem_pitch_gain[i] = 1.f; + } + + st->old_fpitch = (float) st->pit_min; + + st->rate_switching_init = 1; + + st->reset_mem_AR = 0; + + /* For phase dispersion */ + set_zero( st->dispMem, 8 ); + + st->voice_fac = -1; /* purely unvoiced */ + + /* TCX-LTP */ + if ( hTcxLtpDec != NULL ) + { + tcxltp_dec_init( hTcxLtpDec, st->ini_frame, st->last_codec_mode, st->element_mode, st->pit_max, st->sr_core ); + } + + /* TCX */ + if ( hTcxDec != NULL ) + { + st->old_fpitchFB = (float) hTcxDec->pit_min_TCX; + + if ( st->ini_frame == 0 || ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) ) + { + hTcxDec->tcxltp_last_gain_unmodified = 0.f; + } + + /* TCX */ + hTcxDec->tcx_lpc_shaped_ari = getTcxLpcShapedAri( total_brate, st->rf_flag, st->element_mode ); + + hTcxDec->envWeighted = 0; + } + + if ( st->hBPF != NULL ) + { + st->hBPF->pst_mem_deemp_err = 0.0f; + } + + if ( st->tcxonly ) + { + st->p_bpf_noise_buf = NULL; + } + else + { + st->p_bpf_noise_buf = st->bpf_noise_buf; + } + + if ( bwidth == SWB && ( total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + st->tec_tfa = 1; + } + else + { + st->tec_tfa = 0; + } + + st->tec_flag = 0; + st->tfa_flag = 0; + + /* needed in decoder to read the bitstream */ + st->enableGplc = 0; + + st->flagGuidedAcelp = 0; + st->tonal_mdct_plc_active = 0; + st->T0_4th = L_SUBFR; + st->guidedT0 = st->T0_4th; + + if ( st->hPlcInfo != NULL && total_brate >= HQ_48k && st->element_mode == EVS_MONO ) + { + st->enablePlcWaveadjust = 1; + + if ( st->hTcxDec != NULL && ( st->ini_frame == 0 || last_total_brate < HQ_48k || st->last_codec_mode == MODE1 || st->force_lpd_reset ) ) + { + concealment_init( st->hTcxDec->L_frameTCX, st->hPlcInfo ); + } + } + else + { + st->enablePlcWaveadjust = 0; + } + + /* PLC: [TCX: Tonal Concealment] */ + if ( st->hTonalMDCTConc != NULL && !( st->element_mode > EVS_MONO && st->ini_frame != 0 && st->hTonalMDCTConc->nSamples == st->hTcxDec->L_frameTCX ) ) + { + st->hTonalMDCTConc->nScaleFactors = 0; + st->hTonalMDCTConc->nSamples = 0; + st->hTonalMDCTConc->lastPcmOut = 0x0; + st->hTonalMDCTConc->lastBlockData.tonalConcealmentActive = 0; + st->hTonalMDCTConc->lastBlockData.nSamples = 0; + + TonalMDCTConceal_Init( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); + } + + st->last_tns_active = 0; + st->second_last_tns_active = 0; + st->second_last_core = -1; + if ( hTcxDec != NULL ) + { + hTcxDec->tcxltp_second_last_pitch = st->old_fpitch; + hTcxDec->tcxltp_third_last_pitch = st->old_fpitch; + } + + if ( ( total_brate == ACELP_9k60 || total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + st->dec_glr = 1; + } + else + { + st->dec_glr = 0; + } + + st->dec_glr_idx = 0; + + st->VAD = 0; + if ( hTcxDec != NULL ) + { + hTcxDec->enableTcxLpc = 1; + + hTcxDec->old_gaintcx_bfi = 0.0f; + + hTcxDec->tcx_hm_LtpPitchLag = -1; + } + + if ( st->hTcxCfg != NULL ) + { + st->hTcxCfg->na_scale = 1.f; + } + + return; +} + +/*-----------------------------------------------------------------------* + * tcxltp_dec_init() + * + * Initialization TCX-LTP handle + *-----------------------------------------------------------------------*/ + +void tcxltp_dec_init( + TCX_LTP_DEC_HANDLE hTcxLtpDec, + const int16_t ini_frame, + const int16_t last_codec_mode, + const int16_t element_mode, + const int16_t pit_max, + const int32_t sr_core ) +{ + hTcxLtpDec->tcxltp_gain = 0.0f; + + hTcxLtpDec->tcxltp = getTcxLtp( sr_core ); + + if ( ini_frame == 0 || ( last_codec_mode == MODE1 && element_mode == EVS_MONO ) ) + { + + hTcxLtpDec->tcxltp_pitch_int = pit_max; + hTcxLtpDec->tcxltp_pitch_fr = 0; + + if ( ini_frame == 0 ) + { + set_f( hTcxLtpDec->tcxltp_mem_in, 0.0f, TCXLTP_MAX_DELAY ); + set_f( hTcxLtpDec->tcxltp_mem_out, 0.0f, L_FRAME48k ); + hTcxLtpDec->tcxltp_pitch_int_post_prev = 0; + hTcxLtpDec->tcxltp_pitch_fr_post_prev = 0; + hTcxLtpDec->tcxltp_gain_post_prev = 0.f; + hTcxLtpDec->tcxltp_filt_idx_prev = -1; + } + } + + return; +} + +/*-----------------------------------------------------------------------* + * reset_tcx_overl_buf() + * + * Reset TCX core overlap buffers + *-----------------------------------------------------------------------*/ + +void reset_tcx_overl_buf( + TCX_DEC_HANDLE hTcxDec /* i/o: TCX decoder handle */ +) +{ + set_zero( hTcxDec->old_syn_Overl, L_FRAME32k / 2 ); + set_zero( hTcxDec->syn_Overl_TDAC, L_FRAME32k / 2 ); + set_zero( hTcxDec->syn_Overl, L_FRAME32k / 2 ); + set_zero( hTcxDec->syn_Overl_TDACFB, L_FRAME_MAX / 2 ); + + return; +} + + +/*-----------------------------------------------------------------------* + * acelp_plc_mdct_transition() + * + * Prepare MDCT OLA memories in TCX/HQ after ACELP PLC + *-----------------------------------------------------------------------*/ + +void acelp_plc_mdct_transition( + Decoder_State *st /* i/o: Decoder state */ +) +{ + float *w; + int16_t W1, nz, delay_comp; + int16_t i; + + /*PLC*/ + if ( st->prev_bfi != 0 && st->hTcxCfg != NULL ) + { + W1 = st->hTcxCfg->tcx_mdct_window_lengthFB; + w = st->hTcxCfg->tcx_mdct_windowFB; + + nz = NS2SA( st->output_Fs, N_ZERO_MDCT_NS ); + delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); /*CLDFB delay*/ + + mvr2r( st->hHQ_core->fer_samples + delay_comp, st->hTcxDec->syn_OverlFB, st->hTcxDec->L_frameTCX / 2 ); + lerp( st->hHQ_core->fer_samples + delay_comp, st->hTcxDec->syn_Overl, st->L_frame / 2, st->hTcxDec->L_frameTCX / 2 ); /*ACELP(bfi)->TCX(rect)*/ + /*old_out needed for MODE1 routine and syn_Overl_TDAC for MODE2 routine*/ + set_f( st->hHQ_core->old_out, 0, nz ); + mvr2r( st->hHQ_core->fer_samples + delay_comp, st->hHQ_core->old_out + nz, W1 ); + + for ( i = 0; i < W1; i++ ) + { + st->hHQ_core->old_out[i + nz] *= w[W1 - 1 - i] * w[W1 - 1 - i]; + } + set_f( &st->hHQ_core->old_out[W1 + nz], 0, nz ); + + lerp( st->hHQ_core->old_out, st->hHQ_core->old_outLB, st->L_frame, st->hTcxDec->L_frameTCX ); + + mvr2r( st->hHQ_core->old_out + nz, st->hTcxDec->syn_Overl_TDACFB, st->hTcxDec->L_frameTCX / 2 ); + nz = NS2SA( st->sr_core, N_ZERO_MDCT_NS ); + mvr2r( st->hHQ_core->old_outLB + nz, st->hTcxDec->syn_Overl_TDAC, st->L_frame / 2 ); + } + + return; +} diff --git a/lib_dec/core_dec_reconf.c b/lib_dec/core_dec_reconf.c new file mode 100644 index 0000000000..201ccc0cb3 --- /dev/null +++ b/lib_dec/core_dec_reconf.c @@ -0,0 +1,195 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "rom_dec.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * reconfig_decoder_LPD() + * + * + *---------------------------------------------------------------------*/ + +void reconfig_decoder_LPD( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t bits_frame, /* i : bit budget */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t L_frame_old /* i : frame length */ +) +{ + int16_t i; + uint16_t newLen, oldLen; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + st->bits_frame = bits_frame; + + if ( bwidth == NB ) + { + st->narrowBand = 1; + } + else if ( bwidth > NB ) + { + st->narrowBand = 0; + } + + BITS_ALLOC_init_config_acelp( st->total_brate, st->narrowBand, st->nb_subfr, &( st->acelp_cfg ) ); + + /*Configuration of partial copy*/ + st->acelp_cfg_rf.mode_index = 1; + st->acelp_cfg_rf.midLpc = 0; + st->acelp_cfg_rf.midLpc_enable = 0; + st->acelp_cfg_rf.pre_emphasis = 0; + st->acelp_cfg_rf.formant_enh = 1; + st->acelp_cfg_rf.formant_tilt = 1; + st->acelp_cfg_rf.voice_tilt = 1; + st->acelp_cfg_rf.formant_enh_num = FORMANT_SHARPENING_G1; + st->acelp_cfg_rf.formant_enh_den = FORMANT_SHARPENING_G2; + + if ( st->element_mode != IVAS_SCE ) + { + st->flag_cna = getCnaPresent( st->element_mode, st->element_brate, total_brate, bwidth ); + } + + /* TCX-LTP */ + if ( hTcxLtpDec != NULL ) + { + hTcxLtpDec->tcxltp = getTcxLtp( st->sr_core ); + } + + /*Scale TCX for non-active frames to adjust loudness with ACELP*/ + if ( st->hTcxCfg != NULL ) + { + st->hTcxCfg->na_scale = 1.f; + + if ( bwidth < SWB && !( st->tcxonly ) ) + { + for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) + { + if ( ( bwidth == scaleTcxTable[i].bwmode ) && + ( total_brate >= scaleTcxTable[i].bitrateFrom ) && + ( total_brate < scaleTcxTable[i].bitrateTo ) ) + { + if ( st->rf_flag ) + { + i--; + } + st->hTcxCfg->na_scale = scaleTcxTable[i].scale; + break; + } + } + } + } + + /*if its not the first frame resample overlap buffer to new sampling rate */ + if ( st->ini_frame != 0 ) + { + if ( st->hTcxCfg != NULL && st->fscale != st->fscale_old && !( st->element_mode == EVS_MONO && st->last_codec_mode == MODE1 && st->last_core == ACELP_CORE && st->prev_bfi != 0 ) ) + /* no resempling is needed here when recovering from mode 1 + ACELP PLC, since the buffers are already sampled with the + correct sampling rate in open_decoder_LPD() */ + { + newLen = st->hTcxCfg->tcx_mdct_window_length; + oldLen = st->hTcxCfg->tcx_mdct_window_length_old; + + if ( ( st->prev_bfi && st->last_core_bfi == ACELP_CORE ) || st->last_core == ACELP_CORE ) + { + newLen = st->L_frame / 2; + oldLen = L_frame_old / 2; + } + + if ( st->hTcxDec != NULL ) + { + lerp( st->hTcxDec->old_syn_Overl, st->hTcxDec->old_syn_Overl, newLen, oldLen ); + lerp( st->hTcxDec->syn_Overl, st->hTcxDec->syn_Overl, newLen, oldLen ); + + if ( st->prev_bfi && st->last_core_bfi == ACELP_CORE ) + { + lerp( st->hTcxDec->syn_Overl_TDAC, st->hTcxDec->syn_Overl_TDAC, newLen, oldLen ); + } + } + } + + if ( st->L_frame <= L_FRAME16k ) + { + if ( st->last_L_frame <= L_FRAME16k ) + { + if ( st->L_frame != st->last_L_frame ) + { + if ( st->L_frame > st->last_L_frame ) + { + oldLen = L_SYN_MEM_CLAS_ESTIM * st->last_L_frame / st->L_frame; + newLen = L_SYN_MEM_CLAS_ESTIM; + } + else + { + oldLen = L_SYN_MEM_CLAS_ESTIM; + newLen = L_SYN_MEM_CLAS_ESTIM * st->L_frame / st->last_L_frame; + } + lerp( &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - oldLen], &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - newLen], newLen, oldLen ); + } + } + else + { + set_zero( st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + } + } + } + + if ( st->element_mode > IVAS_SCE ) + { + hTcxDec->enableTcxLpc = ( st->numlpc == 1 ) && ( st->lpcQuantization == 1 ) && ( total_brate <= LOWRATE_TCXLPC_MAX_BR_CPE || st->rf_flag ); + } + else + { + hTcxDec->enableTcxLpc = ( st->numlpc == 1 ) && ( st->lpcQuantization == 1 ) && ( total_brate <= LOWRATE_TCXLPC_MAX_BR || st->rf_flag ); + } + + if ( st->ini_frame == 0 ) + { + hTcxDec->envWeighted = 0; + } + + return; +} diff --git a/lib_dec/core_dec_switch.c b/lib_dec/core_dec_switch.c new file mode 100644 index 0000000000..637c185f32 --- /dev/null +++ b/lib_dec/core_dec_switch.c @@ -0,0 +1,233 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------* + * mode_switch_decoder_LPD() + * + * + *-------------------------------------------------------------*/ + +void mode_switch_decoder_LPD( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t bwidth, /* i : audio bandwidth */ + const int32_t total_brate, /* i : total bitrate */ + const int32_t last_total_brate, /* i : last frame total bitrate */ + const int16_t frame_size_index, /* i : index determining the frame size*/ + const int16_t is_mct /* i : MCT mode flag */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t last_element_mode +#endif +) +{ + int16_t fscale, switchWB; + int32_t sr_core; + int16_t bSwitchFromAmrwbIO; + int16_t frame_size; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + switchWB = 0; + bSwitchFromAmrwbIO = 0; + if ( st->last_core == AMR_WB_CORE ) + { + bSwitchFromAmrwbIO = 1; + } + sr_core = getCoreSamplerateMode2( st->element_mode, total_brate, bwidth, st->flag_ACELP16k, st->rf_flag ); + fscale = sr2fscale( sr_core ); + + /* set number of coded lines */ + st->hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); + + if ( ( bwidth >= WB ) && ( fscale == ( FSCALE_DENOM * 16000 ) / 12800 ) && ( fscale == st->fscale ) ) + { + if ( ( ( total_brate > ACELP_32k ) && ( st->tcxonly == 0 ) ) || ( ( total_brate <= ACELP_32k ) && ( st->tcxonly == 1 ) ) ) + { + switchWB = 1; + } + } + + if ( st->last_L_frame > L_FRAME16k && total_brate <= ACELP_32k ) + { + switchWB = 1; /*force init when coming from MODE1*/ + } + + st->igf = getIgfPresent( st->element_mode, total_brate, bwidth, st->rf_flag, st->mct_chan_mode ); + + if ( st->hIGFDec != NULL ) + { + st->hIGFDec->infoIGFStopFreq = -1; + } + + if ( st->igf && ( st->idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) ) + { + /* switch IGF configuration */ + IGFDecSetMode( st->hIGFDec, total_brate, bwidth, st->element_mode, -1, -1, st->rf_flag ); + } + + if ( fscale != st->fscale || switchWB || bSwitchFromAmrwbIO || st->last_codec_mode == MODE1 || st->force_lpd_reset ) + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + open_decoder_LPD( st, total_brate, last_total_brate, bwidth, is_mct, last_element_mode, 0 ); +#else + open_decoder_LPD( st, total_brate, last_total_brate, bwidth, is_mct, 0 ); +#endif + } + else + { + assert( fscale > ( FSCALE_DENOM / 2 ) ); + st->fscale_old = st->fscale; + st->fscale = fscale; + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + if ( st->hTcxDec != NULL ) + { + st->hTcxDec->L_frameTCX = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); + } + + if ( st->hTcxCfg != NULL ) + { + st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, total_brate, st->rf_flag ); + st->hTcxCfg->resq = getResq( total_brate ); + } + + hTcxDec->tcx_lpc_shaped_ari = getTcxLpcShapedAri( total_brate, st->rf_flag, st->element_mode ); + + if ( bwidth == NB ) + { + st->narrowBand = 1; + } + else + { + st->narrowBand = 0; + } + st->TcxBandwidth = getTcxBandwidth( bwidth ); + + if ( st->hTcxCfg != NULL ) + { + st->hTcxCfg->pCurrentTnsConfig = NULL; + st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, st->igf, st->element_mode, st->mct_chan_mode ); + } + + if ( st->hTcxCfg->fIsTNSAllowed && st->hIGFDec != NULL && st->hTcxCfg != NULL ) + { + InitTnsConfigs( bwidth, st->hTcxCfg->tcx_coded_lines, st->hTcxCfg->tnsConfig, st->hIGFDec->infoIGFStopFreq, total_brate, st->element_mode, is_mct ); + + SetAllowTnsOnWhite( st->hTcxCfg->tnsConfig, st->element_mode == IVAS_CPE_MDCT ); + } + } + + frame_size = FrameSizeConfig[frame_size_index].frame_net_bits; + reconfig_decoder_LPD( st, frame_size, bwidth, total_brate, st->last_L_frame ); + + if ( hTcxDec->envWeighted && !hTcxDec->enableTcxLpc ) + { + mvr2r( st->lspold_uw, st->lsp_old, M ); + mvr2r( st->lsfold_uw, st->lsf_old, M ); + hTcxDec->envWeighted = 0; + } + + /* update PLC LSF memories */ + lsp2lsf( st->lsp_old, st->lsfoldbfi1, M, st->sr_core ); + mvr2r( st->lsfoldbfi1, st->lsfoldbfi0, M ); + mvr2r( st->lsfoldbfi1, st->lsf_adaptive_mean, M ); + + if ( st->igf && st->hBWE_TD != NULL ) + { + /* reset TBE */ + if ( ( st->bwidth == WB && st->last_extl != WB_TBE ) || + ( st->bwidth == SWB && st->last_extl != SWB_TBE ) || + ( st->bwidth == FB && st->last_extl != FB_TBE ) ) + { + TBEreset_dec( st ); + } + else + { + set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); + set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + st->hBWE_TD->gain_prec_swb = 1.0f; + } + } + + if ( bwidth == SWB && ( total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + if ( st->tec_tfa == 0 && st->hTECDec != NULL ) + { + set_zero( st->hTECDec->loBuffer, MAX_TEC_SMOOTHING_DEG ); + } + st->tec_tfa = 1; + } + else + { + st->tec_tfa = 0; + } + + st->tec_flag = 0; + st->tfa_flag = 0; + + /* needed in decoder to read the bitstream */ + if ( bwidth >= WB && total_brate == ACELP_24k40 && st->element_mode == EVS_MONO ) + { + st->enableGplc = 1; + } + else + { + st->enableGplc = 0; + } + + if ( ( total_brate == ACELP_9k60 || total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + st->dec_glr = 1; + } + else + { + st->dec_glr = 0; + } + + st->dec_glr_idx = 0; + + return; +} diff --git a/lib_dec/core_switching_dec.c b/lib_dec/core_switching_dec.c new file mode 100644 index 0000000000..61537f76e3 --- /dev/null +++ b/lib_dec/core_switching_dec.c @@ -0,0 +1,1284 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local prototypes + *---------------------------------------------------------------------*/ + +static void core_switch_lb_upsamp( Decoder_State *st, float *output ); +static void smoothTransitionMdctStereoDtx( float synth[], const int16_t output_frame, const int16_t delay_comp ); + +/*---------------------------------------------------------------------* + * core_switching_pre_dec() + * + * Preprocessing/preparation for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + +ivas_error core_switching_pre_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t output_frame, /* i : frame length */ + const int32_t last_core_brate_st0, /* i : channel 0 last core bitrate */ + const int16_t nchan_out, /* i : number of output channels */ + const int16_t last_element_mode, /* i : last_element_mode */ + const int32_t last_element_brate /* i : last element bitrate */ +) +{ + int16_t i, oldLenClasBuff, newLenClasBuff; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Codec mode switching */ + if ( st->last_codec_mode == MODE2 || ( ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) && st->element_mode > EVS_MONO ) ) + { + mvr2r( st->mem_syn2, st->mem_syn1, M ); + set_f( st->agc_mem2, 0, 2 ); + st->mem_deemph = st->syn[M]; + st->bpf_off = 1; + if ( st->hBPF != NULL ) + { + set_f( st->hBPF->pst_old_syn, 0, NBPSF_PIT_MAX ); + st->hBPF->pst_mem_deemp_err = 0; + } + st->psf_lp_noise = st->lp_noise; + + /* reset old HB synthesis buffer */ + if ( st->last_L_frame == L_FRAME ) + { + st->old_bwe_delay = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); + } + else + { + st->old_bwe_delay = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); + } + set_f( st->hb_prev_synth_buffer, 0, NS2SA( 48000, DELAY_BWE_TOTAL_NS ) ); + + if ( st->hBWE_TD != NULL && st->last_core != ACELP_CORE ) + { + /* reset BWE memories */ + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + } + + /* reset upd_cnt */ + st->upd_cnt = MAX_UPD_CNT; + + st->igf = 0; + + if ( st->output_Fs >= 16000 && st->hBWE_zero != NULL ) + { + hf_synth_reset( st->hBWE_zero ); + } + + if ( st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + } + + if ( st->hHQ_core != NULL ) + { + set_f( st->hHQ_core->prev_env, 0, SFM_N_WB ); + set_f( st->hHQ_core->prev_normq, 0, SFM_N_WB ); + + set_f( st->hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( st->hHQ_core->last_env, 0, BANDS_MAX ); + st->hHQ_core->last_max_pos_pulse = 0; + + if ( st->output_Fs > 16000 ) + { + set_f( st->hHQ_core->prev_coeff_out, 0, L_HQ_WB_BWE ); + } + + /* pre-echo */ + st->hHQ_core->pastpre = 0; + } + + /* reset the GSC pre echo energy threshold in case of switching */ + if ( st->hGSCDec != NULL ) + { + st->hGSCDec->Last_frame_ener = (float) MAX_32; + } + + if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) + { + if ( st->element_mode == EVS_MONO ) + { + st->last_core = HQ_CORE; + mvr2r( st->hTcxDec->FBTCXdelayBuf, st->prev_synth_buffer, NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); + } + + if ( st->hHQ_core != NULL ) + { + set_f( st->hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( st->hHQ_core->last_env, 0, BANDS_MAX ); + st->hHQ_core->last_max_pos_pulse = 0; + + set_s( st->hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); + st->hHQ_core->prev_frm_hfe2 = 0; + st->hHQ_core->prev_stab_hfe2 = 0; + } + } + + if ( st->prev_bfi != 0 ) + { + int16_t delay_comp; + + /*switch off Hq Voicing as it was not updated in MODE2*/ + if ( st->hHQ_core != NULL ) + { + st->hHQ_core->oldHqVoicing = 0; + st->hHQ_core->HqVoicing = 0; + } + + delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + + if ( !st->last_con_tcx && st->last_core_bfi == ACELP_CORE && st->core == HQ_CORE ) + { + float *realBuffer[CLDFB_NO_COL_MAX_SWITCH], *imagBuffer[CLDFB_NO_COL_MAX_SWITCH]; + float realBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX]; + + for ( i = 0; i < CLDFB_NO_COL_MAX_SWITCH; i++ ) + { + set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + realBuffer[i] = realBufferTmp[i]; + imagBuffer[i] = imagBufferTmp[i]; + } + + /* CLDFB analysis of the synthesis at internal sampling rate */ + if ( ( error = cldfb_save_memory( st->cldfbAna ) ) != IVAS_ERR_OK ) + { + return error; + } + + cldfbAnalysis( st->hTcxDec->syn_Overl, realBuffer, imagBuffer, delay_comp, st->cldfbAna ); + cldfb_restore_memory( st->cldfbAna ); + + /* CLDFB synthesis of the combined signal */ + if ( ( error = cldfb_save_memory( st->cldfbSyn ) ) != IVAS_ERR_OK ) + { + return error; + } + + cldfbSynthesis( realBuffer, imagBuffer, st->hHQ_core->fer_samples, delay_comp, st->cldfbSyn ); + cldfb_restore_memory( st->cldfbSyn ); + } + + if ( !st->last_con_tcx && st->last_core_bfi == ACELP_CORE && st->core == HQ_CORE ) + { + lerp( st->hTcxDec->syn_Overl, st->hHQ_core->fer_samples + delay_comp, output_frame / 2, st->last_L_frame / 2 ); + /*Set to zero the remaining part*/ + set_f( st->hHQ_core->fer_samples + delay_comp + output_frame / 2, 0, ( output_frame / 2 ) - delay_comp ); + } + } + + st->use_acelp_preq = 0; + st->reset_mem_AR = 0; + } + + /*FEC*/ + if ( st->L_frame <= L_FRAME16k ) + { + if ( st->last_L_frame <= L_FRAME16k && st->core != HQ_CORE ) + { + if ( st->L_frame != st->last_L_frame ) + { + if ( st->L_frame > st->last_L_frame ) + { + oldLenClasBuff = L_SYN_MEM_CLAS_ESTIM * st->last_L_frame / st->L_frame; + newLenClasBuff = L_SYN_MEM_CLAS_ESTIM; + } + else + { + oldLenClasBuff = L_SYN_MEM_CLAS_ESTIM; + newLenClasBuff = L_SYN_MEM_CLAS_ESTIM * st->L_frame / st->last_L_frame; + } + lerp( &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - oldLenClasBuff], &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - newLenClasBuff], newLenClasBuff, oldLenClasBuff ); + } + } + else + { + set_zero( st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + } + } + + /* Here we only handle cases where last_ppp and last_nelp not updated when coming from CodecB or other cores + within ACELP_CORE if switching from another bitarate to vbr, last_ppp and last_nelp is always updated in the previous frame */ + if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 ) ) + { + st->last_ppp_mode_dec = 0; + st->last_nelp_mode_dec = 0; + } + + /* Handle state reset of stat_noise_uv_mod memory */ + if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 || st->last_total_brate <= PPP_NELP_2k80 ) ) + { + st->act_count = 3; + st->uv_count = 0; + } + + if ( ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && st->last_core == HQ_CORE ) || ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD || ( st->element_mode == IVAS_CPE_MDCT && last_element_mode == IVAS_CPE_DFT ) ) && nchan_out == 2 && + st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA && ( last_core_brate_st0 == FRAME_NO_DATA || last_core_brate_st0 == SID_2k40 ) ) ) + { + if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) + { + st->hPFstat->reset = 1; + } + + if ( st->L_frame == L_FRAME16k ) + { + mvr2r( TRWB2_Ave, st->lsf_old, M ); /* init of LSP */ + mvr2r( TRWB2_Ave, st->lsfoldbfi1, M ); + mvr2r( TRWB2_Ave, st->lsfoldbfi0, M ); + mvr2r( TRWB2_Ave, st->lsf_adaptive_mean, M ); + lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_16k ); + } + else + { + mvr2r( TRWB_Ave, st->lsf_old, M ); /* init of LSP */ + mvr2r( TRWB_Ave, st->lsfoldbfi1, M ); + mvr2r( TRWB_Ave, st->lsfoldbfi0, M ); + mvr2r( TRWB_Ave, st->lsf_adaptive_mean, M ); + lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); + } + + if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && nchan_out == 2 && st->core_brate > SID_2k40 && ( last_core_brate_st0 == FRAME_NO_DATA || last_core_brate_st0 == SID_2k40 ) && st->hTcxDec != NULL ) + { + /* Last frame was Stereo CNG and the synthesis memory is outdated -- reset */ + set_f( st->hTcxDec->old_syn_Overl, 0.0f, L_FRAME32k / 2 ); + set_f( st->hFdCngDec->hFdCngCom->olapBufferAna, 0.0f, FFTLEN ); + } + + set_f( st->agc_mem2, 0, 2 ); + st->mem_deemph = 0; + if ( !st->last_con_tcx ) + { + set_f( st->mem_syn2, 0.0f, M ); + } + set_f( st->mem_syn1, 0.0f, M ); + if ( st->hBWE_TD != NULL ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + } + + /* Reset ACELP parameters */ + set_zero( st->mem_MA, M ); + if ( st->sr_core == INT_FS_16k ) + { + mvr2r( GEWB2_Ave, st->mem_AR, M ); + } + else + { + mvr2r( GEWB_Ave, st->mem_AR, M ); + } + st->tilt_code = 0.0f; + st->gc_threshold = 0.0f; + set_f( st->dispMem, 0, 8 ); + + st->last_coder_type = GENERIC; + + fer_energy( output_frame, UNVOICED_CLAS, st->previoussynth, -1, &st->enr_old, 1 ); + st->lp_gainp = 0.0f; + st->lp_gainc = (float) sqrt( st->lp_ener ); + + st->last_voice_factor = 0; + st->Last_GSC_noisy_speech_flag = 0; + + /* reset CLDFB memories */ + cldfb_reset_memory( st->cldfbAna ); + cldfb_reset_memory( st->cldfbBPF ); + cldfb_reset_memory( st->cldfbSyn ); + + /* reset TBE memories */ + if ( !st->last_con_tcx && !( ( st->last_core == HQ_CORE ) && st->element_mode > EVS_MONO ) ) + { + set_f( st->old_exc, 0, L_EXC_MEM_DEC ); + } + else if ( st->L_frame < L_FRAME16k ) + { + /* resample from 16kHz to 12.8kHZ */ + synth_mem_updt2( st->L_frame, L_FRAME16k, st->old_exc, st->mem_syn_r, st->mem_syn2, NULL, DEC ); + } + + if ( st->hBWE_TD != NULL ) + { + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); + } + + if ( st->output_Fs >= 16000 && st->hBWE_zero != NULL ) + { + hf_synth_reset( st->hBWE_zero ); + } + + if ( st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + } + } + + if ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) ) + { + if ( st->hBWE_TD != NULL ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); + } + + st->tilt_code = 0.0f; + st->gc_threshold = 0.0f; + set_f( st->dispMem, 0, 8 ); + + st->last_coder_type = GENERIC; /* fcs : this might be superfluous */ + + fer_energy( output_frame, UNVOICED_CLAS, st->previoussynth, -1, &st->enr_old, 1 ); + st->lp_gainp = 0.0f; + st->lp_gainc = (float) sqrt( st->lp_ener ); + + st->last_voice_factor = 0; + st->Last_GSC_noisy_speech_flag = 0; + + if ( st->output_Fs >= 16000 && st->hBWE_zero != NULL ) + { + hf_synth_reset( st->hBWE_zero ); + } + + if ( st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + } + + if ( nchan_out == 1 && st->element_mode == IVAS_CPE_DFT && st->element_brate <= IVAS_24k4 && last_element_brate > IVAS_24k4 ) + { + /* update cldbf state with previous frame TCX synthesis when going from a bitrate with residual coding to a bitrate without it */ + int16_t offset; + offset = st->cldfbAna->p_filter_length - st->cldfbAna->no_channels; + mvr2r( st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB - offset, st->cldfbAna->cldfb_state, offset ); + } + } + + if ( st->core == HQ_CORE && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + set_f( st->hHQ_core->prev_env, 0, SFM_N_WB ); + set_f( st->hHQ_core->prev_normq, 0, SFM_N_WB ); + + set_f( st->hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( st->hHQ_core->last_env, 0, BANDS_MAX ); + st->hHQ_core->last_max_pos_pulse = 0; + + set_s( st->hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); + st->hHQ_core->prev_frm_hfe2 = 0; + st->hHQ_core->prev_stab_hfe2 = 0; + if ( st->output_Fs > 16000 ) + { + set_f( st->hHQ_core->prev_coeff_out, 0, L_HQ_WB_BWE ); + } + + set_f( st->hHQ_core->old_out, 0, output_frame ); + set_f( st->hHQ_core->old_outLB, 0, L_FRAME16k ); + } + + /* handle switching cases where preecho_sb was not called in the last frame (memory not up to date) */ + if ( st->hHQ_core != NULL ) + { + st->hHQ_core->pastpre--; + if ( st->hHQ_core->pastpre <= 0 ) + { + reset_preecho_dec( st->hHQ_core ); + } + } + + if ( st->core_brate == FRAME_NO_DATA ) + { + st->VAD = 0; + st->m_frame_type = ZERO_FRAME; + } + else if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) + { + st->VAD = 0; + st->m_frame_type = SID_FRAME; + } + else + { + st->VAD = 1; + st->m_frame_type = ACTIVE_FRAME; + } + + /*switch on CNA on active frames*/ + if ( st->element_mode == EVS_MONO ) /* for IVAS modes, st->flag_cna is set earlier */ + { + if ( st->VAD && ( ( st->core != AMR_WB_CORE && st->total_brate <= CNA_MAX_BRATE ) || ( st->core == AMR_WB_CORE && st->total_brate <= ACELP_8k85 ) ) ) + { + st->flag_cna = 1; + } + else if ( st->VAD || ( ( st->cng_type == FD_CNG ) && ( st->L_frame == L_FRAME16k ) ) ) + { + st->flag_cna = 0; + } + } + + if ( st->core == AMR_WB_CORE ) + { + st->cng_type = LP_CNG; + } + + /* Reconfigure CNG */ + if ( st->hFdCngDec && ( ( st->last_L_frame != st->L_frame ) || ( st->hFdCngDec->hFdCngCom->frameSize != st->L_frame ) || st->ini_frame == 0 || st->bwidth != st->last_bwidth ) ) + { + /* || st->last_core == AMR_WB_CORE || st->last_codec_mode == MODE2)){*/ + if ( st->core != AMR_WB_CORE ) + { + configureFdCngDec( st->hFdCngDec, st->bwidth, st->rf_flag == 1 && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate, st->L_frame, st->last_L_frame, st->element_mode ); + } + else + { + configureFdCngDec( st->hFdCngDec, WB, ACELP_8k00, st->L_frame, st->last_L_frame, st->element_mode ); + + if ( st->VAD ) + { + st->hFdCngDec->hFdCngCom->CngBitrate = st->total_brate; + } + } + if ( st->last_L_frame != st->L_frame && st->L_frame <= L_FRAME16k && st->last_L_frame <= L_FRAME16k ) + { + if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) + { + lerp( st->hFdCngDec->hFdCngCom->olapBufferAna + st->last_L_frame, st->hFdCngDec->hFdCngCom->olapBufferAna + st->L_frame, st->L_frame, st->last_L_frame ); + } + + lerp( st->hFdCngDec->hFdCngCom->olapBufferSynth2, st->hFdCngDec->hFdCngCom->olapBufferSynth2, st->L_frame * 2, st->last_L_frame * 2 ); + + if ( st->total_brate <= SID_2k40 && st->last_total_brate <= SID_2k40 ) + { + lerp( st->hFdCngDec->hFdCngCom->olapBufferSynth, st->hFdCngDec->hFdCngCom->olapBufferSynth, st->L_frame * 2, st->last_L_frame * 2 ); + + if ( st->L_frame == L_FRAME ) + { + for ( i = 0; i < st->L_frame * 2; i++ ) + { + st->hFdCngDec->hFdCngCom->olapBufferSynth[i] = st->hFdCngDec->hFdCngCom->olapBufferSynth[i] * 0.6250f; + } + } + else + { + for ( i = 0; i < st->L_frame * 2; i++ ) + { + st->hFdCngDec->hFdCngCom->olapBufferSynth[i] = st->hFdCngDec->hFdCngCom->olapBufferSynth[i] * 1.6f; + } + } + } + } + } + + return error; +} + + +/*---------------------------------------------------------------------* + * core_switching_post_dec() + * + * Postprocessing for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + +ivas_error core_switching_post_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *synth, /* i/o: output synthesis */ + float *output, /* i/o: LB synth/upsampled LB synth */ + float output_mem[], /* i : OLA memory from last TCX/HQ frame */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t output_frame, /* i : frame length */ + const int16_t core_switching_flag, /* i : ACELP->HQ switching flag */ + const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ + const int16_t nchan_out, /* i : number of output channels */ + const int16_t last_element_mode /* i : element mode of previous frame */ +) +{ + int16_t i, delay_comp, delta; + float tmpF; + float tmpDelta; + float synth_subfr_out[SWITCH_MAX_GAP], synth_subfr_bwe[SWITCH_MAX_GAP]; + float mem_synth[NS2SA( 16000, DELAY_CLDFB_NS ) + 2]; + int16_t nZeros; + int16_t offset; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( st->core == ACELP_CORE && st->bfi && st->hHQ_core != NULL && !st->con_tcx ) + { + if ( ( error = acelp_core_switch_dec_bfi( st ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* set multiplication factor according to the sampling rate */ + delta = 1; + if ( output_frame == L_FRAME16k ) + { + delta = 2; + } + else if ( output_frame == L_FRAME32k ) + { + delta = 4; + } + else if ( output_frame == L_FRAME48k ) + { + delta = 6; + } + + /* set delay compensation between HQ synthesis and ACELP synthesis */ + delay_comp = delta * HQ_DELAY_COMP; + + /* Core switching done in DFT domain afterward*/ + if ( ( st->element_mode != IVAS_CPE_DFT || use_cldfb_for_dft ) && ( !sba_dirac_stereo_flag || ( sba_dirac_stereo_flag && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) ) ) + { + if ( st->core == HQ_CORE || st->core == TCX_20_CORE || st->core == TCX_10_CORE || ( st->core == ACELP_CORE && st->bfi == 1 && st->con_tcx == 1 ) ) + { + st->use_acelp_preq = 0; + if ( st->hBWE_FD != NULL ) + { + st->hBWE_FD->mem_deemph_old_syn = 0.0f; + } + + if ( st->element_mode == EVS_MONO && st->core == HQ_CORE ) /* ACELP->HQ-CORE */ + { + if ( core_switching_flag && st->last_L_frame == st->last_L_frame_ori && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + if ( ( error = acelp_core_switch_dec( st, synth_subfr_out, synth_subfr_bwe, output_frame, core_switching_flag, mem_synth, nchan_out ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( core_switching_flag && st->last_core == HQ_CORE && st->prev_bfi ) + { + mvr2r( st->delay_buf_out, synth_subfr_out, delay_comp ); + } + } + + /* delay HQ synthesis to synchronize with ACELP synthesis */ + delay_signal( synth, output_frame, st->delay_buf_out, delay_comp ); + + if ( st->element_mode == EVS_MONO && st->core == HQ_CORE ) /* ACELP->HQ-CORE */ + { + if ( core_switching_flag && st->last_L_frame == st->last_L_frame_ori && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + core_switching_OLA( mem_synth, st->last_L_frame, st->output_Fs, synth, synth_subfr_out, synth_subfr_bwe, output_frame, st->bwidth ); + } + else if ( core_switching_flag && st->last_core == HQ_CORE && st->prev_bfi ) /* HQ | ACELP | TRANSITION with ACELP frame lost */ + { + /* Overlap between old->out[] (stocked in st->fer_samples[]) and good HQ frame on L/2 */ + nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); + tmpDelta = 1.0f / (float) ( output_frame >> 1 ); + for ( i = 0; i < ( output_frame >> 1 ); i++ ) + { + tmpF = (float) i * tmpDelta; + synth[i + delay_comp] = ( 1 - tmpF ) * st->hHQ_core->fer_samples[i + nZeros] + synth[i + delay_comp] * tmpF; + } + } + else if ( ( !core_switching_flag && st->core == HQ_CORE && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) || /* ACELP | TRANSITION | HQ with TRANSITION lost */ + ( core_switching_flag && st->prev_bfi && st->last_L_frame != st->last_L_frame_ori ) ) /* ACELP@12k8 | ACELP@16k | TRANSITION with ACELP@16k lost */ + { + /* Overlap between CELP estimation (BFI) and good HQ frame on L/2 */ + tmpDelta = 1.0f / (float) ( output_frame >> 1 ); + for ( i = 0; i < ( output_frame >> 1 ); i++ ) + { + tmpF = (float) i * tmpDelta; + synth[i] = synth[i] * tmpF + ( 1 - tmpF ) * st->hHQ_core->fer_samples[i]; + } + } + } + else if ( ( ( st->last_core == ACELP_CORE || st->last_core_bfi == ACELP_CORE ) && !( st->prev_bfi == 1 && st->last_con_tcx == 1 ) ) || st->last_core == AMR_WB_CORE ) /*ACELP->TCX/HQ*/ + { + /* if this is first active MDCT-Stereo frame after a CNG frame and output format is mono DMX, this should only be done for the zero-th channel, the other one will simply be copied over after this function */ + if ( ( ( st->last_core_brate != SID_2k40 && st->last_core_brate != FRAME_NO_DATA ) || ( st->element_mode != IVAS_CPE_DFT && st->element_mode != IVAS_CPE_TD ) || nchan_out == 1 ) && !( st->element_mode == IVAS_CPE_MDCT && st->idchan == 1 && ( nchan_out == 1 || last_element_mode == IVAS_CPE_DFT ) ) ) + { + core_switch_lb_upsamp( st, output ); + } + + mvr2r( st->previoussynth, synth, delay_comp ); + + /* Overlap between TCX-LB and TCX-FB*/ + tmpDelta = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); + for ( i = 0; i < tmpDelta; i++ ) + { + synth[i + delay_comp] = ( synth[i + delay_comp] * i + ( tmpDelta - i ) * st->previoussynth[i + delay_comp] ) / tmpDelta; + } + + if ( st->element_mode == IVAS_CPE_MDCT && st->last_core_brate <= SID_2k40 && st->core_brate > SID_2k40 ) + { + /* smooth transitions to avoid pops in car noise items */ + smoothTransitionMdctStereoDtx( synth, output_frame, delay_comp ); + } + + /* Reset memories of CLDFBs */ + if ( st->cldfbAna != NULL ) + { + if ( st->cldfbAna->no_channels * st->cldfbAna->no_col != st->L_frame ) + { + configureCldfb( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); + configureCldfb( st->cldfbBPF, min( 16000, st->L_frame * FRAMES_PER_SEC ) ); + } + + cldfb_reset_memory( st->cldfbAna ); + cldfb_reset_memory( st->cldfbBPF ); + } + cldfb_reset_memory( st->cldfbSyn ); + + /* Update memories for CLDFB ana for eventual next ACELP frame */ + if ( st->cldfbAna != NULL ) + { + delta = st->cldfbAna->no_channels; + offset = st->cldfbAna->p_filter_length - st->cldfbAna->no_channels; + for ( i = 0; i < delta; i++ ) + { + st->cldfbAna->cldfb_state[offset - delta + i] = + output[st->L_frame - delta + i] * ( (float) ( i + 1 ) ) / ( (float) delta ); + } + } + } + else if ( st->element_mode != EVS_MONO ) + { + /* Reset memories of CLDFBs */ + if ( st->cldfbAna != NULL ) + { + if ( st->cldfbAna->no_channels * st->cldfbAna->no_col != st->L_frame ) + { + configureCldfb( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); + configureCldfb( st->cldfbBPF, min( 16000, st->L_frame * FRAMES_PER_SEC ) ); + } + + cldfb_reset_memory( st->cldfbAna ); + cldfb_reset_memory( st->cldfbBPF ); + } + + if ( st->cldfbSyn != NULL ) + { + cldfb_reset_memory( st->cldfbSyn ); + } + + /* Update memories for CLDFB ana for eventual next ACELP frame */ + /* Analysis CLDF memory is fed with ramped signal for last slot */ + if ( st->cldfbAna != NULL ) + { + delta = st->cldfbAna->no_channels; + offset = st->cldfbAna->p_filter_length - st->cldfbAna->no_channels; + for ( i = 0; i < delta; i++ ) + { + st->cldfbAna->cldfb_state[offset - delta + i] = + output[st->L_frame - delta + i] * ( (float) ( i + 1 ) ) / ( (float) delta ); + } + } + } + + if ( st->hBWE_TD != NULL ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; + } + + if ( st->hHQ_core != NULL && !( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->core_brate <= HQ_32k ) ) + { + set_f( st->hHQ_core->prev_env, 0, SFM_N_WB ); + set_f( st->hHQ_core->prev_normq, 0, SFM_N_WB ); + } + + mvr2r( synth, st->previoussynth, output_frame ); + + /*Set post-filtering flag to zero*/ + if ( st->hBPF != NULL ) + { + st->hPFstat->on = 0; + } + } + else + { + /* MDCT to ACELP transition */ + if ( st->last_core == HQ_CORE || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) + { + nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); + mvr2r( st->delay_buf_out, synth, delay_comp ); /* copy the HQ/ACELP delay synchronization buffer at the beginning of ACELP frame */ + + if ( st->prev_bfi && st->hHQ_core != NULL && st->hHQ_core->HqVoicing && st->last_core == HQ_CORE ) + { + mvr2r( st->hHQ_core->fer_samples, st->hHQ_core->old_out + nZeros, NS2SA( st->output_Fs, 3000000 ) ); + } + + tmpF = 1.0f / (float) NS2SA( st->output_Fs, 3000000 ); + + if ( st->element_mode == IVAS_CPE_TD && st->hHQ_core == NULL ) + { + for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) + { + synth[i + delay_comp] = ( 1 - tmpF * (float) i ) * output_mem[i] + tmpF * (float) i * synth[i + delay_comp]; + } + } + else if ( st->element_mode == IVAS_CPE_MDCT && st->core_brate <= SID_2k40 && st->prev_bfi ) + { + for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) + { + synth[i + delay_comp] = ( 1 - tmpF * (float) i ) * st->hHQ_core->old_out[i + nZeros] * st->hTcxDec->conceal_eof_gain + tmpF * (float) i * synth[i + delay_comp]; + } + } + else + { + for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) + { + synth[i + delay_comp] = ( 1 - tmpF * (float) i ) * st->hHQ_core->old_out[i + nZeros] + tmpF * (float) i * synth[i + delay_comp]; + } + } + } + + set_f( st->delay_buf_out, 0, HQ_DELTA_MAX * HQ_DELAY_COMP ); + if ( st->hHQ_core != NULL ) + { + st->hHQ_core->oldHqVoicing = 0; + } + } + } + else + { + /* memory update needed for DFT stereo -> TD stereo switching */ + mvr2r( synth + output_frame - delay_comp, st->delay_buf_out, delay_comp ); + } + + /* reset SWB BWE buffers */ + if ( st->bws_cnt == 0 || ( st->bws_cnt > 0 && st->coder_type != INACTIVE && st->coder_type != AUDIO ) ) + { + st->attenu1 = 0.1f; + } + + if ( st->hBWE_FD != NULL && + ( ( st->last_extl != SWB_BWE && st->extl == SWB_BWE ) || ( st->last_extl != FB_BWE && st->extl == FB_BWE ) || + ( ( st->last_core == HQ_CORE || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || st->last_extl == SWB_TBE ) && st->extl < 0 && st->core == ACELP_CORE ) || ( st->last_core == ACELP_CORE && st->core == ACELP_CORE && ( ( st->prev_coder_type != INACTIVE && st->coder_type != INACTIVE ) || ( st->prev_coder_type != AUDIO && st->coder_type == AUDIO ) ) && st->bws_cnt > 0 ) ) ) + { + set_f( st->hBWE_FD->old_wtda_swb, 0, output_frame ); + + if ( st->last_extl != WB_BWE ) + { + st->hBWE_FD->prev_mode = NORMAL; + } + + st->hBWE_FD->prev_Energy = 0.0f; + st->hBWE_FD->prev_L_swb_norm = 8; + st->hBWE_FD->prev_frica_flag = 0; + set_f( st->hBWE_FD->mem_imdct, 0, L_FRAME48k ); + st->hBWE_FD->prev_td_energy = 0.0f; + st->hBWE_FD->prev_weight = 0.2f; + st->hBWE_FD->prev_fb_ener_adjust = 0.0f; + } + + /* reset WB BWE buffers */ + if ( st->last_extl != WB_BWE && st->extl == WB_BWE && st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->old_wtda_swb, 0, output_frame ); + + if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE ) + { + st->hBWE_FD->prev_mode = NORMAL; + } + + st->hBWE_FD->prev_Energy_wb = 0.0f; + st->hBWE_FD->prev_L_swb_norm = 8; + set_f( st->hBWE_FD->mem_imdct, 0, L_FRAME48k ); + st->hBWE_FD->prev_flag = 0; + } + + /* reset TBE buffers */ + if ( st->hBWE_TD != NULL ) + { + /* reset SWB TBE buffers */ + if ( ( ( st->extl == SWB_TBE || st->extl == FB_TBE || st->extl == SWB_CNG ) && + ( st->L_frame != st->last_L_frame || ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) || st->last_core == HQ_CORE ) ) || + ( st->bwidth < st->last_bwidth && st->last_extl != SWB_TBE ) || st->old_ppp_mode || ( ( st->prev_coder_type == AUDIO || st->prev_coder_type == INACTIVE ) && st->bws_cnt > 0 ) || ( st->bws_cnt == 0 && st->prev_bws_cnt == N_WS2N_FRAMES ) ) + { + swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); + + /* reset GainShape delay for SWB TBE FEC */ + set_f( st->hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); + + swb_tbe_reset_synth( st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); + + if ( output_frame == L_FRAME16k ) + { + set_f( st->hBWE_TD->mem_resamp_HB_32k, 0, 2 * ALLPASSSECTIONS_STEEP + 1 ); /* reset in case that SWB TBE layer is transmitted, but the output is 16kHz sampled */ + } + + set_f( st->hBWE_TD->int_3_over_2_tbemem_dec, 0.0f, INTERP_3_2_MEM_LEN ); + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + } + else if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && ( ( st->element_mode == IVAS_CPE_TD && st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) || ( st->element_mode != IVAS_CPE_TD && st->last_total_brate != st->total_brate ) || ( st->last_bwidth != st->bwidth ) || ( st->last_codec_mode != MODE1 ) || ( st->rf_flag != st->rf_flag_last ) ) ) + { + set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); + set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + st->hBWE_TD->gain_prec_swb = 1.0f; + } + else if ( st->hBWE_TD != NULL && ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) ) + { + TBEreset_dec( st ); + } + + /* reset FB TBE buffers */ + if ( ( st->L_frame != st->last_L_frame || st->last_extl != FB_TBE ) && st->extl == FB_TBE ) + { + set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + st->hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_synth( st->hBWE_TD->fbbwe_hpf_mem, &st->hBWE_TD->prev_fbbwe_ratio ); + } + + /* reset WB TBE buffers */ + if ( st->last_extl != WB_TBE && st->extl == WB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) + { + wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); + wb_tbe_extras_reset_synth( st->hBWE_TD->state_lsyn_filt_shb, st->hBWE_TD->state_lsyn_filt_dwn_shb, st->hBWE_TD->mem_resamp_HB ); + + set_f( st->hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); + set_f( st->hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); + set_f( st->hBWE_TD->mem_csfilt, 0, 2 ); + } + } + + /* Interp_3_2 CNG buffers reset */ + if ( st->hTdCngDec != NULL && st->output_Fs == 48000 && ( st->last_core_brate > SID_2k40 ) && ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && st->hTdCngDec != NULL ) + { + set_f( st->hTdCngDec->interpol_3_2_cng_dec, 0.0f, INTERP_3_2_MEM_LEN ); + } + + return error; +} + + +/*---------------------------------------------------------------------* + * core_switching_hq_prepare_dec() + * + * Preprocessing in the first HQ frame after ACELP frame + * Modify bit allocation for HQ core by removing ACELP subframe budget + *---------------------------------------------------------------------*/ + +void core_switching_hq_prepare_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *num_bits, /* i/o: bit budget update */ + const int16_t output_frame /* i : output frame length */ +) +{ + int32_t cbrate; + + if ( st->last_core == HQ_CORE && st->prev_bfi ) + { + mvr2r( st->hHQ_core->old_out, st->hHQ_core->fer_samples, output_frame ); + } + + /* set switching frame bitrate */ + if ( st->last_L_frame == L_FRAME ) + { + if ( st->core_brate > ACELP_24k40 ) + { + cbrate = ACELP_24k40; + } + else + { + cbrate = st->core_brate; + } + + /* subtract ACELP switching frame bits */ + if ( st->core_brate >= ACELP_11k60 ) + { + ( *num_bits )--; /* LP_FLAG bit */ + } + + *num_bits -= ACB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* pitch bits*/ + *num_bits -= gain_bits_tbl[BIT_ALLOC_IDX( cbrate, TRANSITION, 0, 0 )]; /* gain bits */ + *num_bits -= FCB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ + } + else /* L_frame == L_FRAME16k */ + { + if ( st->core_brate <= ACELP_8k00 ) + { + cbrate = ACELP_8k00; + } + else if ( st->core_brate <= ACELP_14k80 ) + { + cbrate = ACELP_14k80; + } + else + { + cbrate = min( st->core_brate, ACELP_22k60 ); + } + + /* subtract ACELP switching frame bits */ + if ( st->core_brate >= ACELP_11k60 ) + { + /* subtract one bit for LP filtering flag */ + ( *num_bits )--; + } + *num_bits -= ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* pitch bits*/ + *num_bits -= gain_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* gain bits */ + *num_bits -= FCB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ + } + + /* subtract BWE bits */ + if ( !( ( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) + { + *num_bits -= ( NOOFGAINBITS1 + AUDIODELAYBITS ); + } + + /* reset state of old_out if switching */ + set_f( st->hHQ_core->old_out, 0.0f, output_frame ); + + return; +} + + +/*---------------------------------------------------------------------* + * bandwidth_switching_detect() + * + * Classification for band-width switching + *---------------------------------------------------------------------*/ + +void bandwidth_switching_detect( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + if ( ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) || st->element_mode == IVAS_CPE_MDCT ) + { + /* there is no BWE in TD stereo secondary channel and in MDCT stereo, IGF is part of the core decoding -> no BW switching -> reset BWS counters */ + st->prev_bws_cnt = 0; + st->bws_cnt = 0; + st->bws_cnt1 = 0; + + return; + } + + /* update band-width switching counter */ + if ( st->bws_cnt1 >= N_NS2W_FRAMES ) + { + st->bws_cnt1 = 0; + } + else if ( st->total_brate > ACELP_9k60 && st->last_core_brate < ACELP_9k60 && st->bwidth == SWB && st->last_bwidth == WB ) + { + st->bws_cnt1++; + } + else if ( st->bws_cnt1 > 0 ) + { + st->bws_cnt = st->bwidth < st->last_bwidth ? 2 * ( N_NS2W_FRAMES - st->bws_cnt1 ) - 1 : 0; + st->bws_cnt1 = st->bwidth < st->last_bwidth ? 0 : ( ( st->bwidth == SWB ) ? st->bws_cnt1 + 1 : 0 ); + } + + /* update band-width switching counter */ + if ( st->bws_cnt >= N_WS2N_FRAMES ) + { + st->bws_cnt = 0; + } + else if ( st->total_brate < ACELP_9k60 && st->last_core_brate > ACELP_9k60 && st->bwidth < st->last_bwidth && st->bwidth == WB ) + { + st->bws_cnt++; + } + else if ( st->bws_cnt > 0 ) + { + st->bws_cnt1 = st->bwidth > st->last_bwidth ? ( ( N_WS2N_FRAMES - st->bws_cnt ) >> 1 ) : 0; + st->bws_cnt = st->bwidth > st->last_bwidth ? 0 : ( ( st->bwidth == WB ) ? st->bws_cnt + 1 : 0 ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * bw_switching_pre_proc() + * + * Band-width switching pre-processing + *---------------------------------------------------------------------*/ + +void bw_switching_pre_proc( + Decoder_State *st, /* i/o: decoder state structure */ + const float *old_syn_12k8_16k, /* i : ACELP core synthesis at 12.8kHz or 16kHz */ + const int32_t last_element_brate, /* i : last element bitrate */ + const int16_t nchan_out /* i : number of output channels */ +) +{ + int16_t i; + float syn_dct[L_FRAME]; + + if ( st->element_mode > EVS_MONO ) + { + if ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) && st->hBWE_FD != NULL && !( st->core_brate <= SID_2k40 && st->element_mode == IVAS_CPE_DFT && nchan_out == 2 ) && !( st->element_mode == IVAS_CPE_MDCT && nchan_out == 1 && st->idchan == 1 && last_element_brate <= IVAS_SID_4k4 ) ) + { + /* Calculate tilt of the ACELP core synthesis - needed in SWB BWE decoding */ + calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); + } + + return; + } + + if ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) ) + { + /*----------------------------------------------------------------------* + * Calculate tilt of the ACELP core synthesis + *----------------------------------------------------------------------*/ + + calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); + + /*-------------------------------------------------------------------------------* + * Calculate frequency energy of 0~3.2kHz and 3.2~6.4kHz the ACELP core synthesis + *-------------------------------------------------------------------------------*/ + + edct( old_syn_12k8_16k, syn_dct, L_FRAME, st->element_mode ); + + st->enerLL = EPSILON; + for ( i = 0; i < L_FRAME / 2; i++ ) + { + st->enerLL += syn_dct[i] * syn_dct[i]; + } + st->enerLL = (float) sqrt( st->enerLL / 128 ); + + st->enerLH = EPSILON; + for ( ; i < L_FRAME; i++ ) + { + st->enerLH += syn_dct[i] * syn_dct[i]; + } + st->enerLH = (float) sqrt( st->enerLH / 128 ); + } + else + { + if ( st->hHQ_core->old_is_transient[0] ) + { + st->enerLL = EPSILON; + for ( i = 0; i < 32; i++ ) + { + st->enerLL += st->t_audio_q[i] * st->t_audio_q[i]; + } + st->enerLL = (float) sqrt( st->enerLL / 32 ); + + st->enerLH = EPSILON; + for ( ; i < 64; i++ ) + { + st->enerLH += st->t_audio_q[i] * st->t_audio_q[i]; + } + st->enerLH = (float) sqrt( st->enerLH / 32 ); + } + else + { + st->enerLL = EPSILON; + for ( i = 0; i < L_FRAME / 2; i++ ) + { + st->enerLL += st->t_audio_q[i] * st->t_audio_q[i]; + } + st->enerLL = (float) sqrt( st->enerLL / 128 ); + + st->enerLH = EPSILON; + for ( ; i < L_FRAME; i++ ) + { + st->enerLH += st->t_audio_q[i] * st->t_audio_q[i]; + } + st->enerLH = (float) sqrt( st->enerLH / 128 ); + } + } + + if ( st->last_bwidth == 0 && st->extl <= SWB_CNG ) + { + st->prev_ener_shb = 0.0f; + if ( st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->prev_SWB_fenv, 0, SWB_FENV ); + } + } + else if ( ( ( st->core == ACELP_CORE && ( st->last_core == HQ_CORE || st->last_core == TCX_10_CORE || st->last_core == TCX_20_CORE ) ) || ( st->core == st->last_core && st->extl != st->last_extl ) ) && st->last_bwidth >= SWB ) + { + st->attenu1 = 0.1f; + } + + if ( st->last_core == HQ_CORE || ( st->last_core == ACELP_CORE && !( st->last_extl == WB_TBE || st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) && st->core_brate > ACELP_8k00 ) ) + { + st->prev_fractive = 0; + } + + return; +} + + +/*---------------------------------------------------------------------* + * core_switch_lb_upsamp() + * + * Resample HQ/TCX-LB to the output sampling rate (8/16/32/48 kHz) + *---------------------------------------------------------------------*/ + +static void core_switch_lb_upsamp( + Decoder_State *st, /* i/o: Decoder state */ + float *output /* i/o: LB synth/upsampled LB synth */ +) +{ + int16_t i; + float *realBuffer[CLDFB_OVRLP_MIN_SLOTS], *imagBuffer[CLDFB_OVRLP_MIN_SLOTS]; + float realBufferTmp[CLDFB_OVRLP_MIN_SLOTS][CLDFB_NO_CHANNELS_MAX]; + float imagBufferTmp[CLDFB_OVRLP_MIN_SLOTS][CLDFB_NO_CHANNELS_MAX]; + + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < CLDFB_OVRLP_MIN_SLOTS; i++ ) + { + set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + realBuffer[i] = realBufferTmp[i]; + imagBuffer[i] = imagBufferTmp[i]; + } + + /* check if the CLDFB works on the right sample rate */ + if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) + { + resampleCldfb( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); + + if ( st->cldfbBPF != NULL && st->L_frame <= L_FRAME16k ) + { + resampleCldfb( st->cldfbBPF, st->L_frame * FRAMES_PER_SEC ); + } + + if ( st->ini_frame > 0 ) + { + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; + } + } + + /* analysis of the synthesis at internal sampling rate */ + cldfbAnalysis( output, realBuffer, imagBuffer, CLDFB_OVRLP_MIN_SLOTS * st->cldfbAna->no_channels, st->cldfbAna ); + + /* analysis and add the BPF error signal */ + if ( st->p_bpf_noise_buf ) + { + addBassPostFilter( st->p_bpf_noise_buf, st->bpf_off ? 0 : CLDFB_OVRLP_MIN_SLOTS * st->cldfbBPF->no_channels, realBuffer, imagBuffer, st->cldfbBPF ); + } + + /* set output mask for upsampling */ + if ( st->bwidth == NB ) + { + /* set NB mask for upsampling */ + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - 10; + } + else if ( st->cldfbSyn->bandsToZero != st->cldfbSyn->no_channels - st->cldfbAna->no_channels ) + { + /* in case of BW switching, re-init to default */ + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; + } + + /* synthesis of the combined signal */ + cldfbSynthesis( realBuffer, imagBuffer, output, CLDFB_OVRLP_MIN_SLOTS * st->cldfbSyn->no_channels, st->cldfbSyn ); + + /* save synthesis - needed in case of core switching */ + if ( st->hTcxDec != NULL ) + { + mvr2r( output, st->previoussynth, st->hTcxDec->L_frameTCX ); + } + + return; +} + +/*---------------------------------------------------------------------* + * smoothTransitionMdctStereoDtx() + * + * apply smoothing to the transition part for MDCT-Stereo DTX + *---------------------------------------------------------------------*/ + +#define TRANSITION_SMOOTHING_LEN_16k 15 +#define TRANSITION_SMOOTHING_LEN_32k 31 +#define TRANSITION_SMOOTHING_LEN_48k 47 + +static void smoothTransitionMdctStereoDtx( + float synth[], /* i/o: synthesis */ + const int16_t output_frame, /* i : output frame length */ + const int16_t delay_comp /* i : delay compensation in samples */ +) +{ + int16_t i, filter_len; + float w, mem, step, fade_in; + float smoothing_input_buffer[2 * NS2SA( 48000, DELAY_CLDFB_NS ) + TRANSITION_SMOOTHING_LEN_48k]; + float smoothing_out_buffer[2 * NS2SA( 48000, DELAY_CLDFB_NS ) + TRANSITION_SMOOTHING_LEN_48k]; + + filter_len = TRANSITION_SMOOTHING_LEN_16k; + if ( output_frame == L_FRAME32k ) + { + filter_len = TRANSITION_SMOOTHING_LEN_32k; + } + else if ( output_frame == L_FRAME48k ) + { + filter_len = TRANSITION_SMOOTHING_LEN_48k; + } + + /* prepare buffer */ + for ( i = 0; i < filter_len / 2; i++ ) + { + smoothing_input_buffer[i] = synth[0]; + } + mvr2r( synth, smoothing_input_buffer + filter_len / 2, 2 * delay_comp + filter_len / 2 ); + + /* apply Mean filter */ + w = 1.f / filter_len; + mem = sum_f( smoothing_input_buffer, filter_len ); + for ( i = 0; i < 2 * delay_comp; i++ ) + { + smoothing_out_buffer[i] = w * mem; + mem = mem - smoothing_input_buffer[i] + smoothing_input_buffer[i + filter_len]; + } + + /* apply fades around transition */ + step = 1.f / delay_comp; + fade_in = 0.f; + for ( i = 0; i < delay_comp; i++ ) + { + synth[i] = smoothing_out_buffer[i] * fade_in + synth[i] * ( 1 - fade_in ); + fade_in += step; + } + + fade_in = 0.f; + for ( ; i < 2 * delay_comp; i++ ) + { + synth[i] = synth[i] * fade_in + smoothing_out_buffer[i] * ( 1 - fade_in ); + fade_in += step; + } + + return; +} diff --git a/lib_dec/d_gain2p.c b/lib_dec/d_gain2p.c new file mode 100644 index 0000000000..7a0cd8ed4f --- /dev/null +++ b/lib_dec/d_gain2p.c @@ -0,0 +1,292 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "typedef.h" +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * Mode2_gain_dec_mless + * + * Decoding of pitch and codebook gains without updating long term energies + *-------------------------------------------------------------------------*/ + +static void Mode2_gain_dec_mless( + const int16_t index, /* i : index of quantizer */ + const float code[], /* i : Innovative code vector */ + const int16_t lcode, /* i : Subframe size */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codebook gain */ + float mean_ener, /* i : mean_ener defined in open-loop (2 bits) */ + float *past_gpit, /* i/o: past gain of pitch */ + float *past_gcode, /* i/o: past energy of code */ + float *gain_inov, /* o : un-scaled innovation gain */ + const int16_t coder_type /* i : coder type for number of bits */ +) +{ + int16_t i; + float ener_code, gcode0; + const Word16 *t_qua_gain; + + ener_code = 0.0f; + + if ( coder_type == 0 ) + { + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + } + else + { + ener_code = 0.01f; + + for ( i = 0; i < lcode; i++ ) + { + ener_code += code[i] * code[i]; + } + *gain_inov = (float) sqrt( (float) lcode / ener_code ); + } + + /*-----------------------------------------------------------------* + * Select the gains quantization table + *-----------------------------------------------------------------*/ + + if ( coder_type == 0 ) + { + t_qua_gain = E_ROM_qua_gain5b_const; + } + else if ( coder_type == 1 ) + { + t_qua_gain = E_ROM_qua_gain6b_const; + } + else + { + t_qua_gain = E_ROM_qua_gain7b_const; + } + + /*-----------------------------------------------------------------* + * decode pitch gain + *-----------------------------------------------------------------*/ + + *gain_pit = (float) ( t_qua_gain[index * 2] ) / ( 1 << 14 ); + + /*-----------------------------------------------------------------* + * calculate the predicted gain code + *-----------------------------------------------------------------*/ + + if ( coder_type == 0 ) + { + ener_code = 10 * (float) log10( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + gcode0 = (float) pow( 10, 0.05 * ( mean_ener - ener_code ) ); + } + else + { + ener_code = (float) ( -10.0 * log10( (float) lcode / ener_code ) ); + gcode0 = mean_ener - ener_code; + gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); /* predicted gain */ + } + + /*-----------------------------------------------------------------* + * decode normalized codebook gain + *-----------------------------------------------------------------*/ + + *gain_code = (float) ( t_qua_gain[index * 2 + 1] ) / ( 1 << 11 ) * gcode0; + + *past_gpit = *gain_pit; + *past_gcode = *gain_code / *gain_inov; + + return; +} + + +/*---------------------------------------------------------------------* + * gain_dec_uv + * + * Decoding of pitch and codebook gains for Unvoiced mode + *---------------------------------------------------------------------*/ + +static void gain_dec_uv( + const int16_t index, /* i/o: Quantization index vector */ + const float *code, /* i : algebraic code excitation */ + const int16_t lcode, /* i : Subframe size */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codebook gain */ + float *past_gpit, /* i/o: past gain of pitch */ + float *past_gcode, /* i/o: past energy of code */ + float *gain_inov /* o : unscaled innovation gain */ +) +{ + /*-----------------------------------------------------------------* + * Innovation energy (without gain) + *-----------------------------------------------------------------*/ + + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + + /*-----------------------------------------------------------------* + * Decode pitch gain + *-----------------------------------------------------------------*/ + *gain_pit = 0.0f; + + /*-----------------------------------------------------------------* + * Decode codebook gain + *-----------------------------------------------------------------*/ + + *gain_code = (float) pow( 10.f, ( ( ( index * 1.9f ) - 30.f ) / 20.f ) ); + + /*-----------------------------------------------------------------* + * past gains for error concealment + *-----------------------------------------------------------------*/ + + *past_gpit = *gain_pit; + *past_gcode = *gain_code; + *gain_code *= *gain_inov; + + return; +} + + +/*---------------------------------------------------------------------* + * gain_dec_gacelp_uv + * + * Decoding of pitch and codebook gains for Unvoiced mode + *---------------------------------------------------------------------*/ + +void gain_dec_gacelp_uv( + int16_t index, /* i/o: Quantization index vector */ + const float *code, /* i : algebraic code excitation */ + const float *code2, /* i : algebraic code excitation */ + const float mean_ener, /* i : mean energy */ + const int16_t lcode, /* i : Subframe size */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codebook gain */ + float *gain_code2, /* o : Quantized codebook gain */ + float *past_gpit, /* i/o: past gain of pitch */ + float *past_gcode, /* i/o: past energy of code */ + float *gain_inov /* o : unscaled innovation gain */ +) +{ + float pred_nrg_frame, norm_code2; + float gcode, gcode2; + int16_t index2; + + pred_nrg_frame = (float) pow( 10.0, mean_ener / 20.0 ); + + /*-----------------------------------------------------------------* + * Prediction gains + *-----------------------------------------------------------------*/ + + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + gcode = pred_nrg_frame * ( *gain_inov ); + + norm_code2 = 1.0f / (float) sqrt( ( dotp( code2, code2, lcode ) + 0.01f ) / lcode ); + gcode2 = pred_nrg_frame * ( norm_code2 ); + + /*-----------------------------------------------------------------* + * Decode pitch gain + *-----------------------------------------------------------------*/ + + *gain_pit = 0.0f; + *past_gpit = *gain_pit; + + /*-----------------------------------------------------------------* + * past gains for error concealment + *-----------------------------------------------------------------*/ + + index2 = index >> 5; + index = index & 0x1F; + + *gain_code = (float) pow( 10.f, ( ( ( index * 1.25f ) - 20.f ) / 20.f ) ) * gcode; + *gain_code2 = (float) ( index2 * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); + + *past_gcode = *gain_code / *gain_inov; /*unscaled gain*/ + + return; +} + + +/*---------------------------------------------------------------------* + * decode_acelp_gains + * + * + *---------------------------------------------------------------------*/ + +void decode_acelp_gains( + const float *code, + const int16_t gains_mode, + const float mean_ener_code, + float *gain_pit, + float *gain_code, + int16_t **pt_indice, + float *past_gpit, + float *past_gcode, + float *gain_inov, + const int16_t L_subfr, + float *code2, + float *gain_code2 ) +{ + int16_t index = 0; + + index = **pt_indice; + ( *pt_indice )++; + + if ( ( ( gains_mode > 0 ) && ( gains_mode < 4 ) ) ) + { + /* EVS gains quantizer (5bits/subfr) */ + Mode2_gain_dec_mless( index, code, L_subfr, gain_pit, gain_code, mean_ener_code, past_gpit, past_gcode, gain_inov, gains_mode - 1 ); + } + else if ( gains_mode == 6 ) + { + /* UV gains quantizer (6bits/subfr) */ + gain_dec_uv( index, code, L_subfr, gain_pit, gain_code, past_gpit, past_gcode, gain_inov ); + } + else if ( gains_mode == 7 ) + { + /* GACELP_UV gains quantizer (7=5-2bits/subfr) */ + gain_dec_gacelp_uv( index, code, code2, mean_ener_code, L_subfr, gain_pit, gain_code, gain_code2, past_gpit, past_gcode, gain_inov ); + } + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL, "invalid gains coding for acelp!" ); + } + + return; +} diff --git a/lib_dec/dec2t32.c b/lib_dec/dec2t32.c new file mode 100644 index 0000000000..67981738fc --- /dev/null +++ b/lib_dec/dec2t32.c @@ -0,0 +1,134 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*----------------------------------------------------------------------------------* + * dec_acelp_2t32() + * + * 12 bits algebraic codebook decoder. + * 2 track x 32 positions per track = 64 samples. + * + * 12 bits --> 2 pulses in a frame of 64 samples. + * + * All pulses can have two (2) possible amplitudes: +1 or -1. + * Each pulse can have 32 possible positions. + * + * See cod2t32.c for more details of the algebraic code. + *----------------------------------------------------------------------------------*/ + +void dec_acelp_2t32( + Decoder_State *st, /* i/o: decoder state structure */ + float code[] /* o : algebraic (fixed) codebook excitation */ +) +{ + int16_t index, i0, i1; + + index = get_next_indice( st, 12 ); + + set_f( code, 0.0f, L_SUBFR ); + + /*-----------------------------------------------------------------* + * decode the positions and signs of pulses and build the codeword + *-----------------------------------------------------------------*/ + + i0 = ( ( index >> 6 ) & ( NB_POS_FCB_2T - 1 ) ) * NB_TRACK_FCB_2T; + i1 = ( ( index & ( NB_POS_FCB_2T - 1 ) ) * NB_TRACK_FCB_2T ) + 1; + code[i0] = -1.0f; + if ( ( index & 0x800 ) == 0 ) + { + code[i0] = 1.0f; + } + + code[i1] = -1.0f; + if ( ( index & 0x20 ) == 0 ) + { + code[i1] = 1.0f; + } + + return; +} + + +/*----------------------------------------------------------------------------------* + * dec_acelp_1t64() + * + * 7 bits algebraic codebook. + * 1 track x 64 positions per track = 64 samples. + * + * The pulse can have 64 possible positions and two (2) possible amplitudes: +1 or -1. + *----------------------------------------------------------------------------------*/ + +void dec_acelp_1t64( + Decoder_State *st, /* i/o: decoder state structure */ + float code[], /* o : algebraic (fixed) codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +) +{ + int16_t pos, sgn; + + /*-----------------------------------------------------------------* + * decode the positions and signs of pulses and build the codeword + *-----------------------------------------------------------------*/ + + if ( L_subfr == L_SUBFR ) + { + pos = get_next_indice( st, 7 ); + } + else /* L_subfr == 2*L_SUBFR */ + { + pos = get_next_indice( st, 8 ); + } + + sgn = -1; + if ( pos >= L_subfr ) + { + pos -= L_subfr; + sgn = 1; + } + + set_f( code, 0.0f, L_subfr ); + code[pos] = sgn; + + return; +} diff --git a/lib_dec/dec4t64.c b/lib_dec/dec4t64.c new file mode 100644 index 0000000000..3a0a6a7e50 --- /dev/null +++ b/lib_dec/dec4t64.c @@ -0,0 +1,1014 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void add_pulses( const int16_t pos[], const int16_t nb_pulse, const int16_t track, float code[] ); +static void dec_1p_N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); +static void dec_2p_2N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); +static void dec_3p_3N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); +static void dec_4p_4N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); +static void dec_4p_4N( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); +static void dec_5p_5N( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); +static void dec_6p_6N2( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); +static void fcb_decode_PI( int32_t code_index, int16_t sector_6p[], const int16_t pulse_num ); + + +/*----------------------------------------------------------------------------------* + * dec_acelp_4t64() + * + * 20, 36 bits algebraic codebook decoder. + * 4 tracks x 16 positions per track = 64 samples. + * + * 20 bits --> 4 pulses in a frame of 64 samples. + * 36 bits --> 8 pulses in a frame of 64 samples. + * + * All pulses can have two (2) possible amplitudes: +1 or -1. + * Each pulse can have sixteen (16) possible positions. + * + * See cod4t64.c for more details of the algebraic code. + *----------------------------------------------------------------------------------*/ + +void dec_acelp_4t64( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t nbbits, /* i : number of bits per codebook */ + float code[], /* o : algebraic (fixed) codebook excitation */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +) +{ + int16_t i, k, pos[7]; + int32_t L_index; + int16_t ind1[NB_TRACK_FCB_4T], ind2[NB_TRACK_FCB_4T]; + PulseConfig config; + int16_t indexing_indices[6], wordcnt, bitcnt; + + if ( !Opt_AMR_WB ) + { + switch ( nbbits ) + { + case 20: + config.nb_pulse = 4; + break; + + case 28: + config.nb_pulse = 6; + break; + + case 36: + config.nb_pulse = 8; + break; + + case 43: + config.nb_pulse = 10; + break; + + case 50: + config.nb_pulse = 12; + break; + + case 62: + config.nb_pulse = 16; + break; + + + case 87: + config.nb_pulse = 26; + break; + } + config.bits = nbbits; + config.codetrackpos = TRACKPOS_FIXED_FIRST; + + + wordcnt = nbbits >> 4; + bitcnt = nbbits & 15; + for ( i = 0; i < wordcnt; i++ ) + { + indexing_indices[i] = get_next_indice( st, 16 ); + } + if ( bitcnt ) + { + indexing_indices[i] = get_next_indice( st, bitcnt ); + } + D_ACELP_indexing( code, config, NB_TRACK_FCB_4T, indexing_indices, &st->BER_detect ); + } + else + { + for ( i = 0; i < L_SUBFR; i++ ) + { + code[i] = 0.0f; + } + + if ( nbbits == 20 ) + { + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = get_next_indice( st, 5 ); + dec_1p_N1( L_index, 4, 0, pos ); + add_pulses( pos, 1, k, code ); + } + } + else if ( nbbits == 36 ) + { + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = get_next_indice( st, 9 ); + dec_2p_2N1( L_index, 4, 0, pos ); + add_pulses( pos, 2, k, code ); + } + } + else if ( nbbits == 44 ) /* AMR-WB pulse indexing */ + { + for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) + { + L_index = get_next_indice( st, 13 ); + dec_3p_3N1( L_index, 4, 0, pos ); + add_pulses( pos, 3, k, code ); + } + + for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = get_next_indice( st, 9 ); + dec_2p_2N1( L_index, 4, 0, pos ); + add_pulses( pos, 2, k, code ); + } + } + else if ( nbbits == 52 ) /* AMR-WB pulse indexing */ + { + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = get_next_indice( st, 13 ); + dec_3p_3N1( L_index, 4, 0, pos ); + add_pulses( pos, 3, k, code ); + } + } + else if ( nbbits == 64 ) /* AMR-WB pulse indexing */ + { + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + ind1[k] = get_next_indice( st, 2 ); + } + + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + ind2[k] = get_next_indice( st, 14 ); + } + + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = ( ( ind1[k] << 14 ) + ind2[k] ); + dec_4p_4N( L_index, 4, 0, pos ); + add_pulses( pos, 4, k, code ); + } + } + else if ( nbbits == 72 ) + { + for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) + { + ind1[k] = get_next_indice( st, 10 ); + } + + for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) + { + ind1[k] = get_next_indice( st, 2 ); + } + + for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) + { + ind2[k] = get_next_indice( st, 10 ); + } + + for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) + { + ind2[k] = get_next_indice( st, 14 ); + } + + for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) + { + L_index = ( ( ind1[k] << 10 ) + ind2[k] ); + dec_5p_5N( L_index, 4, 0, pos ); + add_pulses( pos, 5, k, code ); + } + + for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = ( ( ind1[k] << 14 ) + ind2[k] ); + dec_4p_4N( L_index, 4, 0, pos ); + add_pulses( pos, 4, k, code ); + } + } + else if ( nbbits == 88 ) + { + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + ind1[k] = get_next_indice( st, 11 ); + } + + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + ind2[k] = get_next_indice( st, 11 ); + } + + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = ( ( ind1[k] << 11 ) + ind2[k] ); + dec_6p_6N2( L_index, 4, 0, pos ); + add_pulses( pos, 6, k, code ); + } + } + } + + return; +} + +/*-------------------------------------------------------* + * add_pulses() + * + * Add decoded pulses to the codeword + *-------------------------------------------------------*/ + +static void add_pulses( + const int16_t pos[], /* i : pulse position */ + const int16_t nb_pulse, /* i : nb. of pulses */ + const int16_t track, /* i : no. of the tracks */ + float code[] /* i/o: decoded codevector */ +) +{ + int16_t i, k; + + for ( k = 0; k < nb_pulse; k++ ) + { + i = ( ( pos[k] & ( NB_POS_FCB_4T - 1 ) ) * NB_TRACK_FCB_4T ) + track; + if ( ( pos[k] & NB_POS_FCB_4T ) == 0 ) + { + code[i] += 1.0f; + } + else + { + code[i] -= 1.0f; + } + } + + return; +} + +/*-------------------------------------------------------* + * dec_1p_N1() + * + * Decode 1 pulse with N+1 bits + *-------------------------------------------------------*/ + +void dec_1p_N1( + const int32_t index, /* i : quantization index */ + const int16_t N, /* i : nb. of bits */ + const int16_t offset, /* i : pulse position offset */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t i, pos1; + int32_t mask; + + mask = ( ( 1 << N ) - 1 ); + + pos1 = (int16_t) ( index & mask ) + offset; + + i = (int16_t) ( index >> N ) & 1; + + if ( i == 1 ) + { + pos1 += NB_POS_FCB_4T; + } + + pos[0] = pos1; + + return; +} + +/*-------------------------------------------------------* + * dec_2p_2N1() + * + * Decode 2 pulses with 2*N+1 bits: + *-------------------------------------------------------*/ + +void dec_2p_2N1( + const int32_t index, /* i : quantization index */ + const int16_t N, /* i : nb. of bits */ + const int16_t offset, /* i : pulse position offset */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t i, pos1, pos2; + int32_t mask; + + mask = ( ( 1 << N ) - 1 ); + + pos1 = (int16_t) ( ( index >> N ) & mask ) + offset; + i = (int16_t) ( index >> ( 2 * N ) ) & 1; + pos2 = (int16_t) ( index & mask ) + offset; + if ( ( pos2 - pos1 ) < 0 ) + { + if ( i == 1 ) + { + pos1 += NB_POS_FCB_4T; + } + else + { + pos2 += NB_POS_FCB_4T; + } + } + else + { + if ( i == 1 ) + { + pos1 += NB_POS_FCB_4T; + pos2 += NB_POS_FCB_4T; + } + } + + pos[0] = pos1; + pos[1] = pos2; + + return; +} + +/*-------------------------------------------------------* + * dec_3p_3N1() + * + * Decode 3 pulses with 3*N+1 bits: + *-------------------------------------------------------*/ + +static void dec_3p_3N1( + const int32_t index, /* i : quantization index */ + const int16_t N, /* i : nb. of bits */ + const int16_t offset, /* i : pulse position offset */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t j; + int32_t idx, mask; + + mask = ( ( 1 << ( ( 2 * N ) - 1 ) ) - 1 ); + idx = index & mask; + j = offset; + + if ( ( ( index >> ( ( 2 * N ) - 1 ) ) & 1 ) == 1 ) + { + j += ( 1 << ( N - 1 ) ); + } + + dec_2p_2N1( idx, N - 1, j, pos ); + mask = ( ( 1 << ( N + 1 ) ) - 1 ); + idx = ( index >> ( 2 * N ) ) & mask; + dec_1p_N1( idx, N, offset, pos + 2 ); + + return; +} + +/*-------------------------------------------------------* + * dec_4p_4N1() + * + * Decode 4 pulses with 4*N+1 bits: + *-------------------------------------------------------*/ + +static void dec_4p_4N1( + const int32_t index, /* i : quantization index */ + const int16_t N, /* i : nb. of bits */ + const int16_t offset, /* i : pulse position offset */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t j; + int32_t mask, idx; + + mask = ( ( 1 << ( ( 2 * N ) - 1 ) ) - 1 ); + idx = index & mask; + j = offset; + + if ( ( ( index >> ( ( 2 * N ) - 1 ) ) & 1 ) == 1 ) + { + j += ( 1 << ( N - 1 ) ); + } + + dec_2p_2N1( idx, N - 1, j, pos ); + mask = ( ( 1 << ( ( 2 * N ) + 1 ) ) - 1 ); + idx = ( index >> ( 2 * N ) ) & mask; + dec_2p_2N1( idx, N, offset, pos + 2 ); + + return; +} + +/*-------------------------------------------------------* + * dec_4p_4N() + * + * Decode 4 pulses with 4*N bits: + *-------------------------------------------------------*/ + +static void dec_4p_4N( + const int32_t index, /* i : quantization index */ + const int16_t N, /* i : nb. of bits */ + const int16_t offset, /* i : pulse position offset */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t j, n_1; + + n_1 = N - 1; + j = offset + ( 1 << n_1 ); + switch ( ( index >> ( ( 4 * N ) - 2 ) ) & 3 ) + { + case 0: + { + if ( ( ( index >> ( ( 4 * n_1 ) + 1 ) ) & 1 ) == 0 ) + { + dec_4p_4N1( index, n_1, offset, pos ); + } + else + { + dec_4p_4N1( index, n_1, j, pos ); + } + break; + } + case 1: + { + dec_1p_N1( ( index >> ( ( 3 * n_1 ) + 1 ) ), n_1, offset, pos ); + dec_3p_3N1( index, n_1, j, pos + 1 ); + break; + } + case 2: + { + dec_2p_2N1( ( index >> ( ( 2 * n_1 ) + 1 ) ), n_1, offset, pos ); + dec_2p_2N1( index, n_1, j, pos + 2 ); + break; + } + case 3: + { + dec_3p_3N1( ( index >> ( n_1 + 1 ) ), n_1, offset, pos ); + dec_1p_N1( index, n_1, j, pos + 3 ); + break; + } + } + + return; +} + +/*-------------------------------------------------------* + * dec_5p_5N() + * + * Decode 5 pulses with 5*N bits: + *-------------------------------------------------------*/ + +static void dec_5p_5N( + const int32_t index, /* i : quantization index */ + const int16_t N, /* i : nb. of bits */ + const int16_t offset, /* i : pulse position offset */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t j, n_1; + int32_t idx; + + n_1 = N - 1; + j = offset + ( 1 << n_1 ); + idx = ( index >> ( ( 2 * N ) + 1 ) ); + + if ( ( ( index >> ( ( 5 * N ) - 1 ) ) & 1 ) == 0 ) + { + dec_3p_3N1( idx, n_1, offset, pos ); + dec_2p_2N1( index, N, offset, pos + 3 ); + } + else + { + dec_3p_3N1( idx, n_1, j, pos ); + dec_2p_2N1( index, N, offset, pos + 3 ); + } + + return; +} + +/*-------------------------------------------------------* + * dec_6p_6N2() + * + * Decode 6 pulses with 6*N+2 bits: + *-------------------------------------------------------*/ + +static void dec_6p_6N2( + const int32_t index, /* i : quantization index */ + const int16_t N, /* i : nb. of bits */ + const int16_t offset, /* i : pulse position offset */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t j, n_1, offsetA, offsetB; + + n_1 = N - 1; + j = offset + ( 1 << n_1 ); + offsetA = offsetB = j; + if ( ( ( index >> ( ( 6 * N ) - 5 ) ) & 1 ) == 0 ) + { + offsetA = offset; + } + else + { + offsetB = offset; + } + + switch ( ( index >> ( ( 6 * N ) - 4 ) ) & 3 ) + { + case 0: + { + dec_5p_5N( index >> N, n_1, offsetA, pos ); + dec_1p_N1( index, n_1, offsetA, pos + 5 ); + break; + } + + case 1: + { + dec_5p_5N( index >> N, n_1, offsetA, pos ); + dec_1p_N1( index, n_1, offsetB, pos + 5 ); + break; + } + + case 2: + { + dec_4p_4N( index >> ( ( 2 * n_1 ) + 1 ), n_1, offsetA, pos ); + dec_2p_2N1( index, n_1, offsetB, pos + 4 ); + break; + } + + case 3: + { + dec_3p_3N1( index >> ( ( 3 * n_1 ) + 1 ), n_1, offset, pos ); + dec_3p_3N1( index, n_1, j, pos + 3 ); + break; + } + } + + return; +} + +/*---------------------------------------------------------------------* + * fcb_decode_class_all_p() + * + * Get the position number and the pulse number on every position + *---------------------------------------------------------------------*/ + +/*! r: The index of pulse positions */ +static int32_t fcb_decode_class_all_p( + int32_t *code_index, /* i : fcb index information */ + int16_t sector_6p_num[], /* o : Number of pulses for each position */ + const int16_t pulse_num, /* i : Number of pulses on a track. */ + int16_t *pos_num /* o : Number of positions which have pulses on the track.*/ +) +{ + int16_t i, j, k; + int32_t mn9; + int16_t pulse_pos_num; + for ( i = 1; i <= pulse_num; i++ ) + { + if ( ( *code_index ) < PI_offset[pulse_num][i] ) + { + break; + } + } + + ( *code_index ) -= PI_offset[pulse_num][i - 1]; + + pulse_pos_num = pulse_num - i + 2; + j = (int16_t) ( ( *code_index ) >> pulse_pos_num ); + + k = (int16_t) ( j / PI_select_table[16][pulse_pos_num] ); + mn9 = j - k * PI_select_table[16][pulse_pos_num]; + if ( ( pulse_pos_num < pulse_num ) && ( pulse_pos_num > 1 ) ) + { + for ( i = 0; i < pulse_pos_num; i++ ) + { + sector_6p_num[i] = 1; + } + sector_6p_num[k]++; + } + else + { + if ( pulse_pos_num == 1 ) + { + sector_6p_num[0] = (int16_t) pulse_num; + } + else + { + for ( i = 0; i < pulse_num; i++ ) + { + sector_6p_num[i] = 1; + } + } + } + + *pos_num = pulse_pos_num; + + return mn9; +} + +/*---------------------------------------------------------------------* + * fcb_decode_position() + * + * Decode the pulse position not same to the others + *---------------------------------------------------------------------*/ + +static void fcb_decode_position( + int32_t index, /* i : position index information */ + int16_t pos_vector[], /* o : the positon vector */ + const int16_t pos_num /* i : number of positions */ +) +{ + int16_t i, l; + int32_t k; + int16_t temp; + + k = index; + l = 0; + temp = pos_num; + for ( i = 0; i < pos_num - 1; i++ ) + { + k = PI_select_table[16 - l][temp] - k; + + for ( ; PI_select_table[16 - l][temp] >= k; l += 2 ) + { + ; + } + + if ( k > PI_select_table[17 - l][temp] ) + { + l--; + } + + k = PI_select_table[17 - l][temp--] - k; + pos_vector[i] = (int16_t) ( l - 1 ); + } + pos_vector[i] = (int16_t) ( l + k ); + + return; +} + +/*---------------------------------------------------------------------* + * fcb_decode_PI() + * + * decode fcb pulse index + *---------------------------------------------------------------------*/ + +/*! r: return pulse position number */ +static void fcb_decode_PI( + int32_t code_index, /* i : fcb index information */ + int16_t sector_6p[], /* o : decoded pulse position */ + const int16_t pulse_num /* i : pulse number for the track */ +) +{ + int16_t i, l; + int32_t mn9; + int16_t pulse_pos_num; + int16_t sector_6p_temp[7], sector_6p_num_temp[7]; + int16_t *sector_6p_ptr0; + int16_t *sector_6p_ptr1; + + /*get the position number and the pulse number on every position */ + mn9 = fcb_decode_class_all_p( &code_index, sector_6p_num_temp, pulse_num, &pulse_pos_num ); + + /* rebuild the vector*/ + /* decode the pulse position not same to the others*/ + fcb_decode_position( mn9, sector_6p_temp, pulse_pos_num ); + for ( i = pulse_pos_num - 1; i >= 0; i-- ) + { + sector_6p_temp[i] += ( ( code_index & 0x1 ) << 4 ); + code_index = code_index >> 1; + } + + /* decode the pulse position maybe some pulse position same to other pulse */ + sector_6p_ptr0 = §or_6p[pulse_num]; + sector_6p_ptr1 = §or_6p_temp[pulse_pos_num]; + for ( i = 0; i < pulse_pos_num; i++ ) + { + sector_6p_ptr1--; + for ( l = 0; l < sector_6p_num_temp[pulse_pos_num - 1 - i]; l++ ) + { + *--sector_6p_ptr0 = *sector_6p_ptr1; + } + } + + return; +} + +/*---------------------------------------------------------------------* + * Read FCB index * + *---------------------------------------------------------------------*/ + +void D_ACELP_decode_43bit( + uint16_t idxs[], + float code[], + int16_t *pulsestrack ) +{ + int32_t ps[8]; + int16_t pos[7]; + int32_t joint_index; + int32_t joint_offset = 3611648; /*offset for 3 pulses per track*/ + + set_f( code, 0.0f, L_SUBFR ); + + ps[3] = idxs[0] & 0x1ff; + ps[2] = ( ( idxs[1] & 3 ) << 7 ) + ( idxs[0] >> 9 ); + joint_index = ( ( idxs[2] << 16 ) + idxs[1] ) >> 2; + + if ( joint_index >= joint_offset ) + { + joint_index = joint_index - joint_offset; + } + + ps[0] = joint_index / 5472; + ps[1] = joint_index - ps[0] * 5472; + fcb_decode_PI( ps[0], pos, 3 ); + add_pulses( pos, pulsestrack[0], 0, code ); + fcb_decode_PI( ps[1], pos, 3 ); + add_pulses( pos, pulsestrack[1], 1, code ); + + dec_2p_2N1( ps[2], 4, 0, pos ); + add_pulses( pos, pulsestrack[2], 2, code ); + dec_2p_2N1( ps[3], 4, 0, pos ); + add_pulses( pos, pulsestrack[3], 3, code ); + + return; +} + +/*-------------------------------------------------------* + * dec_1p_N1() + * + * Decode 1 pulse with N+1 bits + *-------------------------------------------------------*/ + +static void dec_1p_N1_L_subfr( + const int32_t index, /* i : quantization index */ + const int16_t nb_pos, /* i : number of positions */ + const int16_t N, /* i : nb. of bits */ + int16_t pos[] /* o : pulse position */ +) +{ + int16_t i, pos1; + int32_t mask; + + mask = ( ( 1 << N ) - 1 ); + pos1 = (int16_t) ( index & mask ); + i = (int16_t) ( index >> N ) & 1; + + if ( i == 1 ) + { + pos1 += nb_pos; + } + + pos[0] = pos1; + + return; +} + +/*-------------------------------------------------------* + * add_pulses() + * + * Add decoded pulses to the codeword + *-------------------------------------------------------*/ + +static void add_pulses_L_subfr( + const int16_t nb_pos, /* i : number of positions */ + const int16_t pos[], /* i : pulse position */ + const int16_t nb_pulse, /* i : nb. of pulses */ + const int16_t track, /* i : no. of the tracks */ + float code[] /* i/o: decoded codevector */ +) +{ + int16_t i, k; + + for ( k = 0; k < nb_pulse; k++ ) + { + i = ( ( pos[k] & ( nb_pos - 1 ) ) * NB_TRACK_FCB_4T ) + track; + if ( ( pos[k] & nb_pos ) == 0 ) + { + code[i] += 1.0f; + } + else + { + code[i] -= 1.0f; + } + } + + return; +} + +/*----------------------------------------------------------------------------------* + * dec_acelp_fast() + * + * fast algebraic codebook decoder + *----------------------------------------------------------------------------------*/ + +void dec_acelp_fast( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t cdk_index, /* i : codebook index */ + float code[], /* o : algebraic (fixed) codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +) +{ + int16_t k, pos[7], skip_track; + int32_t L_index; + PulseConfig config; + + skip_track = -1; + set_f( code, 0.0f, L_subfr ); + + if ( L_subfr == L_SUBFR ) + { + config = PulseConfTable[cdk_index]; + + if ( cdk_index == 2 ) + { + dec_acelp_2t32( st, code ); + } + else if ( config.nb_pulse == 2 ) + { + /* 10 bits, 2 pulses, 4 tracks 1010 (used only even tracks) */ + for ( k = 0; k < NB_TRACK_FCB_4T - 1; k += 2 ) + { + L_index = get_next_indice( st, 5 ); + dec_1p_N1( L_index, 4, 0, pos ); + add_pulses( pos, 1, k, code ); + } + } + else if ( config.nb_pulse == 3 ) + { + if ( config.codetrackpos == TRACKPOS_FIXED_FIRST ) + { + /* 15 bits, 3 pulses, 4 tracks 1110 fixed track to first ? */ + for ( k = 0; k < NB_TRACK_FCB_4T - 1; k++ ) + { + L_index = get_next_indice( st, 5 ); + dec_1p_N1( L_index, 4, 0, pos ); + add_pulses( pos, 1, k, code ); + } + } + else if ( config.codetrackpos == TRACKPOS_FREE_THREE ) + { + /* 17 bits, 3 pulses, 4 tracks (used all tracks) - 1110, 1101, 1011, 0111 */ + skip_track = get_next_indice( st, 2 ); + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + if ( k != skip_track ) + { + L_index = get_next_indice( st, 5 ); + dec_1p_N1( L_index, 4, 0, pos ); + add_pulses( pos, 1, k, code ); + } + } + } + } + else + { + if ( config.bits == 20 ) + { + skip_track = -1; + } + else if ( config.codetrackpos == TRACKPOS_FIXED_FIRST ) + { + skip_track = 0; + } + else if ( config.codetrackpos == TRACKPOS_FREE_ONE ) + { + skip_track = get_next_indice( st, 2 ); + } + + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + if ( k == skip_track ) + { + L_index = get_next_indice( st, 9 ); + dec_2p_2N1( L_index, 4, 0, pos ); + add_pulses( pos, 2, k, code ); + } + else + { + L_index = get_next_indice( st, 5 ); + dec_1p_N1( L_index, 4, 0, pos ); + add_pulses( pos, 1, k, code ); + } + } + } + } + else /* L_subfr == 2*L_SUBFR */ + { + config.bits = cdk_index; + + if ( cdk_index == 14 ) + { + /* 14 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ + int16_t index, i0, i1; + + index = get_next_indice( st, 14 ); + + i0 = ( ( index >> 7 ) & ( NB_POS_FCB_2T_128 - 1 ) ) * NB_TRACK_FCB_2T; + i1 = ( ( index & ( NB_POS_FCB_2T_128 - 1 ) ) * NB_TRACK_FCB_2T ) + 1; + + code[i0] = -1.0f; + if ( ( index & 0x2000 ) == 0 ) + { + code[i0] = 1.0f; + } + + code[i1] = -1.0f; + if ( ( index & 0x40 ) == 0 ) + { + code[i1] = 1.0f; + } + } + else if ( cdk_index == 12 ) + { + /* 12 bits, 2 pulses, 4 tracks: 1010 (used only even tracks) */ + for ( k = 0; k < NB_TRACK_FCB_4T - 1; k += 2 ) + { + L_index = get_next_indice( st, 6 ); + dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); + add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); + } + } + else if ( cdk_index == 18 ) + { + /* 18 bits, 3 pulses, 4 tracks: 1110 (used first three tracks) */ + for ( k = 0; k < NB_TRACK_FCB_4T - 1; k++ ) + { + L_index = get_next_indice( st, 6 ); + dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); + add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); + } + } + else if ( cdk_index == 20 ) + { + /* 20 bits, 3 pulses, 4 tracks (used all tracks): 1110, 1101, 1011, 0111 */ + skip_track = get_next_indice( st, 2 ); + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + if ( k != skip_track ) + { + L_index = get_next_indice( st, 6 ); + dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); + add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); + } + } + } + else if ( cdk_index == 24 ) + { + /* 24 bits, 4 pulses, 4 tracks: 1111 */ + for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) + { + L_index = get_next_indice( st, 6 ); + dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); + add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); + } + } + } + + return; +} diff --git a/lib_dec/dec_LPD.c b/lib_dec/dec_LPD.c new file mode 100644 index 0000000000..422104ac43 --- /dev/null +++ b/lib_dec/dec_LPD.c @@ -0,0 +1,799 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "cnst.h" +#include "basop_proto_func.h" +#include "stat_com.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * decoder_LPD() + * + * Core decoder MODE2 + *--------------------------------------------------------------------*/ + +void decoder_LPD( + Decoder_State *st, /* i/o: decoder memory state pointer */ + float signal_out[], /* o : signal with LPD delay (7 subfrs) */ + float signal_outFB[], /* o : synthesis @output_FS */ + int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ + float *bpf_noise_buf, /* i/o: BPF noise buffer */ + int16_t bfi, /* i : BFI flag */ + int16_t *bitsRead, /* o : number of read bits */ + int16_t param[], /* o : buffer of parameters */ + float *pitch_buf, /* i/o: floating pitch values for each subfr*/ + float *voice_factors, /* o : voicing factors */ + float *ptr_bwe_exc /* o : excitation for SWB TBE */ +) +{ + int16_t *prm; + int16_t param_lpc[NPRM_LPC_NEW]; + float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; + float *synth; + float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; + float *synthFB; + float lsf[( NB_DIV + 1 ) * M], lsp[( NB_DIV + 1 ) * M], lspmid[M], lsfmid[M]; + float Aq[( NB_SUBFR16k + 1 ) * ( M + 1 )]; + int16_t pitch[NB_SUBFR16k]; + float pit_gain[NB_SUBFR16k]; + int16_t i, k; + int16_t past_core_mode, offset; + int16_t L_frame, nb_subfr, L_frameTCX; + Word16 Aind[M + 1], lspind[M]; + float tmp_old[M + 1], tmp_new[M + 1], enr_old, enr_new; + float lspnew_uw[NB_DIV * M], lsfnew_uw[NB_DIV * M]; + float lsf_q_1st_rf[M], lsf_q_rf[M], lsp_q_rf[M]; + float lsp_diff; + int16_t LSF_Q_prediction; /* o : LSF prediction mode */ + int16_t tcx_last_overlap_mode, tcx_current_overlap_mode; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + /*--------------------------------------------------------------------------------* + * Initializations + *--------------------------------------------------------------------------------*/ + + prm = param; /* to avoid compilation warnings */ + LSF_Q_prediction = -1; /* to avoid compilation warnings */ + enr_old = 0.0f; + enr_new = 0.0f; + + if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) + { + bfi = st->bfi; + } + + past_core_mode = st->last_core_bfi; + + /*Adjust bit per frame*/ + if ( !bfi ) + { + st->bits_frame_core = st->bits_frame - ( *bitsRead ); + } + + /* Framing parameters */ + L_frame = st->L_frame; + L_frameTCX = st->hTcxDec->L_frameTCX; + nb_subfr = st->nb_subfr; + + /* Initialize pointers */ + synth = synth_buf + st->hTcxDec->old_synth_len; + synthFB = synth_bufFB + st->hTcxDec->old_synth_lenFB; + mvr2r( st->hTcxDec->old_synth, synth_buf, st->hTcxDec->old_synth_len ); + mvr2r( st->hTcxDec->old_synthFB, synth_bufFB, st->hTcxDec->old_synth_lenFB ); + set_zero( synth, L_FRAME_PLUS + M ); + set_zero( synthFB, L_FRAME_PLUS + M ); + + + /*For post-processing (post-filtering+blind BWE)*/ + if ( st->tcxonly == 0 ) + { + /* for bass postfilter */ + set_s( pitch, L_SUBFR, nb_subfr ); + set_zero( pit_gain, nb_subfr ); + } + + /* PLC: [Common: Memory update] + * PLC: Update the number of lost frames */ + if ( bfi ) + { + st->nbLostCmpt++; + } + + /*--------------------------------------------------------------------------------* + * BITSTREAM DECODING + *--------------------------------------------------------------------------------*/ + + if ( !bfi ) + { + st->second_last_core = st->last_core; + tcx_last_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode; + tcx_current_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; + + dec_prm( st, param, param_lpc, total_nbbits, bitsRead ); + + if ( !st->rate_switching_init && ( st->last_codec_mode ) == MODE2 && st->BER_detect ) + { + st->coder_type = st->last_coder_type; + st->last_core = st->second_last_core; + st->hTcxCfg->tcx_last_overlap_mode = tcx_last_overlap_mode; + st->hTcxCfg->tcx_curr_overlap_mode = tcx_current_overlap_mode; + st->bfi = 1; + bfi = 1; + st->flagGuidedAcelp = 0; + st->nbLostCmpt++; + st->core_brate = st->last_core_brate; + st->core = GetPLCModeDecision( st ); + } + } + else + { + if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) + { + dec_prm( st, param, param_lpc, total_nbbits, bitsRead ); + } + + if ( st->nbLostCmpt > 1 ) + { + st->flagGuidedAcelp = 0; + } + /* PLC: [Common: mode decision] + * PLC: Decide which Concealment to use. Update pitch lags if needed */ + st->core = GetPLCModeDecision( st ); + } + + /* PLC: [Common: Memory update] + * PLC: Update the number of lost frames */ + if ( !bfi ) + { + if ( st->prev_bfi == 1 ) + { + st->prev_nbLostCmpt = st->nbLostCmpt; + } + else + { + st->prev_nbLostCmpt = 0; + } + + st->nbLostCmpt = 0; + } + + /*--------------------------------------------------------------------------------* + * LPC PARAMETERS + *--------------------------------------------------------------------------------*/ + + if ( ( bfi == 0 ) || ( bfi == 1 && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) ) + { + if ( st->use_partial_copy && ( st->rf_frame_type < RF_TCXFD || st->rf_frame_type > RF_TCXTD2 ) ) + { + if ( hTcxDec->envWeighted ) + { + mvr2r( st->lspold_uw, st->lsp_old, M ); + mvr2r( st->lsfold_uw, st->lsf_old, M ); + hTcxDec->envWeighted = 0; + } + + /* first stage VQ, 8 bits; reuse TCX high rate codebook */ + set_f( lsf_q_1st_rf, 0.0f, M ); + vlpc_1st_dec( param_lpc[0], lsf_q_1st_rf, st->sr_core ); + + /* second stage vq */ + /* quantized lsf from two stages */ + v_add( lsf_q_1st_rf, lsf_q_diff_cb_8b_rf + M * param_lpc[1], lsf_q_rf, M ); + + v_sort( lsf_q_rf, 0, M - 1 ); + reorder_lsf( lsf_q_rf, LSF_GAP, M, st->sr_core ); + + /* current n-th ACELP frame and its corresponding partial copy */ + lsf2lsp( lsf_q_rf, lsp_q_rf, M, st->sr_core ); + + /* copy the old and current lsfs and lsps into the lsf[] and lsp[] buffer for interpolation */ + mvr2r( st->lsf_old, &lsf[0], M ); + mvr2r( st->lsp_old, &lsp[0], M ); + mvr2r( lsf_q_rf, &lsf[M], M ); + mvr2r( lsp_q_rf, &lsp[M], M ); + lsp_diff = 0.0f; + + for ( i = 0; i < M; i++ ) + { + lsp_diff += (float) fabs( lsp[i + M] - lsp[i] ); + } + + if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && lsp_diff < 1.6f && lsp_diff > 0.12f && st->next_coder_type == GENERIC && !st->prev_use_partial_copy && st->last_coder_type == UNVOICED && st->rf_frame_type >= RF_GENPRED ) + { + mvr2r( &lsp[0], &lsp[M], M ); + } + + /* update mem_MA and mem_AR memories */ + lsf_update_memory( st->narrowBand, &lsf[M], st->mem_MA, st->mem_MA ); + mvr2r( &lsf[M], st->mem_AR, M ); + + for ( k = 0; k < st->numlpc; ++k ) + { + mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); + mvr2r( &lsf[( k + 1 ) * M], &lsfnew_uw[k * M], M ); + } + } + else if ( ( hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) || ( bfi && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) ) + { + int16_t tcx_lpc_cdk; + + if ( bfi && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) + { + tcx_lpc_cdk = tcxlpc_get_cdk( GENERIC ); + } + else + { + tcx_lpc_cdk = tcxlpc_get_cdk( st->coder_type ); + } + + mvr2r( st->lsf_old, &lsf[0], M ); + mvr2r( st->lsp_old, &lsp[0], M ); + + D_lsf_tcxlpc( param_lpc, &lsf[M], lspind, st->narrowBand, tcx_lpc_cdk, st->mem_MA ); + + lsf2lsp( &lsf[M], &lsp[M], M, st->sr_core ); + + lsf_update_memory( st->narrowBand, &lsf[M], st->mem_MA, st->mem_MA ); + mvr2r( &lsf[M], st->mem_AR, M ); + hTcxDec->envWeighted = 1; + + E_LPC_lsp_unweight( &lsp[M], lspnew_uw, lsfnew_uw, 1.0f / st->gamma ); + } + else + { + if ( hTcxDec->envWeighted ) + { + mvr2r( st->lspold_uw, st->lsp_old, M ); + mvr2r( st->lsfold_uw, st->lsf_old, M ); + hTcxDec->envWeighted = 0; + } + + /* Unquantize LPC */ + if ( st->core == TCX_20_CORE ) + { + lpc_unquantize( st, lsf, lsp, param_lpc, lspmid, lsfmid, AUDIO, &LSF_Q_prediction ); + } + else + { + lpc_unquantize( st, lsf, lsp, param_lpc, lspmid, lsfmid, st->coder_type, &LSF_Q_prediction ); + + if ( st->prev_use_partial_copy && st->last_core == ACELP_CORE && st->core == ACELP_CORE && st->prev_rf_frame_type >= RF_GENPRED && st->coder_type == UNVOICED ) + { + if ( st->lpcQuantization && st->acelp_cfg.midLpc ) + { + mvr2r( lspmid, &lsp[0], M ); + mvr2r( &lsp[M], lspmid, M ); + } + } + } + + for ( k = 0; k < st->numlpc; ++k ) + { + mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); + mvr2r( &lsf[( k + 1 ) * M], &lsfnew_uw[k * M], M ); + } + } + + /* PLC: [LPD: LPC concealment] built the moving average for the LPC concealment */ + for ( k = 0; k < st->numlpc; k++ ) + { + for ( i = 0; i < M; i++ ) + { + st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsfnew_uw[k * M + i] ) / 3; + st->lsfoldbfi1[i] = st->lsfoldbfi0[i]; + st->lsfoldbfi0[i] = lsfnew_uw[k * M + i]; + } + } + } + else + { + /* PLC: [LPD: LPC concealment] Conceal the LPC from the lost frame */ + const float *lsfBase; /* base for differential lsf coding */ + + if ( st->tcxonly == 0 || st->core < TCX_10_CORE ) + { + st->numlpc = 1; + } + else + { + st->numlpc = 2; + } + + if ( st->nbLostCmpt == 1 ) + { + mvr2r( st->lsf_old, st->old_lsf_q_cng, M ); + mvr2r( st->lsp_old, st->old_lsp_q_cng, M ); + } + + + lsfBase = PlcGetlsfBase( st->lpcQuantization, st->narrowBand, st->sr_core ); + + dlpc_bfi( st->L_frame, lsfnew_uw, st->lsfold_uw, st->last_good, st->nbLostCmpt, st->mem_MA, st->mem_AR, &( st->stab_fac ), st->lsf_adaptive_mean, st->numlpc, st->lsf_cng, st->plcBackgroundNoiseUpdated, st->lsf_q_cng, st->old_lsf_q_cng, lsfBase ); + + hTcxDec->envWeighted = 0; + + mvr2r( st->lspold_uw, lsp, M ); + mvr2r( st->lsfold_uw, lsf, M ); + + for ( k = 0; k < st->numlpc; k++ ) + { + mvr2r( &lsfnew_uw[k * M], &lsf[( k + 1 ) * M], M ); + + lsf2lsp( &lsf[( k + 1 ) * M], &lsp[( k + 1 ) * M], M, st->sr_core ); + lsf2lsp( st->lsf_q_cng, st->lsp_q_cng, M, st->sr_core ); + + mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); + } + } + + /*--------------------------------------------------------------* + * Rate switching + *---------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + mvr2r( &( lsf[M] ), &( lsf[0] ), M ); + mvr2r( &( lsp[M] ), &( lsp[0] ), M ); + mvr2r( &( lsf[M] ), st->lsf_old, M ); + mvr2r( &( lsp[M] ), st->lsp_old, M ); + mvr2r( &( lsf[M] ), lsfmid, M ); + mvr2r( &( lsp[M] ), lspmid, M ); + lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); + } + + if ( st->enablePlcWaveadjust ) + { + if ( st->core == ACELP_CORE ) + { + st->tonality_flag = 0; + } + + if ( bfi ) + { + st->hPlcInfo->nbLostCmpt++; + } + } + + /*--------------------------------------------------------------------------------* + * ACELP + *--------------------------------------------------------------------------------*/ + + if ( st->prev_bfi != 0 && bfi == 0 && st->coder_type == VOICED && st->prev_nbLostCmpt > 4 ) + { + st->dec_glr_idx = 1; + st->reset_mem_AR = 1; + } + + if ( st->core == ACELP_CORE ) + { + if ( !st->tcxonly ) + { + /* Set pointer to parameters */ + prm = param; + + /* Stability Factor */ + if ( !bfi ) + { + st->stab_fac = lsf_stab( &lsf[M], &lsf[0], 0, st->L_frame ); + } + + if ( !bfi && st->prev_bfi ) + { + /* check if LSP interpolation can be relaxed or if LPC power can be diffused*/ + lsp2a_stab( &lsp[0], tmp_old, M ); + enr_old = enr_1_Az( tmp_old, 2 * L_SUBFR ); + + lsp2a_stab( &lsp[M], tmp_new, M ); + enr_new = enr_1_Az( tmp_new, 2 * L_SUBFR ); + } + + if ( !bfi && ( st->dec_glr_idx == 1 || ( !( st->safety_net ) && enr_new >= 256.f && enr_new > 2 * enr_old ) ) && st->prev_bfi ) + { + RecLpcSpecPowDiffuseLc( &lsp[M], &lsp[0], &lsf[M], st, st->dec_glr_idx == 1 ? 1 : 0 ); + int_lsp( L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); + mvr2r( &lsf[M], lsfnew_uw, M ); + } + else + { + /* LPC Interpolation for ACELP */ + if ( !bfi && st->acelp_cfg.midLpc ) + { + st->relax_prev_lsf_interp = 0; + + if ( st->prev_bfi ) + { + /* check if LSP interpolation can be relaxed */ + if ( enr_new < ( 0.25f * enr_old ) ) + { + /* don't use safety_net as this is getting impacted with lsf_restruct */ + if ( st->clas_dec == UNVOICED_CLAS || st->clas_dec == SIN_ONSET || st->clas_dec == INACTIVE_CLAS || st->coder_type == GENERIC || st->coder_type == TRANSITION ) + { + st->relax_prev_lsf_interp = 1; + } + else + { + st->relax_prev_lsf_interp = -1; + } + } + } + + if ( st->stab_fac == 0 && st->old_bfi_cnt > 0 && st->clas_dec != VOICED_CLAS && st->clas_dec != ONSET && st->relax_prev_lsf_interp == 0 ) + { + st->relax_prev_lsf_interp = 2; + } + int_lsp4( L_frame, &lsp[0], lspmid, &lsp[M], Aq, M, st->relax_prev_lsf_interp ); + } + else + { + int_lsp( L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); + int_lsp( L_frame, st->old_lsp_q_cng, st->lsp_q_cng, st->Aq_cng, M, interpol_frac_12k8, 0 ); + } + } + } + + if ( bfi && st->last_core != ACELP_CORE ) + { + /* PLC: [TCX: TD PLC] */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + con_tcx( st, &synthFB[0], -1.f, NULL, 0, NULL ); +#else + con_tcx( st, &synthFB[0], -1.f, NULL, 0 ); +#endif + lerp( synthFB, synth, st->L_frame, st->hTcxDec->L_frameTCX ); + st->con_tcx = 1; + set_f( &st->mem_pitch_gain[2], st->lp_gainp, st->nb_subfr ); + } + else + { + /* ACELP decoder */ + if ( st->hBWE_TD != NULL ) + { + if ( st->L_frame == L_FRAME ) + { + mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + else + { + mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + } + + if ( bfi ) + { + /* PLC: [ACELP: general] + * PLC: Use the ACELP like concealment */ + con_acelp( Aq, st->core_ext_mode, &synth[0], pitch, pit_gain, st->stab_fac, st, pitch_buf, voice_factors, ptr_bwe_exc ); + mvr2r( &st->mem_pitch_gain[2], &st->mem_pitch_gain[st->nb_subfr + 2], st->nb_subfr ); + set_zero( &st->mem_pitch_gain[2], st->nb_subfr ); + } + else + { + decoder_acelp( st, prm, Aq, st->acelp_cfg, &synth[0], pitch, pit_gain, st->stab_fac, pitch_buf, voice_factors, LSF_Q_prediction, ptr_bwe_exc ); + + if ( st->flagGuidedAcelp > 0 ) + { + st->guidedT0 = max( min( st->T0_4th + st->guidedT0, NBPSF_PIT_MAX ), PIT_MIN_16k ); + } + + for ( i = 0; i < st->nb_subfr; i++ ) + { + st->mem_pitch_gain[2 + ( 2 * st->nb_subfr - 1 ) - i] = st->mem_pitch_gain[2 + ( st->nb_subfr - 1 ) - i]; + st->mem_pitch_gain[2 + ( st->nb_subfr - 1 ) - i] = pit_gain[i]; + } + } + } + + /* LPC for ACELP/BWE */ + if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) + { + mvr2r( Aq, st->mem_Aq, nb_subfr * ( M + 1 ) ); + } + + /* PLC: [TCX: Tonal Concealment] */ + /* Signal that this frame is not TCX */ + TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, 0, 0, 0, 0 ); + + if ( !bfi ) + { + st->second_last_tns_active = st->last_tns_active; + st->last_tns_active = 0; + hTcxDec->tcxltp_last_gain_unmodified = 0.0f; + } + } + + + /*--------------------------------------------------------------------------------* + * TCX20 + *--------------------------------------------------------------------------------*/ + + if ( st->core == TCX_20_CORE ) + { + /* Set pointer to parameters */ + prm = param; + + /* Stability Factor */ + if ( !bfi ) + { + st->stab_fac = lsf_stab( &lsf[M], &lsf[0], 0, st->L_frame ); + } + + if ( hTcxDec->enableTcxLpc ) + { + /* Convert quantized lsp to A */ + lsp2a_stab( &lsp[M], Aq, M ); + } + else + { + if ( !st->tcxonly ) + { + if ( !bfi && st->prev_bfi && !( st->safety_net ) && st->rate_switching_reset ) + { + /* diffuse LPC power on rate switching*/ + RecLpcSpecPowDiffuseLc( &lsp[M], &lsp[0], &lsf[M], st, 0 ); + int_lsp( L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); + mvr2r( &lsf[M], lsfnew_uw, M ); + } + else + { + /* LPC Interpolation for TCX */ + E_LPC_int_lpc_tcx( &lsp[0], &lsp[M], Aq ); + } + } + else + { + lsp2a_stab( &lsp[M], Aq, M ); + } + } + + if ( !bfi && hTcxDec->tcx_lpc_shaped_ari ) + { + basop_E_LPC_f_lsp_a_conversion( lspind, Aind, M ); + } + + /* TCX decoder */ + decoder_tcx( st, prm, Aq, Aind, &synth[0], &synthFB[0], bfi, 0, 0 ); + } + + /*--------------------------------------------------------------------------------* + * TCX10 + *--------------------------------------------------------------------------------*/ + + if ( st->core == TCX_10_CORE ) + { + prm = NULL; /* just to avoid MSVC warnings */ + + for ( k = 0; k < 2; k++ ) + { + /* Set pointer to parameters */ + prm = param + ( k * DEC_NPRM_DIV ); + + /* Stability Factor */ + if ( !bfi ) + { + st->stab_fac = lsf_stab( &lsf[( k + 1 ) * M], &lsf[k * M], 0, st->L_frame ); + } + + lsp2a_stab( &lsp[( k + 1 ) * M], Aq, M ); + IGFDecRestoreTCX10SubFrameData( st->hIGFDec, k ); + + /* TCX decoder */ + decoder_tcx( st, prm, Aq, Aind, &synth[k * L_frame / 2], &synthFB[k * L_frameTCX / 2], bfi, k, 0 ); + } + } + + if ( st->core == TCX_10_CORE || st->core == TCX_20_CORE ) + { + if ( st->enablePlcWaveadjust || /* bfi */ + ( st->last_total_brate >= HQ_48k && /* recovery */ + st->last_codec_mode == MODE2 ) ) + { + /* waveform adjustment */ + concealment_signal_tuning( st, bfi, synthFB, past_core_mode ); + + if ( ( bfi || st->prev_bfi ) && st->hPlcInfo->Pitch && st->hPlcInfo->concealment_method == TCX_NONTONAL ) + { + lerp( synthFB, synth, L_frame, L_frameTCX ); + + if ( !bfi && st->prev_bfi ) + { + st->hPlcInfo->Pitch = 0; + } + } + } + + if ( !bfi ) + { + TonalMDCTConceal_SaveTimeSignal( st->hTonalMDCTConc, synthFB, L_frameTCX ); + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + decoder_tcx_post( st, synth, synthFB, Aq, bfi, 0 ); +#else + decoder_tcx_post( st, synth, synthFB, Aq, bfi ); +#endif + + if ( st->core == TCX_20_CORE ) + { + /* LPC Interpolation for BWE/post-processing */ + if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) + { + int_lsp( L_frame, st->lspold_uw, lspnew_uw, Aq, M, interpol_frac_12k8, 0 ); + mvr2r( Aq, st->mem_Aq, nb_subfr * ( M + 1 ) ); + } + } + } + + + /* PLC: [Common: Classification] */ + /* the classifier buffer is always updated if the sr is at + 16000 or below - the classification itself is just performed if(!st->tcxonly ) */ + if ( st->sr_core <= INT_FS_16k ) + { + if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || ( st->tcxonly && st->bfi ) ) + { + float pitch_C[4]; + + /* note: the classifier needs the pitch only for tcx_only == 0, i.e. not for TCX10 */ + pitch_C[0] = pitch_C[1] = pitch_C[2] = pitch_C[3] = (float) floor( st->old_fpitch + 0.5f ); + + FEC_clas_estim( synth, pitch_C, st->L_frame, st->tcxonly ? GENERIC : st->core_ext_mode, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, hTcxLtpDec->tcxltp ? hTcxDec->tcxltp_last_gain_unmodified : -1.0f, st->narrowBand, CLASSIFIER_TCX, bfi, st->preemph_fac, st->tcxonly, st->last_core_brate, -1 ); + } + } + + /*--------------------------------------------------------------------------------* + * Updates + *--------------------------------------------------------------------------------*/ + + if ( bfi && st->last_core != ACELP_CORE ) + { + /* Update FEC_scale_syn parameters */ + if ( hTcxLtpDec->tcxltp_gain == 0 ) + { + fer_energy( L_frame, UNVOICED, synth, (float) ( L_frame / 2 ), &st->enr_old, L_frame ); + } + else + { + fer_energy( L_frame, st->clas_dec, synth, st->old_fpitch, &st->enr_old, L_frame ); + } + } + + if ( !bfi && st->clas_dec >= VOICED_TRANSITION && st->clas_dec < INACTIVE_CLAS ) + { + if ( st->core == ACELP_CORE ) + { + offset = ( st->nb_subfr - 1 ) * ( M + 1 ); + } + else + { + /* TCX */ + offset = 0; + } + + /* use latest LPC set */ + st->old_enr_LP = enr_1_Az( Aq + offset, L_SUBFR ); + } + + + /* Update */ + mvr2r( synth_buf + L_frame, st->hTcxDec->old_synth, st->hTcxDec->old_synth_len ); + mvr2r( st->hTcxDec->old_synthFB + L_frameTCX - NS2SA( st->output_Fs, PH_ECU_MEM_NS ), st->hTcxDec->synth_history, NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); + mvr2r( synth_bufFB + L_frameTCX, st->hTcxDec->old_synthFB, st->hTcxDec->old_synth_lenFB ); + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + + mvr2r( &lspnew_uw[( st->numlpc - 1 ) * M], st->lspold_uw, M ); + mvr2r( &lsfnew_uw[( st->numlpc - 1 ) * M], st->lsfold_uw, M ); + + if ( bfi == 1 ) + { + mvr2r( st->lspold_uw, st->lsp_old, M ); /* for recovery */ + mvr2r( st->lsfold_uw, st->lsf_old, M ); /* for recovery */ + } + else + { + mvr2r( &lsp[st->numlpc * M], st->lsp_old, M ); + mvr2r( &lsf[st->numlpc * M], st->lsf_old, M ); + } + mvr2r( st->lsp_q_cng, st->old_lsp_q_cng, M ); + mvr2r( st->lsf_q_cng, st->old_lsf_q_cng, M ); + + /* Update MODE1 CNG parameters */ + if ( !st->tcxonly && st->hTdCngDec != NULL ) + { + /* update CNG parameters in active frames */ + if ( st->bwidth == NB && hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) + { + float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; + assert( st->L_frame == L_FRAME ); + mvr2r( synth + L_FRAME - L_LP, buf, L_LP ); + tmp = synth[L_FRAME - L_LP - 1]; + preemph( buf, st->preemph_fac, L_LP, &tmp ); + autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); + lag_wind( r, M, INT_FS_12k8, LAGW_WEAK ); + lev_dur( A, r, M, NULL ); + a2lsp_stab( A, lsptmp, &lspnew_uw[0] ); + residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); + + if ( st->hTdCngDec != NULL ) + { + cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); + } + } + else if ( st->hTdCngDec != NULL ) + { + cng_params_upd( &lsp[M], st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); + } + + /* Set 16k LSP flag for CNG buffer */ + st->hTdCngDec->ho_16k_lsp[st->hTdCngDec->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); + } + + st->last_is_cng = 0; + + /* Postfiltering */ + post_decoder( st, synth_buf, pit_gain, pitch, signal_out, bpf_noise_buf ); + + if ( signal_outFB ) + { + mvr2r( synthFB, signal_outFB, L_frameTCX ); + } + + if ( st->enablePlcWaveadjust ) + { + if ( !bfi ) + { + st->hPlcInfo->nbLostCmpt = 0; + } + + if ( st->core == ACELP_CORE ) /* may happen only if bfi==1 */ + { + set_state( st->hPlcInfo->Transient, st->core, MAX_POST_LEN ); + } + } + + + return; +} diff --git a/lib_dec/dec_ace.c b/lib_dec/dec_ace.c new file mode 100644 index 0000000000..24fbf3149f --- /dev/null +++ b/lib_dec/dec_ace.c @@ -0,0 +1,545 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * decoder_acelp() + * + * Decode ACELP frame MODE2 + *-------------------------------------------------------------------*/ + +void decoder_acelp( + Decoder_State *st, /* i/o: coder memory state */ + int16_t prm[], /* i : parameters */ + const float A[], /* i : coefficients NxAz[M+1] */ + ACELP_config acelp_cfg, /* i : ACELP config */ + float synth[], /* i/o: synthesis */ + int16_t *pT, /* o : pitch for all subframe */ + float *pgainT, /* o : pitch gain for all subfr */ + const float stab_fac, /* i : stability of isf */ + float *pitch_buffer, /* i/o: pitch values for each subfr.*/ + float *voice_factors, /* o : voicing factors */ + const int16_t LSF_Q_prediction, /* i : LSF prediction mode */ + float *bwe_exc /* o : excitation for SWB TBE */ +) +{ + int16_t i, i_subfr, L_frame; + int16_t T0, T0_frac, T0_min, T0_min_frac, T0_max, T0_max_frac, T0_res; + float tmp, gain_pit, gain_code, Es_pred; + float code[L_SUBFR]; + float mem_syn[M], *syn, syn_buf[M + L_FRAME16k + L_FRAME16k / 2]; + float *exc, exc_buf[L_EXC_MEM_DEC + L_FRAME16k + 1]; + float exc2[L_FRAME16k]; + const float *p_A; + float *pt_pitch, pitch_buf[NB_SUBFR16k]; + float gain_inov; + float mem_back[M]; + float h1[L_FRAME16k / 4 + 1]; + float mem[M]; + const float *pA; + float gain_code2; + float code2[L_SUBFR]; + int16_t lp_flag; + float error = 0.0f; + float gain_preQ = 0; /* Gain of prequantizer excitation */ + float code_preQ[L_SUBFR]; /* Prequantizer excitation */ + PulseConfig config; + float weights[5]; + + float prev_gain_pit; + float tmp_noise; /* Long term temporary noise energy */ + + float gain_code_tmp; + float gain_pit_tmp; + float gain_code_pre; + + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + gain_inov = 0; /* to avoid compilation warnings */ + T0 = 0; /* to avoid compilation warnings */ + T0_frac = 0; /* to avoid compilation warnings */ + T0_res = 0; /* to avoid compilation warnings */ + + /*------------------------------------------------------------------------* + * Initializations * + *------------------------------------------------------------------------*/ + + gain_code_pre = 0; + set_f( code_preQ, 0.f, L_SUBFR ); + + gain_pit = 0; + gain_code = 0; + gain_code2 = 0.f; + + prev_gain_pit = 0; + tmp_noise = 0; + + if ( st->nb_subfr == NB_SUBFR ) + { + weights[0] = 0.1f; + weights[1] = 0.2f; + weights[2] = 0.3f; + weights[3] = 0.4f; + } + else /*nb_subfr == NB_SUBFR16k */ + { + weights[0] = (float) 1 / 15; + weights[1] = (float) 2 / 15; + weights[2] = (float) 3 / 15; + weights[3] = (float) 4 / 15; + weights[4] = (float) 5 / 15; + } + + st->lp_gainp = 0; + st->lp_gainc = 0; + + + /* Framing parameters */ + L_frame = st->L_frame; + + /*------------------------------------------------------------------------* + * Previous frame is TCX * + *------------------------------------------------------------------------*/ + /* Reset phase dispersion */ + + if ( st->last_core_bfi > ACELP_CORE ) + { + set_zero( st->dispMem, 8 ); + } + + /* Update of synthesis filter memories in case of 12k8 core */ + if ( st->prev_bfi && st->last_con_tcx && st->L_frame < L_FRAME16k ) + { + synth_mem_updt2( st->L_frame, L_FRAME16k, st->old_exc, st->mem_syn_r, st->mem_syn2, NULL, DEC ); + } + + if ( st->last_con_tcx && st->old_enr_LP ) + { + float enr_LP, ratio; + + /* rescale excitation buffer if LPC energies differs too much */ + enr_LP = enr_1_Az( A, L_SUBFR ); + + ratio = st->old_enr_LP / enr_LP; + if ( ratio < 0.8 ) + { + v_multc( st->old_exc, ratio, st->old_exc, L_EXC_MEM_DEC ); + } + } + + /*------------------------------------------------------------------------* + * Initialize buffers * + *------------------------------------------------------------------------*/ + + mvr2r( st->mem_syn2, mem_back, M ); + + /* set ACELP synthesis memory */ + mvr2r( st->mem_syn2, mem_syn, M ); + + /* set excitation memory*/ + exc = exc_buf + L_EXC_MEM_DEC; + mvr2r( st->old_exc, exc_buf, L_EXC_MEM_DEC ); + *( exc + L_frame ) = 0.f; + + /* Init syn buffer */ + syn = syn_buf + M; + mvr2r( st->mem_syn2, syn_buf, M ); + + /*------------------------------------------------------------------------* + * Fast recovery flag + *------------------------------------------------------------------------*/ + + if ( st->prev_bfi && st->coder_type == VOICED ) + { + /*Force BPF to be applied fully*/ + st->bpf_gain_param = 3; + } + + /*------------------------------------------------------------------------* + * - decode mean_ener_code for gain decoder (d_gain2.c) * + *------------------------------------------------------------------------*/ + + if ( acelp_cfg.nrg_mode > 0 ) + { + Es_pred_dec( &Es_pred, prm[0], acelp_cfg.nrg_bits, acelp_cfg.nrg_mode > 1 ); + prm++; + } + else + { + Es_pred = 0.f; + } + + /*------------------------------------------------------------------------* + * Loop for every subframe in the analysis frame * + *------------------------------------------------------------------------* + * To find the pitch and innovation parameters. The subframe size is * + * L_SUBFR and the loop is repeated L_frame/L_SUBFR times. * + * - compute impulse response of weighted synthesis filter (h1[]) * + * - compute the target signal for pitch search * + * - find the closed-loop pitch parameters * + * - encode the pitch delay * + * - update the impulse response h1[] by including fixed-gain pitch * + * - find target vector for codebook search * + * - correlation between target vector and impulse response * + * - codebook search * + * - encode codebook address * + * - VQ of pitch and codebook gains * + * - find synthesis speech * + * - update states of weighting filter * + *------------------------------------------------------------------------*/ + + p_A = A; + pt_pitch = pitch_buf; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + if ( st->use_partial_copy && st->rf_frame_type == RF_NELP ) + { + if ( i_subfr == 0 ) + { + decod_nelp( st, &tmp_noise, pt_pitch, exc, exc2, voice_factors, bwe_exc, 0 /*st->bfi*/, pgainT ); + set_f( pitch_buffer, L_SUBFR, NB_SUBFR ); + } + } + else + { + /*-------------------------------------------------------* + * - Decode adaptive codebook. * + *-------------------------------------------------------*/ + + if ( st->use_partial_copy && st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] == 0 ) + { + gain_pit = prev_gain_pit; + } + + if ( acelp_cfg.ltp_bits != 0 ) + { + /* pitch lag decoding */ + *pt_pitch = Mode2_pit_decode( acelp_cfg.ltp_mode, i_subfr, L_SUBFR, &prm, &T0, &T0_frac, &T0_res, &T0_min, &T0_min_frac, &T0_max, &T0_max_frac, st->pit_min, st->pit_fr1, st->pit_fr1b, st->pit_fr2, st->pit_max, st->pit_res_max ); + + /* find pitch excitation */ + if ( st->pit_res_max == 6 && !( st->use_partial_copy ) ) + { + if ( T0_res == ( st->pit_res_max >> 1 ) ) + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); + } + else + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); + } + } + else + { + if ( T0_res == ( st->pit_res_max >> 1 ) ) + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + } + else + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + } + } + + /* LP filtering of the adaptive excitation*/ + lp_flag = acelp_cfg.ltf_mode; + + if ( acelp_cfg.ltf_mode == NORMAL_OPERATION ) + { + lp_flag = *prm; + prm++; + } + + lp_filt_exc_dec( st, MODE2, i_subfr, L_SUBFR, L_frame, lp_flag, exc ); + } + else + { + /* No adaptive codebook (UC) */ + set_zero( exc + i_subfr, L_SUBFR ); + + T0 = L_SUBFR; + T0_frac = 0; + T0_res = 1; + pitch_buf[i_subfr / L_SUBFR] = (float) L_SUBFR; + } + + if ( st->igf ) + { + tbe_celp_exc( st->element_mode, st->idchan, bwe_exc, L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error, 0 ); + } + + pitch_buffer[i_subfr / L_SUBFR] = (float) T0 + (float) T0_frac / (float) T0_res; + + /*-------------------------------------------------------* + * - Decode innovative codebook. * + *-------------------------------------------------------*/ + + if ( st->use_partial_copy && ( st->rf_frame_type == RF_ALLPRED || ( st->rf_frame_type == RF_GENPRED && ( i_subfr == L_SUBFR || i_subfr == 3 * L_SUBFR ) ) ) ) + { + set_f( code, 0.0f, L_SUBFR ); + } + else + { + config = PulseConfTable[acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]]; + D_ACELP_indexing( code, config, NB_TRACK_FCB_4T, prm, &st->BER_detect ); + ( prm ) += 8; + + /*-------------------------------------------------------* + * - Add the fixed-gain pitch contribution to code[]. * + *-------------------------------------------------------*/ + + cb_shape( acelp_cfg.pre_emphasis, acelp_cfg.pitch_sharpening, acelp_cfg.phase_scrambling, acelp_cfg.formant_enh, acelp_cfg.formant_tilt, acelp_cfg.formant_enh_num, acelp_cfg.formant_enh_den, p_A, code, st->tilt_code, pitch_buf[i_subfr / L_SUBFR], L_SUBFR ); + } + + /*-------------------------------------------------------* + * - Generate Gaussian excitation * + *-------------------------------------------------------*/ + + if ( acelp_cfg.gains_mode[i_subfr / L_SUBFR] == 7 && !st->use_partial_copy ) + { + gaus_L2_dec( code2, st->tilt_code, p_A, acelp_cfg.formant_enh_num, &( st->seed_acelp ) ); + } + else + { + gain_code2 = 0.f; + set_zero( code2, L_SUBFR ); + } + + /*-------------------------------------------------* + * - Decode codebooks gains. * + *-------------------------------------------------*/ + + if ( st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] != 0 ) + { + decode_acelp_gains( code, acelp_cfg.gains_mode[i_subfr / L_SUBFR], Es_pred, &gain_pit, &gain_code, &prm, &( st->past_gpit ), &( st->past_gcode ), &gain_inov, L_SUBFR, code2, &gain_code2 ); + } + + if ( st->use_partial_copy && st->rf_frame_type == RF_ALLPRED ) + { + st->past_gcode = 0.0f; + } + + if ( st->use_partial_copy && st->rf_frame_type == RF_NOPRED ) + { + st->past_gpit = 0.004089f; + } + + /*----------------------------------------------------------* + * Update parameters for the next subframe. * + * - tilt of code: 0.0 (unvoiced) to 0.5 (voiced) * + *----------------------------------------------------------*/ + + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &( st->voice_fac ), L_SUBFR, acelp_cfg.voice_tilt ); + + pgainT[i_subfr / L_SUBFR] = gain_pit; + + /*-------------------------------------------------------* + * - Find the total excitation. * + *-------------------------------------------------------*/ + + gain_code_tmp = gain_code; + gain_pit_tmp = gain_pit; + if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && ( st->use_partial_copy || st->prev_use_partial_copy ) ) + { + if ( i_subfr > 0 && gain_pit > 1.23f && st->prev_tilt_code_dec > 0.2f && st->next_coder_type == VOICED && ( st->use_partial_copy || st->prev_use_partial_copy ) ) + { + gain_pit *= ( 0.8f - i_subfr / 640.0f ); + } + + else if ( !st->prev_use_partial_copy && st->last_coder_type == UNVOICED && st->next_coder_type != UNVOICED && gain_code < gain_code_pre ) + { + gain_code = 0.0f; + } + } + + gain_code_pre = gain_code; + st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc2[i + i_subfr] += gain_code2 * code2[i]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + gain_code = gain_code_tmp; + gain_pit = gain_pit_tmp; + + if ( st->igf != 0 ) + { + prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, st->voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, 0 ); + } + + /*---------------------------------------------------------* + * Enhance the excitation * + *---------------------------------------------------------*/ + + enhancer( MODE2, -1, acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], 0, st->coder_type, L_frame, st->voice_fac, stab_fac, st->past_gcode, gain_inov, &( st->gc_threshold ), code, &exc2[i_subfr], gain_pit, st->dispMem ); + + } /* !RF_NELP frame partial copy */ + + /*----------------------------------------------------------* + * - compute the synthesis speech * + *----------------------------------------------------------*/ + + syn_filt( p_A, M, &exc2[i_subfr], &syn[i_subfr], L_SUBFR, mem_syn, 1 ); + + /*-----------------------------------------------------------------* + * update lp_filtered gains for the case of frame erasure + *-----------------------------------------------------------------*/ + + st->lp_gainp += weights[i_subfr / L_SUBFR] * st->past_gpit; + st->lp_gainc += weights[i_subfr / L_SUBFR] * st->past_gcode; + + /*----------------------------------------------------------* + * - update pitch lag for guided ACELP * + *----------------------------------------------------------*/ + + if ( st->enableGplc && ( i_subfr / L_SUBFR ) == ( L_frame / L_SUBFR ) - 1 ) + { + st->T0_4th = T0; + } + + /*----------------------------------------------------------* + * - Update LPC coeffs * + *----------------------------------------------------------*/ + + p_A += ( M + 1 ); + pt_pitch++; + /* copy current gain for next subframe use, in case there is no explicit encoding */ + prev_gain_pit = gain_pit; + + } /* end of subframe loop */ + + if ( st->BER_detect ) + { + for ( i = 0; i < L_frame; i++ ) + { + exc[i] = 0.0f; + } + int_lsp( L_frame, st->old_lsp_q_cng, st->lsp_q_cng, st->Aq_cng, M, interpol_frac_12k8, 0 ); + + p_A = st->Aq_cng; + if ( st->last_good < UNVOICED_TRANSITION ) + { + mvr2r( st->mem_syn2, mem_syn, M ); + } + else + { + set_zero( mem_syn, M ); + } + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + syn_filt( p_A, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, mem_syn, 1 ); + p_A += ( M + 1 ); + } + } + + tmp = 0; + pA = A + ( st->nb_subfr - 1 ) * ( M + 1 ); + set_zero( h1, L_SUBFR + 1 ); + set_zero( mem, M ); + h1[0] = 1.0f; + syn_filt( pA, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ + deemph( h1, st->preemph_fac, L_SUBFR, &tmp ); /* impulse response of deemph */ + /* impulse response level = gain introduced by synthesis+deemphasis */ + st->last_gain_syn_deemph = (float) sqrt( dotp( h1, h1, L_SUBFR ) ); + + /*-----------------------------------------------------------* + * PLC: [ACELP: Fade-out] + * PLC: update the background level + *-----------------------------------------------------------*/ + + /* Do the classification */ + FEC_clas_estim( syn, pitch_buf, st->L_frame, st->core_ext_mode, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, st->narrowBand, CLASSIFIER_ACELP, 0, st->preemph_fac, st->tcxonly, st->last_core_brate, -1 ); + + /* Update Pitch Lag memory */ + mvr2r( &st->old_pitch_buf[L_frame / L_SUBFR], st->old_pitch_buf, L_frame / L_SUBFR ); + mvr2r( pitch_buf, &st->old_pitch_buf[L_frame / L_SUBFR], L_frame / L_SUBFR ); + + FEC_scale_syn( st->L_frame, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, 0, st->coder_type, LSF_Q_prediction, &st->scaling_flag, &st->lp_ener_FEC_av, &st->lp_ener_FEC_max, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, A, &st->old_enr_LP, mem_back, mem_syn, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), ( st->clas_dec == ONSET || ( st->last_good >= VOICED_TRANSITION && st->last_good < INACTIVE_CLAS ) ) ); + + /* update ACELP synthesis memory */ + mvr2r( mem_syn, st->mem_syn2, M ); + mvr2r( syn + L_frame - L_SYN_MEM, st->mem_syn_r, L_SYN_MEM ); + + tmp = st->syn[M]; + deemph( syn, st->preemph_fac, L_frame, &tmp ); + mvr2r( syn + L_frame - ( L_frame / 2 ), st->hTcxDec->old_syn_Overl, L_frame / 2 ); + mvr2r( syn + L_frame - M - 1, st->syn, M + 1 ); + mvr2r( syn, synth, L_frame ); + + if ( st->hBWE_TD != NULL ) + { + mvr2r( syn, st->hBWE_TD->old_core_synth, L_frame ); + } + + /* update old_exc */ + mvr2r( exc_buf + L_frame, st->old_exc, L_EXC_MEM_DEC ); + + /* Output pitch parameters for bass post-filter */ + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + *pT++ = (int16_t) ( pitch_buf[i_subfr / L_SUBFR] + 0.5f ); + } + + /* Update TCX-LTP */ + hTcxDec->tcxltp_last_gain_unmodified = 0.f; + + /*Update MODE1*/ + mvr2r( p_A - ( M + 1 ), st->old_Aq_12_8, M + 1 ); + st->old_Es_pred = Es_pred; + + hTcxDec->tcxltp_third_last_pitch = hTcxDec->tcxltp_second_last_pitch; + hTcxDec->tcxltp_second_last_pitch = st->old_fpitch; + st->old_fpitch = pitch_buf[( L_frame / L_SUBFR ) - 1]; + + return; +} diff --git a/lib_dec/dec_acelp.c b/lib_dec/dec_acelp.c new file mode 100644 index 0000000000..7ccdee8888 --- /dev/null +++ b/lib_dec/dec_acelp.c @@ -0,0 +1,368 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "typedef.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void D_ACELP_decode_arithtrack( float v[], uint32_t s, int16_t p, const int16_t trackstep, const int16_t tracklen ); + +/*---------------------------------------------------------------------* + * Function D_ACELP_indexing() + * + *---------------------------------------------------------------------*/ + +void D_ACELP_indexing( + float code[], + PulseConfig config, + const int16_t num_tracks, + int16_t index[], + int16_t *BER_detect ) +{ + int16_t track, pulses, k, pulsestrack[NB_TRACK_FCB_4T]; + uint32_t s; + uint32_t index_n[NB_TRACK_FCB_4T]; + uint16_t trackpos, idxs[MAX_IDX_LEN]; + int16_t restpulses, wordcnt; + + assert( num_tracks == NB_TRACK_FCB_4T ); + + wordcnt = ( config.bits + 15 ) >> 4; /* ceil(bits/16) */ + + /* check if some tracks have more pulses */ + restpulses = config.nb_pulse & ( num_tracks - 1 ); + + /* cast to short */ + for ( k = 0; k < wordcnt; k++ ) + { + idxs[k] = (uint16_t) index[k]; + } + + if ( restpulses ) + { + /* check if we need to code track positions */ + switch ( config.codetrackpos ) + { + case TRACKPOS_FREE_THREE: + /* Find track with less pulses */ + trackpos = idxs[0] & 3; + longshiftright( idxs, 2, idxs, wordcnt, wordcnt ); + + /* set number of pulses per track */ + set_s( pulsestrack, ( config.nb_pulse >> 2 ) + 1, 4 ); + pulsestrack[trackpos]--; /* this one has less pulses */ + break; + case TRACKPOS_FREE_ONE: + /* Find track with more pulses */ + trackpos = idxs[0] & 3; + longshiftright( idxs, 2, idxs, wordcnt, wordcnt ); + + /* set number of pulses per track */ + set_s( pulsestrack, ( config.nb_pulse >> 2 ), 4 ); + pulsestrack[trackpos]++; /* this one has more pulses */ + break; + case TRACKPOS_FIXED_EVEN: + /* Pulses on even tracks */ + pulsestrack[0] = ( config.nb_pulse + 1 ) >> 1; + pulsestrack[1] = 0; + pulsestrack[2] = config.nb_pulse >> 1; + pulsestrack[3] = 0; + break; + case TRACKPOS_FIXED_FIRST: + /* set number of pulses per track */ + set_s( pulsestrack, config.nb_pulse / num_tracks, 4 ); + for ( k = 0; k < restpulses; k++ ) + { + pulsestrack[k]++; + } + break; + case TRACKPOS_FIXED_TWO: + /* 1100, 0110, 0011, 1001 */ + /* Find track with less pulses */ + trackpos = idxs[0] & 3; + longshiftright( idxs, 2, idxs, wordcnt, wordcnt ); + + /* set number of pulses per track */ + set_s( pulsestrack, ( config.nb_pulse >> 2 ), 4 ); + pulsestrack[trackpos]++; + trackpos++; + trackpos &= 3; + pulsestrack[trackpos]++; + break; + default: + assert( 0 ); + break; + } + } + else + { + /* set number of pulses per track */ + set_s( pulsestrack, ( config.nb_pulse / num_tracks ), num_tracks ); + } + + if ( config.bits == 43 ) + { + D_ACELP_decode_43bit( idxs, code, pulsestrack ); + } + else + { + fcb_pulse_track_joint_decode( idxs, wordcnt, index_n, pulsestrack, num_tracks ); + + for ( track = num_tracks - 1; track >= 1; track-- ) + { + pulses = pulsestrack[track]; + + if ( pulses ) + { + s = index_n[track]; + + /* decode state to actual pulse positions on track */ + /*D_ACELP_decode_arithtrack_old(code+track, s, pulses, 4); */ + D_ACELP_decode_arithtrack( code + track, s, pulses, num_tracks, 16 ); + } + else + { + /* track is empty */ + for ( k = track; k < 16 * num_tracks; k += num_tracks ) + { + code[k] = 0.0f; + } + } + } + s = index_n[0]; + pulses = pulsestrack[0]; + /* safety check in case of bit errors */ + if ( s >= pulsestostates[16][pulses - 1] ) + { + set_f( code, 0.0f, L_SUBFR ); + *BER_detect = 1; + return; + } + if ( pulses ) + { + D_ACELP_decode_arithtrack( code, s, pulses, num_tracks, 16 ); + } + else + { + /* track is empty */ + for ( k = 0; k < 16 * num_tracks; k += num_tracks ) + { + code[k] = 0.0f; + } + } + } + + return; +} + + +static void D_ACELP_decode_arithtrack( + float v[], + uint32_t s, + int16_t p, + const int16_t trackstep, + const int16_t tracklen ) +{ + int16_t k; + + for ( k = (tracklen) -1; k >= 0; k-- ) + { + v[k * trackstep] = 0.0f; /* default: there is no pulse here */ + while ( ( p ) && ( s >= pulsestostates[k][p - 1] ) ) + { + s -= pulsestostates[k][p - 1]; + if ( v[k * trackstep] ) + { + /* there is a pulse here already = sign is known */ + if ( v[k * trackstep] > 0.0f ) + { + v[k * trackstep]++; /* place one more pulse here */ + } + else + { + v[k * trackstep]--; /* place one more pulse here */ + } + } + else + { + /* this is the first pulse here -> determine sign */ + if ( s & 1 ) + { + v[k * trackstep] = -1.0f; /* place a negative pulse here */ + } + else + { + v[k * trackstep] = +1.0f; /* place a negative pulse here */ + } + s >>= 1; + } + p--; /* one pulse placed, so one less left */ + } + } + + return; +} + + +void fcb_pulse_track_joint_decode( + uint16_t *idxs, + const int16_t wordcnt, + uint32_t *index_n, + const int16_t *pulse_num, + const int16_t track_num ) +{ + int16_t hi_to_low[10] = { 0, 0, 0, 3, 9, 5, 3, 1, 8, 8 }; + + uint64_t index; + int16_t indx_flag, indx_flag_1; + int16_t track, track_num1, pulse_num0, pulse_num1; + int64_t indx_tmp, div_tmp; /* must be long */ + int16_t indx_flag_2; + + indx_flag = 0; + indx_flag_1 = 0; + indx_flag_2 = 0; + for ( track = 0; track < track_num; track++ ) + { + indx_flag += ( pulse_num[track] >> 2 ); + indx_flag_1 += ( pulse_num[track] >> 1 ); + indx_flag_2 += ( pulse_num[track] >> 3 ); + } + + if ( indx_flag >= track_num ) + { + hi_to_low[4] = 9; + } + else + { + hi_to_low[4] = 1; + } + + if ( indx_flag_2 >= 1 ) + { + hi_to_low[7] = 9; + } + else + { + hi_to_low[7] = 1; + } + + if ( indx_flag_1 >= track_num ) + { + if ( indx_flag >= track_num ) + { + index = 0; + if ( indx_flag_2 >= 1 ) + { + for ( track = ( wordcnt - 1 ); track >= 6; track-- ) + { + index = ( index << 16 ) + idxs[track]; + } + index_n[3] = ( ( (uint32_t) idxs[5] ) << 8 ) + ( ( idxs[4] >> 8 ) & 0xff ); + index_n[2] = ( ( ( (uint32_t) idxs[4] ) << 16 ) + idxs[3] ) & 0xffffffUL; + index_n[1] = ( ( (uint32_t) idxs[2] ) << 8 ) + ( ( idxs[1] >> 8 ) & 0xff ); + index_n[0] = ( ( ( (uint32_t) idxs[1] ) << 16 ) + idxs[0] ) & 0xffffffUL; + } + else + { + for ( track = ( wordcnt - 1 ); track >= track_num; track-- ) + { + index = ( index << 16 ) + idxs[track]; + } + for ( track = 0; track < track_num; track++ ) + { + index_n[track] = idxs[track]; + } + } + } + else + { + index = 0; + for ( track = ( wordcnt - 1 ); track >= 2; track-- ) + { + index = ( index << 16 ) + idxs[track]; + } + + index_n[3] = idxs[1] & 0xff; + index_n[2] = idxs[1] >> 8; + index_n[1] = idxs[0] & 0xff; + index_n[0] = idxs[0] >> 8; + } + + track_num1 = track_num - 1; + pulse_num1 = pulse_num[track_num1]; + index = ( index << hi_to_low[pulse_num1] ) + ( index_n[track_num1] >> low_len[pulse_num1] ); + for ( track = ( track_num - 1 ); track > 0; track-- ) + { + track_num1 = track - 1; + pulse_num0 = pulse_num[track_num1]; + pulse_num1 = pulse_num[track]; + index = ( index << hi_to_low[pulse_num0] ) + ( index_n[track_num1] >> low_len[pulse_num0] ); + + div_tmp = index / indx_fact[pulse_num1]; + indx_tmp = index - div_tmp * indx_fact[pulse_num1]; + index_n[track] = (uint32_t) ( ( index_n[track] & low_mask[pulse_num1] ) + ( indx_tmp << low_len[pulse_num1] ) ); + index = div_tmp; + } + pulse_num1 = pulse_num[0]; + index_n[0] = (uint32_t) ( ( index_n[0] & low_mask[pulse_num1] ) + ( index << low_len[pulse_num1] ) ); + } + else + { + index = 0; + for ( track = ( wordcnt - 1 ); track >= 0; track-- ) + { + index = ( index << 16 ) + idxs[track]; + } + for ( track = 3; track > 0; track-- ) + { + pulse_num1 = pulse_num[track]; + index_n[track] = index & index_mask_ACELP[pulse_num1]; + index = index >> index_len[pulse_num1]; + } + index_n[0] = (uint32_t) index; + } + + return; +} diff --git a/lib_dec/dec_acelp_tcx_main.c b/lib_dec/dec_acelp_tcx_main.c new file mode 100644 index 0000000000..b1bfd3e225 --- /dev/null +++ b/lib_dec/dec_acelp_tcx_main.c @@ -0,0 +1,488 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "prot.h" +#include "rom_com.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_dec.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * decode_frame_type() + * + * + *--------------------------------------------------------------------*/ + +static void decode_frame_type( + Decoder_State *st, /* i/o: decoder state structure */ + STEREO_CNG_DEC_HANDLE hStereoCng /* i/o: Stereo CNG data structure */ +) +{ + int16_t frame_size_index, n; + int32_t total_brate; + + frame_size_index = 0; + total_brate = st->total_brate; + + /* Get Frame Type (NULL,SID,ACTIVE) and Frame Mode (2kbps, 4kbps,...) */ + + if ( st->mdct_sw == MODE1 ) + { + st->m_frame_type = ACTIVE_FRAME; + + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) + { + frame_size_index = n; + break; + } + } + } + else + { + /* ZERO Frame */ + if ( st->total_brate == FRAME_NO_DATA ) + { + st->bwidth = st->last_bwidth; + st->m_frame_type = ZERO_FRAME; + } + + /* SID frame */ + else if ( st->total_brate == SID_2k40 ) + { + uint16_t frame_len_indicator; + + st->cng_type = get_next_indice( st, 1 ); + + if ( st->cng_type != FD_CNG ) + { + st->BER_detect = 1; + st->cng_type = FD_CNG; + } + st->m_frame_type = SID_FRAME; + frame_size_index = 1; + st->bwidth = get_next_indice( st, 2 ); + + frame_len_indicator = get_next_indice( st, 1 ); + if ( st->bwidth == NB ) + { + if ( frame_len_indicator ) + { + st->BER_detect = 1; + } + frame_len_indicator = 0; + } + if ( frame_len_indicator == 0 ) + { + st->L_frame = L_FRAME; + st->total_brate = ACELP_9k60; + } + else + { + st->L_frame = L_FRAME16k; + if ( st->last_total_brate == ACELP_16k40 || st->last_total_brate == ACELP_24k40 ) + { + st->total_brate = st->last_total_brate; + } + else + { + st->total_brate = 16400; + } + } + + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) + { + frame_size_index = n; + break; + } + } + } + /* EVS MODES */ + else + { + /* Get Frame mode */ + st->m_frame_type = ACTIVE_FRAME; + + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) + { + frame_size_index = n; + break; + } + } + + if ( st->rf_flag == 0 ) + { + /* Get bandwidth info */ + st->bwidth = get_next_indice( st, FrameSizeConfig[frame_size_index].bandwidth_bits ); + st->bwidth += FrameSizeConfig[frame_size_index].bandwidth_min; + } + else + { + st->bwidth += FrameSizeConfig[frame_size_index].bandwidth_min; + } + + if ( st->bwidth > FB ) + { + st->bwidth = FB; + st->BER_detect = 1; + } + + if ( st->bwidth > SWB && st->total_brate < ACELP_16k40 ) + { + st->bwidth = SWB; + st->BER_detect = 1; + } + + /* Get reserved bit */ + if ( FrameSizeConfig[frame_size_index].reserved_bits && st->rf_flag == 0 ) + { + if ( get_next_indice( st, 1 ) != 0 ) + { + st->BER_detect = 1; + } + assert( FrameSizeConfig[frame_size_index].reserved_bits == 1 ); + } + } + } + + st->rate_switching_init = 0; + + if ( st->last_codec_mode != MODE2 || !st->BER_detect ) + { + /* Mode or Rate Change */ + if ( ( st->m_frame_type == ACTIVE_FRAME || st->m_frame_type == SID_FRAME ) && ( ( st->total_brate != st->last_total_brate ) || ( st->bwidth != st->last_bwidth ) || ( st->last_codec_mode == MODE1 ) || ( st->rf_flag != st->rf_flag_last ) || st->force_lpd_reset ) ) + { + st->rate_switching_init = 1; + + /* Reconf Core */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + mode_switch_decoder_LPD( st, st->bwidth, st->total_brate, st->last_total_brate, frame_size_index, 0, st->element_mode ); +#else + mode_switch_decoder_LPD( st, st->bwidth, st->total_brate, st->last_total_brate, frame_size_index, 0 ); +#endif + + /* Reconf. CLDFB: check if the CLDFB works on the right sample rate */ + if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) + { + resampleCldfb( st->cldfbAna, ( st->L_frame * FRAMES_PER_SEC ) ); + if ( st->L_frame <= L_FRAME16k ) + { + resampleCldfb( st->cldfbBPF, ( st->L_frame * FRAMES_PER_SEC ) ); + } + } + if ( st->bwidth == NB ) + { + int16_t nBand_nb = (int16_t) ( 8000 * st->cldfbSyn->no_channels / st->output_Fs ); + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - nBand_nb; + } + else + { + st->cldfbSyn->bandsToZero = 0; + } + + /*Reconf Frequency-domain based CNG*/ + configureFdCngDec( st->hFdCngDec, st->bwidth, st->rf_flag == 1 && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate, st->L_frame, st->last_L_frame, st->element_mode ); + if ( st->last_L_frame != st->L_frame && st->L_frame <= L_FRAME16k && st->last_L_frame <= L_FRAME16k ) + { + lerp( st->hFdCngDec->hFdCngCom->olapBufferSynth2, st->hFdCngDec->hFdCngCom->olapBufferSynth2, st->L_frame * 2, st->last_L_frame * 2 ); + if ( st->m_frame_type == SID_FRAME && st->hFdCngDec->hFdCngCom->frame_type_previous != ACTIVE_FRAME ) + { + lerp( st->hFdCngDec->hFdCngCom->olapBufferSynth, st->hFdCngDec->hFdCngCom->olapBufferSynth, st->L_frame * 2, st->last_L_frame * 2 ); + lerp( hStereoCng->olapBufferSynth22, hStereoCng->olapBufferSynth22, st->L_frame * 2, st->last_L_frame * 2 ); + + if ( st->L_frame == L_FRAME ) + { + for ( n = 0; n < st->L_frame * 2; n++ ) + { + st->hFdCngDec->hFdCngCom->olapBufferSynth[n] = st->hFdCngDec->hFdCngCom->olapBufferSynth[n] * 1.25f; + } + } + else + { + for ( n = 0; n < st->L_frame * 2; n++ ) + { + st->hFdCngDec->hFdCngCom->olapBufferSynth[n] = st->hFdCngDec->hFdCngCom->olapBufferSynth[n] / 1.25f; + } + } + } + } + + if ( st->bwidth != st->last_bwidth ) + { + st->hFdCngDec->hFdCngCom->msFrCnt_init_counter = 0; + st->hFdCngDec->hFdCngCom->init_old = FLT_MAX; + } + + if ( st->tcxonly ) + { + st->p_bpf_noise_buf = NULL; + } + else + { + st->p_bpf_noise_buf = st->bpf_noise_buf; + } + } + } + + st->total_brate = total_brate; + + return; +} + + +/*-------------------------------------------------------------------* + * dec_acelp_tcx_frame() + * + * Main decoding function + *--------------------------------------------------------------------*/ + +void dec_acelp_tcx_frame( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *concealWholeFrame, /* i/o: concealment flag */ + float *output, /* o : synthesis */ + float *bpf_noise_buf, /* i/o: BPF noise buffer */ + float *pcmbufFB, /* o : synthesis @output_FS */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float pitch_buf[], /* o : floating pitch for each subframe */ + STEREO_CNG_DEC_HANDLE hStereoCng /* i : stereo CNG handle */ +) +{ + int16_t i; + int16_t start_bit_pos; + int16_t tmp; + int16_t bitsRead; + int16_t param[DEC_NPRM_DIV * NB_DIV]; + float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ + float *ptr_bwe_exc; /* pointer to BWE excitation signal in the current frame */ + + wmops_sub_start( "dec_acelp_tcx_frame" ); + + start_bit_pos = st->next_bit_pos; + if ( st->rf_flag == 1 ) + { + start_bit_pos -= 2; + } + + /* -------------------------------------------------------------- */ + /* IDENTIFY FRAME TYPE */ + /* -------------------------------------------------------------- */ + + st->m_old_frame_type = st->m_frame_type; + + if ( *concealWholeFrame == 0 ) + { + uint8_t m_frame_type = st->m_frame_type; + int16_t bwidth = st->bwidth; + int16_t cng_type = st->cng_type; + int16_t L_frame = st->L_frame; + int32_t total_brate = st->last_total_brate; + + decode_frame_type( st, hStereoCng ); + + st->force_lpd_reset = 0; + + if ( ( st->last_codec_mode ) == MODE2 && ( st->BER_detect || ( st->prev_bfi && st->m_frame_type == ZERO_FRAME && st->m_old_frame_type == ACTIVE_FRAME ) ) ) + { + /* Copy back parameters from previous frame, because there is a high risk they are corrupt + * Do concealment with configuration used in previous frame */ + st->m_frame_type = m_frame_type; + st->bwidth = bwidth; + st->cng_type = cng_type; + st->L_frame = L_frame; + if ( st->ini_frame != 0 ) + { + st->total_brate = total_brate; + } + + *concealWholeFrame = 1; + st->m_decodeMode = DEC_CONCEALMENT_EXT; + st->BER_detect = 0; + + if ( ( st->bwidth != st->last_bwidth ) || ( st->rf_flag != st->rf_flag_last ) || ( st->total_brate != st->last_total_brate ) ) + { + st->force_lpd_reset = 1; + } + + st->core_brate = st->last_core_brate; + st->bfi = 1; + if ( st->ini_frame == 0 && st->hTcxCfg != NULL ) + { + st->hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( SWB ); + } + } + else + { + st->core_brate = st->total_brate; + bpf_noise_buf = st->p_bpf_noise_buf; + } + } + + if ( *concealWholeFrame != 0 ) + { + /* add two zero bytes for arithmetic coder flush */ + for ( i = 0; i < 8 * 2; i++ ) + { + st->bit_stream[i] = 0; + } + } + + if ( !( st->m_frame_type == SID_FRAME || st->m_frame_type == ZERO_FRAME ) ) + { + + /* -------------------------------------------------------------- */ + /* DECODE CORE */ + /* -------------------------------------------------------------- */ + int32_t nbits_total; + nbits_total = st->total_brate / FRAMES_PER_SEC; + if ( *concealWholeFrame ) + { + + tmp = 0; /*to avoid empty counting */ + } + + + tmp = (int16_t) ( nbits_total - ( st->next_bit_pos - start_bit_pos ) ); + + bitsRead = 0; + + /* update old BWE excitation buffer */ + if ( st->hBWE_TD != NULL ) + { + set_f( old_bwe_exc + PIT16k_MAX * 2, 0.f, ( ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 ); + ptr_bwe_exc = old_bwe_exc + PIT16k_MAX * 2; + mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); + } + else + { + ptr_bwe_exc = NULL; + } + + /* Decode the LPD data */ + if ( st->m_decodeMode == DEC_NO_FRAM_LOSS ) + { + decoder_LPD( st, output, pcmbufFB, &tmp, bpf_noise_buf, 0, &bitsRead, param, pitch_buf, voice_factors, ptr_bwe_exc ); + + if ( !st->rate_switching_init && ( st->last_codec_mode ) == MODE2 && !( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) && st->bfi ) + { + *concealWholeFrame = 1; + st->m_decodeMode = DEC_CONCEALMENT_EXT; + st->BER_detect = 0; + } + } + else if ( st->m_decodeMode == DEC_CONCEALMENT_EXT ) + { + decoder_LPD( st, output, pcmbufFB, NULL, bpf_noise_buf, 1, /* bfi - st->bfi can be 0 here - MODE2 stays in PLC when DTX appears after a loss */ + &bitsRead, NULL, pitch_buf, voice_factors, ptr_bwe_exc ); + } + + if ( st->hBWE_TD != NULL ) + { + if ( ( !st->bfi && ( st->prev_bfi || st->prev_use_partial_copy ) ) || ( ( st->last_vbr_hw_BWE_disable_dec == 1 ) && ( st->vbr_hw_BWE_disable_dec == 0 ) ) ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); + } + + if ( st->core == ACELP_CORE && st->igf && st->con_tcx == 0 ) + { + non_linearity( ptr_bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); + + /* update the old BWE exe memory */ + mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); + } + else + { + set_f( st->hBWE_TD->old_bwe_exc_extended, 0, NL_BUFF_OFFSET ); + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); /* reset old non_linear exc during igf frames */ + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + } + } + + /* for ACELP mode, skip core data to read TD-BWE side info */ + if ( ( !st->bfi ) && st->core == ACELP_CORE && st->total_brate > 0 ) + { + nbits_total = st->total_brate / FRAMES_PER_SEC; + /* target bs-position "-2", because of earlier "start_bit_pos -= 2;", which are included in "st->rf_target_bits"*/ + /* from "-2" to "-3" as flag-bit not considered in rf_target_bits */ + if ( st->rf_flag ) + { + get_next_indice_tmp( st, (int16_t) ( start_bit_pos + nbits_total - st->rf_target_bits - 3 - get_tbe_bits( st->total_brate, st->bwidth, st->rf_flag ) - st->next_bit_pos ) ); + } + else + { + get_next_indice_tmp( st, (int16_t) ( start_bit_pos + nbits_total - st->rf_target_bits - get_tbe_bits( st->total_brate, st->bwidth, st->rf_flag ) - st->next_bit_pos ) ); + } + tbe_read_bitstream( st ); + } + + if ( *concealWholeFrame ) + { + /*"LPD dec - All BFI"*/ + + tmp = 0; /*to avoid empty counting */ + } + + /* updates */ + st->last_voice_factor = voice_factors[st->nb_subfr - 1]; + st->last_coder_type = st->coder_type; + } + else + { + if ( st->m_frame_type == SID_FRAME ) + { + /* Decode the FD-CNG bitstream */ + FdCng_decodeSID( st ); + } + + /* updates */ + st->last_voice_factor = 0; + st->last_coder_type = INACTIVE; + } + + wmops_sub_end(); + return; +} diff --git a/lib_dec/dec_amr_wb.c b/lib_dec/dec_amr_wb.c new file mode 100644 index 0000000000..79c9b8d951 --- /dev/null +++ b/lib_dec/dec_amr_wb.c @@ -0,0 +1,173 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * decod_amr_wb() + * + * Decode excitation signal in AMR-WB IO mode + *---------------------------------------------------------------------*/ + +void decod_amr_wb( + Decoder_State *st, /* i/o: decoder static memory */ + const float *Aq, /* i : LP filter coefficients */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + int16_t hf_gain[NB_SUBFR], /* o : decoded HF gain */ + float *voice_factors, /* o : voicing factors */ + float *gain_buf /* o : floating pitch gain for each subframe */ +) +{ + int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ + float gain_pit; /* pitch gain */ + float gain_code; /* gain/normalized gain of the algebraic excitation */ + float norm_gain_code; /* normalized gain of the algebraic excitation */ + float gain_inov; /* Innovation gain */ + float voice_fac; /* voicing factor */ + float code[L_SUBFR]; /* algebraic codevector */ + const float *p_Aq; /* Pointer to frame LP coefficient */ + float *pt_pitch; /* pointer to floating pitch */ + int16_t i_subfr, i; /* tmp variables */ + int16_t pitch_limit_flag; + int16_t lp_flag; + + /*-----------------------------------------------------------------* + * Select LP filtering flag + *-----------------------------------------------------------------*/ + + if ( st->core_brate < ACELP_11k60 ) + { + lp_flag = LOW_PASS; + } + else + { + lp_flag = NORMAL_OPERATION; + } + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + p_Aq = Aq; /* pointer to interpolated LPC parameters */ + pt_pitch = pitch_buf; /* pointer to the pitch buffer */ + st->hAmrwb_IO->lt_voice_fac = 0.0f; + pitch_limit_flag = 0; /* always restrained pitch Q range in IO mode */ + + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------------* + * Decode pitch lag + *----------------------------------------------------------------------*/ + + *pt_pitch = pit_decode( st, st->core_brate, 1, L_FRAME, i_subfr, -1, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_SUBFR, 0, NULL ); + + /*--------------------------------------------------------------* + * Find the adaptive codebook vector + *--------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*--------------------------------------------------------------* + * LP filtering of the adaptive excitation + *--------------------------------------------------------------*/ + + lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_FRAME, lp_flag, exc ); + + /*--------------------------------------------------------------* + * Innovation decoding + *--------------------------------------------------------------*/ + + inov_decode( st, st->core_brate, 1, L_FRAME, 0, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); + + /*--------------------------------------------------------------* + * Gain decoding + * Estimate spectrum tilt and voicing + *--------------------------------------------------------------*/ + + gain_dec_amr_wb( st, st->core_brate, &gain_pit, &gain_code, st->hAmrwb_IO->past_qua_en, &gain_inov, code, &norm_gain_code ); + + /* update LP filtered gains for the case of frame erasures */ + lp_gain_updt( i_subfr, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_FRAME ); + + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*----------------------------------------------------------------------* + * Find the total excitation + *----------------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*----------------------------------------------------------------* + * Excitation enhancements + *----------------------------------------------------------------*/ + + enhancer( MODE1, st->core_brate, -1, 1, -1, L_FRAME, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); + + /*-----------------------------------------------------------------* + * HF gain modification factors at 23.85 kbps + *-----------------------------------------------------------------*/ + + if ( st->core_brate == ACELP_23k85 ) + { + hf_gain[i_subfr / L_SUBFR] = get_next_indice( st, 4 ); + } + + voice_fac = VF_0th_PARAM + VF_1st_PARAM * voice_fac + VF_2nd_PARAM * voice_fac * voice_fac; + voice_factors[i_subfr / L_SUBFR] = min( max( 0.0f, voice_fac ), 1.0f ); + + p_Aq += ( M + 1 ); + pt_pitch++; + + st->hAmrwb_IO->lt_voice_fac += 0.25f * voice_fac; + gain_buf[i_subfr / L_SUBFR] = gain_pit; + } + + return; +} diff --git a/lib_dec/dec_gen_voic.c b/lib_dec/dec_gen_voic.c new file mode 100644 index 0000000000..97fba943df --- /dev/null +++ b/lib_dec/dec_gen_voic.c @@ -0,0 +1,299 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * decod_gen_voic() + * + * Decode generic (GC), voiced (VC) and AMR-WB IO frames + *---------------------------------------------------------------------*/ + +ivas_error decod_gen_voic( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const int16_t do_WI, /* i : FEC fast recovery flag */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* o : excitation for SWB TBE */ + int16_t *unbits, /* number of unused bits */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + int16_t T0 = PIT_MIN, T0_frac = 0, T0_min, T0_max; /* integer pitch variables */ + float gain_pit = 0.0f; /* pitch gain */ + float gain_code = 0.0f; /* gain/normalized gain of the algebraic excitation */ + float norm_gain_code = 0.0f; /* normalized gain of the algebraic excitation */ + float gain_inov = 0; /* Innovation gain */ + float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ + float voice_fac; /* voicing factor */ + float code[L_SUBFR]; /* algebraic codevector */ + + const float *p_Aq; /* Pointer to frame LP coefficient */ + float *pt_pitch; /* pointer to floating pitch */ + int16_t i_subfr, i; /* tmp variables */ + float error_flag = 0.0f; + float gain_preQ = 0; /* Gain of prequantizer excitation */ + float code_preQ[L_SUBFR]; /* Prequantizer excitation */ + float norm_gain_preQ; + int16_t pitch_limit_flag; + + DTFS_STRUCTURE *PREVP, *CURRP; + int16_t shft_prev = 0, shft_curr = 0; + float ph_offset, dummy2[2], out[L_FRAME16k], enratio = 0.0f; + float sp_enratio, curr_spch_nrg, prev_spch_nrg, curr_res_nrg, prev_res_nrg, syn_tmp[L_FRAME16k], mem_tmp[M]; + int16_t harm_flag_acelp; + ivas_error error; + + error = IVAS_ERR_OK; + + /* read harmonicity flag */ + harm_flag_acelp = 0; + if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && st->coder_type == GENERIC ) + { + harm_flag_acelp = get_next_indice( st, 1 ); + } + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + p_Aq = Aq; /* pointer to interpolated LPC parameters */ + pt_pitch = pitch_buf; /* pointer to the pitch buffer */ + norm_gain_preQ = 0.0f; + gain_preQ = 0; + set_f( code_preQ, 0, L_SUBFR ); + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------------* + * Decode pitch lag + *----------------------------------------------------------------------*/ + + *pt_pitch = pit_decode( st, st->core_brate, 0, L_frame, i_subfr, st->coder_type, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_SUBFR, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + /*--------------------------------------------------------------* + * Find the adaptive codebook vector + *--------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + tbe_celp_exc( st->element_mode, st->idchan, bwe_exc, L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error_flag, st->tdm_LRTD_flag ); + + /*--------------------------------------------------------------* + * LP filtering of the adaptive excitation + *--------------------------------------------------------------*/ + + lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); + + /*-----------------------------------------------------------------* + * Transform-domain contribution decoding (active frames) + *-----------------------------------------------------------------*/ + + if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->coder_type != INACTIVE ) + { + gain_code = 0.0f; + transf_cdbk_dec( st, harm_flag_acelp, i_subfr, Es_pred, gain_code, &gain_preQ, &norm_gain_preQ, code_preQ, unbits ); + } + + /*--------------------------------------------------------------* + * Innovation decoding + *--------------------------------------------------------------*/ + + inov_decode( st, st->core_brate, 0, L_frame, sharpFlag, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); + + /*--------------------------------------------------------------* + * Gain decoding + * Estimate spectrum tilt and voicing + *--------------------------------------------------------------*/ + + if ( st->core_brate <= ACELP_8k00 ) + { + gain_dec_lbr( st, st->coder_type, i_subfr, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, gains_mem, L_SUBFR ); + } + else if ( st->core_brate > ACELP_32k ) + { + gain_dec_SQ( st, i_subfr, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + else + { + gain_dec_mless( st, L_frame, st->coder_type, i_subfr, -1, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*-----------------------------------------------------------------* + * Transform-domain contribution decoding (inactive frames) + *-----------------------------------------------------------------*/ + + if ( st->total_brate >= MAX_GSC_INACTIVE_BRATE && st->coder_type == INACTIVE ) + { + transf_cdbk_dec( st, 0, i_subfr, Es_pred, gain_code, &gain_preQ, &norm_gain_preQ, code_preQ, unbits ); + } + + /* update LP filtered gains for the case of frame erasures */ + lp_gain_updt( i_subfr, gain_pit, norm_gain_code + norm_gain_preQ, &st->lp_gainp, &st->lp_gainc, L_frame ); + + /*----------------------------------------------------------------------* + * Find the total excitation + *----------------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Add the ACELP pre-quantizer contribution + *-----------------------------------------------------------------*/ + + /* if( (coder_type == GENERIC && st->core_brate >= MIN_BRATE_AVQ_EXC) || (coder_type == INACTIVE && st->total_brate > MAX_GSC_INACTIVE_BRATE) ) */ + if ( gain_preQ != 0 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] += gain_preQ * code_preQ[i]; + exc[i + i_subfr] += gain_preQ * code_preQ[i]; + } + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); + + /*----------------------------------------------------------------* + * Excitation enhancements (update of total excitation signal) + *----------------------------------------------------------------*/ + + if ( st->core_brate > ACELP_32k || st->coder_type == INACTIVE ) + { + mvr2r( exc + i_subfr, exc2 + i_subfr, L_SUBFR ); + } + else + { + enhancer( MODE1, st->core_brate, -1, 0, st->coder_type, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); + } + + p_Aq += ( M + 1 ); + pt_pitch++; + gain_buf[i_subfr / L_SUBFR] = gain_pit; + st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; + } + + /* FEC fast recovery */ + if ( do_WI ) + { + shft_prev = L_EXC_MEM - (int16_t) rint_new( st->bfi_pitch ); + prev_res_nrg = sum2_f( st->hWIDec->old_exc2 + shft_prev, (int16_t) rint_new( st->bfi_pitch ) ) + 1e-6f; + prev_spch_nrg = sum2_f( st->hWIDec->old_syn2 + shft_prev, (int16_t) rint_new( st->bfi_pitch ) ) + 1e-6f; + + mvr2r( st->mem_syn2, mem_tmp, M ); + syn_12k8( st->L_frame, Aq, exc2, syn_tmp, mem_tmp, 1 ); + + shft_curr = st->L_frame - (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ); + curr_res_nrg = sum2_f( exc2 + shft_curr, (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ) ); + curr_spch_nrg = sum2_f( syn_tmp + shft_curr, (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ) ); + + enratio = curr_res_nrg / prev_res_nrg; + sp_enratio = curr_spch_nrg / prev_spch_nrg; + + if ( enratio > 0.25f && + enratio < 15.0f && + sp_enratio > 0.15f && + st->bfi_pitch < 150 && + pitch_buf[NB_SUBFR16k - 1] < 150 ) + { + if ( ( error = DTFS_new( &PREVP ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = DTFS_new( &CURRP ) ) != IVAS_ERR_OK ) + { + return error; + } + + + DTFS_to_fs( st->hWIDec->old_exc2 + shft_prev, (int16_t) rint_new( st->bfi_pitch ), PREVP, (int16_t) st->output_Fs, do_WI ); + DTFS_to_fs( exc2 + shft_curr, (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ), CURRP, (int16_t) st->output_Fs, do_WI ); + + ph_offset = 0.0f; + if ( ( error = WIsyn( *PREVP, CURRP, dummy2, &ph_offset, out, st->L_frame, 1 ) ) != IVAS_ERR_OK ) + { + return error; + } + + + mvr2r( out, exc2, st->L_frame ); + mvr2r( exc2, exc, st->L_frame ); + + /* update bwe_exc for SWB-TBE */ + if ( st->hBWE_TD != NULL ) + { + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + interp_code_4over2( exc + i_subfr, bwe_exc + ( i_subfr * 2 ), L_SUBFR ); + } + } + + count_free( PREVP ); + count_free( CURRP ); + } + } + + /* SC-VBR */ + st->prev_gain_pit_dec = gain_pit; + + return error; +} diff --git a/lib_dec/dec_higher_acelp.c b/lib_dec/dec_higher_acelp.c new file mode 100644 index 0000000000..32b5b70514 --- /dev/null +++ b/lib_dec/dec_higher_acelp.c @@ -0,0 +1,232 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * transf_cdbk_dec() + * + * Transform domain contribution decoding + *-----------------------------------------------------------------*/ + +void transf_cdbk_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t harm_flag_acelp, /* i : harmonic flag for higher rates ACELP */ + const int16_t i_subfr, /* i : subframe index */ + const float Es_pred, /* i : predicited scaled innovation energy */ + const float gain_code, /* i : innovative excitation gain */ + float *gain_preQ, /* o : prequantizer excitation gain */ + float *norm_gain_preQ, /* o : normalized prequantizer excitation gain */ + float code_preQ[], /* o : prequantizer excitation */ + int16_t *unbits /* o : number of AVQ unused bits */ +) +{ + int16_t i, index, nBits, Nsv; + int16_t x_norm[L_SUBFR]; + float Ecode; + int16_t nq[L_SUBFR / WIDTH_BAND]; + int16_t avq_bit_sFlag; + int16_t trgtSvPos; + + avq_bit_sFlag = 0; + if ( st->element_mode > EVS_MONO ) + { + avq_bit_sFlag = 1; + } + + /*--------------------------------------------------------------* + * Set bit-allocation + *--------------------------------------------------------------*/ + + Nsv = 8; + nBits = st->acelp_cfg.AVQ_cdk_bits[i_subfr / L_SUBFR]; + + /* increase # of AVQ allocated bits by unused bits from the previous subframe */ + nBits += ( *unbits ); + + /*--------------------------------------------------------------* + * Dequantize prequantizer excitation gain + *--------------------------------------------------------------*/ + + index = get_next_indice( st, G_AVQ_BITS ); + + if ( st->coder_type == INACTIVE ) + { + if ( st->core_brate > 56000 ) + { + *gain_preQ = usdequant( index, G_AVQ_MIN_INACT_64k, G_AVQ_DELTA_INACT_64k ); + } + else if ( st->core_brate > 42000 ) + { + *gain_preQ = usdequant( index, G_AVQ_MIN_INACT_48k, G_AVQ_DELTA_INACT_48k ); + } + else + { + *gain_preQ = usdequant( index, G_AVQ_MIN_INACT, G_AVQ_DELTA_INACT ); + } + + *gain_preQ *= gain_code; + } + else + { + if ( st->core_brate > ACELP_24k40 && st->core_brate <= 42000 ) + { + *gain_preQ = gain_dequant( index, 0.1f * G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); + } + else + { + *gain_preQ = gain_dequant( index, G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); + } + if ( Es_pred < 0 ) + { + *gain_preQ *= (float) ( 0.25f * fabs( Es_pred ) ); + } + else + { + *gain_preQ *= Es_pred; + } + } + + trgtSvPos = Nsv - 1; + if ( avq_bit_sFlag && nBits > 85 && !harm_flag_acelp && ( st->coder_type == GENERIC || st->coder_type == TRANSITION || st->coder_type == INACTIVE ) ) + { + trgtSvPos = 2; + avq_bit_sFlag = 2; + } + + /*--------------------------------------------------------------* + * Encode and multiplex subvectors into bitstream + *--------------------------------------------------------------*/ + + AVQ_demuxdec( st, x_norm, &nBits, Nsv, nq, avq_bit_sFlag, trgtSvPos ); + + /* save # of AVQ unused bits for next subframe */ + *unbits = nBits; + + /*--------------------------------------------------------------* + * iDCT transform + *--------------------------------------------------------------*/ + + set_f( code_preQ, 0.0f, L_SUBFR ); + for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) + { + code_preQ[i] = (float) ( x_norm[i] ); + } + + if ( st->coder_type == INACTIVE || st->core_brate > MAX_BRATE_AVQ_EXC_TD || harm_flag_acelp ) + { + edct2( L_SUBFR, 1, code_preQ, code_preQ, ip_edct2_64, w_edct2_64 ); + } + + /*--------------------------------------------------------------* + * Preemphasise + *--------------------------------------------------------------*/ + + /* in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ + if ( ( nq[7] != 0 ) && ( st->last_nq_preQ - nq[0] > 7 ) ) + { + st->mem_preemp_preQ /= 16; + } + + st->last_nq_preQ = nq[7]; + + /* TD pre-quantizer: in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ + if ( st->element_mode > EVS_MONO && st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp && code_preQ[0] != 0 ) + { + if ( fabs( (float) ( st->last_code_preq ) ) > 16.0f * (float) fabs( code_preQ[0] ) ) + { + st->mem_preemp_preQ /= 16; + } + else if ( fabs( (float) ( st->last_code_preq ) ) > 8.0f * (float) fabs( code_preQ[0] ) ) + { + st->mem_preemp_preQ /= 8; + } + } + + st->last_code_preq = (int16_t) code_preQ[L_SUBFR - 1]; + + preemph( code_preQ, FAC_PRE_AVQ, L_SUBFR, &st->mem_preemp_preQ ); + + /*--------------------------------------------------------------* + * Compute normalized prequantizer excitation gain for FEC + *--------------------------------------------------------------*/ + + Ecode = ( sum2_f( code_preQ, L_SUBFR ) + 0.01f ) / L_SUBFR; + + /* somewhat attenuate pre-quantizer normalized gain for FEC */ + *norm_gain_preQ = 0.8f * ( *gain_preQ ) * (float) sqrt( Ecode ); + + st->use_acelp_preq = 1; + + return; +} + +/*-----------------------------------------------------------* + * gain_dequant() + * + * Returns decoded gain quantized between the specified + * range using the specified number of levels. + *-----------------------------------------------------------*/ + +/*! r: decoded gain */ +float gain_dequant( + int16_t index, /* i : quantization index */ + const float min_val, /* i : value of lower limit */ + const float max_val, /* i : value of upper limit */ + const int16_t bits /* i : number of bits to dequantize */ +) +{ + float gain, c_min, c_mult; + int16_t levels; + + levels = 1 << bits; + + c_min = (float) log10( min_val ); + c_mult = (float) ( ( levels - 1 ) / ( log10( max_val ) - c_min ) ); + + gain = (float) pow( 10.0, ( ( (float) index ) / c_mult ) + c_min ); + + return ( gain ); +} diff --git a/lib_dec/dec_nelp.c b/lib_dec/dec_nelp.c new file mode 100644 index 0000000000..2cdcd126db --- /dev/null +++ b/lib_dec/dec_nelp.c @@ -0,0 +1,104 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * decod_nelp() + * + * Decode unvoiced NELP + *-------------------------------------------------------------------*/ + +void decod_nelp( + Decoder_State *st, /* i/o: decoder static memory */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *exc, /* o : adapt. excitation exc */ + float *exc2, /* o : adapt. excitation/total exc */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t bfi, /* i : bad frame indicator */ + float *gain_buf /* o : floating pitch gain for each subframe */ +) +{ + int16_t i, coder_type; + float exc_nelp[L_FRAME]; + + *tmp_noise = 0; + + if ( st->use_partial_copy && st->rf_frame_type == RF_NELP ) + { + coder_type = UNVOICED; + } + else + { + coder_type = st->coder_type; + } + + nelp_decoder( st, exc_nelp, exc, bfi, coder_type, gain_buf ); + + mvr2r( exc_nelp, exc, L_FRAME ); + mvr2r( exc_nelp, exc2, L_FRAME ); + + st->tilt_code = 0.0f; /* purely unvoiced */ + set_f( st->tilt_code_dec, 0, NB_SUBFR16k ); + st->prev_tilt_code_dec = st->tilt_code; + + st->dispMem[0] = 0; + st->prev_gain_pit_dec = 0.0; + st->dispMem[2] = st->prev_gain_pit_dec; + + for ( i = 3; i < 7; i++ ) + { + st->dispMem[i] = st->dispMem[i - 1]; + } + + set_f( pitch_buf, L_SUBFR, NB_SUBFR ); + if ( st->hBWE_TD != NULL ) + { + interp_code_5over2( exc2, bwe_exc, L_FRAME ); + } + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + + return; +} diff --git a/lib_dec/dec_pit_exc.c b/lib_dec/dec_pit_exc.c new file mode 100644 index 0000000000..547e321aaf --- /dev/null +++ b/lib_dec/dec_pit_exc.c @@ -0,0 +1,344 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * dec_pit_exc() + * + * Decode pitch-only contribution (used by the GSC technology) + *-------------------------------------------------------------------*/ + +void dec_pit_exc( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *code, /* o : innovation */ + float *exc, /* i/o: adapt. excitation exc */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ + float gain_pit; /* pitch gain */ + float gain_code; /* gain/normalized gain of the algebraic excitation */ + float norm_gain_code; /* normalized gain of the algebraic excitation */ + float gain_inov; /* Innovation gain */ + float voice_fac; /* voicing factor */ + int16_t L_subfr, pit_idx; + const float *p_Aq; /* Pointer to frame LP coefficient */ + float *pt_pitch; /* pointer to floating pitch */ + int16_t i_subfr, i; /* tmp variables */ + int32_t Local_BR, Pitch_BR; + int16_t Pitch_CT, pitch_limit_flag; + int16_t nbits; + float *pt_gain; /* Pointer to floating gain values for each subframe */ + int16_t use_fcb; + float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + use_fcb = 0; + if ( st->GSC_IVAS_mode > 0 && ( st->GSC_noisy_speech || st->core_brate > GSC_H_RATE_STG ) ) + { + Local_BR = ACELP_8k00; + Pitch_CT = GENERIC; + Pitch_BR = ACELP_8k00; + if ( st->L_frame == L_FRAME16k ) + { + Local_BR = ACELP_14k80; + if ( st->GSC_IVAS_mode > 0 ) + { + Local_BR = ACELP_9k60; + } + Pitch_BR = st->core_brate; + } + } + else if ( st->GSC_noisy_speech ) + { + Local_BR = ACELP_7k20; + Pitch_CT = GENERIC; + Pitch_BR = ACELP_7k20; + if ( L_frame == L_FRAME16k ) + { + Pitch_BR = st->core_brate; + } + } + else + { + Local_BR = ACELP_7k20; + Pitch_CT = AUDIO; + Pitch_BR = st->core_brate; + + if ( L_frame == L_FRAME16k ) + { + Local_BR = ACELP_13k20; + Pitch_CT = GENERIC; + } + } + + gain_code = 0; + pitch_limit_flag = 1; /* always extended pitch Q range */ + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + L_subfr = st->L_frame / nb_subfr; + p_Aq = Aq; /* pointer to interpolated LPC parameters */ + pt_pitch = pitch_buf; /* pointer to the pitch buffer */ + pt_gain = gain_buf; /* pointer to the gain buffer */ + + if ( ( ( st->core_brate >= MIN_RATE_FCB || ( st->GSC_noisy_speech == 1 && ( ( st->L_frame == L_FRAME && st->core_brate >= ACELP_13k20 ) || ( st->L_frame == L_FRAME16k && st->core_brate >= GSC_H_RATE_STG ) || st->GSC_IVAS_mode == 0 ) ) ) && L_subfr == L_SUBFR ) ) + { + use_fcb = 1; + } + else if ( st->GSC_IVAS_mode > 0 && L_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) + { + use_fcb = 2; + st->acelp_cfg.fcb_mode = 1; + set_s( st->acelp_cfg.gains_mode, 6, 4 ); + set_s( st->acelp_cfg.pitch_bits, 9, 4 ); + set_s( st->acelp_cfg.fixed_cdk_index, 14, 5 ); + } + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) + { + /*----------------------------------------------------------------------* + * Decode pitch lag + *----------------------------------------------------------------------*/ + + *pt_pitch = pit_decode( st, Pitch_BR, 0, L_frame, i_subfr, Pitch_CT, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_subfr, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + /*--------------------------------------------------------------* + * Find the adaptive codebook vector. + *--------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_subfr + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*--------------------------------------------------------------* + * Innovation decoding + *--------------------------------------------------------------*/ + + if ( use_fcb == 1 ) + { + inov_decode( st, Local_BR, 0, L_frame, 1, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); + + /*--------------------------------------------------------------* + * Gain decoding + * Estimate spectrum tilt and voicing + *--------------------------------------------------------------*/ + + gain_dec_mless( st, L_frame, LOCAL_CT, i_subfr, -1, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + } + else if ( use_fcb == 2 ) + { + /*--------------------------------------------------------------* + * Innovation decoding + *--------------------------------------------------------------*/ + + inov_decode( st, st->core_brate, 0, L_FRAME, 0, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, 2 * L_SUBFR ); + + /*--------------------------------------------------------------* + * Gain decoding + * Estimate spectrum tilt and voicing + *--------------------------------------------------------------*/ + + gain_dec_lbr( st, GENERIC, i_subfr, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, gains_mem, 2 * L_SUBFR ); + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, 2 * L_SUBFR, 0 ); + } + else + { + nbits = 5; + if ( st->core_brate < MIN_RATE_FCB ) + { + nbits = 4; + } + + set_f( code, 0, L_SUBFR ); + gain_code = 0.0f; + st->tilt_code = 0.0f; + + pit_idx = get_next_indice( st, nbits ); + + gain_pit = 0.5853f + dic_gp[pit_idx]; + + if ( st->BER_detect ) /* Bitstream is corrupted, use the past pitch gain */ + { + gain_pit = st->lp_gainp; + } + } + + /*----------------------------------------------------------------------* + * Find the total excitation + *----------------------------------------------------------------------*/ + + if ( use_fcb != 0 ) + { + for ( i = 0; i < L_subfr; i++ ) + { + exc[i + i_subfr] = gain_pit * exc[i + i_subfr] + gain_code * code[i]; + } + } + else + { + for ( i = 0; i < L_subfr; i++ ) + { + exc[i + i_subfr] = gain_pit * exc[i + i_subfr]; + } + } + + if ( L_subfr == 5 * L_SUBFR ) + { + /* update gains for FEC - equivalent to lp_gain_updt() */ + st->lp_gainp = gain_pit; + st->lp_gainc = 0; + + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + + p_Aq += 5 * ( M + 1 ); + } + else if ( L_subfr == 5 * L_SUBFR / 2 ) + { + if ( i_subfr == 0 ) + { + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + p_Aq += 2 * ( M + 1 ); + + /* update gains for FEC - equivalent to lp_gain_updt() */ + st->lp_gainp = ( 3.0f / 15.0f ) * gain_pit; + st->lp_gainc = 0; + } + else + { + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + p_Aq += 3 * ( M + 1 ); + + /* update gains for FEC - equivalent to lp_gain_updt() */ + st->lp_gainp = ( 12.0f / 15.0f ) * gain_pit; + st->lp_gainc = 0; + } + } + else if ( L_subfr == 2 * L_SUBFR ) + { + p_Aq += 2 * ( M + 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_gain = gain_pit; + pt_gain++; + *pt_gain = *( pt_gain - 1 ); + pt_gain++; + + if ( i_subfr == 0 ) + { + /* update gains for FEC - equivalent to lp_gain_updt() */ + st->lp_gainp = ( 3.0f / 10.0f ) * gain_pit; + st->lp_gainc = 0; + } + else + { + /* update gains for FEC - equivalent to lp_gain_updt() */ + st->lp_gainp = ( 7.0f / 10.0f ) * gain_pit; + st->lp_gainc = 0; + } + } + else if ( L_subfr == 4 * L_SUBFR ) + { + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_gain = gain_pit; + pt_gain++; + *pt_gain = *( pt_gain - 1 ); + pt_gain++; + *pt_gain = *( pt_gain - 1 ); + pt_gain++; + *pt_gain = *( pt_gain - 1 ); + pt_gain++; + p_Aq += 4 * ( M + 1 ); + + /* update gains for FEC - equivalent to lp_gain_updt() */ + st->lp_gainp = gain_pit; + st->lp_gainc = 0; + } + else + { + p_Aq += ( M + 1 ); + pt_pitch++; + *pt_gain = gain_pit; + pt_gain++; + + lp_gain_updt( i_subfr, gain_pit, 0, &st->lp_gainp, &st->lp_gainc, L_frame ); + } + } + + return; +} diff --git a/lib_dec/dec_post.c b/lib_dec/dec_post.c new file mode 100644 index 0000000000..9c90fcac62 --- /dev/null +++ b/lib_dec/dec_post.c @@ -0,0 +1,999 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define FORMAT_POST_FILT_G1 0.75f /*0.75f*/ /*denominator 0.9,0.75,0.15,0.9*/ + + +/*-------------------------------------------------------------------------- + * Local function prototypes + *--------------------------------------------------------------------------*/ + +static void Dec_postfilt( const int16_t L_subfr, PFSTAT *pfstat, const int16_t t0, const float *signal_ptr, const float *coeff, float *sig_out, const float gamma1, const float gamma2, const float gain_factor, const int16_t disable_hpf ); + +static void pst_ltp( const int16_t t0, const float *ptr_sig_in, float *ptr_sig_pst0, float gain_factor, const int16_t L_subfr ); + +static void search_del( const int16_t t0, const float *ptr_sig_in, int16_t *ltpdel, int16_t *phase, float *num_gltp, float *den_gltp, float *y_up, int16_t *off_yup, const int16_t L_subfr ); + +static void filt_plt( const float *s_in, const float *s_ltp, float *s_out, const float gain_plt, const int16_t L_subfr ); + +static void compute_ltp_l( const float *s_in, const int16_t ltpdel, const int16_t phase, float *y_up, float *num, float *den, const int16_t L_subfr ); + +static int16_t select_ltp( const float num1, const float den1, const float num2, const float den2 ); + +static void modify_pst_param( const float psf_lp_noise, float *g1, float *g2, const int16_t coder_type, float *gain_factor ); + +static void Dec_formant_postfilt( PFSTAT *pfstat, const float *signal_ptr, const float *coeff, float *sig_out, const float gamma1, const float gamma2, const int16_t l_subfr ); + + +/*--------------------------------------------------------------------------* + * Function Init_post_filter() + * + * Post-filter initialization + *--------------------------------------------------------------------------*/ + +void Init_post_filter( + PFSTAT_HANDLE hPFstat /* i/o: post-filter state memories handle */ +) +{ + /* It is off by default */ + hPFstat->on = 0; + + /* Reset */ + hPFstat->reset = 0; + + /* Initialize arrays and pointers */ + set_zero( hPFstat->mem_pf_in, L_SUBFR ); + + /* res2 = A(gamma2) residual */ + set_zero( hPFstat->mem_res2, DECMEM_RES2 ); + + /* 1/A(gamma1) memory */ + set_zero( hPFstat->mem_stp, L_SUBFR ); + + /* null memory to compute i.r. of A(gamma2)/A(gamma1) */ + set_zero( hPFstat->mem_zero, M ); + + /* for gain adjustment */ + hPFstat->gain_prec = 1.0f; + + return; +} + + +/*-------------------------------------------------------------------------- + * nb_post_filt() + * + * Main routine to perform post filtering of NB signals + *--------------------------------------------------------------------------*/ + +void nb_post_filt( + const int16_t L_frame, /* i : frame length */ + const int16_t L_subfr, /* i : sub-frame length */ + PFSTAT_HANDLE hPFstat, /* i/o: Post filter related memories */ + float *psf_lp_noise, /* i/o: long term noise energy */ + const float tmp_noise, /* i : noise energy */ + float *synth, /* i/o: synthesis */ + const float *Aq, /* i : LP filter coefficient */ + const float *pitch_buf, /* i : floating pitch for each subframe */ + const int16_t coder_type, /* i : coder_type */ + const int16_t BER_detect, /* i : BER detect flag */ + const int16_t disable_hpf /* i : flag to disabled HPF */ +) +{ + int16_t t0_first, i, j; + const float *p_Aq; + float *pf_in, post_G1, post_G2, gain_factor; + float pf_in_buffer[M + L_FRAME16k]; + + if ( !BER_detect ) + { + /* update long-term background noise energy during inactive frames */ + if ( coder_type == INACTIVE ) + { + *psf_lp_noise = 0.95f * *psf_lp_noise + 0.05f * tmp_noise; + } + } + + /* set post-filter input */ + modify_pst_param( *psf_lp_noise, &post_G1, &post_G2, coder_type, &gain_factor ); + + if ( hPFstat->reset ) + { + set_zero( hPFstat->mem_res2, DECMEM_RES2 ); + mvr2r( &synth[L_frame - L_SYN_MEM], hPFstat->mem_pf_in, L_SYN_MEM ); + mvr2r( &synth[L_frame - L_SYN_MEM], hPFstat->mem_stp, L_SYN_MEM ); + hPFstat->gain_prec = 1.0f; + hPFstat->reset = 0; + return; + } + + pf_in = &pf_in_buffer[M]; + mvr2r( hPFstat->mem_pf_in + L_SYN_MEM - M, &pf_in[-M], M ); + mvr2r( synth, pf_in, L_frame ); + mvr2r( &synth[L_frame - L_SYN_MEM], hPFstat->mem_pf_in, L_SYN_MEM ); + + /* deactivation of the post filter in case of AUDIO because it causes problems to singing sequences */ + if ( coder_type == AUDIO ) + { + post_G1 = 1.f; + post_G2 = 1.f; + gain_factor = 1.f; + } + + /* run the post filter */ + p_Aq = Aq; + for ( i = 0, j = 0; i < L_frame; i += L_subfr, j++ ) + { + t0_first = (int16_t) ( pitch_buf[j] + 0.5f ); + + Dec_postfilt( L_subfr, hPFstat, t0_first, &pf_in[i], p_Aq, &synth[i], post_G1, post_G2, gain_factor, disable_hpf ); + + p_Aq += ( M + 1 ); + } + + return; +} + + +/*-------------------------------------------------------------------------- + * formant_post_filt: + * + * WB and SWB formant post-filtering + *--------------------------------------------------------------------------*/ + +void formant_post_filt( + PFSTAT_HANDLE hPFstat, /* i/o: Post filter related memories */ + float *synth_in, /* i : 12k8 synthesis */ + const float *Aq, /* i : LP filter coefficient */ + float *synth_out, /* i/o: input signal */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_subfr, /* i : sub-frame length */ + const float lp_noise, /* i : background noise energy */ + const int32_t brate, /* i : bitrate */ + const int16_t off_flag /* i : off flag */ +) +{ + int16_t i_subfr; + const float *p_Aq; + float post_G1, post_G2; + + /*default parameter for noisy speech and high bitrates*/ + if ( L_frame == L_FRAME ) + { + post_G2 = 0.7f; + if ( lp_noise < LP_NOISE_THRESH ) /* Clean speech */ + { + if ( brate < ACELP_13k20 ) /*Low rates*/ + { + post_G1 = 0.8f; + } + else if ( brate < ACELP_24k40 ) + { + post_G1 = 0.75f; + } + else + { + post_G1 = 0.72f; + } + } + else /*Noisy speech*/ + { + if ( brate < ACELP_15k85 ) /*Low rates*/ + { + post_G1 = 0.75f; + } + else /*High rates*/ + { + post_G1 = 0.7f; + } + } + } + else + { + post_G2 = 0.76f; + if ( lp_noise >= LP_NOISE_THRESH ) + { + post_G1 = 0.76f; + } + else if ( brate == ACELP_13k20 ) + { + post_G1 = 0.82f; + } + else if ( brate == ACELP_16k40 ) + { + post_G1 = 0.80f; + } + else if ( brate == ACELP_24k40 || brate == ACELP_32k ) + { + post_G1 = 0.78f; + } + else + { + post_G1 = 0.76f; + } + } + + /* Switch off post-filter*/ + if ( off_flag ) + { + post_G1 = post_G2; + } + + /* Reset post filter */ + if ( hPFstat->reset ) + { + hPFstat->reset = 0; + mvr2r( &synth_in[L_frame - L_SYN_MEM], hPFstat->mem_pf_in, L_SYN_MEM ); + mvr2r( &synth_in[L_frame - L_SYN_MEM], hPFstat->mem_stp, L_SYN_MEM ); + hPFstat->gain_prec = 1.f; + mvr2r( synth_in, synth_out, L_frame ); + + return; + } + + /* input memory*/ + mvr2r( hPFstat->mem_pf_in, synth_in - L_SYN_MEM, L_SYN_MEM ); + mvr2r( &synth_in[L_frame - L_SYN_MEM], hPFstat->mem_pf_in, L_SYN_MEM ); + + /* run the post filter */ + p_Aq = Aq; + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) + { + Dec_formant_postfilt( hPFstat, &synth_in[i_subfr], p_Aq, &synth_out[i_subfr], post_G1, post_G2, L_subfr ); + + p_Aq += ( M + 1 ); + } + + return; +} + + +/*---------------------------------------------------------------------------- + * Dec_postfilt() + * + * Adaptive postfilter main function + * Short-term postfilter : + * Hst(z) = Hst0(z) Hst1(z) + * Hst0(z) = 1/g0 A(gamma2)(z) / A(gamma1)(z) + * if {hi} = i.r. filter A(gamma2)/A(gamma1) (truncated) + * g0 = SUM(|hi|) if > 1 + * g0 = 1. else + * Hst1(z) = 1/(1 - |mu|) (1 + mu z-1) + * with mu = k1 * gamma3 + * k1 = 1st parcor calculated on {hi} + * gamma3 = gamma3_minus if k1<0, gamma3_plus if k1>0 + * Long-term postfilter : + * harmonic postfilter : H0(z) = gl * (1 + b * z-p) + * b = gamma_g * gain_ltp + * gl = 1 / 1 + b + * computation of delay p on A(gamma2)(z) s(z) + * sub optimal search + * 1. search around 1st subframe delay (3 integer values) + * 2. search around best integer with fract. delays (1/8) + *----------------------------------------------------------------------------*/ + +static void Dec_postfilt( + const int16_t L_subfr, /* i : sub-frame length */ + PFSTAT *pfstat, /* i/o: Post filter related memories */ + const int16_t t0, /* i : pitch delay given by coder */ + const float *signal_ptr, /* i : input signal (pointer to current subframe */ + const float *coeff, /* i : LPC coefficients for current subframe */ + float *sig_out, /* o : postfiltered output */ + const float gamma1, /* i : short term postfilt. den. weighting factor*/ + const float gamma2, /* i : short term postfilt. num. weighting factor*/ + const float gain_factor, /* i : Gain Factor */ + const int16_t disable_hpf /* i : flag to disable HPF */ +) +{ + float apond1[M + 1]; /* s.t. denominator coeff. */ + float apond2[LONG_H_ST]; + float sig_ltp[L_SUBFR + 1]; /* H0 output signal */ + float res2[SIZ_RES2]; + float *sig_ltp_ptr; + float *res2_ptr; + float *ptr_mem_stp; + float parcor0; + + /* Init pointers and restore memories */ + res2_ptr = res2 + DECMEM_RES2; + ptr_mem_stp = pfstat->mem_stp + L_SYN_MEM - 1; + mvr2r( pfstat->mem_res2, res2, DECMEM_RES2 ); + + /* Compute weighted LPC coefficients */ + weight_a( coeff, apond1, gamma1, M ); + weight_a( coeff, apond2, gamma2, M ); + set_f( &apond2[M + 1], 0, LONG_H_ST - ( M + 1 ) ); + + /* Compute A(gamma2) residual */ + residu( apond2, M, signal_ptr, res2_ptr, L_subfr ); + + /* Harmonic filtering */ + sig_ltp_ptr = sig_ltp + 1; + + if ( !disable_hpf ) + { + pst_ltp( t0, res2_ptr, sig_ltp_ptr, gain_factor, L_subfr ); + } + else + { + mvr2r( res2_ptr, sig_ltp_ptr, L_subfr ); + } + + /* Save last output of 1/A(gamma1) */ + /* (from preceding subframe) */ + sig_ltp[0] = *ptr_mem_stp; + + /* Controls short term pst filter gain and compute parcor0 */ + calc_st_filt( apond2, apond1, &parcor0, sig_ltp_ptr, pfstat->mem_zero, L_subfr, -1 ); + + syn_filt( apond1, M, sig_ltp_ptr, sig_ltp_ptr, L_subfr, pfstat->mem_stp + L_SYN_MEM - M, 0 ); + mvr2r( sig_ltp_ptr + L_SUBFR - L_SYN_MEM, pfstat->mem_stp, L_SYN_MEM ); + + /* Tilt filtering */ + filt_mu( sig_ltp, sig_out, parcor0, L_subfr, -1 ); + + /* Gain control */ + scale_st( signal_ptr, sig_out, &( pfstat->gain_prec ), L_subfr, -1 ); + + /* Update for next subframe */ + mvr2r( &res2[L_subfr], pfstat->mem_res2, DECMEM_RES2 ); + + return; +} + + +/*---------------------------------------------------------------------------- + * Dec_formant_postfilt + * + * Post - adaptive postfilter main function + * Short term postfilter : + * Hst(z) = Hst0(z) Hst1(z) + * Hst0(z) = 1/g0 A(gamma2)(z) / A(gamma1)(z) + * if {hi} = i.r. filter A(gamma2)/A(gamma1) (truncated) + * g0 = SUM(|hi|) if > 1 + * g0 = 1. else + * Hst1(z) = 1/(1 - |mu|) (1 + mu z-1) + * with mu = k1 * gamma3 + * k1 = 1st parcor calculated on {hi} + * gamma3 = gamma3_minus if k1<0, gamma3_plus if k1>0 + *----------------------------------------------------------------------------*/ + +static void Dec_formant_postfilt( + PFSTAT_HANDLE hPFstat, /* i/o: states strucure */ + const float *signal_ptr, /* i : input signal (pointer to current subframe */ + const float *coeff, /* i : LPC coefficients for current subframe */ + float *sig_out, /* o : postfiltered output */ + const float gamma1, /* i : short term postfilt. den. weighting factor*/ + const float gamma2, /* i : short term postfilt. num. weighting factor*/ + const int16_t l_subfr /* i : subframe length */ +) +{ + /* Local variables and arrays */ + float apond1[M + 1]; /* s.t. denominator coeff. */ + float apond2[LONG_H_ST]; + float res2[L_SUBFR]; + float resynth[L_SUBFR + 1]; + float parcor0; + + /* Compute weighted LPC coefficients */ + weight_a( coeff, apond1, gamma1, M ); + weight_a( coeff, apond2, gamma2, M ); + + set_zero( &apond2[M + 1], LONG_H_ST - ( M + 1 ) ); + + /* Compute A(gamma2) residual */ + residu( apond2, M, signal_ptr, res2, l_subfr ); + + /* Controls short term pst filter gain and compute parcor0 */ + calc_st_filt( apond2, apond1, &parcor0, res2, hPFstat->mem_zero, l_subfr, -1 ); + + /* 1/A(gamma1) filtering, mem_stp is updated */ + resynth[0] = *( hPFstat->mem_stp + L_SYN_MEM - 1 ); + + syn_filt( apond1, M, res2, &( resynth[1] ), l_subfr, hPFstat->mem_stp + L_SYN_MEM - M, 0 ); + + mvr2r( &( resynth[1] ) + l_subfr - L_SYN_MEM, hPFstat->mem_stp, L_SYN_MEM ); + + /* Tilt filtering */ + filt_mu( resynth, sig_out, parcor0, l_subfr, -1 ); + + /* Gain control */ + scale_st( signal_ptr, sig_out, &hPFstat->gain_prec, l_subfr, -1 ); + + return; +} + + +/*---------------------------------------------------------------------------- + * pst_ltp() + * + * Perform harmonic postfilter + *----------------------------------------------------------------------------*/ + +static void pst_ltp( + const int16_t t0, /* i : pitch delay given by coder */ + const float *ptr_sig_in, /* i : postfilter input filter (residu2) */ + float *ptr_sig_pst0, /* o : harmonic postfilter output */ + float gain_factor, /* i : gain factor */ + const int16_t L_subfr /* i : sub-frame length */ +) +{ + int16_t ltpdel, phase; + float num_gltp, den_gltp; + float num2_gltp, den2_gltp; + float gain_plt; + float y_up[SIZ_Y_UP]; + const float *ptr_y_up; + int16_t off_yup; + + /* Suboptimal delay search */ + search_del( t0, ptr_sig_in, <pdel, &phase, &num_gltp, &den_gltp, y_up, &off_yup, L_subfr ); + + if ( num_gltp == 0.0f ) + { + mvr2r( ptr_sig_in, ptr_sig_pst0, L_subfr ); + } + else + { + if ( phase == 0 ) + { + ptr_y_up = ptr_sig_in - ltpdel; + } + else + { + /* filtering with long filter */ + compute_ltp_l( ptr_sig_in, ltpdel, phase, ptr_sig_pst0, &num2_gltp, &den2_gltp, L_subfr ); + + if ( select_ltp( num_gltp, den_gltp, num2_gltp, den2_gltp ) == 1 ) + { + /* select short filter */ + ptr_y_up = y_up + ( ( phase - 1 ) * ( L_subfr + 1 ) + off_yup ); + } + else + { + /* select long filter */ + num_gltp = num2_gltp; + den_gltp = den2_gltp; + ptr_y_up = ptr_sig_pst0; + } + } + + if ( num_gltp >= den_gltp ) + { + /* beta bounded to 1 */ + gain_plt = MIN_GPLT; + } + else + { + gain_plt = den_gltp / ( den_gltp + ( (float) 0.5 ) * num_gltp ); + } + + /* decrease gain in noisy condition */ + gain_plt += ( ( 1.0f - gain_plt ) * gain_factor ); + + /* filtering by H0(z) = harmonic filter */ + filt_plt( ptr_sig_in, ptr_y_up, ptr_sig_pst0, gain_plt, L_subfr ); + } + + return; +} + +/*---------------------------------------------------------------------------- + * search_del() + * + * Computes best (shortest) integer LTP delay + fine search + *---------------------------------------------------------------------------*/ + +static void search_del( + const int16_t t0, /* i : pitch delay given by coder */ + const float *ptr_sig_in, /* i : input signal (with delay line) */ + int16_t *ltpdel, /* o : delay = *ltpdel - *phase / f_up */ + int16_t *phase, /* o : phase */ + float *num_gltp, /* o : numerator of LTP gain */ + float *den_gltp, /* o : denominator of LTP gain */ + float *y_up, /* o : LT delayed signal if fract. delay*/ + int16_t *off_yup, /* o : offset in y_up */ + const int16_t L_subfr /* i : sub-frame length */ +) +{ + const float *ptr_h; + float tab_den0[F_UP_PST - 1], tab_den1[F_UP_PST - 1]; + float *ptr_den0, *ptr_den1; + const float *ptr_sig_past, *ptr_sig_past0; + const float *ptr1; + int16_t i, n, ioff, i_max; + float ener, num, numsq, den0, den1; + float den_int, num_int; + float den_max, num_max, numsq_max; + int16_t phi_max; + int16_t lambda, phi; + float temp0, temp1; + float *ptr_y_up; + + /*------------------------------------- + * Computes energy of current signal + *-------------------------------------*/ + + ener = 0.0f; + for ( i = 0; i < L_subfr; i++ ) + { + ener += ptr_sig_in[i] * ptr_sig_in[i]; + } + + if ( ener < 0.1f ) + { + *num_gltp = 0.0f; + *den_gltp = 1.0f; + *ltpdel = 0; + *phase = 0; + + return; + } + + /*------------------------------------- + * Selects best of 3 integer delays + * Maximum of 3 numerators around t0 + *-------------------------------------*/ + + lambda = t0 - 1; + ptr_sig_past = ptr_sig_in - lambda; + num_int = -1.0e30f; + i_max = 0; + + for ( i = 0; i < 3; i++ ) + { + num = 0.0f; + for ( n = 0; n < L_subfr; n++ ) + { + num += ptr_sig_in[n] * ptr_sig_past[n]; + } + if ( num > num_int ) + { + i_max = i; + num_int = num; + } + ptr_sig_past--; + } + + if ( num_int <= 0.0f ) + { + *num_gltp = 0.0f; + *den_gltp = 1.0f; + *ltpdel = 0; + *phase = 0; + + return; + } + + /* Calculates denominator for i_max */ + lambda += i_max; + ptr_sig_past = ptr_sig_in - lambda; + den_int = (float) 0.; + for ( n = 0; n < L_subfr; n++ ) + { + den_int += ptr_sig_past[n] * ptr_sig_past[n]; + } + + if ( den_int < (float) 0.1 ) + { + *num_gltp = (float) 0.; + *den_gltp = (float) 1.; + *ltpdel = 0; + *phase = 0; + return; + } + + /*---------------------------------- + * Select best phase around lambda + * Compute y_up & denominators + *----------------------------------*/ + + ptr_y_up = y_up; + den_max = den_int; + ptr_den0 = tab_den0; + ptr_den1 = tab_den1; + ptr_h = tab_hup_s; + ptr_sig_past0 = ptr_sig_in + LH_UP_S - 1 - lambda; /* points on lambda_max+1 */ + + /* loop on phase */ + for ( phi = 1; phi < F_UP_PST; phi++ ) + { + /* Computes criterion for (lambda+1) - phi/F_UP_PST */ + /* and lambda - phi/F_UP_PST */ + ptr_sig_past = ptr_sig_past0; + /* computes y_up[n] */ + for ( n = 0; n <= L_subfr; n++ ) + { + ptr1 = ptr_sig_past++; + temp0 = (float) 0.; + for ( i = 0; i < LH2_S; i++ ) + { + temp0 += ptr_h[i] * ptr1[-i]; + } + ptr_y_up[n] = temp0; + } + + /* compute den0 (lambda+1) and den1 (lambda) */ + /* part common to den0 and den1 */ + temp0 = (float) 0.; + for ( n = 1; n < L_subfr; n++ ) + { + temp0 += ptr_y_up[n] * ptr_y_up[n]; + } + + /* den0 */ + den0 = temp0 + ptr_y_up[0] * ptr_y_up[0]; + *ptr_den0++ = den0; + + /* den1 */ + den1 = temp0 + ptr_y_up[L_subfr] * ptr_y_up[L_subfr]; + *ptr_den1++ = den1; + if ( fabs( ptr_y_up[0] ) > fabs( ptr_y_up[L_subfr] ) ) + { + if ( den0 > den_max ) + { + den_max = den0; + } + } + else + { + if ( den1 > den_max ) + { + den_max = den1; + } + } + ptr_y_up += ( L_subfr + 1 ); + ptr_h += LH2_S; + } + if ( den_max < 0.1f ) + { + *num_gltp = 0.0f; + *den_gltp = 1.0f; + *ltpdel = 0; + *phase = 0; + return; + } + + /* Computation of the numerators */ + /* and selection of best num*num/den */ + /* for non null phases */ + + /* Initialize with null phase */ + num_max = num_int; + den_max = den_int; + numsq_max = num_max * num_max; + phi_max = 0; + ioff = 1; + + ptr_den0 = tab_den0; + ptr_den1 = tab_den1; + ptr_y_up = y_up; + + /* if den_max = 0 : will be selected and declared unvoiced */ + /* if num!=0 & den=0 : will be selected and declared unvoiced */ + /* degenerated seldom cases, switch off LT is OK */ + + /* Loop on phase */ + for ( phi = 1; phi < F_UP_PST; phi++ ) + { + + /* computes num for lambda+1 - phi/F_UP_PST */ + num = 0.0f; + for ( n = 0; n < L_subfr; n++ ) + { + num += ptr_sig_in[n] * ptr_y_up[n]; + } + if ( num < 0.0f ) + { + num = 0.0f; + } + numsq = num * num; + + /* selection if num/sqrt(den0) max */ + den0 = *ptr_den0++; + temp0 = numsq * den_max; + temp1 = numsq_max * den0; + if ( temp0 > temp1 ) + { + num_max = num; + numsq_max = numsq; + den_max = den0; + ioff = 0; + phi_max = phi; + } + + /* computes num for lambda_max - phi/F_UP_PST */ + ptr_y_up++; + num = (float) 0.; + for ( n = 0; n < L_subfr; n++ ) + { + num += ptr_sig_in[n] * ptr_y_up[n]; + } + if ( num < (float) 0. ) + { + num = (float) 0.; + } + numsq = num * num; + + /* selection if num/sqrt(den1) max */ + den1 = *ptr_den1++; + temp0 = numsq * den_max; + temp1 = numsq_max * den1; + if ( temp0 > temp1 ) + { + num_max = num; + numsq_max = numsq; + den_max = den1; + ioff = 1; + phi_max = phi; + } + ptr_y_up += L_subfr; + } + + /*--------------------------------------------------- + * test if normalized crit0[iopt] > THRESHCRIT + *--------------------------------------------------*/ + + if ( ( num_max == 0.0f ) || ( den_max <= 0.1f ) ) + { + *num_gltp = 0.0f; + *den_gltp = 1.0f; + *ltpdel = 0; + *phase = 0; + return; + } + + /* comparison num * num */ + /* with ener * den x THRESCRIT */ + temp1 = den_max * ener * THRESCRIT; + if ( numsq_max >= temp1 ) + { + *ltpdel = lambda + 1 - ioff; + *off_yup = ioff; + *phase = phi_max; + *num_gltp = num_max; + *den_gltp = den_max; + } + else + { + *num_gltp = 0.0f; + *den_gltp = 1.0f; + *ltpdel = 0; + *phase = 0; + } + + return; +} + +/*---------------------------------------------------------------------------- + * filt_plt() + * + * Perform long term postfilter + *----------------------------------------------------------------------------*/ + +static void filt_plt( + const float *s_in, /* i : input signal with past */ + const float *s_ltp, /* i : filtered signal with gain 1 */ + float *s_out, /* o : output signal */ + const float gain_plt, /* i : filter gain */ + const int16_t L_subfr /* i : the length of subframe */ +) +{ + int16_t n; + float gain_plt_1; + + gain_plt_1 = (float) 1. - gain_plt; + + for ( n = 0; n < L_subfr; n++ ) + { + s_out[n] = gain_plt * s_in[n] + gain_plt_1 * s_ltp[n]; + } + + return; +} + +/*---------------------------------------------------------------------------- + * compute_ltp_l() + * + * compute delayed signal, num & den of gain for fractional delay + * with long interpolation filter + *----------------------------------------------------------------------------*/ + +static void compute_ltp_l( + const float *s_in, /* i : input signal with past */ + const int16_t ltpdel, /* i : delay factor */ + const int16_t phase, /* i : phase factor */ + float *y_up, /* o : delayed signal */ + float *num, /* o : numerator of LTP gain */ + float *den, /* o : denominator of LTP gain */ + const int16_t L_subfr /* i : the length of subframe */ +) +{ + const float *ptr_h; + int16_t n, i; + const float *ptr2; + float temp; + + /* Filtering with long filter */ + ptr_h = tab_hup_l + ( phase - 1 ) * LH2_L; + ptr2 = s_in - ltpdel + LH_UP_L; + + /* Compute y_up */ + for ( n = 0; n < L_subfr; n++ ) + { + temp = 0.0f; + for ( i = 0; i < LH2_L; i++ ) + { + temp += ptr_h[i] * *ptr2--; + } + y_up[n] = temp; + ptr2 += LH2_L_P1; + } + + /* Compute num */ + *num = 0.0f; + for ( n = 0; n < L_subfr; n++ ) + { + *num += y_up[n] * s_in[n]; + } + + if ( *num < 0.0f ) + { + *num = 0.0f; + } + + /* Compute den */ + *den = 0.0f; + for ( n = 0; n < L_subfr; n++ ) + { + *den += y_up[n] * y_up[n]; + } + + return; +} + +/*---------------------------------------------------------------------------- + * select_ltp() + * + * selects best of (gain1, gain2) + * with gain1 = num1 * 2** sh_num1 / den1 * 2** sh_den1 + * and gain2 = num2 * 2** sh_num2 / den2 * 2** sh_den2 + *----------------------------------------------------------------------------*/ + +/*! r: 1 = 1st gain, 2 = 2nd gain */ +static int16_t select_ltp( + const float num1, /* i : numerator of gain1 */ + const float den1, /* i : denominator of gain1 */ + const float num2, /* i : numerator of gain2 */ + const float den2 /* i : denominator of gain2 */ +) +{ + if ( den2 == (float) 0. ) + { + return ( 1 ); + } + + if ( num2 * num2 * den1 > num1 * num1 * den2 ) + { + return ( 2 ); + } + else + { + return ( 1 ); + } +} + + +/*------------------------------------------------------------------------------------ + * modify_pst_param() + * + * Modify gamma1 and gamma2 values in function of the long-term noise level + *-----------------------------------------------------------------------------------*/ + +static void modify_pst_param( + const float psf_lp_noise, /* i : Long term noise energy */ + float *g1, /* o : Gamma1 used in post filter */ + float *g2, /* o : Gamma2 used in post filter */ + const int16_t coder_type, /* i : coder type */ + float *gain_factor /* o : Gain factor applied in post filtering */ +) +{ + float ftmp; + + if ( coder_type != INACTIVE && psf_lp_noise < LP_NOISE_THR ) + { + ftmp = psf_lp_noise * BG1 + CG1; + if ( ftmp > POST_G1 ) + { + ftmp = POST_G1; + } + else if ( ftmp < POST_G1_MIN ) + { + ftmp = POST_G1_MIN; + } + *g1 = ftmp; + + ftmp = psf_lp_noise * BG2 + CG2; + if ( ftmp > POST_G2 ) + { + ftmp = POST_G2; + } + else if ( ftmp < POST_G2_MIN ) + { + ftmp = POST_G2_MIN; + } + *g2 = ftmp; + } + else + { + *g1 = POST_G1_NOIS; + *g2 = POST_G2_NOIS; + } + + /* Set gain_factor of the harmonic filtering */ + ftmp = ( psf_lp_noise - K_LP_NOISE ) * C_LP_NOISE; + + if ( ftmp >= 0.25f ) + { + /* the noise is really high */ + *gain_factor = 0.25f; + } + else if ( ftmp < 0 ) + { + *gain_factor = 0.0f; + } + else + { + *gain_factor = ftmp; + } + + return; +} diff --git a/lib_dec/dec_ppp.c b/lib_dec/dec_ppp.c new file mode 100644 index 0000000000..c6a274bef4 --- /dev/null +++ b/lib_dec/dec_ppp.c @@ -0,0 +1,111 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------- + * decod_ppp() + * + * PPP decoder + *-------------------------------------------------------------------*/ + +ivas_error decod_ppp( + Decoder_State *st, /* i/o: state structure */ + const float Aq[], /* i : 12k8 Lp coefficient */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t bfi /* i : BFI flag */ +) +{ + int16_t k; + float p_Aq_old[M + 1], excQ_ppp[L_FRAME], p_Aq_curr[M], LPC_de_old[M + 1]; + float LPC_de_curr[M + 1], pitch[NB_SUBFR]; + ivas_error error; + + error = IVAS_ERR_OK; + + /* call voiced decoder at this point */ + for ( k = 0; k < M; k++ ) + { + p_Aq_curr[k] = Aq[k + ( 3 * ( M + 1 ) ) + 1]; + } + + lsp2a_stab( st->lsp_old, p_Aq_old, M ); + + deemph_lpc( p_Aq_curr, p_Aq_old, LPC_de_curr, LPC_de_old, 0 ); + + /* last frame-end lpc and curr frame-end lpc */ + if ( ( error = ppp_voiced_decoder( st, excQ_ppp, LPC_de_curr, exc, pitch, bfi ) ) != IVAS_ERR_OK ) + { + return error; + } + + + st->tilt_code = st->prev_tilt_code_dec; + + mvr2r( excQ_ppp, exc, L_FRAME ); + mvr2r( exc, exc2, L_FRAME ); + + st->dispMem[0] = 2; + st->dispMem[2] = st->prev_gain_pit_dec; + + for ( k = 3; k < 7; k++ ) + { + st->dispMem[k] = st->dispMem[k - 1]; + } + + mvr2r( pitch, pitch_buf, NB_SUBFR ); + + if ( st->hBWE_TD != NULL ) + { + interp_code_5over2( exc2, bwe_exc, L_FRAME ); + } + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + set_f( gain_buf, 0, NB_SUBFR16k ); + + return error; +} diff --git a/lib_dec/dec_prm.c b/lib_dec/dec_prm.c new file mode 100644 index 0000000000..c6d2b1a439 --- /dev/null +++ b/lib_dec/dec_prm.c @@ -0,0 +1,1134 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * getTCXMode() + * + * get TCX mode + *--------------------------------------------------------------------*/ + +void getTCXMode( + Decoder_State *st, /* i/o: decoder memory state */ + Decoder_State *st0 /* i : bitstream */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t MCT_flag +#endif +) +{ + uint16_t ind; + + if ( st->tcxonly ) + { + /* get core */ + ind = get_next_indice( st0, 1 ); + st->core = ind + TCX_20_CORE; + + /* get class */ + ind = get_next_indice( st0, 2 ); + + st->clas_dec = ONSET; + if ( ind == 0 ) + { + st->clas_dec = UNVOICED_CLAS; + } + else if ( ind == 1 ) + { + if ( st->last_good >= VOICED_TRANSITION ) + { + st->clas_dec = VOICED_TRANSITION; + } + else + { + st->clas_dec = UNVOICED_TRANSITION; + } + } + else if ( ind == 2 ) + { + st->clas_dec = VOICED_CLAS; + } + + st->coder_type = INACTIVE; +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) + { + st->VAD = get_next_indice( st0, 1 ); + } + else + { + st->VAD = 0; + } +#else + st->VAD = 0; +#endif + } + else + { + if ( st->mdct_sw == MODE1 ) + { + /* 2 bits instead of 3 as TCX is already signaled */ + st->core = TCX_20_CORE; + st->hTcxCfg->coder_type = get_next_indice( st0, 2 ); + st->coder_type = st->hTcxCfg->coder_type; + } + else + { + if ( st->mdct_sw_enable == MODE2 ) + { + if ( get_next_indice_1( st0 ) ) /* TCX */ + { + ind = get_next_indice( st0, 3 ); + assert( !( ind & 4 ) || !"HQ_CORE encountered in dec_prm" ); + st->core = TCX_20_CORE; + st->hTcxCfg->coder_type = ind; + st->coder_type = st->hTcxCfg->coder_type; + } + else /* ACELP */ + { + st->core = ACELP_CORE; + st->coder_type = get_next_indice( st0, 2 ); + } + } + else + { + if ( st->rf_flag == 1 ) + { + if ( !st->use_partial_copy ) + { + ind = get_next_indice( st0, 1 ); + if ( ind == 0 ) + { + st->core = ACELP_CORE; + } + else + { + st->core = TCX_20_CORE; + st->hTcxCfg->coder_type = st->coder_type; + } + } + } + else + { + ind = get_next_indice( st, 3 ); + if ( ind < ACELP_MODE_MAX ) + { + st->core = ACELP_CORE; + st->coder_type = ind; + } + else + { + st->core = TCX_20_CORE; + st->hTcxCfg->coder_type = ind - ACELP_MODE_MAX; + st->coder_type = st->hTcxCfg->coder_type; + } + } + } + } + + if ( st->element_mode == EVS_MONO ) + { + if ( st->igf && st->core == ACELP_CORE ) + { + st->bits_frame_core -= get_tbe_bits( st->total_brate, st->bwidth, st->rf_flag ); + } + + if ( st->rf_flag ) + { + st->bits_frame_core -= ( st->rf_target_bits + 1 ); /* +1 as flag-bit not considered in rf_target_bits */ + } + } + + /* Inactive frame detection on non-DTX mode */ + if ( st->coder_type == INACTIVE ) + { + st->VAD = 0; + } + else + { + st->VAD = 1; + } + } + + /*Core extended mode mapping for correct PLC classification*/ + st->core_ext_mode = st->coder_type; + if ( st->coder_type == INACTIVE ) + { + st->core_ext_mode = UNVOICED; + } + + return; +} + + +/*-------------------------------------------------------------------* + * getTCXWindowing() + * + * get TCX transform type for each subframe + *--------------------------------------------------------------------*/ + +void getTCXWindowing( + const int16_t core, /* i : current core */ + const int16_t last_core, /* i : last frame core */ +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + const int16_t element_mode, +#endif + TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX configuration handle */ + Decoder_State *st0 /* i : bitstream */ +) +{ + int16_t overlap_code; + + /* Set the last overlap mode based on the previous and current frame type and coded overlap mode */ + if ( last_core == ACELP_CORE || last_core == AMR_WB_CORE ) + { + hTcxCfg->tcx_last_overlap_mode = TRANSITION_OVERLAP; + } + else if ( core == TCX_10_CORE && hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ) + { + hTcxCfg->tcx_last_overlap_mode = FULL_OVERLAP; + } + else if ( core != TCX_10_CORE && hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) + { + hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + } + else + { + hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; + } + + /* Set the current overlap mode based on the current frame type and coded overlap mode */ + hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + + if ( core != ACELP_CORE ) + { + overlap_code = 0; + if ( get_next_indice( st0, 1 ) ) + { + overlap_code = 2 + get_next_indice( st0, 1 ); + } + + assert( MIN_OVERLAP == 2 && HALF_OVERLAP == 3 ); + hTcxCfg->tcx_curr_overlap_mode = overlap_code; + + /*TCX10 : always symmetric windows*/ + if ( core == TCX_20_CORE && overlap_code == 0 && last_core != ACELP_CORE && last_core != AMR_WB_CORE ) + { + hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + } + } + +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + if ( element_mode != EVS_MONO && core == TCX_10_CORE ) + { + /* also read last overlap */ + overlap_code = 0; + + if ( get_next_indice( st0, 1 ) ) + { + overlap_code = 2 + get_next_indice( st0, 1 ); + } + + hTcxCfg->tcx_last_overlap_mode = overlap_code; + } +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * getLPCparam() + * + * get LPC parameters + *--------------------------------------------------------------------*/ + +void getLPCparam( + Decoder_State *st, /* i/o: decoder memory state */ + int16_t param_lpc[], /* o : LTP parameters */ + Decoder_State *st0, /* i : bitstream */ + const int16_t ch, /* i : channel */ + const int16_t sns_low_br_mode /* i : SNS low-bitrate mode */ +) +{ + if ( st->use_partial_copy == 0 ) + { + /* Number of sets of LPC parameters (does not include mid-lpc) */ + if ( st->tcxonly == 0 || st->core < TCX_10_CORE ) + { + st->numlpc = 1; + } + else + { + st->numlpc = 2; + } + + /* Decode LPC parameters */ + if ( st->hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) + { + int16_t tcx_lpc_cdk; + tcx_lpc_cdk = tcxlpc_get_cdk( st->coder_type ); + dec_lsf_tcxlpc( st0, ¶m_lpc, st->narrowBand, tcx_lpc_cdk ); + } + else + { + if ( st->lpcQuantization == 0 ) + { + decode_lpc_avq( st0, st->numlpc, param_lpc, ch, st->element_mode, sns_low_br_mode ); + } + else if ( st->lpcQuantization == 1 ) + { + if ( st->sr_core == INT_FS_16k && st->coder_type == VOICED && st->core == ACELP_CORE ) + { + assert( st->element_mode == EVS_MONO ); + + lsf_bctcvq_decprm( st0, param_lpc ); + } + else + { + lsf_msvq_ma_decprm( st0, param_lpc ); + } + } + else + { + assert( 0 ); + } + } + } + else + { + st->numlpc = 1; + + if ( st->rf_frame_type == RF_TCXFD ) + { + param_lpc[0] = 0; + param_lpc[1] = get_next_indice( st0, lsf_numbits[0] ); /* VQ 1 */ + param_lpc[2] = get_next_indice( st0, lsf_numbits[1] ); /* VQ 2 */ + param_lpc[3] = get_next_indice( st0, lsf_numbits[2] ); /* VQ 3 */ + } + else if ( st->rf_frame_type >= RF_ALLPRED && st->rf_frame_type <= RF_NELP ) + { + /* LSF indices */ + param_lpc[0] = get_next_indice( st0, 8 ); /* VQ 1 */ + param_lpc[1] = get_next_indice( st0, 8 ); /* VQ 2 */ + } + } + + return; +} + +/*-------------------------------------------------------------------* + * getTCXparam() + * + * get TCX core parameters + *-------------------------------------------------------------------*/ + +void getTCXparam( + Decoder_State *st, /* i/o: Decoder State handle */ + Decoder_State *st0, /* i : bitstream */ + CONTEXT_HM_CONFIG hm_cfg, /* i/o: HM config */ + int16_t param[], /* o : decoded parameters */ + const int16_t bits_common, /* i : number of common bits */ + const int16_t start_bit_pos, /* i : position of the start bit */ + const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ + int16_t p_param[2], /* o : pointer to parameters for next round of bs reading*/ + int16_t nTnsBitsTCX10[2], + const int16_t pre_past_flag ) +{ + int16_t ix, j, k, core, last_core, nSubframes; + int16_t lg, lgFB, flag_ctx_hm, hm_size; + int16_t PeriodicityIndex, useHarmonicModel; + int16_t tcxltp_prm_0, tcxltp_prm_1, tcxltp_prm_2, nbits_igf, nbits_tcx; + int16_t *prm, *prms; + int16_t nTnsParams, nTnsBits; + int16_t pre_part, post_part; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + + if ( pre_past_flag == 0 ) + { + pre_part = 1; + post_part = 0; + } + else if ( pre_past_flag == 1 ) + { + pre_part = 0; + post_part = 1; + } + else + { + pre_part = 1; + post_part = 1; + } + + /* initialization */ + tcxltp_prm_0 = 0; + tcxltp_prm_1 = 0; + tcxltp_prm_2 = 0; + nbits_igf = 0; + + PeriodicityIndex = 0; + useHarmonicModel = 0; + + core = st->core; + last_core = st->last_core; + + nSubframes = 1; + if ( core == TCX_10_CORE ) + { + nSubframes = 2; + } + + if ( st->element_mode < IVAS_CPE_MDCT && st->igf && core == TCX_10_CORE ) + { + /* get IGF */ + for ( k = 0; k < nSubframes; k++ ) + { + ix = st->next_bit_pos; + + IGFDecReadLevel( st->hIGFDec, st0, IGF_GRID_LB_SHORT, 1 - k ); + + IGFDecReadData( st->hIGFDec, st0, IGF_GRID_LB_SHORT, 1 - k ); + + IGFDecStoreTCX10SubFrameData( st->hIGFDec, k ); + + nbits_igf += st0->next_bit_pos - ix; + } + } + + /* loop over subframes */ + for ( k = 0; k < nSubframes; k++ ) + { + flag_ctx_hm = 0; + + prm = param + ( k * DEC_NPRM_DIV ); + j = 0; + + nbits_tcx = st0->next_bit_pos - start_bit_pos; + + if ( pre_part && st->enablePlcWaveadjust && k == ( nSubframes - 1 ) ) + { + st->tonality_flag = get_next_indice( st0, 1 ); + } + + if ( post_part ) + { + /* TCX Gain */ + prm[j++] = get_next_indice( st0, NBITS_TCX_GAIN ); + + /* TCX Noise Filling = NBITS_NOISE_FILL_LEVEL bits */ + prm[j++] = get_next_indice( st0, NBITS_NOISE_FILL_LEVEL ); + } + else + { + j += 1 + NOISE_FILL_RANGES; + } + + /* LTP data */ + if ( pre_part ) + { + if ( ( k == 0 ) && ( hTcxLtpDec->tcxltp || ( st->sr_core > 25600 ) ) ) /* PLC pitch info for HB */ + { + prm[j] = get_next_indice( st0, 1 ); + + if ( prm[j] ) + { + prm[j + 1] = get_next_indice( st0, 9 ); + prm[j + 2] = get_next_indice( st0, 2 ); + + tcxltp_prm_0 = prm[j]; + tcxltp_prm_1 = prm[j + 1]; + tcxltp_prm_2 = prm[j + 2]; + } + st->BER_detect = st->BER_detect | tcx_ltp_decode_params( &prm[j], &( hTcxLtpDec->tcxltp_pitch_int ), &( hTcxLtpDec->tcxltp_pitch_fr ), &( hTcxLtpDec->tcxltp_gain ), st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max ); + + hTcxDec->tcxltp_last_gain_unmodified = hTcxLtpDec->tcxltp_gain; + + if ( core == TCX_20_CORE && !st->tcxonly && hTcxLtpDec->tcxltp_pitch_int < st->L_frame ) + { + hTcxDec->tcx_hm_LtpPitchLag = ( ( 2 * st->L_frame * st->pit_res_max ) << kLtpHmFractionalResolution ) / ( hTcxLtpDec->tcxltp_pitch_int * st->pit_res_max + hTcxLtpDec->tcxltp_pitch_fr ); + } + else + { + hTcxDec->tcx_hm_LtpPitchLag = -1; + } + j += 3; + } + else + { + prm[j++] = tcxltp_prm_0; + prm[j++] = tcxltp_prm_1; + prm[j++] = tcxltp_prm_2; + } + } + + /* TCX spectral data */ + lg = st->L_frame >> ( nSubframes - 1 ); + lgFB = st->hTcxCfg->tcx_coded_lines >> ( nSubframes - 1 ); + + if ( post_part && k == 0 && st->last_core_from_bs == ACELP_CORE ) + { + /* ACE->TCX transition */ + lg += st->hTcxCfg->tcx_offset; + lgFB += lgFB >> ( 3 - nSubframes ); + + if ( st->hTcxCfg->lfacNext < 0 ) + { + lg -= st->hTcxCfg->lfacNext; + } + } + + if ( pre_part ) + { + /* TNS data */ + nTnsParams = 0; + nTnsBits = 0; + + if ( st->hTcxCfg->fIsTNSAllowed ) + { + if ( core == TCX_10_CORE && last_core == ACELP_CORE && k == 0 ) + { + st0->BER_detect = 1; + last_core = TCX_20_CORE; + } + + SetTnsConfig( st->hTcxCfg, core == TCX_20_CORE, ( st->last_core_from_bs == ACELP_CORE ) && ( k == 0 ) ); + ix = 0; + if ( no_param_tns ) + { + ix = get_next_indice( st0, 1 ); /* common_tns_data[] for subframe k */ + } + if ( ix ) + { + prm[j] = no_param_tns[k] * -1; /* - signals common TNS and its size */ + nTnsParams = no_param_tns[k]; + } + else + { + ReadTnsData( st->hTcxCfg->pCurrentTnsConfig, st0, &nTnsBits, prm + j, &nTnsParams ); + } + hTcxDec->tnsActive[k] = ( prm[j] != 0 ? 1 : 0 ) * nTnsParams; + if ( nTnsBitsTCX10 != NULL ) + { + nTnsBitsTCX10[k] = nTnsBits + ( no_param_tns ? 1 : 0 ); + } + + j += nTnsParams; + } + + if ( post_part ) + { + if ( core == TCX_20_CORE ) + { + hm_size = (int16_t) ( 2.0f * st->TcxBandwidth * (float) lg ); + + if ( hTcxDec->tcx_lpc_shaped_ari && st->last_core_from_bs != ACELP_CORE ) + { + dec_prm_hm( st0, &prm[j], hm_size ); + } + + nbits_tcx = st->bits_frame_core - ( st0->next_bit_pos - start_bit_pos ); + } + else + { + hm_size = (int16_t) ( 2.0f * st->TcxBandwidth * (float) lgFB ); + + nbits_tcx = ( ( st->bits_frame_core - bits_common - nbits_igf + 1 - k ) >> 1 ) - ( ( st0->next_bit_pos - start_bit_pos ) - nbits_tcx ); + } + + /*Context HM flag*/ + if ( st->hTcxCfg->ctx_hm && !( st->last_core_from_bs == ACELP_CORE && k == 0 ) ) + { + useHarmonicModel = get_next_indice( st0, 1 ); + prm[j] = useHarmonicModel; + nbits_tcx--; + + if ( useHarmonicModel ) + { + ix = DecodeIndex( st0, hm_size >= 256, prm + j + 1 ); + flag_ctx_hm = 1; + + PeriodicityIndex = *( prm + j + 1 ); + if ( st->element_mode == EVS_MONO ) + { + ConfigureContextHm( lgFB, nbits_tcx, PeriodicityIndex, hTcxDec->tcx_hm_LtpPitchLag, &hm_cfg ); + } + nbits_tcx -= ix; + } + } + } + j += NPRM_CTX_HM; + + /* read IGF payload */ + if ( post_part && core == TCX_20_CORE ) + { + if ( st->igf ) + { + ix = st->next_bit_pos; + IGFDecReadLevel( st->hIGFDec, st0, ( st->last_core_from_bs == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); + + IGFDecReadData( st->hIGFDec, st0, ( st->last_core_from_bs == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); + + nbits_tcx -= ( st0->next_bit_pos - ix ); + } + nbits_tcx = st->bits_frame_core - ( st0->next_bit_pos - start_bit_pos ); + } + else if ( p_param != NULL ) + { + p_param[k] = j; + } + } + else + { + j = p_param[k]; + + nbits_tcx = st->bits_frame_channel; + if ( st->core == TCX_10_CORE ) + { + nbits_tcx = nTnsBitsTCX10[k] - NBITS_TCX_GAIN - NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; + } + } + + if ( post_part ) + { + if ( hTcxDec->tcx_lpc_shaped_ari && core == TCX_20_CORE ) + { + prm[j++] = nbits_tcx; /* store length of buffer */ + prms = &prm[j]; + for ( ix = 0; ix < nbits_tcx; ix++ ) + { + prms[ix] = get_next_indice_1( st0 ); + } + for ( ix = 0; ix < 32; ix++ ) + { + prms[ix + nbits_tcx] = 1; + } + j += nbits_tcx; + } + else + { + if ( st->element_mode > EVS_MONO ) + { + if ( useHarmonicModel ) + { + ConfigureContextHm( lgFB, nbits_tcx, PeriodicityIndex, hTcxDec->tcx_hm_LtpPitchLag, &hm_cfg ); + } + hTcxDec->resQBits[k] = RCcontextMapping_decode2_no_mem_s17_LCS( st0, prm + j, lgFB, nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg : NULL ); + } + else + { + hTcxDec->resQBits[k] = ACcontextMapping_decode2_no_mem_s17_LC( st0, prm + j, lgFB, nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg : NULL ); + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------* + * dec_prm_hm() + * + * + *-----------------------------------------------------------------*/ + +void dec_prm_hm( + Decoder_State *st, + int16_t *prm_hm, + const int16_t hm_size ) +{ + /* Disable HM for non-GC,VC modes */ + if ( st->hTcxCfg->coder_type != VOICED && st->hTcxCfg->coder_type != GENERIC ) + { + prm_hm[0] = 0; + + return; + } + + prm_hm[1] = -1; + prm_hm[2] = 0; + + /* Flag */ + prm_hm[0] = get_next_indice( st, 1 ); + + if ( prm_hm[0] ) + { + /* Periodicity index */ + DecodeIndex( st, hm_size >= 256, &prm_hm[1] ); + + /* Gain index */ + if ( st->hTcxCfg->coder_type == VOICED ) + { + prm_hm[2] = get_next_indice( st, kTcxHmNumGainBits ); + } + } + + return; +} + + +/*-----------------------------------------------------------------* + * Function dec_prm() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * + * SQ is used for TCX modes + * + * decode parameters according to selected mode * + *-----------------------------------------------------------------*/ + +void dec_prm( + Decoder_State *st, /* i/o: decoder memory state */ + int16_t param[], /* o : decoded parameters */ + int16_t param_lpc[], /* o : LPC parameters */ + int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ + int16_t *bitsRead ) +{ + int16_t j, n, sfr, core, nb_subfr; + int16_t *prm; + int16_t start_bit_pos, bits_common, acelp_target_bits; + int16_t ix, j_old, wordcnt, bitcnt; + CONTEXT_HM_CONFIG hm_cfg; + int16_t indexBuffer[N_MAX + 1]; + int16_t ind; + int16_t ltp_mode, gains_mode; + int16_t prm_ltp[LTPSIZE]; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + /*--------------------------------------------------------------------------------* + * INIT + *--------------------------------------------------------------------------------*/ + + hm_cfg.indexBuffer = indexBuffer; + + core = st->core; + + if ( st->mdct_sw == MODE1 ) + { + start_bit_pos = 0; /* count from frame start */ + + /* Adjust st->bits_frame_core not to subtract MODE2 bandwidth signaling */ + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) + { + st->bits_frame_core += FrameSizeConfig[n].bandwidth_bits; + break; + } + } + } + else + { + if ( st->rf_flag == 1 ) + { + /*Inherent adjustment to accommodate the compact packing used in the RF mode*/ + start_bit_pos = st->next_bit_pos - 2; + } + else + { + start_bit_pos = st->next_bit_pos; + } + } + + /* Framing parameters */ + nb_subfr = st->nb_subfr; + + /* Initialize pointers */ + prm = param; + + /* Init counters */ + j = 0; + + /* Init LTP data */ + if ( hTcxDec != NULL ) + { + hTcxDec->tcx_hm_LtpPitchLag = -1; + hTcxLtpDec->tcxltp_gain = 0.0f; + } + + /*--------------------------------------------------------------------------------* + * EVS header + *--------------------------------------------------------------------------------*/ + + /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + getTCXMode( st, st, 0 /* <- MCT_flag */ ); +#else + getTCXMode( st, st ); +#endif + core = st->core; + + /* Decode last_core for error concealment */ + if ( !( core == ACELP_CORE && st->hTcxCfg->lfacNext <= 0 ) && !st->use_partial_copy ) + { + + st->last_core_from_bs = get_next_indice( st, 1 ); + /* + need to introduce special error handling for lost transition frames from CNG: + in such cases, the bitstream reader continues with CNG, setting bfi = 0, total_brate = 0 + this might result in a not matching last_core transmitted in the BS - we should use this + only for interpreting the bitstream and re-use the internal state for the proper + transition handling; still, for voiced onsets rather stick to wrong windowing... + */ + if ( ( !( ( st->last_total_brate == 0 ) && ( st->clas_dec != VOICED_CLAS ) ) ) && ( st->last_core_from_bs != st->last_core ) ) + { + st->last_core = st->last_core_from_bs; + } + + /*for TCX 10 force last_core to be TCX since ACELP as previous core is forbidden*/ + if ( core == TCX_10_CORE ) + { + st->last_core = TCX_20_CORE; + st->last_core_from_bs = TCX_20_CORE; + } + } + + if ( st->rf_flag && st->use_partial_copy && !st->tcxonly ) + { + int32_t nbits_total; + nbits_total = st->total_brate / FRAMES_PER_SEC; + st->bits_frame_core = st->rf_target_bits; + /* offset the indices to read the acelp partial copy */ + get_next_indice_tmp( st, (int16_t) ( start_bit_pos + nbits_total - st->rf_target_bits - 3 - st->next_bit_pos ) ); + } + + if ( !st->use_partial_copy ) + { +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + getTCXWindowing( st->core, st->last_core, st->element_mode, st->hTcxCfg, st ); +#else + getTCXWindowing( st->core, st->last_core, st->hTcxCfg, st ); +#endif + + if ( st->enableGplc ) /* SIDE INFO. DECODING */ + { + int16_t pitchDiff; + int16_t bits_per_subfr, search_range; + bits_per_subfr = 4; + search_range = 8; + st->flagGuidedAcelp = get_next_indice( st, 1 ); + + pitchDiff = 0; + if ( st->flagGuidedAcelp ) + { + pitchDiff = get_next_indice( st, bits_per_subfr ); + st->guidedT0 = ( pitchDiff - search_range ); + } + if ( pitchDiff == 0 && st->flagGuidedAcelp ) + { + st->flagGuidedAcelp = 0; + } + } + else + { + st->flagGuidedAcelp = 0; + } + + if ( st->dec_glr ) + { + if ( core == ACELP_CORE ) + { + st->dec_glr_idx = get_next_indice( st, G_LPC_RECOVERY_BITS ); + } + else + { + st->dec_glr_idx = -1; + } + } + } + + /*--------------------------------------------------------------------------------* + * LPC parameters + *--------------------------------------------------------------------------------*/ + + /*Initialization of LPC Mid flag*/ + if ( ( st->lpcQuantization == 1 && st->coder_type == VOICED ) || ( st->use_partial_copy ) ) + { + ( &( st->acelp_cfg ) )->midLpc = 0; + } + else + { + ( &( st->acelp_cfg ) )->midLpc = st->acelp_cfg.midLpc_enable; + } + + getLPCparam( st, param_lpc, st, -1, 0 ); + + bits_common = st->next_bit_pos - start_bit_pos; + + /*--------------------------------------------------------------------------------* + * ACELP parameters + *--------------------------------------------------------------------------------*/ + + if ( core == ACELP_CORE && st->use_partial_copy == 0 ) + { + int16_t tmp; + + /* Target Bits */ + + /* needed in decoder to read the bitstream */ + acelp_target_bits = st->bits_frame_core - bits_common; + + /* Configure ACELP */ + tmp = BITS_ALLOC_config_acelp( acelp_target_bits, st->coder_type, &( st->acelp_cfg ), st->narrowBand, st->nb_subfr ); + if ( tmp < 0 ) + { + /* erroneous configuration, resulting from a corrupt bitstream */ + st->BER_detect = 1; + } + + /* Adaptive BPF (2 bits)*/ + n = ACELP_BPF_BITS[st->acelp_cfg.bpf_mode]; + if ( n != 0 ) + { + st->bpf_gain_param = get_next_indice( st, n ); + } + else + { + st->bpf_gain_param = ( st->acelp_cfg.bpf_mode ) * 2; + } + + /* Mean energy (2 or 3 bits) */ + n = ACELP_NRG_BITS[st->acelp_cfg.nrg_mode]; + if ( n != 0 ) + { + prm[j++] = get_next_indice( st, n ); + } + + /* Subframe parameters */ + for ( sfr = 0; sfr < nb_subfr; sfr++ ) + { + /* Pitch lag (4, 5, 6, 8 or 9 bits) */ + n = ACELP_LTP_BITS_SFR[st->acelp_cfg.ltp_mode][sfr]; + + if ( n != 0 ) + { + prm[j] = get_next_indice( st, n ); + j++; + } + + /* Adaptive codebook filtering (1 bit) */ + if ( st->acelp_cfg.ltf_mode == 2 ) + { + prm[j] = get_next_indice( st, 1 ); + j++; + } + + /* Innovative codebook */ + { + /* Decode pulse positions. */ + j_old = j; + + wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) / 16; + bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) & 15; + + /* sanity check - can happen in case of bit errors */ + if ( ( st->acelp_cfg.fixed_cdk_index[sfr] >= ACELP_FIXED_CDK_NB ) || ( st->acelp_cfg.fixed_cdk_index[sfr] < 0 ) ) + { + st->acelp_cfg.fixed_cdk_index[sfr] = 0; + st->BER_detect = 1; + } + + for ( ix = 0; ix < wordcnt; ix++ ) + { + prm[j] = get_next_indice( st, 16 ); + j++; + } + + if ( bitcnt ) + { + prm[j] = get_next_indice( st, bitcnt ); + } + j = j_old + 8; + } + + /* Gains (5b, 6b or 7b / subfr) */ + n = ACELP_GAINS_BITS[st->acelp_cfg.gains_mode[sfr]]; + prm[j++] = get_next_indice( st, n ); + } /*end of subfr loop*/ + } + else if ( st->rf_frame_type >= RF_ALLPRED && st->use_partial_copy ) + { + int16_t tmp = BITS_ALLOC_config_acelp( st->rf_target_bits, /* target bits ranges from 56 to 72 depending on rf_type */ + st->rf_frame_type, /* already offset by 4 to parse the config elements for partial copy */ + &( st->acelp_cfg ), /* acelp_cfg_rf*/ + 0, /* is narrowBand */ + st->nb_subfr ); + if ( tmp < 0 ) + { + /* erroneous configuration, resulting from a corrupt bitstream */ + st->BER_detect = 1; + } + + /* rf_frame_type NELP: 7 */ + if ( st->rf_frame_type == RF_NELP ) + { + /* NELP gain indices */ + st->rf_indx_nelp_iG1 = get_next_indice( st, 5 ); + st->rf_indx_nelp_iG2[0] = get_next_indice( st, 6 ); + st->rf_indx_nelp_iG2[1] = get_next_indice( st, 6 ); + + /* NELP filter selection index */ + st->rf_indx_nelp_fid = get_next_indice( st, 2 ); + + /* tbe gainFr */ + st->rf_indx_tbeGainFr = get_next_indice( st, 5 ); + } + else + { + /* rf_frame_type ALL_PRED: 4, NO_PRED: 5, GEN_PRED: 6*/ + /* ES pred */ + prm[j++] = get_next_indice( st, 3 ); + + ltp_mode = ACELP_LTP_MODE[1][1][st->rf_frame_type]; + gains_mode = ACELP_GAINS_MODE[1][1][st->rf_frame_type]; + + /* Subframe parameters */ + for ( sfr = 0; sfr < nb_subfr; sfr++ ) + { + /* Pitch lag (5, or 8 bits) */ + n = ACELP_LTP_BITS_SFR[ltp_mode][sfr]; + if ( n != 0 ) + { + prm[j++] = get_next_indice( st, n ); + } + + + /*Innovative codebook*/ + if ( ( st->rf_frame_type == RF_NOPRED ) || ( st->rf_frame_type == RF_GENPRED && ( sfr == 0 || sfr == 2 ) ) ) + { + /* NOTE: FCB actual bits need to be backed up as well */ + /*n = ACELP_FIXED_CDK_BITS(st->rf_indx_fcb[fec_offset][sfr]) & 15;*/ + prm[j] = get_next_indice( st, 7 ); + j = j + 8; + } + + /* Gains (5b, 6b or 7b / subfr) */ + if ( sfr == 0 || sfr == 2 ) + { + n = ACELP_GAINS_BITS[gains_mode]; + prm[j++] = get_next_indice( st, n ); + } + } + st->rf_indx_tbeGainFr = get_next_indice( st, 2 ); + } + } + + /*--------------------------------------------------------------------------------* + * TCX20/10 parameters + *--------------------------------------------------------------------------------*/ + + if ( ( core == TCX_20_CORE || core == TCX_10_CORE ) && st->use_partial_copy == 0 ) + { + getTCXparam( st, st, hm_cfg, param, bits_common, start_bit_pos, NULL, NULL, NULL, -1 ); + } + + if ( st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 && st->use_partial_copy == 1 ) + { + /* classification */ + ind = get_next_indice( st, 2 ); + st->clas_dec = ONSET; + if ( ind == 0 ) + { + st->clas_dec = UNVOICED_CLAS; + } + else if ( ind == 1 ) + { + if ( st->last_good >= VOICED_TRANSITION ) + { + st->clas_dec = VOICED_TRANSITION; + } + else + { + st->clas_dec = UNVOICED_TRANSITION; + } + } + else if ( ind == 2 ) + { + st->clas_dec = VOICED_CLAS; + } + + if ( st->rf_frame_type == RF_TCXFD ) + { + /* TCX Gain */ + hTcxDec->old_gaintcx_bfi = get_next_indice( st, NBITS_TCX_GAIN ); + } + else + { + /* LTP data */ + if ( hTcxLtpDec->tcxltp ) + { + if ( st->rf_frame_type == RF_TCXTD2 || st->rf_frame_type == RF_TCXTD1 ) + { + prm_ltp[0] = 1; /* LTP active*/ + prm_ltp[1] = get_next_indice( st, 9 ); + prm_ltp[2] = 3; /* max ampl. quantizer output (2bits), anyway not used later*/ + + if ( !st->prev_bfi ) + { + st->BER_detect = st->BER_detect | + tcx_ltp_decode_params( &prm_ltp[0], &( hTcxLtpDec->tcxltp_pitch_int ), &( hTcxLtpDec->tcxltp_pitch_fr ), &( hTcxLtpDec->tcxltp_gain ), st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max ); + + hTcxDec->tcxltp_last_gain_unmodified = hTcxLtpDec->tcxltp_gain; + } + } + } + } + } + + if ( !st->use_partial_copy ) + { + if ( *total_nbbits - bitsRead[0] < ( st->next_bit_pos - start_bit_pos ) ) + { + st->BER_detect = 1; + st->next_bit_pos = start_bit_pos + *total_nbbits - bitsRead[0]; + } + bitsRead[0] = st->next_bit_pos - start_bit_pos; + } + return; +} diff --git a/lib_dec/dec_tcx.c b/lib_dec/dec_tcx.c new file mode 100644 index 0000000000..ae5faa4d73 --- /dev/null +++ b/lib_dec/dec_tcx.c @@ -0,0 +1,2003 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "prot.h" +#include "ivas_prot.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "stat_com.h" +#include "cnst.h" +#include "wmops.h" +#include "ivas_rom_com.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + + +/*-----------------------------------------------------------------* + * decoder_tcx() + * + * + *-----------------------------------------------------------------*/ + +void decoder_tcx( + Decoder_State *st, /* i/o: coder memory state */ + int16_t prm[], /* i : parameters */ + float A[], /* i : coefficients NxAz[M+1] */ + Word16 Aind[], /* i : frame-independent coefficients Az[M+1] */ + float synth[], /* i/o: synthesis @internal_FS */ + float synthFB[], /* i/o: synthesis @output_FS */ + const int16_t bfi, /* i : Bad frame indicator */ + const int16_t frame_cnt, /* i : frame counter in the super frame */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ + float x[N_MAX]; + float gainlpc2[FDNS_NPTS]; + float gain_tcx; + int16_t fUseTns, L_frame_glob, L_frameTCX_glob; + STnsData tnsData; + int16_t tcx_offset, tcx_offsetFB, L_frame, L_frameTCX; + int16_t left_rect, L_spec, tmp_concealment_method, nf_seed; + const int16_t *prm_sqQ; + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + + L_spec = st->hTcxCfg->tcx_coded_lines; + L_frame_glob = st->L_frame; + L_frameTCX_glob = st->hTcxDec->L_frameTCX; + if ( st->core == TCX_10_CORE ) + { + L_spec /= 2; + L_frame_glob /= 2; + L_frameTCX_glob /= 2; + } + + tmp_concealment_method = 0; + nf_seed = 0; + fUseTns = 0; /* flag that is set if TNS data is present */ + + set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); + + init_tcx_info( st, L_frame_glob, L_frameTCX_glob, frame_cnt, bfi, &tcx_offset, &tcx_offsetFB, &L_frame, &L_frameTCX, &left_rect, &L_spec ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + decoder_tcx_invQ( st, prm, A, Aind, L_spec, L_frame, L_frameTCX, &x[0], &gainlpc2[0], &xn_buf[0], &fUseTns, &tnsData, &gain_tcx, &prm_sqQ, &nf_seed, bfi, 0, /* <- isMCT */ frame_cnt ); +#else + decoder_tcx_invQ( st, prm, A, Aind, L_spec, L_frame, L_frameTCX, &x[0], &gainlpc2[0], &xn_buf[0], &fUseTns, &tnsData, &gain_tcx, &prm_sqQ, &nf_seed, bfi, frame_cnt ); +#endif + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + decoder_tcx_noisefilling( st, NULL, A, L_frameTCX_glob, L_spec, L_frame, L_frameTCX, &x[0], &gainlpc2[0], &tmp_concealment_method, gain_tcx, prm_sqQ, nf_seed, bfi, 0, frame_cnt ); +#else + decoder_tcx_noisefilling( st, A, L_frameTCX_glob, L_spec, L_frame, L_frameTCX, &x[0], &gainlpc2[0], &tmp_concealment_method, gain_tcx, prm_sqQ, nf_seed, bfi, frame_cnt ); +#endif + + decoder_tcx_noiseshaping_igf( st, L_spec, L_frame, L_frameTCX, left_rect, &x[0], &gainlpc2[0], &tmp_concealment_method, bfi ); + + decoder_tcx_tns( st, L_frame_glob, L_spec, L_frame, L_frameTCX, &x[0], fUseTns, &tnsData, bfi, frame_cnt, 0 ); + + decoder_tcx_imdct( st, L_frame_glob, L_frameTCX_glob, L_spec, tcx_offset, tcx_offsetFB, L_frame, L_frameTCX, left_rect, &x[0], &xn_buf[0], MDCT_IV, + fUseTns, &synth[0], &synthFB[0], bfi, frame_cnt, 0, sba_dirac_stereo_flag ); + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_post() + * + * + *-------------------------------------------------------------------*/ + +void decoder_tcx_post( + Decoder_State *st, + float *synth, + float *synthFB, + float *A, + const int16_t bfi +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t isMCT +#endif +) +{ + int16_t i; + float level_syn, gainCNG = 0.0f, step; + float xn_buf[L_FRAME_MAX]; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + /* TCX output */ + mvr2r( synth, xn_buf, st->L_frame ); + + /* first TCX frame after ACELP; overwrite ltp initialization done during acelp PLC */ + if ( !bfi && st->prev_bfi && !st->last_core ) + { + hTcxDec->tcxltp_last_gain_unmodified = 0.0f; + } + + if ( st->hTcxLtpDec != NULL && st->element_mode > EVS_MONO && ( st->clas_dec == UNVOICED_CLAS || st->clas_dec == INACTIVE_CLAS ) ) + { + /* deactivate TCX LTP for non-voiced frames */ + st->hTcxLtpDec->tcxltp = 0; + st->hTcxLtpDec->tcxltp_gain = 0.0f; + } + + if ( bfi && !st->use_partial_copy ) + { + /* run lpc gain compensation not for waveform adjustment */ + if ( !st->enablePlcWaveadjust || st->hPlcInfo->concealment_method == TCX_TONAL ) + { + float gainHelperFB = hTcxDec->gainHelper; + float stepCompensateFB = hTcxDec->stepCompensate * st->L_frame / hTcxDec->L_frameTCX; + + for ( i = 0; i < hTcxDec->L_frameTCX; i++ ) + { + synthFB[i] *= gainHelperFB; + gainHelperFB -= stepCompensateFB; + } + } + + for ( i = 0; i < st->L_frame; i++ ) + { + xn_buf[i] *= hTcxDec->gainHelper; + hTcxDec->gainHelper -= hTcxDec->stepCompensate; + } + } + + /* PLC: [TCX: Fade-out] + * PLC: estimate and update CNG energy */ + level_syn = (float) sqrt( ( dotp( synthFB, synthFB, hTcxDec->L_frameTCX ) ) / hTcxDec->L_frameTCX ); + + /* PLC: [TCX: Fade-out] + * PLC: update or retrieve the background level */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( bfi == 0 && st->tcxonly && ( st->element_mode != IVAS_CPE_MDCT || isMCT ) && st->clas_dec == UNVOICED_CLAS ) +#else + if ( bfi == 0 && st->tcxonly && st->clas_dec == UNVOICED_CLAS ) +#endif + { + minimumStatistics( hTcxDec->NoiseLevelMemory_bfi, &hTcxDec->NoiseLevelIndex_bfi, &hTcxDec->CurrLevelIndex_bfi, &hTcxDec->CngLevelBackgroundTrace_bfi, &hTcxDec->LastFrameLevel_bfi, level_syn, PLC_MIN_CNG_LEV, PLC_MIN_STAT_BUFF_SIZE ); + } + + /* PLC: [TCX: Fade-out] + * PLC: fade-out in time domain */ + if ( bfi ) + { + float conceal_eof_gainFB; + + if ( st->tcxonly ) + { + gainCNG = hTcxDec->CngLevelBackgroundTrace_bfi / ( level_syn + 0.01f ); + } + else + { + gainCNG = st->cngTDLevel / ( level_syn + 0.01f ); + } + if ( st->nbLostCmpt == 1 ) + { + hTcxDec->conceal_eof_gain = 1.0f; + } + + step = ( hTcxDec->conceal_eof_gain - ( hTcxDec->conceal_eof_gain * hTcxDec->damping + gainCNG * ( 1 - hTcxDec->damping ) ) ) / st->L_frame; + { + float stepFB = step * st->L_frame / hTcxDec->L_frameTCX; + conceal_eof_gainFB = hTcxDec->conceal_eof_gain; + + for ( i = 0; i < hTcxDec->L_frameTCX; i++ ) + { + synthFB[i] *= conceal_eof_gainFB; + conceal_eof_gainFB -= stepFB; + } + } + + for ( i = 0; i < st->L_frame; i++ ) + { + xn_buf[i] *= hTcxDec->conceal_eof_gain; + hTcxDec->conceal_eof_gain -= step; + } + + /* run lpc gain compensation not for waveform adjustment */ + if ( st->hPlcInfo != NULL ) + { + if ( ( !st->enablePlcWaveadjust || st->hPlcInfo->concealment_method == TCX_TONAL ) && !st->use_partial_copy ) + { + st->hPlcInfo->recovery_gain = conceal_eof_gainFB * st->last_concealed_gain_syn_deemph; + } + else + { + st->hPlcInfo->recovery_gain = conceal_eof_gainFB; + } + st->hPlcInfo->step_concealgain = step * st->L_frame / hTcxDec->L_frameTCX; + } + } + + + /*-----------------------------------------------------------* + * Memory update * + *-----------------------------------------------------------*/ + + /* Update synth, exc and old_Aq */ + tcx_decoder_memory_update( st, xn_buf, synth, A ); + +#ifdef DEBUG_MODE_TCX + { + int16_t tmp[320]; + for ( i = 0; i < L_EXC_MEM; i++ ) + { + tmp[i] = (int16_t) ( st->old_exc[L_EXC_MEM_DEC - L_EXC_MEM + i] + 0.5f ); + } + dbgwrite( tmp, 2, L_EXC_MEM, 1, "res/exc_old.dec.pcm" ); + } +#endif + + /* PLC: [TCX: Memory update] */ + st->old_pitch_buf[0] = st->old_pitch_buf[st->nb_subfr]; + st->old_pitch_buf[1] = st->old_pitch_buf[st->nb_subfr + 1]; + mvr2r( &st->old_pitch_buf[st->nb_subfr + 2], &st->old_pitch_buf[2], st->nb_subfr ); + set_f( &st->old_pitch_buf[st->nb_subfr + 2], st->old_fpitch, st->nb_subfr ); + st->bfi_pitch = st->old_fpitch; + st->bfi_pitch_frame = st->L_frame; + + st->mem_pitch_gain[2 * st->nb_subfr + 1] = st->mem_pitch_gain[st->nb_subfr + 1]; + st->mem_pitch_gain[2 * st->nb_subfr] = st->mem_pitch_gain[st->nb_subfr]; + + for ( i = 0; i < st->nb_subfr; i++ ) + { + st->mem_pitch_gain[2 * st->nb_subfr - 1 - i] = st->mem_pitch_gain[st->nb_subfr - 1 - i]; + st->mem_pitch_gain[st->nb_subfr - 1 - i] = hTcxDec->tcxltp_last_gain_unmodified; + } + + return; +} + +/*-------------------------------------------------------------------* + * IMDCT() + * + * + *-------------------------------------------------------------------*/ + +void IMDCT( + float *x, + float *old_syn_overl, + float *syn_Overl_TDAC, + float *xn_buf, + const float *tcx_aldo_window_1_trunc, + const float *tcx_aldo_window_2, + const float *tcx_mdct_window_half, + const float *tcx_mdct_window_minimum, + const float *tcx_mdct_window_trans, + const int16_t tcx_mdct_window_half_length, + const int16_t tcx_mdct_window_min_length, + int16_t index, + const uint16_t kernel_type, /* i : TCX transform kernel type */ + const int16_t left_rect, + const int16_t tcx_offset, + const int16_t overlap, + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t L_spec_TCX5, + const int16_t L_frame_glob, + const int16_t frame_cnt, + const int16_t bfi, + float *old_out, + const int16_t FB_flag, + Decoder_State *st, + const int16_t fullbandScale, + float *acelp_zir ) +{ + int16_t i, nz, aldo, w, L_win, L_ola; + float win[( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2]; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; + + aldo = 0; + + /* number of zero for ALDO windows*/ + nz = NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) * L_frame / L_frameTCX; + + if ( ( L_frameTCX == hTcxDec->L_frameTCX >> 1 || st->mct_chan_mode == MCT_CHAN_MODE_LFE ) && ( st->tcxonly ) ) + { + /* Mode decision in PLC + + last OL curr OL left TCX-10 right TCX-10 + ------------------------------------------------------------- + 0 0 2x TCX-5* 1x TCX-10 + 0 2 1x TCX-10 1x TCX-10 + 0 3 1x TCX-10 1x TCX-10 + 2 0 2x TCX-5 1x TCX-10 + 2 2 2x TCX-5 2x TCX-5 + 2 3 2x TCX-5 2x TCX-5 + 3 0 2x TCX-5 1x TCX-10 + 3 2 2x TCX-5 2x TCX-5 + 3 3 2x TCX-5 2x TCX-5 + */ + + if ( ( !bfi && hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || ( bfi && ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && ( hTcxCfg->tcx_curr_overlap_mode != FULL_OVERLAP ) ) ) + { + assert( st->mct_chan_mode != MCT_CHAN_MODE_LFE ); + /* minimum or half overlap, two transforms, grouping into one window */ + L_win = L_frame >> 1; + L_ola = ( hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? tcx_mdct_window_min_length : tcx_mdct_window_half_length; + + set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); + set_zero( xn_buf, tcx_offset + ( L_ola >> 1 ) ); /* zero left end of buffer */ + + for ( w = 0; w < 2; w++ ) + { + if ( kernel_type == MDST_IV || ( kernel_type & w ) ) + { + TCX_MDST_Inverse( x + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); + } + else if ( kernel_type != 0 && w == 0 ) /* type 1 or 2 */ + { + TCX_MDXT_Inverse( x + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, kernel_type ); + } + else + TCX_MDCT_Inverse( x + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); + + tcx_windowing_synthesis_current_frame( win, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, ( w > 0 ) ? 0 : left_rect, ( w > 0 ) || ( w == 0 && index == 2 ) ? MIN_OVERLAP : hTcxCfg->tcx_last_overlap_mode, acelp_zir, hTcxDec->old_syn_Overl, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_win, tcx_offset < 0 ? -tcx_offset : 0, ( w > 0 ) || ( frame_cnt > 0 ) ? 1 : st->last_core_bfi, ( w > 0 ) || ( frame_cnt > 0 ) ? 0 : st->last_is_cng, fullbandScale ); + + if ( w > 0 ) + { + tcx_windowing_synthesis_past_frame( xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, MIN_OVERLAP ); + } + + /* add part of current sub-window overlapping with previous window */ + v_add( win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, L_ola ); + + /* copy new sub-window region not overlapping with previous window */ + mvr2r( win + L_ola, xn_buf + tcx_offset + ( L_ola >> 1 ) + w * L_win, L_win ); + } + + /* To assure that no garbage values are passed to overlap */ + set_zero( xn_buf + L_frame + tcx_offset + ( L_ola >> 1 ), overlap - tcx_offset - ( L_ola >> 1 ) ); + } + else if ( !bfi && ( frame_cnt == 0 ) && ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + + { + /* special overlap attempt, two transforms, grouping into one window */ + L_win = L_frame >> 1; + L_ola = tcx_mdct_window_min_length; + + set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); + + /* 1st TCX-5 window, special MDCT with minimum overlap on right side */ + if ( kernel_type == MDST_IV ) + { + TCX_MDST_Inverse( x, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, st->element_mode ); + } + else if ( kernel_type != MDCT_IV ) /* type 1 or 2 */ + { + TCX_MDXT_Inverse( x, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, kernel_type ); + } + else + { + TCX_MDCT_Inverse( x, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, st->element_mode ); + } + + set_zero( xn_buf, ( overlap >> 1 ) ); + + /* copy new sub-window region not overlapping with previous window */ + mvr2r( win + L_win, xn_buf + ( overlap >> 1 ), L_win + ( L_ola >> 1 ) ); + + /* 2nd TCX-5 window, regular MDCT with minimum overlap on both sides */ + if ( kernel_type & 1 ) + { + TCX_MDST_Inverse( x + L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); + } + else + { + TCX_MDCT_Inverse( x + L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); + } + + tcx_windowing_synthesis_current_frame( win, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, 0, + /* left_rect */ MIN_OVERLAP, /* left_mode */ acelp_zir, hTcxDec->old_syn_Overl, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_win, tcx_offset < 0 ? -tcx_offset : 0, 1, /* st->last_mode_bfi */ 0, /* st->last_is_cng */ fullbandScale ); + + tcx_windowing_synthesis_past_frame( xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, 2 ); + + /* add part of current sub-window overlapping with previous window */ + v_add( win, xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), L_ola ); + + /* copy new sub-window region not overlapping with previous window */ + mvr2r( win + L_ola, xn_buf + ( overlap >> 1 ) + L_win + ( L_ola >> 1 ), L_win ); + + /* extra folding-out on left side of win, for perfect reconstruction */ + if ( kernel_type >= MDCT_II ) + { + for ( w = ( overlap >> 1 ); w < overlap; w++ ) + { + xn_buf[overlap - 1 - w] = xn_buf[w]; + } + } + else + { + for ( w = ( overlap >> 1 ); w < overlap; w++ ) + { + xn_buf[overlap - 1 - w] = -1.0f * xn_buf[w]; + } + } + tcx_windowing_synthesis_current_frame( xn_buf, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, left_rect, 0, /* left_mode */ acelp_zir, hTcxDec->old_syn_Overl, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, 2 * L_win, tcx_offset < 0 ? -tcx_offset : 0, st->last_core_bfi, st->last_is_cng, fullbandScale ); + } + else + { + /* default, i.e. maximum overlap, single transform, no grouping */ + if ( kernel_type == MDST_IV ) + { + TCX_MDST_Inverse( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); + } + else if ( kernel_type != MDCT_IV ) /* type 1 or 2 */ + { + TCX_MDXT_Inverse( x, xn_buf, overlap, L_frame - overlap, overlap, kernel_type ); + } + else + { + TCX_MDCT_Inverse( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); + } + + tcx_windowing_synthesis_current_frame( xn_buf, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, left_rect, !bfi && ( frame_cnt > 0 ) && ( index == 0 ) && ( st->last_core != ACELP_CORE ) ? MIN_OVERLAP : index, acelp_zir, hTcxDec->old_syn_Overl, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_frame_glob >> 1, tcx_offset < 0 ? -tcx_offset : 0, ( frame_cnt > 0 /*|| (st->last_con_tcx )*/ ) ? 1 : st->last_core_bfi, ( frame_cnt > 0 ) ? 0 : st->last_is_cng, fullbandScale ); + + } /* tcx_last_overlap_mode != FULL_OVERLAP */ + } + else + { + /* frame is TCX-20 or not TCX-only */ + assert( frame_cnt == 0 ); + if ( hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) + { + float tmp[L_FRAME_PLUS]; + if ( kernel_type != MDCT_IV ) /* inverse transform */ + { + if ( kernel_type == MDST_IV ) + { + edst( x, xn_buf + overlap / 2 + nz, L_frame, st->element_mode ); + } + else /* type 1 or 2 */ + { + edxt( x, xn_buf + overlap / 2 + nz, L_frame, kernel_type, TRUE ); + } + v_multc( xn_buf + overlap / 2 + nz, (float) sqrt( (float) L_frame / NORM_MDCT_FACTOR ), tmp, L_frame ); + window_ola_ext( tmp, xn_buf, old_out, L_frame, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, kernel_type ); + } + else + { + edct( x, xn_buf + overlap / 2 + nz, L_frame, st->element_mode ); + + v_multc( xn_buf + overlap / 2 + nz, (float) sqrt( (float) L_frame / NORM_MDCT_FACTOR ), tmp, L_frame ); + window_ola( tmp, xn_buf, old_out, L_frame, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, 0, 0, NULL ); + } + aldo = 1; + } + else + { + int16_t acelp_mem_len = tcx_offset < 0 ? -tcx_offset : 0; + + if ( kernel_type == MDST_IV ) + { + TCX_MDST_Inverse( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); + } + else if ( kernel_type != MDCT_IV ) /* type 1 or 2 */ + { + TCX_MDXT_Inverse( x, xn_buf, overlap, L_frame - overlap, overlap, kernel_type ); + } + else + { + TCX_MDCT_Inverse( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); + } + + /*-----------------------------------------------------------* + * Windowing, overlap and add * + *-----------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_MDCT && ( st->last_core_brate <= SID_2k40 || st->last_core == ACELP_CORE ) && !fullbandScale ) + { + float buf[L_FRAME_MAX / 4]; + float window_buf[L_FRAME_MAX / 4]; + float r[M + 1]; + const int16_t analysis_len = L_frame_glob / 4; + + /* get the first 5 ms of non-aliased TCX syntesis */ + mvr2r( xn_buf + overlap / 2 + 2 * acelp_mem_len, &buf[0], analysis_len ); + + /* get LPC from that signal part to use for acelp zir smoothing */ + ham_cos_window( &window_buf[0], analysis_len / 2, analysis_len / 2 ); + autocorr( &buf[0], &r[0], M, analysis_len, &window_buf[0], 0, 0, 0 ); + lag_wind( r, M, L_frame_glob * FRAMES_PER_SEC, LAGW_STRONG ); + lev_dur( &st->old_Aq_12_8[0], &r[0], M, NULL ); + } + + /* Window current frame */ + tcx_windowing_synthesis_current_frame( xn_buf, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, left_rect, hTcxCfg->tcx_last_overlap_mode, acelp_zir, hTcxDec->old_syn_Overl, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_frame_glob >> 1, acelp_mem_len, st->last_core_bfi, st->last_is_cng, fullbandScale ); + } + } /* TCX-20 and TCX-only */ + + /* Window and overlap-add past frame if past frame is TCX */ + if ( ( frame_cnt != 0 ) || ( st->last_core_bfi > ACELP_CORE ) ) + { + if ( ( ( L_frameTCX == hTcxDec->L_frameTCX >> 1 || st->mct_chan_mode == MCT_CHAN_MODE_LFE ) && ( st->tcxonly ) ) || ( hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) + { + if ( !bfi && ( frame_cnt > 0 ) && ( index == 0 ) && ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( st->last_core != ACELP_CORE ) ) + { + index = MIN_OVERLAP; /* use minimum overlap between the two TCX-10 windows */ + } + + if ( hTcxCfg->last_aldo ) + { + for ( i = 0; i < overlap - tcx_mdct_window_min_length; i++ ) + { + xn_buf[i + overlap / 2 - tcx_offset] += old_out[i + nz]; + } + + /* fade truncated ALDO window */ + if ( L_frameTCX == hTcxDec->L_frameTCX >> 1 && st->element_mode == IVAS_CPE_MDCT && frame_cnt == 0 && hTcxCfg->tcx_last_overlap_mode == FULL_OVERLAP ) + { + for ( ; i < overlap; i++ ) /* perfectly reconstructing ALDO shortening */ + { + xn_buf[i + overlap / 2 - tcx_offset] += old_out[i + nz]; + } + for ( i = 0; i < tcx_mdct_window_min_length; i++ ) + { + xn_buf[i + overlap / 2 - tcx_offset + overlap] += old_out[i + nz + overlap] * tcx_mdct_window_minimum[tcx_mdct_window_min_length - 1 - i]; + } + } + else + { + for ( ; i < overlap; i++ ) + { + xn_buf[i + overlap / 2 - tcx_offset] += old_out[i + nz] * tcx_mdct_window_minimum[overlap - 1 - i]; + } + } + } + else + { + tcx_windowing_synthesis_past_frame( old_syn_overl, tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, ( index == 0 || hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? hTcxCfg->tcx_last_overlap_mode : index ); + + if ( bfi ) + { + for ( i = 0; i < tcx_mdct_window_half_length; i++ ) + { + xn_buf[i + overlap / 2 - tcx_offset] += old_syn_overl[i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i]; + } + } + else if ( !left_rect ) + { + for ( i = 0; i < overlap; i++ ) + { + xn_buf[i] += old_syn_overl[i]; + } + } + else + { + for ( i = 0; i < overlap; i++ ) + { + xn_buf[i + ( overlap >> 1 )] += old_syn_overl[i]; + } + } + } + } + } + + if ( !aldo && ( ( ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && frame_cnt > 0 ) || L_frameTCX != ( hTcxDec->L_frameTCX >> 1 ) ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + /* Compute windowed synthesis in case of switching to ALDO windows in next frame */ + mvr2r( xn_buf + L_frame - nz, old_out, nz + overlap ); + set_zero( old_out + nz + overlap, nz ); + + tcx_windowing_synthesis_past_frame( old_out + nz, tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, hTcxCfg->tcx_curr_overlap_mode ); + + /* If current overlap mode = FULL_OVERLAP -> ALDO_WINDOW */ + if ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) + { + if ( kernel_type & 1 ) + { + for ( i = 0; i < nz; i++ ) + { + old_out[nz + overlap + i] = -1.0f * xn_buf[L_frame - 1 - i] * tcx_aldo_window_1_trunc[-1 - i]; + } + } + else + { + for ( i = 0; i < nz; i++ ) + { + old_out[nz + overlap + i] = xn_buf[L_frame - 1 - i] * tcx_aldo_window_1_trunc[-1 - i]; + } + } + aldo = 1; + } + } + + if ( FB_flag ) + { + hTcxCfg->last_aldo = aldo; + } + + /* Smoothing between the ACELP PLC and TCX Transition frame. Using the shape of the half overlap window for the crossfading. */ + if ( left_rect && ( frame_cnt == 0 ) && ( st->last_core_bfi == ACELP_CORE ) && st->prev_bfi ) + { + if ( FB_flag ) + { + for ( i = 0; i < tcx_mdct_window_half_length; i++ ) + { + xn_buf[i + overlap / 2 - tcx_offset] *= tcx_mdct_window_half[i]; + xn_buf[i + overlap / 2 - tcx_offset] += hTcxDec->syn_OverlFB[i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i]; + } + } + else + { + for ( i = 0; i < tcx_mdct_window_half_length; i++ ) + { + xn_buf[i + overlap / 2 - tcx_offset] *= tcx_mdct_window_half[i]; + xn_buf[i + overlap / 2 - tcx_offset] += hTcxDec->syn_Overl[i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i]; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_invQ + * + * TCX: inverse quantization + *-------------------------------------------------------------------*/ + +void decoder_tcx_invQ( + Decoder_State *st, /* i/o: coder memory state */ + int16_t prm[], /* i : parameters */ + float A[], /* i : coefficients NxAz[M+1] */ + Word16 Aind[], /* i : frame-independent coefficients Az[M+1] */ + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + float x[], + float gainlpc2[], + float xn_buf[], + int16_t *fUseTns, /* o : flag that is set if TNS data is present */ + STnsData *tnsData, + float *gain_tcx, + const int16_t **prm_sqQ1, + int16_t *nf_seed, + const int16_t bfi, /* i : Bad frame indicator */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t isMCT, +#endif + const int16_t frame_cnt /* i : frame counter in the super frame */ +) +{ + int16_t i, index; + int16_t start_zeroing; + float Ap[M + 2]; + + int16_t noiseFillingSize; + int16_t tnsSize; /* number of tns parameters put into prm */ + + float gamma1; + float gamma; + float gainCompensate = 1.f; + float h1[L_FRAME_MAX / 4 + 1]; + float mem[M]; + float tmp2; + int16_t arith_bits, signaling_bits; + const int16_t *prm_ltp, *prm_tns, *prm_hm, *prm_sqQ, *prm_target; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; + + + tnsSize = 0; + prm_target = NULL; /* just to suppress MSVC warnigs */ + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + /* Init lengths */ + gamma1 = st->gamma; + + if ( hTcxDec->enableTcxLpc ) + { + gamma1 = 1.0f; + } + + noiseFillingSize = L_spec; + if ( st->igf ) + { + noiseFillingSize = st->hIGFDec->infoIGFStartLine; + } + + prm_ltp = &prm[1 + NOISE_FILL_RANGES]; + prm_tns = prm_ltp + LTPSIZE; + + /*-----------------------------------------------------------* + * Read TCX parameters * + *-----------------------------------------------------------*/ + + index = 0; + + if ( !bfi ) + { + index = prm[0]; + + /* read noise level (fac_ns) */ + st->hTcxDec->noise_filling_index[frame_cnt] = prm[1]; + } + + /* read TNS data */ + if ( !bfi && hTcxCfg->fIsTNSAllowed ) + { + *fUseTns = DecodeTnsData( hTcxCfg->pCurrentTnsConfig, prm_tns, &tnsSize, tnsData ); + } + else + { + *fUseTns = 0; + } + + prm_hm = prm_tns + tnsSize; + prm_sqQ = prm_hm + NPRM_CTX_HM; + *prm_sqQ1 = prm_sqQ; + + /*-----------------------------------------------------------* + * Spectrum data * + *-----------------------------------------------------------*/ + + if ( !bfi ) + { + /*-----------------------------------------------------------* + * Context HM * + *-----------------------------------------------------------*/ + + if ( hTcxCfg->ctx_hm && ( ( st->last_core_from_bs != ACELP_CORE ) || ( frame_cnt > 0 ) ) ) + { + st->last_ctx_hm_enabled = prm_hm[0]; + + for ( i = 0; i < L_spec; i++ ) + { + /* no context harmonic model, copy MDCT coefficients to x */ + x[i] = (float) prm_sqQ[i]; + } + } + else /* hTcxCfg->ctx_hm == 0 */ + { + if ( hTcxDec->tcx_lpc_shaped_ari ) /* low rates: envelope based arithmetic coder */ + { + prm_target = prm_sqQ; + prm_sqQ = prm_target + 1; + + tcx_arith_decode_envelope( st, x, L_frame, L_spec, Aind, *prm_target, prm_sqQ, st->last_core_from_bs != ACELP_CORE, prm_hm, /* HM parameter area */ hTcxDec->tcx_hm_LtpPitchLag, &arith_bits, &signaling_bits, ( st->bwidth > WB ) ? 1 : 0 ); + + hTcxDec->resQBits[frame_cnt] = *prm_target - arith_bits; + + /* Noise filling seed */ + for ( i = 0; i < noiseFillingSize; ++i ) + { + *nf_seed += (int16_t) ( abs( (int16_t) x[i] ) * i * 2 ); + } + } + else /* TCX-only: context based arithmetic coder */ + { + for ( i = 0; i < L_spec; i++ ) + { + x[i] = (float) prm_sqQ[i]; + } + + for ( i = L_spec; i < L_frameTCX; i++ ) + { + x[i] = 0.0f; + } + } + + } /* else of if hTcxCfg->ctx_hm */ + + start_zeroing = ( st->last_core != st->last_core_from_bs ) ? min( L_spec, L_frame ) : L_spec; + + if ( frame_cnt == 0 && st->last_core == ACELP_CORE && st->last_core_from_bs != ACELP_CORE ) + { + int16_t L_spec_con = L_spec + ( st->hTcxCfg->tcx_coded_lines >> 2 ); + + for ( i = start_zeroing; i < L_spec_con; i++ ) + { + x[i] = 0.0f; + } + + start_zeroing = L_spec_con; + } + + for ( i = start_zeroing; i < max( L_frame, L_frameTCX ); i++ ) + { + x[i] = 0.0f; + } + + /*-----------------------------------------------------------* + * adaptive low frequency deemphasis. * + *-----------------------------------------------------------*/ + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + weight_a( A, Ap, gamma1, M ); + lpc2mdct( Ap, M, gainlpc2, FDNS_NPTS, 0 ); + } + + /* initialize LF deemphasis factors in xn_buf */ + if ( !st->tcxonly || ( hTcxCfg->resq && hTcxDec->tcx_lpc_shaped_ari ) ) + { + for ( i = 0; i < max( L_spec, L_frameTCX ); i++ ) + { + xn_buf[i] = 1.0f; + } + } + + if ( !st->tcxonly ) + { + AdaptLowFreqDeemph( x, hTcxDec->tcx_lpc_shaped_ari, gainlpc2, L_frame, xn_buf /* LF deemphasis factors */ ); + } + } + + hTcxDec->damping = 0.f; + + if ( bfi == 0 ) + { + /*-----------------------------------------------------------* + * Compute global gain * + *-----------------------------------------------------------*/ + + if ( st->element_mode > EVS_MONO ) + { + float ener; + + /*To be in sync with encoder gain computating*/ + ener = (float) sqrt( (float) L_spec / (float) NORM_MDCT_FACTOR ); + *gain_tcx = (float) pow( 10.0f, ( (float) index ) / 28.0f ) / ener; + } + else + { + *gain_tcx = (float) pow( 10.0f, index / 28.0f ) * (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ); + } + + hTcxDec->old_gaintcx_bfi = *gain_tcx; + + hTcxDec->cummulative_damping_tcx = 1.0f; + } + else /* bfi = 1 */ + { + /* PLC: [TCX: Fade-out] + * derivation of damping factor */ + if ( st->use_partial_copy ) + { + if ( st->rf_frame_type == RF_TCXFD ) + { + *gain_tcx = (float) pow( 10.0f, (int16_t) hTcxDec->old_gaintcx_bfi / 28.0f ) * (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ); + hTcxDec->old_gaintcx_bfi = *gain_tcx; + } + else + { + *gain_tcx = hTcxDec->old_gaintcx_bfi; + } + + hTcxDec->damping = 1; + } +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + else if ( st->element_mode == IVAS_CPE_MDCT && st->nbLostCmpt >= MDCT_ST_PLC_FADEOUT_START_FRAME ) + { + *gain_tcx = hTcxDec->old_gaintcx_bfi; + hTcxDec->damping = Damping_fact( st->coder_type, st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_START_FRAME, st->last_good, st->stab_fac, &( st->lp_gainp ), st->last_core ); + } + else if ( st->element_mode != IVAS_CPE_MDCT || !isMCT ) +#else + else +#endif + { + *gain_tcx = hTcxDec->old_gaintcx_bfi; + hTcxDec->damping = Damping_fact( st->coder_type, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), st->last_core ); + } + + hTcxDec->cummulative_damping_tcx *= hTcxDec->damping; + } + + if ( bfi ) + { + if ( hTcxDec->envWeighted ) + { + gamma = st->gamma; + } + else + { + gamma = gamma1; + } + + /* PLC: [TCX: Fade-out] + * PLC: invert LPC weighting in case of PLC */ + + if ( hTcxDec->enableTcxLpc ) + { + gamma = hTcxDec->cummulative_damping_tcx * ( st->gamma - 1 ) + 1; + } + else + { + gamma = hTcxDec->cummulative_damping_tcx * ( gamma1 - 1 ) + 1; + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + weight_a( A, Ap, gamma, M ); + lpc2mdct( Ap, M, gainlpc2, FDNS_NPTS, 0 ); + } + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + tmp2 = 0; + set_zero( h1, L_SUBFR + 1 ); + set_zero( mem, M ); + h1[0] = 1.0f; + syn_filt( Ap, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ + deemph( h1, st->preemph_fac, L_SUBFR, &tmp2 ); /* impulse response of deemph */ + } + + /* impulse response level = gain introduced by synthesis+deemphasis */ + if ( !bfi ) + { + if ( st->element_mode == IVAS_CPE_MDCT ) + { + st->last_gain_syn_deemph = 0.0; + } + else + { + st->last_gain_syn_deemph = (float) sqrt( dotp( h1, h1, L_SUBFR ) ); + } + + /*for avoiding compiler warnings*/ + hTcxDec->gainHelper = 1.f; + hTcxDec->stepCompensate = 0.f; + } + else if ( st->core == TCX_20_CORE || frame_cnt == 1 ) + { + if ( st->element_mode == IVAS_CPE_MDCT ) + { + gainCompensate = 1.0f; + } + else + { + gainCompensate = st->last_gain_syn_deemph / (float) sqrt( dotp( h1, h1, L_SUBFR ) ); + } + + if ( st->nbLostCmpt == 1 ) + { + hTcxDec->stepCompensate = ( 1.f - gainCompensate ) / st->L_frame; + hTcxDec->gainHelper = 1.f; + } + else + { + hTcxDec->stepCompensate = ( st->last_concealed_gain_syn_deemph - gainCompensate ) / st->L_frame; + hTcxDec->gainHelper = st->last_concealed_gain_syn_deemph; + } + st->last_concealed_gain_syn_deemph = gainCompensate; + } + + /*-----------------------------------------------------------* + * Residual inv. Q. * + *-----------------------------------------------------------*/ + + if ( !bfi && hTcxCfg->resq ) + { + if ( hTcxDec->tcx_lpc_shaped_ari ) + { + /* envelope based arithmetic coder */ + const int16_t *prm_resq; + prm_resq = prm_sqQ + *prm_target /* = targetBits */ - hTcxDec->resQBits[frame_cnt]; + i = tcx_ari_res_invQ_spec( x, L_spec, prm_resq, hTcxDec->resQBits[frame_cnt], 0, hTcxCfg->sq_rounding, xn_buf /* LF deemphasis factors */ ); + } + else + { + /* context based arithmetic coder */ + i = tcx_res_invQ_gain( gain_tcx, &prm_sqQ[L_spec], hTcxDec->resQBits[frame_cnt] ); + tcx_res_invQ_spec( x, L_spec, &prm_sqQ[L_spec], hTcxDec->resQBits[frame_cnt], i, hTcxCfg->sq_rounding, st->tcxonly ? NULL : xn_buf /* LF deemphasis factors */ ); + } + } + + if ( !bfi && st->tcxonly && st->element_mode != IVAS_CPE_MDCT ) + { + if ( hTcxLtpDec->tcxltp && ( hTcxLtpDec->tcxltp_gain > 0.0f ) && !( *fUseTns ) ) + { + PsychAdaptLowFreqDeemph( x, gainlpc2, NULL ); + } + } + + if ( !bfi && !st->tcxonly ) + { + /* Replication of ACELP formant enhancement for low rates */ + if ( st->total_brate < ACELP_13k20 ) + { + if ( st->element_mode == IVAS_CPE_MDCT ) + { + assert( !"Not adapted to warped scale" ); + } + tcxFormantEnhancement( xn_buf, gainlpc2, x, L_frame ); + } + } + + /*-----------------------------------------------------------* + * Add gain to the lpc gains * + *-----------------------------------------------------------*/ + + if ( st->VAD == 0 ) + { + *gain_tcx *= hTcxCfg->na_scale; + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + v_multc( gainlpc2, *gain_tcx, gainlpc2, FDNS_NPTS ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_noisefilling() + * + * TCX: core noise filling, IGF updates + *-------------------------------------------------------------------*/ + +void decoder_tcx_noisefilling( + Decoder_State *st, /* i/o: coder memory state */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float concealment_noise[L_FRAME48k], +#endif + const float A[], /* i : coefficients NxAz[M+1] */ + const int16_t L_frameTCX_glob, + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + float x[], + float gainlpc2[], + int16_t *temp_concealment_method, + const float gain_tcx, + const int16_t *prm_sqQ, + int16_t nf_seed, + const int16_t bfi, /* i : Bad frame indicator */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t isMCT, +#endif + const int16_t frame_cnt /* i : frame counter in the super frame*/ +) +{ + int16_t i; + int16_t firstLine; + float fac_ns; + int16_t noiseFillingSize; + int16_t noiseTransWidth = MIN_NOISE_FILLING_HOLE; + float tmp2; + int32_t sum_word32; + int16_t infoIGFStartLine; + float f, noiseTiltFactor, smooth_gain; + float E_2ndlast, E_last; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; + int32_t total_brate = ( st->element_mode == IVAS_CPE_MDCT ? st->element_brate : st->total_brate ); + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + /* Init lengths */ + if ( st->igf == 0 ) + { + if ( st->narrowBand == 0 ) + { + /* minimum needed for output with sampling rates lower then the + nominal sampling rate */ + infoIGFStartLine = min( L_frameTCX, L_frame ); + } + else + { + infoIGFStartLine = L_frameTCX; + } + } + else + { + infoIGFStartLine = min( st->hIGFDec->infoIGFStartLine, L_frameTCX ); + } + + noiseFillingSize = L_spec; + if ( st->igf ) + { + noiseFillingSize = st->hIGFDec->infoIGFStartLine; + } + + fac_ns = (float) hTcxDec->noise_filling_index[frame_cnt] * 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); + + /*-----------------------------------------------------------* + * Noise filling. * + *-----------------------------------------------------------*/ + + if ( !bfi && ( fac_ns > 0.0f ) ) + { + firstLine = tcxGetNoiseFillingTilt( A, L_frame, ( total_brate >= ACELP_13k20 && !st->rf_flag ), &noiseTiltFactor ); + + if ( st->tcxonly ) + { + if ( st->element_mode == IVAS_CPE_MDCT ) + { + if ( frame_cnt == 0 ) + { + mvr2r( hTcxDec->ltpGainMemory, &hTcxDec->ltpGainMemory[1], N_LTP_GAIN_MEMS - 1 ); + hTcxDec->ltpGainMemory[0] = hTcxLtpDec->tcxltp_gain; + } + + smooth_gain = dotp( hTcxDec->ltpGainMemory, nf_tw_smoothing_coeffs, N_LTP_GAIN_MEMS ); + noiseTransWidth = HOLE_SIZE_FROM_LTP( max( smooth_gain, ( hTcxCfg->ctx_hm && st->last_core != ACELP_CORE ) ? 0.3125f * st->last_ctx_hm_enabled : 0 ) ); + } + else + { + noiseTransWidth = HOLE_SIZE_FROM_LTP( max( hTcxLtpDec->tcxltp_gain, ( hTcxCfg->ctx_hm && st->last_core != ACELP_CORE ) ? 0.3125f * st->last_ctx_hm_enabled : 0 ) ); + } + + if ( L_frame == st->L_frame >> 1 ) + { + noiseTransWidth = 3; /* minimum transition fading for noise filling in TCX-10 */ + } + } + + if ( !hTcxDec->tcx_lpc_shaped_ari ) + { + for ( i = 0; i < L_spec; i++ ) + { + nf_seed += (int16_t) ( abs( prm_sqQ[i] ) * i * 2 ); + } + } + tcx_noise_filling( x, nf_seed, firstLine, noiseFillingSize, noiseTransWidth, L_frame, noiseTiltFactor, fac_ns, st->igf ? st->hIGFDec->infoTCXNoise : NULL, st->element_mode ); + + st->seed_tcx_plc = nf_seed; + } + + if ( st->enablePlcWaveadjust ) + { + if ( bfi ) + { + if ( st->nbLostCmpt == 1 ) + { + st->hPlcInfo->concealment_method = TCX_NONTONAL; + + /* tonal/non-tonal decision */ + if ( st->hPlcInfo->Transient[0] == 1 && st->hPlcInfo->Transient[1] == 1 && st->hPlcInfo->Transient[2] == 1 ) + { + sum_word32 = 0; + + for ( i = 9; i >= 0; i-- ) + { + sum_word32 += st->hPlcInfo->TCX_Tonality[i]; + } + + if ( sum_word32 >= 6 ) + { + st->hPlcInfo->concealment_method = TCX_TONAL; + } + } + + if ( st->tonal_mdct_plc_active ) + { + st->hPlcInfo->concealment_method = TCX_TONAL; + } + } + + if ( L_frameTCX > hTcxDec->L_frameTCX ) + { + st->hPlcInfo->concealment_method = TCX_TONAL; + } + + *temp_concealment_method = st->hPlcInfo->concealment_method; + + if ( st->core == TCX_10_CORE ) + { + *temp_concealment_method = TCX_TONAL; + } + } + + /* get the starting location of the subframe in the frame */ + if ( st->core == TCX_10_CORE ) + { + st->hPlcInfo->subframe = frame_cnt * L_frameTCX_glob; + } + } + + /* PLC: [TCX: Tonal Concealment] */ + /* PLC: [TCX: Fade-out] + * PLC: Fade out to white noise */ + if ( st->hTonalMDCTConc != NULL ) + { + if ( !bfi && st->element_mode != IVAS_CPE_MDCT ) + + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + TonalMDCTConceal_SaveFreqSignal( st->hTonalMDCTConc, x, L_frameTCX, L_frame, gainlpc2, infoIGFStartLine ); +#else + TonalMDCTConceal_SaveFreqSignal( st->hTonalMDCTConc, x, L_frameTCX, L_frame, gainlpc2 ); +#endif + } + else if ( bfi ) + { + + if ( !st->enablePlcWaveadjust || ( *temp_concealment_method == TCX_TONAL ) ) + { + /* set f to 1 to not fade out */ + /* set f to 0 to immediately switch to white noise */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->tcxonly && st->element_mode != IVAS_CPE_MDCT ) +#else + if ( st->tcxonly ) +#endif + { + f = 1.0f; + } + else + { + f = hTcxDec->cummulative_damping_tcx; + } + + if ( ( frame_cnt == 0 ) && ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && ( st->tcxonly ) && ( !st->tonal_mdct_plc_active ) && ( st->nbLostCmpt == 1 ) && ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && ( hTcxCfg->tcx_curr_overlap_mode != FULL_OVERLAP ) ) + { + E_2ndlast = E_last = EPSILON; + for ( i = 0; i < infoIGFStartLine; i = i + 2 ) + { + E_2ndlast += st->hTonalMDCTConc->lastBlockData.spectralData[i] * st->hTonalMDCTConc->lastBlockData.spectralData[i]; + E_last += st->hTonalMDCTConc->lastBlockData.spectralData[i + 1] * st->hTonalMDCTConc->lastBlockData.spectralData[i + 1]; + } + tmp2 = E_2ndlast / E_last; + + /* replace higher energy TCX5 frame by lower one to avoid energy fluctuation */ + if ( tmp2 > 2 ) + { + for ( i = 0; i < infoIGFStartLine; i = i + 2 ) + { + st->hTonalMDCTConc->lastBlockData.spectralData[i] = st->hTonalMDCTConc->lastBlockData.spectralData[i + 1]; + } + } + else if ( tmp2 < 0.5 ) + { + for ( i = 0; i < infoIGFStartLine; i = i + 2 ) + { + st->hTonalMDCTConc->lastBlockData.spectralData[i + 1] = st->hTonalMDCTConc->lastBlockData.spectralData[i]; + } + } + } + + noiseTiltFactor = 1.0f; + tcxGetNoiseFillingTilt( A, L_frame, ( total_brate >= ACELP_13k20 && !st->rf_flag ), &noiseTiltFactor ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->element_mode == IVAS_CPE_MDCT && !isMCT ) + { + TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, concealment_noise, infoIGFStartLine ); + } + else + { + TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, NULL, infoIGFStartLine ); + } +#else + TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, infoIGFStartLine ); +#endif + } + } + } + + /*------------------------- SPLIT 2 noise filling ------------------------*/ + if ( !bfi ) + { + if ( st->element_mode == IVAS_CPE_MDCT ) + { + v_multc( x, gain_tcx, x, L_spec ); + } + } + + if ( L_spec < L_frame ) + { + set_zero( x + L_spec, L_frame - L_spec ); + } + else if ( L_spec > L_frameTCX ) + { + set_zero( x + L_frameTCX, L_spec - L_frameTCX ); + } + + if ( bfi && ( !st->enablePlcWaveadjust || ( *temp_concealment_method == TCX_TONAL ) ) && st->igf && ( frame_cnt == 0 ) && ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && ( st->tcxonly ) && ( !st->tonal_mdct_plc_active ) && ( st->nbLostCmpt == 1 ) && ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && ( hTcxCfg->tcx_curr_overlap_mode != FULL_OVERLAP ) ) + { + IGFDecCopyLPCFlatSpectrum( st->hIGFDec, x, IGF_GRID_LB_SHORT ); + /* also replace flat spectrum for the second TCX10 sub frame */ + IGFDecUpdateInfo( st->hIGFDec, 1, IGF_GRID_LB_SHORT ); + IGFDecCopyLPCFlatSpectrum( st->hIGFDec, x, IGF_GRID_LB_SHORT ); + IGFDecUpdateInfo( st->hIGFDec, 0, IGF_GRID_LB_SHORT ); + mvs2s( st->hIGFDec->igfData.igf_curr_subframe[0][0], st->hIGFDec->igfData.igf_curr_subframe[1][0], IGF_MAX_SFB ); + } + else if ( bfi && st->igf && ( frame_cnt == 0 ) && ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) ) + { + /* copy second to first subframe */ + IGFDecReplicateTCX10State( st->hIGFDec ); + } + + if ( st->igf ) + { + if ( bfi && st->element_mode != EVS_MONO ) + { + *st->hIGFDec->igfData.igfInfo.nfSeed = (int16_t) ( st->seed_tcx_plc * 31821L + 13849L ); + } + else + { + *st->hIGFDec->igfData.igfInfo.nfSeed = (int16_t) ( nf_seed * 31821L + 13849L ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_noiseshaping_igf() + * + * TCX: FDNS and IGF application + *-------------------------------------------------------------------*/ + +void decoder_tcx_noiseshaping_igf( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t left_rect, + float x[], + const float gainlpc2[], + int16_t *temp_concealment_method, + const int16_t bfi /* i : Bad frame indicator */ +) +{ + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + /*-----------------------------------------------------------* + * Noise shaping in frequency domain (1/Wz) * + *-----------------------------------------------------------*/ + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->igf && ( !bfi || ( st->element_mode == IVAS_CPE_MDCT && st->prev_bfi ) ) ) +#else + if ( st->igf && !bfi ) +#endif + { + if ( ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) + { + IGFDecCopyLPCFlatSpectrum( st->hIGFDec, x, IGF_GRID_LB_SHORT ); + } + else + { + IGFDecCopyLPCFlatSpectrum( st->hIGFDec, x, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM ); + } + } + /* LPC gains already available */ + + if ( st->element_mode != IVAS_CPE_MDCT && ( !st->enablePlcWaveadjust || !bfi || ( *temp_concealment_method == TCX_TONAL ) ) ) + { + mdct_noiseShaping( x, L_frame, gainlpc2, FDNS_NPTS ); + + if ( !bfi ) + { + v_multc( x + L_frame, gainlpc2[FDNS_NPTS - 1], x + L_frame, L_spec - L_frame ); + } + + set_zero( x + L_spec, L_frameTCX - L_spec ); + } + + /* PLC: [TCX: Tonal Concealment] */ + if ( bfi && st->tonal_mdct_plc_active && st->element_mode != IVAS_CPE_MDCT ) + { + TonalMDCTConceal_Apply( st->hTonalMDCTConc, x, st->hTcxCfg->psychParamsCurrent ); + } + + if ( st->hTonalMDCTConc != NULL && st->element_mode != IVAS_CPE_MDCT ) + { + TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX, ( hTcxDec->tcxltp_last_gain_unmodified > 0 ) ? st->old_fpitch : 0, bfi, bfi && st->tonal_mdct_plc_active ); + } + + if ( st->enablePlcWaveadjust ) + { + /* spectrum concealment */ + if ( bfi && *temp_concealment_method == TCX_NONTONAL ) + { + concealment_decode( st->core, x, st->hPlcInfo ); + } + + /* update spectrum buffer, tonality flag, etc. */ + concealment_update( bfi, st->core, st->tonality_flag, x, st->hPlcInfo ); + } + + /*-----------------------------------------------------------* + * IGF * + *-----------------------------------------------------------*/ + + if ( st->igf && !( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) ) + { + if ( st->element_mode != IVAS_CPE_MDCT ) + { + IGFDecApplyMono( st->hIGFDec, x, ( st->last_core == ACELP_CORE || ( left_rect && bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, bfi, st->element_mode ); + } + } + + if ( st->igf && ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) ) + { + if ( st->element_mode != IVAS_CPE_MDCT ) + { + IGFDecApplyMono( st->hIGFDec, x, IGF_GRID_LB_SHORT, bfi, st->element_mode ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_tns() + * + * TCX: TNS application + *-------------------------------------------------------------------*/ + +void decoder_tcx_tns( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_frame_glob, /* i : frame length */ + const int16_t L_spec, + const int16_t L_frame, + const int16_t L_frameTCX, + float x[N_MAX], + const int16_t fUseTns, /* i : flag that is set if TNS data is present */ + STnsData *tnsData, + const int16_t bfi, /* i : Bad frame indicator */ + const int16_t frame_cnt, /* i : frame counter in the super frame */ + const int16_t whitenedDomain ) +{ + int16_t index, isTCX5, L; + TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; + + index = hTcxCfg->tcx_last_overlap_mode; /* backup last TCX overlap mode */ + + isTCX5 = 0; + L = L_frameTCX; + + if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) + { + if ( frame_cnt && !bfi && st->last_core != ACELP_CORE ) + { + /* fix sub-window overlap */ + hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; + } + + if ( ( hTcxCfg->fIsTNSAllowed && fUseTns != 0 && bfi != 1 ) || ( L_spec > L_frameTCX ) ) + { + L = L_spec; + } + + if ( ( ( !bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || + ( ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( index == 0 ) ) ) ) || + ( ( bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && + !( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) ) ) + { + isTCX5 = 1; + + tcx5SpectrumDeinterleaving( L >> 1, x ); + + if ( hTcxCfg->fIsTNSAllowed && fUseTns != 0 && bfi != 1 && tnsData->tnsOnWhitenedSpectra == whitenedDomain ) + { + tcx5TnsGrouping( L >> 1, hTcxCfg->tnsConfig[0][0].iFilterBorders[0] >> 1, x ); + } + } + } + +#ifdef DEBUG_PLOT + if ( !whitenedDomain ) + sendDebout( "tnsSpec2", L_frameTCX, 1, "aftInvertGrouping", MTV_FLOAT, x ); +#endif + + /*-----------------------------------------------------------* + * Temporal Noise Shaping Synthesis * + *-----------------------------------------------------------*/ + + if ( hTcxCfg->fIsTNSAllowed && fUseTns != 0 && bfi != 1 && tnsData->tnsOnWhitenedSpectra == whitenedDomain ) + { + /* Apply TNS to get the reconstructed signal */ + SetTnsConfig( hTcxCfg, L_frame_glob == st->L_frame, ( st->last_core == ACELP_CORE ) && ( frame_cnt == 0 ) ); + + ApplyTnsFilter( hTcxCfg->pCurrentTnsConfig, tnsData, x, 0 ); +#ifdef DEBUG_PLOT + sendDebout( "tnsSpec2", L_frameTCX, 1, "aftTNS", MTV_FLOAT, x ); +#endif + + if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly && isTCX5 ) + { + tcx5TnsUngrouping( L_frameTCX >> 1, hTcxCfg->tnsConfig[0][0].iFilterBorders[0] >> 1, x, DEC ); + } + } + + if ( whitenedDomain && isTCX5 ) + { + tcx5SpectrumInterleaving( L >> 1, x ); + } + +#ifdef DEBUG_PLOT + if ( !whitenedDomain ) + sendDebout( "tnsSpec1", L_frameTCX, 1, "aftTNS", MTV_FLOAT, x ); +#endif + /* restore index */ + if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly && frame_cnt && !bfi && st->last_core != ACELP_CORE ) + { + /* restore sub-window overlap */ + hTcxCfg->tcx_last_overlap_mode = index; + } + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_imdct() + * + * TCX: ITF and IMDCT + *-------------------------------------------------------------------*/ + +void decoder_tcx_imdct( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_frame_glob, /* i : frame length */ + const int16_t L_frameTCX_glob, + const int16_t L_spec, + const int16_t tcx_offset, + const int16_t tcx_offsetFB, + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t left_rect, + float x[N_MAX], + float xn_buf[], + const uint16_t kernelType, /* i : TCX transform kernel type */ + const int16_t fUseTns, /* i : flag that is set if TNS data is present */ + float synth[], /* i/o: synth[-M..L_frame] */ + float synthFB[], + const int16_t bfi, /* i : Bad frame indicator */ + const int16_t frame_cnt, /* i : frame counter in the super frame */ + const int16_t isLFE, /* i : is LFE */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ + int16_t j, L, overlap, curr_order, startLine, endLine, isTCX5; + int16_t overlapFB; + float x_tmp[L_FRAME_PLUS]; + float xn_bufFB[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + float acelp_zir[L_FRAME_MAX / 2]; + float x_itf[N_MAX_TCX - IGF_START_MN]; + float A_itf[ITF_MAX_FILTER_ORDER + 1]; + float predictionGain; + int16_t index, proc; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + /* Init lengths */ + overlap = hTcxCfg->tcx_mdct_window_length; + overlapFB = hTcxCfg->tcx_mdct_window_lengthFB; + + index = hTcxCfg->tcx_last_overlap_mode; /* backup last TCX overlap mode */ + if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly && frame_cnt && !bfi && st->last_core != ACELP_CORE ) + { + /* fix sub-window overlap */ + hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; + } + + if ( !isLFE && st->igf ) + { + proc = st->hIGFDec->flatteningTrigger; + + if ( proc && fUseTns != 0 ) + { + proc = 0; + } + + if ( proc ) + { + startLine = st->hIGFDec->infoIGFStartLine; + endLine = st->hIGFDec->infoIGFStopLine; + curr_order = 0; + predictionGain = 0; + L = L_frameTCX; + isTCX5 = 0; + + /* interleave again for ITF */ + if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) + { + if ( ( hTcxCfg->fIsTNSAllowed && fUseTns != 0 && bfi != 1 ) || ( L_spec > L_frameTCX ) ) + { + L = L_spec; + } + + if ( ( ( !bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || + ( ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( index == 0 ) ) ) ) || + ( ( bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && + !( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) ) ) + { + isTCX5 = 1; + + tcx5SpectrumInterleaving( L >> 1, x ); + } + } + + for ( j = startLine; j < endLine; j++ ) + { + if ( st->hIGFDec->flag_sparse[j - IGF_START_MN] == 2 ) + { + x_itf[j - IGF_START_MN] = x[j]; + x[j] = st->hIGFDec->virtualSpec[j - IGF_START_MN]; + } + } + + ITF_Detect( x + IGF_START_MN, startLine, endLine, 8 /*maxOrder*/, A_itf, &predictionGain, &curr_order ); + + ITF_Apply( x, startLine, endLine, A_itf, curr_order ); + + for ( j = startLine; j < endLine; j++ ) + { + if ( st->hIGFDec->flag_sparse[j - IGF_START_MN] == 2 ) + { + x[j] = x_itf[j - IGF_START_MN]; + } + } + + /* deinterleave */ + if ( isTCX5 ) + { + tcx5SpectrumDeinterleaving( L >> 1, x ); + } + } + } + + /*-----------------------------------------------------------* + * Prepare OLA buffer after waveadjustment. * + * Compute inverse MDCT of x[]. * + *-----------------------------------------------------------*/ + +#ifdef DEBUG_PLOT + sendDebout( "tnsSpec", L_frameTCX, 1, "befIMDCT", MTV_FLOAT, x ); +#endif + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + set_f( x_tmp, 0.0f, L_FRAME_PLUS ); + mvr2r( x, x_tmp, min( L_FRAME48k, max( L_spec, max( L_frame, L_frameTCX ) ) ) ); + mvr2r( x, xn_bufFB, min( L_FRAME48k, max( L_spec, max( L_frame, L_frameTCX ) ) ) ); + } + else if ( st->element_mode == EVS_MONO ) + { + mvr2r( x, xn_bufFB, max( L_spec, max( L_frame, L_frameTCX ) ) ); + } + else + { + mvr2r( x, x_tmp, max( L_spec, max( L_frame, L_frameTCX ) ) ); + mvr2r( x, xn_bufFB, max( L_spec, max( L_frame, L_frameTCX ) ) ); + } + + if ( st->igf ) + { + set_zero( xn_bufFB + st->hIGFDec->infoIGFStartLine, L_frameTCX - st->hIGFDec->infoIGFStartLine ); + } + + if ( st->element_mode != IVAS_CPE_DFT && !sba_dirac_stereo_flag ) + { + IMDCT( xn_bufFB, hTcxDec->syn_Overl, hTcxDec->syn_Overl_TDAC, xn_buf, st->mct_chan_mode == MCT_CHAN_MODE_LFE ? hTcxCfg->tcx_mdct_window : hTcxCfg->tcx_aldo_window_1_trunc, st->mct_chan_mode == MCT_CHAN_MODE_LFE ? hTcxCfg->tcx_mdct_window : hTcxCfg->tcx_aldo_window_2, hTcxCfg->tcx_mdct_window_half, hTcxCfg->tcx_mdct_window_minimum, hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_half_length, hTcxCfg->tcx_mdct_window_min_length, index, + kernelType, left_rect, tcx_offset, overlap, L_frame, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frame_glob, frame_cnt, bfi, st->hHQ_core->old_outLB, 0, st, 0, acelp_zir ); + } + + /* Generate additional comfort noise to mask potential coding artefacts */ + if ( st->flag_cna && st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT && !st->cna_dirac_flag ) + { + generate_masking_noise_mdct( x, st->hFdCngDec->hFdCngCom ); + } + + if ( st->element_mode == IVAS_CPE_DFT || sba_dirac_stereo_flag ) + { + mvr2r( x, xn_bufFB, max( L_spec, max( L_frame, L_frameTCX ) ) ); + + IMDCT( xn_bufFB, hTcxDec->syn_Overl, hTcxDec->syn_Overl_TDAC, xn_buf, hTcxCfg->tcx_aldo_window_1_trunc, hTcxCfg->tcx_aldo_window_2, hTcxCfg->tcx_mdct_window_half, hTcxCfg->tcx_mdct_window_minimum, hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_half_length, hTcxCfg->tcx_mdct_window_min_length, index, + kernelType, left_rect, tcx_offset, overlap, L_frame, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frame_glob, frame_cnt, bfi, st->hHQ_core->old_outLB, 0, st, 0, acelp_zir ); + } + + if ( st->element_mode != EVS_MONO ) + { + IMDCT( x_tmp, hTcxDec->syn_OverlFB, hTcxDec->syn_Overl_TDACFB, xn_bufFB, st->mct_chan_mode == MCT_CHAN_MODE_LFE ? hTcxCfg->tcx_mdct_windowFB : hTcxCfg->tcx_aldo_window_1_FB_trunc, st->mct_chan_mode == MCT_CHAN_MODE_LFE ? hTcxCfg->tcx_mdct_windowFB : hTcxCfg->tcx_aldo_window_2_FB, hTcxCfg->tcx_mdct_window_halfFB, hTcxCfg->tcx_mdct_window_minimumFB, hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_half_lengthFB, hTcxCfg->tcx_mdct_window_min_lengthFB, index, + kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out, 1, st, FSCALE_DENOM * L_frameTCX_glob / L_frame_glob, acelp_zir ); + } + else + { + IMDCT( x, hTcxDec->syn_OverlFB, hTcxDec->syn_Overl_TDACFB, xn_bufFB, hTcxCfg->tcx_aldo_window_1_FB_trunc, hTcxCfg->tcx_aldo_window_2_FB, hTcxCfg->tcx_mdct_window_halfFB, hTcxCfg->tcx_mdct_window_minimumFB, hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_half_lengthFB, hTcxCfg->tcx_mdct_window_min_lengthFB, index, + kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out, 1, st, FSCALE_DENOM * L_frameTCX_glob / L_frame_glob, acelp_zir ); + } + + /* PLC: [TCX: Tonal Concealment] */ + if ( !bfi ) + { + st->second_last_tns_active = st->last_tns_active; + st->last_tns_active = hTcxCfg->fIsTNSAllowed & fUseTns; + hTcxDec->tcxltp_third_last_pitch = hTcxDec->tcxltp_second_last_pitch; + hTcxDec->tcxltp_second_last_pitch = st->old_fpitch; + st->old_fpitch = hTcxLtpDec->tcxltp_pitch_int + hTcxLtpDec->tcxltp_pitch_fr / (float) st->pit_res_max; + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + st->old_fpitch *= (float) L_frame_glob / (float) L_FRAME; + } + + if ( st->element_mode > EVS_MONO ) + { + st->old_fpitchFB = st->old_fpitch * (float) L_frameTCX_glob / (float) L_frame_glob; /* TBV - or maybe used min(L_frame_TCX,L_FRAME48k) ... */ + } + else + { + st->old_fpitchFB = st->old_fpitch * (float) L_frameTCX / (float) L_frame; + } + } + + /* Update old_syn_overl */ + if ( !hTcxCfg->last_aldo ) + { + mvr2r( xn_buf + L_frame, hTcxDec->syn_Overl, overlap ); + mvr2r( xn_bufFB + L_frameTCX, hTcxDec->syn_OverlFB, overlapFB ); + } + + /* Output */ + mvr2r( xn_buf + ( overlap >> 1 ) - tcx_offset, synth, L_frame_glob ); + mvr2r( xn_bufFB + ( overlapFB >> 1 ) - tcx_offsetFB, synthFB, L_frameTCX_glob ); + + return; +} + + +/*-------------------------------------------------------------------* + * init_tcx_info() + * + * Initialize lengths for TCX processing, update IGF subframe info + *-------------------------------------------------------------------*/ + +void init_tcx_info( + Decoder_State *st, /* i/o: coder memory state */ + const int16_t L_frame_glob, /* i : global frame length */ + const int16_t L_frameTCX_glob, /* i : FB global frame length */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + const int16_t bfi, /* i : bad frame indicator */ + int16_t *tcx_offset, /* o : folding point offset relative to the end of the previous frame */ + int16_t *tcx_offsetFB, /* o : FB folding point offset relative to the end of the previous frame*/ + int16_t *L_frame, /* o : frame length */ + int16_t *L_frameTCX, /* o : TCX frame length */ + int16_t *left_rect, /* o : left part is rectangular */ + int16_t *L_spec /* o : spectrum length */ +) +{ + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; + + /* Init lengths */ + *tcx_offset = hTcxCfg->tcx_offset; + *tcx_offsetFB = hTcxCfg->tcx_offsetFB; + + if ( bfi ) + { + /* PLC: [TCX: Memory update] + * PLC: Init buffers */ + + assert( st->L_frame_past > 0 ); + *L_frame = st->L_frame_past; + *L_frameTCX = st->L_frameTCX_past; + + *left_rect = hTcxDec->prev_widow_left_rect; + + if ( *left_rect ) + { + *tcx_offset = hTcxCfg->lfacNext; + *tcx_offsetFB = hTcxCfg->lfacNextFB; + *L_spec += st->hTcxCfg->tcx_coded_lines >> 2; + } + } + else + { + if ( frame_cnt == 0 && st->last_core == ACELP_CORE ) + { + if ( !st->prev_bfi ) + { + hTcxCfg->last_aldo = 0; + } + + /* if past frame is ACELP */ + *L_frame = L_frame_glob + *tcx_offset; + *L_frameTCX = L_frameTCX_glob + *tcx_offsetFB; + if ( st->last_core == st->last_core_from_bs ) + { + /* case: last frame was lost and concealed as CNG */ + /* using the longer transition spec length causes reading of uninitialized data */ + *L_spec += st->hTcxCfg->tcx_coded_lines >> 2; + } + + assert( hTcxCfg->lfacNext <= 0 ); + *L_frame -= hTcxCfg->lfacNext; + *L_frameTCX -= hTcxCfg->lfacNextFB; + *tcx_offset = hTcxCfg->lfacNext; + *tcx_offsetFB = hTcxCfg->lfacNextFB; + + *left_rect = 1; + hTcxDec->prev_widow_left_rect = 1; + } + else + { + *L_frame = L_frame_glob; + *L_frameTCX = L_frameTCX_glob; + *left_rect = 0; + hTcxDec->prev_widow_left_rect = 0; + } + + st->L_frame_past = *L_frame; + st->L_frameTCX_past = *L_frameTCX; + } + + if ( st->igf ) + { + if ( ( *L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) + { + IGFDecUpdateInfo( st->hIGFDec, frame_cnt, IGF_GRID_LB_SHORT ); + } + else + { + IGFDecUpdateInfo( st->hIGFDec, frame_cnt, ( st->last_core == ACELP_CORE || ( *left_rect && st->bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_IGF_mono() + * + * TCX: apply mono IGF + *-------------------------------------------------------------------*/ + +void decoder_tcx_IGF_mono( + Decoder_State *st, /* i/o: coder memory state */ + float x[], /* o : de-quatized coefficients */ + const int16_t L_frame, /* i : frame length */ + const int16_t left_rect, /* i : left part is rectangular */ + const int16_t bfi, /* i : bad frame indicator */ + const int16_t frame_cnt /* i : frame counter in the super_frame */ +) +{ + int16_t igfGridIdx; + + IGFDecUpdateInfo( st->hIGFDec, frame_cnt, ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ? IGF_GRID_LB_SHORT : ( st->last_core == ACELP_CORE || left_rect ) ? IGF_GRID_LB_TRAN + : IGF_GRID_LB_NORM ); + + if ( st->igf ) + { + igfGridIdx = IGF_GRID_LB_SHORT; + /*st->hIGFDec.igfData.igfInfo.nfSeed = (int16_t)(*nf_seed * 31821L + 13849L);*/ + if ( !( L_frame == st->L_frame >> 1 ) && st->tcxonly ) + { + igfGridIdx = ( st->last_core == ACELP_CORE || ( left_rect && bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM; + } + + IGFDecApplyMono( st->hIGFDec, x, igfGridIdx, bfi, st->element_mode ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * decoder_tcx_IGF_stereo() + * + * TCX: apply stereo IGF processing + *-------------------------------------------------------------------*/ + +void decoder_tcx_IGF_stereo( + Decoder_State **sts, /* i/o: coder memory states */ + STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + float *x[CPE_CHANNELS][NB_DIV], /* o : de-quatized coefficients */ + const int16_t L_frame, /* i : frame length */ + const int16_t left_rect, /* i : left part is rectangular */ + const int16_t k, /* i : Subframe index */ + const int16_t bfi /* i : bad frame indicator */ +) +{ + int16_t coreMsMask[N_MAX]; + STEREO_MDCT_BAND_PARAMETERS *sfbConf; + int16_t core, sfb, igfGridIdx; + + core = sts[0]->core; + + /* assumptions: stereo filling was already done on the flattened spectra + * IGF region is always coded M/S, never L/R (to be done in the encoder) + * for residual bands with stereo filling infoTcxNoise is set to zero + * both channels have the same IGF configuration + */ + +#ifdef DEBUGGING + /* sanity checks: check if both channels have the same configuration...*/ + assert( ( sts[0]->core == sts[1]->core ) ); + if ( sts[0]->last_core_from_bs == ACELP_CORE || sts[1]->last_core_from_bs == ACELP_CORE ) + { + assert( ( sts[0]->last_core_from_bs == sts[1]->last_core_from_bs ) ); + } +#endif + + /* initialization */ + sfbConf = ( core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + + if ( sts[0]->last_core == ACELP_CORE ) + { + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + /* create line wise ms mask for the core bands */ + set_s( coreMsMask, 0, N_MAX ); + + for ( sfb = 0; sfb < sfbConf->sfbCnt; sfb++ ) + { + set_s( &coreMsMask[sfbConf->sfbOffset[sfb]], ms_mask[k][sfb], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); + } + + IGFDecUpdateInfo( sts[0]->hIGFDec, k, ( L_frame == sts[0]->L_frame >> 1 ) && ( sts[0]->tcxonly ) ? IGF_GRID_LB_SHORT : ( sts[0]->last_core == ACELP_CORE || left_rect ) ? IGF_GRID_LB_TRAN + : IGF_GRID_LB_NORM ); + + IGFDecUpdateInfo( sts[1]->hIGFDec, k, ( L_frame == sts[1]->L_frame >> 1 ) && ( sts[1]->tcxonly ) ? IGF_GRID_LB_SHORT : ( sts[1]->last_core == ACELP_CORE || left_rect ) ? IGF_GRID_LB_TRAN + : IGF_GRID_LB_NORM ); + + if ( sts[0]->igf ) + { + igfGridIdx = IGF_GRID_LB_SHORT; + if ( !( L_frame == sts[0]->L_frame >> 1 ) && ( sts[0]->tcxonly ) ) + { + igfGridIdx = ( sts[0]->last_core == ACELP_CORE || ( left_rect && bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM; + } + + IGFDecApplyStereo( sts[0]->hIGFDec, sts[1]->hIGFDec, x[0][k], x[1][k], igfGridIdx, coreMsMask, hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS, bfi ); + } + + return; +} diff --git a/lib_dec/dec_tran.c b/lib_dec/dec_tran.c new file mode 100644 index 0000000000..7120211fb6 --- /dev/null +++ b/lib_dec/dec_tran.c @@ -0,0 +1,200 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * decod_tran() + * + * Decode transition (TC) frames + *-------------------------------------------------------------------*/ + +void decod_tran( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *pitch_buf, /* o : floating pitch values for each subframe*/ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + int16_t *unbits, /* i/o: number of unused bits */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + float *gain_buf /* o : floating pitch gain for each subframe */ +) +{ + int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ + float gain_code; /* Quantized algebraic codeebook gain */ + float norm_gain_code; /* normalized algebraic codeebook gain */ + float gain_pit = 0; /* Quantized pitch gain */ + float voice_fac; /* Voicing factor */ + float gain_inov; /* inovation gain */ + float code[L_SUBFR]; /* algebraic codevector */ + const float *p_Aq; /* pointer to lp filter coefficient */ + float *pt_pitch; /* pointer to floating pitch */ + int16_t i_subfr, i; /* tmp variables */ + int16_t position; /* TC related flag */ + float gain_preQ = 0; /* Gain of prequantizer excitation */ + float code_preQ[L_SUBFR]; /* Prequantizer excitation */ + int16_t Jopt_flag; /* flag indicating zero adaptive contribtuion */ + float norm_gain_preQ; + + gain_preQ = 0; + set_f( code_preQ, 0, L_SUBFR ); + + /*----------------------------------------------------------------* + * ACELP subframe loop + *----------------------------------------------------------------*/ + + p_Aq = Aq; + pt_pitch = pitch_buf; + Jopt_flag = 0; + norm_gain_preQ = 0.0f; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + /*------------------------------------------------------------* + * TC : subframe determination & + * adaptive/glottal part of excitation construction + *------------------------------------------------------------*/ + + transition_dec( st, L_frame, i_subfr, tc_subfr, &Jopt_flag, exc, &T0, &T0_frac, &T0_min, &T0_max, &pt_pitch, &position, bwe_exc ); + + /*-----------------------------------------------------------------* + * Transform domain contribution decoding - active frames + *-----------------------------------------------------------------*/ + + if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) + { + transf_cdbk_dec( st, 0, i_subfr, Es_pred, 0, &gain_preQ, &norm_gain_preQ, code_preQ, unbits ); + } + + /*-----------------------------------------------------------------* + * ACELP codebook search + pitch sharpening + *-----------------------------------------------------------------*/ + + inov_decode( st, st->core_brate, 0, L_frame, sharpFlag, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); + + /*-----------------------------------------------------------------* + * De-quantize the gains + * Update tilt of code: 0.0 (unvoiced) to 0.5 (voiced) + *-----------------------------------------------------------------*/ + + if ( Jopt_flag == 0 ) + { + /* 2/3-bit decoding */ + gain_dec_tc( st, i_subfr, Es_pred, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + else + { + /* 5-bit decoding */ + if ( st->core_brate > ACELP_32k ) + { + gain_dec_SQ( st, i_subfr, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + else + { + gain_dec_mless( st, L_frame, st->coder_type, i_subfr, tc_subfr, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + } + + /* update LP filtered gains for the case of frame erasures */ + lp_gain_updt( i_subfr, gain_pit, norm_gain_code + norm_gain_preQ, &st->lp_gainp, &st->lp_gainc, L_frame ); + + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*----------------------------------------------------------------------* + * Find the total excitation + *----------------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Add the ACELP pre-quantizer contribution + *-----------------------------------------------------------------*/ + + if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] += gain_preQ * code_preQ[i]; + exc[i + i_subfr] += gain_preQ * code_preQ[i]; + } + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); + + /*----------------------------------------------------------------* + * Excitation enhancements (update of total excitation signal) + *----------------------------------------------------------------*/ + + if ( st->core_brate > ACELP_32k ) + { + mvr2r( exc + i_subfr, exc2 + i_subfr, L_SUBFR ); + } + else + { + enhancer( MODE1, st->core_brate, -1, 0, st->coder_type, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); + } + + p_Aq += ( M + 1 ); + pt_pitch++; + st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; + gain_buf[i_subfr / L_SUBFR] = gain_pit; + } + + /* SC-VBR */ + st->prev_gain_pit_dec = gain_pit; + + return; +} diff --git a/lib_dec/dec_uv.c b/lib_dec/dec_uv.c new file mode 100644 index 0000000000..2839521091 --- /dev/null +++ b/lib_dec/dec_uv.c @@ -0,0 +1,168 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * decod_unvoiced() + * + * Decode unvoiced (UC) frames + *-------------------------------------------------------------------*/ + +void decod_unvoiced( + Decoder_State *st, /* i/o: decoder static memory */ + const float *Aq, /* i : LP filter coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const int16_t uc_two_stage_flag, /* i : flag indicating two-stage UC */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* o : adapt. excitation exc */ + float *exc2, /* o : adapt. excitation/total exc */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + float *gain_buf /* o : floating pitch gain for each subframe */ +) +{ + float gain_pit = 0; /* Quantized pitch gain */ + float gain_code; /* Quantized algebraic codeebook gain */ + float gain_inov; /* inovation gain */ + float norm_gain_code; /* normalized algebraic codeebook gain */ + float voice_fac; /* Voicing factor */ + float code[L_SUBFR]; /* algebraic codevector */ + int16_t i_subfr; + float *pt_pitch; + const float *p_Aq; + int16_t i; + int16_t index; + float gain_code2; + float code2[L_SUBFR]; + + if ( st->last_ppp_mode_dec == 1 || st->last_nelp_mode_dec == 1 ) + { + /* SC_VBR - reset the decoder, to avoid memory not updated issue for this unrealistic case */ + CNG_reset_dec( st, pitch_buf, voice_factors ); + } + + p_Aq = Aq; /* pointer to interpolated LPC parameters */ + pt_pitch = pitch_buf; /* pointer to the pitch buffer */ + + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + if ( !uc_two_stage_flag ) + { + /*----------------------------------------------------------------* + * Unvoiced subframe processing + *----------------------------------------------------------------*/ + + gaus_dec( st, i_subfr, code, &norm_gain_code, &st->lp_gainp, &st->lp_gainc, &gain_inov, &st->tilt_code, &voice_fac, &gain_pit, pt_pitch, exc, &gain_code, exc2 ); + } + else + { + /*----------------------------------------------------------------* + * Unvoiced subframe processing in two stages + *----------------------------------------------------------------*/ + + /* No adaptive codebook (UC) */ + set_zero( exc + i_subfr, L_SUBFR ); + + *pt_pitch = (float) L_SUBFR; + + /*--------------------------------------------------------------* + * Innovation decoding + *--------------------------------------------------------------*/ + + inov_decode( st, st->core_brate, 0, L_FRAME, 1, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); + + /*-------------------------------------------------------* + * Generate Gaussian excitation * + *-------------------------------------------------------*/ + + gaus_L2_dec( code2, st->tilt_code, p_Aq, FORMANT_SHARPENING_G1, &( st->seed_acelp ) ); + + /*-----------------------------------------------------------------* + * Gain encoding + *-----------------------------------------------------------------*/ + + index = get_next_indice( st, st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] ); + gain_dec_gacelp_uv( index, code, code2, Es_pred, L_SUBFR, &gain_pit, &gain_code, &gain_code2, &( st->past_gpit ), &norm_gain_code, &gain_inov ); + + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /* update LP filtered gains for the case of frame erasures */ + lp_gain_updt( i_subfr, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_FRAME ); + + /*-------------------------------------------------------* + * - Find the total excitation. * + *-------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc2[i + i_subfr] += gain_code2 * code2[i]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + } + + *tmp_noise = norm_gain_code; + + /*----------------------------------------------------------------* + * Excitation enhancements (update of total excitation signal) + *----------------------------------------------------------------*/ + + enhancer( MODE1, st->core_brate, uc_two_stage_flag, 0, UNVOICED, L_FRAME, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); + + voice_factors[i_subfr / L_SUBFR] = 0.0f; + + if ( st->hBWE_TD != NULL ) + { + interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); + } + + p_Aq += ( M + 1 ); + pt_pitch++; + st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; + } + + /* SC-VBR */ + st->prev_gain_pit_dec = gain_pit; + + set_f( gain_buf, 0, NB_SUBFR ); + + return; +} diff --git a/lib_dec/decision_matrix_dec.c b/lib_dec/decision_matrix_dec.c new file mode 100644 index 0000000000..348e57a3e4 --- /dev/null +++ b/lib_dec/decision_matrix_dec.c @@ -0,0 +1,563 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_dec.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * decision_matrix_dec() + * + * ACELP/HQ core selection + * Read ACELP signalling bits from the bitstream + * Set extension layers + *-----------------------------------------------------------------*/ + +void decision_matrix_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *sharpFlag, /* o : formant sharpening flag */ + int16_t *hq_core_type, /* o : HQ core type */ + int16_t *core_switching_flag /* o : ACELP->HQ switching frame flag */ +) +{ + int16_t start_idx; + int16_t ppp_nelp_mode; + int32_t ind; + int16_t nBits; + int16_t tmp; + + /* init */ + st->core = -1; + st->core_brate = 0; + st->extl = -1; + st->extl_brate = 0; + st->ppp_mode_dec = 0; + st->nelp_mode_dec = 0; + st->igf = 0; + + if ( st->total_brate > ACELP_8k00 ) + { + st->vbr_hw_BWE_disable_dec = 0; + } + + if ( st->mdct_sw == MODE2 ) + { + st->core = HQ_CORE; + } + else + { + if ( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) + { + st->core = ACELP_CORE; + st->core_brate = st->total_brate; + + if ( st->total_brate != FRAME_NO_DATA ) + { + st->cng_type = get_next_indice( st, 1 ); + + if ( st->cng_type == LP_CNG ) + { + st->L_frame = L_FRAME; + + if ( get_next_indice( st, 1 ) == 1 ) + { + st->L_frame = L_FRAME16k; + } + } + else + { + st->bwidth = get_next_indice( st, 2 ); + + if ( get_next_indice( st, 1 ) == 0 ) + { + st->L_frame = L_FRAME; + } + else + { + st->L_frame = L_FRAME16k; + } + } + } + + if ( st->output_Fs >= 32000 && st->bwidth >= SWB ) + { + st->extl = SWB_CNG; + } + + if ( st->total_brate == FRAME_NO_DATA && st->prev_bfi && !st->bfi && st->L_frame > L_FRAME16k ) + { + st->L_frame = st->last_CNG_L_frame; + } + + return; + } + + /* SC-VBR */ + else if ( st->total_brate == PPP_NELP_2k80 ) + { + st->core = ACELP_CORE; + st->core_brate = PPP_NELP_2k80; + st->L_frame = L_FRAME; + st->fscale = sr2fscale( INT_FS_12k8 ); + + if ( st->ini_frame == 0 ) + { + /* avoid switching of internal ACELP Fs in the very first frame */ + st->last_L_frame = st->L_frame; + st->last_core = st->core; + st->last_core_brate = st->core_brate; + st->last_extl = st->extl; + } + + st->vbr_hw_BWE_disable_dec = 1; + + get_next_indice( st, 1 ); + + ppp_nelp_mode = get_next_indice( st, 2 ); + + /* 0 - PPP_NB, 1 - PPP_WB, 2 - NELP_NB, 3 - NELP_WB */ + if ( ppp_nelp_mode == 0 ) + { + st->ppp_mode_dec = 1; + st->coder_type = VOICED; + st->bwidth = NB; + } + else if ( ppp_nelp_mode == 1 ) + { + st->ppp_mode_dec = 1; + st->coder_type = VOICED; + st->bwidth = WB; + } + else if ( ppp_nelp_mode == 2 ) + { + st->nelp_mode_dec = 1; + st->coder_type = UNVOICED; + st->bwidth = NB; + } + else if ( ppp_nelp_mode == 3 ) + { + st->nelp_mode_dec = 1; + st->coder_type = UNVOICED; + st->bwidth = WB; + } + + return; + } + + /*---------------------------------------------------------------------* + * ACELP/HQ core selection + *---------------------------------------------------------------------*/ + + if ( st->total_brate < ACELP_24k40 ) + { + st->core = ACELP_CORE; + } + else if ( st->total_brate >= ACELP_24k40 && st->total_brate <= ACELP_64k ) + { + /* read the ACELP/HQ core selection bit */ + tmp = get_next_indice( st, 1 ); + + if ( tmp == 0 ) + { + st->core = ACELP_CORE; + } + else + { + st->core = HQ_CORE; + } + } + } + + /*-----------------------------------------------------------------* + * Read ACELP signalling bits from the bitstream + *-----------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + start_idx = 0; + while ( acelp_sig_tbl[start_idx] != st->total_brate ) + { + start_idx++; + if ( start_idx >= MAX_ACELP_SIG ) + { + st->BER_detect = 1; + start_idx = 0; + break; + } + } + + /* skip the bitrate */ + start_idx += 1; + + /* retrieve the number of bits */ + nBits = (int16_t) acelp_sig_tbl[start_idx++]; + + start_idx += get_next_indice( st, nBits ); + if ( start_idx >= MAX_ACELP_SIG ) + { + ind = 0; + st->BER_detect = 1; + } + else + { + /* retrieve the signalling indice */ + ind = acelp_sig_tbl[start_idx]; + + /* convert signalling indice into signalling information */ + st->coder_type = ind & 0x7; + if ( st->coder_type == LR_MDCT ) + { + st->core = HQ_CORE; + st->bwidth = ( ind >> 3 ) & 0x7; + } + else + { + st->bwidth = ( ind >> 3 ) & 0x7; + *sharpFlag = ( ind >> 6 ) & 0x1; + } + } + + /* detect corrupted signalling (due to bit errors) */ + if ( ( st->BER_detect ) || + ( ind >= 1 << 7 ) || + ( st->total_brate <= ACELP_13k20 && st->bwidth == FB ) || + ( st->total_brate >= ACELP_32k && st->bwidth == NB ) || + ( st->total_brate >= ACELP_32k && !( st->coder_type == GENERIC || st->coder_type == TRANSITION || st->coder_type == INACTIVE ) ) || + ( st->total_brate < ACELP_13k20 && st->bwidth != NB && st->coder_type == LR_MDCT ) || + ( st->total_brate >= ACELP_13k20 && st->coder_type == UNVOICED ) || + ( st->total_brate >= ACELP_13k20 && st->coder_type == AUDIO && st->bwidth == NB ) ) + { + st->BER_detect = 0; + st->bfi = 1; + if ( st->ini_frame == 0 ) + { + st->core = ACELP_CORE; + st->L_frame = L_FRAME; + st->last_core = st->core; + st->last_core_brate = st->core_brate; + } + else if ( st->last_total_brate == -1 ) /* can happen in case of BER when no good frame was received before */ + { + st->coder_type = st->last_coder_type; + st->bwidth = st->last_bwidth; + st->total_brate = st->last_total_brate_ber; + if ( st->last_core == AMR_WB_CORE ) + { + st->core = ACELP_CORE; + st->codec_mode = MODE1; + } + else if ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) + { + st->core = st->last_core_bfi; + st->codec_mode = MODE2; + } + else + { + st->core = st->last_core; + st->codec_mode = MODE1; + } + st->core_brate = st->last_core_brate; + st->extl = st->last_extl; + st->extl_brate = st->total_brate - st->core_brate; + } + else + { + st->coder_type = st->last_coder_type; + st->bwidth = st->last_bwidth; + st->total_brate = st->last_total_brate; + if ( st->last_core == AMR_WB_CORE ) + { + st->core = ACELP_CORE; + st->codec_mode = MODE1; + } + else if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) + { + st->core = st->last_core; + st->codec_mode = MODE2; + } + else + { + st->core = st->last_core; + st->codec_mode = MODE1; + } + st->core_brate = st->last_core_brate; + st->extl = st->last_extl; + st->extl_brate = st->total_brate - st->core_brate; + } + return; + } + } + + /*-----------------------------------------------------------------* + * Set extension layers + *-----------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE && st->bwidth == WB && st->total_brate < ACELP_9k60 ) + { + if ( st->vbr_hw_BWE_disable_dec == 0 ) + { + st->extl = WB_BWE; + } + } + else if ( st->core == ACELP_CORE && st->bwidth == WB && st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_16k40 ) + { + /* read the WB TBE/BWE selection bit */ + if ( get_next_indice( st, 1 ) ) + { + st->extl = WB_BWE; + st->extl_brate = WB_BWE_0k35; + } + else + { + st->extl = WB_TBE; + st->extl_brate = WB_TBE_1k05; + } + } + else if ( st->core == ACELP_CORE && ( st->bwidth == SWB || st->bwidth == FB ) && st->total_brate >= ACELP_13k20 ) + { + if ( st->total_brate >= ACELP_48k ) + { + st->extl = SWB_BWE_HIGHRATE; + if ( st->bwidth == FB ) + { + st->extl = FB_BWE_HIGHRATE; + } + + st->extl_brate = SWB_BWE_16k; + } + + /* read the SWB TBE/BWE selection bit */ + else + { + tmp = get_next_indice( st, 1 ); + + if ( tmp ) + { + st->extl = SWB_BWE; + st->extl_brate = SWB_BWE_1k6; + } + else + { + st->extl = SWB_TBE; + st->extl_brate = SWB_TBE_1k6; + if ( st->total_brate >= ACELP_24k40 ) + { + st->extl_brate = SWB_TBE_2k8; + } + } + } + + /* set FB TBE and FB BWE extension layers */ + if ( st->bwidth == FB && st->total_brate >= ACELP_24k40 ) + { + if ( st->extl == SWB_BWE ) + { + st->extl = FB_BWE; + st->extl_brate = FB_BWE_1k8; + } + else if ( st->extl == SWB_TBE ) + { + st->extl = FB_TBE; + st->extl_brate = FB_TBE_3k0; + } + } + } + + /* set core bitrate */ + st->core_brate = st->total_brate - st->extl_brate; + + + /*-----------------------------------------------------------------* + * Read HQ signalling bits from the bitstream + * Set HQ core type + *-----------------------------------------------------------------*/ + + if ( st->core == HQ_CORE ) + { + if ( st->mdct_sw != MODE2 ) + { + /* skip the HQ/TCX core switching flag */ + get_next_indice_tmp( st, 1 ); + } + + /* read ACELP->HQ core switching flag */ + *core_switching_flag = get_next_indice( st, 1 ); + + if ( *core_switching_flag == 1 ) + { + st->last_L_frame_ori = st->last_L_frame; + + /* read ACELP L_frame info */ + if ( get_next_indice( st, 1 ) == 0 ) + { + st->last_L_frame = L_FRAME; + } + else + { + st->last_L_frame = L_FRAME16k; + } + } + + if ( st->mdct_sw != MODE2 ) + { + /* read/set band-width (needed for different I/O sampling rate support) */ + if ( st->total_brate > ACELP_16k40 ) + { + ind = get_next_indice( st, 2 ); + + if ( ind == 0 ) + { + st->bwidth = NB; + } + else if ( ind == 1 ) + { + st->bwidth = WB; + } + else if ( ind == 2 ) + { + st->bwidth = SWB; + } + else + { + st->bwidth = FB; + } + } + } + + /* detect bit errors in signalling */ + if ( ( ( st->total_brate >= ACELP_24k40 && st->bwidth == NB ) || + ( st->core == HQ_CORE && st->total_brate <= LRMDCT_CROSSOVER_POINT && st->bwidth == FB ) ) ) + { + st->bfi = 1; + + st->core_brate = st->total_brate; + st->extl = -1; + st->extl_brate = 0; + if ( st->last_core == AMR_WB_CORE ) + { + st->core = ACELP_CORE; + st->L_frame = L_FRAME; + st->codec_mode = MODE1; + st->last_L_frame = L_FRAME; + + if ( st->total_brate >= ACELP_16k40 ) + { + st->total_brate = ACELP_13k20; + st->core_brate = st->total_brate; + } + } + else + { + /* make sure, we are in a valid configuration wrt to bandwidth */ + st->bwidth = WB; + } + } + + /* set HQ core type */ + *hq_core_type = NORMAL_HQ_CORE; + if ( ( st->bwidth == SWB || st->bwidth == WB ) && st->total_brate <= LRMDCT_CROSSOVER_POINT ) + { + *hq_core_type = LOW_RATE_HQ_CORE; + } + else if ( st->bwidth == NB ) + { + *hq_core_type = LOW_RATE_HQ_CORE; + } + } + + /*-----------------------------------------------------------------* + * Set ACELP frame length + *-----------------------------------------------------------------*/ + + if ( st->core_brate == FRAME_NO_DATA ) + { + /* prevent "L_frame" changes in CNG segments */ + st->L_frame = st->last_L_frame; + } + else if ( st->core_brate == SID_2k40 && st->bwidth == WB && st->first_CNG && st->hTdCngDec->act_cnt2 < MIN_ACT_CNG_UPD ) + { + /* prevent "L_frame" changes in SID frame after short segment of active frames */ + st->L_frame = st->last_CNG_L_frame; + } + else if ( ( st->core_brate == SID_2k40 && st->total_brate >= ACELP_9k60 && st->bwidth == WB ) || ( st->total_brate >= ACELP_32k && st->total_brate < HQ_96k ) || ( st->total_brate == ACELP_24k40 && st->bwidth >= WB ) ) + { + st->L_frame = L_FRAME16k; + } + else + { + st->L_frame = L_FRAME; + } + + if ( st->L_frame == L_FRAME16k ) + { + st->nb_subfr = NB_SUBFR16k; + } + else + { + st->nb_subfr = NB_SUBFR; + } + + st->extl_orig = st->extl; + st->extl_brate_orig = st->extl_brate; + + if ( st->output_Fs == 8000 ) + { + st->extl = -1; + } + else if ( st->output_Fs == 16000 && st->L_frame == L_FRAME16k ) + { + st->extl = -1; + st->extl_brate = 0; + } + + if ( st->ini_frame == 0 ) + { + /* avoid switching of internal ACELP Fs in the very first frame */ + st->last_L_frame = st->L_frame; + st->last_core = st->core; + st->last_core_brate = st->core_brate; + st->last_extl = st->extl; + } + + return; +} diff --git a/lib_dec/dlpc_avq.c b/lib_dec/dlpc_avq.c new file mode 100644 index 0000000000..83a0029fb3 --- /dev/null +++ b/lib_dec/dlpc_avq.c @@ -0,0 +1,324 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * dlpc_avq() + * + * Variable bitrate multiple LPC un-quantizer + *------------------------------------------------------------------*/ + +int16_t dlpc_avq( + int16_t *index, /* i : Quantization indices */ + float *LSF_Q, /* o : Quantized LSF vectors */ + const int16_t numlpc, /* i : Number of sets of lpc */ + const int32_t sr_core /* i : internal sampling rate */ +) +{ + int16_t i, nbi, last; + int16_t *p_index, q_type; + + /* Last LPC index */ + + if ( numlpc == 1 ) + { + last = 0; + } + else + { + last = M; + } + + p_index = index; + + /* Decode last LPC */ + for ( i = 0; i < M; i++ ) + { + LSF_Q[last + i] = 0.0f; + } + + vlpc_1st_dec( p_index[0], &LSF_Q[last], sr_core ); + p_index++; + vlpc_2st_dec( &LSF_Q[last], &p_index[0], 0, sr_core ); + nbi = 2 + p_index[0] + p_index[1]; + p_index += nbi; + + /* Decode intermediate LPC (512 framing) */ + + if ( numlpc == 2 ) + { + q_type = p_index[0]; + p_index++; + + if ( q_type == 0 ) + { + + for ( i = 0; i < M; i++ ) + { + LSF_Q[i] = 0.0f; + } + vlpc_1st_dec( p_index[0], &LSF_Q[0], sr_core ); + p_index++; + vlpc_2st_dec( &LSF_Q[0], &p_index[0], 0, sr_core ); + } + else if ( q_type == 1 ) + { + for ( i = 0; i < M; i++ ) + { + LSF_Q[i] = LSF_Q[M + i]; + } + + vlpc_2st_dec( &LSF_Q[0], &p_index[0], 3, sr_core ); + } + + nbi = 2 + p_index[0] + p_index[1]; + p_index += nbi; + } + + return (int16_t) ( p_index - index ); +} + +/*------------------------------------------------------------------* + * unary_decode() + * + * + *------------------------------------------------------------------*/ + +static int16_t unary_decode( + Decoder_State *st, + int16_t *ind ) +{ + int16_t start_bit_pos; + + start_bit_pos = st->next_bit_pos; + + /* Index bits */ + *ind = 0; + + while ( get_next_indice_1( st ) && !st->BER_detect ) + { + *ind += 1; + } + + if ( *ind != 0 ) + { + *ind += 1; + } + + return st->next_bit_pos - start_bit_pos; +} + + +/*------------------------------------------------------------------* + * pack4bits() + * + * + *------------------------------------------------------------------*/ + +static int16_t pack4bits( + int16_t nbits, + Decoder_State *st, + int16_t *prm ) +{ + int16_t i; + + i = 0; + + while ( nbits > 4 ) + { + prm[i] = get_next_indice( st, 4 ); + nbits -= 4; + i++; + } + prm[i] = get_next_indice( st, nbits ); + i++; + + return ( i ); +} + + +/*------------------------------------------------------------------* + * decode_lpc_avq() + * + * + *------------------------------------------------------------------*/ + +int16_t decode_lpc_avq( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t numlpc, /* i : Number of sets of lpc */ + int16_t *param_lpc, /* o : lpc parameters */ + const int16_t ch, /* i : channel */ + const int16_t element_mode, /* i : element mode */ + const int16_t sns_low_br_mode /* i : SNS low-bitrate mode */ +) +{ + int16_t k, j; + int16_t nb, qn1, qn2, avqBits, q_type; + int16_t start_bit_pos; + int16_t stereo_mode = 0; + + j = 0; + start_bit_pos = st->next_bit_pos; + + for ( k = 0; k < numlpc; k++ ) + { + /* Decode quantizer type */ + + if ( k == 0 ) + { + q_type = 0; + nb = 0; + } + else + { + nb = 1; + q_type = get_next_indice( st, nb ); + param_lpc[j++] = q_type; + } + + if ( element_mode == IVAS_CPE_MDCT && k == 0 ) + { + if ( ch == 0 ) + { + stereo_mode = param_lpc[j]; + } + else + { + stereo_mode = ch; + } + param_lpc[j++] = stereo_mode; + } + + /* Decode quantization indices */ + + if ( q_type == 0 ) + { + /* Absolute quantizer with 1st stage stochastic codebook */ + if ( element_mode == IVAS_CPE_MDCT ) + { + if ( stereo_mode != 3 ) + { + param_lpc[j++] = get_next_indice( st, SNS_ABS_QUANT_BITS ); + } + else + { + param_lpc[j++] = get_next_indice( st, 1 ) - 2; + } + } + else + { + param_lpc[j++] = get_next_indice( st, LPC_ABS_QUANT_BITS ); + } + } + + /* + * 2nd stage decoding is skipped if: + * - we are in low bitrate mode and no joint SNS coding is used + * - OR the side-SNS-is-zero flag is set for joint SNS + */ + if ( element_mode != IVAS_CPE_MDCT || ( !( sns_low_br_mode && ( stereo_mode == 0 || stereo_mode == 1 ) ) && !( q_type == 0 && param_lpc[j - 1] == -2 ) ) ) + { + /* 2 bits to specify Q2,Q3,Q4,ext */ + qn1 = 2 + get_next_indice( st, 2 ); + qn2 = 2 + get_next_indice( st, 2 ); + + /* Unary code */ + /* Q5 = 0, Q6=10, Q0=110, Q7=1110, ... */ + + if ( qn1 > 4 ) + { + nb = unary_decode( st, &qn1 ); + + if ( nb == 1 ) + qn1 += 5; + else if ( nb == 2 ) + qn1 += 4; + else if ( nb == 3 ) + qn1 = 0; + else + qn1 += 3; + } + + if ( qn2 > 4 ) + { + nb = unary_decode( st, &qn2 ); + + if ( nb == 1 ) + qn2 += 5; + else if ( nb == 2 ) + qn2 += 4; + else if ( nb == 3 ) + qn2 = 0; + else + qn2 += 3; + } + + /* check for potential bit errors */ + if ( qn1 > NB_SPHERE || qn2 > NB_SPHERE ) + { + qn1 = 0; + qn2 = 0; + st->BER_detect = 1; + } + + param_lpc[j] = qn1; + j++; + param_lpc[j] = qn2; + j++; + + /* Decode Split-by-2 algebraic VQ */ + avqBits = 4 * qn1; + pack4bits( avqBits, st, ¶m_lpc[j] ); + j += qn1; + + avqBits = 4 * qn2; + pack4bits( avqBits, st, ¶m_lpc[j] ); + j += qn2; + } + else + { + param_lpc[j++] = 0; + param_lpc[j++] = 0; + } + } + + return st->next_bit_pos - start_bit_pos; +} diff --git a/lib_dec/dlpc_stoch.c b/lib_dec/dlpc_stoch.c new file mode 100644 index 0000000000..59ec142c0a --- /dev/null +++ b/lib_dec/dlpc_stoch.c @@ -0,0 +1,137 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * lpc_unquantize() + * + * + *------------------------------------------------------------------*/ + +void lpc_unquantize( + Decoder_State *st, + float *lsf, + float *lsp, + int16_t *param_lpc, + float *lspmid, + float *lsfmid, + const int16_t coder_type, + int16_t *LSF_Q_prediction /* o : LSF prediction mode */ +) +{ + int16_t nb_indices, k; + + mvr2r( st->lsf_old, &lsf[0], M ); + mvr2r( st->lsp_old, &lsp[0], M ); + + nb_indices = 0; + if ( st->lpcQuantization == 0 ) + { + nb_indices = dlpc_avq( param_lpc, &lsf[M], st->numlpc, st->sr_core ); + for ( k = 0; k < st->numlpc; k++ ) + { + lsf2lsp( &lsf[( k + 1 ) * M], &lsp[( k + 1 ) * M], M, st->sr_core ); + } + } + else if ( st->lpcQuantization == 1 ) + { + if ( st->sr_core == INT_FS_16k && coder_type == UNVOICED ) + { + lsf_end_dec( st, GENERIC, 1 - st->narrowBand /* st->bwidth */, ENDLSF_NBITS, &lsf[M], param_lpc, LSF_Q_prediction, &nb_indices +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + NULL +#endif + ); + } + else + { + if ( st->core == TCX_20_CORE ) + { + lsf_end_dec( st, AUDIO, 1 - st->narrowBand /* st->bwidth */, ENDLSF_NBITS, &lsf[M], param_lpc, LSF_Q_prediction, &nb_indices +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + NULL +#endif + ); + } + else + { + lsf_end_dec( st, coder_type, 1 - st->narrowBand /* st->bwidth */, ENDLSF_NBITS, &lsf[M], param_lpc, LSF_Q_prediction, &nb_indices +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + NULL +#endif + ); + } + } + + lsf2lsp( &lsf[M], &lsp[M], M, st->sr_core ); + } + else + { + assert( 0 ); + } + + st->seed_acelp = 0; + for ( k = nb_indices - 1; k >= 0; k-- ) + { + /* rightshift before *seed_acelp+param_lpc[i] to avoid overflows*/ + st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[k] ) * 31821L + 13849L ); + } + + /* Decoded mid-frame lsf */ + if ( st->lpcQuantization && st->acelp_cfg.midLpc && st->core == ACELP_CORE && st->rate_switching_reset == 0 ) + { + midlsf_dec( &lsf[0], &lsf[M], param_lpc[nb_indices], lsfmid, M, coder_type, &( st->mid_lsf_int ), st->prev_bfi, st->safety_net ); + + reorder_lsf( lsfmid, LSF_GAP_MID, M, st->sr_core ); + lsf2lsp( lsfmid, lspmid, M, st->sr_core ); + } + + + return; +} diff --git a/lib_dec/er_dec_acelp.c b/lib_dec/er_dec_acelp.c new file mode 100644 index 0000000000..4e0d5c9b48 --- /dev/null +++ b/lib_dec/er_dec_acelp.c @@ -0,0 +1,726 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * con_acelp() + * + * Concealment function for ACELP and TD-TCX + *--------------------------------------------------------------------*/ + +void con_acelp( + float A[], /* i : coefficients NxAz[M+1] */ + const int16_t coder_type, /* i : ACELP coder type */ + float synth[], /* i/o: synthesis */ + int16_t *pT, /* o : pitch for all subframe */ + float *pgainT, /* o : pitch gain for all subfr */ + float stab_fac, /* i : stability of isf */ + Decoder_State *st, /* i/o: coder memory state */ + float pitch_buffer[], /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +) +{ + int16_t i, i_subfr, L_frame, T0; + float tmp_deemph; + float mem_syn[M], mem_syn2[M], mem[M], *syn; + float *noise_buf; + float *exc, *harmonic_exc_buf, buf[L_EXC_MEM_DEC + M + L_FRAME16k + L_FRAME16k / 2], *p_A; + float pitch_buf[NB_SUBFR16k]; + float alpha = 0.0f; + float step, gain, gainCNG, gain_inov, ftmp; + float *pt_exc, tmp_tc, predPitchLag; + float pc = 0.f; + int16_t extrapolationFailed, tmpSeed, Tc; + float *pt1_exc; + float *w = st->hTcxCfg->tcx_mdct_window; + int16_t W1, W2, j; + int16_t l_fir_fer = L_FIR_FER; + float lpFiltAdapt[3]; + float hp_filt[3]; + int16_t nSubframes; + float exc_unv[L_FRAME16k + L_FRAME16k / 2]; + float syn_unv[L_FRAME16k + L_FRAME16k / 2]; + float mem_syn_unv[M]; + float gain_lpc[NB_SUBFR16k]; + float h1[L_SUBFR + 1]; + float gainSynthDeemph; + float tmp = 0.f; + int16_t fUseExtrapolatedPitch; + + /* Framing parameters */ + + L_frame = st->L_frame; + + fUseExtrapolatedPitch = 0; + extrapolationFailed = 1; + + /*------------------------------------------------------------------------* + * Initialize buffers * + *------------------------------------------------------------------------*/ + + /* set ACELP synthesis memory */ + mvr2r( st->mem_syn2, mem_syn, M ); + + /* set excitation memory*/ + harmonic_exc_buf = buf + M; + exc = harmonic_exc_buf + L_EXC_MEM_DEC; + mvr2r( st->old_exc, harmonic_exc_buf, L_EXC_MEM_DEC ); + exc[L_frame] = 0.0f; + + /*------------------------------------------------------------------------* + * PLC: [ACELP:Extrapolate Pitch Lag] + *------------------------------------------------------------------------*/ + + if ( st->flagGuidedAcelp == 1 ) + { + T0 = st->guidedT0; + } + + pitch_pred_linear_fit( st->nbLostCmpt, st->last_good, st->old_pitch_buf, &st->old_fpitch, &predPitchLag, st->pit_min, st->pit_max, st->mem_pitch_gain, 0, st->plc_use_future_lag, &extrapolationFailed, st->nb_subfr ); + T0 = (int16_t) ( predPitchLag + 0.5f ); + + if ( extrapolationFailed ) + { + /*------------------------------------------------------------------------* + * - Construct adaptive codebook from side information * + *------------------------------------------------------------------------*/ + + if ( st->flagGuidedAcelp == 0 ) + { + nSubframes = 0; + } + else + { + nSubframes = 2; + /* Construct adaptive codebook with T0, T0_frac, T0_res, gain_pit for 2 sub-frames */ + for ( i = 0; i < 2 * L_SUBFR; i++ ) + { + exc[i] = exc[i - st->guidedT0]; + } + } + } + else + { + nSubframes = 0; + } + + + if ( nSubframes > 0 ) + { + tmp_tc = (float) st->guidedT0; /* take the transmit pitch*/ + } + else + { + tmp_tc = st->old_fpitch; /* take the previous frame last pitch*/ + } + + /* PLC: [ACELP: Fade-out] + * PLC: calculate damping factor */ + alpha = Damping_fact( coder_type, st->nbLostCmpt, st->last_good, stab_fac, &( st->lp_gainp ), 0 ); + + if ( st->nbLostCmpt == 1 ) + { + st->cummulative_damping = 1.0f; + } + else + { + st->cummulative_damping *= alpha; + } + + /*-----------------------------------------------------------------* + * PLC: [ACELP: adaptive codebook] + * PLC: Construct the harmonic part of excitation + *-----------------------------------------------------------------*/ + + if ( st->last_good >= UNVOICED_TRANSITION ) + { + + /*---------------------------------------------------------------* + * Last pitch cycle of the previous frame is repeatedly copied. * + *---------------------------------------------------------------*/ + + Tc = (int16_t) ( tmp_tc + 0.5f ); + + if ( ( T0 > 0 ) && ( T0 != Tc ) && ( abs( T0 - Tc ) < 0.15f * Tc ) && extrapolationFailed == 0 ) + { + fUseExtrapolatedPitch = 1; + } + + if ( st->enableGplc ) + { + pt_exc = &exc[nSubframes * L_SUBFR]; + } + else + { + pt_exc = exc; + } + pt1_exc = pt_exc - Tc; + + if ( fUseExtrapolatedPitch != 0 ) + { + /* Required because later pt1_exc[1] used in filtering points to exc[0]. To make it safe also for GPL pt_exc is used instead of exc */ + pt_exc[0] = 0; + pt_exc = harmonic_exc_buf; + assert( pt_exc < pt1_exc - 1 ); + } + + if ( st->nbLostCmpt == 1 ) + { + /* pitch cycle is first low-pass filtered */ + /*get filter coefficients*/ + genPlcFiltBWAdap( st->sr_core, &lpFiltAdapt[0], 0, st->cummulative_damping ); + for ( i = 0; i < Tc; i++ ) + { + *pt_exc++ = ( lpFiltAdapt[0] * pt1_exc[-1] + lpFiltAdapt[1] * pt1_exc[0] + lpFiltAdapt[2] * pt1_exc[1] ); + pt1_exc++; + } + } + else + { + /* copy the first pitch cycle without low-pass filtering */ + for ( i = 0; i < Tc; i++ ) + { + *pt_exc++ = *pt1_exc++; + } + } + + if ( fUseExtrapolatedPitch != 0 ) + { + pt1_exc = harmonic_exc_buf; + } + + for ( i = 0; i < L_frame + ( 1 - nSubframes ) * L_SUBFR - Tc; i++ ) + { + *pt_exc++ = *pt1_exc++; + } + + /*-------------------------------------------------------* + * PLC: [ACELP: adaptive codebook] + * PLC: Resync pulse positions. + *-------------------------------------------------------*/ + + if ( nSubframes > 0 ) + { + pitch_buf[0] = (float) st->guidedT0; + pitch_buf[1] = (float) st->guidedT0; + } + + if ( nSubframes > 0 ) + { + pitch_buf[3] = pitch_buf[2] = pitch_buf[1]; /* do not resync on second half of frame */ + if ( st->nb_subfr == 5 ) + { + /* for guidedacelp cases and nSubframes=2, set pitch_buf[4] to avoid memory_access issues in post_decoder() */ + pitch_buf[4] = pitch_buf[3]; + } + } + else + { + if ( fUseExtrapolatedPitch != 0 ) + { + get_subframe_pitch( st->nb_subfr, st->old_fpitch, predPitchLag, pitch_buf ); + + PulseResynchronization( harmonic_exc_buf, exc, L_frame, st->nb_subfr, st->old_fpitch, predPitchLag ); + } + else + { + set_f( pitch_buf, st->old_fpitch, st->nb_subfr ); + } + } + + /*------------------------------------------------------------* + * PLC: [ACELP: adaptive codebook] + * PLC: Create the harmonic part needed for the overlap-add. + *------------------------------------------------------------*/ + + pt_exc = exc + L_frame; + pt1_exc = pt_exc - ( ( T0 == 0 ) ? Tc : T0 ); + + for ( i = 0; i < L_frame / 2; i++ ) + { + *pt_exc++ = *pt1_exc++; + } + + /*-------------------------------------------------------* + * PLC: [ACELP: adaptive codebook] + * PLC: update the floating point pitch for consecutive loss + *-------------------------------------------------------*/ + + if ( fUseExtrapolatedPitch != 0 ) + { + + if ( st->flagGuidedAcelp == 1 ) + { + st->old_fpitch = (float) T0; + } + else + { + st->old_fpitch = predPitchLag; + } + } + + /*-------------------------------------------------------* + * PLC: [ACELP: adaptive BPF] + * PLC: Accommodate the BPF + *-------------------------------------------------------*/ + + st->bpf_gain_param = 3; /*full BPF*/ + + /*-------------------------------------------------------* + * PLC: [ACELP: adaptive codebook] + * PLC: Calculate the initial gain and fade out step. + *-------------------------------------------------------*/ + + pc = (float) fabs( pitch_buf[3] + pitch_buf[2] - pitch_buf[1] - pitch_buf[0] ) * 256.0f / (float) L_frame; + + if ( ( st->last_good <= UNVOICED_TRANSITION ) && ( coder_type == GENERIC ) && ( pc > 6 ) ) + { + gain = 0.0f; + st->lp_gainp = 0.0f; + } + else + { + gain = 1.0f; /* start-of-the-frame gain */ + st->lp_gainp = alpha; + } + + step = ( 1.0f / L_frame ) * ( gain - st->lp_gainp ); + + /*-------------------------------------------------------* + * PLC: [ACELP: Fade-out] + * Apply fade out + *-------------------------------------------------------*/ + + for ( i_subfr = 0; i_subfr < st->nb_subfr; i_subfr++ ) + { + pgainT[i_subfr] = gain; + + for ( i = i_subfr * L_SUBFR; i < ( i_subfr + 1 ) * L_SUBFR; i++ ) + { + exc[i] *= gain; + gain -= step; + } + } + + for ( ; i < L_frame + ( L_frame / 2 ); i++ ) + { + exc[i] *= gain; + gain -= step; + } + + for ( i = 0; i < st->nb_subfr; i++ ) + { + pT[i] = (int16_t) ( pitch_buf[i] + 0.5f ); + pitch_buffer[i] = pitch_buf[i]; + } + + /* update old exc without random part*/ + mvr2r( harmonic_exc_buf + L_frame, st->old_exc, L_EXC_MEM_DEC ); + } + else + { + /* No harmonic part */ + set_zero( &exc[0], L_frame + L_frame / 2 ); + + for ( i = 0; i < st->nb_subfr; i++ ) + { + pitch_buf[i] = st->pit_max; + pgainT[i] = 0.f; + pT[i] = L_SUBFR; + pitch_buffer[i] = L_SUBFR; + } + + st->bpf_gain_param = 0; /*no BPF*/ + } + + /*-----------------------------------------------------------------* + * Construct the random part of excitation + *-----------------------------------------------------------------*/ + noise_buf = buf; + tmpSeed = st->seed_acelp; + + for ( i = 0; i < L_frame + l_fir_fer - 1; i++ ) + { + noise_buf[i] = (float) own_random( &tmpSeed ); + } + st->seed_acelp = tmpSeed; + + for ( ; i < L_frame + ( L_frame / 2 ) + l_fir_fer - 1; i++ ) + { + noise_buf[i] = (float) own_random( &tmpSeed ); + } + + /*get filter coefficients*/ + genPlcFiltBWAdap( st->sr_core, &hp_filt[0], 1, st->cummulative_damping ); + + /* PLC: [ACELP: Fade-out] + * PLC: retrieve background level */ + tmp = 1.0f; + gainSynthDeemph = getLevelSynDeemph( &( tmp ), A, L_SUBFR, st->preemph_fac, L_frame / L_SUBFR ); + gainCNG = st->cngTDLevel / gainSynthDeemph; + + gain = st->lp_gainc; /* start-of-the-frame gain */ + + ftmp = 2.0f * gain; + + if ( gainCNG > ftmp ) + { + gainCNG = ftmp; + } + + st->lp_gainc = alpha * st->lp_gainc + ( 1.0f - alpha ) * gainCNG; /* end-of-the-frame gain */ + + if ( ( st->last_good == UNVOICED_TRANSITION ) && ( coder_type == GENERIC ) ) + { + st->lp_gainc = gainCNG; + } + + highPassFiltering( st->last_good, L_frame + l_fir_fer / 2, noise_buf, hp_filt, l_fir_fer ); + + /* Find energy normalization factor */ + pt_exc = noise_buf + l_fir_fer / 2; + gain_inov = 1.0f / (float) sqrt( dotp( pt_exc, pt_exc, L_frame ) / L_frame + 0.01f ); + + /* PLC: [ACELP: Fade-out] + * PLC: Linearly attenuate the gain through the frame */ + step = ( 1.0f / L_frame ) * ( gain - st->lp_gainc ); + + if ( ( st->last_good == UNVOICED_CLAS ) && ( coder_type != UNVOICED ) ) /* Attenuate somewhat on unstable unvoiced */ + { + gain_inov *= 0.8f; + } + + if ( st->last_good >= UNVOICED_TRANSITION ) + { + float tilt_code; + + tilt_code = (float) ( 0.10f * ( 1.0f + st->voice_fac ) ); + gain_inov *= ( 1.f - tilt_code ); + } + + pt_exc = noise_buf; + + /* non-causal ringing of the FIR filter */ + + for ( i = 0; i < l_fir_fer / 2; i++ ) + { + *pt_exc++ *= ( gain_inov * gain ); + } + + /* Actual filtered random part of excitation */ + + for ( i = 0; i < L_frame; i++ ) + { + *pt_exc++ *= ( gain_inov * gain ); + gain -= step; + } + + for ( i = 0; i < ( L_frame / 2 ) + l_fir_fer / 2; i++ ) + { + *pt_exc++ *= ( gain_inov * gain ); + } + + st->past_gcode = gain; + + if ( st->last_good < UNVOICED_TRANSITION ) + { + mvr2r( noise_buf + l_fir_fer / 2, exc, L_frame + L_frame / 2 ); + mvr2r( harmonic_exc_buf + L_frame, st->old_exc, L_EXC_MEM_DEC ); + mvr2r( exc, exc_unv, L_frame + ( L_frame / 2 ) ); /* Update exc_unv */ + } + else + { + mvr2r( noise_buf + l_fir_fer / 2, exc_unv, L_frame + ( L_frame / 2 ) ); /* Update exc_unv */ + } + + /* Compute total excitation in noisebuffer to save memories */ + if ( st->last_good >= UNVOICED_TRANSITION ) + { + for ( i = 0; i < L_frame + 1; i++ ) + { + noise_buf[i] = exc[i] + exc_unv[i]; + } + } + else + { + noise_buf = exc_unv; + } + + if ( st->hBWE_TD != NULL ) + { + if ( L_frame == L_FRAME ) + { + interp_code_5over2( noise_buf, bwe_exc, L_frame ); + set_f( voice_factors, st->last_voice_factor, NB_SUBFR ); + } + else + { + interp_code_4over2( noise_buf, bwe_exc, L_frame ); + set_f( voice_factors, st->last_voice_factor, NB_SUBFR16k ); + } + } + + /*----------------------------------------------------------* + * - compute the synthesis speech * + *----------------------------------------------------------*/ + + /* Init syn buffer */ + syn = buf + M; + mvr2r( st->mem_syn2, buf, M ); + + if ( st->nbLostCmpt == 1 ) + { + + if ( st->last_good < UNVOICED_TRANSITION ) + { + mvr2r( st->mem_syn2, mem_syn_unv, M ); + } + else + { + set_zero( mem_syn_unv, M ); + } + } + else + { + mvr2r( st->mem_syn_unv_back, mem_syn_unv, M ); + } + + /* voiced synth */ + + if ( st->last_good >= UNVOICED_TRANSITION ) + { + p_A = A; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + tmp = 0; + set_zero( h1, L_SUBFR + 1 ); + set_zero( mem, M ); + h1[0] = 1.0f; + syn_filt( p_A, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ + deemph( h1, st->preemph_fac, L_SUBFR, &tmp ); /* impulse response of deemph */ + /* impulse response level = gain introduced by synthesis+deemphasis */ + gain_lpc[i_subfr / L_SUBFR] = 1.f / (float) sqrt( dotp( h1, h1, L_SUBFR ) ); + p_A += ( M + 1 ); + } + + j = 0; + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc[i_subfr + i] *= st->last_gain_syn_deemph * gain_lpc[j]; + } + j++; + } + + for ( i = L_frame; i < L_frame + L_frame / 2; i++ ) + { + exc[i] *= st->last_gain_syn_deemph * gain_lpc[3]; + } + p_A = A; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + syn_filt( p_A, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, mem_syn, 1 ); + p_A += ( M + 1 ); + } + + mvr2r( mem_syn, mem_syn2, M ); + + /* synthesize ola*/ + syn_filt( p_A - ( M + 1 ), M, &exc[L_frame], &syn[L_frame], ( L_frame / 2 ), mem_syn2, 0 ); + } + + /* unvoiced synth */ + tmp = 0; + p_A = st->Aq_cng; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + set_zero( h1, L_SUBFR + 1 ); + set_zero( mem, M ); + h1[0] = 1.0f; + syn_filt( p_A, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ + deemph( h1, st->preemph_fac, L_SUBFR, &tmp ); /* impulse response of deemph */ + /* impulse response level = gain introduced by synthesis+deemphasis */ + gain_lpc[i_subfr / L_SUBFR] = 1.f / (float) sqrt( dotp( h1, h1, L_SUBFR ) ); + p_A += ( M + 1 ); + } + + j = 0; + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc_unv[i_subfr + i] *= st->last_gain_syn_deemph * gain_lpc[j]; + } + j++; + } + + for ( i = L_frame; i < L_frame + L_frame / 2; i++ ) + { + exc_unv[i] *= st->last_gain_syn_deemph * gain_lpc[j - 1]; + } + p_A = st->Aq_cng; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + syn_filt( p_A, M, &exc_unv[i_subfr], &syn_unv[i_subfr], L_SUBFR, mem_syn_unv, 1 ); + p_A += ( M + 1 ); + } + + mvr2r( mem_syn_unv, st->mem_syn_unv_back, M ); + + if ( st->last_good < UNVOICED_TRANSITION ) + { + mvr2r( mem_syn_unv, mem_syn, M ); + } + + /* unvoiced for ola */ + syn_filt( p_A - ( M + 1 ), M, &exc_unv[i_subfr], &syn_unv[i_subfr], ( L_frame / 2 ), mem_syn_unv, 0 ); + + /* add separate synthesis buffers */ + if ( st->last_good >= UNVOICED_TRANSITION ) + { + for ( i = 0; i < L_frame; i++ ) + { + syn[i] += syn_unv[i]; + } + } + else + { + mvr2r( syn_unv, syn, L_frame + L_frame / 2 ); + } + + + /* update buffer for the classification */ + FEC_clas_estim( syn, pitch_buf, st->L_frame, coder_type, st->codec_mode, st->mem_syn_clas_estim, &( st->clas_dec ), &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, st->narrowBand, 0, 1, st->preemph_fac, st->tcxonly, st->last_core_brate, -1 ); + + /* Update Pitch Lag memory */ + mvr2r( &st->old_pitch_buf[L_frame / L_SUBFR], st->old_pitch_buf, L_frame / L_SUBFR ); + mvr2r( pitch_buf, &st->old_pitch_buf[L_frame / L_SUBFR], L_frame / L_SUBFR ); + + /*updating enr_old parameters*/ + fer_energy( L_frame, st->last_good, syn, tmp_tc, &( st->enr_old ), 1 ); + + /* update ACELP synthesis memory */ + mvr2r( mem_syn, st->mem_syn2, M ); + mvr2r( syn + L_frame - L_SYN_MEM, st->mem_syn_r, L_SYN_MEM ); + + /* Deemphasis and output synth */ + tmp_deemph = st->syn[M]; + deemph( syn, st->preemph_fac, L_frame + L_frame / 2, &tmp_deemph ); + + mvr2r( syn, synth, L_frame ); + mvr2r( syn + L_frame - L_frame / 2, st->hTcxDec->old_syn_Overl, L_frame / 2 ); + + + /* save last half frame if next frame is TCX */ + mvr2r( syn + L_frame, st->hTcxDec->syn_Overl_TDAC, L_frame / 2 ); + mvr2r( syn + L_frame - M - 1, st->syn, 1 + M ); + + /* update old_Aq */ + mvr2r( p_A - ( M + 1 ), st->old_Aq_12_8, M + 1 ); + + mvr2r( syn + L_frame, st->hTcxDec->syn_Overl, L_frame / 2 ); + + W1 = st->hTcxCfg->tcx_mdct_window_length; + W2 = st->hTcxCfg->tcx_mdct_window_length / 2; + + st->hTcxCfg->tcx_curr_overlap_mode = FULL_OVERLAP; + { + int16_t n = (int16_t) ( (float) L_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + + mvr2r( syn + L_frame - n, st->hHQ_core->old_outLB, L_frame - n ); + + for ( i = 0; i < W1; i++ ) + { + st->hHQ_core->old_outLB[i + n] *= w[W1 - 1 - i] * w[W1 - 1 - i]; + } + set_zero( &st->hHQ_core->old_outLB[W1 + n], n ); + } + + /* create aliasing and windowing */ + + for ( i = 0; i < W1; i++ ) + { + buf[i] = st->hTcxDec->syn_Overl_TDAC[i] * w[W1 - 1 - i]; + } + + for ( i = 0; i < W2; i++ ) + { + st->hTcxDec->syn_Overl_TDAC[i] = buf[i] + buf[W1 - 1 - i]; /* A-D */ + } + + for ( i = 0; i < W2; i++ ) + { + st->hTcxDec->syn_Overl_TDAC[W2 + i] = buf[W2 + i] + buf[W1 - 1 - W2 - i]; /* B-C */ + } + + for ( i = 0; i < W1; i++ ) + { + st->hTcxDec->syn_Overl_TDAC[i] *= w[W1 - 1 - i]; + } + + /* update memory for full band */ + lerp( st->hTcxDec->syn_Overl_TDAC, st->hTcxDec->syn_Overl_TDACFB, st->hTcxDec->L_frameTCX / 2, L_frame / 2 ); + lerp( st->hTcxDec->syn_Overl, st->hTcxDec->syn_OverlFB, st->hTcxDec->L_frameTCX / 2, L_frame / 2 ); + lerp( st->hHQ_core->old_outLB, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX, L_frame ); + + /* copy total excitation exc2 as 16kHz for acelp mode1 decoding */ + if ( st->hWIDec != NULL ) + { + lerp( exc, st->hWIDec->old_exc2, L_EXC_MEM, L_frame ); + lerp( syn, st->hWIDec->old_syn2, L_EXC_MEM, L_frame ); + } + st->bfi_pitch = pitch_buf[st->nb_subfr - 1]; + st->bfi_pitch_frame = L_frame; + + return; +} diff --git a/lib_dec/er_dec_tcx.c b/lib_dec/er_dec_tcx.c new file mode 100644 index 0000000000..2fb4a8979a --- /dev/null +++ b/lib_dec/er_dec_tcx.c @@ -0,0 +1,682 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_dec.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * con_tcx() + * + * + *-----------------------------------------------------------------*/ + +void con_tcx( + Decoder_State *st, /* i/o: coder memory state */ + float synth[] /* i/o: synth[] */ + , + const float coh, /* i : coherence of stereo signal */ + int16_t *noise_seed, /* i/o: noise seed for stereo */ + const int16_t only_left /* i : TD-PLC only in left channel */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const float *A_cng +#endif +) +{ + int16_t i, n, L_frame, L_subfr, fLowPassFilter, T0; + int16_t offset = 0; + int16_t mem_syn_r_size_old, mem_syn_r_size_new; + float *noise; + float mem_syn[M], *syn; + float *exc, buf[OLD_EXC_SIZE_DEC + L_FRAME_MAX + L_FRAME_MAX / NB_SUBFR + 1 + L_FRAME_MAX / 2]; + float pre_emph_buf; + float pitch_buf[NB_SUBFR16k], hp_filt[L_FIR_FER2]; + float predPitchLag, alpha = 0.0f; + float tmp_deemph, step, gain, gainCNG, gain_inov, ftmp; + float *pt_exc, *pt1_exc; + int16_t Tc, tmpSeed; + int16_t fUseExtrapolatedPitch = 0; + float *ana_window; + float r[M + 1], A_local[M + 1], mem; + float *w; + int16_t W1, W2; + int16_t extrapolationFailed = 1; + float gainSynthDeemph; + float tmp = 0.f; + float old_pitch_buf[2 * NB_SUBFR16k + 2]; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + /* Framing parameters */ + L_frame = hTcxDec->L_frameTCX; + L_subfr = hTcxDec->L_frameTCX / st->nb_subfr; + w = st->hTcxCfg->tcx_mdct_windowFB; + W1 = st->hTcxCfg->tcx_mdct_window_lengthFB; + W2 = st->hTcxCfg->tcx_mdct_window_lengthFB / 2; + + /* take the previous frame last pitch */ + Tc = (int16_t) ( st->old_fpitchFB + 0.5f ); + + set_zero( buf, OLD_EXC_SIZE_DEC + L_FRAME_MAX + L_FRAME_MAX / NB_SUBFR + 1 + L_FRAME_MAX / 2 ); + + v_multc( st->old_pitch_buf, (float) L_frame / st->L_frame, old_pitch_buf, 2 * NB_SUBFR16k + 2 ); + + /* set excitation memory*/ + exc = buf + OLD_EXC_SIZE_DEC; + + tmp_deemph = synth[-1]; + pre_emph_buf = synth[-1]; + + if ( st->nbLostCmpt == 1 || hTcxDec->tcxConceal_recalc_exc ) + { + /* apply pre-emphasis to the signal */ + mem = synth[-( L_frame / 2 + hTcxDec->pit_max_TCX + 2 * M ) - 1]; + + preemph( &synth[-( L_frame / 2 + hTcxDec->pit_max_TCX + 2 * M )], st->preemph_fac, L_frame / 2 + hTcxDec->pit_max_TCX + 2 * M, &mem ); + st->lp_gainc = 0.0f; + + st->lp_gainp = get_gain( synth - 2 * L_subfr, synth - 2 * L_subfr - Tc, 2 * L_subfr, NULL ); + + if ( st->lp_gainp < 0.0f ) + { + st->lp_gainp = 0.0f; + } + + if ( st->lp_gainp > 1.0f ) + { + st->lp_gainp = 1.0f; + } + ana_window = buf; + ham_cos_window( ana_window, 3 * L_frame / 4, L_frame / 4 ); + + /* Autocorrelation */ + autocorr( &( synth[-L_frame - 1] ), r, M, L_frame, ana_window, 0, 0, 0 ); + + /* Lag windowing */ + lag_wind( r, M, st->output_Fs, LAGW_STRONG ); + + /* Levinson Durbin */ + lev_dur( A_local, r, M, NULL ); + + /* copy for multiple frame loss */ + mvr2r( A_local, st->old_Aq_12_8, M + 1 ); + + /* Residu */ + assert( ( 2 * L_subfr + Tc + 1 + M ) <= st->hTcxDec->old_synth_lenFB ); + residu( A_local, M, &( synth[-( 2 * L_subfr + Tc + 1 + M )] ), &( exc[-( 2 * L_subfr + Tc + 1 + M )] ), 2 * L_subfr + Tc + 1 + M ); + } + else + { + /* apply pre-emphasis to the signal */ + mem = synth[-L_frame - 1]; + + preemph( &synth[-L_frame], st->preemph_fac, L_frame, &mem ); + mvr2r( st->old_Aq_12_8, A_local, M + 1 ); + offset = L_frame / 2; + + if ( st->last_good >= UNVOICED_TRANSITION ) + { + i = max( Tc - L_frame / 2, 0 ); + mvr2r( st->hTcxDec->old_excFB, &( exc[-i] ), offset + i ); + } + else + { + mvr2r( st->hTcxDec->old_excFB, &( exc[-2 * L_subfr] ), 2 * L_subfr + offset ); + } + } + + /*-----------------------------------------------------------------* + * PLC: Construct the harmonic part of excitation + *-----------------------------------------------------------------*/ + + if ( st->last_good != UNVOICED_CLAS && !( ( st->last_good == UNVOICED_TRANSITION ) && ( st->core_ext_mode == GENERIC ) ) ) + { + if ( st->nbLostCmpt == 1 || hTcxDec->tcxConceal_recalc_exc ) + { + st->lp_gainc = 0.0f; + + for ( i = 0; i < 2 * L_subfr; i++ ) + { + st->lp_gainc += ( exc[i - 2 * L_subfr] - st->lp_gainp * exc[i - 2 * L_subfr - Tc] ) * ( exc[i - 2 * L_subfr] - st->lp_gainp * exc[i - 2 * L_subfr - Tc] ); + } + st->lp_gainc = (float) sqrt( st->lp_gainc / ( 2.0f * L_subfr ) ); + } + if ( ( st->nbLostCmpt == 1 ) && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 && st->use_partial_copy ) + { + predPitchLag = ( hTcxLtpDec->tcxltp_pitch_int + hTcxLtpDec->tcxltp_pitch_fr / (float) st->pit_res_max ) * (float) hTcxDec->L_frameTCX / (float) st->L_frame; + T0 = (int16_t) ( predPitchLag + 0.5f ); + + if ( ( T0 > 0 ) && ( T0 != Tc ) && ( (float) abs( T0 - Tc ) < 0.15f * Tc ) ) + { + fUseExtrapolatedPitch = 1; + } + } + else + { + pitch_pred_linear_fit( st->nbLostCmpt, st->last_good, old_pitch_buf, &( st->old_fpitchFB ), &predPitchLag, hTcxDec->pit_min_TCX, hTcxDec->pit_max_TCX, st->mem_pitch_gain, st->output_Fs > 25600, st->plc_use_future_lag, &extrapolationFailed, st->nb_subfr ); + + T0 = (int16_t) ( predPitchLag + 0.5f ); + + if ( ( T0 > 0 ) && ( T0 != Tc ) && ( (float) abs( T0 - Tc ) < 0.15f * Tc ) && extrapolationFailed == 0 ) + { + fUseExtrapolatedPitch = 1; + } + } + + fLowPassFilter = 0; + pt_exc = exc + offset; + + pt1_exc = pt_exc - Tc; + + if ( fUseExtrapolatedPitch != 0 ) + { + pt_exc = buf; + } + + if ( st->stab_fac < 1 && st->nbLostCmpt == 1 ) + { + /* pitch cycle is first low-pass filtered */ + for ( i = 0; i < Tc; i++ ) + { + if ( st->output_Fs <= 16000 ) + { + *pt_exc++ = ( 0.0053f * pt1_exc[-5] + 0.0000f * pt1_exc[-4] + -0.0440f * pt1_exc[-3] + 0.0000f * pt1_exc[-2] + 0.2637f * pt1_exc[-1] + 0.5500f * pt1_exc[0] + 0.2637f * pt1_exc[1] + 0.0000f * pt1_exc[2] + -0.0440f * pt1_exc[3] + 0.0000f * pt1_exc[4] + 0.0053f * pt1_exc[5] ); + } + else /*(st->output_Fs >= 32000)*/ + { + *pt_exc++ = ( -0.0053f * pt1_exc[-5] + -0.0037f * pt1_exc[-4] + -0.0140f * pt1_exc[-3] + 0.0180f * pt1_exc[-2] + 0.2668f * pt1_exc[-1] + 0.4991f * pt1_exc[0] + 0.2668f * pt1_exc[1] + 0.0180f * pt1_exc[2] + -0.0140f * pt1_exc[3] + -0.0037f * pt1_exc[4] + -0.0053f * pt1_exc[5] ); + } + pt1_exc++; + } + fLowPassFilter = 1; + } + else + { + /* copy the first pitch cycle without low-pass filtering */ + for ( i = 0; i < Tc; i++ ) + { + *pt_exc++ = *pt1_exc++; + } + fLowPassFilter = 1; + } + + if ( fUseExtrapolatedPitch != 0 ) + { + pt1_exc = buf; + } + + for ( i = 0; i < L_frame - fLowPassFilter * Tc + L_subfr; i++ ) + { + *pt_exc++ = *pt1_exc++; + } + + if ( fUseExtrapolatedPitch != 0 ) + { + get_subframe_pitch( st->nb_subfr, st->old_fpitch, predPitchLag * st->L_frame / L_frame, pitch_buf ); + + PulseResynchronization( buf, exc, L_frame, st->nb_subfr, st->old_fpitchFB, predPitchLag ); + } + else + { + set_f( pitch_buf, st->old_fpitch, st->nb_subfr ); + } + + if ( st->nbLostCmpt == 1 ) + { + pt_exc = exc + L_frame; + pt1_exc = pt_exc - ( ( T0 == 0 ) ? Tc : T0 ); + + for ( i = 0; i < L_frame / 2; i++ ) + { + *pt_exc++ = *pt1_exc++; + } + } + + if ( fUseExtrapolatedPitch != 0 ) + { + st->old_fpitchFB = predPitchLag; + } + st->bpf_gain_param = 0; + + /* PLC: calculate damping factor */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + alpha = 1.0f; + if ( st->element_mode == IVAS_CPE_MDCT && st->nbLostCmpt >= MDCT_ST_PLC_FADEOUT_START_FRAME ) + { + alpha = Damping_fact( st->core_ext_mode, st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_START_FRAME, st->last_good, st->stab_fac, &( st->lp_gainp ), 0 ); + } + else if ( st->element_mode != IVAS_CPE_MDCT ) + { + alpha = Damping_fact( st->core_ext_mode, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), 0 ); + } +#else + alpha = Damping_fact( st->core_ext_mode, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), 0 ); +#endif + + if ( st->nbLostCmpt == 1 ) + { + st->cummulative_damping = 1; + } + else + { + st->cummulative_damping *= alpha; + } + + gain = 1.0f; + if ( st->rf_frame_type == RF_TCXTD1 && st->use_partial_copy == 1 ) + { + gain = 0.5f; + } + + step = ( 1.0f / ( L_frame + ( L_frame / 2 ) ) ) * ( gain - alpha ); + + /* PLC: Apply fade out */ + for ( i = offset; i < L_frame + ( L_frame / 2 ); i++ ) + { + exc[i] *= gain; + gain -= step; + } + + offset = max( ( (int16_t) ( st->old_fpitchFB + 0.5f ) ) - L_frame / 2, 0 ); + mvr2r( exc + L_frame - offset, st->hTcxDec->old_excFB, L_frame / 2 + offset ); + + /* copy old_exc as 16kHz for acelp decoding */ + if ( st->nbLostCmpt == 1 ) + { + lerp( exc - L_frame / 2, st->old_exc, L_EXC_MEM_DEC, L_frame + L_frame / 2 ); + } + else + { + mvr2r( st->old_exc + L_FRAME16k, st->old_exc, L_FRAME16k / 2 ); + lerp( exc, st->old_exc + L_FRAME16k / 2, L_FRAME16k, L_frame ); + } + } + else + { + /* No harmonic part */ + set_zero( &exc[0], L_frame + L_frame / 2 ); + + if ( st->nbLostCmpt == 1 ) + { + st->lp_gainc = 0.0f; + + for ( i = 0; i < 2 * L_subfr; i++ ) + { + st->lp_gainc += ( exc[i - 2 * L_subfr] ) * ( exc[i - 2 * L_subfr] ); + } + st->lp_gainc = (float) sqrt( st->lp_gainc / ( 2.0f * L_subfr ) ); + } + + set_f( pitch_buf, (float) L_SUBFR, st->nb_subfr ); + + /* PLC: calculate damping factor */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + alpha = 1.0f; + if ( st->element_mode == IVAS_CPE_MDCT && st->nbLostCmpt >= MDCT_ST_PLC_FADEOUT_START_FRAME ) + { + alpha = Damping_fact( st->core_ext_mode, st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_START_FRAME, st->last_good, st->stab_fac, &( st->lp_gainp ), 0 ); + } + else if ( st->element_mode != IVAS_CPE_MDCT ) + { + alpha = Damping_fact( st->core_ext_mode, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), 0 ); + } +#else + alpha = Damping_fact( st->core_ext_mode, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), 0 ); +#endif + } + + /*-----------------------------------------------------------------* + * Construct the random part of excitation + *-----------------------------------------------------------------*/ + + if ( coh != -1.f ) + { + int16_t tmpSeed1; + float alpha_coh; + float random1, random2; + + tmpSeed1 = *noise_seed; + noise = buf; + + alpha_coh = sqrtf( ( 1 - coh ) / ( 1 + coh ) ); + if ( st->idchan == 1 ) + { + alpha_coh = -alpha_coh; + } + + for ( i = 0; i < L_frame + L_FIR_FER2 - 1; i++ ) + { + random1 = (float) own_random( &tmpSeed1 ); + random2 = (float) own_random( &tmpSeed1 ); + noise[i] = random1 + alpha_coh * random2; + } + + if ( st->idchan == 1 || only_left ) + { + *noise_seed = tmpSeed1; + } + + for ( ; i < L_frame + ( L_frame / 2 ) + 2 * L_FIR_FER2; i++ ) + { + random1 = (float) own_random( &tmpSeed1 ); + random2 = (float) own_random( &tmpSeed1 ); + noise[i] = random1 + alpha_coh * random2; + } + } + else + { + tmpSeed = st->seed_acelp; + noise = buf; + + for ( i = 0; i < L_frame + L_FIR_FER2 - 1; i++ ) + { + noise[i] = (float) own_random( &tmpSeed ); + } + st->seed_acelp = tmpSeed; + + for ( ; i < L_frame + ( L_frame / 2 ) + 2 * L_FIR_FER2; i++ ) + { + noise[i] = (float) own_random( &tmpSeed ); + } + } + + if ( st->last_good == VOICED_CLAS || st->last_good == ONSET ) + { + mem = noise[0]; + preemph( &noise[1], st->output_Fs <= 16000 ? 0.2f : 0.6f, L_frame + ( L_frame / 2 ) + L_FIR_FER2, &mem ); + } + + /* high rate filter tuning */ + if ( st->output_Fs <= 16000 ) + { + for ( i = 0; i < L_FIR_FER2; i++ ) + { + hp_filt[i] = h_high3_16[i]; + } + } + else /*(st->output_Fs==32000)*/ + { + for ( i = 0; i < L_FIR_FER2; i++ ) + { + hp_filt[i] = h_high3_32[i]; + } + } + + if ( st->nbLostCmpt == 1 ) + { + highPassFiltering( st->last_good, L_frame + L_frame / 2 + L_FIR_FER2, noise, hp_filt, L_FIR_FER2 ); + } + else + { + if ( st->last_good > UNVOICED_TRANSITION ) + { + for ( i = 0; i < L_frame + L_frame / 2 + L_FIR_FER2; i++ ) + { + noise[i] = ( 1 - st->cummulative_damping ) * noise[i] + st->cummulative_damping * dotp( &noise[i], hp_filt, L_FIR_FER2 ); + } + } + } + + /* PLC: [TCX: Fade-out] retrieve background level */ + tmp = 1.0f; +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( A_cng != NULL ) + { + gainSynthDeemph = getLevelSynDeemph( &( tmp ), A_cng, L_frame / 4, st->preemph_fac, 1 ) / 4.f; + } + else + { + gainSynthDeemph = getLevelSynDeemph( &( tmp ), A_local, L_frame / 4, st->preemph_fac, 1 ); + } +#else + gainSynthDeemph = getLevelSynDeemph( &( tmp ), A_local, L_frame / 4, st->preemph_fac, 1 ); +#endif + if ( st->tcxonly ) + { + gainCNG = hTcxDec->CngLevelBackgroundTrace_bfi / gainSynthDeemph; + } + else + { + gainCNG = st->cngTDLevel / gainSynthDeemph; + } + gain = st->lp_gainc; /* start-of-the-frame gain */ + + if ( st->rf_frame_type == RF_TCXTD1 && st->use_partial_copy == 1 ) + { + gain *= 0.7f; + } + + ftmp = 2.0f * gain; + + if ( gainCNG > ftmp ) + { + gainCNG = ftmp; + } + + st->lp_gainc = alpha * st->lp_gainc + ( 1.0f - alpha ) * gainCNG; /* end-of-the-frame gain */ + + /* PLC: [TCX: Fade-out] Linearly attenuate the gain through the frame */ + step = ( 1.0f / L_frame ) * ( gain - st->lp_gainc ); + pt_exc = noise + L_FIR_FER2 / 2; + + gain_inov = 1.0f / (float) sqrt( dotp( pt_exc, pt_exc, L_frame ) / L_frame + 0.01f ); /* normalize energy */ + + if ( ( st->last_good == UNVOICED_CLAS ) && ( st->core_ext_mode != UNVOICED ) ) + { + gain_inov *= 0.8f; + } + else if ( !( ( st->last_good == UNVOICED_CLAS ) || ( st->last_good == UNVOICED_TRANSITION ) ) ) + { + gain_inov *= ( 1.1f - 0.75f * st->lp_gainp ); + } + st->lp_gainp = alpha; + pt_exc = noise; /* non-causal ringing of the FIR filter */ + + for ( i = 0; i < L_FIR_FER2 / 2; i++ ) + { + *pt_exc++ *= ( gain_inov * gain ); + } + + for ( i = 0; i < L_frame + L_FIR_FER2 / 2; i++ ) /* Actual filtered random part of excitation */ + { + *pt_exc++ *= ( gain_inov * gain ); + gain -= step; + } + + for ( i = 0; i < ( L_frame / 2 ); i++ ) /* causal ringing of the FIR filter */ + { + *pt_exc++ *= ( gain_inov * gain ); + } + + /*-----------------------------------------------------------------* + * Construct the total excitation + *-----------------------------------------------------------------*/ + + if ( st->last_good >= UNVOICED_TRANSITION ) + { + for ( i = 0; i < ( L_frame + L_frame / 2 ); i++ ) + { + exc[i] += noise[i + ( L_FIR_FER2 / 2 )]; + } + } + else + { + mvr2r( noise + L_FIR_FER2 / 2, exc, L_frame + L_frame / 2 ); + mvr2r( exc + L_frame - 2 * L_subfr, st->hTcxDec->old_excFB, 2 * L_subfr + L_frame / 2 ); + + /* copy old_exc as 16kHz for acelp decoding */ + if ( st->nbLostCmpt == 1 ) + { + lerp( exc, st->old_exc, L_EXC_MEM_DEC, L_frame + L_frame / 2 ); + } + else + { + mvr2r( st->old_exc + L_FRAME16k, st->old_exc, L_FRAME16k / 2 ); + lerp( exc, st->old_exc + L_FRAME16k / 2, L_FRAME16k, L_frame ); + } + } + + /* Update Pitch Lag memory */ + mvr2r( &st->old_pitch_buf[st->nb_subfr], st->old_pitch_buf, st->nb_subfr ); + mvr2r( pitch_buf, &st->old_pitch_buf[st->nb_subfr], st->nb_subfr ); + + /*----------------------------------------------------------* + * - compute the synthesis speech * + *----------------------------------------------------------*/ + + syn = buf + M; + mvr2r( synth - M, buf, M ); + mvr2r( buf, mem_syn, M ); + + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( A_cng != NULL ) + { + if ( ( st->nbLostCmpt == 1 && st->idchan == 0 ) || ( st->nbLostCmpt == 2 && st->idchan == 1 ) ) + { + float lsp_cng[M]; + + lpc_from_spectrum( st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->startBand, st->hFdCngDec->hFdCngCom->stopFFTbin, 0.f ); + + a2lsp_stab( st->hFdCngDec->hFdCngCom->A_cng, lsp_cng, st->lspold_cng ); + mvr2r( lsp_cng, st->lspold_cng, M ); + } + + if ( alpha != 1.0f ) + { + float lsp_local[M]; + float lsp_fade[M]; + float alpha_inv; + + wmops_sub_start( "Fade LSPs" ); + alpha_inv = 1.0f - alpha; + + a2lsp_stab( A_local, lsp_local, lsp_local ); + + for ( i = 0; i < M; i++ ) + { + lsp_fade[i] = alpha * lsp_local[i] + alpha_inv * st->lspold_cng[i]; + } + + lsp2a_stab( lsp_fade, A_local, M ); + wmops_sub_end(); + } + } +#endif + + syn_filt( A_local, M, &exc[0], &syn[0], L_frame + ( L_frame / 2 ), mem_syn, 1 ); + + n = (int16_t) ( (float) L_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + + /* update ACELP synthesis memory */ + mem_syn_r_size_old = (int16_t) ( 1.25 * L_frame / 20.f ); + + /* copy mem_syn as 16kHz */ + mem_syn_r_size_new = (int16_t) ( 1.25 * L_FRAME16k / 20.f ); + mvr2r( syn + L_frame - L_SYN_MEM, st->mem_syn_r, L_SYN_MEM ); + lerp( st->mem_syn_r + L_SYN_MEM - mem_syn_r_size_old, st->mem_syn_r + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + mvr2r( st->mem_syn_r + L_SYN_MEM - M, st->mem_syn2, M ); + + /* Deemphasis and output synth and ZIR */ + deemph( syn, st->preemph_fac, L_frame + L_frame / 2, &tmp_deemph ); + mvr2r( syn + L_frame - M - 1, st->syn, 1 + M ); + + + lerp( syn + L_frame - L_frame / 2, st->hTcxDec->old_syn_Overl, st->L_frame / 2, L_frame / 2 ); + mvr2r( syn + L_frame - n, st->hHQ_core->old_out, L_frame - n ); + + for ( i = 0; i < W1; i++ ) + { + st->hHQ_core->old_out[i + n] *= w[W1 - 1 - i] * w[W1 - 1 - i]; + } + set_zero( &st->hHQ_core->old_out[W1 + n], n ); + + mvr2r( syn, synth, L_frame ); + + mvr2r( syn + L_frame, st->hTcxDec->syn_OverlFB, L_frame / 2 ); + + /* copy total excitation exc2 as 16kHz for ACELP MODE1 decoding */ + if ( st->hWIDec != NULL ) + { + lerp( exc, st->hWIDec->old_exc2, L_EXC_MEM, L_frame ); + lerp( syn, st->hWIDec->old_syn2, L_EXC_MEM, L_frame ); + } + st->bfi_pitch = pitch_buf[st->nb_subfr - 1]; + st->bfi_pitch_frame = st->L_frame; + + /* create aliasing and windowing need for transition to TCX10/5 */ + mvr2r( syn + L_frame, st->hTcxDec->syn_Overl_TDACFB, L_frame / 2 ); + + for ( i = 0; i < W1; i++ ) + { + buf[i] = st->hTcxDec->syn_Overl_TDACFB[i] * w[W1 - 1 - i]; + } + + for ( i = 0; i < W2; i++ ) + { + st->hTcxDec->syn_Overl_TDACFB[i] = buf[i] + buf[W1 - 1 - i]; /* A-D */ + } + + for ( i = 0; i < W2; i++ ) + { + st->hTcxDec->syn_Overl_TDACFB[W2 + i] = buf[W2 + i] + buf[W1 - 1 - W2 - i]; /* B-C */ + } + + for ( i = 0; i < W1; i++ ) + { + st->hTcxDec->syn_Overl_TDACFB[i] *= w[W1 - 1 - i]; + } + + st->hTcxCfg->tcx_curr_overlap_mode = FULL_OVERLAP; + synth[-1] = pre_emph_buf; + + /* update memory for low band */ + lerp( st->hTcxDec->syn_OverlFB, st->hTcxDec->syn_Overl, st->L_frame / 2, L_frame / 2 ); + lerp( st->hTcxDec->syn_Overl_TDACFB, st->hTcxDec->syn_Overl_TDAC, st->L_frame / 2, L_frame / 2 ); + lerp( st->hHQ_core->old_out, st->hHQ_core->old_outLB, st->L_frame, L_frame ); + + st->old_enr_LP = enr_1_Az( A_local, L_SUBFR ); + + return; +} diff --git a/lib_dec/er_scale_syn.c b/lib_dec/er_scale_syn.c new file mode 100644 index 0000000000..1ae7f57104 --- /dev/null +++ b/lib_dec/er_scale_syn.c @@ -0,0 +1,140 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + + +/*----------------------------------------------------------------------------------* + * Damping_fact() + * + * Estimate damping factor + *----------------------------------------------------------------------------------*/ + +float Damping_fact( + const int16_t coder_type, + const int16_t nbLostCmpt, + int16_t last_good, + float stab_fac, + float *lp_gainp, + const int16_t core ) +{ + float alpha, gain; + + if ( core == ACELP_CORE ) + { + alpha = ALPHA_VT; /* rapid convergence to 0 */ + if ( ( coder_type == UNVOICED ) && ( nbLostCmpt <= 3 ) ) /* Clear unvoiced last good frame */ + { + alpha = ALPHA_UU; + } + else if ( last_good == UNVOICED_CLAS ) + { + if ( nbLostCmpt == 1 ) + { + /* If stable, do not decrease the energy, pitch gain = 0 */ + alpha = stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; /* [0.8, 1.0] */ + } + else if ( nbLostCmpt == 2 ) + { + alpha = ALPHA_U * 1.5f; /* 0.6 */ + } + else + { + alpha = ALPHA_U; /* 0.4 go rapidly to CNG gain, pitch gain = 0 */ + } + } + else if ( last_good == UNVOICED_TRANSITION ) + { + alpha = ALPHA_UT; + } + else if ( ( last_good == ONSET ) && ( nbLostCmpt <= 3 ) && ( coder_type == GENERIC ) ) + { + alpha = 0.8f; + } + else if ( ( ( last_good == VOICED_CLAS ) || ( last_good == ONSET ) ) && ( nbLostCmpt <= 3 ) ) + { + alpha = ALPHA_V; /* constant for the first 3 erased frames */ + } + if ( last_good >= VOICED_CLAS ) + { + if ( nbLostCmpt == 1 ) /* if first erased frame in a block, reset harmonic gain */ + { + gain = (float) sqrt( *lp_gainp ); /* move pitch gain towards 1 for voiced to remove energy fluctuations */ + + if ( gain > 0.98f ) + { + gain = 0.98f; + } + else if ( gain < 0.85f ) + { + gain = 0.85f; + } + alpha *= gain; + } + else if ( nbLostCmpt == 2 ) + { + alpha = ( 0.6f + 0.35f * stab_fac ) * *lp_gainp; + } + else + { + *lp_gainp *= ( 0.7f + 0.2f * stab_fac ); + alpha = *lp_gainp; + } + } + } + else + { + if ( nbLostCmpt < 2 ) + { + alpha = ( 0.7f + 0.3f * stab_fac ); + } + else if ( nbLostCmpt == 2 ) + { + alpha = ( 0.45f + 0.4f * stab_fac ); + } + else + { + alpha = 0.35f + 0.4f * stab_fac; + } + } + + return alpha; +} diff --git a/lib_dec/er_sync_exc.c b/lib_dec/er_sync_exc.c new file mode 100644 index 0000000000..3a66e83129 --- /dev/null +++ b/lib_dec/er_sync_exc.c @@ -0,0 +1,335 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *--------------------------------------------------------------------*/ + +#define NB_PULSES_MAX 15 + + +/*-------------------------------------------------------------------* + * GetMinimumPosition() + * + * Get the location of the minimum energy in the given signal. + *--------------------------------------------------------------------*/ + +/*! r: Index of the position of the minimum energy, that is the position i where filter(x[i-filterLength/2],...,x[i+(filterLength-filterLength/2)-1]) is at maximum. */ +static int16_t GetMinimumPosition( + const float *x, /* i : input signal */ + const int16_t length, /* i : length of the filter length used for the energy calculation */ + int16_t filterLength /* i : length of the filter length used for the energy calculation */ +) +{ + int16_t iMinEnergyPos, center, i; + float energy; + + filterLength = min( filterLength, length ); + center = filterLength / 2; + iMinEnergyPos = center; + if ( filterLength > 0 ) + { + energy = 0; + center += 1; /* To avoid adding 1 in the loop */ + for ( i = 0; i < length - filterLength; i++ ) + { + energy -= x[i] * x[i]; + energy += x[i + filterLength] * x[i + filterLength]; + if ( energy < 0 ) + { + energy = 0; + iMinEnergyPos = i + center; + } + } + } + + return iMinEnergyPos; +} + + +static void AddSamples( + const float *old_exc, + float *new_exc, + const int16_t L_frame, + const int16_t n_samples_to_add, + const int16_t min_pos[], + const int16_t points_by_pos[], + const int16_t nb_min ) +{ + float *pt_dest; + const float *pt_src; + int16_t last_min_pos, i, j; + + pt_dest = new_exc; + pt_src = old_exc; + last_min_pos = 0; + for ( i = 0; i < nb_min; i++ ) + { + float ftmp; + + /* Copy section */ + for ( j = min_pos[i] - last_min_pos; j > 0; j-- ) + { + *pt_dest++ = *pt_src++; + } + + /* Add some samples */ + ftmp = -( *pt_src / 20 ); + for ( j = 0; j < points_by_pos[i]; j++ ) + { + *pt_dest++ = ftmp; + ftmp = -ftmp; + } + + /* Prepare for the next loop iteration */ + last_min_pos = min_pos[i]; + } + + /* Copy remaining length */ + for ( j = L_frame - n_samples_to_add - last_min_pos; j > 0; j-- ) + { + *pt_dest++ = *pt_src++; + } + + return; +} + + +static void RemoveSamples( + const float *old_exc, + float *new_exc, + const int16_t L_frame, + const int16_t n_samples_to_add, + const int16_t min_pos[], + const int16_t points_by_pos[], + const int16_t nb_min ) +{ + float *pt_dest; + const float *pt_src; + int16_t last_min_pos, i, j; + + pt_dest = new_exc + L_frame; + last_min_pos = L_frame - n_samples_to_add; + for ( i = nb_min - 1; i >= 0; i-- ) + { + /* Compute len to copy */ + /* Copy section, removing some samples */ + pt_src = old_exc + last_min_pos; + for ( j = last_min_pos - ( min_pos[i] + points_by_pos[i] ); j > 0; j-- ) + { + *--pt_dest = *--pt_src; + } + + /* Prepare for the next loop iteration */ + last_min_pos = min_pos[i]; + } + + /* Copy remaining length */ + pt_src = old_exc + last_min_pos; + for ( j = last_min_pos; j > 0; j-- ) + { + *--pt_dest = *--pt_src; + } + + return; +} + + +/*-------------------------------------------------------------------* + * PulseResynchronization() + * + * Resynchronize glottal pulse positions of the signal in src_exc and store it in dst_exc + *--------------------------------------------------------------------*/ + +void PulseResynchronization( + const float *src_exc, /* i : Input excitation buffer */ + float *dst_exc, /* o : output excitation buffer */ + const int16_t nFrameLength, /* i : frame length */ + const int16_t nSubframes, /* i : Number of subframes */ + const float pitchStart, /* i : Pitch at the end of the last frame */ + const float pitchEnd /* i : Pitch at the end of the current frame */ +) +{ + int16_t T0, i, k; + float pitchDelta, samplesDelta, perCycleDeltaDelta, cycleDelta, freqStart, fractionalLeft, absPitchDiff; + int16_t roundedPitchStart, nSamplesDelta, nSamplesDeltaRemain, iMinPos1, iMinPos[NB_PULSES_MAX + 1], iDeltaSamples[NB_PULSES_MAX + 1], maxDeltaSamples, roundedCycleDelta; + + assert( ( nFrameLength > 0 ) && ( nFrameLength > pitchStart ) && ( nSubframes > 1 ) && ( nSubframes <= 5 ) && ( nFrameLength % nSubframes == 0 ) && ( pitchStart > 0 ) && ( pitchEnd > 0 ) && ( pitchEnd / pitchStart > 1 - 2.0f / ( nSubframes + 1 ) ) && ( src_exc != NULL ) && ( dst_exc != NULL ) && ( src_exc < dst_exc ) ); + + pitchDelta = ( pitchEnd - pitchStart ) / nSubframes; + roundedPitchStart = (int16_t) ( pitchStart + 0.5f ); + freqStart = 1.0f / roundedPitchStart; + + /* Calculate number of samples to be removed (if negative) or added (if positive) */ + samplesDelta = 0.5f * pitchDelta * nFrameLength * ( nSubframes + 1 ) * freqStart; + samplesDelta -= nFrameLength * ( 1.0f - pitchStart * freqStart ); + + /* To have enough samples in the buffer of length nFrameLength*(nSubframes+1)/nSubframes, pitchEnd/pitchEnd must be bigger than (nSubframes-1)/(nSubframes+1)=1-2/(nSubframes+1) */ + /* Thus nSubframes must be bigger than 1 */ + nSamplesDelta = (int16_t) floor( samplesDelta + 0.5f ); + nSamplesDeltaRemain = (int16_t) abs( nSamplesDelta ); + + /* Find the location of the glottal pulse */ + T0 = maximumAbs( src_exc, roundedPitchStart, NULL ); + + /* Get the index of the last pulse in the resynchronized frame */ + k = (int16_t) ceil( ( nFrameLength - nSamplesDelta - T0 ) * freqStart - 1 ); + if ( ( k >= 0 ) && ( k + 1 <= NB_PULSES_MAX ) ) + { + absPitchDiff = (float) fabs( roundedPitchStart - pitchEnd ); + + /* Calculate the delta of the samples to be added/removed between consecutive cycles */ + perCycleDeltaDelta = ( absPitchDiff * ( nFrameLength - samplesDelta ) - (float) fabs( samplesDelta ) * roundedPitchStart ) / ( ( k + 1 ) * ( T0 + 0.5f * k * roundedPitchStart ) ); + + /* Calculate the integer number of samples to be added/removed in each pitch cycle */ + cycleDelta = max( 0, ( absPitchDiff - ( k + 1 ) * perCycleDeltaDelta ) * T0 * freqStart ); + roundedCycleDelta = (int16_t) ( cycleDelta ); + iDeltaSamples[0] = roundedCycleDelta; + fractionalLeft = cycleDelta - roundedCycleDelta; + nSamplesDeltaRemain -= roundedCycleDelta; + for ( i = 1; i <= k; i++ ) + { + cycleDelta = ( absPitchDiff - ( k + 1 - i ) * perCycleDeltaDelta ) + fractionalLeft; + cycleDelta = max( 0, cycleDelta ); + + /* Make sure that the number of samples increases */ + if ( roundedCycleDelta > cycleDelta ) + { + iDeltaSamples[i] = roundedCycleDelta; + roundedCycleDelta = (int16_t) ( cycleDelta ); + iDeltaSamples[i - 1] = roundedCycleDelta; + } + else + { + roundedCycleDelta = (int16_t) ( cycleDelta ); + iDeltaSamples[i] = roundedCycleDelta; + } + fractionalLeft = cycleDelta - roundedCycleDelta; + nSamplesDeltaRemain -= roundedCycleDelta; + } + + iDeltaSamples[k + 1] = max( 0, nSamplesDeltaRemain ); + maxDeltaSamples = max( iDeltaSamples[k], iDeltaSamples[k + 1] ); + + /* Find the location of the minimum energy between the first two pulses */ + iMinPos1 = T0 + GetMinimumPosition( src_exc + T0, min( roundedPitchStart, ( nSubframes + 1 ) * nFrameLength / nSubframes - T0 ), maxDeltaSamples ); + if ( nSamplesDelta < 0 ) + { + /* Find the location of the minimum energy before the first pulse */ + if ( iMinPos1 > roundedPitchStart + iDeltaSamples[0] / 2 ) + { + iMinPos[0] = iMinPos1 - roundedPitchStart - iDeltaSamples[0] / 2; + } + else + { + iMinPos[0] = GetMinimumPosition( src_exc, T0, iDeltaSamples[0] ) - iDeltaSamples[0] / 2; + } + + /* Find the location of the minimum energy between the pulses */ + for ( i = 1; i <= k; i++ ) + { + iMinPos[i] = iMinPos1 + ( i - 1 ) * roundedPitchStart - iDeltaSamples[i] / 2; + } + + /* Find the location of the minimum energy after the last pulse */ + if ( iMinPos1 + k * roundedPitchStart + iDeltaSamples[k + 1] - iDeltaSamples[k + 1] / 2 < nFrameLength - nSamplesDelta ) + { + iMinPos[k + 1] = iMinPos1 + k * roundedPitchStart - iDeltaSamples[k + 1] / 2; + } + else + { + iMinPos[k + 1] = T0 + k * roundedPitchStart + GetMinimumPosition( src_exc + T0 + k * roundedPitchStart, nFrameLength - nSamplesDelta - ( T0 + k * roundedPitchStart ), iDeltaSamples[k + 1] ) - iDeltaSamples[k + 1] / 2; + } + + if ( iMinPos[k + 1] + iDeltaSamples[k + 1] > nFrameLength - nSamplesDelta ) + { + iDeltaSamples[k] += iMinPos[k + 1] + iDeltaSamples[k + 1] - ( nFrameLength - nSamplesDelta ); + iDeltaSamples[k + 1] = nFrameLength - nSamplesDelta - iMinPos[k + 1]; + } + + /* Remove samples at the given positions */ + RemoveSamples( src_exc, dst_exc, nFrameLength, nSamplesDelta, iMinPos, iDeltaSamples, k + 2 ); + } + else + { + /* Find the location of the minimum energy before the first pulse */ + if ( iMinPos1 > roundedPitchStart ) + { + iMinPos[0] = iMinPos1 - roundedPitchStart; + } + else + { + iMinPos[0] = GetMinimumPosition( src_exc, T0, iDeltaSamples[0] ); + } + + /* Find the location of the minimum energy between the pulses */ + for ( i = 1; i <= k; i++ ) + { + iMinPos[i] = iMinPos1; + iMinPos1 += roundedPitchStart; + } + + /* Find the location of the minimum energy after the last pulse */ + if ( iMinPos1 < nFrameLength - nSamplesDelta ) + { + iMinPos[k + 1] = iMinPos1; + } + else + { + iMinPos[k + 1] = T0 + k * roundedPitchStart + GetMinimumPosition( src_exc + T0 + k * roundedPitchStart, nFrameLength - nSamplesDelta - ( T0 + k * roundedPitchStart ), iDeltaSamples[k + 1] ); + } + + if ( iMinPos[k + 1] + iDeltaSamples[k + 1] > nFrameLength - nSamplesDelta ) + { + iDeltaSamples[k] += iMinPos[k + 1] + iDeltaSamples[k + 1] - ( nFrameLength - nSamplesDelta ); + iDeltaSamples[k + 1] = nFrameLength - nSamplesDelta - iMinPos[k + 1]; + } + + /* Add samples at the given positions */ + AddSamples( src_exc, dst_exc, nFrameLength, nSamplesDelta, iMinPos, iDeltaSamples, k + 2 ); + } + } + + return; +} diff --git a/lib_dec/er_util.c b/lib_dec/er_util.c new file mode 100644 index 0000000000..f907781c29 --- /dev/null +++ b/lib_dec/er_util.c @@ -0,0 +1,350 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "cnst.h" +#include "stat_com.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * minimumStatistics() + * + * + *---------------------------------------------------------------------*/ + +void minimumStatistics( + float *noiseLevelMemory, + int16_t *noiseLevelIndex, + int16_t *currLevelIndex, + float *noiseEstimate, + float *lastFrameLevel, + float currentFrameLevel, + const float minLev, + const int16_t buffSize ) +{ + float aOpt, f; + int16_t p, i; + + if ( currentFrameLevel < minLev ) + { + currentFrameLevel = minLev; + } + /* compute optimal factor aOpt for recursive smoothing of frame minima */ + if ( *lastFrameLevel >= *noiseEstimate ) + { + aOpt = *noiseEstimate / *lastFrameLevel; + } + else + { + aOpt = *lastFrameLevel / *noiseEstimate; + } + aOpt *= aOpt; + *lastFrameLevel = currentFrameLevel; + /* recursively compute smoothed frame minima using optimal factor aOpt */ + f = currentFrameLevel * ( 1.0f - aOpt ); + f += aOpt * noiseLevelMemory[( *currLevelIndex ? *currLevelIndex : buffSize ) - 1]; + /* if current frame min is a new local min, set index to current index */ + p = *noiseLevelIndex; + if ( noiseLevelMemory[p] >= f ) + { + noiseLevelMemory[*currLevelIndex] = f; + p = *currLevelIndex; + } + else + { + noiseLevelMemory[*currLevelIndex] = f; + /* current min is not a new min, so check if min must be re-searched */ + if ( p != *currLevelIndex ) + { + f = noiseLevelMemory[p]; /* min is still in memory, so return it */ + } + else + { + /* p == currLevelIndex; min was removed from memory, re-search min */ + for ( i = *currLevelIndex + 1; i < buffSize; i++ ) + { + if ( f >= noiseLevelMemory[i] ) + { + f = noiseLevelMemory[i]; + p = i; + } + } + for ( i = 0; i <= *currLevelIndex; i++ ) + { + if ( f >= noiseLevelMemory[i] ) + { + f = noiseLevelMemory[i]; + p = i; + } + } + } + } + /* update local-minimum-value index and current circular-buffer index */ + *noiseLevelIndex = p; + p = *currLevelIndex + 1; + *currLevelIndex = ( p == buffSize ) ? 0 : p; + + *noiseEstimate = f; + + return; +} + +/*---------------------------------------------------------------------* + * getLevelSynDeemph() + * + * PLC: [ACELP: Fade-out] + * PLC: getLevelSynDeemph: derives on frame or subframe basis the level + * of LPC synthesis and deeemphasis based on the given input + *----------------------------------------------------------------------*/ + +float getLevelSynDeemph( + const float h1Init[], /* i : input value or vector to be processed */ + const float A[], /* i : LPC coefficients */ + const int16_t lenLpcExc, /* i : length of the LPC excitation buffer */ + const float preemph_fac, /* i : preemphasis factor */ + const int16_t numLoops /* i : number of loops */ +) +{ + float levelSynDeemphSub; + float levelSynDeemph = 0; + float h1[L_FRAME_PLUS / 4]; + float mem[M]; + float tmp = 0; + int16_t loop; + + for ( loop = 0; loop < numLoops; loop++ ) + { + set_zero( h1, lenLpcExc ); + set_zero( mem, M ); + + h1[0] = *h1Init; + + syn_filt( A, M, h1, h1, lenLpcExc, mem, 0 ); + deemph( h1, preemph_fac, lenLpcExc, &tmp ); + A += ( M + 1 ); + + /* gain introduced by synthesis+deemphasis */ + levelSynDeemphSub = (float) sqrt( dotp( h1, h1, lenLpcExc ) ); + + /* mean of the above across all subframes */ + levelSynDeemph += ( 1.0f / (float) numLoops ) * levelSynDeemphSub; + } + + return levelSynDeemph; +} + + +/*--------------------------------------------------------------------- + * genPlcFiltBWAdap() + * + * + *---------------------------------------------------------------------*/ + +void genPlcFiltBWAdap( + const int32_t sr_core, /* i : core sampling rate */ + float *lpFiltAdapt, /* o : filter coefficients for filtering codebooks in case of flc */ + const int16_t type, /* i : type of filter, either 0 : lowpass or 1 : highpass */ + const float alpha /* i : fade out factor [0 1) used decrease filter tilt */ +) +{ + float a; + + switch ( sr_core ) + { + case INT_FS_16k: + a = 0.4000f; + break; + default: + a = 0.2813f; /*sr_core = INT_FS_12k8 */ + break; + } + + switch ( type ) + { + case 0: + *lpFiltAdapt++ = a / ( 2.f * a + 1.f ); + *lpFiltAdapt++ = 1.f / ( 2.f * a + 1.f ); + *lpFiltAdapt = a / ( 2.f * a + 1.f ); + break; + case 1: + a *= alpha; + *lpFiltAdapt++ = -a / ( 2.f * a + 1.f ); + *lpFiltAdapt++ = 1.f / ( 2.f * a + 1.f ); + *lpFiltAdapt = -a / ( 2.f * a + 1.f ); + break; + default: + IVAS_ERROR( IVAS_ERR_INTERNAL, "PLC: Filter type neither lowpass nor highpass." ); + break; + } + + return; +} + +/*------------------------------------------------------------------ + * highPassFiltering() + * + * PLC: [ACELP: general] + * PLC: high pass filtering + *-----------------------------------------------------------------*/ + +void highPassFiltering( + const int16_t last_good, /* i : last classification type */ + const int16_t L_buffer, /* i : buffer length */ + float exc2[], /* i/o: unvoiced excitation before the high pass filtering */ + const float hp_filt[], /* i : high pass filter coefficients */ + const int16_t l_fir_fer /* i : high pass filter length */ +) +{ + int16_t i; + + if ( last_good > UNVOICED_TRANSITION ) + { + for ( i = 0; i < L_buffer; i++ ) + { + exc2[i] = dotp( &exc2[i], hp_filt, l_fir_fer ); + } + } + + return; +} + +/*--------------------------------------------------------------------- + * GetPLCModeDecision() + * + * PLC: [Common: mode decision] + * PLC: Decide which Concealment to use. Update pitch lags if needed + *--------------------------------------------------------------------*/ + +int16_t GetPLCModeDecision( + Decoder_State *st /* i/o: decoder memory state pointer */ +) +{ + int16_t core; + int16_t numIndices = 0; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + if ( st->flagGuidedAcelp == 1 ) + { + /* update mem_lag according to info available on future frame */ + st->old_pitch_buf[2 * st->nb_subfr] = (float) st->guidedT0; + st->old_pitch_buf[2 * st->nb_subfr + 1] = (float) st->guidedT0; + st->mem_pitch_gain[0] = st->mem_pitch_gain[1] = 1.f; + } + if ( ( st->last_core > ACELP_CORE && hTcxDec->tcxltp_last_gain_unmodified != 0 ) || ( st->flagGuidedAcelp == 1 ) ) + { + /* no updates needed here, because already updated in last good frame */ + st->plc_use_future_lag = 1; + } + else + { + st->plc_use_future_lag = 0; + } + if ( st->last_core == -1 ) + { + if ( st->Opt_AMR_WB ) + { + core = ACELP_CORE; + } + else + { + core = TCX_20_CORE; + } + st->last_core = ACELP_CORE; + st->tonal_mdct_plc_active = 0; + } + else + { +#ifndef DEBUG_NO_TD_TCX_PLC + core = ACELP_CORE; +#else + core = st->last_core; +#endif + if ( st->nbLostCmpt > 1 ) + { + core = st->last_core_bfi; + } + + /* no FD TCX PLC after a TCX transition frame: the appropriate framing is not implemented */ + if ( st->nbLostCmpt == 1 ) + { + st->tonal_mdct_plc_active = 0; + if ( !( st->rf_flag && st->use_partial_copy && ( st->rf_frame_type == RF_TCXTD1 || st->rf_frame_type == RF_TCXTD2 ) ) ) + { + if ( st->hTonalMDCTConc != NULL && st->last_core == TCX_20_CORE && st->second_last_core == TCX_20_CORE && ( ( st->old_fpitch <= 0.5f * st->L_frame ) || ( hTcxDec->tcxltp_last_gain_unmodified <= 0.4f ) ) + /* it is fine to call the detection even if no ltp information + is available, meaning that st->old_fpitch == + st->tcxltp_second_last_pitch == st->L_frame */ + && ( st->old_fpitch == hTcxDec->tcxltp_second_last_pitch ) && !st->last_tns_active && !st->second_last_tns_active ) + { + + TonalMDCTConceal_Detect( st->hTonalMDCTConc, ( hTcxDec->tcxltp_last_gain_unmodified > 0 ) ? st->old_fpitch : 0, &numIndices, + ( st->element_mode == IVAS_CPE_MDCT ? &( st->hTcxCfg->psychParamsTCX20 ) : st->hTcxCfg->psychParamsCurrent ), + st->mct_chan_mode == MCT_CHAN_MODE_LFE ); + + if ( ( numIndices > 10 ) || ( ( numIndices > 5 ) && ( fabs( hTcxDec->tcxltp_third_last_pitch - hTcxDec->tcxltp_second_last_pitch ) < 0.5f ) ) || ( ( numIndices > 0 ) && ( ( st->last_good <= UNVOICED_TRANSITION ) || ( hTcxDec->tcxltp_last_gain_unmodified <= 0.4f ) ) && ( fabs( hTcxDec->tcxltp_third_last_pitch - hTcxDec->tcxltp_second_last_pitch ) < 0.5f ) ) ) + { + core = TCX_20_CORE; +#ifndef DEBUG_NO_TONAL_PLC + st->tonal_mdct_plc_active = 1; +#endif + } + else if ( st->last_good <= UNVOICED_TRANSITION || hTcxDec->tcxltp_last_gain_unmodified <= 0.4f ) + { + core = TCX_20_CORE; + } + } +#ifndef DEBUG_FORCE_TD_TCX_CONCEALMENT + else if ( st->last_core != ACELP_CORE ) + { + if ( st->last_good <= UNVOICED_TRANSITION || hTcxDec->tcxltp_last_gain_unmodified <= 0.4f ) + { + core = st->last_core; + } + } +#endif + } + } + } + + return core; +} diff --git a/lib_dec/evs_dec.c b/lib_dec/evs_dec.c new file mode 100644 index 0000000000..9943ca9b98 --- /dev/null +++ b/lib_dec/evs_dec.c @@ -0,0 +1,984 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + +/*--------------------------------------------------------------------------* + * evs_dec() + * + * Principal decoder routine + *--------------------------------------------------------------------------*/ + +ivas_error evs_dec( + Decoder_State *st, /* i/o: Decoder state structure */ + float mem_hp20_out[L_HP20_MEM], /* i/o: HP filter memory for synthesis */ + float *output, /* o : output synthesis signal */ + FRAME_MODE frameMode /* i : Decoder frame mode */ +) +{ + int16_t i, output_frame; + int16_t sharpFlag; + float synth[L_FRAME48k]; + float hb_synth[L_FRAME48k]; + float tmp_buffer[L_FRAME48k]; + int16_t tmps, incr; + float bwe_exc_extended[L_FRAME32k + NL_BUFF_OFFSET]; + float voice_factors[NB_SUBFR16k]; + float fb_exc[L_FRAME16k]; + int16_t core_switching_flag; + float old_syn_12k8_16k[L_FRAME16k]; + float tmp, tmpF; + float pitch_buf[NB_SUBFR16k]; + int16_t unbits; + int16_t hq_core_type; + int16_t sid_bw; + int16_t delay_comp, delta, delay_tdbwe; + int16_t concealWholeFrame; /* status after decoding */ + int16_t concealWholeFrameTmp; + float pcmbufFB[L_FRAME_MAX]; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "evs_dec" ); + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + st->idchan = 0; + st->flag_ACELP16k = set_ACELP_flag( EVS_MONO, -1, st->total_brate, 0, 0, -1, -1 ); + + tmps = 0; + delay_tdbwe = 0; + sid_bw = -1; + concealWholeFrameTmp = -1; + if ( !st->bfi ) + { + st->extl = -1; + } + + output_frame = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); + + core_switching_flag = 0; + sharpFlag = 0; + unbits = 0; + + st->use_partial_copy = 0; + st->rf_flag = 0; + + if ( st->bfi == 1 ) + { + hq_core_type = st->hHQ_core->last_hq_core_type; + st->coder_type = st->last_coder_type; + } + else + { + hq_core_type = -1; + st->coder_type = INACTIVE; + } + + /* PLC: [TCX: Fade-out-recovery] + * PLC: overlapping part needs to be attenuated for first good frame */ + if ( !st->bfi && st->prev_bfi && ( st->last_codec_mode == MODE2 ) && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) ) + { + v_multc( st->hHQ_core->old_out, st->hPlcInfo->recovery_gain, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX ); + v_multc( st->hHQ_core->old_outLB, st->hPlcInfo->recovery_gain, st->hHQ_core->old_outLB, st->L_frame ); + + if ( !st->hTcxCfg->last_aldo ) + { + v_multc( st->hTcxDec->syn_OverlFB, st->hPlcInfo->recovery_gain, st->hTcxDec->syn_OverlFB, st->hTcxCfg->tcx_mdct_window_lengthFB ); + v_multc( st->hTcxDec->syn_Overl, st->hPlcInfo->recovery_gain, st->hTcxDec->syn_Overl, st->hTcxCfg->tcx_mdct_window_length ); + } + } + + set_f( voice_factors, 0.f, NB_SUBFR16k ); + + set_f( hb_synth, 0.0f, L_FRAME48k ); + + st->rate_switching_reset = 0; + + if ( !st->bfi ) + { + st->flagGuidedAcelp = 0; + } + + /*----------------------------------------------------------------* + * Updates in case of AMR-WB IO mode -> EVS primary mode switching + *----------------------------------------------------------------*/ + + if ( st->last_core == AMR_WB_CORE ) + { + updt_IO_switch_dec( output_frame, st ); + } + + if ( frameMode != FRAMEMODE_MISSING ) /* frame mode normal or future frame */ + { + getPartialCopyInfo( st, &sharpFlag ); + frameMode = st->bfi; + } + + if ( st->rf_frame_type == RF_NO_DATA && st->use_partial_copy ) + { + /* the partial copy is a RF FRAME_NO_DATA frame and should follow the concealment path*/ + st->bfi = 1; + st->codec_mode = st->last_codec_mode; + frameMode = FRAMEMODE_MISSING; + st->use_partial_copy = 0; + } + + /* if previous frame was concealed via ACELP, drop TCX partial copy info and continue ACELP concealment */ + if ( st->use_partial_copy && st->core == TCX_20_CORE && st->prev_bfi && st->last_core == ACELP_CORE ) + { + st->bfi = 1; + st->codec_mode = st->last_codec_mode; + frameMode = FRAMEMODE_MISSING; + st->use_partial_copy = 0; + st->core = ACELP_CORE; + } + + /* if previous frame was HQ Core/TCX10/TCX20 (high bitrate), drop partial copy info and continue HQ Core/TCX10/TCX20 concealment */ + if ( st->use_partial_copy && ( st->last_core == HQ_CORE || st->last_core == TCX_10_CORE || ( st->last_core == TCX_20_CORE && getTcxonly( EVS_MONO, st->last_total_brate, 0 ) ) ) ) + { + st->bfi = 1; + st->codec_mode = st->last_codec_mode; + frameMode = FRAMEMODE_MISSING; + st->use_partial_copy = 0; + st->core = st->last_core; + } + + /*------------------------------------------------------------------* + * Decoding + *-----------------------------------------------------------------*/ + + if ( st->codec_mode == MODE1 ) + { + /*------------------------------------------------------------------* + * Decision matrix (selection of technologies) + *-----------------------------------------------------------------*/ + + /* decision matrix (selection of technologies) */ + if ( st->bfi != 1 ) + { + decision_matrix_dec( st, &sharpFlag, &hq_core_type, &core_switching_flag ); + + if ( st->bfi != 1 ) + { + st->sr_core = st->L_frame * FRAMES_PER_SEC; + st->fscale_old = st->fscale; + st->fscale = sr2fscale( st->sr_core ); + } + else + { + frameMode = FRAMEMODE_MISSING; + } + } + } + + + if ( st->codec_mode == MODE1 ) + { + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + if ( st->bfi == 1 ) + { + st->nbLostCmpt++; + } + else + { + st->nbLostCmpt = 0; + } + st->enablePlcWaveadjust = 0; + + /*---------------------------------------------------------------------* + * Detect bandwidth switching + *---------------------------------------------------------------------*/ + + bandwidth_switching_detect( st ); + + /*---------------------------------------------------------------------* + * Preprocessing (preparing) for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + + if ( ( error = core_switching_pre_dec( st, output_frame, -1, -1, EVS_MONO, -1 ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /*---------------------------------------------------------------------* + * ACELP core decoding + * HQ core decoding + *---------------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + /* ACELP core decoder */ + if ( ( error = acelp_core_dec( st, NULL, synth, NULL, bwe_exc_extended, voice_factors, old_syn_12k8_16k, sharpFlag, pitch_buf, &unbits, &sid_bw, NULL, NULL, NULL, 0, EVS_MONO, 0, 0, 1, NULL ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + /* HQ core decoder */ + hq_core_dec( st, synth, output_frame, hq_core_type, core_switching_flag, NULL ); + } + + /*---------------------------------------------------------------------* + * Postprocessing for ACELP/MDCT core switching + *---------------------------------------------------------------------*/ + + if ( ( error = core_switching_post_dec( st, synth, NULL, NULL, 0, output_frame, core_switching_flag, 0, -1, EVS_MONO ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /*---------------------------------------------------------------------* + * Pre-processing for bandwidth switching + *---------------------------------------------------------------------*/ + wmops_sub_start( "BWE_decoding" ); + + bw_switching_pre_proc( st, old_syn_12k8_16k, -1, 1 ); + + /*---------------------------------------------------------------------* + * WB TBE decoding + * WB BWE decoding + *---------------------------------------------------------------------*/ + + if ( st->extl == WB_TBE ) + { + /* WB TBE decoder */ + wb_tbe_dec( st, bwe_exc_extended, voice_factors, hb_synth ); + } + + if ( st->extl == WB_BWE && st->bws_cnt == 0 ) + { + /* WB BWE decoder */ + wb_bwe_dec( st, NULL, synth, hb_synth, 0, output_frame, voice_factors, pitch_buf ); + } + + /*---------------------------------------------------------------------* + * SWB(FB) TBE decoding + * SWB(FB) BWE decoding + *---------------------------------------------------------------------*/ + + if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && st->output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) + { + /* SWB TBE decoder */ + swb_tbe_dec( st, NULL, bwe_exc_extended, voice_factors, old_syn_12k8_16k, fb_exc, hb_synth, pitch_buf ); + + /* FB TBE decoder */ + if ( output_frame == L_FRAME48k && st->extl == FB_TBE ) + { + fb_tbe_dec( st, fb_exc, hb_synth, NULL ); + } + } + else if ( st->extl == SWB_BWE || st->extl == FB_BWE || ( st->output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) + { + /* SWB BWE decoder */ + swb_bwe_dec( st, NULL, synth, hb_synth, 0, output_frame ); + } + else if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) + { + swb_bwe_dec_hr( st, old_syn_12k8_16k, hb_synth, output_frame, unbits, pitch_buf ); + } + + /*---------------------------------------------------------------------* + * FEC - recovery after lost HQ core (smoothing of the BWE component) + *---------------------------------------------------------------------*/ + + if ( st->prev_bfi && st->last_core == HQ_CORE && st->extl != -1 ) + { + tmp = FRAC_BWE_SMOOTH / output_frame; + + for ( i = 0; i < output_frame / FRAC_BWE_SMOOTH; i++ ) + { + hb_synth[i] *= ( i * tmp ); + } + } + + /*---------------------------------------------------------------------* + * SWB CNG + *---------------------------------------------------------------------*/ + + if ( output_frame >= L_FRAME32k ) + { + /* SHB CNG decoder */ + swb_CNG_dec( st, synth, hb_synth, sid_bw ); + } + + wmops_sub_end(); + + /*----------------------------------------------------------------* + * Delay ACELP core synthesis to be synchronized with the components of bandwidth extension layers + *----------------------------------------------------------------*/ + + if ( output_frame >= L_FRAME16k ) + { + tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); + delay_signal( synth, output_frame, st->prev_synth_buffer, tmps ); + } + + if ( st->core == ACELP_CORE && !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) + { + tmps = 0; + if ( output_frame >= L_FRAME16k ) + { + tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); + } + + waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut, synth + tmps, tmps, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); + st->hPlcInfo->Pitch = 0; + } + + /*----------------------------------------------------------------* + * Addition of BWE components to the ACELP core synthesis + *----------------------------------------------------------------*/ + + if ( st->extl != -1 || ( st->bws_cnt > 0 && st->core == ACELP_CORE ) ) + { + /* Calculate an additional delay of extension layer components to be synchronized with ACELP synthesis */ + if ( st->L_frame == L_FRAME ) + { + /* TBE on top of ACELP@12.8kHz */ + tmps = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); + } + else + { + if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) + { + /* HR SWB BWE on top of ACELP@16kHz */ + tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); + } + else + { + /* TBE on top of ACELP@16kHz */ + tmps = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); + } + } + + /* Smooth transitions when switching between different technologies */ + if ( ( st->extl != st->last_extl || ( st->extl == st->last_extl && ( st->core ^ st->last_core ) == HQ_CORE ) ) && !( st->extl == SWB_CNG && st->last_extl == SWB_TBE ) ) + { + /* switching between BWE and TBE technologies */ + incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); + for ( i = 0; i < tmps; i++ ) + { + hb_synth[i] *= sin_table256[i * incr]; + } + + set_f( st->hb_prev_synth_buffer, 0.0f, tmps ); + } + else if ( tmps < st->old_bwe_delay ) + { + /* the previous frame was TBE on top of ACELP@16kHz and the current frame is TBE on top of ACELP@12.8kHz */ + incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); + for ( i = 0; i < tmps; i++ ) + { + tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr] + + st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; + } + + mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); + } + else if ( tmps > st->old_bwe_delay ) + { + /* the previous frame was TBE on top of ACELP@12.8kHz and the current frame is TBE on top of ACELP@16kHz */ + incr = (int16_t) ( L_FRAME / ( st->old_bwe_delay + 0.5f ) ); + for ( i = 0; i < st->old_bwe_delay; i++ ) + { + tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr]; + } + + for ( ; i < tmps; i++ ) + { + tmp_buffer[i] = 0.0f; + } + + for ( i = 0; i < st->old_bwe_delay; i++ ) + { + tmp_buffer[tmps - 1 - i] += st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; + } + + mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); + } + + /* Delay hb_synth */ + delay_signal( hb_synth, output_frame, st->hb_prev_synth_buffer, tmps ); + + st->old_bwe_delay = tmps; + if ( ( st->ppp_mode_dec || ( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) && st->L_frame == st->last_L_frame && ( st->bws_cnt > 1 || st->last_extl != -1 ) ) + { + mvr2r( st->hBWE_TD->old_hb_synth, hb_synth, output_frame ); + } + else + { + mvr2r( hb_synth, st->hBWE_TD->old_hb_synth, output_frame ); + } + + /* Add the delayed hb_synth component to the delayed ACELP synthesis */ + v_add( synth, hb_synth, synth, output_frame ); + + /* SWB CNG/DTX - calculate SHB energy */ + if ( output_frame >= L_FRAME32k && st->extl > SWB_CNG && st->hTdCngDec != NULL ) + { + st->hTdCngDec->last_shb_ener = 0.001f; + for ( i = 0; i < output_frame; i++ ) + { + st->hTdCngDec->last_shb_ener += hb_synth[i] * hb_synth[i]; + } + st->hTdCngDec->last_shb_ener /= (float) output_frame; + st->hTdCngDec->last_shb_ener = 10 * (float) log10( st->hTdCngDec->last_shb_ener ); + } + } + + /* TCX-LTP Postfilter: used in Mode 1 to update memories and to avoid discontinuities when the past frame was TCX */ + tcx_ltp_post( st, hTcxLtpDec, ACELP_CORE, output_frame, 0, synth, NULL ); + + /* final output of synthesis signal */ + mvr2r( synth, output, output_frame ); + } + else /* Mode 2 */ + { + + /* -------------------------------------------------------------- * + * Mode 2 concealment + * -------------------------------------------------------------- */ + + concealWholeFrame = 0; + + if ( frameMode == FRAMEMODE_NORMAL ) + { + st->m_decodeMode = DEC_NO_FRAM_LOSS; + } + + if ( frameMode == FRAMEMODE_MISSING ) + { + if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) + { + st->m_decodeMode = DEC_NO_FRAM_LOSS; + } + else + { + st->m_decodeMode = DEC_CONCEALMENT_EXT; + } + } + + if ( st->m_decodeMode == DEC_CONCEALMENT_EXT ) + { + concealWholeFrame = 1; + } + + /* -------------------------------------------------------------- * + * Decode core + * -------------------------------------------------------------- */ + + dec_acelp_tcx_frame( st, &concealWholeFrame, output, st->p_bpf_noise_buf, pcmbufFB, bwe_exc_extended, voice_factors, pitch_buf, NULL ); + + concealWholeFrameTmp = concealWholeFrame; + if ( st->bfi ) + { + frameMode = FRAMEMODE_MISSING; + } + + if ( st->igf ) + { + /* TBE for Mode 2 interface */ + if ( ( st->bfi == 0 || st->last_core == ACELP_CORE ) && st->core == ACELP_CORE ) + { + switch ( st->bwidth ) + { + case WB: + st->extl = WB_TBE; + st->extl_brate = WB_TBE_0k35; + break; + case SWB: + st->extl = SWB_TBE; + st->extl_brate = SWB_TBE_1k6; + + if ( st->total_brate < ACELP_13k20 ) + { + st->extl_brate = SWB_TBE_0k95; + } + else if ( st->total_brate >= ACELP_24k40 ) + { + st->extl_brate = SWB_TBE_2k8; + } + + break; + + case FB: + st->extl = FB_TBE; + st->extl_brate = FB_TBE_1k8; + + if ( st->total_brate >= ACELP_24k40 ) + { + st->extl_brate = FB_TBE_3k0; + } + + break; + } + } + else + { + st->extl = IGF_BWE; + st->extl_brate = 0; + } + + if ( st->output_Fs == 8000 || ( st->output_Fs == 16000 && st->L_frame == L_FRAME16k ) ) + { + st->extl = -1; + } + + st->core_brate = st->total_brate - st->extl_brate; + + st->bws_cnt = 0; + st->bws_cnt1 = 0; + st->tilt_wb = 0; + + if ( st->m_frame_type == ACTIVE_FRAME ) + { + if ( ( st->bfi == 0 || st->last_core == ACELP_CORE ) && st->core == ACELP_CORE ) + { + if ( st->extl == WB_TBE ) + { + wb_tbe_dec( st, bwe_exc_extended, voice_factors, hb_synth ); + } + else if ( st->extl == SWB_TBE || st->extl == FB_TBE ) + { + /* SWB TBE decoder */ + swb_tbe_dec( st, NULL, bwe_exc_extended, voice_factors, st->hBWE_TD->old_core_synth, fb_exc, hb_synth, pitch_buf ); + + if ( st->extl == FB_TBE && output_frame == L_FRAME48k ) + { + fb_tbe_dec( st, fb_exc, hb_synth, NULL ); + } + } + mvr2r( hb_synth, st->hBWE_TD->old_hb_synth, output_frame ); + } + else + { + if ( st->last_core == ACELP_CORE ) + { + if ( ( st->bwidth == SWB || st->bwidth == FB ) && + ( ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) && st->last_codec_mode == MODE2 ) ) + { + GenTransition( st->hBWE_TD, hb_synth, st->output_Fs, EVS_MONO, st->L_frame, st->rf_flag, st->total_brate ); + } + else if ( st->bwidth == WB && st->last_extl == WB_TBE ) + { + GenTransition_WB( st->hBWE_TD, hb_synth, st->output_Fs ); + } + + TBEreset_dec( st ); + } + else if ( st->last_codec_mode == MODE1 ) + { + swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); + + if ( st->extl == FB_TBE ) + { + set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + st->hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_synth( st->hBWE_TD->fbbwe_hpf_mem, &st->hBWE_TD->prev_fbbwe_ratio ); + } + swb_tbe_reset_synth( st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); + } + } + } + } + + + if ( st->m_frame_type != ACTIVE_FRAME ) + { + st->extl = -1; + st->extl_brate = 0; + } + + /* -------------------------------------------------------------- * + * Postprocessing + * -------------------------------------------------------------- */ + { + float *realBuffer[CLDFB_NO_COL_MAX], *imagBuffer[CLDFB_NO_COL_MAX]; + float realBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); + realBuffer[i] = realBufferTmp[i]; + imagBuffer[i] = imagBufferTmp[i]; + } + + st->cldfbSyn->nab = min( st->cldfbAna->no_channels, st->cldfbSyn->no_channels ); + st->cldfbAna->nab = 0; + + if ( st->hFdCngDec != NULL && ( st->sr_core == 8000 || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) && st->total_brate <= ACELP_32k ) + { + /* -------------------------------------------------------------- * + * In CLDFB domain: + * - perform noise estimation during active frames + * - do CNG during inactive frames + * -------------------------------------------------------------- */ + + noisy_speech_detection( st->hFdCngDec, st->VAD && st->m_frame_type == ACTIVE_FRAME, output ); + + st->hFdCngDec->hFdCngCom->likelihood_noisy_speech = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; + + st->lp_noise = st->hFdCngDec->lp_noise; + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( output, NULL, realBuffer, imagBuffer, st, concealWholeFrame, 0 ); +#else + ApplyFdCng( output, realBuffer, imagBuffer, st, concealWholeFrame, 0 ); +#endif + + /* Generate additional comfort noise to mask potential coding artefacts */ + if ( st->m_frame_type == ACTIVE_FRAME && st->flag_cna ) + { + generate_masking_noise( output, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, NULL, -1 ); + } + } + + if ( st->flag_cna == 0 && st->L_frame == L_FRAME16k && st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && st->last_coder_type != AUDIO ) || st->last_core == TCX_20_CORE || st->last_core == AMR_WB_CORE ) ) + { + v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2 + 5 * st->L_frame / 4, 256.f, tmp_buffer, st->L_frame / 2 ); + v_add( tmp_buffer, output, output, st->L_frame / 2 ); + } + + if ( st->m_frame_type == ACTIVE_FRAME ) + { + cldfbAnalysis( output, realBuffer, imagBuffer, -1, st->cldfbAna ); + } + else + { + float timeDomainBuffer[L_FRAME16k]; + float A[M + 1]; + + mvr2r( st->hFdCngDec->hFdCngCom->timeDomainBuffer, timeDomainBuffer, st->L_frame ); + mvr2r( st->hFdCngDec->hFdCngCom->A_cng, A, M + 1 ); + + update_decoder_LPD_cng( st, timeDomainBuffer, A, st->p_bpf_noise_buf ); + + /* Generate additional comfort noise to mask potential coding artefacts */ + if ( st->flag_cna ) + { + generate_masking_noise( timeDomainBuffer, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, NULL, -1 ); + } + else if ( st->L_frame == L_FRAME16k && st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && st->last_coder_type != AUDIO ) || st->last_core == TCX_20_CORE || st->last_core == AMR_WB_CORE ) ) + { + v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2 + 5 * st->L_frame / 4, 256.f, tmp_buffer, st->L_frame / 2 ); + v_add( tmp_buffer, timeDomainBuffer, timeDomainBuffer, st->L_frame / 2 ); + } + + /* check if the CLDFB works on the right sample rate */ + if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) + { + resampleCldfb( st->cldfbAna, ( st->L_frame * FRAMES_PER_SEC ) ); + resampleCldfb( st->cldfbBPF, ( st->L_frame * FRAMES_PER_SEC ) ); + } + + st->cldfbSyn->bandsToZero = 0; + if ( st->bwidth == NB && st->cldfbSyn->no_channels > 10 ) + { + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - 10; + } + else if ( st->hFdCngDec->hFdCngCom->regularStopBand < st->cldfbSyn->no_channels ) + { + st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->hFdCngDec->hFdCngCom->regularStopBand; + } + cldfbAnalysis( timeDomainBuffer, realBuffer, imagBuffer, -1, st->cldfbAna ); + } + + if ( st->flag_cna == 0 ) + { + set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2, 0.f, st->hFdCngDec->hFdCngCom->fftlen ); + } + + if ( st->p_bpf_noise_buf ) + { + addBassPostFilter( st->p_bpf_noise_buf, -1, realBuffer, imagBuffer, st->cldfbBPF ); + } + + if ( st->output_Fs > 8000 && st->hTECDec != NULL ) + { + calcGainTemp_TBE( realBuffer, imagBuffer, st->hTECDec->loBuffer, 0, st->cldfbAna->no_col, st->cldfbAna->no_channels, st->hTECDec->pGainTemp, st->tec_flag ); + } + + /* set high band buffers to zero. Covering the current frame and the overlap area. */ + if ( st->m_frame_type == ACTIVE_FRAME ) + { + for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) + { + set_f( &realBuffer[i][st->cldfbSyn->nab], 0.f, st->cldfbSyn->no_channels - st->cldfbSyn->nab ); + set_f( &imagBuffer[i][st->cldfbSyn->nab], 0.f, st->cldfbSyn->no_channels - st->cldfbSyn->nab ); + } + } + + cldfbSynthesis( realBuffer, imagBuffer, output, -1, st->cldfbSyn ); + + /* set multiplication factor according to the sampling rate */ + delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + delay_tdbwe = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); + + /* MODE1 MDCT to ACELP 2 transition */ + if ( st->last_codec_mode == MODE1 && st->last_core_bfi > ACELP_CORE ) + { + mvr2r( st->delay_buf_out, output, delay_comp ); /* copy the HQ/ACELP delay synchronization buffer at the beginning of ACELP frame */ + + if ( st->core == ACELP_CORE ) + { + tmpF = 1.0f / (float) NS2SA( st->output_Fs, 3000000 ); + if ( st->prev_bfi && st->hHQ_core->HqVoicing ) + { + mvr2r( st->hHQ_core->fer_samples, st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), NS2SA( st->output_Fs, 3000000 ) ); + } + for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) + { + output[i + delay_comp] = ( 1 - tmpF * (float) i ) * st->hHQ_core->old_out[i + NS2SA( st->output_Fs, N_ZERO_MDCT_NS )] + tmpF * (float) i * output[i + delay_comp]; + } + } + else + { + if ( st->output_Fs == 8000 ) + { + mvr2r( st->delay_buf_out, st->hTcxDec->FBTCXdelayBuf, delay_comp ); + } + else + { + mvr2r( st->prev_synth_buffer, st->hTcxDec->FBTCXdelayBuf, delay_tdbwe ); + mvr2r( st->delay_buf_out, st->hTcxDec->FBTCXdelayBuf + delay_tdbwe, delay_comp ); + } + } + } + + /* set delay compensation between HQ synthesis and ACELP synthesis */ + if ( st->core == ACELP_CORE && !st->con_tcx ) + { + set_f( st->delay_buf_out, 0, delay_comp ); + mvr2r( output, st->previoussynth, output_frame ); + } + else + { + mvr2r( st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB - delay_comp, st->delay_buf_out, delay_comp ); + + if ( st->output_Fs == 8000 ) + { + mvr2r( st->hTcxDec->FBTCXdelayBuf, st->previoussynth, delay_comp ); + } + else + { + mvr2r( st->hTcxDec->FBTCXdelayBuf + delay_tdbwe, st->previoussynth, delay_comp ); + } + + mvr2r( pcmbufFB, st->previoussynth + delay_comp, output_frame - delay_comp ); + } + + /* Delay compensation for TBE */ + if ( output_frame >= L_FRAME16k ) + { + delay_signal( output, output_frame, st->prev_synth_buffer, delay_tdbwe ); + } + + if ( st->igf && st->m_frame_type == ACTIVE_FRAME ) + { + if ( !st->bfi && st->core == ACELP_CORE && ( st->tec_flag || st->tfa_flag ) && st->output_Fs > 8000 && st->hTECDec != NULL ) + { + procTecTfa_TBE( hb_synth, st->hTECDec->pGainTemp, st->tfa_flag, st->last_core, (int16_t) ( output_frame / N_TEC_TFA_SUBFR ), st->tec_flag == 2 ? 1 : 0 ); + } + + if ( ( ( ( !st->bfi || st->last_core == ACELP_CORE ) && st->core == ACELP_CORE ) || + ( st->last_core == ACELP_CORE && st->bwidth != NB && st->last_codec_mode == MODE2 ) ) && + ( st->output_Fs > 8000 ) ) + { + /* Add the delayed hb_synth component to the delayed core synthesis */ + v_add( output, hb_synth, output, output_frame ); + } + } + } + + /* set delay */ + if ( st->output_Fs == 8000 ) + { + tmps = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + } + else + { + tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); + } + delta = NS2SA( st->output_Fs, TCXLTP_DELAY_NS ); + + /* TCX/ACELP/HQ-CORE->TCX */ + if ( ( st->bfi && st->last_core > ACELP_CORE ) || st->core > ACELP_CORE ) + { + /* TCX / HQ-CORE / TD-TCX-PLC -> TCX / TD-TCX-PLC */ + if ( st->last_core_bfi > ACELP_CORE || ( st->bfi && st->last_core > ACELP_CORE ) || ( st->prev_bfi && st->last_con_tcx ) ) + { + mvr2r( st->hTcxDec->FBTCXdelayBuf, output, tmps ); + mvr2r( pcmbufFB, output + tmps, st->hTcxDec->L_frameTCX - tmps ); + } + /* ACELP -> TCX */ + else + { + /*cross-fading between LB-TCX and FB-TCX over 2.3125ms*/ + for ( i = 0; i < tmps; i++ ) + { + output[i + tmps] = ( output[i + tmps] * ( tmps - i ) + pcmbufFB[i] * i ) / tmps; + } + mvr2r( pcmbufFB + tmps, output + 2 * tmps, st->hTcxDec->L_frameTCX - 2 * tmps ); + } + + mvr2r( pcmbufFB + st->hTcxDec->L_frameTCX - tmps, st->hTcxDec->FBTCXdelayBuf, tmps ); + + if ( st->bfi && st->last_core > ACELP_CORE ) + { + if ( st->output_Fs == 8000 ) + { + mvr2r( st->hTcxDec->FBTCXdelayBuf, st->delay_buf_out, NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); + } + else + { + mvr2r( st->hTcxDec->FBTCXdelayBuf, st->prev_synth_buffer, NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); + mvr2r( st->hTcxDec->FBTCXdelayBuf + NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), st->delay_buf_out, NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); + } + } + } + /* TCX/TD TCX PLC->ACELP */ + else if ( st->last_codec_mode == MODE2 && st->last_core > ACELP_CORE ) + { + mvr2r( st->hTcxDec->FBTCXdelayBuf, output, delta ); + for ( i = delta; i < tmps; i++ ) + { + output[i] = ( output[i] * ( i - delta ) + st->hTcxDec->FBTCXdelayBuf[i] * ( tmps - i ) ) / ( tmps - delta ); + } + } + + tcx_ltp_post( st, hTcxLtpDec, st->core, output_frame, NS2SA( st->output_Fs, ACELP_LOOK_NS ) + tmps, output, st->hTcxDec->FBTCXdelayBuf ); + + } /* end of Mode 2 */ + + /*----------------------------------------------------------------* + * Save synthesis for HQ FEC + *----------------------------------------------------------------*/ + + save_synthesis_hq_fec( st, output, output_frame, NULL ); + + /*----------------------------------------------------------------* + * HP filtering + *----------------------------------------------------------------*/ + + hp20( output, output_frame, mem_hp20_out, st->output_Fs ); + + /*--------------------------------------------------------* + * Updates + *--------------------------------------------------------*/ + + if ( st->last_is_cng == 0 && st->codec_mode == MODE2 ) + { + st->bfi = 0; + if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) + { + if ( frameMode == FRAMEMODE_MISSING ) + { + st->bfi = 1; + } + } + else if ( st->m_decodeMode == DEC_CONCEALMENT_EXT ) + { + st->bfi = 1; + } + + updt_dec_common( st, -1, concealWholeFrameTmp, output ); + } + else + { + if ( st->codec_mode == MODE2 ) + { + st->bfi = 0; + } + + updt_dec_common( st, hq_core_type, concealWholeFrameTmp, output ); + } + + +#ifdef DEBUG_MODE_INFO + for ( i = 0; i < ( st->L_frame / L_SUBFR ); i++ ) + { + dbgwrite( &pitch_buf[i], sizeof( float ), 1, output_frame / ( st->L_frame / L_SUBFR ), "res/pitch_buf.dec" ); + } + dbgwrite( &st->clas_dec, sizeof( int16_t ), 1, output_frame, "res/clas.dec" ); + dbgwrite( &st->codec_mode, sizeof( int16_t ), 1, output_frame, "res/codec.dec" ); + dbgwrite( &st->core, sizeof( int16_t ), 1, output_frame, "res/core.dec" ); + dbgwrite( &st->extl, sizeof( int16_t ), 1, output_frame, "res/extl.dec" ); + dbgwrite( &st->bwidth, sizeof( int16_t ), 1, output_frame, "res/bwidth.dec" ); + dbgwrite( &st->cng_type, sizeof( int16_t ), 1, output_frame, "res/cng_type.dec" ); + tmp = st->extl_brate / 1000.0f; + dbgwrite( &tmp, sizeof( float ), 1, output_frame, "res/extl_brate.dec" ); + tmp = st->core_brate / 1000.0f; + dbgwrite( &tmp, sizeof( float ), 1, output_frame, "res/core_brate.dec" ); + tmp = st->total_brate / 1000.0f; + dbgwrite( &tmp, sizeof( float ), 1, output_frame, "res/total_brate.dec" ); + dbgwrite( &st->coder_type, sizeof( int16_t ), 1, output_frame, "res/coder_type.dec" ); + dbgwrite( &st->L_frame, sizeof( int16_t ), 1, output_frame, "res/L_frame.dec" ); + dbgwrite( &st->bfi, sizeof( int16_t ), 1, output_frame, "res/bfi" ); + dbgwrite( &st->BER_detect, sizeof( int16_t ), 1, output_frame, "res/BER_detect" ); + + if ( st->core != ACELP_CORE ) + { + set_f( hb_synth, 0, output_frame ); + dbgwrite( hb_synth, 4, st->L_frame, 1, "res/exc.dec" ); + } +#endif + + wmops_sub_end(); + return error; +} diff --git a/lib_dec/fd_cng_dec.c b/lib_dec/fd_cng_dec.c new file mode 100644 index 0000000000..8fd77a836d --- /dev/null +++ b/lib_dec/fd_cng_dec.c @@ -0,0 +1,2220 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "typedef.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" +#include "ivas_prot.h" +#include "ivas_rom_dec.h" + +/*------------------------------------------------------------------- + * Local constants + *-------------------------------------------------------------------*/ + +#define DELTA_MASKING_NOISE 1e-20f +#define CNA_ACT_DN_LARGE_PARTITION 50 /* index of the first larger partition */ +#define ST_PERIODOG_FACT 0.9 /* short-term filter factor for periodogram */ +#define CNA_ACT_DN_FACT 0.7 /* downward updating factor for CNA during active frames */ +#define FIRST_CNA_NOISE_UPD_FRAMES 5 /* minimum number of CN initialization frames */ + +/*------------------------------------------------------------------- + * createFdCngDec() + * + * Create an instance of type FD_CNG + *-------------------------------------------------------------------*/ + +ivas_error createFdCngDec( + HANDLE_FD_CNG_DEC *hFdCngDec ) +{ + HANDLE_FD_CNG_DEC hs; + ivas_error error; + error = IVAS_ERR_OK; + + /* Set output to NULL in case of errors and early return */ + *hFdCngDec = NULL; + + /* Allocate memory */ + hs = (HANDLE_FD_CNG_DEC) count_malloc( sizeof( FD_CNG_DEC ) ); + if ( hs == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for FD CNG DEC structure" ); + } + + if ( ( error = createFdCngCom( &( hs->hFdCngCom ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + *hFdCngDec = hs; + + return error; +} + + +/*------------------------------------------------------------------- + * initFdCngDec() + * + * Initialize an instance of type FD_CNG + *-------------------------------------------------------------------*/ + +void initFdCngDec( + DEC_CORE_HANDLE st /* i/o: decoder state structure */ +) +{ + HANDLE_FD_CNG_DEC hFdCngDec; + + hFdCngDec = st->hFdCngDec; + + /* Initialize common */ + initFdCngCom( hFdCngDec->hFdCngCom, st->cldfbSyn->scale ); + + /* Set some counters and flags */ + hFdCngDec->flag_dtx_mode = 0; + hFdCngDec->lp_noise = -20.f; + hFdCngDec->lp_speech = 25.f; + + /* Initialize noise estimation algorithm */ + set_f( hFdCngDec->bandNoiseShape, 0.0f, FFTLEN2 ); + set_f( hFdCngDec->partNoiseShape, 0.0f, NPART ); + set_f( hFdCngDec->msPeriodog, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msAlpha, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msBminWin, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msBminSubWin, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msPsd, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msNoiseFloor, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msNoiseEst, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msMinBuf, FLT_MAX, MSNUMSUBFR * NPART_SHAPING ); + set_f( hFdCngDec->msCurrentMin, FLT_MAX, NPART_SHAPING ); + set_f( hFdCngDec->msCurrentMinOut, FLT_MAX, NPART_SHAPING ); + set_f( hFdCngDec->msCurrentMinSubWindow, FLT_MAX, NPART_SHAPING ); + set_s( hFdCngDec->msLocalMinFlag, 0, NPART_SHAPING ); + set_s( hFdCngDec->msNewMinFlag, 0, NPART_SHAPING ); + set_f( hFdCngDec->msPsdFirstMoment, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msPsdSecondMoment, 0.0f, NPART_SHAPING ); + hFdCngDec->msPeriodogBufPtr = 0; + set_f( hFdCngDec->msPeriodogBuf, 0.0f, MSBUFLEN * NPART_SHAPING ); + set_f( hFdCngDec->msLogPeriodog, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->msLogNoiseEst, 0.0f, NPART_SHAPING ); + set_f( hFdCngDec->psize_shaping, 0.0f, NPART_SHAPING ); + hFdCngDec->nFFTpart_shaping = 0; + + set_f( hFdCngDec->hFdCngCom->sidNoiseEstLp, 0.0f, NPART ); + + set_f( hFdCngDec->smoothed_psd, 0.0f, L_FRAME16k ); + set_f( hFdCngDec->msPeriodog_ST, 0.0f, NPART_SHAPING ); + + hFdCngDec->ms_last_inactive_bwidth = NB; + hFdCngDec->ms_cnt_bw_up = 0; + + hFdCngDec->cna_LR_LT = 0.5f; + hFdCngDec->cna_ILD_LT = 0.0f; + hFdCngDec->first_cna_noise_updated = 0; + hFdCngDec->first_cna_noise_update_cnt = 0; + hFdCngDec->cna_nbands = 6; + mvs2s( cna_init_bands, hFdCngDec->cna_band_limits, MAX_CNA_NBANDS + 1 ); + hFdCngDec->cna_act_fact = 1.0f; + hFdCngDec->cna_rescale_fact = 0.0f; + hFdCngDec->cna_seed = 5687; + set_zero( hFdCngDec->cna_cm, STEREO_DFT_BAND_MAX ); + set_zero( hFdCngDec->cna_g_state, STEREO_DFT_BAND_MAX ); + + st->CNG_mode = -1; + mvr2r( st->lsp_old, st->lspCNG, M ); + + return; +} + + +/*------------------------------------------------------------------- + * configureFdCngDec() + * + * Configure an instance of type FD_CNG + *-------------------------------------------------------------------*/ + +void configureFdCngDec( + HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: Contains the variables related to the FD-based CNG process */ + const int16_t bwidth, + const int32_t total_brate, + const int16_t L_frame, + const int16_t last_L_frame, + const int16_t element_mode ) +{ + int16_t j, stopBandFR; + HANDLE_FD_CNG_COM hsCom = hFdCngDec->hFdCngCom; + + hsCom->CngBandwidth = bwidth; + if ( hsCom->CngBandwidth == FB ) + { + hsCom->CngBandwidth = SWB; + } + if ( total_brate != FRAME_NO_DATA && total_brate != SID_2k40 ) + { + hsCom->CngBitrate = total_brate; + } + else if ( hsCom->CngBitrate == -1 ) + { + /* set minimum active CBR bitrate if CngBitrate is uninitialized */ + if ( element_mode > EVS_MONO ) + { + hsCom->CngBitrate = IVAS_13k2; + } + else + { + hsCom->CngBitrate = ACELP_7k20; + } + } + + /* FD-CNG config for MDCT-Stereo is always the same (since for > 48 kbps only) */ + /* This may need adjustment in the future if 2TC DTX for some mode uses MDCT-Stereo DTX for lower bitrates too */ + if ( element_mode == IVAS_CPE_MDCT ) + { + hsCom->CngBitrate = IVAS_48k; + } + hsCom->numSlots = 16; + + /* NB configuration */ + if ( bwidth == NB ) + { + hsCom->FdCngSetup = FdCngSetup_nb; + hsCom->numCoreBands = 16; + hsCom->regularStopBand = 16; + } + + /* WB configuration */ + else if ( bwidth == WB ) + { + /* FFT 6.4kHz, no CLDFB */ + if ( hsCom->CngBitrate <= ACELP_8k00 && L_frame == L_FRAME ) + { + hsCom->FdCngSetup = FdCngSetup_wb1; + hsCom->numCoreBands = 16; + hsCom->regularStopBand = 16; + } + /* FFT 6.4kHz, CLDFB 8.0kHz */ + else if ( hsCom->CngBitrate <= ACELP_13k20 || L_frame == L_FRAME ) + { + hsCom->FdCngSetup = FdCngSetup_wb2; + hsCom->numCoreBands = 16; + hsCom->regularStopBand = 20; + if ( L_frame == L_FRAME16k ) + { + hsCom->FdCngSetup = FdCngSetup_wb2; + hsCom->numCoreBands = 20; + hsCom->regularStopBand = 20; + hsCom->FdCngSetup.fftlen = 640; + hsCom->FdCngSetup.stopFFTbin = 256; + } + } + /* FFT 8.0kHz, no CLDFB */ + else + { + hsCom->FdCngSetup = FdCngSetup_wb3; + hsCom->numCoreBands = 20; + hsCom->regularStopBand = 20; + } + } + + /* SWB/FB configuration */ + else + { + /* FFT 6.4kHz, CLDFB 14kHz */ + if ( L_frame == L_FRAME ) + { + hsCom->FdCngSetup = FdCngSetup_swb1; + hsCom->numCoreBands = 16; + hsCom->regularStopBand = 35; + } + /* FFT 8.0kHz, CLDFB 16kHz */ + else + { + hsCom->FdCngSetup = FdCngSetup_swb2; + hsCom->numCoreBands = 20; + hsCom->regularStopBand = 40; + if ( last_L_frame == L_FRAME && element_mode == IVAS_CPE_DFT ) + { + hsCom->regularStopBand = 35; + } + } + } + + + hsCom->fftlen = hsCom->FdCngSetup.fftlen; + hsCom->stopFFTbin = hsCom->FdCngSetup.stopFFTbin; + + /* Configure the SID quantizer and the Comfort Noise Generator */ + + hsCom->startBand = 2; + hsCom->stopBand = hsCom->FdCngSetup.sidPartitions[hsCom->FdCngSetup.numPartitions - 1] + 1; + initPartitions( hsCom->FdCngSetup.sidPartitions, hsCom->FdCngSetup.numPartitions, hsCom->startBand, hsCom->stopBand, hsCom->part, &hsCom->npart, hsCom->midband, hsCom->psize, hsCom->psize_inv, 0 ); + if ( hsCom->stopFFTbin == 160 ) + { + hsCom->nFFTpart = 17; + } + else if ( hsCom->stopFFTbin == 256 ) + { + hsCom->nFFTpart = 20; + } + else + { + hsCom->nFFTpart = 21; + } + hsCom->nCLDFBpart = hsCom->npart - hsCom->nFFTpart; + for ( j = 0; j < hsCom->nCLDFBpart; j++ ) + { + hsCom->CLDFBpart[j] = hsCom->part[j + hsCom->nFFTpart] - ( hsCom->stopFFTbin - hsCom->startBand ); + hsCom->CLDFBpsize_inv[j] = hsCom->psize_inv[j + hsCom->nFFTpart]; + } + + stopBandFR = (int16_t) floor( 1000.f /*Hz*/ / 25.f /*Hz/Bin*/ ); + if ( stopBandFR > hsCom->stopFFTbin ) + { + stopBandFR = hsCom->stopFFTbin; + } + initPartitions( hsCom->FdCngSetup.shapingPartitions, hsCom->FdCngSetup.numShapingPartitions, hsCom->startBand, hsCom->stopFFTbin, hFdCngDec->part_shaping, &hFdCngDec->npart_shaping, hFdCngDec->midband_shaping, hFdCngDec->psize_shaping, hFdCngDec->psize_inv_shaping, stopBandFR ); + + hFdCngDec->nFFTpart_shaping = hFdCngDec->npart_shaping; + + switch ( hsCom->fftlen ) + { + case 512: + hsCom->fftSineTab = NULL; + hsCom->olapWinAna = olapWinAna512; + hsCom->olapWinSyn = olapWinSyn256; + break; + case 640: + hsCom->fftSineTab = fftSineTab640; + hsCom->olapWinAna = olapWinAna640; + hsCom->olapWinSyn = olapWinSyn320; + break; + default: + assert( !"Unsupported FFT length for FD-based CNG" ); + break; + } + hsCom->frameSize = hsCom->fftlen >> 1; + + return; +} + + +/*------------------------------------------------------------------- + * deleteFdCngDec() + * + * Delete the instance of type FD_CNG + *-------------------------------------------------------------------*/ + +void deleteFdCngDec( + HANDLE_FD_CNG_DEC *hFdCngDec ) +{ + HANDLE_FD_CNG_DEC hsDec = *hFdCngDec; + + if ( hsDec != NULL ) + { + deleteFdCngCom( &( hsDec->hFdCngCom ) ); + count_free( hsDec ); + *hFdCngDec = NULL; + } + + return; +} + + +/*------------------------------------------------------------------- + * ApplyFdCng() + * + * Apply the CLDFB-based CNG at the decoder + *-------------------------------------------------------------------*/ + +void ApplyFdCng( + float *timeDomainInput, +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float *powerSpectrum, +#endif + float **realBuffer, /* i/o: Real part of the buffer */ + float **imagBuffer, /* i/o: Imaginary part of the buffer */ + Decoder_State *st, + const int16_t concealWholeFrame, + const int16_t is_music ) +{ + HANDLE_FD_CNG_DEC hFdCngDec = st->hFdCngDec; + HANDLE_FD_CNG_COM hFdCngCom = hFdCngDec->hFdCngCom; + float *cngNoiseLevel = hFdCngCom->cngNoiseLevel; + float *sidNoiseEst = hFdCngCom->sidNoiseEst; + int16_t j, k; + float factor; + float lsp_cng[M]; +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + int16_t L_frame, last_L_frame; + int32_t sr_core; + + wmops_sub_start( "ApplyFdCng" ); + + /* limit L_frame and core fs values for MDCT-Stereo modes which can have higher core sampling than 16kHz, but use a downsampled buffer */ + L_frame = min( st->L_frame, L_FRAME16k ); + last_L_frame = min( st->last_L_frame, L_FRAME16k ); + sr_core = min( st->sr_core, INT_FS_16k ); +#endif + + if ( hFdCngCom->frame_type_previous == ACTIVE_FRAME ) + { + hFdCngCom->inactive_frame_counter = 0; + } + + if ( st->element_mode == IVAS_CPE_TD ) + { + hFdCngDec->flag_dtx_mode = hFdCngDec->flag_dtx_mode || st->first_CNG; + } + + switch ( st->m_frame_type ) + { + + case ACTIVE_FRAME: + /************************** + * ACTIVE_FRAME at DECODER * + **************************/ + + hFdCngCom->inactive_frame_counter = 0; + hFdCngCom->sid_frame_counter = 0; + /* set noise estimation inactive during concealment, as no update with noise generated by concealment should be performed. */ + /* set noise estimation inactive when we have bit errors, as no update with noise generated by corrupt frame (biterror) should be performed. */ + if ( concealWholeFrame == 0 && +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ( timeDomainInput == NULL || + ( *timeDomainInput( -FLT_MAX ) && + *( timeDomainInput + hFdCngCom->frameSize - 1 ) < FLT_MAX && + *( timeDomainInput + hFdCngCom->frameSize - 1 ) > ( -FLT_MAX ) ) ) && +#else + *timeDomainInput( -FLT_MAX ) && + *( timeDomainInput + hFdCngCom->frameSize - 1 ) < FLT_MAX && + *( timeDomainInput + hFdCngCom->frameSize - 1 ) > ( -FLT_MAX ) && +#endif + ( ( ( ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT && hFdCngDec->flag_dtx_mode ) || !st->VAD ) && + !( st->cng_type == LP_CNG && hFdCngDec->flag_dtx_mode ) && ( is_music == 0 ) ) || + ( st->element_mode == IVAS_CPE_TD ) ) && + ( !st->BER_detect ) ) + { + /* Perform noise estimation at the decoder */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + perform_noise_estimation_dec( timeDomainInput, powerSpectrum, hFdCngDec, st->element_mode, st->bwidth, L_frame, last_L_frame, st->last_core_brate, st->VAD ); +#else + perform_noise_estimation_dec( timeDomainInput, hFdCngDec, st->element_mode, st->bwidth, st->L_frame, st->last_L_frame, st->last_core_brate, st->VAD ); +#endif + + if ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT ) + { + /* Update the shaping parameters */ + scalebands( hFdCngDec->msNoiseEst, hFdCngDec->part_shaping, hFdCngDec->nFFTpart_shaping, hFdCngDec->midband_shaping, hFdCngDec->nFFTpart_shaping, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngDec->bandNoiseShape, 1 ); + } + + /* Update CNG levels */ + if ( hFdCngDec->flag_dtx_mode && st->cng_type == FD_CNG ) + { + bandcombinepow( hFdCngDec->bandNoiseShape, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngCom->part, hFdCngCom->nFFTpart, hFdCngCom->psize_inv, hFdCngDec->partNoiseShape ); /* This needs to be done only once per inactive phase */ + + j = 0; + for ( k = 0; k < hFdCngCom->nFFTpart; k++ ) + { + factor = ( hFdCngCom->sidNoiseEst[k] + DELTA ) / ( hFdCngDec->partNoiseShape[k] + DELTA ); + for ( ; j <= hFdCngCom->part[k]; j++ ) + { + cngNoiseLevel[j] = hFdCngDec->bandNoiseShape[j] * factor; + } + } + } + else + { + /* This sets the new CNG levels until a SID update overwrites it */ + if ( !( st->element_mode == IVAS_CPE_TD ) || ( st->element_mode == IVAS_CPE_TD && !hFdCngDec->flag_dtx_mode && !st->VAD ) ) + { + mvr2r( hFdCngDec->bandNoiseShape, cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand ); /* This sets the new CNG levels until a SID update overwrites it */ + } + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->element_mode == IVAS_CPE_MDCT && timeDomainInput == NULL ) + { + st->hTcxDec->CngLevelBackgroundTrace_bfi = sqrtf( sum_f( cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / NORM_MDCT_FACTOR ); + } + else + { + st->hTcxDec->CngLevelBackgroundTrace_bfi = (float) sqrt( ( sum_f( cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 * hFdCngCom->fftlen ) / L_frame ); + } +#endif + st->cngTDLevel = (float) sqrt( ( sum_f( cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 * hFdCngCom->fftlen ) / st->L_frame ); + } + else if ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) + { + if ( hFdCngCom->active_frame_counter > 0 ) + { + /* Perform noise estimation in active frames in the decoder for downward updates */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + perform_noise_estimation_dec( timeDomainInput, powerSpectrum, hFdCngDec, st->element_mode, st->bwidth, L_frame, last_L_frame, st->last_core_brate, st->VAD ); +#else + perform_noise_estimation_dec( timeDomainInput, hFdCngDec, st->element_mode, st->bwidth, st->L_frame, st->last_L_frame, st->last_core_brate, st->VAD ); +#endif + } + } + + if ( ( concealWholeFrame == 1 ) && ( st->nbLostCmpt == 1 ) && sum_f( cngNoiseLevel + hFdCngCom->startBand, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) > 0.01f ) + { +#ifndef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + /* update lsf cng estimate for concealment. Do that during concealment, in order to avoid addition clean channel complexity*/ + lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, 0 ); +#else + if ( st->element_mode == IVAS_CPE_MDCT && st->core != ACELP_CORE ) + { + float scf[SNS_NPTS]; + float scf_int[FDNS_NPTS]; + float whitenend_noise_shape[L_FRAME16k]; + int16_t inc, start_idx, stop_idx; + float *noiseLevelPtr; + + wmops_sub_start( "get scfs for bg" ); + + inc = ( st->core > TCX_20 ) ? 2 : 1; + start_idx = hFdCngCom->startBand / inc; + stop_idx = L_frame / inc; + noiseLevelPtr = cngNoiseLevel; + + set_zero( whitenend_noise_shape, start_idx ); + for ( j = start_idx; j < stop_idx; j++, noiseLevelPtr += inc ) + { + whitenend_noise_shape[j] = *noiseLevelPtr; + } + if ( st->core == TCX_20_CORE ) + { + st->hTonalMDCTConc->psychParams = &st->hTonalMDCTConc->psychParamsTCX20; + } + else + { + st->hTonalMDCTConc->psychParams = &st->hTonalMDCTConc->psychParamsTCX10; + } + + sns_compute_scf( whitenend_noise_shape, st->hTonalMDCTConc->psychParams, L_frame, scf ); + sns_interpolate_scalefactors( scf_int, scf, ENC ); + sns_interpolate_scalefactors( st->hTonalMDCTConc->scaleFactorsBackground, scf, DEC ); + sns_shape_spectrum( whitenend_noise_shape, st->hTonalMDCTConc->psychParams, scf_int, L_frame ); + + mvr2r( whitenend_noise_shape + start_idx, cngNoiseLevel, stop_idx - start_idx ); + wmops_sub_end(); + } + else if ( st->element_mode != IVAS_CPE_MDCT ) + { + lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, 0.f ); + a2lsp_stab( hFdCngCom->A_cng, lsp_cng, st->lspold_cng ); + mvr2r( lsp_cng, st->lspold_cng, M ); + lsp2lsf( lsp_cng, st->lsf_cng, M, sr_core ); + } +#endif + +#ifndef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + a2lsp_stab( hFdCngCom->A_cng, lsp_cng, st->lspold_cng ); + mvr2r( lsp_cng, st->lspold_cng, M ); + + lsp2lsf( lsp_cng, st->lsf_cng, M, st->sr_core ); +#endif + st->plcBackgroundNoiseUpdated = 1; + } + break; + + case SID_FRAME: + hFdCngDec->flag_dtx_mode = 1; + /* FALLTHRU */ + + case ZERO_FRAME: + + if ( st != NULL && st->cng_type == LP_CNG ) + { + /* Perform noise estimation on inactive phase at the decoder */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + perform_noise_estimation_dec( timeDomainInput, powerSpectrum, hFdCngDec, st->element_mode, st->bwidth, L_frame, last_L_frame, st->last_core_brate, st->VAD ); +#else + perform_noise_estimation_dec( timeDomainInput, hFdCngDec, st->element_mode, st->bwidth, st->L_frame, st->last_L_frame, st->last_core_brate, st->VAD ); +#endif + + if ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT ) + { + /* Update the shaping parameters */ + scalebands( hFdCngDec->msNoiseEst, hFdCngDec->part_shaping, hFdCngDec->nFFTpart_shaping, hFdCngDec->midband_shaping, hFdCngDec->nFFTpart_shaping, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngDec->bandNoiseShape, 1 ); + } + + /* This sets the new CNG levels until a SID update overwrites it */ + mvr2r( hFdCngDec->bandNoiseShape, cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand ); /* This sets the new CNG levels until a SID update overwrites it */ + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + st->cngTDLevel = (float) sqrt( ( sum_f( cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 * hFdCngCom->fftlen ) / L_frame ); +#else + st->cngTDLevel = (float) sqrt( ( sum_f( cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 * hFdCngCom->fftlen ) / st->L_frame ); +#endif + break; + } + + hFdCngCom->inactive_frame_counter++; + + /************************************* + * SID_FRAME or ZERO_FRAME at DECODER * + *************************************/ + + /* Detect first non-active frame */ + if ( hFdCngCom->inactive_frame_counter == 1 ) + { + /* Compute the fine spectral structure of the comfort noise shape using the decoder-side noise estimates */ + bandcombinepow( hFdCngDec->bandNoiseShape, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngCom->part, hFdCngCom->nFFTpart, hFdCngCom->psize_inv, hFdCngDec->partNoiseShape ); + + if ( st->element_mode == IVAS_CPE_DFT ) + { + mvr2r( st->hFdCngDec->hFdCngCom->sidNoiseEst, st->hFdCngDec->hFdCngCom->sidNoiseEstLp, NPART ); + } + } + + if ( st->m_frame_type == SID_FRAME ) + { + if ( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) + { + /* At initialization, interpolate the bin/band-wise levels from the partition levels */ + scalebands( sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, cngNoiseLevel, 1 ); + } + else + { + if ( st->element_mode == IVAS_CPE_DFT ) + { + sidNoiseEst = hFdCngCom->sidNoiseEstLp; + } + + /* Interpolate the CLDFB band levels from the SID (partition) levels */ + if ( hFdCngCom->regularStopBand > hFdCngCom->numCoreBands ) + { + scalebands( sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, cngNoiseLevel, 0 ); + } + + + /* Shape the SID noise levels in each FFT bin */ + j = 0; + for ( k = 0; k < hFdCngCom->nFFTpart; k++ ) + { + factor = ( sidNoiseEst[k] + DELTA ) / ( hFdCngDec->partNoiseShape[k] + DELTA ); + for ( ; j <= hFdCngCom->part[k]; j++ ) + { + cngNoiseLevel[j] = hFdCngDec->bandNoiseShape[j] * factor; + } + } + } + } + else if ( st->element_mode == IVAS_CPE_DFT ) + { + if ( !( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) ) + { + sidNoiseEst = hFdCngCom->sidNoiseEstLp; + j = 0; + for ( k = 0; k < hFdCngCom->nFFTpart; k++ ) + { + factor = ( sidNoiseEst[k] + DELTA ) / ( hFdCngDec->partNoiseShape[k] + DELTA ); + for ( ; j <= hFdCngCom->part[k]; j++ ) + { + cngNoiseLevel[j] = hFdCngDec->bandNoiseShape[j] * factor; + } + } + } + } + if ( st->codec_mode == MODE2 ) + { + /* Generate comfort noise during SID or zero frames */ + generate_comfort_noise_dec( realBuffer, imagBuffer, st, -1 ); + } + + break; + + default: + break; + } +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + + wmops_sub_end(); +#endif + + return; +} + + +/*------------------------------------------------------------------- + * perform_noise_estimation_dec() + * + * Perform noise estimation at the decoder + *-------------------------------------------------------------------*/ + +void perform_noise_estimation_dec( + const float *timeDomainInput, +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float *power_spectrum, +#endif + HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure containing all buffers and variables */ + const int16_t element_mode, /* i : element mode */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t L_frame, /* i : frame length at internal Fs */ + const int16_t last_L_frame, /* i : frame length of the last frame at internal Fs */ + const int32_t last_core_brate, /* i : previous frame core bitrate */ + const int16_t VAD /* i : VAD flag in the decoder */ +) +{ + float *ptr_r; + float *ptr_i; + int16_t startBand = hFdCngDec->hFdCngCom->startBand; + int16_t stopFFTbin = hFdCngDec->hFdCngCom->stopFFTbin; + float *fftBuffer = hFdCngDec->hFdCngCom->fftBuffer; + float *periodog = hFdCngDec->hFdCngCom->periodog; + float *ptr_per = periodog; + float *msPeriodog = hFdCngDec->msPeriodog; + float *msNoiseEst = hFdCngDec->msNoiseEst; + + int16_t *part = hFdCngDec->part_shaping; + int16_t npart = hFdCngDec->npart_shaping; + int16_t nFFTpart = hFdCngDec->nFFTpart_shaping; + float *psize_inv = hFdCngDec->psize_inv_shaping; + float *psize = hFdCngDec->psize_shaping; + float *msLogPeriodog = hFdCngDec->msLogPeriodog; + float *msLogNoiseEst = hFdCngDec->msLogNoiseEst; + int16_t i; + float enr, enr_tot, enr_tot0, enr_ratio, alpha; + int16_t p; + float temp, ftemp, delta; + float wght; + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( !( element_mode == IVAS_CPE_MDCT && power_spectrum != NULL ) ) + { + /* Perform STFT analysis */ + AnalysisSTFT( timeDomainInput, fftBuffer, hFdCngDec->hFdCngCom ); + } +#else + /* Perform STFT analysis */ + AnalysisSTFT( timeDomainInput, fftBuffer, hFdCngDec->hFdCngCom ); +#endif + + if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) + { + /* Calculate periodogram (squared magnitude in each FFT bin) */ + if ( startBand == 0 ) + { + ( *ptr_per ) = fftBuffer[0] * fftBuffer[0]; + ptr_per++; + ptr_r = fftBuffer + 2; + } + else + { + ptr_r = fftBuffer + 2 * startBand; + } + + ptr_i = ptr_r + 1; + + for ( ; ptr_per < periodog + stopFFTbin - startBand; ptr_per++ ) + { + ( *ptr_per ) = ( *ptr_r ) * ( *ptr_r ) + ( *ptr_i ) * ( *ptr_i ); + ptr_r += 2; + ptr_i += 2; + } + + /* Rescale to get energy/sample: it should be 2*(1/N)*(2/N), parseval relation with 1/N,*2 for nrg computed till Nyquist only, 2/N as windowed samples correspond to half a frame*/ + v_multc( periodog, 4.f / (float) ( hFdCngDec->hFdCngCom->fftlen * hFdCngDec->hFdCngCom->fftlen ), periodog, stopFFTbin - startBand ); + + /* Combine bins of power spectrum into partitions */ + i = 0; + for ( p = 0; p < npart; p++ ) + { + + /* calculate mean over all bins in power partition */ + temp = 0; + for ( ; i <= part[p]; i++ ) + { + temp += periodog[i]; + } + msPeriodog[p] = temp * psize_inv[p]; + } + + /* compensate for the loss of variance - don't do when first noise update is not completed yet due to risk of msPeriodog[p] < 0 */ + if ( hFdCngDec->first_cna_noise_updated ) + { + i = 0; + for ( p = 0; p < npart; p++ ) + { + /* calculate variance over all bins in power partition */ + temp = 0; + for ( ; i <= part[p]; i++ ) + { + delta = periodog[i] - msPeriodog[p]; + temp += delta * delta; + } + temp *= psize_inv[p]; + + /* compensate for the loss of variance */ + msPeriodog[p] = (float) ( msPeriodog[p] + sqrt( temp ) * rand_gauss( &ftemp, &hFdCngDec->cna_seed ) ); + + if ( msPeriodog[p] < 1e-5f ) + { + msPeriodog[p] = 1e-5f; + } + } + } + + /* calculate total energy (short-term and long-term) */ + enr_tot = sum_f( msPeriodog, npart ) + EPSILON; + enr_tot0 = sum_f( msNoiseEst, npart ) + EPSILON; + + /* update short-term periodogram on larger partitions */ + for ( p = CNA_ACT_DN_LARGE_PARTITION; p < npart; p++ ) + { + if ( L_frame != last_L_frame || last_core_brate <= SID_2k40 ) + { + /* core Fs has changed or last frame was SID/NO_DATA -> re-initialize short-term periodogram */ + hFdCngDec->msPeriodog_ST[p] = msPeriodog[p]; + } + else + { + hFdCngDec->msPeriodog_ST[p] = (float) ( ST_PERIODOG_FACT * hFdCngDec->msPeriodog_ST[p] + ( 1 - ST_PERIODOG_FACT ) * msPeriodog[p] ); + } + } + + /* core Fs has changed -> partitions have changed -> re-calculate long-term periodogram */ + /* part L_FRAME16k L_FRAME */ + /* ... */ + /* [55] 146 146 */ + /* [56] 174 160 */ + /* [57] 210 174 */ + /* [58] 254 190 */ + /* [59] 306 210 */ + /* [60] 317 230 */ + /* [61] 253 */ + + if ( last_L_frame == L_FRAME16k && L_frame == L_FRAME ) + { + msNoiseEst[61] = msNoiseEst[58]; + msNoiseEst[60] = min( msNoiseEst[58], msNoiseEst[57] ); + msNoiseEst[59] = msNoiseEst[57]; + msNoiseEst[58] = msNoiseEst[56]; + msNoiseEst[57] = msNoiseEst[56]; + msNoiseEst[56] = min( msNoiseEst[56], msNoiseEst[55] ); + } + else if ( last_L_frame == L_FRAME && L_frame == L_FRAME16k ) + { + msNoiseEst[56] = min( msNoiseEst[56], msNoiseEst[57] ); + msNoiseEst[57] = min( msNoiseEst[58], msNoiseEst[59] ); + msNoiseEst[58] = min( msNoiseEst[60], msNoiseEst[61] ); + msNoiseEst[59] = 0.0f; + msNoiseEst[60] = 0.0f; + msNoiseEst[61] = 0.0f; + + hFdCngDec->ms_cnt_bw_up = FIRST_CNA_NOISE_UPD_FRAMES; + } + + /* Smooth with IIR filter */ + if ( !hFdCngDec->first_cna_noise_updated ) + { + if ( !VAD ) + { + /* background noise update with moving average */ + alpha = 1.0f / ( hFdCngDec->first_cna_noise_update_cnt + 1 ); + for ( p = 0; p < npart; p++ ) + { + msNoiseEst[p] = ( 1 - alpha ) * msNoiseEst[p] + alpha * msPeriodog[p]; + } + + /* check, if we reached the required number of first CNA noise update frames */ + if ( hFdCngDec->first_cna_noise_update_cnt < FIRST_CNA_NOISE_UPD_FRAMES - 1 ) + { + hFdCngDec->first_cna_noise_update_cnt++; + } + else + { + hFdCngDec->first_cna_noise_updated = 1; + if ( hFdCngDec->hFdCngCom->msFrCnt_init_counter == 0 ) + { + hFdCngDec->hFdCngCom->msFrCnt_init_counter = 1; + } + } + } + else + { + hFdCngDec->first_cna_noise_update_cnt = 0; + } + } + else + { + hFdCngDec->hFdCngCom->msFrCnt_init_counter = 1; + if ( VAD ) + { + /* no updates during active frames except for significant energy drops */ + enr_ratio = enr_tot / enr_tot0; + if ( enr_ratio < 0.5f ) + { + /* total energy significantly decreases during active frames -> downward update */ + wght = lin_interp( enr_ratio, 0.0f, 0.8f, 0.5f, 0.95f, 1 ); + for ( p = 0; p < npart; p++ ) + { + if ( msPeriodog[p] < msNoiseEst[p] ) + { + msNoiseEst[p] = wght * msNoiseEst[p] + ( 1 - wght ) * msPeriodog[p]; + } + } + } + else + { + /* energy significantly decreases in one of the larger partitions during active frames -> downward update */ + for ( p = CNA_ACT_DN_LARGE_PARTITION; p < npart; p++ ) + { + if ( hFdCngDec->msPeriodog_ST[p] < msNoiseEst[p] ) + { + msNoiseEst[p] = (float) ( CNA_ACT_DN_FACT * msNoiseEst[p] + ( 1 - CNA_ACT_DN_FACT ) * hFdCngDec->msPeriodog_ST[p] ); + } + } + } + } + else + { + + if ( bwidth >= WB && hFdCngDec->ms_last_inactive_bwidth == NB ) + { + /* bandwidth increased -> set counter for fast initilization */ + hFdCngDec->ms_cnt_bw_up = FIRST_CNA_NOISE_UPD_FRAMES; + } + hFdCngDec->ms_last_inactive_bwidth = bwidth; + /* update background noise during inactive frames */ + ptr_per = msNoiseEst; + for ( p = 0; p < npart; p++ ) + { + enr = msPeriodog[p]; + alpha = 0.95f; + /* bandwidth increased -> do fast re-initilization */ + if ( hFdCngDec->ms_cnt_bw_up > 0 && p > 55 ) + { + alpha = 1.0f / ( hFdCngDec->ms_cnt_bw_up + 1 ); + } + else if ( enr < *ptr_per && part[p] == 1 ) + { + /* faster downward update for single-bin partitions */ + alpha = 0.8f; + } + else if ( enr > 2.0f * ( *ptr_per ) ) + { + /* prevent abrupt upward updates */ + enr = 2.0f * ( *ptr_per ); + } + + /* IIR smoothing */ + *ptr_per *= alpha; + *ptr_per += ( 1 - alpha ) * enr; + ptr_per++; + } + + if ( hFdCngDec->ms_cnt_bw_up > 0 ) + { + hFdCngDec->ms_cnt_bw_up--; + } + } + } + + mvr2r( msNoiseEst, hFdCngDec->msPsd, npart ); + + /* Expand partitions into bins of power spectrum */ + scalebands( msNoiseEst, part, nFFTpart, hFdCngDec->midband_shaping, nFFTpart, stopFFTbin - startBand, hFdCngDec->bandNoiseShape, 1 ); + + mvr2r( hFdCngDec->bandNoiseShape, &hFdCngDec->smoothed_psd[startBand], stopFFTbin - startBand ); + set_zero( &hFdCngDec->smoothed_psd[stopFFTbin], L_FRAME16k - stopFFTbin ); + } + else + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( element_mode == IVAS_CPE_MDCT && power_spectrum != NULL ) + { + /* use power spectrum calculated in the MDCT-domain instead of calculating new power spectrum */ + periodog = power_spectrum; + } + else + { + /* Compute the squared magnitude in each FFT bin */ + if ( startBand == 0 ) + { + ( *ptr_per ) = fftBuffer[0] * fftBuffer[0]; /* DC component */ + ptr_per++; + ptr_r = fftBuffer + 2; + } + else + { + ptr_r = fftBuffer + 2 * startBand; + } + + ptr_i = ptr_r + 1; + + for ( ; ptr_per < periodog + stopFFTbin - startBand; ptr_per++ ) + { + ( *ptr_per ) = ( *ptr_r ) * ( *ptr_r ) + ( *ptr_i ) * ( *ptr_i ); + ptr_r += 2; + ptr_i += 2; + } + /* Nyquist frequency is discarded */ + + /* Rescale to get energy/sample: it should be 2*(1/N)*(2/N), parseval relation with 1/N,*2 for nrg computed till Nyquist only, 2/N as windowed samples correspond to half a frame*/ + v_multc( periodog, 4.f / (float) ( hFdCngDec->hFdCngCom->fftlen * hFdCngDec->hFdCngCom->fftlen ), periodog, stopFFTbin - startBand ); + } +#else + /* Compute the squared magnitude in each FFT bin */ + if ( startBand == 0 ) + { + ( *ptr_per ) = fftBuffer[0] * fftBuffer[0]; /* DC component */ + ptr_per++; + ptr_r = fftBuffer + 2; + } + else + { + ptr_r = fftBuffer + 2 * startBand; + } + + ptr_i = ptr_r + 1; + + for ( ; ptr_per < periodog + stopFFTbin - startBand; ptr_per++ ) + { + ( *ptr_per ) = ( *ptr_r ) * ( *ptr_r ) + ( *ptr_i ) * ( *ptr_i ); + ptr_r += 2; + ptr_i += 2; + } + /* Nyquist frequency is discarded */ + + /* Rescale to get energy/sample: it should be 2*(1/N)*(2/N), parseval relation with 1/N,*2 for nrg computed till Nyquist only, 2/N as windowed samples correspond to half a frame*/ + v_multc( periodog, 4.f / (float) ( hFdCngDec->hFdCngCom->fftlen * hFdCngDec->hFdCngCom->fftlen ), periodog, stopFFTbin - startBand ); +#endif + + /* Adjust to the desired frequency resolution by averaging over spectral partitions for SID transmission */ + bandcombinepow( periodog, stopFFTbin - startBand, part, npart, psize_inv, msPeriodog ); + + /* Compress MS inputs */ + compress_range( msPeriodog, msLogPeriodog, npart ); + + /* Call the minimum statistics routine for noise estimation */ + minimum_statistics( npart, nFFTpart, psize, msLogPeriodog, hFdCngDec->msNoiseFloor, msLogNoiseEst, hFdCngDec->msAlpha, hFdCngDec->msPsd, hFdCngDec->msPsdFirstMoment, hFdCngDec->msPsdSecondMoment, hFdCngDec->msMinBuf, hFdCngDec->msBminWin, hFdCngDec->msBminSubWin, hFdCngDec->msCurrentMin, hFdCngDec->msCurrentMinOut, hFdCngDec->msCurrentMinSubWindow, hFdCngDec->msLocalMinFlag, hFdCngDec->msNewMinFlag, hFdCngDec->msPeriodogBuf, &( hFdCngDec->msPeriodogBufPtr ), hFdCngDec->hFdCngCom, + DEC, element_mode ); + + /* Expand MS outputs */ + expand_range( msLogNoiseEst, msNoiseEst, npart ); + } + + return; +} + + +/*------------------------------------------------------------------- + * FdCng_decodeSID() + * + * Decode the FD-CNG bitstream + *-------------------------------------------------------------------*/ + +void FdCng_decodeSID( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + int16_t N; + float *sidNoiseEst; + float gain; + int16_t i, index; + float v[32]; + int16_t indices[32]; + HANDLE_FD_CNG_COM hFdCngCom; + + const float *const *codebooks = ( st->element_mode == EVS_MONO ) ? cdk_37bits : cdk_37bits_ivas; + const float gain_q_offset = ( st->element_mode == EVS_MONO ) ? GAIN_Q_OFFSET_EVS : GAIN_Q_OFFSET_IVAS; + + hFdCngCom = ( st->hFdCngDec )->hFdCngCom; + + sidNoiseEst = hFdCngCom->sidNoiseEst; + + N = hFdCngCom->npart; + gain = 0.0f; + hFdCngCom->sid_frame_counter++; + + /* Read bitstream */ + for ( i = 0; i < FD_CNG_stages_37bits; i++ ) + { + indices[i] = get_next_indice( st, bits_37bits[i] ); + } + + index = get_next_indice( st, 7 ); + + /* MSVQ decoder */ + msvq_dec( codebooks, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, v, NULL ); + + /* Decode gain */ + gain = ( (float) index - gain_q_offset ) / 1.5f; + + /* Apply gain and undo log */ + for ( i = 0; i < N; i++ ) + { + sidNoiseEst[i] = (float) pow( 10.f, ( v[i] + gain ) / 10.f ); + } + + /* NB last band energy compensation */ + + if ( hFdCngCom->CngBandwidth == NB ) + { + sidNoiseEst[N - 1] *= NB_LAST_BAND_SCALE; + } + + if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) + { + sidNoiseEst[N - 1] *= SWB_13k2_LAST_BAND_SCALE; + } + + scalebands( sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, hFdCngCom->cngNoiseLevel, 1 ); + + lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, st->preemph_fac ); + + return; +} + + +/*------------------------------------------------------------------- + * noisy_speech_detection() + * + * + *-------------------------------------------------------------------*/ + +void noisy_speech_detection( + HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure */ + const int16_t vad, /* i : VAD flag */ + const float syn[] /* i : input time-domain frame */ +) +{ + float tmp; + + if ( vad == 0 ) + { + tmp = dotp( hFdCngDec->msNoiseEst, hFdCngDec->psize_shaping, hFdCngDec->nFFTpart_shaping ); + hFdCngDec->lp_noise = 0.995f * hFdCngDec->lp_noise + 0.005f * 10.f * (float) log10( tmp + DELTA ); + } + else + { + tmp = dotp( syn, syn, hFdCngDec->hFdCngCom->frameSize ) * 2.f / hFdCngDec->hFdCngCom->frameSize; + hFdCngDec->lp_speech = 0.995f * hFdCngDec->lp_speech + 0.005f * 10.f * (float) log10( tmp + DELTA ); + } + + tmp = hFdCngDec->lp_speech - 45.f; + if ( hFdCngDec->lp_noise < tmp ) + { + hFdCngDec->lp_noise = tmp; + } + + hFdCngDec->hFdCngCom->flag_noisy_speech = ( hFdCngDec->lp_speech - hFdCngDec->lp_noise ) < 28.f; + + return; +} + + +/*------------------------------------------------------------------- + * generate_comfort_noise_dec() + * + * Generate the comfort noise based on the target noise level + *-------------------------------------------------------------------*/ + +void generate_comfort_noise_dec( + float **bufferReal, /* o : Real part of input bands */ + float **bufferImag, /* o : Imaginary part of input bands */ + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t nchan_out /* i : number of output channels */ +) +{ + int16_t i, j; + float *ptr_r, *ptr_i; + HANDLE_FD_CNG_DEC hFdCngDec = st->hFdCngDec; + HANDLE_FD_CNG_COM hFdCngCom = hFdCngDec->hFdCngCom; + float *cngNoiseLevel = hFdCngCom->cngNoiseLevel; + float *ptr_level = cngNoiseLevel; + int16_t *seed = &( hFdCngCom->seed ); + int16_t *seed2; + float c1, c2; + float tmp1, tmp2; + float scale, scaleCldfb; + float *fftBuffer = hFdCngCom->fftBuffer; + float *timeDomainOutput = hFdCngCom->timeDomainBuffer; + int16_t tcx_transition; + float enr, att; + + scale = 1.f; + scaleCldfb = CLDFB_SCALING / hFdCngCom->scalingFactor; + + c1 = (float) sqrt( hFdCngCom->coherence ); + c2 = (float) sqrt( 1 - hFdCngCom->coherence ); + + seed2 = &( hFdCngCom->seed2 ); + if ( st->element_mode == IVAS_CPE_MDCT && st->idchan == 1 ) + { + seed2 = &( hFdCngCom->seed3 ); + } + + /* Generate Gaussian random noise in real and imaginary parts of the FFT bins + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each bin */ + + if ( hFdCngCom->startBand == 0 ) + { + if ( st->element_mode == IVAS_CPE_MDCT ) + { + rand_gauss( &tmp1, seed ); + rand_gauss( &tmp2, seed2 ); + fftBuffer[0] = tmp1 * c1 + tmp2 * c2; + } + else + { + rand_gauss( &fftBuffer[0], seed ); + } + fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ + ptr_level++; + ptr_r = fftBuffer + 2; + } + else + { + fftBuffer[0] = 0.f; + set_f( fftBuffer + 2, 0.0f, 2 * ( hFdCngCom->startBand - 1 ) ); + ptr_r = fftBuffer + 2 * hFdCngCom->startBand; + } + + ptr_i = ptr_r + 1; + for ( ; ptr_level < cngNoiseLevel + hFdCngCom->stopFFTbin - hFdCngCom->startBand; ptr_level++ ) + { + /* Real part in FFT bins */ + if ( st->element_mode == IVAS_CPE_MDCT ) + { + rand_gauss( &tmp1, seed ); + rand_gauss( &tmp2, seed2 ); + *ptr_r = tmp1 * c1 + tmp2 * c2; + } + else + { + rand_gauss( ptr_r, seed ); + } + ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_r += 2; + + /* Imaginary part in FFT bins */ + if ( st->element_mode == IVAS_CPE_MDCT ) + { + rand_gauss( &tmp1, seed ); + rand_gauss( &tmp2, seed2 ); + *ptr_i = tmp1 * c1 + tmp2 * c2; + } + else + { + rand_gauss( ptr_i, seed ); + } + ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_i += 2; + } + + /* Remaining FFT bins are set to zero */ + set_f( fftBuffer + 2 * hFdCngCom->stopFFTbin, 0.0f, hFdCngCom->fftlen - 2 * hFdCngCom->stopFFTbin ); + + /* Nyquist frequency is discarded */ + fftBuffer[1] = 0.f; + + /* If previous frame is active, reset the overlap-add buffer */ + tcx_transition = 0; + if ( hFdCngCom->frame_type_previous == ACTIVE_FRAME ) + { + set_f( hFdCngCom->olapBufferSynth, 0.0f, hFdCngCom->fftlen ); + if ( ( st->core > ACELP_CORE && st->codec_mode == MODE2 ) || st->codec_mode == MODE1 ) + { + tcx_transition = 1; + } + } + + /* Perform STFT synthesis */ + SynthesisSTFT( fftBuffer, timeDomainOutput, hFdCngCom->olapBufferSynth, hFdCngCom->olapWinSyn, tcx_transition, hFdCngCom, st->element_mode, nchan_out ); + + /* update CNG excitation energy for LP_CNG */ + + /* calculate the residual signal energy */ + enr = dotp( hFdCngCom->exc_cng, hFdCngCom->exc_cng, hFdCngCom->frameSize ) / hFdCngCom->frameSize; + + /* convert log2 of residual signal energy */ + enr = (float) log10( enr + 0.1f ) / (float) log10( 2.0f ); + + /* decrease the energy in case of WB input */ + if ( st->bwidth != NB ) + { + if ( st->bwidth == WB ) + { + if ( st->CNG_mode >= 0 ) + { + /* Bitrate adapted attenuation */ + att = ENR_ATT[st->CNG_mode]; + } + else + { + /* Use least attenuation for higher bitrates */ + att = ENR_ATT[4]; + } + } + else + { + att = 1.5f; + } + + enr -= att; + } + + st->lp_ener = (float) ( 0.8f * st->lp_ener + 0.2f * pow( 2.0f, enr ) ); + + /* Generate Gaussian random noise in real and imaginary parts of the CLDFB bands + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each band */ + + if ( bufferReal != NULL && hFdCngCom->numCoreBands < hFdCngCom->regularStopBand ) + { + for ( j = hFdCngCom->numCoreBands; j < hFdCngCom->regularStopBand; j++ ) + { + for ( i = 0; i < hFdCngCom->numSlots; i++ ) + { + /* Real part in CLDFB band */ + if ( st->element_mode == IVAS_CPE_MDCT ) + { + rand_gauss( &tmp1, seed ); + rand_gauss( &tmp2, seed2 ); + bufferReal[i][j] = tmp1 * c1 + tmp2 * c2; + } + else + { + rand_gauss( &bufferReal[i][j], seed ); + } + bufferReal[i][j] *= (float) sqrt( ( scaleCldfb * *ptr_level ) * 0.5f ); + + /* Imaginary part in CLDFB band */ + if ( st->element_mode == IVAS_CPE_MDCT ) + { + rand_gauss( &tmp1, seed ); + rand_gauss( &tmp2, seed2 ); + bufferImag[i][j] = tmp1 * c1 + tmp2 * c2; + } + else + { + rand_gauss( &bufferImag[i][j], seed ); + } + bufferImag[i][j] *= (float) sqrt( ( scaleCldfb * *ptr_level ) * 0.5f ); + } + ptr_level++; + } + } + + /* Overlap-add when previous frame is active */ + if ( hFdCngCom->frame_type_previous == ACTIVE_FRAME && st->codec_mode == MODE2 ) + { + float noise[2048], old_exc_ener = 0.f, gain = 0.f, tmp; + int16_t N = hFdCngCom->frameSize; + int16_t seed_loc = hFdCngCom->seed; + float *old_exc, old_Aq[M + 1], *old_syn_pe, old_syn; + + if ( st->core > ACELP_CORE ) + { + tcx_windowing_synthesis_current_frame( timeDomainOutput, st->hTcxCfg->tcx_mdct_window, /*Keep sine windows for limiting Time modulation*/ + st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 0, st->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : st->hTcxCfg->tcx_last_overlap_mode, NULL, NULL, NULL, NULL, NULL, N / 2, st->hTcxCfg->tcx_offset < 0 ? -st->hTcxCfg->tcx_offset : 0, 1, 0, 0 ); + + if ( st->hTcxCfg->last_aldo ) + { + for ( i = 0; i < ( hFdCngCom->frameSize - NS2SA( st->sr_core, N_ZERO_MDCT_NS ) ); i++ ) + { + timeDomainOutput[i] += st->hHQ_core->old_outLB[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )]; + } + } + else + { + tcx_windowing_synthesis_past_frame( st->hTcxDec->syn_Overl, st->hTcxCfg->tcx_mdct_window, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->hTcxCfg->tcx_last_overlap_mode ); + + for ( i = 0; i < st->hTcxCfg->tcx_mdct_window_length; i++ ) + { + timeDomainOutput[i] += st->hTcxDec->syn_Overl[i]; + } + } + } + else + { + mvr2r( st->old_Aq_12_8, old_Aq, M + 1 ); + old_exc = st->old_exc + L_EXC_MEM_DEC - ( N / 2 ); + old_syn_pe = st->mem_syn2; + old_syn = st->syn[M]; + + for ( i = 0; i < N / 2; i++ ) + { + old_exc_ener += old_exc[i] * old_exc[i]; + } + + old_exc_ener = (float) sqrt( old_exc_ener / (float) ( N / 2 ) ); + + for ( i = 0; i < N; i++ ) + { + rand_gauss( &( noise[i] ), &( seed_loc ) ); + gain += noise[i] * noise[i]; + } + + gain = old_exc_ener / (float) sqrt( gain / (float) N ); + + for ( i = 0; i < N; i++ ) + { + noise[i] *= gain; + } + + syn_filt( old_Aq, M, noise, noise, N, old_syn_pe, 0 ); + + tmp = old_syn; + + deemph( noise, st->preemph_fac, N, &tmp ); + + for ( i = 0; i < N / 2; i++ ) + { + timeDomainOutput[i] += noise[i] * hFdCngCom->olapWinSyn[N / 2 + i]; + } + } + } + + return; +} + + +/*------------------------------------------------------------------- + * generate_comfort_noise_dec_hf() + * + * Generate the comfort noise based on the target noise level for the CLDFB part + *-------------------------------------------------------------------*/ + +void generate_comfort_noise_dec_hf( + float **bufferReal, /* o : Real part of input bands */ + float **bufferImag, /* o : Imaginary part of input bands */ + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +) +{ + int16_t i, j; + float *ptr_level; + int16_t *seed = &( hFdCngCom->seed ); + float scale = CLDFB_SCALING / hFdCngCom->scalingFactor; + + ptr_level = hFdCngCom->cngNoiseLevel + hFdCngCom->stopFFTbin - hFdCngCom->startBand; + /* + Generate Gaussian random noise in real and imaginary parts of the CLDFB bands + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each band + */ + if ( hFdCngCom->numCoreBands < hFdCngCom->regularStopBand ) + { + for ( j = hFdCngCom->numCoreBands; j < hFdCngCom->regularStopBand; j++ ) + { + for ( i = 0; i < hFdCngCom->numSlots; i++ ) + { + /* Real part in CLDFB band */ + rand_gauss( &bufferReal[i][j], seed ); + bufferReal[i][j] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + /* Imaginary part in CLDFB band */ + rand_gauss( &bufferImag[i][j], seed ); + bufferImag[i][j] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + } + ptr_level++; + } + } + + return; +} + + +/*------------------------------------------------------------------- + * generate_masking_noise() + * + * Generate additional comfort noise (kind of noise filling) + *-------------------------------------------------------------------*/ + +void generate_masking_noise( + float *timeDomainBuffer, /* i/o: time-domain signal */ + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const int16_t length, /* i : frame size */ + const int16_t core, /* i : core */ + const int16_t return_noise, /* i : noise is returned instead of added */ + const int16_t secondary, /* i : flag to indicate secondary noise generation */ + const int16_t element_mode, /* i : element mode */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i : stereo CNG handle */ + const int16_t nchan_out /* i : number of output channels */ +) +{ + float *cngNoiseLevel = hFdCngCom->cngNoiseLevel; + float *ptr_level = cngNoiseLevel; + float *fftBuffer = hFdCngCom->fftBuffer; + int16_t i; + float maskingNoise[L_FRAME16k]; + float *ptr_r; + float *ptr_i; + int16_t startBand = hFdCngCom->startBand; + int16_t *seed = &( hFdCngCom->seed ); + float scale = 1.f; + + /* skip noise generating if level is very low, to avoid problems with possibly running into denormals */ + if ( hFdCngCom->likelihood_noisy_speech > DELTA_MASKING_NOISE ) + { + if ( core != AMR_WB_CORE ) + { + /* Compute additional CN level */ + for ( i = 0; i < SIZE_SCALE_TABLE_CN; i++ ) + { + if ( ( hFdCngCom->CngBandwidth == scaleTable_cn_only[i].bwmode ) && + ( hFdCngCom->CngBitrate >= scaleTable_cn_only[i].bitrateFrom ) && + ( hFdCngCom->CngBitrate < scaleTable_cn_only[i].bitrateTo ) ) + { + break; + } + } + + scale *= (float) pow( 10.f, -scaleTable_cn_only[i].scale / 10.f ) - 1.f; + } + else + { + /* Compute additional CN level */ + for ( i = 0; i < SIZE_SCALE_TABLE_CN_AMRWB; i++ ) + { + if ( hFdCngCom->CngBitrate >= scaleTable_cn_only_amrwbio[i][0] ) + { + break; + } + } + + if ( i < SIZE_SCALE_TABLE_CN_AMRWB ) + { + scale *= (float) pow( 10.f, -scaleTable_cn_only_amrwbio[i][1] / 10.f ) - 1.f; + } + else + { + scale = 0.f; + } + } + + /* Exclude clean speech */ + scale *= hFdCngCom->likelihood_noisy_speech; + + /* Generate Gaussian random noise in real and imaginary parts of the FFT bins + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each bin */ + if ( startBand == 0 ) + { + rand_gauss( &fftBuffer[0], seed ); + ptr_r = fftBuffer + 2; + fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ + ptr_level++; + } + else + { + fftBuffer[0] = 0.f; + set_f( fftBuffer + 2, 0.0f, 2 * ( startBand - 1 ) ); + ptr_r = fftBuffer + 2 * startBand; + } + ptr_i = ptr_r + 1; + for ( ; ptr_level < cngNoiseLevel + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) + { + /* Real part in FFT bins */ + rand_gauss( ptr_r, seed ); + ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_r += 2; + /* Imaginary part in FFT bins */ + rand_gauss( ptr_i, seed ); + ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_i += 2; + } + + /* Remaining FFT bins are set to zero */ + set_f( fftBuffer + 2 * hFdCngCom->stopFFTbin, 0.0f, hFdCngCom->fftlen - 2 * hFdCngCom->stopFFTbin ); + /* Nyquist frequency is discarded */ + fftBuffer[1] = 0.f; + } + else + { + /* very low level case - update random seeds and reset FFT buffer; don't fully skip SynthesisSTFT(), because of the buffer updates done there... */ + generate_masking_noise_update_seed( hFdCngCom ); + + set_f( fftBuffer, 0.f, hFdCngCom->fftlen ); + } + + /* Perform STFT synthesis */ + if ( secondary ) + { + SynthesisSTFT( fftBuffer, maskingNoise, hStereoCng->olapBufferSynth22, hFdCngCom->olapWinSyn, 0, hFdCngCom, element_mode, nchan_out ); + } + else + { + SynthesisSTFT( fftBuffer, maskingNoise, hFdCngCom->olapBufferSynth2, hFdCngCom->olapWinSyn, 0, hFdCngCom, element_mode, nchan_out ); + } + + /* Add some comfort noise on top of decoded signal */ + if ( return_noise ) + { + mvr2r( maskingNoise, timeDomainBuffer, min( hFdCngCom->frameSize, length ) ); + } + else + { + v_add( maskingNoise, timeDomainBuffer, timeDomainBuffer, min( hFdCngCom->frameSize, length ) ); + } + + return; +} + + +/*------------------------------------------------------------------- + * generate_masking_noise_update_seed() + * + * Update seed for scenarios where generate_masking_noise() is + * not called based on signal statistics + *-------------------------------------------------------------------*/ + +void generate_masking_noise_update_seed( + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +) +{ + float *cngNoiseLevel = hFdCngCom->cngNoiseLevel; + float *ptr_level = cngNoiseLevel; + int16_t startBand = hFdCngCom->startBand; + int16_t *seed = &( hFdCngCom->seed ); + float tmp = 0; + + /* + Generate Gaussian random noise in real and imaginary parts of the FFT bins + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each bin + */ + if ( startBand == 0 ) + { + rand_gauss( &tmp, seed ); + ptr_level++; + } + + for ( ; ptr_level < cngNoiseLevel + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) + { + /* Real part in FFT bins */ + rand_gauss( &tmp, seed ); + rand_gauss( &tmp, seed ); + } + + return; +} + + +/*------------------------------------------------------------------- + * generate_masking_noise_mdct() + * + * Generate additional comfort noise (kind of noise filling) + *-------------------------------------------------------------------*/ + +void generate_masking_noise_mdct( + float *mdctBuffer, /* i/o: time-domain signal */ + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +) +{ + float *cngNoiseLevel = hFdCngCom->cngNoiseLevel; + int16_t i; + float maskingNoise[2 * L_FRAME16k]; + float *ptr_r; + float *ptr_level = cngNoiseLevel; + int16_t startBand = hFdCngCom->startBand; + int16_t *seed = &( hFdCngCom->seed ); + float scale = 1.f; + + /* skip noise generating if level is very low, to avoid problems with possibly running into denormals */ + if ( hFdCngCom->likelihood_noisy_speech > DELTA_MASKING_NOISE ) + { + for ( i = 0; i < SIZE_SCALE_TABLE_CN; i++ ) + { + if ( ( hFdCngCom->CngBandwidth == scaleTable_cn_only[i].bwmode ) && + ( hFdCngCom->CngBitrate >= scaleTable_cn_only[i].bitrateFrom ) && + ( hFdCngCom->CngBitrate < scaleTable_cn_only[i].bitrateTo ) ) + { + break; + } + } + + scale *= (float) pow( 10.f, -scaleTable_cn_only[i].scale / 10.f ) - 1.f; + + /* Exclude clean speech */ + scale *= hFdCngCom->likelihood_noisy_speech; + + /* + Generate Gaussian random noise in real and imaginary parts of the FFT bins + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each bin + */ + if ( startBand == 0 ) + { + rand_gauss( &maskingNoise[0], seed ); + maskingNoise[0] *= (float) sqrt( scale * *ptr_level * 0.5f ); /* DC component in FFT */ + ptr_level++; + ptr_r = maskingNoise + 1; + } + else + { + maskingNoise[0] = 0.f; + set_f( maskingNoise + 1, 0.0f, ( startBand - 1 ) ); + ptr_r = maskingNoise + startBand; + } + + for ( ; ptr_level < cngNoiseLevel + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) + { + /* MDCT bins */ + rand_gauss( ptr_r, seed ); + ( *ptr_r ) *= (float) sqrt( scale * *ptr_level * 0.5f ); + ptr_r += 1; + } + + /*re-normalization of energy level: M/sqrt(2)*/ + v_multc( maskingNoise, (float) sqrt( NORM_MDCT_FACTOR ), maskingNoise, hFdCngCom->stopFFTbin ); + + /* Add some comfort noise on top of decoded signal */ + v_add( maskingNoise, mdctBuffer, mdctBuffer, hFdCngCom->stopFFTbin ); + } + else + { + /* very low level case - just update random seeds */ + if ( startBand == 0 ) + { + rand_gauss( &maskingNoise[0], seed ); + ptr_level++; + } + + for ( ; ptr_level < cngNoiseLevel + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) + { + rand_gauss( &maskingNoise[0], seed ); + } + } + + return; +} + +/*------------------------------------------------------------------- + * generate_stereo_masking_noise() + * + * Generate additional comfort noise (kind of noise filling) + *-------------------------------------------------------------------*/ + +void generate_stereo_masking_noise( + float *syn, /* i/o: time-domain signal */ + Decoder_State *st, /* i/o: decoder state structure */ + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i : TD stereo structure */ + const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ + const int16_t fadeOut, /* i : only fade out of previous state */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i : Stereo CNG handle */ + const int16_t nchan_out /* i : number of output channels */ +) +{ + HANDLE_FD_CNG_COM hFdCngCom; + float gamma, scale, SP_ratio; + float Np[L_FRAME16k]; + float Ns[L_FRAME16k]; + float N1[L_FRAME16k]; + float N2[L_FRAME16k]; + int16_t i; + + if ( st->idchan == 0 ) + { + hFdCngCom = st->hFdCngDec->hFdCngCom; + mvr2r( hFdCngCom->olapBufferSynth2, Np, hFdCngCom->frameSize / 2 ); + mvr2r( hStereoCng->olapBufferSynth22, Ns, hFdCngCom->frameSize / 2 ); + set_f( &Np[hFdCngCom->frameSize / 2], 0.0f, hFdCngCom->frameSize / 2 ); + set_f( &Ns[hFdCngCom->frameSize / 2], 0.0f, hFdCngCom->frameSize / 2 ); + + if ( !fadeOut ) + { + generate_masking_noise( N1, hFdCngCom, hFdCngCom->frameSize, 0, 1, 0, st->element_mode, hStereoCng, nchan_out ); + /* Generate masking noise for secondary channel */ + if ( flag_sec_CNA ) + { + generate_masking_noise( N2, hFdCngCom, hFdCngCom->frameSize, 0, 1, 1, st->element_mode, hStereoCng, nchan_out ); + gamma = hStereoCng->c_PS_LT * hStereoCng->c_PS_LT; + scale = 1.0f; + if ( gamma < 0.9f ) + { + gamma = gamma / ( 1 - gamma ); + gamma = (float) sqrt( gamma + 1 ) - (float) sqrt( gamma ); + scale = 1.0f / (float) sqrt( 1 + gamma * gamma ); + } + else + { + gamma = 0.0f; + } + + for ( i = 0; i < 2 * hFdCngCom->frameSize / 4; i++ ) + { + Np[i] += scale * ( N1[i] + gamma * N2[i] ); + Ns[i] += scale * sign( hStereoCng->c_PS_LT ) * ( N1[i] - gamma * N2[i] ); + } + for ( ; i < hFdCngCom->frameSize; i++ ) + { + Np[i] = scale * ( N1[i] + gamma * N2[i] ); + Ns[i] = scale * sign( hStereoCng->c_PS_LT ) * ( N1[i] - gamma * N2[i] ); + } + scale *= (float) ( hFdCngCom->fftlen / 2 ); + for ( i = 0; i < hFdCngCom->frameSize / 2; i++ ) + { + hFdCngCom->olapBufferSynth2[i] = scale * ( hFdCngCom->olapBufferSynth2[i + 5 * hFdCngCom->frameSize / 4] + gamma * hStereoCng->olapBufferSynth22[i + 5 * hFdCngCom->frameSize / 4] ); + hStereoCng->olapBufferSynth22[i] = sign( hStereoCng->c_PS_LT ) * scale * ( hFdCngCom->olapBufferSynth2[i + 5 * hFdCngCom->frameSize / 4] - gamma * hStereoCng->olapBufferSynth22[i + 5 * hFdCngCom->frameSize / 4] ); + } + } + else + { + for ( i = 0; i < hFdCngCom->frameSize / 2; i++ ) + { + Np[i] += N1[i]; + } + mvr2r( &N1[hFdCngCom->frameSize / 2], &Np[hFdCngCom->frameSize / 2], hFdCngCom->frameSize / 2 ); + scale = (float) ( hFdCngCom->fftlen / 2 ); + for ( i = 0; i < hFdCngCom->frameSize; i++ ) + { + hFdCngCom->olapBufferSynth2[i] = scale * hFdCngCom->olapBufferSynth2[i + 5 * hFdCngCom->frameSize / 4]; + } + } + } + else + { + set_f( hFdCngCom->olapBufferSynth2, 0.0f, hFdCngCom->frameSize / 2 ); + set_f( hStereoCng->olapBufferSynth22, 0.0f, hFdCngCom->frameSize / 2 ); + } + if ( flag_sec_CNA ) + { + mvr2r( Ns, hStereoCng->maskingNoiseS, hFdCngCom->frameSize ); + hStereoCng->enableSecCNA = 1; + } + else + { + set_f( hStereoCng->olapBufferSynth22, 0.0f, hFdCngCom->frameSize ); + } + + /* add masking noise */ + v_add( Np, syn, syn, hFdCngCom->frameSize ); + } + else if ( hStereoCng->enableSecCNA ) + { + SP_ratio = hStereoTD->SP_ratio_LT; /* Use long-term SP ratio based on L/R synthesis */ + /* scale and add masking noise */ + for ( i = 0; i < *hStereoCng->frameSize / 4; i++ ) + { + scale = ( ( hStereoTD->prevSP_ratio * ( *hStereoCng->frameSize / 4 - (float) i ) + SP_ratio * (float) i ) / ( *hStereoCng->frameSize / 4 ) ); + syn[i] += scale * hStereoCng->maskingNoiseS[i]; + } + for ( ; i < *hStereoCng->frameSize / 2; i++ ) + { + syn[i] += SP_ratio * hStereoCng->maskingNoiseS[i]; + } + for ( ; i < *hStereoCng->frameSize; i++ ) + { + syn[i] += SP_ratio * hStereoCng->maskingNoiseS[i]; + } + hStereoTD->prevSP_ratio = SP_ratio; + } + + return; +} + + +/*------------------------------------------------------------------- + * generate_masking_noise_hf_cldfb() + * + * Generate additional comfort noise (kind of noise filling) + *-------------------------------------------------------------------*/ + +void generate_masking_noise_dirac( + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i : filterbank state */ + float *tdBuffer, /* i/o: time-domain signal, if NULL no LB-CNA */ + float *Cldfb_RealBuffer, /* o : CLDFD real buffer */ + float *Cldfb_ImagBuffer, /* o : CLDFD imaginary buffer */ + const int16_t slot_index, /* i : CLDFB slot index */ + const int16_t cna_flag, /* i : CNA flag for LB and HB */ + const int16_t fd_cng_flag /* i : FD-CNG flag for HB */ +) +{ + int16_t i; + float *cngNoiseLevel = hFdCngCom->cngNoiseLevel; + float *fftBuffer = hFdCngCom->fftBuffer; + float *ptr_r; + float *ptr_i; + float *ptr_level; + int16_t *seed = &( hFdCngCom->seed ); + float scale; + + wmops_sub_start( "fd_cng_dirac" ); + + /* Init */ + scale = 0.f; + + /* Resample CLDFB memories if necessary*/ + if ( ( h_cldfb->no_channels * h_cldfb->no_col ) != hFdCngCom->frameSize ) + { + resampleCldfb( h_cldfb, hFdCngCom->frameSize * FRAMES_PER_SEC ); + } + + set_zero( Cldfb_RealBuffer, CLDFB_NO_CHANNELS_MAX ); + set_zero( Cldfb_ImagBuffer, CLDFB_NO_CHANNELS_MAX ); + + /*LB CLDFB - CNA from STFT*/ +#ifdef DEBUG_MODE_DIRAC + { + int16_t tmp_s; + tmp_s = (int16_t) ( 32768.f * 0.5f * hFdCngCom->likelihood_noisy_speech * cna_flag + 0.5f ); + dbgwrite( &tmp_s, sizeof( int16_t ), 1, hFdCngCom->frameSize / 16, "./res/ivas_dirac_likelihood_noisy.pcm" ); + } +#endif + if ( cna_flag ) + { + /* skip noise generating if level is very low, to avoid problems with possibly running into denormals */ + if ( hFdCngCom->likelihood_noisy_speech > DELTA_MASKING_NOISE ) + { + /* Compute additional CN level */ + for ( i = 0; i < 15; i++ ) + { + if ( ( hFdCngCom->CngBandwidth == scaleTable_cn_dirac[i].bwmode ) && + ( hFdCngCom->CngBitrate >= scaleTable_cn_dirac[i].bitrateFrom ) && + ( hFdCngCom->CngBitrate < scaleTable_cn_dirac[i].bitrateTo ) ) + { + break; + } + } + + scale = (float) pow( 10.f, -scaleTable_cn_dirac[i].scale / 10.f ) - 1.f; + scale *= hFdCngCom->likelihood_noisy_speech; + } + } + + /* LB CLDFB - CNA from STFT: CNA applied only in channel 0*/ + if ( cna_flag && tdBuffer != NULL ) + { + if ( scale != 0 ) + { + /*Generate LF comfort noise only at first slot, for the whole frame*/ + if ( slot_index == 0 ) + { + ptr_level = cngNoiseLevel; + + /* Generate Gaussian random noise in real and imaginary parts of the FFT bins + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each bin */ + if ( hFdCngCom->startBand == 0 ) + { + rand_gauss( &fftBuffer[0], seed ); + ptr_r = fftBuffer + 2; + fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ + ptr_level++; + } + else + { + fftBuffer[0] = 0.f; + set_f( fftBuffer + 2, 0.0f, 2 * ( hFdCngCom->startBand - 1 ) ); + ptr_r = fftBuffer + 2 * hFdCngCom->startBand; + } + ptr_i = ptr_r + 1; + + for ( ; ptr_level < cngNoiseLevel + hFdCngCom->stopFFTbin - hFdCngCom->startBand; ptr_level++ ) + { + /* Real part in FFT bins */ + rand_gauss( ptr_r, seed ); + ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_r += 2; + /* Imaginary part in FFT bins */ + rand_gauss( ptr_i, seed ); + ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_i += 2; + } + + /* Remaining FFT bins are set to zero */ + set_f( fftBuffer + 2 * hFdCngCom->stopFFTbin, 0.0f, hFdCngCom->fftlen - 2 * hFdCngCom->stopFFTbin ); + /* Nyquist frequency is discarded */ + fftBuffer[1] = 0.f; + + /* Perform STFT synthesis */ + SynthesisSTFT( fftBuffer, tdBuffer, hFdCngCom->olapBufferSynth2, hFdCngCom->olapWinSyn, 0, hFdCngCom, -1, -1 ); + +#ifdef DEBUG_MODE_DIRAC + { + int16_t tmp[1000]; + + for ( i = 0; i < hFdCngCom->frameSize; i++ ) + { + tmp[i] = (int16_t) ( tdBuffer[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), hFdCngCom->frameSize, 1, "./res/ivas_dirac_cna_fft.pcm" ); + } +#endif + } + + /* LF CLDFB*/ + cldfbAnalysis_ts( &( tdBuffer[hFdCngCom->numCoreBands * slot_index] ), Cldfb_RealBuffer, Cldfb_ImagBuffer, hFdCngCom->numCoreBands, h_cldfb ); + } + else + { + if ( slot_index == 0 ) + { + /* very low level case - update random seeds */ + generate_masking_noise_update_seed( hFdCngCom ); + + set_f( fftBuffer, 0.f, hFdCngCom->fftlen ); + + /* Perform STFT synthesis */ + SynthesisSTFT( fftBuffer, tdBuffer, hFdCngCom->olapBufferSynth2, hFdCngCom->olapWinSyn, 0, hFdCngCom, -1, -1 ); + +#ifdef DEBUG_MODE_DIRAC + { + int16_t tmp[1000]; + + for ( i = 0; i < hFdCngCom->frameSize; i++ ) + { + tmp[i] = (int16_t) ( tdBuffer[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), hFdCngCom->frameSize, 1, "./res/ivas_dirac_cna_fft.pcm" ); + } +#endif + } + + /* LB ana CLDFB*/ + cldfbAnalysis_ts( &( tdBuffer[hFdCngCom->numCoreBands * slot_index] ), Cldfb_RealBuffer, Cldfb_ImagBuffer, hFdCngCom->numCoreBands, h_cldfb ); + } + } + + /*HF CLDFB - CNA and/or FD-CNG*/ + if ( fd_cng_flag ) + { + scale += 1.f; + } + if ( scale != 0 ) + { + scale *= CLDFB_SCALING * ( h_cldfb->scale * h_cldfb->scale * 8.f ); + ptr_level = hFdCngCom->cngNoiseLevel + hFdCngCom->stopFFTbin - hFdCngCom->startBand; + + for ( i = hFdCngCom->numCoreBands; i < hFdCngCom->regularStopBand; i++ ) + { + /* Real part in CLDFB band */ + rand_gauss( &Cldfb_RealBuffer[i], seed ); + Cldfb_RealBuffer[i] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + /* Imaginary part in CLDFB band */ + rand_gauss( &Cldfb_ImagBuffer[i], seed ); + Cldfb_ImagBuffer[i] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + + ptr_level++; + } + } + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------- + * FdCngDecodeMDCTStereoSID() + * + * Decode FD-Cng parameters for CNG in MDCT-Stereo mode from the bitstream + * + *-------------------------------------------------------------------*/ + +void FdCngDecodeMDCTStereoSID( + CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ +) +{ + DEC_CORE_HANDLE sts[CPE_CHANNELS]; + HANDLE_FD_CNG_COM hFdCngCom; + float *ms_ptr[CPE_CHANNELS]; + float *lr_ptr[CPE_CHANNELS]; + float logNoiseEst[CPE_CHANNELS][NPART]; + float gain[CPE_CHANNELS]; + int16_t indices[FD_CNG_stages_37bits]; + int16_t N, i, ch, p, stages; + int16_t is_out_ms; + + is_out_ms = 0; + if ( hCPE->hCoreCoder[0]->cng_spar_flag == 1 ) + { + is_out_ms = 1; + } + + N = 0; /* to avoid compilation warning */ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch] = hCPE->hCoreCoder[ch]; + ms_ptr[ch] = &logNoiseEst[ch][0]; + lr_ptr[ch] = &sts[ch]->hFdCngDec->hFdCngCom->sidNoiseEst[0]; + } + + /* decode noise shapes and gains */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch] = hCPE->hCoreCoder[ch]; + hFdCngCom = ( sts[ch]->hFdCngDec )->hFdCngCom; + N = hFdCngCom->npart; + hFdCngCom->sid_frame_counter++; + + if ( ch ) + { + stages = FD_CNG_JOINT_stages_25bits; + } + else + { + stages = FD_CNG_stages_37bits; + } + + /* read bitstream */ + for ( i = 0; i < stages; i++ ) + { + indices[i] = get_next_indice( sts[ch], bits_37bits[i] ); + } + { + gain[ch] = ( (float) get_next_indice( sts[ch], 7 ) - GAIN_Q_OFFSET_IVAS ) / 1.5f; + } + + /* MSVQ decoder */ + msvq_dec( cdk_37bits_ivas, NULL, NULL, stages, N, FD_CNG_maxN_37bits, indices, ms_ptr[ch], NULL ); + } + + if ( sts[0]->hFdCngDec->hFdCngCom->no_side_flag ) + { + set_zero( ms_ptr[1], NPART ); + } + + if ( is_out_ms == 0 ) + { + inverseMS( N, ms_ptr[0], ms_ptr[1], 1.f ); + } + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + hFdCngCom = sts[ch]->hFdCngDec->hFdCngCom; + for ( p = 0; p < N; p++ ) + { + lr_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); + } + + scalebands( hFdCngCom->sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, hFdCngCom->cngNoiseLevel, 1 ); + + lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, sts[ch]->preemph_fac ); + } + + if ( hCPE->nchan_out == 1 && hCPE->last_element_brate <= IVAS_SID_4k4 ) + { + /* create proper M noise shape in channel zero after gains have been applied */ + for ( p = 0; p < N; p++ ) + { + sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst[p] = 0.5f * ( sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst[p] + sts[1]->hFdCngDec->hFdCngCom->sidNoiseEst[p] ); + } + } + + return; +} + + +/*------------------------------------------------------------------- + * FdCngDecodeDiracMDCTStereoSID() + * + * Decode FD-Cng parameters for CNG in 2TC DirAC mode from the bitstream + *-------------------------------------------------------------------*/ + +void FdCngDecodeDiracMDCTStereoSID( + CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ +) +{ + DEC_CORE_HANDLE sts[CPE_CHANNELS]; + HANDLE_FD_CNG_COM hFdCngCom; + float *ms_ptr[CPE_CHANNELS]; + float *lr_ptr[CPE_CHANNELS]; + float logNoiseEst[CPE_CHANNELS][NPART]; + float gain[CPE_CHANNELS]; + int16_t indices[FD_CNG_stages_37bits]; + int16_t N, i, ch, p; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch] = hCPE->hCoreCoder[ch]; + ms_ptr[ch] = &logNoiseEst[ch][0]; + lr_ptr[ch] = &sts[ch]->hFdCngDec->hFdCngCom->sidNoiseEst[0]; + ( sts[ch]->hFdCngDec )->hFdCngCom->sid_frame_counter++; + } + + /* decode noise shapes and gains */ + hFdCngCom = ( sts[0]->hFdCngDec )->hFdCngCom; + N = hFdCngCom->npart; + + /* read bitstream */ + for ( i = 0; i < FD_CNG_stages_37bits; i++ ) + { + indices[i] = get_next_indice( sts[0], bits_37bits[i] ); + } + gain[0] = ( (float) get_next_indice( sts[0], 7 ) - GAIN_Q_OFFSET_IVAS ) / 1.5f; + gain[1] = gain[0]; + + /* MSVQ decoder */ + msvq_dec( cdk_37bits_ivas, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, ms_ptr[0], NULL ); + mvr2r( ms_ptr[0], ms_ptr[1], N ); + + /*inverseMS( N, ms_ptr[0], ms_ptr[1], 1.f );*/ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + hFdCngCom = sts[ch]->hFdCngDec->hFdCngCom; + for ( p = 0; p < N; p++ ) + { + lr_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); + } + + /* NB last band energy compensation */ + if ( hFdCngCom->CngBandwidth == NB ) + { + lr_ptr[ch][N - 1] *= NB_LAST_BAND_SCALE; + } + else if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) + { + lr_ptr[ch][N - 1] *= SWB_13k2_LAST_BAND_SCALE; + } + + scalebands( hFdCngCom->sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, hFdCngCom->cngNoiseLevel, 1 ); + + lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, sts[ch]->preemph_fac ); + } + sts[0]->hFdCngDec->hFdCngCom->coherence = 0.0f; + sts[1]->hFdCngDec->hFdCngCom->coherence = 0.0f; + + if ( hCPE->nchan_out == 1 ) + { + /* create proper M noise shape in channel zero after gains have been applied */ + for ( p = 0; p < N; p++ ) + { + sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst[p] = 0.5f * ( sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst[p] + sts[1]->hFdCngDec->hFdCngCom->sidNoiseEst[p] ); + } + sts[0]->hFdCngDec->hFdCngCom->coherence = 0.0f; + sts[1]->hFdCngDec->hFdCngCom->coherence = 0.0f; + } + + return; +} diff --git a/lib_dec/gain_dec.c b/lib_dec/gain_dec.c new file mode 100644 index 0000000000..dd8a58637c --- /dev/null +++ b/lib_dec/gain_dec.c @@ -0,0 +1,699 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Es_pred_dec() + * + * Decoding of scaled predicted innovation energy to be used in all subframes + *---------------------------------------------------------------------*/ + +void Es_pred_dec( + float *Es_pred, /* o : predicted scaled innovation energy */ + const int16_t enr_idx, /* i : indice */ + const int16_t nb_bits, /* i : number of bits */ + const int16_t no_ltp /* i : no LTP flag */ +) +{ + if ( !no_ltp ) + { + switch ( nb_bits ) + { + case 5: + *Es_pred = Es_pred_qua_5b[enr_idx]; + break; + case 4: + *Es_pred = Es_pred_qua_4b[enr_idx]; + break; + case 3: + *Es_pred = Es_pred_qua_3b[enr_idx]; + break; + default: + *Es_pred = Es_pred_qua_5b[enr_idx]; + break; + } + } + else + { + *Es_pred = Es_pred_qua_4b_no_ltp[enr_idx]; + } + + return; +} + + +/*--------------------------------------------------------------------------* + * lp_gain_updt() + * + * Update of LP pitch and code gains (FEC) + *-------------------------------------------------------------------------*/ + +void lp_gain_updt( + const int16_t i_subfr, /* i : subframe number */ + const float gain_pit, /* i : Decoded gain pitch */ + const float norm_gain_code, /* i : Normalised gain code */ + float *lp_gainp, /* i/o: LP-filtered pitch gain(FEC) */ + float *lp_gainc, /* i/o: LP-filtered code gain (FEC) */ + const int16_t L_frame /* i : length of the frame */ +) +{ + if ( L_frame == L_FRAME ) + { + if ( i_subfr == 0 ) + { + *lp_gainp = 0.1f * gain_pit; + *lp_gainc = 0.1f * norm_gain_code; + } + else if ( i_subfr == L_SUBFR ) + { + *lp_gainp += 0.2f * gain_pit; + *lp_gainc += 0.2f * norm_gain_code; + } + else if ( i_subfr == 2 * L_SUBFR ) + { + *lp_gainp += 0.3f * gain_pit; + *lp_gainc += 0.3f * norm_gain_code; + } + else /* i_subfr == 3*L_SUBFR */ + { + *lp_gainp += 0.4f * gain_pit; + *lp_gainc += 0.4f * norm_gain_code; + } + } + else + { + if ( i_subfr == 0 ) + { + *lp_gainp = ( 1.0f / 15.0f ) * gain_pit; + *lp_gainc = ( 1.0f / 15.0f ) * norm_gain_code; + } + else if ( i_subfr == L_SUBFR ) + { + *lp_gainp += ( 2.0f / 15.0f ) * gain_pit; + *lp_gainc += ( 2.0f / 15.0f ) * norm_gain_code; + } + else if ( i_subfr == 2 * L_SUBFR ) + { + *lp_gainp += ( 3.0f / 15.0f ) * gain_pit; + *lp_gainc += ( 3.0f / 15.0f ) * norm_gain_code; + } + else if ( i_subfr == 3 * L_SUBFR ) + { + *lp_gainp += ( 4.0f / 15.0f ) * gain_pit; + *lp_gainc += ( 4.0f / 15.0f ) * norm_gain_code; + } + else /* i_subfr == 4*L_SUBFR */ + { + *lp_gainp += ( 5.0f / 15.0f ) * gain_pit; + *lp_gainc += ( 5.0f / 15.0f ) * norm_gain_code; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * gain_dec_tc() + * + * Decoding of pitch and codebook gains and updating long term energies + *---------------------------------------------------------------------*/ + +void gain_dec_tc( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t i_subfr, /* i : subframe number */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *code, /* i : algebraic code excitation */ + float *gain_pit, /* o : pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *gain_inov, /* o : unscaled innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excit. */ +) +{ + int16_t index, nBits; + float Ecode, gcode0; + float Ei; + + *gain_pit = 0; + + /*----------------------------------------------------------------* + * find number of bits for gain dequantization + *----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; + + /*-----------------------------------------------------------------* + * calculate the predicted gain code + *-----------------------------------------------------------------*/ + + Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + Ei = 10 * (float) log10( Ecode ); + gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); + + /*------------------------------------------------------------------------------------------* + * Select the gain quantization table and dequantize the gain + *------------------------------------------------------------------------------------------*/ + + index = get_next_indice( st, nBits ); + + if ( nBits > 3 ) + { + *gain_code = gain_dequant( index, G_CODE_MIN, G_CODE_MAX, nBits ); + } + else /* nBits == 3 */ + { + *gain_code = tbl_gain_code_tc[index]; + } + + /*-----------------------------------------------------------------* + * decode normalized codebook gain + *-----------------------------------------------------------------*/ + + *gain_code *= gcode0; + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + +/*---------------------------------------------------------------------* + * gain_dec_amr_wb() + * + * Decoding of pitch and fixed codebook gains (used also in AMR-WB IO mode) + *---------------------------------------------------------------------*/ + +void gain_dec_amr_wb( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *past_qua_en, /* i/o: gain quantization memory (4 words) */ + float *gain_inov, /* o : unscaled innovation gain */ + const float *code, /* i : algebraic code excitation */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +) +{ + int16_t i, index; + int16_t nbits; + float gcode0, qua_en; + const float *t_qua_gain; + + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); + + /*-----------------------------------------------------------------* + * Select the gain quantization table + *-----------------------------------------------------------------*/ + + if ( core_brate < ACELP_12k65 ) + { + nbits = 6; + t_qua_gain = t_qua_gain6b; + } + else + { + nbits = 7; + t_qua_gain = t_qua_gain7b; + } + + /*-----------------------------------------------------------------* + * predicted code gain + *-----------------------------------------------------------------*/ + + /* start with predicting code energy in dB */ + gcode0 = MEAN_ENER; + for ( i = 0; i < GAIN_PRED_ORDER; i++ ) + { + gcode0 += pred_gain[i] * past_qua_en[i]; + } + gcode0 += (float) ( 20.0 * log10( *gain_inov ) ); + + /* convert from energy in dB to gain */ + gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); + + /*-----------------------------------------------------------------* + * Decode pitch gain + *-----------------------------------------------------------------*/ + + index = get_next_indice( st, nbits ); + *gain_pit = t_qua_gain[index * 2]; + + /*-----------------------------------------------------------------* + * Decode code gain + *-----------------------------------------------------------------*/ + + qua_en = t_qua_gain[index * 2 + 1]; + *gain_code = qua_en * gcode0; + + /*-----------------------------------------------------------------* + * update table of past quantized energies + *-----------------------------------------------------------------*/ + + for ( i = GAIN_PRED_ORDER - 1; i > 0; i-- ) + { + past_qua_en[i] = past_qua_en[i - 1]; + } + past_qua_en[0] = (float) ( 20.0 * log10( qua_en ) ); + + /*-----------------------------------------------------------------* + * Normalized code gain + *-----------------------------------------------------------------*/ + + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + +/*--------------------------------------------------------------------------* + * gain_dec_mless() + * + * Decoding of pitch and codebook gains without updating long term energies + *-------------------------------------------------------------------------*/ + +void gain_dec_mless( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe number */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *code, /* i : algebraic code excitation */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *gain_inov, /* o : unscaled innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +) +{ + int16_t index, nBits; + float gcode0, Ei, Ecode; + const float *qua_table; + + /*-----------------------------------------------------------------* + * decode pitch gain + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; + + if ( ( tc_subfr == 3 * L_SUBFR && i_subfr == 3 * L_SUBFR && L_frame == L_FRAME ) || + ( tc_subfr == 4 * L_SUBFR && i_subfr == 4 * L_SUBFR && L_frame == L_FRAME16k ) ) + { + /* decode pitch gain */ + index = get_next_indice( st, nBits >> 1 ); + Ei = ( G_PITCH_MAX_TC192 - G_PITCH_MIN_TC192 ) / ( ( 1 << ( nBits >> 1 ) ) - 1 ); /* set quantization step */ + *gain_pit = usdequant( index, G_PITCH_MIN_TC192, Ei ); + + /* calculate the predicted gain code */ + Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + Ei = 10 * (float) log10( Ecode ); + gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); + + /* decode normalized codebook gain */ + index = get_next_indice( st, ( nBits + 1 ) >> 1 ); + *gain_code = gain_dequant( index, G_CODE_MIN_TC192, G_CODE_MAX_TC192, ( nBits + 1 ) >> 1 ); + *gain_code *= gcode0; + } + else + { + switch ( nBits ) + { + case 7: + { + qua_table = gain_qua_mless_7b; + break; + } + case 6: + { + qua_table = gain_qua_mless_6b; + + if ( st->element_mode > EVS_MONO ) + { + qua_table = gain_qua_mless_6b_stereo; + } + + break; + } + case 5: + { + qua_table = gain_qua_mless_5b; + break; + } + default: + { + qua_table = gain_qua_mless_6b; + break; + } + } + + if ( coder_type == INACTIVE && nBits == 6 ) + { + nBits--; + } + + index = get_next_indice( st, nBits ); + + *gain_pit = qua_table[index * 2]; + Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + Ei = 10 * (float) log10( Ecode ); + + /*-----------------------------------------------------------------* + * calculate the predicted gain code + *-----------------------------------------------------------------*/ + + gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); + + /*-----------------------------------------------------------------* + * decode normalized codebook gain + *-----------------------------------------------------------------*/ + + *gain_code = qua_table[index * 2 + 1] * gcode0; + } + + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + +/*--------------------------------------------------------------------------* + * gain_dec_lbr() + * + * Decoding of pitch and codebook gains in ACELP at 6.6 and 7.5 kbps + *-------------------------------------------------------------------------*/ + +void gain_dec_lbr( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe index */ + const float *code, /* i : algebraic excitation */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float gains_mem[], /* i/o: pitch gain and code gain from previous subframes */ + const int16_t L_subfr /* i : subframe length */ +) +{ + int16_t index, nBits, n_pred, ctype; + float gcode0, aux[10], Ecode; + const float *b, *cdbk = 0; + + Ecode = ( dotp( code, code, L_subfr ) + 0.01f ) / L_subfr; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + + /*-----------------------------------------------------------------* + * select the codebook, size and number of bits + * set the gains searching range + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.gains_mode[i_subfr / L_subfr]; + + ctype = 2 * ( coder_type - 1 ); + + /*-----------------------------------------------------------------* + * calculate prediction of gcode + * search for the best codeword + *-----------------------------------------------------------------*/ + + if ( i_subfr == 0 ) + { + b = b_1sfr; + n_pred = 2; + + switch ( nBits ) + { + case 8: + { + cdbk = gp_gamma_1sfr_8b; + break; + } + case 7: + { + cdbk = gp_gamma_1sfr_7b; + break; + } + case 6: + { + cdbk = gp_gamma_1sfr_6b; + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) - 0.5f * (float) log10( Ecode ) ); + + /* retrieve the codebook index and calculate both gains */ + index = get_next_indice( st, nBits ); + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + gains_mem[0] = *gain_code; + gains_mem[3] = *gain_pit; + } + else if ( i_subfr == L_SUBFR || L_subfr == 2 * L_SUBFR ) + { + b = b_2sfr; + n_pred = 4; + + switch ( nBits ) + { + case 7: + { + cdbk = gp_gamma_2sfr_7b; + break; + } + case 6: + { + cdbk = gp_gamma_2sfr_6b; + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + aux[2] = (float) log10( gains_mem[0] ); + aux[3] = gains_mem[3]; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); + + /* retrieve the codebook index and calculate both gains */ + index = get_next_indice( st, nBits ); + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + gains_mem[1] = *gain_code; + gains_mem[4] = *gain_pit; + } + else if ( i_subfr == 2 * L_SUBFR ) + { + b = b_3sfr; + n_pred = 6; + + switch ( nBits ) + { + case 7: + { + cdbk = gp_gamma_3sfr_7b; + break; + } + case 6: + { + cdbk = gp_gamma_3sfr_6b; + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + aux[2] = (float) log10( gains_mem[0] ); + aux[3] = (float) log10( gains_mem[1] ); + aux[4] = gains_mem[3]; + aux[5] = gains_mem[4]; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); + + /* retrieve the codebook index and calculate both gains */ + index = get_next_indice( st, nBits ); + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + + gains_mem[2] = *gain_code; + gains_mem[5] = *gain_pit; + } + else if ( i_subfr == 3 * L_SUBFR ) + { + b = b_4sfr; + n_pred = 8; + + switch ( nBits ) + { + case 7: + { + cdbk = gp_gamma_4sfr_7b; + break; + } + case 6: + { + cdbk = gp_gamma_4sfr_6b; + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + aux[2] = (float) log10( gains_mem[0] ); + aux[3] = (float) log10( gains_mem[1] ); + aux[4] = (float) log10( gains_mem[2] ); + aux[5] = gains_mem[3]; + aux[6] = gains_mem[4]; + aux[7] = gains_mem[5]; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); + + /* retrieve the codebook index and calculate both gains */ + index = get_next_indice( st, nBits ); + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + } + + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + +/*--------------------------------------------------------------------------* + * gain_dec_SQ() + * + * Decoding of pitch and codebook gains using scalar quantizers + *-------------------------------------------------------------------------*/ + +void gain_dec_SQ( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t i_subfr, /* i : subframe number */ + const float *code, /* i : algebraic code excitation */ + const float Es_pred, /* i : predicted scaled innov. energy */ + float *gain_pit, /* o : Quantized pitch gain */ + float *gain_code, /* o : Quantized codeebook gain */ + float *gain_inov, /* o : unscaled innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +) +{ + int16_t index, nBits; + float gcode0, Ei, Ecode; + int16_t tmp16; + /*-----------------------------------------------------------------* + * get number of bits + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; + + /*-----------------------------------------------------------------* + * decode pitch gain + *-----------------------------------------------------------------*/ + + index = get_next_indice( st, nBits >> 1 ); + /*Ei = (G_PITCH_MAX - G_PITCH_MIN) / ((1 << (nBits>>1)) - 1);*/ /* set quantization step */ + div_s( &tmp16, 1, ( ( 1 << ( nBits >> 1 ) ) - 1 ) ); /* Q15*/ + Ei = (float) mult_r( (int16_t) ( G_PITCH_MAX * 8192.0f + 0.5f ), tmp16 ) / 8192.0f; + + *gain_pit = usdequant( index, G_PITCH_MIN, Ei ); + + /*-----------------------------------------------------------------* + * calculate the predicted gain code + *-----------------------------------------------------------------*/ + + Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + Ei = 10 * (float) log10( Ecode ); + gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); + + /*-----------------------------------------------------------------* + * decode normalized codebook gain + *-----------------------------------------------------------------*/ + + index = get_next_indice( st, ( nBits + 1 ) >> 1 ); + *gain_code = gain_dequant( index, G_CODE_MIN, G_CODE_MAX, ( nBits + 1 ) >> 1 ); + *gain_code *= gcode0; + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + + +/*-------------------------------------------------* + * gain_dec_gaus() + * + * Decoding of gains for Gaussian codebook + *-------------------------------------------------*/ + +/*! r: quantized codebook gain */ +float gain_dec_gaus( + const int16_t index, /* i : quantization index */ + const int16_t bits, /* i : number of bits to quantize */ + const float lowBound, /* i : lower bound of quantizer (dB) */ + const float topBound, /* i : upper bound of quantizer (dB) */ + const float gain_inov, /* i : unscaled innovation gain */ + float *norm_gain_code /* o : gain of normalized gaus. excit. */ +) +{ + float gain, enr, stepSize; + + /*-----------------------------------------------------------------* + * quantize linearly the log E + *-----------------------------------------------------------------*/ + + stepSize = ( topBound - lowBound ) / ( (float) ( 1 << bits ) ); + + /*-----------------------------------------------------------------* + * Gaussian codebook gain + *-----------------------------------------------------------------*/ + + enr = (float) index * stepSize + lowBound; /* quantized codebook gain in dB */ + gain = (float) pow( 10.0f, enr / 20.0f ); + + *norm_gain_code = gain / gain_inov; + + return gain; +} diff --git a/lib_dec/gaus_dec.c b/lib_dec/gaus_dec.c new file mode 100644 index 0000000000..fed8ab60ac --- /dev/null +++ b/lib_dec/gaus_dec.c @@ -0,0 +1,268 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void gaus_dec2v( Decoder_State *st, float *code, const int16_t lg, const int16_t nb_bits ); + +static void dec_2pos( int16_t index, int16_t *ind1, int16_t *ind2, float *sign1, float *sign2, const int16_t n ); + + +/*---------------------------------------------------------------------* + * gaus_dec() + * + * no adaptive excitation constructed + * - decode the codebook indices, + * - find the excitation + *---------------------------------------------------------------------*/ + +void gaus_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t i_subfr, /* i : subframe index */ + float *code, /* o : unvoiced excitation */ + float *norm_gain_code, /* o : gain of the normalized gaussian excitation*/ + float *lp_gainp, /* i/o: LP-filtered pitch gain (FEC) */ + float *lp_gainc, /* i/o: LP-filtered code gain (FEC) */ + float *gain_inov, /* o : unscaled innovation gain */ + float *tilt_code, /* o : synthesis excitation spectrum tilt */ + float *voice_fac, /* o : estimated voicing factor */ + float *gain_pit, /* o : pitch gain */ + float *pt_pitch, /* o : floating pitch buffer */ + float *exc, /* o : excitation signal frame */ + float *gain_code, /* o : gain of the gaussian excitation */ + float *exc2 /* o : Scaled excitation signal frame */ +) +{ + int16_t i, idx, nb_bits; + + /*----------------------------------------------------------------* + * Decode Gaussian excitation + *----------------------------------------------------------------*/ + + nb_bits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; + + gaus_dec2v( st, code, L_SUBFR, nb_bits >> 1 ); + + /*-----------------------------------------------------------------* + * Decode gain of Gaussian excitation and normalized Gaussian excitation + *-----------------------------------------------------------------*/ + + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); + + nb_bits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; + idx = get_next_indice( st, nb_bits ); + + /* safety check in case of bit errors */ + if ( idx > 78 && st->element_mode == EVS_MONO ) + { + idx = 78; + st->BER_detect = 1; + } + + *gain_code = gain_dec_gaus( idx, nb_bits, -30.0f, 190.0f, *gain_inov, norm_gain_code ); + + /* update LP filtered gains for the case of frame erasures */ + lp_gain_updt( i_subfr, 0.0f, *norm_gain_code, lp_gainp, lp_gainc, L_FRAME ); /* supposes that gain_dec_gaus() is used for ACELP@12k8 only */ + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + *tilt_code = 0.0f; + *voice_fac = -1.0f; /* only unvoiced */ + *gain_pit = 0.0f; /* needed for BASS postfitler */ + *pt_pitch = (float) L_SUBFR; /* floating pitch buffer */ + + /*-----------------------------------------------------------------* + * Construct scaled excitation + *-----------------------------------------------------------------*/ + + set_f( &exc2[i_subfr], 0, L_SUBFR ); + for ( i = 0; i < L_SUBFR; i++ ) + { + exc[i + i_subfr] = *gain_code * code[i]; + } + + return; +} + +/*-----------------------------------------------------* + * gaus_dec2v() + * + * decoder of Gaussian Codebook for unvoiced + * consisting of addition of 2 Gaussian vectors + * + * One Gaussian vector of 190 values + *-----------------------------------------------------*/ + +static void gaus_dec2v( + Decoder_State *st, /* i/o: decoder state structure */ + float *code, /* o : decoded gaussian codevector */ + const int16_t lg, /* i : codevector length */ + const int16_t nb_bits /* i : nb ob bits per track (max 6)*/ +) +{ + int16_t i, ind1, ind2, idx, index_delta; + int16_t nvec, step; + float sign1, sign2; + float *pt1, *pt2; + float gaus_dico2[190]; + float delta; + + nvec = 1 << nb_bits; + step = 0x80 >> nb_bits; + + idx = get_next_indice( st, 2 * nb_bits + 1 ); + index_delta = get_next_indice( st, 3 ); + + dec_2pos( idx, &ind1, &ind2, &sign1, &sign2, nvec ); + + delta = STEP_DELTA * (float) ( index_delta ); + if ( delta > 0.0f ) + { + gaus_dico2[0] = gaus_dico[0]; + for ( i = 1; i < 190; i++ ) + { + gaus_dico2[i] = ( gaus_dico[i] - delta * gaus_dico[i - 1] ) / ( 1 + delta * delta ); + } + } + else + { + for ( i = 0; i < 190; i++ ) + { + gaus_dico2[i] = gaus_dico[i]; + } + } + + pt1 = &gaus_dico2[ind1 * step]; + pt2 = &gaus_dico2[ind2 * step]; + + for ( i = 0; i < lg; i++ ) + { + code[i] = pt1[i] * sign1 + pt2[i] * sign2; + } + + return; +} + +/*-----------------------------------------------------* + * dec_2pos() + * + * Decode the codevectors positions and signs + *-----------------------------------------------------*/ + +static void dec_2pos( + int16_t index, /* i : quantization index */ + int16_t *ind1, /* o : 1st vector index */ + int16_t *ind2, /* o : 2nd vector index */ + float *sign1, /* o : 1st vector sign */ + float *sign2, /* o : 2nd vector sign */ + const int16_t n /* i : nb. of vectors in cb. */ +) +{ + int16_t i; + + i = index & 1; + if ( i == 0 ) + { + *sign1 = 1.0f; + } + else + { + *sign1 = -1.0f; + } + + index = index >> 1; + + *ind1 = index / n; + *ind2 = index - ( *ind1 * n ); + if ( *ind1 > *ind2 ) + { + *sign2 = -*sign1; + } + else + { + *sign2 = *sign1; + } + + return; +} + + +/*-----------------------------------------------------* + * gaus_L2_dec : + * + * decoder of Gaussian Codebook for unvoiced as Layer 2 + * + * One Gaussian vector + *-----------------------------------------------------*/ + +void gaus_L2_dec( + float *code, /* o : decoded gaussian codevector */ + float tilt_code, + const float *Aq, + float formant_enh_num, + int16_t *seed_acelp /* i/o: random seed */ +) +{ + int16_t i; + + /*Generate white gaussian noise using central limit theorem method (N only 4 as E_util_random is not purely uniform)*/ + for ( i = 0; i < L_SUBFR; i++ ) + { + code[i] = (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); + code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); + code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); + } + + /*Shape the gaussian excitation*/ + cb_shape( 1, 0, 0, 1, 0, formant_enh_num, FORMANT_SHARPENING_G2, Aq, code, tilt_code, 0, L_SUBFR ); + + return; +} diff --git a/lib_dec/gs_dec.c b/lib_dec/gs_dec.c new file mode 100644 index 0000000000..f1b4e997af --- /dev/null +++ b/lib_dec/gs_dec.c @@ -0,0 +1,731 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * decod_audio() + * + * Decode audio (AC) frames + *-------------------------------------------------------------------*/ + +void decod_audio( + Decoder_State *st, /* i/o: decoder static memory */ + float dct_epit[], /* o : GSC excitation in DCT domain */ + const float *Aq, /* i : LP filter coefficient */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* o : excitation for SWB TBE */ + float *lsf_new, /* i : ISFs at the end of the frame */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_lp_reuse_flag, /* i : LPC reuse flag */ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + int16_t tmp_nb_bits_tot, pit_band_idx; + GSC_DEC_HANDLE hGSCDec; + float code[4 * L_SUBFR]; + int16_t Diff_len, nb_subfr, i; + int16_t nb_frame_flg; + float Es_pred = 0.0f; + int16_t Len, max_len; + int16_t attack_flag; + float low_pit; + int16_t last_bin; + int16_t nbits; + float exc_wo_nf[L_FRAME16k]; + int16_t nb_bits; /* number of bits */ + int16_t indice; /* parameter indices to read */ + + hGSCDec = st->hGSCDec; + + /*---------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------*/ + + Diff_len = 0; + + /* decode GSC attack flag (used to reduce possible pre-echo) */ + attack_flag = get_next_indice( st, 1 ); + + /* decode GSC SWB speech flag */ + if ( st->GSC_IVAS_mode >= 1 || ( st->coder_type != INACTIVE && ( ( st->element_mode == EVS_MONO && st->total_brate >= ACELP_13k20 ) || + ( st->element_mode > EVS_MONO && st->total_brate > MIN_BRATE_GSC_NOISY_FLAG && st->bwidth >= SWB && !st->flag_ACELP16k ) ) ) ) + { + st->GSC_noisy_speech = get_next_indice( st, 1 ); + } + + /* safety check in case of bit errors */ + if ( st->GSC_noisy_speech && st->bwidth != SWB && st->GSC_IVAS_mode == 0 ) + { + st->BER_detect = 1; + st->GSC_noisy_speech = 0; + } + + /* set bit-allocation */ + config_acelp1( DEC, st->total_brate, st->core_brate, st->core, st->extl_orig, st->extl_brate_orig, st->L_frame, st->GSC_noisy_speech, &( st->acelp_cfg ), st->next_bit_pos, st->coder_type, -1, 1, &nb_bits, NULL, st->element_mode, &nbits /*dummy*/, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); + + /*---------------------------------------------------------------* + * Decode energy dynamics + *---------------------------------------------------------------*/ + + if ( st->GSC_IVAS_mode >= 1 || ( st->GSC_noisy_speech == 1 && st->GSC_IVAS_mode == 0 ) ) + { + nb_subfr = NB_SUBFR; + hGSCDec->cor_strong_limit = 0; + hGSCDec->noise_lev = NOISE_LEVEL_SP3; + + if ( st->GSC_IVAS_mode >= 1 ) + { + if ( st->core_brate < GSC_L_RATE_STG && st->GSC_IVAS_mode < 3 ) + { + nb_subfr = 2; + } + hGSCDec->noise_lev = NOISE_LEVEL_SP2; + + if ( st->GSC_IVAS_mode == 3 ) /* Music like */ + { + hGSCDec->noise_lev = NOISE_LEVEL_SP0; + } + else if ( st->GSC_noisy_speech == 0 ) /* speech like but not noisy */ + { + hGSCDec->noise_lev = NOISE_LEVEL_SP3; + } + } + } + else + { + if ( st->core_brate <= ACELP_8k00 ) + { + hGSCDec->noise_lev = get_next_indice( st, 2 ) + NOISE_LEVEL_SP2; + } + else + { + hGSCDec->noise_lev = get_next_indice( st, 3 ) + NOISE_LEVEL_SP0; + } + + /*---------------------------------------------------------------* + * Decode number of subframes + *---------------------------------------------------------------*/ + + if ( st->L_frame == L_FRAME16k && ( st->core_brate <= ACELP_13k20 || st->coder_type == INACTIVE ) ) + { + hGSCDec->cor_strong_limit = 0; + nb_subfr = 1; + } + else + { + hGSCDec->cor_strong_limit = 1; + nb_subfr = SWNB_SUBFR; + if ( st->core_brate >= ACELP_9k60 ) + { + nbits = 1; + + if ( st->L_frame == L_FRAME16k && st->core_brate >= MIN_RATE_4SBFR ) + { + nbits = 2; + } + + nb_frame_flg = get_next_indice( st, nbits ); + + if ( ( nb_frame_flg & 0x1 ) == 0 ) + { + nb_subfr = 2 * SWNB_SUBFR; + hGSCDec->cor_strong_limit = 0; + } + else if ( st->L_frame == L_FRAME16k && st->core_brate >= MIN_RATE_4SBFR ) + { + nb_subfr = 2 * SWNB_SUBFR; /* cor_strong already set to 1 */ + } + + if ( ( nb_frame_flg >> 1 ) == 1 ) + { + nb_subfr *= 2; + } + } + } + } + + if ( st->L_frame == L_FRAME16k && nb_subfr == NB_SUBFR ) + { + nb_subfr = NB_SUBFR16k; + } + + /*---------------------------------------------------------------* + * Decode the last band where the adaptive (pitch) contribution is significant + *---------------------------------------------------------------*/ + + if ( st->core_brate < CFREQ_BITRATE ) + { + if ( st->core_brate < ACELP_9k60 && st->coder_type == INACTIVE ) + { + nbits = 1; + } + else + { + nbits = 3; + } + } + else + { + nbits = 4; + } + + if ( st->core_brate < ACELP_9k60 && st->coder_type != INACTIVE ) + { + pit_band_idx = 1; + } + else + { + pit_band_idx = get_next_indice( st, nbits ); + } + + if ( pit_band_idx != 0 ) + { + if ( st->core_brate < ACELP_9k60 ) + { + pit_band_idx = 7 + BAND1k2; /* At low rate, if pitch model is chosen, then for to be use on extented and constant frequency range */ + } + else + { + pit_band_idx += BAND1k2; + } + + /* detect bit errors in the bitstream */ + if ( pit_band_idx > 13 ) /* The maximum decodable index is 10 + BAND1k2 (3) = 13 */ + { + pit_band_idx = 13; + st->BER_detect = 1; + } + + Diff_len = (int16_t) ( mfreq_loc[pit_band_idx] / BIN_SIZE ); + } + + hGSCDec->Last_GSC_pit_band_idx = pit_band_idx; + + /*--------------------------------------------------------------------------------------* + * Decode adaptive (pitch) excitation contribution + * Reset unvaluable part of the adaptive (pitch) excitation contribution + *--------------------------------------------------------------------------------------*/ + + if ( pit_band_idx > BAND1k2 ) + { + /*---------------------------------------------------------------* + * Decode adaptive (pitch) excitation contribution + *---------------------------------------------------------------*/ + + if ( !( st->GSC_IVAS_mode > 0 && st->L_frame / nb_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) && + ( ( st->core_brate >= MIN_RATE_FCB || st->GSC_noisy_speech ) && + ( ( nb_subfr == NB_SUBFR && st->L_frame == L_FRAME ) || ( nb_subfr == NB_SUBFR16k && st->L_frame == L_FRAME16k ) ) ) ) + { + if ( st->element_mode > EVS_MONO ) + { + nb_bits = 5; + } + else + { + nb_bits = Es_pred_bits_tbl[BIT_ALLOC_IDX( st->core_brate, GENERIC, -1, -1 )]; + } + + indice = get_next_indice( st, nb_bits ); + Es_pred_dec( &Es_pred, indice, nb_bits, 0 ); + } + + dec_pit_exc( st, st->L_frame, Aq, Es_pred, pitch_buf, code, exc, nb_subfr, gain_buf, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + if ( st->core_brate < ACELP_9k60 ) + { + minimum( pitch_buf, st->L_frame >> 6, &low_pit ); + + if ( low_pit < 64 ) + { + pit_band_idx = 9 + BAND1k2; + if ( st->bwidth == NB ) + { + pit_band_idx = 7 + BAND1k2; + } + } + else if ( low_pit < 128 ) + { + pit_band_idx = 5 + BAND1k2; + } + else + { + pit_band_idx = 3 + BAND1k2; + } + Diff_len = (int16_t) ( mfreq_loc[pit_band_idx] / BIN_SIZE ); + hGSCDec->Last_GSC_pit_band_idx = pit_band_idx; + } + + /*---------------------------------------------------------------* + * DCT transform + *---------------------------------------------------------------*/ + + edct( exc, dct_epit, st->L_frame, st->element_mode ); + + /*---------------------------------------------------------------* + * Reset unvaluable part of the adaptive (pitch) excitation contribution + *---------------------------------------------------------------*/ + + max_len = st->L_frame - Diff_len; + + if ( st->bwidth == NB ) + { + max_len = 160 - Diff_len; + } + + Len = 80; + if ( max_len < 80 ) + { + Len = max_len; + } + + if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) + { + for ( i = 0; i < max_len; i++ ) + { + dct_epit[i + Diff_len] = 0.0f; + } + } + else + { + for ( i = 0; i < Len; i++ ) + { + dct_epit[i + Diff_len] *= sm_table[i]; + } + for ( ; i < max_len; i++ ) + { + dct_epit[i + Diff_len] = 0.0f; + } + } + + st->bfi_pitch = (int16_t) ( mean( pitch_buf, nb_subfr ) + 0.5f ); + st->bfi_pitch_frame = st->L_frame; + Diff_len++; + st->bpf_off = 0; + } + else + { + /* No adaptive (pitch) excitation contribution */ + st->bpf_off = 1; + + set_f( dct_epit, 0.0f, st->L_frame ); + + if ( st->L_frame == L_FRAME16k ) + { + set_f( pitch_buf, (float) L_SUBFR16k, NB_SUBFR16k ); + } + else + { + set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR ); + } + + set_f( gain_buf, 0.f, NB_SUBFR16k ); + + st->bfi_pitch = L_SUBFR; + st->bfi_pitch_frame = st->L_frame; + st->lp_gainp = 0.0f; + st->lp_gainc = 0.0f; + st->tilt_code = 0; + pit_band_idx = 0; + Diff_len = 0; + } + + /*--------------------------------------------------------------------------------------* + * GSC decoder + *--------------------------------------------------------------------------------------*/ + + /* find the current total number of bits used */ + tmp_nb_bits_tot = st->next_bit_pos; + + if ( st->extl_brate_orig > 0 ) + { + /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ + tmp_nb_bits_tot--; + } + + if ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 && st->idchan == 0 ) + { + tmp_nb_bits_tot += 5; /* for noisiness */ + } + + if ( st->idchan == 1 ) + { + tmp_nb_bits_tot += TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; + if ( st->tdm_LRTD_flag == 1 ) + { + tmp_nb_bits_tot -= STEREO_BITS_TCA; + } + } + + gsc_dec( st, dct_epit, pit_band_idx, Diff_len, tmp_nb_bits_tot, nb_subfr, st->coder_type, &last_bin, lsf_new, exc_wo_nf, tmp_noise ); + + /*--------------------------------------------------------------------------------------* + * iDCT transform + *--------------------------------------------------------------------------------------*/ + + edct( dct_epit, exc, st->L_frame, st->element_mode ); + + edct( exc_wo_nf, exc_wo_nf, st->L_frame, st->element_mode ); + + /*----------------------------------------------------------------------* + * Remove potential pre-echo in case an onset has been detected + *----------------------------------------------------------------------*/ + + pre_echo_att( &hGSCDec->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); + + /*--------------------------------------------------------------------------------------* + * Update BWE excitation + *--------------------------------------------------------------------------------------*/ + + if ( st->hBWE_TD != NULL ) + { + if ( st->L_frame == L_FRAME16k ) + { + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + interp_code_4over2( exc, bwe_exc, st->L_frame ); + } + else + { + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + interp_code_5over2( exc, bwe_exc, L_FRAME ); + } + } + + /*--------------------------------------------------------------------------------------* + * Updates + *--------------------------------------------------------------------------------------*/ + + mvr2r( exc, exc2, st->L_frame ); + mvr2r( exc_wo_nf, exc, st->L_frame ); + + /*--------------------------------------------------------------------------------------* + * Channel aware mode parameters + *--------------------------------------------------------------------------------------*/ + + set_f( st->tilt_code_dec, 0, NB_SUBFR16k ); + + return; +} + + +/*-------------------------------------------------------------------* + * gsc_dec() + * + * Generic audio signal decoder + *-------------------------------------------------------------------*/ + +void gsc_dec( + Decoder_State *st, /* i/o: State structure */ + float exc_dct_in[], /* i/o: dct of pitch-only excitation / total excitation */ + const int16_t pit_band_idx, /* i : bin position of the cut-off frequency */ + const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ + const int16_t bits_used, /* i : Number of bit used before frequency Q */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + const int16_t coder_type, /* i : coding type */ + int16_t *last_bin, /* i : last bin of bit allocation */ + const float *lsf_new, /* i : ISFs at the end of the frame */ + float *exc_wo_nf, /* o : excitation (in f domain) without noisefill */ + float *tmp_noise /* o : long-term noise energy */ +) +{ + int16_t i, j, bit, nb_subbands, pvq_len; + GSC_DEC_HANDLE hGSCDec; + int16_t bitallocation_band[MBANDS_GN_BITALLOC16k]; + int16_t bitallocation_exc[2]; + float Ener_per_bd_iQ[MBANDS_GN16k]; + int16_t max_ener_band[MBANDS_GN_BITALLOC16k]; + float exc_diffQ[L_FRAME16k]; + int16_t bits_per_bands[MBANDS_GN_BITALLOC16k]; /*Q3*/ + float concat_out[L_FRAME16k]; + int16_t npulses[NB_SFM]; + int16_t maxpulse[NB_SFM]; + float mean_gain; + int16_t Mbands_gn = 16; + int16_t seed_init; + float max_eq, max_eq_val; + + hGSCDec = st->hGSCDec; + + /*--------------------------------------------------------------------------------------* + * Initialization + *--------------------------------------------------------------------------------------*/ + + bit = bits_used; + if ( coder_type == INACTIVE && ( st->tdm_LRTD_flag == 1 || st->element_mode == IVAS_SCE ) && st->core_brate <= GSC_LRES_GAINQ_LIMIT ) + { + bit += GSC_LRES_NB_NITS; + } + + if ( st->L_frame == L_FRAME16k ) + { + Mbands_gn = MBANDS_GN16k; + } + + set_f( exc_diffQ, 0.0f, st->L_frame ); + set_f( Ener_per_bd_iQ, 0.0f, Mbands_gn ); + + /*--------------------------------------------------------------------------------------* + * Gain decoding + *--------------------------------------------------------------------------------------*/ + + if ( st->bfi || st->BER_detect ) + { + /* copy old gain */ + mvr2r( hGSCDec->old_y_gain, Ener_per_bd_iQ, Mbands_gn ); + mean_gain = st->lp_gainc / 10.0f; + for ( i = 0; i < Mbands_gn; i++ ) + { + Ener_per_bd_iQ[i] += mean_gain; + } + + st->lp_gainc *= 0.98f; + } + else + { + i = 0; + while ( i < SIZE_BRATE_INTERMED_TBL ) + { + if ( st->core_brate <= brate_intermed_tbl[i] ) + { + break; + } + i++; + } + + if ( st->element_mode > EVS_MONO && coder_type == AUDIO && + st->core_brate <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ + { + i--; + } + mean_gain = gsc_gaindec( st, Ener_per_bd_iQ, brate_intermed_tbl[i], hGSCDec->old_y_gain, coder_type, st->bwidth ); + + st->lp_gainc = 10.0f * mean_gain; + } + + *tmp_noise = st->lp_gainc; + + *last_bin = 0; + if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) + { + bitallocation_exc[0] = 0; + bitallocation_exc[1] = 0; + } + + set_s( bitallocation_band, 0, MBANDS_GN ); + + if ( st->bfi || st->BER_detect ) + { + max_eq = 1.0f; + + /*--------------------------------------------------------------------------------------* + * Copy old spectrum + * reduce spectral dynamic + * save spectrum + *--------------------------------------------------------------------------------------*/ + + if ( st->last_good == INACTIVE_CLAS || st->Last_GSC_noisy_speech_flag == 1 ) + { + for ( i = 0; i < st->L_frame; i++ ) + { + hGSCDec->Last_GSC_spectrum[i] = 0.8f * own_random( &hGSCDec->seed_tcx ) / PCM16_TO_FLT_FAC + 0.2f * hGSCDec->Last_GSC_spectrum[i]; + } + + mvr2r( hGSCDec->Last_GSC_spectrum, exc_diffQ, st->L_frame ); + } + + mvr2r( hGSCDec->Last_GSC_spectrum, exc_diffQ, st->L_frame ); + + for ( i = 0; i < st->L_frame; i++ ) + { + hGSCDec->Last_GSC_spectrum[i] *= 0.75f; + } + } + else + { + /*--------------------------------------------------------------------------------------* + * PVQ decoder + *--------------------------------------------------------------------------------------*/ + + bands_and_bit_alloc( hGSCDec->cor_strong_limit, hGSCDec->noise_lev, st->core_brate, Diff_len, bit, &bit, Ener_per_bd_iQ, max_ener_band, bits_per_bands, &nb_subbands, NULL, NULL, &pvq_len, coder_type, st->bwidth, st->GSC_noisy_speech, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); + + set_s( npulses, 0, NB_SFM ); + + if ( bit == 0 ) + { + set_zero( concat_out, L_FRAME16k ); + } + else + { + pvq_core_dec( st, gsc_sfm_start, gsc_sfm_end, gsc_sfm_size, concat_out, bit, nb_subbands, bits_per_bands, NULL, npulses, maxpulse, ACELP_CORE ); + } + + max_eq = 0.0f; + max_eq_val = 1.0f; + + if ( ( ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 ) || st->core_brate < 6000 ) && coder_type <= UNVOICED ) + { + j = emaximum( concat_out, nb_subbands * 16, &max_eq ); + max_eq = (float) ( max_eq_val / ( fabs( concat_out[j] ) + 0.01f ) ); + max_eq = min( max_eq_val, max_eq ); + } + + seed_init = 0; + for ( j = 0; j < nb_subbands; j++ ) + { + mvr2r( concat_out + j * 16, exc_diffQ + max_ener_band[j] * 16, 16 ); + + if ( max_ener_band[j] > *last_bin ) + { + *last_bin = max_ener_band[j]; + } + + bitallocation_band[max_ener_band[j]] = 1; + + seed_init += npulses[j]; + } + + if ( st->last_coder_type != AUDIO /* First audio frame */ + && st->last_coder_type != UNVOICED ) /* last_coder_type == INACTIVE is overwritten in update_dec to UNVOICED */ + { + for ( j = 0; j < nb_subbands * 16; j++ ) + { + if ( concat_out[j] > 0 ) + { + seed_init = (int16_t) ( (int32_t) seed_init * 8 ); + } + if ( concat_out[j] < 0 ) + { + seed_init += 3; + } + } + + hGSCDec->seed_tcx = seed_init; + } + + if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) + { + if ( exc_diffQ[L_FRAME8k - 2] != 0 ) + { + bitallocation_exc[0] = 1; + } + + if ( exc_diffQ[L_FRAME8k - 1] != 0 ) + { + bitallocation_exc[1] = 1; + } + } + + mvr2r( exc_diffQ, hGSCDec->Last_GSC_spectrum, st->L_frame ); + + /*--------------------------------------------------------------------------------------* + * Skip adaptive (pitch) contribution frequency band (no noise added over the time contribution) + * Find x pulses between 1.6-3.2kHz to code in the spectrum of the residual signal + * Gain is based on the inter-correlation gain between the pulses found and residual signal + *--------------------------------------------------------------------------------------*/ + + if ( st->GSC_IVAS_mode >= 1 && st->GSC_noisy_speech == 1 ) + { + for ( i = 64; i < st->L_frame; i++ ) + { + exc_diffQ[i] *= max_eq; + } + } + else if ( ( ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 ) || st->core_brate < 6000 ) && coder_type <= UNVOICED ) + { + for ( i = 0; i < L_FRAME; i++ ) + { + exc_diffQ[i] *= max_eq; + } + } + else + { + freq_dnw_scaling( hGSCDec->cor_strong_limit, coder_type, hGSCDec->noise_lev, st->core_brate, exc_diffQ, st->L_frame ); + } + } + + /*--------------------------------------------------------------------------------------* + * Estimate noise level + *--------------------------------------------------------------------------------------*/ + + highband_exc_dct_in( st->core_brate, mfreq_bindiv_loc, *last_bin, Diff_len, hGSCDec->noise_lev, pit_band_idx, exc_diffQ, &hGSCDec->seed_tcx, Ener_per_bd_iQ, nb_subfr, exc_dct_in, st->last_coder_type, bitallocation_band, lsf_new, hGSCDec->last_exc_dct_in, &hGSCDec->last_ener, hGSCDec->last_bitallocation_band, bitallocation_exc, st->bfi, coder_type, st->bwidth, exc_wo_nf, st->GSC_noisy_speech, hGSCDec->lt_ener_per_band, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); + + exc_dct_in[0] = 0; + + return; +} + +/*-------------------------------------------------------------------* + * GSC_dec_init() + * + * Initialize GSC decoder state structure + *-------------------------------------------------------------------*/ + +void GSC_dec_init( + GSC_DEC_HANDLE hGSCDec /* i/o: GSC data handle */ +) +{ + hGSCDec->seed_tcx = 15687; + hGSCDec->cor_strong_limit = 1; + set_f( hGSCDec->old_y_gain, 0, MBANDS_GN ); + hGSCDec->noise_lev = NOISE_LEVEL_SP0; + set_f( hGSCDec->Last_GSC_spectrum, 0.0f, L_FRAME16k ); + hGSCDec->Last_GSC_pit_band_idx = 0; + + set_f( hGSCDec->lt_ener_per_band, 1.0f, MBANDS_GN16k ); + set_f( hGSCDec->last_exc_dct_in, 0, L_FRAME16k ); + hGSCDec->last_ener = 0.0f; + set_s( hGSCDec->last_bitallocation_band, 0, 6 ); + + hGSCDec->Last_frame_ener = (float) MAX_32; + + return; +} diff --git a/lib_dec/gs_dec_amr_wb.c b/lib_dec/gs_dec_amr_wb.c new file mode 100644 index 0000000000..956e065031 --- /dev/null +++ b/lib_dec/gs_dec_amr_wb.c @@ -0,0 +1,433 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define BAND3k 15 +#define BIN_1k2 48 +#define BAND_2k 12 +#define BAND_0k4 4 +#define ALP 0.7f +#define MALP ( 1.0f - ALP ) +#define ALPMY ( 0.86f ) +#define ALPY 1.5f + +#define CONTR_LIMIT 3012 /* Threshold to allow an increase in the contribution length */ + + +/*-------------------------------------------------------------------* + * NoiseFill() + * + * noise fill function for unvoiced/inactive frames (used only in AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +static void NoiseFill( + float *exc_diffQ, /* i/o: Noise per band */ + int16_t *seed_tcx, /* i : Seed for noise */ + const int16_t Mbands_gn /* i : number of bands */ +) +{ + int16_t StartBin, NB_Qbins, i_band, k; + StartBin = 0; + NB_Qbins = 0; + + for ( i_band = 0; i_band < Mbands_gn; i_band++ ) + { + StartBin += NB_Qbins; + NB_Qbins = crit_bins[i_band]; + for ( k = StartBin; k < NB_Qbins + StartBin; k++ ) + { + exc_diffQ[k] += 0.75f * ( (float) own_random( seed_tcx ) / PCM16_TO_FLT_FAC ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * Ener_per_band() + * + * Computed the energy per band (used only in AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +static void Ener_per_band( + const float exc_diff[], /* i : target signal */ + float y_gain4[] /* o : Energy per band to quantize */ +) +{ + float etmp; + const float *pt; + int16_t i, j; + + pt = exc_diff; + for ( j = 0; j < CRIT_NOIS_BAND; j++ ) + { + etmp = 0.01f; + for ( i = 0; i < crit_bins[j]; i++ ) + { + etmp += ( *pt * *pt ); + pt++; + } + etmp = max( etmp, .01f ); + y_gain4[j] = (float) sqrt( etmp ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Apply_gain() + * + * Rescaling of the modified excitation vector (used only in AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +static void Apply_gain( + float exc_diffQ[], /* i/o: Quantized excitation */ + float Ener_per_bd_iQ[], /* o : Target ener per band */ + float Ener_per_bd_yQ[] /* o : Ener per band for norm vector */ +) +{ + int16_t i, i_band; + int16_t StartBin, NB_Qbins; + float y_gain; + + /*------------------------------------------------------------------ + * For all the bands + * Find the energy ratio between modified vector and original vector + *------------------------------------------------------------------*/ + + StartBin = 0; + NB_Qbins = 0; + for ( i_band = 0; i_band < CRIT_NOIS_BAND; i_band++ ) + { + StartBin += NB_Qbins; + NB_Qbins = crit_bins[i_band]; + y_gain = (float) ( Ener_per_bd_iQ[i_band] / Ener_per_bd_yQ[i_band] ); + + /*------------------------------------------------------------------ + * For bands below 400 Hz or for unvoiced/inactive frames + * only apply the energy ratio + *------------------------------------------------------------------*/ + + for ( i = StartBin; i < NB_Qbins + StartBin; i++ ) + { + exc_diffQ[i] *= y_gain; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * normalize_spec() + * + * Spectrum normalization (zeroed of bins below a certain threshold) (used only in AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +static void normalize_spec( + float fac_up, /* i : Core bitrate */ + float fy_norm[], /* i/o: Frequency quantized parameter */ + const int16_t L_frame /* i : Section length */ +) +{ + float max_val; + int16_t idx, j; + + idx = emaximum( fy_norm, L_frame, &max_val ); + + if ( fy_norm[idx] == 0 ) /* we can't use max(fy_norm[idx],1) because fy_norm[idx] can be negative */ + { + fy_norm[idx] = 1; + } + max_val = (float) fabs( fac_up / fy_norm[idx] ); + for ( j = 0; j < L_frame; j++ ) + { + fy_norm[j] *= max_val; + } + + return; +} + +/*-------------------------------------------------------------------* + * gs_dec_amr_wb() + * + * Modification of decoded excitation vector depending of the content type (used only in AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +static void gs_dec_amr_wb( + const int32_t core_brate, /* i : bitrate allocated to the core */ + int16_t *seed_tcx, /* i/o: seed used for noise generation */ + const float dct_in[], /* i : cdt of residual signal */ + float dct_out[], /* i/o: dct of pitch only excitation */ + const float pitch[], /* i : pitch buffer */ + const float voice_fac, /* i : gain pitch */ + const int16_t clas, /* i : signal frame class */ + const int16_t coder_type, /* i : coder type */ + const int16_t VeryLowRateSTflag /* i : Enable the noise enhancement for very low rate stereo generic mode */ +) +{ + int16_t i, mDiff_len; + float exc_diffQ[L_FRAME16k]; + int16_t j; + float etmp14; + float ftmp, ftmp1; + float Ener_per_bd_iQ[CRIT_NOIS_BAND]; + float Ener_per_bd_yQ[CRIT_NOIS_BAND]; + + /*--------------------------------------------------------------------------------------* + * compute the energy per band for the decoded excitation (in frequency domain) + *--------------------------------------------------------------------------------------*/ + + Ener_per_band( dct_in, Ener_per_bd_iQ ); + + /*--------------------------------------------------------------------------------------* + * adjust quantization noise for the low level to compensate for the poor 6 bit gainQ + *--------------------------------------------------------------------------------------*/ + + if ( core_brate < ACELP_12k65 ) + { + ftmp = 0; + for ( i = 0; i < CRIT_NOIS_BAND; i++ ) + { + ftmp = max( Ener_per_bd_iQ[i], ftmp ); + } + + if ( ( coder_type == INACTIVE || clas == VOICED_TRANSITION ) && ftmp < 20.0f ) + { + for ( i = 0; i < CRIT_NOIS_BAND; i++ ) + { + Ener_per_bd_iQ[i] *= crit_bins_corr[i]; + } + } + } + + /*--------------------------------------------------------------------------------------* + * Find the length of the temporal contribution, with a minimum contribution of 1.2kHz + *--------------------------------------------------------------------------------------*/ + + minimum( pitch, NB_SUBFR, &etmp14 ); + etmp14 = 12800.0f / etmp14; + etmp14 *= 8.0f; + + if ( etmp14 <= CONTR_LIMIT && ( VeryLowRateSTflag || core_brate >= ACELP_12k65 ) ) + { + etmp14 *= 2; + } + + mDiff_len = (int16_t) ( etmp14 + 0.5f ); + etmp14 = PCM16_TO_FLT_FAC; + j = 0; + for ( i = 0; i < CRIT_NOIS_BAND; i++ ) + { + if ( fabs( crit_bands_loc[i] - mDiff_len ) < etmp14 ) + { + etmp14 = (float) fabs( crit_bands_loc[i] - mDiff_len ); + j += crit_bins[i]; + } + } + + mDiff_len = j; + + if ( mDiff_len < BIN_1k2 ) + { + mDiff_len = BIN_1k2; + } + + if ( ( VeryLowRateSTflag && ( clas == VOICED_CLAS || clas == AUDIO_CLAS ) ) ) /* Do not apply normalization on VOICED signal in case of stereo */ + { + mvr2r( dct_in, exc_diffQ, L_FRAME ); + + /* normalization of the spectrum and noise fill */ + normalize_spec( 1.0f, exc_diffQ + mDiff_len, L_FRAME - mDiff_len ); + } + else + { + mvr2r( dct_in, exc_diffQ, mDiff_len ); + set_f( exc_diffQ + mDiff_len, 0, L_FRAME - mDiff_len ); + + /* normalization of the spectrum and noise fill */ + normalize_spec( 4, exc_diffQ, mDiff_len ); + } + NoiseFill( exc_diffQ, seed_tcx, CRIT_NOIS_BAND ); + + + /*--------------------------------------------------------------------------------------* + * Recompute energy per band of the modified excitation vector (in frequency domain) + *--------------------------------------------------------------------------------------*/ + + Ener_per_band( exc_diffQ, Ener_per_bd_yQ ); + + /*--------------------------------------------------------------------------------------* + * Compute tilt factor and amplify HF accordingly + *--------------------------------------------------------------------------------------*/ + + ftmp = ( 0.5f * ( 1.0f - voice_fac ) ); /* 1=unvoiced, 0=voiced */ + + for ( i = 240; i < L_FRAME; i++ ) + { + ftmp1 = ftmp * ( 0.067f * i - 15.0f ); + ftmp1 = max( 1.0f, ftmp1 ); + exc_diffQ[i] *= ftmp1; + } + + /*--------------------------------------------------------------------------------------* + * Match the energy of the modified excitation vector to the decoded excitation + *--------------------------------------------------------------------------------------*/ + + Apply_gain( exc_diffQ, Ener_per_bd_iQ, Ener_per_bd_yQ ); + + /*--------------------------------------------------------------------------------------* + * Copy to the output vector + *--------------------------------------------------------------------------------------*/ + + mvr2r( exc_diffQ, dct_out, L_FRAME ); + + return; +} + +/*-------------------------------------------------------------------* + * improv_amr_wb_gs() + * + * Modify the decoded excitation to increase quality of + * unvoiced and audio signals (used only in AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +void improv_amr_wb_gs( + const int16_t clas, /* i : signal frame class */ + const int16_t coder_type, /* i : coder type */ + const int32_t core_brate, /* i : bitrate allocated to the core */ + int16_t *seed_tcx, /* i/o: Seed used for noise generation */ + float *old_Aq, /* i/o: old LPC filter coefficient */ + float *mem_syn2, /* i/o: synthesis memory */ + const float lt_voice_fac, /* i/o: long term voice factor */ + const int16_t locattack, /* i : Flag for a detected attack */ + float *Aq, /* i/o: Decoded LP filter coefficient */ + float *exc2, /* i/o: Decoded complete excitation */ + float *mem_tmp, /* i/o: synthesis temporary memory */ + float *syn, /* i/o: Decoded synthesis to be updated */ + const float *pitch_buf, /* i : Decoded pitch buffer */ + const float Last_ener, /* i : Last energy */ + const int16_t rate_switching_reset, /* i : rate switching reset flag */ + const int16_t last_coder_type, /* i : Last coder_type */ + const int16_t VeryLowRateSTflag /* i : Enable the noise enhancement for very low rate stereo generic mode */ +) +{ + int16_t i; + float dct_exc_in[L_FRAME], dct_exc_out[L_FRAME]; + float Aq_orig[NB_SUBFR * ( M + 1 )], enr_LP_old, enr_LP_new; + + /*------------------------------------------------------------* + * Condition to enter the section on excitation modification + *------------------------------------------------------------*/ + + /* Enter the modification for all inactive frames and also for unvoiced frames if bitrate is below 8k85 */ + if ( VeryLowRateSTflag || + ( ( locattack == 0 && core_brate <= ACELP_12k65 ) && + ( ( core_brate < ACELP_8k85 && clas != AUDIO_CLAS && ( clas == UNVOICED_CLAS || clas == VOICED_TRANSITION ) ) || coder_type == INACTIVE ) ) ) + { + /*------------------------------------------------------------* + * two differents paths: + * unvoiced or inactive + * generic audio sound + * LP filter smoothing for inactive parts + *------------------------------------------------------------*/ + *seed_tcx = (int16_t) ( (int16_t) ( pitch_buf[0] * 64.0f ) * (int16_t) ( pitch_buf[3] * 64.0f ) ); + + if ( coder_type == INACTIVE && Last_ener > -3.0f && last_coder_type == UNVOICED && rate_switching_reset == 0 ) + { + mvr2r( Aq, Aq_orig, NB_SUBFR * ( M + 1 ) ); + + for ( i = 0; i < NB_SUBFR * ( M + 1 ); i++ ) + { + Aq[i] = ALP * old_Aq[i] + MALP * Aq[i]; + } + + /* check the smoothed LP filter stability */ + enr_LP_old = enr_1_Az( old_Aq, L_SUBFR ); + for ( i = 0; i < NB_SUBFR; i++ ) + { + enr_LP_new = enr_1_Az( Aq + i * ( M + 1 ), L_SUBFR ); + + if ( enr_LP_new > 128 * enr_LP_old ) + { + /* filter is unstable, do not modify the excitation */ + mvr2r( Aq_orig, Aq, NB_SUBFR * ( M + 1 ) ); + return; + } + + enr_LP_old = enr_LP_new; + } + } + + /*------------------------------------------------------------* + * Find frequency representation of the excitation + * Do the excitation modification according to the content + * Go back to time domain -> Overwrite excitation + *------------------------------------------------------------*/ + + edct( exc2, dct_exc_in, L_FRAME, EVS_MONO ); + + set_f( exc2, 0, L_FRAME ); + set_f( dct_exc_out, 0, L_FRAME ); + + gs_dec_amr_wb( core_brate, seed_tcx, dct_exc_in, dct_exc_out, pitch_buf, lt_voice_fac, clas, coder_type, VeryLowRateSTflag ); + + edct( dct_exc_out, exc2, L_FRAME, EVS_MONO ); + + /*------------------------------------------------------------* + * Redo core synthesis at 12k8 Hz with the modified excitation + *------------------------------------------------------------*/ + + mvr2r( mem_tmp, mem_syn2, M ); + syn_12k8( L_FRAME, Aq, exc2, syn, mem_syn2, 1 ); + } + + return; +} diff --git a/lib_dec/hdecnrm.c b/lib_dec/hdecnrm.c new file mode 100644 index 0000000000..f1a119a867 --- /dev/null +++ b/lib_dec/hdecnrm.c @@ -0,0 +1,403 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_dec.h" +#include "wmops.h" + + +/*--------------------------------------------------------------------------*/ +/* Function decode_huff_context() */ +/* */ +/* Context based Huffman decoding for indices of quantized norms */ +/*--------------------------------------------------------------------------*/ + +/*! r: decoded index */ +static int16_t decode_huff_context( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t *hufftab, /* i : Huffman table */ + int16_t *rbits /* i/o: the number of read bits */ +) +{ + while ( *hufftab > 0 ) + { + *rbits += ( *hufftab & 0xf ); + hufftab += ( *hufftab >> 4 ) + get_next_indice( st, *hufftab & 0xf ); + } + + return ( -*hufftab ); +} + + +/*--------------------------------------------------------------------------*/ +/* Function hdecnrm() */ +/* */ +/* Huffman decoding for indices of quantized norms */ +/*--------------------------------------------------------------------------*/ + +void hdecnrm( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of norms */ + int16_t *index /* o : indices of quantized norms */ +) +{ + int16_t i, j, k, n, m; + int16_t temp; + int16_t *pidx; + + pidx = index; + + m = N - 1; + for ( i = 0; i < m; i++ ) + { + j = 0; + k = 0; + if ( get_next_indice_1( st ) ) + { + j = 1; + } + + if ( get_next_indice_1( st ) ) + { + k = 1; + } + n = j * 2 + k; + j = j * 4; + temp = 16 + n - j; + + if ( get_next_indice_1( st ) ) + { + temp = 12 + n + j; + + if ( get_next_indice_1( st ) ) + { + j = 0; + if ( get_next_indice_1( st ) ) + { + j = 1; + } + + temp = 8 + n; + + if ( j != 0 ) + { + temp += 12; + } + + if ( get_next_indice_1( st ) ) + { + temp = n; + + if ( get_next_indice_1( st ) ) + { + temp = n + 4; + } + + if ( j != 0 ) + { + temp += 24; + } + } + } + } + + *pidx++ = temp; + } + + return; +} + +/*-------------------------------------------------------------------------- + * huff_dec() + * + * Huffman decoding + *--------------------------------------------------------------------------*/ + +void huff_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : Number of codewords to decode */ + const int16_t buffer_len, /* i : Number of bits to read */ + const int16_t num_lengths, /* i : Number of different huffman codeword lengths */ + const int16_t *thres, /* i : Threshold of first codeword of each length */ + const int16_t *offset, /* i : Offset for first codeword */ + const int16_t *huff_tab, /* i : Huffman table order by codeword lengths */ + int16_t *index /* o : Decoded index */ +) +{ + int16_t i, j, k; + uint16_t val; + int16_t last_bits = buffer_len; + + val = 0; + j = 0; + for ( i = 0; i < N; i++ ) + { + last_bits = buffer_len - j; + val <<= last_bits; + val &= ( 1 << buffer_len ) - 1; /* 0xFFF; */ + val |= get_next_indice( st, last_bits ); + + /* Find codeword length */ + j = num_lengths - 1; + while ( val < thres[j] ) + { + j--; + } + k = ( val - thres[j] ) >> j; + *index++ = huff_tab[offset[j] + k]; + } + + /* Put back unused bits */ + st->next_bit_pos -= j; + + return; +} + + +/*-------------------------------------------------------------------------- + * hdecnrm_context() + * + * Huffman decoding for indices of quantized norms + *--------------------------------------------------------------------------*/ + +void hdecnrm_context( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of norms */ + int16_t *index, /* o : indices of quantized norms */ + int16_t *n_length /* o : decoded stream length */ +) +{ + int16_t i, prevj; + + prevj = index[0] + OFFSET_NORM; + for ( i = 1; i < N; i++ ) + { + if ( prevj > HTH_NORM ) + { + /* above */ + index[i] = decode_huff_context( st, hntable, n_length ); + index[i] = 31 - index[i]; + } + else + { + if ( prevj < LTH_NORM ) + { + /* less */ + index[i] = decode_huff_context( st, hntable, n_length ); + } + else + { + /* equal */ + index[i] = decode_huff_context( st, hetable, n_length ); + } + } + prevj = index[i]; + } + + return; +} + + +/*-------------------------------------------------------------------------- + * hdecnrm_resize() + * + * + *--------------------------------------------------------------------------*/ + +void hdecnrm_resize( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of SFMs */ + int16_t *index /* o : norm quantization index vector */ +) +{ + int16_t i, j, k, m; + int16_t temp; + int16_t *pidx; + + pidx = index; + + m = N - 1; + for ( i = 0; i < m; i++ ) + { + j = 0; + k = 0; + + for ( j = 0; j < 11; j++ ) + { + if ( get_next_indice_1( st ) ) + { + k++; + } + else + { + break; + } + } + + if ( k == 11 ) + { + temp = 25; + } + else if ( k == 10 ) + { + temp = 5; + } + else if ( k == 9 ) + { + temp = 6; + } + else + { + if ( get_next_indice_1( st ) ) + { + temp = 16 + k; + } + else + { + temp = 15 - k; + } + } + + *pidx++ = temp; + } + + return; +} + + +/*-------------------------------------------------------------------------- + * hdecnrm_trans() + * + * Huffman decoding for indices of quantized norms + *--------------------------------------------------------------------------*/ + +void hdecnrm_tran( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t N, /* i : number of norms */ + int16_t *index /* o : indices of quantized norms */ +) +{ + int16_t i, j, k, n, m; + int16_t temp; + int16_t *pidx; + int16_t l; + + pidx = index; + + m = N - 1; + for ( i = 0; i < m; i++ ) + { + j = 0; + k = 0; + if ( get_next_indice_1( st ) ) + { + j = 1; + } + + if ( get_next_indice_1( st ) ) + { + k = 1; + } + + n = k * 2 + j; + l = k * 4; + if ( ( j == 0 && k == 0 ) || ( j == 1 && k == 0 ) || ( j == 1 && k == 1 ) ) + { + temp = 15 + l - n; + } + else + { + if ( get_next_indice_1( st ) ) + { + temp = 15 + n - l; + } + else + { + temp = 15 + l - n; + if ( get_next_indice_1( st ) ) + { + for ( k = 0; k < 3; ) + { + if ( get_next_indice_1( st ) ) + { + k++; + } + else + { + break; + } + } + + if ( k == 0 || k == 3 ) + { + temp -= 5; + if ( k == 3 ) + { + temp--; + } + } + else if ( k == 1 ) + { + temp++; + } + else + { + temp += 2; + if ( get_next_indice_1( st ) ) + { + temp++; + if ( get_next_indice_1( st ) ) + { + temp++; + } + } + } + } + } + } + + *pidx++ = temp; + } + + return; +} diff --git a/lib_dec/hf_synth.c b/lib_dec/hf_synth.c new file mode 100644 index 0000000000..9c0f2c8463 --- /dev/null +++ b/lib_dec/hf_synth.c @@ -0,0 +1,1174 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void hp400_12k8( float signal[], const int16_t lg, float mem[] ); + +static void filt_6k_7k( float signal[], const int16_t lg, float mem[] ); + +static void hf_synthesis( ZERO_BWE_DEC_HANDLE hBWE_zero, const int32_t core_brate, const int16_t output_frame, const float Aq[], const float exc[], float synth[], float synth16k[] ); + +static void hf_synthesis_amr_wb( const int32_t core_brate, const int16_t output_subfr, const float Ap[], float exc16k[], float synth_out[], float *mem_syn_hf, float *delay_syn_hf, float *mem_hp_interp, float p_r, float hf_gain_i, float til, float voice_factors, const float exc[] ); + +static void envelope( AMRWB_IO_DEC_HANDLE hAmrwb_IO, const int32_t core_brate, const float Aq[], float Ap[], float *r, float tilt0, float tilt, float voice_factor ); + +static void AdaptiveStartBand( int16_t *start_band, const int32_t core_brate, const float *lsf, const float voicing_fac, const int16_t clas, int16_t *voicing_flag, int16_t *start_band_old, float *OptCrit_old ); + + +/*-------------------------------------------------------------------* + * hf_synth_init() + * + * hf synthesis filters initialization + * - initialization of 400 Hz high pass filter + * - initialization of band pass 6kHz to 7kHz FIR filter + *-------------------------------------------------------------------*/ + +void hf_synth_init( + ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ +) +{ + hBWE_zero->seed2 = RANDOM_INITSEED; + + set_f( hBWE_zero->mem_hp400, 0, 4 ); + set_f( hBWE_zero->mem_hf, 0, ( L_FIR - 1 ) ); + + set_f( hBWE_zero->mem_syn_hf, 0.0f, M ); + set_f( hBWE_zero->mem_hp_interp, 0, INTERP_3_1_MEM_LEN ); + set_f( hBWE_zero->delay_syn_hf, 0, NS2SA( 16000, DELAY_CLDFB_NS ) ); + + + return; +} + +/*-------------------------------------------------------------------* + * hf_synth_amr_wb_init() + * + * hf synthesis filters initialization + * - initialization of 1600 Hz low pass filter + * - initialization of band pass 6kHz to 8kHz FIR filter for noise and line resampled signals + *-------------------------------------------------------------------*/ + +void hf_synth_amr_wb_init( + AMRWB_IO_DEC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO data handle */ +) +{ + hAmrwb_IO->prev_r = 0.0f; + hAmrwb_IO->fmerit_w_sm = 0.0f; + hAmrwb_IO->frame_count = 0; + hAmrwb_IO->ne_min = -30.0f; + hAmrwb_IO->fmerit_m_sm = 0.0f; + hAmrwb_IO->voice_fac_amr_wb_hf = 0.0f; + hAmrwb_IO->unvoicing = 0.0f; + hAmrwb_IO->unvoicing_sm = 1.0f; + hAmrwb_IO->unvoicing_flag = 0; + hAmrwb_IO->voicing_flag = 0; + hAmrwb_IO->start_band_old = 160; + hAmrwb_IO->OptCrit_old = 1.0f; + + return; +} + +/*-------------------------------------------------------------------* + * hf_synth_amr_wb_reset() + * + * reset of HF synthesis filters + * - needed in switching scenarios + *-------------------------------------------------------------------*/ + +void hf_synth_amr_wb_reset( + AMRWB_IO_DEC_HANDLE hAmrwb_IO, /* i/o: AMR-WB IO data handle */ + ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ +) +{ + int16_t i; + + for ( i = 0; i < L_FRAME16k; i++ ) + { + own_random( &( hBWE_zero->seed2 ) ); + } + + set_f( hBWE_zero->mem_syn_hf, 0.0f, M ); + set_f( hBWE_zero->delay_syn_hf, 0.0, NS2SA( 16000, DELAY_CLDFB_NS ) ); + set_f( hBWE_zero->mem_hp_interp, 0, INTERP_3_1_MEM_LEN ); + + hAmrwb_IO->prev_r = 0.0f; + hAmrwb_IO->fmerit_w_sm = 0.0f; + hAmrwb_IO->frame_count = 0; + hAmrwb_IO->ne_min = -30.0f; + hAmrwb_IO->fmerit_m_sm = 0.0f; + hAmrwb_IO->voice_fac_amr_wb_hf = 0.0f; + hAmrwb_IO->unvoicing = 0.0f; + hAmrwb_IO->unvoicing_sm = 1.0f; + hAmrwb_IO->unvoicing_flag = 0; + hAmrwb_IO->voicing_flag = 0; + hAmrwb_IO->start_band_old = 160; + hAmrwb_IO->OptCrit_old = 1.0f; + + return; +} + +/*-------------------------------------------------------------------* + * hf_synth_amr_wb() + * + * HF synthesis in AMR-WB IO + *-------------------------------------------------------------------*/ + +void hf_synth_amr_wb( + AMRWB_IO_DEC_HANDLE hAmrwb_IO, /* i/o: AMR-WB IO data handle */ + ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t output_frame, /* i : output frame length */ + const float *Aq, /* i : quantized Az */ + const float *exc, /* i : excitation at 12.8 kHz */ + float *synth, /* i/o: synthesis signal at 12.8k */ + int16_t *amr_io_class, /* i : signal class (determined by FEC algorithm) */ + float *synth_out, /* i/o: output signal at output Fs */ + float fmerit, /* i : classify parameter from FEC */ + const int16_t *hf_gain, /* i : decoded HF gain */ + const float *voice_factors, /* i : voicing factors */ + const float pitch_buf[], /* i : pitch buffer */ + const float ng_ener_ST, /* i : Noise gate - short-term energy */ + const float *lsf_new /* i : ISF vector */ +) +{ + const float *p_Aq; + float *p_Ap; + int16_t i, j, i_subfr, output_subfr; + float Ap[( M16k + 1 ) * NB_SUBFR]; + float exc16k[L_FRAME16k], dct_exc[L_FRAME], dct_hb[L_FRAME16k]; + float ener, tmp, scale; + float alpha, beta, sub_gain[NB_SUBFR]; + int16_t core_type = 1; + float pitch_var_cur, voice_fac, fmerit_m, fmerit_w; + int16_t start_band; + float til[NB_SUBFR], til0[NB_SUBFR]; + float enr1, enr2; + float *pt1, *pt2; + float e_subfr1[NB_SUBFR], e_subfr2[NB_SUBFR], e_subfr3[NB_SUBFR]; + float HF_corr_gain[NB_SUBFR]; + float filt_weight[80]; + int16_t filt_weight_coeff; + float gamma; + float hb_ener, g, hb_tonal[80], tonal_ener, hb_amb[80], inv_g; + int16_t fb, fn, signum[80]; + + pt1 = (float *) synth + 1; + pt2 = (float *) synth; + for ( i = 0; i < NB_SUBFR; i++ ) + { + enr1 = 0.0f; + enr2 = 0.0f; + enr1 = dotp( pt2, pt2, L_SUBFR ); + enr2 = dotp( pt1, pt2, ( L_SUBFR - 1 ) ); + til[i] = enr2 / ( enr1 + 0.1f ); + til0[i] = til[i]; + pt1 += L_SUBFR; + pt2 += L_SUBFR; + } + + output_subfr = output_frame / NB_SUBFR; + + if ( *amr_io_class != 7 ) + { + core_type = 0; + } + + /* modify LF parameters for excitation weighting or sub-frame gains calculating */ + pitch_var_cur = (float) ( fabs( pitch_buf[0] - pitch_buf[1] ) + fabs( pitch_buf[1] - pitch_buf[2] ) + fabs( pitch_buf[2] - pitch_buf[3] ) ); + + if ( hAmrwb_IO->frame_count > FRAME_COUNT_HF_SYNTH && *amr_io_class == UNVOICED_CLAS ) + { + hAmrwb_IO->frame_count = 0; + hAmrwb_IO->ne_min = -30.0f; + } + else + { + if ( hAmrwb_IO->frame_count > 2 * FRAME_COUNT_HF_SYNTH ) + { + hAmrwb_IO->frame_count = 2 * FRAME_COUNT_HF_SYNTH; + } + else + { + ( hAmrwb_IO->frame_count )++; + } + + if ( ng_ener_ST < hAmrwb_IO->ne_min ) + { + hAmrwb_IO->ne_min = ng_ener_ST; + } + } + + voice_fac = 0.0f; + for ( i = 0; i < NB_SUBFR; i++ ) + { + voice_fac += voice_factors[i]; + } + voice_fac *= 0.25f; + + fmerit_w = fmerit > 0.35f ? 0.35f : ( fmerit < 0.15f ? 0.15f : fmerit ); + if ( core_type == 1 ) + { + fmerit_w *= 0.5f; + } + + fmerit_w *= ( 1.0f + voice_fac ); + hAmrwb_IO->fmerit_w_sm = 0.9f * ( hAmrwb_IO->fmerit_w_sm ) + 0.1f * fmerit_w; + fmerit_w = hAmrwb_IO->fmerit_w_sm; + + fmerit_m = ( 2.0f - ( fmerit < 0.5f ? 1.0f : fmerit ) ); + hAmrwb_IO->fmerit_m_sm = 0.5f * ( hAmrwb_IO->fmerit_m_sm ) + 0.5f * fmerit_m; + fmerit_m = hAmrwb_IO->fmerit_m_sm; + + for ( i = 0; i < NB_SUBFR; i++ ) + { + if ( pitch_var_cur < 10 && ( til[i] ) < 0 ) + { + til[i] = 0.2f; + } + + til[i] = ( 1.0f - ( til[i] ) ) < 0.8f ? 0.8f : ( 1.0f - ( til[i] ) ); + til[i] += ( 30.0f + hAmrwb_IO->ne_min ) * 0.007f; + til[i] *= fmerit_m; + } + + /* predict LPC coefficients and calculate sub-frame gains */ + p_Aq = Aq; + p_Ap = Ap; + for ( i = 0; i < NB_SUBFR; i++ ) + { + envelope( hAmrwb_IO, core_brate, p_Aq, p_Ap, &sub_gain[i], til0[i], til[i], voice_factors[i] ); + + p_Aq += ( M + 1 ); + p_Ap += ( M + 1 ); + } + + /* rate dependent adaptive start band */ + AdaptiveStartBand( &start_band, core_brate, lsf_new, voice_fac, *amr_io_class, &hAmrwb_IO->voicing_flag, &hAmrwb_IO->start_band_old, &hAmrwb_IO->OptCrit_old ); + + /* DCT transform of LF excitation */ + edct( exc, dct_exc, L_FRAME, EVS_MONO ); + + set_f( dct_hb, 0.0f, L_FRAME16k ); + + /* copy excitation from LF */ + for ( i = 200; i < 240; i++ ) + { + dct_hb[i] = dct_exc[i]; + } + + hb_ener = 0.01f; + for ( i = 240; i < L_FRAME16k; i++ ) + { + dct_hb[i] = dct_exc[i + start_band - 240]; + signum[i - 240] = 1; + if ( dct_hb[i] < 0 ) + { + signum[i - 240] = -1; + } + dct_hb[i] *= signum[i - 240]; + hb_ener += dct_hb[i] * dct_hb[i]; + } + + fmerit_w *= ( 1.1f - start_band * 0.00625f ); + alpha = (float) sqrt( fmerit_w ); + beta = 1.0f - fmerit_w; + gamma = max( 0.3f, min( 1.0f, ( 1.05f - alpha * 0.95f ) ) ); + tonal_ener = 0.01f; + for ( i = 0; i < 8; i++ ) + { + fb = 0; + fn = i + 8; + tmp = 0; + for ( j = 0; j < fn; j++ ) + { + tmp += dct_hb[j + 240]; + } + hb_amb[i] = tmp / fn; + hb_tonal[i] = dct_hb[i + 240] - hb_amb[i]; + if ( hb_tonal[i] > 0 ) + { + tonal_ener += hb_tonal[i] * hb_tonal[i]; + } + } + for ( ; i < L_SUBFR16k - 8; i++ ) + { + fb = i - 7; + tmp = 0; + for ( j = fb; j < fb + 15; j++ ) + { + tmp += dct_hb[j + 240]; + } + hb_amb[i] = tmp / 15; + hb_tonal[i] = dct_hb[i + 240] - hb_amb[i]; + if ( hb_tonal[i] > 0 ) + { + tonal_ener += hb_tonal[i] * hb_tonal[i]; + } + } + for ( ; i < L_SUBFR16k; i++ ) + { + fb = i - 7; + fn = L_SUBFR16k - i + 7; + tmp = 0; + for ( j = fb; j < L_SUBFR16k; j++ ) + { + tmp += dct_hb[j + 240]; + } + hb_amb[i] = tmp / fn; + hb_tonal[i] = dct_hb[i + 240] - hb_amb[i]; + if ( hb_tonal[i] > 0 ) + { + tonal_ener += hb_tonal[i] * hb_tonal[i]; + } + } + g = beta * ( hb_ener - tonal_ener ) / ( hb_ener - beta * tonal_ener ); + if ( g < 0.01f && g > -0.01f ) + { + inv_g = sign( g ) * 100; + } + else + { + inv_g = 1 / g; + } + ener = 0.01f; + for ( i = 0; i < L_SUBFR16k; i++ ) + { + if ( hb_tonal[i] > 0 ) + { + hb_tonal[i] *= g; + } + hb_amb[i] *= inv_g; + dct_hb[i + 240] = hb_tonal[i] + hb_amb[i]; + dct_hb[i + 240] *= signum[i]; + ener += dct_hb[i + 240] * dct_hb[i + 240]; + } + scale = (float) ( gamma * sqrt( hb_ener / ener ) ); + + if ( core_brate == ACELP_6k60 ) + { + filt_weight_coeff = 60; + } + else if ( core_brate == ACELP_8k85 ) + { + filt_weight_coeff = 40; + } + else + { + filt_weight_coeff = 20; + } + + for ( i = 0; i < filt_weight_coeff; i++ ) + { + filt_weight[i] = (float) ( -0.999 / ( filt_weight_coeff - 1 ) ) * i + 1.0f; + } + + for ( i = 240; i < L_FRAME16k; i++ ) + { + dct_hb[i] *= scale; + + if ( core_brate < ACELP_23k85 && i > 255 ) + { + dct_hb[i] *= 0.59525f; + } + + if ( i >= L_FRAME16k - filt_weight_coeff ) + { + dct_hb[i] *= filt_weight[i - L_FRAME16k + filt_weight_coeff]; + } + } + + for ( i = 200; i < 256; i++ ) + { + dct_hb[i] *= filt_hp[i - 200]; + + if ( core_brate < ACELP_23k85 ) + { + dct_hb[i] *= deem_tab[i - 200]; + } + } + + if ( core_brate == ACELP_23k85 ) + { + for ( i = 0; i < NB_SUBFR; i++ ) + { + HF_corr_gain[i] = 2 * HP_gain[hf_gain[i]]; + } + } + + /* inverse DCT transform of HF excitation */ + set_f( exc16k, 0.0f, L_FRAME16k ); + edct( dct_hb, exc16k, L_FRAME16k, EVS_MONO ); + + /* energy weighting in consecutive subframes */ + ener = sum2_f( exc, L_FRAME ) + 0.01f; + tmp = sum2_f( exc16k, L_FRAME16k ) + 0.01f; + + for ( i = 0; i < NB_SUBFR; i++ ) + { + e_subfr1[i] = sum2_f( &exc[i * L_SUBFR], L_SUBFR ) + 0.01f; + e_subfr2[i] = sum2_f( &exc16k[i * L_SUBFR16k], L_SUBFR16k ) + 0.01f; + e_subfr3[i] = ( e_subfr1[i] / ener ) * tmp; + + for ( j = i * L_SUBFR16k; j < ( i + 1 ) * L_SUBFR16k; j++ ) + { + exc16k[j] *= (float) sqrt( e_subfr3[i] / e_subfr2[i] ); + } + } + + p_Ap = Ap; + i = 0; + for ( i_subfr = 0; i_subfr < L_FRAME16k; i_subfr += L_SUBFR16k ) + { + /* synthesis of the HF signal */ + hf_synthesis_amr_wb( core_brate, output_subfr, p_Ap, &exc16k[i_subfr], &synth_out[i * output_subfr], hBWE_zero->mem_syn_hf, hBWE_zero->delay_syn_hf, hBWE_zero->mem_hp_interp, sub_gain[i], HF_corr_gain[i], til0[i], voice_factors[i], &exc[i * L_SUBFR] ); + + p_Ap += ( M + 1 ); + i++; + } + + return; +} + +/*-----------------------------------------------------------------------------------* + * hf_synthesis_amr_wb() + * + * HF noise synthesis + * - Generate HF noise between 6 and 8 kHz, mix it with signal obtained by linear resampling. + * - Set energy of high band + *-----------------------------------------------------------------------------------*/ + +static void hf_synthesis_amr_wb( + const int32_t core_brate, /* i : core bitrate */ + const int16_t output_subfr, /* i : output sub-frame length */ + const float Ap[], /* i : quantized Aq */ + float exc16k[], /* i : excitation at 12.8 kHz */ + float synth_out[], /* i/o: synthesis signal at output Fs */ + float *mem_syn_hf, /* i/o: HF synthesis memory */ + float *delay_syn_hf, /* i/o: HF synthesis memory */ + float *mem_hp_interp, /* i/o: interpol. memory */ + float p_r, /* i : sub-frame gain */ + float HF_corr_gain, /* i : HF gain index */ + float til0, + float voice_factors, + const float exc[] ) +{ + int16_t i; + float HF_syn[L_SUBFR16k], upsampled_HF_syn[L_FRAME48k / NB_SUBFR]; + float ener, tmp, scale, exc2385[L_SUBFR16k]; + + if ( core_brate == ACELP_23k85 ) + { + ener = ( sum2_f( exc, L_SUBFR ) + 0.01f ) / 5; + tmp = sum2_f( exc16k, L_SUBFR16k ) + 0.01f; + scale = (float) sqrt( ener / tmp ); + + for ( i = 0; i < L_SUBFR16k; i++ ) + { + exc2385[i] = exc16k[i] * scale * HF_corr_gain; + } + } + + for ( i = 0; i < L_SUBFR16k; i++ ) + { + exc16k[i] *= p_r; + } + + if ( core_brate == ACELP_23k85 ) + { + ener = ( sum2_f( exc16k, L_SUBFR16k ) + 0.01f ) * 0.3f; + tmp = sum2_f( exc2385, L_SUBFR16k ) + 0.01f; + scale = (float) sqrt( ener / tmp ); + + if ( scale > 1.0f || til0 < 0.0f ) + { + mvr2r( exc2385, exc16k, L_SUBFR16k ); + } + else + { + for ( i = 0; i < L_SUBFR16k; i++ ) + { + exc16k[i] = exc2385[i] * max( min( 1.0f, ( 1 - til0 ) * ( 1.6f - voice_factors ) ), scale ); + } + } + } + + syn_filt( Ap, M, exc16k, HF_syn, L_SUBFR16k, mem_syn_hf, 1 ); + + /*-----------------------------------------------------------------* + * Resample to output sampling rate + * Synchronize LB and HB components (delay componsation) + * Add synthesised high band to speech synthesis + *-----------------------------------------------------------------*/ + + /* compensate CLDFB resampling delay */ + delay_signal( HF_syn, L_SUBFR16k, delay_syn_hf, NS2SA( 16000, DELAY_CLDFB_NS ) ); + + /* interpolate the HF synthesis */ + if ( output_subfr == L_FRAME48k / NB_SUBFR ) /* 48kHz sampled output */ + { + interpolate_3_over_1_allpass( HF_syn, L_SUBFR16k, upsampled_HF_syn, mem_hp_interp ); + } + else if ( output_subfr == L_FRAME32k / NB_SUBFR ) /* 32kHz sampled output */ + { + Interpolate_allpass_steep( HF_syn, mem_hp_interp, L_SUBFR16k, upsampled_HF_syn ); + } + else /* 16kHz sampled output */ + { + mvr2r( HF_syn, upsampled_HF_syn, L_SUBFR16k ); + } + + v_add( synth_out, upsampled_HF_syn, synth_out, output_subfr ); + + return; +} + + +/*-----------------------------------------------------------------------------------* + * EnhanceClass() + * + * + *-----------------------------------------------------------------------------------*/ + +static int16_t EnhanceClass( + const float qq, + const float pp, + const float tilt0, /* i : spectrum tilt */ + const float tilt, /* i : spectrum tilt */ + const float voice_factor, /* i : voice factor */ + float *voice_fac, /* i/o: smoothed voiced parameter */ + float *unvoicing, /* i/o: unvoiced parameter */ + float *unvoicing_sm, /* i/o: smoothed unvoiced parameter */ + int16_t *unvoicing_flag /* i/o: unvoiced flag */ +) +{ + float unvoicing_tmp; + + /* Decide (*unvoicing_flag) to allow BWE enhancement when qq>pp */ + *voice_fac = 0.75f * ( *voice_fac ) + 0.25f * voice_factor; + unvoicing_tmp = ( ( 1.0f - tilt0 ) / 2.0f ) * ( 1 - *voice_fac ) * min( tilt / 1.5f, 1.0f ); + *unvoicing = 0.5f * ( *unvoicing ) + 0.5f * unvoicing_tmp; + + if ( *unvoicing_sm > *unvoicing ) + { + *unvoicing_sm = 0.9f * ( *unvoicing_sm ) + 0.1f * ( *unvoicing ); + } + else + { + *unvoicing_sm = 0.99f * ( *unvoicing_sm ) + 0.01f * ( *unvoicing ); + } + + if ( *unvoicing - *unvoicing_sm > 0.1f ) + { + *unvoicing_flag = 1; + } + + if ( *unvoicing - *unvoicing_sm < 0.05f ) + { + *unvoicing_flag = 0; + } + + return ( *unvoicing_flag && qq > pp ); +} + +/*-----------------------------------------------------------------------------------* + * envelope() + * + * + *-----------------------------------------------------------------------------------*/ + +static void envelope( + AMRWB_IO_DEC_HANDLE hAmrwb_IO, + const int32_t core_brate, /* i : core bitrate */ + const float Aq[], /* i : de-quant. LPC coefficents */ + float Ap[], /* o : extended LPC coefficents */ + float *sub_gain, /* o : sub-frame gain */ + float tilt0, /* i : spectrum tilt */ + float tilt, /* i : spectrum tilt */ + float voice_factor /* i : voice factor */ +) +{ + float px, py, rx, ry, pp, rr; + int16_t i, Unvoicing_flag; + float alpha; + float est_level1, est_level2, qx, qy, qq, env_level[3]; + float As[3], k1, k2; + + /* LPC envelope weighting */ + if ( core_brate == ACELP_6k60 ) + { + weight_a( Aq, Ap, 0.9f, M ); + } + else + { + weight_a( Aq, Ap, 0.6f, M ); + } + + /* LPC envelope level estimate */ + pp = 0.0f; + px = 0.0f; + py = 0.0f; + rr = 0.0f; + rx = 0.0f; + ry = 0.0f; + for ( i = 0; i < 17; i++ ) + { + px += Ap[i] * exp_tab_p[i]; + py += Ap[i] * exp_tab_p[33 - i]; + rx += Aq[i] * exp_tab_q[i]; + ry += Aq[i] * exp_tab_q[33 - i]; + } + + pp = 1.0f / ( (float) sqrt( px * px + py * py ) ); + rr = 1.0f / ( (float) sqrt( rx * rx + ry * ry ) ); + + for ( i = 0; i < 3; i++ ) + { + As[i] = Aq[i]; + } + + if ( As[2] == -1 ) + { + k2 = -0.6f; + k1 = 0.99f; + if ( As[1] < 0 ) + { + k1 = -k1; + } + } + else + { + k1 = As[1] / ( 1 + As[2] ); + k2 = As[2]; + if ( k2 > 0.6f ) + { + k2 = 0.6f; + } + if ( k2 < -0.6f ) + { + k2 = -0.6f; + } + if ( k1 > 0.99f ) + { + k1 = 0.99f; + } + if ( k1 < -0.99f ) + { + k1 = -0.99f; + } + } + + As[1] = ( 1 + k2 ) * k1; + As[2] = k2; + + qq = 0.0f; + qx = 0.0f; + qy = 0.0f; + for ( i = 0; i < 3; i++ ) + { + qx += As[i] * exp_tab_q[i]; + qy += As[i] * exp_tab_q[33 - i]; + } + + qq = 1.0f / ( (float) sqrt( qx * qx + qy * qy ) ); + + Unvoicing_flag = EnhanceClass( rr, pp, tilt0, tilt, voice_factor, &hAmrwb_IO->voice_fac_amr_wb_hf, &hAmrwb_IO->unvoicing, &hAmrwb_IO->unvoicing_sm, &hAmrwb_IO->unvoicing_flag ); + + alpha = 0.0f; + if ( Unvoicing_flag ) + { + if ( rr > ( hAmrwb_IO->prev_r ) ) + { + rr = 0.5f * rr + 0.5f * ( hAmrwb_IO->prev_r ); + } + + hAmrwb_IO->prev_r = rr; + rr *= min( 1.0f, tilt * ( 1.6f - voice_factor ) ); + qq *= max( 1.0f, tilt * ( 1.6f - voice_factor ) ); + rr = min( rr, qq ); + rr = max( rr, pp ); + } + else + { + if ( rr < 1.0f && ( hAmrwb_IO->prev_r ) < 1.0f ) + { + alpha = ( 1 - rr * rr ); + } + + rr = alpha * ( hAmrwb_IO->prev_r ) + ( 1 - alpha ) * rr; + hAmrwb_IO->prev_r = rr; + + est_level1 = qq * min( 1.0f, tilt * ( 1.6f - voice_factor ) ); + env_level[0] = pp; + env_level[1] = qq; + env_level[2] = rr; + v_sort( env_level, 0, 2 ); + rr = env_level[0]; + est_level2 = rr * ( 1.0f + (float) fabs( tilt - 1 ) * ( 1.6f - voice_factor ) ); + rr = min( est_level1, est_level2 ); + } + + *sub_gain = min( 5.0f, rr / pp ); + + return; +} + +/*---------------------------------------------------------------------* + * AdaptiveStartBand() + * + * adaptively select the start band of bandwidth extension + *---------------------------------------------------------------------*/ + +static void AdaptiveStartBand( + int16_t *start_band, /* o : start point of copied band */ + const int32_t core_brate, /* i : core bitrate */ + const float *lsf, /* i : lsf frequency */ + const float voicing_fac, /* i : voicing factors */ + const int16_t clas, /* i : signal class (determined by FEC algorithm)*/ + int16_t *voicing_flag, + int16_t *start_band_old, + float *OptCrit_old ) +{ + float lsf_diff[M], Crit, OptCrit = 1.0f, W; + int16_t i, pos, M2, voicing_flag_old; + int16_t tmp1, tmp2; + + /*voicing switching flag : to avoid switching start band frequently in VOICED or AUDIO area*/ + voicing_flag_old = *voicing_flag; + if ( voicing_fac > 0.4f || ( voicing_fac > 0.3f && clas >= VOICED_CLAS ) || clas == AUDIO_CLAS ) + { + *voicing_flag = 1; + } + + if ( voicing_fac < 0.2f && clas < VOICED_CLAS ) + { + *voicing_flag = 0; + } + + /* rate adaptive start band */ + *start_band = 160; + if ( core_brate < ACELP_23k05 ) + { + for ( i = 1; i < ( M - 1 ); i++ ) + { + lsf_diff[i] = lsf[i] - lsf[i - 1]; + } + + W = SQR( 1.0f * core_brate / ACELP_19k85 ) / 6000.0f; + + if ( clas == AUDIO_CLAS ) + { + W *= 0.75f; + } + + pos = 2; + M2 = M - 2; + if ( *voicing_flag == 1 ) + { + if ( core_brate <= ACELP_8k85 ) + { + M2 = M - 8; + } + else if ( core_brate <= ACELP_12k65 ) + { + M2 = M - 6; + } + else if ( core_brate <= ACELP_15k85 ) + { + M2 = M - 4; + } + } + + for ( i = 2; i < M2; i++ ) + { + Crit = lsf_diff[i] * max( 1.0f - lsf[i] * W, 0.001f ); + if ( Crit <= OptCrit || i == 2 ) + { + OptCrit = Crit; + pos = i; + } + } + /* *start_band = (int16_t)( (0.5f*(lsf[pos]+lsf[pos-1])*40/1000.0f - 40) + 0.5f ); */ + /* emulate BASOP precision: */ + tmp1 = (int16_t) ( ( 0.02f * lsf[pos] ) + 0.5f ); + tmp2 = (int16_t) ( ( 0.02f * lsf[pos - 1] ) + 0.5f ); + *start_band = tmp1 + tmp2 - 40; + *start_band = min( max( *start_band, 40 ), 160 ); + + if ( voicing_flag_old != *voicing_flag || ( *voicing_flag == 0 && OptCrit < *OptCrit_old ) || + ( OptCrit < 0.7f * ( *OptCrit_old ) && *OptCrit_old > 64 ) ) + { + *OptCrit_old = OptCrit; + if ( abs( ( *start_band ) - ( *start_band_old ) ) < 20 && *voicing_flag == 1 && voicing_flag_old == 1 ) + { + *start_band = *start_band_old; + } + } + else + { + if ( OptCrit < ( *OptCrit_old ) && ( *voicing_flag ) == 1 ) + { + *OptCrit_old = OptCrit; + } + + *start_band = *start_band_old; + } + + if ( clas == AUDIO_CLAS ) + { + *start_band = min( *start_band, 120 ); + } + + if ( *start_band % 2 != 0 ) + { + *start_band -= 1; + } + } + + *start_band_old = *start_band; + + return; +} + + +/*-------------------------------------------------------------------* + * hf_synth_reset() + * + * Reset of HF synthesis filters (needed in switching scenarios) + *-------------------------------------------------------------------*/ + +void hf_synth_reset( + ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ +) +{ + int16_t i; + + for ( i = 0; i < L_FRAME16k; i++ ) + { + own_random( &( hBWE_zero->seed2 ) ); + } + + set_f( hBWE_zero->mem_hf, 0.0f, ( L_FIR - 1 ) ); + set_f( hBWE_zero->mem_syn_hf, 0.0f, M ); + set_f( hBWE_zero->mem_hp400, 0.0f, 4 ); + set_f( hBWE_zero->delay_syn_hf, 0.0f, NS2SA( 16000, DELAY_CLDFB_NS ) ); + set_f( hBWE_zero->mem_hp_interp, 0, INTERP_3_1_MEM_LEN ); + + return; +} + + +/*---------------------------------------------------------------------* + * hf_synth() + * + * High frequency regeneration + *---------------------------------------------------------------------*/ + +void hf_synth( + ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t output_frame, /* i : output frame length */ + const float *Aq, /* i : quantized Az */ + const float *exc, /* i : excitation at 12.8 kHz */ + float *synth, /* i/o: 12.8kHz synthesis signal */ + float *synth16k /* i/o: 16kHz synthesis signal */ +) +{ + const float *p_Aq; + int16_t i_subfr, output_subfr; + + output_subfr = output_frame / NB_SUBFR; + + p_Aq = Aq; + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + hf_synthesis( hBWE_zero, core_brate, output_subfr, p_Aq, &exc[i_subfr], &synth[i_subfr], &synth16k[i_subfr * output_subfr / L_SUBFR] ); + p_Aq += ( M + 1 ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------* + * hf_synthesis() + * + * HF noise synthesis + * - Generate HF noise between 6 and 7 kHz. + * - Set energy of noise according to synthesis tilt. + * tilt > 0.8 ==> - 14 dB (voiced) + * tilt 0.5 ==> - 6 dB (voiced or noise) + * tilt < 0.0 ==> 0 dB (noise) + *-----------------------------------------------------------------------------------*/ + +static void hf_synthesis( + ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t output_subfr, /* i : output sub-frame length */ + const float Aq[], /* i : quantized Aq */ + const float exc[], /* i : excitation at 12.8 kHz */ + float synth[], /* i/o: 12.8kHz synthesis signal */ + float synth16k[] /* i/o: 16kHz synthesis signal */ +) +{ + int16_t i; + float tmp, ener, fac, scale; + float HF_exc[L_SUBFR16k], HF_syn[L_SUBFR16k], upsampled_HF_syn[L_FRAME48k / NB_SUBFR]; + float Ap[M16k + 1]; + + /*-----------------------------------------------------------------* + * generate white noise vector + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR16k; i++ ) + { + HF_exc[i] = (float) own_random( &( hBWE_zero->seed2 ) ); + } + + /*-----------------------------------------------------------------* + * calculate energy scaling factor so that white noise would have the + * same energy as exc12k8 + * note: the scaling factor should be multiplied by L_SUBFR16k / L_SUBFR for + * correctness but it will have only negligible impact so it has been left like this + *-----------------------------------------------------------------*/ + + ener = sum2_f( exc, L_SUBFR ) + 0.01f; + tmp = sum2_f( HF_exc, L_SUBFR16k ) + 0.01f; + scale = (float) ( sqrt( ener / tmp ) ); + + /*-----------------------------------------------------------------* + * calculate energy scaling factor to respect tilt of synth12k8 + * (tilt: 1=voiced, -1=unvoiced) + *-----------------------------------------------------------------*/ + + hp400_12k8( synth, L_SUBFR, hBWE_zero->mem_hp400 ); + + ener = 0.001f; + tmp = 0.001f; + + for ( i = 1; i < L_SUBFR; i++ ) + { + ener += synth[i] * synth[i]; + tmp += synth[i] * synth[i - 1]; + } + + fac = tmp / ener; + fac = (float) ( 1.0f - fac ); + + if ( core_brate == SID_2k40 || core_brate == FRAME_NO_DATA ) + { + /* emphasize HF noise in CNG */ + fac *= 2.0f; + } + + if ( fac < 0.1f ) + { + fac = 0.1f; + } + + if ( fac > 1.0f ) + { + fac = 1.0f; + } + + scale *= fac; + /*-----------------------------------------------------------------* + * modify HF excitation according to both calculated scaling factors + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR16k; i++ ) + { + HF_exc[i] *= scale; + } + + /*-----------------------------------------------------------------* + * high pass filtering (0.94ms of delay) + *-----------------------------------------------------------------*/ + + filt_6k_7k( HF_exc, L_SUBFR16k, hBWE_zero->mem_hf ); + + /*-----------------------------------------------------------------* + * synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz + *-----------------------------------------------------------------*/ + + weight_a( Aq, Ap, 0.6f, M ); + syn_filt( Ap, M, HF_exc, HF_syn, L_SUBFR16k, hBWE_zero->mem_syn_hf, 1 ); + + /*-----------------------------------------------------------------* + * Add filtered HF noise to speech synthesis + *-----------------------------------------------------------------*/ + + /* delay by 5 samples @16kHz to compensate CLDFB resampling delay (20samples) and HP filtering delay (roughly 15 samples) */ + delay_signal( HF_syn, L_SUBFR16k, hBWE_zero->delay_syn_hf, NS2SA( 16000, DELAY_CLDFB_NS ) - 15 ); + + /* interpolate the HF synthesis */ + if ( output_subfr == L_FRAME48k / NB_SUBFR ) /* 48kHz sampled output */ + { + interpolate_3_over_1_allpass( HF_syn, L_SUBFR16k, upsampled_HF_syn, hBWE_zero->mem_hp_interp ); + } + else if ( output_subfr == L_FRAME32k / NB_SUBFR ) /* 32kHz sampled output */ + { + Interpolate_allpass_steep( HF_syn, hBWE_zero->mem_hp_interp, L_SUBFR16k, upsampled_HF_syn ); + } + else /* 16kHz sampled output */ + { + mvr2r( HF_syn, upsampled_HF_syn, L_SUBFR16k ); + } + + v_add( synth16k, upsampled_HF_syn, synth16k, output_subfr ); + + return; +} + + +/*-----------------------------------------------------------------------* + * hp400_12k8() + * + * 2nd order Cheb2 high pass filter with cut off frequency at 400 Hz. + * Optimized for fixed-point to get the following frequency response: + * + * frequency : 0Hz 100Hz 200Hz 300Hz 400Hz 630Hz 1.5kHz 3kHz + * dB loss : -infdB -30dB -20dB -10dB -3dB +6dB +1dB 0dB + * + * Algorithm : + * + * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] + * + a[1]*y[i-1] + a[2]*y[i-2]; + * + * short b[3] = {3660, -7320, 3660}; in Q12 + * short a[3] = {4096, 7320, -3540}; in Q12 + * + * float b[3] = {0.893554687, -1.787109375, 0.893554687}; + * float a[3] = {1.000000000, 1.787109375, -0.864257812}; + *-----------------------------------------------------------------------*/ + +static void hp400_12k8( + float signal[], /* i/o: signal */ + const int16_t lg, /* i : length of signal */ + float mem[] /* i/o: filter memory [4] */ +) +{ + int16_t i; + float x0, x1, x2; + float yy0, yy1, y2; + + + yy1 = mem[0]; + y2 = mem[1]; + x0 = mem[2]; + x1 = mem[3]; + + for ( i = 0; i < lg; i++ ) + { + x2 = x1; + x1 = x0; + x0 = signal[i]; + yy0 = yy1 * a_hp400[1] + y2 * a_hp400[2] + x0 * b_hp400[0] + x1 * b_hp400[1] + x2 * b_hp400[2]; + + signal[i] = yy0; + y2 = yy1; + yy1 = yy0; + } + + mem[0] = yy1; + mem[1] = y2; + mem[2] = x0; + mem[3] = x1; + + return; +} + +/*-------------------------------------------------------------------* + * filt_6k_7k() + * + * 15th order band pass 6kHz to 7kHz FIR filter + * + * frequency :4kHz 5kHz 5.5kHz 6kHz 6.5kHz 7kHz 7.5kHz 8kHz + * dB loss : -60dB -45dB -13dB -3dB 0dB -3dB -13dB -45dB + * (gain = 4.0) + *-------------------------------------------------------------------*/ + +static void filt_6k_7k( + float signal[], /* i/o: signal */ + const int16_t lg, /* i : signal length */ + float mem[] /* i/o: filter memory */ +) +{ + int16_t i, j; + float s, x[L_FRAME48k / NB_SUBFR + ( L_FIR - 1 )]; + + for ( i = 0; i < ( L_FIR - 1 ); i++ ) + { + x[i] = mem[i]; + } + + for ( i = 0; i < lg; i++ ) + { + x[i + ( L_FIR - 1 )] = signal[i]; + } + + for ( i = 0; i < lg; i++ ) + { + s = 0.0; + for ( j = 0; j < L_FIR; j++ ) + { + s += x[i + j] * fir_6k_7k[j]; + } + + /* gain of coef = 4.0 */ + signal[i] = (float) ( s * 0.25 ); + } + + for ( i = 0; i < L_FIR - 1; i++ ) + { + mem[i] = x[i + lg]; + } + + return; +} diff --git a/lib_dec/hq_classifier_dec.c b/lib_dec/hq_classifier_dec.c new file mode 100644 index 0000000000..38a0230079 --- /dev/null +++ b/lib_dec/hq_classifier_dec.c @@ -0,0 +1,106 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hq_classifier_dec() + * + * HQ mode selector (decision_matrix) + *--------------------------------------------------------------------------*/ + +/*! r: Consumed bits */ +int16_t hq_classifier_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t length, /* i : Frame length */ + int16_t *is_transient, /* o : Transient flag */ + int16_t *hqswb_clas /* o : HQ class */ +) +{ + int16_t bits; + int32_t max_brate; + + max_brate = HQ_32k; + if ( st->element_mode > EVS_MONO ) + { + max_brate = HQ_48k; + } + + if ( ( ( length == L_SPEC32k ) || ( length == L_SPEC48k ) ) && core_brate <= max_brate ) + { + *hqswb_clas = get_next_indice( st, 2 ); + bits = 2; + } + else if ( length == L_SPEC16k_EXT || length == L_SPEC48k_EXT ) + { + *hqswb_clas = HQ_NORMAL; + bits = 0; + } + else + { + *hqswb_clas = get_next_indice( st, 1 ); + bits = 1; + } + + *is_transient = 0; + if ( *hqswb_clas == HQ_TRANSIENT ) + { + *is_transient = 1; + } + + if ( st->core_brate <= HQ_32k && *hqswb_clas == HQ_NORMAL ) + { + if ( length == L_SPEC32k ) + { + *hqswb_clas = HQ_GEN_SWB; + } + else if ( length == L_SPEC48k ) + { + *hqswb_clas = HQ_GEN_FB; + } + } + + return bits; +} diff --git a/lib_dec/hq_conf_fec.c b/lib_dec/hq_conf_fec.c new file mode 100644 index 0000000000..5e0e6426f2 --- /dev/null +++ b/lib_dec/hq_conf_fec.c @@ -0,0 +1,70 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hq_configure_bfi() + * + * Initialization of HQ bands and subframes + *--------------------------------------------------------------------------*/ + +void hq_configure_bfi( + int16_t *nb_sfm, /* o : Number of sub bands */ + int16_t *num_Sb, /* o : Number of FEC sub bands ? */ + int16_t *num_bands_p, /* o : FEC sub bands */ + const int16_t **sfmsize, /* o : Subband bandwidths */ + const int16_t **sfm_start, /* o : Subband start coefficients */ + const int16_t **sfm_end /* o : Subband end coefficients */ +) +{ + *num_Sb = MAX_SB_NB; + *nb_sfm = SFM_N_NB; + mvs2s( Num_bands_NB, num_bands_p, *num_Sb ); + *sfmsize = band_len_wb; + *sfm_start = band_start_wb; + *sfm_end = band_end_wb; + + return; +} diff --git a/lib_dec/hq_core_dec.c b/lib_dec/hq_core_dec.c new file mode 100644 index 0000000000..507d80596e --- /dev/null +++ b/lib_dec/hq_core_dec.c @@ -0,0 +1,629 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" +#include "ivas_prot.h" + + +/*-------------------------------------------------------------------------- + * hq_core_dec() + * + * HQ core decoder + *--------------------------------------------------------------------------*/ + +void hq_core_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float synth[], /* o : output synthesis */ + const int16_t output_frame, /* i : output frame length */ + const int16_t hq_core_type, /* i : HQ core type */ + const int16_t core_switching_flag, /* i : ACELP->HQ switching frame flag */ + float *output /* o : LB synthesis in case of ACELP-HQ switch */ +) +{ + int16_t num_bits, is_transient, hqswb_clas, inner_frame; + int16_t i, j, flag_uv, num_Sb, nb_sfm; + int16_t ynrm[NB_SFM], num_bands_p[MAX_SB_NB]; + float ener_match, mean_en_high; + float t_audio_q[L_FRAME48k_EXT], wtda_audio[2 * L_FRAME48k]; + float wtda_audio_LB[2 * L_FRAME16k]; + int16_t delay_comp; + float normq[NB_SFM], SWB_fenv[SWB_FENV + DIM_FB]; + const int16_t *sfmsize, *sfm_start, *sfm_end; + float gapsynth[L_FRAME48k]; + + HQ_DEC_HANDLE hHQ_core; + HQ_NBFEC_HANDLE hHQ_nbfec; + + TCX_DEC_HANDLE hTcxDec; + TCX_CONFIG_HANDLE tcx_cfg; + int16_t index, left_rect, tcx_offsetFB, overlapFB, L_frameTCX; + int16_t tcx_offset, overlap, L_frame, L_spec, fscaleFB; + int16_t L_frameTCX_glob, L_frame_glob; + float acelp_zir[L_FRAME_MAX / 2]; + int16_t encoderLookahead, encoderLookaheadFB; + int16_t hq_recovery_flag; + int16_t mdctWindowLength; + int16_t mdctWindowLengthFB; + + wmops_sub_start( "hq_core_dec" ); + /*-------------------------------------------------------------------------- + * Initializations + *--------------------------------------------------------------------------*/ + + hHQ_core = st->hHQ_core; + hHQ_nbfec = st->hHQ_nbfec; + + set_f( t_audio_q, 0.0f, L_FRAME48k_EXT ); + set_f( gapsynth, 0.0f, L_FRAME48k ); + set_s( num_bands_p, 0, MAX_SB_NB ); + set_s( ynrm, 39, NB_SFM ); /* Initialize to the smallest value */ + mean_en_high = 0.0f; + sfm_start = sfm_end = NULL; + num_Sb = nb_sfm = 0; + + hTcxDec = st->hTcxDec; + + if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) + { + st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + } + else + { + st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; + } + st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + + hq_recovery_flag = ( st->last_core == ACELP_CORE ) && st->prev_bfi && ( st->element_mode > EVS_MONO ); /* ACELP -> HQtrans -> HQ; with HQtrans lost */ + + /*-------------------------------------------------------------------------- + * Find the number of bits for transform-domain coding + *--------------------------------------------------------------------------*/ + + /* set the total bit-budget */ + num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + + /* Set default spectrum length */ + L_spec = l_spec_tbl[st->bwidth]; + + if ( !st->bfi ) + { + if ( core_switching_flag ) + { + if ( st->element_mode != EVS_MONO ) + { + L_spec = l_spec_ext_tbl[st->bwidth]; + } + else + { + /* Preprocessing in the first HQ frame after ACELP frame */ + core_switching_hq_prepare_dec( st, &num_bits, output_frame ); + + /* During ACELP->HQ core switching, limit the HQ core bitrate to 48kbps */ + if ( num_bits > HQ_48k / FRAMES_PER_SEC ) + { + num_bits = (int16_t) ( HQ_48k / FRAMES_PER_SEC ); + } + } + } + + if ( hq_recovery_flag ) + { + acelp_plc_mdct_transition( st ); + } + + /* subtract signalling bits */ + num_bits -= st->next_bit_pos; + + /* set FEC parameters */ + flag_uv = 1 - hHQ_core->HqVoicing; + + /* subtract the number of bits for pitch & gain at higher bitrates */ + if ( !( core_switching_flag ) && st->core_brate > MINIMUM_RATE_TO_ENCODE_VOICING_FLAG ) + { + hHQ_core->HqVoicing = get_next_indice( st, 1 ); + num_bits -= 1; + } + else + { + hHQ_core->HqVoicing = 0; + if ( st->core_brate > MINIMUM_RATE_TO_ENCODE_VOICING_FLAG ) + { + hHQ_core->HqVoicing = 1; + } + } + } + else + { + flag_uv = 0; + } + + /* set inner frame (== coded bandwidth) length */ + inner_frame = inner_frame_tbl[st->bwidth]; + + if ( st->bfi == 0 ) + { + if ( output_frame >= L_FRAME16k ) + { + hHQ_core->ph_ecu_HqVoicing = hHQ_core->HqVoicing; + } + else + { + hHQ_core->ph_ecu_HqVoicing = 0; + } + } + + if ( output_frame == L_FRAME8k ) + { + hq_configure_bfi( &nb_sfm, &num_Sb, num_bands_p, &sfmsize, &sfm_start, &sfm_end ); + } + + /*-------------------------------------------------------------------------- + * transform-domain decoding + *--------------------------------------------------------------------------*/ + + if ( st->bfi ) + { + is_transient = hHQ_core->old_is_transient[0]; + if ( output_frame >= L_FRAME16k ) + { + hq_ecu( st->hTcxDec->prev_good_synth, t_audio_q, &hHQ_core->time_offs, hHQ_core->X_sav, &hHQ_core->num_p, hHQ_core->plocs, hHQ_core->plocsi, hHQ_core->env_stab, &hHQ_core->last_fec, hHQ_core->ph_ecu_HqVoicing, &hHQ_core->ph_ecu_active, gapsynth, st->prev_bfi, hHQ_core->old_is_transient, hHQ_core->mag_chg_1st, hHQ_core->Xavg, &hHQ_core->beta_mute, output_frame, st ); + } + else + { + HQ_FEC_processing( st, t_audio_q, is_transient, hHQ_nbfec->ynrm_values, hHQ_nbfec->r_p_values, num_Sb, nb_sfm, num_bands_p, output_frame, sfm_start, sfm_end ); + } + + hHQ_core->old_is_transient[2] = hHQ_core->old_is_transient[1]; + hHQ_core->old_is_transient[1] = hHQ_core->old_is_transient[0]; + + if ( output_frame >= L_FRAME16k ) + { + /* keep st->previoussynth updated as in FEC_HQ_pitch_analysis but no LP analysis */ + delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + mvr2r( st->previoussynth + delay_comp, st->previoussynth, output_frame - delay_comp ); + mvr2r( st->delay_buf_out, st->previoussynth + output_frame - delay_comp, delay_comp ); + + flag_uv = 1; /* disable costly pitch out synthesis in bfi frame */ + hHQ_core->HqVoicing = 1 - flag_uv; /* safety setting for HQ->ACELP switch logic */ + set_f( hHQ_core->fer_samples, 0.0f, L_FRAME48k ); /* safety, create a known signal state for HQ->ACELP switch logic */ + } + } + else + { + if ( hq_core_type == LOW_RATE_HQ_CORE ) + { + if ( st->prev_bfi == 1 ) + { + set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( hHQ_core->last_env, 0, BANDS_MAX ); + hHQ_core->last_max_pos_pulse = 0; + } + + /* HQ low rate decoder */ + hq_lr_dec( st, t_audio_q, inner_frame, num_bits, &is_transient ); + + hqswb_clas = is_transient; + } + else + { + /* HQ high rate decoder */ + hq_hr_dec( st, t_audio_q, L_spec, num_bits, ynrm, &is_transient, &hqswb_clas, SWB_fenv ); + } + + if ( st->element_mode == EVS_MONO || ( !core_switching_flag && !hq_recovery_flag ) ) + { + /* scaling (coefficients are in nominal level) */ + if ( output_frame != NORM_MDCT_FACTOR ) + { + ener_match = (float) sqrt( (float) output_frame / (float) NORM_MDCT_FACTOR ); + + for ( i = 0; i < inner_frame; i++ ) + { + t_audio_q[i] *= ener_match; + } + } + } + + HQ_FEC_Mem_update( st, t_audio_q, normq, ynrm, num_bands_p, is_transient, hqswb_clas, core_switching_flag, nb_sfm, num_Sb, &mean_en_high, hq_core_type, output_frame ); + } + + /*-------------------------------------------------------------------------- + * Attenuate HFs in case of band-width switching (from higher BW to lower BW) + *--------------------------------------------------------------------------*/ + + /* attenuate HFs in case of band-width switching */ + if ( st->bws_cnt1 > 0 ) + { + ener_match = (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; + + if ( is_transient ) + { + for ( i = 0; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) + { + for ( j = inner_frame_tbl[st->bwidth - 1] / NUM_TIME_SWITCHING_BLOCKS; j < inner_frame / NUM_TIME_SWITCHING_BLOCKS; j++ ) + { + t_audio_q[i * inner_frame / NUM_TIME_SWITCHING_BLOCKS + j] *= ener_match; + } + } + } + else + { + for ( i = inner_frame_tbl[st->bwidth - 1]; i < inner_frame; i++ ) + { + t_audio_q[i] *= ener_match; + } + } + } + + /* WB/SWB bandwidth switching */ + if ( is_transient ) + { + mvr2r( t_audio_q + 240, st->t_audio_q, 80 ); + } + else + { + mvr2r( t_audio_q, st->t_audio_q, L_FRAME ); + } + + /*-------------------------------------------------------------------------- + * Inverse transform + * Overlap-add + * Pre-echo reduction + *--------------------------------------------------------------------------*/ + + if ( st->element_mode > EVS_MONO && ( core_switching_flag || hq_recovery_flag ) ) + { + /* Initializations for TCX MDCT framework, to be used for switching frame */ + tcx_cfg = st->hTcxCfg; + L_frameTCX_glob = hTcxDec->L_frameTCX; + L_frame_glob = st->L_frame; + L_spec = hTcxDec->L_frameTCX; + st->fscale = sr2fscale( st->sr_core ); + fscaleFB = sr2fscale( st->output_Fs ); + encoderLookahead = ( L_LOOK_12k8 * st->fscale ) / FSCALE_DENOM; + encoderLookaheadFB = ( L_LOOK_12k8 * fscaleFB ) / FSCALE_DENOM; + mdctWindowLength = getMdctWindowLength( st->fscale ); + mdctWindowLengthFB = (int16_t) ( mdctWindowLength * st->output_Fs / st->sr_core ); + if ( core_switching_flag ) + { + tcx_cfg->tcx_last_overlap_mode = TRANSITION_OVERLAP; + tcx_cfg->tcx_curr_overlap_mode = FULL_OVERLAP; + } + else + { + tcx_cfg->tcx_last_overlap_mode = ALDO_WINDOW; + tcx_cfg->tcx_curr_overlap_mode = ALDO_WINDOW; + st->last_core = HQ_CORE; /* Needed to decode non-transition frame */ + } + + init_tcx_window_cfg( tcx_cfg, st->sr_core, st->output_Fs, st->L_frame, hTcxDec->L_frameTCX, encoderLookahead, encoderLookaheadFB, mdctWindowLength, mdctWindowLengthFB, st->element_mode ); + + init_tcx_info( st, L_frame_glob, L_frameTCX_glob, 0, st->bfi, &tcx_offset, &tcx_offsetFB, &L_frame, &L_frameTCX, &left_rect, &L_spec ); + + overlap = tcx_cfg->tcx_mdct_window_length; + overlapFB = tcx_cfg->tcx_mdct_window_lengthFB; + index = tcx_cfg->tcx_last_overlap_mode; + + /* LB synthesis */ + IMDCT( t_audio_q, hTcxDec->syn_Overl, hTcxDec->syn_Overl_TDAC, wtda_audio, tcx_cfg->tcx_aldo_window_1_trunc, tcx_cfg->tcx_aldo_window_2, tcx_cfg->tcx_mdct_window_half, tcx_cfg->tcx_mdct_window_minimum, tcx_cfg->tcx_mdct_window_trans, tcx_cfg->tcx_mdct_window_half_length, tcx_cfg->tcx_mdct_window_min_length, index, + MDCT_IV, left_rect, tcx_offset, overlap, L_frame, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frame_glob, 0, st->bfi, hHQ_core->old_outLB, 0, st, 0, acelp_zir ); + + mvr2r( wtda_audio + ( overlap >> 1 ) - tcx_offset, output, L_frame_glob ); + + /* FB synthesis */ + IMDCT( t_audio_q, hTcxDec->syn_OverlFB, hTcxDec->syn_Overl_TDACFB, wtda_audio, tcx_cfg->tcx_aldo_window_1_FB_trunc, tcx_cfg->tcx_aldo_window_2_FB, tcx_cfg->tcx_mdct_window_halfFB, tcx_cfg->tcx_mdct_window_minimumFB, tcx_cfg->tcx_mdct_window_transFB, tcx_cfg->tcx_mdct_window_half_lengthFB, tcx_cfg->tcx_mdct_window_min_lengthFB, index, + MDCT_IV, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frameTCX_glob, 0, st->bfi, hHQ_core->old_out, 1, st, FSCALE_DENOM * L_frameTCX_glob / L_frame_glob, acelp_zir ); + + mvr2r( wtda_audio + ( overlapFB >> 1 ) - tcx_offsetFB, synth, L_frameTCX_glob ); + + if ( !core_switching_flag ) + { + st->last_core = ACELP_CORE; /* Restore last core */ + } + } + else + { + if ( output_frame == L_FRAME8k || st->bfi == 0 ) + { + if ( ( output_frame != inner_frame ) && ( st->bfi == 1 ) ) + { + inverse_transform( t_audio_q, wtda_audio, is_transient, output_frame, output_frame, st->element_mode ); + } + else + { + inverse_transform( t_audio_q, wtda_audio, is_transient, output_frame, inner_frame, st->element_mode ); + } + } + + if ( st->element_mode > EVS_MONO ) + { + if ( st->bfi ) + { + /* Rough resampling, but reduces energy loss in case of switch to ACELP in first good frame */ + lerp( t_audio_q, wtda_audio_LB, st->L_frame, inner_frame ); + v_multc( t_audio_q, 0.5f, wtda_audio_LB, st->L_frame ); + } + else + { + /* LB synthesis for potential switch to ACELP */ + ener_match = (float) sqrt( (float) st->L_frame / (float) output_frame ); + v_multc( t_audio_q, ener_match, t_audio_q, inner_frame ); + inverse_transform( t_audio_q, wtda_audio_LB, is_transient, st->L_frame, inner_frame, st->element_mode ); + } + } + + if ( output_frame == L_FRAME8k ) + { + if ( st->bfi == 0 && st->prev_bfi == 0 ) + { + mvr2r( hHQ_core->old_out + (int16_t) ( N_ZERO_MDCT_NS * output_frame / FRAME_SIZE_NS ), hHQ_nbfec->prev_oldauOut, output_frame - (int16_t) ( N_ZERO_MDCT_NS * output_frame / FRAME_SIZE_NS ) ); + } + else if ( st->prev_bfi == 1 ) + { + set_f( hHQ_nbfec->prev_oldauOut, 0.0f, output_frame ); + } + + if ( ( st->prev_bfi == 1 || st->bfi == 1 ) && !hHQ_core->old_is_transient[2] && st->last_core == HQ_CORE && st->last_codec_mode == MODE1 ) + { + time_domain_FEC_HQ( st, wtda_audio, synth, mean_en_high, output_frame ); + } + else + { + window_ola( wtda_audio, synth, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + hHQ_nbfec->phase_mat_next = 0; + } + + if ( ( !st->bfi && !st->prev_bfi ) || ( !( output_frame >= L_FRAME16k ) ) ) + { + preecho_sb( st->core_brate, wtda_audio, synth, output_frame, &hHQ_core->memfilt_lb, &hHQ_core->mean_prev_hb, &hHQ_core->smoothmem, &hHQ_core->mean_prev, &hHQ_core->mean_prev_nc, &hHQ_core->wmold_hb, &hHQ_core->prevflag, &hHQ_core->pastpre, st->bwidth ); + } + } + else + { + if ( st->bfi && output_frame >= L_FRAME16k ) + { + window_ola( t_audio_q, synth, hHQ_core->old_out, output_frame, ALDO_WINDOW, ALDO_WINDOW, st->prev_bfi && !hHQ_core->ph_ecu_active, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + } + else + { + window_ola( wtda_audio, synth, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi && !hHQ_core->ph_ecu_active, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + } + + if ( st->element_mode > EVS_MONO ) + { + /* LB synthesis for potential switch to ACELP */ + window_ola( wtda_audio_LB, output, hHQ_core->old_outLB, L_FRAME16k, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi && !hHQ_core->ph_ecu_active, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); + } + + if ( ( !st->bfi && !st->prev_bfi ) || ( !( output_frame >= L_FRAME16k ) ) ) + { + preecho_sb( st->core_brate, wtda_audio, synth, output_frame, &hHQ_core->memfilt_lb, &hHQ_core->mean_prev_hb, &hHQ_core->smoothmem, &hHQ_core->mean_prev, &hHQ_core->mean_prev_nc, &hHQ_core->wmold_hb, &hHQ_core->prevflag, &hHQ_core->pastpre, st->bwidth ); + } + } + } + + if ( !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) + { + waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut, synth, 0, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); + } + + if ( output_frame >= L_FRAME16k ) + { + if ( hHQ_core->ph_ecu_HqVoicing ) + { + hHQ_core->oldHqVoicing = 1; + mvr2r( gapsynth, hHQ_core->oldgapsynth, L_FRAME48k ); + } + else + { + hHQ_core->oldHqVoicing = 0; + } + } + else + { + hHQ_core->oldHqVoicing = 0; + } + + if ( st->nbLostCmpt == FRAMECTTOSTART_MDCT ) + { + hHQ_core->HqVoicing = 0; + } + + if ( output_frame == L_FRAME8k ) + { + mvr2r( wtda_audio, hHQ_nbfec->oldIMDCTout, L_FRAME8k / 2 ); + mvr2r( hHQ_nbfec->old_auOut_2fr + output_frame, hHQ_nbfec->old_auOut_2fr, output_frame ); + mvr2r( synth, hHQ_nbfec->old_auOut_2fr + output_frame, output_frame ); + } + + + /* update buffer of old subframe pitch values */ + if ( st->last_core == HQ_CORE && st->L_frame != st->last_L_frame ) + { + set_f( &st->old_pitch_buf[st->L_frame / L_SUBFR], (float) L_SUBFR, st->L_frame / L_SUBFR ); + } + mvr2r( &st->old_pitch_buf[st->L_frame / L_SUBFR], st->old_pitch_buf, st->L_frame / L_SUBFR ); + set_f( &st->old_pitch_buf[st->L_frame / L_SUBFR], (float) L_SUBFR, st->L_frame / L_SUBFR ); + mvr2r( &st->mem_pitch_gain[2], &st->mem_pitch_gain[st->L_frame / L_SUBFR + 2], st->L_frame / L_SUBFR ); + set_zero( &st->mem_pitch_gain[2], st->L_frame / L_SUBFR ); + + /* Move LB excitation to old_exc memory in case of switch HQ->ACELP */ + if ( st->element_mode > EVS_MONO ) + { + mvr2r( output, st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame ); + } + + wmops_sub_end(); + return; +} + + +/*-------------------------------------------------------------------* + * hq_core_dec_init() + * + * Initialize HQ core state structure + *-------------------------------------------------------------------*/ + +void HQ_core_dec_init( + HQ_DEC_HANDLE hHQ_core /* i/o: HQ core data handle */ +) +{ + + set_f( hHQ_core->old_out, 0, L_FRAME48k ); + set_f( hHQ_core->old_outLB, 0, L_FRAME32k ); + set_s( hHQ_core->old_is_transient, 0, 3 ); + + hHQ_core->oldHqVoicing = 0; + + set_f( hHQ_core->prev_noise_level, 0.0f, 2 ); + hHQ_core->prev_R = 0; + set_f( hHQ_core->prev_coeff_out, 0, L_HQ_WB_BWE ); + set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); + + /* HQ GENERIC */ + hHQ_core->hq_generic_seed = RANDOM_INITSEED; + + hHQ_core->mem_norm[0] = 31; + set_s( hHQ_core->mem_norm + 1, 39, SFM_N_ENV_STAB - 1 ); + hHQ_core->mem_env_delta = 0; + hHQ_core->no_att_hangover = 0; + hHQ_core->energy_lt = 300.0f; + + hHQ_core->HqVoicing = 0; + set_f( hHQ_core->fer_samples, 0, L_FRAME48k ); + set_f( hHQ_core->prev_env, 0, SFM_N_WB ); + set_f( hHQ_core->prev_normq, 0, SFM_N_WB ); + hHQ_core->prev_hqswb_clas = HQ_NORMAL; + + set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( hHQ_core->last_env, 0, BANDS_MAX ); + hHQ_core->last_max_pos_pulse = 0; + hHQ_core->prev_frm_hfe2 = 0; + hHQ_core->prev_stab_hfe2 = 0; + hHQ_core->prev_ni_ratio = 0.5f; + set_f( hHQ_core->prev_En_sb, 0.0f, NB_SWB_SUBBANDS ); + + + /*----------------------------------------------------------------------------------* + * HQ FEC + *----------------------------------------------------------------------------------*/ + + set_f( hHQ_core->X_sav, 0.0f, PH_ECU_SPEC_SIZE ); + hHQ_core->num_p = 0; + hHQ_core->ph_ecu_active = 0; + hHQ_core->ni_seed_forfec = 0; + hHQ_core->last_fec = 0; + hHQ_core->ph_ecu_HqVoicing = 0; + set_f( hHQ_core->oldgapsynth, 0.0f, L_FRAME48k ); + hHQ_core->env_stab = 0.75f; + hHQ_core->mem_norm_hqfec[0] = 31; + set_s( hHQ_core->mem_norm_hqfec + 1, 39, SFM_N_ENV_STAB - 1 ); + hHQ_core->mem_env_delta_hqfec = 0; + hHQ_core->env_stab_plc = 0.0f; + set_f( hHQ_core->env_stab_state_p, 1.0f / NUM_ENV_STAB_PLC_STATES, NUM_ENV_STAB_PLC_STATES ); + hHQ_core->envstabplc_hocnt = 0; + + set_f( hHQ_core->mag_chg_1st, 1.0f, LGW_MAX ); + set_f( hHQ_core->Xavg, 0.0f, LGW_MAX ); + hHQ_core->beta_mute = BETA_MUTE_FAC_INI; + + hHQ_core->time_offs = 0; + hHQ_core->ber_occured_in_pvq = 0; + + hHQ_core->last_hq_core_type = -1; + + reset_preecho_dec( hHQ_core ); + + return; +} + +/*-------------------------------------------------------------------* + * HQ_nbfec_init() + * + * Initialize HQ NB FEC state structure + *-------------------------------------------------------------------*/ + +void HQ_nbfec_init( + HQ_NBFEC_HANDLE hHQ_nbfec /* i/o: HQ NB FEC data handle */ +) +{ + int16_t i, j; + + hHQ_nbfec->prev_last_core = -1; + + set_f( hHQ_nbfec->old_coeffs, 0, L_FRAME8k ); + set_f( hHQ_nbfec->old_auOut_2fr, 0, L_FRAME8k * 2 ); + set_f( hHQ_nbfec->old_out_pha[0], 0, N_LEAD_NB ); + set_f( hHQ_nbfec->old_out_pha[1], 0, N_LEAD_NB ); + + hHQ_nbfec->phase_mat_flag = 0; + hHQ_nbfec->phase_mat_next = 0; + hHQ_nbfec->old_Min_ind = 0; + hHQ_nbfec->diff_energy = 0.f; + set_f( hHQ_nbfec->oldIMDCTout, 0.f, L_FRAME8k / 2 ); + set_f( hHQ_nbfec->prev_oldauOut, 0.f, L_FRAME8k ); + hHQ_nbfec->stat_mode_out = 0; + hHQ_nbfec->stat_mode_old = 0; + + for ( i = 0; i < MAX_SB_NB; i++ ) + { + for ( j = 0; j < MAX_PGF; j++ ) + { + hHQ_nbfec->ynrm_values[i][j] = 0.f; + } + for ( j = 0; j < MAX_ROW; j++ ) + { + hHQ_nbfec->r_p_values[i][j] = 0.f; + } + } + set_f( hHQ_nbfec->Norm_gain, 1.f, SFM_N_NB ); + set_f( hHQ_nbfec->energy_MA_Curr, 100.f, 2 ); + hHQ_nbfec->HQ_FEC_seed = RANDOM_INITSEED; + + set_s( hHQ_nbfec->prev_sign_switch, 0, HQ_FEC_SIGN_SFM ); + set_s( hHQ_nbfec->prev_sign_switch_2, 0, HQ_FEC_SIGN_SFM ); + + return; +} diff --git a/lib_dec/hq_env_dec.c b/lib_dec/hq_env_dec.c new file mode 100644 index 0000000000..d4abecfc5d --- /dev/null +++ b/lib_dec/hq_env_dec.c @@ -0,0 +1,202 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------------* + * decode_envelope_indices() + * + * Decode envelope indices + *------------------------------------------------------------------------*/ + +/*! r: Number of bits */ +int16_t decode_envelope_indices( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t start_norm, /* i : starting band index */ + const int16_t num_sfm, /* i : Number of subbands */ + const int16_t numnrmibits, /* i : Bitrate of fall-back coding mode */ + int16_t *difidx, /* o : Diff indices/encoded diff indices */ + const int16_t flag_HQ2, /* i : indicator of HQ2 core */ + const int16_t is_transient /* i : transient flag */ +) +{ + int16_t hcode_l; + int16_t i; + int16_t LCmode; + + if ( flag_HQ2 == LOW_RATE_HQ_CORE || flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) + { + LCmode = get_next_indice( st, BITS_DE_HMODE ); + difidx[start_norm] = get_next_indice( st, BITS_DE_FCOMP ); + } + else + { + LCmode = get_next_indice( st, 2 ); + difidx[start_norm] = get_next_indice( st, NORM0_BITS ); + } + + if ( is_transient && flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) + { + hcode_l = 0; + if ( LCmode == 1 ) + { + hdecnrm_tran( st, num_sfm, &difidx[start_norm + 1] ); + for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) + { + hcode_l += huffsizn_tran[difidx[i]]; + } + } + else + { + hdecnrm_context( st, num_sfm, &difidx[start_norm], &hcode_l ); + } + } + else + { + hcode_l = 0; + if ( LCmode == 0 ) + { + hdecnrm_context( st, num_sfm, &difidx[start_norm], &hcode_l ); + } + else if ( LCmode == 1 ) + { + hdecnrm_resize( st, num_sfm, &difidx[start_norm + 1] ); + + for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) + { + hcode_l += resize_huffsizn[difidx[i]]; + } + + for ( i = start_norm + 2; i < start_norm + num_sfm; i++ ) + { + if ( difidx[i - 1] > 17 ) + { + difidx[i] = difidx[i] - min( difidx[i - 1] - 17, 3 ); + } + + if ( difidx[i - 1] < 13 ) + { + difidx[i] = difidx[i] - max( difidx[i - 1] - 13, -3 ); + } + } + } + else if ( LCmode == 2 ) + { + hdecnrm( st, num_sfm, &difidx[start_norm + 1] ); + for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) + { + hcode_l += huffsizn[difidx[i]]; + } + } + else + { + for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) + { + difidx[i] = get_next_indice( st, NORMI_BITS ); + } + hcode_l = numnrmibits; + } + } + + return hcode_l; +} + +/*------------------------------------------------------------------------* + * dequantize_norms() + * + * De-quantization of norms + *------------------------------------------------------------------------*/ + +/*! r: Number of bits */ +void dequantize_norms( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t start_norm, /* i : First SDE encoded norm */ + const int16_t num_sfm, /* i : Number of norms */ + const int16_t is_transient, /* i : Transient flag */ + int16_t *ynrm, /* o : Decoded norm indices */ + int16_t *normqlg2 /* o : Log2 of decoded norms */ +) +{ + int16_t i, j, k; + int16_t idxbuf[NB_SFM]; + + /* First sub-frame */ + normqlg2[start_norm] = dicnlg2[ynrm[start_norm]]; + + /* Other sub-frames */ + if ( is_transient ) + { + /* Recover quantization indices and quantized norms */ + idxbuf[0] = ynrm[0]; + for ( i = 1; i < num_sfm; i++ ) + { + idxbuf[i] = ynrm[i] + idxbuf[i - 1] - 15; + /* safety check in case of bit errors */ + if ( idxbuf[i] < 0 || idxbuf[i] > 39 ) + { + idxbuf[i] = 39; + st->BER_detect = 1; + } + } + + recovernorm( idxbuf, ynrm, normqlg2, num_sfm ); + } + else + { + for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) + { + j = i - 1; + k = ynrm[j] - 15; + ynrm[i] = ynrm[i] + k; + /* safety check in case of bit errors */ + if ( ynrm[i] < 0 || ynrm[i] > 39 ) + { + ynrm[i] = 39; + st->BER_detect = 1; + } + normqlg2[i] = dicnlg2[ynrm[i]]; + } + } + + return; +} diff --git a/lib_dec/hq_hr_dec.c b/lib_dec/hq_hr_dec.c new file mode 100644 index 0000000000..3eb1108b24 --- /dev/null +++ b/lib_dec/hq_hr_dec.c @@ -0,0 +1,302 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hq_pred_hb_bws() + * + * HQ core HB band-width switching handling + *--------------------------------------------------------------------------*/ + +static void hq_pred_hb_bws( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t *ynrm, /* i : norm quantization index vector */ + const int16_t length, /* i : frame length */ + const int16_t hqswb_clas, /* i : HQ SWB class */ + const float *SWB_fenv /* i : SWB frequency envelopes */ +) +{ + int16_t i; + + /* SWB switching to WB */ + if ( length >= L_FRAME32k ) /* wb switch to swb */ + { + /* calculate the switching parameters */ + if ( ( hqswb_clas != HQ_GEN_SWB && st->core_brate <= HQ_32k ) || st->core_brate > HQ_32k ) + { + st->prev_ener_shb = 0.0f; + for ( i = 25; i < SFM_N_HARM; i++ ) + { + st->prev_ener_shb += dicn[ynrm[i]]; + } + st->prev_ener_shb /= 6; + } + else + { + st->prev_ener_shb = 0.0f; + for ( i = 0; i < SWB_FENV - 3; i++ ) + { + st->prev_ener_shb += SWB_fenv[i]; + } + st->prev_ener_shb /= ( SWB_FENV - 3 ); + } + } + + if ( st->last_inner_frame >= L_FRAME32k && st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->prev_SWB_fenv, st->prev_ener_shb, SWB_FENV ); + } + + return; +} + + +/*--------------------------------------------------------------------------* + * hq_hr_dec() + * + * HQ high rate decoding routine + *--------------------------------------------------------------------------*/ + +void hq_hr_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *t_audio_q, /* o : transform-domain coefficients */ + const int16_t length, /* i : frame length */ + const int16_t num_bits, /* i : number of available bits */ + int16_t *ynrm, /* o : norm quantization index vector */ + int16_t *is_transient, /* o : transient flag */ + int16_t *hqswb_clas, /* o : HQ SWB class */ + float *SWB_fenv /* o : SWB frequency envelopes */ +) +{ + int16_t nb_sfm; + int16_t sum, hcode_l; + int16_t sfmsize[NB_SFM], sfm_start[NB_SFM], sfm_end[NB_SFM]; + int16_t num_sfm, numnrmibits; + int16_t nf_idx; + int16_t normqlg2[NB_SFM], R[NB_SFM]; + int16_t pulses[NB_SFM], maxpulse[NB_SFM]; + float env_stab; + int16_t Rsubband[NB_SFM]; /*Q3*/ + int16_t start_norm, Npeaks = 0; + float noise_level[HVQ_BWE_NOISE_BANDS]; + int16_t peak_idx[HVQ_MAX_PEAKS]; + int16_t hq_generic_offset; + int16_t num_env_bands; + int16_t hq_generic_exc_clas = 0; + int16_t core_sfm; + int16_t har_freq_est1, har_freq_est2; + int16_t flag_dis; + const int16_t *subband_search_offset; + int16_t wBands[2]; + int16_t b_delta_env; + int16_t n_band; + int16_t bits_left; + + HQ_DEC_HANDLE hHQ_core = st->hHQ_core; + bits_left = num_bits; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + set_s( pulses, 0, NB_SFM ); + set_s( maxpulse, 0, NB_SFM ); + flag_dis = 1; + har_freq_est1 = 0; + har_freq_est2 = 0; + set_s( peak_idx, 0, HVQ_MAX_PEAKS_32k ); + + /*------------------------------------------------------------------* + * Decode classification + *------------------------------------------------------------------*/ + bits_left -= hq_classifier_dec( st, st->core_brate, length, is_transient, hqswb_clas ); + + /*------------------------------------------------------------------* + * set quantization parameters + *------------------------------------------------------------------*/ + + hq_configure( length, *hqswb_clas, st->core_brate, &num_sfm, &nb_sfm, &start_norm, &num_env_bands, &numnrmibits, &hq_generic_offset, sfmsize, sfm_start, sfm_end ); + + /*------------------------------------------------------------------* + * Unpacking bitstream + *------------------------------------------------------------------*/ + + nf_idx = 0; + if ( !*is_transient && *hqswb_clas != HQ_HVQ && !( length == L_FRAME16k && st->core_brate <= HQ_32k ) ) + { + nf_idx = get_next_indice( st, 2 ); + } + + + /*------------------------------------------------------------------* + * Decode envelope + *------------------------------------------------------------------*/ + + hcode_l = decode_envelope_indices( st, start_norm, num_env_bands, numnrmibits, ynrm, NORMAL_HQ_CORE, *is_transient ); + bits_left -= hcode_l + NORM0_BITS + FLAGS_BITS; + + dequantize_norms( st, start_norm, num_env_bands, *is_transient, ynrm, normqlg2 ); + + if ( *hqswb_clas == HQ_GEN_SWB || *hqswb_clas == HQ_GEN_FB ) + { + hq_generic_exc_clas = swb_bwe_gain_deq( st, HQ_CORE, NULL, SWB_fenv, st->core_brate >= HQ_32k, *hqswb_clas ); /* Use (st->core_brate >= HQ_32k) to be consistent with hq_configure */ + if ( hq_generic_exc_clas == HQ_GENERIC_SP_EXC ) + { + bits_left++; /* conditional 1 bit saving for representing FD3 BWE excitation class */ + } + map_hq_generic_fenv_norm( *hqswb_clas, SWB_fenv, ynrm, normqlg2, num_env_bands, nb_sfm, hq_generic_offset ); + } + + env_stab = 0; + if ( *hqswb_clas == HQ_HVQ ) + { + hHQ_core->mem_env_delta = 0; + } + else if ( length == L_FRAME32k ) + { + env_stab = env_stability( ynrm, SFM_N_ENV_STAB, hHQ_core->mem_norm, &hHQ_core->mem_env_delta ); + } + else + { + hHQ_core->mem_norm[0] = 31; + hHQ_core->mem_env_delta = 0; + } + + if ( *hqswb_clas == HQ_HVQ ) + { + hHQ_core->env_stab = 1.0f; /* stable by definition */ + } + else + { + if ( length == L_FRAME32k ) + { + hHQ_core->env_stab = env_stab; /* calculated stability */ + } + else + { + hHQ_core->env_stab = env_stability( ynrm, SFM_N_ENV_STAB_WB, hHQ_core->mem_norm_hqfec, &hHQ_core->mem_env_delta_hqfec ); + } + } + hHQ_core->env_stab_plc = env_stab_smo( min( hHQ_core->env_stab, 1.0f - stab_trans[L_STAB_TBL - 1] ), hHQ_core->env_stab_state_p, &hHQ_core->envstabplc_hocnt ); + + /*------------------------------------------------------------------* + * Bit allocation + *------------------------------------------------------------------*/ + + hq_bit_allocation( st->core_brate, length, *hqswb_clas, &bits_left, normqlg2, nb_sfm, sfmsize, noise_level, R, Rsubband, &sum, &core_sfm, num_env_bands ); + + if ( st->bws_cnt1 > 0 && *hqswb_clas == HQ_GEN_SWB && st->core_brate < HQ_32k ) + { + if ( st->L_frame == L_FRAME16k ) + { + for ( n_band = 0; n_band < 4; n_band++ ) + { + SWB_fenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; + } + } + + for ( n_band = 4; n_band < SWB_FENV; n_band++ ) + { + SWB_fenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; + } + } + + if ( *hqswb_clas == HQ_GEN_SWB || *hqswb_clas == HQ_GEN_FB ) + { + b_delta_env = get_nor_delta_hf( st, ynrm, Rsubband, num_env_bands, nb_sfm, core_sfm ); + sum -= b_delta_env; + } + + /*------------------------------------------------------------------* + * Decode spectral fine structure using HVQ/PVQ + *------------------------------------------------------------------*/ + + if ( *hqswb_clas == HQ_HVQ ) + { + hvq_dec( st, bits_left, st->core_brate, ynrm, R, noise_level, peak_idx, &Npeaks, t_audio_q, st->core ); + } + else + { + pvq_core_dec( st, sfm_start, sfm_end, sfmsize, t_audio_q, sum, nb_sfm, Rsubband, R, pulses, maxpulse, HQ_CORE ); + } + + if ( *hqswb_clas == HQ_HVQ || *hqswb_clas == HQ_HARMONIC ) + { + subband_search_offset = subband_search_offsets_13p2kbps_Har; + wBands[0] = SWB_SB_BW_LEN0_16KBPS_HAR; + wBands[1] = SWB_SB_BW_LEN1_16KBPS_HAR; + + har_est( t_audio_q, 300, &har_freq_est1, &har_freq_est2, &flag_dis, &hHQ_core->prev_frm_hfe2, subband_search_offset, wBands, &hHQ_core->prev_stab_hfe2 ); + + hHQ_core->prev_frm_hfe2 = har_freq_est2; + } + + /* reset LR-HQ memories */ + hHQ_core->prev_frm_hfe2 = 0; + hHQ_core->prev_stab_hfe2 = 0; + + /*------------------------------------------------------------------* + * Spectral filling + *------------------------------------------------------------------*/ + + fill_spectrum( t_audio_q, R, *is_transient, ynrm, SWB_fenv, hq_generic_offset, nf_idx, length, env_stab, &hHQ_core->no_att_hangover, &hHQ_core->energy_lt, &hHQ_core->hq_generic_seed, hq_generic_exc_clas, core_sfm, *hqswb_clas, noise_level, st->core_brate, hHQ_core->prev_noise_level, &( hHQ_core->prev_R ), hHQ_core->prev_coeff_out, peak_idx, Npeaks, pulses, hHQ_core->old_is_transient[0], hHQ_core->prev_normq, hHQ_core->prev_env, st->prev_bfi, sfmsize, sfm_start, sfm_end, &st->hBWE_FD->prev_L_swb_norm, hHQ_core->prev_hqswb_clas, num_sfm, num_env_bands, st->element_mode ); + + enforce_zero_for_min_envelope( *hqswb_clas, ynrm, t_audio_q, nb_sfm, sfm_start, sfm_end ); + + if ( *is_transient ) + { + de_interleave_spectrum( t_audio_q, length ); + } + + /*------------------------------------------------------------------* + * WB/SWB bandwidth switching + *------------------------------------------------------------------*/ + + hq_pred_hb_bws( st, ynrm, length, *hqswb_clas, SWB_fenv ); + + /* update */ + hHQ_core->prev_hqswb_clas = *hqswb_clas; + + return; +} diff --git a/lib_dec/hq_lr_dec.c b/lib_dec/hq_lr_dec.c new file mode 100644 index 0000000000..5e7584384d --- /dev/null +++ b/lib_dec/hq_lr_dec.c @@ -0,0 +1,1398 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "rom_dec.h" +#include "prot.h" +#include "stl.h" +#include "basop_util.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------------*/ + +static int16_t p2a_threshold_dequant( Decoder_State *st, int16_t *p2a_flags, const int16_t bands, const int16_t p2a_bands ); + +static void mdct_spectrum_fine_gain_dec( Decoder_State *st, float y2[], const int16_t band_start[], const int16_t band_end[], const int16_t k_sort[], const int16_t bands, const Word32 L_qint, const int16_t Ngq, const int16_t gqlevs, const int16_t gqbits ); + +static float band_energy_dequant( Decoder_State *st, float band_energy[], const int16_t bands, const Word32 L_qint, const Word16 eref_fx, const int16_t is_transient ); + +static void spt_shorten_domain_set_dec( Decoder_State *st, const int16_t p2a_flags[], const int16_t new_band_start[], const int16_t new_band_end[], const int16_t new_band_width[], const int16_t bands, int16_t band_start[], int16_t band_end[], int16_t band_width[], int16_t *bit_budget ); + + +/*-------------------------------------------------------------------* + * hq_lr_dec() + * + * HQ low rate decoding routine + *-------------------------------------------------------------------*/ + +void hq_lr_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float yout[], /* o : transform-domain output coefs. */ + const int16_t inner_frame, /* i : inner frame length */ + int16_t num_bits, /* i : number of available bits */ + int16_t *is_transient /* o : transient flag */ +) +{ + int16_t i, k1, pbits, p2a_flags[BANDS_MAX], bit_budget, bands, length, gqlevs, gqbits, Ngq, p2a_bands, ni_seed; + int16_t band_start[BANDS_MAX], band_end[BANDS_MAX], band_width[BANDS_MAX]; + int16_t k_sort[BANDS_MAX], npulses[BANDS_MAX]; + int32_t inp_vector[L_FRAME48k]; + float ni_coef, ni_pd_th, pd_thresh, ld_slope; + float ebits, Rk[BANDS_MAX], band_energy[BANDS_MAX], y2[L_FRAME48k], p2a_th; + Word32 Rk_fx[BANDS_MAX]; + Word32 L_qint; /* Q29 */ + Word16 eref_fx; /* Q10 */ + Word16 bit_alloc_weight_fx; /* Q13 */ + float y2_ni[L_FRAME48k], y2_org[L_FRAME48k]; + int16_t hqswb_clas = 0; + int16_t lowlength, highlength, har_bands = 0; + float m[L_FRAME32k]; + float Ep[BANDS_MAX], enerH = 0.0f, enerL = 0.0f; + int16_t lowband, highband, bw_low = 0, bw_high = 20; + float Ep_tmp[BANDS_MAX]; + float band_energy_tmp[BANDS_MAX]; + int16_t last_bitalloc_max_band[2]; + int32_t bwe_br; + int16_t trans_bit, p2a_flags_tmp[BANDS_MAX]; + int16_t adjustFlag = 0; + int16_t prev_SWB_peak_pos_tmp[SPT_SHORTEN_SBNUM]; + int16_t j, k; + int16_t flag_spt; + int16_t org_band_start[SPT_SHORTEN_SBNUM]; + int16_t org_band_end[SPT_SHORTEN_SBNUM]; + int16_t org_band_width[SPT_SHORTEN_SBNUM]; + int16_t new_band_start[SPT_SHORTEN_SBNUM]; + int16_t new_band_end[SPT_SHORTEN_SBNUM]; + int16_t new_band_width[SPT_SHORTEN_SBNUM]; + Word32 L_tmp, L_tmp2, L_tmp3; + Word16 exp, tmp, exp2, tmp1, tmp2, tmp3, alpha_fx, frac1; + Word32 enerH_fx; + Word32 enerL_fx; + Word32 Ep_fx[BANDS_MAX]; + Word32 Ep_avrg_fx, Ep_vari_fx; + Word32 Ep_avrgL_fx; + Word32 Ep_peak_fx; + Word32 Ep_tmp_fx[BANDS_MAX]; + Word16 gama_fx; /*Q15 0.85f; */ + Word16 beta_fx; /*Q14 1.05f; */ + Word32 L_band_energy[BANDS_MAX], L_band_energy_tmp[BANDS_MAX]; + UWord16 lo; + Word16 Q_band_energy; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + HQ_DEC_HANDLE hHQ_core = st->hHQ_core; + + set_s( last_bitalloc_max_band, 0, 2 ); + set_f( y2, 0.0f, L_FRAME48k ); + set_l( inp_vector, 0, inner_frame ); + flag_spt = 0; + set_s( prev_SWB_peak_pos_tmp, 0, SPT_SHORTEN_SBNUM ); + bwe_br = st->core_brate; + + + if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + hqswb_clas = get_next_indice( st, 2 ); + num_bits -= 2; + + *is_transient = 0; + if ( hqswb_clas == HQ_TRANSIENT ) + { + *is_transient = 1; + } + } + else + { + /* decode transient flag */ + *is_transient = get_next_indice( st, 1 ); + num_bits--; + } + + + /* Configure decoder for different bandwidths, bitrates, etc. */ + hq2_core_configure( inner_frame, num_bits, *is_transient, &bands, &length, band_width, band_start, band_end, &L_qint, &eref_fx, &bit_alloc_weight_fx, &gqlevs, &Ngq, &p2a_bands, &p2a_th, &pd_thresh, &ld_slope, &ni_coef, &ni_pd_th, bwe_br ); + + highlength = band_end[bands - 1]; + har_bands = bands; + + if ( st->bwidth == SWB && *is_transient == 0 && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + /* reserve bits for HQ_NORMAL and HQ_HARMONIC */ + if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) + { + num_bits -= get_usebit_npswb( hqswb_clas ); + } + + if ( hqswb_clas == HQ_NORMAL ) + { + flag_spt = 1; + } + } + + if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && st->bwidth == SWB ) + { + if ( hHQ_core->prev_hqswb_clas != HQ_NORMAL ) + { + j = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + hHQ_core->prev_SWB_peak_pos[j] = 0; + j++; + } + } + } + + /* Spectral energy calculation/quantization */ + ebits = band_energy_dequant( st, band_energy, bands, L_qint, eref_fx, *is_transient ); + + /* simple check: band_energy is too large, Abnormal Situation of bit errors */ + for ( k = 0; k < bands; k++ ) + { + /* Max: 45.0(737279,Q14) at 32kHz, highest band, Min: -6.600037(-108135,Q14) at 8kHz(NB),8kbps, is_transient (-6.7f is safty-threshold) */ + if ( band_energy[k] > 45.0f || band_energy[k] < -6.7f ) + { + st->BER_detect = 1; + set_f( yout, 0, inner_frame ); + return; + } + } + + for ( i = 0; i < bands; i++ ) + { + L_band_energy[i] = (Word32) ( band_energy[i] * pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + /* First pass bit budget for TCQ of spectral band information */ + gqbits = (int16_t) log2_f( (float) gqlevs ); + bit_budget = num_bits - (int16_t) ceil( ebits ) - Ngq * gqbits; + + pbits = 0; + if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + if ( hqswb_clas == HQ_HARMONIC ) + { + set_s( p2a_flags, 1, har_bands ); + } + else + { + /* High band tonality detector based on per band peak-to-average ratio */ + pbits = p2a_threshold_dequant( st, p2a_flags, bands, p2a_bands ); + bit_budget -= pbits; + + if ( hqswb_clas == HQ_NORMAL ) + { + return_bits_normal2( &bit_budget, p2a_flags, bands, bits_lagIndices_modeNormal ); + } + } + } + else + { + /* High band tonality detector based on per band peak-to-average ratio */ + pbits = p2a_threshold_dequant( st, p2a_flags, bands, p2a_bands ); + bit_budget -= pbits; + } + + if ( flag_spt == 1 ) + { + /* initalize the desired parameters for SPT */ + spt_shorten_domain_band_save( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); + spt_shorten_domain_pre( band_start, band_end, hHQ_core->prev_SWB_peak_pos, bands, bwe_br, new_band_start, new_band_end, new_band_width ); + spt_shorten_domain_set_dec( st, p2a_flags, new_band_start, new_band_end, new_band_width, bands, band_start, band_end, band_width, &bit_budget ); + } + + /* safety check in case of bit errors */ + if ( bit_budget < 2 ) + { + st->BER_detect = 1; + set_f( yout, 0, inner_frame ); + return; + } + +#define WMC_TOOL_MAN + /* Estimate number of bits per sub-band */ + Q_band_energy = SWB_BWE_LR_Qbe; + FOR( i = 0; i < bands; i++ ) + { + L_tmp = L_shl( L_band_energy[i], sub( 16, Q_band_energy ) ); /*Q16 */ + + frac1 = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ + L_tmp = Pow2( 30, frac1 ); + exp = sub( exp, 30 ); + Ep_fx[i] = L_shl( L_tmp, sub( exp, 6 ) ); /* Q -6 */ + Ep[i] = (float) ( Ep_fx[i] / pow( 2.0, -6 ) ); + } + + FOR( i = 0; i < bands; i++ ) + { + L_tmp2 = Ep_fx[i]; + L_tmp = L_max( 1, L_tmp2 ); + exp = norm_l( L_tmp ); + tmp = extract_h( L_shl( L_tmp, exp ) ); + + L_tmp3 = (Word32) band_width[i]; + exp2 = norm_l( L_tmp3 ); + tmp2 = extract_h( L_shl( L_tmp3, exp2 ) ); + + exp2 = sub( exp, exp2 ); /* Denormalize and substract */ + + tmp3 = sub( tmp2, tmp ); + IF( tmp3 > 0 ) + { + tmp2 = shr( tmp2, 1 ); + } + IF( tmp3 > 0 ) + { + exp2 = add( exp2, 1 ); + } + div_s( &tmp, tmp2, tmp ); + L_tmp = L_deposit_h( tmp ); + L_tmp = Isqrt_lc1( L_tmp, &exp2 ); + move32(); /*Q(31-exp2) */ + Ep_tmp_fx[i] = L_shr( L_tmp, sub( 15, exp2 ) ); /*Q13 */ + Ep_tmp[i] = (float) ( Ep_tmp_fx[i] / pow( 2.0, 13 ) ); + } +#undef WMC_TOOL_MAN + + if ( *is_transient == 0 && inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) + { + /* decode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ + j = 0; + for ( i = 0; i < 2; i++ ) + { + last_bitalloc_max_band[i] = get_next_indice( st, 1 ); + } + +#define WMC_TOOL_MAN + lowband = 6; + move16(); + trans_bit = 2; + move16(); + bit_budget = sub( bit_budget, trans_bit ); + gama_fx = 27852; /*Q15 0.85f;*/ + beta_fx = 17203; + move16(); /*Q14 1.05f; */ + set_s( &p2a_flags_tmp[bands - trans_bit], 0, 2 ); + + IF( st->core_brate == ACELP_13k20 ) + { + beta_fx = 13107; + move16(); /*14 1.25f; */ + gama_fx = 31130; + move16(); /*0.95f; */ + mvs2s( &p2a_flags[sub( bands, trans_bit )], &p2a_flags_tmp[sub( bands, trans_bit )], trans_bit ); + } + + /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ + Ep_vari_fx = 0; + move32(); + Ep_avrg_fx = 0; + move32(); + Ep_avrgL_fx = 0; + move32(); + Ep_peak_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 ) + { + Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ + } + ELSE + { + Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ + IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) + { + Ep_peak_fx = Ep_tmp_fx[i]; + move32(); /*Q15 */ + } + } + } + /* modify the last p2a_bands subbands band_energies */ + k = bands; + mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ + Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); + Mpy_32_16_ss( Ep_peak_fx, shl( sub( bands, lowband ), 9 ), &L_tmp2, &lo ); + Mpy_32_16_ss( Ep_avrg_fx, 1126, &L_tmp3, &lo ); + + IF( ( ( L_sub( L_tmp, L_shr( Ep_avrgL_fx, 1 ) ) < 0 && st->core_brate == ACELP_13k20 ) || st->core_brate < ACELP_13k20 ) && + L_sub( L_tmp2, L_tmp3 ) < 0 && L_sub( L_tmp2, L_shr( Ep_avrg_fx, 7 ) ) > 0 ) + { + FOR( i = lowband; i < bands; i++ ) + { + Mpy_32_16_ss( Ep_avrg_fx, 24576, &L_tmp, &lo ); + IF( L_sub( L_shr( Ep_tmp_fx[i], 1 ), L_tmp ) < 0 ) + { + Mpy_32_16_ss( Ep_peak_fx, sub( bands, lowband ), &L_tmp, &lo ); + tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +4 = 15) */ + L_tmp2 = L_add( L_tmp, 13107 ); /*15 */ + tmp2 = extract_l( L_min( L_max( L_tmp2, 16384 ), gama_fx ) ); /*15 = 15 */ + Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_band_energy_tmp[i], &lo ); + } + } + } + ELSE + { + FOR( i = sub( bands, trans_bit ); i < bands; i++ ) + { + alpha_fx = 16384; + move16(); /*Q14 */ + IF( sub( p2a_flags_tmp[i], 1 ) == 0 ) + { + Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); + tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_vari_fx, 3277, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 12, exp ) ); /*Q(13+exp-15 +12-exp +4 = 14) */ + + tmp2 = extract_h( Ep_avrg_fx ); /*Q13-16=-3 */ + IF( tmp2 != 0 ) + { + exp = norm_s( tmp2 ); + tmp2 = shl( tmp2, exp ); /*Q(exp) */ + div_s( &tmp2, 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp2 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_vari_fx, 6554, &L_tmp2, &lo ); + Mpy_32_16_ss( L_tmp2, tmp2, &L_tmp2, &lo ); + L_tmp2 = L_shl( L_tmp2, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +3 = 14) */ + L_tmp = L_min( L_tmp, L_tmp2 ); /*14 */ + tmp = extract_l( L_min( L_tmp, 13107 ) ); /*14 */ + alpha_fx = add( 16384, tmp ); + } + IF( sub( last_bitalloc_max_band[j++], 1 ) == 0 ) + { + Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); + tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-2 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); +#ifndef BASOP_NOGLOB + L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q(13+exp-15 +14-exp+2 = 14) */ + L_tmp = L_max( L_tmp, 16384 ); /*14 */ + tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ + alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ +#else /* BASOP_NOGLOB */ + L_tmp = L_shl_o( L_tmp, sub( 14, exp ), &Overflow ); /*Q(13+exp-15 +14-exp+2 = 14) */ + L_tmp = L_max( L_tmp, 16384 ); /*14 */ + tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ + alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ +#endif /* BASOP_NOGLOB */ + } + ELSE + { + tmp2 = extract_h( Ep_avrg_fx ); /*13 -16 =-3 */ + IF( tmp2 != 0 ) + { + exp = norm_s( tmp2 ); + tmp2 = shl( tmp2, exp ); /*Q(exp) */ + div_s( &tmp2, 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp2 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_tmp_fx[i], tmp2, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 19, exp ) ); /*Q(13+exp-15 +19-exp +3 = 20) */ + Mpy_32_16_ss( L_tmp, shl( sub( bands, lowband ), 9 ), &L_tmp, &lo ); + L_tmp = L_max( L_tmp, 13926 ); /*14 */ + tmp2 = extract_l( L_min( L_tmp, 16384 ) ); /*14 */ + alpha_fx = shl( mult( alpha_fx, tmp2 ), 1 ); /*14+14-15+1 =14 */ + } + Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q(Q_band_energy+14-15 +1= Q_band_energy) */ + } + } + lowband = 3; + move16(); + Ep_avrg_fx = 0; + move32(); + Ep_avrgL_fx = 0; + move32(); + Ep_peak_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 ) + { + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ + } + ELSE + { + Ep_avrgL_fx = L_add( Ep_avrgL_fx, L_shr( Ep_tmp_fx[i], 1 ) ); /*Q12 */ + IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) + { + Ep_peak_fx = Ep_tmp_fx[i]; + move32(); /*Q13 */ + } + } + } + Mpy_32_16_ss( Ep_peak_fx, 28262, &L_tmp, &lo ); + Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp2, &lo ); + IF( L_sub( L_shr( Ep_avrg_fx, 2 ), L_tmp2 ) > 0 && L_sub( L_shr( Ep_avrg_fx, 4 ), L_tmp2 ) < 0 && L_sub( L_tmp, Ep_avrgL_fx ) > 0 ) + { + adjustFlag = 1; + move16(); + FOR( i = 0; i < lowband; i++ ) + { + tmp = extract_h( Ep_avrgL_fx ); /*Q-4 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, 18842, &L_tmp, &lo ); +#ifndef BASOP_NOGLOB + L_tmp = L_shl( L_tmp, sub( 27, exp ) ); /*Q14 0.5 */ + tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ +#else /* BASOP_NOGLOB */ + L_tmp = L_shl_o( L_tmp, sub( 27, exp ), &Overflow ); /*Q14 0.5 */ + tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ +#endif /* BASOP_NOGLOB */ + Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_tmp, &lo ); +#ifndef BASOP_NOGLOB + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ +#else /* BASOP_NOGLOB */ + L_band_energy_tmp[i] = L_shl_o( L_tmp, 1, &Overflow ); /*Q_band_energy */ +#endif /* BASOP_NOGLOB */ + } + } +#undef WMC_TOOL_MAN + + for ( i = 0; i < bands; i++ ) + { + band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, num_bits, hqswb_clas, st->bwidth, *is_transient ); + } + else if ( *is_transient == 0 && inner_frame == L_FRAME16k ) + { +#define WMC_TOOL_MAN + bit_budget = sub( bit_budget, 2 ); /* bits in high bands to indicate the last 2 subbands is allocated bits or not */ + /* decode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ + for ( i = 0; i < 2; i++ ) + { + last_bitalloc_max_band[i] = get_next_indice( st, 1 ); + } + FOR( i = 0; i < bands; i++ ) + { +#ifndef BASOP_NOGLOB + Ep_tmp_fx[i] = L_shl( Ep_tmp_fx[i], 2 ); +#else /* BASOP_NOGLOB */ + Ep_tmp_fx[i] = L_shl_o( Ep_tmp_fx[i], 2, &Overflow ); +#endif /* BASOP_NOGLOB */ + } + IF( st->core_brate == ACELP_13k20 ) + { + lowband = 8; + move16(); + highband = 15; + move16(); + bw_low = sub( band_start[highband], band_start[lowband] ); + bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); + } + ELSE + { + lowband = 8; + move16(); + highband = 16; + move16(); + bw_low = sub( band_start[highband], band_start[lowband] ); + bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); + } + /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ + enerL_fx = 0; + move32(); + enerH_fx = 0; + move32(); + Ep_vari_fx = 0; + move32(); + Ep_avrg_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 && add( sub( i, bands ), p2a_bands ) < 0 ) + { +#ifndef BASOP_NOGLOB + Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ +#else /* BASOP_NOGLOB */ + Ep_vari_fx = L_add_o( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ), &Overflow ); /*Q15 */ + Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#endif /* BASOP_NOGLOB */ + } + + IF( sub( i, highband ) >= 0 ) + { + enerH_fx = L_add( enerH_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ + } + ELSE IF( sub( i, lowband ) >= 0 ) + { + enerL_fx = L_add( enerL_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ + } + } + + enerL = (float) ( enerL_fx / pow( 2.0, -4 ) ); + enerH = (float) ( enerH_fx / pow( 2.0, -4 ) ); + /* modify the last p2a_bands subbands band_energies */ + k = bands; + mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ + + L_tmp = L_max( enerH_fx, enerL_fx ); + tmp = s_max( bw_low, bw_high ); + i = norm_l( L_tmp ); + j = norm_s( tmp ); + Mpy_32_16_ss( L_shl( enerH_fx, i ), shl( bw_low, j ), &L_tmp, &lo ); + Mpy_32_16_ss( L_shl( enerL_fx, i ), shl( bw_high, j ), &L_tmp2, &lo ); + L_tmp2 = L_sub( L_tmp, L_tmp2 ); + + FOR( i = sub( bands, p2a_bands ); i < bands; i++ ) + { + IF( sub( p2a_flags[i], 1 ) == 0 || L_tmp2 > 0 ) + { + tmp = sub( bands, p2a_bands ); + tmp = sub( tmp, lowband ); /*Q0 */ + +#ifndef BASOP_NOGLOB + tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ +#else + tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ +#endif + IF( tmp1 != 0 ) + { + exp = norm_s( tmp1 ); + tmp1 = shl( tmp1, exp ); /*Q(exp) */ + div_s( &tmp1, 16384, tmp1 ); /*Q(15+14-exp = 29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp1 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, 16384, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 32, exp ) ); /*Q15 */ + tmp = extract_l( L_min( L_tmp, 6554 ) ); /*Q15 */ + Mpy_32_16_ss( Ep_vari_fx, tmp1, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 15, exp ) ); /*Q15 */ + tmp = extract_l( L_shr( L_min( L_tmp, 13107 ), 1 ) ); /*Q14 */ + alpha_fx = add( tmp, 16384 ); /*Q14 */ + } + ELSE + { + alpha_fx = 16384; + move16(); /*Q14 */ + } + + IF( add( sub( i, bands ), p2a_bands ) > 0 ) + { + tmp = sub( bands, p2a_bands ); + IF( sub( last_bitalloc_max_band[sub( i, add( tmp, 1 ) )], 1 ) == 0 ) + { + tmp = sub( tmp, lowband ); + Mpy_32_16_ss( Ep_tmp_fx[i], tmp, &L_tmp, &lo ); +#ifndef BASOP_NOGLOB + tmp = extract_h( L_shl( L_tmp, 16 ) ); /*Q0 */ +#else + tmp = extract_h( L_shl_o( L_tmp, 16, &Overflow ) ); /*Q0 */ +#endif + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q14 */ + tmp = extract_l( L_min( L_max( L_tmp, 16384 ), 20480 ) ); /*Q14 */ + L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ + alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14 */ + } + ELSE + { + tmp = sub( tmp, lowband ); + +#ifndef BASOP_NOGLOB + tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ +#else + tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ +#endif + IF( tmp1 != 0 ) + { + exp = norm_s( tmp1 ); + tmp1 = shl( tmp1, exp ); /*Q(exp) */ + div_s( &tmp1, 16384, tmp1 ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp1 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 29, exp ) ); /*Q14 */ + tmp = extract_l( L_min( L_max( L_tmp, 13926 ), 16384 ) ); /*Q14 */ + L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ + alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14 */ + } + } + Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q Q_band_energy */ + } + lowband = 6; + move16(); + Ep_avrg_fx = 0; + move32(); + Ep_avrgL_fx = 0; + move32(); + Ep_peak_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 ) + { +#ifndef BASOP_NOGLOB + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ +#else /* BASOP_NOGLOB */ + Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#endif /* BASOP_NOGLOB */ + } + ELSE + { +#ifndef BASOP_NOGLOB + Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ +#else /* BASOP_NOGLOB */ + Ep_avrgL_fx = L_add_o( Ep_avrgL_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#endif /* BASOP_NOGLOB */ + IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) + { + Ep_peak_fx = Ep_tmp_fx[i]; + move32(); /*Q15 */ + } + } + } + + Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); + Mpy_32_16_ss( Ep_peak_fx, 19661, &L_tmp2, &lo ); + Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp3, &lo ); + + IF( ( L_sub( L_shr( Ep_avrgL_fx, 1 ), Ep_avrg_fx ) > 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 && L_sub( L_shr( Ep_avrgL_fx, 1 ), L_tmp2 ) < 0 ) || + ( L_sub( L_shr( Ep_avrg_fx, 1 ), Ep_avrgL_fx ) > 0 && L_sub( L_shr( Ep_avrg_fx, 3 ), L_tmp3 ) < 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 ) ) + { + adjustFlag = 1; + move16(); + FOR( i = 0; i < lowband; i++ ) + { +#ifndef BASOP_NOGLOB + tmp = extract_h( L_shl( Ep_avrgL_fx, 1 ) ); /*Q0 */ +#else + tmp = extract_h( L_shl_o( Ep_avrgL_fx, 1, &Overflow ) ); /*Q0 */ +#endif + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 28, exp ) ); /*Q14 0.5 */ + tmp = extract_l( L_min( L_tmp, 19661 ) ); /* Q14 */ + Mpy_32_16_ss( L_band_energy_tmp[i], tmp, &L_tmp, &lo ); + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ + } + } +#undef WMC_TOOL_MAN + + for ( i = 0; i < bands; i++ ) + { + band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, num_bits, hqswb_clas, st->bwidth, *is_transient ); + } + else if ( st->bwidth == SWB && hqswb_clas == HQ_HARMONIC && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + hq2_bit_alloc_har( band_energy, bit_budget, bands, Rk_fx, p2a_bands, bwe_br, p2a_flags, band_width ); + } + else + { + hq2_bit_alloc( band_energy, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, num_bits, hqswb_clas, st->bwidth, *is_transient ); + } + + if ( bit_budget < 0 ) + { + st->BER_detect = 1; + bit_budget = 0; + } + + tcq_core_LR_dec( st, inp_vector, bit_budget, bands, band_start, band_width, Rk_fx, npulses, k_sort, p2a_flags, p2a_bands, last_bitalloc_max_band, inner_frame, adjustFlag, is_transient ); + + /* Prepare floating Rk for next modules */ + for ( k = 0; k < bands; k++ ) + { + Rk[k] = WORD322FL_SCALE( Rk_fx[k], SWB_BWE_LR_QRk - 1 ); + } + + /* Denormalize the coded MDCT spectrum */ + mdct_spectrum_denorm( inp_vector, y2, band_start, band_end, band_width, band_energy, npulses, bands, ld_slope, pd_thresh ); + + /* Apply fine gain to denormalized coded spectrum */ + mdct_spectrum_fine_gain_dec( st, y2, band_start, band_end, k_sort, bands, L_qint, Ngq, gqlevs, gqbits ); + + /*restore the band information */ + if ( flag_spt == 1 ) + { + spt_shorten_domain_band_restore( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); + } + + mvr2r( y2, y2_org, L_FRAME32k ); + + /* Inject noise into components having relatively low pulse energy per band */ + ni_seed = npulses[0] + npulses[1] + npulses[2] + npulses[3]; + + for ( i = 0; i < band_end[bands - 1] + 1; i++ ) + y2_ni[i] = y2[i]; + hq2_noise_inject( y2_ni, band_start, band_end, band_width, Ep, Rk, npulses, ni_seed, bands, 0, bw_low, bw_high, enerL, enerH, hHQ_core->last_ni_gain, hHQ_core->last_env, &hHQ_core->last_max_pos_pulse, p2a_flags, p2a_bands, hqswb_clas, st->bwidth, bwe_br ); + + if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) + { + preset_hq2_swb( hqswb_clas, band_end, &har_bands, p2a_bands, length, bands, &lowlength, &highlength, m ); + + /*Gap filling for the core coder*/ + swb_bwe_dec_lr( st, y2, m, bwe_br, bands, band_start, band_end, band_energy, p2a_flags, hqswb_clas, lowlength, highlength, har_bands, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, band_width, y2_ni, &ni_seed ); + + post_hq2_swb( m, lowlength, highlength, hqswb_clas, har_bands, bands, p2a_flags, band_start, band_end, y2, npulses ); + + if ( hqswb_clas == HQ_NORMAL ) + { + spt_swb_peakpos_tmp_save( y2, bands, band_start, band_end, prev_SWB_peak_pos_tmp ); + for ( k = 0; k < SPT_SHORTEN_SBNUM; k++ ) + { + if ( p2a_flags[bands - SPT_SHORTEN_SBNUM + k] == 0 || npulses[bands - SPT_SHORTEN_SBNUM + k] == 0 ) + { + prev_SWB_peak_pos_tmp[k] = 0; + } + } + } + + mvr2r( y2_ni, y2, lowlength ); + } + else + { + mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* HQ_TRANSIENT */ + } + } + else + { + mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* NB, WB */ + } + + + /* bandwidth switching */ + if ( !( st->last_inner_frame >= L_FRAME16k && st->bws_cnt > 0 ) ) + { + k1 = *is_transient ? bands - 2 : bands - 6; + st->prev_ener_shb = 0.0f; + + for ( i = k1; i < bands; i++ ) + { + st->prev_ener_shb += Ep_tmp[i] / ( bands - k1 ); + } + } + + if ( st->last_inner_frame >= L_FRAME32k && st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->prev_SWB_fenv, st->prev_ener_shb, SWB_FENV ); + } + + updat_prev_frm( y2, yout, bwe_br, length, inner_frame, bands, st->bwidth, *is_transient, hqswb_clas, &hHQ_core->prev_hqswb_clas, hHQ_core->prev_SWB_peak_pos, prev_SWB_peak_pos_tmp, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, st->bws_cnt ); + + return; +} + + +/*------------------------------------------------------------------------------------ + * small_symbol_dec_tran() + * + * Huffman decoding of differential energies + *--------------------------------------------------------------------------------------*/ + +/*! r: bits */ +static int16_t small_symbol_dec_tran( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *qbidx, /* o : output of dequantized differential energy */ + const int16_t bands, /* i : number of bands */ + const int16_t is_transient /* i : transient flag */ +) +{ + int16_t i, bits; + int16_t difidx[BANDS_MAX]; + + /* Decoding differential energies*/ + bits = decode_envelope_indices( st, 0, bands, 0, difidx, LOW_RATE_HQ_CORE_TRAN, is_transient ); + bits += BITS_DE_FCOMP; + + /* counting 1 bit for band_energy_huff_coding_mode */ + bits += BITS_DE_HMODE; + + /* converting to original values */ + for ( i = 0; i < bands; i++ ) + { + qbidx[i] = difidx[i] - LRMDCT_BE_OFFSET; + } + + return ( bits ); +} + + +/*-------------------------------------------------------------------------- + * small_symbol_dec() + * + * Huffman decoding of differential energies (MSB and LSB) + *--------------------------------------------------------------------------*/ + +/*! r: bits */ +static int16_t small_symbol_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *qbidx, /* o : output of dequantized differential energy */ + const int16_t bands, /* i : number of bands */ + const int16_t is_transient ) +{ + int16_t i, LSB, bits; + int16_t difidx[BANDS_MAX]; + + /* Decoding MSB bits */ + bits = decode_envelope_indices( st, 0, bands, 0, difidx, LOW_RATE_HQ_CORE, is_transient ); + bits += BITS_DE_FCOMP; + + /* counting 1 bit for band_energy_huff_coding_mode */ + bits += BITS_DE_HMODE; + + /* Decoding LSB bit packing */ + for ( i = 0; i < bands; ++i ) + { + LSB = get_next_indice( st, BITS_DE_LSB ); + difidx[i] = ( difidx[i] << 1 ) | LSB; + } + + /* counting bits for LSB */ + bits += bands; + + /* converting to original values */ + for ( i = 1; i < bands; ++i ) + { + qbidx[i] = difidx[i] - DE_OFFSET1; + } + + qbidx[0] = difidx[0] - DE_OFFSET0; + + return ( bits ); +} + +/*-------------------------------------------------------------------------- + * decode_huff_8s() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t decode_huff_8s( + Decoder_State *st, + const int16_t *hufftab, + int16_t *rbits ) +{ + int16_t bit; + + while ( *hufftab > 0 ) + { + *rbits += ( *hufftab & 0xf ); + bit = get_next_indice( st, *hufftab & 0xf ); + hufftab += ( *hufftab >> 4 ) + bit; + } + + return ( -*hufftab ); +} + + +/*-------------------------------------------------------------------------- + * large_symbol_dec() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: bits */ +static int16_t large_symbol_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *qbidx, /* o : output of dequantized differential energy */ + const int16_t bands /* i : number of bands */ +) +{ + int16_t i, bits; + int16_t LSB[BANDS_MAX]; + int16_t basic_shift, cntbits, ns2mode; + int16_t pos_outlyer; + int16_t ns2mode0, ns2mode1; + + cntbits = BITS_DE_8SMODE; + ns2mode = get_next_indice( st, BITS_DE_8SMODE ); + + if ( ns2mode == 0 ) + { + ns2mode0 = get_next_indice( st, BITS_DE_8SMODE_N0 ); + ns2mode1 = get_next_indice( st, BITS_DE_8SMODE_N1 ); + cntbits += BITS_DE_8SMODE_N0 + BITS_DE_8SMODE_N1; + + if ( ns2mode0 == 0 ) + { + if ( ns2mode1 == 1 ) + { + pos_outlyer = get_next_indice( st, BITS_DE_8SPOS ); + cntbits += BITS_DE_8SPOS; + qbidx[pos_outlyer] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; + cntbits += BITS_ABS_ENG; + } + else + { + pos_outlyer = -1; + } + + for ( i = 0; i < pos_outlyer; ++i ) + { + bits = 0; + qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; + cntbits += bits; + } + + for ( i = pos_outlyer + 1; i < bands; ++i ) + { + bits = 0; + qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; + cntbits += bits; + } + } + else + { + if ( ns2mode1 == 1 ) + { + pos_outlyer = get_next_indice( st, BITS_DE_8SPOS ); + cntbits += BITS_DE_8SPOS; + qbidx[0] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; + cntbits += BITS_ABS_ENG; + qbidx[pos_outlyer] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; + cntbits += BITS_ABS_ENG; + } + else + { + pos_outlyer = 0; + qbidx[0] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; + cntbits += BITS_ABS_ENG; + } + + for ( i = 1; i < pos_outlyer; ++i ) + { + bits = 0; + qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; + cntbits += bits; + } + + for ( i = pos_outlyer + 1; i < bands; ++i ) + { + bits = 0; + qbidx[i] = ( decode_huff_8s( st, hestable, &bits ) - 4 ); + cntbits += bits; + } + } + } + else + { + basic_shift = get_next_indice( st, BITS_MAX_DEPTH ); + cntbits += BITS_MAX_DEPTH; + + for ( i = 0; i < bands; ++i ) + { + bits = 0; + qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; + qbidx[i] = qbidx[i] << basic_shift; + cntbits += bits; + } + + for ( i = 0; i < bands; ++i ) + { + LSB[0] = get_next_indice( st, basic_shift ); + qbidx[i] += LSB[0]; + cntbits += basic_shift; + } + } + + return cntbits; /* xx bits for diff. energies + 1 bit for LC coding mode */ +} + + +/*--------------------------------------------------------------------------* + * band_energy_dequant() + * + * + *--------------------------------------------------------------------------*/ + +static float band_energy_dequant( + Decoder_State *st, /* i/o: decoder state structure */ + float band_energy[], + const int16_t bands, + const Word32 L_qint, /* Q29 */ + const Word16 eref_fx, /* Q10 */ + const int16_t is_transient ) +{ + int16_t k; + int16_t deng_cmode; + int16_t bq0; + int16_t bq1[BANDS_MAX], bq2[BANDS_MAX]; + float deng_bits; + Word32 L_band_energy[BANDS_MAX]; /* SWB_BWE_LR_Qbe */ + Word16 exp_normd; + Word16 rev_qint_fx; + Word16 Qrev_qint; + + /* parsing energy difference coding mode */ + deng_cmode = get_next_indice( st, BITS_DE_CMODE ); + + if ( deng_cmode == 0 ) + { + deng_bits = (float) large_symbol_dec( st, bq2, bands ); + + /* counting 1 bit for deng coding mode */ + deng_bits += BITS_DE_CMODE; + } + else + { + if ( is_transient ) + { + deng_bits = (float) small_symbol_dec_tran( st, bq2, bands, is_transient ); + } + else + { + deng_bits = (float) small_symbol_dec( st, bq2, bands, is_transient ); + } + + /* counting 1 bit for deng coding mode */ + deng_bits += BITS_DE_CMODE; + } + +#define WMC_TOOL_MAN + /* Get the reference energy */ + exp_normd = norm_l( L_qint ); + div_s( &rev_qint_fx, 0x4000, round_fx( L_shl( L_qint, exp_normd ) ) ); /* Q14-(29+exp_normd-16)+15 */ + Qrev_qint = sub( 14 - ( 29 - 16 ) + 15, exp_normd ); + + bq0 = (int16_t) round_fx( L_shl( L_mult( eref_fx, rev_qint_fx ), sub( 5, Qrev_qint ) ) ); /* 16-(10+Qrev_qint+1) */ +#undef WMC_TOOL_MAN + + /* Reconstruct quantized spectrum */ + bq1[0] = bq2[0] + bq0; + for ( k = 1; k < bands; k++ ) + { + bq1[k] = bq2[k] + bq1[k - 1]; + } + + for ( k = 0; k < bands; k++ ) + { +#define WMC_TOOL_MAN + L_band_energy[k] = L_mls( L_qint, bq1[k] ); + move32(); /* 29+0-15 -> Qbe(Q14) */ + band_energy[k] = (float) ( L_band_energy[k] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); +#undef WMC_TOOL_MAN + } + + if ( is_transient ) + { + reverse_transient_frame_energies( band_energy, bands ); + } + + return ( deng_bits ); +} + + +/*--------------------------------------------------------------------------* + * p2a_threshold_dequant() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t p2a_threshold_dequant( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *p2a_flags, + const int16_t bands, + const int16_t p2a_bands ) +{ + int16_t j, k; + + for ( k = 0; k < bands - p2a_bands; k++ ) + { + p2a_flags[k] = 1; + } + + j = 0; + for ( k = bands - p2a_bands; k < bands; k++ ) + { + p2a_flags[k] = get_next_indice( st, 1 ); + j++; + } + + return ( j ); +} + + +/*--------------------------------------------------------------------------* + * mdct_spectrum_fine_gain_dec() + * + * + *--------------------------------------------------------------------------*/ + +static void mdct_spectrum_fine_gain_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float y2[], + const int16_t band_start[], + const int16_t band_end[], + const int16_t k_sort[], + const int16_t bands, + const Word32 L_qint, + const int16_t Ngq, + const int16_t gqlevs, + const int16_t gqbits ) +{ + int16_t i, k, imin; + float gamma; + float gain_table[MAX_GQLEVS]; + Word16 exp_normn, exp_normd; + Word16 delta_fx, Qdelta; + Word32 L_delta, L_q; + Word32 L_temp; + Word16 gain_table_fx[MAX_GQLEVS]; + Word16 Qgt; + Word16 temp_lo_fx, temp_hi_fx; + +#define WMC_TOOL_MAN + /* Fine gain quantization on only the most significant energy bands */ + /*delta = qint / gqlevs; */ + exp_normn = norm_l( L_qint ); + exp_normn = sub( exp_normn, 1 ); + exp_normd = norm_s( gqlevs ); + div_l( &delta_fx, L_shl( L_qint, exp_normn ), shl( gqlevs, exp_normd ) ); + Qdelta = add( sub( exp_normn, exp_normd ), 28 ); /* 29+exp_normn-(exp_normd)-1; */ + L_delta = L_shl( L_deposit_h( delta_fx ), sub( 13, Qdelta ) ); + /*q = (-qint + delta) / 2.0f; */ + L_q = L_shr( L_sub( L_delta, L_qint ), 1 ); + + FOR( i = 0; i < gqlevs; i++ ) + { + /*gain_table[i] = (float) pow (2.0f, q * 0.5f); */ + L_temp = L_shr( L_shr( L_q, 1 ), sub( 29, 16 ) ); + temp_lo_fx = L_Extract_lc( L_temp, &temp_hi_fx ); + Qgt = sub( 14, temp_hi_fx ); + gain_table_fx[i] = extract_l( Pow2( 14, temp_lo_fx ) ); /* Qgt */ + + /*q += delta; */ + L_q = L_add( L_q, L_delta ); + gain_table_fx[i] = shl( gain_table_fx[i], sub( 14, Qgt ) ); /* Qgt -> Q14 */ + gain_table[i] = (float) ( gain_table_fx[i] / pow( 2.0f, 14 ) ); + } +#undef WMC_TOOL_MAN + + for ( k = bands - Ngq; k < bands; k++ ) + { + imin = get_next_indice( st, gqbits ); + gamma = gain_table[imin]; + + for ( i = band_start[k_sort[k]]; i <= band_end[k_sort[k]]; i++ ) + { + y2[i] *= gamma; + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * spt_shorten_domain_set_dec() + * + * update the shorten band information based on p2a analysis + *--------------------------------------------------------------------------*/ + +static void spt_shorten_domain_set_dec( + Decoder_State *st, /* i : decoder state structure */ + const int16_t p2a_flags[], /* i : p2a anlysis information */ + const int16_t new_band_start[], /* i : new band start position */ + const int16_t new_band_end[], /* i : new band end position */ + const int16_t new_band_width[], /* i : new subband band width */ + const int16_t bands, /* i : total number of subbands */ + int16_t band_start[], /* o : band start position */ + int16_t band_end[], /* o : band end position */ + int16_t band_width[], /* o : sub band band width */ + int16_t *bit_budget /* i/o: bit budget */ +) +{ + int16_t j, k; + int16_t kpos; + int16_t spt_shorten_flag[SPT_SHORTEN_SBNUM]; + + kpos = 0; + j = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + spt_shorten_flag[j] = 0; + if ( p2a_flags[k] == 1 ) + { + spt_shorten_flag[j] = get_next_indice( st, 1 ); + *bit_budget -= 1; + if ( spt_shorten_flag[j] == 1 ) + { + band_start[k] = new_band_start[j]; + band_end[k] = new_band_end[j]; + band_width[k] = new_band_width[j]; + } + } + + kpos++; + j++; + } + + return; +} diff --git a/lib_dec/igf_dec.c b/lib_dec/igf_dec.c new file mode 100644 index 0000000000..55e526d665 --- /dev/null +++ b/lib_dec/igf_dec.c @@ -0,0 +1,1590 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "cnst.h" +#include "stat_dec.h" +#include "ivas_prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * IGF_replaceTCXNoise_1() + * + * measures TCX noise + *-------------------------------------------------------------------*/ + +/*! r: number of noise bands */ +static int16_t IGF_replaceTCXNoise_1( + const float *in, /* i : MDCT spectrum */ + const uint8_t *TCXNoise, /* i : tcx noise indicator vector */ + const int16_t start, /* i : start MDCT subband index */ + const int16_t stop, /* i : stop MDCT subband index */ + float *totalNoiseNrg /* o : measured noise energy */ +) +{ + int16_t sb; + int16_t noise; + float nE; + float val; + + noise = 0; + nE = FLT_MIN; + + for ( sb = start; sb < stop; sb++ ) + { + val = in[sb] * TCXNoise[sb]; + nE += val * val; + noise += TCXNoise[sb]; + } + + *totalNoiseNrg = nE; + + return noise; +} + + +/*-------------------------------------------------------------------* + * IGF_replaceTCXNoise_2() + * + * replaces TCX noise + *-------------------------------------------------------------------*/ + +static void IGF_replaceTCXNoise_2( + float *in, /* i/o: MDCT spectrum */ + const uint8_t *TCXNoise, /* i : tcx noise indicator vector */ + const int16_t start, /* i : start MDCT subband index */ + const int16_t stop, /* i : stop MDCT subband index */ + float totalNoiseNrg, /* i : measured noise energy */ + int16_t *nfSeed /* i/o: random generator noise seed */ +) +{ + int16_t sb; + float rE; + float g; + float val; + + rE = FLT_MIN; + for ( sb = start; sb < stop; sb++ ) + { + if ( TCXNoise[sb] ) + { + val = (float) own_random( nfSeed ); + in[sb] = val; + rE += val * val; + } + } + + g = (float) sqrt( totalNoiseNrg / rE ); + + for ( sb = start; sb < stop; sb++ ) + { + if ( TCXNoise[sb] ) + { + in[sb] *= g; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_replaceTCXNoise_2_new() + * + * + *-------------------------------------------------------------------*/ + +static void IGF_replaceTCXNoise_2_new( + float *in, /* i/o: MDCT spectrum */ + const uint8_t *TCXNoise, /* i : tcx noise indicator vector */ + const int16_t start, /* i : start MDCT subband index */ + const int16_t stop, /* i : stop MDCT subband index */ + float totalNoiseNrg, /* i : measured noise energy */ + int16_t n_noise_bands, /* i : number of noise bands in src */ + int16_t *nfSeed /* i/o: random generator noise seed */ +) +{ + int16_t sb; + float rE; + float g; + float val; + int16_t n_noise_bands_tile; + float noise_band_ratio; + + rE = FLT_MIN; + n_noise_bands_tile = 0; + for ( sb = start; sb < stop; sb++ ) + { + if ( TCXNoise[sb] ) + { + val = (float) own_random( nfSeed ); + in[sb] = val; + rE += val * val; + n_noise_bands_tile++; + } + } + + if ( n_noise_bands_tile ) + { + noise_band_ratio = (float) n_noise_bands_tile / n_noise_bands; + g = (float) sqrt( totalNoiseNrg * noise_band_ratio / rE ); + + for ( sb = start; sb < stop; sb++ ) + { + if ( TCXNoise[sb] ) + { + in[sb] *= g; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_decode_whitening_level() + * + * reads whitening levels + *-------------------------------------------------------------------*/ + +static void IGF_decode_whitening_level( + Decoder_State *st, /* i : decoder state */ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i/o: instance handle of IGF Deccoder */ + const int16_t p /* i : tile index, p = [0, 3] */ +) +{ + int16_t tmp; + + tmp = get_next_indice( st, 1 ); + + if ( tmp == 1 ) + { + tmp = get_next_indice( st, 1 ); + if ( tmp == 1 ) + { + hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_STRONG; + } + else + { + hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_OFF; + } + } + else + { + hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_MID; + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_getMDCTSquare() + * + * square the MDCT spectrum + *-------------------------------------------------------------------*/ + +static void IGF_getMDCTSquare( + const int16_t startLine, /* i : start MDCT subband index */ + const int16_t stopLine, /* i : stop MDCT subband index */ + const float *pSpectralData, /* i : MDCT spectrum */ + float *pSpecDataSqaure /* o : Squared MDCT spectrum */ +) +{ + int16_t i; + + for ( i = startLine; i < stopLine; i++ ) + { + pSpecDataSqaure[i] = pSpectralData[i] * pSpectralData[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_calcSfbEnergy() + * + * calculate energy per SFB + *-------------------------------------------------------------------*/ + +static void IGF_calcSfbEnergy( + const int16_t startSfb, /* i : start sfb index */ + const int16_t stopSfb, /* i : stop sfb index */ + const int16_t *swb_offset, /* i : IGF swb offset table */ + const float *pPowerSpectrum, /* i : power spectrum */ + float *sfbEnergy /* o : SFB energies, will be initialized inside this function */ +) +{ + int16_t sfb; + int16_t line; + + for ( sfb = startSfb; sfb < stopSfb; sfb++ ) + { + sfbEnergy[sfb] = 0.f; + + for ( line = swb_offset[sfb]; line < swb_offset[sfb + 1]; line++ ) + { + sfbEnergy[sfb] += pPowerSpectrum[line]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_setLinesToZero() + * + * set power spectrum values to zero, needed for energy calculation + *-------------------------------------------------------------------*/ + +static void IGF_setLinesToZero( + const int16_t startLine, /* i : start MDCT subband index */ + const int16_t stopLine, /* i : stop MDCT subband index */ + const float *pSpectralData, /* i : original MDCT spectrum */ + float *squareSpecIGF /* i/o: prepared IGF energy spectrum */ +) +{ + int16_t i; + + for ( i = startLine; i < stopLine; i++ ) + { + if ( pSpectralData[i] != 0.f ) + { + squareSpecIGF[i] = 0.f; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_prep() + * + * prepare IGF spectrum + *-------------------------------------------------------------------*/ + +static void IGF_prep( + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i : IGF private data handle */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const uint8_t *TCXNoise, /* i : TCX noise vector */ + float *igf_spec, /* o : prepared IGF spectrum */ + float *src_spec, /* i : source spectrum */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + H_IGF_GRID hGrid; + H_IGF_INFO hInfo; + int16_t i, tb, sfb, strt_cpy, tile_idx; + int16_t *swb_offset; + float *sel_spec; + + hInfo = &hPrivateData->igfInfo; + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + swb_offset = hGrid->swb_offset; + + for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) + { + int16_t tile_width, stop; + + strt_cpy = hGrid->sbWrap[tile_idx]; + + if ( element_mode > EVS_MONO ) + { + tile_width = swb_offset[hGrid->sfbWrap[tile_idx + 1]] - swb_offset[hGrid->sfbWrap[tile_idx]]; + stop = strt_cpy + tile_width; + } + else + { + stop = hGrid->startLine; + } + + if ( IGF_WHITENING_STRONG == hPrivateData->currWhiteningLevel[tile_idx] ) + { + float abs_sum; + abs_sum = 0.f; + + for ( i = strt_cpy; i < stop; i++ ) + { + abs_sum += (float) fabs( src_spec[i] ); + } + + tb = swb_offset[hGrid->sfbWrap[tile_idx]]; + + if ( abs_sum > 0.f ) + { + for ( i = strt_cpy; i < stop; i++ ) + { + igf_spec[tb++] = own_random( hInfo->nfSeed ); + } + } + else + { + for ( i = strt_cpy; i < stop; i++ ) + { + igf_spec[tb++] = 0.f; + } + } + } + else + { + if ( IGF_WHITENING_MID == hPrivateData->currWhiteningLevel[tile_idx] ) + { + if ( element_mode > EVS_MONO ) + { + if ( hPrivateData->n_noise_bands ) + { + IGF_replaceTCXNoise_2_new( igf_spec, TCXNoise, strt_cpy, stop, hPrivateData->totalNoiseNrg, hPrivateData->n_noise_bands, hInfo->nfSeed ); + } + } + else + { + if ( hPrivateData->n_noise_bands ) + { + IGF_replaceTCXNoise_2( igf_spec, TCXNoise, hGrid->minSrcSubband, hGrid->startLine, hPrivateData->totalNoiseNrg, hInfo->nfSeed ); + } + } + + sel_spec = igf_spec; + } + else + { + if ( element_mode > EVS_MONO ) + { + if ( hPrivateData->n_noise_bands_off ) + { + IGF_replaceTCXNoise_2_new( src_spec, TCXNoise, strt_cpy, stop, hPrivateData->totalNoiseNrg_off, hPrivateData->n_noise_bands_off, hInfo->nfSeed ); + } + } + else + { + if ( hPrivateData->n_noise_bands_off ) + { + IGF_replaceTCXNoise_2( src_spec, TCXNoise, hGrid->minSrcSubband, hGrid->startLine, hPrivateData->totalNoiseNrg_off, hInfo->nfSeed ); + } + } + + sel_spec = src_spec; + } + for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) + { + for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) + { + igf_spec[tb] = sel_spec[strt_cpy]; + strt_cpy++; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_prepStereo() + * + * + *-------------------------------------------------------------------*/ + +static void IGF_prepStereo( + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateDataL, /* i : IGF private data handle */ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateDataR, /* i : IGF private data handle */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const uint8_t *TCXNoiseL, /* i : TCX noise vector */ + const uint8_t *TCXNoiseR, /* i : TCX noise vector */ + float *igf_specL, /* o : prepared IGF spectrum */ + float *igf_specR, /* o : prepared IGF spectrum */ + float *src_specL, /* i : source spectrum */ + float *src_specR, /* i : source spectrum */ + const int16_t *coreMsMask /* i : line wise ms Mask */ +) +{ + H_IGF_GRID hGrid; + H_IGF_INFO hInfoL, hInfoR; + int16_t tb, sfb, strt_cpy, tile_idx; + int16_t *swb_offset; + float *sel_specL = NULL; + float *sel_specR = NULL; + const float c = SQRT2_OVER_2; /* M/S scaling factor */ + + hInfoL = &hPrivateDataL->igfInfo; + hInfoR = &hPrivateDataR->igfInfo; + hGrid = &hPrivateDataL->igfInfo.grid[igfGridIdx]; + swb_offset = hGrid->swb_offset; + + for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) + { + int16_t tile_width, stop; + strt_cpy = hGrid->sbWrap[tile_idx]; + + tile_width = swb_offset[hGrid->sfbWrap[tile_idx + 1]] - swb_offset[hGrid->sfbWrap[tile_idx]]; + stop = strt_cpy + tile_width; + + if ( IGF_WHITENING_STRONG == hPrivateDataL->currWhiteningLevel[tile_idx] ) + { + tb = swb_offset[hGrid->sfbWrap[tile_idx]]; + + for ( tb = swb_offset[hGrid->sfbWrap[tile_idx]]; tb < swb_offset[hGrid->sfbWrap[tile_idx + 1]]; tb++ ) + { + igf_specL[tb] = own_random( hInfoL->nfSeed ); + } + } + else + { + if ( IGF_WHITENING_MID == hPrivateDataL->currWhiteningLevel[tile_idx] ) + { + if ( hPrivateDataL->n_noise_bands ) + { + IGF_replaceTCXNoise_2_new( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg, hPrivateDataL->n_noise_bands, hInfoL->nfSeed ); + } + sel_specL = igf_specL; + } + else + { + if ( hPrivateDataL->n_noise_bands_off ) + { + IGF_replaceTCXNoise_2_new( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg_off, hPrivateDataL->n_noise_bands_off, hInfoL->nfSeed ); + } + sel_specL = src_specL; + } + + if ( IGF_WHITENING_MID == hPrivateDataL->currWhiteningLevel[tile_idx] ) + { + if ( hPrivateDataR->n_noise_bands ) + { + IGF_replaceTCXNoise_2_new( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg, hPrivateDataR->n_noise_bands, hInfoR->nfSeed ); + } + sel_specR = igf_specR; + } + else + { + if ( hPrivateDataR->n_noise_bands_off ) + { + IGF_replaceTCXNoise_2_new( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg_off, hPrivateDataR->n_noise_bands_off, hInfoR->nfSeed ); + } + sel_specR = src_specR; + } + + for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) + { + for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) + { +#ifdef DEBUGGING + assert( strt_cpy < hGrid->swb_offset[0] ); +#endif + + if ( coreMsMask[tb] == 0 ) + { + if ( coreMsMask[strt_cpy] == 0 ) /* LR->LR */ + { + igf_specL[tb] = sel_specL[strt_cpy]; + } + else /* MS/DR -> LR */ + { + igf_specL[tb] = ( sel_specL[strt_cpy] + sel_specR[strt_cpy] ) * c; + } + } + else + { + if ( coreMsMask[strt_cpy] == 0 ) /* LR->MS/DR */ + { + igf_specL[tb] = ( sel_specL[strt_cpy] + sel_specR[strt_cpy] ) * c; + } + else /* MS/DR -> MS/DR */ + { + igf_specL[tb] = sel_specL[strt_cpy]; + } + } + strt_cpy++; + } + } + } + + strt_cpy = hGrid->sbWrap[tile_idx]; + + if ( IGF_WHITENING_STRONG == hPrivateDataR->currWhiteningLevel[tile_idx] ) + { + tb = swb_offset[hGrid->sfbWrap[tile_idx]]; + + for ( tb = swb_offset[hGrid->sfbWrap[tile_idx]]; tb < swb_offset[hGrid->sfbWrap[tile_idx + 1]]; tb++ ) + { + igf_specR[tb] = own_random( hInfoR->nfSeed ); + } + } + else + { + if ( hPrivateDataR->currWhiteningLevel[tile_idx] != hPrivateDataL->currWhiteningLevel[tile_idx] ) + { + if ( IGF_WHITENING_MID == hPrivateDataR->currWhiteningLevel[tile_idx] ) + { + if ( hPrivateDataL->n_noise_bands ) + { + IGF_replaceTCXNoise_2_new( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg, hPrivateDataL->n_noise_bands, hInfoL->nfSeed ); + } + sel_specL = igf_specL; + } + else + { + if ( hPrivateDataL->n_noise_bands_off ) + { + IGF_replaceTCXNoise_2_new( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg_off, hPrivateDataL->n_noise_bands_off, hInfoL->nfSeed ); + } + sel_specL = src_specL; + } + + if ( IGF_WHITENING_MID == hPrivateDataR->currWhiteningLevel[tile_idx] ) + { + if ( hPrivateDataR->n_noise_bands ) + { + IGF_replaceTCXNoise_2_new( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg, hPrivateDataR->n_noise_bands, hInfoR->nfSeed ); + } + sel_specR = igf_specR; + } + else + { + if ( hPrivateDataR->n_noise_bands_off ) + { + IGF_replaceTCXNoise_2_new( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg_off, hPrivateDataR->n_noise_bands_off, hInfoR->nfSeed ); + } + sel_specR = src_specR; + } + } + + for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) + { + for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) + { +#ifdef DEBUGGING + assert( strt_cpy < hGrid->swb_offset[0] ); +#endif + + if ( coreMsMask[tb] == 0 ) + { + if ( coreMsMask[strt_cpy] == 0 ) /* LR->LR */ + { + igf_specR[tb] = sel_specR[strt_cpy]; + } + else /* MS/DR -> LR */ + { + igf_specR[tb] = ( sel_specL[strt_cpy] - sel_specR[strt_cpy] ) * c; + } + } + else + { + if ( coreMsMask[strt_cpy] == 0 ) /* LR->MS/DR */ + { + igf_specR[tb] = ( sel_specL[strt_cpy] - sel_specR[strt_cpy] ) * c; + } + else /* MS/DR -> MS/DR */ + { + igf_specR[tb] = sel_specR[strt_cpy]; + } + } + strt_cpy++; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_calc() + * + * calculates IGF energies + *-------------------------------------------------------------------*/ + +static void IGF_calc( + const IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i/o: IGF private data handle */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const float *spectrum, /* i : MDCT spectrum */ + const float *igf_spec /* i : prepared IGF spectrum */ +) +{ + H_IGF_GRID hGrid; + float *igf_pN; + float *igf_sN; + float tmp[N_MAX_TCX] = { 0.f }; + + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + igf_pN = hPrivateData->igf_pN; + igf_sN = hPrivateData->igf_sN; + + IGF_getMDCTSquare( hGrid->startLine, hGrid->stopLine, spectrum, tmp ); + IGF_calcSfbEnergy( hGrid->startSfb, hGrid->stopSfb, hGrid->swb_offset, tmp, igf_sN ); + IGF_getMDCTSquare( hGrid->startLine, hGrid->stopLine, igf_spec, tmp ); + IGF_setLinesToZero( hGrid->startLine, hGrid->stopLine, spectrum, tmp ); + IGF_calcSfbEnergy( hGrid->startSfb, hGrid->stopSfb, hGrid->swb_offset, tmp, igf_pN ); + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_appl() + * + * apply IGF + *-------------------------------------------------------------------*/ + +static void IGF_appl( + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i : IGF private data handle */ + const int16_t igfGridIdx, /* i : in case of ACELP->TCX switching, use 1.25 framelength*/ + float *pSpectralData, /* i/o: Q31 | MDCT spectrum */ + const float *igf_spec, /* i : Q31 | prepared IGF spectrum */ + float *virtualSpec, /* o : Q31 | virtual IGF spectrum, used for temp flattening */ + int16_t *flag_sparse /* o : Q0 | temp flattening indicator */ +) +{ + H_IGF_GRID hGrid; + int16_t tb; /* target subband */ + int16_t sfb, s_sfb, start_sfb, stop_sfb; + int16_t *swb_offset; + int16_t hopsize; + float tmp, dE; + float dN[IGF_MAX_SFB + 1]; + float gain[IGF_MAX_SFB]; + float dS[IGF_MAX_SFB]; + float width; + float sNlocal; + float E, sum, val; + float w0, w1, w2; + float *sN, *pN; + float gFactor; /* general SCF adaption */ + float fFactor; /* first SCF adaption */ + float lFactor; /* last SCF adaption */ + int16_t idx, idx1; + + /* initialize variables */ + w0 = 0.201f; + w1 = 0.389f; + w2 = 0.410f; + dE = 0.f; + + + /* more inits */ + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + sN = hPrivateData->igf_sN; + pN = hPrivateData->igf_pN; + start_sfb = hGrid->startSfb; + stop_sfb = hGrid->stopSfb; + gFactor = hGrid->gFactor; + fFactor = hGrid->fFactor; + lFactor = hGrid->lFactor; + swb_offset = hGrid->swb_offset; + +#ifdef DEBUGGING + /* make sure we don't read/write OOB for arrays whose size was reduced by IGF_START_MN to safe on memory */ + assert( swb_offset[start_sfb] >= IGF_START_MN ); +#endif + + /* collect energy below hGrid->startLine: */ + for ( tb = hGrid->startLine - 24; tb < hGrid->startLine; tb++ ) + { + dE += pSpectralData[tb] * pSpectralData[tb]; + } + dE = (float) sqrt( dE / 24. ); + + hopsize = 2; + hopsize = ( hPrivateData->currWhiteningLevel[0] == IGF_WHITENING_OFF ) ? 4 : hopsize; + hopsize = ( hPrivateData->currWhiteningLevel[0] == IGF_WHITENING_MID ) ? 2 : hopsize; + hopsize = ( hPrivateData->currWhiteningLevel[0] == IGF_WHITENING_STRONG ) ? 1 : hopsize; + hopsize = min( hopsize, hPrivateData->igfInfo.maxHopsize ); + + if ( hPrivateData->restrict_hopsize ) + { + hopsize = min( hopsize, 2 ); + } + + if ( hopsize > 1 ) + { + for ( sfb = start_sfb; sfb < stop_sfb; sfb += hopsize ) + { + for ( tb = sfb + 1; tb < min( ( sfb + hopsize ), stop_sfb ); tb++ ) + { + sN[sfb] += sN[tb]; + pN[sfb] += pN[tb]; + sN[tb] = 0.f; + pN[tb] = 0.f; + } + } + } + + /* IGF_rescale_SCF */ + if ( hGrid->infoIsRefined ) + { + for ( sfb = start_sfb; sfb < stop_sfb; sfb += 2 ) + { + width = (float) ( swb_offset[sfb + 2] - swb_offset[sfb] ); + + tmp = (float) hPrivateData->igf_curr[sfb >> 1]; + tmp = (float) pow( 2.0, 0.25 * tmp - 4.0 ); + tmp = tmp * tmp; + + sNlocal = sN[sfb] + sN[sfb + 1]; + sNlocal /= width; + + tmp = (float) max( 0.001 * sNlocal, tmp - sNlocal ); + dN[sfb] = (float) sqrt( tmp ); + dN[sfb + 1] = dN[sfb]; + } + } + else + { + for ( sfb = start_sfb; sfb < stop_sfb; sfb++ ) + { + width = (float) ( swb_offset[sfb + 1] - swb_offset[sfb] ); + + tmp = (float) hPrivateData->igf_curr[sfb]; + tmp = (float) pow( 2.0, 0.25 * tmp - 4.0 ); + tmp = tmp * tmp; + + sNlocal = sN[sfb]; + sNlocal /= width; + + tmp = (float) max( 0.001 * sNlocal, tmp - sNlocal ); + dN[sfb] = (float) sqrt( tmp ); + } + } + + dS[start_sfb] = dN[start_sfb]; + /* first value with adaption to core energy: */ + if ( dE < dN[start_sfb] ) + { + dS[start_sfb] = dN[start_sfb] + fFactor * ( dE - dN[start_sfb] ); + } + /* last value with less energy: */ + dS[stop_sfb - 1] = lFactor * dN[stop_sfb - 1]; + + if ( hGrid->infoIsRefined && hopsize == 1 ) + { + /* apply filter to absolute energy values: */ + for ( sfb = start_sfb + 1; sfb < stop_sfb - 1; sfb++ ) + { + dS[sfb] = w0 * dN[sfb - 1] + w1 * dN[sfb] + w2 * dN[sfb + 1]; + } + } + else + { + for ( sfb = start_sfb + 1; sfb < stop_sfb - 1; sfb++ ) + { + dS[sfb] = dN[sfb]; + } + } + + for ( sfb = start_sfb; sfb < stop_sfb; sfb += hopsize ) + { + E = 0.f; + sum = 0; + for ( tb = 0; tb < hopsize; tb++ ) + { + idx1 = min( sfb + tb + 1, stop_sfb ); + idx = min( sfb + tb, stop_sfb ); + width = (float) ( swb_offset[idx1] - swb_offset[idx] ); + idx = min( sfb + tb, stop_sfb - 1 ); + val = dS[idx]; + E += val * val * width; + sum += width; + } + + dS[sfb] = (float) sqrt( ( E * hopsize ) / sum ); + dN[sfb] = gFactor * dS[sfb]; + + width = (float) ( swb_offset[sfb + 1] - swb_offset[sfb] ); + dN[sfb] = dN[sfb] * dN[sfb] * width; + gain[sfb] = 0.f; + + if ( pN[sfb] > 1.e-20f ) + { + gain[sfb] = (float) sqrt( dN[sfb] / pN[sfb] ); + } + + for ( s_sfb = sfb + 1; s_sfb < min( sfb + hopsize, stop_sfb ); s_sfb++ ) + { + gain[s_sfb] = gain[sfb]; + } + } + + /* tiling */ + for ( sfb = start_sfb; sfb < stop_sfb; sfb++ ) + { + + if ( hPrivateData->frameLossCounter > 0 ) + { + gain[sfb] = min( gain[sfb], 12.f ); + + if ( hPrivateData->frameLossCounter < 5 ) + { + gain[sfb] -= gain[sfb] / 8 * hPrivateData->frameLossCounter; + } + else + { + gain[sfb] /= 2; + } + } + + for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) + { + if ( pSpectralData[tb] == 0.f ) + { + pSpectralData[tb] = igf_spec[tb] * gain[sfb]; + flag_sparse[tb - IGF_START_MN] = 1; + } + else + { + virtualSpec[tb - IGF_START_MN] = igf_spec[tb] * gain[sfb]; + flag_sparse[tb - IGF_START_MN] = 2; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_getWhiteSpectralData() + * + * spectral whitening + *-------------------------------------------------------------------*/ + +static void IGF_getWhiteSpectralData( + const float *in, /* i : MDCT spectrum */ + float *out, /* o : whitened spectrum */ + const int16_t start, /* i : start MDCT subband index */ + const int16_t stop, /* i : stop MDCT subband index */ + const int16_t level /* i : whitening strength */ +) +{ + int16_t i; + int16_t n; + int16_t j; + float div; + float ak; + + /* inits */ + div = 0.0f; + + for ( i = start; i < stop - level; i++ ) + { + ak = 1e-3f; + for ( j = i - level; j < i + level + 1; j++ ) + { + ak += in[j] * in[j]; + } + ak /= (float) ( level * 2 + 1 ); + + + n = (int16_t) max( 0.f, ( log( ak ) * INV_LOG_2 ) ); /* INV_LOG_2 = 1 / (float)log(2.0f)) */ + n >>= 1; /* sqrt() */ + div = (float) ( pow( 2.0f, (float) ( 21 - n ) ) ); + + + out[i] = in[i] * div; /* same as shift */ + } + + for ( ; i < stop; i++ ) + { + ak = 1e-3f; + + for ( j = i - level; j < stop; j++ ) + { + ak += in[j] * in[j]; + } + ak /= (float) ( stop - ( i - level ) ); + + + n = (int16_t) max( 0.f, ( log( ak ) * INV_LOG_2 ) ); /* INV_LOG_2 = 1 / (float)log(2.0f)) */ + n >>= 1; /* sqrt() */ + div = (float) ( pow( 2.0f, (float) ( 21 - n ) ) ); + + + out[i] = in[i] * div; /* same as shift */ + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_RefineGrid() + * + * refines the IGF grid + *-------------------------------------------------------------------*/ + +static void IGF_RefineGrid( + H_IGF_GRID hGrid /* i/o: IGF grid handle */ +) +{ + int16_t a[IGF_MAX_SFB + 1]; /* +1: because in for-loop one value too much will be extrapolated */ + int16_t sfb; + + set_s( a, 0, IGF_MAX_SFB + 1 ); + + + hGrid->infoIsRefined = 1; + for ( sfb = 0; sfb < hGrid->swb_offset_len; sfb++ ) + { + a[sfb * 2 + 0] = hGrid->swb_offset[sfb]; + a[sfb * 2 + 1] = (int16_t) round_f( hGrid->swb_offset[sfb] + 0.45f * ( hGrid->swb_offset[sfb + 1] - hGrid->swb_offset[sfb] ) ); + if ( a[sfb * 2 + 1] & 1 ) + { + a[sfb * 2 + 1]--; + } + } + hGrid->stopSfb = hGrid->stopSfb * 2; + for ( sfb = 0; sfb <= hGrid->stopSfb; sfb++ ) + { + hGrid->swb_offset[sfb] = a[sfb]; + } + + for ( sfb = 0; sfb <= hGrid->nTiles; sfb++ ) + { + hGrid->sfbWrap[sfb] *= 2; + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecReadData() + * + * reads whitening information from the bitstream + *-------------------------------------------------------------------*/ + +void IGFDecReadData( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Deccoder */ + Decoder_State *st, /* i : decoder state */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t isIndepFrame /* i : if 1: arith dec force reset, if 0: no reset */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t p; + int16_t nT; + int16_t tmp; + + if ( hIGFDec != NULL ) + { + hPrivateData = &hIGFDec->igfData; + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + nT = hGrid->nTiles; + tmp = -1; + + for ( p = 0; p < IGF_MAX_TILES; p++ ) + { + hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_OFF; + } + + if ( isIndepFrame ) + { + tmp = 0; + } + else + { + tmp = get_next_indice( st, 1 ); + } + if ( tmp == 1 ) + { + for ( p = 0; p < nT; p++ ) + { + hPrivateData->currWhiteningLevel[p] = hPrivateData->prevWhiteningLevel[p]; + } + } + else + { + IGF_decode_whitening_level( st, hPrivateData, 0 ); + if ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) + { + tmp = 0; + } + else + { + tmp = get_next_indice( st, 1 ); + } + + if ( tmp == 1 ) + { + for ( p = 1; p < nT; p++ ) + { + IGF_decode_whitening_level( st, hPrivateData, p ); + } + } + else + { + for ( p = 1; p < nT; p++ ) + { + hPrivateData->currWhiteningLevel[p] = hPrivateData->currWhiteningLevel[0]; + } + } + } + for ( p = 0; p < IGF_MAX_TILES; p++ ) + { + hPrivateData->prevWhiteningLevel[p] = hPrivateData->currWhiteningLevel[p]; + } + + /* IGF_decode_temp_flattening_trigger()*/ + hIGFDec->flatteningTrigger = get_next_indice( st, 1 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecReadLevel() + * + * read the IGF level information from the bitstream + *-------------------------------------------------------------------*/ + +/*! r: return igfAllZero flag indicating if no envelope is transmitted */ +int16_t IGFDecReadLevel( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Deccoder */ + Decoder_State *st, /* i : decoder state */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t isIndepFrame /* i : if 1: arith dec force reset, if 0: no reset */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t m_igfSfbStart; + int16_t IGFAllZero; + + IGFAllZero = 1; + + if ( hIGFDec != NULL ) + { + hPrivateData = &hIGFDec->igfData; + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + m_igfSfbStart = hGrid->startSfb; + IGFAllZero = get_next_indice( st, 1 ); + + if ( IGFAllZero == 0 ) + { + mvs2s( hPrivateData->igf_curr, hPrivateData->igf_prev, hGrid->stopSfb ); + + IGFSCFDecoderDecode( &hPrivateData->hArithSCFdec, st, &hPrivateData->igf_curr[m_igfSfbStart], igfGridIdx, isIndepFrame ); + } + else + { + IGFSCFDecoderReset( &hPrivateData->hArithSCFdec ); + + set_s( &hPrivateData->igf_curr[m_igfSfbStart], 0, hGrid->stopSfb - m_igfSfbStart ); + } + } + + hIGFDec->infoIGFAllZero = IGFAllZero; + + return IGFAllZero; +} + + +/*-------------------------------------------------------------------* + * IGFDecApplyMono() + * + * apply the IGF decoder in mono + *-------------------------------------------------------------------*/ + +void IGFDecApplyMono( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + float *spectrum, /* i/o: MDCT spectrum */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t bfi, /* i : frame loss == 1, frame good == 0 */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t i, whiteningLevel, nLinesToReset; + float igf_spec[IGF_MAX_GRANULE_LEN] = { 0.f }; + int16_t nShift; + + /* initialize variables */ + if ( element_mode > EVS_MONO ) + { + whiteningLevel = IGF_MID_WHITENING_LEVEL2; + } + else + { + whiteningLevel = IGF_MID_WHITENING_LEVEL; + } + + nShift = igfGridIdx == IGF_GRID_LB_SHORT ? 2 : 1; + set_s( hIGFDec->flag_sparse, 0, ( N_MAX_TCX - IGF_START_MN ) / nShift ); + set_f( hIGFDec->virtualSpec, 0.f, ( N_MAX_TCX - IGF_START_MN ) / nShift ); + + hPrivateData = &hIGFDec->igfData; + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + hPrivateData->totalNoiseNrg = 0.f; + hPrivateData->n_noise_bands = 0; + hPrivateData->totalNoiseNrg_off = 0.f; + hPrivateData->n_noise_bands_off = 0; + hPrivateData->restrict_hopsize = 0; + + /* concealment counter */ + if ( bfi ) + { + hPrivateData->frameLossCounter++; + } + else + { + hPrivateData->frameLossCounter = 0; + } + + /* skip IGF processing if all IGF levels are zero */ + if ( !hIGFDec->infoIGFAllZero ) + { + for ( i = 0; i < hGrid->nTiles; i++ ) + { + if ( hPrivateData->currWhiteningLevel[i] == IGF_WHITENING_MID ) + { + if ( element_mode == EVS_MONO || !bfi ) + { + IGF_getWhiteSpectralData( hPrivateData->pSpecFlat, igf_spec, hGrid->minSrcSubband, hGrid->startLine, whiteningLevel ); + } + else + { + mvr2r( hPrivateData->pSpecFlat, igf_spec, hGrid->startLine ); + } + + hPrivateData->n_noise_bands = IGF_replaceTCXNoise_1( igf_spec, hIGFDec->infoTCXNoise, hGrid->minSrcSubband, hGrid->startLine, &hPrivateData->totalNoiseNrg ); + break; + } + } + + for ( i = 0; i < hGrid->nTiles; i++ ) + { + if ( hPrivateData->currWhiteningLevel[i] == IGF_WHITENING_OFF ) + { + hPrivateData->n_noise_bands_off = IGF_replaceTCXNoise_1( hPrivateData->pSpecFlat, hIGFDec->infoTCXNoise, hGrid->minSrcSubband, hGrid->startLine, &hPrivateData->totalNoiseNrg_off ); + break; + } + } + + /* apply IGF in three steps: */ + IGF_prep( hPrivateData, igfGridIdx, hIGFDec->infoTCXNoise, igf_spec, hPrivateData->pSpecFlat, element_mode ); + IGF_calc( hPrivateData, igfGridIdx, spectrum, igf_spec ); + IGF_appl( hPrivateData, igfGridIdx, spectrum, igf_spec, hIGFDec->virtualSpec, hIGFDec->flag_sparse ); + } + + /* reset TCX noise indicator vector */ + nLinesToReset = igfGridIdx == IGF_GRID_LB_SHORT ? 2 : 1; + nLinesToReset = IGF_START_MX / nLinesToReset; + set_c( (int8_t *) ( hIGFDec->infoTCXNoise ), 0, nLinesToReset ); + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecApplyStereo() + * + * apply the IGF decoder in stereo + *-------------------------------------------------------------------*/ + +void IGFDecApplyStereo( + const IGF_DEC_INSTANCE_HANDLE hIGFDecL, /* i : instance handle of IGF Decoder */ + const IGF_DEC_INSTANCE_HANDLE hIGFDecR, /* i : instance handle of IGF Decoder */ + float *spectrumL, /* i/o: L MDCT spectrum */ + float *spectrumR, /* i/o: R MDCT spectrum */ + const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ + const int16_t *coreMsMask, + const int16_t restrict_hopsize, + const int16_t bfi /* i : frame loss == 1, frame good == 0 */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateDataL, hPrivateDataR; + H_IGF_GRID hGrid; + int16_t i, whiteningLevel, nLinesToReset; + float igf_specL[IGF_MAX_GRANULE_LEN], igf_specR[IGF_MAX_GRANULE_LEN]; + int16_t nShift; + + set_f( igf_specL, 0.f, IGF_MAX_GRANULE_LEN ); + set_f( igf_specR, 0.f, IGF_MAX_GRANULE_LEN ); + + /* initialize variables */ + whiteningLevel = IGF_MID_WHITENING_LEVEL2; + + nShift = igfGridIdx == IGF_GRID_LB_SHORT ? 2 : 1; + set_s( hIGFDecL->flag_sparse, 0, ( N_MAX_TCX - IGF_START_MN ) / nShift ); + set_s( hIGFDecR->flag_sparse, 0, ( N_MAX_TCX - IGF_START_MN ) / nShift ); + set_f( hIGFDecL->virtualSpec, 0.f, ( N_MAX_TCX - IGF_START_MN ) / nShift ); + set_f( hIGFDecR->virtualSpec, 0.f, ( N_MAX_TCX - IGF_START_MN ) / nShift ); + + hPrivateDataL = &hIGFDecL->igfData; + hGrid = &hPrivateDataL->igfInfo.grid[igfGridIdx]; + hPrivateDataL->totalNoiseNrg = 0.f; + hPrivateDataL->n_noise_bands = 0; + hPrivateDataL->totalNoiseNrg_off = 0.f; + hPrivateDataL->n_noise_bands_off = 0; + hPrivateDataL->restrict_hopsize = restrict_hopsize; + + hPrivateDataR = &hIGFDecR->igfData; + hPrivateDataR->totalNoiseNrg = 0.f; + hPrivateDataR->n_noise_bands = 0; + hPrivateDataR->totalNoiseNrg_off = 0.f; + hPrivateDataR->n_noise_bands_off = 0; + hPrivateDataR->restrict_hopsize = restrict_hopsize; + + /* concealment counter */ + if ( bfi ) + { + hPrivateDataL->frameLossCounter++; + hPrivateDataR->frameLossCounter++; + } + else + { + hPrivateDataL->frameLossCounter = 0; + hPrivateDataR->frameLossCounter = 0; + } + + /* skip IGF processing if all IGF levels are zero */ + if ( !hIGFDecL->infoIGFAllZero || !hIGFDecR->infoIGFAllZero ) + { + for ( i = 0; i < hGrid->nTiles; i++ ) + { + if ( hPrivateDataL->currWhiteningLevel[i] == IGF_WHITENING_MID || hPrivateDataR->currWhiteningLevel[i] == IGF_WHITENING_MID ) + { + if ( !bfi ) + { + IGF_getWhiteSpectralData( hPrivateDataL->pSpecFlat, igf_specL, hGrid->minSrcSubband, hGrid->startLine, whiteningLevel ); + } + else + { + mvr2r( hPrivateDataL->pSpecFlat, igf_specL, hGrid->startLine ); + } + + hPrivateDataL->n_noise_bands = IGF_replaceTCXNoise_1( igf_specL, hIGFDecL->infoTCXNoise, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataL->totalNoiseNrg ); + + if ( !bfi ) + { + IGF_getWhiteSpectralData( hPrivateDataR->pSpecFlat, igf_specR, hGrid->minSrcSubband, hGrid->startLine, whiteningLevel ); + } + else + { + mvr2r( hPrivateDataR->pSpecFlat, igf_specR, hGrid->startLine ); + } + + hPrivateDataR->n_noise_bands = IGF_replaceTCXNoise_1( igf_specR, hIGFDecR->infoTCXNoise, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataR->totalNoiseNrg ); + + break; + } + } + + for ( i = 0; i < hGrid->nTiles; i++ ) + { + if ( hPrivateDataL->currWhiteningLevel[i] == IGF_WHITENING_OFF || hPrivateDataR->currWhiteningLevel[i] == IGF_WHITENING_OFF ) + { + hPrivateDataL->n_noise_bands_off = IGF_replaceTCXNoise_1( hPrivateDataL->pSpecFlat, hIGFDecL->infoTCXNoise, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataL->totalNoiseNrg_off ); + + hPrivateDataR->n_noise_bands_off = IGF_replaceTCXNoise_1( hPrivateDataR->pSpecFlat, hIGFDecR->infoTCXNoise, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataR->totalNoiseNrg_off ); + break; + } + } + + /* apply IGF in three steps: */ + IGF_prepStereo( hPrivateDataL, hPrivateDataR, igfGridIdx, hIGFDecL->infoTCXNoise, hIGFDecR->infoTCXNoise, igf_specL, igf_specR, hPrivateDataL->pSpecFlat, hPrivateDataR->pSpecFlat, coreMsMask ); + + IGF_calc( hPrivateDataL, igfGridIdx, spectrumL, igf_specL ); + IGF_calc( hPrivateDataR, igfGridIdx, spectrumR, igf_specR ); + IGF_appl( hPrivateDataL, igfGridIdx, spectrumL, igf_specL, hIGFDecL->virtualSpec, hIGFDecL->flag_sparse ); + IGF_appl( hPrivateDataR, igfGridIdx, spectrumR, igf_specR, hIGFDecR->virtualSpec, hIGFDecR->flag_sparse ); + } + + /* reset TCX noise indicator vector */ + nLinesToReset = ( igfGridIdx == IGF_GRID_LB_SHORT ) ? 2 : 1; + nLinesToReset = IGF_START_MX / nLinesToReset; + set_c( (int8_t *) ( hIGFDecL->infoTCXNoise ), 0, nLinesToReset ); + set_c( (int8_t *) ( hIGFDecR->infoTCXNoise ), 0, nLinesToReset ); + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecSetMode() + * + * set mode is used to init the IGF dec with a new bitrate + *-------------------------------------------------------------------*/ + +void IGFDecSetMode( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i : instance handle of IGF Decoder */ + const int32_t total_brate, /* i : bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t defaultStartLine, /* i : default start subband index */ + const int16_t defaultStopLine, /* i : default stop subband index */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + + hPrivateData = &hIGFDec->igfData; + hIGFDec->isIGFActive = 0; + + if ( IGFCommonFuncsIGFConfiguration( total_brate, bwidth, element_mode, &hPrivateData->igfInfo, rf_mode ) ) + { + IGFSCFDecoderOpen( &hPrivateData->hArithSCFdec, &hPrivateData->igfInfo, total_brate, bwidth, element_mode, rf_mode ); + + hIGFDec->infoIGFAllZero = 0; + hIGFDec->isIGFActive = 1; + hIGFDec->infoIGFStopLine = hPrivateData->igfInfo.grid[0].stopLine; + hIGFDec->infoIGFStartLine = hPrivateData->igfInfo.grid[0].startLine; + hIGFDec->infoIGFStopFreq = hPrivateData->igfInfo.grid[0].stopFrequency; + hIGFDec->infoIGFStartFreq = hPrivateData->igfInfo.grid[0].startFrequency; + + /* no refinement if maxHopsize is 1 */ + if ( hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_96000 && hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_96000_CPE && + hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_128000 && hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_128000_CPE ) + { + IGF_RefineGrid( &hPrivateData->igfInfo.grid[IGF_GRID_LB_NORM] ); + IGF_RefineGrid( &hPrivateData->igfInfo.grid[IGF_GRID_LB_TRAN] ); + IGF_RefineGrid( &hPrivateData->igfInfo.grid[IGF_GRID_LB_SHORT] ); + } + /* IGFDecOutInformation(hIGFDec); */ + } + else + { + hIGFDec->infoIGFStopLine = defaultStopLine; + hIGFDec->infoIGFStartLine = defaultStartLine; + hIGFDec->infoIGFStopFreq = -1; + hIGFDec->infoIGFStartFreq = -1; + IVAS_ERROR( IVAS_ERR_INTERNAL, "IGFDecSetMode: initialization error!" ); + } + + hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[0]; + hIGFDec->infoTCXNoise = &hIGFDec->infoTCXNoiseBuf[0]; + hIGFDec->virtualSpec = &hIGFDec->virtualSpecBuf[0]; + hIGFDec->igfData.pSpecFlat = &hIGFDec->igfData.pSpecFlatBuf[0]; + hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[0]; + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecUpdateInfo() + * + * updates the start/stop frequency of IGF according to igfGridIdx + *-------------------------------------------------------------------*/ + +void IGFDecUpdateInfo( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + const int16_t subFrameIdx, /* i : index of subframe */ + const int16_t igfGridIdx /* i : IGF grid index */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + + hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[0]; + hIGFDec->infoTCXNoise = &hIGFDec->infoTCXNoiseBuf[0]; + hIGFDec->virtualSpec = &hIGFDec->virtualSpecBuf[0]; + hIGFDec->igfData.pSpecFlat = &hIGFDec->igfData.pSpecFlatBuf[0]; + hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[0]; + + if ( igfGridIdx == IGF_GRID_LB_SHORT ) + { + IGFDecRestoreTCX10SubFrameData( hIGFDec, subFrameIdx ); + } + + hPrivateData = &hIGFDec->igfData; + if ( hIGFDec->isIGFActive ) + { + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + hIGFDec->infoIGFStartFreq = hGrid->startFrequency; + hIGFDec->infoIGFStopFreq = hGrid->stopFrequency; + hIGFDec->infoIGFStartLine = hGrid->startLine; + hIGFDec->infoIGFStopLine = hGrid->stopLine; + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecReplicateTCX10State() + * + * + *-------------------------------------------------------------------*/ + +void IGFDecReplicateTCX10State( + IGF_DEC_INSTANCE_HANDLE hIGFDec /* i/o: instance handle of IGF Decoder */ +) +{ + mvs2s( &hIGFDec->flag_sparseBuf[( N_MAX_TCX - IGF_START_MN ) / 2], &hIGFDec->flag_sparseBuf[0], ( N_MAX_TCX - IGF_START_MN ) / 2 ); + mvc2c( &hIGFDec->infoTCXNoiseBuf[( IGF_START_MX ) / 2], &hIGFDec->infoTCXNoiseBuf[0], ( IGF_START_MX ) / 2 ); + mvr2r( &hIGFDec->virtualSpecBuf[( N_MAX_TCX - IGF_START_MN ) / 2], &hIGFDec->virtualSpecBuf[0], ( N_MAX_TCX - IGF_START_MN ) / 2 ); + mvr2r( &hIGFDec->igfData.pSpecFlatBuf[IGF_START_MX / 2], &hIGFDec->igfData.pSpecFlatBuf[0], IGF_START_MX / 2 ); + + hIGFDec->igfData.igfInfo.nfSeedBuf[0] = hIGFDec->igfData.igfInfo.nfSeedBuf[1]; + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecCopyLPCFlatSpectrum() + * + * copy the LPC flat spectrum to IGF buffer + *-------------------------------------------------------------------*/ + +void IGFDecCopyLPCFlatSpectrum( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + const float *pSpectrumFlat, /* i : LPC flattend spectrum from TCX dec */ + const int16_t igfGridIdx /* i : IGF grid index */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t i; + + if ( hIGFDec ) + { + hPrivateData = &hIGFDec->igfData; + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + + for ( i = hGrid->minSrcSubband - IGF_MID_WHITENING_LEVEL2; i < hGrid->startLine; i++ ) + { + hPrivateData->pSpecFlat[i] = pSpectrumFlat[i] * 1024.f; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecStoreTCX10SubFrameData() + * + * store the IGF bitstream information for TCX10 subframes + *-------------------------------------------------------------------*/ + +void IGFDecStoreTCX10SubFrameData( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + const int16_t subFrameIdx /* i : index of subframe */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + + hPrivateData = &hIGFDec->igfData; + + /* store igf energies for subframe*/ + mvs2s( hPrivateData->igf_curr, hPrivateData->igf_curr_subframe[subFrameIdx][0], IGF_MAX_SFB ); + mvs2s( hPrivateData->igf_prev, hPrivateData->igf_prev_subframe[subFrameIdx], IGF_MAX_SFB ); + + /* store spectral whitening information for current subframe */ + mvs2s( hPrivateData->currWhiteningLevel, hPrivateData->currWhiteningLevel_subframe[subFrameIdx], IGF_MAX_TILES ); + mvs2s( hPrivateData->prevWhiteningLevel, hPrivateData->prevWhiteningLevel_subframe[subFrameIdx], IGF_MAX_TILES ); + + /* store flattening trigger for current subframe */ + hPrivateData->igf_flatteningTrigger_subframe[subFrameIdx] = hIGFDec->flatteningTrigger; + + return; +} + + +/*-------------------------------------------------------------------* + * IGFDecRestoreTCX10SubFrameData() + * + * restore the IGF bitstream information for TCX10 subframes + *-------------------------------------------------------------------*/ + +void IGFDecRestoreTCX10SubFrameData( + const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ + const int16_t subFrameIdx /* i : index of subframe */ +) +{ + IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; + + hPrivateData = &hIGFDec->igfData; + + /* store igf energies for subframe*/ + mvs2s( hPrivateData->igf_curr_subframe[subFrameIdx][0], hPrivateData->igf_curr, IGF_MAX_SFB ); + mvs2s( hPrivateData->igf_prev_subframe[subFrameIdx], hPrivateData->igf_prev, IGF_MAX_SFB ); + + /* store spectral whitening information for current subframe */ + mvs2s( hPrivateData->currWhiteningLevel_subframe[subFrameIdx], hPrivateData->currWhiteningLevel, IGF_MAX_TILES ); + mvs2s( hPrivateData->prevWhiteningLevel_subframe[subFrameIdx], hPrivateData->prevWhiteningLevel, IGF_MAX_TILES ); + + /* restore flattening trigger for current subframe */ + hIGFDec->flatteningTrigger = hPrivateData->igf_flatteningTrigger_subframe[subFrameIdx]; + hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[subFrameIdx * ( N_MAX_TCX - IGF_START_MN ) / 2]; + hIGFDec->infoTCXNoise = &hIGFDec->infoTCXNoiseBuf[subFrameIdx * ( IGF_START_MX ) / 2]; + hIGFDec->virtualSpec = &hIGFDec->virtualSpecBuf[subFrameIdx * ( N_MAX_TCX - IGF_START_MN ) / 2]; + hIGFDec->igfData.pSpecFlat = &hIGFDec->igfData.pSpecFlatBuf[subFrameIdx * IGF_START_MX / 2]; + hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[subFrameIdx]; + + return; +} + +/*-----------------------------------------------------------------------* + * init_igf_dec() + * + * Initialize IGF decoder parameters + *-----------------------------------------------------------------------*/ + +void init_igf_dec( + IGF_DEC_INSTANCE_HANDLE hIGFDec /* i/o: IGF decoder handle */ +) +{ + set_c( (int8_t *) ( hIGFDec->infoTCXNoiseBuf ), 0, IGF_START_MX ); + set_f( hIGFDec->igfData.pSpecFlatBuf, 0, IGF_START_MX ); + hIGFDec->igfData.igfInfo.nfSeedBuf[0] = 9733; + hIGFDec->igfData.igfInfo.nfSeedBuf[1] = 9733; + hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[0]; + hIGFDec->igfData.pSpecFlat = &hIGFDec->igfData.pSpecFlatBuf[0]; + hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[0]; + hIGFDec->infoTCXNoise = &hIGFDec->infoTCXNoiseBuf[0]; + hIGFDec->virtualSpec = &hIGFDec->virtualSpecBuf[0]; + + return; +} diff --git a/lib_dec/igf_scf_dec.c b/lib_dec/igf_scf_dec.c new file mode 100644 index 0000000000..29660271b3 --- /dev/null +++ b/lib_dec/igf_scf_dec.c @@ -0,0 +1,330 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_dec.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * IGFSCFDecoderOpen() + * + * initialization of an instance of this module, pass a ptr to a hPublicData + *---------------------------------------------------------------------*/ + +void IGFSCFDecoderOpen( + IGFSCFDEC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data */ + H_IGF_INFO hIgfInfo, /* i : IGF info handle */ + const int32_t total_brate, + const int16_t bwidth, + const int16_t element_mode, + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + + hPublicData->scfCountLongBlock[0] = hIgfInfo->grid[0].swb_offset_len - 1; + hPublicData->scfCountLongBlock[1] = hIgfInfo->grid[1].swb_offset_len - 1; + hPublicData->scfCountLongBlock[2] = hIgfInfo->grid[2].swb_offset_len - 1; + hPublicData->t = 0; /* protect against the invalid request of starting decoding with a dependent block */ + + IGFCommonFuncsIGFGetCFTables( total_brate, bwidth, element_mode, rf_mode, &hPublicData->cf_se00, &hPublicData->cf_se01, &hPublicData->cf_off_se01, &hPublicData->cf_se02, &hPublicData->cf_off_se02, &hPublicData->cf_se10, &hPublicData->cf_off_se10, &hPublicData->cf_se11, &hPublicData->cf_off_se11 ); + + return; +} + +/*---------------------------------------------------------------------* + * quant_ctx() + * + * + *---------------------------------------------------------------------*/ + +static int16_t quant_ctx( + const int16_t ctx ) +{ + /* + ctx ... -5 -4 -3 -2 -1 0 1 2 3 4 5 ... + Q(ctx)... -3 -3 -3 -2 -1 0 1 2 3 3 3 ... + */ + if ( abs( ctx ) <= 3 ) + { + return ctx; + } + else if ( ctx > 3 ) + { + return 3; + } + else + { + /* ctx < -3 */ + return -3; + } +} + +/*---------------------------------------------------------------------* + * arith_decode_bits() + * + * + *---------------------------------------------------------------------*/ + +static int16_t arith_decode_bits( + Tastat *ac_state, /* i/o: arith coding state */ + Decoder_State *st, /* i : pointer to decoder state */ + const int16_t nBits /* i : number of bits to decode */ +) +{ + int16_t i, x; + uint16_t bit; + + x = 0; + for ( i = 0; i < nBits; ++i ) + { + /* decode one bit using the new raw AC function */ + ari_decode_14bits_bit_ext( st, &bit, ac_state ); + x = ( x << 1 ) | bit; + } + + return x; +} + + +/*---------------------------------------------------------------------* + * arith_decode_residual() + * + * + *---------------------------------------------------------------------*/ + +static int16_t arith_decode_residual( + Tastat *ac_state, /* i/o: arith coding state */ + Decoder_State *st, /* i : pointer to decoder state */ + const uint16_t *cumulativeFrequencyTable, /* i : cumulative frequency table to be used */ + const int16_t tableOffset /* i : offset used to align the table */ +) +{ + uint16_t val; + int16_t x, extra, extra_tmp; + + /* decode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ + ari_decode_14bits_s27_ext( st, &val, ac_state, cumulativeFrequencyTable ); + + /* meaning of the values of val: */ + /* esc_{0} IGF_MIN_ENC_SEPARATE ... IGF_MAX_ENC_SEPARATE esc_{IGF_SYMBOLS_IN_TABLE - 1} */ + if ( ( val != 0 ) && ( val != IGF_SYMBOLS_IN_TABLE - 1 ) ) + { + x = ( val - 1 ) + IGF_MIN_ENC_SEPARATE; + + + x -= tableOffset; + return x; + } + + /* decode one of the tails of the distribution */ + /* decode extra with 4 bits */ + extra = arith_decode_bits( ac_state, st, 4 ); + if ( extra == 15 ) + { + /* escape code 15 to indicate extra >= 15 */ + /* decode addtional extra with 6 bits */ + extra_tmp = arith_decode_bits( ac_state, st, 6 ); + if ( extra_tmp == 63 ) + { + /* escape code 63 to indicate extra_tmp >= 63 */ + /* decode safety extra with 7 bits */ + extra_tmp = 63 + arith_decode_bits( ac_state, st, 7 ); + } + extra = 15 + extra_tmp; + } + + if ( val == 0 ) + { + /* escape code 0 to indicate x <= IGF_MIN_ENC_SEPARATE - 1 */ + x = ( IGF_MIN_ENC_SEPARATE - 1 ) - extra; + } + else + { + /* escape code (IGF_SYMBOLS_IN_TABLE - 1) to indicate x >= IGF_MAX_ENC_SEPARATE + 1 */ + x = ( IGF_MAX_ENC_SEPARATE + 1 ) + extra; + } + + x -= tableOffset; + + return x; +} + + +/*---------------------------------------------------------------------* + * decode_sfe_vector() + * + * + *---------------------------------------------------------------------*/ + +static void decode_sfe_vector( + IGFSCFDEC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ + Decoder_State *st, /* i : pointer to decoder state */ + const int16_t t, /* i : frame counter reset to 0 at each independent frame */ + const int16_t *prev_x, /* i : previous vector */ + int16_t *x, /* i/o: current vector to decode */ + const int16_t length /* i : number of elements to decode */ +) +{ + /* + f + ^ + | d a x + | c b + | e --> t + */ + uint16_t pred; + int16_t f, ctx, ctx_f, ctx_t; + + for ( f = 0; f < length; f++ ) + { + if ( t == 0 ) + { + if ( f == 0 ) + { + /* decode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ + ari_decode_14bits_s27_ext( st, &pred, &hPrivateData->acState, hPrivateData->cf_se00 ); + x[f] = pred << 2; + x[f] += arith_decode_bits( &hPrivateData->acState, st, 2 ); /* LSBs as 2 bit raw */ + } + else if ( f == 1 ) + { + pred = x[f - 1]; /* pred = b */ + x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, hPrivateData->cf_se01, hPrivateData->cf_off_se01 ); + } + else + { + /* f >= 2 */ + pred = x[f - 1]; /* pred = b */ + ctx = quant_ctx( x[f - 1] - x[f - 2] ); /* Q(b - e) */ + x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, &hPrivateData->cf_se02[( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx )], hPrivateData->cf_off_se02[IGF_CTX_OFFSET + ctx] ); + } + } + else + { + /* t == 1 */ + if ( f == 0 ) + { + pred = prev_x[f]; /* pred = a */ + x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, hPrivateData->cf_se10, hPrivateData->cf_off_se10 ); + } + else + { + /* (t == 1) && (f >= 1) */ + pred = prev_x[f] + x[f - 1] - prev_x[f - 1]; /* pred = a + b - c */ + ctx_f = quant_ctx( prev_x[f] - prev_x[f - 1] ); /* Q(a - c) */ + ctx_t = quant_ctx( x[f - 1] - prev_x[f - 1] ); /* Q(b - c) */ + x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, &hPrivateData->cf_se11[( IGF_SYMBOLS_IN_TABLE + 1 ) * IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx_f )], hPrivateData->cf_off_se11[IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_CTX_OFFSET + ctx_f )] ); + } + } + if ( x[f] < 0 ) + { + x[f] = 0; + st->BER_detect = 1; + } + if ( x[f] > 91 ) + { + x[f] = 91; + st->BER_detect = 1; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * IGFSCFDecoderReset() + * + * resets the internal decoder memory (context memory) + *---------------------------------------------------------------------*/ + +void IGFSCFDecoderReset( + IGFSCFDEC_INSTANCE_HANDLE hPublicData /* i/o: handle to public data or NULL in case there was no instance created */ +) +{ + /* reset of coder */ + hPublicData->t = 0; + + /* we do not need to fill hPublicData->prev with zeros, because when t = 0 no previous information is used */ + + return; +} + + +/*---------------------------------------------------------------------* + * IGFSCFDecoderDecode() + * + * main IGF decoder function + *---------------------------------------------------------------------*/ + +void IGFSCFDecoderDecode( + IGFSCFDEC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ + Decoder_State *st, /* i/o: pointer to decoder state */ + int16_t *sfe, /* o : ptr to an array which will contain the decoded quantized coefficients */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t indepFlag /* i : if 1 on input the decoder will be forced to reset, + if 0 on input the decoder will be forced to encode without a reset */ +) +{ + /* insert data */ + hPublicData->bitsRead = st->next_bit_pos; + ari_start_decoding_14bits( st, &hPublicData->acState ); /* start AC decoding */ + + /* check if coder needs a reset and do it if neccessary */ + if ( indepFlag ) + { + /* reset of coder */ + IGFSCFDecoderReset( hPublicData ); + } + + decode_sfe_vector( hPublicData, st, hPublicData->t, hPublicData->prev, sfe, hPublicData->scfCountLongBlock[igfGridIdx] ); + + get_next_indice_tmp( st, -14 ); /* finish decoding (arith_decode_flush) return back the least significant 14 bits to the bitstream */ + + /* advance history */ + mvs2s( sfe, hPublicData->prev, hPublicData->scfCountLongBlock[igfGridIdx] ); + hPublicData->t++; + + hPublicData->bitsRead = st->next_bit_pos - hPublicData->bitsRead; + + return; +} diff --git a/lib_dec/init_dec.c b/lib_dec/init_dec.c new file mode 100644 index 0000000000..3365682878 --- /dev/null +++ b/lib_dec/init_dec.c @@ -0,0 +1,799 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*----------------------------------------------------------------------* + * init_decoder() + * + * Initialization of static variables for the decoder + *----------------------------------------------------------------------*/ + +ivas_error init_decoder( + Decoder_State *st, /* o : Decoder static variables structure */ + const int16_t idchan /* i : channel ID */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const MC_MODE mc_mode /* i : MC mode */ +#endif +) +{ + int16_t i; + ivas_error error; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * General parameters + *-----------------------------------------------------------------*/ + + st->codec_mode = MODE1; + st->last_codec_mode = MODE1; + st->core = ACELP_CORE; + st->L_frame = L_FRAME; + st->extl = -1; + st->extl_orig = -1; + st->extl_brate_orig = 0; + st->last_bits_frame_nominal = -1; + st->total_brate = ACELP_8k00; + st->last_total_brate = -1; + st->last_total_brate_ber = -1; + st->core_brate = ACELP_8k00; + st->ini_frame = 0; + st->bwidth = NB; + st->last_bwidth = NB; + st->extl_brate = 0; + + st->coder_type = GENERIC; + st->last_coder_type = GENERIC; + st->last_L_frame = st->L_frame; + st->last_core_brate = st->core_brate; + st->last_core = -1; + st->last_extl = st->extl; + + st->flag_ACELP16k = set_ACELP_flag( st->element_mode, st->total_brate, st->total_brate, idchan, 0, -1, -1 ); + + /*-----------------------------------------------------------------* + * ACELP core parameters + *-----------------------------------------------------------------*/ + + /* LSF initilalizations */ + mvr2r( GEWB_Ave, st->mem_AR, M ); + + set_f( st->mem_MA, 0, M ); + set_f( st->dispMem, 0, 8 ); + + st->tilt_code = 0.0f; + st->gc_threshold = 0.0f; + st->last_good = UNVOICED_CLAS; + st->clas_dec = UNVOICED_CLAS; + st->low_rate_mode = 0; + + st->lp_gainp = 0.0f; + st->lp_gainc = 0.0f; + + set_f( st->old_exc, 0, L_EXC_MEM_DEC ); + + /* AVQ pre-quantizer memory */ + st->mem_preemp_preQ = 0.0f; + st->last_nq_preQ = 0; + st->last_code_preq = 0; + st->use_acelp_preq = 0; + + st->mem_deemph = 0.0f; + + set_f( st->mem_syn1, 0, M ); + set_f( st->mem_syn2, 0, M ); + st->stab_fac = 0.0f; + st->stab_fac_smooth = 0.0f; + set_f( st->agc_mem2, 0, 2 ); + set_f( st->mem_syn3, 0, M ); + + mvr2r( GEWB_Ave, st->lsf_old, M ); + lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); + + st->mid_lsf_int = 0; + st->safety_net = 0; + + /* FEC */ + st->scaling_flag = 0; + st->lp_ener_FEC_av = 5.0e5f; + st->lp_ener_FEC_max = 5.0e5f; + st->prev_bfi = 0; + st->lp_ener_bfi = 60.0f; + st->old_enr_LP = 0.0f; + st->lp_ener = 0.0f; + st->enr_old = 0.0f; + st->bfi_pitch = (float) L_SUBFR; + st->bfi_pitch_frame = L_FRAME; + set_f( st->mem_syn_clas_estim, 0.0f, L_SYN_MEM_CLAS_ESTIM ); + st->last_con_tcx = 0; + + for ( i = 0; i < 2 * NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i] = (float) L_SUBFR; + } + + st->upd_cnt = MAX_UPD_CNT; + + mvr2r( GEWB_Ave, st->lsfoldbfi0, M ); + mvr2r( GEWB_Ave, st->lsfoldbfi1, M ); + mvr2r( GEWB_Ave, st->lsf_adaptive_mean, M ); + + st->seed_acelp = RANDOM_INITSEED; + st->seed = RANDOM_INITSEED; + st->nbLostCmpt = 0; + st->decision_hyst = 0; + + /* Stationary noise UV modification */ + st->unv_cnt = 0; + st->ge_sm = 10; + st->uv_count = 0; + st->act_count = 3; + mvr2r( st->lsp_old, st->lspold_s, M ); + st->noimix_seed = RANDOM_INITSEED; + st->min_alpha = 1; + st->exc_pe = 0; + + st->prev_coder_type = GENERIC; + st->tilt_wb = 0.0f; + + st->last_voice_factor = 0.0f; + set_f( st->prev_synth_buffer, 0, NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); + + st->old_bfi_cnt = 0; + + + /*-----------------------------------------------------------------* + * parameters for AC mode (GSC) + *-----------------------------------------------------------------*/ + + st->GSC_noisy_speech = 0; + st->GSC_IVAS_mode = 0; + st->Last_GSC_noisy_speech_flag = 0; + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + if ( ( st->hGSCDec = (GSC_DEC_HANDLE) count_malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); + } + + GSC_dec_init( st->hGSCDec ); + } + else + { + st->hGSCDec = NULL; + } + + /*-----------------------------------------------------------------* + * parameters for fast recovery (WI) + *-----------------------------------------------------------------*/ + + if ( st->output_Fs == 16000 && st->element_mode == EVS_MONO ) + { + if ( ( st->hWIDec = (WI_DEC_HANDLE) count_malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) ); + } + + set_f( st->hWIDec->old_exc2, 0, L_EXC_MEM ); + set_f( st->hWIDec->old_syn2, 0, L_EXC_MEM ); + } + else + { + st->hWIDec = NULL; + } + + /*-----------------------------------------------------------------* + * NB/formant post-filter + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + if ( ( st->hPFstat = (PFSTAT_HANDLE) count_malloc( sizeof( PFSTAT ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); + } + + Init_post_filter( st->hPFstat ); + st->psf_lp_noise = 0.0f; + } + else + { + st->hPFstat = NULL; + } + + + /*-----------------------------------------------------------------* + * HF (6-7kHz) (zero) BWE parameters + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) count_malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) ); + } + + hf_synth_init( st->hBWE_zero ); + } + else + { + st->hBWE_zero = NULL; + } + + + /*-----------------------------------------------------------------* + * LD music post-filter + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) count_malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); + } + + music_postfilt_init( st->hMusicPF ); + } + else + { + st->hMusicPF = NULL; + } + + /*-----------------------------------------------------------------* + * CNG and DTX + *-----------------------------------------------------------------*/ + + st->first_CNG = 0; + st->cng_type = -1; + st->last_vad = 0; + st->last_active_brate = ACELP_7k20; + st->last_CNG_L_frame = L_FRAME; + + st->active_cnt = 20; + + if ( idchan == 0 && ( st->element_mode == EVS_MONO || st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) ) + { + if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); + } + + td_cng_dec_init( st ); + } + else + { + st->hTdCngDec = NULL; + } + + st->masa_sid_format = 0; + + /*-----------------------------------------------------------------* + * HQ core parameters + *-----------------------------------------------------------------*/ + + st->prev_old_bfi = 0; + set_f( st->delay_buf_out, 0, HQ_DELTA_MAX * HQ_DELAY_COMP ); + set_f( st->previoussynth, 0, L_FRAME48k ); + + if ( st->element_mode == EVS_MONO ) + { + set_f( st->old_synth_sw, 0.0f, NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) ); + } + + if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT || st->element_mode == IVAS_SCE || st->element_mode == EVS_MONO ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( st->hHQ_core = (HQ_DEC_HANDLE) count_malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); + } + + /* HQ core initialization */ + HQ_core_dec_init( st->hHQ_core ); + + if ( st->element_mode == EVS_MONO ) + { + /* HQ NB FEC initialization */ + if ( ( st->hHQ_nbfec = (HQ_NBFEC_HANDLE) count_malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) ); + } + HQ_nbfec_init( st->hHQ_nbfec ); + } + else + { + st->hHQ_nbfec = NULL; + } + } + else + { + st->hHQ_core = NULL; + st->hHQ_nbfec = NULL; + } + + + /*-----------------------------------------------------------------* + * TBE parameters + *-----------------------------------------------------------------*/ + + if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) + { + if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) count_malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); + } + + td_bwe_dec_init( st->hBWE_TD, st->extl, st->output_Fs ); + } + else + { + st->hBWE_TD = NULL; + } + + st->old_bwe_delay = -1; + set_f( st->hb_prev_synth_buffer, 0, NS2SA( 48000, DELAY_BWE_TOTAL_NS ) ); + + /*-----------------------------------------------------------------* + * SWB BWE parameters + *-----------------------------------------------------------------*/ + + if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) + { + if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) count_malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); + } + + fd_bwe_dec_init( st->hBWE_FD ); + } + else + { + st->hBWE_FD = NULL; + } + + /*-----------------------------------------------------------------* + * WB/SWB bandwidth switching parameters + *-----------------------------------------------------------------*/ + + st->tilt_swb = 0.0f; + st->prev_ener_shb = 0.0f; + st->prev_enerLH = 0.0f; + st->enerLH = 0.0f; + st->enerLL = 0.0f; + st->prev_enerLL = 0.0f; + st->prev_fractive = 0; + st->prev_bws_cnt = 0; + st->bws_cnt = N_WS2N_FRAMES; + st->bws_cnt1 = N_NS2W_FRAMES; + st->attenu1 = 0.1f; + st->last_inner_frame = L_FRAME8k; + + /*-----------------------------------------------------------------* + * HR SWB BWE parameters + *-----------------------------------------------------------------*/ + + if ( st->element_mode == EVS_MONO ) + { + if ( ( st->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) count_malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) ); + } + + hr_bwe_dec_init( st->hBWE_FD_HR ); + } + else + { + st->hBWE_FD_HR = NULL; + } + + /*----------------------------------------------------------------------------------* + * AMR-WB IO mode parameters + *----------------------------------------------------------------------------------*/ + + if ( st->Opt_AMR_WB || st->element_mode == EVS_MONO ) + { + if ( ( st->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) count_malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); + } + + /* AMR-WB IO init */ + amr_wb_dec_init( st->hAmrwb_IO ); + + /* AMR-WB IO HF synth init */ + hf_synth_amr_wb_init( st->hAmrwb_IO ); + } + else + { + st->hAmrwb_IO = NULL; + } + + /*-----------------------------------------------------------------* + * channel-aware mode parameters + *-----------------------------------------------------------------*/ + + set_f( st->tilt_code_dec, 0.0f, NB_SUBFR16k ); + + st->use_partial_copy = 0; + st->prev_use_partial_copy = 0; + st->rf_flag = 0; + st->rf_flag_last = 0; + st->prev_rf_frame_type = 0; + st->next_coder_type = 0; + + st->rf_target_bits = 0; + + st->rf_indx_nelp_fid = 0; + st->rf_indx_nelp_iG1 = 0; + st->rf_indx_nelp_iG2[0] = 0; + st->rf_indx_nelp_iG2[1] = 0; + st->rf_indx_tbeGainFr = 0; + + /*-----------------------------------------------------------------* + * Bass post-filter parameters + *-----------------------------------------------------------------*/ + + st->bpf_off = 0; + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + if ( ( st->hBPF = (BPF_DEC_HANDLE) count_malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) ); + } + + bass_psfilter_init( st->hBPF ); + } + else + { + st->hBPF = NULL; + } + + /*-----------------------------------------------------------------* + * FD BPF & resampling tools parameters + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + /* open analysis for max. sampling rate 48kHz */ + if ( ( error = openCldfb( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* open analysis BPF for max. internal sampling rate 16kHz */ + if ( ( error = openCldfb( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + st->cldfbAna = NULL; + st->cldfbBPF = NULL; + } + + /* open synthesis for output sampling rate */ + if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( error = openCldfb( &st->cldfbSyn, CLDFB_SYNTHESIS, st->output_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + st->cldfbSyn = NULL; + } + + st->cldfbSynHB = NULL; + + st->last_active_bandsToZero_bwdec = 0; + st->perc_bwddec = 0.0f; + st->last_flag_filter_NB = 0; + st->active_frame_cnt_bwddec = 0; + st->total_frame_cnt_bwddec = 0; + set_s( st->flag_buffer, 0, 20 ); + st->avg_nrg_LT = 0.0f; + + /*-----------------------------------------------------------------* + * Noise gate parameters + *-----------------------------------------------------------------*/ + + st->ng_ener_ST = -51.0f; + + st->old_Es_pred = 0; + set_f( st->old_Aq_12_8 + 1, 0, M ); + st->old_Aq_12_8[0] = 1; + + /*-----------------------------------------------------------------* + * SC-VBR parameters + *-----------------------------------------------------------------*/ + + if ( st->element_mode == EVS_MONO ) + { + if ( ( st->hSC_VBR = (SC_VBR_DEC_HANDLE) count_malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); + } + + sc_vbr_dec_init( st->hSC_VBR ); + } + else + { + st->hSC_VBR = NULL; + } + + st->last_ppp_mode_dec = 0; + st->old_ppp_mode = 0; + st->ppp_mode_dec = 0; + st->last_nelp_mode_dec = 0; + st->nelp_mode_dec = 0; + st->prev_gain_pit_dec = 0.0f; + st->prev_tilt_code_dec = 0.0f; + st->vbr_hw_BWE_disable_dec = 0; + st->last_vbr_hw_BWE_disable_dec = 0; + + + /*-----------------------------------------------------------------* + * TCX core + *-----------------------------------------------------------------*/ + + /* TCX-LTP */ + if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); + } + } + else + { + st->hTcxLtpDec = NULL; + } + + /* TCX core */ + // VE: reduction possible for MCT_CHAN_MODE_LFE channel - see I1-172 + if ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) + { + if ( ( st->hTcxDec = (TCX_DEC_HANDLE) count_malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) ); + } + + set_f( st->hTcxDec->FBTCXdelayBuf, 0.0f, 111 ); + + st->hTcxDec->old_synthFB = st->hTcxDec->synth_history + NS2SA( st->output_Fs, PH_ECU_MEM_NS ); + st->hTcxDec->prev_good_synth = st->hTcxDec->old_synthFB + NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ); + } + else + { + st->hTcxDec = NULL; + } + + /* TCX config. data structure */ + if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); + } + } + else + { + st->hTcxCfg = NULL; + } + + /* Tonal MDCT concealment data structure */ + if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) count_malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) ); + } + } + else + { + st->hTonalMDCTConc = NULL; + } + + /*-----------------------------------------------------------------* + * IGF + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) count_malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) ); + } + + st->igf = 0; + init_igf_dec( st->hIGFDec ); + } + else + { + st->hIGFDec = NULL; + } + + /*-----------------------------------------------------------------* + * Mode 2 initialization + *-----------------------------------------------------------------*/ + + if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) + { + if ( ( st->hPlcInfo = (T_PLCInfo_HANDLE) count_malloc( sizeof( T_PLCInfo ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) ); + } + } + else + { + st->hPlcInfo = NULL; + } + + if ( st->element_mode == EVS_MONO ) + { + if ( ( st->hTECDec = (TEC_DEC_HANDLE) count_malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) ); + } + } + else + { + st->hTECDec = NULL; + } + + st->enablePlcWaveadjust = 0; + + /* Init Core Decoder */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + open_decoder_LPD( st, st->total_brate, st->last_total_brate, st->bwidth, 0, st->element_mode, 1 ); +#else + open_decoder_LPD( st, st->total_brate, st->last_total_brate, st->bwidth, 0, 1 ); +#endif + + /* PLC mode initialization */ + st->m_decodeMode = DEC_NO_FRAM_LOSS; + + /* Init bandwidth / frame_type */ + st->m_frame_type = ACTIVE_FRAME; + st->m_old_frame_type = ACTIVE_FRAME; + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) ) + { + resampleCldfb( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); + resampleCldfb( st->cldfbBPF, st->L_frame * FRAMES_PER_SEC ); + } + + /*-----------------------------------------------------------------* + * FD-CNG decoder + *-----------------------------------------------------------------*/ + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( ( st->element_mode == IVAS_CPE_MDCT || idchan == 0 ) && mc_mode != MC_MODE_MCT ) +#else + if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) +#endif + { + /* Create FD_CNG instance */ + if ( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Init FD-CNG */ + initFdCngDec( st ); + } + else + { + st->hFdCngDec = NULL; + } + + st->cngTDLevel = 0.f; + + st->lp_noise = -20.0f; + + st->force_lpd_reset = 0; + + /*-----------------------------------------------------------------* + * IVAS parameters + *-----------------------------------------------------------------*/ + + st->tdm_LRTD_flag = 0; + st->cna_dirac_flag = 0; + st->cng_dirac_flag = 0; + st->cng_spar_flag = 0; + + + return error; +} + + +/*----------------------------------------------------------------------* + * reset_preecho_dec() + * + * Initialization of static variables for pre-echo + *----------------------------------------------------------------------*/ + +void reset_preecho_dec( + HQ_DEC_HANDLE hHQ_core /* i/o: HQ decoder handle */ +) +{ + hHQ_core->memfilt_lb = 0; + hHQ_core->mean_prev_hb = 0; + hHQ_core->smoothmem = 1; + hHQ_core->mean_prev = 0; + hHQ_core->mean_prev_nc = 0; + hHQ_core->wmold_hb = 1; + hHQ_core->prevflag = 0; + hHQ_core->pastpre = 0; + + return; +} + + +/*----------------------------------------------------------------------* + * destroy_decoder() + * + * Free memory which was allocated in init_decoder() + *----------------------------------------------------------------------*/ + +void destroy_decoder( + Decoder_State *st /* o : Decoder static variables structure */ +) +{ + /* CLDFB BPF & resampling tools */ + deleteCldfb( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */ + deleteCldfb( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */ + deleteCldfb( &st->cldfbSyn ); /* delete synthesis at output sampling rate */ + deleteCldfb( &st->cldfbSynHB ); + + deleteFdCngDec( &st->hFdCngDec ); + + return; +} diff --git a/lib_dec/inov_dec.c b/lib_dec/inov_dec.c new file mode 100644 index 0000000000..ce3c2728bc --- /dev/null +++ b/lib_dec/inov_dec.c @@ -0,0 +1,195 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*----------------------------------------------------------------------* + * inov_decode() + * + * Decode the algebraic innovation and do pitch sharpening + *----------------------------------------------------------------------*/ + +void inov_decode( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const int16_t i_subfr, /* i : subframe index */ + const float *p_Aq, /* i : LP filter coefficients */ + const float tilt_code, /* i : tilt of the excitation of previous subframe */ + const float pt_pitch, /* i : pointer to current subframe fractional pitch*/ + float *code, /* o : algebraic excitation */ + const int16_t L_subfr /* i : subframe length */ +) +{ + int16_t nBits; + float g1, g2; + + if ( L_frame == L_FRAME ) + { + g1 = FORMANT_SHARPENING_G1; + g2 = FORMANT_SHARPENING_G2; + } + else + { + g1 = FORMANT_SHARPENING_G1_16k; + g2 = FORMANT_SHARPENING_G2_16k; + } + + if ( !Opt_AMR_WB ) + { + if ( st->acelp_cfg.fcb_mode ) + { + int16_t i; + int16_t indexing_indices[8], wordcnt, bitcnt; + PulseConfig config; + + if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr] >= 0 ) + { + if ( L_subfr == 2 * L_SUBFR ) + { + nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr]; + + if ( nBits == 8 ) + { + dec_acelp_1t64( st, code, L_subfr ); + } + else + { + dec_acelp_fast( st, nBits, code, L_subfr ); + } + } + else if ( ( st->idchan == 1 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 7 ) || ( st->idchan == 0 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 3 ) ) + { + if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] == 0 ) + { + dec_acelp_1t64( st, code, L_SUBFR ); + } + else + { + dec_acelp_fast( st, st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], code, L_SUBFR ); + } + } + else + { + wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) >> 4; + bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) & 15; + + for ( i = 0; i < wordcnt; i++ ) + { + indexing_indices[i] = get_next_indice( st, 16 ); + } + if ( bitcnt ) + { + indexing_indices[i] = get_next_indice( st, bitcnt ); + } + config = PulseConfTable[st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]]; + D_ACELP_indexing( code, config, NB_TRACK_FCB_4T, indexing_indices, &st->BER_detect ); + } + } + else + { + set_f( code, 0.0f, L_SUBFR ); + } + } + else + { + nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; + + if ( nBits == 7 ) + { + dec_acelp_1t64( st, code, L_SUBFR ); + } + else if ( nBits == 12 ) + { + dec_acelp_2t32( st, code ); + } + else + { + dec_acelp_4t64( st, nBits, code, Opt_AMR_WB ); + } + } + } + else + { + if ( core_brate == ACELP_6k60 ) + { + dec_acelp_2t32( st, code ); + } + else if ( core_brate == ACELP_8k85 ) + { + dec_acelp_4t64( st, 20, code, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_12k65 ) + { + dec_acelp_4t64( st, 36, code, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_14k25 ) + { + dec_acelp_4t64( st, 44, code, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_15k85 ) + { + dec_acelp_4t64( st, 52, code, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_18k25 ) + { + dec_acelp_4t64( st, 64, code, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_19k85 ) + { + dec_acelp_4t64( st, 72, code, Opt_AMR_WB ); + } + else + { + dec_acelp_4t64( st, 88, code, Opt_AMR_WB ); + } + } + + cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, code, tilt_code, pt_pitch, L_subfr ); + + return; +} diff --git a/lib_dec/ivas_agc_dec.c b/lib_dec/ivas_agc_dec.c new file mode 100644 index 0000000000..97ce3d49d1 --- /dev/null +++ b/lib_dec/ivas_agc_dec.c @@ -0,0 +1,330 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +#ifdef DEBUG_AGC +extern FILE *agcIn; +#endif + +/*-----------------------------------------------------------------------------------------* + * Function ivas_agc_dec_init() + * + * AGC decoder initialization call + * + *-----------------------------------------------------------------------------------------*/ + +static void ivas_agc_dec_init( + ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ + const int16_t output_frame, + const int16_t delay ) +{ + int16_t i; + ivas_agc_dec_chan_state_t *ptrG = hAgcDec->gain_state; + ivas_agc_chan_data_t *ptr = hAgcDec->gain_data; + + hAgcDec->agc_com.in_delay = delay; + hAgcDec->agc_com.num_coeff = IVAS_SPAR_MAX_DMX_CHS; + ivas_agc_calcGainParams( &hAgcDec->agc_com.absEmin, &hAgcDec->agc_com.betaE, &hAgcDec->agc_com.maxAttExp, hAgcDec->agc_com.num_coeff ); + + ivas_agc_initWindowFunc( hAgcDec->agc_com.winFunc, output_frame - hAgcDec->agc_com.in_delay ); + + for ( i = 0; i < IVAS_SPAR_MAX_DMX_CHS; i++ ) + { + /* gain_state */ + ptrG->lastGain = 1.f; + ptrG->gainExpVal = 0; + ptrG++; + + /* gain_data */ + ptr->absGainExp = hAgcDec->agc_com.absEmin; + ptr->absGainExpCurr = hAgcDec->agc_com.absEmin; + ptr->gainException = false; + ptr++; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_agc_dec_open() + * + * Allocate and initialize SPAR AGC decoder handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_agc_dec_open( + ivas_agc_dec_state_t **hAgcDec, /* i/o: SPAR AGC decoder handle */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + ivas_agc_dec_state_t *hAgc; + int16_t output_frame; + + if ( ( hAgc = (ivas_agc_dec_state_t *) count_malloc( sizeof( ivas_agc_dec_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); + } + + output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + + if ( ( hAgc->agc_com.winFunc = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); + } + + if ( ( hAgc->gain_state = (ivas_agc_dec_chan_state_t *) count_malloc( sizeof( ivas_agc_dec_chan_state_t ) * FOA_CHANNELS ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); + } + + if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) count_malloc( sizeof( ivas_agc_chan_data_t ) * FOA_CHANNELS ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); + } + + ivas_agc_dec_init( hAgc, output_frame, NS2SA( output_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ) ); + + *hAgcDec = hAgc; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_agc_dec_close() + * + * Deallocate SPAR AGC decoder handle + *------------------------------------------------------------------------*/ + +void ivas_spar_agc_dec_close( + ivas_agc_dec_state_t **hAgcDec /* i/o: SPAR AGC decoder handle */ +) +{ + ivas_agc_dec_state_t *hAgc; + + hAgc = *hAgcDec; + + if ( hAgc != NULL ) + { + count_free( hAgc->agc_com.winFunc ); + hAgc->agc_com.winFunc = NULL; + + count_free( hAgc->gain_state ); + hAgc->gain_state = NULL; + + count_free( hAgc->gain_data ); + hAgc->gain_data = NULL; + + count_free( hAgc ); + *hAgcDec = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_agc_dec_process() + * + * AGC decoder + *-----------------------------------------------------------------------------------------*/ + +void ivas_agc_dec_process( + ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ + float pcm_in[][L_FRAME48k], /* i : input audio channels */ + float pcm_out[][L_FRAME48k], /* o : output audio channels */ + const int16_t n_channels, /* i : number of channels */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t i, idx; + uint16_t offset; + float gainLast, gain; + ivas_agc_dec_state_t *pState = hAgcDec; + + offset = output_frame - pState->agc_com.in_delay; + + for ( i = 0; i < n_channels; i++ ) + { + pState->gain_state[i].gainExpVal = pState->gain_data[i].absGainExp - pState->gain_data[i].absGainExpCurr; + + if ( ( pState->gain_state[i].gainExpVal > (int32_t) ( pState->agc_com.maxAttExp + 1 ) ) || ( pState->gain_state[i].gainExpVal < -1 ) ) + { + assert( 0 ); + } + + pState->gain_state[i].lastGain = powf( 2, (float) ( pState->gain_data[i].absGainExp - pState->agc_com.absEmin ) ); + gainLast = 1.f / pState->gain_state[i].lastGain; + + if ( !pState->gain_data[i].gainException ) + { + if ( pState->gain_state[i].gainExpVal != 0 ) + { + for ( idx = 0; idx < output_frame; idx++ ) + { + if ( idx >= pState->agc_com.in_delay ) + { + gain = powf( pState->agc_com.winFunc[idx - pState->agc_com.in_delay], (float) ( -1 * pState->gain_state[i].gainExpVal ) ) * gainLast; + } + else + { + gain = gainLast; + } + + pcm_out[i][idx] = pcm_in[i][idx] * gain; + } + + pState->gain_state[i].lastGain *= powf( pState->agc_com.winFunc[offset - 1], (float) pState->gain_state[i].gainExpVal ); + } + else + { + gain = gainLast; + for ( idx = 0; idx < output_frame; idx++ ) + { + pcm_out[i][idx] = pcm_in[i][idx] * gain; + } + } + } + else + { + float gainCurr = powf( 2, (float) pState->gain_state[i].gainExpVal ); + float gainTot = gainCurr * gainLast; + + for ( idx = 0; idx < output_frame; idx++ ) + { + if ( idx >= pState->agc_com.in_delay ) + { + gain = gainTot; + } + else + { + gain = gainLast; + } + pcm_out[i][idx] = pcm_in[i][idx] * gain; + } + pState->gain_state[i].lastGain /= gainCurr; + } + pState->gain_data[i].absGainExp = pState->gain_data[i].absGainExpCurr; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * ivas_agc_read_bits() + * + * decode AGC parameters + *-----------------------------------------------------------------------------------------*/ + +void ivas_agc_read_bits( + ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling */ + const int16_t n_channels, /* i : number of channels */ + const int16_t AGC_flag /* i : AGC on/off flag */ +) +{ + int16_t i; + int16_t per_ch_bit[FOA_CHANNELS]; + ivas_agc_dec_state_t *pState = hAgcDec; + + set_s( per_ch_bit, 0, FOA_CHANNELS ); + + /* read AGC parameters */ + if ( AGC_flag == 1 ) + { + if ( n_channels > 1 ) + { + for ( i = 0; i < n_channels; i++ ) + { + per_ch_bit[i] = get_next_indice( st0, 1 ); + } + } + else + { + per_ch_bit[0] = 1; + } + + assert( AGC_BITS_PER_CH == ( pState->agc_com.betaE + 1 ) ); + for ( i = 0; i < n_channels; i++ ) + { + if ( per_ch_bit[i] == 1 ) + { + pState->gain_data[i].absGainExpCurr = get_next_indice( st0, (int16_t) pState->agc_com.betaE ); + pState->gain_data[i].gainException = get_next_indice( st0, 1 ); + } + else + { + pState->gain_data[i].absGainExpCurr = (int32_t) pState->agc_com.absEmin; + pState->gain_data[i].gainException = false; + } + } + } + else + { + for ( i = 0; i < n_channels; i++ ) + { + pState->gain_data[i].absGainExpCurr = (int32_t) pState->agc_com.absEmin; + pState->gain_data[i].gainException = false; + } + } + +#ifdef DEBUG_AGC + FILE *stream = agcIn; + int16_t num_bits = 0, num_dmx_bits[4] = { 0 }; + for ( i = 0; i < n_channels; i++ ) + { + fread( &( pState->gain_data[i].absGainExpCurr ), sizeof( int32_t ), 1, stream ); /* n bits */ + num_bits += pState->agc_com.betaE; + fread( &( pState->gain_data[i].gainException ), sizeof( int16_t ), 1, stream ); /* 1 bit */ + num_bits++; + num_dmx_bits[i]++; + + /*fprintf(stdout, "AbsGain[%d]:= %d[%d bits]; ", i, pState->gain_data[i].absGainExp, pState->betaE);*/ + } + /*fprintf(stdout, "AGC bits:= %d ", num_bits);*/ + +#endif + + return; +} diff --git a/lib_dec/ivas_allrad_dec.c b/lib_dec/ivas_allrad_dec.c new file mode 100644 index 0000000000..72a1983d3e --- /dev/null +++ b/lib_dec/ivas_allrad_dec.c @@ -0,0 +1,207 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +#ifdef DEBUG_MODE_INFO_ALLRAD +/*-------------------------------------------------------------------------* + * debugMatrix_ivas() + * + * Write a column-major (IVAS-style) flattened matrix to + * a 2D array in a CSV file + *-------------------------------------------------------------------------*/ +static void debugMatrix_ivas( float *mtx, int16_t rows, int16_t cols, char *filename ) +{ + FILE *fid; + int16_t i, j; + + fid = fopen( filename, "w" ); + + if ( fid == NULL ) + { + IVAS_ERROR( IVAS_ERR_FAILED_FILE_WRITE, "Error writing file %s\n", filename ); + return; + } + + for ( i = 0; i < rows; i++ ) + { + for ( j = 0; j < cols - 1; j++ ) + { + fprintf( fid, "%.16f, ", mtx[i * cols + j] ); + } + fprintf( fid, "%.16f\n", mtx[i * cols + j] ); + } + fclose( fid ); +} +#endif + +/*-----------------------------------------------------------------------* + * Global function definitions + *-----------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------------* + * ivas_sba_get_hoa_dec_matrix() + * + * Computes the ALLRAD decoder matrix for HOA to loudspeakers + *-------------------------------------------------------------------------*/ + +ivas_error ivas_sba_get_hoa_dec_matrix( + const IVAS_OUTPUT_SETUP hOutSetup, /* i : target output setup */ + float **hoa_dec_mtx, /* o : ALLRAD decoder matrix */ + const int16_t ambisonics_order /* i : Ambisonics order */ +) +{ + int16_t i, j, k; + int16_t num_harm, num_td, num_spk; + const float *t_design_azi, *t_design_ele; + float tmp_val; + float G_td[MAX_OUTPUT_CHANNELS]; + float Y_td[SBA_NHARM_HOA3]; + float *p_dec_mtx; + EFAP_HANDLE hEFAP; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Allocate memory */ + assert( *hoa_dec_mtx == NULL && "hoa_dec_mtx != NULL" ); + if ( ( *hoa_dec_mtx = (float *) count_malloc( SBA_NHARM_HOA3 * MAX_OUTPUT_CHANNELS * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "ALLRAD: Cannot allocate memory!" ) ); + } + + /* Initialization by zeroing all SH coeff up to 3rd order (IVAS convention) */ + num_spk = hOutSetup.nchan_out_woLFE; + p_dec_mtx = *hoa_dec_mtx; + + for ( i = 0; i < num_spk; i++ ) + { + for ( j = 0; j < SBA_NHARM_HOA3; j++ ) + { + *( p_dec_mtx++ ) = 0.f; + } + } + + if ( hOutSetup.output_config == AUDIO_CONFIG_MONO ) + { + ( *hoa_dec_mtx )[0] = 1.f; + } + else if ( hOutSetup.output_config == AUDIO_CONFIG_STEREO ) + { + ( *hoa_dec_mtx )[0] = 0.5f; + ( *hoa_dec_mtx )[1] = 0.5f; + ( *hoa_dec_mtx )[SBA_NHARM_HOA3] = 0.5f; + ( *hoa_dec_mtx )[SBA_NHARM_HOA3 + 1] = -0.5f; + } + else if ( hOutSetup.is_loudspeaker_setup ) + { + /* init EFIP */ + if ( ( error = efap_init_data( &( hEFAP ), hOutSetup.ls_azimuth, hOutSetup.ls_elevation, num_spk, EFAP_MODE_EFIP ) ) != IVAS_ERR_OK ) + { + return error; + } + + + num_harm = ( ambisonics_order + 1 ) * ( ambisonics_order + 1 ); + + /* Get t-design values */ + num_td = t_design_11_size; + t_design_azi = t_design_11_azimuth; + t_design_ele = t_design_11_elevation; + + /* dec_mtx = ( 1 / num_td ) * (G_td * Y_td') * diag(norm_sn3d) */ + for ( i = 0; i < num_td; i++ ) + { + /* spherical harmonics response for t-design, corresponding to ambisonic order */ + ivas_dirac_dec_get_response( (int16_t) t_design_azi[i], (int16_t) t_design_ele[i], Y_td, ambisonics_order ); + for ( j = 0; j < num_harm; j++ ) + { + Y_td[j] *= norm_sn3d_hoa3[j]; + } + + /* t-design to real LS panning gains */ + efap_determine_gains( hEFAP, G_td, t_design_azi[i], t_design_ele[i], EFAP_MODE_EFIP ); + + p_dec_mtx = *hoa_dec_mtx; + for ( j = 0; j < num_spk; j++ ) + { + for ( k = 0; k < num_harm; k++ ) + { + *( p_dec_mtx++ ) += G_td[j] * Y_td[k]; + } + p_dec_mtx += ( SBA_NHARM_HOA3 - num_harm ); + } + } + + tmp_val = 1.f / num_td; + p_dec_mtx = *hoa_dec_mtx; + for ( i = 0; i < num_spk; i++ ) + { + for ( j = 0; j < num_harm; j++ ) + { + *( p_dec_mtx++ ) *= tmp_val * norm_sn3d_hoa3[j]; + } + p_dec_mtx += ( SBA_NHARM_HOA3 - num_harm ); + } + + /* free EFAP handle */ + efap_free_data( &hEFAP ); + } + else + { + assert( 0 && "ALLRAD: output not supported!!!" ); + } + +#ifdef DEBUG_MODE_INFO_ALLRAD + { + char filename[50]; + sprintf( filename, "./res/mtx_hoa%d_decoder_allradC.csv", ambisonics_order ); + debugMatrix_ivas( *hoa_dec_mtx, num_spk, SBA_NHARM_HOA3, filename ); + } +#endif + + return error; +} diff --git a/lib_dec/ivas_binauralRenderer.c b/lib_dec/ivas_binauralRenderer.c new file mode 100644 index 0000000000..153e159adc --- /dev/null +++ b/lib_dec/ivas_binauralRenderer.c @@ -0,0 +1,811 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_com.h" +#include "ivas_rom_binauralRenderer.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * ivas_binRenderer_filterModule() + * + * + *-------------------------------------------------------------------------*/ + +static void ivas_binRenderer_filterModule( + float out_Conv_CLDFB_real[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : real part of Binaural signals */ + float out_Conv_CLDFB_imag[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : imag part of Binaural signals */ + float CLDFB_real[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : real part of LS signals */ + float CLDFB_imag[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : imag part of LS signals */ + BINAURAL_RENDERER_HANDLE hBinRenderer /* i/o: fastconv binaural renderer handle */ +) +{ + int16_t bandIdx, k, chIdx, tapIdx; + float *filterStatesLeftRealPtr, *filterStatesLeftImagPtr; + const float *filterTapsLeftRealPtr, *filterTapsLeftImagPtr, *filterTapsRightRealPtr, *filterTapsRightImagPtr; + + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + filterStatesLeftRealPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx][0] ); + filterStatesLeftImagPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx][0] ); + + filterTapsLeftRealPtr = hBinRenderer->hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx]; + filterTapsLeftImagPtr = hBinRenderer->hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx]; + filterTapsRightRealPtr = hBinRenderer->hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx]; + filterTapsRightImagPtr = hBinRenderer->hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx]; + + for ( k = 0; k < MAX_PARAM_SPATIAL_SUBFRAMES; k++ ) + { + float outRealLeft = 0.0f, outRealRight = 0.0f, outImagLeft = 0.0f, outImagRight = 0.0f; + + for ( tapIdx = hBinRenderer->hBinRenConvModule->numTapsArray[bandIdx] - 1; tapIdx > 0; tapIdx-- ) + { + filterStatesLeftRealPtr[tapIdx] = filterStatesLeftRealPtr[tapIdx - 1]; + filterStatesLeftImagPtr[tapIdx] = filterStatesLeftImagPtr[tapIdx - 1]; + + /* Left Real and Imag */ + outRealLeft += ( filterStatesLeftRealPtr[tapIdx] * filterTapsLeftRealPtr[tapIdx] ) - ( filterStatesLeftImagPtr[tapIdx] * filterTapsLeftImagPtr[tapIdx] ); + outImagLeft += ( filterStatesLeftRealPtr[tapIdx] * filterTapsLeftImagPtr[tapIdx] ) + ( filterStatesLeftImagPtr[tapIdx] * filterTapsLeftRealPtr[tapIdx] ); + + /* Right Real and Imag*/ + outRealRight += ( filterStatesLeftRealPtr[tapIdx] * filterTapsRightRealPtr[tapIdx] ) - ( filterStatesLeftImagPtr[tapIdx] * filterTapsRightImagPtr[tapIdx] ); + outImagRight += ( filterStatesLeftRealPtr[tapIdx] * filterTapsRightImagPtr[tapIdx] ) + ( filterStatesLeftImagPtr[tapIdx] * filterTapsRightRealPtr[tapIdx] ); + } + + filterStatesLeftRealPtr[0] = CLDFB_real[chIdx][k][bandIdx]; + filterStatesLeftImagPtr[0] = CLDFB_imag[chIdx][k][bandIdx]; + + + /* Left Real and Imag */ + out_Conv_CLDFB_real[0][k][bandIdx] += outRealLeft + ( filterStatesLeftRealPtr[0] * filterTapsLeftRealPtr[0] ) - ( filterStatesLeftImagPtr[0] * filterTapsLeftImagPtr[0] ); + out_Conv_CLDFB_imag[0][k][bandIdx] += outImagLeft + ( filterStatesLeftRealPtr[0] * filterTapsLeftImagPtr[0] ) + ( filterStatesLeftImagPtr[0] * filterTapsLeftRealPtr[0] ); + + /* Right Real and Imag */ + out_Conv_CLDFB_real[1][k][bandIdx] += outRealRight + ( filterStatesLeftRealPtr[0] * filterTapsRightRealPtr[0] ) - ( filterStatesLeftImagPtr[0] * filterTapsRightImagPtr[0] ); + out_Conv_CLDFB_imag[1][k][bandIdx] += outImagRight + ( filterStatesLeftRealPtr[0] * filterTapsRightImagPtr[0] ) + ( filterStatesLeftImagPtr[0] * filterTapsRightRealPtr[0] ); + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_binRenderer_convModuleOpen() + * + * Open convolution module handle of fastconv binaural renderer + *-------------------------------------------------------------------------*/ + +static ivas_error ivas_binRenderer_convModuleOpen( + BINAURAL_RENDERER_HANDLE hBinRenderer, + const int16_t renderer_type, + const int16_t isLoudspeaker, + const AUDIO_CONFIG input_config, + const RENDER_CONFIG_DATA *hRenderConfig ) +{ + int16_t bandIdx, chIdx; + BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; + + /*-----------------------------------------------------------------* + * prepare library opening + *-----------------------------------------------------------------*/ + + if ( ( hBinRenConvModule = (BINRENDERER_CONV_MODULE_HANDLE) count_malloc( sizeof( BINRENDERER_CONV_MODULE ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + + if ( !isLoudspeaker ) + { + hBinRenderer->nInChannels = 16; + } + else + { + hBinRenderer->nInChannels = ( audioCfg2channels( input_config ) - isLoudspeaker ); // TODO maybe an audioCfg2channels_woLFE() function? Works as long as only 1 LFE is present + } + + if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && hRenderConfig->roomAcoustics.use_brir ) + { + hBinRenConvModule->numTaps = BINAURAL_NTAPS_MAX; + + /* Use variable order filtering */ + bandIdx = 0; + for ( ; bandIdx < 5; bandIdx++ ) + { + hBinRenConvModule->numTapsArray[bandIdx] = hBinRenConvModule->numTaps; + } + for ( ; bandIdx < 10; bandIdx++ ) + { + hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.6f * hBinRenConvModule->numTaps ); + } + for ( ; bandIdx < 20; bandIdx++ ) + { + hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.5f * hBinRenConvModule->numTaps ); + } + for ( ; bandIdx < 30; bandIdx++ ) + { + hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.4f * hBinRenConvModule->numTaps ); + } + for ( ; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.3f * hBinRenConvModule->numTaps ); + } + } + else + { + hBinRenConvModule->numTaps = 7; + + /* Use fixed order filtering */ + bandIdx = 0; + for ( ; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + hBinRenConvModule->numTapsArray[bandIdx] = hBinRenConvModule->numTaps; + } + } + + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + int16_t tmp = 0; + + if ( isLoudspeaker ) + { + if ( input_config == AUDIO_CONFIG_5_1 ) + { + tmp = channelIndex_CICP6[chIdx]; + } + else if ( input_config == AUDIO_CONFIG_7_1 ) + { + tmp = channelIndex_CICP12[chIdx]; + } + else if ( input_config == AUDIO_CONFIG_5_1_2 ) + { + tmp = channelIndex_CICP14[chIdx]; + } + else if ( input_config == AUDIO_CONFIG_5_1_4 ) + { + tmp = channelIndex_CICP16[chIdx]; + } + else if ( input_config == AUDIO_CONFIG_7_1_4 ) + { + tmp = channelIndex_CICP19[chIdx]; + } +#ifdef DEBUGGING + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Channel configuration not specified!\n\n" ); + } +#endif + } + + if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && hRenderConfig->roomAcoustics.use_brir ) + { + /* set the memories to zero */ + set_zero( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx], hBinRenConvModule->numTaps ); + set_zero( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx], hBinRenConvModule->numTaps ); + + if ( isLoudspeaker ) + { + hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = leftBRIRReal[bandIdx][tmp]; + hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = leftBRIRImag[bandIdx][tmp]; + hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = rightBRIRReal[bandIdx][tmp]; + hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = rightBRIRImag[bandIdx][tmp]; + } +#ifdef DEBUGGING + else + { + /* HOA3 filter coefficients */ + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: The tables corresponding to HOA3 for BRIR are missing \n\n" ); + } +#endif + } + else + { + /* set the memories to zero */ + set_zero( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx], hBinRenConvModule->numTaps ); + set_zero( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx], hBinRenConvModule->numTaps ); + + if ( isLoudspeaker ) + { + hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = leftHRIRReal[bandIdx][tmp]; + hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = leftHRIRImag[bandIdx][tmp]; + hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = rightHRIRReal[bandIdx][tmp]; + hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = rightHRIRImag[bandIdx][tmp]; + } + else + { + /* HOA3 filter coefficients */ + hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = leftHRIRReal_HOA3[bandIdx][chIdx]; + hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = leftHRIRImag_HOA3[bandIdx][chIdx]; + hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = rightHRIRReal_HOA3[bandIdx][chIdx]; + hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = rightHRIRImag_HOA3[bandIdx][chIdx]; + } + } + } + } + + hBinRenderer->hBinRenConvModule = hBinRenConvModule; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------------* + * ivas_binaural_obtain_DMX() + * + * + *-------------------------------------------------------------------------*/ + +static void ivas_binaural_obtain_DMX( + const int16_t numTimeSlots, + BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: fastconv binaural renderer handle */ + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : Contains the LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : Contains the LS signals */ + float realDMX[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float imagDMX[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ) +{ + int16_t chIdx, bandIdx, k; + + if ( hBinRenderer->ivas_format == MC_FORMAT || hBinRenderer->ivas_format == ISM_FORMAT ) + { + /* Obtain the downmix */ + float P_in[CLDFB_NO_CHANNELS_MAX]; + float P_out, factEQ; + int16_t chOutIdx; + float temp1, temp2; + + for ( k = 0; k < numTimeSlots; k++ ) + { + for ( chOutIdx = 0; chOutIdx < BINAURAL_CHANNELS; chOutIdx++ ) + { + set_zero( realDMX[chOutIdx][k], CLDFB_NO_CHANNELS_MAX ); + set_zero( imagDMX[chOutIdx][k], CLDFB_NO_CHANNELS_MAX ); + } + } + + for ( chOutIdx = 0; chOutIdx < BINAURAL_CHANNELS; chOutIdx++ ) + { + set_zero( P_in, hBinRenderer->conv_band ); + + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + float dmxConst = hBinRenderer->hReverb->dmxmtx[chOutIdx][chIdx]; + + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + for ( k = 0; k < numTimeSlots; k++ ) + { + temp1 = RealBuffer[chIdx][k][bandIdx] * dmxConst; + temp2 = ImagBuffer[chIdx][k][bandIdx] * dmxConst; + realDMX[chOutIdx][k][bandIdx] += temp1; + imagDMX[chOutIdx][k][bandIdx] += temp2; + + P_in[bandIdx] += temp1 * temp1 + temp2 * temp2; + } + } + } + + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + P_out = 0.f; + for ( k = 0; k < numTimeSlots; k++ ) + { + temp1 = realDMX[chOutIdx][k][bandIdx]; + temp2 = imagDMX[chOutIdx][k][bandIdx]; + P_out += temp1 * temp1 + temp2 * temp2; + } + factEQ = sqrtf( P_in[bandIdx] / ( P_out + 1e-20f ) ); + if ( ( factEQ <= 1e-20f ) || ( P_in[bandIdx] <= 1e-20f ) || ( P_out <= 1e-20f ) ) + { + factEQ = 1.0f; + } + + factEQ = max( min( factEQ, 2.0f ), 0.5f ); + for ( k = 0; k < numTimeSlots; k++ ) + { + realDMX[chOutIdx][k][bandIdx] *= factEQ; + imagDMX[chOutIdx][k][bandIdx] *= factEQ; + } + } + } + } + else if ( hBinRenderer->ivas_format == SBA_FORMAT || hBinRenderer->ivas_format == MASA_FORMAT ) + { + float *outRealLeftPtr, *outImagLeftPtr, *outRealRightPtr, *outImagRightPtr; + float *inRealPtr, *inImagPtr; + + /*compute DMX */ + for ( k = 0; k < numTimeSlots; k++ ) + { + outRealLeftPtr = realDMX[0][k]; + outImagLeftPtr = imagDMX[0][k]; + outRealRightPtr = realDMX[1][k]; + outImagRightPtr = imagDMX[1][k]; + set_zero( outRealLeftPtr, CLDFB_NO_CHANNELS_MAX ); + set_zero( outImagLeftPtr, CLDFB_NO_CHANNELS_MAX ); + set_zero( outRealRightPtr, CLDFB_NO_CHANNELS_MAX ); + set_zero( outImagRightPtr, CLDFB_NO_CHANNELS_MAX ); + + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + float foa_const = hBinRenderer->hReverb->foa_enc[chIdx][1]; + + inRealPtr = (float *) &( RealBuffer[chIdx][k][0] ); + inImagPtr = (float *) &( ImagBuffer[chIdx][k][0] ); + + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + outRealLeftPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f + foa_const ); + outImagLeftPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f + foa_const ); + + outRealRightPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f - foa_const ); + outImagRightPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f - foa_const ); + } + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_binRenderer_open() + * + * Open fastconv binaural renderer handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_binRenderer_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + BINAURAL_RENDERER_HANDLE hBinRenderer; + int16_t convBand, chIdx, k; + float t60[CLDFB_NO_CHANNELS_MAX]; + float ene[CLDFB_NO_CHANNELS_MAX]; + ivas_error error; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * prepare library opening + *-----------------------------------------------------------------*/ + + if ( ( hBinRenderer = (BINAURAL_RENDERER_HANDLE) count_malloc( sizeof( BINAURAL_RENDERER ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Renderer\n" ) ); + } + + hBinRenderer->hInputSetup = &st_ivas->hIntSetup; + + /* Define of head rotation has to be done in binRendeder in CLDFB*/ + hBinRenderer->rotInCldfb = 0; + if ( st_ivas->ivas_format == MC_FORMAT || st_ivas->ivas_format == SBA_FORMAT ) + { + hBinRenderer->rotInCldfb = 1; + } + + /* Declare some common variables needed for renderer */ + /* Which format used for binaural rendering (needed for late reverb) ? MC or SBA */ + if ( st_ivas->hIntSetup.is_loudspeaker_setup ) + { + hBinRenderer->ivas_format = MC_FORMAT; + } + else + { + hBinRenderer->ivas_format = SBA_FORMAT; + } + hBinRenderer->max_band = (int16_t) ( ( BINAURAL_MAXBANDS * st_ivas->hDecoderConfig->output_Fs ) / 48000 ); + convBand = hBinRenderer->max_band; + + hBinRenderer->timeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; /* Corresponds to 5 msec sound to motion latency */ + + if ( convBand > BINAURAL_CONVBANDS ) + { + hBinRenderer->conv_band = BINAURAL_CONVBANDS; + } + else + { + hBinRenderer->conv_band = convBand; + } + + /*LFE rendering switched off by default*/ + hBinRenderer->render_lfe = 0; + + if ( st_ivas->ivas_format != ISM_FORMAT && st_ivas->hIntSetup.is_loudspeaker_setup ) + { + hBinRenderer->render_lfe = 1; + } + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && ( st_ivas->hIntSetup.is_loudspeaker_setup == 0 ) ) + { + IVAS_OUTPUT_SETUP out_setup; + + /* Allocate memories and buffers needed for convolutional module in CICP19 */ + if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, 1, AUDIO_CONFIG_7_1_4, st_ivas->hRenderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + + ivas_output_init( &out_setup, AUDIO_CONFIG_7_1_4 ); + if ( ( error = ivas_sba_get_hoa_dec_matrix( out_setup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + { + return error; + } + hBinRenderer->hoa_dec_mtx = st_ivas->hoa_dec_mtx; + st_ivas->binaural_latency_ns = (int32_t) ( FASTCONV_BRIR_latency_s * 1000000000.f ); + } + else + { + /* Allocate memories and buffers needed for convolutional module */ + if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup, st_ivas->hIntSetup.output_config, st_ivas->hRenderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hBinRenderer->ivas_format == MC_FORMAT ) + { + st_ivas->binaural_latency_ns = (int32_t) ( FASTCONV_HRIR_latency_s * 1000000000.f ); + } + else + { + st_ivas->binaural_latency_ns = (int32_t) ( FASTCONV_HOA3_latency_s * 1000000000.f ); + } + } + + /* Allocate memories needed for reverb module */ + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) + { + if ( ( error = ivas_binaural_reverb_open( &( hBinRenderer->hReverb ), hBinRenderer->conv_band, hBinRenderer->timeSlots ) ) != IVAS_ERR_OK ) + { + return error; + } + if ( !st_ivas->hRenderConfig->roomAcoustics.override ) + { + ivas_binaural_reverb_setReverbTimes( hBinRenderer->hReverb, st_ivas->hDecoderConfig->output_Fs, fastconvReverberationTimes, fastconvReverberationEneCorrections ); + ivas_binaural_reverb_setPreDelay( hBinRenderer->hReverb, 10 ); + } + else + { + ivas_reverb_prepare_cldfb_params( &st_ivas->hRenderConfig->roomAcoustics, st_ivas->hIntSetup.output_config, st_ivas->hRenderConfig->roomAcoustics.use_brir, st_ivas->hDecoderConfig->output_Fs, t60, ene ); + ivas_binaural_reverb_setReverbTimes( hBinRenderer->hReverb, st_ivas->hDecoderConfig->output_Fs, t60, ene ); + ivas_binaural_reverb_setPreDelay( hBinRenderer->hReverb, (int16_t) roundf( 48000.0f * st_ivas->hRenderConfig->roomAcoustics.acousticPreDelay / CLDFB_NO_CHANNELS_MAX ) ); + } + + hBinRenderer->hReverb->useBinauralCoherence = 1; + /* initialize the dmx matrix */ + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + for ( k = 0; k < hBinRenderer->nInChannels; k++ ) + { + hBinRenderer->hReverb->dmxmtx[chIdx][k] = dmxmtx[chIdx][k]; + } + } + } + else + { + hBinRenderer->hReverb = NULL; + } + + hBinRenderer->hEFAPdata = NULL; + + if ( hBinRenderer->hReverb != NULL ) + { + if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 ) + { + for ( k = 0; k < 11; k++ ) + { + ivas_dirac_dec_get_response( (int16_t) ls_azimuth_CICP19[k], (int16_t) ls_elevation_CICP19[k], hBinRenderer->hReverb->foa_enc[k], 1 ); + } + } + else if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->hDecoderConfig->Opt_Headrotation ) + { + if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth, st_ivas->hIntSetup.ls_elevation, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Copy handles to bin renderer handle*/ + hBinRenderer->hEFAPdata = st_ivas->hEFAPdata; + } + } + + /* Copy the handles to main handle */ + st_ivas->hBinRenderer = hBinRenderer; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_binRenderer_close() + * + * Close fastconv binaural renderer memories + *------------------------------------------------------------------------*/ + +void ivas_binRenderer_close( + BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: fastconv binaural renderer handle */ +) +{ + if ( hBinRenderer == NULL || *hBinRenderer == NULL ) + { + return; + } + + if ( ( *hBinRenderer )->hBinRenConvModule != NULL ) + { + count_free( ( *hBinRenderer )->hBinRenConvModule ); + ( *hBinRenderer )->hBinRenConvModule = NULL; + } + + if ( ( *hBinRenderer )->hReverb != NULL ) + { + ivas_binaural_reverb_close( &( ( *hBinRenderer )->hReverb ) ); + } + + count_free( *hBinRenderer ); + *hBinRenderer = NULL; + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_binaural_add_LFE() + * + * The functions adds the LFE to the left and right channels after binaural rendering + *-------------------------------------------------------------------------*/ + +void ivas_binaural_add_LFE( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + int16_t output_frame, /* i : length of input frame */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ +) +{ + int16_t render_lfe, idx_lfe; + float gain; + + if ( st_ivas->hBinRenderer != NULL ) + { + render_lfe = st_ivas->hBinRenderer->render_lfe; + } + else + { + render_lfe = TRUE; + } + + if ( render_lfe ) + { + gain = st_ivas->hHrtf != NULL ? st_ivas->hHrtf->gain_lfe : GAIN_LFE; + for ( idx_lfe = 0; idx_lfe < st_ivas->hIntSetup.num_lfe; idx_lfe++ ) + { + v_multc( output_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], gain, output_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_frame ); + /* copy LFE to left and right channels */ + v_add( output_f[0], output_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_f[0], output_frame ); + v_add( output_f[1], output_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_f[1], output_frame ); + } + } + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_binRenderer_cldfb() + * + * Perform CLDFB analysis, fastconv binaural rendering and CLDFB synthesis + *-------------------------------------------------------------------------*/ + +void ivas_binaural_cldfb( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ +) +{ + float Cldfb_RealBuffer[MAX_INTERN_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_INTERN_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + int16_t slot_idx, subframeIdx, index_slot, idx_in, idx_lfe, maxBand, ch; + + /* Implement a 5 msec loops */ + maxBand = (int16_t) ( ( CLDFB_NO_CHANNELS_MAX * st_ivas->hDecoderConfig->output_Fs ) / 48000 ); + + for ( subframeIdx = 0; subframeIdx < ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES ); subframeIdx++ ) + { + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + index_slot = subframeIdx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; + + /* Implement CLDFB analysis */ + idx_in = 0; + idx_lfe = 0; + + for ( ch = 0; ch < ( st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe ); ch++ ) + { + if ( ( st_ivas->hIntSetup.num_lfe > 0 ) && ( st_ivas->hIntSetup.index_lfe[idx_lfe] == ch ) ) + { + if ( idx_lfe < ( st_ivas->hIntSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else + { + cldfbAnalysis_ts( &( output_f[ch][maxBand * index_slot] ), + Cldfb_RealBuffer[idx_in][slot_idx], + Cldfb_ImagBuffer[idx_in][slot_idx], + maxBand, st_ivas->cldfbAnaDec[idx_in] ); + idx_in++; + } + } + } + + /* Implement binaural rendering */ + ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + + /* Implement CLDFB synthesis */ + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + + index_slot = subframeIdx * MAX_PARAM_SPATIAL_SUBFRAMES; + + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch][slot_idx]; + ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch][slot_idx]; + } + + cldfbSynthesis( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * maxBand] ), maxBand * MAX_PARAM_SPATIAL_SUBFRAMES, st_ivas->cldfbSynDec[ch] ); + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_binRenderer() + * + * Fastconv binaural renderer main function + *-------------------------------------------------------------------------*/ + +void ivas_binRenderer( + BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ + float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ + float Cldfb_ImagBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ +) +{ + int16_t chIdx, k; + int16_t numTimeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; + + wmops_sub_start( "fastconv_binaural_rendering" ); + + /* Compute Convolution */ + /* memory reset for the binaural output */ + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + for ( k = 0; k < numTimeSlots; k++ ) + { + set_zero( Cldfb_RealBuffer_Binaural[chIdx][k], CLDFB_NO_CHANNELS_MAX ); + set_zero( Cldfb_ImagBuffer_Binaural[chIdx][k], CLDFB_NO_CHANNELS_MAX ); + } + } + + /* Head rotation in HOA3 or CICPx */ + if ( hHeadTrackData && hHeadTrackData->num_quaternions >= 0 && hBinRenderer->rotInCldfb ) + { + if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 ) + { + /* Rotation in SHD (HOA3) */ + if ( hHeadTrackData->shd_rot_max_order == -1 ) + { + QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], hHeadTrackData->Rmat ); + + rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hHeadTrackData->Rmat, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 ); + } + else if ( hHeadTrackData->shd_rot_max_order > 0 ) + { + rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hHeadTrackData->Rmat, hBinRenderer->hInputSetup->nchan_out_woLFE, hHeadTrackData->shd_rot_max_order ); + } + } + else + { + /* Rotation in SD (CICPx) */ + rotateFrame_sd_cldfb( hHeadTrackData, RealBuffer, ImagBuffer, hBinRenderer->hInputSetup, hBinRenderer->hEFAPdata, hBinRenderer->conv_band ); + } + } + + /* HOA decoding to CICP19 if needed*/ + if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 && hBinRenderer->nInChannels != 16 ) + { + ivas_sba2mc_cldfb( *( hBinRenderer->hInputSetup ), RealBuffer, ImagBuffer, hBinRenderer->nInChannels, hBinRenderer->conv_band, hBinRenderer->hoa_dec_mtx ); + } + + ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, RealBuffer, ImagBuffer, hBinRenderer ); + + /* Obtain the binaural dmx and compute the reverb */ + if ( hBinRenderer->hReverb != NULL ) + { + float reverbRe[2][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float reverbIm[2][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float inRe[2][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float inIm[2][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + + ivas_binaural_obtain_DMX( numTimeSlots, hBinRenderer, RealBuffer, ImagBuffer, inRe, inIm ); + + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + for ( k = 0; k < numTimeSlots; k++ ) + { + set_zero( reverbRe[chIdx][k], hBinRenderer->max_band ); + set_zero( reverbIm[chIdx][k], hBinRenderer->max_band ); + } + } + + ivas_binaural_reverb_processFrame( hBinRenderer->hReverb, 2, inRe, inIm, reverbRe, reverbIm, 0u ); + + /* Add the conv module and reverb module output */ + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + for ( k = 0; k < numTimeSlots; k++ ) + { + /* Combine first and second parts to generate binaural output signal with room effect */ + v_add( Cldfb_RealBuffer_Binaural[chIdx][k], reverbRe[chIdx][k], Cldfb_RealBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); + v_add( Cldfb_ImagBuffer_Binaural[chIdx][k], reverbIm[chIdx][k], Cldfb_ImagBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); + } + } + } + + wmops_sub_end(); + + return; +} diff --git a/lib_dec/ivas_binaural_reverb.c b/lib_dec/ivas_binaural_reverb.c new file mode 100644 index 0000000000..054b8c1558 --- /dev/null +++ b/lib_dec/ivas_binaural_reverb.c @@ -0,0 +1,498 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/* The reverberator structure implemented here is described in detail in: + * Vilkamo, J., Neugebauer, B., & Plogsties, J. (2012). Sparse frequency-domain reverberator. + * Journal of the Audio Engineering Society, 59(12), 936-943. */ + +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define BIN_REND_RANDOM_SEED 1 /* random seed for generating reverb decorrelators */ + +#define CLDFB_SLOTS_PER_SECOND 800 /* Used for initializing reverb */ + +/*------------------------------------------------------------------------- + * ivas_binaural_reverb_processFrame() + * + * Compute the reverberation - room effect + *------------------------------------------------------------------------*/ + +void ivas_binaural_reverb_processFrame( + REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ + const int16_t numInChannels, /* i : num inputs to be processed */ + float inReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : input CLDFB data real, Comment: This change swaps two first dimensions as first dimension is not constant. */ + float inImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : input CLDFB data imag */ + float outReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : output CLDFB data real */ + float outImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : output CLDFB data imag */ + const uint8_t offsetSamplesIO /* i : number of offset samples */ +) +{ + /* Declare the required variables */ + int16_t idx, bin, ch, sample, invertSampleIndex, tapIdx, *phaseShiftTypePr; + float **tapRealPr, **tapImagPr; + + /* 1) Rotate the data in the loop buffer of the reverberator. + * Notice that the audio at the loop buffers is at time-inverted order + * for convolution purposes later on. */ + for ( bin = 0; bin < hReverb->numBins; bin++ ) + { + /* Move the data forwards by blockSize (i.e. by the frame size of 16 CLDFB slots) */ + mvr2r( hReverb->loopBufReal[bin], hReverb->loopBufReal[bin] + hReverb->blockSize, hReverb->loopBufLength[bin] ); + mvr2r( hReverb->loopBufImag[bin], hReverb->loopBufImag[bin] + hReverb->blockSize, hReverb->loopBufLength[bin] ); + + /* Add the data from the end of the loop to the beginning, with an attenuation factor + * according to RT60. This procedure generates an IIR decaying response. The response + * is decorrelated later on. */ + v_multc( hReverb->loopBufReal[bin] + hReverb->loopBufLength[bin], hReverb->loopAttenuationFactor[bin], hReverb->loopBufReal[bin], hReverb->blockSize ); + v_multc( hReverb->loopBufImag[bin] + hReverb->loopBufLength[bin], hReverb->loopAttenuationFactor[bin], hReverb->loopBufImag[bin], hReverb->blockSize ); + } + + /* 2) Apply the determined pre-delay to the input audio, and add the delayed audio to the loop. */ + idx = hReverb->preDelayBufferIndex; + for ( sample = 0; sample < hReverb->blockSize; sample++ ) + { + uint16_t sampleWithOffset; + sampleWithOffset = sample + offsetSamplesIO; + invertSampleIndex = hReverb->blockSize - sample - 1; + for ( bin = 0; bin < hReverb->numBins; bin++ ) + { + /* Add from pre-delay buffer a sample to the loop buffer, in a time-inverted order. + * Also apply the spectral gains determined for the reverberation */ + hReverb->loopBufReal[bin][invertSampleIndex] += hReverb->preDelayBufferReal[idx][bin] * hReverb->reverbEqGains[bin]; + hReverb->loopBufImag[bin][invertSampleIndex] += hReverb->preDelayBufferImag[idx][bin] * hReverb->reverbEqGains[bin]; + hReverb->preDelayBufferReal[idx][bin] = 0.0f; + hReverb->preDelayBufferImag[idx][bin] = 0.0f; + } + + /* Add every second input channel as is to the pre-delay buffer, and every second input channel with + * 90 degrees phase shift to reduce energy imbalances between coherent and incoherent sounds */ + for ( ch = 0; ch < numInChannels; ch++ ) + { + if ( ch % 2 ) + { + v_add( hReverb->preDelayBufferReal[idx], inReal[ch][sampleWithOffset], hReverb->preDelayBufferReal[idx], hReverb->numBins ); + v_add( hReverb->preDelayBufferImag[idx], inImag[ch][sampleWithOffset], hReverb->preDelayBufferImag[idx], hReverb->numBins ); + } + else + { + v_sub( hReverb->preDelayBufferReal[idx], inImag[ch][sampleWithOffset], hReverb->preDelayBufferReal[idx], hReverb->numBins ); + v_add( hReverb->preDelayBufferImag[idx], inReal[ch][sampleWithOffset], hReverb->preDelayBufferImag[idx], hReverb->numBins ); + } + } + idx = ( idx + 1 ) % hReverb->preDelayBufferLength; + } + hReverb->preDelayBufferIndex = idx; + + /* 3) Perform the filtering/decorrelating, using complex and sparse FIR filtering */ + for ( bin = 0; bin < hReverb->numBins; bin++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + /* These tap pointers have been determined to point to the loop buffer at sparse locations */ + tapRealPr = hReverb->tapPointersReal[bin][ch]; + tapImagPr = hReverb->tapPointersImag[bin][ch]; + phaseShiftTypePr = hReverb->tapPhaseShiftType[bin][ch]; + + /* Flush output */ + set_f( hReverb->outputBufferReal[bin][ch], 0.0f, hReverb->blockSize ); + set_f( hReverb->outputBufferImag[bin][ch], 0.0f, hReverb->blockSize ); + + /* Add from temporally decaying sparse tap locations the audio to the output. */ + for ( tapIdx = 0; tapIdx < hReverb->taps[bin][ch]; tapIdx++ ) + { + switch ( phaseShiftTypePr[tapIdx] ) + { + case 0: /* 0 degrees phase */ + v_add( hReverb->outputBufferReal[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferReal[bin][ch], hReverb->blockSize ); + v_add( hReverb->outputBufferImag[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferImag[bin][ch], hReverb->blockSize ); + break; + case 1: /* 90 degrees phase */ + v_sub( hReverb->outputBufferReal[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferReal[bin][ch], hReverb->blockSize ); + v_add( hReverb->outputBufferImag[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferImag[bin][ch], hReverb->blockSize ); + break; + case 2: /* 180 degrees phase */ + v_sub( hReverb->outputBufferReal[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferReal[bin][ch], hReverb->blockSize ); + v_sub( hReverb->outputBufferImag[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferImag[bin][ch], hReverb->blockSize ); + break; + default: /* 270 degrees phase */ + v_add( hReverb->outputBufferReal[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferReal[bin][ch], hReverb->blockSize ); + v_sub( hReverb->outputBufferImag[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferImag[bin][ch], hReverb->blockSize ); + break; + } + } + } + + /* Generate diffuse field binaural coherence by mixing the incoherent reverberated channels with pre-defined gains */ + if ( bin <= hReverb->highestBinauralCoherenceBin ) + { + if ( hReverb->useBinauralCoherence ) + { + for ( sample = 0; sample < hReverb->blockSize; sample++ ) + { + float leftRe, rightRe, leftIm, rightIm; + + leftRe = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferReal[bin][0][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferReal[bin][1][sample]; + rightRe = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferReal[bin][1][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferReal[bin][0][sample]; + leftIm = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferImag[bin][0][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferImag[bin][1][sample]; + rightIm = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferImag[bin][1][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferImag[bin][0][sample]; + + hReverb->outputBufferReal[bin][0][sample] = leftRe; + hReverb->outputBufferReal[bin][1][sample] = rightRe; + hReverb->outputBufferImag[bin][0][sample] = leftIm; + hReverb->outputBufferImag[bin][1][sample] = rightIm; + } + } + } + } + + /* 4) Write data to output */ + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + for ( sample = 0; sample < hReverb->blockSize; sample++ ) + { + uint16_t sampleWithOffset; + + sampleWithOffset = sample + offsetSamplesIO; + /* Audio was in the temporally inverted order for convolution, re-invert audio to output */ + invertSampleIndex = hReverb->blockSize - sample - 1; + + for ( bin = 0; bin < hReverb->numBins; bin++ ) + { + outReal[ch][sampleWithOffset][bin] = hReverb->outputBufferReal[bin][ch][invertSampleIndex]; + outImag[ch][sampleWithOffset][bin] = hReverb->outputBufferImag[bin][ch][invertSampleIndex]; + } + for ( ; bin < CLDFB_NO_CHANNELS_MAX; bin++ ) + { + outReal[ch][sampleWithOffset][bin] = 0.0f; + outImag[ch][sampleWithOffset][bin] = 0.0f; + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * binRend_rand() + * + * + *------------------------------------------------------------------------*/ + +static uint16_t binRend_rand( + REVERB_STRUCT_HANDLE hReverb /* i/o: binaural reverb handle */ +) +{ + hReverb->binRend_RandNext = hReverb->binRend_RandNext * 1103515245 + 12345; + + return (uint16_t) ( hReverb->binRend_RandNext / 65536 ) % 32768; +} + + +/*------------------------------------------------------------------------- + * ivas_binaural_reverb_setPreDelay() + * + * + *------------------------------------------------------------------------*/ + +void ivas_binaural_reverb_setPreDelay( + REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ + const int16_t delaySamples /* i : reverb pre-delay in CLDFB slots */ +) +{ + if ( delaySamples < 1 ) + { + hReverb->preDelayBufferLength = 1; + + return; + } + + if ( delaySamples > REVERB_PREDELAY_MAX ) + { + hReverb->preDelayBufferLength = REVERB_PREDELAY_MAX; + + return; + } + + hReverb->preDelayBufferLength = delaySamples; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_binaural_reverb_setReverbTimes() + * + * + *------------------------------------------------------------------------*/ + +void ivas_binaural_reverb_setReverbTimes( + REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ + const int32_t output_Fs, /* i : sampling_rate */ + const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ + const float *revEnes /* i : spectrum for reverberated sound at each CLDFB bin */ +) +{ + int16_t bin, ch, tap, sample; + float binCenterFreq, diffuseFieldICC, tmpVal, attenuationFactorPerSample; + float intendedEnergy, actualizedEnergy, energyBuildup, currentEnergy, attenuationFactorPerSampleSq; + + hReverb->binRend_RandNext = (uint16_t) BIN_REND_RANDOM_SEED; + hReverb->highestBinauralCoherenceBin = 0; + for ( bin = 0; bin < hReverb->numBins; bin++ ) + { + /* Determine the diffuse field binaural coherence */ + binCenterFreq = ( (float) bin + 0.5f ) / ( (float) hReverb->numBins ) * ( (float) output_Fs ) / 2.0f; + if ( bin == 0 ) + { + diffuseFieldICC = 1.0f; + } + else if ( binCenterFreq < 2700.0f ) + { + diffuseFieldICC = sinf( EVS_PI * binCenterFreq / 550.0f + 1e-20f ) / ( EVS_PI * binCenterFreq / 550.0f + 1e-20f ) * ( 1.0f - binCenterFreq / 2700.0f ); + hReverb->highestBinauralCoherenceBin = bin; + } + else + { + diffuseFieldICC = 0.0f; + } + + /* Mixing gains to generate a diffuse-binaural sound based on incoherent sound */ + tmpVal = ( 1.0f - sqrtf( 1.0f - powf( diffuseFieldICC, 2.0 ) ) ) / 2.0f; + if ( diffuseFieldICC > 0 ) + { + hReverb->binauralCoherenceCrossmixGains[bin] = sqrtf( fabsf( tmpVal ) ); + } + else + { + hReverb->binauralCoherenceCrossmixGains[bin] = -sqrtf( fabsf( tmpVal ) ); + } + hReverb->binauralCoherenceDirectGains[bin] = sqrtf( 1.0f - fabsf( tmpVal ) ); + + /* Determine loop buffer length. The following formula is manually tuned to generate sufficiently long + * but not excessively long loops to generate reverberation. */ + /* Note: the resulted length is very sensitive to the precision of the constants below (e.g. 1.45 vs. 1.45f) */ + hReverb->loopBufLength[bin] = (int16_t) ( 1.45 * (int16_t) ( revTimes[bin] * 150.0 ) + 1 ); + hReverb->loopBufLength[bin] = min( hReverb->loopBufLength[bin], hReverb->loopBufLengthMax[bin] ); + + /* Determine attenuation factor that generates the appropriate energy decay according to reverberation time */ + attenuationFactorPerSample = powf( 10.0f, -3.0f * ( 1.0f / ( (float) CLDFB_SLOTS_PER_SECOND * revTimes[bin] ) ) ); + hReverb->loopAttenuationFactor[bin] = powf( attenuationFactorPerSample, hReverb->loopBufLength[bin] ); + attenuationFactorPerSampleSq = attenuationFactorPerSample * attenuationFactorPerSample; + + /* Design sparse decorrelation filters. The decorrelation filters, due to random procedures involved, + * may affect the spectrum of the output. The spectral effect is therefore monitored and compensated for. */ + intendedEnergy = 0.0f; + actualizedEnergy = 0.0f; + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + energyBuildup = 0.0f; + currentEnergy = 1.0f; + tap = 0; + + for ( sample = 0; sample < hReverb->loopBufLength[bin]; sample++ ) + { + intendedEnergy += currentEnergy; + /* The randomization at the energy build up affects where the sparse taps are located */ + energyBuildup += currentEnergy + 0.1f * ( (float) binRend_rand( hReverb ) / PCM16_TO_FLT_FAC - 0.5f ); + if ( energyBuildup >= 1.0f ) /* A new filter tap is added at this condition */ + { + /* Four efficient phase operations: n*pi/2, n=0,1,2,3 */ + hReverb->tapPhaseShiftType[bin][ch][tap] = (int16_t) ( binRend_rand( hReverb ) % 4 ); + /* Set the tapPointer to point to the determined sample at the loop buffer */ + hReverb->tapPointersReal[bin][ch][tap] = &( hReverb->loopBufReal[bin][sample] ); + hReverb->tapPointersImag[bin][ch][tap] = &( hReverb->loopBufImag[bin][sample] ); + energyBuildup -= 1.0f; /* A tap is added, thus remove its energy from the buildup */ + tap++; + actualizedEnergy += 1.0f; + } + currentEnergy *= attenuationFactorPerSampleSq; + } + hReverb->taps[bin][ch] = tap; /* Number of taps determined at the above random procedure */ + } + + /* The decorrelator design and IIR attenuation rate affects the energy of reverb, which is compensated here */ + hReverb->reverbEqGains[bin] = sqrtf( revEnes[bin] ); /* Determined reverb spectrum */ + hReverb->reverbEqGains[bin] *= sqrtf( intendedEnergy / actualizedEnergy ); /* Correction of random effects at the decorrelator design */ + hReverb->reverbEqGains[bin] *= sqrtf( 0.5f * ( 1.0f - attenuationFactorPerSampleSq ) ); /* Correction of IIR decay rate */ + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_binaural_reverb_open() + * + * Allocate and initialize binaural room reverberator handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_binaural_reverb_open( + REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ + const int16_t numBins, /* i : number of CLDFB bins */ + const int16_t numCldfbSlotsPerFrame /* i : number of CLDFB slots per frame, i.e., reverberator block size */ +) +{ + int16_t bin, chIdx, k, tmp; + REVERB_STRUCT_HANDLE hReverb; + + if ( ( *hReverbPr = (REVERB_STRUCT_HANDLE) count_malloc( sizeof( REVERB_STRUCT ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + hReverb = *hReverbPr; + + hReverb->useBinauralCoherence = 0; + hReverb->preDelayBufferLength = 1; + hReverb->preDelayBufferIndex = 0; + + hReverb->numBins = numBins; + hReverb->blockSize = numCldfbSlotsPerFrame; + + for ( k = 0; k < REVERB_PREDELAY_MAX + 1; k++ ) + { + set_f( hReverb->preDelayBufferReal[k], 0.0f, hReverb->numBins ); + set_f( hReverb->preDelayBufferImag[k], 0.0f, hReverb->numBins ); + } + + for ( bin = 0; bin < hReverb->numBins; bin++ ) + { + /* Loop Buffer */ + hReverb->loopBufLengthMax[bin] = (int16_t) ( 500 / ( 1 + bin ) + ( CLDFB_NO_CHANNELS_MAX - bin ) ); + + tmp = hReverb->loopBufLengthMax[bin] + hReverb->blockSize; + if ( ( hReverb->loopBufReal[bin] = (float *) count_malloc( tmp * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + if ( ( hReverb->loopBufImag[bin] = (float *) count_malloc( tmp * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + set_f( hReverb->loopBufReal[bin], 0.0f, tmp ); + set_f( hReverb->loopBufImag[bin], 0.0f, tmp ); + + /* Sparse Filter Tap Locations */ + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + tmp = hReverb->loopBufLengthMax[bin]; + + if ( ( hReverb->tapPhaseShiftType[bin][chIdx] = (int16_t *) count_malloc( tmp * sizeof( int16_t ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + if ( ( hReverb->tapPointersReal[bin][chIdx] = (float **) count_malloc( tmp * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + if ( ( hReverb->tapPointersImag[bin][chIdx] = (float **) count_malloc( tmp * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + set_s( hReverb->tapPhaseShiftType[bin][chIdx], 0, tmp ); + + tmp = hReverb->blockSize; + if ( ( hReverb->outputBufferReal[bin][chIdx] = (float *) count_malloc( tmp * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + if ( ( hReverb->outputBufferImag[bin][chIdx] = (float *) count_malloc( tmp * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); + } + + set_f( hReverb->outputBufferReal[bin][chIdx], 0.0f, tmp ); + set_f( hReverb->outputBufferImag[bin][chIdx], 0.0f, tmp ); + } + } + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_binaural_reverb_close() + * + * Close binaural room reverberator handle + *------------------------------------------------------------------------*/ + +void ivas_binaural_reverb_close( + REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ +) +{ + int16_t bin, chIdx; + + if ( hReverb == NULL || *hReverb == NULL ) + { + return; + } + + for ( bin = 0; bin < ( *hReverb )->numBins; bin++ ) + { + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + count_free( ( *hReverb )->tapPhaseShiftType[bin][chIdx] ); + count_free( ( *hReverb )->tapPointersReal[bin][chIdx] ); + count_free( ( *hReverb )->tapPointersImag[bin][chIdx] ); + count_free( ( *hReverb )->outputBufferReal[bin][chIdx] ); + count_free( ( *hReverb )->outputBufferImag[bin][chIdx] ); + } + count_free( ( *hReverb )->loopBufReal[bin] ); + count_free( ( *hReverb )->loopBufImag[bin] ); + } + + count_free( ( *hReverb ) ); + + return; +} diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c new file mode 100644 index 0000000000..b5dd559f5f --- /dev/null +++ b/lib_dec/ivas_core_dec.c @@ -0,0 +1,872 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +#include +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + + +/*-------------------------------------------------------------------* + * ivas_core_dec() + * + * Principal IVAS core decoder routine, where number of core channels is 1 or 2 + *-------------------------------------------------------------------*/ + +ivas_error ivas_core_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + const int16_t n_channels, /* i : number of channels to be decoded */ + float output[CPE_CHANNELS][L_FRAME48k], /* o : output synthesis signal */ + float hb_synth[CPE_CHANNELS][L_FRAME48k], /* o : output HB synthesis signal */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ + int16_t i, n, output_frame; + Decoder_State **sts, *st; + STEREO_ICBWE_DEC_HANDLE hStereoICBWE; + STEREO_TD_DEC_DATA_HANDLE hStereoTD; + int16_t sharpFlag[CPE_CHANNELS]; + float synth[CPE_CHANNELS][L_FRAME48k]; + float tmp_buffer[L_FRAME48k]; + int16_t tmps, incr; + float bwe_exc_extended[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; + float voice_factors[CPE_CHANNELS][NB_SUBFR16k]; + int16_t core_switching_flag[CPE_CHANNELS]; + float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; + float tmp; + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k]; + int16_t unbits[CPE_CHANNELS]; + int16_t sid_bw[CPE_CHANNELS]; + FRAME_MODE frameMode[CPE_CHANNELS]; + float tdm_lspQ_PCh[M], tdm_lsfQ_PCh[M]; + int16_t tdm_LRTD_flag; + int32_t element_brate, output_Fs; + int32_t last_element_brate; + int16_t use_cldfb_for_dft; + float *p_output_mem; + int16_t flag_sec_CNA; + int16_t last_element_mode; + int16_t nchan_out; + float *save_hb_synth; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_core_dec" ); + + /*------------------------------------------------------------------* + * General initialization + *-----------------------------------------------------------------*/ + + use_cldfb_for_dft = 0; + tdm_LRTD_flag = -1; + + if ( hSCE != NULL ) + { + sts = hSCE->hCoreCoder; + hStereoICBWE = NULL; + element_brate = hSCE->element_brate; + last_element_brate = hSCE->element_brate; /* hack - the past parameter is not really needed */ + last_element_mode = IVAS_SCE; + hStereoTD = NULL; + p_output_mem = NULL; + nchan_out = 1; + } + else + { + sts = hCPE->hCoreCoder; + element_brate = hCPE->element_brate; + last_element_brate = hCPE->last_element_brate; + last_element_mode = hCPE->last_element_mode; + hStereoICBWE = hCPE->hStereoICBWE; + hStereoTD = hCPE->hStereoTD; + p_output_mem = hCPE->output_mem[1]; + nchan_out = hCPE->nchan_out; + + if ( hCPE->hStereoTD != NULL ) + { + tdm_LRTD_flag = hCPE->hCoreCoder[0]->tdm_LRTD_flag; + } + + if ( sts[0]->element_mode == IVAS_CPE_DFT ) + { + use_cldfb_for_dft = ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ? 1 : 0; + } + } + + output_Fs = sts[0]->output_Fs; + output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + + for ( n = 0; n < n_channels; n++ ) + { + st = sts[n]; + + /*------------------------------------------------------------------* + * Initialization per core-decoder channel + *-----------------------------------------------------------------*/ + + frameMode[n] = FRAMEMODE_NORMAL; + st->rate_switching_reset = 0; + + st->mdct_sw = MODE1; + + sid_bw[n] = -1; + core_switching_flag[n] = 0; + sharpFlag[n] = 0; + unbits[n] = 0; + st->GSC_IVAS_mode = 0; + st->element_brate = element_brate; + + st->use_partial_copy = 0; + st->rf_flag = 0; + st->rf_frame_type = RF_NO_DATA; + + if ( st->bfi == 1 ) + { + frameMode[n] = FRAMEMODE_MISSING; + st->coder_type = st->last_coder_type; + } + else + { + if ( !( st->element_mode == IVAS_CPE_TD && n == 1 ) ) /* coder_type for SCh in TD stereo is already read in tdm_configure_dec() */ + { + st->coder_type = INACTIVE; + } + st->extl = -1; + st->flagGuidedAcelp = 0; + } + +#ifndef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + /* PLC: [TCX: Fade-out-recovery] - overlapping part needs to be attenuated for first good frame */ + if ( !st->bfi && st->prev_bfi && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->element_mode != IVAS_CPE_MDCT ) + { + if ( st->hPlcInfo != NULL ) + { + v_multc( st->hHQ_core->old_out, st->hPlcInfo->recovery_gain, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX ); + v_multc( st->hHQ_core->old_outLB, st->hPlcInfo->recovery_gain, st->hHQ_core->old_outLB, st->L_frame ); + + if ( !st->hTcxCfg->last_aldo && st->hTcxDec != NULL ) + { + v_multc( st->hTcxDec->syn_OverlFB, st->hPlcInfo->recovery_gain, st->hTcxDec->syn_OverlFB, st->hTcxCfg->tcx_mdct_window_lengthFB ); + v_multc( st->hTcxDec->syn_Overl, st->hPlcInfo->recovery_gain, st->hTcxDec->syn_Overl, st->hTcxCfg->tcx_mdct_window_length ); + } + } + } +#else + /* PLC: [TCX: Fade-out-recovery] - overlapping part needs to be attenuated for first good frame */ + if ( !st->bfi && st->prev_bfi && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) ) + { + float gain; + if ( st->hPlcInfo != NULL ) + { + gain = st->hPlcInfo->recovery_gain; + } + else if ( st->hTcxDec != NULL ) + { + gain = st->hTcxDec->conceal_eof_gain; + } + else + { + gain = 0.f; + assert( !"This should never happen." ); + } + + v_multc( st->hHQ_core->old_out, gain, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX ); + v_multc( st->hHQ_core->old_outLB, gain, st->hHQ_core->old_outLB, st->L_frame ); + + if ( !st->hTcxCfg->last_aldo && st->hTcxDec != NULL ) + { + v_multc( st->hTcxDec->syn_OverlFB, gain, st->hTcxDec->syn_OverlFB, st->hTcxCfg->tcx_mdct_window_lengthFB ); + v_multc( st->hTcxDec->syn_Overl, gain, st->hTcxDec->syn_Overl, st->hTcxCfg->tcx_mdct_window_length ); + } + } +#endif + + set_f( voice_factors[n], 0.f, NB_SUBFR16k ); + set_f( hb_synth[n], 0.0f, L_FRAME48k ); + + /*------------------------------------------------------------------* + * Decision matrix (selection of technologies) + *-----------------------------------------------------------------*/ + + if ( st->bfi != 1 ) + { + ivas_decision_matrix_dec( st, &sharpFlag[n], &core_switching_flag[n], element_brate, nchan_out ); + + synchonize_channels_mdct_sid( sts, n ); + + if ( st->bfi != 1 ) /* note: st->bfi can be changed from 0 to 1 in ivas_decision_matrix_dec() when BER is detected */ + { + st->sr_core = st->L_frame * FRAMES_PER_SEC; + st->fscale_old = st->fscale; + st->fscale = sr2fscale( st->sr_core ); + } + else + { + frameMode[n] = FRAMEMODE_MISSING; + } + } + else if ( st->element_mode >= IVAS_SCE && st->prev_bfi == 1 && st->last_con_tcx == 1 ) + { + st->core = TCX_20_CORE; + } + } /* n_channels loop */ + + /* MDCT stereo -> DFT stereo switching */ + if ( hCPE != NULL && hCPE->last_element_mode == IVAS_CPE_MDCT && hCPE->element_mode == IVAS_CPE_DFT ) + { + int16_t ovl, fade_len; + if ( sts[0]->L_frame != sts[0]->last_L_frame ) + { + lerp( sts[0]->hHQ_core->old_outLB, sts[0]->hHQ_core->old_outLB, sts[0]->L_frame, sts[0]->last_L_frame ); + } + if ( sts[0]->L_frame != L_FRAME16k ) + { + ovl = (int16_t) ( STEREO_DFT32MS_OVL_16k * ( (float) sts[0]->L_frame / L_FRAME16k ) ); + lerp( hCPE->input_mem_LB[0], hCPE->input_mem_LB[0], ovl, STEREO_DFT32MS_OVL_16k ); + + fade_len = (int16_t) ( STEREO_MDCT2DFT_FADE_LEN_48k * ( (float) sts[0]->L_frame / L_FRAME16k ) ); + lerp( hCPE->old_outLB_mdct, hCPE->old_outLB_mdct, fade_len, STEREO_MDCT2DFT_FADE_LEN_48k ); + } + } + + if ( hCPE != NULL && hCPE->hStereoCng != NULL ) + { + hCPE->hStereoCng->flag_cna_fade = 0; + } + + if ( sba_dirac_stereo_flag && sts[0]->total_brate <= SID_2k40 && sts[0]->cng_type == FD_CNG ) + { + save_hb_synth = hSCE->save_hb_synth; + } + else + { + save_hb_synth = NULL; + } + + /*------------------------------------------------------------------* + * Decode SID for MDCT-Stereo DTX mode + *-----------------------------------------------------------------*/ + + if ( sts[0]->element_mode == IVAS_CPE_MDCT && sts[0]->total_brate == SID_2k40 ) + { + if ( sts[0]->cng_dirac_flag ) + { + FdCngDecodeDiracMDCTStereoSID( hCPE ); + } + else + { + FdCngDecodeMDCTStereoSID( hCPE ); + } + } + + /*------------------------------------------------------------------* + * Core Decoding + *-----------------------------------------------------------------*/ + + for ( n = 0; n < n_channels; n++ ) + { + st = sts[n]; + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + if ( st->bfi == 1 ) + { + st->nbLostCmpt++; + } + else + { + if ( st->prev_bfi == 1 ) + { + st->prev_nbLostCmpt = st->nbLostCmpt; + } + else + { + st->prev_nbLostCmpt = 0; + } + + st->nbLostCmpt = 0; + } + st->enablePlcWaveadjust = 0; + + if ( n == 1 ) + { + sts[1]->BER_detect |= sts[0]->BER_detect; + } + + /*---------------------------------------------------------------------* + * Detect bandwidth switching + *---------------------------------------------------------------------*/ + + bandwidth_switching_detect( st ); + + /*---------------------------------------------------------------------* + * Preprocessing (preparing) for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + + if ( ( error = core_switching_pre_dec( st, output_frame, sts[0]->last_core_brate, nchan_out, last_element_mode, last_element_brate ) ) != IVAS_ERR_OK ) + { + return error; + } + + + flag_sec_CNA = -1; + if ( hCPE != NULL ) + { + flag_sec_CNA = sts[1]->flag_cna; + } + + /*---------------------------------------------------------------------* + * ACELP core decoding + * TCX core decoding + * HQ core decoding + *---------------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + /* ACELP core decoder */ + if ( ( error = acelp_core_dec( st, output[n], synth[n], save_hb_synth, bwe_exc_extended[n], voice_factors[n], old_syn_12k8_16k[n], sharpFlag[n], pitch_buf[n], &unbits[n], &sid_bw[n], hStereoTD, tdm_lspQ_PCh, tdm_lsfQ_PCh, use_cldfb_for_dft, last_element_mode, last_element_brate, flag_sec_CNA, nchan_out, hCPE == NULL ? NULL : hCPE->hStereoCng ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ( st->core == TCX_20_CORE || st->core == TCX_10_CORE ) && st->element_mode != IVAS_CPE_MDCT ) + { + /* TCX decoder */ + stereo_tcx_core_dec( st, frameMode[n], output[n], synth[n], pitch_buf[n], sba_dirac_stereo_flag, hStereoTD, last_element_mode, flag_sec_CNA, hCPE == NULL ? NULL : hCPE->hStereoCng, nchan_out ); + } + + if ( st->core == HQ_CORE ) + { + /* HQ core decoder */ + hq_core_dec( st, synth[n], output_frame, NORMAL_HQ_CORE, core_switching_flag[n], output[n] ); + } + + /*---------------------------------------------------------------------* + * TD stereo updates + *---------------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_TD && n == 0 ) + { + td_stereo_param_updt( st->lsp_old, st->lsf_old, st->old_pitch_buf + st->nb_subfr, tdm_lspQ_PCh, tdm_lsfQ_PCh, hStereoTD->tdm_Pri_pitch_buf, st->flag_ACELP16k, hStereoTD->tdm_use_IAWB_Ave_lpc ); + } + + } /* n_channels loop */ + + /*---------------------------------------------------------------------* + * MDCT stereo: joint TCX Core Decoding + *---------------------------------------------------------------------*/ + + if ( sts[0]->element_mode == IVAS_CPE_MDCT ) + { + /* active-frame decoding */ + if ( sts[0]->core_brate > SID_2k40 ) + { + if ( hMCT ) + { + wmops_sub_end(); + + return error; + } + else + { + stereo_mdct_core_dec( st_ivas, hCPE, output, synth ); + } + } + /* for inactive frames with mono output, copy and (if necessary) downmix buffers */ + else if ( hCPE->nchan_out == 1 ) + { + updateBuffersForDmxMdctStereo( hCPE, output_frame, output, synth ); + } + } + + /*---------------------------------------------------------------------* + * Stereo CNG updates + *---------------------------------------------------------------------*/ + + if ( sts[0]->element_mode == IVAS_CPE_TD && hCPE->hStereoCng != NULL ) + { + stereo_cng_compute_PScorr( output, &hCPE->hStereoCng->c_PS_LT, sts[0]->L_frame, sts[1]->L_frame ); + } + + /*---------------------------------------------------------------------* + * Postprocessing, BWEs and updates + *---------------------------------------------------------------------*/ + + for ( n = 0; n < n_channels; n++ ) + { +#ifdef DEBUG_PLOT + setDeboutVars( -1, -1, n, -1 ); +#endif + st = sts[n]; + + /*---------------------------------------------------------------------* + * TD-BWE for ACELP to TCX transitions + *---------------------------------------------------------------------*/ + + if ( st->last_core == ACELP_CORE && ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE ) && st->hBWE_TD != NULL ) + { + if ( ( st->bwidth == SWB || st->bwidth == FB ) && ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) ) + { + GenTransition( st->hBWE_TD, hb_synth[n], output_Fs, st->element_mode, st->L_frame, st->rf_flag, st->total_brate ); + } + else if ( st->bwidth == WB && st->last_extl == WB_TBE ) + { + GenTransition_WB( st->hBWE_TD, hb_synth[n], output_Fs ); + } + } + + /*---------------------------------------------------------------------* + * Postprocessing for ACELP/MDCT core switching + *---------------------------------------------------------------------*/ + + /* save synth and output in case of SBA DirAC stereo output as core switching is done outside of core decoder */ + if ( sba_dirac_stereo_flag && !( st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) ) + { + mvr2r( synth[n], hSCE->save_synth, output_frame ); + } + + if ( ( error = core_switching_post_dec( st, synth[n], output[n], p_output_mem, use_cldfb_for_dft, output_frame, 0 /*core_switching_flag*/, sba_dirac_stereo_flag, nchan_out, ( hCPE != NULL ) ? hCPE->last_element_mode : IVAS_SCE ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* for FD-CNG we need the delay compensation in the synth, so do this afterwards */ + if ( sba_dirac_stereo_flag && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) + { + mvr2r( synth[n], hSCE->save_synth, output_frame ); + } + + /* if we transition from inactive to active coding in MDCT-Stereo DTX and the output format is mono DMX, we need to sync the upsampled buffer between channels here */ + if ( n == 0 && st->element_mode == IVAS_CPE_MDCT && st->last_core == ACELP_CORE && st->core != ACELP_CORE && ( nchan_out == 1 || ( hCPE != NULL && hCPE->last_element_mode == IVAS_CPE_DFT ) ) ) + { + mvr2r( sts[0]->previoussynth, sts[1]->previoussynth, st->hTcxDec->L_frameTCX ); + } + + /*---------------------------------------------------------------------* + * Pre-processing for bandwidth switching + *---------------------------------------------------------------------*/ + + bw_switching_pre_proc( st, old_syn_12k8_16k[n], last_element_brate, nchan_out ); + + /*---------------------------------------------------------------------* + * WB TBE decoding + * WB BWE decoding + *---------------------------------------------------------------------*/ + + if ( st->extl == WB_TBE ) + { + /* WB TBE decoder */ + wb_tbe_dec( st, bwe_exc_extended[n], voice_factors[n], hb_synth[n] ); + } + else if ( st->element_mode == IVAS_CPE_TD && n == 1 && !tdm_LRTD_flag && st->extl != -1 && st->bws_cnt == 0 && st->extl_brate == 0 ) + { + /* do nothing */ + } + else if ( st->extl == WB_BWE && st->bws_cnt == 0 ) + { + /* WB BWE decoder */ + wb_bwe_dec( st, output[n], synth[n], hb_synth[n], use_cldfb_for_dft, output_frame, voice_factors[n], pitch_buf[n] ); + } + + /*---------------------------------------------------------------------* + * SWB(FB) TBE decoding + * SWB(FB) BWE decoding + *---------------------------------------------------------------------*/ + + if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 ) ) + { + /* SWB TBE decoder */ + swb_tbe_dec( st, hStereoICBWE, bwe_exc_extended[n], voice_factors[n], old_syn_12k8_16k[n], tmp_buffer /*fb_exc*/, hb_synth[n], pitch_buf[n] ); + + /* FB TBE decoder */ + if ( output_frame == L_FRAME48k && st->extl == FB_TBE ) + { + fb_tbe_dec( st, tmp_buffer /*fb_exc*/, hb_synth[n], tmp_buffer /*fb_synth_ref*/ ); + } + } + else if ( st->extl == SWB_BWE || st->extl == FB_BWE || ( output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) + { + /* SWB BWE decoder */ + swb_bwe_dec( st, output[n], synth[n], hb_synth[n], use_cldfb_for_dft, output_frame ); + } + + /*---------------------------------------------------------------------* + * FEC - recovery after lost HQ core (smoothing of the BWE component) + *---------------------------------------------------------------------*/ + + if ( st->prev_bfi && st->last_core == HQ_CORE && st->extl != -1 ) + { + tmp = FRAC_BWE_SMOOTH / output_frame; + + for ( i = 0; i < output_frame / FRAC_BWE_SMOOTH; i++ ) + { + hb_synth[n][i] *= ( i * tmp ); + } + } + + /*---------------------------------------------------------------------* + * SWB CNG + *---------------------------------------------------------------------*/ + + if ( ( output_frame >= L_FRAME32k && st->hTdCngDec != NULL ) || ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB && st->hTdCngDec != NULL ) ) + { + /* SHB CNG decoder */ + swb_CNG_dec( st, synth[n], hb_synth[n], sid_bw[n] ); + } + + /*-------------------------------------------------------------------* + * Inter-channel BWE decoding + *-------------------------------------------------------------------*/ + + if ( n == 0 && st->element_mode >= IVAS_CPE_DFT ) + { + stereo_icBWE_dec( hCPE, hb_synth[0], hb_synth[1], tmp_buffer /*fb_synth_ref*/, voice_factors[0], output_frame ); + } + + if ( st->element_mode == EVS_MONO ) + { + /*----------------------------------------------------------------* + * BFI waveform adjustment + *----------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE && !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) + { + tmps = NS2SA( output_Fs, DELAY_CLDFB_NS ); + + waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut, synth[n] + tmps, tmps, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); + + st->hPlcInfo->Pitch = 0; + } + } + + /*----------------------------------------------------------------* + * Transition and synchronization of BWE components + *----------------------------------------------------------------*/ + + if ( ( st->extl != -1 && ( st->extl != IGF_BWE || st->last_core == ACELP_CORE ) ) || ( st->bws_cnt > 0 && st->core == ACELP_CORE ) ) + { + /* Calculate an additional delay of extension layer components to be synchronized with ACELP synthesis */ + if ( st->L_frame == L_FRAME ) + { + /* TBE on top of ACELP@12.8kHz */ + tmps = NS2SA( output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); + } + else + { + if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) + { + /* HR SWB BWE on top of ACELP@16kHz */ + tmps = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); + } + else + { + /* TBE on top of ACELP@16kHz */ + tmps = NS2SA( output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); + } + } + + /* Smooth transitions when switching between different technologies */ + if ( !( ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE ) && st->last_core == ACELP_CORE ) && + ( st->extl != st->last_extl || ( st->extl == st->last_extl && ( st->core ^ st->last_core ) == HQ_CORE ) ) && !( st->extl == SWB_CNG && st->last_extl == SWB_TBE ) && ( st->element_mode != IVAS_CPE_TD || ( hCPE->element_mode == IVAS_CPE_TD && tdm_LRTD_flag ) ) ) + { + /* switching between BWE and TBE technologies */ + incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); + for ( i = 0; i < tmps; i++ ) + { + hb_synth[n][i] *= sin_table256[i * incr]; + } + + set_f( st->hb_prev_synth_buffer, 0.0f, tmps ); + } + else if ( tmps < st->old_bwe_delay ) + { + /* the previous frame was TBE on top of ACELP@16kHz and the current frame is TBE on top of ACELP@12.8kHz */ + incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); + for ( i = 0; i < tmps; i++ ) + { + tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr] + + st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; + } + + mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); + } + else if ( tmps > st->old_bwe_delay ) + { + /* the previous frame was TBE on top of ACELP@12.8kHz and the current frame is TBE on top of ACELP@16kHz */ + incr = (int16_t) ( L_FRAME / ( st->old_bwe_delay + 0.5f ) ); + for ( i = 0; i < st->old_bwe_delay; i++ ) + { + tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr]; + } + + for ( ; i < tmps; i++ ) + { + tmp_buffer[i] = 0.0f; + } + + for ( i = 0; i < st->old_bwe_delay; i++ ) + { + tmp_buffer[tmps - 1 - i] += st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; + } + + mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); + } + + if ( ( st->element_mode != IVAS_CPE_TD && !use_cldfb_for_dft ) /* IVAS-19: the logic seems to be not consistent between TD and DFT stereo and SCE -> verification needed also whether 1) it is correct here and 2) the DFT->(LR)TD transition is correct */ + || ( hCPE->element_mode == IVAS_CPE_TD && tdm_LRTD_flag ) ) + { + /* Delay hb_synth */ + delay_signal( hb_synth[n], output_frame, st->hb_prev_synth_buffer, tmps ); + } + else + { + mvr2r( hb_synth[n] + output_frame - tmps, st->hb_prev_synth_buffer, tmps ); + } + + st->old_bwe_delay = tmps; + if ( st->hBWE_TD != NULL ) + { + mvr2r( hb_synth[n], st->hBWE_TD->old_hb_synth, output_frame ); + } + + /* SWB CNG/DTX - calculate SHB energy */ + if ( output_frame >= L_FRAME32k && st->extl > SWB_CNG && st->core == ACELP_CORE && st->hTdCngDec != NULL ) + { + st->hTdCngDec->last_shb_ener = sum2_f( hb_synth[n], output_frame ) + 0.001f; + st->hTdCngDec->last_shb_ener /= (float) output_frame; + st->hTdCngDec->last_shb_ener = 10 * log10f( st->hTdCngDec->last_shb_ener ); + } + } + + if ( sba_dirac_stereo_flag ) + { + /* for SBA DirAC stereo output DFT Stereo core switching and updates are done in ivas_sba_dirac_stereo_dec() as hCPE is not available at this point */ + break; + } + + /*----------------------------------------------------------------* + * Post-processing + * - TCX-LTP Postfilter (except DFT stereo) + * - core switching in DFT stereo + * - updates for potential TD->DFT stereo switching + *----------------------------------------------------------------*/ + + if ( st->element_mode != IVAS_CPE_DFT ) + { + if ( st->element_mode != IVAS_CPE_MDCT ) + { + ivas_post_proc( hSCE, hCPE, n, synth[n], NULL, output_frame, 0 ); + } + + /* update OLA buffers - needed for switching to DFT stereo */ + stereo_td2dft_update( hCPE, n, output[n], synth[n], hb_synth[n], output_frame ); + } + else /* IVAS_CPE_DFT */ + { + if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + stereo_mdct2dft_update( hCPE, output[0], synth[0] ); + } + + stereo_dft_dec_core_switching( hCPE, output[0], synth[0], hb_synth[0], DFT, output_frame, use_cldfb_for_dft, 0 ); + + if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + /* mono output for non-residual coding modes uses CLDFB instead of DFT - requires DFT buffer update in case of bitrate switching */ + stereo_td2dft_update( hCPE, n, output[n], synth[n], hb_synth[n], output_frame ); + } + } + + mvr2r( synth[n], output[n], output_frame ); + +#ifdef DEBUG_PLOT + sendDebout( "mdct_dec", output_frame, 1, "aftLPD", MTV_FLOAT, output[n] ); +#endif + /*--------------------------------------------------------* + * Common updates + *--------------------------------------------------------*/ + + /* Save synthesis for HQ FEC */ + save_synthesis_hq_fec( st, output[n], output_frame, hCPE ); + + /* Updates */ + updt_dec_common( st, NORMAL_HQ_CORE, -1, output[n] ); + + } /* n_channels loop */ + + +#ifdef DEBUG_MODE_INFO + output_debug_mode_info_dec( sts, n_channels, output_frame, pitch_buf ); +#endif + + wmops_sub_end(); + return error; +} + + +#ifdef DEBUG_MODE_INFO +/*-------------------------------------------------------------------* + * output_debug_mode_info_dec() + * + * Debugging function to output most important codec parameters + *-------------------------------------------------------------------*/ + +void output_debug_mode_info_dec( + Decoder_State **sts, + const int16_t n_channels, + const int16_t output_frame, + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k] ) +{ + int16_t n; + Decoder_State *st; + + for ( n = 0; n < n_channels; n++ ) + { + float tmpF; + int16_t tmpS, id; + + if ( pitch_buf == NULL ) + { + /* very first frame is lost */ + id = 0; + } + else + { + id = sts[n]->id_element; + } + + st = sts[n]; + + dbgwrite( &st->core, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "core", n, id, DEC ) ); + dbgwrite( &st->extl, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "extl", n, id, DEC ) ); + dbgwrite( &st->bwidth, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "bwidth", n, id, DEC ) ); + dbgwrite( &st->cng_type, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "cng_type", n, id, DEC ) ); + dbgwrite( &st->clas_dec, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "clas", n, id, DEC ) ); + tmpF = st->extl_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "extl_brate", n, id, DEC ) ); + tmpF = st->core_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "core_brate", n, id, DEC ) ); + tmpF = st->total_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "total_brate", n, id, DEC ) ); + tmpS = st->bits_frame_nominal; + dbgwrite( &tmpS, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "bits_nominal", n, id, DEC ) ); + +#ifdef DEBUG_MODE_INFO_PLC + dbgwrite( &st->last_core_bfi, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "last_core_bfi", n, id, DEC ) ); + dbgwrite( &st->second_last_core, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "second_last_core", n, id, DEC ) ); + dbgwrite( &st->con_tcx, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "con_tcx", n, id, DEC ) ); + dbgwrite( &st->last_con_tcx, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "last_con_tcx", n, id, DEC ) ); + dbgwrite( &st->prev_bfi, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "prev_bfi", n, id, DEC ) ); + dbgwrite( &st->prev_old_bfi, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "prev_old_bfi", n, id, DEC ) ); +#endif + + if ( pitch_buf != NULL ) + { + dbgwrite( &st->coder_type, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "coder_type", n, id, DEC ) ); + } + else + { + tmpS = -1; + dbgwrite( &tmpS, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "coder_type", n, id, DEC ) ); + } + + if ( st->hTcxCfg != NULL ) + tmpS = st->hTcxCfg->coder_type; + else + tmpS = -1; +#ifdef DEBUG_MODE_TCX + dbgwrite( &tmpS, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "tcx_core_type", n, id, DEC ) ); +#endif + dbgwrite( &st->L_frame, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "L_frame", n, id, DEC ) ); + dbgwrite( &st->VAD, 2, 1, output_frame, fname( debug_dir, "VAD", n, id, DEC ) ); + dbgwrite( &st->flag_cna, sizeof( int16_t ), 1, output_frame, fname( debug_dir, "cna_flag", n, id, DEC ) ); + +#if ( defined DEBUG_MODE_ACELP ) || ( defined DEBUG_MODE_TCX ) + if ( pitch_buf != NULL && st->core != HQ_CORE ) + { + int16_t i; + for ( i = 0; i < ( st->L_frame / L_SUBFR ); i++ ) + { + dbgwrite( &pitch_buf[n][i], sizeof( float ), 1, output_frame / ( st->L_frame / L_SUBFR ), fname( debug_dir, "pitch_buf", n, id, DEC ) ); + } + } + else + { + tmpF = 0; + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "pitch_buf", n, id, DEC ) ); + } +#endif + +#ifdef DEBUG_MODE_ACELP + if ( st->core != ACELP_CORE ) + { + tmpF = 0.0f; + dbgwrite( &tmpF, sizeof( float ), 1, st->L_frame, fname( debug_dir, "exc", n, id, DEC ) ); + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "output.Fs", n, id, DEC ) ); + dbgwrite( &tmpF, sizeof( float ), 1, min( st->L_frame, L_FRAME16k ), fname( debug_dir, "syn.intFs", n, id, DEC ) ); + } + + if ( sts[0]->element_mode == IVAS_CPE_DFT ) + { + tmpF = 0.0f; + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "output.Fs", 1, id, DEC ) ); + dbgwrite( &tmpF, sizeof( float ), 1, L_FRAME, fname( debug_dir, "syn.intFs", 1, id, DEC ) ); + } +#endif + } + + return; +} +#endif diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c new file mode 100644 index 0000000000..cf0d5b508d --- /dev/null +++ b/lib_dec/ivas_cpe_dec.c @@ -0,0 +1,1040 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include + + +/*--------------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------------*/ + +static void read_stereo_mode_and_bwidth( CPE_DEC_HANDLE hCPE, const Decoder_Struct *st_ivas ); + + +/*--------------------------------------------------------------------------* + * ivas_cpe_dec() + * + * Channel Pair Element (CPE) decoding routine + *--------------------------------------------------------------------------*/ + +ivas_error ivas_cpe_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + float output[CPE_CHANNELS][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + int16_t i, n, n_channels; + int16_t nb_bits, last_core; + int16_t last_bwidth; + int16_t tdm_ratio_idx; + float outputHB[CPE_CHANNELS][L_FRAME48k]; /* 'float' buffer for output HB synthesis, both channels */ + float res_buf[STEREO_DFT_N_8k]; + CPE_DEC_HANDLE hCPE; + Decoder_State **sts; + int16_t last_tdm_LRTD_flag; + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_cpe_dec" ); + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + hCPE = st_ivas->hCPE[cpe_id]; + sts = hCPE->hCoreCoder; + + last_core = sts[0]->last_core; + last_bwidth = sts[0]->last_bwidth; + + sts[0]->BER_detect |= st_ivas->BER_detect; + sts[1]->BER_detect |= st_ivas->BER_detect; + + last_tdm_LRTD_flag = 0; + if ( hCPE->hStereoTD != NULL ) + { + last_tdm_LRTD_flag = hCPE->hStereoTD->tdm_LRTD_flag; + } + + /*------------------------------------------------------------------* + * Read stereo technology info & audio bandwidth + *-----------------------------------------------------------------*/ + + read_stereo_mode_and_bwidth( hCPE, st_ivas ); + + /*----------------------------------------------------------------* + * dynamically allocate data structures depending on the actual stereo mode + *----------------------------------------------------------------*/ + + if ( ( error = stereo_memory_dec( ivas_total_brate, hCPE, nb_bits_metadata, st_ivas->hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + n_channels = CPE_CHANNELS; + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + n_channels = 1; /* in DFT stereo, only M channel is coded */ + } + + tdm_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; + + for ( n = 0; n < n_channels; n++ ) + { + sts[n]->idchan = n; + sts[n]->element_mode = hCPE->element_mode; + + if ( !st_ivas->bfi ) + { + sts[n]->tdm_LRTD_flag = 0; + } + +#ifdef DEBUGGING + sts[n]->id_element = cpe_id + st_ivas->nSCE; +#endif + /* TD stereo parameters */ + if ( hCPE->hStereoTD != NULL ) + { + hCPE->hStereoTD->tdm_lp_reuse_flag = 0; + hCPE->hStereoTD->tdm_low_rate_mode = 0; + hCPE->hStereoTD->tdm_Pitch_reuse_flag = 0; + } + } + + /*----------------------------------------------------------------* + * Resets/updates in case of stereo switching + *----------------------------------------------------------------*/ + + stereo_switching_dec( hCPE, ivas_total_brate ); + + /*----------------------------------------------------------------* + * Configuration of stereo decoder + *----------------------------------------------------------------*/ + + /* Force to MODE1 in IVAS */ + for ( n = 0; n < n_channels; n++ ) + { + sts[n]->codec_mode = MODE1; + } + + if ( hCPE->element_mode != IVAS_CPE_MDCT && ( hCPE->element_brate != hCPE->last_element_brate || hCPE->last_element_mode != hCPE->element_mode || sts[0]->ini_frame == 0 || ( ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) ) ) + { + if ( st_ivas->hQMetaData != NULL && ivas_total_brate > IVAS_SID_4k4 ) + { + stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + else + { + /* Note: This only works for stereo operation. If DTX would be applied for multiple CPEs a different bitrate signalling is needed */ + if ( ivas_total_brate <= IVAS_SID_4k4 ) + { + stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, ivas_total_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + else + { + stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + } + } + + if ( hCPE->element_mode == IVAS_CPE_TD && last_tdm_LRTD_flag != hCPE->hStereoTD->tdm_LRTD_flag ) + { + if ( hCPE->hStereoTD->tdm_LRTD_flag ) + { + sts[0]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); + sts[1]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); + } + else + { + stereo_dft_config( NULL, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + } + + /*----------------------------------------------------------------* + * Set bitrates per channel + * Set bitstream buffers per channel + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( !st_ivas->bfi ) + { + /* Update DFT Stereo memories */ + stereo_dft_dec_update( hCPE->hStereoDft, output_frame, 0 ); + + if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_4k4 ) + { + if ( ivas_total_brate == FRAME_NO_DATA ) + { + hCPE->hCoreCoder[n]->core_brate = ivas_total_brate; + hCPE->hCoreCoder[0]->total_brate = ivas_total_brate; + } + else + { + hCPE->hCoreCoder[n]->core_brate = SID_2k40; + } + } + + /* read DFT Stereo side info */ + nb_bits = (int16_t) ( ( hCPE->element_brate ) / FRAMES_PER_SEC - 0.8f * sts[0]->bits_frame_nominal ); + sts[1]->bit_stream = sts[0]->bit_stream + ivas_total_brate / FRAMES_PER_SEC - 1 - nb_bits_metadata; + + if ( ivas_total_brate == IVAS_SID_4k4 ) + { + nb_bits -= SID_FORMAT_NBITS; + sts[1]->bit_stream -= SID_FORMAT_NBITS; + } + + if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && ivas_total_brate > IVAS_SID_4k4 ) + { + sts[0]->total_brate = hCPE->element_brate; /* Only mono downmix was transmitted in this case */ + } + else + { + stereo_dft_dec_read_BS( ivas_total_brate, hCPE->element_brate, &sts[0]->total_brate, sts[1], hCPE->hStereoDft, sts[0]->bwidth, output_frame, res_buf, &nb_bits, hCPE->hStereoCng->coh, st_ivas->ivas_format ); + } + + /* subtract metadata bitbudget */ + sts[0]->total_brate -= ( nb_bits_metadata * FRAMES_PER_SEC ); + } + else + { + hCPE->hStereoDft->sg_mem_corrupt = 1; + } + } + else if ( hCPE->element_mode == IVAS_CPE_TD ) + { + /* signal bitrate for BW selection in the SCh */ + sts[0]->bits_frame_channel = 0; + sts[1]->bits_frame_channel = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); + if ( st_ivas->hQMetaData != NULL ) + { + sts[1]->bits_frame_channel -= st_ivas->hQMetaData->metadata_max_bits; + } + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + if ( is_DTXrate( ivas_total_brate ) == 1 && ( sts[0]->first_CNG == 0 || sts[1]->first_CNG == 0 ) ) + { + if ( ( error = initMdctStereoDtxData( hCPE ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* this is just for initialization, the true values of "total_brate" and "bits_frame_channel" are set later */ + for ( n = 0; n < n_channels; n++ ) + { + if ( ivas_total_brate == IVAS_SID_4k4 || ivas_total_brate == IVAS_SID_5k ) + + { + sts[n]->total_brate = SID_2k40; + sts[1]->bit_stream = sts[0]->bit_stream + SID_2k40 / FRAMES_PER_SEC; + } + else + { + /*total bitrate must be set to the element bitrate to avoid false BER if bits read are larger than half the bitrate*/ + sts[n]->total_brate = hCPE->element_brate; + } + sts[n]->bits_frame_nominal = (int16_t) ( sts[n]->total_brate / FRAMES_PER_SEC ); + sts[n]->bits_frame_channel = (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) / n_channels ); + } + + if ( !st_ivas->hMCT ) + { + if ( st_ivas->ivas_format == SBA_FORMAT && ivas_total_brate == IVAS_SID_5k ) + { + for ( n = 0; n < n_channels; n++ ) + { + sts[n]->bits_frame_channel -= nb_bits_metadata / n_channels; + } + } + else + + { + /* subtract metadata bitbudget */ /* IVAS_fmToDo: TBC whether it is not better to distribute the metadata bits equally between 2 channels */ + sts[0]->bits_frame_channel -= nb_bits_metadata; + } + } + } + + /*----------------------------------------------------------------* + * Core codec configuration + *----------------------------------------------------------------*/ + + for ( n = 0; n < n_channels; n++ ) + { + /* set ACELP12k8 / ACELP16k flag for flexible ACELP core */ + sts[n]->flag_ACELP16k = set_ACELP_flag( hCPE->element_mode, hCPE->element_brate, sts[n]->total_brate, n, ( hCPE->hStereoTD != NULL ? hCPE->hStereoTD->tdm_LRTD_flag : 0 ), sts[n]->bwidth, sts[n]->cng_type ); + } + + for ( n = 0; n < n_channels; n++ ) + { + /* set VAD flag */ + if ( is_DTXrate( ivas_total_brate ) == 1 ) + { + sts[n]->VAD = 0; + sts[n]->active_cnt = 0; + if ( sts[1] != NULL ) + { + sts[1]->active_cnt = 0; + } + } + else + { + sts[n]->VAD = 1; + sts[n]->active_cnt++; + sts[n]->active_cnt = min( sts[n]->active_cnt, 100 ); + } + + /* set CNA flag */ + if ( ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->element_brate <= CNA_MAX_BRATE_DFT_STEREO ) || hCPE->element_brate <= CNA_MAX_BRATE_STEREO ) + { + sts[n]->flag_cna = 1; + } + else + { + sts[n]->flag_cna = 0; + } + } + + /* configure TD stereo decoder */ + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + if ( !st_ivas->bfi ) + { + tdm_configure_dec( hCPE, &tdm_ratio_idx, nb_bits_metadata ); + + sts[1]->bit_stream = sts[0]->bit_stream + ( sts[0]->total_brate / FRAMES_PER_SEC ); + } + else + { + sts[1]->coder_type = sts[1]->last_coder_type; + tdm_ratio_idx = hCPE->hStereoTD->tdm_last_ratio_idx; + } + } + + /*----------------------------------------------------------------* + * Core Decoder + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode != IVAS_CPE_DFT || ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) + { + if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC && ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ) ) + { + if ( ( error = ivas_core_dec( st_ivas, NULL, hCPE, st_ivas->hMCT, n_channels, output, outputHB, NULL, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = ivas_core_dec( NULL, NULL, hCPE, st_ivas->hMCT, n_channels, output, outputHB, NULL, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + if ( st_ivas->hMCT ) + { + wmops_sub_end(); + + return error; + } + + /*----------------------------------------------------------------* + * Stereo decoder & upmixing + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT && !( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) + { + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; + + /* core decoder */ + if ( ( error = ivas_core_dec( NULL, NULL, hCPE, st_ivas->hMCT, n_channels, output, outputHB, DFT, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* DFT Stereo residual decoding */ + if ( hCPE->hStereoDft->res_cod_band_max > 0 && !st_ivas->bfi ) + { + stereo_dft_dec_res( hCPE, res_buf, output[1] ); + + stereo_dft_dec_analyze( hCPE, output[1], DFT, 1, L_FRAME8k, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); + } + + /* DFT stereo CNG */ + stereo_dtf_cng( hCPE, ivas_total_brate, DFT, output_frame ); + + /* decoding */ + if ( hCPE->nchan_out == 1 ) + { + stereo_dft_unify_dmx( hCPE->hStereoDft, sts[0], DFT, hCPE->input_mem[1], hCPE->hStereoCng->prev_sid_nodata ); + } + else + { + stereo_dft_dec( hCPE->hStereoDft, sts[0], DFT, hCPE->input_mem[1], hCPE->hStereoCng, 0 ); + } + + /* synthesis iFFT */ + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + stereo_dft_dec_synthesize( hCPE, DFT, n, output[n], output_frame ); + } + } + else if ( hCPE->element_mode == IVAS_CPE_TD ) + { + if ( hCPE->last_element_mode != IVAS_CPE_TD && sts[0]->tdm_LRTD_flag ) + { + hCPE->hStereoTD->tdm_last_ratio_idx = tdm_ratio_idx; + } + + /* TD stereo upmixing */ + stereo_tdm_combine( hCPE, output[0], output[1], output_frame, 0, tdm_ratio_idx ); + if ( sts[0]->tdm_LRTD_flag ) + { + stereo_tdm_combine( hCPE, outputHB[0], outputHB[1], output_frame, 1, tdm_ratio_idx ); + } + + hCPE->hStereoCng->last_tdm_idx = hCPE->hStereoTD->tdm_last_ratio_idx; + hCPE->hStereoTD->tdm_last_ratio_idx = tdm_ratio_idx; + + if ( hCPE->nchan_out == 1 ) + { + /* Scale the Right channel with the gain */ + stereo_tca_scale_R_channel( hCPE, output[1], output_frame ); + + /* stereo to mono downmix */ + for ( i = 0; i < output_frame; i++ ) + { + output[0][i] = ( output[0][i] + output[1][i] ) * 0.5f; + } + } + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->nchan_out == 1 && ( is_DTXrate( ivas_total_brate ) == 0 || ( is_DTXrate( ivas_total_brate ) == 1 && is_DTXrate( st_ivas->hDecoderConfig->last_ivas_total_brate ) == 0 ) ) ) + { + applyDmxMdctStereo( hCPE, output, output_frame ); + } + + /*----------------------------------------------------------------* + * Update parameters for stereo CNA + *----------------------------------------------------------------*/ + + stereo_cna_update_params( hCPE, output, output_frame, tdm_ratio_idx ); + + /*----------------------------------------------------------------* + * Synthesis synchronization between CPE modes + *----------------------------------------------------------------*/ + + synchro_synthesis( ivas_total_brate, hCPE, output, output_frame, 0 ); + +#ifndef DEBUG_STEREO_DFT_OUTRESPRED + /*----------------------------------------------------------------* + * IC-BWE: output LB and HB mix in ACELP mode + *----------------------------------------------------------------*/ + +#ifndef DEBUG_STEREO_DFT_NOCORE + stereo_icBWE_decproc( hCPE, output, outputHB, last_core, last_bwidth, output_frame ); +#endif + + smooth_dft2td_transition( hCPE, output, output_frame ); + + /*----------------------------------------------------------------* + * Temporal ICA, stereo adjustment and upmix + *----------------------------------------------------------------*/ + + stereo_tca_dec( hCPE, output, output_frame ); +#endif + + /*----------------------------------------------------------------* + * Common Stereo updates + *----------------------------------------------------------------*/ + + hCPE->last_element_brate = hCPE->element_brate; + hCPE->last_element_mode = hCPE->element_mode; + + if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) + { + stereo_cng_dec_update( hCPE, ivas_total_brate ); + } + + st_ivas->BER_detect |= sts[0]->BER_detect; + st_ivas->BER_detect |= sts[1]->BER_detect; + +#ifdef DEBUG_MODE_INFO + { + float tmpF = ivas_total_brate / 1000.0f; + + n = 1; + if ( st_ivas->ini_frame == 0 && frame > 0 ) + { + /* in case first frame(s) is/are lost, write info several times */ + n = (int16_t) frame - st_ivas->ini_frame + 1; + } + + for ( i = 0; i < n; i++ ) + { + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "element_brate", 0, cpe_id, DEC ) ); + dbgwrite( &hCPE->element_mode, 2, 1, output_frame, fname( debug_dir, "element_mode", 0, cpe_id, DEC ) ); + + for ( int16_t j = 0; j < CPE_CHANNELS; j++ ) + { + dbgwrite( output[j], sizeof( float ), output_frame, 1, fname( debug_dir, "output.cpe", j, cpe_id, DEC ) ); + } + } + } +#endif + + wmops_sub_end(); + return error; +} + + +/*------------------------------------------------------------------------- + * create_cpe_dec() + * + * Create, allocate and initialize IVAS decoder CPE handle + *-------------------------------------------------------------------------*/ + +ivas_error create_cpe_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + const int32_t element_brate /* i : element bitrate */ +) +{ + int16_t i, n; + CPE_DEC_HANDLE hCPE; + Decoder_State *st; + int32_t output_Fs; + ivas_error error; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * Allocate CPE handle + *-----------------------------------------------------------------*/ + + if ( ( hCPE = (CPE_DEC_HANDLE) count_malloc( sizeof( CPE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); + } + + /*-----------------------------------------------------------------* + * Initialization - general parameters + *-----------------------------------------------------------------*/ + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + + hCPE->cpe_id = cpe_id; + + hCPE->element_brate = element_brate; + hCPE->last_element_brate = hCPE->element_brate; + hCPE->element_mode = st_ivas->element_mode_init; + hCPE->last_element_mode = st_ivas->element_mode_init; + + hCPE->hStereoDft = NULL; + hCPE->hStereoDftDmx = NULL; + hCPE->hStereoTD = NULL; + hCPE->hStereoMdct = NULL; + hCPE->hStereoTCA = NULL; + hCPE->hStereoICBWE = NULL; + + hCPE->hStereoCng = NULL; + + hCPE->stereo_switching_counter = 10; + hCPE->NbFrameMod = 7; + hCPE->lt_es_em = 0.0f; + + /* Note: nchan_out is considered to be related to the structure. This is nchan_out for CPE and for MASA_format is always 2. */ + if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT || ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + { + hCPE->nchan_out = CPE_CHANNELS; + } + else + { + hCPE->nchan_out = min( CPE_CHANNELS, st_ivas->hDecoderConfig->nchan_out ); + } + + if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_4k4 ) + { + hCPE->nchan_out = 1; + } + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + set_f( hCPE->prev_hb_synth[n], 0, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); + set_f( hCPE->prev_synth[n], 0, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ) ); + } + + /*-----------------------------------------------------------------* + * DFT stereo I/O Buffers: allocate and initialize + *-----------------------------------------------------------------*/ + + for ( i = 0; i < CPE_CHANNELS; i++ ) + { + if ( st_ivas->ivas_format == STEREO_FORMAT || st_ivas->ivas_format == MASA_FORMAT || + ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) || st_ivas->sba_dirac_stereo_flag ) + { + if ( ( hCPE->input_mem[i] = (float *) count_malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } + set_zero( hCPE->input_mem[i], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + + if ( ( hCPE->input_mem_LB[i] = (float *) count_malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } + set_zero( hCPE->input_mem_LB[i], STEREO_DFT32MS_OVL_16k ); + + if ( i == 0 ) + { + if ( ( hCPE->input_mem_BPF[0] = (float *) count_malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } + set_zero( hCPE->input_mem_BPF[0], STEREO_DFT32MS_OVL_16k ); + } + + if ( ( hCPE->output_mem[i] = (float *) count_malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } + set_zero( hCPE->output_mem[i], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + + if ( i < hCPE->nchan_out ) + { + if ( ( hCPE->prev_synth_chs[i] = (float *) count_malloc( sizeof( float ) * NS2SA( output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } + set_zero( hCPE->prev_synth_chs[i], NS2SA( output_Fs, FRAME_SIZE_NS ) ); + } + else + { + hCPE->prev_synth_chs[i] = NULL; + } + } + else + { + hCPE->input_mem[i] = NULL; + hCPE->input_mem_LB[i] = NULL; + if ( i == 0 ) + { + hCPE->input_mem_BPF[0] = NULL; + } + hCPE->output_mem[i] = NULL; + hCPE->prev_synth_chs[i] = NULL; + } + } + + /*-----------------------------------------------------------------* + * CoreCoder, 2 instances: allocate and initialize + *-----------------------------------------------------------------*/ + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( st_ivas->sba_dirac_stereo_flag ) + { + /* for SBA DirAC stereo output CPE element is only used for upmix, core coder is found in SCE element used for core decoding */ + break; + } + + if ( ( st = (DEC_CORE_HANDLE) count_malloc( sizeof( Decoder_State ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); + } + + copy_decoder_config( st_ivas, st ); + + st->total_brate = hCPE->element_brate / ( CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT && ( n + cpe_id * CPE_CHANNELS ) == LFE_CHANNEL ) + { + st->mct_chan_mode = MCT_CHAN_MODE_LFE; + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( ( error = init_decoder( st, n, st_ivas->mc_mode ) ) != IVAS_ERR_OK ) +#else + if ( ( error = init_decoder( st, n ) ) != IVAS_ERR_OK ) +#endif + { + return error; + } + + hCPE->hCoreCoder[n] = st; + } + + /*-----------------------------------------------------------------* + * DFT stereo initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT || st_ivas->sba_dirac_stereo_flag ) + { + if ( ( error = stereo_dft_dec_create( &( hCPE->hStereoDft ), hCPE->element_brate, output_Fs, st_ivas->sba_dirac_stereo_flag ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*-----------------------------------------------------------------* + * DFT stereo mono DMX initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode != IVAS_CPE_MDCT && hCPE->nchan_out == 1 ) + { + if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); + } + + stereo_dft_dmx_out_reset( hCPE->hStereoDftDmx ); + } + + /*-----------------------------------------------------------------* + * Temporal inter-channel alignment initialization + *-----------------------------------------------------------------*/ + + if ( ( hCPE->element_mode != IVAS_CPE_MDCT || ( st_ivas->ivas_format == STEREO_FORMAT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE ) ) && hCPE->nchan_out != 1 ) + { + if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) count_malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); + } + + stereo_tca_init_dec( hCPE->hStereoTCA ); + } + + /*-----------------------------------------------------------------* + * Stereo IC BWE initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode != IVAS_CPE_MDCT && !( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 ) ) + { + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE\n" ) ); + } + + stereo_icBWE_init_dec( hCPE->hStereoICBWE ); + } + + /*-----------------------------------------------------------------* + * TD stereo initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); + } + + stereo_td_init_dec( hCPE->hStereoTD, hCPE->last_element_mode ); + } + + /*-----------------------------------------------------------------* + * MDCT stereo initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->nCPE == 1 ) + { + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo MDCT\n" ) ); + } + if ( st_ivas->ivas_format == STEREO_FORMAT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE ) + { + hCPE->hStereoMdct->use_itd = 1; + } + else + { + hCPE->hStereoMdct->use_itd = 0; + } + hCPE->hStereoMdct->reverse_dmx = 0; + hCPE->hStereoMdct->smooth_ratio = 1.f; + set_s( hCPE->hStereoMdct->prev_ms_mask[0], 0, MAX_SFB ); + set_s( hCPE->hStereoMdct->prev_ms_mask[1], 0, MAX_SFB ); + hCPE->hStereoMdct->lastCoh = 1.f; + } + + /*-----------------------------------------------------------------* + * Stereo CNG initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) count_malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo CNG\n" ) ); + } + stereo_cng_init_dec( hCPE->hStereoCng, &hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->frameSize ); + } + + st_ivas->hCPE[cpe_id] = hCPE; + + return error; +} + + +/*------------------------------------------------------------------------- + * destroy_cpe_dec() + * + * Destroy and deallocate IVAS decoder CPE handle + *-------------------------------------------------------------------------*/ + +void destroy_cpe_dec( + CPE_DEC_HANDLE hCPE /* i/o: CPE decoder structure */ +) +{ + int16_t n; + Decoder_State *st; + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st = hCPE->hCoreCoder[n]; + + if ( st != NULL ) + { + destroy_core_dec( st ); + + count_free( st ); + st = NULL; + } + } + + if ( hCPE->hStereoDft != NULL ) + { + stereo_dft_dec_destroy( &( hCPE->hStereoDft ) ); + hCPE->hStereoDft = NULL; + } + + if ( hCPE->hStereoDftDmx != NULL ) + { + count_free( hCPE->hStereoDftDmx ); + hCPE->hStereoDftDmx = NULL; + } + + if ( hCPE->hStereoTD != NULL ) + { + count_free( hCPE->hStereoTD ); + hCPE->hStereoTD = NULL; + } + + if ( hCPE->hStereoMdct != NULL ) + { + count_free( hCPE->hStereoMdct ); + hCPE->hStereoMdct = NULL; + } + + if ( hCPE->hStereoTCA != NULL ) + { + count_free( hCPE->hStereoTCA ); + hCPE->hStereoTCA = NULL; + } + + if ( hCPE->hStereoICBWE != NULL ) + { + count_free( hCPE->hStereoICBWE ); + hCPE->hStereoICBWE = NULL; + } + + if ( hCPE->input_mem_LB[0] != NULL ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + count_free( hCPE->input_mem_LB[n] ); + hCPE->input_mem_LB[n] = NULL; + count_free( hCPE->input_mem[n] ); + hCPE->input_mem[n] = NULL; + count_free( hCPE->output_mem[n] ); + hCPE->output_mem[n] = NULL; + if ( hCPE->prev_synth_chs[n] != NULL ) + { + count_free( hCPE->prev_synth_chs[n] ); + hCPE->prev_synth_chs[n] = NULL; + } + } + count_free( hCPE->input_mem_BPF[0] ); + hCPE->input_mem_BPF[0] = NULL; + } + + if ( hCPE->hStereoCng != NULL ) + { + count_free( hCPE->hStereoCng ); + hCPE->hStereoCng = NULL; + } + + count_free( hCPE ); + + return; +} + + +/*------------------------------------------------------------------------- + * read_stereo_mode_and_bwidth() + * + * Read stereo technology info & audio bandwidth + *-------------------------------------------------------------------------*/ + +static void read_stereo_mode_and_bwidth( + CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ + const Decoder_Struct *st_ivas /* i : decoder main structure */ +) +{ + Decoder_State **sts; + + /*-----------------------------------------------------------------* + * BFI or NO_DATA frame: Use stereo parameters from last (active) frame + *-----------------------------------------------------------------*/ + + if ( st_ivas->bfi || st_ivas->hDecoderConfig->ivas_total_brate < IVAS_SID_4k4 ) + { + + hCPE->element_mode = hCPE->last_element_mode; + } + + /*-----------------------------------------------------------------* + * SID frame: get element mode from SID side info + *-----------------------------------------------------------------*/ + + else if ( st_ivas->hDecoderConfig->ivas_total_brate == IVAS_SID_4k4 || st_ivas->hDecoderConfig->ivas_total_brate == IVAS_SID_5k ) + { + switch ( st_ivas->sid_format ) + { + case SID_DFT_STEREO: + hCPE->element_mode = IVAS_CPE_DFT; + /* Read CNG type */ + hCPE->hCoreCoder[0]->cng_type = get_next_indice( hCPE->hCoreCoder[0], 1 ); + + /* Read BW information in SID */ + hCPE->hCoreCoder[0]->bwidth = get_next_indice( hCPE->hCoreCoder[0], 2 ); + break; + case SID_MDCT_STEREO: + /* 2TC SBA DTX also uses MDCT-Stereo DTX */ + case SID_SBA_2TC: + hCPE->element_mode = IVAS_CPE_MDCT; + break; + case SID_SBA_1TC: + assert( "Forbidden value for sid format in CPE (SBA 1TC), should have already been adressed earlier" ); + break; + case SID_MASA_1TC: + hCPE->element_mode = IVAS_SCE; + break; + case SID_MASA_2TC: + /* 2TC MASA DTX uses MDCT or DFT based core */ + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + hCPE->element_mode = IVAS_CPE_DFT; + } + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + /* Read CNG type */ + hCPE->hCoreCoder[0]->cng_type = get_next_indice( hCPE->hCoreCoder[0], 1 ); + + /* Read BW information in SID */ + hCPE->hCoreCoder[0]->bwidth = get_next_indice( hCPE->hCoreCoder[0], 2 ); + } + break; + default: + /* this is what has been done for all modes previously, may need adaptation in the future */ + hCPE->element_mode = hCPE->last_element_mode; + break; + } + } + + /*-----------------------------------------------------------------* + * active frame: read element mode and audio bandwidth info + *-----------------------------------------------------------------*/ + + else + { + sts = hCPE->hCoreCoder; + if ( st_ivas->hMCT && hCPE->cpe_id != 0 ) + { + sts[0]->bwidth = st_ivas->hCPE[0]->hCoreCoder[0]->bwidth; + sts[1]->bwidth = st_ivas->hCPE[0]->hCoreCoder[0]->bwidth; + } + else + { + /* read stereo technology info */ + if ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && st_ivas->hMCT == NULL ) + { + hCPE->element_mode = get_next_indice( sts[0], NBITS_ELEMENT_MODE ) + IVAS_CPE_DFT; + } + else + { + hCPE->element_mode = IVAS_CPE_MDCT; + } + + /* read the bandwidth */ + if ( hCPE->element_brate < MIN_BRATE_FB_STEREO ) + { + /* WB and SWB are supported */ + sts[0]->bwidth = get_next_indice( sts[0], 1 ) + WB; + sts[1]->bwidth = sts[0]->bwidth; + } + else + { + /* WB, SWB and FB are supported */ + sts[0]->bwidth = get_next_indice( sts[0], NBITS_BWIDTH ); + sts[1]->bwidth = sts[0]->bwidth; + } + } + } + + return; +} diff --git a/lib_dec/ivas_crend.c b/lib_dec/ivas_crend.c new file mode 100644 index 0000000000..772101ecff --- /dev/null +++ b/lib_dec/ivas_crend.c @@ -0,0 +1,1138 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_dec.h" +#include "ivas_stat_dec.h" +#include +#include "ivas_rom_binaural_crend_head.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * ivas_hrtf_init() + * + * Initialize hHrtf handle + *------------------------------------------------------------------------*/ + +static ivas_error ivas_hrtf_init( + HRTFS_DATA *hHrtf /* i/o: HRTF handle */ +) +{ + int16_t i, j; + + if ( hHrtf == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + hHrtf->latency_s = 0; + hHrtf->max_num_ir = 0; + hHrtf->max_num_iterations = 0; + hHrtf->gain_lfe = 0; + hHrtf->index_frequency_max_diffuse = 0; + + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + hHrtf->inv_diffuse_weight[i] = 0; + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = 0; + hHrtf->pIndex_frequency_max[i][j] = NULL; + hHrtf->pOut_to_bin_re[i][j] = NULL; + hHrtf->pOut_to_bin_im[i][j] = NULL; + } + } + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = 0; + hHrtf->pIndex_frequency_max_diffuse[j] = NULL; + hHrtf->pOut_to_bin_diffuse_re[j] = NULL; + hHrtf->pOut_to_bin_diffuse_im[j] = NULL; + } + + return IVAS_ERR_OK; +} + +/*------------------------------------------------------------------------- + * ivas_hrtf_open() + * + * Open hHrtf handle + *------------------------------------------------------------------------*/ + +static ivas_error ivas_hrtf_open( + HRTFS_HANDLE *hHrtf /* o : HRTF handle */ +) +{ + HRTFS_HANDLE pState; + + if ( *hHrtf == NULL ) + { + if ( ( pState = (HRTFS_HANDLE) count_malloc( sizeof( HRTFS_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_UNEXPECTED_NULL_POINTER, "Can not allocate memory for SPAR decoder\n" ); + } + + ivas_hrtf_init( pState ); + + *hHrtf = pState; + } + else + { + return IVAS_ERR_INTERNAL; + } + + return ( IVAS_ERR_OK ); +} + + +/*------------------------------------------------------------------------- + * ivas_hrtf_close() + * + * Close hHrtf handle + *------------------------------------------------------------------------*/ + +static ivas_error ivas_hrtf_close( + HRTFS_HANDLE *hHrtf /* i/o: HRTF handle */ +) +{ + if ( *hHrtf == NULL || hHrtf == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + count_free( *hHrtf ); + *hHrtf = NULL; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_crend_init_from_rom() + * + * Allocate and initialize crend renderer handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_crend_init_from_rom( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t i, j, tmp; + int32_t output_Fs; + AUDIO_CONFIG intern_config; + HRTFS_HANDLE hHrtf; + + hHrtf = st_ivas->hHrtf; + output_Fs = st_ivas->hDecoderConfig->output_Fs; + + intern_config = st_ivas->intern_config; + + if ( intern_config == AUDIO_CONFIG_BINAURAL || intern_config == AUDIO_CONFIG_BINAURAL_ROOM ) + { + return IVAS_ERR_INTERNAL_FATAL; + } + + if ( hHrtf == NULL ) + { + if ( ivas_hrtf_open( &hHrtf ) != IVAS_ERR_OK ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for HRTF handle" ); + } + } + + hHrtf->max_num_ir = audioCfg2channels( intern_config ); + + if ( hHrtf->max_num_ir <= 0 ) + { + return IVAS_ERR_INTERNAL_FATAL; + } + + /* Do all error checks up front so that the nested if later is easier */ + if ( st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV && st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Encountered unsupported renderer type" ); + } + + if ( intern_config != AUDIO_CONFIG_5_1 && intern_config != AUDIO_CONFIG_5_1_2 && intern_config != AUDIO_CONFIG_5_1_4 && + intern_config != AUDIO_CONFIG_7_1 && intern_config != AUDIO_CONFIG_7_1_4 && + intern_config != AUDIO_CONFIG_FOA && intern_config != AUDIO_CONFIG_HOA2 && intern_config != AUDIO_CONFIG_HOA3 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Encountered unsupported transport config in Crend" ); + } + + if ( ( ( st_ivas->hRenderConfig != NULL ) && !st_ivas->hRenderConfig->roomAcoustics.use_brir ) || ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV ) ) + { + if ( intern_config == AUDIO_CONFIG_5_1 || intern_config == AUDIO_CONFIG_5_1_2 || intern_config == AUDIO_CONFIG_5_1_4 || + intern_config == AUDIO_CONFIG_7_1 || intern_config == AUDIO_CONFIG_7_1_4 ) + { + hHrtf->max_num_ir -= 1; /* subtract LFE */ + hHrtf->gain_lfe = GAIN_LFE; + + if ( output_Fs == 48000 ) + { + hHrtf->latency_s = CRendBin_Combined_HRIR_latency_s_48kHz; + hHrtf->max_num_iterations = CRendBin_Combined_HRIR_max_num_iterations_48kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz[j]; + } + } + else if ( output_Fs == 32000 ) + { + hHrtf->latency_s = CRendBin_Combined_HRIR_latency_s_32kHz; + hHrtf->max_num_iterations = CRendBin_Combined_HRIR_max_num_iterations_32kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz[j]; + } + } + else if ( output_Fs == 16000 ) + { + hHrtf->latency_s = CRendBin_Combined_HRIR_latency_s_16kHz; + hHrtf->max_num_iterations = CRendBin_Combined_HRIR_max_num_iterations_16kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz[j]; + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); + } + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + if ( intern_config == AUDIO_CONFIG_5_1 ) + { + tmp = channelIndex_CICP6[i]; + } + else if ( intern_config == AUDIO_CONFIG_7_1 ) + { + tmp = channelIndex_CICP12[i]; + } + else if ( intern_config == AUDIO_CONFIG_5_1_2 ) + { + tmp = channelIndex_CICP14[i]; + } + else if ( intern_config == AUDIO_CONFIG_5_1_4 ) + { + tmp = channelIndex_CICP16[i]; + } + else if ( intern_config == AUDIO_CONFIG_7_1_4 ) + { + tmp = channelIndex_CICP19[i]; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Channel configuration not specified!\n\n" ); + } + + if ( output_Fs == 48000 ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[tmp]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_Combined_HRIR_num_iterations_48kHz[tmp][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[tmp][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_HRIR_coeff_re_48kHz[tmp][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_HRIR_coeff_im_48kHz[tmp][j]; + } + } + else if ( output_Fs == 32000 ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[tmp]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_Combined_HRIR_num_iterations_32kHz[tmp][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[tmp][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_HRIR_coeff_re_32kHz[tmp][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_HRIR_coeff_im_32kHz[tmp][j]; + } + } + else if ( output_Fs == 16000 ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[tmp]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_Combined_HRIR_num_iterations_16kHz[tmp][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[tmp][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_HRIR_coeff_re_16kHz[tmp][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_HRIR_coeff_im_16kHz[tmp][j]; + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); + } + } + } + else if ( intern_config == AUDIO_CONFIG_FOA || intern_config == AUDIO_CONFIG_HOA2 || intern_config == AUDIO_CONFIG_HOA3 ) + { + if ( output_Fs == 48000 ) + { + hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s_48kHz; + hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_48kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz; + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[i]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_48kHz[i][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[i][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_48kHz[i][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_48kHz[i][j]; + } + } + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[j]; + } + } + else if ( output_Fs == 32000 ) + { + hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s_32kHz; + hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_32kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz; + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[i]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_32kHz[i][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[i][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_32kHz[i][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_32kHz[i][j]; + } + } + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[j]; + } + } + else if ( output_Fs == 16000 ) + { + hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s_16kHz; + hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_16kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz; + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[i]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_16kHz[i][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[i][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_16kHz[i][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_16kHz[i][j]; + } + } + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[j]; + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); + } + } + } + else if ( ( ( st_ivas->hRenderConfig != NULL ) && st_ivas->hRenderConfig->roomAcoustics.use_brir ) || ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) + { + if ( intern_config == AUDIO_CONFIG_5_1 || intern_config == AUDIO_CONFIG_5_1_2 || intern_config == AUDIO_CONFIG_5_1_4 || + intern_config == AUDIO_CONFIG_7_1 || intern_config == AUDIO_CONFIG_7_1_4 ) + { + hHrtf->max_num_ir -= 1; /* subtract LFE */ + hHrtf->gain_lfe = GAIN_LFE; + + if ( output_Fs == 48000 ) + { + hHrtf->latency_s = CRendBin_Combined_BRIR_latency_s_48kHz; + hHrtf->max_num_iterations = CRendBin_Combined_BRIR_max_num_iterations_48kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[j]; + } + } + else if ( output_Fs == 32000 ) + { + hHrtf->latency_s = CRendBin_Combined_BRIR_latency_s_32kHz; + hHrtf->max_num_iterations = CRendBin_Combined_BRIR_max_num_iterations_32kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[j]; + } + } + else if ( output_Fs == 16000 ) + { + hHrtf->latency_s = CRendBin_Combined_BRIR_latency_s_16kHz; + hHrtf->max_num_iterations = CRendBin_Combined_BRIR_max_num_iterations_16kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[j]; + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); + } + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + if ( intern_config == AUDIO_CONFIG_5_1 ) + { + tmp = channelIndex_CICP6[i]; + } + else if ( intern_config == AUDIO_CONFIG_7_1 ) + { + tmp = channelIndex_CICP12[i]; + } + else if ( intern_config == AUDIO_CONFIG_5_1_2 ) + { + tmp = channelIndex_CICP14[i]; + } + else if ( intern_config == AUDIO_CONFIG_5_1_4 ) + { + tmp = channelIndex_CICP16[i]; + } + else if ( intern_config == AUDIO_CONFIG_7_1_4 ) + { + tmp = channelIndex_CICP19[i]; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Channel configuration not specified!\n\n" ); + } + + if ( output_Fs == 48000 ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[tmp]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_Combined_BRIR_num_iterations_48kHz[tmp][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[tmp][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_BRIR_coeff_re_48kHz[tmp][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_BRIR_coeff_im_48kHz[tmp][j]; + } + } + else if ( output_Fs == 32000 ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[tmp]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_Combined_BRIR_num_iterations_32kHz[tmp][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[tmp][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_BRIR_coeff_re_32kHz[tmp][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_BRIR_coeff_im_32kHz[tmp][j]; + } + } + else if ( output_Fs == 16000 ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[tmp]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_Combined_BRIR_num_iterations_16kHz[tmp][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[tmp][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_BRIR_coeff_re_16kHz[tmp][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_BRIR_coeff_im_16kHz[tmp][j]; + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); + } + } + } + else if ( intern_config == AUDIO_CONFIG_FOA || intern_config == AUDIO_CONFIG_HOA2 || intern_config == AUDIO_CONFIG_HOA3 ) + { + if ( output_Fs == 48000 ) + { + hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s_48kHz; + hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_48kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz; + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[i]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_48kHz[i][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[i][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_48kHz[i][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_48kHz[i][j]; + } + } + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[j]; + } + } + else if ( output_Fs == 32000 ) + { + hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s_32kHz; + hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_32kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz; + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[i]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_32kHz[i][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[i][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_32kHz[i][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_32kHz[i][j]; + } + } + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[j]; + } + } + else if ( output_Fs == 16000 ) + { + hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s_16kHz; + hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_16kHz; + hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz; + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[i]; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_16kHz[i][j]; + hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[i][j]; + hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_16kHz[i][j]; + hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_16kHz[i][j]; + } + } + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[j]; + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL, "Unsupported intern_config type in Crend" ); + } + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL, "Unsupported renderer type in Crend" ); + } + + st_ivas->hHrtf = hHrtf; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_crend_open() + * + * Allocate and initialize Crend renderer handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_crend_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t i, subframe_length; + int32_t max_total_ir_len, k; + HRTFS_HANDLE hHrtf; + CREND_HANDLE hCrend; + ivas_error error; + + error = IVAS_ERR_OK; + subframe_length = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES; + + if ( ( st_ivas->hHrtf == NULL ) && ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) + { + if ( ( error = ivas_crend_init_from_rom( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ( hCrend = (CREND_HANDLE) count_malloc( sizeof( CREND_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); + } + + hCrend->lfe_delay_line = NULL; + + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + hCrend->freq_buffer_re[i] = NULL; + hCrend->freq_buffer_im[i] = NULL; + } + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + hCrend->prev_out_buffer[i] = NULL; + } + + hCrend->freq_buffer_re_diffuse = NULL; + hCrend->freq_buffer_im_diffuse = NULL; + hCrend->hReverb = NULL; + hCrend->delay_line_rw_index = 0; + hCrend->diffuse_delay_line_rw_index = 0; + hCrend->hTrack = NULL; + hCrend->m_fYaw = 0; + hCrend->m_fPitch = 0; + hCrend->m_fRoll = 0; + + hHrtf = st_ivas->hHrtf; + + if ( ( hHrtf != NULL ) && ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) + { + max_total_ir_len = hHrtf->max_num_iterations * subframe_length; + + for ( i = 0; i < hHrtf->max_num_ir; i++ ) + { + if ( ( hCrend->freq_buffer_re[i] = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); + } + for ( k = 0; k < max_total_ir_len; k++ ) + { + hCrend->freq_buffer_re[i][k] = 0; + } + + if ( ( hCrend->freq_buffer_im[i] = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); + } + for ( k = 0; k < max_total_ir_len; k++ ) + { + hCrend->freq_buffer_im[i][k] = 0; + } + } + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + if ( ( hCrend->prev_out_buffer[i] = (float *) count_malloc( sizeof( float ) * subframe_length ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); + } + for ( k = 0; k < subframe_length; k++ ) + { + hCrend->prev_out_buffer[i][k] = 0; + } + } + + max_total_ir_len = hHrtf->num_iterations_diffuse[0] * subframe_length; + + if ( max_total_ir_len > 0 ) + { + if ( ( hCrend->freq_buffer_re_diffuse = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); + } + for ( k = 0; k < max_total_ir_len; k++ ) + { + hCrend->freq_buffer_re_diffuse[k] = 0; + } + + if ( ( hCrend->freq_buffer_im_diffuse = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); + } + for ( k = 0; k < max_total_ir_len; k++ ) + { + hCrend->freq_buffer_im_diffuse[k] = 0; + } + } + else + { + hCrend->freq_buffer_re_diffuse = NULL; + hCrend->freq_buffer_im_diffuse = NULL; + } + + max_total_ir_len = (int16_t) ( hHrtf->latency_s * st_ivas->hDecoderConfig->output_Fs + 0.5f ) + subframe_length; + if ( max_total_ir_len > 0 ) + { + if ( ( hCrend->lfe_delay_line = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); + } + for ( k = 0; k < max_total_ir_len; k++ ) + { + hCrend->lfe_delay_line[k] = 0; + } + } + else + { + hCrend->lfe_delay_line = NULL; + } + + if ( st_ivas->hDecoderConfig->Opt_Headrotation ) + { + if ( ( hCrend->hTrack = (ivas_orient_trk_state_t *) count_malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" ); + } + + ivas_orient_trk_Init( hCrend->hTrack ); + } + else + { + hCrend->hTrack = NULL; + } + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM && st_ivas->ivas_format == MC_FORMAT && st_ivas->hDecoderConfig->Opt_Headrotation ) + { + if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth, st_ivas->hIntSetup.ls_elevation, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ( ( st_ivas->hRenderConfig != NULL ) && st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) ) + { + if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), hHrtf, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + hCrend->hReverb = NULL; + } + + st_ivas->binaural_latency_ns = (int32_t) ( st_ivas->hHrtf->latency_s * 1000000000.f ); + } + + + st_ivas->hCrend = hCrend; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_crend_close() + * + * Deallocate Crend renderer handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_crend_close( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t i; + + if ( st_ivas->hHrtf != NULL ) + { + ivas_hrtf_close( &st_ivas->hHrtf ); + } + + if ( st_ivas->hCrend != NULL ) + { + if ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD ) + { + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + if ( st_ivas->hCrend->freq_buffer_re[i] != NULL ) + { + count_free( st_ivas->hCrend->freq_buffer_re[i] ); + st_ivas->hCrend->freq_buffer_re[i] = NULL; + } + if ( st_ivas->hCrend->freq_buffer_im[i] != NULL ) + { + count_free( st_ivas->hCrend->freq_buffer_im[i] ); + st_ivas->hCrend->freq_buffer_im[i] = NULL; + } + } + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + if ( st_ivas->hCrend->prev_out_buffer[i] != NULL ) + { + count_free( st_ivas->hCrend->prev_out_buffer[i] ); + st_ivas->hCrend->prev_out_buffer[i] = NULL; + } + } + + if ( st_ivas->hCrend->lfe_delay_line != NULL ) + { + count_free( st_ivas->hCrend->lfe_delay_line ); + st_ivas->hCrend->lfe_delay_line = NULL; + } + + if ( st_ivas->hCrend->freq_buffer_re_diffuse != NULL ) + { + count_free( st_ivas->hCrend->freq_buffer_re_diffuse ); + st_ivas->hCrend->freq_buffer_re_diffuse = NULL; + } + + if ( st_ivas->hCrend->freq_buffer_im_diffuse != NULL ) + { + count_free( st_ivas->hCrend->freq_buffer_im_diffuse ); + st_ivas->hCrend->freq_buffer_im_diffuse = NULL; + } + + if ( st_ivas->hCrend->hTrack != NULL ) + { + count_free( st_ivas->hCrend->hTrack ); + st_ivas->hCrend->hTrack = NULL; + } + } + ivas_reverb_close( &st_ivas->hCrend->hReverb ); + + count_free( st_ivas->hCrend ); + st_ivas->hCrend = NULL; + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_crend_convolver() + * + * Convolver block + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_crend_convolver( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float pcm_in[][L_FRAME48k], + float pcm_out[][L_FRAME48k], + const int16_t i_ts ) +{ + float *pIn; + float *pFreq_buf_re; + float *pFreq_buf_im; + float *pFreq_filt_re; + float *pFreq_filt_im; + int16_t i, j, m, nchan_out, subframe_length, nchan_intern, idx_in; + float pOut[L_FRAME48k * 2]; + float tmp_out_re[L_FRAME48k]; + float tmp_out_im[L_FRAME48k]; + int32_t offset, offset_in, offset_diffuse; + int32_t output_Fs, k; + AUDIO_CONFIG intern_config; + + intern_config = st_ivas->intern_config; + nchan_intern = audioCfg2channels( intern_config ); + nchan_out = st_ivas->hDecoderConfig->nchan_out; + output_Fs = st_ivas->hDecoderConfig->output_Fs; + subframe_length = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES; + + offset = st_ivas->hCrend->delay_line_rw_index * subframe_length; /* subframe_length * ( st_ivas->hHrtf->max_num_iterations - 1 ); */ + offset_diffuse = st_ivas->hCrend->diffuse_delay_line_rw_index * subframe_length; /* subframe_length *( st_ivas->hHrtf->num_iterations_diffuse[0] - 1 ); */ + + if ( st_ivas->hHrtf->num_iterations_diffuse[0] > 0 ) + { + set_zero( &st_ivas->hCrend->freq_buffer_re_diffuse[offset_diffuse], subframe_length ); + set_zero( &st_ivas->hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); + } + + i = 0; + for ( idx_in = 0; idx_in < nchan_intern; idx_in++ ) + { + pIn = &pcm_in[idx_in][i_ts * subframe_length]; + if ( st_ivas->hIntSetup.index_lfe[0] != idx_in ) + { + if ( st_ivas->hHrtf->num_iterations_diffuse[0] > 0 ) + { + pFreq_buf_re = &st_ivas->hCrend->freq_buffer_re_diffuse[offset_diffuse]; + pFreq_buf_im = &st_ivas->hCrend->freq_buffer_im_diffuse[offset_diffuse]; + pFreq_filt_re = &st_ivas->hCrend->freq_buffer_re[i][offset]; + pFreq_filt_im = &st_ivas->hCrend->freq_buffer_im[i][offset]; + + for ( k = 0; k < st_ivas->hHrtf->index_frequency_max_diffuse; k++ ) + { + pFreq_buf_re[k] += pFreq_filt_re[k] * st_ivas->hHrtf->inv_diffuse_weight[i]; + pFreq_buf_im[k] += pFreq_filt_im[k] * st_ivas->hHrtf->inv_diffuse_weight[i]; + } + } + + pFreq_buf_re = &st_ivas->hCrend->freq_buffer_re[i][offset]; + pFreq_buf_im = &st_ivas->hCrend->freq_buffer_im[i][offset]; + + ivas_mdft( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length ); + i++; + } + } + + for ( j = 0; j < nchan_out; j++ ) + { + set_zero( tmp_out_re, subframe_length ); + set_zero( tmp_out_im, subframe_length ); + + i = 0; + for ( idx_in = 0; idx_in < nchan_intern; idx_in++ ) + { + if ( idx_in != st_ivas->hIntSetup.index_lfe[0] ) + { + offset = 0; + for ( m = 0; m < st_ivas->hHrtf->num_iterations[i][j]; m++ ) + { + offset_in = ( st_ivas->hCrend->delay_line_rw_index + st_ivas->hHrtf->max_num_iterations - st_ivas->hHrtf->num_iterations[i][j] + m + 1 ); + offset_in = offset_in % ( st_ivas->hHrtf->max_num_iterations ); + offset_in = offset_in * subframe_length; + pFreq_buf_re = &st_ivas->hCrend->freq_buffer_re[i][offset_in]; + pFreq_buf_im = &st_ivas->hCrend->freq_buffer_im[i][offset_in]; + pFreq_filt_re = &st_ivas->hHrtf->pOut_to_bin_re[i][j][offset]; + pFreq_filt_im = &st_ivas->hHrtf->pOut_to_bin_im[i][j][offset]; + + for ( k = 0; k < st_ivas->hHrtf->pIndex_frequency_max[i][j][m]; k++ ) + { + tmp_out_re[k] += pFreq_buf_re[k] * pFreq_filt_re[k] - pFreq_buf_im[k] * pFreq_filt_im[k]; + tmp_out_im[k] += pFreq_buf_re[k] * pFreq_filt_im[k] + pFreq_buf_im[k] * pFreq_filt_re[k]; + } + offset = offset + k; + } + i++; + } + } + + offset = 0; + for ( m = 0; m < st_ivas->hHrtf->num_iterations_diffuse[j]; m++ ) + { + offset_diffuse = ( st_ivas->hCrend->diffuse_delay_line_rw_index + m + 1 ); + offset_diffuse = offset_diffuse % st_ivas->hHrtf->num_iterations_diffuse[0]; + offset_diffuse = offset_diffuse * subframe_length; + pFreq_buf_re = &st_ivas->hCrend->freq_buffer_re_diffuse[offset_diffuse]; + pFreq_buf_im = &st_ivas->hCrend->freq_buffer_im_diffuse[offset_diffuse]; + pFreq_filt_re = &st_ivas->hHrtf->pOut_to_bin_diffuse_re[j][offset]; + pFreq_filt_im = &st_ivas->hHrtf->pOut_to_bin_diffuse_im[j][offset]; + + for ( k = 0; k < st_ivas->hHrtf->pIndex_frequency_max_diffuse[j][m]; k++ ) + { + tmp_out_re[k] += pFreq_buf_re[k] * pFreq_filt_re[k] - pFreq_buf_im[k] * pFreq_filt_im[k]; + tmp_out_im[k] += pFreq_buf_re[k] * pFreq_filt_im[k] + pFreq_buf_im[k] * pFreq_filt_re[k]; + } + offset = offset + k; + } + + ivas_imdft( tmp_out_re, tmp_out_im, pOut, subframe_length ); + + pFreq_buf_re = &pcm_out[j][i_ts * subframe_length]; + for ( k = 0; k < subframe_length; k++ ) + { + pFreq_buf_re[k] = pOut[k] + st_ivas->hCrend->prev_out_buffer[j][k]; + st_ivas->hCrend->prev_out_buffer[j][k] = pOut[k + subframe_length]; + } + } + + st_ivas->hCrend->delay_line_rw_index++; + st_ivas->hCrend->delay_line_rw_index = st_ivas->hCrend->delay_line_rw_index % ( st_ivas->hHrtf->max_num_iterations ); + if ( st_ivas->hHrtf->num_iterations_diffuse[0] > 0 ) + { + st_ivas->hCrend->diffuse_delay_line_rw_index++; + st_ivas->hCrend->diffuse_delay_line_rw_index = st_ivas->hCrend->diffuse_delay_line_rw_index % ( st_ivas->hHrtf->num_iterations_diffuse[0] ); + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_crend_process() + * + * Process call for IVAS Crend renderer + *-----------------------------------------------------------------------------------------*/ + +ivas_error ivas_crend_process( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k] /* i/o: input/output audio channels */ +) +{ + int16_t i, nchan_out, output_frame; + int16_t subframe_len, subframe_idx; + float pcm_tmp[MAX_TRANSPORT_CHANNELS][L_FRAME48k]; + AUDIO_CONFIG intern_config; + ivas_error error; + + wmops_sub_start( "ivas_crend_process" ); + + intern_config = st_ivas->intern_config; + nchan_out = st_ivas->hDecoderConfig->nchan_out; + output_frame = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); + subframe_len = output_frame / MAX_PARAM_SPATIAL_SUBFRAMES; + + for ( subframe_idx = 0; subframe_idx < MAX_PARAM_SPATIAL_SUBFRAMES; subframe_idx++ ) + { + if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData && st_ivas->hHeadTrackData->num_quaternions >= 0 ) + { + /* Orientation tracking */ + if ( st_ivas->hCrend->hTrack != NULL ) + { + if ( st_ivas->hDecoderConfig->orientation_tracking == IVAS_ORIENT_TRK_AVG ) + { + ivas_orient_trk_SetTrackingType( st_ivas->hCrend->hTrack, OTR_TRACKING_AVG_ORIENT ); + } + else + { + ivas_orient_trk_SetTrackingType( st_ivas->hCrend->hTrack, OTR_TRACKING_REF_ORIENT ); + } + + /* get current subframe quaternion and convert to euler angles */ + Quat2Euler( st_ivas->hHeadTrackData->Quaternions[subframe_idx], &( st_ivas->hCrend->m_fYaw ), &( st_ivas->hCrend->m_fPitch ), &( st_ivas->hCrend->m_fRoll ) ); + ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hCrend->hTrack, st_ivas->hCrend->m_fYaw, st_ivas->hCrend->m_fPitch, st_ivas->hCrend->m_fRoll ); + ivas_orient_trk_Process( st_ivas->hCrend->hTrack ); + ivas_orient_trk_GetTrackedOrientation( st_ivas->hCrend->hTrack, &( st_ivas->hCrend->m_fYaw ), &( st_ivas->hCrend->m_fPitch ), &( st_ivas->hCrend->m_fRoll ) ); + } + + /* Rotation in SHD for: + MC with elevation (5_1_2 / 5_1_4 / 7_1_4) -> BINAURAL + SBA SPAR -> BINAURAL or BINAURAL_ROOM + */ + if ( intern_config == AUDIO_CONFIG_FOA || intern_config == AUDIO_CONFIG_HOA2 || intern_config == AUDIO_CONFIG_HOA3 ) + { + rotateFrame_shd( st_ivas->hHeadTrackData, output, st_ivas->hDecoderConfig->output_Fs, subframe_len, st_ivas->hIntSetup, subframe_idx ); + } + /* Rotation in SD for MC -> BINAURAL_ROOM */ + else if ( st_ivas->ivas_format != ISM_FORMAT && st_ivas->hIntSetup.is_loudspeaker_setup ) + { + rotateFrame_sd( st_ivas->hHeadTrackData, output, st_ivas->hDecoderConfig->output_Fs, subframe_len, st_ivas->hIntSetup, st_ivas->hEFAPdata, subframe_idx ); + } + } + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + { + if ( ( intern_config == AUDIO_CONFIG_FOA ) || ( intern_config == AUDIO_CONFIG_HOA2 ) || ( intern_config == AUDIO_CONFIG_HOA3 ) || + ( intern_config == AUDIO_CONFIG_5_1 ) || ( intern_config == AUDIO_CONFIG_7_1 ) || + ( intern_config == AUDIO_CONFIG_5_1_2 ) || ( intern_config == AUDIO_CONFIG_5_1_4 ) || ( intern_config == AUDIO_CONFIG_7_1_4 ) ) + { + ivas_crend_convolver( st_ivas, output, pcm_tmp, subframe_idx ); + + if ( st_ivas->hCrend->hReverb != NULL ) + { + if ( ( error = ivas_reverb_process( st_ivas->hCrend->hReverb, intern_config, 1, output, pcm_tmp, subframe_idx ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else + { + return IVAS_ERR_INVALID_INPUT_FORMAT; + } + } + else + { + return IVAS_ERR_INTERNAL_FATAL; + } + } + + /* move to output */ + for ( i = 0; i < nchan_out; i++ ) + { + mvr2r( pcm_tmp[i], output[i], output_frame ); + } + + return IVAS_ERR_OK; +} diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c new file mode 100644 index 0000000000..c669a281a4 --- /dev/null +++ b/lib_dec/ivas_dec.c @@ -0,0 +1,582 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*--------------------------------------------------------------------------* + * ivas_dec() + * + * Principal IVAS decoder routine + *--------------------------------------------------------------------------*/ + +ivas_error ivas_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + int16_t *data /* o : output synthesis signal */ +) +{ + int16_t n, output_frame, nchan_out; + Decoder_State *st; /* used for bitstream handling */ + float output[MAX_OUTPUT_CHANNELS][L_FRAME48k]; /* 'float' buffer for output synthesis, MAX_OUTPUT_CHANNELS channels */ /* IVAS_fmToDo: buffer can be allocated dynamically based on the actual number of output channels */ + int16_t nchan_remapped; + float output_lfe_ch[L_FRAME48k]; + int16_t nb_bits_metadata[MAX_SCE]; + int32_t output_Fs, ivas_total_brate; + AUDIO_CONFIG output_config; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_dec" ); + + /*----------------------------------------------------------------* + * IVAS decoder setup + * - read IVAS format signaling + * - read IVAS format specific signalling + * - initialize decoder in the first frame based on IVAS format and number of transport channels + * - reconfigure the decoder when the number of TC or IVAS total bitrate change + *----------------------------------------------------------------*/ + + if ( st_ivas->bfi == 0 ) + { + if ( ( error = ivas_dec_setup( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*----------------------------------------------------------------* + * Initialization of local vars after struct has been set + *----------------------------------------------------------------*/ + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + nchan_out = st_ivas->hDecoderConfig->nchan_out; + output_config = st_ivas->hDecoderConfig->output_config; + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + + /*----------------------------------------------------------------* + * Decoding + Rendering + *----------------------------------------------------------------*/ + + if ( st_ivas->bfi && st_ivas->ini_frame == 0 ) + { + /* zero output when first frame(s) is lost */ + for ( n = 0; n < nchan_out; n++ ) + { + set_f( output[n], 0.0f, output_frame ); + } + +#ifdef DEBUG_MODE_INFO + create_sce_dec( st_ivas, 0, ivas_total_brate ); + output_debug_mode_info_dec( st_ivas->hSCE[0]->hCoreCoder, 1, output_frame, NULL ); + destroy_sce_dec( st_ivas->hSCE[0] ); + st_ivas->hSCE[0] = NULL; +#endif + } + else if ( st_ivas->ivas_format == STEREO_FORMAT ) + { + st_ivas->hCPE[0]->element_brate = ivas_total_brate; + + if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* HP filtering */ + for ( n = 0; n < min( nchan_out, st_ivas->nchan_transport ); n++ ) + { + hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); + } + + /* Rendering */ + if ( st_ivas->renderer_type == RENDERER_MC ) + { + ivas_ls_setup_conversion( st_ivas, output_frame, output ); + } + } + else if ( st_ivas->ivas_format == ISM_FORMAT ) + { + /* Metadata decoding and configuration */ + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + ivas_ism_metadata_dec( ivas_total_brate, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, st_ivas->hDirAC->hParamIsm ); + } + else /* ISM_MODE_DISC */ + { + ivas_ism_metadata_dec( ivas_total_brate, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, NULL ); + } + + for ( n = 0; n < st_ivas->nchan_transport; n++ ) + { + if ( ( error = ivas_sce_dec( st_ivas, n, &output[n], output_frame, nb_bits_metadata[n] ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* HP filtering */ + hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); + } + + /* Rendering */ + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + ivas_param_ism_params_to_masa_param_mapping( st_ivas ); + ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport ); + } + else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + { + ivas_mono_downmix_render_passive( st_ivas, output, output_frame ); + } + else if ( st_ivas->renderer_type == RENDERER_PARAM_ISM || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + { + ivas_param_ism_dec( st_ivas, output ); + + if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + { + /* Convert CICP19 -> Ambisonics */ + ivas_mc2sba( st_ivas->hIntSetup, output, output_frame, st_ivas->hOutSetup.ambisonics_order, 0.f ); + } + } + } + else /* ISM_MODE_DISC */ + { + /* Loudspeaker or Ambisonics rendering */ + if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + { + ivas_mono_downmix_render_passive( st_ivas, output, output_frame ); + } + else if ( st_ivas->renderer_type == RENDERER_TD_PANNING || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + { + /* Convert to CICPxx; used also for ISM->CICP19->binaural_room rendering */ + ivas_ism_render( st_ivas, output, output_frame ); + } + else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) + { + /* Convert to Ambisonics; used also for ISM->HOA3->binaural rendering */ + ivas_ism2sba( output, st_ivas->hIsmRendererData, st_ivas->hIsmMetaData, st_ivas->nchan_transport, output_frame, st_ivas->hIntSetup.ambisonics_order ); + } + + /* Binaural rendering */ + if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + { + ObjRenderIVASFrame( st_ivas, output, output_frame ); + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + { + ivas_crend_process( st_ivas, output ); + ivas_binaural_add_LFE( st_ivas, output_frame, output ); + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + ivas_binaural_cldfb( st_ivas, output ); + } + } + } + else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) + { + set_s( nb_bits_metadata, 0, MAX_SCE ); + + /* read parameters from the bitstream */ + if ( ( st_ivas->hQMetaData != NULL ) && + ( st_ivas->sba_mode != SBA_MODE_SPAR ) ) + { + st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + + if ( st_ivas->ivas_format == SBA_FORMAT ) + { + ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], st_ivas->sba_mode, 0 ); + } + else + { + if ( ( error = ivas_masa_decode( st_ivas, st, &nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + if ( ( st_ivas->hQMetaData != NULL ) && ( SPAR_DIRAC_SPLIT_START_BAND < IVAS_MAX_NUM_BANDS ) ) + { + st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], + st_ivas->sba_mode, st_ivas->hSpar->hSparFoa->dirac_to_spar_md_bands ); + } + if ( ( error = ivas_spar_dec( st_ivas, nb_bits_metadata ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st_ivas->nchan_transport == CPE_CHANNELS && st_ivas->nCPE >= 1 ) + { + st_ivas->hCPE[0]->element_brate = ivas_total_brate; + } + + /* core-decoding of transport channels */ + if ( st_ivas->nSCE == 1 ) + { + if ( ( error = ivas_sce_dec( st_ivas, 0, &output[0], output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE == 1 ) + { + if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE > 1 ) + { + if ( ( error = ivas_mct_dec( st_ivas, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* TCs remapping */ + nchan_remapped = st_ivas->nchan_transport; + if ( st_ivas->sba_dirac_stereo_flag ) + { + nchan_remapped = CPE_CHANNELS; + ivas_sba_dirac_stereo_dec( st_ivas, output, output_frame ); + } + else if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && + ( ivas_total_brate > IVAS_SID_4k4 || ( ivas_total_brate <= IVAS_SID_4k4 && st_ivas->nCPE > 0 && st_ivas->hCPE[0]->nchan_out == 1 ) ) ) + { + nchan_remapped = 1; /* Only one channel transported */ + } + + /* HP filtering */ +#ifndef DEBUG_SPAR_BYPASS_EVS_CODEC + for ( n = 0; n < nchan_remapped; n++ ) + { + hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); + } +#endif + if ( st_ivas->ivas_format == SBA_FORMAT ) + { + nchan_remapped = ivas_sba_remapTCs( output, st_ivas, output_frame ); + + if ( st_ivas->sba_mode == SBA_MODE_SPAR && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) + { + ivas_sba_mix_matrix_determiner( st_ivas, output, nchan_remapped, output_frame ); + } + } + + if ( st_ivas->ivas_format == MASA_FORMAT ) + { + ivas_masa_prerender( st_ivas, output, output_frame ); + } + else if ( st_ivas->ivas_format == SBA_FORMAT && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) + { + float gain = 0.8414f; /* Todo: Temporary gain for roughly matching the loudness. To be tuned later together with other outputs. */ + + for ( n = 0; n < nchan_remapped; n++ ) + { + v_multc( output[n], gain, output[n], output_frame ); + } + } + + /* Loudspeakers, Ambisonics or Binaural rendering */ + if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC && st_ivas->sba_mode == SBA_MODE_DIRAC ) + { + ivas_sba_linear_renderer( output, output_frame, nchan_remapped, output_config, st_ivas->hOutSetup, st_ivas->hoa_dec_mtx ); + } + else if ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->sba_mode != SBA_MODE_SPAR ) ) + { + ivas_dirac_dec( st_ivas, output, nchan_remapped, NULL, NULL, -1 ); + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + ivas_dirac_dec_binaural( st_ivas, output, nchan_remapped ); + } + else if ( + ( ( st_ivas->renderer_type == RENDERER_DIRAC || st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC ) && st_ivas->sba_mode == SBA_MODE_SPAR ) || + ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) ) + { + ivas_sba_upmixer_renderer( st_ivas, output, nchan_remapped, output_frame ); + } + } + else if ( st_ivas->ivas_format == MC_FORMAT ) + { + st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + + /* LFE channel decoder */ + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + st_ivas->hCPE[1]->hCoreCoder[1]->hTcxCfg = st_ivas->hCPE[1]->hCoreCoder[0]->hTcxCfg; + ivas_lfe_dec( st_ivas->hLFE, st, output_frame, st_ivas->bfi, output_lfe_ch ); + } + + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + if ( ( error = ivas_mct_dec( st_ivas, output, output_frame, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + mvr2r( output_lfe_ch, output[LFE_CHANNEL], output_frame ); + + /* HP filtering */ + for ( n = 0; n < st_ivas->nchan_transport; n++ ) + { + if ( n != LFE_CHANNEL ) + { + hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); + } + } + + if ( st_ivas->transport_config != st_ivas->intern_config && ( st_ivas->intern_config == AUDIO_CONFIG_FOA || st_ivas->intern_config == AUDIO_CONFIG_HOA2 || st_ivas->intern_config == AUDIO_CONFIG_HOA3 ) ) + { + ivas_mc2sba( st_ivas->hTransSetup, output, output_frame, st_ivas->hIntSetup.ambisonics_order, GAIN_LFE ); + } + + /* Rendering */ + if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + { + ivas_crend_process( st_ivas, output ); + ivas_binaural_add_LFE( st_ivas, output_frame, output ); + } + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + ivas_binaural_add_LFE( st_ivas, output_frame, output ); + ivas_binaural_cldfb( st_ivas, output ); + } + else if ( st_ivas->renderer_type == RENDERER_MC ) + { + ivas_ls_setup_conversion( st_ivas, output_frame, output ); + } + else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + { + ivas_mc2sba( st_ivas->hIntSetup, output, output_frame, st_ivas->hOutSetup.ambisonics_order, 0.f ); + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + { + ObjRenderIVASFrame( st_ivas, output, output_frame ); + ivas_binaural_add_LFE( st_ivas, output_frame, output ); + } + } + else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + /* read Parametric MC parameters from the bitstream */ + ivas_param_mc_dec_read_BS( ivas_total_brate, st, st_ivas->hParamMC, &nb_bits_metadata[0] ); + + if ( st_ivas->nCPE == 1 ) + { + if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE > 1 ) + { + if ( ( error = ivas_mct_dec( st_ivas, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* HP filtering */ + for ( n = 0; n < st_ivas->nchan_transport; n++ ) + { + hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); + } + + /* Rendering */ + if ( output_config == AUDIO_CONFIG_MONO || output_config == AUDIO_CONFIG_STEREO ) + { + ivas_ls_setup_conversion( st_ivas, output_frame, output ); + } + else + { + ivas_param_mc_dec( st_ivas, output ); + } + } + else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + if ( st_ivas->hOutSetup.separateChannelEnabled ) + { + st = st_ivas->hCPE[0]->hCoreCoder[0]; /* Metadata is always with CPE in the case of separated channel */ + } + + /* read McMASA parameters from the bitstream */ + if ( ( error = ivas_masa_decode( st_ivas, st, &nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( st_ivas->hOutSetup.separateChannelEnabled ) + { + /* Decode the transport audio signals */ + if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Identify the index of the separated channel */ + n = st_ivas->hOutSetup.separateChannelIndex; + + /* Decode the separated channel to output[n] to be combined with the synthesized channels */ + if ( ( error = ivas_sce_dec( st_ivas, 0, &output[n], output_frame, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Delay the separated channel to sync with CLDFB delay of the DirAC synthesis, and synthesize the LFE signal. */ + if ( output_config == AUDIO_CONFIG_5_1 || output_config == AUDIO_CONFIG_7_1 || + output_config == AUDIO_CONFIG_5_1_4 || output_config == AUDIO_CONFIG_7_1_4 || + output_config == AUDIO_CONFIG_5_1_2 || + ( output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe > 0 ) ) + { + ivas_lfe_synth_with_filters( st_ivas->hMasa->hMasaLfeSynth, output, output_frame, n, LFE_CHANNEL ); + } + else if ( output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe == 0 ) + { + /* Delay the separated channel to sync with the DirAC rendering */ + delay_signal( output[n], output_frame, st_ivas->hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, st_ivas->hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size ); + } + } + else + { + if ( st_ivas->nSCE == 1 ) + { + if ( ( error = ivas_sce_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE == 1 ) + { + if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + if ( st_ivas->sba_dirac_stereo_flag ) /* use the flag to trigger the DFT upmix */ + { + ivas_sba_dirac_stereo_dec( st_ivas, output, output_frame ); + } + + /* HP filtering */ + for ( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) + { + hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); + } + + /* Rendering */ + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport ); + } + else if ( st_ivas->renderer_type == RENDERER_DIRAC || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) /* rendering to CICPxx and Ambisonics */ + { + ivas_dirac_dec( st_ivas, output, st_ivas->nchan_transport, NULL, NULL, -1 ); + + if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + { + ivas_mc2sba( st_ivas->hIntSetup, output, output_frame, st_ivas->hOutSetup.ambisonics_order, 0.f ); + } + else if ( st_ivas->intern_config == AUDIO_CONFIG_5_1 && ( output_config == AUDIO_CONFIG_5_1_2 || output_config == AUDIO_CONFIG_5_1_4 || output_config == AUDIO_CONFIG_7_1 ) ) + { + for ( n = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; n < st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; n++ ) + { + set_zero( output[n], output_frame ); + } + } + } + else if ( st_ivas->renderer_type == RENDERER_MCMASA_MONO_STEREO ) + { + ivas_mono_stereo_downmix_mcmasa( st_ivas, output, output_frame ); + } + } + } + + + /*----------------------------------------------------------------* + * Write IVAS output channels + * - compensation for saturation + * - float to integer conversion + *----------------------------------------------------------------*/ + + ivas_limiter_dec( st_ivas->hLimiter, output, nchan_out, output_frame, st_ivas->BER_detect ); + +#ifdef DEBUGGING + st_ivas->noClipping += +#endif + ivas_syn_output( output, output_frame, nchan_out, data ); + + /*----------------------------------------------------------------* + * Common updates + *----------------------------------------------------------------*/ + + if ( !st_ivas->bfi ) /* do not update if first frame(s) are lost or NO_DATA */ + { + st_ivas->hDecoderConfig->last_ivas_total_brate = ivas_total_brate; + } + + if ( st_ivas->ini_frame < MAX_FRAME_COUNTER && !( st_ivas->bfi && st_ivas->ini_frame == 0 ) ) /* keep "st_ivas->ini_frame = 0" until first good received frame */ + { + st_ivas->ini_frame++; + } + if ( st_ivas->ini_active_frame < MAX_FRAME_COUNTER && !( st_ivas->bfi && st_ivas->ini_frame == 0 ) && ivas_total_brate > IVAS_SID_4k4 ) + { + st_ivas->ini_active_frame++; + } + +#ifdef DEBUG_MODE_INFO + dbgwrite( &st_ivas->bfi, sizeof( int16_t ), 1, output_frame, "res/bfi" ); + dbgwrite( &st_ivas->BER_detect, sizeof( int16_t ), 1, output_frame, "res/BER_detect" ); +#endif + + wmops_sub_end(); + return error; +} diff --git a/lib_dec/ivas_decision_matrix_dec.c b/lib_dec/ivas_decision_matrix_dec.c new file mode 100644 index 0000000000..3e6e87dc86 --- /dev/null +++ b/lib_dec/ivas_decision_matrix_dec.c @@ -0,0 +1,469 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_dec.h" +#include "rom_com.h" +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * ivas_decision_matrix_dec() + * + * ACELP/TCX/HQ core selection + * Read ACELP signalling bits from the bitstream + * Set extension layers + *-----------------------------------------------------------------*/ + +void ivas_decision_matrix_dec( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *sharpFlag, /* o : formant sharpening flag */ + int16_t *core_switching_flag, /* o : ACELP->HQ switching frame flag */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t nchan_out /* i : Number of output channels */ +) +{ + int16_t tmp; + int32_t icbwe_brate; + + /* init */ + icbwe_brate = 0; + st->core = -1; + st->core_brate = 0; + st->extl = -1; + st->extl_brate = 0; + st->ppp_mode_dec = 0; + st->nelp_mode_dec = 0; + st->igf = 0; + st->vbr_hw_BWE_disable_dec = 0; + + /*-----------------------------------------------------------------* + * Read SID signalling bits from the bitstream + *-----------------------------------------------------------------*/ + + if ( ( st->idchan == 0 && ( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) ) || ( st->element_mode == IVAS_CPE_MDCT && st->total_brate <= SID_2k40 ) ) + { + st->core = ACELP_CORE; + st->core_brate = st->total_brate; + + if ( st->total_brate == SID_2k40 && !( st->idchan == 1 && st->element_mode == IVAS_CPE_MDCT ) ) + { + if ( st->element_mode != IVAS_CPE_DFT ) + { + st->cng_type = get_next_indice( st, 1 ); + + if ( st->cng_type == FD_CNG ) + { + st->bwidth = get_next_indice( st, 2 ); + } + } + if ( get_next_indice( st, 1 ) ) + { + st->L_frame = L_FRAME16k; + } + else + { + st->L_frame = L_FRAME; + } + } + else if ( st->total_brate == SID_2k40 && st->idchan == 1 && st->element_mode == IVAS_CPE_MDCT && st->cng_dirac_flag == 0 ) + { + /* read channel coherence */ + st->hFdCngDec->hFdCngCom->coherence = (float) get_next_indice( st, 4 ) / 15.f; + + /* read flag for no side noise shape */ + st->hFdCngDec->hFdCngCom->no_side_flag = get_next_indice( st, 1 ); + } + + if ( ( st->output_Fs >= 32000 && st->bwidth >= SWB ) || ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB && nchan_out == 2 && st->L_frame < L_FRAME16k ) ) + { + st->extl = SWB_CNG; + } + + if ( st->total_brate == FRAME_NO_DATA && st->prev_bfi && !st->bfi && st->L_frame > L_FRAME16k ) + { + st->L_frame = st->last_CNG_L_frame; + } + + return; + } + + /*---------------------------------------------------------------------* + * ACELP/HQ core selection + *---------------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) + { + /* minimal signalling for the secondary channel, most of the parameters are deduced from the primary channel */ + st->core = ACELP_CORE; + } + else if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) + { + /* ISm Low-rate mode -> always WB, ACELP core, IC coder_type */ + st->core = ACELP_CORE; + } + else if ( st->element_mode == IVAS_CPE_MDCT ) + { + st->core = TCX_20_CORE; + } + else + { + st->core = ACELP_CORE; + + if ( st->element_mode == IVAS_CPE_TD || st->total_brate >= STEREO_TCX_MIN_RATE ) + { + /* ACELP/transform core selection bit */ + if ( get_next_indice( st, 1 ) ) + { + st->core = HQ_CORE; + } + else + { + st->core = ACELP_CORE; + } + } + } + + /*-----------------------------------------------------------------* + * Read ACELP signalling bits from the bitstream + *-----------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) + { + /* ISm Low-rate mode */ + st->bwidth = WB; + st->coder_type = INACTIVE; + *sharpFlag = 0; + } + else if ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) + { + + *sharpFlag = 0; + if ( st->coder_type == GENERIC || st->coder_type == VOICED ) + { + *sharpFlag = 1; + } + + st->core_brate = st->total_brate; + st->codec_mode = MODE1; + + if ( st->idchan == 1 && ( st->tdm_LRTD_flag == 0 || st->bits_frame_channel < IVAS_16k4 / FRAMES_PER_SEC ) ) + { + st->bwidth = WB; /* only WB in the secondary channel */ + } + } + else + { + if ( element_brate < FRMT_SHP_MIN_BRATE_IVAS ) + { + st->coder_type = get_next_indice( st, 3 ); + *sharpFlag = 0; + + if ( element_brate < IVAS_24k4 && ( st->coder_type == VOICED || st->coder_type == GENERIC || st->coder_type == TRANSITION ) ) + { + *sharpFlag = 1; + } + } + else + { + /* get coder_type info */ + st->coder_type = get_next_indice( st, 3 ); + + /* get sharpening flag */ + *sharpFlag = get_next_indice( st, 1 ); + } + } + } + + /*-----------------------------------------------------------------* + * Set extension layers + *-----------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + if ( st->bwidth == WB && st->low_rate_mode ) + { + st->extl = WB_BWE; + if ( st->total_brate >= MIN_BRATE_WB_BWE ) + { + st->extl_brate = WB_BWE_0k35; + } + } + else if ( st->bwidth == WB && ( st->total_brate < MIN_BRATE_WB_BWE || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) ) ) + { + if ( st->vbr_hw_BWE_disable_dec == 0 ) + { + st->extl = WB_BWE; + } + } + else if ( st->bwidth == WB && st->total_brate >= MIN_BRATE_WB_BWE && !st->flag_ACELP16k ) + { + /* read the WB TBE/BWE selection bit */ + if ( get_next_indice( st, 1 ) ) + { + st->extl = WB_BWE; + st->extl_brate = WB_BWE_0k35; + } + else + { + st->extl = WB_TBE; + if ( st->total_brate < MIN_BRATE_WB_TBE_1k05 || ( st->element_mode == IVAS_CPE_TD && st->total_brate < MIN_TDM_BRATE_WB_TBE_1k05 ) ) + { + st->extl_brate = WB_TBE_0k35; + } + else + { + st->extl_brate = WB_TBE_1k05; + } + } + } + else if ( st->bwidth == SWB || st->bwidth == FB ) + { + if ( st->total_brate >= MIN_BRATE_SWB_BWE /*&& (*coder_type != AUDIO || st->total_brate >= (MIN_BWE_PRI_BRATE+600))*/ + || ( st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB && st->tdm_LRTD_flag ) || ( element_brate < IVAS_16k4 && st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB ) ) + { + /* read the SWB TBE/BWE selection bit */ + tmp = get_next_indice( st, 1 ); + + if ( tmp ) + { + st->extl = SWB_BWE; + st->extl_brate = SWB_BWE_1k6; + } + else + { + st->extl = SWB_TBE; + st->extl_brate = SWB_TBE_1k6; +#ifdef DBG_STEREO_ICBWE2_TBE2K8 + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k ) +#else + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) +#endif + { + st->extl_brate = SWB_TBE_2k8; + } + else if ( st->tdm_LRTD_flag == 1 && st->element_mode == IVAS_CPE_TD ) + { + if ( st->element_brate < IVAS_24k4 ) + { + st->extl_brate = SWB_TBE_1k10; + } + else + { + st->extl_brate = SWB_TBE_1k75; + } + } + else if ( st->total_brate < MIN_BRATE_SWB_TBE_1k60 ) + { + st->extl_brate = SWB_TBE_0k95; + } + } + } + else + { + st->extl = WB_BWE; + st->extl_brate = 0; + } + + /* set FB TBE and FB BWE extension layers */ + if ( st->bwidth == FB ) + { + if ( st->extl == SWB_BWE ) + { + st->extl = FB_BWE; + st->extl_brate = FB_BWE_1k8; + } + else if ( st->extl == SWB_TBE ) + { + st->extl = FB_TBE; + st->extl_brate = FB_TBE_1k8; +#ifdef DBG_STEREO_ICBWE2_TBE2K8 + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k ) +#else + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) +#endif + { + st->extl_brate = FB_TBE_3k0; + } + } + } + + /* set IC-BWE bitrate */ + if ( st->element_mode == IVAS_CPE_TD && !( st->bwidth >= SWB && st->tdm_LRTD_flag ) ) + { + icbwe_brate = STEREO_BITS_ICBWE * FRAMES_PER_SEC; + if ( st->flag_ACELP16k == 0 ) + { + icbwe_brate = ( STEREO_BITS_ICBWE - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; + } + } + else if ( st->element_mode == IVAS_CPE_DFT ) + { + icbwe_brate = STEREO_BITS_ICBWE_DFT * FRAMES_PER_SEC; + if ( st->flag_ACELP16k == 0 ) + { + icbwe_brate = ( STEREO_BITS_ICBWE_DFT - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; + } + } + + if ( st->element_mode >= IVAS_CPE_DFT && st->core == ACELP_CORE && ( st->extl == SWB_TBE || st->extl == FB_TBE ) && !( st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) + { + icbwe_brate += STEREO_ICBWE_MSFLAG_BITS * FRAMES_PER_SEC; + } + } + } + + /* set core bitrate */ + st->core_brate = st->total_brate - st->extl_brate - icbwe_brate; + + /*-----------------------------------------------------------------* + * Read transform core (TCX vs. HQ) signalling bit from the bitstream + *-----------------------------------------------------------------*/ + + if ( st->element_mode != IVAS_CPE_MDCT && !( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) && st->core == HQ_CORE ) + { + if ( get_next_indice( st, 1 ) ) + { + st->core = TCX_20_CORE; + } + else + { + st->core = HQ_CORE; + } + } + + if ( st->element_mode != IVAS_CPE_MDCT && st->core == TCX_20_CORE ) + { + st->extl = IGF_BWE; + st->extl_brate = 0; + } + + /*-----------------------------------------------------------------* + * Read ACELP->HQ core switching flag + *-----------------------------------------------------------------*/ + + if ( st->core == HQ_CORE || st->core == TCX_20_CORE ) + { + if ( st->core == HQ_CORE ) + { + /* read ACELP->HQ core switching flag */ + *core_switching_flag = get_next_indice( st, 1 ); + } + else + { + *core_switching_flag = 0; + } + + if ( *core_switching_flag == 1 ) + { + st->last_core_from_bs = ACELP_CORE; + + if ( st->core == st->last_core ) + { + /* A mismatch between the core_switching_flag and the st->core/st->last_core + indicates a frame was lost. If prev_bfi is not set the frame loss + occured during CNG and the prev_bfi needs to be set. */ + st->prev_bfi = 1; + } + } + else + { + st->last_core_from_bs = HQ_CORE; /* Could also be TCX, but it does not make any difference */ + } + + st->last_L_frame_ori = st->last_L_frame; + } + + /*-----------------------------------------------------------------* + * Set ACELP frame length + *-----------------------------------------------------------------*/ + + if ( st->core_brate == FRAME_NO_DATA ) + { + /* prevent "L_frame" changes in CNG segments */ + st->L_frame = st->last_L_frame; + } + else if ( st->core_brate == SID_2k40 && st->bwidth == WB && st->first_CNG && st->hTdCngDec->act_cnt2 < MIN_ACT_CNG_UPD ) + { + /* prevent "L_frame" changes in SID frame after short segment of active frames */ + st->L_frame = st->last_CNG_L_frame; + } + else if ( ( st->core_brate == SID_2k40 && st->total_brate >= ACELP_9k60 && st->bwidth == WB ) || st->flag_ACELP16k ) + { + st->L_frame = L_FRAME16k; + } + else + { + st->L_frame = L_FRAME; + } + + if ( st->L_frame == L_FRAME16k ) + { + st->nb_subfr = NB_SUBFR16k; + } + else + { + st->nb_subfr = NB_SUBFR; + } + + /*-----------------------------------------------------------------* + * Reconfigure in case when output_Fs < input_Fs + *-----------------------------------------------------------------*/ + + st->extl_orig = st->extl; + st->extl_brate_orig = st->extl_brate; + + if ( st->output_Fs == 16000 && st->L_frame == L_FRAME16k && st->extl != IGF_BWE ) + { + st->extl = -1; + st->extl_brate = 0; + } + + if ( st->ini_frame == 0 ) + { + /* avoid switching of internal ACELP Fs in the very first frame */ + st->last_L_frame = st->L_frame; + st->last_core = st->core; + st->last_core_brate = st->core_brate; + st->last_extl = st->extl; + } + + return; +} diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c new file mode 100644 index 0000000000..d18a013df2 --- /dev/null +++ b/lib_dec/ivas_dirac_dec.c @@ -0,0 +1,3543 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void ivas_dirac_alloc_mem( DIRAC_DEC_HANDLE hDirAC, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ); + +static void ivas_dirac_free_mem( DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ); + +static void initDiffuseResponses( + float *diffuse_response_function, + const int16_t num_channels, + AUDIO_CONFIG output_config, + IVAS_OUTPUT_SETUP hOutSetup, + const int16_t ambisonics_order, + const IVAS_FORMAT ivas_format, + int16_t *num_ele_spk_no_diffuse_rendering, + AUDIO_CONFIG transport_config ); + +static void computeIntensityVector_dec( float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], const int16_t num_frequency_bands, float *intensity_real_x, float *intensity_real_y, float *intensity_real_z ); + +static void protoSignalComputation_shd( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float *proto_direct_buffer_f, + float *proto_diffuse_buffer_f, + float *reference_power, + const int16_t slot_index, + const int16_t num_inputs, + const int16_t num_outputs_diff, + const int16_t num_freq_bands, + float *p_Rmat ); + +static void protoSignalComputation1( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float *proto_frame_f, float *proto_direct_buffer_f, float *reference_power, float *proto_power_smooth, const int16_t slot_index, const int16_t num_outputs_diff, const int16_t num_freq_bands ); + +static void protoSignalComputation2( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float *proto_frame_f, float *proto_direct_buffer_f, float *reference_power, float *proto_power_smooth, const int16_t isloudspeaker, const int16_t slot_index, const int16_t num_freq_bands, MASA_STEREO_TYPE_DETECT *stereo_type_detect ); + +static void protoSignalComputation4( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float *proto_frame_f, float *proto_direct_buffer_f, float *reference_power, float *proto_power_smooth, const int16_t slot_index, const int16_t num_outputs_diff, const int16_t num_freq_bands, const float *mtx_hoa_decoder, const int16_t nchan_transport ); + +static void ivas_dirac_dec_compute_diffuse_proto( DIRAC_DEC_HANDLE hDirAC, const int16_t slot_idx ); + + +static void computeDirectionAngles( float *intensity_real_x, float *intensity_real_y, float *intensity_real_z, const int16_t num_frequency_bands, int16_t *azimuth, int16_t *elevation ); + +static void ivas_masa_init_stereotype_detection( MASA_STEREO_TYPE_DETECT *stereo_type_detect ); + +static void ivas_masa_stereotype_detection( MASA_STEREO_TYPE_DETECT *stereo_type_detect ); + +static void ivas_lfe_synth_with_cldfb( MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float RealBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], const int16_t slot_index, const int16_t subframe_index, const int16_t nchan_transport ); + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_open() + * + * Open decoder DirAC handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) + { + return error; + } + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_config() + * + * Open or reconfigure decoder DirAC/MASA handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_dec_config( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const DIRAC_CONFIG_FLAG flag_config /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ +) +{ + DIRAC_DEC_HANDLE hDirAC; + int16_t nchan_out_woLFE; + int16_t nchan_transport; + int16_t nchan_transport_old; + int16_t num_outputs_dir_old; + int16_t num_outputs_diff_old; + int16_t num_protos_diff_old; + float *proto_frame_f_old; + int16_t proto_signal_decorr_on_old; + uint16_t i, j, k; + int16_t dec_param_estim_old; + float ls_azimuth[MAX_OUTPUT_CHANNELS]; + float ls_elevation[MAX_OUTPUT_CHANNELS]; + int32_t output_Fs, ivas_total_brate; + ivas_error error; + int16_t nchan_transport_orig; + + error = IVAS_ERR_OK; + + hDirAC = NULL; + output_Fs = st_ivas->hDecoderConfig->output_Fs; + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + if ( flag_config == DIRAC_RECONFIGURE ) + { + hDirAC = st_ivas->hDirAC; + } + else if ( flag_config == DIRAC_OPEN ) + { + /*-----------------------------------------------------------------* + * prepare library opening + *-----------------------------------------------------------------*/ + + if ( ( hDirAC = (DIRAC_DEC_HANDLE) count_malloc( sizeof( DIRAC_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); + } + + if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) count_malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC Config\n" ) ); + } + nchan_transport_old = 0; + + st_ivas->hDirAC = hDirAC; + } + + dec_param_estim_old = ( flag_config == DIRAC_RECONFIGURE ) ? hDirAC->hConfig->dec_param_estim : FALSE; + nchan_transport_old = 0; + num_outputs_dir_old = 0; + num_outputs_diff_old = 0; + num_protos_diff_old = 0; + + nchan_transport_orig = st_ivas->nchan_transport; + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && !( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) + { + st_ivas->nchan_transport = ivas_sba_get_nchan_metadata( st_ivas->sba_order ); + } + nchan_transport = st_ivas->nchan_transport; + if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && ivas_total_brate > IVAS_SID_4k4 ) + { + nchan_transport = 1; + } + + if ( flag_config == DIRAC_RECONFIGURE && st_ivas->ivas_format == SBA_FORMAT ) + { + int16_t tmp1, tmp2, tmp3; + ivas_sba_config( st_ivas->hDecoderConfig->last_ivas_total_brate, st_ivas->sba_order, -1, &nchan_transport_old, st_ivas->sba_planar, &tmp1, &tmp2, &tmp3, SBA_MODE_DIRAC ); + } + + /*-----------------------------------------------------------------* + * DirAC main configuration + *-----------------------------------------------------------------*/ + + if ( ( error = ivas_dirac_config( (void *) st_ivas, DEC ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*-----------------------------------------------------------------* + * output setup: for parametric binaural renderer, use output setup, otherwise internal setup + *-----------------------------------------------------------------*/ + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + hDirAC->hOutSetup = st_ivas->hOutSetup; + + hDirAC->hConfig->dec_param_estim = FALSE; + } + else + { + hDirAC->hOutSetup = st_ivas->hIntSetup; + } + nchan_out_woLFE = hDirAC->hOutSetup.nchan_out_woLFE; + + if ( hDirAC->hOutSetup.ls_azimuth != NULL && hDirAC->hOutSetup.ls_elevation != NULL ) + { + mvr2r( hDirAC->hOutSetup.ls_azimuth, ls_azimuth, nchan_out_woLFE ); + mvr2r( hDirAC->hOutSetup.ls_elevation, ls_elevation, nchan_out_woLFE ); + } + + if ( hDirAC->hOutSetup.ambisonics_order == -1 ) + { + hDirAC->hOutSetup.ambisonics_order = 3; /* Order 3 is used by default in DirAC for SHD processing */ + if ( hDirAC->hOutSetup.output_config == AUDIO_CONFIG_MONO || hDirAC->hOutSetup.output_config == AUDIO_CONFIG_STEREO ) + { + hDirAC->hOutSetup.ambisonics_order = 1; + } + } + else if ( hDirAC->hOutSetup.ambisonics_order >= 1 ) + { + mvr2r( ls_azimuth_4d4, ls_azimuth, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); + mvr2r( ls_elevation_4d4, ls_elevation, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); + } + + if ( hDirAC->hOutSetup.separateChannelEnabled && ( hDirAC->hOutSetup.output_config == AUDIO_CONFIG_5_1 || hDirAC->hOutSetup.output_config == AUDIO_CONFIG_7_1 || hDirAC->hOutSetup.output_config == AUDIO_CONFIG_5_1_2 || hDirAC->hOutSetup.output_config == AUDIO_CONFIG_5_1_4 || hDirAC->hOutSetup.output_config == AUDIO_CONFIG_7_1_4 || ( hDirAC->hOutSetup.output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) + { + /* Remove the channel of the separated signal from the output setup of the spatial synthesis */ + hDirAC->hOutSetup.nchan_out_woLFE--; + nchan_out_woLFE = hDirAC->hOutSetup.nchan_out_woLFE; + mvr2r( &ls_azimuth[hDirAC->hOutSetup.separateChannelIndex + 1], &ls_azimuth[hDirAC->hOutSetup.separateChannelIndex], nchan_out_woLFE - hDirAC->hOutSetup.separateChannelIndex ); + mvr2r( &ls_elevation[hDirAC->hOutSetup.separateChannelIndex + 1], &ls_elevation[hDirAC->hOutSetup.separateChannelIndex], nchan_out_woLFE - hDirAC->hOutSetup.separateChannelIndex ); + } + + /*-----------------------------------------------------------------* + * set input parameters + *-----------------------------------------------------------------*/ + + if ( flag_config == DIRAC_OPEN ) + { + hDirAC->slot_size = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX ); + hDirAC->subframe_nbslots = (int16_t) ( CLDFB_NO_COL_MAX * 5.f / 20.f + 0.5f ); + hDirAC->nb_subframes = CLDFB_NO_COL_MAX / hDirAC->subframe_nbslots; + assert( hDirAC->nb_subframes <= MAX_PARAM_SPATIAL_SUBFRAMES ); + } + + /* band config needed only for SPAR with FOA output */ + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_FOA && st_ivas->sba_mode == SBA_MODE_SPAR ) + { + return IVAS_ERR_OK; + } + + st_ivas->nchan_transport = nchan_transport_orig; + + if ( nchan_transport_orig > 2 && hDirAC->hOutSetup.is_loudspeaker_setup && st_ivas->renderer_type == RENDERER_DIRAC ) + { + hDirAC->synthesisConf = DIRAC_SYNTHESIS_PSD_LS; + hDirAC->panningConf = DIRAC_PANNING_VBAP; + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || + st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + hDirAC->synthesisConf = DIRAC_SYNTHESIS_PSD_LS; + hDirAC->panningConf = DIRAC_PANNING_VBAP; + } + else if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->mc_mode == MC_MODE_MCMASA ) && hDirAC->hOutSetup.output_config == AUDIO_CONFIG_MONO ) + { + hDirAC->synthesisConf = DIRAC_SYNTHESIS_MONO; + hDirAC->panningConf = DIRAC_PANNING_HOA3; + nchan_out_woLFE = 1; + } + else if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->mc_mode == MC_MODE_MCMASA ) && hDirAC->hOutSetup.is_loudspeaker_setup ) + { + hDirAC->synthesisConf = DIRAC_SYNTHESIS_PSD_LS; + hDirAC->panningConf = DIRAC_PANNING_VBAP; + } + else if ( st_ivas->ivas_format == MASA_FORMAT && !hDirAC->hOutSetup.is_loudspeaker_setup && st_ivas->nchan_transport > 1 ) + { + hDirAC->synthesisConf = DIRAC_SYNTHESIS_PSD_SHD; + hDirAC->panningConf = DIRAC_PANNING_HOA3; + } + else + { + hDirAC->synthesisConf = DIRAC_SYNTHESIS_GAIN_SHD; + hDirAC->panningConf = DIRAC_PANNING_HOA3; + } + + if ( flag_config == DIRAC_OPEN ) + { + hDirAC->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); + hDirAC->frequency_axis = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->frequency_axis, 0.0f, hDirAC->num_freq_bands ); + + ivas_dirac_dec_get_frequency_axis( hDirAC->frequency_axis, output_Fs, hDirAC->num_freq_bands ); + } + + if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->mc_mode == MC_MODE_MCMASA ) && hDirAC->panningConf == DIRAC_PANNING_HOA3 && nchan_transport == 2 ) + { + if ( ( flag_config == DIRAC_RECONFIGURE && hDirAC->masa_stereo_type_detect == NULL ) || flag_config == DIRAC_OPEN ) + { + hDirAC->masa_stereo_type_detect = (MASA_STEREO_TYPE_DETECT *) count_malloc( sizeof( MASA_STEREO_TYPE_DETECT ) ); + } + ivas_masa_init_stereotype_detection( hDirAC->masa_stereo_type_detect ); + } + else + { + if ( flag_config == DIRAC_RECONFIGURE && hDirAC->masa_stereo_type_detect != NULL ) + { + count_free( hDirAC->masa_stereo_type_detect ); + } + hDirAC->masa_stereo_type_detect = NULL; + } + + /*-----------------------------------------------------------------* + * (re)configure sub-modules + *-----------------------------------------------------------------*/ + + /* prototype signal computation */ + if ( flag_config == DIRAC_RECONFIGURE ) + { + num_outputs_dir_old = hDirAC->num_outputs_dir; + num_outputs_diff_old = hDirAC->num_outputs_diff; + num_protos_diff_old = hDirAC->num_protos_diff; + } + + /* allocate output setup related arrays */ + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + /* Two channels in parametric binaural rendering */ + hDirAC->num_outputs_diff = 2; + hDirAC->num_outputs_dir = 2; + } + else if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) + { + /* Directional and diffuses components in output LS format */ + hDirAC->num_outputs_diff = nchan_out_woLFE; + hDirAC->num_outputs_dir = nchan_out_woLFE; + } + else if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + /* Directional and diffuses components in SHD */ + /* Diffuseness components up to 1st order */ + hDirAC->num_outputs_diff = ( min( hDirAC->hOutSetup.ambisonics_order, 1 ) + 1 ) * ( min( hDirAC->hOutSetup.ambisonics_order, 1 ) + 1 ); + if ( ( st_ivas->ivas_format == SBA_FORMAT ) && ( ivas_total_brate >= IVAS_96k ) && ( hDirAC->hOutSetup.ambisonics_order > 1 ) && ( nchan_transport < 4 ) ) + { + hDirAC->num_outputs_diff += 2; /* Add 2nd-order planar components for HRs */ + } + + hDirAC->num_outputs_dir = ( hDirAC->hOutSetup.ambisonics_order + 1 ) * ( hDirAC->hOutSetup.ambisonics_order + 1 ); + } + else if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + { + hDirAC->num_outputs_diff = DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS; + hDirAC->num_outputs_dir = nchan_out_woLFE; + } + else if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + hDirAC->num_outputs_diff = 1; /* There is one output channel in mono */ + hDirAC->num_outputs_dir = 2; /* Two channels are pre-rendered for stereo type detection */ + } + else + { + assert( 0 && "DirAC: not existing synthesis methods!" ); + } + + if ( flag_config == DIRAC_OPEN ) + { + num_outputs_dir_old = hDirAC->num_outputs_dir; + hDirAC->proto_index_dir = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_dir ); + num_outputs_diff_old = hDirAC->num_outputs_diff; + hDirAC->proto_index_diff = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_diff ); + } + + if ( hDirAC->num_outputs_dir != num_outputs_dir_old && flag_config == DIRAC_RECONFIGURE ) + { + count_free( hDirAC->proto_index_dir ); + hDirAC->proto_index_dir = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_dir ); + } + set_s( hDirAC->proto_index_dir, 0, hDirAC->num_outputs_dir ); + + if ( hDirAC->num_outputs_diff != num_outputs_diff_old && flag_config == DIRAC_RECONFIGURE ) + { + count_free( hDirAC->proto_index_diff ); + hDirAC->proto_index_diff = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_diff ); + } + set_s( hDirAC->proto_index_diff, 0, hDirAC->num_outputs_diff ); + + if ( nchan_transport == 1 ) + { + hDirAC->num_protos_ambi = 1; + hDirAC->num_protos_dir = 1; + hDirAC->num_protos_diff = 1; + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + hDirAC->num_protos_dir = 2; + hDirAC->num_protos_diff = 2; + hDirAC->proto_index_dir[0] = 0; + hDirAC->proto_index_dir[1] = 1; + hDirAC->proto_index_diff[0] = 0; + hDirAC->proto_index_diff[1] = 1; + } + } + else if ( nchan_transport == 2 ) + { + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + hDirAC->num_protos_ambi = 2; + hDirAC->num_protos_diff = 1; + hDirAC->num_protos_dir = 2; + hDirAC->proto_index_dir[1] = 1; + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + hDirAC->num_protos_dir = 2; + hDirAC->num_protos_diff = 2; + hDirAC->proto_index_dir[0] = 0; + hDirAC->proto_index_dir[1] = 1; + hDirAC->proto_index_diff[0] = 0; + hDirAC->proto_index_diff[1] = 1; + } + else if ( hDirAC->hOutSetup.output_config == AUDIO_CONFIG_MONO ) + { + /* Following the foa rendering for code compatibility */ + hDirAC->num_protos_ambi = 2; + hDirAC->num_protos_dir = 2; + hDirAC->num_protos_diff = 3; + hDirAC->proto_index_dir[0] = 0; + hDirAC->proto_index_diff[0] = 0; + } + else + { + hDirAC->num_protos_ambi = 2; + hDirAC->num_protos_diff = 3; + + for ( k = 0; k < hDirAC->num_outputs_diff; k++ ) + { + if ( ls_azimuth[k] > 0.0f ) + { + hDirAC->proto_index_diff[k] = 1; + } + else if ( ls_azimuth[k] < 0.0f ) + { + hDirAC->proto_index_diff[k] = 2; + } + else + { + hDirAC->proto_index_diff[k] = 0; + } + } + + if ( hDirAC->hOutSetup.is_loudspeaker_setup ) + { + hDirAC->num_protos_dir = 3; + mvs2s( hDirAC->proto_index_diff, hDirAC->proto_index_dir, nchan_out_woLFE ); + } + else + { + hDirAC->num_protos_dir = 2; + hDirAC->proto_index_dir[1] = 1; + } + } + } + else /* nchan_transport > 2 */ + { + hDirAC->num_protos_ambi = 4; + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) + { + hDirAC->num_protos_diff = hDirAC->num_outputs_diff; + for ( k = 0; k < hDirAC->num_outputs_diff; k++ ) + { + hDirAC->proto_index_diff[k] = k; + } + + hDirAC->num_protos_dir = hDirAC->num_outputs_dir; + for ( k = 0; k < hDirAC->num_outputs_dir; k++ ) + { + hDirAC->proto_index_dir[k] = k; + } + } + else + { + hDirAC->num_protos_diff = 1; + hDirAC->num_protos_dir = nchan_transport; + + if ( ( st_ivas->sba_planar ) && ( !( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) ) ) + { + hDirAC->num_protos_dir++; + } + + for ( k = 0; k < min( hDirAC->num_outputs_dir, hDirAC->num_protos_dir ); k++ ) + { + if ( sba_map_tc[k] < hDirAC->num_outputs_dir ) + { + hDirAC->proto_index_dir[sba_map_tc[k]] = k; + } + } + } + } + + /* direct/diffuse responses */ + if ( flag_config == DIRAC_OPEN ) + { + hDirAC->diffuse_response_function = (float *) count_malloc( sizeof( float ) * hDirAC->num_outputs_dir ); + } + /* reallocate static memory */ + else if ( flag_config == DIRAC_RECONFIGURE && hDirAC->num_outputs_dir != num_outputs_dir_old ) + { + count_free( hDirAC->diffuse_response_function ); + hDirAC->diffuse_response_function = NULL; + hDirAC->diffuse_response_function = (float *) count_malloc( sizeof( float ) * hDirAC->num_outputs_dir ); + } + + if ( ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) || ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) || ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) ) + { + initDiffuseResponses( hDirAC->diffuse_response_function, nchan_out_woLFE, hDirAC->hOutSetup.output_config, + hDirAC->hOutSetup, hDirAC->hOutSetup.ambisonics_order, st_ivas->ivas_format, &hDirAC->num_ele_spk_no_diffuse_rendering, st_ivas->transport_config ); + } + else + { + initDiffuseResponses( hDirAC->diffuse_response_function, hDirAC->num_outputs_dir, AUDIO_CONFIG_FOA, + hDirAC->hOutSetup, hDirAC->hOutSetup.ambisonics_order, st_ivas->ivas_format, &hDirAC->num_ele_spk_no_diffuse_rendering, AUDIO_CONFIG_INVALID ); + } + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + { + if ( flag_config == DIRAC_OPEN ) + { + hDirAC->hoa_encoder = (float *) count_malloc( nchan_out_woLFE * hDirAC->num_outputs_diff * sizeof( float ) ); + } + else if ( flag_config == DIRAC_RECONFIGURE && hDirAC->hoa_encoder && ( hDirAC->num_outputs_diff != num_outputs_diff_old ) ) + { + count_free( hDirAC->hoa_encoder ); + hDirAC->hoa_encoder = NULL; + hDirAC->hoa_encoder = (float *) count_malloc( nchan_out_woLFE * hDirAC->num_outputs_diff * sizeof( float ) ); + } + set_f( hDirAC->hoa_encoder, 0.0f, nchan_out_woLFE * hDirAC->num_outputs_diff ); + compute_hoa_encoder_mtx( ls_azimuth, ls_elevation, hDirAC->hoa_encoder, hDirAC->num_outputs_diff, hDirAC->hOutSetup.ambisonics_order ); + } + else + { + if ( flag_config == DIRAC_RECONFIGURE && hDirAC->hoa_encoder ) + { + count_free( hDirAC->hoa_encoder ); + } + hDirAC->hoa_encoder = NULL; + } + + /* VBAP */ + if ( flag_config == DIRAC_OPEN ) + { + st_ivas->hVBAPdata = NULL; + } + + if ( hDirAC->panningConf == DIRAC_PANNING_VBAP ) + { + if ( flag_config == DIRAC_RECONFIGURE && st_ivas->hVBAPdata ) + { + vbap_free_data( &( st_ivas->hVBAPdata ) ); + } + if ( ( error = vbap_init_data( &( st_ivas->hVBAPdata ), ls_azimuth, ls_elevation, nchan_out_woLFE ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + if ( flag_config == DIRAC_RECONFIGURE && st_ivas->hVBAPdata ) + { + vbap_free_data( &( st_ivas->hVBAPdata ) ); + } + hDirAC->hoa_decoder = NULL; + } + else if ( flag_config == DIRAC_RECONFIGURE && st_ivas->hVBAPdata ) + { + vbap_free_data( &( st_ivas->hVBAPdata ) ); + } + + /* HOA panning/dec */ + if ( flag_config == DIRAC_OPEN ) + { + hDirAC->hoa_decoder = NULL; + if ( ( hDirAC->panningConf == DIRAC_PANNING_HOA3 ) || st_ivas->sba_mode == SBA_MODE_SPAR || ( nchan_transport > 2 ) ) + { + if ( hDirAC->hOutSetup.is_loudspeaker_setup ) + { + if ( st_ivas->hoa_dec_mtx != NULL ) + { + count_free( st_ivas->hoa_dec_mtx ); + st_ivas->hoa_dec_mtx = NULL; + } + if ( ( error = ivas_sba_get_hoa_dec_matrix( hDirAC->hOutSetup, &st_ivas->hoa_dec_mtx, hDirAC->hOutSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + { + return error; + } + + hDirAC->hoa_decoder = st_ivas->hoa_dec_mtx; + } + } + } + + /* decorrelation */ + proto_signal_decorr_on_old = ( flag_config == DIRAC_RECONFIGURE ) ? hDirAC->proto_signal_decorr_on : 0; + hDirAC->proto_signal_decorr_on = 1; + if ( ( nchan_transport > 2 ) && ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) ) + { + /*switch off decorrelation for 4 transport channels*/ + hDirAC->proto_signal_decorr_on = 0; + } + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + hDirAC->proto_signal_decorr_on = 0; + } + + if ( ( flag_config == DIRAC_OPEN && hDirAC->proto_signal_decorr_on ) || ( flag_config == DIRAC_RECONFIGURE && ( hDirAC->proto_signal_decorr_on && !proto_signal_decorr_on_old ) ) ) + { + ivas_dirac_dec_decorr_open( &( hDirAC->h_freq_domain_decorr_ap_params ), + &( hDirAC->h_freq_domain_decorr_ap_state ), + hDirAC->num_freq_bands, + hDirAC->num_outputs_diff, + hDirAC->num_protos_diff, + hDirAC->synthesisConf, + hDirAC->frequency_axis, + nchan_transport > 2 ? 4 : nchan_transport, + output_Fs ); + } + else if ( flag_config == DIRAC_RECONFIGURE && ( !hDirAC->proto_signal_decorr_on && proto_signal_decorr_on_old ) ) + { + ivas_dirac_dec_decorr_close( &hDirAC->h_freq_domain_decorr_ap_params, &hDirAC->h_freq_domain_decorr_ap_state ); + } + else if ( flag_config == DIRAC_RECONFIGURE && hDirAC->proto_signal_decorr_on && proto_signal_decorr_on_old ) + { + if ( ( nchan_transport != nchan_transport_old ) || ( hDirAC->num_outputs_diff != num_outputs_diff_old ) ) + { + /* close and reopen the decorrelator */ + ivas_dirac_dec_decorr_close( &hDirAC->h_freq_domain_decorr_ap_params, &hDirAC->h_freq_domain_decorr_ap_state ); + + ivas_dirac_dec_decorr_open( &( hDirAC->h_freq_domain_decorr_ap_params ), + &( hDirAC->h_freq_domain_decorr_ap_state ), + hDirAC->num_freq_bands, + hDirAC->num_outputs_diff, + hDirAC->num_protos_diff, + hDirAC->synthesisConf, + hDirAC->frequency_axis, + nchan_transport > 2 ? 4 : nchan_transport, + output_Fs ); + } + } + + /* output synthesis */ + if ( flag_config == DIRAC_OPEN ) + { + ivas_dirac_dec_output_synthesis_open( hDirAC, st_ivas->renderer_type, nchan_transport, output_Fs ); + hDirAC->h_output_synthesis_psd_params.use_onset_filters = hDirAC->proto_signal_decorr_on; + } + else if ( ( flag_config == DIRAC_RECONFIGURE ) && ( ( nchan_transport != nchan_transport_old ) || ( hDirAC->num_outputs_diff != num_outputs_diff_old ) ) ) + { + ivas_dirac_dec_output_synthesis_close( hDirAC ); + ivas_dirac_dec_output_synthesis_open( hDirAC, st_ivas->renderer_type, nchan_transport, output_Fs ); + hDirAC->h_output_synthesis_psd_params.use_onset_filters = hDirAC->proto_signal_decorr_on; + } + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD || hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + hDirAC->h_output_synthesis_psd_params.use_onset_filters = 0; + } + + /*-----------------------------------------------------------------* + * memory allocation + *-----------------------------------------------------------------*/ + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + if ( flag_config == DIRAC_RECONFIGURE && hDirAC->proto_frame_f ) + { + count_free( hDirAC->proto_frame_f ); + } + hDirAC->proto_frame_f = NULL; + } + else + { + if ( flag_config == DIRAC_OPEN || ( flag_config == DIRAC_RECONFIGURE && hDirAC->proto_frame_f == NULL ) ) + { + hDirAC->proto_frame_f = (float *) count_malloc( sizeof( float ) * 2 * hDirAC->num_protos_diff * hDirAC->num_freq_bands ); + } + else if ( flag_config == DIRAC_RECONFIGURE && ( hDirAC->num_protos_diff != num_protos_diff_old ) ) + { + proto_frame_f_old = hDirAC->proto_frame_f; + count_free( proto_frame_f_old ); + hDirAC->proto_frame_f = (float *) count_malloc( sizeof( float ) * 2 * hDirAC->num_protos_diff * hDirAC->num_freq_bands ); + } + } + + if ( ( flag_config == DIRAC_OPEN && hDirAC->hConfig->dec_param_estim == TRUE ) || ( flag_config == DIRAC_RECONFIGURE && ( hDirAC->hConfig->dec_param_estim == TRUE && dec_param_estim_old == FALSE ) ) ) + { + hDirAC->index_buffer_intensity = 0; + + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) + { + hDirAC->buffer_intensity_real[i][j] = (float *) count_malloc( CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); + set_f( hDirAC->buffer_intensity_real[i][j], 0.0f, CLDFB_NO_CHANNELS_MAX ); + } + } + + set_f( hDirAC->buffer_energy, 0.0f, DIRAC_NO_COL_AVG_DIFF * CLDFB_NO_CHANNELS_MAX ); + } + else if ( ( flag_config == DIRAC_OPEN && hDirAC->hConfig->dec_param_estim == FALSE ) || ( flag_config == DIRAC_RECONFIGURE && ( hDirAC->hConfig->dec_param_estim == FALSE && dec_param_estim_old == TRUE ) ) ) + { + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) + { + if ( flag_config == DIRAC_RECONFIGURE && hDirAC->buffer_intensity_real[i][j] ) + { + count_free( hDirAC->buffer_intensity_real[i][j] ); + } + hDirAC->buffer_intensity_real[i][j] = NULL; + } + } + } + + /* output synthesis */ + ivas_dirac_dec_output_synthesis_init( hDirAC, nchan_out_woLFE ); + + /* Allocate stack memory */ + if ( flag_config != DIRAC_OPEN ) + { + ivas_dirac_free_mem( &( hDirAC->stack_mem ) ); + } + ivas_dirac_alloc_mem( hDirAC, &( hDirAC->stack_mem ) ); + + mvs2s( DirAC_block_grouping, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); + + + if ( flag_config == DIRAC_OPEN ) + { + hDirAC->dirac_md_buffer_length = 0; + hDirAC->dirac_bs_md_write_idx = 0; + hDirAC->dirac_read_idx = 0; + hDirAC->spar_to_dirac_write_idx = 0; + + if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->mc_mode == MC_MODE_MCMASA ) + { + hDirAC->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES; + } + else + { + int16_t num_slots_in_subfr; + num_slots_in_subfr = hDirAC->hConfig->dec_param_estim ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; + + if ( st_ivas->sba_mode == SBA_MODE_DIRAC ) + { + hDirAC->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES * num_slots_in_subfr; + hDirAC->dirac_bs_md_write_idx = 0; + hDirAC->spar_to_dirac_write_idx = 0; + hDirAC->dirac_read_idx = 0; + hDirAC->dirac_estimator_idx = 0; + } + else + { + hDirAC->dirac_md_buffer_length = ( MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_DIRAC_PARAM_DEC_SFR ) * num_slots_in_subfr; + hDirAC->dirac_bs_md_write_idx = DELAY_DIRAC_PARAM_DEC_SFR * num_slots_in_subfr; + hDirAC->spar_to_dirac_write_idx = DELAY_DIRAC_PARAM_DEC_SFR * num_slots_in_subfr; + hDirAC->dirac_read_idx = 0; + hDirAC->dirac_estimator_idx = 0; + } + } + + hDirAC->azimuth = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->diffuseness_vector = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->energy_ratio1 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->surroundingCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + hDirAC->azimuth[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->azimuth[i], 0, hDirAC->num_freq_bands ); + hDirAC->elevation[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->elevation[i], 0, hDirAC->num_freq_bands ); + hDirAC->diffuseness_vector[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->diffuseness_vector[i], 1.0f, hDirAC->num_freq_bands ); + + hDirAC->energy_ratio1[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->energy_ratio1[i], 0.0f, hDirAC->num_freq_bands ); + hDirAC->spreadCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->spreadCoherence[i], 0.0f, hDirAC->num_freq_bands ); + hDirAC->surroundingCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->surroundingCoherence[i], 0.0f, hDirAC->num_freq_bands ); + } + + if ( st_ivas->ivas_format == MASA_FORMAT ) + { + hDirAC->azimuth2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->energy_ratio2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + hDirAC->azimuth2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->azimuth2[i], 0, hDirAC->num_freq_bands ); + hDirAC->elevation2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->elevation2[i], 0, hDirAC->num_freq_bands ); + + hDirAC->energy_ratio2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->energy_ratio2[i], 0.0f, hDirAC->num_freq_bands ); + hDirAC->spreadCoherence2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->spreadCoherence2[i], 0.0f, hDirAC->num_freq_bands ); + } + } + else + { + hDirAC->azimuth2 = NULL; + hDirAC->elevation2 = NULL; + hDirAC->energy_ratio2 = NULL; + hDirAC->spreadCoherence2 = NULL; + } + + hDirAC->hDiffuseDist = NULL; /* Memory is allocated from stack during runtime when needed */ + + hDirAC->dithering_seed = DIRAC_DITH_SEED; + st_ivas->hDirAC = hDirAC; + } + + st_ivas->nchan_transport = nchan_transport_orig; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_close() + * + * Close DirAC memories + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_close( + DIRAC_DEC_HANDLE hDirAC /* i/o: decoder DirAC handle */ +) +{ + int16_t i, j; + + /* Config & CLDFB */ + if ( hDirAC->hConfig != NULL ) + { + count_free( hDirAC->hConfig ); + hDirAC->hConfig = NULL; + } + + /* close Output synthesis sub-module */ + ivas_dirac_dec_output_synthesis_close( hDirAC ); + + /* close Decorrelator sub-module */ + if ( hDirAC->proto_signal_decorr_on ) + { + ivas_dirac_dec_decorr_close( &hDirAC->h_freq_domain_decorr_ap_params, &hDirAC->h_freq_domain_decorr_ap_state ); + } + + /* Params */ + + /* free frequency axis buffer */ + if ( hDirAC->frequency_axis != NULL ) + { + count_free( hDirAC->frequency_axis ); + hDirAC->frequency_axis = NULL; + } + + if ( hDirAC->diffuse_response_function != NULL ) + { + count_free( hDirAC->diffuse_response_function ); + hDirAC->diffuse_response_function = NULL; + } + + if ( hDirAC->hoa_encoder != NULL ) + { + count_free( hDirAC->hoa_encoder ); + hDirAC->hoa_encoder = NULL; + } + + /* prototype indexing */ + if ( hDirAC->proto_index_dir != NULL ) + { + count_free( hDirAC->proto_index_dir ); + hDirAC->proto_index_dir = NULL; + } + + if ( hDirAC->proto_index_diff != NULL ) + { + count_free( hDirAC->proto_index_diff ); + hDirAC->proto_index_dir = NULL; + } + + + /* States */ + + /* free prototype signal buffers */ + if ( hDirAC->proto_frame_f != NULL ) + { + count_free( hDirAC->proto_frame_f ); + hDirAC->proto_frame_f = NULL; + } + + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) + { + if ( hDirAC->buffer_intensity_real[i][j] != NULL ) + { + count_free( hDirAC->buffer_intensity_real[i][j] ); + hDirAC->buffer_intensity_real[i][j] = NULL; + } + } + } + + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->azimuth[i] != NULL ) + { + count_free( hDirAC->azimuth[i] ); + hDirAC->azimuth[i] = NULL; + } + + if ( hDirAC->elevation[i] != NULL ) + { + count_free( hDirAC->elevation[i] ); + hDirAC->elevation[i] = NULL; + } + if ( hDirAC->diffuseness_vector[i] != NULL ) + { + count_free( hDirAC->diffuseness_vector[i] ); + hDirAC->diffuseness_vector[i] = NULL; + } + } + if ( hDirAC->azimuth != NULL ) + { + count_free( hDirAC->azimuth ); + hDirAC->azimuth = NULL; + } + if ( hDirAC->elevation != NULL ) + { + count_free( hDirAC->elevation ); + hDirAC->elevation = NULL; + } + if ( hDirAC->diffuseness_vector != NULL ) + { + count_free( hDirAC->diffuseness_vector ); + hDirAC->diffuseness_vector = NULL; + } + + if ( hDirAC->azimuth2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->azimuth2[i] != NULL ) + { + count_free( hDirAC->azimuth2[i] ); + hDirAC->azimuth2[i] = NULL; + } + } + count_free( hDirAC->azimuth2 ); + hDirAC->azimuth2 = NULL; + } + + if ( hDirAC->elevation2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->elevation2[i] != NULL ) + { + count_free( hDirAC->elevation2[i] ); + hDirAC->elevation2[i] = NULL; + } + } + count_free( hDirAC->elevation2 ); + hDirAC->elevation2 = NULL; + } + + if ( hDirAC->energy_ratio1 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->energy_ratio1[i] != NULL ) + { + count_free( hDirAC->energy_ratio1[i] ); + hDirAC->energy_ratio1[i] = NULL; + } + } + count_free( hDirAC->energy_ratio1 ); + hDirAC->energy_ratio1 = NULL; + } + + if ( hDirAC->energy_ratio2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->energy_ratio2[i] != NULL ) + { + count_free( hDirAC->energy_ratio2[i] ); + hDirAC->energy_ratio2[i] = NULL; + } + } + count_free( hDirAC->energy_ratio2 ); + hDirAC->energy_ratio2 = NULL; + } + + if ( hDirAC->spreadCoherence != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->spreadCoherence[i] != NULL ) + { + count_free( hDirAC->spreadCoherence[i] ); + hDirAC->spreadCoherence[i] = NULL; + } + } + count_free( hDirAC->spreadCoherence ); + hDirAC->spreadCoherence = NULL; + } + + if ( hDirAC->spreadCoherence2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->spreadCoherence2[i] != NULL ) + { + count_free( hDirAC->spreadCoherence2[i] ); + hDirAC->spreadCoherence2[i] = NULL; + } + } + count_free( hDirAC->spreadCoherence2 ); + hDirAC->spreadCoherence2 = NULL; + } + + if ( hDirAC->surroundingCoherence != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->surroundingCoherence[i] != NULL ) + { + count_free( hDirAC->surroundingCoherence[i] ); + hDirAC->surroundingCoherence[i] = NULL; + } + } + count_free( hDirAC->surroundingCoherence ); + hDirAC->surroundingCoherence = NULL; + } + + if ( hDirAC->masa_stereo_type_detect != NULL ) + { + count_free( hDirAC->masa_stereo_type_detect ); + hDirAC->masa_stereo_type_detect = NULL; + } + + ivas_dirac_free_mem( &( hDirAC->stack_mem ) ); + + count_free( hDirAC ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_alloc_mem() + * + * Allocate stack memory for DirAC renderer + *------------------------------------------------------------------------*/ + +static void ivas_dirac_alloc_mem( + DIRAC_DEC_HANDLE hDirAC, + DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ) +{ + int16_t num_freq_bands, num_freq_bands_diff, size; + int16_t num_outputs_dir, num_outputs_diff; + int16_t num_protos_dir; + + num_protos_dir = hDirAC->num_protos_dir; + + num_freq_bands = hDirAC->num_freq_bands; + num_freq_bands_diff = hDirAC->h_output_synthesis_psd_params.max_band_decorr; + + num_outputs_dir = hDirAC->num_outputs_dir; + num_outputs_diff = hDirAC->num_outputs_diff; + + size = num_freq_bands * num_outputs_dir; + + /* PSD related buffers */ + hDirAC_mem->cy_auto_dir_smooth = NULL; + hDirAC_mem->proto_power_smooth = NULL; + hDirAC_mem->proto_power_diff_smooth = NULL; + hDirAC_mem->direct_responses_square = NULL; + hDirAC_mem->frame_dec_f = NULL; + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + hDirAC_mem->cy_auto_dir_smooth = (float *) malloc( sizeof( float ) * size ); + set_zero( hDirAC_mem->cy_auto_dir_smooth, size ); + hDirAC_mem->proto_power_smooth = (float *) malloc( sizeof( float ) * size ); + set_zero( hDirAC_mem->proto_power_smooth, size ); + hDirAC_mem->proto_power_diff_smooth = (float *) malloc( sizeof( float ) * size ); + set_zero( hDirAC_mem->proto_power_diff_smooth, size ); + hDirAC_mem->direct_responses_square = (float *) malloc( sizeof( float ) * size ); + set_zero( hDirAC_mem->direct_responses_square, size ); + + hDirAC_mem->frame_dec_f = (float *) malloc( sizeof( float ) * 2 * num_outputs_diff * num_freq_bands ); + } + hDirAC->h_output_synthesis_psd_state.proto_power_smooth = hDirAC_mem->proto_power_smooth; + hDirAC->h_output_synthesis_psd_state.proto_power_diff_smooth = hDirAC_mem->proto_power_diff_smooth; + hDirAC->h_output_synthesis_psd_state.cy_auto_dir_smooth = hDirAC_mem->cy_auto_dir_smooth; + hDirAC->h_output_synthesis_psd_state.direct_responses_square = hDirAC_mem->direct_responses_square; + + /* Target and smoothed nrg factors/gains */ + hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size ); + set_zero( hDirAC_mem->cy_cross_dir_smooth, size ); + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + hDirAC_mem->cy_auto_diff_smooth = (float *) malloc( sizeof( float ) * size ); + set_zero( hDirAC_mem->cy_auto_diff_smooth, size ); + } + else + { + hDirAC_mem->cy_auto_diff_smooth = (float *) malloc( sizeof( float ) * num_outputs_diff * num_freq_bands_diff ); + set_zero( hDirAC_mem->cy_auto_diff_smooth, num_outputs_diff * num_freq_bands_diff ); + } + hDirAC->h_output_synthesis_psd_state.cy_cross_dir_smooth = hDirAC_mem->cy_cross_dir_smooth; + hDirAC->h_output_synthesis_psd_state.cy_auto_diff_smooth = hDirAC_mem->cy_auto_diff_smooth; + + /*Responses (gains/factors)*/ + hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size ); + set_zero( hDirAC_mem->direct_responses, size ); + hDirAC->h_output_synthesis_psd_state.direct_responses = hDirAC_mem->direct_responses; + + /* Prototypes */ + hDirAC_mem->proto_direct_buffer_f = (float *) malloc( sizeof( float ) * 2 * MAX_PARAM_SPATIAL_SUBFRAMES * num_protos_dir * num_freq_bands ); + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + { + hDirAC_mem->proto_diffuse_buffer_f = (float *) malloc( sizeof( float ) * 2 * MAX_PARAM_SPATIAL_SUBFRAMES * size ); + } + else + { + hDirAC_mem->proto_diffuse_buffer_f = (float *) malloc( sizeof( float ) * 2 * MAX_PARAM_SPATIAL_SUBFRAMES * num_outputs_diff * num_freq_bands ); + } + hDirAC->h_output_synthesis_psd_state.proto_direct_buffer_f = hDirAC_mem->proto_direct_buffer_f; + hDirAC->h_output_synthesis_psd_state.proto_diffuse_buffer_f = hDirAC_mem->proto_diffuse_buffer_f; + + /* Gains/power factors*/ + hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands ); + hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * num_freq_bands ); + hDirAC->h_output_synthesis_psd_state.direct_power_factor = hDirAC_mem->direct_power_factor; + hDirAC->h_output_synthesis_psd_state.diffuse_power_factor = hDirAC_mem->diffuse_power_factor; + + hDirAC_mem->reference_power = NULL; + hDirAC_mem->onset_filter = NULL; + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + hDirAC_mem->reference_power = (float *) malloc( sizeof( float ) * 2 * num_freq_bands ); + hDirAC_mem->onset_filter = (float *) malloc( sizeof( float ) * num_outputs_diff * num_freq_bands ); + } + else + { + if ( num_protos_dir > 2 ) + { + hDirAC_mem->reference_power = (float *) malloc( sizeof( float ) * 5 * num_freq_bands ); + } + else + { + hDirAC_mem->reference_power = (float *) malloc( sizeof( float ) * num_freq_bands ); + } + hDirAC_mem->onset_filter = (float *) malloc( sizeof( float ) * 2 * num_freq_bands ); + } + + return; +} + + +static void ivas_dirac_free_mem( + DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ) +{ + if ( hDirAC_mem->cy_auto_dir_smooth != NULL ) + { + free( hDirAC_mem->cy_auto_dir_smooth ); + } + if ( hDirAC_mem->proto_power_smooth != NULL ) + { + free( hDirAC_mem->proto_power_smooth ); + } + if ( hDirAC_mem->proto_power_diff_smooth != NULL ) + { + free( hDirAC_mem->proto_power_diff_smooth ); + } + if ( hDirAC_mem->direct_responses_square != NULL ) + { + free( hDirAC_mem->direct_responses_square ); + } + if ( hDirAC_mem->frame_dec_f != NULL ) + { + free( hDirAC_mem->frame_dec_f ); + } + if ( hDirAC_mem->cy_cross_dir_smooth != NULL ) + { + free( hDirAC_mem->cy_cross_dir_smooth ); + } + if ( hDirAC_mem->cy_auto_diff_smooth != NULL ) + { + free( hDirAC_mem->cy_auto_diff_smooth ); + } + if ( hDirAC_mem->direct_responses != NULL ) + { + free( hDirAC_mem->direct_responses ); + } + if ( hDirAC_mem->proto_direct_buffer_f != NULL ) + { + free( hDirAC_mem->proto_direct_buffer_f ); + } + if ( hDirAC_mem->proto_diffuse_buffer_f != NULL ) + { + free( hDirAC_mem->proto_diffuse_buffer_f ); + } + if ( hDirAC_mem->direct_power_factor != NULL ) + { + free( hDirAC_mem->direct_power_factor ); + } + if ( hDirAC_mem->diffuse_power_factor != NULL ) + { + free( hDirAC_mem->diffuse_power_factor ); + } + if ( hDirAC_mem->reference_power != NULL ) + { + free( hDirAC_mem->reference_power ); + } + if ( hDirAC_mem->onset_filter != NULL ) + { + free( hDirAC_mem->onset_filter ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_read_BS() + * + * Read DirAC parameters from the bitstream + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_read_BS( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + Decoder_State *st, /* i/o: decoder state structure */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata */ + int16_t *nb_bits, /* o : number of bits read */ + const SBA_MODE sba_mode, /* i : SBA mode */ + int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +) +{ + int16_t i, j, b, dir, orig_dirac_bands; + int16_t next_bit_pos_orig; + + *nb_bits = 0; + if ( !st->bfi && ivas_total_brate > IVAS_SID_4k4 ) + { + next_bit_pos_orig = st->next_bit_pos; + st->next_bit_pos = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC - 1 ); + + /* 1 bit flag for signaling metadata to read */ + b = st->bit_stream[( st->next_bit_pos )--]; + ( *nb_bits )++; + + if ( sba_mode == SBA_MODE_SPAR ) + { + if ( ivas_total_brate == IVAS_SID_5k ) + { + b = 1; + } + } + else + { + assert( ( b == 0 ) || ( hQMetaData->q_direction[0].cfg.start_band > 0 ) ); + } + + if ( b == 1 ) /* WB 4TCs condition, no other metadata to read*/ + { + if ( sba_mode != SBA_MODE_SPAR ) + { + if ( hDirAC != NULL ) + { + /* No Data transmitted*/ + hQMetaData->q_direction[0].cfg.nblocks = 0; + for ( dir = 0; dir < hQMetaData->no_directions; dir++ ) + { + for ( b = 0; b < hQMetaData->q_direction[dir].cfg.nbands; b++ ) + { + set_zero( hQMetaData->q_direction[dir].band_data[b].azimuth, MAX_PARAM_SPATIAL_SUBFRAMES ); + set_zero( hQMetaData->q_direction[dir].band_data[b].elevation, MAX_PARAM_SPATIAL_SUBFRAMES ); + { + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hQMetaData->q_direction[dir].band_data[b].energy_ratio_index[i] = 0; + } + } + } + } + } + } + else + { + orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; + + hQMetaData->sba_inactive_mode = 1; + + /* if we start with a SID frame, we need to init the azi/ele arrays.*/ + if ( st->ini_frame == 0 ) + { + for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + set_zero( hQMetaData->q_direction[0].band_data[b].azimuth, MAX_PARAM_SPATIAL_SUBFRAMES ); + set_zero( hQMetaData->q_direction[0].band_data[b].elevation, MAX_PARAM_SPATIAL_SUBFRAMES ); + } + } + + *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT, sba_mode ); + + + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; + } + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + for ( j = orig_dirac_bands - 2; j >= 0; j-- ) + { + hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; + hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; + hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; + } + } + + hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; + } + } + else + { + hQMetaData->sba_inactive_mode = 0; + hQMetaData->is_masa_type_format = 0; + if ( hQMetaData->useLowerRes ) + { + hQMetaData->q_direction[0].cfg.nblocks = 1; + } + else + { + hQMetaData->q_direction[0].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; + } + + *nb_bits += ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ) ); + } + +#ifdef DEBUGGING + assert( *nb_bits >= 0 ); +#endif + + st->next_bit_pos = next_bit_pos_orig; + } + else if ( !st->bfi && ivas_total_brate == IVAS_SID_4k4 ) + { + next_bit_pos_orig = st->next_bit_pos; + + /* subtract mode signalling bits, since bitstream was moved after mode reading */ + st->next_bit_pos = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC - 1 - SID_FORMAT_NBITS ); + + /* if we start with a SID frame, we need to init the azi/ele arrays.*/ + if ( st->ini_frame == 0 ) + { + for ( dir = 0; dir < hQMetaData->no_directions; dir++ ) + { + for ( b = 0; b < hQMetaData->q_direction[dir].cfg.nbands; b++ ) + { + set_zero( hQMetaData->q_direction[dir].band_data[b].azimuth, MAX_PARAM_SPATIAL_SUBFRAMES ); + set_zero( hQMetaData->q_direction[dir].band_data[b].elevation, MAX_PARAM_SPATIAL_SUBFRAMES ); + } + } + } + + *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT, SBA_MODE_DIRAC ); + *nb_bits += SID_FORMAT_NBITS; + + st->next_bit_pos = next_bit_pos_orig; + } + + if ( hDirAC != NULL ) + { + ivas_qmetadata_to_dirac( hQMetaData, hDirAC, NULL, ivas_total_brate, sba_mode, dirac_to_spar_md_bands ); + } + + return; +} + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_to_dirac() + * + * Copy qmetedata to DirAC parameters for rendering + *-----------------------------------------------------------------------*/ + +void ivas_qmetadata_to_dirac( + const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ + DIRAC_DEC_HANDLE hDirAC, /* o : DirAC decoder structure */ + MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const SBA_MODE sba_mode, /* i : SBA mode */ + int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +) +{ + int16_t block, band; + int16_t *seed_ptr; + int16_t band_start, band_end, diff_idx; + float diffuseness; + int16_t ts_start, ts_end, ts, b, ele, azi; + float azimuth, elevation; + IVAS_QDIRECTION *q_direction; + int16_t *band_mapping; + int16_t *band_grouping; + int16_t start_band; + int16_t nbands; + int16_t nblocks; + int16_t qBand_idx; + + q_direction = &( hQMetaData->q_direction[0] ); + hDirAC->numSimultaneousDirections = hQMetaData->no_directions; + + if ( hMasa != NULL && ivas_total_brate > IVAS_SID_4k4 ) + { + band_mapping = hMasa->data.band_mapping; + + for ( band = 0; band < hMasa->config.numCodingBands; ++band ) + { + for ( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) + { + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) + { + hDirAC->azimuth[block][b] = (int16_t) q_direction->band_data[band].azimuth[block]; + hDirAC->elevation[block][b] = (int16_t) q_direction->band_data[band].elevation[block]; + hDirAC->energy_ratio1[block][b] = q_direction->band_data[band].energy_ratio[block]; + hDirAC->diffuseness_vector[block][b] = 1.0f - q_direction->band_data[band].energy_ratio[block]; + + if ( q_direction->coherence_band_data != NULL ) + { + hDirAC->spreadCoherence[block][b] = q_direction->coherence_band_data[band].spread_coherence[block] / 255.0f; + } + else + { + hDirAC->spreadCoherence[block][b] = 0.0f; + } + + if ( hQMetaData->surcoh_band_data != NULL ) + { + hDirAC->surroundingCoherence[block][b] = hQMetaData->surcoh_band_data[band].surround_coherence[block] / 255.0f; + } + else + { + hDirAC->surroundingCoherence[block][b] = 0.0f; + } + } + } + } + + if ( hQMetaData->no_directions == 2 ) + { + q_direction = &( hQMetaData->q_direction[1] ); + for ( band = 0; band < hMasa->config.numCodingBands; ++band ) + { + for ( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) + { + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) + { + hDirAC->azimuth2[block][b] = (int16_t) q_direction->band_data[band].azimuth[block]; + hDirAC->elevation2[block][b] = (int16_t) q_direction->band_data[band].elevation[block]; + hDirAC->energy_ratio2[block][b] = q_direction->band_data[band].energy_ratio[block]; + hDirAC->diffuseness_vector[block][b] -= q_direction->band_data[band].energy_ratio[block]; + + if ( q_direction->coherence_band_data != NULL ) + { + hDirAC->spreadCoherence2[block][b] = q_direction->coherence_band_data[band].spread_coherence[block] / 255.0f; + } + else + { + hDirAC->spreadCoherence2[block][b] = 0.0f; + } + } + } + } + } + } + else /* SBA mode/SID/Zero frame*/ + { + int16_t num_slots_in_subfr; + int16_t tmp_write_idx_param_band; + int16_t tmp_write_idx_band; + + num_slots_in_subfr = hDirAC->hConfig->dec_param_estim ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; + /* ungroup */ + seed_ptr = &hDirAC->dithering_seed; + nblocks = q_direction->cfg.nblocks; + nbands = hDirAC->band_grouping[hDirAC->hConfig->nbands]; + band_grouping = hDirAC->band_grouping; + + if ( ivas_total_brate <= IVAS_SID_4k4 && sba_mode != SBA_MODE_SPAR ) + { + /* SID/zero-frame: 1 direction, 5 bands, nblocks re-generated out of SID decoder*/ + start_band = 0; + hDirAC->hConfig->nbands = 5; + ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, NULL, 0, 0, NULL ); + nbands = 5; + } + else + { + assert( ( hQMetaData->no_directions == 1 ) && "Only 1 direction supported in SBA mode!" ); + start_band = hDirAC->hConfig->enc_param_start_band; + + if ( sba_mode == SBA_MODE_SPAR ) + { + hDirAC->hConfig->nbands = IVAS_MAX_NUM_BANDS; + } + else + { + hDirAC->hConfig->nbands = q_direction->cfg.nbands; + } + + ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, + dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hDirAC->hConfig->enc_param_start_band, hDirAC->hFbMdft ); + + nbands = hDirAC->hConfig->nbands; + if ( hQMetaData->q_direction[0].cfg.nblocks == 0 ) + { + /* No transmission -> no copy from qmetadata buffers*/ + nbands = start_band; + } + } + + /* Low-Bands with no spatial data transmitted, analysis at decoder side */ + for ( band = 0; band < start_band; band++ ) + { + band_start = band_grouping[band]; + band_end = band_grouping[band + 1]; + for ( block = 0; block < hDirAC->nb_subframes; block++ ) + { + for ( b = band_start; b < band_end; b++ ) + { + hDirAC->spreadCoherence[block][b] = 0.0f; + hDirAC->surroundingCoherence[block][b] = 0.0f; + } + } + } + + /* Bands with spatial data transmitted */ + + for ( band = start_band; band < nbands; band++ ) + { + band_start = band_grouping[band]; + band_end = band_grouping[band + 1]; + tmp_write_idx_param_band = hDirAC->dirac_bs_md_write_idx; + + if ( sba_mode == SBA_MODE_SPAR ) + { + qBand_idx = dirac_to_spar_md_bands[band] - start_band; + } + else + { + qBand_idx = band; + } + diffuseness = 1.0f - q_direction->band_data[qBand_idx].energy_ratio[0]; +#ifdef DEBUG_MODE_DIRAC + dbgwrite( &diffuseness, sizeof( float ), 1, 1, "./res/dirac_dec_diffuseness.dat" ); +#endif + diff_idx = q_direction->band_data[qBand_idx].energy_ratio_index[0]; + + for ( block = 0; block < hDirAC->nb_subframes; block++ ) + { + int16_t block_qmetadata; + + ts_start = hDirAC->block_grouping[block]; + ts_end = hDirAC->block_grouping[block + 1]; + + block_qmetadata = min( block, nblocks - 1 ); + block_qmetadata = max( block_qmetadata, 0 ); + + if ( q_direction->band_data[qBand_idx].azimuth[block_qmetadata] < 0.f ) + { + q_direction->band_data[qBand_idx].azimuth[block_qmetadata] += 360.f; + } + azimuth = q_direction->band_data[qBand_idx].azimuth[block_qmetadata]; + elevation = q_direction->band_data[qBand_idx].elevation[block_qmetadata]; + + for ( b = band_start; b < band_end; b++ ) + { + tmp_write_idx_band = tmp_write_idx_param_band; + azi = (int16_t) ( azimuth + rand_triangular_signed( seed_ptr ) * dirac_dithering_azi_scale[diff_idx] + 0.5f ); + ele = (int16_t) ( elevation + rand_triangular_signed( seed_ptr ) * dirac_dithering_ele_scale[diff_idx] + 0.5f ); + /* limit the elevation to [-90, 90] */ + ele = min( 90, ele ); + ele = max( -90, ele ); + + if ( ivas_total_brate > IVAS_SID_4k4 && q_direction->coherence_band_data != NULL ) + { + hDirAC->spreadCoherence[tmp_write_idx_band][b] = q_direction->coherence_band_data[qBand_idx].spread_coherence[block] / 255.0f; + } + else + { + hDirAC->spreadCoherence[tmp_write_idx_band][b] = 0.0f; + } + + if ( ivas_total_brate > IVAS_SID_4k4 && q_direction->coherence_band_data != NULL ) + { + hDirAC->surroundingCoherence[tmp_write_idx_band][b] = hQMetaData->surcoh_band_data[qBand_idx].surround_coherence[0] / 255.0f; + } + else + { + hDirAC->surroundingCoherence[tmp_write_idx_band][b] = 0.0f; + } + + hDirAC->energy_ratio1[tmp_write_idx_band][b] = q_direction->band_data[qBand_idx].energy_ratio[0]; + + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + hDirAC->elevation[tmp_write_idx_band][b] = ele; + hDirAC->azimuth[tmp_write_idx_band][b] = azi; + hDirAC->diffuseness_vector[tmp_write_idx_band][b] = diffuseness; + } + else + { + for ( ts = ts_start; ts < ts_end; ts++ ) + { + hDirAC->elevation[tmp_write_idx_band][b] = ele; + hDirAC->azimuth[tmp_write_idx_band][b] = azi; + hDirAC->diffuseness_vector[tmp_write_idx_band][b] = diffuseness; + tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hDirAC->dirac_md_buffer_length; + } + } + } /* for ( band = ...) */ + + tmp_write_idx_param_band = ( tmp_write_idx_param_band + num_slots_in_subfr ) % hDirAC->dirac_md_buffer_length; + + } /* for ( block =...) */ + } +#ifdef DEBUG_MODE_DIRAC + { + for ( block = 0; block < hDirAC->nb_subframes; block++ ) + { + int16_t block_qmetadata; + + block_qmetadata = min( block, nblocks - 1 ); + block_qmetadata = max( block_qmetadata, 0 ); + for ( band = start_band; band < nbands; band++ ) + { + dbgwrite( &q_direction->band_data[band].azimuth[block_qmetadata], sizeof( float ), 1, 1, "./res/dirac_dec_azi.dat" ); + dbgwrite( &q_direction->band_data[band].elevation[block_qmetadata], sizeof( float ), 1, 1, "./res/dirac_dec_ele.dat" ); + } + } + } +#endif + + /* Bands not transmitted -> zeroed*/ + for ( b = band_grouping[band]; b < hDirAC->num_freq_bands; b++ ) + { + tmp_write_idx_band = hDirAC->dirac_bs_md_write_idx; + for ( block = 0; block < hDirAC->nb_subframes; block++ ) + { + ts_start = hDirAC->block_grouping[block]; + ts_end = hDirAC->block_grouping[block + 1]; + + hDirAC->spreadCoherence[block][b] = 0.0f; + hDirAC->surroundingCoherence[block][b] = 0.0f; + hDirAC->energy_ratio1[block][b] = 0; + + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + hDirAC->elevation[tmp_write_idx_band][b] = 0; + hDirAC->azimuth[tmp_write_idx_band][b] = 0; + hDirAC->diffuseness_vector[tmp_write_idx_band][b] = 0.f; + tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hDirAC->dirac_md_buffer_length; + } + else + { + for ( ts = ts_start; ts < ts_end; ts++ ) + { + hDirAC->elevation[tmp_write_idx_band][b] = 0; + hDirAC->azimuth[tmp_write_idx_band][b] = 0; + hDirAC->diffuseness_vector[tmp_write_idx_band][b] = 0.f; + tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hDirAC->dirac_md_buffer_length; + } + } + } + } + } + + /* update buffer write index */ + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + hDirAC->dirac_bs_md_write_idx = ( hDirAC->dirac_bs_md_write_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % hDirAC->dirac_md_buffer_length; + } + else + { + hDirAC->dirac_bs_md_write_idx = ( hDirAC->dirac_bs_md_write_idx + CLDFB_NO_COL_MAX ) % hDirAC->dirac_md_buffer_length; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec() + * + * DirAC decoding process + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int16_t nchan_transport, /* i : number of transport channels */ + float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], + float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], + const int16_t i_sf ) +{ + int16_t i, ch, idx_in, idx_lfe; + DIRAC_DEC_HANDLE hDirAC; + float dirEne; + float surCohEner; + float surCohRatio[CLDFB_NO_CHANNELS_MAX]; + int16_t subframe_idx; + int16_t sf1, sf2; + int16_t slot_idx, index_slot; + float *p_Rmat; + + /*CLDFB: last output channels reserved to LFT for CICPx*/ + float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + int16_t index, num_freq_bands; + + DIRAC_DEC_STACK_MEM DirAC_mem; + float *reference_power, *reference_power_smooth; + float *onset_filter, *onset_filter_subframe, *p_onset_filter = NULL; + uint16_t coherence_flag; + wmops_sub_start( "ivas_dirac_dec" ); + + /* Initialize aux buffers */ + hDirAC = st_ivas->hDirAC; + DirAC_mem = st_ivas->hDirAC->stack_mem; + + reference_power = DirAC_mem.reference_power; + reference_power_smooth = DirAC_mem.reference_power + hDirAC->num_freq_bands; + onset_filter = DirAC_mem.onset_filter; + onset_filter_subframe = DirAC_mem.onset_filter + hDirAC->num_freq_bands; + + if ( st_ivas->hQMetaData != NULL && st_ivas->sba_mode != SBA_MODE_SPAR ) + { + coherence_flag = st_ivas->hQMetaData->coherence_flag; + } + else + { + coherence_flag = 0; + } + +#ifdef DEBUG_MODE_DIRAC + { + int16_t n, tmp[DIRAC_MAX_TRANS_CHANS * L_FRAME48k]; + char file_name[50] = { 0 }; + const int16_t output_frame = st_ivas->output_Fs / FRAMES_PER_SEC; + + for ( n = 0; n < nchan_transport; n++ ) + { + for ( i = 0; i < output_frame; i++ ) + { + tmp[nchan_transport * i + n] = (int16_t) ( output_f[n][i] + 0.5f ); + } + } + sprintf( file_name, "./res/ivas_dirac_dec_DMX%d.%d.pcm", nchan_transport, (int16_t) ( output_frame * 0.05 ) ); + dbgwrite( tmp, sizeof( int16_t ), nchan_transport * output_frame, 1, file_name ); + } +#endif + + /* Subframe loop */ + + if ( i_sf == -1 ) + { + sf1 = 0; + sf2 = hDirAC->nb_subframes; + } + else + { + sf1 = i_sf; + sf2 = i_sf + 1; + } + + for ( subframe_idx = sf1; subframe_idx < sf2; subframe_idx++ ) + { + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + set_zero( reference_power_smooth, hDirAC->num_freq_bands ); + } + else + { + set_zero( onset_filter_subframe, hDirAC->num_freq_bands ); + } + + if ( ( st_ivas->hHeadTrackData ) ) + { + QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], st_ivas->hHeadTrackData->Rmat ); + + p_Rmat = &st_ivas->hHeadTrackData->Rmat[0][0]; + + if ( st_ivas->hHeadTrackData->shd_rot_max_order == 0 ) + { + num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; + for ( slot_idx = 0; slot_idx < hDirAC->subframe_nbslots; slot_idx++ ) + { + index_slot = subframe_idx * hDirAC->subframe_nbslots + slot_idx; + rotateAziEle_DirAC( hDirAC->azimuth[index_slot], hDirAC->elevation[index_slot], num_freq_bands, hDirAC->num_freq_bands, p_Rmat ); + } + } + } + else + { + p_Rmat = 0; + } + + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + /* compute response */ + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + ivas_dirac_dec_compute_power_factors( hDirAC->num_freq_bands, + hDirAC->diffuseness_vector[hDirAC->dirac_read_idx], + hDirAC->h_output_synthesis_psd_params.max_band_decorr, + hDirAC->h_output_synthesis_psd_state.direct_power_factor, + hDirAC->h_output_synthesis_psd_state.diffuse_power_factor ); + + if ( coherence_flag ) + { + for ( i = 0; i < hDirAC->num_freq_bands; i++ ) + { + dirEne = hDirAC->h_output_synthesis_psd_state.direct_power_factor[i]; + surCohEner = hDirAC->h_output_synthesis_psd_state.diffuse_power_factor[i] * hDirAC->surroundingCoherence[subframe_idx][i]; + hDirAC->h_output_synthesis_psd_state.diffuse_power_factor[i] -= surCohEner; + hDirAC->h_output_synthesis_psd_state.direct_power_factor[i] += surCohEner; + + surCohRatio[i] = surCohEner / ( 1e-12f + dirEne + surCohEner ); + } + } + else + { + set_zero( surCohRatio, hDirAC->num_freq_bands ); + } + } + else + { + ivas_dirac_dec_compute_gain_factors( hDirAC->num_freq_bands, + hDirAC->diffuseness_vector[hDirAC->dirac_read_idx], + hDirAC->h_output_synthesis_psd_params.max_band_decorr, + hDirAC->h_output_synthesis_psd_state.direct_power_factor, + hDirAC->h_output_synthesis_psd_state.diffuse_power_factor ); + + if ( coherence_flag ) + { + for ( i = 0; i < hDirAC->num_freq_bands; i++ ) + { + surCohRatio[i] = hDirAC->surroundingCoherence[hDirAC->dirac_read_idx][i]; + } + } + else + { + set_zero( surCohRatio, hDirAC->num_freq_bands ); + } + } + if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData->shd_rot_max_order == 1 ) + { + ivas_dirac_dec_compute_directional_responses( hDirAC, + st_ivas->hVBAPdata, + st_ivas->hMasa, + subframe_idx, + subframe_idx, + surCohRatio, + st_ivas->hHeadTrackData->shd_rot_max_order, + p_Rmat ); + } + else + { + ivas_dirac_dec_compute_directional_responses( hDirAC, + st_ivas->hVBAPdata, + st_ivas->hMasa, + subframe_idx, + subframe_idx, + surCohRatio, + 0, + 0 ); + } + } + + for ( slot_idx = 0; slot_idx < hDirAC->subframe_nbslots; slot_idx++ ) + { + index_slot = subframe_idx * hDirAC->subframe_nbslots + slot_idx; + + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + for ( ch = 0; ch < nchan_transport; ch++ ) + { + mvr2r( pppQMfFrame_ts_re[ch][slot_idx], Cldfb_RealBuffer[ch][0], hDirAC->num_freq_bands ); + mvr2r( pppQMfFrame_ts_im[ch][slot_idx], Cldfb_ImagBuffer[ch][0], hDirAC->num_freq_bands ); + } + } + else + { + /* CLDFB Analysis*/ + for ( ch = 0; ch < nchan_transport; ch++ ) + { + cldfbAnalysis_ts( &( output_f[sba_map_tc[ch]][hDirAC->num_freq_bands * index_slot] ), + Cldfb_RealBuffer[ch][0], + Cldfb_ImagBuffer[ch][0], + hDirAC->num_freq_bands, + st_ivas->cldfbAnaDec[ch] ); + } + } + /* CNG in DirAC, extra CLDFB ana for CNA*/ + if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->sba_mode != SBA_MODE_SPAR ) + { + Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; + + generate_masking_noise_dirac( st->hFdCngDec->hFdCngCom, + st_ivas->cldfbAnaDec[1], + &( output_f[1][L_FRAME48k - L_FRAME16k] ), + Cldfb_RealBuffer[1][0], + Cldfb_ImagBuffer[1][0], + index_slot, + st->cna_dirac_flag && st->flag_cna, + ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && ( st->cng_type == FD_CNG ) && st->cng_dirac_flag ); + } + + /* LFE synthesis */ + if ( st_ivas->mc_mode == MC_MODE_MCMASA && !hDirAC->hOutSetup.separateChannelEnabled && !( hDirAC->hOutSetup.output_config == AUDIO_CONFIG_LS_CUSTOM && hDirAC->hOutSetup.num_lfe == 0 ) ) + { + ivas_lfe_synth_with_cldfb( st_ivas->hMasa->hMasaLfeSynth, + Cldfb_RealBuffer, Cldfb_ImagBuffer, + Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS - 1], Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS - 1], + slot_idx, + subframe_idx, + nchan_transport ); + } + + /*-----------------------------------------------------------------* + * protoype signal computation + *-----------------------------------------------------------------*/ + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData->shd_rot_max_order == 0 ) + { + protoSignalComputation_shd( Cldfb_RealBuffer, Cldfb_ImagBuffer, + hDirAC->h_output_synthesis_psd_state.proto_direct_buffer_f, + hDirAC->h_output_synthesis_psd_state.proto_diffuse_buffer_f, + reference_power, slot_idx, nchan_transport, + hDirAC->num_outputs_diff, + hDirAC->num_freq_bands, + p_Rmat + + ); + } + else + { + protoSignalComputation_shd( Cldfb_RealBuffer, Cldfb_ImagBuffer, + hDirAC->h_output_synthesis_psd_state.proto_direct_buffer_f, + hDirAC->h_output_synthesis_psd_state.proto_diffuse_buffer_f, + reference_power, slot_idx, nchan_transport, + hDirAC->num_outputs_diff, + hDirAC->num_freq_bands, + 0 + + ); + } + } + else if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + protoSignalComputation2( Cldfb_RealBuffer, Cldfb_ImagBuffer, hDirAC->proto_frame_f, + hDirAC->h_output_synthesis_psd_state.proto_direct_buffer_f, + reference_power, hDirAC->h_output_synthesis_psd_state.proto_power_smooth, + 0, slot_idx, hDirAC->num_freq_bands, hDirAC->masa_stereo_type_detect ); + } + else + { + switch ( nchan_transport ) + { + case 8: + case 6: + case 4: + protoSignalComputation4( Cldfb_RealBuffer, Cldfb_ImagBuffer, + hDirAC->proto_frame_f, + hDirAC->h_output_synthesis_psd_state.proto_direct_buffer_f, + reference_power, + hDirAC->h_output_synthesis_psd_state.proto_power_smooth, + slot_idx, hDirAC->num_outputs_diff, + hDirAC->num_freq_bands, + hDirAC->hoa_decoder, + nchan_transport ); + break; + case 2: + protoSignalComputation2( Cldfb_RealBuffer, Cldfb_ImagBuffer, + hDirAC->proto_frame_f, + hDirAC->h_output_synthesis_psd_state.proto_direct_buffer_f, + reference_power, + hDirAC->h_output_synthesis_psd_state.proto_power_smooth, + hDirAC->hOutSetup.is_loudspeaker_setup, + slot_idx, + hDirAC->num_freq_bands, + hDirAC->masa_stereo_type_detect ); + break; + case 1: + protoSignalComputation1( Cldfb_RealBuffer, Cldfb_ImagBuffer, + hDirAC->proto_frame_f, + hDirAC->h_output_synthesis_psd_state.proto_direct_buffer_f, + reference_power, + hDirAC->h_output_synthesis_psd_state.proto_power_smooth, + slot_idx, + hDirAC->num_protos_diff, + hDirAC->num_freq_bands ); + break; + default: + return; + } + } + + /*-----------------------------------------------------------------* + * Compute DirAC parameters at decoder side + *-----------------------------------------------------------------*/ + if ( hDirAC->hConfig->dec_param_estim == TRUE ) + { + hDirAC->index_buffer_intensity = ( hDirAC->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1; /* averaging_length = 32 */ + + index = hDirAC->index_buffer_intensity; + + num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; + + computeIntensityVector_dec( Cldfb_RealBuffer, + Cldfb_ImagBuffer, + num_freq_bands, + hDirAC->buffer_intensity_real[0][index - 1], + hDirAC->buffer_intensity_real[1][index - 1], + hDirAC->buffer_intensity_real[2][index - 1] ); + + computeDirectionAngles( hDirAC->buffer_intensity_real[0][index - 1], + hDirAC->buffer_intensity_real[1][index - 1], + hDirAC->buffer_intensity_real[2][index - 1], + num_freq_bands, + + hDirAC->azimuth[hDirAC->dirac_estimator_idx], + hDirAC->elevation[hDirAC->dirac_estimator_idx] ); + + mvr2r( reference_power, &( hDirAC->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); + + computeDiffuseness( hDirAC->buffer_intensity_real, + hDirAC->buffer_energy, + num_freq_bands, + hDirAC->diffuseness_vector[hDirAC->dirac_estimator_idx] ); + + hDirAC->dirac_estimator_idx = ( hDirAC->dirac_estimator_idx + 1 ) % hDirAC->dirac_md_buffer_length; + } + +#if DEBUG_MODE_DIRAC + { + static FILE *fp_direction_vector = NULL, *fp_diffuseness = NULL, *fp_referencePower = NULL; + + + if ( fp_direction_vector == NULL ) + fp_direction_vector = fopen( "./res/dbg_direction_vector_C_dec.bin", "wb" ); + if ( fp_diffuseness == NULL ) + fp_diffuseness = fopen( "./res/dbg_diffuseness_C_dec.bin", "wb" ); + if ( fp_referencePower == NULL ) + fp_referencePower = fopen( "./res/dbg_reference_power_C_dec.bin", "wb" ); + + + for ( i = 0; i < hDirAC->num_freq_bands; i++ ) + { + float radius_length; + float dv[3]; + + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + radius_length = cos( hDirAC->elevation[subframe_idx][i] * PI_OVER_180 ); + dv[0] = radius_length * cos( hDirAC->azimuth[subframe_idx][i] * PI_OVER_180 ); + dv[1] = radius_length * sin( hDirAC->azimuth[subframe_idx][i] * PI_OVER_180 ); + dv[2] = sin( hDirAC->elevation[subframe_idx][i] * PI_OVER_180 ); + + fwrite( dv, sizeof( float ), 3, fp_direction_vector ); + fwrite( &( hDirAC->diffuseness_vector[0][i] ), sizeof( float ), 1, fp_diffuseness ); + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + reference_power[i] = Cldfb_RealBuffer[0][0][i] * Cldfb_RealBuffer[0][0][i] + Cldfb_ImagBuffer[0][0][i] * Cldfb_ImagBuffer[0][0][i]; + } + fwrite( &( reference_power[i] ), sizeof( float ), 1, fp_referencePower ); + } + else + { + radius_length = cos( hDirAC->elevation[index_slot][i] * PI_OVER_180 ); + dv[0] = radius_length * cos( hDirAC->azimuth[index_slot][i] * PI_OVER_180 ); + dv[1] = radius_length * sin( hDirAC->azimuth[index_slot][i] * PI_OVER_180 ); + dv[2] = sin( hDirAC->elevation[index_slot][i] * PI_OVER_180 ); + + fwrite( dv, sizeof( float ), 3, fp_direction_vector ); + fwrite( &( hDirAC->diffuseness_vector[index_slot][i] ), sizeof( float ), 1, fp_diffuseness ); + fwrite( &( reference_power[i] ), sizeof( float ), 1, fp_referencePower ); + } + } + } +#endif + + /*-----------------------------------------------------------------* + * frequency domain decorrelation + *-----------------------------------------------------------------*/ + + if ( hDirAC->proto_signal_decorr_on == 1 ) + { + /* decorrelate prototype frame */ + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + ivas_dirac_dec_decorr_process( hDirAC->num_freq_bands, + hDirAC->num_outputs_diff, + hDirAC->num_protos_diff, + hDirAC->synthesisConf, + nchan_transport, + hDirAC->h_output_synthesis_psd_state.proto_diffuse_buffer_f + slot_idx * 2 * hDirAC->num_freq_bands * hDirAC->num_outputs_diff, + hDirAC->num_protos_diff, + hDirAC->proto_index_diff, + hDirAC->h_output_synthesis_psd_state.proto_diffuse_buffer_f + slot_idx * 2 * hDirAC->num_freq_bands * hDirAC->num_outputs_diff + 2 * hDirAC->num_freq_bands * min( 4, nchan_transport ), + onset_filter, + hDirAC->h_freq_domain_decorr_ap_params, + hDirAC->h_freq_domain_decorr_ap_state ); + + v_multc( onset_filter, 0.25f, onset_filter, hDirAC->num_freq_bands ); + v_add( onset_filter, onset_filter_subframe, onset_filter_subframe, hDirAC->num_freq_bands ); + p_onset_filter = onset_filter_subframe; + } + else + { + ivas_dirac_dec_decorr_process( hDirAC->num_freq_bands, + hDirAC->num_outputs_diff, + hDirAC->num_protos_diff, + hDirAC->synthesisConf, + nchan_transport, + hDirAC->proto_frame_f, + hDirAC->num_protos_diff, + hDirAC->proto_index_diff, + DirAC_mem.frame_dec_f, + onset_filter, + hDirAC->h_freq_domain_decorr_ap_params, + hDirAC->h_freq_domain_decorr_ap_state ); + + hDirAC->proto_frame_dec_f = DirAC_mem.frame_dec_f; + p_onset_filter = onset_filter; + } + } + else + { + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + set_f( onset_filter_subframe, 1.f, hDirAC->num_freq_bands ); + p_onset_filter = onset_filter_subframe; + } + else + { + /* no frequency domain decorrelation: use prototype frame */ + hDirAC->proto_frame_dec_f = hDirAC->proto_frame_f; + p_onset_filter = NULL; + } + } + + /*-----------------------------------------------------------------* + * output synthesis + *-----------------------------------------------------------------*/ + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS || hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + { + /*Compute diffuse prototypes*/ + ivas_dirac_dec_compute_diffuse_proto( hDirAC, slot_idx ); + } + + /*Compute PSDs*/ + if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData->shd_rot_max_order == 2 ) + { + ivas_dirac_dec_output_synthesis_process_slot( reference_power, + p_onset_filter, + hDirAC, + p_Rmat, + st_ivas->hVBAPdata, + hDirAC->hOutSetup, + nchan_transport, + index_slot ); + } + else + { + ivas_dirac_dec_output_synthesis_process_slot( reference_power, + p_onset_filter, + hDirAC, + 0, + st_ivas->hVBAPdata, + hDirAC->hOutSetup, + nchan_transport, + index_slot ); + } + + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + v_add( reference_power, reference_power_smooth, reference_power_smooth, hDirAC->num_freq_bands ); + } + if ( hDirAC->hConfig->dec_param_estim ) + { + hDirAC->dirac_read_idx = ( hDirAC->dirac_read_idx + 1 ) % hDirAC->dirac_md_buffer_length; + } + } + if ( hDirAC->hConfig->dec_param_estim == 0 ) + { + hDirAC->dirac_read_idx = ( hDirAC->dirac_read_idx + 1 ) % hDirAC->dirac_md_buffer_length; + } + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( Cldfb_RealBuffer, + Cldfb_ImagBuffer, + hDirAC, + nchan_transport, + p_onset_filter ); + } + else + { + /* Determine encoding quality based additional smoothing factor */ + float qualityBasedSmFactor = 1.0f; + if ( st_ivas->hMasa != NULL ) + { + qualityBasedSmFactor = st_ivas->hMasa->data.dir_decode_quality; + qualityBasedSmFactor *= qualityBasedSmFactor; + } + + ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( Cldfb_RealBuffer, + Cldfb_ImagBuffer, + hDirAC, + reference_power_smooth, + qualityBasedSmFactor ); + } + + /*-----------------------------------------------------------------* + * CLDFB synthesis (and binaural rendering) + *-----------------------------------------------------------------*/ + + index_slot = subframe_idx * hDirAC->subframe_nbslots; + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + /* Perform binaural rendering */ + ivas_binRenderer( st_ivas->hBinRenderer, + st_ivas->hHeadTrackData, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + Cldfb_RealBuffer, + Cldfb_ImagBuffer ); + + + /* Inverse CLDFB*/ + for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) + { + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + RealBuffer[i] = Cldfb_RealBuffer_Binaural[ch][i]; + ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[ch][i]; + } + + cldfbSynthesis( RealBuffer, + ImagBuffer, + &( output_f[ch][index_slot * hDirAC->num_freq_bands] ), + hDirAC->num_freq_bands * hDirAC->subframe_nbslots, + st_ivas->cldfbSynDec[ch] ); + } + } + else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + for ( ch = 0; ch < hDirAC->hOutSetup.nchan_out_woLFE; ch++ ) + { + for ( slot_idx = 0; slot_idx < hDirAC->subframe_nbslots; slot_idx++ ) + { + mvr2r( Cldfb_RealBuffer[ch][slot_idx], pppQMfFrame_ts_re[ch][slot_idx], hDirAC->num_freq_bands ); + mvr2r( Cldfb_ImagBuffer[ch][slot_idx], pppQMfFrame_ts_im[ch][slot_idx], hDirAC->num_freq_bands ); + } + } + } + else + { + float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t outchannels; + + idx_in = 0; + idx_lfe = 0; + + outchannels = hDirAC->hOutSetup.nchan_out_woLFE + hDirAC->hOutSetup.num_lfe; + if ( hDirAC->hOutSetup.separateChannelEnabled && ( hDirAC->hOutSetup.output_config == AUDIO_CONFIG_5_1 || + hDirAC->hOutSetup.output_config == AUDIO_CONFIG_7_1 || + hDirAC->hOutSetup.output_config == AUDIO_CONFIG_5_1_2 || + hDirAC->hOutSetup.output_config == AUDIO_CONFIG_5_1_4 || + hDirAC->hOutSetup.output_config == AUDIO_CONFIG_7_1_4 || + ( hDirAC->hOutSetup.output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) + { + outchannels++; + } + + if ( hDirAC->hOutSetup.separateChannelEnabled && hDirAC->hOutSetup.output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + float tmp_separated[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + float tmp_lfe[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + const int16_t subframe_start_sample = index_slot * hDirAC->num_freq_bands; + const int16_t num_samples_subframe = hDirAC->num_freq_bands * hDirAC->subframe_nbslots; + + /* Move the separated and the LFE channels to temporary variables as spatial synthesis may overwrite current channels */ + mvr2r( &( output_f[st_ivas->hOutSetup.separateChannelIndex][subframe_start_sample] ), tmp_separated, num_samples_subframe ); + mvr2r( &( output_f[LFE_CHANNEL][subframe_start_sample] ), tmp_lfe, num_samples_subframe ); + + for ( ch = 0; ch < outchannels; ch++ ) + { + if ( ( hDirAC->hOutSetup.num_lfe > 0 ) && ( hDirAC->hOutSetup.index_lfe[idx_lfe] == ch ) ) + { + /* Move the LFE channel to the correct place */ + mvr2r( tmp_lfe, &( output_f[ch][subframe_start_sample] ), num_samples_subframe ); + + if ( idx_lfe < ( hDirAC->hOutSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else if ( ( st_ivas->hLsSetupCustom->separate_ch_found ) && ( hDirAC->hOutSetup.separateChannelIndex == ch ) ) + { + /* Move the separated channel to the correct place. Thus, the separated channel is + * combined with the synthesized channels here when there is a matching channel. */ + mvr2r( tmp_separated, &( output_f[ch][subframe_start_sample] ), num_samples_subframe ); + } + else + { + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; + ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; + } + cldfbSynthesis( RealBuffer, ImagBuffer, &( output_f[ch][subframe_start_sample] ), num_samples_subframe, st_ivas->cldfbSynDec[idx_in] ); + + if ( !st_ivas->hLsSetupCustom->separate_ch_found ) + { + /* Pan the separated channel and mix with the synthesized channels. Thus, the separated channel + * is combined with the synthesized channels here when there is no matching channel. */ + v_multc_acc( tmp_separated, st_ivas->hLsSetupCustom->separate_ch_gains[idx_in], &( output_f[ch][subframe_start_sample] ), num_samples_subframe ); + } + + idx_in++; + } + } + } + else + { + for ( ch = 0; ch < outchannels; ch++ ) + { + if ( ( hDirAC->hOutSetup.num_lfe > 0 ) && ( hDirAC->hOutSetup.index_lfe[idx_lfe] == ch ) ) + { + if ( st_ivas->mc_mode == MC_MODE_MCMASA && !hDirAC->hOutSetup.separateChannelEnabled ) + { + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + RealBuffer[i] = Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS - 1][i]; + ImagBuffer[i] = Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS - 1][i]; + } + cldfbSynthesis( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * hDirAC->num_freq_bands] ), hDirAC->num_freq_bands * hDirAC->subframe_nbslots, st_ivas->cldfbSynDec[hDirAC->hOutSetup.nchan_out_woLFE + idx_lfe] ); + } + else if ( st_ivas->mc_mode == MC_MODE_MCMASA && hDirAC->hOutSetup.separateChannelEnabled ) + { + /* LFE has been synthesized in the time domain, do nothing. */ + } + else + { + set_zero( &( output_f[ch][index_slot * hDirAC->num_freq_bands] ), hDirAC->subframe_nbslots * hDirAC->num_freq_bands ); + } + + if ( idx_lfe < ( hDirAC->hOutSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else if ( ( hDirAC->hOutSetup.separateChannelEnabled ) && ( hDirAC->hOutSetup.separateChannelIndex == ch ) ) + { + /* The separated channel is already set to output_f[hOutSetup.separateChannelIndex]. Thus, the separated + * channel is combined with the synthesized channels here. */ + } + else + { + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; + ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; + } + cldfbSynthesis( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * hDirAC->num_freq_bands] ), hDirAC->num_freq_bands * hDirAC->subframe_nbslots, st_ivas->cldfbSynDec[idx_in] ); + idx_in++; + } + } + } + } + } + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * compute_hoa_encoder_mtx() + * + * + *------------------------------------------------------------------------*/ + +void compute_hoa_encoder_mtx( + const float *azimuth, + const float *elevation, + float *response, + const int16_t num_responses, + const int16_t ambisonics_order ) +{ + int16_t k, num_sh; + + num_sh = ( ambisonics_order + 1 ) * ( ambisonics_order + 1 ); + + for ( k = 0; k < num_responses; k++ ) + { + ivas_dirac_dec_get_response( (const int16_t) azimuth[k], (const int16_t) elevation[k], &response[k * num_sh], ambisonics_order ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_get_frequency_axis() + * + * DirAC decoding initialization + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_get_frequency_axis( + float *frequency_axis, + const int32_t output_Fs, + const int16_t num_freq_bands ) +{ + int16_t k; + float const_part; + + /* calc cldfb frequency axis */ + const_part = (float) output_Fs / ( 2.0f * (float) num_freq_bands ); + for ( k = 0; k < num_freq_bands; ++k ) + { + frequency_axis[k] = ( (float) k + 0.5f ) * const_part; + } + + return; +} + + +/*------------------------------------------------------------------------- + * Local functions + *-------------------------------------------------------------------------*/ + +static void initDiffuseResponses( + float *diffuse_response_function, + const int16_t num_channels, + AUDIO_CONFIG output_config, + IVAS_OUTPUT_SETUP hOutSetup, + const int16_t ambisonics_order, + const IVAS_FORMAT ivas_format, + int16_t *num_ele_spk_no_diffuse_rendering, + AUDIO_CONFIG transport_config ) +{ + int16_t i, l, k, idx, num_horizontal_speakers; + *num_ele_spk_no_diffuse_rendering = 0; + + if ( output_config == AUDIO_CONFIG_MONO ) + { + diffuse_response_function[0] = 1.0f; + diffuse_response_function[1] = 1.0f / sqrtf( 3.0f ); + } + else if ( !( output_config == AUDIO_CONFIG_FOA || output_config == AUDIO_CONFIG_HOA2 || output_config == AUDIO_CONFIG_HOA3 ) ) + { + /* set diffuse response function */ + if ( ivas_format == MC_FORMAT && ( transport_config == AUDIO_CONFIG_5_1 || transport_config == AUDIO_CONFIG_7_1 ) && output_config == AUDIO_CONFIG_5_1_4 ) + { + num_horizontal_speakers = num_channels - NUM_ELEVATED_SPEAKERS; + + mvr2r( diffuse_response_CICP6, diffuse_response_function, num_horizontal_speakers ); + set_zero( &diffuse_response_function[num_horizontal_speakers], NUM_ELEVATED_SPEAKERS ); + *num_ele_spk_no_diffuse_rendering = NUM_ELEVATED_SPEAKERS; + } + else if ( ivas_format == MC_FORMAT && ( transport_config == AUDIO_CONFIG_5_1 || transport_config == AUDIO_CONFIG_7_1 ) && output_config == AUDIO_CONFIG_7_1_4 ) + { + num_horizontal_speakers = num_channels - NUM_ELEVATED_SPEAKERS; + + set_f( diffuse_response_function, sqrtf( 1.f / ( (float) num_horizontal_speakers ) ), num_horizontal_speakers ); + set_zero( &diffuse_response_function[num_horizontal_speakers], NUM_ELEVATED_SPEAKERS ); + *num_ele_spk_no_diffuse_rendering = NUM_ELEVATED_SPEAKERS; + } + else if ( ( ivas_format == MASA_FORMAT || ivas_format == MC_FORMAT ) && output_config == AUDIO_CONFIG_5_1 && num_channels == 5 ) + { + mvr2r( diffuse_response_CICP6, diffuse_response_function, num_channels ); + } + else if ( ( ivas_format == MASA_FORMAT || ivas_format == MC_FORMAT ) && output_config == AUDIO_CONFIG_5_1_2 && num_channels == 7 ) + { + mvr2r( diffuse_response_CICP14, diffuse_response_function, num_channels ); + } + else if ( ( ivas_format == MASA_FORMAT || ivas_format == MC_FORMAT ) && ( output_config == AUDIO_CONFIG_5_1_4 ) && ( num_channels == 9 ) ) + { + mvr2r( diffuse_response_CICP16, diffuse_response_function, num_channels ); + } + else if ( ( ivas_format == MASA_FORMAT || ivas_format == MC_FORMAT ) && ( output_config == AUDIO_CONFIG_LS_CUSTOM ) ) + { + if ( transport_config == AUDIO_CONFIG_5_1 || transport_config == AUDIO_CONFIG_7_1 ) + { + /* Detect loudspeakers with elevation */ + for ( i = 0, num_horizontal_speakers = 0; i < num_channels; i++ ) + { + if ( fabsf( hOutSetup.ls_elevation[i] ) <= 5.f ) + { + num_horizontal_speakers++; + diffuse_response_function[i] = 1.f; + } + else + { + *num_ele_spk_no_diffuse_rendering += 1; + diffuse_response_function[i] = 0.f; + } + } + /* Diffuse only to horizontal plane if enough loudspeakers */ + if ( num_horizontal_speakers > 2 ) + { + for ( i = 0; i < num_channels; i++ ) + { + diffuse_response_function[i] *= sqrtf( 1.f / (float) num_horizontal_speakers ); + } + } + else + { + *num_ele_spk_no_diffuse_rendering = 0; + set_f( diffuse_response_function, sqrtf( 1.f / (float) num_channels ), num_channels ); + } + } + else + { + set_f( diffuse_response_function, sqrtf( 1.f / (float) num_channels ), num_channels ); + } + } + else + { + set_f( diffuse_response_function, sqrtf( 1.f / (float) num_channels ), num_channels ); + } + } + else + { + idx = 0; + for ( l = 0; l <= ambisonics_order; l++ ) + { + for ( k = 0; k < ( 2 * l + 1 ); k++ ) + { + diffuse_response_function[idx++] = 1.0f / sqrtf( 2.0f * l + 1.0f ); + } + } + } + + return; +} + + +static void protoSignalComputation_shd( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float *proto_direct_buffer_f, + float *proto_diffuse_buffer_f, + float *reference_power, + const int16_t slot_index, + const int16_t num_inputs, + const int16_t num_outputs_diff, + const int16_t num_freq_bands, + float *p_Rmat ) +{ + int16_t l, k; + float *p_proto_direct_buffer; + float *p_proto_diffuse_buffer; + int16_t Rmat_k[4]; + float W_real, W_imag; + float Y_real, Y_imag; + float *p_k[4]; + + k = 0; /* to avoid compilation warning */ + + p_proto_direct_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * num_inputs; + p_proto_diffuse_buffer = proto_diffuse_buffer_f + slot_index * 2 * num_freq_bands * num_outputs_diff; + + if ( num_inputs == 1 ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + p_proto_direct_buffer[2 * l] = RealBuffer[0][0][l]; + p_proto_direct_buffer[2 * l + 1] = ImagBuffer[0][0][l]; + } + } + else if ( num_inputs == 2 ) + { + if ( p_Rmat != 0 ) + { + assert( num_inputs == 4 && "This code block should never be run with num_inputs != 4!" ); + + for ( l = 0; l < num_freq_bands; l++ ) + { + W_real = RealBuffer[0][0][l] + RealBuffer[1][0][l]; + W_imag = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; + + Y_real = RealBuffer[0][0][l] - RealBuffer[1][0][l]; + Y_imag = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; + + p_proto_direct_buffer[2 * l] = W_real; + p_proto_direct_buffer[2 * l + 1] = W_imag; + p_proto_direct_buffer[2 * num_freq_bands + 2 * l] = p_Rmat[0] * Y_real; + p_proto_direct_buffer[2 * num_freq_bands + 2 * l + 1] = p_Rmat[0] * Y_imag; + } + } + else + { + for ( l = 0; l < num_freq_bands; l++ ) + { + W_real = RealBuffer[0][0][l] + RealBuffer[1][0][l]; + W_imag = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; + + p_proto_direct_buffer[2 * l] = W_real; + p_proto_direct_buffer[2 * l + 1] = W_imag; + { + p_proto_direct_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l] - RealBuffer[1][0][l]; + p_proto_direct_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; + } + } + } + } + else if ( num_inputs >= 4 ) + { + p_k[0] = p_proto_direct_buffer; + p_k[1] = p_proto_direct_buffer + 2 * num_freq_bands; + p_k[2] = p_proto_direct_buffer + 4 * num_freq_bands; + p_k[3] = p_proto_direct_buffer + 6 * num_freq_bands; + Rmat_k[0] = 0; + Rmat_k[1] = 1; + Rmat_k[2] = 2; + Rmat_k[3] = 0; + + if ( p_Rmat != 0 ) + { + assert( num_inputs == 4 && "This code block should never be run with num_inputs != 4!" ); + + for ( l = 0; l < num_freq_bands; l++ ) + { + *( p_k[0] ) = RealBuffer[0][0][l]; + reference_power[l + num_freq_bands] = *( p_k[0] ) * *( p_k[0] ); + p_k[0]++; + *( p_k[0] ) = ImagBuffer[0][0][l]; + reference_power[l + num_freq_bands] += *( p_k[0] ) * *( p_k[0] ); + p_k[0]++; + reference_power[l] = 0.5f * reference_power[l + num_freq_bands]; + + for ( k = 1; k < 4; k++ ) + { + *( p_k[k] ) = p_Rmat[3 * Rmat_k[k] + 1] * RealBuffer[1][0][l] + p_Rmat[3 * Rmat_k[k] + 2] * RealBuffer[2][0][l] + p_Rmat[3 * Rmat_k[k] + 0] * RealBuffer[3][0][l]; + reference_power[l + ( k + 1 ) * num_freq_bands] = *( p_k[k] ) * *( p_k[k] ); + p_k[k]++; + *( p_k[k] ) = p_Rmat[3 * Rmat_k[k] + 1] * ImagBuffer[1][0][l] + p_Rmat[3 * Rmat_k[k] + 2] * ImagBuffer[2][0][l] + p_Rmat[3 * Rmat_k[k] + 0] * ImagBuffer[3][0][l]; + reference_power[l + ( k + 1 ) * num_freq_bands] += *( p_k[k] ) * *( p_k[k] ); + p_k[k]++; + reference_power[l] += 0.5f * ( reference_power[l + ( k + 1 ) * num_freq_bands] ); + } + + for ( k = 1; k < 4; k++ ) + { + RealBuffer[k][0][l] = p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l]; + ImagBuffer[k][0][l] = p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l + 1]; + } + } + } + else + { + set_zero( reference_power, num_freq_bands ); + for ( k = 0; k < 4; k++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l] = RealBuffer[k][0][l]; + p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l + 1] = ImagBuffer[k][0][l]; + reference_power[l + ( k + 1 ) * num_freq_bands] = RealBuffer[k][0][l] * RealBuffer[k][0][l] + ImagBuffer[k][0][l] * ImagBuffer[k][0][l]; + reference_power[l] += 0.5f * ( reference_power[l + ( k + 1 ) * num_freq_bands] ); + } + } + } + + /* Additional transport channels = planar SBA components of degree higher than 1*/ + for ( ; k < num_inputs; k++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l] = RealBuffer[k][0][l]; + p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l + 1] = ImagBuffer[k][0][l]; + } + } + } + + + /*Copy direct to diffuse proto*/ + mvr2r( p_proto_direct_buffer, p_proto_diffuse_buffer, 2 * num_freq_bands * min( num_outputs_diff, num_inputs ) ); + + if ( num_inputs == 1 ) + { + /* Add comfort noise addition (CNA) to diffuse proto only*/ + for ( l = 0; l < num_freq_bands; l++ ) + { + p_proto_diffuse_buffer[2 * l] += RealBuffer[1][0][l]; + p_proto_diffuse_buffer[2 * l + 1] += ImagBuffer[1][0][l]; + } + } + + return; +} + + +static void protoSignalComputation1( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float *proto_frame_f, + float *proto_direct_buffer_f, + float *reference_power, + float *proto_power_smooth, + const int16_t slot_index, + const int16_t num_outputs_diff, + const int16_t num_freq_bands ) +{ + int16_t l, k; + float *p_proto_buffer; + + p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands; + + for ( l = 0; l < num_freq_bands; l++ ) + { + reference_power[l] = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; + proto_power_smooth[l] += reference_power[l]; + p_proto_buffer[2 * l] = RealBuffer[0][0][l]; + p_proto_buffer[2 * l + 1] = ImagBuffer[0][0][l]; + + for ( k = 0; k < num_outputs_diff; k++ ) + { + proto_frame_f[2 * k * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; + proto_frame_f[2 * k * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; + } + } + + return; +} + + +static void protoSignalComputation2( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float *proto_frame_f, + float *proto_direct_buffer_f, + float *reference_power, + float *proto_power_smooth, + const int16_t isloudspeaker, + const int16_t slot_index, + const int16_t num_freq_bands, + MASA_STEREO_TYPE_DETECT *stereo_type_detect ) +{ + int16_t l; + float *p_proto_buffer; + float Real_aux, Imag_aux; + + float left_bb_power, right_bb_power, total_bb_power, lr_bb_power; + float lr_total_bb_ratio; + float a, b; + + float left_hi_power, right_hi_power, total_hi_power, lr_hi_power; + float lr_total_hi_ratio; + float a2, b2; + + float sum_power; + float sum_total_ratio[MASA_SUM_FREQ_RANGE_BINS]; + float min_sum_total_ratio; + float min_sum_total_ratio_db; + + float RealSubtract, ImagSubtract; + + float interpolatorSpaced = 0.0f; + float interpolatorDmx = 1.0f; + + int16_t dipole_freq_range[2]; + float tempSpaced, tempDmx; + + if ( isloudspeaker ) + { + p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * 3; + + for ( l = 0; l < num_freq_bands; l++ ) + { + float Left_power; + float Right_power; + Real_aux = RealBuffer[0][0][l] + RealBuffer[1][0][l]; + Imag_aux = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; + + Left_power = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; + Right_power = RealBuffer[1][0][l] * RealBuffer[1][0][l] + ImagBuffer[1][0][l] * ImagBuffer[1][0][l]; + + reference_power[l] = Left_power + Right_power; + proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; + + p_proto_buffer[2 * l] = Real_aux; + p_proto_buffer[2 * l + 1] = Imag_aux; + proto_power_smooth[l + num_freq_bands] += RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; + p_proto_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; + + proto_power_smooth[l + 2 * num_freq_bands] += RealBuffer[1][0][l] * RealBuffer[1][0][l]; + proto_power_smooth[l + 2 * num_freq_bands] += ImagBuffer[1][0][l] * ImagBuffer[1][0][l]; + p_proto_buffer[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; + p_proto_buffer[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; + + proto_frame_f[2 * l] = Real_aux; + proto_frame_f[2 * l + 1] = Imag_aux; + + proto_frame_f[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; + proto_frame_f[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; + proto_frame_f[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; + proto_frame_f[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; + } + } + else if ( stereo_type_detect != NULL ) + { + p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * 2; + + left_bb_power = 0.0f; + right_bb_power = 0.0f; + total_bb_power = 0.0f; + + left_hi_power = 0.0f; + right_hi_power = 0.0f; + total_hi_power = 0.0f; + + dipole_freq_range[0] = stereo_type_detect->dipole_freq_range[0]; + dipole_freq_range[1] = stereo_type_detect->dipole_freq_range[1]; + + a = 0.01f; /* Temporal smoothing coefficient */ + b = 1.0f - a; /* Temporal smoothing coefficient */ + a2 = 0.1f; /* Temporal smoothing coefficient */ + b2 = 1.0f - a2; /* Temporal smoothing coefficient */ + + if ( stereo_type_detect->interpolator > 0 ) + { + if ( stereo_type_detect->type_change_direction == MASA_STEREO_SPACED_MICS ) + { + interpolatorSpaced = ( (float) ( stereo_type_detect->interpolator ) ) / ( (float) MASA_STEREO_INTERPOLATION_SLOTS ); + interpolatorDmx = 1.0f - interpolatorSpaced; + } + else + { + interpolatorDmx = ( (float) ( stereo_type_detect->interpolator ) ) / ( (float) MASA_STEREO_INTERPOLATION_SLOTS ); + interpolatorSpaced = 1.0f - interpolatorDmx; + } + } + + for ( l = 0; l < num_freq_bands; l++ ) + { + float Left_power; + float Right_power; + + /* Compute sum signal */ + Real_aux = RealBuffer[0][0][l] + RealBuffer[1][0][l]; + Imag_aux = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; + + /* Compute reference power */ + Left_power = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; + Right_power = RealBuffer[1][0][l] * RealBuffer[1][0][l] + ImagBuffer[1][0][l] * ImagBuffer[1][0][l]; + + reference_power[l] = Left_power + Right_power; + + left_bb_power += Left_power; + right_bb_power += Right_power; + total_bb_power += reference_power[l]; + + if ( l > MASA_HI_FREQ_START_BIN ) + { + left_hi_power += Left_power; + right_hi_power += Right_power; + total_hi_power += reference_power[l]; + } + + if ( l < min( num_freq_bands, MASA_SUM_FREQ_RANGE_BINS ) ) + { + sum_power = Real_aux * Real_aux + Imag_aux * Imag_aux; + + stereo_type_detect->sum_power[l] = a * sum_power + b * stereo_type_detect->sum_power[l]; + stereo_type_detect->total_power[l] = a * reference_power[l] + b * stereo_type_detect->total_power[l]; + + sum_total_ratio[l] = stereo_type_detect->sum_power[l] / ( stereo_type_detect->total_power[l] + EPSILON ); + } + + if ( l == 0 ) + { + RealSubtract = RealBuffer[0][0][l] - RealBuffer[1][0][l]; + ImagSubtract = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; + stereo_type_detect->subtract_power_y += RealSubtract * RealSubtract + ImagSubtract * ImagSubtract; + } + + /* Compute protos (and their power) for direct sound rendering */ + + /* W prototype */ + if ( stereo_type_detect->interpolator > 0 ) + { + if ( l < ( dipole_freq_range[1] - 1 ) || l >= MASA_SUM_PROTO_START_BIN ) + { + Real_aux = interpolatorSpaced * 0.5f * Real_aux + interpolatorDmx * Real_aux; + Imag_aux = interpolatorSpaced * 0.5f * Imag_aux + interpolatorDmx * Imag_aux; + proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; + p_proto_buffer[2 * l] = Real_aux; + p_proto_buffer[2 * l + 1] = Imag_aux; + } + else + { + tempSpaced = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; + tempDmx = Real_aux * Real_aux + Imag_aux * Imag_aux; + proto_power_smooth[l] += interpolatorSpaced * tempSpaced + interpolatorDmx * tempDmx; + p_proto_buffer[2 * l] = interpolatorSpaced * RealBuffer[0][0][l] + interpolatorDmx * Real_aux; + p_proto_buffer[2 * l + 1] = interpolatorSpaced * ImagBuffer[0][0][l] + interpolatorDmx * Imag_aux; + } + } + else if ( stereo_type_detect->masa_stereo_type == MASA_STEREO_SPACED_MICS ) + { + if ( l < ( dipole_freq_range[1] - 1 ) || l >= MASA_SUM_PROTO_START_BIN ) + { + Real_aux *= 0.5f; + Imag_aux *= 0.5f; + proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; + p_proto_buffer[2 * l] = Real_aux; + p_proto_buffer[2 * l + 1] = Imag_aux; + } + else + { + proto_power_smooth[l] += RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; + p_proto_buffer[2 * l] = RealBuffer[0][0][l]; + p_proto_buffer[2 * l + 1] = ImagBuffer[0][0][l]; + } + } + else + { + proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; + p_proto_buffer[2 * l] = Real_aux; + p_proto_buffer[2 * l + 1] = Imag_aux; + } + + /* Y prototype */ + if ( stereo_type_detect->interpolator > 0 ) + { + if ( l < ( dipole_freq_range[0] ) ) + { + p_proto_buffer[2 * num_freq_bands + 2 * l] = interpolatorSpaced * p_proto_buffer[2 * l] + interpolatorDmx * ( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = interpolatorSpaced * p_proto_buffer[2 * l + 1] + interpolatorDmx * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); + } + else if ( l < ( dipole_freq_range[1] ) ) + { + p_proto_buffer[2 * num_freq_bands + 2 * l] = interpolatorSpaced * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ) + interpolatorDmx * ( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = interpolatorSpaced * ( -( RealBuffer[0][0][l] - RealBuffer[1][0][l] ) ) + interpolatorDmx * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); + } + else + { + p_proto_buffer[2 * num_freq_bands + 2 * l] = interpolatorSpaced * p_proto_buffer[2 * l] + interpolatorDmx * ( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = interpolatorSpaced * p_proto_buffer[2 * l + 1] + interpolatorDmx * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); + } + proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; + } + else if ( stereo_type_detect->masa_stereo_type == MASA_STEREO_SPACED_MICS ) + { + if ( l < ( dipole_freq_range[0] ) ) /* proto = W */ + { + p_proto_buffer[2 * num_freq_bands + 2 * l] = p_proto_buffer[2 * l]; + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = p_proto_buffer[2 * l + 1]; + proto_power_smooth[l + num_freq_bands] = proto_power_smooth[l]; + } + else if ( l < ( dipole_freq_range[1] ) ) /* proto = -i * (x1-x2) * eq */ + { + p_proto_buffer[2 * num_freq_bands + 2 * l] = ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = -( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); + proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; + } + else /* proto = W */ + { + p_proto_buffer[2 * num_freq_bands + 2 * l] = p_proto_buffer[2 * l]; + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = p_proto_buffer[2 * l + 1]; + proto_power_smooth[l + num_freq_bands] = proto_power_smooth[l]; + } + } + else + { + p_proto_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l] - RealBuffer[1][0][l]; + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; + proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; + } + + /* Compute protos for decorrelation */ + proto_frame_f[2 * l] = Real_aux; + proto_frame_f[2 * l + 1] = Imag_aux; + proto_frame_f[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; + proto_frame_f[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; + proto_frame_f[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; + proto_frame_f[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; + } + + if ( stereo_type_detect->interpolator > 0 ) + { + stereo_type_detect->interpolator++; + if ( stereo_type_detect->interpolator == MASA_STEREO_INTERPOLATION_SLOTS ) + { + stereo_type_detect->interpolator = 0; + stereo_type_detect->current_stereo_type = stereo_type_detect->type_change_direction; + } + } + + stereo_type_detect->left_bb_power = a * left_bb_power + b * stereo_type_detect->left_bb_power; + stereo_type_detect->right_bb_power = a * right_bb_power + b * stereo_type_detect->right_bb_power; + stereo_type_detect->total_bb_power = a * total_bb_power + b * stereo_type_detect->total_bb_power; + + lr_bb_power = ( stereo_type_detect->left_bb_power < stereo_type_detect->right_bb_power ) ? stereo_type_detect->left_bb_power : stereo_type_detect->right_bb_power; + lr_bb_power *= 2.0f; + lr_total_bb_ratio = 10.0f * log10f( lr_bb_power / ( stereo_type_detect->total_bb_power + EPSILON ) ); + + stereo_type_detect->left_hi_power = a2 * left_hi_power + b2 * stereo_type_detect->left_hi_power; + stereo_type_detect->right_hi_power = a2 * right_hi_power + b2 * stereo_type_detect->right_hi_power; + stereo_type_detect->total_hi_power = a2 * total_hi_power + b2 * stereo_type_detect->total_hi_power; + + lr_hi_power = ( stereo_type_detect->left_hi_power < stereo_type_detect->right_hi_power ) ? stereo_type_detect->left_hi_power : stereo_type_detect->right_hi_power; + lr_hi_power *= 2.0f; + lr_total_hi_ratio = 10.0f * log10f( lr_hi_power / ( stereo_type_detect->total_hi_power + EPSILON ) ); + + minimum( sum_total_ratio, min( num_freq_bands, MASA_SUM_FREQ_RANGE_BINS ), &min_sum_total_ratio ); + min_sum_total_ratio_db = 10.0f * log10f( min_sum_total_ratio ); + + stereo_type_detect->lr_total_bb_ratio_db = lr_total_bb_ratio; + stereo_type_detect->lr_total_hi_ratio_db = lr_total_hi_ratio; + stereo_type_detect->min_sum_total_ratio_db = min_sum_total_ratio_db; + + ivas_masa_stereotype_detection( stereo_type_detect ); + } + else + { + p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * 2; + + for ( l = 0; l < num_freq_bands; l++ ) + { + Real_aux = RealBuffer[0][0][l] + RealBuffer[1][0][l]; + Imag_aux = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; + + reference_power[l] = Real_aux * Real_aux + Imag_aux * Imag_aux; + proto_power_smooth[l] += reference_power[l]; + p_proto_buffer[2 * l] = Real_aux; + p_proto_buffer[2 * l + 1] = Imag_aux; + + p_proto_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l] - RealBuffer[1][0][l]; + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; + proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; + + proto_frame_f[2 * l] = Real_aux; + proto_frame_f[2 * l + 1] = Imag_aux; + + proto_frame_f[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; + proto_frame_f[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; + proto_frame_f[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; + proto_frame_f[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; + } + } + + return; +} + + +static void protoSignalComputation4( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float *proto_frame_f, + float *proto_direct_buffer_f, + float *reference_power, + float *proto_power_smooth, + const int16_t slot_index, + const int16_t num_outputs_diff, + const int16_t num_freq_bands, + const float *mtx_hoa_decoder, + const int16_t nchan_transport ) +{ + int16_t k, l; + int16_t n; + float sq_tmp; + float *p_proto_buffer; + + set_zero( reference_power, num_freq_bands ); + for ( k = 0; k < 4; k++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + sq_tmp = RealBuffer[k][0][l] * RealBuffer[k][0][l] + ImagBuffer[k][0][l] * ImagBuffer[k][0][l]; + reference_power[l] += 0.5f * sq_tmp; + } + } + + /*For decorrelated diffuseness*/ + for ( l = 0; l < num_outputs_diff; l++ ) + { + for ( k = 0; k < num_freq_bands; k++ ) + { + proto_frame_f[2 * l * num_freq_bands + 2 * k] = 0.f; + proto_frame_f[2 * l * num_freq_bands + 2 * k + 1] = 0.f; + for ( n = 0; n < nchan_transport; n++ ) + { + proto_frame_f[2 * l * num_freq_bands + 2 * k] += RealBuffer[n][0][k] * mtx_hoa_decoder[l * 16 + sba_map_tc[n]]; + proto_frame_f[2 * l * num_freq_bands + 2 * k + 1] += ImagBuffer[n][0][k] * mtx_hoa_decoder[l * 16 + sba_map_tc[n]]; + } + } + } + + p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * num_outputs_diff; + for ( k = 0; k < num_outputs_diff; k++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + sq_tmp = proto_frame_f[k * 2 * num_freq_bands + 2 * l] * proto_frame_f[k * 2 * num_freq_bands + 2 * l] + proto_frame_f[k * 2 * num_freq_bands + 2 * l + 1] * proto_frame_f[k * 2 * num_freq_bands + 2 * l + 1]; + proto_power_smooth[l + k * num_freq_bands] += sq_tmp; + p_proto_buffer[k * 2 * num_freq_bands + 2 * l] = proto_frame_f[k * 2 * num_freq_bands + 2 * l]; + p_proto_buffer[k * 2 * num_freq_bands + 2 * l + 1] = proto_frame_f[k * 2 * num_freq_bands + 2 * l + 1]; + } + } + + return; +} + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_compute_diffuse_proto() + * + * Compute diffuse prototype buffer and smooth power, only for decorrelated bands + *------------------------------------------------------------------------*/ + +static void ivas_dirac_dec_compute_diffuse_proto( + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const int16_t slot_idx ) +{ + int16_t k, l; + int16_t num_freq_bands, num_freq_bands_diff; + float *p_diff_buffer, *p_diff_buffer_1; + float *p_proto_diff, *p_power_smooth, *proto_frame_dec_f; + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; + DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; + + int16_t m; + float *p_hoa_enc; + + proto_frame_dec_f = hDirAC->proto_frame_dec_f; + h_dirac_output_synthesis_params = &( hDirAC->h_output_synthesis_psd_params ); + h_dirac_output_synthesis_state = &( hDirAC->h_output_synthesis_psd_state ); + + num_freq_bands = hDirAC->num_freq_bands; + num_freq_bands_diff = h_dirac_output_synthesis_params->max_band_decorr; + + p_diff_buffer = h_dirac_output_synthesis_state->proto_diffuse_buffer_f + slot_idx * 2 * num_freq_bands_diff * hDirAC->hOutSetup.nchan_out_woLFE; + p_diff_buffer_1 = p_diff_buffer + 1; + p_power_smooth = h_dirac_output_synthesis_state->proto_power_diff_smooth; + + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_PSD_SHD ) + { + for ( k = 0; k < hDirAC->hOutSetup.nchan_out_woLFE; k++ ) + { + p_proto_diff = proto_frame_dec_f + k * 2 * num_freq_bands; + for ( l = 0; l < num_freq_bands_diff; l++ ) + { + *p_diff_buffer = *( p_proto_diff++ ); + *p_diff_buffer_1 = *( p_proto_diff++ ); + *( p_power_smooth++ ) += ( *p_diff_buffer ) * ( *p_diff_buffer ) + ( *p_diff_buffer_1 ) * ( *p_diff_buffer_1 ); + p_diff_buffer += 2; + p_diff_buffer_1 += 2; + } + } + } + else + { + /*DIRAC_SYNTHESIS_PSD_SHD: Virtual LS->HOA encoding*/ + for ( k = 0; k < hDirAC->hOutSetup.nchan_out_woLFE; k++ ) + { + for ( l = 0; l < num_freq_bands_diff; l++ ) + { + p_hoa_enc = hDirAC->hoa_encoder + k; + p_proto_diff = proto_frame_dec_f + 2 * l; + + *p_diff_buffer = 0.f; + *p_diff_buffer_1 = 0.f; + + /*LS to HOA*/ + for ( m = 0; m < hDirAC->num_outputs_diff; m++ ) + { + *p_diff_buffer += ( *p_hoa_enc ) * ( *p_proto_diff ); + *p_diff_buffer_1 += ( *p_hoa_enc ) * ( *( p_proto_diff + 1 ) ); + p_hoa_enc += hDirAC->hOutSetup.nchan_out_woLFE; + p_proto_diff += 2 * num_freq_bands; + } + + *( p_power_smooth++ ) += ( *p_diff_buffer ) * ( *p_diff_buffer ) + ( *p_diff_buffer_1 ) * ( *p_diff_buffer_1 ); + p_diff_buffer += 2; + p_diff_buffer_1 += 2; + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * computeDirectionAngles() + * + *------------------------------------------------------------------------*/ + +static void computeDirectionAngles( + float *intensity_real_x, + float *intensity_real_y, + float *intensity_real_z, + const int16_t num_frequency_bands, + int16_t *azimuth, + int16_t *elevation ) +{ + int16_t k; + float intensityNorm; + float x, y, z, radius; + + for ( k = 0; k < num_frequency_bands; ++k ) + + { + intensityNorm = *( intensity_real_x ) * *( intensity_real_x ) + + *( intensity_real_y ) * *( intensity_real_y ) + + *( intensity_real_z ) * *( intensity_real_z ); + + if ( intensityNorm <= EPSILON ) + { + intensityNorm = 1.0f; + x = 1.0f; + y = 0.0f; + z = 0.0f; + intensity_real_x++; + intensity_real_y++; + intensity_real_z++; + } + else + { + intensityNorm = sqrtf( 1.f / intensityNorm ); + x = *( intensity_real_x++ ) * intensityNorm; + y = *( intensity_real_y++ ) * intensityNorm; + z = *( intensity_real_z++ ) * intensityNorm; + } + radius = sqrtf( x * x + y * y ); + azimuth[k] = (int16_t) ( max( -180.0f, min( 180.0f, atan2f( y, x ) / EVS_PI * 180.0f ) ) + 0.5f ); + elevation[k] = (int16_t) ( max( -90.0f, min( 180.0f, atan2f( z, radius ) / EVS_PI * 180.0f ) ) + 0.5f ); + } + + return; +} + +/*------------------------------------------------------------------------- + * ivas_masa_init_stereotype_detection() + * + * Initialize stereo transport signal type detection + *------------------------------------------------------------------------*/ + +static void ivas_masa_init_stereotype_detection( + MASA_STEREO_TYPE_DETECT *stereo_type_detect ) +{ + stereo_type_detect->masa_stereo_type = MASA_STEREO_DOWNMIX; + stereo_type_detect->current_stereo_type = MASA_STEREO_DOWNMIX; + stereo_type_detect->type_change_direction = MASA_STEREO_DOWNMIX; + + stereo_type_detect->counter = 0; + stereo_type_detect->interpolator = 0; + + stereo_type_detect->dipole_freq_range[0] = 1; + stereo_type_detect->dipole_freq_range[1] = 3; + + stereo_type_detect->left_bb_power = 0.0f; /* Broadband estimates */ + stereo_type_detect->right_bb_power = 0.0f; + stereo_type_detect->total_bb_power = 0.0f; + + stereo_type_detect->left_hi_power = 0.0f; /* High-frequency estimates */ + stereo_type_detect->right_hi_power = 0.0f; + stereo_type_detect->total_hi_power = 0.0f; + + set_zero( stereo_type_detect->sum_power, MASA_SUM_FREQ_RANGE_BINS ); + set_zero( stereo_type_detect->total_power, MASA_SUM_FREQ_RANGE_BINS ); + + stereo_type_detect->subtract_power_y = 0.0f; + stereo_type_detect->subtract_power_y_smooth = 0.0f; + stereo_type_detect->target_power_y_smooth = 0.0f; + + stereo_type_detect->lr_total_bb_ratio_db = 0.0f; + stereo_type_detect->lr_total_hi_ratio_db = 0.0f; + stereo_type_detect->min_sum_total_ratio_db = 0.0f; + stereo_type_detect->subtract_target_ratio_db = 0.0f; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_masa_stereotype_detection() + * + * Detect the type of the transport audio signals + *------------------------------------------------------------------------*/ + +static void ivas_masa_stereotype_detection( + MASA_STEREO_TYPE_DETECT *stereo_type_detect ) +{ + float lr_total_bb_ratio_db = stereo_type_detect->lr_total_bb_ratio_db; + float lr_total_hi_ratio_db = stereo_type_detect->lr_total_hi_ratio_db; + float min_sum_total_ratio_db = stereo_type_detect->min_sum_total_ratio_db; + float subtract_target_ratio_db = stereo_type_detect->subtract_target_ratio_db; + float change_to_spaced; + int16_t change_to_spaced_selection; + float change_to_downmix; + float change_to_downmix2; + int16_t change_to_downmix_selection; + float subtract_temp; + float min_sum_temp; + float lr_total_bb_temp; + float lr_total_hi_temp; + + /* Determine if the determined features match the spaced mic type */ + change_to_spaced_selection = 0; + if ( subtract_target_ratio_db < -3.0f ) + { + subtract_temp = ( -subtract_target_ratio_db - 3.0f ) / 3.0f; + min_sum_temp = max( -min_sum_total_ratio_db / 6.0f, 0.0f ); + lr_total_bb_temp = lr_total_bb_ratio_db / 6.0f; + + change_to_spaced = subtract_temp + min_sum_temp + lr_total_bb_temp; + + if ( change_to_spaced >= 1.0f ) + { + change_to_spaced_selection = 1; + } + } + + /* Determine if the determined features match the downmix type, according to a metric */ + change_to_downmix_selection = 0; + if ( subtract_target_ratio_db > 0.0f ) + { + subtract_temp = subtract_target_ratio_db / 3.0f; + min_sum_temp = ( min_sum_total_ratio_db + 1.0f ) / 6.0f; + lr_total_bb_temp = -lr_total_bb_ratio_db / 6.0f; + + change_to_downmix = subtract_temp + min_sum_temp + lr_total_bb_temp; + + if ( change_to_downmix >= 1.0f ) + { + change_to_downmix_selection = 1; + } + } + + /* Determine if the determined features match the downmix type, according to another metric */ + if ( lr_total_hi_ratio_db < -12.0f ) + { + subtract_temp = ( subtract_target_ratio_db + 4.0f ) / 3.0f; + min_sum_temp = min_sum_total_ratio_db / 6.0f; + lr_total_hi_temp = ( -lr_total_hi_ratio_db - 12.0f ) / 3.0f; + + change_to_downmix2 = subtract_temp + min_sum_temp + lr_total_hi_temp; + + if ( change_to_downmix2 >= 1.0f ) + { + change_to_downmix_selection = 1; + } + } + + if ( stereo_type_detect->counter < 400 ) + { + stereo_type_detect->counter++; + } + else + { + if ( change_to_spaced_selection == 1 ) + { + stereo_type_detect->masa_stereo_type = MASA_STEREO_SPACED_MICS; + } + else if ( change_to_downmix_selection == 1 ) + { + stereo_type_detect->masa_stereo_type = MASA_STEREO_DOWNMIX; + } + } + + if ( stereo_type_detect->interpolator == 0 ) + { + if ( stereo_type_detect->current_stereo_type != stereo_type_detect->masa_stereo_type ) + { + stereo_type_detect->interpolator = 1; + stereo_type_detect->type_change_direction = stereo_type_detect->masa_stereo_type; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * computeIntensityVector_dec() + * + * + *------------------------------------------------------------------------*/ + +static void computeIntensityVector_dec( + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + const int16_t num_frequency_bands, + float *intensity_real_x, + float *intensity_real_y, + float *intensity_real_z ) +{ + /* + * W = a + ib; Y = c + id + * real(W*Y') = ac + bd + */ + int16_t i; + float real, img; + for ( i = 0; i < num_frequency_bands; ++i ) + { + real = Cldfb_RealBuffer[0][0][i]; + img = Cldfb_ImagBuffer[0][0][i]; + intensity_real_x[i] = Cldfb_RealBuffer[3][0][i] * real + Cldfb_ImagBuffer[3][0][i] * img; + intensity_real_y[i] = Cldfb_RealBuffer[1][0][i] * real + Cldfb_ImagBuffer[1][0][i] * img; + intensity_real_z[i] = Cldfb_RealBuffer[2][0][i] * real + Cldfb_ImagBuffer[2][0][i] * img; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_lfe_synth_with_cldfb() + * + * + *------------------------------------------------------------------------*/ + +static void ivas_lfe_synth_with_cldfb( + MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float RealBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float ImagBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + const int16_t slot_index, + const int16_t subframe_index, + const int16_t nchan_transport ) +{ + float lfeGain; + float transportGain; + float protoLfeReal, protoLfeImag; + int16_t i; + float transportEne, protoLfeEne, targetEneLfe, targetEneTrans; + + set_zero( RealBufferLfe[slot_index], CLDFB_NO_CHANNELS_MAX ); + set_zero( ImagBufferLfe[slot_index], CLDFB_NO_CHANNELS_MAX ); + + protoLfeReal = RealBuffer[0][0][0]; + protoLfeImag = ImagBuffer[0][0][0]; + transportEne = RealBuffer[0][0][0] * RealBuffer[0][0][0] + ImagBuffer[0][0][0] * ImagBuffer[0][0][0]; + for ( i = 1; i < nchan_transport; i++ ) + { + protoLfeReal += RealBuffer[i][0][0]; + protoLfeImag += ImagBuffer[i][0][0]; + transportEne += RealBuffer[i][0][0] * RealBuffer[i][0][0] + ImagBuffer[i][0][0] * ImagBuffer[i][0][0]; + } + protoLfeEne = protoLfeReal * protoLfeReal + protoLfeImag * protoLfeImag; + + targetEneLfe = transportEne * hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index]; + targetEneTrans = transportEne * max( ( 1.0f - hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index] ), 0.01f ); + + hMasaLfeSynth->transportEneSmooth *= MCMASA_LFE_SYNTH_ALPHA; + hMasaLfeSynth->protoLfeEneSmooth *= MCMASA_LFE_SYNTH_ALPHA; + hMasaLfeSynth->targetEneLfeSmooth *= MCMASA_LFE_SYNTH_ALPHA; + hMasaLfeSynth->targetEneTransSmooth *= MCMASA_LFE_SYNTH_ALPHA; + + hMasaLfeSynth->transportEneSmooth += transportEne; + hMasaLfeSynth->protoLfeEneSmooth += protoLfeEne; + hMasaLfeSynth->targetEneLfeSmooth += targetEneLfe; + hMasaLfeSynth->targetEneTransSmooth += targetEneTrans; + + lfeGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneLfeSmooth / ( EPSILON + hMasaLfeSynth->protoLfeEneSmooth ) ) ); + transportGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneTransSmooth / ( EPSILON + hMasaLfeSynth->transportEneSmooth ) ) ); + + RealBufferLfe[slot_index][0] = protoLfeReal * lfeGain; + ImagBufferLfe[slot_index][0] = protoLfeImag * lfeGain; + + RealBuffer[0][0][0] *= transportGain; + ImagBuffer[0][0][0] *= transportGain; + for ( i = 1; i < nchan_transport; i++ ) + { + RealBuffer[i][0][0] *= transportGain; + ImagBuffer[i][0][0] *= transportGain; + } + + return; +} diff --git a/lib_dec/ivas_dirac_dec_binaural_functions.c b/lib_dec/ivas_dirac_dec_binaural_functions.c new file mode 100644 index 0000000000..2d5c835881 --- /dev/null +++ b/lib_dec/ivas_dirac_dec_binaural_functions.c @@ -0,0 +1,1781 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_binauralRenderer.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define CLDFB_HALF_BIN_FREQUENCY_OFFSET 0.5f +#define IVAS_TDET_DUCK_MULT_FAC_PARA_BIN ( 2.0f ) +#define IVAS_TDET_DUCK_MULT_FAC_PARA_BIN_LOW_BR ( 3.0f ) + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void ivas_dirac_dec_binaural_internal( Decoder_Struct *st_ivas, float output_f[][L_FRAME48k], const int16_t nchan_transport, const uint8_t firstSubframe, const uint8_t nSubframes ); + +static void ivas_dirac_dec_decorrelate_slot( DIRAC_DEC_HANDLE hDirAC, const int8_t slot, float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float decRe[][CLDFB_NO_CHANNELS_MAX], float decIm[][CLDFB_NO_CHANNELS_MAX] ); + +static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices( Decoder_Struct *st_ivas, float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Rmat[3][3], const uint8_t firstSubframe, const uint8_t nSubFrames ); + +static void ivas_dirac_dec_binaural_determine_processing_matrices( Decoder_Struct *st_ivas, const int16_t max_band_decorr, float Rmat[3][3] ); + +static void ivas_dirac_dec_binaural_process_output( Decoder_Struct *st_ivas, float output_f[][L_FRAME48k], float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t max_band_decorr, const uint8_t numInputChannels, const uint8_t firstSlot, const uint8_t slotEnd ); + +static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( HEAD_TRACK_DATA_HANDLE hHeadTrackData, float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const uint8_t firstSlot, const uint8_t slotEnd, const uint8_t nBins, float Rmat[3][3] ); + +static void formulate2x2MixingMatrix( float Ein1, float Ein2, float CinRe, float CinIm, float Eout1, float Eout2, float CoutRe, float CoutIm, float Q[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Mre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Mim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], const float regularizationFactor ); + +static void hrtfShGetHrtf( const int16_t bin, const int16_t aziDeg, const int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp ); + +static void getDirectPartGains( const int16_t bin, int16_t aziDeg, int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp, const uint8_t stereoMode, float Rmat[3][3] ); + +static void matrixMul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); + +static void matrixTransp2Mul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_init_binaural_data() + * + * Initialize parametric binaural renderer + *------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_dec_init_binaural_data( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + DIRAC_DEC_BIN_HANDLE hBinaural; + int16_t nBins; + int32_t output_Fs; + RENDERER_TYPE renderer_type; + int16_t j, k, bin; + float binCenterFreq, tmpFloat; + ivas_error error; + + if ( ( hBinaural = (DIRAC_DEC_BIN_HANDLE) count_malloc( sizeof( DIRAC_DEC_BIN_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC binaural handle " ); + } + + nBins = st_ivas->hDirAC->num_freq_bands; + output_Fs = st_ivas->hDecoderConfig->output_Fs; + renderer_type = st_ivas->renderer_type; + + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + for ( k = 0; k < BINAURAL_CHANNELS + 1; k++ ) + { + set_zero( hBinaural->processMtxRe[j][k], nBins ); + set_zero( hBinaural->processMtxIm[j][k], nBins ); + } + + for ( k = 0; k < BINAURAL_CHANNELS; k++ ) + { + set_zero( hBinaural->processMtxDecRe[j][k], nBins ); + set_zero( hBinaural->processMtxDecIm[j][k], nBins ); + } + set_zero( hBinaural->ChEnePrev[j], nBins ); + set_zero( hBinaural->ChEneOutPrev[j], nBins ); + } + set_zero( hBinaural->ChCrossRePrev, nBins ); + set_zero( hBinaural->ChCrossImPrev, nBins ); + set_zero( hBinaural->ChCrossReOutPrev, nBins ); + set_zero( hBinaural->ChCrossImOutPrev, nBins ); + hBinaural->renderStereoOutputInsteadOfBinaural = 0; + + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) /* Use subframe-mode with SPAR, since the metadata is not in sync on a frame level */ + { + hBinaural->useSubframeMode = 1; + } + else + { +#ifdef DEBUGGING + hBinaural->useSubframeMode = st_ivas->hDecoderConfig->forceSubframeBinauralization; +#else + hBinaural->useSubframeMode = 0; /* Default to 20 ms mode. */ +#endif + } + + hBinaural->useTdDecorr = 0; + if ( st_ivas->ivas_format == SBA_FORMAT ) + { + if ( st_ivas->nchan_transport == 1 ) + { + hBinaural->useTdDecorr = 1; + } + } + if ( st_ivas->ivas_format == MASA_FORMAT ) + { + if ( ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_48k && st_ivas->nchan_transport == 1 ) || st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + { + hBinaural->useTdDecorr = 1; + } + } + else if ( st_ivas->ivas_format == MC_FORMAT ) + { + if ( ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_48k && st_ivas->nchan_transport == 1 ) ) + { + hBinaural->useTdDecorr = 1; + } + } + + for ( bin = 0; bin < nBins; bin++ ) + { + binCenterFreq = ( (float) bin + CLDFB_HALF_BIN_FREQUENCY_OFFSET ) / (float) nBins * ( (float) output_Fs / 2.0f ); + /* These formulas and values are from Christian Borss's publication for binaural diffuse field coherence */ + tmpFloat = max( 0.0f, 1.0f - binCenterFreq / 2700.0f ); + hBinaural->diffuseFieldCoherence[bin] = tmpFloat * sinf( binCenterFreq * EVS_PI / 550.0f ) / ( binCenterFreq * EVS_PI / 550.0f ); + } + + for ( bin = 0; bin < BINAURAL_COHERENCE_DIFFERENCE_BINS; bin++ ) + { + hBinaural->diffuseFieldCoherenceX[bin] = hBinaural->diffuseFieldCoherence[bin] + diffuseFieldCoherenceDifferenceX[bin]; + hBinaural->diffuseFieldCoherenceY[bin] = hBinaural->diffuseFieldCoherence[bin] + diffuseFieldCoherenceDifferenceY[bin]; + hBinaural->diffuseFieldCoherenceZ[bin] = hBinaural->diffuseFieldCoherence[bin] + diffuseFieldCoherenceDifferenceZ[bin]; + } + + if ( renderer_type == RENDERER_BINAURAL_PARAMETRIC ) /* Indication of binaural rendering without room effect */ + { + set_f( hBinaural->earlyPartEneCorrection, 1.0f, CLDFB_NO_CHANNELS_MAX ); + hBinaural->hReverb = NULL; + } + else if ( renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) /* Indication of binaural rendering with room effect */ + { + mvr2r( parametricEarlyPartEneCorrection, hBinaural->earlyPartEneCorrection, nBins ); + if ( hBinaural->useSubframeMode ) + { + if ( ( error = ivas_binaural_reverb_open( &hBinaural->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = ivas_binaural_reverb_open( &hBinaural->hReverb, nBins, CLDFB_NO_COL_MAX ) ) != IVAS_ERR_OK ) + { + return error; + } + } + ivas_binaural_reverb_setReverbTimes( hBinaural->hReverb, output_Fs, parametricReverberationTimes, parametricReverberationEneCorrections ); + hBinaural->hReverb->useBinauralCoherence = 1; + ivas_binaural_reverb_setPreDelay( hBinaural->hReverb, 10 ); + } + else if ( renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + set_f( hBinaural->earlyPartEneCorrection, 1.0f, CLDFB_NO_CHANNELS_MAX ); + hBinaural->hReverb = NULL; + hBinaural->renderStereoOutputInsteadOfBinaural = 1; + } + else /* Not valid renderer type for this renderer */ + { + assert( false ); + } + + if ( hBinaural->useTdDecorr ) + { + if ( st_ivas->hDecoderConfig->ivas_total_brate >= IVAS_13k2 && st_ivas->ivas_format == SBA_FORMAT ) + { + ivas_spar_td_decorr_dec_open( &( hBinaural->hTdDecorr ), output_Fs, 3, 1 ); + if ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_24k4 ) + { + hBinaural->hTdDecorr->pTrans_det->duck_mult_fac = IVAS_TDET_DUCK_MULT_FAC_PARA_BIN_LOW_BR; + } + else + { + hBinaural->hTdDecorr->pTrans_det->duck_mult_fac = IVAS_TDET_DUCK_MULT_FAC_PARA_BIN; + } + } + else + { + ivas_spar_td_decorr_dec_open( &( hBinaural->hTdDecorr ), output_Fs, 3, 0 ); + } + } + else + { + hBinaural->hTdDecorr = NULL; + } + + st_ivas->hDiracDecBin = hBinaural; + + return IVAS_ERR_OK; +} + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_close_binaural_data() + * + * Close parametric binaural renderer + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_close_binaural_data( + DIRAC_DEC_BIN_HANDLE *hBinaural /* i/o: decoder DirAC binaural data handle */ +) +{ + if ( *hBinaural == NULL ) + { + return; + } + + if ( ( *hBinaural )->hReverb != NULL ) + { + ivas_binaural_reverb_close( &( ( *hBinaural )->hReverb ) ); + } + + ivas_spar_td_decorr_dec_close( &( ( *hBinaural )->hTdDecorr ) ); + + count_free( *hBinaural ); + *hBinaural = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_binaural() + * + * Parametric binaural renderer main function + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_binaural( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int16_t nchan_transport /* i : number of transport channels */ +) +{ + if ( st_ivas->hDiracDecBin->useTdDecorr ) + { + float *decorr_signal[BINAURAL_CHANNELS]; + int16_t ch; + int16_t output_frame; + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + decorr_signal[ch] = (float *) &( output_f[ch + BINAURAL_CHANNELS][0] ); + } + output_frame = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); + + ivas_td_decorr_process( st_ivas->hDiracDecBin->hTdDecorr, output_f, decorr_signal, output_frame ); + } + + if ( st_ivas->hDiracDecBin->useSubframeMode ) + { + uint8_t subframe; + for ( subframe = 0; subframe < MAX_PARAM_SPATIAL_SUBFRAMES; subframe++ ) + { + ivas_dirac_dec_binaural_internal( st_ivas, output_f, nchan_transport, subframe, 1u ); + } + } + else + { + ivas_dirac_dec_binaural_internal( st_ivas, output_f, nchan_transport, 0u, (uint8_t) MAX_PARAM_SPATIAL_SUBFRAMES ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * Local functions + *------------------------------------------------------------------------*/ + +static void ivas_dirac_dec_binaural_internal( + Decoder_Struct *st_ivas, + float output_f[][L_FRAME48k], + const int16_t nchan_transport, + const uint8_t firstSubframe, + const uint8_t nSubframes ) +{ + DIRAC_DEC_HANDLE hDirAC; + uint8_t slot, ch, nBins, numInChannels; + float Cldfb_RealBuffer_in[4][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_in[4][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Rmat[3][3]; + uint8_t firstSlot, slotEnd; + int16_t max_band_decorr; + DIFFUSE_DISTRIBUTION_DATA diffuseDistData; + + firstSlot = firstSubframe * ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES ); + slotEnd = ( firstSubframe + nSubframes ) * ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES ); + + hDirAC = st_ivas->hDirAC; + nBins = (uint8_t) hDirAC->num_freq_bands; + + /* The input channel number at this processing function (not nchan_transport) */ + numInChannels = BINAURAL_CHANNELS; + if ( st_ivas->hOutSetup.separateChannelEnabled ) + { + numInChannels++; + } + + Rmat[0][0] = 1.0f; + Rmat[0][1] = 0.0f; + Rmat[0][2] = 0.0f; + + Rmat[1][0] = 0.0f; + Rmat[1][1] = 1.0f; + Rmat[1][2] = 0.0f; + + Rmat[2][0] = 0.0f; + Rmat[2][1] = 0.0f; + Rmat[2][2] = 1.0f; + + /* CLDFB Analysis of input */ + for ( slot = firstSlot; slot < slotEnd; slot++ ) + { + for ( ch = 0; ch < numInChannels; ch++ ) + { + if ( ch == 0 || nchan_transport == 2 ) + { + cldfbAnalysis_ts( &( output_f[ch][nBins * slot] ), + Cldfb_RealBuffer_in[ch][slot], + Cldfb_ImagBuffer_in[ch][slot], + nBins, st_ivas->cldfbAnaDec[ch] ); + } + else if ( st_ivas->nchan_transport == 2 ) /* Stereo signal transmitted as mono with DFT stereo */ + { + /* At mono input duplicate the channel to dual-mono */ + mvr2r( Cldfb_RealBuffer_in[0][slot], Cldfb_RealBuffer_in[1][slot], nBins ); + mvr2r( Cldfb_ImagBuffer_in[0][slot], Cldfb_ImagBuffer_in[1][slot], nBins ); + } + else /* when nchan_transport == 1 and ch == 1 */ + { + /* CNA and HB FD-CNG*/ + if ( st_ivas->hSCE[0]->hCoreCoder[0] != NULL && + ( st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag || + st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag ) ) + { + int16_t numCoreBands, b; + + numCoreBands = st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->numCoreBands; + + generate_masking_noise_dirac( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom, + st_ivas->cldfbAnaDec[1], + &( output_f[1][L_FRAME48k - L_FRAME16k] ), /*used as temporary static buffer for the whole frame*/ + Cldfb_RealBuffer_in[2][slot], Cldfb_ImagBuffer_in[2][slot], + slot, + st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->hSCE[0]->hCoreCoder[0]->flag_cna, + ( st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == FRAME_NO_DATA || st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == SID_2k40 ) && ( st_ivas->hSCE[0]->hCoreCoder[0]->cng_type == FD_CNG ) && st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag ); + + generate_masking_noise_dirac( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom, + st_ivas->cldfbAnaDec[1], /*nothing will be analyzed, just get cnst*/ + NULL, + Cldfb_RealBuffer_in[1][slot], Cldfb_ImagBuffer_in[1][slot], + slot, + st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->hSCE[0]->hCoreCoder[0]->flag_cna, + ( st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == FRAME_NO_DATA || st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == SID_2k40 ) && ( st_ivas->hSCE[0]->hCoreCoder[0]->cng_type == FD_CNG ) && st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag ); + + /* LB: Copy first channel + LB-CNG to first and second channels with same scaling (dual-mono)*/ + for ( b = 0; b < numCoreBands; b++ ) + { + Cldfb_RealBuffer_in[0][slot][b] = INV_SQRT2 * ( Cldfb_RealBuffer_in[0][slot][b] + Cldfb_RealBuffer_in[2][slot][b] ); + Cldfb_RealBuffer_in[1][slot][b] = Cldfb_RealBuffer_in[0][slot][b]; + Cldfb_ImagBuffer_in[0][slot][b] = INV_SQRT2 * ( Cldfb_ImagBuffer_in[0][slot][b] + Cldfb_ImagBuffer_in[2][slot][b] ); + Cldfb_ImagBuffer_in[1][slot][b] = Cldfb_ImagBuffer_in[0][slot][b]; + } + /* HB: Copy first channel to second channel and add HB-CNGs with different scalings*/ + for ( ; b < nBins; b++ ) + { + Cldfb_RealBuffer_in[0][slot][b] *= INV_SQRT2; + Cldfb_RealBuffer_in[1][slot][b] = Cldfb_RealBuffer_in[0][slot][b] + 0.5f * Cldfb_RealBuffer_in[1][slot][b] + Cldfb_RealBuffer_in[0][slot][b]; + Cldfb_RealBuffer_in[0][slot][b] += 0.5f * Cldfb_RealBuffer_in[2][slot][b]; + + Cldfb_ImagBuffer_in[0][slot][b] *= INV_SQRT2; + Cldfb_ImagBuffer_in[1][slot][b] = Cldfb_ImagBuffer_in[0][slot][b] + 0.5f * Cldfb_ImagBuffer_in[1][slot][b]; + Cldfb_ImagBuffer_in[0][slot][b] += 0.5f * Cldfb_ImagBuffer_in[2][slot][b]; + } + } + else + { + /* At mono input duplicate the channel to dual-mono, and apply gain + correction to ensure same overall level as in stereo mode */ + v_multc( Cldfb_RealBuffer_in[0][slot], 1.0f / SQRT2, Cldfb_RealBuffer_in[0][slot], nBins ); + v_multc( Cldfb_ImagBuffer_in[0][slot], 1.0f / SQRT2, Cldfb_ImagBuffer_in[0][slot], nBins ); + mvr2r( Cldfb_RealBuffer_in[0][slot], Cldfb_RealBuffer_in[1][slot], nBins ); + mvr2r( Cldfb_ImagBuffer_in[0][slot], Cldfb_ImagBuffer_in[1][slot], nBins ); + } + } + } + + if ( st_ivas->hDiracDecBin->useTdDecorr ) + { + for ( ch = BINAURAL_CHANNELS; ch < ( 2 * BINAURAL_CHANNELS ); ch++ ) + { + cldfbAnalysis_ts( &( output_f[ch][nBins * slot] ), + Cldfb_RealBuffer_in[ch][slot], + Cldfb_ImagBuffer_in[ch][slot], + nBins, st_ivas->cldfbAnaDec[ch] ); + if ( st_ivas->nchan_transport == 1 && st_ivas->ivas_format == SBA_FORMAT ) + { + v_multc( Cldfb_RealBuffer_in[ch][slot], 1.0f / SQRT2, Cldfb_RealBuffer_in[ch][slot], nBins ); + v_multc( Cldfb_ImagBuffer_in[ch][slot], 1.0f / SQRT2, Cldfb_ImagBuffer_in[ch][slot], nBins ); + } + } + } + } + + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) + { + st_ivas->hDirAC->hDiffuseDist = &diffuseDistData; + + ivas_spar_param_to_masa_param_mapping( st_ivas, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, firstSubframe, nSubframes ); + + ivas_sba_prototype_renderer( st_ivas, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, firstSubframe, nSubframes ); + } + + if ( st_ivas->hHeadTrackData && st_ivas->hHeadTrackData->num_quaternions >= 0 ) + { + QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[firstSubframe], Rmat ); + + if ( nchan_transport == 2 ) + { + ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( st_ivas->hHeadTrackData, Cldfb_ImagBuffer_in, Cldfb_RealBuffer_in, firstSlot, slotEnd, nBins, Rmat ); + } + } + + ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices( st_ivas, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, Rmat, firstSubframe, nSubframes ); + + if ( st_ivas->ivas_format == ISM_FORMAT ) + { + max_band_decorr = 0; + } + else if ( st_ivas->hDiracDecBin->useTdDecorr ) + { + max_band_decorr = CLDFB_NO_CHANNELS_MAX; + } + else + { + max_band_decorr = st_ivas->hDirAC->h_freq_domain_decorr_ap_params->max_band_decorr; + } + + ivas_dirac_dec_binaural_determine_processing_matrices( st_ivas, max_band_decorr, Rmat ); + + ivas_dirac_dec_binaural_process_output( st_ivas, output_f, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, max_band_decorr, numInChannels, firstSlot, slotEnd ); + + st_ivas->hDirAC->hDiffuseDist = NULL; + + return; +} + + +static void ivas_dirac_dec_decorrelate_slot( + DIRAC_DEC_HANDLE hDirAC, + const int8_t slot, + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float decRe[][CLDFB_NO_CHANNELS_MAX], + float decIm[][CLDFB_NO_CHANNELS_MAX] ) +{ + int16_t offset, ch, bin; + float onset_filter[BINAURAL_CHANNELS * CLDFB_NO_CHANNELS_MAX]; /* 2 ch, 60 bins */ + float decorrelatedFrameInterleaved[2 * BINAURAL_CHANNELS * CLDFB_NO_CHANNELS_MAX]; /* 2 ch, real + imag, 60 bins */ + + /* Decorrelation needs interleaved data. Copy left and right signals to proto_frame_f */ + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + offset = hDirAC->num_freq_bands * BINAURAL_CHANNELS * ch; + for ( bin = 0; bin < hDirAC->num_freq_bands; bin++ ) + { + hDirAC->proto_frame_f[( bin * BINAURAL_CHANNELS ) + offset] = inRe[ch][slot][bin]; + hDirAC->proto_frame_f[( bin * BINAURAL_CHANNELS ) + offset + 1] = inIm[ch][slot][bin]; + } + } + + /* Decorrelate proto signal to decorrelatedFrameInterleaved */ + ivas_dirac_dec_decorr_process( hDirAC->num_freq_bands, + hDirAC->num_outputs_diff, + hDirAC->num_protos_diff, + hDirAC->synthesisConf, + BINAURAL_CHANNELS, + hDirAC->proto_frame_f, + hDirAC->num_protos_diff, + hDirAC->proto_index_diff, + decorrelatedFrameInterleaved, + onset_filter, + hDirAC->h_freq_domain_decorr_ap_params, + hDirAC->h_freq_domain_decorr_ap_state ); + + /* De-interleave decorrelated signals*/ + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + offset = hDirAC->num_freq_bands * BINAURAL_CHANNELS * ch; + for ( bin = 0; bin < hDirAC->num_freq_bands; bin++ ) + { + decRe[ch][bin] = decorrelatedFrameInterleaved[( bin * BINAURAL_CHANNELS ) + offset]; + decIm[ch][bin] = decorrelatedFrameInterleaved[( bin * BINAURAL_CHANNELS ) + offset + 1]; + } + } + + return; +} + + +static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices( + Decoder_Struct *st_ivas, + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Rmat[3][3], + const uint8_t firstSubframe, + const uint8_t nSubframes ) +{ + uint8_t ch, slot, bin, subframe; + uint8_t separateCenterChannelRendering; + int16_t nBins; + float frameMeanDiffusenessEneWeight[CLDFB_NO_CHANNELS_MAX]; + DIRAC_DEC_HANDLE hDirAC; + DIRAC_DEC_BIN_HANDLE h; + float IIReneLimiterFactor; + float qualityBasedSmFactor; + float lowBitRateEQ[CLDFB_NO_CHANNELS_MAX]; + uint8_t applyLowBitRateEQ; + int16_t dirac_read_idx; + + + hDirAC = st_ivas->hDirAC; + h = st_ivas->hDiracDecBin; + separateCenterChannelRendering = st_ivas->hOutSetup.separateChannelEnabled; + nBins = hDirAC->num_freq_bands; /* Actually bins */ + + set_zero( h->ChCrossRe, nBins ); + set_zero( h->ChCrossIm, nBins ); + set_zero( h->ChCrossReOut, nBins ); + set_zero( h->ChCrossImOut, nBins ); + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + set_zero( h->ChEne[ch], nBins ); + set_zero( h->ChEneOut[ch], nBins ); + } + set_zero( h->frameMeanDiffuseness, nBins ); + + set_zero( frameMeanDiffusenessEneWeight, CLDFB_NO_CHANNELS_MAX ); + + /* Determine EQ for low bit rates (13.2 and 16.4 kbps) */ + applyLowBitRateEQ = 0; + if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MC_FORMAT ) && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + { + applyLowBitRateEQ = 1; + if ( st_ivas->hDecoderConfig->ivas_total_brate == IVAS_16k4 ) + { + for ( bin = 0; bin < LOW_BIT_RATE_BINAURAL_EQ_BINS; bin++ ) + { + lowBitRateEQ[bin + LOW_BIT_RATE_BINAURAL_EQ_OFFSET] = lowBitRateBinauralEQ[bin] * 0.5f + 0.5f; + } + } + else + { + for ( bin = 0; bin < LOW_BIT_RATE_BINAURAL_EQ_BINS; bin++ ) + { + lowBitRateEQ[bin + LOW_BIT_RATE_BINAURAL_EQ_OFFSET] = lowBitRateBinauralEQ[bin]; + } + } + } + + /* Formulate input and target covariance matrices combining all subframes */ + for ( subframe = firstSubframe; subframe < ( firstSubframe + nSubframes ); subframe++ ) + { + float subFrameTotalEne[CLDFB_NO_CHANNELS_MAX]; + + set_zero( subFrameTotalEne, CLDFB_NO_CHANNELS_MAX ); + dirac_read_idx = hDirAC->dirac_read_idx; + + /* Calculate input covariance matrix */ + for ( slot = 0; slot < (uint8_t) hDirAC->subframe_nbslots; slot++ ) + { + int16_t slotThis = slot + ( hDirAC->subframe_nbslots * subframe ); + + for ( bin = 0; bin < nBins; bin++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + float instEne; + + instEne = ( inRe[ch][slotThis][bin] * inRe[ch][slotThis][bin] ); + instEne += ( inIm[ch][slotThis][bin] * inIm[ch][slotThis][bin] ); + h->ChEne[ch][bin] += instEne; + subFrameTotalEne[bin] += instEne; + } + h->ChCrossRe[bin] += inRe[0][slotThis][bin] * inRe[1][slotThis][bin]; + h->ChCrossRe[bin] += inIm[0][slotThis][bin] * inIm[1][slotThis][bin]; + h->ChCrossIm[bin] += inRe[0][slotThis][bin] * inIm[1][slotThis][bin]; + h->ChCrossIm[bin] -= inIm[0][slotThis][bin] * inRe[1][slotThis][bin]; + } + } + + /* Apply EQ at low bit rates */ + if ( applyLowBitRateEQ ) + { + int16_t lastEqBin = LOW_BIT_RATE_BINAURAL_EQ_OFFSET + LOW_BIT_RATE_BINAURAL_EQ_BINS - 1; + + for ( bin = LOW_BIT_RATE_BINAURAL_EQ_OFFSET; bin < lastEqBin; bin++ ) + { + subFrameTotalEne[bin] *= lowBitRateEQ[bin]; + } + for ( ; bin < nBins; bin++ ) + { + subFrameTotalEne[bin] *= lowBitRateEQ[lastEqBin]; + } + } + + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->nchan_transport == 2 ) + { + float tempRe, tempIm; + + set_zero( subFrameTotalEne, CLDFB_NO_CHANNELS_MAX ); + + for ( slot = 0; slot < (uint8_t) hDirAC->subframe_nbslots; slot++ ) + { + int16_t slotThis = slot + ( hDirAC->subframe_nbslots * subframe ); + + for ( bin = 0; bin < nBins; bin++ ) + { + tempRe = inRe[0][slotThis][bin] + inRe[1][slotThis][bin]; + tempIm = inIm[0][slotThis][bin] + inIm[1][slotThis][bin]; + subFrameTotalEne[bin] += tempRe * tempRe + tempIm * tempIm; + } + } + } + + /* Determine target covariance matrix containing target binaural properties */ + for ( bin = 0; bin < nBins; bin++ ) + { + float diffuseness = 1.0f; /* ratio1 and ratio2 are subtracted from diffuseness further below */ + float surCoh = 0.0f, spreadCoh = 0.0f; /* Default values if spreadSurroundCoherenceApplied == false */ + float diffEne, dirEne, meanEnePerCh; + uint16_t dirIndex; + + /* When BINAURAL_ROOM is not indicated, hBinaural->earlyPartEneCorrection[bin] values are all 1.0f. + * When BINAURAL_ROOM is indicated, the binaural audio output is based on combined use of the + * HRTF data set and a BRIR-based data set. The HRTF data set is spectrally corrected to match + * the early spectrum of the BRIR data, using the spectral correction data in + * hBinaural->earlyPartEneCorrection[bin], based on the BRIR set. */ + meanEnePerCh = h->earlyPartEneCorrection[bin] * subFrameTotalEne[bin] / 2.0f; + + /* Determine direct part target covariance matrix (for 1 or 2 directions) */ + for ( dirIndex = 0; dirIndex < hDirAC->numSimultaneousDirections; dirIndex++ ) + { + int16_t aziDeg, eleDeg; + float lRealp, lImagp, rRealp, rImagp; + float lRealpTmp, lImagpTmp, rRealpTmp, rImagpTmp; + float hrtfEne[BINAURAL_CHANNELS], hrtfCrossRe, hrtfCrossIm, ratio; + + if ( dirIndex == 0 ) /* For first of the two simultaneous directions */ + { + aziDeg = hDirAC->azimuth[dirac_read_idx][bin]; + eleDeg = hDirAC->elevation[dirac_read_idx][bin]; + ratio = hDirAC->energy_ratio1[dirac_read_idx][bin]; + spreadCoh = hDirAC->spreadCoherence[dirac_read_idx][bin]; + } + else /* For second of the two simultaneous directions */ + { + aziDeg = hDirAC->azimuth2[dirac_read_idx][bin]; + eleDeg = hDirAC->elevation2[dirac_read_idx][bin]; + ratio = hDirAC->energy_ratio2[dirac_read_idx][bin]; + spreadCoh = hDirAC->spreadCoherence2[dirac_read_idx][bin]; + } + diffuseness -= ratio; /* diffuseness = 1 - ratio1 - ratio2 */ + + if ( separateCenterChannelRendering ) + { + /* In masa + mono rendering mode, the center directions originate from phantom sources, so the + * spread coherence is increased */ + float aziRad, eleRad, doaVectorX, spatialAngleDeg, altSpreadCoh; + + aziRad = (float) aziDeg * PI_OVER_180; + eleRad = (float) eleDeg * PI_OVER_180; + doaVectorX = cosf( aziRad ) * cosf( eleRad ); + spatialAngleDeg = acosf( doaVectorX ) * _180_OVER_PI; + altSpreadCoh = 1.0f - ( spatialAngleDeg / 30.0f ); + spreadCoh = max( spreadCoh, altSpreadCoh ); + } + + getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat ); + + if ( h->renderStereoOutputInsteadOfBinaural ) + { + /* Synthesizing spread coherence is not needed for stereo loudspeaker output, + * as directional sound is reproduced with two loudspeakers in any case */ + spreadCoh = 0.0f; + } + + if ( spreadCoh > 0.0f ) + { + float centerMul, sidesMul; + float hrtfEneCenter, hrtfEneSides, hrtfEneRealized, eneCorrectionFactor; + float w1, w2, w3, eq; + + hrtfEneCenter = ( lRealp * lRealp ) + ( lImagp * lImagp ) + ( rRealp * rRealp ) + ( rImagp * rImagp ); + + /* Spread coherence is synthesized as coherent sources at 30 degree horizontal spacing. + * The following formulas determine the gains for these sources. + * spreadCoh = 0: Only panning + * spreadCoh = 0.5: Three sources coherent panning (e.g. 30 0 -30 deg azi) + * spreadCoh = 1.0: Two sources coherent panning with gap (as above, but center is silent) */ + if ( spreadCoh < 0.5f ) + { + /* 0.0f < spreadCoh < 0.5f */ + sidesMul = 0.5774f * spreadCoh * 2.0f; /* sqrt(1/3) = 0.5774f */ + centerMul = 1.0f - ( spreadCoh * 2.0f ) + sidesMul; + } + else + { + /* 0.5f <= spreadCoh < 1.0f */ + centerMul = 2.0f - ( 2.0f * spreadCoh ); + sidesMul = 1.0f / sqrtf( centerMul + 2.0f ); + centerMul *= sidesMul; + } + + /* Apply the gain for the center source of the three coherent sources */ + lRealp *= centerMul; + lImagp *= centerMul; + rRealp *= centerMul; + rImagp *= centerMul; + + /* Apply the gain for the left source of the three coherent sources */ + getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat ); + + hrtfEneSides = ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); + lRealp += sidesMul * lRealpTmp; + lImagp += sidesMul * lImagpTmp; + rRealp += sidesMul * rRealpTmp; + rImagp += sidesMul * rImagpTmp; + + /* Apply the gain for the right source of the three coherent sources. + * -30 degrees to 330 wrapping due to internal functions. */ + getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat ); + + hrtfEneSides += ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); + lRealp += sidesMul * lRealpTmp; + lImagp += sidesMul * lImagpTmp; + rRealp += sidesMul * rRealpTmp; + rImagp += sidesMul * rImagpTmp; + + /* Formulate an eneCorrectionFactor that compensates for the coherent summation of the HRTFs */ + hrtfEneRealized = ( lRealp * lRealp ) + ( lImagp * lImagp ) + ( rRealp * rRealp ) + ( rImagp * rImagp ); + eneCorrectionFactor = ( ( hrtfEneSides * sidesMul * sidesMul ) + + ( hrtfEneCenter * centerMul * centerMul ) ) / + max( 1e-12f, hrtfEneRealized ); + + /* Weighting factors to determine appropriate target spectrum for spread coherent sound */ + if ( spreadCoh < 0.5 ) + { + w1 = 1.0f - 2.0f * spreadCoh; + w2 = 2.0f * spreadCoh; + w3 = 0.0f; + } + else + { + w1 = 0.0f; + w2 = 2.0f - 2.0f * spreadCoh; + w3 = 2.0f * spreadCoh - 1.0f; + } + + if ( ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + { + /* Apply the target spectrum to the eneCorrectionFactor */ + if ( separateCenterChannelRendering ) /* spreadCoh mostly originates from phantom sources in separate channel rendering mode */ + { + eneCorrectionFactor *= w1 * 1.0f + ( w2 + w3 ) * spreadCohEne1[min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 )]; + } + else + { + eneCorrectionFactor *= w1 * 1.0f + w2 * spreadCohEne05[min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 )] + + w3 * spreadCohEne1[min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 )]; + } + } + + /* Equalize the spread coherent combined HRTFs */ + eq = min( 4.0f, sqrtf( eneCorrectionFactor ) ); + lRealp *= eq; + lImagp *= eq; + rRealp *= eq; + rImagp *= eq; + } + + hrtfEne[0] = ( lRealp * lRealp ) + ( lImagp * lImagp ); + hrtfEne[1] = ( rRealp * rRealp ) + ( rImagp * rImagp ); + hrtfCrossRe = ( lRealp * rRealp ) + ( lImagp * rImagp ); + hrtfCrossIm = ( -lImagp * rRealp ) + ( lRealp * rImagp ); + + /* Add direct part (1 or 2) covariance matrix */ + dirEne = ratio * meanEnePerCh; + h->ChEneOut[0][bin] += dirEne * hrtfEne[0]; /* Dir ene part*/ + h->ChEneOut[1][bin] += dirEne * hrtfEne[1]; + h->ChCrossReOut[bin] += dirEne * hrtfCrossRe; /* Dir cross re */ + h->ChCrossImOut[bin] += dirEne * hrtfCrossIm; /* Dir cross im */ + } + + /* Add diffuse / ambient part covariance matrix */ + diffuseness = max( 0.0f, diffuseness ); + diffEne = diffuseness * meanEnePerCh; + surCoh = hDirAC->surroundingCoherence[dirac_read_idx][bin]; + if ( ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + { + if ( !h->renderStereoOutputInsteadOfBinaural ) + { + /* Apply target spectrum that emphasizes low frequencies when the sound is surround coherent */ + diffEne *= ( 1.0f - surCoh ) + surCoh * surCohEne[min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 )]; + } + } + h->ChEneOut[0][bin] += diffEne; /* Diff ene part*/ + h->ChEneOut[1][bin] += diffEne; + + if ( h->renderStereoOutputInsteadOfBinaural ) + { + /* When rendering stereo, ambience (except for surround coherent sound) has zero ICC. */ + h->ChCrossReOut[bin] += surCoh * diffEne; + } + else /* When rendering binaural, ambience has frequency dependent ICC. */ + { + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && bin < BINAURAL_COHERENCE_DIFFERENCE_BINS ) + { + float diffuseFieldCoherence; + diffuseFieldCoherence = hDirAC->hDiffuseDist->diffuseRatioX[subframe][bin] * h->diffuseFieldCoherenceX[bin] + hDirAC->hDiffuseDist->diffuseRatioY[subframe][bin] * h->diffuseFieldCoherenceY[bin] + hDirAC->hDiffuseDist->diffuseRatioZ[subframe][bin] * h->diffuseFieldCoherenceZ[bin]; + h->ChCrossReOut[bin] += ( ( 1.0f - surCoh ) * diffuseFieldCoherence + surCoh ) * diffEne; + } + else + { + h->ChCrossReOut[bin] += ( ( 1.0f - surCoh ) * h->diffuseFieldCoherence[bin] + surCoh ) * diffEne; + } + } + + /* Store parameters for formulating average diffuseness over frame */ + h->frameMeanDiffuseness[bin] += diffEne; + frameMeanDiffusenessEneWeight[bin] += meanEnePerCh; + } + + hDirAC->dirac_read_idx = ( hDirAC->dirac_read_idx + 1 ) % hDirAC->dirac_md_buffer_length; + } + + /* Formulate average diffuseness over frame */ + for ( bin = 0; bin < nBins; bin++ ) + { + h->frameMeanDiffuseness[bin] /= fmaxf( 1e-12f, frameMeanDiffusenessEneWeight[bin] ); + } + + /* Determine encoding quality based additional smoothing factor */ + qualityBasedSmFactor = 1.0f; + if ( st_ivas->hMasa != NULL ) + { + qualityBasedSmFactor = st_ivas->hMasa->data.dir_decode_quality; + qualityBasedSmFactor *= qualityBasedSmFactor; + } + + /* Temporal IIR-type smoothing of covariance matrices */ + if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + { + IIReneLimiterFactor = 16.0f / (float) nSubframes + ( 1.0f - qualityBasedSmFactor ); + } + else + { + IIReneLimiterFactor = 8.0f / (float) nSubframes + ( 1.0f - qualityBasedSmFactor ); + } + for ( bin = 0; bin < nBins; bin++ ) + { + float eneRatio, IIReneLimiter; + + /* Temporally smooth cov mtx estimates for resulting mixing matrix stability. The design principle is that + * the energy history (IIR) must not be more than double of the current frame energy. This provides more + * robust performance at energy offsets when compared to typical IIR averaging. */ + eneRatio = ( h->ChEne[0][bin] + h->ChEne[1][bin] ) / fmaxf( 1e-12f, ( h->ChEnePrev[0][bin] + h->ChEnePrev[1][bin] ) ); + IIReneLimiter = fminf( 1.0f, eneRatio * IIReneLimiterFactor ); + + h->ChCrossRe[bin] *= qualityBasedSmFactor; + h->ChCrossIm[bin] *= qualityBasedSmFactor; + h->ChCrossReOut[bin] *= qualityBasedSmFactor; + h->ChCrossImOut[bin] *= qualityBasedSmFactor; + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + h->ChEne[ch][bin] *= qualityBasedSmFactor; + h->ChEneOut[ch][bin] *= qualityBasedSmFactor; + } + + h->ChCrossRe[bin] += IIReneLimiter * h->ChCrossRePrev[bin]; + h->ChCrossIm[bin] += IIReneLimiter * h->ChCrossImPrev[bin]; + h->ChCrossReOut[bin] += IIReneLimiter * h->ChCrossReOutPrev[bin]; + h->ChCrossImOut[bin] += IIReneLimiter * h->ChCrossImOutPrev[bin]; + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + h->ChEne[ch][bin] += IIReneLimiter * h->ChEnePrev[ch][bin]; + h->ChEneOut[ch][bin] += IIReneLimiter * h->ChEneOutPrev[ch][bin]; + } + + /* Store energy values and coefficients for next round */ + h->ChCrossRePrev[bin] = h->ChCrossRe[bin]; + h->ChCrossImPrev[bin] = h->ChCrossIm[bin]; + h->ChCrossReOutPrev[bin] = h->ChCrossReOut[bin]; + h->ChCrossImOutPrev[bin] = h->ChCrossImOut[bin]; + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + h->ChEnePrev[ch][bin] = h->ChEne[ch][bin]; + h->ChEneOutPrev[ch][bin] = h->ChEneOut[ch][bin]; + } + } + + return; +} + + +static void ivas_dirac_dec_binaural_determine_processing_matrices( + Decoder_Struct *st_ivas, + const int16_t max_band_decorr, + float Rmat[3][3] ) +{ + uint8_t chA, chB, bin; + uint8_t separateCenterChannelRendering; + int16_t nBins; + DIRAC_DEC_BIN_HANDLE h; + h = st_ivas->hDiracDecBin; + separateCenterChannelRendering = st_ivas->hOutSetup.separateChannelEnabled; + nBins = st_ivas->hDirAC->num_freq_bands; /* Actually bins */ + + for ( bin = 0; bin < nBins; bin++ ) + { + float tmpMtxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], tmpMtxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS], resultMtxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], resultMtxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS], gain; + float CxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], CxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; /* Input covariance matrix */ + float realizedOutputEne, targetOutputEne, missingOutputEne; + float CrEneL, CrEneR; /* Cr = residual decorrelated sound covariance matrix */ + float CrCrossRe, CrCrossIm; + float Mre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Mim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], MdecRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], MdecIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; /* M = mixing matrix; Mdec = residual decorrelated signal mixing matrix */ + float prototypeMtx[BINAURAL_CHANNELS][BINAURAL_CHANNELS] = { { 1.0f, 0.05f }, { 0.05f, 1.0f } }; /* Prototype matrix determines a reference signal in mixing matrix determination */ + + CrEneL = 0.0f; + CrEneR = 0.0f; + + /* Formulate main processing matrix M */ + formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], + h->ChCrossRe[bin], h->ChCrossIm[bin], + h->ChEneOut[0][bin], h->ChEneOut[1][bin], + h->ChCrossReOut[bin], h->ChCrossImOut[bin], + prototypeMtx, Mre, Mim, 1.0f ); + + /* Load estimated covariance matrix to the [2][2] matrix form */ + CxRe[0][0] = h->ChEne[0][bin]; + CxRe[1][1] = h->ChEne[1][bin]; + CxRe[1][0] = h->ChCrossRe[bin]; + CxRe[0][1] = h->ChCrossRe[bin]; + CxIm[0][0] = 0.0f; + CxIm[1][1] = 0.0f; + CxIm[1][0] = h->ChCrossIm[bin]; + CxIm[0][1] = -h->ChCrossIm[bin]; + + /* Make matrix multiplication M*Cx*M' to determine resulting covariance matrix of processing input with M */ + matrixMul( Mre, Mim, CxRe, CxIm, tmpMtxRe, tmpMtxIm ); + matrixTransp2Mul( tmpMtxRe, tmpMtxIm, Mre, Mim, resultMtxRe, resultMtxIm ); + + /* When below the frequency limit where decorrelation is applied, we inject the decorrelated + * residual (or missing) signal component. The procedure is active when there are not enough independent + * signal energy to synthesize a signal with the target covariance matrix from the non-decorrelated signals */ + if ( bin < max_band_decorr ) + { + float decorrelationReductionFactor; + + /* Subtract the resulting covariance matrix from the target covariance matrix to determine + * what signal component is missing. The result is the target covariance matrix for the residual signal, i.e., + * a residual covariance matrix. */ + CrEneL = max( 0.0f, h->ChEneOut[0][bin] - resultMtxRe[0][0] ); + CrEneR = max( 0.0f, h->ChEneOut[1][bin] - resultMtxRe[1][1] ); + CrCrossRe = h->ChCrossReOut[bin] - resultMtxRe[1][0]; + CrCrossIm = h->ChCrossImOut[bin] - resultMtxIm[1][0]; + + /* The amount of the decorrelated sound is further controlled based on the spatial metadata, + * by determining an energy-suppressed residual covariance matrix that is a control parameter + * that guides the processing of the decorrelated sound to a residual signal. + * The procedure improves quality in e.g. double-talk 2-direction rendering situations.*/ + if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + { + decorrelationReductionFactor = 1.0f; + } + else if ( ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) || ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->nchan_transport == 1 ) ) + { + decorrelationReductionFactor = sqrtf( fmaxf( 0.0f, h->frameMeanDiffuseness[bin] ) ); + } + else if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->nchan_transport == 1 ) + { + decorrelationReductionFactor = 1.0f; + } + else + { + decorrelationReductionFactor = fmaxf( 0.0f, h->frameMeanDiffuseness[bin] ); + } + CrEneL *= decorrelationReductionFactor; + CrEneR *= decorrelationReductionFactor; + CrCrossRe *= decorrelationReductionFactor; + CrCrossIm *= decorrelationReductionFactor; + + /* Determine a residual mixing matrix Mdec for processing the decorrelated signal to obtain + * the residual signal (that has the residual covariance matrix) */ + formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], + 0.0f, 0.0f, /* Decorrelated signal has ideally no cross-terms */ + CrEneL, CrEneR, + CrCrossRe, CrCrossIm, + prototypeMtx, MdecRe, MdecIm, 0.2f ); + } + else + { + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + set_zero( MdecRe[chA], BINAURAL_CHANNELS ); + set_zero( MdecIm[chA], BINAURAL_CHANNELS ); + } + } + + /* The regularizations at determining mixing matrices cause signal energy to be lost to some degree, which is compensated for here */ + realizedOutputEne = CrEneL + CrEneR + resultMtxRe[0][0] + resultMtxRe[1][1]; + targetOutputEne = h->ChEneOut[0][bin] + h->ChEneOut[1][bin]; + missingOutputEne = fmaxf( 0.0f, targetOutputEne - realizedOutputEne ); + + gain = sqrtf( ( resultMtxRe[0][0] + resultMtxRe[1][1] + missingOutputEne ) / + fmaxf( 1e-12f, resultMtxRe[0][0] + resultMtxRe[1][1] ) ); + gain = fminf( 4.0f, gain ); + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + Mre[chA][chB] *= gain; + Mim[chA][chB] *= gain; + } + } + + /* Store processing matrices */ + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + h->processMtxRePrev[chA][chB][bin] = h->processMtxRe[chA][chB][bin]; + h->processMtxImPrev[chA][chB][bin] = h->processMtxIm[chA][chB][bin]; + h->processMtxDecRePrev[chA][chB][bin] = h->processMtxDecRe[chA][chB][bin]; + h->processMtxDecImPrev[chA][chB][bin] = h->processMtxDecIm[chA][chB][bin]; + + h->processMtxRe[chA][chB][bin] = Mre[chA][chB]; + h->processMtxIm[chA][chB][bin] = Mim[chA][chB]; + h->processMtxDecRe[chA][chB][bin] = MdecRe[chA][chB]; + h->processMtxDecIm[chA][chB][bin] = MdecIm[chA][chB]; + } + } + + if ( separateCenterChannelRendering ) + { + /* The rendering of the separate center channel in masa + mono mode. + * The center channel is processed with a gain factor 0.8414f to match the loudness of different processing paths */ + float lRealp, lImagp, rRealp, rImagp; + float gainFactor; + int16_t aziDeg = 0; + int16_t eleDeg = 0; + + gainFactor = 0.8414f * sqrtf( h->earlyPartEneCorrection[bin] ); + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + h->processMtxRePrev[chA][2][bin] = h->processMtxRe[chA][2][bin]; + h->processMtxImPrev[chA][2][bin] = h->processMtxIm[chA][2][bin]; + } + + getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat ); + + h->processMtxRe[0][2][bin] = lRealp * gainFactor; + h->processMtxIm[0][2][bin] = lImagp * gainFactor; + h->processMtxRe[1][2][bin] = rRealp * gainFactor; + h->processMtxIm[1][2][bin] = rImagp * gainFactor; + } + } + + return; +} + + +static void ivas_dirac_dec_binaural_process_output( + Decoder_Struct *st_ivas, + float output_f[][L_FRAME48k], + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int16_t max_band_decorr, + const uint8_t numInChannels, + const uint8_t firstSlot, + const uint8_t slotEnd ) +{ + uint8_t slot, bin, chA, chB; + int16_t nBins; + float outSlotRe[CLDFB_NO_CHANNELS_MAX], outSlotIm[CLDFB_NO_CHANNELS_MAX]; + float decSlotRe[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX], decSlotIm[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float reverbRe[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float reverbIm[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + uint8_t numSlots; + DIRAC_DEC_BIN_HANDLE h; + float interpVal; + float *decSlotRePointer; + float *decSlotImPointer; + + numSlots = slotEnd - firstSlot; + h = st_ivas->hDiracDecBin; + nBins = st_ivas->hDirAC->num_freq_bands; + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + { + /* Process second / room effect part of binaural output when needed */ + ivas_binaural_reverb_processFrame( st_ivas->hDiracDecBin->hReverb, numInChannels, inRe, inIm, reverbRe, reverbIm, firstSlot ); + } + + interpVal = 0.0f; + for ( slot = firstSlot; slot < ( firstSlot + numSlots ); slot++ ) + { + interpVal += 1.0f / (float) numSlots; + if ( !st_ivas->hDiracDecBin->useTdDecorr && max_band_decorr > 0 ) + { + ivas_dirac_dec_decorrelate_slot( st_ivas->hDirAC, slot, inRe, inIm, decSlotRe, decSlotIm ); + } + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + float *outSlotRePr, *outSlotImPr; /* Pointers needed for function call compatibility */ + + set_zero( outSlotRe, CLDFB_NO_CHANNELS_MAX ); + set_zero( outSlotIm, CLDFB_NO_CHANNELS_MAX ); + + /* Processing of the first / HRTF part of the binaural output. */ + for ( chB = 0; chB < numInChannels; chB++ ) + { + if ( st_ivas->hDiracDecBin->useTdDecorr ) + { + decSlotRePointer = inRe[chB + 2][slot]; + decSlotImPointer = inIm[chB + 2][slot]; + } + else + { + decSlotRePointer = decSlotRe[chB]; + decSlotImPointer = decSlotIm[chB]; + } + + for ( bin = 0; bin < nBins; bin++ ) + { + float gain; + + /* Mixing using the formulated processing matrix M */ + gain = ( 1.0f - interpVal ) * h->processMtxRePrev[chA][chB][bin] + + interpVal * h->processMtxRe[chA][chB][bin]; + outSlotRe[bin] += gain * inRe[chB][slot][bin]; + outSlotIm[bin] += gain * inIm[chB][slot][bin]; + + gain = ( 1.0f - interpVal ) * h->processMtxImPrev[chA][chB][bin] + + interpVal * h->processMtxIm[chA][chB][bin]; + outSlotRe[bin] -= gain * inIm[chB][slot][bin]; + outSlotIm[bin] += gain * inRe[chB][slot][bin]; + + /* Mixing decorrelated signals using the formulated residual processing matrix Mdec */ + if ( bin < max_band_decorr && chB < 2 ) + { + gain = ( 1.0f - interpVal ) * h->processMtxDecRePrev[chA][chB][bin] + + interpVal * h->processMtxDecRe[chA][chB][bin]; + outSlotRe[bin] += gain * decSlotRePointer[bin]; + outSlotIm[bin] += gain * decSlotImPointer[bin]; + + gain = ( 1.0f - interpVal ) * h->processMtxDecImPrev[chA][chB][bin] + + interpVal * h->processMtxDecIm[chA][chB][bin]; + outSlotRe[bin] -= gain * decSlotImPointer[bin]; + outSlotIm[bin] += gain * decSlotRePointer[bin]; + } + } + } + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + { + /* Combine second (reverb) part with the first (HRTF) part to obtain binaural output signal with room effect */ + v_add( outSlotRe, reverbRe[chA][slot], outSlotRe, CLDFB_NO_CHANNELS_MAX ); + v_add( outSlotIm, reverbIm[chA][slot], outSlotIm, CLDFB_NO_CHANNELS_MAX ); + } + + outSlotRePr = &( outSlotRe[0] ); + outSlotImPr = &( outSlotIm[0] ); + + /* Inverse filter bank */ + cldfbSynthesis( &outSlotRePr, &outSlotImPr, &( output_f[chA][nBins * slot] ), nBins, st_ivas->cldfbSynDec[chA] ); + } + } + + return; +} + + +static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( + HEAD_TRACK_DATA_HANDLE hHeadTrackData, + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const uint8_t firstSlot, + const uint8_t slotEnd, + const uint8_t nBins, + float Rmat[3][3] ) +{ + uint8_t slot, bin, ch; + float tmpVal; + + /* When not currently in prototype signal left-right switching procedure, check if such switching is needed */ + if ( hHeadTrackData->lrSwitchedNext == hHeadTrackData->lrSwitchedCurrent ) + { + float thresholdDotProduct = 0.17f; /* Corresponds to 10-degree switching threshold */ + if ( ( hHeadTrackData->lrSwitchedCurrent == 0 ) && ( Rmat[1][1] < -thresholdDotProduct ) ) + { + hHeadTrackData->lrSwitchedNext = 1; + } + if ( ( hHeadTrackData->lrSwitchedCurrent == 1 ) && ( Rmat[1][1] > thresholdDotProduct ) ) + { + hHeadTrackData->lrSwitchedNext = 0; + } + } + + /* When currently in interpolation */ + if ( hHeadTrackData->lrSwitchedNext != hHeadTrackData->lrSwitchedCurrent ) + { + for ( slot = firstSlot; slot < slotEnd; slot++ ) + { + float switchOrderFactor, origOrderFactor; + + hHeadTrackData->lrSwitchInterpVal += 0.0025f; /* Corresponds to 0.5 seconds interpolation time */ + + if ( hHeadTrackData->lrSwitchInterpVal > 0.999f ) + { + /* Stop interpolation, reset values */ + hHeadTrackData->lrSwitchInterpVal = 0.0f; + hHeadTrackData->lrSwitchedCurrent = hHeadTrackData->lrSwitchedNext; + } + + /* Gains for determining portion of switched channel order and original channel order */ + tmpVal = (float) hHeadTrackData->lrSwitchedNext * hHeadTrackData->lrSwitchInterpVal; + tmpVal += (float) hHeadTrackData->lrSwitchedCurrent * ( 1.0f - hHeadTrackData->lrSwitchInterpVal ); + switchOrderFactor = sqrtf( tmpVal ); + origOrderFactor = sqrtf( 1.0f - tmpVal ); + + for ( bin = 0; bin < nBins; bin++ ) + { + /* determine original order (1) signals and switched order (2) signals */ + float re1[BINAURAL_CHANNELS], re2[BINAURAL_CHANNELS], im1[BINAURAL_CHANNELS], im2[BINAURAL_CHANNELS]; + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + re1[ch] = inRe[ch][slot][bin] * origOrderFactor; + re2[ch] = inRe[1 - ch][slot][bin] * switchOrderFactor; + im1[ch] = inIm[ch][slot][bin] * origOrderFactor; + im2[ch] = inIm[1 - ch][slot][bin] * switchOrderFactor; + } + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + float eneRef, ene, eq; + + /* Interpolate / mix original and switched order signals */ + inRe[ch][slot][bin] = re1[ch] + re2[ch]; + inIm[ch][slot][bin] = im1[ch] + im2[ch]; + + /* Equalize interpolated signals to preserve energy per bin */ + eneRef = ( re1[ch] * re1[ch] ) + ( re2[ch] * re2[ch] ) + ( im1[ch] * im1[ch] ) + ( im2[ch] * im2[ch] ); + ene = ( inRe[ch][slot][bin] * inRe[ch][slot][bin] ) + ( inIm[ch][slot][bin] * inIm[ch][slot][bin] ); + eq = sqrtf( eneRef / fmaxf( 1e-12f, ene ) ); + eq = fminf( 4.0f, eq ); + inRe[ch][slot][bin] *= eq; + inIm[ch][slot][bin] *= eq; + } + } + } + } + else + { + /* If not in interpolation, but in switched prototype situation, then switch left and right channels */ + if ( hHeadTrackData->lrSwitchedCurrent == 1 ) + { + for ( slot = firstSlot; slot < slotEnd; slot++ ) + { + for ( bin = 0; bin < nBins; bin++ ) + { + tmpVal = inRe[0][slot][bin]; + inRe[0][slot][bin] = inRe[1][slot][bin]; + inRe[1][slot][bin] = tmpVal; + tmpVal = inIm[0][slot][bin]; + inIm[0][slot][bin] = inIm[1][slot][bin]; + inIm[1][slot][bin] = tmpVal; + } + } + } + } + + return; +} + + +static void eig2x2( + const float E1, + const float E2, + const float Cre, + const float Cim, + float Ure[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Uim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float D[BINAURAL_CHANNELS] ) +{ + int16_t chA, chB, ch; + float s, normVal, crossSquare, a, pm, add; + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + Ure[chA][chB] = 0.0f; + Uim[chA][chB] = 0.0f; + } + } + + crossSquare = ( Cre * Cre ) + ( Cim * Cim ); + a = ( E1 + E2 ) * ( E1 + E2 ) - 4.0f * ( ( E1 * E2 ) - crossSquare ); + pm = 0.5f * sqrtf( max( 0.0f, a ) ); + add = 0.5f * ( E1 + E2 ); + + D[0] = add + pm; + D[1] = max( 0.0f, add - pm ); + + /* Numeric case, when input is practically zeros */ + if ( D[0] < 1e-12f ) + { + Ure[0][0] = 1.0f; + Ure[1][1] = 1.0f; + + return; + } + + /* Numeric case, when input is near an identity matrix with a gain */ + if ( pm < ( 1e-3f * add ) ) + { + Ure[0][0] = 1.0f; + Ure[1][1] = 1.0f; + + return; + } + + /* Eigenvectors */ + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + if ( fabsf( E2 - D[ch] ) > fabsf( E1 - D[ch] ) ) + { + s = D[ch] - E2; + normVal = sqrtf( 1.0f / ( 1e-12f + crossSquare + s * s ) ); + + Ure[0][ch] = s * normVal; + Ure[1][ch] = Cre * normVal; + Uim[1][ch] = Cim * normVal; + } + else + { + s = D[ch] - E1; + normVal = sqrtf( 1.0f / ( 1e-12f + crossSquare + s * s ) ); + + Ure[1][ch] = s * normVal; + Ure[0][ch] = Cre * normVal; + Uim[0][ch] = -Cim * normVal; + } + } + + return; +} + + +static void matrixDiagMul( + float reIn[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float imIn[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + const float D[BINAURAL_CHANNELS], + float reOut[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float imOut[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + int16_t chA, chB; + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + reOut[chA][chB] = reIn[chA][chB] * D[chB]; + imOut[chA][chB] = imIn[chA][chB] * D[chB]; + } + } + + return; +} + + +static void matrixMul( + float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + int16_t chA, chB; + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + outRe[chA][chB] = Are[chA][0] * Bre[0][chB] + Are[chA][1] * Bre[1][chB]; + outRe[chA][chB] -= Aim[chA][0] * Bim[0][chB] + Aim[chA][1] * Bim[1][chB]; + outIm[chA][chB] = Aim[chA][0] * Bre[0][chB] + Aim[chA][1] * Bre[1][chB]; + outIm[chA][chB] += Are[chA][0] * Bim[0][chB] + Are[chA][1] * Bim[1][chB]; + } + } + + return; +} + + +static void matrixTransp1Mul( + float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + int16_t chA, chB; + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + outRe[chA][chB] = Are[0][chA] * Bre[0][chB] + Are[1][chA] * Bre[1][chB]; + outRe[chA][chB] -= -Aim[0][chA] * Bim[0][chB] - Aim[1][chA] * Bim[1][chB]; + outIm[chA][chB] = -Aim[0][chA] * Bre[0][chB] - Aim[1][chA] * Bre[1][chB]; + outIm[chA][chB] += Are[0][chA] * Bim[0][chB] + Are[1][chA] * Bim[1][chB]; + } + } + + return; +} + + +static void matrixTransp2Mul( + float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + int16_t chA, chB; + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + outRe[chA][chB] = Are[chA][0] * Bre[chB][0] + Are[chA][1] * Bre[chB][1]; + outRe[chA][chB] -= Aim[chA][0] * ( -Bim[chB][0] ) + Aim[chA][1] * ( -Bim[chB][1] ); + outIm[chA][chB] = Aim[chA][0] * Bre[chB][0] + Aim[chA][1] * Bre[chB][1]; + outIm[chA][chB] += Are[chA][0] * ( -Bim[chB][0] ) + Are[chA][1] * ( -Bim[chB][1] ); + } + } + + return; +} + + +static void chol2x2( + const float E1, + const float E2, + const float Cre, + const float Cim, + float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + int16_t chA, chB; + float sqrtVal; + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + outRe[chA][chB] = 0.0f; + outIm[chA][chB] = 0.0f; + } + } + + if ( E1 > E2 ) /* Perform Cholesky decomposition according to louder channel first */ + { + outRe[0][0] = sqrtf( E1 ); + outRe[1][0] = Cre / ( 1e-12f + outRe[0][0] ); + outIm[1][0] = Cim / ( 1e-12f + outRe[0][0] ); + sqrtVal = E2 - ( Cre * Cre + Cim * Cim ) / ( 1e-12f + E1 ); + outRe[1][1] = sqrtf( max( 0.0f, sqrtVal ) ); + } + else + { + outRe[1][1] = sqrtf( E2 ); + outRe[0][1] = Cre / ( 1e-12f + outRe[1][1] ); + outIm[0][1] = -Cim / ( 1e-12f + outRe[1][1] ); + sqrtVal = E1 - ( Cre * Cre + Cim * Cim ) / ( 1e-12f + E2 ); + outRe[0][0] = sqrtf( max( 0.0f, sqrtVal ) ); + } + + return; +} + + +static void formulate2x2MixingMatrix( + float Ein1, + float Ein2, + float CinRe, + float CinIm, + float Eout1, + float Eout2, + float CoutRe, + float CoutIm, + float Q[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Mre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float Mim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + const float regularizationFactor ) +{ + /* + This function implements a 2x2 solution for an optimized spatial audio rendering algorithm + Vilkamo, J., Bäckström, T. and Kuntz, A., 2013. + "Optimized covariance domain framework for time–frequency processing of spatial audio." + Journal of the Audio Engineering Society, 61(6), pp.403-411. + + The result of the formulas below are the same as those in the publication, however, some + derivation details differ for as simple as possible 2x2 formulattion + */ + int16_t chA, chB; + float maxEne, maxEneDiv; + float KyRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], KyIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float Uxre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Uxim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float Sx[BINAURAL_CHANNELS], Kxre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Kxim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float tmpRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], tmpIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float Ure[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Uim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float D[BINAURAL_CHANNELS]; + float div[BINAURAL_CHANNELS]; + float Ghat[BINAURAL_CHANNELS]; + float GhatQ[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float Pre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Pim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + + /* Normalize energy values */ + maxEne = Ein1; + maxEne = max( maxEne, Ein2 ); + maxEne = max( maxEne, Eout1 ); + maxEne = max( maxEne, Eout2 ); + maxEneDiv = 1.0f / ( maxEne + 1e-12f ); + Ein1 *= maxEneDiv; + Ein2 *= maxEneDiv; + CinRe *= maxEneDiv; + CinIm *= maxEneDiv; + Eout1 *= maxEneDiv; + Eout2 *= maxEneDiv; + CoutRe *= maxEneDiv; + CoutIm *= maxEneDiv; + + /* Cholesky decomposition of target / output covariance matrix */ + chol2x2( Eout1, Eout2, CoutRe, CoutIm, KyRe, KyIm ); + + /* Eigendecomposition of input covariance matrix */ + eig2x2( Ein1, Ein2, CinRe, CinIm, Uxre, Uxim, Sx ); + + /* Eigendecomposition to Kx -- Ux Sx Ux' -> Kx Kx'*/ + Sx[0] = sqrtf( Sx[0] ); + Sx[1] = sqrtf( Sx[1] ); + matrixDiagMul( Uxre, Uxim, Sx, Kxre, Kxim ); + + /* Regularize the diagonal Sx for matrix inversion */ + Sx[0] = max( Sx[0], regularizationFactor * Sx[1] ); + Sx[1] = max( Sx[1], regularizationFactor * Sx[0] ); + + /* This is equivalent to the prototype signal energy normalization in the publication */ + Ghat[0] = sqrtf( Eout1 / ( 1e-12f + max( Ein1, 0.001f * Ein2 ) ) ); + Ghat[1] = sqrtf( Eout2 / ( 1e-12f + max( Ein2, 0.001f * Ein1 ) ) ); + + /* Matrix multiplication, tmp = Ky' * G_hat * Q */ + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + GhatQ[chA][0] = Q[chA][0] * Ghat[chA]; + GhatQ[chA][1] = Q[chA][1] * Ghat[chA]; + } + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + tmpRe[chA][chB] = KyRe[0][chA] * GhatQ[0][chB] + KyRe[1][chA] * GhatQ[1][chB]; + tmpIm[chA][chB] = -KyIm[0][chA] * GhatQ[0][chB] - KyIm[1][chA] * GhatQ[1][chB]; + } + } + + /* A = Ky' * G_hat * Q * Kx (see publication) */ + matrixMul( tmpRe, tmpIm, Kxre, Kxim, Are, Aim ); + + /* Find nearest orthonormal matrix P to A = Ky' * G_hat * Q * Kx + For matrix A that is P = A(A'A)^0.5 + */ + matrixTransp1Mul( Are, Aim, Are, Aim, tmpRe, tmpIm ); + + eig2x2( tmpRe[0][0], tmpRe[1][1], tmpRe[1][0], tmpIm[1][0], Ure, Uim, D ); + + div[0] = min( 10000.0f, sqrtf( 1.0f / ( 1e-12f + D[0] ) ) ); + div[1] = min( 10000.0f, sqrtf( 1.0f / ( 1e-12f + D[1] ) ) ); + + matrixMul( Are, Aim, Ure, Uim, tmpRe, tmpIm ); + + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + tmpRe[chA][chB] *= div[chB]; + tmpIm[chA][chB] *= div[chB]; + } + } + + matrixTransp2Mul( tmpRe, tmpIm, Ure, Uim, Pre, Pim ); /* Nearest orthonormal matrix P to matrix A formulated */ + + /* These are the final formulas of the JAES publication M = Ky P Kx^(-1) */ + for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) + { + for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) + { + Pre[chA][chB] /= Sx[chB] + 1e-12f; + Pim[chA][chB] /= Sx[chB] + 1e-12f; + } + } + + matrixMul( KyRe, KyIm, Pre, Pim, tmpRe, tmpIm ); + + matrixTransp2Mul( tmpRe, tmpIm, Uxre, Uxim, Mre, Mim ); + + return; +} + + +static void getDirectPartGains( + const int16_t bin, + int16_t aziDeg, + int16_t eleDeg, + float *lRealp, + float *lImagp, + float *rRealp, + float *rImagp, + const uint8_t renderStereoOutputInsteadOfBinaural, + float Rmat[3][3] ) +{ + float aziRad, eleRad; + float y, mappedX, aziRadMapped, A, A2, A3; + const float LsAngleRad = 30.0f * PI_OVER_180; + + if ( renderStereoOutputInsteadOfBinaural ) /* In stereo (i.e. non-binaural) rendering mode */ + { + /* Convert azi and ele to an azi value of the cone of confusion */ + aziRad = (float) aziDeg * PI_OVER_180; + eleRad = (float) eleDeg * PI_OVER_180; + y = ( sinf( aziRad ) * cosf( eleRad ) ); + mappedX = sqrtf( max( 0.0f, 1.0f - ( y * y ) ) ); + aziRadMapped = atan2f( y, mappedX ); + + /* Determine the real valued amplitude panning gains */ + *lImagp = 0.0f; + *rImagp = 0.0f; + if ( aziRadMapped >= LsAngleRad ) + { /* Left side */ + *lRealp = 1.0f; + *rRealp = 0.0f; + } + else if ( aziRadMapped <= -LsAngleRad ) + { /* Right side */ + *lRealp = 0.0f; + *rRealp = 1.0f; + } + else /* Tangent panning law */ + { + A = tanf( aziRadMapped ) / tanf( LsAngleRad ); + A2 = ( A - 1.0f ) / max( 0.001f, A + 1.0f ); + A3 = 1.0f / ( A2 * A2 + 1.0f ); + *lRealp = sqrtf( A3 ); + *rRealp = sqrtf( 1.0f - A3 ); + } + + /* Scaling to have the same expected gain as for the HRTF rendering */ + *lRealp *= SQRT2; + *rRealp *= SQRT2; + } + else /* In regular binaural rendering mode */ + { + rotateAziEle( (float) aziDeg, (float) eleDeg, &aziDeg, &eleDeg, Rmat, 0 ); + hrtfShGetHrtf( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp ); + } + + return; +} + + +static void hrtfShGetHrtf( + const int16_t bin, + const int16_t aziDeg, + const int16_t eleDeg, + float *lRealp, + float *lImagp, + float *rRealp, + float *rImagp ) +{ + int16_t k; + float shVec[HRTF_SH_CHANNELS]; + + ivas_dirac_dec_get_response( aziDeg, + eleDeg, + shVec, + HRTF_SH_ORDER ); + + *lRealp = 0.0f; + *lImagp = 0.0f; + *rRealp = 0.0f; + *rImagp = 0.0f; + for ( k = 0; k < HRTF_SH_CHANNELS; k++ ) + { + *lRealp += hrtfShCoeffsRe[0][k][bin] * shVec[k]; + *lImagp += hrtfShCoeffsIm[0][k][bin] * shVec[k]; + *rRealp += hrtfShCoeffsRe[1][k][bin] * shVec[k]; + *rImagp += hrtfShCoeffsIm[1][k][bin] * shVec[k]; + } + + return; +} diff --git a/lib_dec/ivas_dirac_decorr_dec.c b/lib_dec/ivas_dirac_decorr_dec.c new file mode 100644 index 0000000000..437bdf8a64 --- /dev/null +++ b/lib_dec/ivas_dirac_decorr_dec.c @@ -0,0 +1,780 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define DIRAC_MAX_DECORR_CLDFB_BANDS_AMBI 22 +#define DIRAC_MAX_DECORR_CLDFB_BANDS 15 + +#define DIRAC_DUCK_ALPHA 0.8f +#define DIRAC_DUCK_GAMMA 1.5f + + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void get_lattice_coeffs( const int16_t band_index, const int16_t channel_index, float *lattice_coeffs ); + +static void lattice2allpass( const int16_t filter_length, const float *lattice_coeffs, float *filter_coeffs_num_real, float *filter_coeffs_den_real ); + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_decorr_open() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_decorr_open( + DIRAC_DECORR_PARAMS **ph_freq_domain_decorr_ap_params, + DIRAC_DECORR_STATE **ph_freq_domain_decorr_ap_state, + const int16_t num_freq_bands, + int16_t num_outputs_diff, + const int16_t num_protos_diff, + const DIRAC_SYNTHESIS_CONFIG synthesisConf, + float *frequency_axis, + const int16_t nchan_transport, /* i : number of transport channels*/ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + int16_t k, l, m, n; + int16_t split_band_index_start; + int16_t k_in, k_out, num_bands, band_table_idx, buffer_size_decorr; + int16_t split_frequencies_bands[DIRAC_DECORR_NUM_SPLIT_BANDS + 1] = { 0, 0, 0, 23768 }; + int16_t *split_freq_ptr; + float cur_lattice_delta_phi, lattice_coeffs[2 * DIRAC_MAX_DECORR_FILTER_LEN]; + + /* pointers to structs for allocation */ + DIRAC_DECORR_PARAMS *freq_domain_decorr_ap_params = NULL; + DIRAC_DECORR_STATE *freq_domain_decorr_ap_state = NULL; + + /*-----------------------------------------------------------------* + * prepare library opening + *-----------------------------------------------------------------*/ + + /* allocate structs */ + freq_domain_decorr_ap_params = (DIRAC_DECORR_PARAMS *) count_malloc( sizeof( DIRAC_DECORR_PARAMS ) ); + freq_domain_decorr_ap_state = (DIRAC_DECORR_STATE *) count_malloc( sizeof( DIRAC_DECORR_STATE ) ); + + /*-----------------------------------------------------------------* + * check input parameters + *-----------------------------------------------------------------*/ + + assert( ( num_freq_bands > 0 ) && "Error: Number of frequency bands <= 0!" ); + + + if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + num_outputs_diff -= nchan_transport; + } + + assert( ( num_outputs_diff >= 0 ) && ( num_outputs_diff <= DIRAC_MAX_NUM_DECORR_FILTERS ) && "Error: Number of channels <= 0 or > DIRAC_MAX_NUM_DECORR_FILTERS" ); + + /*-----------------------------------------------------------------* + * set default parameters + *-----------------------------------------------------------------*/ + + if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + /*Decorrelation in SHD*/ + freq_domain_decorr_ap_params->add_back_onsets_on = 0; + if ( nchan_transport > 2 ) + { + freq_domain_decorr_ap_params->max_frequency = 2000; + } + else + { + freq_domain_decorr_ap_params->max_frequency = ( min( num_freq_bands, DIRAC_MAX_DECORR_CLDFB_BANDS_AMBI ) * 24000 ) / CLDFB_NO_CHANNELS_MAX; + } + } + else if ( synthesisConf == DIRAC_SYNTHESIS_COV_MC_LS ) + { + /*Decorrelation in LS channels for MC*/ + freq_domain_decorr_ap_params->add_back_onsets_on = 1; + freq_domain_decorr_ap_params->max_frequency = ( PARAM_MC_MAX_DECORR_CLDFB_BANDS * 24000 ) / CLDFB_NO_CHANNELS_MAX; + } + else + { + /*Decorrelation in LS channels*/ + freq_domain_decorr_ap_params->add_back_onsets_on = 1; + freq_domain_decorr_ap_params->max_frequency = ( DIRAC_MAX_DECORR_CLDFB_BANDS * 24000 ) / CLDFB_NO_CHANNELS_MAX; + } + + freq_domain_decorr_ap_params->use_ducker = 1; /* fcs: fixed for now but can be adaptive in an extended version */ + + assert( ( freq_domain_decorr_ap_params->max_frequency >= 0 ) && ( freq_domain_decorr_ap_params->max_frequency <= output_Fs / 2 ) && "Error: max_frequency invalid!" ); + + /* compute maximum band for decorrelation */ + assert( frequency_axis != NULL ); + for ( k = num_freq_bands - 1; k > 0; --k ) + { + freq_domain_decorr_ap_params->max_band_decorr = k + 1; /* outside "if" to avoid uninitialized variable */ + + if ( frequency_axis[k] < freq_domain_decorr_ap_params->max_frequency ) + { + break; + } + } + + + /*-----------------------------------------------------------------* + * open sub-modules + *-----------------------------------------------------------------*/ + + /* open onset detection module */ + if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + /*Onset detector up to Nyquist and not only up to max_band_decorr*/ + ivas_dirac_dec_onset_detection_open( + num_protos_diff, + num_freq_bands, + num_freq_bands, + &freq_domain_decorr_ap_params->h_onset_detection_power_params, + &freq_domain_decorr_ap_state->h_onset_detection_power_state ); + } + else + { + ivas_dirac_dec_onset_detection_open( + num_protos_diff, + num_freq_bands, + freq_domain_decorr_ap_params->max_band_decorr, + &freq_domain_decorr_ap_params->h_onset_detection_power_params, + &freq_domain_decorr_ap_state->h_onset_detection_power_state ); + } + + /*-----------------------------------------------------------------* + * prepare processing parameters + *-----------------------------------------------------------------*/ + + /* calculate decorrelation split bands */ + split_freq_ptr = &split_frequencies_bands[0]; + split_freq_ptr[0] = 0; + for ( k = 1; k < DIRAC_DECORR_NUM_SPLIT_BANDS; k++ ) + { + split_freq_ptr[k] = (int16_t) ( (float) CLDFB_NO_CHANNELS_MAX * ap_split_frequencies[k] + 0.5f ) - 1; + } + split_band_index_start = 0; + + split_frequencies_bands[k] = 0; + freq_domain_decorr_ap_params->num_split_frequency_bands = 0; + for ( k = 1; k < DIRAC_DECORR_NUM_SPLIT_BANDS + 1; k++ ) + { + freq_domain_decorr_ap_params->num_split_frequency_bands++; + if ( split_frequencies_bands[k] >= freq_domain_decorr_ap_params->max_band_decorr ) + { + split_frequencies_bands[k] = freq_domain_decorr_ap_params->max_band_decorr; + break; + } + } + + freq_domain_decorr_ap_params->split_frequency_bands = (int16_t *) count_malloc( sizeof( int16_t ) * ( freq_domain_decorr_ap_params->num_split_frequency_bands + 1 ) ); + mvs2s( &split_frequencies_bands[0], freq_domain_decorr_ap_params->split_frequency_bands, freq_domain_decorr_ap_params->num_split_frequency_bands + 1 ); + + /* calc buffer size and allocate arrays */ + freq_domain_decorr_ap_state->decorr_buffer = NULL; + freq_domain_decorr_ap_params->filter_coeff_num_real = NULL; + freq_domain_decorr_ap_params->filter_coeff_den_real = NULL; + freq_domain_decorr_ap_params->phase_coeff_real = NULL; + freq_domain_decorr_ap_params->phase_coeff_imag = NULL; + freq_domain_decorr_ap_state->direct_energy_smooth = NULL; + freq_domain_decorr_ap_state->reverb_energy_smooth = NULL; + freq_domain_decorr_ap_params->pre_delay = NULL; + freq_domain_decorr_ap_params->filter_length = NULL; + + if ( num_outputs_diff > 0 ) + { + buffer_size_decorr = ( ap_pre_delay[split_band_index_start] + ap_filter_length[split_band_index_start] ); + freq_domain_decorr_ap_state->decorr_buffer = (float *) count_malloc( sizeof( float ) * 2 * buffer_size_decorr * num_outputs_diff * freq_domain_decorr_ap_params->max_band_decorr ); + set_f( freq_domain_decorr_ap_state->decorr_buffer, 0.0f, 2 * buffer_size_decorr * num_outputs_diff * freq_domain_decorr_ap_params->max_band_decorr ); + + freq_domain_decorr_ap_params->filter_coeff_num_real = (float *) count_malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_params->filter_coeff_den_real = (float *) count_malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_params->phase_coeff_real = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_params->phase_coeff_imag = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_state->direct_energy_smooth = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_state->reverb_energy_smooth = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + + freq_domain_decorr_ap_params->pre_delay = (int16_t *) count_malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ); + freq_domain_decorr_ap_params->filter_length = (int16_t *) count_malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ); + + set_f( freq_domain_decorr_ap_state->direct_energy_smooth, 0.0f, freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + set_f( freq_domain_decorr_ap_state->reverb_energy_smooth, 0.0f, freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + + /* compute filter coefficients */ + for ( k = 0; k < freq_domain_decorr_ap_params->num_split_frequency_bands; k++ ) + { + k_in = freq_domain_decorr_ap_params->split_frequency_bands[k]; + k_out = freq_domain_decorr_ap_params->split_frequency_bands[k + 1]; + num_bands = k_out - k_in; + band_table_idx = k + split_band_index_start; + freq_domain_decorr_ap_params->filter_length[k] = ap_filter_length[band_table_idx] + 1; + freq_domain_decorr_ap_params->pre_delay[k] = ap_pre_delay[band_table_idx]; + + for ( l = 0; l < num_outputs_diff; l++ ) + { + for ( m = 0; m < num_bands; m++ ) + { + n = k_in + m; + cur_lattice_delta_phi = ap_lattice_delta_phi[l * DIRAC_MAX_DECORR_FILTER_LEN + ap_filter_length[k] - 1] * n; + freq_domain_decorr_ap_params->phase_coeff_real[l * freq_domain_decorr_ap_params->max_band_decorr + n] = cosf( cur_lattice_delta_phi ); + freq_domain_decorr_ap_params->phase_coeff_imag[l * freq_domain_decorr_ap_params->max_band_decorr + n] = -sinf( cur_lattice_delta_phi ); + + /* calculate phase offset */ + get_lattice_coeffs( band_table_idx, l, lattice_coeffs ); + + /* calcualte transfer function coefficients from the lattice coefficients */ + lattice2allpass( freq_domain_decorr_ap_params->filter_length[k], lattice_coeffs, &freq_domain_decorr_ap_params->filter_coeff_num_real[( k_in + m ) * ( freq_domain_decorr_ap_params->filter_length[0] * num_outputs_diff ) + l * freq_domain_decorr_ap_params->filter_length[0]], &freq_domain_decorr_ap_params->filter_coeff_den_real[( k_in + m ) * ( freq_domain_decorr_ap_params->filter_length[0] * num_outputs_diff ) + l * freq_domain_decorr_ap_params->filter_length[0]] ); + } + } + } + } + + *ph_freq_domain_decorr_ap_params = freq_domain_decorr_ap_params; + *ph_freq_domain_decorr_ap_state = freq_domain_decorr_ap_state; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_decorr_process() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_decorr_process( + const int16_t num_freq_bands, + int16_t num_channels, + const int16_t num_protos_diff, + const DIRAC_SYNTHESIS_CONFIG synthesisConf, + const int16_t nchan_transport, /* i : number of transport channels*/ + const float *input_frame_f, + const int16_t num_protos_dir, + const int16_t *proto_index_dir, + float *frame_dec_f, + float *onset_filter, + HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params, + HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state ) +{ + int16_t ch_idx, k, l, idx_in_out, max_band_decorr; + int16_t split_bands_idx, band_idx, decorr_buffer_len, time_idx; + int16_t offset, idx_filter, incr_aux; + int16_t k_1, k_2, num_bands, filter_length, pre_delay, decorr_buffer_step; + float frame_ma[2 * ( DIRAC_MAX_DECORR_FILTER_LEN + 1 )]; + float aux_buffer[2 * MAX_OUTPUT_CHANNELS * CLDFB_NO_CHANNELS_MAX]; + float direct_energy[MAX_OUTPUT_CHANNELS * CLDFB_NO_CHANNELS_MAX]; + float *p_frame_dec_f, *decorr_buffer, *phase_coeff_real, *phase_coeff_imag; + float *filter_coeff_num_real, *filter_coeff_den_real, *decorr_buffer_start_ptr, *decorr_buffer_ptr; + float input_real, input_imag, filter_frame_imag, filter_frame_real; + + wmops_sub_start( "dirac_decorr_process" ); + + /* check handles */ + if ( h_freq_domain_decorr_ap_params == NULL || h_freq_domain_decorr_ap_state == NULL ) + { +#ifdef DEBUGGING + assert( !"Error: NULL pointer.\n" ); +#endif + return; + } + + /* check input data */ + if ( input_frame_f == NULL ) + { +#ifdef DEBUGGING + assert( !"Error: NULL pointer.\n" ); +#endif + return; + } + + /* check result arrays */ + if ( frame_dec_f == NULL ) + { +#ifdef DEBUGGING + assert( !"Error: NULL pointer.\n" ); +#endif + return; + } + + + /*-----------------------------------------------------------------* + * ********** processing ********** + *-----------------------------------------------------------------*/ + + /*-----------------------------------------------------------------* + * collect some often used parameters + *-----------------------------------------------------------------*/ + + if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + num_channels -= nchan_transport; + } + + + /*-----------------------------------------------------------------* + * detect and remove onsets + *-----------------------------------------------------------------*/ + + /* compute power */ + max_band_decorr = h_freq_domain_decorr_ap_params->h_onset_detection_power_params.max_band_decorr; + + for ( ch_idx = 0; ch_idx < num_protos_dir; ch_idx++ ) + { + v_mult( &input_frame_f[2 * ch_idx * num_freq_bands], &input_frame_f[2 * ch_idx * num_freq_bands], &aux_buffer[2 * ch_idx * max_band_decorr], 2 * max_band_decorr ); + + v_add_inc( &aux_buffer[2 * ch_idx * max_band_decorr], 2, &aux_buffer[2 * ch_idx * max_band_decorr + 1], 2, &aux_buffer[ch_idx * max_band_decorr], 1, max_band_decorr ); + } + + /* compute onset filter */ + max_band_decorr = h_freq_domain_decorr_ap_params->max_band_decorr; + + set_f( onset_filter, 1.0f, num_protos_diff * num_freq_bands ); + + ivas_dirac_dec_onset_detection_process( aux_buffer, onset_filter, num_protos_diff, h_freq_domain_decorr_ap_params->h_onset_detection_power_params, h_freq_domain_decorr_ap_state->h_onset_detection_power_state ); + + /* Apply decorrelator if num_channels is greater than 0 */ + if ( num_channels > 0 ) + { + /* remove onsets from prototype frame */ + for ( ch_idx = 0; ch_idx < num_protos_dir; ch_idx++ ) + { + v_mult_inc( &input_frame_f[2 * ch_idx * num_freq_bands], 2, &onset_filter[ch_idx * num_freq_bands], 1, &aux_buffer[2 * ch_idx * max_band_decorr], 2, max_band_decorr ); + + v_mult_inc( &input_frame_f[2 * ch_idx * num_freq_bands + 1], 2, &onset_filter[ch_idx * num_freq_bands], 1, &aux_buffer[2 * ch_idx * max_band_decorr + 1], 2, max_band_decorr ); + } + + /*-----------------------------------------------------------------* + * all pass based decorrelation + *-----------------------------------------------------------------*/ + + /* compute decorrelated output frame */ + /* output is the first frame of the state */ + p_frame_dec_f = frame_dec_f; + decorr_buffer = h_freq_domain_decorr_ap_state->decorr_buffer; + phase_coeff_real = h_freq_domain_decorr_ap_params->phase_coeff_real; + phase_coeff_imag = h_freq_domain_decorr_ap_params->phase_coeff_imag; + incr_aux = 2 * ( num_freq_bands - max_band_decorr ); + + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + /* final phase rotation */ + for ( k = 0; k < max_band_decorr; k++ ) + { + *( p_frame_dec_f++ ) = ( ( *decorr_buffer ) * ( *phase_coeff_real ) ) - ( ( *( decorr_buffer + 1 ) ) * ( *phase_coeff_imag ) ); + *( p_frame_dec_f++ ) = ( ( *decorr_buffer ) * ( *phase_coeff_imag++ ) ) + ( ( *( decorr_buffer + 1 ) ) * ( *phase_coeff_real++ ) ); + decorr_buffer += 2; + } + p_frame_dec_f += incr_aux; + } + + /* update state */ + decorr_buffer_len = h_freq_domain_decorr_ap_params->filter_length[0] + h_freq_domain_decorr_ap_params->pre_delay[0] - 1; + for ( time_idx = 0; time_idx < ( decorr_buffer_len - 1 ); time_idx++ ) + { + mvr2r( &h_freq_domain_decorr_ap_state->decorr_buffer[2 * ( time_idx + 1 ) * max_band_decorr * num_channels], &h_freq_domain_decorr_ap_state->decorr_buffer[2 * (time_idx) *max_band_decorr * num_channels], 2 * max_band_decorr * num_channels ); + } + set_zero( &h_freq_domain_decorr_ap_state->decorr_buffer[2 * ( decorr_buffer_len - 1 ) * max_band_decorr * num_channels], 2 * max_band_decorr * num_channels ); + + /* calculate all pass */ + for ( split_bands_idx = 0; split_bands_idx < h_freq_domain_decorr_ap_params->num_split_frequency_bands; split_bands_idx++ ) + { + k_1 = h_freq_domain_decorr_ap_params->split_frequency_bands[split_bands_idx]; + k_2 = h_freq_domain_decorr_ap_params->split_frequency_bands[split_bands_idx + 1]; + num_bands = k_2 - k_1; + filter_length = h_freq_domain_decorr_ap_params->filter_length[split_bands_idx]; + pre_delay = h_freq_domain_decorr_ap_params->pre_delay[split_bands_idx]; + decorr_buffer_step = num_channels * max_band_decorr; + + for ( k = 0; k < num_bands; ++k ) + { + band_idx = k_1 + k; + + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + idx_filter = band_idx * ( h_freq_domain_decorr_ap_params->filter_length[0] * num_channels ) + ch_idx * h_freq_domain_decorr_ap_params->filter_length[0]; + filter_coeff_num_real = &h_freq_domain_decorr_ap_params->filter_coeff_num_real[idx_filter]; + filter_coeff_den_real = &h_freq_domain_decorr_ap_params->filter_coeff_den_real[idx_filter]; + decorr_buffer_start_ptr = &h_freq_domain_decorr_ap_state->decorr_buffer[2 * ( ch_idx * max_band_decorr + band_idx )]; + input_real = aux_buffer[2 * ( proto_index_dir[ch_idx] * max_band_decorr + band_idx )]; + input_imag = aux_buffer[2 * ( proto_index_dir[ch_idx] * max_band_decorr + band_idx ) + 1]; + + /* MA part of filter impulse response */ + for ( l = 0; l < filter_length; l++ ) + { + frame_ma[2 * l] = input_real * filter_coeff_num_real[l]; + frame_ma[2 * l + 1] = input_imag * filter_coeff_num_real[l]; + } + decorr_buffer_ptr = decorr_buffer_start_ptr + 2 * ( pre_delay - 1 ) * decorr_buffer_step; + + /*add MA part to state */ + decorr_buffer_ptr[0] += frame_ma[0]; + decorr_buffer_ptr[1] += frame_ma[1]; + + /*get values for AR part */ + filter_frame_real = decorr_buffer_ptr[0]; + filter_frame_imag = decorr_buffer_ptr[1]; + + decorr_buffer_ptr += 2 * decorr_buffer_step; + + for ( l = 1; l < filter_length; l++ ) + { + decorr_buffer_ptr[0] += frame_ma[2 * l] - filter_frame_real * filter_coeff_den_real[l]; + decorr_buffer_ptr[1] += frame_ma[2 * l + 1] - filter_frame_imag * filter_coeff_den_real[l]; + decorr_buffer_ptr += 2 * decorr_buffer_step; + } + } + } + } + + /*-----------------------------------------------------------------* + * onset/diffuse energy ratio conservation + *-----------------------------------------------------------------*/ + + if ( h_freq_domain_decorr_ap_params->use_ducker ) + { + /* compute direct power w/o onsets for the energy ratio, signal is still in the aux buffer */ + v_mult( aux_buffer, aux_buffer, aux_buffer, 2 * max_band_decorr * num_protos_dir ); + v_add_inc( &aux_buffer[0], 2, &aux_buffer[1], 2, direct_energy, 1, max_band_decorr * num_protos_dir ); + + /* calculate the power of the decorrelated signal */ + + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + v_mult( &frame_dec_f[2 * ch_idx * num_freq_bands], &frame_dec_f[2 * ch_idx * num_freq_bands], &aux_buffer[2 * ch_idx * max_band_decorr], 2 * max_band_decorr ); + v_add_inc( &aux_buffer[2 * ch_idx * max_band_decorr], 2, &aux_buffer[2 * ch_idx * max_band_decorr + 1], 2, &aux_buffer[ch_idx * max_band_decorr], 1, max_band_decorr ); + } + + /* smooth energies */ + v_multc( aux_buffer, 1.0f - DIRAC_DUCK_ALPHA, aux_buffer, num_channels * max_band_decorr ); + + v_multc( h_freq_domain_decorr_ap_state->reverb_energy_smooth, DIRAC_DUCK_ALPHA, h_freq_domain_decorr_ap_state->reverb_energy_smooth, num_channels * max_band_decorr ); + + v_add( aux_buffer, h_freq_domain_decorr_ap_state->reverb_energy_smooth, h_freq_domain_decorr_ap_state->reverb_energy_smooth, num_channels * max_band_decorr ); + + v_multc( direct_energy, 1.0f - DIRAC_DUCK_ALPHA, direct_energy, num_protos_dir * max_band_decorr ); + + v_multc( h_freq_domain_decorr_ap_state->direct_energy_smooth, DIRAC_DUCK_ALPHA, h_freq_domain_decorr_ap_state->direct_energy_smooth, num_protos_dir * max_band_decorr ); + + v_add( direct_energy, h_freq_domain_decorr_ap_state->direct_energy_smooth, h_freq_domain_decorr_ap_state->direct_energy_smooth, num_protos_dir * max_band_decorr ); + + for ( ch_idx = 0; ch_idx < num_channels; ch_idx++ ) + { + float *frame_dec_f_ptr = &frame_dec_f[ch_idx * 2 * num_freq_bands]; + int16_t cur_proto_index = proto_index_dir[ch_idx] * max_band_decorr; + int16_t cur_reverb_index = ch_idx * max_band_decorr; + float *reverb_energy_smooth_ptr = &h_freq_domain_decorr_ap_state->reverb_energy_smooth[cur_reverb_index]; + float *direct_energy_smooth_ptr = &h_freq_domain_decorr_ap_state->direct_energy_smooth[cur_proto_index]; + + for ( band_idx = 0; band_idx < max_band_decorr; band_idx++ ) + { + float duck_gain = 1.0f; + float direct_energy_loc = direct_energy_smooth_ptr[band_idx]; + float reverb_energy_loc = reverb_energy_smooth_ptr[band_idx]; + + if ( reverb_energy_loc > ( direct_energy_loc * DIRAC_DUCK_GAMMA ) ) + { + duck_gain = sqrtf( direct_energy_loc * DIRAC_DUCK_GAMMA / ( reverb_energy_loc + EPSILON ) ); + frame_dec_f_ptr[2 * band_idx] *= duck_gain; + frame_dec_f_ptr[2 * band_idx + 1] *= duck_gain; + } + else if ( direct_energy_loc > ( reverb_energy_loc * DIRAC_DUCK_GAMMA ) ) + { + duck_gain = sqrtf( direct_energy_loc / ( DIRAC_DUCK_GAMMA * reverb_energy_loc + EPSILON ) ); + if ( duck_gain > 2.0f ) + { + duck_gain = 2.0f; + } + frame_dec_f_ptr[2 * band_idx] *= duck_gain; + frame_dec_f_ptr[2 * band_idx + 1] *= duck_gain; + } + } + } + } + + /*-----------------------------------------------------------------* + * add back onsets + *-----------------------------------------------------------------*/ + + if ( h_freq_domain_decorr_ap_params->add_back_onsets_on == 1 ) + { + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + offset = proto_index_dir[ch_idx] * num_freq_bands; + + for ( k = 0; k < max_band_decorr; ++k ) + { + aux_buffer[2 * k] = ( 1.0f - onset_filter[offset + k] ) * input_frame_f[2 * offset + 2 * k]; + aux_buffer[2 * k + 1] = ( 1.0f - onset_filter[offset + k] ) * input_frame_f[2 * offset + 2 * k + 1]; + } + + v_add( &frame_dec_f[ch_idx * 2 * num_freq_bands], aux_buffer, &frame_dec_f[ch_idx * 2 * num_freq_bands], 2 * max_band_decorr ); + } + } + + /* avoid decorrelation above maximum frequency -> set to zero the remaining frequencies*/ + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + /* calc output indices */ + idx_in_out = 2 * ( ch_idx * num_freq_bands + h_freq_domain_decorr_ap_params->max_band_decorr ); + + /* copy to output signal */ + set_zero( &frame_dec_f[idx_in_out], 2 * ( num_freq_bands - h_freq_domain_decorr_ap_params->max_band_decorr ) ); + } + + } /*end of decorrelator*/ + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_decorr_close() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_decorr_close( + HANDLE_DIRAC_DECORR_PARAMS *ph_freq_domain_decorr_ap_params, + HANDLE_DIRAC_DECORR_STATE *ph_freq_domain_decorr_ap_state ) +{ + DIRAC_ONSET_DETECTION_STATE *dirac_onset_detection_state; + + /*-----------------------------------------------------------------* + * check input handles + *-----------------------------------------------------------------*/ + + if ( ph_freq_domain_decorr_ap_params == NULL || ph_freq_domain_decorr_ap_state == NULL ) + { +#ifdef DEBUGGING + assert( 0 && "Error: Closing decorrelation synthesis failed." ); +#endif + return; + } + + if ( *ph_freq_domain_decorr_ap_params == NULL || *ph_freq_domain_decorr_ap_state == NULL ) + { +#ifdef DEBUGGING + assert( 0 && "Error: Closing decorrelation synthesis failed." ); +#endif + return; + } + + /*-----------------------------------------------------------------* + * free onset filter arrays + *-----------------------------------------------------------------*/ + + dirac_onset_detection_state = &( *ph_freq_domain_decorr_ap_state )->h_onset_detection_power_state; + + if ( dirac_onset_detection_state->onset_detector_1 != NULL ) + { + count_free( dirac_onset_detection_state->onset_detector_1 ); + dirac_onset_detection_state->onset_detector_1 = NULL; + } + + if ( dirac_onset_detection_state->onset_detector_2 != NULL ) + { + count_free( dirac_onset_detection_state->onset_detector_2 ); + dirac_onset_detection_state->onset_detector_2 = NULL; + } + + /*-----------------------------------------------------------------* + * memory deallocation + *-----------------------------------------------------------------*/ + + /* free decorrelation buffer */ + if ( ( *ph_freq_domain_decorr_ap_state )->decorr_buffer != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_state )->decorr_buffer ); + ( *ph_freq_domain_decorr_ap_state )->decorr_buffer = NULL; + } + + /* free ducker smoothed direct energy buffer */ + if ( ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth ); + ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth = NULL; + } + + /* free ducker smoothed reverb energy buffer */ + if ( ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth ); + ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth = NULL; + } + + /* free pre-delay param buffer */ + if ( ( *ph_freq_domain_decorr_ap_params )->pre_delay != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_params )->pre_delay ); + ( *ph_freq_domain_decorr_ap_params )->pre_delay = NULL; + } + + /* free filter length param buffer */ + if ( ( *ph_freq_domain_decorr_ap_params )->filter_length != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_params )->filter_length ); + ( *ph_freq_domain_decorr_ap_params )->filter_length = NULL; + } + + /* free filter coeff param buffers */ + if ( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real ); + ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real = NULL; + } + + /* free pre-delay param buffer */ + if ( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real ); + ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real = NULL; + } + + /* free pre-delay param buffer */ + if ( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag ); + ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag = NULL; + } + + /* free pre-delay param buffer */ + if ( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real ); + ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real = NULL; + } + + /* free pre-delay param buffer */ + if ( ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands != NULL ) + { + count_free( ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands ); + ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands = NULL; + } + + /* free pointers to state and parameter structs */ + count_free( *ph_freq_domain_decorr_ap_params ); + *ph_freq_domain_decorr_ap_params = NULL; + + count_free( *ph_freq_domain_decorr_ap_state ); + *ph_freq_domain_decorr_ap_state = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * Local functions + *------------------------------------------------------------------------*/ + +/* get lattice coeffs with phase offset */ +static void get_lattice_coeffs( + const int16_t band_index, + const int16_t channel_index, + float *lattice_coeffs ) +{ + int16_t k; + + for ( k = 0; k < ap_filter_length[band_index]; k++ ) + { + float cur_lattice_coeff = ap_lattice_coeffs[band_index][channel_index * ap_filter_length[band_index] + k]; + lattice_coeffs[k] = cur_lattice_coeff; + } + + return; +} + + +/* convert lattice filter coeffs to all pass transfer function coeffs */ +static void lattice2allpass( + const int16_t filter_length, + const float *lattice_coeffs, + float *filter_coeffs_num_real, + float *filter_coeffs_den_real ) +{ + int16_t i, p; + float alpha_real[2][DIRAC_MAX_DECORR_FILTER_LEN + 1]; + float *alpha_real_p_old = &alpha_real[0][0]; + float *alpha_real_p = &alpha_real[1][0]; + float *tmp; + + for ( i = 0; i < 2; i++ ) + { + set_f( alpha_real[i], 0.0f, DIRAC_MAX_DECORR_FILTER_LEN + 1 ); + } + + alpha_real_p[0] = 1.0f; + alpha_real_p_old[0] = 1.0f; + + /* recursion */ + for ( p = 1; p < filter_length; p++ ) + { + alpha_real_p[p] = lattice_coeffs[( p - 1 )]; + + for ( i = 1; i < p; i++ ) + { + alpha_real_p[i] = alpha_real_p_old[i] + lattice_coeffs[( p - 1 )] * alpha_real_p_old[p - i]; + } + /* switch pointers */ + tmp = alpha_real_p_old; + alpha_real_p_old = alpha_real_p; + alpha_real_p = tmp; + } + + for ( i = 0; i < filter_length; i++ ) + { + filter_coeffs_den_real[i] = alpha_real_p_old[i]; + filter_coeffs_num_real[i] = alpha_real_p_old[filter_length - i - 1]; + } + + return; +} diff --git a/lib_dec/ivas_dirac_onsets_dec.c b/lib_dec/ivas_dirac_onsets_dec.c new file mode 100644 index 0000000000..67209cc052 --- /dev/null +++ b/lib_dec/ivas_dirac_onsets_dec.c @@ -0,0 +1,130 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_onset_detection_open() + * + * onset detection + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_onset_detection_open( + const int16_t num_protos_diff, + const int16_t num_freq_bands, + const int16_t max_band_decorr, + DIRAC_ONSET_DETECTION_PARAMS *ph_dirac_onset_detection_params, + DIRAC_ONSET_DETECTION_STATE *ph_dirac_onset_detection_state ) +{ + /* pointers to structs for allocation */ + DIRAC_ONSET_DETECTION_PARAMS *dirac_onset_detection_params = ph_dirac_onset_detection_params; + DIRAC_ONSET_DETECTION_STATE *dirac_onset_detection_state = ph_dirac_onset_detection_state; + + /* check / set input parameters */ + dirac_onset_detection_params->num_freq_bands = num_freq_bands; + assert( dirac_onset_detection_params->num_freq_bands > 0 && "Error: Number of frequency bands <= 0!" ); + + dirac_onset_detection_params->max_band_decorr = max_band_decorr; + + /* memory allocation */ + dirac_onset_detection_state->onset_detector_1 = (float *) count_malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ); + dirac_onset_detection_state->onset_detector_2 = (float *) count_malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ); + + /* init to zero */ + set_zero( dirac_onset_detection_state->onset_detector_1, num_protos_diff * dirac_onset_detection_params->max_band_decorr ); + set_zero( dirac_onset_detection_state->onset_detector_2, num_protos_diff * dirac_onset_detection_params->max_band_decorr ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_onset_detection_process() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_onset_detection_process( + const float *input_power_f, + float *onset_filter, + const int16_t num_protos_diff, + DIRAC_ONSET_DETECTION_PARAMS h_dirac_onset_detection_params, + DIRAC_ONSET_DETECTION_STATE h_dirac_onset_detection_state ) +{ + int16_t b, ch_idx; + float tmp_f; + float *p_onset_detector_1, *p_onset_detector_2; + + p_onset_detector_1 = h_dirac_onset_detection_state.onset_detector_1; + p_onset_detector_2 = h_dirac_onset_detection_state.onset_detector_2; + + for ( ch_idx = 0; ch_idx < num_protos_diff; ch_idx++ ) + { + for ( b = 0; b < h_dirac_onset_detection_params.max_band_decorr; b++ ) + { + /*detector 1: envelope max*/ + *p_onset_detector_1 *= DIRAC_ONSET_ALPHA; + *p_onset_detector_1 = ( *p_onset_detector_1 > *input_power_f ) ? *p_onset_detector_1 : *input_power_f; + + /*detector 2: envelope min*/ + *p_onset_detector_2 = DIRAC_ONSET_BETA * *p_onset_detector_2 + ( 1.f - DIRAC_ONSET_BETA ) * *p_onset_detector_1; + *p_onset_detector_2 = ( *p_onset_detector_2 < *p_onset_detector_1 ) ? *p_onset_detector_2 : *p_onset_detector_1; + + /*onset filter limited between 0 and 1*/ + tmp_f = ( DIRAC_ONSET_GAIN * *p_onset_detector_2 ) / ( *p_onset_detector_1 + EPSILON ); + tmp_f = ( tmp_f < 0.f ) ? 0.f : tmp_f; + tmp_f = ( tmp_f > 1.f ) ? 1.f : tmp_f; + onset_filter[b] = tmp_f; + + input_power_f++; + p_onset_detector_1++; + p_onset_detector_2++; + } + + onset_filter += h_dirac_onset_detection_params.num_freq_bands; + } + + return; +} diff --git a/lib_dec/ivas_dirac_output_synthesis_cov.c b/lib_dec/ivas_dirac_output_synthesis_cov.c new file mode 100644 index 0000000000..decca34452 --- /dev/null +++ b/lib_dec/ivas_dirac_output_synthesis_cov.c @@ -0,0 +1,1053 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include +#include +#include "options.h" +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "rom_dec.h" + + +/*-------------------------------------------------------------------* + * ivas_dirac_dec_output_synthesis_cov_open() + * + * Sets up the state and parameters for the Covariance Synthesis + *-------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_cov_open( + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i/o: handle for the covariance synthesis parameters */ + DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: hanlde for the covariance synthesis state */ + const int16_t max_band_decorr, /* i : uppermost frequency band where decorrelation is applied */ + const int16_t interp_length, /* i : length for interpolating the mixing matrices in time slots */ + const int16_t num_param_bands, /* i : number of parameter bands */ + const int16_t num_param_bands_residual, /* i : number of parameter bands with a residual mixing matrix (i.e. decorrelation */ + const int16_t nchan_in, /* i : number of input (transport) channels */ + const int16_t nchan_out, /* i : number of output channels */ + const float *proto_matrix /* i : the prototype (upmix) matrix (only used if mode == 1) */ +) +{ + int16_t idx; + + h_dirac_output_synthesis_params->max_band_decorr = max_band_decorr; + + /*-----------------------------------------------------------------* + * memory allocation + *-----------------------------------------------------------------*/ + + /* buffer length and interpolator */ + h_dirac_output_synthesis_params->alpha_synthesis = NULL; + h_dirac_output_synthesis_params->proto_matrix = (float *) count_malloc( nchan_out * nchan_in * sizeof( float ) ); + + /* cov buffers */ + for ( idx = 0; idx < num_param_bands; idx++ ) + { + + h_dirac_output_synthesis_state->cx_old[idx] = (float *) count_malloc( nchan_in * nchan_in * sizeof( float ) ); + h_dirac_output_synthesis_state->cy_old[idx] = (float *) count_malloc( nchan_out * nchan_out * sizeof( float ) ); + h_dirac_output_synthesis_state->mixing_matrix_old[idx] = (float *) count_malloc( nchan_out * nchan_in * sizeof( float ) ); + set_zero( h_dirac_output_synthesis_state->cx_old[idx], nchan_in * nchan_in ); + set_zero( h_dirac_output_synthesis_state->cy_old[idx], nchan_out * nchan_out ); + set_zero( h_dirac_output_synthesis_state->mixing_matrix_old[idx], nchan_out * nchan_in ); + } + for ( ; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + h_dirac_output_synthesis_state->cx_old[idx] = NULL; + h_dirac_output_synthesis_state->cy_old[idx] = NULL; + h_dirac_output_synthesis_state->mixing_matrix_old[idx] = NULL; + } + for ( idx = 0; idx < num_param_bands_residual; idx++ ) + { + h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = (float *) count_malloc( nchan_out * nchan_out * sizeof( float ) ); + set_zero( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx], nchan_out * nchan_out ); + } + for ( ; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = NULL; + } + + /*-----------------------------------------------------------------* + * prepare processing parameters + *-----------------------------------------------------------------*/ + + /* compute interpolator */ + h_dirac_output_synthesis_params->interpolator = (float *) count_malloc( interp_length * sizeof( float ) ); + for ( idx = 1; idx <= interp_length; ++idx ) + { + h_dirac_output_synthesis_params->interpolator[idx - 1] = (float) idx / (float) interp_length; + } + + mvr2r( proto_matrix, h_dirac_output_synthesis_params->proto_matrix, nchan_in * nchan_out ); + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_dirac_dec_output_synthesis_cov_init() + * + * initialize the states for the covariance synthesis + *-------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_cov_init( + DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: pointer to the state of the covariance synthesis */ + const int16_t nchan_in, /* i : number of input (tranport) channels */ + const int16_t nchan_out, /* i : number of output channels */ + const int16_t n_param_bands, /* i : number of total parameter bands */ + const int16_t n_param_bands_res /* i : number of parameter bands with a residual mixing matrix (i.e. decorrelation */ +) +{ + + int16_t idx; + + /* initialize buffers */ + for ( idx = 0; idx < n_param_bands; idx++ ) + { + set_zero( h_dirac_output_synthesis_state->cx_old[idx], nchan_in * nchan_in ); + set_zero( h_dirac_output_synthesis_state->cy_old[idx], nchan_out * nchan_out ); + set_zero( h_dirac_output_synthesis_state->mixing_matrix_old[idx], nchan_out * nchan_in ); + } + + for ( idx = 0; idx < n_param_bands_res; idx++ ) + { + set_zero( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx], nchan_out * nchan_out ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_dirac_dec_output_synthesis_cov_close() + * + * deallocate dynamic memory in the covariance synthesis state + *-------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_cov_close( + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i : handle for the covariance synthesis parameters */ + DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state /* i/o: handle for the covariance synthesis state */ +) +{ + + int16_t idx; + + /*-----------------------------------------------------------------* + * memory deallocation + *-----------------------------------------------------------------*/ + + /* free interpolator */ + if ( h_dirac_output_synthesis_params->interpolator != NULL ) + { + count_free( h_dirac_output_synthesis_params->interpolator ); + h_dirac_output_synthesis_params->interpolator = NULL; + } + + /* free alpha */ + if ( h_dirac_output_synthesis_params->alpha_synthesis != NULL ) + { + count_free( h_dirac_output_synthesis_params->alpha_synthesis ); + h_dirac_output_synthesis_params->alpha_synthesis = NULL; + } + + /* free proto_matrix */ + if ( h_dirac_output_synthesis_params->proto_matrix != NULL ) + { + count_free( h_dirac_output_synthesis_params->proto_matrix ); + h_dirac_output_synthesis_params->proto_matrix = NULL; + } + + /* free cov buffers */ + for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + if ( h_dirac_output_synthesis_state->cx_old[idx] != NULL ) + { + count_free( h_dirac_output_synthesis_state->cx_old[idx] ); + h_dirac_output_synthesis_state->cx_old[idx] = NULL; + } + + if ( h_dirac_output_synthesis_state->cy_old[idx] != NULL ) + { + count_free( h_dirac_output_synthesis_state->cy_old[idx] ); + h_dirac_output_synthesis_state->cy_old[idx] = NULL; + } + + if ( h_dirac_output_synthesis_state->mixing_matrix_old[idx] != NULL ) + { + count_free( h_dirac_output_synthesis_state->mixing_matrix_old[idx] ); + h_dirac_output_synthesis_state->mixing_matrix_old[idx] = NULL; + } + + if ( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] != NULL ) + { + count_free( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] ); + h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = NULL; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot() + * + * collect the multi channel input covariance for one filter bank time slot + *-------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot( + float RealBuffer[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (real part) */ + float ImagBuffer[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (imaginary part */ + float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (real part) */ + float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (imaginary part) */ + PARAM_MC_DEC_HANDLE hParamMC, /* i : handle to Parametric MC state */ + const int16_t nchan_in, /* i : number of input channels */ + const int16_t idx_slot /* i : index of the slot to be added to the input covariance */ +) +{ + int16_t param_band, band_idx, ch_idx; + int16_t brange[2]; + float real_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS]; + float imag_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS]; + float real_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float imag_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + + /* estimate input covariance */ + for ( param_band = 0; param_band < hParamMC->num_param_bands_synth; param_band++ ) + { + /* Already stack here instead of in the process_subframe */ + + /* collect input frame */ + int16_t num_bands; + brange[0] = hParamMC->band_grouping[param_band]; + brange[1] = hParamMC->band_grouping[param_band + 1]; + num_bands = brange[1] - brange[0]; + + for ( band_idx = 0; band_idx < num_bands; band_idx++ ) + { + int16_t band = brange[0] + band_idx; + for ( ch_idx = 0; ch_idx < nchan_in; ch_idx++ ) + { + real_in_buffer[band_idx + num_bands * ch_idx] = RealBuffer[ch_idx][idx_slot][band]; + imag_in_buffer[band_idx + num_bands * ch_idx] = ImagBuffer[ch_idx][idx_slot][band]; + } + } + + cmplx_matrix_square( real_in_buffer, imag_in_buffer, num_bands, nchan_in, real_buffer, imag_buffer ); + + v_add( cx[param_band], real_buffer, cx[param_band], nchan_in * nchan_in ); + + v_add( cx_imag[param_band], imag_buffer, cx_imag[param_band], nchan_in * nchan_in ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot() + * + * synthesize one filter bank slot of multi channel output filter bank + * samples with the covariance synthesis + *-------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot( + float Cldfb_RealBuffer_in[][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (real part) */ + float Cldfb_ImagBuffer_in[][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : input channel filter bank samples (imaginary part) */ + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : output channel filter bank samples (real part) */ + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : output channel filter bank samples (imaginary part) */ + float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], /* i : parameter band wise mixing matrices (direct part) */ + float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], /* i : parameter band wise mixing matrices (residual part) */ + const uint16_t slot_idx_sfr, /* i : time slot index for the current slot within the current subframe */ + const uint16_t slot_idx_tot, /* i : time slot index for the current slot within the frame */ + const int16_t nX, /* i : number of input channels */ + const int16_t nY, /* i : number of output channels */ + PARAM_MC_DEC_HANDLE hParamMC /* i : handle to the Parametric MC decoder state */ +) +{ + int16_t param_band_idx, band, ch_idx; + float mixing_matrix_smooth[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float mixing_matrix_res_smooth[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float mixing_matrix_buffer[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + int16_t have_residual; + float input_f_real[PARAM_MC_MAX_TRANSPORT_CHANS]; + float input_f_imag[PARAM_MC_MAX_TRANSPORT_CHANS]; + float output_f_real[MAX_CICP_CHANNELS]; + float output_f_imag[MAX_CICP_CHANNELS]; + float diff_f_real[MAX_CICP_CHANNELS]; + float diff_f_imag[MAX_CICP_CHANNELS]; + int16_t brange[2]; + DIRAC_OUTPUT_SYNTHESIS_COV_STATE h_synthesis_state = hParamMC->h_output_synthesis_cov_state; + + set_zero( input_f_real, PARAM_MC_MAX_TRANSPORT_CHANS ); + set_zero( input_f_imag, PARAM_MC_MAX_TRANSPORT_CHANS ); + set_zero( output_f_real, MAX_CICP_CHANNELS ); + set_zero( output_f_imag, MAX_CICP_CHANNELS ); + set_zero( diff_f_real, MAX_CICP_CHANNELS ); + set_zero( diff_f_imag, MAX_CICP_CHANNELS ); + + for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) + { + /* final mixing */ + have_residual = 0; + brange[0] = hParamMC->band_grouping[param_band_idx]; + brange[1] = hParamMC->band_grouping[param_band_idx + 1]; + + if ( brange[0] < hParamMC->h_output_synthesis_params.max_band_decorr ) + { + have_residual = 1; + } + + /* mixing matrix interpolation*/ + v_multc( mixing_matrix[param_band_idx], hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_smooth, nY * nX ); + v_multc( h_synthesis_state.mixing_matrix_old[param_band_idx], 1.0f - hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_buffer, nY * nX ); + v_add( mixing_matrix_smooth, mixing_matrix_buffer, mixing_matrix_smooth, nY * nX ); + + if ( have_residual ) + { + /* residual mixing matrix interpolation*/ + v_multc( mixing_matrix_res[param_band_idx], hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_res_smooth, nY * nY ); + v_multc( h_synthesis_state.mixing_matrix_res_old[param_band_idx], 1.0f - hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_buffer, nY * nY ); + v_add( mixing_matrix_res_smooth, mixing_matrix_buffer, mixing_matrix_res_smooth, nY * nY ); + } + + for ( band = brange[0]; band < brange[1]; band++ ) + { + assert( band >= 0 ); + + if ( have_residual ) + { + /* collect diffuse prototypes */ + assert( band < hParamMC->h_output_synthesis_params.max_band_decorr ); + for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) + { + diff_f_real[ch_idx] = Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band]; + diff_f_imag[ch_idx] = Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band]; + } + + /* apply residual mixing */ + matrix_product( mixing_matrix_res_smooth, nY, nY, 0, diff_f_real, nY, 1, 0, output_f_real ); + matrix_product( mixing_matrix_res_smooth, nY, nY, 0, diff_f_imag, nY, 1, 0, output_f_imag ); + + for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) + { + Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band] = output_f_real[ch_idx]; + Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band] = output_f_imag[ch_idx]; + } + } + else + { + for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) + { + Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band] = 0.0f; + Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band] = 0.0f; + } + } + + /* collect input signals, still in cldfb buffers */ + for ( ch_idx = 0; ch_idx < nX; ch_idx++ ) + { + input_f_real[ch_idx] = Cldfb_RealBuffer_in[ch_idx][slot_idx_tot][band]; + input_f_imag[ch_idx] = Cldfb_ImagBuffer_in[ch_idx][slot_idx_tot][band]; + } + + /* apply mixing matrix */ + matrix_product( mixing_matrix_smooth, nY, nX, 0, input_f_real, nX, 1, 0, output_f_real ); + matrix_product( mixing_matrix_smooth, nY, nX, 0, input_f_imag, nX, 1, 0, output_f_imag ); + + /* collect output */ + for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) + { + Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band] += output_f_real[ch_idx]; + Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band] += output_f_imag[ch_idx]; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * computeMixingMatrices() + * + * compute a mixing matrix using the convariance synthesis approach + *-------------------------------------------------------------------*/ + +int16_t computeMixingMatrices( + const int16_t num_inputs, /* i : number of input channels */ + const int16_t num_outputs, /* i : number of output channels */ + const float *Cx, /* i : input channel covariance matrix */ + const float *Cy, /* i : target covariance matrix */ + const float *Q, /* i : prototype matrix (usually a upmix matrix) */ + const int16_t energy_compensation_flag, /* i : flag indicating that the energy compensation should be performed (i.e. no residual mixing matrix will follow) */ + const float reg_Sx, /* i : regularization factor for the input channel singular values */ + const float reg_ghat, /* i : regularization factor for the normalization matrix */ + float *mixing_matrix, /* o : resulting mixing matrix */ + float *Cr /* o : residual covariance matrix */ +) +{ + int16_t i, j; + int16_t out = EXIT_SUCCESS; + int16_t nL, nC; + int16_t lengthCx = num_inputs; + int16_t lengthCy = num_outputs; + float *Cr_p, *Cy_tilde_p; + const float *Cy_p; + float *adj; + float limit; + float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float svd_s_buffer[MAX_OUTPUT_CHANNELS]; + float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float Kx[MAX_TRANSPORT_CHANNELS * MAX_TRANSPORT_CHANNELS]; + float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float Kx_reg_inv[MAX_TRANSPORT_CHANNELS * MAX_TRANSPORT_CHANNELS]; + float Q_Cx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; + float G_hat[MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + + wmops_sub_start( "dirac_cov_mix_mat" ); + + set_zero( svd_s_buffer, MAX_OUTPUT_CHANNELS ); + for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) + { + set_zero( svd_in_buffer[i], MAX_OUTPUT_CHANNELS ); + set_zero( svd_u_buffer[i], MAX_OUTPUT_CHANNELS ); + set_zero( svd_v_buffer[i], MAX_OUTPUT_CHANNELS ); + } + + /*-----------------------------------------------------------------* + * Decomposition of Cy + *-----------------------------------------------------------------*/ + + /* Processing the SVD */ + mat2svdMat( Cy, svd_in_buffer, lengthCy, lengthCy, 0 ); + + svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCy, lengthCy ); + + /* Computing Ky */ + for ( i = 0; i < lengthCy; ++i ) + { + for ( j = 0; j < lengthCy; ++j ) + { + Ky[i + j * lengthCy] = svd_u_buffer[i][j] * sqrtf( svd_s_buffer[j] ); + } + } + + /*-----------------------------------------------------------------* + * Decomposition of Cx + *-----------------------------------------------------------------*/ + + /* Processing the SVD */ + mat2svdMat( Cx, svd_in_buffer, lengthCx, lengthCx, 0 ); + + svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCx, lengthCx ); + + /* Computing Kx */ + for ( i = 0; i < lengthCx; ++i ) + { + for ( j = 0; j < lengthCx; ++j ) + { + Kx[i + j * lengthCx] = svd_u_buffer[i][j] * sqrtf( svd_s_buffer[j] ); + } + } + + /* Sx = sqrt(Sx) */ + for ( i = 0; i < lengthCx; ++i ) + { + svd_s_buffer[i] = sqrtf( svd_s_buffer[i] ); + } + + /*-----------------------------------------------------------------* + * Regularization of Sx + *-----------------------------------------------------------------*/ + + maximum( svd_s_buffer, lengthCx, &limit ); + limit = limit * reg_Sx + EPSILON; + + for ( i = 0; i < lengthCx; ++i ) + { + svd_s_buffer[i] = ( ( svd_s_buffer[i] > limit ) ? svd_s_buffer[i] : limit ); + } + + limit = 0.0f; + + /*-----------------------------------------------------------------* + * regularized Kx-1 + *-----------------------------------------------------------------*/ + + for ( i = 0; i < lengthCx; ++i ) + { + float reg_fac = ( 1.0f / svd_s_buffer[i] ); + + for ( j = 0; j < lengthCx; ++j ) + { + Kx_reg_inv[i + j * lengthCx] = reg_fac * svd_u_buffer[j][i]; + } + } + + /*-----------------------------------------------------------------* + * normalization matrix G hat + *-----------------------------------------------------------------*/ + + /* Computing Q*Cx*Q' */ + matrix_product( Q, lengthCy, lengthCx, 0, Cx, lengthCx, lengthCx, 0, Q_Cx ); + + matrix_product_diag( Q_Cx, lengthCy, lengthCx, 0, Q, lengthCy, lengthCx, 1, Cy_hat_diag ); + + /* Computing Cy_hat_diag */ + for ( i = 0; i < lengthCy; ++i ) + { + if ( Cy_hat_diag[i] > limit ) + { + limit = Cy_hat_diag[i]; + } + } + + limit = limit * reg_ghat + EPSILON; + + /* Computing G_hat */ + for ( i = 0; i < lengthCy; ++i ) + { + if ( limit > Cy_hat_diag[i] ) /* Computing Cy_hat_diag = max(Cy_hat_diag,limit) */ + { + Cy_hat_diag[i] = limit; + } + + G_hat[i] = sqrtf( Cy[i + i * lengthCy] / Cy_hat_diag[i] ); + } + + /*-----------------------------------------------------------------* + * Formulate optimal P + *-----------------------------------------------------------------*/ + + /* Computing the input matrix Kx'*Q'*G_hat'*Ky */ + matrix_product( Kx, lengthCx, lengthCx, 1, Q, lengthCy, lengthCx, 1, mat_mult_buffer1 ); + matrix_diag_product( mat_mult_buffer1, lengthCx, lengthCy, 0, G_hat, lengthCy, mat_mult_buffer2 ); + matrix_product( mat_mult_buffer2, lengthCx, lengthCy, 0, Ky, lengthCy, lengthCy, 0, mat_mult_buffer1 ); + + if ( lengthCx < lengthCy ) + { + mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, lengthCy, 1 ); + + nL = lengthCy; + nC = lengthCx; + + svd( svd_in_buffer, svd_v_buffer, svd_s_buffer, svd_u_buffer, nL, nC ); + } + else + { + mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, lengthCy, 0 ); + + nL = lengthCx; + nC = lengthCy; + + svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, nL, nC ); + } + + /* Actually Processing P */ + + /* can be skipped: lambda is always column-truncated identity matrix, so this operation just + truncates V to num_input_channel columns */ + + svdMat2mat( svd_v_buffer, mat_mult_buffer1, lengthCy, lengthCx ); + svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); + + matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, + mat_mult_buffer2, lengthCx, lengthCx, 1, + mat_mult_buffer3 ); + + /************************ Formulate M **********************/ + + matrix_product( Ky, lengthCy, lengthCy, 0, mat_mult_buffer3, lengthCy, lengthCx, 0, mat_mult_buffer1 ); + matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, Kx_reg_inv, lengthCx, lengthCx, 0, mixing_matrix ); + + /*-----------------------------------------------------------------* + * Formulate Cr + *-----------------------------------------------------------------*/ + + /* Compute Cy_tilde = M*Cx*M' */ + matrix_product( mixing_matrix, lengthCy, lengthCx, 0, Cx, lengthCx, lengthCx, 0, mat_mult_buffer1 ); + matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, mixing_matrix, lengthCy, lengthCx, 1, mat_mult_buffer2 ); + + /* Compute Cr = Cy - Cy_tilde */ + Cr_p = Cr; + Cy_p = Cy; + Cy_tilde_p = mat_mult_buffer2; + for ( i = 0; i < lengthCy; ++i ) + { + for ( j = 0; j < lengthCy; ++j ) + { + *( Cr_p++ ) = *( Cy_p++ ) - *( Cy_tilde_p++ ); + } + + /* Avoid Meaningless negative main diagonal elements */ + if ( Cr[i + i * lengthCy] < 0.0f ) + { + Cr[i + i * lengthCy] = 0.0f; + } + } + + /*-----------------------------------------------------------------* + * Energy Compensation + *-----------------------------------------------------------------*/ + + if ( energy_compensation_flag == 1 ) + { + adj = svd_s_buffer; + Cy_tilde_p = mat_mult_buffer2; + for ( i = 0; i < lengthCy; ++i ) + { + /* Avoid correction for very small energies, + main diagonal elements of Cy_tilde_p may be negative */ + if ( Cy_tilde_p[i + i * lengthCy] < 0.0f ) + { + adj[i] = 1.0f; + } + else + { + adj[i] = sqrtf( Cy[i + lengthCy * i] / ( Cy_tilde_p[i + i * lengthCy] + EPSILON ) ); + } + + if ( adj[i] > 4.0f ) + { + adj[i] = 4.0f; + } + } + + diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); + + mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); + } + wmops_sub_end(); + + return out; +} + + +/*-------------------------------------------------------------------* + * computeMixingMatricesResidual() + * + * compute a residual mixing matrix using the covariance synthesis approach + *-------------------------------------------------------------------*/ + +int16_t computeMixingMatricesResidual( + const int16_t num_outputs, /* i : number of output channels */ + const float *Cx, /* i : vector containing the diagonal diffuse prototype covariance */ + const float *Cy, /* i : matrix containing the missing cov (Cr from computeMixingMatrices()) */ + const float reg_Sx, /* i : regularization factor for the input channel singular values */ + const float reg_ghat, /* i : regularization factor for the normalization matrix */ + float *mixing_matrix /* o : resulting residual mixing matrix */ +) +{ + int16_t i, j; + int16_t out = EXIT_SUCCESS; + int16_t lengthCx = num_outputs; + int16_t lengthCy = num_outputs; + float *adj; + float limit; + float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float svd_s_buffer[MAX_OUTPUT_CHANNELS]; + float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float Kx[MAX_OUTPUT_CHANNELS]; + float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float Kx_reg_inv[MAX_OUTPUT_CHANNELS]; + float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; + float G_hat[MAX_OUTPUT_CHANNELS]; + float Cy_tilde[MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + + wmops_sub_start( "dirac_cov_mix_mat_r" ); + + /*-----------------------------------------------------------------* + * Decomposition of Cy + *-----------------------------------------------------------------*/ + + /* Processing the SVD */ + + /* linear array to svd buffer */ + mat2svdMat( Cy, svd_in_buffer, lengthCy, lengthCy, 0 ); + + svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCy, lengthCy ); + + /* Computing Ky */ + for ( i = 0; i < lengthCy; ++i ) + { + for ( j = 0; j < lengthCy; ++j ) + { + Ky[i + j * lengthCy] = svd_u_buffer[i][j] * sqrtf( svd_s_buffer[j] ); + } + } + + /*-----------------------------------------------------------------* + * Decomposition of Cx + *-----------------------------------------------------------------*/ + + /* Processing the SVD of Cx*/ + /* Cx is a diagonal matrix, so SVD would lead to the sorted diagonal as S and u + * would be just indicating the sorting index, so go straight to Kx as the + * square root of the diagonal of Cx */ + + /* Computing Kx */ + for ( i = 0; i < lengthCx; ++i ) + { + Kx[i] = sqrtf( Cx[i] ); + } + + /*-----------------------------------------------------------------* + * Regularization of Sx + *-----------------------------------------------------------------*/ + + maximum( Kx, lengthCx, &limit ); + limit = limit * reg_Sx + EPSILON; + + for ( i = 0; i < lengthCx; ++i ) + { + float reg_fac = ( 1.0f / ( ( Kx[i] > limit ) ? Kx[i] : limit ) ); + Kx_reg_inv[i] = reg_fac; + } + + limit = 0.0f; + + /*-----------------------------------------------------------------* + * regularized Kx-1 + *-----------------------------------------------------------------*/ + + /*-----------------------------------------------------------------* + * normalization matrix G hat + *-----------------------------------------------------------------*/ + + /* Computing Cy_hat_diag */ + mvr2r( Cx, Cy_hat_diag, num_outputs ); + + for ( i = 0; i < lengthCy; ++i ) + { + if ( Cy_hat_diag[i] > limit ) + { + limit = Cy_hat_diag[i]; + } + } + + limit = limit * reg_ghat + EPSILON; + + /* Computing G_hat */ + for ( i = 0; i < lengthCy; ++i ) + { + if ( limit > Cy_hat_diag[i] ) /* Computing Cy_hat_diag = max(Cy_hat_diag,limit) */ + { + Cy_hat_diag[i] = limit; + } + G_hat[i] = sqrtf( Cy[i + i * lengthCy] / Cy_hat_diag[i] ); + } + + /*-----------------------------------------------------------------* + * Formulate optimal P + *-----------------------------------------------------------------*/ + + for ( i = 0; i < num_outputs; i++ ) + { + Kx[i] *= G_hat[i]; + } + + for ( i = 0; i < num_outputs; i++ ) + { + float fac = Kx[i]; + + for ( j = 0; j < num_outputs; j++ ) + { + mat_mult_buffer1[i + j * num_outputs] = Ky[i + j * num_outputs] * fac; + } + } + + mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, lengthCy, 0 ); + + svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCx, lengthCy ); + + /* Actually Processing P */ + svdMat2mat( svd_v_buffer, mat_mult_buffer1, lengthCy, lengthCx ); + svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); + + matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, + mat_mult_buffer2, lengthCx, lengthCx, 1, + mat_mult_buffer3 ); + + /*-----------------------------------------------------------------* + * Formulate M + *-----------------------------------------------------------------*/ + + matrix_product( Ky, lengthCy, lengthCy, 0, mat_mult_buffer3, lengthCy, lengthCx, 0, mat_mult_buffer1 ); + + for ( i = 0; i < num_outputs; i++ ) + { + float fac = Kx_reg_inv[i]; + + for ( j = 0; j < num_outputs; j++ ) + { + mixing_matrix[j + i * num_outputs] = mat_mult_buffer1[j + i * num_outputs] * fac; + } + } + + /*-----------------------------------------------------------------* + * Formulate Cr + *-----------------------------------------------------------------*/ + + /* Compute Cy_tilde = M*Cx*M' */ + matrix_diag_product( mixing_matrix, lengthCy, lengthCx, 0, Cx, lengthCx, mat_mult_buffer1 ); + + matrix_product_diag( mat_mult_buffer1, lengthCy, lengthCx, 0, mixing_matrix, lengthCy, lengthCx, 1, Cy_tilde ); + + /*-----------------------------------------------------------------* + * Energy Compensation + *-----------------------------------------------------------------*/ + + adj = svd_s_buffer; + + for ( i = 0; i < lengthCy; ++i ) + { + adj[i] = sqrtf( Cy[i + lengthCy * i] / ( Cy_tilde[i] + EPSILON ) ); + if ( adj[i] > 4.0f ) + { + adj[i] = 4.0f; + } + } + + diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); + + mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); + + wmops_sub_end(); + + return out; +} + + +/*-------------------------------------------------------------------* + * computeMixingMatricesISM() + * + * + *-------------------------------------------------------------------*/ + +int16_t computeMixingMatricesISM( + const int16_t num_inputs, + const int16_t num_responses, + const int16_t num_outputs, + const float *responses, + const float *ener, + const float *Cx_diag, + const float *Cy_diag, + const float *Q, + const int16_t energy_compensation_flag, + const float reg_Sx, + const float reg_ghat, + float *mixing_matrix ) +{ + int16_t i, out; + int16_t lengthCx, lengthCy; + float *Cy_tilde_p; + float *adj; + float limit; + float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float svd_s_buffer[MAX_OUTPUT_CHANNELS]; + float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; + float Kx[MAX_TRANSPORT_CHANNELS]; + float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float Kx_reg_inv[MAX_TRANSPORT_CHANNELS]; + float Q_Cx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; + float G_hat[MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + int16_t nL, nC; + + wmops_sub_start( "dirac_cov_mix_mat" ); + + out = EXIT_SUCCESS; + lengthCx = num_inputs; + lengthCy = num_outputs; + + set_zero( svd_s_buffer, MAX_OUTPUT_CHANNELS ); + for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) + { + set_zero( svd_in_buffer[i], MAX_OUTPUT_CHANNELS ); + set_zero( svd_u_buffer[i], MAX_OUTPUT_CHANNELS ); + set_zero( svd_v_buffer[i], MAX_OUTPUT_CHANNELS ); + } + + /* Decomposition of Cy = Ky*Ky' */ + /* Ky = responses*diag(ener) */ + matrix_diag_product( responses, lengthCy, num_responses, 0, ener, num_responses, Ky ); + + /* Decomposition of Cx -> Computing Kx */ + v_sqrt( Cx_diag, Kx, lengthCx ); + + /* Regularization of Sx */ + maximum( Kx, lengthCx, &limit ); + limit = limit * reg_Sx + EPSILON; + + for ( i = 0; i < lengthCx; ++i ) + { + svd_s_buffer[i] = ( ( Kx[i] > limit ) ? Kx[i] : limit ); + } + + limit = 0.0f; + + /* regularized Kx-1 */ + + for ( i = 0; i < lengthCx; ++i ) + { + float reg_fac = ( 1.0f / svd_s_buffer[i] ); + Kx_reg_inv[i] = reg_fac; + } + + /************************ normalization matrix G hat **********************/ + + /* Computing Q*Cx*Q' */ + matrix_diag_product( Q, lengthCy, lengthCx, 0, Cx_diag, lengthCx, Q_Cx ); + matrix_product_diag( Q_Cx, lengthCy, lengthCx, 0, Q, lengthCy, lengthCx, 1, Cy_hat_diag ); + + /* Computing Cy_hat_diag */ + for ( i = 0; i < lengthCy; ++i ) + { + if ( Cy_hat_diag[i] > limit ) + { + limit = Cy_hat_diag[i]; + } + } + + + limit = limit * reg_ghat + EPSILON; + + /* Computing G_hat */ + for ( i = 0; i < lengthCy; ++i ) + { + if ( limit > Cy_hat_diag[i] ) /* Computing Cy_hat_diag = max(Cy_hat_diag,limit) */ + { + Cy_hat_diag[i] = limit; + } + G_hat[i] = sqrtf( Cy_diag[i] / Cy_hat_diag[i] ); + } + + /************************ Formulate optimal P **********************/ + + /* Computing the input matrix Kx'*Q'*G_hat'*Ky */ + diag_matrix_product( Kx, lengthCx, Q, lengthCy, lengthCx, 1, mat_mult_buffer1 ); + matrix_diag_product( mat_mult_buffer1, lengthCx, lengthCy, 0, G_hat, lengthCy, mat_mult_buffer2 ); + matrix_product( mat_mult_buffer2, lengthCx, lengthCy, 0, Ky, lengthCy, num_responses, 0, mat_mult_buffer1 ); + + if ( lengthCx < num_responses ) + { + mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 1 ); + nL = num_responses; + nC = lengthCx; + svd( svd_in_buffer, svd_v_buffer, svd_s_buffer, svd_u_buffer, nL, nC ); + } + else + { + mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 0 ); + nL = lengthCx; + nC = num_responses; + svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, nL, nC ); + } + + /* Actually Processing P */ + + /* can be skipped: lambda is always column-truncated identity matrix, so this operation just truncates V to num_input_channel columns */ + svdMat2mat( svd_v_buffer, mat_mult_buffer1, num_responses, lengthCx ); + svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); + + matrix_product( mat_mult_buffer1, num_responses, lengthCx, 0, mat_mult_buffer2, lengthCx, lengthCx, 1, mat_mult_buffer3 ); + + /************************ Formulate M **********************/ + + matrix_product( Ky, lengthCy, num_responses, 0, mat_mult_buffer3, num_responses, lengthCx, 0, mat_mult_buffer1 ); + + matrix_diag_product( mat_mult_buffer1, lengthCy, lengthCx, 0, Kx_reg_inv, lengthCx, mixing_matrix ); + + /*********************** Energy Compensation ****************/ + + /* Compute Cy_tilde = M*Cx*M' */ + matrix_diag_product( mixing_matrix, lengthCy, lengthCx, 0, Cx_diag, lengthCx, mat_mult_buffer1 ); + matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, mixing_matrix, lengthCy, lengthCx, 1, mat_mult_buffer2 ); + + if ( energy_compensation_flag == 1 ) + { + adj = svd_s_buffer; + Cy_tilde_p = mat_mult_buffer2; + for ( i = 0; i < lengthCy; ++i ) + { + /* Avoid correction for very small energies, main diagonal elements of Cy_tilde_p may be negative */ + if ( Cy_tilde_p[i + i * lengthCy] < 0.0f ) + { + adj[i] = 1.0f; + } + else + { + adj[i] = sqrtf( Cy_diag[i] / ( Cy_tilde_p[i + i * lengthCy] + EPSILON ) ); + } + + if ( adj[i] > 4.0f ) + { + adj[i] = 4.0f; + } + } + + diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); + + mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); + } + + wmops_sub_end(); + + return out; +} diff --git a/lib_dec/ivas_dirac_output_synthesis_dec.c b/lib_dec/ivas_dirac_output_synthesis_dec.c new file mode 100644 index 0000000000..09ef51d056 --- /dev/null +++ b/lib_dec/ivas_dirac_output_synthesis_dec.c @@ -0,0 +1,2129 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define DIRAC_AVG_LENGTH_SYNTH_MS 20 /*averaging length in ms for DirAC synthesis*/ +#define DIRAC_ALPHA_MAX 0.1f +#define DIRAC_AVG_LENGTH_SYNTH_MS_FAST 10 +#define DIRAC_ALPHA_MAX_FAST 0.12f +#define DIRECTION_SMOOTHNESS_ALPHA 0.01f + + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void computeTargetPSDs_direct( const int16_t num_channels, const int16_t num_freq_bands, const float *direct_power_factor, const float *reference_power, const float *direct_responses, const float *direct_responses_square, float *cy_auto_dir_smooth, float *cy_cross_dir_smooth ); + +static void computeTargetPSDs_direct_subframe( const int16_t num_channels, const int16_t num_freq_bands, const float *direct_power_factor, const float *reference_power, const float *direct_responses, const float *direct_responses_square, float *cy_auto_dir_smooth, float *cy_cross_dir_smooth ); + +static void computeTargetPSDs_diffuse( const int16_t num_channels, const int16_t num_freq_bands, const int16_t start_band, const float *diffuse_power_factor, const float *reference_power, const float *diffuse_responses_square, float *cy_auto_diff_smooth ); + +static void computeTargetPSDs_diffuse_subframe( const int16_t num_channels, const int16_t num_freq_bands, const int16_t start_band, const float *diffuse_power_factor, const float *reference_power, const float *diffuse_responses_square, float *cy_auto_diff_smooth ); + +static void computeTargetPSDs_diffuse_with_onsets( const int16_t num_channels, const int16_t num_freq_bands, const int16_t num_decorr_freq_bands, const int16_t *proto_frame_diff_index, const float *diffuse_power_factor, const float *reference_power, const float *diffuse_responses_square, const float *onset_filter, float *cy_auto_diff_smooth ); + +static void computeAlphaSynthesis( float *alpha_synthesis, const int16_t averaging_length_ms, const float maxAlpha, int16_t *numAlphas, const int16_t slot_size, const int16_t num_freq_bands, const float *frequency_axis, const int32_t output_Fs ); + +static void spreadCoherencePanningHoa( const int16_t azimuth, const int16_t elevation, const float spreadCoh, float *direct_response, const int16_t num_channels_dir, const int16_t ambisonics_order ); + +static void spreadCoherencePanningVbap( const int16_t azimuth, const int16_t elevation, const float spreadCoh, float *direct_response, const int16_t num_channels_dir, const VBAP_HANDLE hVBAPdata ); + +static void normalizePanningGains( float *direct_response, const int16_t num_channels_dir ); + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_output_synthesis_open() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_open( + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + RENDERER_TYPE renderer_type, /* i : renderer type */ + const int16_t nchan_transport, /* i : number of transport channels*/ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + int16_t idx, ch_idx; + float tmp; + uint16_t num_diffuse_responses; + float temp_alpha_synthesis[CLDFB_NO_CHANNELS_MAX]; + + /* pointers to structs for allocation */ + DIRAC_OUTPUT_SYNTHESIS_PARAMS *dirac_output_synthesis_params = &( hDirAC->h_output_synthesis_psd_params ); + DIRAC_OUTPUT_SYNTHESIS_STATE *dirac_output_synthesis_state = &( hDirAC->h_output_synthesis_psd_state ); + + /* check / set input parameters */ + assert( hDirAC->num_freq_bands > 0 && "Error: Number of frequency bands <= 0!" ); + assert( hDirAC->hOutSetup.nchan_out_woLFE > 0 && "Error: Number of output channels > 0!" ); + assert( hDirAC->num_outputs_diff > 0 ); + assert( hDirAC->slot_size > 0 ); + assert( hDirAC->hOutSetup.is_loudspeaker_setup == 0 || hDirAC->hOutSetup.is_loudspeaker_setup == 1 ); + assert( hDirAC->diffuse_response_function != NULL ); + + if ( hDirAC->proto_signal_decorr_on ) + { + dirac_output_synthesis_params->max_band_decorr = hDirAC->h_freq_domain_decorr_ap_params->max_band_decorr; + } + else + { + dirac_output_synthesis_params->max_band_decorr = 0; + } + + /*-----------------------------------------------------------------* + * memory allocation + *-----------------------------------------------------------------*/ + + dirac_output_synthesis_state->diffuse_responses_square = NULL; + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + dirac_output_synthesis_state->diffuse_responses_square = (float *) count_malloc( 2 * sizeof( float ) ); + } + else if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + dirac_output_synthesis_state->diffuse_responses_square = (float *) count_malloc( hDirAC->hOutSetup.nchan_out_woLFE * sizeof( float ) ); + } + + /* prototype power buffers */ + dirac_output_synthesis_state->proto_power_smooth_prev = NULL; + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + dirac_output_synthesis_state->proto_power_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_protos_dir * sizeof( float ) ); + } + if ( dirac_output_synthesis_params->max_band_decorr > 0 && ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS || hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) ) + { + dirac_output_synthesis_state->proto_power_diff_smooth_prev = (float *) count_malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->hOutSetup.nchan_out_woLFE * sizeof( float ) ); + } + else + { + dirac_output_synthesis_state->proto_power_diff_smooth_prev = NULL; + } + + /* buffer length and interpolator */ + dirac_output_synthesis_params->interpolator = (float *) count_malloc( hDirAC->subframe_nbslots * sizeof( float ) ); + + /* target PSD buffers */ + dirac_output_synthesis_state->cy_cross_dir_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + dirac_output_synthesis_state->cy_auto_dir_smooth_prev = NULL; + dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) count_malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff * sizeof( float ) ); + } + else + { + dirac_output_synthesis_state->cy_auto_dir_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + { + dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + } + else + { + dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_diff * sizeof( float ) ); + } + } + + /* direct and diffuse gain buffers */ + dirac_output_synthesis_state->gains_dir_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + dirac_output_synthesis_state->gains_diff_prev = (float *) count_malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff * sizeof( float ) ); + } + else if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_PSD_SHD && hDirAC->synthesisConf != DIRAC_SYNTHESIS_MONO ) + { + dirac_output_synthesis_state->gains_diff_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_diff * sizeof( float ) ); + } + else + { + dirac_output_synthesis_state->gains_diff_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + } + + /*-----------------------------------------------------------------* + * prepare processing parameters + *-----------------------------------------------------------------*/ + + /* compute alpha */ + if ( !( renderer_type == RENDERER_BINAURAL_PARAMETRIC || renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) ) + { + computeAlphaSynthesis( temp_alpha_synthesis, DIRAC_AVG_LENGTH_SYNTH_MS, DIRAC_ALPHA_MAX, &dirac_output_synthesis_params->numAlphas, hDirAC->slot_size, hDirAC->num_freq_bands, hDirAC->frequency_axis, output_Fs ); + dirac_output_synthesis_params->alpha_synthesis = (float *) count_malloc( dirac_output_synthesis_params->numAlphas * sizeof( float ) ); + mvr2r( temp_alpha_synthesis, dirac_output_synthesis_params->alpha_synthesis, dirac_output_synthesis_params->numAlphas ); + + computeAlphaSynthesis( temp_alpha_synthesis, DIRAC_AVG_LENGTH_SYNTH_MS_FAST, DIRAC_ALPHA_MAX_FAST, &dirac_output_synthesis_params->numAlphasFast, hDirAC->slot_size, hDirAC->num_freq_bands, hDirAC->frequency_axis, output_Fs ); + dirac_output_synthesis_params->alpha_synthesis_fast = (float *) count_malloc( dirac_output_synthesis_params->numAlphasFast * sizeof( float ) ); + mvr2r( temp_alpha_synthesis, dirac_output_synthesis_params->alpha_synthesis_fast, dirac_output_synthesis_params->numAlphasFast ); + + dirac_output_synthesis_state->reference_power_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + dirac_output_synthesis_state->direction_smoothness_prev = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_zero( dirac_output_synthesis_state->reference_power_smooth_prev, hDirAC->num_freq_bands ); + set_zero( dirac_output_synthesis_state->direction_smoothness_prev, hDirAC->num_freq_bands ); + } + else + { + dirac_output_synthesis_params->alpha_synthesis = NULL; + dirac_output_synthesis_params->alpha_synthesis_fast = NULL; + dirac_output_synthesis_state->reference_power_smooth_prev = NULL; + dirac_output_synthesis_state->direction_smoothness_prev = NULL; + } + + /* compute interpolator */ + for ( idx = 1; idx <= hDirAC->subframe_nbslots; ++idx ) + { + dirac_output_synthesis_params->interpolator[idx - 1] = (float) idx / (float) hDirAC->subframe_nbslots; + } + + /* prepare diffuse response function */ + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + num_diffuse_responses = 2; + } + else + { + num_diffuse_responses = hDirAC->hOutSetup.nchan_out_woLFE; + } + + if ( dirac_output_synthesis_state->diffuse_responses_square != NULL ) + { + for ( ch_idx = 0; ch_idx < num_diffuse_responses; ++ch_idx ) + { + /*dirac_output_synthesis_state->diffuse_responses_square[ch_idx] = pow(dirac_output_synthesis_params->diffuse_response_function[ch_idx]/max_response, 2.0f);*/ + tmp = hDirAC->diffuse_response_function[ch_idx]; + + dirac_output_synthesis_state->diffuse_responses_square[ch_idx] = tmp * tmp; + } + } + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + int16_t diff_compensation_order; + float diff_nrg_total, diff_nrg, diff_nrg_trans, diff_nrg_decorr; + + diff_compensation_order = nchan_transport >= 3 ? 3 : 2; /* compensate missing diffuseness modelling up order 2, except for HR*/ + diff_compensation_order = min( diff_compensation_order, hDirAC->hOutSetup.ambisonics_order ); + + diff_nrg_total = 0; + diff_nrg_trans = 0; + diff_nrg_decorr = 0; + for ( ch_idx = 0; ch_idx < ( diff_compensation_order + 1 ) * ( diff_compensation_order + 1 ); ch_idx++ ) + { + diff_nrg = hDirAC->diffuse_response_function[ch_idx] * hDirAC->diffuse_response_function[ch_idx]; + diff_nrg_total += diff_nrg; + /* is it a transport channel?*/ + if ( ch_idx == 0 || hDirAC->proto_index_dir[ch_idx] != 0 ) + { + diff_nrg_trans += diff_nrg; + } + /* is it a decorrelated or transport channel?*/ + if ( ch_idx < hDirAC->num_outputs_diff ) + { + diff_nrg_decorr += diff_nrg; + } + } + dirac_output_synthesis_params->diffuse_compensation_factor = diff_nrg_total / diff_nrg_trans; + dirac_output_synthesis_params->diffuse_compensation_factor_decorr = diff_nrg_total / diff_nrg_decorr; + } + else + { + dirac_output_synthesis_params->diffuse_compensation_factor = 0.f; + dirac_output_synthesis_params->diffuse_compensation_factor_decorr = 0.f; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_output_synthesis_init() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_init( + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const int16_t nchan_out_woLFE /* i : number of output audio channels without LFE */ +) +{ + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; + DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; + + h_dirac_output_synthesis_params = &( hDirAC->h_output_synthesis_psd_params ); + h_dirac_output_synthesis_state = &( hDirAC->h_output_synthesis_psd_state ); + + /*-----------------------------------------------------------------* + * init outputSynthesisPSD_Init + *-----------------------------------------------------------------*/ + + /* initialize buffers */ + if ( h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev != NULL ) + { + set_zero( h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev, hDirAC->num_freq_bands * hDirAC->num_outputs_dir ); + } + + set_zero( h_dirac_output_synthesis_state->cy_cross_dir_smooth_prev, hDirAC->num_freq_bands * hDirAC->num_outputs_dir ); + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev, h_dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff ); + } + else if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_PSD_SHD ) + { + set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev, hDirAC->num_freq_bands * hDirAC->num_outputs_diff ); + } + else + { + set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev, hDirAC->num_freq_bands * hDirAC->num_outputs_dir ); + } + + if ( h_dirac_output_synthesis_state->proto_power_smooth_prev != NULL ) + { + set_zero( h_dirac_output_synthesis_state->proto_power_smooth_prev, hDirAC->num_freq_bands * hDirAC->num_protos_dir ); + } + + set_zero( h_dirac_output_synthesis_state->gains_dir_prev, hDirAC->num_freq_bands * hDirAC->num_outputs_dir ); + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + set_zero( h_dirac_output_synthesis_state->gains_diff_prev, h_dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff ); + } + else + { + set_zero( h_dirac_output_synthesis_state->gains_diff_prev, hDirAC->num_freq_bands * hDirAC->num_outputs_dir ); + } + + if ( h_dirac_output_synthesis_state->proto_power_diff_smooth_prev != NULL ) + { + set_zero( h_dirac_output_synthesis_state->proto_power_diff_smooth_prev, h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_output_synthesis_close() + * + * Memory deallocation of Output synthesis sub-module + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_close( + DIRAC_DEC_HANDLE hDirAC /* i/o: DirAC handle */ +) +{ + /* pointers to structs for allocation */ + DIRAC_OUTPUT_SYNTHESIS_PARAMS *dirac_output_synthesis_params = &( hDirAC->h_output_synthesis_psd_params ); + DIRAC_OUTPUT_SYNTHESIS_STATE *dirac_output_synthesis_state = &( hDirAC->h_output_synthesis_psd_state ); + + /*-----------------------------------------------------------------* + * memory deallocation + *-----------------------------------------------------------------*/ + + /* free interpolator */ + if ( ( dirac_output_synthesis_params )->interpolator != NULL ) + { + count_free( ( dirac_output_synthesis_params )->interpolator ); + ( dirac_output_synthesis_params )->interpolator = NULL; + } + + /* free alpha */ + if ( ( dirac_output_synthesis_params )->alpha_synthesis != NULL ) + { + count_free( ( dirac_output_synthesis_params )->alpha_synthesis ); + ( dirac_output_synthesis_params )->alpha_synthesis = NULL; + } + if ( ( dirac_output_synthesis_params )->alpha_synthesis_fast != NULL ) + { + count_free( ( dirac_output_synthesis_params )->alpha_synthesis_fast ); + ( dirac_output_synthesis_params )->alpha_synthesis_fast = NULL; + } + + if ( ( dirac_output_synthesis_state )->reference_power_smooth_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->reference_power_smooth_prev ); + ( dirac_output_synthesis_state )->reference_power_smooth_prev = NULL; + } + + if ( ( dirac_output_synthesis_state )->direction_smoothness_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->direction_smoothness_prev ); + ( dirac_output_synthesis_state )->direction_smoothness_prev = NULL; + } + + if ( ( dirac_output_synthesis_state )->diffuse_responses_square != NULL ) + { + count_free( ( dirac_output_synthesis_state )->diffuse_responses_square ); + ( dirac_output_synthesis_state )->diffuse_responses_square = NULL; + } + + /* free power buffers */ + if ( ( dirac_output_synthesis_state )->proto_power_smooth_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->proto_power_smooth_prev ); + ( dirac_output_synthesis_state )->proto_power_smooth_prev = NULL; + } + + if ( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev ); + ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev = NULL; + } + + /* free target power buffers */ + if ( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev ); + ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev = NULL; + } + if ( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev ); + ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev = NULL; + } + if ( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev ); + ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev = NULL; + } + + /* free gain buffers */ + if ( ( dirac_output_synthesis_state )->gains_dir_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->gains_dir_prev ); + ( dirac_output_synthesis_state )->gains_dir_prev = NULL; + } + if ( ( dirac_output_synthesis_state )->gains_diff_prev != NULL ) + { + count_free( ( dirac_output_synthesis_state )->gains_diff_prev ); + ( dirac_output_synthesis_state )->gains_diff_prev = NULL; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_output_synthesis_process_slot() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_process_slot( + const float *reference_power, /* i : Estimated power */ + const float *onset, /* i : onset filter */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const float *p_Rmat, /* i : rotation matrix */ + const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ + const IVAS_OUTPUT_SETUP hOutSetup, /* i : output setup structure */ + const int16_t nchan_transport, /* i : number of transport channels*/ + const int16_t index_slot ) +{ + int16_t num_freq_bands, num_channels_dir; + int16_t num_freq_bands_diff, num_channels_diff; + int16_t ch_idx; + float aux_buf[CLDFB_NO_CHANNELS_MAX]; + int16_t diff_start_band; + const float *diffuseness; + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; + DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; + + diffuseness = hDirAC->diffuseness_vector[hDirAC->dirac_read_idx]; + h_dirac_output_synthesis_params = &( hDirAC->h_output_synthesis_psd_params ); + h_dirac_output_synthesis_state = &( hDirAC->h_output_synthesis_psd_state ); + + h_dirac_output_synthesis_state->onset_filter = onset; + + /*-----------------------------------------------------------------* + * processing + *-----------------------------------------------------------------*/ + + /* collect some often used parameters */ + num_freq_bands = hDirAC->num_freq_bands; + num_channels_dir = hDirAC->num_outputs_dir; + num_channels_diff = hDirAC->num_outputs_diff; + num_freq_bands_diff = h_dirac_output_synthesis_params->max_band_decorr; + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) + { + num_channels_dir = hOutSetup.nchan_out_woLFE; + } + + if ( hDirAC->hConfig->dec_param_estim == TRUE ) + { + /* compute direct responses */ + ivas_dirac_dec_compute_directional_responses( hDirAC, + hVBAPdata, + NULL, + index_slot, + index_slot / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, + 2, + p_Rmat ); + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + ivas_dirac_dec_compute_gain_factors( num_freq_bands, + diffuseness, + h_dirac_output_synthesis_params->max_band_decorr, + h_dirac_output_synthesis_state->direct_power_factor, + h_dirac_output_synthesis_state->diffuse_power_factor ); + + v_multc( h_dirac_output_synthesis_state->direct_power_factor, + 0.25f, + h_dirac_output_synthesis_state->direct_power_factor, + num_freq_bands ); + v_multc( h_dirac_output_synthesis_state->diffuse_power_factor, + 0.25f, + h_dirac_output_synthesis_state->diffuse_power_factor, + num_freq_bands ); + + + /*Direct gain*/ + for ( ch_idx = 0; ch_idx < min( 4, nchan_transport ); ch_idx++ ) + { + int16_t k; + if ( ch_idx != 0 ) + { + float a, b, c; + + /*Directonal sound gain nrg compensation*/ + for ( k = 0; k < num_freq_bands_diff; k++ ) + { + a = h_dirac_output_synthesis_state->direct_responses[ch_idx * num_freq_bands + k]; + b = reference_power[k + num_freq_bands] / ( reference_power[k + ( ch_idx + 1 ) * num_freq_bands] + EPSILON ); + c = 1.f + ( 1.f / 6.f ) * ( h_dirac_output_synthesis_params->diffuse_compensation_factor_decorr - 1.f ); /*Diffuseness modellling nrg compensation*/ + h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( diffuseness[k] * c + ( ( 1.f - diffuseness[k] ) * a * a * b ) ); + } + for ( ; k < num_freq_bands; k++ ) + { + a = h_dirac_output_synthesis_state->direct_responses[ch_idx * num_freq_bands + k]; + b = reference_power[k + num_freq_bands] / ( reference_power[k + ( ch_idx + 1 ) * num_freq_bands] + EPSILON ); + c = 1.f + ( 1.f / 6.f ) * ( h_dirac_output_synthesis_params->diffuse_compensation_factor - 1.f ); /*Diffuseness modellling nrg compensation*/ + h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( diffuseness[k] * c + ( ( 1.f - diffuseness[k] ) * a * a * b ) ); + } + } + else + { + /*Diffuseness modellling nrg compensation*/ + for ( k = 0; k < num_freq_bands_diff; k++ ) + { + h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( 1.0f + diffuseness[k] * 0.5f * ( h_dirac_output_synthesis_params->diffuse_compensation_factor_decorr - 1.f ) ); + } + for ( ; k < num_freq_bands; k++ ) + { + h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( 1.0f + diffuseness[k] * 0.5f * ( h_dirac_output_synthesis_params->diffuse_compensation_factor - 1.f ) ); + } + } + } + /*Directional gain (panning)*/ + for ( ch_idx = min( 4, nchan_transport ); ch_idx < num_channels_dir; ch_idx++ ) + { + v_mult( h_dirac_output_synthesis_state->direct_power_factor, + &h_dirac_output_synthesis_state->direct_responses[ch_idx * num_freq_bands], + aux_buf, + num_freq_bands ); + + v_add( aux_buf, + &h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands], + &h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands], + num_freq_bands ); + } + + /*Diffuse gain*/ + for ( ch_idx = min( 4, nchan_transport ); ch_idx < num_channels_diff; ch_idx++ ) + { + v_multc( h_dirac_output_synthesis_state->diffuse_power_factor, + hDirAC->diffuse_response_function[ch_idx], + aux_buf, + num_freq_bands_diff ); + + v_add( aux_buf, + &h_dirac_output_synthesis_state->cy_auto_diff_smooth[ch_idx * num_freq_bands_diff], + &h_dirac_output_synthesis_state->cy_auto_diff_smooth[ch_idx * num_freq_bands_diff], + num_freq_bands_diff ); + } + + return; + } + else + { + /* compute reference and diffuse power factor for this frame */ + + ivas_dirac_dec_compute_power_factors( num_freq_bands, + diffuseness, + h_dirac_output_synthesis_params->max_band_decorr, + h_dirac_output_synthesis_state->direct_power_factor, + h_dirac_output_synthesis_state->diffuse_power_factor ); + } + } + + diff_start_band = 0; + if ( h_dirac_output_synthesis_params->use_onset_filters ) + { + computeTargetPSDs_diffuse_with_onsets( num_channels_dir, + num_freq_bands, h_dirac_output_synthesis_params->max_band_decorr, + hDirAC->proto_index_diff, + h_dirac_output_synthesis_state->diffuse_power_factor, + reference_power, + h_dirac_output_synthesis_state->diffuse_responses_square, + onset, + h_dirac_output_synthesis_state->cy_auto_diff_smooth ); + + diff_start_band = h_dirac_output_synthesis_params->max_band_decorr; + } + + /* process other PSDs only slot wise for 4 transport channels */ + if ( hDirAC->hConfig->dec_param_estim == TRUE ) + { + computeTargetPSDs_direct( num_channels_dir, num_freq_bands, h_dirac_output_synthesis_state->direct_power_factor, reference_power, h_dirac_output_synthesis_state->direct_responses, h_dirac_output_synthesis_state->direct_responses_square, h_dirac_output_synthesis_state->cy_auto_dir_smooth, h_dirac_output_synthesis_state->cy_cross_dir_smooth ); + + computeTargetPSDs_diffuse( num_channels_dir, num_freq_bands, diff_start_band, h_dirac_output_synthesis_state->diffuse_power_factor, reference_power, h_dirac_output_synthesis_state->diffuse_responses_square, h_dirac_output_synthesis_state->cy_auto_diff_smooth ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_output_synthesis_process_subframe_gain_shd() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const int16_t nchan_transport, /* i : number of transport channels */ + const float *onset_filter ) +{ + int16_t buf_idx, ch_idx, i, l; + int16_t num_freq_bands, num_freq_bands_diff; + int16_t num_channels_dir, num_channels_diff; + float g, g1, g2; + float *p_gains_dir, *p_gains_diff; + float *p_gains_dir_prev, *p_gains_diff_prev; + float *p_cy_cross_dir_smooth; + float *p_cy_auto_diff_smooth; + float *p_proto, *p_out_real, *p_out_imag; + float *p_proto_diff; + int16_t *proto_direct_index, num_protos_dir; + float output_real[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; + float output_imag[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; + DIRAC_OUTPUT_SYNTHESIS_PARAMS h_dirac_output_synthesis_params; + DIRAC_OUTPUT_SYNTHESIS_STATE h_dirac_output_synthesis_state; + int16_t nchan_transport_foa; + int16_t ch_idx_diff; + + /* collect some often used parameters */ + h_dirac_output_synthesis_params = hDirAC->h_output_synthesis_psd_params; + h_dirac_output_synthesis_state = hDirAC->h_output_synthesis_psd_state; + proto_direct_index = hDirAC->proto_index_dir; + + num_protos_dir = hDirAC->num_protos_dir; + num_freq_bands = hDirAC->num_freq_bands; + num_freq_bands_diff = h_dirac_output_synthesis_params.max_band_decorr; + num_channels_dir = hDirAC->num_outputs_dir; + num_channels_diff = hDirAC->num_outputs_diff; + nchan_transport_foa = min( 4, nchan_transport ); + + /*-----------------------------------------------------------------* + * comput target Gains + *-----------------------------------------------------------------*/ + + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + /*Direct gain*/ + for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) + { + v_mult( h_dirac_output_synthesis_state.diffuse_power_factor, + h_dirac_output_synthesis_state.diffuse_power_factor, + &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], + num_freq_bands ); + v_multc( &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], + h_dirac_output_synthesis_params.diffuse_compensation_factor_decorr - 1.f, + &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], + num_freq_bands_diff ); + v_multc( &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + num_freq_bands_diff], + h_dirac_output_synthesis_params.diffuse_compensation_factor - 1.f, + &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + num_freq_bands_diff], + num_freq_bands - num_freq_bands_diff ); + + for ( l = 0; l < num_freq_bands; l++ ) + { + h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + l] = sqrtf( 1.f + h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + l] ); + } + } + + /*Directional gain*/ + for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) + { + v_mult( h_dirac_output_synthesis_state.direct_power_factor, + &h_dirac_output_synthesis_state.direct_responses[ch_idx * num_freq_bands], + &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], num_freq_bands ); + } + + /*Diffuse gain*/ + for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_diff; ch_idx++ ) + { + v_multc( h_dirac_output_synthesis_state.diffuse_power_factor, hDirAC->diffuse_response_function[ch_idx], &h_dirac_output_synthesis_state.cy_auto_diff_smooth[ch_idx * num_freq_bands_diff], num_freq_bands_diff ); + } + } + + /*-----------------------------------------------------------------* + * compute gains + *-----------------------------------------------------------------*/ + + p_cy_cross_dir_smooth = h_dirac_output_synthesis_state.cy_cross_dir_smooth; + p_gains_dir = h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev; + + /*Direct gains*/ + for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + g1 = 0.3679f + onset_filter[l] * ( 0.1175f - 0.3679f ); + g2 = ( 1.f - g1 ) * *( p_gains_dir ); + g2 += g1 * ( *( p_cy_cross_dir_smooth++ ) ); + g2 = max( g2, 0.5f ); + g2 = min( g2, 2.f ); + *( p_gains_dir++ ) = g2; + } + } + + /*Directional gains*/ + for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + g1 = 0.3679f + onset_filter[l] * ( 0.1175f - 0.3679f ); + g2 = ( 1.f - g1 ) * *( p_gains_dir ); + g2 += g1 * ( *( p_cy_cross_dir_smooth++ ) ); + g2 = max( g2, -DIRAC_GAIN_LIMIT ); + g2 = min( g2, DIRAC_GAIN_LIMIT ); + *( p_gains_dir++ ) = g2; + } + } + + /*Diffuse gains*/ + p_cy_auto_diff_smooth = h_dirac_output_synthesis_state.cy_auto_diff_smooth + nchan_transport_foa * num_freq_bands_diff; + p_gains_diff = h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev + nchan_transport_foa * num_freq_bands_diff; + for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_diff; ch_idx++ ) + { + for ( l = 0; l < num_freq_bands_diff; l++ ) + { + g1 = 0.1175f; + g2 = ( 1.f - g1 ) * *( p_gains_diff ); + g2 += g1 * ( *( p_cy_auto_diff_smooth++ ) ); + g2 = max( g2, 0.f ); + g2 = min( g2, DIRAC_GAIN_LIMIT ); + *( p_gains_diff++ ) = g2; + } + } + + /*-----------------------------------------------------------------* + * gain interpolation and output streams + *-----------------------------------------------------------------*/ + + for ( buf_idx = 0; buf_idx < hDirAC->subframe_nbslots; ++buf_idx ) + { + g1 = h_dirac_output_synthesis_params.interpolator[buf_idx]; + g2 = 1.f - g1; + + /*Direct input->output*/ + p_gains_dir = h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev; + p_gains_dir_prev = h_dirac_output_synthesis_state.gains_dir_prev; + for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) + { + p_proto_diff = h_dirac_output_synthesis_state.proto_diffuse_buffer_f + buf_idx * 2 * num_freq_bands * num_channels_diff + ch_idx * 2 * num_freq_bands; + for ( l = 0; l < num_freq_bands; l++ ) + { + g = g1 * ( *( p_gains_dir++ ) ) + g2 * ( *( p_gains_dir_prev++ ) ); + output_real[l * num_channels_dir + ch_idx] = g * ( *( p_proto_diff++ ) ); + output_imag[l * num_channels_dir + ch_idx] = g * ( *( p_proto_diff++ ) ); + } + } + + /*Directional stream*/ + for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) + { + p_proto = h_dirac_output_synthesis_state.proto_direct_buffer_f + + buf_idx * 2 * num_freq_bands * num_protos_dir + + proto_direct_index[ch_idx] * 2 * num_freq_bands; + if ( proto_direct_index[ch_idx] == 0 ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + g = g1 * ( *( p_gains_dir++ ) ) + g2 * ( *( p_gains_dir_prev++ ) ); + output_real[l * num_channels_dir + ch_idx] = g * ( *( p_proto++ ) ); + output_imag[l * num_channels_dir + ch_idx] = g * ( *( p_proto++ ) ); + } + } + else + { + for ( l = 0; l < num_freq_bands; l++ ) + { + p_gains_dir++; + p_gains_dir_prev++; + output_real[l * num_channels_dir + ch_idx] = *( p_proto++ ); + output_imag[l * num_channels_dir + ch_idx] = *( p_proto++ ); + } + } + } + + /*Diffuse stream*/ + p_gains_diff = h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev + nchan_transport_foa * num_freq_bands_diff; + p_gains_diff_prev = h_dirac_output_synthesis_state.gains_diff_prev + nchan_transport_foa * num_freq_bands_diff; + ch_idx_diff = nchan_transport_foa; + for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_diff; ch_idx++ ) + { + if ( proto_direct_index[ch_idx] == 0 ) + { + p_proto = h_dirac_output_synthesis_state.proto_diffuse_buffer_f + buf_idx * 2 * num_freq_bands * num_channels_diff + ch_idx_diff * 2 * num_freq_bands; + ch_idx_diff++; + for ( l = 0; l < num_freq_bands_diff; l++ ) + { + g = g1 * ( *( p_gains_diff++ ) ) + g2 * ( *( p_gains_diff_prev++ ) ); + output_real[l * num_channels_dir + sba_map_tc[ch_idx]] += g * ( *( p_proto++ ) ); /* maps ch_idx 5 to 8 */ + output_imag[l * num_channels_dir + sba_map_tc[ch_idx]] += g * ( *( p_proto++ ) ); + } + } + else + { + for ( l = 0; l < num_freq_bands_diff; l++ ) + { + p_gains_diff++; + p_gains_diff_prev++; + } + } + } + + /*-----------------------------------------------------------------* + * Copy output or HOA decoder + *-----------------------------------------------------------------*/ + + if ( hDirAC->hOutSetup.is_loudspeaker_setup && hDirAC->hoa_decoder != NULL + + ) + { + float *p_real, *p_imag; + const float *hoa_decoder; + + hoa_decoder = hDirAC->hoa_decoder; + + for ( ch_idx = 0; ch_idx < hDirAC->hOutSetup.nchan_out_woLFE; ch_idx++ ) + { + p_real = RealBuffer[ch_idx][buf_idx]; + p_imag = ImagBuffer[ch_idx][buf_idx]; + + for ( l = 0; l < num_freq_bands; l++ ) + { + p_out_real = output_real + l * num_channels_dir; + p_out_imag = output_imag + l * num_channels_dir; + p_real[l] = *( p_out_real++ ) * hoa_decoder[0]; + p_imag[l] = *( p_out_imag++ ) * hoa_decoder[0]; + for ( i = 1; i < num_channels_dir; i++ ) + { + p_real[l] += *( p_out_real++ ) * hoa_decoder[i]; + p_imag[l] += *( p_out_imag++ ) * hoa_decoder[i]; + } + } + hoa_decoder += 16; + } + } + else + { + for ( ch_idx = 0; ch_idx < num_channels_dir; ch_idx++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + RealBuffer[ch_idx][buf_idx][l] = output_real[l * num_channels_dir + ch_idx]; + ImagBuffer[ch_idx][buf_idx][l] = output_imag[l * num_channels_dir + ch_idx]; + } + } + } + } + + /*-----------------------------------------------------------------* + * update buffers + *-----------------------------------------------------------------*/ + + /* store estimates for next synthesis block */ + mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir ); + mvr2r( h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev, h_dirac_output_synthesis_state.gains_diff_prev, num_freq_bands_diff * num_channels_diff ); + + /* reset values */ + set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir ); + set_zero( h_dirac_output_synthesis_state.cy_auto_diff_smooth, num_freq_bands_diff * num_channels_diff ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_output_synthesis_process_subframe_psd_ls() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + float *reference_power_smooth, + float qualityBasedSmFactor ) +{ + int16_t buf_idx, num_freq_bands, diff_start_band; + int16_t k, l; + int16_t nchan_out_woLFE; + float *p_power_smooth_prev, *p_power_diff_smooth_prev; + float *p_gain_1, *p_gain_2; + float *p_power_smooth_diff, *p_power_smooth; + float *p_gains_dir, *p_gains_diff; + float g, g1, g2; + float *p_cy_auto_dir_smooth, *p_cy_auto_dir_smooth_prev; + float *p_cy_cross_dir_smooth, *p_cy_cross_dir_smooth_prev; + float *p_cy_auto_diff_smooth, *p_cy_auto_diff_smooth_prev; + float gains_dir[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; + float gains_diff[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; + DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; + int16_t *proto_direct_index, num_protos_dir; + float target_power_y; + float subtract_power_y; + float subtract_target_ratio; + float subtract_target_ratio_db; + float a, b; + uint16_t nchan_target_psds; + float alpha[CLDFB_NO_CHANNELS_MAX]; + float *alpha_synthesis; + float *alpha_synthesis_fast; + int16_t alphaMaxBin; + int16_t alphaMaxBinFast; + + wmops_sub_start( "dirac_out_synth_sfr" ); + + h_dirac_output_synthesis_params = &( hDirAC->h_output_synthesis_psd_params ); + h_dirac_output_synthesis_state = &( hDirAC->h_output_synthesis_psd_state ); + proto_direct_index = hDirAC->proto_index_dir; + num_protos_dir = hDirAC->num_protos_dir; + nchan_out_woLFE = hDirAC->hOutSetup.nchan_out_woLFE; + + /* collect some often used parameters */ + num_freq_bands = hDirAC->num_freq_bands; + + /*-----------------------------------------------------------------* + * compute target PSDs + *-----------------------------------------------------------------*/ + + if ( hDirAC->hConfig->enc_param_start_band == 0 ) + { + diff_start_band = h_dirac_output_synthesis_params->use_onset_filters == 1 ? h_dirac_output_synthesis_params->max_band_decorr : 0; + + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + nchan_target_psds = 2; + } + else + { + nchan_target_psds = nchan_out_woLFE; + } + + computeTargetPSDs_direct_subframe( nchan_target_psds, num_freq_bands, + h_dirac_output_synthesis_state->direct_power_factor, + reference_power_smooth, + h_dirac_output_synthesis_state->direct_responses, + h_dirac_output_synthesis_state->direct_responses_square, + h_dirac_output_synthesis_state->cy_auto_dir_smooth, + h_dirac_output_synthesis_state->cy_cross_dir_smooth ); + + computeTargetPSDs_diffuse_subframe( nchan_target_psds, num_freq_bands, diff_start_band, + h_dirac_output_synthesis_state->diffuse_power_factor, + reference_power_smooth, + h_dirac_output_synthesis_state->diffuse_responses_square, + h_dirac_output_synthesis_state->cy_auto_diff_smooth ); + } + + /*-----------------------------------------------------------------* + * compute variables for stereo transport signal type detection + *-----------------------------------------------------------------*/ + + if ( hDirAC->masa_stereo_type_detect != NULL ) + { + p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth; + p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth; + if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + target_power_y = p_cy_auto_dir_smooth[num_freq_bands] / ( sqrtf( h_dirac_output_synthesis_state->direct_power_factor[0] ) + EPSILON ); + target_power_y += p_cy_auto_diff_smooth[num_freq_bands] / ( sqrtf( h_dirac_output_synthesis_state->diffuse_power_factor[0] ) + EPSILON ); + } + else + { + target_power_y = p_cy_auto_dir_smooth[num_freq_bands] + p_cy_auto_diff_smooth[num_freq_bands]; + } + subtract_power_y = hDirAC->masa_stereo_type_detect->subtract_power_y; + + a = 0.0004f; /* Temporal smoothing coefficient */ + b = 1.0f - a; /* Temporal smoothing coefficient */ + + hDirAC->masa_stereo_type_detect->target_power_y_smooth = a * target_power_y + b * hDirAC->masa_stereo_type_detect->target_power_y_smooth; + hDirAC->masa_stereo_type_detect->subtract_power_y_smooth = a * subtract_power_y + b * hDirAC->masa_stereo_type_detect->subtract_power_y_smooth; + + subtract_target_ratio = hDirAC->masa_stereo_type_detect->subtract_power_y_smooth / ( hDirAC->masa_stereo_type_detect->target_power_y_smooth + EPSILON ); + subtract_target_ratio_db = 10.0f * log10f( subtract_target_ratio ); + hDirAC->masa_stereo_type_detect->subtract_target_ratio_db = subtract_target_ratio_db; + + hDirAC->masa_stereo_type_detect->subtract_power_y = 0.0f; + } + + /*-----------------------------------------------------------------* + * compute smoothing coefficients + *-----------------------------------------------------------------*/ + + alpha_synthesis = h_dirac_output_synthesis_params->alpha_synthesis; + alpha_synthesis_fast = h_dirac_output_synthesis_params->alpha_synthesis_fast; + alphaMaxBin = h_dirac_output_synthesis_params->numAlphas - 1; + alphaMaxBinFast = h_dirac_output_synthesis_params->numAlphasFast - 1; + + for ( l = 0; l < num_freq_bands; l++ ) + { + float instDirectionSmoothness, weightedDirectionSmoothness, smoothedDirectionSmoothness; + float currWeight, prevWeight, sumWeight; + int16_t indexFast, indexSlow; + float alpha_quality_based = 0.02f; + + indexSlow = min( l, alphaMaxBin ); + indexFast = min( l, alphaMaxBinFast ); + + /* Estimate the smoothness of the directions based on the diffuseness parameter */ + instDirectionSmoothness = 1.0f - hDirAC->diffuseness_vector[hDirAC->dirac_read_idx][l]; /* Currently, all subframes have same energy ratio value. */ + instDirectionSmoothness = min( max( instDirectionSmoothness, 0.0f ), 1.0f ); + + /* Average the direction smoothness parameter over time */ + currWeight = DIRECTION_SMOOTHNESS_ALPHA * reference_power_smooth[l]; + prevWeight = ( 1.0f - DIRECTION_SMOOTHNESS_ALPHA ) * h_dirac_output_synthesis_state->reference_power_smooth_prev[l]; + + weightedDirectionSmoothness = currWeight * instDirectionSmoothness + prevWeight * h_dirac_output_synthesis_state->direction_smoothness_prev[l]; + sumWeight = currWeight + prevWeight; + smoothedDirectionSmoothness = weightedDirectionSmoothness / ( sumWeight + EPSILON ); + + h_dirac_output_synthesis_state->direction_smoothness_prev[l] = smoothedDirectionSmoothness; + h_dirac_output_synthesis_state->reference_power_smooth_prev[l] = sumWeight; + + /* Determine smoothing parameter for rendering. The smoother the directions, the less smoothing is required (i.e., faster smoothing can be used). */ + alpha[l] = smoothedDirectionSmoothness * alpha_synthesis_fast[indexFast] + ( 1.0f - smoothedDirectionSmoothness ) * alpha_synthesis[indexSlow]; + + /* Adjust smoothing parameter based on encoding quality */ + alpha[l] = qualityBasedSmFactor * alpha[l] + ( 1.0f - qualityBasedSmFactor ) * alpha_quality_based; + } + + /*-----------------------------------------------------------------* + * compute gains + *-----------------------------------------------------------------*/ + + /*Direct normalization gains on reduced number of protos*/ + p_power_smooth_prev = h_dirac_output_synthesis_state->proto_power_smooth_prev; + p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth; + + for ( k = 0; k < num_protos_dir; k++ ) + { + for ( l = 0; l < num_freq_bands; l++ ) + { + g1 = alpha[l]; + g2 = ( 1.f - g1 ); + *p_power_smooth_prev = EPSILON + g2 * ( *p_power_smooth_prev ); + *( p_power_smooth_prev ) += g1 * ( *p_power_smooth ); + *( p_power_smooth++ ) = 1.f / ( *( p_power_smooth_prev++ ) ); + } + } + + /*Direct gains and diffuse gains on number of output channels*/ + p_power_diff_smooth_prev = h_dirac_output_synthesis_state->proto_power_diff_smooth_prev; + p_power_smooth_diff = h_dirac_output_synthesis_state->proto_power_diff_smooth; + + p_gains_diff = gains_diff; + p_gains_dir = gains_dir; + + p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth; + p_cy_auto_dir_smooth_prev = h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev; + p_cy_cross_dir_smooth = h_dirac_output_synthesis_state->cy_cross_dir_smooth; + p_cy_cross_dir_smooth_prev = h_dirac_output_synthesis_state->cy_cross_dir_smooth_prev; + + p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth; + p_cy_auto_diff_smooth_prev = h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev; + for ( k = 0; k < nchan_out_woLFE; k++ ) + { + p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth + proto_direct_index[k] * num_freq_bands; + for ( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) + { + /*Direct*/ + g1 = alpha[l]; + g2 = 1.f - g1; + *( p_cy_auto_dir_smooth_prev ) = g1 * ( *( p_cy_auto_dir_smooth++ ) ) + g2 * ( *( p_cy_auto_dir_smooth_prev ) ); + *( p_cy_cross_dir_smooth_prev ) = g1 * ( *( p_cy_cross_dir_smooth++ ) ) + g2 * ( *( p_cy_cross_dir_smooth_prev ) ); + + *( p_gains_dir ) = sqrtf( *( p_power_smooth++ ) * ( *( p_cy_auto_dir_smooth_prev++ ) ) ); + + if ( *( p_gains_dir ) < 0.f ) + { + *( p_gains_dir ) = 0.f; + } + else if ( *( p_gains_dir ) > DIRAC_GAIN_LIMIT ) + { + *( p_gains_dir ) = DIRAC_GAIN_LIMIT; + } + + if ( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) + { + *( p_gains_dir ) *= -1.f; + } + p_gains_dir++; + + /*diffuse*/ + *p_power_diff_smooth_prev = g1 * ( *p_power_smooth_diff++ ) + g2 * ( *p_power_diff_smooth_prev ) + EPSILON; + *( p_cy_auto_diff_smooth_prev ) = g1 * ( *( p_cy_auto_diff_smooth++ ) ) + g2 * ( *( p_cy_auto_diff_smooth_prev ) ); + + *( p_gains_diff ) = sqrtf( *( p_cy_auto_diff_smooth_prev++ ) / ( *( p_power_diff_smooth_prev++ ) ) ); + + if ( *( p_gains_diff ) < 0.f ) + { + *( p_gains_diff ) = 0.f; + } + else if ( *( p_gains_diff ) > DIRAC_GAIN_LIMIT ) + { + *( p_gains_diff ) = DIRAC_GAIN_LIMIT; + } + p_gains_diff++; + } + + /*Only direct prototype*/ + for ( ; l < num_freq_bands; l++ ) + { + /*Direct*/ + g1 = alpha[l]; + g2 = 1.f - g1; + *( p_cy_auto_dir_smooth_prev ) = g1 * ( *( p_cy_auto_dir_smooth++ ) ) + g2 * ( *( p_cy_auto_dir_smooth_prev ) ); + *( p_cy_cross_dir_smooth_prev ) = g1 * ( *( p_cy_cross_dir_smooth++ ) ) + g2 * ( *( p_cy_cross_dir_smooth_prev ) ); + + *( p_gains_dir ) = sqrtf( *( p_power_smooth ) * ( *( p_cy_auto_dir_smooth_prev++ ) ) ); + + if ( *( p_gains_dir ) < 0.f ) + { + *( p_gains_dir ) = 0.f; + } + else if ( *( p_gains_dir ) > DIRAC_GAIN_LIMIT ) + { + *( p_gains_dir ) = DIRAC_GAIN_LIMIT; + } + + if ( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) + { + *( p_gains_dir ) *= -1.f; + } + p_gains_dir++; + + /*diffuse*/ + *( p_cy_auto_diff_smooth_prev ) = g1 * ( *( p_cy_auto_diff_smooth++ ) ) + g2 * ( *( p_cy_auto_diff_smooth_prev ) ); + *( p_gains_diff ) = sqrtf( *( p_power_smooth++ ) * ( *( p_cy_auto_diff_smooth_prev++ ) ) ); + if ( *( p_gains_diff ) < 0.f ) + { + *( p_gains_diff ) = 0.f; + } + else if ( *( p_gains_diff ) > DIRAC_GAIN_LIMIT ) + { + *( p_gains_diff ) = DIRAC_GAIN_LIMIT; + } + p_gains_diff++; + } + } + + /*-----------------------------------------------------------------* + * gain interpolation and output streams + *-----------------------------------------------------------------*/ + + for ( buf_idx = 0; buf_idx < hDirAC->subframe_nbslots; ++buf_idx ) + { + g1 = h_dirac_output_synthesis_params->interpolator[buf_idx]; + g2 = 1.f - g1; + + /*Direct stream*/ + p_gain_1 = gains_dir; + p_gain_2 = h_dirac_output_synthesis_state->gains_dir_prev; + for ( k = 0; k < nchan_out_woLFE; k++ ) + { + p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f + buf_idx * 2 * num_freq_bands * num_protos_dir + proto_direct_index[k] * 2 * num_freq_bands; + for ( l = 0; l < num_freq_bands; l++ ) + { + g = g1 * ( *( p_gain_1++ ) ) + g2 * ( *( p_gain_2++ ) ); + RealBuffer[k][buf_idx][l] = g * ( *( p_power_smooth++ ) ); + ImagBuffer[k][buf_idx][l] = g * ( *( p_power_smooth++ ) ); + } + } + + /*Diffuse stream*/ + p_power_smooth_diff = h_dirac_output_synthesis_state->proto_diffuse_buffer_f + buf_idx * 2 * h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE; + p_gain_1 = gains_diff; + p_gain_2 = h_dirac_output_synthesis_state->gains_diff_prev; + for ( k = 0; k < nchan_out_woLFE; k++ ) + { + for ( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) + { + g = g1 * ( *( p_gain_1++ ) ) + g2 * ( *( p_gain_2++ ) ); + RealBuffer[k][buf_idx][l] += g * ( *( p_power_smooth_diff++ ) ); + ImagBuffer[k][buf_idx][l] += g * ( *( p_power_smooth_diff++ ) ); + } + + /*Direct proto*/ + p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f + buf_idx * 2 * num_freq_bands * num_protos_dir + proto_direct_index[k] * 2 * num_freq_bands + 2 * h_dirac_output_synthesis_params->max_band_decorr; + for ( ; l < num_freq_bands; l++ ) + { + g = g1 * ( *( p_gain_1++ ) ) + g2 * ( *( p_gain_2++ ) ); + RealBuffer[k][buf_idx][l] += g * ( *( p_power_smooth++ ) ); + ImagBuffer[k][buf_idx][l] += g * ( *( p_power_smooth++ ) ); + } + } + } + + /*-----------------------------------------------------------------* + * update buffers + *-----------------------------------------------------------------*/ + + /* store estimates for next synthesis block */ + mvr2r( gains_dir, h_dirac_output_synthesis_state->gains_dir_prev, num_freq_bands * nchan_out_woLFE ); + mvr2r( gains_diff, h_dirac_output_synthesis_state->gains_diff_prev, num_freq_bands * nchan_out_woLFE ); + + /* reset values */ + set_zero( h_dirac_output_synthesis_state->proto_power_smooth, num_freq_bands * num_protos_dir ); + + if ( h_dirac_output_synthesis_state->proto_power_diff_smooth != NULL ) + { + set_zero( h_dirac_output_synthesis_state->proto_power_diff_smooth, h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE ); + } + + set_zero( h_dirac_output_synthesis_state->cy_auto_dir_smooth, num_freq_bands * nchan_out_woLFE ); + set_zero( h_dirac_output_synthesis_state->cy_cross_dir_smooth, num_freq_bands * nchan_out_woLFE ); + set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth, num_freq_bands * nchan_out_woLFE ); + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_get_response_split_order() + * + * calculate reponse, 1 degree resolution + *------------------------------------------------------------------------*/ + +static void ivas_dirac_dec_get_response_split_order( + const int16_t azimuth, + const int16_t elevation, + float *response, + const int16_t shd_rot_max_order, + const float *p_Rmat ) +{ + int16_t index_azimuth, index_elevation; + int16_t el, e, az; + float cos_1, cos_2, sin_1, cos_az[3]; + float sin_az[3]; + float f, c; + int16_t l, m; + int16_t b, b1, b_2, b1_2, a; + float dv_0, dv_1, dv_2, dv_r_0, dv_r_1, dv_r_2; + float w; + + wmops_sub_start( "ivas_dirac_dec_get_response_split_order" ); + + index_azimuth = ( azimuth + 180 ) % 360; + index_elevation = elevation + 90; + e = index_elevation > 90 ? -1 : 1; + el = index_elevation > 90 ? 180 - index_elevation : index_elevation; + + az = index_azimuth > 180 ? 360 - index_azimuth : index_azimuth; + f = index_azimuth > 180 ? -1.0f : 1.0f; + + cos_1 = dirac_gains_trg_term[az][0]; + sin_1 = f * dirac_gains_trg_term[az][1]; + + cos_2 = cos_1 * cos_1; + + cos_az[0] = cos_1; + cos_az[1] = 2.0f * cos_2 - 1.0f; + cos_az[2] = 2.0f * cos_1 * cos_az[1] - cos_az[0]; + sin_az[0] = sin_1; + sin_az[1] = sin_1 * 2.0f * cos_1; + sin_az[2] = sin_1 * ( 4.0f * cos_2 - 1.0f ); + + response[0] = 1.0f; + for ( l = 1; l <= shd_rot_max_order; l++ ) + { + b_2 = l * l; + b1_2 = l * l + 2 * l; + for ( m = 0; m < l; m += 2 ) + { + b = b_2 + m; + a = dirac_gains_P_idx[b]; + c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + + response[b] = c * sin_az[l - m - 1]; + + b1 = b1_2 - m; + response[b1] = c * cos_az[l - m - 1]; + } + + for ( m = 1; m < l; m += 2 ) + { + b = b_2 + m; + a = dirac_gains_P_idx[b]; + c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + c = c * e; + + response[b] = c * sin_az[l - m - 1]; + + b1 = b1_2 - m; + response[b1] = c * cos_az[l - m - 1]; + } + + b = b_2 + l; + a = dirac_gains_P_idx[b]; + c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + if ( l % 2 == 1 ) + { + c = c * e; + } + + response[b] = c; + } + + /*Conversion spherical to cartesian coordinates*/ + w = -dirac_gains_trg_term[el][1]; + dv_0 = w * cos_1; + dv_1 = w * sin_1; + dv_2 = e * dirac_gains_trg_term[el][0]; + + /*Rotation mtx multiplication*/ + dv_r_0 = p_Rmat[0] * dv_0 + p_Rmat[1] * dv_1 + p_Rmat[2] * dv_2; + dv_r_1 = p_Rmat[3] * dv_0 + p_Rmat[4] * dv_1 + p_Rmat[5] * dv_2; + dv_r_2 = p_Rmat[6] * dv_0 + p_Rmat[7] * dv_1 + p_Rmat[8] * dv_2; + + index_azimuth = ( (int16_t) ( atan2f( dv_r_1, dv_r_0 ) * _180_OVER_PI ) + 180 ) % 360; + index_elevation = (int16_t) ( atan2f( dv_r_2, sqrtf( dv_r_0 * dv_r_0 + dv_r_1 * dv_r_1 ) ) * _180_OVER_PI ) + 90; + e = index_elevation > 90 ? -1 : 1; + el = index_elevation > 90 ? 180 - index_elevation : index_elevation; + + az = index_azimuth > 180 ? 360 - index_azimuth : index_azimuth; + f = index_azimuth > 180 ? -1.0f : 1.0f; + + cos_1 = dirac_gains_trg_term[az][0]; + sin_1 = f * dirac_gains_trg_term[az][1]; + + cos_2 = cos_1 * cos_1; + + cos_az[0] = cos_1; + cos_az[1] = 2.0f * cos_2 - 1.0f; + cos_az[2] = 2.0f * cos_1 * cos_az[1] - cos_az[0]; + sin_az[0] = sin_1; + sin_az[1] = sin_1 * 2.0f * cos_1; + sin_az[2] = sin_1 * ( 4.0f * cos_2 - 1.0f ); + + for ( l = shd_rot_max_order + 1; l <= 3; l++ ) + { + b_2 = l * l; + b1_2 = l * l + 2 * l; + for ( m = 0; m < l; m += 2 ) + { + b = b_2 + m; + a = dirac_gains_P_idx[b]; + c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + + response[b] = c * sin_az[l - m - 1]; + + b1 = b1_2 - m; + response[b1] = c * cos_az[l - m - 1]; + } + + for ( m = 1; m < l; m += 2 ) + { + b = b_2 + m; + a = dirac_gains_P_idx[b]; + c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + c = c * e; + + response[b] = c * sin_az[l - m - 1]; + + b1 = b1_2 - m; + response[b1] = c * cos_az[l - m - 1]; + } + + b = b_2 + l; + a = dirac_gains_P_idx[b]; + c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; + if ( l % 2 == 1 ) + { + c = c * e; + } + + response[b] = c; + } + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_compute_directional_responses() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_compute_directional_responses( + DIRAC_DEC_HANDLE hDirAC, /* i/o: DirAC handle */ + const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ + const MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ + const int16_t direction_idx, /* i : index for direction (azi and ele), can slot index (>2TCs) or subrame index (<=2TCs) */ + const int16_t subframe_idx, /* i : subframe index */ + const float *surCohRatio, + const int16_t shd_rot_max_order, /* i : split-order rotation method */ + const float *p_Rmat /* i : rotation matrix */ +) +{ + int16_t k, l; + int16_t num_channels_dir; + float direct_response_hoa[MAX_OUTPUT_CHANNELS]; /* number of output channels (HOA 3rd order) -> 16 */ + float direct_response_ls[MAX_OUTPUT_CHANNELS]; + float direct_response_square[MAX_OUTPUT_CHANNELS]; + float *direct_response; + const int16_t *azimuth, *elevation; + const int16_t *azimuth2, *elevation2; + float direct_response_dir2[MAX_OUTPUT_CHANNELS]; + float directRatio[MASA_MAXIMUM_DIRECTIONS]; + float totalDirect; + int16_t codingBand; + int16_t dipole_freq_range[2]; + MASA_TRANSPORT_SIGNAL_TYPE transport_signal_type; + + azimuth2 = NULL; + elevation2 = NULL; + transport_signal_type = MASA_STEREO_NOT_DEFINED; + + if ( hDirAC->masa_stereo_type_detect != NULL ) + { + dipole_freq_range[0] = hDirAC->masa_stereo_type_detect->dipole_freq_range[0]; + dipole_freq_range[1] = hDirAC->masa_stereo_type_detect->dipole_freq_range[1]; + transport_signal_type = hDirAC->masa_stereo_type_detect->masa_stereo_type; + } + + num_channels_dir = hDirAC->num_outputs_dir; + azimuth = hDirAC->azimuth[hDirAC->dirac_read_idx]; + elevation = hDirAC->elevation[hDirAC->dirac_read_idx]; + if ( hDirAC->numSimultaneousDirections == 2 ) + { + azimuth2 = hDirAC->azimuth2[direction_idx]; + elevation2 = hDirAC->elevation2[direction_idx]; + } + codingBand = -1; + + assert( num_channels_dir <= MAX_OUTPUT_CHANNELS && "Number of channels is too high" ); + + for ( k = 0; k < hDirAC->num_freq_bands; ++k ) + { + if ( hMasa != NULL && k == MASA_band_grouping_24[hMasa->data.band_mapping[codingBand + 1]] ) + { + codingBand++; + } + + if ( hMasa != NULL && k > MASA_band_grouping_24[hMasa->data.band_mapping[codingBand]] && + k < MASA_band_grouping_24[hMasa->data.band_mapping[codingBand + 1]] && + k != hDirAC->h_output_synthesis_psd_params.max_band_decorr ) + { + /* Panning gains have to be computed only for the first bin of the coding band in MASA, for other bins the previous values can be used */ + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + mvr2r_inc( &hDirAC->h_output_synthesis_psd_state.direct_responses_square[k - 1], + hDirAC->num_freq_bands, &hDirAC->h_output_synthesis_psd_state.direct_responses_square[k], + hDirAC->num_freq_bands, num_channels_dir ); + } + mvr2r_inc( &hDirAC->h_output_synthesis_psd_state.direct_responses[k - 1], + hDirAC->num_freq_bands, + &hDirAC->h_output_synthesis_psd_state.direct_responses[k], + hDirAC->num_freq_bands, num_channels_dir ); + } + else + { + /* HOA3 PANNING */ + if ( hDirAC->panningConf == DIRAC_PANNING_HOA3 ) + { + set_f( direct_response_hoa, 1.0f, MAX_OUTPUT_CHANNELS ); + if ( p_Rmat != 0 ) + { + ivas_dirac_dec_get_response_split_order( azimuth[k], elevation[k], direct_response_hoa, shd_rot_max_order, p_Rmat ); + } + else + { + ivas_dirac_dec_get_response( azimuth[k], elevation[k], direct_response_hoa, hDirAC->hOutSetup.ambisonics_order ); + } + + if ( hMasa == NULL && hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + mvr2r_inc( direct_response_hoa, 1, &hDirAC->h_output_synthesis_psd_state.direct_responses[k], hDirAC->num_freq_bands, num_channels_dir ); + } + else if ( ( ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) && ( hMasa != NULL ) ) || + hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD || hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) + { + /* Synthesize the first direction */ + spreadCoherencePanningHoa( azimuth[k], elevation[k], hDirAC->spreadCoherence[subframe_idx][k], direct_response_hoa, num_channels_dir, hDirAC->hOutSetup.ambisonics_order ); + + /* Synthesize the second direction and combine the gains */ + if ( hDirAC->numSimultaneousDirections == 2 ) + { + spreadCoherencePanningHoa( azimuth2[k], elevation2[k], hDirAC->spreadCoherence2[subframe_idx][k], direct_response_dir2, num_channels_dir, hDirAC->hOutSetup.ambisonics_order ); + + /* Combine gains from the two directions */ + totalDirect = hDirAC->energy_ratio1[subframe_idx][k] + hDirAC->energy_ratio2[subframe_idx][k] + EPSILON; + directRatio[0] = hDirAC->energy_ratio1[subframe_idx][k] / totalDirect; + directRatio[1] = hDirAC->energy_ratio2[subframe_idx][k] / totalDirect; + for ( l = 0; l < num_channels_dir; l++ ) + { + direct_response_hoa[l] *= directRatio[0]; + direct_response_hoa[l] += directRatio[1] * direct_response_dir2[l]; + } + } + + /* Synthesize surrounding coherence */ + if ( surCohRatio != NULL && surCohRatio[k] > 0.f ) + { + for ( l = 1; l < num_channels_dir; l++ ) + { + direct_response_hoa[l] *= sqrtf( 1.0f - surCohRatio[k] ); + } + } + + /* Set computed gains */ + direct_response = direct_response_hoa; + if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + { + v_mult( direct_response, direct_response, direct_response_square, num_channels_dir ); + mvr2r_inc( direct_response_square, 1, &hDirAC->h_output_synthesis_psd_state.direct_responses_square[k], hDirAC->num_freq_bands, num_channels_dir ); + + if ( transport_signal_type == MASA_STEREO_SPACED_MICS ) + { + direct_response[0] = 1.0f; + if ( k >= dipole_freq_range[0] && k < dipole_freq_range[1] ) + { + direct_response[1] = 1.0f; + } + } + else + { + set_f( direct_response, 1.0f, hDirAC->num_protos_ambi ); + } + } + + mvr2r_inc( direct_response, 1, &hDirAC->h_output_synthesis_psd_state.direct_responses[k], hDirAC->num_freq_bands, num_channels_dir ); + } + else + { + assert( 0 && "Not supported synthesis method!" ); + } + } + else if ( hDirAC->panningConf == DIRAC_PANNING_VBAP ) /*VBAP*/ + { + /* Synthesize the first direction */ + spreadCoherencePanningVbap( azimuth[k], elevation[k], hDirAC->spreadCoherence[subframe_idx][k], direct_response_ls, num_channels_dir, hVBAPdata ); + normalizePanningGains( direct_response_ls, num_channels_dir ); + + /* Synthesize the second direction and combine the gains */ + if ( hDirAC->numSimultaneousDirections == 2 ) + { + spreadCoherencePanningVbap( azimuth2[k], elevation2[k], hDirAC->spreadCoherence2[subframe_idx][k], direct_response_dir2, num_channels_dir, hVBAPdata ); + + normalizePanningGains( direct_response_dir2, num_channels_dir ); + + /* Combine gains from the two directions */ + totalDirect = hDirAC->energy_ratio1[subframe_idx][k] + hDirAC->energy_ratio2[subframe_idx][k] + EPSILON; + directRatio[0] = hDirAC->energy_ratio1[subframe_idx][k] / totalDirect; + directRatio[1] = hDirAC->energy_ratio2[subframe_idx][k] / totalDirect; + for ( l = 0; l < num_channels_dir; l++ ) + { + direct_response_ls[l] *= directRatio[0]; + direct_response_ls[l] += directRatio[1] * direct_response_dir2[l]; + } + normalizePanningGains( direct_response_ls, num_channels_dir ); + } + + /* Synthesize surrounding coherence */ + if ( surCohRatio != NULL && surCohRatio[k] > 0.f ) + { + int16_t num_channels_surrCoh; + + num_channels_surrCoh = num_channels_dir; + num_channels_surrCoh -= hDirAC->num_ele_spk_no_diffuse_rendering; + + for ( l = 0; l < num_channels_dir; l++ ) + { + direct_response_ls[l] *= sqrtf( 1.0f - surCohRatio[k] ); + if ( hDirAC->diffuse_response_function[l] > 0.f ) + { + direct_response_ls[l] += sqrtf( surCohRatio[k] / (float) num_channels_surrCoh ); + } + } + } + normalizePanningGains( direct_response_ls, num_channels_dir ); + + /* Set computed gains */ + direct_response = direct_response_ls; + v_mult( direct_response, direct_response, direct_response_square, num_channels_dir ); + mvr2r_inc( direct_response_square, 1, &hDirAC->h_output_synthesis_psd_state.direct_responses_square[k], hDirAC->num_freq_bands, num_channels_dir ); + mvr2r_inc( direct_response, 1, &hDirAC->h_output_synthesis_psd_state.direct_responses[k], hDirAC->num_freq_bands, num_channels_dir ); + } + else + { + assert( 0 && "Not supported panning method!" ); + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_compute_gain_factors() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_compute_gain_factors( + const int16_t num_freq_bands, + const float *diffuseness, + const int16_t max_band_decorr, + float *direct_gain_factor, + float *diffuse_gain_factor ) +{ + int16_t i; + + for ( i = 0; i < max_band_decorr; i++ ) + { + direct_gain_factor[i] = sqrtf( 1.f - diffuseness[i] ); + diffuse_gain_factor[i] = sqrtf( diffuseness[i] ); + } + for ( ; i < num_freq_bands; i++ ) + { + direct_gain_factor[i] = sqrtf( 1.f - diffuseness[i] ); + diffuse_gain_factor[i] = sqrtf( diffuseness[i] ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_compute_power_factors() + * + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_compute_power_factors( + const int16_t num_freq_bands, + const float *diffuseness, + const int16_t max_band_decorr, + float *direct_power_factor, + float *diffuse_power_factor ) +{ + v_multc( diffuseness, -1.0f, direct_power_factor, num_freq_bands ); + + v_addc( direct_power_factor, 1.0f, direct_power_factor, num_freq_bands ); + + mvr2r( diffuseness, diffuse_power_factor, num_freq_bands ); + + v_mult( &direct_power_factor[max_band_decorr], &direct_power_factor[max_band_decorr], &direct_power_factor[max_band_decorr], num_freq_bands - max_band_decorr ); + + v_mult( &diffuse_power_factor[max_band_decorr], &diffuse_power_factor[max_band_decorr], &diffuse_power_factor[max_band_decorr], num_freq_bands - max_band_decorr ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_lfe_synth_with_filters() + * + * + *------------------------------------------------------------------------*/ + +void ivas_lfe_synth_with_filters( + MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: LFE synthesis structure for McMASA */ + float data_f[][L_FRAME48k], /* o : output signals */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t separateChannelIndex, /* i : separate channel index */ + const int16_t lfeChannelIndex /* i : LFE channel index */ +) +{ + float lowpassCoef; + int16_t i, j; + float lowPassSignal[L_FRAME48k]; + float highPassSignal[L_FRAME48k]; + int16_t slot_index; + int16_t subframe_index; + int16_t slotSize; + float transportEne, targetEneLfe, targetEneTrans; + int16_t mrange[2]; + float lfeGain; + float transportGain; + int16_t delay; + + /* Delay the separated channel to sync the LFE synthesis with the DirAC rendering */ + delay = hMasaLfeSynth->delayBuffer_syncDirAC_size; + delay_signal( data_f[separateChannelIndex], output_frame, hMasaLfeSynth->delayBuffer_syncDirAC, delay ); + + /* Filterbank for dividing the separated channel to LFE frequencies and higher frequencies */ + lowpassCoef = 1.0f / ( (float) hMasaLfeSynth->ringBufferSize ); + for ( i = 0; i < output_frame; i++ ) + { + hMasaLfeSynth->lowpassSum += lowpassCoef * data_f[separateChannelIndex][i] - lowpassCoef * hMasaLfeSynth->lfeSynthRingBuffer[hMasaLfeSynth->ringBufferLoPointer]; + lowPassSignal[i] = hMasaLfeSynth->lowpassSum; + highPassSignal[i] = hMasaLfeSynth->lfeSynthRingBuffer[hMasaLfeSynth->ringBufferHiPointer] - lowPassSignal[i]; + hMasaLfeSynth->lfeSynthRingBuffer[hMasaLfeSynth->ringBufferLoPointer] = data_f[separateChannelIndex][i]; + + hMasaLfeSynth->ringBufferLoPointer--; + if ( hMasaLfeSynth->ringBufferLoPointer < 0 ) + { + hMasaLfeSynth->ringBufferLoPointer = hMasaLfeSynth->ringBufferSize - 1; + } + + hMasaLfeSynth->ringBufferHiPointer--; + if ( hMasaLfeSynth->ringBufferHiPointer < 0 ) + { + hMasaLfeSynth->ringBufferHiPointer = hMasaLfeSynth->ringBufferSize - 1; + } + } + + /* Synthesize the LFE signal */ + slotSize = output_frame / CLDFB_NO_COL_MAX; + for ( slot_index = 0; slot_index < CLDFB_NO_COL_MAX; slot_index++ ) + { + subframe_index = slot_index / 4; + + mrange[0] = slot_index * slotSize; + mrange[1] = ( slot_index + 1 ) * slotSize; + + transportEne = 0.0f; + for ( i = mrange[0]; i < mrange[1]; i++ ) + { + transportEne += lowPassSignal[i] * lowPassSignal[i]; + } + + targetEneLfe = transportEne * hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index]; + targetEneTrans = transportEne * max( ( 1.0f - hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index] ), 0.01f ); + + hMasaLfeSynth->transportEneSmooth *= MCMASA_LFE_SYNTH_ALPHA; + hMasaLfeSynth->targetEneLfeSmooth *= MCMASA_LFE_SYNTH_ALPHA; + hMasaLfeSynth->targetEneTransSmooth *= MCMASA_LFE_SYNTH_ALPHA; + + hMasaLfeSynth->transportEneSmooth += transportEne; + hMasaLfeSynth->targetEneLfeSmooth += targetEneLfe; + hMasaLfeSynth->targetEneTransSmooth += targetEneTrans; + + lfeGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneLfeSmooth / ( EPSILON + hMasaLfeSynth->transportEneSmooth ) ) ); + transportGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneTransSmooth / ( EPSILON + hMasaLfeSynth->transportEneSmooth ) ) ); + + for ( i = mrange[0], j = 0; i < mrange[1]; i++, j++ ) + { + data_f[separateChannelIndex][i] = ( transportGain * hMasaLfeSynth->interpolator[j] + hMasaLfeSynth->transportGainPrev * ( 1.0f - hMasaLfeSynth->interpolator[j] ) ) * lowPassSignal[i] + highPassSignal[i]; + data_f[lfeChannelIndex][i] = ( lfeGain * hMasaLfeSynth->interpolator[j] + hMasaLfeSynth->lfeGainPrev * ( 1.0f - hMasaLfeSynth->interpolator[j] ) ) * lowPassSignal[i]; + } + + hMasaLfeSynth->lfeGainPrev = lfeGain; + hMasaLfeSynth->transportGainPrev = transportGain; + } + + /* Lowpass filter for removing remaining mid and high frequencies from the LFE signal */ + lowpassCoef = 1.0f / ( (float) hMasaLfeSynth->ringBufferSize2 ); + for ( i = 0; i < output_frame; i++ ) + { + hMasaLfeSynth->lowpassSum2 += lowpassCoef * data_f[lfeChannelIndex][i] - lowpassCoef * hMasaLfeSynth->lfeSynthRingBuffer2[hMasaLfeSynth->ringBufferLoPointer2]; + hMasaLfeSynth->lfeSynthRingBuffer2[hMasaLfeSynth->ringBufferLoPointer2] = data_f[lfeChannelIndex][i]; + + hMasaLfeSynth->ringBufferLoPointer2--; + if ( hMasaLfeSynth->ringBufferLoPointer2 < 0 ) + { + hMasaLfeSynth->ringBufferLoPointer2 = hMasaLfeSynth->ringBufferSize2 - 1; + } + + data_f[lfeChannelIndex][i] = hMasaLfeSynth->lowpassSum2; + } + + /* Delay the separated channel to match the delay of the lowpass filter */ + delay = hMasaLfeSynth->delayBuffer_syncLp_size; + delay_signal( data_f[separateChannelIndex], output_frame, hMasaLfeSynth->delayBuffer_syncLp, delay ); + + return; +} + + +/*------------------------------------------------------------------------- + * Local functions + *------------------------------------------------------------------------*/ + +static void computeTargetPSDs_direct( + const int16_t num_channels, + const int16_t num_freq_bands, + const float *direct_power_factor, + const float *reference_power, + const float *direct_responses, + const float *direct_responses_square, + float *cy_auto_dir_smooth, + float *cy_cross_dir_smooth ) +{ + int16_t ch_idx, cur_idx; + + /* segment auxiliary buffer */ + float direct_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ + float aux_buffer_res[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ + + /* estimate direct and diffuse power */ + v_mult( direct_power_factor, reference_power, direct_power, num_freq_bands ); + + /* compute target auto and cross PSDs of current frame (smoothed) */ + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + cur_idx = ch_idx * num_freq_bands; + + v_mult( direct_power, &direct_responses_square[cur_idx], aux_buffer_res, num_freq_bands ); + v_add( &cy_auto_dir_smooth[cur_idx], aux_buffer_res, &cy_auto_dir_smooth[cur_idx], num_freq_bands ); + + v_mult( direct_power, &direct_responses[cur_idx], aux_buffer_res, num_freq_bands ); + v_add( &cy_cross_dir_smooth[cur_idx], aux_buffer_res, &cy_cross_dir_smooth[cur_idx], num_freq_bands ); + } + + return; +} + + +static void computeTargetPSDs_direct_subframe( + const int16_t num_channels, + const int16_t num_freq_bands, + const float *direct_power_factor, + const float *reference_power, + const float *direct_responses, + const float *direct_responses_square, + float *cy_auto_dir_smooth, + float *cy_cross_dir_smooth ) +{ + int16_t ch_idx, cur_idx; + + /* segment auxiliary buffer */ + float direct_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ + + /* estimate direct and diffuse power */ + v_mult( direct_power_factor, reference_power, direct_power, num_freq_bands ); + + /* compute target auto and cross PSDs of current frame (smoothed) */ + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + cur_idx = ch_idx * num_freq_bands; + + v_mult( direct_power, &direct_responses_square[cur_idx], &cy_auto_dir_smooth[cur_idx], num_freq_bands ); + v_mult( direct_power, &direct_responses[cur_idx], &cy_cross_dir_smooth[cur_idx], num_freq_bands ); + } + + return; +} + + +static void computeTargetPSDs_diffuse( + const int16_t num_channels, + const int16_t num_freq_bands, + const int16_t start_band, + const float *diffuse_power_factor, + const float *reference_power, + const float *diffuse_responses_square, + float *cy_auto_diff_smooth ) +{ + int16_t ch_idx, cur_idx; + + /* segment auxiliary buffer */ + float diffuse_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ + float aux_buffer_res[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ + + /* estimate direct and diffuse power */ + v_mult( diffuse_power_factor, reference_power, diffuse_power, num_freq_bands ); + + /* compute target auto and cross PSDs of current frame (smoothed) */ + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + cur_idx = ch_idx * num_freq_bands; + v_multc( &diffuse_power[start_band], diffuse_responses_square[ch_idx], aux_buffer_res, num_freq_bands - start_band ); + v_add( &cy_auto_diff_smooth[cur_idx + start_band], aux_buffer_res, &cy_auto_diff_smooth[cur_idx + start_band], num_freq_bands - start_band ); + } + + return; +} + + +static void computeTargetPSDs_diffuse_subframe( + const int16_t num_channels, + const int16_t num_freq_bands, + const int16_t start_band, + const float *diffuse_power_factor, + const float *reference_power, + const float *diffuse_responses_square, + float *cy_auto_diff_smooth ) +{ + int16_t ch_idx, cur_idx; + float diffuse_power[CLDFB_NO_CHANNELS_MAX]; /* segment auxiliary buffer; size: num_freq_bands. */ + + /* estimate direct and diffuse power */ + v_mult( diffuse_power_factor, reference_power, diffuse_power, num_freq_bands ); + + /* compute target auto and cross PSDs of current frame (smoothed) */ + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + cur_idx = ch_idx * num_freq_bands; + + v_multc( &diffuse_power[start_band], diffuse_responses_square[ch_idx], &cy_auto_diff_smooth[cur_idx + start_band], num_freq_bands - start_band ); + } + + return; +} + + +static void computeTargetPSDs_diffuse_with_onsets( + const int16_t num_channels, + const int16_t num_freq_bands, + const int16_t num_decorr_freq_bands, + const int16_t *proto_frame_diff_index, + const float *diffuse_power_factor, + const float *reference_power, + const float *diffuse_responses_square, + const float *onset_filter, + float *cy_auto_diff_smooth ) +{ + int16_t ch_idx, cur_idx, diff_idx; + float diffuse_response_p4, aux_buffer_res1[CLDFB_NO_CHANNELS_MAX]; + /* segment auxiliary buffer */ + float diffuse_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ + float aux_buffer_res[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ + + /* estimate direct and diffuse power */ + v_mult( diffuse_power_factor, reference_power, diffuse_power, num_decorr_freq_bands ); + + /* compute target auto and cross PSDs of current frame (smoothed) */ + for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) + { + diffuse_response_p4 = diffuse_responses_square[ch_idx] * diffuse_responses_square[ch_idx]; + + cur_idx = ch_idx * num_freq_bands; + diff_idx = proto_frame_diff_index[ch_idx] * num_freq_bands; + + v_multc( &onset_filter[diff_idx], diffuse_responses_square[ch_idx], aux_buffer_res1, num_decorr_freq_bands ); + v_multc( &onset_filter[diff_idx], -1.0f, aux_buffer_res, num_decorr_freq_bands ); + v_addc( aux_buffer_res, 1.0f, aux_buffer_res, num_decorr_freq_bands ); + v_multc( aux_buffer_res, diffuse_response_p4, aux_buffer_res, num_decorr_freq_bands ); + v_add( aux_buffer_res1, aux_buffer_res, aux_buffer_res, num_decorr_freq_bands ); + v_mult( aux_buffer_res, diffuse_power, aux_buffer_res, num_decorr_freq_bands ); + v_add( &cy_auto_diff_smooth[cur_idx], aux_buffer_res, &cy_auto_diff_smooth[cur_idx], num_decorr_freq_bands ); + } + + return; +} + +static void computeAlphaSynthesis( + float *alpha_synthesis, + const int16_t averaging_length_ms, + const float maxAlpha, + int16_t *numAlphas, + const int16_t slot_size, + const int16_t num_freq_bands, + const float *frequency_axis, + const int32_t output_Fs ) +{ + int16_t k; + float avg_length_f_ms; + + /* check input pointer */ + if ( alpha_synthesis == NULL ) + { +#ifdef DEBUGGING + assert( !"Error: NULL pointer.\n" ); +#endif + return; + } + + if ( averaging_length_ms == 0 ) + { + set_f( alpha_synthesis, 1.0f, num_freq_bands ); + } + else + { + for ( k = 0; k < num_freq_bands; k++ ) + { + int16_t faxis_idx = max( k, 1 ); + avg_length_f_ms = 1000.f * (float) averaging_length_ms / fabsf( frequency_axis[faxis_idx] ); + alpha_synthesis[k] = min( (float) slot_size / ( avg_length_f_ms * (float) output_Fs / 1000.f ), 1.0f ); + if ( alpha_synthesis[k] >= maxAlpha ) + { + alpha_synthesis[k] = maxAlpha; + *numAlphas = k + 1; + break; + } + } + } + + return; +} + +static void spreadCoherencePanningHoa( + const int16_t azimuth, + const int16_t elevation, + const float spreadCoh, + float *direct_response, + const int16_t num_channels_dir, + const int16_t ambisonics_order ) +{ + int16_t i; + float direct_response_left[MAX_OUTPUT_CHANNELS]; + float direct_response_right[MAX_OUTPUT_CHANNELS]; + float gainCenter; + float gainSide; + + ivas_dirac_dec_get_response( azimuth, elevation, direct_response, ambisonics_order ); + + if ( spreadCoh > 0.f ) + { + ivas_dirac_dec_get_response( azimuth + 30, elevation, direct_response_left, ambisonics_order ); + + ivas_dirac_dec_get_response( azimuth + 330, elevation, direct_response_right, ambisonics_order ); + + if ( spreadCoh < 0.5f ) + { + gainCenter = ( 1.0f - 2.0f * spreadCoh ) + 2.0f * spreadCoh / 3.0f; + gainSide = 2.0f * spreadCoh / 3.0f; + } + else + { + gainSide = 1.0f / ( 4.0f - 2.0f * spreadCoh ); + gainCenter = ( 2.0f - 2.0f * spreadCoh ) * gainSide; + } + + for ( i = 0; i < num_channels_dir; i++ ) + { + direct_response[i] = direct_response[i] * gainCenter + ( direct_response_left[i] + direct_response_right[i] ) * gainSide; + } + } + + return; +} + +static void spreadCoherencePanningVbap( + const int16_t azimuth, + const int16_t elevation, + const float spreadCoh, + float *direct_response, + const int16_t num_channels_dir, + const VBAP_HANDLE hVBAPdata ) +{ + int16_t i; + float direct_response_left[MAX_OUTPUT_CHANNELS]; + float direct_response_right[MAX_OUTPUT_CHANNELS]; + float gainCenter; + float gainSide; + + if ( hVBAPdata == NULL ) + { + /* Distribute signal to all channels if VBAP is not properly initialized. */ + set_f( direct_response, 1.0f / sqrtf( num_channels_dir ), num_channels_dir ); + return; + } + + vbap_determine_gains( hVBAPdata, direct_response, azimuth, elevation ); + + if ( spreadCoh > 0.f ) + { + vbap_determine_gains( hVBAPdata, direct_response_left, azimuth + 30, elevation ); + vbap_determine_gains( hVBAPdata, direct_response_right, azimuth - 30, elevation ); + + if ( spreadCoh < 0.5f ) + { + gainCenter = ( 1.0f - 2.0f * spreadCoh ) + 2.0f * spreadCoh * INV_SQRT3; + gainSide = 2.0f * spreadCoh * INV_SQRT3; + } + else + { + gainCenter = 2.0f - 2.0f * spreadCoh; + gainSide = 1.0f; + } + + for ( i = 0; i < num_channels_dir; i++ ) + { + direct_response[i] = direct_response[i] * gainCenter + ( direct_response_left[i] + direct_response_right[i] ) * gainSide; + } + } + + return; +} + + +static void normalizePanningGains( + float *direct_response, + const int16_t num_channels_dir ) +{ + float energySum; + float normVal; + int16_t i; + + energySum = sum2_f( direct_response, num_channels_dir ) + 1e-12f; + normVal = sqrtf( 1.0f / energySum ); + for ( i = 0; i < num_channels_dir; i++ ) + { + direct_response[i] *= normVal; + } + + return; +} diff --git a/lib_dec/ivas_efap.c b/lib_dec/ivas_efap.c new file mode 100644 index 0000000000..efd7795dfe --- /dev/null +++ b/lib_dec/ivas_efap.c @@ -0,0 +1,2228 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define EFAP_MAX_SIZE_TMP_BUFF 30 +#define EFAP_MAX_GHOST_LS 5 /* Maximum number of ghost Loudspeakers, for memory allocation purpose */ +#define POLY_THRESH 1e-4f + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static ivas_error poly_init( EFAP *efap, const int16_t efip_flag ); + +static ivas_error sphere_triangulation( const int16_t numSpk, EFAP_VERTEX_DATA *vtxData, EFAP_POLYSET_DATA *polyData, float ***dmTranspose, int16_t *numTot, const int16_t efip_flag ); + +static void initial_polyeder( EFAP_VERTEX_DATA *vtxData, EFAP_LS_TRIANGLE *triArray, int16_t *numTri, int16_t *vtxInHull ); + +static void add_ghost_speakers( EFAP_VERTEX *vertexArray, int16_t *numVtx, const int16_t efip_flag ); + +static void sort_vertices( const EFAP_VERTEX *vertexArray, const int16_t *numVtx, int16_t *order ); + +static void add_vertex_to_convex_hull( const EFAP_VERTEX_DATA *vtxData, const int16_t vtxIdx, int16_t *vtxInHull, EFAP_LS_TRIANGLE *triArray, int16_t *szTri ); + +static void visible_edges( const EFAP_LS_TRIANGLE *triArray, const int16_t *visible, const int16_t numSurface, int16_t *numEdges, int16_t *edges ); + +static void flip_plane( const EFAP_VERTEX *vtxArray, int16_t *surface, const float centroid[3] ); + +static void remap_ghosts( EFAP_VERTEX *vtxArray, EFAP_LS_TRIANGLE *triArray, int16_t numSpk, int16_t *numVertex, int16_t numTri, float **downmixMatrix ); + +static void vertex_init( const float *aziSpk, const float *eleSpk, EFAP_VERTEX_DATA *efapVtxData ); + +static void efap_panning( const float azi, const float ele, const EFAP_POLYSET_DATA *polyData, float *bufferL ); + +static void get_poly_gains( const float azi, const float ele, const float aziPoly[EFAP_MAX_CHAN_NUM], const float elePoly[EFAP_MAX_CHAN_NUM], const int16_t numChan, float *buffer ); + +static float get_tri_gain( const float A[2], const float B[2], const float C[2], const float P_minus_A[2] ); + +#if defined( DEBUG_EFAP_POLY_TOFILE ) +static void get_poly_select( EFAP_POLYSET_DATA *polyData ); +#endif + + +/*-----------------------------------------------------------------------* + * EFAP Utils + *-----------------------------------------------------------------------*/ + +static void add_vertex( EFAP_VERTEX *vtxArray, const float azi, const float ele, const int16_t pos, const EFAP_VTX_DMX_TYPE ); + +static void efap_sort_s( int16_t *x, int16_t *idx, const int16_t len ); + + +static float vertex_distance( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE tri, const int16_t vtxIdx ); + +static float point_plane_distance( const float P1[3], const float P2[3], const float P3[3], const float X[3] ); + +static void efap_crossp( const float *v1, const float *v2, float *v ); + +static int16_t find_int_in_tri( const EFAP_LS_TRIANGLE *tri, const int16_t n, const int16_t r, int16_t *pos ); + +static void remove_vertex( EFAP_VERTEX *vtxArray, const int16_t idx, const int16_t L ); + +static int16_t get_neighbours( const EFAP_LS_TRIANGLE *triArray, const int16_t vtxIdx, const int16_t numTri, int16_t *neighbours ); + +static void matrix_times_row( float mat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF], const float *vec, const int16_t L, float *out ); + +static void tri_to_poly( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE *triArray, const int16_t numVtx, const int16_t numTri, int16_t sortedChan[EFAP_MAX_POLY_SET][EFAP_MAX_CHAN_NUM], int16_t *outLengthPS, int16_t outLengthSorted[EFAP_MAX_POLY_SET] ); + +static int16_t compare_poly( int16_t *old, int16_t lenOld, int16_t *new, int16_t lenNew ); + +static void sort_channels_vertex( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE *triArray, int16_t channels[EFAP_MAX_CHAN_NUM], const int16_t lengthChannels, int16_t idxTri ); + +static float efap_fmodf( const float x, const float y ); + +static int16_t get_poly_num( const float P[2], const EFAP_POLYSET_DATA *polyData ); + +static int16_t in_poly( const float P[2], const EFAP_POLYSET poly ); + +static int16_t in_tri( float A[2], float B[2], float C[2], float P_minus_A[2] ); + + +/*-----------------------------------------------------------------------* + * Global function definitions + *-----------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------------* + * efap_init_data() + * + * Wrap the internal functions to initialize the EFAP data structure + *-------------------------------------------------------------------------*/ + +ivas_error efap_init_data( + EFAP_HANDLE *hEFAPdata, /* i/o: handle for EFAP data structure that will be initialized */ + const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ + const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ + const int16_t num_speaker_nodes, /* i : number of speaker nodes in the set */ + const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ +) +{ + /* Handle instance declaration */ + EFAP *efap; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Basic init checks */ + if ( !speaker_node_azi_deg || !speaker_node_ele_deg ) + { + hEFAPdata = NULL; + /* TODO: is this path correct behaviour or and error ? */ + return IVAS_ERR_OK; + } + + /*-----------------------------------------------------------------* + * Allocate memory + *-----------------------------------------------------------------*/ + + /* Memory Allocations for efap */ + if ( ( efap = (EFAP *) count_malloc( sizeof( EFAP ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP handle\n" ) ); + } + + /* Memory Allocation and update for aziSpk & eleSpk arrays*/ + if ( ( efap->aziSpk = (float *) count_malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP speaker azimuths\n" ) ); + } + if ( ( efap->eleSpk = (float *) count_malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP speaker elevations\n" ) ); + } + + /* Memory Allocation for vertexArray */ + if ( ( efap->vtxData.vertexArray = (EFAP_VERTEX *) count_malloc( ( num_speaker_nodes + EFAP_MAX_GHOST_LS ) * sizeof( EFAP_VERTEX ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP Vertex Array\n" ) ); + } + + /* Memory allocation for the tmp buffer short */ + if ( ( efap->bufferShort = (float *) count_malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP bufferS\n" ) ); + } + + /*-----------------------------------------------------------------* + * Initialize values + *-----------------------------------------------------------------*/ + + efap->numSpk = num_speaker_nodes; + + /* The number of vertex is first set to the number of LS but will evolve further */ + efap->vtxData.numVtx = num_speaker_nodes; + + /* Loudspeaker configuration */ + mvr2r( speaker_node_azi_deg, efap->aziSpk, num_speaker_nodes ); + mvr2r( speaker_node_ele_deg, efap->eleSpk, num_speaker_nodes ); + + /* Initialization of the vertex */ + vertex_init( efap->aziSpk, efap->eleSpk, &efap->vtxData ); + + /* Initialization of polygons and ghost LS */ + if ( ( error = poly_init( efap, efap_mode ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* Memory allocation for the tmp buffer long */ + if ( ( efap->bufferLong = (float *) count_malloc( efap->vtxData.numVtx * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP bufferL\n" ) ); + } + + *hEFAPdata = efap; + return error; +} + + +/*-------------------------------------------------------------------------* + * efap_determine_gains() + * + * Obtain amplitude panning gains for all speaker nodes based on the + * given direction + *-------------------------------------------------------------------------*/ + +void efap_determine_gains( + EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ + float *gains, /* o : gain vector for speaker nodes for given direction */ + const float azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ + const float ele_deg, /* i : elevation in degrees for panning direction (positive up) */ + const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ +) +{ + int16_t i, j; + float azi_wrap, ele_wrap; + float normBuffer; + + /* Resetting bufferShort and bufferLong */ + set_zero( hEFAPdata->bufferShort, hEFAPdata->numSpk ); + set_zero( hEFAPdata->bufferLong, hEFAPdata->vtxData.numVtx ); + + /* Wrap angles to correct range */ + panning_wrap_angles( azi_deg, ele_deg, &azi_wrap, &ele_wrap ); + + /* Panning */ + efap_panning( azi_wrap, ele_wrap, &hEFAPdata->polyData, hEFAPdata->bufferLong ); + + if ( efap_mode == EFAP_MODE_EFAP ) + { + normBuffer = 0.f; + for ( j = 0; j < hEFAPdata->numSpk; ++j ) + { + hEFAPdata->bufferShort[j] = 0.f; + /* Multiplying by the downmixMatrix */ + for ( i = 0; i < hEFAPdata->vtxData.numVtx; ++i ) + { + hEFAPdata->bufferShort[j] += hEFAPdata->bufferLong[i] * hEFAPdata->dmTranspose[i][j]; + } + normBuffer = normBuffer + hEFAPdata->bufferShort[j] * hEFAPdata->bufferShort[j]; + } + normBuffer = 1.f / sqrtf( normBuffer ); + + for ( j = 0; j < hEFAPdata->numSpk; ++j ) + { + hEFAPdata->bufferShort[j] *= normBuffer; + } + } + else + { + normBuffer = 0.f; + for ( j = 0; j < hEFAPdata->numSpk; ++j ) + { + hEFAPdata->bufferShort[j] = 0.f; + /* Multiplying by the downmixMatrix */ + for ( i = 0; i < hEFAPdata->vtxData.numVtx; ++i ) + { + hEFAPdata->bufferShort[j] += hEFAPdata->bufferLong[i] * hEFAPdata->dmTranspose[i][j]; + } + normBuffer = normBuffer + hEFAPdata->bufferShort[j]; + } + normBuffer = 1.f / normBuffer; + + for ( j = 0; j < hEFAPdata->numSpk; ++j ) + { + hEFAPdata->bufferShort[j] = sqrtf( hEFAPdata->bufferShort[j] * normBuffer ); + } + } + + /* Copy gains to output */ + mvr2r( hEFAPdata->bufferShort, gains, hEFAPdata->numSpk ); + + return; +} + + +/*-------------------------------------------------------------------------* + * efap_free_data() + * + * Wrapper to free EFAP data structure + *-------------------------------------------------------------------------*/ + +void efap_free_data( + EFAP_HANDLE *hEFAPdata /* i/o: EFAP handle to be freed */ +) +{ + int16_t i, dim1; + void **p_dmTranspose; + + if ( hEFAPdata == NULL || *hEFAPdata == NULL ) + { + return; + } + + dim1 = ( *hEFAPdata )->numTot; + + /* instance buffer members */ + count_free( ( *hEFAPdata )->aziSpk ); + ( *hEFAPdata )->aziSpk = NULL; + + count_free( ( *hEFAPdata )->eleSpk ); + ( *hEFAPdata )->eleSpk = NULL; + + count_free( ( *hEFAPdata )->vtxData.vertexArray ); + ( *hEFAPdata )->vtxData.vertexArray = NULL; + + count_free( ( *hEFAPdata )->vtxData.vtxOrder ); + ( *hEFAPdata )->vtxData.vtxOrder = NULL; + + count_free( ( *hEFAPdata )->bufferLong ); + ( *hEFAPdata )->bufferLong = NULL; + + count_free( ( *hEFAPdata )->bufferShort ); + ( *hEFAPdata )->bufferShort = NULL; + + p_dmTranspose = (void **) ( *hEFAPdata )->dmTranspose; + for ( i = 0; i < dim1; i++ ) + { + count_free( p_dmTranspose[i] ); + } + count_free( p_dmTranspose ); + + /* instance */ + count_free( *hEFAPdata ); + *hEFAPdata = NULL; + + return; +} + + +/*-----------------------------------------------------------------------* + * Local function definitions + *-----------------------------------------------------------------------*/ + + +/*-------------------------------------------------------------------------* + * poly_init() + * + * Main function for the Efap initialization whose purpose is to initialize + * the different polygons and to add the ghost speakers + *-------------------------------------------------------------------------*/ + +static ivas_error poly_init( + EFAP *efap, /* i/o: A pointer to a handle to efap instance */ + const int16_t efip_flag /* i : flag to indicate whether initialization is for EFIP (used for ALLRAD) */ +) +{ + int16_t n, m, j; + int16_t finalLength, lengthTri2PolyPS; + int16_t lengthTri2PolySorted[EFAP_MAX_POLY_SET]; + int16_t sortedChan[EFAP_MAX_POLY_SET][EFAP_MAX_CHAN_NUM]; + float tmpMax, tmpMin; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Safety Check */ + assert( efap != NULL && "EFAP: efap == NULL" ); + + for ( n = 0; n < EFAP_MAX_POLY_SET; n++ ) + { + set_s( sortedChan[n], 0, EFAP_MAX_CHAN_NUM ); + } + + /* Computing the different ghost vertex, the downmix matrix and the triangle array */ + if ( ( error = sphere_triangulation( efap->numSpk, &efap->vtxData, &efap->polyData, &efap->dmTranspose, &efap->numTot, efip_flag ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* set isNaN for ghost loudspeakers */ + for ( n = 0; n < efap->vtxData.numVtx; ++n ) + { + if ( efap->vtxData.vertexArray[n].ele > 90.0 - 1e-6 || + efap->vtxData.vertexArray[n].ele < 1e-6 - 90.0 ) + { + efap->vtxData.vertexArray[n].isNaN = 1; + } + } + + /* Converting the triangle to polygon structure */ + tri_to_poly( efap->vtxData.vertexArray, efap->polyData.triArray, efap->vtxData.numVtx, efap->polyData.numTri, sortedChan, &lengthTri2PolyPS, lengthTri2PolySorted ); + + /* Completing the polyData Structure */ + finalLength = -1; + + for ( n = 0; n < lengthTri2PolyPS; ++n ) + { + m = finalLength + 1; + + /* Complete the fields of the polygon */ + for ( j = 0; j < lengthTri2PolySorted[n]; ++j ) + { + efap->polyData.polysetArray[m].chan[j] = sortedChan[n][j]; + efap->polyData.polysetArray[m].polyAzi[j] = efap->vtxData.vertexArray[sortedChan[n][j]].azi; + efap->polyData.polysetArray[m].polyEle[j] = efap->vtxData.vertexArray[sortedChan[n][j]].ele; + efap->polyData.polysetArray[m].isNaN[j] = efap->vtxData.vertexArray[sortedChan[n][j]].isNaN; + } + + efap->polyData.polysetArray[m].numChan = lengthTri2PolySorted[n]; + + /* In case tmpMax - tmpMin > 180, wrap polygon azimuth */ + maximum( efap->polyData.polysetArray[m].polyAzi, lengthTri2PolySorted[n], &tmpMax ); + minimum( efap->polyData.polysetArray[m].polyAzi, lengthTri2PolySorted[n], &tmpMin ); + + if ( ( tmpMax - tmpMin ) > 180 ) + { + for ( j = 0; j < lengthTri2PolySorted[n]; ++j ) + { + assert( ( m + 2 < EFAP_MAX_POLY_SET ) && "EFAP: maximum polygons exceeded!" ); + + /* add two new polygons with azimuths wrapped to differing bounds */ + efap->polyData.polysetArray[m + 1].polyAzi[j] = efap_fmodf( efap->polyData.polysetArray[m].polyAzi[j], 360 ); + efap->polyData.polysetArray[m + 2].polyAzi[j] = efap->polyData.polysetArray[m + 1].polyAzi[j] - 360; + + /* Copy the rest of the fields */ + efap->polyData.polysetArray[m + 1].chan[j] = efap->polyData.polysetArray[m].chan[j]; + efap->polyData.polysetArray[m + 1].polyEle[j] = efap->polyData.polysetArray[m].polyEle[j]; + efap->polyData.polysetArray[m + 1].isNaN[j] = efap->polyData.polysetArray[m].isNaN[j]; + efap->polyData.polysetArray[m + 1].numChan = lengthTri2PolySorted[n]; + + efap->polyData.polysetArray[m + 2].chan[j] = efap->polyData.polysetArray[m].chan[j]; + efap->polyData.polysetArray[m + 2].polyEle[j] = efap->polyData.polysetArray[m].polyEle[j]; + efap->polyData.polysetArray[m + 2].isNaN[j] = efap->polyData.polysetArray[m].isNaN[j]; + efap->polyData.polysetArray[m + 2].numChan = lengthTri2PolySorted[n]; + } + finalLength += 2; + } + ++finalLength; + } + ++finalLength; + + /* Updating the number of polygons */ + efap->polyData.numPoly = finalLength; + + +#if defined( DEBUG_EFAP_POLY_TOFILE ) + get_poly_select( &efap->polyData ); +#endif + return error; +} + + +#if defined( DEBUG_EFAP_POLY_TOFILE ) +static void get_poly_select( + EFAP_POLYSET_DATA *polyData /* o : Polygon data structure */ +) +{ + int16_t azi_index, ele_index; + float P[2]; + +#ifdef DEBUG_EFAP_POLY_TOFILE + /* Write polygon selection table to .csv file, modify filename according to selected loudspeaker layout! */ + static FILE *pF = NULL; + if ( pF == NULL ) + pF = fopen( "./res/efap_poly_select_cicpX.csv", "w" ); +#endif + + for ( azi_index = 0; azi_index <= ( 360 / PANNING_AZI_RESOLUTION ); azi_index++ ) + { + P[0] = (float) ( ( azi_index * PANNING_AZI_RESOLUTION ) - 180 ); + for ( ele_index = 0; ele_index <= ( 180 / PANNING_ELE_RESOLUTION ); ele_index++ ) + { + P[1] = (float) ( ( ele_index * PANNING_ELE_RESOLUTION ) - 90 ); + +#ifdef DEBUG_EFAP_POLY_TOFILE + if ( pF != NULL ) + fprintf( pF, "%d,", get_poly_num( P, polyData ) ); +#endif + } + } + +#ifdef DEBUG_EFAP_POLY_TOFILE + if ( pF != NULL ) + fclose( pF ); +#endif + + return; +} +#endif + + +/*-------------------------------------------------------------------------* + * sphere_triangulation() + * + * + *-------------------------------------------------------------------------*/ + +static ivas_error sphere_triangulation( + const int16_t numSpk, /* i : Number of speakers */ + EFAP_VERTEX_DATA *vtxData, /* i/o: Vertex data structure */ + EFAP_POLYSET_DATA *polyData, /* o : Polygon data structure */ + float ***dmTranspose, /* o : Transpose of the downmix matrix */ + int16_t *numTot, /* o : Number of speakers (real + ghost) */ + const int16_t efip_flag /* i : flag to indicate whether initialization is for EFIP (used for ALLRAD) */ +) +{ + int16_t i; + void **p_dmTranspose; + int16_t vtxInHull[EFAP_MAX_SIZE_TMP_BUFF]; + + set_s( vtxInHull, 0, EFAP_MAX_SIZE_TMP_BUFF ); + + /* Add Imaginary Speakers */ + add_ghost_speakers( vtxData->vertexArray, &vtxData->numVtx, efip_flag ); + + /* Sort the vertices according to their index */ + if ( ( vtxData->vtxOrder = (int16_t *) count_malloc( vtxData->numVtx * sizeof( int16_t ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP Vertex Order\n" ) ); + } + + sort_vertices( vtxData->vertexArray, &vtxData->numVtx, vtxData->vtxOrder ); + + /* Computing the initial Polyeder */ + initial_polyeder( vtxData, polyData->triArray, &polyData->numTri, &vtxInHull[0] ); + + /* Add the vertex to the convex hull */ + for ( i = 0; i < vtxData->numVtx; ++i ) + { + add_vertex_to_convex_hull( vtxData, vtxData->vtxOrder[i], &vtxInHull[0], polyData->triArray, &polyData->numTri ); + } + + assert( polyData->numTri != 0 && "EFAP: failed to construct convex hull!" ); + + /* Allocate the DM matrix transpose */ + if ( ( p_dmTranspose = count_malloc( vtxData->numVtx * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "EFAP: can not allocate memory for dmTranspose\n" ) ); + } + + /* Store the value of numVtx to be used for freeing later (numVtx will change after remap_ghosts() ) */ + *numTot = vtxData->numVtx; + + for ( i = 0; i < vtxData->numVtx; i++ ) + { + if ( ( p_dmTranspose[i] = count_malloc( numSpk * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "EFAP: can not allocate memory for dmTranspose\n" ) ); + } + } + *dmTranspose = (float **) p_dmTranspose; + + /* Remap Ghosts */ + remap_ghosts( vtxData->vertexArray, polyData->triArray, numSpk, &vtxData->numVtx, polyData->numTri, *dmTranspose ); + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------------* + * initial_polyeder() + * + * + *-------------------------------------------------------------------------*/ + +static void initial_polyeder( + EFAP_VERTEX_DATA *vtxData, /* i : Vertex data structure */ + EFAP_LS_TRIANGLE *triArray, /* o : Triangle array structure */ + int16_t *numTri, /* o : Size of triangle array */ + int16_t *vtxInHull /* o : Flag if the vertex was added to the inital simplex */ +) +{ + int16_t i; + int16_t numVtx; + int16_t tmpSurface[3]; + int16_t tetrahedron[4]; + float tmp; + float centroid[3]; + float tmpCross[3]; + float tmp1[3], tmp2[3], tmp3[3]; + + /* Safety check */ + assert( triArray != NULL && "EFAP: triArray==NULL" ); + + /* initialize variables */ + set_s( tmpSurface, -1, 3 ); + set_zero( centroid, 3 ); + set_zero( tmp1, 3 ); + set_zero( tmp2, 3 ); + set_zero( tmp3, 3 ); + set_zero( tmpCross, 3 ); + + numVtx = vtxData->numVtx; + + /* seed vertices */ + for ( i = 0; i < 4; i++ ) + { + tetrahedron[i] = i; + } + + /* 1. attempt to create an edge with nonzero length */ + while ( ( vtxData->vertexArray[tetrahedron[0]].azi == vtxData->vertexArray[tetrahedron[1]].azi ) && + ( vtxData->vertexArray[tetrahedron[0]].ele == vtxData->vertexArray[tetrahedron[1]].ele ) ) + { + tetrahedron[1]++; + assert( tetrahedron[1] < numVtx && "EFAP: convex hull construction failed, vertices are coincident!" ); + } + + /* 2. attempt to create a triangle with nonzero area */ + tmp = 0.0f; + v_sub( vtxData->vertexArray[tetrahedron[1]].pos, vtxData->vertexArray[tetrahedron[0]].pos, tmp1, 3 ); + while ( tetrahedron[2] < numVtx ) + { + v_sub( vtxData->vertexArray[tetrahedron[2]].pos, vtxData->vertexArray[tetrahedron[0]].pos, tmp2, 3 ); + efap_crossp( tmp1, tmp2, tmpCross ); + for ( i = 0; i < 3; i++ ) + { + tmp += tmpCross[i] * tmpCross[i]; + } + if ( fabsf( tmp ) > ( POLY_THRESH * POLY_THRESH ) ) /* compare tmp against POLY_THRESH^2 instead of sqrtf(tmp) */ + { + break; + } + tetrahedron[2]++; + } + assert( tetrahedron[2] < numVtx && "EFAP: convex hull construction failed, vertices are colinear!" ); + + /* 3. attempt to create a tetrahedron with nonzero volume */ + tmp = 0.0f; + while ( tetrahedron[3] < numVtx ) + { + v_sub( vtxData->vertexArray[tetrahedron[3]].pos, vtxData->vertexArray[tetrahedron[0]].pos, tmp3, 3 ); + tmp = dotp( tmp3, tmpCross, 3 ); + if ( fabsf( tmp ) > POLY_THRESH ) + { + break; + } + tetrahedron[3]++; + } + assert( tetrahedron[3] < numVtx && "EFAP: convex hull construction failed, vertices are coplanar!" ); + + /* 4. compute the centroid of the initial tetrahedron */ + for ( i = 0; i < 4; i++ ) + { + vtxInHull[tetrahedron[i]] = 1; /* set vertex as added to hull*/ + centroid[0] += vtxData->vertexArray[tetrahedron[i]].pos[0]; + centroid[1] += vtxData->vertexArray[tetrahedron[i]].pos[1]; + centroid[2] += vtxData->vertexArray[tetrahedron[i]].pos[2]; + } + + centroid[0] /= 4; + centroid[1] /= 4; + centroid[2] /= 4; + + /* 5. create and orient planes */ + tmpSurface[0] = tetrahedron[0]; + tmpSurface[1] = tetrahedron[1]; + tmpSurface[2] = tetrahedron[2]; + flip_plane( vtxData->vertexArray, tmpSurface, centroid ); + mvs2s( tmpSurface, triArray[0].LS, 3 ); + + tmpSurface[0] = tetrahedron[0]; + tmpSurface[1] = tetrahedron[1]; + tmpSurface[2] = tetrahedron[3]; + flip_plane( vtxData->vertexArray, tmpSurface, centroid ); + mvs2s( tmpSurface, triArray[1].LS, 3 ); + + tmpSurface[0] = tetrahedron[0]; + tmpSurface[1] = tetrahedron[2]; + tmpSurface[2] = tetrahedron[3]; + flip_plane( vtxData->vertexArray, tmpSurface, centroid ); + mvs2s( tmpSurface, triArray[2].LS, 3 ); + + tmpSurface[0] = tetrahedron[1]; + tmpSurface[1] = tetrahedron[2]; + tmpSurface[2] = tetrahedron[3]; + flip_plane( vtxData->vertexArray, tmpSurface, centroid ); + mvs2s( tmpSurface, triArray[3].LS, 3 ); + + /* set numTri */ + *numTri = 4; + + return; +} + + +/*-------------------------------------------------------------------------* + * add_ghost_speakers() + * + * + *-------------------------------------------------------------------------*/ + +static void add_ghost_speakers( + EFAP_VERTEX *vertexArray, /* i/o: Vertex array */ + int16_t *numVtx, /* i/o: Size of vertex array */ + const int16_t efip_flag /* i : flag to indicate whether initialization is for EFIP (used for ALLRAD) */ +) +{ + int16_t numVertex; + int16_t lengthVertGhst; /* Nb of vertical ghost added */ + int16_t lengthHorGhst; /* Nb of Horizontal Ghost */ + int16_t i, j, k, n, a; /* Integer for loops */ + int16_t num_new; /* Number of new vertices to add */ + float maxAngle; /* Max azimuth tolerance for extend the LS setup horizontaly */ + float newDiff; /* Angle differences that will help us set the extended LS setup */ + float newAzi; /* New azimuth for the new horizontal LS */ + float ele[EFAP_MAX_SIZE_TMP_BUFF]; + float tmpEle; + float tmpAzi[EFAP_MAX_SIZE_TMP_BUFF]; + float tmpAngleDiff[EFAP_MAX_SIZE_TMP_BUFF]; /* tmp array of angles differences */ + float sectors[EFAP_MAX_SIZE_TMP_BUFF]; /* Help us determine the zone where we should extend LS */ + EFAP_VTX_DMX_TYPE vtxDmxType; + + vtxDmxType = EFAP_DMX_INTENSITY; + numVertex = *numVtx; + maxAngle = 1.f / 160.0f; + + /* Extracting Azi and Ele for computation purposes */ + for ( i = 0; i < numVertex; ++i ) + { + ele[i] = vertexArray[i].ele; + } + + /* ADD VOG IF NECESSERAY (i.e. if the elevation of the highest LS is < 90 deg) */ + a = 0; + maximum( ele, numVertex, &tmpEle ); + + lengthVertGhst = 0; + if ( tmpEle < 90.0f ) + { + if ( efip_flag ) + { + if ( tmpEle > 45.0f ) + { + vtxDmxType = EFAP_DMX_NONE; + } + else + { + vtxDmxType = EFAP_DMX_AMPLITUDE; + } + } + + add_vertex( vertexArray, 0, 90, numVertex + a, vtxDmxType ); + + ++lengthVertGhst; + ++a; + } + + /* ADD VOH IF NECESSERAY (i.e. if the elevation of the lowest LS is > -90 deg) */ + minimum( ele, numVertex, &tmpEle ); + if ( tmpEle > -90.0f ) + { + if ( efip_flag ) + { + if ( tmpEle < -45.0f ) + { + vtxDmxType = EFAP_DMX_NONE; + } + else + { + vtxDmxType = EFAP_DMX_AMPLITUDE; + } + } + + add_vertex( vertexArray, 0, -90, numVertex + a, vtxDmxType ); + + ++lengthVertGhst; + ++a; + } + + /* LIST ALL SURROUNDING loudspeakers */ + k = 0; + + for ( i = 0; i < numVertex; ++i ) + { + if ( fabsf( vertexArray[i].ele ) < 45.0f ) + { + tmpAzi[k] = vertexArray[i].azi; + ++k; + } + } + + lengthHorGhst = 0; + if ( k == 0 ) /* no speakers found: add a triangle of ghost speakers */ + { + add_vertex( vertexArray, 0, 0, numVertex + a, EFAP_DMX_INTENSITY ); + add_vertex( vertexArray, 120, 0, numVertex + a + 1, EFAP_DMX_INTENSITY ); + add_vertex( vertexArray, 240, 0, numVertex + a + 2, EFAP_DMX_INTENSITY ); + a += 3; + lengthHorGhst += 3; + } + else if ( k == 1 ) /* only one speaker found: add two ghost speakers to complete a triangle */ + { + add_vertex( vertexArray, tmpAzi[0] + 120, 0, numVertex + a, EFAP_DMX_INTENSITY ); + add_vertex( vertexArray, tmpAzi[0] + 240, 0, numVertex + a + 1, EFAP_DMX_INTENSITY ); + a += 2; + lengthHorGhst += 2; + } + else /* fill gaps greater than maxAngle */ + { + /* Here, k correspond to the number of LS whose ele is < 45 deg, should be = numVertex */ + v_sort( tmpAzi, 0, k - 1 ); + + /* The next lines correspond to angle_diff = [azi(2:end), azi(1) + 360] - azi; in Matlab */ + for ( i = 0; i < k - 1; ++i ) + { + tmpAngleDiff[i] = tmpAzi[i + 1] - tmpAzi[i]; + sectors[i] = ceilf( tmpAngleDiff[i] * maxAngle ); + + if ( sectors[i] > 1 ) + { + ++lengthHorGhst; + } + } + tmpAngleDiff[k - 1] = tmpAzi[0] + 360 - tmpAzi[k - 1]; + + sectors[k - 1] = ceilf( tmpAngleDiff[k - 1] * maxAngle ); + + if ( sectors[k - 1] > 1 ) + { + ++lengthHorGhst; + } + + /* Adding new virtual speakers */ + n = 0; + + for ( i = 0; i < k; ++i ) + { + ++n; + + if ( sectors[i] > 1 ) + { + newDiff = tmpAngleDiff[i] / sectors[i]; + num_new = (int16_t) ( sectors[i] - 1.0f ); + + for ( j = 0; j < num_new; ++j ) + { + newAzi = tmpAzi[i] + ( j + 1 ) * newDiff; + + add_vertex( vertexArray, newAzi, 0, numVertex + a, EFAP_DMX_INTENSITY ); + ++n; + ++a; + + if ( j > 0 ) + { + ++lengthHorGhst; + } + } + } + } + } + *numVtx = numVertex + lengthHorGhst + lengthVertGhst; + + return; +} + + +/*-------------------------------------------------------------------------* + * sort_vertices() + * + * + *-------------------------------------------------------------------------*/ + +static void sort_vertices( + const EFAP_VERTEX *vertexArray, /* i : Vertex array */ + const int16_t *numVtx, /* i : Size of vertex array */ + int16_t *order /* o : Original index positions */ +) +{ + int16_t tmpIdx[EFAP_MAX_SIZE_TMP_BUFF]; + int16_t i; + + /* Initializing tmpIdx */ + for ( i = 0; i < *numVtx; ++i ) + { + tmpIdx[i] = vertexArray[i].idx; + } + + /* Sorting indexes */ + efap_sort_s( tmpIdx, order, *numVtx ); + + return; +} + + +/*-------------------------------------------------------------------------* + * add_vertex_to_convex_hull() + * + * + *-------------------------------------------------------------------------*/ + +static void add_vertex_to_convex_hull( + const EFAP_VERTEX_DATA *vtxData, /* i : Vertex data structure */ + const int16_t vtxIdx, /* i : Vertex to be added to the hull */ + int16_t *vtxInHull, /* i/o: Array indicating whether the vertex is part of the hull */ + EFAP_LS_TRIANGLE *triArray, /* i/o: Triangle array */ + int16_t *szTri /* i/o: Size of Triangle array */ +) +{ + int16_t i, k, l; + int16_t visible[EFAP_MAX_SIZE_TMP_BUFF]; + int16_t edges[EFAP_MAX_SIZE_TMP_BUFF]; + int16_t numEdges[1]; + int16_t surface[3]; + float numHullVtx; + float centroid[3]; + const float threshold = -1e-6f; + float tmpDist; + EFAP_LS_TRIANGLE triArrayNew[EFAP_MAX_POLY_SET]; + + /* If the vertex is already part of the hull, nothing must be done */ + if ( vtxInHull[vtxIdx] ) + { + return; + } + + /* Compute the centroid of the current convex hull */ + numHullVtx = 0; + set_zero( centroid, 3 ); + for ( i = 0; i < vtxData->numVtx; i++ ) + { + if ( vtxInHull[i] ) + { + numHullVtx++; + centroid[0] += vtxData->vertexArray[i].pos[0]; + centroid[1] += vtxData->vertexArray[i].pos[1]; + centroid[2] += vtxData->vertexArray[i].pos[2]; + } + } + numHullVtx = 1.0f / numHullVtx; + + centroid[0] *= numHullVtx; + centroid[1] *= numHullVtx; + centroid[2] *= numHullVtx; + + /* Processing */ + k = 0; + l = 0; + + for ( i = 0; i < *szTri; ++i ) + { + tmpDist = vertex_distance( vtxData->vertexArray, triArray[i], vtxIdx ); + + if ( tmpDist > threshold ) + { + visible[k] = i; + ++k; + } + else + { + mvs2s( triArray[i].LS, triArrayNew[l].LS, 3 ); + ++l; + } + } + + visible_edges( triArray, visible, k, numEdges, edges ); + + for ( i = 0; i < numEdges[0]; i += 2 ) + { + surface[0] = edges[i]; + surface[1] = edges[i + 1]; + surface[2] = vtxIdx; + flip_plane( vtxData->vertexArray, surface, centroid ); + + mvs2s( surface, triArrayNew[l].LS, 3 ); + ++l; + } + + /* Outputs */ + for ( i = 0; i < l; i++ ) + { + mvs2s( triArrayNew[i].LS, triArray[i].LS, 3 ); + } + *szTri = l; + + /* Flag the vertex as added to the hull */ + vtxInHull[vtxIdx] = 1; + return; +} + + +/*-------------------------------------------------------------------------* + * visible_edges() + * + * + *-------------------------------------------------------------------------*/ + +static void visible_edges( + const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ + const int16_t *visible, /* i : Visible surface flag */ + const int16_t numSurface, /* i : Number of surfaces */ + int16_t *numEdges, /* i/o: Number of edges */ + int16_t *edges /* i/o: Array of edges */ +) +{ + int16_t maxVertex; + int16_t i, j, k; + int16_t a, b; + int16_t nbOfEdges; + int16_t tmpSurface[4]; + int16_t counter[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; + int16_t counterTranspose[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; + float tmpMax[EFAP_MAX_SIZE_TMP_BUFF]; + + /* Set counter and counterTranspose to 0 */ + for ( i = 0; i < EFAP_MAX_SIZE_TMP_BUFF; i++ ) + { + set_s( counter[i], 0, EFAP_MAX_SIZE_TMP_BUFF ); + set_s( counterTranspose[i], 0, EFAP_MAX_SIZE_TMP_BUFF ); + } + + /* Finding the max vertex */ + for ( i = 0; i < numSurface; ++i ) + { + tmpMax[i] = (float) triArray[visible[i]].LS[0]; + for ( j = 1; j < 3; ++j ) + { + if ( tmpMax[i] < triArray[visible[i]].LS[j] ) + { + tmpMax[i] = (float) triArray[visible[i]].LS[j]; + } + } + } + maxVertex = (int16_t) tmpMax[maximum( tmpMax, numSurface, NULL )]; + + for ( i = 0; i < numSurface; ++i ) + { + tmpSurface[0] = triArray[visible[i]].LS[0]; + tmpSurface[1] = triArray[visible[i]].LS[1]; + tmpSurface[2] = triArray[visible[i]].LS[2]; + tmpSurface[3] = triArray[visible[i]].LS[0]; + + for ( j = 0; j < 3; ++j ) + { + a = tmpSurface[j]; + b = tmpSurface[j + 1]; + counter[a][b] = counter[a][b] + 1; + counterTranspose[b][a] = counter[a][b]; + } + } + + nbOfEdges = 0; + for ( i = 0; i < maxVertex + 1; ++i ) + { + for ( j = 0; j < maxVertex + 1; ++j ) + { + counter[i][j] = counterTranspose[i][j] + counterTranspose[j][i]; + if ( counter[i][j] == 1 ) + { + ++nbOfEdges; + } + } + } + + /* Finding the edges */ + k = 0; + + for ( a = 0; a < maxVertex; ++a ) + { + for ( b = a + 1; b < maxVertex + 1; ++b ) + { + if ( counter[a][b] == 1 ) + { + edges[k] = a; + edges[k + 1] = b; + k += 2; + } + } + } + + /* Outputs */ + *numEdges = k; + + return; +} + + +/*-------------------------------------------------------------------------* + * flip_plane() + * + * + *-------------------------------------------------------------------------*/ + +static void flip_plane( + const EFAP_VERTEX *vtxArray, /* i : Vertex array */ + int16_t *surface, /* i/o: Surface/vertices to be flipped */ + const float centroid[3] /* i : Centroid of convex hull from which to orient the planes outward */ +) +{ + int16_t tmp; + float dist; + + dist = point_plane_distance( + vtxArray[surface[0]].pos, + vtxArray[surface[1]].pos, + vtxArray[surface[2]].pos, + centroid ); + + if ( dist > 0 ) + { + /*efap_flipLeftRight( surface, 3 );*/ + tmp = surface[0]; + surface[0] = surface[2]; + surface[2] = tmp; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * remap_ghosts() + * + * + *-------------------------------------------------------------------------*/ + +static void remap_ghosts( + EFAP_VERTEX *vtxArray, /* i/o: Vertex array */ + EFAP_LS_TRIANGLE *triArray, /* i/o: Triangle array */ + int16_t numSpk, /* i : Number of speakers */ + int16_t *numVertex, /* i/o: Size of vertex array */ + int16_t numTri, /* i : Size of triangle array */ + float **downmixMatrixTranspose /* o : Transpose of downmix matrix */ +) +{ + int16_t numGhst = 0; + int16_t numVtx = *numVertex; + int16_t numTot; + int16_t g; + int16_t i, j; + int16_t tmpL; + float inv_tmpL; + int16_t posFound[2]; + int16_t neighbours[EFAP_MAX_SIZE_TMP_BUFF]; + float tmpVec[EFAP_MAX_SIZE_TMP_BUFF]; + float tmpVec2[EFAP_MAX_SIZE_TMP_BUFF]; + float tmpMat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; + float tmpNewMat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; + float tmpDist; + const float thresh = 1e-4f; + + set_f( tmpVec, 0.0f, EFAP_MAX_SIZE_TMP_BUFF ); + set_f( tmpVec2, 0.0f, EFAP_MAX_SIZE_TMP_BUFF ); + + /* Finding unused ghosts (i.e. ghost speakers that aren't used for triangulation */ + for ( g = numVtx - 1; g > numSpk - 1; --g ) + { + /* find(triangle_mat == ghost, 1, 'first') */ + if ( find_int_in_tri( triArray, g, numTri, posFound ) == 0 ) + { + remove_vertex( vtxArray, g, numVtx ); + --numVtx; + for ( i = 0; i < numTri; ++i ) + { + for ( j = 0; j < 3; ++j ) + { + if ( triArray[i].LS[j] > g ) + { + triArray[i].LS[j] = g - 1; + } + } + } + } + else + { + ++numGhst; + } + } + + /* Final number of LS (real + ghosts) */ + numTot = numSpk + numGhst; + + /* Initializing tmpMat as the identity matrix */ + for ( i = 0; i < numTot; ++i ) + { + set_f( tmpMat[i], 0.0f, numTot ); + set_f( tmpNewMat[i], 0.0f, numTot ); + + tmpMat[i][i] = 1; + tmpNewMat[i][i] = 1; + } + + /* Generate initial sound energy distribution matrix */ + for ( i = numSpk; i < numTot; ++i ) + { + tmpL = get_neighbours( triArray, i, numTri, neighbours ); + + /* Initializing the column to 0 */ + for ( j = 0; j < numTot; ++j ) + { + tmpMat[j][i] = 0; + tmpNewMat[j][i] = 0; + } + + /* The neighbours are set to 1.0/tmpL */ + inv_tmpL = 1.f / tmpL; + for ( j = 0; j < tmpL; ++j ) + { + tmpMat[neighbours[j]][i] = inv_tmpL; + tmpNewMat[neighbours[j]][i] = inv_tmpL; + } + } + + /* Redistributing sound energy */ + for ( i = 0; i < numTot; ++i ) + { + for ( j = 0; j < numTot; ++j ) + { + tmpNewMat[i][j] = tmpMat[j][i]; + } + } + + for ( i = numSpk; i < numTot; ++i ) + { + mvr2r( tmpNewMat[i], tmpVec, numTot ); + + tmpDist = sum_f( &tmpVec[numSpk], numTot - numSpk ); + + while ( tmpDist > thresh ) + { + matrix_times_row( tmpMat, tmpVec, numTot, tmpVec2 ); + mvr2r( tmpVec2, tmpVec, numTot ); + set_zero( tmpVec2, numTot ); + tmpDist = sum_f( &tmpVec[numSpk], numTot - numSpk ); + } + mvr2r( tmpVec, tmpNewMat[i], numTot ); + } + + for ( i = 0; i < numSpk; ++i ) + { + /* Applying a sqrt(2) coeff and obtaining the dmMatrix*/ + for ( j = 0; j < numSpk; ++j ) + { + downmixMatrixTranspose[j][i] = sqrtf( tmpNewMat[j][i] ); + } + /* Downmix ghost loudspeakers according to dmxType */ + for ( ; j < numTot; ++j ) + { + switch ( vtxArray[j].dmxType ) + { + case EFAP_DMX_NONE: + downmixMatrixTranspose[j][i] = 0.f; + break; + case EFAP_DMX_AMPLITUDE: + downmixMatrixTranspose[j][i] = tmpNewMat[j][i]; + break; + case EFAP_DMX_INTENSITY: + default: + downmixMatrixTranspose[j][i] = sqrtf( tmpNewMat[j][i] ); + break; + } + } + } + + /* Output */ + *numVertex = numTot; + + return; +} + + +/*-------------------------------------------------------------------------* + * vertex_init() + * + * Initialize the vertex structures + *-------------------------------------------------------------------------*/ + +static void vertex_init( + const float *aziSpk, /* i : Azimuths of the LS setup */ + const float *eleSpk, /* i : Elevations of the LS setup */ + EFAP_VERTEX_DATA *efapVtxData /* i/o: Vertex data structure that will be updated */ +) +{ + int16_t i; + + /* Main Processing */ + for ( i = 0; i < efapVtxData->numVtx; i++ ) + { + add_vertex( efapVtxData->vertexArray, aziSpk[i], eleSpk[i], i, EFAP_DMX_INTENSITY ); + } + + return; +} + + +/*-------------------------------------------------------------------------* + * efap_panning() + * + * Compute the gain without applying the downmix Matrix and the norm of the array + *-------------------------------------------------------------------------*/ + +static void efap_panning( + const float azi, /* i : Value of the azimuth */ + const float ele, /* i : Value of the elevation */ + const EFAP_POLYSET_DATA *polyData, /* i : Polygon data */ + float *bufferL /* o : 1D array of length numSpk that will contain the tmp values */ +) +{ + int16_t i; + int16_t polyIdx; + int16_t numChan; + int16_t chan[EFAP_MAX_CHAN_NUM]; + float aziPoly[EFAP_MAX_CHAN_NUM]; + float elePoly[EFAP_MAX_CHAN_NUM]; + float tmpBuff[EFAP_MAX_CHAN_NUM]; + float normTmpBuff; + float P[2]; + float P_tmp[2]; + + P[0] = azi; + P[1] = ele; + + /* Finding in which polygon the point is */ + P_tmp[0] = roundf( P[0] / PANNING_AZI_RESOLUTION ); + P_tmp[1] = roundf( P[1] / PANNING_ELE_RESOLUTION ); + + P[0] = P_tmp[0] * PANNING_AZI_RESOLUTION; + P[1] = P_tmp[1] * PANNING_ELE_RESOLUTION; + + polyIdx = get_poly_num( P, polyData ); + + assert( polyIdx != -1 && "EFAP: polygon not found!" ); + + /* Extracting the chan, the azimuth and the ele of the considered poly */ + numChan = polyData->polysetArray[polyIdx].numChan; + + for ( i = 0; i < numChan; ++i ) + { + chan[i] = polyData->polysetArray[polyIdx].chan[i]; + aziPoly[i] = polyData->polysetArray[polyIdx].polyAzi[i]; + + if ( polyData->polysetArray[polyIdx].isNaN[i] == 1 ) + { + aziPoly[i] = P[0]; + } + + elePoly[i] = polyData->polysetArray[polyIdx].polyEle[i]; + } + + /* Computing the gain for the polygon */ + get_poly_gains( P[0], P[1], aziPoly, elePoly, numChan, tmpBuff ); + + /* Computing the norm of the tmp buffer */ + normTmpBuff = dotp( tmpBuff, tmpBuff, numChan ); + normTmpBuff = sqrtf( normTmpBuff ); + + /* Updating the buffer structure */ + normTmpBuff = 1.f / normTmpBuff; + for ( i = 0; i < numChan; ++i ) + { + bufferL[chan[i]] = tmpBuff[i] * normTmpBuff; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * get_poly_gains() + * + * Compute the gain for a precise polygon + *-------------------------------------------------------------------------*/ + +static void get_poly_gains( + const float azi, /* i : Value of the azimuth */ + const float ele, /* i : Value of the elevation */ + const float aziPoly[EFAP_MAX_CHAN_NUM], /* i : Azimuths of the considered polygons */ + const float elePoly[EFAP_MAX_CHAN_NUM], /* i : Elevations of the considered polygons */ + const int16_t numChan, /* i : Length of aziPoly & elePoly */ + float *buffer /* o : 1D array of length numSpk that will contain the tmp values */ +) +{ + int16_t i, j; + int16_t idx1, idx2; + float P[2]; + float A[2], B[2], C[2]; + float P_minus_A[2]; + + P[0] = azi; + P[1] = ele; + + /* Processing, we search for the triangle in which belong P, then we compute the gain */ + for ( i = 1; i < numChan + 1; ++i ) + { + A[0] = aziPoly[i - 1]; + A[1] = elePoly[i - 1]; + + v_sub( P, A, P_minus_A, 2 ); /* Precalculate value of (P-A) */ + + for ( j = i; j < numChan - 2 + i; ++j ) + { + idx1 = 1 + ( j % numChan ); + idx2 = 1 + ( idx1 % numChan ); + + B[0] = aziPoly[idx1 - 1]; + B[1] = elePoly[idx1 - 1]; + + C[0] = aziPoly[idx2 - 1]; + C[1] = elePoly[idx2 - 1]; + + if ( in_tri( A, B, C, P_minus_A ) ) + { + buffer[i - 1] = get_tri_gain( A, B, C, P_minus_A ); + break; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------------* + * get_tri_gain() + * + * Compute the value of the gain for a given triangle + *-------------------------------------------------------------------------*/ + +static float get_tri_gain( + const float A[2], /* i : Coordinate of one apex of the triangle */ + const float B[2], /* i : Coordinate of one apex of the triangle */ + const float C[2], /* i : Coordinate of one apex of the triangle */ + const float P_minus_A[2] /* i : Value of (P - A) */ +) +{ + float N[2], tmpN[2]; + float tmpSub1[2]; + float tmpDot1, tmpDot2; + float gain; + + /* Processing */ + tmpN[0] = B[1] - C[1]; + tmpN[1] = C[0] - B[0]; + + v_sub( B, A, tmpSub1, 2 ); + + tmpDot1 = dotp( tmpN, tmpSub1, 2 ); + + v_multc( tmpN, 1 / tmpDot1, N, 2 ); + + tmpDot2 = dotp( P_minus_A, N, 2 ); + + gain = 1 - tmpDot2; + /* Set gains <= -60dB to 0 to avoid problems in SVD */ + if ( fabsf( gain ) < 1e-6 ) + { + gain = 0.0f; + } + return gain; +} + + +/*-------------------------------------------------------------------------* + * add_vertex() + * + * Add a vertex to the vertex array + *-------------------------------------------------------------------------*/ + +static void add_vertex( + EFAP_VERTEX *vtxArray, /* i/o: Handle to the vertex array that will be updated */ + const float azi, /* i : Azimuth of the vertex */ + const float ele, /* i : Elevation of the vertex */ + const int16_t pos, /* i : Index in the vtxArray where we want to add the vertex */ + const EFAP_VTX_DMX_TYPE dmxType /* i : downmix type for the vertex */ +) +{ + float idxAziTmp, idxEleTmp; + float tmp; + + assert( vtxArray != NULL && "EFAP: vtxArray == NULL" ); + + /* Updating the vertex array */ + + tmp = efap_fmodf( 180.0f - azi, 360.0f ); + vtxArray[pos].azi = 180.0f - tmp; + + tmp = ( ( 180.0f < ele ) ? 180.0f : ele ); + vtxArray[pos].ele = ( ( -180.0f > tmp ) ? -180.0f : tmp ); + + /* Converting spherical coordinates to cartesians, assuming radius = 1 */ + vtxArray[pos].pos[0] = cosf( vtxArray[pos].azi * PI_OVER_180 ) * cosf( vtxArray[pos].ele * PI_OVER_180 ); + vtxArray[pos].pos[1] = sinf( vtxArray[pos].azi * PI_OVER_180 ) * cosf( vtxArray[pos].ele * PI_OVER_180 ); + vtxArray[pos].pos[2] = sinf( vtxArray[pos].ele * PI_OVER_180 ); + + /* Computing the index defined by idx = idxAziTmp + 181 * idxEleTmp */ + + /* IdxAziTmp */ + tmp = fabsf( 90.0f - fabsf( vtxArray[pos].azi ) ); + idxAziTmp = (float) anint( tmp ); + + /* IdxEleTmp */ + tmp = fabsf( vtxArray[pos].ele ); + idxEleTmp = (float) anint( tmp ); + idxEleTmp = 90.0f - idxEleTmp; + + /* Final Idx */ + vtxArray[pos].idx = (int16_t) idxAziTmp + 181 * (int16_t) idxEleTmp; + + /* Setting the nan flag to 0 */ + vtxArray[pos].isNaN = 0; + + /* Set the default downmix type */ + vtxArray[pos].dmxType = dmxType; + + return; +} + + +/*-------------------------------------------------------------------------* + * efap_sort_s() + * + * Sort an integer array + * (modified version of sort() to return an index array) + *-------------------------------------------------------------------------*/ + +static void efap_sort_s( + int16_t *x, /* i/o: Vector to be sorted */ + int16_t *idx, /* o : Original index positions */ + const int16_t len /* i : vector length */ +) +{ + int16_t i, j; + int16_t tempr, tempi; + + for ( i = 0; i < len; i++ ) + { + idx[i] = i; + } + + for ( i = len - 2; i >= 0; i-- ) + { + tempr = x[i]; + tempi = idx[i]; + for ( j = i + 1; ( j < len ) && ( tempr > x[j] ); j++ ) + { + x[j - 1] = x[j]; + idx[j - 1] = idx[j]; + } + x[j - 1] = tempr; + idx[j - 1] = tempi; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * vertex_distance() + * + * Compute the signed distance between a vertex and a hull surface + *-------------------------------------------------------------------------*/ + +static float vertex_distance( + const EFAP_VERTEX *vtxArray, /* i : The considered vertex */ + const EFAP_LS_TRIANGLE tri, /* i : The considered triangle */ + const int16_t vtxIdx /* i : Index of the considered vertex */ +) +{ + float A[3], B[3], C[3], P[3]; + int16_t i; + + /* Assigning the coordinates to the vector */ + for ( i = 0; i < 3; ++i ) + { + A[i] = vtxArray[tri.LS[0]].pos[i]; + B[i] = vtxArray[tri.LS[1]].pos[i]; + C[i] = vtxArray[tri.LS[2]].pos[i]; + + P[i] = vtxArray[vtxIdx].pos[i]; + } + + return point_plane_distance( A, B, C, P ); +} + + +/*-------------------------------------------------------------------------* + * point_plane_distance() + * + * Compute the signed distance between a point a given plane + *-------------------------------------------------------------------------*/ + +static float point_plane_distance( + const float P1[3], /* i : First point of the triangle that defines the planes */ + const float P2[3], /* i : Second point of the triangle */ + const float P3[3], /* i : Third point of the triangle */ + const float X[3] /* i : The point of interest */ +) +{ + float tmpCross1[3], tmpCross2[3]; + float resultCross[3]; + float tmpDot1[3], tmpDot2[3]; + float tmpNorm; + float dist; + + /* Check if the point already matches a triangle vertex */ + if ( ( X[0] == P1[0] && X[1] == P1[1] && X[2] == P1[2] ) || + ( X[0] == P2[0] && X[1] == P2[1] && X[2] == P2[2] ) || + ( X[0] == P3[0] && X[1] == P3[1] && X[2] == P3[2] ) ) + { + return 0.0f; + } + + /* Cross Product */ + v_sub( P1, P2, tmpCross1, 3 ); + v_sub( P1, P3, tmpCross2, 3 ); + + /* resultCross = cross(P1-P2,P1-P3) */ + efap_crossp( tmpCross1, tmpCross2, resultCross ); + + /* Dot Product */ + tmpNorm = dotp( resultCross, resultCross, 3 ); + tmpNorm = 1.f / sqrtf( tmpNorm ); + v_sub( X, P1, tmpDot1, 3 ); + v_multc( resultCross, tmpNorm, tmpDot2, 3 ); + dist = dotp( tmpDot1, tmpDot2, 3 ); + + return dist; +} + + +/*-------------------------------------------------------------------------* + * efap_crossp() + * + * Compute the cross product between column vectors of float of size 3x1 + *-------------------------------------------------------------------------*/ + +static void efap_crossp( + const float *v1, /* i : First float vector */ + const float *v2, /* i : Second float vector */ + float *v /* o : Output vector */ +) +{ + v[0] = v1[1] * v2[2] - v1[2] * v2[1]; + v[1] = v1[2] * v2[0] - v1[0] * v2[2]; + v[2] = v1[0] * v2[1] - v1[1] * v2[0]; + + return; +} + + +/*-------------------------------------------------------------------------* + * find_int_in_tri() + * + * Find an integer in triangle array of integers + *-------------------------------------------------------------------------*/ + +static int16_t find_int_in_tri( + const EFAP_LS_TRIANGLE *tri, /* i : Triangle array */ + const int16_t n, /* i : The integer to find */ + const int16_t r, /* i : Number of rows */ + int16_t *pos /* o : Position of the integer */ +) +{ + int16_t i, j; + + /* Find the first element equal to n */ + for ( i = 0; i < r; ++i ) + { + for ( j = 0; j < 3; ++j ) + { + if ( tri[i].LS[j] == n ) + { + pos[0] = i; + pos[1] = j; + return 1; + } + } + } + + return 0; +} + + +/*-------------------------------------------------------------------------* + * remove_vertex() + * + * Remove a vertex from a vertex structure + *-------------------------------------------------------------------------*/ + +static void remove_vertex( + EFAP_VERTEX *vtxArray, /* i : Vertex array */ + const int16_t idx, /* i : Index of the vertex to remove */ + const int16_t L /* i : Length of the Vertex array */ +) +{ + int16_t i; + + assert( idx < L && "EFAP: index out of bounds" ); + + /* Shift all vertex of one position, so vtxArray[i] will be vtxArray[i+1] and so on */ + for ( i = idx; i < L - 1; ++i ) + { + add_vertex( vtxArray, vtxArray[i + 1].azi, vtxArray[i + 1].ele, i, EFAP_DMX_INTENSITY ); + } + + /* The last vertex is set to 0 */ + add_vertex( vtxArray, 0, 0, L - 1, EFAP_DMX_INTENSITY ); + + return; +} + + +/*-------------------------------------------------------------------------* + * get_neighbours() + * + * Returns the neighbouring triangles of a vertex + *-------------------------------------------------------------------------*/ + +static int16_t get_neighbours( + const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ + const int16_t vtxIdx, /* i : Index of the vertex */ + const int16_t numTri, /* i : Number of Triangles */ + int16_t *neighbours /* o : Output vector */ +) +{ + int16_t i, j, k; + int16_t tmpPos[2]; + int16_t tmpNeighbours[EFAP_MAX_SIZE_TMP_BUFF]; + int16_t dummy[EFAP_MAX_SIZE_TMP_BUFF]; + EFAP_LS_TRIANGLE tmpTriArray[EFAP_MAX_POLY_SET]; + + /* Processing */ + for ( i = 0; i < numTri; ++i ) + { + mvs2s( triArray[i].LS, tmpTriArray[i].LS, 3 ); + } + + k = 0; + while ( 1 ) + { + if ( find_int_in_tri( tmpTriArray, vtxIdx, numTri, tmpPos ) == 0 ) + { + break; + } + else + { + tmpNeighbours[k] = tmpTriArray[tmpPos[0]].LS[0]; + tmpNeighbours[k + 1] = tmpTriArray[tmpPos[0]].LS[1]; + tmpNeighbours[k + 2] = tmpTriArray[tmpPos[0]].LS[2]; + k += 3; + tmpTriArray[tmpPos[0]].LS[tmpPos[1]] = -1; + } + + if ( k > 3 * numTri ) + { + break; + } + } + + /* Sorting the neighbours vector */ + efap_sort_s( tmpNeighbours, dummy, k ); + + /* Creating the output vector, by eliminating redundancies and also deleting the indice == vtxIdx*/ + neighbours[0] = tmpNeighbours[0]; + j = 1; + + for ( i = 1; i < k; ++i ) + { + if ( ( tmpNeighbours[i] != tmpNeighbours[i - 1] ) && + ( tmpNeighbours[i] != vtxIdx ) ) + { + neighbours[j] = tmpNeighbours[i]; + ++j; + } + } + + /* Output, length of neighbours */ + return j; +} + + +/*-------------------------------------------------------------------------* + * matrix_times_row() + * + * Computes the product of a matrix and a row vector + *-------------------------------------------------------------------------*/ + +static void matrix_times_row( + float mat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF], /* i : The input matrix */ + const float *vec, /* i : The input row vector */ + const int16_t L, /* i : Row length */ + float *out /* o : Output vector */ +) +{ + int16_t i, j; + + for ( i = 0; i < L; ++i ) + { + for ( j = 0; j < L; ++j ) + { + out[i] += mat[i][j] * vec[j]; + } + } + + return; +} + + +/*-------------------------------------------------------------------------* + * tri_to_poly() + * + * Combines triangles of a surface in order to create polygons + *-------------------------------------------------------------------------*/ + +static void tri_to_poly( + const EFAP_VERTEX *vtxArray, /* i : Vertex array */ + const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ + const int16_t numVtx, /* i : Number of vertices */ + const int16_t numTri, /* i : Number of triangles */ + int16_t sortedChan[EFAP_MAX_POLY_SET][EFAP_MAX_CHAN_NUM], /* o : The matrix that will contain the sorted channels */ + int16_t *outLengthPS, /* o : The length of the sorted channels */ + int16_t outLengthSorted[EFAP_MAX_POLY_SET] /* o : The number of channels for each poly (i.e. outLengthSorted[i] = length(sortedChan[i]) */ +) +{ + int16_t i, j; + int16_t lenPoly; + int16_t lenPolySet; + int16_t found; + int16_t replaceIdx; + + int16_t poly[EFAP_MAX_CHAN_NUM]; + + int16_t sortedLengths[EFAP_MAX_POLY_SET]; + int16_t sortedTri[EFAP_MAX_POLY_SET]; + + float dist; + + lenPolySet = 0; + /* Sorting the polygons */ + for ( i = 0; i < numTri; ++i ) + { + /* search for coplanar vertices and add them to the polygon */ + lenPoly = 0; + for ( j = 0; j < numVtx; ++j ) + { + dist = fabsf( point_plane_distance( + vtxArray[triArray[i].LS[0]].pos, + vtxArray[triArray[i].LS[1]].pos, + vtxArray[triArray[i].LS[2]].pos, + vtxArray[j].pos ) ); + + if ( dist < 1e-3f ) + { + assert( lenPoly < EFAP_MAX_CHAN_NUM && "EFAP: exceeded max polygon vertices!" ); + poly[lenPoly] = j; + ++lenPoly; + } + } + + /* search existing polygons to determine whether the new one already exists/is a subset or is a superset */ + found = 0; + replaceIdx = -1; + for ( j = 0; j < lenPolySet; ++j ) + { + found = compare_poly( sortedChan[j], sortedLengths[j], poly, lenPoly ); + + if ( found > 0 ) + { + break; + } + else if ( found < 0 ) + { + replaceIdx = j; + } + } + + if ( found == 0 ) + { + /* append new poly */ + mvs2s( poly, sortedChan[lenPolySet], lenPoly ); + sortedTri[lenPolySet] = i; + sortedLengths[lenPolySet] = lenPoly; + ++lenPolySet; + } + else if ( found == -1 ) + { + /* replace with superset */ + mvs2s( poly, sortedChan[replaceIdx], lenPoly ); + sortedTri[replaceIdx] = i; + sortedLengths[replaceIdx] = lenPoly; + } + } + + /* Sorting the vertex */ + for ( i = 0; i < lenPolySet; ++i ) + { + sort_channels_vertex( vtxArray, triArray, sortedChan[i], sortedLengths[i], sortedTri[i] ); + } + + /* Output */ + *outLengthPS = lenPolySet; + mvs2s( sortedLengths, outLengthSorted, EFAP_MAX_POLY_SET ); + + return; +} + + +/*-------------------------------------------------------------------------* + * compare_poly() + * + * Compares a newly created polygon with an existing one + *-------------------------------------------------------------------------*/ + +static int16_t compare_poly( + int16_t *old, /* i : Existing polygon */ + int16_t lenOld, /* i : Length of existing polygon */ + int16_t *new, /* i : New polygon */ + int16_t lenNew /* i : Length of new polygon */ +) +{ + int16_t i, j; + int16_t count; + + count = 0; + + for ( i = 0; i < lenOld; ++i ) + { + for ( j = count; j < lenNew; ++j ) + { + if ( old[i] == new[j] ) + { + ++count; + break; + } + } + } + + if ( count == lenOld && lenOld < lenNew ) + { + /* new polygon is a superset */ + return -1; + } + else if ( count == lenNew && lenOld >= lenNew ) + { + /* found as subset or identical */ + return 1; + } + else + { + /* not found */ + return 0; + } +} + + +/*-------------------------------------------------------------------------* + * sort_channels_vertex() + * + * Sort the channels of a polygon set according to the vertex azimuth + *-------------------------------------------------------------------------*/ + +static void sort_channels_vertex( + const EFAP_VERTEX *vtxArray, /* i : Vertex array */ + const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ + int16_t channels[EFAP_MAX_CHAN_NUM], /* o : Channels array to be modified */ + const int16_t lengthChannels, /* i : Length of the channels array */ + int16_t idxTri /* i : Index of the considered triangle */ +) +{ + int16_t i, j; + + float P1[3], P2[3], P3[3]; + float tmpU[3]; + float U[3], V[3]; + float tmpV1[3], tmpV2[3], tmpV3[3]; + float normU, normV; + float MC[3]; + float tmpP[3], P[3]; + + float x, y; + + float azi[EFAP_MAX_CHAN_NUM]; + int16_t order[EFAP_MAX_CHAN_NUM]; + + int16_t newChannels[EFAP_MAX_CHAN_NUM]; + + + /* Initializing coordinates with the vertices of the considered triangle */ + for ( i = 0; i < 3; ++i ) + { + P1[i] = vtxArray[triArray[idxTri].LS[0]].pos[i]; + P2[i] = vtxArray[triArray[idxTri].LS[1]].pos[i]; + P3[i] = vtxArray[triArray[idxTri].LS[2]].pos[i]; + } + + /* First Base Vector */ + v_sub( P2, P1, tmpU, 3 ); + normU = sqrtf( dotp( tmpU, tmpU, 3 ) ); + v_multc( tmpU, 1 / normU, U, 3 ); + + /* Second Base Vector */ + v_sub( P3, P2, tmpV1, 3 ); + v_multc( U, dotp( U, tmpV1, 3 ), tmpV2, 3 ); + + v_sub( tmpV1, tmpV2, tmpV3, 3 ); + normV = sqrtf( dotp( tmpV3, tmpV3, 3 ) ); + + v_multc( tmpV3, 1 / normV, V, 3 ); + + /* Center of the first Triangle */ + for ( i = 0; i < 3; ++i ) + { + MC[i] = ( P1[i] + P2[i] + P3[i] ) / 3; + } + + /* Sort Vertices */ + for ( i = 0; i < lengthChannels; ++i ) + { + for ( j = 0; j < 3; ++j ) + { + tmpP[j] = vtxArray[channels[i]].pos[j]; + } + + v_sub( tmpP, MC, P, 3 ); + + x = dotp( P, U, 3 ); + y = dotp( P, V, 3 ); + + azi[i] = atan2f( y, x ); + } + + /* Sorting the azi vec */ + v_sort_ind( azi, order, lengthChannels ); + + /* Updating the channel array */ + for ( i = 0; i < lengthChannels; ++i ) + { + newChannels[i] = channels[order[i]]; + } + + /* return Success */ + mvs2s( newChannels, channels, lengthChannels ); + + return; +} + + +/*-------------------------------------------------------------------------* + * efap_fmodf() + * + * Modulus operation that will handle negative values the same way as matlab + *-------------------------------------------------------------------------*/ + +static float efap_fmodf( + const float x, /* i : Dividend */ + const float y /* i : Divisor */ +) +{ + float result = fmodf( x, y ); + return result >= 0 ? result : result + y; +} + + +/*-------------------------------------------------------------------------* + * get_poly_num() + * + * Returns the index of the polygon in which the coordinate is + *-------------------------------------------------------------------------*/ + +static int16_t get_poly_num( + const float P[2], /* i : Azimuth and elevation of the point */ + const EFAP_POLYSET_DATA *polyData /* i : Polyset struct */ +) +{ + int16_t i; + + for ( i = 0; i < polyData->numPoly; ++i ) + { + if ( in_poly( P, polyData->polysetArray[i] ) ) + { + return i; + } + } + + return -1; +} + + +/*-------------------------------------------------------------------------* + * in_poly() + * + * Determines if a given point is within a polygon or not + *-------------------------------------------------------------------------*/ + +static int16_t in_poly( + const float P[2], /* i : Azimuth and elevation of the point */ + const EFAP_POLYSET poly /* i : Polyset struct */ +) +{ + int16_t n; + int16_t numVertices = poly.numChan; + float A[2]; + float B[2]; + float C[2]; + float P_minus_A[2]; + + /* Safety check */ + + if ( numVertices < 3 ) + { +#ifdef DEBUGGING + IVAS_ERROR( IVAS_ERR_INTERNAL, "Less than 3 channels in the polygon" ); +#endif + return 0; + } + + /* See if the point is in one of the triangles available in the polygon */ + + if ( poly.isNaN[0] ) + { + A[0] = P[0]; + } + else + { + A[0] = poly.polyAzi[0]; + } + A[1] = poly.polyEle[0]; + + v_sub( P, A, P_minus_A, 2 ); /* Precalculate value of (P-A) */ + + for ( n = 1; n < numVertices - 1; ++n ) + { + if ( poly.isNaN[n] ) + { + B[0] = P[0]; + } + else + { + B[0] = poly.polyAzi[n]; + } + B[1] = poly.polyEle[n]; + + if ( poly.isNaN[n + 1] ) + { + C[0] = P[0]; + } + else + { + C[0] = poly.polyAzi[n + 1]; + } + C[1] = poly.polyEle[n + 1]; + + if ( in_tri( A, B, C, P_minus_A ) ) + { + return 1; + } + } + + return 0; +} + + +/*-------------------------------------------------------------------------* + * in_tri() + * + * Determines if a given point is within a triangle or not + *-------------------------------------------------------------------------*/ + +static int16_t in_tri( + float A[2], /* i : Coordinate of one apex of the triangle */ + float B[2], /* i : Coordinate of one apex of the triangle */ + float C[2], /* i : Coordinate of one apex of the triangle */ + float P_minus_A[2] /* i : Value of (P - A) */ +) +{ + float tmpDot1[2], tmpDot2[2]; + float matInv[2][2]; + float invFactor; + float S[2]; + float thresh = 1e-6f; + + /* + Not a Valid Triangle : Colinear edges + In the matlab implementation, the rcond() function is used + Since it's very complex to implement this in C + I'll just compute the determinant and if it's equal to 0, that means the two vectors are colinear + */ + + v_sub( B, A, tmpDot1, 2 ); + v_sub( C, A, tmpDot2, 2 ); + + /* Verification of the non-colinearity */ + invFactor = tmpDot1[0] * tmpDot2[1] - tmpDot1[1] * tmpDot2[0]; + + if ( invFactor < thresh ) + { + return 0; + } + + invFactor = 1.f / invFactor; + matInv[0][0] = tmpDot2[1] * invFactor; + matInv[0][1] = -tmpDot2[0] * invFactor; + matInv[1][0] = -tmpDot1[1] * invFactor; + matInv[1][1] = tmpDot1[0] * invFactor; + + /* Computing S = matInv*(P-A) */ + S[0] = ( matInv[0][0] * P_minus_A[0] ) + ( matInv[0][1] * P_minus_A[1] ); + S[1] = ( matInv[1][0] * P_minus_A[0] ) + ( matInv[1][1] * P_minus_A[1] ); + + /* Checking if we are in the triangle; For the theory, check Christian Borss article, section 3.2 */ + if ( S[0] < -thresh || S[1] < -thresh || S[0] + S[1] > 1 + thresh ) + { + return 0; + } + else + { + return 1; + } +} diff --git a/lib_dec/ivas_entropy_decoder.c b/lib_dec/ivas_entropy_decoder.c new file mode 100644 index 0000000000..52eadafc2a --- /dev/null +++ b/lib_dec/ivas_entropy_decoder.c @@ -0,0 +1,560 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_rom_com.h" +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Static function declarations + *------------------------------------------------------------------------------------------*/ + +static int16_t ivas_huffman_code_bits_present( const int16_t *codebook, const int16_t code, const int16_t bits, const int16_t len ); + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arith_dec_init() + * + * arith decoder init + *-----------------------------------------------------------------------------------------*/ + +static void ivas_arith_dec_init( + ivas_arith_t *pArith, + const ivas_freq_models_t *pFreq_models, + ivas_arith_t *pArith_diff, + const int16_t q_levels ) +{ + int16_t i; + + pArith->vals = pFreq_models->vals; + pArith->range = q_levels; + pArith->num_models = pFreq_models->num_models; + pArith->dyn_model_bits = ivas_get_bits_to_encode( pArith->num_models - 1 ); + pArith->pFreq_model = pFreq_models->freq_model[0]; + ivas_get_cum_freq_model( pArith->pFreq_model, pArith->range, pArith->cum_freq[0] ); + + for ( i = 0; i < pArith->num_models - 1; i++ ) + { + pArith->pAlt_freq_models[i] = pFreq_models->freq_model[i + 1]; + ivas_get_cum_freq_model( pArith->pAlt_freq_models[i], pArith->range, pArith->cum_freq[i + 1] ); + } + + pArith_diff->vals = pFreq_models->diff_vals; + pArith_diff->range = q_levels; + pArith_diff->num_models = pFreq_models->diff_num_models; + pArith_diff->dyn_model_bits = ivas_get_bits_to_encode( pArith_diff->num_models - 1 ); + pArith_diff->pFreq_model = pFreq_models->diff_freq_model[0]; + ivas_get_cum_freq_model( pArith_diff->pFreq_model, pArith_diff->range, pArith_diff->cum_freq[0] ); + + for ( i = 0; i < pArith_diff->num_models - 1; i++ ) + { + pArith_diff->pAlt_freq_models[i] = pFreq_models->diff_freq_model[i + 1]; + ivas_get_cum_freq_model( pArith_diff->pAlt_freq_models[i], pArith_diff->range, pArith_diff->cum_freq[i + 1] ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arith_decode_array() + * + * Arith decoding of an array + *-----------------------------------------------------------------------------------------*/ + +static void ivas_arith_decode_array( + ivas_arith_t *pArith, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const int16_t in_len, + int16_t *pSymbols ) +{ + int16_t i, ind, model_idx; + int16_t *pCum_freq = NULL; + Tastat as; + int16_t extra_bits_read = 0; + + if ( in_len > 0 && pArith->range > 1 ) + { + if ( pArith->dyn_model_bits > 0 ) + { + model_idx = get_next_indice( st0, pArith->dyn_model_bits ); + + if ( model_idx > 0 ) + { + pCum_freq = pArith->cum_freq[model_idx]; + } + else + { + pCum_freq = pArith->cum_freq[0]; + } + } + else + { + pCum_freq = pArith->cum_freq[0]; + } + + ivas_ari_start_decoding_14bits_ext_1_lfe( st0, &as, &extra_bits_read ); + + for ( i = 0; i < in_len; i++ ) + { + ind = ivas_ari_decode_14bits_bit_ext_1_lfe( st0, &as, (const uint16_t *) pCum_freq, &extra_bits_read ); + + pSymbols[i] = pArith->vals[ind]; + } + + ivas_ari_done_decoding_14bits_ext_1_lfe( st0, extra_bits_read ); + } + else + { + for ( i = 0; i < in_len; i++ ) + { + pSymbols[i] = 0; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function description ivas_arithCoder_decode_array_diff() + * + * Diffrential arith decoding + *-----------------------------------------------------------------------------------------*/ + +static void ivas_arithCoder_decode_array_diff( + ivas_arith_t *pArith, + ivas_arith_t *pArith_diff, + int16_t *pSymbol_old, + const int16_t length, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + int16_t *pOutput_arr ) +{ + int16_t n; + int16_t offset = pArith->vals[0]; + + if ( length > 0 ) + { + ivas_arith_decode_array( pArith_diff, st0, length, pOutput_arr ); + } + + for ( n = 0; n < length; n++ ) + { + pOutput_arr[n] = pSymbol_old[n] - offset + pOutput_arr[n]; + } + + ivas_wrap_arround( pOutput_arr, 0, pArith_diff->range - 1, length ); + + for ( n = 0; n < length; n++ ) + { + pOutput_arr[n] = pArith->vals[pOutput_arr[n]]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_huffman_dec_init_min_max_len() + * + * Find min and max length in codebook and finalize initialization of ivas_huffman_cfg_t. + *-----------------------------------------------------------------------------------------*/ +static void ivas_huffman_dec_init_min_max_len( + ivas_huffman_cfg_t *p_huff_cfg ) +{ + int16_t i, code_len; + const int16_t *codebook; + + codebook = p_huff_cfg->codebook; + + p_huff_cfg->min_len = p_huff_cfg->sym_len; + p_huff_cfg->max_len = 0; + + for ( i = 0; i < p_huff_cfg->sym_len; i++ ) + { + code_len = codebook[1]; + if ( p_huff_cfg->min_len > code_len ) + { + p_huff_cfg->min_len = code_len; + } + if ( p_huff_cfg->max_len < code_len ) + { + p_huff_cfg->max_len = code_len; + } + codebook = codebook + 3; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_huffman_code_bits_present() + * + * Huffman code bits present + *-----------------------------------------------------------------------------------------*/ + +static int16_t ivas_huffman_code_bits_present( + const int16_t *codebook, + const int16_t code, + const int16_t bits, + const int16_t len ) +{ + int16_t index = len + 1; + int16_t i = 0; + int16_t ind_t, code_t, bits_t; + + while ( i < len ) + { + ind_t = codebook[0]; + bits_t = codebook[1]; + code_t = codebook[2]; + if ( ( code == code_t ) && ( bits == bits_t ) ) + { + return ind_t; + } + codebook = codebook + 3; + i++; + } + + return index; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_huffman_decode() + * + * Huffman decoding on the encoded stream + *-----------------------------------------------------------------------------------------*/ + +ivas_error ivas_huffman_decode( + ivas_huffman_cfg_t *huff_cfg, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + int16_t *dec_out ) +{ + int16_t code, num_bits_read, ind, bit; + + code = get_next_indice( st0, huff_cfg->min_len ); + num_bits_read = huff_cfg->min_len; + + ind = ivas_huffman_code_bits_present( huff_cfg->codebook, code, num_bits_read, huff_cfg->sym_len ); + + while ( ind > huff_cfg->sym_len ) + { + bit = get_next_indice( st0, 1 ); + num_bits_read += 1; + code = code << 1 | bit; + ind = ivas_huffman_code_bits_present( huff_cfg->codebook, code, num_bits_read, huff_cfg->sym_len ); + if ( num_bits_read > huff_cfg->max_len ) + { + return IVAS_ERR_INTERNAL; + } + } + *dec_out = ind; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function arith_decode_cell_array() + * + * Arithman decoding of cell array + *-----------------------------------------------------------------------------------------*/ + +static void arith_decode_cell_array( + ivas_cell_dim_t *pCell_dims, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + int16_t num_bands, + ivas_arith_t *pArith, + int16_t *pSymbol ) +{ + int16_t total_symbol_len = 0; + int16_t i; + + for ( i = 0; i < num_bands; i++ ) + { + total_symbol_len += ( pCell_dims[i].dim1 * pCell_dims[i].dim2 ); + } + + assert( total_symbol_len <= IVAS_MAX_INPUT_LEN ); + + ivas_arith_decode_array( pArith, st0, total_symbol_len, pSymbol ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function arith_decode_cell_array_diff() + * + * Arithman decoding of differential cell array + *-----------------------------------------------------------------------------------------*/ + +static void arith_decode_cell_array_diff( + ivas_cell_dim_t *pCell_dims, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + int16_t num_bands, + ivas_arith_t *pArith, + ivas_arith_t *pArith_diff, + int16_t *pSymbol, + int16_t *pSymbol_old ) +{ + int16_t total_symbol_len = 0; + int16_t i; + + for ( i = 0; i < num_bands; i++ ) + { + total_symbol_len += ( pCell_dims[i].dim1 * pCell_dims[i].dim2 ); + } + + assert( total_symbol_len <= IVAS_MAX_INPUT_LEN ); + + ivas_arithCoder_decode_array_diff( pArith, pArith_diff, pSymbol_old, total_symbol_len, st0, pSymbol ); + + return; +} + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arith_decode_cmplx_cell_array() + * + * Arithman decoding of complex cell array + *-----------------------------------------------------------------------------------------*/ + +void ivas_arith_decode_cmplx_cell_array( + ivas_arith_t *pArith_re, + ivas_arith_t *pArith_re_diff, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + ivas_cell_dim_t *pCell_dims, + int16_t *pDo_diff, + const int16_t num_bands, + int16_t *pSymbol_re, + int16_t *pSymbol_re_old ) +{ + int16_t i, j, len, all_diff = 1, any_diff = 0; + int16_t cell_arr_diff[IVAS_MAX_INPUT_LEN]; + int16_t cell_arr_no_diff[IVAS_MAX_INPUT_LEN]; + int16_t cell_arr_diff_out[IVAS_MAX_INPUT_LEN]; + int16_t idx2 = 0; + + for ( i = 0; i < num_bands; i++ ) + { + if ( pDo_diff[i] != 0 ) + { + any_diff = 1; + } + else + { + all_diff = 0; + } + } + + if ( any_diff == 1 ) + { + if ( all_diff == 1 ) + { + arith_decode_cell_array_diff( pCell_dims, st0, num_bands, pArith_re, pArith_re_diff, pSymbol_re, pSymbol_re_old ); + } + else + { + ivas_cell_dim_t cell_dims[IVAS_MAX_NUM_BANDS]; + ivas_cell_dim_t cell_dims_diff[IVAS_MAX_NUM_BANDS]; + int16_t idx1 = 0, idx = 0; + + for ( i = 0; i < num_bands; i++ ) + { + len = pCell_dims[i].dim1 * pCell_dims[i].dim2; + if ( pDo_diff[i] != 0 ) + { + cell_dims[i].dim1 = 0; + cell_dims[i].dim2 = 0; + + for ( j = 0; j < len; j++ ) + { + cell_arr_diff[idx++] = pSymbol_re_old[idx1++]; + } + + cell_dims_diff[i].dim1 = pCell_dims[i].dim1; + cell_dims_diff[i].dim2 = pCell_dims[i].dim2; + } + else + { + for ( j = 0; j < len; j++ ) + { + cell_arr_diff[idx] = 0; + idx1++; + } + + cell_dims[i].dim1 = pCell_dims[i].dim1; + cell_dims[i].dim2 = pCell_dims[i].dim2; + cell_dims_diff[i].dim1 = 0; + cell_dims_diff[i].dim2 = 0; + } + } + + arith_decode_cell_array( cell_dims, st0, num_bands, pArith_re, cell_arr_no_diff ); + + arith_decode_cell_array_diff( cell_dims_diff, st0, num_bands, pArith_re, pArith_re_diff, cell_arr_diff_out, cell_arr_diff ); + + +#ifdef SPAR_HOA_DBG + /*if ( 0 ) */ /*(pCell_dims[0].dim1 == 12) */ + /*{ + idx = 0; + fprintf( stdout, "\n\n OLD/NEW: \n\n" ); + for ( i = 0; i < num_bands; i++ ) + { + len = ( cell_dims[i].dim1 * cell_dims[i].dim2 ); + fprintf( stdout, "Non-diff Band %d: \n", i ); + + for ( j = 0; j < len; j++ ) + { + fprintf( stdout, ">>%d: %d \n", idx, cell_arr_no_diff[idx] ); + idx++; + } + } + idx = 0; + for ( i = 0; i < num_bands; i++ ) + { + len = ( cell_dims_diff[i].dim1 * cell_dims_diff[i].dim2 ); + fprintf( stdout, "Diff Band %d: \n", i ); + + for ( j = 0; j < len; j++ ) + { + fprintf( stdout, ">>%d: %d\t %d\n", idx, cell_arr_diff[idx], cell_arr_diff_out[idx] ); + idx++; + } + } + }*/ +#endif + + idx = 0; + idx1 = 0; + for ( i = 0; i < num_bands; i++ ) + { + if ( pDo_diff[i] != 0 ) + { + for ( j = 0; j < cell_dims_diff[i].dim1 * cell_dims_diff[i].dim2; j++ ) + { + pSymbol_re[idx++] = cell_arr_diff_out[idx2++]; + } + } + else + { + for ( j = 0; j < cell_dims[i].dim1 * cell_dims[i].dim2; j++ ) + { + pSymbol_re[idx++] = cell_arr_no_diff[idx1++]; + } + } + } + } + } + else + { + arith_decode_cell_array( pCell_dims, st0, num_bands, pArith_re, pSymbol_re ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arith_coeffs_dec_init() + * + * Init for Arith. decoding + *-----------------------------------------------------------------------------------------*/ + +void ivas_arith_coeffs_dec_init( + ivas_arith_coeffs_t *pArith_coeffs, + ivas_spar_foa_md_com_cfg *pSpar_cfg, + const int16_t table_idx ) +{ + int16_t i; + for ( i = 0; i < MAX_QUANT_STRATS; i++ ) + { + + ivas_arith_dec_init( &pArith_coeffs->pred_arith_re[i], &ivas_arith_consts[table_idx][i].pred_r, + &pArith_coeffs->pred_arith_re_diff[i], pSpar_cfg->quant_strat[i].PR.q_levels[0] ); + + ivas_arith_dec_init( &pArith_coeffs->drct_arith_re[i], &ivas_arith_consts[table_idx][i].drct_r, + &pArith_coeffs->drct_arith_re_diff[i], pSpar_cfg->quant_strat[i].C.q_levels[0] ); + + ivas_arith_dec_init( &pArith_coeffs->decd_arith_re[i], &ivas_arith_consts[table_idx][i].decd_r, + &pArith_coeffs->decd_arith_re_diff[i], pSpar_cfg->quant_strat[i].P_r.q_levels[0] ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_huff_coeffs_dec_init() + * + * Init for Huffman decoding + *-----------------------------------------------------------------------------------------*/ + +void ivas_huff_coeffs_dec_init( + ivas_huff_coeffs_t *pHuff_coeffs, + ivas_spar_foa_md_com_cfg *pSpar_cfg, + const int16_t table_idx ) +{ + int16_t i; + ivas_huffman_cfg_t *p_huff_cfg; + for ( i = 0; i < MAX_QUANT_STRATS; i++ ) + { + p_huff_cfg = &pHuff_coeffs->pred_huff_re[i]; + p_huff_cfg->codebook = &ivas_huff_const[table_idx][i].pred_r.code_book[0][0]; + p_huff_cfg->sym_len = pSpar_cfg->quant_strat[i].PR.q_levels[0]; + ivas_huffman_dec_init_min_max_len( p_huff_cfg ); + + p_huff_cfg = &pHuff_coeffs->drct_huff_re[i]; + p_huff_cfg->codebook = &ivas_huff_const[table_idx][i].drct_r.code_book[0][0]; + p_huff_cfg->sym_len = pSpar_cfg->quant_strat[i].C.q_levels[0]; + ivas_huffman_dec_init_min_max_len( p_huff_cfg ); + + p_huff_cfg = &pHuff_coeffs->decd_huff_re[i]; + p_huff_cfg->codebook = &ivas_huff_const[table_idx][i].decd_r.code_book[0][0]; + p_huff_cfg->sym_len = pSpar_cfg->quant_strat[i].P_r.q_levels[0]; + ivas_huffman_dec_init_min_max_len( p_huff_cfg ); + } + + return; +} diff --git a/lib_dec/ivas_hrtf.c b/lib_dec/ivas_hrtf.c new file mode 100644 index 0000000000..eebe3b037f --- /dev/null +++ b/lib_dec/ivas_hrtf.c @@ -0,0 +1,261 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "hrtf_file_reader.h" +#include "prot.h" +#include "ivas_prot.h" +#include "lib_dec.h" +#include "string.h" +#include "assert.h" +#include "ivas_rom_TdBinauralRenderer.h" +#include "ivas_error.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define RESAMPLE_FACTOR_16_48 ( 16.0f / 48.0f ) +#define RESAMPLE_FACTOR_32_48 ( 32.0f / 48.0f ) + + +/*-------------------------------------------------------------------* + * BSplineModelEvalAlloc() + * + * Allocate the B Spline HR Filter model. + --------------------------------------------------------------------*/ + +void BSplineModelEvalAlloc( + ModelParams_t *model, /* i : Model parameters */ + ModelEval_t *modelEval /* i/o: Model evaluation structure */ +) +{ + modelEval->hrfModL = (float *) count_malloc( model->K * sizeof( float ) ); + modelEval->hrfModR = (float *) count_malloc( model->K * sizeof( float ) ); + + return; +} + + +/*-------------------------------------------------------------------* + * DefaultBSplineModel() + * + * Init default HRTF model + --------------------------------------------------------------------*/ + +ivas_error DefaultBSplineModel( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* o : Loaded HR filter set */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + ModelParams_t *model; + ModelParamsITD_t *modelITD; + int16_t i, j; + + HrFiltSet_p->FilterMethod = TDREND_HRFILT_Method_BSplineModel; + model = &( HrFiltSet_p->ModelParams ); + modelITD = &( HrFiltSet_p->ModelParamsITD ); + + /* Set ROM flag for correct deallocation */ + model->modelROM = TRUE; + + /* int16_t parameters */ + model->UseItdModel = 1; + model->SplineDegree = 4; + model->elevDim2 = 20; + model->elevDim3 = 18; + model->AlphaN = 578; + model->num_unique_azim_splines = 1; + model->elevSegSamples = 3; + model->elevBsLen[0] = 4; + model->elevBsLen[1] = 7; + model->elevBsLen[2] = 10; + model->elevBsLen[3] = 7; + model->elevBsStart[0] = 0; + model->elevBsStart[1] = 4; + model->elevBsStart[2] = 11; + model->elevBsStart[3] = 21; + + model->azimDim2 = orange53_rom_azimDim2; + model->azimDim3 = orange53_rom_azimDim3; + model->azim_start_idx = orange53_rom_azim_start_idx; + model->azimSegSamples = orange53_rom_azimSegSamples; + model->azimShapeIdx = orange53_rom_azimShapeIdx; + model->azimShapeSampFactor = orange53_rom_azimShapeSampFactor; + + /* float parameters */ + model->elevKSeq = (const float *) orange53_rom_elevKSeq; + model->elevBsShape = (const float *) orange53_rom_elevBsShape; + + model->azimBsShape = (const float **) count_malloc( model->num_unique_azim_splines * sizeof( float * ) ); + model->azimBsShape[0] = (const float *) orange53_rom_azimBsShape; + model->azimKSeq = (float **) count_malloc( 18 * sizeof( float * ) ); + model->azimKSeq[0] = (float *) count_malloc( 2 * sizeof( float * ) ); + model->azimKSeq[17] = (float *) count_malloc( 2 * sizeof( float * ) ); + model->azimKSeq[0][0] = 0.0f; + model->azimKSeq[17][0] = 0.0f; + model->azimKSeq[0][1] = 360.0f; + model->azimKSeq[17][1] = 360.0f; + + for ( i = 1; i < 17; i++ ) + { + model->azimKSeq[i] = (float *) count_malloc( model->azimDim2[i] * sizeof( float * ) ); /* azimDim2[i] = 91, i=2..15 */ + for ( j = 0; j < model->azimDim2[i]; j++ ) + { + model->azimKSeq[i][j] = (float) orange53_rom_azimSegSamples[0] * j; + } + } + + switch ( output_Fs ) + { + case 48000: + model->AlphaL = (const float *) orange53_rom_AlphaL48; + model->AlphaR = (const float *) orange53_rom_AlphaR48; + model->EL = (const float *) orange53_rom_EL48; + model->ER = (const float *) orange53_rom_ER48; + model->K = 128; + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + modelITD->resamp_factor = 1.0f; + } + break; + case 32000: + model->AlphaL = (const float *) orange53_rom_AlphaL32; + model->AlphaR = (const float *) orange53_rom_AlphaR32; + model->EL = (const float *) orange53_rom_EL32; + model->ER = (const float *) orange53_rom_ER32; + model->K = 86; + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + modelITD->resamp_factor = RESAMPLE_FACTOR_32_48; + } + break; + case 16000: + model->AlphaL = (const float *) orange53_rom_AlphaL16; + model->AlphaR = (const float *) orange53_rom_AlphaR16; + model->EL = (const float *) orange53_rom_EL16; + model->ER = (const float *) orange53_rom_ER16; + model->K = 43; + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + modelITD->resamp_factor = RESAMPLE_FACTOR_16_48; + } + break; + default: + break; + } + + modelITD->N = 4; + modelITD->elevDim2 = 20; + modelITD->elevDim3 = 18; + modelITD->azimDim2 = 41; + modelITD->azimDim3 = 41; + modelITD->elevSegSamples = 3; + modelITD->elevBsLen[0] = 4; + modelITD->elevBsLen[1] = 7; + modelITD->elevBsLen[2] = 10; + modelITD->elevBsLen[3] = 7; + modelITD->elevBsStart[0] = 0; + modelITD->elevBsStart[1] = 4; + modelITD->elevBsStart[2] = 11; + modelITD->elevBsStart[3] = 21; + + modelITD->elevKSeq = model->elevKSeq; + + modelITD->azimBsLen[0] = 11; + modelITD->azimBsLen[1] = 21; + modelITD->azimBsLen[2] = 31; + modelITD->azimBsLen[3] = 21; + modelITD->azimBsStart[0] = 0; + modelITD->azimBsStart[1] = 11; + modelITD->azimBsStart[2] = 32; + modelITD->azimBsStart[3] = 63; + + modelITD->azimSegSamples = 10; + + modelITD->azimKSeq = orange53_rom_ITD_azimKSeq; + modelITD->W = (const float *) orange53_rom_ITD_W; + modelITD->azimBsShape = (const float *) orange53_rom_ITD_azimBsShape; + modelITD->elevBsShape = (const float *) orange53_rom_ITD_elevBsShape; + + HRTF_model_precalc( model ); + + HrFiltSet_p->SampleRate = output_Fs; + HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K; + BSplineModelEvalAlloc( &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ); + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * ivas_HRTF_binary_open() + * + * Allocate HRTF binary handle + *-----------------------------------------------------------------------*/ + +ivas_error ivas_HRTF_binary_open( + TDREND_HRFILT_FiltSet_t **hHrtfTD ) +{ + /* Allocate HR filter set for headphones configuration */ + *hHrtfTD = (TDREND_HRFILT_FiltSet_t *) count_malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ); + if ( *hHrtfTD == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF binary!" ); + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * ivas_HRTF_binary_close() + * + * Close HRTF binary handle + *-------------------------------------------------------------------*/ + +void ivas_HRTF_binary_close( + TDREND_HRFILT_FiltSet_t **hHrtfTD ) +{ + if ( hHrtfTD == NULL || *hHrtfTD == NULL ) + { + return; + } + + count_free( *hHrtfTD ); + *hHrtfTD = NULL; + + return; +} diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c new file mode 100644 index 0000000000..7237269106 --- /dev/null +++ b/lib_dec/ivas_init_dec.c @@ -0,0 +1,2079 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_enc.h" +#include "lib_dec.h" +#include "prot.h" +#include +#include +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static ivas_error ivas_read_format( Decoder_Struct *st_ivas, int16_t *num_bits_read ); +static ivas_error doSanityChecks_IVAS( Decoder_Struct *st_ivas ); + + +/*-------------------------------------------------------------------* + * ivas_dec_setup() + * + * IVAS decoder setup + *-------------------------------------------------------------------*/ + +ivas_error ivas_dec_setup( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t k, idx, num_bits_read; + int16_t num_obj, element_mode_flag; + Decoder_State *st; + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + num_bits_read = 0; + element_mode_flag = 0; + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + /*-------------------------------------------------------------------* + * Read IVAS format + *-------------------------------------------------------------------*/ + + ivas_read_format( st_ivas, &num_bits_read ); + + + if ( is_DTXrate( ivas_total_brate ) == 0 ) + { + /*-------------------------------------------------------------------* + * Read IVAS format related signalling: + * - in ISM : read number of objects + * - in SBA : read SBA planar flag and SBA order + * - in MASA : read number of TC + * - in MC : read LS setup + *-------------------------------------------------------------------*/ + + if ( st_ivas->ivas_format == STEREO_FORMAT ) + { + element_mode_flag = 1; + } + else if ( st_ivas->ivas_format == ISM_FORMAT ) + { + /* read the number of objects */ + st_ivas->nchan_transport = 1; + num_obj = 1; + k = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - 1 ); + while ( st_ivas->bit_stream[k] && num_obj < MAX_NUM_OBJECTS ) + { + num_obj++; + k--; + } + + ivas_ism_dec_config( st_ivas, num_obj ); + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + if ( st_ivas->sba_mode == SBA_MODE_DIRAC || ivas_total_brate >= IVAS_256k ) + { + /* read Ambisonic (SBA) planar flag */ + st_ivas->sba_planar = st_ivas->bit_stream[num_bits_read]; + num_bits_read += SBA_PLANAR_BITS; + + /* read Ambisonic (SBA) order */ + st_ivas->sba_order = st_ivas->bit_stream[num_bits_read + 1]; + st_ivas->sba_order += 2 * st_ivas->bit_stream[num_bits_read]; + num_bits_read += SBA_ORDER_BITS; + } + else + { + st_ivas->sba_planar = 0; + st_ivas->sba_order = 1; + } + + if ( st_ivas->ini_frame > 0 && ( ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) && ( ivas_total_brate > IVAS_SID_4k4 ) ) + { + if ( ( error = ivas_sba_dec_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + ivas_sba_config( ivas_total_brate, st_ivas->sba_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init, st_ivas->sba_mode ); + } + } + else if ( st_ivas->ivas_format == MASA_FORMAT ) + { + /* read number of MASA transport channels */ + if ( st_ivas->bit_stream[( ivas_total_brate / FRAMES_PER_SEC ) - 1] ) + { + st_ivas->nchan_transport = 2; + element_mode_flag = 1; + } + else + { + st_ivas->nchan_transport = 1; + } + + if ( st_ivas->ini_frame > 0 ) + { + /* reconfigure in case a change of operation mode is detected */ + if ( ( ivas_total_brate > IVAS_SID_4k4 && ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) || ( st_ivas->ini_active_frame == 0 ) ) + { + if ( st_ivas->ini_active_frame == 0 && ivas_total_brate != FRAME_NO_DATA && ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->nCPE == 1 ) + { + st_ivas->hCPE[0]->nchan_out = 1; + } + else + { + if ( ( error = ivas_masa_dec_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + } + } + else if ( st_ivas->ivas_format == MC_FORMAT ) + { + /* read MC configuration */ + idx = 0; + for ( k = 0; k < MC_LS_SETUP_BITS; k++ ) + { + if ( st_ivas->bit_stream[num_bits_read + k] ) + { + idx += 1 << ( MC_LS_SETUP_BITS - 1 - k ); + } + } + num_bits_read += MC_LS_SETUP_BITS; + + /* select MC format mode; reconfigure the MC format decoder */ + ivas_mc_dec_config( st_ivas, idx ); + } + + /*-------------------------------------------------------------------* + * Read element mode + *-------------------------------------------------------------------*/ + + if ( st_ivas->ini_frame == 0 && element_mode_flag ) + { + /* read stereo technology info */ + if ( ivas_total_brate < MIN_BRATE_MDCT_STEREO ) + { + /* 1 bit */ + if ( st_ivas->bit_stream[num_bits_read] ) + { + st_ivas->element_mode_init = 1 + IVAS_CPE_DFT; + } + else + { + st_ivas->element_mode_init = 0 + IVAS_CPE_DFT; + } + /* (*num_bits_read)++; */ + } + else + { + st_ivas->element_mode_init = IVAS_CPE_MDCT; + } + } + } + else if ( ivas_total_brate == IVAS_SID_4k4 || ivas_total_brate == IVAS_SID_5k ) + { + switch ( st_ivas->sid_format ) + { + case SID_DFT_STEREO: + st_ivas->element_mode_init = IVAS_CPE_DFT; + break; + case SID_MDCT_STEREO: + st_ivas->element_mode_init = IVAS_CPE_MDCT; + break; + case SID_MASA_1TC: + st_ivas->element_mode_init = IVAS_SCE; + st_ivas->nchan_transport = 1; + break; + case SID_MASA_2TC: + if ( st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1 - SID_FORMAT_NBITS] == 1 ) + { + st_ivas->element_mode_init = IVAS_CPE_MDCT; + } + else + { + st_ivas->element_mode_init = IVAS_CPE_DFT; + } + st_ivas->nchan_transport = 2; + break; + case SID_SBA_1TC: + st_ivas->element_mode_init = IVAS_SCE; + break; + case SID_SBA_2TC: + st_ivas->element_mode_init = IVAS_CPE_MDCT; + break; + } + } + + /*-------------------------------------------------------------------* + * Initialize decoder in the first good frame based on IVAS format + * and number of transport channels + *-------------------------------------------------------------------*/ + + if ( st_ivas->ini_frame == 0 && st_ivas->ivas_format != UNDEFINED_FORMAT ) + { + if ( ( error = doSanityChecks_IVAS( st_ivas ) ) != IVAS_ERR_OK ) + { + return IVAS_ERROR( error, "Sanitiy checks failed" ); + } + + if ( ( error = ivas_init_decoder( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*----------------------------------------------------------------* + * Reset bitstream pointers + *----------------------------------------------------------------*/ + + ivas_set_bitstream_pointers( st_ivas ); + + reset_elements( st_ivas ); + + /* update bitstream buffer pointer -> take into account already read bits */ + if ( ( st_ivas->nSCE > 0 ) || ( st_ivas->nCPE > 0 ) ) + { + st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + st->next_bit_pos = num_bits_read; + st->total_brate = ACELP_8k00; /* only temporary initialization - this is needed for get_next_indice() in the frame following NO_DATA frame */ + } + return error; +} + + +/*-------------------------------------------------------------------* + * ivas_read_format() + * + * Read IVAS format signaling + *-------------------------------------------------------------------*/ + +static ivas_error ivas_read_format( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + int16_t *num_bits_read /* o : number of IVAS signalling bits read from the bitstream */ +) +{ + int16_t k, idx; + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + *num_bits_read = 0; + + if ( !st_ivas->bfi && is_DTXrate( ivas_total_brate ) == 0 ) + { + /* read IVAS format */ + k = 0; + if ( st_ivas->bit_stream[*num_bits_read] ) + { + k = 1; + } + k <<= 1; + ( *num_bits_read )++; + + if ( st_ivas->bit_stream[*num_bits_read] ) + { + k += 1; + } + ( *num_bits_read )++; + + switch ( k ) + { + case 0: + st_ivas->ivas_format = STEREO_FORMAT; + break; + case 1: + st_ivas->ivas_format = MC_FORMAT; + break; + case 2: + st_ivas->ivas_format = ISM_FORMAT; + + break; + case 3: + if ( st_ivas->bit_stream[*num_bits_read] ) + { + st_ivas->ivas_format = MASA_FORMAT; + } + else + { + st_ivas->ivas_format = SBA_FORMAT; + + st_ivas->sba_mode = ivas_sba_mode_select( ivas_total_brate ); + } + ( *num_bits_read )++; + break; + } + } + else if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_4k4 ) + { + /* read IVAS format in SID frame */ + idx = 0; + for ( k = 0; k < SID_FORMAT_NBITS; k++ ) + { + idx += st_ivas->bit_stream[k] << ( SID_FORMAT_NBITS - 1 - k ); + } + + ( *num_bits_read ) += SID_FORMAT_NBITS; + st_ivas->sid_format = idx; + + switch ( idx ) + { + case SID_DFT_STEREO: + case SID_MDCT_STEREO: + st_ivas->ivas_format = STEREO_FORMAT; + break; + case SID_ISM: + st_ivas->ivas_format = ISM_FORMAT; + ivas_ism_dec_config( st_ivas, 1 ); /* currently DTX supported for 1ISM only */ + break; + case SID_MULTICHANNEL: + st_ivas->ivas_format = MC_FORMAT; + break; + case SID_SBA_1TC: + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->element_mode_init = IVAS_SCE; + break; + case SID_SBA_2TC: + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->element_mode_init = IVAS_CPE_MDCT; + break; + case SID_MASA_1TC: + st_ivas->ivas_format = MASA_FORMAT; + st_ivas->element_mode_init = IVAS_SCE; + break; + case SID_MASA_2TC: + st_ivas->ivas_format = MASA_FORMAT; + if ( st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1] == 1 ) + { + st_ivas->element_mode_init = IVAS_CPE_MDCT; + } + else + { + st_ivas->element_mode_init = IVAS_CPE_DFT; + } + break; + default: + /* This should actually be impossible, since only 3 bits are read, so if this happens something is broken */ + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Invalid value %c found in SID format field.", st_ivas->sid_format ); + } + + /* reset bitstream handle to avoid BER detection after reading the 2400 kbps for ch0 */ + st_ivas->bit_stream += ( *num_bits_read ); + ( *num_bits_read ) = 0; + } + else if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_5k ) + { + int16_t tc_mode_offset; + tc_mode_offset = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC - 1 ); + idx = st_ivas->bit_stream[tc_mode_offset]; + // TBD: needs more work for HOA + if ( st_ivas->sba_order == 0 ) + { + st_ivas->sba_order = 1; + } + if ( idx == 0 ) + { + st_ivas->sid_format = SID_SBA_1TC; + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->sba_mode = SBA_MODE_SPAR; + st_ivas->element_mode_init = IVAS_SCE; + } + else + { + st_ivas->sid_format = SID_SBA_2TC; + st_ivas->ivas_format = SBA_FORMAT; + st_ivas->sba_mode = SBA_MODE_SPAR; + st_ivas->element_mode_init = IVAS_CPE_MDCT; + } + } + else + { + /* In SID/NO_DATA frames, use the previous frame IVAS format */ + } + + return error; +} + + +/*-------------------------------------------------------------------* + * getNumChanSynthesis() + * + * get number of output channels used for synthesis/decoding + * (often different from number of output channels!) + *-------------------------------------------------------------------*/ + +/*! r: number of channels to be synthesised */ +int16_t getNumChanSynthesis( + Decoder_Struct *st_ivas /* i : IVAS decoder structure */ +) +{ + int16_t n; + + n = st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE; + + if ( st_ivas->sba_dirac_stereo_flag ) + { + n = CPE_CHANNELS; + } + else if ( st_ivas->hMCT != NULL || st_ivas->ivas_format == SBA_FORMAT ) + { + n = st_ivas->nchan_transport; + } + + return n; +} + + +/*-------------------------------------------------------------------* + * copy_decoder_config() + * + * Copy IVAS configuration structure to the CoreCoder state structure + *-------------------------------------------------------------------*/ + +void copy_decoder_config( + Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ + Decoder_State *st /* o : decoder state structure */ +) +{ + st->output_Fs = st_ivas->hDecoderConfig->output_Fs; + st->Opt_AMR_WB = st_ivas->hDecoderConfig->Opt_AMR_WB; + st->codec_mode = st_ivas->codec_mode; + st->ini_frame = st_ivas->ini_frame; + + st->bfi = st_ivas->bfi; + + st->writeFECoffset = st_ivas->writeFECoffset; + + st->element_mode = st_ivas->element_mode_init; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_init_decoder_front() + * + * Set decoder parameters to initial values + *-------------------------------------------------------------------*/ + +ivas_error ivas_init_decoder_front( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + +#ifdef DEBUGGING + st_ivas->noClipping = 0; +#endif + + /* Custom loudspeaker layout structure */ + st_ivas->hLsSetupCustom = NULL; + + /* TD renderer HRTF data structure */ + st_ivas->hHrtfTD = NULL; + + /* Head track data structure */ + st_ivas->hHeadTrackData = NULL; + + /* Renderer configuration structure */ + st_ivas->hRenderConfig = NULL; + + /* HRTF binauralization latency in ns */ + st_ivas->binaural_latency_ns = 0; + +#ifdef DEBUGGING + st_ivas->hDecoderConfig->force_rend = -1; +#endif + + /*-----------------------------------------------------------------* + * Resets + *-----------------------------------------------------------------*/ + + st_ivas->nSCE = 0; + st_ivas->nCPE = 0; + st_ivas->nchan_transport = -1; + + st_ivas->ism_mode = ISM_MODE_NONE; + st_ivas->mc_mode = MC_MODE_NONE; + st_ivas->sba_mode = SBA_MODE_NONE; + + st_ivas->hLimiter = NULL; + st_ivas->hoa_dec_mtx = NULL; + + + /*-------------------------------------------------------------------* + * Allocate and initialize Custom loudspeaker layout handle + *--------------------------------------------------------------------*/ + + if ( st_ivas->hDecoderConfig->Opt_LsCustom ) + { + if ( ( error = ivas_ls_custom_open( &( st_ivas->hLsSetupCustom ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*-------------------------------------------------------------------* + * Allocate and initialize Head-Tracking handle + *--------------------------------------------------------------------*/ + + if ( st_ivas->hDecoderConfig->Opt_Headrotation ) + { + if ( ( error = ivas_headTrack_open( &( st_ivas->hHeadTrackData ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*-------------------------------------------------------------------* + * Allocate HRTF binary handle + *--------------------------------------------------------------------*/ + + if ( st_ivas->hDecoderConfig->Opt_HRTF_binary ) + { + if ( ( error = ivas_HRTF_binary_open( &( st_ivas->hHrtfTD ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*-------------------------------------------------------------------* + * Allocate and initialize Binaural Renderer configuration handle + *--------------------------------------------------------------------*/ + + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_ROOM ) + { + if ( ( error = ivas_render_config_open( &( st_ivas->hRenderConfig ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ivas_render_config_init_from_rom( &st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_ROOM ) != IVAS_ERR_OK ) + { + return IVAS_ERR_INTERNAL_FATAL; + } + } + + return error; +} + + +/*-------------------------------------------------------------------* + * ivas_init_decoder() + * + * Initialize IVAS decoder state structure + *-------------------------------------------------------------------*/ + +ivas_error ivas_init_decoder( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t i, k, n; + int16_t sce_id, cpe_id; + int16_t numCldfbAnalyses; + int16_t numCldfbSyntheses; + int32_t output_Fs, ivas_total_brate; + AUDIO_CONFIG output_config; + DECODER_CONFIG_HANDLE hDecoderConfig; + ivas_error error; + + error = IVAS_ERR_OK; + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + hDecoderConfig = st_ivas->hDecoderConfig; + output_config = hDecoderConfig->output_config; + ivas_total_brate = hDecoderConfig->ivas_total_brate; + + hDecoderConfig->last_ivas_total_brate = ivas_total_brate; + + if ( output_config == AUDIO_CONFIG_EXTERNAL ) + { + if ( !( st_ivas->ism_mode == ISM_MODE_PARAM ) ) + { + hDecoderConfig->nchan_out = st_ivas->nchan_transport; + } + st_ivas->hOutSetup.nchan_out_woLFE = hDecoderConfig->nchan_out; + } + + /*-----------------------------------------------------------------* + * Set output and intern setup & renderer selection + *-----------------------------------------------------------------*/ + + st_ivas->intern_config = output_config; + + ivas_output_init( &( st_ivas->hOutSetup ), output_config ); + + /* Only initialize transport setup if it is used */ + if ( st_ivas->transport_config != AUDIO_CONFIG_INVALID ) + { + ivas_output_init( &( st_ivas->hTransSetup ), st_ivas->transport_config ); + } + + if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + { + ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); + ivas_mcmasa_set_separate_channel_mode( &( st_ivas->hOutSetup.separateChannelEnabled ), &( st_ivas->hOutSetup.separateChannelIndex ), ivas_total_brate ); + } + + ivas_renderer_select( st_ivas ); + + if ( output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + ivas_ls_custom_output_init( st_ivas ); + } + + ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); + + if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + { + ivas_mcmasa_set_separate_channel_mode( &( st_ivas->hIntSetup.separateChannelEnabled ), &( st_ivas->hIntSetup.separateChannelIndex ), ivas_total_brate ); + if ( st_ivas->hOutSetup.output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.separateChannelEnabled ) + { + st_ivas->hLsSetupCustom->separate_ch_found = 0; + if ( st_ivas->hOutSetup.nchan_out_woLFE >= MCMASA_MIN_SPEAKERS_SEPARATE_CENTER ) + { + /* check for a speaker at (0, 0) if minimum speaker count is available */ + for ( i = 0; i < st_ivas->hOutSetup.nchan_out_woLFE; i++ ) + { + if ( st_ivas->hOutSetup.ls_azimuth[i] == 0.0f && st_ivas->hOutSetup.ls_elevation[i] == 0.0f ) + { + st_ivas->hIntSetup.separateChannelIndex = i; + st_ivas->hLsSetupCustom->separate_ch_found = 1; + break; + } + } + } + } + } + + /*-----------------------------------------------------------------* + * Dummy pointers to decoder handles + *-----------------------------------------------------------------*/ + + for ( i = 0; i < MAX_SCE; i++ ) + { + st_ivas->hSCE[i] = NULL; + } + + for ( i = 0; i < MAX_CPE; i++ ) + { + st_ivas->hCPE[i] = NULL; + } + + /* ISm metadata handles */ + for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) + { + st_ivas->hIsmMetaData[n] = NULL; + } + + /* DirAC handle */ + st_ivas->hDirAC = NULL; + st_ivas->sba_dirac_stereo_flag = 0; + + /* SPAR handle */ + st_ivas->hSpar = NULL; + + /* MASA decoder structure */ + st_ivas->hMasa = NULL; + + /* Q metadata handle */ + st_ivas->hQMetaData = NULL; + + /* MCT handles */ + st_ivas->hMCT = NULL; + st_ivas->hParamMC = NULL; + + /* LFE handle */ + st_ivas->hLFE = NULL; + + /* renderers handles */ + st_ivas->hBinRenderer = NULL; /* fastconf binaural renderer */ + st_ivas->hDiracDecBin = NULL; /* parametric binaural renderer */ + st_ivas->hLsSetUpConversion = NULL; /* MC converter */ + st_ivas->hEFAPdata = NULL; /* EFAP handle */ + st_ivas->hVBAPdata = NULL; /* VBAP handle */ + st_ivas->hIsmRendererData = NULL; /* ISm renderer */ + st_ivas->hBinRendererTd = NULL; /* TD ISm binaural renderer */ + st_ivas->hMonoDmxRenderer = NULL; /* Mono downmix renderer */ + st_ivas->hHrtf = NULL; /* Crend hrtf data */ + st_ivas->hCrend = NULL; /* Crend renderer */ + + /*-----------------------------------------------------------------* + * Allocate and initalize SCE/CPE and other handles + *-----------------------------------------------------------------*/ + + if ( st_ivas->ivas_format == MONO_FORMAT ) + { + st_ivas->nSCE = 1; /* in mono, there is always only one SCE */ + st_ivas->nCPE = 0; + st_ivas->nchan_transport = 1; + sce_id = 0; + + if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate ) ) != IVAS_ERR_OK ) + { + return error; + } + + reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); + } + else if ( st_ivas->ivas_format == STEREO_FORMAT ) + { + st_ivas->nchan_transport = CPE_CHANNELS; + st_ivas->intern_config = AUDIO_CONFIG_STEREO; + + st_ivas->nSCE = 0; + st_ivas->nCPE = 1; /* in stereo, there is always only one CPE */ + cpe_id = 0; + + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( n = 0; n < st_ivas->nchan_transport; n++ ) + { + reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); + } + /* init EFAP for custom LS output and set hTransSetup */ + if ( output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hOutSetup.ls_azimuth, st_ivas->hOutSetup.ls_elevation, st_ivas->hOutSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + + ivas_output_init( &( st_ivas->hTransSetup ), AUDIO_CONFIG_STEREO ); + } + } + else if ( st_ivas->ivas_format == ISM_FORMAT ) + { + int32_t element_brate_tmp[MAX_NUM_OBJECTS]; + + st_ivas->nSCE = st_ivas->nchan_transport; /* "st_ivas->nchan_transport" is known from ivas_dec_setup */ + st_ivas->nCPE = 0; + + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + st_ivas->nchan_transport = 2; + st_ivas->nSCE = 2; + + if ( ( error = ivas_param_ism_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ( error = create_ism_metadata_dec( st_ivas, st_ivas->nSCE, element_brate_tmp ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( ( error = create_sce_dec( st_ivas, sce_id, element_brate_tmp[sce_id] ) ) != IVAS_ERR_OK ) + { + return error; + } + + reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); + } + } + else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) + { + { + if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st_ivas->ivas_format == MASA_FORMAT ) + { + if ( ( error = ivas_masa_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + if ( ( error = ivas_spar_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC && st_ivas->hOutSetup.is_loudspeaker_setup ) + { + if ( ( error = ivas_sba_get_hoa_dec_matrix( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + { + return error; + } + } + if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_order, st_ivas->sba_planar, + st_ivas->sba_mode, IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ) ) != IVAS_ERR_OK ) + { + return error; + } + if ( hDecoderConfig->output_config != AUDIO_CONFIG_FOA ) + { + if ( ( error = ivas_dirac_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + for ( k = 0; k < DIRAC_MAX_NBANDS; k++ ) + { + st_ivas->hSpar->hSparFoa->dirac_to_spar_md_bands[k] = st_ivas->hDirAC->dirac_to_spar_md_bands[k]; + } + st_ivas->hSpar->hSparFoa->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; + } + else + { + int16_t band_grouping[IVAS_MAX_NUM_BANDS + 1]; + + st_ivas->hSpar->hSparFoa->enc_param_start_band = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); + + ivas_dirac_config_bands( + band_grouping, + IVAS_MAX_NUM_BANDS, + (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ), + st_ivas->hSpar->hSparFoa->dirac_to_spar_md_bands, + st_ivas->hQMetaData->useLowerBandRes, + st_ivas->hSpar->hSparFoa->enc_param_start_band, + 0 ); + } + } + else + { + if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_order, st_ivas->sba_planar, st_ivas->sba_mode, -1 ) ) != IVAS_ERR_OK ) + { + return error; + } + + st_ivas->sba_dirac_stereo_flag = ( st_ivas->nchan_transport == 1 && output_config == AUDIO_CONFIG_STEREO ); + + if ( ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC ) && st_ivas->hOutSetup.is_loudspeaker_setup ) + { + int16_t ambisonics_order; + + ambisonics_order = ivas_sba_get_order_transport( st_ivas->nchan_transport ); // VE: is it needed ? + + if ( ( error = ivas_sba_get_hoa_dec_matrix( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, ambisonics_order ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) && !st_ivas->hIntSetup.is_loudspeaker_setup ) + { + IVAS_OUTPUT_SETUP out_setup; + + ivas_output_init( &out_setup, AUDIO_CONFIG_7_1_4 ); + if ( ( error = ivas_sba_get_hoa_dec_matrix( out_setup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + } + + if ( st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV && st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM && + st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_SBA_LINEAR_DEC && st_ivas->sba_mode != SBA_MODE_SPAR ) + { + if ( ( error = ivas_dirac_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + { + return error; + } + reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) + { + return error; + } + + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); + } + } + + /* create CPE element for DFT Stereo like upmix */ + if ( st_ivas->sba_dirac_stereo_flag ) + { + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ + } + + if ( st_ivas->nCPE > 1 ) + { + if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* set CNA/CNG flags */ + if ( st_ivas->sba_mode == SBA_MODE_SPAR && st_ivas->nchan_transport == 1 ) + { + st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 0; + st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag = 0; + } + else if ( st_ivas->nchan_transport == 1 && st_ivas->sba_mode == SBA_MODE_SPAR && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) + { + st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 0; /* Todo: Check if these can be enabled */ + st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag = 0; + } + else if ( st_ivas->nchan_transport == 1 && ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) || ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) ) + { + st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 1; + st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag = 1; + } + else if ( st_ivas->nchan_transport == 2 ) + { + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + { + st_ivas->hCPE[0]->hCoreCoder[n]->cna_dirac_flag = 0; /* Todo: Check if these can be enabled */ + st_ivas->hCPE[0]->hCoreCoder[n]->cng_dirac_flag = 0; + } + else + { + st_ivas->hCPE[0]->hCoreCoder[n]->cng_dirac_flag = 1; + st_ivas->hCPE[0]->hCoreCoder[n]->cng_spar_flag = 1; + } + } + } + else + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[0]->hCoreCoder[n]->cna_dirac_flag = 0; + st_ivas->hCPE[0]->hCoreCoder[n]->cng_dirac_flag = 1; + } + } + } + } + else if ( st_ivas->ivas_format == MC_FORMAT ) + { + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + /* init EFAP for custom LS setup */ + if ( output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth, st_ivas->hLsSetupCustom->ls_elevation, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + } + st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ) ); + st_ivas->nSCE = 0; + st_ivas->nCPE = st_ivas->nchan_transport / 2; + + st_ivas->element_mode_init = IVAS_CPE_MDCT; + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / ( st_ivas->nchan_transport - 1 ) * CPE_CHANNELS ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); + } + } + + if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + /* init EFAP for custom LS setup */ + if ( output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth, st_ivas->hLsSetupCustom->ls_elevation, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + } + if ( ( error = ivas_param_mc_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); + } + } + + if ( st_ivas->nCPE > 1 ) + { + if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); + + if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_masa_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + + st_ivas->sba_dirac_stereo_flag = ( st_ivas->nchan_transport == 1 && output_config == AUDIO_CONFIG_STEREO ); + + if ( st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_MCMASA_MONO_STEREO ) + { + if ( ( error = ivas_dirac_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st_ivas->hOutSetup.output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.separateChannelEnabled && !st_ivas->hLsSetupCustom->separate_ch_found ) + { + /* If no speaker matching the separated channel, compute panning gains for the separated channel. */ + if ( st_ivas->hVBAPdata == NULL ) + { + /* Distribute signal to all channels if VBAP is not properly initialized. */ + set_f( st_ivas->hLsSetupCustom->separate_ch_gains, 1 / sqrtf( st_ivas->hLsSetupCustom->num_spk ), st_ivas->hLsSetupCustom->num_spk ); + } + else + { + vbap_determine_gains( st_ivas->hVBAPdata, st_ivas->hLsSetupCustom->separate_ch_gains, 0, 0 ); + } + } + + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( st_ivas->hOutSetup.separateChannelEnabled ) + { + if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_mcmasa_mono_brate( ivas_total_brate ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( st_ivas->hOutSetup.separateChannelEnabled ) + { + st_ivas->element_mode_init = IVAS_CPE_MDCT; + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate - st_ivas->hSCE[0]->element_brate ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + st_ivas->element_mode_init = IVAS_CPE_MDCT; + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); + } + } + + /* create CPE element for DFT Stereo like upmix */ + if ( st_ivas->sba_dirac_stereo_flag ) + { + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ + } + + /* set CNA/CNG flags */ + if ( st_ivas->nchan_transport == 1 && ( ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) ) + { + st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 1; + st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag = 1; + } + } + } +#ifdef DEBUGGING + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Invalid IVAS format. Exiting,\n" ); + } +#endif + + + /*-----------------------------------------------------------------* + * Allocate and initialize HP20 filter memories + *-----------------------------------------------------------------*/ + + /* set number of output channels used for synthesis/decoding */ + n = getNumChanSynthesis( st_ivas ); + + if ( n > 0 ) + { + if ( ( st_ivas->mem_hp20_out = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); + } + } + else + { + st_ivas->mem_hp20_out = NULL; + } + + for ( i = 0; i < n; i++ ) + { + if ( ( st_ivas->mem_hp20_out[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); + } + + set_f( st_ivas->mem_hp20_out[i], 0.0f, L_HP20_MEM ); + } + + + /*-------------------------------------------------------------------* + * Allocate and initialize rendering handles + *--------------------------------------------------------------------*/ + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + if ( ( error = ivas_binRenderer_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + { + if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + { + if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) + { + if ( ( st_ivas->hCrend = (CREND_HANDLE) count_malloc( sizeof( CREND_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR Crend\n" ); + } + } + } + else if ( st_ivas->renderer_type == RENDERER_MC ) + { + if ( ( error = ivas_ls_setup_conversion_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + { + if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + { + if ( ivas_crend_open( st_ivas ) != IVAS_ERR_OK ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "ivas_crend_open failed" ); + } + } + + if ( st_ivas->ivas_format == ISM_FORMAT && + st_ivas->ism_mode == ISM_MODE_DISC && + ( st_ivas->renderer_type == RENDERER_TD_PANNING || + st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || + st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || + st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || + st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) + { + if ( ( error = ivas_ism_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*-----------------------------------------------------------------* + * LFE handles for rendering after rendering to adjust LFE delay to binaural filter delay + *-----------------------------------------------------------------*/ + + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, output_Fs, st_ivas->hHrtf != NULL ? st_ivas->hHrtf->latency_s : 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* reuse core-coder buffers for LFE decoder */ + cpe_id = LFE_CHANNEL / CPE_CHANNELS; + n = LFE_CHANNEL % CPE_CHANNELS; + + st_ivas->hLFE->prevsynth_buf = &st_ivas->hCPE[cpe_id]->hCoreCoder[n]->old_synth_sw[0]; + st_ivas->hLFE->prior_out_buffer = &st_ivas->hCPE[cpe_id]->hCoreCoder[n]->previoussynth[0]; + + set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN ); + set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k ); + } + + /*-----------------------------------------------------------------* + * CLDFB handles for rendering + *-----------------------------------------------------------------*/ + + ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses, &numCldfbSyntheses ); + + for ( i = 0; i < numCldfbAnalyses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas->cldfbAnaDec[i] ), CLDFB_ANALYSIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + for ( ; i < MAX_INTERN_CHANNELS; i++ ) + { + st_ivas->cldfbAnaDec[i] = NULL; + } + + for ( i = 0; i < numCldfbSyntheses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas->cldfbSynDec[i] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) + { + st_ivas->cldfbSynDec[i] = NULL; + } + + /* CLDFB Interpolation weights */ + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) + { + ivas_spar_get_cldfb_gains( st_ivas->hSpar->hSparFoa, st_ivas->cldfbAnaDec[0], st_ivas->cldfbSynDec[0], hDecoderConfig ); + } + + /*-----------------------------------------------------------------* + * Allocate and initialize limiter struct + *-----------------------------------------------------------------*/ + + { + st_ivas->hLimiter = ivas_limiter_open( hDecoderConfig->nchan_out, output_Fs ); + } + + return error; +} + + +/*------------------------------------------------------------------------- + * destroy_core_dec() + * + * Close core decoder handles + *-------------------------------------------------------------------------*/ + +void destroy_core_dec( + DEC_CORE_HANDLE hCoreCoder /* i/o: core decoder structure */ +) +{ + destroy_decoder( hCoreCoder ); + + if ( hCoreCoder->hGSCDec != NULL ) + { + count_free( hCoreCoder->hGSCDec ); + hCoreCoder->hGSCDec = NULL; + } + + if ( hCoreCoder->hPFstat != NULL ) + { + count_free( hCoreCoder->hPFstat ); + hCoreCoder->hPFstat = NULL; + } + + if ( hCoreCoder->hMusicPF != NULL ) + { + count_free( hCoreCoder->hMusicPF ); + hCoreCoder->hMusicPF = NULL; + } + + if ( hCoreCoder->hBPF != NULL ) + { + count_free( hCoreCoder->hBPF ); + hCoreCoder->hBPF = NULL; + } + + if ( hCoreCoder->hBWE_zero != NULL ) + { + count_free( hCoreCoder->hBWE_zero ); + hCoreCoder->hBWE_zero = NULL; + } + + if ( hCoreCoder->hTdCngDec != NULL ) + { + count_free( hCoreCoder->hTdCngDec ); + hCoreCoder->hTdCngDec = NULL; + } + + if ( hCoreCoder->hSC_VBR != NULL ) + { + count_free( hCoreCoder->hSC_VBR ); + hCoreCoder->hSC_VBR = NULL; + } + + if ( hCoreCoder->hAmrwb_IO != NULL ) + { + count_free( hCoreCoder->hAmrwb_IO ); + hCoreCoder->hAmrwb_IO = NULL; + } + + if ( hCoreCoder->hBWE_TD != NULL ) + { + count_free( hCoreCoder->hBWE_TD ); + hCoreCoder->hBWE_TD = NULL; + } + + if ( hCoreCoder->hBWE_FD != NULL ) + { + count_free( hCoreCoder->hBWE_FD ); + hCoreCoder->hBWE_FD = NULL; + } + + if ( hCoreCoder->hBWE_FD_HR != NULL ) + { + count_free( hCoreCoder->hBWE_FD_HR ); + hCoreCoder->hBWE_FD_HR = NULL; + } + + if ( hCoreCoder->hWIDec != NULL ) + { + count_free( hCoreCoder->hWIDec ); + hCoreCoder->hWIDec = NULL; + } + + if ( hCoreCoder->hTECDec != NULL ) + { + count_free( hCoreCoder->hTECDec ); + hCoreCoder->hTECDec = NULL; + } + + if ( hCoreCoder->hTcxLtpDec != NULL ) + { + count_free( hCoreCoder->hTcxLtpDec ); + hCoreCoder->hTcxLtpDec = NULL; + } + + if ( hCoreCoder->hTcxDec != NULL ) + { + count_free( hCoreCoder->hTcxDec ); + hCoreCoder->hTcxDec = NULL; + } + + if ( hCoreCoder->hTcxCfg != NULL && hCoreCoder->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + count_free( hCoreCoder->hTcxCfg ); + hCoreCoder->hTcxCfg = NULL; + } + + if ( hCoreCoder->hTonalMDCTConc != NULL ) + { + count_free( hCoreCoder->hTonalMDCTConc ); + hCoreCoder->hTonalMDCTConc = NULL; + } + + if ( hCoreCoder->hIGFDec != NULL ) + { + count_free( hCoreCoder->hIGFDec ); + hCoreCoder->hIGFDec = NULL; + } + + if ( hCoreCoder->hPlcInfo != NULL ) + { + count_free( hCoreCoder->hPlcInfo ); + hCoreCoder->hPlcInfo = NULL; + } + + if ( hCoreCoder->hHQ_core != NULL ) + { + count_free( hCoreCoder->hHQ_core ); + hCoreCoder->hHQ_core = NULL; + } + + if ( hCoreCoder->hHQ_nbfec != NULL ) + { + count_free( hCoreCoder->hHQ_nbfec ); + hCoreCoder->hHQ_nbfec = NULL; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_initialize_handles_dec() + * + * NULL initialization of handles + *-------------------------------------------------------------------------*/ + +void ivas_initialize_handles_dec( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t i; + + for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) + { + st_ivas->cldfbAnaDec[i] = NULL; + } + + for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) + { + st_ivas->cldfbSynDec[i] = NULL; + } + + /* SCE handles */ + for ( i = 0; i < MAX_SCE; i++ ) + { + st_ivas->hSCE[i] = NULL; + } + + /* CPE handles */ + for ( i = 0; i < MAX_CPE; i++ ) + { + st_ivas->hCPE[i] = NULL; + } + + st_ivas->nSCE = 0; + st_ivas->nCPE = 0; + st_ivas->mem_hp20_out = NULL; + + /* ISM metadata handles */ + for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) + { + st_ivas->hIsmMetaData[i] = NULL; + } + + /* spatial coding handles */ + st_ivas->hIsmRendererData = NULL; + st_ivas->hDirAC = NULL; + st_ivas->hSpar = NULL; + st_ivas->hMasa = NULL; + st_ivas->hQMetaData = NULL; + st_ivas->hMCT = NULL; + st_ivas->hParamMC = NULL; + st_ivas->hLFE = NULL; + + /* rendering handles */ + st_ivas->hBinRenderer = NULL; + st_ivas->hDiracDecBin = NULL; + st_ivas->hLsSetUpConversion = NULL; + st_ivas->hEFAPdata = NULL; + st_ivas->hVBAPdata = NULL; + st_ivas->hIsmRendererData = NULL; + st_ivas->hBinRendererTd = NULL; + st_ivas->hMonoDmxRenderer = NULL; + st_ivas->hCrend = NULL; + st_ivas->hHrtf = NULL; + + st_ivas->hHeadTrackData = NULL; + st_ivas->hHrtfTD = NULL; + st_ivas->hLimiter = NULL; + st_ivas->hLsSetupCustom = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_destroy_dec() + * + * Close IVAS decoder handles + *-------------------------------------------------------------------------*/ + +void ivas_destroy_dec( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +) +{ + int16_t i, n; + + /* CLDFB handles */ + for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) + { + if ( st_ivas->cldfbAnaDec[i] != NULL ) + { + deleteCldfb( &( st_ivas->cldfbAnaDec[i] ) ); + st_ivas->cldfbAnaDec[i] = NULL; + } + } + + for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) + { + if ( st_ivas->cldfbSynDec[i] != NULL ) + { + deleteCldfb( &( st_ivas->cldfbSynDec[i] ) ); + st_ivas->cldfbSynDec[i] = NULL; + } + } + + /* SCE handles */ + for ( i = 0; i < MAX_SCE; i++ ) + { + if ( st_ivas->hSCE[i] != NULL ) + { + destroy_sce_dec( st_ivas->hSCE[i] ); + st_ivas->hSCE[i] = NULL; + } + } + + /* CPE handles */ + for ( i = 0; i < MAX_CPE; i++ ) + { + if ( st_ivas->hCPE[i] != NULL ) + { + /* set pointer to NULL as core coder already deallocated in destroy_sce_dec() */ + if ( st_ivas->sba_dirac_stereo_flag ) + { + st_ivas->hCPE[i]->hCoreCoder[0] = NULL; + st_ivas->hCPE[i]->hCoreCoder[1] = NULL; + } + destroy_cpe_dec( st_ivas->hCPE[i] ); + st_ivas->hCPE[i] = NULL; + } + } + + /* LFE handle */ + if ( st_ivas->hLFE != NULL ) + { + ivas_lfe_dec_close( st_ivas->hLFE ); + st_ivas->hLFE = NULL; + } + + /* HP20 filter handles */ + if ( st_ivas->mem_hp20_out != NULL ) + { + for ( i = 0; i < getNumChanSynthesis( st_ivas ); i++ ) + { + count_free( st_ivas->mem_hp20_out[i] ); + st_ivas->mem_hp20_out[i] = NULL; + } + count_free( st_ivas->mem_hp20_out ); + st_ivas->mem_hp20_out = NULL; + } + + /* ISM metadata handles */ + for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) + { + if ( st_ivas->hIsmMetaData[n] != NULL ) + { + count_free( st_ivas->hIsmMetaData[n] ); + st_ivas->hIsmMetaData[n] = NULL; + } + } + + /* ISm renderer handle */ + if ( st_ivas->hIsmRendererData != NULL ) + { + count_free( st_ivas->hIsmRendererData ); + st_ivas->hIsmRendererData = NULL; + } + + /* DirAC handle */ + if ( st_ivas->hDirAC != NULL ) + { + if ( st_ivas->ivas_format == ISM_FORMAT ) + { + ivas_param_ism_dec_close( st_ivas->hDirAC, st_ivas->hDecoderConfig->output_config ); + } + else + { + ivas_dirac_dec_close( st_ivas->hDirAC ); + } + st_ivas->hDirAC = NULL; + } + + /* Spar handle */ + if ( st_ivas->hSpar != NULL ) + { + ivas_spar_dec_close( st_ivas->hSpar, st_ivas->hDecoderConfig->output_Fs ); + st_ivas->hSpar = NULL; + } + + /* HOA decoder matrix */ + if ( st_ivas->hoa_dec_mtx != NULL ) + { + count_free( st_ivas->hoa_dec_mtx ); + st_ivas->hoa_dec_mtx = NULL; + } + + /* Qmetadata handle */ + ivas_qmetadata_close( &st_ivas->hQMetaData ); + + /* MCT handle */ + ivas_mct_dec_close( &st_ivas->hMCT ); + + /* Parametric MC handle */ + ivas_param_mc_dec_close( &st_ivas->hParamMC ); + + /* EFAP handle */ + efap_free_data( &st_ivas->hEFAPdata ); + + /* VBAP handle */ + vbap_free_data( &( st_ivas->hVBAPdata ) ); + + /* Fastconv binaural renderer handle */ + ivas_binRenderer_close( &st_ivas->hBinRenderer ); + + /* Parametric binaural renderer handle */ + ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); + + /* Crend handle */ + ivas_crend_close( st_ivas ); + + /* LS config converter handle */ + ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); + + /* Custom LS configuration handle */ + if ( st_ivas->hLsSetupCustom != NULL ) + { + count_free( st_ivas->hLsSetupCustom ); + st_ivas->hLsSetupCustom = NULL; + } + + /* MASA decoder structure */ + if ( st_ivas->hMasa != NULL ) + { + ivas_masa_dec_close( st_ivas->hMasa ); + st_ivas->hMasa = NULL; + } + + /* Downmix structure */ + if ( st_ivas->hMonoDmxRenderer != NULL ) + { + count_free( st_ivas->hMonoDmxRenderer ); + st_ivas->hMonoDmxRenderer = NULL; + } + + /* Head track data handle */ + if ( st_ivas->hHeadTrackData != NULL ) + { + count_free( st_ivas->hHeadTrackData ); + st_ivas->hHeadTrackData = NULL; + } + + /* Time Domain binaural renderer handle */ + if ( st_ivas->hBinRendererTd != NULL ) + { + ivas_td_binaural_close( &st_ivas->hBinRendererTd ); + } + else if ( st_ivas->hHrtfTD != NULL ) + { + /* Case when HRTF filter is mistakenly specified but TD renderer was not active */ + if ( st_ivas->hHrtfTD->ModelParams.UseItdModel && !st_ivas->hHrtfTD->ModelParams.modelROM ) + { + BSplineModelEvalITDDealloc( &st_ivas->hHrtfTD->ModelParamsITD ); + } + + BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); + + ivas_HRTF_binary_close( &st_ivas->hHrtfTD ); + } + + /* Config. Renderer */ + ivas_render_config_close( &( st_ivas->hRenderConfig ) ); + + /* Limiter struct */ + ivas_limiter_close( &( st_ivas->hLimiter ) ); + + if ( st_ivas->hDecoderConfig != NULL ) + { + count_free( st_ivas->hDecoderConfig ); + st_ivas->hDecoderConfig = NULL; + } + + /* main IVAS handle */ + count_free( st_ivas ); + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_init_dec_get_num_cldfb_analyses() + * + * Return number of CLDFB analysis & synthesis instances + *-------------------------------------------------------------------*/ + +/*! r: number of cldfb instances */ +void ivas_init_dec_get_num_cldfb_instances( + Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ + int16_t *numCldfbAnalyses, /* o : number of needed CLDFB analysis instances */ + int16_t *numCldfbSyntheses /* o : number of needed CLDFB synthesis instances */ +) +{ + *numCldfbAnalyses = st_ivas->nchan_transport; + *numCldfbSyntheses = st_ivas->hDecoderConfig->nchan_out; + + switch ( st_ivas->renderer_type ) + { + case RENDERER_BINAURAL_PARAMETRIC: + case RENDERER_BINAURAL_PARAMETRIC_ROOM: + case RENDERER_STEREO_PARAMETRIC: + if ( st_ivas->nchan_transport == 1 ) + { + *numCldfbAnalyses = st_ivas->nchan_transport + 1; + } + + if ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->hOutSetup.separateChannelEnabled ) + { + *numCldfbAnalyses = st_ivas->nchan_transport + 1; + } + + if ( st_ivas->hDiracDecBin->useTdDecorr ) + { + *numCldfbAnalyses += 2; + } + break; + case RENDERER_MONO_DOWNMIX: + if ( st_ivas->ivas_format == ISM_FORMAT ) + { + /* CLDFB not used in rendering */ + *numCldfbAnalyses = 0; + *numCldfbSyntheses = 0; + } + break; + case RENDERER_DIRAC: + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + *numCldfbAnalyses = st_ivas->hSpar->hSparFoa->hFbMixer->fb_cfg->num_in_chans; + + + if ( st_ivas->hOutSetup.is_loudspeaker_setup && st_ivas->renderer_type == RENDERER_DIRAC ) + { + *numCldfbSyntheses = st_ivas->hOutSetup.nchan_out_woLFE; + } + else if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_FOA ) + { + *numCldfbSyntheses = st_ivas->hSpar->hSparFoa->hFbMixer->fb_cfg->num_out_chans; + } + else + { + *numCldfbSyntheses = MAX_OUTPUT_CHANNELS; + } + } + if ( st_ivas->sba_mode != SBA_MODE_SPAR ) + { + if ( st_ivas->nchan_transport > 2 && st_ivas->sba_planar ) + { + *numCldfbAnalyses = st_ivas->nchan_transport + 1; + } + else if ( st_ivas->nchan_transport == 1 && st_ivas->hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + { + *numCldfbAnalyses = st_ivas->nchan_transport + 1; + } + } + break; + case RENDERER_MC_PARAMMC: + if ( st_ivas->hDecoderConfig->nchan_out <= 2 ) + { + /* CLDFB not used in rendering */ + *numCldfbAnalyses = 0; + *numCldfbSyntheses = 0; + } + else + { + *numCldfbSyntheses = param_mc_get_num_cldfb_syntheses( st_ivas ); + } + break; + case RENDERER_PARAM_ISM: + /* Already correct with no exception */ + break; + case RENDERER_DISABLE: + /* CLDFB not used */ + *numCldfbAnalyses = 0; + *numCldfbSyntheses = 0; + break; + case RENDERER_MC: + case RENDERER_SBA_LINEAR_DEC: + case RENDERER_TD_PANNING: + case RENDERER_BINAURAL_OBJECTS_TD: + case RENDERER_MCMASA_MONO_STEREO: + case RENDERER_BINAURAL_MIXER_CONV: + case RENDERER_BINAURAL_MIXER_CONV_ROOM: + case RENDERER_BINAURAL_FASTCONV: + case RENDERER_BINAURAL_FASTCONV_ROOM: + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + *numCldfbAnalyses = st_ivas->hSpar->hSparFoa->hFbMixer->fb_cfg->num_in_chans; + + if ( st_ivas->hOutSetup.is_loudspeaker_setup && st_ivas->renderer_type == RENDERER_DIRAC ) + { + *numCldfbSyntheses = st_ivas->hOutSetup.nchan_out_woLFE; + } + else if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_FOA ) + { + *numCldfbSyntheses = st_ivas->hSpar->hSparFoa->hFbMixer->fb_cfg->num_out_chans; + } + else + { + *numCldfbSyntheses = MAX_OUTPUT_CHANNELS; + } + } + else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + /* do nothing for ParamMC */ + } + else + { + /* CLDFB not used in rendering */ + *numCldfbAnalyses = 0; + *numCldfbSyntheses = 0; + } + break; + case RENDERER_SBA_LINEAR_ENC: + if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + *numCldfbSyntheses = param_mc_get_num_cldfb_syntheses( st_ivas ); + } + else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + *numCldfbSyntheses = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; + } + else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + *numCldfbAnalyses = st_ivas->nchan_transport; + *numCldfbSyntheses = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; + } + else + { + /* CLDFB not used in rendering */ + *numCldfbAnalyses = 0; + *numCldfbSyntheses = 0; + } + break; + default: + assert( 0 && "Renderer not handled for CLDFB reservation." ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * doSanityChecks_IVAS() + * + * Sanity checks - verify if the decoder set-up parameters are + * not in conflict with the IVAS format + *---------------------------------------------------------------------*/ + +static ivas_error doSanityChecks_IVAS( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int32_t output_Fs; + AUDIO_CONFIG output_config; + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + output_config = st_ivas->hDecoderConfig->output_config; + + /*-----------------------------------------------------------------* + * Sanity checks + *-----------------------------------------------------------------*/ + + if ( output_Fs == 8000 ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "8kHz output sampling rate is not supported in IVAS." ); + } + + assert( st_ivas->ivas_format != UNDEFINED_FORMAT && "\n IVAS format undefined" ); + assert( st_ivas->ivas_format != MONO_FORMAT && "\n Wrong IVAS format: MONO" ); + + /* Verify stereo output configuration */ + if ( st_ivas->ivas_format == STEREO_FORMAT ) + { + if ( output_config != AUDIO_CONFIG_MONO && output_config != AUDIO_CONFIG_STEREO && output_config != AUDIO_CONFIG_5_1 && output_config != AUDIO_CONFIG_7_1 && output_config != AUDIO_CONFIG_5_1_2 && output_config != AUDIO_CONFIG_5_1_4 && output_config != AUDIO_CONFIG_7_1_4 && output_config != AUDIO_CONFIG_LS_CUSTOM ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Wrong output configuration specified for Stereo!" ); + } + } + else if ( st_ivas->ivas_format == ISM_FORMAT ) + { + /* Verify ISM output configuration */ + if ( output_config == AUDIO_CONFIG_INVALID ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for ISm" ); + } + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + /* Verify SBA output coniguration */ + if ( output_config == AUDIO_CONFIG_INVALID || output_config == AUDIO_CONFIG_EXTERNAL ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for SBA" ); + } + } + else if ( st_ivas->ivas_format == MASA_FORMAT ) + { + if ( output_config == AUDIO_CONFIG_INVALID ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for MASA!" ); + } + } + else if ( st_ivas->ivas_format == MC_FORMAT ) + { + /* Verify MC output configuration */ + if ( output_config == AUDIO_CONFIG_INVALID || output_config == AUDIO_CONFIG_EXTERNAL ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for Multi-channel" ); + } + } + + if ( st_ivas->hDecoderConfig->Opt_Headrotation ) + { + if ( !( output_config == AUDIO_CONFIG_BINAURAL || + output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) + { + return IVAS_ERROR( IVAS_ERR_HEAD_ROTATION_NOT_SUPPORTED, "Wrong set-up: Head-rotation not supported in this configuration" ); + } + } + +#ifdef DEBUGGING + if ( st_ivas->hDecoderConfig->forceSubframeBinauralization ) + { + /* Note about resolution of Binaural Renderers: * + * - Parametric Binaural Renderer: 20 ms by default, can be forced to subframe (5 ms) resolution * + * - FastConv Binaural Renderer: 5 ms by default * + * - TD objects Binaural Renderer: 20 ms by default */ + + if ( !( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) || !( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MC_FORMAT || st_ivas->ivas_format == ISM_FORMAT ) ) + { + return IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Wrong set-up: Forced subframe resolution parametric binauralization activated for non-binaural output." ); + } + } +#endif + +#ifdef DEBUGGING + if ( ( st_ivas->hHrtfTD != NULL || st_ivas->hDecoderConfig->force_rend == FORCE_TD_RENDERER ) && ( ( st_ivas->ivas_format != MC_FORMAT && st_ivas->ivas_format != ISM_FORMAT ) || output_config != AUDIO_CONFIG_BINAURAL || ( st_ivas->ivas_format == ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_PARAM ) || ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode != MC_MODE_MCT ) ) ) +#else + if ( st_ivas->hHrtfTD != NULL && ( ( st_ivas->ivas_format != MC_FORMAT && st_ivas->ivas_format != ISM_FORMAT ) || output_config != AUDIO_CONFIG_BINAURAL || ( st_ivas->ivas_format == ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_PARAM ) ) ) +#endif + + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration: Time Domain object renderer not supported in this configuration" ); + } + +#ifdef DEBUGGING + if ( ( st_ivas->hHrtfTD != NULL && st_ivas->hDecoderConfig->force_rend == FORCE_CLDFB_RENDERER ) ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_FORCE_MODE, "Incorrect debug configuration: Cannot force CLDFB renderer in combination with TD renderer HRTF file" ); + } +#endif + + return IVAS_ERR_OK; +} diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c new file mode 100644 index 0000000000..6b36447e30 --- /dev/null +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -0,0 +1,540 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "prot.h" +#include "ivas_stat_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------------* + * ivas_ism_metadata_dec() + * + * decode and dequantize ISm metadata + *-------------------------------------------------------------------------*/ + +ivas_error ivas_ism_metadata_dec( + const int32_t ism_total_brate, /* i : ISms total bitrate */ + int16_t *nchan_transport, /* o : number of transport channels */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ + const int16_t bfi, /* i : bfi flag */ + int16_t nb_bits_metadata[], /* o : number of metadata bits */ + ISM_MODE ism_mode, /* i : ISM mode */ + const PARAM_ISM_CONFIG_HANDLE hParamIsm /* i : Param ISM Config Handle */ +) +{ + int16_t ch, nb_bits_start = 0, last_bit_pos, sgn, diff; + int32_t element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; + DEC_CORE_HANDLE st0; + int16_t idx_azimuth, nbits_diff_azimuth, flag_abs_azimuth; + int16_t idx_elevation, nbits_diff_elevation; + int16_t next_bit_pos_orig; + uint16_t i, bstr_meta[MAX_BITS_METADATA], *bstr_orig; + ISM_METADATA_HANDLE hIsmMetaData; + int16_t nchan_transport_prev, ism_metadata_flag_global; + int16_t localVAD[MAX_NUM_OBJECTS]; + int16_t ism_imp[MAX_NUM_OBJECTS]; + int16_t num_obj = 0, nbands, nblocks; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ism_meta_dec" ); + + if ( ism_total_brate == IVAS_SID_4k4 || ism_total_brate == FRAME_NO_DATA ) + { + /* no metadata decoding in CNG */ + for ( ch = 0; ch < *nchan_transport; ch++ ) + { + hIsmMeta[ch]->ism_metadata_flag = 0; + } + + /* set padding bits as metadata bits to keep later bitrate checks valid */ + nb_bits_metadata[0] = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC; + +#ifdef DEBUGGING + /* sanity check */ + if ( *nchan_transport != 1 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "\n!!! Error: SID/CNG frame not expect for decoding more than 1 object. Exiting.\n\n" ); + } +#endif + + wmops_sub_end(); + return error; + } + + /* initialization */ + st0 = hSCE[0]->hCoreCoder[0]; + ism_metadata_flag_global = 0; + nchan_transport_prev = *nchan_transport; + + last_bit_pos = (int16_t) ( ( ism_total_brate / FRAMES_PER_SEC ) - 1 ); + bstr_orig = st0->bit_stream; + next_bit_pos_orig = st0->next_bit_pos; + st0->next_bit_pos = 0; + + /* reverse the bitstream for easier reading of indices */ + for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) + { + bstr_meta[i] = st0->bit_stream[last_bit_pos - i]; + } + st0->bit_stream = bstr_meta; + st0->total_brate = ism_total_brate; /* needed for BER detection in get_next_indice() */ + + if ( !bfi ) + { + /*----------------------------------------------------------------* + * Read ISm common signalling + *----------------------------------------------------------------*/ + + /* read number of objects */ + num_obj = 1; + while ( get_next_indice( st0, 1 ) == 1 && num_obj < MAX_NUM_OBJECTS ) + { + ( num_obj )++; + } + + ism_mode = ivas_ism_mode_select( num_obj, ism_total_brate ); + + if ( ism_mode == ISM_MODE_PARAM ) + { + hParamIsm->num_obj = num_obj; + } + else if ( ism_mode == ISM_MODE_DISC ) + { + *nchan_transport = num_obj; + } + + if ( *nchan_transport != nchan_transport_prev ) + { + /* IVAS_fmToDo: more work needed when the number of transported objects is not constant */ + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); + } + + /* Read ISm present flags (one per object) */ + for ( ch = 0; ch < *nchan_transport; ch++ ) + { + ism_imp[ch] = get_next_indice( st0, ISM_METADATA_FLAG_BITS ); + + if ( ism_imp[ch] > ISM_NO_META ) + { + hIsmMeta[ch]->ism_metadata_flag = 1; + } + else + { + hIsmMeta[ch]->ism_metadata_flag = 0; + } + + ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; + } + + for ( ; ch < num_obj; ch++ ) + { + hIsmMeta[ch]->ism_metadata_flag = 1; + ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; + } + + /* read VAD flag */ + for ( ch = 0; ch < *nchan_transport; ch++ ) + { + if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) + { + localVAD[ch] = get_next_indice( st0, ISM_METADATA_VAD_FLAG_BITS ); + } + else + { + localVAD[ch] = 1; + } + } + + if ( ism_metadata_flag_global ) + { + /*----------------------------------------------------------------* + * Metadata decoding and dequantization, loop over all objects + *----------------------------------------------------------------*/ + + int16_t total_bits_metadata = 0, bits_metadata_ism = 0; + int16_t nb_bits_objcod_read; + + if ( ism_mode == ISM_MODE_PARAM ) + { + nb_bits_start = st0->next_bit_pos; + } + + for ( ch = 0; ch < num_obj; ch++ ) + { + hIsmMetaData = hIsmMeta[ch]; + if ( ism_mode == ISM_MODE_DISC ) + { + nb_bits_start = st0->next_bit_pos; + } + + flag_abs_azimuth = 0; + + if ( hIsmMeta[ch]->ism_metadata_flag ) + { + /*----------------------------------------------------------------* + * Azimuth decoding and dequantization + *----------------------------------------------------------------*/ + + /* Decode azimuth index */ + if ( get_next_indice( st0, 1 ) == 1 ) /* azimuth_abs_flag */ + { + idx_azimuth = get_next_indice( st0, ISM_AZIMUTH_NBITS ); + flag_abs_azimuth = 1; + } + else + { + diff = 0; + sgn = 1; + + if ( get_next_indice( st0, 1 ) == 0 ) + { + nbits_diff_azimuth = 1; + } + else + { + nbits_diff_azimuth = 1; + + if ( get_next_indice( st0, 1 ) == 1 ) /* negative sign */ + { + sgn = -1; + } + + nbits_diff_azimuth++; + + /* read until the stop bit */ + while ( ( nbits_diff_azimuth < ISM_AZIMUTH_NBITS - 1 ) && ( get_next_indice( st0, 1 ) == 1 ) ) + { + diff++; + nbits_diff_azimuth++; + } + + if ( nbits_diff_azimuth < ISM_AZIMUTH_NBITS - 1 ) + { + /* count stop bit */ + nbits_diff_azimuth++; + } + } + + idx_azimuth = hIsmMetaData->last_azimuth_idx + sgn * diff; + } + + /* azimuth is on a circle - check for diff coding for -180° -> 180° and vice versa changes */ + if ( idx_azimuth > ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) + { + idx_azimuth -= ( 1 << ISM_AZIMUTH_NBITS ) - 1; /* +180° -> -180° */ + } + else if ( idx_azimuth < 0 ) + { + idx_azimuth += ( 1 << ISM_AZIMUTH_NBITS ) - 1; /* -180° -> +180° */ + } + + /* +180° == -180° */ + if ( idx_azimuth == ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) + { + idx_azimuth = 0; + } + + /* sanity check in case of FER or BER */ + if ( idx_azimuth < 0 || idx_azimuth > ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) + { + idx_azimuth = hIsmMetaData->last_azimuth_idx; + } + + /* Azimuth dequantization */ + if ( ism_mode == ISM_MODE_PARAM ) + { + hParamIsm->azi_index[ch] = idx_azimuth; + } + else /* ISM_MODE_DISC */ + { + hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, 1 << ISM_AZIMUTH_NBITS ); + } + + /*----------------------------------------------------------------* + * Elevation decoding and dequantization + *----------------------------------------------------------------*/ + + /* Decode elevation index */ + if ( flag_abs_azimuth == 0 && get_next_indice( st0, 1 ) == 1 ) /* elevation_abs_flag */ + { + idx_elevation = get_next_indice( st0, ISM_ELEVATION_NBITS ); + } + else + { + diff = 0; + sgn = 1; + + if ( get_next_indice( st0, 1 ) == 0 ) + { + nbits_diff_elevation = 1; + } + else + { + nbits_diff_elevation = 1; + + if ( get_next_indice( st0, 1 ) == 1 ) /* negative sign */ + { + sgn = -1; + } + + nbits_diff_elevation++; + + /* read until the stop bit */ + while ( ( nbits_diff_elevation < ISM_ELEVATION_NBITS ) && ( get_next_indice( st0, 1 ) == 1 ) ) + { + diff++; + nbits_diff_elevation++; + } + + if ( nbits_diff_elevation < ISM_ELEVATION_NBITS ) + { + /* count stop bit */ + nbits_diff_elevation++; + } + } + + idx_elevation = hIsmMetaData->last_elevation_idx + sgn * diff; + } + + /* sanity check in case of FER or BER */ + if ( idx_elevation < 0 || idx_elevation > ( 1 << ISM_ELEVATION_NBITS ) - 1 ) + { + idx_elevation = hIsmMetaData->last_elevation_idx; + } + + /* Elevation dequantization */ + if ( ism_mode == ISM_MODE_PARAM ) + { + hParamIsm->ele_index[ch] = idx_elevation; + } + else /* ISM_MODE_DISC */ + { + hIsmMetaData->elevation = ism_dequant_meta( idx_elevation, ism_elevation_borders, 1 << ISM_ELEVATION_NBITS ); + } + + /*----------------------------------------------------------------* + * Final updates + *----------------------------------------------------------------*/ + + /* updates */ + hIsmMetaData->last_azimuth_idx = idx_azimuth; + hIsmMetaData->last_elevation_idx = idx_elevation; + } + + /* save number of metadata bits read */ + if ( ism_mode == ISM_MODE_DISC ) + { + nb_bits_metadata[ch] = st0->next_bit_pos - nb_bits_start; + } + } + + if ( ism_mode == ISM_MODE_PARAM ) + { + hParamIsm->flag_noisy_speech = get_next_indice( st0, 1 ); + + /* Loop over multiwave to read the object indices from bitstream */ + for ( ch = 0; ch < MAX_PARAM_ISM_WAVE; ch++ ) + { + for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) + { + for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) + { + hParamIsm->obj_indices[nbands][nblocks][ch] = get_next_indice( st0, PARAM_ISM_OBJ_IND_NBITS ); + } + } + } + + /* Loop over all bands to read power ratio's from bitstream */ + for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) + { + for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) + { + hParamIsm->power_ratios_idx[nbands][nblocks] = get_next_indice( st0, PARAM_ISM_POW_RATIO_NBITS ); + } + } + + /* save number of metadata bits read */ + total_bits_metadata = st0->next_bit_pos - nb_bits_start; + + /* bits per ISM*/ + bits_metadata_ism = (int16_t) ( total_bits_metadata / *nchan_transport ); + + nb_bits_objcod_read = 0; + for ( ch = 0; ch < *nchan_transport; ch++ ) + { + if ( ch == *nchan_transport - 1 ) + { + nb_bits_metadata[ch] = total_bits_metadata - nb_bits_objcod_read; + } + else + { + nb_bits_metadata[ch] = bits_metadata_ism; + nb_bits_objcod_read += bits_metadata_ism; + } + } + } + } + else + { + set_s( nb_bits_metadata, 0, *nchan_transport ); + } + } + else /* BFI */ + { + /* "*nISms", "hIsmMeta->azimuth" and "hIsmMeta->elevation" are recycled from the last frame */ + for ( ch = 0; ch < *nchan_transport; ch++ ) + { + hIsmMeta[ch]->ism_metadata_flag = hIsmMeta[ch]->last_ism_metadata_flag; + } + for ( ; ch < num_obj; ch++ ) + { + hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; + } + + set_s( nb_bits_metadata, 0, *nchan_transport ); + + if ( ism_mode == ISM_MODE_PARAM ) + { + for ( ch = 0; ch < num_obj; ch++ ) + { + hParamIsm->azi_index[ch] = hParamIsm->azi_index[ch] + hParamIsm->last_az_sgn[ch] * hParamIsm->last_az_diff[ch]; + /*hParamIsm->azi_index[ch] = hParamIsm->azi_index[ch] % hParamIsm->az_alpha[ch];*/ + hParamIsm->azi_index[ch] = hParamIsm->azi_index[ch]; + hParamIsm->ele_index[ch] = hParamIsm->ele_index[ch] + hParamIsm->last_el_sgn[ch] * hParamIsm->last_el_diff[ch]; + /*hParamIsm->ele_index[ch] = hParamIsm->ele_index[ch] % hParamIsm->ele_alpha;*/ + hParamIsm->ele_index[ch] = hParamIsm->ele_index[ch]; + hIsmMeta[ch]->last_azimuth_idx = hParamIsm->azi_index[ch]; + hIsmMeta[ch]->last_elevation_idx = hParamIsm->ele_index[ch]; + } + } + } + + /*----------------------------------------------------------------* + * Configuration and decision about bitrates per channel + *----------------------------------------------------------------*/ + + if ( !bfi ) + { + ivas_ism_config( ism_total_brate, *nchan_transport, num_obj, hIsmMeta, localVAD, ism_imp, element_brate, total_brate, nb_bits_metadata ); + + for ( ch = 0; ch < *nchan_transport; ch++ ) + { + hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; + + if ( ism_mode == ISM_MODE_DISC ) + { + hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; + if ( hIsmMeta[ch]->ism_metadata_flag == 0 && localVAD[ch] == 0 && ism_metadata_flag_global ) + { + hSCE[ch]->hCoreCoder[0]->low_rate_mode = 1; + } + } + + hSCE[ch]->element_brate = element_brate[ch]; + hSCE[ch]->hCoreCoder[0]->total_brate = total_brate[ch]; + } + + for ( ; ch < num_obj; ch++ ) + { + hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; + } + } + else + { + for ( ch = 0; ch < *nchan_transport; ch++ ) + { + + hSCE[ch]->element_brate = hSCE[ch]->last_element_brate; + hSCE[ch]->hCoreCoder[0]->total_brate = hSCE[ch]->hCoreCoder[0]->last_total_brate; + } + } + + /* set the bitstream pointer to its original position */ + st0->bit_stream = bstr_orig; + st0->next_bit_pos = next_bit_pos_orig; + + /* set bitstream pointers for each ISm */ + for ( ch = 1; ch < *nchan_transport; ch++ ) + { + hSCE[ch]->hCoreCoder[0]->bit_stream = hSCE[ch - 1]->hCoreCoder[0]->bit_stream + ( hSCE[ch - 1]->hCoreCoder[0]->total_brate / FRAMES_PER_SEC ); + } + + wmops_sub_end(); + + return error; +} + + +/*------------------------------------------------------------------------- + * create_ism_metadata_dec() + * + * Create, allocate, initialize and configure IVAS decoder ISM handles + *-------------------------------------------------------------------------*/ + +ivas_error create_ism_metadata_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t n_ISms, /* i : number of objects */ + int32_t element_brate_tmp[] /* o : element bitrate per object */ +) +{ + int16_t ch; + + /* allocate ISm metadata handles */ + for ( ch = 0; ch < MAX_NUM_OBJECTS; ch++ ) + { + if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) count_malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISm MetaData\n" ) ); + } + + st_ivas->hIsmMetaData[ch]->last_ism_metadata_flag = 0; + st_ivas->hIsmMetaData[ch]->last_azimuth_idx = 0; + st_ivas->hIsmMetaData[ch]->last_elevation_idx = 1 << ( ISM_ELEVATION_NBITS - 1 ); + + ivas_ism_reset_metadata( st_ivas->hIsmMetaData[ch] ); + } + + ivas_ism_config( st_ivas->hDecoderConfig->ivas_total_brate, n_ISms, n_ISms, NULL, NULL, NULL, element_brate_tmp, NULL, NULL ); + + return IVAS_ERR_OK; +} diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c new file mode 100644 index 0000000000..406a4890cf --- /dev/null +++ b/lib_dec/ivas_ism_param_dec.c @@ -0,0 +1,1079 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include "options.h" +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local function definitions + *-----------------------------------------------------------------------*/ + +static void ivas_param_ism_dec_dequant_DOA( + DIRAC_DEC_HANDLE hDirAC /* i/o: decoder DirAC handle */ +) +{ + int16_t i; + PARAM_ISM_CONFIG_HANDLE hParamIsm; + + hParamIsm = hDirAC->hParamIsm; + + assert( hParamIsm->num_obj <= MAX_NUM_OBJECTS ); + + /* Get the azimuth and elevation values */ + for ( i = 0; i < hParamIsm->num_obj; i++ ) + { + hDirAC->azimuth_values[i] = ism_dequant_meta( hParamIsm->azi_index[i], ism_azimuth_borders, 1 << ISM_AZIMUTH_NBITS ); + hDirAC->elevation_values[i] = ism_dequant_meta( hParamIsm->ele_index[i], ism_elevation_borders, 1 << ISM_ELEVATION_NBITS ); + } + + return; +} + + +static void ivas_param_ism_dec_dequant_powrat( + DIRAC_DEC_HANDLE hDirAC /* i/o: decoder DirAC handle */ +) +{ + int16_t band_idx, slot_idx; + PARAM_ISM_CONFIG_HANDLE hParamIsm; + + hParamIsm = hDirAC->hParamIsm; + + /* Get the power ratio values */ + for ( band_idx = 0; band_idx < hParamIsm->nbands; band_idx++ ) + { + for ( slot_idx = 0; slot_idx < hParamIsm->nblocks[band_idx]; slot_idx++ ) + { + hDirAC->power_ratios[band_idx][slot_idx][0] = (float) ( hParamIsm->power_ratios_idx[band_idx][slot_idx] ) / (float) ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ) / 2.0f + 0.5f; + hDirAC->power_ratios[band_idx][slot_idx][1] = 1.0f - hDirAC->power_ratios[band_idx][slot_idx][0]; + } + } + + return; +} + +static void ivas_ism_get_interpolator( + const int16_t subframe_nbslots, + float *interpolator ) +{ + int16_t interp_idx = 0; + + for ( interp_idx = 0; interp_idx < subframe_nbslots; interp_idx++ ) + { + interpolator[interp_idx] = (float) ( interp_idx + 1 ) / (float) subframe_nbslots; + } + + return; +} + + +static void ivas_ism_get_proto_matrix( + IVAS_OUTPUT_SETUP hOutSetup, + const int16_t nchan_transport, + float *proto_matrix ) +{ + int16_t idx; + + /* compute proto_matrix */ + switch ( nchan_transport ) + { + case 2: + { + if ( hOutSetup.nchan_out_woLFE ) + { + for ( idx = 0; idx < hOutSetup.nchan_out_woLFE; idx++ ) + { + if ( hOutSetup.ls_azimuth[idx] > 0.0f ) + { + proto_matrix[idx] = 1.0f; + proto_matrix[idx + hOutSetup.nchan_out_woLFE] = 0.0f; + } + else if ( hOutSetup.ls_azimuth[idx] < 0.0f ) + { + proto_matrix[idx] = 0.0f; + proto_matrix[idx + hOutSetup.nchan_out_woLFE] = 1.0f; + } + else + { + proto_matrix[idx] = 0.5f; + proto_matrix[idx + hOutSetup.nchan_out_woLFE] = 0.5f; + } + } + } + else + { + assert( 0 && "Error: number of output channels not supported" ); + } + break; + } + + default: + assert( 0 && "Error: number of transport channels not supported" ); + } + + return; +} + + +static void ivas_param_ism_compute_mixing_matrix( + DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ + float Cldfb_RealBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float direct_response[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN], + const int16_t nchan_transport, + const int16_t nchan_out_woLFE, + const int16_t slot_idx_start, + const int16_t slot_idx_stop, + float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX] ) +{ + int16_t slot_idx, band_idx, ch, bin_idx; + int16_t i, w, obj_indx; + float tmp, ref_power; + int16_t brange[2]; + float cx_diag[PARAM_ISM_MAX_DMX]; + float direct_power[MAX_NUM_OBJECTS]; + float cy_diag[PARAM_ISM_MAX_CHAN]; + float cy_diag_tmp[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN]; + float *dir_res_ptr; + float *proto_matrix; + float response_matrix[PARAM_ISM_MAX_CHAN * MAX_NUM_OBJECTS]; + int16_t num_wave; + + proto_matrix = hDirAC->hParamIsmRendering->proto_matrix; + + assert( ( hDirAC->hParamIsm->num_obj == 3 ) || ( hDirAC->hParamIsm->num_obj == 4 ) ); + assert( nchan_transport == 2 ); + + if ( hDirAC->hParamIsm->flag_noisy_speech ) + { + num_wave = hDirAC->hParamIsm->num_obj; + } + else + { + num_wave = MAX_PARAM_ISM_WAVE; + } + + set_zero( response_matrix, PARAM_ISM_MAX_CHAN * MAX_NUM_OBJECTS ); + + /* loop over parameter bands to compute the mixing matrix */ + for ( band_idx = 0; band_idx < hDirAC->hParamIsm->nbands; band_idx++ ) + { + brange[0] = hDirAC->hParamIsm->band_grouping[band_idx]; + brange[1] = hDirAC->hParamIsm->band_grouping[band_idx + 1]; + + /* Compute covaraince matrix from direct response*/ + for ( w = 0; w < num_wave; w++ ) + { + set_zero( cy_diag_tmp[w], nchan_out_woLFE ); + + if ( hDirAC->hParamIsm->flag_noisy_speech ) + { + dir_res_ptr = direct_response[w]; + } + else + { + obj_indx = hDirAC->hParamIsm->obj_indices[band_idx][0][w]; + dir_res_ptr = direct_response[obj_indx]; + } + mvr2r( dir_res_ptr, response_matrix + w * nchan_out_woLFE, nchan_out_woLFE ); + /* we only need the diagonal of Cy*/ + matrix_product_diag( dir_res_ptr, nchan_out_woLFE, 1, 0, dir_res_ptr, 1, nchan_out_woLFE, 0, cy_diag_tmp[w] ); + } + + for ( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) + { + /* compute input matrix for covariance rendering */ + set_f( cx_diag, 0.0f, nchan_transport ); + for ( ch = 0; ch < nchan_transport; ch++ ) + { + tmp = 0.0f; + for ( slot_idx = slot_idx_start; slot_idx < slot_idx_stop; slot_idx++ ) + { + tmp += ( Cldfb_RealBuffer_in[ch][slot_idx][bin_idx] * Cldfb_RealBuffer_in[ch][slot_idx][bin_idx] ); + tmp += ( Cldfb_ImagBuffer_in[ch][slot_idx][bin_idx] * Cldfb_ImagBuffer_in[ch][slot_idx][bin_idx] ); + } + + cx_diag[ch] = tmp; + } + + ref_power = 0.0f; + for ( slot_idx = slot_idx_start; slot_idx < slot_idx_stop; slot_idx++ ) + { + ref_power += ( Cldfb_RealBuffer_in[0][slot_idx][bin_idx] * Cldfb_RealBuffer_in[0][slot_idx][bin_idx] ) + ( Cldfb_ImagBuffer_in[0][slot_idx][bin_idx] * Cldfb_ImagBuffer_in[0][slot_idx][bin_idx] ); + ref_power += ( Cldfb_RealBuffer_in[1][slot_idx][bin_idx] * Cldfb_RealBuffer_in[1][slot_idx][bin_idx] ) + ( Cldfb_ImagBuffer_in[1][slot_idx][bin_idx] * Cldfb_ImagBuffer_in[1][slot_idx][bin_idx] ); + } + set_zero( cy_diag, nchan_out_woLFE ); + for ( w = 0; w < num_wave; w++ ) + { + if ( hDirAC->hParamIsm->flag_noisy_speech ) + { + direct_power[w] = ( 1.0f / hDirAC->hParamIsm->num_obj ) * ref_power; + } + else + { + direct_power[w] = hDirAC->power_ratios[band_idx][0][w] * ref_power; + } + + if ( direct_power[w] != 0.f ) + { + for ( i = 0; i < nchan_out_woLFE; i++ ) + { + cy_diag[i] += direct_power[w] * cy_diag_tmp[w][i]; + } + } + direct_power[w] = sqrtf( direct_power[w] ); + } + /* Compute mixing matrix */ + computeMixingMatricesISM( nchan_transport, num_wave, nchan_out_woLFE, response_matrix, direct_power, cx_diag, cy_diag, proto_matrix, 1, + PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix[bin_idx] ); + } + } + + return; +} + + +static void ivas_param_ism_rendering( + DIRAC_DEC_HANDLE hDirAC, + float Cldfb_RealBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_RealBuffer[PARAM_ISM_MAX_CHAN][4][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer[PARAM_ISM_MAX_CHAN][4][CLDFB_NO_CHANNELS_MAX], + float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], + const int16_t out_slot_idx, + const int16_t slot_idx, + const int16_t num_ch_LS, + const int16_t nchan_transport ) +{ + int16_t outchIdx, inchIdx, bin_idx; + float tmp_1, mixing_matrix_smooth; + + tmp_1 = hDirAC->hParamIsmRendering->interpolator[slot_idx]; + + for ( bin_idx = 0; bin_idx < hDirAC->num_freq_bands; bin_idx++ ) + { + /* smooth the mixing matrix */ + for ( outchIdx = 0; outchIdx < num_ch_LS; outchIdx++ ) + { + for ( inchIdx = 0; inchIdx < nchan_transport; inchIdx++ ) + { + mixing_matrix_smooth = tmp_1 * mixing_matrix[bin_idx][outchIdx + inchIdx * num_ch_LS] + + ( 1 - tmp_1 ) * hDirAC->hParamIsmRendering->mixing_matrix_lin_old[bin_idx][outchIdx + inchIdx * num_ch_LS]; + + Cldfb_RealBuffer[outchIdx][out_slot_idx][bin_idx] += mixing_matrix_smooth * Cldfb_RealBuffer_in[inchIdx][slot_idx][bin_idx]; + Cldfb_ImagBuffer[outchIdx][out_slot_idx][bin_idx] += mixing_matrix_smooth * Cldfb_ImagBuffer_in[inchIdx][slot_idx][bin_idx]; + } + } + } + + return; +} + + +static ivas_error ivas_param_ism_rendering_init( + PARAM_ISM_RENDERING_HANDLE hParamIsmRendering, + IVAS_OUTPUT_SETUP hOutSetup, + const int16_t nchan_transport, + const int16_t subframe_nbslots, + AUDIO_CONFIG output_config ) +{ + int16_t bin_idx; + + /* initialization of mixing matrix buffer for smoothing */ + for ( bin_idx = 0; bin_idx < CLDFB_NO_CHANNELS_MAX; bin_idx++ ) + { + set_zero( hParamIsmRendering->mixing_matrix_lin_old[bin_idx], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); + } + + /* memory allocation for proto matrix and interpolator */ + if ( ( hParamIsmRendering->proto_matrix = (float *) count_malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for proto matrix\n" ) ); + } + if ( ( hParamIsmRendering->interpolator = (float *) count_malloc( subframe_nbslots * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for interpolator\n" ) ); + } + + if ( !( output_config == AUDIO_CONFIG_EXTERNAL || output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) + { + /* computation of proto matrix */ + ivas_ism_get_proto_matrix( hOutSetup, nchan_transport, hParamIsmRendering->proto_matrix ); + } + + /* computation of interpolator*/ + ivas_ism_get_interpolator( subframe_nbslots, hParamIsmRendering->interpolator ); + + return IVAS_ERR_OK; +} + + +static void ivas_param_ism_update_mixing_matrix( + DIRAC_DEC_HANDLE hDirAC, + float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], + const int16_t nchan_in, + const int16_t nchan_out ) +{ + int16_t inchIdx, outchIdx, bin_idx, band_idx; + int16_t brange[2]; + + for ( band_idx = 0; band_idx < hDirAC->hParamIsm->nbands; band_idx++ ) + { + brange[0] = hDirAC->hParamIsm->band_grouping[band_idx]; + brange[1] = hDirAC->hParamIsm->band_grouping[band_idx + 1]; + + for ( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) + { + for ( inchIdx = 0; inchIdx < nchan_in; inchIdx++ ) + { + for ( outchIdx = 0; outchIdx < nchan_out; outchIdx++ ) + { + hDirAC->hParamIsmRendering->mixing_matrix_lin_old[bin_idx][outchIdx + inchIdx * nchan_out] = mixing_matrix[bin_idx][outchIdx + inchIdx * nchan_out]; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_dec_open() + * + * Open Param ISM handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_param_ism_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t i; + DIRAC_DEC_HANDLE hDirAC; + IVAS_OUTPUT_SETUP hOutSetup; + AUDIO_CONFIG output_config; + int32_t output_Fs; + int16_t nchan_out; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_param_ism_dec_open" ); + + /*-----------------------------------------------------------------* + * prepare library opening + *-----------------------------------------------------------------*/ + + if ( ( hDirAC = (DIRAC_DEC_HANDLE) count_malloc( sizeof( DIRAC_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); + } + + /* Assign memory to Param Object handle */ + if ( ( hDirAC->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) count_malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM\n" ) ); + } + + if ( ( hDirAC->hParamIsmRendering = (PARAM_ISM_RENDERING_HANDLE) count_malloc( sizeof( PARAM_ISM_RENDERING_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM Rendering handle\n" ) ); + } + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + output_config = st_ivas->hDecoderConfig->output_config; + nchan_out = st_ivas->hDecoderConfig->nchan_out; + + if ( output_config == AUDIO_CONFIG_EXTERNAL ) + { + hDirAC->hParamIsm->num_obj = nchan_out; + } + else + { + hDirAC->hParamIsm->num_obj = MAX_NUM_OBJECTS; + } + ivas_param_ism_config( hDirAC->hParamIsm ); + + /*-----------------------------------------------------------------* + * set input parameters + *-----------------------------------------------------------------*/ + + hDirAC->slot_size = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX ); + hDirAC->subframe_nbslots = (int16_t) ( CLDFB_NO_COL_MAX * 5.f / 20.f + 0.5f ); + hDirAC->nb_subframes = CLDFB_NO_COL_MAX / hDirAC->subframe_nbslots; + assert( hDirAC->nb_subframes <= MAX_PARAM_SPATIAL_SUBFRAMES ); + hDirAC->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); + + hDirAC->hParamIsm->nbands = MAX_PARAM_ISM_NBANDS; + + for ( i = 0; i < ( hDirAC->hParamIsm->nbands + 1 ); i++ ) + { + hDirAC->hParamIsm->band_grouping[i] = Param_ISM_band_grouping[i]; + + if ( hDirAC->hParamIsm->band_grouping[i] > hDirAC->num_freq_bands ) + { + hDirAC->hParamIsm->band_grouping[i] = hDirAC->num_freq_bands; + } + } + + /*-----------------------------------------------------------------* + * output setup + *-----------------------------------------------------------------*/ + + /* hIntSetup and hOutSetup differs only for Binaural rendering */ + if ( output_config == AUDIO_CONFIG_EXTERNAL ) + { + /* nchan_out is essential for memory initialization for CLDFB Synthesis */ + st_ivas->hIntSetup.nchan_out_woLFE = hDirAC->hParamIsm->num_obj; + st_ivas->hIntSetup.is_loudspeaker_setup = 1; + } + + hOutSetup = st_ivas->hIntSetup; + + if ( !( output_config == AUDIO_CONFIG_MONO || output_config == AUDIO_CONFIG_STEREO ) ) + { + /* Initialize Param ISM Rendering handle */ + if ( ( error = ivas_param_ism_rendering_init( hDirAC->hParamIsmRendering, hOutSetup, st_ivas->nchan_transport, CLDFB_NO_COL_MAX, output_config ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( !( output_config == AUDIO_CONFIG_EXTERNAL || output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM || output_config == AUDIO_CONFIG_MONO || output_config == AUDIO_CONFIG_STEREO ) ) + { + /* Initialize efap handle */ + if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), hOutSetup.ls_azimuth, hOutSetup.ls_elevation, hOutSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* Azi and Ele values are transmitted once per frame per object */ + set_zero( hDirAC->azimuth_values, MAX_NUM_OBJECTS ); + set_zero( hDirAC->elevation_values, MAX_NUM_OBJECTS ); + + hDirAC->dirac_md_buffer_length = 0; + hDirAC->dirac_bs_md_write_idx = 0; + hDirAC->dirac_read_idx = 0; + hDirAC->spar_to_dirac_write_idx = 0; + + if ( ( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) + { + hDirAC->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES; + hDirAC->azimuth = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->azimuth2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->energy_ratio1 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->energy_ratio2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->surroundingCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + hDirAC->azimuth[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->azimuth[i], 0, hDirAC->num_freq_bands ); + hDirAC->elevation[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->elevation[i], 0, hDirAC->num_freq_bands ); + hDirAC->azimuth2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->azimuth2[i], 0, hDirAC->num_freq_bands ); + hDirAC->elevation2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + set_s( hDirAC->elevation2[i], 0, hDirAC->num_freq_bands ); + hDirAC->energy_ratio1[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->energy_ratio1[i], 0.0f, hDirAC->num_freq_bands ); + hDirAC->spreadCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->spreadCoherence[i], 0.0f, hDirAC->num_freq_bands ); + hDirAC->energy_ratio2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->energy_ratio2[i], 0.0f, hDirAC->num_freq_bands ); + hDirAC->spreadCoherence2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->spreadCoherence2[i], 0.0f, hDirAC->num_freq_bands ); + hDirAC->surroundingCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + set_f( hDirAC->surroundingCoherence[i], 0.0f, hDirAC->num_freq_bands ); + } + } + + st_ivas->hDirAC = hDirAC; + + wmops_sub_end(); + return error; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_dec_close() + * + * Close Param ISM handle + *-------------------------------------------------------------------------*/ + +void ivas_param_ism_dec_close( + DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ + AUDIO_CONFIG output_config /* i : output audio configuration */ +) +{ + int16_t i; + + /* Config & CLDFB */ + if ( hDirAC->hParamIsm != NULL ) + { + count_free( hDirAC->hParamIsm ); + hDirAC->hParamIsm = NULL; + } + + if ( ( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->azimuth[i] != NULL ) + { + count_free( hDirAC->azimuth[i] ); + hDirAC->azimuth[i] = NULL; + } + + if ( hDirAC->elevation[i] != NULL ) + { + count_free( hDirAC->elevation[i] ); + hDirAC->elevation[i] = NULL; + } + } + + if ( hDirAC->azimuth != NULL ) + { + count_free( hDirAC->azimuth ); + hDirAC->azimuth = NULL; + } + if ( hDirAC->elevation != NULL ) + { + count_free( hDirAC->elevation ); + hDirAC->elevation = NULL; + } + + if ( hDirAC->azimuth2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->azimuth2[i] != NULL ) + { + count_free( hDirAC->azimuth2[i] ); + hDirAC->azimuth2[i] = NULL; + } + } + count_free( hDirAC->azimuth2 ); + hDirAC->azimuth2 = NULL; + } + + if ( hDirAC->elevation2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->elevation2[i] != NULL ) + { + count_free( hDirAC->elevation2[i] ); + hDirAC->elevation2[i] = NULL; + } + } + count_free( hDirAC->elevation2 ); + hDirAC->elevation2 = NULL; + } + + if ( hDirAC->energy_ratio1 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->energy_ratio1[i] != NULL ) + { + count_free( hDirAC->energy_ratio1[i] ); + hDirAC->energy_ratio1[i] = NULL; + } + } + count_free( hDirAC->energy_ratio1 ); + hDirAC->energy_ratio1 = NULL; + } + + if ( hDirAC->energy_ratio2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->energy_ratio2[i] != NULL ) + { + count_free( hDirAC->energy_ratio2[i] ); + hDirAC->energy_ratio2[i] = NULL; + } + } + count_free( hDirAC->energy_ratio2 ); + hDirAC->energy_ratio2 = NULL; + } + + if ( hDirAC->spreadCoherence != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->spreadCoherence[i] != NULL ) + { + count_free( hDirAC->spreadCoherence[i] ); + hDirAC->spreadCoherence[i] = NULL; + } + } + count_free( hDirAC->spreadCoherence ); + hDirAC->spreadCoherence = NULL; + } + + if ( hDirAC->spreadCoherence2 != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->spreadCoherence2[i] != NULL ) + { + count_free( hDirAC->spreadCoherence2[i] ); + hDirAC->spreadCoherence2[i] = NULL; + } + } + count_free( hDirAC->spreadCoherence2 ); + hDirAC->spreadCoherence2 = NULL; + } + + if ( hDirAC->surroundingCoherence != NULL ) + { + for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) + { + if ( hDirAC->surroundingCoherence[i] != NULL ) + { + count_free( hDirAC->surroundingCoherence[i] ); + hDirAC->surroundingCoherence[i] = NULL; + } + } + count_free( hDirAC->surroundingCoherence ); + hDirAC->surroundingCoherence = NULL; + } + } + + if ( !( output_config == AUDIO_CONFIG_MONO || output_config == AUDIO_CONFIG_STEREO ) ) + { + /* Param ISM Rendering */ + if ( hDirAC->hParamIsmRendering->interpolator != NULL ) + { + count_free( hDirAC->hParamIsmRendering->interpolator ); + hDirAC->hParamIsmRendering->interpolator = NULL; + } + if ( hDirAC->hParamIsmRendering->proto_matrix != NULL ) + { + count_free( hDirAC->hParamIsmRendering->proto_matrix ); + hDirAC->hParamIsmRendering->proto_matrix = NULL; + } + } + + if ( hDirAC->hParamIsmRendering != NULL ) + { + count_free( hDirAC->hParamIsmRendering ); + hDirAC->hParamIsmRendering = NULL; + } + + count_free( hDirAC ); + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_dec() + * + * Param ISM decoder + *-------------------------------------------------------------------------*/ + +void ivas_param_ism_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output*/ +) +{ + int16_t ch, nchan_transport, nchan_out, nchan_out_woLFE, i; + int16_t subframe_idx, slot_idx, index_slot, bin_idx; + + /* CLDFB Input Buffers */ + float Cldfb_RealBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + + /* CLDFB Output Buffers */ + float Cldfb_RealBuffer[PARAM_ISM_MAX_CHAN][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[PARAM_ISM_MAX_CHAN][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + + /* Direct Response/EFAP Gains */ + float direct_response[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN]; + + /* Covariance Rendering */ + float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; + + DIRAC_DEC_HANDLE hDirAC; + + IVAS_OUTPUT_SETUP hSetup; + + /* Initialization */ + hDirAC = st_ivas->hDirAC; + assert( hDirAC ); + + nchan_transport = st_ivas->nchan_transport; + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) + { + nchan_out = st_ivas->hDirAC->hParamIsm->num_obj; + nchan_out_woLFE = nchan_out; + st_ivas->hDecoderConfig->nchan_out = nchan_out; + } + else + { + nchan_out = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; + nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; + } + + hSetup = st_ivas->hIntSetup; + + wmops_sub_start( "ivas_param_ism_dec" ); + + /* Frame-level Processing */ + /* De-quantization */ + ivas_param_ism_dec_dequant_DOA( hDirAC ); + ivas_param_ism_dec_dequant_powrat( hDirAC ); + + /* obtain the direct response using EFAP */ + if ( !( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) ) + { + for ( i = 0; i < hDirAC->hParamIsm->num_obj; i++ ) + { + efap_determine_gains( st_ivas->hEFAPdata, direct_response[i], hDirAC->azimuth_values[i], hDirAC->elevation_values[i], EFAP_MODE_EFAP ); + } + } + else + { + int16_t j; + + for ( i = 0; i < hDirAC->hParamIsm->num_obj; i++ ) + { + for ( j = 0; j < nchan_out_woLFE; j++ ) + { + if ( i == j ) + { + direct_response[i][j] = 1.0f; + } + else + { + direct_response[i][j] = 0.0f; + } + } + } + + for ( i = 0; i < nchan_transport; i++ ) + { + for ( j = 0; j < nchan_out_woLFE; j++ ) + { + if ( i == j ) + { + hDirAC->hParamIsmRendering->proto_matrix[( i * nchan_out_woLFE ) + j] = 1.0f; + } + else + { + hDirAC->hParamIsmRendering->proto_matrix[( i * nchan_out_woLFE ) + j] = 0.0f; + } + } + } + } + + for ( ch = 0; ch < nchan_transport; ch++ ) + { + /*-----------------------------------------------------------------* + * CLDFB Analysis + *-----------------------------------------------------------------*/ + for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) + { + cldfbAnalysis_ts( &( output_f[ch][hDirAC->num_freq_bands * slot_idx] ), Cldfb_RealBuffer_in[ch][slot_idx], Cldfb_ImagBuffer_in[ch][slot_idx], hDirAC->num_freq_bands, st_ivas->cldfbAnaDec[ch] ); + } + } + + /* Obtain Mixing Matrix on a frame-level */ + for ( bin_idx = 0; bin_idx < hDirAC->num_freq_bands; bin_idx++ ) + { + set_f( mixing_matrix[bin_idx], 0.0f, nchan_transport * nchan_out_woLFE ); + } + + /* Compute mixing matrix */ + ivas_param_ism_compute_mixing_matrix( hDirAC, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, direct_response, nchan_transport, nchan_out_woLFE, 0, CLDFB_NO_COL_MAX, mixing_matrix ); + + /* subframe loop for synthesis*/ + for ( subframe_idx = 0; subframe_idx < hDirAC->nb_subframes; subframe_idx++ ) + { + uint16_t slot_idx_start = subframe_idx * hDirAC->subframe_nbslots; + uint16_t idx_in; + uint16_t idx_lfe; + + /* Set some memories to zero */ + for ( ch = 0; ch < nchan_out_woLFE; ch++ ) + { + for ( slot_idx = 0; slot_idx < hDirAC->subframe_nbslots; slot_idx++ ) + { + set_f( Cldfb_RealBuffer[ch][slot_idx], 0.0f, hDirAC->num_freq_bands ); + set_f( Cldfb_ImagBuffer[ch][slot_idx], 0.0f, hDirAC->num_freq_bands ); + } + } + + for ( slot_idx = 0; slot_idx < hDirAC->subframe_nbslots; slot_idx++ ) + { + index_slot = slot_idx_start + slot_idx; + + /* Compute bandwise rendering to target LS using covariance rendering */ + ivas_param_ism_rendering( hDirAC, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, + Cldfb_RealBuffer, Cldfb_ImagBuffer, mixing_matrix, slot_idx, index_slot, + nchan_out_woLFE, nchan_transport ); + } + + /* CLDFB Synthesis */ + idx_in = 0; + idx_lfe = 0; + + for ( ch = 0; ch < nchan_out; ch++ ) + { + if ( ( hSetup.num_lfe > 0 ) && ( hSetup.index_lfe[idx_lfe] == ch ) ) + { + set_zero( &( output_f[ch][slot_idx_start * hDirAC->num_freq_bands] ), hDirAC->subframe_nbslots * hDirAC->num_freq_bands ); + + if ( idx_lfe < ( hSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else + { + float *RealBuffer[16]; + float *ImagBuffer[16]; + + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < hDirAC->subframe_nbslots; i++ ) + { + RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; + ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; + } + + cldfbSynthesis( RealBuffer, ImagBuffer, &( output_f[ch][slot_idx_start * hDirAC->num_freq_bands] ), + hDirAC->num_freq_bands * hDirAC->subframe_nbslots, st_ivas->cldfbSynDec[ch] ); + + idx_in++; + } + } + } + + /* copy the memories */ + /* store mixing matrix for next subframe */ + ivas_param_ism_update_mixing_matrix( hDirAC, mixing_matrix, nchan_transport, nchan_out_woLFE ); + + /* store MetaData parameters */ + for ( ch = 0; ch < hDirAC->hParamIsm->num_obj; ch++ ) + { + if ( st_ivas->hDirAC->azimuth_values[ch] > 180.0f ) + { + st_ivas->hIsmMetaData[ch]->azimuth = st_ivas->hDirAC->azimuth_values[ch] - 360.0f; + } + else + { + st_ivas->hIsmMetaData[ch]->azimuth = st_ivas->hDirAC->azimuth_values[ch]; + } + + st_ivas->hIsmMetaData[ch]->elevation = st_ivas->hDirAC->elevation_values[ch]; + } + + wmops_sub_end(); + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_params_to_masa_param_mapping() + * + * + *-------------------------------------------------------------------------*/ + +void ivas_param_ism_params_to_masa_param_mapping( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + DIRAC_DEC_HANDLE hDirAC; + int16_t nBins; + int16_t band_idx, bin_idx, sf_idx; + int16_t brange[2]; + int16_t azimuth[2]; + int16_t elevation[2]; + float power_ratio[2]; + hDirAC = st_ivas->hDirAC; + nBins = hDirAC->num_freq_bands; + ivas_param_ism_dec_dequant_DOA( hDirAC ); + ivas_param_ism_dec_dequant_powrat( hDirAC ); + + if ( hDirAC->hParamIsm->num_obj > 1 ) + { + hDirAC->numSimultaneousDirections = 2; + for ( band_idx = 0; band_idx < hDirAC->hParamIsm->nbands; band_idx++ ) + { + brange[0] = hDirAC->hParamIsm->band_grouping[band_idx]; + brange[1] = hDirAC->hParamIsm->band_grouping[band_idx + 1]; + + azimuth[0] = (int16_t) roundf( hDirAC->azimuth_values[hDirAC->hParamIsm->obj_indices[band_idx][0][0]] ); + elevation[0] = (int16_t) roundf( hDirAC->elevation_values[hDirAC->hParamIsm->obj_indices[band_idx][0][0]] ); + power_ratio[0] = hDirAC->power_ratios[band_idx][0][0]; + + azimuth[1] = (int16_t) roundf( hDirAC->azimuth_values[hDirAC->hParamIsm->obj_indices[band_idx][0][1]] ); + elevation[1] = (int16_t) roundf( hDirAC->elevation_values[hDirAC->hParamIsm->obj_indices[band_idx][0][1]] ); + power_ratio[1] = hDirAC->power_ratios[band_idx][0][1]; + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) + { + hDirAC->azimuth[sf_idx][bin_idx] = azimuth[0]; + hDirAC->elevation[sf_idx][bin_idx] = elevation[0]; + hDirAC->energy_ratio1[sf_idx][bin_idx] = power_ratio[0]; + hDirAC->azimuth2[sf_idx][bin_idx] = azimuth[1]; + hDirAC->elevation2[sf_idx][bin_idx] = elevation[1]; + hDirAC->energy_ratio2[sf_idx][bin_idx] = power_ratio[1]; + } + } + } + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( bin_idx = 0; bin_idx < nBins; bin_idx++ ) + { + hDirAC->spreadCoherence[sf_idx][bin_idx] = 0.0f; + hDirAC->spreadCoherence2[sf_idx][bin_idx] = 0.0f; + hDirAC->surroundingCoherence[sf_idx][bin_idx] = 0.0; + } + } + } + else + { + hDirAC->numSimultaneousDirections = 1; + azimuth[0] = (int16_t) roundf( hDirAC->azimuth_values[0] ); + elevation[0] = (int16_t) roundf( hDirAC->elevation_values[0] ); + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( bin_idx = 0; bin_idx < nBins; bin_idx++ ) + { + hDirAC->azimuth[sf_idx][bin_idx] = azimuth[0]; + hDirAC->elevation[sf_idx][bin_idx] = elevation[0]; + hDirAC->energy_ratio1[sf_idx][bin_idx] = 1.0f; + hDirAC->spreadCoherence[sf_idx][bin_idx] = 0.0f; + hDirAC->surroundingCoherence[sf_idx][bin_idx] = 0.0; + } + } + } + + return; +} + +/*------------------------------------------------------------------------- + * ivas_ism_dec_config() + * + * - select ISM format mode + * - reconfigure the ISM format decoder + *-------------------------------------------------------------------------*/ + +/*! r : ISM format mode */ +ivas_error ivas_ism_dec_config( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t num_obj /* i : number of objects in the bitstream */ +) +{ + int32_t ivas_total_brate; + ISM_MODE last_ism_mode; + ivas_error error; + + error = IVAS_ERR_OK; + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + /* store last frame ISM mode */ + last_ism_mode = st_ivas->ism_mode; + + if ( !st_ivas->bfi && ivas_total_brate != IVAS_SID_4k4 && ivas_total_brate != FRAME_NO_DATA ) + { + /* select ISM format mode */ + st_ivas->ism_mode = ivas_ism_mode_select( num_obj, ivas_total_brate ); + + st_ivas->nchan_transport = num_obj; + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + st_ivas->nchan_transport = 2; + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) + { + st_ivas->hDecoderConfig->nchan_out = num_obj; + } + } + + if ( st_ivas->ini_active_frame != 0 ) + { + /* ISM format switching */ + if ( st_ivas->ism_mode != last_ism_mode ) + { + /*ivas_ism_dec_reconfigure( st_ivas );*/ + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "\n\n!!! Error: ISM format switching not supported yet!!!\n\n" ); + } + } + } + else if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_4k4 ) + { + st_ivas->nchan_transport = num_obj; + } + switch ( num_obj ) + { + case 1: + st_ivas->transport_config = AUDIO_CONFIG_ISM1; + break; + case 2: + st_ivas->transport_config = AUDIO_CONFIG_ISM2; + break; + case 3: + st_ivas->transport_config = AUDIO_CONFIG_ISM3; + break; + case 4: + st_ivas->transport_config = AUDIO_CONFIG_ISM4; + break; + default: + st_ivas->transport_config = AUDIO_CONFIG_INVALID; + break; + } + + return error; +} diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c new file mode 100644 index 0000000000..0e7f5f864a --- /dev/null +++ b/lib_dec/ivas_ism_renderer.c @@ -0,0 +1,224 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_stat_com.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------------* + * ivas_ism_renderer_open() + * + * Open struct for object rendering, reserve memory, and init values. + *-------------------------------------------------------------------------*/ + +ivas_error ivas_ism_renderer_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t i; + uint16_t interpolator_length; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( st_ivas->hIsmRendererData = (ISM_RENDERER_HANDLE) count_malloc( sizeof( ISM_RENDERER_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM renderer\n" ) ); + } + + if ( st_ivas->hIntSetup.is_loudspeaker_setup && st_ivas->hIntSetup.ls_azimuth != NULL && st_ivas->hIntSetup.ls_elevation != NULL ) + { + if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth, st_ivas->hIntSetup.ls_elevation, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) + { + set_f( st_ivas->hIsmRendererData->prev_gains[i], 0.0f, MAX_OUTPUT_CHANNELS ); + } + + interpolator_length = (uint16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); + for ( i = 0; i < interpolator_length; i++ ) + { + st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length ); + } + + return error; +} + + +/*-------------------------------------------------------------------------* + * ivas_ism_render() + * + * Object rendering process. + *-------------------------------------------------------------------------*/ + +void ivas_ism_render( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: core-coder transport channels/object output */ + const int16_t output_frame /* i : output frame length per channel */ +) +{ + int16_t i, j, k, j2; + float input_f[MAX_NUM_OBJECTS][L_FRAME48k]; + float tmp_output_f[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + float gains[MAX_NUM_OBJECTS][MAX_OUTPUT_CHANNELS]; + float g1, g2; + int16_t num_objects, nchan_out_woLFE, lfe_index; + int16_t azimuth, elevation; + float Rmat[3][3]; + + num_objects = st_ivas->nchan_transport; + nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; + + lfe_index = 0; + + for ( j = 0; j < nchan_out_woLFE; j++ ) + { + set_f( tmp_output_f[j], 0.0f, output_frame ); + } + + for ( i = 0; i < num_objects; i++ ) + { + mvr2r( output_f[i], input_f[i], output_frame ); + } + + for ( i = 0; i < nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; i++ ) + { + set_f( output_f[i], 0.0f, output_frame ); + } + + if ( st_ivas->hHeadTrackData != NULL && st_ivas->hHeadTrackData->num_quaternions >= 0 ) + { + /* Calculate rotation matrix from the quaternion */ + QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], Rmat ); + } + + for ( i = 0; i < num_objects; i++ ) + { + if ( st_ivas->intern_config == AUDIO_CONFIG_STEREO ) + { + float aziRad, eleRad; + float y, mappedX, aziRadMapped, A, A2, A3; + const float LsAngleRad = 30.0f * PI_OVER_180; + + /* Convert azi and ele to an azi value of the cone of confusion */ + aziRad = st_ivas->hIsmMetaData[i]->azimuth * PI_OVER_180; + eleRad = st_ivas->hIsmMetaData[i]->elevation * PI_OVER_180; + y = ( sinf( aziRad ) * cosf( eleRad ) ); + mappedX = sqrtf( max( 0.0f, 1.0f - ( y * y ) ) ); + aziRadMapped = atan2f( y, mappedX ); + + /* Determine the amplitude panning gains */ + if ( aziRadMapped >= LsAngleRad ) + { /* Left side */ + gains[i][0] = 1.0f; + gains[i][1] = 0.0f; + } + else if ( aziRadMapped <= -LsAngleRad ) + { /* Right side */ + gains[i][0] = 0.0f; + gains[i][1] = 1.0f; + } + else /* Tangent panning law */ + { + A = tanf( aziRadMapped ) / tanf( LsAngleRad ); + A2 = ( A - 1.0f ) / max( 0.001f, A + 1.0f ); + A3 = 1.0f / ( A2 * A2 + 1.0f ); + gains[i][0] = sqrtf( A3 ); + gains[i][1] = sqrtf( 1.0f - A3 ); + } + } + else + { + /* Head rotation: rotate the object positions depending the head's orientation */ + if ( st_ivas->hHeadTrackData != NULL && st_ivas->hHeadTrackData->num_quaternions >= 0 ) + { + rotateAziEle( st_ivas->hIsmMetaData[i]->azimuth, st_ivas->hIsmMetaData[i]->elevation, &azimuth, &elevation, Rmat, st_ivas->hIntSetup.is_planar_setup ); + } + else + { + azimuth = (int16_t) ( st_ivas->hIsmMetaData[i]->azimuth + 0.5f ); + elevation = (int16_t) ( st_ivas->hIsmMetaData[i]->elevation + 0.5f ); + + if ( st_ivas->hIntSetup.is_planar_setup ) + { + /* If no elevation support in output format, then rendering should be done with zero elevation */ + elevation = 0; + } + } + + if ( st_ivas->hEFAPdata != NULL ) + { + efap_determine_gains( st_ivas->hEFAPdata, gains[i], azimuth, elevation, EFAP_MODE_EFAP ); + } + } + + for ( j = 0; j < nchan_out_woLFE; j++ ) + { + if ( fabsf( gains[i][j] ) > 0.0f || fabsf( st_ivas->hIsmRendererData->prev_gains[i][j] ) > 0.0f ) + { + for ( k = 0; k < output_frame; k++ ) + { + g1 = st_ivas->hIsmRendererData->interpolator[k]; + g2 = 1.0f - g1; + tmp_output_f[j][k] += ( g1 * gains[i][j] + g2 * st_ivas->hIsmRendererData->prev_gains[i][j] ) * input_f[i][k]; + } + } + + st_ivas->hIsmRendererData->prev_gains[i][j] = gains[i][j]; + } + } + /* Move to output skipping LFE */ + for ( j = 0, j2 = 0; j < nchan_out_woLFE; j++, j2++ ) + { + if ( ( st_ivas->hIntSetup.num_lfe > 0 ) && ( st_ivas->hIntSetup.index_lfe[lfe_index] == j ) ) + { + ( lfe_index < ( st_ivas->hIntSetup.num_lfe - 1 ) ) ? ( lfe_index++, j2++ ) : j2++; + } + mvr2r( tmp_output_f[j], output_f[j2], output_frame ); + } + return; +} diff --git a/lib_dec/ivas_lfe_dec.c b/lib_dec/ivas_lfe_dec.c new file mode 100644 index 0000000000..a3dd0472ac --- /dev/null +++ b/lib_dec/ivas_lfe_dec.c @@ -0,0 +1,464 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "math.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +/* Delay handling of LFE: overall_lfe_delay = max(11.5, BLOCK_OFFSET_MS); */ +#define BLOCK_OFFSET_MS 12 + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_dec_delay_adjust() + * + * Adjusts the input to be passed to filtering block taking into consideration + * LFE delay calculated during initialization time + *-----------------------------------------------------------------------------------------*/ + +static void ivas_lfe_dec_delay_adjust( + LFE_DEC_HANDLE hLFE, + float *pInbuf, + float output_lfe_ch[] ) +{ + int16_t i, diff, loop_counter; + int16_t fade_len, dct_len, zero_pad_len; + float tmp_buffer[L_FRAME48k]; + + diff = hLFE->lfe_prior_buf_len - hLFE->pWindow_state->fade_len; + loop_counter = diff < 0 ? 0 : diff; + fade_len = hLFE->pWindow_state->fade_len; + dct_len = hLFE->pWindow_state->dct_len; + zero_pad_len = hLFE->pWindow_state->zero_pad_len; + + for ( i = 0; i < loop_counter; i++ ) + { + tmp_buffer[i] = hLFE->prior_out_buffer[i]; + } + + for ( i = 0; i < fade_len; i++ ) + { + tmp_buffer[i + loop_counter] = hLFE->prior_out_buffer[i + loop_counter] + pInbuf[i]; + } + loop_counter += fade_len; + + for ( i = 0; i < fade_len + ( zero_pad_len << 1 ); i++ ) + { + tmp_buffer[i + loop_counter] = pInbuf[i + fade_len]; + } + + for ( i = 0; i < hLFE->lfe_prior_buf_len; i++ ) + { + hLFE->prior_out_buffer[i] = tmp_buffer[i + dct_len]; + } + + for ( i = 0; i < dct_len; i++ ) + { + output_lfe_ch[i] = tmp_buffer[i]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_dec_windowing() + * + * LFE windowing block, input is passed through Fielder window + *-----------------------------------------------------------------------------------------*/ + +static void ivas_lfe_dec_windowing( + LFE_DEC_HANDLE hLFE, + float *pInbuf ) +{ + int16_t i; + int16_t fade_len; + int16_t zero_pad_len; + const float *pWindow_coeffs; + + fade_len = hLFE->pWindow_state->fade_len; + zero_pad_len = hLFE->pWindow_state->zero_pad_len; + pWindow_coeffs = hLFE->pWindow_state->pWindow_coeffs; + + for ( i = 0; i < fade_len; i++ ) + { + pInbuf[i] = pInbuf[zero_pad_len + i] * pWindow_coeffs[i]; + } + + for ( i = 0; i < zero_pad_len * 2; i++ ) + { + pInbuf[fade_len + i] = pInbuf[zero_pad_len + fade_len + i]; + } + + for ( i = 0; i < fade_len; i++ ) + { + pInbuf[zero_pad_len * 2 + fade_len + i] = pInbuf[zero_pad_len * 3 + fade_len + i] * pWindow_coeffs[fade_len - i - 1]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_dec_dequant() + * + * LDE de-quatization block, calls arithmetic deccoding block inside + *-----------------------------------------------------------------------------------------*/ + +static int16_t ivas_lfe_dec_dequant( + LFE_DEC_HANDLE hLFE, + Decoder_State *st0, + float *pOut_buf, + int16_t *num_dct_pass_bins ) +{ + int16_t shift_bits, i; + int16_t quant_strategy; + int16_t lfe_bits; + int16_t all_zeros_dct; + int16_t min_shift_bits; + int16_t shift; + int16_t sign_bits[IVAS_LFE_MAX_NUM_DCT_COEFFS]; + int16_t abs_values[IVAS_LFE_MAX_NUM_DCT_COEFFS]; + int16_t values[IVAS_LFE_MAX_NUM_DCT_COEFFS]; + int16_t num_dct_coeffs, num_groups; + + all_zeros_dct = get_next_indice( st0, 1 ); + lfe_bits = st0->next_bit_pos; + shift_bits = IVAS_LFE_SHIFT_BITS; + min_shift_bits = 0; + shift = 0; + + if ( all_zeros_dct == 1 ) + { + for ( i = 0; i < IVAS_LFE_MAX_NUM_DCT_COEFFS; i++ ) + { + pOut_buf[i] = 0.0f; + } + } + else + { + float two_pow_shift_by_4; + Tastat as; + int16_t iii, extra_bits_read; + + extra_bits_read = 0; + quant_strategy = get_next_indice( st0, 1 ); + *num_dct_pass_bins = ivas_lfe_num_dct_pass_bins_tbl[quant_strategy]; + num_dct_coeffs = (int16_t) ( *num_dct_pass_bins * IVAS_LFE_NUM_COEFFS_IN_SUBGRP ); + num_groups = ( num_dct_coeffs / ( 2 * IVAS_LFE_NUM_COEFFS_IN_SUBGRP ) ); + min_shift_bits = ivas_lfe_min_shift_tbl[quant_strategy]; + shift = get_next_indice( st0, shift_bits ) + min_shift_bits * IVAS_LFE_SHIFTS_PER_DOUBLE; + + for ( i = 0; i < num_dct_coeffs; i++ ) + { + sign_bits[i] = get_next_indice( st0, 1 ); + } + + for ( iii = 0; iii < num_groups; iii++ ) + { + extra_bits_read = 0; + ivas_ari_start_decoding_14bits_ext_1_lfe( st0, &as, &extra_bits_read ); + + for ( i = 0; i < 4; i++ ) + { + abs_values[iii * 4 + i] = ivas_ari_decode_14bits_bit_ext_1_lfe( st0, &as, hLFE->cum_freq_models[quant_strategy][iii], &extra_bits_read ); + } + ivas_ari_done_decoding_14bits_ext_1_lfe( st0, extra_bits_read ); + } + + for ( i = 0; i < num_dct_coeffs; i++ ) + { + values[i] = abs_values[i]; + if ( sign_bits[i] > 0 ) + { + values[i] = -abs_values[i] - 1; + } + } + + two_pow_shift_by_4 = powf( 2, ( -shift / (float) IVAS_LFE_SHIFTS_PER_DOUBLE ) ); + + for ( i = 0; i < num_groups; i++ ) + { + pOut_buf[2 * i] = values[4 * i] * two_pow_shift_by_4; + pOut_buf[2 * i + 1] = values[4 * i + 1] * two_pow_shift_by_4; + + pOut_buf[2 * i + *num_dct_pass_bins] = values[4 * i + 2] * two_pow_shift_by_4; + pOut_buf[2 * i + *num_dct_pass_bins + 1] = values[4 * i + 3] * two_pow_shift_by_4; + } + } + + lfe_bits = st0->next_bit_pos - lfe_bits; + + return lfe_bits; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_dec() + * + * LFE channel decoder + *-----------------------------------------------------------------------------------------*/ + +void ivas_lfe_dec( + LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t bfi, /* i : BFI flag */ + float output_lfe_ch[] /* o : output LFE synthesis */ +) +{ + int16_t num_dct_pass_bins; + int16_t i, j, dct_len; + float out[L_FRAME48k]; + float t_audio[L_FRAME48k]; + float lfe_dct[IVAS_LFE_MAX_NUM_DCT_COEFFS]; + + dct_len = hLFE->pWindow_state->dct_len; + num_dct_pass_bins = IVAS_LFE_MAX_NUM_DCT_PASS_BINS; + + if ( bfi == 0 ) + { + ivas_lfe_dec_dequant( hLFE, st0, lfe_dct, &num_dct_pass_bins ); + + set_zero( t_audio, dct_len ); + mvr2r( lfe_dct, t_audio, num_dct_pass_bins ); + ivas_imdct( t_audio, out, dct_len ); + ivas_lfe_dec_windowing( hLFE, out ); + ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch ); + + set_zero( t_audio, dct_len ); + mvr2r( &lfe_dct[num_dct_pass_bins], t_audio, num_dct_pass_bins ); + + ivas_imdct( t_audio, out, dct_len ); + ivas_lfe_dec_windowing( hLFE, out ); + ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch + dct_len ); + + mvr2r( hLFE->prevsynth_buf + L_FRAME_1k6, hLFE->prevsynth_buf, LFE_PLC_BUFLEN - L_FRAME_1k6 ); + + j = 0; + for ( i = 0; i < L_FRAME_1k6; i++ ) + { + hLFE->prevsynth_buf[i + LFE_PLC_BUFLEN - L_FRAME_1k6] = output_lfe_ch[j]; + j += output_frame / L_FRAME_1k6; + } + + hLFE->bfi_count = 0; + } + else + { + /* note: in BFI branch, buffer 't_audio' is in time-domain ('wtda' signal) */ + hLFE->bfi_count++; + LFE_tdplc( hLFE, hLFE->prevsynth_buf, t_audio, output_frame ); + + ivas_itda( t_audio, out, dct_len ); + ivas_lfe_dec_windowing( hLFE, out ); + ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch ); + + ivas_itda( t_audio + dct_len, out, dct_len ); + ivas_lfe_dec_windowing( hLFE, out ); + ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch + dct_len ); + + mvr2r( hLFE->prevsynth_buf + L_FRAME_1k6, hLFE->prevsynth_buf, LFE_PLC_BUFLEN - L_FRAME_1k6 ); + + j = 0; + for ( i = 0; i < L_FRAME_1k6; i++ ) + { + hLFE->prevsynth_buf[i + LFE_PLC_BUFLEN - L_FRAME_1k6] = output_lfe_ch[j]; + j += output_frame / L_FRAME_1k6; + } + } + + if ( hLFE->filter_state.order > 0 ) + { + /* Low Pass Filter */ + ivas_filter_process( &hLFE->filter_state, output_lfe_ch, output_frame ); + } + + /* ADD delay to make overall max(block_offset, 11.5)*/ + if ( hLFE->lfe_addl_delay > 0 ) + { + delay_signal( output_lfe_ch, output_frame, hLFE->lfe_delay_buf, hLFE->lfe_addl_delay ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_create_lfe_dec() + * + * Create, allocate and initialize IVAS decoder LFE handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_create_lfe_dec( + LFE_DEC_HANDLE *hLFE_out, /* o : IVAS LFE decoder structure */ + const int32_t output_Fs, /* i : output sampling rate */ + const float add_delay_s /* additional delay in second to lfe to sync with binaural filter*/ +) +{ + float low_pass_delay_dec_out, block_offset_s; + int16_t filt_order, output_frame; + const float *filt_coeff; + LFE_DEC_HANDLE hLFE; + float lfe_addl_delay_s; + + low_pass_delay_dec_out = 0; + block_offset_s = 0; + + output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + + /*-----------------------------------------------------------------* + * Allocate LFE handle + *-----------------------------------------------------------------*/ + + if ( ( hLFE = (LFE_DEC_HANDLE) count_malloc( sizeof( LFE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE\n" ) ); + } + + /*-----------------------------------------------------------------* + * LFE Window: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) count_malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE window structure\n" ) ); + } + + lfe_window_init( hLFE->pWindow_state, output_Fs, output_frame ); + + /* Initialization for entropy coding */ + hLFE->cum_freq_models[0][0] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg1; + hLFE->cum_freq_models[0][1] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg2; + hLFE->cum_freq_models[0][2] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg3; + hLFE->cum_freq_models[0][3] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg4; + hLFE->cum_freq_models[1][0] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg1; + hLFE->cum_freq_models[1][1] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg2; + hLFE->cum_freq_models[1][2] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg3; + hLFE->cum_freq_models[1][3] = &ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg4; + + /* delay calculation */ + hLFE->lfe_block_delay_s = IVAS_LFE_FADE_LEN_SEC_FLOAT + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; + + block_offset_s = BLOCK_OFFSET_MS * 0.001f; + + if ( ( block_offset_s - hLFE->lfe_block_delay_s ) >= ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3] ) + { + filt_order = IVAS_FILTER_ORDER_4; + low_pass_delay_dec_out = ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; + } + else if ( ( block_offset_s - hLFE->lfe_block_delay_s ) >= ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_2 - 2] ) + { + filt_order = IVAS_FILTER_ORDER_2; + low_pass_delay_dec_out = ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_2 - 2]; + } + else + { + filt_order = 0; + low_pass_delay_dec_out = 0; + } + + if ( filt_order > 0 ) + { + /* filter init */ + ivas_lfe_lpf_select_filt_coeff( output_Fs, filt_order, &filt_coeff ); + ivas_filters_init( &hLFE->filter_state, filt_coeff, filt_order ); + } + else + { + hLFE->filter_state.order = filt_order; + } + hLFE->lfe_block_delay_s = hLFE->lfe_block_delay_s + low_pass_delay_dec_out; + hLFE->lfe_prior_buf_len = (int16_t) ( IVAS_LFE_FADE_LEN_SEC_FLOAT * output_Fs ); + + hLFE->bfi_count = 0; + + lfe_addl_delay_s = block_offset_s - hLFE->lfe_block_delay_s; + lfe_addl_delay_s = max( 0.0f, lfe_addl_delay_s ); + hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ) + (int16_t) roundf( add_delay_s * output_Fs ); + hLFE->lfe_block_delay_s += lfe_addl_delay_s + add_delay_s; + + if ( hLFE->lfe_addl_delay > 0 ) + { + if ( ( hLFE->lfe_delay_buf = (float *) count_malloc( hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE additional delay buffer\n" ) ); + } + set_zero( (float *) hLFE->lfe_delay_buf, hLFE->lfe_addl_delay ); + } + else + { + hLFE->lfe_delay_buf = NULL; + } + + + *hLFE_out = hLFE; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_lfe_dec_close() + * + * Destroy IVAS decoder LFE handle + *-------------------------------------------------------------------------*/ + +void ivas_lfe_dec_close( + LFE_DEC_HANDLE hLFE /* i/o: LFE decoder handle */ +) +{ + count_free( hLFE->pWindow_state ); + hLFE->pWindow_state = NULL; + + if ( hLFE->lfe_delay_buf != NULL ) + { + count_free( hLFE->lfe_delay_buf ); + hLFE->lfe_delay_buf = NULL; + } + + count_free( hLFE ); + + return; +} diff --git a/lib_dec/ivas_lfe_plc.c b/lib_dec/ivas_lfe_plc.c new file mode 100644 index 0000000000..71d1aa7a5e --- /dev/null +++ b/lib_dec/ivas_lfe_plc.c @@ -0,0 +1,540 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define LFE_PLC_DSF ( 48000 / LFE_PLC_FS ) +#define LFE_PLC_LPCORD ( 20 ) +#define LFE_PLC_MAXITER ( 10 ) +#define POW_THR ( 1.0e-8f ) +#define LFE_PLC_RECLEN_48K ( ( IVAS_LFE_NUM_COEFFS_IN_SUBGRP + 1 ) * L_FRAME48k / IVAS_LFE_NUM_COEFFS_IN_SUBGRP + LFE_PLC_FDEL ) +#define LFE_PLC_RECLEN ( ( LFE_PLC_RECLEN_48K / LFE_PLC_DSF ) ) +#define LFE_PLC_MUTE_THR ( 10 ) +#define LFE_PLC_BURST_ATT ( pow( pow( 10.0, -3.0 / 20.0 ), 1.0 / ( LFE_PLC_FS * 0.02 ) ) ) /* attenuate 3dB per frame starting with 10th consecutive loss */ + +#define MAX_LEN_LP 960 + +#define EPS_STOP 1e-5 + +/*------------------------------------------------------------------------------------------* + * Static function declarations + * + * Note (DLB): the local double precision functions defined below are replica of corresponding + * float functions defined in tools.c, lpc_tools.c and syn_filt.c. + * Double precision arithmetic is required for proper functioning of the lfe_plc. + *------------------------------------------------------------------------------------------*/ + +static void mvr2d( + const float x[], /* i : input vector */ + double y[], /* o : output vector */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + + if ( n <= 0 ) + { + /* cannot transfer vectors with size 0 */ + return; + } + + for ( i = n - 1; i >= 0; i-- ) + { + y[i] = x[i]; + } + + return; +} + + +/*---------------------------------------------------------------------* + * autocorr() + * + * Compute autocorrelations of input signal + *---------------------------------------------------------------------*/ + +static void d_autocorr( + const double *x, /* i : input signal */ + double *r, /* o : autocorrelations vector */ + const int16_t m, /* i : order of LP filter */ + const int16_t len, /* i : window size */ + const double *wind, /* i : window */ + const int16_t rev_flag, /* i : flag to reverse window */ + const int16_t sym_flag, /* i : symmetric window flag */ + const int16_t no_thr /* i : flag to avoid thresholding */ +) +{ + double t[MAX_LEN_LP]; + double s; + int16_t i, j; + + /* Windowing of signal */ + if ( rev_flag == 1 ) + { + /* time reversed window */ + for ( i = 0; i < len; i++ ) + { + t[i] = x[i] * wind[len - i - 1]; + } + } + else if ( sym_flag == 1 ) + { + /* symmetric window of even length */ + for ( i = 0; i < len / 2; i++ ) + { + t[i] = x[i] * wind[i]; + } + + for ( ; i < len; i++ ) + { + t[i] = x[i] * wind[len - 1 - i]; + } + } + else /* assymetric window */ + { + for ( i = 0; i < len; i++ ) + { + t[i] = x[i] * wind[i]; + } + } + + /* Compute r[1] to r[m] */ + for ( i = 0; i <= m; i++ ) + { + s = t[0] * t[i]; + for ( j = 1; j < len - i; j++ ) + { + s += t[j] * t[i + j]; + } + r[i] = s; + } + + if ( r[0] < 100.0f && no_thr == 0 ) + { + r[0] = 100.0f; + } + + return; +} + + +/*---------------------------------------------------------------------* + * lev_dur() + * + * Wiener-Levinson-Durbin algorithm to compute LP parameters from the autocorrelations + * of input signal + *---------------------------------------------------------------------*/ + +/* !r: energy of prediction error */ +static int16_t d_lev_dur( + double *a, /* o : LP coefficients (a[0] = 1.0) */ + const double *r, /* i : vector of autocorrelations */ + const int16_t m, /* i : order of LP filter */ + double epsP[] /* o : prediction error energy */ +) +{ + int16_t i, j, l; + double buf[TCXLTP_LTP_ORDER]; + double *rc; /* reflection coefficients 0,...,m-1 */ + double s, at, err; + int16_t flag = 0; + + rc = &buf[0]; + rc[0] = ( -r[1] ) / r[0]; + a[0] = 1.0; + a[1] = rc[0]; + err = r[0] + r[1] * rc[0]; + + if ( epsP != NULL ) + { + epsP[0] = r[0]; + epsP[1] = err; + } + + for ( i = 2; i <= m; i++ ) + { + s = 0.0; + for ( j = 0; j < i; j++ ) + { + s += r[i - j] * a[j]; + } + + rc[i - 1] = ( -s ) / err; + if ( fabs( rc[i - 1] ) > 0.99945f ) + { + flag = 1; /* Test for unstable filter. If unstable keep old A(z) */ + } + for ( j = 1; j <= i / 2; j++ ) + { + l = i - j; + at = a[j] + rc[i - 1] * a[l]; + a[l] += rc[i - 1] * a[j]; + a[j] = at; + } + + a[i] = rc[i - 1]; + + err += rc[i - 1] * s; + + if ( err <= 0.0f ) + { + err = 0.01f; + } + + if ( epsP != NULL ) + { + epsP[i] = err; + } + } + + return ( flag ); +} + +/*-------------------------------------------------------------------* + * a2rc() + * + * Convert from LPC to reflection coeff + *-------------------------------------------------------------------*/ + +static uint16_t d_a2rc( + const double *a, /* i : LPC coefficients */ + double *refl, /* o : Reflection co-efficients */ + const int16_t lpcorder /* i : LPC order */ +) +{ + double ff[LFE_PLC_LPCORD]; + int16_t m, j, n; + double km, denom, x; + + for ( m = 0; m < lpcorder; m++ ) + { + ff[m] = -a[m]; + } + + /* Initialization */ + for ( m = lpcorder - 1; m >= 0; m-- ) + { + km = ff[m]; + if ( km <= -1.0 || km >= 1.0 ) + { + for ( j = 0; j < lpcorder; j++ ) + { + refl[j] = 0.0; + } + + return 0; + } + + refl[m] = -km; + denom = 1.0 / ( 1.0 - km * km ); + for ( j = 0; j < m / 2; j++ ) + { + n = m - 1 - j; + x = denom * ff[j] + km * denom * ff[n]; + ff[n] = denom * ff[n] + km * denom * ff[j]; + ff[j] = x; + } + + if ( m & 1 ) + { + ff[j] = denom * ff[j] + km * denom * ff[j]; + } + } + + return 1; +} + + +static void d_syn_filt( + const double a[], /* i : LP filter coefficients */ + const int16_t m, /* i : order of LP filter */ + const float x[], /* i : input signal */ + float y[], /* o : output signal */ + const int16_t l, /* i : size of filtering */ + const float mem[] /* i : initial filter states */ +) +{ + int16_t i, j; + double buf[LFE_PLC_LPCORD + LFE_PLC_RECLEN]; /* temporary synthesis buffer */ + double s, *yy; + + yy = &buf[0]; + + /*------------------------------------------------------------------* + * copy initial filter states into synthesis buffer and do synthesis + *------------------------------------------------------------------*/ + for ( i = 0; i < m; i++ ) + { + *yy++ = mem[i]; + } + + /*-----------------------------------------------------------------------* + * Do the filtering + *-----------------------------------------------------------------------*/ + + for ( i = 0; i < l; i++ ) + { + s = x[i]; + for ( j = 1; j <= m; j++ ) + { + s -= a[j] * yy[i - j]; + } + + yy[i] = s; + y[i] = (float) s; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function check_stab() + * + * LPC filter stability check applying given sharpening value delta + *-----------------------------------------------------------------------------------------*/ + +static uint16_t check_stab( + const double *a, + double delta ) +{ + double amod[LFE_PLC_LPCORD], refl[LFE_PLC_LPCORD]; + int16_t i; + double fac; + double fac1; + uint16_t stable; + + fac = 1.0 + delta; + fac1 = fac; + + for ( i = 0; i < LFE_PLC_LPCORD; i++ ) + { + amod[i] = a[i] * fac; + fac *= fac1; + } + stable = d_a2rc( amod, refl, LFE_PLC_LPCORD ); + + return stable; +} + + +/*-----------------------------------------------------------------------------------------* + * Function find_max_delta() + * + * Find maximum LPC filter sharpening by iteration to get a filter that is almost instable + *-----------------------------------------------------------------------------------------*/ + +static double find_max_delta( + double *a ) +{ + double delta; + double eps; + uint16_t stable; + double fac; + + delta = 0.0; + eps = 0.01; + fac = 2; + stable = FALSE; + + while ( check_stab( a, eps ) ) + { + + eps *= fac; + stable = TRUE; + } + fac = 0.5; + + if ( stable ) + { + eps *= fac; + } + + while ( !stable ) + { + eps *= fac; + stable = check_stab( a, eps ); + } + + /* must be stable with current eps */ + delta = eps; + eps *= fac; + + while ( 1 ) + { + delta += eps; + stable = check_stab( a, delta ); + + if ( !stable ) + { + if ( fabs( eps ) > EPS_STOP ) + { + eps = -fabs( eps ) * fac; + } + else + { + eps = -fabs( eps ); + } + } + else + { + if ( fabs( eps ) < EPS_STOP ) + { + break; + } + eps = fabs( eps ) * fac; + } + } + + return delta; +} + + +/*-----------------------------------------------------------------------------------------* + * Function recover_samples() + * + * recover lost samples by extrapolation of signal buffer + *-----------------------------------------------------------------------------------------*/ + +static void recover_samples( + const int16_t bfi_count, + const float *outbuf, + float *rec_frame ) +{ + int16_t i; + float zeroes[LFE_PLC_RECLEN]; + double delta, fac, att; + double d_outbuf[LFE_PLC_BUFLEN], d_r[LFE_PLC_LPCORD + 1], d_a[LFE_PLC_LPCORD + 1], d_pee[LFE_PLC_LPCORD + 1]; + + mvr2d( outbuf, d_outbuf, LFE_PLC_BUFLEN ); + d_autocorr( d_outbuf, d_r, LFE_PLC_LPCORD, LFE_PLC_BUFLEN, d_hamm_lfe_plc, 0, 1, 1 ); + + if ( d_r[0] < POW_THR * LFE_PLC_BUFLEN ) + { + set_zero( rec_frame, LFE_PLC_RECLEN ); + return; + } + d_lev_dur( d_a, d_r, LFE_PLC_LPCORD, d_pee ); + + delta = find_max_delta( d_a + 1 ); + + fac = 1.0 + delta; + att = 1.0; + + if ( bfi_count >= LFE_PLC_MUTE_THR ) + { + att = LFE_PLC_BURST_ATT; + fac *= att; + } + + for ( i = 1; i <= LFE_PLC_LPCORD; i++ ) + { + d_a[i] = d_a[i] * fac; + fac *= att * ( 1.0 + delta ); + } + + set_zero( zeroes, LFE_PLC_RECLEN ); + d_syn_filt( d_a, LFE_PLC_LPCORD, zeroes, rec_frame, LFE_PLC_RECLEN, outbuf + LFE_PLC_BUFLEN - LFE_PLC_LPCORD ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function LFE_tdplc() + * + * MDCT interface recover lost samples by extrapolation of signal buffer + *-----------------------------------------------------------------------------------------*/ + +void LFE_tdplc( + LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ + const float *prevsynth, /* i : previous frame synthesis */ + float *ytda, /* o : output time-domain buffer */ + const int16_t output_frame /* i : output frame length */ +) +{ + float rec_frame_us[LFE_PLC_RECLEN_48K], input_tda[L_FRAME48k]; + float rec_frame[LFE_PLC_RECLEN], mem[2 * LFE_PLC_FDEL / LFE_PLC_DSF]; + int32_t output_Fs; + int16_t i, fade_len, full_len, dct_len, zero_pad_len, plc_fdel, rec_frame_len; + const float *pWindow_coeffs; + + output_Fs = output_frame * FRAMES_PER_SEC; + fade_len = hLFE->pWindow_state->fade_len; + full_len = hLFE->pWindow_state->full_len; + dct_len = hLFE->pWindow_state->dct_len; + zero_pad_len = hLFE->pWindow_state->zero_pad_len; + pWindow_coeffs = hLFE->pWindow_state->pWindow_coeffs; + + plc_fdel = (int16_t) ( LFE_PLC_FDEL * output_Fs / 48000 ); + rec_frame_len = (int16_t) ( LFE_PLC_RECLEN_48K * output_Fs / 48000 ); + recover_samples( hLFE->bfi_count, prevsynth, rec_frame ); + + set_zero( mem, 2 * LFE_PLC_FDEL / LFE_PLC_DSF ); + + modify_Fs( prevsynth + LFE_PLC_BUFLEN - LFE_PLC_FDEL / LFE_PLC_DSF, LFE_PLC_FDEL / LFE_PLC_DSF, LFE_PLC_FS, rec_frame_us, 48000, mem, 0 ); + modify_Fs( rec_frame, LFE_PLC_RECLEN, LFE_PLC_FS, rec_frame_us, 48000, mem, 0 ); + + /*samples are generated with 48k sampling rate + and then converted to required sampling rate by simple decimation + as signal is already bandlimited*/ + + /*decimation to correct sampling rate*/ + if ( output_Fs != 48000 ) + { + for ( i = 0; i < rec_frame_len; i++ ) + { + rec_frame_us[i] = rec_frame_us[( i * 48000 ) / output_Fs]; + } + } + + for ( i = 0; i < 2; i++ ) + { + ivas_dct_windowing( fade_len, full_len, dct_len, zero_pad_len, pWindow_coeffs, output_frame, input_tda, rec_frame_us + plc_fdel, rec_frame_us + plc_fdel + fade_len + i * dct_len ); + ivas_tda( input_tda, ytda + i * dct_len, dct_len ); + } + + return; +} diff --git a/lib_dec/ivas_limiter.c b/lib_dec/ivas_limiter.c new file mode 100644 index 0000000000..e483318be8 --- /dev/null +++ b/lib_dec/ivas_limiter.c @@ -0,0 +1,382 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include + +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" +#include + +/*----------------------------------------------------------------------------------* + * Local constants + *----------------------------------------------------------------------------------*/ + +#define LIMITER_THRESHOLD 32729 /* -0.01 dBFS */ +#define LIMITER_ATTACK_SECONDS 0.005f + + +/*-------------------------------------------------------------------* + * detect_strong_saturations() + * + * Detection of very strong saturations, + * usually happens as a consequence of a heavy corrupted bitstream + *-------------------------------------------------------------------*/ + +/*! r: apply_strong_limiting flag */ +static int16_t detect_strong_saturations( + const int16_t BER_detect, /* i : BER detect flag */ + int16_t *strong_saturation_cnt, /* i/o: counter of strong saturations */ + const float max_val, /* i : maximum absolute value */ + float *frame_gain /* i/o: frame gain value */ +) +{ + int16_t apply_strong_limiting; + + apply_strong_limiting = 0; + + if ( BER_detect ) + { + *strong_saturation_cnt = 50; + apply_strong_limiting = 1; + } + else if ( max_val > 3 * LIMITER_THRESHOLD && *strong_saturation_cnt > 0 ) + { + apply_strong_limiting = 1; + } + else if ( max_val > 10 * LIMITER_THRESHOLD ) + { + *strong_saturation_cnt += 20; + *strong_saturation_cnt = min( *strong_saturation_cnt, 50 ); + apply_strong_limiting = 1; + } + else + { + ( *strong_saturation_cnt )--; + *strong_saturation_cnt = max( *strong_saturation_cnt, 0 ); + } + + if ( apply_strong_limiting ) + { + if ( *frame_gain < 0.3f ) + { + *frame_gain /= 3.0f; + } + else + { + apply_strong_limiting = 0; + } + } + + return apply_strong_limiting; +} + +/*-------------------------------------------------------------------* + * ivas_limiter_open() + * + * Allocate and initialize limiter struct + *-------------------------------------------------------------------*/ + +/*! r : limiter struct handle */ +IVAS_LIMITER_HANDLE ivas_limiter_open( + const int16_t max_num_channels, /* i : maximum number of I/O channels to be processed */ + const int32_t sampling_rate /* i : sampling rate for processing */ +) +{ + int16_t i; + IVAS_LIMITER_HANDLE hLimiter; + + if ( max_num_channels <= 0 || sampling_rate <= 0 ) + { + return NULL; + } + + hLimiter = count_malloc( sizeof( IVAS_LIMITER ) ); + + hLimiter->max_num_channels = max_num_channels; + hLimiter->num_channels = max_num_channels; + hLimiter->channel_ptrs = count_malloc( max_num_channels * sizeof( float * ) ); + hLimiter->sampling_rate = sampling_rate; + hLimiter->gain = 1.f; + hLimiter->release_heuristic = 0.f; + hLimiter->attack_constant = powf( 0.01f, 1.0f / ( LIMITER_ATTACK_SECONDS * sampling_rate ) ); + hLimiter->strong_saturation_count = 0; +#ifdef DEBUGGING + hLimiter->cnt_frames_limited = 0; +#endif + + for ( i = 0; i < max_num_channels; ++i ) + { + hLimiter->channel_ptrs[i] = NULL; + } + + return hLimiter; +} + + +/*-------------------------------------------------------------------* + * ivas_limiter_close() + * + * Deallocate limiter struct + *-------------------------------------------------------------------*/ + +void ivas_limiter_close( + IVAS_LIMITER_HANDLE *phLimiter /* i/o: pointer to limiter handle, can be NULL */ +) +{ + if ( phLimiter == NULL || *phLimiter == NULL ) + { + return; + } + + count_free( ( *phLimiter )->channel_ptrs ); + count_free( *phLimiter ); + *phLimiter = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_limiter_dec() + * + * In-place saturation control for multichannel buffers with adaptive + * release time and special handling of bit errors + *-------------------------------------------------------------------*/ + +void ivas_limiter_dec( + IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ + float output[MAX_OUTPUT_CHANNELS][L_FRAME48k], /* i/o: input/output buffer */ + const int16_t num_channels, /* i : number of channels to be processed */ + const int16_t output_frame, /* i : number of samples per channel in the buffer */ + const int16_t BER_detect /* i : BER detect flag */ +) +{ + int16_t c; + float **channels; + + /* return early if given bad parameters */ + if ( hLimiter == NULL || output == NULL || output_frame <= 0 ) + { + return; + } + + /* Update number of channels and prepare pointers to the beginning of each of them */ + assert( num_channels <= hLimiter->max_num_channels && "Number of channels must be lower than the maximum set during limiter initialization!" ); + hLimiter->num_channels = min( num_channels, hLimiter->max_num_channels ); + channels = hLimiter->channel_ptrs; + + for ( c = 0; c < num_channels; ++c ) + { + channels[c] = output[c]; + } + + limiter_process( hLimiter, output_frame, LIMITER_THRESHOLD, BER_detect, &hLimiter->strong_saturation_count ); + + return; +} + + +/*-------------------------------------------------------------------* + * limiter_process() + * + * hLimiter->channel_ptrs must be set before calling this function. + * Consider using a wrapper function like ivas_limiter_dec() instead + * of calling this directly. + *-------------------------------------------------------------------*/ + +void limiter_process( + IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ + const int16_t output_frame, /* i : number of samples to be processed per channel in the I/O buffer */ + const float threshold, /* i : signal amplitude above which limiting starts to be applied */ + const int16_t BER_detect, /* i : BER detect flag */ + int16_t *strong_saturation_cnt /* i/o: counter of strong saturations (can be NULL) */ +) +{ + int16_t i, c; + float tmp, max_val; + float *sample; + float gain, frame_gain, attack_constant, release_constant; + float releaseHeuristic; + int16_t apply_limiting, apply_strong_limiting; + float **output; + int16_t num_channels; + int32_t sampling_rate; + + /* return early if given nonsensical values */ + if ( hLimiter == NULL || output_frame <= 0 ) + { + return; + } + + apply_limiting = 1; + apply_strong_limiting = 0; + + gain = hLimiter->gain; + output = hLimiter->channel_ptrs; + num_channels = hLimiter->num_channels; + sampling_rate = hLimiter->sampling_rate; + attack_constant = hLimiter->attack_constant; + + /*-----------------------------------------------------------------* + * Find highest absolute peak sample value + *-----------------------------------------------------------------*/ + + max_val = 0.f; + + for ( i = 0; i < output_frame; i++ ) + { + for ( c = 0; c < num_channels; c++ ) + { + tmp = fabsf( output[c][i] ); + if ( tmp > max_val ) + { + max_val = tmp; + } + } + } + + /* Release heuristic + * + * Value ranging from 0.f to 1.f. Increases on each frame that contains + * a sample with a value above threshold and decreases on each frame + * with all sample values below threshold. + * + * Values of 0 and 1 map to the shortest and longest release time, respectively. + * + * The goal of this heuristic is to avoid the "pumping" effect when only + * sharp transients exceed the threshold (use short release time), but also + * keep the gain curve smoother if the threshold is exceeded in many frames + * in a short span of time. + */ + releaseHeuristic = hLimiter->release_heuristic; + + if ( max_val > threshold ) + { + frame_gain = threshold / max_val; + + releaseHeuristic = min( 1.f, releaseHeuristic + ( 4.f * output_frame / sampling_rate ) ); + /* Unoptimized code for reference */ + /* releaseHeuristic = min( 1.f, releaseHeuristic + ( (float) 2.f * output_frame / sampling_rate / adaptiveReleaseWindowLengthInSeconds ) ); + * ^ + * React faster when release time should be increased + */ +#ifdef DEBUGGING + if ( max_val > threshold ) + { + hLimiter->cnt_frames_limited++; + } +#endif + } + else + { + releaseHeuristic = max( 0.f, releaseHeuristic - ( (float) output_frame / sampling_rate ) ); + /* Unoptimized code for reference */ + /* releaseHeuristic = max( 0.f, releaseHeuristic - ( (float) 0.5f * output_frame / sampling_rate / adaptiveReleaseWindowLengthInSeconds ) ); + * ^ + * React slower when release time should be decreased + */ + + /* No samples above threshold and gain from previous frame is already 1.f, + * therefore gain == 1.f for the entire frame. Skip processing. */ + if ( gain >= 1.f - EPSILON ) + { + apply_limiting = 0; + } + + /* No samples above threshold but gain from previous frame is not 1.f, + * transition to gain == 1.f */ + frame_gain = 1.f; + } + + /* Detection of very strong saturations */ + if ( strong_saturation_cnt != NULL ) + { + apply_strong_limiting = detect_strong_saturations( BER_detect, strong_saturation_cnt, max_val, &frame_gain ); + } + + /* Limit gain reduction to 20dB. Any peaks that require gain reduction + * higher than this are most likely due to bit errors during decoding */ + if ( frame_gain < 0.1f && !apply_strong_limiting ) + { + frame_gain = 0.1f; + } + + if ( apply_limiting ) + { + + /* 99% time constants of the gain curve + * + * The denominator of the second argument determines after how many + * samples the gain curve will reach 99% of its target value + */ + release_constant = powf( 0.01f, 1.0f / ( 0.005f * powf( 200.f, releaseHeuristic ) * sampling_rate ) ); + + /* Unoptimized code for reference */ + /* releaseTimeInSeconds = 0.005f * powf(200.f, releaseHeuristic); <-- Map heuristic value (0; 1) exponentially to range (0.005; 1) + * release_constant = powf( 0.01f, 1.0f / ( releaseTimeInSeconds * sampling_rate ) ); + */ + + /*-----------------------------------------------------------------* + * Apply limiting + *-----------------------------------------------------------------*/ + + for ( i = 0; i < output_frame; i++ ) + { + /* Update gain */ + if ( frame_gain < gain ) + { + gain = attack_constant * ( gain - frame_gain ) + frame_gain; + } + else + { + gain = release_constant * ( gain - frame_gain ) + frame_gain; + } + + for ( c = 0; c < num_channels; c++ ) + { + sample = &output[c][i]; + + /* Apply gain */ + *sample = gain * ( *sample ); + } + } + } + + /* Save last gain and release heuristic values for next frame */ + hLimiter->gain = gain; + hLimiter->release_heuristic = releaseHeuristic; + + return; +} diff --git a/lib_dec/ivas_ls_custom_dec.c b/lib_dec/ivas_ls_custom_dec.c new file mode 100644 index 0000000000..1d61ba0641 --- /dev/null +++ b/lib_dec/ivas_ls_custom_dec.c @@ -0,0 +1,122 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * ivas_ls_custom_open() + * + * Allocate Custom LS layout handle + *-----------------------------------------------------------------------*/ + +ivas_error ivas_ls_custom_open( + LSSETUP_CUSTOM_HANDLE *hLsSetupCustom /* o : Custom loudspeaker setup handle */ +) +{ + /* Allocate handle */ + if ( ( *hLsSetupCustom = (LSSETUP_CUSTOM_HANDLE) count_malloc( sizeof( LSSETUP_CUSTOM_STRUCT ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Custom LS layout memory\n" ) ); + } + + ( *hLsSetupCustom )->num_spk = -1; + ( *hLsSetupCustom )->is_planar_setup = -1; + + set_zero( ( *hLsSetupCustom )->ls_azimuth, MAX_OUTPUT_CHANNELS ); + set_zero( ( *hLsSetupCustom )->ls_elevation, MAX_OUTPUT_CHANNELS ); + + ( *hLsSetupCustom )->num_lfe = -1; + set_s( ( *hLsSetupCustom )->lfe_idx, -1, MAX_OUTPUT_CHANNELS ); + + ( *hLsSetupCustom )->separate_ch_found = -1; + set_f( ( *hLsSetupCustom )->separate_ch_gains, 0.0f, MAX_OUTPUT_CHANNELS ); + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------------* + * ivas_output_init_ls_custom() + * + * Setup an IVAS_OUTPUT_SETUP_HANDLE from a custom loudspeaker setup + *-------------------------------------------------------------------------*/ + +void ivas_ls_custom_setup( + IVAS_OUTPUT_SETUP_HANDLE hOutSetup, /* o : IVAS output setup handle */ + const LSSETUP_CUSTOM_HANDLE hLsSetupCustom /* i : Custom loudspeaker setup handle */ +) +{ + hOutSetup->output_config = AUDIO_CONFIG_LS_CUSTOM; + + hOutSetup->nchan_out_woLFE = hLsSetupCustom->num_spk; + hOutSetup->ls_azimuth = hLsSetupCustom->ls_azimuth; + hOutSetup->ls_elevation = hLsSetupCustom->ls_elevation; + + hOutSetup->num_lfe = hLsSetupCustom->num_lfe; + hOutSetup->index_lfe[0] = hLsSetupCustom->lfe_idx[0]; /* IVAS_OUTPUT_SETUP only supports 1 LFE */ + + hOutSetup->is_loudspeaker_setup = true; + hOutSetup->is_planar_setup = (uint8_t) hLsSetupCustom->is_planar_setup; + + return; +} + +/*-----------------------------------------------------------------------* + * ivas_ls_custom_output_init() + * + * Initialize decoder output handles + *-----------------------------------------------------------------------*/ + +ivas_error ivas_ls_custom_output_init( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +) +{ + if ( st_ivas->hLsSetupCustom == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + st_ivas->hDecoderConfig->nchan_out = st_ivas->hLsSetupCustom->num_spk + st_ivas->hLsSetupCustom->num_lfe; + + ivas_ls_custom_setup( &( st_ivas->hOutSetup ), st_ivas->hLsSetupCustom ); + ivas_ls_custom_setup( &( st_ivas->hIntSetup ), st_ivas->hLsSetupCustom ); + + return IVAS_ERR_OK; +} diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c new file mode 100644 index 0000000000..0e2c68f385 --- /dev/null +++ b/lib_dec/ivas_masa_dec.c @@ -0,0 +1,1359 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_dec.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ +#define SPAR_META_DELAY_SUBFRAMES 2 /* Number of subframes to delay the SPAR metadata */ + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static int16_t quantize_theta( float x, int16_t no_cb, float *xhat ); +static uint16_t index_theta_phi_16( float theta, float phi, SPHERICAL_GRID_DATA *Sph_Grid16 ); +static int16_t quantize_phi_masa( float phi, int16_t flag_delta, float *phi_hat, const int16_t n ); +static void index_16bits( IVAS_QMETADATA_HANDLE hQMetaData, SPHERICAL_GRID_DATA *Sph_Grid16 ); + +static void replicate_subframes( IVAS_QMETADATA_HANDLE hQMetaData ); + +static void restore_lowbitrate_masa( IVAS_QMETADATA_HANDLE hQMetaData, const int16_t low_bitrate_mode, const int16_t numCodingBands ); + +static void init_lfe_synth_data( Decoder_Struct *st_ivas, MASA_DECODER_HANDLE hMasa ); + +static void compute_foa_cov_matrix( float foaCov[FOA_CHANNELS][FOA_CHANNELS], float inCov[FOA_CHANNELS][FOA_CHANNELS], float mixMtx[FOA_CHANNELS][FOA_CHANNELS] ); + +static int16_t decode_lfe_to_total_energy_ratio( MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, uint16_t *bitstream, int16_t *index, const int32_t ivas_total_brate ); + +static ivas_error ivas_masa_dec_config( Decoder_Struct *st_ivas ); + + +/*-----------------------------------------------------------------------* + * ivas_masa_decode() + * + * MASA metadata decoder + *-----------------------------------------------------------------------*/ + +ivas_error ivas_masa_decode( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + Decoder_State *st, /* i/o: decoder state structure with bitstream */ + int16_t *nb_bits_read /* o : number of bits read */ +) +{ + uint16_t byteBuffer; + int16_t next_bit_pos_orig; + int32_t masa_brate, ivas_total_brate; + MASA_DECODER_HANDLE hMasa; + IVAS_QMETADATA_HANDLE hQMetaData; + IVAS_FORMAT ivas_format; + int16_t low_bitrate_mode, tmp_elem_mode; + ivas_error error; + + error = IVAS_ERR_OK; + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + low_bitrate_mode = -1; /* This means that LBR mode is not used. */ + + if ( st_ivas->hOutSetup.separateChannelEnabled ) + { + masa_brate = st_ivas->hCPE[0]->element_brate; + } + else + { + masa_brate = ivas_total_brate; + } + + hMasa = st_ivas->hMasa; + hQMetaData = st_ivas->hQMetaData; + ivas_format = st_ivas->ivas_format; + + hMasa->data.dir_decode_quality = 1.0f; /* Set to default of max quality */ + hQMetaData->is_masa_type_format = 1; + + *nb_bits_read = 0; + next_bit_pos_orig = st->next_bit_pos; + if ( masa_brate == IVAS_SID_4k4 ) + { + st->next_bit_pos = (int16_t) ( ( masa_brate / FRAMES_PER_SEC ) - 1 - SID_FORMAT_NBITS ); + } + else + { + st->next_bit_pos = (int16_t) ( ( masa_brate / FRAMES_PER_SEC ) - 1 ); + } + + if ( !st->bfi && ivas_total_brate > IVAS_SID_4k4 ) + { + if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + { + /* the number of MASA transport channels was read in ivas_dec_setup() */ + st->next_bit_pos -= MASA_TRANSP_BITS; + *nb_bits_read += MASA_TRANSP_BITS; + /* Placeholder for descriptive metadata content */ + byteBuffer = st->bit_stream[( st->next_bit_pos )--]; + byteBuffer += st->bit_stream[( st->next_bit_pos )--]; + *nb_bits_read += MASA_HEADER_BITS; + + /* read number of directions */ + byteBuffer = st->bit_stream[( st->next_bit_pos )--]; + ( *nb_bits_read )++; + hMasa->config.numberOfDirections = (uint8_t) ( byteBuffer + 1 ); + } + else + { + hMasa->config.numberOfDirections = 1; + } + + if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + { + /* read subframe mode */ + byteBuffer = st->bit_stream[( st->next_bit_pos )--]; + ( *nb_bits_read )++; + hMasa->config.joinedSubframes = (uint8_t) byteBuffer; + } + else + { + hMasa->config.joinedSubframes = FALSE; + } + + if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + *nb_bits_read += decode_lfe_to_total_energy_ratio( hMasa->hMasaLfeSynth, st->bit_stream, &st->next_bit_pos, ivas_total_brate ); + } + + /* Once we know incoming configuration, we can config decoder further based on bitrate etc. */ + if ( ( error = ivas_masa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* If we are under metadata bit budget limit and joined subframes is not signalled, then read LBR mode. */ + if ( hMasa->config.max_metadata_bits < MINIMUM_BIT_BUDGET_NORMAL_META && hMasa->config.joinedSubframes == FALSE ) + { + /* read low bitrate mode */ + byteBuffer = st->bit_stream[( st->next_bit_pos )--]; + ( *nb_bits_read )++; + low_bitrate_mode = byteBuffer; + + if ( low_bitrate_mode == 1 ) + { + hQMetaData->q_direction[0].cfg.nblocks = 1; + } + else + { + hQMetaData->q_direction[0].cfg.nbands = 1; + } + } + + /* Remove already read bits from the bit budget */ + hQMetaData->metadata_max_bits -= *nb_bits_read; + + *nb_bits_read += ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &st->next_bit_pos ); + + /* Get direction decoding quality. EC 1 and 2 are handled by the default value. */ + if ( hQMetaData->ec_flag == 2 ) + { + hMasa->data.dir_decode_quality = hQMetaData->dir_comp_ratio; + } + + hMasa->config.coherencePresent = !hQMetaData->all_coherence_zero; + + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) + { + index_16bits( hQMetaData, hMasa->data.sph_grid16 ); + } + + /* If LBR mode is not disabled, then we restore metadata to 5 bands and 4 subframes based on the LBR mode. */ + if ( low_bitrate_mode != -1 ) + { + restore_lowbitrate_masa( hQMetaData, low_bitrate_mode, hMasa->config.numCodingBands ); + } + else if ( hMasa->config.joinedSubframes == TRUE ) + { + replicate_subframes( hQMetaData ); + } + } + else if ( !st->bfi && ivas_format == MASA_FORMAT && ivas_total_brate == IVAS_SID_4k4 ) + { + if ( hQMetaData->q_direction == NULL ) + { + /* replicate ivas_masa_dec_config() in case that first good received frame is SID frame */ + if ( ( error = ivas_masa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, + hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE ); + + hQMetaData->metadata_max_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC; + + if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, 5, 1, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + + hQMetaData->numTwoDirBands = hMasa->config.numTwoDirBands; + hQMetaData->useLowerRes = 0; + + hQMetaData->q_direction->cfg.nbands = 5; + hQMetaData->q_direction->cfg.nblocks = 4; + + if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + { + hQMetaData->q_direction->cfg.mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ); + } + else + { + hQMetaData->q_direction->cfg.mc_ls_setup = MC_LS_SETUP_INVALID; + } + } + + tmp_elem_mode = -1; + *nb_bits_read += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), st_ivas->nchan_transport, &tmp_elem_mode, ivas_format, + SBA_MODE_NONE ); + + if ( st_ivas->nchan_transport == 2 ) + { + assert( st_ivas->nCPE > 0 ); + st_ivas->hCPE[0]->element_mode = tmp_elem_mode; + } + *nb_bits_read += SID_FORMAT_NBITS; + } + else if ( !st->bfi && ivas_format == MASA_FORMAT && ivas_total_brate == FRAME_NO_DATA ) + { + if ( hQMetaData->q_direction == NULL ) + { + if ( ( error = ivas_masa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + if ( st_ivas->hDirAC != NULL ) + { + ivas_qmetadata_to_dirac( hQMetaData, st_ivas->hDirAC, hMasa, ivas_total_brate, + SBA_MODE_NONE, 0 ); + } + st->next_bit_pos = next_bit_pos_orig; + + if ( ivas_format == MASA_FORMAT && st_ivas->nCPE == 1 && st_ivas->hCPE[0]->hStereoDft != NULL && st_ivas->hCPE[0]->hStereoDft->hConfig != NULL ) + { + st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = ivas_total_brate < MASA_STEREO_MIN_BITRATE ? 1 : 0; + + if ( ivas_total_brate <= IVAS_SID_4k4 ) + { + st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = 0; + } + } + + if ( ivas_format == MASA_FORMAT && st_ivas->nCPE == 1 ) + { + st_ivas->hCPE[0]->hCoreCoder[0]->masa_sid_format = 0; + + if ( st_ivas->hDecoderConfig->last_ivas_total_brate <= IVAS_SID_4k4 ) + { + st_ivas->hCPE[0]->hCoreCoder[0]->masa_sid_format = 1; + + if ( ivas_total_brate >= IVAS_SID_4k4 ) + { + st_ivas->hCPE[0]->element_brate = ivas_total_brate; + } + } + } + + return error /* *nb_bits_read*/; +} + + +/*-------------------------------------------------------------------* + * ivas_masa_dec_open() + * + * + *-------------------------------------------------------------------*/ + +ivas_error ivas_masa_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +) +{ + MASA_DECODER_HANDLE hMasa; + + if ( ( hMasa = (MASA_DECODER_HANDLE) count_malloc( sizeof( MASA_DECODER ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); + } + + ivas_masa_set_elements( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE ); + + mvs2s( DirAC_block_grouping, hMasa->config.block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); + mvs2s( MASA_band_grouping_24, hMasa->config.band_grouping, MASA_FREQUENCY_BANDS + 1 ); + hMasa->config.numberOfDirections = 1; + hMasa->config.joinedSubframes = FALSE; + + /* Create spherical grid only for external output */ + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) + { + hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) count_malloc( sizeof( SPHERICAL_GRID_DATA ) ); + generate_gridEq( hMasa->data.sph_grid16 ); + } + else + { + hMasa->data.sph_grid16 = NULL; + } + + if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + init_lfe_synth_data( st_ivas, hMasa ); + } + else + { + hMasa->hMasaLfeSynth = NULL; + } + + st_ivas->hMasa = hMasa; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * ivas_masa_dec_close() + * + * close MASA decoder + *-----------------------------------------------------------------------*/ + +void ivas_masa_dec_close( + MASA_DECODER_HANDLE hMasa /* i/o: MASA metadata structure */ +) +{ + /* Free spherical grid memory if in use */ + if ( hMasa->data.sph_grid16 != NULL ) + { + count_free( hMasa->data.sph_grid16 ); + hMasa->data.sph_grid16 = NULL; + } + + if ( hMasa->hMasaLfeSynth != NULL ) + { + if ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer != NULL ) + { + count_free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer ); + hMasa->hMasaLfeSynth->lfeSynthRingBuffer = NULL; + } + if ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 != NULL ) + { + count_free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 ); + hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = NULL; + } + if ( hMasa->hMasaLfeSynth->delayBuffer_syncLp != NULL ) + { + count_free( hMasa->hMasaLfeSynth->delayBuffer_syncLp ); + hMasa->hMasaLfeSynth->delayBuffer_syncLp = NULL; + } + if ( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC != NULL ) + { + count_free( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC ); + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = NULL; + } + count_free( hMasa->hMasaLfeSynth ); + hMasa->hMasaLfeSynth = NULL; + } + + count_free( hMasa ); + hMasa = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_masa_dec_config() + * + * Frame-by-frame configuration of MASA decoder + *-------------------------------------------------------------------*/ + +static ivas_error ivas_masa_dec_config( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +) +{ + int16_t i; + MASA_DECODER_HANDLE hMasa; + ivas_error error; + + error = IVAS_ERR_OK; + + hMasa = st_ivas->hMasa; + + ivas_masa_set_elements( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE ); + + ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); + st_ivas->hQMetaData->metadata_max_bits = hMasa->config.max_metadata_bits; + st_ivas->hQMetaData->bandMap = hMasa->data.band_mapping; + st_ivas->hQMetaData->nchan_transport = st_ivas->nchan_transport; + + if ( ( error = ivas_qmetadata_allocate_memory( st_ivas->hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections, hMasa->config.useCoherence ) ) != IVAS_ERR_OK ) + { + return error; + } + + + st_ivas->hQMetaData->numTwoDirBands = st_ivas->hMasa->config.numTwoDirBands; + st_ivas->hQMetaData->useLowerRes = 0; + + for ( i = 0; i < st_ivas->hQMetaData->no_directions; i++ ) + { + st_ivas->hQMetaData->q_direction[i].cfg.nbands = hMasa->config.numCodingBands; + st_ivas->hQMetaData->q_direction[i].cfg.nblocks = hMasa->config.joinedSubframes == TRUE ? 1 : 4; + + if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + { + st_ivas->hQMetaData->q_direction[i].cfg.mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ); + } + else + { + st_ivas->hQMetaData->q_direction[i].cfg.mc_ls_setup = MC_LS_SETUP_INVALID; + } + } + + ivas_set_qmetadata_maxbit_req( st_ivas->hQMetaData, st_ivas->ivas_format ); + + masa_sample_rate_band_correction( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hQMetaData, st_ivas->hDecoderConfig->output_Fs ); + + return error; +} + + +/*-------------------------------------------------------------------* + * ivas_masa_prerender() + * + * Apply gaining and copying of transport signals when needed + *-------------------------------------------------------------------*/ + +void ivas_masa_prerender( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output[][L_FRAME48k], /* i/o: synthesized core-coder transport channels */ + const int16_t output_frame /* i : output frame length per channel */ +) +{ + if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->nchan_transport == 2 && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_4k4 ) + { + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) + { + mvr2r( output[0], output[1], output_frame ); /* Copy mono signal to stereo output channels */ + } + else + { + if ( st_ivas->renderer_type == RENDERER_DIRAC || st_ivas->renderer_type == RENDERER_DISABLE ) + { + v_multc( output[0], SQRT2, output[0], output_frame ); /* Gain transport signal when transmitting mono with cpe in order to match loudness */ + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Local functions + *-------------------------------------------------------------------*/ + +/* !r: index of quantized value */ +static int16_t quantize_theta( + float x, /* i : theta value to be quantized */ + int16_t no_cb, /* i : number of codewords */ + float *xhat /* o : quantized value */ +) +{ + int16_t imin; + float diff1, diff2; + + imin = (int16_t) ( x * MASA_INV_ANGLE_AT_EQUATOR_DEG + 0.5f ); + + if ( imin >= no_cb - 1 ) + { + imin = no_cb - 1; + diff1 = x - 90; + diff2 = x - MASA_ANGLE_AT_EQUATOR_DEG * ( imin - 1 ); + if ( fabsf( diff1 ) > fabsf( diff2 ) ) + { + imin--; + *xhat = imin * MASA_ANGLE_AT_EQUATOR_DEG; + } + else + { + *xhat = 90; + } + } + else + { + *xhat = imin * MASA_ANGLE_AT_EQUATOR_DEG; + } + + return imin; +} + + +/* !r: index azimuth */ +static int16_t quantize_phi_masa( + float phi, /* i : azimuth value */ + int16_t flag_delta, /* i : flag indicating if the azimuth codebook is translated or not */ + float *phi_hat, /* o : quantized azimuth */ + const int16_t n /* i : azimuth codebook size */ +) +{ + int16_t id_phi; + float dd; + float delta_phi; + + delta_phi = 360.0f / (float) n; + + if ( n == 1 ) + { + *phi_hat = 0; + + return 0; + } + + if ( flag_delta == 1 ) + { + dd = delta_phi / 2.0f; + } + else + { + dd = 0; + } + + id_phi = (int16_t) ( ( phi - dd + delta_phi / 2.0f ) / (float) delta_phi ); + + if ( id_phi == n ) + { + id_phi = 0; + } + + if ( id_phi == -1 ) + { + id_phi = n - 1; + } + + *phi_hat = id_phi * delta_phi + dd; + + return id_phi; +} + + +/* !r: output index for direction */ +static uint16_t index_theta_phi_16( + float theta, /* i : input elevation to be indexed */ + float phi, /* i : input azimuth to be indexed */ + SPHERICAL_GRID_DATA *gridData /* i : generated grid data */ +) +{ + float abs_theta; + int16_t sign_th, id_phi, id_th; + uint16_t idx_sph; + uint16_t cum_n; + float theta_hat, phi_hat; /* Can be removed */ + + phi = phi + 180; + + if ( theta < 0 ) + { + abs_theta = -theta; + sign_th = -1; + } + else + { + abs_theta = theta; + sign_th = 1; + } + + id_th = quantize_theta( abs_theta, gridData->no_theta, &theta_hat ); + if ( gridData->no_theta > 1 ) + { + if ( gridData->no_phi[id_th] > 1 ) + { + id_phi = quantize_phi_masa( phi, ( id_th % 2 == 1 ), &phi_hat, gridData->no_phi[id_th] ); + } + else + { + id_phi = 0; + phi_hat = 180; + } + } + else + { + id_phi = quantize_phi_masa( phi, ( id_th % 2 == 1 ), &phi_hat, gridData->no_phi[id_th] ); + } + + /* Starting from Equator, alternating positive and negative */ + if ( id_th == 0 ) + { + idx_sph = id_phi; + } + else + { + if ( id_th == gridData->no_theta - 1 ) + { + idx_sph = 65534 + ( sign_th < 0 ); + } + else + { + theta = MASA_NTOT2_FAC * (float) ( id_th + 0.5f ); + if ( id_th == 1 ) + { + cum_n = 2 * (uint16_t) ceilf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); + } + else + { + cum_n = 2 * (uint16_t) roundf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); + } + + cum_n += gridData->no_phi[0]; + + if ( sign_th > 0 ) + { + cum_n -= 2 * gridData->no_phi[id_th]; + } + else + { + cum_n -= gridData->no_phi[id_th]; + } + idx_sph = cum_n + id_phi; + } + } + + + return idx_sph; +} + + +static void index_16bits( + IVAS_QMETADATA_HANDLE hQMetaData, + SPHERICAL_GRID_DATA *Sph_Grid16 ) +{ + int16_t d, band, block; + + for ( d = 0; d < hQMetaData->no_directions; d++ ) + { + /* Note: The band information is read from the first direction as it contains the full information. */ + for ( band = 0; band < hQMetaData->q_direction[0].cfg.nbands; band++ ) + { + for ( block = 0; block < hQMetaData->q_direction[0].cfg.nblocks; block++ ) + { + hQMetaData->q_direction[d].band_data[band].spherical_index[block] = index_theta_phi_16( hQMetaData->q_direction[d].band_data[band].elevation[block], + hQMetaData->q_direction[d].band_data[band].azimuth[block], Sph_Grid16 ); + } + } + } + + return; +} + + +/* Used to replicate subframe data when there is only one subframe sent */ +static void replicate_subframes( + IVAS_QMETADATA_HANDLE hQMetaData ) +{ + int16_t sf, band, dir, nbands, ndirs; + + nbands = hQMetaData->q_direction->cfg.nbands; + ndirs = hQMetaData->no_directions; + + for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < nbands; band++ ) + { + for ( dir = 0; dir < ndirs; dir++ ) + { + hQMetaData->q_direction[dir].band_data[band].azimuth[sf] = hQMetaData->q_direction[dir].band_data[band].azimuth[0]; + hQMetaData->q_direction[dir].band_data[band].elevation[sf] = hQMetaData->q_direction[dir].band_data[band].elevation[0]; + hQMetaData->q_direction[dir].band_data[band].spherical_index[sf] = hQMetaData->q_direction[dir].band_data[band].spherical_index[0]; + hQMetaData->q_direction[dir].band_data[band].energy_ratio[sf] = hQMetaData->q_direction[dir].band_data[band].energy_ratio[0]; + + if ( hQMetaData->q_direction[dir].coherence_band_data != NULL ) + { + hQMetaData->q_direction[dir].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[dir].coherence_band_data[band].spread_coherence[0]; + } + } + + if ( hQMetaData->surcoh_band_data != NULL ) + { + hQMetaData->surcoh_band_data[band].surround_coherence[sf] = hQMetaData->surcoh_band_data[band].surround_coherence[0]; + } + } + } + + return; +} + + +static void restore_lowbitrate_masa( + IVAS_QMETADATA_HANDLE hQMetaData, + const int16_t low_bitrate_mode, + const int16_t numCodingBands ) +{ + int16_t sf, band; + + if ( low_bitrate_mode == 1 ) + { + /* With signal 1, we are in 5 frequency bands, 1 subframe mode. */ + /* Replicate data to all subframes */ + for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + hQMetaData->q_direction[0].band_data[band].azimuth[sf] = hQMetaData->q_direction[0].band_data[band].azimuth[0]; + hQMetaData->q_direction[0].band_data[band].elevation[sf] = hQMetaData->q_direction[0].band_data[band].elevation[0]; + hQMetaData->q_direction[0].band_data[band].spherical_index[sf] = hQMetaData->q_direction[0].band_data[band].spherical_index[0]; + hQMetaData->q_direction[0].band_data[band].energy_ratio[sf] = hQMetaData->q_direction[0].band_data[band].energy_ratio[0]; + if ( hQMetaData->q_direction[0].coherence_band_data != NULL ) + { + hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[0]; + } + if ( hQMetaData->surcoh_band_data != NULL ) + { + hQMetaData->surcoh_band_data[band].surround_coherence[sf] = hQMetaData->surcoh_band_data[band].surround_coherence[0]; + } + } + } + hQMetaData->q_direction->cfg.nblocks = 4; /* Set just to be sure */ + } + else + { + /* With signal 0, we are in 1 frequency bands, 4 subframes mode. */ + /* Replicate data to all bands */ + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 1; band < numCodingBands; band++ ) + { + hQMetaData->q_direction[0].band_data[band].azimuth[sf] = hQMetaData->q_direction[0].band_data[0].azimuth[sf]; + hQMetaData->q_direction[0].band_data[band].elevation[sf] = hQMetaData->q_direction[0].band_data[0].elevation[sf]; + hQMetaData->q_direction[0].band_data[band].spherical_index[sf] = hQMetaData->q_direction[0].band_data[0].spherical_index[sf]; + hQMetaData->q_direction[0].band_data[band].energy_ratio[sf] = hQMetaData->q_direction[0].band_data[0].energy_ratio[sf]; + if ( hQMetaData->q_direction[0].coherence_band_data != NULL ) + { + hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[0].coherence_band_data[0].spread_coherence[sf]; + } + if ( hQMetaData->surcoh_band_data != NULL ) + { + hQMetaData->surcoh_band_data[band].surround_coherence[sf] = hQMetaData->surcoh_band_data[0].surround_coherence[sf]; + } + } + } + hQMetaData->q_direction->cfg.nbands = numCodingBands; /* Set just to be sure */ + } + + return; +} + + +static void init_lfe_synth_data( + Decoder_Struct *st_ivas, /* i : IVAS decoder struct */ + MASA_DECODER_HANDLE hMasa /* i/o: MASA decoder structure */ +) +{ + int32_t output_Fs; + AUDIO_CONFIG output_config; + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + output_config = st_ivas->hDecoderConfig->output_config; + + hMasa->hMasaLfeSynth = (MCMASA_LFE_SYNTH_DATA_HANDLE) count_malloc( sizeof( MCMASA_LFE_SYNTH_DATA ) ); + + hMasa->hMasaLfeSynth->transportEneSmooth = 0.0f; + hMasa->hMasaLfeSynth->protoLfeEneSmooth = 0.0f; + hMasa->hMasaLfeSynth->targetEneLfeSmooth = 0.0f; + hMasa->hMasaLfeSynth->targetEneTransSmooth = 0.0f; + + set_zero( hMasa->hMasaLfeSynth->lfeToTotalEnergyRatio, MAX_PARAM_SPATIAL_SUBFRAMES ); + hMasa->hMasaLfeSynth->lfeGainPrevIndex = 0; + if ( st_ivas->hOutSetup.separateChannelEnabled && + ( output_config == AUDIO_CONFIG_5_1 || output_config == AUDIO_CONFIG_7_1 || + output_config == AUDIO_CONFIG_5_1_2 || + output_config == AUDIO_CONFIG_5_1_4 || output_config == AUDIO_CONFIG_7_1_4 || + output_config == AUDIO_CONFIG_FOA || output_config == AUDIO_CONFIG_HOA2 || + output_config == AUDIO_CONFIG_HOA3 || + ( output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe > 0 ) ) ) + { + int16_t bufferSize; + int16_t i; + int16_t slot_size; + + /* Ring buffer for the filterbank of the LFE synthesis. + * The filterbank is using moving average lowpass filter with the crossover of 120 Hz. */ + bufferSize = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES ); + hMasa->hMasaLfeSynth->lfeSynthRingBuffer = (float *) count_malloc( bufferSize * sizeof( float ) ); + set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer, bufferSize ); + hMasa->hMasaLfeSynth->ringBufferLoPointer = 0; + hMasa->hMasaLfeSynth->ringBufferHiPointer = bufferSize / 2; + hMasa->hMasaLfeSynth->lowpassSum = 0.0f; + hMasa->hMasaLfeSynth->ringBufferSize = bufferSize; + + /* Ring buffer for additional lowpass filter for the LFE signal. + * Moving average lowpass filter with the crossover of 240 Hz. */ + bufferSize /= 2; + hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = (float *) count_malloc( bufferSize * sizeof( float ) ); + set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2, bufferSize ); + hMasa->hMasaLfeSynth->ringBufferLoPointer2 = 0; + hMasa->hMasaLfeSynth->lowpassSum2 = 0.0f; + hMasa->hMasaLfeSynth->ringBufferSize2 = bufferSize; + + /* Delay buffer for matching the delay of the lowpass filter */ + bufferSize /= 2; /* The delay of the moving average lowpass filter is bufferSize / 2 */ + hMasa->hMasaLfeSynth->delayBuffer_syncLp = (float *) count_malloc( bufferSize * sizeof( float ) ); + set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncLp, bufferSize ); + hMasa->hMasaLfeSynth->delayBuffer_syncLp_size = bufferSize; + + /* Delay buffer for syncing with DirAC rendering */ + bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ) - hMasa->hMasaLfeSynth->ringBufferSize / 2 - hMasa->hMasaLfeSynth->ringBufferSize2 / 2; + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) count_malloc( bufferSize * sizeof( float ) ); + set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize ); + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize; + + /* Interpolation between slots */ + hMasa->hMasaLfeSynth->lfeGainPrev = 0.0f; + hMasa->hMasaLfeSynth->transportGainPrev = 1.0f; + slot_size = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX ); + for ( i = 0; i < slot_size; i++ ) + { + hMasa->hMasaLfeSynth->interpolator[i] = ( (float) ( i + 1 ) ) / ( (float) slot_size ); + } + } + else if ( st_ivas->hOutSetup.separateChannelEnabled && output_config == AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe == 0 ) + { + int16_t bufferSize; + + /* Delay buffer for syncing with DirAC rendering */ + bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ); + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) count_malloc( bufferSize * sizeof( float ) ); + set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize ); + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize; + + hMasa->hMasaLfeSynth->lfeSynthRingBuffer = NULL; + hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = NULL; + hMasa->hMasaLfeSynth->delayBuffer_syncLp = NULL; + } + else + { + hMasa->hMasaLfeSynth->lfeSynthRingBuffer = NULL; + hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = NULL; + hMasa->hMasaLfeSynth->delayBuffer_syncLp = NULL; + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = NULL; + } + + return; +} + + +/*! r: Number of bits read */ +static int16_t decode_lfe_to_total_energy_ratio( + MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: McMASA LFE structure */ + uint16_t *bitstream, /* i : bitstream */ + int16_t *index, /* i/o: bitstream position */ + const int32_t ivas_total_brate /* i : total bitrate */ +) +{ + int16_t i; + int16_t lfeToTotalEnergyRatioIndices[3]; + int16_t VQBits; + float log2LFEaverage; + float lfeToTotalEnergyRatioTemp; + uint16_t byteBuffer; + int16_t lfeBitsRead; + + lfeBitsRead = 0; + byteBuffer = bitstream[( *index )--]; + lfeBitsRead += 1; + lfeToTotalEnergyRatioIndices[0] = byteBuffer; /* First LFE index */ + + if ( ivas_total_brate == IVAS_13k2 ) /* 1-bit adaptive LFE gain quantizer at 13.2 kbps */ + { + lfeToTotalEnergyRatioTemp = hMasaLfeSynth->lfeToTotalEnergyRatio[3]; /* Take memory from the last subframe */ + if ( lfeToTotalEnergyRatioIndices[0] == 1 ) + { + if ( hMasaLfeSynth->lfeGainPrevIndex == 1 ) + { + lfeToTotalEnergyRatioTemp = lfeToTotalEnergyRatioTemp + MCMASA_LFE_THETA * MCMASA_LFE_BETA; /* larger "bump-up" energy */ + } + else + { + lfeToTotalEnergyRatioTemp = lfeToTotalEnergyRatioTemp + MCMASA_LFE_BETA; /* "bump-up" energy */ + } + } + else + { + lfeToTotalEnergyRatioTemp = MCMASA_LFE_ALPHA * lfeToTotalEnergyRatioTemp; /* exponential decay */ + } + if ( lfeToTotalEnergyRatioTemp > 1.0f ) + { + lfeToTotalEnergyRatioTemp = 1.0f; + } + hMasaLfeSynth->lfeGainPrevIndex = lfeToTotalEnergyRatioIndices[0]; + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hMasaLfeSynth->lfeToTotalEnergyRatio[i] = lfeToTotalEnergyRatioTemp; + } + } + else /* Bitrates >= 16.4 kbps */ + { + if ( lfeToTotalEnergyRatioIndices[0] == 0 ) + { + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hMasaLfeSynth->lfeToTotalEnergyRatio[i] = 0.0f; + } + } + else + { + byteBuffer = bitstream[( *index )--] << 2; + byteBuffer += bitstream[( *index )--] << 1; + byteBuffer += bitstream[( *index )--]; + lfeBitsRead += 3; + lfeToTotalEnergyRatioIndices[1] = byteBuffer; /* Scalar index */ + log2LFEaverage = usdequant( lfeToTotalEnergyRatioIndices[1], MCMASA_LFE_QLOW, MCMASA_LFE_DELTA ); + + /* 16.4 kbps sends only scalar gain, above it VQ is used */ + if ( ivas_total_brate >= IVAS_24k4 ) + { + /* Depending on average (scalar) gain more bits are sent for VQ LFE gain */ + switch ( lfeToTotalEnergyRatioIndices[1] ) + { + case 0: + case 1: + VQBits = 0; + break; + case 2: + VQBits = 1; + break; + case 3: + VQBits = 2; + break; + case 4: + VQBits = 3; + break; + default: + VQBits = 4; + } + byteBuffer = 0; + for ( i = 0; i < VQBits; i++ ) + { + byteBuffer += bitstream[( *index )--] << ( VQBits - 1 - i ); + lfeBitsRead += 1; + } + lfeToTotalEnergyRatioIndices[2] = byteBuffer; /* VQ index */ + } + + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + if ( ivas_total_brate == IVAS_16k4 ) + { + hMasaLfeSynth->lfeToTotalEnergyRatio[i] = exp2f( log2LFEaverage ); + } + else + { + hMasaLfeSynth->lfeToTotalEnergyRatio[i] = exp2f( log2LFEaverage + McMASA_LFEGain_vectors[4 * lfeToTotalEnergyRatioIndices[2] + i] ); + } + hMasaLfeSynth->lfeToTotalEnergyRatio[i] = min( hMasaLfeSynth->lfeToTotalEnergyRatio[i], 1.0f ); + hMasaLfeSynth->lfeToTotalEnergyRatio[i] = max( hMasaLfeSynth->lfeToTotalEnergyRatio[i], 0.0f ); + } + } + } + + return lfeBitsRead; +} + + +/*-------------------------------------------------------------------* + * ivas_masa_dec_reconfigure() + * + * Reconfigure IVAS MASA decoder + *-------------------------------------------------------------------*/ + +ivas_error ivas_masa_dec_reconfigure( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t n, tmp, num_bits; + int16_t sce_id, cpe_id; + uint16_t *bit_stream; + Decoder_State **sts; + int32_t ivas_total_brate, last_ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate; + + /*-----------------------------------------------------------------* + * Allocate and initalize SCE/CPE and other handles + *-----------------------------------------------------------------*/ + + bit_stream = st_ivas->hSCE[0] != NULL ? st_ivas->hSCE[0]->hCoreCoder[0]->bit_stream : st_ivas->hCPE[0]->hCoreCoder[0]->bit_stream; + + num_bits = 0; + + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + sts = st_ivas->hSCE[sce_id]->hCoreCoder; + sts[0]->bit_stream = bit_stream + num_bits; + num_bits += (int16_t) ( st_ivas->hSCE[sce_id]->element_brate / FRAMES_PER_SEC ); + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + sts = st_ivas->hCPE[cpe_id]->hCoreCoder; + sts[0]->bit_stream = bit_stream + num_bits; + num_bits += (int16_t) ( st_ivas->hCPE[cpe_id]->element_brate / FRAMES_PER_SEC ); + + if ( ( ivas_total_brate < MASA_STEREO_MIN_BITRATE && last_ivas_total_brate >= MASA_STEREO_MIN_BITRATE ) || + ( ivas_total_brate < MASA_STEREO_MIN_BITRATE && last_ivas_total_brate == FRAME_NO_DATA ) ) + { + st_ivas->hCPE[cpe_id]->nchan_out = 1; + + if ( st_ivas->hDirAC != NULL ) + { + if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( ivas_total_brate >= MASA_STEREO_MIN_BITRATE && last_ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + { + st_ivas->hCPE[cpe_id]->nchan_out = CPE_CHANNELS; + + if ( st_ivas->hDirAC != NULL ) + { + if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + } + + ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &tmp, &tmp, &tmp ); + + return error; +} + + +/*-------------------------------------------------------------------* + * ivas_spar_param_to_masa_param_mapping() + * + * Determine MASA metadata from the SPAR metadata + *-------------------------------------------------------------------*/ + +void ivas_spar_param_to_masa_param_mapping( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, real */ + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, imag */ + const int16_t firstSubframe, /* i : First subframe to map */ + const int16_t nSubframes /* i : Number of subframes to map */ +) +{ + int16_t i, j, sf, band, bin, slot, ch, nBins, nchan_transport; + int16_t mixer_mat_index; + int16_t dirac_write_idx; + DIRAC_DEC_HANDLE hDirAC; + DIFFUSE_DISTRIBUTION_HANDLE hDiffuseDist; + float mixer_mat_sf_bands_real[MAX_PARAM_SPATIAL_SUBFRAMES][SPAR_DIRAC_SPLIT_START_BAND][FOA_CHANNELS][FOA_CHANNELS]; + float mixer_mat_sf_bins_real[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX][FOA_CHANNELS][FOA_CHANNELS]; + int16_t *band_grouping; + int16_t band_start, band_end; + float transportSignalEnergies[2][CLDFB_NO_CHANNELS_MAX]; + float transportSignalCrossCorrelation[CLDFB_NO_CHANNELS_MAX]; + float instEne; + float inCovarianceMtx[FOA_CHANNELS][FOA_CHANNELS]; + float foaCovarianceMtx[FOA_CHANNELS][FOA_CHANNELS]; + float Iy, Iz, Ix, E, azi, ele, I, ratio; + float diffuseGainX, diffuseGainY, diffuseGainZ, diffuseGainSum; + + /* Set values */ + hDirAC = st_ivas->hDirAC; + hDirAC->numSimultaneousDirections = 1; + hDiffuseDist = st_ivas->hDirAC->hDiffuseDist; + nchan_transport = st_ivas->nchan_transport; + band_grouping = hDirAC->band_grouping; + dirac_write_idx = hDirAC->dirac_read_idx; /* Mixing matrices, from which MASA meta is determined, already have the delay compensation */ + + /* Init arrays */ + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + set_zero( inCovarianceMtx[i], FOA_CHANNELS ); + } + + /* Delay the SPAR mixing matrices to have them synced with the audio */ + for ( sf = firstSubframe; sf < ( firstSubframe + nSubframes ); sf++ ) + { + if ( sf < SPAR_META_DELAY_SUBFRAMES ) + { + mixer_mat_index = sf + MAX_PARAM_SPATIAL_SUBFRAMES - SPAR_META_DELAY_SUBFRAMES + 1; + for ( band = 0; band < SPAR_DIRAC_SPLIT_START_BAND; band++ ) + { + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + mixer_mat_sf_bands_real[sf][band][i][j] = st_ivas->hSpar->hSparFoa->hMdDec->mixer_mat_prev[mixer_mat_index][i][j][band]; + } + } + } + } + else + { + mixer_mat_index = sf - SPAR_META_DELAY_SUBFRAMES; + for ( band = 0; band < SPAR_DIRAC_SPLIT_START_BAND; band++ ) + { + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + mixer_mat_sf_bands_real[sf][band][i][j] = st_ivas->hSpar->hSparFoa->hMdDec->mixer_mat[i][j][band + mixer_mat_index * IVAS_MAX_NUM_BANDS]; + } + } + } + } + } + + /* Map the mixing matrices from the frequency bands to frequency bins */ + bin = 0; + for ( sf = firstSubframe; sf < ( firstSubframe + nSubframes ); sf++ ) + { + for ( band = 0; band < SPAR_DIRAC_SPLIT_START_BAND; band++ ) + { + band_start = band_grouping[band]; + band_end = band_grouping[band + 1]; + for ( bin = band_start; bin < band_end; bin++ ) + { + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + mixer_mat_sf_bins_real[sf][bin][i][j] = mixer_mat_sf_bands_real[sf][band][i][j]; + } + } + } + } + } + nBins = bin; + + /* Determine MASA metadata */ + for ( sf = firstSubframe; sf < ( firstSubframe + nSubframes ); sf++ ) + { + /* Determine transport signal energies and cross correlations when more than 1 TC */ + if ( nchan_transport == 2 ) + { + set_zero( transportSignalEnergies[0], nBins ); + set_zero( transportSignalEnergies[1], nBins ); + set_zero( transportSignalCrossCorrelation, nBins ); + + for ( slot = 0; slot < hDirAC->subframe_nbslots; slot++ ) + { + int16_t slotThis = slot + ( hDirAC->subframe_nbslots * sf ); + + for ( bin = 0; bin < nBins; bin++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + instEne = ( inRe[ch][slotThis][bin] * inRe[ch][slotThis][bin] ); + instEne += ( inIm[ch][slotThis][bin] * inIm[ch][slotThis][bin] ); + transportSignalEnergies[ch][bin] += instEne; + } + transportSignalCrossCorrelation[bin] += inRe[0][slotThis][bin] * inRe[1][slotThis][bin]; + transportSignalCrossCorrelation[bin] += inIm[0][slotThis][bin] * inIm[1][slotThis][bin]; + } + } + } + + if ( hDiffuseDist != NULL ) + { + set_zero( hDiffuseDist->diffuseRatioX[sf], CLDFB_NO_CHANNELS_MAX ); + set_zero( hDiffuseDist->diffuseRatioY[sf], CLDFB_NO_CHANNELS_MAX ); + set_zero( hDiffuseDist->diffuseRatioZ[sf], CLDFB_NO_CHANNELS_MAX ); + } + + for ( bin = 0; bin < nBins; bin++ ) + { + /* Set the energy of the first transport signal */ + if ( nchan_transport == 1 ) + { + inCovarianceMtx[0][0] = 1.0f; /* In case of 1TC, fixed value can be used */ + } + else + { + inCovarianceMtx[0][0] = transportSignalEnergies[0][bin]; /* In case of 2TC, use actual energies */ + } + /* Decorrelated channels assumed to have the same energy as the source channel */ + inCovarianceMtx[1][1] = inCovarianceMtx[0][0]; + inCovarianceMtx[2][2] = inCovarianceMtx[0][0]; + inCovarianceMtx[3][3] = inCovarianceMtx[0][0]; + + /* In case residuals were transmitted, use their actual energies and cross correlations */ + if ( nchan_transport == 2 ) + { + inCovarianceMtx[1][1] = transportSignalEnergies[1][bin]; + inCovarianceMtx[0][1] = transportSignalCrossCorrelation[bin]; + inCovarianceMtx[1][0] = inCovarianceMtx[0][1]; + } + + compute_foa_cov_matrix( foaCovarianceMtx, inCovarianceMtx, mixer_mat_sf_bins_real[sf][bin] ); + + /* Estimate MASA metadata */ + Iy = foaCovarianceMtx[0][1]; /* Intensity in Y direction */ + Iz = foaCovarianceMtx[0][2]; /* Intensity in Z direction */ + Ix = foaCovarianceMtx[0][3]; /* Intensity in X direction */ + I = sqrtf( Ix * Ix + Iy * Iy + Iz * Iz ); /* Intensity vector length */ + E = ( foaCovarianceMtx[0][0] + foaCovarianceMtx[1][1] + foaCovarianceMtx[2][2] + foaCovarianceMtx[3][3] ) / 2.0f; /* Overall energy */ + azi = atan2f( Iy, Ix ); /* Azimuth */ + ele = atan2f( Iz, sqrtf( Ix * Ix + Iy * Iy ) ); /* Elevation */ + ratio = I / fmaxf( 1e-12f, E ); /* Energy ratio */ + ratio = fmaxf( 0.0f, fminf( 1.0f, ratio ) ); + + hDirAC->azimuth[dirac_write_idx][bin] = (int16_t) roundf( azi / PI_OVER_180 ); + hDirAC->elevation[dirac_write_idx][bin] = (int16_t) roundf( ele / PI_OVER_180 ); + hDirAC->energy_ratio1[dirac_write_idx][bin] = ratio; + hDirAC->diffuseness_vector[dirac_write_idx][bin] = 1.0f - ratio; + + hDirAC->spreadCoherence[dirac_write_idx][bin] = 0.0f; + hDirAC->surroundingCoherence[dirac_write_idx][bin] = 0.0f; + + /* Determine directional distribution of the indirect audio based on the SPAR mixing matrices (and the transport audio signals when 2 TC) */ + if ( hDiffuseDist != NULL ) + { + if ( nchan_transport == 1 ) + { + diffuseGainY = fabsf( mixer_mat_sf_bins_real[sf][bin][1][1] ); + diffuseGainX = fabsf( mixer_mat_sf_bins_real[sf][bin][3][2] ); + diffuseGainZ = fabsf( mixer_mat_sf_bins_real[sf][bin][2][3] ); + } + else if ( nchan_transport == 2 ) + { + diffuseGainY = fabsf( mixer_mat_sf_bins_real[sf][bin][1][1] * transportSignalEnergies[1][bin] ); + diffuseGainX = fabsf( mixer_mat_sf_bins_real[sf][bin][3][2] * transportSignalEnergies[0][bin] ) + fabsf( mixer_mat_sf_bins_real[sf][bin][3][1] * transportSignalEnergies[1][bin] ); + diffuseGainZ = fabsf( mixer_mat_sf_bins_real[sf][bin][2][3] * transportSignalEnergies[0][bin] ) + fabsf( mixer_mat_sf_bins_real[sf][bin][2][1] * transportSignalEnergies[1][bin] ); + } + else + { + diffuseGainY = 1.0f; + diffuseGainX = 1.0f; + diffuseGainZ = 1.0f; + } + + diffuseGainSum = diffuseGainY + diffuseGainX + diffuseGainZ; + + if ( diffuseGainSum == 0.0f ) + { + hDiffuseDist->diffuseRatioX[sf][bin] = 1.0f / 3.0f; + hDiffuseDist->diffuseRatioY[sf][bin] = 1.0f / 3.0f; + hDiffuseDist->diffuseRatioZ[sf][bin] = 1.0f / 3.0f; + } + else + { + hDiffuseDist->diffuseRatioX[sf][bin] = diffuseGainX / ( diffuseGainSum + EPSILON ); + hDiffuseDist->diffuseRatioY[sf][bin] = diffuseGainY / ( diffuseGainSum + EPSILON ); + hDiffuseDist->diffuseRatioZ[sf][bin] = diffuseGainZ / ( diffuseGainSum + EPSILON ); + } + } + } + + dirac_write_idx = ( dirac_write_idx + 1 ) % hDirAC->dirac_md_buffer_length; + } + + return; +} + + +/* Estimate FOA properties: foaCov = mixMtx * inCov * mixMtx' */ +static void compute_foa_cov_matrix( + float foaCov[FOA_CHANNELS][FOA_CHANNELS], /* o : Estimated FOA covariance matrix */ + float inCov[FOA_CHANNELS][FOA_CHANNELS], /* i : Input covariance matrix */ + float mixMtx[FOA_CHANNELS][FOA_CHANNELS] /* i : Mixing matrix */ +) +{ + float tmpMtx[FOA_CHANNELS][FOA_CHANNELS]; + int16_t i, j, k; + + /* tmpMtx = mixMtx * inCov */ + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + tmpMtx[i][j] = 0.0f; + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + tmpMtx[i][j] += mixMtx[i][k] * inCov[k][j]; + } + } + } + + /* foaCov = inCov * mixMtx' */ + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + foaCov[i][j] = 0.0f; + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + foaCov[i][j] += tmpMtx[i][k] * mixMtx[j][k]; + } + } + } + + return; +} diff --git a/lib_dec/ivas_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c new file mode 100644 index 0000000000..e1df8f2a7d --- /dev/null +++ b/lib_dec/ivas_mc_param_dec.c @@ -0,0 +1,2361 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "math.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif +#include "wmops.h" +#include "rom_dec.h" + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define PARAM_MC_LOCAL_SZ_LFE_MAP 5 + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void ivas_param_mc_dec_init( PARAM_MC_DEC_HANDLE hParamMC, const int16_t nchan_in, const int16_t nchan_out ); + + +static void param_mc_protoSignalComputation( float RealBuffer[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], float *proto_frame_f, const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, const int16_t slot_index, const int16_t num_freq_bands ); + +static void ivas_param_mc_dec_copy_diffuse_proto( PARAM_MC_DEC_HANDLE hParamMC, float Cldfb_buffer_real[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float Cldfb_buffer_imag[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const int16_t nY, const int16_t slot_idx ); + +static int16_t ivas_param_mc_range_decoder_LC( uint16_t *bit_buffer, int16_t *x, int16_t *BER_detect, const int16_t sz_seq, const int16_t sz_alphabet, const uint16_t *cft, const uint16_t *sft, const int16_t tot_shift, const int16_t nbbits ); + +static int16_t ivas_param_mc_uniform_decoder( float *seq, const int16_t sz_seq, const float *alphabet, const int16_t N, uint16_t bit_buffer[PARAM_MC_MAX_BITS] ); + +static void ivas_param_mc_dequantize_cov( PARAM_MC_DEC_HANDLE hDirAC, float *ild_q, float *icc_q, const int16_t param_band_index, const int16_t nY_int, const PARAM_MC_SYNTHESIS_CONF synth_conf, const int16_t nY, const int16_t nX, float *Cx_state, float *Cproto, float *Cy_state ); + +static void ivas_param_mc_get_mixing_matrices( PARAM_MC_DEC_HANDLE hParamMC, IVAS_OUTPUT_SETUP *hSynthesisOutputSetup, float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], const int16_t nY_int, const PARAM_MC_SYNTHESIS_CONF synth_conf, const int16_t nX, const int16_t nY ); + +static void ivas_param_mc_get_mono_stereo_mixing_matrices( PARAM_MC_DEC_HANDLE hParamMC, float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], const int16_t nY_intern, const int16_t nX, const int16_t nY_cov ); + +static void param_mc_update_mixing_matrices( PARAM_MC_DEC_HANDLE hParamMC, float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], const uint16_t nX, const uint16_t nY ); + +static void param_mc_compute_interpolator( const uint16_t bAttackPresent, const uint16_t attackPos, const uint16_t interp_length, float *interpolator ); + +static void param_mc_set_num_synth_bands( const int32_t output_Fs, PARAM_MC_DEC_HANDLE hParamMC ); + +static void param_mc_get_diff_proto_info( const float *proto_mtx, const uint16_t nchan_transport, const uint16_t nchan_out_cov, PARAM_MC_DIFF_PROTO_INFO *p_diff_proto_info ); + +static void ivas_param_mc_mc2sba_cldfb( IVAS_OUTPUT_SETUP hTransSetup, float *hoa_encoder, const int16_t slot_idx, float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], const int16_t nBands, const float gain_lfe ); + +void ivas_param_mc_bs_decode_parameter_values( uint16_t bit_buffer[], int16_t *bit_pos, const int16_t max_bits, int16_t *BER_detect, HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParamCodingInfo, const int16_t map_size_wo_lfe, const int16_t map_size, const int16_t num_lfe_bands, const int16_t band_step, const int16_t num_param_bands, float *value_buffer ); + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec_open() + * + * Open Parametric MC decoder handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_param_mc_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t k, nchan_transport; + PARAM_MC_DEC_HANDLE hParamMC; + IVAS_OUTPUT_SETUP hTransportSetup; + int16_t nchan_out_transport; + int16_t nchan_out_cov; + float proto_matrix[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float proto_mtx_norm; + int16_t max_param_band_residual; + uint16_t config_index; + MC_LS_SETUP mc_ls_setup; + float frequency_axis[CLDFB_NO_CHANNELS_MAX]; + AUDIO_CONFIG output_config; + int32_t output_Fs, ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * prepare library opening + *-----------------------------------------------------------------*/ + + if ( ( hParamMC = (PARAM_MC_DEC_HANDLE) count_malloc( sizeof( PARAM_MC_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); + } + + if ( ( hParamMC->hMetadataPMC = (HANDLE_IVAS_PARAM_MC_METADATA) count_malloc( sizeof( IVAS_PARAM_MC_METADATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC metadata \n" ) ); + } + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + output_config = st_ivas->hDecoderConfig->output_config; + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + hTransportSetup = st_ivas->hTransSetup; + mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ); + nchan_out_transport = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; + hParamMC->hoa_encoder = NULL; + + /* determine the synthesis config */ + if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD || st_ivas->transport_config == output_config ) + { + hParamMC->synthesis_conf = PARAM_MC_SYNTH_DIRECT; + } + else if ( output_config == AUDIO_CONFIG_MONO || output_config == AUDIO_CONFIG_STEREO ) + { + hParamMC->synthesis_conf = PARAM_MC_SYNTH_MONO_STEREO; + } + else if ( st_ivas->transport_config != output_config ) + { + if ( ( output_config != AUDIO_CONFIG_LS_CUSTOM && nchan_out_transport > audioCfg2channels( output_config ) ) || ( output_config == AUDIO_CONFIG_LS_CUSTOM && nchan_out_transport > st_ivas->hOutSetup.nchan_out_woLFE ) ) + { + hParamMC->synthesis_conf = PARAM_MC_SYNTH_LS_CONV_COV; + /* need to reset the intern config */ + st_ivas->intern_config = output_config; + ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); + if ( output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + st_ivas->hIntSetup.nchan_out_woLFE = st_ivas->hLsSetupCustom->num_spk; + st_ivas->hIntSetup.ls_azimuth = st_ivas->hLsSetupCustom->ls_azimuth; + st_ivas->hIntSetup.ls_elevation = st_ivas->hLsSetupCustom->ls_elevation; + } + } + else + { + hParamMC->synthesis_conf = PARAM_MC_SYNTH_LS_CONV_CLDFB; + } + } + + hParamMC->ls_conv_dmx_matrix = NULL; + + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + nchan_out_cov = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + } + else + { + nchan_out_cov = nchan_out_transport; + } + + st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_ls_setup ); + config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); + nchan_transport = st_ivas->nchan_transport; + + switch ( nchan_transport ) + { + case 4: + case 3: + st_ivas->nCPE = 2; + st_ivas->nSCE = 0; + st_ivas->element_mode_init = IVAS_CPE_MDCT; + break; + case 2: + st_ivas->nCPE = 1; + st_ivas->nSCE = 0; + st_ivas->element_mode_init = IVAS_CPE_MDCT; + + break; +#ifdef DEBUGGING + default: + assert( 0 && "Number of TC not supported for Parametric MC!" ); +#endif + } + + /*-----------------------------------------------------------------* + * set input parameters + *-----------------------------------------------------------------*/ + + hParamMC->slot_size = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX; + hParamMC->subframe_nbslots = CLDFB_NO_COL_MAX / PARAM_MC_NSUBFRAMES_DEC; + + hParamMC->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); + hParamMC->max_band_energy_compensation = hParamMC->num_freq_bands; + ivas_param_mc_metadata_open( mc_ls_setup, hTransportSetup.index_lfe[0], ivas_total_brate, hParamMC->hMetadataPMC ); + + /* init arrays for quantized parameters */ + hParamMC->icc_q = (float *) count_malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe * sizeof( float ) ); + hParamMC->icld_q = (float *) count_malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe * sizeof( float ) ); + set_f( hParamMC->icld_q, PARAM_MC_DEFAULT_MIN_ILD, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe ); + set_f( hParamMC->icc_q, 0.0f, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe ); + + param_mc_set_num_synth_bands( output_Fs, hParamMC ); + + + /* Band Grouping */ + if ( hParamMC->hMetadataPMC->num_parameter_bands == 20 ) + { + mvs2s( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); + } + else if ( hParamMC->hMetadataPMC->num_parameter_bands == 14 ) + { + mvs2s( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); + } + else if ( hParamMC->hMetadataPMC->num_parameter_bands == 10 ) + { + mvs2s( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); + } + else + { + assert( 0 && "nbands must be 20, 14, or 10!" ); + } + + /* set max parameter band for abs cov */ + k = 0; + while ( hParamMC->band_grouping[k] <= PARAM_MC_MAX_BAND_ABS_COV_DEC ) + { + hParamMC->max_param_band_abs_cov = ( k++ ); + } + + + /*-----------------------------------------------------------------* + * open sub-modules + *-----------------------------------------------------------------*/ + + /* prototype signal computation */ + + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB || hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + if ( ( error = ivas_ls_setup_conversion_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* convert the ls conv dmx matrix into column order matrix format (nchan_out_cldfb x nchan_out) */ + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + hParamMC->ls_conv_dmx_matrix = (float *) count_malloc( nchan_out_transport * nchan_out_cov * sizeof( float ) ); + for ( k = 0; k < nchan_out_transport; k++ ) + { + mvr2r( st_ivas->hLsSetUpConversion->dmxMtx[k], &hParamMC->ls_conv_dmx_matrix[k * nchan_out_cov], nchan_out_cov ); + } + /* convert ParamMC parameter bands to SFB */ + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + st_ivas->hLsSetUpConversion->sfbCnt = hParamMC->num_param_bands_synth; + for ( k = 0; k <= hParamMC->num_param_bands_synth; k++ ) + { + st_ivas->hLsSetUpConversion->sfbOffset[k] = PARAM_MC_BAND_TO_MDCT_BAND_RATIO * hParamMC->band_grouping[k]; + } + } + else + { + /* close the ls conversion handle immediately, it was only needed to get the DMX matrix in case of DMX in the covariance domain */ + ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); + } + } + } + + hParamMC->proto_matrix_int = (float *) count_malloc( nchan_out_transport * nchan_transport * sizeof( float ) ); + mvr2r( ivas_param_mc_conf[config_index].dmx_fac, hParamMC->proto_matrix_int, nchan_transport * nchan_out_transport ); + + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + matrix_product( hParamMC->ls_conv_dmx_matrix, nchan_out_cov, nchan_out_transport, 0, + ivas_param_mc_conf[config_index].dmx_fac, nchan_out_transport, nchan_transport, 0, + proto_matrix ); + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + proto_mtx_norm = 1.f; + for ( k = 0; k < nchan_transport * nchan_out_cov; k++ ) + { + proto_mtx_norm = max( fabsf( proto_mtx_norm ), fabsf( proto_matrix[k] ) ); + } + proto_mtx_norm = 1.f / proto_mtx_norm; + + /* transfer flattened proto_matrix to 2D in hLsSetupConversion->dmxMtx */ + for ( k = 0; k < nchan_transport; k++ ) + { + for ( int16_t i = 0; i < nchan_out_cov; i++ ) + { + st_ivas->hLsSetUpConversion->dmxMtx[k][i] = proto_matrix[k * nchan_out_cov + i] * proto_mtx_norm; + } + } + } + } + else + { + mvr2r( ivas_param_mc_conf[config_index].dmx_fac, proto_matrix, nchan_out_transport * nchan_transport ); + } + + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + hParamMC->num_outputs_diff = 0; + hParamMC->diff_proto_info = NULL; + hParamMC->h_output_synthesis_params.use_onset_filters = 0; + hParamMC->max_band_decorr = 0; + hParamMC->h_freq_domain_decorr_ap_params = NULL; + hParamMC->h_freq_domain_decorr_ap_state = NULL; + } + else + { + hParamMC->num_outputs_diff = nchan_out_cov; + hParamMC->diff_proto_info = (PARAM_MC_DIFF_PROTO_INFO *) count_malloc( sizeof( PARAM_MC_DIFF_PROTO_INFO ) ); + + param_mc_get_diff_proto_info( proto_matrix, nchan_transport, nchan_out_cov, hParamMC->diff_proto_info ); + + /* decorrelation */ + hParamMC->h_freq_domain_decorr_ap_params = NULL; + hParamMC->h_freq_domain_decorr_ap_state = NULL; + + ivas_dirac_dec_get_frequency_axis( frequency_axis, output_Fs, hParamMC->num_freq_bands ); + + ivas_dirac_dec_decorr_open( &( hParamMC->h_freq_domain_decorr_ap_params ), + &( hParamMC->h_freq_domain_decorr_ap_state ), + hParamMC->num_freq_bands, + hParamMC->num_outputs_diff, + hParamMC->diff_proto_info->num_protos_diff, + DIRAC_SYNTHESIS_COV_MC_LS, + frequency_axis, + nchan_transport, + output_Fs ); + + hParamMC->h_output_synthesis_params.use_onset_filters = 0; + hParamMC->max_band_decorr = hParamMC->h_freq_domain_decorr_ap_params->max_band_decorr; + } + hParamMC->max_band_energy_compensation = hParamMC->band_grouping[hParamMC->hMetadataPMC->nbands_coded]; + max_param_band_residual = 0; + + for ( k = hParamMC->hMetadataPMC->num_parameter_bands; k >= 0; k-- ) + { + if ( hParamMC->band_grouping[k] <= hParamMC->max_band_decorr ) + { + max_param_band_residual = k; + assert( hParamMC->band_grouping[k] == hParamMC->max_band_decorr ); + break; + } + } + + /* output synthesis */ + ivas_dirac_dec_output_synthesis_cov_open( &( hParamMC->h_output_synthesis_params ), + &( hParamMC->h_output_synthesis_cov_state ), + hParamMC->max_band_decorr, + PARAM_MC_MAX_NSLOTS, + hParamMC->hMetadataPMC->num_parameter_bands, + max_param_band_residual, + nchan_transport, + nchan_out_cov, + proto_matrix ); + + + /* Head rotation */ + if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && st_ivas->hDecoderConfig->Opt_Headrotation ) + { + hParamMC->hoa_encoder = (float *) count_malloc( st_ivas->hTransSetup.nchan_out_woLFE * MAX_INTERN_CHANNELS * sizeof( float ) ); + compute_hoa_encoder_mtx( st_ivas->hTransSetup.ls_azimuth, st_ivas->hTransSetup.ls_elevation, hParamMC->hoa_encoder, st_ivas->hTransSetup.nchan_out_woLFE, HEAD_ROTATION_HOA_ORDER ); + } + + /*-----------------------------------------------------------------* + * memory allocation + *-----------------------------------------------------------------*/ + + if ( hParamMC->max_band_decorr > 0 ) + { + hParamMC->proto_frame_f = (float *) count_malloc( 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands * sizeof( float ) ); + hParamMC->proto_frame_dec_f = (float *) count_malloc( 2 * nchan_out_cov * hParamMC->num_freq_bands * sizeof( float ) ); + } + else + { + hParamMC->proto_frame_f = NULL; + hParamMC->proto_frame_dec_f = NULL; + } + + ivas_param_mc_dec_init( hParamMC, nchan_transport, nchan_out_cov ); + + st_ivas->hParamMC = hParamMC; + + return error; +} + +/*------------------------------------------------------------------------- + * param_mc_get_num_cldfb_syntheses() + * + * calculate the necessary number of CLDFB synthesis instances + *------------------------------------------------------------------------*/ + +/*! r: number of cldfb synthesis instances */ +int16_t param_mc_get_num_cldfb_syntheses( + Decoder_Struct *st_ivas /* i : Parametric MC handle */ +) +{ + int16_t num_cldfb_syntheses; + + num_cldfb_syntheses = 0; + + /* sanity check*/ + if ( st_ivas->hParamMC == NULL ) + { + assert( 0 && "ParamMC handle does not exist!\n" ); + } + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + num_cldfb_syntheses = 2; + } + else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + { + num_cldfb_syntheses = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; + } + else if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC ) + { + num_cldfb_syntheses = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + } +#ifdef DEBUGGING + else + { + assert( 0 && "Renderer settings not valid for ParamMC!\n" ); + } +#endif + + return num_cldfb_syntheses; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec_close() + * + * Close Parametric MC memories + *------------------------------------------------------------------------*/ + +void ivas_param_mc_dec_close( + PARAM_MC_DEC_HANDLE *hParamMC_out /* i/o: Parametric MC decoder handle */ +) +{ + uint16_t i; + PARAM_MC_DEC_HANDLE hParamMC; + + if ( hParamMC_out == NULL || *hParamMC_out == NULL ) + { + return; + } + + hParamMC = *hParamMC_out; + + /* close sub-modules */ + ivas_dirac_dec_output_synthesis_cov_close( &hParamMC->h_output_synthesis_params, &hParamMC->h_output_synthesis_cov_state ); + + if ( hParamMC->h_freq_domain_decorr_ap_params != NULL || hParamMC->h_freq_domain_decorr_ap_state != NULL ) + { + ivas_dirac_dec_decorr_close( &hParamMC->h_freq_domain_decorr_ap_params, &hParamMC->h_freq_domain_decorr_ap_state ); + } + + /* parameter decoding */ + if ( hParamMC->hMetadataPMC != NULL ) + { + ivas_param_mc_metadata_close( hParamMC->hMetadataPMC ); + + count_free( hParamMC->hMetadataPMC ); + hParamMC->hMetadataPMC = NULL; + } + + if ( hParamMC->icc_q != NULL ) + { + count_free( hParamMC->icc_q ); + hParamMC->icc_q = NULL; + } + + if ( hParamMC->icld_q != NULL ) + { + count_free( hParamMC->icld_q ); + hParamMC->icld_q = NULL; + } + + /* diffuse prototype info */ + if ( hParamMC->diff_proto_info ) + { + for ( i = 0; i < hParamMC->diff_proto_info->num_protos_diff; i++ ) + { + count_free( hParamMC->diff_proto_info->source_chan_idx[i] ); + hParamMC->diff_proto_info->source_chan_idx[i] = NULL; + + count_free( hParamMC->diff_proto_info->proto_fac[i] ); + hParamMC->diff_proto_info->proto_fac[i] = NULL; + } + + count_free( hParamMC->diff_proto_info->source_chan_idx ); + hParamMC->diff_proto_info->source_chan_idx = NULL; + + count_free( hParamMC->diff_proto_info->proto_fac ); + hParamMC->diff_proto_info->proto_fac = NULL; + + count_free( hParamMC->diff_proto_info->proto_index_diff ); + hParamMC->diff_proto_info->proto_index_diff = NULL; + + count_free( hParamMC->diff_proto_info->num_source_chan_diff ); + hParamMC->diff_proto_info->num_source_chan_diff = NULL; + + count_free( hParamMC->diff_proto_info ); + hParamMC->diff_proto_info = NULL; + } + + + /* States */ + /* free prototype signal buffers */ + if ( hParamMC->proto_frame_f != NULL ) + { + count_free( hParamMC->proto_frame_f ); + hParamMC->proto_frame_f = NULL; + } + + if ( hParamMC->proto_frame_dec_f != NULL ) + { + count_free( hParamMC->proto_frame_dec_f ); + hParamMC->proto_frame_dec_f = NULL; + } + + if ( hParamMC->ls_conv_dmx_matrix != NULL ) + { + count_free( hParamMC->ls_conv_dmx_matrix ); + hParamMC->ls_conv_dmx_matrix = NULL; + } + + if ( hParamMC->proto_matrix_int != NULL ) + { + count_free( hParamMC->proto_matrix_int ); + hParamMC->proto_matrix_int = NULL; + } + + if ( hParamMC->hoa_encoder != NULL ) + { + count_free( hParamMC->hoa_encoder ); + hParamMC->hoa_encoder = NULL; + } + + count_free( hParamMC ); + hParamMC = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec_read_BS() + * + * Read the Parametric MC metadata + *------------------------------------------------------------------------*/ + +void ivas_param_mc_dec_read_BS( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + Decoder_State *st, /* i/o: decoder state structure */ + PARAM_MC_DEC_HANDLE hParamMC, /* i/o: decoder ParamMC handle */ + int16_t *nb_bits /* o : number of bits written */ +) +{ + int16_t param_frame_idx; + int16_t band_step; + uint16_t bit_buffer[PARAM_MC_MAX_BITS]; + int16_t bits_to_copy; + int16_t bit_pos; + int16_t num_lfe_bands; + int16_t num_param_bands; + int16_t metadata_bit_pos; + int16_t i, j, k, l; + int16_t icc_map_size; + int16_t icc_map_size_wo_lfe; + int16_t ild_map_size; + int16_t ild_map_size_wo_lfe; + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC; + + wmops_sub_start( "param_mc_read_bs" ); + + /* Inits */ + *nb_bits = 0; + hMetadataPMC = hParamMC->hMetadataPMC; + icc_map_size = hMetadataPMC->icc_mapping_conf->icc_map_size_lfe; + icc_map_size_wo_lfe = hMetadataPMC->icc_mapping_conf->icc_map_size_wo_lfe; + ild_map_size = hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; + ild_map_size_wo_lfe = hMetadataPMC->ild_mapping_conf->ild_map_size_wo_lfe; + + if ( !st->bfi ) + { + metadata_bit_pos = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC - 1 ); + bits_to_copy = (int16_t) min( ivas_total_brate / FRAMES_PER_SEC, PARAM_MC_MAX_BITS ); + + /* copy and reverse metadata */ + for ( bit_pos = 0; bit_pos < bits_to_copy; bit_pos++ ) + { + bit_buffer[bit_pos] = st->bit_stream[metadata_bit_pos--]; + } + + bit_pos = 0; + + /* read reserved bit */ + hMetadataPMC->lfe_on = bit_buffer[bit_pos++]; + + /* get coded bwidth */ + { + int16_t pos; + int16_t bw = 0; + for ( pos = 0; pos < 2; pos++ ) + { + bw += ( bit_buffer[bit_pos++] << pos ); + } + hMetadataPMC->coded_bwidth = bw; + } + + /* set tables if coded band width differs from last frame */ + if ( hMetadataPMC->coded_bwidth != hMetadataPMC->last_coded_bwidth ) + { + ivas_param_mc_set_coded_bands( hMetadataPMC ); + param_mc_set_num_synth_bands( st->output_Fs, hParamMC ); + hParamMC->max_band_energy_compensation = hParamMC->band_grouping[hParamMC->num_param_bands_synth]; + } + + param_frame_idx = bit_buffer[bit_pos++]; + hMetadataPMC->param_frame_idx = param_frame_idx; + num_param_bands = hMetadataPMC->nbands_in_param_frame[param_frame_idx]; + + hMetadataPMC->bAttackPresent = bit_buffer[bit_pos++]; + hMetadataPMC->attackIndex = 0; + band_step = 1; + num_lfe_bands = 0; + + if ( hMetadataPMC->bAttackPresent ) + { + for ( i = 2; i >= 0; i-- ) + { + hMetadataPMC->attackIndex += ( bit_buffer[bit_pos++] << i ); + } + + band_step = PARAM_MC_TRANSIENT_BAND_STEP; + num_lfe_bands = PARAM_MC_MAX_BAND_LFE / band_step + ( PARAM_MC_MAX_BAND_LFE % band_step ) ? 1 : 0; + num_param_bands = hMetadataPMC->nbands_coded / band_step + ( ( hMetadataPMC->nbands_coded % band_step ) ? 1 : 0 ); + } + else + { + for ( j = 0; j < PARAM_MC_MAX_BAND_LFE; j += band_step ) + { + if ( param_frame_idx == hMetadataPMC->coding_band_mapping[j] ) + { + /* LFE ICC is always the last ICC in coding band 0 */ + num_lfe_bands++; + } + } + } + + if ( !hMetadataPMC->lfe_on ) + { + num_lfe_bands = 0; + } + + param_mc_compute_interpolator( hMetadataPMC->bAttackPresent, hMetadataPMC->attackIndex, PARAM_MC_MAX_NSLOTS, hParamMC->h_output_synthesis_params.interpolator ); + + if ( hMetadataPMC->flag_use_adaptive_icc_map == 1 ) + { + int16_t icc_mapping_index[PARAM_MC_SZ_ICC_MAP]; + + k = 0; + for ( i = 0; i < hMetadataPMC->icc_map_size_full - 1; i++ ) + { + if ( bit_buffer[bit_pos++] == 1 ) + { + icc_mapping_index[k++] = i; + } + } + + /* last one is always C/LFE */ + icc_mapping_index[k] = hMetadataPMC->icc_map_size_full - 1; + + /* save icc mapping of the previous frame*/ + /* build icc map for the current frame */ + for ( k = 0; k < icc_map_size; k++ ) + { + hMetadataPMC->icc_mapping[param_frame_idx][k][0] = hMetadataPMC->icc_map_full[0][icc_mapping_index[k]]; + hMetadataPMC->icc_mapping[param_frame_idx][k][1] = hMetadataPMC->icc_map_full[1][icc_mapping_index[k]]; + } + + if ( hMetadataPMC->bAttackPresent ) + { + for ( k = 0; k < icc_map_size; k++ ) + { + for ( l = 0; l < PARAM_MC_PARAMETER_FRAMES; l++ ) + { + hMetadataPMC->icc_mapping[l][k][0] = hMetadataPMC->icc_map_full[0][icc_mapping_index[k]]; + hMetadataPMC->icc_mapping[l][k][1] = hMetadataPMC->icc_map_full[1][icc_mapping_index[k]]; + } + } + } + else + { + for ( k = 0; k < icc_map_size; k++ ) + { + hMetadataPMC->icc_mapping[hMetadataPMC->param_frame_idx][k][0] = hMetadataPMC->icc_map_full[0][icc_mapping_index[k]]; + hMetadataPMC->icc_mapping[hMetadataPMC->param_frame_idx][k][1] = hMetadataPMC->icc_map_full[1][icc_mapping_index[k]]; + } + } + } + else + { + if ( hMetadataPMC->bAttackPresent ) + { + for ( l = 0; l < PARAM_MC_PARAMETER_FRAMES; l++ ) + { + ivas_param_mc_default_icc_map( hMetadataPMC->icc_mapping_conf, hMetadataPMC->icc_mapping[param_frame_idx] ); + } + } + else + { + ivas_param_mc_default_icc_map( hMetadataPMC->icc_mapping_conf, hMetadataPMC->icc_mapping[hMetadataPMC->param_frame_idx] ); + } + } + + ivas_param_mc_bs_decode_parameter_values( bit_buffer, &bit_pos, bits_to_copy, &st->BER_detect, hMetadataPMC, &hMetadataPMC->icc_coding, + icc_map_size_wo_lfe, icc_map_size, num_lfe_bands, band_step, num_param_bands, hParamMC->icc_q ); + if ( !st->BER_detect ) + { + ivas_param_mc_bs_decode_parameter_values( bit_buffer, &bit_pos, bits_to_copy, &st->BER_detect, hMetadataPMC, &hMetadataPMC->ild_coding, + ild_map_size_wo_lfe, ild_map_size, num_lfe_bands, band_step, num_param_bands, hParamMC->icld_q ); + } + /* set LFE ILD and ICC to zero above PARAM_MC_MAX_BAND_LFE for attack frames */ + if ( hMetadataPMC->bAttackPresent ) + { + for ( k = PARAM_MC_MAX_BAND_LFE; k < band_step * num_lfe_bands; k++ ) + { + hParamMC->icc_q[( k + 1 ) * icc_map_size - 1] = 1.0f; + hParamMC->icld_q[( k + 1 ) * ild_map_size - 1] = PARAM_MC_DEFAULT_MIN_ILD; + } + } + + *nb_bits = bit_pos; + + + } /* if ( !st->bfi ) */ + + if ( st->bfi ) + { + /* for PLC, use the saved ILDs and ICCs from the past and set the transient flag and transient position to zero */ + hMetadataPMC->bAttackPresent = 0; + hMetadataPMC->attackIndex = 0; + } + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec() + * + * Parametric MC decoding process + *------------------------------------------------------------------------*/ + +void ivas_param_mc_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ +) +{ + PARAM_MC_DEC_HANDLE hParamMC; + int16_t i, ch; + int16_t subframe_idx, num_subframes; + int16_t slot_idx, param_band_idx, slot_idx_start; + int16_t nchan_transport, nchan_out_transport, nchan_out_cldfb; + int16_t nchan_out_cov; + /*CLDFB*/ + float Cldfb_RealBuffer_in[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_in[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_RealBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float real_part, imag_part; + /*Decorrelator*/ + float onset_filter[MAX_CICP_CHANNELS * CLDFB_NO_CHANNELS_MAX]; + /* format converter */ + int16_t channel_active[MAX_OUTPUT_CHANNELS]; + uint16_t nband_synth, nbands_to_zero; + uint16_t nchan_out_init; + IVAS_OUTPUT_SETUP *hSynthesisOutputSetup; + + hParamMC = st_ivas->hParamMC; + assert( hParamMC ); + + wmops_sub_start( "param_mc_dec" ); + + set_s( channel_active, 0, MAX_CICP_CHANNELS ); + nchan_transport = st_ivas->nchan_transport; + nchan_out_transport = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; + nchan_out_init = nchan_out_transport; + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + nchan_out_cldfb = BINAURAL_CHANNELS; + set_s( channel_active, 1, nchan_out_cldfb ); + if ( st_ivas->hHeadTrackData ) + { + nchan_out_init = MAX_INTERN_CHANNELS; + } + nchan_out_cov = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; + hSynthesisOutputSetup = &st_ivas->hTransSetup; + } + else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB ) + { + nchan_out_cov = nchan_out_transport; + nchan_out_cldfb = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + hSynthesisOutputSetup = &st_ivas->hTransSetup; + } + else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + nchan_out_cov = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + nchan_out_cldfb = nchan_out_cov; + set_s( channel_active, 1, nchan_out_cov ); + hSynthesisOutputSetup = &st_ivas->hOutSetup; + } + else + { + nchan_out_cov = nchan_out_transport; + nchan_out_cldfb = nchan_out_transport; + set_s( channel_active, 1, nchan_out_cov ); + hSynthesisOutputSetup = &st_ivas->hTransSetup; + } + + /* set everything to zero that will not be decoded */ + nband_synth = hParamMC->band_grouping[hParamMC->num_param_bands_synth]; + nbands_to_zero = hParamMC->num_freq_bands - nband_synth; + for ( ch = 0; ch < nchan_out_init; ch++ ) + { + for ( slot_idx = 0; slot_idx < hParamMC->subframe_nbslots; slot_idx++ ) + { + set_zero( &( Cldfb_RealBuffer[ch][slot_idx][nband_synth] ), nbands_to_zero ); + set_zero( &( Cldfb_ImagBuffer[ch][slot_idx][nband_synth] ), nbands_to_zero ); + } + } + + for ( param_band_idx = 0; param_band_idx < PARAM_MC_MAX_PARAMETER_BANDS; param_band_idx++ ) + { + set_zero( cx[param_band_idx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); + set_zero( cx_imag[param_band_idx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); + } + + /* slot loop for gathering the input data */ + for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) + { + float RealBuffer[CLDFB_NO_CHANNELS_MAX]; + float ImagBuffer[CLDFB_NO_CHANNELS_MAX]; + + /* CLDFB Analysis*/ + for ( ch = 0; ch < nchan_transport; ch++ ) + { + cldfbAnalysis_ts( &( output_f[ch][hParamMC->num_freq_bands * slot_idx] ), RealBuffer, ImagBuffer, hParamMC->num_freq_bands, st_ivas->cldfbAnaDec[ch] ); + + mvr2r( RealBuffer, Cldfb_RealBuffer_in[ch][slot_idx], hParamMC->num_freq_bands ); + mvr2r( ImagBuffer, Cldfb_ImagBuffer_in[ch][slot_idx], hParamMC->num_freq_bands ); + } + + if ( slot_idx >= 2 * hParamMC->hMetadataPMC->attackIndex ) + { + ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot( Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, cx, cx_imag, hParamMC, nchan_transport, slot_idx ); + } + } + + /* map from complex input covariance to real values */ + for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) + { + /* Cx for transport channels */ + for ( i = 0; i < nchan_transport * nchan_transport; i++ ) + { + real_part = cx[param_band_idx][i]; + imag_part = cx_imag[param_band_idx][i]; + + /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ + if ( param_band_idx < hParamMC->max_param_band_abs_cov ) + { + cx[param_band_idx][i] = sqrtf( real_part * real_part + imag_part * imag_part ); + } + else + { + cx[param_band_idx][i] = real_part; + } + } + } + + /* we have to do it similar to the encoder in case of attacks (i.e. accumulate two bands) to ensure correct DMX of the target covariance*/ + if ( hParamMC->hMetadataPMC->bAttackPresent && ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) ) + { + for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx += 2 ) + { + v_add( cx[param_band_idx], cx[param_band_idx + 1], cx[param_band_idx], nchan_transport * nchan_transport ); + mvr2r( cx[param_band_idx], cx[param_band_idx + 1], nchan_transport * nchan_transport ); + } + } + + + if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + { + ivas_param_mc_get_mono_stereo_mixing_matrices( hParamMC, cx, mixing_matrix, mixing_matrix_res, nchan_out_transport, nchan_transport, nchan_out_cov ); + } + else + { + /* generate mixing matrices */ + ivas_param_mc_get_mixing_matrices( hParamMC, hSynthesisOutputSetup, cx, mixing_matrix, mixing_matrix_res, nchan_out_transport, hParamMC->synthesis_conf, nchan_transport, nchan_out_cov ); + } + + /* subframe loop for synthesis*/ + num_subframes = CLDFB_NO_COL_MAX / hParamMC->subframe_nbslots; + for ( subframe_idx = 0; subframe_idx < num_subframes; subframe_idx++ ) + { + slot_idx_start = subframe_idx * hParamMC->subframe_nbslots; + + for ( slot_idx = 0; slot_idx < hParamMC->subframe_nbslots; slot_idx++ ) + { + + if ( hParamMC->max_band_decorr > 0 ) + { + /*-----------------------------------------------------------------* + * protoype signal computation + *-----------------------------------------------------------------*/ + + param_mc_protoSignalComputation( Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, + hParamMC->proto_frame_f, hParamMC->diff_proto_info, + slot_idx + slot_idx_start, hParamMC->num_freq_bands ); + + /*-----------------------------------------------------------------* + * frequency domain decorrelation + *-----------------------------------------------------------------*/ + + /* decorrelate prototype frame */ + ivas_dirac_dec_decorr_process( hParamMC->num_freq_bands, + hParamMC->num_outputs_diff, + hParamMC->diff_proto_info->num_protos_diff, + DIRAC_SYNTHESIS_COV_MC_LS, + nchan_transport, + hParamMC->proto_frame_f, + hParamMC->diff_proto_info->num_protos_diff, + hParamMC->diff_proto_info->proto_index_diff, + hParamMC->proto_frame_dec_f, + onset_filter, + hParamMC->h_freq_domain_decorr_ap_params, + hParamMC->h_freq_domain_decorr_ap_state ); + + /* copy decorrelated frame directly to output CLDFB buffer, acts also as intermediate */ + /* memory for the decorrelated signal */ + ivas_param_mc_dec_copy_diffuse_proto( hParamMC, Cldfb_RealBuffer, Cldfb_ImagBuffer, nchan_out_cov, slot_idx ); + } + + /*-----------------------------------------------------------------* + * output synthesis + *-----------------------------------------------------------------*/ + + ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot( Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, Cldfb_RealBuffer, Cldfb_ImagBuffer, + mixing_matrix, mixing_matrix_res, slot_idx, slot_idx + slot_idx_start, + nchan_transport, nchan_out_cov, hParamMC ); + + if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) + { + if ( st_ivas->hHeadTrackData && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) + { + ivas_param_mc_mc2sba_cldfb( st_ivas->hTransSetup, hParamMC->hoa_encoder, slot_idx, Cldfb_RealBuffer, Cldfb_ImagBuffer, nband_synth, GAIN_LFE ); + } + else + { + /* remove LFE */ + uint16_t idx_out; + uint16_t idx_lfe; + IVAS_OUTPUT_SETUP hLsSetup; + + hLsSetup = st_ivas->hTransSetup; + + /* If LFE should be rendered, add it to other channels before removing */ + if ( st_ivas->hBinRenderer->render_lfe ) + { + for ( idx_lfe = 0; idx_lfe < hLsSetup.num_lfe; idx_lfe++ ) + { + /* Copy just the first band of LFE*/ + v_multc( Cldfb_RealBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], ( GAIN_LFE / hLsSetup.nchan_out_woLFE ), Cldfb_RealBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], 1 ); + v_multc( Cldfb_ImagBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], ( GAIN_LFE / hLsSetup.nchan_out_woLFE ), Cldfb_ImagBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], 1 ); + + for ( ch = 0; ch < ( hLsSetup.nchan_out_woLFE + hLsSetup.num_lfe ); ch++ ) + { + if ( hLsSetup.index_lfe[idx_lfe] != ch ) + { + v_add( Cldfb_RealBuffer[ch][slot_idx], Cldfb_RealBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], Cldfb_RealBuffer[ch][slot_idx], 1 ); + v_add( Cldfb_ImagBuffer[ch][slot_idx], Cldfb_ImagBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], Cldfb_ImagBuffer[ch][slot_idx], 1 ); + } + } + } + } + + idx_out = 0; + idx_lfe = 0; + + for ( ch = 0; ch < ( hLsSetup.nchan_out_woLFE + hLsSetup.num_lfe ); ch++ ) + { + if ( ( hLsSetup.num_lfe > 0 ) && ( hLsSetup.index_lfe[idx_lfe] == ch ) ) + { + if ( idx_lfe < ( hLsSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else if ( ch != idx_out ) + { + mvr2r( Cldfb_RealBuffer[ch][slot_idx], Cldfb_RealBuffer[idx_out][slot_idx], nband_synth ); + mvr2r( Cldfb_ImagBuffer[ch][slot_idx], Cldfb_ImagBuffer[idx_out][slot_idx], nband_synth ); + idx_out++; + } + else + { + idx_out++; + } + } + } + } + } + + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + } + else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB ) + { + /* format conversion*/ + ivas_lssetupconversion_process_param_mc( st_ivas, Cldfb_RealBuffer, Cldfb_ImagBuffer, channel_active ); + } + + /* CLDFB synthesis */ + for ( ch = 0; ch < nchan_out_cldfb; ch++ ) + { + float *RealBuffer[16]; + float *ImagBuffer[16]; + + if ( channel_active[ch] ) + { + /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ + for ( i = 0; i < hParamMC->subframe_nbslots; i++ ) + { + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + RealBuffer[i] = Cldfb_RealBuffer_Binaural[ch][i]; + ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[ch][i]; + } + else + { + RealBuffer[i] = Cldfb_RealBuffer[ch][i]; + ImagBuffer[i] = Cldfb_ImagBuffer[ch][i]; + } + } + + cldfbSynthesis( RealBuffer, ImagBuffer, &( output_f[ch][slot_idx_start * hParamMC->num_freq_bands] ), + hParamMC->num_freq_bands * hParamMC->subframe_nbslots, st_ivas->cldfbSynDec[ch] ); + } + else + { + set_f( &( output_f[ch][slot_idx_start * hParamMC->num_freq_bands] ), 0.0f, hParamMC->num_freq_bands * hParamMC->subframe_nbslots ); + } + } + } + + if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + { + ivas_mc2sba( st_ivas->hIntSetup, output_f, hParamMC->num_freq_bands * PARAM_MC_MAX_NSLOTS, st_ivas->hOutSetup.ambisonics_order, 0.f ); + } + + /* update */ + hParamMC->hMetadataPMC->last_coded_bwidth = hParamMC->hMetadataPMC->coded_bwidth; + param_mc_update_mixing_matrices( hParamMC, mixing_matrix, mixing_matrix_res, nchan_transport, nchan_out_cov ); + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * param_mc_dec_init() + * + * Parametric MC decoding initialization + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_dec_init( + PARAM_MC_DEC_HANDLE hParamMC, /* i/o: decoder DirAC handle */ + const int16_t nchan_transport, /* i : number of input (transport) channels */ + const int16_t nchan_cov ) /* i : number of cov synthesis channels */ +{ + int16_t k; + uint16_t max_param_band_residual; + int16_t len; + + /*-----------------------------------------------------------------* + * init sub-modules + *-----------------------------------------------------------------*/ + + /* decorrelation */ + if ( hParamMC->max_band_decorr > 0 ) + { + len = hParamMC->diff_proto_info->num_protos_diff * hParamMC->h_freq_domain_decorr_ap_params->h_onset_detection_power_params.max_band_decorr; + + /* init onsetDetectionPower */ + set_zero( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_1, len ); + set_zero( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_2, len ); + } + + max_param_band_residual = 0; + + /* output synthesis */ + for ( k = hParamMC->hMetadataPMC->num_parameter_bands; k >= 0; k-- ) + { + if ( hParamMC->band_grouping[k] <= hParamMC->max_band_decorr ) + { + max_param_band_residual = k; +#ifdef DEBUGGING + assert( hParamMC->band_grouping[k] == hParamMC->max_band_decorr ); +#endif + break; + } + } + + ivas_dirac_dec_output_synthesis_cov_init( &( hParamMC->h_output_synthesis_cov_state ), nchan_transport, nchan_cov, hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual ); + + /*-----------------------------------------------------------------* + * init proto frames + *-----------------------------------------------------------------*/ + + if ( hParamMC->max_band_decorr > 0 ) + { + set_zero( hParamMC->proto_frame_f, 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands ); + set_zero( hParamMC->proto_frame_dec_f, 2 * nchan_cov * hParamMC->num_freq_bands ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * Local functions + *-------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec_compute_diffuse_proto() + * + * Compute prototypes for decorrelation + *------------------------------------------------------------------------*/ + +static void param_mc_protoSignalComputation( + float RealBuffer[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : CLDFB samples of the transport channels (real part) */ + float ImagBuffer[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX], /* i : CLDFB samples of the transport channels (imaginary part) */ + float *proto_frame_f, /* o : interleaved complex prototype CLDFB samples */ + const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, /* i : prototype generation information */ + const int16_t slot_index, /* i : current slot index */ + const int16_t num_freq_bands /* i : number of frequency bands for the prototypes */ +) +{ + int16_t band; + int16_t proto_ch_idx, source_ch_cnt; + float *p_proto_frame; + float *p_real_buffer; + float *p_imag_buffer; + + set_zero( proto_frame_f, 2 * num_freq_bands * diff_proto_info->num_protos_diff ); + + for ( proto_ch_idx = 0; proto_ch_idx < diff_proto_info->num_protos_diff; proto_ch_idx++ ) + { + int16_t num_source_ch = diff_proto_info->num_source_chan_diff[proto_ch_idx]; + + for ( source_ch_cnt = 0; source_ch_cnt < num_source_ch; source_ch_cnt++ ) + { + float fac = diff_proto_info->proto_fac[proto_ch_idx][source_ch_cnt]; + int16_t source_ch_idx = diff_proto_info->source_chan_idx[proto_ch_idx][source_ch_cnt]; + + p_proto_frame = &proto_frame_f[proto_ch_idx * num_freq_bands * 2]; + p_real_buffer = &RealBuffer[source_ch_idx][slot_index][0]; + p_imag_buffer = &ImagBuffer[source_ch_idx][slot_index][0]; + + for ( band = 0; band < num_freq_bands; band++ ) + { + *( p_proto_frame++ ) += fac * ( *( p_real_buffer++ ) ); + *( p_proto_frame++ ) += fac * ( *( p_imag_buffer++ ) ); + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec_compute_diffuse_proto() + * + * Transfer decorrelated signals back from the decorrelator buffer to + * the buffers used in the final synthesis + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_dec_copy_diffuse_proto( + PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ + float Cldfb_buffer_real[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* o : CLDFB buffer used in the final synthesis (real part) */ + float Cldfb_buffer_imag[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* o : CLDFB buffer used in the final synthesis (imaginary part) */ + const int16_t nY, /* i : number of decorrelated channels */ + const int16_t slot_idx /* i : current time slot index */ +) +{ + int16_t k, l; + int16_t num_freq_bands, num_freq_bands_diff; + float *p_proto_diff; + + num_freq_bands = hParamMC->num_freq_bands; + num_freq_bands_diff = hParamMC->h_output_synthesis_params.max_band_decorr; + + for ( k = 0; k < nY; k++ ) + { + p_proto_diff = hParamMC->proto_frame_dec_f + k * 2 * num_freq_bands; + for ( l = 0; l < num_freq_bands_diff; l++ ) + { + Cldfb_buffer_real[k][slot_idx][l] = *( p_proto_diff++ ); + Cldfb_buffer_imag[k][slot_idx][l] = *( p_proto_diff++ ); + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_bin2dec() + * + * decode a number of bits to an integer + *------------------------------------------------------------------------*/ +/* r : decoded integer */ +static int16_t ivas_param_mc_bin2dec( + uint16_t bits[PARAM_MC_MAX_BITS], /* i : bit buffer */ + const int16_t N /* i : number of bits to decode */ +) +{ + int16_t i; + int16_t out; + + assert( N <= 16 ); + out = 0; + for ( i = 0; i < N; i++ ) + { + out += ( bits[i] << ( N - 1 - i ) ); + } + + return out; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_uniform_encoder() + * + * decode a uniformily coded sequence of float values + *------------------------------------------------------------------------*/ + +static int16_t ivas_param_mc_uniform_decoder( + float *seq, /* o : decoded sequence of float values */ + const int16_t sz_seq, /* i : number of values to decode */ + const float *alphabet, /* i : codebook */ + const int16_t N, /* i : number of bits per coded index */ + uint16_t bit_buffer[PARAM_MC_MAX_BITS] /* i : bit buffer to decode */ +) +{ + int16_t i; + int16_t idx; + int16_t n_bits; + + n_bits = 0; + assert( N * sz_seq < PARAM_MC_MAX_BITS ); + + for ( i = 0; i < sz_seq; ++i ) + { + idx = ivas_param_mc_bin2dec( &bit_buffer[i * N], N ); + seq[i] = alphabet[idx]; + } + + n_bits = N * sz_seq; + + return n_bits; +} + +/*------------------------------------------------------------------------- + * ivas_param_mc_range_decoder_LC() + * + * decode a sequency of inidices coded with a range coder + *------------------------------------------------------------------------*/ + +static int16_t ivas_param_mc_range_decoder_LC( + uint16_t *bit_buffer, /* i : bit buffer to read from */ + int16_t *x, /* o : decoded indices */ + int16_t *BER_detect, /* o : flag for indicating a bit error */ + const int16_t sz_seq, /* i : size of the sequence to be decoded */ + const int16_t sz_alphabet, /* i : size of the alphabet */ + const uint16_t *cft, /* i : cumulative frequency table */ + const uint16_t *sft, /* i : symbol frequency table */ + const int16_t tot_shift, /* i : total frequency as a power of 2 */ + const int16_t nbbits /* i : maximum bit budget */ +) +{ + RangeUniDecState rc_st_dec; /* State of the range decoder */ + int16_t cur_bit_pos; + int16_t k; + int16_t r; + + /* Start Decoding */ + /* Initialize range decoder */ + cur_bit_pos = 0; + rc_uni_dec_init( &rc_st_dec, bit_buffer, nbbits - 32 ); /* (nbbits + 30) entries are read by the decoder */ + + /* Main Loop through the indices */ + for ( k = 0; k < sz_seq; k++ ) + { + r = rc_uni_dec_read_symbol_fastS( &rc_st_dec, cft, sft, sz_alphabet, tot_shift ); /*Alphabet size = 17 (2^4 = 16 MSB symbols + 1 ESC symbol) */ + /* r is the symbol read, the possible values are {0,1,....alphabet_size - 1} */ + + /* Update bitstream pointer */ + cur_bit_pos = rc_uni_dec_virtual_finish( &rc_st_dec ); + + /* Confirm that there is no overflow */ + if ( cur_bit_pos > nbbits ) + { + *BER_detect |= 1; + } + + x[k] = r; + } + + /* We don't need to finish because virtual_finish() already does the same */ + /*st->next_bit_pos = rc_uni_dec_finish(&rc_st_dec);*/ + + /* Check for bitstream errors */ + if ( rc_st_dec.bit_error_detected != 0 ) + { + *BER_detect |= 1; + } + + return cur_bit_pos; +} + +/*------------------------------------------------------------------------- + * param_mc_compute_interpolator() + * + * compute the interpolator used in the final synthesis + *------------------------------------------------------------------------*/ + +static void param_mc_compute_interpolator( + const uint16_t bAttackPresent, /* i : flag indicating if we have a transient in the current frame */ + const uint16_t attackPos, /* i : position of the transient */ + const uint16_t interp_length, /* i : number of interpolation values to be calculated */ + float *interpolator /* o : interpolator */ +) +{ + uint16_t idx; + + if ( bAttackPresent ) + { + for ( idx = 0; idx < 2 * attackPos; idx++ ) + { + interpolator[idx] = 0.0f; + } + for ( ; idx < interp_length; idx++ ) + { + interpolator[idx] = 1.0f; + } + } + else + { + for ( idx = 1; idx <= interp_length; ++idx ) + { + interpolator[idx - 1] = (float) idx / (float) interp_length; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * remove_lfe_from_cy() + * + * remove all LFE related values from a covariance matrix + *------------------------------------------------------------------------*/ + +static void remove_lfe_from_cy( + const int16_t nY, /* i : dimension of the covariance matrix */ + int16_t lfe_indices[PARAM_MC_LOCAL_SZ_LFE_MAP], /* i : LFE index */ + int16_t num_lfe, /* i : number of LFEs */ + float *cy, /* i : covariance matrix */ + float *cy_woLFE ) /* o : covariance matrix with LFE removed */ +{ + int16_t ch_idx1, ch_idx2; + int16_t lfe_idx1, lfe_idx2; + float *ptrCy; + float *ptrCy_out; + + ptrCy = cy; + ptrCy_out = cy_woLFE; + + for ( lfe_idx1 = 0; lfe_idx1 < num_lfe + 1; lfe_idx1++ ) + { + for ( ch_idx1 = lfe_indices[lfe_idx1] + 1; ch_idx1 < lfe_indices[lfe_idx1 + 1]; ch_idx1++ ) + { + for ( lfe_idx2 = 0; lfe_idx2 < num_lfe + 1; lfe_idx2++ ) + { + for ( ch_idx2 = lfe_indices[lfe_idx2] + 1; ch_idx2 < lfe_indices[lfe_idx2 + 1]; ch_idx2++ ) + { + *( ptrCy_out++ ) = *( ptrCy++ ); + } + ptrCy++; + } + ptrCy--; + } + ptrCy += nY; + } + return; +} + +/*------------------------------------------------------------------------- + * ivas_param_mc_get_mixing_matrices() + * + * calculate the direct and residual mixing matrices + * using the covariance method + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_get_mixing_matrices( + PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ + IVAS_OUTPUT_SETUP *hSynthesisOutputSetup, + float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* i : input covariance for all parameter bands */ + float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : direct mixing matrices for all parameter bands */ + float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], /* o : residual mixing matrices for all parameter bands */ + const int16_t nY_intern, /* i : number of channels in the transported format */ + const PARAM_MC_SYNTHESIS_CONF synth_config, /* i : Parametric MC synthesis config */ + const int16_t nX, /* i : number of transport channels */ + const int16_t nY_cov /* i : number of covariance synthesis output channels */ +) +{ + int16_t param_band_idx; + float Cx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float Cy[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float Cy_diag[MAX_CICP_CHANNELS]; + float Cr[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float Cproto_diag[MAX_CICP_CHANNELS]; + float Cproto[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float mat_mult_buffer1[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float *Cx_state; + float *Cx_old_state; + float Cy_state[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float *Cy_old_state; + int16_t nY_band; + float proto_matrix_noLFE[PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS]; + float *proto_matrix_ptr; + int16_t num_lfe_bands; + int16_t brange[2]; + uint16_t i; + int16_t ch_idx1, ch_idx2, lfe_idx1, lfe_idx2; + float *ptrMM; + float *ptrMM_out; + float Cy_full[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float mixing_matrix_local[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float mixing_matrix_res_local[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + int16_t remove_lfe; + int16_t lfe_indices[PARAM_MC_LOCAL_SZ_LFE_MAP]; + + set_zero( Cproto, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + set_zero( mat_mult_buffer1, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + set_zero( proto_matrix_noLFE, PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS ); + + nY_band = nY_cov; + num_lfe_bands = 0; + remove_lfe = 0; + + set_s( lfe_indices, -1, PARAM_MC_LOCAL_SZ_LFE_MAP ); + if ( hSynthesisOutputSetup->num_lfe ) + { + float *proto_matrix_ptr_in; +#ifdef DEBUGGING + assert( ( nY_cov == ( hSynthesisOutputSetup->nchan_out_woLFE + hSynthesisOutputSetup->num_lfe ) ) && "Number of channels do not match!" ); +#endif + for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe; lfe_idx1++ ) + { + lfe_indices[lfe_idx1 + 1] = hSynthesisOutputSetup->index_lfe[lfe_idx1]; + } + lfe_indices[hSynthesisOutputSetup->num_lfe + 1] = nY_cov; + proto_matrix_ptr = &proto_matrix_noLFE[0]; + proto_matrix_ptr_in = &hParamMC->h_output_synthesis_params.proto_matrix[0]; + set_zero( proto_matrix_noLFE, PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS ); + + for ( ch_idx1 = 0; ch_idx1 < nX; ch_idx1++ ) + { + for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx1++ ) + { + for ( ch_idx2 = lfe_indices[lfe_idx1] + 1; ch_idx2 < lfe_indices[lfe_idx1 + 1]; ch_idx2++ ) + { + *( proto_matrix_ptr++ ) = *( proto_matrix_ptr_in++ ); + } + proto_matrix_ptr_in++; + } + proto_matrix_ptr_in--; + } + } + + if ( hParamMC->hMetadataPMC->lfe_on ) + { + num_lfe_bands = PARAM_MC_MAX_BAND_LFE; + } + + for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) + { + if ( hSynthesisOutputSetup->num_lfe > 0 && param_band_idx >= num_lfe_bands ) + { + remove_lfe = 1; + nY_band = nY_cov - hSynthesisOutputSetup->num_lfe; + proto_matrix_ptr = proto_matrix_noLFE; + } + else + { + proto_matrix_ptr = hParamMC->h_output_synthesis_params.proto_matrix; + } + + brange[0] = hParamMC->band_grouping[param_band_idx]; + brange[1] = hParamMC->band_grouping[param_band_idx + 1]; + + Cx_state = Cx_in[param_band_idx]; + Cx_old_state = hParamMC->h_output_synthesis_cov_state.cx_old[param_band_idx]; + Cy_old_state = hParamMC->h_output_synthesis_cov_state.cy_old[param_band_idx]; + + /* Getting mixing mtx */ + /* estimate target cov from input cov and proto_matrix */ + matrix_product( hParamMC->proto_matrix_int, nY_intern, nX, 0, Cx_state, nX, nX, 0, mat_mult_buffer1 ); + + matrix_product( mat_mult_buffer1, nY_intern, nX, 0, hParamMC->proto_matrix_int, nY_intern, nX, 1, Cproto ); + + ivas_param_mc_dequantize_cov( hParamMC, + hParamMC->icld_q + param_band_idx * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe, + hParamMC->icc_q + param_band_idx * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe, + param_band_idx, nY_cov, + synth_config, + nY_intern, + nX, Cx_state, Cproto, Cy_state ); + + /* Smoothing: Sum over two buffers */ + if ( hParamMC->hMetadataPMC->bAttackPresent ) + { + /* no smoothing on attacks */ + mvr2r( Cx_state, Cx, nX * nX ); + mvr2r( Cy_state, Cy_full, nY_cov * nY_cov ); + } + else + { + /* smoothing gains are now identical to one, simply add up */ + v_add( Cx_state, Cx_old_state, Cx, nX * nX ); + v_add( Cy_state, Cy_old_state, Cy_full, nY_cov * nY_cov ); + } + + /* cov buffer update */ + mvr2r( Cx_state, Cx_old_state, nX * nX ); + mvr2r( Cy_state, Cy_old_state, nY_cov * nY_cov ); + + /* remove LFE if necessary */ + if ( remove_lfe ) + { + remove_lfe_from_cy( nY_cov, lfe_indices, hSynthesisOutputSetup->num_lfe, Cy_full, Cy ); + } + else + { + mvr2r( Cy_full, Cy, nY_band * nY_band ); + } + + matrix_product( proto_matrix_ptr, nY_band, nX, 0, Cx, nX, nX, 0, mat_mult_buffer1 ); + + matrix_product_diag( mat_mult_buffer1, nY_band, nX, 0, proto_matrix_ptr, nY_band, nX, 1, Cproto_diag ); + + /* Computing the mixing matrices */ + + /* bands with decorr */ + if ( brange[0] < hParamMC->h_output_synthesis_params.max_band_decorr ) + { + computeMixingMatrices( nX, nY_band, Cx, Cy, proto_matrix_ptr, 0, PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix_local, Cr ); + + /* Compute mixing matrix for residual */ + computeMixingMatricesResidual( nY_band, Cproto_diag, Cr, PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix_res_local ); + + if ( remove_lfe ) + { + set_zero( mixing_matrix_res[param_band_idx], nY_cov * nY_cov ); + + ptrMM = mixing_matrix_res_local; + ptrMM_out = mixing_matrix_res[param_band_idx]; + for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx1++ ) + { + for ( ch_idx1 = lfe_indices[lfe_idx1] + 1; ch_idx1 < lfe_indices[lfe_idx1 + 1]; ch_idx1++ ) + { + for ( lfe_idx2 = 0; lfe_idx2 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx2++ ) + { + for ( ch_idx2 = lfe_indices[lfe_idx2] + 1; ch_idx2 < lfe_indices[lfe_idx2 + 1]; ch_idx2++ ) + { + *( ptrMM_out++ ) = *( ptrMM++ ); + } + ptrMM_out++; + } + ptrMM_out--; + } + ptrMM_out += nY_cov; + } + } + else + { + mvr2r( mixing_matrix_res_local, mixing_matrix_res[param_band_idx], nY_cov * nY_cov ); + } + } + else if ( brange[0] < hParamMC->max_band_energy_compensation ) + { + /* Compute mixing matrices (energy compensation only) */ + computeMixingMatrices( nX, nY_band, Cx, Cy, proto_matrix_ptr, 1, PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix_local, Cr ); + } + else + { + /*if neither decorrelation nor energy compensation is applied*/ + for ( i = 0; i < nY_band; i++ ) + { + Cy_diag[i] = Cy[i + nY_band * i]; + Cy_diag[i] = sqrtf( Cy_diag[i] / ( Cproto_diag[i] + EPSILON ) ); + } + + diag_matrix_product( Cy_diag, nY_band, proto_matrix_ptr, nY_band, nX, 0, mixing_matrix_local ); + } + if ( remove_lfe ) + { + set_zero( mixing_matrix[param_band_idx], nX * nY_cov ); + + ptrMM = mixing_matrix_local; + ptrMM_out = mixing_matrix[param_band_idx]; + for ( ch_idx1 = 0; ch_idx1 < nX; ch_idx1++ ) + { + for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx1++ ) + { + for ( ch_idx2 = lfe_indices[lfe_idx1] + 1; ch_idx2 < lfe_indices[lfe_idx1 + 1]; ch_idx2++ ) + { + *( ptrMM_out++ ) = *( ptrMM++ ); + } + ptrMM_out++; + } + ptrMM_out--; + } + } + else + { + mvr2r( mixing_matrix_local, mixing_matrix[param_band_idx], nY_cov * nX ); + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_get_mono_stereo_mixing_matrices() + * + * calculate the direct and residual mixing matrices + * for mono and stereo output + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_get_mono_stereo_mixing_matrices( + PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ + float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* i : transport channel covariance for all parameter bands */ + float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : direct mixing matrix */ + float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], /* o : residual mixing matrix (set to zero) */ + const int16_t nY_intern, /* i : number of channels of the transport format */ + const int16_t nX, /* i : number of transport channels */ + const int16_t nY_cov ) /* i : number of output channels */ +{ + int16_t param_band_idx; + float Cx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float Cy_diag[MAX_CICP_CHANNELS]; + float Cproto_diag[MAX_CICP_CHANNELS]; + float Cproto[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float mat_mult_buffer1[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float *Cx_state; + float *Cx_old_state; + float Cy_state[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float *Cy_old_state; + int16_t nY_band; + float proto_matrix[PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS]; + uint16_t i; + + set_zero( Cproto, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + set_zero( mat_mult_buffer1, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + set_zero( proto_matrix, PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS ); + + mvr2r( hParamMC->h_output_synthesis_params.proto_matrix, proto_matrix, nY_cov * nX ); + nY_band = nY_cov; + + for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) + { + float Cy_full[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float mixing_matrix_woLFE[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float Nrqq[MAX_OUTPUT_CHANNELS]; + float target_ch_ener[MAX_OUTPUT_CHANNELS]; + int16_t k, l; + float *ild_q; + + Cx_state = Cx_in[param_band_idx]; + Cx_old_state = hParamMC->h_output_synthesis_cov_state.cx_old[param_band_idx]; + Cy_old_state = hParamMC->h_output_synthesis_cov_state.cy_old[param_band_idx]; + set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); + set_zero( target_ch_ener, MAX_OUTPUT_CHANNELS ); + set_zero( Cy_full, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + set_zero( Cy_state, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + set_zero( Cproto_diag, MAX_CICP_CHANNELS ); + ild_q = hParamMC->icld_q + param_band_idx * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; + + /*get back Nrg*/ + for ( k = 0; k < nY_intern; k++ ) + { + float ref_ener = 0.0f; + int16_t ref_channel_cnt; + int16_t ref_channel_idx; + + for ( ref_channel_cnt = 0; ref_channel_cnt < hParamMC->hMetadataPMC->ild_mapping_conf->num_ref_channels[k]; ref_channel_cnt++ ) + { + ref_channel_idx = hParamMC->hMetadataPMC->ild_mapping_conf->ref_channel_idx[k][ref_channel_cnt]; + ref_ener += Cx_state[ref_channel_idx + ref_channel_idx * nX]; + } + Nrqq[hParamMC->hMetadataPMC->ild_mapping_conf->ild_index[k]] = powf( 10.0f, ild_q[k] / 10.0f ) * hParamMC->hMetadataPMC->ild_factors[k] * ref_ener; + } + for ( k = 0; k < nY_cov; k++ ) + { + for ( l = 0; l < nY_intern; l++ ) + { + target_ch_ener[k] += hParamMC->ls_conv_dmx_matrix[k + l * nY_cov] * Nrqq[l]; + } + Cy_state[k + nY_cov * k] = target_ch_ener[k]; + } + + /* Smoothing: Sum over two buffers */ + if ( hParamMC->hMetadataPMC->bAttackPresent ) + { + /* no smoothing on attacks */ + mvr2r( Cx_state, Cx, nX * nX ); + mvr2r( Cy_state, Cy_full, nY_cov * nY_cov ); + } + else + { + /* smoothing gains are now identical to one, simply add up */ + v_add( Cx_state, Cx_old_state, Cx, nX * nX ); + v_add( Cy_state, Cy_old_state, Cy_full, nY_cov * nY_cov ); + } + + /* cov buffer update */ + mvr2r( Cx_state, Cx_old_state, nX * nX ); + mvr2r( Cy_state, Cy_old_state, nY_cov * nY_cov ); + + + matrix_product( proto_matrix, nY_band, nX, 0, Cx, nX, nX, 0, mat_mult_buffer1 ); + + matrix_product_diag( mat_mult_buffer1, nY_band, nX, 0, proto_matrix, nY_band, nX, 1, Cproto_diag ); + + /* Computing the mixing matrices */ + for ( i = 0; i < nY_band; i++ ) + { + Cy_diag[i] = Cy_full[i + nY_band * i]; + Cy_diag[i] = sqrtf( Cy_diag[i] / ( Cproto_diag[i] + EPSILON ) ); + } + + diag_matrix_product( Cy_diag, nY_band, proto_matrix, nY_band, nX, 0, mixing_matrix_woLFE ); + + mvr2r( mixing_matrix_woLFE, mixing_matrix[param_band_idx], nY_cov * nX ); + if ( hParamMC->band_grouping[param_band_idx] < hParamMC->h_output_synthesis_params.max_band_decorr ) + { + set_zero( mixing_matrix_res[param_band_idx], nY_cov * nY_cov ); + } + } + + return; +} + +/*------------------------------------------------------------------------- + * param_mc_update_mixing_matrices() + * + * update mixing matrix buffers + *------------------------------------------------------------------------*/ + +static void param_mc_update_mixing_matrices( + PARAM_MC_DEC_HANDLE hParamMC, /* i/o: Parametric MC handle */ + float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS], /* i : direct mixing matrices for the frame just processed */ + float mixing_matrix_res[PARAM_MC_MAX_PARAMETER_BANDS_RES][MAX_CICP_CHANNELS * MAX_CICP_CHANNELS], /* i : residual mixing matrices for the frame just processed */ + const uint16_t nX, /* i : number of transport channels */ + const uint16_t nY ) /* i : number of synthesis channels */ +{ + uint16_t param_band_idx; + + for ( param_band_idx = 0; param_band_idx < hParamMC->hMetadataPMC->nbands_coded; param_band_idx++ ) + { + /* final mixing */ + int16_t brange[2]; + + brange[0] = hParamMC->band_grouping[param_band_idx]; + brange[1] = hParamMC->band_grouping[param_band_idx + 1]; + + mvr2r( mixing_matrix[param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old[param_band_idx], nX * nY ); + + if ( brange[0] < hParamMC->h_output_synthesis_params.max_band_decorr ) + { + mvr2r( mixing_matrix_res[param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old[param_band_idx], nY * nY ); + } + } + + return; +} + +/*------------------------------------------------------------------------- + * ivas_param_mc_dequantize_cov() + * + * generate the target covariance matrix + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_dequantize_cov( + PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ + float *ild_q, /* i : sequence of dequantized ILD values */ + float *icc_q, /* i : sequence of dequantized ICC values */ + const int16_t param_band_index, /* i : current parameter band */ + const int16_t nY_cov, /* i : number of output channels in the covariance synthesis */ + const PARAM_MC_SYNTHESIS_CONF synth_conf, /* i : Parametric MC synthesis configuration */ + const int16_t nY_int, /* i : number of channels in the transported format */ + const int16_t nX, /* i : number of transport channels */ + float *Cx_state, /* i : transport channel covariance matrix */ + float *Cproto, /* i : prototype matrix */ + float *Cy_state /* o : target covariance matrix */ +) +{ + float Nrqq[MAX_OUTPUT_CHANNELS]; + float a[MAX_OUTPUT_CHANNELS]; + int16_t k; + int16_t l; + float *Cyp; + float ap; + int16_t param_frame_idx; + const PARAM_MC_ILD_MAPPING *h_ild_mapping; + float Cy_state_int[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + + param_frame_idx = hParamMC->hMetadataPMC->param_frame_idx; + set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); + h_ild_mapping = hParamMC->hMetadataPMC->ild_mapping_conf; + + /*get back Nrg*/ + for ( k = 0; k < nY_int; k++ ) + { + float ref_ener = 0.0f; + int16_t ref_channel_cnt; + int16_t ref_channel_idx; + + for ( ref_channel_cnt = 0; ref_channel_cnt < h_ild_mapping->num_ref_channels[k]; ref_channel_cnt++ ) + { + ref_channel_idx = h_ild_mapping->ref_channel_idx[k][ref_channel_cnt]; + ref_ener += Cx_state[ref_channel_idx + ref_channel_idx * nX]; + } + Nrqq[h_ild_mapping->ild_index[k]] = powf( 10.0f, ild_q[k] / 10.0f ) * hParamMC->hMetadataPMC->ild_factors[k] * ref_ener; + } + + /* estimate ICCs from estimated Cproto */ + for ( k = 0; k < nY_int; k++ ) + { + a[k] = 1.f / ( sqrtf( Cproto[k + nY_int * k] ) + EPSILON ); + + v_multc( Cproto + k * nY_int, a[k], Cy_state_int + k * nY_int, nY_int ); + } + + for ( k = 0; k < nY_int; k++ ) + { + Cyp = Cy_state_int + k; + ap = a[k]; + for ( l = 0; l < nY_int; l++ ) + { + ( *Cyp ) *= ap; + Cyp += nY_int; + } + } + + /* replace some estimated ICCs with transmitted values */ + for ( k = 0; k < hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe; k++ ) + { + Cy_state_int[hParamMC->hMetadataPMC->icc_mapping[param_frame_idx][k][0] + nY_int * hParamMC->hMetadataPMC->icc_mapping[param_frame_idx][k][1]] = icc_q[k]; + Cy_state_int[hParamMC->hMetadataPMC->icc_mapping[param_frame_idx][k][1] + nY_int * hParamMC->hMetadataPMC->icc_mapping[param_frame_idx][k][0]] = icc_q[k]; + } + + if ( param_band_index >= PARAM_MC_MAX_BAND_LFE || !hParamMC->hMetadataPMC->lfe_on ) + { + for ( k = 0; k < nY_int; k++ ) + { + Cy_state_int[k + 3 * nY_int] = 1.0f; + Cy_state_int[3 + k * nY_int] = 1.0f; + } + Nrqq[3] = 0.0f; + } + + /* Generate back Covariance Mtx */ + for ( k = 0; k < nY_int; k++ ) + { + a[k] = sqrtf( Nrqq[k] ); + v_multc( Cy_state_int + k * nY_int, a[k], Cy_state_int + k * nY_int, nY_int ); + } + + for ( k = 0; k < nY_int; k++ ) + { + Cyp = Cy_state_int + k; + ap = a[k]; + + for ( l = 0; l < nY_int; l++ ) + { + ( *Cyp ) *= ap; + Cyp += nY_int; + } + } + + if ( synth_conf == PARAM_MC_SYNTH_LS_CONV_COV ) + { + /* Cy = dmx*Cy*dmx' */ + float mat_mult_buffer1[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float target_ch_ener[MAX_CICP_CHANNELS]; + float dmx_ch_ener[MAX_CICP_CHANNELS]; + + set_zero( target_ch_ener, MAX_CICP_CHANNELS ); + set_zero( dmx_ch_ener, MAX_CICP_CHANNELS ); + + matrix_product( hParamMC->ls_conv_dmx_matrix, nY_cov, nY_int, 0, + Cy_state_int, nY_int, nY_int, 0, + mat_mult_buffer1 ); + + matrix_product( mat_mult_buffer1, nY_cov, nY_int, 0, + hParamMC->ls_conv_dmx_matrix, nY_cov, nY_int, 1, + Cy_state ); + + for ( k = 0; k < nY_cov; k++ ) + { + for ( l = 0; l < nY_int; l++ ) + { + target_ch_ener[k] += hParamMC->ls_conv_dmx_matrix[k + l * nY_cov] * Nrqq[l]; + } + + dmx_ch_ener[k] = Cy_state[k + nY_cov * k]; + + if ( dmx_ch_ener[k] < 0.0f ) + { + Cy_state[k + nY_cov * k] *= -1.0f; + dmx_ch_ener[k] *= -1.0f; + } + + target_ch_ener[k] = sqrtf( target_ch_ener[k] / ( dmx_ch_ener[k] + EPSILON ) ); + + v_multc( Cy_state + k * nY_cov, target_ch_ener[k], Cy_state + k * nY_cov, nY_cov ); + + Cyp = Cy_state + k; + ap = target_ch_ener[k]; + for ( l = 0; l < nY_cov; l++ ) + { + ( *Cyp ) *= ap; + Cyp += nY_cov; + } + } + } + else + { + mvr2r( Cy_state_int, Cy_state, nY_int * nY_int ); + } + + return; +} + + +/*-------------------------------------------------------------------------* + * param_mc_set_num_synth_bands() + * + * set the number of frequency bands to be synthesized + *-------------------------------------------------------------------------*/ + +static void param_mc_set_num_synth_bands( + const int32_t output_Fs, /* i : output sampling frequency */ + PARAM_MC_DEC_HANDLE hParamMC /* i/o: Parametric MC handle */ +) +{ + uint16_t max_param_band_synth; + const int16_t *param_mc_bands_coded; + + switch ( hParamMC->hMetadataPMC->num_parameter_bands ) + { + case 20: + param_mc_bands_coded = param_mc_bands_coded_20; + break; + case 10: + param_mc_bands_coded = param_mc_bands_coded_10; + break; + case 14: + default: + param_mc_bands_coded = param_mc_bands_coded_14; + break; + } + + switch ( output_Fs ) + { + case 8000: + max_param_band_synth = param_mc_bands_coded[NB]; + break; + case 16000: + max_param_band_synth = param_mc_bands_coded[WB]; + break; + case 32000: + max_param_band_synth = param_mc_bands_coded[SWB]; + break; + case 48000: + default: + max_param_band_synth = param_mc_bands_coded[FB]; + break; + } + + hParamMC->num_param_bands_synth = min( hParamMC->hMetadataPMC->nbands_coded, max_param_band_synth ); + + return; +} + +/*-------------------------------------------------------------------------* + * param_mc_get_diff_proto_info() + * + * calculated the diffuse prototype information + *-------------------------------------------------------------------------*/ + +static void param_mc_get_diff_proto_info( + const float *proto_mtx, /* i : protoype matrix for the synthesis */ + const uint16_t nchan_transport, /* i : number of transport channels */ + const uint16_t nchan_out_cov, /* i : number if output channels of the covariance synthesis */ + PARAM_MC_DIFF_PROTO_INFO *p_diff_proto_info /* o : generated diffuse prototype info */ +) +{ + float proto_fac[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; + uint16_t cur_out_ch; + uint16_t cur_diff_proto; + uint16_t cur_transport_ch; + uint16_t max_num_src_chan; + + /* Initializations */ + max_num_src_chan = 0; + set_zero( proto_fac, MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS ); + p_diff_proto_info->proto_index_diff = (int16_t *) count_malloc( nchan_out_cov * sizeof( int16_t ) ); + set_s( p_diff_proto_info->proto_index_diff, 0, nchan_out_cov ); + p_diff_proto_info->num_source_chan_diff = (int16_t *) count_malloc( nchan_out_cov * sizeof( int16_t ) ); + set_s( p_diff_proto_info->num_source_chan_diff, 0, nchan_out_cov ); + + /* we have at least one prototype, copy the first one */ + p_diff_proto_info->num_protos_diff = 1; + mvr2r_inc( proto_mtx, nchan_out_cov, proto_fac, nchan_out_cov, nchan_transport ); + p_diff_proto_info->proto_index_diff[0] = 0; + + /* search for distinct prototypes */ + for ( cur_out_ch = 1; cur_out_ch < nchan_out_cov; cur_out_ch++ ) + { + uint16_t found = 0; + + for ( cur_diff_proto = 0; cur_diff_proto < p_diff_proto_info->num_protos_diff; cur_diff_proto++ ) + { + float diff = 0; + float *proto_fac_ptr = proto_fac + cur_diff_proto; + const float *proto_mtx_ptr = proto_mtx + cur_out_ch; + + for ( cur_transport_ch = 0; cur_transport_ch < nchan_transport; cur_transport_ch++ ) + { + diff += fabsf( *proto_fac_ptr - *proto_mtx_ptr ); + proto_fac_ptr += nchan_out_cov; + proto_mtx_ptr += nchan_out_cov; + } + + /* we already have this prototype, save the index */ + if ( diff < 0.1f ) + { + found = 1; + p_diff_proto_info->proto_index_diff[cur_out_ch] = cur_diff_proto; + break; + } + } + + /* new distinct prototype, add it */ + if ( found == 0 ) + { + const float *proto_mtx_ptr = proto_mtx + cur_out_ch; + int16_t cur_num_src_chan; + + cur_num_src_chan = 0; + for ( cur_transport_ch = 0; cur_transport_ch < nchan_transport; cur_transport_ch++ ) + { + if ( *proto_mtx_ptr > EPSILON ) + { + cur_num_src_chan++; + } + proto_mtx_ptr += nchan_out_cov; + } + + mvr2r_inc( proto_mtx + cur_out_ch, nchan_out_cov, proto_fac + p_diff_proto_info->num_protos_diff, nchan_out_cov, nchan_transport ); + + p_diff_proto_info->proto_index_diff[cur_out_ch] = p_diff_proto_info->num_protos_diff; + p_diff_proto_info->num_protos_diff++; + max_num_src_chan = max( max_num_src_chan, cur_num_src_chan ); + } + } + + + /* set up the prototype info struct */ + p_diff_proto_info->source_chan_idx = (int16_t **) count_malloc( p_diff_proto_info->num_protos_diff * sizeof( int16_t * ) ); + p_diff_proto_info->proto_fac = (float **) count_malloc( p_diff_proto_info->num_protos_diff * sizeof( float * ) ); + + for ( cur_diff_proto = 0; cur_diff_proto < p_diff_proto_info->num_protos_diff; cur_diff_proto++ ) + { + float *proto_fac_ptr; + + p_diff_proto_info->source_chan_idx[cur_diff_proto] = (int16_t *) count_malloc( max_num_src_chan * sizeof( int16_t ) ); + p_diff_proto_info->proto_fac[cur_diff_proto] = (float *) count_malloc( max_num_src_chan * sizeof( float ) ); + + proto_fac_ptr = proto_fac + cur_diff_proto; + for ( cur_transport_ch = 0; cur_transport_ch < nchan_transport; cur_transport_ch++ ) + { + if ( *proto_fac_ptr > EPSILON ) + { + p_diff_proto_info->source_chan_idx[cur_diff_proto][p_diff_proto_info->num_source_chan_diff[cur_diff_proto]] = cur_transport_ch; + p_diff_proto_info->proto_fac[cur_diff_proto][p_diff_proto_info->num_source_chan_diff[cur_diff_proto]] = *proto_fac_ptr; + p_diff_proto_info->num_source_chan_diff[cur_diff_proto]++; + } + proto_fac_ptr += nchan_out_cov; + } + } + + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_mc_mc2sba_cldfb() + * + * MC signals transformed into SBA in CLDFB domain + * used for binaural rendering with head rotation + *-------------------------------------------------------------------------*/ + +static void ivas_param_mc_mc2sba_cldfb( + IVAS_OUTPUT_SETUP hTransSetup, /* i : transported MC Format */ + float *hoa_encoder, /* i : HOA3 encoder for the transported MC format */ + const int16_t slot_idx, /* i : current slot in the subframe */ + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: Contains the MC signals (on input) and the HOA3 (on output) */ + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: Contains the MC signals (on input) and the HOA3 (on output) */ + const int16_t nBands, /* i : number of synth CLDFB bands */ + const float gain_lfe /* i : gain applied to LFE */ +) +{ + int16_t idx_ch, idx_band; + int16_t idx_lfe, idx_in, idx_out; + float Cldfb_RealBuffer_tmp[MAX_INTERN_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_tmp[MAX_INTERN_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float *gains; + int16_t sba_num_chans; + + /* Init*/ + sba_num_chans = MAX_INTERN_CHANNELS; + + for ( idx_ch = 0; idx_ch < sba_num_chans; idx_ch++ ) + { + set_zero( Cldfb_RealBuffer_tmp[idx_ch], CLDFB_NO_CHANNELS_MAX ); + set_zero( Cldfb_ImagBuffer_tmp[idx_ch], CLDFB_NO_CHANNELS_MAX ); + } + + idx_lfe = 0; + idx_in = 0; + for ( idx_ch = 0; idx_ch < hTransSetup.nchan_out_woLFE + hTransSetup.num_lfe; idx_ch++ ) + { + if ( ( hTransSetup.num_lfe > 0 ) && ( idx_ch == hTransSetup.index_lfe[idx_lfe] ) ) + { + if ( gain_lfe > 0.f ) + { + /* Add LFE to Omni Channel i.e. W (Just first Band) */ + Cldfb_RealBuffer_tmp[0][0] += gain_lfe * Cldfb_RealBuffer[idx_ch][slot_idx][0]; + Cldfb_ImagBuffer_tmp[0][0] += gain_lfe * Cldfb_ImagBuffer[idx_ch][slot_idx][0]; + } + if ( idx_lfe < ( hTransSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else + { + gains = hoa_encoder + idx_in * sba_num_chans; + for ( idx_out = 0; idx_out < sba_num_chans; idx_out++ ) + { + for ( idx_band = 0; idx_band < nBands; idx_band++ ) + { + Cldfb_RealBuffer_tmp[idx_out][idx_band] += ( *gains ) * Cldfb_RealBuffer[idx_ch][slot_idx][idx_band]; + Cldfb_ImagBuffer_tmp[idx_out][idx_band] += ( *gains ) * Cldfb_ImagBuffer[idx_ch][slot_idx][idx_band]; + } + gains++; + } + idx_in++; + } + } + + for ( idx_ch = 0; idx_ch < sba_num_chans; idx_ch++ ) + { + mvr2r( Cldfb_RealBuffer_tmp[idx_ch], Cldfb_RealBuffer[idx_ch][slot_idx], nBands ); + mvr2r( Cldfb_ImagBuffer_tmp[idx_ch], Cldfb_ImagBuffer[idx_ch][slot_idx], nBands ); + } + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_mc_bs_decode_parameter_values() + * + * reads and decodes a sequence of Parametric MC parameters from the bitstream + *-------------------------------------------------------------------------*/ + +void ivas_param_mc_bs_decode_parameter_values( + uint16_t bit_buffer[], /* i : bitstream buffer */ + int16_t *bit_pos, /* i/o: current bitstream buffer position */ + const int16_t max_bits, /* i : maximum available bits in the buffer */ + int16_t *BER_detect, /* i/o: bit error detection flag */ + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, /* i : Parametric MC metadata information */ + HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParamCodingInfo, /* i : Parametric MC parameter quantization and coding tables */ + const int16_t map_size_wo_lfe, /* i : number of parameters per band (w/o LFEs) */ + const int16_t map_size, /* i : number of parameters per band (total) */ + const int16_t num_lfe_bands, /* i : number of parameter bands with coded LFE */ + const int16_t band_step, /* i : parameter band step */ + const int16_t num_param_bands, /* i : number of parameter bands to decode */ + float *value_buffer /* o : output buffer for decoded parameter values */ +) +{ + int16_t range_coding; + int16_t sz_seq; + int16_t delta_coding; + int16_t delta_idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; + int16_t idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; + int16_t idx_prev; + int16_t idx_offset; + int16_t sz_alphabet; + int16_t i, j, k; + float dequant_seq[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; + float dequant_ordered[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; + + range_coding = bit_buffer[( *bit_pos )++]; + + /* Decoding the sequence */ + sz_seq = num_param_bands * ( map_size_wo_lfe ) + num_lfe_bands; + + set_s( idx, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); + set_zero( dequant_ordered, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); + set_zero( dequant_seq, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); + + if ( range_coding ) + { + delta_coding = bit_buffer[( *bit_pos )++]; + + if ( delta_coding ) + { + idx_prev = hParamCodingInfo->quantizer_size / 2 + hParamCodingInfo->quantizer_size % 2 - 1; + sz_alphabet = 2 * hParamCodingInfo->quantizer_size - 1; + idx_offset = hParamCodingInfo->quantizer_size - 1; + + /* read range coded delta ICC indices */ + *bit_pos += ivas_param_mc_range_decoder_LC( &bit_buffer[*bit_pos], delta_idx, BER_detect, sz_seq, sz_alphabet, + hParamCodingInfo->cum_freq_delta, hParamCodingInfo->sym_freq_delta, PARAM_MC_RANGE_CODER_TOT_SHIFT, max_bits - *bit_pos ); + + /* delta index to absolute index */ + for ( j = 0; j < sz_seq; j++ ) + { + idx[j] = idx_prev + delta_idx[j] - idx_offset; + idx_prev = idx[j]; + } + } + else + { + /* read range coded absolute ICC indices */ + sz_alphabet = hParamCodingInfo->quantizer_size; + *bit_pos += ivas_param_mc_range_decoder_LC( &bit_buffer[*bit_pos], idx, BER_detect, sz_seq, sz_alphabet, + hParamCodingInfo->cum_freq, hParamCodingInfo->sym_freq, PARAM_MC_RANGE_CODER_TOT_SHIFT, max_bits - *bit_pos ); + } + + /* dequantize */ + for ( j = 0; j < sz_seq; j++ ) + { + dequant_seq[j] = hParamCodingInfo->quantizer[idx[j]]; + } + } + else + { + set_zero( dequant_seq, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); + + /* read uniformly coded ICCs */ + *bit_pos += ivas_param_mc_uniform_decoder( dequant_seq, sz_seq, hParamCodingInfo->quantizer, hParamCodingInfo->uni_bits, &bit_buffer[*bit_pos] ); + } + + /* reorder from sequential to parameter-band-wise */ + k = 0; + for ( j = 0; j < map_size_wo_lfe; ++j ) + { + for ( i = 0; i < num_param_bands; ++i ) + { + dequant_ordered[j + i * map_size] = dequant_seq[k++]; + } + } + + for ( i = 0; i < num_lfe_bands; i++ ) + { + dequant_ordered[map_size - 1 + i * map_size] = dequant_seq[k++]; + } + + if ( !( *BER_detect ) ) + { + j = 0; + for ( k = 0; k < hMetadataPMC->nbands_coded; k += band_step ) + { + if ( hMetadataPMC->bAttackPresent || hMetadataPMC->param_frame_idx == hMetadataPMC->coding_band_mapping[k] ) + { + mvr2r( dequant_ordered + j * map_size, value_buffer + k * map_size, map_size ); + j++; + } + if ( hMetadataPMC->bAttackPresent && k + 1 < hMetadataPMC->nbands_coded ) + { + mvr2r( value_buffer + k * map_size, value_buffer + ( k + 1 ) * map_size, map_size ); + } + } + } + + return; +} diff --git a/lib_dec/ivas_mct_core_dec.c b/lib_dec/ivas_mct_core_dec.c new file mode 100644 index 0000000000..d7459efabd --- /dev/null +++ b/lib_dec/ivas_mct_core_dec.c @@ -0,0 +1,275 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "prot.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "cnst.h" +#include "basop_proto_func.h" +#include "stat_com.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_stat_com.h" + + +/*-----------------------------------------------------------------* + * ivas_mct_side_bits() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * Read mct related side bits and distribute bits per channel * + *-----------------------------------------------------------------*/ + +void ivas_mct_side_bits( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ + const int16_t nCPE, /* i : number of CPEs */ + Decoder_State *st0, /* i : decoder handle for Bstr */ + const int16_t bfi, /* i : BFI flag */ + uint16_t *bitstream, /* o : bitstream indices */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + int16_t ch, cpe_id, nChannels, i, k, nSubframes; + int16_t nf_side_bits, availableBits, next_bit_pos, nf_bits; + int16_t chBitRatios[MCT_MAX_CHANNELS]; + Decoder_State *st, *sts[MCT_MAX_CHANNELS]; + + nf_side_bits = 0; + nChannels = hMCT->nchan_out_woLFE + hMCT->num_lfe; + + /*initializations */ + for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[i] = hCPE[cpe_id]->hCoreCoder[ch]; + i++; + } + } + + /*first read IFG bits */ + if ( !bfi && st0->igf ) + { + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE || st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + + mdct_read_IGF_bits( st, st0 ); + } + } + + /*read MCT data and calculate frame bits per channel */ + for ( ch = 0; ch < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); ch++ ) + { + initMdctStereoDecData( hMCT->hBlockData[ch]->hStereoMdct, st0->igf, st0->hIGFDec->igfData.igfInfo.grid, hCPE[0]->element_brate, st0->bwidth ); + } + + if ( !bfi ) + { + availableBits = 0; + + ivas_mct_dec_mct( hMCT, sts, nChannels ); + /* availableBits = ((hMCT->mc_bitrate/50) - sts[0]->next_bit_pos); + availableBits -= NBBITS_MCT_RATIO * nChannels;*/ + + /*read channel bitrate ratios from bitstream*/ + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && hMCT->LFE_off ) || st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + chBitRatios[ch] = 0; + st->bits_frame_channel = 0; + continue; + } + chBitRatios[ch] = get_next_indice( sts[0], NBBITS_MCT_RATIO ); + + nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; + + for ( k = 0; k < nSubframes; k++ ) + { + nf_side_bits += ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); + } + } + + availableBits = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - sts[0]->next_bit_pos - nf_side_bits ); + availableBits -= nb_bits_metadata; + + splitAvailableBitsMCT( (void **) sts, availableBits, chBitRatios, DEC, nChannels ); + + next_bit_pos = sts[0]->next_bit_pos; + for ( ch = 1; ch < nChannels; ch++ ) + { + nf_bits = ( sts[ch - 1]->core == TCX_20_CORE ? 1 : NB_DIV ) * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); + + if ( chBitRatios[ch - 1] == 0 ) /* indicates LFE with no content */ + { + nf_bits = 0; + } + next_bit_pos += sts[ch - 1]->bits_frame_channel + nf_bits; + sts[ch]->bit_stream = bitstream + next_bit_pos; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_mct_core_dec() + * + * IVAS MCT core decoder + *--------------------------------------------------------------------*/ + +void ivas_mct_core_dec( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ + const int16_t nCPE, /* i : number of CPEs */ + float signal_out[][L_FRAME48k] /* o : synthesis @internal_FS */ +) +{ + int16_t i, k, ch, cpe_id, nChannels; + Decoder_State *st, *sts[MCT_MAX_CHANNELS]; + float *x[MCT_MAX_CHANNELS][NB_DIV]; + int16_t bfi; + /* Framing */ + int16_t L_frame, L_frameTCX, nSubframes; + /* TCX */ + int16_t tcx_offset; + int16_t tcx_offsetFB; + int16_t left_rect; + int16_t L_spec; +#ifdef DEBUG_MCT + float nrg[MCT_MAX_CHANNELS]; +#endif + + wmops_sub_start( "mct_decoding" ); + + /*--------------------------------------------------------------------------------* + * Initializations + *--------------------------------------------------------------------------------*/ + + nChannels = hMCT->nchan_out_woLFE + hMCT->num_lfe; + + /*initializations */ + for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[i] = hCPE[cpe_id]->hCoreCoder[ch]; + i++; + } + } + + for ( ch = 0, i = 0; ch < nChannels; ch++ ) + { + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + i++; + } + + bfi = sts[0]->bfi; + + for ( ch = 0; ch < nChannels; ch++ ) + { + /* Initialization or re-configuration of Stereo TCX */ + sts[ch]->enablePlcWaveadjust = 0; + x[ch][0] = &signal_out[ch][0]; + x[ch][1] = &signal_out[ch][0] + L_FRAME48k / 2; + } + + /*--------------------------------------------------------------------------------* + * IGF decoding + *--------------------------------------------------------------------------------*/ + + if ( sts[0]->igf ) + { + if ( !hMCT->currBlockDataCnt ) + { + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) /*indicates LFE */ + { + continue; + } + + if ( bfi && st->core == ACELP_CORE ) /*no igf processing needed*/ + { + continue; + } + nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; + + for ( k = 0; k < nSubframes; k++ ) + { + L_spec = st->hTcxCfg->tcx_coded_lines / nSubframes; + + init_tcx_info( st, st->L_frame / nSubframes, st->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset, &tcx_offsetFB, &L_frame, &L_frameTCX, &left_rect, &L_spec ); + + /* mono or dual mono IGF decoding */ + decoder_tcx_IGF_mono( st, x[ch][k], L_frame, left_rect, bfi, k ); + } + } + } + else + { + mctStereoIGF_dec( hMCT, sts, x, bfi ); + } + } + + if ( !bfi ) + { + /*--------------------------------------------------------------------------------* + * MCT processing + *--------------------------------------------------------------------------------*/ + + apply_MCT_dec( hMCT, sts, x ); + } + + wmops_sub_end(); + + return; +} diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c new file mode 100644 index 0000000000..31f3208429 --- /dev/null +++ b/lib_dec/ivas_mct_dec.c @@ -0,0 +1,621 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + +/*--------------------------------------------------------------------------* + * ivas_mct_dec() + * + * Multi-channel Coding Tool (MCT) decoding routine + *--------------------------------------------------------------------------*/ + +ivas_error ivas_mct_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + int16_t n, nCPE, cpe_id; + MCT_DEC_HANDLE hMCT; + CPE_DEC_HANDLE hCPE; + float *x[CPE_CHANNELS][NB_DIV]; + int16_t param[MCT_MAX_BLOCKS][CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV]; + int16_t param_lpc[MCT_MAX_BLOCKS][CPE_CHANNELS][NPRM_LPC_NEW]; + int16_t p_param[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; + int16_t nTnsBitsTCX10[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; + float Aq[MCT_MAX_BLOCKS][CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )]; + int16_t fUseTns[MCT_MAX_BLOCKS][CPE_CHANNELS][2]; /* two entries for each channel in case of TCX 10 */ + STnsData tnsData[MCT_MAX_BLOCKS][CPE_CHANNELS][2]; + Decoder_State **sts; + float synth[CPE_CHANNELS][L_FRAME_PLUS]; + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_mct_dec" ); + + nCPE = st_ivas->nCPE; + hMCT = st_ivas->hMCT; + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT && !st_ivas->bfi ) + { + /* get the number of channels from the signalled MC LS setup */ + n = ivas_mc_ls_setup_get_num_channels( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ) ); + + if ( n != st_ivas->nchan_transport ) + { + /* IVAS_fmToDo: more work needed for switching the number of transport channels */ + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: wrong number of transport channels signalled in MC format!" ); + } + } + + if ( !st_ivas->bfi ) + { + hMCT->LFE_off = 0; /* in case of PLC, stick to LFE_off of previous frame; otherwise, the update happens in ivas_mdct_dec_side_bits_frame_channel() */ + } + + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + /*initialize param_lpc buffer*/ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + set_s( param_lpc[cpe_id][n], 0, NPRM_LPC_NEW ); + } + + if ( ( error = ivas_cpe_dec( st_ivas, cpe_id, output, output_frame, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( cpe_id == 0 ) + { + st_ivas->hCPE[0]->hCoreCoder[0]->total_brate = ivas_total_brate; /* set high enough to read the whole side-info; total_brate is rewritten later in ivas_mdct_core_invQ() */ + } + + if ( !st_ivas->bfi ) + { + ivas_mdct_dec_side_bits_frame_channel( st_ivas->hCPE[cpe_id], param_lpc[cpe_id], p_param[cpe_id], st_ivas->hCPE[0]->hCoreCoder[0], + &hMCT->LFE_off, nTnsBitsTCX10[cpe_id], param[cpe_id], 1, + ( ( cpe_id + 1 ) * CPE_CHANNELS > st_ivas->nchan_transport ) ); + + st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[0]->BER_detect; + st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[1]->BER_detect; + } + } + + /* MCT side bits decoder */ + ivas_mct_side_bits( hMCT, st_ivas->hCPE, nCPE, st_ivas->hCPE[0]->hCoreCoder[0], st_ivas->bfi, st_ivas->hCPE[0]->hCoreCoder[0]->bit_stream, ivas_total_brate, nb_bits_metadata ); + + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[0]->BER_detect |= st_ivas->BER_detect; + st_ivas->hCPE[cpe_id]->hCoreCoder[1]->BER_detect |= st_ivas->BER_detect; + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + x[n][0] = &output[n + cpe_id * CPE_CHANNELS][0]; + x[n][1] = &output[n + cpe_id * CPE_CHANNELS][L_FRAME48k / 2]; + set_zero( x[n][0], L_FRAME48k / 2 ); + set_zero( x[n][1], L_FRAME48k / 2 ); + } + + ivas_mdct_core_invQ( st_ivas->hCPE[cpe_id], hMCT->LFE_off, nTnsBitsTCX10[cpe_id], p_param[cpe_id], param_lpc[cpe_id], param[cpe_id], + fUseTns[cpe_id], tnsData[cpe_id], x, x, Aq[cpe_id], NULL, 1 ); + + st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[0]->BER_detect; + st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[1]->BER_detect; + } + + /* MCT core decoder */ + ivas_mct_core_dec( hMCT, st_ivas->hCPE, nCPE, output ); + + /* MCT reconstruction and CoreCoder updates */ + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + hCPE = st_ivas->hCPE[cpe_id]; + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + x[n][0] = &output[n + cpe_id * CPE_CHANNELS][0]; + x[n][1] = &output[n + cpe_id * CPE_CHANNELS][L_FRAME48k / 2]; + } + + ivas_mdct_core_tns_ns( hCPE, hMCT->LFE_off, fUseTns[cpe_id], tnsData[cpe_id], x, Aq[cpe_id], 1 ); + } + + if ( st_ivas->renderer_type == RENDERER_MC ) + { + /* Equalization in MDCT Domain */ + ivas_ls_setup_conversion_process_mdct( st_ivas, output ); + } + else if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC && ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ) ) + { + float *x_all[MAX_CICP_CHANNELS][NB_DIV]; + + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + x_all[n + cpe_id * CPE_CHANNELS][0] = &output[n + cpe_id * CPE_CHANNELS][0]; + x_all[n + cpe_id * CPE_CHANNELS][1] = &output[n + cpe_id * CPE_CHANNELS][L_FRAME48k / 2]; + } + } + + ivas_ls_setup_conversion_process_mdct_param_mc( st_ivas, x_all ); + } + + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + hCPE = st_ivas->hCPE[cpe_id]; + sts = hCPE->hCoreCoder; + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + x[n][0] = &output[n + cpe_id * CPE_CHANNELS][0]; + x[n][1] = &output[n + cpe_id * CPE_CHANNELS][L_FRAME48k / 2]; + } + + ivas_mdct_core_reconstruct( hCPE, x, synth, hMCT->LFE_off, fUseTns[cpe_id], 1 ); + + /*----------------------------------------------------------------* + * CoreCoder Post-processing and updates + *----------------------------------------------------------------*/ + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( sts[n]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + break; + } + + /* Postprocessing for ACELP/MDCT core switching and synchronization */ + if ( ( error = core_switching_post_dec( sts[n], synth[n], output[cpe_id * CPE_CHANNELS + n], hCPE->output_mem[1], 0, output_frame, 0 /*core_switching_flag*/, 0, -1, hCPE->last_element_mode ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* final output of synthesis signal */ + mvr2r( synth[n], output[cpe_id * CPE_CHANNELS + n], output_frame ); + + /* Save synthesis for HQ FEC */ + save_synthesis_hq_fec( sts[n], output[cpe_id * CPE_CHANNELS + n], output_frame, hCPE ); + + /* CoreCoder common updates */ + updt_dec_common( sts[n], NORMAL_HQ_CORE, -1, output[cpe_id * CPE_CHANNELS + n] ); + +#ifdef DEBUG_PLOT + sendDebout( "mct_synth", output_frame, 1, "aftPostPro", MTV_FLOAT, output[cpe_id * CPE_CHANNELS + n] ); +#endif + } /* n_channels loop */ + + + /* synthesis synchronization between stereo modes */ + synchro_synthesis( ivas_total_brate, hCPE, output + cpe_id * CPE_CHANNELS, output_frame, 0 ); + +#ifdef DEBUG_PLOT + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + setDeboutVars( -1, -1, n, cpe_id ); + sendDebout( "mct_synth", output_frame, 1, "aftSynchro", MTV_FLOAT, output[cpe_id * CPE_CHANNELS + n] ); + } +#endif + } + + wmops_sub_end(); + return error; +} + + +/*------------------------------------------------------------------------- + * create_mct_dec() + * + * Create, allocate and initialize IVAS decoder MCT handle + *-------------------------------------------------------------------------*/ + +ivas_error create_mct_dec( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + MCT_DEC_HANDLE hMCT; + int16_t n; + int32_t cp_bitrate; + int16_t max_blocks; + int16_t cpe_id; + + /*-----------------------------------------------------------------* + * Allocate MCT handle + *-----------------------------------------------------------------*/ + + if ( ( hMCT = (MCT_DEC_HANDLE) count_malloc( sizeof( MCT_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); + } + + /*-----------------------------------------------------------------* + * Allocate MCT BlockData handles + *-----------------------------------------------------------------*/ + + /* Determine active channels */ + if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) + { + hMCT->num_lfe = st_ivas->hTransSetup.num_lfe; + hMCT->nchan_out_woLFE = st_ivas->nchan_transport - hMCT->num_lfe; /* LFE channel is coded separately */ + } + else if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + hMCT->num_lfe = 0; + hMCT->nchan_out_woLFE = st_ivas->nchan_transport; + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + hMCT->num_lfe = 0; + hMCT->nchan_out_woLFE = st_ivas->nchan_transport; + } + else + { + assert( !"IVAS format currently not supported for MCT" ); + } + + cp_bitrate = st_ivas->hDecoderConfig->ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; + + /* indicate LFE for appropriate core-coder channel */ + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + if ( ( hMCT->num_lfe > 0 ) && ( ( n + cpe_id * CPE_CHANNELS ) == LFE_CHANNEL ) ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_LFE; + } + } + } + /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ + if ( ( hMCT->nchan_out_woLFE + hMCT->num_lfe ) % 2 ) + { + st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; + } + + /*Initialize MCT block data */ + max_blocks = hMCT->nchan_out_woLFE / 2; + + for ( n = 0; n < max_blocks; n++ ) + { + if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_DEC_BLOCK_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); + } + + /*Initialize all parameters to zero*/ + hMCT->hBlockData[n]->ch1 = 0; + hMCT->hBlockData[n]->ch2 = 0; + + /*-----------------------------------------------------------------* + * MDCT stereo initialization + *-----------------------------------------------------------------*/ + + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + + initMdctStereoDecData( hMCT->hBlockData[n]->hStereoMdct, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->hIGFDec->igfData.igfInfo.grid, cp_bitrate, SWB ); + hMCT->hBlockData[n]->hStereoMdct->use_itd = 0; + hMCT->hBlockData[n]->hStereoMdct->reverse_dmx = 0; + hMCT->hBlockData[n]->hStereoMdct->smooth_ratio = 1.f; + } + for ( ; n < MCT_MAX_BLOCKS; n++ ) + { + hMCT->hBlockData[n] = NULL; + } + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + hMCT->currBlockDataCnt = 0; + /*Initialize bits required to signal channel-pair index*/ + hMCT->bitsChannelPairIndex = max( 1, (int16_t) ( floor( ( log( hMCT->nchan_out_woLFE * ( hMCT->nchan_out_woLFE - 1 ) / 2 - 1 ) / log( 2. ) ) ) + 1 ) ); + + set_s( hMCT->chBitRatios, 0, MCT_MAX_CHANNELS ); + set_s( hMCT->lowE_ch, 0, MCT_MAX_CHANNELS ); + + st_ivas->hMCT = hMCT; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * mct_dec_reconfigure() + * + * Reconfigure IVAS decoder MCT handle + *-------------------------------------------------------------------------*/ + +ivas_error mct_dec_reconfigure( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const uint16_t b_nchan_change /* i : flag indicating different channel count */ +) +{ + MCT_DEC_HANDLE hMCT; + Decoder_State *st; + int16_t n, cpe_id, max_blocks; + int32_t cp_bitrate; + + hMCT = st_ivas->hMCT; + + /*-----------------------------------------------------------------* + * Allocate and initialize MCT BlockData handles + *-----------------------------------------------------------------*/ + + if ( b_nchan_change ) + { + /* Determine active channels */ + if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) + { + hMCT->num_lfe = st_ivas->hTransSetup.num_lfe; + hMCT->nchan_out_woLFE = st_ivas->nchan_transport - hMCT->num_lfe; /* LFE channel is coded separately */ + } + else if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + hMCT->num_lfe = 0; + hMCT->nchan_out_woLFE = st_ivas->nchan_transport; + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + hMCT->num_lfe = 0; + hMCT->nchan_out_woLFE = st_ivas->nchan_transport; + } + else + { + assert( !"IVAS format currently not supported for MCT" ); + } + } + + /* indicate LFE for appropriate core-coder channel */ + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + if ( ( hMCT->num_lfe > 0 ) && ( ( n + cpe_id * CPE_CHANNELS ) == LFE_CHANNEL ) ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_LFE; + } + } + } + + /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ + if ( ( hMCT->nchan_out_woLFE + hMCT->num_lfe ) % 2 ) + { + st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; + } + + cp_bitrate = st_ivas->hDecoderConfig->ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; + /* set correct nominal bitrates and igf config already here, otherwise we + * run into a number of problems */ + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st = st_ivas->hCPE[cpe_id]->hCoreCoder[n]; + + st->total_brate = st_ivas->hCPE[cpe_id]->element_brate; + + if ( !( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) ) + { + st->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[cpe_id]->element_brate / FRAMES_PER_SEC ); + st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_flag, st->mct_chan_mode ); + if ( st->igf ) + { + IGFDecSetMode( st->hIGFDec, st_ivas->hCPE[cpe_id]->element_brate, st->bwidth, st->element_mode, -1, -1, st->rf_flag ); + } + } + } + } + + /*Initialize MCT block data */ + max_blocks = hMCT->nchan_out_woLFE / CPE_CHANNELS; + + for ( n = 0; n < max_blocks; n++ ) + { + if ( b_nchan_change ) + { + if ( hMCT->hBlockData[n] == NULL ) + { + if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); + } + + /*Initialize all parameters to zero*/ + hMCT->hBlockData[n]->ch1 = 0; + hMCT->hBlockData[n]->ch2 = 0; + + /* MDCT stereo initialization */ + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + } + } + initMdctStereoDecData( hMCT->hBlockData[n]->hStereoMdct, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->hIGFDec->igfData.igfInfo.grid, cp_bitrate, st_ivas->hCPE[0]->hCoreCoder[0]->bwidth ); + hMCT->hBlockData[n]->hStereoMdct->use_itd = 0; + } + + for ( ; n < MCT_MAX_BLOCKS; n++ ) + { + /* deallocate no longer needed blocks */ + if ( hMCT->hBlockData[n] != NULL ) + { + if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) + { + count_free( hMCT->hBlockData[n]->hStereoMdct ); + hMCT->hBlockData[n]->hStereoMdct = NULL; + } + + count_free( hMCT->hBlockData[n] ); + hMCT->hBlockData[n] = NULL; + } + } + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + if ( b_nchan_change ) + { + hMCT->currBlockDataCnt = 0; + + /*Initialize bits required to signal channel-pair index*/ + hMCT->bitsChannelPairIndex = max( 1, (int16_t) ( floor( ( log( hMCT->nchan_out_woLFE * ( hMCT->nchan_out_woLFE - 1 ) / 2 - 1 ) / log( 2. ) ) ) + 1 ) ); + + set_s( hMCT->chBitRatios, 0, MCT_MAX_CHANNELS ); + set_s( hMCT->lowE_ch, 0, MCT_MAX_CHANNELS ); + } + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * create_mct_dec_close() + * + * Close IVAS decoder MCT handle + *-------------------------------------------------------------------------*/ + +void ivas_mct_dec_close( + MCT_DEC_HANDLE *hMCT /* i/o: MCT decoder structure */ +) +{ + int16_t n, maxBlocks; + + if ( hMCT == NULL || *hMCT == NULL ) + { + return; + } + + maxBlocks = ( *hMCT )->nchan_out_woLFE / 2; + + for ( n = 0; n < maxBlocks; n++ ) + { + if ( ( *hMCT )->hBlockData[n] != NULL ) + { + if ( ( *hMCT )->hBlockData[n]->hStereoMdct != NULL ) + { + count_free( ( *hMCT )->hBlockData[n]->hStereoMdct ); + ( *hMCT )->hBlockData[n]->hStereoMdct = NULL; + } + + count_free( ( *hMCT )->hBlockData[n] ); + ( *hMCT )->hBlockData[n] = NULL; + } + } + + count_free( *hMCT ); + *hMCT = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_mc_dec_config() + * + * - read transported MC LS setup + * - select MC format mode + * - reconfigure the MC format decoder + *-------------------------------------------------------------------------*/ + +/*! r : MC format mode */ +ivas_error ivas_mc_dec_config( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t idx /* i : LS config. index */ +) +{ + AUDIO_CONFIG signaled_config; + MC_MODE last_mc_mode; + ivas_error error; + + error = IVAS_ERR_OK; + + /* store last frame MC mode */ + last_mc_mode = st_ivas->mc_mode; + + if ( !st_ivas->bfi ) + { + /* set transported MC LS setup */ + signaled_config = ivas_mc_map_ls_setup_to_output_config( idx ); + + if ( st_ivas->ini_frame == 0 ) + { + st_ivas->transport_config = signaled_config; + } + + /* select MC format mode */ + st_ivas->mc_mode = ivas_mc_mode_select( ivas_mc_map_output_config_to_mc_ls_setup( signaled_config ), st_ivas->hDecoderConfig->ivas_total_brate ); + + /* MC format switching */ + if ( st_ivas->ini_frame != 0 ) + { + if ( st_ivas->hDecoderConfig->last_ivas_total_brate != st_ivas->hDecoderConfig->ivas_total_brate || st_ivas->transport_config != signaled_config || last_mc_mode != st_ivas->mc_mode ) + { + /*ivas_mc_dec_reconfigure( st_ivas );*/ + return IVAS_ERROR( IVAS_ERR_RECONFIGURE_NOT_SUPPORTED, "Error: MC format switching not supported yet!!!\n\n" ); + } + } + + st_ivas->transport_config = signaled_config; + } + + return error; +} diff --git a/lib_dec/ivas_mct_dec_mct.c b/lib_dec/ivas_mct_dec_mct.c new file mode 100644 index 0000000000..c8d91b9b07 --- /dev/null +++ b/lib_dec/ivas_mct_dec_mct.c @@ -0,0 +1,340 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" +#include +#include "stat_enc.h" + + +/*----------------------------------------------------------* + * indexToChannelPair() + * + * get the index of each channel pair + *----------------------------------------------------------*/ + +static void indexToChannelPair( + MCT_DEC_BLOCK_DATA_HANDLE hBlock, + const int16_t nChannels, + const int16_t pairIdx, + Decoder_State **sts /* i/o: decoder state structure */ +) +{ + int16_t ch1, ch2; + int16_t tmpIdx = 0; + + for ( ch2 = 1; ch2 < nChannels; ch2++ ) + { + for ( ch1 = 0; ch1 < ch2; ch1++ ) + { + if ( sts[ch1]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch2]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + + if ( tmpIdx == pairIdx ) + { + hBlock->ch1 = ch1; + hBlock->ch2 = ch2; + + return; + } + else + { + tmpIdx++; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_mct_dec_mct() + * + * decode core and mct information + *-------------------------------------------------------------------*/ + +void ivas_mct_dec_mct( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + Decoder_State **sts, /* i/o: decoder state structure */ + const int16_t nchan /* i : number of channels */ +) +{ + int16_t pair, ch, channelPairIndex; + MCT_DEC_BLOCK_DATA_HANDLE hBlock; + Decoder_State *p_st[CPE_CHANNELS]; + int16_t nchan_active = 0; + + hMCT->currBlockDataCnt = get_next_indice( sts[0], MCT_NUM_BLOCK_DATA_BITS ); + + /*first get core and overlap info for all channels*/ + for ( ch = 0; ch < nchan; ch++ ) + { + if ( ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE ) && hMCT->currBlockDataCnt && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + { + hMCT->mc_global_ild[ch] = get_next_indice( sts[0], SMDCT_GLOBAL_ILD_BITS ); + } + else + { + hMCT->mc_global_ild[ch] = 0; + } + } + + if ( hMCT->currBlockDataCnt ) + { + for ( ch = 0; ch < nchan; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + { + hMCT->lowE_ch[ch] = get_next_indice( sts[0], 1 ); + } + } + } + + for ( ch = 0; ch < nchan; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + { + nchan_active++; + } + } + + for ( pair = hMCT->currBlockDataCnt - 1; pair >= 0; pair-- ) + { + assert( nchan_active >= 2 ); + hBlock = hMCT->hBlockData[pair]; + + /*get channel pair index from BS*/ + channelPairIndex = get_next_indice( sts[0], hMCT->bitsChannelPairIndex ); + indexToChannelPair( hBlock, nchan, channelPairIndex, sts ); + + /*point to decoder states of actual channels to read block pair bits*/ + p_st[0] = sts[hBlock->ch1]; + p_st[1] = sts[hBlock->ch2]; + + parse_stereo_from_bitstream( hBlock->hStereoMdct, p_st, 1, sts[0], hBlock->mask ); + } + + return; +} + + +/*----------------------------------------------------------* + * applyGlobalILD() + * + * revert to initial channel energy levels using the ratios + * sent from the encoder + *----------------------------------------------------------*/ + +static void applyGlobalILD( + Decoder_State **sts, + MCT_DEC_HANDLE hMCT, + float *x[MCT_MAX_CHANNELS][NB_DIV] ) +{ + int16_t ch, k; + int16_t nSubframes, L_subframeTCX; + float qratio; + + for ( ch = 0; ch < ( hMCT->nchan_out_woLFE + hMCT->num_lfe ); ch++ ) + { + nSubframes = ( sts[ch]->core == TCX_20_CORE ) ? 1 : NB_DIV; + L_subframeTCX = sts[ch]->hTcxDec->L_frameTCX / nSubframes; + + if ( hMCT->mc_global_ild[ch] ) + { + if ( hMCT->lowE_ch[ch] ) + { + qratio = (float) hMCT->mc_global_ild[ch] / SMDCT_ILD_RANGE; + } + else + { + qratio = SMDCT_ILD_RANGE / (float) hMCT->mc_global_ild[ch]; + } + + for ( k = 0; k < nSubframes; k++ ) + { + v_multc( x[ch][k], qratio, x[ch][k], L_subframeTCX ); + } + } + else + { + continue; + } + } + + return; +} + + +/*----------------------------------------------------------* + * apply_MCT_dec() + * + * main MCT decoding function + *----------------------------------------------------------*/ + +void apply_MCT_dec( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + Decoder_State **sts, /* i/o: decoder state structure */ + float *x[MCT_MAX_CHANNELS][NB_DIV] /* i/o: decoded and dequan. spect. input to MCT */ +) +{ + int16_t pair; + MCT_DEC_BLOCK_DATA_HANDLE hBlock; + + for ( pair = hMCT->currBlockDataCnt - 1; pair >= 0; pair-- ) + { + hBlock = hMCT->hBlockData[pair]; + + stereo_decoder_tcx( hBlock->hStereoMdct, hBlock->mask, &x[hBlock->ch2][0], &x[hBlock->ch1][0], &x[hBlock->ch2][0], hBlock->hStereoMdct->mdct_stereo_mode, + sts[hBlock->ch1]->core, sts[hBlock->ch2]->core, sts[0]->igf, sts[0]->hTcxDec->L_frameTCX, 1, TCX_20_CORE, TCX_20_CORE, 0 ); + } + + applyGlobalILD( sts, hMCT, x ); + + return; +} + +/*----------------------------------------------------------* + * mctStereoIGF_dec() + * + * apply IGF to MCT stereo block pairs + *----------------------------------------------------------*/ + +void mctStereoIGF_dec( + MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ + Decoder_State **stm, /* i/o: decoder state structure */ + float *x[MCT_MAX_CHANNELS][NB_DIV], /* i/o: decoded and dequantized spectrum*/ + const int16_t bfi /* i : bad frame flag */ +) +{ + int16_t b, core, nSubframes, k, ch, p_ch[CPE_CHANNELS], ch1, ch2; + Decoder_State *sts[CPE_CHANNELS], *st = NULL; + int16_t tcx_offset[CPE_CHANNELS]; + int16_t tcx_offsetFB[CPE_CHANNELS]; + int16_t left_rect[CPE_CHANNELS]; + int16_t L_spec[CPE_CHANNELS]; + int16_t L_frame[CPE_CHANNELS]; + int16_t L_frameTCX[CPE_CHANNELS]; + float *p_x[CPE_CHANNELS][NB_DIV]; + int16_t singleChEle[MCT_MAX_CHANNELS]; + + set_s( singleChEle, 1, ( hMCT->nchan_out_woLFE + hMCT->num_lfe ) ); + + for ( b = 0; b < hMCT->currBlockDataCnt; b++ ) + { + ch1 = hMCT->hBlockData[b]->ch1; + ch2 = hMCT->hBlockData[b]->ch2; + + sts[0] = stm[ch1]; + sts[1] = stm[ch2]; + core = sts[0]->core; + nSubframes = core; + p_ch[0] = ch1; + p_ch[1] = ch2; + singleChEle[hMCT->hBlockData[b]->ch1] = 0; + singleChEle[hMCT->hBlockData[b]->ch2] = 0; + + for ( k = 0; k < nSubframes; k++ ) + { + p_x[0][k] = x[ch1][k]; + p_x[1][k] = x[ch2][k]; + + if ( hMCT->hBlockData[b]->hStereoMdct->IGFStereoMode[k] != SMDCT_DUAL_MONO || hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[k] != SMDCT_DUAL_MONO ) + { + L_spec[0] = sts[0]->hTcxCfg->tcx_coded_lines / nSubframes; + + init_tcx_info( sts[0], sts[0]->L_frame / nSubframes, sts[0]->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset[0], &tcx_offsetFB[0], &L_frame[0], &L_frameTCX[0], &left_rect[0], &L_spec[0] ); + + /* stereo IGF decoding */ + assert( ( sts[0]->core == sts[1]->core ) || ( hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) ); + + decoder_tcx_IGF_stereo( sts, hMCT->hBlockData[b]->hStereoMdct, hMCT->hBlockData[b]->mask, p_x, L_frame[0], left_rect[0], k, bfi ); + } + else + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + if ( bfi && st->core == ACELP_CORE ) /*no igf processing needed*/ + { + continue; + } + L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes; + + init_tcx_info( st, st->L_frame / nSubframes, st->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); + + /* mono or dual mono IGF decoding */ + decoder_tcx_IGF_mono( st, x[p_ch[ch]][k], L_frame[ch], left_rect[ch], bfi, k ); + } + } + } + } + + + if ( sum_s( singleChEle, ( hMCT->nchan_out_woLFE + hMCT->num_lfe ) ) != 0 ) + { + for ( ch = 0; ch < ( hMCT->nchan_out_woLFE + hMCT->num_lfe ); ch++ ) + { + if ( singleChEle[ch] ) + { + st = stm[ch]; + if ( bfi && st->core == ACELP_CORE ) /*no igf processing needed*/ + { + continue; + } + if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE || st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; + + for ( k = 0; k < nSubframes; k++ ) + { + L_spec[0] = st->hTcxCfg->tcx_coded_lines / nSubframes; + + init_tcx_info( st, st->L_frame / nSubframes, st->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset[0], &tcx_offsetFB[0], &L_frame[0], &L_frameTCX[0], &left_rect[0], &L_spec[0] ); + + /* mono or dual mono IGF decoding */ + decoder_tcx_IGF_mono( st, x[ch][k], L_frame[0], left_rect[0], bfi, k ); + } + } + } + } + + return; +} diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c new file mode 100644 index 0000000000..77c70b1f9f --- /dev/null +++ b/lib_dec/ivas_mdct_core_dec.c @@ -0,0 +1,1180 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "prot.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "cnst.h" +#include "basop_proto_func.h" +#include "stat_com.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_stat_com.h" +#include + + +/*-----------------------------------------------------------------* + * Function mdct_read_IGF_bits() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * read IGF side bits * + *-----------------------------------------------------------------*/ + +void mdct_read_IGF_bits( + Decoder_State *st, /* i/o: Decoder state handle */ + Decoder_State *st0 /* i : pointer to handle where bitstream is read */ +) +{ + int16_t k, start; + + start = st0->next_bit_pos; + + if ( st->core == TCX_20_CORE ) + { + /* read IGF payload */ + IGFDecReadLevel( st->hIGFDec, st0, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); + + IGFDecReadData( st->hIGFDec, st0, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); + } + + if ( st->core == TCX_10_CORE ) + { + for ( k = 0; k < 2; k++ ) + { + IGFDecReadLevel( st->hIGFDec, st0, IGF_GRID_LB_SHORT, k == 0 ? 1 : 0 ); + + IGFDecReadData( st->hIGFDec, st0, IGF_GRID_LB_SHORT, k == 0 ? 1 : 0 ); + + IGFDecStoreTCX10SubFrameData( st->hIGFDec, k ); + } + } + + st->side_bits_frame_channel += ( st0->next_bit_pos - start ); + + return; +} + + +/*-----------------------------------------------------------------* + * Function dec_prm_tcx_sidebits() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * decode TCX side parameters * + *-----------------------------------------------------------------*/ + +static void dec_prm_tcx_sidebits( + int16_t param[], /* o : decoded parameters */ + Decoder_State *st, /* i/o: decoder memory state */ + const int16_t tnsSize[NB_DIV], /* i : TNS activity/subframe (in channel 0 in case of 2) */ + int16_t p_param[NB_DIV], /* o : pointer to parameters for next round of bs reading*/ + int16_t nTnsBitsTCX10[NB_DIV], /* o : number of TNS bits per TCX10 subframe */ + Decoder_State *st0, /* i/o: core decoder state handle - for bitstream */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t MCT_flag, +#endif + const int16_t ch /* i : channel */ +) +{ + CONTEXT_HM_CONFIG hm_cfg; + int16_t start_bit_pos; +#ifdef DEBUG_MODE_TCX + int16_t bits_common; + static FILE *pF = NULL; + if ( pF == NULL ) + pF = fopen( "./res/stereo_tcx_dec_ind.txt", "w" ); +#endif + + /*--------------------------------------------------------------------------------* + * Initialization + *--------------------------------------------------------------------------------*/ + + hm_cfg.indexBuffer = NULL; + + start_bit_pos = st0->next_bit_pos; + + /* Init LTP data */ + st->hTcxDec->tcx_hm_LtpPitchLag = -1; + st->hTcxLtpDec->tcxltp_gain = 0.0f; + + /*--------------------------------------------------------------------------------* + * Header + *--------------------------------------------------------------------------------*/ + + /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + getTCXMode( st, st0, MCT_flag ); +#else + getTCXMode( st, st0 ); +#endif + + st->flagGuidedAcelp = 0; + + if ( st->dec_glr ) + { + st->dec_glr_idx = -1; + } + + /* last_core for core switching and error concealment */ + if ( ( st->last_core == ACELP_CORE && st->last_total_brate == FRAME_NO_DATA ) || st->prev_bfi ) + { + /* needed for cases where first TCX frame after a certain transition (e.g. inactive SID/zero frame -> active or stereo switching) is lost */ +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + if ( st->core == TCX_20_CORE ) + { + st->last_core_from_bs = get_next_indice( st0, 1 ); + } + else + { + st->last_core_from_bs = st->last_core; + } +#else + st->last_core_from_bs = get_next_indice( st0, 1 ); +#endif + + /* ACELP -> TCX_10 transitions are forbidden */ + if ( st->core == TCX_10_CORE && st->last_core == ACELP_CORE && st->last_total_brate == FRAME_NO_DATA ) + { + st->last_core = TCX_20_CORE; +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + st->last_core_from_bs = st->last_core; +#endif + } + } + else + { +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + if ( st->core != TCX_10_CORE ) + { + st->last_core = get_next_indice( st0, 1 ); + st->last_core_from_bs = st->last_core; + } +#else + st->last_core = get_next_indice( st0, 1 ); + st->last_core_from_bs = st->last_core; +#endif + } + +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + getTCXWindowing( st->core, st->last_core, st->element_mode, st->hTcxCfg, st0 ); +#else + getTCXWindowing( st->core, st->last_core, st->hTcxCfg, st0 ); +#endif + + st->hTcxDec->kernel_type[0] = st->hTcxDec->kernel_type[1] = MDCT_IV; + if ( st->element_mode == IVAS_CPE_MDCT && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + st->hTcxDec->kernel_type[0] = get_next_indice( st0, st->last_core_from_bs != ACELP_CORE ? 2 : 1 ); + if ( st->core == TCX_10_CORE ) + { + st->hTcxDec->kernel_type[1] = 2 * ( st->hTcxDec->kernel_type[0] & 1 ) + get_next_indice( st0, 1 ); + } + } + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + st->hTcxCfg->tcx_curr_overlap_mode = FULL_OVERLAP; + st->hTcxCfg->tcx_last_overlap_mode = FULL_OVERLAP; + st->hTcxCfg->last_aldo = 0; + } + + if ( st->core == TCX_20_CORE ) + { + st->transform_type[0] = st->transform_type[1] = TCX_20; + } + else + { + if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) + { + st->transform_type[0] = TCX_5; + st->transform_type[1] = TCX_10; + } + else if ( st->hTcxCfg->tcx_last_overlap_mode == FULL_OVERLAP ) + { + st->transform_type[0] = TCX_10; + st->transform_type[1] = TCX_5; + } + else + { + st->transform_type[0] = st->transform_type[1] = TCX_5; + } + } + + /*--------------------------------------------------------------------------------* + * TCX20/TCX10 parameters + *--------------------------------------------------------------------------------*/ + + getTCXparam( st, st0, hm_cfg, param, 0, 0, ( ( ch > 0 ) && ( tnsSize ) && ( tnsSize[0] + tnsSize[1] > 0 ) ? tnsSize : NULL ), p_param, nTnsBitsTCX10, 0 ); + + st->side_bits_frame_channel = st0->next_bit_pos - start_bit_pos; + return; +} + + +/*-----------------------------------------------------------------* + * Function dec_prm_tcx_spec() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * decode TCX core parameters * + *-----------------------------------------------------------------*/ + +static void dec_prm_tcx_spec( + Decoder_State *st, /* i/o: decoder memory state */ + int16_t param[], /* o : decoded parameters */ + int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ + int16_t *bitsRead, /* o : number of read bits */ + int16_t p_param[NB_DIV], /* o : pointer to parameters for next round of bs reading*/ + int16_t nTnsBitsTCX10[NB_DIV] /* i : number of TNS bits per TCX10 subframe*/ +) +{ + int16_t nSubframes; + int16_t start_bit_pos, nbits_tcx; + int16_t nf_bits; + int16_t target_bitsTCX10[NB_DIV]; + int16_t indexBuffer[N_MAX + 1]; + CONTEXT_HM_CONFIG hm_cfg; +#ifdef DEBUG_MODE_TCX + static FILE *pF = NULL; + if ( pF == NULL ) + pF = fopen( "./res/stereo_tcx_dec_ind.txt", "w" ); +#endif + + /*--------------------------------------------------------------------------------* + * Initialization + *--------------------------------------------------------------------------------*/ + + hm_cfg.indexBuffer = indexBuffer; +#ifdef DEBUG_MODE_TCX + fprintf( pF, "== stereo Chan %d - Nominal Bits %d - Allocated Bits %d ==\n", st->idchan, st->bits_frame_nominal, (int16_t) ( st->total_brate / FRAMES_PER_SEC ) ); + fprintf( pF, "stereo Common Header: %d bits\n", st->next_bit_pos ); +#endif + + start_bit_pos = st->next_bit_pos; + + nf_bits = 0; + nbits_tcx = 0; + + nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; + + /*calculate TCX10 target bits before to assure minimum amount is distributed between subframes*/ + if ( st->core == TCX_10_CORE && st->element_mode == IVAS_CPE_MDCT ) + { + int16_t nTnsBitsTCX10Tmp[NB_DIV]; + nTnsBitsTCX10Tmp[0] = nTnsBitsTCX10[0]; + nTnsBitsTCX10Tmp[1] = nTnsBitsTCX10[1]; + + /*compute target bits */ + nbits_tcx = st->bits_frame_channel + nTnsBitsTCX10[0] + nTnsBitsTCX10[1] + nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); + ivas_mdct_tcx10_bit_distribution( target_bitsTCX10, nbits_tcx, nTnsBitsTCX10Tmp ); + } + + /*--------------------------------------------------------------------------------* + * TCX20/TCX10 parameters + *--------------------------------------------------------------------------------*/ + + getTCXparam( st, st, hm_cfg, param, 0, 0, NULL, p_param, target_bitsTCX10, 1 ); + + nf_bits = nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); + + if ( *total_nbbits - bitsRead[0] + nf_bits < ( st->next_bit_pos - start_bit_pos ) ) + { + st->BER_detect = 1; + st->next_bit_pos = start_bit_pos + *total_nbbits - bitsRead[0]; + } + + bitsRead[0] = st->next_bit_pos - start_bit_pos; + + return; +} + + +/*-----------------------------------------------------------------* + * Function ivas_mdct_dec_side_bits_frame_channel() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * Initialize TCX and read TCX side parameters * + *-----------------------------------------------------------------*/ + +void ivas_mdct_dec_side_bits_frame_channel( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + int16_t param_lpc[MCT_MAX_CHANNELS][NPRM_LPC_NEW], /* o : lpc_parameters */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* o : pointer to param buffer */ + Decoder_State *st0, /* i : pointer to bitstream handle */ + int16_t *LFE_off, /* o : flag if LFE has content */ + int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* o : number of bits for TNS */ + int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i/o: parameters buffer */ + const int16_t MCT_flag, /* i : MCT tool active(1) or deactive(0) */ + const int16_t odd_channel_cpe /* i : flag cpe with odd nb of tc channels */ +) +{ + int16_t ch, bfi; + Decoder_State **sts, *st; + int16_t total_nbbits[MCT_MAX_CHANNELS]; + int16_t bitsRead[MCT_MAX_CHANNELS]; + int16_t tmp; + int16_t sns_low_br_mode; + int16_t start_bit_pos_sns; + int8_t skipped_first_channel; + + sts = hCPE->hCoreCoder; + bfi = sts[0]->bfi; + + set_s( total_nbbits, 0, MCT_MAX_CHANNELS ); + set_s( bitsRead, 0, MCT_MAX_CHANNELS ); + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( MCT_flag ) + { + /* Initialization or re-configuration of Stereo TCX */ + stereo_tcx_init_dec( sts[ch], 1, hCPE->last_element_mode ); + } + sts[ch]->enablePlcWaveadjust = 0; + } + + if ( !bfi ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + /* disguard reading second channel of odd transport channels, mct_chan_mode is set by default*/ + if ( odd_channel_cpe && ch == 1 ) + { + continue; + } + st = sts[ch]; + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + *LFE_off = get_next_indice( st0, 1 ); + } + else if ( MCT_flag ) + { + tmp = get_next_indice( st0, 1 ); + if ( tmp ) + { + st->mct_chan_mode = MCT_CHAN_MODE_IGNORE; + } + else + { + st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + } + } + } + + /*read channel bitrate ratios from bitstream*/ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && *LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + sts[ch]->coder_type = INACTIVE; + sts[ch]->side_bits_frame_channel = 0; + continue; + } + + tmp = ch; + if ( ch == 1 && param_lpc[0][0] == 2 ) + { + tmp = 3; + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + dec_prm_tcx_sidebits( param[ch], st, ( ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) ? sts[0]->hTcxDec->tnsActive : NULL ), p_param[ch], nTnsBitsTCX10[ch], st0, MCT_flag, tmp ); +#else + dec_prm_tcx_sidebits( param[ch], st, ( ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) ? sts[0]->hTcxDec->tnsActive : NULL ), p_param[ch], nTnsBitsTCX10[ch], st0, tmp ); +#endif + + assert( st->BER_detect != 1 ); + } + + /*--------------------------------------------------------------------------------* + * SNS parameters + *--------------------------------------------------------------------------------*/ + + skipped_first_channel = 0; + sns_low_br_mode = 0; + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && *LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + skipped_first_channel = 1; + continue; + } + + start_bit_pos_sns = st0->next_bit_pos; + + if ( ch == 0 || skipped_first_channel ) + { + /* read SNS stereo mode */ + param_lpc[0][0] = get_next_indice( st0, 1 ) << 1; + + /* read low br mode flag (if it is possible to be non-zero) */ + if ( sts[0]->element_brate == IVAS_48k && !( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ) + { + sns_low_br_mode = get_next_indice( st0, 1 ); + } + } + + tmp = ch; + if ( ch == 1 && param_lpc[0][0] == 2 ) + { + tmp = 3; + } + + getLPCparam( st, ¶m_lpc[ch][0], st0, tmp, sns_low_br_mode && !( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ); + + st->side_bits_frame_channel += st0->next_bit_pos - start_bit_pos_sns; + } + } + + return; +} + + +/*-----------------------------------------------------------------* + * ivas_mdct_core_invQ() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * Inverse processing steps up to inverse quantization * + *-----------------------------------------------------------------*/ + +void ivas_mdct_core_invQ( + CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ + const int16_t LFE_off, /* i : flag if LFE content */ + int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* i : number of TNS bits */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to param buffer */ + int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW], /* i : lpc parameters */ + int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i : param buffer */ + int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : flag TNS enabled */ + STnsData tnsData[CPE_CHANNELS][NB_DIV], /* i : TNS parameter */ + float *x_0[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ + float *x[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ + float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* i : LP coefficients */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : M/S mask */ + const int16_t isMCT /* i : MCT flag */ +) +{ + int16_t ch, bfi, k; + Decoder_State **sts, *st; + /* bitstream */ + int16_t total_nbbits[CPE_CHANNELS]; + int16_t bitsRead[CPE_CHANNELS]; + int16_t *prm[CPE_CHANNELS]; + /* LPC */ + Word16 Aind[CPE_CHANNELS][M + 1]; + float lsf[CPE_CHANNELS][( NB_DIV + 1 ) * M]; + /* TCX */ + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + int16_t tcx_offset[CPE_CHANNELS]; + int16_t tcx_offsetFB[CPE_CHANNELS]; + int16_t left_rect[CPE_CHANNELS]; + int16_t L_spec[CPE_CHANNELS]; + /* Framing */ + int16_t L_frame[CPE_CHANNELS], nSubframes[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS]; + int16_t tmp_concealment_method; + float gain_tcx; + int16_t nf_seed; + const int16_t *prm_sqQ; + int16_t L_frameTCX_global[CPE_CHANNELS]; + float tmp_ms_sig[CPE_CHANNELS][N_MAX]; +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float concealment_noise[CPE_CHANNELS][L_FRAME48k]; + TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode_bfi; +#endif + + wmops_sub_start( "mdct_core_invQ" ); + + sts = hCPE->hCoreCoder; + bfi = sts[0]->bfi; +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + noise_gen_mode_bfi = -1; +#endif + + set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); + set_s( total_nbbits, 0, CPE_CHANNELS ); + set_s( bitsRead, 0, CPE_CHANNELS ); + tmp_concealment_method = 0; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch]->enablePlcWaveadjust = 0; + } + + /* temporarily restore LR representation of previous frame for PLC mode decision (done on the individual channels) */ + if ( bfi && !isMCT && ( hCPE->hStereoMdct->mdct_stereo_mode[0] > SMDCT_DUAL_MONO || hCPE->hStereoMdct->mdct_stereo_mode[1] > SMDCT_DUAL_MONO ) ) + { + L_frameTCX[0] = sts[0]->L_frameTCX_past; + mvr2r( sts[0]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[0], L_frameTCX[0] ); + mvr2r( sts[1]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[1], L_frameTCX[0] ); + stereo_decoder_tcx( hCPE->hStereoMdct, ms_mask, x_0[1], &sts[0]->hTonalMDCTConc->lastBlockData.spectralData, &sts[1]->hTonalMDCTConc->lastBlockData.spectralData, &hCPE->hStereoMdct->mdct_stereo_mode[0], + sts[0]->core, sts[1]->core, sts[0]->igf, L_frameTCX[0], 0, sts[0]->last_core, sts[1]->last_core, 1 ); + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( bfi ) + { + if ( sts[0]->core == sts[1]->core ) + { + noise_gen_mode_bfi = EQUAL_CORES; + } + else if ( sts[0]->core == TCX_20 && sts[1]->core == TCX_10 ) + { + noise_gen_mode_bfi = TCX10_IN_0_TCX20_IN_1; + } + else if ( sts[0]->core == TCX_10 && sts[1]->core == TCX_20 ) + { + noise_gen_mode_bfi = TCX20_IN_0_TCX10_IN_1; + } + } +#endif + + /* parameter decoding */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) /* indicates LFE with no content, or odd number of channels */ + { + st->total_brate = st->bits_frame_channel; + continue; + } + prm[ch] = param[ch]; /* to avoid compilation warnings */ + + /*Adjust bit per frame*/ + if ( !bfi ) + { + st->bits_frame_core = st->bits_frame_channel; + + sts[ch]->total_brate = ( sts[ch]->bits_frame_channel + sts[ch]->side_bits_frame_channel + sts[ch]->core * NF_GAIN_BITS ) * FRAMES_PER_SEC; + } + + /* Framing parameters */ + L_frame[ch] = st->L_frame; + + /*--------------------------------------------------------------------------------* + * BITSTREAM DECODING + *--------------------------------------------------------------------------------*/ + + total_nbbits[ch] = st->bits_frame_channel; + + if ( !bfi ) + { + st->second_last_core = st->last_core; + if ( hCPE->cpe_id == 0 && ch == 0 ) + { + /* add mct and side bits to first handle bitrate to avoid false BER detection */ + st->total_brate += ( st->next_bit_pos * FRAMES_PER_SEC ); + + dec_prm_tcx_spec( st, param[ch], &total_nbbits[ch], &bitsRead[ch], p_param[ch], nTnsBitsTCX10[ch] ); + + /*revert to actual total bitrate assigned to ch0 */ + sts[ch]->total_brate = ( sts[ch]->bits_frame_channel + sts[ch]->side_bits_frame_channel + sts[ch]->core * NF_GAIN_BITS ) * FRAMES_PER_SEC; + } + else + { + dec_prm_tcx_spec( st, param[ch], &total_nbbits[ch], &bitsRead[ch], p_param[ch], nTnsBitsTCX10[ch] ); + } + + assert( st->BER_detect != 1 ); + } + else + { + if ( st->nbLostCmpt > 1 ) + { + st->flagGuidedAcelp = 0; + } + + /* PLC: [Common: mode decision] + * PLC: Decide which Concealment to use. Update pitch lags if needed */ + st->core = GetPLCModeDecision( st ); + + /*disable ACELP_PLC for LFE channel */ + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + st->core = st->last_core; + } + } + + if ( ( !st->bfi || st->hTcxCfg->psychParamsCurrent == NULL ) && st->core > ACELP_CORE ) + { + int16_t last_frame_was_concealed_cng; + last_frame_was_concealed_cng = ( st->last_core == ACELP_CORE ) && ( st->last_core != st->last_core_from_bs ); + SetCurrentPsychParams( st->core, last_frame_was_concealed_cng, st->hTcxCfg ); + } + + /* PLC: [Common: Memory update] + * PLC: Update the number of lost frames */ + if ( !bfi ) + { + if ( st->prev_bfi == 1 ) + { + st->prev_nbLostCmpt = st->nbLostCmpt; + } + else + { + st->prev_nbLostCmpt = 0; + } + + st->nbLostCmpt = 0; + } + } + + if ( bfi && !isMCT && ( hCPE->hStereoMdct->mdct_stereo_mode[0] > SMDCT_DUAL_MONO || hCPE->hStereoMdct->mdct_stereo_mode[1] > SMDCT_DUAL_MONO ) ) + { + /* avoid using TD-PLC in only one channel when stereo mode isn't dual mono */ + if ( sts[0]->core != sts[1]->core && ( sts[0]->core == ACELP_CORE || sts[1]->core == ACELP_CORE ) ) + { + if ( sts[0]->core == ACELP_CORE ) + { + sts[0]->core = sts[0]->last_core; + } + else if ( sts[1]->core == ACELP_CORE ) + { + sts[1]->core = sts[1]->last_core; + } + } + mvr2r( tmp_ms_sig[0], sts[0]->hTonalMDCTConc->lastBlockData.spectralData, L_frameTCX[0] ); + mvr2r( tmp_ms_sig[1], sts[1]->hTonalMDCTConc->lastBlockData.spectralData, L_frameTCX[0] ); + } + + /*--------------------------------------------------------------------------------* + * LPC PARAMETERS + *--------------------------------------------------------------------------------*/ + + if ( bfi == 0 ) + { + if ( sts[0]->core == TCX_20_CORE && sts[1]->core == TCX_20_CORE && sts[0]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + { + sns_avq_dec_stereo( param_lpc[0], param_lpc[1], &lsf[0][M], &lsf[1][M] ); + } + else + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + if ( st->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + { + sns_avq_dec( param_lpc[ch], &lsf[ch][M], st->numlpc ); + } + } + } + } + + /*--------------------------------------------------------------* + * Rate switching + *---------------------------------------------------------------*/ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( st->rate_switching_reset ) + { + lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); + } + } + + /*--------------------------------------------------------------------------------* + * TCX20/10/5 + *--------------------------------------------------------------------------------*/ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) /* indicates LFE with no content, or odd number of channels */ + { + set_f( x[ch][0], 0.f, st->hTcxCfg->tcx_coded_lines ); + /* usually set in decoder_tcx_invQ(), needed for concealment */ + st->hTcxDec->damping = 0.f; + st->hTcxDec->gainHelper = 1.f; + st->hTcxDec->stepCompensate = 0.f; + + continue; + } + + if ( !bfi || ( bfi && st->core != ACELP_CORE ) ) + { + nSubframes[ch] = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; + + for ( k = 0; k < nSubframes[ch]; k++ ) + { + /* Stability Factor */ + if ( !bfi ) + { + mvr2r( &lsf[ch][( k + 1 ) * M], &Aq[ch][k * M], M ); + } + else + { + st->stab_fac = 1.0f; + } + + /* Set pointer to parameters */ + prm[ch] = param[ch] + ( k * DEC_NPRM_DIV ); + L_frameTCX_global[ch] = st->hTcxDec->L_frameTCX / nSubframes[ch]; + L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes[ch]; + + init_tcx_info( st, st->L_frame / nSubframes[ch], st->hTcxDec->L_frameTCX / nSubframes[ch], k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); + + tmp_concealment_method = 0; + nf_seed = prm[ch][1 + NOISE_FILL_RANGES + LTPSIZE]; + if ( !bfi && st->hTcxCfg->fIsTNSAllowed && ( ch > 0 ) && ( nf_seed < 0 ) ) + { + mvs2s( param[0] + k * DEC_NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, prm[ch] + 1 + NOISE_FILL_RANGES + LTPSIZE, nf_seed * -1 ); + } + nf_seed = 0; + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + decoder_tcx_invQ( st, prm[ch], Aq[ch], Aind[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], NULL, xn_buf, &fUseTns[ch][k], &tnsData[ch][k], &gain_tcx, &prm_sqQ, &nf_seed, bfi, isMCT, k ); +#else + decoder_tcx_invQ( st, prm[ch], Aq[ch], Aind[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], NULL, xn_buf, &fUseTns[ch][k], &tnsData[ch][k], &gain_tcx, &prm_sqQ, &nf_seed, bfi, k ); +#endif + + mvr2r( x[ch][k], x_0[ch][k], L_frameTCX[ch] ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( bfi && !isMCT ) + { + TonalMdctConceal_create_concealment_noise( concealment_noise[ch], hCPE, L_frameTCX[ch], L_frame[ch], ch, k, st->core, st->hTcxDec->cummulative_damping_tcx, noise_gen_mode_bfi ); + } + decoder_tcx_noisefilling( st, concealment_noise[ch], Aq[ch], L_frameTCX_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], NULL, &tmp_concealment_method, gain_tcx, prm_sqQ, nf_seed, bfi, isMCT, k ); +#else + decoder_tcx_noisefilling( st, Aq[ch], L_frameTCX_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], NULL, &tmp_concealment_method, gain_tcx, prm_sqQ, nf_seed, bfi, k ); +#endif + + decoder_tcx_noiseshaping_igf( st, L_spec[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x[ch][k], + NULL, &tmp_concealment_method, bfi ); + } + } + + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) /*indicates LFE with no content*/ + { + set_f( &x[ch][0][MCT_LFE_MAX_LINE], 0.f, st->hTcxCfg->tcx_coded_lines - MCT_LFE_MAX_LINE ); + } + } + + wmops_sub_end(); + return; +} + + +/*-----------------------------------------------------------------* + * ivas_mdct_core_reconstruct() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * reconstruct time signal * + *-----------------------------------------------------------------*/ + +void ivas_mdct_core_reconstruct( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float *x[][NB_DIV], /* i/o: synthesis @internal_FS */ + float signal_outFB[CPE_CHANNELS][L_FRAME_PLUS], /* o : synthesis @output_FS */ + const int16_t LFE_off, /* i : flag if LFE content */ + int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : flage TNS enabled */ + const int16_t isMCT /* i : MCT flag */ +) +{ + int16_t ch, k, bfi; + Decoder_State **sts, *st; + /* Framing */ + int16_t L_frame[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS], nSubframes[CPE_CHANNELS]; + int16_t L_frame_global[CPE_CHANNELS], L_frame_globalTCX[CPE_CHANNELS]; + /* Synth */ + float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; + float *synth; + float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; + float *synthFB; + /* TCX */ + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + int16_t tcx_offset[CPE_CHANNELS]; + int16_t tcx_offsetFB[CPE_CHANNELS]; + int16_t left_rect[CPE_CHANNELS]; + int16_t L_spec[CPE_CHANNELS]; + + int16_t pitch[CPE_CHANNELS][NB_SUBFR16k]; + float pit_gain[CPE_CHANNELS][NB_SUBFR16k]; + int16_t isLFE; + int16_t skip_decoding; + + set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); + + /* Initializations */ + sts = hCPE->hCoreCoder; + bfi = sts[0]->bfi; + + /* TNS, ITF, IMDCT and updates */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + skip_decoding = 0; + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) /* indicates LFE with no content, or odd number of channels */ + { + skip_decoding = 1; + } + + isLFE = 0; + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + isLFE = 1; + } + + nSubframes[ch] = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; + synth = synth_buf + st->hTcxDec->old_synth_len; + synthFB = synth_bufFB + st->hTcxDec->old_synth_lenFB; + mvr2r( st->hTcxDec->old_synth, synth_buf, st->hTcxDec->old_synth_len ); + mvr2r( st->hTcxDec->old_synthFB, synth_bufFB, st->hTcxDec->old_synth_lenFB ); + set_zero( synth, L_FRAME_PLUS + M ); + set_zero( synthFB, L_FRAME_PLUS + M ); + + if ( st->core != ACELP_CORE ) + { + for ( k = 0; k < nSubframes[ch]; k++ ) + { + L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes[ch]; + L_frame_global[ch] = st->L_frame / nSubframes[ch]; + L_frame_globalTCX[ch] = st->hTcxDec->L_frameTCX / nSubframes[ch]; + + init_tcx_info( st, L_frame_global[ch], L_frame_globalTCX[ch], k, bfi, &tcx_offset[ch], + &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); + + if ( !skip_decoding ) + { + decoder_tcx_imdct( st, L_frame_global[ch], L_frame_globalTCX[ch], L_spec[ch], tcx_offset[ch], + tcx_offsetFB[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], &x[ch][k][0], xn_buf, + ( st->element_mode == IVAS_CPE_MDCT && hCPE->nchan_out == 1 && st->hTcxDec->kernel_type[k] == MDST_IV ) ? MDCT_IV : st->hTcxDec->kernel_type[k], + fUseTns[ch][k], &synth[k * L_frame[ch]], &synthFB[k * L_frameTCX[ch]], bfi, k, isLFE, 0 ); + } + else + { + set_f( &synth[k * L_frame[ch]], 0.f, L_frame[ch] ); + set_f( &synthFB[k * L_frame[ch]], 0.f, L_frameTCX[ch] ); + } + } + + if ( !bfi && st->hTonalMDCTConc != NULL ) + { + TonalMDCTConceal_SaveTimeSignal( st->hTonalMDCTConc, synthFB, L_frameTCX[ch] ); + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + decoder_tcx_post( st, synth, synthFB, NULL, bfi, isMCT ); +#else + decoder_tcx_post( st, synth, synthFB, NULL, bfi ); +#endif + } + else /*ACELP core for ACELP-PLC */ + { + assert( st->bfi == 1 ); + /* PLC: [TCX: TD PLC] */ + if ( isMCT ) + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + con_tcx( st, &synthFB[0], -1.f, NULL, 0, NULL ); +#else + con_tcx( st, &synthFB[0], -1.f, NULL, 0 ); +#endif + } + else + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + con_tcx( st, &synthFB[0], hCPE->hStereoMdct->lastCoh, &sts[0]->seed_acelp, ( sts[1]->core != ACELP_CORE ) ? 1 : 0, &st->hFdCngDec->hFdCngCom->A_cng[0] ); +#else + con_tcx( st, &synthFB[0], hCPE->hStereoMdct->lastCoh, &sts[0]->seed_acelp, ( sts[1]->core != ACELP_CORE ) ? 1 : 0 ); +#endif + } + + lerp( synthFB, synth, st->L_frame, st->hTcxDec->L_frameTCX ); + st->con_tcx = 1; + set_f( &st->mem_pitch_gain[2], st->lp_gainp, st->nb_subfr ); + + /* PLC: [TCX: Tonal Concealment] */ + /* Signal that this frame is not TCX */ + if ( st->hTonalMDCTConc != NULL ) + { + TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, 0, 0, 0, 0 ); + } + } + + /*--------------------------------------------------------------------------------* + * Updates + *--------------------------------------------------------------------------------*/ + + st = sts[ch]; + + if ( bfi && st->last_core != ACELP_CORE && st->core == ACELP_CORE ) + { + /* Update FEC_scale_syn parameters */ + if ( st->hTcxLtpDec->tcxltp_gain == 0 ) + { + fer_energy( st->L_frame, UNVOICED, synth, (float) ( st->L_frame / 2 ), &st->enr_old, st->L_frame ); + } + else + { + fer_energy( st->L_frame, st->clas_dec, synth, st->old_fpitch, &st->enr_old, st->L_frame ); + } + } + + /* Update */ + mvr2r( synth_buf + st->L_frame, st->hTcxDec->old_synth, st->hTcxDec->old_synth_len ); + mvr2r( st->hTcxDec->old_synthFB + st->hTcxDec->L_frameTCX - NS2SA( st->output_Fs, PH_ECU_MEM_NS ), st->hTcxDec->synth_history, NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); + mvr2r( synth_bufFB + st->hTcxDec->L_frameTCX, st->hTcxDec->old_synthFB, st->hTcxDec->old_synth_lenFB ); + if ( st->hHQ_core != NULL ) + { + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + } + + mvr2r( st->lsp_q_cng, st->old_lsp_q_cng, M ); + mvr2r( st->lsf_q_cng, st->old_lsf_q_cng, M ); + + st->last_is_cng = 0; + + /* Postfiltering */ + post_decoder( st, synth_buf, pit_gain[ch], pitch[ch], x[ch][0], st->p_bpf_noise_buf ); + + if ( signal_outFB[ch] ) + { + mvr2r( synthFB, signal_outFB[ch], st->hTcxDec->L_frameTCX ); + } + +#ifdef DEBUG_PLC_INFO + { + int16_t i; + int16_t tmp[L_FRAME48k]; + static FILE *sP = NULL; + + for ( i = 0; i < st->hTcxDec->L_frameTCX; i++ ) + { + tmp[i] = (int16_t) ( signal_outFB[ch][i] + 0.5f ); + } + if ( ch == 0 ) + { + dbgwrite( tmp, sizeof( int16_t ), st->hTcxDec->L_frameTCX, 1, "./res/mdct_stereo_dec_synthFB_ch0.pcm" ); +#ifndef DEBUG_MODE_INFO + dbgwrite( &st->bfi, sizeof( int16_t ), 1, st->hTcxDec->L_frameTCX, "./res/bfi.pcm" ); +#endif + dbgwrite( &st->tonal_mdct_plc_active, sizeof( int16_t ), 1, L_frameTCX[ch], "./res/tonal_mdct_active_ch0.pcm" ); + dbgwrite( &st->tonal_mdct_plc_active, sizeof( int16_t ), 1, L_frameTCX[ch], "./res/tonal_mdct_active_ch0.pcm" ); + dbgwrite( &st->con_tcx, sizeof( int16_t ), 1, 640, "./res/con_tcx_ch0.pcm" ); + } + else + { + dbgwrite( tmp, sizeof( int16_t ), st->hTcxDec->L_frameTCX, 1, "./res/mdct_stereo_dec_synthFB_ch1.pcm" ); + dbgwrite( &st->tonal_mdct_plc_active, sizeof( int16_t ), 1, L_frameTCX[ch], "./res/tonal_mdct_active_ch1.pcm" ); + dbgwrite( &st->con_tcx, sizeof( int16_t ), 1, 640, "./res/con_tcx_ch1.pcm" ); + } + } +#endif + + /* updates */ + st->last_voice_factor = 0.0f; + st->last_coder_type = st->coder_type; + } + + /* calculate coherence of signal needed when next frame is lost */ + if ( !bfi && !isMCT && hCPE->element_mode == IVAS_CPE_MDCT ) + { + int16_t i; + + float nrgL, nrgR, xcorr; + + nrgL = nrgR = xcorr = EPSILON; + + for ( i = 0; i < sts[0]->hTcxDec->L_frameTCX; i++ ) + { + nrgL += signal_outFB[0][i] * signal_outFB[0][i]; + nrgR += signal_outFB[1][i] * signal_outFB[1][i]; + xcorr += signal_outFB[0][i] * signal_outFB[1][i]; + } + + hCPE->hStereoMdct->lastCoh = fabsf( xcorr ) / sqrtf( nrgL * nrgR ); + hCPE->hStereoMdct->lastCoh = min( hCPE->hStereoMdct->lastCoh, 1.f ); + } + + return; +} + + +/*-----------------------------------------------------------------* + * ivas_mdct_core_tns_ns() * + * ~~~~~~~~~~~~~~~~~~~~~~~ * + * reconstruct time signal * + *-----------------------------------------------------------------*/ + +void ivas_mdct_core_tns_ns( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int16_t LFE_off, /* i : flag if LFE has content */ + int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : two entries for each channel in TCX10 */ + STnsData tnsData[CPE_CHANNELS][NB_DIV], /* o : TNS parameter */ + float *x[CPE_CHANNELS][NB_DIV], /* o : synthesis @internal_FS */ + float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* o : LP coefficients */ + const int16_t isMCT /* i : MCT flag */ +) +{ + int16_t ch, k, bfi; + Decoder_State **sts, *st; + /* Framing */ + int16_t L_frame[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS], nSubframes[CPE_CHANNELS]; + int16_t L_frame_global[CPE_CHANNELS], L_frameTCX_glob[CPE_CHANNELS]; + + /* TCX */ + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + int16_t tcx_offset[CPE_CHANNELS]; + int16_t tcx_offsetFB[CPE_CHANNELS]; + int16_t left_rect[CPE_CHANNELS]; + int16_t L_spec[CPE_CHANNELS]; + float sns_int_scf[FDNS_NPTS]; + + /* Initializations */ + sts = hCPE->hCoreCoder; + bfi = sts[0]->bfi; + + set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); + + /* TNS, ITF, IMDCT and updates */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + nSubframes[ch] = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; + L_frame_global[ch] = st->L_frame / nSubframes[ch]; + L_frameTCX_glob[ch] = st->hTcxDec->L_frameTCX / nSubframes[ch]; + L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) || ( st->bfi && st->core == ACELP_CORE ) ) /* indicates LFE with no content, or odd number of channels */ + { + if ( st->hTonalMDCTConc != NULL ) + { + TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, 0, bfi, 0 ); + } + + /* nothing to do for missing LFE */ + continue; + } + + for ( k = 0; k < nSubframes[ch]; k++ ) + { + init_tcx_info( st, L_frame_global[ch], L_frameTCX_glob[ch], k, bfi, &tcx_offset[ch], + &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); + + if ( !bfi ) + { + sns_interpolate_scalefactors( &sns_int_scf[0], &Aq[ch][k * M], DEC ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( isMCT && st->hTonalMDCTConc != NULL && ( ( k + 1 ) == nSubframes[ch] ) ) +#else + if ( isMCT && st->hTonalMDCTConc != NULL ) +#endif + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + int16_t infoIGFStartLine; + + if ( st->igf == 0 ) + { + if ( st->narrowBand == 0 ) + { + /* minimum needed for output with sampling rates lower then the + nominal sampling rate */ + infoIGFStartLine = min( L_frameTCX[ch], L_frame[ch] ); + } + else + { + infoIGFStartLine = L_frameTCX[ch]; + } + } + else + { + infoIGFStartLine = min( st->hIGFDec->infoIGFStartLine, L_frameTCX[ch] ); + } + + TonalMDCTConceal_SaveFreqSignal( st->hTonalMDCTConc, x[ch][k], L_frameTCX[ch], L_frame[ch], &sns_int_scf[0], infoIGFStartLine ); +#else + TonalMDCTConceal_SaveFreqSignal( st->hTonalMDCTConc, x[ch][k], L_frameTCX[ch], L_frame[ch], &sns_int_scf[0] ); +#endif + } + } + else + { + if ( st->hTonalMDCTConc != NULL ) + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->hTcxDec->cummulative_damping_tcx != 1.f ) + { + float *scf_last; + float *scf_bg; + float fade_in; + float fade_out; + + scf_last = &st->hTonalMDCTConc->lastBlockData.scaleFactors[0]; + scf_bg = &st->hTonalMDCTConc->scaleFactorsBackground[0]; + fade_out = st->hTcxDec->cummulative_damping_tcx; + fade_in = 1 - fade_out; + + for ( int16_t i = 0; i < st->hTonalMDCTConc->nScaleFactors; i++ ) + { + sns_int_scf[i] = fade_out * scf_last[i] + fade_in * scf_bg[i]; + } + } + else + { + mvr2r( st->hTonalMDCTConc->lastBlockData.scaleFactors, &sns_int_scf[0], st->hTonalMDCTConc->nScaleFactors ); + } +#else + mvr2r( st->hTonalMDCTConc->lastBlockData.scaleFactors, &sns_int_scf[0], st->hTonalMDCTConc->nScaleFactors ); +#endif + } + } + + decoder_tcx_tns( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], &x[ch][k][0], + fUseTns[ch][k], &tnsData[ch][k], bfi, k, 1 ); + + sns_shape_spectrum( x[ch][k], st->hTcxCfg->psychParamsCurrent, &sns_int_scf[0], st->hTcxCfg->psychParamsCurrent->nBins ); + v_multc( x[ch][k] + st->hTcxCfg->psychParamsCurrent->nBins, sns_int_scf[FDNS_NPTS - 1], x[ch][k] + st->hTcxCfg->psychParamsCurrent->nBins, L_spec[ch] - st->hTcxCfg->psychParamsCurrent->nBins ); + + decoder_tcx_tns( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], &x[ch][k][0], + fUseTns[ch][k], &tnsData[ch][k], bfi, k, 0 ); + } + + if ( bfi && st->tonal_mdct_plc_active ) + { + TonalMDCTConceal_Apply( st->hTonalMDCTConc, x[ch][0], st->hTcxCfg->psychParamsCurrent ); + } + + if ( ( bfi || isMCT ) && st->hTonalMDCTConc != NULL ) + { + TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX[ch], ( st->hTcxDec->tcxltp_last_gain_unmodified > 0 ) ? st->old_fpitch : 0, bfi, bfi && st->tonal_mdct_plc_active ); + } + } + + return; +} diff --git a/lib_dec/ivas_mono_dmx_renderer.c b/lib_dec/ivas_mono_dmx_renderer.c new file mode 100644 index 0000000000..468b0215b0 --- /dev/null +++ b/lib_dec/ivas_mono_dmx_renderer.c @@ -0,0 +1,168 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define DOWNMIX_ALPHA 0.95f /* Smoothing coefficient */ +#define DOWNMIX_MAX_GAIN 4.0f /* Maximum allowed gain */ +#define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4 + + +/*------------------------------------------------------------------------- + * ivas_mono_dmx_renderer_open() + * + * Open decoder downmix handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_mono_dmx_renderer_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + MONO_DOWNMIX_RENDERER_HANDLE hDownmix; + + if ( ( hDownmix = (MONO_DOWNMIX_RENDERER_HANDLE) count_malloc( sizeof( MONO_DOWNMIX_RENDERER_STRUCT ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for downmixing\n" ) ); + } + + set_zero( hDownmix->inputEnergy, CLDFB_NO_CHANNELS_MAX ); + set_zero( hDownmix->protoEnergy, CLDFB_NO_CHANNELS_MAX ); + + st_ivas->hMonoDmxRenderer = hDownmix; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_mono_downmix_render_passive() + * + * Downmix process + *------------------------------------------------------------------------*/ + +void ivas_mono_downmix_render_passive( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/mono output */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t i, j, numInputChannels; + float proto_signal[L_FRAME48k], eq; + MONO_DOWNMIX_RENDERER_HANDLE hDownmix; + + numInputChannels = st_ivas->nSCE; + hDownmix = st_ivas->hMonoDmxRenderer; + set_zero( proto_signal, output_frame ); + + /* Compute the Proto Signal */ + for ( i = 0; i < numInputChannels; i++ ) + { + v_add( output_f[i], proto_signal, proto_signal, output_frame ); + } + + /* compute the input energy, proto energy after smoothing */ + hDownmix->inputEnergy[0] *= DOWNMIX_ALPHA; + hDownmix->protoEnergy[0] *= DOWNMIX_ALPHA; + for ( i = 0; i < output_frame; i++ ) + { + hDownmix->protoEnergy[0] += proto_signal[i] * proto_signal[i]; + for ( j = 0; j < numInputChannels; j++ ) + { + hDownmix->inputEnergy[0] += ( output_f[j][i] * output_f[j][i] ); + } + } + + /* compute the eq factor */ + eq = min( DOWNMIX_MAX_GAIN, sqrtf( hDownmix->inputEnergy[0] / ( EPSILON + hDownmix->protoEnergy[0] ) ) ); + + /* equalize the downmix */ + v_multc( proto_signal, eq, output_f[0], output_frame ); + + return; +} + +/*------------------------------------------------------------------------- + * ivas_mono_stereo_downmix_mcmasa() + * + * Downmix process + *------------------------------------------------------------------------*/ + +void ivas_mono_stereo_downmix_mcmasa( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/mono or stereo output */ + int16_t output_frame /* i : output frame length per channel */ +) +{ + int16_t i; + + float dmx_tmp[L_FRAME48k]; + + set_zero( dmx_tmp, output_frame ); + + /* Dowmix center channel to L and R */ + if ( st_ivas->hDecoderConfig->nchan_out == 2 && st_ivas->hOutSetup.separateChannelEnabled ) + { + v_multc_acc( output_f[st_ivas->hOutSetup.separateChannelIndex], INV_SQRT2, output_f[0], output_frame ); + v_multc_acc( output_f[st_ivas->hOutSetup.separateChannelIndex], INV_SQRT2, output_f[1], output_frame ); + } + /* Mono downmix */ + else if ( st_ivas->hDecoderConfig->nchan_out == 1 ) + { + /* Downmix L and R to dmx_tmp */ + for ( i = 0; i < st_ivas->nchan_transport; i++ ) + { + v_multc_acc( output_f[i], INV_SQRT2, dmx_tmp, output_frame ); + } + /* Add center channel */ + if ( st_ivas->hOutSetup.separateChannelEnabled ) + { + v_add( output_f[st_ivas->hOutSetup.separateChannelIndex], dmx_tmp, dmx_tmp, output_frame ); + } + + /* Move to output */ + mvr2r( dmx_tmp, output_f[0], output_frame ); + } +} diff --git a/lib_dec/ivas_objectRenderer.c b/lib_dec/ivas_objectRenderer.c new file mode 100644 index 0000000000..43aa475e7d --- /dev/null +++ b/lib_dec/ivas_objectRenderer.c @@ -0,0 +1,414 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include +#include "wmops.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ +static ivas_error TDREND_GetMix( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, float output[][L_FRAME48k], const int16_t output_frame, const int32_t output_Fs ); +static void TDREND_Clear_Update_flags( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd ); + +/*---------------------------------------------------------------------* + * ivas_td_binaural_open() + * + * Open and initialize TD Object binaural renderer + *---------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error ivas_td_binaural_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd; + TDREND_PosType_t PosType; + int16_t nS; + int16_t SrcInd[MAX_NUM_TDREND_CHANNELS]; + const float *ls_azimuth, *ls_elevation; + float Pos[3]; + float Dir[3]; + TDREND_DirAtten_t *DirAtten_p; + int16_t nchan_rend; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( hBinRendererTd = count_malloc( sizeof( BINAURAL_TD_OBJECT_RENDERER ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); + } + if ( ( hBinRendererTd->TdRend_MixSpatSpec_p = count_malloc( sizeof( TDREND_MixSpatSpec_t ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); + } + if ( ( hBinRendererTd->DirAtten_p = count_malloc( sizeof( TDREND_DirAtten_t ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); + } + if ( ( hBinRendererTd->Listener_p = count_malloc( sizeof( TDREND_MIX_Listener_t ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); + } + + hBinRendererTd->NumOfSrcs = 0; + hBinRendererTd->MaxSrcInd = -1; + + /* Mixer spatial setup */ + hBinRendererTd->TdRend_MixSpatSpec_p->UseCommonDistAttenModel = TRUE; + hBinRendererTd->TdRend_MixSpatSpec_p->DistAttenModel = 0; /* 0=Turned off, else use TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED */ + + TDREND_MIX_Init( hBinRendererTd, &st_ivas->hHrtfTD, hBinRendererTd->TdRend_MixSpatSpec_p, st_ivas->hDecoderConfig->output_Fs ); + + /* Set the attenuation (or can set MixSpatSpec.DistAttenModel above) */ + TDREND_MIX_SetDistAttenModel( hBinRendererTd, TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED ); + + /* Add sources to module and mixer, headphones */ + PosType = TDREND_POSTYPE_ABSOLUTE; /* or TDREND_POSTYPE_RELATIVE_TO_LISTENER */ + + nchan_rend = st_ivas->nchan_transport; + if ( st_ivas->ivas_format == MC_FORMAT ) + { + nchan_rend--; /* Skip LFE channel -- added to the others */ + } + + for ( nS = 0; nS < nchan_rend; nS++ ) + { + if ( ( error = TDREND_MIX_AddSrc( hBinRendererTd, &SrcInd[nS], PosType, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st_ivas->ivas_format == MC_FORMAT ) + { + switch ( st_ivas->transport_config ) + { + case AUDIO_CONFIG_5_1: + ls_azimuth = ls_azimuth_CICP6; + ls_elevation = ls_elevation_CICP6; + break; + case AUDIO_CONFIG_7_1: + ls_azimuth = ls_azimuth_CICP12; + ls_elevation = ls_elevation_CICP12; + break; + case AUDIO_CONFIG_5_1_2: + ls_azimuth = ls_azimuth_CICP14; + ls_elevation = ls_elevation_CICP14; + break; + case AUDIO_CONFIG_5_1_4: + ls_azimuth = ls_azimuth_CICP16; + ls_elevation = ls_elevation_CICP16; + break; + case AUDIO_CONFIG_7_1_4: + ls_azimuth = ls_azimuth_CICP19; + ls_elevation = ls_elevation_CICP19; + break; + default: + ls_azimuth = NULL; + ls_elevation = NULL; + } + + DirAtten_p = hBinRendererTd->DirAtten_p; + + for ( nS = 0; nS < nchan_rend; nS++ ) + { + /* Set source positions according to loudspeaker layout */ + Pos[0] = cosf( ls_elevation[nS] * PI_OVER_180 ) * cosf( ls_azimuth[nS] * PI_OVER_180 ); + Pos[1] = cosf( ls_elevation[nS] * PI_OVER_180 ) * sinf( ls_azimuth[nS] * PI_OVER_180 ); + Pos[2] = sinf( ls_elevation[nS] * PI_OVER_180 ); + Dir[0] = 1.0f; + Dir[1] = 0.0f; + Dir[2] = 0.0f; + + /* Source directivity info */ + DirAtten_p->ConeInnerAngle = 360.0f; + DirAtten_p->ConeOuterAngle = 360.0f; + DirAtten_p->ConeOuterGain = 1.0f; + + TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos ); + TDREND_MIX_SRC_SetDir( hBinRendererTd, nS, Dir ); + TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); + TDREND_MIX_SRC_SetDirAtten( hBinRendererTd, nS, DirAtten_p ); + } + } + + st_ivas->hBinRendererTd = hBinRendererTd; + + st_ivas->binaural_latency_ns = (int32_t) ( BINAURAL_TD_LATENCY_S * 1000000000.f ); + + return error; +} + + +/*---------------------------------------------------------------------* + * ivas_td_binaural_close() + * + * Close TD Object binaural renderer + *---------------------------------------------------------------------*/ + +void ivas_td_binaural_close( + BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */ +) +{ + if ( hBinRendererTd == NULL || *hBinRendererTd == NULL ) + { + return; + } + + count_free( ( *hBinRendererTd )->TdRend_MixSpatSpec_p ); + count_free( ( *hBinRendererTd )->DirAtten_p ); + + TDREND_MIX_Dealloc( *hBinRendererTd ); + + count_free( *hBinRendererTd ); + *hBinRendererTd = NULL; + + return; +} + + +/*---------------------------------------------------------------------* + * ObjRenderIVASFrame() + * + * Receives the current frames for the object streams, updates metadata + * and renders the current frame. + *---------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error ObjRenderIVASFrame( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k], /* i/o: SCE channels / Binaural synthesis */ + const int16_t output_frame /* i : output frame length */ +) +{ + TDREND_DirAtten_t *DirAtten_p; + int16_t nS; + float Pos[3]; + float Dir[3]; + float FrontVec[3]; + float UpVec[3]; + float Rmat[3][3]; + int16_t c_indx; + int16_t subframe_idx; + float reverb_signal[BINAURAL_CHANNELS][L_FRAME48k]; + + DirAtten_p = st_ivas->hBinRendererTd->DirAtten_p; + + /* Update the listener's location/orientation */ + /* Listener at the origin */ + Pos[0] = 0.0f; + Pos[1] = 0.0f; + Pos[2] = 0.0f; + + if ( st_ivas->hHeadTrackData != NULL ) + { + /* Obtain head rotation matrix */ + QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[0], Rmat ); + /* Apply rotation matrix to looking vector [1;0;0] */ + FrontVec[0] = Rmat[0][0]; + FrontVec[1] = Rmat[0][1]; + FrontVec[2] = Rmat[0][2]; + /* Apply rotation matrix to up vector [0;0;1] */ + UpVec[0] = Rmat[2][0]; + UpVec[1] = Rmat[2][1]; + UpVec[2] = Rmat[2][2]; + } + else + { + /* Oriented with looking vector along the x axis */ + FrontVec[0] = 1.0f; + FrontVec[1] = 0.0f; + FrontVec[2] = 0.0f; + /* Oriented with up vector along the z axis */ + UpVec[0] = 0.0f; + UpVec[1] = 0.0f; + UpVec[2] = 1.0f; + } + + /* Set the listener position and orientation:*/ + TDREND_MIX_LIST_SetPos( st_ivas->hBinRendererTd, Pos ); + TDREND_MIX_LIST_SetOrient( st_ivas->hBinRendererTd, FrontVec, UpVec ); + + /* For each source, write the frame data to the source object*/ + c_indx = 0; + for ( nS = 0; nS < st_ivas->nchan_transport; nS++ ) + { + if ( !( st_ivas->ivas_format == MC_FORMAT && nS == LFE_CHANNEL ) ) /* Skip LFE for MC */ + { + st_ivas->hBinRendererTd->Sources[c_indx]->InputFrame_p = output[nS]; + st_ivas->hBinRendererTd->Sources[c_indx]->SrcRend_p->InputAvailable = TRUE; + c_indx++; + } + + if ( st_ivas->ivas_format == ISM_FORMAT ) + { + + /* Update the source positions */ + /* Source position and direction */ + Pos[0] = cosf( st_ivas->hIsmMetaData[nS]->elevation * PI_OVER_180 ) * cosf( st_ivas->hIsmMetaData[nS]->azimuth * PI_OVER_180 ); + Pos[1] = cosf( st_ivas->hIsmMetaData[nS]->elevation * PI_OVER_180 ) * sinf( st_ivas->hIsmMetaData[nS]->azimuth * PI_OVER_180 ); + Pos[2] = sinf( st_ivas->hIsmMetaData[nS]->elevation * PI_OVER_180 ); + Dir[0] = 1.0f; + Dir[1] = 0.0f; + Dir[2] = 0.0f; + + /* Source directivity info */ + DirAtten_p->ConeInnerAngle = 360.0f; + DirAtten_p->ConeOuterAngle = 360.0f; + DirAtten_p->ConeOuterGain = 1.0f; + + TDREND_MIX_SRC_SetPos( st_ivas->hBinRendererTd, nS, Pos ); + TDREND_MIX_SRC_SetDir( st_ivas->hBinRendererTd, nS, Dir ); + TDREND_MIX_SRC_SetDirAtten( st_ivas->hBinRendererTd, nS, DirAtten_p ); + TDREND_MIX_SRC_SetPlayState( st_ivas->hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); + } + } + + if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) + { + if ( st_ivas->ini_frame == 0 ) + { + ivas_reverb_open( &st_ivas->hCrend->hReverb, NULL, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ); + } + for ( subframe_idx = 0; subframe_idx < 4; subframe_idx++ ) + { + ivas_reverb_process( st_ivas->hCrend->hReverb, st_ivas->transport_config, 0, output, reverb_signal, subframe_idx ); + } + } + + /* Call the renderer */ + TDREND_GetMix( st_ivas->hBinRendererTd, output, output_frame, st_ivas->hDecoderConfig->output_Fs ); + + if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) + { + /* add reverb to rendered signals */ + v_add( reverb_signal[0], output[0], output[0], output_frame ); + v_add( reverb_signal[1], output[1], output[1], output_frame ); + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * TDREND_GetMix() + * + * Render one output frame from the mixer + *---------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +static ivas_error TDREND_GetMix( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + float output[][L_FRAME48k], /* i/o: ISm object synth / rendered output in 0,1 */ + const int16_t output_frame, /* i/o: Output frame length */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + int16_t i; + TDREND_SRC_t *Src_p; + TDREND_SRC_SPATIAL_t *SrcSpatial_p; + TDREND_SRC_REND_t *SrcRend_p; + ivas_error result; + float output_buf[2][L_FRAME48k]; /* Temp buffer for left/right rendered signal */ + + result = IVAS_ERR_OK; + + /* Zero out the output buffer since objects are accumulated. */ + set_f( output_buf[0], 0.0f, output_frame ); + set_f( output_buf[1], 0.0f, output_frame ); + + /* Create the mix */ + /* Loop through the source list and render each source */ + for ( i = 0; i < hBinRendererTd->NumOfSrcs; i++ ) + { + Src_p = hBinRendererTd->Sources[i]; + SrcSpatial_p = Src_p->SrcSpatial_p; + SrcRend_p = Src_p->SrcRend_p; + + /* Update rendering params if needed */ + if ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) + { + TDREND_SRC_REND_UpdateFiltersFromSpatialParams( hBinRendererTd, SrcRend_p, SrcSpatial_p, output_Fs ); + } + + /* Render source if needed */ + if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) ) + { +#ifdef TDREND_HRTF_TABLE_METHODS + result = TDREND_REND_RenderSourceHRFilt( Src_p, hBinRendererTd, output_buf, output_frame, output_Fs ); +#else + result = TDREND_REND_RenderSourceHRFilt( Src_p, output_buf, output_frame, output_Fs ); +#endif + } + SrcRend_p->InputAvailable = FALSE; + } + + /* Populate output variable */ + mvr2r( output_buf[0], output[0], output_frame ); /* Left */ + mvr2r( output_buf[1], output[1], output_frame ); /* Right */ + + /* Clear the mixer update flags */ + TDREND_Clear_Update_flags( hBinRendererTd ); + + return result; +} + + +/*---------------------------------------------------------------------* + * TDREND_Clear_Update_flags() + * + * Initializes the audio mixer module + *---------------------------------------------------------------------*/ + +static void TDREND_Clear_Update_flags( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ +) +{ + int16_t i; + + hBinRendererTd->Listener_p->PoseUpdated = FALSE; + for ( i = 0; i < hBinRendererTd->NumOfSrcs; i++ ) + { + hBinRendererTd->Sources[i]->SrcSpatial_p->Updated = FALSE; + } + return; +} diff --git a/lib_dec/ivas_objectRenderer_hrFilt.c b/lib_dec/ivas_objectRenderer_hrFilt.c new file mode 100644 index 0000000000..fd2011a7d6 --- /dev/null +++ b/lib_dec/ivas_objectRenderer_hrFilt.c @@ -0,0 +1,1339 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "prot.h" +#include +#include "ivas_prot.h" +#include "ivas_rom_dec.h" +#include "ivas_cnst.h" +#include "ivas_rom_TdBinauralRenderer.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void getPeriodicBSplineSampVec( float *BfVec, int16_t *AzIdx, const int16_t NumBFs, const float t, int16_t *num_az_idx, const float knot_interval, const float azimKSeq_0, const int16_t azimSegSamples, const float *azimBsShape, const int16_t subSampFactor ); +static void getStandardBSplineSampVec( float *BfVec, int16_t *NzIdx, int16_t *num_idx, const int16_t NumBFs, const float t, const float *KSeq, const int16_t SegSamples, const int16_t *BsLen, const int16_t *BsStart, const float *BsShape ); +static void GenerateFilter( const float elev, float azim, ModelParams_t *model, ModelEval_t *modelEval ); +static void GenerateITD( const float elev, float azim, ModelParamsITD_t *model, ModelEval_t *modelEval ); +static void SkipSmallest_ValueIndex( int16_t *use_inds, const ValueIndex_t *VI, const int16_t N, const int16_t n_smallest ); + +#ifdef TDREND_HRTF_TABLE_METHODS +static float GreatCircleAngleDeg( float Az1, float El1, float Az2, float El2 ); +static void GetFilterFromAngle_M( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, const float Elev, float Azim, SFX_SpatBin_Params_t *SfxSpatBinParams_p ); + +/*-------------------------------------------------------------------* + * TDREND_HRFILT_SetFiltSet() + * + * Load table format HR filter set from file. + --------------------------------------------------------------------*/ + +void TDREND_HRFILT_SetFiltSet( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR hilter set structure */ + FILE *f_hrtf /* i : File handle for HR filter parameters */ +) +{ + float Scaler_HrfGain; + int16_t n; + + int16_t num_to_read, num_bytes; + double temp; + int16_t temp_s; + double *buffer_p = NULL; + double *temp_p; + double *FiltSetIntLeft_p = NULL, *FiltSetIntRight_p = NULL; + double *FiltIntLeft0_p = NULL, *FiltIntLeft_p = NULL, *FiltIntRight0_p = NULL, *FiltIntRight_p = NULL; + double *LeftFilt_p = NULL, *RightFilt_p = NULL; + float *LeftFiltFlp_p = NULL, *RightFiltFlp_p = NULL; + + int32_t mem_size; + int16_t i; + +#ifdef TDREND_HRTF_TABLE_METHODS + int16_t count, m; +#endif + + /* The setting of Scaler_HrfGain varies among HR filter dataset */ + + Scaler_HrfGain = 1.0f; + + /* read the sampling rate */ + fread( &temp_s, sizeof( int16_t ), 1, f_hrtf ); + + switch ( temp_s ) + { + case 16: + HrFiltSet_p->SampleRate = 16000; + break; + case 32: + HrFiltSet_p->SampleRate = 32000; + break; + case 48: + HrFiltSet_p->SampleRate = 48000; + break; + default: +#ifdef DEBUGGING + IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Error: HR filter file had an unsupported sampling rate (%d kHz).\n\n", temp_s ); +#endif + } + + num_bytes = sizeof( double ); + num_to_read = 1; + + /* read the filter length */ + fread( &temp, num_bytes, num_to_read, f_hrtf ); + HrFiltSet_p->FiltLength = (int16_t) temp; + + /* read the distance */ + fread( &temp, num_bytes, num_to_read, f_hrtf ); + HrFiltSet_p->Dist = (float) temp; + /* read the number of positions */ + fread( &temp, num_bytes, num_to_read, f_hrtf ); + HrFiltSet_p->NumPos = (int16_t) temp; + + if ( HrFiltSet_p->FilterMethod == TDREND_HRFILT_Method_Table_F ) + { + /* Number of elevation angles */ + fread( &temp, num_bytes, num_to_read, f_hrtf ); + HrFiltSet_p->NumElev = (int16_t) temp; + + /* Elevation angles */ + HrFiltSet_p->Elev_p = (float *) count_malloc( HrFiltSet_p->NumElev * sizeof( float ) ); + buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + num_to_read = HrFiltSet_p->NumElev; + fread( (void *) buffer_p, num_bytes, num_to_read, f_hrtf ); + temp_p = buffer_p; + HrFiltSet_p->ElevIncr = (float) ( buffer_p[1] - buffer_p[0] ); + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + HrFiltSet_p->Elev_p[n] = (float) *temp_p++; + if ( n > 0 && fabsf( ( HrFiltSet_p->Elev_p[n] - HrFiltSet_p->Elev_p[n - 1] - HrFiltSet_p->ElevIncr ) ) > 0.01 ) + { +#ifdef DEBUGGING + printf( "Error: HR Filter elevation values had irregular spacing.\n\n" ); +#endif + assert( 0 && "Error: HR Filter elevation values had irregular spacing." ); + } + } + count_free( buffer_p ); + + /* Number of azimuth values, one per elevation */ + HrFiltSet_p->NumAzim_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumElev, f_hrtf ); + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + HrFiltSet_p->NumAzim_p[n] = (int16_t) buffer_p[n]; + } + count_free( buffer_p ); + + /* Indices to the first azimuth value, one per elevation */ + HrFiltSet_p->AzimStartIdx_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + count = 0; + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + HrFiltSet_p->AzimStartIdx_p[n] = count; + count += HrFiltSet_p->NumAzim_p[n]; + } + if ( count != HrFiltSet_p->NumPos ) + { +#ifdef DEBUGGING + printf( "Error: Inconsistent number of points in HR filter file.\n\n" ); +#endif + assert( 0 && "Error: Inconsistent number of points in HR filter file." ); + } + + /* Azimuth values, one set per elevation, i.e. one per measurement point */ + HrFiltSet_p->Azim_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + buffer_p = (double *) count_malloc( HrFiltSet_p->NumPos * sizeof( double ) ); + HrFiltSet_p->ElevFull_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumPos, f_hrtf ); + i = 0; + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + for ( m = 0; m < HrFiltSet_p->NumAzim_p[n]; m++ ) + { + HrFiltSet_p->Azim_p[i] = (float) buffer_p[i]; + HrFiltSet_p->ElevFull_p[i] = HrFiltSet_p->Elev_p[n]; + /* Range needs to be (-180, 180] */ + if ( HrFiltSet_p->Azim_p[i] > 180.0 ) + { + HrFiltSet_p->Azim_p[i] -= 360.0; + } + i++; + } + } + count_free( buffer_p ); + } + if ( HrFiltSet_p->FilterMethod == TDREND_HRFILT_Method_Table_S ) + { + /* Number of elevation angles */ + fread( &temp, num_bytes, num_to_read, f_hrtf ); + HrFiltSet_p->NumElev = (int16_t) temp; + + /* Elevation angles */ + HrFiltSet_p->Elev_p = (float *) count_malloc( HrFiltSet_p->NumElev * sizeof( float ) ); + buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + num_to_read = HrFiltSet_p->NumElev; + fread( (void *) buffer_p, num_bytes, num_to_read, f_hrtf ); + temp_p = buffer_p; + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + HrFiltSet_p->Elev_p[n] = (float) *temp_p++; + } + count_free( buffer_p ); + + /* Number of azimuth values, one per elevation */ + HrFiltSet_p->NumAzim_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumElev, f_hrtf ); + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + HrFiltSet_p->NumAzim_p[n] = (int16_t) buffer_p[n]; + } + count_free( buffer_p ); + + /* Indices to the first azimuth value, one per elevation */ + HrFiltSet_p->AzimStartIdx_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + count = 0; + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + HrFiltSet_p->AzimStartIdx_p[n] = count; + count += HrFiltSet_p->NumAzim_p[n]; + } + if ( count != HrFiltSet_p->NumPos ) + { +#ifdef DEBUGGING + printf( "Inconsistent number of points in HR filter file.\n\n" ); +#endif + assert( 0 && "Inconsistent number of points in HR filter file." ); + } + + /* Azimuth values, one set per elevation, i.e. one per measurement point */ + HrFiltSet_p->Azim_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + buffer_p = (double *) count_malloc( HrFiltSet_p->NumPos * sizeof( double ) ); + HrFiltSet_p->ElevFull_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumPos, f_hrtf ); + i = 0; + for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) + { + for ( m = 0; m < HrFiltSet_p->NumAzim_p[n]; m++ ) + { + HrFiltSet_p->Azim_p[i] = (float) buffer_p[i]; + HrFiltSet_p->ElevFull_p[i] = HrFiltSet_p->Elev_p[n]; + /* Range needs to be (-180, 180] */ + if ( HrFiltSet_p->Azim_p[i] > 180.0 ) + { + HrFiltSet_p->Azim_p[i] -= 360.0; + } + i++; + } + } + count_free( buffer_p ); + } + + /* allocate memory to LeftFilt and RightFilt */ + mem_size = ( HrFiltSet_p->NumPos * HrFiltSet_p->FiltLength * sizeof( double ) ); + + FiltSetIntRight_p = (double *) count_malloc( mem_size ); + FiltSetIntLeft_p = (double *) count_malloc( mem_size ); + RightFilt_p = FiltSetIntRight_p; + LeftFilt_p = FiltSetIntLeft_p; + + /* read the HR filters */ + for ( i = 0; i < HrFiltSet_p->NumPos; i++ ) + { + /* read the left filter */ + fread( (void *) LeftFilt_p, num_bytes, HrFiltSet_p->FiltLength, f_hrtf ); + /* read the right filter */ + fread( (void *) RightFilt_p, num_bytes, HrFiltSet_p->FiltLength, f_hrtf ); + + LeftFilt_p += HrFiltSet_p->FiltLength; + RightFilt_p += HrFiltSet_p->FiltLength; + } + + /* Check that the whole file was read. */ + getc( f_hrtf ); + if ( !feof( f_hrtf ) ) + { +#ifdef DEBUGGING + printf( "Error: The HRTF filter file size was larger than expected.\n\n" ); +#endif + assert( 0 && "Error: The HRTF filter file size was larger than expected." ); + } + + /* IMPORTANT: We are now using reversed FIR filters as they */ + /* result in better SIMD (neon) optimization */ + /* Copy, and reverse the filter sets */ + + mem_size = ( HrFiltSet_p->NumPos * HrFiltSet_p->FiltLength * sizeof( float ) ); + RightFiltFlp_p = (float *) count_malloc( mem_size ); + LeftFiltFlp_p = (float *) count_malloc( mem_size ); + HrFiltSet_p->RightFiltSet_p = RightFiltFlp_p; + HrFiltSet_p->LeftFiltSet_p = LeftFiltFlp_p; + + FiltIntRight0_p = FiltSetIntRight_p + (int16_t) HrFiltSet_p->FiltLength - 1; + FiltIntLeft0_p = FiltSetIntLeft_p + (int16_t) HrFiltSet_p->FiltLength - 1; + + for ( i = 0; i < HrFiltSet_p->NumPos; i++ ) + { + /* Copy right filter */ + FiltIntRight_p = FiltIntRight0_p; + for ( n = 0; n < HrFiltSet_p->FiltLength; n++ ) + { + *RightFiltFlp_p++ = Scaler_HrfGain * (float) ( *FiltIntRight_p-- ); + } + FiltIntRight0_p += HrFiltSet_p->FiltLength; + + /* Copy left filter */ + FiltIntLeft_p = FiltIntLeft0_p; + for ( n = 0; n < HrFiltSet_p->FiltLength; n++ ) + { + *LeftFiltFlp_p++ = Scaler_HrfGain * (float) ( *FiltIntLeft_p-- ); + } + FiltIntLeft0_p += HrFiltSet_p->FiltLength; + } + + count_free( FiltSetIntLeft_p ); + count_free( FiltSetIntRight_p ); + + return; +} +#endif + + +/*-------------------------------------------------------------------* + * TDREND_REND_RenderSourceHRFilt() + * + * Renders each object using the HR filters + --------------------------------------------------------------------*/ + +ivas_error TDREND_REND_RenderSourceHRFilt( + const TDREND_SRC_t *Src_p, /* i/o: The source to be rendered */ +#ifdef TDREND_HRTF_TABLE_METHODS + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ +#endif + float output_buf[][L_FRAME48k], /* o : Output buffer */ + const int16_t output_frame, /* i : Output frame length in use */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + ivas_error SFX_Result; + TDREND_SRC_REND_t *SrcRend_p; + int16_t nS; + float *InFrame_nIC_p; + int16_t NoOfUsedInputSamples, NoOfDeliveredOutputSamples; + float LeftOutputFrame[L_FRAME48k]; + float RightOutputFrame[L_FRAME48k]; + float *LeftOutputFrame_p, *RightOutputFrame_p; + float *LeftAccOutputFrame_p, *RightAccOutputFrame_p; + + /* Input channel rendering loop */ + InFrame_nIC_p = Src_p->InputFrame_p; + SrcRend_p = Src_p->SrcRend_p; + + /* Gain not currently encoded/used */ + /* SrcGain = Mix_p->Gain * ( *SrcRend_p->SrcGain_p ); */ + /* SrcGain *= ( *SrcRend_p->DirGain_p ) * ( *SrcRend_p->DistGain_p ); */ + + SFX_Result = TDREND_SFX_SpatBin_Execute_Main( SrcRend_p->SfxSpatBin_p, InFrame_nIC_p, output_frame, + LeftOutputFrame, RightOutputFrame, + &NoOfUsedInputSamples, &NoOfDeliveredOutputSamples, output_Fs ); + +#ifdef TDREND_HRTF_TABLE_METHODS + if ( hBinRendererTd->HrFiltSet_p->FilterMethod != TDREND_HRFILT_Method_BSplineModel ) + { + SrcRend_p->SfxSpatBin_p->HrFilterInterpOn = 1; /* Turn on after first frame is rendered. */ + } +#endif + + /* Copy to accumulative output frame */ + LeftOutputFrame_p = LeftOutputFrame; + RightOutputFrame_p = RightOutputFrame; + LeftAccOutputFrame_p = output_buf[0]; + RightAccOutputFrame_p = output_buf[1]; + for ( nS = 0; nS < output_frame; nS++ ) + { + *LeftAccOutputFrame_p++ += *LeftOutputFrame_p++; + *RightAccOutputFrame_p++ += *RightOutputFrame_p++; + } + + return SFX_Result; +} + + +#ifdef TDREND_HRTF_TABLE_METHODS +/*-------------------------------------------------------------------* + * GetFilterFromAngle_F() + * + * Obtain an HR filter corresponding to the input angle pair. + * This version is for FABIAN format. + --------------------------------------------------------------------*/ + +static void GetFilterFromAngle_F( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ + const float Elev, /* i : Elevation, degrees */ + float Azim, /* i : Azimuth, degrees */ + SFX_SpatBin_Params_t *SfxSpatBinParams_p /* i/o: Currently used HR filter */ +) +{ + int16_t AzimInd, ElevInd, n; + int16_t ElevIndLo; + int16_t ElevIndHi; + int16_t flipped = 0; + float AzimMod; + float AzimLo, AzimHi; + uint32_t HrFiltInd; + int32_t CandidateIndices[100]; /* Stores the indices of the candidate points. */ + float CandidateAngles[100]; /* Stores the angular distance between the candidate and the test point. */ + int16_t c = 0; + int16_t test; + float CandidateAzim, CandidateElev, min; + + /* Note need to support azimuth range [-180,180] since this is what is returned by atan2f. AzimMod is on the */ + /* range (-180,180]. This should be faster than doing a full mod(360) etc. */ + if ( Azim == -180.0f ) + { + AzimMod = 180.0f; + } + else + { + AzimMod = Azim; + } + + /* Use the nearest filter point. Since the azimuth is not assumed to be the same for */ + /* different elevations, make a shortlist of rows to check, and a range azimuth to check. */ + ElevInd = (int16_t) roundf( ( Elev - HrFiltSet_p->Elev_p[0] ) / HrFiltSet_p->ElevIncr ); /* Regular elevation spacing */ + if ( ElevInd < 0 ) + { + ElevInd = 0; + } + else if ( ElevInd >= HrFiltSet_p->NumElev ) + { + ElevInd = HrFiltSet_p->NumElev - 1; + } + ElevIndLo = max( 0, ElevInd - 2 ); + ElevIndHi = min( HrFiltSet_p->NumElev - 1, ElevInd + 2 ); + + AzimLo = AzimMod - 15; + if ( AzimLo <= -180.0 ) + { + AzimLo += 360.0; + } + AzimHi = AzimMod + 15; + if ( AzimHi > 360.0 ) + { + AzimHi -= 360.0; + } + + if ( AzimHi < AzimLo ) + { + flipped = 1; + } + + /* Check each candidate elevation row, and each azimuth value in that row, to make a list of candidate points. */ + for ( ElevInd = ElevIndLo; ElevInd <= ElevIndHi; ElevInd++ ) + { + for ( AzimInd = HrFiltSet_p->AzimStartIdx_p[ElevInd]; + AzimInd < HrFiltSet_p->AzimStartIdx_p[ElevInd] + HrFiltSet_p->NumAzim_p[ElevInd]; + AzimInd++ ) + { + if ( flipped == 0 ) + { + test = HrFiltSet_p->Azim_p[AzimInd] >= AzimLo && HrFiltSet_p->Azim_p[AzimInd] <= AzimHi; + } + else + { + /* This is the case where the limits straddle the +/- 180 discontinuity */ + test = HrFiltSet_p->Azim_p[AzimInd] >= AzimLo || HrFiltSet_p->Azim_p[AzimInd] <= AzimHi; + } + if ( test ) + { + /* Azim value is within range, store it */ + CandidateIndices[c] = AzimInd; + c++; + } + } + } + + for ( n = 0; n < c; n++ ) + { + CandidateAzim = HrFiltSet_p->Azim_p[CandidateIndices[n]]; + CandidateElev = HrFiltSet_p->ElevFull_p[CandidateIndices[n]]; + CandidateAngles[n] = GreatCircleAngleDeg( AzimMod, Elev, CandidateAzim, CandidateElev ); + } + + /* Find the candidate with the minimum angle/distance */ + min = CandidateAngles[0]; + HrFiltInd = CandidateIndices[0]; + for ( n = 1; n < c; n++ ) + { + if ( CandidateAngles[n] < min ) + { + min = CandidateAngles[n]; + HrFiltInd = CandidateIndices[n]; + } + } + + HrFiltInd *= HrFiltSet_p->FiltLength; + + /* 3. No extracted ITD. */ + SfxSpatBinParams_p->Itd = 0; + + /* 4. Copy the filter over */ + for ( n = 0; n < HrFiltSet_p->FiltLength; n++ ) + { + SfxSpatBinParams_p->LeftFilter_p[n] = HrFiltSet_p->LeftFiltSet_p[HrFiltInd + n]; + SfxSpatBinParams_p->RightFilter_p[n] = HrFiltSet_p->RightFiltSet_p[HrFiltInd + n]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * GetFilterFromAngle_S() + * + * Obtain an HR filter corresponding to the input angle pair. + * This version is for SADIE format. + --------------------------------------------------------------------*/ + +static void GetFilterFromAngle_S( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ + const float Elev, /* i : Elevation, degrees */ + float Azim, /* i : Azimuth, degrees */ + SFX_SpatBin_Params_t *SfxSpatBinParams_p /* i/o: Currently used HR filter */ +) +{ + int16_t AzimInd, n; + int16_t ElevInd = -1; + int16_t ElevIndLo; + int16_t ElevIndHi; + int16_t flipped = 0; + float ElevDiff = 200.f; + float AzimMod, AzimLo, AzimHi; + uint32_t HrFiltInd; + int32_t CandidateIndices[400]; /* Stores the indices of the candidate points. */ + float CandidateAngles[400]; /* Stores the angular distance between the candidate and the test point. */ + int16_t c; + int16_t test; + float CandidateAzim, CandidateElev, min; + + /* Note need to support azimuth range [-180,180] since this is what is returned by atan2f. AzimMod is on the */ + /* range (-180,180]. This should be faster than doing a full mod(360) etc. */ + if ( Azim == -180.0f ) + { + AzimMod = 180.0f; + } + else + { + AzimMod = Azim; + } + + /* Use the nearest filter point. Since the azimuth is not assumed to be the same for */ + /* different elevations, make a shortlist of rows to check, and a range azimuth to check. */ + for ( c = 0; c < HrFiltSet_p->NumElev; c++ ) + { + if ( fabsf( Elev - HrFiltSet_p->Elev_p[c] ) < ElevDiff ) + { + ElevDiff = fabsf( Elev - HrFiltSet_p->Elev_p[c] ); + ElevInd = c; + } + } + + if ( ElevInd < 0 ) + { + ElevInd = 0; + } + else if ( ElevInd >= HrFiltSet_p->NumElev ) + { + ElevInd = HrFiltSet_p->NumElev - 1; + } + ElevIndLo = max( 0, ElevInd - 2 ); + ElevIndHi = min( HrFiltSet_p->NumElev - 1, ElevInd + 2 ); + + AzimLo = AzimMod - 15; + if ( AzimLo <= -180.0 ) + { + AzimLo += 360.0; + } + AzimHi = AzimMod + 15; + if ( AzimHi > 360.0 ) + { + AzimHi -= 360.0; + } + + if ( AzimHi < AzimLo ) + { + flipped = 1; + } + + /* Check each candidate elevation row, and each azimuth value in that row, to make a list of candidate points. */ + c = 0; + for ( ElevInd = ElevIndLo; ElevInd <= ElevIndHi; ElevInd++ ) + { + for ( AzimInd = HrFiltSet_p->AzimStartIdx_p[ElevInd]; + AzimInd < HrFiltSet_p->AzimStartIdx_p[ElevInd] + HrFiltSet_p->NumAzim_p[ElevInd]; + AzimInd++ ) + { + if ( flipped == 0 ) + { + test = HrFiltSet_p->Azim_p[AzimInd] >= AzimLo && HrFiltSet_p->Azim_p[AzimInd] <= AzimHi; + } + else + { + /* This is the case where the limits straddle the +/- 180 discontinuity */ + test = HrFiltSet_p->Azim_p[AzimInd] >= AzimLo || HrFiltSet_p->Azim_p[AzimInd] <= AzimHi; + } + if ( test ) + { + /* Azim value is within range, store it */ + CandidateIndices[c] = AzimInd; + c++; + } + } + } + + for ( n = 0; n < c; n++ ) + { + CandidateAzim = HrFiltSet_p->Azim_p[CandidateIndices[n]]; + CandidateElev = HrFiltSet_p->ElevFull_p[CandidateIndices[n]]; + CandidateAngles[n] = GreatCircleAngleDeg( AzimMod, Elev, CandidateAzim, CandidateElev ); + } + + /* Find the candidate with the minimum angle/distance */ + min = CandidateAngles[0]; + HrFiltInd = CandidateIndices[0]; + for ( n = 1; n < c; n++ ) + { + if ( CandidateAngles[n] < min ) + { + min = CandidateAngles[n]; + HrFiltInd = CandidateIndices[n]; + } + } + + HrFiltInd *= HrFiltSet_p->FiltLength; + + /* 3. No extracted ITD. */ + SfxSpatBinParams_p->Itd = 0; + + /* 4. Copy the filter over */ + for ( n = 0; n < HrFiltSet_p->FiltLength; n++ ) + { + SfxSpatBinParams_p->LeftFilter_p[n] = HrFiltSet_p->LeftFiltSet_p[HrFiltInd + n]; + SfxSpatBinParams_p->RightFilter_p[n] = HrFiltSet_p->RightFiltSet_p[HrFiltInd + n]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * GetFilterFromAngle() + * + * Obtain an HR filter corresponding to the input angle pair. + * This version is a controller that switches between the available + * methods (table, model) according to HrFiltSet_p->FilterMethod + --------------------------------------------------------------------*/ + +void GetFilterFromAngle( + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ + const float Elev, /* i : Elevation, degrees */ + float Azim, /* i : Azimuth, degrees */ + SFX_SpatBin_Params_t *SfxSpatBinParams_p /* i/o: Currently used HR filter */ +) +{ + switch ( HrFiltSet_p->FilterMethod ) + { + case TDREND_HRFILT_Method_BSplineModel: + GetFilterFromAngle_M( HrFiltSet_p, Elev, Azim, SfxSpatBinParams_p ); + break; + case TDREND_HRFILT_Method_Table_F: + GetFilterFromAngle_F( HrFiltSet_p, Elev, Azim, SfxSpatBinParams_p ); + break; + case TDREND_HRFILT_Method_Table_S: + GetFilterFromAngle_S( HrFiltSet_p, Elev, Azim, SfxSpatBinParams_p ); + break; + } + + return; +} +#endif + +/*-------------------------------------------------------------------* + * GetFilterFromAngle() + * + * Obtain an HR filter corresponding to the input angle pair. + * This version uses the HR filter model. + --------------------------------------------------------------------*/ + +#ifdef TDREND_HRTF_TABLE_METHODS +static void GetFilterFromAngle_M( +#else +void GetFilterFromAngle( +#endif + TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ + const float Elev, /* i : Elevation, degrees */ + float Azim, /* i : Azimuth, degrees */ + SFX_SpatBin_Params_t *SfxSpatBinParams_p /* i/o: Currently used HR filter */ +) +{ + int16_t count, ii; + + GenerateFilter( Elev, Azim, &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ); + + /* Renderer requires filter in reversed order: */ + count = 0; + for ( ii = ( HrFiltSet_p->ModelParams.K - 1 ); ii >= 0; ii-- ) + { + SfxSpatBinParams_p->LeftFilter_p[ii] = HrFiltSet_p->ModelEval.hrfModL[count]; + SfxSpatBinParams_p->RightFilter_p[ii] = HrFiltSet_p->ModelEval.hrfModR[count]; + count++; + } + + /* 4. Evaluate the ITD */ + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + GenerateITD( Elev, Azim, &HrFiltSet_p->ModelParamsITD, &HrFiltSet_p->ModelEval ); + SfxSpatBinParams_p->Itd = HrFiltSet_p->ModelEval.itdMod; + } + else + { + SfxSpatBinParams_p->Itd = 0; /* No extracted ITD */ + } + + return; +} + + +/*-------------------------------------------------------------------* + * GenerateFilter() + * + * Generate an HR filter using the B Spline model. + --------------------------------------------------------------------*/ + +static void GenerateFilter( + const float elev, /* i : Elevation angle, degrees */ + float azim, /* i : Azimuth angle, degrees */ + ModelParams_t *model, /* i : Model parameters structure */ + ModelEval_t *modelEval /* i/o: Model evaluation structure */ +) +{ + int16_t qp, p, k, i; + int32_t index; + int16_t AzIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS][HRTF_MODEL_BSPLINE_NUM_COEFFS], EvIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; /* non-zero basis functions */ + int16_t num_az_idx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + int16_t num_ev_idx; + int16_t BM_idx[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + float knot_interval; + float ETotL, ETotR, ESynL, ESynR; + float ScaleL, ScaleR; + int16_t iSec; + + getStandardBSplineSampVec( modelEval->elevBfVec, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq, + model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape ); + + for ( p = 0; p < num_ev_idx; p++ ) + { + /* Wrap the requested azimuth to the range of the BSplines */ + azim = fmodf( azim + model->azimKSeq[p][0], 360 ); + if ( azim < 0 ) + { + azim += 360.0f; + } + azim = azim - model->azimKSeq[p][0]; + + if ( model->azimDim3[EvIdx[p]] == 1 ) /* Constant basis function */ + { + num_az_idx[p] = 1; + AzIdx[p][0] = 0; + modelEval->azimBfVec[p][0] = 1.0f; + } + else + { + k = EvIdx[p]; + knot_interval = ( model->azimKSeq[k][model->azimDim3[k]] - model->azimKSeq[k][0] ) / model->azimDim3[k]; + + getPeriodicBSplineSampVec( modelEval->azimBfVec[p], AzIdx[p], model->azimDim3[k], azim, &num_az_idx[p], + knot_interval, model->azimKSeq[k][0], model->azimSegSamples[model->azimShapeIdx[k]], + model->azimBsShape[model->azimShapeIdx[k]], model->azimShapeSampFactor[k] ); + } + } + + /* Compute BM */ + qp = 0; + for ( p = 0; p < num_ev_idx; p++ ) + { + for ( i = 0; i < num_az_idx[p]; i++ ) + { + modelEval->BM[qp + i] = modelEval->elevBfVec[p] * modelEval->azimBfVec[p][i]; + BM_idx[qp + i] = model->azim_start_idx[EvIdx[p]] + AzIdx[p][i]; + } + qp = qp + num_az_idx[p]; + } + + /* Compute HR filters, approximate optimized model evaluation */ + for ( iSec = 0; iSec < HRTF_MODEL_N_SECTIONS; iSec++ ) + { + ETotL = 0.0f; + ETotR = 0.0f; + ESynL = 0.0f; + ESynR = 0.0f; + + /* Energy is precalculated part updated with square of BM value. Store index for sorting */ + for ( i = 0; i < qp; i++ ) + { + modelEval->BMEnergiesL[i].val = modelEval->BM[i] * modelEval->BM[i] * model->EL[iSec * model->AlphaN + BM_idx[i]]; + modelEval->BMEnergiesR[i].val = modelEval->BM[i] * modelEval->BM[i] * model->ER[iSec * model->AlphaN + BM_idx[i]]; + modelEval->BMEnergiesL[i].i = i; + modelEval->BMEnergiesR[i].i = i; + ETotL += modelEval->BMEnergiesL[i].val; + ETotR += modelEval->BMEnergiesR[i].val; + } + + /* Number of basis components actually used. */ + p = min( HRTF_MODEL_N_CPTS_VAR[iSec], qp ); + SkipSmallest_ValueIndex( modelEval->UseIndsL, modelEval->BMEnergiesL, qp, qp - p ); + SkipSmallest_ValueIndex( modelEval->UseIndsR, modelEval->BMEnergiesR, qp, qp - p ); + + /* Account for lost energy */ + for ( i = 0; i < p; i++ ) + { + ESynL += modelEval->BMEnergiesL[modelEval->UseIndsL[i]].val; + ESynR += modelEval->BMEnergiesR[modelEval->UseIndsR[i]].val; + } + ScaleL = sqrtf( ETotL / ESynL ); + ScaleR = sqrtf( ETotR / ESynR ); + + /* Build using only the most energetic components. */ + for ( k = model->iSecFirst[iSec]; k <= model->iSecLast[iSec]; k++ ) + { + modelEval->hrfModL[k] = 0.0; + modelEval->hrfModR[k] = 0.0; + for ( i = 0; i < p; i++ ) + { + index = BM_idx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] + k * model->AlphaN; + modelEval->hrfModL[k] += modelEval->BM[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] * model->AlphaL[index]; + index = BM_idx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] + k * model->AlphaN; + modelEval->hrfModR[k] += modelEval->BM[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] * model->AlphaR[index]; + } + /* Account for lost energy */ + modelEval->hrfModL[k] *= ScaleL; + modelEval->hrfModR[k] *= ScaleR; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * GenerateITD() + * + * Generates an ITD value from the B Spline model. + --------------------------------------------------------------------*/ + +static void GenerateITD( + const float elev, /* i : Elevation angle, degrees */ + float azim, /* i : Azimuth angle, degrees */ + ModelParamsITD_t *model, /* i : ITD Model parameters structure */ + ModelEval_t *modelEval /* i/o: Model evaluation structure */ +) +{ + int16_t qp, p, i; + int32_t index; + int16_t AlphaN; + int16_t elev_offset; + float azim_itd; + int16_t AzIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS], EvIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; /* non-zero basis functions */ + int16_t num_az_idx, num_ev_idx; + int16_t BM_idx[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + + /* Wrap the requested azimuth to the range of the BSplines */ + azim = fmodf( azim + model->azimKSeq[0], 360 ); + if ( azim < 0 ) + { + azim += 360.0f; + } + azim = azim - model->azimKSeq[0]; + + if ( (int16_t) abs( (int16_t) elev ) != 90 ) + { + getStandardBSplineSampVec( modelEval->elevBfVecITD, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq, + model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape ); + azim_itd = azim; + if ( azim > 180 ) + { + /* Flip spline functions around 180 deg */ + azim_itd = 360 - azim; + } + getStandardBSplineSampVec( modelEval->azimBfVecITD, AzIdx, &num_az_idx, ( model->azimDim3 + 1 ) / 2, azim_itd, model->azimKSeq, + model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape ); + if ( azim > 180 ) + { + /* Flip spline functions around 180 deg */ + for ( i = 0; i < HRTF_MODEL_BSPLINE_NUM_COEFFS; i++ ) + { + AzIdx[i] = model->azimDim3 - 1 - AzIdx[i]; + } + } + } + else + { + num_az_idx = 1; + num_ev_idx = 1; + modelEval->elevBfVecITD[0] = 1.0f; + if ( elev < 0 ) + { + EvIdx[0] = 0; + } + else + { + EvIdx[0] = model->elevDim3 - 1; + } + } + + /* Compute BM_ITD */ + elev_offset = 0; + if ( model->elevKSeq[0] == -90 ) + { + elev_offset = -( model->azimDim3 - 1 ); + } + qp = 0; + for ( p = 0; p < num_ev_idx; p++ ) + { + if ( EvIdx[p] == 0 && (int16_t) ( model->elevKSeq[EvIdx[p]] ) == -90 ) + { + modelEval->BM_ITD[qp] = modelEval->elevBfVecITD[p]; + BM_idx[qp] = EvIdx[p] * model->azimDim3; + qp = qp + 1; + } + else if ( EvIdx[p] == ( model->elevDim3 - 1 ) && (int16_t) ( model->elevKSeq[EvIdx[p] - 2] ) == 90 ) + { + /* NB: -2 in if() condition above as number of knot points is numBF-2 */ + modelEval->BM_ITD[qp] = modelEval->elevBfVecITD[p]; + BM_idx[qp] = EvIdx[p] * model->azimDim3 + elev_offset; + qp = qp + 1; + } + else + { + for ( i = 0; i < num_az_idx; i++ ) + { + modelEval->BM_ITD[qp + i] = modelEval->elevBfVecITD[p] * modelEval->azimBfVecITD[i]; + BM_idx[qp + i] = EvIdx[p] * model->azimDim3 + elev_offset + AzIdx[i]; + } + qp = qp + num_az_idx; + } + } + + /* Compute ITD */ + AlphaN = model->elevDim3 * model->azimDim3 + elev_offset; + if ( model->elevKSeq[model->elevDim3 - 3] == 90 ) /* Constant azimuth basis function */ + { + AlphaN = AlphaN - ( model->azimDim3 - 1 ); + } + + /* Matrix multiplcation (row x column) */ + modelEval->itdMod = 0.0f; + for ( i = 0; i < qp; i++ ) + { + index = BM_idx[i]; + modelEval->itdMod += modelEval->BM_ITD[i] * model->W[index]; + } + + modelEval->itdMod = -(float) round_f( modelEval->itdMod * model->resamp_factor ); /* Resample and reverse sign of ITD as convention in model and renderer are opposite */ + + return; +} + + +/*-------------------------------------------------------------------* + * getStandardBSplineSampVec() + * + * Obtain a periodic sampled B Spline basis vector. + --------------------------------------------------------------------*/ + +static void getPeriodicBSplineSampVec( + float *BfVec, /* i/o: values for non-zero basis functions */ + int16_t *AzIdx, /* i/o: indices of non-zero basis functions */ + const int16_t NumBFs, /* i : the number of basis functions = third index of Bf. */ + const float t, /* i : azimuth */ + int16_t *num_az_idx, /* i : Number of azimuth indices */ + const float knot_interval, /* i : The knot interval */ + const float azimKSeq_0, /* i : Knot sequence */ + const int16_t azimSegSamples, /* i : Samples per segment */ + const float *azimBsShape, /* i : Basis shape */ + const int16_t subSampFactor /* i : Subsampling factor */ +) +{ + int16_t i, nI, d0, d; + + int16_t SegSamples = azimSegSamples / subSampFactor; + + /* index of closest sample point */ + d0 = (int16_t) round_f( ( t - azimKSeq_0 ) / ( knot_interval / SegSamples ) ); + + /* find segment */ + nI = d0 / SegSamples; + + *num_az_idx = HRTF_MODEL_BSPLINE_NUM_COEFFS; + + if ( d0 % SegSamples == 0 ) + { + ( *num_az_idx )--; /* on the knot points, the last basis function is zero */ + } + + for ( i = 0; i < *num_az_idx; i++ ) + { + d = d0 - ( i + nI - 1 ) * SegSamples; /* offset of knot_interval */ + BfVec[i] = azimBsShape[(int16_t) abs( d ) * subSampFactor]; + AzIdx[i] = ( nI + i ) % NumBFs; + } + + return; +} + + +/*-------------------------------------------------------------------* + * getStandardBSplineSampVec() + * + * Obtain a sampled B Spline basis vector. + --------------------------------------------------------------------*/ + +static void getStandardBSplineSampVec( + float *BfVec, /* i/o: values for non-zero basis functions */ + int16_t *NzIdx, /* i/o: indices of non-zero basis functions */ + int16_t *num_idx, /* i/o: number of non-zero indices */ + const int16_t NumBFs, /* i : the number of basis functions = third index of Bf */ + const float t, /* i : estimation point */ + const float *KSeq, /* i : knot sequence including multiplicities */ + const int16_t SegSamples, /* i : samples per segment */ + const int16_t *BsLen, /* i : lengths of basis shapes */ + const int16_t *BsStart, /* i : start of basis shapes */ + const float *BsShape /* i : basis shapes */ +) +{ + int16_t i, nI; + float knot_interval; + int16_t d0, d, shape_idx, start_idx; + + knot_interval = ( KSeq[NumBFs - 3] - KSeq[0] ) / ( NumBFs - 3 ); /* assuming triple knot at the first knot */ + /* index of closest sample point */ + d0 = (int16_t) round_f( ( t - KSeq[0] ) / ( knot_interval / SegSamples ) ); + /* find segment */ + nI = d0 / SegSamples; + + *num_idx = HRTF_MODEL_BSPLINE_NUM_COEFFS; + + if ( d0 % SegSamples == 0 ) + { + ( *num_idx )--; /* on the knot points, the last basis function is zero */ + } + + + for ( i = 0; i < *num_idx; i++ ) + { + start_idx = max( 0, i + nI - 3 ); + shape_idx = min( i + nI, min( 3, NumBFs - 1 - ( i + nI ) ) ); + d = d0 - start_idx * SegSamples; + + if ( i + nI > NumBFs - 4 ) /* reverse full shape */ + { + d = BsLen[shape_idx] - 1 - d; + } + else if ( d > BsLen[shape_idx] - 1 ) /* reverse half shape */ + { + d = 2 * ( BsLen[shape_idx] - 1 ) - d; + } + BfVec[i] = BsShape[BsStart[shape_idx] + (int16_t) abs( d )]; /*TT, verify if abs is needed */ + NzIdx[i] = nI + i; + } + + return; +} + + +/*-------------------------------------------------------------------* + * HRTF_model_precalc() + * + * Set precalculated parameters for HRTF model + --------------------------------------------------------------------*/ + +void HRTF_model_precalc( + ModelParams_t *model /* i/o: HRTF model parameters */ +) +{ + int16_t sec_length; + int16_t i, k, j; + float *pEL; + float *pER; + const float *pAlphaL; + const float *pAlphaR; + float tmp; + int16_t AlphaN; + + sec_length = model->K / HRTF_MODEL_N_SECTIONS; + + for ( i = 0; i < HRTF_MODEL_N_SECTIONS; i++ ) + { + model->iSecFirst[i] = i * sec_length; + } + for ( i = 0; i < HRTF_MODEL_N_SECTIONS - 1; i++ ) + { + model->iSecLast[i] = ( i + 1 ) * sec_length - 1; + } + model->iSecLast[HRTF_MODEL_N_SECTIONS - 1] = model->K - 1; /* Final section is longer if (K % nSec) > 0 */ + + maximum_s( model->azimDim3, model->elevDim3, &model->azimDim3Max ); + + if ( !model->modelROM ) + { + AlphaN = model->AlphaN; + + /* Precalculated energies for each section and each row of the alpha matrices */ + model->EL_dyn = (float *) count_malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); + model->ER_dyn = (float *) count_malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); + pEL = model->EL_dyn; + pER = model->ER_dyn; + for ( i = 0; i < HRTF_MODEL_N_SECTIONS; i++ ) + { + for ( j = 0; j < AlphaN; j++ ) /* rows of Alpha matrices */ + { + *pEL = 0.0f; + *pER = 0.0f; + + pAlphaL = &model->AlphaL[model->iSecFirst[i] * AlphaN + j]; + pAlphaR = &model->AlphaR[model->iSecFirst[i] * AlphaN + j]; + + for ( k = model->iSecFirst[i]; k < model->iSecLast[i]; k++ ) /* k within the sections */ + { + /* Energy calculation */ + tmp = *pAlphaL; + *pEL += tmp * tmp; + tmp = *pAlphaR; + *pER += tmp * tmp; + pAlphaL += AlphaN; + pAlphaR += AlphaN; + } + pEL++; + pER++; + } + } + model->EL = (const float *) model->EL_dyn; + model->ER = (const float *) model->ER_dyn; + } + + return; +} + + +/*-------------------------------------------------------------------* + * BSplineModelEvalDealloc() + * + * Deallocate BSpline HR Filter model + --------------------------------------------------------------------*/ + +void BSplineModelEvalDealloc( + ModelParams_t *model, /* i : Model parameters */ + ModelEval_t *modelEval /* i : Model evaluation structure */ +) +{ + /* Allocated in LoadBSplineBinary() */ + int16_t i; + + if ( !model->modelROM ) + { + count_free( model->elevKSeq_dyn ); + count_free( model->azim_start_idx_dyn ); + count_free( model->azimDim2_dyn ); + count_free( model->azimDim3_dyn ); + count_free( model->AlphaL_dyn ); + count_free( model->AlphaR_dyn ); + count_free( model->azimSegSamples_dyn ); + + count_free( model->azimShapeIdx_dyn ); + count_free( model->azimShapeSampFactor_dyn ); + count_free( model->elevBsShape_dyn ); + + count_free( model->EL_dyn ); + count_free( model->ER_dyn ); + + for ( i = 0; i < model->num_unique_azim_splines; i++ ) + { + count_free( model->azimBsShape_dyn[i] ); + } + count_free( model->azimBsShape_dyn ); + } + count_free( (void *) model->azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ + for ( i = 0; i < model->elevDim3; i++ ) + { + count_free( model->azimKSeq[i] ); + } + count_free( model->azimKSeq ); + if ( modelEval != NULL ) + { + count_free( modelEval->hrfModL ); + count_free( modelEval->hrfModR ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * BSplineModelEvalITDDealloc() + * + * Deallocates the ITD model. + --------------------------------------------------------------------*/ + +void BSplineModelEvalITDDealloc( + ModelParamsITD_t *model /* i : Model parameters */ +) +{ + count_free( model->elevKSeq_dyn ); + count_free( model->azimKSeq_dyn ); + count_free( model->W_dyn ); + count_free( model->azimBsShape_dyn ); + count_free( model->elevBsShape_dyn ); + + return; +} + + +/*-------------------------------------------------------------------* + * SkipSmallest_ValueIndex() + * + * Returns indices to the largest values in a ValueIndex list, + * unordered (i.e. skip the n_smallest values, return the remainder). + --------------------------------------------------------------------*/ + +static void SkipSmallest_ValueIndex( + int16_t *use_inds, /* i/o: List of indices to use */ + const ValueIndex_t *VI, /* i : List of value-index items */ + const int16_t N, /* i : Length of list */ + const int16_t n_smallest /* i : Number of items to skip */ +) +{ + int16_t i, j, k, flag; + int16_t skip_inds[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + float candidate_max; /* Stores the max value in the shortlist (next to be kicked off) and its index */ + int16_t candidate_max_i; + + /* Initialise with first entries of VI */ + candidate_max = 0.0; + candidate_max_i = 0; + for ( j = 0; j < n_smallest; j++ ) + { + skip_inds[j] = j; + if ( candidate_max < VI[j].val ) + { + candidate_max = VI[j].val; + candidate_max_i = j; + } + } + + /* Look in the remainder of the list for smaller values */ + for ( i = n_smallest; i < N; i++ ) + { + for ( j = 0; j < n_smallest; j++ ) + { + if ( VI[i].val < VI[skip_inds[j]].val ) + { + /* Found a smaller value, so it goes into the list, replacing candidate_max. */ + skip_inds[candidate_max_i] = i; + candidate_max = VI[i].val; + /* Update candidate_max */ + for ( k = 0; k < n_smallest; k++ ) + { + if ( VI[skip_inds[k]].val > candidate_max ) + { + candidate_max = VI[skip_inds[k]].val; + candidate_max_i = k; + } + } + break; + } + } + } + + /* Build the list of indices that will not be skipped */ + k = 0; + for ( j = 0; j < N; j++ ) + { + flag = 1; + for ( i = 0; i < n_smallest; i++ ) + { + if ( skip_inds[i] == j ) + { + flag = 0; + break; + } + } + if ( flag ) + { + use_inds[k] = j; + k++; + } + } + + return; +} + + +#ifdef TDREND_HRTF_TABLE_METHODS +/*-------------------------------------------------------------------* + * GreatCircleAngleDeg() + * + * Returns the great-circle angle between two (azimuth, elevation) + * pairs + --------------------------------------------------------------------*/ + +/*! r: Angle between the two points on the sphere, degrees */ +static float GreatCircleAngleDeg( + float Az1, /* i : Azimuth angle, degrees, point 1 */ + float El1, /* i : Elevation angle, degrees, point 1 */ + float Az2, /* i : Azimuth angle, degrees, point 2 */ + float El2 /* i : Elevation angle, degrees, point 2 */ +) +{ + return acosf( sinf( El1 * PI_OVER_180 ) * sinf( El2 * PI_OVER_180 ) + + cosf( El1 * PI_OVER_180 ) * cosf( El2 * PI_OVER_180 ) * + cosf( fabsf( Az1 - Az2 ) * PI_OVER_180 ) ) * + PI_OVER_180; +} +#endif diff --git a/lib_dec/ivas_objectRenderer_mix.c b/lib_dec/ivas_objectRenderer_mix.c new file mode 100644 index 0000000000..61553ca4fc --- /dev/null +++ b/lib_dec/ivas_objectRenderer_mix.c @@ -0,0 +1,345 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + + +/*-------------------------------------------------------------------* + * TDREND_MIX_LIST_SetPos() + * + * Sets the listener's position in the specified mixer unit. + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_LIST_SetPos( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const float *Pos_p /* i : Listener's position */ +) +{ + TDREND_MIX_Listener_t *Listener_p; + + Listener_p = hBinRendererTd->Listener_p; + + if ( ( Pos_p[0] != Listener_p->Pos[0] ) || ( Pos_p[1] != Listener_p->Pos[1] ) || ( Pos_p[2] != Listener_p->Pos[2] ) ) + { + /* Set position */ + mvr2r( Pos_p, Listener_p->Pos, 3 ); + + /* Set pose update flag */ + Listener_p->PoseUpdated = TRUE; + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_LIST_SetOrient() + * + * Sets the listener's orientation vectors in the specified mixer unit. + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_LIST_SetOrient( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const float *FrontVec_p, /* i : Listener's orientation front vector */ + const float *UpVec_p /* i : Listener's orientation up vector */ +) +{ + TDREND_MIX_Listener_t *List_p; + /* Value verification */ + if ( ( FrontVec_p[0] == 0.0f ) && ( FrontVec_p[1] == 0.0f ) && ( FrontVec_p[2] == 0.0f ) ) + { + return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Zero front vector. Command is ignored!\n" ) ); + } + + if ( ( UpVec_p[0] == 0.0f ) && ( UpVec_p[1] == 0.0f ) && ( UpVec_p[2] == 0.0f ) ) + { + return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Zero up vector. Command is ignored!\n" ) ); + } + + /* Get listener */ + List_p = hBinRendererTd->Listener_p; + + /* Evaluate the normalized orientation vectors and set pose update flag */ + List_p->PoseUpdated = TDREND_SPATIAL_EvalOrthonormOrient( List_p->Front, List_p->Up, List_p->Right, FrontVec_p, UpVec_p ); + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_Dealloc() + * + * Deallocates the TDREND_MIX_t variable + --------------------------------------------------------------------*/ + +void TDREND_MIX_Dealloc( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ +) +{ + int16_t i; + + /* Deallocate source list */ + for ( i = 0; i < hBinRendererTd->NumOfSrcs; i++ ) + { + TDREND_SRC_Dealloc( hBinRendererTd->Sources[i] ); + } + /* Deallocate Listener and RendListener */ + if ( hBinRendererTd->Listener_p != NULL ) + { + count_free( hBinRendererTd->Listener_p ); + hBinRendererTd->Listener_p = NULL; + } + /* Dealloc HR filter set */ + if ( hBinRendererTd->HrFiltSet_p != NULL ) + { + if ( hBinRendererTd->HrFiltSet_p->FilterMethod == TDREND_HRFILT_Method_BSplineModel ) + { + if ( hBinRendererTd->HrFiltSet_p->ModelParams.UseItdModel && !hBinRendererTd->HrFiltSet_p->ModelParams.modelROM ) + { + BSplineModelEvalITDDealloc( &hBinRendererTd->HrFiltSet_p->ModelParamsITD ); + } + BSplineModelEvalDealloc( &hBinRendererTd->HrFiltSet_p->ModelParams, &hBinRendererTd->HrFiltSet_p->ModelEval ); + } + else + { + if ( hBinRendererTd->HrFiltSet_p->Elev_p != NULL ) + { + count_free( hBinRendererTd->HrFiltSet_p->Elev_p ); + hBinRendererTd->HrFiltSet_p->Elev_p = NULL; + } + if ( hBinRendererTd->HrFiltSet_p->Azim_p != NULL ) + { + count_free( hBinRendererTd->HrFiltSet_p->Azim_p ); + hBinRendererTd->HrFiltSet_p->Azim_p = NULL; + } + if ( hBinRendererTd->HrFiltSet_p->LeftFiltSet_p != NULL ) + { + count_free( hBinRendererTd->HrFiltSet_p->LeftFiltSet_p ); + hBinRendererTd->HrFiltSet_p->LeftFiltSet_p = NULL; + } + if ( hBinRendererTd->HrFiltSet_p->RightFiltSet_p != NULL ) + { + count_free( hBinRendererTd->HrFiltSet_p->RightFiltSet_p ); + hBinRendererTd->HrFiltSet_p->RightFiltSet_p = NULL; + } +#ifdef TDREND_HRTF_TABLE_METHODS + if ( hBinRendererTd->HrFiltSet_p->NumAzim_p != NULL ) + { + count_free( hBinRendererTd->HrFiltSet_p->NumAzim_p ); + hBinRendererTd->HrFiltSet_p->NumAzim_p = NULL; + } + if ( hBinRendererTd->HrFiltSet_p->AzimStartIdx_p != NULL ) + { + count_free( hBinRendererTd->HrFiltSet_p->AzimStartIdx_p ); + hBinRendererTd->HrFiltSet_p->AzimStartIdx_p = NULL; + } + if ( hBinRendererTd->HrFiltSet_p->ElevFull_p != NULL ) + { + count_free( hBinRendererTd->HrFiltSet_p->ElevFull_p ); + hBinRendererTd->HrFiltSet_p->ElevFull_p = NULL; + } +#endif + } + + count_free( hBinRendererTd->HrFiltSet_p ); + hBinRendererTd->HrFiltSet_p = NULL; + } + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_Init() + * + * Initializes the mixer and sets HRTF + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_Init( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HRTF data (initialized in case of NULL) */ + const TDREND_MixSpatSpec_t *MixSpatSpec_p, /* i : Mixer spatial specification */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + + hBinRendererTd->Gain = 1.0f; + + /* Init source list */ + + /* Spatial settings */ + if ( MixSpatSpec_p != NULL ) + { + hBinRendererTd->UseCommonDistAttenModel = MixSpatSpec_p->UseCommonDistAttenModel; + hBinRendererTd->DistAttenModel = MixSpatSpec_p->DistAttenModel; + } + else + { + hBinRendererTd->UseCommonDistAttenModel = TRUE; + hBinRendererTd->DistAttenModel = 0x0000; /* Distance attenuation not activated; */ + } + + /* Init virtual and rendering listeners for spatial mixers */ + TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Pos, 0.0f, 0.0f, 0.0f ); + TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Vel, 0.0f, 0.0f, 0.0f ); + TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Front, 0.0f, 0.0f, -1.0f ); + TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Up, 0.0f, 1.0f, 0.0f ); + TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Right, 1.0f, 0.0f, 0.0f ); + + /* Init HR filter set */ + if ( *hHrtfTD == NULL ) + { + if ( ( hBinRendererTd->HrFiltSet_p = (TDREND_HRFILT_FiltSet_t *) count_malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); + } + + DefaultBSplineModel( hBinRendererTd->HrFiltSet_p, output_Fs ); + *hHrtfTD = hBinRendererTd->HrFiltSet_p; + } + else + { + hBinRendererTd->HrFiltSet_p = *hHrtfTD; + } + + if ( hBinRendererTd->HrFiltSet_p->SampleRate != output_Fs ) + { + return ( IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "The sampling rate for the HR filter set does not match the output sampling rate.\n" ) ); + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_SetDistAttenModel() + * + * Set the distance attenuation model of the mixer + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SetDistAttenModel( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const TDREND_DistAttenModel_t DistAttenModel /* i : Distance attenuation model */ +) +{ + + /* Value validation */ + if ( ( DistAttenModel < TDREND_DIST_ATTEN_MODEL_INV_DIST ) || ( DistAttenModel > TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED ) ) + { + return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Invalid distance attenuation model!\n" ) ); + } + else + { + /* Set the common distance attenuation model */ + hBinRendererTd->DistAttenModel = DistAttenModel; + + /* If using common distance attenuation model, set it. */ + if ( hBinRendererTd->UseCommonDistAttenModel ) + { + hBinRendererTd->DistAttenEnabled = TRUE; + hBinRendererTd->DistAttenModel = DistAttenModel; + } + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_AddSrc() + * + * Adds the specified input source unit to the specified mixer unit. + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_AddSrc( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + int16_t *SrcInd, /* o : Source index */ + const TDREND_PosType_t PosType, /* i : Position type (absolute/relative) */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + TDREND_SRC_t *Src_p; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Get unique source index */ + *SrcInd = hBinRendererTd->MaxSrcInd + 1; + hBinRendererTd->MaxSrcInd++; + hBinRendererTd->NumOfSrcs++; + + if ( hBinRendererTd->NumOfSrcs > MAX_NUM_TDREND_CHANNELS ) + { + return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Maximum number of sources exceeded!\n" ) ); + } + else + { + if ( ( PosType < TDREND_POSTYPE_ABSOLUTE ) || ( PosType > TDREND_POSTYPE_RELATIVE_TO_LISTENER ) ) + { + return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Invalid position type!\n" ) ); + } + else + { + + /* Alloc and init a complete source: signal+spatial+rend components */ + if ( ( error = TDREND_SRC_Alloc( &Src_p ) ) != IVAS_ERR_OK ) + { + return error; + } + + TDREND_SRC_Init( Src_p, PosType, output_Fs ); + + /* Special OpenAL initialization due to a common distance attenuation model */ + if ( hBinRendererTd->DistAttenModel != 0 ) + { + Src_p->SrcSpatial_p->DistAttenEnabled = TRUE; + Src_p->SrcSpatial_p->DistAtten.DistAttenModel = hBinRendererTd->DistAttenModel; + } + /* Add source to mixer */ + hBinRendererTd->Sources[*SrcInd] = Src_p; + } + } + + return error; +} diff --git a/lib_dec/ivas_objectRenderer_sfx.c b/lib_dec/ivas_objectRenderer_sfx.c new file mode 100644 index 0000000000..57b2d52c80 --- /dev/null +++ b/lib_dec/ivas_objectRenderer_sfx.c @@ -0,0 +1,1447 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "ivas_rom_dec.h" +#include "prot.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +/* Sinc constants */ +#define SFX_SPAT_BIN_SINC_M 5 +#define SFX_SPAT_BIN_NUM_SUBSAMPLES_BITS 6 +#define SFX_SPAT_BIN_NUM_SUBSAMPLES ( 1 << SFX_SPAT_BIN_NUM_SUBSAMPLES_BITS ) + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_SetParamsInitializeOn( SFX_SpatBin_t *SfxSpatBin_p, const SFX_SpatBin_Params_t *NewParam_p, const int32_t output_Fs ); +static void TDREND_SFX_SpatBin_SetParamsInitializeOff( SFX_SpatBin_t *SfxSpatBin_p, const SFX_SpatBin_Params_t *NewParam_p, const int32_t output_Fs ); +static void TDREND_SFX_SpatBin_SetParamsOn( SFX_SpatBin_t *SfxSpatBin_p, const SFX_SpatBin_Params_t *NewParam_p, const int32_t output_Fs ); +static void TDREND_SFX_SpatBin_SetParamsOff( SFX_SpatBin_t *const SfxSpatBin_p, const int32_t output_Fs ); +static void TDREND_SFX_SpatBin_Execute( SFX_SpatBin_t *SfxSpatBin_p, const float *InBuffer_p, +#ifdef DEBUGGING + const int16_t NoOfInputSamples, +#endif + const int16_t NoOfRequestedOutputSamples, + float *LeftOutBuffer_p, + float *RightOutBuffer_p, + int16_t *NoOfUsedInputSamples_p, + int16_t *NoOfDeliveredOutputSamples_p, + const int32_t output_Fs ); +static void TDREND_FirFilterRev( float *OutputFrame_p, float *FirFilterRev_p, const int16_t FirFilterLength, float *InputFrame_p, const int16_t NumOfSamples ); +#ifdef TDREND_HRTF_TABLE_METHODS +static void TDREND_FirFilterRevInterp( float *OutputFrame_p, float *FirFilterRev_p, const int16_t FirFilterLength, float *InputFrame_p, const int16_t NumOfSamples, float *FilterStored ); +#endif +static ivas_error TDREND_SFX_SpatBin_Clear( SFX_SpatBin_t *SfxSpatBin_p, const int32_t output_Fs ); + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_Resampling() + * + * Resamples input data with a given resampling factor and returns the + * resampled data. + * + --------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_Resampling( + const float *const InputBuffer_p, /* i : The input buffer with audio samples. */ + const int16_t NoOfInputSamples, /* i : Length of input buffer */ + float *const ResampleOutBuffer_p, /* o : Resampled output */ + const int16_t NoOfResampledSamples, /* i : Length of resampled output */ + float *const OldBuffer_p, /* i/o: Samples from previous input buffer (in case of buffer surplus) */ + int16_t *const NoOfOldBufferSamples_p, /* i/o: Length of OldBuffer_p */ + const float Alpha, /* i : Resampling factor */ + float *const Tf_p /* i/o: Old fractional time value / updated time value 0.0 <= Tf < 1.0 */ +) +{ + int16_t i, k, n, n0; + float AlphaInv; + float T; + int16_t nt, snc0, SubsamplesSteps; + const float *SamplePointer_p, *SincPointer_p; + float Temp; + int16_t NoOfSamplesToCopy, MaximumIndInOldBuffer, Ind; + + T = *Tf_p; + + /* The inverse of the resampling factor */ + AlphaInv = 1 / Alpha; + + /* Check how many input samples we have */ + if ( NoOfInputSamples < 2 * SFX_SPAT_BIN_SINC_M ) + { + NoOfSamplesToCopy = NoOfInputSamples; + MaximumIndInOldBuffer = *NoOfOldBufferSamples_p - ( 2 * SFX_SPAT_BIN_SINC_M - NoOfInputSamples ); + } + else + { + NoOfSamplesToCopy = 2 * SFX_SPAT_BIN_SINC_M; + MaximumIndInOldBuffer = *NoOfOldBufferSamples_p; + } + + /* 1. Append min(2M,N_input) samples from input buffer to old buffer */ + for ( i = 0; i < NoOfSamplesToCopy; i++ ) + { + OldBuffer_p[*NoOfOldBufferSamples_p + i] = InputBuffer_p[i]; + } + + /* 2. Resampling */ + nt = 0; + n0 = SFX_SPAT_BIN_SINC_M - 1; + k = 0; + if ( Alpha <= 1.0 ) + { + /* 2.1 Resample (without scaling) old buffer */ + while ( nt <= MaximumIndInOldBuffer ) + { + /* Calculate the sinc-index for the center value of the sinc */ + snc0 = (int16_t) ( ( T + EPSILON - nt ) * SFX_SPAT_BIN_NUM_SUBSAMPLES + 0.5 ); + + /* The convolution of the sinc and the data */ + SamplePointer_p = &OldBuffer_p[n0 + nt - ( SFX_SPAT_BIN_SINC_M - 1 )]; + SincPointer_p = &SincTable[snc0 - SFX_SPAT_BIN_NUM_SUBSAMPLES * ( -( SFX_SPAT_BIN_SINC_M - 1 ) )]; + + Temp = *SamplePointer_p * *SincPointer_p; + for ( i = -( SFX_SPAT_BIN_SINC_M - 2 ); i <= 0; i++ ) + { + SamplePointer_p++; + SincPointer_p -= SFX_SPAT_BIN_NUM_SUBSAMPLES; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + + SamplePointer_p++; + SincPointer_p = &SincTable[SFX_SPAT_BIN_NUM_SUBSAMPLES - snc0]; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + for ( i = 2; i <= SFX_SPAT_BIN_SINC_M; i++ ) + { + SamplePointer_p++; + SincPointer_p += SFX_SPAT_BIN_NUM_SUBSAMPLES; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + + ResampleOutBuffer_p[k] = Temp; + + /* Update the time index */ + T = T + Alpha; + /* Update the time index for the old buffer data */ + nt = (int16_t) ( T + EPSILON ); + /* Update the resampled buffer index */ + k++; + + /* Make sure we don't process too many samples. This check is needed for the cases */ + /* when all resampled samples are obtained from the old buffer. */ + if ( k >= NoOfResampledSamples ) + { + /* We have processed enough data. Jump out of the while-loop! */ + break; + } + } + + /* 2.2 Resample (without scaling) input buffer */ + n0 = ( SFX_SPAT_BIN_SINC_M - 1 ) - *NoOfOldBufferSamples_p; + for ( n = k; n < NoOfResampledSamples; n++ ) + { + /* Calculate the sinc-index for the center value of the sinc */ + snc0 = (int16_t) ( ( T + EPSILON - nt ) * SFX_SPAT_BIN_NUM_SUBSAMPLES + 0.5 ); + + /* The convolution of the sinc and the data */ + SamplePointer_p = &InputBuffer_p[n0 + nt - ( SFX_SPAT_BIN_SINC_M - 1 )]; + SincPointer_p = &SincTable[snc0 - SFX_SPAT_BIN_NUM_SUBSAMPLES * ( -( SFX_SPAT_BIN_SINC_M - 1 ) )]; + + Temp = *SamplePointer_p * *SincPointer_p; + for ( i = -( SFX_SPAT_BIN_SINC_M - 2 ); i <= 0; i++ ) + { + SamplePointer_p++; + SincPointer_p -= SFX_SPAT_BIN_NUM_SUBSAMPLES; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + + SamplePointer_p++; + SincPointer_p = &SincTable[SFX_SPAT_BIN_NUM_SUBSAMPLES - snc0]; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + for ( i = 2; i <= SFX_SPAT_BIN_SINC_M; i++ ) + { + SamplePointer_p++; + SincPointer_p += SFX_SPAT_BIN_NUM_SUBSAMPLES; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + ResampleOutBuffer_p[n] = Temp; + + /* Update the time index */ + T = T + Alpha; + /* Update the time index for the input buffer data */ + nt = (int16_t) ( T + EPSILON ); + } + } + else + { + /* Calculate the constant step length in subsamples for the sinc */ + SubsamplesSteps = (int16_t) ( AlphaInv * SFX_SPAT_BIN_NUM_SUBSAMPLES ); + + /* 2.3 Resample (with scaling) old buffer */ + while ( nt <= MaximumIndInOldBuffer ) + { + /* Calculate the sinc-index for the center value of the sinc */ + snc0 = (int16_t) ( ( T + EPSILON - nt ) * SubsamplesSteps + 0.5f ); + + /* The convolution of the sinc and the data */ + + SamplePointer_p = &OldBuffer_p[n0 + nt - ( SFX_SPAT_BIN_SINC_M - 1 )]; + SincPointer_p = &SincTable[snc0 - SubsamplesSteps * ( -( SFX_SPAT_BIN_SINC_M - 1 ) )]; + + Temp = *SamplePointer_p * *SincPointer_p; + for ( i = -( SFX_SPAT_BIN_SINC_M - 2 ); i <= 0; i++ ) + { + SamplePointer_p++; + SincPointer_p -= SubsamplesSteps; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + + SamplePointer_p++; + SincPointer_p = &SincTable[SubsamplesSteps - snc0]; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + for ( i = 2; i <= SFX_SPAT_BIN_SINC_M; i++ ) + { + SamplePointer_p++; + SincPointer_p += SubsamplesSteps; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + /* Multiply by the inverse of the resampling factor */ + Temp = Temp * AlphaInv; + ResampleOutBuffer_p[k] = Temp; + + /* Update the time index */ + T = T + Alpha; + /* Update the time index for the input buffer data */ + nt = (int16_t) ( T + EPSILON ); + /* Update the resampled buffer index */ + k++; + + /* Make sure we don't process too many samples. This check is needed for the cases */ + /* when all resampled samples are obtained from the old buffer. */ + if ( k >= NoOfResampledSamples ) + { + /* We have processed enough data. Jump out of the while-loop! */ + break; + } + } + + /* 2.4 Resample (with scaling) input buffer */ + n0 = ( SFX_SPAT_BIN_SINC_M - 1 ) - *NoOfOldBufferSamples_p; + for ( n = k; n < NoOfResampledSamples; n++ ) + { + /* Calculate the sinc-index for the center value of the sinc */ + snc0 = (int16_t) ( ( T + EPSILON - nt ) * SubsamplesSteps + 0.5 ); + + /* The convolution of the sinc and the data */ + + SamplePointer_p = &InputBuffer_p[n0 + nt - ( SFX_SPAT_BIN_SINC_M - 1 )]; + SincPointer_p = &SincTable[snc0 - SubsamplesSteps * ( -( SFX_SPAT_BIN_SINC_M - 1 ) )]; + + Temp = *SamplePointer_p * *SincPointer_p; + for ( i = -( SFX_SPAT_BIN_SINC_M - 2 ); i <= 0; i++ ) + { + SamplePointer_p++; + SincPointer_p -= SubsamplesSteps; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + + SamplePointer_p++; + SincPointer_p = &SincTable[SubsamplesSteps - snc0]; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + for ( i = 2; i <= SFX_SPAT_BIN_SINC_M; i++ ) + { + SamplePointer_p++; + SincPointer_p += SubsamplesSteps; + Temp = Temp + *SamplePointer_p * *SincPointer_p; + } + /* Multiply by the inverse of the resampling factor */ + Temp = Temp * AlphaInv; + ResampleOutBuffer_p[n] = Temp; + + /* Update the time index */ + T = T + Alpha; + /* Update the time index for the input buffer data */ + nt = (int16_t) ( T + EPSILON ); + } + } + + /* 3. Update old buffer */ + Ind = (int16_t) ( n0 + nt - ( SFX_SPAT_BIN_SINC_M - 1 ) ); + if ( Ind < 0 ) + { + /* Must save some samples from the old buffer */ + for ( i = 0; i < -Ind; i++ ) + { + OldBuffer_p[i] = OldBuffer_p[i + *NoOfOldBufferSamples_p + Ind]; + } + /* Copy the input samples */ + for ( i = 0; i < NoOfInputSamples; i++ ) + { + OldBuffer_p[i - Ind] = InputBuffer_p[i]; + } + *NoOfOldBufferSamples_p = NoOfInputSamples - Ind; + } + else + { + *NoOfOldBufferSamples_p = NoOfInputSamples - (int16_t) ( n0 + nt - ( SFX_SPAT_BIN_SINC_M - 1 ) ); + + SamplePointer_p = &InputBuffer_p[n0 + nt - ( SFX_SPAT_BIN_SINC_M - 1 )]; + for ( i = 0; i < *NoOfOldBufferSamples_p; i++ ) + { + OldBuffer_p[i] = *( SamplePointer_p + i ); + } + } + + /* 4. Update Tf_p */ + *Tf_p = T - nt; + /* Due to the EPSILON factor and rounding problems t_new may be a little negative, ~ -10^-7. This should in theory not be possible so we need to */ + /* make sure that Tf_p is greater than or equal to 0. This problem is not present for fix-code, though. */ + if ( *Tf_p < 0 ) + { + *Tf_p = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_SetParams() + * + * Updates the ITD increment, HR-filters increments + * and volumes increments that are used by SFX_SPAT_BIN_UpdateParams(). + * + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SFX_SpatBin_SetParams( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct to be updated */ + const SFX_SpatBin_Params_t *NewParam_p, /* i : New parameters struct */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + if ( NewParam_p->Reset == TRUE ) + { + /* Calling TDREND_SFX_SpatBin_Clear will clear buffers and sets SfxSpatBin_p->InitializeParams = TRUE, which forces all */ + /* rendering parameters to be set directly without any transition period. */ + TDREND_SFX_SpatBin_Clear( SfxSpatBin_p, output_Fs ); + } + + if ( NewParam_p->TurnOn == TRUE ) + { + /* Turn on the effect if it is not already on. */ + if ( SfxSpatBin_p->InitializeParams == TRUE ) + { + TDREND_SFX_SpatBin_SetParamsInitializeOn( SfxSpatBin_p, NewParam_p, output_Fs ); + } + else + { + TDREND_SFX_SpatBin_SetParamsOn( SfxSpatBin_p, NewParam_p, output_Fs ); + } + + SfxSpatBin_p->OpMode = SFX_TRANSIENT; + } + else + { + /* Turn off the effect if it is not already off. */ + if ( SfxSpatBin_p->InitializeParams == TRUE ) + { + TDREND_SFX_SpatBin_SetParamsInitializeOff( SfxSpatBin_p, NewParam_p, output_Fs ); + } + else + { + /* Turn off the effect */ + + TDREND_SFX_SpatBin_SetParamsOff( SfxSpatBin_p, output_Fs ); + } + + SfxSpatBin_p->OpMode = SFX_OFF; + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_SetParamsInitializeOn() + * + * Initialize spatial parameters and turn the effect on + * + --------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_SetParamsInitializeOn( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const SFX_SpatBin_Params_t *NewParam_p, /* i : New parameters struct */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + int16_t i; + float ItdAbs; + float *LeftFilter_p, *RightFilter_p, *LeftFilterIncr_p, *RightFilterIncr_p; + int16_t mem_size; + + SfxSpatBin_p->InitializeParams = FALSE; + /* The first parameter update */ + SfxSpatBin_p->FirstUpdate = TRUE; + SfxSpatBin_p->TargetTime = 0; + + SfxSpatBin_p->ItdIncrForResampling = 0.0; + + /* Copy the HR-filters */ + SfxSpatBin_p->FilterLength = NewParam_p->FilterLength; + + mem_size = (int16_t) SfxSpatBin_p->FilterLength * sizeof( float ); + LeftFilter_p = (float *) count_malloc( mem_size ); + RightFilter_p = (float *) count_malloc( mem_size ); + LeftFilterIncr_p = (float *) count_malloc( mem_size ); + RightFilterIncr_p = (float *) count_malloc( mem_size ); + + SfxSpatBin_p->LeftFilter_p = LeftFilter_p; + SfxSpatBin_p->RightFilter_p = RightFilter_p; + SfxSpatBin_p->LeftFilterIncr_p = LeftFilterIncr_p; + SfxSpatBin_p->RightFilterIncr_p = RightFilterIncr_p; + + for ( i = 0; i < SfxSpatBin_p->FilterLength; i++ ) + { + *LeftFilter_p++ = NewParam_p->LeftVolume * ( NewParam_p->LeftFilter_p[i] ); + *RightFilter_p++ = NewParam_p->RightVolume * ( NewParam_p->RightFilter_p[i] ); + + /* Set initial increments to 0 */ + *LeftFilterIncr_p++ = 0.0; + *RightFilterIncr_p++ = 0.0; + } + + SfxSpatBin_p->TotNoOfOutputSamples = 0; + + switch ( output_Fs ) + { + case 16000: + i = 0; + break; + case 32000: + i = 1; + break; + case 48000: + i = 2; + break; + } + + /* Initialize ITD */ + if ( NewParam_p->Itd > 0.0 ) + { + SfxSpatBin_p->NoOfLeftOldBufferSamples = SFX_SPAT_BIN_SINC_M - 1 + TDREND_MaxITD[i] - (int16_t) floor( NewParam_p->Itd ); + SfxSpatBin_p->Left_Tf = ( NewParam_p->Itd ) - floorf( NewParam_p->Itd ); + SfxSpatBin_p->NoOfRightOldBufferSamples = SFX_SPAT_BIN_SINC_M - 1 + TDREND_MaxITD[i]; + } + else + { + ItdAbs = -NewParam_p->Itd; + SfxSpatBin_p->NoOfLeftOldBufferSamples = SFX_SPAT_BIN_SINC_M - 1 + TDREND_MaxITD[i] + (int16_t) ceil( ItdAbs ); + SfxSpatBin_p->Left_Tf = ceilf( ItdAbs ) - ( ItdAbs ); + SfxSpatBin_p->NoOfRightOldBufferSamples = SFX_SPAT_BIN_SINC_M - 1 + TDREND_MaxITD[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_SetParamsInitializeOff() + * + * Initialize spatial parameters and turn the effect off + * + --------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_SetParamsInitializeOff( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const SFX_SpatBin_Params_t *NewParam_p, /* i : New parameters struct */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + int16_t i; + float *LeftFilter_p, *RightFilter_p, *LeftFilterIncr_p, *RightFilterIncr_p; + int16_t mem_size; + + SfxSpatBin_p->InitializeParams = FALSE; + /* The first parameter update */ + SfxSpatBin_p->FirstUpdate = TRUE; + SfxSpatBin_p->TargetTime = 0; + SfxSpatBin_p->ItdIncrForResampling = 0.0; + + /* Set the HR-filters */ + SfxSpatBin_p->FilterLength = NewParam_p->FilterLength; + + mem_size = (int16_t) SfxSpatBin_p->FilterLength * sizeof( float ); + LeftFilter_p = (float *) count_malloc( mem_size ); + RightFilter_p = (float *) count_malloc( mem_size ); + LeftFilterIncr_p = (float *) count_malloc( mem_size ); + RightFilterIncr_p = (float *) count_malloc( mem_size ); + + SfxSpatBin_p->LeftFilter_p = LeftFilter_p; + SfxSpatBin_p->RightFilter_p = RightFilter_p; + SfxSpatBin_p->LeftFilterIncr_p = LeftFilterIncr_p; + SfxSpatBin_p->RightFilterIncr_p = RightFilterIncr_p; + + *LeftFilter_p++ = 0.5; + *RightFilter_p++ = 0.5; + /* Set initial increments to 0 */ + *LeftFilterIncr_p++ = 0.0; + *RightFilterIncr_p++ = 0.0; + + for ( i = 1; i < SfxSpatBin_p->FilterLength; i++ ) + { + *LeftFilter_p++ = 0.0; + *RightFilter_p++ = 0.0; + /* Set initial increments to 0 */ + *LeftFilterIncr_p++ = 0.0; + *RightFilterIncr_p++ = 0.0; + } + + SfxSpatBin_p->TotNoOfOutputSamples = 0; + + /* Initialize ITD to 0 */ + switch ( output_Fs ) + { + case 16000: + i = 0; + break; + case 32000: + i = 1; + break; + case 48000: + i = 2; + break; + } + SfxSpatBin_p->NoOfLeftOldBufferSamples = SFX_SPAT_BIN_SINC_M - 1 + TDREND_MaxITD[i]; + SfxSpatBin_p->NoOfRightOldBufferSamples = SFX_SPAT_BIN_SINC_M - 1 + TDREND_MaxITD[i]; + SfxSpatBin_p->Left_Tf = 0.0; + return; +} + + +/*-------------------------------------------------------------------* + * void TDREND_SFX_SpatBin_SetParamsOn() + * + * Turn the effect on + * + --------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_SetParamsOn( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const SFX_SpatBin_Params_t *NewParam_p, /* i : New parameters struct */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + int16_t i; + float *LeftFilterIncr_p, *RightFilterIncr_p; + float MaxITDIncr = TDREND_MaxITD_Incr[2]; + /* Set FirstUpdate to FALSE, which makes SFX_SPAT_BIN_UpdateParams to start */ + /* updating the parameters. */ + SfxSpatBin_p->FirstUpdate = FALSE; + + /* Update TargetTime */ + if ( SfxSpatBin_p->OpMode == SFX_OFF ) + { + /* Start turning on the effect */ + SfxSpatBin_p->TurningOnEffect = TRUE; + /* Stop turning off the effect */ + SfxSpatBin_p->TurningOffEffect = FALSE; + /* Use the transient time instead of the target time */ + SfxSpatBin_p->TargetTime = (int16_t) SfxSpatBin_p->MaxTargetTime; + } + else + { + if ( SfxSpatBin_p->TurningOnEffect == FALSE ) + { + /* The effect is already on. Use the target time. */ + SfxSpatBin_p->TargetTime = (int16_t) SfxSpatBin_p->TotNoOfOutputSamples; + } + else if ( SfxSpatBin_p->TotNoOfOutputSamples > SfxSpatBin_p->TargetTime ) + { + /* The effect has already been turned on or will be turned on now. */ + /* If SfxSpatBin_p->TargetTime > SfxSpatBin_p->TotNoOfOutputSamples then continue with SfxSpatBin_p->TargetTime. */ + SfxSpatBin_p->TargetTime = (int16_t) SfxSpatBin_p->TotNoOfOutputSamples; + SfxSpatBin_p->TurningOnEffect = FALSE; + } + } + + /* Restart the counting of output samples */ + SfxSpatBin_p->TotNoOfOutputSamples = 0; + + /* 1. Calculate the new ITD increment. Here the half ITD increment is calculated due to that */ + /* half of it should be applied on the left channel and half on the right channel. */ + /* However, since doppler is not supported anymore resampling is only applied to the left */ + /* channel so the division by 2 could now be removed. */ + if ( SfxSpatBin_p->TargetTime > 0 ) + { + SfxSpatBin_p->ItdIncrForResampling = ( NewParam_p->Itd - ( SfxSpatBin_p->NoOfRightOldBufferSamples - ( SfxSpatBin_p->NoOfLeftOldBufferSamples - SfxSpatBin_p->Left_Tf ) ) ) / SfxSpatBin_p->TargetTime / 2; + } + + switch ( output_Fs ) + { + case 16000: + MaxITDIncr = TDREND_MaxITD_Incr[0]; + break; + case 32000: + MaxITDIncr = TDREND_MaxITD_Incr[1]; + break; + case 48000: + MaxITDIncr = TDREND_MaxITD_Incr[2]; + break; + } + /* Check that ItdIncrForResampling is within limits */ + if ( SfxSpatBin_p->ItdIncrForResampling > MaxITDIncr ) + { +#ifdef DEBUGGING + printf( "ItdIncrForResampling too large: %f > %f\n", SfxSpatBin_p->ItdIncrForResampling, MaxITDIncr ); + printf( " ParamsOn : TargetTime = %5d\n", SfxSpatBin_p->TargetTime ); +#endif + SfxSpatBin_p->ItdIncrForResampling = MaxITDIncr; + } + else if ( SfxSpatBin_p->ItdIncrForResampling < ( -MaxITDIncr ) ) + { +#ifdef DEBUGGING + printf( "ItdIncrForResampling too small: %f < %f\n", SfxSpatBin_p->ItdIncrForResampling, ( -MaxITDIncr ) ); +#endif + SfxSpatBin_p->ItdIncrForResampling = ( -MaxITDIncr ); + } + + /* 2. Calculate the HR-filter increments. Includes the left and right volume. */ + LeftFilterIncr_p = SfxSpatBin_p->LeftFilterIncr_p; + RightFilterIncr_p = SfxSpatBin_p->RightFilterIncr_p; + + for ( i = 0; i < SfxSpatBin_p->FilterLength; i++ ) + { + *LeftFilterIncr_p++ = ( NewParam_p->LeftFilter_p[i] * NewParam_p->LeftVolume - SfxSpatBin_p->LeftFilter_p[i] ) / SfxSpatBin_p->TargetTime; + *RightFilterIncr_p++ = ( NewParam_p->RightFilter_p[i] * NewParam_p->RightVolume - SfxSpatBin_p->RightFilter_p[i] ) / SfxSpatBin_p->TargetTime; + } + + return; +} + + +/*-------------------------------------------------------------------* + * void TDREND_SFX_SpatBin_SetParamsOff() + * + * Turn the effect off + --------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_SetParamsOff( + SFX_SpatBin_t *const SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + int16_t i; + float *LeftFilterIncr_p, *RightFilterIncr_p; + + int16_t MaxITD = TDREND_MaxITD[2]; + float MaxITDIncr = TDREND_MaxITD_Incr[2]; + switch ( output_Fs ) + { + case 16000: + MaxITD = TDREND_MaxITD[0]; + MaxITDIncr = TDREND_MaxITD_Incr[0]; + break; + case 32000: + MaxITD = TDREND_MaxITD[1]; + MaxITDIncr = TDREND_MaxITD_Incr[1]; + break; + case 48000: + MaxITD = TDREND_MaxITD[2]; + MaxITDIncr = TDREND_MaxITD_Incr[2]; + break; + } + + if ( SfxSpatBin_p->OpMode == SFX_TRANSIENT ) + { + /* The number of samples after which the ITD and HR-filters should have been reset. */ + SfxSpatBin_p->TransientTime = (int16_t) SfxSpatBin_p->MaxTargetTime; + } + + /* Set FirstUpdate to FALSE, which makes SFX_SPAT_BIN_UpdateParams to start updating the parameters. */ + SfxSpatBin_p->FirstUpdate = FALSE; + + /* Update TargetTime */ + if ( SfxSpatBin_p->OpMode == SFX_TRANSIENT ) + { + /* Start turning off the effect */ + SfxSpatBin_p->TurningOffEffect = TRUE; + /* Stop turning on the effect */ + SfxSpatBin_p->TurningOnEffect = FALSE; + /* Use the transient time instead of the target time */ + SfxSpatBin_p->TargetTime = (int16_t) SfxSpatBin_p->MaxTargetTime; + } + else + { + if ( SfxSpatBin_p->TurningOffEffect == FALSE ) + { + /* The effect is already off. Use the target time. */ + SfxSpatBin_p->TargetTime = (int16_t) SfxSpatBin_p->TotNoOfOutputSamples; + } + else if ( SfxSpatBin_p->TotNoOfOutputSamples > SfxSpatBin_p->TargetTime ) + { + /* The effect has already been turned off or will be turned off now. */ + /* If SfxSpatBin_p->TargetTime > SfxSpatBin_p->TotNoOfOutputSamples then continue */ + /* with SfxSpatBin_p->TargetTime. */ + SfxSpatBin_p->TargetTime = (int16_t) SfxSpatBin_p->TotNoOfOutputSamples; + } + } + + /* Restart the counting of output samples */ + SfxSpatBin_p->TotNoOfOutputSamples = 0; + + /* 1. Calculate the new ITD increment. Here the half ITD increment is calculated due to that */ + /* half of it should be applied on the left channel and half on the right channel. */ + /* if (SfxSpatBin_p->TurnedOn == FALSE) */ + if ( SfxSpatBin_p->OpMode == SFX_OFF ) + { + /* The effect has already been turned off */ + SfxSpatBin_p->ItdIncrForResampling = ( 0.0f - ( SfxSpatBin_p->NoOfRightOldBufferSamples - + ( SfxSpatBin_p->NoOfLeftOldBufferSamples - SfxSpatBin_p->Left_Tf ) ) ) / + SfxSpatBin_p->TargetTime / 2.0f; + + /* Check that ItdIncrForResampling is within limits */ + if ( SfxSpatBin_p->ItdIncrForResampling > MaxITDIncr ) + { +#ifdef DEBUGGING + printf( "ItdIncrForResampling too large: %f > %f\n", SfxSpatBin_p->ItdIncrForResampling, MaxITDIncr ); + printf( " ParamsOff : TargetTime = %5d\n", SfxSpatBin_p->TargetTime ); +#endif + SfxSpatBin_p->ItdIncrForResampling = MaxITDIncr; + } + else if ( SfxSpatBin_p->ItdIncrForResampling < ( -MaxITDIncr ) ) + { +#ifdef DEBUGGING + printf( "ItdIncrForResampling too small: %f < %f\n", SfxSpatBin_p->ItdIncrForResampling, ( -MaxITDIncr ) ); +#endif + SfxSpatBin_p->ItdIncrForResampling = ( -MaxITDIncr ); + } + } + else /*if (SfxSpatBin_p->TurnedOn == TRUE && NewParam_p->TurnOn == FALSE) */ + { + /* The effect is about to be turned off */ + SfxSpatBin_p->ItdIncrForResampling = ( 0.0f - ( SfxSpatBin_p->NoOfRightOldBufferSamples - + ( SfxSpatBin_p->NoOfLeftOldBufferSamples - SfxSpatBin_p->Left_Tf ) ) ) / + SfxSpatBin_p->TransientTime / 2.0f; + + /* Check that ItdIncrForResampling is within limits */ + if ( SfxSpatBin_p->ItdIncrForResampling > MaxITDIncr ) + { +#ifdef DEBUGGING + printf( "ItdIncrForResampling too large: %f > %f\n", SfxSpatBin_p->ItdIncrForResampling, MaxITDIncr ); + printf( " ParamsOff : TransientTime = %5d\n", SfxSpatBin_p->TransientTime ); +#endif + SfxSpatBin_p->ItdIncrForResampling = MaxITD; + } + else if ( SfxSpatBin_p->ItdIncrForResampling < ( -MaxITDIncr ) ) + { +#ifdef DEBUGGING + printf( "ItdIncrForResampling too small: %f < %f\n", SfxSpatBin_p->ItdIncrForResampling, ( -MaxITDIncr ) ); +#endif + SfxSpatBin_p->ItdIncrForResampling = ( -MaxITDIncr ); + } + + /* 2. Calculate the HR-filter increments. Includes the left and right volume. */ + LeftFilterIncr_p = SfxSpatBin_p->LeftFilterIncr_p; + RightFilterIncr_p = SfxSpatBin_p->RightFilterIncr_p; + + *LeftFilterIncr_p++ = ( 0.5f - SfxSpatBin_p->LeftFilter_p[0] ) / SfxSpatBin_p->TransientTime; + *RightFilterIncr_p++ = ( 0.5f - SfxSpatBin_p->RightFilter_p[0] ) / SfxSpatBin_p->TransientTime; + + for ( i = 1; i < SfxSpatBin_p->FilterLength; i++ ) + { + *LeftFilterIncr_p++ = ( 0.0f - SfxSpatBin_p->LeftFilter_p[i] ) / SfxSpatBin_p->TransientTime; + *RightFilterIncr_p++ = ( 0.0f - SfxSpatBin_p->RightFilter_p[i] ) / SfxSpatBin_p->TransientTime; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_UpdateParams() + * + * Updates the ITD, HR-filters and volumes, + * which are to be used when processing the next data + * block. + * + --------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_UpdateParams( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const int32_t NoOfOutputSamples /* i : Number of output samples */ +) +{ + int16_t i; + float *LeftFilter_p, *RightFilter_p, *LeftFilterIncr_p, *RightFilterIncr_p; + + LeftFilter_p = SfxSpatBin_p->LeftFilter_p; + RightFilter_p = SfxSpatBin_p->RightFilter_p; + LeftFilterIncr_p = SfxSpatBin_p->LeftFilterIncr_p; + RightFilterIncr_p = SfxSpatBin_p->RightFilterIncr_p; + + /* 1. Update the total number of output samples that has been rendered since the */ + /* last ARM update. This value is zeroed in the SetParams function. */ + SfxSpatBin_p->TotNoOfOutputSamples = SfxSpatBin_p->TotNoOfOutputSamples + NoOfOutputSamples; + if ( SfxSpatBin_p->TotNoOfOutputSamples > SfxSpatBin_p->MaxTargetTime ) + { + /* We need to limit TotNoOfOutputSamples in order to avoid wrap around as well */ + /* as when it is used in SetParams its maximum allowed value is MaxTargetTime. */ + SfxSpatBin_p->TotNoOfOutputSamples = SfxSpatBin_p->MaxTargetTime; + } + + /* No need to update if FirstUpdate is not true. All increments are zero. */ + if ( SfxSpatBin_p->FirstUpdate == FALSE ) + { + SfxSpatBin_p->TargetTime -= (int16_t) NoOfOutputSamples; + if ( SfxSpatBin_p->TargetTime < 0 ) + { + /* This is instead of using sub with saturation in order to */ + /* avoid wrap around. */ + SfxSpatBin_p->TargetTime = -1; + } + + if ( SfxSpatBin_p->TurningOffEffect == TRUE ) + { + SfxSpatBin_p->TransientTime -= (int16_t) NoOfOutputSamples; + if ( SfxSpatBin_p->TransientTime <= 0 ) + { + /* The effect has now been turned off */ + + SfxSpatBin_p->ItdIncrForResampling = 0.0; + + /* Set the default HR-filters */ + /* + SfxSpatBin_p->LeftFilter[0] = 0.5; + SfxSpatBin_p->RightFilter[0] = 0.5; + for (i = 1; i < SfxSpatBin_p->FilterLength; i++) + { + SfxSpatBin_p->LeftFilter[i] = 0.0; + SfxSpatBin_p->RightFilter[i] = 0.0; + }*/ + + *LeftFilter_p++ = 0.5; + *RightFilter_p++ = 0.5; + for ( i = 1; i < SfxSpatBin_p->FilterLength; i++ ) + { + *LeftFilter_p++ = 0.0; + *RightFilter_p++ = 0.0; + } + + /* Put HR-filter increments to zero */ + /* + for (i = 0; i < SfxSpatBin_p->FilterLength; i++) + { + SfxSpatBin_p->LeftFilterIncr[i] = 0.0; + SfxSpatBin_p->RightFilterIncr[i] = 0.0; + }*/ + + for ( i = 0; i < SfxSpatBin_p->FilterLength; i++ ) + { + *LeftFilterIncr_p++ = 0.0; + *RightFilterIncr_p++ = 0.0; + } + + /* The effect is now off */ + SfxSpatBin_p->TurningOffEffect = FALSE; + } + } + + /* 2. Check whether increments should continue to be updated. */ + if ( SfxSpatBin_p->TargetTime < 0 ) + { + /* Put ItdIncrForResampling to zero if TargetTime<0 */ + SfxSpatBin_p->ItdIncrForResampling = 0.0; + /* The effect has been turned on if it was being turned on */ + SfxSpatBin_p->TurningOnEffect = FALSE; + } + else + { + /* 3. Update the HR-filters. */ + /* Don't update if the effect is off. */ + if ( SfxSpatBin_p->OpMode == SFX_TRANSIENT || SfxSpatBin_p->TurningOffEffect == TRUE ) + { + /* + for (i = 0; i < SfxSpatBin_p->FilterLength; i++) + { + SfxSpatBin_p->LeftFilter[i] += SfxSpatBin_p->LeftFilterIncr[i] * NoOfOutputSamples; + SfxSpatBin_p->RightFilter[i] += SfxSpatBin_p->RightFilterIncr[i] * NoOfOutputSamples; + }*/ + + for ( i = 0; i < SfxSpatBin_p->FilterLength; i++ ) + { + *LeftFilter_p++ += ( *LeftFilterIncr_p++ ) * NoOfOutputSamples; + *RightFilter_p++ += ( *RightFilterIncr_p++ ) * NoOfOutputSamples; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_Execute_Main() + * + * The main rendering function that is called from the Audio Mixer. + * + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SFX_SpatBin_Execute_Main( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const float *InBuffer_p, /* i : Input buffer */ + const int16_t output_frame, /* i : frame length */ + float *LeftOutBuffer_p, /* o : Rendered left channel */ + float *RightOutBuffer_p, /* o : Rendered right channel */ + int16_t *NoOfUsedInputSamples_p, /* o : Number of input samples actually used */ + int16_t *NoOfDeliveredOutputSamples_p, /* o : Number of output samples actually rendered */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + int16_t i; + const float *InBufferPointer_p; + float *LeftOutBufferPointer_p, *RightOutBufferPointer_p; + int16_t TempNoOfRequestedOutputSamples, TempNoOfUsedInputSamples, TempNoOfDeliveredOutputSamples; + int16_t TempNoOfInputSamples; + int16_t NoOfBlocks; + + /* Make sure the blocks are not longer than 6 msec. */ + + NoOfBlocks = 1; + TempNoOfRequestedOutputSamples = output_frame; + while ( TempNoOfRequestedOutputSamples > SfxSpatBin_p->MaxBlockLength ) + { + NoOfBlocks = NoOfBlocks << 1; + /* Shift with rounding */ + TempNoOfRequestedOutputSamples = ( TempNoOfRequestedOutputSamples >> 1 ) + ( TempNoOfRequestedOutputSamples & 1 ); + } + + /* Divide the output_frame into NoOfBlocks blocks. */ + InBufferPointer_p = InBuffer_p; + LeftOutBufferPointer_p = LeftOutBuffer_p; + RightOutBufferPointer_p = RightOutBuffer_p; + *NoOfUsedInputSamples_p = 0; + *NoOfDeliveredOutputSamples_p = 0; + TempNoOfInputSamples = output_frame; + + for ( i = 0; i < NoOfBlocks; i++ ) + { + /* The effect is not being turned off or on. Normal rendering. */ + if ( SfxSpatBin_p->TargetTime < TempNoOfRequestedOutputSamples ) + { + /* Put ITD increment to zero. This prevents the ITD to become too large. */ + SfxSpatBin_p->ItdIncrForResampling = 0.0; + } + + TDREND_SFX_SpatBin_Execute( SfxSpatBin_p, InBufferPointer_p, +#ifdef DEBUGGING + TempNoOfInputSamples, +#endif + TempNoOfRequestedOutputSamples, LeftOutBufferPointer_p, RightOutBufferPointer_p, &TempNoOfUsedInputSamples, &TempNoOfDeliveredOutputSamples, output_Fs ); + + /* DSP update */ + TDREND_SFX_SpatBin_UpdateParams( SfxSpatBin_p, TempNoOfDeliveredOutputSamples ); + + /* Update the temp pointers */ + InBufferPointer_p += TempNoOfUsedInputSamples; + LeftOutBufferPointer_p += TempNoOfDeliveredOutputSamples; + RightOutBufferPointer_p += TempNoOfDeliveredOutputSamples; + + *NoOfDeliveredOutputSamples_p = *NoOfDeliveredOutputSamples_p + TempNoOfDeliveredOutputSamples; + if ( i == NoOfBlocks - 2 ) + { + /* The last block should produce the remaining number of samples */ + TempNoOfRequestedOutputSamples = output_frame - *NoOfDeliveredOutputSamples_p; + } + *NoOfUsedInputSamples_p = *NoOfUsedInputSamples_p + TempNoOfUsedInputSamples; + TempNoOfInputSamples = TempNoOfInputSamples - TempNoOfUsedInputSamples; + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_Execute() + * + * Run renderer for one block + * + --------------------------------------------------------------------*/ + +static void TDREND_SFX_SpatBin_Execute( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const float *InBuffer_p, /* i : Input buffer */ +#ifdef DEBUGGING + const int16_t NoOfInputSamples, /* i : Length of input buffer */ +#endif + const int16_t NoOfRequestedOutputSamples, /* i : Length of output */ + float *LeftOutBuffer_p, /* o : Rendered left channel */ + float *RightOutBuffer_p, /* o : Rendered right channel */ + int16_t *NoOfUsedInputSamples_p, /* o : Number of input samples actually used */ + int16_t *NoOfDeliveredOutputSamples_p, /* o : Number of output samples actually rendered */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + int16_t i = 0; + int16_t NoOfInputSamplesForLeft, NoOfInputSamplesForRight; + float TotalLeftFlp; + int16_t NoOfSamplesToCopy, Ind; + + /* 1. Calculate the resampling factors for the left channel. */ + TotalLeftFlp = 1.0f + 2.0f * SfxSpatBin_p->ItdIncrForResampling; + + /* 2. Calculate the number of input samples needed for the left and right channel. */ + NoOfInputSamplesForLeft = 2 * SFX_SPAT_BIN_SINC_M - SfxSpatBin_p->NoOfLeftOldBufferSamples + + (int16_t) ( SfxSpatBin_p->Left_Tf + TotalLeftFlp * ( NoOfRequestedOutputSamples - 1 ) ); + + switch ( output_Fs ) + { + case 16000: + i = 0; + break; + case 32000: + i = 1; + break; + case 48000: + i = 2; + break; + } + NoOfInputSamplesForRight = NoOfRequestedOutputSamples + SFX_SPAT_BIN_SINC_M - 1 + TDREND_MaxITD[i] - + SfxSpatBin_p->NoOfRightOldBufferSamples; + /* Set the number of used Input samples to the maximum. */ + if ( NoOfInputSamplesForLeft > NoOfInputSamplesForRight ) + { + *NoOfUsedInputSamples_p = NoOfInputSamplesForLeft; + } + else + { + *NoOfUsedInputSamples_p = NoOfInputSamplesForRight; + } + /* Set the number of used input samples to zero if it is negative. */ + if ( *NoOfUsedInputSamples_p < 0 ) + { +#ifdef DEBUGGING + printf( "2. *NoOfUsedInputSamples_p < 0\n" ); +#endif + *NoOfUsedInputSamples_p = 0; + } + +#ifdef DEBUGGING + /* The following should never happen */ + if ( *NoOfUsedInputSamples_p > NoOfInputSamples ) + { + printf( "2. *NoOfUsedInputSamples_p > NoInputSamples %d %d \n", *NoOfUsedInputSamples_p, NoOfInputSamples ); + } +#endif + + *NoOfDeliveredOutputSamples_p = NoOfRequestedOutputSamples; + + /* 3. Resample the left channel. */ + TDREND_SFX_SpatBin_Resampling( InBuffer_p, + *NoOfUsedInputSamples_p, + &( SfxSpatBin_p->ResampledBufferLeft[SfxSpatBin_p->FilterLength - 1] ), + *NoOfDeliveredOutputSamples_p, + SfxSpatBin_p->LeftOldBuffer, + &( SfxSpatBin_p->NoOfLeftOldBufferSamples ), + TotalLeftFlp, + &( SfxSpatBin_p->Left_Tf ) ); + + /* 4. Prepare the right input buffer for the HR-filtering. */ + NoOfSamplesToCopy = SfxSpatBin_p->NoOfRightOldBufferSamples - ( SFX_SPAT_BIN_SINC_M - 1 ); + if ( NoOfSamplesToCopy > *NoOfDeliveredOutputSamples_p ) + { + NoOfSamplesToCopy = *NoOfDeliveredOutputSamples_p; + } + + for ( i = 0; i < NoOfSamplesToCopy; i++ ) + { + SfxSpatBin_p->ResampledBufferRight[SfxSpatBin_p->FilterLength - 1 + i] = + SfxSpatBin_p->RightOldBuffer[( SFX_SPAT_BIN_SINC_M - 1 ) + i]; + } + + for ( i = NoOfSamplesToCopy; i < *NoOfDeliveredOutputSamples_p; i++ ) + { + SfxSpatBin_p->ResampledBufferRight[SfxSpatBin_p->FilterLength - 1 + i] = + InBuffer_p[i - SfxSpatBin_p->NoOfRightOldBufferSamples + ( SFX_SPAT_BIN_SINC_M - 1 )]; + } + + /* 5. HR-filtering on the left and right channel. */ +#ifdef TDREND_HRTF_TABLE_METHODS + if ( SfxSpatBin_p->HrFilterInterpOn ) + { + TDREND_FirFilterRevInterp( LeftOutBuffer_p, + SfxSpatBin_p->LeftFilter_p, + SfxSpatBin_p->FilterLength, + SfxSpatBin_p->ResampledBufferLeft, + *NoOfDeliveredOutputSamples_p, + SfxSpatBin_p->LeftFilterStored ); + TDREND_FirFilterRevInterp( RightOutBuffer_p, + SfxSpatBin_p->RightFilter_p, + SfxSpatBin_p->FilterLength, + SfxSpatBin_p->ResampledBufferRight, + *NoOfDeliveredOutputSamples_p, + SfxSpatBin_p->RightFilterStored ); + } + else + { + /* First time - filter without interpolation, and set filter to use as previous. */ + TDREND_FirFilterRev( LeftOutBuffer_p, + SfxSpatBin_p->LeftFilter_p, + SfxSpatBin_p->FilterLength, + SfxSpatBin_p->ResampledBufferLeft, + *NoOfDeliveredOutputSamples_p ); + TDREND_FirFilterRev( RightOutBuffer_p, + SfxSpatBin_p->RightFilter_p, + SfxSpatBin_p->FilterLength, + SfxSpatBin_p->ResampledBufferRight, + *NoOfDeliveredOutputSamples_p ); + for ( i = 0; i < SfxSpatBin_p->FilterLength; i++ ) + { + SfxSpatBin_p->LeftFilterStored[i] = SfxSpatBin_p->LeftFilter_p[i]; + SfxSpatBin_p->RightFilterStored[i] = SfxSpatBin_p->RightFilter_p[i]; + } + } +#else + TDREND_FirFilterRev( LeftOutBuffer_p, + SfxSpatBin_p->LeftFilter_p, + SfxSpatBin_p->FilterLength, + SfxSpatBin_p->ResampledBufferLeft, + *NoOfDeliveredOutputSamples_p ); + TDREND_FirFilterRev( RightOutBuffer_p, + SfxSpatBin_p->RightFilter_p, + SfxSpatBin_p->FilterLength, + SfxSpatBin_p->ResampledBufferRight, + *NoOfDeliveredOutputSamples_p ); +#endif + + /* Store the samples needed for next block */ + Ind = *NoOfDeliveredOutputSamples_p - SfxSpatBin_p->NoOfRightOldBufferSamples; + if ( Ind < 0 ) + { + /* Must store some samples from the OldBuffer */ + for ( i = Ind; i < 0; i++ ) + { + SfxSpatBin_p->RightOldBuffer[i - Ind] = SfxSpatBin_p->RightOldBuffer[i + SfxSpatBin_p->NoOfRightOldBufferSamples]; + } + + /* Store all samples in the InputBuffer that has been used by either channel */ + for ( i = 0; i < *NoOfUsedInputSamples_p; i++ ) + { + SfxSpatBin_p->RightOldBuffer[i - Ind] = InBuffer_p[i]; + } + } + else + { + /* Store samples from the InputBuffer */ + for ( i = Ind; i < *NoOfUsedInputSamples_p; i++ ) + { + SfxSpatBin_p->RightOldBuffer[i - Ind] = InBuffer_p[i]; + } + } + + /* Update number of old samples */ + SfxSpatBin_p->NoOfRightOldBufferSamples = *NoOfUsedInputSamples_p - (int16_t) Ind; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_Initialize() + * + * Initializes the spatial parameters struct + * + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SFX_SpatBin_Initialize( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + int16_t i; + + SfxSpatBin_p->OpMode = SFX_OFF; + SfxSpatBin_p->TurningOffEffect = FALSE; + SfxSpatBin_p->TurningOnEffect = FALSE; + /* Init during next SetParams-call */ + SfxSpatBin_p->InitializeParams = TRUE; + + /* Init MaxTargetTime and MaxBlockLength */ + switch ( output_Fs ) + { + case 16000: + SfxSpatBin_p->MaxTargetTime = TDREND_SRC_REND_MaxTargetTimes[0]; + SfxSpatBin_p->MaxBlockLength = TDREND_SRC_REND_MaxBlockLengths[0]; + SfxSpatBin_p->LeftOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0] ) * sizeof( float ) ); + SfxSpatBin_p->RightOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0] ) * sizeof( float ) ); + /* Fill old buffers with zeros */ + for ( i = 0; i < SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0]; i++ ) + { + SfxSpatBin_p->LeftOldBuffer[i] = 0.0f; + SfxSpatBin_p->RightOldBuffer[i] = 0.0f; + } + break; + case 32000: + SfxSpatBin_p->MaxTargetTime = TDREND_SRC_REND_MaxTargetTimes[1]; + SfxSpatBin_p->MaxBlockLength = TDREND_SRC_REND_MaxBlockLengths[1]; + SfxSpatBin_p->LeftOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1] ) * sizeof( float ) ); + SfxSpatBin_p->RightOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1] ) * sizeof( float ) ); + /* Fill old buffers with zeros */ + for ( i = 0; i < SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1]; i++ ) + { + SfxSpatBin_p->LeftOldBuffer[i] = 0.0f; + SfxSpatBin_p->RightOldBuffer[i] = 0.0f; + } + break; + case 48000: + SfxSpatBin_p->MaxTargetTime = TDREND_SRC_REND_MaxTargetTimes[2]; + SfxSpatBin_p->MaxBlockLength = TDREND_SRC_REND_MaxBlockLengths[2]; + SfxSpatBin_p->LeftOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2] ) * sizeof( float ) ); + SfxSpatBin_p->RightOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2] ) * sizeof( float ) ); + /* Fill old buffers with zeros */ + for ( i = 0; i < SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2]; i++ ) + { + SfxSpatBin_p->LeftOldBuffer[i] = 0.0f; + SfxSpatBin_p->RightOldBuffer[i] = 0.0f; + } + break; +#ifdef DEBUGGING + default: + IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Error: Unrecognised output_Fs in TDREND_SFX_SpatBin_Initialize()" ); +#endif + } + + /* Fill the beginning of the resampled buffers with zeros */ + for ( i = 0; i < SFX_SPAT_BIN_MAX_FILTER_LENGTH; i++ ) + { + SfxSpatBin_p->ResampledBufferLeft[i] = 0.0f; + SfxSpatBin_p->ResampledBufferRight[i] = 0.0f; + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_SFX_SpatBin_Clear() + * + * Clear spatial parameters + * + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +static ivas_error TDREND_SFX_SpatBin_Clear( + SFX_SpatBin_t *SfxSpatBin_p, /* i/o: Spatial parameters struct */ + const int32_t output_Fs /* i : Output sample rate */ +) +{ + int16_t i; + int16_t MaxITD = TDREND_MaxITD[2]; + SfxSpatBin_p->OpMode = SFX_OFF; + SfxSpatBin_p->TurningOffEffect = FALSE; + SfxSpatBin_p->TurningOnEffect = FALSE; + /* Init during next SetParams-call */ + SfxSpatBin_p->InitializeParams = TRUE; + /* Fill old buffers with zeros */ + switch ( output_Fs ) + { + case 16000: + MaxITD = TDREND_MaxITD[0]; + break; + case 32000: + MaxITD = TDREND_MaxITD[1]; + break; + case 48000: + MaxITD = TDREND_MaxITD[2]; + break; + } + for ( i = 0; i < SFX_SPAT_BIN_SINC_M * 4 + 2 * MaxITD; i++ ) + { + SfxSpatBin_p->LeftOldBuffer[i] = 0.0f; + SfxSpatBin_p->RightOldBuffer[i] = 0.0f; + } + /* Fill the beginning of the resampled buffers with zeros */ + for ( i = 0; i < SFX_SPAT_BIN_MAX_FILTER_LENGTH; i++ ) + { + SfxSpatBin_p->ResampledBufferLeft[i] = 0.0f; + SfxSpatBin_p->ResampledBufferRight[i] = 0.0f; + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_FirFilterRev() + * + * FIR filtering function with reversed filter sequence. + * The FIR filter seqeunce is reversed, i.e. + * FirFilterRev(n) = FirFilter(N-1-n) for n=0:N-1 + * The first N-1 samples of the input buffer store the last N-1 + * samples from the previous input buffer. + * + --------------------------------------------------------------------*/ + +static void TDREND_FirFilterRev( + float *OutputFrame_p, /* o : Filtered samples */ + float *FirFilterRev_p, /* i/o: Reversed FIR filter */ + const int16_t FirFilterLength, /* i : Filter length */ + float *InputFrame_p, /* i : Input samples */ + const int16_t NumOfSamples /* i : Number of input samples */ +) +{ + /* In this function we assume that the last FirFilterLength-1 samples from */ + /* the previous InputBuffer starts this new InputBuffer. */ + int16_t n, k; + int16_t FirFilterLengthMinusOne; + float Acc; + float *InputBuffer_nk_p, *InputBuffer_n_p, *FirFilterRev_k_p, *OutputBuffer_n_p; + + FirFilterLengthMinusOne = FirFilterLength - 1; + + /* 1. Filter the input buffer. NOTE: Reversed filter sequence */ + InputBuffer_n_p = InputFrame_p; + OutputBuffer_n_p = OutputFrame_p; + + for ( n = NumOfSamples; n > 0; n-- ) + { + + Acc = 0.0f; + FirFilterRev_k_p = FirFilterRev_p; + InputBuffer_nk_p = InputBuffer_n_p; + + for ( k = FirFilterLength; k > 0; k-- ) + { + Acc += *( FirFilterRev_k_p++ ) * *( InputBuffer_nk_p++ ); + } + + InputBuffer_n_p++; + *( OutputBuffer_n_p++ ) = Acc; + } + + /* 2. Copy the last FirFilterLength-1 samples of the InputFrame to the beginning of the InputFrame */ + mvr2r( InputFrame_p + NumOfSamples, InputFrame_p, FirFilterLengthMinusOne ); + + return; +} + +#ifdef TDREND_HRTF_TABLE_METHODS +/*-------------------------------------------------------------------* + * TDREND_FirFilterRevInterp() + * + * FIR filtering function with reversed filter sequence. + * The FIR filter seqeunce is reversed, i.e. + * FirFilterRev(n) = FirFilter(N-1-n) for n=0:N-1 + * The first N-1 samples of the input buffer store the last N-1 + * samples from the previous input buffer. + * + --------------------------------------------------------------------*/ + +static void TDREND_FirFilterRevInterp( + float *OutputFrame_p, /* o : Filtered samples */ + float *FirFilterRev_p, /* i/o: Reversed FIR filter */ + const int16_t FirFilterLength, /* i : Filter length */ + float *InputFrame_p, /* i : Input samples */ + const int16_t NumOfSamples, /* i : Number of input samples */ + float *FilterStored /* i/o: Old filter memory for interpolation */ +) +{ + /* In this function we assume that the last FirFilterLength-1 samples from */ + /* the previous InputBuffer starts this new InputBuffer. */ + int16_t n, k; + int16_t FirFilterLengthMinusOne; + float Acc1; + float Acc2; + + float *InputBuffer_nk_p, *InputBuffer_n_p, *FirFilterRev_k_p, *OutputBuffer_n_p; + float interpFactor, interpComplement; + float *FilterStored_n_p; + float inv_NumOfSamples; + + FirFilterLengthMinusOne = FirFilterLength - 1; + inv_NumOfSamples = 1.0f / NumOfSamples; + + /* 1. Filter the input buffer */ + /* NOTE: Reversed filter sequence */ + InputBuffer_n_p = InputFrame_p; + OutputBuffer_n_p = OutputFrame_p; + + interpFactor = 1.0f; + interpComplement = 0.0f; + for ( n = NumOfSamples; n > 0; n-- ) + { + + Acc1 = 0.0f; + Acc2 = 0.0f; + FirFilterRev_k_p = FirFilterRev_p; + FilterStored_n_p = FilterStored; + InputBuffer_nk_p = InputBuffer_n_p; + + for ( k = FirFilterLength; k > 0; k-- ) + { + Acc1 += *( FirFilterRev_k_p++ ) * *( InputBuffer_nk_p ); + Acc2 += *( FilterStored_n_p++ ) * *( InputBuffer_nk_p++ ); + } + + InputBuffer_n_p++; + *( OutputBuffer_n_p++ ) = Acc1 * interpComplement + Acc2 * interpFactor; + interpFactor -= inv_NumOfSamples; + interpComplement += inv_NumOfSamples; + } + + /* Store the old filter for interpolation next time */ + for ( k = 0; k < FirFilterLength; k++ ) + { + FilterStored[k] = FirFilterRev_p[k]; + } + + /* 2. Copy the last FirFilterLength-1 samples of the InputFrame to */ + /* the beginning of the InputFrame */ + mvr2r( InputFrame_p + NumOfSamples, InputFrame_p, FirFilterLengthMinusOne ); + + return; +} +#endif diff --git a/lib_dec/ivas_objectRenderer_sources.c b/lib_dec/ivas_objectRenderer_sources.c new file mode 100644 index 0000000000..b24708a195 --- /dev/null +++ b/lib_dec/ivas_objectRenderer_sources.c @@ -0,0 +1,741 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void TDREND_SRC_SPATIAL_Dealloc( TDREND_SRC_SPATIAL_t *SrcSpatial_p ); +static void TDREND_SRC_SPATIAL_Init( TDREND_SRC_SPATIAL_t *SrcSpatial_p, const TDREND_PosType_t PosType ); +static void TDREND_SRC_SPATIAL_SetDirAtten( TDREND_SRC_SPATIAL_t *SrcSpatial_p, const TDREND_DirAtten_t *DirAtten_p ); +static float TDREND_SRC_SPATIAL_GetDirGain( const TDREND_DirAtten_t *DirAtten_p, const float *Front_p, const float *RelPos_p ); +static float TDREND_SRC_SPATIAL_GetDistGain( const TDREND_DistAtten_t *DistAtten_p, const float Dist ); +static ivas_error TDREND_SRC_REND_Alloc( TDREND_SRC_REND_t **SrcRend_pp ); +static void TDREND_SRC_REND_Dealloc( TDREND_SRC_REND_t *SrcRend_p ); +static void TDREND_SRC_REND_Init( TDREND_SRC_REND_t *SrcRend_p, const int32_t output_Fs ); + + +/*-------------------------------------------------------------------* + * TDREND_MIX_SetSrcPos() + * + * Set source position + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetPos( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const float *Vec_p /* i : Position vector */ +) +{ + TDREND_SRC_SPATIAL_t *SrcSpatial_p; + + if ( SrcInd > hBinRendererTd->MaxSrcInd ) + { + return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index!\n" ) ); + } + else + { + SrcSpatial_p = hBinRendererTd->Sources[SrcInd]->SrcSpatial_p; + + if ( SrcSpatial_p->Pos_p[0] != Vec_p[0] || SrcSpatial_p->Pos_p[1] != Vec_p[1] || SrcSpatial_p->Pos_p[2] != Vec_p[2] ) + { + mvr2r( Vec_p, SrcSpatial_p->Pos_p, 3 ); + SrcSpatial_p->Updated = TRUE; + } + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_SRC_SetDir() + * + * Set source direciton + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetDir( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const float *Vec_p /* i : Direction vector */ +) +{ + TDREND_SRC_SPATIAL_t *SrcSpatial_p; + + /* Value verification */ + if ( ( Vec_p[0] == 0.0f ) && ( Vec_p[1] == 0.0f ) && ( Vec_p[2] == 0.0f ) ) + { + return ( IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Zero direction vector. Command is ignored!\n" ) ); + } + if ( SrcInd > hBinRendererTd->MaxSrcInd ) + { + return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index!\n" ) ); + } + else + { + SrcSpatial_p = hBinRendererTd->Sources[SrcInd]->SrcSpatial_p; + TDREND_SPATIAL_VecNormalize( Vec_p, SrcSpatial_p->Front_p ); + SrcSpatial_p->Updated = TRUE; + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_SRC_SetDirAtten() + * + * Set directional attenuation for the mixer. + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetDirAtten( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const TDREND_DirAtten_t *DirAtten_p /* i : Directional attenuation specifier */ +) +{ + TDREND_SRC_SPATIAL_t *SrcSpatial_p; + if ( SrcInd > hBinRendererTd->MaxSrcInd ) + { + return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index\n" ) ); + } + else + { + SrcSpatial_p = hBinRendererTd->Sources[SrcInd]->SrcSpatial_p; + TDREND_SRC_SPATIAL_SetDirAtten( SrcSpatial_p, DirAtten_p ); + } + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_SRC_SetPlayState() + * + * Set play state for the source. + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_MIX_SRC_SetPlayState( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + const int16_t SrcInd, /* i : Source index */ + const TDREND_PlayStatus_t PlayStatus /* i : Play state */ +) +{ + if ( SrcInd > hBinRendererTd->MaxSrcInd ) + { + return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index\n" ) ); + } + else + { + hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus; + } + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_REND_Alloc() + * + * Renderer allocation + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +static ivas_error TDREND_SRC_REND_Alloc( + TDREND_SRC_REND_t **SrcRend_pp /* i/o: Source object */ +) +{ + TDREND_SRC_REND_t *SrcRend_p; + + *SrcRend_pp = NULL; + + /* Allocate the TDREND_SRC_REND_t variable */ + SrcRend_p = (TDREND_SRC_REND_t *) count_malloc( sizeof( TDREND_SRC_REND_t ) ); + if ( SrcRend_p == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "SrcRend_p allocation error\n" ) ); + } + + /* Allocate the HR filtering structures */ + SrcRend_p->SfxSpatBin_p = (SFX_SpatBin_t *) count_malloc( SPAT_BIN_MAX_INPUT_CHANNELS * sizeof( SFX_SpatBin_t ) ); + if ( SrcRend_p->SfxSpatBin_p == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "SrcRend_p->SfxSpatBin_p allocation error\n" ) ); + } + + *SrcRend_pp = SrcRend_p; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_REND_Dealloc() + * + * Deallocate rendering aspects of source. + --------------------------------------------------------------------*/ + +static void TDREND_SRC_REND_Dealloc( + TDREND_SRC_REND_t *SrcRend_p /* i/o: Source object */ +) +{ + if ( SrcRend_p == NULL ) + { + return; + } + if ( SrcRend_p->SfxSpatBin_p->LeftOldBuffer != NULL ) + { + count_free( SrcRend_p->SfxSpatBin_p->LeftOldBuffer ); + } + if ( SrcRend_p->SfxSpatBin_p->RightOldBuffer != NULL ) + { + count_free( SrcRend_p->SfxSpatBin_p->RightOldBuffer ); + } + if ( SrcRend_p->SfxSpatBin_p->LeftFilter_p != NULL ) + { + count_free( SrcRend_p->SfxSpatBin_p->LeftFilter_p ); + } + if ( SrcRend_p->SfxSpatBin_p->LeftFilterIncr_p != NULL ) + { + count_free( SrcRend_p->SfxSpatBin_p->LeftFilterIncr_p ); + } + if ( SrcRend_p->SfxSpatBin_p->RightFilter_p != NULL ) + { + count_free( SrcRend_p->SfxSpatBin_p->RightFilter_p ); + } + if ( SrcRend_p->SfxSpatBin_p->RightFilterIncr_p != NULL ) + { + count_free( SrcRend_p->SfxSpatBin_p->RightFilterIncr_p ); + } + if ( SrcRend_p->SfxSpatBin_p != NULL ) + { + count_free( SrcRend_p->SfxSpatBin_p ); + } + + /* Free the SrcRend_p variable */ + count_free( SrcRend_p ); + SrcRend_p = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_REND_Init() + * + * Initialize rendering aspects of source. + --------------------------------------------------------------------*/ + +static void TDREND_SRC_REND_Init( + TDREND_SRC_REND_t *SrcRend_p, /* i/o: Source object */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + int16_t nC; + + /* Internal state */ + SrcRend_p->InputAvailable = FALSE; + SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_INITIAL; + +#ifdef TDREND_HRTF_TABLE_METHODS + SrcRend_p->SfxSpatBin_p->HrFilterInterpOn = 0; /* Disabled for first frame */ +#endif + /* SrcGain */ + for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) + { + SrcRend_p->SrcGainMin_p[nC] = 0.0f; + SrcRend_p->SrcGain_p[nC] = 1.0f; + SrcRend_p->SrcGainMax_p[nC] = 1.0f; + } + SrcRend_p->SrcGainUpdated = FALSE; + + /* Init directional and distance gains */ + for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) + { + SrcRend_p->DirGain_p[nC] = 1.0f; + SrcRend_p->DistGain_p[nC] = 1.0f; + } + + /* Init the SfxSpatBin structs. One per channel. Default is effect turned off. */ + for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) + { + TDREND_SFX_SpatBin_Initialize( SrcRend_p->SfxSpatBin_p + nC, output_Fs ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_REND_UpdateFiltersFromSpatialParams() + * + * Update the HR filter due to spatial change. + --------------------------------------------------------------------*/ + +void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ + TDREND_SRC_REND_t *SrcRend_p, /* i/o: Source object */ + TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i : Spatial aspects of source */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + TDREND_MIX_Listener_t *Listener_p; + TDREND_HRFILT_FiltSet_t *HrFiltSet_p; + SFX_SpatBin_t *SfxSpatBin_p; + SFX_SpatBin_Params_t SfxSpatBinParams; + + float ListRelPos[3], ListRelDist; + float Gain; + float Azim, Elev; + int16_t mem_size; + + /* Evaluate the HR filters from the source and listener positions and orientations */ + Listener_p = hBinRendererTd->Listener_p; + HrFiltSet_p = hBinRendererTd->HrFiltSet_p; + + SfxSpatBinParams.LeftFilter_p = NULL; + SfxSpatBinParams.RightFilter_p = NULL; + + mem_size = (int16_t) ( HrFiltSet_p->FiltLength * sizeof( float ) ); + + SfxSpatBin_p = SrcRend_p->SfxSpatBin_p; + SfxSpatBinParams.TurnOn = TRUE; + SfxSpatBinParams.Reset = FALSE; + + SfxSpatBinParams.FilterLength = HrFiltSet_p->FiltLength; + SfxSpatBinParams.LeftFilter_p = (float *) count_malloc( mem_size ); + SfxSpatBinParams.RightFilter_p = (float *) count_malloc( mem_size ); + + /* 1. Map source pos to the coordinate system of the listener */ + switch ( SrcSpatial_p->PosType ) + { + case TDREND_POSTYPE_RELATIVE_TO_LISTENER: + /* Listener relative position */ + mvr2r( SrcSpatial_p->Pos_p, ListRelPos, 3 ); + break; + case TDREND_POSTYPE_ABSOLUTE: + /* Absolute position */ + TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos ); + break; + default: /* Illegal position type */ +#ifdef DEBUGGING + printf( "Warning! TDREND_SRC_REND_UpdateFiltersFromSpatialParams: Invalid position type. Assuming absolute position!\n" ); +#endif + /* Assume absolute position */ + TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos ); + break; + } + + ListRelDist = TDREND_SPATIAL_VecNorm( ListRelPos ); + + /* 2. Evaluate the Elevation and Azimuth angles */ + if ( ( ListRelPos[0] == 0 ) && ( ListRelPos[1] == 0 ) && ( ListRelPos[2] == 0 ) ) + { + Elev = 0.0; + Azim = 0.0; + } + else + { + Elev = _180_OVER_PI * atan2f( ListRelPos[2], sqrtf( ListRelPos[0] * ListRelPos[0] + ListRelPos[1] * ListRelPos[1] ) ); + /* Basis set is [front, right, up], which is a left-handed coordinate system. Minus sign here is to change to a positive-left system for azimuth */ + Azim = -1.0f * _180_OVER_PI * (float) atan2f( ListRelPos[1], ListRelPos[0] ); + } + + GetFilterFromAngle( HrFiltSet_p, Elev, Azim, &SfxSpatBinParams ); + + /* 6. Evaluate the directional and distance gains */ + /* Directional gain */ + *SrcRend_p->DirGain_p = 1.0f; + if ( SrcSpatial_p->DirAttenEnabled ) + { + *SrcRend_p->DirGain_p = TDREND_SRC_SPATIAL_GetDirGain( &SrcSpatial_p->DirAtten, SrcSpatial_p->Front_p, ListRelPos ); + } + + /* Distance gain */ + *SrcRend_p->DistGain_p = 1.0f; + if ( hBinRendererTd->UseCommonDistAttenModel ) + { + if ( hBinRendererTd->DistAttenEnabled ) + { + SrcSpatial_p->DistAtten.DistAttenModel = hBinRendererTd->DistAttenModel; + *SrcRend_p->DistGain_p = TDREND_SRC_SPATIAL_GetDistGain( &SrcSpatial_p->DistAtten, ListRelDist ); + } + } + else + { + if ( SrcSpatial_p->DistAttenEnabled ) + { + *SrcRend_p->DistGain_p = TDREND_SRC_SPATIAL_GetDistGain( &SrcSpatial_p->DistAtten, ListRelDist ); + } + } + + /* Update total gains */ + Gain = ( *SrcRend_p->SrcGain_p ) * ( *SrcRend_p->DirGain_p ) * ( *SrcRend_p->DistGain_p ) * hBinRendererTd->Gain; + SfxSpatBinParams.LeftVolume = Gain; + SfxSpatBinParams.RightVolume = Gain; + + /* Reset source gain update flag (That update is now included in the total gain update) */ + SrcRend_p->SrcGainUpdated = FALSE; + + /* Update the rendering parameters of the SFX effect */ + TDREND_SFX_SpatBin_SetParams( SfxSpatBin_p, &SfxSpatBinParams, output_Fs ); + + if ( SfxSpatBinParams.LeftFilter_p != NULL ) + { + count_free( SfxSpatBinParams.LeftFilter_p ); + } + + if ( SfxSpatBinParams.RightFilter_p != NULL ) + { + count_free( SfxSpatBinParams.RightFilter_p ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_SPATIAL_Alloc() + * + * Allocatie spatial properties of a source. + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +static ivas_error TDREND_SRC_SPATIAL_Alloc( + TDREND_SRC_SPATIAL_t **SrcSpatial_pp /* i/o: Source spatial parameters */ +) +{ + TDREND_SRC_SPATIAL_t *SrcSpatial_p; + + *SrcSpatial_pp = NULL; + + /* Allocate the TDREND_SRC_t variable */ + SrcSpatial_p = (TDREND_SRC_SPATIAL_t *) count_malloc( sizeof( TDREND_SRC_SPATIAL_t ) ); + if ( SrcSpatial_p == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "TDREND_SRC_SPATIAL_t allocation error\n" ) ); + } + + *SrcSpatial_pp = SrcSpatial_p; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_SPATIAL_Dealloc() + * + * Deallocate spatial properties of a source. + --------------------------------------------------------------------*/ + +static void TDREND_SRC_SPATIAL_Dealloc( + TDREND_SRC_SPATIAL_t *SrcSpatial_p /* i/o: Source spatial parameters */ +) +{ + if ( SrcSpatial_p == NULL ) + { + return; + } + /* Free the SrcSpatial_p variable */ + count_free( SrcSpatial_p ); + SrcSpatial_p = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_SPATIAL_Init() + * + * Initialize spatial properties of a source. + --------------------------------------------------------------------*/ + +static void TDREND_SRC_SPATIAL_Init( + TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i/o: Source spatial parameters */ + const TDREND_PosType_t PosType /* i : Relative/absolute position type */ +) +{ + int16_t nC; + + /* Initialize variables */ + SrcSpatial_p->Updated = FALSE; + + /* Source position, velocity and direction vectors */ + SrcSpatial_p->PosType = PosType; + for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) + { + /* Source position */ + TDREND_SPATIAL_VecInit( SrcSpatial_p->Pos_p + nC * 3, 0.0f, 0.0f, 0.0f ); + + /* Source direction */ + TDREND_SPATIAL_VecInit( SrcSpatial_p->Front_p + nC * 3, 0.0f, 0.0f, 1.0f ); + } + + /* Source directional attenuation */ + SrcSpatial_p->DirAttenEnabled = FALSE; + SrcSpatial_p->DirAtten.ConeInnerAngle = 360.0f; + SrcSpatial_p->DirAtten.ConeOuterAngle = 360.0f; + SrcSpatial_p->DirAtten.ConeOuterGain = 1.0f; + + /* Source distance attenuation */ + SrcSpatial_p->DistAttenEnabled = FALSE; + SrcSpatial_p->DistAtten.DistAttenModel = TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED; + SrcSpatial_p->DistAtten.RefDist = 1.0f; + SrcSpatial_p->DistAtten.MaxDist = 10.0f; + SrcSpatial_p->DistAtten.RollOffFactor = 1.0f; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_SPATIAL_SetDirAtten() + * + * Sets the directional attenuation mode. + --------------------------------------------------------------------*/ + +static void TDREND_SRC_SPATIAL_SetDirAtten( + TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i/o: Source spatial parameters */ + const TDREND_DirAtten_t *DirAtten_p /* i : Directionality specification */ +) +{ + /* Set directional attenuation */ + SrcSpatial_p->DirAttenEnabled = TRUE; + SrcSpatial_p->DirAtten.ConeInnerAngle = DirAtten_p->ConeInnerAngle; + SrcSpatial_p->DirAtten.ConeOuterAngle = DirAtten_p->ConeOuterAngle; + SrcSpatial_p->DirAtten.ConeOuterGain = DirAtten_p->ConeOuterGain; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_SPATIAL_GetDirGain() + * + * Returns the gain due to object orientation. + --------------------------------------------------------------------*/ + +/*! r: Gain value */ +static float TDREND_SRC_SPATIAL_GetDirGain( + const TDREND_DirAtten_t *DirAtten_p, /* i : Directional attenuation specification */ + const float *Front_p, /* i : Front-pointing vector */ + const float *RelPos_p /* i : Relative position */ +) +{ + float DirGain; + float Vec[3]; + float ProjCoef, NormRelPos; + float AngleDeg; + + DirGain = 1.0f; + + /* Note that the front vector is unit norm, thus */ + /* Angle = acos ( Proj coeff from projecting -RelPos onto Front / norm(RelPos) ); */ + v_multc( RelPos_p, -1, Vec, 3 ); + ProjCoef = dotp( Vec, Front_p, 3 ); + NormRelPos = TDREND_SPATIAL_VecNorm( RelPos_p ); + + if ( NormRelPos != 0.0f ) + { + AngleDeg = _180_OVER_PI * acosf( ProjCoef / NormRelPos ); + } + else + { + AngleDeg = 0.0f; + } + + if ( 2.0f * AngleDeg <= DirAtten_p->ConeInnerAngle ) + { + DirGain = 1.0f; + } + else if ( 2.0f * AngleDeg <= DirAtten_p->ConeOuterAngle ) + { + DirGain = 1.0f - ( 2.0f * AngleDeg - DirAtten_p->ConeInnerAngle ) / ( DirAtten_p->ConeOuterAngle - DirAtten_p->ConeInnerAngle ) * ( 1.0f - DirAtten_p->ConeOuterGain ); + } + else + { + DirGain = DirAtten_p->ConeOuterGain; + } + + return DirGain; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_SPATIAL_GetDistGain() + * + * Returns the gain due to distance. + --------------------------------------------------------------------*/ + +/*! r: Gain value */ +static float TDREND_SRC_SPATIAL_GetDistGain( + const TDREND_DistAtten_t *DistAtten_p, /* i : Distance attenuation parameters */ + const float Dist /* i : Distance value */ +) +{ + float DistGain; + float Dist2; + + DistGain = 1.0f; + Dist2 = Dist; + + switch ( DistAtten_p->DistAttenModel ) + { + case TDREND_DIST_ATTEN_MODEL_INV_DIST: + DistGain = DistAtten_p->RefDist / ( DistAtten_p->RefDist + DistAtten_p->RollOffFactor * ( Dist2 - DistAtten_p->RefDist ) ); + break; + + case TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED: + if ( Dist2 < DistAtten_p->RefDist ) + { + Dist2 = DistAtten_p->RefDist; + } + + if ( Dist2 > DistAtten_p->MaxDist ) + { + Dist2 = DistAtten_p->MaxDist; + } + + DistGain = DistAtten_p->RefDist / ( DistAtten_p->RefDist + DistAtten_p->RollOffFactor * ( Dist2 - DistAtten_p->RefDist ) ); + break; + } + + return DistGain; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_Alloc() + * + * Allocate a source. + --------------------------------------------------------------------*/ + +/*! r: TD Renderer result code. */ +ivas_error TDREND_SRC_Alloc( + TDREND_SRC_t **Src_pp /* i/o: Source */ +) +{ + ivas_error error; + TDREND_SRC_t *Src_p; + + error = IVAS_ERR_OK; + + *Src_pp = NULL; + + /* Allocate the TDREND_SRC_t variable */ + Src_p = (TDREND_SRC_t *) count_malloc( sizeof( TDREND_SRC_t ) ); + if ( Src_p == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, " TDREND_SRC_Alloc: Allocation error\n" ) ); + } + + Src_p->SrcSpatial_p = NULL; + /* If source type is dynamic alloc the TDREND_SRC_SPATIAL_t variable */ + if ( ( error = TDREND_SRC_SPATIAL_Alloc( &Src_p->SrcSpatial_p ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = TDREND_SRC_REND_Alloc( &Src_p->SrcRend_p ) ) != IVAS_ERR_OK ) + { + return error; + } + + *Src_pp = Src_p; + + return error; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_Dealloc() + * + * Deallocate a source. + --------------------------------------------------------------------*/ + +void TDREND_SRC_Dealloc( + TDREND_SRC_t *Src_p ) +{ + if ( Src_p == NULL ) + { + return; + } + + /* Delloc the TDREND_SRC_Spatial_t variable */ + TDREND_SRC_SPATIAL_Dealloc( Src_p->SrcSpatial_p ); + + /* Delloc the TDREND_SRC_REND__t variable */ + TDREND_SRC_REND_Dealloc( Src_p->SrcRend_p ); + + /* Free the Src_p variable */ + count_free( Src_p ); + Src_p = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SRC_Init() + * + * Initializes a source. + --------------------------------------------------------------------*/ + +void TDREND_SRC_Init( + TDREND_SRC_t *Src_p, /* i/o: Source to initialize */ + const TDREND_PosType_t PosType, /* i : Position type specifier */ + const int32_t output_Fs /* i : Output sampling rate */ +) +{ + /* Init the TDREND_SRC_Spatial_t variable */ + if ( Src_p->SrcSpatial_p != NULL ) + { + TDREND_SRC_SPATIAL_Init( Src_p->SrcSpatial_p, PosType ); + } + + /* Init the TDREND_SRC_REND_t variable */ + TDREND_SRC_REND_Init( Src_p->SrcRend_p, output_Fs ); + + return; +} diff --git a/lib_dec/ivas_objectRenderer_vec.c b/lib_dec/ivas_objectRenderer_vec.c new file mode 100644 index 0000000000..a3bd94683b --- /dev/null +++ b/lib_dec/ivas_objectRenderer_vec.c @@ -0,0 +1,184 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +/*-------------------------------------------------------------------* + * TDREND_SPATIAL_VecInit() + * + * Initialize 3-dim vector + *-------------------------------------------------------------------*/ + +void TDREND_SPATIAL_VecInit( + float *Pos_p, /* o : Output vector */ + const float PosX, /* i : X value */ + const float PosY, /* i : Y value */ + const float PosZ /* i : Z value */ +) +{ + Pos_p[0] = PosX; + Pos_p[1] = PosY; + Pos_p[2] = PosZ; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SPATIAL_VecNorm() + * + * Compute Euclidian norm of vector + *-------------------------------------------------------------------*/ + +/*! r: Euclidian norm value */ +float TDREND_SPATIAL_VecNorm( + const float *Vec_p /* i : Vector for norm calculation */ +) +{ + return sqrtf( Vec_p[0] * Vec_p[0] + Vec_p[1] * Vec_p[1] + Vec_p[2] * Vec_p[2] ); +} + + +/*-------------------------------------------------------------------* + * TDREND_SPATIAL_VecNormalize() + * + * Normalize vector to unit norm + *-------------------------------------------------------------------*/ + +void TDREND_SPATIAL_VecNormalize( + const float *Vec_p, /* i : Input vector */ + float *VecNorm_p /* o : Output vector */ +) +{ + float scaler; + + scaler = 1.0f / sqrtf( Vec_p[0] * Vec_p[0] + Vec_p[1] * Vec_p[1] + Vec_p[2] * Vec_p[2] ); + VecNorm_p[0] = scaler * Vec_p[0]; + VecNorm_p[1] = scaler * Vec_p[1]; + VecNorm_p[2] = scaler * Vec_p[2]; + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SPATIAL_VecMapToNewCoordSystem() + * + * Transform vector to new coordinate system + *-------------------------------------------------------------------*/ + +void TDREND_SPATIAL_VecMapToNewCoordSystem( + const float *Vec_p, /* i : Input vector */ + const float *TranslVec_p, /* i : Translation vector */ + const float *DirVec_p, /* i : Direction vector */ + const float *UpVec_p, /* i : Up vector */ + const float *RightVec_p, /* i : Right vector */ + float *MappedVec_p /* o : Transformed vector */ +) +{ + float RelVec[3]; + + /* Evaluate Vec relative to the new origin given by TranslVec */ + v_sub( Vec_p, TranslVec_p, RelVec, 3 ); + + /* Evalute the relative Vec in the coordinates of the Orientation vectors, */ + /* which form an orthonormal basis */ + MappedVec_p[0] = dotp( RelVec, DirVec_p, 3 ); + MappedVec_p[1] = dotp( RelVec, RightVec_p, 3 ); + MappedVec_p[2] = dotp( RelVec, UpVec_p, 3 ); + + return; +} + + +/*-------------------------------------------------------------------* + * TDREND_SPATIAL_EvalOrthonormOrient() + * + * Evaluate the normalized orientation vectors + *-------------------------------------------------------------------*/ + +/*! r: Flag if the orientation has been updated */ +int16_t TDREND_SPATIAL_EvalOrthonormOrient( + float *FrontVecON_p, /* o : Normalized front vector */ + float *UpVecON_p, /* o : Normalized up vector */ + float *RightVecON_p, /* o : Normalized right vector */ + const float *FrontVec_p, /* i : Input front vector */ + const float *UpVec_p /* i : Input up vector */ +) +{ + float tmp[9]; + int16_t orientation_updated; + + orientation_updated = FALSE; + + /* Store current state to detect change */ + mvr2r( FrontVecON_p, tmp, 3 ); + mvr2r( RightVecON_p, tmp + 3, 3 ); + mvr2r( UpVecON_p, tmp + 6, 3 ); + + /* Evaluate the normalized front vector */ + TDREND_SPATIAL_VecNormalize( FrontVec_p, FrontVecON_p ); + + /* Evaluate the orthonormal right vector */ + /* through the cross product of the front and the up vectors */ + RightVecON_p[0] = FrontVecON_p[1] * UpVec_p[2] - FrontVecON_p[2] * UpVec_p[1]; + RightVecON_p[1] = FrontVecON_p[2] * UpVec_p[0] - FrontVecON_p[0] * UpVec_p[2]; + RightVecON_p[2] = FrontVecON_p[0] * UpVec_p[1] - FrontVecON_p[1] * UpVec_p[0]; + + TDREND_SPATIAL_VecNormalize( RightVecON_p, RightVecON_p ); + + /* Evaluate the orthonormal up vector */ + /* through the cross product of the front and the right vectors */ + UpVecON_p[0] = RightVecON_p[1] * FrontVecON_p[2] - RightVecON_p[2] * FrontVecON_p[1]; + UpVecON_p[1] = RightVecON_p[2] * FrontVecON_p[0] - RightVecON_p[0] * FrontVecON_p[2]; + UpVecON_p[2] = RightVecON_p[0] * FrontVecON_p[1] - RightVecON_p[1] * FrontVecON_p[0]; + + TDREND_SPATIAL_VecNormalize( UpVecON_p, UpVecON_p ); + + /* Check if vectors have been changed */ + if ( FrontVecON_p[0] != tmp[0] || FrontVecON_p[1] != tmp[1] || FrontVecON_p[2] != tmp[2] || + RightVecON_p[0] != tmp[3] || RightVecON_p[1] != tmp[4] || RightVecON_p[2] != tmp[5] || + UpVecON_p[0] != tmp[6] || UpVecON_p[1] != tmp[7] || UpVecON_p[2] != tmp[8] ) + { + orientation_updated = TRUE; + } + + return orientation_updated; +} diff --git a/lib_dec/ivas_orient_trk.c b/lib_dec/ivas_orient_trk.c new file mode 100644 index 0000000000..4754062b56 --- /dev/null +++ b/lib_dec/ivas_orient_trk.c @@ -0,0 +1,313 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define MAX_TRACKED_ANGLE_AVG_ORIENT PI_OVER_2 +#define MAX_TRACKED_ANGLE_REF_ORIENT EVS_PI + +/* TODO relate to frame rate - assumed here 50Hz, i.e. 20ms frame length */ +#define OTR_UPDATE_RATE ( 50.0f ) /* rate of the Process() calls [Hz]; 1x per IVAS frame */ + + +/*------------------------------------------------------------------------------------------* + * Local functions + *------------------------------------------------------------------------------------------*/ + +static float ClipAngle( + const float angle, + const float min_angle, + const float max_angle ) +{ + float result = angle; + + /* wrap angle modulo 2*pi into range of [-pi, pi> radians */ + /* 'while' assumed to use comparison to 0 */ + while ( result > EVS_PI ) + { + result -= PI2; + } + /* 'while' assumed to use comparison to 0 */ + while ( result <= -EVS_PI ) + { + result += PI2; + } + + /* Next, clip angle into range */ + /* 'if' assumed to use comparison to 0 */ + if ( result < min_angle ) + { + result = min_angle; + } + else + { + /* 'if' assumed to use comparison to 0 */ + if ( result > max_angle ) + { + result = max_angle; + } + } + + return result; +} + + +/*-------------------------------------------------------------------* + * ivas_orient_trk_Init() + * + * + *-------------------------------------------------------------------*/ + +void ivas_orient_trk_Init( + ivas_orient_trk_state_t *pOTR ) +{ + /* Track relative to a reference orientation */ + pOTR->trackingType = OTR_TRACKING_REF_ORIENT; + + /* configuration parameters */ + pOTR->centerAdaptationRate = 1.0f / 30.0f; + pOTR->offCenterAdaptationRate = 1.0f / 8.0f; + pOTR->adaptationAngle = PI_OVER_2; /* Excursion angle relative to center at which maximum adaptation rate shall be applied */ + + /* initial adaptivity filter coefficient, will be auto-adapted */ + pOTR->alpha = sinf( PI2 * pOTR->offCenterAdaptationRate / OTR_UPDATE_RATE ); /* start adaptation at off-center rate = fastest rate */ + + pOTR->absYaw = 0.0f; + pOTR->absPitch = 0.0f; + pOTR->absRoll = 0.0f; + + pOTR->absAvgYaw = 0.0f; + pOTR->absAvgPitch = 0.0f; + pOTR->absAvgRoll = 0.0f; + + /* Use frontal and horiontal orientation as reference orientation, + unless/until overridden by ivas_orient_trk_SetAbsoluteOrientation() */ + pOTR->refYaw = 0.0f; + pOTR->refPitch = 0.0f; + pOTR->refRoll = 0.0f; + + pOTR->trkYaw = 0.0f; + pOTR->trkPitch = 0.0f; + pOTR->trkRoll = 0.0f; +} + + +/*-------------------------------------------------------------------* + * ivas_orient_trk_SetTrackingType() + * + * + *-------------------------------------------------------------------*/ + +ivas_error ivas_orient_trk_SetTrackingType( + ivas_orient_trk_state_t *pOTR, + OTR_TRACKING_T trackingType ) +{ + pOTR->trackingType = trackingType; + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * ivas_orient_trk_SetAbsoluteOrientation() + * + * + *-------------------------------------------------------------------*/ + +ivas_error ivas_orient_trk_SetAbsoluteOrientation( + ivas_orient_trk_state_t *pOTR, + float yaw, + float pitch, + float roll ) +{ + /* TODO implement condition checks */ + pOTR->absYaw = yaw; + pOTR->absPitch = pitch; + pOTR->absRoll = roll; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * ivas_orient_trk_Process() + * + * + *-------------------------------------------------------------------*/ + +ivas_error ivas_orient_trk_Process( + ivas_orient_trk_state_t *pOTR ) +{ + float yaw; + float pitch; + float roll; + + if ( pOTR->trackingType == OTR_TRACKING_AVG_ORIENT ) + { + float normalizedOrientation; + float relativeOrientationRate; + float rateRange; + float cutoffFrequency; + float alpha = pOTR->alpha; + + /* Copy absolute orientation as input to compute further on */ + yaw = pOTR->absYaw; + pitch = pOTR->absPitch; + roll = pOTR->absRoll; + + /* Compute average (low-pass filtered) absolute orientation */ + pOTR->absAvgYaw = ( 1.0f - alpha ) * pOTR->absAvgYaw + alpha * yaw; + pOTR->absAvgPitch = ( 1.0f - alpha ) * pOTR->absAvgPitch + alpha * pitch; + pOTR->absAvgRoll = ( 1.0f - alpha ) * pOTR->absAvgRoll + alpha * roll; + + /* Compute relative orientation = (absolute orientation) - (average absolute orientation) */ + yaw -= pOTR->absAvgYaw; + pitch -= pOTR->absAvgPitch; + roll -= pOTR->absAvgRoll; + + /* Clip tracked relative orientation to avoid wrap around */ + yaw = ClipAngle( yaw, -MAX_TRACKED_ANGLE_AVG_ORIENT, MAX_TRACKED_ANGLE_AVG_ORIENT ); + pitch = ClipAngle( pitch, -MAX_TRACKED_ANGLE_AVG_ORIENT, MAX_TRACKED_ANGLE_AVG_ORIENT ); + roll = ClipAngle( roll, -MAX_TRACKED_ANGLE_AVG_ORIENT, MAX_TRACKED_ANGLE_AVG_ORIENT ); + + /* Store relative orientation result as output */ + pOTR->trkYaw = yaw; + pOTR->trkPitch = pitch; + pOTR->trkRoll = roll; + + /* Reconstruct the mean absolute orientation, compensating for non-linear computation of relative orientation: + take absolute orientation and subtract the *clipped* mean relative orientation */ + pOTR->absAvgYaw = pOTR->absYaw - yaw; + pOTR->absAvgPitch = pOTR->absPitch - pitch; + pOTR->absAvgRoll = pOTR->absRoll - roll; + + /* Adapt LPF constant based on orientation excursion relative to current mean: + - low cutoff (slow adaptation) for small excursions (around center) + - high cutoff (fast adaptation) for large excursions (off-center) + */ + + normalizedOrientation = yaw * yaw; + normalizedOrientation += pitch * pitch; + normalizedOrientation += roll * roll; + + relativeOrientationRate = sqrtf( normalizedOrientation ) / pOTR->adaptationAngle; + /* 'if' assumed to perform comparison to 0 */ + if ( relativeOrientationRate > 1.0f ) + { + relativeOrientationRate = 1.0f; + } + + /* Compute range of the adaptation rate between center = lower rate and off-center = higher rate */ + rateRange = pOTR->offCenterAdaptationRate - pOTR->centerAdaptationRate; + /* 'if' assumed to perform comparison to 0 */ + if ( rateRange < 0.0f ) + { + rateRange = 0.0f; + } + + /* Compute adaptivity cutoff frequency: interpolate between minimum (center) and maximum (off-center) values */ + cutoffFrequency = pOTR->centerAdaptationRate + ( relativeOrientationRate * rateRange ); + + /* Compute filter coefficient corresponding to desired cutoff frequency */ + pOTR->alpha = sinf( 2.0f * EVS_PI * cutoffFrequency / OTR_UPDATE_RATE ); + } + else + { + /* 'if' assumed to perform comparison to 0 */ + if ( pOTR->trackingType == OTR_TRACKING_REF_ORIENT ) + { + /* Reset average orientation */ + pOTR->absAvgYaw = pOTR->absYaw; + pOTR->absAvgPitch = pOTR->absPitch; + pOTR->absAvgRoll = pOTR->absRoll; + + /* Reset adaptation filter - start adaptation at center rate */ + pOTR->alpha = sinf( 2.0f * EVS_PI * pOTR->centerAdaptationRate / OTR_UPDATE_RATE ); + + /* Copy absolute orientation as input to compute further on */ + yaw = pOTR->absYaw; + pitch = pOTR->absPitch; + roll = pOTR->absRoll; + + /* Compute relative orientation = (absolute orientation) - (reference orientation) */ + yaw -= pOTR->refYaw; + pitch -= pOTR->refPitch; + roll -= pOTR->refRoll; + + /* Clip computed relative orientation to avoid wrap around and store as output */ + pOTR->trkYaw = ClipAngle( yaw, -MAX_TRACKED_ANGLE_REF_ORIENT, MAX_TRACKED_ANGLE_REF_ORIENT ); + pOTR->trkPitch = ClipAngle( pitch, -MAX_TRACKED_ANGLE_REF_ORIENT, MAX_TRACKED_ANGLE_REF_ORIENT ); + pOTR->trkRoll = ClipAngle( roll, -MAX_TRACKED_ANGLE_REF_ORIENT, MAX_TRACKED_ANGLE_REF_ORIENT ); + } + + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Non-supported orientation tracking adaptation type" ); + } + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * ivas_orient_trk_GetTrackedOrientation() + * + * + *-------------------------------------------------------------------*/ + +ivas_error ivas_orient_trk_GetTrackedOrientation( + ivas_orient_trk_state_t *pOTR, + float *yaw, + float *pitch, + float *roll ) +{ + *yaw = pOTR->trkYaw; + *pitch = pOTR->trkPitch; + *roll = pOTR->trkRoll; + + return IVAS_ERR_OK; +} diff --git a/lib_dec/ivas_out_setup_conversion.c b/lib_dec/ivas_out_setup_conversion.c new file mode 100644 index 0000000000..c8008fa129 --- /dev/null +++ b/lib_dec/ivas_out_setup_conversion.c @@ -0,0 +1,1208 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" + + +/*----------------------------------------------------------------------------------* + * Local constants + *----------------------------------------------------------------------------------*/ + +#define LS_OUT_CONV_SMOOTHING_FACTOR 0.0435f +#define LS_OUT_CONV_CLIP_FACTOR_MAX 2.0f +#define LS_OUT_CONV_CLIP_FACTOR_MIN 0.3f + + +/*----------------------------------------------------------------------------------* + * Local functions + *----------------------------------------------------------------------------------*/ + +static void ivas_lssetupconversion_computeEQFactor( + float *outputEnergy, + float *inputEnergy, + float *EQ ) +{ + /* Compute the Equalization Gain */ + *EQ = sqrtf( *outputEnergy / ( EPSILON + *inputEnergy ) ); + + /* Limit the Equalization Gain */ + *EQ = min( *EQ, LS_OUT_CONV_CLIP_FACTOR_MAX ); + *EQ = max( *EQ, LS_OUT_CONV_CLIP_FACTOR_MIN ); + + return; +} + + +static void ivas_lssetupconversion_mdct_init_bands( + const int16_t output_frame, /* i : output frame length */ + const int16_t tcx_mode, /* i : tcx mode (TCX10, TCX 20) */ + int16_t *sfbOffset, /* o : sfb offset table */ + int16_t *sfbCnt /* o : number of sfbs */ +) +{ + SpectrumWarping const *lpcBndsParam; + int16_t i, cnt, specStartOffset, L_frameTCX; + const unsigned char *sfbWidths; + + L_frameTCX = ( tcx_mode == TCX_20_CORE ) ? output_frame : ( output_frame / 2 ); + + switch ( output_frame ) + { + case L_FRAME48k: + case L_FRAME32k: + lpcBndsParam = sw32000Hz; + break; + case L_FRAME25_6k: + lpcBndsParam = sw25600Hz; + break; + case L_FRAME16k: + lpcBndsParam = sw16000Hz; + break; + default: + assert( !"Subband division not defined for this frame size" ); + return; + } + + sfbWidths = ( tcx_mode == TCX_20_CORE ? lpcBndsParam->bandLengthsTCX20 : lpcBndsParam->bandLengthsTCX10 ); + cnt = ( tcx_mode == TCX_20_CORE ? 64 : 32 ); + + /* calc sfb offsets */ + specStartOffset = 0; + + for ( i = 0; i < cnt; i++ ) + { + sfbOffset[i] = min( specStartOffset, L_frameTCX ); + specStartOffset += sfbWidths[i]; + + if ( sfbOffset[i] >= L_frameTCX ) + { + break; + } + } + + *sfbCnt = i; + sfbOffset[*sfbCnt] = min( specStartOffset, L_frameTCX ); + + if ( sfbOffset[*sfbCnt] < L_frameTCX ) + { + int16_t nMissingBins = L_frameTCX - sfbOffset[*sfbCnt]; + + if ( sfbWidths[i] / 2 < nMissingBins ) + { + ( *sfbCnt )++; + } + sfbOffset[*sfbCnt] = L_frameTCX; + } + + return; +} + + +static void get_custom_ls_conversion_matrix( + const EFAP_HANDLE hEFAPdata, /* i : EFAP handle */ + const IVAS_OUTPUT_SETUP hTransSetup, /* i : Transport channel configuration handle */ + const LSSETUP_CUSTOM_HANDLE hLsSetupCustom, /* i : Custom LS Setup handle */ + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion /* o : LS Setup Conversion Handle */ +) +{ + int16_t ch_in, ch_in_woLFE; + int16_t ch_out, ch_out_woLFE; + int16_t nchan_in, nchan_out; + int16_t lfe_in_idx, lfe_out_idx; + + float dmxCoeff_LFE; + float tmp_gains[MAX_OUTPUT_CHANNELS]; + + lfe_in_idx = -1; + lfe_out_idx = -1; + + nchan_in = hTransSetup.nchan_out_woLFE + hTransSetup.num_lfe; + nchan_out = hLsSetupCustom->num_spk + hLsSetupCustom->num_lfe; + + /* The below code will need to be restructured in case additional LFEs must be supported */ + if ( hTransSetup.num_lfe > 0 ) + { + lfe_in_idx = hTransSetup.index_lfe[0]; + } + if ( hLsSetupCustom->num_lfe > 0 ) + { + lfe_out_idx = hLsSetupCustom->lfe_idx[0]; + } + + dmxCoeff_LFE = 1.f / hTransSetup.nchan_out_woLFE; + + for ( ch_in = 0, ch_in_woLFE = 0; ch_in < nchan_in; ch_in++, ch_in_woLFE++ ) + { + if ( lfe_in_idx == ch_in ) + { + if ( lfe_out_idx >= 0 ) + { + /* re-route LFE */ + hLsSetUpConversion->dmxMtx[ch_in][lfe_out_idx] = 1.0f; + } + else + { + /* mix the LFE to all channels */ + set_f( hLsSetUpConversion->dmxMtx[ch_in], dmxCoeff_LFE, nchan_out ); + } + + ch_in_woLFE--; + } + else if ( lfe_out_idx != ch_in ) + { + /* Set the values of hLsSetUpConversion->dmxMtx to EFAP gains, skipping LFE */ + efap_determine_gains( hEFAPdata, tmp_gains, hTransSetup.ls_azimuth[ch_in_woLFE], hTransSetup.ls_elevation[ch_in_woLFE], EFAP_MODE_EFAP ); + + for ( ch_out = 0, ch_out_woLFE = 0; ch_out < nchan_out; ch_out++, ch_out_woLFE++ ) + { + if ( lfe_out_idx == ch_out ) + { + ch_out_woLFE--; + } + else + { + hLsSetUpConversion->dmxMtx[ch_in][ch_out] = tmp_gains[ch_out_woLFE]; + } + } + } + } + + return; +} + + +static ivas_error get_ls_conversion_matrix( + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion, + const AUDIO_CONFIG input_config, + const AUDIO_CONFIG output_config ) +{ + int16_t i, k; + int16_t ch_in, ch_out; + int16_t nchan_in, nchan_out; + int16_t index; + float value; + const LS_CONVERSION_MATRIX *conversion_matrix; + ivas_error error; + + error = IVAS_ERR_OK; + + conversion_matrix = NULL; + + nchan_in = audioCfg2channels( input_config ); + nchan_out = audioCfg2channels( output_config ); + + /* Search the table for a mapping */ + for ( i = 0; i < LS_SETUP_CONVERSION_NUM_MAPPINGS; i++ ) + { + if ( ( input_config == ls_conversion_mapping[i].input_config ) && ( output_config == ls_conversion_mapping[i].output_config ) ) + { + /* Special handling for MONO and STEREO downmix */ + if ( output_config == AUDIO_CONFIG_MONO || output_config == AUDIO_CONFIG_STEREO ) + { + for ( ch_in = 0, k = 0; ch_in < nchan_in; ch_in++, k++ ) + { + /* Skip two rows in the matrix for 5.1.x formats */ + if ( ch_in == 6 && ( input_config == AUDIO_CONFIG_5_1_2 || input_config == AUDIO_CONFIG_5_1_4 ) ) + { + k += 2; + } + + for ( ch_out = 0; ch_out < nchan_out; ch_out++ ) + { + if ( output_config == AUDIO_CONFIG_MONO ) + { + hLsSetUpConversion->dmxMtx[ch_in][ch_out] = ls_conversion_cicpX_mono[k][ch_out]; + } + else + { + hLsSetUpConversion->dmxMtx[ch_in][ch_out] = ls_conversion_cicpX_stereo[k][ch_out]; + } + } + } + return error; + } + else + { + conversion_matrix = ls_conversion_mapping[i].conversion_matrix; + + /* If a mapping is defined with a NULL matrix, 1:1 upmix of input channels */ + if ( conversion_matrix == NULL ) + { + for ( k = 0; k < nchan_in; k++ ) + { + hLsSetUpConversion->dmxMtx[k][k] = 1.0f; + } + return error; + } + else + { + for ( k = 1; k < ( conversion_matrix[0].index + 1 ); k++ ) + { + index = conversion_matrix[k].index; + value = conversion_matrix[k].value; + + ch_in = index / nchan_out; + ch_out = index % nchan_out; + + hLsSetUpConversion->dmxMtx[ch_in][ch_out] = value; + } + } + return error; + } + } + } + + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "The conversion matrix between these formats is not defined!\n" ); +} + + +/*------------------------------------------------------------------------- + * ivas_ls_setup_conversion_open() + * + * Open the LS configuration Conversion Module + *-------------------------------------------------------------------------*/ + +ivas_error ivas_ls_setup_conversion_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; + int16_t chIdx, inChannels, outChannels; + int16_t output_frame; + int32_t output_Fs; + int16_t nchan_out; + + wmops_sub_start( "LS_Renderer" ); + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + nchan_out = st_ivas->hDecoderConfig->nchan_out; + output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + + /* Allocate memory to the handle */ + if ( ( hLsSetUpConversion = (LSSETUP_CONVERSION_HANDLE) count_malloc( sizeof( LSSETUP_CONVERSION_STRUCT ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LS configuration Conversion Handle \n" ) ); + } + + assert( nchan_out <= MAX_OUTPUT_CHANNELS ); + + outChannels = nchan_out; + if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC ) + { + inChannels = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; + hLsSetUpConversion->sfbCnt = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); + for ( chIdx = 0; chIdx < outChannels; chIdx++ ) + { + hLsSetUpConversion->targetEnergyPrev[chIdx] = (float *) count_malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ); + hLsSetUpConversion->dmxEnergyPrev[chIdx] = (float *) count_malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ); + set_f( hLsSetUpConversion->targetEnergyPrev[chIdx], 0.0f, hLsSetUpConversion->sfbCnt ); + set_f( hLsSetUpConversion->dmxEnergyPrev[chIdx], 0.0f, hLsSetUpConversion->sfbCnt ); + } + for ( ; chIdx < MAX_CICP_CHANNELS; chIdx++ ) + { + hLsSetUpConversion->targetEnergyPrev[chIdx] = NULL; + hLsSetUpConversion->dmxEnergyPrev[chIdx] = NULL; + } + } + else + { + inChannels = st_ivas->nchan_transport; + /*Initialization of MDCT bands with TCX20 resolution */ + ivas_lssetupconversion_mdct_init_bands( output_frame, TCX_20_CORE, &hLsSetUpConversion->sfbOffset[0], &hLsSetUpConversion->sfbCnt ); + hLsSetUpConversion->targetEnergyPrev[0] = (float *) count_malloc( ( MAX_SFB + 2 ) * sizeof( float ) ); + hLsSetUpConversion->dmxEnergyPrev[0] = (float *) count_malloc( ( MAX_SFB + 2 ) * sizeof( float ) ); + for ( chIdx = 1; chIdx < MAX_CICP_CHANNELS; chIdx++ ) + { + hLsSetUpConversion->targetEnergyPrev[chIdx] = NULL; + hLsSetUpConversion->dmxEnergyPrev[chIdx] = NULL; + } + set_f( hLsSetUpConversion->targetEnergyPrev[0], 0.0f, MAX_SFB + 2 ); + set_f( hLsSetUpConversion->dmxEnergyPrev[0], 0.0f, MAX_SFB + 2 ); + } + + + /* Initialize the DMX conversion matrix */ + for ( chIdx = 0; chIdx < inChannels; chIdx++ ) + { + /* Allocate memory depending on the number of output channels */ + if ( ( hLsSetUpConversion->dmxMtx[chIdx] = (float *) count_malloc( outChannels * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for temp dmx matrix \n" ) ); + } + set_zero( hLsSetUpConversion->dmxMtx[chIdx], outChannels ); + } + + for ( ; chIdx < MAX_CICP_CHANNELS; chIdx++ ) + { + hLsSetUpConversion->dmxMtx[chIdx] = NULL; + } + + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + get_custom_ls_conversion_matrix( st_ivas->hEFAPdata, st_ivas->hTransSetup, st_ivas->hLsSetupCustom, hLsSetUpConversion ); + } + else + { + if ( st_ivas->transport_config != AUDIO_CONFIG_INVALID ) + { + get_ls_conversion_matrix( hLsSetUpConversion, st_ivas->transport_config, st_ivas->hDecoderConfig->output_config ); + } + else + { + get_ls_conversion_matrix( hLsSetUpConversion, st_ivas->intern_config, st_ivas->hDecoderConfig->output_config ); + } + } + + st_ivas->hLsSetUpConversion = hLsSetUpConversion; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_ls_setup_conversion_close() + * + * Close the LS configuration Conversion Module + *-------------------------------------------------------------------------*/ + +void ivas_ls_setup_conversion_close( + LSSETUP_CONVERSION_HANDLE *hLsSetUpConversion /* i/o: LS converter handle */ +) +{ + int16_t idx; + + if ( hLsSetUpConversion == NULL || *hLsSetUpConversion == NULL ) + { + return; + } + + for ( idx = 0; idx < MAX_CICP_CHANNELS; idx++ ) + { + if ( ( *hLsSetUpConversion )->dmxMtx[idx] != NULL ) + { + count_free( ( *hLsSetUpConversion )->dmxMtx[idx] ); + ( *hLsSetUpConversion )->dmxMtx[idx] = NULL; + } + + if ( ( *hLsSetUpConversion )->targetEnergyPrev[idx] != NULL ) + { + count_free( ( *hLsSetUpConversion )->targetEnergyPrev[idx] ); + ( *hLsSetUpConversion )->targetEnergyPrev[idx] = NULL; + } + + if ( ( *hLsSetUpConversion )->dmxEnergyPrev[idx] != NULL ) + { + count_free( ( *hLsSetUpConversion )->dmxEnergyPrev[idx] ); + ( *hLsSetUpConversion )->dmxEnergyPrev[idx] = NULL; + } + } + + count_free( *hLsSetUpConversion ); + *hLsSetUpConversion = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_ls_setup_conversion() + * + * Convert (downmix or upmix) the input LS configuration + * to output LS configuration in time domain + *-------------------------------------------------------------------------*/ + +void ivas_ls_setup_conversion( + Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ + const int16_t output_frame, /* i : frame length */ + float output[][L_FRAME48k] /* i/o: LS input/output synthesis signal */ +) +{ + int16_t chInIdx, chOutIdx, idx; + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; + float dmxCoeff, tmpVal; + float output_tmp[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + + wmops_sub_start( "LS_Renderer" ); + + hLsSetUpConversion = st_ivas->hLsSetUpConversion; + + for ( chOutIdx = 0; chOutIdx < st_ivas->hDecoderConfig->nchan_out; chOutIdx++ ) + { + set_zero( output_tmp[chOutIdx], output_frame ); + for ( chInIdx = 0; chInIdx < st_ivas->nchan_transport; chInIdx++ ) + { + dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; + + if ( dmxCoeff == 0.f ) + { + continue; + } + else if ( dmxCoeff == 1.f ) + { + for ( idx = 0; idx < output_frame; idx++ ) + { + output_tmp[chOutIdx][idx] += output[chInIdx][idx]; + } + } + else + { + for ( idx = 0; idx < output_frame; idx++ ) + { + tmpVal = dmxCoeff * output[chInIdx][idx]; + output_tmp[chOutIdx][idx] += tmpVal; + } + } + } + } + + /* Copy to output buffer */ + for ( chOutIdx = 0; chOutIdx < st_ivas->hDecoderConfig->nchan_out; chOutIdx++ ) + { + mvr2r( output_tmp[chOutIdx], output[chOutIdx], output_frame ); + } + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_ls_setup_conversion_process_mdct() + * + * Equalization in MDCT Domain + *-------------------------------------------------------------------------*/ + +void ivas_ls_setup_conversion_process_mdct( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k] /* i/o: output synthesis signal */ +) +{ + /* Declaration of all required variables */ + int16_t i, bandIdx, chInIdx, chOutIdx, cpe_idx, subFrameIdx, binIdx, idx; + int16_t inChannels, outChannels, num_CPE; + int16_t transform_type[MAX_CICP_CHANNELS][2]; + int16_t frameSize; + float targetEnergy[MAX_SFB + 2], dmxEnergy[MAX_SFB + 2]; + float dmxCoeff; + float dmxSignalReal[L_FRAME48k], dmxSignalImag[L_FRAME48k]; + float eqGain; + float *sig[NB_DIV], *pTmp[NB_DIV], *x[MAX_CICP_CHANNELS][NB_DIV]; + float mdst[L_FRAME48k]; + float convertRes[L_FRAME48k]; + int16_t start, stop, start_tcx5, stop_tcx5; + int16_t mct_chan_mode[MAX_CICP_CHANNELS]; + + /* Declare all handles */ + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; + CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS]; + + wmops_sub_start( "LS_Renderer_MDCT" ); + + /* Assign all the declared variables */ + inChannels = st_ivas->nchan_transport; + outChannels = st_ivas->hDecoderConfig->nchan_out; + num_CPE = st_ivas->nCPE; + + /* Assign output pointer to variable x */ + for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) + { + x[chInIdx][0] = &output[chInIdx][0]; + x[chInIdx][1] = &output[chInIdx][0] + L_FRAME48k / 2; + } + + /* Assign all the declared handles*/ + hLsSetUpConversion = st_ivas->hLsSetUpConversion; + for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) + { + hCPE[cpe_idx] = st_ivas->hCPE[cpe_idx]; + } + + /* Get the core type */ + for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) + { + for ( idx = 0; idx < CPE_CHANNELS; idx++ ) + { + /* get the channel index */ + chInIdx = cpe_idx * CPE_CHANNELS + idx; + assert( chInIdx <= inChannels ); + transform_type[chInIdx][0] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[0]; + transform_type[chInIdx][1] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[1]; + mct_chan_mode[chInIdx] = hCPE[cpe_idx]->hCoreCoder[idx]->mct_chan_mode; + } + } + + /* set overall frequency resolution of (sub)frame to maximum of (sub)frame, requires conversion if both channels are not the same */ + frameSize = hLsSetUpConversion->sfbOffset[hLsSetUpConversion->sfbCnt]; + + set_zero( targetEnergy, MAX_SFB + 2 ); + set_zero( dmxEnergy, MAX_SFB + 2 ); + + for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) + { + /* Step 0: Set the buffers to zero */ + set_zero( dmxSignalReal, frameSize ); + set_zero( dmxSignalImag, frameSize ); + + for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) + { + dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; + + if ( !( chInIdx == LFE_CHANNEL && st_ivas->hMCT->LFE_off ) && mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) + { + /* Step 1: Compute the target energy and DMX signal (possible since we have all signals in TCX20 resolution) */ + if ( dmxCoeff ) + { + float tmpDMXSig, targetEne; + + /* Convert the signal resolution to TCX20 */ + /* initially, set pointers to input; if conversion occurs in (sub)frame, set to convertRes */ + sig[0] = pTmp[0] = x[chInIdx][0]; + sig[1] = pTmp[1] = x[chInIdx][1]; + + /* convert (sub)frames to higher frequency resolution */ + if ( transform_type[chInIdx][0] != TCX_20 ) + { + for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) + { + if ( transform_type[chInIdx][subFrameIdx] == TCX_5 ) + { + /* subframe is TCX5, but TCX10 or TCX20 in other channel -> convert channel with TCX5 to TCX10 resolution */ + pTmp[subFrameIdx] = sig[subFrameIdx] = convertRes + subFrameIdx * frameSize / 2; + convert_coeffs_to_higher_res( x[chInIdx][subFrameIdx], x[chInIdx][subFrameIdx] + frameSize / 4, pTmp[subFrameIdx], frameSize / 4 ); + } + } + + /* convert channel with TCX10 to TCX20 resolution */ + sig[0] = convertRes; + convert_coeffs_to_higher_res( pTmp[0], pTmp[1], sig[0], frameSize / 2 ); + } + + /* MDST estimate */ + mdst[0] = mdst[frameSize - 1] = 0.f; + for ( i = 1; i < frameSize - 1; i++ ) + { + mdst[i] = sig[0][i + 1] - sig[0][i - 1]; + } + + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + start = hLsSetUpConversion->sfbOffset[bandIdx]; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; + + targetEne = 0.0f; + + /* Loop over all the bins in the band */ + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + tmpDMXSig = dmxCoeff * sig[0][binIdx]; + dmxSignalReal[binIdx] += tmpDMXSig; + targetEne += tmpDMXSig * tmpDMXSig; + + tmpDMXSig = dmxCoeff * mdst[binIdx]; + dmxSignalImag[binIdx] += tmpDMXSig; + targetEne += tmpDMXSig * tmpDMXSig; + } + targetEnergy[bandIdx] += targetEne; + } /* end of band loop */ + } + } + } /* end of chInIdx loop */ + + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + float tmpReal, tmpImag, DMXEne; + + start = hLsSetUpConversion->sfbOffset[bandIdx]; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; + + /* Loop over all the bins in the band */ + DMXEne = 0.0f; + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + tmpReal = dmxSignalReal[binIdx]; + tmpImag = dmxSignalImag[binIdx]; + + DMXEne += tmpReal * tmpReal + tmpImag * tmpImag; + } + dmxEnergy[bandIdx] += DMXEne; + } + } /* end of out channel loop */ + + /* Step 3: Peform energy smoothing */ + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + targetEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * targetEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->targetEnergyPrev[0][bandIdx]; + dmxEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * dmxEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->dmxEnergyPrev[0][bandIdx]; + hLsSetUpConversion->targetEnergyPrev[0][bandIdx] = targetEnergy[bandIdx]; + hLsSetUpConversion->dmxEnergyPrev[0][bandIdx] = dmxEnergy[bandIdx]; + } + + /* Step 4: Perform equalization */ + for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) + { + if ( !( chInIdx == LFE_CHANNEL && st_ivas->hMCT->LFE_off ) && mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) + { + if ( transform_type[chInIdx][0] == TCX_20 ) + { + /* TCX20 */ + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + start = hLsSetUpConversion->sfbOffset[bandIdx]; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; + + /* Compute Eq gains */ + ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + x[chInIdx][0][binIdx] *= eqGain; + } + } + } + else + { + stop_tcx5 = 0; + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + start = hLsSetUpConversion->sfbOffset[bandIdx] / 2; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1] / 2; + + /* Compute Eq gains */ + ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); + + for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) + { + if ( transform_type[chInIdx][subFrameIdx] == TCX_10 ) + { + /* TCX10 */ + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + x[chInIdx][subFrameIdx][binIdx] *= eqGain; + } + } + else + { + /* TCX5*/ + start_tcx5 = stop_tcx5; + stop_tcx5 = ( stop + 1 ) / 2; + + for ( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) + { + x[chInIdx][subFrameIdx][binIdx] *= eqGain; + x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )] *= eqGain; + } + } + } + } + } + } + } + + wmops_sub_end(); + return; +} + + +/*------------------------------------------------------------------------- + * ivas_ls_setup_conversion_process_mdct_param_mc() + * + * Equalization in MDCT Domain + *-------------------------------------------------------------------------*/ + +void ivas_ls_setup_conversion_process_mdct_param_mc( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float *x[][NB_DIV] /* i/o: output synthesis signal */ +) +{ + /* Declaration of all required variables */ + int16_t i; + int16_t idx; + int16_t nchan_transport, nchan_out, nchan_transport_format; + int16_t chInIdx, chOutIdx, cpe_idx, subFrameIdx, binIdx; + int16_t band, bandIdx, num_bands; + + int16_t num_CPE; + int16_t transform_type[MAX_CICP_CHANNELS][2]; + int16_t frameSize; + + float targetEnergy[MAX_SFB + 2], dmxEnergy[MAX_SFB + 2]; + float eqGain; + float *sig[MAX_CICP_CHANNELS][NB_DIV], *pTmp[NB_DIV]; + float mdst[MAX_CICP_CHANNELS][L_FRAME48k]; + float convertRes[MAX_CICP_CHANNELS][L_FRAME48k]; + int16_t start, stop, start_tcx5, stop_tcx5; + int16_t mct_chan_mode[MAX_CICP_CHANNELS]; + + float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float cy[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + float real_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS]; + float imag_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS]; + float real_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float imag_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + + float Nrqq[MAX_OUTPUT_CHANNELS]; + float target_ch_ener[MAX_OUTPUT_CHANNELS]; + float *ild_q; + + float DMXEne; + float dmxCoeff; + float dmxSignalReal[L_FRAME48k], dmxSignalImag[L_FRAME48k]; + + float tmpReal, tmpImag; + float tmpDMXSig; + + /* Declare all handles */ + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; + CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS]; + PARAM_MC_DEC_HANDLE hParamMC; + + /* Step 0: Set the buffers to zero */ + set_zero( dmxSignalReal, L_FRAME48k ); + set_zero( dmxSignalImag, L_FRAME48k ); + + /* Assign all the declared variables */ + nchan_transport = st_ivas->nchan_transport; + nchan_out = st_ivas->hDecoderConfig->nchan_out; + num_CPE = st_ivas->nCPE; + nchan_transport_format = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; + + /* Assign all the declared handles*/ + hLsSetUpConversion = st_ivas->hLsSetUpConversion; + for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) + { + hCPE[cpe_idx] = st_ivas->hCPE[cpe_idx]; + } + hParamMC = st_ivas->hParamMC; + + /* Get the core type */ + for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) + { + for ( idx = 0; idx < CPE_CHANNELS; idx++ ) + { + /* get the channel index */ + chInIdx = cpe_idx * CPE_CHANNELS + idx; + assert( chInIdx <= nchan_transport ); + transform_type[chInIdx][0] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[0]; + transform_type[chInIdx][1] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[1]; + mct_chan_mode[chInIdx] = hCPE[cpe_idx]->hCoreCoder[idx]->mct_chan_mode; + } + } + + /* set overall frequency resolution of (sub)frame to maximum of (sub)frame, requires conversion if both channels are not the same */ + frameSize = hLsSetUpConversion->sfbOffset[hLsSetUpConversion->sfbCnt]; + + set_zero( targetEnergy, MAX_SFB + 2 ); + set_zero( dmxEnergy, MAX_SFB + 2 ); + + for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) + { + if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) + { + /* initially, set pointers to input; if conversion occurs in (sub)frame, set to convertRes */ + sig[chInIdx][0] = pTmp[0] = x[chInIdx][0]; + sig[chInIdx][1] = pTmp[1] = x[chInIdx][1]; + + /* convert (sub)frames to higher frequency resolution */ + if ( transform_type[chInIdx][0] != TCX_20 ) + { + for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) + { + if ( transform_type[chInIdx][subFrameIdx] == TCX_5 ) + { + /* subframe is TCX5, but TCX10 or TCX20 in other channel -> convert channel with TCX5 to TCX10 resolution */ + pTmp[subFrameIdx] = sig[chInIdx][subFrameIdx] = convertRes[chInIdx] + subFrameIdx * frameSize / 2; + convert_coeffs_to_higher_res( x[chInIdx][subFrameIdx], x[chInIdx][subFrameIdx] + frameSize / 4, pTmp[subFrameIdx], frameSize / 4 ); + } + } + + /* convert channel with TCX10 to TCX20 resolution */ + sig[chInIdx][0] = convertRes[chInIdx]; + convert_coeffs_to_higher_res( pTmp[0], pTmp[1], sig[chInIdx][0], frameSize / 2 ); + } + } + } + + /* precalculate MDST estimate */ + for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) + { + if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) + { + mdst[chInIdx][0] = mdst[chInIdx][frameSize - 1] = 0.f; + for ( i = 1; i < frameSize - 1; i++ ) + { + mdst[chInIdx][i] = sig[chInIdx][0][i + 1] - sig[chInIdx][0][i - 1]; + } + } + } + + /* Step 1.1, calculate Cx from MDST estimate */ + for ( bandIdx = 0; bandIdx < PARAM_MC_MAX_PARAMETER_BANDS; bandIdx++ ) + { + set_zero( cx[bandIdx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); + set_zero( cx_imag[bandIdx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); + } + + set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); + set_zero( target_ch_ener, MAX_OUTPUT_CHANNELS ); + + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + set_zero( real_in_buffer, PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS ); + set_zero( imag_in_buffer, PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS ); + set_zero( real_buffer, PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); + set_zero( imag_buffer, PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); + + start = hLsSetUpConversion->sfbOffset[bandIdx]; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; + num_bands = stop - start; + + for ( i = 0; i < num_bands; i++ ) + { + band = start + i; + for ( idx = 0; idx < nchan_transport; idx++ ) + { + if ( mct_chan_mode[idx] != MCT_CHAN_MODE_IGNORE ) + { + real_in_buffer[i + num_bands * idx] = sig[idx][0][band]; + imag_in_buffer[i + num_bands * idx] = mdst[idx][band]; + } + } + } + + cmplx_matrix_square( real_in_buffer, imag_in_buffer, num_bands, nchan_transport, real_buffer, imag_buffer ); + + v_add( cx[bandIdx], real_buffer, cx[bandIdx], nchan_transport * nchan_transport ); + + v_add( cx_imag[bandIdx], imag_buffer, cx_imag[bandIdx], nchan_transport * nchan_transport ); + } + + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + DMXEne = 0.0f; + set_zero( cy, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); + set_zero( target_ch_ener, MAX_OUTPUT_CHANNELS ); + + /* Step 1.2, get target channel energies for the transported format as in ivas_param_mc_get_mono_stereo_mixing_matrices(), Nrqq calculation */ + ild_q = hParamMC->icld_q + bandIdx * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; + + for ( chInIdx = 0; chInIdx < nchan_transport_format; chInIdx++ ) + { + float ref_ener = 0.0f; + int16_t ref_channel_cnt; + int16_t ref_channel_idx; + + for ( ref_channel_cnt = 0; ref_channel_cnt < hParamMC->hMetadataPMC->ild_mapping_conf->num_ref_channels[chInIdx]; ref_channel_cnt++ ) + { + ref_channel_idx = hParamMC->hMetadataPMC->ild_mapping_conf->ref_channel_idx[chInIdx][ref_channel_cnt]; + ref_ener += cx[bandIdx][ref_channel_idx + ref_channel_idx * nchan_transport]; + } + + Nrqq[hParamMC->hMetadataPMC->ild_mapping_conf->ild_index[chInIdx]] = powf( 10.0f, ild_q[chInIdx] / 10.0f ) * hParamMC->hMetadataPMC->ild_factors[chInIdx] * ref_ener; + } + + /* Step 1.3 get target Cy like in ivas_param_mc_get_mono_stereo_mixing_matrices() (with dmx matrix from CICPX to MONO/STEREO saved in hParamMC) */ + for ( chOutIdx = 0; chOutIdx < nchan_out; chOutIdx++ ) + { + for ( i = 0; i < nchan_transport_format; i++ ) + { + target_ch_ener[chOutIdx] += hParamMC->ls_conv_dmx_matrix[chOutIdx + i * nchan_out] * Nrqq[i]; + } + cy[chOutIdx + nchan_out * chOutIdx] = target_ch_ener[chOutIdx]; + } + + /* Step 1.4 final target energy for the band would then be the sum over the diagonal of Cy*/ + for ( chOutIdx = 0; chOutIdx < nchan_out; chOutIdx++ ) + { + targetEnergy[bandIdx] += cy[chOutIdx + nchan_out * chOutIdx]; + } + + /* Step 2: Calculate DMX ener */ + start = hLsSetUpConversion->sfbOffset[bandIdx]; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; + + for ( chOutIdx = 0; chOutIdx < nchan_out; chOutIdx++ ) + { + for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) + { + if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) + { + dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; + + /* Step 1: Compute the target energy and DMX signal (possible since we have all signals in TCX20 resolution) */ + if ( dmxCoeff ) + { + /* Loop over all the bins in the band */ + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + tmpDMXSig = dmxCoeff * sig[chInIdx][0][binIdx]; + dmxSignalReal[binIdx] += tmpDMXSig; + + tmpDMXSig = dmxCoeff * mdst[chInIdx][binIdx]; + dmxSignalImag[binIdx] += tmpDMXSig; + } + } + } + } + + /* Loop over all the bins in the band */ + DMXEne = 0.0f; + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + tmpReal = dmxSignalReal[binIdx]; + tmpImag = dmxSignalImag[binIdx]; + + DMXEne += tmpReal * tmpReal + tmpImag * tmpImag; + } + } + + dmxEnergy[bandIdx] = DMXEne; + } + + /* Step 3: Peform energy smoothing */ + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + targetEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * targetEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->targetEnergyPrev[0][bandIdx]; + dmxEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * dmxEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->dmxEnergyPrev[0][bandIdx]; + hLsSetUpConversion->targetEnergyPrev[0][bandIdx] = targetEnergy[bandIdx]; + hLsSetUpConversion->dmxEnergyPrev[0][bandIdx] = dmxEnergy[bandIdx]; + } + + /* Step 4: Perform equalization */ + for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) + { + if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) + { + if ( transform_type[chInIdx][0] == TCX_20 ) + { + /*TCX20*/ + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + start = hLsSetUpConversion->sfbOffset[bandIdx]; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; + + /*Compute Eq gains */ + ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + x[chInIdx][0][binIdx] *= eqGain; + } + } + } + else + { + stop_tcx5 = 0; + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + start = hLsSetUpConversion->sfbOffset[bandIdx] / 2; + stop = hLsSetUpConversion->sfbOffset[bandIdx + 1] / 2; + + /*Compute Eq gains */ + ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); + + for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) + { + if ( transform_type[chInIdx][subFrameIdx] == TCX_10 ) + { + /*TCX10*/ + for ( binIdx = start; binIdx < stop; binIdx++ ) + { + x[chInIdx][subFrameIdx][binIdx] *= eqGain; + } + } + else + { + /* TCX5*/ + start_tcx5 = stop_tcx5; + stop_tcx5 = ( stop + 1 ) / 2; + for ( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) + { + x[chInIdx][subFrameIdx][binIdx] *= eqGain; + } + + for ( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) + { + x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )] *= eqGain; + } + } + } + } + } + } + } + + wmops_sub_end(); + + return; +} + +/*------------------------------------------------------------------------- + * ivas_ls_setup_conversion_process_param_mc() + * + * LS setup conversion in the CLDFB domain for Parametric MC + *-------------------------------------------------------------------------*/ + +void ivas_lssetupconversion_process_param_mc( + Decoder_Struct *st_ivas, /* i/o: LS setup conversion renderer handle */ + float Cldfb_RealBuffer_InOut[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i/o: LS signals */ + float Cldfb_ImagBuffer_InOut[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i/o: LS signals */ + int16_t channel_active[MAX_CICP_CHANNELS] /* i : bitmap indicating which output channels are active */ +) +{ + int16_t slotIdx, chOutIdx, chInIdx, bandIdx; + int16_t inChannels, outChannels; + float targetEnergy[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float dmxEnergy[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float tmpDMXSig, dmxCoeff, tmpReal, tmpImag; + float EQ; + float Cldfb_RealBuffer_tmp[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_tmp[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; + + wmops_sub_start( "LS_Renderer_Process_Param_MC" ); + + /* inits */ + inChannels = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; + outChannels = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + + hLsSetUpConversion = st_ivas->hLsSetUpConversion; + EQ = 0.0f; + + set_s( channel_active, 0, outChannels ); + + /* Loop over each time slots and compute dmx for each time slot */ + for ( slotIdx = 0; slotIdx < st_ivas->hParamMC->subframe_nbslots; slotIdx++ ) + { + /* copy buffers */ + for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) + { + mvr2r( Cldfb_RealBuffer_InOut[chInIdx][slotIdx], Cldfb_RealBuffer_tmp[chInIdx], CLDFB_NO_CHANNELS_MAX ); + mvr2r( Cldfb_ImagBuffer_InOut[chInIdx][slotIdx], Cldfb_ImagBuffer_tmp[chInIdx], CLDFB_NO_CHANNELS_MAX ); + } + /* set the buffers to zero */ + for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) + { + set_f( Cldfb_RealBuffer_InOut[chOutIdx][slotIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); + set_f( Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); + + set_f( dmxEnergy[chOutIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); + set_f( targetEnergy[chOutIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); + } + + /* Compute the target energy and DMX signal */ + for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) + { + for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) + { + dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; + if ( dmxCoeff == 0.0f ) + { + continue; + } + else + { + channel_active[chOutIdx] |= 1; + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + tmpDMXSig = dmxCoeff * Cldfb_RealBuffer_tmp[chInIdx][bandIdx]; + Cldfb_RealBuffer_InOut[chOutIdx][slotIdx][bandIdx] += tmpDMXSig; + targetEnergy[chOutIdx][bandIdx] += tmpDMXSig * tmpDMXSig; + + + tmpDMXSig = dmxCoeff * Cldfb_ImagBuffer_tmp[chInIdx][bandIdx]; + Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx][bandIdx] += tmpDMXSig; + targetEnergy[chOutIdx][bandIdx] += tmpDMXSig * tmpDMXSig; + } + } + } + } + + /* Compute the DMX energy */ + for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) + { + if ( channel_active[chOutIdx] ) + { + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + tmpReal = Cldfb_RealBuffer_InOut[chOutIdx][slotIdx][bandIdx]; + tmpImag = Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx][bandIdx]; + + dmxEnergy[chOutIdx][bandIdx] = tmpReal * tmpReal + tmpImag * tmpImag; + } + } + } + + /* Peform energy smoothing */ + for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) + { + if ( channel_active[chOutIdx] ) + { + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + targetEnergy[chOutIdx][bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * targetEnergy[chOutIdx][bandIdx] + ( 1 - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->targetEnergyPrev[chOutIdx][bandIdx]; + dmxEnergy[chOutIdx][bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * dmxEnergy[chOutIdx][bandIdx] + ( 1 - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->dmxEnergyPrev[chOutIdx][bandIdx]; + hLsSetUpConversion->targetEnergyPrev[chOutIdx][bandIdx] = targetEnergy[chOutIdx][bandIdx]; + hLsSetUpConversion->dmxEnergyPrev[chOutIdx][bandIdx] = dmxEnergy[chOutIdx][bandIdx]; + } + } + } + + /* Compute and perform equalization */ + for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) + { + if ( channel_active[chOutIdx] ) + { + for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) + { + ivas_lssetupconversion_computeEQFactor( &targetEnergy[chOutIdx][bandIdx], &dmxEnergy[chOutIdx][bandIdx], &EQ ); + Cldfb_RealBuffer_InOut[chOutIdx][slotIdx][bandIdx] *= EQ; + Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx][bandIdx] *= EQ; + } + } + } + } + + wmops_sub_end(); + return; +} diff --git a/lib_dec/ivas_output_init.c b/lib_dec/ivas_output_init.c new file mode 100644 index 0000000000..86dc17d174 --- /dev/null +++ b/lib_dec/ivas_output_init.c @@ -0,0 +1,612 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_stat_dec.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#include +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------------* + * audioCfg2channels() + * + * Map Audio configuration to number of channels + *-------------------------------------------------------------------------*/ + +/*! r: number of audio channels */ +int16_t audioCfg2channels( + AUDIO_CONFIG output_config /* i : output audio configuration */ +) +{ + int16_t nchan_out; + + switch ( output_config ) + { + case AUDIO_CONFIG_MONO: + nchan_out = 1; + break; + case AUDIO_CONFIG_STEREO: + nchan_out = 2; + break; + case AUDIO_CONFIG_5_1: + nchan_out = 6; + break; + case AUDIO_CONFIG_7_1: + nchan_out = 8; + break; + case AUDIO_CONFIG_5_1_2: + nchan_out = 8; + break; + case AUDIO_CONFIG_5_1_4: + nchan_out = 10; + break; + case AUDIO_CONFIG_7_1_4: + nchan_out = 12; + break; + case AUDIO_CONFIG_FOA: + nchan_out = 4; + break; + case AUDIO_CONFIG_HOA2: + nchan_out = 9; + break; + case AUDIO_CONFIG_HOA3: + nchan_out = 16; + break; + case AUDIO_CONFIG_OBA: + nchan_out = 8; + break; + case AUDIO_CONFIG_BINAURAL: + case AUDIO_CONFIG_BINAURAL_ROOM: + nchan_out = 2; + break; + case AUDIO_CONFIG_ISM1: + nchan_out = 1; + break; + case AUDIO_CONFIG_ISM2: + nchan_out = 2; + break; + case AUDIO_CONFIG_ISM3: + nchan_out = 3; + break; + case AUDIO_CONFIG_ISM4: + nchan_out = 4; + break; + default: + IVAS_ERROR( IVAS_ERR_INTERNAL, "Error: illegal output configuration\n" ); + nchan_out = -1; + break; + } + + return ( nchan_out ); +} + + +/*-------------------------------------------------------------------------* + * ivas_output_init() + * + * Initialize and configure IVAS output parameters + *-------------------------------------------------------------------------*/ + +void ivas_output_init( + IVAS_OUTPUT_SETUP *hOutSetup, /* o : IVAS output setup structure */ + const AUDIO_CONFIG output_config /* i : output audio configuration */ +) +{ + int16_t nchan_out; + + /* set general default values */ + hOutSetup->output_config = output_config; + hOutSetup->is_loudspeaker_setup = 0; + hOutSetup->is_binaural_setup = 0; + hOutSetup->ambisonics_order = -1; + hOutSetup->separateChannelEnabled = 0; + hOutSetup->separateChannelIndex = 0; + + if ( output_config == AUDIO_CONFIG_LS_CUSTOM ) + { + hOutSetup->is_loudspeaker_setup = 1; + /* set in ivas_init_decoder: */ + /* hOutSetup->ls_azimuth */ + /* hOutSetup->ls_elevation */ + /* hOutSetup->num_lfe */ + /* hOutSetup->index_lfe[0] */ + /* hOutSetup->is_planar_setup */ + } + else + { + /* Set default values for all other than custom LS setup */ + hOutSetup->ls_azimuth = NULL; + hOutSetup->ls_elevation = NULL; + hOutSetup->num_lfe = 0; + hOutSetup->index_lfe[0] = -1; + hOutSetup->is_planar_setup = 0; + + /* set output setup specific values */ + switch ( output_config ) + { + case AUDIO_CONFIG_MONO: + hOutSetup->is_loudspeaker_setup = 1; + break; + case AUDIO_CONFIG_STEREO: + hOutSetup->is_loudspeaker_setup = 1; + hOutSetup->ls_azimuth = ls_azimuth_CICP2; + hOutSetup->ls_elevation = ls_elevation_CICP2; + break; + case AUDIO_CONFIG_FOA: + hOutSetup->ambisonics_order = 1; + break; + case AUDIO_CONFIG_HOA2: + hOutSetup->ambisonics_order = 2; + break; + case AUDIO_CONFIG_HOA3: + hOutSetup->ambisonics_order = 3; + break; + case AUDIO_CONFIG_5_1: + hOutSetup->num_lfe = 1; + hOutSetup->index_lfe[0] = 3; + hOutSetup->is_loudspeaker_setup = 1; + hOutSetup->ls_azimuth = ls_azimuth_CICP6; + hOutSetup->ls_elevation = ls_elevation_CICP6; + hOutSetup->is_planar_setup = 1; + break; + case AUDIO_CONFIG_7_1: + hOutSetup->num_lfe = 1; + hOutSetup->index_lfe[0] = 3; + hOutSetup->is_loudspeaker_setup = 1; + hOutSetup->ls_azimuth = ls_azimuth_CICP12; + hOutSetup->ls_elevation = ls_elevation_CICP12; + hOutSetup->is_planar_setup = 1; + break; + case AUDIO_CONFIG_5_1_2: + hOutSetup->num_lfe = 1; + hOutSetup->index_lfe[0] = 3; + hOutSetup->is_loudspeaker_setup = 1; + hOutSetup->ls_azimuth = ls_azimuth_CICP14; + hOutSetup->ls_elevation = ls_elevation_CICP14; + hOutSetup->is_planar_setup = 0; + break; + case AUDIO_CONFIG_5_1_4: + hOutSetup->num_lfe = 1; + hOutSetup->index_lfe[0] = 3; + hOutSetup->is_loudspeaker_setup = 1; + hOutSetup->ls_azimuth = ls_azimuth_CICP16; + hOutSetup->ls_elevation = ls_elevation_CICP16; + hOutSetup->is_planar_setup = 0; + break; + case AUDIO_CONFIG_7_1_4: + hOutSetup->num_lfe = 1; + hOutSetup->index_lfe[0] = 3; + hOutSetup->is_loudspeaker_setup = 1; + hOutSetup->ls_azimuth = ls_azimuth_CICP19; + hOutSetup->ls_elevation = ls_elevation_CICP19; + hOutSetup->is_planar_setup = 0; + break; + case AUDIO_CONFIG_BINAURAL: + case AUDIO_CONFIG_BINAURAL_ROOM: + case AUDIO_CONFIG_ISM1: + case AUDIO_CONFIG_ISM2: + case AUDIO_CONFIG_ISM3: + case AUDIO_CONFIG_ISM4: + hOutSetup->is_binaural_setup = 1; + case AUDIO_CONFIG_EXTERNAL: + /* Default values are used */ + break; + default: +#ifdef DEBUGGING + /* error */ + assert( !"Error: Unknown output setup!\n" ); +#endif + return; + } + } + + if ( output_config != AUDIO_CONFIG_EXTERNAL && output_config != AUDIO_CONFIG_LS_CUSTOM ) + { + nchan_out = audioCfg2channels( output_config ); + hOutSetup->nchan_out_woLFE = nchan_out - hOutSetup->num_lfe; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_renderer_select() + * + * Select and configure IVAS renderer parameters + *-------------------------------------------------------------------------*/ + +void ivas_renderer_select( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + RENDERER_TYPE *renderer_type; + AUDIO_CONFIG *internal_config; + AUDIO_CONFIG output_config; + AUDIO_CONFIG transport_config; + + renderer_type = &( st_ivas->renderer_type ); + internal_config = &( st_ivas->intern_config ); + output_config = st_ivas->hDecoderConfig->output_config; + transport_config = st_ivas->transport_config; + + /* disabled rendering by default */ + *renderer_type = RENDERER_DISABLE; + + /*-----------------------------------------------------------------* + * Binaural rendering configurations + *-----------------------------------------------------------------*/ + + if ( st_ivas->hDecoderConfig->Opt_Headrotation ) + { + st_ivas->hHeadTrackData->shd_rot_max_order = -1; + } + + if ( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) + { + if ( st_ivas->ivas_format == ISM_FORMAT ) + { + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + if ( output_config == AUDIO_CONFIG_BINAURAL ) + { + *renderer_type = RENDERER_BINAURAL_PARAMETRIC; + } + else + { + *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; + } + } + else /* ISM_MODE_DISC */ + { + if ( output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hRenderConfig->roomAcoustics.use_brir == 0 ) + { +#ifdef DEBUGGING + if ( st_ivas->hDecoderConfig->force_rend == FORCE_CLDFB_RENDERER ) + { + *renderer_type = RENDERER_BINAURAL_FASTCONV; + *internal_config = AUDIO_CONFIG_HOA3; /* Render ISM to HOA3 before binauralization*/ + } + else + { + *renderer_type = RENDERER_BINAURAL_OBJECTS_TD; + *internal_config = AUDIO_CONFIG_BINAURAL; + } +#else + *renderer_type = RENDERER_BINAURAL_OBJECTS_TD; + *internal_config = AUDIO_CONFIG_BINAURAL; +#endif + } + else + { + *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM; +#if defined( DEBUGGING ) + if ( st_ivas->hRenderConfig->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) + { + *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; + } +#endif + *internal_config = AUDIO_CONFIG_7_1_4; + } + } + } + else if ( st_ivas->ivas_format == MASA_FORMAT || ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->nchan_transport <= 2 ) ) + { + *internal_config = output_config; + if ( output_config == AUDIO_CONFIG_BINAURAL ) + { + *renderer_type = RENDERER_BINAURAL_PARAMETRIC; + } + else + { + *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; + } + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + *internal_config = AUDIO_CONFIG_HOA3; + + if ( output_config == AUDIO_CONFIG_BINAURAL ) + { + *renderer_type = RENDERER_BINAURAL_FASTCONV; + } + else + { + *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; + } + if ( st_ivas->hDecoderConfig->Opt_Headrotation ) + { + if ( st_ivas->nchan_transport == 2 ) + { + st_ivas->hHeadTrackData->shd_rot_max_order = 1; + } + else if ( st_ivas->nchan_transport == 4 || st_ivas->nchan_transport == 3 ) + { + st_ivas->hHeadTrackData->shd_rot_max_order = 0; + } + else if ( st_ivas->nchan_transport == 6 || st_ivas->nchan_transport == 5 ) + { + st_ivas->hHeadTrackData->shd_rot_max_order = 2; + } + else if ( st_ivas->nchan_transport == 8 || st_ivas->nchan_transport == 7 ) + { + st_ivas->hHeadTrackData->shd_rot_max_order = 3; + } + } + } + else if ( st_ivas->ivas_format == MC_FORMAT ) + { + if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + *internal_config = output_config; + if ( output_config == AUDIO_CONFIG_BINAURAL ) + { + *renderer_type = RENDERER_BINAURAL_PARAMETRIC; + } + else + { + *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; + } + } + else + { + *internal_config = transport_config; + if ( output_config == AUDIO_CONFIG_BINAURAL ) + { +#ifdef DEBUGGING + if ( ( ( ( st_ivas->transport_config == AUDIO_CONFIG_5_1 || st_ivas->transport_config == AUDIO_CONFIG_7_1 ) && st_ivas->hDecoderConfig->Opt_Headrotation ) || ( st_ivas->hDecoderConfig->force_rend == FORCE_TD_RENDERER ) ) && ( st_ivas->mc_mode == MC_MODE_MCT ) && !( st_ivas->hDecoderConfig->force_rend == FORCE_CLDFB_RENDERER ) ) +#else + if ( ( st_ivas->transport_config == AUDIO_CONFIG_5_1 || st_ivas->transport_config == AUDIO_CONFIG_7_1 ) && st_ivas->hDecoderConfig->Opt_Headrotation && ( st_ivas->mc_mode == MC_MODE_MCT ) ) +#endif + { + *renderer_type = RENDERER_BINAURAL_OBJECTS_TD; + } + else + { + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + *renderer_type = RENDERER_BINAURAL_MIXER_CONV; + } + else + { + *renderer_type = RENDERER_BINAURAL_FASTCONV; + } + +#ifdef DEBUGGING + if ( st_ivas->hRenderConfig->renderer_type_override == RENDER_TYPE_OVERRIDE_CREND ) + { + *renderer_type = RENDERER_BINAURAL_MIXER_CONV; + } + else if ( st_ivas->hRenderConfig->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) + { + *renderer_type = RENDERER_BINAURAL_FASTCONV; + } +#endif + if ( st_ivas->hDecoderConfig->Opt_Headrotation ) + { + /* force HOA3 domain for rotation*/ + *internal_config = AUDIO_CONFIG_HOA3; + } + } + } + else /* AUDIO_CONFIG_BINAURAL_ROOM */ + { + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM; + } + else + { + *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; + } +#if defined( DEBUGGING ) + if ( st_ivas->hRenderConfig->renderer_type_override == RENDER_TYPE_OVERRIDE_CREND ) + { + *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM; + } + else if ( st_ivas->hRenderConfig->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) + { + *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; + } +#endif + } + } + } + } + + /*-----------------------------------------------------------------* + * Non-binaural rendering configurations + *-----------------------------------------------------------------*/ + + else if ( st_ivas->ivas_format == STEREO_FORMAT ) + { + if ( output_config != AUDIO_CONFIG_STEREO && output_config != AUDIO_CONFIG_MONO ) + { + *renderer_type = RENDERER_MC; + } + } + else if ( st_ivas->ivas_format == ISM_FORMAT ) + { + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + *renderer_type = RENDERER_PARAM_ISM; + if ( output_config == AUDIO_CONFIG_MONO ) + { + *renderer_type = RENDERER_MONO_DOWNMIX; + } + else if ( output_config == AUDIO_CONFIG_STEREO ) + { + *renderer_type = RENDERER_DISABLE; + } + else if ( output_config == AUDIO_CONFIG_FOA || output_config == AUDIO_CONFIG_HOA2 || output_config == AUDIO_CONFIG_HOA3 ) + { + *renderer_type = RENDERER_SBA_LINEAR_ENC; + *internal_config = AUDIO_CONFIG_7_1_4; + } + } + else /* ISM_MODE_DISC */ + { + *renderer_type = RENDERER_TD_PANNING; + if ( output_config == AUDIO_CONFIG_MONO ) + { + *renderer_type = RENDERER_MONO_DOWNMIX; + } + else if ( output_config == AUDIO_CONFIG_FOA || output_config == AUDIO_CONFIG_HOA2 || output_config == AUDIO_CONFIG_HOA3 ) + { + *renderer_type = RENDERER_SBA_LINEAR_ENC; + } + else if ( output_config == AUDIO_CONFIG_EXTERNAL ) + { + *renderer_type = RENDERER_DISABLE; + } + } + } + else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT ) + { + *renderer_type = RENDERER_DIRAC; + + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && + ( output_config != AUDIO_CONFIG_5_1 && output_config != AUDIO_CONFIG_5_1_2 && output_config != AUDIO_CONFIG_5_1_4 && output_config != AUDIO_CONFIG_7_1 && output_config != AUDIO_CONFIG_7_1_4 && output_config != AUDIO_CONFIG_LS_CUSTOM ) ) + { + *internal_config = AUDIO_CONFIG_HOA3; + st_ivas->renderer_type = RENDERER_SBA_LINEAR_DEC; + } + else if ( ( st_ivas->ivas_format == MASA_FORMAT && output_config == AUDIO_CONFIG_MONO && st_ivas->nchan_transport == 1 ) || + ( st_ivas->ivas_format == SBA_FORMAT && output_config == AUDIO_CONFIG_STEREO && st_ivas->nchan_transport == 1 ) ) + { + *renderer_type = RENDERER_DISABLE; + } + else if ( ( st_ivas->ivas_format == MASA_FORMAT && output_config == AUDIO_CONFIG_MONO && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_4k4 ) ) + { + *renderer_type = RENDERER_DISABLE; + } + else if ( st_ivas->ivas_format == MASA_FORMAT && output_config == AUDIO_CONFIG_STEREO ) + { + *renderer_type = RENDERER_STEREO_PARAMETRIC; + } + else if ( st_ivas->ivas_format == MASA_FORMAT && output_config == AUDIO_CONFIG_EXTERNAL ) + { + *renderer_type = RENDERER_DISABLE; + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + int16_t nchan_max; + + if ( ( output_config == AUDIO_CONFIG_MONO ) || ( output_config == AUDIO_CONFIG_STEREO ) ) + { + nchan_max = st_ivas->hDecoderConfig->nchan_out; + } + else if ( st_ivas->hOutSetup.ambisonics_order > 0 ) + { + nchan_max = ivas_sba_get_nchan( st_ivas->hOutSetup.ambisonics_order, st_ivas->sba_planar ); + } + else + { + nchan_max = ivas_sba_get_nchan( 3, st_ivas->sba_planar ); + } + if ( st_ivas->nchan_transport >= nchan_max ) + { + *renderer_type = RENDERER_SBA_LINEAR_DEC; + } + } + } + else if ( st_ivas->ivas_format == MC_FORMAT ) + { + *internal_config = transport_config; + if ( st_ivas->mc_mode == MC_MODE_MCT && *internal_config != output_config ) + { + if ( output_config != AUDIO_CONFIG_FOA && output_config != AUDIO_CONFIG_HOA2 && output_config != AUDIO_CONFIG_HOA3 ) + { + *renderer_type = RENDERER_MC; + } + else + { + *renderer_type = RENDERER_SBA_LINEAR_ENC; + } + } + else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + if ( output_config == AUDIO_CONFIG_FOA || output_config == AUDIO_CONFIG_HOA2 || output_config == AUDIO_CONFIG_HOA3 ) + { + *renderer_type = RENDERER_SBA_LINEAR_ENC; + } + else + { + *renderer_type = RENDERER_MC_PARAMMC; + } + } + else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + *internal_config = output_config; + /* No rendering for 1TC to Mono or Stereo and 2TC to Stereo */ + if ( output_config == AUDIO_CONFIG_MONO || output_config == AUDIO_CONFIG_STEREO ) + { + if ( st_ivas->nchan_transport == 1 ) + { + *renderer_type = RENDERER_DISABLE; + } + else if ( output_config == AUDIO_CONFIG_STEREO && st_ivas->nchan_transport == 2 && !st_ivas->hOutSetup.separateChannelEnabled ) + { + *renderer_type = RENDERER_DISABLE; + } + else + { + *renderer_type = RENDERER_MCMASA_MONO_STEREO; + } + } + else + { + *renderer_type = RENDERER_DIRAC; + if ( output_config == AUDIO_CONFIG_FOA || output_config == AUDIO_CONFIG_HOA2 || output_config == AUDIO_CONFIG_HOA3 ) + { + *renderer_type = RENDERER_SBA_LINEAR_ENC; + *internal_config = transport_config; + } + else if ( transport_config == AUDIO_CONFIG_5_1 && ( output_config == AUDIO_CONFIG_7_1 || output_config == AUDIO_CONFIG_5_1_4 ) ) + { + *internal_config = transport_config; + } + } + } + } + + return; +} diff --git a/lib_dec/ivas_pca_dec.c b/lib_dec/ivas_pca_dec.c new file mode 100644 index 0000000000..8ceb6ae0e5 --- /dev/null +++ b/lib_dec/ivas_pca_dec.c @@ -0,0 +1,309 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "ivas_cnst.h" +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local function definitions + *-----------------------------------------------------------------------*/ + +static int32_t ivas_bitstream_read_int32( + Decoder_State *st0, + const int16_t bits ) +{ + int32_t val; + + /* MSB */ + val = get_next_indice( st0, bits - 16 ) << 16; + + /* + LSB */ + val += get_next_indice( st0, 16 ); + + return val; +} + + +void ivas_pca_read_bits( + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + PCA_DEC_STATE *hPCA ) +{ + /*first bit in the PCA payload (first bit after 3 header bits) signals bypass/active*/ + hPCA->pca_bypass = get_next_indice( st0, 1 ); + + if ( hPCA->pca_bypass == PCA_MODE_INACTIVE ) + { + return; + } + + hPCA->index[0] = ivas_bitstream_read_int32( st0, IVAS_PCA_QBITS - 1 ); + hPCA->index[1] = ivas_bitstream_read_int32( st0, IVAS_PCA_QBITS ); + + return; +} + + +static void pca_dec_reset_dquat( + float *ql, + float *qr ) +{ + set_zero( ql, IVAS_PCA_INTERP ); + ql[0] = 1.0f; + + set_zero( qr, IVAS_PCA_INTERP ); + qr[0] = 1.0f; + + return; +} + + +static void pca_dec_reset_mem_eigvec( + PCA_DEC_STATE *hPCA ) +{ + int16_t i; + + for ( i = 0; i < ( IVAS_PCA_LEN_INTERP_EIG_DEC >> 4 ); i++ ) + { + eye_matrix( &hPCA->mem_eigVec_interp[16 * i], FOA_CHANNELS, 1.0f ); + } + + return; +} + + +static void pca_inv_transform_sub( + float *eigVec, + float transformed_data[][L_FRAME48k], /* i : input/transformed audio channels */ + const int16_t start, + const int16_t len, + const int16_t n_channels ) +{ + int16_t i, j, k; + float temp; + float buffer_data[FOA_CHANNELS]; + + for ( j = 0; j < len; j++ ) + { + for ( k = 0; k < n_channels; k++ ) + { + buffer_data[k] = transformed_data[k][j + start]; + } + for ( k = 0; k < n_channels; k++ ) + { + temp = 0.0f; + for ( i = 0; i < n_channels; i++ ) + { + temp += eigVec[k * IVAS_PCA_INTERP + i] * buffer_data[i]; + } + transformed_data[k][j + start] = temp; + } + } + + return; +} + + +static void pca_dec_inv_transform( + PCA_DEC_STATE *hPCA, + float *ql, + float *qr, + const int16_t n_samples, + const int16_t n_channels, + float decoded_data[][L_FRAME48k] ) +{ + int16_t j; + int16_t slot_len; + float ql_interp[IVAS_PCA_LEN_INTERP_Q], qr_interp[IVAS_PCA_LEN_INTERP_Q]; + + quat_shortestpath( hPCA->prev_ql, ql, hPCA->prev_qr, qr ); + + pca_interp_preproc( hPCA->prev_ql, hPCA->prev_qr, ql, qr, IVAS_PCA_N_SLOTS, ql_interp, qr_interp ); + + slot_len = (int16_t) ( n_samples / IVAS_PCA_N_SLOTS ); + for ( j = 0; j < IVAS_PCA_N_SLOTS; j++ ) + { + /* convert from double quaternion to 4D matrix */ + dquat2mat( &ql_interp[4 * j], &qr_interp[4 * j], &hPCA->mem_eigVec_interp[16 * j + IVAS_PCA_DELAY_CMP * 16] ); + + pca_inv_transform_sub( &hPCA->mem_eigVec_interp[16 * j], decoded_data, + slot_len * j, slot_len, n_channels ); + } +} + + +static void pca_dec_update_dquat( + PCA_DEC_STATE *hPCA, + const float *ql, + const float *qr ) +{ + /* update state for next frame */ + mvr2r( qr, hPCA->prev_qr, IVAS_PCA_INTERP ); + mvr2r( ql, hPCA->prev_ql, IVAS_PCA_INTERP ); + + return; +} + + +/*------------------------------------------------------------------------- + * init_pca_dec() + * + * initialize PCA decoder + *------------------------------------------------------------------------*/ + +void init_pca_dec( + PCA_DEC_STATE *hPCA /* i/o: PCA decoder structure */ +) +{ + pca_dec_reset_dquat( hPCA->prev_ql, hPCA->prev_qr ); + pca_dec_reset_mem_eigvec( hPCA ); + + /* set counter saturated to 2 frames */ + hPCA->prev_pca_bypass = 2; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_pca_dec() + * + * PCA decoder + *------------------------------------------------------------------------*/ + +void ivas_pca_dec( + PCA_DEC_STATE *hPCA, /* i/o: PCA decoder structure */ + const int16_t output_frame, /* i : output frame length */ + const int16_t n_channels, /* i : number of channels */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int32_t last_ivas_total_brate, /* i : last IVAS total bitrate */ + const int16_t bfi, /* i : bad frame indicator */ + float pcm_out[][L_FRAME48k] /* o : output audio channels */ +) +{ + float ql[4], qr[4]; + int16_t pca_bypass; + mvr2r( &hPCA->mem_eigVec_interp[IVAS_PCA_N_SLOTS * 16], hPCA->mem_eigVec_interp, IVAS_PCA_DELAY_CMP * 16 ); + + /* @@@TODO: check how ivas_total_brate is set if bfi == 1 */ // VE: and what happens in DTX where "ivas_total_brate" can be close to zero? + + /* handle bit rate switching */ + if ( ivas_total_brate != PCA_BRATE || ( ivas_total_brate == PCA_BRATE && n_channels > FOA_CHANNELS ) ) + { + /* set PCA by-pass mode in current frame and interpolate transform as previous frame used PCA */ + pca_dec_reset_dquat( ql, qr ); + + // VE: todo - rather call PCA resets in the first PCA frame + + if ( ( last_ivas_total_brate != PCA_BRATE ) || ( last_ivas_total_brate == PCA_BRATE && hPCA->prev_pca_bypass > 1 ) ) + { + pca_dec_reset_mem_eigvec( hPCA ); + } + else + { + pca_dec_inv_transform( hPCA, ql, qr, output_frame, n_channels, pcm_out ); + } + + pca_dec_update_dquat( hPCA, ql, qr ); + hPCA->prev_pca_bypass += 1; + + if ( hPCA->prev_pca_bypass > 2 ) + { + hPCA->prev_pca_bypass = 2; + } + + return; + } + + assert( ivas_total_brate == PCA_BRATE ); /* the remaining code is defined at 256k where there are 4 dmx channel */ + + if ( !bfi ) + { + /* set PCA by-pass mode indicator */ + pca_bypass = hPCA->pca_bypass; + } + else + { + pca_bypass = hPCA->prev_pca_bypass; + } + + if ( pca_bypass == PCA_MODE_INACTIVE ) + { + pca_dec_reset_dquat( ql, qr ); + + if ( hPCA->prev_pca_bypass > 1 ) //&& (hPCA->pca_off_hangover == 0)) + { + /* copy input data into output directly as previous frame was already in by-pass mode */ + pca_dec_reset_mem_eigvec( hPCA ); + } + else + { + pca_dec_inv_transform( hPCA, ql, qr, output_frame, n_channels, pcm_out ); + } + + pca_dec_update_dquat( hPCA, ql, qr ); + + hPCA->prev_pca_bypass += 1; + hPCA->prev_pca_bypass = min( hPCA->prev_pca_bypass, 2 ); + + return; + } + + if ( !bfi ) + { + pca_dec_s3( hPCA->index[0], ql ); + pca_dec_s3( hPCA->index[1], qr ); + } + else + { + /* freeze */ + mvr2r( hPCA->prev_ql, ql, IVAS_PCA_INTERP ); + mvr2r( hPCA->prev_qr, qr, IVAS_PCA_INTERP ); + } + + pca_dec_inv_transform( hPCA, ql, qr, output_frame, n_channels, pcm_out ); + + /* update for next frame */ + pca_dec_update_dquat( hPCA, ql, qr ); + hPCA->prev_pca_bypass = 0; + + + return; +} diff --git a/lib_dec/ivas_post_proc.c b/lib_dec/ivas_post_proc.c new file mode 100644 index 0000000000..a295a8b2a2 --- /dev/null +++ b/lib_dec/ivas_post_proc.c @@ -0,0 +1,583 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*------------------------------------------------------------------------- + * ivas_post_proc() + * + * IVAS post-processing + * - in SCE, post-processing of output channel + * - in CPE_DFT, post-processing on output channels + * - in CPE_TD, post-processing on decoded channels before upmixing + *-------------------------------------------------------------------------*/ + +void ivas_post_proc( + SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int16_t n, /* i : channel number */ + float synth[], /* i/o: output synthesis signal */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output synthesis signal */ + const int16_t output_frame, /* i : output frame length */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ +#ifndef DEBUG_STEREO_DFT_NOCORE + int16_t k; +#endif + int16_t delay_comp; + int32_t output_Fs; + Decoder_State **sts; + TCX_LTP_DEC_HANDLE hTcxLtpDec; + + if ( hSCE != NULL ) + { + sts = hSCE->hCoreCoder; + } + else + { + sts = hCPE->hCoreCoder; + } + + output_Fs = sts[0]->output_Fs; + + if ( ( sts[n]->element_mode != IVAS_CPE_DFT && !sba_dirac_stereo_flag ) || ( sts[n]->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) + { + if ( sts[n]->hTcxLtpDec != NULL ) + { + hTcxLtpDec = sts[n]->hTcxLtpDec; + + if ( sts[n]->core != TCX_20_CORE && sts[n]->core != TCX_10_CORE ) + { + /* TCX-LTP Postfilter: used in Mode 1 to update memories and to avoid discontinuities when the past frame was TCX */ + tcx_ltp_post( sts[n], hTcxLtpDec, ACELP_CORE, output_frame, 0, synth, NULL ); + } + else + { + /* set delay */ + delay_comp = NS2SA( output_Fs, DELAY_CLDFB_NS ); + + if ( !( sts[n]->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) && sts[n]->element_mode != IVAS_CPE_MDCT ) + { + mvr2r( sts[n]->prev_synth_buffer, sts[n]->hTcxDec->FBTCXdelayBuf, 0 ); + mvr2r( sts[n]->delay_buf_out, sts[n]->hTcxDec->FBTCXdelayBuf + 0, delay_comp ); + } + + tcx_ltp_post( sts[n], hTcxLtpDec, sts[n]->core, output_frame, NS2SA( output_Fs, ACELP_LOOK_NS ) + delay_comp, synth, sts[n]->hTcxDec->FBTCXdelayBuf ); + } + } + } + else /* IVAS_CPE_DFT */ + { +#ifndef DEBUG_STEREO_DFT_NOCORE + int16_t pit_res_max_past_tmp; + + pit_res_max_past_tmp = sts[0]->pit_res_max_past; + for ( k = 0; k < hCPE->nchan_out; k++ ) + { + if ( k == 0 ) + { + hTcxLtpDec = sts[0]->hTcxLtpDec; + } + else + { + hTcxLtpDec = hCPE->hStereoDft->hTcxLtpDec; + /* copy LTP side-info of downmix channel also to right channel struct */ + hTcxLtpDec->tcxltp = sts[0]->hTcxLtpDec->tcxltp; + hTcxLtpDec->tcxltp_gain = sts[0]->hTcxLtpDec->tcxltp_gain; + hTcxLtpDec->tcxltp_pitch_int = sts[0]->hTcxLtpDec->tcxltp_pitch_int; + hTcxLtpDec->tcxltp_pitch_fr = sts[0]->hTcxLtpDec->tcxltp_pitch_fr; + /* revert update of pit_res_max_past to have correct value also in right channel */ + sts[0]->pit_res_max_past = pit_res_max_past_tmp; + } + + /*TCX-LTP*/ + if ( sts[0]->core != TCX_20_CORE && sts[0]->core != TCX_10_CORE ) + { + /* update memories and to avoid discontinuities when the past frame was TCX */ + tcx_ltp_post( sts[0], hTcxLtpDec, ACELP_CORE, output_frame, 0, output[k], NULL ); + } + else + { + /*Use channel 0 side info.*/ + tcx_ltp_post( sts[0], hTcxLtpDec, TCX_20_CORE, output_frame, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ), output[k], hCPE->output_mem[k] ); + /* IVAS_fmToDo: harmonize buffers hCPE->output_mem and hTcxDec->FBTCXdelayBuf ?? */ + } + } +#endif + } + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_core_switching() + * + * core switching in DFT stereo + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec_core_switching( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[], /* i/o: synthesis @internal Fs */ + float synth[], /* i/o: synthesis @output Fs */ + float hb_synth[], /* i/o: hb synthesis */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ + const int16_t output_frame, /* i : output frame length */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t sba_dirac_stereo_dtx_flag /* i : DTX indicator for SBA DirAC stereo */ +) +{ + int16_t i, tmps; + int16_t delay_dft_dec, delay_dft_dec_lb, delay_tdbwe, delay_comp; + int16_t L_frameTCX; + int32_t output_Fs; + Decoder_State *st; + int16_t predelay, ap_fade_len; + float pAp_input[L_FRAME16k]; +#ifndef DEBUG_STEREO_DFT_NOCORE + float tcx_core_buf[L_FRAME16k]; + float synth_tmp[L_FRAME48k]; +#endif + + st = hCPE->hCoreCoder[0]; /* in DFT stereo, only M channel is decoded by the CoreCoder */ + output_Fs = st->output_Fs; + L_frameTCX = st->hTcxDec->L_frameTCX; + + /*TBE*/ + delay_tdbwe = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); + delay_dft_dec = NS2SA( output_Fs, STEREO_DFT_DELAY_DEC_BWE_NS ); + delay_dft_dec_lb = NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT_DELAY_DEC_BWE_NS ); + + /* TCX/ACELP/HQ-CORE->TCX */ + tmps = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); /*cross-fading size @ FB*/ + delay_comp = NS2SA( st->L_frame * FRAMES_PER_SEC, DELAY_BWE_TOTAL_NS ); /*cross-fading size @ LB*/ + +#if defined( DEBUG_MODE_DFT ) && defined( DEBUG_STEREO_DFT_NOCORE ) + stereo_dft_dec_analyze( hCPE, output, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_NOCORE, 0, 0 ); +#else + + /* resample DFT analysis memories in case of internal sampling rate change */ + if ( st->last_L_frame != st->L_frame && st->last_L_frame <= L_FRAME16k && st->L_frame <= L_FRAME16k ) + { + lerp( hCPE->input_mem_LB[0], hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( st->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + lerp( hCPE->input_mem_BPF[0], hCPE->input_mem_BPF[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( st->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + } + + if ( st->prev_bfi ) + { + /* last_core needed for correctly decoding ACELP->TCX/HQ switching frames in ivas_core_dec(). + In the following steps the decoder needs to consider if the core was changed due to a lost frame to apply the correct transition */ + st->last_core = st->last_core_bfi; + } + + if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE || ( st->bfi == 1 && st->core == ACELP_CORE && st->con_tcx == 1 ) ) + { +#ifdef DEBUGGING + assert( L_frameTCX == output_frame ); +#endif + if ( ( ( st->last_core != ACELP_CORE || ( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) ) && st->last_core != AMR_WB_CORE ) || ( sba_dirac_stereo_dtx_flag && st->cng_type == FD_CNG ) ) /* TCX / HQ-CORE -> TCX / HQ-CORE */ + { + /* In case of a TCX to ACELP switch next frame */ + mvr2r( &output[st->L_frame - NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS )], hCPE->hStereoDft->buff_LBTCX_mem, NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + + /* BPF */ + if ( st->p_bpf_noise_buf ) + { + stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 2, 0 ); + } + + /* TCX */ + stereo_dft_dec_analyze( hCPE, synth, DFT, 0, L_frameTCX, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); + } + else if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE ) /* ACELP -> TCX/HQ */ + { + if ( st->last_core_brate <= SID_2k40 && st->element_mode == IVAS_SCE ) + { + int16_t mem_len = NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); + for ( i = 0; i < mem_len; i++ ) + { + hCPE->input_mem[0][i] *= ( mem_len - i ) / mem_len; + } + + /* Update FB input buff with hb synth for last delay_tdbwe sampled */ + for ( i = 0; i < delay_tdbwe; i++ ) + { + hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_tdbwe + i] += hb_synth[i]; + } + } + else + { + /* Update FB input buff with hb synth for last delay_tdbwe sampled */ + for ( i = 0; i < delay_tdbwe; i++ ) + { + hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_tdbwe + i] = hb_synth[i]; + } + } + + /* cross-fading between (delayed) TBE and FB-TCX over 2.3125ms */ + mvr2r( synth, synth_tmp, output_frame ); + for ( i = 0; i < tmps; i++ ) + { + synth_tmp[i] = ( hb_synth[i + delay_tdbwe] * ( tmps - i ) + synth[i] * i ) / tmps; + } + + /* FB-TCX */ + stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, L_frameTCX, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); + + if ( !st->tcxonly ) + { + if ( hCPE->hStereoDft->hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF ) + { + mvr2r( output, tcx_core_buf, L_FRAME16k ); + } + /* fading-out LB-TCX/ACELP */ + for ( i = 0; i < delay_comp; i++ ) + { + output[i] = ( output[i] * ( delay_comp - i ) ) / delay_comp; + } + + /* In case of TCX frames, output LB TCX is zeroed out until the end but in case of an TCX->ACELP switch, this memory is needed, hence it is backed up */ + /* Unlike the case when DFT32MS is disabled, there is only 1 DFT analysis window, hence in the TCX frame we don't want to do a DFT analysis for LB TCX + but in a potential ACELP frame, we want the memories of the LB TCX for the last OLA samples so that HB analysis can be skipped */ + mvr2r( &output[st->L_frame - NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS )], hCPE->hStereoDft->buff_LBTCX_mem, NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + + /*zero the rest for avoiding adding contribution except the last samples which are not considered in DFT analysis (potentially used in next ACELP frame)*/ + if ( st->last_core_brate > SID_2k40 ) + { + for ( ; i < st->L_frame; i++ ) + { + output[i] = 0.0f; + } + + stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB_ADD, 1, 0 ); + + /* BPF */ + if ( st->p_bpf_noise_buf ) + { + set_zero( hCPE->input_mem_BPF[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + } + } + } + } + } + else /* ACELP core */ + { + if ( st->core_brate <= SID_2k40 && !( sba_dirac_stereo_dtx_flag ) ) + { + set_zero( hCPE->input_mem[0], NS2SA( st->hTcxDec->L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + set_zero( hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + + /* CNG generated in ivas_cpe_dec() */ + } + else if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || st->last_core == HQ_CORE ) /* TCX/HQ -> ACELP */ + { + if ( ( st->last_L_frame <= L_FRAME16k && st->L_frame <= L_FRAME16k ) || ( sba_dirac_stereo_dtx_flag && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) ) + { + /* In case of a TCX to ACELP switch, retrieve the LB-TCX memories for the first STEREO_DFT32MS_OVL_NS NS of OLA */ + lerp( hCPE->hStereoDft->buff_LBTCX_mem, hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( st->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + } + + if ( sba_dirac_stereo_dtx_flag && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) + { + int16_t nZeros; + nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); + delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + + mvr2r( &st->hHQ_core->old_out[nZeros - delay_comp - NS2SA( output_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS )], hCPE->input_mem[0], NS2SA( output_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + mvr2r( synth, synth_tmp, output_frame ); + + int16_t mem_len; + mem_len = NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); + float fac; + fac = 1.0f / mem_len; + for ( i = 0; i < mem_len; i++ ) + { + hCPE->input_mem_LB[0][i] *= ( 1 - i * fac ); + } + set_zero( output, st->L_frame ); + + stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); + + /* BPF */ + if ( st->p_bpf_noise_buf ) + { + stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 0, 0 ); + } + } + else + { + /* ACELP */ + for ( i = 0; i < ( NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec_lb ); i++ ) + { + hCPE->input_mem_LB[0][i] = 0.f; + } + /* ACELP fading-in*/ + for ( i = 0; i < delay_dft_dec_lb; i++ ) + { + hCPE->input_mem_LB[0][NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec_lb + i] *= (float) ( i ) / (float) ( delay_dft_dec_lb ); + } + + stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); + + /* BPF */ + if ( st->p_bpf_noise_buf ) + { + stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 0, 0 ); + } + + /* Fading-in TD-BWE, Fading-out FB-TCX*/ + mvr2r( synth, synth_tmp, output_frame ); + if ( hCPE->last_element_mode != IVAS_CPE_MDCT ) + { + for ( i = 0; i < delay_dft_dec; i++ ) /* 1.25 ms of hb_synth fade-in and TCX fade-out */ + { + hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec + i] = ( hb_synth[delay_tdbwe - delay_dft_dec + i] * ( i ) + hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec + i] * ( delay_dft_dec - i ) ) / ( delay_dft_dec ); + } + for ( i = 0; i < delay_dft_dec; i++ ) /* 1.25 ms of hb_synth fade out. ICBWE fade in performed in time domain here */ + { + synth_tmp[i] = ( hb_synth[delay_tdbwe - delay_dft_dec + i] * ( delay_dft_dec - i ) ) / delay_dft_dec; + } + + for ( ; i < output_frame; i++ ) + { + synth_tmp[i] = 0; + } + } + } + + if ( sba_dirac_stereo_dtx_flag ) + { + stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 0, 0 ); + } + else if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_HB_ADD, 1, 0 ); + } + else + { + stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 1, 0 ); + } + } + else /* ACELP -> ACELP */ + { + if ( sba_dirac_stereo_dtx_flag && st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) + { + set_zero( output, st->L_frame ); + } + /* this needs an indication for sba2stereo in general */ + else if ( hCPE->element_mode == IVAS_SCE && st->last_core_brate <= SID_2k40 && st->cng_type == FD_CNG ) + { + lerp( hCPE->input_mem[0], hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( output_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + } + /* ACELP synthesis @ internal sampling rate */ + stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); + + /* BPF */ + if ( st->p_bpf_noise_buf ) + { + stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 0, 0 ); + } + + /* BWE */ + if ( sba_dirac_stereo_dtx_flag && st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) + { + stereo_dft_dec_analyze( hCPE, synth, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 0, 0 ); + } + else if ( st->extl != -1 || ( st->bws_cnt > 0 && st->core == ACELP_CORE ) ) + { + stereo_dft_dec_analyze( hCPE, hb_synth, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 2, -delay_tdbwe ); + } + } + } +#endif + + /*----------------------------------------------------------------* + * enhanced stereo filling: allpass filter + *----------------------------------------------------------------*/ + + if ( hCPE->hStereoDft->hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF ) + { +#if defined( DEBUG_MODE_INFO ) && defined( DEBUG_STEREO_DFT_NOCORE ) + { + char file_name[100]; + int16_t tmp[320]; + { + sprintf( file_name, "./res/stereo_dft_enc_M_S_%d_c%d_b0.pcm", st->L_frame * FRAMES_PER_SEC, 0 ); + } + dbgread( tmp, sizeof( int16_t ), st->L_frame, file_name ); + for ( i = 0; i < st->L_frame; i++ ) + { + pAp_input[i] = (float) ( tmp[i] ); + } + } +#endif + if ( st->sr_core == INT_FS_12k8 ) + { + ap_fade_len = STEREO_DFT_ALLPASS_FADELEN_12k8; + } + else + { + ap_fade_len = STEREO_DFT_ALLPASS_FADELEN_16k; + } + +#if !defined( DEBUG_MODE_INFO ) || !defined( DEBUG_STEREO_DFT_NOCORE ) + if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE || ( st->bfi == 1 && st->core == ACELP_CORE && st->con_tcx == 1 ) ) + { + int16_t numZeros = (int16_t) ( NS2SA( st->sr_core, N_ZERO_MDCT_NS ) ); + float tmp_fade[max( STEREO_DFT_ALLPASS_FADELEN_12k8, STEREO_DFT_ALLPASS_FADELEN_16k )]; + + mvr2r( st->hHQ_core->old_outLB + numZeros, hCPE->hStereoDft->ap_fade_mem, ap_fade_len ); + + if ( st->last_core == ACELP_CORE && !( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) && !st->tcxonly ) + { + mvr2r( tcx_core_buf, pAp_input, st->L_frame ); + } + else + { + mvr2r( output, pAp_input, st->L_frame ); + } + + if ( st->last_core == ACELP_CORE && !( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) ) /* ACELP -> TCX/HQ-Core */ + { + mvr2r( tcx_core_buf, tmp_fade, ap_fade_len ); + for ( i = 0; i < ap_fade_len; i++ ) + { + pAp_input[i] = ( pAp_input[i] * i + tmp_fade[i] * ( ap_fade_len - i ) ) / ap_fade_len; + } + } + } + else + { + mvr2r( output, pAp_input, st->L_frame ); + if ( st->last_core != ACELP_CORE ) /* TCX/HQ-Core -> ACELP */ + { + for ( i = 0; i < ap_fade_len; i++ ) + { + pAp_input[i] = ( pAp_input[i] * i + hCPE->hStereoDft->ap_fade_mem[i] * ( ap_fade_len - i ) ) / ap_fade_len; + } + } + } +#endif + predelay = NS2SA( st->sr_core, DELAY_BWE_TOTAL_NS ); + + /* apply predelay to have same overall filter delay for all cases */ + delay_signal( pAp_input, st->L_frame, hCPE->hStereoDft->ap_delay_mem, predelay ); + +#ifdef DEBUG_MODE_DFT + { + int16_t v; + int16_t out_ap[L_FRAME16k]; + + for ( v = 0; v < st->L_frame; v++ ) + { + out_ap[v] = (int16_t) pAp_input[v]; + } + + dbgwrite( out_ap, sizeof( int16_t ), st->L_frame, 1, "res/stereo_dft_allpass_input.pcm" ); + } +#endif /*DEBUG_MODE_DFT*/ + + /* input zeroes for transient frames */ + if ( hCPE->hStereoDft->attackPresent ) + { + float inv_tmps = 1.f / ap_fade_len; + if ( hCPE->hStereoDft->ap_wasTransient ) + { + set_zero( pAp_input, ap_fade_len ); + } + else + { + for ( i = 0; i < ap_fade_len; i++ ) + { + pAp_input[i] *= ( ap_fade_len - i ) * inv_tmps; + } + } + set_zero( pAp_input + ap_fade_len, st->L_frame - ap_fade_len ); + hCPE->hStereoDft->ap_wasTransient = 1; + } + else if ( hCPE->hStereoDft->ap_wasTransient ) + { + float inv_tmps = 1.f / ap_fade_len; + for ( i = 0; i < ap_fade_len; i++ ) + { + pAp_input[i] *= i * inv_tmps; + } + hCPE->hStereoDft->ap_wasTransient = 0; + } + + /* apply 5-stage allpass, each stage consisting of a nested allpass pair */ + filter_with_allpass( pAp_input, pAp_input, st->L_frame, &hCPE->hStereoDft->ap1 ); + filter_with_allpass( pAp_input, pAp_input, st->L_frame, &hCPE->hStereoDft->ap2 ); + filter_with_allpass( pAp_input, pAp_input, st->L_frame, &hCPE->hStereoDft->ap3 ); + +#ifdef DEBUG_MODE_DFT + { + int16_t v; + int16_t out_ap[L_FRAME16k]; + for ( v = 0; v < st->L_frame; v++ ) + { + out_ap[v] = (int16_t) pAp_input[v]; + } + + dbgwrite( out_ap, sizeof( int16_t ), st->L_frame, 1, "res/stereo_dft_allpass.pcm" ); + } +#endif /*DEBUG_MODE_DFT*/ + /* apply DFT to allpass-filtered signal */ + stereo_dft_dec_analyze( hCPE, pAp_input, DFT, 1, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); + } + + if ( st->core == ACELP_CORE ) + { + if ( !use_cldfb_for_dft ) /* Skip this for DFT Stereo mono output at non-residual bitrates */ + { + lerp( output, synth, output_frame, hCPE->hCoreCoder[0]->L_frame ); /* Dirty resampling, but should be good enough for ECU analysis */ + } + if ( !use_cldfb_for_dft || ( ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && st->cng_type == LP_CNG && st->extl == SWB_CNG && hCPE->nchan_out == 1 ) ) + { + v_add( synth, hb_synth, synth, output_frame ); /* Use one channel TD-BWE for ECU analysis buffer */ + } + } + + return; +} diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c new file mode 100644 index 0000000000..e8b3ca4d7c --- /dev/null +++ b/lib_dec/ivas_qmetadata_dec.c @@ -0,0 +1,3276 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "wmops.h" +#include "prot.h" + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_entropy_decode_diffuseness( uint16_t *bitstream, int16_t *index, IVAS_QDIRECTION *q_direction, uint16_t *diffuseness_index_max_ec_frame ); + +static int16_t ivas_qmetadata_entropy_decode_df_ratio( uint16_t *bitstream, int16_t *index, IVAS_QDIRECTION *q_direction, int16_t *dfRatio_bits ); + +static int16_t ivas_qmetadata_entropy_decode_dir( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *index, const uint16_t diffuseness_index_max_ec_frame, const int16_t nbands, const int16_t start_band ); + +static int16_t ivas_qmetadata_raw_decode_dir( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *index, const int16_t nbands, const int16_t start_band ); + +static uint16_t ivas_qmetadata_DecodeQuasiUniform( const uint16_t *bitstream, int16_t *index, const uint16_t alphabet_size ); + +static int16_t ivas_qmetadata_DecodeExtendedGR( uint16_t *bitstream, int16_t *index, const int16_t alph_size, const int16_t gr_param ); + +static int16_t ivas_qmetadata_ReorderElevationDecoded( const int16_t elev_dist, const int16_t elev_avg, const int16_t elev_alph ); + +static int16_t read_directions( IVAS_QDIRECTION *q_direction, const uint8_t coding_subbands, const uint8_t masa_subframes, uint16_t *bitstream, int16_t *pbit_pos, int16_t *ind_order ); + +static int16_t read_common_direction( uint16_t *bitstream, IVAS_QDIRECTION *q_direction, const int16_t j, const int16_t no_subframes, const int16_t bits_total, int16_t *pbit_pos ); + +static int16_t decode_fixed_rate( IVAS_QDIRECTION *q_direction, const uint16_t *bitstream, int16_t *pbit_pos, const int16_t b, const int16_t nblocks ); + +static int16_t decode_azimuth( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *pbit_pos, const int16_t idx_subband, const int16_t masa_subframes ); + +static int16_t decode_elevation( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *pbit_pos, const int16_t j, const int16_t masa_subframes ); + +static int16_t decode_azimuth2D( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, const int16_t coding_subbands, int16_t *pbit_pos, const int16_t no_frames ); + +static void set_zero_direction( IVAS_QDIRECTION *q_direction, const int16_t idx_band, const int16_t len ); + +static int16_t read_truncGR_azimuth( uint16_t *bitstream, IVAS_QDIRECTION *q_direction, const int16_t j, const int16_t no_subframes, int16_t *pbit_pos ); + +static ivas_error read_huf( int16_t *num_bits_read, const uint16_t *bitstream, uint16_t *out, const int16_t start_pos, const int16_t len, const int16_t *huff_code, const int16_t max_len ); + +static int16_t read_coherence_data( uint16_t *bitstream, int16_t *p_bit_pos, IVAS_QMETADATA *hQMetaData, const int16_t idx_dir ); + +static int16_t read_surround_coherence( uint16_t *bitstream, int16_t *p_bit_pos, IVAS_QMETADATA *hQMetaData ); + +static void decode_spread_coherence( IVAS_QMETADATA_HANDLE hQMetaData, int16_t idx_d, const int16_t no_frames ); + +static void decode_combined_index( uint64_t comb_index, const int16_t *no_cv_vec, uint16_t *index, const int16_t len ); + +static int16_t ivas_diffuseness_huff_ec_decode( const uint16_t *bitstream, int16_t *index, int16_t av ); + +static int16_t read_GR_min_removed_data( uint16_t *bitstream, int16_t *p_bit_pos, const int16_t *no_cv_vec, const int16_t no_data, int16_t *decoded_idx, const int16_t no_symb ); + +static int16_t decode_fixed_rate_composed_index_coherence( uint16_t *bitstream, int16_t *p_bit_pos, const int16_t no_bands, int16_t *no_cv_vec, uint16_t *decoded_index, const int16_t no_symb ); + +/*-----------------------------------------------------------------------* + * Global function definitions + *-----------------------------------------------------------------------*/ + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_dec_decode() + * + * Main function for decoding Spatial Metadata + *-----------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t ivas_qmetadata_dec_decode( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: hQMetaData handle */ + uint16_t *bitstream, /* i : bitstream */ + int16_t *index /* i/o: bitstream position */ +) +{ + int16_t d, b, m; + uint16_t diffuseness_index_max_ec_frame; + uint16_t diffuseness_index_max_ec_frame_pre[QMETADATA_MAX_NO_DIRECTIONS]; + int16_t bits_dir_raw_pre[QMETADATA_MAX_NO_DIRECTIONS]; + int16_t dir2band; + int16_t bits_diff_sum; + int16_t bits_diff, bits_coherence; + int16_t bits_dir_raw; + int16_t bits_dir; + int16_t nbands, nblocks, start_band; + IVAS_QDIRECTION *q_direction; + int16_t start_index_0; + int16_t total_bits_1dir; + int16_t signal_bits; + int16_t bits_no_dirs_coh, bits_sur_coherence; + uint16_t all_coherence_zero; + int16_t ec_flag; + int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t diff_bits; + int16_t dfRatio_bits[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t no_TF; + int16_t p[MASA_MAXIMUM_CODING_SUBBANDS], dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t bits_dir_target; + int16_t bits_dir_used; + int16_t reduce_bits; + int16_t ind_order[MASA_MAXIMUM_CODING_SUBBANDS]; + + +#ifdef DEBUG_MODE_QMETADATA + static FILE *pF = NULL; + static FILE *pF_azi = NULL; + static FILE *pF_ele = NULL; + static FILE *pF_ratio = NULL; + static FILE *pF_spcoh = NULL; + static FILE *pF_surcoh = NULL; + + if ( pF == NULL ) + pF = fopen( "./res/qmetadata_dec.txt", "w" ); + if ( pF_azi == NULL ) + pF_azi = fopen( "./res/qmetadata_azi_dec.txt", "w" ); + if ( pF_ele == NULL ) + pF_ele = fopen( "./res/qmetadata_ele_dec.txt", "w" ); + if ( pF_ratio == NULL ) + pF_ratio = fopen( "./res/qmetadata_ratio_dec.txt", "w" ); + if ( pF_spcoh == NULL ) + pF_spcoh = fopen( "./res/qmetadata_spcoh_dec.txt", "w" ); + if ( pF_surcoh == NULL ) + pF_surcoh = fopen( "./res/qmetadata_surcoh_dec.txt", "w" ); +#endif + + ec_flag = 0; + start_index_0 = *index; + + /*Coherence flag decoding*/ + bits_no_dirs_coh = 0; + all_coherence_zero = 1; + if ( hQMetaData->coherence_flag ) + { + /* read if coherence is zero */ + all_coherence_zero = bitstream[( *index )--]; + bits_no_dirs_coh += 1; + } + + hQMetaData->all_coherence_zero = (uint8_t) all_coherence_zero; + + if ( hQMetaData->no_directions == 2 ) + { + /* Read which bands have 2 directions */ + hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; + set_c( (int8_t *) hQMetaData->twoDirBands, 0, hQMetaData->q_direction[0].cfg.nbands ); + d = *index; + dif_p[0] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); + p[0] = dif_p[0]; + hQMetaData->twoDirBands[p[0]] = 1; + for ( b = 1; b < hQMetaData->numTwoDirBands; b++ ) + { + dif_p[b] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); + p[b] = p[b - 1] + dif_p[b] + 1; + hQMetaData->twoDirBands[p[b]] = 1; + } + bits_no_dirs_coh += ( d - *index ); + } + + bits_diff_sum = 0; + + bits_diff_sum += ivas_qmetadata_entropy_decode_diffuseness( bitstream, index, &( hQMetaData->q_direction[0] ), &diffuseness_index_max_ec_frame_pre[0] ); + + if ( hQMetaData->no_directions == 2 ) + { + /* Calculate bits for dfRatio */ + dir2band = 0; + for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + if ( hQMetaData->twoDirBands[b] == 1 ) + { + dfRatio_bits[dir2band] = ivas_get_df_ratio_bits( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] ); + dir2band++; + } + } + + bits_diff_sum += ivas_qmetadata_entropy_decode_df_ratio( bitstream, index, &( hQMetaData->q_direction[1] ), dfRatio_bits ); + } + + /* Calculate direct-to-total energy ratios for both directions from diffuse-to-total ratio and distribution factor of direct-to-total ratios */ + if ( hQMetaData->no_directions == 2 ) + { + dir2band = 0; + for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + if ( hQMetaData->twoDirBands[b] == 1 ) + { + float diffRatio, dfRatio, dir1ratio, dir2ratio; + int16_t dfRatio_qsteps; + + diffRatio = diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; + dfRatio_qsteps = 1 << dfRatio_bits[dir2band]; + dfRatio = usdequant( hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0], 0.5f, 0.5f / ( dfRatio_qsteps - 1 ) ); + + dir1ratio = dfRatio * ( 1.0f - diffRatio ); + dir2ratio = ( 1.0f - diffRatio ) - dir1ratio; + + /* Requantize the 1 - dirRatio separately for each direction to obtain inverted dirRatio index. These are used in further decoding. */ + hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] = masa_sq( 1.0f - dir1ratio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0] = masa_sq( 1.0f - dir2ratio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + + for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + { + hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = dir1ratio; + hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + } + + for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) + { + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[m] = dir2ratio; + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[m] = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0]; + } + + dir2band++; + } + else + { + /* 1dir band */ + hQMetaData->q_direction[0].band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; + for ( m = 1; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + { + hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio[0]; + hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + } + } + } + } + else + { + /* With 1dir band, the decoded index is directly diffuseness and we can decode to direct-to-total ratio with 1 - diff. */ + for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + hQMetaData->q_direction[0].band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; + for ( m = 1; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + { + hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio[0]; + hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + } + } + } + + /* To decode directions correctly for 2dir bands, we need to obtain the compensated direct-to-total ratios and their + * corresponding inverted indices. */ + bits_dir_raw_pre[0] = 0; + bits_dir_raw_pre[1] = 0; + dir2band = 0; + for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + if ( hQMetaData->no_directions == 2 && hQMetaData->twoDirBands[b] == 1 ) + { + int16_t index_dirRatio1Inv, index_dirRatio2Inv, index_dirRatio1Inv_mod, index_dirRatio2Inv_mod; + + index_dirRatio1Inv = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + index_dirRatio2Inv = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0]; + + masa_compensate_two_dir_energy_ratio_index( index_dirRatio1Inv, index_dirRatio2Inv, &index_dirRatio1Inv_mod, &index_dirRatio2Inv_mod ); + + for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + { + hQMetaData->q_direction[0].band_data[b].energy_ratio_index_mod[m] = index_dirRatio1Inv_mod; + hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m] = bits_direction_masa[index_dirRatio1Inv_mod]; + bits_dir_raw_pre[0] += hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m]; + } + + for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) + { + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index_mod[m] = index_dirRatio2Inv_mod; + hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[m] = bits_direction_masa[index_dirRatio2Inv_mod]; + bits_dir_raw_pre[1] += hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[m]; + } + + dir2band++; + } + else + { + for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + { + hQMetaData->q_direction[0].band_data[b].energy_ratio_index_mod[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m] = bits_direction_masa[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; + bits_dir_raw_pre[0] += hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m]; + } + } + } + + if ( hQMetaData->no_directions == 2 ) + { + no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks + hQMetaData->q_direction[1].cfg.nbands * hQMetaData->q_direction[1].cfg.nblocks; + if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - bits_diff_sum >= MASA_MIN_BITS_SURR_COH ) ) + { + bits_sur_coherence = read_surround_coherence( bitstream, index, hQMetaData ); + } + else + { + bits_sur_coherence = 0; + /*Surround coherence*/ + for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + if ( hQMetaData->surcoh_band_data != NULL ) + { + set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); + } + } + } + bits_no_dirs_coh += bits_sur_coherence; + total_bits_1dir = ( ( hQMetaData->metadata_max_bits - bits_no_dirs_coh ) * hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks ) / no_TF; + } + else + { + no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks; + if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - bits_diff_sum >= MASA_MIN_BITS_SURR_COH ) ) + { + bits_sur_coherence = read_surround_coherence( bitstream, index, hQMetaData ); + } + else + { + bits_sur_coherence = 0; + /*Surround coherence*/ + for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + if ( hQMetaData->surcoh_band_data != NULL ) + { + set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); + } + } + } + bits_no_dirs_coh += bits_sur_coherence; + + total_bits_1dir = hQMetaData->metadata_max_bits - bits_no_dirs_coh; + } + + bits_dir_target = 0; + bits_dir_used = 0; + + for ( d = 0; d < hQMetaData->no_directions; d++ ) + { + q_direction = &hQMetaData->q_direction[d]; + nbands = q_direction->cfg.nbands; + nblocks = q_direction->cfg.nblocks; + start_band = q_direction->cfg.start_band; + + diffuseness_index_max_ec_frame = diffuseness_index_max_ec_frame_pre[0]; + if ( d == 0 ) + { + bits_diff = bits_diff_sum; + } + else + { + bits_diff = 0; + } + bits_dir_raw = bits_dir_raw_pre[d]; + + /* Read coherence, if any */ + bits_coherence = 0; + if ( all_coherence_zero == 0 ) + { + bits_coherence = read_coherence_data( bitstream, index, hQMetaData, d ); + } + else + { + /*Surround coherence*/ + for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + if ( hQMetaData->surcoh_band_data != NULL ) + { + set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); + } + + if ( hQMetaData->q_direction[d].coherence_band_data != NULL ) + { + set_c( (int8_t *) hQMetaData->q_direction[d].coherence_band_data[b].spread_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); + } + } + } + + /* Read 2D signalling*/ + q_direction->not_in_2D = bitstream[( *index )--]; + signal_bits = 1; + + /* Read EC signalling */ + ec_flag = 0; + if ( total_bits_1dir + bits_sur_coherence <= hQMetaData->qmetadata_max_bit_req ) + { + ec_flag = bitstream[( *index )--]; + signal_bits++; + if ( nblocks > 1 ) + { + if ( ec_flag ) + { + ec_flag += bitstream[( *index )--]; + signal_bits++; + } + } + } + + /* Decode quantized directions frame-wise */ + if ( ec_flag == 0 ) /* EC 1*/ + { + bits_dir = 0; + raw_flag[0] = bitstream[( *index )--]; + bits_dir++; + + if ( raw_flag[0] == 0 ) + { + bits_dir += ivas_qmetadata_entropy_decode_dir( q_direction, bitstream, index, diffuseness_index_max_ec_frame, nbands, start_band ); + } + else + { + bits_dir += ivas_qmetadata_raw_decode_dir( q_direction, bitstream, index, nbands, start_band ); + } + } + /* Decode quantized directions band-wise */ + else if ( ec_flag == 1 && ( nblocks > 1 ) ) /* EC2 */ + { + bits_dir = 0; + for ( b = start_band; b < nbands; b++ ) + { + raw_flag[b] = bitstream[( *index )--]; + bits_dir++; + } + + /* Read EC bits*/ + diff_bits = bits_diff + bits_coherence + signal_bits - total_bits_1dir; + + for ( b = start_band; b < nbands; b++ ) + { + if ( raw_flag[b] == 0 ) + { + bits_dir += ivas_qmetadata_entropy_decode_dir( q_direction, bitstream, index, diffuseness_index_max_ec_frame, b + 1, b ); + } + else + { + diff_bits += q_direction->band_data[b].bits_sph_idx[0] * q_direction->cfg.nblocks; + } + } + diff_bits += bits_dir; + + /* Small requantization?*/ + if ( q_direction->not_in_2D > 0 ) + { + /* This is not an ideal solution but mirrors better encoder */ + int16_t i, j; + uint16_t bits_temp[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + + for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + { + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + bits_temp[i][j] = q_direction->band_data[i].bits_sph_idx[j]; + } + } + + small_reduction_direction( q_direction, bits_temp, raw_flag, &diff_bits ); + + for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + { + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + q_direction->band_data[i].bits_sph_idx[j] = bits_temp[i][j]; + } + } + } + +#ifdef DEBUGGING + assert( ( diff_bits <= 0 ) || ( q_direction->not_in_2D == 0 ) ); +#endif + + /* Read raw-coded bits*/ + for ( b = start_band; b < nbands; b++ ) + { + if ( raw_flag[b] ) + { + bits_dir += ivas_qmetadata_raw_decode_dir( q_direction, bitstream, index, b + 1, b ); + } + } + } + /* Decode requantized directions */ + else /* EC3 */ + { + int16_t dummy; + ec_flag = 2; + + if ( hQMetaData->is_masa_type_format == 0 ) + { + reduce_bits = bits_dir_raw - ( total_bits_1dir - bits_diff - bits_coherence - signal_bits ); + ind_order[0] = -1; + } + else + { + ind_order[0] = 0; + reduce_bits = min( nbands * nblocks + MASA_BIT_REDUCT_PARAM, bits_dir_raw - ( total_bits_1dir - bits_diff - bits_coherence - signal_bits ) ); + if ( reduce_bits > bits_dir_raw - nbands * nblocks ) + { + reduce_bits = bits_dir_raw - nbands * nblocks; + } + } + only_reduce_bits_direction( &dummy, q_direction, reduce_bits, nbands, nblocks, ind_order ); + + /* Read directions */ + bits_dir = read_directions( q_direction, (uint8_t) nbands, (uint8_t) nblocks, bitstream, index, ind_order ); + } + + if ( bits_coherence > 0 ) + { + if ( nblocks > 1 ) + { + decode_spread_coherence( hQMetaData, d, nblocks ); + } + } + else + { + for ( b = start_band; b < nbands; b++ ) + { + if ( q_direction->coherence_band_data != NULL ) + { + set_c( (int8_t *) q_direction->coherence_band_data[b].spread_coherence, 0, nblocks ); + } + } + } + if ( d == 0 ) + { + total_bits_1dir = hQMetaData->metadata_max_bits - ( start_index_0 - *index ); + } + + bits_dir_target += bits_dir_raw; + bits_dir_used += bits_dir; +#ifdef DEBUG_MODE_QMETADATA + fprintf( pF, "frame %d: diff %d coh %d surcoh %d ", frame, bits_diff, bits_coherence, bits_sur_coherence ); + fprintf( pF, "dir %d %d,%d,%d\n", ec_flag, start_index_0 - *index, total_bits_1dir, bits_dir_raw ); + + fprintf( pF_azi, "frame %d/dir/ec %d/%d: ", frame, d, ec_flag ); + fprintf( pF_ele, "frame %d/dir/ec %d/%d: ", frame, d, ec_flag ); + fprintf( pF_ratio, "frame %d/dir %d: ", frame, d ); + fprintf( pF_spcoh, "frame %d/dir %d: ", frame, d ); + if ( d == 0 ) + { + fprintf( pF_surcoh, "frame %d/dir %d: ", frame, d ); + } + for ( b = start_band; b < nbands; b++ ) + { + for ( m = 0; m < q_direction->cfg.nblocks; m++ ) + { + fprintf( pF_azi, " %+5.2f ", (int16_t) ( 100.f * q_direction->band_data[b].azimuth[m] ) / 100.f ); + fprintf( pF_ele, " %+5.2f ", (int16_t) ( 100.f * q_direction->band_data[b].elevation[m] ) / 100.f ); + fprintf( pF_ratio, " %1.3f ", q_direction->band_data[b].energy_ratio[m] ); + if ( q_direction->coherence_band_data != NULL ) + { + fprintf( pF_spcoh, " %d ", q_direction->coherence_band_data[b].spread_coherence[m] ); + } + if ( d == 0 && hQMetaData->surcoh_band_data != NULL ) + { + fprintf( pF_surcoh, " %d ", hQMetaData->surcoh_band_data[b].surround_coherence[m] ); + } + } + } + fprintf( pF_azi, "\n" ); + fprintf( pF_ele, "\n" ); + fprintf( pF_ratio, "\n" ); + fprintf( pF_spcoh, "\n" ); + if ( d == 0 ) + { + fprintf( pF_surcoh, "\n" ); + } +#endif + } + /* move 2 dir data to its correct subband */ + if ( hQMetaData->no_directions == 2 ) + { + d = hQMetaData->q_direction[1].cfg.nbands - 1; + nblocks = hQMetaData->q_direction[0].cfg.nblocks; + + for ( b = hQMetaData->q_direction[0].cfg.nbands - 1; b >= 0; b-- ) + { + if ( hQMetaData->twoDirBands[b] == 1 ) + { + mvr2r( hQMetaData->q_direction[1].band_data[d].azimuth, hQMetaData->q_direction[1].band_data[b].azimuth, nblocks ); + mvr2r( hQMetaData->q_direction[1].band_data[d].elevation, hQMetaData->q_direction[1].band_data[b].elevation, nblocks ); + mvr2r( hQMetaData->q_direction[1].band_data[d].energy_ratio, hQMetaData->q_direction[1].band_data[b].energy_ratio, nblocks ); + + if ( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] < 7 ) + { + for ( m = 0; m < nblocks; m++ ) + { + hQMetaData->q_direction[1].band_data[b].azimuth[m] += hQMetaData->q_direction[0].band_data[b].azimuth[m] - 180; + if ( hQMetaData->q_direction[1].band_data[b].azimuth[m] >= 180 ) + { + hQMetaData->q_direction[1].band_data[b].azimuth[m] -= 360; + } + if ( hQMetaData->q_direction[1].band_data[b].azimuth[m] < -180 ) + { + hQMetaData->q_direction[1].band_data[b].azimuth[m] += 360; + } + } + } + + if ( hQMetaData->q_direction[1].coherence_band_data != NULL ) + { + mvc2c( hQMetaData->q_direction[1].coherence_band_data[d].spread_coherence, hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence, nblocks ); + } + d--; + } + else + { + set_f( hQMetaData->q_direction[1].band_data[b].azimuth, 0.0f, nblocks ); + set_f( hQMetaData->q_direction[1].band_data[b].elevation, 0.0f, nblocks ); + set_f( hQMetaData->q_direction[1].band_data[b].energy_ratio, 0.0f, nblocks ); + + if ( hQMetaData->q_direction[1].coherence_band_data != NULL ) + { + set_c( (int8_t *) hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence, 0, nblocks ); + } + } + } + + /* Scale energy ratios that sum to over one */ + for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + float ratioSum; + + ratioSum = hQMetaData->q_direction[0].band_data[b].energy_ratio[0] + hQMetaData->q_direction[1].band_data[b].energy_ratio[0]; + + if ( ratioSum > 1.0f ) + { + set_f( hQMetaData->q_direction[0].band_data[b].energy_ratio, hQMetaData->q_direction[0].band_data[b].energy_ratio[0] / ratioSum, nblocks ); + set_f( hQMetaData->q_direction[1].band_data[b].energy_ratio, hQMetaData->q_direction[1].band_data[b].energy_ratio[0] / ratioSum, nblocks ); + } + } + } + + /* Store status information for renderer use */ + hQMetaData->ec_flag = ec_flag; + + hQMetaData->dir_comp_ratio = (float) bits_dir_used / (float) bits_dir_target; + + if ( hQMetaData->dir_comp_ratio > 1.0f ) + { + hQMetaData->dir_comp_ratio = 1.0f; + } + + return ( start_index_0 - *index ); +} + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_dec_sid_decode() + * + * Main function for decoding SID for Spatial Metadata + *-----------------------------------------------------------------------*/ + +/*! r: number of bits written */ +int16_t ivas_qmetadata_dec_sid_decode( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + uint16_t *bitstream, /* i : bitstream */ + int16_t *index, /* i/o: bitstream position */ + const int16_t nchan_transport, /* i : number of transport channels */ + int16_t *element_mode, /* o : element mode */ + const int16_t ivas_format, /* i : IVAS format */ + const SBA_MODE sba_mode /* i : SBA mode */ +) +{ + int16_t b, m, i; + uint16_t value; + uint16_t diffuseness_index[DIRAC_MAX_NBANDS]; + int16_t nbands, nblocks, start_band; + IVAS_QDIRECTION *q_direction; + int16_t start_index; + float avg_elevation, avg_azimuth; + float avg_direction_vector[3]; + float direction_vector[3]; + int16_t metadata_sid_bits; /* bits allocated to SID for metadata */ +#ifdef DEBUG_MODE_QMETADATA + static FILE *pF = NULL; + static FILE *pF_azi = NULL; + static FILE *pF_ele = NULL; + static FILE *pF_ratio = NULL; + + if ( pF == NULL ) + pF = fopen( "./res/qmetadata_sid_dec.txt", "w" ); + if ( pF_azi == NULL ) + pF_azi = fopen( "./res/qmetadata_sid_azi_dec.txt", "w" ); + if ( pF_ele == NULL ) + pF_ele = fopen( "./res/qmetadata_sid_ele_dec.txt", "w" ); + if ( pF_ratio == NULL ) + pF_ratio = fopen( "./res/qmetadata_sid_ratio_dec.txt", "w" ); +#endif + + if ( ivas_format == SBA_FORMAT ) + { + if ( sba_mode == SBA_MODE_SPAR ) + { + metadata_sid_bits = (int16_t) ( IVAS_SID_5k - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * 18 ) - 1; /* -1 for inactive mode header bit*/ + } + else + { + /* keep 13.2 and 16.4 sid bitrate as 4.4 kbps for now*/ + metadata_sid_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + } + } + else + { + metadata_sid_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + } + + start_index = *index; + + /* read MASA SID descriptor */ + if ( ivas_format == MASA_FORMAT && nchan_transport == 2 ) /* corresponding to SID_MASA case; Todo: needs to be checked for SBA */ + { + b = bitstream[( *index )--]; + if ( b ) + { + *element_mode = IVAS_CPE_MDCT; + } + else + { + *element_mode = IVAS_CPE_DFT; + } + } + + /* Fix configuration for SID */ + q_direction = &hQMetaData->q_direction[0]; /* only 1 direction */ + + if ( sba_mode == SBA_MODE_SPAR ) + { + nbands = DIRAC_DTX_BANDS; /* only 2 bands transmitted */ + } + else + { + nbands = 5; /* only 5 bands transmitted */ + } + + nblocks = q_direction->cfg.nblocks; /* only 1 block transmitted but up to 4 blocks re-generated */ + start_band = 0; /* start from band 0 */ + + /* Read 2D signalling*/ + if ( sba_mode != SBA_MODE_SPAR ) + { + q_direction->not_in_2D = bitstream[( *index )--]; + } + else + { + q_direction->not_in_2D = 1; + } + + /* Decode diffuseness*/ + for ( b = start_band; b < nbands; b++ ) + { + diffuseness_index[b] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS - 4 ) + 4; + q_direction->band_data[b].energy_ratio_index[0] = diffuseness_index[b]; + q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[diffuseness_index[b]]; + q_direction->band_data[b].azimuth_m_alphabet[0] = no_phi_masa[q_direction->band_data[b].bits_sph_idx[0] - 1][0]; + } + + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[diffuseness_index[b]]; + for ( i = 0; i < nblocks; i++ ) + { + q_direction->band_data[b].energy_ratio[i] = q_direction->band_data[b].energy_ratio[0]; + } + } + + /* Decoder DOAs*/ + if ( q_direction->not_in_2D > 0 ) + { + for ( b = start_band; b < nbands; b++ ) + { + value = 0; + for ( i = 0; i < q_direction->band_data[b].bits_sph_idx[0]; i++ ) + { + value = ( value << 1 ) + bitstream[( *index )--]; + } + for ( i = 0; i < nblocks; i++ ) + { + q_direction->band_data[b].spherical_index[i] = value; + } + + deindex_spherical_component( q_direction->band_data[b].spherical_index[0], &avg_azimuth, &avg_elevation, + &q_direction->band_data[b].azimuth_index[0], &q_direction->band_data[b].elevation_index[0], q_direction->band_data[b].bits_sph_idx[0], + q_direction->cfg.mc_ls_setup ); + + ivas_qmetadata_azimuth_elevation_to_direction_vector( avg_azimuth, avg_elevation, avg_direction_vector ); + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[nblocks - 1], q_direction->band_data[b].elevation[nblocks - 1], direction_vector ); + for ( m = 0; m < nblocks - 1; m++ ) + { + v_add( direction_vector, avg_direction_vector, direction_vector, 3 ); + ivas_qmetadata_direction_vector_to_azimuth_elevation( direction_vector, &q_direction->band_data[b].azimuth[m], &q_direction->band_data[b].elevation[m] ); + } + ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &q_direction->band_data[b].azimuth[nblocks - 1], &q_direction->band_data[b].elevation[nblocks - 1] ); + } + } + else + { + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ); + q_direction->band_data[b].azimuth_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, q_direction->band_data[b].azimuth_m_alphabet[0] ); + q_direction->band_data[b].azimuth_index[0] = ivas_qmetadata_dereorder_generic( q_direction->band_data[b].azimuth_index[0] ) + ( q_direction->band_data[b].azimuth_m_alphabet[0] >> 1 ); + avg_azimuth = 360.0f / (float) ( q_direction->band_data[b].azimuth_m_alphabet[0] ) * q_direction->band_data[b].azimuth_index[0] - 180; + + avg_elevation = 0.f; + + ivas_qmetadata_azimuth_elevation_to_direction_vector( avg_azimuth, avg_elevation, avg_direction_vector ); + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[nblocks - 1], q_direction->band_data[b].elevation[nblocks - 1], direction_vector ); + + for ( m = 0; m < nblocks - 1; m++ ) + { + v_add( direction_vector, avg_direction_vector, direction_vector, 3 ); + ivas_qmetadata_direction_vector_to_azimuth_elevation( direction_vector, &q_direction->band_data[b].azimuth[m], &q_direction->band_data[b].elevation[m] ); + } + + ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &q_direction->band_data[b].azimuth[nblocks - 1], &q_direction->band_data[b].elevation[nblocks - 1] ); + + for ( i = 0; i < nblocks; i++ ) + { + q_direction->band_data[b].spherical_index[i] = q_direction->band_data[b].azimuth_index[0]; + } + } + } + + /*Read filling bits*/ + while ( start_index - *index < metadata_sid_bits ) + { + b = bitstream[( *index )--]; + } + +#ifdef DEBUG_MODE_QMETADATA + fprintf( pF, "frame %d: all %d ", frame, start_index - *index ); + + fprintf( pF_azi, "frame %d sid: ", frame ); + fprintf( pF_ele, "frame %d sid: ", frame ); + fprintf( pF_ratio, "frame %d sid: ", frame ); + + for ( b = start_band; b < nbands; b++ ) + { + for ( m = 0; m < nblocks; m++ ) + { + fprintf( pF_azi, " %+5.2f ", (int16_t) ( 100.f * q_direction->band_data[b].azimuth[m] ) / 100.f ); + fprintf( pF_ele, " %+5.2f ", (int16_t) ( 100.f * q_direction->band_data[b].elevation[m] ) / 100.f ); + fprintf( pF_ratio, " %1.3f ", q_direction->band_data[b].energy_ratio[m] ); + } + } + fprintf( pF_azi, "\n" ); + fprintf( pF_ele, "\n" ); + fprintf( pF_ratio, "\n" ); + +#endif + return ( start_index - *index ); +} + + +/*-----------------------------------------------------------------------* + * Local function definitions for diffuseness/energy ratios + *-----------------------------------------------------------------------*/ + +static int16_t ivas_diffuseness_huff_ec_decode( + const uint16_t *bitstream, + int16_t *index, + int16_t av ) +{ + int16_t val; + + val = 0; + while ( val <= DIFF_EC_HUFF_GR0_LIMIT ) + { + if ( bitstream[( *index )--] == 1 ) + { + val++; + } + else + { + break; + } + } + + if ( val == DIFF_EC_HUFF_GR0_LIMIT + 1 ) + { + val += 2 * bitstream[( *index )]; + ( *index )--; + val += bitstream[( *index )]; + ( *index )--; + } + + if ( val % 2 == 0 ) + { + return -( val / 2 ) + av; + } + else + { + return ( val + 1 ) / 2 + av; + } +} + + +static int16_t ivas_qmetadata_entropy_decode_diffuseness( + uint16_t *bitstream, /* i : bitstream */ + int16_t *index, + IVAS_QDIRECTION *q_direction, + uint16_t *diffuseness_index_max_ec_frame ) +{ + int16_t b; + uint16_t dif_min; + int16_t index_start; + int16_t nbands; + int16_t start_band; + + index_start = *index; + nbands = q_direction->cfg.nbands; + start_band = q_direction->cfg.start_band; + + /* diffuseness decoding */ + /* Handle one band as special case*/ + if ( nbands == 1 ) + { + q_direction->band_data[0].energy_ratio_index[0] = 0; + for ( b = 0; b < MASA_BITS_ER; b++ ) + { + q_direction->band_data[0].energy_ratio_index[0] = ( q_direction->band_data[0].energy_ratio_index[0] << 1 ) + bitstream[( *index )--]; + } + *diffuseness_index_max_ec_frame = 5; + + return MASA_BITS_ER; + } + + if ( bitstream[( *index )--] == 0 ) /* dif_use_raw_coding */ + { + /* Decode with similarity strategy with low band count. On higher band counts, decode with Huffman-coding strategy. */ + if ( nbands < DIFF_EC_HUFF_BAND_LIMIT ) + { + if ( bitstream[( *index )--] != 0 ) /* dif_have_unique_value */ + { + dif_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS ); /* dif_unique_value */ + + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = dif_min; + } + } + else /* all diffuseness values are dif_min_value or dif_min_value + 1 */ + { + dif_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS - 1 ); /* dif_min_value */ + + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = dif_min + bitstream[( *index )--]; /* dif_bit_offset_values */ + } + } + } + else + { + int16_t av; + + /* read average on 3 bits*/ + av = 0; + for ( b = 0; b < MASA_BITS_ER; b++ ) + { + av += bitstream[( *index )--] * ( 1 << ( MASA_BITS_ER - 1 - b ) ); + } + + dif_min = DIRAC_DIFFUSE_LEVELS; + /* read average removed data (average is added inside)*/ + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = ivas_diffuseness_huff_ec_decode( bitstream, index, av ); + dif_min = min( dif_min, q_direction->band_data[b].energy_ratio_index[0] ); + } + } + } + else /* different values for diffuseness */ + { + dif_min = DIRAC_DIFFUSE_LEVELS; + + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS ); + dif_min = min( dif_min, q_direction->band_data[b].energy_ratio_index[0] ); + } + } + + *diffuseness_index_max_ec_frame = 5; + /* adaptively select the diffuseness_index_max_ec threshold */ + if ( dif_min > 5 ) + { + *diffuseness_index_max_ec_frame = DIRAC_DIFFUSE_LEVELS - 1; + } + + return ( index_start - *index ); +} + + +static int16_t ivas_qmetadata_entropy_decode_df_ratio( + uint16_t *bitstream, + int16_t *index, + IVAS_QDIRECTION *q_direction, + int16_t *dfRatio_bits ) +{ + int16_t b; + int16_t bits_raw; + int16_t max_dfRatio_bits; + uint16_t ratio_min; + int16_t index_start; + int16_t nbands; + int16_t start_band; + int16_t ec_mode; + int16_t dec_mode; + int16_t max_alphabet_size; + + index_start = *index; + nbands = q_direction->cfg.nbands; + start_band = q_direction->cfg.start_band; + + /* Handle one band as special case*/ + if ( nbands == 1 ) + { + q_direction->band_data[0].energy_ratio_index[0] = 0; + for ( b = 0; b < dfRatio_bits[0]; b++ ) + { + q_direction->band_data[0].energy_ratio_index[0] = ( q_direction->band_data[0].energy_ratio_index[0] << 1 ) + bitstream[( *index )--]; + } + return dfRatio_bits[0]; + } + + /* Calculate raw coding bits and decide what modes are possible */ + bits_raw = 0; + max_dfRatio_bits = 0; + for ( b = start_band; b < nbands; b++ ) + { + bits_raw += dfRatio_bits[b]; + max_dfRatio_bits = max( max_dfRatio_bits, dfRatio_bits[b] ); + } + + /* Decide what modes are possible */ + if ( bits_raw >= max_dfRatio_bits + 2 + nbands ) + { + ec_mode = 2; + } + else if ( bits_raw >= max_dfRatio_bits + 1 ) + { + ec_mode = 1; + } + else + { + ec_mode = 0; + } + max_alphabet_size = 1 << max_dfRatio_bits; + + dec_mode = 2; /* Default to raw decoding */ + if ( ec_mode == 1 ) + { + if ( bitstream[( *index )--] == 0 ) + { + dec_mode = 1; /* Switch to one value EC coding */ + } + } + else if ( ec_mode == 2 ) + { + if ( bitstream[( *index )--] == 0 ) + { + if ( bitstream[( *index )--] == 0 ) + { + dec_mode = 1; /* Switch to one value EC coding */ + } + else + { + dec_mode = 0; /* Use one-bit diff bandwise mode */ + } + } + } + + if ( dec_mode == 2 ) /* Raw decoding */ + { + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 1 << dfRatio_bits[b] ); + } + } + else if ( dec_mode == 1 ) /* One value decoding */ + { + ratio_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, max_alphabet_size ); /* dif_unique_value */ + + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = ratio_min; + } + } + else /* Bandwise 1-bit diff decoding */ + { + ratio_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, max_alphabet_size - 1 ); /* dif_min_value */ + + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = ratio_min + bitstream[( *index )--]; /* dif_bit_offset_values */ + } + } + + return ( index_start - *index ); +} + + +/*-----------------------------------------------------------------------* + * Local functions (EC1) + *-----------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------- + * ivas_qmetadata_entropy_decode_dir() + * + * Main function for entropy decoding of the directions + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_entropy_decode_dir( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + uint16_t *bitstream, /* i : bitstream */ + int16_t *index, + const uint16_t diffuseness_index_max_ec_frame, + const int16_t nbands, + const int16_t start_band ) +{ + int16_t b, m; + int16_t diff_idx; + int16_t diff_idx_min; + int16_t nblocks; + int16_t index_start; + + uint16_t gr_param_elev, gr_param_azith; + int16_t bands_entropic[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t elev_alph[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t azith_alph[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + + int16_t avg_elevation_alphabet, avg_azimuth_alphabet; + int16_t avg_elevation_idx, avg_azimuth_index; + int16_t avg_elevation_index_projected, avg_azimuth_index_projected; + float direction_vector[3], avg_direction_vector[3], avg_azimuth, avg_elevation; + int16_t use_adapt_avg, idx; + + index_start = *index; + nblocks = q_direction->cfg.nblocks; + + diff_idx_min = DIRAC_DIFFUSE_LEVELS; + + /*Raw coding for high diffuseness*/ + for ( b = start_band; b < nbands; b++ ) + { + diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; + diff_idx_min = min( diff_idx_min, diff_idx ); + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + elev_alph[b] = no_theta_masa[bits_direction_masa[diff_idx] - 3]; + } + else + { + elev_alph[b] = no_theta_masa[bits_direction_masa[diff_idx] - 3] * 2 - 1; + } + + if ( diff_idx > diffuseness_index_max_ec_frame ) + { + bands_entropic[b] = 0; + + if ( q_direction->not_in_2D > 0 ) + { + decode_fixed_rate( q_direction, bitstream, index, b, nblocks ); + } + else + { + /* in 2D */ + for ( m = 0; m < nblocks; m++ ) + { + q_direction->band_data[b].elevation[m] = 0.f; + q_direction->band_data[b].elevation_index[m] = 0; + + azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][0]; + q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, azith_alph[b][m] ); + q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], 0, 1, q_direction->cfg.mc_ls_setup ); + } + } + } + else + { + bands_entropic[b] = 1; + } + } + + /*EC for the low diffuseness*/ + + /*Elevation only if not 2D */ + if ( q_direction->not_in_2D > 0 ) + { + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; + avg_elevation_idx = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_elevation_alphabet ); + } + else + { + avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3] * 2 - 1; + avg_elevation_idx = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_elevation_alphabet ); + avg_elevation_idx = ivas_qmetadata_dereorder_generic( avg_elevation_idx ) + ( avg_elevation_alphabet >> 1 ); + } + + gr_param_elev = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 4 + 1 ); + if ( gr_param_elev == 4 ) /* all the elevation distances are zero */ + { + for ( b = start_band; b < nbands; b++ ) + { + if ( bands_entropic[b] ) + { + int16_t tmp_index; + diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); + } + else + { + avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); + /*reorder elevation indexing*/ + tmp_index = avg_elevation_index_projected - ( elev_alph[b] >> 1 ); + if ( tmp_index < 0 ) + { + tmp_index = tmp_index * -2; + } + else if ( tmp_index > 0 ) + { + tmp_index = tmp_index * 2 - 1; + } + avg_elevation_index_projected = tmp_index; + } + + for ( m = 0; m < nblocks; m++ ) + { + q_direction->band_data[b].elevation_index[m] = avg_elevation_index_projected; + /*deduce aplhabet for azimuth*/ + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][q_direction->band_data[b].elevation_index[m]]; + } + else + { + azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][( q_direction->band_data[b].elevation_index[m] + 1 ) >> 1]; + } + + /*decode elevation*/ + q_direction->band_data[b].elevation[m] = deindex_elevation( &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], + q_direction->cfg.mc_ls_setup ); + } + } + } + } + else + { + for ( b = start_band; b < nbands; b++ ) + { + if ( bands_entropic[b] ) + { + diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; + for ( m = 0; m < nblocks; m++ ) + { + int16_t tmp_index; + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); + tmp_index = ivas_qmetadata_DecodeExtendedGR( bitstream, index, 2 * elev_alph[b] - 1, gr_param_elev ); + if ( tmp_index % 2 ) + { + tmp_index = avg_elevation_index_projected + ( ( tmp_index + 1 ) >> 1 ); + } + else + { + tmp_index = avg_elevation_index_projected - ( tmp_index >> 1 ); + } + q_direction->band_data[b].elevation_index[m] = tmp_index; + + /*deduce aplhabet for azimuth*/ + azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][q_direction->band_data[b].elevation_index[m]]; + } + else + { + + avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); + + tmp_index = ivas_qmetadata_DecodeExtendedGR( bitstream, index, elev_alph[b], gr_param_elev ); + tmp_index = ivas_qmetadata_ReorderElevationDecoded( tmp_index, avg_elevation_index_projected, elev_alph[b] ); + + /*reorder elevation indexing*/ + tmp_index = tmp_index - ( elev_alph[b] >> 1 ); + if ( tmp_index < 0 ) + { + tmp_index = tmp_index * -2; + } + else if ( tmp_index > 0 ) + { + tmp_index = tmp_index * 2 - 1; + } + q_direction->band_data[b].elevation_index[m] = tmp_index; + + /*deduce aplhabet for azimuth*/ + azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][( q_direction->band_data[b].elevation_index[m] + 1 ) >> 1]; + } + + /*decode elevation*/ + q_direction->band_data[b].elevation[m] = deindex_elevation( &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], + q_direction->cfg.mc_ls_setup ); + } + } + } + } + } + else + { + for ( b = start_band; b < nbands; b++ ) + { + if ( bands_entropic[b] ) + { + diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; + for ( m = 0; m < nblocks; m++ ) + { + q_direction->band_data[b].elevation_index[m] = 0; + + /*deduce alphabet for azimuth*/ + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][q_direction->band_data[b].elevation_index[m]]; + } + else + { + azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][( q_direction->band_data[b].elevation_index[m] + 1 ) >> 1]; + } + + /*decode elevation*/ + q_direction->band_data[b].elevation[m] = deindex_elevation( &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], + q_direction->cfg.mc_ls_setup ); + } + } + } + } + + /*Azimuth*/ + avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ + avg_azimuth_index = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_azimuth_alphabet ); + avg_azimuth_index = ivas_qmetadata_dereorder_generic( avg_azimuth_index ); + avg_azimuth_index = avg_azimuth_index + ( avg_azimuth_alphabet >> 1 ); + + gr_param_azith = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 5 + 1 ); + if ( gr_param_azith == 5 ) /* all the azimuth distances are zero */ + { + for ( b = start_band; b < nbands; b++ ) + { + if ( bands_entropic[b] ) + { + for ( m = 0; m < nblocks; m++ ) + { + q_direction->band_data[b].azimuth_index[m] = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); + + if ( azith_alph[b][m] == 1 ) + { + q_direction->band_data[b].azimuth[m] = 0.f; + } + else + { + q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], + q_direction->band_data[b].bits_sph_idx[m], + q_direction->band_data[b].elevation_index[m], 0, + q_direction->cfg.mc_ls_setup ); + } + } + } + } + } + else + { + set_zero( avg_direction_vector, 3 ); + use_adapt_avg = 0; + idx = 0; + for ( b = start_band; b < nbands; b++ ) + { + if ( bands_entropic[b] ) + { + for ( m = 0; m < nblocks; m++ ) + { + if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( idx == MASA_LIMIT_IDX_AVG_AZI ) && ( nblocks > 1 ) ) + { + use_adapt_avg = bitstream[*index]; + ( *index )--; + } + avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); + q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, azith_alph[b][m], gr_param_azith ); + q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_ReorderElevationDecoded( q_direction->band_data[b].azimuth_index[m], avg_azimuth_index_projected, azith_alph[b][m] ); + + if ( azith_alph[b][m] == 1 ) + { + q_direction->band_data[b].azimuth[m] = 0.f; + } + else + { + q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], + q_direction->band_data[b].bits_sph_idx[m], + q_direction->band_data[b].elevation_index[m], 0, + q_direction->cfg.mc_ls_setup ); + } + if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( nblocks > 1 ) ) + { + if ( idx < MASA_LIMIT_IDX_AVG_AZI ) + { + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[m], q_direction->band_data[b].elevation[m], direction_vector ); + v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + } + else + { + if ( use_adapt_avg == 1 ) + { + if ( m == 0 ) + { + v_multc( avg_direction_vector, 0.5f, avg_direction_vector, 3 ); + } + /*compute the average direction per already coded subband */ + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[m], q_direction->band_data[b].elevation[m], direction_vector ); + v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth, &avg_elevation ); + avg_azimuth_index = quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ); + } + } + idx++; + } + } + } + } + } + + return ( index_start - *index ); +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_raw_decode_dir() + * + * Main function for raw decoding of the directions + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_raw_decode_dir( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + uint16_t *bitstream, /* i : bitstream */ + int16_t *index, + const int16_t nbands, + const int16_t start_band ) +{ + int16_t b, m, azith_alph; + int16_t diff_idx; + int16_t nblocks; + int16_t index_start; + + index_start = *index; + nblocks = q_direction->cfg.nblocks; + + for ( b = start_band; b < nbands; b++ ) + { + if ( q_direction->not_in_2D > 0 ) + { + decode_fixed_rate( q_direction, bitstream, index, b, nblocks ); + } + else + { + diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; + + for ( m = 0; m < nblocks; m++ ) + { + q_direction->band_data[b].elevation[m] = 0.f; + q_direction->band_data[b].elevation_index[m] = 0; + azith_alph = no_phi_masa[bits_direction_masa[diff_idx] - 1][0]; + q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, azith_alph ); + q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], 0, 1, + q_direction->cfg.mc_ls_setup ); + } + } + } + + return ( index_start - *index ); +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_DecodeQuasiUniform() + * + * Read the bitstream following the encoding scheme of EncodeQuasiUniform + *------------------------------------------------------------------------*/ + +/* !r: Value read from the bitstream */ +static uint16_t ivas_qmetadata_DecodeQuasiUniform( + const uint16_t *bitstream, /* i : pointer to the bitstream to read */ + int16_t *index, /* i : position in the bitstream to start reading (gets updated with reading) */ + const uint16_t alphabet_size /* i : size of the alphabet, used to calculate the number of bits needed */ +) +{ + int16_t i, bits; + uint16_t tresh, value; + +#ifdef DEBUGGING + assert( ( alphabet_size >= 1 ) ); /*fcs: to check if this additional conditon is really needed: && (alphabet_size <= (1U << 31) - 1));*/ +#endif + + bits = 30 - norm_l( alphabet_size ); /* bits = floor(log2(alphabet_size)) */ + tresh = ( 1U << ( bits + 1 ) ) - alphabet_size; + + value = 0; + for ( i = 0; i < bits; i++ ) + { + value = ( value << 1 ) + bitstream[( *index )--]; + } + + if ( value >= tresh ) + { + value = ( value << 1 ) - tresh + bitstream[( *index )--]; + } + +#ifdef DEBUGGING + assert( value < alphabet_size ); +#endif + return value; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_DecodeExtendedGR() + * + * Reads the bitstream and decodes the value using the ExtendedGR algorithm + *------------------------------------------------------------------------*/ + +/* !r: Value decoded from the bitstream */ +static int16_t ivas_qmetadata_DecodeExtendedGR( + uint16_t *bitstream, /* i : pointer to the bitstream to read */ + int16_t *index, /* i/o: position in the bitstream to start reading (gets updated with reading) */ + const int16_t alph_size, /* i : size of the alphabet, used to calculate the number of bits needed */ + const int16_t gr_param /* i : GR parameter that indicates the limit for the most significant bits (msb) */ +) +{ + int16_t i, msb_size; + uint16_t value; + int16_t msb, lsb; + + msb_size = ( alph_size + ( 1 << gr_param ) - 1 ) >> gr_param; /* ceil division */ + if ( msb_size <= 3 ) + { + value = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, alph_size ); + } + else + { + msb = 0; + while ( ( msb < msb_size - 1 ) && ( bitstream[*index] != 0 ) ) + { + msb++; + ( *index )--; + } + + if ( msb == msb_size - 1 ) + { + lsb = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, alph_size - ( ( msb_size - 1 ) << gr_param ) ); + } + else + { +#ifdef DEBUGGING + assert( bitstream[*index] == 0 ); +#endif + ( *index )--; + lsb = 0; + for ( i = 0; i < gr_param; i++ ) + { + lsb = ( lsb << 1 ) + bitstream[( *index )--]; + } + } + + value = ( msb << gr_param ) + lsb; + } + +#ifdef DEBUGGING + assert( value < alph_size ); +#endif + return value; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_ReorderElevationDecoded() + * + * Calculates the correct elevation index from the decoded data + *------------------------------------------------------------------------*/ + +/* !r: Elevation index as it will be read by the dequantizer */ +static int16_t ivas_qmetadata_ReorderElevationDecoded( + const int16_t elev_dist, /* i : Distance to the average extracted from the bitstream */ + const int16_t elev_avg, /* i : Average value over time-blocks extracted from the bitstream */ + const int16_t elev_alph /* i : elevation alphabet */ +) +{ + int16_t dist_reorder; + int16_t elev_index_reorder; + + dist_reorder = ivas_qmetadata_dereorder_generic( elev_dist ); + elev_index_reorder = elev_avg + dist_reorder; + + if ( elev_index_reorder < 0 ) + { + elev_index_reorder += elev_alph; + } + else if ( elev_index_reorder >= elev_alph ) + { + elev_index_reorder -= elev_alph; + } + + return elev_index_reorder; +} + + +/*-----------------------------------------------------------------------* + * Local functions: requentizeEC3 + *-----------------------------------------------------------------------*/ + +/* !r: number of bits read */ +static int16_t read_directions( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + const uint8_t coding_subbands, /* i : number of directions */ + const uint8_t masa_subframes, /* i : number of tiles */ + uint16_t *bitstream, /* i : bitstream to be read */ + int16_t *pbit_pos, + int16_t *ind_order ) +{ + int16_t j, k, allowed_bits, last_j, nbits, fixed_rate; + int16_t i; + int16_t diff; + uint16_t byteBuffer; + int16_t use_vq, max_nb_idx; + int16_t bit_pos; + int16_t *bits_dir0; + + bit_pos = *pbit_pos; + + diff = 0; + if ( q_direction->not_in_2D ) + { + if ( coding_subbands > 1 ) + { + j = ind_order[coding_subbands - 1]; + allowed_bits = 0; + + for ( k = 0; k < masa_subframes; k++ ) + { + allowed_bits += q_direction->band_data[j].bits_sph_idx[k]; + } + + last_j = j - ( allowed_bits == 0 ); + + for ( j = 0; j < last_j; j++ ) + { + i = ind_order[j]; + bits_dir0 = (int16_t *) q_direction->band_data[i].bits_sph_idx; + + nbits = 0; + allowed_bits = sum_s( bits_dir0, q_direction->cfg.nblocks ); + use_vq = 0; + max_nb_idx = 0; + + for ( k = 0; k < q_direction->cfg.nblocks; k++ ) + { + if ( bits_dir0[k] > use_vq ) + { + use_vq = bits_dir0[k]; + max_nb_idx = k; + } + } + if ( q_direction->cfg.nblocks == 1 ) + { + byteBuffer = 0; + } + else + { + byteBuffer = 0; + if ( use_vq <= 1 ) + { + byteBuffer = 1; + } + if ( use_vq > 1 && use_vq <= LIMIT_USE_COMMON ) + { + bits_dir0[max_nb_idx] -= 1; + allowed_bits -= 1; + /* read 1 bit to tell if joint of VQ coding */ + byteBuffer = bitstream[bit_pos--]; + } + } + + for ( k = 0; k < masa_subframes; k++ ) + { + q_direction->band_data[i].bits_sph_idx[k] = bits_dir0[k]; + if ( bits_dir0[k] > 2 ) + { + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + q_direction->band_data[i].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3]; + } + else + { + q_direction->band_data[i].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3] * 2 - 1; + } + } + else + { + q_direction->band_data[i].elevation_m_alphabet[k] = 1; + } + } + + if ( allowed_bits > 0 ) + { + if ( byteBuffer == 1 ) + { + nbits = read_common_direction( bitstream, q_direction, i, masa_subframes, allowed_bits, &bit_pos ); + } + else + { + if ( q_direction->cfg.nblocks == 1 && q_direction->band_data[i].bits_sph_idx[0] <= MASA_MIN_BITS_TF + 1 ) + { + /* there is fixed rate only, no need to read */ + fixed_rate = 1; + nbits = 0; + } + else + { + /* check if fixed_rate */ + fixed_rate = bitstream[bit_pos--]; + nbits = 1; + } + + if ( fixed_rate == 1 ) + { + /* decode_fixed_rate()*/ + nbits += decode_fixed_rate( q_direction, bitstream, &bit_pos, i, masa_subframes ); + } + else + { + /* decode elevation */ + nbits += decode_elevation( q_direction, bitstream, &bit_pos, i, masa_subframes ); + + /* decode azimuth */ + nbits += decode_azimuth( q_direction, bitstream, &bit_pos, i, masa_subframes ); + } + } + } + else + { + set_zero_direction( q_direction, i, masa_subframes ); + } + diff += nbits - allowed_bits; + + /* update bits for next block */ + update_bits_next_block( q_direction, &diff, ind_order[j + 1], coding_subbands, masa_subframes ); + } + } + else + { + last_j = q_direction->cfg.start_band; + } + + + for ( j = last_j; j < coding_subbands; j++ ) + { + i = ind_order[j]; + bits_dir0 = (int16_t *) q_direction->band_data[i].bits_sph_idx; + + nbits = 0; + allowed_bits = sum_s( bits_dir0, q_direction->cfg.nblocks ); + if ( allowed_bits > 0 && masa_subframes == 1 ) + { + nbits += decode_fixed_rate( q_direction, bitstream, &bit_pos, i, masa_subframes ); + } + else + { + if ( allowed_bits > 0 ) + { + use_vq = 0; + max_nb_idx = 0; + for ( k = 0; k < masa_subframes; k++ ) + { + if ( bits_dir0[k] > use_vq ) + { + use_vq = bits_dir0[k]; + max_nb_idx = k; + } + } + + byteBuffer = 0; + + if ( use_vq > 1 && use_vq <= LIMIT_USE_COMMON ) + { + bits_dir0[max_nb_idx] -= 1; + allowed_bits -= 1; + + /* read 1 bit to tell if joint of VQ coding */ + byteBuffer = bitstream[bit_pos--]; + } + + if ( allowed_bits > 0 ) + { + if ( byteBuffer == 1 || use_vq <= 1 ) + { + nbits = read_common_direction( bitstream, q_direction, i, masa_subframes, allowed_bits, &bit_pos ); + } + else + { + /* decode_fixed_rate()*/ + nbits += decode_fixed_rate( q_direction, bitstream, &bit_pos, i, masa_subframes ); + } + } + else + { + set_zero_direction( q_direction, i, masa_subframes ); + } + } + else + { + set_zero_direction( q_direction, i, masa_subframes ); + } + } + } + } + else + { + /* 2D */ + for ( j = 0; j < coding_subbands; j++ ) + { + for ( k = 0; k < q_direction->cfg.nblocks; k++ ) + { + q_direction->band_data[j].elevation[k] = 0; + q_direction->band_data[j].elevation_index[k] = 0; + } + } + nbits = decode_azimuth2D( q_direction, bitstream, coding_subbands, &bit_pos, masa_subframes ); + } + nbits = *pbit_pos - bit_pos; + *pbit_pos = bit_pos; + + return nbits; +} + + +/*-------------------------------------------------------------------* + * decode_azimuth() + * + * read and decode the azimuth indexes for one subband + *-------------------------------------------------------------------*/ + +/* !r: number of bits read */ +static int16_t decode_azimuth( + IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ + uint16_t *bitstream, /* i : bitstream to be read */ + int16_t *pbit_pos, /* i/o: current position in bitstream */ + const int16_t idx_subband, /* i : subband index */ + const int16_t masa_subframes /* i : number of tiles */ +) +{ + int16_t bit_pos, nbits, k; + uint16_t use_context, byteBuffer; + uint16_t min_idx; + int16_t j_az, max_val; + + nbits = 0; + bit_pos = *pbit_pos; + byteBuffer = 0; + + j_az = 0; + /* check number of valid indexes to decode */ + for ( k = 0; k < masa_subframes; k++ ) + { + if ( q_direction->band_data[idx_subband].azimuth_index[k] < MASA_NO_INDEX ) + { + j_az++; + } + else + { + q_direction->band_data[idx_subband].azimuth[k] = 0.f; /*To be in sync with encoder values.*/ + } + } + + if ( j_az == 0 ) + { + return nbits; + } + + if ( byteBuffer == 0 ) + { + /* use context */ + use_context = 0; + for ( k = 0; k < masa_subframes; k++ ) + { + if ( q_direction->band_data[idx_subband].bits_sph_idx[k] <= 1 ) + { + use_context = 1; + } + } + + if ( use_context == 1 ) + { + for ( k = 0; k < masa_subframes; k++ ) + { + if ( q_direction->band_data[idx_subband].bits_sph_idx[k] == 0 ) + { + q_direction->band_data[idx_subband].azimuth_index[k] = 0; + q_direction->band_data[idx_subband].azimuth[k] = 0; + } + else + { + if ( q_direction->band_data[idx_subband].bits_sph_idx[k] == 1 ) + { + byteBuffer = bitstream[bit_pos--]; + q_direction->band_data[idx_subband].azimuth_index[k] = byteBuffer; + + q_direction->band_data[idx_subband].azimuth[k] = q_direction->band_data[idx_subband].azimuth_index[k] * ( -180.f ); + } + else + { + q_direction->band_data[idx_subband].azimuth_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, + q_direction->band_data[idx_subband].azimuth_m_alphabet[k], MASA_GR_ORD_AZ - ( q_direction->band_data[idx_subband].bits_sph_idx[k] == 2 ) ); + + q_direction->band_data[idx_subband].azimuth[k] = deindex_azimuth( q_direction->band_data[idx_subband].azimuth_index[k], + q_direction->band_data[idx_subband].bits_sph_idx[k], + q_direction->band_data[idx_subband].elevation_index[k], 1, + q_direction->cfg.mc_ls_setup ); + } + } + } + } + else + { + /* read bit to check if min removed encoding */ + byteBuffer = bitstream[bit_pos--]; + if ( byteBuffer == 0 ) /* regular GR coding5 */ + { + /* read GR_order */ + byteBuffer = bitstream[bit_pos--]; + nbits += 1; + + for ( k = 0; k < masa_subframes; k++ ) + { + if ( q_direction->band_data[idx_subband].bits_sph_idx[k] > 0 ) + { + if ( no_phi_masa[q_direction->band_data[idx_subband].bits_sph_idx[k] - 1][q_direction->band_data[idx_subband].elevation_index[k]] > 1 ) + { + q_direction->band_data[idx_subband].azimuth_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, + q_direction->band_data[idx_subband].azimuth_m_alphabet[k], MASA_GR_ORD_AZ - byteBuffer ); + q_direction->band_data[idx_subband].azimuth[k] = deindex_azimuth( q_direction->band_data[idx_subband].azimuth_index[k], + q_direction->band_data[idx_subband].bits_sph_idx[k], + q_direction->band_data[idx_subband].elevation_index[k], 1, + q_direction->cfg.mc_ls_setup ); + } + else + { + q_direction->band_data[idx_subband].azimuth[k] = 0; + q_direction->band_data[idx_subband].azimuth_index[k] = 0; + } + } + else + { + q_direction->band_data[idx_subband].azimuth[k] = 0; + q_direction->band_data[idx_subband].azimuth_index[k] = 0; + } + } + } + else + { + /* min removed GR coding */ + /* read GR_order */ + byteBuffer = bitstream[bit_pos--]; + /* read min index value */ + maximum_s( q_direction->band_data[idx_subband].azimuth_m_alphabet, masa_subframes, &max_val ); + min_idx = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, max_val, MASA_GR_ORD_AZ ); + + for ( k = 0; k < masa_subframes; k++ ) + { + if ( q_direction->band_data[idx_subband].bits_sph_idx[k] > 0 ) + { + if ( no_phi_masa[q_direction->band_data[idx_subband].bits_sph_idx[k] - 1][q_direction->band_data[idx_subband].elevation_index[k]] > 1 ) + { + q_direction->band_data[idx_subband].azimuth_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, + q_direction->band_data[idx_subband].azimuth_m_alphabet[k], MASA_GR_ORD_AZ - 1 - byteBuffer ); + q_direction->band_data[idx_subband].azimuth_index[k] += min_idx; + q_direction->band_data[idx_subband].azimuth[k] = deindex_azimuth( q_direction->band_data[idx_subband].azimuth_index[k], + q_direction->band_data[idx_subband].bits_sph_idx[k], + q_direction->band_data[idx_subband].elevation_index[k], 1, + q_direction->cfg.mc_ls_setup ); + } + else + { + q_direction->band_data[idx_subband].azimuth[k] = 0; + q_direction->band_data[idx_subband].azimuth_index[k] = 0; + } + } + else + { + q_direction->band_data[idx_subband].azimuth[k] = 0; + q_direction->band_data[idx_subband].azimuth_index[k] = 0; + } + } + } + } + } + + nbits = *pbit_pos - bit_pos; + + *pbit_pos = bit_pos; + + return nbits; +} + + +/*-------------------------------------------------------------------* + * decode_elevation() + * + * Reads the bitstream and decode the elevation index + *-------------------------------------------------------------------*/ + +/* !r: number of bits read */ +static int16_t decode_elevation( + IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ + uint16_t *bitstream, /* i : input bitstream */ + int16_t *pbit_pos, /* i/o: current position to be read in bitstream*/ + const int16_t j, /* i : subband index */ + const int16_t masa_subframes /* i : number of tiles */ +) +{ + int16_t nr_NO_INDEX, nbits; + int16_t bit_pos; + uint16_t byteBuffer; + int16_t k, GR_ord_elevation; + uint16_t same_idx; + + nr_NO_INDEX = 0; + nbits = 0; + bit_pos = *pbit_pos; + + for ( k = 0; k < masa_subframes; k++ ) + { + q_direction->band_data[j].elevation_index[k] = 0; + q_direction->band_data[j].elevation[k] = 0; + + if ( q_direction->band_data[j].bits_sph_idx[k] > 0 ) + { + if ( q_direction->band_data[j].bits_sph_idx[k] <= 2 ) + { + q_direction->band_data[j].elevation_index[k] = MASA_NO_INDEX; + nr_NO_INDEX += 1; + q_direction->band_data[j].elevation[k] = 0; + q_direction->band_data[j].elevation_m_alphabet[k] = 1; + } + else + { + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[q_direction->band_data[j].bits_sph_idx[k] - 3]; + } + else + { + q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[q_direction->band_data[j].bits_sph_idx[k] - 3] * 2 - 1; + } + } + } + else + { + nr_NO_INDEX++; + } + } + + if ( nr_NO_INDEX < masa_subframes ) + { + { + /* read if same or not */ + byteBuffer = bitstream[bit_pos--]; + if ( byteBuffer == 1 ) /* same value */ + { + /* read value */ + byteBuffer = bitstream[bit_pos--]; + byteBuffer = ( byteBuffer << 1 ) + bitstream[bit_pos--]; + same_idx = byteBuffer; + + for ( k = 0; k < masa_subframes; k++ ) + { + if ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) + { + q_direction->band_data[j].elevation_index[k] = same_idx; + q_direction->band_data[j].elevation[k] = deindex_elevation( &q_direction->band_data[j].elevation_index[k], q_direction->band_data[j].bits_sph_idx[k], + q_direction->cfg.mc_ls_setup ); + } + } + } + else + { + /* not same; decode mean removed GR */ + byteBuffer = bitstream[bit_pos--]; + GR_ord_elevation = MASA_GR_ORD_EL - byteBuffer; + + for ( k = 0; k < masa_subframes; k++ ) + { + if ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) + { + q_direction->band_data[j].elevation_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, q_direction->band_data[j].elevation_m_alphabet[k], GR_ord_elevation ); + q_direction->band_data[j].elevation[k] = deindex_elevation( &q_direction->band_data[j].elevation_index[k], q_direction->band_data[j].bits_sph_idx[k], + q_direction->cfg.mc_ls_setup ); + } + } + } + } + } + + for ( k = 0; k < masa_subframes; k++ ) + { + if ( ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) && + ( no_phi_masa[q_direction->band_data[j].bits_sph_idx[k] - 1][q_direction->band_data[j].elevation_index[k]] <= 1 ) ) + { + q_direction->band_data[j].azimuth_index[k] = MASA_NO_INDEX; + q_direction->band_data[j].azimuth_m_alphabet[k] = 1; + } + else + { + q_direction->band_data[j].azimuth_index[k] = 0; + if ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) + { + q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[q_direction->band_data[j].bits_sph_idx[k] - 1][q_direction->band_data[j].elevation_index[k]]; + } + else + { + q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[q_direction->band_data[j].bits_sph_idx[k] - 1][0]; + q_direction->band_data[j].elevation_index[k] = 0; + } + } + } + + nbits = *pbit_pos - bit_pos; + *pbit_pos = bit_pos; + + return nbits; +} + + +/*---------------------------------------------------------------- + * decode_fixed_rate() + * + * decoding in fixed rate case, i.e. when using the spherical indexes + *-----------------------------------------------------------------*/ + +/* !r: number of bits read */ +static int16_t decode_fixed_rate( + IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata */ + const uint16_t *bitstream, /* i : bitstream to be read */ + int16_t *pbit_pos, /* i/o: position in bitstream */ + const int16_t b, /* i : subband index */ + const int16_t nblocks /* i : number of tiles in subband */ +) +{ + int16_t nbits, m, i; + uint16_t value; + + nbits = 0; + + for ( m = 0; m < nblocks; m++ ) + { + value = 0; + for ( i = 0; i < q_direction->band_data[b].bits_sph_idx[m]; i++ ) + { + value = ( value << 1 ) + bitstream[( *pbit_pos )--]; + } + + q_direction->band_data[b].spherical_index[m] = value; + nbits += q_direction->band_data[b].bits_sph_idx[m]; + + deindex_spherical_component( q_direction->band_data[b].spherical_index[m], &q_direction->band_data[b].azimuth[m], &q_direction->band_data[b].elevation[m], + &q_direction->band_data[b].azimuth_index[m], &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], + q_direction->cfg.mc_ls_setup ); + } + + return nbits; +} + + +/*-------------------------------------------------------------------* + * decode_azimuth2D() + * + * Azimuth bitstream reading and decoding in 2D case + *-------------------------------------------------------------------*/ + +/* !r: number of bits read */ +static int16_t decode_azimuth2D( + IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ + uint16_t *bitstream, /* i : bitstream to be read */ + const int16_t coding_subbands, /* i : number of subbands */ + int16_t *pbit_pos, + const int16_t no_frames ) +{ + int16_t i, j, k; + int16_t allowed_bits, nbits; + int16_t use_vq; + uint16_t Buffer; + int16_t bit_pos; + int16_t *bits_dir0; + + bit_pos = *pbit_pos; + nbits = 0; + for ( j = 0; j < coding_subbands; j++ ) + { + bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; + allowed_bits = sum_s( bits_dir0, no_frames ); + + if ( allowed_bits > 0 ) + { + use_vq = 0; + for ( k = 0; k < no_frames; k++ ) + { + q_direction->band_data[j].elevation[k] = 0; + q_direction->band_data[j].elevation_index[k] = 0; + + if ( bits_dir0[k] > use_vq ) + { + use_vq = bits_dir0[k]; + } + } + + if ( use_vq <= 3 && allowed_bits <= 11 ) + { + if ( allowed_bits <= no_frames + 1 ) + { + set_f( q_direction->band_data[j].azimuth, 0.0f, no_frames ); + for ( k = 0; k < min( allowed_bits, no_frames ); k++ ) + { + q_direction->band_data[j].azimuth[k] = ( -180.f ) * bitstream[bit_pos--]; + nbits += 1; + } + } + else + { + nbits += read_truncGR_azimuth( bitstream, q_direction, j, no_frames, &bit_pos ); + } + } + else + { + for ( k = 0; k < no_frames; k++ ) + { + Buffer = 0; + for ( i = 0; i < bits_dir0[k]; i++ ) + { + Buffer = ( Buffer << 1 ) + bitstream[bit_pos--]; + } + + nbits += bits_dir0[k]; + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + q_direction->band_data[j].azimuth[k] = 360.0f / (float) ( 1 << bits_dir0[k] ) * Buffer - 180; + q_direction->band_data[j].azimuth[k] = companding_azimuth( q_direction->band_data[j].azimuth[k], q_direction->cfg.mc_ls_setup, + ( q_direction->band_data[j].elevation[k] > MC_MASA_THR_ELEVATION ), -1 ); + } + else + { + q_direction->band_data[j].azimuth[k] = 360.0f / (float) ( 1 << bits_dir0[k] ) * Buffer - 180; + } + } + } + } + else + { + set_zero_direction( q_direction, j, no_frames ); + } + } + *pbit_pos = bit_pos; + + return nbits; +} + + +/*-------------------------------------------------------------------* + * set_zero_direction() + * + * + *-------------------------------------------------------------------*/ + +static void set_zero_direction( + IVAS_QDIRECTION *q_direction, + const int16_t idx_band, + const int16_t len ) +{ + int16_t k; + for ( k = 0; k < len; k++ ) + { + q_direction->band_data[idx_band].azimuth[k] = 0; + q_direction->band_data[idx_band].azimuth_index[k] = 0; + q_direction->band_data[idx_band].elevation[k] = 0; + q_direction->band_data[idx_band].elevation_index[k] = 0; + q_direction->band_data[idx_band].spherical_index[k] = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * read_truncGR_azimuth() + * + * + *-------------------------------------------------------------------*/ + +static int16_t read_truncGR_azimuth( + uint16_t *bitstream, /* i : bitstream to be read */ + IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ + const int16_t j, /* i : subband index */ + const int16_t no_subframes, /* i : number of tiles */ + int16_t *pbit_pos /* i/o: position in bitstream */ +) +{ + int16_t i; + int16_t nbits; + uint16_t idx; + int16_t no_symb, allowed_bits; + + allowed_bits = sum_s( (int16_t *) q_direction->band_data[j].bits_sph_idx, no_subframes ); + nbits = 0; + if ( allowed_bits <= no_subframes + 1 ) + { + for ( i = 0; i < min( allowed_bits, no_subframes ); i++ ) + { + if ( bitstream[( *pbit_pos )--] == 0 ) + { + q_direction->band_data[j].azimuth[i] = 0.0f; + } + else + { + q_direction->band_data[j].azimuth[i] = -180; + } + nbits++; + } + + return nbits; + } + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + no_symb = 9; + } + else + { + no_symb = 8; + } + nbits = 0; + + nbits = *pbit_pos; + + for ( i = 0; i < no_subframes; i++ ) + { + idx = ivas_qmetadata_DecodeExtendedGR( bitstream, pbit_pos, no_symb, 0 ); + q_direction->band_data[j].azimuth_index[i] = idx; + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + q_direction->band_data[j].azimuth[i] = cb_azi_chan[( idx + 1 ) >> 1]; + if ( idx % 2 > 0 ) + { + q_direction->band_data[j].azimuth[i] = -q_direction->band_data[j].azimuth[i]; + } + } + else + { + q_direction->band_data[j].azimuth[i] = azimuth_cb[idx]; + } + } + + nbits -= *pbit_pos; + + return nbits; +} + + +/*-------------------------------------------------------------------* + * read_common_direction() + * + * + *-------------------------------------------------------------------*/ + +/* !r: number of bits read */ +static int16_t read_common_direction( + uint16_t *bitstream, /* i : bitstream to be read */ + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + const int16_t j, /* i : subband index */ + const int16_t no_subframes, /* i : number of tiles */ + const int16_t bits_total, /* i : number of bits for subband directional data */ + int16_t *pbit_pos /* i/o: position in bitstream */ +) +{ + int16_t nbits; + int16_t bit_pos; + int16_t i; + uint16_t byteBuffer; + int16_t bits_el; + + bit_pos = *pbit_pos; + nbits = 0; + + set_zero_direction( q_direction, j, no_subframes ); + if ( bits_total == 0 ) + { + return nbits; + } + + if ( bits_total <= no_subframes + 1 ) + { + for ( i = 0; i < min( no_subframes, bits_total ); i++ ) + { + byteBuffer = bitstream[bit_pos--]; + /*qdirection->azimuth_index[j][i] = (uint16_t)byteBuffer; */ + q_direction->band_data[j].azimuth[i] = azimuth_cb[byteBuffer]; + nbits += 1; + } + *pbit_pos = bit_pos; + + /*nbits += read_truncGR_azimuth(bitstream, qdirection, j, no_subframes, pbit_pos); */ + return nbits; + } + + + byteBuffer = bitstream[bit_pos--]; + bits_el = 1; + nbits += 1; + /* elevation is already set to 0*/ + if ( byteBuffer == 1 ) + { + byteBuffer = bitstream[bit_pos--]; + bits_el += 1; + nbits += 1; + if ( byteBuffer == 0 ) + { + for ( i = 0; i < no_subframes; i++ ) + { + q_direction->band_data[j].elevation[i] = delta_theta_masa[2]; + } + } + else + { + byteBuffer = bitstream[bit_pos--]; + bits_el += 1; + nbits += 1; + if ( byteBuffer == 0 ) + { + for ( i = 0; i < no_subframes; i++ ) + { + q_direction->band_data[j].elevation[i] = -delta_theta_masa[2]; + } + } + else + { + /* theta is +/- 90; no azimuth is read */ + byteBuffer = bitstream[bit_pos--]; + nbits += 1; + if ( byteBuffer == 0 ) + { + set_f( q_direction->band_data[j].elevation, 90.0f, no_subframes ); + set_f( q_direction->band_data[j].azimuth, 0.0f, no_subframes ); + } + else + { + set_f( q_direction->band_data[j].elevation, -90.0f, no_subframes ); + set_f( q_direction->band_data[j].azimuth, 0.0f, no_subframes ); + } + *pbit_pos = bit_pos; + + return nbits; + } + } + } + + bits_el = sum_s( (int16_t *) q_direction->band_data[j].bits_sph_idx, no_subframes ) - bits_el; + + if ( bits_el <= no_subframes + 1 ) + { + nbits += min( no_subframes, bits_el ); + for ( i = 0; i < min( no_subframes, bits_el ); i++ ) + { + byteBuffer = bitstream[bit_pos--]; + /*qdirection->azimuth_index[j][i] = (uint16_t) byteBuffer; */ + q_direction->band_data[j].azimuth[i] = azimuth_cb[byteBuffer]; + } + } + else + { + nbits += read_truncGR_azimuth( bitstream, q_direction, j, no_subframes, &bit_pos ); + } + + *pbit_pos = bit_pos; + +#ifdef DEBUGGING + /*assert(nbits == bits_total); */ +#endif + return nbits; +} + + +/*-----------------------------------------------------------------------* + * Local functions: coherence + *-----------------------------------------------------------------------*/ + +static void decode_spread_coherence( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: quantized metadata structure */ + int16_t idx_d, /* i : direction index */ + const int16_t no_frames /* i : number of time subframes */ +) +{ + int16_t i, j; + float var_azi; + int16_t idx_sub_cb; + float dct_coh[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t MASA_grouping[MASA_MAXIMUM_CODING_SUBBANDS]; + IVAS_QDIRECTION *q_direction; + int16_t coding_subbands, coding_subbands_0, d, two_dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; + + coding_subbands_0 = hQMetaData->q_direction[0].cfg.nbands; + coding_subbands = hQMetaData->q_direction[idx_d].cfg.nbands; + if ( coding_subbands_0 <= 5 ) + { + for ( j = 0; j < 5; j++ ) + { + MASA_grouping[j] = j; + } + } + else + { + if ( coding_subbands_0 <= 8 ) + { + mvs2s( MASA_grouping_8_to_5, MASA_grouping, 8 ); + } + else if ( coding_subbands_0 <= 12 ) + { + mvs2s( MASA_grouping_12_to_5, MASA_grouping, 12 ); + } + else if ( coding_subbands_0 <= 18 ) + { + mvs2s( MASA_grouping_18_to_5, MASA_grouping, 18 ); + } + else + { + if ( coding_subbands_0 <= 24 ) + { + mvs2s( MASA_grouping_24_to_5, MASA_grouping, 24 ); + } + } + } + + if ( coding_subbands < coding_subbands_0 ) + { + d = 0; + for ( j = 0; j < coding_subbands_0; j++ ) + { + if ( hQMetaData->twoDirBands[j] == 1 ) + { + two_dir_band[d++] = j; + } + } + } + else + { + set_s( two_dir_band, 0, coding_subbands ); + } + + q_direction = &hQMetaData->q_direction[idx_d]; + + + for ( i = 0; i < coding_subbands; i++ ) + { + var_azi = var( q_direction->band_data[i].azimuth, no_frames ); + + if ( var_azi < MASA_DELTA_AZI_DCT0 ) + { + idx_sub_cb = MASA_NO_CV_COH * q_direction->band_data[i].energy_ratio_index[0]; + } + else + { + idx_sub_cb = MASA_NO_CV_COH * ( q_direction->band_data[i].energy_ratio_index[0] + DIRAC_DIFFUSE_LEVELS ); /* NO_CV_COH = 8 */ + } + + dct_coh[i][0] = coherence_cb0_masa[idx_sub_cb + q_direction->coherence_band_data[i].spread_coherence_dct0_index]; + if ( coding_subbands < coding_subbands_0 ) + { + assert( idx_d == 1 ); + dct_coh[i][1] = coherence_cb1_masa[MASA_grouping[two_dir_band[i]] * MASA_NO_CV_COH1 + q_direction->coherence_band_data[i].spread_coherence_dct1_index]; + } + else + { + dct_coh[i][1] = coherence_cb1_masa[MASA_grouping[i] * MASA_NO_CV_COH1 + q_direction->coherence_band_data[i].spread_coherence_dct1_index]; + } + + for ( j = 2; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + dct_coh[i][j] = 0; + } + + invdct4_transform( dct_coh[i], q_direction->coherence_band_data[i].spread_coherence ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * read_huf() + * + * Read Hufman code + *-------------------------------------------------------------------*/ + +/* !r: number of bits read */ +static ivas_error read_huf( + int16_t *num_bits_read, + const uint16_t *bitstream, /* i : bitstream to be read */ + uint16_t *out, /* o : decoded value */ + const int16_t start_pos, /* i : starting position for reading */ + const int16_t len, /* i : number of codewords */ + const int16_t *huff_code, /* i : Huffman table */ + const int16_t max_len /* i : maximum codeword length */ +) +{ + int16_t done = 0, end_pos; + uint16_t ByteBuffer; + int16_t nbits, val; + uint16_t i; + + end_pos = start_pos; + nbits = 0; + val = 0; + while ( ( done == 0 ) && ( nbits < max_len ) ) + { + ByteBuffer = bitstream[end_pos--]; + val = val * 2 + ( ByteBuffer & 1 ); + nbits += 1; + for ( i = 0; i < len; i++ ) + { + if ( val == huff_code[i] ) + { + *out = i; + done = 1; + break; + } + } + } + +#ifdef DEBUGGING + if ( nbits == max_len ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong Huffman codeword for average index in coherence encoding." ); + } +#endif + + *num_bits_read = end_pos; + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * read_GR_min_removed_data() + * + * + *-------------------------------------------------------------------*/ + +static int16_t read_GR_min_removed_data( + uint16_t *bitstream, /* i : bitstream */ + int16_t *p_bit_pos, /* i : position in the bitstream */ + const int16_t *no_cv_vec, + const int16_t no_data, + int16_t *decoded_idx, + const int16_t no_symb ) +{ + int16_t j; + int16_t bit_pos; + int16_t nbits, bits_GR; + uint16_t byteBuffer; + int16_t min_index; + + bit_pos = *p_bit_pos; + + /* read GR order */ + byteBuffer = bitstream[bit_pos--]; + nbits = 1; + + /* read min index */ + bits_GR = bit_pos; + min_index = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_symb, 0 ); + nbits += bits_GR - bit_pos; + + /* read GR data */ + for ( j = 0; j < no_data; j++ ) + { + bits_GR = bit_pos; + if ( no_cv_vec[j] > 1 ) + { + decoded_idx[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_cv_vec[j] - min_index, ( byteBuffer & 1 ) ); + nbits += bits_GR - bit_pos; + } + else + { + decoded_idx[j] = 0; + } + } + + for ( j = 0; j < no_data; j++ ) + { + if ( no_cv_vec[j] > 1 ) + { + decoded_idx[j] += min_index; + } + } +#ifdef DEBUGGING + assert( nbits == *p_bit_pos - bit_pos ); +#endif + *p_bit_pos = bit_pos; + + return nbits; +} + + +/*-------------------------------------------------------------------* + * decode_fixed_rate_composed_index_coherence() + * + * + *-------------------------------------------------------------------*/ + +static int16_t decode_fixed_rate_composed_index_coherence( + uint16_t *bitstream, /* i : bitstream */ + int16_t *p_bit_pos, /* i : position in the bitstream */ + const int16_t no_bands, + int16_t *no_cv_vec, + uint16_t *decoded_index, + const int16_t no_symb ) +{ + /* fixed rate */ + uint64_t no_cb; + uint16_t temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; + + uint64_t idx_fr; + int16_t no_bits_vec1, half_no_bands; + int16_t bit_pos; + int16_t nbits, bits_GR; + int16_t j; + int16_t no_vals_local; + int16_t no_bits_vec; + + bit_pos = *p_bit_pos; + set_s( (int16_t *) temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); + + no_cb = 1; + nbits = 0; + if ( no_bands > MASA_LIMIT_NO_BANDS_SUR_COH ) + { + /* read 8-max_val with GR0 */ + bits_GR = bit_pos; + no_vals_local = no_symb - ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_symb, 0 ); + nbits += bits_GR - bit_pos; + for ( j = 0; j < no_bands; j++ ) + { + if ( no_cv_vec[j] > no_vals_local ) + { + no_cv_vec[j] = no_vals_local; + } + } + } + + half_no_bands = no_bands / 2; + if ( sum_s( no_cv_vec, no_bands ) > MASA_COH_LIMIT_2IDX ) + { + no_cb = 1; + + for ( j = 0; j < half_no_bands; j++ ) + { + no_cb *= no_cv_vec[j]; + } + no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + no_cb = 1; + for ( j = half_no_bands; j < no_bands; j++ ) + { + no_cb *= no_cv_vec[j]; + } + no_bits_vec1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + } + else + { + no_cb = 1; + for ( j = 0; j < no_bands; j++ ) + { + no_cb *= no_cv_vec[j]; + } + no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + no_bits_vec1 = 0; + } + if ( no_bits_vec1 > 0 ) + { + idx_fr = 0; + for ( j = 0; j < no_bits_vec; j++ ) + { + idx_fr = ( idx_fr << 1 ) + bitstream[bit_pos--]; + } + + nbits += no_bits_vec; + + decode_combined_index( idx_fr, no_cv_vec, temp_index, half_no_bands ); + + idx_fr = 0; + for ( j = 0; j < no_bits_vec1; j++ ) + { + idx_fr = ( idx_fr << 1 ) + bitstream[bit_pos--]; + } + nbits += no_bits_vec1; + decode_combined_index( idx_fr, &no_cv_vec[half_no_bands], &temp_index[half_no_bands], half_no_bands ); + } + else + { + idx_fr = 0; + for ( j = 0; j < no_bits_vec; j++ ) + { + idx_fr = ( idx_fr << 1 ) + bitstream[bit_pos--]; + } + nbits += no_bits_vec; + decode_combined_index( idx_fr, no_cv_vec, temp_index, no_bands ); + } + + + for ( j = 0; j < no_bands; j++ ) + { + decoded_index[j] = temp_index[j]; + } +#ifdef DEBUGGING + assert( nbits == *p_bit_pos - bit_pos ); +#endif + nbits = *p_bit_pos - bit_pos; + + *p_bit_pos = bit_pos; + + return nbits; +} + + +/*------------------------------------------------------------------ - * + * read_coherence_data() + * + * Read coherence data + *------------------------------------------------------------------ - */ + +/* !r: number of bits read */ +static int16_t read_coherence_data( + uint16_t *bitstream, /* i : bitstream */ + int16_t *p_bit_pos, /* i : position in the bitstream */ + IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata structure */ + const int16_t idx_dir /* i : direction index */ +) +{ + int16_t j; + int16_t no_cv_vec[MASA_MAXIMUM_CODING_SUBBANDS]; + uint64_t no_cb; + int16_t no_bits_vec, nbits; + int16_t bits_GR; + uint16_t idx_dct1[MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t av_index; + int16_t no_bits_vec1; + int16_t bit_pos; + IVAS_QDIRECTION *q_direction; + int16_t coding_subbands; + uint64_t dct0_index; + int16_t decoded_idx[MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t byteBuffer; + int16_t idx_ER; + coding_subbands = hQMetaData->q_direction[idx_dir].cfg.nbands; + + q_direction = &( hQMetaData->q_direction[idx_dir] ); + bit_pos = *p_bit_pos; + nbits = 0; + + if ( q_direction->cfg.nblocks == 1 ) + { + for ( j = 0; j < coding_subbands; j++ ) + { + idx_ER = 7 - q_direction->band_data[j].energy_ratio_index_mod[0] + coding_subbands / MASA_FACTOR_CV_COH; + no_cv_vec[j] = idx_ER + 1; + } + + if ( sum_s( no_cv_vec, coding_subbands ) == coding_subbands ) + { + for ( j = 0; j < coding_subbands; j++ ) + { + q_direction->coherence_band_data[j].spread_coherence[0] = 0; + } + + return 0; + } + byteBuffer = bitstream[bit_pos--]; + nbits += 1; + + if ( byteBuffer & 1 ) + { + /* decode GR min removed */ + nbits += read_GR_min_removed_data( bitstream, &bit_pos, no_cv_vec, coding_subbands, decoded_idx, MASA_MAX_NO_CV_SUR_COH ); + for ( j = 0; j < coding_subbands; j++ ) + { + if ( no_cv_vec[j] > 1 ) + { + q_direction->coherence_band_data[j].spread_coherence[0] = (uint8_t) roundf( decoded_idx[j] * ( 255.0f / (float) ( 7 - q_direction->band_data[j].energy_ratio_index_mod[0] + coding_subbands / MASA_FACTOR_CV_COH ) ) ); + } + else + { + q_direction->coherence_band_data[j].spread_coherence[0] = 0; + } + } + } + else + { + uint16_t decoded_index[MASA_MAXIMUM_CODING_SUBBANDS]; + /* decode joint index */ + nbits += decode_fixed_rate_composed_index_coherence( bitstream, &bit_pos, coding_subbands, no_cv_vec, decoded_index, MASA_NO_CV_COH + coding_subbands / MASA_FACTOR_CV_COH ); + for ( j = 0; j < coding_subbands; j++ ) + { + if ( no_cv_vec[j] > 1 ) + { + q_direction->coherence_band_data[j].spread_coherence[0] = (uint8_t) roundf( decoded_index[j] * ( 255.0f / (float) ( 7 - q_direction->band_data[j].energy_ratio_index_mod[0] + coding_subbands / MASA_FACTOR_CV_COH ) ) ); + } + else + { + q_direction->coherence_band_data[j].spread_coherence[0] = 0; + } + } + } + } + else + { + for ( j = 0; j < coding_subbands; j++ ) + { + no_cv_vec[j] = len_cb_dct0_masa[q_direction->band_data[j].energy_ratio_index[0]]; /* spread coherence DCT0*/ + } + + if ( sum_s( no_cv_vec, coding_subbands ) > MASA_COH_LIMIT_2IDX ) + { + uint16_t spr_coh_temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; + + no_cb = 1; +#ifdef DEBUGGING + assert( coding_subbands % 2 == 0 ); +#endif + for ( j = 0; j < coding_subbands / 2; j++ ) + { + no_cb *= no_cv_vec[j]; + } + + no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + no_cb = 1; + + for ( j = coding_subbands / 2; j < coding_subbands; j++ ) + { + no_cb *= no_cv_vec[j]; + } + + no_bits_vec1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + dct0_index = 0; + + for ( j = 0; j < no_bits_vec; j++ ) + { + dct0_index = ( dct0_index << 1 ) + bitstream[bit_pos--]; + } + + nbits += no_bits_vec; + set_s( (int16_t *) spr_coh_temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); + + decode_combined_index( dct0_index, no_cv_vec, spr_coh_temp_index, coding_subbands / 2 ); + + dct0_index = 0; + for ( j = 0; j < no_bits_vec1; j++ ) + { + dct0_index = ( dct0_index << 1 ) + bitstream[bit_pos--]; + } + + nbits += no_bits_vec1; + + decode_combined_index( dct0_index, &no_cv_vec[coding_subbands / 2], &spr_coh_temp_index[coding_subbands / 2], coding_subbands / 2 ); + + for ( j = 0; j < coding_subbands; j++ ) + { + q_direction->coherence_band_data[j].spread_coherence_dct0_index = spr_coh_temp_index[j]; + } + } + else + { + /* spread coherence */ + uint16_t spr_coh_temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; + + no_cb = 1; + + for ( j = 0; j < coding_subbands; j++ ) + { + no_cb *= no_cv_vec[j]; + } + + no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + + /* read joint index for DCT0 */ + no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + dct0_index = 0; + + for ( j = 0; j < no_bits_vec; j++ ) + { + dct0_index = ( dct0_index << 1 ) + bitstream[bit_pos--]; + } + + nbits += no_bits_vec; + + set_s( (int16_t *) spr_coh_temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); + + decode_combined_index( dct0_index, no_cv_vec, spr_coh_temp_index, coding_subbands ); + + for ( j = 0; j < coding_subbands; j++ ) + { + q_direction->coherence_band_data[j].spread_coherence_dct0_index = spr_coh_temp_index[j]; + } + } + + /* read GR data for DCT1 */ + for ( j = 0; j < coding_subbands; j++ ) + { + bits_GR = bit_pos; + idx_dct1[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, 2 * MASA_NO_CV_COH1, 0 ); + nbits += bits_GR - bit_pos; + } + bits_GR = bit_pos; /* just to store the data */ + + /* read average index */ + read_huf( &bit_pos, bitstream, &av_index, bit_pos, MASA_NO_CV_COH1, huff_code_av_masa, 10 ); /* 10 is MAX_LEN*/ + nbits += ( bits_GR - bit_pos ); + + /* write indexes in metadata structure */ + for ( j = 0; j < coding_subbands; j++ ) + { + if ( idx_dct1[j] % 2 ) + { + q_direction->coherence_band_data[j].spread_coherence_dct1_index = ( idx_dct1[j] + 1 ) / 2 + av_index; + } + else + { + q_direction->coherence_band_data[j].spread_coherence_dct1_index = -idx_dct1[j] / 2 + av_index; + } + } + } +#ifdef DEBUGGING + assert( nbits == *p_bit_pos - bit_pos ); +#endif + nbits = *p_bit_pos - bit_pos; + + *p_bit_pos = bit_pos; + + return nbits; +} + +/*-------------------------------------------------------------------* + * read_surround_coherence() + * + * + *-------------------------------------------------------------------*/ + +int16_t read_surround_coherence( + uint16_t *bitstream, /* i : bitstream */ + int16_t *p_bit_pos, /* i : position in the bitstream */ + IVAS_QMETADATA *hQMetaData /* i/o: quantized metadata structure */ +) +{ + int16_t coding_subbands; + int16_t no_cv_vec[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t bit_pos; + float error_ratio_surr; + int16_t idx_ER[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t bits_sur_coherence, bits_GR; + int16_t j, d, k; + uint16_t byteBuffer; + uint16_t idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; + IVAS_QDIRECTION *q_direction; + int16_t min_index; + coding_subbands = hQMetaData->q_direction[0].cfg.nbands; + q_direction = hQMetaData->q_direction; + + bits_sur_coherence = 0; + bit_pos = *p_bit_pos; + + d = 0; + for ( j = 0; j < coding_subbands; j++ ) + { + error_ratio_surr = 1.0f; + + if ( hQMetaData->no_directions == 2 ) + { + d += hQMetaData->twoDirBands[j]; + error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[max( d - 1, 0 )].energy_ratio[0] * hQMetaData->twoDirBands[j]; + } + else + { + error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0]; + } + + if ( error_ratio_surr <= 0 ) + { + error_ratio_surr = 0; + no_cv_vec[j] = 1; + idx_ER[j] = masa_sq( 0.0f, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + } + else + { + idx_ER[j] = masa_sq( error_ratio_surr, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + no_cv_vec[j] = idx_cb_sur_coh_masa[idx_ER[j]] + 2; + } + } + + if ( sum_s( no_cv_vec, coding_subbands ) == coding_subbands ) + { + /* surround coherence is zero */ + for ( j = 0; j < coding_subbands; j++ ) + { + for ( k = 0; k < MAX_PARAM_SPATIAL_SUBFRAMES; k++ ) + { + if ( hQMetaData->surcoh_band_data != NULL ) + { + hQMetaData->surcoh_band_data[j].surround_coherence[k] = 0; + } + } + } + return bits_sur_coherence; + } + + /* read how the surround coherence is encoded */ + byteBuffer = bitstream[bit_pos--]; + bits_sur_coherence += 1; + + if ( byteBuffer & 1 ) + { + /* GR decoding */ + /* read GR order */ + byteBuffer = bitstream[bit_pos--]; + bits_sur_coherence += 1; + + /* read min index */ + bits_GR = bit_pos; + min_index = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, MASA_MAX_NO_CV_SUR_COH, 0 ); + bits_sur_coherence += bits_GR - bit_pos; + + /* read GR data */ + for ( j = 0; j < coding_subbands; j++ ) + { + bits_GR = bit_pos; + /* decoding for min removed */ + if ( no_cv_vec[j] > 1 ) + { + idx_sur_coh[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_cv_vec[j] - min_index, ( byteBuffer & 1 ) ); + bits_sur_coherence += bits_GR - bit_pos; + } + else + { + idx_sur_coh[j] = 0; + } + } + + for ( j = 0; j < coding_subbands; j++ ) + { + if ( no_cv_vec[j] > 1 ) + { + hQMetaData->surcoh_band_data[j].sur_coherence_index = idx_sur_coh[j] + min_index; + } + else + { + hQMetaData->surcoh_band_data[j].sur_coherence_index = idx_sur_coh[j]; + } + hQMetaData->surcoh_band_data[j].surround_coherence[0] = sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER[j]] * MASA_MAX_NO_CV_SUR_COH + hQMetaData->surcoh_band_data[j].sur_coherence_index]; + } + } + else + { + /* fixed rate */ + uint16_t sur_coh_temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; + set_s( (int16_t *) sur_coh_temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); + + decode_fixed_rate_composed_index_coherence( bitstream, &bit_pos, coding_subbands, no_cv_vec, sur_coh_temp_index, MASA_MAX_NO_CV_SUR_COH ); + + for ( j = 0; j < coding_subbands; j++ ) + { + hQMetaData->surcoh_band_data[j].sur_coherence_index = sur_coh_temp_index[j]; + } + + /* deindex surround coherence */ + for ( j = 0; j < coding_subbands; j++ ) + { + if ( no_cv_vec[j] > 1 ) + { + hQMetaData->surcoh_band_data[j].surround_coherence[0] = sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER[j]] * MASA_MAX_NO_CV_SUR_COH + hQMetaData->surcoh_band_data[j].sur_coherence_index]; + } + else + { + hQMetaData->surcoh_band_data[j].surround_coherence[0] = 0; + } + } + } + + for ( j = 0; j < coding_subbands; j++ ) + { + for ( k = 1; k < MAX_PARAM_SPATIAL_SUBFRAMES; k++ ) + { + hQMetaData->surcoh_band_data[j].surround_coherence[k] = hQMetaData->surcoh_band_data[j].surround_coherence[0]; + } + } + + /* Replace return value with the actual read bits. bits_sur_coherence might show wrong count at this point. */ + bits_sur_coherence = *p_bit_pos - bit_pos; + *p_bit_pos = bit_pos; + + return bits_sur_coherence; +} + + +/*-------------------------------------------------------------------* + * decode_combined_index() + * + * Decode combined index into several indexes + *-------------------------------------------------------------------*/ + +static void decode_combined_index( + uint64_t comb_index, /* i : index to be decoded */ + const int16_t *no_cv_vec, /* i : number of codewords for each element*/ + uint16_t *index, /* o : decoded indexes */ + const int16_t len /* i : number of elements */ +) +{ + int16_t i; + uint64_t base[MASA_MAXIMUM_CODING_SUBBANDS + 1]; + + base[0] = 1; + for ( i = 1; i < len; i++ ) + { + base[i] = base[i - 1] * no_cv_vec[i - 1]; + } + + for ( i = len - 1; i > 0; i-- ) + { + index[i] = (uint16_t) ( comb_index / base[i] ); + comb_index -= index[i] * base[i]; + } + + index[0] = (uint16_t) comb_index; + + return; +} diff --git a/lib_dec/ivas_qspherical_dec.c b/lib_dec/ivas_qspherical_dec.c new file mode 100644 index 0000000000..c37d03e5a9 --- /dev/null +++ b/lib_dec/ivas_qspherical_dec.c @@ -0,0 +1,102 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_dec.h" +#include "wmops.h" +#include "prot.h" + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + + +/*-------------------------------------------------------------------* + * deindex_elevation() + * + * Decode elevation index + *----------------------------------------------------------------------*/ + +/*! r: decoded elevation value */ +float deindex_elevation( + uint16_t *id_th, /* i : input index */ + const int16_t no_bits, /* i : number of bits for the spherical grid */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + float theta_hat; + + if ( *id_th == MASA_NO_INDEX ) + { + theta_hat = 0; + } + else + { + if ( mc_format != MC_LS_SETUP_INVALID ) + { + theta_hat = ( *id_th * delta_theta_masa[no_bits - 3] ); + if ( theta_hat > 90 ) + { + theta_hat = 90; + } + } + else + { + if ( *id_th % 2 == 0 ) + { + /* theta is negative */ + *id_th = *id_th / 2; + theta_hat = -( *id_th * delta_theta_masa[no_bits - 3] ); + if ( theta_hat < -90 ) + { + theta_hat = -90; + } + } + else + { + *id_th = ( *id_th + 1 ) / 2; + theta_hat = ( *id_th * delta_theta_masa[no_bits - 3] ); + if ( theta_hat > 90 ) + { + theta_hat = 90; + } + } + } + } + + return theta_hat; +} diff --git a/lib_dec/ivas_range_uni_dec.c b/lib_dec/ivas_range_uni_dec.c new file mode 100644 index 0000000000..de9b3a4559 --- /dev/null +++ b/lib_dec/ivas_range_uni_dec.c @@ -0,0 +1,511 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_stat_dec.h" +#include "cnst.h" +#include "rom_com.h" +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + + +/* + * Up to 30 bits are read internally from bit_buffer as look-ahead more than the + * declared amount of max_available_bits, the total maximum bits available. + * Therefore, the caller must ensure that bit_buffer has an allocated size of at + * least max_available_bits + 30 entries, and also that the extra 30 padding + * entries contain only binary (0 or 1) values, e.g., by setting them to zero. + * The parameter max_available_bits does not represent the total number of bits + * that will be consumed by the range coder, but the usually larger total number + * of bits that have been read from the bitstream and have meaningful values. + */ + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static int16_t rc_uni_dec_read( RangeUniDecState *rc_st_dec ); + +static void rc_uni_dec_update( RangeUniDecState *rc_st_dec, const uint16_t cum_freq, const uint16_t sym_freq ); + + +/*-------------------------------------------------------------------* + * rc_uni_dec_init() + * + * Initialize the range decoder + *-------------------------------------------------------------------*/ + +void rc_uni_dec_init( + RangeUniDecState *rc_st_dec, /* i/o: RC state handle */ + uint16_t *bit_buffer, /* i : Bit buffer */ + const int16_t max_available_bits /* i : Total maximum bits available */ +) +{ + int16_t i; + + rc_st_dec->rc_low = 0; + rc_st_dec->rc_range = 0xFFFFFFFF; + + rc_st_dec->bit_buffer = bit_buffer; + rc_st_dec->bit_count = 0; + /* the renormalization procedure reads at most 32 - 2 extra bits than available */ + rc_st_dec->max_allowable_bit_count = max_available_bits + 30; + + rc_st_dec->bit_error_detected = 0; + + for ( i = 0; i < 4; i++ ) + { + rc_st_dec->rc_low = ( rc_st_dec->rc_low << 8 ) + rc_uni_dec_read( rc_st_dec ); + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_uni_dec_read_symbol_fastS() + * + * Read an alphabet symbol when total frequency is a power of 2 + *-------------------------------------------------------------------*/ + +/*! r: Read symbol */ +uint16_t rc_uni_dec_read_symbol_fastS( + RangeUniDecState *rc_st_dec, /* i/o: Decoder State */ + const uint16_t cum_freq_table[], /* i : Cumulative frequency up to symbol */ + const uint16_t sym_freq_table[], /* i : Symbol frequency */ + const uint16_t alphabet_size, /* i : Number of symbols in the alphabet */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +) +{ + uint16_t sym_begin; + uint16_t sym_end; + uint16_t sym_middle; + uint32_t low; /* local copy (2 to 1 + ceil(log2(alphabet_size)) uses) */ + uint32_t range; /* local copy (3 to 2 + ceil(log2(alphabet_size)) uses) */ + uint16_t ceil_log2_alphabet_size; /* ceil(log2(alphabet_size)) */ + uint16_t step; + uint32_t reversed_low; +#ifdef DEBUGGING + assert( tot_shift <= 16 ); + assert( rc_st_dec->rc_range >= 0x01000000 ); /* rc_range is normalized */ +#endif + + low = rc_st_dec->rc_low; + range = rc_st_dec->rc_range; + + range >>= tot_shift; + + /* the cumulative value is val = low / range */ + /* the condition val >= level is equivalent with low >= range * level */ + + /* in case of bitstream errors it is possible that val >= (1 << tot_shift) */ + if ( low >= ( range << tot_shift ) ) + { + rc_st_dec->bit_error_detected = 1; + + /* for valid bistreams, always low < range, therefore setting low = range */ + /* will always reach the bitstream error condition branch on the next call */ + rc_st_dec->rc_range = 0xFFFFFFFF; + rc_st_dec->rc_low = rc_st_dec->rc_range; + + /* the current value and all the following values are very likely incorrect */ + return 0; /* return the minimum valid value for the output */ + } + + /* do a binary search to find the symbol read */ + sym_begin = 0; + sym_end = alphabet_size; /* the possible values are {sym_begin, .., sym_end - 1} */ + + /* ceil(log2(x)) = 1 + floor(log2(x - 1)), for any x >= 2 */ + /* floor(log2(y)) = 31 - norm_ul(y) = 30 - norm_l(y), for any 1 <= y <= 2 ^ 31 - 1 */ + ceil_log2_alphabet_size = 31 - norm_l( alphabet_size - 1 ); + /* completely equivalent with 32 - norm_ul(alphabet_size - 1), but norm_l is faster */ + reversed_low = ( range << tot_shift ) - low; + + /* at most ceil_log2_alphabet_size steps are needed so that sym_end - sym_begin == 1 */ + for ( step = 0; step < ceil_log2_alphabet_size; step++ ) + { + sym_middle = ( sym_begin + sym_end ) >> 1; + /* completely equvalent with low >= range * ((1 << tot_shift) - table[sym_middle]) */ + if ( range * ( ( 1 << tot_shift ) - cum_freq_table[sym_middle] ) >= reversed_low ) + { + sym_begin = sym_middle; + } + else + { + sym_end = sym_middle; + } + } + + /* sym_begin contains the symbol read */ + + /* low was not modified */ + rc_st_dec->rc_range = range; + + rc_uni_dec_update( rc_st_dec, cum_freq_table[sym_begin], sym_freq_table[sym_begin] ); + + return sym_begin; +} + + +/*-------------------------------------------------------------------* + * rc_uni_dec_update() + * + * Update the state for the symbol found after using get_cumulative + *-------------------------------------------------------------------*/ + +static void rc_uni_dec_update( + RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ + const uint16_t cum_freq, /* i : Cumulative frequency */ + const uint16_t sym_freq /* i : Symbol frequency */ +) +{ + rc_st_dec->rc_low -= cum_freq * rc_st_dec->rc_range; + rc_st_dec->rc_range *= sym_freq; + + /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ + if ( rc_st_dec->rc_range < 0x01000000 ) + { + rc_st_dec->rc_low = ( rc_st_dec->rc_low << 8 ) + rc_uni_dec_read( rc_st_dec ); + rc_st_dec->rc_range <<= 8; + if ( rc_st_dec->rc_range < 0x01000000 ) + { + rc_st_dec->rc_low = ( rc_st_dec->rc_low << 8 ) + rc_uni_dec_read( rc_st_dec ); + rc_st_dec->rc_range <<= 8; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_uni_dec_read_bit() + * + * Read one bit with uniform probability + *-------------------------------------------------------------------*/ + +/*! r: Read bit */ +uint16_t rc_uni_dec_read_bit( + RangeUniDecState *rc_st_dec /* i/o: RC State handle */ +) +{ + uint32_t val; + uint32_t low; /* local copy (1 to 5 uses) */ + uint32_t range; /* local copy (3 to 6 uses) */ +#ifdef DEBUGGING + assert( rc_st_dec->rc_range >= 0x01000000 ); /* rc_range is normalized */ +#endif + + low = rc_st_dec->rc_low; + range = rc_st_dec->rc_range; + + range >>= 1; + + /* in case of bitstream errors it is possible that rc_low >= (rc_range << 1) */ + val = 0; + if ( low >= range ) + { + val++; + low -= range; + + /* rc_range was already subtracted once from rc_low */ + if ( low >= range ) + { + rc_st_dec->bit_error_detected = 1; + + /* for valid bistreams, always low < range, therefore setting low = range */ + /* will always reach the bitstream error condition branch on the next call */ + rc_st_dec->rc_range = 0xFFFFFFFF; + rc_st_dec->rc_low = rc_st_dec->rc_range; + + /* the current value and all the following values are very likely incorrect */ + return 0; /* return the minimum valid value for the output */ + } + } + + /* rc_range was shifted right by 1, so at most one renormalization is needed */ + if ( range < 0x01000000 ) + { + low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); + range <<= 8; + } + + rc_st_dec->rc_low = low; + rc_st_dec->rc_range = range; + + return (uint16_t) val; +} + + +/*-------------------------------------------------------------------* + * rc_uni_dec_read_bit_prob_fast() + * + * Read one bit with probability freq0 / 2 ^ tot_shift for symbol 0 + *-------------------------------------------------------------------*/ + +/*! r: Read bit */ +uint16_t rc_uni_dec_read_bit_prob_fast( + RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ + const int16_t freq0, /* i : Frequency for symbol 0 */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +) +{ + uint32_t val; + uint32_t low; /* local copy (2 to 7 uses) */ + uint32_t range; /* local copy (5 to 9 uses) */ +#ifdef DEBUGGING + assert( tot_shift <= 16 ); + assert( rc_st_dec->rc_range >= 0x01000000 ); /* rc_range is normalized */ +#endif + + low = rc_st_dec->rc_low; + range = rc_st_dec->rc_range; + + range >>= tot_shift; + + /* in case of bitstream errors it is possible that low >= (1 << tot_shift) * range */ + if ( low >= ( range << tot_shift ) ) /* equivalent condition */ + { + rc_st_dec->bit_error_detected = 1; + + /* for valid bistreams, always low < range, therefore setting low = range */ + /* will always reach the bitstream error condition branch on the next call */ + rc_st_dec->rc_range = 0xFFFFFFFF; + rc_st_dec->rc_low = rc_st_dec->rc_range; + + /* the current value and all the following values are very likely incorrect */ + return 0; /* return the minimum valid value for the output */ + } + + val = 0; + if ( low >= range * freq0 ) + { + val++; + + low -= range * freq0; + range *= ( 1 << tot_shift ) - freq0; /* freq1 = (1 << tot_shift) - freq0 */ + } + else + { + range *= freq0; + } + + /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ + if ( range < 0x01000000 ) + { + low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); + range <<= 8; + if ( range < 0x01000000 ) + { + low = ( low << 8 ) + (uint32_t) rc_uni_dec_read( rc_st_dec ); + range <<= 8; + } + } + + rc_st_dec->rc_low = low; + rc_st_dec->rc_range = range; + + return (uint16_t) val; +} + + +/*-------------------------------------------------------------------* + * rc_uni_dec_read_bits() + * + * Read up to 16 bits with uniform probability + *-------------------------------------------------------------------*/ + +/*! r: Read bits */ +uint16_t rc_uni_dec_read_bits( + RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ + const int16_t bits /* i : Number of bits */ +) +{ + uint32_t val; + uint32_t low; /* local copy (2 to 6 uses) */ + uint32_t range; /* local copy (4 to 7 uses) */ +#ifdef DEBUGGING + assert( bits <= 16 ); + assert( rc_st_dec->rc_range >= 0x01000000 ); /* rc_range is normalized */ +#endif + + low = rc_st_dec->rc_low; + range = rc_st_dec->rc_range; + + range >>= bits; + + val = low / range; + + /* in case of bitstream errors it is possible that val >= (1 << bits) */ + if ( ( val >> bits ) != 0 ) /* equivalent condition */ + { + rc_st_dec->bit_error_detected = 1; + + /* for valid bistreams, always low < range, therefore setting low = range */ + /* will always reach the bitstream error condition branch on the next call */ + rc_st_dec->rc_range = 0xFFFFFFFF; + rc_st_dec->rc_low = rc_st_dec->rc_range; + + /* the current value and all the following values are very likely incorrect */ + return 0; /* return the minimum valid value for the output */ + } + + low -= val * range; + + /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ + if ( range < 0x01000000 ) + { + low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); + range <<= 8; + if ( range < 0x01000000 ) + { + low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); + range <<= 8; + } + } + + rc_st_dec->rc_low = low; + rc_st_dec->rc_range = range; + + return (uint16_t) val; +} + + +/*-------------------------------------------------------------------* + * rc_uni_dec_finish() + * + * Finalize the range decoder + *-------------------------------------------------------------------*/ + +/*! r: Total number of bits consumed */ +int16_t rc_uni_dec_finish( + RangeUniDecState *rc_st_dec /* i/o: RC State handle */ +) +{ + int16_t total_bit_count; + int16_t bits; +#ifdef DEBUGGING + assert( rc_st_dec->rc_range >= 0x01000000 ); /* rc_range is normalized */ +#endif + + /* floor(log2(x)) = floor(log2(x >> 24)) + 24, for any x >= 2 ^ 24 */ + /* 32 - floor(log2(y)) = norm_ul(y) + 1 = norm_l(y >> 24) - 22 */ + bits = norm_l( rc_st_dec->rc_range >> 24 ) - 22; /* bits = 32 - floor(log2(rc_range)) */ + /* completely equivalent with norm_ul(rc_st_enc->rc_range) + 1, but norm_l is faster */ + + bits++; /* conservative number of bits, because the decoder only has rc_range available */ + +#ifdef DEBUGGING + assert( ( bits >= 2 ) && ( bits <= 9 ) ); /* depends on rc_range, which is normalized */ +#endif + + total_bit_count = ( rc_st_dec->bit_count - 32 ) + bits; + + return total_bit_count; +} + + +/*-------------------------------------------------------------------* + * rc_uni_dec_virtual_finish() + * + * Get the total number of bits that would be consumed by finalization + *-------------------------------------------------------------------*/ + +/*! r: Total number of bits consumed */ +int16_t rc_uni_dec_virtual_finish( + RangeUniDecState *rc_st_dec /* i : RC state handle */ +) +{ + /* the function is completely equivalent with rc_uni_dec_finish */ + return rc_st_dec->bit_count + norm_l( rc_st_dec->rc_range >> 24 ) - 53; +} + + +/*-------------------------------------------------------------------* + * rc_uni_dec_read() + * + * Read one byte from the bitstream (internal function) + *-------------------------------------------------------------------*/ + +/*! r: Byte read */ +static int16_t rc_uni_dec_read( + RangeUniDecState *rc_st_dec /* i/o: RC State handle */ +) +{ + int16_t byte_read; + uint16_t *shifted_bit_buffer; + + shifted_bit_buffer = rc_st_dec->bit_buffer + rc_st_dec->bit_count; + rc_st_dec->bit_count += 8; + + /* + * In case of bitstream errors the number the bits read may be larger than the total + * number of bits that have been read from the bitstream and have meaningful values + * plus the extra 30 padding bits that must be appended to the buffer by the caller. + */ + if ( rc_st_dec->bit_count > rc_st_dec->max_allowable_bit_count ) + { + rc_st_dec->bit_error_detected = 1; + + /* for valid bistreams, always low < range, therefore setting low = range */ + /* will always reach the bitstream error condition branch on the next call */ + rc_st_dec->rc_range = 0xFFFFFFFF; + rc_st_dec->rc_low = rc_st_dec->rc_range; + + return 0; /* reading the 8 bits would trigger an out-of-bounds array access */ + } + +#ifdef DEBUGGING + /* shifted_bit_buffer[i] must contain only binary values */ + { + int16_t i; + for ( i = 0; i < 8; ++i ) + { + assert( shifted_bit_buffer[i] <= 1 ); + } + } +#endif + + /* pack the first 8 bits from shifted_bit_buffer, first bit is most significant */ + byte_read = ( (int16_t) shifted_bit_buffer[0] << 7 ) | ( (int16_t) shifted_bit_buffer[1] << 6 ) | + ( (int16_t) shifted_bit_buffer[2] << 5 ) | ( (int16_t) shifted_bit_buffer[3] << 4 ) | + ( (int16_t) shifted_bit_buffer[4] << 3 ) | ( (int16_t) shifted_bit_buffer[5] << 2 ) | + ( (int16_t) shifted_bit_buffer[6] << 1 ) | ( (int16_t) shifted_bit_buffer[7] ); + + return byte_read; +} diff --git a/lib_dec/ivas_render_config.c b/lib_dec/ivas_render_config.c new file mode 100644 index 0000000000..d03ce0fa75 --- /dev/null +++ b/lib_dec/ivas_render_config.c @@ -0,0 +1,122 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_TdBinauralRenderer.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * ivas_render_config_open() + * + * Allocates the renderer configuration structure + *-----------------------------------------------------------------------*/ + +ivas_error ivas_render_config_open( + RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ +) +{ + /* Allocate HR filter set for headphones configuration */ + *hRenderConfig = (RENDER_CONFIG_HANDLE) count_malloc( sizeof( RENDER_CONFIG_DATA ) ); + if ( *hRenderConfig == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer configuration!" ); + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * ivas_render_config_close() + * + * Deallocates the renderer configuration structure + *-------------------------------------------------------------------*/ + +void ivas_render_config_close( + RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ +) +{ + if ( hRenderConfig == NULL || *hRenderConfig == NULL ) + { + return; + } + + count_free( *hRenderConfig ); + *hRenderConfig = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_render_config_init_from_rom() + * + * Initializes the renderer configuration structure from ROM + *-------------------------------------------------------------------*/ + +ivas_error ivas_render_config_init_from_rom( + RENDER_CONFIG_HANDLE *hRenderConfig, /* i/o: Renderer config handle */ + const int16_t room_flag_on /* i : room effect on/off flag */ +) +{ + if ( hRenderConfig == NULL || *hRenderConfig == NULL ) + { + return IVAS_ERROR( IVAS_ERR_UNEXPECTED_NULL_POINTER, "Unexpected null pointer while attempting to fill renderer configuration from ROM" ); + } + +#ifdef DEBUGGING + ( *hRenderConfig )->renderer_type_override = RENDER_TYPE_OVERRIDE_NONE; +#endif + ( *hRenderConfig )->roomAcoustics.override = false; + ( *hRenderConfig )->roomAcoustics.use_brir = room_flag_on; + ( *hRenderConfig )->roomAcoustics.late_reverb_on = room_flag_on; + ( *hRenderConfig )->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_N_BANDS; + ( *hRenderConfig )->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_PRE_DELAY; + ( *hRenderConfig )->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_INPUT_DELAY; + set_zero( &( *hRenderConfig )->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX ); + set_zero( &( *hRenderConfig )->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX ); + set_zero( &( *hRenderConfig )->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); + + mvr2r( ivas_reverb_default_fc, ( *hRenderConfig )->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_default_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_default_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_N_BANDS ); + + return IVAS_ERR_OK; +} diff --git a/lib_dec/ivas_reverb.c b/lib_dec/ivas_reverb.c new file mode 100644 index 0000000000..12dec394df --- /dev/null +++ b/lib_dec/ivas_reverb.c @@ -0,0 +1,1513 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "math.h" +#include "ivas_rom_dec.h" +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define INNER_BLK_SIZE 80 /* size of data blocks used for more efficient delay line and IIR filter processing */ + /* should be a divisor of the frame length at any sampling rate and an even number*/ +#define USE_SR_INDEPENDENT_FIT_FOR_T60_FILTERS /* use sample-rate independent ref. frequency ranges for T60 filters */ +#define FFT_FILTER_WND_FLAT_REGION ( 0.40f ) /* flat section (==1) length of FFT filter window, in proportion to overlap */ +#define FFT_FILTER_WND_TRANS_REGION ( 0.15f ) /* transition (1->0) length of FFT filter window, in proportion to overlap */ +#ifdef USE_SR_INDEPENDENT_FIT_FOR_T60_FILTERS +#define REF_LF_MIN ( 100.0f ) +#define REF_LF_MAX ( 250.0f ) +#define REF_HF_MIN ( 5000.0f ) +#define REF_HF_MAX ( 7950.0f ) +#define LF_BIAS ( 0.5f ) +#else /* settings for previous version of improved 1st order filter design, somewhat dependent on the sampling rate */ +#define REF_LF_MIN ( 0.0f ) +#define REF_LF_MAX ( 200.0f ) +#define REF_HF_MIN ( 6000.0f ) +#define REF_HF_MAX ( 48000.0f ) +#define LF_BIAS ( 0.75f ) +#endif + +#define DEFAULT_SRC_DIST ( 1.5f ) /* default source distance [m] for reverb dmx factor computing */ + +#define IVAS_REVERB_FFT_SIZE_48K ( 512 ) +#define IVAS_REVERB_FFT_SIZE_32K ( 512 ) +#define IVAS_REVERB_FFT_SIZE_16K ( 256 ) +#define IVAS_REVERB_FFT_N_SUBBLOCKS_48K ( 1 ) +#define IVAS_REVERB_FFT_N_SUBBLOCKS_32K ( 1 ) +#define IVAS_REVERB_FFT_N_SUBBLOCKS_16K ( 1 ) + +const int16_t init_loop_delay[IVAS_REV_MAX_NR_BRANCHES] = { 37, 31, 29, 23, 19, 17, 13, 11 }; +const int16_t default_loop_delay_48k[IVAS_REV_MAX_NR_BRANCHES] = { 2309, 1861, 1523, 1259, 1069, 919, 809, 719 }; +const int16_t default_loop_delay_32k[IVAS_REV_MAX_NR_BRANCHES] = { 1531, 1237, 1013, 839, 709, 613, 541, 479 }; +const int16_t default_loop_delay_16k[IVAS_REV_MAX_NR_BRANCHES] = { 769, 619, 509, 421, 353, 307, 269, 239 }; + +#define MAX_NR_OUTPUTS 2 +#define MAX_T60_FILTER_ORDER 12 + + +/*------------------------------------------------------------------------------------------* + * Local Struct definition + *------------------------------------------------------------------------------------------*/ + +typedef struct ivas_reverb_params_t +{ + float dmx_gain; /* (for now, fullband) gain to apply at input to realize diffuse-to-source energy ratio */ + int16_t pre_delay; /* Delay of the FDC reverb, first peak after pre_delay samples. Note that */ + /* there may be non-zero samples earlier due to the filters being */ + /* linear-phase. */ + int16_t nr_loops; /* Number of feedback loops (= L) */ + int16_t pLoop_delays[IVAS_REV_MAX_NR_BRANCHES]; /* Delay for each feedback loop in samples. */ + float pLoop_feedback_matrix[IVAS_REV_MAX_NR_BRANCHES * IVAS_REV_MAX_NR_BRANCHES]; /* Feedback [L][L] matrix that mixes the signals of the loops. */ + int16_t nr_outputs; /* Nr of signals extracted from the loops (= S). */ + /* Currently this is fixed to 2. */ + float pLoop_extract_matrix[MAX_NR_OUTPUTS * IVAS_REV_MAX_NR_BRANCHES]; /* Mix [S][L] matrix from feedback loops to outputs. */ + /* In Matlab: [S x L] - Currently S=2, later may be more than 2 for speaker playback. */ + int16_t t60_is_iir; /* Flag indicates whether T60 filters are IIR. */ + int16_t t60_filter_order; /* Filter order (length of vector) */ + float pT60_filter_coeff[MAX_NR_OUTPUTS * IVAS_REV_MAX_NR_BRANCHES * ( MAX_T60_FILTER_ORDER + 1 )]; /* Filters [][] in feedback loops, controlling T60. */ + /* In Matlab: IIR: [(2 * L) x ( + 1)] (odd: b-vector, even: a-vector) */ + /* In Matlab: FIR: [L x ] */ + float *pFc; /* Center frequencies for FFT filter design */ + float *pRt60; /* RT60 values at these frequencies */ + float *pDsr; /* DSR values at these frequencies */ + int16_t do_corr_filter; /* Flag indicating whether correlation filters should be used. */ + /* Correlation only supported and needed for binaural playback (i.e. */ + /* when nr_outputs != 2 correlation filtering is never supported). */ + +} ivas_reverb_params_t; + +typedef struct ivas_reverb_sizes_t +{ + int16_t max_nr_loops; /* 4, 6, 8 or 16 */ + int16_t max_nr_outputs; /* 2, ... */ + int16_t max_t60_filter_order; /* 1..128 */ + +} ivas_reverb_sizes_t; + + +/*------------------------------------------------------------------------------------------* + * Static functions declarations + *------------------------------------------------------------------------------------------*/ + +static ivas_error design_iir2_1st_order( ivas_reverb_params_t *pParams, const uint16_t nrLoop, const uint16_t nrFrequencies, float frequencies[], float amplitudes[], const int32_t output_Fs ); + + +/*-----------------------------------------------------------------------------------------* + * Function set_max_sizes() + * + * + *-----------------------------------------------------------------------------------------*/ + +static void set_max_sizes( + ivas_reverb_sizes_t *pRevSizes ) +{ + pRevSizes->max_nr_loops = IVAS_REV_MAX_NR_BRANCHES; + pRevSizes->max_nr_outputs = MAX_NR_OUTPUTS; + pRevSizes->max_t60_filter_order = MAX_T60_FILTER_ORDER; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function compute_feedback_matrix() + * + * Compute the N x N matrix for the mixing the N feedback loop outputs into the N inputs again + *-----------------------------------------------------------------------------------------*/ + +static ivas_error compute_feedback_matrix( + float *pFeedbackMatrix, + const int16_t n ) +{ + float u, v; + int16_t i, j, x; + + if ( n == 6 ) + { + /* special case (there is no 6 x 6 Hadamard matrix in set R) */ + u = -1.0f / 3; + v = 1.0f + u; + for ( i = 0; i < n; i++ ) + { + for ( j = 0; j < n; j++ ) + { + if ( i == j ) + { + pFeedbackMatrix[i * n + j] = v; + } + else + { + pFeedbackMatrix[i * n + j] = u; + } + } + } + } + else + { + if ( !( n == 4 || n == 8 || n == 16 ) ) + { + return IVAS_ERR_INTERNAL; /* n must be 4, 6, 8 or 16, else ERROR */ + } + u = 1.0f / sqrtf( n ); + if ( n == 4 ) + { + u = -u; + } + + pFeedbackMatrix[0] = u; + for ( x = 1; x < n; x += x ) + { + for ( i = 0; i < x; i++ ) + { + for ( j = 0; j < x; j++ ) + { + pFeedbackMatrix[( i + x ) * n + j] = pFeedbackMatrix[i * n + j]; + pFeedbackMatrix[i * n + j + x] = pFeedbackMatrix[i * n + j]; + pFeedbackMatrix[( i + x ) * n + j + x] = -pFeedbackMatrix[i * n + j]; + } + } + } + + if ( n == 4 ) + { + /* special case */ + for ( j = 12; j < 16; j++ ) + { + pFeedbackMatrix[j] = -pFeedbackMatrix[j]; + } + } + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function compute_2_out_extract_matrix() + * + * Compute the N x 2 matrix for mixing the N Jot feedback loops to 2 outputs + *-----------------------------------------------------------------------------------------*/ + +static void compute_2_out_extract_matrix( + float *pExtractMatrix, + const int16_t n ) +{ + float ff; + int16_t i; + + ff = 1.0; + for ( i = 0; i < n; i++ ) + { + pExtractMatrix[i] = 1.0; + pExtractMatrix[i + n] = ff; + ff = -ff; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function set_base_config() + * + * Set all jot reverb parameters that are independent of the input reverb configuration + *-----------------------------------------------------------------------------------------*/ + +static ivas_error set_base_config( + ivas_reverb_params_t *pParams, + const int32_t output_Fs, + ivas_reverb_sizes_t *pRevSizes ) +{ + ivas_error error; + int16_t loop; + const int16_t *selected_loop_delay = NULL; + + if ( pParams == NULL ) + { + return IVAS_ERR_INTERNAL; + } + + if ( pRevSizes == NULL ) + { + return IVAS_ERR_INTERNAL; + } + + /* TODO: values below could be reconsidered, and/or be made variable */ + pParams->pre_delay = 0; + pParams->nr_outputs = 2; + + if ( pParams->nr_outputs > pRevSizes->max_nr_outputs ) + { + return IVAS_ERR_INTERNAL; + } + + pParams->nr_loops = IVAS_REV_MAX_NR_BRANCHES; + + if ( pParams->nr_loops > pRevSizes->max_nr_loops ) + { + return IVAS_ERR_INTERNAL; + } + + /* set loop delays to default */ + if ( output_Fs == 48000 ) + { + selected_loop_delay = default_loop_delay_48k; + } + else if ( output_Fs == 32000 ) + { + selected_loop_delay = default_loop_delay_32k; + } + else if ( output_Fs == 16000 ) + { + selected_loop_delay = default_loop_delay_16k; + } + + for ( loop = 0; loop < pParams->nr_loops; loop++ ) + { + pParams->pLoop_delays[loop] = selected_loop_delay[loop]; + } + + /* set feedback and output matrices */ + if ( ( error = compute_feedback_matrix( pParams->pLoop_feedback_matrix, pParams->nr_loops ) ) != IVAS_ERR_OK ) + { + return error; + } + + compute_2_out_extract_matrix( pParams->pLoop_extract_matrix, pParams->nr_loops ); + + /* pre-set the various filters; they will be set later based on reverb configuration */ + pParams->t60_is_iir = TRUE; + pParams->t60_filter_order = 1; /* set to 1 in base config. */ + + if ( pParams->t60_filter_order > pRevSizes->max_t60_filter_order ) + { + return IVAS_ERR_INTERNAL; + } + + if ( pParams->nr_outputs == 2 ) + { + pParams->do_corr_filter = 1; + } + else + { + pParams->do_corr_filter = 0; + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function calc_dmx_gain() + * + * Computes and sets the downmix gain + *-----------------------------------------------------------------------------------------*/ + +static void calc_dmx_gain( + ivas_reverb_params_t *pParams ) +{ + const float dist = DEFAULT_SRC_DIST; + + pParams->dmx_gain = sqrtf( 4.0f * EVS_PI * dist * dist / 0.001f ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function calc_predelay() + * + * Calculate the predelay, taking shortest jot loop delay into account + *-----------------------------------------------------------------------------------------*/ + +static void calc_predelay( + ivas_reverb_params_t *pParams, + float acoustic_predelay_sec, + const int32_t output_Fs ) +{ + int16_t i, predelay; + int16_t fbdelay; + int16_t output_frame; + + fbdelay = (int16_t) pParams->pLoop_delays[0]; + predelay = (int16_t) round( acoustic_predelay_sec * output_Fs ); + output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + + fbdelay = pParams->pLoop_delays[0]; + for ( i = 1; i < pParams->nr_loops; i++ ) + { + if ( fbdelay > pParams->pLoop_delays[i] ) + { + fbdelay = pParams->pLoop_delays[i]; + } + } + predelay -= fbdelay; + + if ( predelay < 0 ) + { + predelay = 0; + } + + if ( output_frame < predelay ) + { + predelay = output_frame; + } + + pParams->pre_delay = predelay; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function compute_t60_coeffs() + * + * Calculate Jot reverb's T60 filter coefficients + *-----------------------------------------------------------------------------------------*/ + +static ivas_error compute_t60_coeffs( + ivas_reverb_params_t *pParams, + int16_t nr_fc_fft_filter, + const int32_t output_Fs ) +{ + int16_t i, j, tf_T60_len; + int16_t len; + float c, d; + float H_b[RV_LENGTH_NR_FC]; + float norm_f[RV_LENGTH_NR_FC]; + float inv_hfs; + float *targetT60 = pParams->pRt60; + float *freqT60 = pParams->pFc; + ivas_error error; + + error = IVAS_ERR_OK; + tf_T60_len = nr_fc_fft_filter; + + + if ( pParams->t60_is_iir == FALSE ) + { + return IVAS_ERR_INTERNAL; /* only IIR supported */ + } + + /* normalize pFrequencies: 0 .. 1/2 output_Fs --> 0.0 .. 1.0 */ + inv_hfs = 2.0f / (float) output_Fs; + for ( i = 0; i < tf_T60_len; i++ ) + { + norm_f[i] = freqT60[i] * inv_hfs; + } + + c = -3.0f * LOG_10 / (float) output_Fs; /* 10^(x) == exp(LOG_10 * x) */ + + for ( j = 0; j < pParams->nr_loops; j++ ) + { + d = c * pParams->pLoop_delays[j]; + for ( i = 0; i < tf_T60_len; i++ ) + { + H_b[i] = expf( d / targetT60[i] ); /* using EXP(x) instead of 10^x */ + } + + if ( ( error = design_iir2_1st_order( pParams, j, tf_T60_len, norm_f, H_b, output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + len = pParams->t60_filter_order + 1; + for ( i = 0; i < pParams->nr_loops; i++ ) + { + if ( pParams->pT60_filter_coeff[( i + i ) * len] < 0.0f ) + { + for ( j = 0; j < len; j++ ) + { + pParams->pT60_filter_coeff[( i + i ) * len + j] *= ( -1.0f ); + } + } + } + + // TODO: Compute proper (group) Delay from IIR filter + len = ( pParams->t60_filter_order + 1 ) >> 1; /* == floor( (order+1) / 2) */ + for ( i = 0; i < pParams->nr_loops; i++ ) + { + pParams->pLoop_delays[i] -= len; + } + + return error; +} + + +/*-----------------------------------------------------------------------------------------* + * Function calc_low_shelf_first_order_filter() + * + * Calculate 1st order low shelf filter + *-----------------------------------------------------------------------------------------*/ + +static void calc_low_shelf_first_order_filter( + float *pNum, + float *pDen, + const float f0, + const float g ) +{ + float w0; + + w0 = tanf( EVS_PI * f0 / 2.0f ); + + if ( g < 1.0f ) + { + pNum[0] = 1 + w0 * g; + pNum[1] = w0 * g - 1; + pDen[0] = 1 + w0; + pDen[1] = w0 - 1; + } + else + { + pNum[0] = 1 + w0; + pNum[1] = w0 - 1; + pDen[0] = 1 + w0 / g; + pDen[1] = w0 / g - 1; + } + pNum[0] = pNum[0] / pDen[0]; + pNum[1] = pNum[1] / pDen[0]; + pDen[1] = pDen[1] / pDen[0]; + pDen[0] = 1.0f; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function calc_jot_t60_coeffs() + * + * Calculate Jot reverb's T60 filters + *-----------------------------------------------------------------------------------------*/ + +static ivas_error calc_jot_t60_coeffs( + float *pAmplitudes, + const uint16_t nrFrequencies, + float *pFrequencies, + float *pCoeffA, + float *pCoeffB, + float fNyquist ) +{ + const float ref_lf_min_norm = REF_LF_MIN / fNyquist; + const float ref_lf_max_norm = REF_LF_MAX / fNyquist; + const float ref_hf_min_norm = REF_HF_MIN / fNyquist; + const float ref_hf_max_norm = REF_HF_MAX / fNyquist; + int16_t f_idx; + int16_t minidx = nrFrequencies - 1; + float f0, gain, tmp; + float minval = 1000000.0f; + float lf_target_gain_dB = 0.0f; + float hf_target_gain_dB = 0.0f; + float mid_crossing_gain_dB; + uint16_t n_points_lf = 0; + uint16_t n_points_hf = 0; + float lin_gain_lf, lin_gain_hf; + float pH_dB[RV_LENGTH_NR_FC]; + + if ( pAmplitudes[0] < pAmplitudes[nrFrequencies - 1] ) + { + /* amplitude response has to have low-pass characteristic */ + return IVAS_ERR_INTERNAL; + } + + for ( f_idx = 0; f_idx < nrFrequencies; f_idx++ ) + { + pH_dB[f_idx] = 20.0f * log10f( pAmplitudes[f_idx] ); + if ( ( pFrequencies[f_idx] >= ref_lf_min_norm ) && ( pFrequencies[f_idx] <= ref_lf_max_norm ) ) + { + lf_target_gain_dB += pH_dB[f_idx]; + n_points_lf++; + } + if ( ( pFrequencies[f_idx] >= ref_hf_min_norm ) && ( pFrequencies[f_idx] <= ref_hf_max_norm ) ) + { + hf_target_gain_dB += pH_dB[f_idx]; + n_points_hf++; + } + } + + if ( ( n_points_lf == 0 ) || ( n_points_hf == 0 ) ) + { + return IVAS_ERR_INTERNAL; + } + + lf_target_gain_dB = lf_target_gain_dB / (float) n_points_lf; + hf_target_gain_dB = hf_target_gain_dB / (float) n_points_hf; + mid_crossing_gain_dB = hf_target_gain_dB + LF_BIAS * ( lf_target_gain_dB - hf_target_gain_dB ); + + for ( f_idx = 1; f_idx < nrFrequencies - 1; f_idx++ ) + { + tmp = fabsf( pH_dB[f_idx] - mid_crossing_gain_dB ); + if ( tmp < minval ) + { + minval = tmp; + minidx = f_idx; + } + } + + f0 = pFrequencies[minidx]; + lin_gain_lf = powf( 10.0f, lf_target_gain_dB * 0.05f ); + lin_gain_hf = powf( 10.0f, hf_target_gain_dB * 0.05f ); + + gain = lin_gain_lf / lin_gain_hf; + + /* call low-pass iir shelf */ + calc_low_shelf_first_order_filter( pCoeffB, pCoeffA, f0, gain ); + + /* adjust gain to match pAmplitudes */ + pCoeffB[0] = pCoeffB[0] * lin_gain_hf; + pCoeffB[1] = pCoeffB[1] * lin_gain_hf; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function design_iir2_1st_order() + * + * Design 1st order IIR filter + *-----------------------------------------------------------------------------------------*/ + +static ivas_error design_iir2_1st_order( + ivas_reverb_params_t *pParams, + const uint16_t nrLoop, + const uint16_t nrFrequencies, + float frequencies[], + float amplitudes[], + const int32_t output_Fs ) +{ + int16_t len, n, j; + float coefA[2] = { 1.0f, 0.0f }; + float coefB[2] = { 1.0f, 0.0f }; + ivas_error error = IVAS_ERR_OK; + + /* Get numerator and denominator coefficients */ + error = calc_jot_t60_coeffs( amplitudes, nrFrequencies, frequencies, coefA, coefB, 0.5f * output_Fs ); + + if ( error != IVAS_ERR_OK ) + { + return error; + } + + len = 2; + n = nrLoop + nrLoop; + for ( j = 0; j < len; j++ ) + { + pParams->pT60_filter_coeff[(n) *len + j] = coefB[j]; + pParams->pT60_filter_coeff[( n + 1 ) * len + j] = coefA[j]; + } + + return error; +} + + +/*-----------------------------------------------------------------------------------------* + * Function initialize_reverb() + * + * Set the number of branches (feedback loops) and Initializes the memory structure (pointers to data) + *-----------------------------------------------------------------------------------------*/ + +static ivas_error initialize_reverb( + REVERB_HANDLE pState ) +{ + ivas_error error; + + error = IVAS_ERR_OK; + + /* init correlation and coloration filters */ + if ( ( error = ivas_reverb_t2f_f2t_init( &pState->fft_filter_ols, pState->fft_size, pState->fft_subblock_size ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_reverb_fft_filter_init( &pState->fft_filter_correl_0, pState->fft_size ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_reverb_fft_filter_init( &pState->fft_filter_correl_1, pState->fft_size ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_reverb_fft_filter_init( &pState->fft_filter_color_0, pState->fft_size ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_reverb_fft_filter_init( &pState->fft_filter_color_1, pState->fft_size ) ) != IVAS_ERR_OK ) + { + return error; + } + + return error; +} + + +/*-----------------------------------------------------------------------------------------* + * Function set_t60_filter() + * + * Sets t60 number of taps and coefficients A and B + *-----------------------------------------------------------------------------------------*/ + +static ivas_error set_t60_filter( + REVERB_HANDLE pState, + const uint16_t branch, + const uint16_t nr_taps, + float coefA[], + float coefB[] ) +{ + if ( branch >= pState->nr_of_branches ) + { + return IVAS_ERR_INTERNAL; + } + + if ( nr_taps > IVAS_REV_MAX_IIR_FILTER_LENGTH ) + { + return IVAS_ERR_INTERNAL; + } + + ivas_reverb_iir_filt_set( &( pState->t60[branch] ), nr_taps, coefA, coefB ); + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function set_feedback_delay() + * + * Sets Delay of feedback branch in number of samples + *-----------------------------------------------------------------------------------------*/ + +static ivas_error set_feedback_delay( + REVERB_HANDLE pState, + const uint16_t branch, + const int16_t fb_delay ) +{ + if ( branch >= pState->nr_of_branches ) + { + return IVAS_ERR_INTERNAL; + } + + pState->delay_line[branch].Delay = fb_delay; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function set_feedback_gain() + * + * Sets nr_of_branches feedback gain values in feedback matrix + *-----------------------------------------------------------------------------------------*/ + +static ivas_error set_feedback_gain( + REVERB_HANDLE pState, + const uint16_t branch, + float *pGain ) +{ + if ( branch >= pState->nr_of_branches ) + { + return IVAS_ERR_INTERNAL; + } + + for ( uint16_t i = 0; i < pState->nr_of_branches; i++ ) + { + pState->gain_matrix[branch][i] = pGain[i]; + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function set_correl_fft_filter() + * + * + *-----------------------------------------------------------------------------------------*/ + +static ivas_error set_correl_fft_filter( + REVERB_HANDLE pState, + const uint16_t channel, + rv_fftwf_type_complex *pSpectrum ) +{ + if ( channel > 1 ) + { + return IVAS_ERR_INTERNAL; + } + + if ( channel == 0 ) + { + ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, pState->fft_filter_correl_0.fft_spectrum, pState->fft_filter_correl_0.fft_size ); + } + else + { + ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, pState->fft_filter_correl_1.fft_spectrum, pState->fft_filter_correl_1.fft_size ); + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function set_color_fft_filter() + * + * + *-----------------------------------------------------------------------------------------*/ + +static ivas_error set_color_fft_filter( + REVERB_HANDLE pState, + const uint16_t channel, + rv_fftwf_type_complex *pSpectrum ) +{ + if ( channel > 1 ) + { + return IVAS_ERR_INTERNAL; + } + + if ( channel == 0 ) + { + ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, pState->fft_filter_color_0.fft_spectrum, pState->fft_filter_color_0.fft_size ); + } + else + { + ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, pState->fft_filter_color_1.fft_spectrum, pState->fft_filter_color_1.fft_size ); + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function post_fft_filter() + * + * + *-----------------------------------------------------------------------------------------*/ + +static void post_fft_filter( + REVERB_HANDLE pState, + float *p0, + float *p1, + float *pBuffer_0, + float *pBuffer_1 ) +{ + if ( pState->do_corr_filter ) + { + ivas_reverb_t2f_f2t_in( &pState->fft_filter_ols, p0, p1, pBuffer_0, pBuffer_1 ); + ivas_reverb_fft_filter_ComplexMul( &pState->fft_filter_correl_0, pBuffer_0 ); + ivas_reverb_fft_filter_ComplexMul( &pState->fft_filter_correl_1, pBuffer_1 ); + ivas_reverb_fft_filter_CrossMix( pBuffer_0, pBuffer_1, pState->fft_filter_correl_0.fft_size ); + } + else + { + ivas_reverb_t2f_f2t_in( &pState->fft_filter_ols, p0, p1, pBuffer_0, pBuffer_1 ); + } + + ivas_reverb_fft_filter_ComplexMul( &pState->fft_filter_color_0, pBuffer_0 ); + ivas_reverb_fft_filter_ComplexMul( &pState->fft_filter_color_1, pBuffer_1 ); + ivas_reverb_t2f_f2t_out( &pState->fft_filter_ols, pBuffer_0, pBuffer_1, p0, p1 ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function set_mixer_level() + * + * Sets Mixer level: to mix 2 output channels from 8 feedback branches + *-----------------------------------------------------------------------------------------*/ + +static ivas_error set_mixer_level( + REVERB_HANDLE pState, + const uint16_t channel, + float level[] ) +{ + if ( channel >= BINAURAL_CHANNELS ) + { + return IVAS_ERR_INTERNAL; + } + + for ( uint16_t i = 0; i < pState->nr_of_branches; i++ ) + { + pState->mixer[channel][i] = level[i]; + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function reverb_block() + * + * Input a block (mono) and calculate the 2 output blocks. + *-----------------------------------------------------------------------------------------*/ + +static void reverb_block( + REVERB_HANDLE pState, + float *pInput, + float *pOut0, + float *pOut1 ) + +{ + uint16_t nr_branches = pState->nr_of_branches; + uint16_t bsize = pState->full_block_size; + uint16_t inner_bsize = INNER_BLK_SIZE; + uint16_t i, j, k, ns, branch_idx, blk_idx, start_sample_idx; + + float *pFFT_buf[2], FFT_buf_1[RV_FILTER_MAX_FFT_SIZE], FFT_buf_2[RV_FILTER_MAX_FFT_SIZE]; + float pFeedback_input[INNER_BLK_SIZE]; + float pTemp[INNER_BLK_SIZE]; + float *ppOutput[IVAS_REV_MAX_NR_BRANCHES]; + float Output[IVAS_REV_MAX_NR_BRANCHES][INNER_BLK_SIZE]; + + pFFT_buf[0] = &FFT_buf_1[0]; + pFFT_buf[1] = &FFT_buf_2[0]; + + for ( branch_idx = 0; branch_idx < nr_branches; branch_idx++ ) + { + ppOutput[branch_idx] = (float *) Output + branch_idx * inner_bsize; + } + for ( k = 0; k < bsize; k += inner_bsize ) + { + float *pO0 = &pOut0[k]; + float *pO1 = &pOut1[k]; + for ( i = 0; i < inner_bsize; i++ ) + { + pO0[i] = 0.0f; + pO1[i] = 0.0f; + } + + /* feedback network: */ + for ( i = 0; i < nr_branches; i++ ) + { + float *pOutput_i = &ppOutput[i][0]; + float mixer_0_i = pState->mixer[0][i]; + float mixer_1_i = pState->mixer[1][i]; + + /* output and feedback are same, get sample from delay line ... */ + ivas_rev_delay_line_get_sample_blk( &( pState->delay_line[i] ), inner_bsize, pTemp ); + ivas_reverb_iir_filt_2taps_feed_blk( &( pState->t60[i] ), inner_bsize, pTemp, ppOutput[i] ); + for ( ns = 0; ns < inner_bsize; ns++ ) + { + pO0[ns] += pOutput_i[ns] * mixer_0_i; /* mixer ch 0 */ + pO1[ns] += pOutput_i[ns] * mixer_1_i; /* mixer ch 1 */ + } + } + + for ( i = 0; i < nr_branches; i++ ) + { + float *pIn = &pInput[k]; + for ( ns = 0; ns < inner_bsize; ns++ ) + { + pFeedback_input[ns] = pIn[ns]; + } + for ( j = 0; j < nr_branches; j++ ) + { + float gain_matrix_j_i = pState->gain_matrix[j][i]; + float *pOutput = &ppOutput[j][0]; + for ( ns = 0; ns < inner_bsize; ns++ ) + { + pFeedback_input[ns] += gain_matrix_j_i * pOutput[ns]; + } + } + ivas_rev_delay_line_feed_sample_blk( &( pState->delay_line[i] ), inner_bsize, pFeedback_input ); + } + } + + /* Applying FFT filter to each sub-frame */ + for ( blk_idx = 0; blk_idx < pState->num_fft_subblocks; blk_idx++ ) + { + start_sample_idx = blk_idx * pState->fft_subblock_size; + post_fft_filter( pState, pOut0 + start_sample_idx, pOut1 + start_sample_idx, pFFT_buf[0], pFFT_buf[1] ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function downmix_input_block() + * + * Downmix input to mono, taking also DSR gain into account + *-----------------------------------------------------------------------------------------*/ + +static ivas_error downmix_input_block( + REVERB_HANDLE pState, + float pcm_in[][L_FRAME48k], + const AUDIO_CONFIG transport_config, + float *pPcm_out, + const int16_t input_offset ) +{ + int16_t i, s, nchan_transport; + float dmx_gain = pState->dmx_gain; + + switch ( transport_config ) + { + case AUDIO_CONFIG_STEREO: + case AUDIO_CONFIG_5_1: + case AUDIO_CONFIG_7_1: + case AUDIO_CONFIG_5_1_2: + case AUDIO_CONFIG_5_1_4: + case AUDIO_CONFIG_7_1_4: + case AUDIO_CONFIG_ISM1: + case AUDIO_CONFIG_ISM2: + case AUDIO_CONFIG_ISM3: + case AUDIO_CONFIG_ISM4: + { + nchan_transport = audioCfg2channels( transport_config ); + for ( s = 0; s < pState->full_block_size; s++ ) + { + float temp = pcm_in[0][input_offset + s]; + for ( i = 1; i < nchan_transport; i++ ) + { + temp += pcm_in[i][input_offset + s]; + } + pPcm_out[s] = dmx_gain * temp; + } + break; + } + case AUDIO_CONFIG_MONO: /* ~'ZOA_1' */ + case AUDIO_CONFIG_FOA: + case AUDIO_CONFIG_HOA2: + case AUDIO_CONFIG_HOA3: + { + for ( s = 0; s < pState->full_block_size; s++ ) + { + pPcm_out[s] = dmx_gain * pcm_in[0][input_offset + s]; + } + break; + } + default: + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unsupported input format for reverb" ); + break; + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function predelay_block() + * + * Perform a predelay + *-----------------------------------------------------------------------------------------*/ + +static void predelay_block( + REVERB_HANDLE pState, + float *pInput, + float *pOutput ) +{ + uint16_t i, idx, n_samples, blk_size; + uint16_t max_blk_size = (uint16_t) pState->predelay_line.Delay; + + if ( max_blk_size < 2 ) + { + if ( max_blk_size == 0 ) /* zero-length delay line: just copy the data from input to output */ + { + for ( i = 0; i < pState->full_block_size; i++ ) + { + pOutput[i] = pInput[i]; + } + } + else /* 1-sample length delay line: feed the data sample-by-sample */ + { + for ( i = 0; i < pState->full_block_size; i++ ) + { + pOutput[i] = ivas_rev_delay_line_get_sample( &( pState->predelay_line ) ); + ivas_rev_delay_line_feed_sample( &( pState->predelay_line ), pInput[i] ); + } + } + } + else /* multiple-sample length delay line: use block processing */ + { + idx = 0; + n_samples = pState->full_block_size; + while ( n_samples > 0 ) + { + blk_size = n_samples; + if ( blk_size > max_blk_size ) + { + blk_size = max_blk_size; + } + ivas_rev_delay_line_get_sample_blk( &( pState->predelay_line ), blk_size, &pOutput[idx] ); + ivas_rev_delay_line_feed_sample_blk( &( pState->predelay_line ), blk_size, &pInput[idx] ); + idx += blk_size; + n_samples -= blk_size; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function mix_output_block() + * + * mix one block of *pInL and *pInR samples into *pOutL and *pOutL respectively + *-----------------------------------------------------------------------------------------*/ + +static void mix_output_block( + REVERB_HANDLE pState, + const float *pInL, + const float *pInR, + float *pOutL, + float *pOutR ) +{ + uint16_t i; + + for ( i = 0; i < pState->full_block_size; i++ ) + { + pOutL[i] += pInL[i]; + pOutR[i] += pInR[i]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function clear_buffers() + * + * Clears buffers of delay lines and filters + *-----------------------------------------------------------------------------------------*/ + +static void clear_buffers( + REVERB_HANDLE pState ) +{ + int16_t i; + ivas_rev_iir_filter_t *iirFilter; + ivas_rev_delay_line_t *delay_line; + + for ( i = 0; i < IVAS_REV_MAX_NR_BRANCHES; i++ ) + { + delay_line = &( pState->delay_line[i] ); + set_f( delay_line->pBuffer, 0, delay_line->MaxDelay ); + delay_line->BufferPos = 0; + + iirFilter = &( pState->t60[i] ); + set_f( iirFilter->pBuffer, 0, iirFilter->MaxTaps ); + } + + ivas_reverb_t2f_f2t_ClearHistory( &pState->fft_filter_ols ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_reverb_open() + * + * Allocate and initialize Crend reverberation handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_reverb_open( + REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ + const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ + RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + ivas_error error; + REVERB_HANDLE pState = NULL; + int16_t i, idx, hrtf_idx, subframe_len, output_frame, predelay_bf_len, nr_out_ch, m, channel; + ivas_reverb_sizes_t rev_sizes; + ivas_reverb_params_t params; + int16_t loop; + rv_fftwf_type_complex pFft_wf_filter_ch0[RV_LENGTH_NR_FC]; + rv_fftwf_type_complex pFft_wf_filter_ch1[RV_LENGTH_NR_FC]; + const float *pHrtf_avg_pwr_response_l_const; /* The HRTF set's average left ear power response */ + const float *pHrtf_avg_pwr_response_r_const; /* The HRTF set's average right ear power response */ + const float *pHrtf_inter_aural_coherence_const; /* The HRTF set's inter-aural coherence for diffuse sound */ + float *pHrtf_avg_pwr_response_l; /* The HRTF set's average left ear power response */ + float *pHrtf_avg_pwr_response_r; /* The HRTF set's average right ear power response */ + float *pHrtf_inter_aural_coherence; /* The HRTF set's inter-aural coherence for diffuse sound */ + float *pHrtf_set_l_re[IVAS_MAX_NUM_CH]; + float *pHrtf_set_l_im[IVAS_MAX_NUM_CH]; + float *pHrtf_set_r_re[IVAS_MAX_NUM_CH]; + float *pHrtf_set_r_im[IVAS_MAX_NUM_CH]; + float coef_a[IVAS_REV_MAX_IIR_FILTER_LENGTH]; + float coef_b[IVAS_REV_MAX_IIR_FILTER_LENGTH]; + float pColor_target_l[RV_LENGTH_NR_FC]; + float pColor_target_r[RV_LENGTH_NR_FC]; + float pTime_window[RV_FILTER_MAX_FFT_SIZE]; + float freq_step; + float delay_diff; + float ln_1e6_inverted; + int16_t offset; + int16_t fft_hist_size; + int16_t transitionStart; + int16_t transitionLength; + int16_t nrcoefs; + int16_t nr_fc_input, nr_fc_fft_filter; + + error = IVAS_ERR_OK; + output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + subframe_len = output_frame / MAX_PARAM_SPATIAL_SUBFRAMES; + predelay_bf_len = output_frame; + + /* Allocate main reverb. handle */ + if ( ( pState = (REVERB_HANDLE) count_malloc( sizeof( REVERB_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Reverberator " ); + } + + nr_fc_input = hRenderConfig->roomAcoustics.nBands; + set_max_sizes( &rev_sizes ); + + if ( ( error = set_base_config( ¶ms, output_Fs, &rev_sizes ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( loop = 0; loop < IVAS_REV_MAX_NR_BRANCHES; loop++ ) + { + if ( ( pState->loop_delay_buffer[loop] = (float *) count_malloc( params.pLoop_delays[loop] * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CREND Reverberator" ); + } + } + + if ( ( pState->pPredelay_buffer = (float *) count_malloc( output_frame * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CREND Reverberator" ); + } + pState->full_block_size = subframe_len; + pState->nr_of_branches = rev_sizes.max_nr_loops; + + if ( subframe_len == L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES ) + { + pState->fft_size = IVAS_REVERB_FFT_SIZE_48K; + pState->num_fft_subblocks = IVAS_REVERB_FFT_N_SUBBLOCKS_48K; + } + else if ( subframe_len == L_FRAME32k / MAX_PARAM_SPATIAL_SUBFRAMES ) + { + pState->fft_size = IVAS_REVERB_FFT_SIZE_32K; + pState->num_fft_subblocks = IVAS_REVERB_FFT_N_SUBBLOCKS_32K; + } + else if ( subframe_len == L_FRAME16k / MAX_PARAM_SPATIAL_SUBFRAMES ) + { + pState->fft_size = IVAS_REVERB_FFT_SIZE_16K; + pState->num_fft_subblocks = IVAS_REVERB_FFT_N_SUBBLOCKS_16K; + } + else + { + assert( 0 ); /* unsupported block size */ + } + pState->fft_subblock_size = subframe_len / pState->num_fft_subblocks; + nr_fc_fft_filter = ( pState->fft_size >> 1 ) + 1; + + /* === 'Control logic': compute the reverb processing parameters from the === */ + /* === room, source and listener acoustic information provided in the reverb config === */ + /* Setting up shared temporary buffers for fc, RT60, DSR, etc. */ + pHrtf_avg_pwr_response_l = &pFft_wf_filter_ch0[0][0]; + pHrtf_avg_pwr_response_r = pHrtf_avg_pwr_response_l + nr_fc_fft_filter; + params.pRt60 = &pFft_wf_filter_ch1[0][0]; + params.pDsr = params.pRt60 + nr_fc_fft_filter; + params.pFc = &pState->fft_filter_color_0.fft_spectrum[0]; + pHrtf_inter_aural_coherence = &pState->fft_filter_color_1.fft_spectrum[0]; + + /* Note: these temp buffers can only be used before the final step of the FFT filter design : */ + /* before calls to ivas_reverb_calc_correl_filters(...) or to ivas_reverb_calc_color_filters(...) */ + /* set the uniform frequency grid for FFT filtering */ + freq_step = 0.5f * output_Fs / ( nr_fc_fft_filter - 1 ); + for ( idx = 0; idx < nr_fc_fft_filter; idx++ ) + { + params.pFc[idx] = freq_step * idx; + } + + /* use crend hrtf filters */ + if ( hHrtf != NULL ) + { + /* Compute HRTF set properties: average left/right energies, IA coherence */ + /* First, find the offset of the frequency-domain data for the 1st frame and assign HRTF pointers */ + for ( nr_out_ch = 0; nr_out_ch < BINAURAL_CHANNELS; nr_out_ch++ ) + { + for ( hrtf_idx = 0; hrtf_idx < hHrtf->max_num_ir; hrtf_idx++ ) + { + offset = 0; + for ( m = 0; m < hHrtf->num_iterations[hrtf_idx][nr_out_ch] - 1; m++ ) + { + offset += hHrtf->pIndex_frequency_max[hrtf_idx][nr_out_ch][m]; + } + + if ( nr_out_ch == 0 ) + { + pHrtf_set_l_re[hrtf_idx] = &hHrtf->pOut_to_bin_re[hrtf_idx][0][offset]; + pHrtf_set_l_im[hrtf_idx] = &hHrtf->pOut_to_bin_im[hrtf_idx][0][offset]; + } + else + { + pHrtf_set_r_re[hrtf_idx] = &hHrtf->pOut_to_bin_re[hrtf_idx][1][offset]; + pHrtf_set_r_im[hrtf_idx] = &hHrtf->pOut_to_bin_im[hrtf_idx][1][offset]; + } + } + } + + /* Compute HRTF set properties using frequency-domain HRTF data */ + ivas_reverb_get_hrtf_set_properties( pHrtf_set_l_re, pHrtf_set_l_im, pHrtf_set_r_re, pHrtf_set_r_im, hHrtf->max_num_ir, subframe_len, + nr_fc_fft_filter, pHrtf_avg_pwr_response_l, pHrtf_avg_pwr_response_r, pHrtf_inter_aural_coherence ); + + pHrtf_avg_pwr_response_l_const = (const float *) pHrtf_avg_pwr_response_l; + pHrtf_avg_pwr_response_r_const = (const float *) pHrtf_avg_pwr_response_r; + pHrtf_inter_aural_coherence_const = (const float *) pHrtf_inter_aural_coherence; + } + else + { + pHrtf_avg_pwr_response_l_const = orange53_left_avg_power; + pHrtf_avg_pwr_response_r_const = orange53_right_avg_power; + pHrtf_inter_aural_coherence_const = orange53_coherence; + } + + /* interpolate input table data for T60 and DSR to the FFT filter grid */ + ivas_reverb_interpolate_acoustic_data( nr_fc_input, hRenderConfig->roomAcoustics.pFc_input, hRenderConfig->roomAcoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_dsr, + nr_fc_fft_filter, params.pFc, params.pRt60, params.pDsr ); + + /* adjust DSR for the delay difference */ + delay_diff = hRenderConfig->roomAcoustics.inputPreDelay - hRenderConfig->roomAcoustics.acousticPreDelay; + ln_1e6_inverted = 1.0f / logf( 1e06f ); + for ( idx = 0; idx < nr_fc_fft_filter; idx++ ) + { + const float tau = params.pRt60[idx] * ln_1e6_inverted; + params.pDsr[idx] *= expf( delay_diff / tau ); + } + + /* input downmix */ + calc_dmx_gain( ¶ms ); + + /* predelay - must be after set_base_config() and before compute_t60_coeffs() */ + calc_predelay( ¶ms, hRenderConfig->roomAcoustics.acousticPreDelay, output_Fs ); + /* jot reverb filters */ + if ( ( error = compute_t60_coeffs( ¶ms, nr_fc_fft_filter, output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* === Now, copy parameters from ivas_reverb_params_t to REVERB_DATA === */ + /* === to be used for subsequent audio signal processing === */ + /* init input downmixer */ + pState->dmx_gain = params.dmx_gain; + + /* Defining appropriate windowing parameters for FFT filters to prevent aliasing */ + fft_hist_size = pState->fft_size - pState->fft_subblock_size; + + transitionStart = (int16_t) round( FFT_FILTER_WND_FLAT_REGION * fft_hist_size ); + transitionLength = (int16_t) round( FFT_FILTER_WND_TRANS_REGION * fft_hist_size ); + pState->do_corr_filter = params.do_corr_filter; + + /* Compute target levels (gains) for the coloration filters */ + ivas_reverb_calc_color_levels( output_Fs, nr_fc_fft_filter, params.nr_loops, params.pFc, params.pDsr, pHrtf_avg_pwr_response_l_const, pHrtf_avg_pwr_response_r_const, + params.pLoop_delays, params.pT60_filter_coeff, pColor_target_l, pColor_target_r ); + + /* Defining the window used for FFT filters */ + ivas_reverb_define_window_fft( pTime_window, transitionStart, transitionLength, nr_fc_fft_filter ); + + /* clear & init jot reverb (stored parameters, sample buffers etc) */ + if ( ( error = initialize_reverb( pState ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( pState->do_corr_filter ) + { + /* Computing correlation filters on the basis of target IA coherence */ + ivas_reverb_calc_correl_filters( pHrtf_inter_aural_coherence_const, pTime_window, pState->fft_size, 0.0f, pFft_wf_filter_ch0, pFft_wf_filter_ch1 ); + + /* Copying the computed FFT correlation filters to the fft_filter components */ + if ( ( error = set_correl_fft_filter( pState, 0, pFft_wf_filter_ch0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = set_correl_fft_filter( pState, 1, pFft_wf_filter_ch1 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* Computing coloration filters on the basis of target responses */ + ivas_reverb_calc_color_filters( pColor_target_l, pColor_target_r, pTime_window, pState->fft_size, 0.0f, pFft_wf_filter_ch0, pFft_wf_filter_ch1 ); + + /* Copying the computed FFT colorations filters to the fft_filter components */ + if ( ( error = set_color_fft_filter( pState, 0, pFft_wf_filter_ch0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = set_color_fft_filter( pState, 1, pFft_wf_filter_ch1 ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* init predelay */ + ivas_rev_delay_line_init( &( pState->predelay_line ), pState->pPredelay_buffer, params.pre_delay, predelay_bf_len ); + + /* initialize feedback branches */ + for ( i = 0; i < rev_sizes.max_nr_loops; i++ ) + { + ivas_rev_delay_line_init( &( pState->delay_line[i] ), pState->loop_delay_buffer[i], init_loop_delay[i], params.pLoop_delays[i] ); + ivas_reverb_iir_filt_init( &( pState->t60[i] ), IVAS_REV_MAX_IIR_FILTER_LENGTH ); + pState->mixer[0][i] = 0.0f; + pState->mixer[1][i] = 0.0f; + } + clear_buffers( pState ); + nrcoefs = params.t60_filter_order + 1; + + if ( IVAS_REV_MAX_IIR_FILTER_LENGTH < nrcoefs ) + { + return IVAS_ERR_INTERNAL; + } + else + { + for ( loop = 0; loop < params.nr_loops; loop++ ) + { + for ( i = 0; i < nrcoefs; i++ ) + { + coef_a[i] = params.pT60_filter_coeff[2 * nrcoefs * loop + i + nrcoefs]; + coef_b[i] = params.pT60_filter_coeff[2 * nrcoefs * loop + i]; + } + + if ( ( error = set_t60_filter( pState, loop, nrcoefs, coef_a, coef_b ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = set_feedback_delay( pState, loop, params.pLoop_delays[loop] ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = set_feedback_gain( pState, loop, &( params.pLoop_feedback_matrix[loop * params.nr_loops] ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + for ( channel = 0; channel < params.nr_outputs; channel++ ) + { + if ( ( error = set_mixer_level( pState, channel, &( params.pLoop_extract_matrix[channel * params.nr_loops] ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + *hReverb = pState; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_reverb_close() + * + * Deallocate Crend reverberation handle + *------------------------------------------------------------------------*/ + +void ivas_reverb_close( + REVERB_HANDLE *hReverb_in /* i/o: Reverberator handle */ +) +{ + REVERB_HANDLE hReverb; + int16_t loop; + + hReverb = *hReverb_in; + + if ( hReverb != NULL ) + { + for ( loop = 0; loop < IVAS_REV_MAX_NR_BRANCHES; loop++ ) + { + if ( hReverb->loop_delay_buffer[loop] != NULL ) + { + count_free( hReverb->loop_delay_buffer[loop] ); + hReverb->loop_delay_buffer[loop] = NULL; + } + } + + count_free( hReverb->pPredelay_buffer ); + hReverb->pPredelay_buffer = NULL; + + count_free( hReverb ); + hReverb = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * ivas_reverb_process() + * + * Process the input PCM audio into output PCM audio, applying reverb + *-----------------------------------------------------------------------------------------*/ + +ivas_error ivas_reverb_process( + REVERB_HANDLE hReverb, /* i/o: reverb state */ + const AUDIO_CONFIG transport_config, /* i : reverb. input audio configuration */ + const int16_t mix_signals, /* i : add reverb to output signal */ + float pcm_in[][L_FRAME48k], /* i : the PCM audio to apply reverb on */ + float pcm_out[][L_FRAME48k], /* o : the PCM audio with reverb applied */ + const int16_t i_ts ) +{ + float tmp0[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp1[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp2[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + ivas_error error; + + if ( ( error = downmix_input_block( hReverb, pcm_in, transport_config, tmp1, i_ts * hReverb->full_block_size ) ) != IVAS_ERR_OK ) + { + return error; + } + + predelay_block( hReverb, tmp1, tmp0 ); + + reverb_block( hReverb, tmp0, tmp1, tmp2 ); + + if ( mix_signals ) + { + mix_output_block( hReverb, tmp1, tmp2, &pcm_out[0][i_ts * hReverb->full_block_size], &pcm_out[1][i_ts * hReverb->full_block_size] ); + } + else + { + mvr2r( tmp1, &pcm_out[0][i_ts * hReverb->full_block_size], hReverb->full_block_size ); + mvr2r( tmp2, &pcm_out[1][i_ts * hReverb->full_block_size], hReverb->full_block_size ); + } + + return IVAS_ERR_OK; +} diff --git a/lib_dec/ivas_reverb_delay_line.c b/lib_dec/ivas_reverb_delay_line.c new file mode 100644 index 0000000000..9ad1a03bf9 --- /dev/null +++ b/lib_dec/ivas_reverb_delay_line.c @@ -0,0 +1,255 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_rev_delay_line_init() + * + * Initialize the delay line + *-----------------------------------------------------------------------------------------*/ + +void ivas_rev_delay_line_init( + ivas_rev_delay_line_t *pDelay, /* o : the delay line to initialize */ + float *memory_buffer, /* i : the memory buffer to use for the delay line */ + const uint16_t delay, /* i : the delay */ + const uint16_t maxdelay /* i : maximum delay to be supported */ +) +{ + pDelay->MaxDelay = maxdelay; + + if ( delay <= pDelay->MaxDelay ) + { + pDelay->Delay = delay; + } + else + { + pDelay->Delay = pDelay->MaxDelay; + } + + pDelay->pBuffer = memory_buffer; + set_f( pDelay->pBuffer, 0, pDelay->MaxDelay ); + pDelay->BufferPos = 0; + pDelay->Gain = 1.0f; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_rev_delay_line_feed_sample() + * + * Feed sample into delay line; NOTE: get a sample out of the line before feeding the next + *-----------------------------------------------------------------------------------------*/ + +void ivas_rev_delay_line_feed_sample( + ivas_rev_delay_line_t *pDelay, /* i : the delay line */ + float input /* i : the sample to feed */ +) +{ + pDelay->pBuffer[pDelay->BufferPos++] = input; + + if ( pDelay->BufferPos >= pDelay->Delay ) + { + pDelay->BufferPos = 0; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_rev_delay_line_feed_sample_blk() + * + * Feed sample block into delay line; NOTE: get samples out of the line before feeding the next block + *-----------------------------------------------------------------------------------------*/ + +void ivas_rev_delay_line_feed_sample_blk( + ivas_rev_delay_line_t *pDelay, /* i/o: the delay line */ + const uint16_t blk_size, /* i : number of samples in the input data block */ + float *input /* i : the samples to feed */ +) +{ + float *pDst, *pSrc; + uint16_t i, pos; + + pos = (uint16_t) pDelay->BufferPos; + + if ( pos + blk_size > (uint16_t) pDelay->Delay ) /* splitting block in 2 if it exceeds buffer end limit */ + { + uint16_t blk_size_1; /* 1st block up to the end of the buffer */ + uint16_t blk_size_2; /* 2nd block at the beginning of the buffer */ + + blk_size_1 = (uint16_t) pDelay->Delay - pos; + blk_size_2 = blk_size - blk_size_1; + pDst = &pDelay->pBuffer[pos]; + for ( i = 0; i < blk_size_1; i++ ) + { + pDst[i] = input[i]; + } + pDst = &pDelay->pBuffer[0]; + pSrc = &input[blk_size_1]; + for ( i = 0; i < blk_size_2; i++ ) + { + pDst[i] = pSrc[i]; + } + pos = blk_size_2; + } + else /* copy only 1 data block directly if it fits in the buffer */ + { + pDst = &pDelay->pBuffer[pos]; + for ( i = 0; i < blk_size; i++ ) + { + pDst[i] = input[i]; + } + pos += blk_size; + } + pDelay->BufferPos = pos; + + if ( pDelay->BufferPos >= pDelay->Delay ) + { + pDelay->BufferPos = 0; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_rev_delay_line_get_sample() + * + * Get sample out of delay line, amplified by set gain + * NOTE: get a sample out of the line before feeding the next + *-----------------------------------------------------------------------------------------*/ + +/* !r: sample gotten out of delay line, and amplified by set gain */ +float ivas_rev_delay_line_get_sample( + ivas_rev_delay_line_t *pDelay /* i/o: the delay line */ +) +{ + if ( pDelay->Gain == 1.0f ) + { + + return pDelay->pBuffer[pDelay->BufferPos]; + } + else + { + + return pDelay->Gain * pDelay->pBuffer[pDelay->BufferPos]; + } +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_rev_delay_line_get_sample_blk() + * + * Get a block samples out of delay line, amplified by set gain + *-----------------------------------------------------------------------------------------*/ + +void ivas_rev_delay_line_get_sample_blk( + ivas_rev_delay_line_t *pDelay, /* i : the delay line */ + const uint16_t blk_size, /* i : number of samples in the data block */ + float *output /* i/o: amples gotten out of delay line, and amplified by set gainin */ +) +{ + float *pDst, *pSrc; + uint16_t i, pos; + float gain; + + pos = (uint16_t) pDelay->BufferPos; + gain = pDelay->Gain; + + if ( pos + blk_size > (uint16_t) pDelay->Delay ) /* splitting block in 2 if it exceeds buffer end limit */ + { + uint16_t blk_size_1; /* 1st block up to the end of the buffer */ + uint16_t blk_size_2; /* 2nd block at the beginning of the buffer */ + + blk_size_1 = (uint16_t) pDelay->Delay - pos; + blk_size_2 = blk_size - blk_size_1; + pSrc = &pDelay->pBuffer[pos]; + if ( gain == 1.0f ) + { + for ( i = 0; i < blk_size_1; i++ ) + { + output[i] = pSrc[i]; + } + pSrc = &pDelay->pBuffer[0]; + pDst = &output[blk_size_1]; + for ( i = 0; i < blk_size_2; i++ ) + { + pDst[i] = pSrc[i]; + } + } + else + { + for ( i = 0; i < blk_size_1; i++ ) + { + output[i] = gain * pSrc[i]; + } + pSrc = &pDelay->pBuffer[0]; + pDst = &output[blk_size_1]; + for ( i = 0; i < blk_size_2; i++ ) + { + pDst[i] = gain * pSrc[i]; + } + } + } + else /* copy only 1 data block directly if it fits in the buffer */ + { + pSrc = &pDelay->pBuffer[pos]; + + if ( gain == 1.0f ) + { + for ( i = 0; i < blk_size; i++ ) + { + output[i] = pSrc[i]; + } + } + else + { + for ( i = 0; i < blk_size; i++ ) + { + output[i] = gain * pSrc[i]; + } + } + } + + return; +} diff --git a/lib_dec/ivas_reverb_fft_filter.c b/lib_dec/ivas_reverb_fft_filter.c new file mode 100644 index 0000000000..7a304aaf7c --- /dev/null +++ b/lib_dec/ivas_reverb_fft_filter.c @@ -0,0 +1,420 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Static functions declarations + *------------------------------------------------------------------------------------------*/ + +static void fft_wrapper_2ch( float *buffer_L, float *buffer_R, const int16_t fft_size ); +static void ifft_wrapper_2ch( float *buffer_L, float *buffer_R, const int16_t fft_size ); + + +/*-----------------------------------------------------------------------------------------* + * Function int_log2() + * + * takes integer log2 of power_of_2 input value. e.g. int_log2(1024) = 10 + * powerOf2 must be a power of two between 2^0 and 2^15 + * NOT valid for integers thar are NOT a power of 2 + *-----------------------------------------------------------------------------------------*/ + +/* !r: integer log2 */ +uint16_t int_log2( + uint32_t powerOf2 ) +{ + int16_t l2 = 15; + + if ( powerOf2 & 0x00FF ) + { + l2 -= 8; + } + + if ( powerOf2 & 0x0F0F ) + { + l2 -= 4; + } + + if ( powerOf2 & 0x3333 ) + { + l2 -= 2; + } + + if ( powerOf2 & 0x5555 ) + { + l2 -= 1; + } + + return l2; +} + + +/*-----------------------------------------------------------------------------------------* + * Function fft_wrapper_2ch() + * + * Wrapper uses complex FFT to perform real-input FFT on 2 channels simultaneously + *-----------------------------------------------------------------------------------------*/ + +static void fft_wrapper_2ch( + float *buffer_L, + float *buffer_R, + const int16_t fft_size ) +{ + const int16_t half_sz = fft_size >> 1; + int16_t k, mirror_k; + float left_re, left_im, right_re, right_im; + + DoRTFTn( buffer_L, buffer_R, fft_size ); + + /* separating left and right channel spectra */ + for ( k = 1; k < half_sz; k++ ) + { + mirror_k = fft_size - k; + + left_re = 0.5f * ( buffer_L[k] + buffer_L[mirror_k] ); + left_im = 0.5f * ( buffer_R[k] - buffer_R[mirror_k] ); + + right_re = 0.5f * ( buffer_R[k] + buffer_R[mirror_k] ); + right_im = -0.5f * ( buffer_L[k] - buffer_L[mirror_k] ); + + buffer_L[k] = left_re; + buffer_R[k] = right_re; + buffer_L[mirror_k] = left_im; + buffer_R[mirror_k] = right_im; + } + + return; +} + +/*-----------------------------------------------------------------------------------------* + * Function ifft_wrapper_2ch() + * + * Wrapper uses complex FFT to perform real-output IFFT on 2 channels simultaneously + *-----------------------------------------------------------------------------------------*/ + +static void ifft_wrapper_2ch( + float *buffer_L, + float *buffer_R, + const int16_t fft_size ) +{ + float buffer_L_re, buffer_L_im, buffer_R_re, buffer_R_im; + const int16_t half_sz = fft_size >> 1; + const float inv_sz = 1.0f / (float) fft_size; + int16_t k, mirror_k; + + /* Re-arranging and adding spectra in order to obtain L/R signals as re/im ifft outputs */ + for ( k = 1; k < half_sz; k++ ) + { + mirror_k = fft_size - k; + + buffer_L_re = buffer_L[k]; + buffer_L_im = buffer_L[mirror_k]; + buffer_R_re = buffer_R[k]; + buffer_R_im = buffer_R[mirror_k]; + + buffer_L[k] = buffer_L_re + buffer_R_im; + buffer_L[mirror_k] = buffer_L_re - buffer_R_im; + buffer_R[k] = buffer_R_re - buffer_L_im; + buffer_R[mirror_k] = buffer_R_re + buffer_L_im; + } + + DoRTFTn( buffer_L, buffer_R, fft_size ); + + /* Apply (1/length) scaling for inverse FFT */ + for ( k = 0; k < fft_size; k++ ) + { + buffer_L[k] *= inv_sz; + buffer_R[k] *= inv_sz; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_t2f_f2t_init() + * + * Initializes t2t_f2t struct and clears history + *-----------------------------------------------------------------------------------------*/ + +int16_t ivas_reverb_t2f_f2t_init( + ivas_reverb_t2f_f2t_t *t2f_f2t, + const int16_t fft_size, + const int16_t block_size ) +{ + if ( fft_size > RV_FILTER_MAX_FFT_SIZE ) + { + return 1; + } + + if ( ( block_size > fft_size ) || ( fft_size - block_size > RV_FILTER_MAX_HISTORY ) ) + { + return 2; + } + + t2f_f2t->log2_fft_size = int_log2( fft_size ); + + if ( ( 1 << t2f_f2t->log2_fft_size ) != fft_size ) + { + return 3; /* fft_size not a power of 2 */ + } + t2f_f2t->fft_size = fft_size; + t2f_f2t->block_size = block_size; + t2f_f2t->hist_size = t2f_f2t->fft_size - t2f_f2t->block_size; + + if ( t2f_f2t->hist_size > RV_FILTER_MAX_HISTORY ) + { + t2f_f2t->hist_size = RV_FILTER_MAX_HISTORY; + } + + ivas_reverb_t2f_f2t_ClearHistory( t2f_f2t ); + + return 0; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_t2f_f2t_ClearHistory() + * + * Clears the history for the overlap length (fft_size - block_size) + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_t2f_f2t_ClearHistory( + ivas_reverb_t2f_f2t_t *t2f_f2t ) +{ + int16_t i; + float *hist_L = t2f_f2t->fft_history_L; + float *hist_R = t2f_f2t->fft_history_R; + + for ( i = 0; i < t2f_f2t->hist_size; i++ ) + { + hist_L[i] = 0.0f; + hist_R[i] = 0.0f; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_t2f_f2t_in() + * + * Input of block data, history is copied, fft is taken for both L/R channels + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_t2f_f2t_in( + ivas_reverb_t2f_f2t_t *t2f_f2t, + float *input_L, + float *input_R, + float *buffer_L, + float *buffer_R ) +{ + int16_t i; + int16_t hlen = t2f_f2t->hist_size; + int16_t bsiz = t2f_f2t->block_size; + float *hist_L = t2f_f2t->fft_history_L; + float *hist_R = t2f_f2t->fft_history_R; + float *pL, *pR; + + /* copy history to buffer */ + for ( i = 0; i < hlen; i++ ) + { + buffer_L[i] = hist_L[i]; + buffer_R[i] = hist_R[i]; + } + + /* copy input to buffer */ + pL = &buffer_L[hlen]; + pR = &buffer_R[hlen]; + for ( i = 0; i < bsiz; i++ ) + { + pL[i] = input_L[i]; + pR[i] = input_R[i]; + } + + /* copy buffer to history */ + pL = &buffer_L[bsiz]; + pR = &buffer_R[bsiz]; + for ( i = 0; i < hlen; i++ ) + { + hist_L[i] = pL[i]; + hist_R[i] = pR[i]; + } + + /* do FFT */ + fft_wrapper_2ch( buffer_L, buffer_R, t2f_f2t->fft_size ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_t2f_f2t_out() + * + * Input of frequency domain data, IFFT, copied to output (both L & R channels) + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_t2f_f2t_out( + ivas_reverb_t2f_f2t_t *t2f_f2t, + float *buffer_L, + float *buffer_R, + float *output_L, + float *output_R ) +{ + int16_t i; + float *pL = &buffer_L[t2f_f2t->hist_size]; + float *pR = &buffer_R[t2f_f2t->hist_size]; + + ifft_wrapper_2ch( buffer_L, buffer_R, t2f_f2t->fft_size ); + + for ( i = 0; i < t2f_f2t->block_size; i++ ) + { + output_L[i] = pL[i]; + output_R[i] = pR[i]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_fft_filter_init() + * + * Initializes filter struct + *-----------------------------------------------------------------------------------------*/ + +int16_t ivas_reverb_fft_filter_init( + ivas_reverb_fft_filter_t *fft_filter, + const int16_t fft_size ) +{ + if ( fft_size > RV_FILTER_MAX_FFT_SIZE ) + { + return 1; + } + + fft_filter->fft_size = fft_size; + + return 0; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_fft_filter_ComplexMul() + * + * Buffer is complex multiplied with fft_filter internal coefficients + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_fft_filter_ComplexMul( + ivas_reverb_fft_filter_t *fft_filter, + float *buffer ) +{ + int16_t f_spec, h, i, j; + float *spec; + float t; + + f_spec = fft_filter->fft_size; + h = f_spec >> 1; + spec = fft_filter->fft_spectrum; + + buffer[0] *= spec[0]; /* real multiply f0 DC */ + buffer[h] *= spec[h]; /* real multiply f_spec Nyquist */ + j = f_spec - 1; + for ( i = 1; i < h; i++ ) /*actual complex multiply in loop */ + { + t = buffer[i]; + buffer[i] = t * spec[i] - buffer[j] * spec[j]; + buffer[j] = t * spec[j] + buffer[j] * spec[i]; + j--; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR() + * + * Convert the FFTWF formatted spectrum to fft_real formatted spectrum + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( + rv_fftwf_type_complex *spectrum, + float *fft_real, + const int16_t fft_size ) +{ + int16_t i, h; + + h = fft_size >> 1; + fft_real[0] = spectrum[0][0]; + fft_real[h] = spectrum[h][0]; + for ( i = 1; i < h; i++ ) + { + fft_real[i] = spectrum[i][0]; + fft_real[fft_size - i] = spectrum[i][1]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_fft_filter_CrossMix() + * + * buffer0 and 1 are cross mixed + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_fft_filter_CrossMix( + float *buffer0, + float *buffer1, + const int16_t fft_size ) +{ + float t; + int16_t i; + + for ( i = 0; i < fft_size; i++ ) + { + t = buffer0[i]; + buffer0[i] = t + buffer1[i]; + buffer1[i] = t - buffer1[i]; + } + + return; +} diff --git a/lib_dec/ivas_reverb_filter_design.c b/lib_dec/ivas_reverb_filter_design.c new file mode 100644 index 0000000000..a101a2308b --- /dev/null +++ b/lib_dec/ivas_reverb_filter_design.c @@ -0,0 +1,783 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include +#include +#include "prot.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define STEP_LIMIT_PIVOT_FREQ ( 1000.0f ) /* Pivot (initial reference) frequency for response gradient limit */ +#define RESPONSE_STEP_LIMIT_LF ( 4.0f ) /* Maximum step in dB per bin at low frequencies (< pivot frequency) */ +#define RESPONSE_STEP_LIMIT_HF ( 1.5f ) /* Maximum step in dB per bin at high frequencies (> pivot frequency) */ +#define EPS ( 1e-30f ) + + +/*------------------------------------------------------------------------------------------* + * Function definitions + *------------------------------------------------------------------------------------------*/ + +/* getMinPhase computes the minimum phase spectrum that can be derived from the + amplitude spectrum of the input. */ +static void calc_min_phase( + rv_fftwf_type_complex *pSpectrum, + const int16_t fft_size, + float *pMinPhase ) +{ + int16_t idx; + const int16_t half_fft_size = fft_size >> 1; + const int16_t log2_fft_size = int_log2( fft_size ); + const int16_t spectrum_size = half_fft_size + 1; + const int16_t cepstrum_smoothing_extent = fft_size >> 3; + const float scale_factor = 1.0f / (float) fft_size; + + float pCepstrum[RV_FILTER_MAX_FFT_SIZE]; + float pFolded_cepstrum_re[RV_FILTER_MAX_FFT_SIZE]; + float pFolded_cepstrum_im[RV_FILTER_MAX_FFT_SIZE]; + float pFolded_cepstrum_smoothing_win[RV_FILTER_MAX_FFT_SIZE]; + float angle_increment; + float initial_angle; + + + /* Prepare the smoothing window. Portion of the pCepstrum that will be smoothed out by a window to prevent aliasing. */ + + /* The first portion of the pCepstrum is kept unchanged */ + for ( idx = 0; idx < half_fft_size - cepstrum_smoothing_extent; idx++ ) + { + pFolded_cepstrum_smoothing_win[idx] = 1.0f; + } + + /* Adding Hann half-window for smooth transition */ + angle_increment = EVS_PI / (float) ( 2 * cepstrum_smoothing_extent - 1 ); + + /* Initial angle set to match Hann window alignment in Matlab */ + initial_angle = 0.5f * ( EVS_PI + angle_increment ); + + for ( idx = 0; idx < cepstrum_smoothing_extent; idx++ ) + { + const float sine_value = sinf( initial_angle + angle_increment * idx ); + + pFolded_cepstrum_smoothing_win[idx + half_fft_size - cepstrum_smoothing_extent] = sine_value * sine_value; + } + + /* Padding the rest with zeros */ + for ( idx = half_fft_size; idx < fft_size; idx++ ) + { + pFolded_cepstrum_smoothing_win[idx] = 0.0f; + } + + /* Compute the log amplitude spectrum */ + for ( idx = 0; idx < spectrum_size; idx++ ) + { + pCepstrum[idx] = 0.5f * logf( ( pSpectrum[idx][0] * pSpectrum[idx][0] ) + ( pSpectrum[idx][1] * pSpectrum[idx][1] ) + EPS ); + } + + /* Extending one-sided spectrum to double-sided one */ + for ( idx = spectrum_size; idx < fft_size; idx++ ) + { + pCepstrum[idx] = pCepstrum[fft_size - idx]; + } + + /* Compute the real pCepstrum of the log amplitude spectrum */ + fft_rel( pCepstrum, fft_size, log2_fft_size ); + /* Note: using real-input fft rather than cmplx ifft to ensure support for 1024 size */ + /* Extra scaling is though required on the real/img parts, and img part is later inverted */ + + for ( idx = 0; idx < fft_size; idx++ ) + { + pCepstrum[idx] *= scale_factor; + } + + /* Fold the pCepstrum to ensure that zeros outside the unit circle move inside it, making it minimum phase. */ + pFolded_cepstrum_re[0] = pCepstrum[0]; + pFolded_cepstrum_im[0] = 0.0f; + + for ( idx = 1; idx < half_fft_size; idx++ ) + { + pFolded_cepstrum_re[idx] = 2.0f * pCepstrum[idx]; + pFolded_cepstrum_im[idx] = -2.0f * pCepstrum[fft_size - idx]; + /* Note: sign inverted because of fft rather than ifft used before */ + } + pFolded_cepstrum_re[half_fft_size] = pCepstrum[half_fft_size]; + pFolded_cepstrum_im[half_fft_size] = 0.0f; + + for ( idx = spectrum_size; idx < fft_size; idx++ ) + { + pFolded_cepstrum_re[idx] = 0.0f; + pFolded_cepstrum_im[idx] = 0.0f; + } + + /* Smoothing out the folded pCepstrum, to remove discontinuity at Ns, + hoping to significantly reduce the secondary response in the minimum-phase IR */ + for ( idx = 0; idx < fft_size; idx++ ) + { + pFolded_cepstrum_re[idx] *= pFolded_cepstrum_smoothing_win[idx]; + pFolded_cepstrum_im[idx] *= pFolded_cepstrum_smoothing_win[idx]; + } + + /* Convert back and isolate the phase. */ + if ( fft_size <= 512 ) /* for size <= 512 using complex-value FFT (more effecient, but available only up to 512 size) */ + { + DoRTFTn( pFolded_cepstrum_re, pFolded_cepstrum_im, fft_size ); + + /* Copying the img part into the output */ + for ( idx = 1; idx < half_fft_size; idx++ ) + { + pMinPhase[idx] = pFolded_cepstrum_im[idx]; + } + } + else /* for fft_size > 512 using real-values FFT twice (for real + imag parts) */ + { + /* Real part */ + fft_rel( pFolded_cepstrum_re, fft_size, log2_fft_size ); + /* Imag part */ + fft_rel( pFolded_cepstrum_im, fft_size, log2_fft_size ); + + /* Copying the img part into the output */ + for ( idx = 1; idx < half_fft_size; idx++ ) + { + pMinPhase[idx] = pFolded_cepstrum_re[fft_size - idx] + pFolded_cepstrum_im[idx]; + } + } + pMinPhase[0] = 0.0f; + pMinPhase[half_fft_size] = 0.0f; + + return; +} + + +/* Converts FFT-domain pFilter pH_flt into a minimum-phase pFilter. +This function expects only the positive frequency bins up to Nyquist/2 */ +static void calc_min_phase_filter( + rv_fftwf_type_complex *pH_flt, + const int16_t fft_size, + float delay ) +{ + const int16_t spectrum_size = ( fft_size >> 1 ) + 1; + int16_t idx; + float phase_increment; + float pMin_phase[RV_FILTER_MAX_FFT_SIZE]; + + phase_increment = -PI2 * delay / (float) fft_size; + + calc_min_phase( pH_flt, fft_size, pMin_phase ); + + for ( idx = 0; idx < spectrum_size; idx++ ) + { + /* Cancel out initial phase by computing amplitude */ + /* Note: slightly different (but mathematically equivalent) approach used for better efficiency */ + const float current_ampl = sqrtf( pH_flt[idx][0] * pH_flt[idx][0] + pH_flt[idx][1] * pH_flt[idx][1] ); + + /* Using the phase computed by calc_min_phase() + additional delay */ + const float current_phase = pMin_phase[idx] + phase_increment * idx; + + /* Apply the computed phase */ + pH_flt[idx][0] = current_ampl * cosf( current_phase ); + pH_flt[idx][1] = current_ampl * sinf( current_phase ); + } + + return; +} + + +/* Applies the smoothing (anti-aliasing) window in the time domain */ +static void apply_window_fft( + rv_fftwf_type_complex *pH_flt, + const float *pWindow, + const int16_t fft_size ) +{ + int16_t idx; + float pFilter[RV_FILTER_MAX_FFT_SIZE]; + const int16_t half_fft_size = fft_size >> 1; + const int16_t log2_fft_size = int_log2( fft_size ); + + /* Converting pFilter to ifft function input format */ + /* Real parts */ + for ( idx = 0; idx <= half_fft_size; idx++ ) + { + pFilter[idx] = pH_flt[idx][0]; + } + /* Img parts */ + for ( idx = 1; idx < half_fft_size; idx++ ) + { + pFilter[fft_size - idx] = pH_flt[idx][1]; + } + + /* Do inverse fft to go to the time domain */ + ifft_rel( pFilter, fft_size, log2_fft_size ); + + /* Apply the window in the time domain */ + for ( idx = 0; idx < fft_size; idx++ ) + { + pFilter[idx] *= pWindow[idx]; + } + + /* Convert back to the frequency domain */ + fft_rel( pFilter, fft_size, log2_fft_size ); + + /* Copy data to the output with format conversion */ + pH_flt[0][0] = pFilter[0]; + pH_flt[half_fft_size][0] = pFilter[half_fft_size]; + pH_flt[0][1] = 0.0f; + pH_flt[half_fft_size][1] = 0.0f; + for ( idx = 1; idx < half_fft_size; idx++ ) + { + pH_flt[idx][0] = pFilter[idx]; + pH_flt[idx][1] = pFilter[fft_size - idx]; + } + + return; +} + + +/* Limits the gain vs frequency slope to T db per bin */ +static void response_step_limit( + float *X, + const int16_t dim_x, + const float step_limit_lf_dB, + const float step_limit_hf_dB, + const int16_t pivot_bin_idx ) +{ + int16_t i; + const float positive_step_limit_lf = powf( 10.0f, 0.05f * step_limit_lf_dB ); + const float negative_step_limit_lf = 1.0f / positive_step_limit_lf; + const float positive_step_limit_hf = powf( 10.0f, 0.05f * step_limit_hf_dB ); + const float negative_step_limit_hf = 1.0f / positive_step_limit_hf; + + /* Go up from pivot frequency and limit the slope to the maximum given by T. */ + for ( i = pivot_bin_idx + 1; i < dim_x; i++ ) + { + float desiredChange = X[i] / X[i - 1]; + float change = fabsf( desiredChange ); + if ( desiredChange >= 1 ) + { + if ( change > positive_step_limit_hf ) + { + change = positive_step_limit_hf; + } + } + else + { + if ( change < negative_step_limit_hf ) + { + change = negative_step_limit_hf; + } + } + X[i] = X[i - 1] * change; + } + + /* Go down from pivot frequency and limit the slope to the maximum given by T. */ + for ( i = pivot_bin_idx - 1; i >= 0; i-- ) + { + float desiredChange = X[i] / X[i + 1]; + float change = fabsf( desiredChange ); + + if ( desiredChange >= 1 ) + { + if ( change > positive_step_limit_lf ) + { + change = positive_step_limit_lf; + } + } + else + { + if ( change < negative_step_limit_lf ) + { + change = negative_step_limit_lf; + } + } + X[i] = X[i + 1] * change; + } + + return; +} + + +/* This function computes a smoothing window used later to avoid aliasing in FFT filters */ +void ivas_reverb_define_window_fft( + float *pWindow, + const int16_t transitionStart, + const int16_t transitionLength, + const int16_t spectrumLength ) +{ + int16_t idx, fftLength; + float angle_increment; + float initial_angle; + + fftLength = ( spectrumLength - 1 ) * 2; + + /* The first portion of the sequence is kept unchanged, window == 1 */ + for ( idx = 0; idx < transitionStart; idx++ ) + { + pWindow[idx] = 1.0f; + } + + /* Adding Hann half-window for smooth transition */ + angle_increment = EVS_PI / ( 2.0f * transitionLength - 1 ); + + /* Initial angle set to match Hann window alignment in Matlab */ + initial_angle = 0.5f * ( EVS_PI + angle_increment ); + for ( idx = 0; idx < transitionLength; idx++ ) + { + const float sine_value = sinf( initial_angle + angle_increment * idx ); + + pWindow[idx + transitionStart] = sine_value * sine_value; + } + + /* Padding the rest with zeros */ + for ( idx = transitionStart + transitionLength; idx < fftLength; idx++ ) + { + pWindow[idx] = 0.0f; + } + + return; +} + + +/* Computes colorations filters for the target frequency responses */ +int16_t ivas_reverb_calc_color_filters( + const float *pTargetL, + const float *pTargetR, + const float *pWindow, + const int16_t fft_size, + const float delay, + rv_fftwf_type_complex *pBeqL, + rv_fftwf_type_complex *pBeqR ) +{ + int16_t idx, half_fft_size; + + half_fft_size = ( fft_size >> 1 ); + + for ( idx = 0; idx <= half_fft_size; idx++ ) + { + pBeqL[idx][0] = pTargetL[idx]; + pBeqL[idx][1] = 0.0f; + pBeqR[idx][0] = pTargetR[idx]; + pBeqR[idx][1] = 0.0f; + } + + /* Make the response minimum phase. Does make the spectrum complex, but + will avoid aliasing when applied in the FFT domain. */ + calc_min_phase_filter( pBeqL, fft_size, delay ); + calc_min_phase_filter( pBeqR, fft_size, delay ); + apply_window_fft( pBeqL, pWindow, fft_size ); + apply_window_fft( pBeqR, pWindow, fft_size ); + + for ( idx = 0; idx <= half_fft_size; idx++ ) + { + if ( ( pTargetL[idx] < 0.0f ) || ( pTargetR[idx] < 0.0f ) ) /* Shouldn't have negative gains. */ + { + return 1; + } + } + + return 0; +} + + +/* Computes correlation filters for the target frequency response */ +int16_t ivas_reverb_calc_correl_filters( + const float *pTargetICC, + const float *pWindow, + const int16_t fft_size, + const float delay, + rv_fftwf_type_complex *pU, + rv_fftwf_type_complex *pV ) +{ + int16_t idx, half_fft_size; + + half_fft_size = fft_size >> 1; + + for ( idx = 0; idx <= half_fft_size; idx++ ) + { + if ( ( 1.0f + pTargetICC[idx] < 0.0f ) || ( 1.0f - pTargetICC[idx] < 0.0f ) ) /* Shouldn't have negative gains. */ + { + return 1; + } + } + + for ( idx = 0; idx <= half_fft_size; idx++ ) + { + pU[idx][0] = sqrtf( ( 1.0f + pTargetICC[idx] ) * 0.5f ); + pU[idx][1] = 0.0f; + pV[idx][0] = sqrtf( ( 1.0f - pTargetICC[idx] ) * 0.5f ); + pV[idx][1] = 0.0f; + } + + /* Make the response minimum phase. Does make the spectrum complex, but + will avoid aliasing when applied in the FFT domain. */ + calc_min_phase_filter( pU, fft_size, delay ); + calc_min_phase_filter( pV, fft_size, delay ); + apply_window_fft( pU, pWindow, fft_size ); + apply_window_fft( pV, pWindow, fft_size ); + + return 0; +} + + +/* Computes the target levels (gains) for the coloration filters */ +void ivas_reverb_calc_color_levels( + const int32_t output_Fs, + const int16_t freq_count, + const int16_t loop_count, + const float *pFc, + const float *pAcoustic_dsr, + const float *pHrtf_avg_pwr_L, + const float *pHrtf_avg_pwr_R, + const int16_t *pLoop_delays, + const float *pT60_filter_coeff, + float *pTarget_color_L, + float *pTarget_color_R ) +{ + int16_t i, freq_idx, idx_pivot, nrcoefs, loop_idx; + float t60[RV_LENGTH_NR_FC]; + + /* Pre-computing inverse values for optimisation (to avoid divisions in inner loops) */ + const float fs_inverted = 1.0f / (float) output_Fs; + const float loop_count_inverted = 1.0f / (float) loop_count; + + const float log__0_001 = logf( 0.001f ); + /* Pre-computed for better efficiency */ + + const float revEnergyFactor = 1.0f; + /* revEnergyFactor == 1 for IVAS, as the pDsr values are already scaled previously for predelay delta */ + + /* Computing minimum delays in a simpler way, as they are already provided in descending order */ + const int16_t minDelay = pLoop_delays[loop_count - 1]; + const int16_t minDelayDiff = pLoop_delays[loop_count - 2] - pLoop_delays[loop_count - 1]; + const float freq_step = 0.5f * output_Fs / (float) ( freq_count - 1 ); + + for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) + { + t60[freq_idx] = 0.0f; + } + + for ( loop_idx = 0; loop_idx < loop_count; loop_idx++ ) + { + float coefA[2]; + float coefB[2]; + + nrcoefs = 2; + /* for pFilter order == 1 */ + + /* Obtaining T60 filters coefficients for the current loop */ + for ( i = 0; i < nrcoefs; i++ ) + { + coefA[i] = pT60_filter_coeff[2 * nrcoefs * loop_idx + i + nrcoefs]; + coefB[i] = pT60_filter_coeff[2 * nrcoefs * loop_idx + i]; + } + + /* Loop over frequencies */ + for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) + { + /* Compute T60 pFilter gain at the given frequency */ + float cos_w; + float H_filter; + float T60_est; + + cos_w = cosf( PI2 * pFc[freq_idx] * fs_inverted ); + H_filter = coefB[0] * coefB[0] + coefB[1] * coefB[1] + 2.0f * coefB[0] * coefB[1] * cos_w; + H_filter /= 1.0f + coefA[1] * coefA[1] + 2.0f * coefA[1] * cos_w; + H_filter = sqrtf( H_filter ); + + /* Compute the T60 value on the basis of the pFilter gain */ + T60_est = -3.0f * pLoop_delays[loop_idx] / ( log10f( H_filter ) * output_Fs ); + + t60[freq_idx] += T60_est; + } + } + + /* Dividing by the number of loops to compute the average T60 estimate */ + for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) + { + t60[freq_idx] *= loop_count_inverted; + } + + /* Compute target gains on the basis of the estimated T60 values */ + for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) + { + const float A0_square_est = powf( 10.0f, -6.0f * minDelay / ( t60[freq_idx] * output_Fs ) ); + const float alpha = -log__0_001 / t60[freq_idx]; + const float revPredNormEnergy = ( A0_square_est / ( 2.0f * alpha ) ) * output_Fs / ( 0.8776f * minDelayDiff + 26.7741f ); + + pTarget_color_L[freq_idx] = sqrtf( pAcoustic_dsr[freq_idx] * revEnergyFactor * pHrtf_avg_pwr_L[freq_idx] ) / sqrtf( revPredNormEnergy ); + + pTarget_color_R[freq_idx] = sqrtf( pAcoustic_dsr[freq_idx] * revEnergyFactor * pHrtf_avg_pwr_R[freq_idx] ) / sqrtf( revPredNormEnergy ); + } + + /* Limiting the frequency response gradients + Find frequency band closest to chosen pivot frequency. */ + idx_pivot = (int16_t) round( STEP_LIMIT_PIVOT_FREQ / freq_step ); + + /* Perform step limiting */ + response_step_limit( pTarget_color_L, freq_count, RESPONSE_STEP_LIMIT_LF, RESPONSE_STEP_LIMIT_HF, idx_pivot ); + response_step_limit( pTarget_color_R, freq_count, RESPONSE_STEP_LIMIT_LF, RESPONSE_STEP_LIMIT_HF, idx_pivot ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function description : Interpolates data from the input T60 and DSR tables + * to the FFT pFilter uniform grid + * Note: the fc frequencies both for the input and the output must be in the ascending order + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_interpolate_acoustic_data( + const int16_t input_table_size, + const float *pInput_fc, + const float *pInput_t60, + const float *pInput_dsr, + const int16_t output_table_size, + const float *pOutput_fc, + float *pOutput_t60, + float *pOutput_dsr ) +{ + int16_t input_idx, output_idx; + float rel_offset; + + input_idx = 0; + + for ( output_idx = 0; output_idx < output_table_size; output_idx++ ) + { + /* if the bin frequency is lower than the 1st frequency point in the input table, take this 1st point */ + if ( pOutput_fc[output_idx] < pInput_fc[0] ) + { + input_idx = 0; + rel_offset = 0.0f; + } + else + { + /* if the bin frequency is higher than the last frequency point in the input table, take this last point */ + if ( pOutput_fc[output_idx] > pInput_fc[input_table_size - 1] ) + { + input_idx = input_table_size - 2; + rel_offset = 1.0f; + } + /* otherwise use linear interpolation between 2 consecutive points in the input table */ + else + { + while ( pOutput_fc[output_idx] > pInput_fc[input_idx + 1] ) + { + input_idx++; + } + rel_offset = ( pOutput_fc[output_idx] - pInput_fc[input_idx] ) / ( pInput_fc[input_idx + 1] - pInput_fc[input_idx] ); + } + } + + pOutput_t60[output_idx] = pInput_t60[input_idx] + rel_offset * ( pInput_t60[input_idx + 1] - pInput_t60[input_idx] ); + + pOutput_dsr[output_idx] = pInput_dsr[input_idx] + rel_offset * ( pInput_dsr[input_idx + 1] - pInput_dsr[input_idx] ); + } + + return; +} + + +/* Function analyses the HRTF set and computes avarage left/right power spectrum + and frequency-dependent IA coherence. Expects frequency-domain HRTF input */ +void ivas_reverb_get_hrtf_set_properties( + float **ppHrtf_set_L_re, + float **ppHrtf_set_L_im, + float **ppHrtf_set_R_re, + float **ppHrtf_set_R_im, + const int16_t hrtf_count, + const int16_t in_freq_count, + const int16_t out_freq_count, + float *pOut_avg_pwr_L, + float *pOut_avg_pwr_R, + float *out_i_a_coherence ) +{ + const float foa_sum_coeffs[4][3] = { + { 1.0, 1.0f, 0.0f }, + { 1.0, -1.0f, 0.0f }, + { 1.0, 0.0f, 1.0f }, + { 1.0, 0.0f, -1.0f } + }; + const float inp_freq_step = 0.5f / (float) in_freq_count; + const float inp_freq_offset = 0.5f * inp_freq_step; + const float out_freq_step = 0.5f / (float) ( out_freq_count - 1 ); + + int16_t used_hrtf_count, base_idx, freq_idx, hrtf_idx, out_bin_idx, ch_index, is_ambisonics; + float hrtf_count_inverted, relative_pos, weight_1st; + float avg_pwr_left[2]; + float avg_pwr_right[2]; + float IA_coherence[2]; + + if ( hrtf_count == 4 || hrtf_count == 9 || hrtf_count == 16 ) + { + is_ambisonics = 1; + used_hrtf_count = 4; /* Using only 1st order HRTFs */ + } + else + { + is_ambisonics = 0; + used_hrtf_count = hrtf_count; + } + + /* Interpolation (linear to a new grid) */ + base_idx = 0; + relative_pos = 0.0f; + hrtf_count_inverted = 1.0f / (float) used_hrtf_count; + + /* Loop over output frequency bins */ + for ( out_bin_idx = 0; out_bin_idx < out_freq_count; out_bin_idx++ ) + { + /* Computing normalized frequency for the current bin (1.0 corresponds to sampling rate) */ + const float norm_freq = out_freq_step * out_bin_idx; + + /* Computing the bin index in the source data */ + const float tbl_index = ( norm_freq - inp_freq_offset ) / inp_freq_step; + + if ( tbl_index <= 0.0f ) /* In case of extrapolation (below 1st bin), choose nearest */ + { + base_idx = 0; + relative_pos = 0.0f; + } + else + { + base_idx = (int16_t) floor( tbl_index ); + relative_pos = tbl_index - base_idx; + if ( base_idx > ( in_freq_count - 2 ) ) /* In case of extrapolation (above last bin), choose nearest */ + { + base_idx = in_freq_count - 2; + relative_pos = 1.0f; + } + } + + /* Computing 2 bins data for later interpolation */ + + /* Zeroing before accumalation for average value computing */ + avg_pwr_left[0] = 0.0f; + avg_pwr_left[1] = 0.0f; + avg_pwr_right[0] = 0.0f; + avg_pwr_right[1] = 0.0f; + IA_coherence[0] = 0.0f; + IA_coherence[1] = 0.0f; + + /* Get power spectra and cross - correlation between left and right hrtfs */ + /* Loop over all the HRTFs available */ + for ( hrtf_idx = 0; hrtf_idx < used_hrtf_count; hrtf_idx++ ) + { + /* Pointers to current HRTF data */ + float *current_base_L_ptr_re, *current_base_L_ptr_im, *current_base_R_ptr_re, *current_base_R_ptr_im; + + /* combined HRTF data used for FOA */ + float combined_channels_L_re[2]; + float combined_channels_L_im[2]; + float combined_channels_R_re[2]; + float combined_channels_R_im[2]; + + /* Process the frequency bins containing both real and img parts */ + /* In case of 5.1 or 7.1 formats, use the available HRTF paires directly*/ + if ( !is_ambisonics ) + { + current_base_L_ptr_re = ppHrtf_set_L_re[hrtf_idx] + base_idx; + current_base_R_ptr_re = ppHrtf_set_R_re[hrtf_idx] + base_idx; + current_base_L_ptr_im = ppHrtf_set_L_im[hrtf_idx] + base_idx; + current_base_R_ptr_im = ppHrtf_set_R_im[hrtf_idx] + base_idx; + } + + /* In case of FOA format, combine the W channel with the X/Y channels */ + else + { + for ( freq_idx = 0; freq_idx < 2; freq_idx++ ) + { + combined_channels_L_re[freq_idx] = 0.0f; + combined_channels_R_re[freq_idx] = 0.0f; + combined_channels_L_im[freq_idx] = 0.0f; + combined_channels_R_im[freq_idx] = 0.0f; + + for ( ch_index = 0; ch_index < 3; ch_index++ ) + { + combined_channels_L_re[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_L_re[ch_index][base_idx + freq_idx]; + combined_channels_R_re[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_R_re[ch_index][base_idx + freq_idx]; + combined_channels_L_im[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_L_im[ch_index][base_idx + freq_idx]; + combined_channels_R_im[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_R_im[ch_index][base_idx + freq_idx]; + } + } + + current_base_L_ptr_re = &combined_channels_L_re[0]; + current_base_R_ptr_re = &combined_channels_R_re[0]; + current_base_L_ptr_im = &combined_channels_L_im[0]; + current_base_R_ptr_im = &combined_channels_R_im[0]; + } + + for ( freq_idx = 0; freq_idx < 2; freq_idx++ ) + { + float L_re, L_im, R_re, R_im, C_re; + + L_re = current_base_L_ptr_re[freq_idx]; + R_re = current_base_R_ptr_re[freq_idx]; + L_im = current_base_L_ptr_im[freq_idx]; + R_im = current_base_R_ptr_im[freq_idx]; + + avg_pwr_left[freq_idx] += L_re * L_re + L_im * L_im; + avg_pwr_right[freq_idx] += R_re * R_re + R_im * R_im; + + /* Cross product (Re part) */ + C_re = L_re * R_re + L_im * R_im; + IA_coherence[freq_idx] += C_re; + } + } + + /* Compute the averages and the IA coherence */ + for ( freq_idx = 0; freq_idx < 2; freq_idx++ ) + { + avg_pwr_left[freq_idx] *= hrtf_count_inverted; + avg_pwr_right[freq_idx] *= hrtf_count_inverted; + IA_coherence[freq_idx] = hrtf_count_inverted * IA_coherence[freq_idx] / + sqrtf( avg_pwr_left[freq_idx] * avg_pwr_right[freq_idx] ); + + /* Limiting to (0...1) range in case of small numerical errors or negative values */ + IA_coherence[freq_idx] = min( IA_coherence[freq_idx], 1.0f ); + IA_coherence[freq_idx] = max( IA_coherence[freq_idx], 0.0f ); + } + + /* Computing weighted average of 2 nearest values (1 below + 1 above) for linear interpolation */ + weight_1st = 1.0f - relative_pos; + pOut_avg_pwr_L[out_bin_idx] = weight_1st * avg_pwr_left[0] + relative_pos * avg_pwr_left[1]; + pOut_avg_pwr_R[out_bin_idx] = weight_1st * avg_pwr_right[0] + relative_pos * avg_pwr_right[1]; + out_i_a_coherence[out_bin_idx] = weight_1st * IA_coherence[0] + relative_pos * IA_coherence[1]; + } +} diff --git a/lib_dec/ivas_reverb_iir_filter.c b/lib_dec/ivas_reverb_iir_filter.c new file mode 100644 index 0000000000..b633f8e82c --- /dev/null +++ b/lib_dec/ivas_reverb_iir_filter.c @@ -0,0 +1,148 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "wmops.h" + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_iir_filt_init() + * + * Initialize the IIR filter + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_iir_filt_init( + ivas_rev_iir_filter_t *iirFilter, /* o : IIR filter */ + const uint16_t maxTaps /* i : maximum number of filter taps */ +) +{ + iirFilter->MaxTaps = maxTaps; + iirFilter->isFIR = 0; + iirFilter->nr_taps = 0; /* filter is set to PASS i.e. input copy to output */ + iirFilter->Output = 0.0f; + + for ( uint16_t i = 0; i < maxTaps; i++ ) + { + iirFilter->CoefA[i] = 0; + iirFilter->CoefB[i] = 0; + } + + set_f( iirFilter->pBuffer, 0, iirFilter->MaxTaps ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_iir_filt_set() + * + * Set the IIR filter + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_iir_filt_set( + ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ + uint16_t nr_taps, /* i : number of IIR filter taps */ + const float *coefA, /* i : A filter coefficients to set */ + const float *coefB /* i : the B filter coefficients to set */ +) +{ + uint16_t i; + + if ( nr_taps > iirFilter->MaxTaps ) + { + nr_taps = (uint16_t) iirFilter->MaxTaps; + } + + iirFilter->nr_taps = nr_taps; + iirFilter->isFIR = ( coefA == NULL ); + + if ( iirFilter->isFIR != 0 ) + { + for ( i = 0; i < iirFilter->nr_taps; i++ ) + { + iirFilter->CoefB[i] = coefB[i]; + } + } + else + { + for ( i = 0; i < iirFilter->nr_taps; i++ ) + { + iirFilter->CoefA[i] = coefA[i]; + iirFilter->CoefB[i] = coefB[i]; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_iir_filt_2taps_feed_blk() + * + * Feed samples into 2-taps IIR filter and return resulting output samples + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_iir_filt_2taps_feed_blk( + ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ + const uint16_t blk_size, /* i : size */ + const float *input, /* i : input buffer */ + float *output /* i : output buffer */ +) +{ + uint16_t i; + float flt_output = 0.0f; + float flt_CoefB_0 = iirFilter->CoefB[0]; + float flt_CoefB_1 = iirFilter->CoefB[1]; + float flt_CoefA_1 = iirFilter->CoefA[1]; + float flt_pBuffer_0 = iirFilter->pBuffer[0]; + float flt_pBuffer_1 = iirFilter->pBuffer[1]; + + for ( i = 0; i < blk_size; i++ ) + { + flt_output = input[i] * flt_CoefB_0 + flt_pBuffer_0; + flt_pBuffer_0 = flt_pBuffer_1 + input[i] * flt_CoefB_1 - flt_output * flt_CoefA_1; + output[i] = flt_output; + } + + iirFilter->pBuffer[0] = flt_pBuffer_0; + iirFilter->pBuffer[1] = flt_pBuffer_1; + iirFilter->Output = flt_output; + + return; +} diff --git a/lib_dec/ivas_reverb_utils.c b/lib_dec/ivas_reverb_utils.c new file mode 100644 index 0000000000..bfb48f735b --- /dev/null +++ b/lib_dec/ivas_reverb_utils.c @@ -0,0 +1,486 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_binauralRenderer.h" +#include "ivas_rom_dec.h" +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------------------------*/ + +#define DEFAULT_SRC_DIST ( 1.5f ) /* default source distance [m] for reverb dmx factor computing */ +#define MAX_SAMPLING_RATE ( 48000 ) +#define CLDFB_CONVOLVER_NTAPS_MAX ( 16 ) +#define FFT_SPECTRUM_SIZE ( 1 + ( RV_FILTER_MAX_FFT_SIZE / 2 ) ) + + +/*-----------------------------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------------------------*/ + +typedef struct cldfb_convolver_state +{ + const float *filter_taps_left_re[CLDFB_NO_CHANNELS_MAX]; + const float *filter_taps_left_im[CLDFB_NO_CHANNELS_MAX]; + const float *filter_taps_right_re[CLDFB_NO_CHANNELS_MAX]; + const float *filter_taps_right_im[CLDFB_NO_CHANNELS_MAX]; + float filter_states_re[BINAURAL_CONVBANDS][CLDFB_CONVOLVER_NTAPS_MAX]; + float filter_states_im[BINAURAL_CONVBANDS][CLDFB_CONVOLVER_NTAPS_MAX]; +} cldfb_convolver_state; + +static void ivas_reverb_get_fastconv_hrtf_set_energies( + AUDIO_CONFIG input_config, + int16_t use_brir, + int32_t sampling_rate, + float *avg_pwr_left, + float *avg_pwr_right ); + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_prepare_cldfb_params() + * + * Prepares reverb parameters for CLDFB-based reverberator + *-----------------------------------------------------------------------------------------*/ + +void ivas_reverb_prepare_cldfb_params( + ivas_roomAcoustics_t *pInput_params, + AUDIO_CONFIG renderer_config, + int16_t use_brir, + const int32_t output_Fs, + float *pOutput_t60, + float *pOutput_ene ) +{ + int16_t idx; + float fc[CLDFB_NO_CHANNELS_MAX]; + float avg_pwr_left[CLDFB_NO_CHANNELS_MAX]; + float avg_pwr_right[CLDFB_NO_CHANNELS_MAX]; + + float delay_diff; + float ln_1e6_inverted; + const float dist = DEFAULT_SRC_DIST; + const float dmx_gain_2 = 4.0f * EVS_PI * dist * dist / 0.001f; + + for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + fc[idx] = ( (float) idx + 0.5f ) * ( (float) MAX_SAMPLING_RATE / (float) ( 2 * CLDFB_NO_CHANNELS_MAX ) ); + } + + ivas_reverb_interpolate_acoustic_data( pInput_params->nBands, pInput_params->pFc_input, pInput_params->pAcoustic_rt60, pInput_params->pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX, fc, pOutput_t60, pOutput_ene ); + + /* adjust DSR for the delay difference */ + delay_diff = pInput_params->inputPreDelay - pInput_params->acousticPreDelay; + ln_1e6_inverted = 1.0f / logf( 1e06f ); + for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + const float tau = pOutput_t60[idx] * ln_1e6_inverted; + pOutput_ene[idx] *= expf( delay_diff / tau ); + } + + ivas_reverb_get_fastconv_hrtf_set_energies( renderer_config, use_brir, output_Fs, avg_pwr_left, avg_pwr_right ); + for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + pOutput_ene[idx] *= 0.5f * ( avg_pwr_left[idx] + avg_pwr_right[idx] ) * dmx_gain_2; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_cldfb_convolver() + * + * Function for convolving CLDFB-domain data with filter taps + *-----------------------------------------------------------------------------------------*/ + +static void ivas_cldfb_convolver( + cldfb_convolver_state *pState, /* pointer to convolver state structure */ + float out_CLDFB_real[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* o : real part of binaural signals */ + float out_CLDFB_imag[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* o : imag part of binaural signals */ + float in_CLDFB_real[CLDFB_NO_CHANNELS_MAX], /* i : real part of input signals */ + float in_CLDFB_imag[CLDFB_NO_CHANNELS_MAX], /* i : imag part of input signals */ + int16_t num_conv_bands, /* i : number of convolution bands */ + int16_t num_taps ) /* i : number of filter taps */ +{ + int16_t band_idx, tap_idx; + float *filter_states_real_ptr, *filter_states_imag_ptr; + const float *filter_taps_left_re_ptr, *filter_taps_left_im_ptr, *filter_taps_right_re_ptr, *filter_taps_right_im_ptr; + + for ( band_idx = 0; band_idx < num_conv_bands; band_idx++ ) + { + float out_real_left, out_real_right, out_imag_left, out_imag_right; + out_real_left = 0.0f; + out_real_right = 0.0f; + out_imag_left = 0.0f; + out_imag_right = 0.0f; + + filter_states_real_ptr = (float *) &( pState->filter_states_re[band_idx][0] ); + filter_states_imag_ptr = (float *) &( pState->filter_states_im[band_idx][0] ); + + filter_taps_left_re_ptr = pState->filter_taps_left_re[band_idx]; + filter_taps_left_im_ptr = pState->filter_taps_left_im[band_idx]; + filter_taps_right_re_ptr = pState->filter_taps_right_re[band_idx]; + filter_taps_right_im_ptr = pState->filter_taps_right_im[band_idx]; + + for ( tap_idx = num_taps - 1; tap_idx > 0; tap_idx-- ) + { + filter_states_real_ptr[tap_idx] = filter_states_real_ptr[tap_idx - 1]; + filter_states_imag_ptr[tap_idx] = filter_states_imag_ptr[tap_idx - 1]; + + /* Left real and imag */ + out_real_left += ( filter_states_real_ptr[tap_idx] * filter_taps_left_re_ptr[tap_idx] ) - ( filter_states_imag_ptr[tap_idx] * filter_taps_left_im_ptr[tap_idx] ); + out_imag_left += ( filter_states_real_ptr[tap_idx] * filter_taps_left_im_ptr[tap_idx] ) + ( filter_states_imag_ptr[tap_idx] * filter_taps_left_re_ptr[tap_idx] ); + + /* Right real and imag*/ + out_real_right += ( filter_states_real_ptr[tap_idx] * filter_taps_right_re_ptr[tap_idx] ) - ( filter_states_imag_ptr[tap_idx] * filter_taps_right_im_ptr[tap_idx] ); + out_imag_right += ( filter_states_real_ptr[tap_idx] * filter_taps_right_im_ptr[tap_idx] ) + ( filter_states_imag_ptr[tap_idx] * filter_taps_right_re_ptr[tap_idx] ); + } + + filter_states_real_ptr[0] = in_CLDFB_real[band_idx]; + filter_states_imag_ptr[0] = in_CLDFB_imag[band_idx]; + + /* Left real and imag */ + out_CLDFB_real[0][band_idx] += out_real_left + ( filter_states_real_ptr[0] * filter_taps_left_re_ptr[0] ) - ( filter_states_imag_ptr[0] * filter_taps_left_im_ptr[0] ); + out_CLDFB_imag[0][band_idx] += out_imag_left + ( filter_states_real_ptr[0] * filter_taps_left_im_ptr[0] ) + ( filter_states_imag_ptr[0] * filter_taps_left_re_ptr[0] ); + + /* Right real and imag */ + out_CLDFB_real[1][band_idx] += out_real_right + ( filter_states_real_ptr[0] * filter_taps_right_re_ptr[0] ) - ( filter_states_imag_ptr[0] * filter_taps_right_im_ptr[0] ); + out_CLDFB_imag[1][band_idx] += out_imag_right + ( filter_states_real_ptr[0] * filter_taps_right_im_ptr[0] ) + ( filter_states_imag_ptr[0] * filter_taps_right_re_ptr[0] ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function get_IR_from_filter_taps() + * + * Function converts CLDFB filter taps into time-domain data + *-----------------------------------------------------------------------------------------*/ + +static void get_IR_from_filter_taps( + int16_t hrtf_idx, + AUDIO_CONFIG input_config, + int16_t use_brir, + int32_t sampling_rate, + int16_t pulse_length, + float *pOut_l, + float *pOut_r ) +{ + const int16_t n_initial_ignored_frames = 4; + const int16_t num_cldfb_taps = 7; + + int16_t i, j, band_idx, block_idx, block_len, block_count, input_sample_idx, output_sample_idx, array_idx; + int16_t is_ambisonics; + HANDLE_CLDFB_FILTER_BANK handle_cldfb_analysis, handle_cldfb_synthesis_l, handle_cldfb_synthesis_r; + cldfb_convolver_state convolver_state; + float real_buffer_in[CLDFB_NO_CHANNELS_MAX]; + float imag_buffer_in[CLDFB_NO_CHANNELS_MAX]; + float out_CLDFB_real[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; /* o : real part of Binaural signals */ + float out_CLDFB_imag[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; /* o : imag part of Binaural signals */ + float dirac_pls[CLDFB_NO_CHANNELS_MAX + 1]; + + if ( ( input_config == AUDIO_CONFIG_FOA ) || ( input_config == AUDIO_CONFIG_HOA2 ) || ( input_config == AUDIO_CONFIG_HOA3 ) ) + { + is_ambisonics = true; + } + else + { + is_ambisonics = false; + } + + block_len = (int16_t) ( sampling_rate * INV_CLDFB_BANDWIDTH ); + block_count = n_initial_ignored_frames + ( pulse_length / block_len ); + + set_f( dirac_pls, 0, block_len + 1 ); + dirac_pls[0] = 1.0f; + input_sample_idx = 0; + output_sample_idx = 0; + + /* Assign CLDFB taps */ + if ( is_ambisonics ) + { + for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) + { + convolver_state.filter_taps_left_re[band_idx] = leftHRIRReal_HOA3[band_idx][hrtf_idx]; + convolver_state.filter_taps_left_im[band_idx] = leftHRIRImag_HOA3[band_idx][hrtf_idx]; + convolver_state.filter_taps_right_re[band_idx] = rightHRIRReal_HOA3[band_idx][hrtf_idx]; + convolver_state.filter_taps_right_im[band_idx] = rightHRIRImag_HOA3[band_idx][hrtf_idx]; + } + } + else + { + array_idx = 0; + if ( input_config == AUDIO_CONFIG_5_1 ) + { + array_idx = channelIndex_CICP6[hrtf_idx]; + } + else if ( input_config == AUDIO_CONFIG_7_1 ) + { + array_idx = channelIndex_CICP12[hrtf_idx]; + } + else if ( input_config == AUDIO_CONFIG_5_1_2 ) + { + array_idx = channelIndex_CICP14[hrtf_idx]; + } + else if ( input_config == AUDIO_CONFIG_5_1_4 ) + { + array_idx = channelIndex_CICP16[hrtf_idx]; + } + else if ( input_config == AUDIO_CONFIG_7_1_4 ) + { + array_idx = channelIndex_CICP19[hrtf_idx]; + } + + if ( use_brir ) + { + for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) + { + convolver_state.filter_taps_left_re[band_idx] = leftBRIRReal[band_idx][array_idx]; + convolver_state.filter_taps_left_im[band_idx] = leftBRIRImag[band_idx][array_idx]; + convolver_state.filter_taps_right_re[band_idx] = rightBRIRReal[band_idx][array_idx]; + convolver_state.filter_taps_right_im[band_idx] = rightBRIRImag[band_idx][array_idx]; + } + } + else + { + for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) + { + convolver_state.filter_taps_left_re[band_idx] = leftHRIRReal[band_idx][array_idx]; + convolver_state.filter_taps_left_im[band_idx] = leftHRIRImag[band_idx][array_idx]; + convolver_state.filter_taps_right_re[band_idx] = rightHRIRReal[band_idx][array_idx]; + convolver_state.filter_taps_right_im[band_idx] = rightHRIRImag[band_idx][array_idx]; + } + } + } + + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < CLDFB_CONVOLVER_NTAPS_MAX; j++ ) + { + convolver_state.filter_states_re[i][j] = 0; + convolver_state.filter_states_im[i][j] = 0; + } + } + + openCldfb( &handle_cldfb_analysis, CLDFB_ANALYSIS, sampling_rate, CLDFB_PROTOTYPE_5_00MS ); + openCldfb( &handle_cldfb_synthesis_l, CLDFB_SYNTHESIS, sampling_rate, CLDFB_PROTOTYPE_5_00MS ); + openCldfb( &handle_cldfb_synthesis_r, CLDFB_SYNTHESIS, sampling_rate, CLDFB_PROTOTYPE_5_00MS ); + + /* Main loop for convolving dirac pulse with CLDFB filter taps */ + for ( block_idx = 0; block_idx < block_count; block_idx++ ) + { + float *ppRealBuf[1]; + float *ppImagBuf[1]; + + cldfbAnalysis_ts( &dirac_pls[input_sample_idx], real_buffer_in, imag_buffer_in, block_len, handle_cldfb_analysis ); + + /* Perform convolution */ + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ ) + { + out_CLDFB_real[i][j] = 0; + out_CLDFB_imag[i][j] = 0; + } + } + + ivas_cldfb_convolver( &convolver_state, out_CLDFB_real, out_CLDFB_imag, real_buffer_in, imag_buffer_in, BINAURAL_CONVBANDS, num_cldfb_taps ); + + ppRealBuf[0] = out_CLDFB_real[0]; + ppImagBuf[0] = out_CLDFB_imag[0]; + cldfbSynthesis( ppRealBuf, ppImagBuf, &pOut_l[output_sample_idx], block_len, handle_cldfb_synthesis_l ); + + ppRealBuf[0] = out_CLDFB_real[1]; + ppImagBuf[0] = out_CLDFB_imag[1]; + cldfbSynthesis( ppRealBuf, ppImagBuf, &pOut_r[output_sample_idx], block_len, handle_cldfb_synthesis_r ); + + if ( input_sample_idx == 0 ) + { + input_sample_idx = 1; + } + + if ( block_idx >= n_initial_ignored_frames ) + { + output_sample_idx += block_len; + } + } + + deleteCldfb( &handle_cldfb_analysis ); + deleteCldfb( &handle_cldfb_synthesis_l ); + deleteCldfb( &handle_cldfb_synthesis_r ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_get_cldfb_hrtf_set_properties() + * + * Function analyses the HRTF set and computes avarage left/right power spectrum + * and frequency-dependent IA coherence. + * Uses fastconv renderer filter taps to compute energies + *-----------------------------------------------------------------------------------------*/ + +static void ivas_reverb_get_cldfb_hrtf_set_properties( + AUDIO_CONFIG input_config, + int16_t use_brir, + int32_t sampling_rate, + float *avg_pwr_left, + float *avg_pwr_right ) +{ + float current_HRTF_data_L[L_FRAME48k]; + float current_HRTF_data_R[L_FRAME48k]; + int16_t freq_idx, hrtf_idx, hrtf_count; + float hrtf_count_inverted; + int16_t fft_size, IR_length, log2_fft_size, half_fft_size, freq_count; + + fft_size = RV_FILTER_MAX_FFT_SIZE; + IR_length = CLDFB_NO_CHANNELS_MAX * ( ( fft_size + CLDFB_NO_CHANNELS_MAX - 1 ) / CLDFB_NO_CHANNELS_MAX ); + log2_fft_size = int_log2( fft_size ); + half_fft_size = fft_size >> 1; + freq_count = 1 + half_fft_size; + + /* chosing between ambisonics, 5.1 and 7.1 MC audio */ + if ( ( input_config == AUDIO_CONFIG_FOA ) || ( input_config == AUDIO_CONFIG_HOA2 ) || ( input_config == AUDIO_CONFIG_HOA3 ) ) + { + hrtf_count = 1; + } + else if ( input_config == AUDIO_CONFIG_7_1 ) + { + hrtf_count = 7; + } + else + { + hrtf_count = 5; + input_config = AUDIO_CONFIG_5_1; + } + + /* Zeroing before accumalation for average value computing */ + for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) + { + avg_pwr_left[freq_idx] = 0.0f; + avg_pwr_right[freq_idx] = 0.0f; + } + + /* Get power spectra and cross - correlation between left and right hrtfs + Loop over all the HRTFs available */ + for ( hrtf_idx = 0; hrtf_idx < hrtf_count; hrtf_idx++ ) + { + get_IR_from_filter_taps( hrtf_idx, input_config, use_brir, sampling_rate, IR_length, current_HRTF_data_L, current_HRTF_data_R ); + + /* Perform forward FFT on both L/R channels */ + fft_rel( current_HRTF_data_L, (int16_t) fft_size, (int16_t) log2_fft_size ); + fft_rel( current_HRTF_data_R, (int16_t) fft_size, (int16_t) log2_fft_size ); + + /* Process the DC bin (without img part) */ + avg_pwr_left[0] += current_HRTF_data_L[0] * current_HRTF_data_L[0]; + avg_pwr_right[0] += current_HRTF_data_R[0] * current_HRTF_data_R[0]; + + /* Process the Nyquist frequency bin (without img part) */ + avg_pwr_left[half_fft_size] += current_HRTF_data_L[half_fft_size] * current_HRTF_data_L[half_fft_size]; + avg_pwr_right[half_fft_size] += current_HRTF_data_R[half_fft_size] * current_HRTF_data_R[half_fft_size]; + + /* Process the other frequency bins containing both real and img parts */ + for ( freq_idx = 1; freq_idx < half_fft_size; freq_idx++ ) + { + float L_re, L_im, R_re, R_im; + L_re = current_HRTF_data_L[freq_idx]; + R_re = current_HRTF_data_R[freq_idx]; + L_im = current_HRTF_data_L[fft_size - freq_idx]; + R_im = current_HRTF_data_R[fft_size - freq_idx]; + + avg_pwr_left[freq_idx] += L_re * L_re + L_im * L_im; + avg_pwr_right[freq_idx] += R_re * R_re + R_im * R_im; + } + } + + /* Compute the averages and the IA coherence */ + hrtf_count_inverted = 1.0f / (float) hrtf_count; + for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) + { + avg_pwr_left[freq_idx] *= hrtf_count_inverted; + avg_pwr_right[freq_idx] *= hrtf_count_inverted; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_get_fastconv_hrtf_set_energies() + * + * Function analyses the HRTF set and computes avarage left/right power spectrum. + * Uses fastconv renderer filter taps to compute energies. Output interpolated + * to CLDFB bin center frequencies + *-----------------------------------------------------------------------------------------*/ + +static void ivas_reverb_get_fastconv_hrtf_set_energies( + AUDIO_CONFIG input_config, + int16_t use_brir, + int32_t sampling_rate, + float *avg_pwr_left, + float *avg_pwr_right ) +{ + int16_t freq_idx; + const int16_t cldfb_freq_halfstep = MAX_SAMPLING_RATE / ( 4 * CLDFB_NO_CHANNELS_MAX ); + float avg_pwr_left_fft[FFT_SPECTRUM_SIZE]; + float avg_pwr_right_fft[FFT_SPECTRUM_SIZE]; + float input_fc[FFT_SPECTRUM_SIZE]; + float output_fc[CLDFB_NO_CHANNELS_MAX]; + + for ( freq_idx = 0; freq_idx < FFT_SPECTRUM_SIZE; freq_idx++ ) + { + input_fc[freq_idx] = freq_idx * ( 0.5f * sampling_rate / (float) ( FFT_SPECTRUM_SIZE - 1 ) ); + } + + for ( freq_idx = 0; freq_idx < CLDFB_NO_CHANNELS_MAX; freq_idx++ ) + { + output_fc[freq_idx] = (float) ( ( 2 * freq_idx + 1 ) * cldfb_freq_halfstep ); + } + + ivas_reverb_get_cldfb_hrtf_set_properties( input_config, use_brir, sampling_rate, avg_pwr_left_fft, avg_pwr_right_fft ); + + ivas_reverb_interpolate_acoustic_data( FFT_SPECTRUM_SIZE, input_fc, avg_pwr_left_fft, avg_pwr_right_fft, CLDFB_NO_CHANNELS_MAX, output_fc, avg_pwr_left, avg_pwr_right ); + + return; +} diff --git a/lib_dec/ivas_rom_TdBinauralRenderer.c b/lib_dec/ivas_rom_TdBinauralRenderer.c new file mode 100644 index 0000000000..34263ea8f3 --- /dev/null +++ b/lib_dec/ivas_rom_TdBinauralRenderer.c @@ -0,0 +1,12458 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* clang-format off */ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * TD Binaural rendering related ROM tables + *------------------------------------------------------------------------*/ +/* TD renderer HRTF default model Orange53 */ +const int16_t orange53_rom_azimDim2[18] = { +1, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 1, + }; +const int16_t orange53_rom_azimDim3[18] = { +1, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 1, + }; +const int16_t orange53_rom_azim_start_idx[18] = { +0, 1, 37, 73, 109, 145, 181, 217, 253, 289, 325, 361, 397, 433, 469, 505, 541, 577, + }; +const int16_t orange53_rom_azimSegSamples[1] = { +10, + }; +const int16_t orange53_rom_azimShapeIdx[18] = { +-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, + }; +const int16_t orange53_rom_azimShapeSampFactor[18] = { +-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, + }; +const float orange53_rom_elevKSeq[16] = { +-90.000000f, -78.000000f, -66.000000f, -54.000000f, -42.000000f, -30.000000f, -18.000000f, -6.000000f, 6.000000f, 18.000000f, 30.000000f, 42.000000f, 54.000000f, 66.000000f, 78.000000f, 90.000000f, + }; +const uint32_t orange53_rom_elevBsShape[28] = { +0x3f800000,0x3e97b426,0x3d17b426,0x00000000,0x00000000,0x3f1097b4,0x3f04bda1,0x3e800000,0x3d97b426,0x3c17b426,0x00000000,0x00000000,0x3e07e6b7,0x3eca4588,0x3f155555,0x3f0ca458,0x3ebc0ca4,0x3e2aaaab,0x3d4a4588,0x3bca4588,0x00000000,0x00000000,0x3bca4588,0x3d4a4588,0x3e2aaaab,0x3ebda12f,0x3f12f685,0x3f2aaaab, + }; +const uint32_t orange53_rom_azimBsShape[21] = { +0x3f2aaaab,0x3f283c13,0x3f21735f,0x3f17152a,0x3f09e60f,0x3ef55555,0x3ed44f30,0x3eb242e7,0x3e90b9af,0x3e627984,0x3e2aaaab,0x3df8d4fe,0x3daec33e,0x3d6a2798,0x3d1374bc,0x3caaaaab,0x3c2ec33e,0x3b9374bc,0x3aaec33e,0x392ec33e,0x26800000, + }; + +const uint32_t orange53_rom_AlphaL48[578 * 128] = { +0x3e1a1a51,0x3d8e5bf0,0x3e1e0827,0x3dee7975,0x3def54ee,0x3df4defb,0x3dfaa8a7,0x3e008e19,0x3e02e452,0x3dfbf25a,0x3df9eb18,0x3df04fca,0x3deae4b5,0x3de9c46a,0x3deac813,0x3de56c8f,0x3de7eb79,0x3de1f8b3,0x3de37d57,0x3dd6a991,0x3df42dce,0x3cf0bd44,0xbb3b4c7d,0xbd433247,0x3d4862f8, +0xbafcf373,0xbd49f6c8,0xbd3facbe,0xbd2568e5,0xbd098869,0xbd5e4293,0xbd688fbd,0xbd3a26c5,0xbc8736a8,0x3d6e02f7,0xbd1331c7,0xbcb6d501,0xbd8ce61b,0x3de9c34c,0x3e1c65ce,0x3e1859c5,0x3e1f5dc4,0x3e2dd730,0x3e39b76a,0x3e3c715c,0x3e26d0e5,0x3e2ba196,0x3e1ff90f,0x3e156d88,0x3e13a92e, +0x3e151ef5,0x3e0760ac,0x3e0fac1c,0x3e09d74c,0x3e01bf7a,0x3dfe9228,0x3e11159e,0x3bed8591,0x3d24b108,0x3cc8a92f,0x3cac7fb1,0x3d78cc60,0x3ccb1e5e,0x3d192f63,0x3c104aa1,0x3d100563,0x3cc2e546,0x3dd8f4d3,0x3d13e7b2,0x3cf88d2b,0x3d37ffad,0x3cb9276b,0x3d64adcd,0x3b4ea968,0x3e342a42, +0x3e2d5a8a,0x3e2fd379,0x3e3cdc2b,0x3e5eb00b,0x3e64d17f,0x3e6cd42b,0x3e5b4be7,0x3e474f8c,0x3e34acd4,0x3e2b21e1,0x3e2111e6,0x3e19f35a,0x3e1a2b2b,0x3e0e0703,0x3e11e0b0,0x3df4c803,0x3e0b3051,0x3da040fd,0xbc9dd369,0x3ce09752,0x3d1a5018,0x3ba6a845,0x3cbdc3ce,0x3ce607e9,0x3d0001ca, +0x3da47832,0xbc152084,0x3d4f2355,0x3bdec29e,0x3d31a86f,0x3d4c30f2,0x3d2adfdd,0x3c1672fe,0x3dd33cb5,0xbcca0e89,0x3d94dc49,0x3e45fb19,0x3e2e0170,0x3e5267c9,0x3e77ad98,0x3e8992ee,0x3e87fa54,0x3e752368,0x3e5d41aa,0x3e4b253e,0x3e34713d,0x3e254cd7,0x3e202ffb,0x3e148413,0x3e0e0f12, +0x3e0cd414,0x3deea780,0x3def16b8,0x3d9d1975,0x3ce379e6,0x3d59a17a,0x3c26786b,0x3d3cf6c4,0x3b815490,0x3d04adda,0xbc58957d,0x3c4a5886,0x3c233d31,0x3d3b0b7d,0x3c0f13f6,0x3d047483,0xbc3f95c5,0x3ccd9a62,0x3d0e0e03,0x3d7da82c,0x3d9fb11d,0x3deb165d,0x3e6b0fa8,0x3e46ae6c,0x3e6eea23, +0x3e959d34,0x3ea4fcd0,0x3ea63388,0x3e95c403,0x3e812c07,0x3e5d65d4,0x3e467d5e,0x3e361a44,0x3e28d28d,0x3e252fb7,0x3e199836,0x3e108f97,0x3df13b2c,0x3de17eb7,0x3d91c42f,0xbd39c4b7,0x3ca50541,0xbb81ae0f,0x3ba23a3b,0x3c0b162f,0x3b740bcf,0x3c766a22,0x3c1d4775,0x3c0c006f,0x3b9b9a9e, +0x3ccde9b9,0x3c55ecac,0x3cac5f6b,0x3d3ed36d,0x3d0a43db,0x3c9e9409,0x3c7dd89e,0x3deec944,0x3e8e51c3,0x3e84aff4,0x3e953ede,0x3e9cc9bb,0x3ea56078,0x3ea96bf9,0x3eb1be80,0x3eaae2ed,0x3e90c3e3,0x3e92770d,0x3e895166,0x3e6ff9fa,0x3e676b94,0x3e4c996e,0x3e409883,0x3e162f37,0x3e01c0c1, +0x3dbb9edb,0x3c7893f0,0x3d5c9169,0xba85d1e6,0x3cbee44f,0xbb150c71,0x3c1bb010,0x3aa888fe,0x3c8ef449,0x3c91c277,0x3c0bbd56,0x3c1c9ee4,0x3c0547c5,0x3d441339,0x3c9bf98f,0xbc80ab80,0x3dc90429,0x3d5d6c1f,0x3e2b840c,0x3e92a8c1,0x3e8fdb39,0x3ea0ebf1,0x3eac05a0,0x3eb4d2c8,0x3eacf1e2, +0x3eaf723e,0x3ea1468b,0x3e907c5a,0x3e8b6952,0x3e824b41,0x3e853372,0x3e75deea,0x3e5f32c3,0x3e54f959,0x3e1f16a4,0x3e1e6288,0x3d8dffb2,0xbc4ec06a,0x3c833f2e,0x3cc21ac5,0x3ca8818e,0x3c2ab03c,0x3c2a336c,0x3bdc6101,0xbb3e79be,0x3bc8b3e9,0x3bdaf939,0x3ce1e8fb,0x3c73c4c6,0x3a35a400, +0x3d16a8fc,0x3d8ce8a6,0x3cf51b18,0x3c7806da,0x3e3678a4,0x3ebb6040,0x3eaf9649,0x3ed50475,0x3ec359e3,0x3ebfd026,0x3eb14094,0x3ea5f7b8,0x3e9ca7da,0x3ea460f8,0x3ea6d449,0x3eae8774,0x3ea862ad,0x3e944c50,0x3e7f7ce2,0x3e5e09b6,0x3e2a1dce,0x3e1f9f46,0x3db22b27,0x3cf8ad63,0x3cfe4944, +0xbb8ca691,0x3d04a011,0x3c3bff45,0x3cc92890,0xb7d806e8,0x3ce43e2c,0x3c96fc11,0x3c0a0220,0x3c06df58,0x3cac6048,0x3d089927,0x3d53a9f5,0x3d11a37f,0x3cd8f19e,0xbb7d8779,0x3e3d07f5,0x3ecedba0,0x3ecd22e8,0x3edba289,0x3ec2800e,0x3ebbdf7b,0x3eb697bf,0x3ea6cc41,0x3ea7578e,0x3eb75668, +0x3ebc0dfb,0x3eb66bff,0x3eaa139c,0x3e96143c,0x3e75304b,0x3e50d02f,0x3e1925d1,0x3e266566,0x3d94149c,0x3cb9efc3,0x3d11e85c,0x3d31806b,0x3bb2582e,0x3cf16a0f,0xb7f45bf1,0x3c86d198,0x3ba08d1c,0xbc034760,0x3d1939af,0x3b1c7be4,0x3cb2d8a2,0xbc957ddf,0x3d81550d,0xbb88d04c,0x3e102cfe, +0x3c780416,0x3eb27f66,0x3ec71176,0x3ec1aeb1,0x3ebb4ace,0x3eadff72,0x3eae6c0d,0x3ea8ca7d,0x3eade8d8,0x3eac8274,0x3ea46d07,0x3e9ede97,0x3e9a2bb1,0x3e89464d,0x3e7ee4b6,0x3e5a8037,0x3e39ab67,0x3e1caf23,0x3e183718,0x3d99337b,0x3d2f7fd2,0x3d7ebd8e,0x3b1ad340,0x3c778404,0x3cc60cf0, +0x3c270223,0x3c8a86ef,0x3cca821d,0x3cf824d8,0x3bff25a2,0xba00a51b,0x3cc7a026,0x3cd84577,0x3d7121d6,0xbc4cb980,0x3d9f1ef2,0x3d551c50,0x3e0884bd,0x3ed7b94b,0x3eaa3029,0x3eb586c4,0x3e9a1614,0x3e976d88,0x3e9fe886,0x3e93a24e,0x3e9b0667,0x3eae2b14,0x3e9d26bd,0x3e90503d,0x3e83b63b, +0x3e52ab06,0x3e284311,0x3e170036,0x3e074397,0x3e10f157,0x3e046813,0x3b553ef6,0x3a1144aa,0x3d31223d,0x3bf30c28,0x3ccb14a7,0x3c2e74ba,0xbc09f093,0x3c727040,0x3bb3f0d5,0x3c56a44d,0x3d11b319,0x3cccb091,0x3da46072,0xbc497351,0x3d2e823b,0x3e1038e5,0xbd2882e2,0x3e847bea,0x3e8d245b, +0x3e7b4cd0,0x3e824418,0x3e814711,0x3e82c602,0x3e8372b1,0x3e8068a9,0x3e6858e4,0x3e651196,0x3e633cd9,0x3e64099a,0x3e53c966,0x3e46e357,0x3e34112b,0x3e201db3,0x3e123799,0x3e2b83bb,0x3d81ab98,0xbbd31041,0x3df449d7,0xb9fbdb75,0x3d463b47,0x3cd09b7c,0xbc35ad3b,0x3d742929,0x3c722a9f, +0x3d13ab95,0xbb53ffad,0x3c99733d,0x3cf345da,0xbb833858,0x3d5973f4,0x3d29a761,0x3dd52000,0x3d2e248b,0x3dd072d9,0x3e749546,0x3e4e90be,0x3e5a2fa3,0x3e5e204c,0x3e6c97c4,0x3e743a38,0x3e663c2c,0x3e5bdc7c,0x3e56ccdd,0x3e49005d,0x3e3e7617,0x3e30ba00,0x3e2a08ff,0x3e1502cc,0x3e0bd9e1, +0x3df4d4ac,0x3e12ea9d,0x3dfb6114,0x3a90607b,0x3bbf7f02,0x3d4f3eda,0x3bdc2fc6,0x3cec54ff,0x3d08fef0,0xbcb91b87,0x3c5be31e,0x3cf0da96,0x3ce7ebfb,0x3cafe594,0x3c24c452,0x3d34da47,0x3d0a4032,0x3c876694,0x3d2cba39,0xbc0d78c0,0x3e1cd7f6,0x3e3581a2,0x3e298402,0x3e4b7038,0x3e4a0c78, +0x3e54c118,0x3e5a0728,0x3e570f2d,0x3e537000,0x3e4ffcbd,0x3e39b4d8,0x3e256ad8,0x3e0be8c6,0x3e09662a,0x3df7b5ac,0x3e00726a,0x3de089e4,0x3e154aea,0x3d801f47,0x3d430752,0x3d5aabd9,0x3d4c26d4,0x3d1cdd0d,0x3ca314a7,0x3cef1e9c,0x3d209ff4,0x3ddb00e5,0xbd0248f9,0x3da5b8b8,0x3c2a89f8, +0x3d509c53,0x3d35b11f,0x3c862c44,0x3d72258b,0x3dd7f7de,0xbcc9892b,0x3e337043,0x3e1e6660,0x3e23cd33,0x3e193ee1,0x3e2b5faf,0x3e2c4ea2,0x3e3a4e99,0x3e2be55e,0x3e220c96,0x3e17f0aa,0x3e144672,0x3e109ea3,0x3e068f10,0x3e082d05,0x3e05da54,0x3e0e04f5,0x3e0189c6,0x3e0d2580,0x3e005211, +0xbc9c3c1c,0x3d4031dd,0x3ce8e334,0x3d84d03a,0x3d4f1231,0x3d517852,0x3d1b6f46,0x3cbc5fe3,0x3d090e0a,0x3d0d937c,0x3df0a594,0xbb18333d,0x3d594f5a,0x3d49c515,0xbce7e480,0x3deb3ad2,0x3d260b2b,0x3e209e41,0x3e09d517,0x3e0fd0e6,0x3e111576,0x3e16324d,0x3e1532ac,0x3e19d2ae,0x3e16474b, +0x3e15d14d,0x3e139389,0x3e0f66c3,0x3e0ae43a,0x3e07e946,0x3e071ddf,0x3e06b962,0x3e07afb8,0x3e06f130,0x3e015d1c,0x3e24ef6c,0x3d4acd38,0xbc0aec7a,0xbd4dd4d0,0x3d36942d,0xbc575276,0xbd57b097,0xbd711897,0xbd40ba77,0xbd2e308a,0xbd8a1415,0xbd947303,0xbd3af73f,0x3c36bc0f,0x3d80566f, +0xbd35a013,0xbcd0f897,0x3e43d85a,0x3ee1f87b,0x3e986ebc,0x3eb729b1,0x3ea0ebf0,0x3ea29c3f,0x3ea644cd,0x3ea96d6d,0x3ead7612,0x3eb08a20,0x3ea9c090,0x3ea8bf6b,0x3ea2ba35,0x3e9f242b,0x3e9e3eb7,0x3e9e92eb,0x3e9a5ce0,0x3e9be992,0x3e97b5a9,0x3e985a65,0x3e91e88e,0x3e9b86a9,0x3e5dbaa3, +0x3e1aee63,0xbc0ccd7b,0x3e7e542d,0x3e2014c5,0xbb689f87,0x3a22f2f9,0x3c30be13,0x3cdef744,0xbb0d8129,0xb9488333,0x3d0eb504,0x3e0a9091,0x3e88cda2,0x3d03a166,0x3dfe9b06,0x3d5e3538,0x3eb76518,0x3ed14339,0x3ed31b2c,0x3edd3aa3,0x3eee4534,0x3efd9257,0x3f0043b8,0x3ee26f4a,0x3eea6a13, +0x3edb2b9e,0x3ecd5c4f,0x3ecb8da8,0x3eccb0b0,0x3eb82e69,0x3ec450cd,0x3eba7301,0x3eb20936,0x3eab99de,0x3eb5e17d,0x3e286646,0x3e56342a,0x3e263beb,0x3e3f9c7f,0x3e80d156,0x3e1c6fee,0x3e5637b5,0x3e1db35b,0x3e4a89cc,0x3e42a539,0x3e976006,0x3e3c724b,0x3e4618d9,0x3e6b13d2,0x3e4bc03a, +0x3e7757eb,0x3e699289,0x3ef2011c,0x3ee17c83,0x3ef834a7,0x3f03c58b,0x3f19f250,0x3f1c1979,0x3f219849,0x3f154843,0x3f0857b9,0x3efa00ec,0x3eef7968,0x3ee03fd9,0x3ed47aa8,0x3ed217a1,0x3ec1ab45,0x3ec215fc,0x3eab0796,0x3eadd970,0x3e858824,0x3df7341a,0x3e20aca8,0x3e4777f2,0x3dfdbd09, +0x3e085951,0x3e272312,0x3e0874ec,0x3e8503ce,0x3dea22ab,0x3e41cc86,0x3e0231b2,0x3e460a28,0x3e57e930,0x3e539050,0x3e28b6a5,0x3ead26e6,0x3e0db830,0x3e94b0df,0x3ef920df,0x3ef6e286,0x3f124573,0x3f2b4850,0x3f3ab2d8,0x3f37584e,0x3f254ec2,0x3f16208b,0x3f0b194b,0x3efa5e75,0x3ee732cc, +0x3edba0c9,0x3ec94764,0x3ec070db,0x3eb9e352,0x3ea13450,0x3e953db1,0x3e6918ed,0x3e166184,0x3e27d070,0x3db76ee7,0x3e0f0f06,0x3d88a30b,0x3dd6aca1,0x3d1a90c4,0x3d7d2eba,0x3d97ecff,0x3e079938,0x3da55e1f,0x3e0b67ef,0x3d98c7e6,0x3e0ab36e,0x3e4223d8,0x3e6c76d5,0x3ea691ff,0x3ed14669, +0x3f0ab870,0x3f117d6f,0x3f280023,0x3f5051ba,0x3f625887,0x3f630b1d,0x3f4b257b,0x3f3013d1,0x3f191c90,0x3f0c8a06,0x3f000f69,0x3eeb3e4d,0x3ee16ffc,0x3ecfb241,0x3ebf1d8d,0x3ea382f2,0x3e8f2fd2,0x3e52ef1e,0x3c308120,0x3dad816b,0x3d2bf363,0x3d29c9b9,0x3d1bf3f4,0x3cbbc318,0x3d2f6f6a, +0x3d04c204,0x3d355e6f,0x3cee0e1f,0x3da6f15d,0x3d819db2,0x3dcbf3d8,0x3e28bffe,0x3e1a3599,0x3e334a85,0x3e7af175,0x3eecc9f4,0x3f27a370,0x3f367826,0x3f4d8700,0x3f5959fd,0x3f64e913,0x3f6e9d5c,0x3f7aea69,0x3f713b4c,0x3f49297c,0x3f48cb86,0x3f3efc1f,0x3f2d78f4,0x3f236bec,0x3f10d0db, +0x3f080bb6,0x3edda28a,0x3eb87482,0x3e8e205b,0x3e04acac,0x3e215d35,0x3d706413,0x3db8764e,0x3cd8e5cf,0x3d28c71a,0x3cd4872e,0x3d4ea52d,0x3d8b9d0c,0x3d5f788d,0x3d957e59,0x3da3e53b,0x3e2c3965,0x3e1c623f,0x3dd509ec,0x3ebc188a,0x3eb0d37f,0x3f05a071,0x3f3aaec6,0x3f51550b,0x3f659f43, +0x3f744eaa,0x3f82362e,0x3f7e3a3f,0x3f824e58,0x3f7178c3,0x3f5b4148,0x3f563a7f,0x3f44c7c6,0x3f42d7b6,0x3f2ec55c,0x3f1c43e2,0x3f0eac96,0x3ee688f7,0x3ed17a8a,0x3e86b7fc,0x3dbdf5a1,0x3e060015,0x3dec539a,0x3db32211,0x3d85d058,0x3d5aef83,0x3d382b8c,0x3cd20fd6,0x3d1951a1,0x3d4cf4bf, +0x3dc1451a,0x3db8d7bd,0x3da2d158,0x3e2b414b,0x3e8860f2,0x3e635ce4,0x3e95b627,0x3f15475f,0x3f708912,0x3f6ded71,0x3f85690c,0x3f810805,0x3f808d3e,0x3f754b86,0x3f7563cc,0x3f6ee377,0x3f725a24,0x3f6ac124,0x3f6a325d,0x3f598d4f,0x3f3e0068,0x3f287c46,0x3f13bda4,0x3eefec65,0x3ecf8168, +0x3e946ed0,0x3e40a9e9,0x3e1388f2,0x3da56f98,0x3e0b7f0e,0x3d9844f1,0x3dad674a,0x3cff91d7,0x3db9fba1,0x3db04363,0x3d749f81,0x3d8c1a9d,0x3dbbd47a,0x3e3528b9,0x3e5b1c57,0x3e81ea00,0x3e500f5f,0x3e9d2bb3,0x3f1dae46,0x3f792da1,0x3f7c6467,0x3f7ef63a,0x3f733eca,0x3f70c0ce,0x3f7ce0a0, +0x3f6dad57,0x3f72bb4b,0x3f7e6344,0x3f7a3e89,0x3f6b8b10,0x3f550b00,0x3f3f9814,0x3f1f8868,0x3f0b7798,0x3ed687aa,0x3ed1e126,0x3e7f777b,0x3e4354f1,0x3e1a5e8f,0x3e4453e9,0x3da31b30,0x3e03a53c,0x3d444085,0x3da05731,0x3d4591a8,0x3d59b44e,0x3e0634cb,0x3d552fca,0x3dee218e,0x3d61728f, +0x3e6d75ca,0x3e32c35b,0x3ed8d275,0x3eb35227,0x3f59a7d7,0x3f68b894,0x3f6c7306,0x3f56e2f9,0x3f612c98,0x3f702ddf,0x3f78bc38,0x3f7b64b4,0x3f76e5d8,0x3f66a093,0x3f5dcdef,0x3f5606ba,0x3f3f3e62,0x3f2fe739,0x3f16dc61,0x3ef7d34c,0x3eda3d6d,0x3ec1eb31,0x3e976486,0x3e5c1a06,0x3e8304dc, +0x3dcabdac,0x3e06dcb4,0x3df39ca6,0x3db48557,0x3d9bda96,0x3ddccf45,0x3e293a5a,0x3d8d8586,0x3d7b4ffd,0x3de53edf,0x3e0c699d,0x3e7f8ce8,0x3df61648,0x3ea9912d,0x3f000344,0x3f172d41,0x3f6e914b,0x3f661b0a,0x3f6639d3,0x3f5a8182,0x3f586a79,0x3f69b041,0x3f580e56,0x3f5e0822,0x3f6b9b41, +0x3f5535c8,0x3f4342a5,0x3f31cbe9,0x3f1195d9,0x3ef3c651,0x3ed89c69,0x3ed5a17e,0x3ed1cff4,0x3ed251af,0x3e316fca,0x3de6d690,0x3e3817d1,0x3dc9ede6,0x3e03a65a,0x3da505a8,0x3d24842b,0x3db7bddd,0x3d9cfbc5,0x3dd361e8,0x3e251abc,0x3e311a54,0x3e8c449b,0x3d92405a,0x3e944d62,0x3ebdfa0d, +0x3e63ca7b,0x3f354bcc,0x3f3e837c,0x3f3a64ac,0x3f3ae4fb,0x3f440bb6,0x3f478e80,0x3f48a18f,0x3f49951b,0x3f3b4820,0x3f3639d9,0x3f2f7edf,0x3f27bc11,0x3f190c3e,0x3f0b124b,0x3efcb4c0,0x3ee000b7,0x3edf7b18,0x3ef7ddf4,0x3e8e1f69,0x3e203b2f,0x3ec26b6d,0x3e2da5cf,0x3e59bd81,0x3e1754e7, +0x3d2749fc,0x3e4c7fb0,0x3dc11cb5,0x3e2aab9b,0x3d8156ed,0x3e0b40b4,0x3e26f818,0x3e00e142,0x3e8260c7,0x3e87c31e,0x3edd2851,0x3eb03057,0x3ee5df68,0x3f29899f,0x3f219c85,0x3f273fbd,0x3f2d8b9c,0x3f364bab,0x3f3b2fa9,0x3f332d09,0x3f2ca806,0x3f283f55,0x3f1b0fe7,0x3f11d555,0x3f05c8ee, +0x3efe9aea,0x3ee7f5a2,0x3ed9062a,0x3ecd837d,0x3edcee19,0x3ed4f3e4,0x3e3a933c,0x3e08b1c6,0x3e80246e,0x3dfed7dd,0x3e187724,0x3e1a207b,0x3d2a1173,0x3dc961c1,0x3e1cecfd,0x3e1c83a9,0x3e13ef04,0x3dd68c7d,0x3e59a379,0x3e3ee817,0x3e57528d,0x3e80cb91,0x3e4c5430,0x3f044175,0x3f0ab2d5, +0x3f0bf88c,0x3f1d327d,0x3f1d788b,0x3f23dada,0x3f284614,0x3f24055a,0x3f205fdf,0x3f1be973,0x3f11a199,0x3f055e33,0x3eee5198,0x3ee90217,0x3ed7c73b,0x3ed40748,0x3ec56be0,0x3edcd6e4,0x3e93669a,0x3e913c33,0x3e79e056,0x3e87ac82,0x3e5a5229,0x3e362dbf,0x3e5f5b7d,0x3e37538d,0x3ec76008, +0x3dae7f33,0x3e994650,0x3e18ab12,0x3e7038c1,0x3e83a76a,0x3e4a9659,0x3e9ff057,0x3ecc8a24,0x3dec91a3,0x3f052b6f,0x3f009848,0x3f00a373,0x3ef23ea9,0x3f07cba1,0x3f06f80c,0x3f106e0a,0x3f088371,0x3f03c120,0x3efc5140,0x3ef6cc58,0x3ef0fce7,0x3ee73ea1,0x3ee3a0e3,0x3edf055f,0x3ee939b9, +0x3edb5eef,0x3edcd7c1,0x3ee1e00c,0x3e165a3a,0x3e8cf480,0x3e76ec13,0x3ea5ec97,0x3e8d580a,0x3e842c85,0x3e87ae03,0x3e77a9c4,0x3e780671,0x3e8ae074,0x3ece4808,0x3e223659,0x3ea3a168,0x3e851044,0x3dbb59e6,0x3ef1473e,0x3e9f88e0,0x3eec5891,0x3ed5582b,0x3edc83eb,0x3edcc077,0x3ee37193, +0x3ee1c413,0x3ee8080b,0x3ee2c121,0x3ee1af31,0x3edf1447,0x3edaae20,0x3ed60954,0x3ed31c5c,0x3ed174a7,0x3ed0ecbb,0x3ed16b4a,0x3ecf7a36,0x3ec706d2,0x3ee77b0f,0x3e9f44fe,0x3e38c6af,0xba87e4e7,0x3e9c6d87,0x3e33bb6e,0x3af55f53,0xbc8103d1,0x3bcaedbe,0x3c9dda6a,0xbd0032ea,0xbcf4512c, +0x3d0b257a,0x3e67bebe,0x3ea9c410,0x3ce2d3c2,0x3e18618b,0x3f20a721,0x3e931b44,0x3e71f650,0x3dd0d233,0x3e2b8139,0x3e2c5d8f,0x3e31d305,0x3e2fb2c2,0x3e31f7ea,0x3e332c7c,0x3e2ee651,0x3e318472,0x3e307b05,0x3e2d51c9,0x3e2bbc76,0x3e2a7889,0x3e237c71,0x3e2455aa,0x3e1f24cb,0x3e1f0b89, +0x3e21f879,0x3e0a8881,0x3e8a60fd,0x3ea08713,0x3ea0571b,0x3e77f3c7,0x3e9e8be3,0x3ea4311f,0x3ea350fb,0x3e9fd8c7,0x3e9a4b20,0x3eade564,0x3ead0f03,0x3eae199e,0x3ea92c13,0x3e717c25,0x3ea69bda,0x3eb2db6a,0x3ef512ba,0x3e7fbe0e,0x3e5e79e3,0x3e68855c,0x3e7cfae7,0x3e788a54,0x3e81937f, +0x3e80ad89,0x3e6bbcd5,0x3e7e4ae0,0x3e739987,0x3e697c65,0x3e6ad2a3,0x3e66b07f,0x3e4959c5,0x3e575805,0x3e46766c,0x3e45374a,0x3e3b8720,0x3e220a68,0x3ea8b9f5,0x3e8c583e,0x3e8d51bc,0x3e94b8ae,0x3e663441,0x3e851e3b,0x3e88b3ab,0x3e9923ef,0x3e850567,0x3e975ff9,0x3e18d232,0x3e8850ea, +0x3e932aa7,0x3e94595a,0x3ea67b71,0x3e91c1cc,0x3ecf84b7,0x3e4e4951,0x3e61a10b,0x3e88dd00,0x3e94fa3b,0x3e9a7516,0x3e953e48,0x3e974332,0x3e9424ed,0x3e90a9fa,0x3e916262,0x3e918a32,0x3e86e33a,0x3e742143,0x3e6628d3,0x3e506b0c,0x3e43768d,0x3e45f53f,0x3e1a9fb2,0x3e5c576e,0x3ea2f297, +0x3e6fe1ce,0x3e640fef,0x3e7283bb,0x3e488275,0x3e510a64,0x3e2f98a3,0x3e101445,0x3e7e4cc9,0x3e26fcc5,0x3e7357bc,0x3e514af0,0x3e5f5934,0x3e7ce28e,0x3e9d2f72,0x3e67fb99,0x3ece4bf9,0x3ea65a33,0x3e4651b5,0x3e932c50,0x3ea5820d,0x3ea8eeb9,0x3eaa7f61,0x3ea00cc5,0x3ea0071b,0x3ea09c13, +0x3e9ce7ae,0x3e97a6a5,0x3e90736d,0x3e7c4dec,0x3e5b6c71,0x3e4af6cb,0x3e36e141,0x3e280a95,0x3e0fb75d,0x3e220113,0x3e4a9868,0x3e044020,0x3e2b9ba0,0x3ddcb307,0x3e0d320e,0x3db83a99,0x3e102d24,0x3dd7b115,0x3dfd51da,0x3db0db1d,0x3e088149,0x3e0da2ca,0x3e5ebc7a,0x3e4bad17,0x3e60861b, +0x3e6468c5,0x3e8c65f2,0x3ea524fe,0x3e4057a5,0x3eab582f,0x3ebd34a4,0x3ec7e1bc,0x3ecb00ec,0x3ec59150,0x3ebe6304,0x3eb6be99,0x3eb9786b,0x3eb76796,0x3ea3d40d,0x3e8d90b8,0x3e769de4,0x3e57e4c6,0x3e39c764,0x3e2d778e,0x3e115662,0x3e18d74a,0x3e62305c,0x3dfd28af,0x3de21d2d,0x3da3a1be, +0x3d4674a4,0x3d45b4af,0x3ce2df14,0x3d07c4d2,0x3d3e52ef,0x3d611259,0x3d70b053,0x3dcecb89,0x3e03c9b4,0x3e1936f2,0x3e38d8cd,0x3e92dd4a,0x3edd8330,0x3eb15dff,0x3e34b97b,0x3ead1495,0x3ecdb73f,0x3ed06d07,0x3edc1d53,0x3ee99927,0x3f041f9b,0x3f08049c,0x3ef7216c,0x3ee3b302,0x3ee4909d, +0x3ee6ad76,0x3ec81eae,0x3ea9b140,0x3ea52a04,0x3e98deac,0x3e781715,0x3e53e90c,0x3e632e61,0x3e0802c0,0x3e102fd1,0x3dc0fef3,0x3db3547f,0x3d6dfa78,0x3d884be9,0x3d711409,0x3d9b9a1b,0x3d984785,0x3dc77234,0x3e0604c3,0x3dfa6022,0x3e5239b4,0x3e9ad23c,0x3e7b2425,0x3ef11cf4,0x3eb4f784, +0x3e73fa62,0x3ecd4e52,0x3eefa9ab,0x3ef41410,0x3f0a5496,0x3f0d3edc,0x3f1c9e8d,0x3f1847c3,0x3f1910b4,0x3f1554e0,0x3f00237e,0x3edced27,0x3eb48c62,0x3e9eea60,0x3e81042b,0x3e8d2fc7,0x3e68e9ce,0x3e89c7e2,0x3e94d7a6,0x3e60d913,0x3e1bc93f,0x3dda1721,0x3da2cd26,0x3d7d09bb,0x3d79ba4b, +0x3d81266f,0x3d9bfded,0x3db2949e,0x3dc54fa9,0x3e18a47e,0x3e4f4c21,0x3e5d1c3f,0x3e88f3ec,0x3eca6838,0x3f14be28,0x3eda0c57,0x3e765622,0x3eab061e,0x3e84c34a,0x3ece0f22,0x3ee8bfe6,0x3ef58465,0x3f1e82d9,0x3f26f74a,0x3f11de02,0x3ee8a02d,0x3eb0ddcf,0x3e81c767,0x3e5f543f,0x3e6b8485, +0x3e62586e,0x3e790440,0x3e405ca1,0x3e7e24cf,0x3e8d6e3a,0x3e5abec5,0x3e606924,0x3e1092b0,0x3deea8df,0x3dd4e6ea,0x3dbe0025,0x3dcc8e0b,0x3e027f3e,0x3dda4183,0x3e02e658,0x3e13ba38,0x3e62fc5c,0x3e8291d7,0x3ec0c3ae,0x3ec5691b,0x3f234f6e,0x3eea167a,0x3e15e480,0x3e6262e6,0x3e571c72, +0x3eac8559,0x3ecbbcad,0x3f06506c,0x3f0c4830,0x3f0da888,0x3ee24397,0x3eaac50c,0x3e7afeaf,0x3e3049ae,0x3e45b940,0x3e434659,0x3e5116c5,0x3e4edbe5,0x3e1c69a4,0x3e712490,0x3e954aee,0x3e5b2226,0x3e70d0ea,0x3e3ae3ce,0x3e1d3677,0x3e07ea99,0x3ded1e73,0x3de6cf5c,0x3e4e807d,0x3e078a55, +0x3dff66a9,0x3e21859e,0x3e7df0f3,0x3e7406e1,0x3ed5310b,0x3e9005e8,0x3f248cc9,0x3e194091,0x3e156ea5,0x3e77304a,0x3e930aa2,0x3ed56aa6,0x3f05507f,0x3f1c92bd,0x3f10c1ec,0x3effd2ff,0x3ed86e98,0x3ebc3f40,0x3eabe17c,0x3e9bc9a6,0x3e905c1f,0x3e80e4a9,0x3e4cd0be,0x3e59c3e4,0x3e329c22, +0x3e924d6b,0x3e95d742,0x3e8c46a8,0x3e7aac69,0x3e62bfdc,0x3e2a4266,0x3e1e03ef,0x3dd1b108,0x3e0cab84,0x3e8be4b9,0x3e125de8,0x3e1e91a7,0x3e1d35e6,0x3e531d63,0x3e6d8087,0x3ebc2665,0x3ebcfa30,0x3f17637c,0x3f08015e,0x3e06823a,0x3eda08e6,0x3ec22dd4,0x3f0bd6cd,0x3f13db6b,0x3f1af049, +0x3f0cdbe7,0x3efc8ca4,0x3ebf4083,0x3ea5dbc1,0x3e93746d,0x3e868d75,0x3e8191df,0x3e8580c3,0x3e7b5d73,0x3e984275,0x3e8dcdc7,0x3e9d6160,0x3ec71307,0x3ea189c5,0x3e78f3bf,0x3e76b483,0x3e5693f5,0x3e2b1fe6,0x3e1d1175,0x3e23c9dc,0x3e49ca90,0x3e487dfd,0x3e4d6eec,0x3e7b11c1,0x3e580862, +0x3e976e34,0x3ebadfae,0x3e742657,0x3f2fcab2,0x3e9d5afd,0x3ec412e2,0x3efb7ae8,0x3f04fdaf,0x3f1a15ad,0x3f1f33cc,0x3f17b7b9,0x3f1ae816,0x3f13f3ee,0x3f096524,0x3eee173d,0x3ec316f6,0x3eabb3a6,0x3e8f31b2,0x3e897f18,0x3e817d08,0x3ea9b753,0x3ea45099,0x3ec4c3d8,0x3ed87cf8,0x3e955229, +0x3eb9f295,0x3e8364fc,0x3e66c95e,0x3e3d933b,0x3e36915a,0x3e394f3d,0x3e656f7b,0x3e52dfe8,0x3e6c957e,0x3e72a638,0x3e9ee175,0x3e9f0e18,0x3ec23687,0x3ed420e3,0x3f0e5da6,0x3f095a63,0x3ed70cc1,0x3f04d3a2,0x3f0b9f83,0x3f0e3d03,0x3f0f5914,0x3f0dfd53,0x3f093e92,0x3f051526,0x3efcdb4d, +0x3ee01a6d,0x3ed0182b,0x3ebb960b,0x3eb16d45,0x3eb5b484,0x3eb22a6d,0x3ebd6f4f,0x3eb05439,0x3eb8524c,0x3ed9c491,0x3eb13851,0x3eab9370,0x3e99bed4,0x3e80b653,0x3e68753c,0x3e7d3396,0x3e6745f6,0x3e7ad5dc,0x3e7d11f9,0x3e85b83e,0x3e71b154,0x3e99e35f,0x3ea1fca7,0x3ed3dfa6,0x3edc2ee9, +0x3f09bd60,0x3eef0840,0x3ee72756,0x3f00f6aa,0x3f034c0b,0x3f008796,0x3eff6b51,0x3f00a314,0x3ef277c3,0x3ee73842,0x3ed6eb11,0x3ee7e312,0x3ee61959,0x3ee881bb,0x3ee69289,0x3ee0d2eb,0x3ed211b2,0x3ecede29,0x3eaf4190,0x3ecbc0bb,0x3ed75e09,0x3eb71be2,0x3ebdc4b7,0x3eac7965,0x3eab06ce, +0x3eb53395,0x3e954862,0x3ea2143f,0x3ebb5c18,0x3e93a979,0x3ea7dda1,0x3e9ecdaa,0x3ebb9580,0x3ed0d34e,0x3edac36e,0x3ed8a943,0x3f02c5a6,0x3eccbe0b,0x3ee6093c,0x3ed9c0c0,0x3ecfe63c,0x3eed0103,0x3ee9ce30,0x3ef55bdc,0x3ef8e9ec,0x3efdbe06,0x3f0015a7,0x3efc8484,0x3ef8b5be,0x3efef43c, +0x3eecc974,0x3ee1a664,0x3ee67822,0x3ee157fc,0x3ece0ee8,0x3edfe3cb,0x3ef4ad41,0x3ee659bc,0x3ee7fd25,0x3ee461e7,0x3ed51821,0x3ebd52f9,0x3edf4a6e,0x3edf0d61,0x3ee085cc,0x3eeeb267,0x3ec03dfb,0x3ee852ee,0x3ef51a9d,0x3ed58713,0x3ef44c75,0x3efa4ac6,0x3ee8f1f4,0x3ea4c00e,0x3eaecc87, +0x3eade53e,0x3eaae4bb,0x3ead598d,0x3eaa9a39,0x3ead49a7,0x3ea9b2c5,0x3ea90306,0x3ea95021,0x3eaa8889,0x3eabeda9,0x3ead8389,0x3eab2dd6,0x3eabe351,0x3eaa266d,0x3ea4c8a7,0x3ea138ea,0x3e963a57,0x3ed75fd9,0x3eeebc04,0x3ecd0a3b,0x3ed85c40,0x3eed19d2,0x3ed16dd6,0x3ed69a80,0x3ecceff0, +0x3ecce41c,0x3ed59edd,0x3ed92872,0x3ed756de,0x3ee8d42b,0x3ecdd8bf,0x3ed87378,0x3ef9d928,0x3f0d6ff8,0xbdab300f,0xbdc2504c,0xbe0b7d3b,0xbdadb453,0xbdbb5491,0xbdbec60e,0xbdcab4dc,0xbdd3b211,0xbde27ee0,0xbdcb1949,0xbdbe132e,0xbda6dc7f,0xbda1a9f8,0xbda12b70,0xbda21417,0xbda1a91c, +0xbda371d5,0xbd9e8306,0xbd9afc84,0xbd83e10b,0xbdb1cfb0,0xbbad8129,0x3d99bf14,0x3e94bf5c,0xbd40b524,0x3d7f3aa8,0x3e8ee57d,0x3e8bb5dc,0x3e8695a5,0x3e7247ca,0x3e8da3ae,0x3e87740c,0x3e6b9723,0x3dae8cdb,0xbd8a96e7,0x3e8038aa,0x3de38536,0x3e8f1b39,0xbd99f427,0xbdcb086c,0xbde596ac, +0xbdef2bd8,0xbe1a9426,0xbe2c0c19,0xbe3867e2,0xbe078334,0xbdfb5efb,0xbdd9de3a,0xbdba9825,0xbdb191a5,0xbdb98b32,0xbdb1c3ee,0xbdc25a8f,0xbdbbb3f7,0xbda1a11d,0xbd87825c,0xbdb0b973,0x3dedfce4,0x3d79211e,0x3de265d6,0x3d5509ae,0xbd0e3341,0x3de1ade0,0x3d251bf3,0x3dd001a6,0x3d2d846b, +0x3d899c48,0xbda8232d,0x3d9c55c9,0x3d86bf8e,0x3d216d43,0x3da4075d,0x3d0df756,0x3d53e80e,0xbe2e147e,0xbdf9b936,0xbe2077dc,0xbe2c1260,0xbe786385,0xbe83e86d,0xbe946cc6,0xbe60ffbb,0xbe2a2696,0xbde88395,0xbdcd423f,0xbdbc15dc,0xbdc44d75,0xbddb4ca9,0xbdce88d7,0xbdd44f5e,0xbd886311, +0xbd94b527,0xbae940f6,0x3df1b089,0x3db104de,0x3c7908f6,0x3db09f39,0x3d90ac4e,0x3cba5e79,0x3d724b9a,0xbda6b60f,0x3d854238,0xbbb8cd86,0x3d89915e,0x3c46dc84,0x3bdf80c9,0x3cdb24b0,0x3dab0d59,0xbdb6c83a,0x3e0f6c73,0x3d519bd6,0xbe120eb2,0xbde2b415,0xbe359488,0xbe92e002,0xbeaa48b9, +0xbeb718f7,0xbe753614,0xbe1fca17,0xbdfeaaba,0xbda9978c,0xbd918ae5,0xbda1b47e,0xbdbd235c,0xbdc833b4,0xbdc4f6a6,0xbd7d1101,0xbd005f50,0x3c29fb0e,0x3d9528e3,0x3d0a2739,0x3dc21a3e,0x3cbf6353,0x3da48011,0x3cf2075f,0x3dbafabc,0x3d91590f,0x3d8976c5,0xbab2c046,0x3d3f08b2,0x3c2a08cb, +0x3dd5fd6d,0x3d964c44,0x3bb45c94,0x3c3cc62c,0xbd62f5bb,0xbd833212,0xbe254329,0xbe3b9cc4,0xbe7bbca8,0xbec84039,0xbeeaf61e,0xbefacfbe,0xbeb04891,0xbe648e83,0xbdd91586,0xbda9d7e5,0xbd9f2e92,0xbdba89b9,0xbdee619a,0xbdeed1e5,0xbdd1b3ea,0xbd6e38bc,0xbc8eff99,0x3d08d847,0x3e22de80, +0x3dbf5cb6,0x3da826eb,0x3d8a9f0e,0x3d3297b9,0x3d50a054,0x3caf2a23,0x3cef8f36,0x3cc1874a,0x3d355573,0x3bb7dfe6,0x3d7af3a9,0x3d579670,0x3cb0e469,0x3d42723d,0x3d948c2e,0x3d8205ff,0xbe4aadeb,0xbe8b4887,0xbe956116,0xbeaad4a2,0xbebb0c0b,0xbec4849d,0xbee0c82b,0xbeed410e,0xbecfe308, +0xbe522372,0xbe8a4880,0xbe80eddd,0xbe699df6,0xbe70da65,0xbe6cdd17,0xbe4c1c22,0xbde02ffb,0xbd68bbe8,0x39aa2258,0x3df44c69,0x3d6ea853,0x3dcca6ae,0x3d334fc5,0x3d9d02ae,0x3d3dc508,0x3d926e24,0x3d4fb640,0x3d032a5a,0x3caf5f33,0x3c2e5497,0x3d0bb2e8,0xbd025d3b,0x3bde1e02,0x3ded5140, +0xbe1b8d4e,0x3d1922ca,0xbe13ab58,0xbed971e4,0xbef202f0,0xbedbecdd,0xbee3240e,0xbef79b82,0xbf030869,0xbf0085d5,0xbee5b74e,0xbea467c9,0xbebbfd35,0xbec1eeda,0xbeda83d3,0xbec2b1e0,0xbe98f2e7,0xbe812fe7,0xbdf40bce,0xbd994c8f,0x3d127be1,0x3e39558d,0x3dbb6c35,0x3d511177,0x3d23ee7d, +0x3cc2c385,0x3c89b6f0,0x3c8de171,0x3d302bc2,0x3da608ad,0x3d815473,0x3d571cfb,0x3dca5d74,0x3e10090b,0x3dbf339f,0x3d0e8e88,0x3e2cfcd9,0x3e17ac54,0xbe4cef7f,0xbf21467c,0xbf03a048,0xbf067161,0xbebf6085,0xbeac3ec6,0xbeba91a7,0xbeb163b5,0xbebf60fa,0xbefc1551,0xbf0cf7e8,0xbf1e9c81, +0xbf176969,0xbefbe1b0,0xbed18424,0xbea8ad94,0xbe39493a,0xbdda0f41,0x3c1e0419,0x3dae7d3c,0x3ddeda84,0x3e0b568f,0x3cbbce0a,0x3d709880,0x3d78a41a,0x3dcdb76c,0x3d88a753,0x3dd0da21,0x3dac7a9c,0x3db2855c,0x3de373d6,0x3d284492,0x3d517cbf,0x3d465462,0x3e3d845a,0x3dd2aa86,0xbe5c2c2e, +0xbf0aee95,0xbee1593e,0xbe62bb54,0xbe67b184,0xbe43c410,0xbea6dd08,0xbe97ad38,0xbed0057f,0xbf17fba8,0xbf29596f,0xbf2a1d16,0xbf1a3a11,0xbf046362,0xbecaf512,0xbe9f344c,0xbe300ca2,0xbe0bc1b3,0x3d069dd4,0x3d9ec94a,0x3df9dcdd,0x3d8f2ec5,0x3e01d9b8,0x3d633abc,0x3dfc268b,0x3db3370e, +0x3deb2c99,0x3e60087a,0x3d61a01c,0x3dcda8c8,0x3d90a648,0x3e39949a,0x3d3a3493,0x3e1782ea,0xbd964756,0x3d6b35db,0xbedf15a7,0xbebda55f,0xbe962c91,0x3def5b4b,0xbd98164e,0xbe31f59c,0xbea841c9,0xbec0882f,0xbeeb76c9,0xbee9c9e1,0xbf04761e,0xbf0a6644,0xbef5c616,0xbed8fc00,0xbea9623e, +0xbe571da0,0xbe1281ec,0xbdba4c13,0x3a7038d1,0x3dd67ec5,0x3d25685a,0x3e393b70,0x3dd49415,0x3da3d8a3,0x3dc5c16f,0x3d5a32b8,0x3d90ffe9,0x3e48b8eb,0x3df59eb8,0x3df28588,0x3dc99d0c,0x3dd994ca,0x3a03e97a,0x3e5d758f,0x3d5773ac,0xbe488551,0xbe611758,0xbeb8db0d,0xbe6ed831,0xbe5857fa, +0xbdd81795,0xbdc34a40,0xbe7db08d,0xbe872103,0xbebdf26e,0xbf0373d3,0xbef42755,0xbee4c7b7,0xbec8de7b,0xbe8763fa,0xbe33a46c,0xbe012ccb,0xbdfae53a,0xbdb72b40,0xbda07f3e,0x3e41a4e8,0x3e7de439,0x3dea3c4f,0x3e461875,0x3e009799,0x3e0c4d09,0x3e237384,0x3e02c7ba,0x3e4b7186,0x3e061d0d, +0x3d90c19a,0x3d36d224,0xbc96a05e,0x3e71b78d,0x3c4024ce,0x3ca3468c,0x3e834ab6,0xbe8a0545,0xbe6a7776,0xbe0fbf98,0xbcf5ed32,0xbd5f7d3b,0xbda8f916,0xbe2c9f90,0xbe653cac,0xbe708352,0xbe7f14a2,0xbe926cd1,0xbe92b44a,0xbe748376,0xbe4a3c4f,0xbe121b7a,0xbdc7a3c9,0xbd6b8bcd,0xbe021e75, +0x3df69194,0x3e8c8682,0xbd732e4f,0x3e255ad7,0x3d94f010,0x3dece85d,0x3e5249c5,0x3d255740,0x3e1d8ae9,0x3dcf6d3a,0x3e57afb5,0x3e081d61,0x3dc51494,0x3e244ad9,0x3d618a0d,0x3dafacec,0xbd885c00,0x3e19c5b8,0x3d4fd5ad,0xbe175962,0xbd431645,0xbcdc5cdb,0xbd97bbd7,0xbde4d63e,0xbe19854d, +0xbe245652,0xbe273d80,0xbe2ee7a0,0xbe1e7070,0xbe074e35,0xbdd28af5,0xbdab408d,0xbd060d0d,0xbbd049ea,0x3c30ea30,0xbd0bb1d0,0xbd515912,0x3e657b16,0x3e79c947,0x3db2b569,0x3e5a0c77,0x3e2b32fb,0x3e0d358a,0x3e8404ea,0x3e49a6fb,0x3e0cf675,0x3e1a3a0d,0x3e2acd0e,0x3e4224b4,0x3e068eee, +0x3e3e5852,0x3e53b1de,0x3e579084,0x3eb43ebd,0xbcd3f1a3,0xbd19d73e,0xbb129cc0,0xbcec1412,0xbd7d82d6,0xbdcad90d,0xbdfd59fd,0xbdfb27ee,0xbe0110d1,0xbe029ec3,0xbd9c786c,0xbd01fd13,0x3c8d717a,0x3cfde8e8,0x3d8050a6,0x3d7a3272,0x3d8ca546,0xbcac41c0,0x3e114166,0x3e095393,0x3e25dd50, +0x3de238e6,0x3e1db13c,0x3e3864e2,0x3e009005,0x3e31b764,0xbdaf3245,0x3e8c051a,0x3c90df85,0x3e589dc1,0x3df3f386,0x3dfee11a,0x3e6fe156,0x3e0856f9,0x3d400ecd,0x3ee90d14,0xbdc0e377,0xbcccba74,0xbd325bcd,0xbd184215,0xbccbfa45,0xbc885412,0xbcb98971,0x3c19579a,0x3cf89be0,0x3d5ddd8e, +0x3d88f2e8,0x3da0faec,0x3deff302,0x3dad51e9,0x3d6c1e37,0x3d38c1ee,0x3d54c85f,0x3c92a471,0x3c50ff69,0x3eba1f64,0x3e4efb28,0x3e68bca9,0x3def3fe0,0x3e1bfb1e,0x3dfb2849,0x3e26da49,0x3e296bcb,0x3e4d651b,0x3e36f67d,0xbc5c235c,0x3ea0c4d1,0x3e08626f,0x3e3653fe,0x3ee3d081,0xbcbf66c0, +0x3d9a6930,0xbdfc80e2,0xbd536758,0xbd909e1e,0xbd983eff,0xbda71a0b,0xbdaf3d92,0xbdb8ec73,0xbdac555b,0xbda060e1,0xbd918205,0xbd7e7762,0xbd60230f,0xbd438977,0xbd538c2f,0xbd3fd5db,0xbd4b7f04,0xbd6ec04b,0xbd3a7ccf,0xbe0394a9,0x3d617ccd,0x3e778f34,0x3efa2f77,0x3d5a412e,0x3e6c63b0, +0x3ef05b2f,0x3f01cc26,0x3eeec7c9,0x3ee79165,0x3f04e301,0x3f03056a,0x3ee0369c,0x3e372838,0x3ca6422e,0x3ef11a64,0x3e9b84e9,0xbd82763c,0x3d82ce3d,0x3cd78f7f,0x3df2f532,0x3d72422a,0x3d65f473,0x3d576247,0x3d6b80e7,0x3d6c0ceb,0x3d5daf3f,0x3d596911,0x3d53c23f,0x3d4684fd,0x3d431056, +0x3d49f6c2,0x3d5a3f0f,0x3d5c14c6,0x3d67efda,0x3d6d2215,0x3d7ffd03,0x3d6e9b03,0x3d9e8d6c,0xbcb7ca04,0xbd9888ab,0xbde11609,0x3ad44aac,0xbd907ba4,0xbdf0eecb,0xbdef6fa4,0xbde204be,0xbdcc0795,0xbe081eca,0xbe08bdef,0xbdf8bcd3,0xbdbcf86a,0x3c1eda91,0xbdea2e12,0xbde198ec,0xbe4bfd11, +0x3d3af0ac,0x3db7c092,0x3d96d008,0x3d5510b9,0x3d87b6d1,0x3d8bf7e7,0x3d75ddf5,0x3d77a09c,0x3d7863a9,0x3d6d8c0e,0x3d65f952,0x3d642ac2,0x3d876b4f,0x3d81d4cd,0x3d8d4fc8,0x3d98e4ad,0x3da0af53,0x3dafeb5b,0x3dd652b4,0xbd49ce15,0xbabff51b,0xbcc82f34,0xbd0aa084,0x3cb6cdf2,0xbca04157, +0xbb6356df,0xbd20c156,0xbc1616b0,0xbd052b15,0x3d99394b,0xbcbde902,0xbd09e112,0xbc969c5f,0xbd3e47ba,0xbc36161c,0xbd94c7d2,0x3e1e8989,0x3dd57577,0x3da25969,0x3d36342b,0x3d82ee9a,0x3d735561,0x3d192fb4,0x3d3682cf,0x3d1f6ab6,0x3d0849bb,0x3cc38b5d,0x3d054d6b,0x3d497e88,0x3d55c6bb, +0x3d7d0f4e,0x3da1c691,0x3da7ad14,0x3dedc2f9,0x3d7c6cb2,0xbd300173,0x3c694e87,0x3c9299ba,0xbba5ca24,0x3c83e37f,0x3bd69cfc,0x3cbfadda,0x3da8b16b,0xbca4525a,0x3d28b7f1,0xbcdda3c1,0x3cac31a8,0x3c70238f,0x3b1bdb05,0xbd5a3777,0x3d8c2341,0xbdd8a76e,0x3cd397b3,0x3e420c56,0x3dc3861c, +0x3d343b17,0x3d4ad177,0x3d6faeab,0x3cf08dbe,0x3d3ceed7,0x3d3c43d8,0x3d415e9e,0x3d2aa069,0x3d0b5ce5,0x3d874501,0x3d6e8c82,0x3d8c3400,0x3db0bd00,0x3ddddd69,0x3e0115da,0x3dd19e40,0x3d487e66,0x3da15363,0x3cca771a,0x3d88f23a,0x3cf7001f,0x3d617508,0x3caa4952,0x3d18b89d,0x3d1c6988, +0x3d6ed03c,0x3c383eac,0x3cf79aa5,0xbceb6558,0x3c0308e8,0x3cba6e94,0x3d6b7447,0x3df14411,0x3de5fe38,0x3e6f554e,0x3dd27a92,0x3d1bfeb0,0x3d54627e,0x3cfad96c,0xbb854eab,0x3cc431a5,0x3cedcb44,0x3c96e9be,0x3b3b8a61,0x3c9140cb,0x3d296c68,0x3d4d1806,0x3d75a359,0x3db9382b,0x3de47f64, +0x3e08b9f8,0x3de7622f,0x3c1f6df9,0x3d7eaa29,0x3d50f19a,0x3d4cfa6d,0x3d751a43,0x3d1b8da5,0x3d61fcb9,0x3d4dd610,0x3d635454,0x3d12301c,0x3d5f4a05,0x3d0be482,0x3d1d79b2,0x3d81c9cb,0x3d4a6135,0xbb13cdc6,0xbda62fea,0x3e086b20,0x3eb98f9e,0x3e558cc1,0x3e1f27ca,0x3e52bbb5,0x3e3933af, +0x3ddfc855,0xbdbebc23,0xbe5c73b8,0xbe4981b9,0xbe50fea4,0xbe7096fc,0xbe8a660f,0xbe5eff36,0xbe10e1df,0xbdeaf5a5,0xbd525780,0x3c9b6849,0x3d4fd5c1,0x3d267a69,0x3da34710,0x3d44081d,0x3d58d0a4,0x3cf8e37a,0x3d2dcca6,0x3d4c8d86,0x3d533cf4,0x3d190428,0x3cd43886,0x3cc59fcd,0x3ca54d08, +0x3dd06e7d,0x3d64b442,0xbd5fb1b6,0x3e221895,0xbd86a93b,0x3e0c60f7,0x3ea139a4,0x3e43b5e5,0x3e286a8d,0x3e223625,0x3d2fb29c,0xbd5259b3,0xbe57c321,0xbe8b3426,0xbe95e816,0xbea86513,0xbe8aaa31,0xbe387bda,0xbda751ad,0xbc7f17a1,0x3d4505ab,0x3d6f8724,0x3db08da8,0x3d41b5c1,0xbcf93336, +0xbb0d4af3,0x3cb954e1,0x3d116452,0x3d1d85b3,0x3cb6736b,0x3c98fc26,0x3d1ad441,0x3d999f27,0x3d68afa3,0x3d9cd7d6,0x3d8b2874,0x3c9c9a83,0x3d88b63a,0x3d97170e,0xbd1b1539,0xbe5a5912,0x3db1efde,0x3ef28532,0x3ecb1dbb,0x3f0c577d,0x3ebb7418,0x3e9440fa,0x3e38dd0d,0xbded7bc5,0xbe8e4825, +0xbe876b97,0xbe2d6cab,0xbd68d6e5,0x3d5946c6,0x3dd31ae0,0x3dc5f84b,0x3ded5d0b,0x3def63b8,0x3e381c57,0x3dadc5ae,0x3c708a18,0x3d170a20,0xbbc7fc2a,0x3d29739e,0x3d133a6d,0x3cfa397e,0x3d834bab,0x3d7e1688,0x3dcb5a3d,0x3d8bbc60,0x3d5ac387,0x3d8c1f10,0x3ca90954,0x3cb77378,0xbda09ac5, +0xbc8d52e1,0xbe4b930c,0x3dbf224f,0x3f2601a5,0x3f110f86,0x3f1fce91,0x3ee4352a,0x3ec094a3,0x3df37597,0x3d08b73c,0xbd7d4eb9,0xbccd1c39,0x3d9ea5a6,0x3e147aea,0x3e614de1,0x3e322e2f,0x3e2bfb2e,0x3e29d328,0x3e32b81c,0x3e7468da,0x3dd1cc54,0x3ce9b430,0x3d9d0fb6,0x3cc86ff0,0x3d07205c, +0x3d290368,0x3d521b23,0x3d8ae4e7,0x3da089f7,0x3e046efc,0x3d96490f,0x3d5394a1,0x3d7e5406,0xbced99a5,0x3d65f193,0xbdf5bb1a,0x3e1b2073,0xbe1e7d7c,0x3f108ac1,0x3f0a60a7,0x3ef223ae,0x3f0cf4db,0x3eaab3de,0x3e31c0d5,0xbd9c607f,0xbce58bdd,0x3b407883,0x3daa4432,0x3dc503a5,0x3dc56aeb, +0x3dc61750,0x3dbbe3fc,0x3dd6d635,0x3e4173fb,0x3e2f0752,0x3e3cc85b,0x3d8faf0b,0x3d22c0c8,0x3d11f32b,0x3d40af56,0x3d0e8843,0x3d4a7dec,0x3d72433b,0x3d4088f6,0x3d736f05,0x3df20795,0x3da676ee,0x3d7f1a46,0x3dd2a12b,0x3d8aa4fc,0x3dd4f130,0xbd091361,0x3d9f4d44,0xbd1adf90,0xbcbde8f1, +0x3ecad521,0x3e1bc1bf,0x3e45b0fb,0x3c01fa21,0xbd94f909,0xbe2f2e94,0xbe1f4f64,0xbdf11f06,0x3d6eb608,0x3e020206,0x3e1f5368,0x3e346602,0x3e4d61e4,0x3e32a9e8,0x3e315799,0x3d6aec55,0x3d51c8e7,0x3b9ac291,0xbd88b3ec,0x3b5db953,0x3ca02504,0x3cd2ef99,0x3ca2581d,0x3d59b06a,0x3db7924e, +0x3daad63b,0x3dbe8744,0x3d33e2ba,0x3d2dcd51,0xbc10b677,0x3dc11610,0x3c9154e0,0x3d5b146d,0x3e209de6,0xbe79167f,0x3e176261,0x3cebdb6d,0xbd2f6ea5,0xbcb3e686,0xbdf8ae1e,0xbe353f5c,0xbe4d6336,0xbe569dcc,0xbe54c6cd,0xbe1a097c,0xbdaa6e42,0x3d19a8ba,0x3db9581a,0x3e25be77,0x3e2dd630, +0x3e219de4,0x3cd44785,0xbc8a736a,0xbd994283,0xbd5fd983,0xbc8c2a65,0xbd51e356,0x3c1cf676,0x3d286e87,0x3db606a1,0x3d572e38,0x3d9db8f9,0x3cc24cc2,0x3d921d41,0x3d2a1005,0x3cfae14a,0xbcc5fca1,0xbc7b798e,0xbd05e173,0xbd143c19,0xbdfda39f,0xbe160b5a,0xbdb4595c,0xbe00a437,0xbe239b50, +0xbe21d6d6,0xbe1abada,0xbe155b61,0xbdec384f,0xbdc22827,0xbd329f69,0x3c47d374,0x3d6afc1f,0x3dd50665,0x3dee4bf4,0x3dc8b2f5,0x3d98dc30,0x3c834795,0xbbab9300,0xbd6bc9ab,0xbd95d550,0xbcc61fdd,0xbd23d980,0x3befa875,0x3d106d08,0x3d266947,0x3d78e9b1,0x3d5232e4,0x3c39386f,0x3d13dc1f, +0x3cf34d17,0x3d89ef36,0x3c43836b,0x3ca645bc,0xbc4ad148,0xbd20f41b,0xbd8a4b9e,0xbe071856,0xbe052481,0xbe144a35,0xbe10a7d1,0xbe04c09a,0xbdf24306,0xbde3caa0,0xbd80200d,0xbce115eb,0x3d16e42d,0xbcd2afa0,0xbc9378a2,0xbd114bb3,0xbd39c96f,0xbcfd2802,0xbc910376,0xbcbbe760,0xbc1044f2, +0xbd2383ac,0xbd7ebf5d,0xbcc51aa5,0xbd5ba12e,0xbce8f361,0xbc8ec575,0xbd542282,0xb9fc3bc8,0xbd805d0d,0xbc85c3a2,0xbc8e86c8,0x3b865d03,0xbb9d3e50,0xbcae511c,0xbc42eedb,0xbd0f7d20,0xbd9adf82,0xbd80b959,0xbe20adc1,0xbe173f86,0xbe0e4583,0xbe08709a,0xbe1e4d31,0xbe1f5aa0,0xbe29e5e9, +0xbe38eab0,0xbe445035,0xbe4fcf8c,0xbe35c850,0xbe242bd5,0xbe15d715,0xbe068968,0xbe079e7d,0xbe0d05f1,0xbe10467a,0xbe0aef2e,0xbe0e1a87,0xbd5a4e11,0xbd9c1314,0xbd9a15c9,0xbdce8acd,0xbd988ff9,0xbd865954,0xbdb35a87,0xbdc5b262,0xbdcbf7fd,0xbde7a1a3,0xbdeb7f81,0xbda9c64a,0xbe0db320, +0xbde658b3,0xbd810164,0xbe380c2d,0xbe181d20,0xbe015a13,0xbdee6466,0xbdf72ed0,0xbdecd205,0xbde9d087,0xbddf52bc,0xbdd8b253,0xbdc3fc27,0xbdb370c8,0xbdac56fa,0xbdb2b9a6,0xbdc17933,0xbdc97a5c,0xbdd289ed,0xbdd23cd2,0xbdca0baf,0xbdc187b5,0xbdb76d26,0xbdd155dc,0xbe04787e,0xbe019da6, +0xbc8daa47,0xbe0b7f35,0xbe0837f8,0xbd406d2c,0xbd350263,0xbd218dac,0xbd1464fd,0xbd00a456,0xbd13aec7,0xbd482ed5,0xbe076078,0xbe02c67f,0xbcea668b,0xbdf67d7b,0xbe48af8c,0x3e041f98,0x3e045e3e,0x3da8f229,0x3dc321db,0x3dc5bc62,0x3dc2a66a,0x3db814b6,0x3db1ebfc,0x3db28ee4,0x3da0ceba, +0x3d99e103,0x3d8e3aae,0x3d91948a,0x3d98097f,0x3d9f5462,0x3d9fbfc6,0x3da52a20,0x3da3e27d,0x3da4537d,0x3da26398,0x3d9a283a,0x3de0ce99,0x3dd566c5,0x3cd3024d,0x3de3c7ea,0x3ddf3d62,0x3d0cc1e0,0x3d1c3e42,0x3d1d2951,0x3d2cfd9d,0x3d3fdd25,0x3d452774,0x3d752201,0x3ddf512d,0x3dee3d3b, +0x3d26a081,0x3de050cb,0x3de84931,0x3e0a24ff,0x3df7a865,0x3dfaf193,0x3df78779,0x3df39b61,0x3df3ec7a,0x3df3295d,0x3da4786e,0x3d9c4f85,0x3d96c131,0x3d8fef52,0x3d9b53ec,0x3db4190b,0x3db358a9,0x3dd323e8,0x3dd083ec,0x3dd22778,0x3dc0dfc8,0x3dae3c8e,0x3dd1ae0f,0x3dbde50b,0x3d9b7fb4, +0x3ddf938c,0x3dd5bb03,0x3d912bc2,0x3dcdbe69,0x3dce3ef8,0x3dce6f5c,0x3dd4e9f3,0x3daa6412,0x3db29c79,0x3dc36157,0x3ddd70de,0x3de83acb,0x3df26085,0x3e468d4e,0x3e2b20fe,0x3e24c58d,0x3e35c7be,0x3e2ac983,0x3e291465,0x3e0b9549,0x3e121239,0x3dae905b,0x3d5831ac,0x3d017764,0x3d349fb6, +0x3d6469b9,0x3d9d2b3d,0x3dbf8334,0x3dd04626,0x3dda03e6,0x3dd97058,0x3db3f186,0x3dd036d2,0x3df6cb8b,0x3da179f3,0x3dcf927d,0x3db50a46,0x3d9c772c,0x3db724f9,0x3d971221,0x3dc810e1,0x3df09ef3,0x3dab561c,0x3dc7b514,0x3dc17f93,0x3dcb394a,0x3dde8061,0x3e00db9d,0x3e243afd,0x3e525d6c, +0x3e23d5c7,0x3e1d9d6d,0x3e20a6dc,0x3e212dd0,0x3e2b8bdb,0x3e1b8040,0x3e198ec4,0x3d4d2117,0xbbaebead,0x3b276bfc,0xbaff8aba,0x3c9a235b,0x3d397ef0,0x3d99b12a,0x3dcb9440,0x3dd56d2d,0x3ddd168a,0x3da7b409,0x3da485fb,0x3dbcf6b4,0x3d7333fb,0x3d7cbc34,0x3d7ad02b,0x3d8a8806,0x3d35be46, +0x3d8ffa70,0x3d6ed217,0x3d917da4,0x3d807665,0x3d877b13,0x3db5150c,0x3da069e5,0x3da6dcc0,0x3e17fc92,0x3e1eff93,0x3e7ffbcb,0x3e7b458f,0x3e404dc1,0x3e812426,0x3e744edc,0x3e6080e3,0x3e3f1e8f,0x3e3cb5ee,0x3d85f045,0xbb7f20e2,0xbd676308,0xbcafc8e5,0x3c29762a,0x3d6f3642,0x3dc10b25, +0x3de0b5ce,0x3de5c95f,0x3de0fa3e,0x3daeb9e0,0x3dab9f5b,0x3de85a5b,0x3d40e6d3,0x3d893c26,0x3d4e0983,0x3d551682,0x3d208a06,0x3d3a3077,0x3d50196b,0x3d85d4b0,0x3d4e2144,0x3d767449,0x3d8890a5,0x3d91ca75,0x3dcca2ca,0x3e073104,0x3e3efffb,0x3eb63272,0x3f0ca50d,0x3ecd83e3,0x3ed4beef, +0x3ec831e3,0x3eaa920b,0x3e85c387,0x3e6a0197,0x3deecc33,0xbca868f0,0xbe7a1c60,0xbe385783,0xbe27d718,0xbdaef2b0,0xbd40b179,0x3d6a7a3f,0x3dd5f83c,0x3dd8a678,0x3dcbdae3,0x3d6ff919,0x3d53ccc8,0x3d445886,0x3d8842af,0x3d45d8ae,0x3d2efb08,0x3cf2e75e,0x3d2cd4be,0x3d490a55,0x3d8c3ff9, +0x3d92d98f,0x3de5d61d,0x3e0e5005,0x3e524deb,0x3e86852a,0x3e78d492,0x3ec93817,0x3e9d066e,0x3ecc8597,0x3f16db48,0x3f22a721,0x3ee2b976,0x3e989dd4,0x3e894267,0x3eaaa547,0x3e6af1ae,0x3e2a6fff,0x3d66e45c,0x3e0a0a58,0x3e445fee,0x3e8b43a2,0x3e8d735a,0x3e705e6e,0x3e4afa9e,0x3e2566ca, +0x3de73f5a,0x3e073dbe,0x3d8249ab,0x3d709966,0x3d915873,0x3d82b74c,0x3d8410a0,0x3d44c4d5,0x3d7746fd,0x3d8f6437,0x3d8eb431,0x3d971f43,0x3d9a85df,0x3d993c51,0x3dabb065,0x3ddfb74f,0x3e2c7dcd,0x3e2600ea,0x3e9b8d70,0x3eec1e06,0x3f0945bb,0x3ebdc55c,0x3d95deea,0x3c9780b0,0x3d4dc8ba, +0x3e6267fb,0x3e444db8,0x3e5c1af8,0x3e7dfdb5,0x3e9b4775,0x3ea6eb8b,0x3eaa57e9,0x3eaa2d07,0x3eabfe4a,0x3ea9236d,0x3e8530ae,0x3e506104,0x3e2be3c1,0x3e18ae89,0x3db59a23,0x3d8f4a8d,0x3db4c5d7,0x3d8585a6,0x3ccd5961,0x3d43dbcf,0x3d28e9bf,0x3dd976fa,0x3da4a9ab,0x3dafe22a,0x3d79a74e, +0x3e069dba,0x3e12c461,0x3e685a0a,0x3e1ca092,0x3ecddf54,0x3ec31523,0x3d7c16ce,0xbde93bda,0xbf0e1078,0xbe80f2ec,0xbe431587,0x3d5e8df6,0x3dc99b60,0x3e499a84,0x3e87d35c,0x3eaddeb8,0x3eb0e086,0x3eadfa9d,0x3eb6171b,0x3eb4caeb,0x3ebc3152,0x3ea64327,0x3e884bfb,0x3e4eadd5,0x3e3ee05f, +0x3de37d57,0x3db0b5f0,0x3d9471f5,0x3d940ba3,0x3d028d2d,0x3d49e9e6,0x3d7e5c19,0x3e00177e,0x3d9572e9,0x3db23465,0x3db2306e,0x3deb5fee,0x3df2dda1,0x3e58f306,0x3e2f4ca0,0x3ed6923b,0xbd11b437,0xbe9cf3de,0xbeb9519c,0xbf401678,0xbecf4aa4,0xbe858da4,0xbd23279f,0xbc5d8b77,0x3da69354, +0x3e2751a6,0x3e803b5a,0x3eacf139,0x3eb36717,0x3eb277ce,0x3ea61417,0x3e8f51b3,0x3e8c3f39,0x3e6bc85d,0x3e57643e,0x3dee32be,0x3de720af,0x3d949768,0x3da60e9d,0x3da38680,0x3d95efc3,0x3db027ba,0x3d97de89,0x3d9bad30,0x3dabe888,0x3dc7d169,0x3dafc120,0x3dda9cab,0x3dfb2dd9,0x3e29c5bf, +0x3e179cef,0x3ea4b6a9,0x3e6ab40d,0xbee16f0e,0xbeb5b190,0xbec9f70a,0xbea79e1c,0xbe8c5760,0xbdea6d54,0xbc9b23cc,0x3d8e50f1,0x3e1e2bfc,0x3e49fd2c,0x3e87439f,0x3e901918,0x3e962aa3,0x3e996a74,0x3ea42c39,0x3e90a308,0x3e408399,0x3de79915,0x3d59cda3,0x3b4caef3,0x3d452cab,0x3c843e77, +0x3cc4785e,0x3cd17ed0,0x3d9d94ad,0x3d8f1f5c,0x3ce8ba49,0x3d5e7bbe,0x3d6ab0a8,0x3da2613e,0x3d859f84,0x3e0ab9c5,0x3e32b218,0xbb8a4fa3,0x3e40a0ae,0xbe0f62fb,0xbe425ac5,0xbe5170d9,0xbe9d9c79,0xbe5f0d7f,0xbe29cf24,0xbd812c92,0x3da064e4,0x3e2f0a6e,0x3e65ef69,0x3e8f624a,0x3e934dab, +0x3e8e072b,0x3e891168,0x3e7ba307,0x3e6cf704,0x3e187395,0x3e06f4f4,0x3d2945d0,0xbc487019,0x3d751355,0x3ca4e697,0x3cf895d3,0x3d1d096c,0x3d34688b,0x3d170c37,0x3d110327,0x3c579649,0x3c060e90,0x3cfc7489,0x3d9348ce,0x3d973b7c,0x3d1e2705,0x3d6cd1c6,0x3d99c17b,0xbc830a9c,0xbd20a7ab, +0xbe289b07,0xbe33d46e,0xbe61e696,0xbe0d91e8,0xbdaba576,0xbcdd1ac0,0x3d80d0c3,0x3dfed036,0x3e394e71,0x3e40f346,0x3e4cd84d,0x3e545b43,0x3e4303b4,0x3e26cc77,0x3e07911e,0x3dc36d41,0x3d9359f8,0x3d7ba188,0x3cb82574,0x3b871b60,0x3cfaf773,0x3c6550f7,0x3c452046,0x3cba192a,0x3cc19fdc, +0x3c4596be,0x3bb67a47,0x3bb3d8cd,0x3c104257,0x3d256fc7,0x3b35b9e2,0xbbf97f3a,0x3c70b077,0xbd186b00,0xbdb854b8,0xbde45316,0xbdf30071,0xbe0c9cf9,0xbe3daaf5,0xbe047976,0xbdbaa3e6,0xbd704e03,0xbd079589,0xbac83f89,0x3d21e248,0x3d3bcd2e,0x3d7fd6fa,0x3da6c0d3,0x3d46094c,0x3d060754, +0x3bfa14ea,0x3c1f378d,0x3befcbe3,0xbc1c5c45,0x3c12786a,0xbc83fdda,0x3bbad1fd,0xbbd5dec8,0xbb145d54,0x3c0f96f5,0xbc8a6315,0x3c873c22,0x3bf1ab1a,0x3b99f93c,0xbb824e0d,0xbc8210a3,0xbcc3181e,0xbc4db171,0xbd48d813,0xbd803cc9,0xbe07f20b,0xbdaeee56,0xbdda3bf7,0xbdd7cfb7,0xbdc462c0, +0xbe0930aa,0xbe23cd7c,0xbe3ba0f1,0xbe3b49ac,0xbe356fc5,0xbe3a65f8,0xbe376e1c,0xbe3a5a25,0xbe395b37,0xbe228218,0xbe082981,0xbe00f767,0xbded13c3,0xbdd2ba17,0xbdb43682,0xbddc1cd4,0xbda71e88,0xbd9d6836,0xbd68f502,0xbd6305b9,0xbd38cd52,0xbd3f0af9,0xbd2edc2c,0xbd8c227d,0xbd822a9d, +0xbd6f0a00,0xbda2a6bf,0xbd830139,0xbdc8b426,0xbdf7c21e,0xbd9a3fb5,0xbd861511,0xbd85d1d7,0xbd965204,0xbd951037,0xbd988c8c,0xbd96d592,0xbd88465b,0xbd8b0487,0xbd8582bd,0xbd8ac4ff,0xbd887dee,0xbd8279a1,0xbd7305ec,0xbd7120d5,0xbd70967f,0xbd80f978,0xbd7c0962,0xbd6915e8,0xbd6b5d71, +0xbd4e9036,0xbd3e82c4,0xbd8c0af0,0xbdfaf49d,0xbd2f2044,0xbd7fae08,0xbdeeef37,0xbdfe30a2,0xbdf74446,0xbdf09c8b,0xbdfa9f6d,0xbdf91055,0xbdf2d2c3,0xbd86c468,0xbd40e41c,0xbe069f9b,0xbdb8cb7d,0xbdd0ada5,0x3d42bd58,0xbc44e121,0x3aeeffcc,0x3ccc5700,0x3cbc0d24,0x3cac7de3,0x3c2c5112, +0x3c136649,0x3c27db80,0x3c8d0868,0x3cc40b47,0x3cf2efbd,0x3d042829,0x3d09142f,0x3d0ade59,0x3d07ec76,0x3d075497,0x3cfb3a97,0x3ce698a8,0x3ce6c4e1,0x3cc03244,0x3c9f4679,0x3d2868a9,0x3ddfa5f5,0x3c4bc1ca,0x3d15308e,0x3dd89d86,0x3dd84a47,0x3dd86020,0x3dc8c3b2,0x3dddf7ee,0x3dd15e8c, +0x3dbba724,0x3d267b60,0x3c06b44a,0x3de7a24c,0x3d738901,0x3e279853,0x3d4495d7,0x3cfbb8e8,0x3cd4238a,0x3d160035,0x3b68a64f,0xbbc7d5bd,0x3b88308d,0x3c87ee67,0x3cd8c962,0x3cf36583,0x3d17667d,0x3d3e4a60,0x3d493aa1,0x3d45da0b,0x3d4f9ff4,0x3d330ee5,0x3d1386c6,0x3d0d899d,0x3cf7500a, +0x3d806c46,0x3d5c68f1,0x3d93ad66,0x3d319328,0x3cce9794,0x3d8c3b2e,0x3d48cfe5,0x3d8061b4,0x3d4de42c,0x3d60ad94,0x3c883db1,0x3d855f5f,0x3d6d916c,0x3d6187a2,0x3d8dad7c,0x3d65f552,0x3d6421cb,0xbd22465d,0x3c7894b5,0xbbc05881,0x3ac6b80c,0xbd6f91d0,0xbd8d9615,0xbd3ea5f6,0xbc81cf36, +0x3c4ce12a,0x3cf3f121,0x3d51e919,0x3d765b2e,0x3d7be61f,0x3d9220bb,0x3d8480d2,0x3d697dd0,0x3d2b8982,0x3d0d550e,0x3d095940,0x3d50286b,0x3d618a45,0x3d1e46f8,0x3d4ce5b3,0x3d5dc2c9,0x3d122c6b,0x3d6b5688,0x3cc74295,0x3d347c2d,0x3d1bd817,0x3d493c76,0x3d108cf9,0x3d2dd33c,0x3d4b4f72, +0x3dc8d902,0x3cef5966,0x3e1e74f1,0x3da7fe87,0xbd396313,0xbbc2c136,0x3ba74ef7,0xbd82865b,0xbdbab940,0xbd422363,0xbcb564c5,0x3b1d7950,0x3ae59f37,0x3ce80506,0x3d5f3aeb,0x3d7ed9ce,0x3da0c602,0x3d9ca2c0,0x3d81d8b7,0x3d31bf89,0x3d277ac8,0x3cee83d6,0x3d5d1728,0x3d61fc3c,0x3d80e2e8, +0x3d52d86b,0x3d57a41c,0x3d20fdb6,0x3d46815d,0x3d79ce5c,0x3d7dc887,0x3d02740e,0x3d130fb7,0x3d1a258a,0x3d83788c,0x3da0b399,0x3d5a1c83,0x3d068e51,0xbd15f595,0xbcee0d4b,0xbdb88415,0xbd8eee67,0xbd8db6e6,0xbe248eab,0xbe2dce47,0xbde5fc64,0xbd82217e,0xbca4fdc1,0x3c64a78b,0x3d36f5cf, +0x3d805bcd,0x3d964f94,0x3dbb7e93,0x3dc26d82,0x3d92c6aa,0x3d443e03,0x3d278ecf,0x3d21e204,0x3d52f9c6,0x3d859fc6,0x3d40b261,0x3d63a6d5,0x3d525c79,0x3d3b8c7d,0x3d5a7144,0x3d49a86f,0x3d58463c,0x3d1974ad,0x3c6f5001,0x3d4b5978,0x3d75bcd1,0x3d3a4d7b,0x3da2ee4a,0x3dea555b,0x3e93ab2f, +0x3d2423e7,0xbe4dcb99,0xbe24aaea,0xbe702aee,0xbecf978e,0xbedc6c32,0xbec1c866,0xbe1a8293,0x3d019316,0x3dad07ac,0x3de2658d,0x3e289dd6,0x3e62b823,0x3e74f3fd,0x3e4e6c8c,0x3e4c9497,0x3e0de955,0x3dd1dbb4,0x3da9f4b2,0x3d69a3ab,0x3d98ce15,0x3d64227a,0x3d736bd0,0x3d46e6df,0x3cdb8683, +0x3d4547cd,0x3d6737dc,0x3d97dbd1,0x3d756f7d,0x3d9b1849,0x3de7b5d5,0x3cf63687,0x3d98f39f,0x3e5ec9b7,0xbca67b30,0x3e0a2323,0xbddebe79,0xbedae635,0xbeec6e27,0xbf126e19,0xbf0359de,0xbecca311,0xbe81f859,0xbd99d120,0x3d254f4c,0x3e0583c5,0x3e2d7bb7,0x3e2e3e14,0x3e10991a,0x3de9fc32, +0x3dd1e9ce,0x3dc396f0,0x3d710ca2,0x3d7ab7f4,0x3d89aa0d,0x3dc02255,0x3da547e5,0x3d8019ad,0x3d63c78a,0x3d39d85b,0x3d4150a0,0x3d87fd7c,0x3d8a59bb,0x3d64e857,0x3d7acc0d,0x3d3efca7,0x3d2cb623,0x3df55652,0x3d980d06,0x3d003301,0x3e3fd045,0x3e863e8e,0xbe75d33b,0xbf72d54b,0xbf546c75, +0xbf7e198e,0xbf3a057f,0xbf1f4813,0xbeff1bd4,0xbe68fca2,0xbd5b4fb9,0x3b4d6236,0x3c20e6df,0xbbf33b68,0x3b54fa2e,0x3c26609b,0x3cec1878,0x3c7c5599,0x3cef3da5,0x3c8783fe,0x3d9f3dfc,0x3df91d57,0x3dd4353e,0x3dcfbda7,0x3d768db3,0x3d5dc01b,0x3d23e5af,0x3d0fa338,0x3d1a282c,0x3dd3f60f, +0x3d850723,0x3d8ad117,0x3d660034,0x3d2f021a,0x3cc29d90,0x3dcb03b5,0x3dbb3249,0xbba1c426,0xbee047bb,0xbf8cfe91,0xbf72d753,0xbf55d6dd,0xbf3a844a,0xbf2f0c2c,0xbf0dc9e6,0xbede0e1d,0xbeb30c02,0xbea4952a,0xbea689e6,0xbe8e0c75,0xbe65255f,0xbdf0cb0b,0xbd7a19bf,0xbd1a4d1a,0x3ac10a6b, +0xbbbc24dd,0x3da46dc2,0x3dc1ca47,0x3da2f556,0x3d8b4ae6,0x3d9c5e71,0x3d7c13e4,0x3ce7a2f9,0x3d25bf7a,0x3d459017,0x3dad61bd,0x3d043271,0x3d9c9414,0x3cc6fa95,0x3e1a0b77,0xbca83b01,0x3e03bc09,0xbe8591cd,0xbe56bfcb,0xbf7deabf,0xbf515c14,0xbf485a1a,0xbf23138c,0xbf236158,0xbf1b8075, +0xbef0bbc1,0xbeeefb32,0xbeef107d,0xbee839df,0xbee3bf61,0xbeb8d0e8,0xbe82e08f,0xbe0e8b22,0xbd4a1bac,0xbd31518b,0x3c72d812,0x3d20eb58,0x3d839409,0x3d802836,0x3d1a0911,0x3d724076,0x3d4b1349,0x3d67e2e2,0x3d39c9b6,0x3db7694f,0x3d800984,0xbd05e1d4,0x3d2e8327,0x3d44e3f9,0xbc90937d, +0x3acb729c,0xbe028e4a,0x3d66c797,0xbe4c64c5,0xbf0a2b76,0xbee9626d,0xbf19fb71,0xbf0c11b3,0xbf02d8b5,0xbebc8001,0xbe6d0ac7,0xbe25ef1b,0xbe022a2f,0xbe1cfcfe,0xbea3cd36,0xbebae790,0xbea4f8a7,0xbe8b7331,0xbe6f353b,0xbe22fc43,0xbd95742c,0x3ce81421,0x3d390ae2,0x3ce6869b,0x3da6e44a, +0x3d8e4af1,0x3d867d57,0x3d56f0d2,0x3d499bf0,0x3cba5526,0x3d36a7cb,0x3d12318e,0x3b9f5031,0x3d01b0a6,0xbc1a22a0,0xbcca2a2d,0xbe109812,0x3cb00f0f,0xbe82225c,0xbe59249e,0xbdfd3eef,0xbee6aad3,0xbeb8f32f,0xbeb1fdc5,0xbea778d8,0xbe71d4d5,0xbe19db77,0xbdb71eab,0xbdc6242e,0xbd8b5542, +0xbda2b09b,0xbdb95f68,0xbe0e950b,0xbddf721f,0xbe00c6a1,0xbdccefa7,0xbd8bb7e0,0x3c1d732c,0x3cb3bbfb,0x3d978134,0x3d52e816,0xbbcfaadd,0x3cd7fd96,0xba7418e9,0xb80c1a87,0x3cd3aeca,0x3b86e1c5,0x3c8cffec,0x3b4ee542,0x3c637596,0x39e3fa2b,0xbb08e4ee,0xbaedffcf,0xbd8920b5,0xbdc8ff7a, +0xbe4f5d3b,0xbe2e9461,0xbe2aa3f9,0xbe4642dd,0xbe530640,0xbe3732d4,0xbe2f4902,0xbe27900e,0xbe15450b,0xbe274ed5,0xbe1dd9d9,0xbe36f9cc,0xbe436a3a,0xbe5123b3,0xbe469f03,0xbe3e8689,0xbe3030f7,0xbe0d5384,0xbdce48e6,0xbda0806f,0xbd4fc06b,0x3c48b6b7,0x3bfc1715,0xbcd9715b,0x3aff0306, +0x3b22fc7d,0x3bd58413,0x3c0677dc,0x3aeedfea,0x3b22e9ba,0xbc6e90ce,0xbc62b916,0xbc2c5011,0xbd4abe78,0xbd5c06d3,0xbdf1d342,0xbdd4c6c7,0xbdfe7c82,0xbe006106,0xbde19860,0xbdf9bc4c,0xbe0fc8da,0xbe1d69ce,0xbe33ee71,0xbe4817c4,0xbe5e6514,0xbe6d391a,0xbe9160e2,0xbe4d74be,0xbe46dde4, +0xbe17bc18,0xbe120cc7,0xbe16cabb,0xbe11a8de,0xbe024339,0xbe1c4f60,0xbd9e019c,0xbd5db4a2,0xbd1ea5ab,0xbd31cedc,0xbca734d1,0xbc5c2cc6,0xbcef2d8f,0xbbbae80a,0xbd41919d,0xbce402af,0xbd0d2a8f,0xbcfce9a9,0xbd0e1d49,0xbda697ad,0xbdb25c59,0xbdfe9043,0xbde4d63e,0xbd9e6f7a,0xbd09b88d, +0xbd75f435,0xbd8294b4,0xbd7a681c,0xbd803e42,0xbd620eb7,0xbd6bf4b9,0xbd2e9ec1,0xbd0f5598,0xbca0104f,0xbd39d915,0xbd6f5ce3,0xbd96f05e,0xbd8fa8eb,0xbd7246b9,0xbd88a694,0xbd4f1ca5,0xbd0e2585,0xbd86e76b,0xbd9a5e4b,0xbd965f97,0xbd8fb271,0xbda7cd11,0xbd920a94,0xbd5baedf,0xbd79fbba, +0xbd686631,0xbd45d736,0xbd520e54,0xbd022102,0xbd09563b,0xbd20d3cd,0xbce74bda,0xbd32630b,0xbd6a89eb,0xbdb5cf6d,0xbd1c42a4,0xbd33c1bf,0xbd354bae,0xbd4763b6,0xbd65df29,0xbd825a0b,0xbd966bb2,0xbda1e813,0xbdafbdd5,0xbdb6505b,0xbdaed0ed,0xbd9e0c14,0xbd99b9e6,0xbd8a0e60,0xbd869c2c, +0xbd877432,0xbd87fb22,0xbd77de5f,0xbd65e261,0xbdabab6e,0xbda776d9,0xbd628d41,0xbd8d49fd,0xbd8e94e4,0xbd41740a,0xbd37d429,0xbd41f598,0xbd4d9444,0xbd579df2,0xbd7352da,0xbd7df456,0xbda18e98,0xbd949716,0xbd9b4717,0xbdb91ef7,0xbd84a992,0x3e15519f,0x3dbd62bc,0x3db45354,0x3d9f1373, +0x3da03ba0,0x3d9f1141,0x3db75f03,0x3dcf23da,0x3de39df8,0x3dee8369,0x3df8a19c,0x3df4acfd,0x3de6c117,0x3ddfb01b,0x3ddd55ca,0x3dd4835a,0x3dd4b429,0x3dccf1f7,0x3dca64d7,0x3dbf3ae0,0x3dcca9fa,0x3dadfe4a,0x3d5eb856,0xbc3d9396,0x3dc646f5,0x3d6dde1a,0xbc389552,0xbc272a08,0xbbe9f853, +0x3ad3bbd6,0xbc483ce0,0xbc2da2f1,0x3b111094,0x3d478f07,0x3dc74412,0x3baf8759,0x3d20db5f,0x3cb85e01,0x3dc772ee,0x3db19373,0x3db4cbab,0x3db62936,0x3ded5665,0x3e127585,0x3e2fd974,0x3e4251df,0x3e545d7c,0x3e425906,0x3e34a2bf,0x3e2c0c6b,0x3e284075,0x3e10db4c,0x3e10eaaf,0x3e05d92d, +0x3df352c0,0x3dea65fc,0x3df7a844,0x3d81c123,0x3db00242,0x3d81a725,0x3d9ad128,0x3dcadb01,0x3d6f8f2a,0x3db4180f,0x3d8d8b70,0x3da2d02d,0x3d916cef,0x3dd29a3e,0x3d68b92f,0x3d8948b1,0x3d97b45b,0x3d8928cd,0x3d6f4079,0x3cfb2589,0x3d3e9618,0x3c82394d,0x3cc85984,0x3cc4f289,0x3dbe7592, +0x3e197a95,0x3e513855,0x3e83c6d9,0x3e8cd27e,0x3e8713d8,0x3e6e0f68,0x3e557ba4,0x3e413c66,0x3e312659,0x3e1d3baf,0x3e162cd7,0x3df74325,0x3def5e3e,0x3dc56177,0x3d888fa5,0x3da79fac,0x3dc240ba,0x3d937cdc,0x3d8a51d5,0x3d9eabad,0x3d8d47eb,0x3df08c5b,0x3d9bdabe,0x3da56d20,0x3d4b0d81, +0x3d89ff53,0x3d865c0c,0x3d83628c,0x3d725e08,0x3d96b5de,0x3baaf4d8,0x3cab146b,0xba9bea1c,0x3c4ea4b1,0x3c84bb4b,0x3dcbd12a,0x3e38452e,0x3e813783,0x3eb1d66b,0x3ec10e3f,0x3eaa5cae,0x3e9b2c1b,0x3e83c466,0x3e7dda39,0x3e4b2d3c,0x3e2f69e9,0x3e1dcc80,0x3df716ac,0x3de6f935,0x3dc8fa3e, +0x3daa1c7d,0x3dc032a8,0x3d951f63,0x3d9f20f4,0x3d7530a7,0x3d852a26,0x3d7bb50c,0x3d766007,0x3d8aacec,0x3d61b747,0x3d1d673b,0x3d0aec45,0x3d286644,0x3d4e19e3,0x3d292fc3,0x3c3073f5,0xbd14bc42,0xbd4db297,0xbda2fcf4,0xbdb51f13,0xbdbb4b5b,0x3d8539f2,0x3e47c20a,0x3e94ff52,0x3ecc2cd5, +0x3edc7288,0x3ecb6f27,0x3ea7ab06,0x3e8e0898,0x3e75141a,0x3e5a3d84,0x3e3ded6e,0x3e29f71b,0x3dffdd0f,0x3de2edf9,0x3db7264a,0x3d6dcd8d,0x3da98cfb,0x3d971a0a,0x3d86bf17,0x3d77abc0,0x3d31c05f,0x3d7797d5,0x3d66c5af,0x3d7c369b,0x3cfb3e14,0x3cefadab,0x3c658909,0x3d16a889,0x3d00019a, +0x3cf9972f,0x3b8318ec,0xbdd8ca58,0xbe93d7bd,0xbea8cdb7,0xbea689f3,0xbeafecd6,0xbe5904c4,0xbdbe7774,0x3d92a24f,0x3e6e3fa0,0x3ecc4498,0x3f1854fd,0x3f12b124,0x3f106498,0x3ee61bdd,0x3ed16600,0x3e9474f3,0x3e5f8141,0x3e1cedc5,0x3e0020c0,0x3e17bde6,0x3e048441,0x3def90a4,0x3dae870f, +0x3dacfb12,0x3d82aba4,0x3d3c3c38,0x3d807cae,0x3d7c67c3,0x3d8644da,0x3d507bf5,0x3d05d373,0x3d1c9f17,0xbcae2b40,0xbd40ccd1,0xbd2737d3,0xbdbc339e,0xbe5ab843,0xbeafb249,0xbefeec78,0xbefc1426,0xbeb11c84,0xbdd7529a,0xbd4ab197,0xbde31aea,0x3c9afe1e,0x3dfe8c38,0x3e883775,0x3e7137c2, +0x3e63530b,0x3e69307e,0x3e63c104,0x3e5ee1f9,0x3e56e311,0x3e212a7e,0x3e0b830d,0x3ddbacbd,0x3daea1e6,0x3dd0f7e1,0x3d949223,0x3d8f5cd9,0x3d6c9060,0x3d3c3a92,0x3d812e29,0x3d85073d,0x3d81bf43,0x3d845d4b,0x3d507aa2,0x3d39037d,0x3d2be089,0x3cae5f3b,0xbd39fdeb,0xbdc87202,0xbeda6f22, +0xbede26e0,0xbe35c8cd,0xbd0de89b,0x3ea9f572,0x3e1dbcfb,0xbcb8f8d3,0xbea0b00a,0xbe8b61ec,0xbe6bbd88,0xbd1fbea6,0xbc31e37c,0x3e04cc74,0x3e42f18b,0x3e1ff6a1,0x3e1c52d1,0x3e0996eb,0x3e134ef7,0x3e22b5db,0x3ddb4ec7,0x3daade6a,0x3dbc076a,0x3d9fc5dd,0x3da54eae,0x3d888bdb,0x3d65e2bc, +0x3d3cf8aa,0x3d677633,0x3dd02ab8,0x3d278bce,0x3cd06a6e,0x3d02bdfd,0xbd304a0e,0xbd9546e2,0xbe598bcb,0xbe0c3620,0xbf05db16,0xbe97b2e5,0x3eed26b6,0x3f09e1e0,0x3f55b82b,0x3eab2879,0x3e0c3c5a,0xbe2114f7,0xbe62b17a,0xbe559e7c,0xbcc09f28,0x3c29fa5b,0x3ddf8a74,0x3e0f7de1,0x3dfe6f8d, +0x3dbd8c61,0x3daac0fa,0x3d9cae8d,0x3de6bbd5,0x3d9fef53,0x3d87430a,0x3d875491,0x3d9dc135,0x3d768aba,0x3d8b2a09,0x3d35965c,0x3d7e962f,0x3d5e00f3,0x3d201768,0x3d4363dd,0x3c530159,0x3c9c4748,0xbdac4558,0xbd677ea0,0xbe83adef,0xbdcf7169,0xbf05af8c,0x3f0a6cfb,0x3f3488cc,0x3f1eeaed, +0x3f24e06e,0x3ec78756,0x3e906c9a,0x3dddaf4e,0x3e0d2321,0x3e0debdd,0x3d58a1e2,0x3dabc3a1,0x3d75f664,0x3d7d77e8,0x3d80fdc1,0x3d9da9d9,0x3db4ab89,0x3d8c02d3,0x3d7cf20a,0x3d90bcfc,0x3d836562,0x3d826a18,0x3d38d239,0x3d6200bd,0x3d4c026e,0x3d2be4a5,0x3d9788f6,0x3da2b906,0xbcaa2353, +0x3d164082,0x3c4e1a1a,0xbba5bfff,0xbd1b08c3,0x3c77d31f,0xbe5291bb,0xbdbbe580,0xbd791149,0xbd625b09,0x3f2f0c8f,0x3edff989,0x3efaf338,0x3e97ec54,0x3e555db7,0x3e1d1f52,0x3d9d5004,0x3de4b616,0x3e563f02,0x3e58cee5,0x3e0bdbdb,0x3dee7956,0x3d54ea43,0xbb6fd1c5,0xbd610aa4,0x3c2e4fa2, +0x3d8864f5,0x3ddd52a9,0x3d88b738,0x3d89d923,0x3d36827f,0x3d4a864a,0x3d610bbc,0x3d54c127,0x3d0a816c,0x3d00894e,0x3cac56ae,0x3b9ca37a,0x3c5167ce,0x3cb8949c,0x3d62b388,0xbe33d7d1,0xbd89f945,0x3da381d2,0xbeb41258,0x3ecfb480,0x3e9be463,0x3e62b591,0x3e792503,0x3e0ac696,0x3de38821, +0x3db7234c,0x3c99c640,0xbd174853,0xbd33bf93,0xbd1532d5,0x3bd3f3a1,0x3c54d385,0xbbce8a29,0xbc936bc1,0xbd4423c5,0x3bc29297,0x3d274a80,0x3cd68fed,0x3d17e38d,0x3d8b1c07,0x3d810742,0x3d42027c,0x3d073003,0x3ca7f3ae,0x3d400b8a,0x3cacea34,0x3d1e7e36,0x3cd90b41,0x3d09773e,0xbbc223f2, +0xbd500b9c,0x3c256c15,0xbd0329a7,0x3cf464ec,0xbd227331,0xbc40b376,0x3e4ccf6a,0x3e126eed,0x3e1e2467,0x3dda2714,0x3d9372ba,0x3d2e71c2,0xbc64df7a,0xbd42ac0f,0xbd786b4b,0xbd733c58,0xbd96d135,0xbd97d1b3,0xbd91d9dd,0xbdb2afb2,0xbda5aebf,0xbd6c3812,0xbc9e0f49,0xbb465c9c,0xbd718d9e, +0xbd4d60af,0x3a2aea25,0xbcf43e7c,0xbc33c999,0x3c7ff29b,0xbced771f,0xbc07f08b,0x3c0504a6,0x3c794861,0xb9d660fb,0xbc71955a,0x3bd57e60,0xbc18e163,0xbd4b46b9,0xbd1abb36,0xbd81d7d9,0x3df42bb8,0x3df67e0d,0x3df8d339,0x3e306971,0x3e0e9e59,0x3df88e08,0x3dc57dc1,0x3db5d355,0x3d923521, +0x3d2ebefe,0xbc173ed3,0xbd7d69b7,0xbdecdd59,0xbdb741aa,0xbdb2d3c3,0xbd5ed0b8,0xbd55112c,0xbc96415e,0xbd634dea,0xbd6971cc,0xbd05ea01,0xbce168ac,0xbc92e409,0xbba5afc5,0x3c2b94dd,0x3c128796,0x3dd696a5,0xbccabaa9,0x3d8b357d,0xbb830cef,0x3ceb3b0f,0x3d316135,0xbce5d39d,0x3d6482c7, +0x3d9c00c5,0xbd8625a5,0x3e1d78b8,0x3e122b07,0x3e154216,0x3e037c82,0x3e1daa24,0x3e2cba69,0x3e4472eb,0x3e2a6365,0x3e12dc73,0x3e07ee7c,0x3e0325c4,0x3e06c010,0x3ddbf80b,0x3de5d54b,0x3dd8a4c1,0x3dd1a051,0x3dc5939e,0x3dd93438,0x3dcb289d,0xbd090029,0x3cd70ee6,0x3cd101e3,0x3d7689db, +0x3d1cd80b,0x3d6d8044,0x3d2b7f62,0x3d27b39c,0x3cc7dac4,0x3d374375,0x3de07474,0xbb7c1c79,0x3d859b64,0x3d303d18,0xbd8fd206,0x3e0c76de,0x3d932162,0x3e141767,0x3ded0289,0x3dfdc2ed,0x3e01fd70,0x3e057804,0x3dffdb4b,0x3e0320e0,0x3dfca581,0x3dfd0745,0x3defef90,0x3dd95144,0x3dc02daf, +0x3db3238e,0x3db9d51a,0x3dc03e26,0x3dc597ff,0x3dc913ad,0x3dc01da0,0x3dff6a3c,0x3d57e043,0xbcda5479,0xbdfc49c9,0x3d805601,0xbc0ddd5f,0xbde1d467,0xbdfbebca,0xbdd2df7b,0xbdbff45d,0xbdf0bc68,0xbde729d0,0xbda770a6,0x3c8d04d5,0x3dae6253,0xbdbf7178,0xbcda85ee,0x3e2f27aa,0xbd4c2c4b, +0xbcb40400,0xbdc7d0cc,0xbd722129,0xbd74defa,0xbd661a89,0xbd53e2fe,0xbd50723a,0xbd488112,0xbd50c420,0xbd58e2f0,0xbd4f9faf,0xbd529092,0xbd52ce47,0xbd5487d7,0xbd4e0170,0xbd4ffdb7,0xbd4a164e,0xbd4f622b,0xbd3301cc,0xbd80311c,0x3d00dcdd,0x3daeaf95,0x3e27147b,0x3b2ccc32,0x3da5e45f, +0x3e27443e,0x3e2639e8,0x3e1e1697,0x3e0f519f,0x3e2afb1e,0x3e24e644,0x3e15cdb1,0x3dc3dd9d,0xbc631419,0x3e0a9701,0x3dd0266c,0x3e1c7108,0xbdafc438,0xbdd7a8ac,0xbdd7e355,0xbdcec809,0xbdab9e23,0xbd8e3a9d,0xbd7814c8,0xbd5cd467,0xbd56bce8,0xbd3cea7f,0xbd42c6f4,0xbd60d41c,0xbd7f0b06, +0xbd6d9152,0xbd7729ae,0xbd72ee77,0xbd5f4a14,0xbd5cb1da,0xbd919e0f,0x3db7b0e1,0x3d324d57,0x3d897c85,0x3d7bb19a,0xbb7d099e,0x3d87e2e3,0x3d2e9fa0,0x3db3a0da,0x3d47762f,0x3d8b472c,0xbd0e1e9e,0x3d55898d,0x3d54e678,0x3cf2e132,0x3d7967bc,0x3cf4cf5b,0x3d1bb2b9,0xbe0c01eb,0xbe030cc6, +0xbdf40e81,0xbdd9f7fb,0xbda8862f,0xbd85a1c8,0xbd60c5f1,0xbd869e07,0xbd786ab6,0xbd33eb08,0xbd4e34a4,0xbd570027,0xbd6f4acd,0xbd7cef87,0xbd6fc39c,0xbd80eaa3,0xbd40290f,0xbd8d536a,0xbabb5039,0x3dd7ccd8,0x3d5cf99e,0x3cef505c,0x3d860368,0x3d36d59c,0x3d0a6674,0x3d3451aa,0xbd1376c8, +0x3dafb23c,0x3c2138b2,0x3d893ee3,0x3ccc83cb,0xbb613ad8,0x3b97e821,0x3cee1712,0xbd991576,0x3c283b66,0xbdd00460,0xbe3bac49,0xbe29e826,0xbe2fddb0,0xbdf4e643,0xbdac8a1e,0xbd840791,0xbd5b6ea8,0xbd039354,0xbc0f7877,0xbc7b093d,0xbcf5c000,0xbd5fb0cb,0xbd6da21f,0xbd72e62f,0xbd7be848, +0xbd5edeb9,0xbd5c4f9d,0xbc207762,0x3d27823d,0xbb4c0519,0x3d6aded5,0xbac02805,0x3d4e15af,0x3c085be9,0x3d9d86e1,0x3d6246c8,0x3d70fc2e,0x3ca267f5,0x3d5894ee,0x3ccdf910,0x3d534b36,0x3b0ee474,0xbb543a9d,0x3a56dbd8,0xbd258db9,0xbde60286,0xbe25a2ad,0xbe034311,0xbdda348a,0xbdb5d3a6, +0xbd8326ff,0xbd5f6e40,0xbd9361dc,0xbd788d90,0xbce778e1,0xbcbc4f89,0xbcf318e8,0xbd22ac77,0xbd4ca630,0xbd6e8031,0xbd5b2cd4,0xbd4c5cbe,0xbd22d3bb,0x3b8652c2,0x3e02fc21,0x3d3bcee1,0x3d926786,0x3d354001,0x3d080f27,0x3d25a276,0x3cf68fa3,0x3d384d6b,0x3d3ad455,0x3d422cee,0x3d0664cd, +0x3d036dbc,0xbcac4323,0xbd395297,0xbcdb57df,0xbd439fdc,0xbe6ed054,0xbe5c3224,0xbe11c6fa,0xbe433aa5,0xbdf53d2f,0x3b823bae,0x3c2f7831,0xbc5dc443,0xbd9d6b07,0xbe07a72e,0xbdc56b96,0xbd98f1d6,0xbd84a4f3,0xbd83a0f2,0xbe0db728,0xbe015f65,0xbdc7b606,0xbd7035eb,0xbd32b792,0xbd00f1ff, +0x3d8b19e0,0x3c011ed3,0x3d91888a,0x3cd7ea99,0x3d854176,0x3d0f8093,0x3d79e275,0x3d494b00,0x3d2a0ffa,0x3d037aef,0x3c9b401b,0x3c17a44c,0x3d02b2f7,0x3cfb406b,0xbd1f144e,0xbd79d9c7,0xbe24b41c,0xbd929967,0x3e605e47,0x3e92ae9c,0x3e9f2b3b,0x3d400c38,0xbdaed375,0xbe354d7e,0xbe852cec, +0xbe7c1576,0xbe897e99,0xbe1b3921,0xbdc3de06,0xbd607721,0xbccbdedf,0xbcb9c31e,0xbd4766f7,0x3b8c0e5f,0xbca465c2,0x3d25c5f2,0x3df6e115,0x3d8f1032,0x3d516ab6,0x3d4f7cde,0x3d320d14,0x3cef9828,0x3d39fb4d,0x3d61751b,0x3d8b7ce8,0x3d4058da,0x3c972146,0x3cb405aa,0xbd14028d,0xbd968652, +0xbdacd1db,0xbe417caa,0xbe56ce9d,0x3e1852cf,0x3f14192d,0x3eb13c69,0x3e1f93f9,0xbd71a770,0xbe11e1b4,0xbe01e89c,0xbe29f5d2,0xbe1b3b27,0xbe47d983,0xbe54fde5,0xbe5fa33f,0xbe8576a8,0xbe6001ff,0xbe060a09,0xbd3d4972,0xbca931c3,0xbcfe4f21,0x3c28fb84,0x3d62a700,0x3d2c7ef4,0x3dad95c4, +0x3d25ee93,0x3d8b5a68,0x3d273f56,0x3d87a351,0x3d5b3b8d,0x3d587dd3,0x3cc759d9,0x3c5bba16,0xbbd89147,0xbc2ace30,0xbc0a37a8,0xbd5274b5,0xbda3bc04,0x3e40071b,0x3eb357e8,0x3e9da81c,0x3d114f7a,0xbed1e28a,0xbe40255a,0xbe0d5e88,0x3d5bc16c,0x3c073cad,0x3d32c3d4,0x3c898098,0xbb4a477a, +0xbd774c99,0xbe1c6489,0xbe03663b,0xbdcb871b,0xbcd19996,0xbc8f23d7,0xbd874867,0x3c73d48d,0x3d82a5f1,0x3d1050f5,0x3ced572d,0x3d70cb6d,0x3cd2c714,0x3d3b3dc7,0x3d69505d,0x3d8e96e8,0x3d54a6e4,0x3d17fa47,0x3cb7572f,0x3c840d17,0xbcb8f4a3,0x3c72c3ca,0xbc31a7a6,0x3def6e9f,0x3ed2e489, +0x3e9cc9b3,0xbdeef9ad,0xbe27d9d7,0xbf0d0c0d,0xbe3a0ff0,0x3a72ef04,0x3e51c881,0x3e1748ac,0x3e37e4bd,0x3e2049ab,0x3e77edc6,0x3e5e113f,0x3e080d89,0x3d6b8560,0xba96e583,0xbd1011d6,0xbd79e1a6,0xbdc9fd27,0xbc938b73,0x3c332acf,0xbb641271,0x3d24db8a,0x3c8ff68a,0x3c045d73,0x3bf99971, +0x3d2dc4f6,0x3d81a157,0x3d5f0850,0x3d926f16,0x3d884069,0x3d07ba6b,0x3d23f22d,0x3d9939ee,0x3d501488,0x3e0a58f8,0x3ef31b1a,0x3eade983,0xbe582f59,0xbdf25193,0xbe52bdbb,0xbdf70d2c,0xbe079388,0xbd12a13c,0x3c6b3907,0x3de38cbb,0x3e48a7c7,0x3e8a3c2f,0x3e539edb,0x3e5292a2,0x3e394215, +0x3e021766,0x3cf6b09d,0xbca1ea03,0xbd98ace6,0xbd8471ef,0x3da74424,0x3d154427,0xbb85e84b,0x3d34325b,0x3cdc01d7,0x3d68f982,0x3d5107a6,0x3d3665fc,0x3d50fc36,0x3cbdd357,0x3cf9e0e3,0x3dba2cfc,0x3da75bd3,0x3db39d5a,0x3e723b4e,0x3d8884bd,0x3eabd6ff,0x3d24d2b1,0x3b8d8dd5,0x3cce7ba8, +0xbd09d17e,0xbd20289b,0xbd6a459e,0xbd2bd816,0x3d8fbc60,0x3e02ee62,0x3e13e0d6,0x3e1ccefd,0x3e0740b6,0x3d9219ec,0x3cd957de,0xb9c2be92,0xbc0e0542,0xbcc977da,0xbd27d903,0x3be4e9f7,0x3cfc1864,0xbc268dd9,0x3cbf8b10,0x3cf124b5,0x3d511eb9,0x3d1dc862,0x3cb9c69a,0x3cb73d13,0x3cedcb07, +0x3cc85ab9,0x3cfd390e,0x3d26fd1b,0x3db855e9,0x3da879a0,0x3dd73db7,0x3e10eb96,0x3e275bcd,0x3e0b0025,0x3c8c7906,0x3d4e0a19,0x3d11767e,0x3cdf8b4e,0x3ccd3909,0x3cbcf75d,0x3db60447,0x3dfd7e4e,0x3e267ed9,0x3e20e4d9,0x3e2029c1,0x3e0b84c1,0x3de45526,0x3de1fb04,0x3dc6afcf,0x3db3da9a, +0x3d993c64,0x3d48dc04,0x3d849b4f,0x3d8ebeb4,0x3db5b49a,0x3d677ab5,0x3d1c169c,0x3d37d1b1,0x3d41d1e8,0x3d320456,0x3d262469,0x3d0cbc08,0x3d1c5251,0x3d059fc2,0x3d63b17c,0x3d76b48c,0x3e0268b3,0x3dc88384,0x3e088dc1,0x3d7dbad9,0x3d4fe26d,0x3d5df5e2,0x3cf4ba9a,0x3d5a42ab,0x3d97a17c, +0x3db361cc,0x3db241d6,0x3db6f76f,0x3df49592,0x3de28831,0x3e04fd2f,0x3dffc28c,0x3e09bf2c,0x3e115af0,0x3e08c312,0x3df4eec7,0x3e1b923e,0x3dc4b404,0x3d7c83dd,0x3d732a1f,0x3dab0831,0x3d78b036,0x3d6aed4b,0x3db7001a,0x3d570abf,0x3d52d288,0x3dc3fe48,0x3d1e66c2,0x3d88f799,0x3d30ffa6, +0x3d904f5c,0x3dd98290,0x3dc41cff,0x3d9e0a4a,0x3e1cd717,0x3d1490ad,0x3d542a16,0x3d4487d6,0x3d51cfc6,0x3d25a5a9,0x3ca5fed4,0x3c63a354,0x3d04f3fc,0x3d4d1b91,0x3d5bdddb,0x3d8aaa96,0x3d91beb2,0x3db082ca,0x3d9cd150,0x3d972cfe,0x3dbfd349,0x3db7ff4d,0x3d9fd2c8,0x3ddf5845,0x3df10f65, +0x3de109f7,0x3ddc170d,0x3e009f67,0x3de0919f,0x3db588cc,0x3de045f8,0x3dd7f273,0x3de2ebe6,0x3de12d32,0x3d5ac4dc,0x3dfa3195,0x3dc6da63,0x3daee16d,0x3e090c48,0x3d98cb99,0x3dd980f9,0x3cbd745b,0x3d2165be,0x3d113cbd,0x3d0b0f7e,0x3d1d6f75,0x3d3d204b,0x3d46a7f8,0x3d4a57c3,0x3d4da1ba, +0x3d5f4344,0x3d742b48,0x3d846171,0x3d927662,0x3d8dc5eb,0x3d8c9d94,0x3d88a9c7,0x3d8580f6,0x3d78c768,0x3d702410,0x3dd6d677,0x3e121bdf,0x3e008e27,0x3dbf977b,0x3e09e9de,0x3e14e2ba,0x3e1b4285,0x3e0fe3d6,0x3e0c7008,0x3e1bb244,0x3e1d3feb,0x3e0ffa05,0x3e01efb4,0x3da72a64,0x3e1289d8, +0x3e1d6e61,0x3da38e3e,0xbd3508a4,0xbd3c5f5b,0x3cf78a8f,0xbbea7a82,0xbc138d1c,0xbbf9b800,0xbcae1685,0xbd044b47,0xbd3ccd46,0xbd4069fe,0xbd458ef6,0xbd2dc19a,0xbd0fda18,0xbcfad848,0xbcdfce10,0xbcc42ca9,0xbcb78a18,0xbcabefd4,0xbc989984,0xbc98165b,0xbc266a7c,0xbd9333d8,0xbdadd6db, +0xbd11d566,0xbd846c37,0xbdb0b142,0xbd371670,0xbd3a8f86,0xbd2d0104,0xbd2afa69,0xbd5eb2a7,0xbd6d7008,0xbd7e117e,0xbdc89ecb,0xbd7dbe7a,0xbd732e17,0xbdd53382,0xbe29081f,0xbd4d41db,0x3ca5b218,0x3c397ac2,0x3c07348a,0xbce6aee2,0xbd7f4d00,0xbdce33eb,0xbdcfb6a7,0xbdd0f406,0xbda59fc6, +0xbd75fff9,0xbd43415f,0xbd2fd124,0xbcef4511,0xbcfce286,0xbce864c3,0xbcc56951,0xbc898b26,0xbc0ad36e,0xbd8d27f7,0xbd46e55b,0xbd2cefbc,0xbd9145e2,0xbd433aed,0xbd071c96,0xbd315b9f,0xbd53040c,0xbd2f8f57,0xbd4649c1,0xbac2f03e,0xbcf5e88c,0xbd6ab265,0xbd5818cf,0xbd8c3efc,0xbd265cbd, +0xbde732a9,0x3d7b8fd8,0x3d96ec47,0x3d5ccdd1,0x3d524c94,0xbd0ed12b,0xbdc70b3b,0xbe332920,0xbe43cdf9,0xbe3d06f5,0xbe163f82,0xbdde096c,0xbd9b69a0,0xbd82370e,0xbd403a2b,0xbd1444e0,0xbd01cee0,0xbcba925b,0xba2ac682,0xbcd2a5f4,0xbd8e74c1,0xbcf7f00d,0xbd2cf4fe,0xbd270b44,0xbca1c3f0, +0xbd124c06,0xbbb85f6b,0xb7919a83,0xbd27d4e5,0x3b409372,0xbce36080,0xbc6b1944,0xbcd392c8,0xbd3f2a85,0xbdaa0d9b,0xbc7315c7,0xbe0e1d4c,0xbd5f7381,0x3e334389,0x3dbd87f3,0x3dc96ecd,0xbcf8a7b1,0xbe0243cf,0xbe6e44bd,0xbe875ad2,0xbe700a8f,0xbe36ed5b,0xbdf9f9b0,0xbd9e42ea,0xbd86f547, +0xbd1e532c,0xbd097eec,0xbcf998e3,0xbc6218d9,0x3b880d90,0xbb0562ab,0xbc60a0ec,0x3ba8478a,0xbc2b72b0,0x3c01d2ba,0xbb92a10a,0x3c61fd28,0x3bd92b86,0x3cfc1ced,0x3cc9f139,0x3d204063,0x3c966193,0x3d1af0f5,0xbd305e6f,0xbc92e993,0xbc7c0fad,0x3cae2587,0x3ca110d2,0x3cb976dd,0x3e786f00, +0x3e13574c,0x3e14f159,0xbd143477,0xbe3a9488,0xbe9ed73d,0xbeb37009,0xbea88930,0xbe6c51ce,0xbe236250,0xbdccc165,0xbdb3728a,0xbd7d229b,0xbd319b60,0xbd110ca4,0xbc0de161,0x3c12276d,0x3c6065ec,0xbc3cd36f,0x3ceba39d,0x3cbea2aa,0x3cc878a2,0x3d11c4e5,0x3cd2983b,0x3d417228,0x3d4b9260, +0x3d66e5b3,0x3d1f7874,0x3d2bc81a,0x3d18d6a4,0x3b17c200,0x3b022166,0x3a2d27c8,0xbd103095,0xbd5a8241,0x3dfc60db,0x3e94e227,0x3e6723ea,0x3e5148e6,0x3ced3832,0xbd8ac747,0xbe6b103a,0xbe88ec11,0xbea54fd4,0xbebc33d3,0xbea761fa,0xbe973d88,0xbe4fe689,0xbe1e7276,0xbde7e28b,0xbdd5b3c6, +0xbd5c5ff6,0xbcb7411c,0xbc8c1436,0xbd06d9f2,0xbc6e3564,0xbac53ea2,0x3c39fbfc,0x3cc79d7e,0x3cfa8fa1,0x3d345f8e,0x3d2cf609,0x3d086849,0x3d0f32a1,0x3d27125c,0x3cd3c530,0x3d9236ef,0x3d1646a3,0xbcfd37b1,0xbc51880b,0xbc29c81f,0x3debd030,0x3e103c7e,0x3c9d4ab5,0xbdb45eaf,0xbe561fbe, +0xbe6370f2,0xbe0d2390,0xbe5a5220,0xbe929aef,0xbee54206,0xbecdca27,0xbec24adb,0xbec0ace1,0xbe99d2e1,0xbe56bad8,0xbdf2da72,0xbd9a648b,0xbd04f1d2,0xbd5cc822,0x3acdce65,0x3b8937e9,0x3c9bd235,0x3cf134c2,0x3d119e16,0x3d131907,0x3d2a99c7,0x3d397b8d,0x3d61775d,0x3c5486c4,0x3ac034f9, +0xbce75f39,0xbd525c4a,0xbd2b84c9,0xbcb6b5f6,0xbbb2c281,0x3e76aec5,0x3d5cb109,0xbedf8777,0xbee14d76,0xbf1c3133,0xbe6788b3,0xbbdb6e39,0x3e86d430,0x3e3059f7,0x3db2e073,0xbdec4e5d,0xbdb3d8dc,0xbe217c3d,0xbe44378e,0xbe0f4495,0xbe11e9c1,0xbe0a2ed4,0xbe133a0c,0xbe19f01c,0xbdbba862, +0xbd7f7656,0xbce8259a,0xbbb3a25b,0xba8e9dae,0x3d073dd5,0x3caff3f6,0x3d81fe02,0x3d848757,0x3cbdbc3a,0x3d0dcf08,0x3cce9f9e,0xbb211dfa,0x3ce775a3,0x3bcd1849,0x3dba1ad9,0xbc9692aa,0x3de47b8f,0xbe269a9e,0xbf3dce4d,0xbf16070f,0xbef0c5e6,0xbe095e30,0x3d89a243,0x3e829920,0x3e9c6301, +0x3e87a086,0x3e1182fc,0x3dd17e37,0x3d064f89,0x3c9f29e8,0xbbe81cbf,0xbcde9912,0xbdb7d330,0xbdd23061,0xbdf10c36,0xbdca35b6,0xbdc87825,0xbd85e827,0xbd6d212a,0xbbedbdc7,0xbc78417a,0x3aa45a0d,0x3d5b5ae3,0x3d86c54e,0x3c31d9cf,0x3d26364e,0x3d70d34d,0xbc2cddb2,0x3d9989cc,0x3c3456bd, +0x3de96de9,0xbda5fdde,0xbbac42e0,0xbf3ac37b,0xbeed24d9,0xbea4f61a,0xbcb17b30,0xbd88c90e,0xbd32f509,0x3c868e46,0x3dbad460,0x3df0657e,0x3e73a699,0x3dfea3a0,0x3daab069,0x3d51c6b7,0x3d65b89c,0x3d0636cd,0x3c0745b4,0xbc26f34f,0xbca4bae8,0xbe095ad6,0xbdd8374c,0xbd9f1862,0xbd819cdd, +0xbd7f7a99,0xbce8ad54,0xbcf0ee9b,0x3d02b41a,0x3d28657e,0x3ca55c1a,0x3d4fc792,0x3d1cc7dd,0xbc16eb78,0x3bef6e75,0xbda98b10,0x3d3898ab,0xbdef6b60,0xbebbf544,0xbe2e6034,0xbe1fd179,0xbdd2ece2,0xbe4191c0,0xbd8e273c,0x3d2887ea,0x3db19f4d,0x3e3a1119,0x3e4257a6,0x3da94cf8,0x3daef713, +0x3d71d172,0x3db75683,0x3d9a9adf,0x3d6385dd,0x3d48c56e,0xbd6abbc1,0xbdb78145,0xbde3d61a,0xbdb25774,0xbd8594fd,0xbca42d00,0xbc91e01c,0xba969579,0x3cd049f1,0x3d10e8b9,0x3d36c70c,0x3d569cda,0x3d4b2853,0x3d261489,0xbb8f4a5c,0xbd42aaf4,0x3d635118,0xbe05b69f,0xbda8a31a,0xbbf9e29e, +0xbe8ade4e,0xbdfcee6c,0xbdc00e15,0xbdb0fc33,0xbce4c8e9,0xbc8602ca,0xbba142af,0xbd139e6f,0xbc68d408,0x3c3821e6,0xbad035f0,0x3be0dfb8,0x3d32d845,0x3d9681a2,0x3db0b6d7,0x3dd678ae,0x3d16d9a6,0x3bcdfadb,0xbca3cd19,0xbd7cf693,0x399038a2,0xbd25f02e,0x3cc8d74e,0x3d1eaba7,0x3d073e33, +0x3d4e3454,0x3d37e553,0x3d1417df,0x3c984e5f,0x3b3f7f52,0x3be8b687,0x3c86d670,0xba28fc5e,0xbc200214,0xbdb0ceaa,0xbd64990b,0xbd1830ca,0xbd578eab,0xbd443a98,0xbd19304b,0xbcf86d8f,0xbc563d50,0x3b89f16e,0xbbcc25be,0xbb5056a6,0xbc12065a,0x3c16a6b6,0x3cfab2a0,0x3d55dff6,0x3d78eb6c, +0x3d9a22ec,0x3db05ff5,0x3da524a7,0x3dab9059,0x3d9aa7f3,0x3d9d8d29,0x3d976450,0x3d830a9d,0x3d97c8c6,0x3daa370e,0x3d5198fe,0x3d718487,0x3d3289be,0x3d1e3660,0x3cb51d78,0x3cb7c8a7,0x3c4ad828,0x3c28e623,0x3c58d40e,0xbc9faa19,0xb90ac992,0x3c3ac4c2,0xbd4300cc,0xbd206ea9,0xbd00ef6d, +0xbce15822,0xbcf0f0e6,0xbd04ef2e,0xbcea5f91,0xbce94c78,0xbce3eed1,0xbd00c6fc,0x3c2e0b2d,0x3d2bd8f4,0x3da0e3c5,0x3da6772d,0x3dbb888c,0x3dc17def,0x3dd29985,0x3deee9a2,0x3dfe0213,0x3de5d769,0x3dcc8501,0x3dc7bd2a,0x3da0eafd,0x3d55af1f,0x3cede1d2,0x3d225697,0xbc760703,0x3b50c591, +0xba840801,0x3c655526,0x3c837114,0xbcb28528,0xbc16ca02,0xbd3008a7,0xbd22d15f,0x3d30f6dd,0xbccd6d5b,0xbc9159a4,0xbca80537,0xbca4a92e,0xbc718c1a,0xbc196764,0xbc2281ee,0x3aee3935,0x3c62a826,0x3cca5420,0x3cc1156a,0x3ca17987,0x3cf4ac07,0x3ccaf0fb,0x3cbfc347,0x3cdbeba7,0x3cb2d553, +0x3c1ac924,0x3c8e15d2,0x3d6af0b0,0x3cf6c857,0x3c2d4d3e,0xbc07e16f,0x3ba842f5,0xbc500a3c,0xbbf9d6f8,0xbc3dfa2b,0x3bd0258a,0xbbc857a2,0xbc6e6fb0,0x3c4b7331,0xbc502487,0x3c8c26d3,0x3d769d0c,0xbd1f931d,0xbd120cf7,0xbcb18800,0xbc3c7272,0xbc52c7e5,0xbc3e62c9,0xbc557371,0xbc6aeb7e, +0xbc78c703,0xbc567bc9,0xbc4d89bc,0xbc278f10,0xbb9c93bc,0x3b063763,0x3bbe9cf7,0x3bb25fe6,0x3bcec013,0x3bf798fc,0x3c1772e1,0x3c63f6c2,0x3bdf7557,0xba9945b5,0x3c96c7bd,0x3db70770,0xbc4bb8e5,0xbb849b94,0x3d801835,0x3d8c03cd,0x3d77d0fa,0x3d68c1a3,0x3d7ac270,0x3d69e3b3,0x3d3fd382, +0xbc996e51,0xbd081277,0x3d55c4d0,0xbb9d5a19,0xbc6c20ea,0x3d3daf98,0x3da501a7,0x3d1b2c53,0x3d2574d4,0x3d2de600,0x3d207ab3,0x3d026b9d,0x3cf56b52,0x3cea04a8,0x3ce20d0f,0x3cdbe60e,0x3cbc4bbc,0x3cbdd2f9,0x3cc0a099,0x3cc30c70,0x3cb6b251,0x3cbad151,0x3cbb786a,0x3cc51ef7,0x3cc4e54e, +0x3cd19fb1,0x3d465abf,0x3ceb3188,0xbd6807c6,0x3d6534f3,0x3d126d6d,0xbd4b3d96,0xbd3f0c8f,0xbd39084b,0xbd16cb72,0xbd1e5770,0xbd0d1cf8,0xbcbed7af,0x3d108cf7,0x3d8b9fc7,0xbd2919da,0x3cfb72a8,0x3c8161aa,0x3ddcff70,0x3dc811a4,0x3dd73827,0x3dbf4174,0x3d5df29e,0x3d019006,0x3c9ef7ad, +0x3be4fdb7,0x3c0954de,0x3c356515,0x3c7b011f,0x3ca384ad,0x3cdb410b,0x3cc3de0e,0x3cbd96ba,0x3cbc766b,0x3ccd0c3c,0x3cac6909,0x3c852a2b,0x3c334c8a,0x3c81d17b,0xbbb30011,0x3d069c82,0x3d3cd587,0x3a44fba1,0x3d0f9462,0x3ce9f5bf,0x3d0507e9,0x3d07cd12,0x3d204b55,0x3cac35ba,0x3cf0bdf5, +0x3d40f648,0x3d254241,0x3d2ef2d9,0x3df4c940,0x3e002313,0x3dec4d13,0x3e067bec,0x3de56d26,0x3d79d470,0x3ce93f6d,0x3c99a27e,0x3c0d23d6,0xbb43beb0,0xbc8e1a56,0xbc5055e3,0xbc036de8,0xbab130bd,0xbbb57c6d,0x38c02b50,0xbad7be46,0x3bf12280,0xbb4112d3,0x3c4940fd,0x3d177154,0x3c0dcaa3, +0x3d0adaaf,0x3cc0304f,0x3c95c557,0x3d18f64e,0x3cbe7381,0x3d70bde8,0x3d70f2e4,0x3d2f22ef,0x3d324fcd,0x3d1fc49b,0x3d7b9890,0x3d829077,0x3d906bd4,0x3df61276,0x3e24c908,0x3e2f2d70,0x3e49fec4,0x3e5a44e6,0x3e4757d8,0x3db12f28,0x3c818df9,0xbc9ef3f9,0xbd42eef7,0xbd7b3aa3,0xbd55e81d, +0xbd32f9ed,0xbd03d0b0,0xbbfef512,0xbc295210,0xbc291ed7,0xbc018f45,0xbb5b0e12,0xbc94bcdb,0xbc2fc72c,0x3c0c0163,0xbc0609f1,0xbbe5c3b9,0x3c0d3fd7,0x3c975b8a,0x3c3d12bd,0x3d1a875a,0x3cf3db15,0x3d0abc28,0x3d0f7dbb,0x3d2edc78,0x3d510a21,0x3d55e3e8,0x3d7f0bad,0x3decf194,0x3dbb8bea, +0x3e20b4b5,0x3e38fee7,0x3e0b0e43,0x3e453dd4,0x3e1dba1b,0x3daf7dd6,0x3ce78f1e,0x3c25a005,0xbcd6f332,0xbd28f663,0xbd9bb6a4,0xbd99b375,0xbd804539,0xbd72dddf,0xbd5956ba,0xbd3e6a74,0xbd3445a6,0xbcd3b69d,0xbd34c462,0xbd0e9e32,0x3d66a014,0xbc1b04a8,0x3cc0f0f6,0x3c6b889f,0x3cc0c7ae, +0x3c3b4fbe,0x3cfb9d75,0x3d3bbf46,0x3d559bfa,0x3d0afc19,0x3d13e659,0x3d08682b,0x3d922801,0x3db7ff71,0x3ddb80e7,0x3e24a783,0x3e2a5788,0x3ddbc09d,0xbe0497dc,0xbbeeb290,0xbd41eafe,0xbb9ba40e,0x3d80040b,0x3e23f3a4,0x3d61cc6b,0xbcedeaa1,0xbe0b3c47,0xbe107312,0xbe2c6c0a,0xbdf9ea09, +0xbd7767fa,0xbca85cb3,0xbd6ca961,0xbd1571f9,0xbd296098,0xbd276f38,0xbc164658,0xbd19b6a1,0x3c5f7b5d,0xbb1e076e,0x3cc33074,0x3cf6fd76,0x3d2039c4,0x3d1513b6,0x3d11826a,0x3d6d7f2e,0x3d9707f6,0x3d9b06c9,0x3cdc1114,0x3d1e5d8e,0x3d75dbe4,0x3d5723db,0x3ca1101b,0xbde2c659,0xbec6abc2, +0xbeaaccb2,0xbe6f90ca,0x3d7f490c,0x3e4085ac,0x3ea072e6,0x3ea0c281,0x3e8787b5,0x3e72071a,0x3daa71e5,0x3cca4ec5,0xbc4a05ab,0xbd1dd0a7,0xbd76a4d9,0xbda0b4c6,0xbda06456,0xbdc8f32c,0xbd2bc400,0xbc93bfd0,0xbc4a3cbc,0x3c573be2,0x3ca9c9cb,0x3d0c5140,0x3d2a2cbd,0x3d5bf8d6,0x3d6d63f0, +0x3d2eb89a,0x3cc62aab,0x3bebe242,0xbb98cb97,0x3d1f290b,0x3d1f21f9,0x3cae7c34,0x3d343031,0xbdd08302,0xbe9e8202,0xbe8c2659,0xbd01d9b8,0x3ea9b139,0x3ea653ae,0x3eb0c6ea,0x3ea0f741,0x3ea8b8f4,0x3e9b4e6f,0x3ed323c7,0x3ece8cd0,0x3edeecf6,0x3ee3cd72,0x3ecde93c,0x3e8e5a3c,0x3e3b78d2, +0x3d9d8755,0x3cf9e9fe,0xbd370186,0xbdada1c1,0xbd2c2165,0xbd7281e2,0xbc917bec,0xbc0ba0b6,0xbbb747ab,0x3d60ee8f,0x3d53977d,0x3c98ce39,0x3d30fb5e,0x3d223b6d,0xbb46c8d0,0xbaeffb56,0xbc989cf7,0xbd6a06c9,0xbcf865d8,0xbea41fb6,0xbe8ed5e0,0x3ea578da,0x3efd0f14,0x3f4d1c44,0x3ee8abcd, +0x3ec45bee,0x3e5268c2,0x3ea56620,0x3ebce958,0x3ef117d3,0x3f04cec3,0x3f0b43ac,0x3f1c5f0e,0x3ef8864a,0x3ecbe002,0x3e9160ca,0x3e35741c,0x3e0e053b,0x3b0033f4,0xbd61a1bc,0xbd976602,0xbd55adff,0xbd11d391,0xbc925522,0xbc162452,0x3d2e452f,0x3d6bd0a5,0xbbc971a6,0x3d3b1e88,0x3d28d5bb, +0x3b21a919,0xbc7d0aae,0xbcc99cd9,0xbdba8e92,0xbdc46295,0xbeb65e7b,0x3ea400a6,0x3f14dc3c,0x3f0cb6b1,0x3f241f69,0x3ebdb8ae,0x3e87bce1,0x3e1268f5,0x3e85a3a0,0x3ea850e1,0x3ec5bcc9,0x3eabdc1f,0x3eab8da4,0x3eb2d4d7,0x3e9b43d3,0x3e80a23e,0x3e64724d,0x3e33d88d,0x3e0fa75a,0x3d60d1dc, +0xba028806,0x3cd56ca6,0xbcc5ac67,0x3b858861,0x3cc43303,0x3ca8eb9e,0x3d40f8fc,0x3d21efca,0xbc34be9a,0x3d02f711,0x3c83dddf,0xbbbe9443,0xbc96041b,0x3c6385ee,0xbdbd8477,0xbd55dc0b,0x3da37a6f,0x3d16192b,0x3ee790d9,0x3ec6fe1d,0x3ed20e76,0x3e3a13d9,0x3dac23dc,0x3c93fd7c,0x3bbc0ce2, +0xbd06c01b,0x3cb204d0,0x3da53ab4,0x3e1fd602,0x3df948c0,0x3e1c2fb8,0x3e267409,0x3e341ad8,0x3e15d1d9,0x3e0622ff,0x3de315df,0xbd34c002,0xbc9fb551,0x3cd6db1c,0xba781cd4,0x3ca6e306,0x3cb8be1a,0x3d36a2b5,0x3d1bf7a0,0x3d31fc01,0x3d7af625,0x3d63d24c,0x3cd4e03e,0x3d4e426a,0xbd844bdc, +0xbcc50ab4,0x3cb2d13c,0xbe083d10,0x3e958c67,0x3e5565f5,0x3e298ee8,0x3e014870,0x3da40cc8,0x3d816101,0x3d3fbb98,0xbca0420c,0xbd5648e7,0xbd05f03b,0xbd09dc57,0x3c295a7a,0x3d351e63,0x3da9a2e7,0x3db314ba,0x3da2fc49,0x3d91db1a,0x3dacff2d,0x3d2f88da,0x3d6a8eb2,0x3dade5cb,0x3dca8fb0, +0x3d6fede0,0x3d34cfba,0x3d58d3f7,0x3d2ae2f5,0x3d679355,0x3d460e0c,0x3d2f477a,0x3d1c3133,0x3c7322d3,0xbc1ec6d5,0x3c3d0f68,0x3cd96777,0x3d69926c,0x3c6b6a4f,0xba9744db,0x3d91f93f,0x3d490745,0x3cb6f7c5,0x3d1bd1c7,0x3cd89685,0x3c02bc5c,0xbcdee5e2,0xbd7971e1,0xbd829fc6,0xbd45b53f, +0xbd0612e3,0xbc97baba,0x3acb237e,0x3c1b74b2,0x3c0af24b,0x3ca8d4f8,0x3c977d67,0x3d6eb0f9,0x3d61bcb0,0x3d1166af,0x3cf6a38d,0x3d545dd5,0x3d192f36,0x3ce514e7,0x3d27347b,0x3ce0bad8,0x3c96c819,0x3cd70e56,0x3c82fecf,0x3c8d41ee,0x3c36bc2b,0x3c5b66ca,0x3c45c298,0x3c0effd7,0xbc7e0d66, +0x3cdfb519,0x3c63cba9,0x3ca7a13d,0x3d26820f,0x3cf781ae,0x3cd1ab2d,0x3cc39189,0x3d456cce,0x3d832909,0x3d8abb98,0x3cfd1fe6,0x3c05d688,0xbbe071ca,0xbc4f5102,0xbc76a42c,0xbc34f56d,0x3c125220,0xbcd1452b,0x3ce83539,0x3d8f57eb,0x3d3d570b,0x3d045ea7,0x3d07322c,0x3d2d77c3,0x3cb6b8f6, +0x3c872332,0x3d083627,0x3cc66708,0x3cd426dc,0x3c84f2a5,0x3c28be63,0x3cfccf86,0x3b2ed8b7,0x3d0ca3f1,0x3caf8d35,0xbcba2dcc,0x3cd92d80,0x3cf450d0,0x3ce697a0,0x3c91d515,0x3cc8c259,0x3cf66b59,0x3cf9aada,0x3bb4bd38,0xbc4866dc,0xbc9b5d6c,0xbc4133e7,0xba752c94,0xbb216bde,0x3be4c827, +0x3c295620,0x3a40044b,0x3b0c9680,0x3b8919aa,0x3ba9b2d7,0x3c976443,0x3ca8e202,0x3d081582,0x3cb85ec8,0x3cb9d1cd,0x3d0ec15e,0x3d079663,0x3d1e5dff,0x3c7735bc,0x3cac06d6,0x3c9dc7e5,0xbaa642f2,0x3c87359f,0xba1ddcfa,0xbcf9f50a,0x3d1970a4,0x3d19c812,0x3ce68872,0x3ca1a7a0,0x3cbbfc57, +0x3cd0159d,0x3ccf5f23,0x3cb4efa9,0x3ccb06d4,0x3cf29a5c,0x3d07fcac,0x3cfcdadc,0x3cc3751c,0x3c6c4263,0x3c04e9ff,0x3bf4e41b,0x3c0076bf,0x3c3102cb,0x3c4f699d,0x3c62b76f,0x3bfd784f,0x3d0f5fd3,0x3ca90fa4,0xbc8bdd82,0x3d2c7d7d,0x3ce249c1,0xbcfb08f2,0xbd1852e7,0xbd012bfe,0xbce19031, +0xbcf735ab,0xbcd030cf,0xbc9ca918,0x3cb123f0,0x3d1ea592,0xbcc69107,0x3c0f74f1,0x3d1de969,0xbde001ff,0xbde5023e,0xbe0ab446,0xbdba3203,0xbdbcd48e,0xbdc16ece,0xbdbd1652,0xbdb963b9,0xbda9d954,0xbda06253,0xbd9a7f97,0xbd9676a8,0xbd969dbd,0xbd972b92,0xbd9985a0,0xbd9ab34d,0xbda15288, +0xbda0b71a,0xbda7862f,0xbd9ebb16,0xbdb39214,0xbd5f11a0,0xbc2324b6,0x3db024d4,0xbd8ecb24,0xbc475cc4,0x3db25e81,0x3db0705e,0x3da89768,0x3d8e44cf,0x3db48e31,0x3dac3c6d,0x3d86fbee,0x3bb065b0,0xbd9f1f34,0x3dae8438,0x3cc67d55,0x3e282c33,0xbda7a6ea,0xbe159853,0xbe1cf107,0xbe1e1b7c, +0xbe1c6881,0xbe0e43e4,0xbde4eaed,0xbdd4efb7,0xbddd1484,0xbdd429c8,0xbddaa303,0xbddd29ca,0xbddd9ec2,0xbdd0ef91,0xbdd41628,0xbdc9a7bb,0xbdce63a3,0xbdcb2df3,0xbdd36ec0,0xbc4692a6,0xbd167627,0xbbf9df7f,0xbce8becf,0xbd890dba,0x39b7a9ed,0xbcfb6c96,0x39bb8fc8,0xbcc7c339,0xbc248aac, +0xbd95d482,0xbc12a550,0xbba96cc9,0xbcd5f6ff,0x3bc8fa76,0xbcb1ae1b,0x3c0ad66a,0xbe6c9765,0xbe4050e1,0xbe561446,0xbe52f4b4,0xbe4c6cea,0xbe2f1446,0xbdea4f4a,0xbddcc9a5,0xbdc8b5d6,0xbdd0158e,0xbdcd12fb,0xbdd17897,0xbdbd051b,0xbdc4ec87,0xbdcb309f,0xbdd1cabc,0xbdd7c140,0xbde1ba71, +0xbdaa60a6,0xbd01f9d7,0xbd122366,0xbd641bd2,0xbc9d50c3,0xbc750934,0xbcc736f8,0xbba4d1f4,0xbd90b56c,0xbbd61907,0xbcf3b7cd,0x3bbbe502,0xbce0d0ac,0xbd079c55,0xbc8de8d6,0x3d13d6f8,0xbdc8318f,0x3df7fee7,0xbd1ba6ad,0xbea5337d,0xbe846b7a,0xbe959109,0xbe849815,0xbe5b5d99,0xbdf26860, +0xbe0489e9,0xbe158297,0xbe0f8f63,0xbe1bdaff,0xbe135867,0xbe0ed573,0xbdfbaffb,0xbde6905a,0xbdd09e0f,0xbde5b6bd,0xbdd8a14f,0xbdb3fde4,0xbd6da357,0xbd514168,0xbcb5f5c4,0xbd1978c6,0xbbde3413,0xbc8298f4,0x3c821814,0x3cb724c0,0x3c820bc8,0xba470d2d,0x3cbe1621,0xbc859b70,0x3d582b2a, +0x3cb281fc,0xbba20b9c,0xbcf50b96,0xbdc55d89,0xbe3710a4,0xbebf0892,0xbea0076d,0xbe9fefe8,0xbe985902,0xbe794b4f,0xbe0753b8,0xbdfb7726,0xbdf406f2,0xbe0e9db4,0xbe01b4b5,0xbdec1624,0xbda27fd6,0xbdb6da57,0xbdc65a12,0xbdca321d,0xbdedd8e0,0xbdccd5ce,0xbdaed45b,0xbd3d2acb,0xbd28aa24, +0xbcf3aed0,0xbbb29533,0x3b42186a,0x3c91c5a6,0x3caddb12,0x3d17a359,0x3cf221eb,0x3d1b8994,0x3c8befe6,0x3cfb58b8,0x3c8fd7db,0xbc226e90,0x3baba1e2,0x3b9280d8,0xbe3dd4bc,0xbecfd669,0xbed43d14,0xbee13d45,0xbec0c052,0xbe5cc25d,0xbe16a8b6,0xbd8712cd,0xbde5c160,0xbde6aa98,0xbddd1e56, +0xbe30d777,0xbe6da35c,0xbe788218,0xbe83b260,0xbe45958d,0xbe207aa5,0xbe1aed76,0xbe058746,0xbe0908ab,0xbd896f14,0xbd032c4b,0xbc696f35,0xbc577505,0x3c02a211,0x3ca55a9a,0x3d1fa2a2,0x3d202666,0x3ce58d99,0x3cb1af09,0xbbc2206f,0xbce7d16a,0xbdd38cf9,0xbdcb0fff,0xbd7e1a1b,0xbe4278c7, +0xbdf20145,0xbe6228fb,0xbd9fd5f1,0x3d02a0fe,0x3df889f4,0xbc2f9eb6,0xbd9993b6,0xbde82122,0x3cba640c,0x3e29fb4a,0x3ebe3d6f,0x3ebf682b,0x3ec54d4e,0x3eb09c67,0x3e7285c2,0x3df36b6d,0xba963302,0xbd034ff4,0xbd6544b0,0xbd5c32f0,0xbd9c8a8a,0xbd812e48,0xbd1378ab,0xbc1e2498,0x3c0066b8, +0x3cc2e1b2,0x3d1dbc30,0x3d31d404,0x3cf88a58,0x3cbcb79e,0x3b81553a,0x3c46f9f3,0x3c9527d6,0xbd181a12,0xbda0a130,0xbdf977ca,0xbe91c5d6,0xbce73e84,0x3ec0bf2c,0x3e5ffb56,0x3e3cffb8,0xbe15740c,0xbe404484,0xbe461086,0xbc46ce4d,0x3e289603,0x3e85f2ae,0x3e7d8162,0x3e4714e3,0x3e47b8c2, +0x3e3c8337,0x3e120a9f,0x3df671e2,0x3d453c0e,0x3d1fd0df,0x3b61eb04,0xbcedf526,0xbd3b1fbe,0xbd6e0eb9,0xbd34ce5b,0xbd1a0201,0xbca47ecd,0x3ce3ba7b,0x3d1c943b,0xbb2ff137,0x3cd11645,0x3c94d923,0xbcf5eded,0xbd5bcdb1,0xbd1e779f,0xbdd1174d,0xbd81f214,0x3d504316,0x3e3dfa5e,0x3e530ef3, +0xbd704ebd,0xbeb498e8,0xbe983c3c,0xbe94830f,0xbe59fdd7,0xbe38f8f6,0xbe054d60,0xbe5cb6da,0xbe164c4d,0xbe119cee,0xbe01164b,0xbd6a9a83,0x3b5ff209,0x3d91093c,0x3d3d353c,0x3cb48d70,0x3d201d24,0x3ca33df9,0x3b69b91d,0xbc9d7523,0xbd052f49,0xbc19fa6f,0xbc9504fd,0x3cadca26,0x3d2a30ef, +0xbc803889,0x3ced56e4,0x3c814a7f,0xbbe959b0,0xbcf55574,0xbc8ea9cb,0xbd6007b7,0x3d13e0dc,0x3e84fbaa,0x3e1b20ea,0xbe946fe4,0xbeb8e599,0xbf1ba945,0xbed9ef21,0xbecde4da,0xbe900fce,0xbed29ec4,0xbee8653a,0xbf00bdc0,0xbebd67e9,0xbe8a6d26,0xbe67d8c6,0xbe53a50e,0xbe296543,0xbdf5ec79, +0xbd9ef220,0xbd83e40c,0x3d51691c,0x3d4a688c,0x3bb7dd72,0x3d502dcf,0x3d133aa0,0x3d0ea4ef,0x3d07a34b,0x3d1db041,0x3cbcffb8,0xbc8e957c,0x3cd8803e,0x3cfbfb19,0x3cb3d41a,0x3cb2fcf7,0x3c4c59a9,0x3d25b461,0x3db74189,0x3e185da3,0xbc85a528,0xbee7828a,0xbebb15c6,0xbe96d836,0xbe8681ed, +0xbe919014,0xbea99abe,0xbeb50ac8,0xbecd73d3,0xbec5434c,0xbee1715d,0xbea82669,0xbea321b2,0xbe76824d,0xbe21fbb3,0xbdc4edd7,0xbd3e43b9,0xbcae3b8b,0x3ad806f8,0x3d87bd8d,0x3d9af6c0,0x3d079f26,0x3d359aa6,0x3c263231,0xbbe6f96a,0x3c538eff,0x3c4c0545,0x3c9a9e7e,0x3c9377c7,0xbc07cba2, +0xbc9107bc,0xbc1d2a16,0x3d7a90f8,0x3da83308,0xbcc7508d,0x3e45f26f,0xbe19c99a,0xbe417f07,0xbe1fa5bd,0xbe10a38a,0xbe207f05,0xbe222f3d,0xbe2377d9,0xbdaebe68,0xbd8e1e1b,0xbdea49d2,0xbdd69aa9,0xbe32a890,0xbe5c8d00,0xbe69ecc2,0xbe550c21,0xbe33c90d,0xbdbbd2f5,0xbdaf1fd4,0x3c0ba0f8, +0x3db431a2,0xbd8d9690,0xbc279716,0xbd190feb,0xbc5d5c20,0x3cc7067f,0xbc9d45cb,0x3c43d380,0xbba1a5ed,0x3cd2a75e,0x3c72a54f,0x3c505603,0x3ca6abb9,0xbc8fbcf0,0xbbc4b7c9,0xbc4478d4,0x3cdc70b1,0x3ac2b3e7,0xbde777aa,0xbdc9a983,0xbddf8b60,0xbdedeba5,0xbdf51369,0xbdfb2742,0xbd9be7cd, +0xbd575088,0xbd4f29d2,0xbda005b5,0xbdbbeb1f,0xbdf42345,0xbdec5de0,0xbdb4f5af,0xbd930e46,0xbd8930ad,0xbdbbf2b2,0xbdd46921,0xbc838748,0x3bfb2cac,0xbd4e9a63,0xbbde957c,0xbcd5312f,0xbc0c1561,0x3c82fea2,0x3cac5e4c,0x3bec3166,0x3c339ab1,0x3c296c91,0x3c1b493e,0xbb1d2f80,0x3a3fd1a4, +0x3d0be437,0x3c923f11,0x3c0cd186,0xbd40fd98,0xbd564495,0xbda99036,0xbe0763a5,0xbdef5235,0xbde52959,0xbde51cf9,0xbdebd071,0xbdde17a5,0xbdb72eed,0xbd82ae7a,0xbd341044,0xbcf58e28,0xbcf0eaa0,0xbceb10ca,0xbd2db0ff,0xbd71ba7e,0xbdb4d28b,0xbd7fd031,0xbd8b9192,0xbd329386,0xbd5e4dda, +0xbcf4cc8b,0xbc437fe3,0xbc8fd819,0xbace0538,0xbd600147,0x3cf5732f,0xbcfa1c0c,0x3a985ef9,0xbc9a63d6,0xbc5e6cd8,0x3ca7a621,0xbc63d737,0xbceb7c30,0x3d0b76ec,0xbd9dd77f,0xbda0fda2,0xbd8f8915,0xbd52b3be,0xbd928449,0xbda74715,0xbdbf7ad1,0xbd999abf,0xbd8bdbf1,0xbd8c8f75,0xbd9296e8, +0xbd9a422a,0xbd8bee8f,0xbd9666e0,0xbd912674,0xbd868222,0xbd4af8ea,0xbd259350,0xbd4a327d,0x3c9c40a0,0xbc4533ab,0x3a35072e,0xbca0df94,0xbc4702b5,0xbc0c2dce,0xbc035ce7,0xbc7b56fb,0xbbafd68f,0xbca14a8c,0xbd408b4f,0x3bccbd0e,0xbd1d2b0c,0xbccd99b5,0x3cc90b23,0xbd90b84f,0xbd29120f, +0xbd9f9ff2,0xbd827aee,0xbd93b34a,0xbd9f321b,0xbda49c49,0xbd9d389b,0xbda5e68c,0xbda78c76,0xbda729d9,0xbd9d662c,0xbd9085f9,0xbd83abeb,0xbd785734,0xbd74300d,0xbd75cfe5,0xbd82fe65,0xbd8f8550,0xbd8e7972,0xbdaf21e5,0xbd5cf29f,0xbba2df10,0x3d673a73,0xbd49709b,0x3b37e31f,0x3d93f560, +0x3da3f393,0x3d8c80cd,0x3d7e4fdf,0x3d96ca0b,0x3d89c439,0x3d51bc6c,0xbbc236e6,0xbd42c0ad,0x3d72e3d6,0x3c846bf6,0xbdc84e62,0x3d4ea81b,0x3c3c0289,0x3db23ff5,0x3d2cd5a2,0x3d283714,0x3d2011a2,0x3d4821eb,0x3d54917f,0x3d5a8ec4,0x3d5f6c56,0x3d6b26dd,0x3d6dda60,0x3d752028,0x3d7a9bf2, +0x3d83d523,0x3d7cffbb,0x3d7af9b1,0x3d6c567c,0x3d69d3e8,0x3d479219,0x3d86b3c6,0xbcb26a40,0xbd8f9c85,0xbe050f01,0x3b182ef6,0xbd855653,0xbe03af08,0xbe02d696,0xbdf77574,0xbdded1c8,0xbe0957e7,0xbe0640a5,0xbdf74897,0xbda9715f,0x3bc6e4cf,0xbdee3f07,0xbdccd857,0xbe44a707,0xbc7d7ea0, +0x3cc9c6b9,0x3c86d1df,0x3bbaf3bb,0x3d498b37,0x3d8dc43a,0x3d9825b8,0x3d9559d3,0x3da035af,0x3d9753b7,0x3d9d15c0,0x3dae4ea7,0x3dbb6549,0x3da4c750,0x3dae36c3,0x3da0d65e,0x3d8bedbe,0x3d86e990,0x3db2e3c7,0xbd86dc1c,0xbcb5ee62,0xbd3274fc,0xbd31b628,0x3c4f3b58,0xbd13e65e,0xbc63d934, +0xbd4778f5,0xbcbc6dbc,0xbd0cad25,0x3d5f5780,0xbd0e97b9,0xbd27b135,0xbd0c7bf9,0xbd6ae6aa,0xbd0b0252,0xbe04a328,0x3d16371d,0x3c2f02c7,0xbb6a1e9b,0xbc9c23ea,0x3d71f1a0,0x3db0845c,0x3dbc6953,0x3dcec0b0,0x3dd82dfd,0x3dddb8d0,0x3e0109d0,0x3e0606e6,0x3e0eb704,0x3e0db33b,0x3df5a3d9, +0x3df18adf,0x3db075f2,0x3dd8b380,0x3d153e00,0xbdb1792c,0xbcafcf8a,0xbbc40881,0xbd194d6f,0xbc8fd572,0x3b74c902,0xbb1748cf,0x3d828a62,0xbd04ee04,0x3cfcf2e2,0xbcdb5bf4,0xbba1251f,0xbc4720aa,0xbcfd12fa,0xbda19a38,0xbc29ebe8,0xbe5f7172,0xbe18b8a0,0xbab12c8a,0xbd8e7398,0xbdb07b9d, +0x3d251fab,0x3dd1e6dd,0x3def09ad,0x3df5dd72,0x3df6085c,0x3de120e2,0x3e08e5db,0x3e1a5553,0x3e28dfc9,0x3e172458,0x3e0f4353,0x3e0348ef,0x3dd01dcb,0x3dcdbe0d,0x3d8109e2,0xbbcc76eb,0x3d19c2e8,0xbc816cdc,0x3cb3cd44,0xbc898a68,0x3d15b9ab,0xbbff0ca0,0x3c788d3e,0x3b98b637,0x3d27086f, +0x3bc64984,0xbb3b8fa5,0xbd48d27c,0xbd04eec2,0xbd51718e,0xbd32ef4f,0xbda1ce4d,0xbddd6e88,0x3d1f5178,0xbd9bd6f8,0xbdad89f5,0x3d641d15,0x3df982b5,0x3e014e33,0x3e16d937,0x3e145299,0x3e1c4f94,0x3e3e542e,0x3e4edc70,0x3e6d975a,0x3e5f2b2c,0x3e4b6adc,0x3e332904,0x3e0bbe32,0x3e04e8be, +0x3d9bfe59,0xbdde5590,0x3ba7e1a8,0xbcab370a,0x3a2979df,0x3c8ea249,0x3c9669b3,0x3d2850bc,0x3d2bedf7,0x3d2f4d9d,0x3cfed803,0x3d1a9391,0x3a865652,0xbc82a095,0xbcc93590,0xbd7997a3,0xbe109e8e,0xbe3ce494,0x3c43c67a,0x3e9f4564,0x3e7cc8b5,0x3ea09d64,0x3e905678,0x3e73f17c,0x3e1dd45b, +0x3e8b4dc7,0x3eb80d0b,0x3edf0885,0x3ed41bdc,0x3ed73096,0x3ea71bb4,0x3e9c21b1,0x3e6a12c0,0x3e29cf65,0x3dcfb201,0x3dbd1f73,0x3db42ff7,0xbc9b63b6,0x3d51817f,0xbc75af6e,0x3d0fb5b1,0x3c31a9d1,0x3d16b1e4,0x3d2deafc,0x3d213c07,0x3c9011ee,0x3ca4b67f,0xbc81877b,0xbd81a21d,0xbba98de8, +0xbd46a275,0xbe0f94d4,0xbb6f59c2,0xbd66fb7b,0x3e0fe26c,0x3ec46afc,0x3e8fe86c,0x3e585c3f,0x3e18439d,0x3e1b8bab,0x3d41f13b,0x3dc0c532,0x3de36b39,0x3e1e523c,0x3e8bd1cc,0x3e9c2338,0x3eadc0b1,0x3e99718a,0x3e9063a7,0x3e842101,0x3e4417f5,0x3e3c6247,0x3d94fa9f,0xbd5536db,0x3aa5d507, +0x3b8b1077,0x3c98b1df,0x3cda7ea4,0x3d010d5f,0x3d1c6e07,0x3d27a8be,0x3d1599b6,0x3c59e0fe,0x3c878973,0x3c17735f,0xbd351005,0xbc954e11,0x3c3acf7d,0xbd39860e,0x3e16d72b,0x3e6de173,0x3d6f4438,0xbce8a138,0xbded4cb2,0x3d1052df,0x3d9aeac1,0x3da1d65f,0xbd733894,0xbdf0a5f1,0xbe421061, +0xbdc9b4b0,0xbd87cb31,0x3ad09edb,0xbc95e13c,0x3b9ddb90,0xbc1892c6,0x3d17d595,0x3d3e925a,0x3d98d41e,0x3d6eec58,0x3b12eb10,0x3bfadc3d,0x3ceb0292,0x3c9d471c,0x3b8905dd,0x3cd28643,0x3d396225,0x3aba9d06,0x3d0a0563,0x3cc2688c,0x396da6a1,0x3ce7391c,0x3c9aa4ad,0x3d849a81,0xbc5147ee, +0x3e044531,0x3da3f81d,0xbe71fbce,0xbe1fdddf,0xbd51be1d,0x3ce72bbf,0x3d253fdd,0x3d50aaa0,0xbe047575,0xbe72749b,0xbe909090,0xbea59f53,0xbe8fd00e,0xbe8bfa35,0xbe6078d1,0xbe4c6b6c,0xbe3d0dd1,0xbe00845b,0xbd9c8e43,0xbc768b5e,0x3c3ccd88,0x3d0caa93,0x3ce602c9,0xba814da9,0x3cc6986b, +0xbc1ca916,0x3ce89f4e,0x3d138086,0xbcd966c0,0x3d4bae2c,0x3d25a777,0x3bf8574b,0x3c9340ea,0x3d250bc7,0x3d4ebee3,0x3daa9fd1,0xbc7e8a37,0xbe8c2fc5,0xbd26728d,0x3d45c2bb,0x3e59a9f7,0x3dec659d,0x3d2b8dc2,0xbda95b58,0xbd9aa01d,0xbdfda860,0xbe29c74f,0xbe62d08f,0xbe9258f6,0xbe90c2e5, +0xbe7dc97e,0xbe451c27,0xbe21ce2d,0xbe0136bd,0xbdc394ad,0xbd6048ea,0xbcb816de,0xbcc0cf50,0x3c0dcd90,0x3c136fc8,0x3c189cd7,0x3ca4310a,0x3cb46bad,0x3cc469df,0xbc3558d1,0x3cc99517,0x3ca81378,0x3cb1bb10,0x3cb651e2,0xbc110adf,0xbb8d6bb3,0xbd31fefa,0xbe9497c6,0xbdd7e96b,0x3e1789cf, +0x3dab3401,0x3d815ad5,0x3e179c07,0x3e47378e,0x3e334c2c,0x3e1fc959,0x3e2e77b4,0x3e07284c,0xb9b08709,0xbdcf5cd8,0xbdc70f75,0xbe310a58,0xbe48a5b4,0xbe3c3ecf,0xbe1d43fb,0xbdbcd3a3,0xbd7f6ee7,0x3b6c334b,0x3c456bb7,0xbccedaa5,0xbc7e165e,0xbc8990ac,0xbc2c8592,0xbc1fd214,0x3bce0e8b, +0x3c452580,0x3c5c543b,0x3cd5510b,0xbbd89311,0xbbf4e4a9,0xbcecfc90,0xbda99beb,0xbca799e1,0xbe2d3c24,0xbd83877c,0x3ce04035,0x3caabbe2,0x3d8ded08,0x3d6ee901,0x3d16c7c2,0x3cada6e5,0xbb8e88a5,0xbcaf55a2,0xbd0babea,0xbd22b03b,0xbcb5df91,0x3aed6498,0x3bb8023f,0xba7e881d,0xbd1cc902, +0xbd77fe68,0xbd916f85,0xbd9c815f,0xbdd600ea,0xbd7acc43,0xbd987354,0xbd09925a,0xbc995eb7,0xbc5b224c,0x3c26a5f4,0x39ac7e32,0x3bceaa5e,0x3c1ce6fa,0x3c43655e,0x3bacf7d8,0xbcd53cde,0xbc7ac51a,0xbd46989b,0xbd77fa17,0xbd80efb8,0xbca422af,0x3d47e929,0x3cc1ad8d,0x3d13fa50,0x3ca0794f, +0x3cc83a6e,0x3d1e8b6c,0x3c4c1f6f,0x3c14bd0f,0xbc17b6f6,0xbbea9c07,0xbc5b4007,0xbb5acb57,0xbb2c483f,0xbcaee9da,0xbcdb8860,0xbd38cc10,0xbd21b23a,0xbd7cd2d8,0xbdaabd6a,0xbd924416,0xbd524cf5,0xbd6bf930,0xbcd2f4a4,0xbc848c8a,0xbcba4d4f,0xbc021477,0x3c2536b9,0x3c576a8c,0x3c0c0248, +0x3b9d7f65,0x3af8d597,0xbc6d92ad,0xbd62bda5,0xbd1430d5,0xbd1dde83,0x3c840211,0x3c7ae5e9,0x3c9b02df,0x3d0d6bdc,0x3ce47218,0x3cb39ea3,0x3c9d7f21,0xba77f88b,0xbca553ec,0xbd1dfefe,0xbd0fca55,0xbd1f479a,0xbd33cc3f,0xbd3ed8bb,0xbd3b4e6a,0xbd1cb29f,0xbd27beaf,0xbc86d0e1,0xbd38d3b9, +0xbd6f7e86,0xbd462288,0xbd2d4033,0xbd11ff40,0xbd186cca,0xbd0ba64d,0xbc8a26b3,0x3c55825f,0xbcf5b797,0x3c601f1f,0xbc43dda0,0x3c35c209,0xbbdf013a,0xbcf48bc3,0xbcac59fc,0xb90a255d,0xbdb7447d,0x3c225399,0x3c1d6c63,0x3c767e6b,0x3c856878,0x3ce0c566,0x3d1af959,0x3d4dd12f,0x3d314736, +0x3d17035d,0x3cf64975,0x3c86da6a,0x3b6608d6,0xbc1a5f69,0xbc056734,0xbc53af60,0xbc9b985d,0xbcd9c17d,0xbd06eb42,0xbd0c895e,0xbd71cb05,0xbd301071,0xbd57ec00,0xbd3e9669,0xbd2f15cb,0xbd2271b4,0xbd4e2bd8,0xbd54ece1,0xbd627d81,0xbd421cdc,0xbb4e0f15,0xbd8246f7,0xbcf70465,0xbd058ba2, +0xbd960579,0xbc073fc5,0xbd0b2a5f,0x3cc4a763,0x3c32c43a,0x3c723690,0x3c8b853d,0x3c931e5c,0x3c8c228e,0x3c99267b,0x3c55e76d,0x3c268c48,0x3bf42c10,0x3bc0bf1f,0x3baf2c4e,0x3b1f850f,0x3b14dbf3,0x3b0ac3c5,0x3b4446da,0x3ba22739,0x3bb4a375,0x3c4f3b41,0xbd192d21,0xbda16ed1,0xbdb59663, +0xbd088786,0xbd9c0fd5,0xbdc1c0ba,0xbdca0fee,0xbdb81430,0xbdb169ce,0xbdcd2d6a,0xbdcf1e2b,0xbdb36307,0xbd71fd35,0xbc9f32e3,0xbdb91d1c,0xbda65ca6,0x380b6add,0x3d8acdb8,0x3da1f75a,0x3d13e835,0x3d296441,0x3d29fbb9,0x3d2c0ea6,0x3d37ceed,0x3d483056,0x3d5cd439,0x3d3f90f8,0x3d32a820, +0x3d253c1d,0x3d1cd24e,0x3d1467ce,0x3d0de305,0x3d0d8ba6,0x3d119d68,0x3d0dc945,0x3d10e309,0x3d16adae,0x3cfce32b,0x3d962802,0x3da42e1c,0x3d11ec36,0x3d865437,0x3da2b89d,0x3d32b2a7,0x3d379f5f,0x3d304bfa,0x3d2df0b9,0x3d565fb1,0x3d52c6c6,0x3d5c46b0,0x3da6b623,0x3d871554,0x3d10cb30, +0x3d9efc75,0x3d1c7c24,0x3d3f5b44,0x3d76c641,0x3d917241,0x3d907cbb,0x3d9d726d,0x3da7c76f,0x3dc430de,0x3da7fdb4,0x3da77b2d,0x3d8db48a,0x3d872c6b,0x3d7ee6df,0x3d6d4c22,0x3d555bb4,0x3d4a91a8,0x3d2c0e60,0x3d364183,0x3d20fba7,0x3ce68e8d,0x3d939684,0x3d57f6f9,0x3d406ca0,0x3d8f63d4, +0x3d62c8f2,0x3d4d7d02,0x3d71680d,0x3d89b9a3,0x3d67cfd0,0x3d8bf97a,0x3d1f9a55,0x3d417149,0x3d59c7d0,0x3d6776a5,0x3d635df6,0x3d497135,0x3d93852e,0x3dad45ef,0x3d92257d,0x3dbeb6c7,0x3db72eb6,0x3ddb6abc,0x3de4d85f,0x3e0eb1b5,0x3de85e94,0x3dd4838e,0x3db8351f,0x3d9a5b0d,0x3d801886, +0x3d3de15b,0x3d295e3a,0x3d268ea6,0x3cef83c2,0x3d21f934,0x3c942792,0x3d4d4243,0x3dc3374e,0x3d3b288b,0x3d6502a3,0x3d34164b,0x3d09cbe4,0x3d6d7fb2,0x3d1983b8,0x3d053678,0x3d8278be,0x3d24a3b4,0x3d725643,0x3d06f3b9,0x3d285ab1,0x3d26e153,0x3d1c1ac2,0x3d4421fa,0x3c6ef6e6,0x3d03ca9e, +0x3df2543e,0x3e010ae4,0x3e02db94,0x3e1049c0,0x3e15b040,0x3e2f8231,0x3e2aea20,0x3e272026,0x3e04bf47,0x3df642ec,0x3dca95e3,0x3dae1ebd,0x3d80ec49,0x3d496e91,0x3cced3fa,0x3cff85de,0x3c53737d,0x3cd55e1e,0x3d381dfe,0x3ae52333,0x3cda08ee,0x3b2e3457,0x3ca26f30,0x3cbcf25a,0x3d0d91ab, +0x3cc68ee8,0x3c935dee,0x3cea42d8,0x3d0eaa61,0x3c849a61,0x3c8c7fde,0x3bb2db7e,0x3cfeb488,0x3cbcd2e9,0x3d6d9ad8,0x3dd34d5e,0x3e097021,0x3e11310a,0x3e0687de,0x3e1ccbf5,0x3e39e7c4,0x3e5d7167,0x3e33ab01,0x3e2e9263,0x3e13f3d2,0x3ddbf91a,0x3d869134,0x3cd62e04,0x3cddf276,0x3ca923fd, +0xb73b506c,0x3c4f8cda,0xbc150af3,0x3c8b3d82,0x3dc0d75a,0x3c4cf53a,0x3ccb5cf7,0xbad0fc7a,0x3aa3d755,0x3ca243d4,0x3c78fe5a,0x3cda8869,0x3caa13e8,0x3d049efb,0x3cf8ed0c,0x3b7cda55,0x3bb9e126,0x3c19b327,0x3ca21ed7,0x3d14759a,0x3e43f031,0x3e97582b,0x3e37803c,0x3ea62020,0x3eb18cd0, +0x3e9fbe40,0x3e94d72e,0x3e84f98b,0x3e9f28a5,0x3e8dada8,0x3e77b550,0x3eb1aaf8,0x3ed395aa,0x3ec7619a,0x3e9c609f,0x3e4efdb2,0x3e50623a,0x3e1d5d5b,0x3dac0101,0x3d3fb808,0x3d55b26b,0xbb7620a0,0x3d07ca17,0x3c0e26cc,0x3d0dafb5,0x3d00cafb,0x3d176833,0x3ce447c6,0x3bf3861c,0x3caf4130, +0x3d0023b9,0x3d22e2ca,0x3da14ec6,0x3dd0a665,0x3de4cbdd,0x3e032666,0x3de21de4,0x3e03ea2c,0xbdb086f5,0xbddfe4e0,0xbe093efc,0x3c7c54a0,0x3e09e17d,0x3e58ba57,0x3d8e0ab5,0xbd1cbbed,0xbe00c1d7,0xbe1e919f,0xbe3d065d,0xbe179359,0xbe0870b6,0xbde88f7d,0xbe1b1afa,0xbdb8a02e,0xbda04fa8, +0x3d0f9c40,0x3dedb22b,0x3d81e7d9,0x3d340619,0x3cca7f4f,0x3c9303e5,0x3cdcdc74,0x3d0832ed,0x3d1ce5bc,0x3d0993b4,0x3c955c48,0x3c8bc9cb,0x3be1594d,0x3cb05a33,0x3d12ff06,0x3d6dab41,0x3dc5360d,0x3e3a5e6b,0xbd4302b9,0xbe543bcf,0xbdb20fb6,0xbd1d295d,0xbcc9f6bc,0xbdcde38d,0xbe03c2b8, +0xbe1a58e7,0xbe690eb8,0xbe57625e,0xbe88e3dc,0xbe6d5343,0xbe63ce2d,0xbe826457,0xbe591a60,0xbe4293b5,0xbdc740f7,0xbdc9f350,0xbcf8f20b,0x3d1302e4,0x3d2be5a0,0x3d8e1c1e,0x3ceae2c1,0x3d2dcb56,0x3cd800b3,0x3d27eb11,0x3d1f2954,0xbb04d61e,0x3d2ebdb2,0x3d339bd5,0x3cbee5b4,0x3d6639b7, +0x3d5c8563,0x3db15479,0x3db11059,0xbcc71911,0xbdc92696,0x3d57c533,0x3e08ecfb,0x3e4aa49f,0xbce53da4,0xbdfbcc37,0xbe27457e,0xbde9dcda,0xbd99c8d1,0x3d8a8034,0xbca56e91,0xbcf1fa4d,0xbd4fb267,0xbddea361,0xbe014cdd,0xbdfd92d9,0xbdb05482,0xbdc4d09c,0xbd62dd5a,0xbc6af8f6,0xbc5da6f6, +0x3bd3a7b3,0x3ca239d9,0x3b196d6f,0x3ccb60a1,0x3cafffa9,0x3d16d38b,0xbb07d3a4,0x3d2a0d9b,0x3d4a0871,0x3c44680a,0x3d365b98,0x3cc57736,0x3d5fb9da,0xbbabce94,0xbdde82b2,0x3e098339,0x3e5e8ab6,0x3e2b7e54,0x3dc6c640,0x3d7fc47f,0x3df9618c,0x3e012ef1,0x3e3ceb14,0x3e814576,0x3e7d0ab2, +0x3e50c453,0x3e051627,0x3db95b75,0x3d362cba,0xbac22663,0xbd3c49a1,0xbd938f4c,0xbd93a101,0xbd598eea,0xbd268f41,0xbcc6b5e5,0xbcd40c66,0xbcc58230,0xbc90dacb,0x3c1b6dd6,0x3a959311,0x3bf12db1,0xbac25827,0x3cd287dc,0x3ce745c6,0x3c58fffc,0x3c403fc1,0x3cc5a90e,0xb9ad09f9,0xbc87fbe9, +0x3e462b9b,0x3dc67175,0x3dd1410c,0x3df806f6,0x3d8ddad9,0xbca0d590,0xbdb10f47,0xbce4a110,0xbca2a603,0x3c102b08,0x3ca95f59,0x3e2234c8,0x3e056fa0,0x3dabd694,0x3db2ba4f,0x3d82d5a3,0x3c9e3c0c,0x3c7cfdc5,0xbc9e75f3,0xbd4277a6,0xbd267efb,0xbd8138a7,0xbd2dcdfa,0xbcda3645,0xbb2fd832, +0x3c805ca5,0x3b8ee5ec,0xbb09191e,0x3b0d6c08,0x3cf376a3,0x3d2842df,0x3d98387f,0x3d339b80,0xbbca59ad,0x3d4b49e2,0x3b74e264,0x3c8ad88c,0x3e0b68d9,0x3dc016ab,0x3d93995c,0xbbfab1fc,0xbc694e66,0xbc24faa7,0x3ae9e3df,0xbbbdcb93,0x3c5795a3,0x3d71d887,0x3d32c464,0x3d953b16,0x3d82958b, +0x3d35920d,0x3c701a8d,0xbc4ae993,0xbd30f1a3,0xbcf0202d,0xbcd7a078,0xbd7800a6,0xbb88b1dc,0x3ce80b2f,0xba04be69,0xbbb46242,0xbab4575c,0xbb8f1bfd,0x3bdb8416,0x3beeff9e,0x3c48838d,0x3c5f2069,0x3c607f52,0x3c61dd72,0x3b855d24,0x3cb6c34b,0x3d0ce062,0x3d37d111,0x3cc73278,0x3c863755, +0x3cde3896,0x3bf6662a,0x3c76723f,0xba4762f6,0xbc968913,0xbcd956ad,0xbd224fd5,0xbcad4e17,0x3a1718df,0x3c3b1791,0x3cf9e68e,0x3c5809d6,0xbc2a7bda,0xbd12d82f,0xbd01d412,0xbcb212af,0xbac1891b,0xbc79eee8,0xbcb6e71d,0x3c50e3f8,0xbbf52324,0xbc2e870f,0xbb8c0457,0x3b5b34fc,0x3b0e0bcb, +0x3b98f74d,0x3ba6e741,0x3bfde16f,0x3c9ffbc7,0x3bc6322b,0x3c2291bd,0x3cd04262,0x3c49387b,0x3d0190c1,0xb7a44571,0xbbd2edae,0x3c12d87f,0x3cb26e41,0x3ca0fef4,0x3cac41cb,0x3cb0db25,0x3ce442c3,0x3cdbf765,0x3cacebd4,0xbc225b31,0xbcb9e6cd,0xbd02aed5,0xbd2315d2,0xbd36c482,0xbd43210b, +0xbd0654e0,0xbd00cc4a,0xbceb5d92,0xbc226593,0xbc9cce1c,0xbc360bba,0xbc4ca359,0xbb9d787a,0x3c4f2d9f,0xbb8ec250,0x3bdc3a89,0x3cdb4f6d,0x3a6b0e13,0x3c97ec74,0x3af1165c,0x3cad6d28,0x3cd3a92a,0x3cfb8b61,0x3c83adfa,0x3c95ec43,0xbc32daca,0xbba85e5f,0xbc6a1f1e,0xbccc238e,0xbcee391d, +0xbd0a4031,0xbd180f9b,0xbd30a6b3,0xbd24a19b,0xbd0bd291,0xbcb01dc0,0xbc3c020d,0xbc1e0192,0xbbb064f9,0xbb7d099d,0xbbdd5ab6,0xbc6c6241,0xbc89a568,0xbc87b206,0xbcbee769,0xbc449cb0,0xbadfa43f,0x3c3167db,0x3be6dcc2,0x3c1b7902,0x3c88adaf,0x3cbb9c72,0x3c76ff6a,0x3cb6c855,0xbb9108ea, +0x3cf43d0b,0x3cb54d93,0x3b97b2ad,0x3c447009,0x3c2019ec,0x3d146167,0xbc128c9d,0xbbd23e61,0xbb94a208,0xbaf85392,0xb9b872ba,0x39bfd728,0x3af94da4,0x3ba2c742,0x3b953288,0x3ab217a8,0xbb356842,0xbbe09e3e,0xbbfa082a,0xbc16e773,0xbc2822ef,0xbc14663e,0xbbb7815a,0xbbc1ac79,0xbba01d6d, +0x3ce1d826,0x3d146de4,0x3a8efb98,0x3cda40d4,0x3d2170d1,0x3c24aaaf,0x3c1fc455,0x3c3278c6,0x3c4f6ab9,0x3ca5bd15,0x3cca7377,0x3caf02e2,0x3d220f30,0x3cdc965b,0x3c8c2b73,0x3d3f280e,0x3a2649ea,0x3cfeb479,0xbb2ac289,0x3cd0b002,0x3cb0c950,0x3cb99b4b,0x3ce4c9aa,0x3cb5a096,0x3cb14859, +0x3cb84dec,0x3c8f5bbd,0x3c787c38,0x3c6eca39,0x3c47db6f,0x3c2f3442,0x3c0cbf91,0x3c2ca678,0x3c3f06cc,0x3c42f83f,0x3c5f7c59,0x3c731caa,0x3c771cee,0xba9c5d8a,0x3bb91c82,0x3d55a5d3,0xbad4b5fd,0x3b38bd39,0x3d4784ba,0x3d3be05d,0x3d3d7d1f,0x3d2bf657,0x3d2eca4b,0x3d239e22,0x3d0eda35, +0x3b3a68ea,0xb8b5be4c,0x3d3c2e14,0x3bd79c94,0x3ce89bba,0x3cf906bb,0x3d3cfa26,0x3d4b10a3,0x3d940874,0x3d6d66b4,0x3d5ae255,0x3d7bccff,0x3d3b1f62,0x3d0b8749,0x3cc8872a,0x3c673efc,0x3be61a37,0x3b6006eb,0x3c14ecf8,0x3c094d4f,0x3bf4f2f1,0x3c31371b,0x3c7e9b58,0x3c6ba11b,0x3c830881, +0x3c953910,0x3ce1bb1a,0x3b9b9c8a,0x3be62751,0x3d10a453,0x3c9e7c65,0x3c948bbc,0x3c80b993,0x3cc0e34d,0x3ccd9cba,0x3cb9a0d8,0x3c93b298,0x3c89453d,0x3c889f71,0x3ca89b68,0x3bc1a5bb,0x3d188fdb,0x3d6d2b7d,0x3d7f260d,0x3dc65779,0x3d6d1fb1,0x3d540707,0x3d802495,0x3d0e17cf,0x3cb2954b, +0x3c5f1eb0,0xbc4071a0,0xbca9dcb8,0xbcfb4aa0,0xbccadf69,0xbc97f71e,0xbca24acf,0xbc1ea767,0xb9983f47,0xbbfcd0bc,0xb9a6b5bd,0x3c39e92e,0x3a38bda9,0x3b6c8859,0x3c730a5d,0x3c710874,0x3caf02a1,0x3c803896,0xbb94a407,0x3cd64a8f,0x3c93b412,0x3c67c2c5,0x3c9646a5,0x3c894db3,0x3c8b3edf, +0x3caceb87,0x3d132b86,0x3d8c7699,0x3db630d3,0x3dd9565b,0x3e2c6d92,0x3de2a407,0x3ddd4dcb,0x3e0abd53,0x3db2bca3,0x3d7def28,0x3d0a35f6,0xbb6f2954,0xbcdeee5c,0xbd209e9e,0xbcd66605,0xbce15865,0xbd014d5b,0xbc840108,0xbb62d2cb,0xbc411db7,0x3afa054a,0x3c3de8e5,0x3be319e1,0x3be302e4, +0x3b2fbfeb,0x3cf33f70,0x3c1e74da,0x3cbf7555,0x3c555225,0x3d09ac6c,0x3cc2d8dc,0x3c0ce585,0x3b5fc704,0x3c69829f,0x3c3fa3af,0x3ce13ea7,0x3d109adf,0x3d68f84f,0x3db3519b,0x3dd74b53,0x3e21cd6c,0x3daac3a7,0x3d79eaec,0x3dc4d55b,0x3d824a25,0x3d083f23,0x3cf0cb77,0xbce8c33d,0xbd54afac, +0xbda5bd70,0xbd92b7e9,0xbd8890d5,0xbd8a42d3,0xbd3bcd3b,0xbcf097dc,0xbcb24088,0xbbcf158b,0x3c7156d8,0x3a9f5cde,0xbac5738b,0x3bbafab6,0x3cc18911,0x3cc38856,0x3ccf6d1b,0x3c8b9657,0x3d09a3cf,0x3ce54fcb,0x3cab32af,0x3cd93672,0x3d143b7d,0x3d324856,0x3d43989e,0x3dafbb2a,0xbc55a237, +0xbc8582d2,0xbd888fcd,0xbdac5e9a,0xbdfb7816,0xbdec60a5,0xbe204d57,0xbe1e10b7,0xbe19494f,0xbe1e7b76,0xbe148761,0xbe2cea1a,0xbe2c28f3,0xbe1e8732,0xbe0aaa09,0xbd9a0c49,0xbd5689ca,0xbd1867ce,0xbc1b2e01,0x3c4c7a69,0x3c2d4b11,0x3c1eba01,0x3c0be45d,0x3c6c7d70,0x3ccf5aef,0x3cdd732c, +0x3cd8b6e8,0x3c747653,0x3c469beb,0x3c9d75dc,0x3d08d2ec,0xbaa5cd9d,0x3ac5e53f,0x3d317c8e,0x3c984a05,0x3cba6d80,0xbdcc2d9b,0xbe5ccd8d,0xbe407e16,0xbe22a0f2,0xbe425582,0xbe81b952,0xbe6c960c,0xbe3b5656,0xbe1f3ff7,0xbe3116c5,0xbe7f1e0a,0xbe8e13fd,0xbea678c2,0xbe9d0250,0xbe87fd1c, +0xbe559b55,0xbe2313ec,0xbdc2be9c,0xbd94777d,0x3a93ef58,0x3bff85cc,0x3b046568,0x3b98b838,0x3b87dace,0x3c9b7794,0x3ca97e1a,0x3ceb6cf5,0x3cc97cd8,0x3cec2243,0x3d1c89c2,0x3ce1d8a8,0x3d2a12c5,0x3cdeadba,0x3c47ab23,0x3cd10c19,0xbe058528,0xbdd8c780,0xbd179c13,0xbd63b2e8,0xbd81ffad, +0xbe11126b,0xbe05cc65,0xbdf9e98e,0x3cb41b0c,0x3dc32404,0x3da5bae2,0x3c85524f,0xbd61747a,0xbe0028e1,0xbe0038e3,0xbe1c51d6,0xbe000652,0xbe107777,0xbdd7b757,0xbd9c0d61,0xbd638de1,0x3b83c7b1,0xbb13417c,0xbb6fbebe,0x3c5fdaf3,0x3d158d16,0x3d19774a,0x3d4718ad,0x3b7c7adb,0x3d34c0aa, +0x3d0dd8ba,0x3c986b7d,0xb8b55a63,0xba931856,0xbd250926,0xbb9be203,0xbd524d75,0xbcde53de,0xbdc68940,0xbe4624ba,0xbe3e84bb,0xbe16af44,0xbdd8931f,0xbe0a747e,0xbc11b23b,0x3d255771,0xbbec8979,0x3d5299a8,0x3b34075c,0xbd2fe756,0xbd23f423,0xbd124e0b,0xbd0063c8,0xbd5a0b3c,0xbd518ec5, +0xbd5d74cd,0xbd79831b,0xbd27ea71,0xbcc741fc,0xbc71f152,0x3b087d5e,0x3cbb90c3,0x3cf38cb4,0x3cf65d40,0xbc4e0408,0x3d056937,0x3cde837f,0x3b32e2eb,0x3c3fa279,0xbc236fd9,0xbc7edd25,0xbd21803f,0x3db6c4e6,0xbd933627,0xbeabb4f8,0xbea93c4d,0xbe61510f,0xbe545116,0xbe57bda5,0xbe2419ad, +0xbe667d55,0xbe870c91,0xbe6eebe1,0xbe2baca4,0xbdb01e51,0xbddbe02d,0xbd46abd8,0xbd057fbc,0xbc723ec8,0xbc0b3703,0xbc071230,0xbd6264ae,0xbd4814a6,0xbd306b8e,0xbd7529fc,0xbd3989c9,0xbc8c582b,0xbb334999,0x3b7d0ec9,0x3b037b80,0xbc52ff97,0x3c7dbe56,0x3cc90c44,0x3ceb2c61,0x3c8aba54, +0xbc493e2b,0x3ccc2464,0x3cddae75,0xbd950586,0xbe063a17,0xbe6e2ccc,0xbe3f77b7,0xbe077ab8,0xbe0a3473,0xbdfbfc80,0xbe2daaa5,0xbe1a527e,0xbe32af2c,0xbe3c00a5,0xbe441eea,0xbded5586,0xbda9dcd9,0xbd75c9b5,0xbd34e6eb,0xbd0329b6,0xbd5f14b7,0xbd43ba36,0xbcd2b35b,0xbd68f2f4,0xbd2d6a1b, +0xbb81d479,0x3ab72068,0x3c045f46,0x3bfef370,0xbc7d1b6e,0xbc0a6c52,0xbc820211,0x3b96c3cf,0xba7fdf76,0xbc42fabb,0xbc71836b,0x3d0d7c95,0xbb54e0a5,0xbb10e1ee,0x3d3c536c,0xbe153ad2,0xbddb148e,0xbd9e3a52,0xbd62706b,0xbd72f1ab,0xbd4327ce,0xbd08bb27,0xbd30f3b4,0xbd4f0dc3,0xbd8b07ce, +0xbd400432,0xbdbf164b,0xbdfd7001,0xbe15e9e5,0xbdfc6d43,0xbd6bbebe,0xbc3750ed,0x3bce2890,0xbc800b5c,0xbb3ec004,0x3b889cf9,0xbd27c8af,0xbc397cd8,0xbc27d20c,0xbc0ad877,0x3c5f8cb7,0x3beb149c,0xb9f64e88,0xbaa4e1d6,0xbb09b335,0x3bbda7a2,0xbadab53c,0xbc97ede0,0xbcd29a90,0xbd3c6b11, +0xbcdceb78,0xbc4b7f19,0xbcdd98c9,0xbcd6991f,0xbccda78c,0xbd1f8d59,0xbd2218e4,0xbd2b1ba0,0xbcff8fcd,0xbca9d75d,0xbce6aa79,0xbd2ceee6,0xbd4c8c14,0xbd8b3174,0xbd9541b1,0xbd6b7f61,0xbd1d8f43,0xbc8f3e7c,0x3963c0c1,0x3ba990c5,0xbc2e3bb9,0x3b51e0ec,0x3bc47080,0x3ba54758,0x3c1ea66f, +0x3c831330,0x3b343f14,0x3c10c17f,0xba12c7e0,0xba1466c7,0x3b0e41bf,0xba85f482,0xbae44d04,0xbb463ca4,0xbc117b9f,0xbc06ace5,0xbcc95eb4,0xbc9f52ea,0xbc63bc56,0xbd2d0686,0xbd6a93f1,0xbd71a382,0xbd84fee0,0xbd9ea264,0xbd9babd5,0xbd93a5f4,0xbd8a2524,0xbd340fed,0xbd080178,0xbcce2fc1, +0xbc0b1f72,0xbb337a54,0xbb676473,0xbc1a4f9a,0x3c129159,0xbb9701ad,0xbc8e1c96,0xb8591946,0x3b32df4a,0x3bc78d9a,0x3ad809aa,0x3b5433b1,0x3b3f307c,0xbc44ca34,0xbcfd2a47,0xbc1fa526,0xbc8f59df,0xbb464f85,0xbc967ba8,0xbc63afa9,0xbce47923,0xbca35529,0xbc8b5412,0xbd2f1767,0xbd539773, +0xbd3f9f3a,0xbd296731,0xbd55acfc,0xbd577477,0xbd67e844,0xbd36dbe6,0xbd208522,0xbd126f5c,0xbd200d09,0xbd28a304,0xbd21039d,0xbd284ff6,0xbd0ddb2c,0xbcb08060,0xbc3f8fdb,0xb9ff8806,0xbb1b2c46,0xbc8fdaf5,0xbcb25d41,0xbcf1ff31,0xbcef2905,0xbcf227ab,0xbd0e12c5,0xbd0c62d7,0xbd22214e, +0xbcb86361,0xbd0939cd,0xbc9fbd72,0xbce1e362,0xbd39f3f7,0xbccd9143,0xbc5d494c,0xbd71dd7f,0xbd5a2540,0xbd09a65a,0xbcff2f64,0xbd123b07,0xbd1dab3e,0xbd2684fb,0xbd2cacf3,0xbd422887,0xbd3ff313,0xbd3de7bd,0xbd322bdb,0xbd1fbd95,0xbd0b1f0c,0xbcf8c2cb,0xbcd5406c,0xbccae027,0xbcd50aea, +0xbcddc2fa,0xbcd7e58c,0xbc987a55,0xbd277458,0xbcf749f3,0x3c3e4c5f,0xbd3ef3b6,0xbd166bde,0x3c7234c1,0x3c85f226,0x3c4af74b,0x3c2310d0,0x3c04c9fd,0x3b929c3b,0x3b7fd57f,0xbd14e7e9,0xbd423282,0x3c31cc0e,0xbd0576f7,0xbd5cf85d,0x3d1ee9dc,0x3d810d14,0x3cc2f01f,0x3cf5bb50,0x3d0281e5, +0x3d07c45c,0x3cd400cf,0x3cb9f2cd,0x3ca207d7,0x3ca4ffb9,0x3cabffe6,0x3ca2d056,0x3ca05188,0x3ca36a29,0x3ca97d88,0x3c93dfa5,0x3c936aaa,0x3c93ca6d,0x3c9ff2ec,0x3ca092d1,0x3c865d34,0x3d46385c,0x3d32676a,0x3c048657,0x3d493b40,0x3d459e50,0x3c64fac3,0x3c586274,0x3c453115,0x3c6f141c, +0x3ca9ce01,0x3cbb90b1,0x3cd02cd1,0x3d4d57aa,0x3d5921ac,0x3c491b9a,0x3d3f687d,0x3d30e19a,0x3d893b74,0x3d85db45,0x3d8acfe7,0x3d887499,0x3d11d39c,0x3cb1a323,0x3b9301fb,0xbbc6acbe,0xbaea540f,0x3be20494,0x3c1ca467,0x3c767e96,0x3cadafe3,0x3c804748,0x3c96c56d,0x3c9e831c,0x3cc4ad63, +0x3cbb8e4d,0x3c75d658,0x3d1525f7,0x3d0ef1b7,0x3cb9bf0c,0x3d3218d1,0x3d2dd3ab,0x3cf6552f,0x3d31bd5c,0x3d33cd53,0x3d13aa6b,0x3d2f12e8,0x3ca8f874,0x3cd62a3d,0x3d16b320,0x3d40836c,0x3d3f6158,0x3d3b518b,0x3db26fe6,0x3da93fbd,0x3d9b9ff1,0x3db55f09,0x3dba90ee,0x3d6022a8,0x3cf74ec0, +0x3b2324f1,0x393d4853,0xbbed225e,0xbb7055e5,0x3b99bbbe,0x3be46f50,0x3c6733b0,0x3bace3bf,0x3bb987bb,0x3c1196e1,0x3c9939ff,0x3c69ffa7,0x3c8a292d,0x3d1d21f5,0x3cd4c1d6,0x3d04f106,0x3d10da0f,0x3cde2b18,0x3d378d64,0x3cda549c,0x3d1666d2,0x3d57fa90,0x3d0fbea8,0x3d3784e9,0x3cd21bdf, +0x3d349d1e,0x3d483c23,0x3d4404a4,0x3d90eac2,0x3daead34,0x3dd21380,0x3def017a,0x3df1177f,0x3e041157,0x3d67ab65,0x3c1c7da1,0xbd35440c,0xbd9651d4,0xbd9a8eb7,0xbd3122aa,0xbcf0d96b,0xbc7fb139,0xbaf5bdf0,0xbc0c43a0,0xbbbfbb7d,0x3a95b3d9,0x3c636aec,0x3c2ccfda,0x3b862cac,0x3c8711d2, +0x3be3c379,0x3bf244b7,0x3bcc39b3,0x3ca9a9d8,0x3cc81c13,0x3d1e5fe5,0x3cb4e338,0x3c86dfa8,0x3c90db82,0x3cda1212,0x3bec17a4,0x3d19da34,0x3d374c15,0x3d7b6e79,0x3d83a303,0x3dafe663,0x3dc12a36,0x3d9c86a9,0x3de77591,0x3e046136,0x3dbc187d,0x3d5b7260,0xbc5dfd4e,0xbcdcdba9,0xbd42ea70, +0xbd29bcfd,0xbc9422ca,0xbbde631e,0x3bbf561a,0xbc83123a,0xbc8c820c,0xbb1e31c2,0x3c609564,0x3c20ca2f,0xbc1ce738,0x3ce69a0b,0xb9f616fd,0x3c468314,0xbb10395e,0x3a401e32,0x3c6725ca,0x3c27dc25,0x3cb3ed89,0x3c75d059,0x3ceb49d6,0x3cad426a,0x3a95459f,0x3d0f30d4,0x3d51434f,0x3d2159d5, +0x3d808c06,0x3db44d45,0x3ca225ca,0xbd147627,0xbd3f5ff0,0xbc318b02,0x3babb382,0x3c27c079,0x3c6ba7d8,0xbd11779b,0xbcd156f7,0xbd3c2a5e,0xbe2103d6,0xbe50f066,0xbe50bd4c,0xbe09a7aa,0xbdcdd2fc,0xbe3321a0,0xbdff3ed9,0xbda4c51b,0xbc9e9ea5,0x3c1cbf24,0xbc4c716d,0x3c0b7ca4,0x3a1a3f26, +0x3c9dd14f,0x3d08b5c2,0x3cbd1c27,0x3c9a6184,0x3caba976,0x3d27c9fc,0x3d0878ba,0x3c83b066,0x3b752e90,0x3ca9e037,0x3ca4b605,0x3df56a31,0xbd69d84d,0xbd6eb69c,0x3d69fa54,0x3de204bb,0x3e361fc0,0x3e6a95b2,0x3e696609,0x3e06b065,0x3e3a972a,0x3e0d83ae,0x3d8cc8b2,0x3d5b7390,0x3cb4762e, +0xbd2bcc16,0xbd92e744,0xbd887ff7,0x3bec230b,0xbbf6c7f2,0xbce263c0,0xbcb7c5ff,0xbd051597,0xbc8ba8ae,0xbbc89558,0xbb878af6,0x3bd21742,0x3c959663,0x3cb2c5ce,0x3d210758,0x3ce6cae5,0x3d36da9a,0x3d450f84,0x3d68f163,0x3d0d8806,0x3ca51f29,0x3b9cc198,0xbcc5fbbe,0xbd60a399,0x3d1a2e0b, +0x3d9c7148,0x3dcdd2d6,0x3e3b9fee,0x3ea9bb52,0x3eb61c16,0x3e54a185,0x3e1f9ac6,0x3df10d49,0x3db9d82c,0x3e20c38e,0x3e25bc39,0x3e0536ba,0x3e00992a,0x3dbe0853,0x3dc722bf,0x3d242f20,0x3d007e84,0xbbefe35d,0xbd02e74d,0xbc88d6fe,0xbc95f87f,0x3b83341c,0x3c35c82b,0x3d0542a0,0x3d1b059a, +0x3cefea39,0x3c7739c2,0x3d2afeef,0x3d00761c,0x3ca6a263,0x3be89718,0xbc0111b4,0xbcc12fc8,0xbcedadc5,0xbb1dfb15,0x3d237ba5,0x3d95d871,0x3e2174e3,0x3e85ba27,0x3e9e6e45,0x3e90341a,0x3e0db099,0x3d81327d,0x3cb83f7b,0x3d1513fa,0x3d99a2ad,0x3dfe5d83,0x3e1b8cff,0x3e101dd5,0x3de906cc, +0x3d9a2313,0x3d4166c5,0x3d4d18ee,0x3c136f23,0x3ba7c81e,0xbc18adf6,0x3c1bb66e,0x3b7695aa,0x3ca0919b,0x3d22efd3,0x3cebbd49,0x3cba126e,0xbb5fc88f,0x3cb5a2cf,0x3c9db909,0x3cbc9f28,0xbaab0907,0x3af5817c,0xbc752849,0x3cc62060,0xbd8a4f85,0x3d3dde1e,0x3e56bbfd,0x3e8994fc,0x3ec696d4, +0x3ea8e5a4,0x3e803769,0x3da10821,0x3e03c87a,0x3dd52b05,0x3de7467a,0x3d8829d5,0x3d2e4c71,0x3d845f42,0x3d4570f8,0x3d4d6d18,0x3d7a60ad,0x3d5a969e,0x3d2c0d26,0x3c5715e3,0xbb974853,0x3c9e604e,0xbb4e915d,0x3c8aa405,0x3cc648a8,0x3cdfeb35,0x3c9474a4,0x3c40b3c9,0xbbcd6255,0x3c85b864, +0x3ca9aa88,0x3d11ff85,0x3c7631ab,0x3ca50353,0xbcb3db75,0x3b793000,0xbd0dbc40,0x3d95e690,0x3e8249b0,0x3e5fc020,0x3e8d4b04,0x3e83f1ec,0x3e7a4f2a,0x3e275518,0x3e19e81a,0x3e2af034,0x3e5de2dc,0x3de2d6e9,0x3d4a66b2,0x3d86484a,0x3c81a645,0xbbfd9392,0x3b7cc19d,0x3c947115,0x3d46f2ab, +0x3d95ad44,0x3cbcc11c,0x3cc8571f,0x3aa02834,0x3b75e9ec,0x3c65d130,0x3cb76c2c,0x3c91ea64,0x3c94e82e,0xbbab1fbe,0x3c47f47a,0x3cb66776,0x3c9010b1,0x3ceb2fdf,0xbc7f474d,0xbb810d86,0x3d1af5e1,0xbdbf9ae6,0x3dc82e82,0x3deeb2cd,0x3dfa716d,0x3e2dab09,0x3e128f71,0x3dc692f7,0x3d179c65, +0x3b9adc42,0xbcea5d28,0xbd0ca62a,0xbd1c55e4,0xbc369b35,0x3c8922bf,0x3d3fb249,0x3d7f6095,0x3d7e8fd5,0x3d81d121,0x3d834017,0x3c6d9edb,0x3bd163b9,0x3d57bf15,0x3d062616,0x3d0b878b,0x3cafcd3d,0x3c6c7c28,0x3c89e0aa,0x3c25459b,0x3ca63fdd,0x3c7e0d3f,0x3cdc0038,0x3c88bf00,0x3c43e1a8, +0x3ceea5fc,0x3c33c4da,0x3cea7fdb,0x3cd27c24,0x3d0673a4,0x3da40f9c,0x3d9ad76e,0x3da6a0de,0x3d8747d9,0x3d548415,0x3d1869ac,0x3c95f33f,0x3c11255b,0xbbb3366a,0xbb858d9f,0xbb9b808d,0xbc123b7e,0x3c3fce77,0x3cb72103,0x3d1384b7,0x3d2056a3,0x3d3ea491,0x3d6394a8,0x3cbe4910,0x3bf73d80, +0x3c881614,0x3c675c10,0x3cb5a72d,0x3c9e2918,0x3c69088b,0x3c3d195d,0x3c8e7aba,0x3cb89708,0x3c93c992,0x3cb51742,0x3cc325b5,0x3c7ffac9,0x3bcd78c4,0x3c36dceb,0x3c805481,0x3d9321c7,0x3d5d7409,0x3d77539a,0x3d91a451,0x3d5548aa,0x3d29b3ab,0x3d05b817,0x3d10b483,0x3d032702,0x3ccf4f28, +0x3cabd059,0x3c560395,0x3b297fe5,0x3c224aa1,0x3c69475f,0x3cc555ec,0x3cff7c70,0x3d1ee11c,0x3d2a834c,0x3d30f59f,0x3ce5a011,0x3ce1b053,0x3cc42a81,0x3cc34350,0x3cc08957,0x3c9045cf,0x3d69b9e5,0x3c7a185d,0x3d3832cc,0x3cb7cd3c,0x3d04ffdf,0x3d120bab,0x3c894b0d,0x3d0953fb,0x3d4a1783, +0xbd4de798,0x3d7e768d,0x3d739b83,0x3d606758,0x3d3e6dcf,0x3d606d83,0x3d6b57eb,0x3d6e2287,0x3d33a23b,0x3d091f04,0x3cd1d92c,0x3c8b2255,0x3c3775bc,0x3ad9b6d9,0x3bf71e2a,0x3c34243f,0x3c1aa0bc,0x3c2c2f2a,0x3c1d8e49,0x3ca94ec8,0xbb84b947,0x3c57b92a,0x3c3d402f,0x3c76bb0a,0x3c0946c2, +0x3c29d28c,0x3c2d8ec2,0x3c8d6b85,0x3ba06d50,0x3c913f13,0x3d2a3b40,0xbbe91ff5,0x3d13703d,0x3c2a5d9f,0xbd1d8e27,0x3d84af92,0x3d13ae17,0x3d830d59,0x3d3c0970,0x3d47c175,0x3d46da3f,0x3d42feda,0x3d35effd,0x3d3ac89e,0x3d37071c,0x3d33ab6c,0x3d2b0b02,0x3d209df4,0x3d14b509,0x3d057958, +0x3d0b7aec,0x3d0d6f6d,0x3d16296a,0x3d1edf37,0x3d1da53c,0x3d34737d,0x3cf46094,0xbbc6216f,0xbd6cac53,0x3d11c3ae,0xba573e7f,0xbd8456f6,0xbd8fbf68,0xbd81faef,0xbd75690e,0xbd8f3334,0xbd88ab7e,0xbd5927ed,0x3bc954d7,0x3d28f920,0xbd7afd02,0xbc894a2c,0x3d83de31,0xbde84204,0xbdca11dd, +0xbdf64f6b,0xbdb0f466,0xbdb6edf7,0xbdba73f3,0xbdbb84e1,0xbdbc02e9,0xbdb82ee5,0xbdae815a,0xbdad723c,0xbda92789,0xbda726ba,0xbda76a07,0xbdabaa94,0xbda89623,0xbdab010b,0xbda4f575,0xbda90ea6,0xbd9ec002,0xbdb309a8,0xbd5ffa54,0xbc707e73,0x3da08fbc,0xbd8f4445,0xbc8e12a6,0x3da072ad, +0x3d9c4178,0x3d9284aa,0x3d719d04,0x3d9a2754,0x3d90bac2,0x3d585ada,0xbb83a652,0xbda2509a,0x3d8896bd,0x3c4f5286,0x3deb96ea,0xbdb00235,0xbe05c830,0xbe0d1694,0xbe14ffad,0xbe232201,0xbe222963,0xbe1a3763,0xbdffa2df,0xbdf24bca,0xbddd8788,0xbdd1ba7f,0xbdd8e86a,0xbde5f4ed,0xbdd2fd7f, +0xbddd8eb3,0xbdcbc390,0xbdc86dcf,0xbdc0e9d4,0xbdd10bb9,0xbc5109e7,0xbd1cea29,0xbc23deca,0xbcf817e3,0xbd84ff54,0xbab78bcb,0xbd11b929,0xbc0b7abf,0xbcfc321c,0xbcaf7966,0xbd9b8db3,0xbcacd76f,0xbc8d3a9f,0xbd11aca2,0xbc3b440d,0xbcf8664b,0x3bccc157,0xbe3091ab,0xbe1d3f02,0xbe3418ff, +0xbe38d9fd,0xbe47edb8,0xbe44a357,0xbe3542cf,0xbe199d5f,0xbe074655,0xbdfff789,0xbdf08afd,0xbdedbcc5,0xbdf52b59,0xbdf44f04,0xbde38147,0xbdd74ec1,0xbdca7a3d,0xbdd66895,0xbd92fd0f,0xbc9b854e,0xbd06e123,0xbd5506f3,0xbc8c1b45,0xbc6373e2,0xbcc97a84,0xbc20b33a,0xbd98ae2a,0xbc8dd74e, +0xbd1cabb6,0xbc05e981,0xbd183059,0xbd34f5cd,0xbd025c6d,0x3b289cda,0xbdbe5cdd,0x3d953f5f,0xbd1f9633,0xbe79ef67,0xbe53ac64,0xbe816f13,0xbe8a91b0,0xbe8ea1c2,0xbe85eef1,0xbe462843,0xbe251d1b,0xbe0fa886,0xbe07c760,0xbe06b8e8,0xbe13229e,0xbe03dceb,0xbdf70906,0xbdd2cf7e,0xbdcdca5f, +0xbdbf2236,0xbd9590e4,0xbd3a201e,0xbd59a55b,0xbc8c0ffd,0xbd0b9cc7,0xbb1b0909,0xbc20f20a,0x3c28fe4b,0x3c0d585f,0xba9987be,0xbc369ed4,0x3ac42bbc,0xbd04aadc,0x3cc6447a,0xba46d19b,0xbcf17ff5,0xbd0155dc,0xbd853c5b,0xbdee4a2c,0xbe8c44ed,0xbe81df5f,0xbe853c7a,0xbe967a36,0xbe938621, +0xbe88b448,0xbe66f725,0xbe32c513,0xbe318806,0xbe196b40,0xbe171aac,0xbe1d70b1,0xbe10847d,0xbe03f5d5,0xbdd6db46,0xbdde307f,0xbdc98be9,0xbd96cb2c,0xbc384f15,0xbd25a8e9,0xbcc8b6cf,0xbc8506cb,0xbc0e1473,0x3c6bd4dd,0x3bd72b68,0x3c677b19,0x3a0aa72b,0x3cb75b00,0x3c07d08f,0xbc130f9c, +0xbc6ea6e7,0xbd26b63f,0xbd02864c,0xbcc99913,0xbd744bc5,0xbdbd00b0,0xbd02aeab,0xb9dee5e3,0x3c4e0ad1,0x3d7b0995,0x3d034f57,0x3be9283f,0xbd81cdb7,0xbe1f5f1c,0xbe36cd5f,0xbe3b7b76,0xbe3fa7a2,0xbe1c0c49,0xbe4a6f68,0xbe2b4730,0xbe05149f,0xbdc4a6a1,0xbdab75db,0xbe021c56,0xbd875954, +0xbd50979f,0xbcb34170,0xbcc8f2b5,0xbaa75d4c,0x3cc348ac,0x3c1b1d9e,0x3c41de60,0x3cbf4f05,0x3c53e337,0x3aabaf63,0x3a8d148e,0x3c5f8cd1,0x3caf0923,0x3d271d0e,0xbd3db9bf,0xbc6d57e4,0x3d80a131,0x3d615339,0x3d2fde45,0x3db9508e,0x3c5272a9,0x3d37e512,0x3d852a28,0xbceb4d38,0xbd35cc60, +0xbb37207f,0xbc65bf11,0xbc3ffaa0,0xbc9c4c4c,0xbcab0d27,0xbd62cd2b,0xbd8de44c,0xbdbfd29c,0xbdefb2cc,0xbda46e71,0xbd506da6,0xbd9328f6,0xbd17a36f,0xbce85023,0xbbd830b8,0x3cb90f93,0x3c4dfff8,0x3cb26794,0x3c804bbe,0x3d20bcf4,0x3d14a26f,0x3c9cd544,0x3b7ae32a,0xbca89a52,0xbd1430b3, +0xbcf30bad,0x3d0cc059,0x3c5fbfcb,0x3c72a497,0xbcbd5f3b,0xbdc9144c,0xbe19990d,0xbe425cde,0xbe448773,0xbe0a1bb6,0xbde44a0e,0xbd83bcda,0xbda21824,0xbda42a25,0xbd952cb2,0xbd83ec74,0xbd28381a,0xbd04dee7,0xbc9ec020,0xbc79f5ae,0xbd0cd6ea,0xbcaea096,0xbccb2ca3,0xbca3a14a,0xbcc4a7ea, +0xbc0f0779,0x3d07173d,0x3c89019f,0x3c0515b0,0x3ab244d8,0x3cdf20d9,0x3cba6fb5,0x3c858575,0x3b9d1f5b,0x3b625c4b,0x3ccc31f0,0x3c0cea4b,0x3d461500,0x3cc9164f,0x3cdae3c6,0xbd6f9858,0xbe8c44b2,0xbe557f71,0xbe5ed033,0xbe0582d0,0xbe01dae8,0xbdd0dd86,0xbd8047ea,0xbdd1e42a,0xbddc0646, +0xbd5cade5,0xbd890fad,0xbd2ccc9d,0xbc865fde,0x3c97d2a9,0x3c759b5c,0x3c75e1cf,0x3c8b508d,0x3c6bf1e5,0x3c341b19,0x3b3154d7,0x3b317b9d,0x3d4dc05b,0x3bab2d46,0x3b9207b1,0xbb41f1cd,0x3c0a2d99,0x3c3902a9,0x3cb5a931,0x3c12b968,0x3ae8646c,0x3cb467da,0x3c90bfb0,0x3d2406f0,0x3d7d76c4, +0xbd751166,0xbe16792b,0xbeae9e0b,0xbe286a54,0xbd644279,0x3d59fc04,0xbcd4ee51,0xbc9ff4da,0xbc909c90,0xbd2165d1,0xbd223a31,0xbb1a2a24,0xbcfe0a69,0xbd37c6c1,0xbd5e9635,0xbd64e814,0xbd15bd54,0x3c8e9a1b,0x3cb65822,0x3c9cb103,0x3d4dd4e1,0x3cc591e8,0x3ca18ad2,0x3d296133,0x3bec101c, +0xbb183e3e,0xbbe30c72,0x3b7a8074,0x3c6ae3ac,0x3cb8d777,0x3c2aa929,0xb897c174,0x3ccb9716,0x3bada4d8,0x3dfc5435,0x3d372225,0xbe82b434,0xbe67c477,0xbe4c23e4,0xbe1904fc,0xbe224f77,0xbde875ce,0xbe1ab6d5,0xbe338365,0xbe3ee301,0xbddd4067,0xbd8f1fce,0xbde73aff,0xbd156477,0x3ba06a2f, +0x3d1c79ac,0x3d7abf54,0x3d0f14c6,0x3c199686,0x3cc5a425,0x3c623bab,0x3c482225,0x3c8132d9,0x3c990a12,0x3cbb2b05,0x3d0b6466,0x3ce19ea9,0x3aa4ff70,0x3c29a843,0xbaf90d89,0x3cae724a,0x3c15bfb0,0x3d0ee464,0x3d2738bb,0xbc0ddf42,0x3db2ad5f,0xbd99bcd1,0xbde35e3c,0xbdba09bc,0xbdb81d4f, +0xbd7b8d72,0xbd378e77,0xbd593916,0xbd2e46dc,0xbd0c3be8,0xbd1385ae,0xbd650c72,0xbd72150e,0xbd8d3b9e,0xbd1092ea,0xbcda9d21,0xbc95e8d7,0xbc5967f5,0xbc607e24,0x3d114295,0x3d4b759a,0x3a72ede4,0x3d158cf1,0x3c28f521,0x3c1e81a9,0x3c69beeb,0xbc1c4ad0,0xb9974249,0x3b384d95,0x3c3b453d, +0x3bced930,0x3b90ee64,0x3d00c4f7,0x3c30832c,0x3c14f463,0xbc74961b,0x3c5b9fa2,0xbcd6929b,0xbdb7cf7d,0xbd5d4397,0xbd2e75c7,0xbd250b6b,0xbd4cc6c4,0xbd71c959,0xbd51620a,0xbd6bf206,0xbd4dc127,0xbd212b5a,0xbce7ff07,0xbccd4cdd,0xbc2f7132,0x3bd14eca,0x3c95dfc6,0x3c59011b,0x3a2130db, +0xbb7aac53,0x3cf3fb52,0x3ce4b158,0x3bada58d,0x3c898296,0x3c08e9f3,0x3bb3e665,0x3c86b870,0x3c86d389,0x3ccb914f,0x3c241571,0x3c22d98b,0x3bc79263,0xbab34e8e,0x3b00e028,0x3c61950f,0x3a47d826,0x3d21bb74,0xbcfc0c82,0xbccd0ab2,0xbcac0eea,0xbd140add,0xbcfc58e4,0xbcc73e02,0xbc9319f9, +0xbc7a7af8,0xbc3c8a61,0xbbde4c51,0xbc0cfa7f,0x39e0ed3a,0x3c2eef65,0x3c1451d0,0x3c1fd498,0x3c3eae5c,0x3c16fd1a,0xbbcf5e1a,0x3bce3df4,0x3c05b3c7,0x3bdcc420,0xbb3f2a4c,0x3b2d8479,0x3c0da8c5,0x3c2f2b9a,0x3ca3c29b,0xbbbe6cf9,0x3d2415f8,0xbb0a6f01,0x3c9f4844,0xbb5298eb,0xbc040022, +0x3cb3f6f8,0xbb49fba4,0xbc46b308,0x3daab355,0xbb497a6b,0xbb1b5a29,0xbbe30503,0xbb950d23,0xbc461fab,0xbcb907dc,0xbd0541fb,0xbcba5acf,0xbc64e6e1,0xbbba2961,0x3ba643b9,0x3c48de0d,0x3ca2935f,0x3c8a9bc9,0x3c6af276,0x3c4f21e0,0x3c4c55e5,0x3c6053f1,0x3bd4b293,0x3ccb17cf,0x3c995c5f, +0x3ce28fa8,0x3cd1db2e,0x3cd740d3,0x3ce2d759,0x3cec013f,0x3cde8f8e,0x3d0dea19,0x3d0c765b,0x3b2caaf1,0x3d841235,0x3d1410ec,0x3d231324,0x3da553e6,0x3c13a1fb,0x3c6ee584,0xbca9a4f5,0xbc103d8e,0xbc50ca79,0xbc77370d,0xbc7d7120,0xbc4bf1fd,0xbc46dbba,0xbc1331ad,0xbbffd6ca,0xbbd70412, +0xbbb85a14,0xbb950a79,0xbae4dad7,0xbb723cce,0xbb85cde5,0xbba39a0d,0xbbdf5869,0xbbf18842,0xbc5a4c2d,0x3c351482,0x3d236d8e,0x3d6c7875,0x3c21ac2e,0x3d2bfd5f,0x3d8915fb,0x3d959b9a,0x3d8dd24a,0x3d892a1e,0x3d9ffc8c,0x3d9e3b5b,0x3d82dd1b,0x3d082167,0x3b7a08f8,0x3d84a52d,0x3d5e8711, +0xbc01d83c,0x3c7c00b8,0xbc198231,0x3d4df5d0,0x3c83ad92,0x3c8becab,0x3c9adca6,0x3ce10dc9,0x3cec9cdd,0x3ccd0660,0x3cd71830,0x3ccf9a0c,0x3cbc8aaa,0x3cbd9e4c,0x3cc1bbfa,0x3cc881b4,0x3cd70d91,0x3ce252c0,0x3ce4d197,0x3cdbbe80,0x3cad7cca,0x3d149377,0xbd066a7d,0xbd954cfe,0xbdf70cd2, +0xbc250519,0xbd87b8dc,0xbdf610cd,0xbdf562d9,0xbdead960,0xbdd63504,0xbe01cbdd,0xbdfb744a,0xbde7a248,0xbda84cc8,0xbc0525e3,0xbdde7fb6,0xbdc377fa,0xbe28b9a8,0xbcf60caf,0xbbaadbac,0xbb890418,0x3b8664b0,0x3d376049,0x3d682d64,0x3d47af9b,0x3d6be726,0x3d538d48,0x3d23353c,0x3d0a7ace, +0x3cf7389c,0x3cfbd9fa,0x3d056fd2,0x3d132d08,0x3d1d3dc6,0x3cedcb8d,0x3ceb1a18,0x3d468764,0xbd94ddba,0xbd128e76,0xbd511118,0xbd437d16,0x3acb6c55,0xbd2c9769,0xbcd31246,0xbd683475,0xbcfabddd,0xbd3943e5,0x3cf48a84,0xbd3571ec,0xbd4f1a33,0xbd520fd7,0xbd976483,0xbd552260,0xbdf194ed, +0x3b3e605b,0xbc7f0243,0xbc696101,0xbb99a08d,0x3d6320a7,0x3d99770f,0x3d48a4dd,0x3d8ac29f,0x3d71c5f3,0x3d2e4bd8,0x3d09f35d,0x3d0e22d4,0x3d17efb6,0x3d483227,0x3d49bcbd,0x3d70d4f3,0x3d075cf5,0x3d4f5191,0x3bc3873d,0xbdaf50ce,0xbd0faffe,0xbc8a76a9,0xbd0a44e4,0xbc86ba4e,0xbb43a159, +0xbc388822,0x3d3a68bc,0xbd0d83a4,0x3c7c1e37,0xbd0f4120,0xbc299e83,0xbcc1dd39,0xbd2496f1,0xbda0643e,0xbcd23e6a,0xbe31c413,0xbe00b93c,0xbcbc2a81,0xbd6319c0,0xbcc8e0d4,0x3d8cf7fb,0x3debcf53,0x3dbfe21e,0x3dff3a57,0x3dda73cc,0x3d8ebfc1,0x3d492d6f,0x3d1d491a,0x3d368942,0x3d5cd2a5, +0x3d6c3cd5,0x3d886c53,0x3d28ce2f,0x3d32524b,0x3cc83126,0xbcc5c468,0x3c6f23b0,0xbcbea5e6,0x3ca89863,0xbbeed08c,0x3d0c9ead,0xbc3b6aa5,0x3b50a202,0x3a70e745,0x3ce19ea4,0xbbc1b3da,0xbbb27ff8,0xbd63383a,0xbd5e07ba,0xbda1a221,0xbd7d34d8,0xbd86c2f2,0xbdb72da1,0x3c945917,0xbd0d964a, +0xbcc73445,0x3db25945,0x3dd906f4,0x3d97bcdf,0x3dfb5596,0x3dc69bc8,0x3d72baad,0x3d102196,0x3d2d4b0a,0x3d4fa968,0x3d97ce6f,0x3da9b3db,0x3daecf31,0x3d555a63,0x3d4b09a2,0x3cb6d6d0,0xbdced800,0xbc8f4582,0xbcdc3edb,0xbaac397f,0x3c66bc9b,0x3c8af80f,0x3ce623a7,0x3cb76dcb,0x3cc5ac97, +0x3cbdc182,0x3cb258ce,0xbc1ba844,0xbceb906e,0xbd12d51c,0xbd7ac078,0xbddec691,0xbc3bda63,0x3e28531e,0x3eb8802d,0x3e6c499f,0x3d3839a7,0xbcc169d1,0xbd8e9e80,0xbe10b514,0xbdd95bdd,0xbd85aae6,0x3b26c6f8,0x3d45b225,0x3d353077,0x3cdadf86,0x3d60d5d8,0x3d6ff3f7,0x3d793ded,0x3d2ec590, +0x3d486bf4,0x3d21c5bf,0xbd023447,0x3ce880d0,0xbca38357,0x3cabaf9d,0xbb7e4fc1,0x3ce5262c,0x3bd0f46f,0x3bf6ea48,0x3cbe643e,0xba4c7e31,0x3b55f06c,0x3d00a828,0x3d4e1e83,0x3ca119b0,0xbce9108d,0x3d780689,0x3da4a3f4,0x3e039af5,0x3db6c9e4,0x3cb975c1,0xbd301a90,0xbd2313b4,0xbdb0e4ab, +0xbdd019e6,0xbda79d50,0xbd2ef165,0x3d393f65,0x3d32b1c6,0x3d897485,0x3dadb3dd,0x3dea12a3,0x3dfc339e,0x3e0c829d,0x3dc3c62e,0x3dd7c531,0x3ae2a4c6,0xbda6ed7e,0xbcc948f2,0xbc83d077,0x3bd40ef9,0x3c962a5c,0x3d14e092,0x3ca31fb6,0x3ca8ba3a,0x3c78ded9,0x3d0dac5b,0x3d2da4b6,0x3c149e39, +0xbb6d159f,0x3d124ed5,0x3d933880,0x3d3ff1fd,0x3d601f12,0x3db2378d,0x3d196aa6,0x3c54cf41,0xbbb9e206,0xbb10749f,0x3cf21526,0x3de95fe3,0x3c19d1e4,0x3a43d60a,0x3d1b6080,0x3ccf8b9a,0x3d187c97,0x3d90c32e,0x3d862c2e,0x3d5264da,0x3bb9c597,0x3cef1579,0x3d35498d,0x3d080b2c,0x3c997a89, +0xbb27aec9,0xbbae93c9,0x3c841f39,0x3c3786e5,0x3d4e66ee,0x3b89f41f,0x3bab246d,0x3c1260e4,0x3d061429,0x3cff3234,0x3d437001,0x3d2195ab,0x3d14b4f8,0x3d6f62c6,0x3cd72877,0x3bacde19,0x3ccbe4ae,0xbd041bc9,0xbd219ce8,0x3d54ee00,0x3dbf8e52,0x3e2129e8,0x3e3f58ab,0x3e043ed6,0x3da5dc66, +0x3c50c458,0x3d02476f,0x3c178cc1,0xbbae089b,0x3b8f9283,0xba1e5318,0xbc777d72,0xbb3dac4b,0x3cad7bfb,0x3c8b2648,0x3c83b0f3,0x3ce3e13e,0x3ce6896a,0x3be36b63,0x3cf4f828,0x3d60a1a5,0x3c239a4f,0xbb6bff34,0xbb822e9f,0x3cc4ae53,0x3cbc8bad,0x3d516120,0x3bc0b871,0x3cb37261,0x3c8fc4e8, +0x3d3472ac,0x3d118a29,0xbd286928,0xbcd67aed,0x3ac396ca,0x3dde2e79,0x3d295024,0xbc0fa8d2,0xbd046978,0xbda4b69c,0xbe11458f,0xbe1a0c44,0xbe126779,0xbdc141f0,0xbdc3cdf6,0xbc9d1baa,0x3c54785f,0x3cde2dd7,0x3cfa11f3,0x3d0413b9,0x3c6ef3a9,0x3cb0f6fd,0x3c8537f4,0x3c717f85,0x3c8d427b, +0x3cb2f399,0x3d3a74b8,0x3c6225e5,0x3c17ee82,0x3b93d851,0xb9d3ed5c,0x3bf65dad,0x3d1eb174,0x3ccb91b7,0x3ca848e2,0x3bf8ac06,0x3cb6dc30,0xbe04d66a,0xbd8d53ff,0x3dc289d3,0x3d12e3f0,0x3bc047f1,0x3d931d69,0x3de43292,0x3da08a54,0x3d19f079,0xbb1d58cb,0xbcd3e304,0xbd81cda7,0xbccdb98f, +0xbc70106d,0xbd00719c,0xbd0dd963,0xbcee2a6e,0xbd08cb67,0xbbfc0c88,0x3c27b93e,0x3b9121a1,0x3c83791d,0x3cd405ef,0x3c8e3796,0x3c63f131,0x3ca694a2,0x3c91fed6,0x3cb5a336,0x3cc0c07e,0x3c459983,0x3c7edf34,0xbba10426,0x3c010782,0xbbbf4842,0xbcc615c9,0x3c7e8be0,0xbdb25e08,0xbd1696d5, +0xbc48a32f,0xbccf59a7,0x3c5ba540,0x3bc92e6e,0x3ce872b3,0x3d8be795,0x3cdba7b2,0xbc13807e,0xbd41d80f,0xbc89af90,0xbc375321,0x3c124326,0x3c8e1617,0x3c9bb9e3,0x3c8ed9f1,0x3bc929b3,0x3a018cd0,0xbc41916f,0x3b34dcda,0x3c44ba09,0xbc5dc7d4,0x3c5a2352,0x3c90a113,0x3b8f09f3,0x3cfb72e2, +0x3c990e6e,0x3c9de6c7,0x3c5d8492,0x3c861c00,0x3c9bd04e,0x3b95db24,0x3ca0d5de,0xbb0537a7,0xbb1dd189,0xbd71940b,0xbd09718f,0x3cbfdca2,0x3b2812a6,0x3c8615b0,0x3c797b6b,0x3d20a2d2,0x3d8ab657,0x3d6b7fa6,0x3d69cd88,0x3d34e830,0x3d0475b4,0x3cc39628,0x3cab8ae0,0x3cc36f5f,0x3c8e706b, +0x3cb56bbf,0x3c78d0d7,0x3c8d7ef0,0x3c23bd32,0xbb21cc1f,0x3aa683f6,0x3c3c71a0,0x3b80bd3c,0x3c52bf87,0x3c80ec7b,0x3b83b1cd,0x3c17e7e4,0x3c8d13af,0x3c8103f0,0x3c275d28,0xbbef2758,0x3bc79325,0xbb424c8e,0xbd011f96,0xbcc8252e,0xbd0c99f8,0x3b675e22,0x3c85f730,0x3c6b9c11,0x3cc9361b, +0x3d074b00,0x3d0a2ccb,0x3d05b9be,0x3ceff029,0x3cfcb0ea,0x3d226f0e,0x3cde8ff9,0x3c8f7a35,0x3b80ea07,0x3c2aabc9,0x3c8163ae,0x3cc0267e,0x3c9a8f3f,0x3cf667f8,0x3c3d85f8,0x3bf70c7e,0x3c118eda,0x3c878363,0x3c601035,0x3c488572,0x3c964442,0x3c6e9ef3,0x3d07154e,0xbc02e79b,0x3c9cd0ea, +0xbbd891e9,0x3c116b46,0xbb84d275,0xbcf3731e,0xbc5e2bcc,0xbbbaf25e,0xbc432c1a,0x3c7a2348,0x3c7ec9b2,0x3cbaba70,0x3cd218ac,0x3d047177,0x3d233d96,0x3d55c6df,0x3d4a6b82,0x3d2cd6cf,0x3d0d2c07,0x3d0d7eaa,0x3d17f695,0x3d1d883d,0x3d155bcc,0x3cf6a1ec,0x3cf636d6,0x3ce00195,0x3cc81c2f, +0x3cee1440,0x3c68696d,0x3c99de76,0x3c4fa3e2,0x3c9b8b2a,0x3c86c75e,0x3c533fc8,0x3c09e3e2,0x3b6cf2fb,0x3a355e9b,0x3b1b2bc4,0x3ce7b25a,0xbc606498,0x3a354def,0x3c42f13a,0xbbfcadab,0x3c2215db,0xbc4d4cae,0x3c84a074,0x3c73cd08,0x3c834a8c,0x3c8c912f,0x3c9c90ee,0x3c969b51,0x3c95a47d, +0x3c8a001f,0x3c9f2b56,0x3caf600d,0x3caad463,0x3c96acce,0x3c8900f1,0x3c85f610,0x3c920ade,0x3c95847b,0x3c9454a0,0x3c8eea14,0x3cae8c1b,0xbb2f883a,0xbc9a9d8d,0xbc8a5e02,0xbb848823,0xbcb2e041,0xbca3521e,0xbcc19999,0xbcaa2cdb,0xbc99c320,0xbce891a0,0xbcf2a326,0xbcb2e803,0xbcaa561c, +0xbbd0fb5e,0xbca0a4c5,0xbcf3ee03,0x3c76be3a,0xbb527a17,0x3d18b10d,0xbc1a9ea7,0xbb165aac,0xbb154b35,0xbb0cfe90,0xbbb74cf0,0xbbfa8c69,0xbc1741d2,0xbc14d8cf,0xbc05c71d,0xbc04001d,0xbc1ca79b,0xbc27d5f8,0xbc2d9e54,0xbc228201,0xbc1c6479,0xbc05fdd7,0xbc10b076,0xbbdd4bbb,0xbc57af0a, +0x3d0bfa16,0x3d45a8ab,0x3cc76bac,0x3cd6ea71,0x3d4b8ea8,0x3d06eab0,0x3d08d9c5,0x3cfc2fe5,0x3cf120bf,0x3d29a7f7,0x3d24bcde,0x3d1f01c4,0x3d535383,0x3cd45d72,0x3c9b5d56,0x3d48a656,0x3c2f42e9,0x3b476fa0,0x3c1ee042,0x3c5ae31a,0x3c013ec9,0xbc607f43,0xbcbbe162,0xbd0312eb,0xbd14d5ef, +0xbd081eb6,0xbcc286a2,0xbcaceba4,0xbc8952ca,0xbc7e193f,0xbc49b274,0xbc245a56,0xbbfb95a0,0xbbf2e4a1,0xbc376e50,0xbc90f92b,0x3d156467,0x3c8418ac,0x3c9023fb,0x3d223a67,0x3c9f2c0b,0x3cbc7c5a,0x3cb8d4a6,0x3d10b243,0x3cce0605,0x3cf75b2c,0xbc1f82d8,0x3c8edda8,0x3c98f747,0x3cb67b66, +0x3ca0a9fb,0x3c46bd89,0x3d0e3fc0,0x3d2bac7b,0x3cff7c6d,0x3d36f5e5,0x3d096002,0x3b50aa39,0xbc788ee0,0xbcf0a129,0xbce722a9,0xbcdaa847,0xbc83c89b,0xbc8d0916,0xbc98e555,0xbc912ae6,0xbc865337,0xbc47b084,0xbc1eda81,0xbbbc7439,0xbcadc494,0x3c428d01,0x3d5685da,0x3c8b5f73,0x3cbc1448, +0x3cf4e8db,0x3c9f620b,0x3d0ee72b,0x3c844a7d,0xbb39f220,0x3d436bbc,0x3bedbe7d,0x3d03400f,0x3bbae6e9,0x3c894095,0x3c82a2d6,0x3c8139cd,0x3c898b68,0xbb6d52ae,0x3c9ed531,0x3dab7e81,0x3d84663d,0x3d711ee0,0xbc523fe0,0xbd510995,0xbd9c990c,0xbdae491b,0xbd9dcbd5,0xbd2b9685,0xbcfa93c8, +0xbc9a6ce6,0xbca308d3,0xbc7311b2,0xbc066df5,0xbbb0d25a,0xbc129496,0xbcab54b2,0xbb14fca7,0x3c21d6f9,0xbc91c762,0x3c36387e,0xbb146e13,0x3cb8a51c,0x3c86a4d5,0x3cd122d5,0x3c1fb925,0x3c56421f,0x3b01bf57,0x3c5893a5,0x3b51149d,0x3b343173,0xbc0bf67b,0x3c773bd4,0xba85a9dc,0x3ca982d1, +0x3da44570,0x3dd8b65b,0x3dfaa787,0x3dc412b3,0x3d15adc9,0x3be1cf7c,0xbd2b7609,0xbd33b4b9,0xbd2b7789,0xbc9dc480,0xbc92b70b,0xbcd9dacb,0xbcb6c84e,0xbcd17a1d,0xbca2bd70,0xbc6efb87,0xbc69c62f,0xbcbeae1f,0xbbac5caf,0x3d238922,0xbc05b9a5,0x3bbb8cf7,0x3a973bf5,0x3a8f439a,0x3cb82999, +0x3bc9ec44,0x3c474d9c,0x3c360a99,0x3cbc3bb7,0x3be5ffca,0xbbe10ddb,0xba2afdc8,0x3c51a506,0x3c5659df,0x3d08d0f4,0x3e8118a1,0x3e350c40,0xbdb7670a,0xbd4ad846,0xbdefd858,0xbe1979ec,0xbe16b49b,0xbd89e060,0xbcdaf486,0x3d8f7cd9,0x3dc663b4,0x3df7b995,0x3e29f597,0x3e30f88b,0x3e1dfff9, +0x3dd9c65f,0x3db92a98,0x3d423326,0x3c065592,0x3c1bb455,0x3cb56e24,0xbc5c7949,0x3c0f397a,0x3a8ba75c,0x3c96a480,0x3ccae5f2,0x3b92cd89,0x3b8a217e,0x3c9b8b5f,0x3cc6c600,0x3d471fd0,0x3d94f262,0x3d26249e,0x3d8e4991,0x3dd5524f,0x3e241f98,0x3d559e9a,0xbc92c0ef,0xbcdb546d,0x3c914dbe, +0xbd21cb62,0x3e127f9e,0x3e49bd9f,0x3e21686b,0x3e139f5b,0x3d70361b,0xbb8f6304,0xbb9a4589,0xbc9b51c1,0xbd050826,0xbd10bf7a,0xbd358f4b,0xbddade23,0xbd205e3b,0xbcfd3aa8,0x3d06f371,0x3d878e5a,0x3d2dda77,0x3cbde319,0x3c9e4ad7,0x3c6e3ec5,0x3ccb62c0,0x3cd0ec20,0x3cd98f5d,0x3c354b24, +0x3d069a3a,0x3cf2b76f,0x3ccb73fe,0x3d797a40,0x3d784fc9,0x3d6e61c1,0x3d741846,0x3d99aaeb,0x3c4c7137,0xbd000a40,0x3d2cc72c,0x3d7e7c36,0x3e0ec625,0x3e0d4498,0x3de14d01,0x3cbb6f9d,0xbd033c59,0xbd8063e3,0xbda67f84,0xbdb9f9fe,0xbded6239,0xbdc8e0c4,0xbd8beb50,0xbd2939e3,0xbb82d9d6, +0xbc52a62b,0x3bbfde4b,0x3ce351c7,0x3c93b8f0,0x3d1155bf,0x3c1d82a2,0x3c8d1d1f,0x3d76629e,0x3bd370b2,0xbbdf920a,0x3bb1d20d,0x3ccfe88d,0x3d0dbf02,0x3d81ce10,0x3d170067,0x3d1a4728,0x3d54088a,0x3d96af86,0x3d32abe3,0x3c0a20d1,0x3cd9c9c5,0x3dbf796b,0x3d8b4ae4,0x3d5a4089,0x3ca1d6b2, +0x3c8f30ec,0xbc869005,0xbce1600a,0xbcb4828f,0xbd16344d,0xbca120b9,0xbd41e225,0xbcfc90f5,0xbccc7a8f,0xbc21b367,0xbc85e794,0xbd039beb,0xbad641d0,0x3c861b3d,0x3c0f5f19,0x3c305907,0x3ccd55a1,0x3c88ba2e,0x3d9a3793,0x3a697a8b,0xbba06e46,0x3ca42015,0x3b727920,0x3cc3b25b,0x3d7d0faa, +0x3cf8daeb,0x3b52e54d,0x3d1f1260,0x3b64b6ba,0xbbdcde57,0x3d5edfa3,0x3e1adc2b,0x3e1a2953,0x3cb8ff44,0x3d73ac97,0x3d5e9d68,0x3b2a3568,0x3d90ebbd,0x3dc37b7f,0x3d718a31,0x3dae02e4,0x3d9110e6,0x3db8b0ec,0x3d5dc29f,0x3d042230,0x3b2feb20,0xbb43d35f,0xbc47d924,0x3c875658,0x3c9d4c2a, +0x3c817966,0x3c27b6c5,0x3c9df65e,0x3c9e3989,0x3d213a22,0x3c9788ed,0x3c393475,0x3cc461df,0x3baefe3f,0x3c653dda,0x3ce02df6,0x3cad7f9e,0x3ce4a786,0x3c972cae,0x3c6c99d3,0x3dfae4e8,0x3dc9311d,0x3da82bdd,0x3dbd44a2,0x3cf17553,0x3caaede2,0xbadc0758,0xbbcde11f,0x3c5c6abe,0x3d03aff0, +0x3d44e3a9,0x3d899fc0,0x3d1bf919,0x3d8f98c9,0x3d52a91b,0x3d26e380,0x3c013c8c,0x3c34b31d,0x3c54cbf7,0x3b295c05,0x3d02a2ed,0x3cc271a6,0x3b7c0061,0x3c6ed968,0x3c19f6ef,0x3cb06e79,0x3c8b4895,0x3bf85886,0x3c9a51fc,0x3c9807e1,0x3caf12ad,0x3d35adfe,0x3c9a68e4,0x3c830ced,0x3d163c93, +0x3c37f9ab,0x3d2ffc37,0x3dcf0b18,0x3d392930,0x3c97622b,0xbc898604,0xbc3056c6,0xbcd83b6e,0xbd6872cd,0xbc2bff62,0x3c813d5b,0x3d25277c,0x3ccd23a1,0x3d3636a6,0x3d90ed89,0x3d87e58d,0x3d4e155e,0x3c15d82e,0xbc29ba11,0xbc34a39d,0x3c5df490,0x3b5527c3,0x3bd93ff0,0x3d097504,0x3c71f5ed, +0x3c7cb313,0x3cba71b6,0x3b92dc53,0x3ca32c77,0x3c61fb17,0x3cdcf4f8,0x3cf0e049,0x3cf9d5a3,0x3d0c67ae,0x3cf2994f,0x3d355241,0x3d746f8e,0x3d362444,0x3cd7aa6f,0x3b8e7d2e,0x3b9f1afc,0x3b1e2fc1,0x3b215680,0xbbd41121,0xbce0b2db,0xbbb368fb,0x3b7fd452,0x3ca7d257,0x3ca7753d,0x3ccad3c2, +0x3d0e8b6d,0x3cf614a1,0x3ca449b8,0xba80dbbf,0xbb2a40e6,0xbc065e1d,0x3b34cb09,0x3cc27400,0x3ca35edf,0x3cb0fb57,0x3cbddcc8,0x3c70ef15,0x3c85a0fe,0x3ce35077,0x3c978f0f,0x3c04e8a6,0x3c7a074d,0x3c6b1d17,0x3cb458b0,0x3c80aab3,0x3ca312ce,0x3d11180c,0x3cf318eb,0x3cd4c7da,0x3bfbe665, +0x3b866e21,0x3c97adcd,0x3cc5251c,0x3c3eb2ac,0x3b8c2c04,0xbb4387ea,0x3b430cd0,0x3bb49e3b,0x3c1e74dd,0x3c387f26,0x3c4758bd,0x3c3c5254,0x39979c14,0xbb11070a,0xbbe61fcd,0x3a8c02df,0xbc474362,0x3b1b110e,0x3c9970a2,0x3c6087e5,0x3ca95226,0x3ca8420c,0x3cd93366,0x3ceee15b,0x3c9ca29d, +0x3c026fcd,0x3d2ea430,0x3c1d64f1,0x3ce3db6a,0x3c3cbc6b,0x3cd88757,0x3ce21832,0x3ceef1b9,0x3c916079,0x3cb2991f,0x3c832787,0x3c5535d3,0xba648da6,0xbc4ce0dd,0xbc4b6d07,0xbc866add,0xbcb123d5,0xbcb3f51e,0xbc9c93b6,0xbc93b93a,0xbc8d6108,0xbc7eedc6,0xbc2b37c0,0xbbe7ebc4,0xbbbcdf50, +0xbc1f892e,0xbc44f141,0xbc7a946c,0xbc24f41d,0x3cc7ad1a,0x3c97a71f,0x3cccb662,0x3cabaddb,0x3cd1b19f,0x3cc7907f,0x3d1002b8,0x3d23f8ed,0x3d0df8fc,0x3d1ffb6b,0x3cbae9ae,0x3d278efe,0x3d246581,0x3cc9574f,0x3cba5806,0x3d06791d,0x3ced634d,0x3bcbb6fa,0x3bc95d03,0x3c0822ad,0x3c0d712f, +0x3bfb1a47,0x3bb8e89a,0x3b9948aa,0x3ba7f2c2,0x3b7f7e2a,0x3b5d491a,0x3b7d4ae9,0x3b7f915b,0x3b4022a1,0x3a307620,0xb960b165,0x3a809fe4,0x3b0db935,0x3b368754,0xbbd20cc5,0x3ca6f28f,0x3d01b021,0x3cb4310b,0x3cd61485,0x3d141de3,0x3cb94e4e,0x3cc20851,0x3c98ff4e,0x3c8de07f,0x3ca95413, +0x3ca5583b,0x3c8a162b,0x3cf29539,0x3cc676aa,0x3c584d5c,0x3cfc6f11,0x3c764b61,0xbcc93545,0xbd4d169c,0xbc946a84,0xbca11134,0xbcaf37f3,0xbcbbb8dd,0xbcb168e7,0xbca71ebc,0xbc9b8bfb,0xbc887794,0xbc7a0bd6,0xbc4c1bc4,0xbc6401b5,0xbc768acc,0xbc8d7d77,0xbc69924a,0xbc594322,0xbc3f57d5, +0xbc42543b,0xbc47db47,0xbc1893ad,0xbd2735d2,0xbd1dbb6a,0x3bb78ce1,0xbd1dbd31,0xbd260dbc,0x3b244dec,0xb96e5ef3,0x3a7a3e24,0xba814ecc,0xbbd2f222,0xbc18cba8,0xbc629f4e,0xbd2aeb5e,0xbd1e26b9,0x3b7965a1,0xbd13d08e,0xb91993fd,0xbc8025e5,0xbd197a65,0xbd36551a,0xbd436ea8,0xbd4030fa, +0xbd2d1354,0xbd093a36,0xbc9bdfe9,0xbc82422c,0xbc698637,0xbc79d4ef,0xbc9c407a,0xbcd15bb4,0xbc82390b,0xbc811cf3,0xbc43c79a,0xbc61837d,0xbc26679e,0xbba92938,0xbce0542a,0xbcabef46,0xbc2c5068,0xbd08539f,0xbccc7467,0xbb770d1f,0xbcb6771b,0xbcdea6b9,0xbcbe4f6b,0xbcd500c4,0xbbe30d45, +0xbc812403,0xbc9cfbae,0xbcbb1c27,0xbca3abd1,0xbcbec828,0xbcd747d8,0xbd53587b,0xbd52ede6,0xbd988fe8,0xbda0cf9f,0xbdabf634,0xbd93b330,0xbd660466,0xbd1f7660,0xbcc116fe,0xbc4d0786,0xbcaf42e1,0xbcd5fcd2,0xbd1b7451,0xbcc5dc3d,0xbc8affc8,0xbc042eb0,0xbc4e998f,0xbab0ad87,0xbc8bd094, +0xbd1f6c07,0xbc64e4fb,0xbccd451d,0xbc96373c,0xbbb180f4,0xbc2ba957,0xbb2d5f47,0xbc1f19ba,0xbd08047a,0xbc1117c1,0xbcad314f,0xbc16dac5,0xbc42498d,0xbc369942,0xba864635,0xbc61f81f,0x3d17191b,0x3befc1b8,0xbdd84d91,0xbdc02250,0xbdf02382,0xbdee84c9,0xbdcbbbd1,0xbd96d6f9,0xbcebcc6b, +0xbbf8668e,0xbbce285e,0xbc2a985a,0xbcbaaeb0,0xbd358e73,0xbc99953e,0xbc4b9ea1,0xbb400096,0xbb51becc,0x3bc8b348,0xba4f40e6,0xbc2b609a,0x3c09bd70,0xb9bca28e,0x3c17eeb6,0x3b0575c2,0x3cd8014f,0xbbbc22ab,0x3bc7f2ef,0x3ac66f5b,0x3c1e4660,0xba8ae6bb,0x3a58868c,0xba9bab49,0x3c0cf2ab, +0x3bf23fcb,0xbb89613b,0xba1a81db,0xbcd0dba1,0xbe067113,0xbe11156e,0xbe17eae9,0xbe2cf008,0xbe170014,0xbde42ad8,0xbd98a7f9,0xbcd949eb,0x38fd558c,0xbc761254,0xbd07cfc9,0xbd76b32c,0xbd01455b,0xbc93dd2f,0xbaba6068,0xbbdb2db7,0x3bae9094,0x3c18df3c,0xbd240e67,0x3c5b903c,0xbbcddb06, +0x3c28f496,0x3c801821,0x3cffcf30,0x3cc074f3,0x3c50284e,0x3c284df0,0x3c52ef05,0x3c5699d9,0x3c09ca03,0x3ca5928e,0x3cb09ce1,0x3d0f1b7f,0x3d16f0a9,0xbd5fc2dd,0xbe1c977e,0xbdfbe770,0xbdd98836,0x3caeec48,0x3ca3ff8d,0x3d4c932d,0x3dd9215e,0x3d8f637e,0x3d0794aa,0x3d06998b,0x3c870552, +0x3bc83d7b,0xbcd477f6,0xbd904158,0xbd8f25c9,0x3c4fbb94,0x3c68139e,0x3cc84782,0x3c7d6bf8,0xbb41f542,0x3cb55cb5,0xbc522e7c,0x3c6765f5,0x3b89902f,0x3cc03442,0x3b428b59,0x3c50ea7a,0x3d021c15,0x3cf8c7db,0x3cea766a,0x3c20247d,0xbcce9198,0xbcf253a1,0x3be25288,0xbd785b26,0xb9d7bb77, +0xbc88aaa1,0x3c3b6956,0x3c44deed,0x3cdf8608,0x3be4db64,0xbb91d9a4,0xbcadf84f,0xbd8ab936,0xbdbc28e7,0xbe0ff66a,0xbe274324,0xbe1eacfa,0xbe11634e,0xbdc2d1ed,0xbd97b136,0xbd533e76,0xbd49fc37,0xbc2fc26c,0xbcc8397f,0xba8bb1b9,0x3c2c923c,0x3b94aca6,0x3c3b96f7,0x3c526ffc,0x3ce763fd, +0x3ca5c18f,0x3c82b014,0x3b1e615d,0x3d075c73,0x3d08fe75,0x3c96de34,0x3d3274f9,0x3cea5ee2,0xbc46c188,0x3b9ecf67,0xbd2d734d,0xbd1a93ca,0xbbea22d3,0xbd122a39,0xbdf34b21,0xbe0a9267,0xbde03b99,0xbd6aafb6,0x3cda0ecf,0x3d0bd1e5,0xbcfbf0b8,0xbd326282,0xbda4d5dd,0xbde1f149,0xbde2f299, +0xbdd6a70a,0xbda31fcb,0xbd8ea813,0xbd202a9c,0xbc95c09b,0xbc534c71,0x3ba9537b,0xbb8883e5,0x3b9f081b,0x3c45e99f,0x3d7cf85f,0x3bae248a,0x3bcce354,0xb7bd4956,0x3c8ce6ce,0x3c98c3bb,0x3d4afba4,0xbadb4319,0xbbf97c33,0xbc921b04,0xbbda2d09,0xbcd655fe,0xbcfb5dfb,0xbd88810b,0xbe151767, +0xbe8f1ee5,0xbe6914a8,0xbe55fc28,0xbdf4881d,0xbd96fe10,0xbd1a3eee,0xbcf06254,0xbc42d43a,0xbcba7ccc,0xbca6ad3b,0xbcf6fb67,0xbd038c57,0xbd178eb9,0xbca2575c,0xbbb09856,0xbc6ee518,0xbcde4b7d,0xbc159e76,0xbc50e016,0xbc021b71,0x3bf8ac1e,0x3d734c13,0x3bd6b087,0xbbc2e85b,0x3ba54102, +0x3b0ba59c,0x3c178581,0x3d3dad27,0x3b3bf933,0xbc880b17,0xbc758b62,0xbd089ce1,0x3c9f31aa,0xbd5cb27b,0xbe35a9c9,0xbe6205ee,0xbe9313cb,0xbe53114c,0xbe29523e,0xbdc4d836,0xbe25ec63,0xbe229f0e,0xbe015fab,0xbd8bd826,0xbcd033c5,0xbc13c785,0x3b492cf4,0x3b71896e,0xbbc4295b,0x3c097dec, +0x3c92dbbb,0xba739e5f,0xbb1fb915,0xbb80cc6c,0xbb0bff72,0xbbc59b2a,0x3b1d3331,0x3cfee71a,0x3c640fa9,0x3bbbcf20,0x3cb9decc,0x3a93eaba,0x3b8aeca1,0x3c7afa6b,0x3bd517aa,0xbc2ac177,0x3c2f8011,0xbc4521d5,0xbd4ec51d,0xbdbe1c2f,0xbe419ca4,0xbe3d334e,0xbe4fe766,0xbe342e25,0xbe177500, +0xbdc3559b,0xbdba21c4,0xbdd4c42c,0xbe0f038f,0xbde0470e,0xbd94b929,0xbd7a38af,0xbcbe9516,0x3b7cc222,0x3c822a7a,0x3a2e63f0,0xbc79b144,0xbc8fefa8,0xbceadf10,0xbc884c0b,0x3c4ee26e,0x3bfa9ef6,0x3c1e93c7,0x3b9e29af,0x3a7fd9d7,0x3b85d301,0xbbaa44e4,0x39e3ef86,0xbbbba439,0xbaa1873f, +0xbc52c6d0,0x3c5dbb9b,0xbc2dfdd9,0xbbd95fef,0x3d1c31a4,0xbda47d12,0xbdbf5c76,0xbdb627f2,0xbdc7f5df,0xbd1e7bcf,0xbca596d7,0xbd07b2cb,0xbcc696be,0xbc11156e,0x3c263ace,0x3aaef29f,0xbce3c2b5,0xbd6f0346,0xbd5a5eb4,0xbd1ec9b9,0xbca2d409,0xbb39cbec,0x3b5c4585,0x3c36eb2a,0x3bbd6654, +0xbb3b69c5,0xbc9a6e76,0xbb06c157,0x3a25e7b8,0x3bf914ea,0x3c27e02f,0x3c0b9d97,0x3ba4b33a,0x3c68efe4,0x3be4411f,0x3b8f61df,0x3b84c64d,0xbbf222ba,0xbbad7bbd,0xbd116f99,0xbcd52ec0,0xbd03de82,0xbd56ff5d,0xbd388bce,0xbd092476,0xbcc455ff,0xbcc29f96,0xbcece083,0xbd070856,0xbd17504b, +0xbd1de4ba,0xbd03f47a,0xbcb0cba2,0xbcab6f19,0xbca1b08a,0xbc4538ae,0xbc89baa3,0xbc569f95,0xbc455124,0xbc96cbec,0xbc7cd016,0xb9a71051,0xbb1bb022,0x3b8d33be,0x3c3601f5,0x3c4b2936,0x3bb6a170,0x3bf3b260,0x3b92923a,0x3b173d59,0x3b9e11a5,0x397fcdf3,0xbb7e68e8,0xbb8d529a,0xbc054246, +0xbc482a11,0xbc7c3b65,0xbd0503ed,0xbc83e4c7,0xbcbfc1ad,0xbcf6866d,0xbd09982d,0xbd0581e6,0xbcebb4b1,0xbd0d7c7f,0xbd1e6040,0xbd52b557,0xbcbfab2b,0xbbf3b551,0x3c68ef7b,0x3bd09ca5,0xba0445f7,0xbbbad5bf,0xbc4fa9c7,0xbc2d9e37,0xbc972146,0xbca08904,0xbb00cbb9,0xba422a80,0x3b9a832e, +0x3b1158a6,0xbb6a63e6,0x3bfd6eb4,0xbbfb045c,0xbc45e638,0xbb792d27,0xbbd14a97,0x3a3634ea,0xbc5053ac,0xbbb862b3,0xbc919c69,0xbc98afeb,0x3cb902ae,0x3b31fbbd,0xbc149f71,0xbc3dcdfd,0xbc2f466e,0xbc459b1e,0xbc79b8a3,0xbcad592c,0xbc69e086,0xbbe3caeb,0xb8d09b5f,0xbbc37752,0xbc756c26, +0xbc9eb15f,0xbc9335c3,0xbc41d209,0xbbf52b80,0xbb7c387c,0x3b823847,0xbb846a4e,0xbc86f7c9,0xbc62557f,0xbc8d373b,0xbc85d2fc,0xbc26460d,0xbbb58c56,0xbc08181d,0xbc3fcb39,0x3a64e73b,0xbada4cc1,0x3898088a,0x3c684538,0xbb9879b3,0x3c26515a,0x3cc57d30,0xbc4bd568,0xbcbc3b1e,0xbbd2a05e, +0xbb1468c4,0xbb61623f,0xbbb2ebfc,0xbbefd0a9,0xbbfa5656,0xbc0d03b2,0xbc0e6d3a,0xbc30c847,0xbc39a677,0xbc0cf756,0xbb4dc08a,0xb942f26e,0x3a4a48ca,0xb97ae54a,0xba1e5438,0xbadc7f56,0xbadf19c8,0x3b45c59f,0xbc870a02,0xbc7ae47a,0x3c3d11cf,0xbc87825c,0xbc7fdf3c,0x3c5a2763,0x3c8433fe, +0x3c82fb45,0x3c7769a2,0x3c86527a,0x3c6c6ae9,0x3c3155d0,0xbc7ce55d,0xbc940ed7,0x3c41649b,0xbc3a503b,0xbb51e5fe,0x3d414f53,0x3d3c5319,0x3cfe295e,0x3cfdd4bf,0x3d0cf508,0x3d12affb,0x3d2515eb,0x3d28f2d2,0x3d1dad27,0x3d176402,0x3d0fe29a,0x3d04071b,0x3d089de4,0x3d0b2379,0x3d0e6621, +0x3d0920bd,0x3d0a8116,0x3d054b15,0x3d09537a,0x3d0272f4,0x3d0aa72f,0x3d231a1f,0x3ca9c622,0xbd2a3596,0x3d3eec34,0x3cd32707,0xbd160b4c,0xbd153066,0xbd12b1e6,0xbcf0ffc6,0xbd094570,0xbcf1e660,0xbca1dbab,0x3cadad24,0x3d42641e,0xbce6be52,0x3c5bb5e0,0xbc7c2dca,0x3cbc868f,0x3cce4b24, +0x3d144828,0x3d3ef7e1,0x3d9cba84,0x3da7591c,0x3d8da0d3,0x3d866932,0x3d749c7f,0x3d411b08,0x3d2ef245,0x3d28f7c7,0x3d31a0f9,0x3d19324f,0x3d27583d,0x3d1a7afe,0x3d25d29e,0x3d19c75e,0x3d11b3ce,0x3c7cbca8,0x3cc163d4,0x3b7996ed,0x3cf7a9b7,0x3d345092,0x3c269602,0x3ceb9a3d,0x3c92624f, +0x3cb9a7fa,0x3ca544cf,0x3d016ecd,0x3c64f92b,0x3ca1e37a,0x3ca8e32e,0x3c4faab7,0x3c5ca75c,0x3c251987,0x3bf602aa,0x3c5b0bb1,0x3d04b136,0x3d3ae139,0x3dc9ace2,0x3de5fb48,0x3db235ca,0x3da93d96,0x3d832688,0x3d357b95,0x3d3a18b6,0x3d368a7d,0x3d3fce7a,0x3d3a7a1c,0x3d301360,0x3d292fdd, +0x3d3692bd,0x3d286dbb,0x3d1124d2,0x3cffb9fa,0x3cbdbd8f,0x3d06863a,0x3ce6cee1,0x3cbb7a2a,0x3d1a903d,0x3c96d920,0x3d385e8b,0x3d097013,0x3cda2420,0x3cb12620,0x3ceb5561,0x3cd008f1,0x3cbd4228,0x3c8c0e59,0x3cdb5a32,0xbcbcb69f,0xbd4b1e76,0xbcc16470,0x3b260686,0x3d1b0a96,0x3e107c47, +0x3e29a926,0x3e004be0,0x3dfd8ae0,0x3dbecec4,0x3d5eca0c,0x3d349600,0x3d1947f2,0x3d2c311a,0x3d172d6b,0x3d173551,0x3d096579,0x3d286c87,0x3d0b96b0,0x3ce169a0,0x3cf46ee8,0x3ca7ddd0,0x3becab6c,0x3cbfe3a1,0x3cdcc072,0x3cfce338,0x3cd35cbf,0x3c246ef9,0x3c2b896c,0x3c6d1c09,0x3c6ca988, +0x3c9ef308,0x3c90aa6d,0x3c4c47b8,0xba942aa5,0xbba3a6f5,0xbc4a82c8,0xbd899046,0xbd30b367,0xbc43d1fb,0x3ca41d4e,0x3e1c1684,0x3e378aa8,0x3e0f76da,0x3e0677d1,0x3db4e268,0x3d2eab39,0x3d371bda,0x3d4e6d1e,0x3d654665,0x3d5658b1,0x3d50e646,0x3d3f2101,0x3d68a90d,0x3d2e154f,0x3cea6df3, +0x3d20e820,0x3c7b11dd,0x3c92d7b9,0x3c6f9073,0x3c94e14c,0x3cc755f9,0x3c698c05,0x3c4885cd,0x3c46a233,0x3c711b3d,0x3c6278fb,0x3c0c3f0b,0x3c410f53,0x3c0ffdea,0xbba9a119,0xbc76f02c,0xbd69b12c,0x3d81922a,0x3e1401e0,0x3dd35e4e,0x3dbbc484,0x3d0f02ad,0x3ccd0d71,0x3d2eb362,0xbaf7c79a, +0xbcfa87e2,0xbd42dd1a,0xbd973fee,0xbdb73cce,0xbdd3a81b,0xbcae7a1a,0x3aa23fc2,0xbdaa27da,0xbd1df838,0xbb25317d,0x3d85866c,0x3d2b2c0c,0x3cab35f1,0x3cb04ec0,0x3cb5e62b,0x3cbfb2e0,0x3ceb8886,0x3c70695a,0x3c361d78,0x3cde1667,0x3ce105a6,0x3c8f17b4,0x3abbd7f2,0xba2f16b0,0xbc345dc9, +0xbce37608,0xbc096fab,0x3d44dc38,0x3d6190d7,0x3dec69f1,0x3defa0ec,0x3dc92d30,0x3d6e5083,0x3cffbcec,0x3c87dff7,0x3be96ffd,0x3ca6c3f2,0x3d0b5bfd,0x3d16d98c,0x3d1d082e,0x3d5806fc,0x3d400a9a,0x3d844886,0x3e062172,0x3dbc26bd,0x3d8a9e35,0x3d4e8ffc,0x3c5ec3c2,0x3cccf29c,0x3c270bc2, +0x3c94a96c,0x3ca49555,0x3cee110c,0x3c883285,0x3c913406,0x3c880021,0x3d113e6d,0x3cfd1310,0x3cdb4588,0x3ce2e5d3,0x3d3253e9,0x3d432ea4,0x3d205fdb,0x3c19a1f7,0x3d90f2a3,0x3e00d315,0x3dbf4d37,0x3d775995,0x3dd57892,0x3dfac5c6,0x3e0da8f9,0x3d82f89b,0x3d631159,0x3d9ba490,0x3de0c9b3, +0x3e0bf66b,0x3e15a5ce,0x3de4c564,0x3dacfc25,0x3d0ffa5d,0x3d003eed,0x3cb8ef71,0x3c83cbd3,0x3c2d8f91,0x3c1cc315,0x3c9c89ee,0x3cf12cfc,0x3ce1bd14,0x3d565e97,0x3c87671a,0x3b0c14ef,0x3b9fca2f,0x3c8811e6,0x3c9a84da,0x3d416e21,0x3cafa253,0x3c68cb7b,0x3b88be9d,0x3a31d2ef,0xbc7f9192, +0x3ce899a8,0x3db5c367,0x3dd0c506,0x3e543f69,0x3e10c9cb,0x3dff7a24,0x3dd9abce,0x3d676b96,0x3d6fb7bf,0x3da0bb90,0x3dde0233,0x3e06c173,0x3e024299,0x3de768ee,0x3d993be4,0x3c8a4774,0x3d0e0333,0x3d1e5551,0x3c3db9e3,0x3c8f181e,0x3b38b8ab,0x3c8e0204,0x3c3ef22e,0x3cae9f96,0x3d55cad3, +0x3c552c8a,0xba3e505e,0x3c3a58a3,0x3bc53dff,0x3c848764,0x3d54a4e6,0xbbc36010,0x3bfd2660,0xbcbe3b3c,0x3cc52283,0xbc72b552,0x3d445d47,0x3e09a740,0x3e3379b4,0x3e995812,0x3e189aa3,0x3dab3958,0x3cbf8307,0x3d51a87e,0x3d3cdc69,0x3d9c2641,0x3d8a2449,0x3d8e2da7,0x3d6c44ce,0x3d98dcfa, +0x3da3a45f,0x3da8c0b6,0x3db0ce10,0x3d9731ec,0x3d042259,0x3c90341d,0x3cb89853,0x3c069249,0x3cb53965,0x3cc82c59,0x3d1c7c9e,0x3c41ec81,0x3b900276,0x3ccb109f,0x3c287b61,0x3c1f46b0,0x3ccb659a,0x3c5da2b1,0x3d03f802,0xbc27a08b,0x3cd4b558,0xbcab5293,0x3d1ffd63,0x3e52638b,0x3e2b40f1, +0x3e166d47,0x3df93613,0x3e038c2d,0x3e09c653,0x3e035da7,0x3e0d184d,0x3e113a4e,0x3da92ada,0x3d4c612e,0x3d4f2edf,0x3ccbe71d,0x3c44f0bb,0xbb12155b,0x3c7cb127,0x3c975f0e,0x3d002c19,0x3c6ba398,0x3c6ec3a8,0x3be7e7d8,0x3c0c316f,0x3c57edf2,0x3c927f6d,0x3cb467e7,0x3c855044,0x3bdb2a3e, +0x3c1ed855,0x3cb743d6,0x3cc81cda,0x3cdf112f,0xbc6c7dd3,0x3c17753f,0x3c9a4045,0xbd57f71a,0x3daaea3b,0x3dc97082,0x3da66fd9,0x3d8a5229,0x3d5ec8d8,0x3d4bc4c0,0x3d906400,0x3caaa983,0xbbd8e5a7,0xbc09a0f8,0x3cd0f78a,0x3d23a06c,0x3d3121d8,0x3d0a19bf,0x3d03c19b,0x3d1f326b,0x3d0cfe91, +0x3d1bb285,0x3c274b12,0x3b91221a,0x3ccc6685,0x3cc01e26,0x3cde36dd,0x3cb71445,0x3c2c26d5,0x3c45f52c,0x3c476805,0x3c871170,0x3c71c922,0x3c812167,0x3c70d4d2,0x3ba93ec1,0x3cbbb374,0x3cc1532a,0x3d235473,0x3b9e501b,0x3c6ff275,0x3d6236f7,0x3d05d471,0x3c8c229e,0x3d0e7a37,0x3d488f92, +0x3d951866,0x3d45af07,0x3d22b752,0x3ccb2a30,0x3ca91302,0x3c6253a3,0x3bb7eb6e,0x3b5e6450,0xba048ddd,0xbb15865f,0x3b1777d3,0x3c43e7b0,0x3cb0a2ee,0x38d2330a,0xbb7b2a05,0x3c218b57,0x3c26473b,0x3c47cee5,0x3c4ed18e,0x3c435313,0x3bfc68b9,0x3be8c625,0x3c7a729a,0x3c829718,0x3c8706e7, +0x3cb0def7,0x3c88fcb2,0x3c75c7a2,0x3c151ef7,0x3a0e469b,0x3ce64677,0x3c9edd67,0x3cd02991,0x3d0ba723,0x3d26dfd0,0x3d3d5fd8,0x3d697363,0x3d55163a,0x3d403080,0x3d2706fd,0x3cd57aca,0x3c61fb0b,0x3b8625dc,0x3bd3bb0f,0x3ba09b69,0x3b6d0d1c,0x3bfba965,0x3c032b7f,0x3c2fc996,0x3c826780, +0x3c2de89c,0x3c5492f9,0x3c36522d,0x3c6f391f,0x3cc674ec,0x3c240b38,0x3d04af02,0x3c56ea5a,0x3cc60067,0x3c75ddd8,0x3cbc61de,0x3d0454ed,0x3c250152,0x3cf89977,0x3cd5282b,0xbc244c3c,0x3d0215a6,0x3d2257f9,0x3d3403b3,0x3d3193a9,0x3d531b44,0x3d633f13,0x3d7dd442,0x3d44c1c7,0x3d1d0d23, +0x3cf402bc,0x3cd0d30d,0x3cb71e85,0x3c6c7f1c,0x3c88d224,0x3c99b9ae,0x3ca4edcd,0x3caf155b,0x3cb0b219,0x3ce92140,0x3c2a7428,0x3ca11376,0x3cb5c59d,0x3ce1a4d8,0x3ca93bc0,0x3ca5f641,0x3ca7a82f,0x3cbb1e59,0x3c369baa,0x3c747fde,0x3c8f6b6f,0xbbbd6319,0x3c3ada0c,0x3b7f1161,0xbc761d38, +0x3d08a30d,0x3d1270d7,0x3d1215b0,0x3cf9bed7,0x3d076f3e,0x3d0fec5a,0x3d16d686,0x3d172480,0x3d24503e,0x3d1e09e2,0x3d1ccea6,0x3d15a4d6,0x3d0825a2,0x3cf0e8bc,0x3cd68d83,0x3ce14c58,0x3ce27d92,0x3ce5e72f,0x3ce89a6e,0x3cdd3ca8,0x3cfac5b9,0x3d0a46af,0x3c88b472,0xbca6520a,0x3d1310f7, +0x3c9ea354,0xbc9bd342,0xbcb6e786,0xbc9e480f,0xbc88bcd2,0xbca13e78,0xbc89e05d,0xbc26fdd1,0x3cb3b2a5,0x3d15d0fa,0xbc6f37ef,0x3c3ff00f,0x3d5a2e9d,0xbd728361,0xbd2afb2c,0xbd5e62b6,0xbd2340b3,0xbd2c9eb1,0xbd2fc28e,0xbd4bf421,0xbd56e6ad,0xbd4dac48,0xbd4bbfa7,0xbd4a66eb,0xbd430179, +0xbd3d20da,0xbd39faeb,0xbd39b7b0,0xbd395296,0xbd3ee11a,0xbd3d85e3,0xbd3de89d,0xbd2d7fc8,0xbd50d227,0xbcb88dd8,0x3c0cd695,0x3d91483f,0xbd0e1ebd,0x3bbe703c,0x3d93294f,0x3d9007f8,0x3d881661,0x3d68c6a3,0x3d8dc515,0x3d8664db,0x3d61b80a,0x3c4f3e8e,0xbd2506c1,0x3d66b1d9,0x3ca6536e, +0x3d1ad7c8,0xbd7795f3,0xbd5ff076,0xbd74eb14,0xbd831c70,0xbdb37763,0xbdbf0006,0xbdaddc12,0xbdad857c,0xbda829cf,0xbd936448,0xbd8884bf,0xbd837654,0xbd83b297,0xbd75a85d,0xbd7d48c8,0xbd763b53,0xbd613ef2,0xbd563da0,0xbd7beba8,0x3c1c8173,0xbc41d4bd,0x3c0063f7,0xbb4352bc,0xbcfec849, +0x3c63a38b,0xbc3444b1,0x3c0ea0c6,0xbbcde9a3,0x398fa529,0xbd25c4b6,0x3ba4bb12,0x3a37955d,0xbc1d8f55,0xbb157816,0xbc81791d,0xbc96ec3a,0xbd7e51c4,0xbd389403,0xbd540d79,0xbd6a78da,0xbdc93fbe,0xbdf1ab68,0xbdc9ed11,0xbddb5130,0xbdc97450,0xbdb45793,0xbd9c18c2,0xbd9074ab,0xbd86c60a, +0xbd8ccefb,0xbd899280,0xbd91b969,0xbd6a6981,0xbd80cc38,0xbd1e9ac3,0x3c20c4d8,0xbbf68082,0xbcc7c243,0x3b43f3cf,0x3b99eb80,0xbc0954c6,0x3b6bdb52,0xbd346f3e,0xbb082aa3,0xbcabfed8,0x3b5431a8,0xbc3ee4ce,0xbc872728,0xbc739675,0xbbb86b72,0xbd718f44,0xbd475a49,0xbd6f9f70,0xbd71ff33, +0xbd91308a,0xbda918f3,0xbe0dbc57,0xbe2c22a9,0xbe13abe7,0xbe220018,0xbe1560ed,0xbdeb03dc,0xbdd39a24,0xbdb27c39,0xbdb499ee,0xbda85634,0xbd9e3a8a,0xbd9a89bf,0xbd7d17fd,0xbd6342e5,0xbd348d60,0xbc9c9d74,0xbcf1fa9a,0xbbb735fe,0xbc0c3956,0x3c6754b7,0xba92a281,0x3c625ef2,0x3c125556, +0x3bd4869f,0xbb55e077,0x3bc7f3be,0xbb424071,0x3c45df62,0xbbf535fe,0xbcf43041,0xbd31cd11,0xbdaf8837,0xbd802a5c,0xbd18c117,0xbd1283c0,0xbd085495,0xbe03ac53,0xbe28325c,0xbe108257,0xbe2c413b,0xbe1abb9e,0xbe067aea,0xbdd3eceb,0xbdc05753,0xbda6fef2,0xbdbbe36b,0xbdb49772,0xbdb2abd1, +0xbd8e304f,0xbd7dadb7,0xbd37793f,0x3cbe674d,0xbc279d92,0xbc195b4a,0x3b824a90,0x3c332559,0x3cb97864,0x3c34672a,0x3c07705b,0x3b28525b,0x3c7def35,0x3b9f12af,0x3b8fbf73,0xbc0ed815,0xbccb94f9,0xbcdea550,0xbd69a01c,0x3c020889,0xbcd14324,0xbda76fcf,0xbdbb5035,0xbe2d9b83,0xbe3eeef1, +0xbe4d126e,0xbe044fee,0xbe10135a,0xbe0e3393,0xbe2d7350,0xbe09b7e0,0xbdc066a5,0xbd20b53d,0xbd39b0a9,0xbd47b1df,0xbd920f5b,0xbd3e98c9,0xbd5a7f90,0xbd88c991,0xbc8a66ba,0xbd06cb5e,0x3bf87025,0xbc1397dc,0x3c13e760,0x3ca7d4a1,0x3c6c4207,0x3c5bf382,0x3c749193,0x3bcced1a,0x3bdb02f9, +0x3c30f87a,0xbae15921,0xbc211d5d,0x3b8ff9e0,0xbd3f3dfb,0x3d226693,0x3d625610,0x3daa93c8,0x3d4686bc,0x3a1f0335,0xbdb7396a,0xbd92b569,0x3c6667b0,0xbcdebf1e,0xbcabdecd,0xbb98c325,0xbadea743,0xbc929a39,0xbcf88f16,0xbd439906,0xbd84256d,0xbdd5cb69,0xbdb9c750,0xbdd1433f,0xbcf30aee, +0x3cdcf849,0xbc69bf04,0xbc014526,0xbb24642e,0x3b8ff25d,0x3c9553d0,0x3c0d98ae,0x3bbe39f0,0x3c30660a,0x3ca00999,0x3c74fd97,0x3c9e9b02,0x3cab19ec,0x3c8253e3,0x3ce9dbed,0x3d03861e,0x3d95a2c5,0x3cbb2381,0x3cb0bcb9,0x3c8324a8,0xbd0adf69,0xbdc5b115,0xbe10791b,0xbdd859f7,0xbd8f6872, +0xbd229413,0xbd59254c,0xbd9aa626,0xbdbdbac2,0xbdd0ba34,0xbd8cf68a,0xbd303aab,0xbd54ecf1,0xbd0b0613,0xbd21e181,0xbd12e806,0xbc78984b,0xba8a7358,0x3c10c250,0xbc2ebe1a,0x3b327f6e,0x3d28f551,0x3c3fe9db,0x3b6f69d5,0x3b48a530,0x3bae76d0,0x3c4e53f7,0x3d31eec6,0x3cd711da,0x3cd9c5e7, +0x3cf83e5d,0x3d18ca3c,0x3d47221d,0x3b86ba84,0xbc77e9fc,0xbca89874,0xbe087ace,0xbe05e21e,0xbe213202,0xbdbc0758,0xbd9cbc47,0xbd8c5544,0xbdce8dec,0xbdfe21d0,0xbe048542,0xbe03ee09,0xbdc99f08,0xbd89af57,0xbd15325b,0xbca1dc71,0xbcb932d4,0xbb349b02,0x3bbabb70,0x3c1a5df9,0x3c2979a6, +0x3c82fefa,0x3c0aabbf,0x3d2f3910,0x3be7b5ca,0xbb2fb0c6,0x3c4ec540,0xbb853c5e,0x3c44aa1d,0x3d11a8db,0x3cda95ab,0x3c916dcd,0x3c8c4e6c,0x3a6a4fbc,0x3d0c45bc,0xbb12f90b,0xbd178557,0xbd8c99eb,0xbe34b61e,0xbe0d63b9,0xbdb466ac,0xb9fb10df,0x3bf85c50,0x3d3a0b96,0x3d24d3ec,0x3d0d5d32, +0x3c6fbb94,0x3c909b8c,0xbca34cf5,0xbd1016e6,0xbd21387f,0xbd201291,0xbcf5d34a,0x3b9990c5,0x3c628149,0x3c135486,0x3cd07e32,0x3ccde04f,0x3ca25d8a,0x3cab0dc5,0x3b42cbd3,0xbb84abe8,0x3c4aba5c,0x3b8424a0,0x3c32dfec,0x3c3748c0,0x3c52be6c,0x3bf38b7e,0x3ce0f49f,0x3c16ff62,0x3d912af8, +0x3cdcaf9b,0xbe2736d9,0xbe02b27b,0xbdc5cb50,0xbdf08b74,0xbe073b96,0xbdc86f32,0xbdb79a5b,0xbdb20d36,0xbda9bd50,0xbd37b197,0xbd4ead9c,0xbd86e15e,0xbcc932a1,0xbbc241d8,0xbc903645,0x3ca72867,0x3c1b46a9,0xbca8c8e6,0x3c3f1bf8,0x3b67973c,0xbbc8a50f,0x3c1cbffd,0x3c23e4de,0x3c66f3de, +0x3c984f9c,0x3c1a180a,0x3968f0ff,0x3bf63767,0x3bce130e,0x3ce7ecdf,0x3be0eea1,0x3cfd657c,0x3c9e9b73,0xbc784bb8,0x3db0eb6e,0xbcf6676c,0xbd1fc474,0xbd16ef50,0xbd957138,0xbda27dfa,0xbd9f3a25,0xbd82922e,0xbd0fcd17,0xbbb4e2e4,0x3ba5500a,0xbb41c17c,0xbbf3b2c8,0xbbb353e6,0xbccf0fc0, +0xbd06b389,0xbcdef07f,0xbc99e010,0xbc95d007,0x3c94fc1b,0x3c968c94,0xbc6122a1,0x3c35ff8c,0x3a9de8be,0x3bb932af,0x3bdb158f,0xbc0d2a8f,0x3a8bd08a,0xb9c79798,0xbaa3016e,0xbb68e480,0x3c222afc,0x3c671f3f,0x3aa589f8,0x3c306890,0x3bd47ab7,0x3ce8e972,0x3c426c3c,0xbd1825d4,0xbd0b5a5b, +0xbd639737,0xbd5148e5,0xbd652294,0xbd5f3e98,0xbd1812e2,0xbce546fe,0xbc7909db,0xbc6ba173,0xbc7c1a35,0xbc8dfd4c,0xbcefdaba,0xbcc1b20a,0xbc8d8757,0xbc3ba005,0xbc57e517,0xbc584384,0x3c2c1880,0x3c5bcbb7,0x39384e65,0x3c14a9c3,0x3bba0783,0x3b745832,0x3c68eaea,0x3c391be1,0x3be27f61, +0x3bab04b4,0x3c3116f6,0x3cb69b66,0x3c40a3ab,0x3c8436ab,0x3d02482e,0x3cd4672d,0x3c97a81a,0xbc97ef1e,0xbcc62070,0xbd0167f8,0xbd3268fd,0xbd1a4e10,0xbd083d59,0xbcff4a9d,0xbcff9cb3,0xbcf37795,0xbccf95bb,0xbcbd77ad,0xbc89a0a0,0xbc535073,0xbbec5187,0xbb89c5f4,0xbc0808a2,0xbc1014fe, +0xbc8e8563,0xbbdc2bd0,0xbc150c74,0xbb2e0c41,0xbc1327bf,0xbba1533a,0xbace0380,0xbade99e1,0x3ba9c035,0xbcf6b9a5,0x3c79e4a9,0xbc4c59ea,0x3c737f37,0x3b0330f0,0x3b903e99,0x3ccbec8f,0x3bb25e72,0xbbe4da6d,0x3d0a35aa,0xbcfd8ff6,0xbcca6791,0xbcbf3bbf,0xbca4fabb,0xbcd8dd9c,0xbd008c3a, +0xbd109d18,0xbce76ca5,0xbcb7c9b9,0xbc97407b,0xbc69635e,0xbc3df7fa,0xbbdb6faf,0xbc40c1fe,0xbc51732d,0xbc2dc7bd,0xbc0fd58c,0xbbf5d91b,0xbc47f37d,0x3c95f436,0x3accb493,0x3b8b313a,0xbb7a9b1e,0x3977cf4a,0xbb85f86c,0xba1ce9e9,0xbb4f00b5,0x3bc50820,0xbb8d2dbf,0xbce73227,0x3c2f611b, +0xbc5d4208,0xbc0c040a,0x3ccf3aab,0xbceef432,0xbb3dbaa7,0xbcdd2407,0xbc98014e,0xbcadbcb0,0xbcafd0f8,0xbcad4d25,0xbc9c3905,0xbc9f3431,0xbc9b734e,0xbc9ce11c,0xbc96e81d,0xbc8cdabc,0xbc8214fc,0xbc622a23,0xbc625577,0xbc6903c3,0xbc83b989,0xbc92cb5a,0xbc8e031b,0xbccd203d,0xbbe97225, +0x3cb1bb16,0x3d5ef7f0,0xbbfef37b,0x3ca8db13,0x3d6eb5e9,0x3d825bd5,0x3d667eb6,0x3d5614a7,0x3d7ac436,0x3d713b75,0x3d471ef3,0x3c8b3af4,0xbbf9d62e,0x3d579f77,0x3cfe2710,0xbcaecec2,0x3cda98f9,0x3c6126a9,0x3d460809,0x3cbc2507,0x3cb3c4ad,0x3ca1b891,0x3cb34c56,0x3cb82895,0x3cb0cbd1, +0x3ccaf1bb,0x3cd0e1a2,0x3cbbb32c,0x3cbfd452,0x3cc7610a,0x3cd52687,0x3cdb0a5b,0x3ce561eb,0x3ce6d953,0x3ce9aa79,0x3cc77c28,0x3d0a2d44,0xbc3ba6da,0xbd22a015,0xbd95b880,0x3ba002e3,0xbd0f1ff3,0xbd9592aa,0xbd94da10,0xbd8db74f,0xbd7e39d9,0xbd9d654a,0xbd97ecfd,0xbd872645,0xbd35944a, +0x3c1e0ffd,0xbd82f89d,0xbd59a69f,0xbdccedca,0x3c68dbe7,0x3cc5030e,0x3c99a49a,0x3c56f504,0x3cd23704,0x3cf1a744,0x3ce6401a,0x3d1c840e,0x3d21c686,0x3d075319,0x3d108fd4,0x3d0da8d0,0x3d173a31,0x3d0fc4a3,0x3d184c1a,0x3d2008aa,0x3d0d2f2c,0x3d0f76c9,0x3d3daa6e,0xbd154623,0xbc2d6147, +0xbcb4d50d,0xbca2d87f,0x3c57341b,0xbc9ff4b2,0xbbb007a2,0xbcdccecd,0xbc2290f9,0xbca8f126,0x3cf4679b,0xbc77d696,0xbc9715c4,0xbc592f32,0xbce1c43a,0xbca002e0,0xbd211940,0x3d590f24,0x3cbaadb0,0x3c84f5fd,0x3b507c28,0x3c26853d,0x3c47d999,0x3bea5751,0x3d0a1195,0x3d222261,0x3ce4512e, +0x3cefac0d,0x3d0a36f3,0x3d1f3575,0x3d316d30,0x3d35b831,0x3d56a41e,0x3d208f0c,0x3d5628f7,0x3c7b39d0,0xbd42bc15,0xbc338fbd,0x3a7778d1,0xbc06ab2e,0x3a9e4838,0x3b26c7e4,0x3a8e51c9,0x3d2858c1,0xbc617368,0x3c86e863,0xbc67578d,0x3c33caba,0x3c1f94ca,0x3a77dd6c,0xbcc30a3b,0x3cbf56ce, +0xbd91a409,0xbc5185d3,0x3d2cc0d5,0x3b9bd46e,0xbb982b98,0x3bb70f6e,0x3cbd8a29,0x3c734173,0x3d533a89,0x3d778343,0x3d2558ab,0x3d489cc2,0x3d2ea838,0x3d60387a,0x3d4ad0ed,0x3d4ed9c8,0x3d7b2634,0x3d45576f,0x3d5493ca,0x3d0b7648,0xbaa01243,0x3ce3be52,0xbb471efe,0x3d000e18,0x3c26a981, +0x3cd92989,0x3b2fa334,0x3c0721f0,0x3c1f2ac9,0x3ca0054c,0x3af99452,0x3c9714ea,0xbc56e1ba,0xbbf19056,0xba57f2eb,0xbc250b20,0x3c7b97c2,0x3d03d36c,0x3d7cee3b,0x3cba3af3,0xbbf2cf0b,0xbc974b95,0xbcf0b4ca,0xbcb4a786,0x3d0ef065,0x3d5dadf7,0x3ced7ed6,0x3cf3a0bd,0x3d1fd640,0x3d490fe9, +0x3d7324fd,0x3d848461,0x3d93705b,0x3d6cd8b4,0x3d6af5d9,0x3cf306db,0xbd69a8dd,0x3beab4f2,0xbba85103,0x3cad2a05,0x3cf1c6a1,0x3ca80c7f,0x3cda6712,0x3c8202cc,0x3cb3a9b5,0x3c3a1698,0x3c912844,0x3c48e356,0x3c896ed2,0x3ca9c1ea,0x3c7b7976,0xbc6919cf,0xbd1167dc,0x3b195fd4,0x3db15fe6, +0x3cbd8453,0xbbf5d959,0x3c1361af,0x3d28485e,0x3d3816eb,0x3c542e87,0xbc226665,0x35b06602,0x3af5f6ee,0xbc974b30,0xbcc7a765,0xbca169d0,0x3b52d0e5,0x3cc5e685,0x3d186377,0x3d4dd2d6,0x3d09a1a5,0xbc1e5d1a,0x3cca8578,0xbb4cb0bb,0x3cbd2447,0x3bd31d6f,0x3caa3f5b,0x3c9b3dec,0x3c99069b, +0x3c5b0da3,0x3c9c46f0,0x3ca43541,0x3c045782,0x3a8e689d,0xbcaa785c,0xbd5984fe,0xbb73eca8,0x3daf0724,0x3dbbdec7,0x3d914e58,0x3d364973,0x3dba4df7,0xbcafbe1c,0xbdd1e547,0xbda0c0cd,0xbd842c5a,0xbcf601d1,0xbd87e55f,0xbd2f361b,0xbc5fe04b,0x3c451624,0x3d6821fc,0x3d890c39,0x3da9112e, +0x3d52f655,0x3d5d921b,0xbcc6c005,0xbd7651d4,0xbc9ef555,0xbc00a51d,0x3c1efbf3,0x3c88432b,0x3cbec772,0x3c6d60f8,0x3c26d399,0x3b8415f7,0x3c804ed7,0x3ca58ce2,0x3cfbc575,0x3bd13b9d,0x3cea5c20,0x3d864744,0x3d9546cb,0x3c9a6e5c,0x3c705e1e,0xbadfdf3b,0x3d00835c,0x3dc237a8,0x3d0852a2, +0x3d4da3c8,0x3dd47fec,0x3d9cb343,0x3d1024c7,0xbccc03e8,0xbd00da84,0xbc99fb44,0x3a84582a,0x3bb9a21c,0x3c13a2b0,0xbc258fee,0xbc157560,0x3a2bbac3,0x3c118adf,0xba784d19,0xbb4dc267,0xbc844527,0x3c7ed373,0x3c92b81f,0x3cd8d9a9,0x3c5ae23b,0x3becc67e,0x3c49d20b,0x3c023c98,0x3c760916, +0x3d5f9481,0x3d162213,0x3cfb93a2,0x3c8790a5,0x3b7be1c6,0xbd481464,0xbcedee88,0xbc5a40e5,0x3c3585d4,0x3d6cb4cd,0x3dcd507a,0x3e1e498b,0x3e158dd7,0x3e18efa9,0x3ddddadc,0x3d883eba,0x3d648f8e,0x3ca7ff58,0x3c453ca3,0xbb9b6aac,0xbc789b3e,0xbc96a718,0xbcd7463b,0xbb464a9c,0x3be76836, +0x3b92bd27,0x3c99c1b9,0x3bff1892,0x3cae79a9,0x3cff6bb3,0x3cb8e3f0,0x3c9de89b,0x3aeeecc2,0x3c2eef6b,0x3bd66b80,0x3c4cc346,0x3d0ffb5c,0x3ce26a6a,0x3ceb3f62,0xbbd10f01,0xbc77f4b1,0xbbed17b0,0xbcbf7990,0xbc163b32,0x3b59e476,0x3da49778,0x3d27c898,0x3c759c1c,0x3c0afe24,0x3b368f27, +0x3b3830ef,0x3cfba75e,0x3c8e3fe4,0x3c821bb1,0xbc08fc93,0x3cac680e,0x3cfe68cc,0x3d023f4d,0x3cce07e6,0x3c90457b,0xbb4824fc,0xbbd8c1db,0x3ac07121,0x3c022c25,0x3c8776c4,0x3c526d20,0x3c7e4302,0x3c2f197a,0x3c3aab7b,0x3c532155,0x3bc51bc2,0x3c140a93,0x3c60a517,0x3c441900,0x3c684676, +0x3b8cc63a,0x3b3d62fb,0xbdba1a8e,0xbd3f4516,0x3d8455de,0x3d0324c1,0x3d2c7ef8,0x3d43930f,0x3d9432da,0x3d8dfbed,0x3d324e60,0x3cfb394b,0x3d40388b,0x3d055e6a,0x3d3d56d5,0x3d0dea91,0x3bd3389f,0xbbfd14d9,0xbc3af3af,0xbc751aca,0xbbc502cb,0xbba33dcc,0xbc662bf4,0xbc28b935,0x3a9de8f7, +0x3815f81e,0x3bd05ff1,0x3c694d79,0x3bd7d036,0x3c0ed784,0x3be277f4,0x3bcbd5dc,0x3c668909,0x3c1c25aa,0x3c57cd93,0xbbd06ad9,0xbcc23fab,0x3c3089f8,0xbd54927e,0xbc5ce15d,0x3b9a3d67,0x3c097315,0x3d11b444,0x3d0648f2,0x3d287763,0x3d91efb5,0x3d5e020b,0x3d265664,0x3ca5404a,0x3cad9353, +0x3ca368ed,0x3cafa6de,0x3cf6a9b7,0x3d025bd4,0x3ce3d5db,0x3cd31176,0x3c706780,0xbc86131c,0xbc27f41a,0x3c10d479,0xbc4ebb07,0x3bbfc40d,0x3c3bef7c,0x3c316471,0x3cc73348,0x3c2c0db2,0x3c6d0bb1,0x3b607db2,0x3bd1b84b,0x3bbfd526,0xbbb49374,0x3b33ce0b,0xbc338001,0xbc1ba1c5,0xbc657016, +0x3ad569ac,0x3d048ce7,0x3cc27767,0x3cbd685a,0x3ce6dc47,0x3d2bc793,0x3d747c63,0x3d1a77f8,0x3ce2e1bd,0x3c691dcc,0x3ca21ba7,0x3ca83b6b,0x3cb5ca31,0x3caac1e1,0x3c8403f8,0x3c9b7623,0x3ca9eee6,0x3cc881cc,0x3c618dd6,0xbb280bc0,0xbb149051,0x3c1af20f,0xbb1ca038,0x3bef8719,0x3c038d0b, +0xbb945eb7,0x3a2f4889,0x3c0f2084,0x3c1f4c59,0x3c2d7710,0x3c41317a,0x3c2f91bc,0x3bc363a6,0xbc4cfd7f,0xbb9571e9,0xbc6fe34a,0x3cdfa79e,0x3cedda0c,0x3cb97ca3,0x3cd6ee67,0x3d0be54e,0x3d11514e,0x3d1d758a,0x3cf9ec99,0x3cd4e6f8,0x3c8af221,0x3c325a42,0x3b7d4cc3,0xbb5002aa,0x3aaa3acc, +0x3b27582a,0x3bd9c21a,0x3bbce1f9,0x3cd7ecc4,0x3c53f96a,0x3b808852,0x3b8daf5d,0x3c1f50d0,0x3b96a229,0xbac0c4f2,0xbbf8bd4b,0xbb16932a,0x3cc20383,0xbcab4453,0x3c902765,0xbba8156e,0x3c303536,0x3aec4162,0xbc07bbeb,0x35b1d964,0x3c32b7f4,0xbd27c88c,0x3c3f344f,0x3c76f7c0,0x3cc7b202, +0x3cfa5018,0x3d1fdb6b,0x3d4079a1,0x3d7227f6,0x3d4ef836,0x3d2a9f69,0x3d10d361,0x3ce996d9,0x3ca8ab7f,0x3c21f302,0x3c3a6b88,0x3c487b27,0x3c70d9df,0x3c4c295e,0x3c116c1c,0x3c22e0c0,0xbc9992d6,0xbbbf900e,0xbc633798,0xbbccd5b8,0xbbeac76a,0xbb0d99cc,0xbc3f2d92,0xbc821428,0xbca6abbd, +0xbca1cdbe,0x39b1a979,0xbd108ecf,0xbc92ab2b,0xbc8f1845,0xbd18f01f,0xb881d3ff,0xbb3c3c4b,0x3cea581d,0x3cba343e,0x3cc44172,0x3cc7db26,0x3cd3a92a,0x3ccfba97,0x3cdab521,0x3cc892bc,0x3ccb9dfc,0x3cc35538,0x3cb7837b,0x3cb3c6d4,0x3cacae03,0x3cb53a61,0x3cb2af61,0x3cb5671e,0x3cbf96ff, +0x3cc6efed,0x3d0718c1,0x3b6f9e46,0xbcb06394,0xbd043b74,0x3b239ed4,0xbcc19eb6,0xbd2287e3,0xbd3320ef,0xbd157dd8,0xbd08923e,0xbd257e38,0xbd1faa36,0xbcffa270,0xbc8aeb10,0x3b89f274,0xbcff58ba,0xbce8a56a,0x3ce75d20,0xbc9f84b1,0x3c26f113,0xbd0d2062,0xbc8f8f80,0xbc8ea04d,0xbc96263a, +0xbca330fa,0xbcae4c6f,0xbccb6328,0xbcb09319,0xbcb31763,0xbccb72ff,0xbcb914be,0xbcb17663,0xbca875ac,0xbcb14699,0xbcb72074,0xbcb09556,0xbcb176c9,0xbc95397e,0xbcd0a03d,0x3cb0050b,0x3d21d3e5,0x3d1ed536,0x3c405e25,0x3d248159,0x3d2f8e5c,0x3d327e28,0x3d25a73e,0x3d171d86,0x3d4b0689, +0x3d485e96,0x3d3f6b5e,0x3d40d415,0x3c23901c,0x3d140d65,0x3d49151c,0x3d74da73,0xbb7b5425,0xbc08d6d9,0xbb390332,0xbbc88a91,0xbc97968a,0xbce5f639,0xbd2ded67,0xbcfcff80,0xbd07379b,0xbd1bef7b,0xbd0322a6,0xbcf8cf01,0xbce552fa,0xbcf59a70,0xbcfbb673,0xbceb7acc,0xbccf6a19,0xbcdbad1b, +0xbd0b4d82,0x3d05128a,0x3c42835c,0x3c8efe14,0x3cfe4416,0x3bacf974,0x3c8bdd0c,0x3c6b8e12,0x3cfbdbfa,0x3c8bec2e,0x3cb3c78f,0xbcb357b9,0x3c96ba0a,0x3cb48b36,0x3cab12a1,0x3ce3bb7d,0x3c72ea62,0x3d4321b8,0xbc33d103,0x39c0cc74,0x3c0a088e,0x378b7bbc,0xbcb132af,0xbcdc1356,0xbd5ac259, +0xbd00bd79,0xbd0a4f76,0xbd4ed07b,0xbd213f73,0xbd122947,0xbcdf0569,0xbd13f277,0xbd0fe251,0xbd162704,0xbcd398b8,0xbd1f9295,0xba0d1516,0x3d47538d,0x3c57a3a5,0x3c76be1f,0x3ce4ca1b,0x3c8b92c2,0x3c858168,0x3c528a4c,0xbc7db229,0x3d160b05,0xbb869e96,0x3cd61ce7,0x3c35ee78,0x3c813e2b, +0x3cadf6ad,0x3d13a004,0x3bac9a3c,0x3d60b6c2,0x3cf226c0,0x3d036a34,0x3d42c636,0x3d068dba,0xbc27578e,0xbd09199e,0xbd9c1945,0xbd2daa4f,0xbd2d61e4,0xbd8389a5,0xbd39e716,0xbd24628c,0xbcf1caa0,0xbd2cf5fe,0xbd23f2d2,0xbd1721ee,0xbd09cefe,0xbd1f918d,0xbc5c44e9,0x3c181629,0xbc90a306, +0x3c6ad660,0xbb1525b3,0x3cbfe97c,0xba2489a6,0x3cd63d51,0x3c282291,0x3c572370,0xbbef6f31,0x3c2b8d31,0x3c501f64,0x3d01afd7,0x3caebe8c,0x3cfbd844,0x3c84ec05,0x3d01ba65,0x3d0cd3a7,0x3ce81cf0,0x3d5caf00,0x3c9cbb9c,0xbc3a48c2,0xbcd2610b,0xbd909a0b,0xbd0b4786,0xbd1d2e2d,0xbd9a131d, +0xbd58eebe,0xbd29eab7,0xbcc74e50,0xbd2df915,0xbd3c3d65,0xbd33f3b3,0xbd07d9bc,0xbd1501bf,0xbc3ac0b8,0x3d53efeb,0xbbe3a624,0x3c70792e,0x3c419876,0x3c35d2d6,0x3c902873,0x3bdc43b4,0x3c0dac27,0x3c1a545d,0x3c280189,0x3b706b9a,0x3cab6b94,0x3cc370e3,0x3ce3295e,0x3d17f449,0x3d7107b5, +0x3d53e531,0x3d169331,0xbdee14e4,0xbd9bf9f6,0xbd6c47dd,0xbd919f90,0xbd7d1dfc,0xbd95d5b2,0xbd8258a8,0xbd1bd9d5,0xbd273992,0xbcfeeea3,0xbcb2d59c,0x3c29d0b8,0x3cda66b6,0x3cf31eba,0x39ce3458,0xbbf7ba3c,0xbcb25374,0xbc0cabb2,0x3c39113b,0xbc90701a,0x3c99e130,0x3c0133b4,0x3cbb2744, +0x3c2756b3,0x3ca9a028,0x3c99578f,0x3c135ac1,0x3ceb01f0,0x3cf84fcf,0x3b899dc9,0x3b717acb,0x3cb154ff,0x3d1507ad,0x3b89b4e3,0x3d3f68e6,0xbbfac5a2,0xbc9259f3,0x3cf5a98e,0x3d700c47,0x3c4d9acc,0xbca838ad,0xbd3983b3,0xbb56e57e,0xb974fb02,0xbd02042b,0xbb85f7a2,0x3b6b8cab,0x3c4a7321, +0xbc907fc2,0xbd14decf,0xbd7c0dd4,0xbc8abc22,0xbcce54d6,0x3914f3e1,0x3ca14da5,0x3b7d06bd,0x3aebe894,0x3c0025cc,0x3c405ad8,0x3c68c9b1,0x3c5bb848,0x3c409adf,0x3b850b4e,0x3c66ef0b,0x3c444df2,0x3d2ca874,0x3ce628f4,0x3caca706,0x3d18497e,0x3d5711b9,0xbc063228,0x3bf5ed2c,0x3c14d017, +0x3c78c032,0x3d5b07e0,0x3cb595ba,0x3d03f37a,0x3b4d0044,0xbcf2373d,0xbd324b33,0xbd125356,0xbd368290,0xbd2d9f0f,0xbd673f23,0xbda046c9,0xbd7b20e5,0xbd416395,0xbcc47d91,0xbd1a78f3,0xbca4c22a,0xb9673396,0xbb8c0440,0x3bee0eb4,0x3c892059,0x3ca6008c,0x3c04086a,0x3c33583b,0xbbeed08a, +0x3b7b4b04,0xba90d102,0x3c433d63,0x3d3865dc,0x3cd97dec,0x3d0a7679,0xbae512a7,0x3cc89664,0xb9d63f59,0x3c380c9e,0x3cf5b58b,0x3d40ccde,0x3da0df76,0x3d3b5377,0x3d678a8f,0x3cf422e7,0x3d55192c,0x3d81fc53,0x3d8f53ba,0x3d19ec87,0x3ca7c647,0xbc0ed7a7,0xbcb4d7b7,0xbcdf84b7,0xbc964ba9, +0xbce46434,0xbd387436,0xbc57e6e6,0xba9b8c9a,0xbb69be20,0xbc0f6c05,0x3d176931,0x3cb13fc1,0x3c26274e,0x3bff5651,0x3b46224e,0x3c9eb1a5,0xbb989379,0x3c3b73f8,0x3ccc5d8b,0x3d013293,0x3caa3ec5,0xbae3ac1e,0xbbbb6ef4,0x3c14ade3,0x3d469b95,0x3d6f4845,0x3d658589,0x3d1358c8,0x3c9a2167, +0x3cbfb2ad,0x3d27b3c6,0x3de51a8f,0x3e160045,0x3e0f5f97,0x3df91f02,0x3dbecd7f,0x3dc1a77f,0x3d3ea229,0x3cbca8ce,0x3b5ac558,0xbb82f4d1,0xbc57080b,0xbc011e7a,0xbc384448,0xbbd8730c,0xbb4d5705,0x3c726820,0x3c6cd340,0x3bb07de2,0x3c5c803b,0x3c4d3e96,0x3c9f5172,0x3ca00d6f,0x3cadb6b1, +0x3bd9d48f,0x3b96cc41,0x3c6c37c3,0x3c8ca97e,0x3cd58d18,0x3da536e1,0x3d90c663,0x3d561851,0x3d89fdd4,0x3cdf847d,0xba22c091,0xbb90cf8a,0x3cce91b9,0x3d1fc65b,0x3d7e7027,0x3d8d57db,0x3db5bbfa,0x3d82b8e4,0x3d991792,0x3d34b076,0x3d00ec23,0x3c7f1a04,0x3bf0cb71,0xbb111671,0xbbe8b3dd, +0x3c5a40db,0x3ba1ab2a,0xbbcfccb0,0x3acccd2c,0x3b00188f,0x3c8f66ba,0x3c3e2e1c,0x3b50a677,0x3c3ed2c5,0x3bc53ebf,0x3c4055ee,0x3d1766c4,0x3ceec258,0x3ca9f3da,0x3cfc3701,0xb9e6854b,0x3cde165a,0x3d42d497,0x3cb8d245,0x3c592e76,0x3a85068a,0xbca76eb9,0xbccff0d4,0xbc4147ef,0x3ca0c8cf, +0x3cfaa485,0x3cbfe592,0x3c98e05f,0x3cf3d311,0x3d21dbcd,0x3d40ffd8,0x3d103283,0x3c61cdbb,0xbadd9386,0xbb6c367d,0x3b056541,0x3b40c1fe,0x3b994ece,0x3cc9f67b,0x3bfa07ea,0x3c248759,0x3cd3795d,0x3b2c246b,0x3c1beffa,0x3afac511,0x3c249059,0x3c192936,0x3b9c53c9,0x3c4970d7,0x3c1785cf, +0x3c6034c6,0x3cfc5398,0x3d043b81,0x3c97d7b3,0xbb90a796,0xb8ef85e7,0xbb127a79,0x3a812696,0x3b753726,0x3ad85657,0x3c705976,0x3c745938,0x3c4379ff,0x3c1aedbd,0x3be14c23,0x3c0ca52f,0x3c5ba089,0x3c111cad,0xb897dd79,0x3b187f4d,0x3b7e15d3,0x3c78f22a,0x3cc2fecd,0x3c9447d1,0x3c5a7a71, +0x3c71756d,0x3b34e4d9,0x3bd44a74,0x3c7a2f48,0x3c5cec40,0x3c07b09c,0x3c1e06b9,0x3c10c8b3,0x3c7773a5,0x3c142d33,0x3c598742,0x3cc8bcf7,0x3c9af46f,0x3d04b31b,0x3bdf6cef,0xba92dfe8,0x3c2178d8,0x3bb7eebe,0x3c394d31,0x3c5a9dfb,0x3c8f1ed4,0x3c9791a3,0x3cb961f6,0x3ced6cc9,0x3cb09b18, +0x3c807fce,0x3c4096f9,0x3b9db18f,0x3a8f5b0f,0xb8bb1cd7,0x3c1e52b0,0x3be2571d,0x3ca31569,0x3cba9d0c,0x3c72c18f,0x3c51e695,0x3c3e2115,0x3c5b38ad,0x3c63250c,0x3c076858,0x3c0e2255,0x3d0dc104,0x3c03ddb6,0x3c9792be,0x3b1c4380,0x3c4d57e8,0x3cb3cd6a,0x3ca3f1c5,0x3c4fdb0b,0x3c9704de, +0x3b0222d3,0x3c19e56d,0x3bd9450e,0x3bdb9242,0x3beceaae,0x3bb842f4,0x3bab2ca3,0x3bf8e3cd,0x3c02a5ff,0x3bf831ed,0x3c438c98,0x3c8e7ed9,0x3ca58beb,0x3cbc34d8,0x3cba75a1,0x3ca713da,0x3c8737a6,0x3c3842a1,0x3c40535e,0x3ca3b8b6,0x3ca5b29c,0x3cdcc680,0x3cd724ab,0x3cc34cf2,0x3ccc803c, +0x3cd92e2f,0x3cc90871,0x3c878026,0x3c837bfc,0x39620f32,0x3c7a4e9f,0x3c876f55,0x3bb0d311,0x3c59cb62,0x3c547f1d,0x3cf6f204,0x3a425914,0x3b2e0f78,0x3b33b2be,0x3b362927,0x3b44095d,0x3b695f72,0x3b746b0f,0x3b81b0e1,0x3b9e8c8e,0x3bbf41a7,0x3bb4dbaf,0x3b90eaae,0x3b8aa88b,0x3b1d07c5, +0x3b002b51,0x3b2076eb,0x3b69ac8f,0x3b7decb8,0x3aa7113a,0x3cde93fe,0x3d1e4559,0x3cc722f4,0x3cd42b20,0x3d203daf,0x3ce3d31d,0x3ce843df,0x3cd840aa,0x3cd585cb,0x3cf49d1d,0x3cf2464c,0x3cd29e9b,0x3d0b86ef,0x3cbbf8fd,0x3cceffc9,0x3d21d321,0x3c316367,0xbd01f396,0xbd49350b,0xbc7a3ef1, +0xbca75553,0xbcb582e6,0xbccb70d0,0xbcc7847e,0xbccbe774,0xbccd8688,0xbcabfb66,0xbc9a4671,0xbc8a9c16,0xbc8af7da,0xbc8c6266,0xbc8d8c84,0xbc875c2d,0xbc88e36d,0xbc8598bf,0xbc851fac,0xbc89fa54,0xbc570e9d,0xbd37fd48,0xbd3aa993,0xbc0f59b8,0xbd26382d,0xbd3d9dd9,0xbc597fad,0xbc6f5164, +0xbc588533,0xbc6c48aa,0xbcaa4c42,0xbcb18661,0xbcc3be36,0xbd436b88,0xbd2984d5,0xbc357a1f,0xbd39d07d,0xbcd1a59d,0xbccc5aed,0xbd05555f,0xbd2c8674,0xbd571f5c,0xbd52a080,0xbd418510,0xbd2b73d8,0xbce8225a,0xbcda7473,0xbcd26eb6,0xbccbf8c3,0xbcc123e6,0xbcb58c92,0xbc8a39de,0xbc99c4b6, +0xbc93a029,0xbca10303,0xbc842967,0xbc1e6443,0xbd1e18b8,0xbcef1254,0xbc9e38b6,0xbd22a511,0xbcf66fbc,0xbc930861,0xbce26217,0xbd06aa9a,0xbcece59f,0xbd065594,0xbc4c3463,0xbca981ee,0xbcd0eac6,0xbce66f47,0xbce39a3b,0xbcf0cc59,0xbd350840,0xbd297782,0xbd1705db,0xbd7295c4,0xbd97a237, +0xbd9bd971,0xbd932a19,0xbd859925,0xbd45b1f6,0xbd0a166c,0xbcd44985,0xbcde068b,0xbcd0fd3b,0xbcc149db,0xbc9fecac,0xbc8e8333,0xbc83d519,0xbc9fde93,0xbc051974,0xbcc69726,0xbd53a381,0xbcc2779a,0xbce9d639,0xbcc56804,0xbc3af8ce,0xbcbaef88,0xbbfd6e51,0xbc1a6624,0xbd18b558,0xbc5ba1e8, +0xbcd48ce9,0xbc253f3d,0xbc8ab440,0xbc9e973e,0xbc801a0e,0xbcdd07a0,0xbbbd2c66,0xbc227e93,0xbd835eab,0xbd996eda,0xbdec73cc,0xbdddd886,0xbdc1885b,0xbd985f23,0xbd49221f,0xbd10f25a,0xbd03dbf7,0xbd00e001,0xbcd64ae9,0xbcbbb525,0xbc2f67b2,0xbc0805e3,0xbc2852a2,0xbc12a2b8,0x39719e40, +0xbbb32a8f,0xbcb3513e,0x3aad968e,0xbbc60520,0x3bebaac7,0xbb844646,0x3c109427,0xbbc541f0,0x3bdddee4,0x3a342aeb,0x3b90379a,0xbbb10284,0x3a8d877c,0xba34b09d,0x3c0f0d84,0xbaf93caf,0xbc54482c,0xbc9f978b,0xbd07491a,0xbd8d7ca8,0xbdc61fde,0xbdf273ed,0xbe039afe,0xbdfe7d39,0xbdde9ea4, +0xbda7f75e,0xbd49aaeb,0xbcc84fe9,0xbce362e1,0xbcecbf03,0xbce8904c,0xbc9c56cc,0xbc723657,0xbc52c829,0xbc688cdc,0xb9cfb6b1,0x3b70cc49,0xbd43468b,0x3bb0151c,0xbba5fe68,0x3c63cad4,0x3cbdbc79,0x3cacbd4b,0x3cd7c1c4,0x3c5d275d,0x3c41de2c,0x3badb8d0,0x3c07ff44,0x3c92e3d5,0x3c9ea0bb, +0x3c2ed429,0x3c953c37,0xbb5904de,0xbdfec802,0xbe05db25,0xbdc1d3a2,0xbd9f74cc,0xbc8351e8,0xbd475981,0xbd45525b,0xbd27cfb2,0xbb90e02d,0x3bd5ec16,0x3b36d9b7,0x3cc95f16,0x3d17cc77,0x3cd00023,0xbc0a7a13,0xbc7d6075,0x3d5bb6dd,0x3cf23092,0x3ca246d0,0xbb5d8da6,0xbc9242ec,0x3c16a765, +0xbbcb9fab,0x3c8461ce,0x3b3b1e69,0x39ed4852,0x3c82b65f,0x3cc0b230,0x3c403382,0x3ca8504f,0x3be1df9e,0xbce592dc,0xbc6a8640,0xbce670c3,0xbd066af4,0xbde3c35c,0x3c0398a4,0x3d4ce6b1,0x3d4adfee,0xbc96c730,0xbdc4b840,0xbdeeb375,0xbdef4964,0xbdfaceaf,0xbd813293,0xbcc65c66,0xbb4efeba, +0xbd198647,0xbd8069d4,0xbd777bde,0xbd8c784b,0xbd792ceb,0xbd87510b,0xbd5086a1,0xbc821a83,0xbd10d562,0xbcdc4608,0xbc49c017,0xbb150921,0x3c635bba,0x3cafce1b,0x3ca8160a,0x3c252d8b,0x3b077c64,0x3b10d1e0,0x3c156677,0x3c5556f1,0x3ced2b16,0x3b9796c9,0xbb88d1d5,0xbb81d5b0,0x3baa3978, +0xbc2ca0c0,0x3c2679ff,0x3b36e67f,0xbcbffdde,0xb74de3c3,0xbd74f607,0xbd87fc47,0xbd97b472,0xba70f3a2,0x3d0253f1,0x3c8b7efe,0x3bb02122,0xbcfc2700,0xbd3651c1,0xbd3ab50d,0xbd4a7fa2,0xbd2de5c9,0xbd2fb149,0xbd022bfe,0xbcbea0bc,0xbcdc11a0,0xbc2514f7,0xbc9f5734,0x3c79d2e0,0x3c446f11, +0xb7974397,0x3aee5288,0x38ccdcd5,0xba67293e,0xbbaf84f7,0x3b5a644e,0x3cd4168c,0x3cb0b166,0x3cbf1db7,0xbb0249c6,0xbc1419f6,0x3ba21846,0xbbde37d0,0xbd2d7c7b,0xbd3f2bd7,0xbce3e586,0xbd2b8b7f,0xbceda708,0xbbbc0524,0x3cdfcd32,0x3cb9af84,0xbcac4497,0xbc8b6911,0xbd001fcf,0xbd20c884, +0xbd174db7,0xbce08ac1,0xbc63cd33,0xbcae9538,0xbc7c2980,0xbcbfa377,0xbd1df3a7,0xbc7f0631,0xbcaf3ea4,0x3c3c0c82,0x3c928e54,0xbc7c13ec,0x3c04d0db,0x3b09b599,0x3b1164bd,0x3afc3242,0x3c17b4b0,0x3c556d11,0x3cc1055c,0x3cdfb316,0xb997225d,0x3b911138,0x3c93c604,0xbd04f9f7,0xbdbeec12, +0xbdef9bc8,0xbe03549a,0xbdd25122,0xbd94987f,0x3b2aad6f,0xbc4c945b,0xbc75a2fe,0xbd3eef4b,0xbccbfdbb,0xbc8f566e,0xbc37037d,0xbd15b052,0xbd23cb9e,0xbcd85552,0xbcb9f946,0xbc302cb2,0xbc7905d7,0xbc44ef84,0xbc065b8e,0xbc24bb00,0x3c13fbec,0x3c49908d,0xba66e59d,0x3c3fdccb,0x3c2c6b6f, +0x3c534872,0x3c9cc4dd,0x3c9f7335,0x3b1ced9c,0x3ae024cc,0xbc356824,0x3bc181cc,0xbb8ea6f7,0xbd2dafc7,0xbd6b6427,0xbdb26282,0xbda1c58a,0xbd84df4a,0xbd968bfa,0xbd718b0e,0xbd03e39c,0xbd0ac3d1,0xbd441a41,0xbdace2cf,0xbd5f1f53,0xbd28d467,0xbcb2463e,0xbbf8b4a3,0x3b70c826,0x3c20596e, +0xbc74185a,0xbca9f055,0xbc388957,0xbcbcda98,0xbc31b485,0x3bda2697,0x3a79940d,0x3abf08a5,0xb9e37a40,0xbbae739e,0xbb0a7d37,0x3b39297c,0xbb1aa114,0xbb223383,0xb82d4280,0x3c44a20f,0x3cda662a,0xbb9d72a3,0xba56b1e7,0x3c5489ef,0xbd3468d5,0xbd008461,0xbd0b4e02,0xbd14af5b,0xbd23da59, +0xbd0820ef,0xbcc9cf0c,0xbc1d5344,0x3a85930b,0xbc0f0a6c,0xbc642664,0xbccf39d1,0xbd086ea9,0xbd0c991b,0xbcfaaced,0xbcb708e4,0xbbe4aba9,0xbb30396b,0x395a530b,0x3b935bdb,0xbb67f875,0xbc9284f0,0xbb814915,0xbafbc3a1,0x3c04205f,0x3c219fc0,0x3b8051f4,0xbb95d1c3,0xbb18013e,0xbae66026, +0xb9ec0485,0xbbb6e2c4,0xbc2073cb,0xbc7f6ef5,0xbcadcbd5,0xbca12272,0xbc36112d,0xbc7770a2,0xbca0ab35,0xbc4ff658,0xbcdab29d,0xbcf774d0,0xbd05c31e,0xbcaaf9dd,0xbc8ac36f,0xbc496b7a,0xbca2420c,0xbcc2ecf3,0xbceb0107,0xbc9b23db,0xbc2dc043,0xbb3ee6f2,0xba4e8dbe,0xbae8edaa,0xbba3d976, +0xbb37da89,0x3a99e4e3,0xbb9fac05,0xbb4ee9f8,0x3b2f5032,0x3b8bc06d,0x3b8c1495,0x3c06e7ee,0x3c01cfac,0x3b6b9426,0x3aee2c71,0xbb8c9bde,0xbaf82b28,0xbb325c37,0xbc207ddb,0xbbca0e65,0xbc8707cd,0xbc9b4c81,0xbc58dbba,0xbcc2e7dc,0xbcf5c5d8,0xbcf3ffc6,0xbcf85569,0xbd133dc6,0xbcf653f0, +0xbcb1caf3,0xbc3cdd51,0xbb84a104,0xb9d7856c,0x3b366070,0x3be105c4,0x3c1d6ffe,0x3c947b00,0x3c3be51d,0x3c5c6f1a,0x3c010fc4,0x39c57d90,0x3bbf4330,0x3b0cd5a8,0x3b6b92f5,0xba65a27f,0xbc034e8b,0x3b73619e,0xbbebe580,0xbb2d90d9,0xbaf7d5bf,0xbba3e88f,0xbb81a35a,0xbc44c00f,0xbc253c12, +0xbc6b2cfa,0xbc63a269,0x3baea025,0xbc85f9e3,0xbca4eb79,0xbc89eeab,0xbc586d07,0xbc8fea77,0xbc92d5b6,0xbca10915,0xbc144886,0xbba78569,0xba0df047,0x3ba6eb33,0x3c57e9ba,0x3cb37a22,0x3c902b29,0x3c39f9bb,0x3c09cff9,0x3c0dc7cb,0x3c16c38f,0x3b9bc3a4,0x3c016c15,0xbaa25f2f,0xbbce0eb5, +0xbc3e44a6,0xbc1aad4a,0xbc48e464,0xbc6dcfcb,0xbc9edc82,0xbc4365ea,0xbc75e264,0xbb9fcfcd,0xbbea202c,0xbc5f8505,0xbb75d756,0x3b421e56,0xbcc038ac,0xbcf0e68d,0xbcb56a01,0xbc9b429c,0xbcad167f,0xbcb5a6b0,0xbcbb35cb,0xbcb89e73,0xbcca17a7,0xbcbfe389,0xbcaf7571,0xbc9b6502,0xbc8ec66d, +0xbc8b2d09,0xbc7eaed7,0xbc7e4598,0xbc59597a,0xbc550f63,0xbc65c043,0xbc663f44,0xbc6fc6fa,0xbcbdce0f,0xbc77f767,0x3c82082e,0xbcd89fc6,0xbca0113b,0x3c65f1cd,0x3c80390a,0x3c6862d3,0x3c544ea2,0x3c3ad665,0x3c04468d,0x3bec05a5,0xbc951b61,0xbcd58b19,0x3c461f00,0xbc78d8e4,0xbd05f831, +0x3d0577a7,0x3d0fc025,0x3cc76792,0x3cc001ce,0x3ccf3151,0x3cc7250c,0x3ce204fc,0x3ce4ce4d,0x3cda40b0,0x3ce36913,0x3ce7a43d,0x3cd869b9,0x3ccb93cb,0x3cca7eb4,0x3cd74f5b,0x3ccb0892,0x3cccc2a0,0x3cc3150d,0x3ccc7af9,0x3cbec74d,0x3cccab68,0x3cebce63,0x3c572121,0xbd2b4286,0x3d0f74ed, +0x3c8d5f38,0xbd1c73af,0xbd159740,0xbd1335bc,0xbcfc4f6e,0xbd08ab85,0xbcf645ab,0xbcb6590b,0x3c5c0b96,0x3d122566,0xbcffa95a,0x3bc1dd43,0xbcb127bb,0x3c99569a,0x3c6ab3f8,0x3cac06cf,0x3cc932fe,0x3d428147,0x3d527020,0x3d2bf95b,0x3d1ff85a,0x3d1c7ae5,0x3d12de0e,0x3cfba241,0x3d013717, +0x3d1c7ac6,0x3d0230b7,0x3d084921,0x3cf61153,0x3d06bbae,0x3cf6f1b7,0x3ce8b1e1,0x3bda8999,0x3c4f4708,0xbaac75db,0x3ca86959,0x3cfdae1a,0xba8a87d5,0x3c9912e5,0x3c37937a,0x3c5ddc33,0x3c2a9d2d,0x3c9e930a,0x3bcabcc5,0x3c2723a3,0x3c5155db,0x3bdee953,0x3b96a617,0x3b7a26ec,0x3c59c1b6, +0x3c3750a8,0x3cbbd622,0x3ccb8562,0x3d80f8f1,0x3d8a11a2,0x3d4e3d00,0x3d68ff81,0x3d54e0cb,0x3d405507,0x3d1a0db1,0x3d11eac2,0x3d3529b2,0x3d2125dc,0x3d1aecfc,0x3d0a2cab,0x3d1d3bef,0x3d100d3f,0x3ce6c2e1,0x3c9b9d2c,0x3c63b4c8,0x3ce3143b,0x3ca03fc2,0x3c6c9685,0x3cb700a0,0x3c407afc, +0x3d044310,0x3cbc5713,0x3c881cf7,0x3c5fe51e,0x3c973888,0x3c90edad,0x3c6c6fe6,0x3c1f4d84,0x3c856ce3,0xbcaca54e,0xbd00333a,0xbcce9a30,0xbc2a1f96,0x3be86541,0x3dae658c,0x3dc59a68,0x3d8c115a,0x3d74e25e,0x3d514dc3,0x3d4c09d3,0x3d16a596,0x3d09efac,0x3d5a765a,0x3d23d867,0x3d2080f3, +0x3cfcfdcb,0x3d2c2078,0x3d089c40,0x3ce08779,0x3cabe648,0x3c57a940,0x3beef47a,0x3c9303c2,0x3c922622,0x3c4e5a00,0x3cadac07,0x3c20ae13,0x3bf873c0,0x3b97311e,0x3bb6c1b2,0x3c444e49,0x3c351b08,0x3bbedb2a,0x3b9ba8f1,0xbc485307,0xbc5df3f5,0xbcc0f5e4,0xbc87c08b,0x3b52220b,0x3c4a1cc4, +0x3dc779cf,0x3dd7519e,0x3d9b0c38,0x3db004f5,0x3d981e78,0x3d76a94b,0x3d2d5e05,0x3d257cb6,0x3d646cb9,0x3d4ec6dd,0x3d417710,0x3d130e9a,0x3d4c4832,0x3d2224da,0x3cd54b46,0x3ce8bc15,0x3c441df2,0x3ca9875a,0x3c8f9321,0x3ca7d861,0x3c680013,0x3c8900e3,0x3c63fe54,0x3c47e07f,0x3c0056ba, +0x3bf20729,0x3c1486b9,0x3c437369,0x3b945736,0xbb8229dd,0xbc90a6be,0xbd53eb20,0x3d134c97,0x3d4d2d5c,0x3d0667d1,0x3d653abe,0x3d15a817,0x3d1fa5e0,0x3ce53aaf,0x3c9ef4d2,0x3c853be5,0x3ce7a72e,0xbb92205a,0xbcbecf57,0xbd54dd45,0xbc6b622a,0x3beeb566,0xbc306362,0xbbfbeb4e,0xbafef7ec, +0x3d10903f,0x3cde4a6e,0x3bff6c7d,0x3bdc514b,0x3c8d58a1,0x3ca1448d,0xbb3c6fbb,0x3c98a0fa,0x3c940850,0x3b3df001,0x3cacd579,0x3c060e17,0xbc2dcbd1,0x3b8a4f00,0xba4f1fbf,0xbcd972d4,0xbcee031d,0x3d7d6c22,0x3d4d9ab9,0x3b9880a1,0xbae8cd3f,0xbcca0428,0x3ca6314b,0x3a088a3f,0xbd23f85d, +0x3c8671a8,0x3d136870,0x3cc16559,0x3d174f00,0x3d13c028,0x3d428658,0x3d29a172,0x3d40e977,0x3d7a0e62,0x3d4c3133,0x3d38e795,0x3d0813cc,0x3a083a58,0x3ca32e5e,0x3c8eea80,0x3cc95b1b,0x3cc34cc9,0x3cbf1e7a,0x3c2422b5,0x3b998e88,0x3c140356,0x3bddf356,0x3c01c17b,0x3cd74580,0x3b8d1c63, +0x3bfdabad,0x3ca8471d,0x3d495e03,0x3caf4eb8,0x3cf7b7c0,0x3d3a7905,0x3da31424,0x3e1873e6,0x3e27cc98,0x3e181c00,0x3db7447f,0x3d51094e,0x3c8ac780,0x3c1b3601,0x3c61996f,0x3d13d0f2,0x3d907151,0x3d78962e,0x3d5e9871,0x3d2f95cc,0x3cc76a29,0x3c3356ed,0x3c2321d5,0x3b68565d,0x3b18edbf, +0x3a83bb3f,0x3d1071f3,0x3ceca5fe,0xbbe8e658,0x3c08f6e3,0xbbfb21cf,0x3ac34608,0xbb678380,0x3be32155,0x3ca723cb,0x3d1c4cc3,0x3d250b94,0x3ccc9a1f,0x3bde665c,0xbcbdb223,0x3c0c0714,0x3da25b88,0x3dff64d7,0x3e661ba6,0x3e3c1cf2,0x3e2ba647,0x3dce2714,0x3d894178,0x3d1e9b5f,0x3d69c722, +0x3d336e15,0x3d5ff1a5,0x3d7da028,0x3d312b3c,0x3cbdb88f,0x3bd8fd4a,0x3b65bdc5,0x3a016e38,0xbb1d5303,0x3b61f734,0xbb1d4d3e,0xbbd72060,0x3cf4fe8f,0x3cf2c60f,0xbc9fc721,0x3c113d3f,0x3ba2529c,0x3c0559a2,0x3b584d1d,0x3c89199c,0x3c471995,0x3d0068a1,0x3d1d1baf,0x3c843c3c,0x3b8d8461, +0xbc34508e,0x3d186241,0x3dcf3cb0,0x3e008384,0x3e23ff7e,0x3deedb01,0x3db24bd3,0x3d30377d,0x3db43a95,0x3d9f6192,0x3d225838,0x3d23e3e5,0x3c563ca2,0xbc78653b,0xbc3f1eb4,0xbb683d3f,0x3c3d4845,0x3c1dd330,0x3bcae053,0x3bccebb9,0x3b398ecb,0x3c1cd65f,0x3bb1ab06,0x3cb89d15,0x3cb53ee0, +0x3c465b99,0x3c54e7a3,0x3c3e6be5,0x3c5e37e4,0x3cbec980,0x3cc5d116,0x3c46288e,0x3c53c290,0x3c9d6896,0xbc4c4de4,0x3c1948b4,0x3c5a8956,0x3d3041c8,0x3e13dd03,0x3e06d0e3,0x3e136d84,0x3e0129f6,0x3de391bc,0x3d724cf2,0x3d952624,0x3d9e966b,0x3da4ee97,0x3d84379f,0x3d43c8ba,0x3d833bc0, +0x3d2e4660,0x3cb60f67,0x3c2385f8,0x3b01627a,0x3a8e533f,0x3c8124ba,0x3c7a256a,0x3c87d192,0x3bc269fe,0x3be01a96,0x3c108e8c,0x3bea4226,0x3b5e2c0b,0x3a003a25,0x3be2989a,0x3bbb90f3,0x3c5acd54,0x3c2a89e7,0x3cd0b81a,0x3c1e6705,0x3c7b0b33,0x3ccd61b9,0xbcc36915,0x3d8a6ff5,0x3d9ca9f4, +0x3d8bd481,0x3d7b2423,0x3d29ad79,0x3cdf63c7,0x3cbaf5bc,0x3c5df60c,0x3b02dee7,0xbba654f1,0x3b0d97ce,0x3c925288,0x3ce9b878,0x3ca75722,0x3c8cd516,0x3be5f15b,0x3c5f9759,0x3c89a19d,0xba217b3c,0xbad3354f,0x3c279aa1,0x3c69f899,0x3c6843b6,0x3c2e030b,0x3c09cb86,0x3bf07367,0x3bfe488f, +0x3c20194c,0x3c3517ec,0x3c888bc6,0x3c51987f,0x3c2a02a0,0x3c79d5dc,0x3c535493,0x3cd1b422,0x3ca62b7c,0x3ce34698,0x3d51ecc4,0x3d303a49,0x3d151243,0x3cd90f92,0x3ca533ca,0x3c49eb3c,0x3ba5f3ae,0x3b84f919,0x3c010824,0x3bd61fa4,0x3b83f1d5,0x3bed59f5,0x3c2f9fa4,0x3c110d58,0x3bf5f5ff, +0x3bd139df,0x3b77aced,0x3b6485c3,0x3b8a6d49,0xbae69150,0x3c1019e2,0x3b83ced2,0x3bb5ea89,0x3b84762e,0x3bf1cda1,0x3bb0f4e3,0x3bf7f491,0x3c3ff3be,0x3c21253a,0x3c22d9b8,0x3c6fbbd2,0x3c62e2c1,0x3c56d086,0x3c48d82e,0x3bf91846,0x3d0560d5,0x3cb7dbdb,0x3cc0205c,0x3cefc851,0x3cbdacd7, +0x3c8ac53b,0x3c1832db,0x3c948a63,0x3ca749db,0x3cc35b30,0x3c2175be,0x3a6bb33d,0xbc21bc44,0xbba6d35e,0xb9f5b7a1,0x3bf4999e,0x3bde49e1,0x3ab0eed6,0x3c0805d1,0x3c917f41,0x3c046f06,0x3c4d2908,0x3c0ac74c,0x3c051d7e,0x3c0ea4d4,0x3b781b12,0x3ca477c3,0x3c66bef4,0x3c8229c7,0x3c46e4d0, +0x3c5915e9,0x3cacf801,0x3c20a798,0x3cc84c59,0x3cd64698,0xbcb78309,0x3c82f3da,0x3c8a8ff7,0x3c86f186,0x3c4b33cc,0x3c5fbef4,0x3c81f511,0x3c8b0d47,0x3c027cef,0x3ad000ab,0xbafc33ea,0xb9ec4be5,0x3b764a11,0x3bb2153c,0x3be529df,0x3b8de48a,0x39fcc13e,0x3b15565d,0x3b04e45b,0x3bd815f9, +0x3b79d533,0x3bdeb3bb,0x3babad39,0x3bb0edd2,0x3b5ca1c6,0x3b14704a,0x3b929630,0x3c11f4f0,0x3a51334c,0x3c0d01f1,0x3c628ee2,0x3a81d6b8,0x3c675c35,0x3b4e347d,0xbc97d9c2,0x3cacf738,0x3c354b52,0x3c6e7bd9,0x3c008d0f,0x3c12efe6,0x3c1fabca,0x3c215117,0x3c0bad16,0x3c135957,0x3c23d73a, +0x3c33dd4c,0x3c25ddad,0x3c011a25,0x3b874a1d,0x3a9e8b5b,0x3ada67eb,0x3b65d97a,0x3ba81567,0x3bbe8b7e,0x3bbbd2cc,0x3bc14f25,0x3bf6e0da,0xbb8b8157,0xbcdaa5d8,0x3c275651,0xbb34e6ba,0xbd00175d,0xbd08405f,0xbcf7bc2b,0xbce496a6,0xbcf844db,0xbce86a3a,0xbcbe0389,0xba20d58e,0x3c40c4d8, +0xbcdfc551,0xbc0c2d3a,0x3bf60ce8,0xbd1bb01a,0xbcf2cb4a,0xbd04a03f,0xbccad9c5,0xbcddfe3b,0xbce34680,0xbd058984,0xbd098a46,0xbd01387e,0xbd05e1ac,0xbd05a9c5,0xbcf079d8,0xbcf3a4ae,0xbcf32233,0xbcf368fa,0xbcf4304c,0xbcfc6929,0xbcff4a61,0xbcfa0d4f,0xbce061ce,0xbd085cdd,0xbc8f7674, +0x3b865ff0,0x3d4e19b2,0xbcd2c7b6,0x3a8a176b,0x3d48cc6a,0x3d4632a7,0x3d3bf1f5,0x3d1f7e41,0x3d3ef652,0x3d32f221,0x3d160fb7,0x3bbac46d,0xbcf47c25,0x3d214588,0x3c30108e,0x3ca05d4a,0xbd23fd99,0xbce12c66,0xbcdb023c,0xbcde824b,0xbd45a79d,0xbd66e42c,0xbd48e7c9,0xbd57acd6,0xbd4ff0c9, +0xbd27edab,0xbd2c14e8,0xbd2c7385,0xbd2d84ae,0xbd2458b1,0xbd2e3faa,0xbd334e92,0xbd18a38c,0xbd10014b,0xbd314aae,0x3ba2d7ef,0xbc18101e,0x3bf7ea72,0xbb8871b0,0xbcc181b4,0x3be06942,0xbc1475f8,0x3b90379c,0xbbdb94ff,0xbb2c5e5a,0xbcd8bd48,0x3b2df75c,0xbaa73898,0xbbf9a780,0xba14e82e, +0xbc433828,0xbc901c28,0xbd05541d,0xbc896487,0xbcb6f519,0xbcce8d46,0xbd76e18c,0xbd909404,0xbd575be2,0xbd8959a2,0xbd80285e,0xbd3f0177,0xbd4a0bdc,0xbd45134b,0xbd38cf42,0xbd4a2153,0xbd477bbf,0xbd65b483,0xbd27eac2,0xbd3490a5,0xbceeaabc,0x3beb1ef8,0xbbca409c,0xbc5e5a22,0xb8eb0ff4, +0x3af6bb30,0xbc4ade6c,0x3afd3039,0xbd01c6ff,0xbc03b8e0,0xbc87bf56,0xbaee96c3,0xbbf0154f,0xbc541d22,0xbc457c62,0xbb912b77,0xbd2b3fec,0xbd2d1abe,0xbd0e384e,0xbc197628,0xbc114259,0xbc28d9eb,0xbd898a75,0xbdc5246f,0xbd8d8028,0xbdbc7acc,0xbda66f3c,0xbd5f050f,0xbd81beb5,0xbd704333, +0xbd711654,0xbd6f049b,0xbd6c18c4,0xbd86201e,0xbd37a357,0xbd2a9d6d,0xbd164126,0xbc6b58da,0xbcb5c44e,0x3ad132a8,0xbbaf7393,0x3bd7fb06,0xbc2aa8fc,0x3c0119c1,0x3c032398,0x3b0a337b,0xbbbd1f0b,0xb969d7f0,0xb92125f4,0x3b600a66,0xbbe064eb,0xbc7e1b94,0xbd001065,0xbd5d18ef,0xbcb53a3a, +0x3c483781,0xbb5e1d49,0xbc3e4632,0xbdad3d12,0xbdc13115,0xbd873af3,0xbdc7c381,0xbdbf1eb6,0xbd7c156c,0xbd88dffb,0xbd830f25,0xbd6f1e14,0xbd8c109e,0xbd8bbbd7,0xbd9850f8,0xbd563420,0xbd371e2c,0xbd0e3e41,0x3ca300c0,0xbbb20ae5,0x3a8e47a0,0x3bc7a9a8,0x3c2d45b9,0x3c1cde33,0x3c71fc59, +0x3c34682e,0x3b1ed564,0x3be2ec80,0x3b2a4137,0x3c43285c,0xbb1bad7f,0xbc8d3372,0xbc3c0e7c,0xbd1b9e14,0xbc4d71bf,0xbd2e98f4,0xbdf7a4f6,0xbdc473a5,0xbd6e4bd3,0xbd6c39b7,0xbdad9859,0xbdff37e1,0xbdb0cee5,0xbd81c24f,0xbd4bc9a6,0xbd56b905,0xbd4392bf,0xbc336ae3,0xbcead668,0xbd21663c, +0xbd442e63,0xbd3ee045,0xbd68c2a0,0xbd8bf1e2,0xbcd66978,0xbcff2281,0xbc07da21,0xbbbde4cd,0x3c02b4af,0xbbad0bdc,0x3c36b38e,0x3c830823,0x3a40defb,0x3c15150e,0x3b636999,0xbc2ac9a7,0xbb37bd7c,0xbb4f95c3,0x39f0b06a,0xbd6012bd,0xba58a2bf,0xbcc520f4,0xbd2062e8,0xbcf4e2e9,0xbd614480, +0xbd885dbe,0xbd7f0551,0xbd678bf2,0xbd57f154,0xbd7ca0e6,0xbd699e4a,0xbd0a20cc,0xbcc6c16a,0xbd0a301c,0xbd603bd9,0xbd7b21c9,0xbd90f2d9,0xbd854bf2,0xbd854d6a,0xbc29d486,0x3cc81157,0x399e5533,0x3b78b5bb,0x3b95d71d,0x3c109648,0x3c7d8f45,0x3bf47980,0xbb1d13d5,0x3b51c8a5,0xbb5b807c, +0x3b555b53,0x3cc3e9a4,0x3c0c7a9a,0xbc66ab09,0xbcffe0b4,0xba0926fb,0xbb440835,0x3b9c6b59,0x3ca99c92,0x39784e71,0xbd55abb0,0xbd881b5c,0xbdbc74e3,0xbe14cb47,0xbdb130af,0xbd7e1a0c,0xbd6da9a1,0xbd954069,0xbda9843f,0xbdb05950,0xbd9709b0,0xbd6987ad,0xbccefd9c,0xbcd22761,0xbcd59ee6, +0xbce777e6,0xbc98c2cd,0xbb4e9020,0xbb73cb1f,0x3c31f88e,0x3c3fb2c0,0xbbbbdbfd,0x3b3e21fc,0xbb29c274,0x3a3ac42f,0xbbfc75cf,0x3a7d915a,0x3b372e3e,0x3cc3def1,0x3d0c43a3,0x3c60423b,0x3c8588f4,0x3c96a2da,0x3cce026d,0x3c7fb97b,0xbcae4df5,0xbdda79c8,0xbdc04f2e,0xbde53b71,0xbe04b9dc, +0xbdb2a86e,0xbd8b8100,0xbda30d12,0xbdc7ae1f,0xbdd8e5b2,0xbdba2f5d,0xbda22784,0xbd6f978b,0xbd12c5ed,0xbce97a99,0xbd0896c4,0xbc9e309a,0xbc58c094,0xbb0dfae4,0xbbd4b1db,0x3cd456b7,0x3c97ec10,0xbc927719,0x3b85508e,0x3b15b669,0x3b11eadc,0xba79b506,0x3c0c6fa5,0xbbcdb325,0x3d090c44, +0x3d03895f,0x3cdd0c70,0x3b5c4406,0x3cc6ea39,0xbbb71362,0xbd82d164,0xbdb42b50,0xbe385bad,0xbde5cfba,0xbd8e2e0b,0xbc59af40,0x3b903a8a,0x3c9dc453,0xbc2d414a,0xbce635f2,0xbd5a60fe,0xbd7136da,0xbd991044,0xbd973a29,0xbd84736f,0xbd816967,0xbd42e875,0xbc980769,0xbb80f2d7,0xba89f075, +0x3b946656,0x3c61e107,0x3c7ca979,0x3b4d6c02,0x3c204ed8,0x3bd91494,0x3b346aa4,0x3c839479,0x3caa5d60,0x3c26dfcf,0x3c57793f,0x3adbe63e,0x3c112e23,0x3b80986b,0x3d2205e0,0x3bcd15e6,0xbdef4f5e,0xbdbdcfec,0xbd921a2d,0xbda383c6,0xbdd20078,0xbe0275ba,0xbd9c59f8,0xbd6ac70b,0xbd70ebf4, +0xbcadebe3,0xbc92b865,0xbc90d22c,0x3b91c379,0x3ba6e4cc,0x3c15fee2,0x3c93c3a5,0x3c0cf483,0xbbc48fea,0x3b85410a,0x3be11a0c,0x3b8949cc,0x3c5af697,0x3c49f09d,0x3ba14f25,0xbad42794,0xbb93a75f,0xbbaefb28,0xbb74807a,0xbbc8b9b0,0xba25649f,0x3baa7ee3,0x3ce6db75,0x3c83e743,0xb842f5b7, +0x3d548e7a,0xbd03b326,0xbd16d88c,0xbce79aa1,0xbd47152b,0xbd2db98f,0xbd3dd565,0xbd908851,0xbcf7fd4e,0xbc01d643,0x3bc69fc5,0xbc487cf7,0xbcc6f45c,0xbd089843,0xbd1d063b,0xbd0fcfe6,0xbcec8953,0xbcdcb97b,0xbcad9fa2,0x3ba98933,0x3b98465e,0xbc38bcbc,0xbb35adfb,0xba758ddf,0x3a206620, +0xb9e92f1f,0xbb24091f,0x3a408533,0x3b1c4ff1,0x3baa83de,0x3bb12b04,0x3c19a3d2,0x3c6d65b6,0x3b22860d,0x3b086b5e,0xbc00f42e,0x3c4a612d,0x3b779e80,0xbcc8b515,0xbc63bd1c,0xbc9670e0,0xbccaac1e,0xbd187b52,0xbd697bfb,0xbd04e687,0xbcb1a51b,0xbc11a4b5,0xbc2390d8,0xbc0bf3b4,0xbb8c0afd, +0xbc483696,0xbc48abc7,0xbc8f9178,0xbc8a21e5,0xbc889248,0xbc8eb5b6,0xbbc50069,0x3b668b0c,0x3a3eae4c,0x3bc33da7,0x3b7521db,0x3b2cd0f9,0x3bb34d80,0x3be4e582,0x3bd3f213,0x3add4f5c,0x3b2a27cf,0x3ba94198,0x3b5dae23,0x3bcdbd44,0x3c60b0d6,0x3c0fd48e,0x3c925c4a,0xbc3a8b36,0xbc62dbc7, +0xbc96657a,0xbcd37272,0xbcff4afc,0xbd02d8d6,0xbd0ea173,0xbcff2ae7,0xbceb5af9,0xbcb42970,0xbc5d97ed,0xbb864df5,0x3b4d03d4,0xbabbbb84,0xbb92045d,0xbc2075e2,0xbc299ce0,0xbc8b60f7,0xbc841c80,0xbc53ddd1,0xbb87d369,0xbbb8361a,0xbb1e83d3,0xbac43673,0xb9e575dc,0x3b6fcacb,0xbc76cd22, +0x3ba5e23b,0xbc072eb2,0x3b9d7d22,0xbb238603,0xbbc96452,0x3c374c50,0xbb5caf9c,0xbb9c003b,0x3cbcc30f,0xbc7d91c9,0xbc9614e3,0xbcb5b2f5,0xbcc7bec1,0xbd023de3,0xbd1d0bb2,0xbd42e52f,0xbd157ca7,0xbcdea113,0xbcaba9ac,0xbc88192d,0xbc63017b,0xbc07374a,0xbbf17871,0xbba92f53,0xbb085acb, +0xba6c9e74,0x3b590961,0xbad2f87e,0x3b559f19,0xbb8019f4,0xbb9b9e61,0xbc08ed78,0xbbef30dd,0xbc2b6a89,0xbbe69037,0xbbf398dd,0x3b01c40a,0xba1b9a18,0xbc3b137a,0x3c8f623a,0x3a102d7e,0x3b9bc621,0x3cc757a3,0xbc702fce,0xbc3a867b,0xbca614b7,0xbc86b227,0xbc98fbe1,0xbca014fa,0xbca8a8bd, +0xbca11872,0xbcabf420,0xbca24a99,0xbca6850e,0xbc9c92d8,0xbc88b17c,0xbc633561,0xbc3b9294,0xbc526ff9,0xbc65ce88,0xbc7dbd76,0xbc8797a6,0xbc87c685,0xbc950e0b,0xbc602b2a,0x39a585d2,0x3c9550e1,0xbc645064,0x387f5c34,0x3cb2ad78,0x3cd2b0f3,0x3cb694bc,0x3ca6b798,0x3cd0513e,0x3cc3a949, +0x3c8ccc8b,0xbb0e638d,0xbc67f686,0x3c978d30,0x3bf6ebbf,0xbccf27cd,0x3d01f763,0x3ca714a5,0x3d21dbe7,0x3cba99ce,0x3cbd4d2c,0x3cb186c6,0x3cc9133e,0x3cd01896,0x3ccd76ab,0x3cc5659e,0x3ccb4b8e,0x3ce1b0b2,0x3cd9bd67,0x3cd43534,0x3cce9cf0,0x3cd66631,0x3ce0be8a,0x3cdf6072,0x3ce42fe5, +0x3cc8e5df,0x3cfbd3be,0x3ac2d540,0xbca7b393,0xbd5731b5,0x3c63cc34,0xbc8a9cd0,0xbd5ae70a,0xbd578a42,0xbd4cc754,0xbd352fc7,0xbd5fa201,0xbd552b11,0xbd36716e,0xbcc51330,0x3c814e05,0xbd39571f,0xbcfed1ee,0xbd80ea76,0x3cd46082,0x3d09fcb6,0x3d019b02,0x3ccfdcb6,0x3d23546f,0x3d322e0c, +0x3d3ed3ff,0x3d335675,0x3d331798,0x3d33d3ab,0x3d28b8ff,0x3d250fd4,0x3d1cdc86,0x3d1bf4ae,0x3d1b8f77,0x3d142063,0x3d084a9a,0x3d04c855,0x3d19cbf9,0xbca85186,0xb86b0a90,0xbc173fe4,0xbbc81033,0x3c8f1123,0xbc4be596,0x3b60cd89,0xbc4dd96e,0xbb1f2d8c,0xbc0a6484,0x3cddf000,0xbbac8450, +0xbc0108c4,0xbb545890,0xbc3267a1,0xbbe1e6ed,0xbc687ed3,0x3d421238,0x3cd00471,0x3cbf74b3,0x3c49add0,0x3d090a43,0x3d25546b,0x3d286a55,0x3d07f206,0x3d1557de,0x3d4fb6bc,0x3d33d9b6,0x3d31085f,0x3d12b9ff,0x3d292372,0x3d2bb5dc,0x3d36c320,0x3d12f433,0x3d3301cb,0x3c49ceb6,0xbce4a911, +0xbb1026b0,0x3c38dafb,0xb923115d,0x3b771cba,0x3b843a50,0x3b255e7d,0x3d0d6356,0xbbc9f595,0x3c76dacc,0xbbba76f0,0x3c6bbcd0,0x3c0c5037,0x3adfef5f,0xbc5af845,0x3ccbbfbb,0xbcfb1d1b,0x3c856b88,0x3d568f38,0x3cfdaf39,0x3c6e5998,0x3d4eebfe,0x3d8fd5ea,0x3da53d3f,0x3d8a3c56,0x3d89057d, +0x3d9068fb,0x3d81f588,0x3d74e635,0x3d62c36b,0x3d667fa4,0x3d50cd31,0x3d47b61e,0x3d28e182,0x3d253469,0x3c9681ab,0x3a208ea1,0x3cbe422d,0x3bb147e1,0x3ccbd546,0x3be4b5e0,0x3c3955c8,0x3b9fcae7,0x3bfb9514,0x3b4510a8,0x3c449941,0x3a9d1114,0x3c8aa2a9,0xbc155697,0xbb2ab8c4,0x3c0f58c4, +0x3a7e377a,0x3d012ce2,0x3d209779,0x3d10cf52,0x3c29eaac,0xbc43f78d,0x3cdcd252,0x3d12828f,0x3d4058bf,0x3d13e2be,0x3d1c0cc6,0x3d9a3343,0x3d6c84a0,0x3d63818a,0x3d2369c5,0x3d58895a,0x3d6754bc,0x3d6e9378,0x3d49f977,0x3d375f7d,0x3c7abf5b,0xbd12da38,0x3c11d6f8,0x3bcfee2a,0x3c9eebfa, +0x3caf040d,0x3b991370,0x3cb05eef,0x3c831ef2,0x3c54518b,0x3b8b130a,0x3c303851,0x3c857813,0x3c2c6ed8,0x3c0aa8f5,0x3c68b44f,0xbb5995ba,0xbd388509,0xbc9e3ec4,0x3cf55ca3,0x3d0827b3,0x3d6b60ec,0x3db3eef1,0x3db0e3ba,0x3d17fcee,0x3d3d064e,0x3cd3200b,0x3d1fa8d7,0x3d26c591,0x3d0fc7d7, +0x3cb96d98,0x3c01686e,0x3af0e18d,0x3bfbcfda,0x3c9176fb,0x3d0b3a0f,0x3c95a4a2,0xbc84b66d,0x3c3e4bd0,0xbc25a727,0x3c47893d,0x3bc120a6,0x3be8ada8,0x3c41a513,0x3c625642,0x3bd4eec8,0x3c924ba4,0x3c1ffd02,0xbc239933,0xbae432c2,0xbbf576e8,0xbd1adf60,0xbb942dff,0x3bc689df,0x3ced3d21, +0xbb432a73,0xbcf46d50,0xbd8a42fe,0xbd1fb6d0,0xbd56ec24,0xbd514eea,0xbd8c8c1a,0xbd59df54,0xbc877d20,0xbd14b2f4,0xbcf2b278,0xbcb86254,0xbb309770,0x3ccc554f,0x3db03d9e,0x3d4a3a85,0x3d439ff4,0x392b62c8,0xbd0260c6,0xbb28dfb4,0x3b51cc1a,0x3c7fe1e8,0x3c9f47d8,0x3c588420,0x3c3b5410, +0x3b9d632a,0x3b3e06d5,0x3a0b897c,0x3c309afc,0x3cebd3a4,0x3aaa2b2c,0xba9ed9f0,0xbc2a5ebb,0x3aaadcd4,0x3c6d5fbe,0x3d2df892,0x3d166628,0x3cf7c9a5,0x3d326f57,0x3d834e2f,0x3d789063,0x3c97df11,0x3c90d935,0x3c061869,0x3ccc454a,0x3d0f6c3a,0x3d347c20,0x3d51ac35,0x3d294814,0x3cb3a35e, +0x3cb5bfb1,0x3b9dc5a0,0x3c42645e,0x3c6c507d,0xbb54801c,0xb9b8b271,0xbbaa4214,0x3ceadc29,0x3cb5057a,0xbb9bb460,0x3bfe0fa2,0x3b438184,0x3c0e3ba8,0x3b02627b,0x3c05cab0,0xbaa46af3,0x3d0aa0ef,0x3d124ed2,0x3cf0169e,0x3b84d17c,0x3c536e37,0x3cf6cfae,0x3d4ddd28,0x3d8dc6fd,0x3e0711ba, +0x3e0e8b2b,0x3e0ddf51,0x3d60d712,0x3d841f05,0x3d075030,0x3b8b3ed2,0x3c9629ae,0x3c4cac06,0x3cd1218a,0x3cbb5ab8,0x3c9b2c99,0x3c00c2c1,0xbb568be9,0x3bf9c78c,0xbabe3b66,0xbb9f6635,0x3c0e4c6a,0x3c0475be,0x3cba3f07,0x3ce2b31d,0xbc5f6b7d,0x3c5b2af0,0x3bd3e27e,0x3a319463,0x3c20d041, +0x3c438ad0,0x3a9ed817,0x3cd38e1d,0x3d246da2,0x3ce63ab5,0x3d0d3506,0xbc0b631c,0xbc1af35b,0x3ca0c4f3,0x3d45dc4b,0x3df668c4,0x3dd68e6d,0x3d9aacf7,0x3cab627f,0x3c5799dd,0xbbec7319,0xbb9ac156,0xbd218a19,0xbd339e7c,0xbd763475,0xbcebf75e,0xbc41e9b7,0x3b593380,0x3bd84ac5,0x3c0c25de, +0xbb78965b,0xbb098b29,0x3c118fb9,0x3b4ba3e1,0x3c8593ea,0x3c55cf63,0xb997fd4a,0x3c459020,0x3c5a30ba,0xba89b9a2,0x3c41c238,0x3c802750,0x3ca6f056,0x3c9b561c,0x3c7a3b15,0xbbfb5149,0xbb03a433,0xbd3a5427,0xbbd9b639,0x3dc69255,0x3d93a541,0x3da30df4,0x3da3b50f,0x3d9ea142,0x3d2ac90a, +0x3d2bee83,0x3d4045cf,0x3daa877c,0x3d76f88c,0x3d7417dd,0x3d3af9c2,0x3cb177ea,0x3b14f13c,0x3c2247dd,0x3c003fbb,0x3c90fbed,0x3ce97451,0x3b9834de,0x3c1779ed,0x3c4b9341,0x3c74f263,0x3c8d6717,0x3c28e574,0x3b17e6f5,0x3b6b1377,0x3b2980a9,0x3b83d462,0x3c1c7c5a,0xbb99aee6,0x3c8a728a, +0x3b777ff8,0x3b106f32,0x3ca72f7a,0xbd1f6d82,0x3c48d484,0x3d0a13bb,0x3d275053,0x3d6d423e,0x3d707164,0x3d663c7c,0x3d48f1a3,0x3cf9b5b6,0x3c73b6ed,0x3c7a9d5d,0x3c2fb6a3,0x3b3a171d,0xbc83932f,0xbbe4f5cb,0x3ba2b706,0x3c9e6dfc,0x3c525da4,0x3bfa2ae1,0xbc638e5a,0xbc3db967,0x3c016d04, +0xbbf8f780,0x3c3447e0,0x3c56a4ad,0x3b9c9225,0x3cae51d3,0x3c3344b8,0x3c82cd3a,0x3c2704cc,0x3c8860fe,0x3c919736,0x3c025f6f,0x3c63947d,0x3b69084f,0x3bcb5cc0,0xbbe64892,0x3c26e6dc,0x3d29a3b8,0x3d0ae81a,0x3d177ed0,0x3d1043ec,0x3d1e30e8,0x3d34f220,0x3d05fac9,0x3d00fe6e,0x3d02edbc, +0x3cf261c2,0x3cd68879,0x3c9bb799,0x3c996aa2,0x3c6fed9e,0x3c85a138,0x3c7bdbe4,0x3cabb4e4,0x3c90c1ce,0xbb5fdc27,0xbb040e4c,0x3c27b215,0x3b63dc04,0x3c33e1f1,0x3c2b89f9,0x3aaf5ec5,0x3b839921,0x3c1fc462,0x3c25e701,0x3c0a191f,0x3ba5ef51,0x3c425237,0x3bf3321b,0xbbce83c9,0xb9349b6f, +0xbc154ac4,0x3cb67208,0x3cb1bb2d,0x3c8eab66,0x3caf8b17,0x3cb891a9,0x3ccdcfae,0x3ce5bac7,0x3cdc17ce,0x3ccb25b6,0x3cb61e5a,0x3ca1d44d,0x3c9705c7,0x3c8b7748,0x3c855e6a,0x3c6914f2,0x3c3e3d19,0x3c48df5c,0x3cd4d207,0x3c5c8168,0x3c054c96,0x3c0774e2,0x3c5d5b45,0x3c23482d,0x3bf2facc, +0x3c07a6d1,0x3bb1ffe5,0x3cdff8ef,0xbc257154,0x3c90c2e5,0xbb26dea2,0x3c21dd07,0x3b89be72,0xbc1e4aa5,0x3a6a5712,0x3c1ab699,0xbcb6c6d5,0x3c2d1807,0x3c376424,0x3c85547b,0x3c994943,0x3cb6a43c,0x3ccf0a3f,0x3ced953e,0x3cc201ec,0x3ca5b834,0x3c8fa6fa,0x3c77917d,0x3c3ffc86,0x3c0e8f4e, +0x3c16b4fe,0x3c271138,0x3c58819a,0x3c3a662c,0x3bffec17,0x3c4ce60b,0xbb928197,0x3b1410e7,0xbb2d0878,0x3b21afef,0xba769abd,0xba0c2b98,0xbb649ccc,0xbb356d6e,0xbbc3e54f,0xbaeaa533,0x3c84931c,0xbc4f5e16,0x3af948cb,0x3ab603c1,0xbc898fda,0x3c2ac5da,0x3a2e8807,0x3ca1240b,0x3c7942e6, +0x3c81b3a5,0x3c840439,0x3c8958f3,0x3c8a66b8,0x3c95a33d,0x3c9091b8,0x3c8f0360,0x3c881ba2,0x3c80fda3,0x3c7abfaa,0x3c6d8010,0x3c7525bf,0x3c70d2c3,0x3c6c120e,0x3c7b58f7,0x3c80a05a,0x3ca82dd8,0x3b919029,0xbc639bc7,0xbced6a02,0x3ba1d05a,0xbc6708f8,0xbd081f6b,0xbd15c3b0,0xbd01755f, +0xbceddaaf,0xbd103a66,0xbd09cc1d,0xbcd782c0,0xbc295eb7,0x3ba2270c,0xbcdf65f5,0xbc9fafea,0x3ca5402d,0xbc8fa708,0xbb20251a,0xbd08326f,0xbc864c92,0xbc76c649,0xbc665b8e,0xbc7dd8c7,0xbc887715,0xbc96931f,0xbc95d539,0xbc97097e,0xbc916a6c,0xbc8e386a,0xbc909a91,0xbc99f60b,0xbc9cba68, +0xbca21dab,0xbc9bffdd,0xbc9eaa61,0xbc869acf,0xbcb9ae63,0x3c625457,0x3d013e70,0x3d2b7637,0x3b977f57,0x3cfb0458,0x3d3104f4,0x3d33b242,0x3d27f64d,0x3d15ce48,0x3d43757e,0x3d3f0b49,0x3d312bd3,0x3d11cf07,0x39e0a307,0x3d12a242,0x3d1cd687,0x3d7d549c,0xbb9166a5,0xbc510d43,0xbc01ae0d, +0xbb83d1d4,0xbc53975a,0xbcaf4809,0xbd031fdc,0xbd0ad0a3,0xbd07970a,0xbcda31f5,0xbcbe048e,0xbcbaf90f,0xbcddc6f9,0xbcde8a66,0xbce4953a,0xbcd0a60d,0xbcc0dcb3,0xbcc6e616,0xbcfe2f9f,0x3cdb786a,0x3c280802,0x3c945684,0x3cbf734b,0xb9cbcf79,0x3c6b438e,0x3c19b843,0x3cc5be1d,0x3c3937dd, +0x3c879cd3,0xbc9cfbf0,0x3c84319f,0x3c850084,0x3c485cac,0x3ca2ab61,0x3c3fe6ad,0x3ce31b5d,0xbcfa278f,0xbc688618,0xbb3f8ee0,0x3bce24b6,0xbbc4ef2d,0xbc757772,0xbd053aea,0xbd0d99a1,0xbd0e9515,0xbce4d642,0xbcaf0cc9,0xbcbafcff,0xbcf068ec,0xbd097ec6,0xbd0bfeac,0xbd0c4075,0xbcdf4815, +0xbd150f8e,0xbbf86f9e,0x3d1704ec,0x3c41e143,0x3c3e042b,0x3ca7ae6f,0x3c37b422,0x3bfe8f86,0x3beacb77,0xbca6b753,0x3cae9fbf,0xbbe4618e,0x3c8f514c,0x3bc2ae2b,0x3b32705c,0x3b9b579e,0x3c89ba7c,0xbc59cd0c,0x3d4b17ce,0x3ca162bd,0xbc2423de,0x3c8c1215,0x3cecda4d,0x3be74496,0xbcb72eb7, +0xbd56b403,0xbd823f35,0xbd6e4d91,0xbd189b05,0xbcdd39d5,0xbcbca4fb,0xbd1912fb,0xbd291046,0xbd2a2f6c,0xbd152091,0xbd15ece3,0xbd1e2af0,0xbcb81e1a,0x3b1fcd2b,0xbc6a6644,0x3c7cc0b1,0xbb84920c,0x3c672931,0xbc1759c7,0x3c8f4820,0x3be4cd36,0x3b994e77,0xbc08e19b,0x3bb2c5a3,0x3c1189cb, +0x3c95dc3e,0x3bef8276,0x3c139e1f,0x3b97f2e1,0xbbe843d2,0xbc350e7a,0xbcd95992,0x3c926391,0x3d0aeda3,0x3c9a3fef,0xbb112855,0xbd1b082d,0xbd3fd4ba,0xbd43c9d2,0xbd076887,0xbc981737,0xbca9cddb,0xbd056814,0xbd32887e,0xbd4bccd6,0xbd3f24da,0xbd2d7b4a,0xbd2fffaa,0xbcd23a2d,0x3d1b0893, +0xbbe8f869,0x3c6da475,0x3c03bdbc,0x3af6dc2d,0x3a595434,0x3b0b02a1,0x3c151633,0x3ab8887b,0x3ba3232b,0xba4f0e0f,0x3c826f5b,0x3b3f0187,0xbb4f4f81,0xbae763f3,0x3c813888,0x3cee2ec7,0x38e57237,0xbd9fe768,0xbd82c40e,0xbdc23252,0xbd475fc1,0xbd3239d8,0xbd5bca95,0xbd8f1d4c,0xbd8e1ced, +0xbd77f426,0xbd628064,0xbd06266f,0xbc8c0749,0xbc05c215,0xbbbff1af,0xbcc95993,0xbccfb104,0xbd109ab4,0xbcd5f1ca,0xb985a7e5,0xbca0953c,0x3c0afc7a,0xbba1ce4d,0x3c74f47f,0x3c5bc1f1,0x3c4f5ed5,0x3c1170f5,0x3b8da76c,0x3c686c09,0x3ba8556a,0xbaf67001,0xbbfaa83a,0x3bcb0e25,0x3cd37102, +0x3a9d3559,0xbc6010fb,0xbd2de45c,0xbdc810ed,0xbd7f9551,0xbd099d43,0xbb68e6db,0x3b2893e4,0x3b849b31,0xbce928e2,0xbce17890,0x3bfabe8c,0xb9cd2a7e,0xbbb6455a,0xbc32342b,0xbcdc7494,0xbd1ea04f,0xbd648ba9,0xbccbcdd3,0xbd0473e6,0x3bc01368,0x3cae222e,0x3b5dd04f,0x3baad07a,0x3c0dbf90, +0x3c0b68cc,0xbad8b203,0x3ba024ca,0x3ba363a9,0x3b8eca2b,0x3aa24602,0x3ae73e7f,0x3c6af6fd,0x3c8095d3,0xba1b4278,0xbcc2e226,0xbbba0db3,0x3d02f762,0x3c7a907f,0x3cc3050a,0x3cb4e1a3,0x3bf0cd56,0x3cc5dec4,0x3b04b62a,0xbd74fe53,0xbd99687a,0xbda2bbde,0xbd0154d4,0xbd3d594b,0xbd1fb620, +0xbd1def6d,0xbd3c5dbd,0xbd095eb3,0xbcb091eb,0xbc74f0d9,0xbcc9c18d,0xbc6ff354,0xbb775ca2,0xbab26c39,0x3c657293,0x3c8d4dbe,0x3c8fcd5c,0xbb9dd2d9,0x3bf703c2,0xbb9297fc,0x3b153e9a,0x393361fb,0x3c18e47d,0xbbc5e026,0x3cc5e69f,0x3d0bf6ea,0x3d140409,0x3d20abf4,0x3d31db66,0x3d1e04b7, +0x3d849381,0x3d834058,0x3cba1ff1,0x3d008c3f,0xbae938e6,0xbd6d9e9a,0xbd4073ca,0xbd2b5d78,0xb9e49c6f,0xbd492423,0xbd50ace0,0xbd60f0d7,0xbd5ca0c3,0xbd34d609,0xbca63461,0xbca40dea,0xbcf9ef06,0xbc211ccd,0xba236597,0xba655ffb,0x3b39c67e,0x3cdb63a4,0x3c55bcf0,0xbb06be75,0x3b6c1721, +0x3b9be8d9,0x3be5719f,0x3ae74ed7,0x3c517f58,0x3b42d148,0x3cfe438f,0x3cee5365,0x3d3958de,0x3cd018aa,0x39cd05fd,0x3c11f6b7,0x3c181882,0x3ccbde36,0xbb463618,0x3d0cdecb,0x3d3797e5,0x3cbec9be,0x3d43ffae,0x3d51bfe9,0x3d3b3f5d,0x3c917310,0xbbe90a40,0xbbec3b96,0xbd02dfd5,0xbd2a64eb, +0xbd3d47fd,0xbd127901,0xbcf25bcd,0xbc152be3,0xbb3cf563,0x382fdcab,0x3be8acab,0x3be96aca,0x3bb6bd22,0xbbf7d2cb,0x3bae221e,0x3be538e3,0x3ac23d97,0x3c16bc9d,0x3c85082e,0x3c9b36ba,0x3ca12e41,0x3c75da21,0x3be21d89,0x3b5a8e85,0x3d99be83,0x3d6a5059,0x3954eedd,0x3c2fcc81,0x3c2fec26, +0xbbc71030,0xbcd8af53,0xbcfe7cfc,0xbb663ae5,0x3cb809e8,0x3d5fcc50,0x3d4c5eef,0x3ccfd865,0x3c901c7a,0x3cc4606c,0x3cb10ec9,0x3c5b3a13,0x3cb04a3c,0x3c567ee7,0x3b9b97c9,0x3cca5867,0x3c4772a6,0x3b87bdfc,0x3cadfa17,0x3ca9fbbf,0x3c71935f,0x3c6451d0,0x3bca6c00,0x3bf1f611,0x3c2e6147, +0x3bfca6c4,0x3c7de36c,0x3c7310ce,0x3cd160b0,0x3d0a09e3,0x3c0b7fe4,0x3d13ad49,0x3c97d45c,0x3a742314,0x3b94666d,0x3c10ad25,0xbbdcc302,0xbc88ee9d,0xbcbbac6e,0xbc9f6d82,0xbc3533b0,0x3c2924c2,0x3a40e00a,0x3baf55a2,0xb9edcd4b,0xbc0d90ae,0xbc4e12c1,0xbaebb1f4,0xbba5d680,0xbb27091e, +0x3be8112f,0xbaa60a7f,0x3ad09ec4,0x3ca6e5de,0x3bc86516,0x3c102d87,0x3c775994,0x3b3a4a59,0x3c3abf24,0x3bb53ce2,0x3c855e3f,0x3c96d8ac,0x3c751667,0x3cb6930a,0x3c54a662,0x3c7984ca,0x3c8d9c54,0x3d034fef,0x3cab0902,0xbb4938b2,0x3b841362,0x3bb6e160,0xbaaa56dc,0xbc242055,0xbcae22e7, +0xbc91a7aa,0xbc44a619,0xbabf61b1,0x3b6ee44a,0x3bb61a9a,0x3ba4d77e,0x3b93a1a6,0x3bf63fe2,0x3c64a079,0x3c2356b0,0x3c0a0835,0x3c4b3b85,0x3cb74e95,0x3c8d759c,0x3c437a5e,0x3c83fa6c,0x3c06c42f,0x3c22e579,0x3c82d665,0x3c6351a8,0x3c21a9ca,0x3c402f0a,0x3c3302a3,0x3c642d96,0x3c28fcd6, +0x3c596641,0x3cb60daf,0x3cab0340,0x3cc7f0fe,0x3ba891f3,0xba2a37d4,0x3b64f390,0xbb02f97d,0xbb2bcdf5,0xbb5a7916,0xbbb1bc68,0xb9ac4c9d,0xbaf3f657,0xbb511543,0xbb33efc1,0x3ab92a77,0x3ba0aa67,0x3bbd92cc,0x3be38db2,0x3a2f92ce,0x3bb7c933,0xba840e0f,0x3c3c4139,0x3c88085e,0x3c3d7322, +0x3c1d0f80,0x3c30f615,0x3c67a00a,0x3c79781a,0x3c47fff2,0x3b9fe1af,0x3cde8d9b,0x3bb9f944,0x3c891a2f,0x3be00e8d,0x3c2af179,0x3c9232c9,0x3c3f8d81,0x3c07d1a5,0x3c8443bf,0xbaf148e0,0xba19765d,0xbbb0b949,0xbbe2369e,0xbc3cd7e3,0xbc81d4f3,0xbca61989,0xbcb515cf,0xbc9b568f,0xbc8498ea, +0xbc7223e9,0xbc71cdcf,0xbc4efeb3,0xbc64ad7c,0xbc452027,0xbc2eda18,0xbc208092,0xbc2df2d4,0xbc13555d,0x3c27d608,0x3c0f242b,0x3c7cab2c,0x3c67623c,0x3c875984,0x3c8f1a9e,0x3cb00fb7,0x3cb5ded8,0x3ca7f87c,0x3cad1b1d,0x3c19067e,0x3cc9f42a,0x3ca40a86,0x3c565461,0x3c9c3420,0x3c148d98, +0x3c7e1969,0xbb177298,0xba5869cb,0xbab738e3,0xbafb557b,0xbb033e46,0xbac7ee54,0xbab1d574,0xb9e398f1,0xbad7978b,0xbb420a72,0xbb4f32c8,0xbb497306,0xbb483f28,0xbb1ac653,0xbb237704,0xbb22d7df,0xbb124c38,0xbaba1970,0xbbbcff66,0x3c430cbb,0x3cc23b49,0x3cb3e699,0x3c5b5729,0x3cd35999, +0x3cc7238d,0x3cd16521,0x3cba251c,0x3cb1a429,0x3ccb3974,0x3cc6715d,0x3caab85b,0x3ca8ad2d,0x3c32b9b3,0x3ca116a0,0x3ccc9bc9,0x3b6302c2,0xbc006adc,0xbcc5527e,0x3bbdae3d,0xbb84fdbd,0xbb9d9ff6,0xbb8db3f0,0xbb8a1564,0xbb7ddf92,0xbb71152b,0xbb8b88ab,0xbb8a68cb,0xbb118e80,0xbae3428d, +0xbabf4d62,0xbafd78bc,0xba9eb96c,0xba814d80,0xb97124d4,0xba5e3ff9,0xbb1776e7,0x3b243121,0xbcddc14c,0xbd07e953,0xbc84834d,0xbcafacd5,0xbd09ad8c,0xbca6615b,0xbcaea8fc,0xbca11425,0xbc9a7d10,0xbcd64524,0xbcd70763,0xbcd23934,0xbd188e10,0xbcb2715a,0xbc9cfb81,0xbd1d7713,0xbd1542b4, +0xbc01c5ab,0xbbd71af2,0xbc32e92c,0xbc375566,0xbc8269d2,0xbc70ecd9,0xbc2779c9,0xbc0dfad5,0xbbbf8c16,0xbb1644e2,0xb9c14138,0xba89335a,0xbb92519d,0xba9791bc,0xba8f257f,0x3ad08a90,0xbb2980e2,0x397a6deb,0x3c0a1050,0xbcdceffb,0xbc6f1a8f,0xbc2d221c,0xbcd4e3cb,0xbc5f1979,0xbc51b4e1, +0xbc851d1c,0xbcc8bfe6,0xbc9405cc,0xbcb38224,0x3b54fac8,0xbc41a677,0xbc956a61,0xbca1973d,0xbcbdcf95,0xbc9402e4,0xbd23d086,0xbc0a163c,0xbc34e588,0xbca3c15d,0xbc9b1059,0xbcd558c1,0xbcc13292,0xbc7b9966,0xbca47b79,0xbc81f216,0xbc0217fd,0xbb7d15d6,0xbb06a9b3,0xbbe1fe0e,0xbac76b79, +0xba86b622,0x3bd238c7,0xbb967b0a,0x3bd8c50a,0xbc312ab4,0xbd22e75b,0xbc43ba21,0xbc4ab207,0xbc8445e7,0xbc01b251,0xbc4cba67,0xbbe23d04,0x3add284f,0xbce1bf12,0xbb868d1d,0xbc9da32f,0xbb23d732,0xbc34cced,0xbc889bbc,0xbcd4e996,0xbc88083d,0xbce8c789,0xbc1bf014,0xbc503111,0xbcb79edf, +0xbcc4c199,0xbd36da88,0xbd279710,0xbcbedf3e,0xbcb15a80,0xbc3855e7,0xbb8a2161,0x3a4a35c7,0x3a853975,0xbc3258b9,0x3a52c270,0x3b23348d,0x3c2aee05,0x3acb4ca4,0x3c248eef,0x3b61f839,0xbc56fd16,0x3c530a4f,0x3b56f14b,0x3c33c092,0xbb9d2489,0x3c089048,0xbbf4deaa,0x3b74e4e3,0xbaa30368, +0x3bc4f99c,0xbb42bf73,0x3c18ebc4,0xbc21a564,0xbbcf78d1,0xbc619a98,0xbc43b563,0xbcf7d600,0xbccea90f,0xbc4abacf,0xbd09cd9e,0xbcf32cbd,0xbd4b779d,0xbd3218a9,0xbce1b03a,0xbd1c82cf,0xbcf02e17,0xbc533d34,0xbb7ceae0,0xbb3e48cb,0xbc482424,0xbb3c064e,0x3a8ad7df,0x3c6af16b,0xbb8fd744, +0x3bf97144,0x3b9d2ace,0xbd4c0fdf,0x3bc372a2,0x36fcdde8,0x3c33d4f8,0x3c4c2c4e,0x3bb17d53,0x3c85ecae,0x3c46d690,0x3bc4d84b,0x3afdf2ce,0x3bab8e1f,0x3c45f14f,0x3b18aead,0xbbcde3bd,0xbc80d39e,0xbd13e0c5,0xbd5a16da,0xbd8b550c,0xbd00f58a,0xbd29f38d,0xbd4ef15f,0xbce74fd6,0xbcc8a78e, +0xbca1b539,0xbc182545,0xbaf25343,0x3bb6ed24,0x3ca17181,0x3cc9c8bc,0x3cb3edee,0xbc0d9561,0xbc95169c,0x3d1b2392,0x3ccc8086,0x3ca497f1,0xbc006fec,0xbc84e145,0x3c823911,0x3acf1eab,0x3c2673f8,0xba17c449,0x3c9c6028,0x3c216a6d,0x3c1ec547,0x3bec5173,0x3bd352c3,0xbbbcddc3,0xbc08fa8a, +0xbc83061f,0xbcedf509,0xbcd72325,0xbd1327bd,0xbd1c46b9,0xbc7604ec,0xbcdfe352,0xbd249e22,0xbd0564d0,0xbcfaca62,0xbcd1d2e2,0xbc99e2b5,0xbd084c30,0xbd0f5e9f,0xbc702fe5,0xbd08869d,0xbd1916de,0xbd3b7209,0xbcb986d5,0xbc5ac0e1,0xbc9985da,0xbcc6df08,0xbbaeec1b,0xbcbddea2,0xbcbbc779, +0xbc17b1f5,0x3b3fa8c6,0x3c5ffb80,0x3c88c7e2,0xba8e9ea9,0x3ae2a601,0xba612a27,0x3b403ea0,0xbb43badc,0x3a4b1892,0xbae0e494,0x3ba5103f,0x390c36fe,0xbce65a0a,0xbcf38e75,0x3b9a1af5,0x3cdbf7b4,0x3cfc1977,0xbb21d50e,0xbcbfd80b,0xbd38bb06,0xbd5f01f9,0xbd3cebaf,0xbcf76128,0xbc86bbc0, +0x3b8e927c,0xbb9f4781,0xbc74feb9,0xbce382e3,0xbcca26f6,0xbcc441bd,0xbca1a3c8,0xbc77f77f,0xbb9f11af,0xbbe340eb,0xbc862b34,0xbb4bd663,0xbbb82f8f,0x3c7ed4bc,0x3c23631b,0xbb1c8f5e,0x3b1549d5,0x3b38755e,0x3ae530da,0x3a6661a8,0x3ba651ff,0xbc23c1bf,0x3c87315c,0x3cad4259,0x3cd25ef2, +0x3c622ca9,0x3cf61172,0x3d18c718,0x3c80bcc7,0xbc171e43,0xbd25f751,0xbcb3767a,0xbc8a033b,0xbc93ac61,0xbc485c02,0xbc3631dc,0xbc04bd6e,0xbc562151,0xbce34e1f,0xbd29f2e4,0xbd340712,0xbd2b582f,0xbce9ac52,0xbc8ba266,0xb9ff9475,0xbc521f31,0xbc99722b,0xbb32bcf1,0x3c0b4fea,0x3baeb15a, +0x3c23052e,0xbb1b82e8,0x3bb9dadc,0x3b4b8d96,0xbb0cd7f7,0x3be89e4e,0x3c174df9,0x3badca14,0x3c92d149,0x3ce4433a,0x3d02bbd7,0x3d1381dc,0xbba7f97d,0xbd107efd,0xbd8be01a,0xbd73d85a,0xbd260cfd,0x3b00f6c1,0x3c5f6e7d,0x3c41be81,0xbd14b39f,0xbd81dcfa,0xbd5a14b6,0xbd75820f,0xbd3c83a4, +0xbd22f31d,0xbd16a455,0xbd07c42e,0xbcc6d3e2,0xbcbf27ce,0xbc3b8cc9,0xbc731775,0xbc07df33,0xba88f469,0x3a97bd45,0xb9b4437b,0x3b2bebda,0xbb8fa884,0x3b051c46,0x3bb16d16,0x3b8c640c,0x3b49066b,0x3c0d3f67,0x3ca319fd,0x3ca1e9a5,0x3c45a0e5,0x3b96318c,0xbc00fd80,0xbcf45707,0xbd1bfb54, +0xbd140404,0xbd5948c8,0xbd1ac8ec,0xbd0c8016,0xbcd54cd3,0xbc2c7011,0xbc1eac7b,0xbb959c04,0xbb39644b,0xbc295444,0xbc584f70,0xbc9dc71d,0xbb7e3c34,0x3b8f406b,0x3c10f5d1,0x3b8f8c15,0x3b39ea9e,0x3ba24d00,0xbc699e56,0xbbe9d35d,0x3c558243,0x3ca4f977,0x3ca3e37d,0x3b81b924,0x3bcf7c78, +0x3c1c8f4d,0x3c35b7f3,0x3bcbc327,0x3a4673bf,0xbb8c77ae,0x3bc8911b,0x3c3a707b,0x3a5c18f6,0x3c810041,0xbc02fe28,0xbd0d8175,0xbcdc4347,0xbcabc577,0xbb32dc9a,0x3a8d5707,0x3b7cfa29,0x3be9b37d,0xbca08616,0xbca745b2,0x3a0a69ba,0x3ac81748,0xb989781a,0xbbff3154,0xbc609c16,0xbc54b7c8, +0x3a3a76f0,0x3c09bbae,0x3c232d77,0x3bbaa2b5,0x3bccea68,0x3c26cfa1,0xbb367b24,0x38e73dc8,0x3a9810ec,0x3b2fac39,0x3c6dee61,0x3c3ee64b,0x3c04bf2d,0x3c48306c,0x3c5a0c75,0x3c0f2159,0x3c05bf71,0x3bceb613,0xbb2d4de1,0xbc86ea3f,0xbc6420aa,0xbc198d50,0xbadbddb2,0xba8fa981,0x3bf7169b, +0xbaa586ea,0xbba21c5a,0xbb34c0ba,0xbc1df6a2,0xbc214304,0xbc2382e1,0xbb281d01,0x3b463652,0x3bc8d29c,0x3bbfbf5d,0x3c1745cf,0x3c8e2a77,0x3c88a805,0x3c8262ca,0x3c2586f2,0x3b23228b,0x3b7c186d,0x3b725914,0x3b639687,0x3c05c6e0,0x3c427792,0x3bb8d12f,0x3c04f4f2,0x3c129d81,0x3bffe5e4, +0x3bd3cb27,0x39b42044,0x3b382131,0xb9acdd72,0xbc29f12a,0xbbda5852,0xbc20a828,0xbb854e4b,0x3b3ee53f,0xba55af8d,0xba11138e,0xbafe556f,0xbb5f9ea8,0xbc1a292d,0xbc26e0e6,0xbc5be102,0xbca6c350,0xbc212ba3,0xbb52bb48,0x3b29f082,0x3bcab824,0x3c0d5e3f,0x3c1b2325,0x3bc304d3,0x3c4a4d54, +0x3b5a5d69,0xbab57f0b,0x3b86c8dc,0x3b0edad5,0x3bd142d5,0x3bd7f763,0x3bc063d7,0x3c12e0e8,0x3c000222,0xbb9bd0a6,0x3bd1a92e,0xb8e7232e,0x3be3c134,0xbb59d8f0,0xbbd8533f,0xbc173dda,0xbb787e23,0x3af21a9d,0x3bf5aa99,0x3ac550cc,0x3a069011,0xb9c7440f,0xbb289339,0xbb51d47f,0xbaf9d0ea, +0xba0b2316,0x3ad564a3,0x3b85b39c,0x39e822c1,0xbba562be,0xbc19d8fd,0xbc2ce612,0xbc13b2ef,0xbbe30ad1,0xbbb91705,0xbb5bc2f0,0xbb728b20,0xbc12da96,0xbba29318,0xbbc300a0,0xbb85b5b5,0xbae5db04,0xb97f1cae,0xba1276da,0xbb1e0378,0x3b1a69c4,0x3b4c140d,0x3c4ec1f7,0x3baa1544,0x3b8a04c1, +0x3c202aba,0x3bd905bf,0x3aa57c4a,0xbc3fd609,0x3b7a2f9e,0x3b67dce8,0x3b5de9ec,0x3b4afbc7,0x3b5b30d2,0x3b3ef9d1,0x3ae6cc03,0x3aa7edaf,0x39db9908,0xb97fd9bf,0x3a1f4b9f,0x3b383a41,0x3b8a9ee6,0x3bb122cb,0x3baa10b3,0x3ba8438b,0x3b9dfcc7,0x3b99e5ad,0x3be2b28c,0xbbf7dbb4,0xbc4399c7, +0x377527a9,0xbbfe571f,0xbc463df9,0x39b7219b,0x381c6983,0x39bb05f7,0x39d3c173,0xbb1e9f4f,0xbb71b46b,0xbb146d04,0xbc314606,0xbbf55dc0,0xbaf784ae,0xbc54e686,0x3b6bee0d,0x3caa6281,0x3cd7ff48,0x3bdd088f,0x3c3680b9,0x3c5b7b82,0x3c699cd1,0x3c8141f6,0x3c8192d5,0x3c6dccd3,0x3c54f703, +0x3c4e06ba,0x3c50e8ea,0x3c51ed2b,0x3c539c18,0x3c5f284c,0x3c52ea24,0x3c5b7612,0x3c643807,0x3c617821,0x3c58aeba,0x3c595942,0x3cdb5efa,0x3cae2b33,0xbc601649,0x3ce3388d,0x3cbff89a,0xbc33772a,0xbc26ffef,0xbc2c5812,0xbc01e75d,0xbbcc43f6,0xbb90e4d2,0xb7f43f99,0x3cb4e884,0x3cddc1eb, +0xbc21b1c7,0x3c91044a,0x3bf341dc,0x3c7d9adb,0x3c1abcc1,0x3c7ccdf5,0x3cafce82,0x3d0b4b14,0x3d107466,0x3cf3c8e9,0x3cc038ad,0x3ca4c82c,0x3c9b0c93,0x3c8fe702,0x3c9493a9,0x3ca38a76,0x3c8113eb,0x3c8d846e,0x3c9914a2,0x3c957603,0x3c879d49,0x3c8b1771,0x3c95d2fa,0x3c90c310,0x3c13d8ab, +0x3cc41d7d,0x3cc16ea9,0x3be758d4,0x3c8ae803,0x3c80a964,0x3c6ccd79,0x3c702216,0x3c296b6a,0x3c45fa8b,0x3c5c5ea9,0x3c6445d1,0x3c3397a9,0x3c206291,0x3c83d6b8,0x3b0f87c4,0x3a4f461e,0x3c5920ad,0x3ca99f4b,0x3d2ed3ff,0x3d437f0d,0x3d0af809,0x3cc47c9d,0x3c92f2d8,0x3c96f39a,0x3c936fd1, +0x3c9710a3,0x3cafb35d,0x3c99c532,0x3c9d9e0a,0x3cc54fbb,0x3cb878ee,0x3c99e7da,0x3ccad7a1,0x3ce56816,0x3c9de40e,0x3cdb9c95,0x3caf9dcf,0x3c57c5f4,0x3cbc04b6,0x3c01eb27,0x3c6adc0a,0x3cbbc570,0x3c22a3cd,0x3c812eea,0x3c745e1e,0x3c718972,0x3c470b67,0x3bcc2683,0x3c2881fa,0x3bcc36ef, +0xbb8998b6,0xbc1f783f,0x3b0bfe7b,0x3cb54fd2,0x3d875e3d,0x3d9d17fe,0x3d712eb4,0x3d1ea105,0x3cc8d555,0x3cab30ed,0x3c9ef6fd,0x3ca5e0d0,0x3cd9355f,0x3c90524a,0x3c95e6b3,0x3cc94051,0x3cb7ebbf,0x3c926b13,0x3cc5e09a,0x3cc41183,0x3c8427f9,0x3c8e63a5,0x3c410227,0x3c6a71bb,0x3c4084f0, +0x3c7f7eed,0x3ba6f5b9,0x3b901d40,0x398049e6,0x3bef3d84,0x3c6ac153,0x3c2089b8,0x39fe10ac,0x3a70f217,0xbb95361e,0xbc068bc3,0xbc35a070,0xbca71493,0x39c9515e,0x3c1d9ed0,0x3d8aa66c,0x3d99c686,0x3d531cd3,0x3d05fb0b,0x3c893f6d,0x3c7c42e4,0x3c7ebd94,0x3c92060e,0x3cd32b2c,0x3cbdfe86, +0x3cce2d25,0x3d032739,0x3cf79dc6,0x3cc69041,0x3cc641bb,0x3cf187f0,0x3c53a1f9,0x3cc42f23,0x3c53e5b3,0x3c045cb5,0x3bf4964e,0x3b85f86f,0x3c126594,0x3b6fac80,0x3b77ba57,0x3af61e7f,0x3c0ddeca,0x3b68df5a,0x38b9edf8,0xbc8448fd,0xbc3265e2,0x3cd98ba3,0x3d2b8200,0x3c43124a,0x3c9028c3, +0x3c8b3dcf,0x3ca0065b,0x3cd11406,0x3d0d64ab,0x3cb0c92b,0x3b7c3ace,0xbc8fc995,0xbc6ccfef,0xbcd2cbc2,0xbd251f70,0xbcab21ef,0xbbc70b03,0xbc19e47e,0xbbaff5bb,0x3ad62aff,0x3ca7fd01,0x3cbd6c68,0x3c3805d6,0x3ca788f9,0x3c2636df,0x3c5f9f31,0x3c9f84b1,0x3c4e3157,0x3b9581df,0x3b08e1e6, +0x3c087818,0x3b8135c6,0x3c23294e,0xbbb0bf31,0xbabc5c4c,0x3b4d33ce,0x3ceeda7b,0xbc82337f,0xbcff7402,0xbd4a7156,0xbcbc3113,0xbbb78f71,0x3d56377c,0x3d673fea,0x3d10c3a4,0x3ad76a7b,0xbc6db09f,0xbc52e08f,0x3c3ff985,0x3ceabc06,0x3cb31ac4,0x3d032d03,0x3cf77d41,0x3d18efdd,0x3d0231fb, +0x3cc2a39e,0x3c971c5f,0x3b98c4be,0x3c80c4e3,0x3c78f577,0x3cb1b4bc,0x3c9dd339,0xbac7b93f,0x3a7c25d4,0x3b092708,0x3bd82c5f,0xbb6eca5b,0xbb7d1d86,0xbb0cd06e,0x3c5afe67,0x3c512e1e,0x3a57c7f3,0xbb8fb075,0x3d09d279,0x3d43ad1a,0x3d1fe62a,0x3d15558d,0x3d724307,0x3d6a5ce2,0x3d20833c, +0x3d5f1941,0xbcb8ed61,0xbd208c40,0xbbadda1b,0x3bf43d02,0x3cc84c31,0x3ca5322a,0x3c88013d,0x3c570f7e,0x3c79877f,0x3c848842,0x3c26f06d,0x3c01257b,0x3bf75805,0x3b7026ee,0x3c90d618,0x3ca47eeb,0x3c74dbaf,0xbbd771a0,0x3b95e8f0,0xbbbd630f,0x3a5021d4,0x38160f88,0x3bd29589,0xbbf4ece6, +0x3ca39374,0x3ccb7266,0x3d2cdbe1,0x3cd08f22,0x3d29d5cf,0x3d66b2d8,0x3d82dfb4,0x3da75c5d,0x3e08da43,0x3daf7b60,0x3d9e6e90,0x3d8417b2,0x3a83e5ae,0xbc6a7a29,0x3ca748bf,0x3ce474fe,0x3d2be5e9,0x3cb8fc5b,0x3c929510,0x3afc0609,0xbc2a49f1,0xbad783e2,0xba726dce,0xbaf8837d,0x3c16f298, +0x3b9ec350,0x3cbb1c0c,0x3c59cb42,0x3be05b53,0x3b82576f,0x3b0b8b92,0x3b835793,0x3bc53593,0x3a1c2688,0x3c1a89d7,0x3c244098,0x3ca7c640,0x3ce3250d,0x3d31edab,0x3d3192a0,0xbc7a0c9e,0x3c8aaa75,0x3d6bb944,0x3dbe0f76,0x3e13bd1a,0x3e07e336,0x3ddc20a8,0x3d237339,0x3c95b07d,0xbbb1e3b0, +0x3c01e0ff,0xb7e41170,0x3bd08a9b,0xbb7f19b1,0x3c399a6a,0x3c4b1362,0x3bfb96eb,0x3b3bae59,0x3aa17487,0x3bba6122,0x3a771a5a,0x3c095930,0x3c8ecbf5,0x3c40bee0,0x3c3baf9b,0x3c057828,0x3b376867,0x3b5ccc82,0x3c27de61,0x3b93fcd5,0x3c07ee48,0x3cae0f71,0x3cbd3121,0x3cfc3b8b,0x3bef1d52, +0x3c20687d,0x3d2aad1f,0x3d58172a,0x3dcbd370,0x3da50b1f,0x3d787fcb,0x3d8d9cf9,0x3d8a52ce,0x3d9c8e57,0x3d5a3a34,0x3d8163ab,0x3dbdd55c,0x3d917792,0x3d336d38,0x3d16915c,0x3c339bc5,0x3aaedf8b,0x3ac62016,0x3bc85b72,0x3bdfeb35,0x3c76826d,0x3c968fc5,0x3c87495a,0x3c0c0d06,0x3c94cc79, +0x3c86b9bc,0x3c29d9e4,0x3c84beb6,0x3c68c30b,0x3cc6eb02,0x3c788058,0x3c777e36,0x3c682061,0x3c845dab,0x3c1107cf,0x3cd17034,0x3cc031dd,0xbc0d598c,0x3d100618,0x3d0d7a16,0x3d1087e7,0x3d021016,0x3d182041,0x3d0b7b1c,0x3cf75161,0x3be8bbed,0xbbae3080,0xbb36c756,0x3c80012d,0x3d155ff2, +0x3d3bbaeb,0x3d496279,0x3d296764,0x3caa30ca,0x3c8d07f9,0x3c7d674d,0x3bfc066a,0x3c22d2ae,0x3c8c81be,0x3cdf2b61,0x3c689117,0x3c23fabd,0x3bf80e86,0x3bd17c5f,0x3c4db5d2,0x3c890582,0x3c9a5bf6,0x3ca0ba02,0x3c855cc3,0x3cad9c3c,0x3cbcca7b,0x3cc1eb94,0x3cc3cdc5,0x3c8a2fb6,0x3c47c828, +0x3ccd033c,0x3cc31fd5,0x3cb3cf6a,0x3cc9d5af,0x3cd03239,0x3cec32c3,0x3c8940c0,0x3c5fa127,0x3c33186e,0x3c87c517,0x3ca0cb31,0x3cc5605c,0x3cdf2316,0x3cb57bd2,0x3c741892,0x3c84a6a4,0x3c74ebbf,0x3c96c0fe,0x3c93b3f4,0x3c2708c9,0x3c2d4fce,0x3c41fea5,0x3c296679,0x3c55442c,0x3c64af9f, +0x3c21240b,0x3bf48463,0x3c4032a7,0x3c3a7751,0x3c4aafba,0x3c6d6ffe,0x3c64ec2b,0x3c7b926c,0x3c4315bf,0x3c44b06c,0x3c90dbe5,0x3c82c12f,0x3cc7f295,0x3d072eb3,0x3cf47abf,0x3ce152fe,0x3cded395,0x3cca8d23,0x3c9f09a6,0x3c47bded,0x3bf1a0e3,0x3b75789c,0x3b2e15cc,0x3a59a6eb,0x3b2326e0, +0x3bc9d26b,0x3c1b726f,0x3c1d7ec6,0x3c6ddabb,0x3c840d9f,0x3c10b7b0,0x3c0022ba,0x3c31ca16,0x3c853a07,0x3cc01059,0x3c4f9108,0x3c9e1b93,0x3c88addc,0x3c6d26e2,0x3c7bb5a2,0x3c7a4fde,0x3ca8fb47,0x3c48a9fb,0x3ca53029,0x3c93a586,0x3bd99138,0x3cccea99,0x3cd38420,0x3cb4c382,0x3c85a32a, +0x3ca1d8a7,0x3ca610dc,0x3cb3d0e2,0x3c73d386,0x3c42f840,0x3c1f5fdd,0x3beedc46,0x3b932627,0x392542ac,0x3b39de31,0x3b4e997c,0x398b7dba,0xba59ee13,0xbb59912c,0x39f742a0,0x3b4842ae,0x3c28c694,0x3c7f5146,0x3c912173,0x3c7f5c66,0x3c838c5e,0x3caa9bf9,0x3ccd4bd9,0x3ca43f22,0x3cc66a85, +0x3ca970be,0x3c92fd13,0x3cc734c8,0x3c8fadaa,0x3bfa2243,0x3cf63727,0x3cbc9cdf,0x3c942b7c,0x3c7e1aa7,0x3c8ca9fb,0x3c948620,0x3c9831f7,0x3c8f7a65,0x3c95ef4b,0x3c9174c3,0x3c8a68e8,0x3c79adeb,0x3c5fa29a,0x3c4c01ac,0x3c34b85f,0x3c32e090,0x3c32d6e8,0x3c47b2ad,0x3c5a932d,0x3c59ab4b, +0x3c500a19,0x3ca2610e,0x3c799b3c,0xbb516d38,0x3cb35f4b,0x3c9a8d6b,0xba8cd667,0xbb20a817,0xbb1d2917,0xbab9a932,0xbacbba6b,0x3961c264,0x3b1ee52c,0x3c9103cf,0x3cb17d4a,0xbacbe73c,0x3c63db61,0x3cce4b50,0xbce7ee9b,0xbcf2afcc,0xbcc0b2f8,0xbca6f4f9,0xbcaee83e,0xbca7b097,0xbcb88707, +0xbcbafefb,0xbcac64c3,0xbcb99d21,0xbcbb68c5,0xbca9b704,0xbcabf71f,0xbcaadf37,0xbcad66fb,0xbcabd69d,0xbcb02bb5,0xbcabe2b1,0xbcad5c3c,0xbc9c4572,0xbcabbd24,0xbc9814a7,0xbba6d21e,0x3d090b39,0xbcc4a855,0xbc0485b1,0x3d00308b,0x3cf15444,0x3ce5f388,0x3cc1ab7c,0x3cdcda61,0x3cca79dd, +0x3ca1aa57,0xbbbf1ba4,0xbcdc15e2,0x3cbc11d6,0xbb453bdf,0x3c27e485,0xbcebb7ae,0xbccb0570,0xbcdb36e8,0xbccef6a8,0xbd1c5a4d,0xbd2c5d56,0xbd1837ae,0xbd2eeb8a,0xbd28b879,0xbd01f40e,0xbd068ba6,0xbd049d54,0xbd05b357,0xbcf35e63,0xbcf441e8,0xbce27dcf,0xbcd70959,0xbcc08dd9,0xbcc1a962, +0x3a25631a,0xbbd45fae,0x3b9fc78f,0xbc18c8b8,0xbca3225e,0x3b9e32f3,0xbc3d5103,0xbba487f7,0xbc22f3e3,0xbbf4a0f8,0xbc8561f3,0xb9c33f6a,0xbb8e6b33,0xbc1bd736,0xbc0367b2,0xbc22fe41,0xbccd8e05,0xbd0ef096,0xbcd8c54a,0xbcfdf83b,0xbccd2b9c,0xbd382000,0xbd4dd263,0xbd189788,0xbd4d6bf7, +0xbd43f79a,0xbd11993a,0xbd180f5d,0xbd12fa98,0xbd0ceee5,0xbd0f656d,0xbd0bfbb0,0xbd0a7bd7,0xbcee7640,0xbcdddd9d,0xbc7375bb,0x3aca32c8,0xbaa30b8c,0xbc261584,0xbb5d60b9,0xba436cf9,0xbbdaa666,0xbb37de4d,0xbccd6eb6,0xbc64df9d,0xbc5a7a2f,0xbbcd1e4d,0xbbc28d62,0xbc205a9e,0xbc3cad15, +0xbc71c274,0xbd076250,0xbcb53102,0xbcb3d30f,0xbce460db,0xbce9221f,0xbcb5e145,0xbd74a3f1,0xbd9ffc33,0xbd722977,0xbda52df0,0xbd97bae5,0xbd326243,0xbd5b0238,0xbd411ff6,0xbd48c8ec,0xbd326d7f,0xbd23248b,0xbd1669bb,0xbcff3fab,0xbcc68efc,0xbc6587a3,0xbb183703,0xbb1e4608,0x3c00665f, +0xba72cfea,0x3aedb3dd,0x3b868c37,0xba7e2781,0x3aea39d0,0xbae2f2bd,0xbb57984b,0x3a0d0ba2,0x3b876ec4,0x3ad0a012,0xbb8adf39,0xbc9d9f4f,0xbc92ebad,0xbd3c2ca1,0xbd1ad00b,0xbcc984c7,0xbd08f878,0xbc8c2c93,0xbd796c96,0xbd8b0ca8,0xbd4ac23f,0xbd9b5670,0xbd8f879d,0xbd35537d,0xbd44ede3, +0xbd39942f,0xbd294e3c,0xbd41d3fc,0xbd421d11,0xbd36fe8f,0xbd19710e,0xbce324d2,0xbc1de985,0x3c572798,0x3bd1cf05,0x3bf377e9,0x3bbc8272,0x3bd9340f,0x3c489069,0x3bfea931,0x3bc46266,0xbab70711,0x3b1d3599,0x3ab2df54,0x3c3e1366,0x39bad098,0xbc10779a,0xbcba6c35,0xbcf1e9d1,0x3c4cf159, +0xbd1ff773,0xbd9165f6,0xbd90881f,0xbd90c892,0xbd7cd0f6,0xbd844aa3,0xbd656f49,0xbd0f563c,0xbd10a0c6,0xbd8acb57,0xbd469d61,0xbd39c073,0xbcfa68a4,0xbc9dfa3e,0xbc9016b0,0xbc89befb,0xbcc6a387,0xbd04d310,0xbd208db1,0xbc6f5306,0xbbd7ecb9,0x3c148b51,0xba2f4515,0x3abc6c56,0x3c840b62, +0x3bcd812e,0x3b65868b,0x3b058aec,0x39efa82d,0xbab754d3,0x3ac57234,0xbc3a3c81,0xbc43dcd0,0x3b8c7765,0xbc4f953e,0xbd6f10b8,0xbd6617f6,0xbd510d71,0xbd289903,0xbd02f871,0xbcffad6b,0xbc61a601,0xbc3b8802,0xbd3eabdd,0xbd5706d3,0xbd3d754c,0xbc492766,0x3b3c7076,0xbbfcd273,0xbcb03019, +0xbd26c36c,0xbd6ffdae,0xbd406801,0xbd29092e,0xbc478714,0x3c6a221d,0x3b410545,0x3b8314d3,0x3c35f2e9,0x3c677a43,0x39166c2d,0xb9400451,0xbafe76ff,0x3b257f18,0xbba09df2,0xba9d9a23,0xbc01d6d5,0x3c557c55,0x395c926b,0xbcae7224,0xbd19f062,0x3cd577fc,0x3c852557,0x3c4a4ece,0xbc79befd, +0xbd8f14a7,0xbdd5268a,0xbdfadcb8,0xbda87385,0xbdab1ce4,0xbd7b361c,0xbd7fe568,0xbd3dd0f6,0xbd65418a,0xbda3b7cb,0xbd6ff5e1,0xbd45d879,0xbd011c98,0xbcaf7f96,0xbc3d5428,0xbcaaec88,0xbc2c9c19,0x39b56cb7,0x3c5606d9,0xbaf38b78,0xbb90cc08,0xbb0b258f,0xbb9a07f0,0xb8601a19,0xbadfa856, +0xbb85b1ec,0xba09ee74,0xbc38f900,0x3ba963ff,0x3c442948,0x3d17ac39,0x3ccf7ec3,0x3d59b324,0x3d36e72a,0x3bc23eb1,0xbd08f56a,0xbdce6b20,0xbdf7941f,0xbe0962d5,0xbd8199ec,0xbdd85357,0xbdbc7068,0xbd9fa609,0xbd899172,0xbd6ab283,0xbd8c6c09,0xbd50d9fe,0xbd221559,0xbcd3f7b9,0xbca946ed, +0xbc91674f,0xbc6fc978,0xbc414c4f,0x3ab1e8b4,0x3cb36242,0xbb2353e5,0xbbf9d140,0x3b448362,0xbb4ace2b,0x3a819d86,0xbabd948f,0xbb77d498,0xba00a737,0x3b4d695f,0x3c731475,0x3ca58a9e,0x3d3db00b,0x3d125975,0x3c0db939,0xbbf403a2,0xbd5788be,0xbd784279,0xbda8dfd4,0xbd54b65b,0xbcc5ebe8, +0x3c0755f1,0xbd459297,0xbd581324,0xbd3745a6,0xbd09b941,0xbccd4112,0xbcc6a5c0,0xbd1bc06f,0xbd389ad4,0xbd3130e3,0xbd28a31c,0xbcf3a6dd,0xbc1cebf9,0xbb8aa457,0xbae066a0,0x3c92c499,0x3bbcf503,0x3bded974,0x3b9ffe29,0x3ad08587,0xba8cc6a7,0x3baf61aa,0xba9b6ca9,0x3b1c2c88,0x3c5c79ff, +0x3ca06e07,0x3c6fe57e,0x3ca89560,0x3b9eb350,0x3cc14cf5,0xbb6f5648,0xbdad9e3a,0xbda94fa5,0xbdacc50b,0xbda0bb2f,0xbd91fd58,0xbcdce1db,0xbd0f688b,0xbd00f94c,0xbd467e4e,0xbcf9297f,0xbd08a411,0xbd405b72,0xbd057b8e,0xbcc2746c,0xbc13f4a0,0xbbb09d29,0xbbf138b8,0xbc63fc36,0xbadc75ef, +0x3afbc6c3,0x3c04e0b8,0x3c3b4c10,0x3c2e301e,0x3bbb2c1e,0x3c033f95,0x3c205805,0x3c898cc1,0x3c3471e9,0x3bad1c44,0x3b8177b8,0x3aea0a5f,0x3c950d79,0x3c6857d8,0x3be9a329,0x3cc1ae35,0xbd1920a2,0xbd3feeaf,0xbd2b8369,0xbd3c313d,0xbce2f235,0xbc9a8f98,0xbd0237a0,0xbc65598e,0xbb817217, +0xbbe99e49,0x3b07bf33,0x3bbaa364,0x3c27c777,0x3c0a788a,0x3b80e84f,0xbba46484,0xbbb94a54,0xbb61db54,0x3c686826,0x3c689441,0x3b7981c3,0x3c085ed6,0x3bd0cac2,0x3b8326ba,0x3a48d659,0x3a1565e9,0x3ba27c12,0x3c1e573f,0x3bdda5f6,0x3bb055b0,0x3c21c804,0x3c6127bd,0x3be1b159,0x3b9e1a69, +0xbc313481,0xb990a312,0xbbf2230d,0xbcbf64a9,0xbc9840df,0xbc936df0,0xbc78ebf2,0xbc877d3f,0xbcbfd0dc,0xbc3e0393,0xbc011de6,0xbc10d7d1,0xbb5b0f8e,0xb9f3bee1,0x3b9794f6,0x3b7bbf2c,0x3b88b36b,0x3a58491d,0xbad07b7e,0xbb72073e,0xbb7dda29,0x3bc17bc1,0x3c021e74,0xbb22f3f6,0x3bd52bdc, +0x3c06b758,0x3c3192ce,0x3c23aed5,0x3c153969,0x3bf6e541,0x3b952f3f,0x3bbdaee6,0x3c030c96,0x3ba31532,0x3bc244cd,0x3c074a00,0x3bb89df2,0x3be94e17,0xbc2c9341,0xbbaa936a,0xbbd12f44,0xbbf2e601,0xbc2f76eb,0xbc30d192,0xbc18c36c,0xbc663662,0xbc80ca1f,0xbc760bd5,0xbc2254b4,0xbbcd9b80, +0xba5dda8c,0xbb1445a1,0xbb1034d4,0x39b81544,0xbab3cb40,0xbbe6412d,0xbbc1713d,0xbbd9c311,0xbb1da54c,0xbbe624ef,0xb99fd73b,0x3b8fcf31,0x3c08e797,0x3c2f9258,0xbbbcddf8,0x3b7b88a7,0xba981c0d,0x3bebf6ba,0x3bb14fec,0x3989c4ed,0x3c14d64f,0xbad8a47e,0xbb811858,0x3cead7a0,0x3aa127b1, +0xbb1d1bba,0xbbd0d15b,0xbc1c4a1b,0xbc3b0140,0xbc80254c,0xbca8d355,0xbc42fe96,0xbbafe3cc,0xbac189b4,0x3aab23d5,0x3b6b2acb,0x3bbc2713,0x3ba2de15,0x3b764b96,0x3b07c1f8,0x3af96943,0x3b9d8cb3,0x39832701,0x3b994784,0x3b116c78,0x3b8caf6e,0x3b07ae68,0x3b256555,0x3a7db7b0,0x3b51aa4b, +0x3b2a74b3,0x3c378c2b,0x3bf85656,0x3a27decd,0x3c8ab375,0x3bb6ca03,0x3c40b09f,0x3cd9670b,0xba8c886f,0xbba3aa99,0xbc030c15,0xbb83da74,0xbba2c3d5,0xbbb68756,0xbbc86b3e,0xbbc1306e,0xbbdc700d,0xbbe41ca8,0xbbfd1f1e,0xbbe98d1d,0xbbcb7d7f,0xbba5ec29,0xbb6b0130,0xbb87edf9,0xbb83dd0d, +0xbb7dd759,0xbb958591,0xbba2807b,0xbbcd96ea,0xbbc74f44,0x3b7d2feb,0x3cb59cd7,0xbbdd3bee,0x3b96a04e,0x3cdf9b4c,0x3cf4a259,0x3cd807fc,0x3cc78f9c,0x3cdf07e2,0x3cd4a04c,0x3cb166a2,0x3b51a0cc,0xbbcbd8f6,0x3cc0a32c,0x3c1d23a3,0xbbdcc977,0x3ce8c9df,0x3cb58e36,0x3cf5e42b,0x3c916f6d, +0x3c999859,0x3ca2b195,0x3cc6298d,0x3cd170c5,0x3cd31c74,0x3cc0e024,0x3cbaf0dd,0x3cbc66c3,0x3cb4d771,0x3cb3c3ee,0x3cb38c26,0x3cb9eaf3,0x3cc326d5,0x3cc33504,0x3cc44787,0x3cb07323,0x3cd7acc0,0x3c24debd,0xbbebe8f2,0xbd23df42,0x3c95bc95,0xbb951c19,0xbd212c07,0xbd2273cc,0xbd1bf31c, +0xbd071f22,0xbd22a407,0xbd18b9b1,0xbcfc0c48,0xbc1b9945,0x3ca09909,0xbd103bba,0xbc87878b,0xbd2574c5,0x3cb7bb35,0x3c9d9748,0x3c883e8e,0x3c67f4c4,0x3cf3f84c,0x3d1b9095,0x3d25c6c7,0x3d14c8de,0x3d15dc38,0x3d1461e6,0x3d0574ba,0x3d0192aa,0x3d07096e,0x3d091b46,0x3d0dd3c0,0x3d0a8217, +0x3cf96133,0x3cf1fd0b,0x3d0f51b0,0xbbad3a1c,0x3c048960,0xbb4d0b9d,0x3b53f9d9,0x3ca39542,0xbb77a66d,0x3bd37399,0xbbbc2a8c,0x3ae99052,0xba9acd1b,0x3cba2a34,0x39bba836,0x38b473a8,0x3b5fe619,0xbbbe6f4b,0x3a83a6d9,0xbbcf41e3,0x3d0b3fb3,0x3be59ea8,0x3c0fda1f,0x3bffc852,0x3d18af5e, +0x3d46eb66,0x3d54ca89,0x3d31ba16,0x3d1bb924,0x3d24f38a,0x3d04f933,0x3d075fc2,0x3d047d22,0x3d1aeeaf,0x3d22201c,0x3d2cd5f9,0x3d0c7eb6,0x3d1cf8b2,0x3cb4a8bf,0xbb98dd5f,0x3c178d80,0x3c8aaebc,0x3bee2ae0,0x3be78586,0x3c6944b5,0x3b172c79,0x3cd13075,0x3aaca3a3,0x3c560157,0x3ad2fa4f, +0x3c6505cb,0x3c5048b0,0x3bf0eca3,0xbc3ad797,0x3cb11af4,0xbc72e2bd,0x3c0a6ea1,0x3c6950f9,0xbb85ce2b,0xbc2abda2,0x3d00f86c,0x3d6b0898,0x3d88ba8c,0x3d7f4d42,0x3d659e09,0x3d6a7912,0x3d37a8f4,0x3d2765ba,0x3d4374bf,0x3d51fc20,0x3d4d0bfd,0x3d4951fb,0x3d26e531,0x3d208039,0x3cf7a4b3, +0x3c8f6fcb,0x3cefa9d6,0x3c344064,0x3caef53a,0x3c151b8b,0x3ca65aa1,0x3b845bb6,0x3aa7cc26,0xb9a2e7b6,0x3bf01a25,0x3ba23d7c,0x3c7e7d1a,0x3aab7213,0x3b015773,0x3a88b623,0x3bdae09b,0x3c84fa03,0x3c8cbd00,0x388353d7,0xbc415d15,0xbbee641e,0x3d3d5e08,0x3d8f1632,0x3d9d37ee,0x3d81ba0b, +0x3d4fe44e,0x3d5b07dd,0x3d1c22f6,0x3d1e93f0,0x3d1df2ef,0x3d4fa6e2,0x3d5e70d6,0x3d643510,0x3d4029d1,0x3d2fa75e,0x3ce909e8,0xbbc1f626,0x3ca3814a,0x3c7c4045,0x3c8dbbb5,0x3c88487f,0x3c603aed,0x3c308b9b,0x3befe8f5,0x3b9ba838,0x3aa68530,0x3bdbd286,0x3c378bde,0x3c3f5d62,0x3c3a6551, +0xbbca537b,0xbb27a45e,0x3bad218c,0x3b3ae96f,0x3d03aab7,0x3c91ca29,0x3bcfa90d,0x3cdf9097,0x3d1cb7b0,0x3d30464a,0x3d806071,0x3d5d33e5,0x3cedd98f,0x3c9b4156,0x3c42a0e0,0x3bbaf368,0x3c97c542,0x3c9f8042,0x3b024730,0x3c34ad89,0x3cced5b8,0x3cefc20b,0x3ba6928a,0x3ca96eab,0x3c2da739, +0x3c45ffc6,0x3b9cfb8f,0x3c8fe98a,0x3bb9956e,0x3a96767e,0x3b78cafd,0x3be23fe4,0x3b0c0b6d,0x3b5ad2ed,0xbb85649c,0xbbc89867,0xbcbabfd2,0x3cf7aa72,0xbcbd9e1c,0xbc5e802b,0xbbc01868,0x3a763f64,0x3baa75bc,0x3c3b778f,0x3c9d6f6c,0x3c81921d,0x3b6b2eb9,0xbbce0412,0xbd01f6e3,0xbc871edd, +0xbc1bdfe2,0x3bcb9b1b,0x3cb038f1,0x3d15692c,0x3d928d8e,0x3d47d636,0x3d2a9f7e,0x3beb7c38,0xbc5273a9,0x3c1349e2,0x3c304c6e,0x3ca25363,0x3ca3783f,0x3bb40c61,0x3b71d75a,0x3b68a841,0x3b70796b,0x3ac4fa1b,0x3b9d0e0a,0xbb5c4c04,0x3c114afd,0x3c44675a,0x3be2960b,0xbc4f524e,0x3ceff36f, +0x3cdd5a23,0x3ca9f702,0x3c90e0c6,0x3c1372eb,0x3ccf3184,0x3cf79c77,0x3d89c0bc,0x3ca6e148,0x3aaa709c,0xbc6d3b1f,0x3c99170d,0x3d14c596,0x3d118f88,0x3d21f5b0,0x3cdb3b04,0x3c861d61,0x3c1536e6,0x3c81a26b,0x3c6e9820,0x3c219dd4,0x3c26fd87,0x3caf981a,0x3c2f8766,0x3b829357,0x3aaa1283, +0xbace9597,0x3b1cf92c,0x3b5c648e,0x3ac2b095,0x3b395f6d,0xbbc09faa,0x3bfd3665,0x3c1bc98d,0x3d26e02b,0x3c84456d,0x3d09b1d5,0x3d167b60,0x3d1349ec,0x3d222ec3,0x3db236fc,0x3d7a3b3c,0x3d6942e0,0x3d98fa37,0x3c535c2f,0xb8d91d7c,0xbb9377da,0x3d11a8c4,0x3d3bb45b,0x3d146d0c,0x3d1fb8fb, +0x3cd439b2,0x3bec744e,0x3b40b462,0x3c2a838f,0x3a259fc5,0x3adcb26d,0x3c0b6f7d,0x3d033744,0xbb4778a7,0xbab2937d,0x3b58d246,0x3aaa3a1a,0x3b7e216b,0x398fc0af,0x3afb3e4f,0x3aa201af,0x3c1c3e9a,0x3c046762,0x3cafd719,0x3d255687,0x3d37700c,0xb8a7b3b6,0x3cb66ab4,0x3d9221ad,0x3dc315e4, +0x3e26efb8,0x3deb5064,0x3dae39f0,0x3d13b20b,0xbc47f0b9,0xbd08c788,0xbcb5b729,0x3b87746c,0x3c6978f0,0xbbb6361b,0x3b868c49,0x3c0fdcb0,0x3ca94643,0x3c6ae7d3,0x3c000cf7,0x3933f6d1,0xbb531c6a,0x3b8a1232,0x3ca7c955,0x3c2b3a83,0x3becc909,0x3c0f762a,0x3b91b00e,0x3b5f21d1,0x3b998270, +0xb9c6b09b,0x3adfe7c5,0x3c8304fc,0x3cba30d7,0x3cfcd5ac,0x3c838fed,0x3c626126,0xbc1fe832,0x3c292a00,0x3dba8f33,0x3d90b618,0x3d6f5f39,0x3d99823f,0x3dc5b109,0x3de69702,0x3d9feced,0x3d8930c6,0x3d2ce169,0x3c9f4da3,0x3ca3f2ff,0x3c34dec8,0xbbcb4417,0xbca11b7b,0xbc6c172f,0xbc95fd81, +0xbbd2c4a4,0x3bec4041,0xba162fad,0x3bf76316,0x3c65041d,0x3bf0d6ae,0x3c034618,0x3bfb32b3,0x3c18e6fc,0x3c626daa,0x3ca3dcb5,0x3c963cfc,0x3ca37dd4,0x3c190e8f,0x3c7653be,0x39e3b989,0x3c3dc3b6,0x3cc01944,0xbd030aad,0x3cc7f444,0x3d005ede,0x3cf9606a,0x3d3cfe6b,0x3d40b4e2,0x3d47dc4c, +0x3d645aa6,0x3d12ffab,0x3ca3bc23,0x3c0bdb6a,0x3ce057e6,0x3d0ad215,0x3d1fde62,0x3d1ffc96,0x3d21b4a0,0x3d0032ce,0x3ccd8319,0x3c902460,0x3b229366,0x3be797f3,0x3c6cf3eb,0x3c143a45,0x3c8ccd0b,0x3c7ddef5,0x3bc33994,0x3c492d18,0x3c1a2da9,0x3c8e3003,0x3c16bbde,0x3c488995,0x3c6f3ad7, +0x3c4ed863,0x3c9df8b0,0x3c772dfa,0x3c538e2b,0xba4f515b,0x3bd5eb2a,0x3cd86ed6,0x3c9da9de,0x3c991feb,0x3ccf2e44,0x3d065398,0x3d3b1a19,0x3d160e2a,0x3cfd301b,0x3ca07d3e,0x3cb05e24,0x3ca0999a,0x3cb96c65,0x3cb4b2bd,0x3c8ae5dd,0x3c834c00,0x3c4400ef,0x3c4a8237,0x3c091faa,0x3ae528c2, +0xba01e756,0x3baf4442,0x3b91e7a0,0x3c2c100e,0x3c371c24,0x3be0781c,0x3bad846f,0x3c0f19bf,0x3c1eb03a,0x3c1e84a2,0x3c3099d9,0x3c459f6a,0x3c1c119b,0x3ac16ce7,0x3b561e87,0xb9b1717c,0x3ca73f1e,0x3cab4692,0x3cb2a01f,0x3cd52b26,0x3ce299ee,0x3ce89749,0x3cf0a452,0x3cc8adad,0x3cc28a7c, +0x3cabf8ff,0x3c5d5526,0x3b785ae3,0xbb3c2f44,0xbad47b36,0xbb129d45,0x3b1a8a82,0x3b0b439c,0x3b53483b,0x3aab656a,0x3b5f1919,0x3b03f4f4,0x3be29d98,0x3bbc1cfa,0x3c063af2,0x3c595b98,0x3c147587,0x3cb7075c,0x3a79f257,0x3c87facc,0x3bd66bce,0x3c5cddd4,0x3c4f001f,0x3ac0d93a,0x3c2797a4, +0x3c5ce9a4,0xbba46328,0x3c9dbb5d,0x3c9f46c6,0x3ca8a01a,0x3ca52759,0x3cca9614,0x3cde529e,0x3d04aeb2,0x3ce8bd7f,0x3cbfc919,0x3ca13388,0x3c97ae0e,0x3c9eab79,0x3c86b1eb,0x3c8f1141,0x3c87562a,0x3c6a6281,0x3c62ae04,0x3c5adeed,0x3c7b1257,0x3bb48a9c,0x3c2a4881,0x3c16cb05,0x3c54b9c9, +0x3c1fef3b,0x3c1f1864,0x3c0320bd,0x3c1e0f77,0x3bbd01d8,0x3c0b3c1b,0x3c78f026,0xba279e2d,0x3c1d18e0,0x3c01cd24,0xbb68763f,0x3c9f8433,0x3c2fe5e3,0x3caa12cd,0x3c934e4b,0x3c9c51f8,0x3c9e46a7,0x3ca306d6,0x3c9c6ee7,0x3c9df805,0x3c937c84,0x3c95cd91,0x3c927d44,0x3c849a0e,0x3c65dd2a, +0x3c4e94c1,0x3c5367cc,0x3c5c0aa5,0x3c68593d,0x3c71ac96,0x3c6c3eaf,0x3c89d29d,0x3c25f7a7,0xbb02a989,0xbc82295d,0x3c3d4810,0xba3d8e5c,0xbc8b7378,0xbc9c66fb,0xbc8606c6,0xbc7096d9,0xbc91489f,0xbc83833d,0xbc3fcfd8,0x3ae356fe,0x3c4d8339,0xbc55dadf,0xbb8e870a,0x3cd1af5b,0xbc9fd2ff, +0xbc373367,0xbcebea8f,0xbc8aba13,0xbc852721,0xbc6e9492,0xbc8bf5cc,0xbc92807f,0xbc8f63fe,0xbc949c99,0xbc979ea7,0xbc9514bc,0xbc952d2c,0xbc9579de,0xbc984c2d,0xbc96b505,0xbc9b473b,0xbc9a1fb0,0xbc9a5083,0xbc837b27,0xbcaa45f3,0x3b95ded7,0x3ca91eb0,0x3d20458f,0xbb71c5e7,0x3c9a9a95, +0x3d242941,0x3d20bff9,0x3d15e065,0x3d03ac63,0x3d27d5b4,0x3d22ca15,0x3d1251e3,0x3cbd7ad2,0xbbea9fe9,0x3d00cb1c,0x3cd04185,0x3d3f5f11,0xbc46ea74,0xbcaede2e,0xbca2fd3b,0xbc494560,0xbca3d5cd,0xbcc3d9e8,0xbcc81dfa,0xbcdfb282,0xbcf0206e,0xbcd8e335,0xbcd9c835,0xbcdda808,0xbce481fc, +0xbcd596bf,0xbcd6ee7e,0xbccece6c,0xbcb89cec,0xbcb1a15e,0xbcd060e0,0x3cb2a313,0x3bf5c88a,0x3c6947c8,0x3c65007e,0xbbb09366,0x3c5eab1b,0x3b061378,0x3c5eedcf,0x3b8d6b2b,0x3c1e7a1d,0xbc891790,0x3c3098d9,0x3c318b47,0x3bcdf817,0x3c1abbf0,0x3bc8d735,0x3c22eac1,0xbd00cb2a,0xbcc7442a, +0xbca33fd1,0xbb9d00d6,0xbc9b5148,0xbcc2de4d,0xbcc7e923,0xbcf8363a,0xbd0431c7,0xbcf9a92d,0xbcf7dad2,0xbcfd19d9,0xbcf9d650,0xbd00f723,0xbcfaebc4,0xbd08f258,0xbccafcbb,0xbcf7aa73,0xbb9bcf9e,0x3cff5de0,0x3c3d864c,0x3ba89ace,0x3c6a600f,0x3c0cc201,0x3bb1ca4f,0x3b40a6b1,0xbcbfc7d2, +0x3c043501,0xbc0e17b3,0x3c2e3b8f,0x3a6d5f26,0x3a6b2b86,0x3b0389ee,0x3b96d9dc,0xbca015cb,0x3ce79e4c,0x3b8b74f5,0xbd1230f0,0xbcb76cd0,0x3b0eddf1,0xbc6055c0,0xbce76e86,0xbcf691ba,0xbd2d1b33,0xbd4020d7,0xbd1af08f,0xbd2230ee,0xbd1dfc16,0xbd2888ec,0xbd2070d1,0xbd16df0e,0xbd10ea10, +0xbcfa2f6b,0xbce718f3,0xbc26b762,0x3c2f79da,0xbb59a680,0x3c62397a,0xbae858cd,0x3c45db81,0x3a82cde3,0x3c073c43,0x396b1248,0xb9a441c8,0xbbdc4e16,0x3bbad8ed,0x3b89dbd7,0x3c774fae,0x3b9f419a,0xbbb341a8,0xba395c59,0xbcc6589c,0xbca2af20,0xbd356291,0xbc973777,0x3c6b1d08,0xbc67d049, +0xbcb31ec4,0xbce0684b,0xbd261a0b,0xbd390dbd,0xbd2bc4e6,0xbd1bee77,0xbd2110b9,0xbd16fa73,0xbd27f392,0xbd2e786a,0xbd390f1d,0xbd0c7a0e,0xbcf854af,0xbc122c1d,0x3d29da3d,0x3be3b810,0x3c80e2e2,0x3beebb31,0x3b5a8132,0x3c48fe33,0xba1301c4,0x3aa82f36,0xbb7d26fc,0x3ae2e581,0x39559ba9, +0x3c233b1a,0x3baabfad,0x3b02f842,0xbc832c50,0x3ad2fda4,0x3d38ccb1,0xbcc018bd,0xbd850855,0xbd83abb9,0xbdb95e22,0xbd8700fe,0xbd7f1841,0xbd74f3bd,0xbcc7c0c1,0xbc8a961d,0xbd463729,0xbd721582,0xbd4728c8,0xbcb114c3,0xbbe2d3d9,0xbab0194c,0xbd027805,0xbce2c38c,0xbd07ecd9,0xbca120f7, +0x3b3ec40c,0xbc413a88,0x3c33d555,0xbb1370a5,0x3c2d8048,0x3c5a0f5a,0x3b5194ff,0xbaa681ec,0x3b55c482,0xba5628a6,0xbb9e1ac6,0x3bb3819c,0xbbf60d6f,0xb961e280,0x3c795ee6,0x3c832b77,0xbd209a07,0xbd820048,0xbd24b7ee,0xbc05097e,0x3d022894,0x3b989c6c,0x3c82d4ae,0x3cdf9bf3,0xbacdaadb, +0xbccab9c4,0xbd1a434b,0xbcad3b17,0xbc94fda7,0xbc132c29,0xbcdfe971,0xbd11aa87,0xbd4c865e,0xbcda1feb,0xbcfbb62f,0x3ae11c90,0x3cd0784d,0x3c1d2886,0x3c4a9fb6,0x3bb791ea,0x3b6ac50a,0x3a629613,0x3a4290e9,0x3a401d7d,0x3b0bbbf8,0xb92ba130,0xbac266d2,0xbb9f4d4d,0x3c4110fe,0x3ae51c7f, +0xbbd921dd,0xbcab5c8e,0x3cbf360e,0xbbf1e8da,0xbc9f996d,0xbce7cb68,0xbd9894e4,0xbd7c64ba,0xbd8d58f5,0xbd77251a,0xbd67ed74,0xbd4fd85c,0xbd446f14,0xbd504886,0xbd36e78c,0xbd15d0bc,0xbd0ab4f4,0xbcda115c,0xbc81b473,0xbc65d254,0xbc8fd514,0xbc68379e,0x3b499173,0x3c192db5,0x3cfb8d8d, +0xbaf074ab,0xbb256fc9,0x3b84a2fd,0xbb31f747,0x388e7721,0xb8f5ddb8,0xbb2df045,0xb9e555dd,0xbba3b04d,0xbba49fa8,0x3b0a0e82,0x3cce8cad,0x3cf6ddd3,0x3d42de9b,0x3cd08dc7,0x3ba40456,0xbc7b5be6,0xbd9a6625,0xbda0debf,0xbdc1055f,0xbd92e2d8,0xbd9b9d5f,0xbd72bd81,0xbd48d541,0xbd575948, +0xbd37a6bc,0xbd35522d,0xbd072cf7,0xbcd24957,0xbc8cc315,0xbc7e1a05,0xbcbfe616,0xbc05699b,0xbb0e9e1a,0x39b9dada,0x3cac0939,0x3abe8f09,0xbc198c5c,0x3bd37e1a,0xbbb81609,0x3b11c13d,0x3b530a6e,0xbb27e97c,0xb9e13fc9,0x3b7a8f72,0x3c151403,0x3c32c6b4,0x3d224319,0x3cf57b20,0x3cb815d9, +0x3d0854b6,0x3d35d037,0x3d14f211,0xbb17572e,0xbbcc4f98,0xbb8e5cd2,0xbb8d18b6,0xbc2f6d7d,0xba32d7de,0xbbc5115e,0x3caff684,0x3c6fd60f,0x3c2267ae,0xbc80014a,0xbcd0d038,0xbd014136,0xbceca104,0xbcdf8b7d,0xbc35606e,0xbbffc719,0xbbc83078,0x3c9d2f31,0x3b3d1532,0x3b4ccd5d,0x3b9df151, +0x3a8e7554,0xb9a9abf1,0x3ae53ba4,0x3a103cb0,0x3b9dd329,0x3c3ee688,0x3c9a2be9,0x3ca86677,0x3d09725f,0x3ca258cf,0x3d59c816,0x3cceeffe,0xbd359688,0xbcf138bc,0xbd1eed72,0xbc99113c,0xbc18ea30,0x3c53ed76,0x3be2fee0,0xba9c8690,0xbd1f4429,0xbcfcf6a7,0xbd02a065,0xbcb18d98,0xbc585972, +0xbc5a158f,0xbca64745,0xbc361038,0xbc3cc2db,0xbc64904d,0x3c02d7b9,0x3c11ef54,0x3c1536a4,0x3c01aaaa,0x3b96948e,0x3bb6ddce,0x3c60c3cf,0x3c5770e8,0x3c634a4e,0x3c8dae6c,0x3c61574e,0x3cb381e6,0x3c266fb7,0x3c9d94c1,0x3ccaabe5,0x3b9170d8,0x3d159415,0x3baa4f56,0xbb90b24e,0xbba3addb, +0xbc0a3cea,0xbc770fd5,0xbc764a38,0xbc1c4d92,0x3be108e1,0x3c8e17d4,0x3cb0ab03,0x3c86c50f,0x3c6bb447,0x3cafcc81,0x3c82f8ad,0x3c576eb2,0x3becea7b,0x3b83bbdb,0x3b5c878f,0x3c467c37,0x3c12260b,0x3aee3098,0x3c537967,0x3c112f47,0x3c367a7a,0x3c42aa09,0xb8412af8,0x3ba4dd86,0x3b653509, +0x3bd33945,0x3bab6a7a,0x3c0c7bbc,0x3c8d886d,0x3c5bdec1,0x3c9fa710,0x3c71fb50,0x3c966033,0x3b94c775,0xbc916d71,0xbc675829,0xbc846d32,0xbc59a34f,0xbc76f612,0xbc79560a,0xbbaa598d,0xbaa1542d,0x3aa645c6,0xbb03ecc7,0xbb61b248,0x3b542d78,0x3a13be74,0xbaa559c7,0xbb429e63,0xbbb85b9a, +0xbb882cd3,0xbb47fdce,0x3be33964,0x3c0d6f50,0x3bc8e555,0x3c3857ec,0x3bf75786,0x3be1c1d0,0x3c44e7c9,0x3c25bf93,0x3bf0627f,0x3bdf6c84,0x3c025eed,0x3c4bc737,0x3c0798a1,0x3c319205,0x3c9d2e49,0x3c73614b,0x3c90a256,0xbb5d72d3,0xbbadd2d0,0xbb05086c,0xbbdee4e3,0xbbdbd9df,0xbbf38905, +0xbc23a681,0xbc1e0739,0xbc07cc09,0xbc059dcd,0xbb83c71c,0xbba70ba7,0xbb8c57ec,0xbbe27d34,0xbc1fe059,0xbc3b5d21,0xbc0276fb,0xbc8a6e7d,0xbbf264a8,0xbad45878,0x3b062831,0x3b489b4d,0x3b49a7f8,0x3bb6f491,0x3c0000a4,0x3c13340e,0xbb15c7e0,0x3c9c9b2e,0x3b411f59,0x3c5fa1dd,0x3bb57c4e, +0x3bfc2609,0x3c7d46ef,0x3c0f725d,0x3b518c2f,0x3cc18266,0x3b4963f2,0x3b37cee7,0xbad6ef99,0xbb713894,0xbbdb0ebc,0xbc27885c,0xbc52b584,0xbc145fe7,0xbbbf7fbc,0xbb4c5531,0xbae17ef5,0x3af1575f,0x3bb1cd66,0x3bd18e6e,0x3bea4e1b,0x3bc57075,0x3bc25db2,0x3bf5857a,0x3b621a81,0x3c60bd13, +0x3c15e8e6,0x3c470901,0x3c398f19,0x3c5c8d7a,0x3c4fb196,0x3c6cbd72,0x3c5a9c2a,0x3c6f2d85,0x3c447524,0x39c0b57c,0x3c8e91ef,0x3c247c62,0x3c195b80,0x3cadb1db,0x3baf2bd9,0x3c204f1b,0xbafe15a7,0x3a075a15,0xb971c088,0xba569568,0xba952764,0xbaab3a15,0xbb258a14,0xbb27ae12,0xbb4937b8, +0xbb3e91b2,0xbb211090,0xbb1ecde6,0xbb1e3480,0xbb4be30c,0xbb5d81a0,0xbb6f7994,0xbb6e396c,0xbb55252e,0xbbbe4645,0x3bb95d14,0x3c8df3ff,0x3cbf8d46,0x3be1fc4d,0x3c9635a7,0x3cd93f62,0x3cec3207,0x3cd30219,0x3cc849ab,0x3ce78cfe,0x3cdf12fe,0x3cbbdad7,0x3c83b549,0x3be141af,0x3cbadde1, +0x3cad9799,0x3b99a12f,0x3bd0652b,0xbbaecbdb,0x3c969e59,0x3bc4539d,0x3ba4f687,0x3ba6d450,0x3ba5e5a0,0x3bc6fa44,0x3c039bca,0x3bf99875,0x3c01aa36,0x3c0529f0,0x3bf44ec7,0x3bf3d9f2,0x3bef2567,0x3c0708a4,0x3c0e2d3a,0x3c0a44d0,0x3c0d0a70,0x3be74242,0x3c41976b,0xbc5c0390,0xbcc11358, +0xbcc043d6,0xbbe348a7,0xbcbdb6df,0xbcd2d3ac,0xbcdbd0bd,0xbccf6149,0xbcbcb499,0xbcf61b5c,0xbcefb2dd,0xbcdc3bed,0xbcdbab42,0xbbba81f2,0xbcc4dfd6,0xbcf8b39e,0xbd27d2e0,0x3b906854,0x3bb4210b,0x3ab58462,0x3ab9b3db,0xbb0b399a,0x3a9e815e,0x3c2f05ba,0x3c1f26ff,0x3c338011,0x3c312616, +0x3c1988e3,0x3c0b6c27,0x3c0517fb,0x3c3bb10b,0x3c47a475,0x3c3b5088,0x3c18ea36,0x3c3a9e18,0x3c99208f,0xbc906d1e,0xbba6486d,0xbbf00623,0xbc7848d6,0xba915f19,0xbc0965ac,0xbc0e30d3,0xbc97b5d7,0xbc347380,0xbc5f6603,0x3c40221e,0xbc00fd53,0xbc2966ba,0xbc1d75d9,0xbc8eb767,0xbc29dfc7, +0xbce5037a,0x3c759965,0x3b0b524c,0xbba3ef49,0xbb9995c8,0xbc4b8413,0xbc144779,0x3c10d2c6,0x3bfdb983,0x3c33365d,0x3c370ec0,0x3bef1f6d,0x3be310f0,0x3bafc615,0x3c4a57ff,0x3c5c3d2c,0x3c788443,0x3c13e87c,0x3c93c43a,0x3b397455,0xbcc6d0ac,0xbb325996,0xbb051b89,0xbbed29ec,0xbb03985d, +0xbb860c21,0xbb8f76a2,0x3c1929b7,0xbc95da56,0x3b34f128,0xbc3130f0,0x3b33a7fb,0x3a33154c,0xbb8f647d,0xbcab0a95,0xb8cc0f92,0xbcf900f5,0xbb794113,0x3b5f27c4,0xbc39309b,0xbbe19b4e,0xbce3a79b,0xbc9780cf,0x3c3b6f4a,0x3c3a066e,0x3c7994dd,0x3c7c74a4,0x3c23cd01,0x3bdbde4d,0x3b4c4bd1, +0x3c880402,0x3c924e15,0x3c909d01,0x3c5a636e,0x3ca5d197,0x3c81c7c5,0x3b3ab6da,0x3cb315c6,0x3bcca911,0x3c7d7ab7,0x3ace842a,0x3c6510e9,0xbbdebb96,0xba9d1082,0xbb4ee499,0x3bd61d3f,0x3ad21ff9,0x3c0d017e,0xbb7442ec,0xba5a5815,0xbc3c3047,0xbbb0bdc9,0xbc6be91f,0xbbd7eda6,0x3ba41688, +0xbc8f56b2,0xbc47b9a6,0xbd217b95,0xbcf728d3,0x3b7c622d,0x3b8a1d55,0x3c5abbd1,0x3c728413,0x3c04c21c,0x3b97e53f,0x36123adc,0x3c590670,0x3c95c0b4,0x3ca90ab3,0x3c44d93c,0x3c977f5d,0x3c941ee6,0xbcca259a,0x3c912f75,0x3c0a1c64,0x3c524ffe,0x3c61fc7c,0x3c4b34a1,0x3c3bcc0b,0x3b89860a, +0x3b192022,0xb90450e8,0x3be98e08,0x3c0bcf46,0x3c19f8f4,0x3bdad2c9,0xbc78081a,0xbcdc22f1,0xbc507fca,0xbd62a7cd,0x3bb4fb0b,0xbc3d5a18,0xbcd0977d,0x392942fd,0x3c4145cb,0x3bbcfb8d,0x3d480d81,0x3d4648af,0x3ca5560d,0x3c8c9bd2,0x3bf980b6,0x3c2183c8,0x3bfbb2d4,0x3bb29ae2,0x3cdcdd86, +0x3ce41c82,0x3d00bbad,0x3c639f0f,0xbbcd6166,0x3c85cf76,0x39496040,0x3c5ab06b,0x3b483545,0x3c565072,0x3a16454c,0xb9f0599c,0x3be290f0,0xbbbccc3e,0xbc08c983,0x3b767d4d,0xbb94200f,0xbc630fca,0xbcdd3f7a,0x3c4403dd,0xbd177d99,0xbc3dbe8c,0x3ce536a9,0x3c096775,0x3c82d4dd,0xbcada7b9, +0xbcf103c3,0xbcd4b135,0xbc892b3b,0xbc3eabc0,0xbc4b4b59,0xbcf72cb0,0xbd073fe0,0xbcb1ea21,0xbc369b9e,0x3b01c9cc,0x3c743b4d,0xba56da6e,0x3c0e9ecf,0xbc503bd8,0xbc4e9a7d,0x3b324972,0x3c686d6b,0x3bef0572,0x3bdde753,0x3b8ef659,0x3af3dfbd,0xba75ce12,0xba0e57d8,0xbb29b5e4,0xba883472, +0xbb9f8e57,0xbb9a3762,0x3a3e41c8,0x3b87b928,0xbcd6c48d,0x3bf6d0cf,0xbc00911d,0xbd01d042,0xbd15c9ae,0xbd822e29,0xbd4aea22,0xbd11df4e,0xbc8409b1,0x3ca5feee,0x3cd648cc,0xbbb56ff1,0xbafff850,0xba4533c6,0x3cb15af3,0x3cc3b80e,0x3c7b7ddd,0x3be5210d,0x3b1b9354,0x3c312a74,0x3b871815, +0xbaa60875,0x3c1bfcc9,0x3c5b56d8,0x3b330209,0xbb845951,0x3badecb6,0xbb4de26b,0x3bc57153,0x3ab504ea,0xba5e69e8,0xbb04f375,0xbaf4ad4d,0xbb95e21b,0xbbd1ae3d,0x3c36105b,0x3bb445f4,0x3ca26efa,0x3c08c5eb,0xbc53c199,0xbcc74cfb,0xbd33052f,0xbcc93222,0xbc38d650,0xbc21be8b,0x3c068abd, +0x3bb57bff,0xbcdb8583,0xbbca1db6,0xbba2a41c,0x3c6d6e23,0x3b87f448,0x3b4400a5,0xbb463590,0xbb14924d,0x3c0f01d1,0xbb2ac76d,0xbbd2f2fa,0x3b76d564,0x3ca92237,0xbbbbc070,0xbb3e792b,0x3b75697d,0xb9f71be6,0x3b4f4440,0xbaec4806,0x3bb9bbd1,0x3a4f1dfc,0x3bd1e086,0x39b6cc4c,0x3c45af8a, +0x3ca69329,0x3d002cf7,0x3cca83e1,0x3cfa7818,0x3d653ba3,0x3d4d0348,0x3d7578fd,0x3ce8afa5,0x3bfc6bf8,0xbc6722f9,0xbcdf5786,0xbd0f23f7,0xbd1d2578,0xbceea2d3,0xbca5760b,0xbbca6d0c,0xbbc2f81b,0xbb087743,0xba08d725,0xbaf3a927,0xbaee5813,0xbc26b141,0xbbd9beba,0xba966fb9,0x3c2758a0, +0x3b2e90df,0x3b7b433d,0x3be79c04,0x3a8eb353,0x3ada09e5,0x39be863e,0x3a9e1105,0x3ba1d219,0x3c5c07b7,0x3c9312bd,0x3cab0cce,0x3ce3ea02,0x3c97eb00,0xbd08dc1e,0xbd0f6cce,0xbbdaa1df,0xbc3378d7,0x3b8ef036,0x3cdb8f83,0x3d4455bb,0x3d5c7a5b,0x3d047ed2,0x3bec52f6,0xbd0a7915,0xbd300cb1, +0xbd05e400,0xbcc6bf19,0xbc9f9def,0xbc65dd2f,0xbc824422,0xbc634353,0xbbc75731,0xb9df6e5c,0xbc4a7496,0xb92bafba,0x3c85b3ab,0x3ba56d83,0x3b4e7538,0xbaa71240,0x3c25914c,0x3c81ce16,0x3c355b65,0x3c6297b1,0x3c630c6a,0x3c674cd1,0x3c4ee583,0x3ba0a526,0x3afdbe6a,0x3c384620,0xbbed450b, +0x3b938fcd,0x3c8083be,0x3c5a7278,0x3ca15a8e,0x3c8ece00,0x3cd80887,0x3d205e7c,0x3cf944c8,0x3cf204c9,0x3cf82cd0,0x3cabf179,0x3c25467f,0x3beb2f78,0x3bf5cb52,0x3c3913f4,0x3c86ace7,0x3c9608d7,0x3c872388,0x3bb6185e,0x3bcfd466,0x3c1fe24e,0xbb01e7e1,0x3c026bb4,0x3c332c6c,0x3c19c57f, +0x3c75aacf,0x3bdfc6db,0x3b3519b5,0x3aa93429,0x3b688ab5,0x3bf40001,0x3b983d6f,0x3c3da265,0x3c228622,0x3be6bf36,0xbc03f683,0xbb9995b0,0x3bf4bce0,0x3aa5b25d,0xb94dc6d9,0x3b8cd5aa,0x3c342498,0x3cbb9132,0x3c9bcb5f,0x3c919460,0x3c7828cf,0x3c1ed3da,0x3bee8c4f,0x3bfec2b1,0x3bfdcf92, +0x3bbcf6f3,0x3c02d547,0x3c04900d,0x3c37ae59,0x3c06708e,0xbb084e99,0x3accca2c,0x3bfb7213,0x3b7c65d0,0x3c0ce210,0x3bf6bee5,0x3b63ef76,0x3ba104aa,0x3bed3af8,0x3bdc5944,0x3beb23b4,0x3bb24246,0x3bfbef6f,0x3bb0f96d,0xbabdbe9d,0x39bb503b,0xbc103ca9,0x3b45867b,0x3bca85f4,0x3b5f5cf3, +0x3bb584f3,0x3bea3fd2,0x3be78fec,0x3bbee736,0x3b615fc8,0x3b79c71d,0x3a8601de,0x3bdf8a3a,0x3bb7a60b,0x3b8990a4,0x3b9478f0,0x3b6011ed,0x3b9efa68,0x3b7ef7d7,0x3c2b7b6f,0x3b077517,0xba6bf9e7,0x3ba47733,0x3c10a7ae,0x3bbc4bba,0x3b1fcc32,0xb9cf223e,0x3b908485,0x3c2c7768,0xbac07af3, +0x3c33cb34,0x3b5ae3f8,0x3c1b15e9,0x3b9dacf8,0xbad01d2b,0x3ab8c3a9,0x3b23c8fd,0x3ab8b234,0x3c52fae3,0x3c398881,0x3c57cd7d,0x3c5af498,0x3c7b03df,0x3c8e8d4d,0x3cad078f,0x3caf147c,0x3ca2b437,0x3c9b06ab,0x3c802a0a,0x3c64182e,0x3c4c6716,0x3c4e1a26,0x3c48d2d9,0x3c4e05d5,0x3c399722, +0x3c32bd44,0x3c27a39b,0xb97a176f,0x3ac75a79,0xbb1dbfcd,0x3a944c10,0x3b2357ad,0x3b873d34,0x3a86703b,0xbad2309e,0xbaceea1a,0xba997f72,0x3bfbad7a,0xbb93334e,0x3a06a19e,0x3b733bbb,0xb9c0991a,0x3bed6025,0xb9f9f57c,0x3c479d39,0x3c384c97,0x3c3b9347,0x3c3cf797,0x3c4307ac,0x3c3748bc, +0x3c2d6968,0x3c1ea63a,0x3c2116d5,0x3c267292,0x3c2d0ea0,0x3c32fc5a,0x3c2ef9f8,0x3c2f922d,0x3c2f5a01,0x3c2d7d6f,0x3c3251e4,0x3c336ea4,0x3c63e12b,0x3b0a5db9,0xbbad0c08,0xbb58b44d,0x3b12aa18,0xbbd8e77d,0xbbb26f87,0xbbc7e762,0xbb81a6fd,0xbb3ab222,0xbbb2d5de,0xbbc356a4,0xbb555615, +0xbb2f1a0d,0x3b59569f,0xbb47c4e0,0xbbdc5b74,0x3c8d68b7,0x3bd19e79,0x3c82d4e2,0xbbaed42c,0x3a8dd06b,0x3b21f6fe,0x3b7f088c,0x3b83f1c7,0x3b79d026,0x3b592bf7,0x3b4e40dd,0x3b3a73c4,0x3ad5a9f1,0x3abb6ce7,0x3aa55127,0x3aafa99d,0x3ab7e5d1,0x3ad5eb7c,0x3ad7743e,0x3ae7cdd7,0x3b27489e, +0x3a09416a,0x3ca16759,0x3cb5e804,0x3bca3703,0x3c8eab26,0x3cbcace7,0x3c03dc0c,0x3c0c8901,0x3bf493d9,0x3bf3708f,0x3c469beb,0x3c532453,0x3c66163e,0x3cc9ff51,0x3c86498e,0x3bd67910,0x3cc08e22,0x3cc509f1,0x3bfe0cda,0xba451baf,0x3abff402,0x3b8ef0ab,0x3bf74304,0x3c1d32b4,0x3bf2219d, +0x3be219a9,0x3ba5629b,0x3b3630e3,0x3b584617,0x3b3b6d31,0x3b39c8b5,0x3ac5762b,0x3ad1d870,0x3ab53742,0x3b442b1b,0x3b0eeecc,0x3a2c4797,0x3ca7c8b3,0x3c6eb4cd,0x3c39d183,0x3cb095d3,0x3c620d37,0x3c164ca7,0x3c38a4b0,0x3c7803a6,0x3c31db11,0x3c67be21,0x3a6a642b,0x3c3c8a7c,0x3c6f695e, +0x3c686a82,0x3c4d77d6,0x3c26727d,0x3cbd485f,0xbafa5b3c,0xbbabf4f8,0x3b2f3cf5,0x3bcd5578,0x3c6d6436,0x3c8def13,0x3c2fc8ec,0x3c489377,0x3c0aedbd,0x3aded73b,0x3ab7c5ef,0x39b0d718,0x39eacaf5,0x391d06b5,0x3aa59ade,0x3a16b3ec,0x3b9369ce,0xba240d81,0x3c661b85,0x3cfab967,0x3c891086, +0x3c9fb33d,0x3ca59c55,0x3c41c202,0x3c676968,0x3ba84743,0xba29a774,0x3c911aa2,0x3b5cedc9,0x3c7d742a,0x3c1b88fe,0x3c58d396,0x3c5b046c,0x3c1a11b1,0x3be76e1e,0x3c91a102,0x3c040d80,0xbc209f3e,0xbba5e49b,0xbaaf3031,0x3c815b98,0x3cc68dd4,0x3c6d1e9e,0x3c8b4e99,0x3c17be7c,0xb9c18bbd, +0x3b8336f2,0x3a8f96c9,0x3b09c8ee,0xbacc7082,0xbaf7f5c7,0xba7a25a1,0x3a55a092,0xbaa22dc6,0x3c3c8316,0x3ca9cc9d,0x3c1d5e9d,0x3c84c203,0x3bf64102,0x3c793f84,0x3bc58e55,0x3c259d6f,0xb9f8e957,0x38f726d6,0xbb2a46be,0x3c114257,0x3c0603b2,0x3c849198,0x3bf09efa,0x3adf2dc8,0x3634ce7d, +0xb9de8ec2,0x3abc5186,0xbc80ace6,0x3a7055b9,0x3b3a268d,0x3cf159ec,0x3d0cb2cd,0x3c9ddb61,0x3cb890b3,0x3c661823,0xbbaba424,0xbb43ab39,0xbba9675a,0xbb9c9ddf,0xbad22560,0x39e8ea51,0xba6a3dc5,0x3b7607dd,0x371f23da,0x3c3ebdd4,0x3d1ccf63,0x3c63d681,0x3cc0eb9b,0x3c3948d1,0x3bcb86a4, +0x3c266470,0xba050c5c,0x3a0aea02,0xbabd838c,0x3aa078d3,0x3b15bb51,0x3bf69818,0x3bfc94e9,0x3bff266f,0xbc3fb744,0x3bb3f4ef,0x3d2c84d1,0x3b706bc6,0xbcceb654,0xbc9bbe3b,0xbd06bbce,0xbcd215a3,0xbc6fcce4,0xbb7f67bd,0x3bf425fe,0x3bf1da51,0xbc031e2b,0xbc9146fb,0xbcd1cb06,0xbd0d2252, +0xbca1ae8f,0xbbf61d54,0xbc99aab8,0xbc26b757,0xbb3610b6,0x3c90a178,0x3cba80ef,0x3b873ddb,0x3c40e4c7,0x3c31673e,0x3c8753d6,0x3c178508,0x3b35559d,0xbb52ccc9,0x3b0e2715,0xbba76d79,0xbadcdce2,0x3c868cd9,0x3b974c88,0x3c1f8b50,0x3c0ae59b,0x3d266e90,0xbc278e78,0xbd0845f8,0xbc1e2149, +0x3bb2beb2,0x3c85ac7b,0x3ca544c0,0x3c86e1cd,0x3abe409c,0x3c8f3efa,0x3c7e50dc,0xbc134505,0xbbed9e40,0xbbeb13e2,0x3a689463,0x3c49a69d,0x3c800738,0x3c559822,0x3c732664,0x3bb06ce6,0x3c2f40e6,0x3c34fb34,0x3c687b3f,0x3cacd2ca,0x3bc5e862,0x3a1d8c4f,0x3932a3f5,0x39ada9dc,0x3aa053c3, +0xba2f54f4,0xbb7e993b,0xbbe6c05d,0xbbe16332,0xbbac3ad1,0x3b0be71e,0x3ca6117a,0xba75b67c,0x3c0a7853,0xbccd0edb,0xbd468f8a,0xbcda3332,0xbc9d2892,0x3c2babaa,0x3c9c5e32,0x3c584561,0xba18d0e0,0xbc7b8750,0xbced6839,0xbcbc1ae2,0xbbe97a60,0x3c8cd55a,0x3c82cf28,0x3c8f0b0b,0x3c74eb62, +0x3c5973f6,0x3bd7200c,0x3bf896e7,0x3c65e03b,0x3c367fe9,0x3cd263a7,0x3b5be759,0x3993227c,0xb9131af4,0xb9e692c3,0xbb1b3c88,0xbb2a7028,0xbaf4e438,0xba3f82a2,0x39015232,0xbbbe1633,0xbbca37c5,0x3be1f737,0x3c2137e0,0x3c9ac162,0x3bcfe39c,0x39e651f4,0x3c5c139b,0x3cbe66c0,0x3ca24102, +0x3caab62c,0xbbbdd5f4,0x3b89959c,0xba57d817,0xbbf58bd2,0xbbbcc92c,0x3b6a9dd7,0x3cb36fe5,0x3c29303a,0x3be78281,0xbb29ae9f,0x3b446b01,0xbb470813,0x3aff713f,0x3c730014,0x3c0f909b,0x3c8ff237,0x3bef430b,0xbabbdf9c,0x3bc5892b,0xbb56041c,0x3b31fe21,0x3b746918,0x3ad93760,0x3bab2a84, +0x3c016d98,0x3bc7ac2e,0x3bf50f7d,0x3c935ed6,0x3c91bc01,0x3d17e10c,0x3d893fd2,0x3dec913b,0x3de9d993,0x3dc895a5,0x3d667593,0x3cd62b38,0xbc6fa43d,0x3cb00480,0x3c92f04b,0xbb814668,0xbc12b457,0xbc3a267a,0x3c1309fc,0x3c87293b,0x3c948865,0x3a97ed5f,0x3ad908fd,0xbb94d9c5,0xbacb5ba8, +0x3b1f19ba,0x3b918cc5,0x3c746c96,0x3be2ad05,0x3bd17725,0x3c0dcbfd,0x3a573a54,0x377f2b5b,0x3b0fea92,0x3ba40eff,0x3c1b6bba,0x3c33662b,0x3c9baee0,0x3cf1491a,0x3d0cbbb6,0x3d1a0b23,0x3d09bfee,0x3cf91517,0x3cecbf62,0x3d32d5a3,0x3d4d75ec,0x3d90afee,0x3d9c35e1,0x3d75bc79,0x3d27bf38, +0x3ce34b12,0x3cb1c970,0xbc1c306e,0xbc95b302,0xbc089bc1,0xbc918e22,0xbc3087f1,0xbc288f50,0xba63f155,0x3b11e63a,0x3b0cf5e3,0x3c5e80fb,0x3c647e8e,0x3c46a31e,0x3bc7479f,0x3b17c636,0x3b442c91,0x3c870012,0x3c8546cc,0x3c566c35,0x3c8df636,0x3c96cdef,0x3cddb8dc,0x3c8a7b03,0x3c566c82, +0x3ccc399f,0x3c1257a1,0x3cca8d6c,0x3d3219d8,0x3d24d065,0x3d145c49,0x3cd5f9f4,0x3c8a564b,0x3c8672d8,0x3ccf878d,0x3cf2a176,0x3ceaf517,0x3cc7c54e,0x3cb26649,0x3c9f3268,0x3c839caf,0x3ca393a6,0x3c7dea9d,0x3baea4df,0x3bdc78a0,0x3bdb43b0,0x3bf67acc,0x3be7d7a1,0x3bc3fed5,0x3c933db5, +0x3c33b923,0x3c5a5bfe,0x3c7f5aae,0x3bbf5942,0x3bce5b6d,0x3aa38bc6,0x3bb0cbfc,0x3bf62130,0x3c3c71af,0x3c7a5b51,0x3c946f23,0x3cda6b11,0x3d094d7e,0x3cbb18d5,0x3c57f797,0x3c0a0abd,0x3c005d1b,0xbaa2a06a,0x3bc6dfce,0x3c2a49cb,0x3c900627,0x3c8b7e13,0x3c9b36fd,0x3cb00c06,0x3c883538, +0x3c5d2071,0x3be96fe4,0x3c3a04c6,0x3c2b9b8e,0x3c121bfd,0x3c21c4b3,0x3c0906f9,0x3c386a8d,0x3c830e89,0x3c5477c7,0x3c69a7d6,0x3c4faf13,0x3c0086bb,0x3bcf37ea,0x3c2d5688,0x3c0b74f8,0x3bca44c5,0x3c1a9543,0x3c2f3b31,0x3c6ff5ca,0x3c5dd32e,0x3c7befb3,0x3cb269e2,0x3c90f4e1,0x3c658362, +0x3c37c0dc,0x3be0756e,0x3c219db4,0x3c320de9,0x3c31545e,0x3c1322a6,0x3c0697ea,0x3c1db939,0x3c326991,0x3c2f39d7,0x3c0ac768,0x3bd07c52,0x3ba45f81,0x3b9eeae0,0x3bce5369,0x3be1b1b3,0x3c10515c,0x3c02fd6c,0x3c500a21,0x3c808dbc,0x3c3f07b0,0x3c5d69d1,0x3c2596fa,0x3c174332,0x3c1439bb, +0x3bd3c662,0x3c0ec5a4,0x3c98dbee,0x3c2c0c1e,0x3c81ffe1,0x3c44d0c0,0x3c936e05,0x3c8a00de,0x3ca249ba,0x3c6337fb,0x3c3ddf52,0x3c1ef3a2,0x3c5812f6,0x3c4d0166,0x3c390e83,0x3c63fc81,0x3c7fcc22,0x3c900232,0x3c5838b0,0x3c1a6d72,0x3bdd523b,0x3ba8a5a1,0x3b6e6ef9,0x3b351ad5,0x3b5ae320, +0x3b5bbeb0,0x3b380415,0x3b2a42f9,0x3a820bcd,0x3b6e012f,0x3c0d7035,0x3c199d5f,0x3c3fb224,0x3c566531,0x3c67fe2c,0x3c77076d,0x3c88a0d8,0x3c89d74d,0x3c531201,0x3c5fb81d,0x3be6fbed,0x3c416828,0x3c57770d,0x3c04d713,0x3c0937c9,0x3c75d712,0x3c9b0cc9,0x3c042ae9,0x3c06710a,0x3c0b842e, +0x3c0e0d85,0x3c0cc4b7,0x3bf77390,0x3bf7aa9f,0x3bf56b5b,0x3c01f746,0x3c013b77,0x3bf84509,0x3bee5980,0x3bd80fce,0x3bd974f9,0x3bdf023f,0x3bf32b4c,0x3c028d72,0x3c0542b1,0x3be34bb7,0x3c8d2c92,0x3ca8a995,0x3c46f57a,0x3c910bd2,0x3ca85f36,0x3c3d5f3c,0x3c4038ce,0x3c3cb718,0x3c44b383, +0x3c608ebd,0x3c67e7c1,0x3c623cd2,0x3ca21600,0x3c8979cb,0x3c4858e0,0x3ca1dfab,0x3c84046e,0xbc8fc787,0xbcb7abf2,0xbc17aadb,0xbc376d09,0xbc4752fd,0xbc416628,0xbc67eff4,0xbc6d858c,0xbc5b3d47,0xbc529404,0xbc4db67a,0xbc4419ad,0xbc3f6620,0xbc3e7bf4,0xbc4876ab,0xbc3fe50e,0xbc45b59c, +0xbc480568,0xbc46be11,0xbc375472,0xbc31b17e,0xbc993b1e,0xbc5929b1,0x3c6266b6,0xbca039b9,0xbc7553eb,0x3c2fac3d,0x3c1d00f8,0x3c195bff,0x3be64464,0x3bd72505,0x3bb38ecd,0x3b36bb53,0xbc67fe59,0xbca74711,0x3bf1bcab,0xbc50653f,0xbba7f132,0xbc8b5a45,0xbc70c924,0xbc924051,0xbc7e3f16, +0xbcc8b7cd,0xbcdf2ed7,0xbcc430f3,0xbcb947d7,0xbcb111ab,0xbc9aee40,0xbc8e1e89,0xbc91bd43,0xbca52574,0xbc8ed99b,0xbc936eea,0xbc90fbf7,0xbc87f20d,0xbc63e603,0xbc3d7cd2,0xbc043c14,0xbc02b8f4,0xb99c6f00,0xbc50088e,0xbc702f6c,0xbadb8c7a,0xbc4fea49,0xbc403326,0xbc4073b9,0xbc244c33, +0xbbc66b7f,0xbb937a24,0xbbc86763,0xbc0fcda9,0xbc3a420f,0xbc17142d,0xbcafddc1,0xbc766b63,0xbc6264db,0xbca7d063,0xbc8052ad,0xbd086279,0xbd1c86d8,0xbcfc422e,0xbcef990d,0xbcd15086,0xbcbded9e,0xbca3246f,0xbca26915,0xbcbbfedc,0xbcaabe47,0xbcac7fbe,0xbcb6ce87,0xbca2ef48,0xbc7a0685, +0xbc46bbaf,0xbc2a3161,0xbb90a984,0xbc15908f,0xbbb423a4,0xbb0b8135,0xbc2ef738,0xbbae5892,0xbc71e6bb,0xbc90a16f,0xbc04254c,0xbc06edf9,0xbb9626e0,0xbb9237fc,0xbbc62f86,0xbc5fe2ae,0xbc84f82d,0xbc743a2f,0xbc0199c4,0xbc87fef5,0xbcbdfbba,0xbc67286d,0xbd27bc81,0xbd5798e4,0xbd339532, +0xbd2e3e64,0xbd166d3b,0xbcf2bebe,0xbcd35fa8,0xbcd11d90,0xbd09a9db,0xbcdf2794,0xbcd51d79,0xbcd34fcf,0xbcafb17c,0xbc652cb9,0xbbe869bc,0xbb72af35,0x3b597afb,0x3bbb5e02,0x3ba8dd56,0x3b25a4ff,0x3b7ba872,0xbbea2b6d,0xbb4c7782,0xbb956d5f,0x3ab0fc89,0x3b4afc98,0x3b5340ed,0x3b5581d8, +0x3b2fbb2f,0xbc52f74f,0xbbe0679c,0xbc9babc9,0xbc5112c4,0xbbf76150,0xbcb3f98a,0xbc1a24bf,0xbd4b98fe,0xbd7830ad,0xbd46d99d,0xbd3e574b,0xbd19c89c,0xbd03865e,0xbccedc2a,0xbcc82dc9,0xbcffea06,0xbcec5a28,0xbcefbd64,0xbcf7b16a,0xbcd7f4e4,0xbc845000,0xbb4a2e33,0xbac23593,0x3c167c96, +0x3bedd8dc,0x3bf8d889,0x3c13bdba,0x3c27e8c0,0x3bc6e9c5,0xb99e3162,0xbb07fa5f,0xb9cfe117,0x3ba63b50,0x3c17cee4,0x3bfadba9,0x3bbe2eb4,0xbc2af94f,0xbc1cfbf0,0xbc4df6f5,0xbd80835e,0xbd574c6c,0xbd74a24e,0xbd6d5755,0xbd700ba2,0xbd580724,0xbd13b9a1,0xbc95a36d,0xbb9422dd,0xbbaf13d2, +0xbb9e5492,0xbbe2a553,0xbc7c0407,0xbc74cbba,0xbc55adae,0x3bacdb24,0xbbca71d8,0xbc49743a,0xbc9179a9,0xbba2ef3a,0x3b84c7bc,0x3a8f8d87,0x3c433388,0x3be1f027,0x3be26754,0xba46fe58,0xbb19c66c,0x3ab3baa0,0xbc0ed5b3,0xbbcd8ab1,0x3bb31c08,0x3b2d1c18,0xbb88b59c,0xbbbf7aa5,0xbc392080, +0xbd0ab4ad,0xbcea7198,0x3c77b28d,0xbaa7de0e,0xba73f95f,0xbcb7f4c8,0xbcaf984e,0xbca44dc2,0xbc21bb71,0xbc198073,0xbc9cd24b,0xbca20af4,0xbcaec6ca,0xbcde7945,0xbc773803,0xbc8745a7,0xbd105dc6,0xbce6edde,0xbc93cd2a,0xbc149710,0x3b87172d,0x3b2a4ca8,0x3c4b6109,0xba2fae1b,0xbaba06cf, +0x3aae9c41,0x38496542,0xbaacd4e9,0xbba105cb,0xbbba1f6a,0xbbaf37b0,0xbc58b058,0xbc32a39e,0xbba98041,0x3bacea9c,0xbcafdac0,0xbcb48884,0xbd36d1e5,0xbd795647,0xbd73f360,0xbd8e18fd,0xbd9f59ac,0xbd916eea,0xbd83d7c2,0xbcbb397d,0xbc0cf5a5,0xbcc196ca,0xbcd7ea4e,0xbd1a954a,0xbd2319aa, +0xbccb287c,0xbc86dd90,0xbc22eb7a,0xbbdd1731,0xba88ffb8,0xbbdb9c87,0xba8c0512,0x3bc54812,0x3c1e8617,0xbbb38ce9,0xbc143e21,0x39b9cd27,0xbbca1487,0x3ac1791a,0xbba294cc,0xbb648065,0xbbaa7813,0xbb742d38,0xbc63339c,0xbc613750,0xbc53478a,0xbbf0cc44,0x3c07954d,0xbbb25270,0xbd23774b, +0xbd7ea430,0xbdcf27d0,0xbdbf5542,0xbdaf3a85,0xbd83e102,0xbcfe8406,0xbcd19a87,0xbd436ffc,0xbd44745a,0xbd5097f9,0xbd070fa3,0xbcc6684f,0xbc3b011d,0xbc101d96,0xbb9da805,0xbb14b7c6,0xbb9e9c38,0xbadb898e,0x3be7581c,0x3c0aa37d,0xba8802e2,0xbb4fff8b,0x3ac1ac12,0xbb4fee6d,0xb9c05d90, +0xbb7d65e4,0x3b289388,0x3b0b4543,0x3b48d434,0x3ab3a2d5,0x3b857ccd,0x3ba97c5b,0x3c4385be,0x3d5b422c,0x3d5d8b01,0x3cd8802b,0xbc1459be,0xbd4c1cc4,0xbd8fb86d,0xbd8c8d7f,0xbcf824cf,0xbccd55e3,0xbcbf0dad,0xbd3176d6,0xbd6988b4,0xbd52be84,0xbcd7379a,0xbc96dc82,0xbc5551e9,0xbcb1fc7e, +0xbc5581ba,0xbc088a2c,0xbc13266b,0x3b56a522,0x3b770f77,0x3bede8c3,0x3a943bef,0x3b16f1c7,0x3b09832b,0x3a5c758c,0xb89c5e79,0xb8fdc9ba,0x3b2cceff,0x3bddec04,0x3bbcc9d2,0x3c8bc5ea,0x3caba5c1,0x3d1c3d9f,0x3d1b23a8,0xbc37cb2a,0xbce3ff68,0xbd8a1b12,0xbd459fea,0xbcb9b2b0,0xbc6d1580, +0xbc05b343,0xbc3df950,0xbcd0732f,0xbd32c55e,0xbd6df4a2,0xbd928aad,0xbd765780,0xbd64a665,0xbd2eb5e9,0xbcd01327,0xbc1c6689,0xbc2438f3,0xbbdc1fba,0xbc1dac17,0xbbe49de8,0xbad5f951,0x3c4c4c03,0x3b2b5845,0x3a49a037,0x3938d567,0x3bf5d886,0x3c33df8d,0x3bbd8b42,0x3c24627f,0x3c054bb6, +0x3c430a04,0x3c02edc2,0x3c706f6d,0x3c14eb25,0x3bb148b4,0x3cd07f0f,0xbc0f4f28,0xbc243663,0xbc52a9fd,0xbc5f12fc,0xbc2ceee4,0xbba8bfb5,0xbb0f05ef,0x3c859ec2,0x3cc32931,0x3c97de91,0x3c3d0792,0xbb5eaf3b,0xbc769493,0xbc54b5cb,0xbc7728c4,0xbc8b96d4,0xbc1f5e93,0xbbba91d3,0x3ba54212, +0x3bc9e831,0x3ad9dd44,0x3aabc6b6,0x3b8cd2b0,0x3bd82543,0x3bcefec8,0x3bbb2da0,0x3b0f422e,0xba3ecc64,0xb9ef5672,0x3aa63452,0x3bcc42d4,0x3bbab04a,0x3bcb65a3,0x3bf9bd88,0x3b9f102a,0x3900c6bc,0xbb6bf7ab,0xbc3d719d,0xbc249faa,0xbc4d5c0a,0xbc1958ff,0xbc0defeb,0xbc182d15,0x3a2f3fa9, +0x3be6309d,0x3c417374,0x3c103c0f,0x3bde248d,0xbb34aa03,0xb8e86ed5,0x3b1cdb4b,0x3b7fa2be,0x3b94e6db,0x3b3e8a39,0x3ad25f70,0x3b8c5abc,0x3c090c4f,0x3c0647e3,0x3bfb67f6,0x3bec1e21,0x3bdde209,0x3babcb61,0x3bf59b11,0x3c049464,0x3bd623e6,0x3bf34c06,0x3c05436d,0x3bd721df,0x3bd5bc5f, +0x3be4d56f,0x3bbabbb8,0x3b1bed68,0xbacd82f0,0x3aae008b,0xbb8d597c,0xbbeba23d,0xbc23f710,0xbc41cd04,0xbc6fdb77,0xbc520693,0xbc1d599c,0xbbcd61a1,0xb9ca9f18,0x3b92d904,0x3c0c554f,0x3c337bc5,0x3c5e72d6,0x3c7a2b08,0x3c2bc50e,0x3c436398,0x3b93cbf3,0x3b3cc33a,0x3be22f70,0x3bb43aa9, +0x3bae73a5,0x3b4ca9e7,0x38f352de,0x3bb5834d,0x3a358a94,0x3acd9faf,0x3b945ce2,0x3bc0edf1,0x3beef79d,0x3b52d1d4,0x3c033b47,0x3b2b3abc,0x3a896614,0x3c3687cb,0xbb0d60a5,0xbb6d5f22,0xbb4f5dea,0xbb20ad23,0xbad9fd20,0xbaa5b59c,0xbaea07d9,0x3b14a127,0x3b52be89,0x3b7d82d3,0x3b609deb, +0x3a942f8b,0x38e93cf0,0xba89b15b,0xba81ef0f,0x3a88d230,0x3b3a403c,0x3bd21ee8,0x3be0c27c,0x3b1e5537,0x3a4fd3e6,0xbab5c373,0xbb011945,0xba6f2ef2,0xbae00a3e,0xbb0c926d,0xbbad57c3,0x39c8436b,0xbb01abc3,0xbac65cb5,0x3b59a0cc,0xbb106663,0x3ad7e6e0,0x3c12a399,0xbbac4146,0xbbcf96e5, +0xbb4c6f1e,0xba8c4455,0xbb0715d9,0xbb419176,0xbb71f2b6,0xbb90f487,0xbbb3cb9c,0xbbb4d60f,0xbba4d4ab,0xbb849ce9,0xbb32465d,0xba120bf1,0x3a9fa05b,0x3b01236f,0x3b1dff29,0x3b30f7d9,0x3b012e99,0x3aaaeda2,0x3b1b466f,0xbb73a745,0xb8d94fbf,0x3c5eda3d,0xbbbb4310,0xbb1f28f0,0x3c61edf7, +0x3c78d397,0x3c6aaa84,0x3c5ee541,0x3c67f2d1,0x3c545529,0x3c3cb121,0xba7de037,0xbba4b419,0x3c5a6cef,0x3a9c8b6e,0xbb4b5f6f,0x3cb07214,0x3cb2f7d2,0x3c9ed9d1,0x3c61cd5e,0x3c6841d1,0x3c67582e,0x3c876701,0x3c8e3f09,0x3c8c489b,0x3c896f75,0x3c88c6bd,0x3c8512a9,0x3c845fc8,0x3c829d8a, +0x3c7e4ceb,0x3c8191d5,0x3c870dda,0x3c85ae0e,0x3c881e1e,0x3c78acf3,0x3c8e11f5,0x3c5d2e01,0x3b33b59a,0xbcd18aa6,0x3c9a9090,0x3ba8a947,0xbccd03af,0xbcc85514,0xbcc0cc57,0xbca4c167,0xbcbb8bca,0xbcab1776,0xbc8631f2,0x3b4180b8,0x3ca4ffdb,0xbcab1ccf,0xbadd5cf2,0xbc895efd,0x3c9cc4c7, +0x3c7ac417,0x3c810129,0x3c71200f,0x3cc4454c,0x3ce38074,0x3ce1503d,0x3cdd86bc,0x3ce08115,0x3ccda27e,0x3ccfb0d0,0x3ccd112f,0x3cc67e2d,0x3cc243b7,0x3cc1e184,0x3cb4b1bb,0x3cabff7d,0x3ca1a79c,0x3cb11dee,0x3abc604f,0x3c0e3a52,0x3a832ec2,0x3c20779c,0x3c972e95,0xba9f112f,0x3bf1754b, +0x3a511b7f,0x3b9c1570,0x3ba83850,0x3c859b2b,0x3b5af31d,0x3bcb6fce,0x3c0bb882,0x3a6739f7,0x3bb95603,0x3c2187f0,0x3cdb9d6a,0x3c358f4e,0x3c5a9765,0x3c352efb,0x3cd53285,0x3d03474c,0x3cfcefa2,0x3cffca8b,0x3cf5a921,0x3ce815dd,0x3ce514af,0x3ce21e83,0x3cbe7cd3,0x3cd3cfed,0x3cd895cb, +0x3cdb575a,0x3cc3212b,0x3cc5adb9,0x3c86c81a,0x3b8ca13e,0x3c17a9e7,0x3c8d8b97,0x3c45b689,0x3c0c6fa1,0x3c2d33f6,0x3afdf317,0x3c862d62,0x3bd710f7,0x3c2d9247,0x3bf77962,0x3c35057b,0x3c76ac43,0x3c59f5f8,0x3a4f2018,0x3cb77a00,0x3b9a9b21,0x3c35213f,0x3c6e9026,0x3c22c6dc,0x3c030031, +0x3cedc3d5,0x3d31c655,0x3d2df2d6,0x3d38f440,0x3d33824d,0x3d18bd30,0x3d223e68,0x3d165511,0x3d105b76,0x3d1284df,0x3d07648a,0x3cf319e0,0x3cdd20bc,0x3cc20147,0x3ca3c2aa,0x3c69279e,0x3c92f3bd,0x3c2d2ad6,0x3c917801,0x3c4e499f,0x3c2e1e15,0x3b2db196,0xbb4255bb,0xbb1243c6,0x3baf7d4c, +0x3c109579,0x3c2d15db,0x3c2abae1,0x3c1189cc,0x3b191a4e,0x3c338474,0x3cdac28c,0x3cc55378,0x3c3e92c7,0x3c0a36ee,0x3b39aa99,0x3cf9a3ae,0x3d269a0f,0x3d2b506d,0x3d351540,0x3d2784e5,0x3d156b7e,0x3d123d72,0x3d0fbd0f,0x3cd6186e,0x3d0b6c1f,0x3d1174cd,0x3d104694,0x3d04c2cb,0x3ce465a5, +0x3ca10fab,0x3bda8044,0x3c80d1e0,0x3c88c5e4,0x3c890a49,0x3c7353e3,0x3c0ba4b4,0x3b6f298c,0xb9eca255,0xb9a11bc2,0x3a118ce7,0x3bf6f6df,0x3c0482e3,0x3c72c47c,0x3c8afb13,0x3b0888d7,0x3c67f545,0xbc287ad7,0xbb83f549,0x3c4e4306,0x3c16a1d5,0x3ca37cf4,0x3cc56e38,0x3d0e0169,0x3d39c069, +0x3d1478cc,0x3d0d5f5e,0x3d2867e4,0x3ce8c3bc,0x3c8eb741,0x39b22e4b,0x3c1de34a,0x3c3aafd9,0x3c000ade,0x3c2ca9bb,0x3ca6fe0f,0x3cd373d0,0x3c7af854,0x3c8f8a24,0x3bc2330b,0x3c9a1027,0x3c591564,0x3be8164a,0x3a4f00b6,0xbb88cc09,0xba1b55cd,0xbb84fab0,0xbad5a375,0x3bd36967,0x3c21b173, +0x3c1ac230,0xbc0e3b7d,0x3c82c341,0x3b3f8474,0x3bc99836,0x3caee739,0x3c702a96,0x3bf53f55,0x3c89ffaf,0x3c54d977,0x3aaf8a72,0x3c94269e,0x3c949cc0,0x3c44d7ae,0xbb331714,0xbbed9258,0xbc13da83,0x3c250230,0x3cd1cf83,0x3d3f3190,0x3d12ef4f,0x3cfce07c,0x3c4babe3,0xba6c9416,0x3c46e12d, +0x3c8f86a6,0x3bf1c99e,0x3b7627d8,0x3b44a176,0x3b2f612b,0x3b378549,0xbb83fb10,0xbb44d6c2,0xbb8570ee,0xbc0a6b7c,0xbbc7d3f1,0x3b94b86a,0x3c95dc23,0x3b682313,0xbc90ec02,0xbce143ea,0xbd394f4d,0xbcc54554,0x3c90b124,0x3d184f07,0x3d44ef57,0x3d4170ce,0x3d0c0054,0x3ca01094,0x3c81f569, +0x3c506c10,0x3c9a3461,0x3ccd6748,0x3cfbf3a1,0x3cdebf05,0x3c8395ef,0x3c53d7a4,0x3c3c47b6,0x3c806eb3,0x3c790c8b,0x3c2f762a,0x3c480227,0x3b86e9c7,0x39de3f60,0xbaf05fdb,0xbb0fd317,0xba7a309e,0xbb4b3b1f,0xba1dd967,0xbb26f94d,0xbaf77f88,0xbbd63845,0xbc0eac48,0xbc27583c,0xbc5c419c, +0xbb1a3a86,0xbb0e270d,0xbbc9a9d7,0x3c0bc37a,0x3d961219,0x3d3f7262,0x3d4ea499,0x3d2f64b7,0x3d10a25c,0x3cbe26f2,0x3c749171,0x3caae797,0x3ca7f500,0x3ce04188,0x3ced807c,0x3cddefa2,0x3c4f12c7,0x3c3600a3,0x3c4028b8,0x3bd02a3b,0x3c6ef277,0x3c384b7b,0x3c09cbd8,0x3b5ef627,0x3b113b96, +0x39a83781,0xb8827a40,0x3a710e60,0xb7eb8bbf,0x3b708927,0x3b9a9a59,0x3ba4d878,0x3b2ecec3,0x3bb96469,0x3bba2f92,0x3c4e3aee,0x3d5ef42e,0x3d997081,0x3dca83f8,0x3db6b38d,0x3debce1e,0x3d4da63c,0x3c8f31ab,0x3a2d08df,0x3bda5bf8,0xba188816,0xba70edbe,0xbc9ae9a6,0xbc81e56d,0xbc5c992f, +0x3bf3e398,0x3c8eb68c,0x3cac648e,0x3cbf4e79,0x3c8aade3,0x3b38302d,0x3c2cc8af,0x3c46cb46,0x3c1b888e,0x3be62575,0x3b68fa66,0x3b36f432,0x3b32a2a9,0x3b41557f,0x3a99a283,0x3b7703bd,0x3beb6a04,0x3bda5c13,0x3ca07b6e,0x3d0a4370,0x3d11165d,0x3d4bb118,0xb864b29c,0x3ca60763,0x3da91d58, +0x3dbee089,0x3dc7e5a5,0x3dc6d9ef,0x3dbb1b31,0x3d80cfc5,0x3cfaf6d5,0x3c4a6fe6,0x3c7e169f,0xbb80a31b,0x3ba765b2,0xbb6b0fdc,0xbc4bd08b,0xbc7b71a6,0xbc15bc08,0xbc90a1f9,0xbc1f0300,0x3b448e7c,0x3bbf42d9,0x3c0b1345,0x3c068cf3,0x39981fb6,0x3aa4be33,0x3bee52ac,0x3c0ce675,0x3c22335e, +0x3c2a98fa,0x3c698151,0x3c8e8a44,0x3c8b2826,0x3c922da4,0x3c0b5b7a,0x3c91818a,0x3ca109f4,0xbad1971c,0x3d2b1074,0x3d32abc7,0x3d180d05,0x3d30758b,0x3d235cb0,0x3d26ea6f,0x3d4e6d2f,0x3d28b8bb,0x3cf651dd,0x3c95feb7,0x3caae901,0x3c86e3a2,0x3c1a9f19,0x3c26fd1b,0x3bfedfc8,0x3a72a426, +0x3ae9c60b,0x399c167f,0xbb7b8a52,0x3adb5f88,0x3c1158f3,0x3c7d6bbb,0x3c65c150,0x3c4f1885,0x3bfb2471,0x3be71900,0x3bbf9ee1,0x3c0f67df,0x3be45bbe,0x3c2b9943,0x3c2e1dd4,0x3c293f12,0x3c89229b,0x3c915a48,0x3ce5ae7a,0x3c3e316c,0x3c6b7c26,0x3cc4ed1e,0x3ca72140,0x3c80cb72,0x3cbe64e9, +0x3cecb443,0x3d13577c,0x3cfef1c3,0x3cf95396,0x3cf0ce5f,0x3ce3a345,0x3cc85f71,0x3c7d3732,0x3c80dcb9,0x3c4c603a,0x3c28e00a,0x3c434f9d,0x3c357a00,0x3c3e85f9,0x3c1c49ac,0x3c02e8e9,0x3c75206f,0x3c3054ae,0x3c25a46e,0x3c0d2450,0x3c06f6d9,0x3c038b32,0x3c31d7d9,0x3c4a487f,0x3c4986a6, +0x3c551169,0x3c5fc6bc,0x3c550f57,0x3c3dfd22,0x3c32ea03,0x3c11e5dc,0x3cb535d9,0x3c9dc0d1,0x3c986d60,0x3ca6f1e9,0x3ca3f5c2,0x3c99ed28,0x3c997a71,0x3cabd383,0x3cc2e715,0x3ccf9abe,0x3ca1da6a,0x3c87ab2b,0x3c5ea488,0x3c8263cd,0x3c964f8c,0x3ca6d429,0x3c982b1f,0x3cb6f7e3,0x3c8d74c3, +0x3c8bcd14,0x3c52ae2d,0x3c70c6ef,0x3c462715,0x3c3f3613,0x3c4af57d,0x3c0d4136,0x3ca64aea,0x3c17dfc6,0x3c7f9883,0x3c2b36a3,0x3c522087,0x3c870215,0x3c2da290,0x3c9680f1,0x3c9191fc,0xbbcd718f,0x3c08edbb,0x3c431e80,0x3c6a82ff,0x3c800bf1,0x3cae573f,0x3ccf4f68,0x3cf1cc52,0x3cc296fa, +0x3c908f8a,0x3c5b2b82,0x3c4112a6,0x3c183c7f,0x3bc030f5,0x3bd2a68d,0x3bdc6f85,0x3c054f6d,0x3c1cecf1,0x3c1e0610,0x3c87a6d5,0x3c13ab4b,0x3c4bc8d5,0x3c36a5af,0x3c49f5e3,0x3c0a736d,0x3bf163a5,0x3bef9998,0x3c03bcdd,0x3b8696e4,0x3be04a18,0x3c10380a,0x3a1363ab,0x3be32654,0x3af25b74, +0xbbc6d037,0x3c40a68d,0x3c521c94,0x3c669b8f,0x3c47dca7,0x3c508684,0x3c4e68a9,0x3c4cf0f5,0x3c39d41c,0x3c41cc8d,0x3c40cf2b,0x3c529944,0x3c535e20,0x3c46b0bf,0x3c3de1c1,0x3c363ce1,0x3c495e85,0x3c56eec5,0x3c67a128,0x3c6bc2e0,0x3c60c58c,0x3c7bcab2,0x3c604b20,0x3bc7e7f2,0xbc01175d, +0x3c5af979,0x3bc4ac71,0xbc1fd410,0xbc34da25,0xbc11def9,0xbbf4dca2,0xbc1052f8,0xbbf1262f,0xbb8fff44,0x3beb2b35,0x3c552460,0xbbb4d03c,0x3b66abc0,0x3c8b7132,0xbc96551e,0xbc714760,0xbcaeaab3,0xbc5edc44,0xbc61eb84,0xbc5299ce,0xbc791b2c,0xbc845d54,0xbc82f3a9,0xbc83fdc5,0xbc83468f, +0xbc7a3152,0xbc73e24c,0xbc756fac,0xbc807b37,0xbc806472,0xbc862495,0xbc87010e,0xbc859572,0xbc687f9b,0xbc8f9c1f,0xbb8b18e1,0x3c0b9baf,0x3cfe1cba,0xbc1aa772,0x3be20b5b,0x3cf514f3,0x3cf11e7d,0x3ce40a41,0x3cc40b87,0x3cf1e89e,0x3ce822b0,0x3cc6c82f,0x3c26f3db,0xbc40b946,0x3ccb3ce4, +0x3c5a7dbd,0x3cfe940e,0xbc623e9f,0xbc827155,0xbc812057,0xbc58bcd1,0xbcb97401,0xbcd4337c,0xbcd52992,0xbcdf5e56,0xbcdce811,0xbcbe23a6,0xbca4f9e4,0xbca4c9bc,0xbcc42ad0,0xbcbc44b1,0xbcc3f338,0xbcc0e805,0xbca871ec,0xbc9ed107,0xbcbad8a8,0x3c17f366,0x391e8162,0x3c137847,0x3b952236, +0xbc1250cc,0x3be4bb08,0xbb7d661d,0x3b869233,0xbad00a59,0x3b75abc3,0xbc3fa284,0x3b95cb9b,0x3bbd319b,0x3afc8a52,0x3b2320cd,0x3ac3727b,0x3b8a7881,0xbcc322df,0xbc5f2337,0xbc6b071a,0xbc017c5b,0xbcbc7419,0xbce9e42a,0xbce97cbf,0xbd03eb15,0xbcf73847,0xbcd7dc64,0xbcac85b2,0xbcaef7f7, +0xbcd81979,0xbce2bedf,0xbceb2ed0,0xbd02cc2e,0xbcc5e0d2,0xbcd87f04,0xbc366629,0x3c5a132f,0x3b5287d3,0xba0ae9f1,0x3bf63249,0x3ba706a3,0xbb85bd37,0xba64d53c,0xbca8aa2b,0xbb3a1481,0xbbf3647c,0x3b982044,0xbb3a9415,0xb9549ea9,0x3a835fed,0x3ad8c5f4,0xbc731a61,0x3c858948,0xb91065ff, +0xbc9cf823,0xbc2ae499,0xbbb924c5,0xbcdf0ab8,0xbd23c97c,0xbd25282e,0xbd479ad5,0xbd390021,0xbd10d493,0xbcd3ace1,0xbcbeb388,0xbd1815f6,0xbd135304,0xbd131bc0,0xbd16ed99,0xbced80d4,0xbcd6730a,0xbc838fa2,0x390ee6c0,0xbbe2b1ab,0x3c1334c2,0x3b003689,0x3c235b77,0xbb64b20d,0xb9a29989, +0xbb799375,0xbb824b1e,0xbac99006,0x3bed03c0,0x3a4be79c,0x3c56afe1,0x3bf90446,0xbc1e09b9,0xba8812c6,0xbc2cadf8,0xbc2b6a5f,0xbc931dd6,0xbbfc50d1,0x3bad42a6,0xbcb83a2d,0xbd02f88b,0xbd1b1b81,0xbd3e29de,0xbd30ca2e,0xbd10306e,0xbcc45f3a,0xbcc2c924,0xbd0aa907,0xbd1b182c,0xbd28e513, +0xbd3b4c15,0xbd0da32d,0xbcf408b7,0xbc6e371f,0x3cbb4cc4,0x3b5f42b3,0x3c27b3f6,0x3c213da5,0x3c037cdb,0x3bcc8305,0xbaaf5ba7,0xbb82d60e,0xbbd9351c,0x3ae20205,0x3ba9472c,0x3bfc230e,0x3c134e15,0x3ba5e8ad,0xbc01c5c1,0x3baa53c3,0xbc3f9a11,0xbd240668,0xbd61ffdd,0xbd4b5384,0xbd555597, +0xbd79bbf8,0xbd89e8d9,0xbd60efb3,0xbd49cfc1,0xbcfcf576,0xbc6a951a,0xbc9a1e9b,0xbc88acb0,0xbc40628f,0xbc23e736,0xbc15ed4a,0xbc8ba188,0xbca93eff,0xbcd13823,0xbc87468b,0x3ae89226,0xbb8ede61,0x3b67901a,0x3bfbb87e,0x3c45db00,0x3b98c2cb,0xba244b34,0xbb857891,0xbaf73c3f,0xbc1bb462, +0xbbd6562d,0x3954cd06,0x3b92b46b,0x3bcf6579,0x3c6be432,0xbca53919,0xbc12260a,0xbca08f6b,0xbc6264f2,0xbc325d1c,0x3a16527e,0xbbd19b1f,0x3a1567ce,0x3aab2a9e,0xbb0c42d2,0xbc0ee5b1,0xbade1eae,0xbc32d74e,0xbc4ec163,0xbc887bcb,0xbcf89941,0xbd188ac7,0xbd58f7e5,0xbd054dcf,0xbce8576e, +0xba2947ff,0x3ca4f9fb,0x3bf0044d,0x3c19a355,0xbb0c34fa,0xbb877149,0xb8b1ab0a,0x3ab1e163,0xb9714d13,0xbbbfca48,0xbbb22ad2,0xbbca664c,0xbbebfcf3,0xbb1279af,0xbbda50b8,0xbbd1c3ba,0xbbd56f64,0xbcd1f270,0xbd3b9af4,0xbd59a4d9,0xbd3f693c,0xbd256e69,0xbd39a2f5,0xbd50bdc4,0xbd7bb7ec, +0xbd1f2f4f,0xbccdc4a3,0xbc787ec3,0xbd221116,0xbd489bb4,0xbd4f3ed3,0xbd2c5adb,0xbcfa5c78,0xbcaa081b,0xbc7f8b9a,0xbc7d90a6,0xbc2e5bfd,0x3b6d8bb7,0x3bb55c46,0x3bbf4efe,0xbbf7f511,0xbba45be9,0xba1ee8a4,0xbb639870,0xb9896c48,0xbbada541,0xbb536a10,0xbbb249df,0xbb895ec1,0xbc404748, +0xbc3f04bb,0xbc98c690,0xbc296a26,0x3b505b20,0xbc43d6d2,0xbcf96e68,0xbd2da707,0xbd900014,0xbdb17037,0xbdcbdc8c,0xbd91cc4b,0xbd792940,0xbd31d4af,0xbcddefe6,0xbd518083,0xbd6b9d69,0xbd751ce1,0xbd3ce9ec,0xbced332f,0xbc3d1da1,0xbc2755f3,0xbc583a38,0xbb981294,0x3b913864,0x3b7a7194, +0xbba6c786,0x39c403f7,0xbb798e49,0xba7fc251,0xbb5eb809,0xba91ce10,0xba599712,0x37a99e59,0x3a926460,0xbb528e01,0x3b8839f2,0x3a4982ab,0x3c12de0e,0xbb15e7fd,0x3d8584e0,0x3d49556c,0x3c392e98,0xbcd92c2d,0xbd9390e0,0xbda4eaa2,0xbd8b60c0,0xbc9505d8,0xbcc6885f,0xbc91f3cb,0xbc9772df, +0xbc8c0d20,0xbc97c899,0xbc8ba099,0xbcb73311,0xbcdac47b,0xbcd9f71b,0xbc9a35cc,0xbc4e05fe,0xbc12ca7e,0x3c07ae38,0x3b9b4d0c,0x3b81ff6b,0xb94be710,0xba50b78a,0xbb13dd31,0x3a15ba9e,0x39b36022,0xbaba8e37,0x3ab91391,0x3bbaa74d,0x3b16bd21,0x3c7387f7,0x3c9cdd67,0x3d2c25bb,0x3d41f752, +0x3cea62f9,0x3cb6af54,0xbcd15ae4,0x3a0a5c74,0x390554ce,0xbc0418f5,0xbcf269cc,0xbd4f4dc6,0xbd582d7b,0xbd6dbe81,0xbd83994d,0xbd2fe9ca,0xbd03cab0,0xbd37f5b6,0xbcc86fc3,0xbc8b0bc8,0xbc7a5ac2,0xbc970f45,0xbc9d6dd8,0xbc9c8400,0x3ac06ec3,0x3b0a43e3,0x3a727df9,0xb97db0d8,0x3abc44e2, +0x3c05156b,0x3bafd86c,0x3b7d4075,0x3b8ec36e,0x3c2a7562,0x3c1982c6,0x3c7c51a1,0x3c295e0a,0x3cb87d8a,0x3ca6e8b3,0x3c23d4a6,0x3d1bf7a7,0x3985425c,0xbc188181,0xbc30830c,0xbc4c646a,0xbc2c3cf5,0xbbd24375,0xbbce8452,0x3c17beb1,0x3c6ddf35,0x3bf468df,0x3ad0ae47,0xbc0507e0,0xbc7469ed, +0xbcadf317,0xbcc3a1f0,0xbcb65bff,0xbc98e48f,0xbc63fc92,0x3a132070,0x3b58642a,0x3a93efaf,0x3c3920d6,0x3bf33439,0x3bd179d8,0x3bbfca63,0xba647e1b,0x3b5a0de9,0x3b809ee6,0x3bdbe7ee,0x3bce0542,0x3bb7713a,0x3c2d7229,0x3bee8590,0x3c1017cf,0x3c4085b5,0x3c60c80b,0x3beaa6a2,0xbc2e2658, +0xbba8be63,0xbbd61632,0xbb921d37,0xbbb5f094,0xbc2dc517,0xba1f344f,0x3b97f29a,0x3c1ac616,0x3bf1db38,0x3bcb6c16,0x3b1075dc,0xbb147c83,0xba230c11,0xba8da0b4,0xbad7873a,0xbb0642f9,0x39629b52,0x3c00d53a,0x3c36b33c,0x3c127d9e,0x3c4845fb,0x3c1206ad,0x3bfff3f5,0x3c3822b9,0x3c445e03, +0x3c45429a,0x3c26f6ef,0x3c2432c2,0x3c2545a9,0x3c01882d,0x3c256d3e,0x3c83cfce,0x3c4f2954,0x3c867ea9,0x3b08562b,0x3a31ccb4,0xbb0a871c,0xbbfab6d2,0xbc168d28,0xbc2164ce,0xbc29a682,0xbbc4f9d1,0xbb078eb2,0x3b801584,0x3bf064db,0x3c4c0d2a,0x3c830211,0x3c86d314,0x3c8831fc,0x3c546de1, +0x3c4be880,0x3c197883,0x3c1b192b,0x3c145698,0x3c24f972,0x3bda0b87,0x3c0097e6,0x3c0f3369,0x3c0a472a,0x3c265192,0x3a353be7,0x3c5a826a,0x3b3be423,0x3c202b64,0x3b978fe8,0x3bb610a2,0x3c75e156,0x3c1f107f,0x3bd68992,0x3c3e2ac1,0xbbdd28c9,0xbbc0b982,0xbbdef8ee,0xbbc2e775,0xbbdf9296, +0xbc09b6af,0xbc3f8883,0xbbf5bac4,0xbb9a4d76,0xbb364016,0xb9c99308,0x3a4fb4dd,0x3b834904,0x3b3a9c6c,0x3b716edb,0x3bea8ca8,0x3c0f0a54,0x3c37b382,0x3c4514aa,0x3c7e1cfb,0x3c3d51a3,0x3c3fff56,0x3c089c5d,0x3bdd8daa,0x3b6f0530,0x3ba30f91,0x3b42cf05,0x3bcd4ef2,0x3b7d5ed7,0xbb3f7842, +0x3c130535,0x3aa8e2dc,0x3a816435,0x3c28d4c6,0xbbd5f4be,0x39b97696,0xbbd56bdc,0xbb8d3e20,0xbbb5d60f,0xbbd7a789,0xbbf1fb20,0xbbf4c479,0xbc03b540,0xbbe50690,0xbbd03f30,0xbbab94e3,0xbb808bc8,0xbb277691,0xba9fd3e0,0xba6b4124,0xba2d828f,0xba7909cf,0xbaf19557,0xbb11e534,0xbb5e1bb8, +0x3a299abb,0x3c1c2ace,0x3c99fb7b,0xba734024,0x3c0fb526,0x3caa3e65,0x3cb9b195,0x3ca4ee4a,0x3c99c568,0x3cac35ff,0x3ca2635f,0x3c873f2f,0x3bcd598e,0xbad8eaab,0x3c973c93,0x3c3e5aaa,0xbbed6e0c,0x3c7ef636,0x3c03c486,0x3cb5e35b,0x3c4e9331,0x3c45e3f8,0x3c3e4d9b,0x3c4e9f23,0x3c5b0375, +0x3c6c063f,0x3c5f5a20,0x3c61e9c6,0x3c642f6a,0x3c65480f,0x3c650c65,0x3c5dabef,0x3c623569,0x3c676823,0x3c602fcf,0x3c65d697,0x3c48decd,0x3c81efc1,0xbb154b1a,0xbc5c53e3,0xbccf48e4,0x3b95b084,0xbc44a2ec,0xbcdcee10,0xbcddb48e,0xbcd0e32e,0xbcb96a88,0xbce78b68,0xbcdc5163,0xbcc36fa9, +0xbc7a755f,0x3bc4cc51,0xbcbca362,0xbc98e960,0xbd037243,0x3c3eaa98,0x3c6f0a95,0x3c52276e,0x3c2f9ed5,0x3c568ec9,0x3c81a79a,0x3ca06b9b,0x3c86e4bb,0x3c9654d9,0x3c99c1ab,0x3ca8b7cd,0x3caaa0c4,0x3c97a4d9,0x3c9ccfee,0x3c9da389,0x3c8fd505,0x3c854cf7,0x3c882b3e,0x3ca5ab2d,0xbc44f4bb, +0xb96a76f4,0xbb65e348,0xbba0aad6,0x3bfb5cbf,0xbbd5c5c8,0xbadb1a22,0xbc3154fc,0xbb890751,0xbb977889,0x3c853a76,0xbb7e435e,0xbb394712,0xba591cba,0xbc1bd82c,0xbb27cebe,0xbc08df1b,0x3cc335b1,0x3c63ab82,0x3c32d9c3,0x3bfb6fcc,0x3c48082b,0x3c705a6f,0x3cb6ff94,0x3c92caf4,0x3c9cd260, +0x3ca9022e,0x3cc05544,0x3cc371f5,0x3c91c7a1,0x3cb21459,0x3caa4241,0x3cac9607,0x3c86635c,0x3cb23067,0x3ba6bf88,0xbc8ac7ad,0xb91ecd22,0x3bc74e46,0x39e176c4,0x3b28f2e9,0xba3104bc,0xbb014b75,0x3c70b89e,0xbc13fd6c,0x3c0b75c9,0xbb121c82,0x3bae7227,0x3bef991e,0x3b6b63a1,0xbc2ef44f, +0x3c657a40,0xbc7d15cc,0xb99798f9,0x3c88d363,0x3c049d0f,0x3ba52a3f,0x3bf539f2,0x3c6de43a,0x3cd51c19,0x3c969d57,0x3cb6cfbb,0x3cc2ecce,0x3cff0bdb,0x3cfbc62f,0x3ca96db9,0x3ce0559e,0x3cced431,0x3cb2af84,0x3ca1f415,0x3caecbc3,0x3c323478,0x3abd0726,0x3c853f76,0x3bec6074,0x3c933d50, +0x3bd285e2,0x3bf5502d,0xbba5528e,0xbb68b26b,0xbb9c7d19,0x3c1636f0,0x3bdf9d56,0x3bd6bb47,0x3b548a54,0x3bd49d7e,0xbbcdbd5d,0x3b8842a8,0x3c7419e8,0x3c31b885,0x3c943250,0x3baad386,0x3b6e2dff,0x3c05fa25,0x3c6edce3,0x3ce0ea67,0x3cab77e1,0x3cb876b3,0x3cd9cc70,0x3d00086b,0x3d01f402, +0x3c916188,0x3cd81136,0x3cdd03cd,0x3cd682c8,0x3ca6d5fd,0x3ca854cf,0x3c20ed94,0xbcab04ee,0x3c3bef81,0x3c07fb54,0x3c86bece,0x3c8a97c0,0x3b94cbe8,0x3bbc8b84,0xbaaca156,0xbb094263,0x3ad0403d,0x3c304f17,0x3bbbe888,0x3c63dbfb,0x3c27d86c,0xbb793d1f,0xbb6ac47f,0xbd4bfceb,0xbcefbcac, +0x3cec0b9f,0x3ca43c22,0x3c4890bc,0x3bdf0499,0x3c040a75,0x3c90fd75,0x3c77970c,0x3cdd22c7,0x3d4821b8,0x3d218d01,0x3cee6122,0x3c5e29f6,0x3bf6960e,0x3b22a51c,0x3c9bcae6,0x3cad4ce7,0x3ce71751,0x3cbfb197,0x3b42b468,0x3c9c3522,0x3b92a20d,0x3c90d669,0x3be61928,0x3bc5f878,0xb9dfdf02, +0xbb2f5a60,0xba6196ee,0xbbe7d654,0xbba5fb77,0xbad48441,0x3bdbfc3a,0x3af536bb,0xbc29ddbe,0xbc6957dd,0x3c07cfff,0x3ccd73f4,0x3c937203,0xba849b29,0xba89dc4c,0x3ba3a73d,0x3b7aaa7f,0xb9897c6a,0x3b762a35,0x3b581937,0x3c1dd42b,0xbc14fe18,0xbc34bfef,0xbbe7e3db,0xb8c62137,0x3c21e6d4, +0x3cc44bc3,0x3c21d4a2,0x3c894c91,0xba04c00b,0xbbd0e597,0x3bc8eaeb,0x3bbc2a30,0x3b81ee92,0x3b542249,0x3b096d2e,0x3b43b589,0x3a216cc7,0xbbbef841,0xbb961513,0xbb570266,0xbb2d47d4,0xbc2d3b1e,0xbbb47d62,0x3a05666c,0x39e58ef6,0xbcd89656,0xbce68a88,0xbcc5ad8f,0xbc2be281,0x3c67488b, +0x3c6adee9,0x3c95696c,0x3c7702c3,0x3ccf4d34,0x3cd518c3,0x3ccab7e1,0x3c92d8ae,0x3c4723ad,0x3c498cd6,0x3c48bbca,0x3be54bba,0x39f361d4,0x3a2181fe,0x3c01e18d,0x3c12c42e,0x3bfaa014,0x3bef5709,0xbbb7a5d9,0x39b777d8,0x39c58658,0x39a754cb,0xb8f16790,0x3b6c54cb,0xbb0630f0,0x3a3c633f, +0xbb64e799,0xbb17d581,0xbb8f4363,0xbc369b96,0xbca108e8,0xbcc16b77,0xbc813cf8,0xbc980f2d,0xbb4ac4e0,0x3a9023f1,0x3c953cfc,0x3c3ef7c0,0x3c197fdb,0x3c504ae0,0x3c1ac2a4,0x3bf64576,0x3bc323ec,0x3c52cd34,0x3c1160a2,0x3bb3110c,0x3b8c48e5,0x3b711522,0x3b3bd9a9,0xba1023d9,0x3c1a1b23, +0x3aa4e185,0x3bdac084,0x3bfbfc3c,0xbb9192a7,0xbb887068,0x3b2507bb,0xbb4e9b9b,0x3ae1a4b1,0x3a295922,0xbb03f0b2,0x3b90da18,0x3ad7bed2,0xbacbf656,0x3a7623aa,0x3badf715,0x3b1ed722,0x3b01d4e0,0x3d519e19,0x3d19bbd1,0x3cec5d63,0x3c4780e6,0x3ccd0d2c,0x3bd3ed9d,0xba83388a,0xb7251d39, +0xbc9a0f38,0xbce81a8e,0xbcbc0679,0xbc8fb160,0xbc42387b,0xbcaafd2c,0xbbaa513a,0xb9e6b213,0x3c2d704c,0x3c1ed3a7,0x3c21caee,0xbb977861,0x3c213e20,0x3c26d229,0xbb56bea7,0x3af44b13,0x38a1555e,0xb990bd15,0x3aa446df,0x3b283e20,0xbaa3e537,0x3a83b834,0x3b867dae,0x3b9b25a8,0x3c4e6d9e, +0x3ca8ef01,0x3cfd6eb3,0x3d2ed0f6,0xbc26a911,0x3c879310,0x3d9bae61,0x3d9c66dc,0x3d89f211,0x3d588a42,0x3d077c19,0x39d3e367,0xbc0b90ad,0xbc656aa1,0xbc48495d,0xbb58b147,0x3b9f9130,0xbc5f9116,0xbc557443,0xbc816efd,0xbc9d27b7,0xbccc6d6f,0xbc6ea00d,0xbb96e7ea,0xbc1b05d5,0xbac2b025, +0x3b543c76,0x391a65cb,0x3b6fd541,0x3c075940,0x3b1a3b76,0x3b315ae7,0x3b657110,0x3c1fab68,0x3c5afc7d,0x3c440b81,0x3c917912,0x3c3ebf67,0x3c42ff87,0x3cd39ca1,0xbbec2afe,0x3c9f1fd8,0x3cd461ed,0x3cc9b8d3,0x3d0fc678,0x3d2b342c,0x3d3b70ab,0x3d3bb0d0,0x3cf3ca92,0x3c7ace54,0x3b160c06, +0x3ae9695f,0xbba0183e,0xbc4ca370,0xbc7c2b25,0xbc3982e3,0xba1f9b2c,0x39d980b1,0xb8c2eb0a,0xbbeba919,0x3b39ca74,0x3c2a39a2,0x3b8a49c4,0x3c1b70f4,0x3c06adc8,0x3bb1b959,0x3c2a3a33,0x3c0dcdac,0x3c2d4479,0x3c234fc3,0x3c418457,0x3c1bfa0e,0x3bd3157c,0x3c3a745c,0x3bd5606a,0x3c670cec, +0x396a4371,0x3c0e6dcc,0x3cc0d7ed,0x3cb462bd,0x3cb8c60a,0x3cd9fb81,0x3d01ea19,0x3d175907,0x3cf90a3a,0x3cdd65a0,0x3cc0ef79,0x3ca3d9b7,0x3c926634,0x3c6335d8,0x3c18be22,0x3c19104b,0x3c492ff8,0x3c37abc3,0x3c416648,0x3c349da6,0x3b4a81d5,0x3b9f194f,0x3c23d1ce,0x3beb5bb7,0x3c23f113, +0x3c195037,0x3c0374f3,0x3c0e8cf0,0x3c49f599,0x3c402a5b,0x3c28f52e,0x3bd85e0c,0x3c20f1a4,0x3c0ca344,0x3b55c153,0x3b69365e,0x3b4c6c1c,0x3c8ab823,0x3c897c09,0x3c5be3ae,0x3c6da5f5,0x3c78b8e8,0x3c87a4d5,0x3c9a7f6b,0x3ca86ff4,0x3cbde10b,0x3cde1f70,0x3cc5f874,0x3cc3c7db,0x3ca74c0c, +0x3cbdb9e4,0x3cc2b3ce,0x3cab8771,0x3ca3216f,0x3cd54879,0x3c9543a4,0x3c6534b3,0x3c4e5742,0x3c4e37b2,0x3c34f5bc,0x3c297482,0x3c0fb68d,0x3c0f090b,0x3c824b14,0x3b468f4c,0x3c3fda2a,0x3b8e9d3c,0x3c0433c2,0x3c02922f,0x3b8615b8,0x3c33936f,0x3c62939f,0xbc1447be,0x3c16e166,0x3c1ee9fa, +0x3c4cf442,0x3c6555c7,0x3c898022,0x3c97d1a9,0x3ca3e5ae,0x3c959da8,0x3c819125,0x3c5c67c0,0x3c5d18dc,0x3c55566c,0x3c5cb541,0x3c41c405,0x3c3c6a84,0x3c778d3d,0x3c747db0,0x3c5ba2af,0x3c90cdd9,0x3c2e3189,0x3c4a1133,0x3c138ddb,0x3c13cf36,0x3bb475cc,0x3b8375be,0x3b2b130a,0x3b0d9f83, +0xb937fbc7,0x3b0375d4,0x3c185e11,0xbb6b80a1,0x3b3edeea,0x3a10b3b8,0xbc04a549,0x3bc9bf4f,0x3b10f809,0x3c4bf045,0x3c24c3dc,0x3c267062,0x3c239893,0x3c24e64a,0x3c215401,0x3c2a72a7,0x3c3288ec,0x3c44348b,0x3c50ae6e,0x3c52ea0c,0x3c4eb4d3,0x3c4d656f,0x3c5457dc,0x3c573b52,0x3c5024c8, +0x3c48b3f4,0x3c43c6cf,0x3c5d95fe,0x3b940b5c,0xbb8fbec7,0xbc1b59e0,0x3b8023ab,0xbba6b161,0xbc44bb58,0xbc5a8ba9,0xbc3d16ea,0xbc2bcf22,0xbc5c2828,0xbc5836cb,0xbc2630f5,0xbb6b1764,0x3b90778a,0xbc192f6b,0xbbe665c5,0x3c47faf3,0xbaf1f87b,0x3bbaff83,0xbc40fbfc,0xbb5738eb,0xbb2e4c36, +0xbaf9884d,0xbb28f852,0xbb4852c1,0xbb592fdb,0xbb84d04b,0xbb901995,0xbb9b6e32,0xbb7aa63a,0xbb7c0c0d,0xbb8712ce,0xbb970ae9,0xbb9fc5e0,0xbb9f6743,0xbb995953,0xbb618faf,0xbbd85e5d,0x3c4400ce,0x3c9e4a8e,0x3c982084,0x3c065fc3,0x3c9cff1a,0x3c9c579a,0x3ca0e39b,0x3c9663a9,0x3c8726e7, +0x3cb6d685,0x3cb678c5,0x3ca9afea,0x3cb15358,0x3bd3e737,0x3c883988,0x3cbe55a2,0x3d04335c,0xba8ae761,0xbb963cbe,0xbaff0836,0x39d9fba8,0xb9d5ee0b,0xbad6773f,0xbb80bb75,0xbbde86f3,0xbbfe8131,0xbc01ca9a,0xbb82e5c2,0xbb33e4de,0xbb8d8669,0xbbcabda7,0xbbed8264,0xbbf0b3c1,0xbbac77e7, +0xbbc0a1ba,0xbc21b397,0x3c8be55e,0x3c1d7c3c,0x3c4d7bb3,0x3c8a9f8e,0x3baf7b2a,0x3c0ed8c6,0x3bdedaab,0x3c561498,0x3c011821,0x3c51febb,0xbb78e1db,0x3c1b3132,0x3c53d723,0x3c39d271,0x3c2c3aec,0x3c184880,0x3cb71b55,0xbc2d4c6d,0xbb92f2c0,0x3a81c217,0x3b7c7a5a,0x3b9925a8,0x3b58b72c, +0xba71ec26,0xbbd35649,0xbc0bae71,0xbc28a4ef,0xbb55cf1a,0xbb3803db,0xbbaf2269,0xbc121dff,0xbc201bc2,0xbc3a5aba,0xbbc04244,0xbc3090de,0x3ae52cf9,0x3cbdceb9,0x3c308424,0x3c53db47,0x3c8207c3,0x3c1a1280,0x3bbf77c3,0x3b517edc,0xbbfd7a40,0x3c31855b,0x3a58efdd,0x3c59cdef,0x3b60f48a, +0x3bf8d5d0,0x3c0d9f1a,0x3c15d77e,0x3aaac165,0x3cb8ddc8,0x3ac135b1,0xbc1258cb,0x3a7886ab,0x3b809eb6,0x3c18fdbc,0x3bb94975,0xbafbdafb,0xbc3f9c4c,0xbc6b41a4,0xbc8e7d35,0xbb637f9e,0xb80a252a,0xbb90c05d,0xbc3774b0,0xbc605101,0xbc65b65f,0xbc20cbd3,0xbc408d3b,0xbba04ead,0x3c091d54, +0xb988940b,0x3c6975be,0x3ba6633a,0x3c52b016,0xbb4551b8,0x3bae4473,0xbb22888c,0xbb281a7c,0x370e5d82,0x3c1b8a1b,0x3af6a1f7,0x3c8719a8,0x3c21b488,0xbb6d8334,0x3b837a93,0x3bfcc64e,0xb9191f78,0xbc2ee828,0x3bcb3ad4,0x3bee6124,0x3c8debeb,0x3c81aae1,0x3b9fffbf,0xbbc8414a,0xbc562ced, +0xbc8fdf3e,0xbb91c6c2,0xbb6163ad,0xbc03c091,0xbc5c77b2,0xbc839f5d,0xbc9248d4,0xbc290569,0xbc4c2f64,0xbbc4778a,0x3cdb67d4,0x3ba1736f,0x3c86ae8d,0x3c3c53d2,0x3bfafb33,0x3b26fed2,0xbb84f26e,0xbb8d5561,0xbbe47cdd,0x3b620ec5,0x3bc4cef8,0x3b94266f,0x3c12969c,0x3b7c9474,0xbbd8041a, +0x3c6ff929,0xbc338728,0xba96aca5,0xbcb9ed21,0xbc3629d1,0xbca0ec0a,0xbce7f9fe,0xbd0ea010,0xbcd8abba,0xbd2d8e5d,0xbceff07c,0xbc15719b,0xbc849a67,0xbc42e718,0xbc386ba5,0xbc8a9898,0xbc7ff024,0xbcb490df,0xbc7e5bff,0xbc3a5e54,0x3bf237a7,0x3c81cd0e,0x3a9f8d6f,0x3c7e2f05,0x3c003c93, +0x3c521480,0x3b2ff51b,0x3b0151c4,0xbb3047fa,0xbb75b505,0xbbed7776,0xbb6bbafb,0x3b6889b1,0x3bd0bf20,0x3c5ce650,0x3cc82ad8,0xbc25f0ef,0x3c887b5f,0xbc2f4507,0xbcf3383d,0xbc3ec0ae,0x3b6715df,0x3c6ad4a8,0x3c95a331,0x3c3913c5,0x3bfa97d8,0x3ab81b2d,0x3bae88f2,0x3b34a4c6,0x395246fc, +0xbb983ce6,0xbbbe4abf,0xbc189beb,0xbc932f27,0xbbf9c2b4,0xbc2ef79b,0x3bf2725d,0x3c8c3f07,0x3c2095e2,0x3b732eee,0xb9411049,0xbb4179cc,0xbb208dd0,0xb8e14720,0x39a58a54,0xbbadafd1,0xbb9200ed,0xbbe863e9,0xbbab7806,0xbc25f776,0xbc4aba45,0xbbabc0df,0x3c0c5a9c,0xbc9b33fe,0xbcf68be7, +0xbc45879a,0xbb070bdf,0x3b5de0d8,0x3bcea36e,0xbac85a33,0xbc8ed70b,0xbccff9a5,0xbcda8df3,0xbc35ca4c,0xbc9a76b0,0xbc865c5e,0xbca29db3,0xbcba525e,0xbc9762f4,0xbc784d1e,0xbc0d9564,0xbc2c2a95,0xbb16515e,0x3c4cd61a,0x3be40011,0x3a88c3d4,0xbb2d0102,0x3b558304,0xbab521eb,0x3b0b4335, +0xba8c3a9b,0xbb6a4fa9,0xba19f8d2,0xbb51d5cf,0xbb1a8164,0xbbdcaeb9,0xbc243c2a,0xbcaa90fd,0xbc385a02,0xbba01efa,0xbc5e842e,0x3b64036e,0x3b621400,0xbc86be07,0xbc8564a9,0xbcf7f7f6,0xbd199d15,0xbd0c6739,0xbce53ef4,0xbc616815,0xbca97540,0xbc8274e0,0xbcc8bf41,0xbca3618a,0xbc89c21c, +0xbc3bdf68,0xbc20ddce,0xbc547065,0xbb1b64dc,0x3c55ea7e,0x3bd9a825,0xbc164746,0x3ae7c849,0xb9054b60,0xbaba949e,0xbae14489,0xba0a694f,0x3ac42edb,0xba860d70,0x3ab2fb88,0xbb57f361,0x3bc15dd2,0x3a3bb074,0x3ba64bb9,0xbc0655d8,0x3d41e757,0x3cc9aa0e,0x3bf9a900,0xbb94e499,0xbd11e1f0, +0xbc52635d,0xbc165205,0xbc9958d7,0xba0ee552,0x3b7c8174,0xbaa43ddb,0x3b8da25e,0xbb642885,0xbc396c2a,0xbc09a4b0,0xbc38afe7,0xbc3e0d10,0xbc511fe2,0xbc316c97,0xbba90485,0x3c13d4d3,0x3bdcb3bb,0xbb16334d,0x3821271d,0xbae64c9c,0xbb12af24,0xba3f9d5e,0xb9c7c3a9,0xbad6cd02,0x3a96aec6, +0x3b97f937,0x3ac2bb47,0x3bf5d8c9,0x3c627829,0x3d06af1f,0x3d2b8153,0x3d566f88,0x3d887304,0x3d47e7fd,0x3d7783be,0x3d04b8a1,0x3c95d879,0xbc44b873,0xbd2adadf,0xbcf6d0fd,0xbcaf3a6a,0xbb9d558e,0x3be403b1,0x3a38a441,0xbb94b447,0xbc43edbc,0xbc54084a,0xbc97c379,0xbc74238d,0xbc2e7af6, +0xbc3c0494,0x3b9ea1b8,0x3b8e2287,0xbb767e8b,0x3b4e62b2,0x3b908747,0x3c2af141,0x3baa094d,0x399c14d2,0x3ad4c868,0x3c23ae27,0x3c3f5c30,0x3ca3a263,0x3c99bfc5,0x3cca2f89,0x3cef150f,0x3cb3fd7c,0x3d00c6bd,0x3cc4973d,0x3cac2ff1,0x3cc3428c,0x3cb7db6a,0x3cd8272d,0x3cb7a79e,0x3c49bcab, +0x3c218b00,0x39d4c5d9,0xbc18101c,0xbc8bcf63,0xbc91b9c4,0xbc8c45ad,0xbc8fd2b8,0xbc8ad724,0xbc3d12ec,0xbc463194,0xbc22a127,0xbb354563,0x3b54e718,0x3b17249d,0x3c30f611,0x3b9174bb,0x3b9cba12,0x3c0869af,0x3b19b2b6,0x3c167a24,0x3c07fe7a,0x3c5c05ea,0x3c55d5d3,0x3c4785d8,0x3c7cce4d, +0x3c59f063,0x3c86d887,0x3cc5974e,0x3ca84515,0x3c88ffd5,0x3c2da91c,0x3c8611da,0x3c849e4c,0x3c9b4480,0x3c9bec46,0x3c78b7ba,0x3c73d067,0x3c4c19d7,0x3c5d8e34,0x3bfe4dbf,0x3bc29301,0x3b5e5f4f,0x3abf19ba,0x3b81a75c,0x3b92de50,0x3b94354d,0x3b6054e5,0x3bd92fbc,0x3c5b4280,0x3c4b2c46, +0x3c1726b5,0x3c369b3d,0x3be3c09c,0x3bda1853,0x3c4c1cea,0x3c375c44,0x3c1d27c1,0x3c296631,0x3c24149c,0x3c3717ea,0x3c32843e,0x3c5b535d,0x3ca26dd5,0x3c7ad5d5,0x3ca529e5,0x3c307cc2,0x3bec5e8a,0x3c0a25f3,0x3bc94946,0x3bde1f3e,0x3c09ce1f,0x3c4102b7,0x3c72c579,0x3c91370e,0x3cc21d94, +0x3c9b754b,0x3ca47f10,0x3c94e2a9,0x3c90be7a,0x3c914b09,0x3c458b94,0x3c6ade3e,0x3c47f6b1,0x3c8b52ce,0x3c8f02ec,0x3c510017,0x3c24cc65,0x3c23e1f2,0x3c3b8a8a,0x3c2f3fe5,0x3c15329b,0x3b71d7e0,0x3c840200,0x3b9390e1,0x3c2dcf4e,0x3b95bda0,0x3c1f44fc,0x3c811204,0x3c86c73b,0x3c62dfe6, +0x3c28a7bd,0x3b9c1019,0x3bed71ea,0x3bdfe7dd,0x3be9f879,0x3bd0ce52,0x3b967f18,0x3aba99b5,0x381dea9b,0xb9be9940,0xbacdd05e,0x3a4cada6,0x3b24d9e5,0x3bdb7778,0x3ba2fa07,0x3b96445d,0x3bda2fbc,0x3bb75897,0x3b38515d,0x3b87dc69,0x3c6bba59,0x3c5d3b95,0x3c81737a,0x3c5eb27b,0x3c59252a, +0x3c474943,0x3c6e3aee,0x3c75a72f,0x3c5a5315,0x3c59ef43,0x3bdc6854,0x3c68650b,0x3c41265c,0x3be117c5,0x3c1e9715,0x3be44181,0x3c462445,0x3b821795,0x3b885563,0x3b68eb11,0x3b54e36a,0x3b484905,0x3b69017b,0x3b8f0c85,0x3bbd369f,0x3bd80d42,0x3bf1eb79,0x3bfd39be,0x3befec97,0x3be95297, +0x3bd2bb61,0x3bc5c3b9,0x3bb0bde9,0x3ba049b6,0x3ba9329b,0x3b19cea5,0x3c2436af,0x3c72ad50,0x3c514b28,0x3c282230,0x3c7e7974,0x3c543f53,0x3c6076ad,0x3c45ea2c,0x3c3f6f7a,0x3c5c2abb,0x3c571ae8,0x3c3aff91,0x3c53c22b,0x3c1c0537,0x3c4419de,0x3c82ffe8,0x3c01149a,0xbb2ef793,0xbc2795da, +0x3b8e5227,0xb94e1ae8,0xba5cb35a,0xba4354bf,0xbaf452e6,0xbaf2ee76,0xba7433b4,0xbac1d669,0xbabd771d,0xbab10990,0xb982ccf3,0x38e94937,0x3966a4fb,0xb93a2761,0xb9f6242b,0xba28f1cb,0xb9ec7f74,0xba38b1dd,0x3a89f022,0xbc482bd8,0xbc5d7cb5,0xba7a4c65,0xbc25ff5b,0xbc6be0f3,0xbb833bd9, +0xbb94d472,0xbb80bf7b,0xbb8a7d61,0xbbe3df5a,0xbbe921d7,0xbc026979,0xbc7d9b5b,0xbc236724,0xbb8188a9,0xbc799396,0xbc80389f,0xbbc450b8,0xb945997a,0xbb02a2bd,0xba6999fd,0xbbb6a451,0xbbe1f880,0xbb70235f,0xbbc6b8b4,0xbbc1ca91,0xbbbbf03e,0xbb11cc84,0xba079e66,0xba8f81f8,0xbacd99f9, +0xbb01f404,0xbafac58c,0xbb0860f5,0xb9c13af7,0x3b0c57c3,0xbc26ae1f,0xbb97d4ae,0xb9c74077,0xbc243220,0xbbcbdcd4,0xbb7bfe9d,0xbbfee9aa,0xbc33a7af,0xbbf26f1c,0xbbe71916,0x3b77387c,0xbb9cd3fe,0xbba5f9d6,0xbbb4ceaf,0xbc2feb88,0xbbc2f09c,0xbc809af5,0xb8d54124,0x3a55c6bf,0xbb6632f1, +0xbae15355,0xbc2353cf,0xbc5100c2,0xbbb9b6d9,0xbc339492,0xbc1f9d17,0xbc1a0365,0xbb017d20,0x397fa375,0xb91c2bcb,0xbadbd545,0xbb788f54,0xbb6688f8,0xbb92d2f2,0x3a9a3815,0xbbcaf4d4,0xbc791e2a,0xbb47e6d5,0xbb090581,0xbb9ca584,0xbad57c26,0xbc01b5a3,0xbb810fab,0xba821c26,0xbc65493f, +0x39b45d84,0xbbc09114,0xbb07b64b,0xbab4b2b5,0xbb7cb020,0xbc3a9e8c,0xbb4f2e71,0xbc78028c,0xbbfcfc19,0x3b2f93ca,0xbb805731,0x3aeed4c3,0xbc5866e5,0xbc9cef8a,0xbc126567,0xbc93e1e0,0xbc8ad1d4,0xbc894e8f,0xbbb87e06,0xb9c569e9,0xbb35c676,0xbb8dad98,0xbbb92e9f,0xbbb5b8a5,0xbb89211c, +0x3a919e4a,0xbb2ef1bb,0xbb97fe29,0x3bfe6090,0x3bf8f05d,0x3c1e7574,0x3acb848e,0x3b077e0d,0xbbfa4ec5,0xbb440368,0xbb729fe5,0x3be8ee1c,0x3b8e799f,0x3ae72a60,0x3ae3a159,0x3b8b008b,0xbc3c3382,0xba51f337,0x3acb715f,0xbb8599d4,0x3c089aaa,0xbb91094c,0xb63ab1dd,0xbc932931,0xbcbf3ed7, +0xbc376c37,0xbcab2f64,0xbc9a758a,0xbc6ae48c,0xbb5b14d5,0x3ae28fc3,0x3aa5219f,0xbb8b9f85,0xbc013028,0xbbf72678,0xbbfd6c2b,0xba8da7f4,0xbacda579,0xbc784648,0x3be61e27,0x3be1b85c,0x3c20687e,0x3c35ce6c,0x3b2afad0,0x3b615ad7,0xbb43e81b,0xbb8f60de,0x3b3cb229,0x3c18da3f,0x3b973186, +0x3c193b4c,0x3b5f9e31,0xbb9ec677,0xbb4b29e9,0xbd655780,0xbd16ad7d,0xbb940f70,0xbbd42165,0xbc4e89b4,0xbc9d896b,0xbccf2d0b,0xbc96f6c9,0xbccaf0ad,0xbc655481,0x3c31ed9c,0x3c6b39b1,0x3c878ef0,0x3c514e1a,0xbb1d47f8,0xbbeda807,0x3c60de6c,0x3c0b8329,0x3bbdfde5,0xb983ebab,0xbb61fe1e, +0x3c28d1a5,0x3c3c1b15,0x3c381b5a,0x3b2d7a6e,0x3af7a769,0x3a7ae21e,0xb9408994,0xbb0fd267,0xbc02eecb,0xbbcd71e0,0xbb1613ee,0x3b5f179f,0xb78310e2,0x3b9ceb5e,0xbd14d295,0x3ac944c4,0x3b1ee99b,0x3ba0dc33,0xbbc7165e,0xbc1d3806,0xbc518573,0xbc51511e,0xbc7499da,0xbc278a0e,0xbb957742, +0x3bb0a522,0xbb524c5d,0xbba2a8c7,0xbc7f0454,0xbc18dfbe,0xbc27b7a5,0xbc80a0b7,0xbc888670,0xbba00f8a,0xbbcfa8cb,0x3a61eb81,0x3b0228f8,0xbb60d742,0xbb00e58c,0xb9fef1c6,0xb983433b,0xb9cce4e9,0xbad08c82,0xbbd56775,0xbb89c948,0xbb9f2431,0xbc12e27d,0xbc8884b3,0xbc83a08e,0xbc61ef7c, +0xbbb4d8ec,0xbcbc0564,0xbc91e712,0x3bb6c006,0xbb7b8fec,0xbc86007a,0xbcf3626d,0xbd055d20,0xbd1a3e75,0xbc4a2630,0xbb3c345a,0xbc041a62,0xbaa282d6,0xbbc74482,0xbc9bc970,0xbc8e3b9c,0xbc89b449,0xbc85e396,0xbc3eb01a,0xbb518567,0xbb998ec8,0x3b05e0ec,0x3ba38753,0xbc430648,0xbb2935d1, +0x392923c4,0x3a0a7d5d,0xb9d654fd,0x3b38ef98,0xbada8b45,0xba2ea080,0xbbb1c9a5,0xbb6c94fa,0xbc0ac1cb,0xbc53d1c5,0xbcca45c1,0xbc9db521,0xbc29a05c,0xbc6041d9,0xbc46bb4c,0xbccc1a45,0xbd7461f6,0xbd27f826,0xbd2cc288,0xbd29ec5f,0xbcafd00b,0xbc8894c0,0xbcc058d2,0xbc8e2d16,0xbc90d32d, +0xbcc188be,0xbc960eee,0xbc75e928,0xbc2ba90a,0xbc2a673e,0xbac48605,0xbb8b7cd6,0xb98fa3ea,0x3bb4c9ef,0xbc15b5af,0xbbb610d4,0x3a767da0,0xbb5ad088,0x39b4f31a,0xbae96412,0xbb5a8c1d,0x3a62376f,0xbae96556,0xbb84cbb8,0x3908ebd3,0x38c4a683,0xbb794adb,0xbb8d3282,0x3cf5d0d0,0xbb5838f4, +0xbd41dade,0xbd847376,0xbda16bad,0xbd33a00a,0xbd050fcc,0xbccdcf89,0xbcce4455,0xbcb3b6ba,0xbcb9e128,0xbcb22934,0xbcab48fc,0xbcac2c87,0xbc8dc4ec,0xbc88f1aa,0xbc3a0282,0xbc5971b5,0xbbdc81d8,0xbbcbc26b,0x3ba6692c,0x3baf6330,0xbbf60223,0xbb858c6b,0xbb8dc873,0xbba2513b,0xba4b2f22, +0x37a24528,0xbb79c6d0,0xba99f2f6,0x3a426038,0xbab3af7f,0x3af1e67b,0x3b9bfa6b,0x3cb93d30,0x3cdc9aba,0x3c2bd671,0x3ced32a6,0x3cc0f2aa,0x3c886bad,0xba71cd29,0xbcc0328e,0xbd2d7816,0xbd5dc871,0xbd170a61,0xbd08213e,0xbcedbdc1,0xbca5e7d5,0xbc70d6f9,0xbc1f8177,0xbc757e14,0xbc61115b, +0xbc24b595,0xbc52eaac,0xbc0634a4,0xbc149036,0xbc685e8f,0xbc165684,0xbaeb0b4b,0x3aee9928,0x3b85151f,0x3bbd429c,0xb99c6c62,0xba4fa1f4,0xbb08a60e,0x3bab323e,0x3be8c2d0,0x3c3c3c1d,0x3ca4d9ad,0x3cb04002,0x3c88ac36,0x3ceb248d,0x3c471674,0x3abfe589,0x3c1cc647,0x3c6236a1,0x3cbccec3, +0x3d012149,0x3cf8b45b,0x3c8aac79,0x3bb27c0b,0xbbdaa11e,0xbc6c87cd,0xbce593cc,0xbd078be1,0xbcfdf935,0xbcdd3dcb,0xbcbc6c98,0xbc624b68,0xbc2f33c3,0xbbd21b2e,0xbb840fab,0x3b17cdaa,0x3b8d5255,0xbbabbbe0,0xbac4ddab,0xb95340ed,0x3aa01379,0x3c18965b,0x3c24821e,0x3c1b87ef,0x3c21c15b, +0x3c2fbbdf,0x3c33beba,0x3c15a684,0x3c311963,0x3beb0f0e,0x3c158cc4,0x3ae8f8d7,0x3c0c94d6,0x3c913cbc,0x3ca5e6e7,0x3cda2ad5,0x3cc9171f,0x3cccacc6,0x3caf5e0c,0x3c91f106,0x3c48369f,0x3c22c9c6,0x3b3d2966,0x3a577850,0xbb3dd377,0xbb1cd92e,0x3adb320f,0x3b56e785,0x3b9a6c91,0x3ba91314, +0x3baa6685,0x3b46bd6c,0x3ba74497,0x3b9776e0,0x3b70d389,0x3ba907a0,0x3bda559d,0x3bb3cf11,0x3bfdcff7,0x3c16902f,0x3c047696,0x3bf459d5,0x3bc0ce4a,0x3c04ec30,0x3bf83d5c,0x3b949b56,0x3ba5b630,0x3b8b15bb,0x3c19ea8b,0x3c41536b,0x3c09acbe,0x3c020bca,0x3c1ac952,0x3c4fa439,0x3c878d9a, +0x3c8b7fe1,0x3c9a7651,0x3cc187d0,0x3caad872,0x3cb3c433,0x3c9a615b,0x3c973c31,0x3c9132f6,0x3c6bf594,0x3c4cb910,0x3c7d52c7,0x3c1d40e9,0x3bef57ce,0x3c003c28,0x3bd2e155,0x3be5f0f1,0x3bdac9be,0x3b818e42,0x3bd42075,0x3bc338c9,0xba00210d,0x3bbfa81f,0x3afa67c8,0x3b9b5036,0x3ae8c433, +0x3b80630a,0x3b9816ee,0x3c059249,0x3b9059bc,0x3c199680,0x3c12c0d6,0x3c3a0794,0x3c59adba,0x3c583934,0x3c4a7f0e,0x3c35d73f,0x3c3b3214,0x3c37e6fa,0x3c219a3a,0x3c3188c6,0x3c346077,0x3c57a18a,0x3c3085b8,0x3c18f37f,0x3c3531ce,0x3c14396e,0x3bef7bcf,0x3bd9e09d,0x3b5ec1a1,0x3bb22f08, +0x3b795e51,0x3b80050f,0x3b8453f4,0x3b85f1cd,0x3b88a4a1,0x3b316f38,0x3ba0873b,0x3b9cf828,0x3c2e67da,0x3ba36a16,0x3bc58e83,0x3bd91316,0x3ba2535c,0x3b9dc161,0x39b374ea,0x3c1352ea,0x3c0b08b0,0x3c01d6d7,0x3bfae1ea,0x3c01efd2,0x3c10f476,0x3c20f63c,0x3c2d8b6b,0x3c3a938b,0x3c4a87e6, +0x3c54a102,0x3c559b53,0x3c5861b4,0x3c4b1021,0x3c4383f0,0x3c38c222,0x3c2aa081,0x3c255942,0x3c2d2ac9,0x3af2bacd,0xbac23ad5,0x3b712d0e,0x3aa58d31,0xbb051fab,0x3b484d3e,0x3b3d91dd,0x3b409188,0x3b41c847,0x3aa62dba,0x39bd06b5,0x3a9cb615,0xba8ba50a,0x3afc1fd7,0x3b55c598,0xba9debcf, +0x3c437e13,0x3c6396e8,0x3c8c413d,0x3bcf8c92,0x3bfce447,0x3c0adf04,0x3c0f1089,0x3c26516e,0x3c2d9da3,0x3c27e883,0x3c1b3af4,0x3c12ebd2,0x3bfc2f95,0x3c0d5716,0x3c12a73e,0x3c1ed454,0x3c1017f0,0x3c1376a7,0x3c160b4e,0x3c19d634,0x3c12557b,0x3c10f8fd,0x3c7927ac,0x3c3f8580,0xbbe28251, +0x3c84cdfd,0x3c4f00e2,0xbbd4d1ae,0xbbbb33ea,0xbbb84bcb,0xbb871e8b,0xbb4fb28f,0xbb077777,0xb98dad41,0x3c4a64e4,0x3c85d853,0xbb9575bc,0x3c2ff975,0x3ba65c68,0x3c3b0793,0x3c14c0a0,0x3c4116f9,0x3c4fdf36,0x3c931791,0x3c9d90f2,0x3c8b9ab7,0x3c6f2a84,0x3c575766,0x3c224573,0x3c4c3396, +0x3c6bfd72,0x3c8a7a6d,0x3c5c180f,0x3c55edb3,0x3c5142f8,0x3c4daa25,0x3c3bc10e,0x3c301165,0x3c220584,0x3c354bfc,0x3bf39692,0x3c6844b1,0x3c645d13,0x3b59ee7f,0x3c119646,0x3c03fa2e,0x3c1249db,0x3c25f5ce,0x3bff8b06,0x3bc97023,0x3c1986f7,0x3c30dc2b,0x3be1f2be,0x3c011ca4,0x3c8c8a7e, +0x3c0eda31,0x3bbf1143,0x3c3dcd68,0x3c407191,0x3cb67aff,0x3cd4c92e,0x3cb05866,0x3c9398a4,0x3c5fe5ec,0x3c07264d,0x3c576c73,0x3c801237,0x3c9ce237,0x3c7195ab,0x3c68388d,0x3c7b0e0b,0x3c7621d6,0x3c574b5f,0x3c4da030,0x3c634c08,0x3c411784,0x3c9426ac,0x3c59fe6a,0x3bfefcd1,0x3c1c67f9, +0x3b4e8591,0x3c0e0921,0x3c439a43,0x3c062750,0x3c33bb49,0x3be90361,0x3c30d391,0x3c2cc569,0x3c00abe1,0x3c7635cb,0x3c519f17,0x3b958792,0x3bf6cffd,0x3c54233b,0x3c7a7b7e,0x3cf090af,0x3d13916c,0x3cec8c33,0x3cc1a820,0x3c8c5744,0x3be0caf4,0x3c8c7d49,0x3cab706e,0x3cfc9d6d,0x3ca63e37, +0x3c8f420e,0x3c8cfcd4,0x3c81a715,0x3c54a1f9,0x3c386560,0x3c4b2b3e,0x3c3e983a,0x3c6d64c2,0x3c366a9e,0x3c23661e,0x3b4338cf,0x3b706886,0xbaf18087,0x39b03707,0x3b86b302,0x3c027d47,0x3b83856a,0x3c38e40a,0x3c0e14d1,0x3b037724,0x3bea1840,0x3cb4adba,0x3c105c2b,0x3ac575ee,0x3c4f1be1, +0x3bfacd51,0x3d0e18d8,0x3d25133d,0x3d081a59,0x3ce4f6b3,0x3c87cb04,0x3bb49a9d,0x3c5b238c,0x3c9fd3e0,0x3cdd5484,0x3ca20bc0,0x3c92e858,0x3ca48d1f,0x3ca3ba09,0x3c8253ea,0x3c1ef3b1,0x3c5b471f,0x3c27411b,0x3c93a044,0x3c4e1048,0x3c19551c,0x3b0d281c,0xbb132978,0xbb6e368f,0xbb8ac942, +0x3b8c531e,0x3be2bc67,0x3b2fdff7,0x3c217163,0x3bdb9b28,0x3af6c54c,0x3c857ab1,0xbcccf128,0x3c89c98d,0x3c61b135,0x3c9c4b53,0x3c70ea60,0x3c820725,0x3c829837,0x3ca1be9e,0xbc4b914f,0xbc55ff0b,0x3c8ffbc4,0x3c2135ef,0x3bf31388,0x3ad58bf3,0x3b36c288,0x3b319615,0xbaec3aaa,0x3be2157a, +0x3c4eec26,0x3c973f9c,0x3c810819,0x3c2a9e85,0x3ca7e255,0x3c24395f,0x3bfe7101,0x39bcdb0d,0x3b4d7586,0xba10bf1c,0xbb82ac13,0xbb897f57,0xbad942a4,0x3b7060b9,0x3bcc60d4,0x3c4c3573,0x3c8c31d5,0xbc1726f0,0x3cbcfaca,0x3b79125a,0xbc1494cb,0xbad79c2b,0xbc66c177,0x3c5e004b,0x3c53590b, +0xb99df3e4,0x3c2a2098,0x3c3d204e,0x3bbf38aa,0x3bf330e3,0x3c0bd58e,0x3ab688c8,0x3c062ca4,0x3c3cf21a,0x3cbee835,0x3c99037a,0x3c7c41cb,0x3c340891,0x3bebb21a,0x3c247fff,0x3a4766b8,0x3b306470,0x3ad9f10f,0xb96b1a31,0xb80cc0df,0x392dfa1e,0xbb930b53,0xbb2ed8da,0xbbcb0a6c,0xbbe4b2ee, +0xbc31234d,0xbc1683de,0xbb6c5fae,0x3c5a91ac,0xbb53ef9c,0xba9cedad,0x3c74252f,0x3c92deb8,0x3cdd29e6,0x3d1e9bbd,0x3d199ff4,0x3cab0311,0x3b261408,0xbc261fae,0xbc0e8714,0x3bcded7b,0x3c7df57b,0x3c356de4,0x3bfc1210,0x3bd7712f,0x3a500e4f,0x3adab257,0x38d4181d,0x3bc85e8f,0x3c4e67fb, +0x3bf16a1e,0xbb24a096,0x3b1cf1e4,0x3bbe9fdd,0xba8deaeb,0x3b01d3fe,0xbaed852a,0xb9bf8f74,0xb9a4faaf,0xbb693da8,0xbb2aa14a,0xbb98fe83,0xbbf4153c,0xbc53d89c,0xbc1058eb,0xbbcb2791,0xbbd0bf0b,0x3b16823c,0x3c7ab8e1,0x3d1f342d,0x3d2a216f,0x3d209389,0x3c391346,0x3c2213a2,0x3b935712, +0x3c252618,0x3c8e865b,0x3cb7676b,0x3c78933f,0x3c41260e,0x3b88a231,0xbb5b3e59,0xbb2d56a3,0xbb003f29,0x3b2a2f50,0x3c3f741a,0x3bcc22d8,0xbb88e59f,0x3a28a253,0x3b122a6c,0xba97522f,0x39946394,0xba82359b,0x3a8f82f9,0xbaf72f8d,0xbaa8a992,0xbb60a60f,0x3ad34152,0xbb332c8f,0xba0b4121, +0xbbc62a28,0x3c6050d3,0xbb1fa5c8,0xbc456898,0xbb831ea7,0x3c946cad,0x3cfce710,0x3cbb231b,0xbc3b7286,0x3b93aa1c,0x3ba7a7b2,0x3bafff6c,0x3b9739be,0x3b31c873,0xba975bf5,0x3bc52a88,0x3bf6b03b,0x3c0636ee,0x3b74de04,0x3aea1da5,0x3b8ffc14,0x3bb57e60,0x3bb33f53,0xbb28c9c2,0xba48ee2f, +0xbb293b73,0xbb5176fe,0x38e859a0,0x3954fc45,0xbb76cb7c,0xba3e1af8,0x39302f84,0xbb86e65a,0xbaaa7f27,0x3bdee780,0x3c7d7de0,0x3cb78030,0x3d535d86,0x3da1a84c,0x3dbd1e47,0x3dab0c27,0x3d584902,0x3cd3ce46,0x3be3a662,0xbb29223f,0x3bbd5095,0x3c28605c,0x3cc2e310,0x3c7bb869,0x3c701585, +0x3cb8075f,0x3bbdff1d,0xbb08edb0,0xbb9837ea,0xbbab20c3,0xbb61cadd,0xb9d96d68,0x3b343a97,0x3af10635,0xbb8867d1,0x3b0ce841,0x3b4aa733,0x3be2a4ca,0x3b332b0c,0x3a5402d0,0x3b42728d,0x3c117107,0x3c5156b3,0x3cad4915,0x3cf24695,0x3cdaad51,0x3d081831,0x3d171a49,0x3c88361a,0x3d1cc65b, +0x3d2f320b,0x3d375714,0x3d4539e3,0x3d4646f7,0x3d2034af,0x3cdaa55b,0x3b9f00cd,0xbc55ecf7,0xbc9ccae8,0xbcd3ce29,0xbcac63b3,0xbc54a622,0xbc019a93,0xbbc758ff,0xbbd446b4,0xbbdb8ce7,0xbb9b19e9,0xbb7557bc,0x3b25c5bb,0x3ba069f1,0x3bba50f5,0x3a885ba5,0x3ac02f04,0x3b6dd6ca,0x3beabfd8, +0x3c4a4c47,0x3c569e70,0x3c6dbd8c,0x3c7c72dc,0x3c6bddc0,0x3c9263b6,0x3cab2b75,0x3cb6a75c,0x3cfdde98,0x3cb35f20,0x3cd27d8d,0x3d115474,0x3d194a1d,0x3d245e95,0x3d23a48f,0x3d28fbc4,0x3d23be58,0x3ceaabc2,0x3c9e6fed,0x3c798067,0x3c05e611,0x3ba4efd5,0x3acb7d8e,0x3b2841b6,0x3b641dce, +0x39d66e5f,0x3b6cfc15,0x3b681949,0x3be45684,0x3c27f596,0x3bf49176,0x3c07759d,0x3bdbf324,0x3ba66144,0x3bde4466,0x3c112a1e,0x3c0e8900,0x3c0fb56b,0x3c2e80dd,0x3c2b9a7f,0x3c3b1ef4,0x3c68b1da,0x3c77a16e,0x3c84d46c,0x3c8357e1,0x3c888637,0x3cba84bb,0x3caae442,0x3cc77e69,0x3cdc9db4, +0x3cf36ca9,0x3d07918c,0x3d202733,0x3d1f321e,0x3d1ba680,0x3d215bb8,0x3ce7de7b,0x3cbe3dde,0x3c7be9df,0x3c575623,0x3c3d5617,0x3c0e4023,0x3c21937c,0x3c1e4352,0x3c3f080b,0x3c66dcb0,0x3c1bd90b,0x3c395108,0x3c33c768,0x3c4c4b67,0x3c590e94,0x3c0e5b03,0x3c59f4ea,0x3c3d9854,0x3c3325d3, +0x3c22b97f,0x3c1a90c1,0x3c570b7b,0x3c40dff3,0x3c8f5e3b,0x3c9dfac7,0x3bf9f77b,0x3c9c18bd,0x3cb6187f,0x3cbf6e44,0x3cc313db,0x3cd5aa4c,0x3cd57442,0x3cdb00c8,0x3ca7758e,0x3c8a4297,0x3c59423c,0x3c629ad9,0x3c6e709d,0x3c826a37,0x3c74b15d,0x3c586592,0x3c5058f8,0x3c2551d8,0x3bc5aa7b, +0x3bed04b8,0x3c1633ed,0x3c4fab5c,0x3c65411b,0x3c739c50,0x3c652810,0x3c68c05f,0x3c8ce274,0x3c9aca9a,0x3c8275ad,0x3c96b75c,0x3c96abf4,0x3c7b64c5,0x3ca54b72,0x3c71beb0,0x3c100556,0x3cb157af,0x3ca1748e,0x3c8f6d7d,0x3c836ec3,0x3c877ae0,0x3c8ad4dd,0x3c90c8ef,0x3c96fcec,0x3ca8005f, +0x3cac72d6,0x3cb07da6,0x3cae88bf,0x3ca62405,0x3c95dc5c,0x3c88da93,0x3c806d5f,0x3c7bfe94,0x3c7b1de8,0x3c7822ea,0x3c74f8b8,0x3c64eac9,0x3c8f34fe,0x3c72c4c5,0x3b92fa8f,0x3c99a8ce,0x3c84f0b2,0x3b81fd8a,0x3b4abf5e,0x3b59bae6,0x3b83d2a4,0x3b68472e,0x3b890125,0x3bb6b1ba,0x3c7bdfb5, +0x3c955dbf,0x3ba0f9dd,0x3c681c3f,0x3cd43765,0xbc599c10,0xbc78d15c,0xbc56761a,0xbc1be074,0xbc2094bf,0xbc18c75a,0xbc313f61,0xbc39987d,0xbc381e59,0xbc3d0ef6,0xbc404df8,0xbc3dbc00,0xbc2f0324,0xbc281033,0xbc1b865c,0xbc2797a3,0xbc3090b2,0xbc2e3a7c,0xbc2c43e5,0xbc17c33b,0xbc2caa7e, +0xbc073c01,0xba09189b,0x3ca803c0,0xbc3c9dbc,0xbb264521,0x3c955d61,0x3c912377,0x3c8bc140,0x3c6ed7ce,0x3c889ddb,0x3c7f481e,0x3c49b570,0xba89668d,0xbc55054f,0x3c7ab369,0x3adf2870,0x3c4e9295,0xbc64e17a,0xbc39ecd3,0xbc378e55,0xbc147e40,0xbc7881bf,0xbc92f7fa,0xbc947064,0xbc9a68ed, +0xbca3b1a7,0xbc9eda66,0xbc8bf5ec,0xbc7e648c,0xbc691136,0xbc814f91,0xbc859eae,0xbc74110c,0xbc5bb8f7,0xbc3fc01e,0xbc4b332d,0x3b25717d,0xbaa56064,0x3bc0fe8d,0xbb272e85,0xbc209d14,0x3b311ee1,0xbbba1d20,0xbad23b01,0xbb2e29af,0xba8a3427,0xbbefe273,0xb9091baa,0xb98c2177,0xbb1a1604, +0xbaefb9ee,0xbb242640,0xbbdc5995,0xbcac679e,0xbc33c7d6,0xbc4cc757,0xbc03dbad,0xbc967c32,0xbcb09090,0xbcb3e54e,0xbcd0eb85,0xbcd49c06,0xbcd11c62,0xbca919b5,0xbc94592d,0xbc5cc900,0xbc959947,0xbc9ff753,0xbca0833f,0xbc801d57,0xbc6646bb,0xbbff8cd2,0x3b441377,0x3ad43d8b,0xbabb2571, +0x39c36cae,0x3972be19,0xbbca902d,0xbb03b0be,0xbc49a48b,0xbbbfa2cd,0xbb95cbde,0xba995005,0xbb8fd203,0xbb8df041,0xbb860366,0xbabec563,0xbc508213,0xb99f9c1d,0xbc25930d,0xbc6c7139,0xbc0dadd2,0xbb61f281,0xbc9c202a,0xbce584f3,0xbcecb259,0xbd0dc011,0xbd12288e,0xbd126ba9,0xbce78257, +0xbcba21c0,0xbc94c9e7,0xbcd1bc78,0xbccebeef,0xbcb7413a,0xbc91a0d1,0xbc545c85,0xbc0c4b53,0xb9d9ae65,0x39f08c17,0x3c244899,0x3b19afaa,0x3b2be3ba,0xbb1ad96c,0xbb82e795,0xbb08042a,0xb93ecdb2,0x3b174211,0x3b5631bb,0xbb0986eb,0x3b8de88e,0x3b6bd879,0xbbec2c72,0xbb856f22,0xbc3b4f69, +0xbc9dfcd9,0xbc664271,0xbc33da4c,0xbb75949c,0xbcb0dbfc,0xbce9fcfd,0xbd00d8ed,0xbd1b8c07,0xbd2782d6,0xbd1ad513,0xbcf64cf2,0xbcbe4c9b,0xbc686213,0xbcceb154,0xbceac358,0xbce6204f,0xbcb2954b,0xbc72bd83,0xbbe25a62,0x3bfc44a3,0x3b8ff359,0x3c2967fa,0x3bdf71d4,0x3bb9fe77,0x3b14654c, +0xbab4b784,0xbb8d6492,0xbba30b4a,0x3b842c09,0x3bb4adb6,0x3b2a4c45,0x3b92cafa,0xbaa328c0,0xbb661f0c,0xba23cc0a,0xbd09da13,0xbcaa11f6,0xbce372ca,0xbcd50d32,0xbccbabab,0xbcee529d,0xbd1c0335,0xbd210fd2,0xbd48f55b,0xbd111e19,0xbb221a40,0xbbb80827,0xbaa41fbe,0x3ad4f5b9,0xbb53a568, +0xbba7eba6,0xbaeebb67,0xbbb19c2a,0xbc4889ef,0xbc7a8479,0xba119eed,0x3a8fe8cc,0x3c66d7df,0x3b8ced09,0x3b299416,0xbaa327d8,0x3abcbf15,0x3aa5b5f5,0xbb665f7f,0xbbcbb092,0xbb8d4275,0xbb026d81,0x3b22904d,0x3b4b5a5f,0x3c8f5f04,0xbd175151,0x3aa253f5,0xbc50de86,0xbc4010f4,0xbc556296, +0xbcbf1e79,0xbc8ddab3,0xbc5ed5c0,0xbc6b71d0,0xbc6d9732,0xbc81d1b1,0xbc61d9bb,0xbbf522ab,0xbb899aef,0xbbe01ddc,0xbc82c923,0xbccb4e59,0xbd1b9448,0xbcd6562e,0xbc8e9911,0xbb118329,0x3c32d5f5,0x3b254a78,0xbb661e1a,0xbb2439cb,0xba6346ef,0x39f3efed,0xb9d5c37d,0xbb2575d1,0xbba49745, +0xbb83c8e3,0xbbb67e74,0xbbecb876,0xbc2509e8,0xbc664be5,0xbc7c5f9b,0xbaad672a,0xbc03794f,0xbbd2ade1,0x3c0f1823,0xbbd1b36e,0xbceabfb4,0xbd189b68,0xbd36d5bb,0xbd72069d,0xbd27969f,0xbcebb9e8,0xbcbb1923,0xbcb50e69,0xbce84047,0xbd0baab9,0xbd016698,0xbccca9ae,0xbc8a42f0,0xbc6756c0, +0xbc32b8b8,0xbc1924eb,0xba9b1b60,0x3aedac42,0xbbf2ea5a,0xbba10f93,0xba404ff0,0x3aa5651e,0xbac5020b,0x38df3423,0xba1d1263,0xbb0fa40d,0xbbc7050a,0xbba9ba88,0xbc178420,0xbc23a6a3,0xbc782a82,0xbbb19a44,0xbbb66d3d,0xbc492501,0xbcf6a939,0xbd28a46c,0xbd97b5b9,0xbd7c98cf,0xbd811566, +0xbd6299cb,0xbd291e94,0xbd04cd28,0xbcd37092,0xbd038214,0xbd05fad1,0xbd0968a1,0xbcf04ed3,0xbcc027b4,0xbc637ae3,0xbc56a5c4,0xbc3283a0,0xbb6efa49,0xbb3236f3,0x373f3ba9,0xbbd7d4b6,0xbb80bb2f,0xbad1d756,0xbac10676,0xbaa7bd80,0xbb17da15,0xbb16a9cc,0xbb595a13,0xbbb86de2,0xbc204ef0, +0xbb5ddb67,0xbc0b93e1,0xbba46c31,0xbc5e7589,0x3b125bc5,0xbd00c5d4,0xbdb0213a,0xbdc678cc,0xbdd146bb,0xbd9680a3,0xbd573961,0xbcb768b1,0xbcd39a40,0xbc96a5bb,0xbc9f3836,0xbc79a4b6,0xbc771ad8,0xbc0ac2f5,0xbc8a13f2,0xbca78e5a,0xbcb184c2,0xbc99280d,0xbc34c92b,0xb895a8df,0x3865a17b, +0xbb2931b4,0xbbb33fd8,0xbbba35b8,0xbb8a32c2,0xbb974aa0,0xb927a1ed,0xba39a192,0xbbb3da40,0xbb651f4b,0xbb6bc202,0xbc1402a1,0xbbefd790,0xbc0407f8,0x3c15ef2c,0x3bb99e04,0x3d377864,0x3d426732,0xbc07b3d6,0xbc834f55,0xbd17270a,0xbd814efd,0xbd980104,0xbd6cc53d,0xbd2876ca,0xbd1e9ac6, +0xbd2c8205,0xbd15f1e7,0xbcf43493,0xbcb58b07,0xbc1211a5,0xbb522292,0xbb1eecb8,0xbb3d4ade,0xbbd811a4,0xbc294ecf,0xbb94a689,0xbb63ae5e,0xbb9eda40,0x3a476e36,0x3a7d53af,0x3a9bca3f,0xbafa084c,0xba486db5,0x39e77c2a,0x3b96683d,0x3bb3622f,0x3c709bbd,0x3cce44d3,0x3d118738,0x3cef60c3, +0x3d02a605,0x3d0da63f,0x3a29ed8e,0x3a5b175d,0x3b76050d,0x3b243403,0x3b9ffca5,0xbb7a2c1a,0xbcc3fc5f,0xbcc256da,0xbcc58310,0xbcad04b2,0xbd00d17a,0xbd0956dc,0xbcebf19b,0xbcee0f3e,0xbcd9f0b2,0xbcb296ec,0xbc91e67d,0xbc3cd70a,0x381e59a3,0x3b46116d,0xb9b428a6,0xbb9af557,0xbb8b4e7a, +0xbb58c0a4,0x39d5a95a,0x3bb6c031,0x3c1af4f9,0x3c230ee0,0x3c3276c7,0x3c26f42a,0x3c2aafaf,0x3c6ea15a,0x3c60dd4b,0x3c5f0ff0,0x3c584344,0x3c80246d,0x3c89ae7e,0x3c7a4a60,0x3ca10366,0x3cd58ae0,0x3ca5abdc,0x3c83a661,0x3b8cefc0,0x3b6a29dc,0xbaa4b0f4,0xbb1717a5,0xbc011adc,0xbc10df16, +0xbc19405c,0xbc320935,0xbbf80a68,0xbc1fe877,0xbc03560f,0xbbe8fc2f,0xbb99fe3f,0x3a9f4caf,0x3b893d3f,0x3b1896a5,0x3b8c6fcd,0x3ba09572,0x3bf9efbc,0x3bf50edc,0x3c1ba194,0x3c1a0d4f,0x3c0fad6f,0x3c126ba3,0x3c045f95,0x3c31c1c5,0x3c407d55,0x3c5a63ba,0x3c69e170,0x3c712b0e,0x3c2a2a8d, +0x3c5dc1f7,0x3c6bb805,0x3c746ff7,0x3c6e732f,0x3c8a8524,0x3ca9075e,0x3c96d3d9,0x3c771ccd,0x3c7cbd4f,0x3c62fb1d,0x3c73842c,0x3c4d340c,0x3c204b3d,0x3be1ce4d,0x3b4629b1,0x3b2620b8,0xb97fb9aa,0xba3b2459,0x3ab6ca9c,0x3b941b9c,0x3b9c7d29,0x3beb5d2b,0x3c03cc2f,0x3bfc7705,0x3c167629, +0x3b5afcab,0x3bcfa09e,0x3bad7133,0x3bece38c,0x3bf1e50a,0x3ba2e010,0x3c2801eb,0x3bf1e262,0x3c242d94,0x3cafd4b4,0x3c7c3b1e,0x3c673827,0x3c4de399,0x3c372364,0x3c27c9a2,0x3bd8d9e7,0x3b566efa,0x3ba8c316,0x3c0c6487,0x3c2039e9,0x3c3655a1,0x3c46bd51,0x3c76655f,0x3c5ce99a,0x3c4a9cad, +0x3c5868e7,0x3c39fed3,0x3c385c02,0x3c02a0cd,0x3c08eed0,0x3c00f847,0x3bf8f1e7,0x3be1dc97,0x3c03120b,0x3bf2a2c0,0x3c28a1e8,0x3c1a3f81,0x3c68bc62,0x3c5b8851,0x3c5abdfa,0x3c935e36,0x3c76a3a8,0x3c8bbfd4,0x3cadbd3e,0x3c4c4514,0x3bd99020,0x3bf628bf,0x3c0d4f4d,0x3c06a1a2,0x3c045a95, +0x3c0a9111,0x3c1d98b5,0x3c2fae1c,0x3c32f629,0x3c286d05,0x3c276a00,0x3c2d2806,0x3c2ade53,0x3c297348,0x3c172ee9,0x3c0efb21,0x3c04862d,0x3be9e709,0x3bdcf4be,0x3bc8ed70,0x3ba659a3,0x3c1dac1d,0x3c99baa1,0x3bb25626,0x3c22b5a5,0x3ca62de2,0x3caec273,0x3ca05081,0x3c997abf,0x3c9daa97, +0x3c955053,0x3c8b3617,0x3c1b7f36,0x3bbe50b4,0x3c968147,0x3c48ae24,0x3c542ab6,0x3c899ca8,0x3c5a2a3a,0x3c8ed87b,0x3c3fd82a,0x3c3f9c30,0x3c34f6ed,0x3c55d480,0x3c6128b1,0x3c5f23d8,0x3c565832,0x3c54c1a6,0x3c4dfbc4,0x3c4f60df,0x3c532bcb,0x3c62db51,0x3c5b2a67,0x3c62798b,0x3c634349, +0x3c671581,0x3c506f29,0x3c781864,0x3bcafbad,0xbb4a7573,0xbca38710,0x3c2ac650,0xbb082178,0xbca98ae3,0xbca7078e,0xbc9da149,0xbc858539,0xbca39213,0xbc99f92f,0xbc821b6a,0xbb96e718,0x3c3d07a0,0xbc8ac07a,0xbbf41111,0xbca94d6c,0x3c3a1006,0x3c4c167a,0x3c50a360,0x3c37f071,0x3c9e75ff, +0x3cb2c980,0x3cad8dc6,0x3ca1a861,0x3c9abf01,0x3c86e8f5,0x3c8462bc,0x3c9036c9,0x3cac226f,0x3c9b34d2,0x3c9f9ff0,0x3c9d3a95,0x3c9292dd,0x3c905c5a,0x3ca3caf9,0xbaee84c5,0x3bc39806,0x3a26dfc9,0x3b2db4f8,0x3c33a2ed,0xbb30fd81,0x3b798846,0xbb125d37,0x3b65cf63,0x3ab6aa74,0x3c517047, +0xb96c2398,0x3a04d710,0x3b58f439,0xba5c2ba9,0x3af4abf6,0xb9acfdd2,0x3c8e2f05,0x3c180bf5,0x3c241d59,0x3bd56ca5,0x3c9fff58,0x3cc584d6,0x3cb6f3a2,0x3ca98f11,0x3c953fbe,0x3c8a7eee,0x3c81b451,0x3c92841b,0x3cbab6dd,0x3cb3750e,0x3cb4d78d,0x3cc7ae4d,0x3ca856f3,0x3cbf898a,0x3c4ad27b, +0xbb15d01c,0x3bd71b32,0x3c40ff19,0x3b95661e,0x3b5e0a61,0x3b9c11b9,0x3a7538d1,0x3c7fe294,0x3b6032b8,0x3c197e24,0x3b11357b,0x3bc528ea,0x3bd4e748,0x3b9f40f8,0x396fd819,0x3c79670d,0xbc08a8a6,0xbb91903a,0x3c1ad75f,0x3bcbb86c,0x3b8fa29d,0x3cc2e8d2,0x3d0a09e9,0x3cff88c5,0x3cf0d1e8, +0x3ccb557b,0x3c90b6e5,0x3c97d3be,0x3ca816d4,0x3d02a0da,0x3ce2aa34,0x3cdcd42e,0x3cde8ede,0x3cc79b34,0x3cc5a089,0x3c873610,0x3c22a68d,0x3c91c379,0x3c312839,0x3c59c9d8,0x3b9c50ab,0x3bc297e2,0xba717597,0xba62818e,0x3b13950c,0x3bec3065,0x3b855aa8,0x3b89056a,0x3aa4703f,0x3b7c595e, +0x3b81f098,0x3ba7ec57,0x3c561713,0x3b833bf5,0x3bd7e665,0x3b1340a3,0xbb74a1da,0x3caf0cf1,0x3ce76759,0x3ce48a79,0x3cde6709,0x3ca4e8f2,0x3c999e5d,0x3c6c5a07,0x3ca12feb,0x3ce88e9d,0x3ce9a6f3,0x3cf1d2dc,0x3d05c6ad,0x3ce53951,0x3cdafdff,0x3c8472be,0xbbae745f,0x3c42ff54,0x3c64eae5, +0x3c482087,0x3c2850da,0x3ae27f7e,0x3aa25cc1,0xbaf94371,0xb918ca18,0x3b72d17b,0x3bdf68fd,0x3ab76ea6,0x3be51c42,0x3b9626c0,0x3b92e8b1,0x3b30a9b1,0xbd01fbea,0x3c0ee5be,0x3cea6704,0x3cdf5b42,0x3cee5fdf,0x3d1ba357,0x3d28f3ab,0x3d10baf3,0x3c8dcfc2,0x3c801fda,0x3d2cf42c,0x3ce6eaba, +0x3cafd341,0x3c41a15d,0x3c35c46c,0x3c185243,0x3c83270e,0x3ca467f6,0x3cd27747,0x3c9fe2a3,0x3c263fb6,0x3c9381f8,0x3c6b9f68,0x3c38bce0,0x3b48b2f7,0xb860746b,0x3afc641f,0x3afd71b1,0xbb233736,0xba625bfc,0x3a1bf7a0,0x399daa25,0x3c092db5,0x3c07af26,0x3b120fad,0xbc36cd44,0x3c69489d, +0x3c82de56,0x3c31dfa0,0x3af4da83,0xbca866f4,0xbb0c54a5,0xbba78705,0xbbf11ba7,0xbb67b5b1,0xbafe9132,0x3a1b5774,0xbba56e3d,0xbb209bfa,0x3c020564,0x3c3830e3,0x3c8dd7ad,0x3d04cfdf,0x3cb234c3,0x3cc0d6e6,0x3c04db37,0xbb797bf4,0x3bb4d8c1,0x3a96763d,0x3ba5678b,0x3bc002bb,0x3b389e54, +0x3ab79f38,0xb9f5003a,0xbb4510c1,0xbaf8356a,0xbb52e2b6,0xbb21b829,0xbc2e6b03,0xbbc84e88,0xb904d33b,0x3c09149f,0x39fd15b8,0x3c5cb26f,0x3c9f6d28,0x3c8be797,0x3cc4dbae,0x3d04c5f4,0x3d12d728,0x3cd77d85,0x3c6f21c4,0x3be483ad,0x3bf4abbc,0x3c755e2c,0x3c9f67ef,0x3cd5d8f0,0x3ca519bd, +0x3c696224,0x3c20fee8,0x3bc64ef1,0x3c16daa8,0x3c4939ce,0x3bd5ea40,0x3b90ac75,0xbb8f3c7e,0x3b647581,0x3b86a71e,0x3ad85066,0x3a9079b0,0x39e065cf,0x3ae1e64b,0x3986843f,0xbb6a4037,0xbb8a6b6c,0xbb4d431c,0xbbe5db5a,0xbc1d9586,0xbbe774e3,0xbc6b5da2,0xbc4f0db8,0xbc06514e,0x3b863d9d, +0x3d319183,0x3d2c9037,0x3d40e324,0x3d0cce3e,0x3cb53a39,0x3c426b3c,0x3c4cbf23,0x3cb5ec9a,0x3cd43295,0x3cfe339c,0x3cabc966,0x3c547fa2,0x3be5a91f,0x3b28c42d,0x3c021609,0x3bdd7183,0x3b8ef931,0x3b542a75,0x39e16ecc,0xbb097016,0x3b3184c2,0xba1a752e,0x3aead183,0xb880d2de,0xba857626, +0xbab08288,0xbba7c8a8,0xbc0c5bc5,0xbbeb8b1f,0xbc010588,0xbc308e5f,0xbc1abf1a,0xbc8adde2,0xbce459dd,0xbcf902e0,0xbc92e041,0x3d06a771,0x3c9c2783,0x3c39e53f,0x3b3674bb,0xbbb14438,0xbbec2ecf,0x3ab3d5b0,0xbab81f59,0xba1aec66,0xb9fca5ee,0x3b9463de,0x3bfe4614,0x3c551517,0x3c4c810a, +0x3c364199,0x3c30571a,0x3af80442,0x3a468a37,0xbb735aa0,0xb95aeec2,0xba056f03,0xb9152e8a,0x3ab97d82,0x3ad1daee,0xbb41d9e3,0xbb3d3ce3,0xbb96f12c,0xbbe90836,0xbbf23ce9,0xbb65dc99,0xbb9f5ee6,0xbb59e424,0x3d08321d,0x3d4d5a83,0x3d9c3ef0,0x3d619d5b,0x3ce11421,0x3c12ec6e,0x3beb2c8b, +0x3c9a5fa4,0x3c5e0354,0x3c19621c,0x3c248da8,0x3b01424d,0x3b9a8897,0x3b2abe8b,0x3b737a17,0x3b4d8494,0xb97a2db7,0xbb936db9,0xbabdeb60,0x3bc5813b,0x3a494e41,0x3b89a1fe,0xbb184b27,0x39ccbea5,0x3a3d330b,0x3868df63,0xbacb9fae,0x3a99441a,0x3b978c72,0x3bc81c5f,0x3c2cae90,0x3c6db3ad, +0x3d00f1dd,0x3cf3a3a1,0x3d01d2d5,0x3d2d5c89,0x3bef00f8,0x3d04e901,0x3d202c59,0x3d1762bf,0x3d16fe65,0x3d09c06b,0x3cab0552,0x3be31022,0xbc1ea99b,0xbc9352b8,0xbc798828,0xbc6fcbd0,0xbc3cb97d,0xbc0e134b,0xbc2d568b,0xbc0041b1,0xbb9bc4da,0xbb4d0e1d,0xbb1809b1,0xbba6c425,0x3a5d5dc8, +0x3b8ac025,0xba28dde5,0x3b35d586,0x3b32ea2b,0x3b8362b4,0x3c35470d,0x3c42fda1,0x3c7c4bac,0x3c65a574,0x3c80b22d,0x3c7be749,0x3c7a90ff,0x3ca2ecbc,0x3c9d34b6,0x3cd0d090,0x3c9c8afb,0x3cdb2174,0x3d32c351,0x3d2835da,0x3d3a2692,0x3d2908df,0x3d258e62,0x3d11eafa,0x3cb8b51e,0x3c4aecb7, +0x3b9c8cc4,0x3b3e7310,0x3b06acd3,0x3b0559e3,0x39142db2,0xba156f2a,0xbb1815a5,0xba85a9bc,0xb78857d8,0x3aa7e506,0xba0abdee,0x39fd7ef3,0x3bc1201d,0x3b85847d,0x3bf82d76,0x3c21acba,0x3c0224b2,0x3c071de1,0x3c2b3852,0x3c4e728a,0x3c53a150,0x3c3fdbc1,0x3c8cc072,0x3c877239,0x3c5d158f, +0x3c8b0109,0x3c6abb3a,0x3ce374e8,0x3cf18020,0x3d086de5,0x3d230ca1,0x3d23feb2,0x3d2b1b97,0x3d3afb2d,0x3d21fc7c,0x3d04f9d2,0x3cdba309,0x3ca52eff,0x3c8126b0,0x3c1bc58e,0x3c14285c,0x3befd8a4,0x3bc54608,0x3bcb709a,0x3c06635c,0x3bae0892,0x3bedfafe,0x3bf03f76,0x3c3b8bf7,0x3c3a52cd, +0x3c43b8a6,0x3c55b8d0,0x3c2d9c24,0x3c9b5812,0x3bff3e3b,0x3c827b96,0x3c2b266a,0x3c773a22,0x3c830efd,0x3c29b031,0x3c911a32,0x3cb0c8d7,0x3c4d377d,0x3cee8a47,0x3cf158a4,0x3cec94c4,0x3cd7d493,0x3cf1ba1e,0x3ceb69b2,0x3cf8a325,0x3cd96a8a,0x3cd2be2f,0x3cc4d017,0x3cba88af,0x3cb0d281, +0x3ca4d0d8,0x3c9f0ef7,0x3c95dc94,0x3c988381,0x3c8886e1,0x3c6b4b17,0x3c81632f,0x3c2743ce,0x3c5e3806,0x3c49b720,0x3c6b021e,0x3c562c08,0x3c5d1899,0x3c7875d4,0x3c883853,0x3c794701,0x3c980b72,0x3cc2d33f,0x3c6a9af1,0x3cb473b3,0x3ca41f6f,0x3c4ae437,0x3ced6747,0x3c93a333,0x3cbe918d, +0x3cb0670a,0x3cb86b45,0x3cbdcfe4,0x3cc6ebb2,0x3ccb4d73,0x3cd9c5cc,0x3cd27de9,0x3ccb0053,0x3cc15477,0x3cb79fbf,0x3caaebcf,0x3ca022ff,0x3c9cb0a0,0x3c9afa4e,0x3c99cc4f,0x3c984653,0x3c94a5b9,0x3c9c3e4c,0x3c82d539,0x3c1ac371,0x3a82d09e,0x3c9000ae,0x3c2b9149,0xb9863bb8,0xbab46b2e, +0x38c6589f,0x3aa69e82,0xba2f0c27,0x395cb5a1,0x3b5d9975,0x3c497f53,0x3c94fdbb,0x3b3f226a,0x3c156429,0x3d012dd1,0xbc0606ba,0xbb88ed82,0xbc68fbb9,0xbbec878c,0xbbe7b345,0xbbdd0d8b,0xbbf237c0,0xbc01cbd8,0xbc0b0f01,0xbc0c54ab,0xbc0fa0d5,0xbc124086,0xbc0dbcee,0xbc0b90e6,0xbbfe9fb1, +0xbc0863fa,0xbc0c1040,0xbc06df71,0xbc04a9d3,0xbbd9f3cd,0xbc189072,0x3b78e704,0x3c48dbc1,0x3cb3f842,0xba70397b,0x3c324cf7,0x3cb0cae0,0x3cb1deca,0x3ca8f1b8,0x3c979219,0x3cbb090c,0x3cb3d058,0x3c9f81f6,0x3c54a933,0xbb2d066f,0x3c9b69a5,0x3c7f9d46,0x3cd2eaca,0xbc0e81ff,0xbc26b804, +0xbc0f3706,0xbbde06c0,0xbbf8a595,0xbc1ebaa5,0xbc53e9e2,0xbc55e50e,0xbc724bd3,0xbc73badc,0xbc68804d,0xbc51741b,0xbc273343,0xbc418c02,0xbc466a06,0xbc30da89,0xbc12c4bb,0xbc0c1e51,0xbc393059,0x3c5e6a93,0x3bc6d409,0x3c20f587,0x3c0e79db,0xbb0f1a8b,0x3be1a7c5,0x3b086b6e,0x3c0d2c26, +0x3bb83eb9,0x3be6ef30,0xbbfe22b3,0x3bbc2285,0x3bc466d7,0x3b9b57c9,0x3c0e6dd3,0x3ba06daa,0x3c0cea77,0xbc910e7f,0xbc28a1d8,0xbc05945f,0xbbc3f288,0xbbef3512,0xbc102e7f,0xbc731f8d,0xbc7f933a,0xbc91704b,0xbc970709,0xbc935732,0xbc88a654,0xbc2dc4fb,0xbc75e4c9,0xbc6cf056,0xbc6c771d, +0xbc153036,0xbc3c3613,0x387f49ba,0x3c99eb94,0x3c0b96ce,0x3bbc1584,0x3c0c2cee,0x3b959654,0x3a8aaa37,0x3af89fa0,0xbc1e3321,0x3bf65d8f,0xbb1c8c78,0x3bc681f4,0xb9eba884,0xba181676,0x3ac1e7d9,0x3c21cd19,0xbbdbc3a6,0x3c33f22f,0xbbe94082,0xbc872316,0xbc1ce848,0xbbd1b724,0xbb786aa3, +0xbc1ce30c,0xbca170ce,0xbcafdba7,0xbcd00516,0xbce10d22,0xbccd41c3,0xbcad1c02,0xbc372a27,0xbc9d8d63,0xbc96cd47,0xbc7f3304,0xbc33a945,0xbc252e45,0xbb506e21,0x3c0ec102,0x3aca5f5c,0x3c42add0,0x3a5cd71f,0x3bc8934a,0xbb60194e,0x3b216f62,0x392a2da1,0x3b884dbe,0xb854a31a,0x3b54d7c4, +0xba2aa565,0x3bc64971,0x3b5cb45f,0x3b55ddb3,0x3a0d1974,0xbc0b0f8d,0xbc4af94e,0xbc8727c4,0xbbdcb799,0xbbd1a94c,0xbb75f533,0xbbf1f337,0xbc9c76ad,0xbca772ab,0xbcda8687,0xbce6669d,0xbce881a9,0xbccde4ca,0xbc5597c3,0xbcaacf11,0xbcb08125,0xbca7a3b9,0xbc49a621,0xbc234407,0xbaffac9d, +0x3cc6934b,0x3bb92b58,0x3c6a31f9,0x3bd7f353,0x3b31aa70,0x3a9f88b9,0xbb821c5e,0xbb4ab253,0xbb05c5a0,0x3b85a7a6,0x3b233f08,0x3ae340aa,0x3a21b312,0xbb200c23,0x3b143ed8,0x3bc86483,0xbb75323e,0xba909aa2,0xbcf67ccb,0xbc97c8f6,0xbc8ab413,0xbc34897b,0xbc83d53b,0xbccad3b1,0xbd21cf6b, +0xbd0caa80,0xbc460a6b,0xbcb6181a,0xbc88acdd,0xbb6d2071,0xbbfd34f5,0xbbe0a746,0xbc6441e3,0xbc49ab19,0xbc528ec4,0xbbaa7e18,0x3c4cd0ed,0x3b478d87,0x3c65893e,0x3b487669,0x3bbb1ce8,0xbadde31f,0x3b19a9a4,0x3b185409,0xbb2f2916,0xbaf3962b,0x39847373,0x3accaea3,0x3c04d83e,0x3c420f83, +0x3ca66cd0,0xbc7b1693,0x3b05973d,0xbc2b5375,0xbc7798da,0xbc2542de,0xbca20d38,0xbc93a98b,0xbc6a647a,0xbaaf4f89,0xbc13da72,0xbc3c6137,0xbbf05b7a,0xbbf30c6b,0xbbcee7b5,0xbaaa0c59,0xbc212f52,0xbc8232ba,0xbcdbedb3,0xbc3d1080,0xbc372562,0x3bfb3d39,0x3c5246ca,0x3b873c04,0x3ac2d9c0, +0x3a2258e2,0x3a6009aa,0x38f18e83,0xba4b1fc6,0xbafa5d98,0xbb19d70b,0xbb036c85,0xbb9db3d7,0xbb89ca64,0xbbec7b19,0xbc24b218,0xbbfb2244,0x3aa695b6,0x3b246dfc,0x3c042241,0x3bed5306,0xbb34ab1a,0xbc666798,0xbc6f20b9,0xbc8fe66f,0xbcdda984,0xbd096ae5,0xbcfa681e,0xbc9d32b8,0xbcc8f76f, +0xbcbb3c58,0xbcaa4fc7,0xbca990bd,0xbc841ce5,0xbc017b8a,0xbbe557f6,0xbbf6a96e,0x39c79390,0x3b6c458d,0x3b026e75,0x3b09a77f,0xbb03045d,0x3ae39809,0x3adde32b,0x3a50f087,0xbaafcef5,0xb9734880,0xbb037a73,0xbb91b2fc,0xbbc60e9d,0xbbd99ca8,0xbbecad5c,0xbc4b6497,0x3b5c9b88,0xbbb77baa, +0xbc753918,0xbcaeb6d8,0xbcc08319,0xbcfd46e6,0xbce75112,0xbd04f45e,0xbcf7663d,0xbd072a75,0xbce947ad,0xbc65c9f9,0xbcc81aca,0xbcabcdc7,0xbca4a090,0xbc9023ee,0xbc54b9a9,0xbbbc461f,0xbba9e985,0xbc097434,0x3b89a357,0x3b1334b2,0xb9cc9240,0xbb12d63b,0x3a6ec464,0xba855e6a,0x3a3ffbcb, +0xba90b4b2,0xba712811,0xb9b23fd5,0xbba1bc65,0xbbe4968c,0xbc3e65f5,0xbbc2120c,0xbc3f89c5,0xbc549383,0xbc89fe8b,0xbca702e5,0xbd21424f,0xbd5412ad,0xbd4ab7b1,0xbd634185,0xbd38272c,0xbd117aaa,0xbc7cf818,0xbc3914b3,0xbab17f97,0xba2878f8,0x3a691075,0xbbb39ab1,0xbba4054f,0xbc3061b9, +0xbc5ffdee,0xbc9958a8,0xbc42dbfb,0xbc00eb8b,0x3bd72fbb,0xba2ea18c,0xbb9e62c0,0xbb22d020,0xbb0a5034,0xba58307f,0xba9575d5,0x39ae7eaa,0xb9a5479c,0xbb0a0437,0xbb58be87,0xbb993773,0xbc055b0a,0xbc0c4731,0xbc38b48a,0xbbcc0926,0xbc4a0335,0x3d6e7abf,0x3d3ad8c3,0xbc26beed,0xbc81ace2, +0xbd27920c,0xbd374734,0xbd3af153,0xbd014486,0xbcdbff67,0xbcd340a9,0xbcda122a,0xbc8837a4,0xbc92dd31,0xbcaa395c,0xbc253f4b,0xbad5c490,0xba9a8b87,0xb957b41f,0xbad4b52e,0xbb30dd12,0x3bf0c9be,0x3bca1649,0xbb91d243,0x3abe4767,0x399b983c,0xbac504be,0xba88ce63,0xb9921111,0x3b1d0f92, +0x3b787492,0x3b907f1c,0x3c4357c1,0x3cb8852c,0x3d1bfbfc,0x3d179cc3,0x3cf35a48,0x3d2a2992,0x3c843bd2,0x3c4756a4,0x3c17aa1e,0xbb81324f,0xbc52688d,0xbcdd8038,0xbd2a1e7f,0xbcff2571,0xbcc39c85,0xbc8e60d2,0xbc97b3d8,0xbc8e5ccd,0xbc628db1,0xbca21b62,0xbcad23e8,0xbc99c750,0xbc8d9047, +0xbc5f5ef2,0xbafe084f,0xbaeebb99,0xbbaea59f,0x3a01b646,0x3a2123ea,0x3b184a65,0x3bfb8b92,0x3b9cee66,0x3c14323d,0x3c33b6a0,0x3c61eba1,0x3c5f4f44,0x3c84a551,0x3c927895,0x3c6d6c96,0x3ca4164e,0x3cb094a7,0x3cf1ac6f,0x3cd3af77,0x3c95d61d,0x3ca529ad,0x3cc13287,0x3c762f6c,0x3c05946d, +0xbb8a7984,0xbbbdacac,0xbc283853,0xbc644438,0xbc4f859d,0xbc4269a7,0xbc1a4be4,0xbc447931,0xbc2a6f53,0xbc2d3652,0xbc276590,0xbc1e41b5,0xbbe3615d,0x3a9516f6,0x3b8719a0,0x3b293a44,0x3bdc2d49,0x3bdc55e3,0x3c0e7887,0x3c308bd1,0x3c3266aa,0x3c2a8c08,0x3c4b0de6,0x3c66cc3d,0x3c830fdc, +0x3c8b2a8c,0x3c9a1615,0x3cc806bf,0x3cceba95,0x3cce1316,0x3c81242c,0x3c86d743,0x3ca8ef67,0x3cb2232c,0x3caa5100,0x3cadff33,0x3cb6e37e,0x3c832be8,0x3c0666da,0x3b067c17,0x3b040101,0x3b2f6fab,0x3b44e29f,0x3b311319,0x3ac35b4a,0xba8ac191,0x3a1d60b0,0xbb2f10b2,0x3a92b702,0x3b860a72, +0x3bc50563,0x3bd3b9c9,0x3c08fb48,0x3c1da9b1,0x3c2e141e,0x3c3f4ab3,0x3bce803e,0x3c823fd4,0x3c1dd3b6,0x3c78c8bb,0x3c5d1736,0x3c733f33,0x3ca2a4b9,0x3c8e1b4e,0x3c85f032,0x3cfaf95f,0x3c98fc30,0x3c96af73,0x3c6b1c9c,0x3c2db5aa,0x3c1aa00b,0x3ba46812,0x3b32fce3,0x3ba70296,0x3c22abb5, +0x3c52758f,0x3c61137c,0x3c68a82d,0x3c7d1485,0x3c5f12dd,0x3c50c43b,0x3c572f87,0x3c3d8ada,0x3c29c030,0x3c0ad07e,0x3c726779,0x3c5a0028,0x3c75f08b,0x3c6ae5da,0x3c828ccc,0x3c811686,0x3c98d0a0,0x3c991590,0x3caecfff,0x3cad3e21,0x3c867139,0x3ccd7a3a,0x3cb40e03,0x3cb186be,0x3ce9b58e, +0x3ca663cf,0x3c7f732b,0x3c199de2,0x3c35b454,0x3c332a28,0x3c351ecf,0x3c3fa2b1,0x3c4d4cbb,0x3c5625ec,0x3c491d0d,0x3c2d7122,0x3c1b789a,0x3c17676d,0x3c145d4e,0x3c15974e,0x3c0de2b6,0x3c08c092,0x3c005903,0x3bf295a8,0x3bf4bcde,0x3bb99cb2,0x3c41ff82,0x3c9a57cc,0x3cbe6a0c,0x3c531517, +0x3ca04dae,0x3cc893d7,0x3cd4cd73,0x3cc6619d,0x3cc14bc1,0x3cd050ba,0x3ccc7590,0x3cbf16c7,0x3c9c007d,0x3c59b6d9,0x3cc5898a,0x3cb715d1,0x3c914b85,0x3bf0dac4,0x399849a9,0x3c4d1b9a,0x3bcd6617,0x3bbd963d,0x3ba9c91b,0x3bbed15d,0x3bcc8d0b,0x3bd51d39,0x3bce3875,0x3bcdd434,0x3bc47780, +0x3bc6de7d,0x3bcfe042,0x3beb6201,0x3be7f6ab,0x3bf040d7,0x3bee52a6,0x3bf621cd,0x3bd988df,0x3c1504eb,0xbb95bf33,0xbc2ccc99,0xbc3d12cf,0xbab7f36a,0xbc2f7def,0xbc5be657,0xbc5e87fb,0xbc4cc732,0xbc30f2f1,0xbc78b126,0xbc7545a2,0xbc5f111b,0xbc55ce67,0xba0fc2ed,0xbc31040d,0xbc6a07bd, +0xbcb737a8,0x3b1b6116,0x3bd1cb2c,0x3ba4b857,0x3b895d79,0x3be16a3a,0x3bf576cc,0x3c09a6c6,0x3c03d23e,0x3bf2b64a,0x3bb94977,0x3ba47547,0x3bcb72b0,0x3c182319,0x3c132890,0x3c1ff917,0x3c21697d,0x3c14eb45,0x3c259f93,0x3c580d66,0xbbd65e9b,0x3a02f01d,0xbaaba8e5,0xbbc562e3,0x3aab8ceb, +0xbb7d0b02,0xbb1442bd,0xbbeb2a06,0xba903d8a,0xbb9171fc,0x3c0a9586,0xbb41b276,0xbb9d8f59,0xbb395b7a,0xbb6be467,0xbb14d60e,0xbc47d638,0x3c2d664a,0x3bbe5490,0x3b2f828e,0x3880c76c,0x3b617d03,0x3b97989e,0x3bdd5077,0x3bd4c3e0,0x3badf38b,0x3b743b72,0x3b2b84fb,0x3b9026a9,0x3c21d0a5, +0x3c299ea9,0x3c2da628,0x3c45bf13,0x3c1dcb57,0x3c720d4f,0x3b994d0d,0xbc151ed6,0x3af391b2,0x3b17e72e,0xbb1c9bb8,0xb9c75bac,0xbb18a3ef,0xba83d2dc,0x3c187903,0xbb733d81,0x3b9b3ed6,0xbb90e5a3,0x3b1f59e4,0xb89d0f7d,0xbaae145c,0xbaf597c1,0x3bb32a4b,0xbc84b4a9,0xbbb97111,0x3bddcdd0, +0xba8d71e3,0xba4eff07,0x3b623680,0x3bb4b90c,0x3c08d5f5,0x3c15afdb,0x3bcc5c8c,0x3a74f238,0xba0e9f5f,0x3adedd1c,0x3c417325,0x3c3bb759,0x3c4c9542,0x3c5867fc,0x3c544b43,0x3c853a51,0x3c2fe074,0x3bb00d9a,0x3c7d6c93,0x3bedba7b,0x3c252a57,0x3a3d2691,0x3b900ea6,0xbb81be94,0x3a71af0e, +0x3ba9f7fb,0x3bed9dd8,0x3a97cf56,0x3b8ca6be,0xbb8d4302,0x3a22ebad,0x3bea29a8,0x3b4e9d86,0x3afa1de0,0x3ac08073,0x3c2f3064,0xbb476e53,0xbbedf798,0xbb3e79c6,0xbad31ba0,0x3b8edb15,0x3bb50eb9,0x3b438c0e,0x3ad40a65,0xbb3b038c,0x3a9a3fad,0x3c3cafd3,0x3c4a8723,0x3c563cab,0x3c7378ab, +0x3c5371f3,0x3c8c0874,0x3c43273d,0xbc15cef4,0x3c38e00a,0x3c0ec14e,0x3c0cc97c,0x3bff30aa,0x3ab063d2,0x3b2c6fbe,0xb90b0763,0x3b6f3b77,0x3b50e37a,0x3bb2b7ff,0x3b1dd58d,0x3b2c72f4,0x3ad6641c,0x3c2780be,0xbb86965c,0xbcf1ea53,0xbc8d8b74,0x3c33919a,0x3c4711de,0x3c872662,0x3caa6f7d, +0x3ca84407,0x3c857b4b,0x3c1892ea,0x3c0e8e6f,0x3cbe5ad8,0x3c961b2f,0x3c85747f,0x3c873891,0x3c0a9ce4,0x3bb392d5,0x3c970a57,0x3c7f3eaa,0x3c861aca,0x3c0b2ab5,0x3bd36036,0x3c976b74,0x3c0afeff,0x3c23f560,0x3a89d4ed,0x39a21109,0x3b074a58,0x3b5e983d,0xba18723a,0xb987eb9f,0x3a9a50c4, +0x3aa5f0c0,0x3c25e4df,0x3b9f0a34,0xbbaf4f55,0xbc6921ea,0xbb9502f8,0x3cb6f81a,0x3cb41e5d,0xb9e178c6,0xbc92588d,0xbcce6ed1,0xbcd5ffca,0xbbb4e5fe,0xbc01b246,0xbb4805b5,0x39dea583,0xbc1b721e,0xbc29419f,0xbb8ff04e,0x39952158,0x3b985e68,0x3c1ca0c3,0x3bb962f2,0x3c4df9cb,0x3b8bb5b2, +0xbb94f182,0x3aa6e78c,0x3ae4b216,0x3b6bc127,0x3bb30ba2,0x3b184a65,0xb9365af1,0xbb000efc,0xbae461df,0xba8fa0cb,0xbb06cee2,0xbb862156,0xbc24a1c0,0xbbcdb77f,0xbb5ee3c5,0xbbf0dfb4,0x3b455a18,0x3caae2d2,0x3c40cba8,0x3b33d068,0x3774247c,0xbb94de92,0x3af9d027,0x3bc34719,0x3c03a116, +0x3c20093f,0x3bcd6f9e,0x3c18c32f,0x3c07cc16,0x3bd964fb,0x3c380635,0x3bfc1798,0x3bc9747d,0x3b5e2c91,0x3c144694,0x3c3d1909,0x3a92c13e,0x3b1f6f8c,0xbb39ccd2,0x3b3b38f1,0x3b0a1743,0x3b2923e1,0x3a4c457f,0x3ace7d6b,0x3ab1a442,0xba30a8d3,0xbb859b0e,0xbbc268f2,0xbb5a361e,0xbbe0ec10, +0xbc413313,0xbb4bcb48,0xbc658060,0xbc91df10,0xbc58b1d7,0xbc3747ed,0xbb588af4,0x3be40e9b,0x3c5109b9,0x3c174097,0x3c095ae8,0x3b91d2a1,0xb851f632,0x3b8781c4,0x3b837752,0x3b95e0f2,0x3bf4f9d9,0x3c007a51,0x3bb1402e,0x3b7dfb80,0x3c3481da,0x3c276eb2,0xbae77d8c,0x3a987d59,0x3abfc084, +0xbaed89f3,0x3b235a86,0xb9981027,0x3b049fc8,0xb94a1795,0xbb1066b2,0xbaf4ec96,0xbbee4c38,0xbc14becf,0xbc083882,0xbc002a88,0xbcab12aa,0xbc1de001,0xbd034fdf,0xbd16e4d4,0xbcd5ba9b,0xbcb15294,0xbc5fa0cd,0xbc8b7415,0xbc937b9b,0xbbf81729,0xbc7bb7c1,0xbc4db2d5,0xbc0a47e4,0xbc307f78, +0xbc2e13ec,0xbc586cef,0xbc0b9e4d,0xbb67b74b,0x39c4b635,0x3b9c23e1,0x3bdc3ed9,0x3c08c056,0xbaa9ae15,0xbad3a3d7,0xbb78c9a5,0xba1968a5,0x39e91337,0x39fb73ea,0x3aa81130,0x3ab32296,0xba0dabf9,0xbb53ffba,0xbbb210a4,0xbba6fa77,0xbbd2e764,0xbc117aba,0xbc868e14,0xbcaf4cfd,0x3c0e6bea, +0x3b28fc6e,0x3b195307,0xbc7f9e71,0xbcb9acb6,0xbc935db7,0xbbfde88d,0xbb32c965,0xbbc8a79f,0xbc2caab5,0xbc503d98,0xbc232cc8,0xbbbdce6a,0xbc04730d,0xbc1b10cb,0xbbd8d92c,0xba502e96,0xbb8d85b6,0x3ab9f12a,0x3bf0dda4,0xbb8a2120,0xbaa66d60,0x3a9bf879,0x3ab09b4a,0x3a976c7f,0xbb7a1182, +0xbb349b9f,0x3a271eab,0x3a43a24f,0x3a3f32c8,0x3b303562,0x3af780f4,0x3c944991,0x3cc67f0d,0x3cb5bb44,0x3cee388a,0x3c63ca17,0x3ca6be17,0x3cc78ed2,0x3c8bdd21,0x3c2c1705,0xbb20ffb7,0xbc4d536a,0xbc9170c6,0xbc952c2e,0xbc873004,0xbc46a699,0xbc330d21,0xbc458619,0xbc315f76,0xbc5a5849, +0xbc4cf617,0xbbc42ed5,0xbbde241d,0xbbbe1da5,0xbbd18d5e,0xbbafed30,0xbaacb1ac,0xbbce98b5,0x3b2fc17e,0x3bb10c1c,0x3c030089,0x3c4791bf,0x3c2260be,0x3c56a217,0x3c52e943,0x3c7aa7b5,0x3c9f9a0c,0x3c5c4766,0x3c70a6db,0x3c8f5c80,0x3c964582,0x3c8ba8aa,0x3cb8279d,0x3d00b914,0x3cd475b5, +0x3cf48646,0x3c98af2c,0x3c67573f,0x3c157bf2,0x3b08084e,0xbb6ccc28,0xbc3947e5,0xbc039000,0xbbee3aab,0xbbc900b3,0xbbe80aa1,0xbbe371c0,0xbb75ef29,0xbb6ccfd8,0xbabe778a,0xbab83b9c,0xbbab9a97,0xbae57683,0x3aab4f13,0x3b1f552c,0x3be3a482,0x3c15c891,0x3bde58dc,0x3c0b9e37,0x3c43aeac, +0x3c6999b8,0x3c81bc0d,0x3c87bd69,0x3c952eb7,0x3c8ea7cf,0x3c702730,0x3c9cc6e9,0x3c4bbb2a,0x3caa31c5,0x3cbca7f6,0x3cc4272c,0x3cdeaf00,0x3cdba875,0x3cda7bc5,0x3cceff1a,0x3c927468,0x3c23bc0f,0x3ae7e666,0x3b149c93,0x3a947a12,0x39eb4164,0x3b34f35d,0x3b47bdc3,0x3b71329d,0x3b70ab85, +0x3bee1cf6,0x3b5d0e03,0x3b3ecc5e,0x3babcad5,0x3be26f59,0x3bf138f7,0x3bed6106,0x3be66403,0x3c26fa19,0x3c7f1afc,0x3bf27f47,0x3c86a323,0x3c466aea,0x3c915033,0x3c8003e2,0x3c4c5a1f,0x3c68a1fd,0x3c893da1,0x3c90d3cc,0x3cc348e8,0x3cb615b3,0x3ca9696c,0x3c920327,0x3c96e73a,0x3c88dab1, +0x3c99302c,0x3ca1c14b,0x3cb4c377,0x3cc0c519,0x3cb7270f,0x3cab474d,0x3c9a41b5,0x3c87f23d,0x3c759ec8,0x3c745db1,0x3c517a56,0x3c2bf242,0x3c2c48ef,0x3c00d39d,0x3c225b62,0x3c14d2f5,0x3c3259fb,0x3c42e392,0x3c535490,0x3c51591b,0x3c472281,0x3c5db119,0x3c7c0668,0x3cab914b,0x3c6d08ad, +0x3c95eedf,0x3c9acdfa,0x3c8c583a,0x3cbb708f,0x3c34ebfc,0x3c9673ed,0x3c9322bf,0x3c96598f,0x3c9981ab,0x3ca269e3,0x3ca4e686,0x3ca681f0,0x3c9898a3,0x3c8c055e,0x3c814ab1,0x3c7719b2,0x3c71aa4c,0x3c714cc3,0x3c754168,0x3c75fe48,0x3c73aa2d,0x3c747786,0x3c75b584,0x3c8113df,0x3c24fafa, +0x3bbba7cb,0x3bc9111e,0x3c3024cc,0x3bb85f1a,0x3ba2928e,0x3ba1bb55,0x3bc8965c,0x3be1b533,0x3baf07bd,0x3baf6cad,0x3bf5c5d3,0x3c151093,0x3c50e813,0x3c000fbd,0x3bda46cf,0x3cd9272a,0x3bb2e08a,0x3c1a47e9,0xbb366f11,0x3ae950d3,0x3b138341,0x3b093a5e,0x3b47c421,0x3b4c6755,0x3b1ecc9a, +0x3b1b950d,0x3b039a32,0x3a760e5e,0x3a9acfa9,0x3aabe86a,0x3b02be0b,0x3ae9797f,0x3b062708,0x3b13fd60,0x3b217a14,0x3b3c6762,0x3ab6b692,0x3c4b4faa,0x3c6a3036,0x3bd60516,0x3c299ff0,0x3c69cb35,0x3becc6ca,0x3c016b10,0x3bf56105,0x3bfbca50,0x3c24e037,0x3c24b231,0x3c2a20d9,0x3c759a57, +0x3c1f2e04,0x3c01593c,0x3c7bcca2,0x3c8ba875,0x3b872c21,0x3a8afa4b,0x3b59b8d9,0x3b686f74,0x3c0896c7,0x3c0b74d1,0x3b993289,0x3b9e084e,0x3b37a418,0xb909a0f7,0xb9504fca,0x3a8ce1fd,0x3b9291c9,0x3b6649db,0x3b776d77,0x3b7acb0d,0x3b96faf3,0x3b845e47,0x3b17a3d3,0x3c6f14ce,0x3c31af34, +0x3c0f5970,0x3c5d0d88,0x3c040c57,0x3bc566ef,0x3c02e7d2,0x3c395f60,0x3c2e2b02,0x3c27e881,0x3a27b7a7,0x3c04c3a4,0x3c06e424,0x3c15fc8a,0x3c5f5008,0x3c13601e,0x3c82379a,0xbb11d3b2,0xb9125d81,0x3b779055,0x3b1e2117,0x3c28ffb0,0x3c4f7b84,0x3bb7e34b,0x3bdff9a8,0x3b3586a8,0xbb31319f, +0xbb40e3de,0xbadbb1a7,0x3b84ccd1,0x3b2864df,0x3b891868,0x3b92a470,0x3be3cff7,0x3b83d6b8,0x3c2394f6,0x3ca6fdd7,0x3c496429,0x3c4827f9,0x3c458ff1,0x3be260c3,0x3befc364,0x3b8b7565,0x3b05bab7,0x3c7d197f,0x3b7a07af,0x3c194cd3,0x3bbf43ed,0x3ba55531,0x3becab78,0x3c86f9c3,0x3bdfca35, +0x3c829b7f,0x3aebe081,0xbb46e3f1,0x3b858991,0x3b06006f,0x3c8bd108,0x3ca50803,0x3bfe168a,0x3c28ea2a,0x3b52b046,0xbbe144da,0xbbb9e54c,0xbb4ea872,0x3c195218,0x3bab0ffc,0x3bc10503,0x3bc92eb0,0x3bf1517e,0x3bb63184,0x3c14c142,0x3c798f8f,0x3c13c62f,0x3c438ae7,0x3ba543a2,0x3bff77e2, +0x38ab8290,0x3baefe6c,0x3b0cf3fd,0x3c0981d5,0x3ab77948,0x3b874390,0x3b943119,0x3bbec9c2,0x3b8d8fa8,0x3c879069,0x3bf5222e,0x3be5d611,0x3b1d3839,0xbba013d7,0x3b9d87b4,0xbb0f5451,0x3c8ea2e3,0x3ca5f94c,0x3c1e8744,0x3c48d997,0x3b5eab69,0xbc16614a,0xbc21b627,0xbbe81e86,0x3b99f469, +0x3b728286,0x3bb17513,0x3bdfcf18,0x3c2943a8,0x3c0b29e9,0x3c149e1c,0x3cc6d2ac,0x3c28a6df,0x3c795600,0x3c07573e,0x3b6ddc70,0x3ac16dbd,0xbb689c05,0xba1e017d,0x3b6acc1d,0x3b886021,0x3af8b6bf,0x3b3e9cb0,0x3980f1fc,0x3aaf88b5,0x3c6cf106,0x3c47b069,0x3b9eddc4,0x3c0c17e3,0xbbccf1bd, +0x3bd8af0f,0x3c3818b5,0x3c8425b7,0x3c8c9f56,0x3c75d511,0xbbd5c35c,0xbc5ee8d5,0xbbf30f0d,0xbc2933dc,0xbc0bad5f,0xbb996448,0xbb201b54,0xba85a120,0xbc212687,0xbb1b1395,0x3b310a5d,0x3c1a6974,0x3caae7e4,0x3c3d4e93,0x3c55ffb0,0x3bbf5fd2,0x3be5f05f,0x36c69991,0x3b825c17,0x3b1cad74, +0xbb02e9a6,0x3a1d97bf,0x3b7cdb3b,0x3c072a24,0x3c3b6b20,0x3c5b1ae7,0x3c0b7258,0x3b2f40a8,0x3b9bb46f,0x3c756e1c,0xbb8fd9d5,0xbbb96728,0xbc39d2c8,0xbc58a082,0xbc4294b7,0x3c049f61,0x3b6e94ee,0x3b995ac3,0x3a8c508d,0x38b57ae0,0xbafb2ecf,0x3a10fd1e,0xb9eeb147,0x3a8643b0,0x3bf57b63, +0x3c39f8ba,0x3bdc3b7d,0x3c6315a5,0x3c0d58cf,0x3bc46305,0x3bb1c7b9,0x3b870242,0x3b60ebcf,0x39b70617,0xbaa84d6a,0xbaa664d4,0xba0c4fa5,0xba48b9eb,0xbb62fd15,0xbb78702d,0xbb71e00b,0xbb464d80,0x395bc7e5,0x399e6809,0x3c4c3eff,0x3c92b8b7,0x3b33f5fd,0x3b799026,0x3bf391c5,0x3c5bd55d, +0x3c90b590,0x3c894c27,0xbb7ba3a4,0xbc3b17b1,0xbbd45fa1,0xbc00f07d,0xbb285513,0x3a6415f6,0x3b0d96f5,0x3b5e5e16,0x3bc0d3bc,0x3b9c96fe,0x3b2ec7b8,0x3c49d2be,0x3bf6e4ea,0x3b57f5e6,0x3bfc4aaa,0x3b61f191,0x3b957015,0x3a512376,0x3b1f4335,0xbb19ab9f,0x390383d8,0xbab0b379,0xbb349d8d, +0xbba863b4,0xbb55325d,0xbb8e7939,0xbbd44a4f,0x3bc42483,0xbbede737,0xbc736e70,0xbb69911c,0x3bcd6752,0x3c853974,0x3cbf6ddb,0x3cbfff0e,0x3b9d7b51,0x3ac5e961,0xbaf49e2c,0x3b30ac29,0xbb51f625,0x394890be,0x3ae98eff,0x3afda832,0x3b14d573,0x3b2df84c,0x3b84f4f7,0x3b24431a,0x3c601037, +0x3bed4e8f,0x3a9bf351,0x3b2bdacb,0x3b8e6d87,0x3ac010a9,0x3ab0e32a,0x39a38bce,0xb7f0143b,0x3abb28c2,0xbba118c3,0xbbcc56ff,0xbc00f899,0xbb5d22a9,0xbc1d0761,0xbc8f7b51,0xbc5e9b24,0xbcf477c9,0xbcb45aa3,0x3ba27dcd,0x3c815033,0x3a681afa,0x3b33a5c6,0xbb527322,0xbc472ac4,0x3b4c60b5, +0x3c1a49df,0x3c1a0568,0x3bc80463,0x39234469,0xbb57f237,0xbbbb6695,0xbb2c0090,0xbaaccec2,0x3b26c08a,0x3b01cbab,0x3c25bcdc,0xba0d41bc,0xbb076d16,0x3a75c3b6,0x3a4b8df8,0x3aa54372,0x3ac90bc9,0x3a50995d,0x394b6c56,0x3a048a59,0xbae41d19,0xbb63c3d0,0xbb9b5552,0xbb90b1d4,0xbbd0c686, +0xbc7728d7,0xbca85e39,0x3d0dcd28,0x3c88cf3f,0xbc02f794,0xbc270e0e,0xbc52d62e,0x3a0467fe,0x3bd53f0c,0x3abb8bb2,0xba32e64a,0x396946c2,0x3c130611,0x3bb611cf,0x3b1d2fd1,0x3bcfec4f,0xbb2216b9,0xbbae8ae6,0xbbae218f,0xbae8bbf7,0x3a8ed391,0x3ba8c739,0x3c03ad64,0x3b930fe1,0x3a67bb3e, +0x3b4f2d7a,0x3a9d4330,0xbad2169c,0x3ab84ed3,0x3ab5a477,0x3a987633,0x3a6e328f,0x3abf1a24,0x3b73369c,0x3c2ac9af,0x3cb5919e,0x3cdb8f26,0x3c8a857e,0x3d114b5b,0x3d143138,0x3cfc5fa6,0x3cb0990a,0x3ba4260a,0xbc6868fd,0xbccdeab4,0xbcc5b4a1,0xbca3f728,0xbc85eb3a,0xbc504e88,0xbc20cc1d, +0xbbd35737,0xbb82088b,0xbb88428f,0xbbcd94f3,0xbbacde48,0xbc150700,0xbc0c8e44,0xbb53961c,0xbbda4d97,0xbbb8ebed,0x3b10ac4d,0x3b416d1e,0x3bdeeb50,0x3c437a98,0x3bda982e,0x3c1a3841,0x3c361e0d,0x3c7f8da9,0x3c8f32b3,0x3cb435d9,0x3cab45dc,0x3c983913,0x3ceb55ac,0x3cfef2ac,0x3d09edec, +0x3cf6273f,0x3cc3bbb9,0x3ca2e189,0x3c90c747,0x3bf44fb8,0x3a9a2295,0xbb77a2e7,0xbbf863f0,0xbc26e194,0xbc6e42f3,0xbc283df5,0xbc1b6d5e,0xbc0e979a,0xbc00a48b,0xbc0e7a09,0xbbe01bbf,0xbbc8206a,0xbb9c7e62,0xbad41e06,0x3b4c466d,0x3b4a66b2,0x3b177171,0x3bc4ed35,0x3bb20d67,0x3be20599, +0x3c28631b,0x3c31a388,0x3c448331,0x3c838356,0x3c9825ec,0x3cbcb4d5,0x3caddec7,0x3cbfd6c9,0x3ce6530c,0x3cf1a321,0x3cbec987,0x3c9f74a2,0x3c8a5e96,0x3ca7c45a,0x3cadac63,0x3ca43276,0x3c903d78,0x3c613117,0x3c1c46ad,0x3b770d05,0xbb3ee6d1,0xbb941588,0xbbd6a970,0xbbcbbc2e,0xbba84b05, +0xbb872479,0xbb612b94,0xba08380b,0xbaae1b26,0x3b860a2c,0x3be44675,0x3bb23b2f,0x3bd3e351,0x3bded8d0,0x3c09787e,0x3c24fee7,0x3c32d568,0x3c424983,0x3ca2b09d,0x3c76e5a3,0x3c9e6ddf,0x3c964ae1,0x3cadae04,0x3caee138,0x3cabd70e,0x3c9950f9,0x3cc88ce8,0x3c97d325,0x3c9ffc36,0x3c8607be, +0x3c560095,0x3c56190f,0x3c3dae49,0x3c588f2a,0x3c412e8d,0x3c4a0087,0x3c552e08,0x3c4be979,0x3c43cb29,0x3c2dfd3b,0x3c1896fe,0x3c04d66c,0x3bd33d31,0x3b958663,0x3ad4b202,0x3ac806ce,0x3c213566,0x3c333373,0x3c678eb4,0x3c781eb4,0x3c8eae2e,0x3c961a69,0x3ca794a8,0x3caab77b,0x3ca8c918, +0x3cb4f390,0x3c92dd83,0x3cc37572,0x3cbec1c3,0x3ca847b0,0x3cc2eee2,0x3cc174e4,0x3ca59d56,0x3c5f23b2,0x3c6b4b86,0x3c6f11d6,0x3c747716,0x3c7ff366,0x3c7c2c7d,0x3c79d868,0x3c664f35,0x3c5334ca,0x3c3ce7a5,0x3c2bbe36,0x3c1e7add,0x3c176589,0x3c1a6d03,0x3c1cbaf4,0x3c226ab2,0x3c2a9c52, +0x3c329123,0x3c152151,0x3c86eb42,0x3ca0ce92,0x3c887284,0x3c910d01,0x3ca87c52,0x3c8ae1cd,0x3c931bfb,0x3c905544,0x3c92ccf6,0x3c9f3869,0x3ca0afb2,0x3c9e357c,0x3cb04ea9,0x3c99c5c8,0x3c94bc0f,0x3cb30636,0x3cc96bf0,0xbb831833,0xbc18e4ef,0xba504166,0xbb098a75,0xbb2e6dd8,0xbb3c0306, +0xbb61a469,0xbb6a77ce,0xbb6a1aaa,0xbb530c1e,0xbb55c9bb,0xbb704490,0xbb5e7157,0xbb50b8a1,0xbb36dd93,0xbb258da5,0xbb253245,0xbb296867,0xbb1d64ce,0xbb066bc5,0xbac81f59,0xbbf8dc34,0xbbbf363e,0x3beac2cd,0xbc060019,0xbbe95e92,0x3babf755,0x3b9fd8a8,0x3ba7cdf1,0x3b973106,0x3b505a62, +0x3b1a5cd1,0x3ab6cebc,0xbbf6d2dc,0xbc0a869d,0x3bb638d0,0xbbcb918f,0xbb561c3e,0xbbd9e5c1,0xbb3e4b16,0xbb8414d7,0xbb816d4c,0xbbbfa93f,0xbbe9a424,0xbbfce8c9,0xbbcfdbe5,0xbbea6eef,0xbc0d362b,0xbc0fe617,0xbc02be14,0xbbcfc312,0xbba46462,0xbb8d0324,0xbb7d669d,0xbb579ae2,0xbada20a0, +0xb90d7eb0,0xba9ec8a2,0xb9f15b79,0x3b0398f4,0xbbab4bba,0xbbb867fd,0x3920b4b1,0xbb7f1ddd,0xbb67998a,0xba7c0ba1,0xbb451bcb,0xb8dd42c4,0xb9b91eea,0xbb5759ee,0xbb54137d,0x3a65bb07,0xbab50f8e,0xbc2be60a,0xbbb0a1f4,0xbac8a14a,0xbbb23b50,0xbba954e2,0xbc264944,0xbc3f18e0,0xbc424a27, +0xbc1c2e13,0xbc252b0e,0xbc5792c5,0xbc50cf4c,0xbc4055bb,0xbc033938,0xbbd3ead7,0xbbb8de17,0xbbb7a843,0xbb8f282e,0xba647eb2,0xbab2e910,0xbb0d5f36,0x3ae0302f,0xbb1fa894,0xbb0a3650,0xb9ab451b,0xbb9c6f98,0xba35ef97,0xbb01085c,0xbb4c8536,0xba27eccf,0xbb7cab99,0x394e3d8d,0xbb76deb9, +0xbb5263ac,0x3b5e16b2,0xbb98e2cb,0xbc0390bb,0xbbe361f8,0xbb3c9b7b,0xbb9f85c1,0xbb9fa20e,0xbc369012,0xbc7cf374,0xbc914ecd,0xbc59a3c2,0xbc748c9a,0xbca7f3ce,0xbcab873a,0xbc96f565,0xbc5fb7d0,0xbc2a93d8,0xbbfd758a,0xbbd55081,0xbb7ab4d7,0x3a768758,0x3b1e2a09,0x3b880829,0x3c08b746, +0x3bce35d2,0x3b9a25e8,0x3a33adde,0x3a9449ce,0xbb5824f6,0x3b10de9c,0x3bfbcda3,0x3b91c97e,0x3a7741eb,0x3b7f7ee1,0xbb501d8d,0x3a003e9d,0x3c234b1e,0x3ae94959,0xbc023fe3,0xbbf15854,0x3b1212ab,0xbbeabd63,0xbbb67cb7,0xbc939d27,0xbcb11d5d,0xbca725a7,0xbc87ae26,0xbc863479,0xbcb10f6e, +0xbcb5e605,0xbca43ed8,0xbc504fd7,0xbc30eea2,0xbc14c00f,0xbc1280fb,0xbbd08bac,0x39891656,0x3b94d702,0x3b2a173d,0x3c1920b2,0x3bdddc25,0x3bc66344,0x3ba4417a,0x3b21ebaa,0x3a5b2718,0x3a3378a9,0x3bd0ec5d,0x3b64ce4f,0x3b5ec5b1,0x3ba24b47,0xba719765,0xb98d5bd4,0x3c5bad18,0xbb5c700c, +0xbc946790,0xbcc8319b,0xbc174134,0xbbbd0f83,0x3b44edfe,0xbaf1b06e,0xbbce3af9,0xbc04b5f5,0xbc26b2b6,0xbc1544ff,0xbbde44de,0x3b01e3d1,0x3bc79f81,0x3c07f59f,0x3b18122e,0xba0da9fa,0x3bc81759,0x3b3d057c,0x3a98c646,0xbb86d453,0x3bca917b,0x3c55445f,0x3bcdf0c5,0x3bd8f55f,0x3b0d0ebd, +0x3a8dd6b2,0x3b4fef7a,0x3b5b3a35,0xba5b64cd,0xbaa96731,0x3adf0ae4,0x3bb263b3,0x3c1866c2,0x3ae26344,0xbbc3c152,0xbc911e2d,0xbc38c762,0x3cae464e,0x3c102615,0xbc169650,0xbc243caa,0xbd0195fc,0xbcf124f4,0xbb22f817,0xbbede24d,0xbb23e0ff,0xba3d812b,0xbb9c5f32,0xbc057b52,0xbc0d159d, +0xbc402356,0xbc5a0acc,0xbc8a2b8c,0xbc3f9aaa,0xbb8d3a3b,0x3ae433bb,0x3b13bace,0xb8d90ec2,0x3b21ad49,0x3ae82c71,0x3b5b201f,0x3b03f093,0xba94065b,0xbb1ccddf,0xbab82f6f,0xba481453,0xba01126f,0xbb8d1365,0xbb77ec50,0xbb787072,0xbbcc8740,0xbc5ac76a,0x3b101742,0x3c3e3175,0xb9d7967b, +0xbc243d68,0xbcb47b96,0xbd078d7e,0xbceda867,0xbcb02770,0xbc21f266,0xbb2d3284,0xbb978f9a,0xbc122297,0xbc63d97c,0xbc52c95f,0xbc440fb5,0xbc278079,0xbb377699,0xbb0d2efd,0x3b533c60,0x3bbef49a,0xbb013237,0x39ee6012,0x3af21c85,0x3aa4d6c0,0x3a02a7c9,0x3b1985cf,0x392e7700,0x3a251e3f, +0x392e2ab4,0xbad7af74,0xbb716653,0xbba481c6,0xbbc4ea9e,0xbbf875ee,0xbc243d91,0x3938a68f,0xbc4614bc,0xbc84bbdd,0xbc61deeb,0xbca80da7,0xbd41ec0a,0xbced2251,0xbcca8943,0xbcd2cfd9,0xbc42cfda,0xbc1ff50d,0xbc765091,0xbcacaf31,0xbcbdd095,0xbc89d602,0xbc863744,0xbc32abea,0xbaffb4b0, +0xb883c7e5,0x3bb65c3a,0x3c272a82,0xbb1dec68,0xba4df535,0x3b0aeebb,0xb8a2016f,0x3a8efb82,0x39849d43,0x3a509694,0xba4ab868,0xbb01c20d,0xbb59701a,0xbbfab160,0xbbf63254,0xbbe4eb7f,0xbc2da272,0xbcafeb5c,0xbc588955,0xbcebc890,0xbca551f7,0xbccd7ee5,0xbcfbe9a6,0xbd76e4f1,0xbd4a44ab, +0xbd299b17,0xbc94466f,0xbc8f78b9,0xbc4550a7,0xbc465760,0xbc5dba32,0xbc61ec49,0xbc2b1d10,0xbc8ce971,0xbc7b499a,0xbc4c5082,0xbbc6768f,0xba0d91be,0x3b8cd85e,0xbae67230,0xbb33ec13,0xbb0e3759,0xbb0dae55,0x3950f5e9,0x3a958dfd,0x39cc55c3,0x39880cfd,0xb9d8f2ab,0xbb01eedf,0xbb8989f0, +0xbb8a8982,0xbb8f2339,0xbc32d6c8,0xbc8ad831,0xbcd6af26,0xbc19f239,0xbd1a6944,0xbd8de892,0xbd92dfd7,0xbd4976f4,0xbd1772f2,0xbcd8e368,0xbcd09559,0xbcad2a9b,0xbcb6d875,0xbcc8a5ae,0xbccb5900,0xbcae1cee,0xbc80e917,0xbc2452bd,0xbc01a306,0xbba6a182,0xbadb254f,0xb92ddda1,0x39cc84ab, +0xbbcc51f1,0xbbb213da,0x3b9a9190,0x3b0d2861,0x3a234d89,0xbb6f65af,0xba5d1373,0x3ab28bb9,0xbb17f92c,0xbb960397,0xbbb98f0c,0xbbf4bf3b,0xbad11619,0x3c2e695f,0x3bfb9fc0,0x3bad2d4d,0x3cf75196,0x3c3ea707,0x3bd40da4,0xbb67ab74,0xbc924710,0xbcf3946c,0xbd06fc1d,0xbd019bf3,0xbcad0072, +0xbc548910,0xbc2c108b,0xbc220fb6,0xbc4a6f47,0xbc5cd5b1,0xbc5d3818,0xbc5bb52d,0xbc0f2151,0xbc12401f,0xbbcaf2dd,0xba9004c3,0xbbc7a4ce,0xbba115f9,0xbbf3b171,0xba122fa9,0x3b7f4f99,0x3beb8810,0x3c0e9fc4,0x3c01edfe,0x3c0e2297,0x3c526680,0x3c75e444,0x3c9bcfc8,0x3c83858e,0x3c6d336e, +0x3ca8ffec,0x3c84643a,0x3ca2c7b5,0x3c9bc791,0x3c59475b,0x3bf7c844,0x3bacb653,0xbbd1c27b,0xbc642a1a,0xbca95f93,0xbc963f5e,0xbc8f531c,0xbca56978,0xbc806f93,0xbc67eb4b,0xbc52ca16,0xbc4be9a4,0xbc45ba73,0xbc11c4c0,0xbc0d30f1,0xbbcefd9b,0xbba3042a,0xbb8d91d1,0xbabba37a,0xba9ff8cd, +0x3b095a05,0x3b9854c8,0x3bd60f73,0x3be197f1,0x3c29cb84,0x3c55be75,0x3c7a65c8,0x3c8f0c3b,0x3ca07819,0x3c9683fa,0x3ca045ca,0x3ca2f4ea,0x3cbaef44,0x3c4a996b,0x3c3fbf88,0x3c427aa9,0x3c1fa55f,0x3c111def,0x3baa5294,0x3aa60272,0xbbb57d8e,0xbc0edbed,0xbc48a2bd,0xbc88143b,0xbc49516f, +0xbc389c60,0xbc0e347b,0xbbf1ab45,0xbbdf9669,0xbbb35d1f,0xbb97e0cf,0xbb6f3c34,0xbb771996,0xbb1c9407,0x3a89c89a,0x3af77dde,0x3b49e2c1,0x3b67ea69,0x3b8077e1,0x3c14397a,0x3c0dd238,0x3c289716,0x3c559f39,0x3c65eebd,0x3c8b89fb,0x3c65cba4,0x3c6e661e,0x3c3aead6,0x3c385feb,0x3ca5daf1, +0x3c507b87,0x3c362d3b,0x3c15ac17,0x3bdc9c0b,0x3bd271ce,0x3bb2971e,0x3bda53a5,0x3c139e18,0x3c2cbc88,0x3c4321bb,0x3c2d4f09,0x3c16aca8,0x3bedbf60,0x3bc951db,0x3bb7b888,0x3ba1e98a,0x3b796fb3,0x3b7cc918,0x3ae01531,0x3b01780a,0x3b27a3f0,0x3b3f3b34,0x3b8cedd9,0x3be901da,0x3bfcebe3, +0x3c0cb20a,0x3be2d120,0x3c379b98,0x3c3d121b,0x3c5af03c,0x3c831ac4,0x3c5fec77,0x3c81de1b,0x3ca3bef6,0x3c522c18,0x3bc9db13,0x3c08aee2,0x3c1b1227,0x3c15c8c3,0x3c136132,0x3c16fd45,0x3c0e0631,0x3bfbaf16,0x3bd267c7,0x3bb6fc83,0x3ba56243,0x3ba40914,0x3bb2b803,0x3bc23cf5,0x3bcea755, +0x3bd198d7,0x3bd8a259,0x3bdc75bf,0x3be15861,0x3be9ad88,0x3ba35a1f,0x3be452da,0x3c764dad,0x3ba72d13,0x3bd799d7,0x3c812a85,0x3c8b4b51,0x3c893092,0x3c887690,0x3c89f8da,0x3c83a0eb,0x3c830963,0x3c1a0e4a,0x3bebeca7,0x3c84b5fa,0x3c1c7ee4,0x3c77b73c,0x3c79f1d4,0x3c7a70db,0x3c401aa4, +0x3c2052bf,0x3c216660,0x3c18f318,0x3c36cd3a,0x3c3f67f3,0x3c35d8ee,0x3c393407,0x3c355920,0x3c1ede31,0x3c2068f3,0x3c213fe2,0x3c255ad8,0x3c2b5ba0,0x3c35bd0b,0x3c36199b,0x3c39bc75,0x3c2df455,0x3c3d09f5,0x3c3ae254,0x3bc6ccc7,0xbc216372,0x3c55d781,0x3be24c33,0xbc197be5,0xbc0fe725, +0xbc05d2b6,0xbbc2f57f,0xbbf17e03,0xbbdcaaa5,0xbb89353f,0x3bb8cf69,0x3c61768d,0xbbc090a1,0x3b8470d2,0xbb843c6d,0x3c459211,0x3c2ed46b,0x3c3f3109,0x3c2983b1,0x3c90cc8c,0x3ca08fe8,0x3c88e44f,0x3c91b42a,0x3c87e750,0x3c46d653,0x3c389520,0x3c43eef6,0x3c6badea,0x3c77e4cb,0x3c859ca1, +0x3c7f9523,0x3c7761b9,0x3c6e72f8,0x3c7f9565,0x3be7fb11,0x3c21515e,0x3b871b99,0x3c140975,0x3c4673a9,0x3b0ce29c,0x3c045368,0x3bc7d0bf,0x3c13cce7,0x3be26333,0x3c183102,0x3bba7e74,0x3ba152cb,0x3bf91731,0x3c28ee41,0x3bfbf89c,0x3c2bea81,0x3c7dfcea,0x3c143a3e,0x3c2f1233,0x3bfbb299, +0x3c9df85b,0x3cbecc20,0x3c93d868,0x3cb30767,0x3c96c7ef,0x3c39272d,0x3c243372,0x3c291a41,0x3c54021f,0x3c83bd98,0x3c965ed0,0x3c9f30f9,0x3c92e835,0x3c928294,0x3c71cf26,0x3c1ef878,0x3c2c6374,0x3c45df36,0x3c0f3ba9,0x3bc3bb19,0x3c042fc5,0x3b88b3d7,0x3c4abc1e,0x3c5079b7,0x3c0a2dda, +0x3bda0ec9,0x3c13c7d0,0x3bee51fe,0x3c05ec6b,0x3c594f6e,0x3c81a040,0x3b9853dc,0x3b6fedc7,0x3c100b47,0x3c1a2b26,0x3bc1d456,0x3cc6acc2,0x3d03cfad,0x3cb84fde,0x3cf69efb,0x3cc6fa82,0x3c2e2975,0x3c1ac788,0x3c1b865c,0x3c8dd45e,0x3caf09d6,0x3cbdc1f3,0x3cb68a3a,0x3ca98c59,0x3c9f0141, +0x3c8ee3a5,0x3c7aaded,0x3c7e4436,0x3c15eb4e,0x3c1d9c86,0x3bd3df24,0x3b966680,0x3b6fc57f,0x3b4b4dd7,0x3c1aff74,0x3b92f971,0x3b8575c4,0x3c04c897,0x3b081dea,0x3b82c345,0x3ca69fd0,0x3c2c4344,0x3c7b0f25,0x3c4ccb7d,0x3c017f3e,0x3be0370b,0x3a6f320a,0x3cc18ea4,0x3cf60b13,0x3cc55fc2, +0x3cffc446,0x3ccb881e,0x3c1c8cc7,0x3bd00877,0x3bdb1f6d,0x3c44f4c7,0x3ca39448,0x3ccbb7fb,0x3cda625b,0x3cc732f1,0x3cb46463,0x3c8f38bc,0x3c31374f,0x3c5f4dee,0x3c49db88,0x3c215955,0x3be048fb,0x3b36c034,0xba1b4a8f,0x3adfddc0,0x3c0d75c6,0x3b829831,0x3b58582e,0x3bae0330,0x3aca3cc6, +0x3b997f46,0x3c9ed510,0x3c1e2f06,0xbb722dbc,0x3c2fb85e,0x3ca8093b,0x3cdf5d66,0x3d1b09da,0x3d0804c5,0x3d11b789,0x3d12448e,0x3cc573a1,0x3c8218e8,0x3c337aaf,0x3c593fde,0x3c2d550c,0x3b82558c,0x3bc5aac3,0x3bb1210d,0x3b8aa20c,0x3c3a89d8,0x3ca04b2f,0x3cada189,0x3c9a7446,0x3c963cb2, +0x3c26ed1b,0x3c1d1fd8,0x3bd2c690,0x3b11edbb,0x3b9831fe,0x3b217d7e,0xbacff332,0x3aaf8ecf,0x3bb96ef0,0x3c360ed5,0x3c525a1a,0x3c180fff,0xbbe6ec1c,0x3b8d8f57,0x3ba96f00,0x3d118033,0x3b935075,0xbb859c43,0xbbac2155,0xbbea6129,0xbbd0b964,0x3c32c80c,0x3c1fa4e5,0x3c3f5b0e,0x3c11f7b7, +0x3bb3862f,0x3b09c821,0x3b44610e,0x3bce8bd7,0x3c48494d,0x3ccfc5f4,0x3ca51355,0x3c8f3cda,0x3c3ea489,0x3a491722,0x3bb7b07f,0x3bdddfe6,0x3bd8edb9,0x3bbd58e5,0x3b3e0a6f,0xb95950b4,0xb84dcfbc,0x390d46ba,0x3ae662ac,0x3a5a9e88,0xba8f3e00,0x38a6aac5,0x3b1b67f8,0x3b8f1a62,0xbad6ada9, +0x3bff5fa4,0x3c8a5ee7,0x3b53e232,0x3bfd99ee,0x3c91fa7d,0x3ccfc471,0x3d0875d8,0x3d1c707e,0x3cac1db5,0x3c2a7b20,0x3c1544ed,0x3c3375a7,0x3c7572f1,0x3cb5d075,0x3c848ace,0x3c4b3898,0x3c22583b,0x3c23f047,0x3c36107d,0x3c903ba9,0x3be7ea6c,0x3b56bde8,0x3c026738,0x3be1b2b7,0x3ba0b0c8, +0x3a98f584,0x3b33c036,0xba78dc30,0x3a1d64fb,0xb968a2eb,0xba842367,0xbb1db286,0xbb49eb6c,0xbbb5924b,0xbb6ab0b3,0xb9788e6c,0xbc4a3743,0xbc060335,0x3c14c459,0x3ca68104,0x3d2959ea,0x3d3fd4da,0x3d4d7713,0x3ce9525c,0x3cc9ff23,0x3c7d34da,0x3c4f725e,0x3c72aa5b,0x3c8a6c2b,0x3cb759fc, +0x3c7d609e,0x3c2978ad,0x3bc5c7c7,0x3c038397,0x3c2bb6e8,0x3c6adeea,0x3c0434a2,0x3b2452a5,0x3bc2dd8f,0x3b90ae79,0x3b718400,0x3ac3d036,0x3af10d22,0x3a10874a,0x3a66caad,0xbb43ccc3,0xbbaaffbb,0xbb628c61,0xbbcf9c5a,0xbc25301b,0xbc90acfb,0xbc2f8b5d,0xbcce7180,0x3b74d940,0x3cc6ff55, +0x3d06e45c,0x3d0c9729,0x3cb5ca48,0x3c3282d6,0xbb4af26b,0x3b9d0ba6,0x3b83a277,0x3c05e1ee,0x3b206dfe,0x3ab6f796,0x3a6cbe92,0x3ba0dc2e,0x3c13df73,0x3c24ffc4,0x3c4108af,0x3c1b4964,0x3c08a29a,0x3b23fb9c,0x3b214db4,0x3aba66c9,0x3b0b9688,0x3b1ce84c,0x3b84f39e,0x3a158839,0x3a4c9584, +0x3a78f065,0x3a03cf01,0xbb0da5bd,0xbaec37b7,0xbb1354fc,0xbb831851,0xbc8e39c8,0xbcabd70b,0xbc11b4f9,0xbcdb6ed4,0xbc00d627,0xbbf4b237,0x3c75a421,0x3cc5921a,0x3d018939,0x3cbf4940,0x3c95283a,0x3c8aef4a,0x3cb1229c,0x3c2a91de,0x3be8fa74,0x3c1dc7c2,0x3afa767b,0xbb3a97af,0xbb8c24b2, +0x3acbda8f,0x3b9200b4,0x3c0c34b1,0x3b084f2c,0x3aa46b68,0x3bb98ab5,0x3b172dba,0x3a4c1284,0xb9a3f903,0x3b4965ba,0x3b5b6cde,0x39c8ee41,0xbb78dd69,0xbb444aa2,0xbb9f206f,0xbb66ab2c,0xb997193f,0x3bd83655,0x3ab22025,0x3ca26cb7,0x3d187635,0x3cf1b9c6,0x3c8ecf27,0x3b2b3b2b,0xbbe22962, +0xbc1e1034,0xbb60ddaf,0xbbc01cff,0xbbd05ee2,0xbbfd3172,0xba7d7c32,0x3b23edd4,0x3b37028e,0x3b832e0b,0x3b8d60d6,0x3ae6a2ea,0x3a35344a,0xb972ce56,0xbb0396a5,0xbb81be67,0xba8228ae,0x3b028e3b,0x3b5ec379,0x3bd1b4b6,0x3bf95807,0x3bf79a2b,0x3c1678f8,0x3c2e2e4f,0x3c854826,0x3c9af132, +0x3ca95838,0x3ca1a0d3,0x3ca8efc4,0x3ce596bb,0x3cea09ba,0x3ce386ab,0x3cd896df,0x3cc77405,0x3c87aaf6,0x3c0abbba,0x3b20dd5c,0xbb0de3ef,0xbb4dadfb,0xbbe2f05a,0xbc04af39,0xbc44ea59,0xbbfe30c4,0xbbe19b5e,0xbbb23c7b,0xbba3f73d,0xbbefe6df,0xbbe6e8f1,0xbbb521a1,0xbb7dda47,0xbac38050, +0xb9f023b9,0xba4a561e,0x3b437843,0x3b8beded,0x3bb515ab,0x3bddd5a5,0x3c1a5927,0x3c313829,0x3c54adfb,0x3c8c8cdf,0x3c9e347c,0x3cb893d3,0x3cb5eba3,0x3cc6ce76,0x3cd12907,0x3cdd6e4f,0x3c888eb3,0x3cae7a55,0x3c8cdf3c,0x3c8bbdb8,0x3c91133c,0x3c617fa8,0x3c0fc14f,0x3b27696d,0x39eafcef, +0xbb0d3d43,0xbbe703e7,0xbbfb07c0,0xbc31b4fd,0xbc3d1e95,0xbc2d96d6,0xbc24d9b2,0xbc057421,0xbbafa89d,0xbb8c740f,0xba32ffde,0x3b321735,0x3b1e8da4,0x3bbc080f,0x3bbada3b,0x3bee499a,0x3c207950,0x3c1beb91,0x3c7a82b0,0x3c83d36a,0x3c896531,0x3c91376f,0x3c9ec5ba,0x3cb28da7,0x3c9241d7, +0x3caf6284,0x3c9ee76f,0x3c446597,0x3c6774f3,0x3c7d5e15,0x3c6a9a9a,0x3c466ca0,0x3c74b0f3,0x3c87bb83,0x3ca43625,0x3c89adb2,0x3c5f1ad7,0x3c425082,0x3c167f94,0x3bed0f96,0x3b72cc02,0x3b945942,0x3b9f05c3,0x3b79285b,0x3b5b2d02,0x3b1709cd,0x3b52ddff,0x3b794f60,0x3bb14f33,0x3bd259a2, +0x3c07cad7,0x3c11ac97,0x3c16da8b,0x3c3aa211,0x3c4e3f8d,0x3c4458b8,0x3c77ae7a,0x3c78f188,0x3c811fd0,0x3c8fdf8c,0x3c6f51bc,0x3c4a1b5c,0x3c9abba7,0x3c7a096e,0x3c4e1e22,0x3c477ec8,0x3c4d03e5,0x3c4e8205,0x3c4f278c,0x3c39a2a6,0x3c311776,0x3c1e4e7d,0x3c19aaa8,0x3c0c441b,0x3bf96d4a, +0x3be2296a,0x3bc9c654,0x3bdc2665,0x3be2e6bc,0x3bf6c30c,0x3c074974,0x3c0c4ac3,0x3c0f504d,0x3c4b5cf4,0x3c3a11ad,0x3bc6af24,0x3c5fe414,0x3c46899a,0x3bc176b4,0x3bc52e47,0x3be0d2b4,0x3bfe6233,0x3c025327,0x3c0d6d9c,0x3c24ad36,0x3c69d422,0x3c767077,0x3c0b8740,0x3c4c5583,0x3c9e404f, +0xbbe541ed,0xbbe8c9df,0xbc13e181,0xbbb0d0ec,0xbbbd03e9,0xbbb760fe,0xbbd024b3,0xbbdeba98,0xbbeec390,0xbbd9dfa8,0xbbde8766,0xbbf6efb6,0xbbea8153,0xbbe7e669,0xbbeae898,0xbbdbdc34,0xbbdc73a0,0xbbd99519,0xbbd44ff4,0xbbadbc3e,0xbbdaac9b,0xbaa9c004,0x3baf76e1,0x3c9b23e5,0xbba05fe8, +0x3b7d7875,0x3c94eefd,0x3c9394f8,0x3c8eda46,0x3c80a42b,0x3c91cecb,0x3c88b07f,0x3c710dfb,0x3baae4b4,0xbbc44ba6,0x3c8ab644,0x3c0188db,0x3c8eac7f,0xbbec64cf,0xbbdae739,0xbbd90ecb,0xbbc25fee,0xbc08d9d3,0xbc26bc8e,0xbc4ff7cc,0xbc2da27f,0xbc405517,0xbc5c5184,0xbc5a94d1,0xbc55d0be, +0xbc4ea79f,0xbc2df8f5,0xbc2116b9,0xbc156195,0xbbf8821f,0xbbd32704,0xbbe54735,0x3c0b84bf,0x3b5c5adb,0x3bd8d8d9,0x3b36b0f0,0xbb8fb8da,0x3bb1abd8,0x39506484,0x3ba0b8bc,0x3b5868a1,0x3b61a7d3,0xbba21a1e,0x3b9a0cc4,0x3b2a0079,0x3af16fa6,0x3c0d88fa,0x3b8250f5,0x3b507405,0xbc308c31, +0xbbaa4557,0xbbda1acc,0xbba6c73b,0xbc24f6fd,0xbc459c3f,0xbc85af26,0xbc4daddc,0xbc5fcf4d,0xbc94f5be,0xbc8c7bb6,0xbc8ebeda,0xbc81b283,0xbc65a2de,0xbc492895,0xbc4e88b2,0xbc0bd646,0xbc0b338f,0x396de8f2,0x3c350558,0x3bbc2cc5,0x38c952d7,0x3b6c2c46,0x3b3783cf,0xba8e178c,0x3b0603cd, +0xbbe9da3c,0x3b762754,0xbaebb82e,0x3b15abf7,0x3a72f79a,0xbb065676,0x396c5eb0,0x3c34608d,0xbba6fb0d,0x3be5e7da,0xbb13ee20,0xbc06c5d6,0xbb89910b,0xbba41d58,0xbc1d0c24,0xbc80cafb,0xbcbff27b,0xbc92dc1f,0xbca37585,0xbcd3b208,0xbcd5d46e,0xbccc660e,0xbcc3f4ac,0xbc9dbc06,0xbc7f221e, +0xbc634791,0xbc1c72de,0xbbd15e88,0x39ab2e92,0x3bf618a6,0x3b5b0353,0x3bd5f6f8,0x3a968ac1,0x3b743294,0xba8acb01,0x3a76319c,0x3b4ab64a,0x3c06c8b5,0x3ab480aa,0x3b1bcab3,0x3b643edd,0x3ad8855f,0x3b27712b,0x3c58c08b,0x3b957a2c,0xbb9b268e,0xbb87ea84,0xbb9a1543,0xbbb0892a,0xbb4f52dd, +0xbc4b843f,0xbc848c07,0xbcc2717b,0xbc9598fe,0xbc9f5fdd,0xbce6fbde,0xbcdb1d6f,0xbce50a7c,0xbcc5129e,0xbcb03c25,0xbc97c27c,0xbc952d14,0xbc472497,0xbbefd59c,0x3b308f57,0x3c92544e,0x3c0b5380,0x3bf9b1ad,0x3ba8963a,0x3b5ef94e,0x3b5efd4a,0xbaa51bef,0x3a983db1,0x3bf18ce3,0x3b88ab39, +0x3b13bbc8,0x3bd71e1f,0xbae64eab,0xb93cfec9,0x3c757a98,0x3bb9f3e3,0xbb54c327,0xbc50015f,0xbca8b603,0xbc26ffd1,0x3b859971,0xbc2d4a2d,0xbc95e2c0,0xbcbb0c31,0xbc980a8d,0xbc7671f0,0xbcbcf813,0xbc51c1d4,0xbbf13c34,0xbb2adfac,0xbb9ca570,0xbbb41073,0xbc027b27,0xbc0dc624,0xbc116df9, +0xbb08211f,0x3c26a06d,0x3bc8dc8f,0x3bfa0db6,0x3b9f0542,0x3bc51c5a,0x3ad4a3b3,0x3b8a9a1d,0x3b323f7f,0xbb03fd23,0xbab64426,0x3b732285,0x3c1c133e,0x3c28c9c5,0x3b99bbbf,0xba910560,0xbc70e4fd,0xbbd6e9aa,0x3c83e67c,0xbc0e2b62,0xbc655cda,0xbbed4de5,0xbcaf50e2,0xbc7abfc8,0x3bfda18e, +0xbae83494,0xbb577303,0x3ae0ee34,0x3b5e25e1,0x391f3a25,0xbb803ace,0xbc497e9c,0xbc8fcb84,0xbce32095,0xbc79f49a,0xbc45700d,0x3b5c5a29,0x3c1636e9,0x3b288a10,0x3b9081ee,0x3b041efe,0x3ad2c3e9,0x3b1f949b,0xba7973ef,0xbaa5e174,0x39638cfe,0x3b02e571,0x3a9dddc1,0xbb050d9d,0x3a83b17e, +0xbb5babaf,0xbb9a1262,0xbc2bbad8,0x38c047e3,0x3b91bb8a,0xbbb29b34,0xbc4c8f57,0xbcc62678,0xbcf28784,0xbceba209,0xbcb8f0a0,0xbc8dec6b,0xbc3abea0,0xbbdc72e0,0xbc81f259,0xbcac88dc,0xbc9e06a5,0xbc9ba859,0xbc70253c,0xbc0bfdaf,0xbb80bd93,0xbb07a41c,0x3b27d74d,0x39eff5b0,0x3a09e178, +0x3bca83f2,0x3ad042cd,0x3a6f1229,0x3aeaf72b,0x3aa25ddf,0x3997cfdd,0xba49bd79,0xbacf17fc,0xbb12d705,0xbb3db45c,0xbc0a0a49,0xbc0af7dd,0xbbcffe21,0x380166af,0xbbe0fb71,0xbbd2ad49,0xbc0bf463,0xbc8e8efc,0xbd32ff04,0xbd0ab776,0xbd1073c4,0xbd0235c5,0xbcbd0455,0xbc9a8a69,0xbc721b01, +0xbcdd056a,0xbce433ab,0xbcbc796b,0xbc99696e,0xbc4c230f,0xbbbb057b,0xba6d0cee,0xbac31a8a,0x3bbbc11a,0x3ab96ea6,0xb7cb53f5,0x3b1b8c35,0x3b5da4b4,0x3a8dfa11,0x3aa020e3,0x39aff161,0xb9e9ed46,0xba4f6337,0xbb7bfddb,0xbbc7201a,0xbb91a6f6,0xbbeaf738,0xbc4150d4,0xbc7cb92b,0xbc603865, +0xbc71b466,0xbb18f0f8,0xbca37533,0xbcf04847,0xbd759fa6,0xbd4f9be8,0xbd27b840,0xbc88244e,0xbc517054,0xbbf66926,0xbbd43afe,0xbc150343,0xbc2e3c14,0xbb740762,0xbc0f340c,0xbc289783,0xbc76e768,0xbc18e5f9,0xbb9d05fb,0x396fc625,0x3ad9453f,0x3a054ee9,0x3a4667e5,0xb9ea0f17,0x3a8ef3d2, +0x3b1ec52f,0xb9c2366d,0xba199cb6,0x39de1dc6,0x3a1b7feb,0xbafdc954,0xbb134d20,0xbb61f652,0xbc358cfa,0xbc47da8a,0xbcaaf7bb,0xbc771760,0xbd4767a8,0xbda1eef9,0xbd8de855,0xbd2a3d1d,0xbd18c231,0xbd04aeb5,0xbceba205,0xbcb32922,0xbca29bee,0xbccaeda1,0xbc93522b,0xbca49959,0xbc8fe447, +0xbc3ba12a,0xbbe2c4f3,0xbb89b654,0x3b879be3,0x3b3e18f9,0xbaaf9b11,0xba490c57,0xbb179770,0x3b883dfd,0x3ad17d58,0x39c694b8,0xb9db32c7,0x3b1f27ab,0x3b0164e9,0xbb49c7c3,0xbc01b84d,0xbc21d5a5,0xbc148028,0xbc6c6f9e,0xbaf8af08,0xbb01e407,0xbc5410bd,0x3d092a92,0x3b56b7fc,0xbc341b66, +0xbc9e061a,0xbd0cd410,0xbd124323,0xbd0aefa3,0xbd027f70,0xbc936410,0xbc17b0e4,0xbc1d94ef,0xbc027fd2,0xbc105b2f,0xbc0bdccd,0xbc199f2a,0xbc1055ec,0xbc282efb,0xbc03cc1d,0xbbb435e3,0x3ab849cf,0xbafb8714,0xbb6e67d8,0xba5bf68d,0xb814fa0e,0x3b23d99b,0x3b782636,0x3b40f8ef,0x3bcbc91d, +0x3bd1d1dd,0x3c5b75fb,0x3c620fbd,0x3c8126db,0x3c858bbd,0x3c4c1705,0x3c95397c,0x3c461949,0x3cb9646c,0x3c81ea10,0xbad45e70,0xbba30f0e,0xbc49b7b0,0xbc976e9c,0xbcd4e38c,0xbd0825fb,0xbcda91ad,0xbcbf7892,0xbcba2a01,0xbc9fde13,0xbc92ed42,0xbc7886b3,0xbc7f7e86,0xbc73b251,0xbc6dd8d9, +0xbc57f502,0xbc355e50,0xbc14a02a,0xbb7e8391,0xba0bc3fd,0xb94517a5,0x3b88fd57,0x3ba5de13,0x3bd2dd7a,0x3c1c2593,0x3c3fd43a,0x3c45cae1,0x3c66833c,0x3c866af4,0x3c9f8b15,0x3c91bd7f,0x3caa1ac9,0x3cd039cc,0x3cc9a830,0x3c8c2507,0x3c061cb8,0x3bb0dfcb,0x3ae19cf3,0xbb273a31,0xbc0e9f97, +0xbc6e3df7,0xbcb4cca9,0xbcb8abcb,0xbcbd932c,0xbccdbf6a,0xbc9d5d2c,0xbc8d37e1,0xbc5b316c,0xbc58d5a2,0xbc5f9145,0xbc58a541,0xbc334457,0xbc52bdba,0xbc071f91,0xbbaa517d,0xba8d7aec,0xb9ae6b7f,0x3b06d55c,0x3b7b26bd,0x3bb863d8,0x3c0de819,0x3b6f02ab,0x3c56ec13,0x3c119e4d,0x3c7333cb, +0x3c691122,0x3c668e0b,0x3c99af61,0x3c77e724,0x3c39c41e,0x3c88e5ce,0x3aaa259d,0x3a063b11,0xbaf8265d,0xbb79fd96,0xbb7ccb4e,0xbb95f451,0xbbae89f2,0xbb2ddb25,0xbadd57d1,0xb9b08303,0xbac611ae,0xbb1af5f9,0xbb64ac3a,0xbb19848e,0xba45abfb,0xb959f0d0,0x3a26eb9f,0x3b31d0fb,0x39f063e7, +0x3b434cbf,0x39df9011,0x3a78d719,0x397cdb59,0x3ad26ce5,0x3a1c2e3a,0x3b57e31d,0x3b4b5053,0x3bfd9596,0x3bff6b86,0x3b9acc66,0x3c7952f3,0x3c0c831b,0x3c154c01,0x3c8368a9,0x3b3f87e9,0x3b2acd09,0xbaefed32,0xb8ecbe26,0xba80cf69,0xbae87a69,0xbb2bcd89,0xbb79bafa,0xbbae075c,0xbbbfa13d, +0xbbc9f027,0xbbc9dc02,0xbbbbcd07,0xbb9f39ad,0xbb8e591f,0xbb82f4b0,0xbb853abe,0xbb842593,0xbb7c1514,0xbb60c370,0xbb6d876b,0xb5e2c5a8,0x3bdf2021,0x3c8212a7,0x39b85440,0x3be54fa4,0x3c912873,0x3c9f8d9e,0x3c947793,0x3c8ff5c2,0x3c9f4d6f,0x3c9a54f4,0x3c8cb111,0x3c01d917,0x3b00af0e, +0x3c911a15,0x3c31c0c2,0xba7f331e,0x3c6521e4,0x3c1a7035,0x3c8205ab,0x3c281318,0x3c21b6ec,0x3c17bd6c,0x3c2d4ec5,0x3c353ea1,0x3c31c43e,0x3c36afdf,0x3c358d65,0x3c245a52,0x3c2546c4,0x3c2721e1,0x3c277575,0x3c31dc80,0x3c3b56fe,0x3c39751b,0x3c3d8d5a,0x3c2dd6bc,0x3c540d80,0x3b63e273, +0xbb6a245f,0xbc5796ec,0x3bd34fec,0xbb4b76e0,0xbc5fa87e,0xbc5d94aa,0xbc4c7ea6,0xbc2822a6,0xbc63171b,0xbc5a9e76,0xbc3398dd,0xbbaa15cd,0x3bf913bc,0xbc229774,0xbbdd9021,0xbc7caa91,0x3c2d4f92,0x3c491acc,0x3c3b15a4,0x3c1b5c92,0x3c6bdbe0,0x3c8307e4,0x3c7b1277,0x3c855561,0x3c81a5d2, +0x3c4ace13,0x3c373f57,0x3c37f230,0x3c49d9de,0x3c674e83,0x3c81b3e4,0x3c7a3797,0x3c6e6d25,0x3c7477c0,0x3c93a78c,0xba5a4e49,0x3ba3659d,0x396fc929,0x3a15fd07,0x3bfb733e,0xba52374a,0x3b7b04b3,0xba333552,0x3b6d5c92,0x3a9cba00,0x3c388c5a,0x3ad32fcf,0xb8b48f77,0x3b256ae7,0x3b81a746, +0x3b7d8c8c,0x3a1d2240,0x3ca08602,0x3c4002b9,0x3c20799e,0x3bd04326,0x3c609179,0x3c82b93b,0x3c711ce0,0x3c94d28d,0x3c8795ec,0x3c377a6f,0x3c239aee,0x3c20cb08,0x3c2d3063,0x3c7f0e24,0x3c8e2a36,0x3c99328a,0x3c8431a6,0x3c9f2a0f,0x3c48da3f,0xbaccfa98,0x3bbd5f7e,0x3bc88429,0x3b056031, +0x3b39b8f8,0x3b6e155b,0x3b36ce5e,0x3c60c0a4,0x3b7a1b3f,0x3c08e6fb,0x3aae6813,0x3be57f2e,0x3b912ec6,0x3b8ec1bf,0x3bd4abdb,0x3c68c5b9,0xbb8365f6,0x3b8cbe1b,0x3c7017e4,0x3c148ba7,0x3b9de555,0x3c7cd673,0x3ca75030,0x3c984fb0,0x3cc676f9,0x3cae05eb,0x3c49a22d,0x3c0e1f5c,0x3bf2d8d8, +0x3c216f90,0x3c932ca2,0x3cabb346,0x3ca7e1d6,0x3ca02d01,0x3cac9c5b,0x3c90df58,0x3c2d5719,0x3c81a454,0x3ba156d3,0x3c23ba8f,0x3b585e71,0x3bc4b3b4,0x3a21f219,0x3b6ba086,0x3c00d441,0x3bda1fd8,0x3b4ecd3c,0x3c018a2a,0xbae68134,0x3b3daabb,0x3c8c5596,0x3c30a85c,0x3c7e11f0,0x3c74687d, +0x3c88311f,0x3b9f1dee,0x38a54e7b,0x3c4053fe,0x3c8274c4,0x3c843500,0x3cba5e1f,0x3caaaacf,0x3c335b23,0x3bf229b4,0x3bcf6d8a,0x3c0805a1,0x3c94d0c5,0x3cb9ac79,0x3cc71fc7,0x3cad6218,0x3cb9f6a3,0x3c9dc535,0xba3a8d2a,0x3c6066cb,0x3be196fe,0x3c09b61f,0x3c068f42,0x3b615c85,0x3b336406, +0x3b5137f8,0x3c2c7717,0x3b8743af,0x3ba28d4f,0x3bce51b6,0x3af95e09,0x3ba7816c,0x3ca3b4ba,0x3bce5ae1,0xbc8377d9,0xbafe771b,0x3cc0ac00,0x3cf09a4f,0x3d39834e,0x3cfd8e4a,0x3ceb8b85,0x3cce6d03,0x3cffe94d,0x3cddffe6,0x3c55ecc1,0x3cc3f22e,0x3ca81098,0x3c10e1c8,0x3c0d4413,0x3be80976, +0x3c712958,0x3c6b59ee,0x3c98ecb8,0x3ca0e68c,0x3c23ac82,0x3c86b836,0x3bec4ad7,0x3c3801c7,0x3bb4dd45,0x3b551e9c,0x3b8c4149,0x3b2b474b,0xbaf9d701,0x3a8c1c2c,0x3bd846ee,0x3c364e5d,0x3c5940a2,0x3b8d1b84,0xbc8bb79b,0xbbb45f03,0x3b31ba9b,0x3d176a7c,0x3c4b3304,0xbb5661d2,0xbbc44743, +0xbbf60c5f,0xbbc1f163,0x3c13576a,0x3bc92531,0x3bf37cad,0x3c425249,0x3bc1c4ec,0x3b41d0ab,0x3ba4cb78,0x3bf8e12d,0x3c47335e,0x3ca8376f,0x3c6d23c7,0x3c8933c4,0x3bdb3441,0xbaf96677,0x3bab0766,0x3bd07a7e,0x3bd25f68,0x3bb502d7,0x3b91dd58,0x3a41bd85,0x39f6daca,0x3af426ab,0x3b690ebc, +0x3b44bf09,0x39dea080,0xbb091074,0xb989a7ab,0x3b99b23c,0xbba40cd7,0x3ae01df7,0x3c48f904,0x3aa24e68,0x3ad0ad1c,0x3bedd8eb,0x3c3af2b5,0x3c9db709,0x3cf9fb22,0x3cd01e8d,0x3ca805b8,0x3c878414,0x3c835037,0x3c7e2236,0x3ca2116a,0x3c8fc607,0x3c628ddd,0x3c0e854f,0x3c23584b,0x3c521272, +0x3c5c6def,0x3b9721e1,0x3b574a98,0x3b7d86fa,0x3bfa97bd,0x3b6640c2,0x3af65068,0x3b32c8dd,0x3b090ac1,0x3a805b36,0x39f724b6,0xba54a3ae,0xbab44993,0xbbb27d8a,0xbbe94231,0xbb01958e,0xbbbfd519,0xbc2d4259,0xbb375758,0x3bb76ff8,0x3c23691d,0x3cdb62e6,0x3ce93f71,0x3d040432,0x3cd6eaff, +0x3cb5f05e,0x3c724e37,0x3c35c1a4,0x3c4cc2d7,0x3c523655,0x3c9c6e9b,0x3c8b3caa,0x3c651be2,0x3c06caee,0x3c226f3d,0x3c60f4f2,0x3c088168,0x3b92e83b,0x3b7bc252,0x3bc6dc0a,0x3b61c5d2,0x3b9b110e,0x3a6f0e38,0x3b4eaee1,0x3a87d045,0xba2db391,0xba8319a2,0xbb85de67,0xb90c47ef,0xbc078818, +0xbbfb0447,0xbc6828da,0xbbb92eef,0xbc68aef5,0x3b83b944,0x3c3d7988,0x3c5aaf4b,0x3cc1cf34,0x3c2e68ea,0x3b4eea1f,0xba095d15,0xbb64769a,0xbbc701fe,0x3af7a881,0xbb938e9f,0xbb023fe9,0x3a98669f,0x3bedee0e,0x3c2bfcce,0x3c4d0c6d,0x3c540d43,0x3c3f3243,0x3b908a4f,0x3b9d837e,0x3bdb524d, +0x3b1fe5c3,0x3b820cb8,0x3b56c29e,0x3b91e22b,0x3a545dd5,0x3a93c00a,0x3b07607b,0x3b048e88,0xba8b7c14,0x3aab8abb,0xbb125199,0xbbc18846,0xbc64298b,0xbc89c0de,0xbd219ba7,0xbd4eff06,0xbc0f394e,0xbc4318b0,0x3c0b2364,0x3c00c721,0x3c6b3a5e,0x3c70541e,0x3c4da615,0x3c3c97e7,0x3bcec9c5, +0x3be78a47,0x3bb3ee29,0x3b23e16b,0xbabda359,0xbb3dc74d,0xba98ab9a,0x3b095324,0x3bc48e27,0x3c147d3e,0xbb0a342d,0xba944147,0x3bbd78a0,0x3a813f65,0x3ab03536,0x3aa085e0,0x3b41687d,0x3b2efbf9,0xbb163074,0xbc087eea,0xbbf144d2,0xbc23f80a,0xbc5de976,0xbc6cdcaa,0xbc269369,0xbc260f9d, +0x39615c28,0x3c374c23,0x3b805aa0,0xbb4d65f6,0xbbd70c08,0xbb954864,0xba3e6e56,0x3bb07861,0x3a621323,0xbabbb16f,0xbbc19dc3,0xba7c0c17,0x399a3cd1,0x3a20de80,0x3ae688cf,0x3b8e0299,0x3b90d4c0,0x3b9f4d1a,0x3b786645,0xbb1444c0,0xba116669,0x3b66bab2,0x3afab426,0x3b9350a4,0x3ba99364, +0x3b39767b,0x3bd9e941,0x3bef190e,0x3c14027a,0x3c4f13b5,0x3c699c62,0x3c7746e3,0x3c473782,0x3c4f489a,0x3c527941,0x3c3139de,0x3c63db70,0x3c66ef9c,0x3c45c75b,0x3ba18825,0xbb0f0afb,0xbb8c87d6,0xbbdb6f38,0xbbd10cda,0xbc017aeb,0xbc0a2be5,0xbc37c2d2,0xbc130e2c,0xbc0f2225,0xbbfda699, +0xbbf4a5ee,0xbc06b0a6,0xbbebec8b,0xbbb0a2b5,0xbb31e259,0xbb1bdfbd,0xbbbac30f,0xbb5e9d0d,0x3b15bbea,0x3b388f0d,0x3bcf7c9d,0x3bfa9f45,0x3c06f63d,0x3c1c2efb,0x3c3c8941,0x3c630430,0x3c7e1382,0x3c90b53f,0x3c92e2e7,0x3c9b8711,0x3c92365b,0x3c93a60e,0x3c2f59b7,0x3c8848bc,0x3c55ed90, +0x3c0ec012,0x3bd981f1,0x3aefdf32,0xbb5c9c86,0xbc1a7c66,0xbc21cdcc,0xbc1bf303,0xbc3ce0eb,0xbc2883d1,0xbc4535d5,0xbc49455e,0xbc30912a,0xbc2eda70,0xbc101cb3,0xbbe770fe,0xbb90629d,0xbb6deac7,0xbb15d056,0xb8954605,0x3b2c04c1,0x3b708909,0x3baec338,0x3bf21279,0x3bfd64a6,0x3c5a9707, +0x3c0999dd,0x3c676ee0,0x3c4a05e3,0x3c80c987,0x3c866dab,0x3c67b249,0x3c91299b,0x3c81d5cd,0x398377d6,0x3baa8d18,0x3ba94a9f,0x3bab2c77,0x3b951236,0x3bebd734,0x3c13db5f,0x3c36979c,0x3c1e2f5d,0x3bd2375e,0x3b98c2c4,0x3b0c9985,0x399277a7,0xbb4d2b5e,0xba8791e9,0x3a47643b,0x3aceccf1, +0x3b3411dc,0x3b6fc5cb,0x3b9e34f6,0x3a4a061e,0x3a90d2b5,0xb8a9e85c,0x3a245bf0,0xba3ad478,0xbaaa750c,0xb95bb3e0,0x3a809da7,0x3aabaf38,0x3b8401a9,0x3bea69b2,0x3b9be169,0x3bc50a2d,0x3b75ccf5,0x3a0b9191,0x3bd0409a,0x3b5cc9af,0x3bcf48e1,0x3baf9270,0x3ba81a4c,0x3b946f48,0x3b7dfb58, +0x3b18e334,0x3ab15277,0x3a3ba3cd,0x3a837074,0x3a73fbbf,0x3a1abf43,0x3a031c9a,0x390e2785,0x3a5791e7,0x3a6affae,0x3a91c4bd,0x3adadaf5,0x3b032233,0x3b66802a,0x3ad633f9,0xbaf05a76,0xbb8b6ab9,0x3b216ec9,0xbaa2548e,0xbb94ab8e,0xbb9beb8f,0xbb63794e,0xbb24a0b1,0xbb50c3a3,0xbb288c99, +0xba4e129a,0x3ab841a4,0x3b939440,0xba689582,0xb99ec12a,0x3ba18a50,0xb9de4b6f,0x3b273b5b,0xbbe238fe,0xbae7ad88,0xbadea833,0xbacc4167,0xbacf81a2,0xbaf4b732,0xbb275655,0xbb0c4aea,0xbb1bd899,0xbb5a4754,0xbb48256b,0xbb4544ca,0xbb4e454b,0xbb349bcc,0xbb296a60,0xbb1dda7c,0xbb11fc6a, +0xbaa42b47,0xbb40d7a4,0x3bf8ce23,0x3c5036b0,0x3c78e9ee,0x3b8529b3,0x3c432db9,0x3c80b83b,0x3c835f25,0x3c7b4d51,0x3c67b8db,0x3c8df6ba,0x3c895046,0x3c80634e,0x3c5be151,0x3b4ba2eb,0x3c77c293,0x3c7c12a5,0x3cc1d5e9,0x39f2ce55,0xbaf90b59,0xba4917c8,0xb9d899f1,0xb99ab984,0xba94c531, +0xbb85d344,0xbb3bf868,0xbb86ac2a,0xbbc7089a,0xbbca69a1,0xbbc97a94,0xbbb9bc27,0xbb8d14d0,0xbb606791,0xbb470d08,0xbad5109b,0xbabda016,0xbb2e6b34,0x3c638e1f,0x3c0175ce,0x3c09aa36,0x3c24585d,0x3b2aaeaa,0x3bf2b8d7,0x3bc6ae74,0x3c324608,0x3bfed78a,0x3c149c04,0xbb1c85da,0x3c008a6f, +0x3bece4d9,0x3be450d4,0x3c55e25d,0x3c0e7e8c,0x3c793299,0xbbafd04b,0xbabb5548,0x37da589d,0x3a21a109,0x3a73f79e,0x39c39625,0xbbabf2f4,0xbb1d6ba9,0xbb929bcd,0xbc1c258d,0xbc112b76,0xbc194c70,0xbc09fa6f,0xbbdd3d61,0xbb980a00,0xbb96f3ba,0xba4b1b16,0xbb454532,0x3bee13b2,0x3c99aeec, +0x3c1e698a,0x3bd19a35,0x3c0de697,0x3bb8a9f1,0x3b96943d,0x3ba3b84d,0xbb1f5765,0x3c2f445c,0x3afe57e3,0x3c06d2e7,0x3b6f2857,0x3b19616f,0x3ba56cee,0x3c7e3539,0x3b2377dd,0x3c9d8dc3,0x3badf45f,0xbb67aa89,0x3b4b987e,0x3a8a93e7,0x3b6d378f,0x3a8d8d53,0xbbf58835,0xbb7e8813,0xbbf2702a, +0xbc5a1cd0,0xbc623681,0xbc628f94,0xbc4a8b49,0xbc104669,0xbbb7454e,0xbb975407,0xbaba70ad,0xba94a0ef,0x3bd3ef92,0x3c448c27,0x3b797f99,0x3be66e81,0x3ac25526,0x3bcf2bc9,0xba30de3e,0x3bb36c1b,0x3b822b6a,0x3bfc24cf,0x3aaa0da1,0x3b8eafab,0x3b80ac95,0x3ba33eb1,0x3b88f441,0x3c74c11e, +0x3c10cefe,0x3bdf3f91,0x3b7e6f89,0xbb6f1f74,0x3b21aae7,0x3ab208ca,0x3b8fc351,0x3b71ed18,0xbbd676ec,0xbb1a8312,0xbbc5ba91,0xbc8c724a,0xbc7e5721,0xbc8c459e,0xbc67bc8b,0xbc2d6806,0xbbeeb526,0xbbcbdec4,0xba85049d,0x396264c2,0x3c0f750a,0x3ccd2787,0x3c13ced7,0x3c12d9a3,0x3baf2ef1, +0x3b63dfce,0x3b5589f5,0xbacb3b02,0x3b089eed,0x3bf98d29,0x3ba9d5e6,0x3b22251b,0x3bbea57b,0xbaa94332,0x3ab1d1e0,0x3c81200a,0x3c6ce94b,0x3bbcaf3b,0x3b5a9a0a,0xbc36c13c,0x3b716a22,0x3c96bc57,0x3a795118,0xbbd07422,0xbc361632,0xbc0e88fa,0xbc1b605b,0xbcc2cacf,0xbc1038e0,0xbbaecb34, +0xbc148077,0xbbc45a73,0xbb980b51,0xbc2d1a85,0xbc0e4d30,0xbbee27b5,0x3ba45194,0x3c482676,0x3b2f1f61,0x3c18e185,0x3bafc027,0x3c145d8e,0x3b12651e,0x3b968b50,0x3afc42ff,0xbb5e655e,0x3a13069e,0x3bf4f3ca,0x3c5dd667,0x3c42f676,0x3bf40185,0xbb01fde3,0xbbdfa20c,0x3baed544,0x3c216ec5, +0xbc86cbfa,0xbc50dfd4,0xbbf32f4e,0xbbd8590f,0xba95a84e,0x3c2530a3,0x3b87f985,0x3a985913,0x3b186b23,0x3bec09a9,0x3bc4434a,0x3b5f8164,0xbaed710b,0xbbb2a672,0xbc2eff71,0xba6b891c,0xbb5f0b8c,0x3c09841c,0x3c504c6f,0x3bf1f213,0x3be54300,0x3b79e7bf,0x3ac3dd5d,0x3b214726,0x37b95768, +0x3a0ee4ad,0x3b3a7441,0x3b4e849d,0x3a8e0f37,0xb9f863ab,0xba07a056,0xbb4295ff,0x3b06752d,0xb9a25394,0x3b57f1b2,0x3a9ea3d3,0xbc14a2ec,0xbc1d4b63,0xbc476e38,0xbbc6047a,0xbb681931,0x3b48a377,0xbbc5f493,0xbc08a645,0xbb9ff5d4,0xbc32ed65,0xbc3269ee,0xbc0cbce6,0xbc1af86d,0xbbabcd08, +0xbb1aa90f,0x3b2b2368,0x39ab8315,0x3b4de13c,0x3bbbfe6d,0x3b4f1195,0x3c07eaad,0x3b8cbec1,0x3b34098b,0x3aa71686,0x3b41a5cd,0x3a0753cb,0xb77339fc,0xba34ed24,0xba81ce68,0xbacb69ba,0xbc042bd6,0xbbc01c46,0xb9e94edb,0x3a577c19,0xba8477fe,0xbab1d421,0xbb0f123b,0xbb430b96,0xbbe08618, +0xbbd6ead5,0xbc232551,0xbc26d151,0xbc336102,0xbc1fe86f,0xbb3bc5c6,0xbc603ae2,0xbc4a46f9,0xbc0be5df,0xbba36934,0xbaeaef20,0xb70fbae0,0x3ba1c32a,0x3a15d56b,0x3b803794,0x3bcfa6f3,0x3b3a6506,0x3b717a88,0x3bd4888e,0x3b09a754,0x3ae89f8c,0x3a8bd30c,0x3a557826,0x3a52be01,0xbb48711b, +0xbb590454,0x39dd0e36,0xbbaa778a,0xbc11ecff,0xbbfc67fa,0xbc0c5c01,0xbbc1cecc,0xbb4ed337,0xbb6fcc29,0xbb60687f,0xbc9d96fe,0xbc6e3c1a,0xbc6723d7,0xbc5068f0,0xbb64c8a4,0x3a127397,0x3b8f205d,0x3b63ec0c,0x3ad47464,0x3b5359e5,0x3b14271f,0x39f1db61,0xbb6c88f6,0xba1d8f24,0x396534e5, +0x3b16dce6,0x3ba772fa,0x3ba50dea,0x3bb51bcb,0x3b84d353,0x3b5532e5,0x3b62a2dd,0x39bda4aa,0xb8f39c32,0x3b13b113,0x3b232721,0x39a35c67,0x3a99e1c0,0xbb5b4f4f,0xbc14a0db,0xbbeacbb8,0xbc3fa693,0xbc391692,0xbcdb7860,0xbd02f289,0xbcd57268,0xbca3b4a4,0xbc9cceb7,0xbc986bbe,0xbc831e5a, +0xbbffa83f,0xbb56fbd8,0xbc0160bb,0xb91ee87b,0xbba01aeb,0xbbc5cdf0,0xbb74c7c2,0xbad3a4ec,0xba6a30b7,0x3ba978c0,0x3b8ae404,0x3abe08b4,0x3bd7f484,0x3b60d541,0x3b24b5e0,0x3af8fc37,0x3ad58d84,0x3b3f014b,0x3b894405,0x3a6cbf8c,0xbb6566aa,0xbc0cf1cf,0xbc196122,0xbbe988c3,0xbc8d57fe, +0xbc2d8249,0xbbdc1d85,0xbc9ca050,0x3c806808,0xbb75261a,0xbc8bc155,0xbc986b06,0xbcbbe058,0xbca53ac9,0xbc882b72,0xbc427ae3,0xbc092d7e,0xbbc0ab7c,0xbc11d688,0xbbcb06a4,0xbb939df2,0xbb7d167c,0xbb387743,0xbb20e3ec,0xbb0f811a,0xbb1377f1,0xbae3808e,0x3a77fbbc,0x38ec3cc1,0xba73b302, +0x3bdfe577,0x3b5741fc,0x3b7ab11a,0x3b9031ba,0x3a52b84c,0x3ba68c97,0x3b9c044e,0x3c232b52,0x3c1b0193,0x3c2d6a88,0x3c479b6b,0x3bf0d3ec,0x3c07587f,0x3bb3adf0,0x3c8fccc1,0x3c1a5063,0xbc08d858,0xbc201221,0xbc8408af,0xbc8bcad6,0xbca9ad8c,0xbcbe75ea,0xbc9ca2e4,0xbc8abd67,0xbc7e53d3, +0xbc6eef0d,0xbc6c8ecf,0xbc6494e1,0xbc563f39,0xbc460852,0xbc36979d,0xbc150b20,0xbbebc3a5,0xbbb0b578,0xba75c17e,0x3a88c5a1,0x3ae4640b,0x3baaad06,0x3babb3ce,0x3bd0411b,0x3c2a991b,0x3c2f0aeb,0x3c1e9a04,0x3c32af0d,0x3c50c9da,0x3c8ac8cf,0x3c6ea393,0x3c8d39f7,0x3cb3ca43,0x3c98b11f, +0x3c8f27d6,0x3be463ac,0x3adcb374,0xbad0b958,0xbc03f142,0xbc4caf99,0xbc8f2941,0xbcbc2fe8,0xbcaa5657,0xbc980824,0xbc914509,0xbc82ea4e,0xbc7f01c4,0xbc600bb7,0xbc58a606,0xbc560451,0xbc51a377,0xbc220ded,0xbc3baffe,0xbb94c2e3,0xbb0af3e1,0xba0e1dff,0xb99e625e,0x3b057a15,0x3b9a9ee4, +0x3be7ebc6,0x3bf9975d,0x3b830999,0x3c68a77f,0x3c01ada4,0x3c635d08,0x3c342339,0x3c584a21,0x3c991c41,0x3c88b9bf,0x3c380ce0,0x3be6d597,0xbb8bc621,0xbb7b9c00,0xbbb20d4f,0xbbbda81f,0xbbc2e402,0xbbce1cee,0xbbfc8e1b,0xbbf99802,0xbc127706,0xbc15dd09,0xbc1c2869,0xbc1ac434,0xbc22cb09, +0xbc01eb16,0xbbc09a6e,0xbba711aa,0xbb610551,0xbb0b385e,0xbb36587a,0x3b3e47b8,0x3a0028a4,0x3b028063,0x3a20d472,0x3a24ea60,0xb9d1d735,0x3ae7d544,0x3b27256a,0x3b78c3ae,0x3b854878,0xba839af1,0x3c159a3b,0x3b7dcdb0,0x3a90b26c,0x3bccb494,0xbaeb788e,0x3b0c6faf,0xbb952676,0xbb7660f6, +0xbb9dd5bc,0xbbc2035d,0xbbe94c04,0xbc089a0e,0xbc1d2e2e,0xbc17f7ff,0xbc10faca,0xbc0c39e6,0xbc09f8b4,0xbc061823,0xbc05e030,0xbc008c4e,0xbc0167e2,0xbc01a3ca,0xbbf89baa,0xbbe3b0e1,0xbbfdf94a,0xba9e70f4,0x3b90e0fe,0x3bec2242,0xb9e4b777,0x3bb49306,0x3c10093f,0x3c2365fb,0x3c135627, +0x3c109d8e,0x3c32fbd6,0x3c31461c,0x3c160dd5,0x3bad2881,0x3a5fdac7,0x3c1e38c3,0x3c065f74,0xbbfdf54f,0x3b94f64c,0xbabc770d,0x3c0449d5,0x3b894543,0x3b703316,0x3b5c876d,0x3b5a413e,0x3b5e2ef7,0x3b617587,0x3b737340,0x3b746577,0x3b52eb27,0x3b5d6283,0x3b68b8ba,0x3b65b9aa,0x3b8445cd, +0x3b8c19a2,0x3b87df8d,0x3b8f4fdc,0x3b863f80,0x3bbe7f2a,0xbb73fc88,0xbbd2389e,0xbb3583c2,0xbb214004,0xbbe5f906,0xbb845d17,0xbb8a6d99,0xbb6ac409,0xbb4a8042,0xbbb9ffeb,0xbbbf83d7,0xbbb449e6,0xbc07432d,0xbb0217e3,0xbb19876c,0xbc05847f,0xbc1b7005,0x3b1e82be,0x3bc04e96,0x3b8d7d4b, +0x3b53c033,0x3b2d4ac4,0x3b305418,0x3b5bbd39,0x3b80d5a0,0x3b79c2cd,0x3b16e343,0x3ad8ca60,0x3ac77c0e,0x3add0b4d,0x3b6be89a,0x3ba4e408,0x3ba53582,0x3ba6be70,0x3bcf5882,0x3c167227,0xbb2fa919,0x3a3b0b38,0x3959fbc5,0xbb8e7f59,0xb9891950,0xba1187c1,0xb9967baf,0xbb3812f7,0xb9a60f63, +0xbac4184e,0x3bc9db4f,0xb9d19e55,0xbb207d34,0xbac7ceb4,0x399f5225,0x3a3e94e3,0xbbb91508,0x3c06032b,0x3be1f4ce,0x3b5b76f1,0x3b0be93e,0x3993cfcb,0xba23dafe,0x3a5bbc9c,0x3b2afda0,0x3b24a65c,0xb9fb6f84,0xb92ef05d,0xb9bce182,0xb97d7cc3,0x3b710a9c,0x3b99b4e0,0x3bb2310f,0x3ba0c44d, +0x3c11f948,0x3bb38557,0xbb87934b,0x3b0492f5,0x397633c8,0xbb0e93f0,0x39b45c6f,0xbac7c889,0x3aea674d,0x3bdb08bf,0xbb28e4e7,0x3b994668,0xbac5bdad,0x3b1ad0a9,0xb9867d39,0xb9da2144,0x3afa524d,0x3b8d8496,0xbba4c4a4,0x3ae5e2bf,0x3c18e6c7,0x3b96c967,0x3b146cd9,0xbad2d68f,0xbb30115c, +0x3822af93,0x3b10a743,0x3ac03555,0xbb016c92,0xbb8e27cb,0xbba4f16f,0xbbcab76f,0x3aa18db9,0x3b94932c,0x3ba7441e,0x3bda3188,0x3c2bcae7,0x3c32220c,0x3bb2dd13,0x3c23cd55,0x3b4ee7f9,0x3bc4d99b,0x3a5e110c,0x3b64d9fe,0xba1291a4,0x3b869845,0x3bc77e63,0x3be07a13,0x3b316584,0x3b9eb416, +0xbb4fe52f,0x3aadfaaa,0x3c1d8062,0x3bd6d656,0x3bc4d3d9,0x3baa6027,0x3c52fc3f,0x3aa04a2d,0x3aa0f650,0xbbbd80ff,0xbbdcbbff,0xbb612f05,0xb97c098d,0x3a6d499a,0xbb8495a0,0xbb8f40b7,0xbba7be31,0xbb9d09b8,0x3aeadd56,0x3b95225e,0x3bb0f394,0x3bb7c2c5,0x3c317c29,0x3c643b03,0xba233b8d, +0x3c296e03,0x3b724739,0x3bb3b0d8,0x3be0f199,0x3b47a8c8,0x3b7c700a,0x3b764303,0x3c19e6f3,0x3ba54d8d,0x3bb2b65f,0x3bb0dfae,0x39d00bfa,0x3b38e047,0x3c633ee0,0x3b25632c,0xbc8bd2a5,0xbc3f3c30,0x3c47f9ab,0x3c8432cd,0x3cfbd48a,0x3c2d50cf,0x3b64feef,0x3a082d32,0x3c2cb838,0x3c42020f, +0x3a866dae,0x3caa6003,0x3cb0937e,0x3c1fd8aa,0x3bdb7970,0x3b80c520,0x3c61b8f7,0x3c011f15,0x3bc7a495,0x3b9d91e3,0x3a2ab66f,0x3c0afdba,0x3b954e7c,0x3c131a66,0x3ba3a677,0x3b706388,0x3b5f9b55,0x3b1c3fda,0xbb1a75d5,0x3ab15244,0x3bfe1912,0x3c344b9c,0x3c2bb3d0,0xbaa33604,0xbc99b2b8, +0xbc77ddfb,0x3a9c9557,0x3c7b6cc7,0x3b9c4e22,0xbbf6e465,0xbc10ba41,0xbc4143db,0xbc1b2626,0xbb0733ac,0xba6a5ccd,0x3ab8fd9a,0x3ab00d01,0x3b841edc,0x3b648857,0xb95b713d,0x3abc1617,0x3b07bead,0x39ab1fdf,0x3aab9925,0x3bd5181a,0x3b0e1ed0,0x3b1cd790,0x3b9fc2f4,0x3bb9c85d,0x3b934e72, +0x3b7a0ea0,0x3b8ab5f6,0x3aa15e80,0x3a750138,0x3b54fa56,0x3b622c91,0x3b404569,0xba86dbca,0xbb610330,0xba95b7a4,0x3aea17d4,0xbb1bb59f,0xbab46e16,0x3a67a4ca,0xbbbab178,0xbc219eb1,0xbc59ad19,0xbc5f2a7e,0xbbfe3c85,0x3ba8f59a,0x3c4d7afa,0x3c6ed711,0x3bdc6cbc,0x3c0550ec,0x3b87a35b, +0x3b1626c2,0x3b58aaf7,0x3b5522bf,0x3af1c8db,0x3bc07e80,0x3c15bc0e,0x3b6abc71,0x3aa6cb8d,0x3b47777e,0x3abd26a5,0x3bb8e55e,0x3ac7142c,0x3b285dad,0x3b03072f,0x3b625aee,0x3ad3539d,0x397b852e,0xba871e2e,0xbaafb263,0xbbe32015,0xbbb46127,0xba645ffe,0xbba18e32,0xbbb125ea,0xbb462c77, +0xbb511d76,0xbbe248b8,0xbc42e62b,0xbbd79dbb,0xbb76b3b0,0x3a8c33b5,0x3bb93833,0x3b96acc6,0xba82fb6e,0xba3fc082,0xbb3eb613,0xba197c30,0x3b906c46,0x3bd78168,0x3ba945df,0x3c060b85,0x3c36e329,0x3b568c2c,0x3a16eaf1,0x3b62e2a3,0x3b8e4c9e,0x3b426aab,0x3b643942,0x3a5e53de,0x3b331c22, +0x3a9df9db,0xba9877f2,0x37463711,0xbb35effc,0x3b388198,0xbc044131,0xbbcd88fa,0xbc034a24,0xbb2a1d2c,0xbbf6401f,0xbc1fee63,0xbc2e450e,0xbc4a99cb,0xbc719b7b,0xbc5d31f5,0xbc5cceed,0xbc0e7494,0xbc5a6ebb,0xbc633891,0xbc0ce656,0xbbca921c,0xbb16a6ce,0xbb29810c,0x3b09c443,0x3b43c01e, +0x3b7f1a56,0x3bbcd6b1,0x3beeec0d,0x3b10cbd8,0x3bac2530,0x3be70c20,0x3b82d28d,0x3b922995,0x3b6f0153,0x3b756e89,0x3a9c695a,0x3aa13052,0x3b14a9ee,0x3b0fbce2,0xb9152e03,0x3b2f530e,0xbb7004f1,0xbc0f33a6,0xbc12043e,0xbc2f85fc,0xbd20919b,0xbd24e0f2,0xbc97ab3a,0xbcd249f0,0xbca35a3a, +0xbcb73ce9,0xbc91ba49,0xbc56f299,0xbb49dc75,0xbada29ed,0xbc42fa11,0xbbf9cc13,0xbbe35bf3,0xbc045ca4,0xbb92ad11,0xbaf37ab4,0x3b2aa245,0x3b7bc0ba,0x3ba79cb3,0x3b83d993,0xbb245dbd,0xba968531,0x3ba17cfc,0x3ad15b33,0x3b133fd7,0x3af9d669,0x3aa78fc9,0xb986d24c,0xbba16bad,0xbc26243b, +0xbc1e3b41,0xbc3fe83a,0xbc82d492,0xbc8e92bf,0xbc94537d,0xbc892353,0xbc33ec73,0xbc908be4,0xbcb372d5,0xbca81f0a,0xbc5aecfa,0xbbea9ed1,0xba30880e,0x3b8c4247,0xbaf81a32,0xbb748726,0xbbc00a6d,0xbb67442c,0xbb95b3f9,0xbbcd8830,0xbb85eb57,0xbae2a629,0x3b786e51,0x3b8e70d9,0x3b8d6685, +0xba143e50,0x38583e20,0x3b2e476c,0x3a7ef00e,0x3b5e2b30,0x3b733fc6,0x3b490b8b,0x3bc1c922,0x3b9fe656,0x3b7a5bf5,0x3b9bffb3,0x3ba8ca24,0x3bb79ab1,0x3b9262e6,0x3b373ab5,0xbb78d487,0xbbfaa004,0xba57d355,0xbb0378d7,0xbbc9397f,0xbc1897c3,0xbc38f9e2,0xbc42e683,0xbc507b07,0xbc3bd24d, +0xbc340ffb,0xbc28539a,0xbc23d81c,0xbc24c069,0xbc266a35,0xbc33b5d6,0xbc1a5bde,0xbc068a31,0xbbb4bcd4,0xbb73058e,0xba9e89c5,0xbaee8871,0xbbb48640,0xbb2e2720,0x3a8696e4,0x3ac824b7,0x3ba7da61,0x3bd95f46,0x3bdd9261,0x3c04814d,0x3c1422e9,0x3c09f8b8,0x3c159139,0x3c312a9a,0x3c253274, +0x3c23ee28,0x3beccbee,0x3bbe13a6,0x3b927955,0x3b9fde1a,0x3b186c3a,0xbb5f702a,0xbc0d2ad5,0xbc405b78,0xbc792d94,0xbca1936f,0xbc8f19c4,0xbc715316,0xbc5dece4,0xbc3f308e,0xbc3b575d,0xbc355bdb,0xbc1d8841,0xbc155952,0xbbfff630,0xbbe4e96e,0xbb894ab6,0xbb894f98,0xbb8eb65f,0xbac52938, +0xba384922,0x3a86d492,0x3b1972eb,0x3b4a505d,0x3bb49e6a,0x3bf4db33,0x3ba07248,0x3c1a0984,0x3c00178c,0x3c1c6433,0x3bf6d257,0x3c127283,0x3c0f888c,0x3be010d2,0xbb6c9c23,0xbb15faf1,0xbb7206ec,0xbb58b237,0xbb287074,0xbb2b0be6,0xbb166898,0xbb3cad70,0xbb383ed4,0xbb998ae6,0xbbb1bf63, +0xbbd39d33,0xbbeb9f91,0xbc0e249f,0xbbe7a7be,0xbbb49ade,0xbb927cab,0xbb4e56e6,0xbaf3fb4e,0xbb042894,0xbb839b58,0xbb85ebbc,0xbb9f0517,0xbb97a2c0,0xbb9edd3b,0xbba074ec,0xbbabd06d,0xbbb7ec1e,0xbb98bbab,0xbb7ce14a,0xba699010,0xbafac7f7,0xbb187a0f,0xbb587240,0xbb740593,0xbb85bb3c, +0xbbc3e264,0xbabe5529,0xbb0c0d10,0xbb4a50eb,0xbb8864a5,0xbba8205a,0xbbc97564,0xbbed4f10,0xbbe407a8,0xbbd001b6,0xbbc1f70b,0xbbbaf605,0xbbaf8b29,0xbbaccf0c,0xbb9e1487,0xbb9e0864,0xbb9ee997,0xbb95e532,0xbb884921,0xbb441549,0xbbdc89a0,0xbc0b7cd5,0xbbb165f5,0xbbd2f6b3,0xbc058fd4, +0xbba6d144,0xbba4be5b,0xbb8e15ac,0xbb7aa0fe,0xbb8f1d47,0xbb96256c,0xbb83fcda,0xbbc8dc82,0xbb8e179e,0xbb4a568c,0xbbd3f023,0xbbf28392,0x3c12b5c9,0x3c356f45,0x3b47535c,0x3ba611e9,0x3badc6c5,0x3ba6e452,0x3bc2220c,0x3bc4cc1a,0x3bb35539,0x3bb64627,0x3baf931c,0x3b91f8f4,0x3b97d2aa, +0x3b9a43c3,0x3b99a15c,0x3ba0df4e,0x3bac82a7,0x3baf0215,0x3bb5be7b,0x3bb78d55,0x3ba9089a,0x3c3937ca,0x3c301e62,0x3accf44a,0x3c2b785f,0x3c327664,0x3b1b0f78,0x3b455c33,0x3b3fa1b1,0x3b5a2cf9,0x3b9a10a1,0x3ba085b7,0x3bb50f1a,0x3c362785,0x3c2952c4,0x3b67342d,0x3c35c369,0x3c3ab346, +0x3c0f4832,0x3bd356fb,0x3bf837e7,0x3bdd0666,0x3c256695,0x3c325fa8,0x3c0feabe,0x3c11d088,0x3c03a582,0x3bbb1732,0x3bac601f,0x3bafc8c6,0x3bcf70cd,0x3be42108,0x3c018a11,0x3bf6b69d,0x3c032ed5,0x3bf80fc1,0x3bedca81,0x3c3321d0,0x3c1589d6,0x3bcfaf59,0x3c2d16df,0x3c0deae4,0x3ba49660, +0x3c11537a,0x3c25fe9e,0x3c0e2147,0x3c1bcdca,0x3b8caa89,0x3bde1a2e,0x3be76fed,0x3c04fc6e,0x3c351fb2,0x3c0f64f3,0x3c822686,0x3bddd8ef,0x3bc0de90,0x3c093138,0x3bd9b2c4,0x3c4c6636,0x3c6303f0,0x3c1dbbee,0x3c35f841,0x3c1280b2,0x3b9355cd,0x3b999115,0x3b8f9a42,0x3ba21dac,0x3bde51e4, +0x3c0b37ad,0x3c119b74,0x3c265389,0x3c087082,0x3c49e78c,0x3c7749cf,0x3c21c905,0x3c2e6662,0x3c11ab92,0x3bc15844,0x3bf1047b,0x3bc6fefb,0x3be76c99,0x3c45861d,0x3be4be12,0x3c1a3fe1,0x3bbb06a6,0x3bbf00f6,0x3beb5a83,0x3c4b4778,0x3c2d2b11,0x3c7d9eda,0x3c072d23,0x3bc0efc1,0x3c2458f3, +0x3bd0d411,0x3c81f5e6,0x3c9d9137,0x3c534912,0x3c7321ec,0x3c34f4dd,0x3b9d6946,0x3b8230df,0x3b52a1ee,0x3bbbbea3,0x3c11a35a,0x3c31b2bf,0x3c25d808,0x3c362ffe,0x3c1fca9f,0x3c599a10,0x3c576696,0x3bfd4d13,0x3beeefb2,0x3b89ef13,0x3bc921f0,0x3ab29321,0x3be47dc2,0x3b9c8fa0,0x3bdb9355, +0x3b7bd30b,0x3bafbffc,0x3b9352cc,0x3b8f4cc6,0x3b873aff,0x3c640b6f,0x3c1c0717,0x3c780a97,0x3c278213,0x3b7a8c99,0x3c17b15f,0x3b96b84e,0x3c9123e3,0x3ca6227c,0x3c5e28f1,0x3c852142,0x3c47f54e,0x3b008156,0x3b26f8a6,0x3ad8110d,0x3b43c212,0x3c010ea5,0x3c30dd1e,0x3c4461b5,0x3c61f1c8, +0x3c49354b,0x3c70ec1f,0x3c9b7a25,0x3c1ff2f8,0x3c1dd401,0x3bcb5863,0x3ba054ba,0x3b118ab1,0x39a45624,0x3b6bd6e6,0x3bfba803,0x3bcb516a,0x3b8085cd,0x3b7b89b8,0x3a12c236,0x3b59bf38,0x3c522275,0x3c6e4bb9,0x3bc6e02a,0x3c859ce9,0x3c3de3e7,0x3cb04a58,0x3d06d66c,0x3c94032c,0x3c7ffcd0, +0x3c7dde31,0x3c07496d,0x3b665c28,0xbb9adc8a,0x3c188a40,0x3c214c88,0xbb0cbef0,0x3b02855c,0x3b1acfb1,0xbabd69d7,0x3ac813d5,0x3b8c2790,0x3c2bf1eb,0x3c24b3fe,0x3b92c076,0x3c07189f,0x3be3e5dd,0x3c161010,0x3b82f5fd,0x3b828fc8,0x3a9b5c1b,0xbb5fca06,0x3b6ff64a,0x3c352fb7,0x3c6cd886, +0x3c247b61,0x3bb204cb,0xbc023514,0x3a1774bc,0x3c743d79,0x3aeab257,0xbc4fbb37,0xbbec4214,0xbbee90ec,0x3b2cdc42,0x3b614e02,0xba128b57,0x3bcd0c7a,0x3be03a1b,0xba92e396,0x3c1b7c23,0x3c288d37,0x3bc2cff3,0x3bd34437,0x3c009ba4,0x3c4fd3bb,0x3c79b7a1,0x3c3048d5,0x3c1c90af,0x3c184045, +0x3c17a4af,0x3c08a836,0x3bcfd2cd,0x3b70915d,0x3b48367a,0x3aa28b51,0x3b1f085b,0x3ba006b3,0x3b888208,0x3abec72a,0xba8136f9,0x3a23ff61,0x3b29a4fb,0x3b9d38e7,0x3c3b47d1,0x3bb79fb3,0xbb1d028e,0xbbfbbef3,0xbb36dbd2,0x3b82c00d,0x3c806855,0x3caac8cb,0x3cdc2505,0x3c6978e0,0x3bbcafb1, +0x3ab0c0e5,0x3bcd3193,0x3c0920a3,0x3c12b336,0x3bfd60a2,0x3c0b2e5b,0x3ba7ba3a,0x3c21b858,0x3bf570c4,0x3bbd05f7,0x3beefb20,0x3b93e81d,0x3beb671e,0x3bdeaa43,0x3b847881,0x3adaae39,0x3b5fb4ba,0x3a6620e9,0x3adf6874,0x39cf3280,0x39f94dd9,0xba45ba15,0xbba73718,0xbaf32c2f,0x3b87aa2d, +0x3a8e3f60,0xb90d70b3,0xb8576129,0x3bc28e64,0x3c4cbd35,0x3ce45f64,0x3cd4c686,0x3cd23920,0x3c884b31,0x3c4b636c,0x3c06fe98,0x3c002a93,0x3c1fe673,0x3c34349c,0x3c0ce3c0,0x3c4abdd7,0x3c370aa9,0x3bcccad9,0x3c24ff0a,0x3bde777b,0x3ba7b24b,0x3c047294,0x3b8fe07f,0x3b977f36,0x3be6f776, +0x3b4694eb,0x3b181748,0x3ae38857,0x3ae9d366,0x3b03b711,0xba879cd1,0xba3798eb,0x3b8e49ca,0xbba529b0,0xbbb764d0,0xba6f1d57,0xbb301f51,0xbb859c25,0xbb8cb44a,0x3c5ab999,0x3cb5dea2,0x3cc8bfb3,0x3cb8a1ae,0x3c626693,0xbbd874b4,0x3af5c4eb,0x3a9654ae,0x3b88a8e1,0x3c023000,0x3c0a5833, +0x3b8751e9,0x3c25e110,0x3c359ec5,0x3c298e77,0x3c1fa8be,0x3be3b04c,0x3ba93743,0x3bdb06a7,0x3bf67c0e,0x3bf7961a,0x3bda715b,0x3b980aea,0x3b965076,0x3aaabe68,0x3a5d8dd9,0x3b31c702,0x3b3d8bd5,0x3a8c7930,0x3b21a2c7,0xbb3fd4b6,0xbb919d5f,0xbbc40c2a,0xbb6bf741,0xbc05ba38,0xba8f2183, +0x3c73b147,0x3c509467,0x3babc5d9,0x3ba41bc0,0x3b9ff788,0x3b4cec4b,0x3c367f8f,0x3c727bf5,0x3c5d5d0a,0x3c3fd23c,0x3be29100,0x3bf4f81c,0x3b2aaac6,0x3ac399ed,0x3b14fcc7,0x3bcc457f,0x3bc596aa,0x3b93008d,0x3c0fc757,0x3bd7cd17,0x3b5719f4,0x3b42e3a5,0x3b27f958,0x3b8df196,0x3b465d52, +0xba80c32d,0xbb55c035,0xbbecc233,0xbbc969ff,0xbbb9e6d0,0xbc42bc7b,0xbc68c6eb,0xbc35b868,0xbc849e90,0xbc155caf,0xbbb61b87,0xbc29db07,0xbbe23214,0xbad86c83,0x3b1a025e,0x3ba152a6,0x3c1999f6,0xbadfd40d,0xbbc95b35,0xbbb0f48d,0xbb0bbc9d,0x3abd3a4d,0x3b2b9225,0x3b9994b5,0x3bb5fa19, +0x3bc7e12d,0x3bb9af46,0x3b8750ae,0x39b2e24b,0x39fffd27,0x3a99132a,0x3c0504c2,0x3b951705,0x3b9e1bfe,0x3bd296b1,0x3b52da02,0x3b9a3445,0x3afd53b5,0x3b6c7c5f,0x3b5c5578,0x3b2e2e85,0x3bd65db2,0x3b827d4b,0xba65d014,0xbac52edb,0x3b99e406,0xb99d3e3c,0xbbe29ce9,0xbbf40197,0xbc2a12fe, +0xbbf6ccda,0xbbe26da8,0xbb719032,0xbbd7919b,0xbbe22f64,0xbbae420d,0xbbd258d2,0xbbdea3e8,0xbbf0724b,0xbbababa3,0xbb9a4456,0xbb7d614e,0xbacb66a8,0xba0f8d18,0x39ae68da,0x3ae476fe,0x3ab48b52,0x3b59e175,0x3b8497ad,0x3b8d367a,0x3bac7ca7,0x3c112164,0x3c049099,0x3bec43db,0x3be21663, +0x3bef1340,0x3c27f36a,0x3c0e6741,0x3c1de41c,0x3c24aadb,0x3bcc1d3b,0x3c195fbe,0x3b914dac,0xba10ad26,0xbb14067c,0xbbe28d49,0xbc091566,0xbc316b9c,0xbc553c7f,0xbc22340c,0xbbf71cc6,0xbbe37187,0xbc0fb69e,0xbc29e8a1,0xbc3e7417,0xbc327d97,0xbc2414ac,0xbc1434f3,0xbbdbf00b,0xbbcc17b9, +0xba84631d,0x3a74a45f,0x385d55a5,0x3a91980f,0x3b0f2d30,0x3b8c50de,0x3bc484ed,0x3bb001b6,0x3bd7b490,0x3c4f2138,0x3c07d0b3,0x3c2ffade,0x3bf9f0b0,0x3c1bde58,0x3c385aab,0x3c43139b,0x3bff59d2,0xbadb553e,0xbb235890,0xbaf75532,0xbb1598dc,0xbafbe2f3,0xbb14204b,0xbb1304d1,0xbb5cf771, +0xbbd6abe0,0xbc1cb41b,0xbc34faa0,0xbc40e2c3,0xbc438cbc,0xbc4fcbec,0xbc2f12d4,0xbc171f34,0xbc176543,0xbc0406b4,0xbc056ea3,0xbbf1a115,0xbb2d6e8f,0xbb152b72,0xb9a51476,0xb8d79cce,0x3938e635,0x3a3410d6,0x3ac65d16,0x3b1ceee5,0x389d2cb4,0x3ab7be77,0xbab1c1b9,0x3b38ddc7,0x3b20e282, +0xbae90457,0xbaeae10a,0xb9403c8c,0x3aef72b1,0xbb168e50,0xbb41a0a7,0xbb70f5c5,0xbb9289ed,0xbbafa906,0xbbcb562f,0xbbdbf39f,0xbbc3d3bf,0xbbb13bf1,0xbbb0dff4,0xbbba7125,0xbbc78e8d,0xbbdbb03e,0xbbd369c8,0xbbd2afe8,0xbbcafe58,0xbbb7debe,0xbba38082,0xbbb3e5f1,0xba2ae9fc,0x39bcfa0a, +0xbb50b4d6,0x39ba1d52,0x3ad6b01a,0xbb29c63b,0xbb237c44,0xbb14b8cf,0xbad9bacd,0xba37c628,0xb9f888ab,0xba5b7070,0x3ad492f1,0x3aa0fbea,0xba9f4a1c,0x3b0de717,0xbbd63ef1,0xbb7fc177,0xbbe92bea,0xbb449768,0xbb1502d0,0xbb2db65c,0xbb301b45,0xbb6b2421,0xbb813c04,0xbb819fd7,0xbb735196, +0xbb716b43,0xbb73f115,0xbb645a27,0xbb5981a3,0xbb5d467b,0xbb4d7221,0xbb54d9d6,0xbb5bf1dc,0xbb518f29,0xbb29ef22,0xbb3394ef,0xbb8ecfca,0xba92fce5,0x3c30427a,0xbbc20813,0xbb1eed11,0x3c1c4da0,0x3c1a2256,0x3c184210,0x3c02e565,0x3c0958e5,0x3bf878b9,0x3bc0922d,0xbb06cecc,0xbbd5adfd, +0x3c0ec312,0xb9851c8d,0x3bc829c8,0xbb8bb05f,0xbae1996f,0xbb314ae4,0xbb40520f,0xbbd2258a,0xbbfaf208,0xbbf1b1f4,0xbbe2509c,0xbbe735af,0xbbe5a2ac,0xbbeaf794,0xbbee2ca1,0xbbf5fb0c,0xbbc9cd1e,0xbbb1cc6a,0xbba8f07e,0xbb888973,0xbb3ff5b1,0xbb15732f,0x3af72683,0x397ec3d1,0x3b581437, +0xbb158d64,0xbb97021b,0x3b137708,0xba0e9f29,0x3a894988,0xb82202f9,0x3a1ddb3f,0xba683b18,0x3a6ea35c,0xb9da6688,0xba8e93aa,0x3af3539d,0x3a49b59d,0xbb232adf,0xbba4fea3,0x379aafae,0xbb218ce3,0xbb13fd10,0xbc0e709a,0xbc3b7db7,0xbc2fcf9c,0xbc249308,0xbc186d0e,0xbc24791c,0xbc1298a7, +0xbc1521f6,0xbc143572,0xbbf78580,0xbbed2d75,0xbbfee1fe,0xbbaf11f5,0xbb7177e6,0xb91e170f,0x3b105e51,0x3aec3492,0xba8954c4,0xba8376ed,0x39e4527b,0xbb39abc8,0x3b1f57a1,0xbaa0090f,0xbaf730f9,0x3a927ad7,0x396eacf7,0xba932fa1,0xbb1d73f2,0xbafef5e8,0x3b0e8da1,0xbb752e28,0x3aa288d2, +0xb888f13c,0x398de2ec,0x391a8fd3,0xbad9709b,0xbc33cbeb,0xbc82c10c,0xbc6fa575,0xbc6ca817,0xbc6376a6,0xbc57f384,0xbc6df676,0xbc6b2553,0xbc88c32a,0xbc4d8650,0xbc2353a5,0xbc1c0eb7,0xbbba710c,0xbb162613,0x3b10e290,0x3b5a6b9e,0x3b394e18,0x3b86e016,0x3a754089,0x3a50c78d,0xba111ea5, +0x3ac33f82,0x3b9d3c71,0x3b9ffae5,0x3b9ed3f0,0x3b39a794,0x3aaec1ae,0xba56f604,0x3a91b504,0x3b9c6e9c,0x3b19fad3,0xbab36bf1,0xbb504c4f,0x3b548094,0xba5862b9,0xb9046963,0xbc624f09,0xbc98272d,0xbc91648f,0xbc8915de,0xbc66d5e8,0xbc77649c,0xbc5d1d56,0xbc63e4df,0xbc666456,0xbc4aaccf, +0xbc44bb9d,0xbc511fad,0xbc05c490,0xbb3e6272,0x3ba35c75,0x3c041524,0x3bd10f96,0x3b88623a,0x3b4c2f9b,0x3b865e01,0x3ae92d43,0x3b3b5b11,0x3b863a25,0x3be0ad40,0x3bc87bcc,0x3b975086,0x3b5a9ce1,0xba3ea07d,0x38ace912,0x3bdeaa69,0x3b615203,0xbbf6cbd8,0xbc10901f,0xbb756947,0x3a4cc5a0, +0x3c33e1e5,0xbbd07503,0xbc5fbc5a,0xbc7c1698,0xbc6196e0,0xbc292313,0xbc4a494f,0x3bca3282,0x3c3149c6,0x3b656908,0x3b103cfa,0x3a2bc004,0x3b86eb2d,0xbaf4a86a,0xbbe01893,0xbbf692b3,0xbb0874df,0x3a37f0be,0x3b77a7fd,0x3bafda8a,0x3bb6f013,0x3ba0e1f9,0x3b2869d1,0x3ac2a3b4,0xbb255b48, +0x3b4c42a5,0x3c1f5226,0x3c21cb88,0x3bbed6fb,0xbb3dc7d5,0xbc268261,0xbc8b2d85,0x3b9798f7,0xbc4d1e8d,0xbbda4f8c,0xbc13ae12,0xbc1021d9,0xbc5cb8b9,0xbc5d4bf8,0xbc7f7f05,0xbbc2a83f,0xbb1b870e,0xbbee2188,0x3b6f94e3,0x3ba21e64,0x39187a73,0xbba78044,0xbc1bcd44,0xbc90b894,0xbc0598e0, +0xbb77a930,0xb9d8ccf6,0x3bfb853d,0x3b8d322a,0x3ba4675a,0x3b8116bd,0x3b4370ec,0x3b566b07,0x3a90271a,0x3ac003fb,0x3ba2f22e,0x3b6e1a4d,0x3b03bb3b,0xbb39741e,0x3a2ccc58,0x3a1d040e,0xbb921c14,0x3bbda8de,0xbab81ae3,0xbc2d9e55,0xbc2273b0,0xbc7d0fd3,0xbcbde4aa,0xbcdf2000,0xbcd2fda0, +0xbc9722b5,0xbb794c31,0x3b251259,0xbb8c4e25,0xbb2de5ca,0xbc17581f,0xbc560eaf,0xbc26f57e,0xbbd48553,0xbb9931e1,0x3ab75f95,0x3b58208a,0xbb620340,0xba44427a,0x3ad03544,0x3acc2449,0x3b498cab,0x39e136a2,0x3b53c0ab,0x3aaf49f2,0x3b32ab68,0x3b038ead,0xb98b8688,0xba148c7e,0xbae65ade, +0xbbd12144,0xbb0abc08,0x3a788062,0x39a393d8,0xba4b3e16,0xbb1ea9b6,0xbc029271,0xbc81a595,0xbd0b40b8,0xbcee6ba3,0xbce48002,0xbc9e130e,0xbc39a1a4,0xbc02ca75,0xbc45202f,0xbc4f220d,0xbc788a8e,0xbc911d97,0xbc1ad032,0xbb737ae7,0xb84fe4da,0x3b73ed3f,0x3b70338d,0x39ba4f93,0xba089113, +0x3ad663a1,0x3ad43a97,0x3b535a1d,0x3aab5072,0x3ae33f7e,0x3aa3e8e4,0x3a73b628,0xb9712333,0xb8f69499,0xbaabad92,0x3b4c6e94,0xbbc263b2,0xbb8735e6,0xb9e66eb9,0xbb17078b,0xbb0dd3b8,0xbc4eba62,0xbcaa7901,0xbcd2fb5c,0xbd209596,0xbceb57dd,0xbcbb6a2b,0xbc636b01,0xbc7665a3,0xbc637b44, +0xbc6f05b2,0xbbf66ff6,0xbb860dd5,0xbb26a40a,0xbb6e510d,0xbb8d1cc7,0xbb8d59ac,0xbb1a132e,0x39d2f82c,0x399ecd3c,0x3b8a9e57,0x3b97b1b8,0x3b969e52,0x3b800d19,0x3b5c00a1,0x3b3f51c5,0x3a91dd5d,0x39e34229,0x3ac444a8,0x3ab94288,0xb9892716,0x3a362d43,0xbb6849b1,0xbbfb38f4,0xbbaa750e, +0xbb8c6454,0xbc9b7c79,0xbc8b3e67,0xbcfd255b,0xbd0837ff,0xbd0bcb20,0xbd137d7d,0xbd0cc66d,0xbce37d5d,0xbc7e60a5,0xbc589af7,0xbca5a1ec,0xbc61f30f,0xbc580d31,0xbc3a2b5e,0xbba6e0c2,0xba1342a1,0x3b49a43e,0x3bb6a87f,0x3b6b1267,0xbaf6a7f2,0x3a6855d0,0x3a90ccc2,0x3b649bc8,0x3b2471ba, +0x3b10b10f,0x3b3a6997,0xb9bdb1dd,0xbb3a68ac,0xbbb9ebc6,0xbc0e01f8,0xbc104a02,0xbc1f6053,0xbc5a6c1b,0xbc505fc4,0xbc9c5c80,0xbc955497,0xbc383ca1,0xbcf3beba,0xbd0108cb,0xbcd3f652,0xbc995652,0xbc303e69,0xbbdea3f2,0xbc143aae,0xbc27034e,0xbc09da5e,0xbb8e51ea,0xbbbe7f2b,0xbbdb5e8f, +0xbbc78ed5,0xbbbbe941,0xbb6cd365,0xba7a8562,0x3b082d81,0x3b4dbeda,0x3b06d056,0x3a6bfaa4,0x399acfd9,0x362dd164,0x3a8eed15,0x3afc1935,0x3b82e8aa,0x3b7936b9,0x3b2ca8fd,0xbae5b172,0xbaf349a0,0xbb3a7368,0xbb6e199e,0x389bad47,0xbb411016,0xbc335dfc,0xbc8b93c6,0xbc15109f,0xbc49e39d, +0xbc97bf31,0xbc8b55ac,0xbc7eee44,0xbc6a5e4d,0xbc70da5f,0xbc801551,0xbc61b0f6,0xbc4acf7c,0xbc170a04,0xbc34081e,0xbc2ddf21,0xbc252a32,0xbc0e89c5,0xbbc351b7,0xbb8e147d,0xbb3d73e0,0xbaf573cb,0xbb2050be,0xbb10d593,0xb9944147,0x36ef6e0b,0x3ab315a0,0x3b498786,0x3b9152de,0x3bbcde00, +0x3bd0d690,0x3bc060ed,0x3b489bf3,0x3b2da09e,0x3b48e578,0x3b01950f,0x3ae7e8b7,0x3550d5ab,0xbb63f975,0x3a253849,0xbbc89cba,0xbbe5d436,0xbc306f2a,0xbc7eed2d,0xbc8db48e,0xbc98e0ba,0xbca5279e,0xbc937182,0xbc855e3f,0xbc7afd41,0xbc4a68d2,0xbc2da53b,0xbc20a9a6,0xbc1309b1,0xbc0c31b7, +0xbc015a6b,0xbbfb90ea,0xbbe90f14,0xbbc5ee34,0xbbb0d010,0xbb2b4d2a,0xbb332f90,0xba42cdba,0x3987d835,0x3997cd86,0x3b5b594c,0x3a4e566b,0x3bb045c7,0x3b76f5e4,0x3ba426e1,0x3b544c86,0x39b2e6a8,0x3b865dc8,0x3a27f7f4,0xbabc1072,0xb9ecca93,0xbbc7d942,0xbc05548d,0xbc0eeff8,0xbc09f0c5, +0xbc2e1191,0xbc47aac7,0xbc7c1d20,0xbc694b88,0xbc609b0a,0xbc550923,0xbc5bcb4b,0xbc608afd,0xbc603aff,0xbc4bbba1,0xbc331d63,0xbc274372,0xbc1162de,0xbbe51b11,0xbc08ffeb,0xbbf75b94,0xbbfdc56f,0xbbea35ce,0xbbe5e1b6,0xbbb681cb,0xbb9cd7d3,0xbba40366,0xbbc545aa,0xbb9a7697,0xbba38fb2, +0xbb9e0d6a,0xba439203,0xbb6427c6,0xbb5ccf27,0xb9eeca2d,0xbbff8ebe,0xbc13b9ce,0xbc00b78d,0xbbfae76c,0xbc0f9290,0xbc1f291f,0xbc2e353a,0xbc33147d,0xbc3ef6af,0xbc33db75,0xbc320a82,0xbc2cf9d9,0xbc230a82,0xbc176759,0xbc128460,0xbc0fc0c8,0xbc11b4e5,0xbc12a4d8,0xbc10fa44,0xbc0b50aa, +0xbc049619,0xbc1bbe9b,0xbbf51cbf,0xba8df6b4,0xbc1a8ebe,0xbbec3a1f,0x39318d23,0x3a4e5e57,0x39ff5906,0x39fb704e,0x3a763aa1,0x39040d9e,0xba73b12d,0xbbda10fe,0xbc07b19c,0xb9181f46,0xbba9a71c,0xbc7019bd,0x3c5616cf,0x3c3d4ea9,0x3c398afb,0x3c12690a,0x3c131849,0x3c09b1da,0x3c1c669a, +0x3c21f2c4,0x3c2003fe,0x3c1e3cab,0x3c1e1fb9,0x3c180e32,0x3c16a12f,0x3c18547a,0x3c1a369c,0x3c1cae2e,0x3c22829c,0x3c1fe576,0x3c222525,0x3c161c94,0x3c282985,0x3bf62313,0x3b229e9a,0xbc164d99,0x3c1a0381,0x3b47a89e,0xbc149f38,0xbc0b7f54,0xbc017b8f,0xbbd27c51,0xbbfeafab,0xbbee3875, +0xbbbc64be,0x3aee6324,0x3c241e94,0xbbdd59cd,0x39fef06f,0xbbb7e769,0x3c383342,0x3c3a6ee1,0x3c390607,0x3c174703,0x3c5f1139,0x3c7a1147,0x3c779ba2,0x3c6c504a,0x3c6bd3ae,0x3c567687,0x3c45adfe,0x3c457493,0x3c53b686,0x3c579357,0x3c66a50d,0x3c57a92f,0x3c4f256c,0x3c48c5b9,0x3c5b18d8, +0x3b44a15d,0x3bcb3ca6,0x3b1f9772,0x3b9e0136,0x3c122789,0x3a7e36a6,0x3beaed39,0x3b959e58,0x3bb42d32,0x3ba87186,0x3c1389d9,0x3b3a4b10,0x3b4d4471,0x3b9f32b9,0x3b967e34,0x3b9f40f5,0x3bea59fa,0x3c73dbd4,0x3c2bc9b6,0x3c369272,0x3bed9cb6,0x3c6eae07,0x3c864ff6,0x3c82d27f,0x3c8519ff, +0x3c7d8750,0x3c641428,0x3c518768,0x3c52a22b,0x3c54dcb9,0x3c79b678,0x3c81822d,0x3c836c9a,0x3c6c984c,0x3c724135,0x3c333f01,0x3b86f467,0x3bcd38de,0x3c17526d,0x3b923250,0x3b722b9f,0x3bb66a19,0x3babe8bd,0x3c5aace6,0x3be4ef02,0x3c146255,0x3bb45c2f,0x3ba41a8d,0x3bb58394,0x3ba9e810, +0x3ba133f5,0x3c50462f,0x3b59d90d,0x3bdef13f,0x3c5bc9aa,0x3c3936aa,0x3bc1b132,0x3c857341,0x3cb550c4,0x3cb31201,0x3cb34805,0x3ca49132,0x3c913b80,0x3c72007b,0x3c601da1,0x3c7a4e04,0x3c978b40,0x3c9dc254,0x3c8e1541,0x3c87269a,0x3c7ce368,0x3c609030,0x3c1930b4,0x3c2788b7,0x3bc697de, +0x3bcb3b29,0x3b662d52,0x3b422049,0x3bb7bf98,0x3bb6154f,0x3bab83d0,0x3bcfb3e6,0x3b9142aa,0x3b8ad8b4,0x3a90941a,0x3b3138df,0x3c1b9ed2,0x3beb3e96,0x3c8188be,0x3c3fe74c,0x3c3ee87f,0x3c1c2e2a,0x3b0c88ff,0x3c837aa6,0x3c9c61d9,0x3ca4d46b,0x3cb1317d,0x3caa5d15,0x3c89c89c,0x3c6ab372, +0x3c6c80c9,0x3c687223,0x3ca1322e,0x3cabeae6,0x3caa45b9,0x3c9b663f,0x3c8f05f9,0x3c6a2087,0x3bb2bffb,0x3c18bc37,0x3bffbd34,0x3bc3e52a,0x3bc28a5b,0x3a5d74ef,0x3b5db364,0x3badfb7a,0x3bf20b21,0x3bcde271,0x3ba5c61a,0x3ad0efbc,0x3aff06e8,0x3b6ba15a,0x3c11691a,0x3c14f695,0xbb89e0cc, +0x3c683866,0x3cd53caf,0x3cf4d77b,0x3d151181,0x3cd92845,0x3ce138c5,0x3cf0f596,0x3c9587a5,0x3c4320b6,0x3c2d2fc6,0x3cb0cbcd,0x3ca7502b,0x3bc2f563,0x3c1391db,0x3c0e7049,0x3c3a999d,0x3c3fbe32,0x3c54e4eb,0x3c2e46dd,0x3b8cccda,0x3be2a496,0x3bc4285f,0x3c072cd9,0x3bdf5d88,0x3bddc656, +0x3b2f213c,0x3a245f4f,0xbb0f3a0b,0x3bdc127f,0x3c53c449,0x3c364d29,0x3bdd7e1b,0x3a738b83,0xbc4b0539,0xbb02b6c6,0x3c92b98b,0xbba0afb0,0x3a16090a,0xba2c4294,0xbbd58bad,0x3b04075d,0xbb45146e,0xbc602643,0x3b936493,0x3c220437,0xba03f1ce,0x3bcf8b36,0x3c04b703,0x3c206115,0x3c3e1251, +0x3c70320c,0x3cb847b3,0x3c9ec15a,0x3c92f84a,0x3bbcc336,0x3b1ccd8d,0x3bf05d77,0x3be5a064,0x3c0d1da4,0x3bd13310,0x3b7021e0,0x3b04dcd5,0x3b545588,0x3bd7d8e5,0x3b991229,0x3b171d1b,0xbabe3459,0x3b037d56,0x3bb7e2c4,0x3b02bfe7,0x3c902837,0x3b893b7b,0xbbb6286b,0xbb8319aa,0x3aa5c0d7, +0x3c4b58c9,0x3c994cf2,0x3cbff4cf,0x3ce30d36,0x3ccdc9a0,0x3c992061,0x3c0c4d1b,0x3c8c1be2,0x3c92a82d,0x3c96e692,0x3c882530,0x3c75afb3,0x3c10f09b,0x3c45082f,0x3c41ce95,0x3bdb949f,0x3b9b3ab6,0x3b5319b5,0x3b4f774c,0x3bebf341,0x3b6b8dfb,0x3b3f8199,0x3b3f26b3,0x3af48e5d,0x3b5ff34f, +0x3a88b3d4,0x3ab6cb9f,0xb9c1760f,0xba76474e,0x3b0e06c0,0x3ba5c09e,0x3a8a095d,0xbb27b6fc,0x3a71f75e,0x3bf4d60d,0x3c80c739,0x3d1f1c9a,0x3d0a1a4d,0x3d174984,0x3cf4ee78,0x3cbbfc4d,0x3c8340c9,0x3c21ca99,0x3ca1b51e,0x3ca7f2b6,0x3c97ec20,0x3c8ebaa1,0x3c66697f,0x3c068e22,0x3c1d92c3, +0x3c219598,0x3b88ecfd,0x3bab9b0a,0x3b5bd064,0x3b6317cf,0x3b957d66,0x3b444695,0x3b1cbd47,0x3b19e870,0x3af13f0d,0x3ada499c,0x3a4b7f0d,0x3a600a38,0x3ba6cc39,0xbb5212d9,0xb94cd2e4,0x3b1230f2,0x3a9b4834,0xbb357d02,0xba16cd38,0x3c86f605,0x3cc421b4,0x3d2672e0,0x3d0323e5,0x3cb2c07a, +0xb9dc6bd1,0x3aa33eda,0xbb37112c,0xbb1a2291,0x3b1c06e6,0x3bd44079,0x3b9c7841,0x3c26f712,0x3c558495,0x3c87a55a,0x3c644cb4,0x3c2b4f60,0x3ba79f4d,0x3bb36d44,0x3bdb0665,0x3bb822f7,0x3bdf596f,0x3b9a98a3,0x3b8621c3,0x3ada8215,0x3a8701a1,0x3b0c9aa9,0x3ada18af,0xb8905937,0x3a1e615a, +0xbaf92ae1,0xb9db384e,0xbbcea03d,0x3a013e9e,0xbc5bf4c0,0x3aad5aba,0x3ce6c052,0x3cba4475,0x3c8f7410,0x3c703de3,0x3c83920b,0x3c85608f,0x3c73fc72,0x3c691b5f,0x3c764a91,0x3c54e3bd,0x3c47cf4d,0x3c344684,0x3be74de6,0x3ba52032,0x3b96e3e4,0x3b92ca4b,0x3ba34850,0x3bb024c8,0x3ba9f6a3, +0x3bb5e154,0x3b6711b6,0x3b30deb4,0x3b1e6eed,0x3b968812,0x39e3ce1a,0xbb1651bf,0xbb422136,0xbbaf838e,0xbb5ef715,0xbbc1d37c,0xbbf7b624,0xbc755d3f,0xbc8af1a4,0xbc3e708b,0xbcd2a14f,0xbbfddaac,0xbb9a117b,0xba80a4cd,0x3bd618fe,0x3c422df9,0x3c4a3f1d,0x3c25d3c7,0x3a626767,0xbb5bf265, +0xbab7a4b5,0x3a5abc75,0x3b72eb90,0x3bb77c21,0x3bd96d6a,0x3c144195,0x3c0ae4e1,0x3c21dbe2,0x3c03a580,0x39d4b392,0x3b09ab52,0x3b796835,0x3b8194df,0x3b7b40cd,0x3b83ae45,0x3ba8eee9,0x3b93d0ab,0x3b4adfac,0xb9fc5547,0xbb02d65d,0xbb108fc0,0xbb81f0e7,0xb9f5c964,0xb91d3d00,0xbbe1ee3a, +0xbc0b919d,0xbc0d3b3f,0xbc0790ca,0xbb7926b6,0xbb849c68,0xbb64576e,0x3a35801b,0x3b668b00,0x3be0fb0a,0x3b1eaf4f,0x3a16ab1e,0x3a15adec,0xba5ee50d,0xba904384,0xba77e896,0x3a2045ac,0x3ab39c99,0x3aeccaf7,0x3b507756,0x3b4e1f1e,0x3b20faa1,0x3a2cbed6,0xb97b20c4,0x3b1cf135,0x3acd0365, +0x3b3ff60b,0x3b83ea70,0x3bacfb22,0x3b8d477c,0x3b8f3570,0x3b253390,0x3abf201e,0x3aa6ebf1,0x3ac4c01a,0x3a4cb834,0xbb232c5e,0xbbbc4f3c,0xba8b8ded,0x3a05e00b,0xbaa3003d,0xbaed15c8,0xbb24c6e8,0xbb19fb10,0xbb1ab87e,0xba994344,0xba41a517,0xba12538b,0xbab0a8c3,0xbb584d8e,0xbba77d85, +0xbbfc50bb,0xbbd28053,0xbbb5cad4,0xbb8507e2,0xbb7adf05,0xbb136413,0xbada04d9,0xba11dd51,0xba7e2774,0x3a547678,0x3aad4dbb,0x3b278500,0x3b64c4ef,0x3b3c20dd,0x3bf256d7,0x3bdde42f,0x3be10418,0x3ba8ef8d,0x3b7a4045,0x3b777f03,0x3ac92980,0x3b6af123,0x3b1af509,0xbbdb568e,0xb9b30bc6, +0xba293a25,0xb9f5b1eb,0xb9f213f4,0xba268463,0xba3f2a9d,0xbacc9015,0xbb8cdf95,0xbbcf0691,0xbbffa704,0xbc14c2ee,0xbc2311de,0xbc3a204a,0xbc20ab72,0xbc0e268d,0xbc0dbadf,0xbbf4f244,0xbbe6a8f9,0xbbb5ba51,0xbbd4f45a,0xbb90284b,0xbb6b27fb,0xbb11d0bf,0xbb169166,0xba6c7268,0xba956c67, +0xb9c83185,0xbb5b935e,0xba931bcd,0x39186090,0xbac0ad36,0x3aa21590,0xbadfe614,0xbbb681e7,0x3a7b7476,0xbab1cf43,0xb9f73a64,0xbae859d5,0xbafbcf4c,0xbb0e4243,0xbb24f1e7,0xbb3473e4,0xbb2b60ea,0xbb18ac2f,0xbb15fa63,0xbb24c15e,0xbb38fbec,0xbb534b93,0xbb7d2c47,0xbb67e0fb,0xbb6448f7, +0xbb521233,0xbb35f61f,0xbb2b531f,0xbaff66aa,0xbb09b317,0xbbafe8a9,0xbc30e0da,0xbaa3477b,0xbb9114a1,0xbc314add,0xbc3b7f29,0xbc27837d,0xbc168c10,0xbc1dc015,0xbc1887cc,0xbc0930db,0xbb782d5a,0xba5552ef,0xbc17cb34,0xbbad71aa,0xbba39260,0xbb980ada,0xbb837715,0xbc077dd5,0xbb829ade, +0xbb82b1a2,0xbb812961,0xbb982f20,0xbba53b9a,0xbba9affa,0xbba5df60,0xbba55d4b,0xbb9f01c7,0xbb9d493b,0xbb9ac0fc,0xbb9b28f4,0xbb9afd16,0xbba0c6e7,0xbba172eb,0xbba1895a,0xbb84184a,0xbbb7005b,0x3a8f908c,0x3bdd862a,0x3c8177c4,0xbaf97932,0x3bba4201,0x3c7cecc5,0x3c8057a0,0x3c76be6c, +0x3c58d167,0x3c826677,0x3c76af1d,0x3c537d34,0x3be4c91a,0xbb44deac,0x3c5f252f,0x3c156495,0x3c935e8d,0xbb7a7122,0xbb7d8ea2,0xbb7737aa,0xbb7d4012,0xbbd0ea9c,0xbbf6b1a1,0xbc046412,0xbc048eb9,0xbc0643da,0xbbe98a0b,0xbbefcec4,0xbbf3307d,0xbbf76e13,0xbbebda80,0xbbe8b198,0xbbe39a56, +0xbbc27f4e,0xbbb6e387,0xbbe4f184,0x3bfedf37,0x3b4692c1,0x3bce4a9a,0x3b80eb1b,0xbb1a096f,0x3ba361ff,0x3b492ae3,0x3beaa78f,0x3b5e23bd,0x3ba69797,0xbb762801,0x3b7b423b,0x3b76882f,0x3b256d41,0x3bb95227,0x3b584778,0x3bc0df89,0xbc236e73,0xbb5220e7,0xbb4abbd1,0xbb45dd13,0xbbea3c5e, +0xbc166489,0xbc24da10,0xbc262127,0xbc1cf761,0xbc0ea9ee,0xbc0bb880,0xbc0bdc0e,0xbc08a1e9,0xbc0db94a,0xbc0c6a35,0xbc1d66a0,0xbbd99b08,0xbc06b262,0xba274827,0x3c28f665,0x3b8acbd8,0x3b217165,0x3b63501e,0x3b26a9f4,0x39e54de8,0x3b925cb9,0xbb44a5f6,0x3b7be4e8,0x3a1db01e,0x3b91a614, +0xba8db73b,0xba46c24e,0x39afb388,0x3bb51e3f,0xbb8a82fa,0x3c22ce5c,0x3adc7ba7,0xbb84431c,0xb923998c,0xbb3e6e58,0xbc0097c0,0xbc3e5278,0xbc5420bd,0xbc6b718e,0xbc612059,0xbc271207,0xbc412650,0xbc38e283,0xbc4c018f,0xbc4453db,0xbc340c14,0xbc34a18d,0xbc086b8a,0xbbfbaf55,0xbb054337, +0x3b89dd24,0xba4f339a,0x3bc71377,0xbaad229a,0x3b29b044,0xbb2a3c53,0x3bb8ce55,0x3bbd75f4,0x3b9085bb,0x3b2d0c95,0x3b54b91c,0x362a339b,0x3b2fdb66,0x3adc3d47,0x3b4c6dbf,0x3a82b13c,0xbaebe848,0xbb966970,0xbba1a104,0xb96bc329,0xbae83b44,0xbc08d3be,0xbc47de12,0xbc6821ee,0xbc6cfeae, +0xbc503562,0xbc43f2de,0xbc3a54ad,0xbc3b8891,0xbc37f433,0xbc44ec80,0xbc4ed81a,0xbc66128e,0xbc1e29ed,0xbc02b517,0xba353c15,0x3c813f9d,0x3b85c25d,0x3bda7622,0x3b1ee5a7,0x3affb7e3,0x3a00fd28,0x3aeda50e,0x3b9a7be7,0x3b94d091,0x3bcbf14c,0x3b4eea83,0x3a6f0027,0xba7b4a00,0xba7f2aa6, +0x3b38b8bc,0x3bdedc31,0x3aca3e46,0x3af3dbff,0xbc02af8c,0xbad5e884,0x3b111f76,0xbc028dd2,0xbc4b6d3e,0xbc552442,0xbcb2df08,0xbcb331ed,0xbca7bc52,0xbc04572f,0xbac34e6a,0xbb34304d,0xbb08b38d,0xbadb5255,0xbb8ccf2f,0xbbcd7d37,0xbc2390dc,0xbc09f9f6,0x39ce16b3,0xbb638efe,0x3ba63f37, +0x3b419947,0x3bd39886,0x3be095fb,0x3b0495ef,0x39bb02a4,0xbad6c63f,0x3bc91e6b,0x3c3e8f91,0x3c0929ae,0x3b5b6e1d,0xbac74aae,0xbb2131bb,0xbc67df5c,0x3c4290c1,0xbcdea18a,0xbc754f93,0xbc11b4fe,0xbbe3fdf2,0xbc0e386a,0xbc324bab,0xbc8d104a,0xbb58bb8b,0x39edab8e,0xbc0ec437,0x3b43f399, +0x3bb0711f,0x3b95d70b,0xbb0eea1f,0xbbf772bf,0xbc85c029,0xbbbbb3a0,0xbbab240a,0x3ab3c9be,0x3c241b37,0x3b9c63c9,0x3b9771db,0x3bb96d72,0x3b6e62c3,0x3b1c0a8e,0x3ab811c3,0x3b25d038,0x3bd940e4,0x3b8052b4,0x3ab66201,0xbb3f3929,0x3b59a530,0x3b1b1c34,0xbbb86104,0x3c80ac6f,0x39a4925f, +0xbc88b867,0xbc1f6909,0xbc30e9f5,0xbc63c237,0xbc924ade,0xbca0ea5e,0xbc9c4f69,0xbc100b0d,0xbb83f294,0xbc147ddb,0xbbfee443,0xbc3c2b2e,0xbc6920bb,0xbc5da32c,0xbc063bb6,0xbb92f20a,0x3933efbf,0xba729e77,0xbb8e7a85,0x398a8401,0x39c4f055,0x3b2db5e3,0x3b05f419,0x3a7099ae,0x3b57e274, +0x3af06687,0x3ad95da4,0x3b31f3cd,0xb8679f9a,0x3a5c5f52,0xba358320,0xbb004c18,0x3b351f25,0x3af651fd,0x3b99a978,0x3ab177ed,0x39e44415,0xbba9e5fd,0xbc1635a8,0xbca35353,0xbcbc647b,0xbcc7c308,0xbc8b966d,0xbc7a4665,0xbc3dc674,0xbc3f24b6,0xbc531ac7,0xbc5f0e8e,0xbc8179cd,0xbc4a2cd2, +0xbbfd1b7c,0xbb2066bc,0x3961fffc,0xbb3cc222,0xba9c94e0,0x3a3d88c8,0xb95f481c,0xba41b9b6,0x3b618b8a,0xb815a5d7,0x3b21369b,0x3a16a348,0x3a5b95bc,0x3a9feb4e,0xba0d0409,0x39e60943,0x3b203579,0xb990aa9e,0xb9b6a8d8,0x3b6d0cc0,0xbb574068,0x3b173985,0xbb97c968,0xbc57994c,0xbc883af2, +0xbcdfe29f,0xbca079ad,0xbc7abc15,0xbc4f40be,0xbc0fafc9,0xbbdf118c,0xbc4a546e,0xbb50c909,0xba58a996,0x3a5ca54f,0xbb26f07a,0xbb7b6f8b,0xbbb14d99,0xbb8378cc,0xbb1ccf8e,0x39eebc67,0x3b35de0e,0x3afa11fe,0x3b7ed6a1,0x3b7a947b,0x3b53f2d8,0x3afa4bc0,0x3a55296e,0xb9ce6e7d,0x3a8ef4ce, +0x3982341e,0xba64578d,0xbb1c333e,0xbb4060d8,0xbb8d5796,0xbb1218aa,0x3a6e9274,0xba56afab,0xba9e0af2,0xbcca2b4c,0xbca8c2ba,0xbcc24c0b,0xbccdd833,0xbcd1073b,0xbc9e9b74,0xbc8402d9,0xbc779c55,0xbc811ecd,0xbc12da3b,0xbc038f59,0xbbe6b84a,0xb9441b89,0x3b6ddfe9,0x3b9ad0a5,0x3baafa38, +0x3ad78063,0xbb43eb51,0x3bac9d71,0x3b8d02fa,0x3a615958,0x3b26756c,0x3ae7931b,0x3b835331,0xba1f117c,0xbb67e8e7,0xbb84261c,0xbba480cd,0xbbb5e5af,0xbbc7b700,0xbc327aee,0xbc178a11,0xbc8a50c9,0xbc897436,0xbbe984a6,0xbcbf5dcd,0xbcc5b782,0xbca170fe,0xbc929826,0xbc5e1fce,0xbc683cb3, +0xbcab228a,0xbc3f8875,0xbbcd9cea,0xbb5652a1,0xbba1eab7,0xbba32f2c,0xbb496834,0xbb4eff09,0xbb05f321,0xbadaffa2,0x39db479a,0x3ad4f877,0x3b740539,0x3b379c64,0x39096b19,0x3ab67e19,0x39e4fcd2,0x3a86a6bb,0x3b815c83,0xb9827ce9,0xb913504c,0xbb8d1e09,0xbba23135,0xbbdc3d25,0xbbf9d6d4, +0xbb32f9a1,0xbbbdc32b,0xbc13bdd2,0xbc741f57,0xbc167d66,0xbc5e2271,0xbca41442,0xbc855cca,0xbc6c3e77,0xbc4573b3,0xbc4080bd,0xbc66e9a1,0xbc27df01,0xbc111cb4,0xbbd52fed,0xbbfe16b5,0xbbeceb81,0xbbc2a0dd,0xbb9afb97,0xbb120a4b,0xbad40420,0xbac949c1,0xbb173b11,0xbb3986d8,0x3a2367b1, +0x3aa12ce9,0xb9c7538d,0x3ad584a6,0x3ab94d13,0x3b32ad83,0x3b917ec9,0x3b7a19d1,0x3b25eabd,0xba32ba87,0xbae35792,0xbb1026ec,0xbb5b73c2,0xbb5423cc,0xbb22d569,0xbbe877a0,0xba0f5ec6,0xbc2e9365,0xbc317c58,0xbc37cae8,0xbc5f4ca5,0xbc5e75b8,0xbc53fb91,0xbc3a9dc6,0xbc3c9c5e,0xbc3fe240, +0xbc38042b,0xbc14dc6e,0xbbea3abf,0xbbcd4773,0xbbbd96be,0xbba80581,0xbb9affe5,0xbbabdc08,0xbbefd2bb,0xbbbbc9ce,0xbb91d3ba,0xbb2ff6fa,0xbb42f0a4,0xba86b7b1,0x39a05192,0x3a777035,0x3b16b986,0xbaf0acfb,0x3bce012d,0x38d22189,0x3b524772,0xba6355fa,0xbb1e4641,0x3a8d8bd0,0xbb500a4e, +0xbbaf5b50,0x3af5b654,0xbbde8e49,0xbc06782d,0xbc1f4a6f,0xbc29b214,0xbc599dc7,0xbc81a4f6,0xbca03d26,0xbc8fce75,0xbc7a74af,0xbc659abb,0xbc5fe925,0xbc5a00c7,0xbc49a863,0xbc3c9001,0xbc2bda55,0xbc267490,0xbc0e0164,0xbbd4b4c6,0xbbf119b7,0xbb9c23b4,0xbbb26077,0xbb85a053,0xbb8f313d, +0xbb51e55d,0xbb225806,0xbb0a6a88,0xbb288ecd,0xbaf8ba5f,0xbb090e35,0xbba072cd,0x3b2563c2,0xbaa6dbab,0xbaaf5945,0x3b2d40f0,0xbbcfc73e,0xbbd234fb,0xbc1795df,0xbc0c8c79,0xbc17e33d,0xbc1e60de,0xbc25e79f,0xbc2034c8,0xbc246ca0,0xbc1ddd7b,0xbc24ebac,0xbc231799,0xbc1a0582,0xbc111e4f, +0xbc0ce244,0xbc0c50fa,0xbc0cfa78,0xbc0d40c5,0xbc0ee0d8,0xbc0e96e4,0xbc1537da,0xbbe8c1e9,0xbb52baa9,0x3a849a69,0xbbdc0b75,0xbb279b89,0x3b2f92de,0x3b654d74,0x3b34d86f,0x3b2754f0,0x3b78574d,0x3b4aef25,0x3aaea8dd,0xbb675868,0xbbdf316e,0x3aa069cf,0xbabe9f52,0xbc680341,0x3c0efd64, +0x3b879b01,0x3c2e54ae,0x3bda1a80,0x3bd3a9dd,0x3bc07e19,0x3bd2671d,0x3bdc4b46,0x3be6f7c8,0x3be28e96,0x3be6f249,0x3becaaab,0x3be58c66,0x3be9571a,0x3bee7a0a,0x3bf2065f,0x3bf7f029,0x3bf08b8f,0x3bf003fb,0x3bd6e3af,0x3c059134,0x38c1c1e2,0xbb95eeb4,0xbc0b8e2b,0x3b234365,0xbb8e3894, +0xbc18a08f,0xbc14e227,0xbc0892da,0xbbee770e,0xbc207dbd,0xbc1d94c7,0xbc0e80c4,0xbbc24ede,0x3b506bd3,0xbbf9e1a4,0xbbe61402,0xbc4e9df6,0x3bce6c8d,0x3c11eb91,0x3bf9de6c,0x3bb4f5e4,0x3bf1f5e6,0x3c0c568a,0x3c27089a,0x3c1a422d,0x3c24eb08,0x3c278c35,0x3c14c94a,0x3c124822,0x3c18a80e, +0x3c1c2eb6,0x3c26c163,0x3c1b5762,0x3c0b8c83,0x3c0d65dd,0x3c2b146c,0xbb51674f,0x3acf4d85,0xb85295ee,0xbaf54136,0x3b71195d,0xbaa17d0b,0x3b46e83c,0xb9f4ab9b,0x3a90db8e,0x3910da55,0x3c02b6fb,0xba1723d7,0xba6d36b6,0x39443241,0xbaa0e73b,0x396f812f,0xbb6a632f,0x3c370d18,0x3c080472, +0x3bd7b1d0,0x3b457957,0x3bbdd84c,0x3bd561ee,0x3c20d95c,0x3c18c5aa,0x3c24bb04,0x3c37d437,0x3c1c19ec,0x3c20edb3,0x3c206f0e,0x3c3fe516,0x3c3a3db5,0x3c3ccb25,0x3c0f285c,0x3c31b5e5,0x3b90c193,0xbb9d4673,0x3ad58c1d,0x3b7f038e,0xba2d958b,0x3a79cf02,0x3ab6693d,0x3b7435ec,0x3c3ef34f, +0x39151afa,0x3bdd1f9b,0x39e3b336,0x3b110631,0x3b13db67,0x3a8281d4,0xbace15d5,0x3bdb5970,0xbbdae508,0x3b2215ae,0x3c45888a,0x3bce08de,0x3ac893fe,0x3b91ef15,0x3c03c493,0x3c5a0ec4,0x3c46cbba,0x3c54b918,0x3c781e6b,0x3c31f390,0x3c271679,0x3c2463e2,0x3c53cc9e,0x3c562dbe,0x3c40ee49, +0x3c23d849,0x3c2d19ab,0x3bea4bb7,0x3b48f336,0x3c06c7ed,0x3b946a5e,0x3baf3bd6,0x3a2ae424,0x3b400d3b,0x3b701cf7,0x3bcb804a,0x3b80e76c,0x3be30fcc,0x3b32ec91,0x3b49873a,0xbae17c6f,0x3a63a19e,0x3b663f3d,0x3b2bf25a,0x3bda0922,0x3ba2e6b8,0x3c361b7c,0x3b6fe21b,0xbade453c,0x3aafc828, +0x3b30f4ac,0x3c2904e3,0x3c2bfa4e,0x3c53fc76,0x3c7a2253,0x3c38e6ca,0x3c3feea9,0x3c335dc7,0x3c7268a8,0x3c744e3f,0x3c66da93,0x3c2b02e2,0x3c338421,0x3bf72cf0,0xbb95af9c,0x3be1b3f8,0x3bb541b8,0x3b97f733,0x3bae35b4,0x395b0cb0,0x3bbe356e,0x3bd16472,0x3bc45483,0x3bb151e5,0x3ba51849, +0x39669ac6,0x3b043717,0x3b23d029,0x3b903d47,0x3a7f1d8c,0xbc55e20f,0x3b76db70,0x3cc7ed83,0x3cba6012,0x3cce27e6,0x3ca0473c,0x3ca0eec3,0x3ca36243,0x3c4d0a2a,0x3bfe4a84,0x3c0c5d2b,0x3c946878,0x3ca420aa,0x3c55faeb,0x3c2fb983,0x3c0eea18,0x3c852053,0x3c5178a6,0x3c3fbf02,0x3b90d577, +0xbb09307f,0x3bb76280,0x3b600412,0x3be5601f,0x3b7f9d42,0x3c102f26,0x3abdb216,0x39c172bc,0x399379fb,0x3c0cacd3,0x3c4d601e,0x3bc48b13,0x3b7dec6f,0xbb8f1e59,0xbc822d64,0xbc387044,0x3c653aae,0xbc3f6fdb,0x3bc7cb50,0xb85be6cc,0xbba4d1ca,0xbb920d50,0xbc172804,0xbc7a214a,0x3adbc7b9, +0x3c0c3389,0xbaa3b485,0x3b279eea,0x3b8967b1,0x3bf52330,0x3c1bbe94,0x3c42baff,0x3c811fbf,0x3c3b0120,0x3c61c763,0x3ae45fc4,0xba7ffd09,0x3b881a53,0x3b86aa6c,0x3c0f8393,0x3bf1ad6b,0x3b8107ca,0x3b447686,0x3b757cc5,0x3be8e3d3,0x3b8f8d54,0x3b350505,0xbaa1528f,0x3ae0a208,0x3bbdfabf, +0xbab1bff7,0x3c91b5c8,0xbaabfac1,0xbc3d70a5,0xba7be8d5,0x3ac9a2eb,0x3c042f6f,0x3b965401,0x3be60c17,0x3c26a7f6,0x3ca72d80,0x3cadaa3b,0x3c05df64,0x3c8864aa,0x3c6aa4bc,0x3c3c0160,0x3c32c6ab,0x3c1bbc2c,0x3be5b86b,0x3bf7b5fd,0x3c12c28e,0x3b58fcce,0x39ec5029,0x3a4f2268,0xbac1772f, +0x3ba179bf,0x3b02a978,0x3b79897b,0x3b171a7f,0x3b5670d7,0x3b8b8efb,0x3ad3b3ce,0x3b0119f8,0x3a0a67de,0x3b12978a,0x3b8adc61,0x3acc9e33,0xb9e6ae92,0xbb8d9adf,0x3ac43679,0x3b93e045,0x3bf987ed,0x3ca3647f,0x3c617428,0x3c8ac749,0x3c92f10f,0x3c8116c2,0x3c4e6e25,0x3b613c1b,0x3c5de29c, +0x3c45b431,0x3c25cbe1,0x3c111cf6,0x3bf75f83,0x3bc88d76,0x3ba86466,0x3bfacfc2,0x3a86aeb2,0xb9a87b22,0x3a0f9bd8,0x3a0ee4ba,0x3a7cdd60,0x3b041e1d,0x3b016b41,0x3b24fb1d,0x3ac9daa0,0x3a43e77f,0x3af574c6,0x3aafe8ed,0x3b3b8a7a,0xb97ab30d,0x3b3d19a4,0x3a9d1c7d,0x3a57884d,0x3864573e, +0x3b0e4d09,0x3ba7d8be,0x3bcae579,0x3caf321d,0x3c55298b,0x3c003606,0xb9ad0a08,0xbbac6fc8,0xbc16b048,0xbc424fd7,0xbbb37d95,0x3a1cc86f,0x3aa64a05,0x3b9835cd,0x3bf66aef,0x3c374935,0x3c1ab886,0x3c0558bc,0x3b4335bd,0x3b372baf,0x3b72a12a,0x3b004596,0x3ba21501,0x3b7bfbdd,0x3b1e8a54, +0x3abf5799,0x3a5b2a4b,0x3aa9ad8b,0xb9224878,0xbaca3367,0xbb01d5a4,0xbb108a20,0xb9c8c1bf,0xbba3446d,0x3ab989a6,0xbca4b87d,0xbc3c60c0,0x3c3cc3d4,0x3be5b44f,0x3bd4ca66,0x3b676c9f,0x3bd0c57a,0x3c2a68cb,0x3b88c299,0x3a9d24a2,0x3b13a5b2,0x3a544812,0x3b8b78a7,0x3b651a88,0x3b96d8cf, +0x3b9589c6,0x3bd4efbc,0x3affe278,0x3b20b936,0x3b899af7,0x39543389,0x3b0c6331,0x3aee7411,0x3ae47f8f,0x3aec1dd1,0x3b5df377,0xbacc1388,0xbb3049fb,0xbb1bbfb9,0xbb66edc5,0xbb2f7dae,0xbbf1bff1,0xbc0851e9,0xbc7d4ff7,0xbcb30ea1,0xbc2a802a,0xbcd27423,0xbc4dfdc1,0xbbe7b9ca,0xbbb2e0d7, +0x3a1dd339,0x3b017673,0x3aab9ef8,0xbaf201e0,0xba2520db,0xba405024,0xba854870,0x3991c47b,0x3a03de7a,0x3aa02fe0,0x3b4395f0,0x3ba618c1,0x3bfd3a43,0x3bfa8eaf,0x3be2f532,0x3ad23cc3,0x3b5d2e26,0x3ba44e11,0xb9ad7fff,0x3b1afb98,0x3b0cee6a,0x3b2e9827,0x3b1d12fd,0xba034cfb,0xbb29e32c, +0xbbc29544,0xbbcdb6c0,0xbbf59130,0xbbd44ea0,0xbba3856b,0xbc0db185,0xbc51e7d7,0xbc8619f0,0xbc670069,0xbbcb0591,0xbbc8bd3f,0xbb647163,0xba852448,0x3b0b611b,0x3b90c5cb,0x3b5e6dd7,0x3b1bfe33,0x3a7cd922,0x3a1f7f08,0x3a6cdd70,0x3abe6f87,0x3b4a1032,0x3b8143c6,0x3bb16255,0x3b915879, +0x3b77902b,0x3ae7d823,0xbaeab2bd,0xbad2c3aa,0x39def53d,0xb9e730de,0x3aded05e,0x3b55ff42,0x3acde4d8,0x3a5a09cd,0x3acc830b,0xbaa1aa9c,0xbb3b18bc,0xbba359bc,0xbb914ae7,0xbbc8acb4,0xbc27ef0d,0xbc504c4f,0xbc145bc0,0xbbcb3ce4,0xbba1a733,0xbba37cc4,0xbb678597,0xbaf74d81,0xb9003146, +0x3b1bed1b,0x3a2b69cd,0xb9a59ba4,0xba3e4fd0,0xba4b84b5,0xba737b24,0xbb198b85,0xba8ad4ec,0x38334a97,0x3ae2dae6,0xb88c0a83,0x3aa66192,0xbb24a61f,0xbb3f469b,0xbaf12b52,0xba0df516,0x39738bd7,0x3a82821c,0x3ad8881c,0x3ad9b25e,0x3bb1b502,0x39e8b83d,0x3b62b2e4,0xb9625fb4,0x38b0b8cf, +0xbb1bdf90,0xbbb964cf,0xbbb1bbe8,0xbb9a2219,0xbbe5e589,0xba230940,0xbb03d8d0,0xbaf8656b,0xbb180b8f,0xbb629214,0xbb8b6d1f,0xbba35cec,0xbb976f95,0xbb854f4f,0xbb8f3dd6,0xbba2a473,0xbbb3ba0f,0xbbc936c9,0xbbb5b9b2,0xbbabb4f0,0xbba8e47e,0xbb892266,0xbb41a924,0xbad1d678,0xbbb505bb, +0xbb7c4d53,0xbb8f4f36,0xbb4fc999,0xbb6cb6ac,0xbb251879,0xbb6b5371,0xbb705dd9,0xbba44c45,0xbb5c00d0,0xb95c2cab,0xbb771dd8,0xbac5b64c,0xbae6ef84,0xbba90192,0xba846d2a,0xbbaf42e7,0xba3a8f90,0xbae0b7ed,0xbad022a7,0xbab763cf,0xba9d5df6,0xba590f0e,0xba2e40a0,0xba5f75ff,0xba9ec95b, +0xbaa69ce3,0xba9dd18b,0xba9c3df0,0xbaaedbf9,0xba95501e,0xba86c4fd,0xba62e044,0xba5b53f7,0xba967f54,0xb905d8a8,0xbb905b6c,0xbc0e7a89,0xbc37bd85,0xbb778af5,0xbc047e37,0xbc36f376,0xbc401927,0xbc2c3821,0xbc1fb047,0xbc31a605,0xbc318a0f,0xbc20c662,0xbbf4514c,0xbb7aa84d,0xbc2f7632, +0xbc1bae25,0xbb81107c,0x3aaaf7af,0x3b76daef,0xbb8eec1d,0xb9e03d81,0xb92d793c,0xb9abebbd,0xb93e878c,0xb9894c2a,0xb9c045de,0xb9e87d49,0xb9f9e039,0xb9c676c9,0xba1301aa,0xba139f85,0xb9fb2c1b,0xba12cde3,0xba0de7e1,0xb9f5689f,0xba1754e6,0xb916164b,0xbacc9744,0x3bdf7a2f,0x3c21e774, +0x3c150be8,0x3b9eb4b9,0x3c1fa405,0x3c1cde68,0x3c262ee7,0x3c1e5ffe,0x3c0fc4d7,0x3c3908e2,0x3c334bdb,0x3c24f8cb,0x3c2eed23,0x3b88d75b,0x3c0cc43c,0x3c3c4b07,0x3c80d8d1,0x3ae96821,0xb846be1e,0x3a1d927f,0xb903450a,0x3a40cfe4,0x3a524f8e,0x38a62a38,0xb9ca7c22,0xb9db429f,0x39983121, +0xb9c8b9ea,0xb9eea6d9,0x37f03462,0xb98a8a65,0xb99e1ac7,0xb9f5c359,0xb993f581,0xba687dc9,0xbb288ec3,0x3c16efae,0x3bb9cdce,0x3bcce9d0,0x3c04ab8a,0x3b5dc3ea,0x3ba9dab1,0x3be02cc2,0x3c22e027,0x3bcca5d6,0x3bfb7389,0xba62a34f,0x3bada5b8,0x3bc9fcfc,0x3bbb09f1,0x3bf59ae2,0x3baa46f6, +0x3c30693a,0xbb84e7d4,0xba5c0c7e,0x3a902c56,0xba02b7a8,0x3aaf6935,0x3ad6503c,0x3a06b612,0x38568a88,0xb98fcf95,0x3a3a7112,0xba54ea0d,0xba4e21d6,0xb90de06f,0xba375eaf,0xb9b7bf9b,0xba500346,0x3970dfdc,0xbb318281,0x3b3c329e,0x3c4825d1,0x3bc721a7,0x3bd9e043,0x3bdb3160,0x3b8e7551, +0x3ba01b24,0x3bc737b9,0x3afea2ec,0x3c0fc710,0x3b47d035,0x3bef2d25,0x3ad57975,0x3b42c10e,0x3b7bcded,0x3becb463,0x3abaaaff,0x3c41ce05,0x3b8370d5,0xbab5b3ef,0x3b14eef0,0xbaef4f08,0x3b1acca4,0x3b5522aa,0x3a9a9426,0xb958af9a,0xba13e5d8,0x3b16c60e,0xba2ae806,0xba1138b9,0x3a5e0035, +0xb7db3101,0xb91a409b,0xba37b639,0xba91eba4,0xbb4782d6,0x38ab71e7,0x3bb98e64,0x3a114164,0x3be2601d,0x387b311a,0x3b89f71d,0xba8f1270,0x3c0cdca2,0x3bd71763,0x3b8c6dd4,0x3b1a4910,0x3b7a6428,0x3a8ce5db,0x3b9db0b0,0x3b30c3e4,0x3b8e52de,0x3b05ebcb,0x3b317a1a,0xb91d606c,0xbba9cd59, +0x3b1ff77e,0xbb2a6c01,0x3b379be6,0x3b5f9d64,0x3b039a29,0x3aaee82d,0x3a5aa6f9,0x3a9f3102,0xbaa25954,0xbae32723,0xba073f9f,0xba26db1b,0xb9bb7649,0xba765615,0xb96089ab,0xbb1e206e,0xb8fb92be,0x3c6fedc7,0x3b6f7a6a,0x3c122f2b,0x3b64dc5c,0x3adc76b5,0x3960f06a,0x3b15649b,0x3bb817e4, +0x3b54ac01,0x3bb3c95e,0x3b2a16a7,0xb931a383,0x3a159421,0x3a17c3be,0x3b11c003,0x3c046fa2,0x3beebe31,0x3c758687,0x3ab66018,0x3bc6e9a5,0x3beac83d,0x3bcb9f9b,0x3bbe3f18,0x3b8a4e78,0xbc24774d,0xbc82c277,0xbc7dc95d,0xbc24a67a,0xbb5f0fe2,0x3ac0b66c,0x3a536632,0x3a877517,0xbb88fe40, +0xbb12c802,0xbb015864,0x35fa0f6f,0x3b845fa5,0xbb0b234d,0x3bb85abf,0x3b123cf6,0x3bcf4dba,0x3c08d05f,0x3aecfe41,0xb946c8b1,0x3a46c14e,0x3c186189,0x3c50a3fb,0x3bc6612c,0x3b4d2a58,0x3a0f20de,0xbb46ca60,0xbbc62011,0x3c822e01,0xbcd63a54,0xbc59a7fd,0xbb8e3e12,0xbb8dc9d1,0xbafb2d07, +0xbb491dc3,0xbbe86df9,0x3b844b16,0x3bdcb381,0xbb8bb95b,0x3b873cef,0x3bc14673,0x3bf8d747,0x3b96075f,0x3b4005e9,0x3b02b6c6,0x3bbb4779,0x3b0d74ac,0x3bae98cc,0x3c053d78,0x3baf0789,0x3b899c0a,0x3bfdb166,0x3baf8b53,0x3b1c317d,0x3b40ffb6,0x3b8bf77f,0x3bf43720,0x3b750b7d,0x3a8c664b, +0xb9ad8c6c,0x3b96ea9a,0x3ba4f049,0xbb334807,0x3cad8ea6,0x379edf16,0xbc8ca9af,0xbb6920dc,0x3a8e6540,0x3b946de5,0x3b80eed0,0x3b23fee4,0x396430b5,0x3a957411,0x3a4ee538,0xbb96f5e3,0xba817730,0xba9d520c,0xbb61ab87,0xbb81a8f9,0xba94e645,0x3b01a674,0x3b2e0ec7,0xba534c52,0xba2f7ef5, +0x3b250bb2,0x39816c1b,0x3b1c7a8f,0x3b157adf,0x3b1a465c,0x3b4f1c9b,0x3b3ff186,0x3ac82dae,0x3b605ea3,0x3a957a4d,0x3b1d9f42,0x3a38a0b4,0x3b12dbab,0x3bb12ae6,0x3ad44ac3,0x3b89cc9b,0x3abf8b3c,0x3b575230,0x3b843cef,0x3be62db8,0x3c47c3cc,0x3b656d01,0x3a938dfb,0xba4e2de8,0xbb0fae48, +0xba55f803,0xbaef8ec3,0xb8e1f2ed,0xb9855aca,0xbb87691d,0xbb81a527,0xbb1e1200,0x3ac4dd3f,0x3a8b6d77,0xbb3078cd,0xb9c004aa,0x3b18f490,0xba76c215,0xbab145f3,0x3b2903cb,0x38e176e2,0x3b3f4de3,0x3a7cc657,0x3abbfad4,0x3b1ddeba,0x397fc8f2,0x3aed752a,0x3a1db220,0x3b60878f,0x3b037436, +0x3b691a9f,0xbb479611,0x3b90f890,0x3b84de10,0x3b9a30e2,0x3bd8bbf5,0x3bc51865,0x3bba3c71,0x3b53fbfd,0xbbad898c,0x38936367,0x35aa7f83,0xbbac0350,0x3a6fad7e,0x3b299bac,0x3b85e4e7,0x3b1cb3d8,0x3b29b4fc,0x3b255407,0x3adc41da,0x3a2948a6,0x3b28130d,0x3b0127aa,0x3a9bb365,0x3b41558f, +0x3b87c80f,0x3b52f04b,0x3abce278,0x3a7bcdc9,0xb8c6d068,0x3a84c421,0xb9a0b356,0xba85f67c,0xbb5456bc,0xbb2ec505,0xbaa5a733,0xbab8d3a5,0x3b682a95,0x3b971af8,0x3b9fd31f,0xbaeec609,0x3b60463f,0xbad99f33,0xba77520c,0xbb13ca31,0xb973c912,0xbbabee65,0xbba33664,0x3ace6404,0x3a936908, +0x3a86b12d,0x3ad77129,0x3b6b8996,0x3b8b84f7,0x3b8586e5,0x3b0f6c56,0x39a14ced,0x393a4e6e,0x3be35df6,0x3ba87fbb,0xba86957e,0x3b07e62b,0x3aac0c65,0x3b706959,0xb8d6309c,0xbb29636c,0xba9c7a50,0xbac49a0e,0xbb1f3e9d,0xbb87fbf1,0xbc2390d0,0xbc348bea,0xbc7db406,0xbc5b1042,0xbbc80bf0, +0xbc09b9c4,0xbc0c8291,0xbbf2aeda,0xbc0a322d,0xbc424240,0xbc69ef8b,0xbc71d408,0xbbf6865e,0xbb90b3bb,0xbb9596b0,0xbb42e951,0xba63555e,0x3a6e09c9,0x3b2c1f33,0x3b225e11,0x3b5a7c05,0x3ac82faa,0x3ab70fa9,0x3b7d7e52,0x3b675a16,0x3adbb71c,0x3b76f49c,0x3adf91ad,0x3ab0294b,0x3b5fbeaa, +0xbb59dded,0xbb3ded66,0xbb9ccca2,0xbbbf1c66,0xbbebbd48,0xbc02e0fd,0xbb8bb9c7,0xbbadbe13,0xbb4da353,0xbbe5b7ce,0xbbfdb665,0xbc3c0c8f,0xbc649cfb,0xbc378457,0xbc26e9d8,0xbc0392fe,0xbbce50c5,0xbbb30ad8,0xbb644a86,0xbb365037,0xbb205129,0xbafff83b,0xbaa6116e,0xb98f830d,0x3ace7ad4, +0x3b314df8,0x3b6e6f4f,0x3b03efa8,0x3a088ae3,0x3993a3e5,0x3b48f0a2,0x3b1668c2,0x3a23d648,0x3afbf978,0x3a7e1bd3,0x3b0ce4a8,0x3b3bc8ef,0x3a7a5482,0xb9a11d75,0xbb237644,0xbb6e0246,0xbb893ba7,0xbbb28f60,0xbbb4d3d7,0xbb891175,0xbc0964aa,0xbb69c753,0xbc322560,0xbc306c9f,0xbc09b95f, +0xbc02bf68,0xbbbc2ef2,0xbb83000f,0xbacb689f,0xbb15d1bb,0xbb3d8eb3,0xbb1ae2cf,0xbb31c17e,0xbb000a66,0xbae8264e,0xbac61ed2,0xb9d48e87,0x3991e5d0,0xb98f2d35,0xbb10eb44,0xbab518fd,0xba2eceac,0xba741b54,0xba5db0c5,0x39d7d266,0x3b0288db,0x3b6d4998,0x3b1c7dc2,0x39335873,0x3bbb1666, +0xba0fbad3,0x3ae23b09,0xbb0e1e5d,0xbb231f4e,0xbb118ac6,0xbba6a23a,0xbbdf6bd2,0x3a243ffe,0xbb8aa15f,0xbb904951,0xbbb86a55,0xbbd3b82c,0xbc0fad72,0xbc2a0177,0xbc448bb4,0xbc387b1a,0xbc1ee3a0,0xbc15c8bc,0xbc0971c9,0xbbfb2950,0xbbd5fee5,0xbbcdf8cd,0xbbcbe858,0xbbdaab1a,0xbbc47486, +0xbbac87e8,0xbb9a5a74,0xba8eb1bd,0xba977894,0x39d8ce7d,0x39b7c6f9,0x3a374e6a,0x3a9eb2dc,0x3ac0de1c,0x3acc24c2,0x3a1436c9,0x3a69dd44,0xbb2f794c,0x3b2c1796,0x3a2f0110,0xb7948840,0x3b018360,0xbb04e20b,0xba8668e3,0xbba4f37b,0xbb97a3ea,0xbb977edc,0xbb8e564a,0xbb87e78c,0xbb6d2044, +0xbb67fdce,0xbb5f603f,0xbb77a33f,0xbb7a2510,0xbb718bde,0xbb72356b,0xbb743a95,0xbb7a144d,0xbb75c9e9,0xbb6cac79,0xbb6cb600,0xbb754f61,0xbb98e47e,0xbaa2205f,0x3a827b42,0xb91e398b,0xb9d902d0,0x3b08d73a,0x3a8b8fce,0x3ac15290,0x3a87318e,0x3a81bd4b,0x3b00ac60,0x3ae34634,0x3a10c148, +0x399f25a0,0xbad5b345,0xba3b8d22,0x3a809f3d,0xbbb60062,0x3945154d,0xbb8648fd,0x3b349778,0x3a407df8,0x39db02c1,0x38abfcad,0xb9876e87,0xb9702a5c,0x397c5ec3,0x3959445b,0x39c2d313,0x3a67e350,0x3a0a9842,0x3a170d2c,0x3a3501ae,0x3a586e77,0x3a52f593,0x3a36b1df,0x3a1cfc42,0x39f6996c, +0x3a9cebf6,0xbb9a460a,0xbba9440c,0x3a884d99,0xbb856ea8,0xbbb4d873,0xb7b80c4f,0xb88de02c,0x39710d84,0xb8df56bb,0xbabd65c8,0xbaf0a3d6,0xbb1c37fa,0xbbca4d09,0xbb809c27,0xb92f7540,0xbbc42aa9,0xbbc4020d,0xba9e78f4,0x3ade4a72,0x3886b61f,0xba9ecf3d,0xbb3039e6,0xbb334be5,0xba49cb41, +0xba8badd0,0xb99a6eb3,0x3a8db9e4,0xb949f9a6,0xba150605,0xba17945e,0xb87ef1c2,0x39bd39a5,0x39c6f236,0xb8b337cd,0x39ed879a,0x3acfadfe,0xbb5e670e,0xbaaeca19,0x38a022e0,0xbb8d26bf,0xbb1366b7,0xb95dcaf2,0x384f8425,0xba940516,0xba8be34d,0xbac4634d,0x3b2aa72d,0xba997cac,0xbae81521, +0xbb010280,0xbb201e1a,0xbaeb122b,0xbbf4de10,0x3a5a2b9f,0x3afc9c3a,0xba5feb78,0xbb36c0a0,0xbbb9b50c,0xbbd8b2b0,0xbb1685ed,0xbb3c670d,0xbac5fe6e,0x3aa79491,0xba99e418,0xba9ca6d9,0xba568902,0x399d0c4a,0x36de75a1,0x387d05aa,0xba9dbbe3,0x3a4667d4,0xbafd0e58,0xbbb356d7,0xba771042, +0xbaa79346,0xbb292680,0xb98589b5,0xbab5531d,0x3b3f355e,0x3b96b3a9,0xbb40dbc2,0x3b22d040,0xbac6eb65,0xba0d0cdb,0xba574f0b,0xbae62a39,0xbb4a6aab,0xbad52292,0xbbee77e0,0xba60035e,0x3b849212,0xba66c80a,0xbb8dd68a,0xbc133b91,0xbc24e9d2,0xbb6e5220,0xbb9d9e8c,0xbb26494d,0x3b3c3e09, +0xbb2b373c,0xbb4843a6,0xbb89319c,0xbaf38897,0xba984888,0xba6372b9,0xbacc2644,0x39367b3c,0xba6c5e32,0xbaa19a48,0x3b3bbf81,0x3b3f1976,0x3b05f591,0xb979f543,0x3ae1446c,0x3b51aca3,0x3bd719d4,0x3b587e60,0x3bb84e05,0x3aff9ab0,0x3ab965ba,0xba97a5e9,0x3a0f76fa,0xb9a0b8f6,0xba53aa9a, +0xbb5bc2b8,0xbb312f59,0x3b94354f,0xbb1da60d,0xbba3cd9b,0xbc585841,0xbc68ab77,0xbbbcafb3,0xbbd0abae,0xbb340af2,0x3b4bab36,0xbb072665,0xbb33eef3,0xbb1f434a,0xba90f21b,0xba4e4cd7,0xbacd09f8,0xbb4baa68,0xba50fca0,0xb9dc6e46,0xbb9d4f14,0x3b54be03,0x3b7dd095,0x3b4390f4,0x3b618c93, +0x3a43dc1e,0x3bce6929,0x3bd8b487,0x3b83e2f1,0x3b92ef28,0x3b8a2097,0x39c3804f,0x3ac43d40,0x3a623490,0x3a7de195,0xbb3121d1,0xbc15f1f9,0xbb2f12e7,0x3bf11f85,0x3b924f03,0x3beb48ac,0x3bc19e7a,0x3b6ef45b,0xba97b5fa,0xbb55bef8,0xbbb8bab8,0xbb8d9076,0x3b0ffce7,0x3c0de206,0x3c8270e6, +0x3c0d1c22,0x3bbdc581,0x3c397820,0x3bcec064,0x3b5996d7,0xbb24166c,0xbb814930,0x3af0edb8,0x3ac6c5a1,0x3b642fcc,0x3b139e93,0x3c134ed1,0x3a696b4e,0x3a2b52d1,0x3b55accf,0x3c1d6f99,0x3c3443ef,0x3ae31788,0x3b0f9b62,0xbbadd167,0xbc518b79,0xbc65dde8,0x3b9594db,0xbc9b75f6,0x3b9c4434, +0xb9900503,0xbba07246,0xbc29dbbc,0xbc38883b,0xbc2e5a19,0xb9da53a5,0x3b96cffa,0xbb0f3ecf,0x399f7e8e,0x3abe6d28,0x3b815ca7,0x3b5b229a,0x3b30ed2b,0xba25e573,0xba9ac85b,0x3b1f5dad,0xba1d2911,0x3a1f178d,0x3ac85bf8,0x3adf9a3b,0x3be2f800,0x3bd4aac4,0x3b669213,0x3b85de6b,0x3b8bcf0b, +0x3be33b6d,0x3b41467b,0x3b14eada,0x3a7ed8ad,0x3b37cde0,0x3b846c22,0xbb9be149,0x3c4346e1,0xbbdbb401,0xbc8133f0,0x3aa6545d,0x399a718c,0xbb49b6cc,0xbc50c2b3,0xbc64001b,0xbc4c68d5,0x3b9ecc4e,0x3c443268,0x3b3a2b11,0x3bbb26ba,0x3a99fcb5,0xbb1f8f78,0xbaeaa029,0xba8bbf7b,0x3b37dcc2, +0x3a816f9f,0x3ad0d6db,0xbb01a8ce,0xbb291771,0xba88adf9,0xbb5a9eb1,0x3aa5d0d0,0x3a40a5a3,0x3b8bdd64,0x3b030a8d,0x3b80f7ec,0x3b84a716,0x3abfcf21,0x3af20bd6,0x3a11cd83,0x3b318c21,0x3b92d84d,0xba7381f7,0xba4f0a65,0xbaeb50f7,0x3b0772a9,0x3a554d1b,0xbb2554c0,0xbc2bb292,0xbc5c33fb, +0xbc4cd70f,0xbbea2526,0xba4e5178,0x3b0d71c1,0xbb970548,0xba8edf6f,0xbb931a5a,0xbbda285d,0xbbda52a9,0xbb6db425,0x3b5c3fd1,0x3999ad9c,0x3b088425,0xbae2a5d3,0xbb842389,0xbb0018fb,0xbae470e0,0xbada8f9a,0x3a00ed05,0x3b160c19,0x3b04f9ba,0x3ac07749,0x39a5a1c1,0x3b14f23a,0x3ab01b61, +0xba2dca1d,0x3b048d61,0x3b6bcc85,0x38c21352,0xb9a24624,0x3b15a031,0x3a26a23d,0xbc05001b,0xbc5045e6,0xbc55982d,0xbc4c35cd,0xbc1c8b03,0xbb2233c1,0xbc16e0da,0xbc3073ce,0xbc66d564,0xbc244c71,0xbbb4a529,0xbab47df7,0xbb36dbe3,0xbaf81401,0x3a8ce14b,0x3aa356c8,0x3b3eadbe,0x3a972623, +0x3a133504,0x3a2e56d4,0x37bfb893,0x3b1f44fc,0x3b1720a0,0x3a2a5321,0x3aad9cce,0x3a38a722,0x39f8e1d4,0xba6e6421,0xbae04962,0xbb4173ce,0xbb5f0837,0xbb60467c,0xbb72d0c8,0x39404e8a,0xbc9780b5,0xbc8db818,0xbc815de7,0xbc87efec,0xbc4f0150,0xbc617657,0xbc46ef2d,0xbc04266a,0xbc48427a, +0xbc644e27,0xbc3fbe2c,0xbc34d388,0xbbd1d4d5,0xbbd9f1aa,0xb9d7aea7,0x3b0a18c5,0x3b8798bc,0xb9ceccd1,0xba386351,0x39afb4d5,0xbb29284e,0xba9a3e10,0x39ccc1f0,0x3a8df0bd,0x3a6aa59a,0x3a9da61c,0xbb0a984f,0xbb0ef5be,0xbae77a27,0xbb229930,0xbb7e1e72,0xbc103e89,0xbc3a04c1,0xbc74ac72, +0xbcb66edc,0xbc4518db,0xbc62e55d,0xbc877aea,0xbc5ec372,0xbc5c794b,0xbc3bc38b,0xbc60866a,0xbc556589,0xbc3d76b9,0xbbe1bcc0,0xbb86dc37,0xbb676e93,0xbb5302c0,0xbb8069e4,0xbb77e8f4,0xbaf25439,0xba25024c,0x3b66692d,0x3b155c0f,0x3b331bf8,0x3b503f6e,0x3b49c919,0x3b61144a,0xbafa1206, +0x3a889011,0x39d54263,0x39f262d5,0xbade66b7,0xbb93538c,0xbbadeba6,0xbc0353a7,0xbc0e3136,0xbc1889f7,0xbc15e567,0xbc00bca7,0xbbee1314,0xbc567bd4,0xbc8c0906,0xbc861b0b,0xbc4b0e9f,0xbc422a2a,0xbc18a73f,0xbc0f9f88,0xbbdebf93,0xbbaa9a34,0xbb5de1e4,0xbb2404c6,0xbb35b6f3,0xbad04d31, +0xb9f0e84e,0x39a6ad0f,0x3b00b23a,0x3b6dc99e,0x3bbeb3c1,0x3b63da71,0x3b3adb61,0x3accb643,0xba6c8310,0xb96cab25,0xba2346d3,0xba07a4a6,0x3a8ad5de,0x3b171668,0xb9c7fa87,0xbaa96586,0xba8de42a,0xbb746232,0xbba6903b,0xbbf274bf,0xbbfd6131,0xbc18dd95,0xbc450581,0xbc642d66,0xbc4e48f0, +0xbc4fd9b7,0xbc22e243,0xbc228575,0xbc0b534a,0xbbcf6a4b,0xbb8c568a,0xbb20d52f,0xbb5c62d8,0xbb752186,0xbb48b718,0xbab32f3d,0x39ed8908,0x3a99f22f,0x3af588c6,0x3b2de050,0x3b6d2b55,0x3af04e5e,0x3b340bb1,0xbac957b6,0xbb408a9b,0xbab46369,0xbabe852c,0xb9abc95b,0x396aa3d9,0x3a5a5b8b, +0x3abb6ac5,0x3a7edcea,0xbb122cc4,0xba3d484b,0xbb37f7bf,0xbb280165,0xbbd1f1da,0xbc0dabb3,0xbc3b8b9c,0xbc2c75d1,0xbb67014d,0xbb4523ba,0xbb95c36a,0xbb962d2c,0xbb9edf9d,0xbbdb3c4b,0xbbf93b93,0xbc067421,0xbbc6ee7b,0xbb84039c,0xbb4bf7ca,0xbb31aca2,0xbb2cbe34,0xbb0e543b,0xbb292b36, +0xbb390d4c,0xbb393d51,0xbb33e1b1,0xbaf24670,0xbadaf431,0xbb8244f6,0xbb4b6fbd,0xbb67355f,0xbb3d383e,0xbb32c31f,0xbb0ea639,0xbb5dba45,0xbb910b34,0xbb7ada1b,0xbb7a0001,0xbb0778d8,0xbb690da9,0xbb745a67,0xbad8ce85,0xbaf2d98f,0xbb84adb7,0xbbd7fcd5,0xbb31b8b8,0xbb2fdec4,0xbb2885a7, +0xbb13586c,0xbaf41d84,0xbaaa9140,0xbaae7a47,0xbabb640a,0xbae23e70,0xbacf3584,0xba9ba923,0xba4873ce,0xb9c5c44e,0xb9ce5e08,0xb9c14408,0xb9b2dc81,0xb9f17446,0xba45bd8d,0xb9736212,0xbb9448bc,0xbbca0c69,0xbb8153d0,0xbb8f8c00,0xbbc12703,0xbb541058,0xbb53077f,0xbb47b068,0xbb47d3b1, +0xbb771316,0xbb8c71f7,0xbb8b3b28,0xbbc9cc42,0xbba77da1,0xbba506a2,0xbbef1120,0xbb53e0eb,0x3bfbd8bd,0x3c129f2e,0x3b8703d9,0x3b9139c4,0x3b974035,0x3b898df0,0x3ba5a190,0x3bafa109,0x3bb29bc4,0x3bac7dca,0x3bac6df1,0x3bad6287,0x3b9b694b,0x3b98836f,0x3b9c7dc2,0x3b9fdf4d,0x3ba968db, +0x3bacd142,0x3ba9fd6b,0x3b9f5ceb,0x3b9abfde,0x3bfc421d,0x3bc2fb21,0xbb2bf9d3,0x3c042036,0x3bda9fd0,0xbaf2584c,0xbaa695ba,0xba9c629e,0xba3277ca,0xb99a1795,0xb853c9e9,0x3a35b8f9,0x3bd3a17b,0x3c08ea78,0xbaa40e12,0x3bb72508,0x3b3c9a21,0x3bf1b7e1,0x3bb72ee1,0x3bbb6914,0x3b899bee, +0x3bf50435,0x3c0face1,0x3c118b98,0x3c07212b,0x3c09c21f,0x3c0b8ecb,0x3be00414,0x3bd436f2,0x3bee2ccf,0x3beb6be9,0x3bfac438,0x3bf0f5ec,0x3bde5958,0x3bc18f03,0x3bb2295e,0x3ba59008,0x3bb0372e,0x3b400e53,0x3bd8425e,0x3be9c48b,0x3b3e6e8b,0x3bf78803,0x3bf1bb5b,0x3bc4e092,0x3bccf151, +0x3b906634,0x3b7ec53f,0x3ba2bea1,0x3bb85784,0x3baa4c6c,0x3b93f64c,0x3c0a3fa8,0x3bde7164,0x3b86516d,0x3bb32d8e,0x3b127a80,0x3c04ab7c,0x3c27c792,0x3c2fbee3,0x3c2aa4d6,0x3c1d9ae4,0x3c2c066b,0x3bd78250,0x3bcc35f4,0x3be88ad0,0x3c02990f,0x3c11754a,0x3c1cc7e3,0x3c06b472,0x3bd5f746, +0x3bc50fef,0x3bd2e174,0x3ba49595,0x3be67058,0x3bb8340a,0x3b872067,0x3bdeacd0,0x3bc8e0ea,0x3c10fe84,0x3c0e7415,0x3bc1e0fa,0x3bd2e0e0,0x3b8182d5,0x3bb07c9c,0x3bb0118d,0x3ba47cde,0x3bf67318,0x3bd04b86,0x3bc11853,0x3bb31a9a,0x3b9dd225,0x38408337,0x3c14d03d,0x3c6389a2,0x3c6a7ada, +0x3c64eb18,0x3c5403d8,0x3c6da592,0x3c0edbd0,0x3bf2f357,0x3c21f069,0x3c30859d,0x3c3527b1,0x3c2facac,0x3c094fb9,0x3bc110a6,0x3b9b9eec,0x3bb29a69,0x3b81af61,0x3b9a8bf2,0x3b365cf9,0x3b87ac93,0x3b262e08,0x3c0db6c4,0x3be62aab,0x3b8ef2ac,0x3b8607f3,0x3b85b7c1,0x3b3c2da7,0x3b8e165b, +0x3b4d5e8f,0x3ba380a1,0x3b70fb94,0x3bf60158,0x3bcd2c6d,0x3ae9008f,0x3b8ebcce,0xbb400e0c,0x3c10549d,0x3c58d1b0,0x3c7fdd56,0x3c800007,0x3c66db0b,0x3c6af231,0x3bedf327,0x3bbc81ad,0x3bf6c290,0x3c288dda,0x3c4f870b,0x3c5be890,0x3c312e4e,0x3bee9d70,0x3b779c9b,0x3bb51473,0x3b765547, +0x3bf58092,0x3b92c63d,0x3b451f8e,0x3a8f5725,0x3b921521,0x3bdcbe25,0x3b69e318,0x3b96bf20,0x3b594960,0x397eb339,0x3b2a5d3d,0x3b3bcf14,0x3b4bd054,0x3bd0d299,0x3bf74eea,0x3c9cc980,0x3c4da708,0x3c65b814,0x3c84e56d,0x3cb180dc,0x3cc5d548,0x3c9c74d5,0x3c0d95c9,0xba3eb88f,0xbaf21445, +0xbb1d44c7,0x3b0963eb,0x3c317377,0x3bf5da6d,0x3bd8d1fe,0x3b87b1d3,0x3bdd5a6a,0x3c17b7e4,0x3c1823b7,0x3bc607f3,0x3b449d12,0x3b965e94,0x3b3d9e66,0x3b97adb6,0x3c0d6494,0x3ac93952,0x39cf44b6,0x3b8b1c82,0x3c3a5873,0x3c445a9e,0x3b7fb445,0x3b64caac,0x3aa83d2f,0xbbe00061,0x3b396d64, +0x3c192443,0xbc7a0230,0xba82a822,0x3b4d5988,0xbb8acd47,0x3b2545e3,0x3af6c959,0xbaf7cd06,0x3c07e006,0x3c33ce0f,0x3ae05fec,0x3b6197b8,0x3b923102,0x3c1b9c54,0x3c3b9dcd,0x3c6c0f26,0x3c9fe46c,0x3c6e5d60,0x3c296bbb,0x3bd0da2b,0x3b2c0262,0x3b952b02,0x3b6d8ac6,0x3c0acde0,0x3be1acef, +0x3b3bd957,0x3ba08468,0x3bbe8976,0x3bf4704b,0x3b458211,0x3adcc7f2,0x3b67519f,0x3b9c0c61,0x3bbd4507,0x3aeefc6b,0x3c7ae87d,0xbb0af1a3,0xbc33587e,0x3b77cb0e,0x3c349956,0x3c8a0181,0x3c989062,0x3c92563c,0x3c79a967,0x3c4e8645,0x3c1c7ca9,0x3bb3d2aa,0x3c0e444a,0x3c32fbaf,0x3c434286, +0x3c113025,0x3c04b93b,0x3c185a5b,0x3bbf3952,0x3b0912ac,0x3b5b5eaf,0x3b36ab43,0x3a0b52c4,0x3a95f32b,0x3b2fbc47,0x3b5d5a21,0x3b5bf2ec,0x3b6ce35c,0x3b1b1d58,0x3b83965b,0x3aea9987,0x3b3b7c56,0x3ab8674b,0x3ba07e6e,0x3bd3d60b,0x3b46a922,0x3ab6d2ff,0x3aced891,0x3bb6509e,0x3c3ae9a0, +0x3c973784,0x3d0858bd,0x3cc9c8ad,0x3cc1162e,0x3c8057b7,0x3c434e56,0x3c276f2f,0x3c186585,0x3c560d9a,0x3c54f0e5,0x3c2a1f17,0x3bc7c8e2,0x3b841a6c,0x3bd8b515,0x3b4cb394,0x3abcfa73,0x3a87359c,0x3b108332,0xba4203bc,0xb9889851,0x3a19fc57,0x3a6ad28e,0x3b61d3cc,0x3b08360e,0x3b15270f, +0x3b212302,0x3af2c5c1,0x3b2ccbcd,0xb9cbeb23,0x3b90b65c,0x3b8738f4,0x3b0da0ca,0x3a35558d,0x3af830be,0x3bd877b2,0x3c8c9b44,0x3cbc5541,0x3d022d33,0x3cd6ad33,0x3ca50a54,0x3ba167c9,0x3bbcf0b0,0x3b45cbc1,0x3ab7111f,0x3aaf2d3c,0x3b3bde9e,0x3b653358,0x3bc34985,0x3bfe90c6,0x3c28dddf, +0x3c09de39,0x3bc6af8c,0x3b946e31,0x3acd5394,0x3aaa8b4a,0x3b08ec64,0x3b71a379,0x3b2a320a,0x3a99f5f9,0x3adcf6a2,0x3a88b0a1,0x3a778065,0x3919cdc1,0xb9db69e3,0xbb26e8b3,0xbb512e59,0xba69f46b,0xbb739c30,0x3adeec0e,0xbb0e2920,0x3b866457,0x3c876b08,0x3c9555cc,0x3c912cec,0x3c8f5a85, +0x3c80cc80,0x3c4771ec,0x3b894ca1,0x3b74d417,0x3c4fa5e9,0x3c06aaf8,0x3c1742a5,0x3c06de78,0x3bbfe868,0x3b81247f,0x3b16596c,0xb8f78e09,0x393f1dd8,0x3b614a7c,0x3b872717,0x3b55a2ee,0xb9735144,0x3abad75b,0x3a243650,0x3ad5dc6f,0xb7e9f16c,0xba835e35,0x3a03216a,0xb9954300,0xbab07b50, +0xbba5666d,0xbc15228a,0xbc68769f,0xbc69546e,0xbc23454f,0xbc28eac9,0x3ac26faf,0x3b1c1dfa,0x3aac797e,0x38f48255,0xbb80b3d6,0xbb9ce84d,0xb9e1ccb4,0xbb4adb12,0xbb8544c4,0xbb5a90f7,0xba5b9ce3,0x3b0acf4a,0x3b648cf8,0x3bc4ccd7,0x3bd2546b,0x3bcdee08,0x3b70acdb,0x3b1fbb2d,0x3b25d97b, +0x3b398e5c,0x3b4af472,0x3b896de0,0x3b436991,0x3aee3567,0x3ab5a331,0xbb8d0af8,0xbba19b53,0xbba1875a,0xbbcef65c,0xbbde0908,0xbbff9a99,0xbbd8854c,0xbb9cbb90,0xba0c20e0,0xbb0dde6a,0xbc019930,0xbc108182,0xbbbff001,0xbbc4b360,0xbbe0b7c1,0xbb86f8fb,0xbabaf58c,0x3b2d294b,0x3a80f4b2, +0x3a758e05,0x3a410f36,0x3b27bef0,0x3b67e1d1,0x3b7fb2b0,0x3bb5120a,0x3bbe7ec2,0x3bd0264e,0x3ba03c64,0x3b7bad69,0x3b8acd38,0x3b88ca52,0x3b1be5ee,0x3afe5efd,0x3ad5fe24,0x3a978d0e,0x3abc60b6,0x3a4c4035,0xbaecfd9e,0xbb22a127,0xbb5909b0,0xbb89976d,0xbba2e4f2,0xbbbdcd1c,0xbbd07255, +0xbbdd39d2,0xbc1135a2,0xbbfec2e0,0xbbfef70e,0xbbf92fb3,0xbba9746b,0xbb459c9a,0xb9db49b5,0x3abc11b0,0x3b7fba9a,0x3b81d141,0x3b798762,0x3b82bab7,0x3b17fa3c,0x3b09dcbd,0x3aea158d,0x3af03ebe,0x3b235207,0x3b496f9e,0x3b494682,0x3b5e71b5,0x3b404080,0x3b310281,0x3a7cdfa5,0x3ab38ba1, +0x3ac107e1,0x3b28fe03,0x3b8a5fba,0x3aea3f5a,0x3b1867fa,0x3b248988,0xb92b9eeb,0x388358b2,0xbacebabd,0xbad4f356,0xbbb36f50,0xbbbbb3bc,0xbbd1c41d,0xbb5addd3,0xbad64f5c,0xba57d347,0xba3ca857,0xba5d74bc,0xba949eb2,0xba5bb541,0xb9361ce7,0xbab2b326,0xbac300c3,0xbaea7e9b,0xbab82d87, +0xba99286d,0xba70c31f,0xba8a5e31,0xbab51a5b,0xbb068006,0xbb1e725a,0xbb54966c,0xbaf7732f,0xba192690,0x3a516bcd,0x3af274ec,0x3b259cb3,0x3b0d0b77,0x3b278d38,0x3b178510,0x3b309f58,0x3a2c79bb,0x3ab5c1b5,0xb9ec6e49,0xb9e06dc4,0x39f80981,0xb970f01f,0xbae552ae,0x3a813c93,0x3b1144a9, +0x397ae9e3,0x3873ff9b,0x3a175119,0x3a95e6ad,0x3ad0875c,0x3afb9bfe,0x3b19353c,0x3b1f0a16,0x3b1c8bd2,0x3b11ece9,0x3b0285e5,0x3ad9f040,0x3abef9f6,0x3ab7b0f1,0x3abfb72c,0x3adeac12,0x3afb4933,0x3aefe80b,0x3abce251,0x3b4ec9e1,0x3b05b975,0xbb36385a,0x3b742e90,0x3b3cac6d,0xbb181950, +0xbb263135,0xbb1e13a6,0xbb10ba16,0xbb0e5016,0xbb022f02,0xbaf4d71d,0x3acc8c08,0x3b0fe9d5,0xbb781c55,0x3936776a,0x3b396ca8,0xbbb3e2a0,0xbbd97b61,0xbbaef093,0xbb8154b1,0xbb891f90,0xbb8a6ee3,0xbba25f0b,0xbba7ccf1,0xbb9cc750,0xbb9b5d44,0xbb98022d,0xbb871441,0xbb97e63e,0xbb9acdcf, +0xbb9b7029,0xbb941f61,0xbb960cef,0xbb912bfa,0xbb93c9f0,0xbb824077,0xbb997915,0xbb6d219f,0x37e61e27,0x3c24c67a,0xbbac08f0,0xba1bce7d,0x3c1f0637,0x3c1df3c6,0x3c18c6ee,0x3c0119e5,0x3c103473,0x3c048ea0,0x3bd44199,0x38bc4fa2,0xbbb7db54,0x3c0334ef,0x3ab17db2,0x3be90e36,0xbb99d91b, +0xbb86eff2,0xbba9e147,0xbbb0e21c,0xbc09fa7f,0xbc176ce1,0xbc043eee,0xbc034831,0xbbfc88b4,0xbbc48b1f,0xbbf3f279,0xbc0516b2,0xbc0a3153,0xbbf9c21a,0xbbeae6ce,0xbbd1062a,0xbbc2170b,0xbbb1c5aa,0xbbc26245,0x3aa29ad5,0xba751f13,0x3ae47426,0xbabecc10,0xbb88dd1e,0x3b2d8efe,0x39e5f84c, +0x3b210732,0x397fea81,0x3a5d6427,0xbb1f4ec0,0x3a5923b7,0x3a378d76,0xba00397b,0x39f0a2e1,0xb9904822,0xbb28b6c9,0xbbe803ba,0xbb6f70f4,0xbbb7a30b,0xbbbef613,0xbc3416c7,0xbc49eba2,0xbc1d3cff,0xbc220b02,0xbc148df0,0xbbd0650a,0xbc1e09d5,0xbc2a1e87,0xbc206430,0xbc17c1e9,0xbc0da1d3, +0xbc058388,0xbbe50f77,0xbbdfe28c,0xbb824dc1,0x3a68e7db,0xb9cc6b6f,0xbb3c6e8d,0xba3bb8ce,0x3a0afb07,0xb9f95f7f,0x3b65cdba,0xbaa4bb2b,0xb9a40304,0xb95232ba,0x3a260b56,0xbab4912f,0xba993903,0xba887bdf,0x38c2638a,0xbbb86eb4,0x3a8759ad,0x39b4bf39,0xbb68c864,0xbb9dd73a,0xbbd5eb93, +0xbc64cc88,0xbc8dce89,0xbc5a748d,0xbc695c1b,0xbc510a6d,0xbbe5d06b,0xbc5586e2,0xbc64174c,0xbc7ba7bb,0xbc5d0a42,0xbc3eb470,0xbc1c0722,0xbc0a199c,0xbbe88dc9,0xbba75fd9,0xba9d4199,0xbb00e40b,0x3abfd359,0xbaab5f26,0x3a873ce7,0x3a58eaec,0x3ba76837,0x3be2d4b0,0x3b755eea,0x3b6fcc16, +0x3b249fba,0x39e70cbc,0x3b0aaaf5,0x3ac625de,0xba7f2f24,0xba8aafa5,0xbbefc356,0xbbac3f04,0xbb5709f4,0xbba518cf,0xbbc41bd3,0xbc8bd086,0xbc97a211,0xbc614de0,0xbc6c299a,0xbc492931,0xbbeb3d8c,0xbc57bfd5,0xbc7ddf9d,0xbc6676b8,0xbc6992e7,0xbc4b3775,0xbc3f1bf2,0xbc23f2dd,0xbc0294e6, +0xbb9594ae,0x3b264994,0x3998c121,0x3b289419,0x3ad36f09,0x3adec95b,0x3b047e3a,0x3bb94d4c,0x3bdcdb3b,0x3b4c2ece,0x3b8c9f64,0x3b58a313,0x3a965d48,0x3aa12ac5,0x3a2b33a8,0xb9909589,0xba19f437,0x3b847036,0xb999c5d3,0xbc11c735,0xbc18b77c,0xbbd02ebc,0xbb0497e5,0xbbacf277,0xbc7f656b, +0xbc6a19e9,0xbc872497,0xbc8cdbaf,0xbc71517f,0xbbb713b0,0x3c40ce62,0x3b85f289,0x3b0c989d,0x3afeb204,0xbaa1df3c,0xbb8a073a,0xbb9af6f9,0x38220aee,0xba239a90,0x3b0393c5,0x39fa1a7b,0x3b0d1184,0x3bfadbbc,0x3a547472,0x3aacbf5c,0x3bcbff1c,0x3c1e7b9f,0x3c0f8d71,0x3a91eb49,0x3a7cd8f5, +0xbb76c279,0xbbb130b5,0xbbf71caf,0xbbd6dcc9,0xbcb28951,0xbab26be6,0xb9920432,0xbbb94268,0xbc1760f4,0xbbef99c6,0xbbba79c3,0xba522b8a,0x3aa258bf,0xbb09383a,0xba2708d5,0xb8c3981e,0x3b44d5a1,0x38349857,0xbb0f0d9d,0xbc224a3b,0xbbf0a4b2,0xbbc1f982,0xb89aca87,0x3b7d39c4,0x3a3bda08, +0x3a940456,0x3b9c59f2,0x3b9a63fc,0x3b2ae49a,0x3ba96f91,0x3bae68d7,0x3bd7e918,0x3b10f807,0x3b0b59b9,0x3b70abe7,0x3b75e25d,0x3aef93e0,0xbac9e3fb,0x3b164d6b,0xbc02ae78,0xbc61a4dc,0x3b0e18b9,0x3a2bcc91,0xbc0f6a79,0xbc903e10,0xbcb9cdbc,0xbcc836f5,0xbc33669d,0xbb11096c,0xbb000566, +0xbbb22b1c,0xbc0e4f23,0xbc29cd48,0xbc2388e9,0xbbf0ec57,0xba1196dd,0xbb445382,0xbb99d118,0xbb98c648,0xbb493a6a,0xbac527f9,0xbab3b039,0xba9f6fe5,0x3a33ec9a,0x3b83dd18,0x3b19af95,0x3b716e92,0x3b5f5dcc,0x3a89b8fb,0x3accede8,0x3a3c88a0,0x3b2b10ec,0x3b989d95,0x3a7177c1,0x399f736e, +0x3b7c917a,0x3b9b3c31,0x39e80fe1,0xbbbe0312,0xbcbe1b97,0xbcd088ca,0xbce3b508,0xbca71a97,0xbc7d644a,0xbc1a2ea6,0xbbe1714a,0xbc3e0959,0xbc63f351,0xbc82a7a9,0xbc6a4bb9,0xbc239fd8,0xb9ac29a8,0xbb3ba1b9,0xbb6a7454,0xbb2806d7,0xbb7d977e,0xbb3544bf,0xbb06d2fe,0xbb029367,0xba2faa5a, +0x3b50a62c,0x3acded7f,0x3ae4f9c7,0x3a4eb85f,0x3b058f03,0x3ad2e1b2,0xbb1069a3,0x3b5b1862,0x3b5a31bd,0x3a52d69b,0x3a2324b3,0x3a86f268,0xbb07eb80,0xbc4f6198,0xbc8e5460,0xbce8d4b1,0xbca3016d,0xbc484b6a,0xba9a8ac9,0xbbc2fe41,0xbbb1c936,0xbc09513a,0xbc05fd7c,0xbbdaa738,0xbb58b0e8, +0xbbb994ea,0xbbcbcaf6,0xbbb5e13f,0xbb79348c,0xba839aa5,0x3a14ba78,0xb9da1607,0xbac1139e,0x38abd67f,0x39bb102f,0x3a460297,0xb9f3b539,0x3acd4d1c,0x3a83b936,0x391f0e3a,0xb94b165f,0xba30f469,0xbb66e153,0xbb97a811,0xbbc9eff2,0xbb5b6b8f,0xbb2ce227,0xbbfd881b,0xbc2458d3,0xbce6a040, +0xbcccb9b2,0xbc9d9bfd,0xbca67e86,0xbcb7a77b,0xbcaffb7f,0xbcab2f14,0xbca5c54e,0xbc8bd222,0xbc5f50c4,0xbc1c79a9,0xbc0f3d80,0xbb1fc1f2,0x39c8fb7a,0x3a834b9e,0xb97daa23,0xbad8b38a,0xbb15e1e3,0xba9d5616,0xbaae25df,0xb99c25f5,0x3a50741e,0xb7da4468,0xba568d5e,0xbac6f316,0xbabdd378, +0xbabc7c7b,0xbb0f6825,0xbba239c2,0xbc09a864,0xbc454dbc,0xbc4095b7,0xbc7c33a1,0xbc52b947,0xbb0af094,0xbc808eb4,0xbc8706ad,0xbc86f245,0xbc99cb46,0xbc9803b9,0xbc8aff59,0xbc864be9,0xbc2a13a3,0xbbc2211d,0xbb71571d,0xbbade3ea,0xbbc607fc,0xbba8eb9d,0xbb70f1cb,0xbb4a239e,0xbb1743f9, +0xbb1aa26b,0xba7e95ff,0x3b71af6c,0x3b0d56e2,0x3a804053,0xba14f96d,0x39df1b11,0xba025661,0xbac4d82c,0xbbbc6287,0xbbe343ca,0xbbe9a4dd,0xbc07b26c,0xbc19bfa0,0xbc240ddc,0xbc22840e,0xbc1e21f9,0xbbc260e9,0xbc2de3bd,0xbc36385e,0xbc550d1b,0xbc7ec205,0xbc71738c,0xbc735b14,0xbc6294c5, +0xbc5ee3cd,0xbc63d841,0xbc2544b0,0xbbfac040,0xbbb72485,0xbb6b4e7a,0xbaebebc9,0xba196a75,0xb7dd1feb,0x3ac5feed,0x3b062ecd,0x3a6391df,0x3a064280,0x3a56290a,0x3ada1c6c,0x3affbaa2,0x386471eb,0x3a30d8d7,0x3a1ab4aa,0x39e3cc69,0xba9331c3,0xbb2d6fcc,0xbb67db49,0xbba6abc0,0xbbb86e87, +0xbbde58ed,0xbc057c76,0xbc0d7d2a,0xbc0b7852,0xbc1f9b26,0xbc21ee0d,0xbc622e81,0xbc44dbcd,0xbc4581e7,0xbc42a18b,0xbc32060f,0xbc1b1322,0xbc04172a,0xbbf1124b,0xbbdb88cc,0xbbacc42c,0xbb27d11d,0x39b7dfb7,0x3b400ae9,0x3b1aaa15,0x3b142014,0x3b008f73,0x3abbb05c,0x3aa00456,0xb936fe22, +0xba889b98,0xb90ee76d,0xba8d42ca,0xba0432c0,0xb989be09,0x388d1c6a,0x3a019c59,0xbb87d7c7,0xbb1305e5,0xbb906c7c,0xbb32781a,0xbb6a0821,0xbbcb0fe6,0xbbd9b44c,0xbc2de4a6,0xbc37645f,0xb9df7e13,0xbbd6c14a,0xbbe507ab,0xbbe5b4b2,0xbbda96dd,0xbc0069d6,0xbc082746,0xbc172919,0xbbdff7c6, +0xbb956bec,0xbb44647b,0xbb011522,0xbab9e684,0xb914386a,0xba418e49,0xba6a966f,0xba5b0886,0xba96009e,0xba240ae0,0xbac66ca1,0xbac62ac9,0xbae7778e,0xbad88294,0xbae7c0b4,0xbaaeda8f,0xbac3a386,0xbb020a8c,0xbb416fe8,0xbaba546c,0xbb3293ec,0xbb8eded1,0xbaf053d2,0xbb988816,0xbb15d628, +0x3a024ef1,0xbbd742cd,0xbb9bbef1,0xbba6786a,0xbb87269d,0xbb878604,0xbb81efb5,0xbb7d3d57,0xbb5fecb3,0xbb5fa44c,0xbb4ecaa0,0xbb528894,0xbb402b65,0xbb1cc652,0xbae6b631,0xba93c5dd,0xbaaa3d7e,0xbab1bba8,0xbab89220,0xbacd7d46,0xbadd1745,0xbae7b3be,0xbb3276d4,0xba416b32,0x3b74e464, +0xbb4c399b,0xba610a1b,0x3ba0a1e1,0x3bb3171f,0x3b94d860,0x3b805a00,0x3b8b85d7,0x3b6e7fed,0x3b2bcecd,0xbb037a59,0xbb8c0e53,0x3b0295f4,0xbad4a354,0xbb7e0eba,0x3c09a417,0x3be51045,0x3c13177f,0x3bc05511,0x3bbc763b,0x3bab04aa,0x3bc72cd6,0x3bd5f785,0x3be199f9,0x3bdb60f2,0x3bdda7e4, +0x3be0ff1a,0x3bc8c92b,0x3bc47eb1,0x3bc62a57,0x3bd0a557,0x3bddbb8b,0x3be2b1c5,0x3be2b938,0x3bcb1636,0x3bebf877,0x3b4ce3af,0xbaac5407,0xbc1952dd,0x3ba57593,0xb9f22910,0xbc10d6f6,0xbc0c67aa,0xbc03ea49,0xbbe28faf,0xbc0d1080,0xbc066c25,0xbbe2c152,0xbac31b62,0x3bc73d0b,0xbbf748ed, +0xbb4947c8,0xbc10737e,0x3c00af18,0x3bf3e6b6,0x3bd3bcb5,0x3b98d5eb,0x3bf49f30,0x3c138ee2,0x3c2a8e75,0x3c1fe40d,0x3c253eb5,0x3c25a1f3,0x3c00f494,0x3be9cdfe,0x3bf6ea9a,0x3c03ebd7,0x3c159673,0x3c185c5c,0x3c0d3a85,0x3c075727,0x3c1416e9,0xba9e1470,0x3b0acfe2,0xba97b6ba,0x3a676520, +0x3bb7bd8f,0x392ed044,0x3b9a8849,0x3b04fda7,0x3b3c9e48,0x3b079ed2,0x3be3949f,0x3a3dfbf0,0x3aba1851,0x3b223fcc,0x39ff6538,0x3ae3f340,0x3a756c7e,0x3c47ca16,0x3bcf15eb,0x3bb20819,0x3afbfb17,0x3bdd1119,0x3c11f7a5,0x3c4093b4,0x3c3cea52,0x3c362ff6,0x3c47117f,0x3beeb497,0x3bd14704, +0x3bdff3c7,0x3c140453,0x3c2863f3,0x3c4856a0,0x3c21ef60,0x3c2f3108,0x3ba77abb,0xbb07d9fe,0x3ac7360f,0x3b3e170d,0x3a8c8917,0x3af83788,0x3ba3d640,0x3b9a2333,0x3c3b4444,0x3b891734,0x3bd1a566,0x3b345b00,0x3b6b3cce,0x3b99f5a6,0x3b8034c0,0x3a01fd8f,0x3c04b91e,0xbab22cfd,0x3bbe834d, +0x3c17da9b,0x3b813881,0x36c49a7c,0x3bc34f90,0x3c3243d2,0x3c7c0130,0x3c78a7af,0x3c6ec229,0x3c83f080,0x3c0deb18,0x3bcbc224,0x3be59afd,0x3c281625,0x3c42f8ff,0x3c580f1a,0x3c390929,0x3c2ade46,0x3bcb767c,0x3b3ec8b9,0x3bafc00d,0x3a50b8b7,0x3b7662da,0x3b16884d,0x3bb0ab51,0x3bda149e, +0x3bed06d9,0x3b91aa41,0x3bc21a64,0x3b73f149,0x3b655153,0x3b22ea83,0x3b3c8bb6,0x3b6835b7,0x3b82fa31,0x3bd7c636,0x3c0a3a3d,0x3bfb3b7d,0x3b24c54a,0xbb6b5323,0x3b80e332,0x3c0f7efc,0x3c7b9c87,0x3c8122a9,0x3c7afe26,0x3c8938f9,0x3bfa7a71,0x3ba4ad87,0x3bc55454,0x3c27c851,0x3c66bab0, +0x3c8933ad,0x3c598f0d,0x3c3e1c57,0x3bbb08dd,0xbb8722e6,0x3b4c0db8,0x3b3ca25b,0x3b7982fe,0x3b88ee00,0x3b2819ab,0x3bed5aca,0x3c0184d3,0x3ba33940,0x3b8bca94,0x3b8feafa,0x3a8fc5de,0x3b86b00f,0x3ba266ff,0x3b648197,0x3aeb2b2d,0x3baed5d6,0x3c66f6fe,0x3c8c1244,0x3c6d42d1,0x3c8985a0, +0x3cd2ff39,0x3ce30652,0x3c94944d,0x3c8cd603,0x3c096e3f,0x3b89f4be,0x3b2d5115,0x3bcb8424,0x3c88bd14,0x3c436a08,0x3c25a261,0x3c48be23,0x3c482c0b,0x3c636094,0x3c3a7adf,0x3ba71f2b,0x3bf3e5c1,0x3b68c83a,0x3b797168,0x3b082c23,0x3bfb2ff2,0x3a720d29,0x3ad24c16,0x3c02b738,0x3c349fa5, +0x3c14f99d,0x3b2a9c81,0x3b061e72,0xbb07add3,0xbc2b80ee,0x3bd4aa67,0xbbb1dc4f,0xbbbb3e4e,0x3c169c12,0x3bf0da8d,0xbb98fa74,0x3b1b70c3,0x3ae066b9,0xbaad39a0,0x3bc7bb51,0x3c1118a5,0x3bbd1711,0x3ac44d92,0x3a8d9087,0x3befddc6,0x3c483bc9,0x3c8ec511,0x3cbffea3,0x3c629e8d,0x3c46f535, +0x3b88f7da,0xbb0f2bf9,0x3b1f75e5,0x3b28ee3a,0x3be13309,0x3bd7d255,0x3b5263cb,0x3bd4bb63,0x3be3e340,0x3be0905c,0x3b40731a,0x3b441d0d,0x3bc68a4c,0x3b41c037,0x3b9c27d9,0x3c05dfa6,0x3ab3924b,0xbb997316,0xbb6dd30f,0x3c130cf3,0x3c613bfb,0x3c871056,0x3c886c31,0x3c720046,0x3c550a2b, +0x3c519c68,0x3c433194,0x3c3b4d85,0x3c524b52,0x3c76a597,0x3c82f85c,0x3c6ce073,0x3c3da344,0x3c25070c,0x3bb8987f,0x3b67fa15,0x3b909157,0x3a2ea8f9,0x39e839ae,0xb9cfed98,0x3b0e0570,0x3b463b52,0x3b6c3fda,0x3b6daba0,0x3b79ac79,0x3b828fd2,0x3b1c1160,0x3b29c966,0x3ac9584f,0x3bae4f28, +0x3bbf3c72,0x3b9f3347,0xbaed62ff,0x3b542416,0x3bfd0e65,0x3c589670,0x3c8d4b3b,0x3cf42cc3,0x3cbd4ae8,0x3cbde7ec,0x3ca4e3fd,0x3c56e174,0x3c2aac55,0x3c46a835,0x3c6c3dee,0x3c6cef2b,0x3c5262e0,0x3c262a6a,0x3bec8bdc,0x3bea04c1,0x3b53adae,0x3b8e94f1,0x3abd5120,0xb7037e1d,0xb9fcbfcb, +0x3a690d6c,0xbab3f4d0,0x3aa67108,0x3b5fbe5e,0x3b4168d5,0x3b349677,0x3adb00c4,0x3b570170,0x3b2e9ad5,0xba260589,0x3b381de7,0x3b9e5c23,0x3a72be97,0x3bb9a43b,0xbb5f99c1,0x3b4016dd,0x3c5e52af,0x3c9d7435,0x3d047833,0x3cdc2fbd,0x3cb9c5f2,0x3c4ced3b,0x3bc3480c,0x3ac5bff9,0x3b491d89, +0xbaec4161,0x374373a9,0x38b4c4a7,0x3ba91dc0,0x3c014284,0x3c49425a,0x3c2faf13,0x3c11dc56,0x3b93452e,0x3a829efa,0x3a8dffb0,0x3a6b38e9,0x3af94a2b,0x3aa18bba,0x39f702a6,0x3b16b5cf,0x3b18c361,0x3a795382,0x3a76d62b,0x3808c884,0xbb1fce20,0xbb7519a9,0xbb12e636,0xbbc28f6b,0xbb58d1bc, +0xbc34fdb1,0xbb3f0074,0x3c94f4ff,0x3c801170,0x3c9c8072,0x3c85da7d,0x3c66970a,0x3c0df9f7,0x3b8c8777,0x3b6803f7,0x3c1ef6d8,0x3bc2181c,0x3c0b5380,0x3c018674,0x3b93d2a9,0x3b005208,0x3a350bdf,0xbacc2e65,0x39761d6c,0x3b8d796d,0xb9553841,0x39c5fc7c,0x3a34a5dd,0x3a1eac27,0x38cd5245, +0xba869d32,0xba3f2ac0,0xba08ed07,0xb8be30aa,0xbaa99244,0xbb0f5b91,0xbbe256c0,0xbbfffcb8,0xbc68f020,0xbc42294e,0xbbdff3b8,0xbc70b52d,0x3a63b08b,0x3b4f249e,0x3af5eb77,0x3b096210,0x3b2d7bd6,0x3b767ebe,0x3bbbb763,0x3a9bbb57,0xba9ece55,0xbab87949,0xb95b9f18,0x3ac118e9,0x3b4001fb, +0x3babc11f,0x3bc81866,0x3ba3bf2a,0x3b86d707,0x3b54187b,0x3aa36f0a,0x3b0d86f9,0x3b7e8bec,0x3b0b8422,0x3b3d00c0,0x3aa5e7ec,0xbaf1e4f1,0xbb893ec4,0xbbbfe34e,0xbba04120,0xbbe196ab,0xbbe889fc,0xbc0d5ba2,0xbc25d5ea,0xbbe9c65e,0xbb8d3ec2,0xbb85492a,0xbc106f49,0xbbe89aab,0xbaa962b6, +0xbb615411,0xbbac14e5,0xbb221a1a,0xb9eb1579,0x3b410cd1,0x3aa0a1db,0x3a8fff78,0x3a47313b,0x3b524f8e,0x3b9a83cb,0x3bbbe9c0,0x3bbeebd3,0x3ba59907,0x3b902e50,0x3b8d607b,0x3b8a26a6,0x3b93bc5a,0x3b1f1264,0x3aaef55c,0x3b34d060,0x3a45d157,0x3a7cb143,0xb8adb35a,0xbb005110,0xbb8d071d, +0xbb92e2cf,0xbb920812,0xbb9e6e26,0xbbb5b950,0xbbc46b7f,0xbbdd744c,0xbc0d4f7a,0xbc073bf6,0xbc2610e0,0xbbad57d0,0xbb9cacc4,0xbb837185,0xbae8a808,0xb9cb64c7,0x3a831f7e,0x3b423ce3,0x3b5c18de,0x3b8220f0,0x3b912c0f,0x3b7c0b91,0x3b7c23b3,0x3b85a38f,0x3b6e6c90,0x3b6d375e,0x3b7f4f42, +0x3b7dfb75,0x3bb7f2fd,0x3b7ef416,0x3b4fff93,0x3afb4656,0x3b321310,0x3abf1139,0x3aa56e41,0x3ac5b204,0xb9cdbf3f,0x3a969385,0xbb551598,0xbaaa358e,0xbb2281c3,0xbab3bb81,0xbaeae457,0xbbdc9b91,0xbbb3726f,0xbbb950b5,0xbbfa01e3,0xbb20a997,0xbaabed9e,0x3847eac3,0x3a828f6c,0x3b1cba01, +0x3b83e7d7,0x3bb9c8b4,0x3b9ab656,0x3b82984a,0x3b65700f,0x3b68c3b4,0x3b61d09e,0x3b517ac1,0x3b4af195,0x3b36f279,0x3b28a8b2,0x3b09151c,0x3aa4e313,0x3b212109,0xb9a34448,0x3a7478d2,0x39b466f2,0x3a9174a9,0x38d587ba,0x38df497b,0xba250b3c,0xb96a6ddd,0xbaeade2d,0xbab06305,0xba85323b, +0xbb9fbc94,0xbb467e49,0xbb550ff7,0xbbd27d66,0xba9a6d57,0x39fcb2d5,0x3ae80242,0x3aac4a43,0x3afd0995,0x3b1cf9be,0x3b3142b1,0x3b3b68b5,0x3b5c0bb8,0x3b5e8076,0x3b6f55c3,0x3b71c088,0x3b676f11,0x3b5c1d85,0x3b5745f7,0x3b56c0ad,0x3b5be6f5,0x3b671c05,0x3b701c39,0x3b67e94e,0x3b860944, +0x3b294167,0xba25b604,0xbb9d49d1,0x3b25d827,0xba2bd7ae,0xbbaae4b6,0xbbbd7e93,0xbbadbc2b,0xbba4ea03,0xbbbb8694,0xbbae9e05,0xbb8dd1fe,0xba73bd7e,0x3ab7702b,0xbbbc749a,0xbb554424,0x3b89d5b9,0xbb973338,0xbb24306e,0xbbeac63c,0xbb83ecc3,0xbb85a5dc,0xbb84f55c,0xbb91ba37,0xbb964ddc, +0xbb918dfa,0xbb92178b,0xbb9234d7,0xbb89a31d,0xbb9bcd09,0xbba1f088,0xbba6248d,0xbb9e04db,0xbb9b8970,0xbb8eb8d0,0xbb8ee137,0xbb7283e8,0xbba8e1f2,0x3a9e3895,0x3bb19493,0x3c2d3b1b,0xba9d02f9,0x3ba72d06,0x3c39a229,0x3c3b7ff8,0x3c3230e1,0x3c1bd92b,0x3c3fcfd7,0x3c36ded1,0x3c1f1c5d, +0x3bd27eea,0xbac8cb5f,0x3c1b1d1d,0x3bf76a8e,0x3c6941e6,0xbb0f9e9d,0xbb90e6ea,0xbb9b354b,0xbb9bd6c5,0xbbd539fe,0xbbe68372,0xbbdbaeb4,0xbbdf3ac9,0xbbe55072,0xbbc03ad4,0xbbef264b,0xbc051d4a,0xbc0af47e,0xbc001755,0xbbeb31b0,0xbbc12567,0xbba17f5b,0xbb9f4cfd,0xbbd92dee,0x3bb2c916, +0x3aaa6a10,0x3b2b9cef,0x3b49d619,0xbab74c99,0x3b92d935,0x3b466b8e,0x3bcffc0a,0x3b481a43,0x3b8ad351,0xbb5875c6,0x3b426121,0x3b7b64d2,0x3b338817,0x3b842057,0x3b31c7dc,0x3baa8cae,0xbbd0c194,0xbb8f72ae,0xbb998bd8,0xbb9f1cb5,0xbbf1af43,0xbc0033a4,0xbbe6bc99,0xbbf09a44,0xbbf53aff, +0xbbc8a4d3,0xbc1ace0e,0xbc304ff3,0xbc2a87f3,0xbc26bf7b,0xbc0d4918,0xbbe94fbd,0xbb9f0364,0xbbd0f0da,0xbab47830,0x3be8f7d1,0x3ad2fec2,0xba6c57c4,0x3b17cbf1,0x3b029f43,0x3b3dcb9c,0x3b963e2c,0xbad17626,0x3ba13505,0x39b374ba,0x3b8ad895,0xb96fee65,0x3a9bd6be,0x3b0d65f6,0x3b874f12, +0xbb472c70,0x3c21a6ee,0x3b9451eb,0xbba74853,0xbb7fbac5,0xbbb544ea,0xbc10014f,0xbc2fd0c8,0xbc19a1b8,0xbc2bcb77,0xbc2db930,0xbbe494fe,0xbc491dbc,0xbc635749,0xbc75593f,0xbc6326ad,0xbc39292c,0xbc0064a6,0xbbbf4fb6,0xbbc33255,0xbb6ae5cc,0x3abb7581,0xbb5e00c9,0x39afa857,0xbb22fe98, +0x3b38a27b,0x3ab26504,0x3bfc969d,0x3beb72a0,0x3b937c24,0x3b2875b6,0x3b74f675,0x39f38db7,0x3bbc3919,0x3b5d6be1,0x3aa41ff9,0x3adda410,0xbb6414b6,0xba4f9b32,0xbbcc967f,0xbb5ed756,0xbba84b3b,0xbc1bbe0a,0xbc1a104b,0xbc0a5ae8,0xbc15a636,0xbc17bc6d,0xbbf9545a,0xbc5413bc,0xbc862026, +0xbc785ad8,0xbc7ed5eb,0xbc4684ea,0xbc13c5f4,0xbbc3e1a0,0xbbc03837,0xbb569619,0x3c13b42c,0xba343a87,0x3adbf9ae,0x3a819883,0x3a8d493f,0x3b5709a5,0x3bae1843,0x3bf0228f,0x3b731b11,0x3b96dfe3,0x3b3c4b57,0x3abb8cde,0x3b11a168,0x3b2a2a06,0x3a4d4fa8,0x3b7855f8,0x3c93076c,0x3c2801b3, +0xbc32a9ee,0xbc1d715b,0xbc07d12e,0x39b87954,0xbadbac9a,0xbc659526,0xbc504802,0xbc8f3d3e,0xbcb836de,0xbcb8667d,0xbc67e05e,0x3b9b5589,0x3ad8af23,0x3ac4c268,0xbb755043,0xbb659ee8,0xbb973325,0xba529761,0x3bc57f55,0x3984ba5d,0x3b91e8e0,0xb8ef5883,0x3b2ee5b5,0x3bc4c9ea,0x3a4471af, +0x3afda482,0x3c16c832,0x3c169dd6,0x3bdbfda5,0x3b29d995,0xb9dfc3d9,0xbb0b7a0b,0x3a068c98,0x3b9530de,0xbc6ce0d3,0xbc98fcb2,0xbbde5b2b,0x3a5b82a8,0xbba8ce89,0xbafb7866,0xb98f6390,0xbb0c64e5,0xb938efab,0xb7c0d994,0x3a58fc2c,0x3a02a162,0x38203f29,0x3b19e444,0x3aa29ca1,0x39ba8fe2, +0xbba47235,0xbb5f8b97,0xbbb82d81,0x3b2dff42,0x3bb17429,0x3ab94959,0x3ae3ce4f,0x3b558993,0x3b446cfa,0x3aef9dbc,0x3bc62e23,0x3bdb2da0,0x3bce2733,0x3b1f8597,0x3b11b5ab,0x3bb68b26,0x3b7df055,0x3b0955a7,0x3be57a6a,0xbbc54e87,0xbba8b040,0xbbcb5ff6,0x3b9f0b5a,0x3b9feb5f,0xbb1bf057, +0xbbae0c07,0xbc498b91,0xbc8dd9c8,0xbc7dcb8e,0xbc2f87b3,0xbb241024,0xbc0677b7,0xbbf970e2,0xbc023fa3,0xbbed2175,0xbb9bcd8f,0xba1c3f71,0xbb2a57b3,0xbbce4499,0xbb35c897,0xba56ee2b,0xba18b315,0x3ad800c9,0xbabb49bc,0x3acfaedc,0x3b597f05,0x3b538d18,0x3b51cbcd,0x3b2c630d,0x3ad9d9b5, +0x3b061220,0x3a4c9403,0x3b4a1c51,0x3bab39d3,0x3ba8d83f,0x3acb745e,0x3c19a3b8,0x3c0b6d8d,0x3bb4f716,0x3a78a595,0xbc1ddb3e,0xbc5af624,0xbc8d3ba5,0xbc454235,0xbc81542e,0xbc4185de,0xbacc5d76,0xbc26b483,0xbc240837,0xbc40cd13,0xbc1d1061,0xbbe77e3e,0xba6f8e4a,0xbb18ec69,0xbba7977d, +0xba993a79,0xba72227b,0xbafb8fce,0xba581bea,0xba37cfbd,0xba4bc4b0,0x3b6a014e,0x3abe66cf,0x3b12e256,0x3aeb6bfa,0x3b025f11,0x3b0f0312,0xbaf86e3c,0x3b666187,0x3b510b46,0x3b25d196,0x3b8020fc,0xbb29d4d3,0xbb7eaaa1,0xbbcc4849,0xbbb1eaec,0xbc686453,0xbba987a6,0x39aab6ac,0x3b9af855, +0x3b0bd70a,0x3b024006,0x3ae8255f,0xbb2c5b46,0xbb831420,0xbae45270,0xbb1db65b,0xbb4b7d0e,0xbb49a3a3,0xbadbd312,0xb9cfbfec,0x3af3f844,0xb804deb6,0xbac5dc23,0x3a8ac942,0xb9bf8e6f,0xb9409a4b,0xba896b1f,0x3ae5a9bd,0x3ad6ef42,0x3a250d95,0x3a8173ff,0x398b89e7,0xbb6d2683,0xbb8a12b0, +0xbbb0bb00,0xbb5be94d,0xbba7fc0b,0x3b8471ff,0x3a8dc42e,0xbc843b61,0xbc422c0b,0xbc2478f2,0xbc3903af,0xbc862dfd,0xbca3c396,0xbc81e38f,0xbc5be07a,0xbc0d3df0,0xbbb6aaed,0xbb98c212,0xbb4ea283,0xbabfea95,0xb9cce2be,0xbaa61856,0xb9c6dc99,0xbac30983,0xbb0ef505,0x3b09b6d1,0x3a3009ff, +0xba814af5,0x3a317441,0xb9706447,0xbafc7f8a,0xba42362f,0xbac85020,0xbad34844,0xbb0a4301,0xbb8e189b,0xbbc17a5c,0xbc16deac,0xbc01d703,0xbbe0ff84,0xbc23c43e,0x3b053801,0xbc065be9,0xbc2da37c,0xbc269c36,0xbc5c145a,0xbc4f2ac1,0xbc406fa6,0xbc4aef37,0xbbe3a46b,0xbb8327c6,0xbb6a953f, +0xbb93ced3,0xbb74dcd0,0xbae2ba26,0xba67dbf6,0xbad1cb5e,0xbb59ebf3,0xbb452727,0xbaf0e8ac,0x3b4ff56f,0x3aeeef10,0x38d3249d,0x3b136c5b,0x3a126550,0xba54a5d6,0xbb31915f,0xbbf8afd2,0xbbe79ae8,0xbbe36c15,0xbbef4017,0xbc12ab97,0xbc292580,0xbc1e9e99,0xbc26072b,0xbbcc2c00,0xbbdaec2c, +0xbb7b7d0f,0xbbe192f0,0xbc474979,0xbc3a487d,0xbc561ea5,0xbc42ab4e,0xbc4f9b6e,0xbc5f2b15,0xbc23103d,0xbbfe7e12,0xbbbda1bb,0xbb595837,0xbaa8e7e7,0x3a4fdec8,0x38b289ed,0x38657b90,0xbaa55205,0xba72ca0b,0xba80f335,0x391dedb8,0x3b5d45b1,0x3b5d83b1,0x3b03ded1,0x3ae55404,0xb8f39dd6, +0xbaf98f62,0xbafe78ba,0xbb864c5f,0xbbc236f8,0xbbc46032,0xbbbd4a08,0xbbacd9af,0xbbe7bbec,0xbbd0a1c4,0xbb86e284,0xbb9375f1,0xbbadea34,0xbc2c7fcd,0xbc2745b3,0xbc1e217d,0xbc258373,0xbc1e4b35,0xbc114685,0xbc00af2a,0xbbdb51d7,0xbbb4935d,0xbb815063,0xbb0807f0,0x39272393,0x3b456a37, +0x3ae48d62,0x3ab6bfd9,0x3a0cf09a,0x3a915eaa,0xb86ab774,0x3ad016c8,0x3ae8c5c3,0x3acf6724,0x3a856783,0x39470201,0xb986ab48,0xba4f29c2,0xbaba6e6d,0xbbe0af43,0xbb14bc89,0xbbcffab0,0xbb1c6fe4,0xbb807042,0xbb843182,0xbb4e043e,0xbbc129e8,0xbc04b362,0xbab5e4a9,0xbc084483,0xbbefcb42, +0xbbe8786b,0xbbc7d41b,0xbbccb9bf,0xbbc20df8,0xbbcd507f,0xbb9c585e,0xbb63428b,0xbb17273d,0xba939b3b,0xb96dbd17,0x3aa00d84,0x3a7f1c52,0x3a6dcc5a,0x3a818b40,0x3a61bb01,0x3a72438e,0x3961212b,0x3afb3caf,0x39f7a6ec,0x3a17a71a,0xb981cec3,0xb913abab,0xba49705f,0xba2087c3,0xba442153, +0xb8cafff9,0xbae06971,0xbbc05a49,0xbad69d5e,0xbba58b0e,0xbb903e47,0xbaa5582d,0xbbf13fe1,0xbadf3116,0xbbaf0436,0xbb8cd6f8,0xbb8af7f5,0xbb8780bf,0xbb89671c,0xbb7ff95b,0xbb79f1e2,0xbb645c62,0xbb586c53,0xbb44ec1a,0xbb2e4e87,0xbb158fff,0xbaf1e7ed,0xbb04d173,0xbb0494d2,0xbb07ca06, +0xbb0f25ca,0xbb0bc10f,0xbb2f40fc,0xb98011d4,0x3b488f7a,0x3bb5d57c,0xba2d0229,0x3b338731,0x3bc740f3,0x3bd918c3,0x3bb2cdfe,0x3b9ce944,0x3bbf65ca,0x3bb97065,0x3b90c455,0x3a97d73f,0xbb00f732,0x3b7cbf08,0x3b097790,0xbb763cdf,0x3b453144,0x38da1a64,0x3bd1768a,0x3b33c6a2,0x3b1c00e2, +0x3b0440cb,0x3b0f942e,0x3b2194f9,0x3b4522a3,0x3b3a839f,0x3b411d2e,0x3b523c99,0x3b293581,0x3b20808c,0x3b1b1070,0x3b34df51,0x3b479459,0x3b5628c2,0x3b5b7686,0x3b3ca9d0,0x3b81f68c,0xbb36b9c7,0xbbc03e80,0xbbd8ef3e,0xbaa42c69,0xbbb629a6,0xbbd55411,0xbbd8df18,0xbbc8fccf,0xbbb57b4d, +0xbbf88aca,0xbbf64bd8,0xbbe8281c,0xbbd0b763,0xb9783be2,0xbbc23b8a,0xbbefa923,0xbc261c16,0x3b5e59f2,0x3b804704,0x3b0a3e00,0x3a67d3a0,0x3a5df0c3,0x3ad51c8f,0x3b84cc02,0x3b612b4d,0x3b758e33,0x3b881523,0x3b157d8e,0x3aafb205,0x3a6f992f,0x3ae97bbe,0x3b478738,0x3b841dc8,0x3b82f8d7, +0x3b90ed1d,0x3bb00128,0xbb9c755a,0xbae3869e,0xbb535be4,0xbb8ab28f,0x39dade79,0xba6f4f74,0x3a3aa8c7,0xbae2600d,0xba132fc5,0xbab9386d,0x3b9d1ce0,0xbae35031,0xbab245f6,0xba77a500,0xbb3c1c27,0xba649128,0xbba96437,0x3c0bc697,0x3b73df6b,0x3a5fe882,0xbaa07e14,0xbaa95f84,0xba42716e, +0x3b80098a,0x3b4ee601,0x3b6b1d3f,0x3b9d1d3b,0x3a943fb6,0xb913001c,0xb9f31fee,0x3ae076a2,0x3b3ebbe7,0x3bb20a46,0x3b8cb25a,0x3bda1cc4,0x3a787786,0xbbdd8a30,0xbb03ca3d,0xbb25ee80,0xbb52a4b8,0xba184dbd,0x3abcebcc,0x3b3a62f7,0x3bfa7497,0xba280ef4,0x3b84a460,0xba2283c1,0x3a6c3466, +0x3af3a91a,0x3a8bd14c,0xbb37c6dd,0x3b4bff06,0xbb8c54d6,0x3b9ecabf,0x3bd76902,0xb9acbb22,0xbb1b5052,0xbb8ac85a,0xbb2cf877,0x3baa8bb5,0x3b7b7fc5,0x3b8b6695,0x3bd2c4e2,0x39275417,0xbb1d3bed,0xbb9532bb,0xba688d28,0x3af58168,0x3baa981f,0x3bbf842a,0x3bea4f87,0x3b43b247,0xba2f079e, +0x3b2d88c8,0xbb23a211,0x3aefe4b6,0x39358886,0x3bb6f986,0x3b93abb7,0x3be8c18c,0x3b87ebef,0x3bccdaac,0x3b52ed58,0x3b17bb6c,0x3ac93683,0x3b291940,0x3a6ae223,0x3b42e4d6,0x3acbc55e,0x3bc13792,0x3be88f67,0xbaf5a38f,0xbb8f0272,0xbbeefc3b,0xbbad6268,0x3b6972ff,0x3b3dacf0,0x3b8fe1d2, +0x3be70b20,0x3953a171,0xbb3b5c08,0xbb644acf,0xba343927,0x3b509a6f,0x3be45de5,0x3bc49611,0x3bf0e626,0x3b5c405d,0xbbf98948,0x3a96100d,0xbae382f7,0x3ad5e4b0,0x3b7ad766,0x3b76c437,0x3c0f8193,0x3c0d0b11,0x3bc0f967,0x3b8a7517,0x3b99e726,0x3ac67ac7,0x3b90a97e,0x3bae398b,0x3b1dac71, +0xbae9856d,0x3bcd75dc,0x3bc2ef83,0x3c2e3551,0x3bb3922d,0x3bba75cd,0x3c774339,0x3c74ff3c,0x3b38691b,0x3c2aa877,0x3b988fa4,0xbb19dc7f,0xbaac71a7,0x3b2bdbaa,0x3c5f30dd,0x3c2c7f89,0x3c139393,0x3c54b6d3,0x3c27040c,0x3c161a8b,0x3bbe853b,0x3b39e053,0x3bfbbb90,0x3b485e9d,0x3b6878c6, +0x39275dbe,0x3bc6584e,0x38394acb,0x3b27588b,0x3c3cdeaa,0x3c1419a9,0x3bb19332,0x3acc1a47,0xba8f4812,0xbbbe4a9b,0xbc0ce679,0x3bd958cc,0xbca5028d,0xbb889cc7,0x3c180f5d,0x3bc76d50,0xbb789ba9,0xb9328cfd,0xbac4acce,0xbbb9193d,0xbac576fc,0x3ae19912,0x3bc9c73b,0xb9afbbc9,0xbac962ae, +0x3b01d648,0x3be2fd59,0x3c31d7b1,0x3c44d841,0x3b8fc6d3,0x3bbad525,0x3a6a87cd,0xbb3c0909,0x39b3ea6f,0x3aad3c13,0x3b70e4cb,0x3b8e840d,0x3b40f822,0x3be2b22d,0x3beb0b76,0x3bbf5836,0x3b361731,0x3b665bd4,0x3bc397a6,0x3afe9b1d,0x3b7ad84b,0x3c3eff65,0xbc4a90ad,0xbbaf97cc,0x3b16dab7, +0x3c2b36a9,0x3c231cb4,0x3bf3c6b9,0x3b7cce06,0xb9ae4b22,0xbb4d450f,0x3add57b1,0x3bb37944,0x3c24356c,0x3bfccc8d,0x3c071811,0x3c0e6648,0x3c0e34ed,0x3bd4e55d,0x3ba1a8ec,0x3af475f0,0x3ab72a3a,0x3ae9999b,0xbac91a30,0x38a3ada9,0xbab78ba6,0x3a0a8a09,0x3ae5439d,0x3b6e4070,0x3b522b23, +0x3b98cbd4,0x3b4ba513,0x3b37284b,0x3b1ef44e,0x3a786fc0,0x3b997c55,0x3babfd1e,0x3bd10980,0xbb12b214,0x3bd93d1c,0x3c133faf,0x3c20bfe7,0x3be952ed,0x3bdaa05f,0x3ba2084c,0x3bb79a51,0x3c125d50,0x3b5a4eb7,0x3b1a620f,0x3bda5b37,0x3b9f98bf,0x3b8fbf62,0x3b9c1a39,0x3b93788a,0x3b574728, +0x3b762c87,0x3aaef649,0x3b667b5c,0x39d99e3e,0xbb1dc93e,0xba35815f,0x3a50af6b,0xbb16f75e,0x3a64f2e9,0x3b376241,0x3b3685d9,0x3b2a274a,0x3a7849d8,0x3b794e8f,0x3b1f7730,0xb9b27dba,0x3ae481b5,0x3b9fc3a4,0x3a6b3460,0x3c1318cc,0xbbf48e18,0xbb97b64c,0xba205958,0x3b0eccef,0x3c191e0e, +0x3c22100e,0x3c38fcd4,0x3c59f5d8,0x3b069a53,0xbb046d34,0x3acac1eb,0xbbbff8a0,0xbba19390,0xbb3835a5,0x3aa6e7ff,0x3b4bc6e3,0x3bda9aa9,0x3bd4b3c2,0x3bd7a592,0x3b4354c1,0x39dc3ecb,0x39d3cf45,0xb9892484,0xb91605e7,0xb9499ab9,0xba66d6be,0x3b0a28cc,0x3b2dc448,0x3a81ed30,0x3a94bb46, +0xb8c16cda,0xbb229e7a,0xbb57594b,0xbb5357ec,0xbbbbe6ba,0xbbef2c2e,0xbc55c355,0xbc225715,0x3b5a1983,0xba6ddfd0,0x3b59dacf,0x3932708d,0xbb0d1fc7,0xbbda47e3,0xbb817fdb,0xbb7ffdb3,0xbaf5c677,0xbaa270fe,0x3ab27ba3,0x3aa00279,0x397d971f,0xb9a10e2e,0xb9c56eb2,0xbae516f6,0xb869b3fc, +0x3afaae06,0xbb4e5093,0xbaed8cf9,0x3a39477e,0x38dbf9e2,0xb83f013d,0xbb45ce90,0xbb02f03a,0xbadb4c6a,0xbb0fd190,0xbb39a153,0xbb5c2b0a,0xbbe88336,0xbbc807c3,0xbc2da1ec,0xbc24921b,0xbb99a47c,0xbc4b8c31,0xbbb14a64,0xbb439be9,0xbb4552c5,0xba2bd2ef,0x3a120fb3,0x3b26f1f2,0x3b3e0a69, +0x3a6b8df3,0xb974177d,0xba7beca4,0xba7b9617,0xba37e9c6,0x3a0d38b3,0x3a9cb93d,0x3abb829d,0x3ad40a2a,0x3b0cb921,0x3b176583,0x3a86c151,0x3acf5785,0x3b477067,0x38082e4b,0x3a8f56c5,0xba2ffbd3,0xbb8da3b3,0xbb86ea64,0xbbc75a2e,0xbbaedce6,0xbbf8efa5,0xbc0aa78d,0xbc2a95c4,0xbc499b35, +0xbc239d37,0xbc1f3857,0xbc045f0c,0xbc12abde,0xbbda2ded,0xbb11b905,0xbb881da6,0xbb915742,0xbb84c2ed,0xbb741193,0xbb1ba473,0xbb0d74a9,0xbadafa42,0xbaea4f9c,0x3a121ed5,0x3b0f178d,0x3b7f2de2,0x3b40bddf,0x3b044d3d,0x3aaf3a1e,0x3af0874b,0x3b23f0e7,0x3b1dd575,0x395a9c0e,0x3a4515ec, +0x3b2aab6a,0xb97c616b,0xb999a1c0,0xbb21b13f,0xbb96b1ce,0xbbc88e95,0xbbd40d8e,0xbbcd20a1,0xbbcdba01,0xbbdfc5b7,0xbbe45995,0xbbf03187,0xbc1556c6,0xbbec0445,0xbc2a349a,0xbbbb2bf3,0xbb8eebfe,0xbba4d737,0xbb822e29,0xbb5f0fda,0xbb26f0b0,0xbafc6bb1,0xbabad9fd,0xb9e3b6e5,0x39e072a5, +0x3ab67790,0x3b111632,0x3b5d9856,0x3b4cec66,0x3b458d79,0x3b4626db,0x3b39bc7b,0x3b94beb9,0x3b2a4ac8,0x3adc51b1,0x3af0a514,0x3b1cc070,0x39e9e602,0xba8ec872,0xbb3966d0,0xbb50d9ff,0xbb47d082,0xbc033526,0xbb887f12,0xbbaef721,0xbb4fa0a1,0xbb8a894c,0xbbde6511,0xbbc75db0,0xbbcc3487, +0xbc10c906,0xbb93a3dd,0xbb851353,0xbb227666,0xba7be6e2,0x39372b07,0x3ae4318c,0x3b5341a4,0x3b6deb9c,0x3b605e6f,0x3b625958,0x3b6c8c21,0x3b6c453c,0x3b65fdc1,0x3b5b6404,0x3b4ffd35,0x3b65ca68,0x3b5a9e81,0x3b4cd126,0x3b6be57d,0xb8a42529,0xb9797902,0xbaff1793,0xbaf4a037,0xbb27788a, +0xbb362539,0xbb79770c,0xbb7f627b,0xbb8b173b,0xbb9de564,0xbb703e8a,0xbc017b35,0xbbe67020,0xbbd3d506,0xbc0ca6d4,0xbbb66cd2,0xbb5efaf4,0xb940a30d,0xb9e8cf1a,0xb83e944a,0x3930aba3,0x39a983f3,0x39f4f368,0x3a322308,0x3a290a03,0x3a77453a,0x3a978565,0x3aa0b555,0x3ab08d80,0x3ac8d728, +0x3ad3af8c,0x3ae0fb3b,0x3ae2595c,0x3ae2189b,0x3ade004d,0x3b2460e7,0xba53b616,0xbb5f5804,0xbb77c6b6,0xbaab83a7,0xbb884534,0xbb9b816c,0xbbaabe54,0xbba0fd88,0xbb9fc83b,0xbbb8809e,0xbbb133b1,0xbb9659f3,0xbb81accf,0xbafbd125,0xbba4886f,0xbbbc0e48,0x3a13971b,0x3a20be3f,0x3b6b99be, +0xbb1d4b8d,0xba06524f,0xb9ec4dbc,0xba10bb4f,0xb99471cc,0xb93fecf4,0xb82f6d46,0xb96f50b3,0xb99af1e2,0xb99c26c1,0xba472ebf,0xba7f354b,0xba980ea8,0xba737d3e,0xba30e24c,0xb978399d,0xb909f94f,0x38c7a10e,0xba69407b,0x3b9fcecb,0x3bc7e3c0,0x3b3c216e,0x3b6e1f30,0x3bd0ed3d,0x3b8be646, +0x3b948569,0x3b8a6ba8,0x3b80d0fc,0x3bb31326,0x3bb05b6d,0x3ba44afb,0x3bee54e8,0x3b7c16e2,0x3b667ffb,0x3bee1a8c,0x3c25aad0,0x3b5cdea3,0xb9aebc0b,0xb9d40c29,0xba54ce9f,0xb9471b6b,0x39a01fc0,0x3a4e7f96,0x392cfcdc,0xb95b0eba,0xb8f8f156,0xbaac03d4,0xbb08703c,0xbb1ffd6c,0xbb0d279c, +0xbaaf8b44,0xb9151ea9,0x3a480672,0x39ed3660,0xbaa42740,0x3baa07c2,0x3b281db7,0x3ab7ef97,0x3b9da819,0x3b34cbaa,0x3b71a7ee,0x3b9f9a1b,0x3bde5b10,0x3b91edfc,0x3bb02202,0xb80e023b,0x3b4b241d,0x3b9bc17b,0x3b9224c9,0x3b96cdc0,0x3b85d834,0x3c0f5c49,0x3a8712ec,0xba928930,0xba08784c, +0xbad190f4,0x3937b35a,0x3aa35deb,0x3aff551e,0x3a8c65df,0x39bdd9bd,0x3992dc9b,0xbb188694,0xbb7797a0,0xbb86dbd3,0xbb6f9d02,0xbaf145eb,0x39c7a7cf,0x3b0937d5,0x39ee8e09,0x3b326e82,0x3bee574e,0x3b1d7d6f,0x3ae0ddc9,0x3b57f581,0x3b1db760,0x3bb68843,0x3b9bd6ea,0x3b282743,0x3c007614, +0x3b3d519e,0x3bbfa810,0x3abe02be,0x3b7f85b1,0x3b9c7168,0x3ba0be90,0x3b35f1c0,0x3c470821,0x3c098d12,0xba8ef1e1,0xba0c258e,0xbb2283fc,0xb850c2fd,0x3add5e2b,0x3b5cff11,0x3ad96e5a,0x39b2f299,0x3a43f2b2,0xbb3d9e0d,0xbba315b5,0xbbc27c97,0xbbac5bc5,0xbb3bed42,0x3a142b2f,0x3b2939d0, +0x3ab48ebf,0x3a9f8eff,0x3b4f365a,0xbaf024cd,0xba356561,0xbac19c6c,0x3b50eb52,0x3b488572,0x3c0b1df9,0x3be54b9f,0x3b970060,0x3b4d173e,0x3b9947f7,0x3aa9f661,0x3be45472,0x3b8fe820,0x3b4ff749,0x3b914d11,0x3b71c88c,0x3bc2094c,0xbb6b9071,0xb9afbfef,0xbb725ab6,0x3a3314d7,0x3b54ebc3, +0x3b922809,0x3b492e09,0x3ad302c8,0x39d27094,0xbb694af1,0xbbe2a555,0xbbea20b3,0xbbd87d8d,0xbb2bb170,0x3ad933c0,0x3b899508,0x3b27840e,0x3a91d3c8,0x3c0353cb,0xb9e3cc29,0x3a2734b9,0x3a4aebbd,0x3ac65d46,0x3b81ff05,0x3bbfd281,0x3c04bb17,0x3ba060a5,0x3b997a99,0x3b4b3a40,0x3a99456f, +0x3b7c180e,0x3ba31b7e,0x3b081953,0x3bc57e49,0x3cc227fc,0x3c961552,0xba1c365f,0xba1ddbf7,0xbb4b0121,0x3c143c6c,0x3c23c37b,0xbab5b8dc,0x3690048c,0xbbf9fe96,0xbc87a999,0xbc8e050c,0xbc4f0e8d,0xb9a70a9b,0x3b1ff606,0x3b75399d,0xbb10bd69,0x3a7057f4,0x3b081b12,0x3bb9e0be,0x3c196e49, +0x3b66e294,0x3bc06b3d,0x3aaa37f2,0x3b265287,0x3b97b1e9,0x395e4243,0x3b10ced6,0x3c47bd9d,0x3c065af9,0x3b9b2eaa,0x3b6568cc,0xbb1e75e8,0xbaf152d7,0x3b0e1744,0x3c7f4cd9,0xbc927a3d,0xbc2fc725,0xbc00ad97,0x3b018e8a,0xbb1b043d,0x3bc2103b,0x3babba43,0xbb127ce4,0xba2c0b26,0x396639e0, +0x3ba4d92c,0x3afa5053,0x3a4e6f7f,0x3b410620,0x3babf52a,0x3bf5387e,0x3c063479,0x3bac5d5c,0x3a85ad26,0x3b99881e,0x3b73d9e3,0x3b21049e,0x3b23bbbb,0x3b36a0c5,0x3b185a24,0x3ae96c8a,0x3bd3ff5b,0x3bf47c6f,0x3bb80acc,0x3b3c66ae,0x3b18f3d0,0x3bac6345,0x3b863dd9,0x3b8cd6c0,0x3c60301c, +0xbc327b87,0xb80a04da,0x3b653343,0x3bf85d8f,0x3c23015d,0x3c28d681,0x3c588577,0x3bf81ce6,0xba0c4288,0xbc0879e5,0xbc158d56,0x3b1a6500,0xbb225466,0x3ab17993,0x3b8c1b1b,0x3b4694da,0x3b43e70e,0x3ae60124,0x3a1f6772,0xbb5c813b,0x3a64f38d,0x3af7b8b2,0x3a52f531,0x3b47a6be,0xb8010a78, +0x3b2f5316,0x3b2ef6f0,0x3b7e91c7,0x3b38860d,0x3b08a496,0x3b2c9fc7,0x3b46782f,0x3a9b5718,0x3b98876c,0x3bcc47e9,0x3c0e2162,0x3b233cd0,0x3c3d81ea,0x3c304ae5,0x3c33c6a5,0x3c341fd0,0x3c6d2661,0x3c3ccaa8,0x3c1565e0,0x3bae3952,0xbb504a63,0xbb80501c,0x3bc74a53,0x3a23aacb,0x3b28f234, +0x3b2ce33a,0x3b2e0084,0x3a9346d8,0x39bb86bd,0x3969c50d,0xbb200900,0x3a08340e,0x3ae3e7b4,0xb9ef87b1,0x39edbf51,0x39dc3905,0x38eb7000,0x3b50b967,0x3acd0e25,0x3b1f9f09,0x3b2b68f9,0x3b187583,0x3b48f58c,0x39eea8c0,0x3b747476,0x3b7b8607,0x3b80cf1e,0x3bfe97fe,0xbbe2a877,0xbb974a76, +0x3b8db630,0x3c40a24f,0x3c59463c,0x3c8a516b,0x3c8a3d52,0x3c376eda,0x3c1e6322,0x3bff9a22,0x3c1f974b,0x3b274a45,0xb9b08f94,0x399bd22f,0x3b4eaa5d,0x3b78489a,0x3b885701,0x3b67f314,0x3b163216,0x3b55f6d7,0x3a5d673d,0xb920d662,0x3a94de1b,0xb8bb82c6,0xb9d285da,0xba9e5dd0,0x3ac89867, +0x3af1577e,0x3a9c1baf,0x3ab68ec4,0x39e28992,0xbb2a52a9,0xbb2717e5,0xbb02c97e,0xbb41c547,0xbbc7e62b,0x3c0079e6,0x3bfded9c,0x3bc547e7,0x3be93e10,0x3bb7edd2,0x3ba1e10e,0xb93e1d9f,0xbbea5531,0xbb3652b6,0xba033160,0x3b8c6cc3,0x3bb83a2c,0x3b918ea6,0x3ba232a1,0x3aec5bd7,0x3a308cf4, +0xbac073bd,0x39811cfa,0x39c041bd,0x39b0a428,0x3b6f2e3f,0x3b11345a,0xba195d09,0x3a05cac8,0xb99838aa,0xbb13607c,0xba869477,0xbb19e29f,0xbb06fd6d,0xbaf15fb7,0xbb15e2e3,0xbb309357,0xbb903616,0xbbb1f2b9,0xbb53a329,0xbb9f1806,0xba6f55e2,0x3a391954,0xb9852125,0x3a04b88c,0xb9ae4544, +0xbad9dfea,0xbacc1ef4,0xb9f07024,0xbacc3071,0xbaee1be5,0xbaf8ab64,0xbaa423b5,0x3a8d7fe0,0x3b48616d,0x3b307f95,0x3ac59d4f,0xba14d747,0xba042eb0,0xb9dd6f34,0x3adce638,0x3aafc59c,0x3a1df2fe,0x3b8fbf44,0x3a09b6d7,0xbaa0d85a,0xbb58f41f,0xbbdd4850,0xbbc54aca,0xbbc2bb9c,0xbbd5703c, +0xbc05985c,0xbc258d78,0xbc19a208,0xbc14a080,0xbbd7ad05,0xbb2b0ae6,0x383f239b,0xbae2e6c2,0xbb88c798,0xbb8bebba,0xbbb62259,0xbba8ef8d,0xbbbfd04d,0xbbaf6598,0xbb99fa28,0xbb72b5b4,0xbb2050ee,0xba14bd0d,0x3a2b7ad6,0x3b1496d3,0x3abcd73a,0x39d774a5,0xba4bd2d3,0x38757d0b,0x396afd22, +0x3ab29651,0x3b7ad7b5,0x3b5cd523,0x3b5b6768,0x3ab2b62a,0xbabb5d62,0xbb8e5764,0xbb7252fd,0xbbbe865c,0xbbf8d0af,0xbbdb9378,0xbbcf8bec,0xbbb39098,0xbbcda176,0xbba4f20c,0xbb2f1a0d,0xbaef393f,0xbb5bb4c5,0xbba2babf,0xbbb59889,0xbb935fa5,0xbb999930,0xbb877ab5,0xbb77825d,0xbb65457e, +0xbb081ca2,0xba828bf1,0xb8bec874,0xba19e48d,0xb9a7d27e,0x3a55f632,0x39c5080a,0x3a0e7365,0x3908e33f,0x3a9945c6,0x3a0b79ad,0x3b477ac3,0x3b67947e,0x3b156ca0,0x3b1e9d4c,0x39c5d48f,0xba4ffb25,0xbb18a6f6,0xbb72f923,0xbbceff2f,0xbb570ae9,0xbbc9a2d3,0xbb54fd8d,0xbb91ad3d,0xbb288278, +0xbb0c31b2,0xbb020f53,0xbb8bbc17,0xbb8f1a51,0xbbbf209e,0xbb915951,0xbb7e1a28,0xbb30f5d9,0xbb0f711d,0xba990f95,0xb9d32297,0xba8b7849,0xbac936cf,0xbac3561d,0xba58f552,0xb93513bb,0x39e58749,0x39eba502,0x39ce78b0,0x39a9c555,0x39b55622,0xb9779550,0x38f3c1a1,0x3b1c10f2,0x3a8d5174, +0x3a8fd4dd,0x39b2d2e7,0x399d471b,0x366b5aff,0x38e1937c,0x3a1c9d20,0xba037fee,0xbac68b00,0xbba344f2,0xbb58758f,0xbb932cad,0xbbb6b197,0xbba2d4d2,0xbb9fa819,0x3a624445,0xbb2c6443,0xbb17f4d7,0xbb06b474,0xbafa7fed,0xbaf95cc3,0xbaed5a98,0xbad3d9fb,0xbab46ae2,0xba8df547,0xba873375, +0xba96c7e0,0xbaac84b9,0xbab05d25,0xbaabb64f,0xba9c7e29,0xba941306,0xba86c4c3,0xba5a1e99,0xbabc5c17,0x3ae9a477,0x3b5bc7dd,0x3afd3903,0x3ad117f8,0x3b46b3ef,0x3ab04e6e,0x3ab00b00,0x3a53c9c1,0x3a120ed4,0x3aab81d8,0x3ad20523,0x3a94b6ca,0x3af257b8,0x3a1a6b7a,0x3a184bac,0x3afc3b54, +0xbaaa1ce5,0xbb7d5762,0xbbbd5a01,0xba75fb4d,0xbb118791,0xbb29c33a,0xbb2cb652,0xbb4fd2ac,0xbb4fd030,0xbb2c6ae4,0xbb33e366,0xbb2f57c3,0xbb18aafa,0xbb2ebd3b,0xbb37b751,0xbb472fbb,0xbb3398ab,0xbb2fa698,0xbb1f1775,0xbb13f1cf,0xbb092a27,0xbafbc974,0xbbb006c3,0xbb9a3fd7,0x3ad846c2, +0xbbb86324,0xbba5fd8a,0x3adbb3a9,0x3ab4240b,0x3abb94cb,0x3a792b4a,0x39ac227a,0xb89345cb,0xba82b68b,0xbb9f4c6a,0xbba9974b,0x3a500672,0xbb960658,0xbad04063,0xbb03e3e3,0xbb02d2d7,0xbb706c74,0xbb7ecd86,0xbbda27b0,0xbbe20e00,0xbb934c4d,0xbba1d488,0xbb9cc95b,0xbb82d674,0xbba0e21e, +0xbbbd3f49,0xbbe37a74,0xbbcadccf,0xbbacfa8c,0xbb7a9302,0xbb39e845,0xbb01fb26,0xbb03720c,0xbb6bbf22,0xbb69db4d,0xbb242385,0xbba82c3c,0xbb865c53,0x38f5b731,0xbacf4208,0xbace522d,0xbaea85ec,0xbae8a73a,0x3902d455,0xbaf69b4a,0xbabb2dd2,0xbb0c4878,0xbb4134c6,0xbace7eb2,0xbbafeeb1, +0xba109d07,0xbad93935,0xbb99005d,0xbb9adbe1,0xbc1697f4,0xbc25b883,0xbbb72e23,0xbbde465d,0xbbbeaedf,0xbb983ace,0xbbca106f,0xbbf7fa50,0xbc0e3b18,0xbbfc637d,0xbbdf66f7,0xbb9e1082,0xbb5a491f,0xbab29271,0xbb408ca5,0xbb9efba4,0xbb5bfcdf,0xbbb2e7b9,0xbb8f2130,0xbae3ab6e,0xba395dbf, +0x3ad1e311,0x3a5b28e9,0xbb0133b5,0x3a626cba,0xba9af917,0xbaed0c8d,0xba0a600a,0xba4066de,0xbb48846b,0xbb46b498,0xba3f2fac,0x3b656b7e,0xb9cc7e99,0xbb99babe,0xbba18f4c,0xbc546ee9,0xbc74a9b9,0xbbeb7250,0xbc1a6d62,0xbc06f3f2,0xbbbb5eb8,0xbc138368,0xbc31e524,0xbc790732,0xbc573494, +0xbc292a0f,0xbbcb7c12,0xbb2e997e,0xb9a60192,0xbafc0ac8,0xbb3c346a,0xbb1764ad,0xbb6d11a0,0xbae43687,0xba7863f2,0x3b74386c,0x3b68e87a,0x3bd26ddb,0x3b6b017b,0x3ba46d25,0x3b50672c,0x3a11d767,0x3b1e722d,0x3b1adf5c,0xbac58bd7,0x3aa08ace,0xbb78dce5,0x39c1a600,0x39eda010,0xbbb99528, +0xbba3b04a,0xbc7cd8b8,0xbc858bd4,0xbc0fc965,0xbc2f7612,0xbc068c4a,0xbba98b27,0xbc017c41,0xbc338675,0xbc569525,0xbc589dd3,0xbc2d431d,0xbbec9f0d,0xbb7dec7e,0xba526f01,0xba7a7c8e,0xbb7f03bc,0xbabf69a9,0xbb7bc137,0xba7474a3,0x3b01b09f,0x3b8c3ef6,0x3c0608b8,0x3c0a348b,0x3bb8caee, +0x3b8bfb0b,0x3b868d7f,0x3ab64675,0x3b822d77,0x3b932791,0x37fc3272,0xbb14cddd,0x3c3ef7b0,0x3ad65aa6,0xba9eb62b,0xbbdfa1f0,0xbc2a1178,0xba38ace4,0xbb264a80,0xbc737d34,0xbb69f871,0xbbbfb82a,0xbc670d1b,0xbc360045,0xbbd1f930,0x3b899ecc,0x3b9a3032,0x3b9b0f85,0x3bc08b49,0x3b5882ea, +0x3a32ff7a,0xba8cb68c,0x3af76307,0x3b8e798c,0x3b3547fc,0x3b04874c,0xb9ae10a7,0x3b81a12f,0xba526ab4,0x3b3348c4,0x3c61afdd,0x3bceba1e,0x3b082b20,0x3a452f4b,0xbba95cd5,0xbc03afd0,0xbb2be688,0x3be45352,0xbcdba891,0xbc17231c,0xbaca5098,0x39e07ee9,0xba917458,0xbb050946,0xbb468a54, +0xbbebdf86,0xbbfd34d9,0xbba858a9,0x3b961624,0xba68ed57,0xbb14efba,0xbab6a8c0,0x39cf33cc,0x3a81c585,0xbb7a6899,0xbbb46558,0xbb555c07,0xba8571f9,0x39929b7d,0xb92d31d1,0x3a547a90,0x3a804e01,0x3af1c7ba,0x3b28e116,0x3bd56939,0x3bdd4576,0x3b9560b3,0x3b3065d9,0x3b46fa36,0x3b757543, +0x3b3c1b40,0x3b5fb32e,0x3c2b042f,0xbc98ca35,0xbb3019e4,0x3b959cbe,0x3c05bfe2,0x3b875e16,0xbac12722,0xbbcbd8aa,0xbc44a199,0xbc9d8349,0xbc4a3113,0xbbc46342,0x3b5e579a,0xbb073165,0xbb2b61db,0xbad822f1,0xba285669,0xba808745,0xbb0a9a57,0xbb29eac1,0xbb3ab853,0xbb2ac573,0xbb1ea456, +0xb91180ba,0xba3cdef1,0xba7dc618,0x3a7668fc,0x3b563e11,0x3b337d7d,0x3b898d08,0x3b0055cb,0x3b316c4e,0x3b24bd15,0x3aa9c8aa,0x3b8021e9,0x3b9e95d2,0x3bc971a6,0x3a16bbb3,0x3c1f6692,0x3c150b0e,0x3b90bfc1,0xbb3e6dbe,0xbc796faf,0xbc37d4a7,0xbc3b4ade,0xbc1cdbf7,0xbc0ff272,0xbbe57327, +0xbb24121e,0xbbd261fc,0xbbdc792c,0xbbb37acd,0xbb3e8b12,0xbaed48d7,0xbac20013,0xbac5ae63,0xba29035f,0xbac7c7cf,0xbb649de8,0xba9c7cf3,0xb9fb197d,0xbaf60c33,0x39403d19,0x3b0ab5e4,0x3ad432e9,0x3ae8fbd6,0x3a83b1c4,0x3b4c7fd2,0x3b26a700,0x3aaf09b0,0x3af24073,0x3b72851b,0x3b0f3d03, +0x3c171505,0xbc1a7dcd,0xbc21890c,0xbc59e034,0xbc4f0054,0xbc794e5c,0xbc0a7205,0xbb0454ff,0x3c100473,0x3a7a62f1,0xb98fc803,0x398fe8c7,0xbba5ada3,0xbbcb69b9,0xbb88073b,0xbb234d89,0xbafd5b8e,0xba9bb2e8,0xba344ed6,0x3a3e5f88,0x3a3a601a,0xb87c086b,0xba1331da,0xbaae1a02,0xbaebb13e, +0xbaa3f94f,0xbafb1b5e,0x3a9110b5,0x3ad77901,0x3a39bf5a,0x3a0ccf21,0xba12d29e,0xbb182f3e,0xbb1d269f,0xbb5eeb09,0xbb5071de,0xbc11ae9c,0xbbcf9f48,0xbc06c50b,0xbc65afe8,0xbc8ed0a7,0xbc568f3c,0xbc756ab5,0xbc8b1be6,0xbc9bce2a,0xbc4121ce,0xbc34b243,0xbc4eb828,0xbbf5722a,0xbbad531b, +0xbb95abb1,0xbb15ac2e,0xba3f4f2a,0xb943c2c0,0x39c26a12,0x3a08130a,0xba8664ba,0xbb3d488f,0xbb0a9893,0x3a3fe564,0xb9a52a91,0xba47e931,0xbb65417e,0xbb55640f,0xbb563fce,0xbb72509d,0xbb52521f,0xbb643d91,0xbb9eb743,0xbb8a3291,0xbbac925f,0xbbf720d1,0xbb6aa3f9,0xbb9eba93,0xbc298a48, +0xbc13c559,0xbbf7d7c7,0xbbb762d6,0xbbaa775c,0xbb580050,0xbb568b0d,0xbb315a03,0xba9d9289,0xba04a4e6,0xbac93090,0xbb096391,0xbad38ca0,0xbb473d79,0xbb5051f9,0xbb1b185f,0xba78091d,0x39966bc4,0x3ab86fdf,0x3a8d2227,0x3a8f3893,0xba11957d,0xbaad7d13,0xbb3cb9a4,0xbbad2501,0xbb97df89, +0xbbc76d4b,0xbbcefd33,0xbc03695b,0xbc1ba399,0xbc368388,0xbc4b522c,0xbc3fb740,0xbc418e4c,0xbc21aab4,0xbbcb89c7,0xbbb4512d,0xbbad284c,0xbbc0d7fa,0xbba1ed57,0xbbd1b843,0xbbfe22b6,0xbc0d57f1,0xbbdb9a77,0xbba8f424,0xbb6eb2b1,0xbb176991,0xbaa4890b,0x3903c982,0xba6679f2,0xba7d7578, +0xba2e678a,0xb988478d,0x3a09575a,0x3a0b0252,0xb7655b4f,0x3a900898,0x3ac32a97,0xba8632b7,0xbb1aa34f,0xbba80110,0xbbd10792,0xbbe37690,0xbbfcceb8,0xbbfd59b3,0xbbfa599b,0xbc0696cb,0xbc041371,0xbbf8e90f,0xbbee6311,0xbba779b5,0xbbf7af1f,0xbbcbad91,0xbba60955,0xbbcd42e0,0xbbe063cc, +0xbbe2857a,0xbbda35a2,0xbbeefd5c,0xbbc6954e,0xbba52ef1,0xbb845de4,0xbb239663,0xba9fdb2f,0x3950ffbb,0x3a0629f8,0x3a31d210,0x3a2a0b15,0x39fdbc56,0x3a956524,0x39b08716,0xb9d874d1,0x3a09ae9d,0x39c02534,0xbabc6dac,0xbb66d9e8,0xbbcefd36,0xbbae8cc5,0xbbf2bc66,0xbc11a14b,0xbbe1492c, +0xbbdd2460,0xbbb6ded0,0xbbc991d8,0xbbab4c59,0xbbbc7d5a,0xbbcee152,0xbbb4a0cd,0xbbaef24a,0xbbbcee1a,0xbba1cda2,0xbb766004,0xbb8059cb,0xbb5e1daf,0xbb4d0c36,0xbb019868,0xbab6eb7d,0xba2baf7d,0xb94a03bc,0x390151c9,0x39e632eb,0x38a1271f,0xb7905f45,0x39a42832,0x39c193bf,0x3a30e50f, +0x3966e928,0xba8e2917,0xbb173aaa,0xbb6b4954,0xbb84ee41,0xbb6e924d,0xbb6f2477,0xbb9323ea,0xbba57ff3,0xbb8f6402,0xbbbe1bde,0xbbacc6ba,0xbbe54ef2,0xbc0031cb,0xbbe07503,0xbbd4e15c,0xbbf6a7f2,0xbbae5daa,0xbb578234,0xbb4bb0d4,0xbb49e8d7,0xbb4c8af2,0xbb4eb874,0xbb44c69b,0xbb4a3855, +0xbb41ae5b,0xbb35ad0e,0xbb28cce8,0xbb19e19e,0xbb05bda6,0xbada2fcd,0xbac8d44a,0xbabcc5e8,0xbac4d5ac,0xbacf120c,0xbac68506,0xba9d0278,0xbb5e4369,0xbb5a05ee,0xb88fd53e,0xbb86d7c0,0xbb8dd886,0xba624a2e,0xba7a1ccd,0xba9ad0e0,0xbac2747a,0xbae2f5cd,0xbaf4a8e3,0xbaf4c5e5,0xbb88fcea, +0xbb8a6a00,0xbab5b2d1,0xbb933d1d,0xbb868c28,0x3b9aafc6,0x3bc56b2e,0x3b7eaed5,0x3b3b8cee,0x3b3c13ee,0x3b2d0313,0x3b5661d4,0x3b6bd6dd,0x3b800906,0x3b6cfde0,0x3b6a3c23,0x3b65cae6,0x3b514031,0x3b455752,0x3b36d167,0x3b437350,0x3b575d27,0x3b693d02,0x3b77cec0,0x3b640460,0x3b6ee2cc, +0x3b8752f0,0x3ae08e03,0xbbc72194,0x3b9b4628,0x3b19a258,0xbb9e9069,0xbb98965b,0xbb92dcab,0xbb70ca5a,0xbb81f5c8,0xbb714865,0xbb489354,0x3b17a826,0x3bb6a856,0xbb91a926,0x3a97ee8b,0xba6060d4,0x3bd62c29,0x3b73b580,0x3b56a853,0x3b20d08f,0x3b8b48fb,0x3bb3996e,0x3bdeb5d6,0x3bbf7435, +0x3bbb697f,0x3babd2d4,0x3b9094bf,0x3b77c8e4,0x3b537ad3,0x3b5474ad,0x3b84d5eb,0x3b9d95b1,0x3bb1651a,0x3ba94b97,0x3b96c772,0x3a4809bc,0x3ab45331,0xbaab5ffd,0x3b0c60ff,0x3b8bec66,0x3a8ab8f0,0x3b8039e2,0x3b5411ed,0x3b4ddf10,0x3b54c51b,0x3b7eb687,0x3a867cb0,0x3b31497c,0x3b4e2e63, +0x3ac5bb83,0x3b2eacdc,0x3bab15e1,0x3c014d3f,0x3b1f2c16,0x3b24a2c9,0x3a55f5f6,0x3b93493a,0x3bcf73a2,0x3c0bb7c3,0x3bee8297,0x3bdfc0e6,0x3bd0656f,0x3b9c8820,0x3b62693e,0x3b0e530e,0x3b478bd3,0x3b8d1939,0x3bd2d861,0x3be576d5,0x3be341ac,0x3b920b03,0x3acd9a91,0x3a717971,0x3af477f9, +0x3a88727d,0x3a891ec0,0x3bb2d239,0x3b5ddab6,0x3bd68c4f,0x3bcb3d0a,0x3b9d9681,0x3b88d912,0x3affb9e7,0x3b974512,0x3b974354,0x3ac3d105,0x3bca7b72,0x3bd2b8b3,0x3c05ef85,0x3b8270cb,0x3ad3745d,0xb5c435a4,0x3b872716,0x3c057f24,0x3c485413,0x3c28f851,0x3c185f40,0x3c06757e,0x3bc6f953, +0x3b7d4958,0x3b0476f8,0x3b36d0fb,0x3b91045f,0x3be32405,0x3c0e86b4,0x3c01ca92,0x3b9b097a,0x3b11e1a0,0x39bb95a3,0xbaf8ecbf,0xb8183dd8,0x3ac3c808,0x3b9e7d4c,0x3bd40fc8,0x3bc5cf07,0x3b83bc6b,0x3b9904cd,0x3b9c313f,0x3aff2401,0x3bb18e36,0x3b80eded,0x3b2c7a69,0x3ba0fa58,0x3be27583, +0x3c0ca427,0x3aa46fc9,0x3a4a23e3,0xbb2744e9,0x3b96643b,0x3c075c4c,0x3c4ebd87,0x3c33870a,0x3c259e62,0x3c12632e,0x3bd05977,0x3b642191,0x3a825c90,0x3b208bcd,0x3bb6bce0,0x3c17d088,0x3c30dca9,0x3c196b84,0x3b96486e,0x3a38a3a9,0xb85f6a3e,0xba7f7d51,0x3958740c,0x3b044798,0x3b87d871, +0x3be00f70,0x3c0837a4,0x3bc00ac4,0x3b92c91c,0x3b7ac5ef,0x3a412cf5,0x3bae93af,0x3bd3de95,0x3ad7dcba,0x3b76852e,0x3ca6c3a0,0x3c971b31,0x3c35b568,0x3be2ddec,0x3a8c27ac,0x3c68eaee,0x3c8da239,0x3c06d881,0x3c4445ac,0x3b91730c,0xbbb8c078,0xbbda2524,0xbbbf12e9,0xba741558,0x3b9ec4ed, +0x3bdb4c08,0x3b807288,0x3bea1125,0x3c179bb9,0x3c2094c3,0x3c03d02c,0x3bcea600,0x3b99bfd8,0x3b46f547,0x3abad2b4,0x3b5269e2,0xba147ed2,0x3b101dde,0x3c603938,0x3bd55961,0x3b24e5aa,0x3b1e2d5b,0xbbb539b3,0xbb953431,0xb7a8b611,0x3ca018c7,0xbc9b7d32,0xbb9e8c86,0xbbcf84a1,0x3addbab3, +0x3acd7328,0x3c093c55,0x3bbc901b,0xbae8f503,0xbaba3faf,0x39dbc007,0x3c07cde0,0x3b033529,0x3a18cfef,0x3b36b357,0x3c01cb94,0x3c462481,0x3c85484e,0x3c245e72,0x3be55235,0x3b8498a9,0x3a19c74d,0x3b438e15,0x3b367d6f,0x3b2c4b0d,0x3b1f862b,0x3b31151f,0x3bd7c4e0,0x3bf2657d,0x3b942ea2, +0x3b4f7796,0x3b25b99f,0x3b7fe1d7,0x3b916012,0x3bccaa8b,0x3c62ff41,0xbc552dcb,0x3b6d3b24,0x3c1804c2,0x3c1e7983,0x3c46030a,0x3c8d3fac,0x3cc159b2,0x3ca8f630,0x3c12a826,0x3a9ff54e,0xbb188f19,0x3be0c65a,0x3bb753a1,0x3c2995e7,0x3c64006c,0x3c53b231,0x3c26f34a,0x3b7f9ba5,0x3b4971d9, +0x3a3b791b,0x3b324d3e,0x3b0e6242,0x3ad33822,0x3b181c5e,0x3ad4c3ae,0x3b53b134,0x3b1b4774,0x3b79a4f6,0x3b358e62,0x3af5632c,0x3b585da5,0x3b6de52a,0x3b367cdf,0x3bb9d058,0x3bbf8979,0x3c0038a1,0x3b29d939,0x3c286542,0x3c2e912c,0x3c495a65,0x3c743ea0,0x3cd64d6d,0x3ce49ac9,0x3ce5093e, +0x3c6a1f17,0x3c19e31d,0x3bad089c,0x3c0b756b,0x3c2e9344,0x3c57e924,0x3c65c99b,0x3c4f6186,0x3c0fc394,0x3b20869f,0x3b1566f5,0x3abd9aea,0x3a71f16c,0x3ac05685,0x39aa0cc0,0x3a2f039a,0x39e7e281,0x3a98c036,0x3b0fef9c,0x3ac27d88,0x3af74130,0x3b2a8a09,0x3b310cbd,0x3b6f84a8,0x3b73cfae, +0x3b288eff,0x3b5971f1,0x3b7749f9,0x3c24e342,0xbc2e48a5,0xbb8e1383,0x3c08e2c9,0x3c950931,0x3cf357f3,0x3cd78ac7,0x3cba2754,0x3c58fa24,0x3c55ae4a,0x3c2bf170,0x3c32c03e,0x3ba3fffb,0x3b1568d4,0x3a85cc09,0x3bc95a63,0x3c0a0c01,0x3c1ff3e7,0x3bf1229e,0x3b94ec5f,0x3b529909,0x3aa932d3, +0x3a8763e9,0xb8eec091,0xb9acf88d,0xba313396,0xba894462,0x3a3a9345,0x3aa2d601,0x3a894037,0x3a379104,0xb9ae250a,0xbac81ed0,0xba9cedbc,0x39e01bc3,0xbb27cbf7,0xbbe97c45,0x3b801f32,0x3c05ad9b,0x3c9fa4a6,0x3c7dc3f9,0x3c78ec18,0x3c687eb6,0x3c45fdde,0x3bd24f24,0x3bf382d8,0x3bf298e0, +0x3c1a2fac,0x3c1d4958,0x3c1653cc,0x3c104abd,0x3b89bf43,0x3aea47bb,0x38dd5cc1,0x3a9ed10b,0x3b105e64,0x3b36c12e,0x3b028b9c,0x3ad6bf37,0x3a818537,0xb99318fb,0xba8a4d6d,0xbb09f9c7,0xbb15c435,0xbb46c5ff,0xbb08635b,0xbaa49813,0xb96ad63b,0xba24d884,0xb99749d5,0xbb867bea,0xbaef6d5f, +0x3a118c19,0xbbf9bf0c,0x3b8e230d,0x3bc740ec,0x3be4b052,0x3c05426f,0x3bdcff1e,0x3bdc2aa1,0x3c119e29,0x3b3ab04e,0x3a192473,0x3a2be648,0x3b005059,0x3b885934,0x3bab2bea,0x3b80d473,0x3b6f145f,0x3b2e5892,0x3b276b3a,0x3b0352c2,0x39d19084,0x3aba3b85,0x3aed158c,0x3b5daddc,0xb9183913, +0xbaf35415,0xbb7f2b4f,0xbb91733e,0xbb9faea1,0xbba56c92,0xbbcfe85d,0xbbf3ad64,0xbc15f964,0xbc2322a6,0xbc0d0048,0xbbf404d7,0xbb20cead,0xb9dc641f,0x39d6a4dc,0x3b3bb78f,0x3ad7433f,0x3a865bb5,0x3aa997de,0x3a9f2363,0x3b355f95,0x3a23800c,0x39f87428,0x3a88d4b2,0x3b091291,0x3b1cd62a, +0x3b4df2b7,0x3b208ec7,0x3aa8fa2c,0x3a9cad9f,0x3afe48c9,0x3b157455,0x3b3872e4,0x3b32b66f,0x3af9193a,0x3b38aa5d,0xb9ca79b5,0xbb3d2fca,0xbbbf90ba,0xbbbf1a5d,0xbbe8e576,0xbc03568f,0xbbe6da75,0xbbe3fb4a,0xbbe07b0c,0xbbcf752e,0xbbb05222,0xbb815e20,0xbb0b7115,0xbb5d9878,0xb92f2a9c, +0xba87fc35,0xb9b296d5,0x38970f1e,0x3a1cc316,0x3a53003d,0x3a5200cb,0x3b04b0d2,0x3b282497,0x3b266b3e,0x3a36ae8b,0xba03bc98,0xba9de9f6,0xba26c668,0xb8d731a7,0x399a28fe,0x3a6f8218,0x3ac6c1d0,0x3b2afc6f,0x3b29de36,0x3a9d08be,0x3afadfca,0xba08658d,0xbb0ed146,0xbb887b2d,0xbbb16b35, +0xbb8c9f73,0xbbaef809,0xbba00815,0xbb9daed3,0xbb99a78d,0xbb0a6d04,0xbb31c740,0xb96bde82,0xbab3c15a,0xbbcc8b05,0xbb00b2ef,0xba9310f1,0xb9b49cca,0x39e85b62,0x3a9633bf,0x3b135eda,0x3b5d6ada,0x3ad578ba,0x39afaa97,0xb944adb6,0xb8c09c7c,0x392da558,0xb8db1dc5,0xb9365dda,0xb9df41a4, +0xba4dd6bd,0xba6006ce,0xbade2a59,0xba5bb4b3,0xb98eaa90,0xba088ffc,0xba513365,0xba4d32de,0xba42648e,0xb9b668f8,0xba2d44e9,0x3837befc,0xbaf76bf6,0xbafb74fb,0xbb196bf1,0xbb9c0538,0xbb5f71e3,0xbba9541c,0xbbeecea3,0xbae4e67b,0x3a567fa1,0xb62afb8d,0xba026370,0xb91c118e,0x38194537, +0x39016416,0x38dcd942,0x39bacfb8,0x3a034384,0x3a427685,0x3a18a32c,0x395bc6c0,0xb96d8b4d,0xb9fa5891,0xb9996d68,0xb8f7d98e,0x3800f7ad,0x39748aa9,0x39beb330,0x396b2d9f,0x3abf55cb,0x399a1b56,0xbb542099,0x3aac24f9,0xb904e59c,0xbb95d1e9,0xbba8eb31,0xbb9d5040,0xbb95f956,0xbb9ae3fb, +0xbb8a0558,0xbb6aa632,0xb90602b4,0x3a8ded58,0xbb7628c8,0xba9a0e60,0x38b10068,0xbbded55e,0xbbc9a2c2,0xbbd4d5d4,0xbba1fcde,0xbba76979,0xbba168d1,0xbbb8c126,0xbbbdd49b,0xbbb1d6ee,0xbbb4f9ed,0xbbb4b5e4,0xbbab26e8,0xbbadc97b,0xbbb2d694,0xbbbe0f65,0xbbb9df5c,0xbbbc9def,0xbbb476e2, +0xbbad8467,0xbb9906b6,0xbbb3a9aa,0xbb5379b4,0x38ebb72d,0x3bf33c12,0xbba4a393,0xb9f141a4,0x3c00d66d,0x3bf91a5c,0x3bed404a,0x3bcab252,0x3bef79f7,0x3bdcc1b6,0x3ba85492,0x3a2ed9b9,0xbba72407,0x3bc2daec,0x3ad15ec2,0x3c04a5f8,0xbb833f92,0xbbb2cf37,0xbbce329c,0xbbbdffa5,0xbc137cce, +0xbc1e8e77,0xbc064050,0xbc0c5858,0xbc0d38b6,0xbbfe6203,0xbbfe088b,0xbc097844,0xbc21c72b,0xbc1d7443,0xbc17cb6b,0xbc011a76,0xbbcec634,0xbbb808ea,0xbbdc6816,0x39ad9152,0xbb29e282,0xba159725,0xbb0722d8,0xbb9776d3,0x3b006ef9,0xba90c451,0x3aa2546a,0xb9b01336,0x3a150dbc,0xbb48828f, +0xb98bb96a,0x3a2bf2ef,0xba2cf357,0xba10c59d,0xb9223b8d,0xba04d559,0xbbda3c27,0xbbb078c8,0xbbdfd606,0xbbb8d81d,0xbc2e099c,0xbc40dbb8,0xbc14a899,0xbc29b6ae,0xbc1bf524,0xbc0d666a,0xbc0a043d,0xbc203878,0xbc3d294a,0xbc433df6,0xbc39ded9,0xbc26af19,0xbbe10bd4,0xbbd42563,0xbb667330, +0x3a59eb58,0xbb0cdae7,0xbb959929,0xbb1bb8fe,0xbaa15ca4,0x3925ee12,0x3aa96505,0xbb6d4d3f,0x3a45cc96,0xba25110e,0x3a7bdbae,0xbb2644ce,0xba2f2d7d,0xb983bcc3,0xba86d912,0xbbad81d6,0x3bb6e8fd,0x3b4a357b,0xbbbbaa0d,0xbbcac250,0xbbaf9296,0xbc597fa0,0xbc845788,0xbc3bf4f6,0xbc64c662, +0xbc529645,0xbc2f096c,0xbc338593,0xbc46e30e,0xbc8bb095,0xbc8d9f68,0xbc7ced1d,0xbc40eef4,0xbbebb775,0xbbaf9d9b,0xbb89cdd9,0xbb1bdcdf,0xbbb7d332,0xbb42dd38,0xbb8cd1a9,0xba42b51c,0x3b07c5d9,0x3b73853d,0x3ba8e702,0x3b57cb75,0x3b64fcf3,0x3b75c32d,0xba2b1757,0x3b8f74f2,0x3b2692d4, +0xbb106597,0x3a33ac16,0xbba799dd,0xbb27cc1f,0xbbd157f5,0xbbd163da,0xbb901861,0xbc654c47,0xbc8116f7,0xbc4447da,0xbc6bab61,0xbc4bba74,0xbc25cb27,0xbc199f4c,0xbc49f03d,0xbc814b2f,0xbc93ca3f,0xbc8910d4,0xbc6943bd,0xbc08c08f,0xbbbce8d6,0xbb523ff9,0x3b2e5b5e,0xbb3be94a,0xbb559d13, +0xbb23262e,0xb8f5dc9b,0x3b8d479b,0x3bc980c5,0x3bf0f368,0x3ba0a147,0x3b91c783,0x3b603659,0x3a72ed5a,0x3b735a99,0x3b6f7046,0xbb184c68,0xb926689a,0x3c9e3e53,0x3b9691c1,0xbc0f3cdf,0xbc5b7159,0xbca12775,0xbc1e7a3d,0xbc2df616,0xbca7d265,0xbc37ebc1,0xbc4b270a,0xbcab53de,0xbc9ae5c8, +0xbc6e6505,0xbbae9562,0xba824881,0x3a73b5c4,0xbb1feef9,0xbb306653,0xbb970980,0xbb3b44d0,0x3b4e55a7,0x3a340fb8,0x3b25687d,0x3a354f91,0x3a07f18c,0x3af16b2c,0xba86673c,0x3b18befe,0x3c5b7859,0x3b881149,0x37dc41df,0xb80bbaff,0xbc106491,0xbc04b7d9,0x3b8c3e20,0x3c2bf9bb,0xbcd035e7, +0xbc81df3a,0xbc656f64,0xbb8d2399,0x3b43d707,0xba7ca162,0xbb0974e6,0xbb8da48b,0xbc0b7d80,0xbbf318af,0x3b830a6f,0xb9deb2e9,0xbae69793,0xbb0d67bd,0xbb2cf0a7,0xbb8714b0,0xbc3ae7b5,0xbc06d1b7,0xbbf7eefd,0xba237f0e,0x3b876d49,0x3a94cea9,0x3aa9ed4c,0xb977a416,0x3994396e,0x3b2c27b2, +0x3bbdc3f0,0x3bc88c96,0x3b6530fd,0x3b1e79b6,0x3b089951,0x3b22888c,0x3ba9d1a1,0x3b834ae4,0x3bcb0d36,0xbc930977,0x3ac126a0,0x3b9534de,0x3bc09af5,0x3aaf0edf,0xbb912fde,0xbb8d4e02,0xbc1ca95d,0xbcbb0a7f,0xbc9568e7,0xbc602b24,0xbb547a69,0xbc0520ea,0xbbf600d9,0xbbd8a4ed,0xbba0282f, +0xbb7f17b1,0xbba4b518,0xbb88629a,0xbba9becc,0xbb979afd,0xbae6a68a,0x38c31408,0x3a8f4192,0xba81fd89,0x3aacaa9c,0x3b231620,0x3b2bbefa,0x3b3b416a,0x3a87b503,0x3b2758cf,0x3b3c6a53,0x3b500104,0x3b576d75,0x3b756ccc,0x3b7ded1b,0x3b7d6270,0x3c3766b5,0x3c0a612c,0x3aa68844,0xbbb793e0, +0xbca7c8c1,0xbc3f9557,0xbc51a5dc,0xbc9a5468,0xbc525b0f,0xbc2c17be,0xbbf17881,0xbc21fbdd,0xbc122749,0xbc01f450,0xbbb61f0e,0xbb7579e0,0xbb6bedfa,0xbb2b3d5f,0xbb829282,0xbb1ca482,0xbb28ce25,0xbab7dd01,0xbad03ca4,0xb9df35d8,0xb946caf0,0x3ab82d9f,0x396d8379,0x3a447ac9,0x3ac5da3b, +0x3b078427,0x3b3ff4bb,0x3b6a8a7d,0x3ac7d47b,0x3a8dd262,0x3b5093b4,0x3bf80e2e,0xbc1f6e76,0xbc22ee7f,0xbc7cd85d,0xbc6a07fe,0xbca8ea58,0xbc63dd37,0xbbf8375d,0x3b3131ba,0x3b850860,0x3bb8c9fd,0x3b1f989e,0x38b9c141,0xbb543bd7,0xbafb050e,0xbb40ee1a,0xbb493b29,0xbb91402d,0xbb85081e, +0xbb4ad000,0xba1d053d,0xb78d6cd9,0xba8da7f3,0xbad79de5,0xbb327f61,0xbaf93948,0xbb067f89,0xb9b22a3e,0xb825c60c,0x3915086d,0xb9f11e80,0xba9cd110,0xbb13c703,0xbace694a,0xbb32306f,0xba04d330,0xbc0fd333,0x3baf141d,0x3acec776,0xbc8ce0e4,0xbc980212,0xbc84e939,0xbc86bd5d,0xbc8eb887, +0xbc89c3f2,0xbc46a035,0xbc3f040f,0xbc64f054,0xbbf57ca6,0xbbc9186d,0xbbaf25e6,0xbb01e301,0xb8bda47b,0x399b4811,0x3b13047d,0x3a6ba271,0xbb1c9251,0xb9ba238f,0xba4b742c,0x3a4a450a,0xba44acde,0xbae52061,0xbb304679,0xbb682716,0xbb7aef26,0xbb4c7426,0xbaf9ab51,0xbb087036,0xba9df27a, +0xbadd0b0a,0xb8912902,0xbaacd609,0xbaa2892b,0x3a4cb5fd,0xbc17d6da,0xbc1c2554,0xbbf307d9,0xbc0612c7,0xbbff6d62,0xbbe6e286,0xbbef276e,0xbb8edd5f,0xbab7bde1,0xb9038cde,0xbabb3036,0xbaf64646,0xbac0da68,0xbb7276b4,0xbb857ec8,0xbb55b43f,0xbb1678c9,0xba58acb5,0x3afb394a,0x3abd8871, +0xb9a4e4ae,0xb9a82946,0xbb3a6e0f,0xbb805d74,0xbb9b28ea,0xbba6d473,0xbbb66361,0xbbd9551f,0xbbf43cbd,0xbc162b9b,0xbc23093c,0xbc30ceda,0xbc3e738c,0xbc2f2d6a,0xbc178563,0xbb098d49,0xbb433bf0,0xbbcfd3da,0xbbb80ae8,0xbba14c9a,0xbbc6d721,0xbc011a41,0xbc26934b,0xbbfe0840,0xbbc6fb39, +0xbb7b2cd8,0xbb4f8ed8,0xbb2e5bbe,0xbad7f793,0xbb2336e6,0xbb0aa98d,0xbac61d62,0xba9f04a0,0xba3afb89,0xb9b3a1ff,0x3a92b01e,0x3ad76740,0x399340ba,0xbaa984f2,0xbb7e53a1,0xbbd13594,0xbbd725b3,0xbbddb00b,0xbc043bb7,0xbc04900b,0xbc02f76c,0xbc06d7ea,0xbc062db9,0xbbe8053b,0xbb86742c, +0xbb36eebc,0xbb31ffc2,0xbbaf01dc,0xbba7e595,0xbbb8636c,0xbbe06669,0xbbed7b3e,0xbbef846f,0xbc026648,0xbbd9777e,0xbbc563b4,0xbbaf7dd4,0xbb88f898,0xbb490e6d,0xbaf38543,0xbac10779,0xbaa1243e,0xbaac6671,0xbaa2b411,0xbaf4b54e,0xba850d5c,0xbab5c7ba,0xba41e717,0xbaa89805,0xbb2a5a3a, +0xbb90f9fa,0xbbe06b59,0xbbc23e0c,0xbc1542d3,0xbbdd8be9,0xbc003d00,0xbbcace7e,0xbbda5931,0xbbb97563,0xbb174c85,0xbb63b857,0xbb99ba79,0xbaaa32dc,0xbba86aac,0xbbb92052,0xbbbd61d7,0xbbb0f2e0,0xbbd01fcc,0xbbdd281f,0xbbfaf6c1,0xbbd161af,0xbbabca7c,0xbb848707,0xbb538545,0xbb221144, +0xbad5db39,0xbb0b3a84,0xbb16ff02,0xbb19e49a,0xbb160219,0xbafb3188,0xbb423f7a,0xbae5e332,0xbb536457,0xbb652cd6,0xbb85dbf1,0xbb43a11b,0xbb30e6b6,0xbb3dd20b,0xbb50f8da,0xbb19e269,0xbb7313b1,0xbb96e6b8,0xbb4c6065,0xbbae8638,0xbba75c6c,0xbb3ad7da,0xbbd6cb43,0xbb9104f3,0xbbae85fc, +0xbb9d53f2,0xbba2f8f2,0xbba65959,0xbbab8a12,0xbba66db6,0xbbab9b0e,0xbba245a9,0xbba197bd,0xbb9eb371,0xbb9739e4,0xbb8e2e11,0xbb819175,0xbb7fabed,0xbb7b4080,0xbb802849,0xbb833514,0xbb804100,0xbb89c748,0xbb75e828,0xbabb7c9b,0x3b1a7a3d,0xbb8f143c,0xbb12915b,0x3b012ca0,0x3b0e00af, +0x3ad01f7e,0x3a97d18f,0x3acd7517,0x3aaff540,0x3a30cb69,0xbb1a31d7,0xbb8a1690,0x3ad5741d,0xbaae7f78,0xbbe78ebe,0x3b860bdb,0x3b45cceb,0x3bc6e7ed,0x3b4b0e0e,0x3b42d450,0x3b33b9a6,0x3b4f29b4,0x3b6483f4,0x3b816f09,0x3b719c10,0x3b73efcb,0x3b78ce16,0x3b6fd5f4,0x3b6754d8,0x3b5608b3, +0x3b5ef00a,0x3b6b5d3d,0x3b722a59,0x3b80c40a,0x3b631416,0x3b92b4d7,0xb8b276ce,0xbb7470de,0xbc14dba8,0x3abc8661,0xbb54298f,0xbc0a6804,0xbc0c6ccb,0xbc04ff27,0xbbe5ab09,0xbc0e1c85,0xbc098495,0xbbfb950e,0xbb7a148c,0x3b226515,0xbc014d7e,0xbbaae8f5,0xbc0f3152,0x3ba0eb8f,0x3b85390d, +0x3b443ab1,0x3b0cf0b5,0x3b4fd933,0x3b8ce7f7,0x3bd072c5,0x3bb371ad,0x3bbac047,0x3bb12104,0x3ba843ab,0x3b96eb93,0x3b695184,0x3b6407c3,0x3b858476,0x3b978d8e,0x3ba279f0,0x3ba96520,0x3bc062b5,0xbb818430,0xbab169b6,0xbb6a0245,0xbb23dc49,0x3aff0c0c,0xba94fb3f,0x3a440654,0xbab8a306, +0x39bec521,0xb94f2865,0x3ba42149,0xbacdcf74,0xb9f886b0,0x3603b619,0xbb2ae2f2,0xb8dd6d94,0xbaca5979,0x3c0ba11a,0x3b41ae13,0x3ae3be3f,0x39d34c1b,0x3b1be135,0x3b6aae88,0x3beca4ec,0x3bc2976c,0x3bd0ffcd,0x3bd43536,0x3bcaf8b8,0x3ba5c628,0x3b3ccbb7,0x3b769846,0x3b86b36e,0x3bbe9ec7, +0x3bb8cbe9,0x3bf39e2a,0x3b2d6cfb,0xbb9e5294,0xbae14a56,0xba69078a,0xbb29b881,0xba902f7b,0x3b4115e2,0x3a9ce612,0x3bd472d3,0x3af9c716,0x3b9112f9,0x3a65cb45,0x3a647c0b,0x3b3b10c6,0x3b0409fc,0xbb536e76,0x3b966936,0xba5a7b6d,0x3ba54154,0x3bab407e,0x39ca3d73,0xb9adf3bf,0x3a6b1431, +0x3b882380,0x3c2978ec,0x3c0b8dbf,0x3c10dbf2,0x3c07c962,0x3bffc04c,0x3bbf49b9,0x3b07ae39,0x3b392b19,0x3b70488a,0x3bbd1ec6,0x3beecdb3,0x3c058a14,0x3b8e9761,0xba0bf4f8,0x3a5ce8a0,0xbb4dd268,0x3912839c,0xba895483,0x3bb619a7,0x3b3e9f5c,0x3b932bf3,0x3b5cf0fe,0x3bc15009,0x3b8aa537, +0x3ad364e8,0x3b33264c,0x3b211706,0xb9659b6a,0x3b5a6130,0x3b92fb65,0x3bc525cc,0x3b66e994,0xba90e503,0xbb1b1b59,0x3958b006,0x3b1c93a5,0x3c17e05e,0x3bfd168c,0x3c123b9d,0x3c226f3c,0x3c1762d7,0x3bddb962,0x3b0ac445,0x3b5003a0,0x3b99ca36,0x3bf1b993,0x3c07fc16,0x3c120578,0x3b9a45e9, +0xbbcafd0c,0xb9584cac,0xbb3957df,0xba6db285,0x3adc97cc,0x3b89025e,0x3be63d9e,0x3bf2ad45,0x3bc8764c,0x3b8e932e,0x3b979d8f,0x3a2e2765,0x3bbbae00,0x3bc2f7a6,0xba5a07ee,0xba26dabf,0x3c638242,0x3c305d5b,0x3c6064e0,0x3bc27ad7,0xba4b36a8,0x3c230953,0x3c5f9bff,0x3c00a4a6,0x3c6f60bc, +0x3c1cc379,0x3930af7d,0xb97c179d,0xba5f9bd4,0x3900a677,0x3bbc8255,0x3befbcc8,0x3c0c3b7f,0x3c153206,0x3c261417,0x3c0a0aca,0x3b79841f,0x3bcd9758,0x3afea638,0x3b7d3b27,0x398d18ed,0x3ada21e9,0xba6c1fb4,0x3b10a927,0x3c4e71d0,0x3b949a49,0x39b10260,0xba12eb89,0xbc11047b,0xbc01476e, +0xba931acd,0x3c8c5666,0xbca797ea,0xbba491f7,0xbb8f12e6,0x3a1e91a2,0x3bc687ad,0x3bae4f8c,0x3aba61d7,0xbb0891e0,0xbb819e62,0xbaa0a054,0x3c1b9da6,0x3a3258c6,0xba8ade1c,0x3aadf261,0x3bc0c1d6,0x3c1f5d4a,0x3c4ee2a9,0x3be69848,0x3be93717,0x3a9fdda4,0xbabc38f9,0x3b2098ad,0x3b0f668b, +0x3ae4ed80,0x3b11d159,0x3b765620,0x3bc3f09d,0x3bcc90ec,0x3b5650e4,0x3b24bdb4,0x3b1abbc9,0x3b5e1360,0x3bb1d4f3,0x3be0523c,0x3be97e21,0xbc77e862,0x3b7c9ddd,0x3c274df4,0x3c1cc6e2,0x3c0fc860,0x3c4af4d7,0x3c95d50f,0x3c9149ff,0x3bc34ec2,0x3b9ab5d0,0x3b24a7f3,0x3be932a3,0x3c0b9e61, +0x3c4506ed,0x3c6a1955,0x3c66c1c7,0x3c2ab8eb,0x3b5fdca3,0x3b35dfd2,0x3b3c6c4d,0x3b04b1bf,0x396e143c,0x3aaebd39,0x39e728d4,0x3b168597,0x3b41eee8,0x3b0b2c0a,0x3b47ba90,0x3b3479cf,0x3ac24ed2,0x3b5d16fd,0x3b6e6bbd,0x3b9c139f,0x3b9f2014,0x3b552e1e,0x3b69d2e9,0x3af80af1,0x3bf485c6, +0x3c076eee,0x3c0113c2,0x3c120bca,0x3c74da31,0x3cbd240b,0x3cd04851,0x3c2c1df6,0x3c4fa661,0x3c07bcfb,0x3ba17f5b,0x3c3eb13a,0x3c5dc618,0x3c78b2c8,0x3c4e78fe,0x3c150376,0x3b2eccce,0x3b0b1ed4,0x3b56fd0a,0x38ad6666,0xba522d47,0x39099fcf,0x37f56f92,0xb94af959,0x3ac85340,0x3a518de1, +0x3a7c5c93,0x3a65ed7d,0x3acd2062,0x3b4530c5,0x3b6ee737,0x3bb8603c,0x38a76fe9,0x3a7e2f31,0x3b0bef94,0x3c1bf494,0xbc3e1bb1,0xbba99ceb,0x3b31d17a,0x3c1d4ccb,0x3cb81fc8,0x3c82f5fe,0x3c5199e1,0x3c0eba64,0x3c23a7f0,0x3c0bdcbe,0x3bf3886d,0x3b7aa946,0x3af0f436,0x3aa3c60a,0x3b978131, +0x3bead148,0x3c10228a,0x3bd7858e,0x3b8af071,0x3aa91859,0x3a675125,0x3a7f7b51,0xbaee5474,0xbacb8cb5,0xbab79766,0xba71abed,0xba0d25da,0x37bb4bd8,0x39a267f6,0xba253803,0xbabd11d7,0xba9490d7,0xb9b534c3,0x3a733fd6,0xbb016aa9,0xbc03666d,0xbab22cf2,0x3b68a4e1,0x3c8a1608,0x3c284eb7, +0x3c3ac900,0x3c2af0f3,0x3c422e03,0x3c33eea5,0x3bfae5ba,0x3bb25d0e,0x3b830993,0x3b9795fe,0x3bd3c272,0x3bade378,0x3b4f1977,0x3ae02642,0x3ac6dc62,0x3ac25ba7,0x3b22b024,0x3b4395c6,0xba8540fb,0xb974ae48,0x3b00a0c7,0xba822fb9,0xbae73e7e,0xbb0f672e,0xbb619212,0xbb45d894,0xbab26ed7, +0xba33631c,0x3a1a4866,0x3910b526,0x3af288b8,0xbb05954f,0xb982e5f7,0x3b8a2a0e,0xbc41eb01,0x3a84f1ee,0x3b82b6c9,0x3ba327ab,0x3bd881f4,0x3be947f3,0x3bf6d887,0x3c13c0fd,0x3b846eb5,0x3b07c90f,0x3af046a9,0x3b3b382c,0x3b6138a8,0x3b6df773,0x3b1db213,0x3b33d5f2,0x3b81cc4f,0x3b726a79, +0x3b547581,0x390dfd66,0x3af6fb0a,0x3b1aeb70,0xb980820a,0xbac8aff7,0xbb2da71b,0xbb880e98,0xbb19cf1b,0xbb8600b5,0xbb96f855,0xbbd3f299,0xbbe997b7,0xbc015f19,0xbc2cb52e,0xbc151950,0xbc1b88f5,0xbbcb786c,0xbb628fa3,0xb9b9da9e,0x3b92ebae,0x3b448055,0x3b5e038e,0x3b6b55f0,0x3b813e42, +0x3b9de5b2,0x3b2f6c79,0x3b087afd,0x3b01a99d,0x3b2d89dd,0x3b277020,0x3b2c6a16,0x3b12d626,0x3acd209b,0x3b15f4cf,0x3b2a6022,0x3b4dc5f3,0x3b438f80,0x3a3451c0,0x3905c7a6,0x3a6577ba,0xbb0f4278,0xbb7159bf,0xbbbd7db0,0xbbe5f44b,0xbbf1932f,0xbbfb7197,0xbbe930f7,0xbbef42f4,0xbc01c16b, +0xbbe3f00f,0xbbdbe271,0xbbcbcc98,0xbb84b82d,0xbb897af9,0x3a458b3a,0x3a400ebf,0x3a4a9103,0x3ae190df,0x3af40f41,0x3b0417e5,0x3b07b2ac,0x3b29b0de,0x3b3057c8,0x3b1ab3b2,0x3a7e8666,0xb90fe4a4,0xba99a33c,0xb95eb597,0x398b5929,0x3a7b628e,0x3a5e598a,0x3b106bfd,0x3aa56d07,0x39b29d6e, +0xb994b62c,0x39a6815f,0xbad482eb,0xbb604038,0xbbb126a7,0xbbc10efe,0xbb570a10,0xbbf4f2bc,0xbb893451,0xbbcd05f5,0xbb9f33f4,0xbb47358c,0xbb696f45,0xba8c3a7f,0xba800b90,0xbbce6b6c,0xb9f7d66c,0xba02657e,0x39554bb3,0x3a0ab0ce,0x3a948040,0x3aff5672,0x3b35c3aa,0x3ae7e218,0x3a7bda5d, +0x3a282ea9,0x3a1d673a,0x3a2d6c9c,0x3918f2be,0xb8f9d02b,0xb9fb4d13,0xba4a0df6,0xba6dc519,0xbab447e4,0xba4d16c9,0xbb304051,0xbb152642,0xbb495b84,0xbb28f081,0xbb22a1a0,0xbae25b1c,0xbb193aac,0xbae9d639,0xbb46a6e6,0xbb2998a4,0xb9e02d2e,0xbb9ded6f,0xbb44598b,0xbb8f8010,0xbbea1b11, +0xbaa4b034,0xbadc27ac,0x39e9037a,0xb9833404,0x3881b6a0,0x3980816c,0x39b2e7d2,0x39a9ce6b,0x3a069784,0x3a0a8b7b,0x3a25ea5d,0x39fadea4,0x3948635c,0xb8eb7d4b,0xb97d6fe9,0xb82b5de5,0x38e1634b,0x394b5847,0x39a8f208,0x39a80baa,0x3a4bb173,0xba73a878,0xbb6dd34e,0xbbca90c2,0xba9af241, +0xbb89ce1f,0xbbf811af,0xbc07f437,0xbbf6a62a,0xbbea5747,0xbc020773,0xbbf6aad9,0xbbd274fc,0xbb572adc,0xba4d0a47,0xbbc3e471,0xbb97a2dd,0xba6d5472,0xbb8a5223,0xbade450e,0xbbcbe4d4,0xbb71d003,0xbb6c1a49,0xbb606c6b,0xbb73e038,0xbb7ab16d,0xbb701af3,0xbb7828d4,0xbb7a3ebf,0xbb7077de, +0xbb6cbf7f,0xbb77a56e,0xbb883690,0xbb891049,0xbb8b3439,0xbb833a66,0xbb7afd27,0xbb55ba8b,0xbb8bc346,0x3a87a2ed,0x3b7f34fc,0x3bc378a6,0xba57d590,0x3b70c0c1,0x3be53d2b,0x3be12b5d,0x3bd34a28,0x3bbe2435,0x3bf521ad,0x3bea357e,0x3bc5b79d,0x3ba183b0,0xba769636,0x3bab0261,0x3bb2ffa7, +0x3c316e1f,0xbacde437,0xbb8a836a,0xbb8c579e,0xbb7f5288,0xbbab114c,0xbbb25982,0xbb9fed4e,0xbbad22ea,0xbbb16377,0xbba24974,0xbb8fc523,0xbb9daa88,0xbbcc5f55,0xbbd6477d,0xbbd8183b,0xbbb7b3bd,0xbb8db236,0xbb873d40,0xbbb1cd36,0x3b4a3c97,0xb9ba6849,0x39de6e06,0x3ad233dc,0xbac8e896, +0x3b37fa30,0x3a5fcf44,0x3b673709,0x3b08d360,0x3b4c645f,0xbb218c86,0x3aae3f49,0x3b2b9d46,0x3ad27472,0x3ad2bd6c,0x3ae9e30d,0x3b9a4212,0xbbbc090c,0xbb9fa976,0xbb92ecc3,0xbb6c1d9c,0xbbaecf71,0xbbb76be7,0xbb9cb8b7,0xbbbfffc6,0xbbb1ee6f,0xbba6475c,0xbb823fb7,0xbba9ab0c,0xbbf3f0e2, +0xbc0b0e1f,0xbc05b902,0xbbee6a04,0xbb8e11b8,0xbba97f21,0xba57fbe6,0x3b9d8196,0xb902b589,0xbad092eb,0x399dab35,0xb886426c,0x3b33e069,0x3ac07cb0,0xbb3f3989,0x3b998d1a,0x39cd0e43,0x3b678b52,0xba8642c9,0x3a8cf6fb,0x3acdaa53,0x3a54413a,0xbb21d233,0x3c1dd9cd,0x3b6dcd41,0xbbba6ced, +0xbb86b157,0xbb7aa164,0xbbccc63b,0xbbe67e87,0xbbb45903,0xbbf24e6e,0xbbe178e5,0xbbc7785d,0xbb89b55a,0xbbab8604,0xbc1d3a76,0xbc39b2bc,0xbc31704f,0xbc059c8a,0xbba29eb0,0xbb90a6a2,0xbb13e114,0xb9926bb1,0xbbac6674,0xbb04f52e,0xbb8cfb39,0xb8617f83,0x3b096d6e,0x3b800e48,0x3b738442, +0x3b67c745,0x3b49da46,0x3b9405c8,0xb9ed7b23,0x3bb32c20,0x3b25f07c,0xbac4162b,0x3ad25066,0xbad15fe8,0xbabf2c6d,0xbc04fcd9,0xbb78e72d,0xbb3d7edf,0xbba5b046,0xbbbe5feb,0xbba8e47e,0xbbe6a8a3,0xbbcaf6e2,0xbbafea27,0xbb342510,0xbbb30e1f,0xbc24332c,0xbc4e097e,0xbc463579,0xbc21b209, +0xbba0febd,0xbb878e47,0xbacb9be2,0x3bca01f5,0xbb239217,0xbae67d2a,0xbb2a251b,0xba9f668d,0x3b8967b0,0x3b849065,0x3bbfcbdf,0x3b96660d,0x3b9af093,0x3b5d7710,0x3a4f3c36,0x3b830f95,0x3b5c60be,0xbb6fbff8,0x3b206be4,0x3cbec9a5,0x3c27db54,0xbbd89184,0xbc26f8c5,0xbc8befe6,0xbc032e32, +0xbbbdfa5a,0xbc25e7ae,0xbbdccac9,0xbc192846,0xbc8eb810,0xbc9811d9,0xbc836073,0xbc1f23f7,0xbb3d0db3,0x38fc1761,0xbbb2eb40,0xbb697156,0xbb66dba1,0x3a2217a6,0x3ba11cf6,0xba069aa9,0x3b0da0b8,0x3a72811b,0x3aeb0553,0x38c5c3c1,0xb9f75299,0x3b065800,0x3c2d6d15,0x3b4d403a,0xba19491f, +0xbaaac7a0,0xbc2e6582,0xbbceafb3,0x3c096d0f,0x3c8158a9,0xbca33fc9,0xbc8cb2ed,0xbc98e6be,0xbb979a99,0x3c035021,0x3b4aee6c,0x3a6be48a,0xb9c88eb0,0xbbc2aded,0xbbb1e219,0x3bae3465,0x3a77bb9b,0xba047f48,0xb9c95cb0,0xbaeb9293,0xbb312285,0xbbda696a,0xbb48e81e,0xbb954560,0x3aa424a8, +0x3ba6f453,0x3b29ecf4,0x3b029265,0xb814534b,0x38d177e6,0x3b44f9b8,0x3b9e1a05,0x3ba8c8e2,0x3b2b3fbe,0x3acc74a4,0x3a836c9e,0x3b431f78,0x3bff3451,0x3bb557c1,0x3a3b846e,0xbc70422f,0x3b8a7075,0x3bc62cd1,0x3b8ad4cf,0x3aa04a3a,0xb9306441,0x3ba4e752,0x3b2fe2e9,0xbc15dd06,0xbc458931, +0xbc4da536,0xbb8fdc49,0xbbce61ed,0xbb5d497a,0xbae5cdf0,0xba9e2516,0xba8a0d08,0xbb550ba0,0xbb188fd3,0xbb80c7ed,0xbb23f082,0x38c34b42,0x3a28af33,0x3b21459e,0x39fc18e1,0x3b242b42,0x3ac908d5,0x3b2aa8b8,0x3ab28209,0x39c97a8d,0x3b21070b,0x3b596fc0,0x3ba99808,0x3b3297c3,0x3adb29b0, +0x3aacaa12,0x3b9dda3b,0x3c1f3e0b,0x3bee9839,0x3aacbb12,0xbac5c8f8,0xbc1095ec,0x3a31da06,0x3928d593,0xbc2941cc,0xbba192d4,0xbb9f1499,0xbb941e6f,0xbb6d028e,0xbaaa3f2e,0xb9de7409,0xba8469e3,0xba8046ea,0xbb2b0669,0xbaf0f449,0xbb8e995d,0xbaf24a8d,0xb9f2392e,0xba80f044,0xbacd3fb7, +0x3a87ea1d,0x38b9c0c4,0x3a25ed2d,0xba1f4ad5,0x38c07f44,0x3ade1b49,0x3adb8d09,0x3b634009,0x3ba3637d,0x3970dfc3,0xbafa659b,0x3b38b747,0x3bb12d4b,0xbc0a29bc,0xbbf61346,0xbbef0c77,0xbb5b09e3,0xbbbd0c54,0xbb8d8306,0xbb36c137,0xba288236,0x3c077451,0x3c354d52,0x3be5d704,0x3bc713a7, +0x3af4a951,0x3af59ee6,0x38ce789f,0x386f79db,0xbaef06b6,0xbb1822bb,0xbb44f872,0xba8ead81,0xb72aa4fe,0xba8e3d2d,0xbacdecb3,0xbb3c61e7,0xbb111014,0xbab5f762,0xbacbe788,0xbab59e79,0xb96bb3ec,0xba9eb13e,0xbab97574,0xbae33559,0xb91a315f,0xb9a0a349,0x3a0e2c19,0xbbe5929b,0x3c549c7b, +0x3c355c0b,0xbb3cf933,0xbb2bb308,0xbb954c06,0xbb5cc50d,0xbb5f0d32,0xbb031dad,0xbb7440db,0xbb8e4782,0xbbbaaaca,0xbb0ce00b,0xbaaf2615,0xba8bd8d7,0x392e8410,0x3a8ba762,0x3a41263d,0x3b369340,0x3ab48f4d,0xba9f960d,0x3b1fa68a,0x3a9cc25a,0x39d8e08d,0xba3e7529,0xbb094397,0xbb000de1, +0xbb3fdb17,0xbb482efb,0xba6c2b86,0xb897d9ab,0xb88623c9,0x3b088014,0x3a66cb9c,0x3b3d4ef9,0x3b8a4313,0x3af22426,0x3a408eb8,0xbb77f82a,0xbb9ffbd5,0xbb418382,0xbba6930f,0xbb98ef8b,0xbba36f36,0xbb955d9c,0xbb1a8a7a,0xb9e5effb,0x3981e909,0x38fe46dd,0x3981c9a3,0x3a2f1269,0xba437bf7, +0xbab74614,0xba45f580,0xba7fc089,0xb9cf3da5,0x3aeb6703,0x3af4cfbc,0xba12303b,0x381bb731,0xbb536867,0xbb747fd6,0xbb56c573,0xbb95fc8a,0xbb93bcba,0xbbbdcaaf,0xbbcaf5ec,0xbbf8d2f2,0xbbf8ebac,0xbc0b8189,0xbc201fff,0xbc0b122f,0xbbde94ae,0x3a301191,0xb846cdf9,0xbb75a05f,0xbb32d828, +0xbb2d3128,0xbb2a49f2,0xbb62d84f,0xbba8b81d,0xbb7e8367,0xbb456ef7,0xbabed20c,0xba8936f0,0xba86613b,0xba6e130f,0xba89526d,0xba4ffb45,0xb98e6fa0,0xb941e5c6,0xb842b793,0x3a1de5ac,0x3b1911cf,0x3ae12def,0xba01a215,0xbaaedea7,0xbb8b948b,0xbbc27ded,0xbbbb2c4a,0xbbc7ccef,0xbbfaaf0a, +0xbbf0a1e4,0xbbee7f62,0xbbe6f935,0xbbf3a6d3,0xbbd046ec,0xbb260ac7,0xbae07bce,0x39e34e09,0xbb394a57,0xbb5720bb,0xbb2b21c9,0xbb4fe7fb,0xbb60f5c1,0xbb6a67ed,0xbb6ed504,0xbb349a09,0xbb27a049,0xbb160842,0xbb26e627,0xbb14060a,0xbae422c3,0xbab90264,0xba8e8ee4,0xba97f5c7,0xba48f9b3, +0xbae8ac9f,0xb78bc13d,0xb9bb4192,0xba62141d,0xbac96a7b,0xbb216c1a,0xbb713d7b,0xbba8a4a2,0xbbadee3c,0xbbf691b2,0xbb8ab94a,0xbbdc9da1,0xbba00d99,0xbbcb9c5c,0xbb7c3114,0xb9f73d22,0xba9c0a5e,0xbb1da103,0xb902a64a,0xbb708895,0xbb6f60c9,0xbb89c1f6,0xbb8ee032,0xbba3a260,0xbbb035f1, +0xbbcb63c2,0xbbbff583,0xbba9830f,0xbb90823f,0xbb6c4864,0xbb39ad7b,0xbb08e121,0xbb1f7436,0xbb2b9402,0xbb3d9277,0xbb3b3ce8,0xbb38cd2e,0xbb5d4571,0xba9e20e6,0xbb0dde3f,0xbae80428,0xbb140d75,0xbab865b6,0xba8515b7,0xba337eb2,0xb9a7bb80,0xb945d606,0xba543ef8,0xbb245ebc,0x38f7c101, +0xbb037d61,0xbb4c2d93,0xba999192,0xbb6daaad,0xbac94948,0xbb8746a5,0xbb7443f2,0xbb775e1e,0xbb76f6c7,0xbb7efecf,0xbb7a3e76,0xbb7c7bfa,0xbb6be8e7,0xbb6e8fd0,0xbb7298f2,0xbb72843d,0xbb729c56,0xbb69197f,0xbb672cec,0xbb62f2f8,0xbb6460ca,0xbb6489b0,0xbb5e59c4,0xbb8155cd,0xbae6f65b, +0x39f6e7b9,0x3ac2958f,0xbb059994,0x38bac7de,0x3a9f910a,0x3ab4d300,0x3a7254ea,0x3a2c45ab,0x3aad484d,0x3aac365d,0x3a27bba9,0xb982db43,0xbafd0e9d,0x3ab6e122,0x3a7053d3,0xbbb5859b,0xb9c1cf76,0xbb1f0fc2,0x3b308d6d,0x39852225,0x3897c13c,0x37f1fddb,0xb9071585,0xb7f745d6,0x39d4407d, +0x39916716,0x39c3f3b6,0x3a2eb07a,0x3a3407e5,0x3a1a777f,0x398bcdc9,0x399e4744,0x39939cc2,0x39aa415c,0x3a02d8b8,0x39b42167,0x3aa68388,0xbb83daf0,0xbbbe60f1,0xbb9ad50c,0xbb4ddc59,0xbbbd7009,0xbb949b86,0xbba25586,0xbb9776e3,0xbb8607ba,0xbbb90155,0xbbb9d451,0xbbba2531,0xbbc801a9, +0xbb1efe76,0xbb9efdb7,0xbbddf166,0xbbf93610,0x39368eae,0x3a3bf173,0xba20b1fe,0xba824ef5,0xbb00f6de,0xbad680e9,0x39bc8971,0xb87b19a5,0x39dc7a67,0x3a520453,0x3a95432a,0x3a2bf01b,0xba74e4ea,0xba8b1f17,0xba616d0f,0xb95ac958,0x392f0a76,0x3a5b2c6c,0x3afc3cbe,0xbbaf089b,0xbb661806, +0xbb7e7446,0xbbade818,0xbb059e22,0xbab2f93e,0xbb1017e7,0xbb6e7ad6,0xbac59b44,0xbb0be949,0x3b302291,0xbb2b4ffe,0xbb15b4f8,0xbb1e035a,0xbb950d9f,0xbafa4ea3,0xbbbc7ead,0x3b2ba171,0x397ab4a6,0xbae27de6,0xbaef6e90,0xbb66f557,0xbb79e035,0xb9453e7d,0xba92d0fb,0x395bd2c3,0x3a9f8f3f, +0x3b0e588f,0x3a9953a2,0xbad1c274,0xbaba797b,0xbaf0a775,0xba385bc4,0xb9f20303,0x3b024835,0xba719f1a,0xbbe04b4d,0xbb69bcb6,0xbb8b36be,0xbb9cdfd5,0xbb23fa2d,0x3937f3b8,0xb9e6592f,0x3b231202,0xbaa0a4c6,0x3b0e806d,0xbaaae0a2,0xba385170,0x395ee650,0xba5bb83d,0xbbb8e84b,0xb97dd454, +0xbb699d74,0x3a958256,0x3b0525c3,0xbb2c8930,0xbb201b5b,0xbbc92e88,0xbbc0f743,0x380fa81d,0xbaa0048c,0x3a2f2242,0x3ae65675,0x3b3c8f98,0x3abbaeee,0xbb8b100e,0xbb86690b,0xbb7fc474,0xbadeb2b5,0x372afb22,0x3b186bc8,0x3a510433,0xbb431af0,0xba8ac5da,0xbb7f9271,0xbaa8f895,0xbb3436ec, +0x3b9b98db,0x39157d21,0x3b466c81,0x3b5a183c,0x3bc339aa,0x3b722ccb,0x3a47cae8,0x3a82fc6f,0x3a75c4dd,0xbb4a4f12,0x3a95edfc,0xba86d1d6,0xb93b4c7f,0x3accb7b3,0xbb734d54,0xbb13ad42,0xbbecaadd,0xbc039621,0xbae8d07c,0xbb3bedc9,0x39911258,0x3b64d87f,0x3ba6db69,0x3b3dfa79,0xbb4fbfa6, +0xbb804cf0,0xbb857b07,0xbb16e7df,0xba325e67,0x3b078340,0x3aece9ac,0xbbeb0627,0xba977f00,0xbb86de7c,0xbb11f1c0,0x39d03b21,0x3b89a415,0x3bc1f7bc,0x3bbc5f14,0x3bbd91ec,0x3b933087,0x3ba0ebb5,0x3a9ae0f1,0x3ba3756d,0x3b83b00f,0xbb767e5d,0xbb5ed163,0x3c1e72bf,0x3ae35694,0x3bc76ba0, +0xbb0ebf19,0xbc07022d,0xbae0bb7f,0x3aa06eb1,0xb9e89a1d,0x3bd933eb,0x3bab115e,0xbaa492eb,0xbb2904a4,0xbb2bc142,0xb9f8a01c,0x3b619d1f,0x3b9b50fc,0x3bf7608c,0x3ba91198,0x3b859ee9,0x3b1ab99f,0xb9825614,0x3b5812ba,0xb9f55ac2,0x3b61dd30,0xb4b0e542,0xb94a29c2,0xb9f3e826,0x3b263c06, +0x3c17b0dd,0x3b37fce4,0xba9b1081,0xbb771876,0xbc34aed8,0xbc177440,0x3a947883,0x3c4590a4,0xbcaf45a8,0xbc1603be,0xbbaebc96,0xba854426,0x3c2eaf02,0x3a9b78a0,0xbb1b3507,0xbaf1cdbb,0xbbd0ec8b,0xbb7ff510,0x3bf0e6a4,0xb9358c04,0xbaf09252,0xba9e2c58,0x3883abb9,0x3aa40a7e,0x3803cb10, +0xba8759c0,0x3adf4b0f,0xbaa16787,0xba8f6410,0x3a8f5296,0x3a9ade3c,0x39df5bfc,0x3ac849de,0x3b88f5cb,0x3b9c1b41,0x3b8f74a5,0x3aeec340,0x3a78def6,0x3acf88cc,0x3b6ddcbe,0x3beffe25,0x3bcd14b0,0xbb30dfcd,0xbc8ad991,0x3ae6e542,0x3c19b260,0x3bc82fd7,0x3a6612f0,0x3a70972f,0x3ae68edb, +0x3b17c6e0,0xbb14be9f,0x39bf2727,0x3a7c1c0b,0x3b598d77,0x3b936b9b,0x3bb8e13a,0x3bccd6c7,0x3be9786b,0x3b8f47b3,0x394c7a23,0xb935bf46,0x3a9fff03,0xb971a996,0xbadd4fcb,0x3a0963c0,0xba65ac8e,0x3af33e41,0x3b15381e,0x3aed8706,0x3afad9e5,0x3b0d2819,0x3a2ba2c4,0x3b31c6fe,0x3b4d6106, +0x3bba5d45,0x3b2f9038,0xb96e5b5b,0xba9e9caf,0x3a566ba0,0x3b9e5789,0x3bbe9444,0x3a57ab80,0xbb27fd41,0xbc0b980d,0x3b067c87,0x3ba8a300,0x3865e659,0x3bd41330,0x3b9a881f,0xbae7a2bf,0x3b93b079,0x3bb17b06,0x3be00e83,0x3ba360e1,0x3b7b3cd9,0x3a36e94f,0xb98df617,0x3aa9553d,0xbacdd459, +0xbb435b56,0xba32de77,0xba85c548,0xba1fc426,0x3a8b58b9,0xb996890d,0x381963b5,0xb8d2689d,0x39afe67e,0x3b42c11a,0x3b5e2e1b,0x3bb07b09,0xbb15cd8a,0xbb1c1106,0x38c443aa,0x3bcb2812,0xbc17ed05,0xbbfdcf96,0xbbf127c9,0xbbb23714,0x391026c8,0xbb765304,0xbb559981,0x3ae1109e,0x3b8db999, +0x3bb514f8,0x3b3d7c2f,0x3b0f45d5,0x3a6796e5,0x3a5c1522,0x3a0981ba,0x3ad0ee2f,0x3b1951d5,0x3ab3b641,0x3a6dcdc2,0xbad8af58,0xb9fbfc9e,0xba0553b3,0xbb46165f,0xbb4f0f0e,0xbb1e4c8b,0xba81be40,0xbadd0a8b,0xba9ef45c,0xb9d0b927,0xbad89eef,0xbaea89b4,0xba51d2c1,0x3a34a14f,0x3a637e5a, +0xbab092c0,0xbbeb98ba,0xbb194eae,0xb926b6cf,0x3b93c399,0xb88b520a,0x3a3ab619,0x389c0594,0x3b357f97,0x3bcc92ba,0x3ad697a5,0xbac7a891,0xbbc2c9de,0xbb96afb4,0xba95cb8e,0xbac003dc,0x3898d7b4,0x3a5999bd,0x3afa1afb,0x3ad0d2b0,0x3b0069df,0x3a9794d7,0xbb1c4ef8,0xbab69faf,0x3aa97d41, +0xba987c3c,0xbb04ad73,0xbb301b74,0xbb7364b7,0xbb17b6ab,0xb9ab6686,0xb96ec546,0x397c226c,0x39a96522,0x3adbd0fd,0x39c0af7e,0x3a189e9c,0x3b95b162,0xbc2659f8,0xbbc1a9d5,0xbb7fb1f1,0xbb23ffa4,0xba614776,0x3a7a850f,0x3af9b6f5,0x3b2cb4c1,0x3af7faf1,0x3b054fec,0x3b0df9a4,0x3b11edc4, +0x3a5eb70d,0x391153a6,0xba1822fa,0xb86218bc,0x3b208491,0x3b1e0cee,0x3b24a8fe,0x3a3f6157,0x3aec68a6,0x3ab2bbe7,0xbb5ebb33,0xbb53cdf4,0xbb6bee26,0xbb7d263f,0xbad34c13,0xbb760db6,0xbb94d413,0xbbd27bdb,0xbbe4f55a,0xbbdebd3b,0xbc2381f3,0xbc1b025a,0xbc317f35,0xbc231b48,0xbbb658bf, +0xbb0d97e3,0x3a5464d7,0x38fdf404,0x3aa906cb,0x3aa2f04d,0x3ad90470,0x3abdb6f2,0x3a9ddef5,0x3a97d85d,0x3aa7f034,0x3ac4d21e,0x3ab35e32,0x3a73919c,0x3a751420,0x3a96c237,0x3b1dcaeb,0x3b0d5073,0x3b2df2bf,0x3b15ecd2,0xba07bc44,0xba4e316e,0xbabdbf60,0xbb4e0bd1,0xbb80043d,0xbb9c56ef, +0xbbde670d,0xbbd609be,0xbbdf8db1,0xbbe0ad93,0xbbe9fd2b,0xbc034b07,0xbbfc879c,0xbc0295a2,0xbbfd0021,0xbbb7c8e1,0xbb8a6290,0xba7cdb2f,0xb9161697,0xba143387,0x39144589,0xb74bda85,0x38ce05cd,0x391e164a,0x394b5e46,0x39177f14,0x38cc9e62,0x38907757,0x384bce9f,0xb95c7a21,0x3a246d6c, +0x3a764504,0x3ab5b92e,0x3a6b5d41,0x3b075a6c,0x39a66320,0xbaafb12f,0xbaa6ba9f,0xbadad66a,0xbb276b8f,0xbb846fcf,0xbbb9b02e,0xbbae9c23,0xbb84ebb6,0xbc04c43d,0xbb98aafb,0xbbdeedce,0xbbaef7dc,0xbb9a9cf8,0xbb829d24,0xbb5be6e9,0xbb1f2503,0xbb896d94,0xba5a2b62,0xbace8cac,0xbab3e5d0, +0xbabddce2,0xbab931a4,0xbaa5ed50,0xba9e08c0,0xba498067,0xb9e8e840,0xb92559a1,0xb7697f15,0x381d541a,0xb92cc354,0xba0ddddd,0xba49bd88,0xba44f8f9,0xba588171,0xba3b1db8,0xba2bb576,0xbb4e0b3d,0xbb3d1b5f,0xbb793d23,0xbb6b02a8,0xbb60109e,0xbb3bd738,0xbb606bce,0xbb592830,0xbb497ede, +0xbb43cd29,0xb9fb68eb,0xbb64a8ef,0xbb4a0a8a,0xbb5fbb3e,0xbb96bf5a,0xbb1e863d,0xbb6eb968,0xba0dc279,0xba712b5d,0xba4dd260,0xba388e06,0xba2e127c,0xba2808b5,0xba284b6e,0xba304fee,0xba3d0e38,0xba46d0bc,0xba4976aa,0xba3f5b85,0xba1bb219,0xb9eb0848,0xb9c48399,0xb9cbe5c2,0xb9cc4c6e, +0xb9e92c0b,0x3912a5aa,0xbb3ccc46,0xbb9ee56e,0xbb95d1fe,0xbb585d05,0xbbb34c9a,0xbbb10075,0xbbbdef85,0xbbae286b,0xbbaa30bf,0xbbc12c8a,0xbbbea54f,0xbba9ce7f,0xbb94ea3f,0xbb322bfa,0xbb8caee3,0xbba828db,0xbb1b1c9a,0x3a619b15,0x3b512f6c,0xbaa01501,0xb905ef78,0x389a18ba,0x3907e3d4, +0x39c35e2e,0x39e3228a,0x39f81d7f,0x39b7583b,0x39b2510a,0x39d4c0d6,0x39efc5f5,0x399d9403,0xb82900eb,0xb91cfdce,0xb90511ec,0x383c08be,0x393c83cb,0x39a0e1f8,0xb7c9067e,0x3b65150f,0x3b66f018,0xba47fbb4,0x3b40f10f,0x3b7cdfa9,0x3a0b318c,0x3a0185c0,0x39c5ca2f,0x3a3b3dc9,0x3abb2ae2, +0x3ac6195a,0x3ac91cf5,0x3b92174f,0x3b539b53,0xb96433b7,0x3b82f376,0x3ba3ed60,0x3b1e0fea,0xb8bea24f,0x3817fae9,0xb8c47663,0x3a4b178e,0x3aabd24c,0x3ac14738,0x3a99e239,0x3aa6baf9,0x3aa6da87,0x3af659d6,0x3acbad12,0x39aa8398,0xb9aa12bd,0xba051134,0xb89dd123,0x3a001f93,0x39adde6e, +0xb942b928,0x3b164895,0x3a64f435,0xb9d7831d,0x3b294abb,0x3b010ab1,0x3af741d0,0x3b086819,0x3b4b9d57,0x3b58c428,0x3b6c0a0e,0x3a530b64,0x3ac7dfe6,0x3b2d934c,0x3b245a06,0x3ad2347d,0x3b20dd7e,0x3bbb3046,0x3967c36e,0xbaac0a7e,0xb93751c7,0xb96e035e,0x3ad02285,0x3b1980eb,0x3b1962ef, +0x3af1c739,0x3b0b1690,0x3b14525f,0x3b599400,0x3b1956db,0xb9746f3d,0xba954251,0xba95342f,0xb9994da2,0x3a70b90d,0x39549b44,0x3b10c44a,0x3b75d43e,0x3a242859,0x3a07d899,0x3a93793e,0x39eac057,0x3b91c2dd,0x3ab9fa5f,0x3a9f3c14,0x3bd2fc8e,0x3b27f6e4,0x3b89e6d6,0x3aa12bf0,0x3b3bd2fb, +0x3b38e8e3,0x3a38a5d7,0x3b132559,0x3c02062e,0x3b770691,0xba961c3f,0xba2abb5f,0xba8ca9aa,0x3ad74420,0x3b6d7be1,0x3b722e06,0x3b567447,0x3b72ddd3,0x3b569927,0x3bba11a2,0x3b91877d,0x3a22886e,0xba9b4abe,0xbaef46fb,0xb9dfc2e7,0x3a2bda1d,0x39d04f02,0x3abc264a,0x3a89f3eb,0xbb230ee1, +0xbaf9cf4c,0xbb1b3e74,0x374a3116,0x3b625419,0x3b50f08d,0x3b2b0d28,0x3b8ac912,0x3b82eb87,0x3b9fdb43,0x3a5c6139,0x3b984688,0x3b0e66f4,0xb99eaccf,0x3b42f304,0x3b46cd01,0x3ac3dda7,0xbb8c3acd,0xb9d87a3f,0xba3eb175,0x3b7078de,0x3b8e64ee,0x3b8918b2,0x3b72f8d4,0x3b89c99b,0x3b8e91f8, +0x3be2449b,0x3b9a9d80,0xba47f889,0xbb146141,0xbb184fbe,0xb9e8e076,0x3ade878f,0x3a94322e,0x3ae3ccb0,0x3b7ec8c8,0xbaab78f1,0xba9a11b3,0xbaf4e7ca,0xba88a278,0x3b8551e8,0x3b4be7c5,0x3b976526,0x3ba6f427,0x3ba2b537,0x3b81a15c,0x3aa2f372,0x3b9535a6,0x3b6bc8fb,0xbb633f2d,0x3b4f3309, +0x3ca25bf8,0x3c515178,0x3af6d8a1,0xbada5fe7,0xbc02d0bc,0xba45a0de,0x3b913699,0x3bd0946b,0x3b9b66c5,0x3a371d86,0xbba5d187,0xbc312a6b,0xbc384fbc,0xbc0072ee,0xbab67bf2,0x3ac8ec32,0xbb008ffe,0x395d63d3,0x3adca483,0x3b9bedcf,0x3b95d1e6,0x3a2055dd,0x3a97a3f2,0x3b1d4d00,0x3b1f6ad6, +0xbaaa73c8,0x3a1437e7,0x3b1d365d,0x3bd7b9a3,0x3b3c4a54,0xba0013d6,0xbb3c4df7,0xbc2c8e5e,0xbb900952,0x3c05ea3f,0x3c9875df,0xbc6c8a5a,0xbc4576c3,0xbc6d8ca0,0xbae8b68d,0x3c54b7d3,0x3bec2bae,0x3b88ebda,0x3b43aa4d,0xbb0fbf73,0xbaed5551,0x3bc616c0,0x3b076bc8,0x3a5594ed,0x3a18178f, +0x3a62f6f6,0x3af692b9,0x3b613193,0x3b85d384,0x3aff52e5,0x3b30c00c,0x3b29d4a0,0x3b334337,0x3b15b8d5,0x3a7792dc,0x3a96fc04,0x3b687849,0x3b845d13,0x3b81f82d,0x3abcbb88,0x39b74b8b,0x3a1191b3,0x3b9495ad,0x3c1e6321,0x3bdb9c91,0xbb91c2dd,0xbc42aa6a,0x3b9634ac,0x3c251e38,0x3b53d54e, +0x3ab3b9ef,0x3bbe97e9,0x3c381bf6,0x3c4e75bc,0x3c311f70,0x38db3ca2,0xbba0c6ef,0xb9b671f8,0x3a5a5078,0x3b9f14a8,0x3bde9722,0x3bd55d98,0x3b986467,0x3a89a32b,0x3a40bfb1,0xba4a0d16,0x3aa71c09,0x3ad624bb,0x3a9d62d5,0x3b180779,0x3b1ee908,0x3b63cef0,0x3a837653,0x3b14f5a5,0x3989efca, +0xb68272b8,0x3b1a6cdb,0x3b601b43,0x3bc3cdf1,0x3b1c5e80,0xba33cbbc,0xba94a41a,0x3b206896,0x3bb76811,0x3bd78553,0x3b33f28e,0x3b6e2892,0x3bc9d2e3,0x3c4495cf,0x3c5ef5b6,0x3c013235,0x3bfcfdc8,0x3ba1a7fe,0x3ae3ca6c,0x3bde165e,0x3c1bf2c1,0x3c1db238,0x3bd92b4c,0x3b8c630b,0x3a1faa21, +0xb919c312,0xbb00dfce,0xba36426a,0x3a6dea95,0xb999990d,0xba6a7f13,0x3acca66d,0x3a39a6b1,0xb5d4cf52,0xba4f90b7,0xb9649aa4,0x3ab9bc25,0x3b04952f,0x3b7ee88a,0x3ba37093,0xbacee021,0xbb851605,0x3a9641ac,0x3b4d004e,0xbbd2428d,0xbbac38c7,0x3b2b74d0,0x3c0ed104,0x3c6a0a2c,0x3c184c8d, +0x3bcab304,0x3a1b82ca,0x3c29c941,0x3c4f76f0,0x3c20cb4a,0x3c1d79bf,0x3bd66bc2,0x3b97cd73,0x3b73a175,0x3b7d6be4,0x3b599472,0x3ad49008,0xb9f25c3a,0xba8bf028,0xb9f0cf57,0xba8a68ab,0xbad1173b,0xbb2f46c1,0xbb1b4238,0xba315141,0xbb0927cf,0xbaf06318,0xb9a181d4,0xbabaf3b1,0xba85bf80, +0xba1212b4,0x3ad0859c,0x3b312fb9,0xb8f9e0c4,0xbb841fd2,0x3c4577c4,0x3c6c3450,0x3c85261e,0x3c8a293b,0x3c47ee53,0x3c526db0,0x3c590e55,0x3c6919af,0x3c01b11f,0x3bb9a8cd,0x3b8f445f,0x3b4e0e2a,0x3b715ba4,0x3b77e10d,0x3b1f0b96,0x3aec0535,0x3a80831e,0x3b1072a6,0x3b063ee2,0x3aa73cf4, +0x3b570e81,0x3b0db5a7,0xb9828cd7,0xba4631ed,0xbb022e80,0xbaed8f11,0xbb0388b5,0xbabc9dd6,0x3aa2ad0d,0x3aa8e393,0x3abf5de4,0x3b503ffa,0x3b165d55,0x3b23fb7a,0x3bb8b022,0x3b89a4a6,0xbb9327ee,0x3a902a78,0x3a01a4b5,0x3aef2a03,0x3aae1a98,0x3ad04047,0x3a890ac4,0x3b31b4b8,0x3aebf461, +0x3acda7eb,0x3adacb15,0x3b2bd325,0x3b48ee65,0x3b45776e,0x3b321240,0x3b26b55e,0x3b314f55,0x3af82417,0x3aaee116,0x3a9cc0d3,0x3acf04e6,0xb92ef9f4,0xb954aa86,0xbb3d1fe1,0xbb4c51b5,0xbb12672d,0xbb4efb2f,0xbb5a1ef2,0xbb877c61,0xbb9fd8a2,0xbbb81607,0xbbab9399,0xbbd5eb6c,0xbbe7bf3a, +0xbbddbb04,0xbb9b9af6,0x3941aa6c,0x3aa1954b,0x39d980fb,0x3a3bf2a8,0x39bf9916,0x3acc71c9,0x3b1a7659,0x3b3bb97b,0x3b10391e,0x3b036acc,0x3b1d86e3,0x3b1b5d25,0x3b0723f6,0x3ac8267d,0x3ae358b0,0x3ad67015,0x3b07eb40,0x3b05c4fa,0x3afb3b33,0x3b2512c3,0x3b256122,0x3a5b347c,0xba9038c4, +0xbae312e6,0xbb7918ef,0xbb8f553d,0xbb9b1ad8,0xbbaef804,0xbbd69338,0xbbc7a382,0xbbcb784f,0xbbc3d932,0xbbd6499f,0xbbc75b94,0xbb6f5d66,0xbb2e1c39,0x3a22565e,0x38f74e88,0xba1202b7,0x3a505294,0x3ab2b527,0x3acdc31d,0x3aceb6fc,0x3b08a856,0x3b17cd2f,0x3b12e986,0x3b0dec05,0x3a3b5898, +0x37e25455,0xba01ee67,0xb90ad63b,0x39829ee1,0x39c081ff,0x3a571abe,0x3a11e9fc,0x3af32f37,0x3a8f674d,0xba1249d3,0xbaa1f437,0xbaf40f28,0xbb21ae69,0xbb415bba,0xbb89f29e,0xbb872499,0xbb5f3037,0xbb9a9b9a,0xbb8c44dc,0xbbabed46,0xbb271086,0xba86270a,0xb9d2bdf1,0xba2d5490,0xbaa4b39e, +0xba56d0c9,0xb9eba114,0xba733c40,0xbab32ddc,0xbaaccebb,0xbaa8eff8,0xbab0f5c9,0xbb0878d1,0xbb13ee9c,0xbb192432,0xbb015248,0xbace6dbc,0xbab1f1ee,0xbabefd0c,0xbacf2f4c,0xbaf6c588,0xbaf9c33a,0xbb177f10,0xbaf5feda,0xba1dc4ae,0xba1b76de,0xb93585b0,0xb9d01b57,0xb9b1a368,0xb8549623, +0x399f0712,0x3a902109,0x39d9fc41,0x3a1fc924,0xb9a8d2c2,0x3a140a53,0x38a9e779,0xbad9b40e,0xbad7412e,0xb96c1227,0x3aa64683,0xba227d50,0xba42196d,0xba11acd0,0xb9d71f6d,0xb9cd450c,0xb9e69fb3,0xb9b6efe1,0xb9812f2f,0xb991f34b,0xb9df5dd4,0xba2644e1,0xba6c8efa,0xba88fba3,0xba814446, +0xba6f664c,0xba5ae9c9,0xba3c8707,0xba2b38d1,0xba82e2a8,0x3a525786,0x3a86a582,0xbaa61ea5,0x3a45a15e,0x3a7ffa10,0xbadd05f5,0xbaf1eec5,0xbaef8851,0xbaedb729,0xbac79292,0xbaa451bc,0xbab160d8,0x3a3835e3,0x3a47f12a,0xba743b4a,0x3a9200fb,0xba7cce90,0xbb97af4f,0xbbb7ae11,0xbb3a6832, +0xbb447e0c,0xbb4b535c,0xbb3f3c2c,0xbb66d128,0xbb714bb2,0xbb636edc,0xbb609527,0xbb5924f9,0xbb3e76e1,0xbb387e41,0xbb3f0b51,0xbb555738,0xbb5b2b5d,0xbb67ff8b,0xbb64b7c8,0xbb5d3447,0xbb485a13,0xbb403304,0xbb978352,0xbb5e3749,0x3b18c824,0xbba8ee7a,0xbb72e9ed,0x3b275d8e,0x3b081ea0, +0x3b065378,0x3ae77dd7,0x3ac29271,0x3a97ffbc,0x39b92913,0xbb56fde6,0xbba33577,0x3a9f9a94,0xbb42579f,0x3937eb39,0xbb70ff9d,0xbb533a3a,0xbb894d3e,0xbb8214fe,0xbbd1c9de,0xbbe11efb,0xbbbda59b,0xbbb67d41,0xbba5917a,0xbb8818fe,0xbb6018e0,0xbb7c0ddb,0xbbb84f25,0xbbc12347,0xbbc8d8c5, +0xbbb2321e,0xbb9c1924,0xbb830bce,0xbb670d93,0xbb419c73,0xbb6d821e,0xbb1c0dab,0xbb8ed9a8,0xbb8e4b2e,0x38e972b0,0xbb3fba6b,0xbb16ed41,0xba8fa2a2,0xbaaf39b3,0xba6305e8,0xbac7def7,0xbad1c043,0xbb1abcdd,0xbb4ead14,0xbacf0ce5,0xbb914c4e,0xbb8fe9a1,0xbb517021,0xbb98ef34,0xbb672c5a, +0xbbfde630,0xbc15af91,0xbbeb91f3,0xbbf20c39,0xbbbc3a03,0xbb8a3048,0xbb300ae2,0xbb69fb14,0xbbcf24d0,0xbbecf4a7,0xbc02f90f,0xbbf899c5,0xbbca93d2,0xbb991558,0xbb6136d3,0xbb7654cb,0xbb66a76b,0xbbb66dd6,0xbb8627b9,0xbb17199d,0xba567967,0xba41cddd,0xbb0b1218,0xba50c56d,0xb8a021fb, +0xba6bd71d,0xbab307d2,0xba9ab366,0xbaea2a41,0xbb8ae1c9,0xbb85c4f9,0xba1ab01d,0xba680808,0xbb2cfb8f,0xbb9c85b0,0xbb81285f,0xbc2bf00e,0xbc51a421,0xbc1f4346,0xbc20239c,0xbbea0cb6,0xbba36849,0xbb35e7fd,0xbb6e059d,0xbc2040c0,0xbc3192f0,0xbc37f1c1,0xbc180da7,0xbbeaf85b,0xbb99506b, +0xbb45b433,0xbb6f65cb,0xbb7d557f,0xbb7996a7,0xbb4d8c38,0xbb33605f,0x3b4e5460,0xb9fc6813,0x3b08037a,0x3b855728,0x3ba039f6,0x3b68c9f9,0x38dec3ca,0x3aa2055a,0x3a033fc5,0xbb80a769,0x363c34d5,0xbb98c3c6,0xbb9d1f43,0xbb34b9db,0xbb9c2b9b,0xbac9950c,0xbc2f87c7,0xbc610853,0xbc354d3e, +0xbc37772b,0xbbf665a8,0xbb6af97f,0xba0b5060,0xbb1c1625,0xbc0a885f,0xbc39849b,0xbc4f55c3,0xbc418650,0xbc11e3b6,0xbbba5332,0xbb006313,0xbb329aa0,0xbb1df350,0xbb86b66b,0xbb45d2cd,0xba96d2e4,0x3b887fec,0x3b821338,0x3b84addd,0x3bafaf37,0x3b9f33cc,0x3b9487c0,0x3b03223f,0x3b775cd2, +0x3b05b5ab,0xbba83fb1,0xbb2d14e1,0x3c191156,0xbb197d4a,0xbb94ffd8,0xbc2964f3,0xbc7cac48,0xbc4a0d75,0xbc263f4d,0xbbfa9134,0xbb63803e,0xbb256875,0xbbb27b57,0xbc22c4ae,0xbc151258,0xbb6738b3,0xba8ad4e0,0x3a07cea1,0x3af67d30,0xba8d735a,0xbb591267,0xbb620d17,0xbb015b61,0xba39deb4, +0xbacba7d5,0x3b13ef29,0x3a5dc448,0xbafe960b,0x3a47644b,0x3b510336,0x3ba284ae,0x3ae34da8,0xbaef78bf,0xbbb2eddb,0xbc366792,0xbbf1d472,0x3bc376d4,0x3c0f3a9b,0xbc9c02d1,0xbc53223d,0xbc15ffd5,0xbb1ccd93,0x3c6c0356,0x38f4f7a7,0xbb0ad1df,0xb8eefa2d,0xbbdec9bb,0xbbc0bb62,0x3b53c7ae, +0x386e6cbd,0xba8e136d,0xbb5c5129,0xbba2531e,0xbbd35724,0xbc310a90,0xbbedf508,0xbb949044,0xbaf88480,0x3a52f327,0xb8e9cc7c,0x3a2b737f,0xb9d73829,0x3a77e15d,0x3b79d9d3,0x3b654512,0x3b291d5c,0x3989e896,0xba1a7fa1,0x3a7cd6b9,0x3b994a89,0x3c151716,0x3b955e12,0xbc2c413f,0xbc84553f, +0x38d5d136,0x3c178235,0x3ac57d54,0xbbca6d5d,0xbc0efbc5,0xbc4f2b1e,0xbc3e7d15,0xbbb4bf42,0xbbcfbff3,0xbb979a92,0xbad9822b,0xbb150db7,0xbb2af5e5,0xbb487b88,0xbac5694e,0xbb13f597,0xbb218ae5,0xbb40a7dc,0xbb084396,0xbb12dd44,0xbb01b63f,0x382b87b7,0xba155871,0x3a9a3a80,0x3ae798e1, +0x3ac43cc2,0x3a7a3fc7,0x3a5807d8,0xb9b68479,0x3af983ed,0x3b244c65,0x3babf9c2,0x3a51c211,0xbb3ecfa2,0xbb90c066,0xb9fb0eda,0x3b3262f3,0x3b9ba38b,0xbb8d4d95,0xbc307a21,0xbcd285cc,0xbc922ff4,0xbc75d1c8,0xbbb2da39,0xbb140b0a,0xbab099eb,0xbbc0204b,0xbb55295a,0xbb392339,0xbb242b5c, +0xbb461af5,0xbb037d68,0xbaae714a,0xbb2b59a2,0xbb15b2ba,0xbb1d75fb,0xbb50d54f,0xba9faa5e,0xbaec2a7b,0xb9836403,0x3958d842,0xba2e2945,0xba833972,0xba50d3e7,0xb8ce2f70,0x3b204e45,0x3b4b1265,0x3b624ae8,0xbb557c8b,0xbb9edca5,0xba87d106,0x3aa68fb1,0xbba5a1ed,0xbc19ad30,0xbc5bbc54, +0xbc7420bb,0xbc8e310f,0xbc8b371c,0xbc540379,0xbb45b3e7,0x3a744664,0x3b90ee6f,0x3ab892b6,0x3b49f830,0x3ade8540,0x3ac53947,0xbb161a47,0xbb741892,0xbb8e01f7,0xbb88af0d,0xbb50f3ef,0xbb6a6705,0xbaf92ddd,0xbb1ecdf4,0xbb50b30c,0xbb86c42a,0xbb490297,0xbaa5cf9f,0xbb13aac9,0xbaff3aea, +0xba4fdcea,0xbafd5678,0xbaa5d78c,0xb9fc9194,0x3ad424df,0x3a8231d8,0xb9d431b8,0xbb8a904c,0x3b0ecea1,0x3aa598f1,0xbbabf4d0,0xbba10285,0xbbc46600,0xbbd7440f,0xbba5987d,0xb9814372,0xbb3e8418,0xbbb4a290,0xbc366272,0xbc1e90cc,0xbbe6a530,0xbbd4f614,0xbb0e76a4,0x38ddd0f2,0x3abb254b, +0x3add2f5d,0x3a9c76a3,0xba6046a3,0xbaab5ffc,0xba990104,0xb9db541d,0xbaa6c90f,0xbb09354f,0xbb3bbaf2,0xbb312638,0xba834d78,0x3a18fd92,0x39b48750,0xb9ad5a53,0x39c9e844,0x3a0b9dcf,0x3b0ad1ee,0x3b0b30b4,0x3b391e68,0xbba6f157,0xbc2172c2,0xbc251312,0xbc0856e7,0xbbecbad7,0xbbaa4118, +0xbb895297,0xbb85ab53,0xba568cf0,0x3ab8404a,0x3b0e016c,0x3a95b9d4,0xba55c976,0xbaef0f71,0xbb11b5fb,0xbae54064,0x3758d421,0x39ccaf6a,0x3a8018df,0x3ae02429,0x3a8665ca,0xba3f9fca,0xbb8ecd99,0xbb879505,0xbb853290,0xbb592f1d,0xbb0e7c2f,0xbb6817e4,0xbb8c989c,0xbbb81d4d,0xbbcdb5cc, +0xbbb33de5,0xbbf70ec6,0xbc08f9d6,0xbc25fb64,0xbc327141,0xbbadb894,0xbb4b6119,0xbb81e6f9,0xbb64f468,0xbb283579,0xbb1f67f9,0xbb06c693,0xbb3a0059,0xba82dd20,0xb9a87b0c,0x39ddf892,0x384faf54,0x3837ab90,0xb953a9d8,0xb9632e3c,0x3a18a54b,0x3ac5ab33,0x3a92a429,0x3aa6cc50,0x3a9d223c, +0xb99cc4a2,0xba49116f,0xbb437805,0xbb45cf33,0xbb6a8f81,0xbb645bba,0xbbad5482,0xbba59455,0xbbbd60c0,0xbbcd32f8,0xbbd7600f,0xbbed7f79,0xbbfc78b0,0xbc036e12,0xbbed4930,0xbbbe5248,0xbb2a7e79,0xbb480981,0xbb0dc8da,0xbb1bfad7,0xbb120791,0xbb2180f7,0xbb1ff5ea,0xbb1df9f7,0xbb2309d0, +0xbb1bf8da,0xbaf83134,0xba5b8235,0x384c4247,0x3a14165f,0x3a6a32c3,0x3a81cb6f,0x3a8273f9,0x3a19d529,0x3a425f7b,0xb8ea529e,0xbadeb5d1,0xbad51596,0xbb4214ea,0xbb3c48a2,0xbb70b108,0xbb934d89,0xbb853c32,0xbbabdcca,0xbbda76ac,0xbbb52c1b,0xbbcda831,0xbbc38b97,0xbbbe36d9,0xbb67187e, +0xbb95e6c3,0xbb6bbde7,0xba355e91,0xbacac157,0xbb2152b3,0xbb432ee6,0xbb629ae4,0xbb85e262,0xbb972a67,0xbbaea2d1,0xbb808128,0xbb342a25,0xbb05044e,0xbad58703,0xbab2162e,0xba6e637f,0xba9ba7d8,0xba9b0a85,0xba80a4f0,0xba6fa6b3,0xb9d60240,0xba5b8ade,0xbafc7f6e,0xbb0fa2b1,0xbb2e8169, +0xbb448b1c,0xbb38294a,0xbb337519,0xbb3f6b01,0xbb49b089,0xbaebab63,0xbb18d6b6,0xbaad0be2,0xbaa804d7,0xbb26f555,0xbb0bd67b,0xba89b601,0xbb5497d5,0xbb57d67b,0xbaf56f99,0xbae4a5ec,0xbaeaffa3,0xbaecbe0e,0xbaf1cf40,0xbaedf5e5,0xbb03f0a5,0xbb01a270,0xbb09349d,0xbb01de65,0xbae335a9, +0xbabe609c,0xba98c25d,0xba96184b,0xba963122,0xba9e4258,0xbaaaba1b,0xbab03524,0xba90ed98,0xbb3ddff4,0xbb310fcf,0xb97b61a2,0xbb5de617,0xbb4f993e,0xb9a1e98e,0xb98b1929,0xb9e0e463,0xba38b1ab,0xba5fb88e,0xba8a6576,0xbaac5f9d,0xbb459548,0xbb494497,0xb934ad08,0xbb14f7e3,0xbb4a3c42, +0x3b7fe764,0x3b9109e1,0x3b74a96a,0x3b261ca9,0x3b2e46a4,0x3b292c0c,0x3b465f2f,0x3b50d16e,0x3b52e518,0x3b4fcd47,0x3b54740a,0x3b5ac127,0x3b5a2bb2,0x3b525919,0x3b427262,0x3b38e1ba,0x3b3c0ec0,0x3b3ebc42,0x3b45b405,0x3b32a5af,0x3b586d23,0x3b1536bd,0xb986dac4,0xbbdaa193,0x3b536fb8, +0x39cf5893,0xbbb8d0aa,0xbbbb80d3,0xbbb294d3,0xbb8f8d11,0xbbaaa684,0xbb9fcad1,0xbb83dfb6,0x3945029d,0x3b8107e9,0xbbafd64f,0xba79e61f,0xbb749c64,0x3b8a0031,0x3b4ec736,0x3b3b508c,0x3b1099c1,0x3b7a1bf7,0x3b9b8ae0,0x3ba82b87,0x3ba8795c,0x3bb7116f,0x3bb1133f,0x3bbe236b,0x3bb4f155, +0x3b94635a,0x3b780b60,0x3b6c340a,0x3b6bab8f,0x3b68af90,0x3b618f68,0x3b84a973,0xba95bf90,0x38720550,0xbb14243e,0x39b7d24b,0x3b3e3399,0x37793f31,0x3ab09402,0x39b8d274,0x3b20de5a,0x3ae4ccae,0x3b6cb818,0x3998ec87,0x3a59c3ce,0x3ab3b0ec,0xb9daa835,0x3aa72852,0x3b0e3ff0,0x3baf5cbb, +0x3b072302,0x3b249601,0x3addcb61,0x3b927220,0x3bb057d7,0x3bbee653,0x3bc63857,0x3bda3049,0x3be5bcc6,0x3bfb5527,0x3be4c006,0x3b96714d,0x3b82c1be,0x3b669802,0x3b88ff01,0x3b755c47,0x3b88aef2,0x3b32d63f,0xba9c0693,0xba20c595,0xb81ea949,0xb9c90696,0xb8f36418,0x3b72f8b4,0x3a4fdd32, +0x3b954e7a,0x3b9db70a,0x3b7595ec,0x3b252eec,0x3b1c926f,0x3b4bde4e,0x3b1aee6e,0xba9650d7,0x3b9ab049,0x3b0edfde,0x3b35e458,0x3b67769c,0x3aaec54b,0x39df5c81,0x3b836ee2,0x3be699e0,0x3bfe91ff,0x3c11e5a2,0x3c224e4b,0x3c164433,0x3c351178,0x3c203708,0x3bd2563e,0x3ba5d21e,0x3b77a2ab, +0x3b87bba5,0x3b79811a,0x3b7c3f83,0x3b54294d,0x3918acbe,0xb9253ee5,0xbb38201b,0xb9c38b77,0xba4a8023,0x3b997ea8,0x3ac44554,0x3afff385,0x3ba29aad,0x3bab2d1f,0x3b9336b2,0x3b01fc69,0x3b276333,0x3ad49de4,0xb8aa5a57,0x3b52edab,0x3ba57135,0x3b567dc0,0x3ab3a10a,0x3ab156c0,0x3a456d5d, +0x3bb8aadd,0x3bd63e9b,0x3bf7e87d,0x3c0d28e3,0x3c22acaa,0x3c2f8eb5,0x3c49c05a,0x3c33cb5d,0x3bb6ca85,0x3b97fa23,0x3b8055e5,0x3ba46c1d,0x3b9829de,0x3b87e6df,0x3b4bac54,0xbb10b2bb,0xba482001,0xbb07c330,0xbaa464bc,0xb99e69f5,0x3b80f2c8,0x3b532b92,0x3b7714ba,0x3bc3ab8f,0x3ba7d890, +0x3b98dd76,0x3b0a1794,0x3b9c4318,0x3b6b8868,0xbb2a835d,0x3ad64292,0x3c2cdc1a,0x3c0e8906,0x3c081af6,0x3b7fc052,0xba924687,0x3b46d42d,0x3c1744ae,0x3c81f7cd,0x3c5ba9ea,0x3c20f686,0x3be5d0fa,0xbb0be67b,0xbb9ecede,0xbb5d4fe9,0x3a97dccd,0x3b5ab1a3,0x3b869770,0x3b9d2f43,0x3bc6df79, +0x3bbe9819,0x3adda908,0x3b0110ba,0xb9b2aee2,0x3b7022d5,0x3b0c1658,0xbb0d0fc6,0x3af5f411,0x3b5de8fa,0x3b421781,0x3b26a3ef,0xba3f6fa7,0xbb8edf3b,0xbc14f269,0xbb5880da,0x3bb5d6f6,0x3c83d09f,0xbc307db0,0xbba7340a,0xbbcec389,0x3abad9f3,0x3c84c8fb,0x3c108bf1,0x3bb268a0,0x3b6bb9a2, +0xba5f41e4,0xb93a30f3,0x3bb1bb69,0x3b2ba592,0x3ad42f2a,0x37a4ad62,0x3b060227,0x3b8cb489,0x3c156af4,0x3bd88ce8,0x3bb5c7f9,0x3ad8156d,0xbaa571e6,0x3aa93adb,0x3afb5793,0x3acabae2,0x3b19d382,0x3b74d340,0x3b58ee32,0x3b276c29,0xb8b2c3bd,0xba1db9bf,0x3a83a5d5,0x3bca59ac,0x3c182edc, +0x3bba3db4,0xbc051222,0xbc2cbab7,0x3b2e227b,0x3c65dac5,0x3b1c7c5a,0x3846a622,0x3bcde3a6,0x3c067af6,0x3c473354,0x3cbb3bfd,0x3c0f5560,0x3b2dd0c5,0x3b8a7b5f,0x3be77e97,0x3c272830,0x3c3b7dec,0x3c31d255,0x3bfab34a,0x3b8f0b8a,0x3b26a30d,0x3b0b2ec8,0x3b57538b,0x3ad02c27,0x3ab0448d, +0x3a92f931,0x3b61e4a7,0x3b59b167,0x3a81ae7e,0x3abe6009,0xb9a33dd1,0xb9a8b22c,0x3b133183,0x3b41707d,0x3ba93044,0x3b09a233,0xbb2a3a5f,0xbb3f05fe,0xbae5a4c1,0x3a2cee81,0x3bc1ccdd,0x3b2e3876,0x3b85f87d,0x3c167aff,0x3c3cc6e2,0x3c7def08,0x3cb49b5f,0x3c7297d3,0x3c2d427a,0x3bd7430e, +0x3c4d7d9b,0x3c6cec82,0x3c6d4d26,0x3c2cada4,0x3be89927,0x3b4b560f,0x3a6f9ce7,0x3a72dc60,0x39ab6d3c,0x3a398493,0x397c0a29,0xb9917a2b,0x3a8a22d8,0x3a86d57e,0xb9ddb3c2,0xba3b16a5,0xb9f548f8,0x3a5811ed,0x3b1ebeca,0x3b684c22,0x3b51c65a,0xbb3d06e8,0xbb9224ba,0xba4851f0,0x3a3276f8, +0xbb8340e8,0xbb9ddb8b,0x3bb861e4,0x3c3181b1,0x3cb1b8b7,0x3c65772f,0x3c253a4f,0x3b47dc98,0x3c09ff7c,0x3c1e5ee9,0x3c175b80,0x3c1b7a88,0x3c03f8b8,0x3bae2369,0x3ba8d812,0x3b98fafc,0x3bb05b7f,0x3b5fc45d,0x3aa1080a,0xbaa2be93,0xbaadbffc,0xbab7fdb9,0xbb09e360,0xbb24dc1e,0xbb180e59, +0xb9f9a117,0xbafc0d9c,0xbacf7e5b,0xb9e03774,0xbab54786,0xba0db2d8,0x39cd60b5,0x3b253801,0x3b873da4,0xba774d3b,0xba920e99,0x3ba3a77a,0x3c1f8e41,0x3cc9ac02,0x3ccb3c36,0x3ca435e8,0x3c9e7ea4,0x3ca401c6,0x3ca8c1f7,0x3c649d53,0x3c336fce,0x3c102309,0x3b98e7ec,0x3ba64843,0x3b89c2c1, +0x3b2d8156,0x3ae487bb,0x3accc961,0x3aa927c1,0x3b0e9f31,0x3b46c8b9,0x3ad1f65e,0x3aa408e4,0xba4b2aa1,0xbaaa0ce6,0xbafb356a,0xbb06cf95,0xba8b1dcb,0x39c5b28a,0x3b0f0122,0x3ad59a1a,0x3ad822d5,0x3af8e9e9,0x3b24eaed,0x3a513de1,0x3b93bc6c,0x3b9f7d6e,0xbc23fb46,0x3ad56d41,0x3b23b1d2, +0x3b60f691,0x3ba9bf8a,0x3bc3de70,0x3bc0c2d6,0x3bf99a15,0x3b98f575,0x3b4c5560,0x3b43f9fd,0x3b81df81,0x3b8e3995,0x3b7860ab,0x3b8a4001,0x3b98cf3e,0x3b987333,0x3b8437f6,0x3b3d46a2,0x3a3d36a4,0x3a3f2e6c,0xb89299d2,0xbae084cd,0xbb1bb576,0xbb23e712,0xbb118d38,0xbad6b114,0xbb224e8e, +0xbb254a11,0xbb7a98bc,0xbb7b7aba,0xbb568fd5,0xbb9e8514,0xbb95805a,0xbbd15dd5,0xbb9e06ec,0xbb3f6352,0x39b3eadc,0x3b40e69d,0x3b1a00fe,0x3aeb6a8c,0x3b663d96,0x3bb338d5,0x3bfcb84c,0x3bc9df24,0x3bad01d3,0x3b98a498,0x3b8b7f7c,0x3b811860,0x3b5ffa7f,0x3b6d7c29,0x3b5979db,0x3b5fb5b5, +0x3b5c4c39,0x3b4c794c,0x3b53b96c,0x3a9d9fd5,0xba35cd10,0xbae6b342,0xbb1a529b,0xbb3cb4d6,0xbb35231a,0xbb8468be,0xbb9845de,0xbba9d56a,0xbba2b6af,0xbbaf83b9,0xbbb9e53e,0xbbbdb137,0xbbccf02d,0xbbcd2b6b,0xbba0c3a4,0xbaac1db7,0x3aae0e92,0x3a866354,0x3b0e75b1,0x3b6d83ed,0x3b860082, +0x3b8a90ea,0x3b9fd006,0x3b964d1c,0x3b95f1fc,0x3b942921,0x3b4b188e,0x3b0b0872,0x3a8d008c,0x3ab0fb7f,0x3ad03ed3,0x3af47f5d,0x3afa6f2d,0x3b200128,0x3b1cc6bd,0x3aa913d4,0xb9f62547,0xba7ccec9,0xbab63b8e,0xbadd0fbf,0xbad3b478,0xbb4e7448,0xbaaebf9c,0xbb8aa8cc,0xbb4dab1c,0xbb9b290f, +0xbb97e0a7,0xbb3d1095,0xbb4b06ac,0xbabb1789,0xb9c4291b,0xbb2cb265,0x3abf87da,0x3adc01b8,0x3ac38b3c,0x3a78874a,0x3abb95f4,0x3aee15b7,0x3b1d0090,0x3ab9efc9,0x3a45e555,0x3901ea41,0x37bddb8f,0x37a71a02,0xb9400073,0xb82ce031,0xb832e9cc,0xb92104b6,0xb8f557ea,0xba002e11,0x39e83089, +0xb9bab355,0x39a0f2f3,0x39617aa9,0x399fd936,0xb9aa483a,0xb96a647e,0xb97673b3,0x3a0b9ba8,0xb9ab16fb,0x39851788,0x3a8dc079,0xba517ee1,0x39d468a4,0xba68a9d9,0xbb2dbdfa,0x3ab9cb1c,0x3ae60b5d,0x3b03b805,0x3abfea21,0x3ae93178,0x3b030d14,0x3b0b4f13,0x3b022a8d,0x3b07cf02,0x3b05432c, +0x3b0775df,0x3b029f84,0x3aea0544,0x3ac3242a,0x3aa2a4c9,0x3aaa061b,0x3ab13b8e,0x3abf364f,0x3ace7ebd,0x3acbe7fd,0x3ae0c9a3,0x3ad53c87,0xb913845f,0xbb658660,0x3ad0f692,0xb90ee769,0xbb84f061,0xbb9462ff,0xbb86b2af,0xbb8110c8,0xbb8d4fd0,0xbb81b971,0xbb62f449,0xb946e8ee,0x3ac8ec6b, +0xbb485a22,0xba04dcaa,0x3b171267,0xbbaa9406,0xbb890d14,0xbbbc7094,0xbb7f7c77,0xbb7c4202,0xbb6b46b4,0xbb889968,0xbb912b7d,0xbb92abc1,0xbb8d94a3,0xbb8a857b,0xbb7fd683,0xbb793c4f,0xbb802a32,0xbb89409e,0xbb908dfc,0xbb98728a,0xbb960c30,0xbb941cac,0xbb8289ce,0xbb968e96,0xbaf605b6, +0x3a6e793a,0x3bc04d3a,0xbb550d38,0x3a33d3d4,0x3bd4ff67,0x3bcba289,0x3bc220b7,0x3bae8484,0x3bcd360b,0x3bc1782e,0x3ba24290,0x3ad83400,0xbb5f82c2,0x3ba1175b,0x3b1d09ac,0x3bebcae8,0xbb7a085f,0xbb91381c,0xbb9b2112,0xbb8e7f00,0xbbd5daf5,0xbbe9f28c,0xbbe8c5aa,0xbbd35b13,0xbbc6abbd, +0xbbac5d3d,0xbb91a476,0xbb9a971c,0xbbc6cb4c,0xbbdaa30d,0xbbed0523,0xbbdccbc7,0xbbc4a0e1,0xbbb6bc47,0xbbc1fdf4,0x3a288337,0xbafeaff2,0xba1da4fc,0xba6c86cd,0xbb5690a1,0x3adfb7e4,0xbab1789e,0x3a5298ec,0x3a77e70b,0x3a8b9699,0xbb2f7155,0x3a108a82,0x3a1789ed,0xb9904e19,0xb88a5378, +0x39654ff9,0x3a1d17a9,0xbbe3db50,0xbb8d033c,0xbb928d59,0xbb4f5426,0xbbdf8fd9,0xbc064578,0xbc077fc4,0xbbfc90bc,0xbbd234f0,0xbbab77e1,0xbb746b56,0xbb8f9bdc,0xbbd3ddb8,0xbc08d54e,0xbc158c85,0xbc17acd5,0xbbf03444,0xbbf50b6a,0xbb56b307,0x3a7530c9,0xbb0650d3,0xbb8a00bf,0xbab452f8, +0xba5bbc96,0x397cf51f,0x38448a65,0xbb78e410,0x3b139182,0xba36cb87,0x3aa856d0,0xba032e84,0xb9ec6290,0xb9fa8d05,0xba3d3f9b,0xbb7b8fc2,0x3b942d4e,0xb9a5ff70,0xbb9a1db8,0xbb8660e7,0xbb7059d4,0xbc0f4492,0xbc367c3b,0xbc396e09,0xbc24d451,0xbc00b1b0,0xbbcdf48f,0xbb6e8b82,0xbb827aca, +0xbc0860d8,0xbc32f403,0xbc4406ed,0xbc309fa6,0xbc16237a,0xbc0010db,0xbb8c6415,0xbb2b3f3e,0xbbad48ee,0xbb5908e9,0xbb707931,0xbaaa74cb,0x3af703f7,0x3a23f0ec,0x3ade02c8,0x3ba4ccf1,0x3b6ae7b5,0x3b74cfb3,0x39851b8d,0x3b30704d,0x3a94d73a,0xbb24a215,0x39b58f54,0xbb641fb2,0xbb9b0d4e, +0xbbacf1ba,0xbb3fd2e0,0xb97c1d80,0xbbf14746,0xbc2b3010,0xbc3d5901,0xbc2ca905,0xbc00a45c,0xbbaf5fbd,0xbaf75a18,0xbb458b29,0xbbfb04af,0xbc448f05,0xbc62d900,0xbc5fa66a,0xbc2f103b,0xbc13aa44,0xbb82f212,0x3b0d7751,0xbb54e4fb,0xbb560bda,0xbb350f45,0xbaf67991,0x3b8005c0,0x3b0b4649, +0x3b39e3d4,0x3baa817c,0x3bad8152,0x3b839239,0x3b351f6c,0x3b47a6d6,0x3a9c37a0,0xbb8e2070,0x3a491cc4,0x3c204196,0xba5a3980,0xbc257ecd,0xbc4e70fd,0xbc8b224e,0xbc7eea4d,0xbc53232d,0xbbd9c383,0xbbe27034,0xbbc0b777,0xbbcaad96,0xbc700fea,0xbc698f11,0xbbf2134e,0xbb8975b7,0xbaf5716e, +0xbb545f85,0xbb8901a0,0xbbc18120,0xbb917f39,0xba8612bd,0xbb4921b8,0xba884c18,0x3aa716c8,0x3b072a51,0xbb4022ee,0x3b26e20e,0x3b83c192,0x3abbdaf4,0x3a98326a,0xbb056f23,0xbbb38700,0xbc171a5e,0xbb633aea,0x3c220b32,0x3bfd2c1f,0xbc52eb24,0xbc4e9f3d,0xbc42b3ca,0xbb0a59d6,0x3c851b26, +0x3b5c2e04,0x3b04c3de,0x3b0c950f,0xbba1dc14,0xbbb7b0d1,0x399b4ba6,0x3b0f1f83,0x3ad32462,0xbb7244e1,0xbbcb4a03,0xbc0fb3c1,0xbc4ab837,0xbbf47cc6,0xbbe56594,0xbac7d934,0x3af0f797,0xba388554,0x3a59a881,0xb9d06d48,0x3a5ff8df,0x3b4031f9,0x3b1aaedc,0x3aa09063,0xba94b8ef,0xbaa62224, +0x3a54ab51,0x3bbd4a7e,0x3c0f6e89,0x3b1bacbc,0xbc5116b9,0xbc492162,0xb908c3d3,0x3c288d45,0xbb129bfa,0xbc0def27,0xbc3007e8,0xbc748ebc,0xbc5c7dd4,0x3a03d29a,0xbc04ad4a,0xbc072816,0xbb81f639,0xbbac3ebe,0xbbb27900,0xbbcd1bcb,0xbba4b901,0xbb97e066,0xbb137181,0xbb4e8a4b,0xbb640d89, +0xbb171105,0xba3f58fa,0x39044148,0x3a858382,0x3a7f8e5c,0x3ad3750c,0x3a922567,0x39cb8502,0xba4401ef,0xba8c0381,0x3ab07c7b,0x3af928ee,0x3b7650a7,0x3957c1b6,0xbb77762c,0xbb9570fb,0xbaf57d9b,0x3a7b4f1e,0x3b9bf119,0xbbab8ae8,0xbc32a5e7,0xbccfa3a1,0xbcb29f53,0xbca03164,0xba3c7841, +0xbba9b5bf,0xbb74d951,0xbb5df866,0xbba40e9d,0xbb91e5ff,0xbb9184d1,0xbb9d233b,0xbb73339c,0xbaee86b2,0xbb4caeb9,0xbb906692,0xbadd2556,0xbab707c8,0xba855865,0xbae05fb7,0x3a1fd8bb,0xb9cc5003,0xba00e1ad,0xbad42e20,0xba8d0b43,0x39a3e01b,0x3ac5f891,0x3b20b37a,0x3a4f3428,0xbb34aa0a, +0xbbadb3bd,0xba584ca1,0xbb416e0b,0xba9a1ff6,0xbc129401,0xbc347395,0xbc49b334,0xbc8ca3a7,0xbc6a325c,0xbc2183ff,0xbb656617,0x3ab9f669,0x3bb79ac8,0x3b85b5b1,0x3bcd9a7a,0x3b89fe9b,0x3b4c496b,0xbaca3357,0xbb9fa7f3,0xbbe0298b,0xbbce2c2a,0xbbb111ca,0xbb75919d,0xbb34a6df,0xbb6c6cb2, +0xbb2ee882,0xbb7c430f,0xbb3dd264,0xbab2d22c,0xbb055dac,0xbb01d87e,0xba8227a6,0xbade84cd,0xb9fb1be6,0xb89e5e4d,0x3af8521d,0x3aba256f,0x3a3e11fe,0xb9d7b08d,0x3bfab0a7,0x3b9e90bc,0xbb92bc8e,0x394e6039,0xbb66bf0e,0xbb608970,0xbb78708a,0xba154153,0xbae44eaf,0xbb448e4f,0xbbd861ea, +0xbbd96573,0xbbcf94d3,0xbbcc636b,0xbb14e418,0x396cbe28,0x3aa23703,0x3af282ba,0x3a4fccc0,0xba9772da,0x3a85b46e,0xb79401d2,0xbafcb826,0xbad65700,0xbb0d897a,0xbb2343d4,0xba4e4772,0x3a24f6e3,0x3ab2058d,0x3a7f6f24,0xb9c15fbd,0x3a384926,0x39eb63ab,0x3b53fecf,0x3b8970e1,0x3a8969ed, +0xba4f2a64,0xbc080d5b,0xbc173d9b,0xbbef1b31,0xbbed739b,0xbbbf63ed,0xbbb72372,0xbbbfcf60,0xbae75216,0x3a5816ff,0x3af1a44a,0x3a1b1f65,0xb9b70172,0xba752468,0xba820373,0xba8a04d5,0xba706c34,0xb9e9a53c,0xb8fd0a4e,0x3b026c76,0xb78c0573,0xbb2ba096,0xbb65282a,0xbb76351a,0xbb64975a, +0xbb2ef346,0xbb43e2cd,0xbb4de4ff,0xbb5fc964,0xbb80a688,0xbb8f6a13,0xbb5ee934,0xbb7b1ada,0xbbb19dd1,0xbbf01d37,0xbc034c7a,0xbb57bafa,0xbb1c487b,0xbbb669ca,0xbb906f4b,0xbb96c01e,0xbb8000c8,0xbb5f6721,0xbb71aab3,0xbaaecd8f,0xba1169ff,0x39bcd3ee,0xb9893638,0xb9485c5b,0xb91e8fc1, +0xb8a34ae0,0x3a30875b,0x3a2c425c,0x39d08ee8,0x3830cb1b,0x393deccd,0x39f715bf,0xb9df63e7,0xbb51c2e2,0xbb1045a3,0xbb3c4539,0xbb2f625b,0xbb641892,0xbb70515b,0xbb98a855,0xbba8cc2a,0xbbb36b46,0xbbbfc225,0xbbd506b3,0xbbde7a81,0xbbb90caa,0xbba1338b,0xba2064ae,0xbb644ae7,0xbb5552b5, +0xbb36cdc3,0xbb38ff4b,0xbb3eb12b,0xbb43e4fc,0xbb3fb68e,0xbb3951c6,0xbb1e8855,0xbace1cc2,0xba1a9c19,0x39de21ab,0x3a9cecf7,0x3a77939f,0x3a63772d,0x3a07e268,0x39be23e1,0xba2429f7,0x37ad6677,0xba5d5590,0xbaa1b5b3,0xbb30f727,0xbb196c23,0xbb275888,0xbb2a0967,0xbb33d677,0xbbac19a0, +0xbb8235e6,0xbbb5c972,0xbba40c2d,0xbbc51440,0xbbb740ce,0xbb386342,0xbb8a3094,0xbb66803d,0x3ae8e463,0xbad4d03c,0xbb07c49c,0xbb40551c,0xbb6cd1a6,0xbb8fa7f7,0xbba4c418,0xbbc139f6,0xbb9ac27f,0xbb730b00,0xbb4d633e,0xbb2c7b12,0xbb101545,0xbab27a28,0xbaaf33ad,0xba9425c8,0xba6b3235, +0xba24be68,0xb8781ee1,0xba0dc54e,0x394ed35d,0xba06ca39,0xb9d5fc5d,0xba8b1c33,0xba83e073,0xbaaec305,0xba92bc63,0xba9595f1,0x3805aee1,0xba3f242a,0xbac3506c,0x3a473b6d,0xba8e3c3b,0xba2b83fa,0x3abaf0b6,0xbb23c8bd,0xbaa32e5b,0xbb1dd383,0xbb0327e9,0xbb0990c8,0xbb0a2293,0xbb0f2e04, +0xbb10b68b,0xbb20c577,0xbb181eab,0xbb1a57e0,0xbb0e1b59,0xbaf7603f,0xbad624e5,0xbabb379f,0xbac75caf,0xbacd0a36,0xbad602e5,0xbae56ef3,0xbae61806,0xbb00f3be,0xbab0c91e,0x3a046a8f,0x3b3759fc,0xbadf0539,0x399d4d7c,0x3b4e1465,0x3b5ea7c1,0x3b37803c,0x3b17d8e2,0x3b2ef4bf,0x3b1fe8d0, +0x3ad0cf05,0xb9f5e400,0xbafa9061,0x3b2aa338,0x3a929e6d,0xbb336119,0x3b364d1e,0x3acacb51,0x3b97fccc,0x3b18fe5e,0x3b167d1d,0x3b0f6a38,0x3b1a35f9,0x3b20c0c7,0x3b26aba2,0x3b2b725e,0x3b34f916,0x3b41b3b0,0x3b4146a5,0x3b3d0364,0x3b33dc95,0x3b2736c4,0x3b24b5fe,0x3b204fd3,0x3b243c33, +0x3b0cb516,0x3b4c856e,0xba96205d,0xbb801786,0xbbe83e44,0x39afae8f,0xbb5be7a5,0xbbd77a78,0xbbddc7ee,0xbbd02075,0xbbaf54f5,0xbbe45a36,0xbbdc2811,0xbbc18311,0xbb7ed14b,0x3a8e9b9a,0xbbc5f071,0xbb9ec5f5,0xbc02d1eb,0x3b230fc1,0x3b49c3f3,0x3b130fe7,0x3ac18b1f,0x3afc5ace,0x3b2976c7, +0x3b605fd3,0x3b7b0c70,0x3b93f83e,0x3b9362ee,0x3b9cb7af,0x3b96189d,0x3b7a3a0f,0x3b49e844,0x3b399b19,0x3b315a1e,0x3b1e6dd3,0x3b2b58a9,0x3b7e3936,0xbb8675c4,0xbaf1e32e,0xbb636757,0xbb33ae7c,0x3a71bf23,0xbaa8a30d,0xba2286eb,0xbb18932c,0x3a01ec1a,0xba41e253,0x3b6e7062,0xba897160, +0xba9cc6b2,0xba23651f,0xbb211397,0xba110551,0xbb1e78a1,0x3bafa146,0x3b366b6d,0x3b00fbf5,0x3a94165e,0x3ae293d3,0x3aed25ff,0x3b523941,0x3b81bf6d,0x3ba72c1c,0x3bbe1576,0x3bd324a1,0x3bc764e2,0x3b8c4dde,0x3b65bbdf,0x3b267db1,0x3b370e7e,0x3ae6fb41,0x3b50bd76,0x39bec662,0xbbb9e59b, +0xbb2db816,0xbb273857,0xbb24382c,0xba84dd06,0x3a95a5a0,0xb82d87aa,0x3b8b9a03,0x3ab77aac,0x3b3c36e2,0x379af4bd,0x3b01a75f,0x3ae08e04,0x3a29e2dc,0xbb3b99c5,0x3b5b202b,0xbb34ab1f,0x3a6eb840,0x3b9d2546,0x3a63b515,0xb88f20fc,0xb8dbc709,0x3ac93334,0x3b7671ab,0x3bbf394d,0x3bfb94ac, +0x3bf42913,0x3c10d961,0x3c0397cb,0x3baccdae,0x3b76b21e,0x3b1409f8,0x3b146412,0x3ac6653f,0x3b21bde6,0x3acdaed7,0xbb112eab,0xb88afb94,0xbb845bb2,0x39c5cc23,0xbaceb20c,0x3b921af4,0xb92a030e,0x3adc99c9,0x3bab87a5,0x3bb45c2d,0x3b6b3a08,0x3b1c2659,0x3a413e46,0x3a99e77a,0xba3043bb, +0x3b0c4f6e,0x3b59fe31,0x3b0ce61e,0x3b95a15b,0x3a902f39,0x3a9d35fa,0x3a205356,0x39816526,0x3b360c81,0x3b9c03f5,0x3bedccd1,0x3c147ffa,0x3c2b9123,0x3c270571,0x3bbedb6c,0x3b80191f,0x3b17ab7b,0x3b1ce4e7,0x3a9247d5,0x3adbde2d,0x3a97cce6,0xbbea0188,0xbac09beb,0xbb77e464,0xba92b9bc, +0x39855b37,0x3b6d837f,0x3b61bba9,0x3b4db8ce,0x3bd33f21,0x3baa2ff7,0x3ba4d84d,0x3b4ae616,0x3b90e008,0x3b44dd86,0xbae5e8c3,0xb99d0a91,0x3a257cb2,0x391a2a56,0x3bd35d83,0x3ad85dcc,0xbb1ceb79,0xba4b50f2,0x3b8c74fa,0x3c533135,0x3c4cfc7d,0x3c3ae98a,0x3c3fcd27,0x3abe5351,0xbb02c0c6, +0xba6b4fb4,0x3b0f9fcb,0x3b726a41,0x3bf182fa,0x3bce576a,0x3bc40a57,0x3b43a966,0xbad72842,0x3af662e3,0xba976649,0x3b6dcb8d,0x3aaf65b4,0xbb246327,0x3b5884b9,0x3b967668,0x3a280abd,0x3ac8153a,0xbaf20da4,0xbbb7149c,0xbbe9859c,0xbb3365c9,0x3b6cab86,0x3c0b434a,0xbc0ea8b6,0xba9d71b0, +0x395a7e58,0x3b49c3c3,0x3c875e3d,0x3bfa2590,0x3b9e7965,0x3b294421,0xbad2dead,0xba8263c1,0x3b510090,0x3b5c0ec7,0x3b3791fa,0xbb06bd29,0x3945893d,0x3ac4a827,0x3ba961b7,0x3b234830,0x3b585c3b,0xbac48a11,0xbb8152f1,0xba7ff024,0x3a93f0c2,0x3a9b2728,0x3b2f6d4f,0x3b5aa136,0x3b1d6227, +0x3a84a7ed,0xbadb1ef1,0xba7626f3,0x3ae08954,0x3bd3b5f8,0x3bddc636,0x3b33f1f2,0xbc2820a8,0xbc226056,0xb94b564d,0x3c64fc76,0xb9ed9dbb,0xbb6dc7c4,0x39dd28ce,0xbb1f4923,0x3aef97e1,0x3ca089a2,0x3c0f3fd9,0x3baf2265,0x3bb4fcfc,0x3c0301cd,0x3c0ca909,0x3c04daf5,0x3c0b1d77,0x3bb71712, +0x3b90e51e,0x3b013b4f,0x3b3abfab,0x3b199492,0x38e207d2,0x3a4f11cf,0xb82a5b98,0x3b3e1d52,0x3b09a220,0x3a9a9ce4,0x39ad0407,0xba2b95e0,0xba151937,0x3ae4205a,0x3aeead9a,0x3b4791b7,0x3ad2bff6,0xbb63106b,0xbb68fa76,0xbbacc935,0xbb3f80b2,0x3b911f43,0xba58fb15,0xbaba4af9,0xbab29a5a, +0xba4bf734,0x3b88d18a,0x3cb0f6e4,0x3c47f5d7,0x3c1bc7c0,0x3be38ca3,0x3c20c638,0x3c2645d8,0x3c33ccc3,0x3c047fd6,0x3bb71344,0x3b4c58ef,0x3a065f79,0x3aed7b62,0x39d33556,0xba379477,0x38e910f0,0xb980bf4d,0x38a5d59b,0x3a428004,0xba24acdc,0xba314c0f,0xba4327da,0x39889d72,0x3b0786e0, +0x3b0c71ad,0x39b68367,0xbb562477,0xbb7727bd,0xbaba52ce,0xbaffc538,0xbaf43c02,0xbbba5620,0x3a9552da,0x3b39ba9e,0x3c3e0c43,0x3be9b051,0x3bc96d63,0x3b5dec68,0x3b68868d,0x3b9875c6,0x3bd63647,0x3bdf036d,0x3bd42a25,0x3b875103,0x3b5c7f0e,0x3adebd1c,0x3b13fe58,0x3aa0ee22,0x396d0476, +0xbb0794d5,0xbb23019e,0xbb18fd44,0xbb3bf4db,0xbb2a8307,0xbb0bc318,0xba4a6adb,0xbaac9582,0xba8f5e9e,0xba671b6e,0xbab5e76b,0xb994296b,0x3a82efb1,0x3b0e4a41,0x3b592661,0xba0e07b7,0x3a5f0df2,0xbb286975,0x394413bc,0x3c85220b,0x3c8a58c2,0x3c6851ba,0x3c5a2a34,0x3c698c90,0x3c7fad7d, +0x3c3a3bfe,0x3c0f146f,0x3bc8538c,0x3af177d1,0x3b0c3231,0x3a4bd728,0x3a7555c0,0x3aa340b2,0x3b106048,0x3a5b09d0,0x3ae898d4,0x3b4184f4,0xba44aa2e,0xba1615d2,0xbaaf5802,0xbb0d097d,0xbb04cc24,0xbb1be7ec,0xb980a5bc,0x3addb679,0x3b03ae38,0x3aa0782f,0x3a589405,0x37e0e4bb,0x3b17291d, +0x39cf0d52,0x3b09b2a2,0x3b532c97,0xbc2afd45,0xbb1dd5db,0x3a005829,0x3ad57a04,0x3b905971,0x3bb95ef4,0x3bc3fb0a,0x3bd5d3d7,0x3b8cdcd2,0x3b52faa2,0x3b5bc997,0x3b5718c4,0x3b486228,0x3b1d2118,0x3b42bf63,0x3b642fdc,0x3b721961,0x3b7a1c09,0x3b351d36,0x398da8f0,0xb9f8a781,0xba64e7de, +0xbb70dedf,0xbb130922,0xbb0ebabe,0xbb345149,0xba75eb93,0xbb0e9a34,0xbac46aea,0xbb395385,0xbb156c5f,0xbad6fe77,0xbb4fea26,0xbb3089aa,0xbbcb6783,0xbbb1c8c8,0xbbbd0183,0xbaf03389,0x3b0166dd,0x3aa35ddd,0x3a54dd8f,0x3b0cee8e,0x3b864ec0,0x3bd5c968,0x3bba14a2,0x3ba09ce9,0x3b88bc6d, +0x3b6a1260,0x3b5d7bfc,0x3b49323f,0x3b577908,0x3b5421e6,0x3b50ea6b,0x3b4280f7,0x3b2cdfc8,0x3b0526a2,0xba42b389,0xbafe4e05,0xbb1de07d,0xbb36472d,0xbb0d9b07,0xbb06bd12,0xbb72c19e,0xbb80e390,0xbb781496,0xbb82b97d,0xbb95eab8,0xbbb6f89e,0xbbaaf234,0xbbd1e847,0xbc06cfde,0xbbd622fe, +0xbb633e0c,0x39b13419,0x3a1880b4,0x3a7987c3,0x3b1d72dc,0x3b365b5c,0x3b3ed02c,0x3b55630e,0x3b437583,0x3b5bb0e3,0x3b73c94b,0x3b568214,0x3b3db76a,0x3b0db2d4,0x3b14fabc,0x3b163fa4,0x3b23b837,0x3b01f6d8,0x3b2ddb88,0x3abc2e9b,0x39860055,0xba1e93fb,0xba857a5a,0xbab11446,0xbae2bcf9, +0xbae1c299,0xbb252a5d,0xba57c856,0xbbaa41e7,0xbb361cff,0xbbb0e3ae,0xbb94ef30,0xbb907fe9,0xbba801d1,0xbb7837e7,0xbaeb2409,0xbb2987e5,0x3add6e91,0x3ac4dc7b,0x3ad5b82e,0x3aa0e5a7,0x3ad9f471,0x3b0b054e,0x3b351ae4,0x3b1c6a7a,0x3aec777c,0x3a9bf686,0x3a730164,0x3a3a3ec5,0x39f21f63, +0x3a383ce3,0x3a56e1eb,0x3a8782c6,0x3aa00933,0x3aa8617d,0x3b019023,0xb93acf2b,0x399edc82,0xb9b782ed,0xb965a954,0xba807a1a,0xba944c62,0xbac78993,0xba9be7cd,0xbab8af4f,0xba8b0b7a,0x3a773a05,0xbb071be2,0xba0d2f4b,0xb9fda0b9,0xbb1e6f00,0x3a53fb8c,0xb92c53f1,0x3af38a95,0x3aafa7ac, +0x3acdd9a5,0x3ae55c4d,0x3af4689d,0x3ae15d69,0x3adea836,0x3ad658da,0x3ae779c8,0x3af4d66a,0x3af1aae0,0x3ae6072e,0x3ad4e0ca,0x3ad6ed45,0x3ad7f589,0x3adaf1f0,0x3adbbd4e,0x3ad137aa,0x3b09075e,0x398efd10,0xbaf81b95,0xbb67a3eb,0x388f8b46,0xbb094d14,0xbb843d4d,0xbb937afe,0xbb860824, +0xbb83dfb3,0xbb9bff9b,0xbb961cbb,0xbb844f84,0xbb0aae53,0xb8f1c946,0xbb63cd4e,0xbb24684e,0x3af3d9d2,0xbb011488,0x39468f59,0xbb801c19,0xbaf402f9,0xbae06e6b,0xbacfdc32,0xbae8bc38,0xbafe3691,0xbb0a63bc,0xbafed7f3,0xbaf5d0c6,0xbae44bcc,0xbad8d5dd,0xbae4b38a,0xbaf82b84,0xbb1135b7, +0xbb1c3991,0xbb18f8d4,0xbb183137,0xbb01db39,0xbb2de0a7,0x3acf1f6d,0x3b5ddb77,0x3b62f927,0x3a24b67d,0x3b6bda1f,0x3b924682,0x3b91f58f,0x3b899f92,0x3b825e65,0x3ba6b9ba,0x3ba348a1,0x3b990d17,0x3b912445,0x3a09f58c,0x3b6d05bd,0x3b9d848e,0x3bfe0d3a,0xba4014f0,0xbb0b2eed,0xbb00c89a, +0xbb007af0,0xbb2de206,0xbb35af41,0xbb51ac18,0xbb1fdea7,0xbb0c4f82,0xbafbbb8e,0xbaa6bc6e,0xbaae7181,0xbaf84d57,0xbb3cb6ff,0xbb69186e,0xbb64436d,0xbb4bb187,0xbb504a52,0xbb757635,0x3b1be082,0x37f1426b,0x389744e7,0x3b088cff,0xb7d030e9,0x3b03263b,0x3a68dcc9,0x3b3a1f28,0x3b332073, +0x3b36dce6,0xbad33506,0x3b030559,0x3b107800,0x3af813e6,0x3b101057,0x3af8ec48,0x3b9ee76f,0xbb6e569a,0xbb070034,0xbaa1ce80,0xba716d03,0xbaf762e9,0xbb1e4cea,0xbb6202ad,0xbb1e3ecf,0xbadfd098,0xbaae648f,0xb92a8a6e,0xb9ef830d,0xbad65737,0xbb7f92ea,0xbb97cf9e,0xbba420ea,0xbb7ac059, +0xbba41235,0xba979b74,0x3b49dd3f,0xba0a2782,0xbad25492,0x3a933de9,0x3a3d9902,0x3afe6ca4,0x3a8479cc,0xbadff084,0x3b9fdcf0,0x39b44e54,0x3b49dfe8,0x3ab6a06b,0x3ab970ae,0x3ad35804,0x3b097084,0xb8d282b9,0x3be88bca,0x3ab0699c,0xbb204cd5,0xba87fe58,0xbae2001f,0xbb3a09dd,0xbb56f9c0, +0xbba2dfa5,0xbb2df297,0xbab388bb,0xbac2e535,0x3a84b6e8,0x3a7f8a2f,0xb9f1f468,0xbb87b4c1,0xbbbf0d21,0xbbbd0ff4,0xbbb6335c,0xbbbabfc5,0xbb2f349f,0xba8cb590,0xbb88f321,0xbb3b4449,0xbb115d52,0x39b328a0,0x3ad2dd56,0x3aff7e17,0x3adc0df9,0x3bb2c238,0x3b37586a,0x3b77e467,0x3ab84492, +0x3b6f7136,0x3b06695d,0x39268594,0x3aea1062,0x3a9f88bf,0xba6b6685,0xbb5b22d9,0x3a5ed5a7,0x3a9fb946,0xb98e6bba,0xbadff905,0xbb8d2323,0xbb18cc18,0xba927883,0xba52ded5,0x3b1273cd,0x3b0eefd9,0xba1fa13e,0xbba8b61d,0xbbe8974a,0xbbf2f31b,0xbbc6f0d5,0xbbd999a0,0xbb5c99b4,0x3b4c3cd4, +0xbb4f0843,0xbb2399b9,0xbacecc2c,0xbaaad737,0x3b5ca388,0x3aa542c1,0x3b17f7a1,0x3bb125fa,0x3bb3b42c,0x3b7b6347,0x3b62cdb0,0x3b4c93e6,0x3acc367c,0xbafa8eae,0x3b82a831,0x3bf7ff7a,0x3b11ec2b,0xbc02137c,0xbc0ac7bb,0xbc4daaeb,0xbc336eac,0xbbe4f26f,0x3b012e4f,0xbaed6af5,0xbb0cb1b6, +0xba158f74,0xbc435dd6,0xbc6007b7,0xbc14e170,0xbb86c4e9,0xbaa4158c,0xbb7ade44,0xbb0b94d1,0xbb19817f,0xba7383d1,0x3a7ca6f2,0xbb1e5259,0x3a10cfeb,0x3a9d0d49,0x3b300aef,0xbb49d4c3,0x3b8e268d,0x3b9ee2b2,0xba0bc64b,0x3a2711fb,0xbb1e55d5,0xbba12d5e,0xbbcb886b,0x3a07a178,0x3c286948, +0x3bf12de5,0xbbb4d6b7,0xbbf0bf15,0xbc11e3c8,0x3a090830,0x3c7c2b7f,0x3c0ba069,0x3bf129cc,0x3b8591ca,0xbac823af,0xbb419dd2,0xb9b27902,0x3b9a7af0,0x3b9e6f0a,0xbb228b2a,0xbb67c920,0xbbabff6c,0xbba99f51,0xbb20e1c7,0xbb8cc268,0xba83ee68,0x3a1c600d,0xba63cdc6,0x3aa7d14d,0x39a8b9e4, +0x3aacad86,0x3b0dba1e,0x3ac54337,0x3992bd70,0xbb124717,0xba68d2dd,0x3aae3f0d,0x3bbf6859,0x3bd7d584,0x39e8500f,0xbc3b0567,0xbbf1e595,0x3986d93d,0x3c192258,0xbbb29943,0xbbebad12,0xbba7a738,0xbbf3c44a,0xbbad4d66,0x3c31028c,0xbb37975f,0xbbb8da34,0xbaf8a769,0xbb104183,0xbad4bff1, +0xbb1b5af4,0xbac683bb,0xbab462e8,0x3a64ceb5,0xba2ae445,0xbaed3b15,0xb9d93ce5,0x3a637126,0x39e149b7,0x3b156fd0,0x3ab4351b,0x3ad77f42,0x3a53232d,0x38b9c7d6,0xbaf96732,0xba902946,0x3a795cab,0x3aa12b80,0x3ae2ff5e,0x3a52a06f,0xbb4e4e40,0xbb4981db,0xbb5fad73,0xba9c2250,0x3b60dd89, +0xbb8d0b21,0xbbb70467,0xbc1dca34,0xbc3d7125,0xbc19e4f5,0x3c1c6158,0x39805e23,0x3a2bac7e,0x3b5a2116,0x3949d5af,0x3a65ff70,0x3a9c4e79,0x3953d785,0xb99552d7,0xb92ea4d8,0xbabd546b,0xbb61e35a,0xb981259c,0x3a2fba8b,0xb9ef15fd,0xba7d8e2c,0x3a94ad1c,0xb9c8f179,0xb98d9316,0xbac3d462, +0xba78db89,0x3a803a50,0x3a100164,0x3ab17cac,0xbac1eb69,0xbaf03acf,0xbb83a953,0x39b10b56,0xbba2f30b,0x3a52a0cf,0xbbaf837d,0xbabebcc4,0xba043df4,0xbac927b0,0x39ec0f28,0x3af0cbbd,0xba5516fe,0x3b7d0a74,0x3be98171,0x3c0b7eb1,0x3c17d95a,0x3be682d7,0x3b9ce2fa,0x3abadda8,0xbb01a604, +0xbb8b17b7,0xbb89ece0,0xbb960b13,0xbb31d2cc,0xbb44bcd3,0xbb73d7fe,0xbb0e986f,0xbb32a929,0xbb079328,0xba992c65,0xba9f3327,0xbab19b04,0xba9b8371,0xbaa17981,0x393d9a95,0x3a406d77,0x3adae2bf,0x3b0ec0c8,0x3aed8078,0x3b1dbb1f,0x3c04c793,0x3bbbb273,0x3b6207a9,0x3c1c940a,0x3bab411c, +0x3bd2dcbc,0x3bb8b5a2,0x3bdf5497,0x3baadc1f,0x3b98b699,0x3b831f25,0x3ab77417,0xba224192,0xba8a71b9,0xb87c2b38,0x3a9082a3,0x3abeebac,0x3aebe53a,0x3a88ac87,0x39d2c34a,0x3b2e35e1,0x3a6a5a20,0xbb380cb8,0xbb10941b,0xbb0fcfe1,0xbaf51033,0x3a68b6ae,0x3af739ef,0x3b0017b5,0x3acedc88, +0x39e006e4,0x3aa92a1e,0x3adb6ff1,0x3b5bfdd0,0x3b9649da,0x38329e09,0x38f90627,0xbb48bab9,0xbb184b09,0xba1da3d6,0xba35134d,0xba313672,0xbab34ca9,0xbadc927e,0x37bca748,0x3a9973a1,0x3af2e6f7,0x3a9361b8,0x3ac7fcbe,0x3ad2e4f9,0x3aed0fcc,0x3ab0166a,0x38e4053c,0x39b2149e,0xb96a27f2, +0x3a7882f6,0xba9bd838,0xbb5befa0,0xbb023eba,0xbb2cc4dc,0xbb1b0c5b,0xbb0b2de6,0xbb4870ff,0xbb20184b,0xbaf59a4e,0xbae1474e,0xbaceb9f7,0xba4b84af,0xb9bac90c,0xbad36b05,0xbb5b7908,0xbb396835,0xbac04169,0xba9a5b19,0xbb5f0d69,0xbb17c2af,0xbb61a29c,0xbb0f7020,0xbaa81f47,0xb9891f35, +0x3a64c4c4,0x3a86f225,0x3acbe167,0x3a64b462,0x3a4d7c9b,0x3a58cc86,0x3a8b78d9,0x3ab8e204,0x3a72515d,0x3a37cb53,0xb8c17ec3,0xb90d51bb,0x3a5a55a1,0xb9dc44fa,0xbb1e18cf,0xbac945c3,0xbb145a90,0xbb21d8e2,0xbb1a2da9,0xbb366afd,0xbb604207,0xbb6b8091,0xbb821bc5,0xbb8bc7d5,0xbb983407, +0xbba5dd16,0xbb926de0,0xbb7af5b6,0x3834a2ea,0xbb028134,0xbb26b5ff,0xbac49a94,0xbaa5e896,0xba82a2dc,0xba8ef172,0xba6b59c5,0xba07f600,0x394a5c44,0x3a8dea1b,0x3a7f5fe7,0x3aa78f0f,0x3abee410,0x3a888680,0x3a7e88a1,0x3a27255a,0x3a21de33,0xba303703,0x3a30c2ec,0x39faafe8,0xba02a45b, +0xbaba0687,0xbabd6d7a,0xbac190fd,0xba9ba075,0xbb024539,0xbb76a318,0xbaf63b71,0xbb929ea6,0xbb7a2c09,0xbbac746a,0xbb92d77b,0xbb3cefe9,0xbb608667,0xbb324d3d,0x3aebe7d8,0xba49c077,0xba081958,0xba861fbf,0xbac391e1,0xbae7d692,0xbaf6714a,0xbb0d0be5,0xbb0c9ca9,0xbb1087c5,0xbb179d5a, +0xbb040b66,0xbadc874c,0xba891b87,0xba510825,0xba1e9727,0xba016aa9,0xb92e8437,0x386183c0,0x37c6a22f,0x3ad1a5d3,0x3a6b9a4a,0x3aa2cdde,0x3a28804d,0x39ecfe4a,0xb7faa3a1,0x3992df32,0x3a17dd37,0x3a5c1255,0x39d50efe,0xba8003a7,0x3a9b77bc,0x39665fd9,0x39e9dd85,0x3ade9be0,0xb9feda0f, +0x3a3bece5,0xbad2875d,0xbaad317a,0xbaaec41c,0xbaa52c50,0xbaab2e9d,0xbab6d092,0xbac60028,0xbaaff5e6,0xba9c4f98,0xba86469c,0xba728f86,0xba70db6a,0xba7aebff,0xba8c7402,0xba906a3c,0xba94d058,0xba9c6ecf,0xba98d97b,0xbad01221,0x39f1b030,0x3b0b3381,0x3b164bd6,0x39995ea1,0x3b0820b9, +0x3b21492b,0x3b2a3cb7,0x3b08cadf,0x3ade666e,0x3b0a51ac,0x3b08071c,0x3aab087f,0x3a5cae21,0xb9d0acc7,0x3aec9514,0x3b0ec958,0xbab7192b,0xba69d26d,0xbb2015f9,0x3ab7202e,0x33ae6b6c,0xb91865c6,0xb9407940,0xba0949cb,0xba1c4c4c,0xba02dd00,0xb9a2de12,0xb917dd6b,0x38e8e0df,0x393e1a14, +0x3930baf6,0x38fd1370,0xb91c675a,0xb9ae61bf,0xb9ef7351,0xb9e83e14,0xba08bd91,0x38aba4ee,0xbb6dbee0,0xbb8fda3c,0xbb17f539,0xbb3892c6,0xbb8900e5,0xbb0f3b63,0xbb1ed920,0xbb0fda82,0xbafb6ba4,0xbb462ffa,0xbb477365,0xbb3d7de7,0xbb906dd8,0xbb20fed7,0xbb0b4384,0xbb948779,0xbb9fc4e2, +0xba841d20,0x39b17222,0xba1d1d26,0xba8a3032,0xbb2680b9,0xbb28886a,0xbad7dd3d,0xba573db4,0xb8f9d2ac,0x39057a58,0x3a07b165,0x39ee520b,0xb83bd844,0xba554f7d,0xbaa60d0e,0xbab30d16,0xbac0e521,0xba8844d1,0xb7ae64e7,0xbb88f430,0xbb44c1a6,0xbb41c33b,0xbb7c6a1d,0xbaee6009,0xba904e8a, +0xbb0503ec,0xbb35ae20,0xba6319ef,0xbaf4626d,0x3a8b1919,0xba9acab0,0xbaee8a57,0xbae0e78f,0xbb28a5b5,0xbab1d833,0xbb8431ed,0x3a714356,0x3a913587,0xb9d29d60,0xba2fa2b1,0xbb5a29ca,0xbb903e31,0xbb34cf11,0xbadcd591,0xb96dd1d7,0x3a2333ff,0x3ad68104,0x3ad100c5,0x3a285d2a,0xba6086b7, +0xbb0d11d1,0xbb2884b3,0xbb40f586,0xbacede53,0xbb37704f,0xbbc9c08e,0xbb6fd4c4,0xbb962a82,0xbb4e4b8c,0xbaa28c93,0xba999997,0xb9daf1ae,0x3a779822,0xba899824,0x3a292dd9,0xbaadc142,0x3a66e264,0xb8e2ed88,0xba610ac1,0xbb2d4c32,0xb90b9a15,0xbb4d175d,0xba5f83d5,0x3b1bdcdb,0xba5748b2, +0xbabfd7e9,0xbbc9d8c4,0xbbe97d0a,0xbb9721e4,0xbb002005,0x39d367f8,0x3a44619a,0x3b1420ad,0x3b10661a,0x39f0f0ab,0xbb0440cc,0xbb6c07d4,0xbb78e6f9,0xbb83b1cd,0xbb23df05,0xbb0cba70,0xbb836f00,0xbaebd912,0xbb8fbe7d,0xb8cbadb5,0xbac725f2,0x3b3aabaa,0xba33e269,0x3ad6c7b7,0x3b9e4d45, +0x3b8c1e20,0x3b28cefd,0x3b0c5a7c,0x3960f094,0x3a86bb16,0xba8a55ef,0x3a716f4a,0x38a49ae6,0xba1c8163,0x3b820aec,0x399fe0c0,0x3aa57192,0xbbbe5592,0xbc00b4c3,0xbbb6fc6b,0xbb589170,0xb95fd3c2,0x3b0498cd,0x3b87bbbd,0x3b9e0e0b,0x3b12f109,0xbade2146,0xbb8978ba,0xbbaca601,0xbbb982f7, +0xbb8b712f,0xbb2ddf27,0xbbecdd78,0xbb3265e6,0xbb9bc042,0xba9e2236,0x3998612e,0x3b4dc392,0x3b4996ca,0x3b297a44,0x3bc965c0,0x3ba7efe3,0x3b9a2a72,0x3b836aaf,0x3b61e764,0x3aef5d45,0xba93e080,0xba4e90ec,0xbb8d595d,0xbbef8b25,0xbb113944,0xbbc807e8,0xbc176109,0xbc15ec90,0xbbcd0fb6, +0x3b289f41,0x3b87ba9b,0x3bbbac99,0x3c0cda17,0xbaae0f4d,0xbb9296fe,0xbb239ab4,0x39b2be03,0x3aff2fa6,0x3bb5df97,0x3b78619b,0x3b01e762,0xbab5e186,0xbb490089,0x39d3e1aa,0xb9ff776e,0x3b1df006,0x3a5f4efb,0xbb313daf,0x3b983826,0x3bb5e7a7,0xba084866,0xb889a104,0xbb657823,0xbbcdec5b, +0xbba73bc5,0xbaba8a04,0x3b813097,0x3a968cfe,0xbbeaf4e6,0xba5ae902,0x3b3b89ca,0x3b5f3a5f,0x3c65064f,0x3bc2440e,0x3b92eb99,0x3ace1486,0xbb4173f3,0xbb41dde6,0x39a8455f,0x3b7f0488,0x3b88fc17,0xbb580064,0xbb44146c,0xbb84d290,0xbb81d8d7,0xbb83bb8e,0xbb12230c,0xbb8a6693,0xbb7c8a06, +0xbb27c9fa,0x39a0c916,0x398d5848,0x3b05b604,0x3b25b3e1,0x3ab21a13,0xb9d35c25,0xbb3d0e04,0xb9f1b623,0x3b23b49c,0x3bae14ea,0x3b7e8856,0xba8e2d9b,0xbc3f43e6,0xbc1a63a3,0xbb28f18a,0x3c003689,0xbbae4a36,0xbc011a60,0xbbde8928,0xbc5be3cf,0xbc3577d4,0x3bc4b257,0x3b1f3307,0x3b4f8784, +0x3b431727,0x3b8190a7,0x3b075087,0xb8fda8a9,0x3ace22c3,0x3a054497,0x3b15de07,0x393701c2,0x3ab1f21d,0xb9c6f08c,0xbaa6ac50,0xb806f9f0,0xb9bacd4a,0x3ab27103,0x3a1b3e95,0x3aa1394a,0xba29460b,0xba8bb622,0xba28fbb3,0x3a6be5ad,0x3a0625dd,0x3a1eed93,0x3a793bf1,0xbb5d95fa,0xbb81e3ff, +0xbbc9862e,0xbb8c9f7c,0x3a500128,0xbbd46092,0xbc16adda,0xbc6c4dde,0xbc85da84,0xbc4d44db,0x3c12790e,0x3b7e59cf,0x3b9b1eab,0x3b76bbe9,0x3b0fb28c,0x3a8e639c,0x3b143efa,0x3aec8ac6,0x3ace93f5,0x3ab00b3c,0xba025867,0x39e803c1,0xb9e14f66,0xbafbd27c,0xba0e96fd,0xba338d52,0xba219d44, +0x366658b8,0xba3ed187,0xba4d53cb,0xba6f3790,0x38b95b76,0x3a74c823,0x399f7598,0xbb1cb620,0xbb2ef22a,0xbb26a7b5,0xba698baf,0xbb74db4c,0x396e1426,0xbb998c29,0xbb8ce961,0xbbd880dc,0xbba053d2,0xbb7a42c3,0xba938fd5,0x3aa95bde,0xba674d8b,0x3a733ca1,0x3b834f42,0x3b8c60c2,0x3b8780b8, +0x3b3a22cd,0x3901ce5a,0xbb23eba4,0xbb5dfdad,0xbb4c1813,0xbb301246,0xbb4ad243,0xbb5fe81b,0xbb623d4d,0xbb5fe55b,0xbb3120fd,0xbae9a8a9,0xba9a6612,0xba250fce,0xba282e63,0xbabc55ef,0xbaa2807c,0xb83ace81,0x3aa87f81,0x3aaf1f3a,0x3ad90e6f,0x3aabbc0f,0x3ae26fcb,0xbbb9a70e,0xbbee560b, +0xbad6778c,0x3a2b0c0d,0x3a718d14,0x3ac2ed40,0x3b43246d,0x3bc5380f,0x3ba44f1a,0x3b6b43ac,0x3a41309f,0xbac34800,0xbb02e321,0xbb431a6c,0xba35d799,0x3a35bd6f,0x3b105661,0x3a83682a,0x3a96ffd0,0x3aa28a60,0xbaf57cac,0xbb032137,0xbb0e44fc,0xbb3d01b5,0xbb0fe568,0xbb169d54,0x39a1f0fc, +0x3b0a0b71,0x3ab47c08,0x3a7a5154,0x39052fae,0xba450b4e,0x3aedf636,0x3aaf20fc,0x38d50a92,0x398ae030,0xbbb53cc6,0xbbcabb07,0xbb2661be,0xba926349,0x3aae7a9b,0x3b00ef48,0x3b11eb30,0x3aa09ee3,0x3ae268c0,0x3b14807a,0x3b33a848,0x3ac3bca3,0x3a33cbbe,0x3990f745,0x39f49760,0x3a43e426, +0x3a62b9e7,0x3ad5c950,0x3a8ad70e,0xb92bb163,0xbae4b1a4,0xbb1a1dfe,0xbb91e774,0xbb2852b5,0xbb17d8a9,0xbb465bf0,0xba9c3ddb,0xbb05de58,0xba77ff01,0xbac9e929,0xba5011b5,0xb88c0b7c,0xba88de76,0xba87bbcb,0xbb8d0916,0xbb9df35b,0xbbcde0dc,0xbb7856a6,0xbacf6097,0xbabe2ac8,0xbabf103b, +0xba65cf9c,0x396effce,0x3ac97427,0x3b11f6cf,0x3b04e413,0x3aec3845,0x3a94a8b3,0x3a8c378d,0x3a94f5bc,0x3aa7f4c8,0x3ae8cce2,0x3afbe690,0x3ab6fc4c,0x3a652195,0xb92ba9c6,0xbaf99117,0xbb1351d5,0xbb33c7d5,0xbb32a5c2,0xbb0288cd,0xbb0a4e2c,0xbb5b701f,0xbb48c8f6,0xbb2a9836,0xbb4bb34a, +0xbb72e569,0xbba22aea,0xbb96a0c1,0xbbc0d46a,0xbc01adf1,0xbbcfd9a9,0xbb88e73d,0xbafd0d9a,0xbab05a87,0xbacaf6eb,0xba5ee80f,0xba253fc6,0xba0ea13f,0xba09691d,0xb9e5a54f,0x39a19bae,0x3a95c8ad,0x3ae91aba,0x3b11e3fd,0x3b0cf49d,0x3b0a8cc4,0x3b01eafa,0x3b05666d,0x3a978e06,0x3aa11f2a, +0xb9102d7b,0xba84bf18,0xba6ddca8,0xbabeab32,0xbad5ada9,0xbb0dbfd7,0xbb22957f,0xbb177fcf,0xbb157671,0xbba7e691,0xbb66e12f,0xbbb35358,0xbb9d5e62,0xbbbf191a,0xbbc28cd7,0xbbc359d9,0xbb7b7992,0xba769378,0x3973df04,0xb974ff99,0x3821db48,0xb88213b2,0xb830d08c,0x39575231,0x39d6fbc1, +0x3a6d2fc5,0x3a4dca1f,0x3a1c8e86,0x3a01d32f,0x39c9c6d9,0x39f41f3a,0x3a114007,0x3a21dd39,0x3a730a7b,0x3a9afda6,0x3ad4f678,0x3ad5f7f4,0xb904e697,0xb9b5d502,0xba93bd0b,0xbaaac4e8,0xbade7b0e,0xbb06c926,0xbb25f047,0xbb2f181d,0xbb03f050,0xbb135c1e,0xba139c49,0xbb15c454,0xbae62ffa, +0xb9884a30,0xba43db85,0xba756d69,0xbb20d8e5,0xb9d8a993,0xba0278d2,0xb9fabb44,0xb9d5970f,0xb9c8c5dd,0xb9e4def3,0xba11f756,0xba0f534e,0xb9bd5439,0xb8ecedf6,0x38951dab,0x39645ae7,0x3994b3d6,0x397c5a83,0x39695dac,0x391cbb66,0x37f549a4,0xb86d6716,0x39afbe7f,0xbada01be,0xbb26751c, +0xbabf8cbe,0xbb073489,0xbb41be50,0xbae18115,0xbaf93f86,0xbaf48afc,0xbb0861cd,0xbb2c94e7,0xbb327809,0xbb314436,0xbb5933ac,0xbb22d68d,0xbb080422,0xbb4cbb00,0xba8727ae,0x3b0a14a9,0x3b7247cc,0x3a385ccd,0x3aa4c6ee,0x3ab33eb6,0x3aa7168b,0x3abd6955,0x3abf72bc,0x3aaea8b9,0x3abf407e, +0x3ac7b2dd,0x3ac4fc00,0x3acfe594,0x3acb831c,0x3acdaefd,0x3a9dbb6f,0x3a9332f6,0x3a8bb696,0x3a8b6f4e,0x3a825592,0x3a677803,0x3b3e5e39,0x3b195ebe,0xbb066927,0x3b52ee79,0x3b434b34,0xba8ed65b,0xba756c02,0xba73a2c7,0xba0574b4,0xb9876a4d,0xb833177d,0x3a09eb9a,0x3b4da00a,0x3b5e8822, +0xba52aea2,0x3b37f15d,0x3b10a1ae,0x3b28fba0,0x3ac87f51,0x3add4b3b,0x3a971e82,0x3ae43ced,0x3b1084c8,0x3b050e54,0x3b34da56,0x3b4bb0ae,0x3b304746,0x3b4a5c10,0x3b53ed37,0x3b60f12b,0x3b12a1d1,0x3ad31c15,0x3a98cd51,0x3a8882a3,0x3a36ff30,0x3a1d3b73,0x3a954682,0x3a4f63ae,0xba0ff232, +0x3b217b3f,0x3b2ed459,0x3a6499c7,0x3b00c7ec,0x3b17dec8,0x3b342007,0x3b1bc679,0x3a684edf,0x3af50c43,0x3b00cdbd,0x3b1d537c,0x3b0eb3e8,0x3b0e561a,0x3ba66de8,0x3b1370fc,0x3ae2ed4f,0x3b247a2c,0x3ad1061d,0x3b391dce,0x3b4b0979,0x3b256ecd,0x3b7342f7,0x3b8576e4,0x3b792965,0x3b971890, +0x3b9b0fde,0x3b92face,0x3b1df0af,0x3acb72ca,0x3a7b9510,0x3a52e7d2,0xb9273c07,0x3a3bc1c2,0x3a9c0f7d,0xb911a7ca,0x3929b9bf,0x3ae3e57f,0x3ab57276,0x3b28ade5,0x3ab3dfc2,0x3af64267,0x3b98d4a0,0x3add2d1d,0x3b3c9fd5,0x3b3b0cc5,0x3b2b7c84,0x3b2a56cb,0x3b1f9ccb,0x3b763c55,0x3ba6b99a, +0x3b0e955d,0x3b04ee5e,0x3b0d77df,0x3a277643,0x3b1503fb,0x3b76f090,0x3b2fd80e,0x3bbf511d,0x3bd5255b,0x3b9ca5e3,0x3bddc328,0x3be176fb,0x3c037033,0x3b87cc9e,0x3b03a725,0x3a511576,0xb97c04c6,0xba930f9c,0xb97d40c5,0xb9f493e2,0xbacf38c1,0xbb29046c,0x39ae3a9b,0x3a9bdadd,0x3b0ab860, +0x3b160085,0x3ae5c9ad,0x3b9e9675,0x3b259fa7,0x3b4d8d92,0x3b2e3e36,0x3b4243a2,0x3b175f42,0x3b0f65e9,0x3b44f5d3,0x3bb18cce,0x3b5f0dc8,0x3aea6179,0x3b88cd7d,0x3b26cb7d,0x3b9c0141,0x3ba87fff,0x3b7053ea,0x3bc75932,0x3bd5c7ca,0x3bb6024f,0x3bfd4d67,0x3c0fb754,0x3c00cd80,0x3b7ed7c4, +0x3ae97428,0x3a3c667e,0xb691852a,0xbaefd6ca,0xbaccf44c,0xb9b0beab,0xbb1af63c,0xbb147575,0xb906a530,0x3942f766,0x3b35e774,0x3acdb3ee,0x3b15c785,0x3bb709db,0x3baa7cc4,0x3b7db962,0x3b847743,0x3b57b396,0x3b0bd0e1,0x3a1926f3,0x3b9615b4,0x3b20918d,0x3b14ce4e,0xbb031e66,0xbb348207, +0xbbbee2bb,0xbb77188c,0x3a7ec9d0,0x3c362c13,0x3be86905,0x3bb92eec,0x3c04bbca,0xbb88643a,0xbc0c6668,0xbbfaae77,0xbb03f8eb,0x3a84fef3,0x39c04594,0x3b427a23,0x3b7ceac2,0x3b5890dd,0x3b02bc1c,0x3997382d,0x3b0a44b6,0x3aeb5cd4,0x3b190eaf,0xbb377a43,0x3bb60157,0x3bb49845,0xba92fafb, +0xb907df44,0xbb552920,0xbb9ec086,0xbb527928,0x3b3f462c,0x3be2c695,0x3bd3c0fc,0xba5a23ad,0x3a05fba2,0xba240661,0x3b8ebd37,0x3c49cf06,0x3c40af21,0x3c2de96a,0x3ba1565b,0x3a5e2e5b,0xb9ca78c2,0x3a2359bb,0x3bc6532b,0x3be14c3a,0xb96cdb2f,0x38f60807,0xb91ed110,0x3b770624,0x3b403218, +0x3a1968ca,0xba9602c6,0xbaf92a52,0xba6b44ba,0x3a9b5b5f,0x3a815573,0x3af61424,0x3af009de,0x3a670f83,0xb9f72080,0xbb3bf520,0x3992d073,0x3b1f55f0,0x3ba50aa0,0x3b57a94c,0xbade3f8e,0xbc138554,0xbb9e3c0d,0x38a3ff88,0x3babc804,0xbbea9c3a,0xbb8efc74,0x3ac46493,0x3a9f49df,0x3b549393, +0x3c790dd5,0x3bb40686,0x3af6da65,0x3b0b81b3,0x3b8b1bda,0x3ba29466,0x3b7f0c2a,0x3b90183d,0x3b638dd5,0x3b8e971a,0x3b21a1f3,0x3abc70ae,0x3abb60fe,0x3ad0dbe2,0x3a250ea8,0x3b0ed979,0x3ae33f65,0x3aab3c05,0x3a208373,0xb951023c,0xbb0c76e7,0xba1e086b,0x3a41108f,0x3a148913,0xb6b6a29b, +0x3ac8e046,0xbb0d142b,0xbb1f74e2,0xbb88eaae,0xbb4dd352,0xb8d46801,0xbb70287a,0xba6d6f77,0x3be579d6,0x3a538650,0x3b3b8a66,0x3c77bc11,0x3c0b5d32,0x3c0326a4,0x3c1184eb,0x3bee9d35,0x3bf57352,0x3c068b6b,0x3bd7c953,0x3b97e204,0x3b123978,0x3a8b5dbd,0xb9d7a647,0x3a135b97,0x3ab75973, +0xb872513f,0xb8f518ce,0x3a522e9e,0xb8798d75,0xb9be26fd,0xba5e7f25,0xba1aea32,0x3a9e407e,0xb8b72bbd,0x37c8bc71,0xbb3c0dfd,0xba9880c4,0xbae95393,0x3a35d9d1,0xbb7cc40f,0x3ad12879,0x396c3aa6,0x3c044424,0x3c261c1b,0x3c789b0b,0x3c631ff2,0x3c44ae49,0x3b453ff6,0x3b9eed29,0x3bc55886, +0x3c2381ff,0x3c1d3a02,0x3c06cadd,0x3bbaba30,0x3b7f6ece,0x3ae27476,0x38c7a742,0xba1f8be1,0xbb0e5e5a,0xbae04382,0xbb3d9bbb,0xbb4e7063,0xbb1280d7,0xbac644d6,0xba883925,0xba4a954b,0xb9a08421,0xb9f70b78,0xbaa8ef83,0xba2e1a34,0x3a0e258a,0x3ace1860,0x3ab1df15,0x3b397d36,0x3b34d81d, +0x3b6700ae,0x3b376250,0x3af845d7,0x3c169041,0x3c5edca2,0x3c38d550,0x3c6744fa,0x3c700c98,0x3c70bf16,0x3c4abc0d,0x3c463309,0x3c4f7bf1,0x3c0d3b06,0x3bb20ab9,0x3b876124,0x3b315903,0x3afe24a1,0x3ac2ca7f,0x3ab7c084,0x3ab7f172,0x3b03ce06,0x3b03222c,0x39cc7d3e,0xbb40d3de,0xbb38829a, +0xbb0bfebb,0xba97ca75,0x3ace5ae4,0x3b1bad73,0x3b07ed3f,0x3b08128f,0x3ac86469,0x3ac2bc35,0x3b395c31,0x3b0ed625,0x3b34eca6,0xb895a97c,0xbb0115d0,0x3b26f0b8,0x3badb2ab,0x3bcd8cdd,0x3be97dfe,0x3bbf1fab,0x3b987c1c,0x3b8f9999,0x3b32b73f,0x3af50ab5,0x3b01f739,0x3b027028,0x3b4e1af1, +0x3b68e04b,0x3b7eb529,0x3b6abaa7,0x3ae9baf3,0x3aeba0a1,0x39ccf168,0xba3e28e0,0xbb0b23d3,0xbb43b3de,0xba90d1a1,0xbae20024,0xbad1aa90,0xbaf9016c,0xbb0b6c39,0xbabca171,0xb90668d5,0x399ae282,0x3a928261,0x3ade38e4,0x3b08dbcb,0x3afe0cff,0x3a24a275,0x3ab0effc,0xbabd0e46,0xba516d6c, +0x391a3cd6,0x3a492627,0xb9323653,0x3a99242c,0x3b1aab34,0x3b8e95ec,0x3b6e647e,0x3b40c0a5,0x3b258ef2,0x3b023214,0x3ae78fa7,0x3af2f747,0x3b0e1dd1,0x3b0d47a9,0x3ae43da0,0x3ab4df67,0x39cdbd09,0xb9142d5c,0x39207c37,0xba8cdeb7,0xbad4d714,0xbac9078e,0xbafd8529,0xbb18593f,0xbb07ac51, +0xbb1c34fd,0xbb18423e,0xbb0ecfcb,0xbb2ad407,0xbb46d8fd,0xbb404c2a,0xbb6a4246,0xbb888d6d,0xbb5ea16f,0xba9c8328,0xb9de877a,0xba85147f,0x390ebf4d,0x3a710d88,0x3ac26c6a,0x3acc08a4,0x3afeff14,0x3b19218c,0x3b45e7a9,0x3b69472b,0x3b29fe1d,0x3b072abf,0x3abbb979,0x3a9c699f,0x3a9bc6ee, +0x3aa2d689,0x3a7fa9b6,0x394c935f,0x3a6b2f20,0x3a763a9b,0xb96d9c12,0xb9e95d69,0xba5caf76,0xba7c2431,0xba478f88,0xbaf5deff,0xbaee959b,0xbae1b613,0xbb4dae6a,0xbb66215b,0xbb8d67b8,0xbb6cf3c6,0xbb83a26c,0xbb58ba35,0xbb0e43f1,0xb8807753,0x39b4ff7e,0x3a6f41be,0x3a914bb5,0x3a8cb78c, +0x3abe7804,0x3b042103,0x3b267c02,0x3ad08cb0,0x3a1d8338,0xb8a6bba2,0xb9137ef0,0xb849a251,0x38cb0061,0x39a12efe,0x3981a727,0x38e0d2dc,0x39a50043,0x39024d6b,0x3a14ee27,0x3ab65c6f,0x3a91e8c6,0x3a9fd7d4,0x3a67dc17,0x39e25e9b,0x38877b12,0x390dd62f,0x3a2c18aa,0x385b3aaa,0x390970c8, +0xb9d5967a,0xb996a6e4,0x39a61d60,0x3a29d2b1,0x392c6b37,0x3a8f904d,0x3a9409ab,0xb9785d5e,0xb9909230,0xb912006e,0x37df9663,0x3887653c,0xb7a98af5,0x38727484,0x39225412,0x39d76cb9,0x3a048211,0x39d53efb,0x393f11c1,0xb8609f4f,0xb902b202,0xb8c98af6,0xb89814d4,0xb891718c,0xb895f30b, +0xb9ac26ea,0x3a9aeaa3,0x3aa01a43,0xba36a6cf,0x3a92e78f,0x3a9cee32,0xba807e3b,0xba98c315,0xbaa2a90b,0xbab5b859,0xbab2a05c,0xba994d71,0xbab63305,0x38a354d8,0x395639a8,0xbab44390,0x39f70d3d,0x378282ee,0xbb6fa043,0xbb83ea88,0xbb30b4ac,0xbb0c464c,0xbb14dcf9,0xbb12037c,0xbb3bf58a, +0xbb493f67,0xbb47ad75,0xbb385003,0xbb309a8c,0xbb23bad0,0xbb18b31b,0xbb16df72,0xbb13ce6f,0xbb2b2399,0xbb3da5d8,0xbb46f098,0xbb47e289,0xbb36edff,0xbb413577,0xbb52998a,0xbad676af,0x3b515fd2,0xbb63f3c5,0xbad8c0da,0x3b58689f,0x3b4e93cd,0x3b479c3f,0x3b289703,0x3b329886,0x3b246843, +0x3b06ba37,0xbab0b6b5,0xbb6f5a25,0x3b34caaa,0xba356e04,0x3b08c72b,0xbb528306,0xbb1931b4,0xbb395da0,0xbb3a02f9,0xbbb0d68b,0xbbc3e56f,0xbbb3e85c,0xbb90a365,0xbb804b43,0xbb6f88ab,0xbb4ac7ff,0xbb41917c,0xbb457d7e,0xbb7f9a4e,0xbb968795,0xbb9c2992,0xbb9570d7,0xbb89eb64,0xbb843ebd, +0xbad5ca51,0xbb1fc515,0xba947e99,0xbb082310,0xbb36c1d5,0x39366903,0xbadeb02b,0xba604606,0xba48d06b,0xba8bc269,0xbaf939f7,0xb880e54d,0xba466774,0xba8c0311,0xba247413,0xba194611,0xbad42c39,0xbb6b1b30,0xba6db3ea,0xbb044616,0xbade89f7,0xbbc4abe4,0xbbf820c0,0xbbdbec8c,0xbbb5e890, +0xbb8e240f,0xbb7904d2,0xbb1eb5a2,0xbb0e509b,0xbb09d221,0xbb911961,0xbbbd0106,0xbbe22535,0xbbcbae80,0xbbc2c80d,0xbb8d528f,0xbb3b8a20,0xbb3e6652,0xbb8d2e7a,0xbad0a069,0xb9bf0c60,0xbad51c53,0xb7bf5f0c,0xbb1c65cd,0xba90b24e,0xbaa876d3,0xba5126a6,0x394fd65a,0xba77d0dc,0xba87b5cd, +0xb9f832ef,0xbb221e1c,0x39fa0fd3,0xbaa7cc2c,0xba81db3c,0xbad75659,0xbaf9fca9,0xbc0b820b,0xbc36d746,0xbc25ee11,0xbbe8a077,0xbba6daa6,0xbba20048,0xbb433407,0xbb17e6b2,0xbb123987,0xbbc373b1,0xbbfb8fc1,0xbc094e4f,0xbc033712,0xbbe277cc,0xbba245e1,0xbb830bfa,0xbb67ebf0,0xbb607a3c, +0xba2761fe,0xb98bb442,0x3a82b2a0,0x39822321,0x3ad8c135,0x3b744ca4,0x3b07a710,0x3adb3735,0x3ad2c69b,0x3a65b055,0x3a9cac46,0xb9ab9e7f,0x39f79bfe,0xbace088e,0xbb04f042,0x3aaf78cf,0x3a03730a,0x3ad926aa,0xbbfef0c5,0xbc298f3c,0xbc25251b,0xbc041c71,0xbbb8bca0,0xbb8a9d51,0xbaa5a95b, +0x39021a7b,0xb912adfb,0xbbbcd823,0xbc10ab13,0xbc32cca1,0xbc240413,0xbc12764d,0xbbb83852,0xbb5ae9f2,0xbb6586f5,0xbb8685e1,0xba63539b,0x3981f703,0x3b2d4712,0x3b131e57,0x3b0a1034,0x3ba4f35f,0x3b9c56c6,0x3b7582ab,0x3b92c0da,0x3b0f995f,0x3a236b56,0xb9be912c,0x3a181cec,0xbb6c8155, +0xbc1c7b3d,0xbc335d69,0xbc533ec2,0xbc7101c8,0xbc745007,0xbc5d66fb,0xbba59437,0xbb64e381,0xba4480c2,0x3b471ce6,0xbbd2b780,0xbc17a517,0xbbd05cac,0xbb4d9a35,0xba27fa00,0x3a9e1023,0x39f56407,0xbac9d5d4,0xbb6b4bf8,0xbad3eb84,0xba671995,0x3ab3c905,0x3a5b7fb7,0x3a79f1a1,0xbb36acbf, +0x3bb4c9bb,0x3bc1ddab,0xba69af06,0xbaba6014,0xbb9c4c57,0xbbd040d8,0xbb42cc7e,0x3a7488c9,0x3bb26629,0xbafb8fcd,0xbb9dfa67,0xba9c37ca,0x3b21e702,0x3b509857,0x3c20a224,0x3bb127a3,0x3bb63fdc,0x3b2544f0,0xbb572e6c,0xbb91279a,0xbacb157b,0x3b95abb0,0x3bbcd8c0,0xbb16f083,0xbb9e532d, +0xbc0363eb,0xbc2d09f2,0xbbf94298,0xbbd04c05,0xbb9bd877,0xbae090d9,0xbb2be4d7,0xb9a4deed,0xba0d1ff4,0x3a818639,0x3adc355b,0x39a6a2be,0xbabc21dc,0xbb5a031b,0x3a0a4877,0x3b401a5f,0x3b74c07e,0x3a8809bf,0xbb99ab09,0xbc3b6a4d,0xbc083749,0xbb3c4107,0xba58b376,0xbc19e4f8,0xbc1e25d2, +0xbc2deea6,0xbc815b24,0xbc83d52c,0xbbf232de,0xbb4c1901,0x38ca0434,0xbaa365fa,0xba432ee9,0xbb64cb8e,0xbbd738be,0xbb90c39b,0xbb6ca3b0,0x35889174,0xba8b3a61,0xba2cf194,0xbb35b4ae,0xbaba8313,0xb9f91bb6,0x39b43e98,0xb918ea18,0xba05e3a7,0x3a5eb2fd,0xba9043a0,0xbabd3ee6,0xba221901, +0x397a3f40,0xb9b58359,0xba92a7b2,0x39c23165,0xbb27b726,0xbb8e29b9,0xbb88d4d7,0xbb5b1b31,0xbb5cbc69,0xbc253d4c,0xbc540884,0xbc9ad6b6,0xbcb937d5,0xbcaf7898,0xbbbea5fc,0xbb44e621,0x3a5b4486,0x3a097b7e,0xbb745511,0xbbb0e478,0xbb8b143b,0xbb4eff64,0xbad9db1e,0xb9f064f9,0xba88c2de, +0xbae1b7bf,0xbacd8a90,0xbb035bae,0xba9a6052,0xba831321,0xba2fb479,0xba3bae14,0xba4da70e,0xba60f201,0xba49afbc,0x3985406f,0xb9c7e74a,0xba9f0331,0xbb83ed4c,0xbabdc245,0xba92e767,0xb888f822,0xbb66ec17,0x3b1fe297,0xba4cfc1f,0xbb9a132a,0xbc17a001,0xbc60142b,0xbc1872b9,0xbba1c80d, +0xba078aa1,0xbb3b8708,0xba50cb8e,0x3b340f05,0x3b7ab7e0,0x3b5be1c3,0x3b3e42ac,0xbad593fc,0xbb97d856,0xbbf00f91,0xbbcb52ad,0xbbab236f,0xbb7130c8,0xbb74e1d7,0xbb86b77e,0xbb5ddfab,0xbb1d9aba,0xbaa0e281,0xbaa051c1,0xb94eebb1,0xb9d35266,0xbad6b7ba,0xba4eeb9b,0x398f1347,0x3abd9c06, +0x3a24ca03,0x39e6df9f,0x3b746f3d,0x3b1d7632,0xbb654f1d,0xbc14dc06,0xbc7baec4,0xbc377563,0xbc1b0535,0xbbb89c0c,0xbb7d399a,0xba89c091,0x3a40430c,0x3a98e3c7,0xba8a01ae,0xbaa3b6a4,0xbb49bb04,0xbb7284a8,0xba3d4d7a,0x3a3d65e1,0x3ac4ecbf,0x3ab404a5,0x39e5a1e5,0xba696e21,0xbac63798, +0xbb21d624,0xbb42eca0,0xbb55241a,0xbb11492f,0xbabf2a23,0x3a513829,0x3af8f199,0x3a6b8282,0x3aaa2b10,0x394dc213,0xb96f4d0b,0x3aa825de,0x3b1e45f8,0xb9beec38,0xbb085194,0x3a9e20fe,0xbba98d0a,0xbb2f7e85,0xbac617c2,0xba0d80ff,0xba93e80e,0xbab3d98f,0xbb50d57b,0xba56db04,0x3a32b303, +0x3ab37720,0xb9014e88,0xba4579fd,0xba4d0f3d,0xba619037,0xba809cd8,0xbad27d4f,0xba33468d,0xba76b1c5,0xba1d8a42,0xbb26ab2a,0xbb6d19cd,0xbb67cf3d,0xbb3aa854,0xbb292b4a,0xbb3443b9,0xbaf45c5e,0xbad01e61,0xb9ca5c27,0x38f8f93f,0x3a5d687a,0x3ad6f9e8,0x3ae83f00,0x3a9d90f6,0xb9e0f2fd, +0xbb0e0151,0xbb8b811b,0xbb848090,0xbb90cb23,0xbb491b47,0xbb228704,0xbb268353,0xbb27b3cf,0xbb337c4b,0xba9f83a9,0xba7222ce,0xba48c817,0xbaa776db,0xba9a43f9,0xba42673a,0xba1305e5,0x39842b19,0x39b72cbe,0xb9c3a45b,0xba973942,0xbb0da137,0xbb01496b,0xbaf885bb,0xbb365775,0xbb16032b, +0xbb0b1343,0xbb1a01ca,0xbb2cece5,0xbb0dbcc3,0xbaf50715,0xbb163880,0xbb31105c,0xbb6c6ab0,0xbb6405b3,0xbb8c9dcf,0xbbaa7ad9,0xbb92133e,0xbb5955b3,0xbb7c741e,0xbb4d7ae8,0xbb5174c1,0xbb4e119f,0xbb4b1670,0xbb46faf1,0xbb4cfc96,0xbb30de20,0xbb0006e2,0xba898cee,0x38937902,0x3a73b4a8, +0x3ab85dce,0x3a94a38a,0x3a73df22,0x3a67a870,0xb781e875,0xba6da7af,0xbabd83c9,0xbae71091,0xbaab5903,0xbb040713,0xbaf8428f,0xbb172b40,0xbb32c7fe,0xbb13c84c,0xbb83d650,0xbb80faf9,0xbb91e462,0xbb9ebe5c,0xbba3f253,0xbbc81296,0xbbb06ed6,0xbbd4ec30,0xbba26294,0x3a6061f8,0xbacad4f2, +0xbafeceed,0xbae46e55,0xbacda325,0xbaf3aa2e,0xbaeac1c4,0xbb034eaf,0xba93add0,0xba5cde8b,0xba20588c,0xb9f8da54,0xb9ab4de8,0x39202463,0x3849395e,0xb88283ab,0x378f1244,0x3971d5ce,0x3a41ea37,0x393a2096,0x3837b601,0xba559017,0xbaa07a81,0xbaeef864,0xbaef1e9a,0xbb1297f9,0xbb235f97, +0xbb345a18,0xbae398de,0xbb214b34,0xbb10044a,0xbad7a53e,0xbb19da3c,0xb94aa4fb,0x3a7ad06f,0xbb183b5f,0xbb51da98,0xbb35a432,0xbb1af6e2,0xbb21bcc5,0xbb215fef,0xbb24fbe5,0xbb212b07,0xbb284cf0,0xbb221f85,0xbb175a67,0xbb061e4d,0xbae9b273,0xbacb76dd,0xbab655c7,0xbac4e308,0xbac6f87d, +0xbad4d0a5,0xbaec9706,0xbaf51d17,0xbaf9345a,0xbb232e11,0xbad0d2fe,0x3a700094,0xbb3ebc56,0xbb02207d,0x3a7a0acf,0x3a8a8e1a,0x3a2c40ee,0x395042de,0x391b3d7b,0xb899650b,0xba3440d4,0xbb3e9c7d,0xbb6e6465,0xb9410782,0xbb02b00c,0xbb6ea40e,0x3b729ba8,0x3b71d714,0x3b84f9df,0x3b3edf1a, +0x3b3cd958,0x3b2d1349,0x3b3b03e6,0x3b42bc04,0x3b426746,0x3b499a28,0x3b4e7093,0x3b494fb5,0x3b50c48f,0x3b53e9f4,0x3b5ed8f2,0x3b47719f,0x3b432bd8,0x3b3695e5,0x3b361d68,0x3b1ee2a2,0x3b402c2b,0x3aae7074,0xba5e8f53,0xbbb9ae34,0x3b3116c2,0xb8ca750e,0xbba8d8bc,0xbba4a42d,0xbb9cf61b, +0xbb85b2fa,0xbb9eb055,0xbb935129,0xbb65cc9f,0xba1fc718,0x3b46f067,0xbb893b59,0xbaaa61b4,0xbb882e2f,0x3b5d1d8b,0x3b67b830,0x3b5d7487,0x3b281c42,0x3b5202b1,0x3b797c4a,0x3b8878a1,0x3ba17ce3,0x3bafcee1,0x3b97a9bf,0x3b9f5600,0x3ba8db71,0x3bbf5192,0x3b9a3079,0x3b8906a9,0x3b5e1033, +0x3b401d5a,0x3b2e1e0f,0x3b53be3d,0xbad850e3,0xb73d96ad,0xbacbe497,0x3a058ec2,0x3b3b6b49,0xba2950d6,0x3aa54bff,0x3831638c,0x3a7c617d,0x396350a4,0x3b1a5de9,0x3a0d8d69,0x398795eb,0x3a929d17,0x3a01fa3d,0x3a84a48a,0x3ae4f7bd,0x3bbb2dd7,0x3b897318,0x3b855b08,0x3b29158b,0x3b787b2d, +0x3b88367e,0x3b987d2e,0x3bbfd4b0,0x3bcbe44a,0x3bbaa2dc,0x3bd17891,0x3be17b09,0x3bf4bf82,0x3bbdab8c,0x3b995afd,0x3b76fcb7,0x3b2cf299,0x3b2bc1c2,0x3a1e3465,0xbb36dc7d,0xba84400f,0x38042cc8,0x3a1ac607,0x3a8997fc,0x3ac53cd3,0x3a81179c,0x3b740c38,0x3ad28d59,0x3aec8405,0x3a5b9264, +0x3b399295,0x3b095656,0x3ae1dbde,0x3a5f36fd,0x3b9a0553,0x39f9ab94,0x3abe26cf,0x3ba84c9f,0x3b649e86,0x3af8709b,0x3b43b96f,0x3b99f853,0x3ba6e031,0x3c0fb759,0x3c193a0a,0x3be4a98d,0x3c0a28d8,0x3c0efdf5,0x3c39daf1,0x3c01e2a1,0x3bbc152c,0x3b6ffe62,0x3b0bd470,0x3ac6acd1,0x3a17f519, +0xbaaee456,0x39b90372,0xbb1b1453,0x3b1bc423,0x3a9c76eb,0x3b236770,0x3ad5f7a6,0x3adf54ff,0x3b4ecf5d,0x3b0d97a1,0x3ae5e7e7,0x3b46e83a,0x3a905406,0x3aece9ea,0x3b367a82,0x3b41e946,0x3bc7bf09,0x3ba557ca,0x3bd0c2a9,0x3bab9736,0x3b4d0565,0x3b911f5d,0x3baf8fd9,0x3bbf7196,0x3c07d145, +0x3c11882e,0x3c00a70c,0x3c1a8e8d,0x3c399906,0x3c46ac33,0x3c0e041a,0x3bcbf1fb,0x3b89edde,0x3b10ceb9,0x3a29d102,0xba5ceb6e,0xbbab0a26,0xbadd4708,0xbb222a15,0x3a7db15a,0x3ae2f5ff,0x3b177acf,0x3b233663,0x3b1a2612,0x3ba287fe,0x3b902b08,0x3b733208,0x3b8b7d3b,0x3b3eb6c0,0x3b00c239, +0x3b0c19e9,0x3b2d521f,0xbb82ac10,0xbb09a5bc,0x3aa916bf,0xba28f2a4,0xbafd7d77,0xba0f7b83,0x3b70a667,0x3c612e80,0x3c455b86,0x3c374082,0x3c65e399,0x3b441ba3,0xbb45ee2c,0xbba0e6fc,0xb9db0c8f,0x3b224f1d,0x3bb4fe1c,0x3bf06aa1,0x3c074a7a,0x3ba887aa,0x3ae3faef,0x3b44fd76,0x3b42a9da, +0x3b082c7d,0x3a9d9630,0xbb13bc90,0x3bbc4253,0x3bbbc75f,0xba4db1a3,0xba7528c1,0xbb88ae26,0xbbb2d9a8,0xba732430,0x3b5977dc,0x3b2a847b,0x3b5d4df6,0x3a357fb8,0x3be29c3e,0x3c00c6eb,0x3bd6b3ee,0x3c0019aa,0x3c34a135,0x3c28dbdf,0x3b9e9748,0x3a7c8edf,0x38ad68fb,0x3ab1b0d4,0x3bbd39d2, +0x3bed77da,0x3ad9a464,0x3af63066,0x3b03e5d3,0x3bd7d7f4,0x3b8036c3,0x3b4de7fd,0xbb0798d7,0xbb7371fe,0xba8c4f54,0x399bc1b2,0x3a652fb2,0x3af6b0eb,0x3ae49be5,0x395d5cde,0xbaaafc60,0xbb47356d,0x3aab26a1,0x3b4fa728,0x3b6bc62e,0xba1091a3,0xbb8d3f6b,0xbbf9bc9f,0xbb998d31,0xba186668, +0xbabebb58,0xbc05972f,0xbb464520,0x3b26a57c,0x3b8448d9,0x3bacc59a,0x3c1ddff3,0x3c310028,0x3c13e4b2,0x3b83f540,0x3c08588d,0x3c06f4b5,0x3bd8dd7b,0x3be63d9f,0x3bb59253,0x3badd08f,0x3b748662,0x3b6a7695,0x3ab77d59,0x3a66d861,0x3a038db6,0x3a88be70,0x3ab61411,0x39ca0787,0x39c32ece, +0xba163ad6,0xbacbbfcc,0xb92c831c,0x3a169ea3,0xb803d38b,0xbaa56eca,0x3add79a5,0xbaa32941,0xbb5536eb,0xbb71f3e9,0xbb847e08,0xbb938654,0xbb940624,0xb9fee1c0,0x3c382825,0x3b9d9412,0x3bd23c2e,0x3c331e0b,0x3c4ac8e8,0x3c488bc7,0x3c1590ef,0x3c203b58,0x3c154afd,0x3c299bc0,0x3c0e8896, +0x3bd8b841,0x3b573338,0x3b1a4ada,0x3b009acc,0xb84c6609,0x39421973,0xb97e3a4d,0x39afdda0,0xb9281834,0x390d0493,0xba4c960c,0xb8ff7503,0xb9279536,0x3a414cb3,0xb9c32f53,0xbaa0eb01,0xbb645815,0xba55d039,0x39fe48c8,0x38e92762,0xba9ae0a2,0x3b1e0ea4,0x3bb66a7b,0x3c404881,0x3c43b075, +0x3c9a00ae,0x3c7dd265,0x3c531806,0x3b9b9621,0x3b080811,0x3abf3070,0x3bec849d,0x3be61624,0x3be9b303,0x3baeeb68,0x3b8a6b0b,0x3b5023aa,0x3af38ccb,0x3a898192,0xba1e9a33,0xbae1c7f5,0xbb3d33b0,0xbb3205e7,0xbb3404a0,0xba6eb491,0xb9b87e9b,0xb9c6782c,0x39267032,0x389cc99d,0xbaa52914, +0xb9239ae4,0x3a2977b0,0x3b10999b,0x3a6aedeb,0x3b1ba31a,0x3b67b45e,0x3b63e2bc,0xbb9c20c1,0xbbb6850d,0x3bc354b8,0x3c01b2b4,0x3c10c580,0x3c5f4aca,0x3c8272ac,0x3c7a254f,0x3c645668,0x3c652bb0,0x3c679849,0x3c28ccfa,0x3bf3b95f,0x3bc74357,0x3b72b5b7,0x3b09503d,0x3ac7a41a,0x3a64a95e, +0x3a92698a,0x3af8389f,0xba2f24bf,0xbac3544f,0xbb302e6e,0xbb571ef1,0xbb024df9,0xb9fa07ea,0x3ab03bdd,0x3b093774,0x3ad37677,0x3b0e42d8,0x3b02a55b,0x3a7f8b28,0x3b3b30ea,0x3a3e7538,0x38c71660,0xb8b9c641,0xbb552b58,0x3ba8dbbd,0x3c107e61,0x3c10dc21,0x3c2b2a27,0x3c0ea9f8,0x3c0013fb, +0x3bf2ff22,0x3b81dbce,0x3afd7526,0x3ae8fb33,0x3b0c98bc,0x3b45e14a,0x3b547aea,0x3b74e66c,0x3b77ba28,0x3b1a6f29,0x3b190ff9,0x3a3f0470,0xbb04d7c8,0xbb252b86,0xbb143500,0xbabbc9f3,0xbac4dafa,0xbacbea78,0xbb0993e1,0xba76d6e8,0xb9fc8de0,0x3a9c2100,0x3adb11e0,0x3b41300c,0x3b6154af, +0x3b616b5a,0x3b8afd9d,0x3b49e6c9,0x3b49dbf4,0xbb2d8196,0xbabd6d3e,0x3b0ce905,0x3b25b40b,0x3b36df6e,0x3b64a61c,0x3b8e1948,0x3bc5cb6d,0x3b8c4cb5,0x3b53f7c5,0x3b08c4b8,0x3aeb7489,0x3adbbddc,0x3aeb27eb,0x3b0e6523,0x3b080176,0x3afb13cc,0x3ab0c3eb,0x39e2aabf,0xba1f19ff,0xbabea4c4, +0xbb0dac71,0xbadb6e4e,0xbb0d2b9e,0xbafdde08,0xbb14896d,0xbb15c557,0xbb0f9785,0xbac7f4d1,0xbaa2908f,0xbad3f794,0xbb15d3e9,0xbadf1c80,0xbb26a34a,0xbb8a329b,0xbb5f9ee6,0xbb5de6c4,0xb99d20ac,0xb8b0ff55,0x3a2c22f4,0x3af22354,0x3b19f342,0x3b29e6ed,0x3b438cb3,0x3b500dbe,0x3b699f14, +0x3b72cb60,0x3b3bd548,0x3b0ad849,0x3aa56791,0x3a96d5c4,0x3a925da6,0x3abfdedc,0x3a4b3812,0x3a260dd5,0x3884085e,0xb8a6fe8b,0xba4f14c6,0xba30dd3b,0xba8a86e8,0xbaaaf883,0xbabb3bc5,0xbb110408,0xba804fa3,0xbb494218,0xbb223a83,0xbb83b375,0xbb722a3b,0xbb718f2b,0xbbb1f862,0xbb886f2f, +0xbb26a010,0xbb084ed4,0x3a0b0683,0x3a6b2444,0x3adb4ce6,0x3b0863b7,0x3b3a3f6d,0x3b7a57e4,0x3b9dcfe1,0x3b787e62,0x3b2bf0ba,0x3af19814,0x3ac22226,0x3aa9bc82,0x3a84b0fd,0x3a894b07,0x3a46139b,0x39f385c4,0x3a04c748,0x395f1d79,0x3a38d9f2,0x39128ca4,0x394ace6d,0xb90d37fe,0xb99285bc, +0xba5a331b,0xba800285,0xbaac80e0,0xba6692ac,0xbad6e6ad,0xbab841cc,0xba18d9cd,0xbb2a6408,0xba856bec,0xb8b39dbd,0xbade704b,0x3a5ca3a4,0xb99a1671,0x39a1baea,0x38c37df4,0x39a72bee,0x3a06e781,0x3a208270,0x3a1bfeeb,0x3a4f1f00,0x3a48c922,0x3a83a29e,0x3a8a5727,0x3a706063,0x3a340742, +0x39ebff0a,0x39d73efb,0x39f0254a,0x39fef6e0,0x39fbff6f,0x39d77965,0x39f5f5c7,0x398d8429,0xba981237,0xbb5b06e4,0x393727d6,0xbaa7d917,0xbb803ce9,0xbb8ddbe0,0xbb84e4b9,0xbb84eb99,0xbb931bdb,0xbb8a7d99,0xbb81f591,0xbb020173,0xba310073,0xbb86e2b1,0xbb1bfc6e,0x391f257c,0xbb559b7d, +0xbb0c70c9,0xbb8689b6,0xbb118996,0xbb139780,0xbb10e1a8,0xbb331746,0xbb40133e,0xbb46a0c9,0xbb37d353,0xbb35258e,0xbb346e0a,0xbb24fbb5,0xbb20a51d,0xbb168397,0xbb312294,0xbb42e2c6,0xbb4c91be,0xbb4ef879,0xbb385844,0xbb63c927,0xba166f5d,0x3ae67c8a,0x3ba26db7,0xbaabfa49,0x3aef6751, +0x3bace33c,0x3badc1b4,0x3ba360bf,0x3b8c55fd,0x3bafe348,0x3baa3643,0x3b9afaf8,0x3b1a0c1f,0xbaeb9b58,0x3b98620a,0x3b5046ec,0x3bdc0f0f,0xbb24f757,0xbb2b4702,0xbb20bbb1,0xbb17909f,0xbb8e1448,0xbba1d015,0xbba7aa11,0xbb815606,0xbb73b8d7,0xbb7c66d1,0xbb536a8b,0xbb3d725c,0xbb1bb06c, +0xbb5dfcc6,0xbb895254,0xbb976d61,0xbb8f0a57,0xbb8f9258,0xbba17a6b,0x3a96da1f,0xba3c8b88,0x3a211e27,0x3a8290fc,0xbaa521e8,0x3aa7a933,0xb75f5c7d,0x3acfb151,0x396e9dec,0x3a01523e,0xbb472238,0x3aab8bd2,0x3a5f40f7,0x3a1cd8fe,0x3af0e11e,0x3a778a2d,0x3b2071b7,0xbb90123d,0xba9642a4, +0xbaa019d2,0xba743824,0xbb869562,0xbbac3554,0xbbbacaae,0xbb90d1f2,0xbb7d3f1f,0xbb8631c7,0xbb2e0734,0xbb0bef8f,0xba9246c1,0xbb771ae7,0xbba1a2b2,0xbbd5276f,0xbbb3c6e9,0xbbd4f37d,0xbb5d7a18,0x3a752ce4,0xba966d0c,0xbaf6d051,0x3a79fcb6,0x3a88ed18,0xb9b33267,0x3a4bab0a,0xbb4ec95d, +0x39ae1b29,0xbaef4918,0x3a1fafab,0x3a03a23b,0xb9f911ef,0xb8267874,0x3b0f0965,0xbaef6441,0x3b911bfe,0xb9e8bba5,0xbb0a72e4,0xb9e2f18b,0xba51156e,0xbbad66f2,0xbbf891d8,0xbc109582,0xbbac22c4,0xbb8c580b,0xbbae8247,0xbb47fcb3,0xbb07413e,0x39853f6e,0xbb877203,0xbbc4c928,0xbbf80959, +0xbbf1cb07,0xbbf4bc25,0xbba523eb,0xbb27aa21,0xbb709b4c,0xbad865c1,0xb95499c1,0x3ac7a71c,0x37d3337a,0x3af25726,0x3acc7f19,0x3b06770e,0xb876f836,0x3a670bb2,0x3aada80a,0x3adddc1c,0x3ac156df,0x3ac873a1,0x3a84ac81,0xb94e404e,0xba5ed5b4,0xb8f64338,0x3b113082,0x3b1f4b8c,0xbb726097, +0xbbafdf3f,0xbbf77031,0xbbb65c76,0xbb990a5b,0xbba87324,0xbb001cc5,0xb820087c,0x3af8e469,0xbb803a72,0xbbe59897,0xbc1edb07,0xbc0dcef4,0xbc149d84,0xbbc605a7,0x39e02463,0xbb546a80,0xbb11c844,0x391385a8,0x3a2711df,0x3b0fb7da,0x3ad2224c,0x3aedd4e8,0x3b578674,0x3b82b669,0x3b28d463, +0x3b8b6404,0x3a98c95d,0xb905676b,0x3a7f7866,0x3b2e3cf6,0xbaab7c51,0xbbe4f24d,0xbc5eb732,0xbc5def96,0xbc660cc5,0xbc62c4df,0xbc4b2390,0xbb824722,0xbb9271bb,0xbb1706e5,0x3ab30ff6,0xbc00eaeb,0xbc3b7cb0,0xbc1e92b0,0xbbbf7a99,0xbb166d77,0xbaf185bb,0xb94b1d60,0xba3344f3,0xba918f8e, +0x3af4fbf7,0xb9cd941b,0x3b61f59f,0xb95a8ecb,0x3a97ff39,0xbb1b304c,0x3bb4457c,0x3bb57135,0xba3986df,0xbaf73c87,0xbba1e734,0xbbbdfc2c,0xba65c28a,0x3b60ef95,0x3bce11dc,0xbaa82c44,0xba2f697f,0x3a1880de,0x3afac263,0x3b42dcb0,0x3bab7f64,0x3be2a844,0x3c04403f,0x3b928f70,0xbaf2481d, +0xbb866e82,0xbb0b9c44,0x3b9e625d,0x3be46b64,0x3a76b210,0xbb68f5ed,0xbbee87e0,0xbc1a75a1,0xbbc0871e,0xbbc40f61,0xbb4cc837,0x39b9c445,0xbaba7e82,0xba1cde1b,0xba4f1684,0x3936a9a6,0x3a8d618b,0xba17e5d6,0xbb0721cc,0xbb4946d9,0x3aa642ff,0x3b2f5d17,0x3b0f7553,0xbac5b82b,0xbbe451ab, +0xbc204633,0xbbba4a7b,0xbace4e8d,0xbc10fe88,0xbc3d56ce,0xbc0423e5,0xbc11ad2a,0xbc1167ad,0xbc2903db,0xbc30c75e,0xbb206b13,0x3890c129,0xbb812385,0xbb197667,0xbb85403d,0xbbd2cdbd,0xbbac26b5,0xbb71e8cd,0xb9d9345e,0xba1b3034,0xbaa1bfb1,0xbb4c00df,0xb9ec5af7,0xb991c8d5,0x3ab81ea7, +0xba470f6b,0xba5a6968,0x39048676,0xba82ae62,0xbace2720,0xba0db5d9,0xb8dc915e,0xba217a46,0xbb043f79,0x39c2495c,0xba96ec53,0xbb9c4372,0xba9d13fb,0xbb015929,0xbbe2e36b,0xbc20d8b0,0xbc25048e,0xbc3b4193,0xbc833852,0xbc8aa64c,0xbc39b337,0xbb3aa499,0x3abf73d7,0xb8ec479e,0xbb7a8797, +0xbba390c5,0xbb866181,0xbb43f093,0xbad4dc44,0xba6e50f7,0xba21c6fe,0xbb335549,0xbb0e6dd7,0xbaa13b55,0xbab713c0,0xba3e8d96,0xb983d558,0xba720954,0xba68545f,0xba25815c,0xb98e88a9,0x3a02672d,0xbaa124a8,0xbb012325,0xbb8e7f7b,0x37b55792,0x3a138ce1,0x3934788c,0xbafd3502,0x3b9a752a, +0x3bbb1c7f,0x3afc1224,0xbb255f0a,0xbc0faf54,0xbba17bdd,0xbb127567,0xba73b854,0xbb20961f,0xba85841f,0x3b589d12,0x3b9e6be8,0x3b8d0668,0x3b869b5e,0xb9ce318d,0xbb3eab30,0xbbdae984,0xbbbf3aeb,0xbbb49802,0xbb639ca6,0xbb6594a7,0xbb83c66a,0xbb3bc762,0xbae27a06,0xba28625d,0xba403ca1, +0xb8ee0d3a,0xb9c40866,0xbabc0d0c,0xb8aac4bd,0x3a42b77b,0x3ae85d1a,0x398b2797,0x3897d8da,0x3baae19d,0x3b5b5e99,0xb9dae7ea,0xbbe2f104,0xbc8abf4c,0xbc41146c,0xbc1f604d,0xbb5bc2dd,0xbadbe736,0xba6e55c3,0x3b004dc7,0x3b70da14,0x3b3f7d3e,0x3b404a25,0xb85816ce,0x3909e9be,0x3a5bc491, +0x3a93e08c,0x3a6480d5,0x3ab7a7f6,0xb94983f1,0xbb0b5e38,0xba39f763,0xbb13711e,0xbb6378eb,0xbb572871,0xbb077789,0xb9818309,0x3a9118d6,0x3ab619c0,0x3a50f5e3,0x3af4bffd,0x3a5e8bb7,0x3a7bfb87,0x3a88b70b,0x3b322a74,0x39e20e90,0xbb3a5da9,0x3bc2f482,0x39713407,0x3aaeda89,0x3ad7b105, +0x3a86e485,0xba3afa97,0xbac0bde7,0xbb46ac1b,0xba96a7eb,0xb94ea0a6,0x39c8d943,0xb9f61307,0xba04c523,0xb9971026,0xb97c8618,0xba2cb4a6,0xbb03a09f,0xbacf0bcd,0xbb0193b9,0xba9c6c02,0xbb2dbfbd,0xbb7bef43,0xbaeaaeba,0xbb2d6f75,0xbb26acd5,0xbb0f46fc,0xbb0d107a,0xba40ef94,0x3a058188, +0x3af7f886,0x3b2b5a23,0x3b5d6acd,0x3b8d8526,0x3b6d1c3b,0x3b68ce88,0x3b09ab32,0xba94902c,0xbb2b41e2,0xbb89d83f,0xbb0b6e55,0xba9dd252,0xbac3a55b,0xbb12184d,0xbb4eee7a,0xbb0e3502,0xbaf68c7c,0xbaeacfb6,0xbb07b83b,0xbaf5a943,0xbab64ab0,0xba91e73d,0xb9f7b6d9,0xba1867ee,0xbaa95c9c, +0xbb12f939,0xbb4294c3,0xbac9dc91,0xbace9694,0xbb2a8ff5,0xbb00f769,0xbb1d9614,0xbb31816d,0xbafb6e69,0xbac0f4a9,0xbab33cee,0xbab04ad1,0xbac28ca2,0xbaed363e,0xbaf3235e,0xbb0c64ea,0xbb04d677,0xbb02a700,0xbb090b05,0xbb8163a1,0xbb5c69a5,0xbb3e0a81,0xbb408dde,0xbb4024d1,0xbb39228e, +0xbb36f117,0xbb198f2d,0xbafd1a70,0xbab7ee6f,0xba210f22,0x36539ae0,0x3a16e9f2,0x387f01e4,0xb9347246,0xb9b02422,0xba76f86e,0xbb1b9d25,0xbaf8a986,0xbaea07c4,0xbadaefc6,0xbb19f110,0xbb09db4a,0xbb132c56,0xbb25d022,0xbb1b1ddd,0xbb962e7e,0xbb21b099,0xbb9568df,0xbb7a4d7b,0xbb964a4c, +0xbba52c04,0xbb8c642a,0xbbb25d20,0xbb97f39a,0x3a949a70,0xbb286524,0xbb268a43,0xbb18561e,0xbafa1713,0xbb0953c6,0xbafb9b21,0xbb08f7e6,0xbad0db97,0xbab54ee2,0xba946088,0xba8016e7,0xba496e59,0xb9836f86,0xb9e5b8d8,0xba31afb0,0xba6dc0ea,0xba55630f,0xba1aee97,0xbaa253df,0x38f7707d, +0xba68a968,0xba4d0b87,0xbacc6ed9,0xbabb004c,0xbae2511f,0xbae90a65,0xbaef54de,0xbaa41744,0xbb0881e4,0xbb4a35a8,0xbaaf1f2c,0xbb1b4e2f,0xb9fc4e5f,0x3a956a0f,0xbb23cef3,0xbb130bd5,0xbb66d87f,0xbb407b30,0xbb454168,0xbb4408f0,0xbb483cb4,0xbb40398e,0xbb3f65fe,0xbb390b1b,0xbb31db11, +0xbb276d7f,0xbb1bd5aa,0xbb124878,0xbb0b971b,0xbb1529f8,0xbb1689c8,0xbb1c66dc,0xbb267af0,0xbb28bf62,0xbb442e11,0xbaf529f8,0xb93569c9,0x3acc3aea,0xbb0d3e5b,0xb9c84510,0x3adc884b,0x3af24bf0,0x3aabac25,0x3a57975f,0x3a9705a4,0x3a86acdf,0x39452a64,0xbad59c82,0xbb47ee70,0x39c8cad5, +0xba09e117,0xbb8a353c,0x3b041d0d,0x3a41006c,0x3b74c387,0x3b0b6e62,0x3b016122,0x3ae74908,0x3add436e,0x3ae599e6,0x3aec5613,0x3b00d62c,0x3b05e228,0x3b010107,0x3b0d4a74,0x3b157649,0x3b26865d,0x3b10db99,0x3b0812ba,0x3aebd89e,0x3ae84c21,0x3abdbf3e,0x3b09786f,0xbab7b2e5,0xbb5226b3, +0xbb96359c,0x386a52f6,0xbb310052,0xbb971f84,0xbb973138,0xbb8fd09e,0xbb82fcdc,0xbba51176,0xbb9da3e2,0xbb85e34b,0xbb6018ac,0x396b8d48,0xbb76f8e9,0xbb7989b7,0xbbc732ce,0x3ab11d99,0x3b2ea2c3,0x3b14fb85,0x3adaf055,0x3a99974a,0x3ab33267,0x3b00b7b3,0x3b420b67,0x3b603a89,0x3b31ff71, +0x3b44e4dc,0x3b5c6163,0x3b88fd17,0x3b571ce5,0x3b37cbf1,0x3afe5cd2,0x3ac0ae7a,0x3abb44f0,0x3b12c31b,0xbb6253c6,0xbab0f657,0xbae36337,0xbad5325a,0x3a6ed05d,0xbaadfc1e,0xb995ef3f,0xbaf4e891,0xbaa2d506,0xbb013e6c,0x3ac35f2f,0xba2ee169,0xbab88895,0xba2fb597,0xba7ac8bb,0xb9db4777, +0xbafb3ab7,0x3b9033d0,0x3b7f9d6d,0x3b3da8c2,0x3af6629f,0x3a8fad25,0x3a52fe8d,0x3aeda2f5,0x3b4d9d8f,0x3b7237fc,0x3b4ed2fb,0x3b8632a3,0x3b9e1b20,0x3bc520f9,0x3b950b34,0x3b531d9b,0x3afaf3e5,0x3a435604,0x3ab584d3,0xbaa98c7b,0xbbb01b77,0xbb091a9b,0xba949452,0xba54982e,0x39cb8a55, +0xb9c783b4,0x39a28b35,0x3b1f62f6,0xbb089b0a,0x39a3d565,0xbac5306b,0x3acbe8e3,0x39759e2e,0xb94f5bdd,0xba165278,0x3b1c42a7,0xbb3cf3d4,0xb99f97e0,0x3b9d8c46,0x3b2dc6c8,0x3ae9c70c,0xb947fa78,0xb8d1a4a6,0x3a7a1000,0x3ba4add6,0x3bc12272,0x3b729ca8,0x3ba64d4e,0x3bb82102,0x3c0b9aa4, +0x3bbadd53,0x3b78069b,0x3ab72ef4,0x3951575c,0x39911e9c,0xba830633,0xbb38b28e,0x39e30646,0xbae1a772,0x3b3ecab3,0x3a7b5b28,0x3b050016,0x3a55e2da,0x3abbe098,0x3a6d2d51,0x3a89d873,0x38693109,0x3b1b17c4,0xba39b072,0x3a6a889a,0x3b17bf13,0x3aeab590,0x3b560139,0x3b59ff6f,0x3bf2bc8b, +0x3b88aa6f,0x3b561a0d,0x39b25548,0x399e4f28,0x3ab8292a,0x3b7c141c,0x3ba27504,0x3b910916,0x3bc83217,0x3c0aff57,0x3c2df6b1,0x3beaab07,0x3b8c2060,0x3ab7b92b,0xb9fa6ff2,0xba859f00,0xbb0dfd7f,0xbbfb82ef,0xbac60acd,0xbb16bc8d,0x3abaa9e4,0x3b248d30,0x3b01f0bd,0x3b4e1211,0x3b1229c1, +0x3b517629,0x3b506680,0x3b3eb54b,0x3b80defe,0x3adfab5f,0x3a45ea47,0x3b2db8cc,0x39154911,0xbc0ba48d,0xbc028251,0xba9ff0aa,0xbb6db161,0xbb57180d,0xbb4a743d,0xba0ee523,0x3c0654f2,0x3c19961e,0x3c2dd0ab,0x3c63ad5b,0x3babc1de,0xba834e95,0xbb80744f,0xbaad75e5,0x3acc9c81,0x3beff027, +0x3c03b226,0x3c0b971e,0x3b9c2841,0x3ac92222,0x3b86423e,0x3b51925a,0x3abb1044,0xb82c84fe,0xbabf61e2,0x3ba0ae7a,0x3babc96f,0xb9569c00,0xbac2a382,0xbb958c1c,0xbbc109f9,0x399850a4,0x3b283f73,0x3970a70d,0xbaa56117,0x3a4b3218,0x3c14a430,0x3c3c6b03,0x3bbce699,0x3b5eb928,0x3c022187, +0x3c07f60f,0x3b8b4ea1,0xb9a54623,0xbac46ca9,0x38974a55,0x3b83f3a8,0x3bd0390c,0x3b5a2a2f,0x3a91bf76,0x36bbe766,0x3b10dd92,0x39b05895,0x3ae06616,0xbb403f49,0xbb5a1203,0xba9214df,0xba672baf,0xb80ec2f9,0x3a8c3259,0x3ad23854,0xba0cb8e9,0xbb091396,0xbb35bfaa,0x3acd1030,0x3b438b9f, +0x3ae9c1d1,0xbb629ebd,0xbbdbafe9,0xbbf845ac,0xbba4dfac,0xbaebd048,0xbc1b77c2,0xbc156d2e,0xbb81dbe5,0xbb0bc318,0xba0eb986,0xb987b181,0xbb1502ff,0x3c205ccc,0x3c36487d,0x3b10da7b,0x3be5333c,0x3bba0025,0x3b824305,0x3b8830dd,0x3b5731d3,0x3b5f3eb9,0x3b284f55,0x3b597508,0xb965b659, +0xb9dec987,0x39616882,0xb89e21c2,0x39baeb21,0xba4257f7,0x38020f8a,0xba7211ee,0xba3d6dcb,0xb8192908,0x393dc960,0xba13305b,0xbb03d7e4,0x3aa2302f,0xba19aea8,0xbbaabe29,0xbb1135f1,0xbb83969d,0xbc0e2f95,0xbbdb0af7,0xbb873e86,0x3b242be8,0xbb062ab8,0xba98c7e1,0xb9eb4053,0x3c18c351, +0x3c3368b7,0x3b8dd87e,0x3bbf22ac,0x3b92ee61,0x3bbd6a4b,0x3baf592f,0x3b949610,0x3b16d511,0x3adff6b1,0x3b017ad5,0xbaba89df,0xbaebb8ea,0xba57fc97,0x39a0d543,0xba826bab,0xb75f39b9,0xbaa34229,0x39959d0a,0x392dd0ee,0xb7f2bc4f,0xba109ae1,0xbb0657d4,0xbb6e99b8,0xb92a2815,0x3b100a1b, +0xbaa3ef28,0x3a4e8cd1,0x3b945c35,0x3c2347da,0x3c1c0ecc,0x3bbe8ebc,0x3c071aad,0x3bc7ab0c,0x3baf88c5,0x3b64c361,0xbb1bea43,0xbb67430d,0x3b185465,0x3b503443,0x3b944260,0x3b8c85ec,0x3b23b5f2,0x3ae58111,0x3927a14c,0xb98c296b,0xba897460,0xbb292ee8,0xbb49da77,0xbb362bc8,0xbb4e0c8e, +0xba82a7a4,0xb940560b,0xb8364da0,0x38b85678,0x388bb6c7,0xba966e6e,0x399ca083,0x3a4d49ab,0x3b1d4a1f,0x39e33074,0x3a75d0e1,0x3b800c5a,0x3b5e7485,0xbc22ef4d,0xbc4422f5,0xbba90737,0xbb898b75,0x384884c3,0x3bae0546,0x3c0a723e,0x3c0b14e5,0x3c1d2a77,0x3c267b2f,0x3c0f64a9,0x3be3bf7d, +0x3ba3011f,0x3b973f66,0x3b43485e,0x3ad56f60,0x3ab082e8,0x39a9d9ce,0x3871e6bc,0xb8e89caf,0xbb606e20,0xbb66b2f4,0xbb3175e9,0xbb62d128,0xbaf5fc4b,0xb85f9ea8,0x3a1aadaf,0x3aa6929d,0x3a595555,0x3ae949a5,0x3acb2ca0,0x39b994e8,0x3adee15b,0x38d9608f,0xbae17101,0xba5d8eee,0xba886b1a, +0x3b89806e,0x3bf03d3a,0x3bd8eb8b,0x3c033a15,0x3bd778fa,0x3bd1f2b4,0x3bb7f8b8,0x3b50e66c,0x3ac7d15c,0x3ab52217,0x3ab47a30,0x3aa08d2e,0x3a8ce69f,0x3ac32b4f,0x3ae5023c,0x3a98ca04,0x3aa59fdb,0x394726c9,0xbb2036cb,0xbb1e1d15,0xbaf29019,0xbb1b6a1e,0xbaf6dd07,0xbb03effe,0xbb1d0f02, +0xb94cd044,0x3951082e,0x3af3b1f6,0x3b21e14c,0x3b72ec43,0x3b8a5fc5,0x3b7cb8a1,0x3b9c98d8,0x3b77195e,0x3b508bb2,0xbb5d9077,0xbb22b124,0x3aa566b5,0x3b03573c,0x3b64651e,0x3b5473a6,0x3b52270f,0x3b684ed8,0x3b15bacb,0x3acd3140,0x39cb3c3f,0x3969dff5,0x3997a4ec,0x39fbcc51,0x3a4a16c6, +0x3a6d207e,0x3a8a1d59,0x39bbe9f2,0xb9a751f2,0xbac9433c,0xbb3e487c,0xbb4043ce,0xbb1936e0,0xbb3c672a,0xbb1621f9,0xbb22e6af,0xbb273430,0xbaf37616,0xba67017b,0xba28d631,0xba62ea13,0xbad04791,0xba848b2d,0xbaf3e440,0xbb7ee703,0xbb4a6d18,0xbb9d8d82,0xbac66d6c,0xb9eae2c4,0xb9c2dd46, +0x3a2f6771,0x3a6602f9,0x3aa21953,0x3ac301c8,0x3ab2bff9,0x3ab90731,0x3aad0bce,0x3ac26653,0x3aa2a252,0x3a673e3c,0x3a3b0566,0x3a09ba33,0x3a49262a,0xb9170b09,0xb7cd2e76,0xbab37cf9,0xbaee2467,0xbaebbb10,0xbaeff01c,0xbb00d4c0,0xbb18361b,0xbb3697b1,0xbb342c3d,0xbae6517a,0xbb8f6d79, +0xbb2efa97,0xbb918efc,0xbb5cdffd,0xbb8ab249,0xbbc46641,0xbbaea01e,0xbb6c2e68,0xbb3e9e9d,0xba4495b8,0xba46c3a6,0x396b6421,0x3a755727,0x3acad3cd,0x3b1f3bc2,0x3b567cc7,0x3b475e21,0x3b22cbb2,0x3b0a6d37,0x3adbb122,0x3aafc731,0x3a819854,0x3a51cc29,0x39e8b12b,0x393cd431,0x38dbfd98, +0xb761fcfa,0x3821bbf1,0xbaa5064b,0xbaa6af3d,0xbaf2e436,0xbb0343cc,0xbb1a868d,0xbb1a27ca,0xbb443e28,0xbb3ebe08,0xbb4f06f5,0xbb56ada1,0xbae97d63,0xbb8f5560,0xbb45f588,0xbaaba04d,0xbb2a0627,0xba8edce6,0xbb1e75e6,0xba11960d,0xba2c21e4,0xba024797,0xb9bfc5d4,0xb9925234,0xb93f84c4, +0xb6a9eb1a,0xb901e249,0xb7112507,0x385dad71,0x3859549b,0x3815fd70,0xb7a6a90f,0xb8883cad,0xb876cc13,0xb8c9a672,0xb9352e38,0xb99452e6,0xb87021ec,0xbacb491e,0xbb4b0f28,0xbb72ba79,0xbae9ddd1,0xbb5cfc56,0xbb8a495c,0xbb96d75c,0xbb8d9cb4,0xbb8f852e,0xbba21079,0xbb9d34bd,0xbb93753e, +0xbb72987f,0xbb1c367f,0xbb943c60,0xbb89cd52,0xbaacaf42,0xb95f7aea,0x3ab2063a,0xbaf3b9fc,0xb984e964,0xb9531ebd,0xb96a8a6d,0xb9c6aa9f,0xb9ee7145,0xba28a1e3,0xb9e7a461,0xb9ee6180,0xba2e1180,0xb9d222f5,0xb99a962f,0xb8556b28,0xb9e49192,0xba1f9e5a,0xba4c4f40,0xba5b2f95,0xba3c59e4, +0xbaa80d81,0x3b022ee2,0x3b4b1b57,0x3b0f2147,0x3ae395b4,0x3b61e58a,0x3b2c4d09,0x3b378bb8,0x3b25bcda,0x3b0e3bd6,0x3b510bba,0x3b54bce1,0x3b5b1845,0x3b6f6c26,0x3aaa9e42,0x3b28d135,0x3b846f6d,0x3bb54679,0x39588d35,0xb9c77f54,0x39449fbe,0x3946e105,0xb9dfd2a6,0xba21466c,0xba9db4fe, +0xb7ba8129,0x3895cc46,0xba339c3f,0xb8cfa628,0x39b88863,0x3aab5085,0x399ff710,0xb9d6181d,0xba9ca3e6,0xbaa1f382,0xbad7d802,0xbb171f7d,0x3b03434d,0x3a5ea31a,0x3aa9db74,0x3b4493b0,0x3ab90060,0x3aabfc22,0x3ad5fec2,0x3b2792d9,0x3a6d5ba2,0x3a9cdcf6,0xbaf86a65,0x3af2e6d9,0x3accd57c, +0x3aed103c,0x3b49556e,0x3afc2d2a,0x3b99165c,0xba908ac2,0x3a33c238,0x3ab95c7d,0x3aa7fbcc,0x3a26cd54,0x39c1f0ef,0xba777c52,0x3a1586e0,0x3a05c238,0xba1e3ebf,0x3a3122f4,0x3ab8be47,0x3b420093,0x3a43dd4d,0xb95f11b9,0xbaf1faf1,0xbaca84bf,0xbb4b37a4,0xba92e868,0x3b0dd5b9,0x39ac7acf, +0x3a8a9507,0x3b2f28c7,0x3b059917,0x3aa437c3,0x3aac42f7,0xba9f126c,0x3aa7b78e,0xba9a1aed,0x3aa32938,0x3ab0f701,0x39fd1568,0x3a8842f2,0x3b6d0c82,0x3a68839c,0x3ba860cc,0x3a2cb7c9,0xb91ffa42,0x3b0795a5,0x3acdae41,0x3a4964e1,0x3935b165,0xbb23e6ed,0x3ae85b32,0x3aecb4d7,0xba6e3e70, +0x3abb57a3,0x3b170605,0x3bc9951f,0x3b1658e1,0x39b4e6b6,0xbb0de04c,0xbb3abfd6,0xbb84c88b,0xbb3f1814,0xba7f735e,0xbaf833e2,0x39699f17,0x3aad01e1,0x3b382f7e,0x39482367,0x3b3c7b4f,0x3aa596d3,0x39108a49,0xbab9f9c5,0xb885a820,0x3ab6030e,0x3abf6fc4,0x3ab3c092,0x3b664ac7,0x3af10328, +0x3b2c5b71,0x3b054b8f,0x3a94df4a,0x3b9139ab,0x3b6f624d,0x3b446c06,0x3b3dff3b,0xba0467a0,0x3af6ee4a,0x3ab8d7b0,0xba753899,0x3aea2bf8,0x3b849c9f,0x3bedcfa8,0x3b401445,0x39259acb,0xbb342603,0xbb419ef3,0xbba1c935,0xbb8b1add,0x3a6ba2cb,0xbb0115e7,0x37eee2be,0x3ac4c89b,0x3ac77bac, +0x3aee96bc,0x3ad19760,0x3adfe2a2,0x3ab588d9,0x3b2fa088,0x3ab7df6f,0x3b612c8e,0x39deb62d,0xb9ce0451,0x3b35df28,0x3b68138f,0xba935ed8,0xbb579de2,0xbc1bdd4d,0xbc0c8c2e,0xbc027caf,0xbbebb8a8,0xbba32a9d,0x3b5071ca,0x3a9211b8,0x3b0f5c50,0x3bacaeaa,0xbb6e32c9,0xbc1268b6,0xbc2653d8, +0xbbd3c5e4,0xbb183542,0xba8b4d62,0x3b2407a9,0x3b88d9c4,0x3b9c9e5d,0x3bb0a5c0,0x3aebc0ca,0x3b9603c5,0xb9d21100,0x3a74478e,0xbaa4ead0,0x3b944a60,0x3b92427c,0xb9ba3e1f,0xbac453fa,0xbb83f8cc,0xbb974ba0,0x3a438231,0x3b9899bb,0x3b9c7e1c,0x39abab2f,0x3b8034c0,0x3ba213a3,0x3b4802b9, +0x3b396270,0x3ac60ee0,0x3c155182,0x3c3033f4,0x3bccfaa4,0x3a2c1f24,0xbb1a6bf1,0xbb0f2b79,0x3b85a43b,0x3be696ae,0x3ba88536,0x375f58c1,0xbb36eb37,0xbb0721b2,0xba44e145,0xbae6ab43,0xba45b784,0x3a83d794,0x3946a893,0xba393a4d,0xba13f3d5,0xb92dd0db,0x3a6e5b5c,0xba8ffdf0,0xbb11b78b, +0xbb1b08d3,0x3abeb1d8,0x3b0680b7,0x3a70adcf,0xbb5a93c5,0xbbf5c79f,0xbbeaae3a,0xbb0b3673,0xba3075cb,0xbc660a5e,0xbc2fc5ab,0xbb8984f8,0xbb69d146,0x3a9072c8,0x39991800,0xbbc208ef,0x3b59424d,0x3b6bc5f8,0xbb6810c3,0xb8ba1e34,0xb95351cd,0xba57ce1f,0xbab3857e,0xb9c955f6,0x3a8c655f, +0x3a91ef84,0x390d76b0,0xbaa04536,0x3a71eba4,0x39d52c8f,0x3af4bf46,0xba002c78,0xba338e65,0xba15ccec,0xba28b4e5,0xba9ecbc9,0xb9742de8,0xb984ae35,0xba1542dc,0xbb02c902,0x3a450b98,0x37a25801,0xbbaee53b,0x3a122e8f,0xbb026b87,0xbc1d0730,0xbbd858a7,0xbb67eb82,0x3af99a4c,0xbb63341b, +0xbb9e4fd5,0xbbf9b7af,0x3b41ef04,0x3bc0373c,0x3abffedd,0x3a5fecec,0x39fd8083,0x3a831ed8,0x3aacaf4d,0x3aa8c5d9,0x399c7ff8,0x3a0b504e,0xbae7942d,0xbaedb931,0xb99bd73b,0xba898ef8,0x38935f70,0x38d45e7e,0xba1d86b5,0xba8abbca,0xb8f91e88,0x399f0ee4,0x3a0b8b4a,0xbaaf6efd,0xbb05d753, +0xbb6c9c5c,0x3aafb9d6,0x3b0e4aea,0xba403d2d,0xb944ce55,0x3bec2ef7,0x3c51480d,0x3c3366ae,0x3bf806c5,0x3b89cf6a,0x3b968b6a,0x3b871279,0x3a77c375,0xba17dcab,0xba4212dc,0x3b66c506,0x3bb36cbf,0x3bb88dec,0x3bb3944f,0x3b1ffce2,0x3a705aed,0xbb112bdd,0xbb285905,0xbb6512e2,0xbb2e1254, +0xbb412520,0xbb51d999,0xbb0c5eee,0xba60e694,0xb90c1bd0,0x3912fa9b,0xb95b547c,0xb9c7a713,0xba75ddfa,0x3a2cd470,0x3a9eedd2,0x3b059e22,0x39bff09d,0x39f22531,0x3ba0251e,0x3b9b27b5,0xba26b9c0,0xbb945f2c,0xbc15c41f,0xbb9c4bd9,0xbb1bf172,0x3b7483c2,0x3bab6f93,0x3b9196d3,0x3bdf13ed, +0x3c124f1a,0x3c14b064,0x3c07c683,0x3b9da4bb,0x3bae466a,0x3b542d58,0x3aec0bbc,0x39f570c4,0x3a3b536f,0xba4d2ba5,0xbb0f0bd1,0xba32d96f,0xbb077615,0xbb710a3a,0xbb4ca765,0xbaf3f9dd,0x3a141cc3,0x3a7d7ad7,0x3a56ff51,0x3a605afa,0x3b08c1be,0x3ac68848,0x3af4e5a3,0x3a7c516f,0x3aecd89e, +0x3a8628c0,0xbb1a0243,0x3bd82deb,0x3bd3d641,0x3be11bfc,0x3bc70ed4,0x3ba32c7e,0x3b39252b,0x3b07939a,0x3abc94c9,0x3a7f082b,0x3960f8d9,0x3979261a,0x399ed7a5,0x3a529c1c,0x3a908a6c,0x3aab4146,0x3a6a22ea,0xba3f3fba,0xba77e466,0xbada90fe,0xbaee0514,0xbb145a48,0xbb3e6946,0xba03946e, +0xbb063361,0xbb0c9984,0xbad59e76,0xbabfcdd3,0x39ca5360,0x3ae13f15,0x3b58b7be,0x3b82e8fa,0x3b94b117,0x3bb2619f,0x3baa9298,0x3bc30ae7,0x3bc166e9,0x3a5cb199,0xba6d021d,0xbabe0a5d,0x3a0fa68a,0x3ace9df7,0x3ab0cf17,0x3a10b148,0xb8e3d250,0xb9f63c1f,0xba21919c,0xba82d16f,0xba9b3a54, +0xba90476a,0xba54296d,0xba052ef6,0xb9a07f40,0xba1a0581,0xba91255d,0xbb00da05,0xbb1e3ed8,0xbaa12d1c,0xbad543dd,0xbb136cd6,0xbb03cbab,0xbb2b517b,0xbb3cdad8,0xbacb2b4a,0xba8ac5bd,0xba4ef497,0xb9a09295,0xb9829d73,0xb90c4e0d,0xb9994685,0xb9bebad7,0xb974e597,0xb9b5d1d2,0xbad3c61d, +0xbb228303,0xbb0c0ba5,0xbab101ab,0xba86ee16,0xba5f4cc2,0xba1637a7,0xb992faf1,0xb94494b9,0xb96b6107,0xb993e462,0xb949209b,0xb964b647,0xb8242c10,0xba1f725d,0xba5caf00,0xba8519ff,0xbaa950a2,0xbb1fe810,0xbad466c6,0xbab9f8d0,0xbaf84024,0xbb155069,0xbb0f8aea,0xbb0fbb2b,0xbb16e93b, +0xbb2b07b9,0xbb6d1f51,0xbae4996e,0xbb6bad06,0xbb3c6924,0xbb61ae91,0xbb577509,0xbb67c20d,0xbb7de6de,0xbb5f010e,0xba13a51c,0xbb2f427f,0xbb0e4cc2,0xbae1172b,0xba8e18aa,0xba7481fc,0xb9f17269,0xb94c65c8,0xb9cb2054,0xba140b65,0xba1f455d,0xba301c0d,0xba248521,0xb9dcb765,0xba1c5bbb, +0xba69752d,0xbaaf00c5,0xbab71333,0xbad1c4ea,0xbafa7fb9,0xb9a6d8dc,0xba788b63,0xba2355d7,0xba9dccf8,0xba9a78fc,0xbaa5c76b,0xbaaef9ce,0xba919641,0xbab6b137,0xbb0126e7,0xbb4de80b,0xbb0dc456,0xbb1f7153,0xba9e9306,0xba003ac1,0xbafa8cb2,0xba5bf9e0,0xbb259d87,0xbb0df76a,0xbb0b2254, +0xbb05d2b6,0xbb059b87,0xbaf81939,0xbae39611,0xbae2c626,0xbadc84fa,0xbad9c579,0xbad7a298,0xbad9a065,0xbadf1ed5,0xbaf020ce,0xbaf3af5d,0xbaf9f3c3,0xbb01a9dc,0xbb033ca1,0xbb234e6c,0xba466976,0x39864078,0xb84e4c3e,0xba5f6da1,0x396c35b0,0xb8eac837,0xb912670d,0xb9dc0695,0xba39970b, +0xb9cd4cc6,0xb9924b35,0xba4e8339,0xba560055,0xbad963a1,0xba766a01,0xb9774fd2,0xbb3faf9c,0xba79e4bb,0xbb143c78,0x3a1d346d,0x36ea56a5,0xb9255b3a,0xb9448237,0xba22fdbe,0xba362d20,0xba370efa,0xb9ede996,0xb9d25bc6,0xba01be5b,0xb96afe72,0xb8796390,0x395de711,0xb89c2a29,0xb995a6be, +0xba12cfc3,0xba23d1c3,0xba35625d,0xb9f17f2f,0xbb35a75e,0xbb34320d,0xb88c9bcf,0xbb0ac491,0xbb2b9546,0xb9d91c2b,0xba04c029,0xba06978d,0xba4a3167,0xba9b41c6,0xba9cc105,0xba8d7aea,0xbb47eb3d,0xbb19a4db,0xb93b96af,0xbb346492,0xbb280c48,0xbab9defd,0x392dc094,0xb8a92e50,0xb8ef4bc9, +0xbaff5ffb,0xbb19f39b,0xbb04ad89,0xba413911,0xb9bdb727,0xba7067be,0xb9d49bfc,0xb82510b9,0x3a2cb817,0x385faea5,0xb9e7ed16,0xba9cd111,0xbac0463d,0xbab6f088,0xba84b827,0xbb352232,0xbaeba1fd,0xba1cc5db,0xbaf67d64,0xba93564f,0xba3d5ba8,0xba998e9d,0xbaf31083,0xbb165987,0xbb2da6a6, +0xba72ba28,0xba445220,0xbae29368,0xbabbb1aa,0xba3a2152,0xba6fde06,0xbb3d24da,0x3924b3a6,0x3adc9d5f,0x3a20c9ca,0x3a46d9df,0xbb106054,0xbb5452c1,0xbb32e094,0xba9bbb68,0xba1acf08,0xbaa17b8e,0x38c9c415,0x3a6f59cd,0x3b1a1049,0x3a7b1ad4,0xb9b7bea1,0xbb00ea88,0xbb226425,0xbb09ada5, +0xbb4e810c,0xbb926b05,0xbb0cfea1,0xbad2aea6,0xba6b3923,0x39741be7,0xbacc4977,0xb89af6d4,0xba424505,0xbb7f41c5,0xbaf13187,0xbb2aec90,0x38eadbae,0xbacaa105,0xbad1cad8,0xb97c692c,0xba7a5e61,0xbb37921c,0xbad3a5a2,0x3afbfd8f,0x3a963d5f,0x3ab6d077,0xbb6748c9,0xbbb3bd3c,0xbbabfd7f, +0xba796b77,0x39032623,0xbae51d38,0x37f62421,0x3a4fc29e,0x3b598524,0x3a8835f1,0xba017dc5,0xbb396afa,0xbb5fd90d,0xbb4838b6,0xbb63e5db,0xbb64fa79,0xba42772a,0xb9a2e42d,0x3b12449a,0x3a97827d,0x3a5cdbf3,0x3a21c547,0x3a781d53,0xba9839dd,0xba63b5de,0xbac1b4c1,0x3a97ce52,0xbac5fadb, +0x38bf5b5a,0x3b00783c,0x39bae0ea,0xb9f96d4a,0x39e8f54f,0x3b9f3ca9,0x3b29cbb9,0x3b6a6361,0xbb48b8f3,0xbb8f6d79,0xbb95faae,0xbb0a616e,0xba78d292,0xbac0d8df,0x3a4c58e6,0x3b51e7e1,0x3bc82f8b,0x3b2f0ccc,0xb9d2a2c3,0xbb736fc1,0xbb9845cc,0xbb95a20a,0xbb8d4334,0xbbc2db38,0xbac67784, +0xba7cfc28,0x3acdcd08,0x3b1eaa13,0x3ae4e77f,0x3b4156c5,0x3aea139f,0x3a49cca1,0x3ad5f41e,0x3aad3793,0x3b4d801d,0xb802d782,0xba6967d2,0x3b3b00d1,0xba8aca08,0xbc14e24e,0xbc36945f,0xbbeed247,0xbc0f5399,0xbbea7b60,0xbc0447be,0xbbf4e7c5,0xba4143c5,0x3b14a373,0x3bbf0762,0x3c18d6f8, +0x3b3cbdec,0xbb2c1f56,0xbbab7617,0xbb8db560,0xba9fd233,0x3ba22f6a,0x3bb294a9,0x3bbb0323,0x3b77b704,0x3b2dfc16,0x3b622e82,0x3b471fa1,0xb84376e2,0xba442812,0xb9d790c6,0x3b619a5e,0x3b82924d,0x38ff660e,0xbacd57c9,0xbb840e7e,0xbba6c0e1,0x3a5ceaf1,0x3afccfaa,0x39928caa,0xbba2bdca, +0x3ae399ce,0x3c01288c,0x3c1039d6,0x3b257529,0xb979b77f,0x3baad133,0x3beb483d,0x3b8a4237,0xba95bbe1,0xbb68d015,0xbb369843,0x3aeaa0ea,0x3ba1b802,0x3ba067f9,0xb9f03c1f,0xbb668a1c,0xbb95503b,0xbb88ca1a,0xbae7040e,0xbb285f64,0xba66bb95,0xba2164eb,0xbadc614a,0xba892f02,0xb95e5210, +0x3aa38416,0xba9a1ef9,0xbb22e43a,0xbb122050,0x3a9ffaa3,0x3b0b5976,0x389c3a1f,0xbba142e3,0xbc04b707,0xbbfa3b5e,0xbb6ac85e,0xbb66c73a,0xbc8200b9,0xbc10b2a0,0xbb9f4f1c,0xbbfea9c0,0xbbd743db,0xbbedb5cd,0xbc567ff2,0x3b868674,0x3bfec09e,0xbaf4f27e,0x3add381f,0xb99b3f6f,0xbaa8956e, +0xbacf33b3,0xba860217,0x39c2ae89,0x39ace2f7,0x3aad7741,0xbadac72c,0xba6d3ffc,0x39247733,0xb9bbae10,0xba58146c,0xbaccac16,0xb9d8d944,0xba897a9f,0xb90b24da,0xb7c36165,0xb9ba4abd,0xba6b3f39,0xbaf0e289,0x39b67fc0,0xb9f7dc33,0xbbddff8d,0xba89a419,0xbb80f606,0xbc38899c,0xbbf9afd5, +0xbbf43977,0xbc10ba2c,0xbc448f19,0xbc4aef73,0xbc4ab8a9,0x3b02ef2a,0x3bbeb55d,0xbad75f00,0xba5826cc,0xbb1b7835,0xbac97288,0xb9c111fb,0x3a009b85,0x39f686ba,0x394642d3,0x39027276,0xbb1b0076,0xbb34959b,0xbaa02456,0x38c577f0,0xba9def0d,0xb9de04f5,0xbac0afef,0x399d93da,0x39a52625, +0xb9ce803f,0xba5d0585,0xbb189ad5,0xbb4f73a7,0x3a685614,0x3b39823f,0xbb216dbb,0x3a13e701,0x3c02ea86,0x3c5c009e,0x3baa8a4f,0xbb0336c8,0xbbcf706e,0xbbb8934c,0xbb69c450,0x3a90a0fb,0xbba629ba,0xbbc33f46,0xbb1eec42,0x39f0080f,0x3b1f286a,0x3b679588,0x3a0cce1a,0xba46e6f7,0xbb342d37, +0xbb3a5d3c,0xbb2edd1f,0xbb59a6f5,0xbb4be35b,0xbb3f3ee5,0xbb37fd7f,0xba94cc80,0xb971e6c6,0x39918dcc,0xb980df68,0xb99c14ed,0xba64c7c7,0x3a2ef879,0x3a8102e9,0x3b045108,0x39b90838,0xb9b561fd,0x3b71d583,0x3b8f273d,0xbc27e1c3,0xbc5b6c6b,0xbc8361c2,0xbc6cb442,0xbc10caa4,0xbb93dd92, +0xbaf62f05,0xba14a677,0x3b4126b9,0x3b96f4d5,0x3b1d2c9a,0x3b3e5ed7,0x3aaad733,0x3afbd5c7,0x3ae1b063,0x3a920ab5,0x3a56711e,0xb91c25c7,0xbab55037,0xbb39ff2a,0xbb966962,0xbb93121c,0xbb54187b,0xbb55f063,0xbaea5c5a,0x3872ca5d,0xb8cc393c,0x39bb8374,0x38c94177,0x3a9669db,0x3a39d378, +0x398c2a99,0x38c71722,0x3994c5e1,0xbafe182b,0xbb131a89,0x3b6dfef2,0x3b1fe707,0x3b6ca38b,0x3b24b409,0x3b3b13a5,0x3b0a994e,0x3b2ddfed,0x3adb73f2,0x3ac55c29,0x3a5a7526,0x3a4c7662,0x398239a2,0xba29662a,0xba803c36,0xba6f2041,0xba4f5a88,0xba812b5c,0xba459e94,0xba7ac720,0xbb00e701, +0xbb046d01,0xbaf7058a,0xbb34eef8,0xbb18cc41,0xbb1de0c8,0xbb14056c,0x381dfb86,0x3a45ee22,0x3b07ffbe,0x3b41349b,0x3b6dba72,0x3b8536dc,0x3b7a38a5,0x3b886aa3,0x3b78b6fe,0x3b468dc6,0xbb3423a5,0xbb40d56d,0xbaa47350,0x395f8121,0x3b138fcb,0x3aa62555,0x39b4ffcb,0xba34b336,0xba2d06c4, +0xba287fe1,0xba98f681,0xbabcd5f9,0xbaae6473,0xba96fbe0,0xba83d8ee,0xba184691,0xb9f2d025,0xba8aeb8d,0xbac22923,0xbb1ae9fe,0xbb50a738,0xbb3a9e5d,0xbb3e6297,0xbb48e802,0xbb2bbe6a,0xbb2a7d8a,0xbb19e889,0xba9d782b,0xb9a92cce,0xb927aa8d,0xb9257dfa,0xba1b3702,0xba092b53,0xba904c0a, +0xbb2537f9,0xbb08f4f1,0xbb90a75c,0xbb4a9f81,0xbae8b32a,0xbb0cb1eb,0xbae158fd,0xbaddd141,0xbaa50ac8,0xba98e04d,0xbabfad5b,0xbad4e7c0,0xbae0673b,0xba1ac659,0xb91390ed,0x3973142b,0xb918a76f,0xba01ddab,0xba15eb50,0xbab03818,0xbac61a97,0xbb2b2128,0xbb4af8a3,0xbb2ae5bd,0xbb438915, +0xbb372762,0xbb4d2a80,0xbb70d34b,0xbb46db28,0xbb52a23f,0xbb90977e,0xbb4ed42c,0xbb83d8cd,0xbb4402dd,0xbb8b2c8b,0xbba88f8a,0xbbb78839,0xbb8d133f,0xbb2a4dd7,0xbb3a5a94,0xbb45a3f9,0xbb106883,0xbab61ee3,0xbab160b3,0xba7237f4,0xba266da7,0x385b9882,0x39b9ebaa,0x3a11a10d,0x39a1792d, +0x38934eac,0x375ffc97,0xb9946d96,0xba1084b3,0xba437883,0xba60da99,0xba3e712a,0xbaa1b916,0xbb067418,0xbb1e1517,0xbb3ba63f,0xbb4fc154,0xbb4f001d,0xbb4b6993,0xbb752324,0xbb831c7c,0xbb7075b9,0xbb8efb30,0xbb60639a,0xbb9fb8c4,0xbb96a992,0xbb21d78c,0xbb1fa9de,0xbb645c75,0xbb6dfa35, +0xbb0e7290,0xbb0357f6,0xbb0374dc,0xbb0133e6,0xbafdb16e,0xbae2ec89,0xbad92d66,0xbae8a01f,0xbaeb73d2,0xbadf6586,0xbac88a21,0xbaac1c89,0xba99afb6,0xbaa61786,0xbaadfe48,0xbabc4e8e,0xbaced584,0xbadcddf1,0xbacf8a78,0xbb407cb1,0xbb5a6071,0xbb057df4,0xbb5333dc,0xbb6da925,0xbb11628c, +0xbb1c8c31,0xbb1b9f99,0xbb29d2b3,0xbb3ca6b7,0xbb3d0e25,0xbb3fe3a0,0xbb7bae62,0xbb6a740c,0xbb375e7c,0xbb7d7223,0xbb57d2e2,0x3b36696e,0x3b643f2c,0x3aebd1fe,0x3b01c509,0x3b05337e,0x3b003a92,0x3b0881a7,0x3b0c4ff7,0x3b00aa2c,0x3b0cc859,0x3b0b4970,0x3aea5519,0x3b05594a,0x3b0e9986, +0x3b210dda,0x3b0eccce,0x3b0a9d7d,0x3afaa71a,0x3aef83be,0x3ad2fdb2,0x3accf5c5,0x3b244bab,0x3adf6c90,0xbb0598c3,0x3b50f12e,0x3b137f93,0xbae9844f,0xbad180a2,0xbad9f6de,0xbac61934,0xbaaf80f0,0xba8d61c0,0xb9b759d4,0x3af437fc,0x3b44582c,0xba8dbded,0x3adce8da,0x3975428b,0x3b22d9b0, +0x3b19d18f,0x3b3d6092,0x3b2f6c2a,0x3b46f09e,0x3b55826d,0x3b350a6e,0x3b7ed1c0,0x3b8427dd,0x3b3c527c,0x3b5a9937,0x3b771ed6,0x3b9e23b3,0x3b85cfd0,0x3b6cb090,0x3b2a3367,0x3b0aa850,0x3ac94b1e,0x3aaac9e2,0x3a2281c7,0x3aa0f774,0x3a6bea65,0x3b2ff6ed,0x3b469154,0x39cc99fe,0x3b014c42, +0x3abef490,0x39eff0f8,0x39a77a0a,0x3869f3da,0x3aa21ead,0x3a5f2640,0x3ad34aeb,0x3b225b7c,0x3acf09b6,0x3b60b215,0x3b4d0142,0x3b4401a8,0x3b758831,0x3b57e502,0x3b8d83f7,0x3b986049,0x3b6312ac,0x3ba819c7,0x3b9eaa52,0x3b565a41,0x3b8af6d3,0x3ba6bc3c,0x3bdad1fa,0x3bb40f0c,0x3b9937b7, +0x3b5651c2,0x3b19f233,0x3a9d7f7a,0x3a10792e,0x39b191b0,0x3a2d1faa,0x3b2d338e,0x3b2b0a8f,0x3b06b9c0,0x3ae178bc,0x3a9252e2,0x3aa02676,0x39f8aa54,0xba0663cc,0x3994ed08,0x3aeec31b,0x3a4ee575,0x3a9437e9,0x3b5037e4,0x3b481440,0x3b05dbd5,0x3a819041,0x3b4917a4,0x3b89b2f8,0x3b771919, +0x3ba303cd,0x3bbc007a,0x3b5c1ae3,0x3c01d92a,0x3bfbee85,0x3b865966,0x3bc5f3e4,0x3bd73748,0x3c2d3a7f,0x3c0801d9,0x3bd69562,0x3b68dc1d,0x3af89644,0x39adbf62,0xba1ae946,0xb9df3ce5,0x39e0cf17,0x3ac99bf7,0x3b426d1e,0x3b43ede4,0x3a692ccb,0x3b281380,0x3a328f3b,0xbad47823,0xbb0900cb, +0xbaac9a74,0x3ac2954d,0x379455a2,0x3a3f60af,0x3b949db7,0x3afd625c,0x3b8a8eca,0x3b8bbcc3,0x3b8138c0,0x3bb80853,0x3b9aa2d5,0x3be716c5,0x3c039998,0x3baccd5d,0x3c0347b0,0x3be857ff,0x3b846d73,0x3bbe0434,0x3c058cb4,0x3c3dfb31,0x3c1deb1f,0x3bf07554,0x3b94e397,0x3b254f6a,0xb7fb718c, +0xbafb94e4,0xbaddc6e4,0xb9f64009,0x3ae49113,0x3b2cedd1,0x3b236e2a,0x3acd73cf,0x3b030483,0x3ac8019d,0xb9adf452,0x3a6e21e6,0x397fd8ad,0x3b1cab14,0xb999690c,0xba1c5a89,0x3b8ec64c,0x3b19032f,0xbb894a4c,0xbb0e3b43,0xbb511047,0xbb2b705d,0xba839773,0xba1deaa6,0x3ae904ae,0x3c13a32c, +0x3c01756a,0x3c128d23,0x3c3be8de,0x3b8432a6,0xbb3086f6,0xbbf54773,0xbbad1c94,0xbacb1b02,0x3b167000,0x3bcb3b7d,0x3c15e366,0x3c1b8d04,0x3be75e28,0x3b8afd1e,0x3b855138,0xb9b7e2b3,0x3880c9f6,0x3979adfd,0x3b3f88a9,0x3b40c26f,0xb7608369,0xba4f705a,0xbb2aa748,0xbb45e987,0x3af8df82, +0x3b8bbb8b,0x3abce3e5,0x391219a9,0x3bedabc6,0x3c2050b4,0x3ba764f8,0x3b099ad9,0xbad3833f,0x3c1e98ff,0x3c3fe1f4,0x3bd88d58,0x3b24a525,0xba631adf,0xbb2f6737,0x3b097606,0x3bb64a76,0x3c03c777,0x3b6773c5,0x3afcb266,0x3ba64004,0x3b54dcfb,0x3b2b0d8e,0x3a883aa9,0x39f2600d,0x3aa8cd0e, +0xba54b724,0xb954b734,0xb98cd6d2,0x3a6a3223,0xbaa96e06,0xbb06b27a,0xbadba05a,0x3a9bfea9,0x3ab82451,0xb964d988,0xbb9f136f,0xbbe967f3,0xbb9eb7f7,0x3aa8916f,0xbb0e51de,0xbc8067c9,0xbbe99d71,0xb7bbd816,0x3a01c257,0x3be675e3,0x3bef856e,0x391ec869,0x3c0d6409,0x3bf89e5c,0xba9b60b8, +0x3b5149a2,0x3b81a4db,0x3ba55626,0x3b451618,0x3b441502,0x3b2d0bd0,0x3b263062,0x3b0f7a62,0x3aab2473,0x3aefa564,0x3a9427e7,0x3aabb58a,0xb7d0e7e8,0xba1fb72f,0xba8412fb,0xb9d5c32e,0xb9dac185,0x39025928,0xb98f3054,0xb9fbf7a9,0xba8d2910,0x3a325a9d,0xb6d9f6fc,0xbbb2e8b1,0xba37b309, +0xbb83e3de,0xbc2fca1a,0xbb215a94,0x3b10dde2,0x3c303f29,0x3bae5f50,0x3b8b86d6,0xbad9d29a,0x3c01b3b4,0x3c19ce57,0x3b4e19e5,0x3bb42429,0x3bb0d795,0x3bb903f1,0x3bae393a,0x3b848248,0x3af527b7,0x3ad22387,0x39b88297,0xba7bfe5f,0x38bd0eb6,0xb9deef73,0x3a573bce,0xb85d8fd4,0xb9214f0c, +0xbaa11290,0x39eb6340,0x3a261efe,0x398f5a83,0xba86d0f0,0xbaf2f387,0xbb098404,0x3b002d8a,0x3b417b34,0xbaf4b2f6,0xb8849b8b,0x3c1f9ece,0x3c8ee477,0x3c7e05e6,0x3c4c78f3,0x3c54db32,0x3c27eebb,0x3c01cc23,0x3b415c91,0x39a815d5,0xbac5c745,0x3ac04569,0x3b889090,0x3bbb7815,0x3bba94e2, +0x3b9612ec,0x3b7e83ca,0x3b1f2c04,0x3a60cfee,0xba64e3aa,0xbaed84a7,0xbb16443e,0xbb060c19,0xbabee559,0xb8ae3922,0x395234bb,0x3a688bc8,0xb9aa8eaa,0xb9b77cb2,0xb9ef9126,0x3a8ac0f2,0x3ab49ab2,0x3b03e5a4,0x3a74448b,0x3a9459d8,0x3b58d377,0x3bd0d747,0xbb9b8f8f,0xbb96a050,0xba51e524, +0x3ab7a37e,0x3b862529,0x3c06d9d3,0x3c1e70b2,0x3c0c7433,0x3c24b695,0x3c477162,0x3c4f1799,0x3c335603,0x3c00f24c,0x3c082293,0x3b920ea1,0x3b02a4e0,0x398cc917,0xb9d75d95,0xbabab71b,0xbafa25ca,0xbb010954,0xbb2551db,0xbb6fb990,0xbb3a732b,0xbad2cb0c,0x3a23efe2,0x39d469ca,0x39910dc7, +0x3a20e051,0x3ace7186,0x3ad2343a,0x3afd362b,0x3a256791,0x38f5b0f8,0x39d9f721,0xbadf6084,0x3b89fe9e,0x3c1ee12d,0x3c2111f5,0x3c0734b6,0x3bfe5072,0x3bd3f930,0x3bd0f28d,0x3bd8d7f1,0x3b758d6c,0x3aaac1f8,0x3a42f69f,0x3abed5c1,0x3b02e9fd,0x3b03ea21,0x3b15c0e2,0x3b076811,0x3a2e7834, +0x392f5ff8,0xba2fbe0e,0xbb070060,0xbadedea8,0xbac9ae2a,0xb9c04973,0xbabf141a,0xbad69e8e,0xba9eb7ef,0xb70ff525,0x3ac2c4c1,0x3b31153d,0x3b7e21bc,0x3b8f718c,0x3b941303,0x3ba0fc06,0x3bb0f0a2,0x3bc80a8c,0x3beb1f90,0x3a2cdab7,0xb881c600,0x3ad31ae9,0x3b3f4c8d,0x3b82100f,0x3b75e0a7, +0x3b599e34,0x3b6162ec,0x3b00f4c8,0x3ac3bf36,0x3a5764cf,0x3a029789,0x39af4ccd,0x393803e9,0x39cb8f25,0x39373eb0,0xb99bcf15,0xba08cc02,0xba8bfcbb,0xbab24299,0xbabac77c,0xbb0413d0,0xbb053b47,0xbb18a71d,0xbb259b44,0xbb2643f2,0xbabbccc8,0xba446e7e,0xb912f94b,0x3a1528e6,0x3a3dba18, +0x3a78999f,0x3a4daece,0x3a235324,0x37a840f3,0xb857b4b5,0xbb0990f2,0xba8007c9,0xba3ae2ed,0xb92883f7,0x3a0ce2ac,0x3a7884d7,0x3aba7eb6,0x3af27112,0x3ace26f8,0x3aa5e2a9,0x3a5b1a97,0x39f5b414,0xb826d7ea,0xb99500ce,0xba4e1e8c,0xba887ff2,0xba96a5a2,0xbaa9d60f,0xbadb703f,0xbab5f0ff, +0xbab61ea7,0xbb086586,0xbb0b32e7,0xbb0e2558,0xbb0eb7d3,0xbb10128a,0xbb3243d2,0xbb03bd77,0xbb05db7a,0xbb0c4de6,0xbb1532a0,0xbaffb216,0xbae0b7ae,0xbb558de9,0xbb2beb5e,0xbb0732c4,0xbb55aaae,0xbb223022,0xbaead6c0,0xba862ea0,0xb981279f,0x38d7f8bd,0x3a534728,0x3ac37422,0x3a688576, +0x39dc013b,0x38c6e05e,0xb95490b7,0xb9ce14cf,0xba16be85,0xba29ea47,0xba6541d5,0xbaac8573,0xbabf77c8,0xbaf37563,0xbae9f34c,0xba9edd5f,0xbaa8f37d,0xba94f68b,0xbab078c1,0xbac6827f,0xbab43faa,0xbadc2f7b,0xbab62bca,0xbb166864,0xbb2aaac9,0xbb3f9d46,0xbb81af89,0xbb4ca0dd,0xbb1b6100, +0xbb482854,0xbaeba003,0xb9af3280,0xba84a39c,0xba8b0931,0xba72ffe8,0xba50605d,0xba39a238,0xba146593,0xb9b8c0db,0xb9e694eb,0xb9e27dc5,0xb9ff9a98,0xba15cc2a,0xba2fc611,0xba51f061,0xba6b1ccd,0xba7783e0,0xba7db0e5,0xba800bc5,0xba8684f0,0xbaa659a1,0xb9be459e,0xba48a463,0xbb2655f8, +0xb99f4ba0,0xba341378,0xbb37df0a,0xbb4bbfaa,0xbb431cf9,0xbb44c5ae,0xbb4513f1,0xbb316be2,0xbb2b8a7a,0xba900cde,0xba48e099,0xbb41988d,0xbaae387d,0xbaace993,0xbb254154,0xbb38a5db,0xbb1b4afc,0xbac20dbe,0xbacaf1a1,0xbab8b790,0xbb00820c,0xbb0b5a00,0xbb1336a9,0xbb009396,0xbb002229, +0xbb0ac975,0xbaee50ff,0xbad8cb5c,0xbab9c33a,0xbad6f23b,0xbaf31389,0xbb068fdc,0xbb0e3881,0xbb03cc99,0xbb1ae62b,0xbae6e434,0xb8fefad5,0x3b80e3b0,0xbb0518db,0xb9535168,0x3b6bb332,0x3b66c744,0x3b55722f,0x3b26fd6e,0x3b480309,0x3b3df06a,0x3b2c7ab6,0xb96362ab,0xbb2a8686,0x3b5bfda3, +0x3a1904ad,0x3b32c870,0xbb2928e1,0xbacfe441,0xbab54d62,0xba7d31e9,0xbb514915,0xbb8022a4,0xbb889916,0xbb379942,0xbb29b01f,0xbb48678f,0xbb1da4c8,0xbb079844,0xbac3555a,0xbaf33b72,0xbb197663,0xbb4109ec,0xbb4a3ebf,0xbb4f79d0,0xbb659d85,0xb9c5177b,0xba78eb64,0x3a8f2f25,0xb8f94fd5, +0xbac32fd1,0x3a028423,0xba4563bf,0xb988968b,0xbaea4664,0xbae2d197,0xbb3fed05,0x39380855,0xba3bfb14,0xba4545a0,0x3a7c6fde,0xb993701c,0xba57c465,0xbb4eee18,0xb9910397,0xba15dafd,0x39e605de,0xbb44ca0f,0xbb8a3562,0xbb9e9f74,0xbb516475,0xbb3b62da,0xbb74487b,0xbb185cee,0xbac8e07d, +0xb8a5b1f0,0xbaa97a25,0xbb161b56,0xbb7ede59,0xbb7d7a80,0xbb921968,0xbb5a7202,0xba916bef,0xba855440,0xba15a5db,0x39f9e6f2,0x3a4a079a,0xbaa44edd,0xb76e375b,0xbb544676,0xbb4f5256,0xbb56f01d,0xbb0d77ca,0xba033cbd,0xbb0ac138,0xbad4e82a,0x3acf96fa,0xbb2b7014,0xb966db35,0xbad0c80c, +0xba2b0dab,0x3a48814c,0x3ad36d90,0xbb6cbb0a,0xbbd1c6ae,0xbc00c792,0xbb78c077,0xbb404bec,0xbb97e088,0xbb2c8ec4,0xbaefc2ce,0x39e859fb,0xbaaa6ba2,0xbb21baef,0xbb959b4a,0xbba4bf1a,0xbba9db0d,0xbb97e00d,0xbb36431b,0xbaea1b5e,0x3ab978d8,0x3ab3d19f,0x3af3f22a,0xb98b856d,0x3a845e39, +0x39774795,0xbb280100,0xbb4074ee,0xbb246735,0x39527773,0xbaaa8ac9,0xb99f5190,0x3b18cad8,0xb9fcebda,0xbb0d7617,0xba87491d,0x3ab48cc7,0x3b06a554,0x3b842ec8,0xbb249077,0xbb89a131,0xbbd87cf4,0xbb8b0d17,0xbb76d564,0xbba2307b,0xbb285e40,0xb9d47586,0x3b3c622f,0x39172dde,0xbb27f0ce, +0xbbb72c61,0xbbc5ee8d,0xbbd1da3c,0xbbac0719,0xbae82f1b,0xbaaa4efe,0x3a9c34f2,0x3aefb8d5,0x3b011634,0x3acfde2e,0x3b02a6a8,0x3a897dd3,0xbac94f53,0xb8822a1f,0xba1aad75,0x3b06c471,0xbad65f41,0xbb0dc8b0,0x3b52eca0,0xba0bc51f,0xbbdf1471,0xbc1e6e0b,0xbc3c1480,0xbc361d45,0xbc13ac70, +0xbc2d8f5e,0xbc36d143,0xbbcb34c2,0xbb4b8831,0x3ae041a2,0x3ba3609b,0x3a56ec82,0xbb7b7a68,0xbbe4d428,0xbbe6b2dc,0xbb84cfd3,0x39b01b14,0x3b050936,0x3b3d7108,0x3b6c5dc1,0x3b9cbafb,0x3b15a18c,0x3b261172,0xbae88284,0xba7b387e,0x3a2daa2a,0x3afa542d,0x3b112268,0x38af126f,0xba9bc8f8, +0xbb2dffde,0xbb403296,0x3aca083c,0x3b13de13,0x3ac5264b,0xbbc4e5a9,0x3b99c712,0x3bc3665a,0x3b32eda0,0xba96032c,0xbb5180f2,0x3b8c0498,0x3bf7e29f,0x3b983812,0xb9e70540,0xbb8d38d1,0xbbbd6161,0xb9224bce,0x3b68ba37,0x3bcd46c8,0xba15c3ce,0xbb9db0cb,0xbbf21ec2,0xbbb9848d,0xbb8169b0, +0xba27ee12,0x3b020f91,0x39daba2b,0xbad6c24b,0xbab4eb20,0xbaa69e57,0x3a2011ba,0xbace3385,0xbb165d99,0xbad6eb33,0x3a2ac869,0x3a73b59d,0xbab1319a,0xbbb529fc,0xbc075134,0xbbdcacc4,0x392389de,0xbbb4bc81,0xbc96f751,0xbbde63a3,0xbb6cc9ee,0xbc235bdd,0xbbff1a42,0xbc11c530,0xbc791c48, +0xbab80ec5,0x3b11f50e,0xbb9d204a,0xbb59a1fe,0xbb9ee09b,0xbb915ed8,0xbbb6a518,0xbb7bbf10,0xbad6babc,0xba8c2316,0xb9e8f96b,0xbacb5489,0x37c1f68b,0x3a0ee06d,0x39254193,0xbabe9dee,0xbadee2f3,0xba7ef0dd,0xba61ae87,0x38af4d5e,0xb8480f85,0xba2c716a,0xba698543,0xba5d8103,0xba66de42, +0xba9ed5f6,0xbbcfe7c0,0xbb02ea63,0xbb9bec35,0xbc40419b,0xbbc0ad9f,0xbbced1e0,0xbc4afe69,0xbc769777,0xbc8a7613,0xbc89dee8,0xbb8b2c31,0x3a202bba,0xbb856514,0xbba2122b,0xbbc850c4,0xbbc42a11,0xbb8071eb,0xbb165895,0xba5df34b,0xba455524,0xbad57728,0xbb0d747e,0xbb01c625,0xba8aa78b, +0x36a648a8,0xba5afad8,0xba460036,0xbab497e2,0x393dcbff,0x39bc3898,0xb96ead0f,0xba9b90cd,0xbb0b929f,0xbafdd236,0x3aeb8265,0x3b1ac028,0xbb1625ff,0xbafa24f6,0x3c3d9cbf,0x3c78fb05,0x3b44e80e,0xbb9bede5,0xbc587279,0xbc2a9152,0xbbee5315,0xba88f7ff,0xbb9c53fd,0xbbabe040,0xbb8e393e, +0xb92b2394,0x3af22c88,0x3b5b47b9,0x38c314ae,0xbae43fcb,0xbb746886,0xbb860cb1,0xbb748f17,0xbb520b8b,0xbb2f0bb2,0xbb29c12f,0xbade0b98,0xba56d413,0xb94840c5,0x3a0d1cf4,0xba0f595c,0xba2b77a3,0xba08cc0d,0x3a4f2093,0x3a926afe,0x3ac30133,0x3a78297b,0xb9da84c1,0x3b502a89,0x3bd2e879, +0xbbe830de,0xbc1d50d5,0xbc96de1e,0xbc811f5f,0xbc3d3f0a,0xbc07cca1,0xbbe3a1e3,0xbbb2568a,0xba70236d,0x3af52d65,0x39d2621e,0x3af9dc15,0xb84cf031,0x3a991027,0x3a8dbaaf,0x3a48eeea,0x38a57557,0xba2dc3b0,0xbb2abc73,0xbb991c04,0xbb84a657,0xbb89b8e2,0xbb80781b,0xbb340d85,0xbacfe916, +0xb6d5febc,0xb9c6a906,0xb9b11d1e,0xb9e25331,0x39fea757,0x38f102fa,0x3a570cb7,0xba8e5e93,0x3a0f1b91,0xba80a9d9,0xbb692895,0x3bf764a7,0x3b1acc6f,0x3a9edd07,0x39257147,0xba1b26e8,0xba0d0cb1,0x39b3d568,0xb9b937a3,0x3a54ba4e,0x3a2d5047,0x3a106e3a,0xb80fb7ba,0xba74cf4b,0xbab93212, +0xbad10337,0xbaf633da,0xbb201bca,0xbb10cda0,0xbaf49978,0xba976cdc,0xbacc43fb,0xbb07867f,0xbb0f9e0c,0xbb1a4013,0xbb16abcd,0xbac56ca6,0x38f0ddb4,0x3aaf2098,0x3b06e21f,0x3b4c06d7,0x3b4a2dbb,0x3b57cb3c,0x3b6edd92,0x3b5d52da,0x3b775320,0x3b65cadb,0xba5e0994,0xbb0620e1,0xbb2db821, +0xba4abeae,0x3a69005c,0xb98f07e3,0xbac5c962,0xbb426f33,0xbb088727,0xbac18a8a,0xba983e3a,0xbadd0a7b,0xbae24a25,0xbaefc7fa,0xbaf388ce,0xbac1cf61,0xbaec2bd8,0xbb07652e,0xbb192057,0xbb2b50d6,0xbb1c409a,0xbb0e67c5,0xbb430e38,0xbb2ff642,0xbb2b78b1,0xbb1b742c,0xbacc4751,0xb9b02c0a, +0x392c3708,0x39d69319,0x3a2a540f,0x3a3725bc,0x3975e3b9,0x3895e657,0xb96684a5,0xba0e25da,0xbb25c3d8,0xbb6cbdff,0xbb337f9c,0xbb4ef2db,0xbb5a93f7,0xbb588d50,0xbb3ecfcf,0xbb406b4e,0xbb4d1b98,0xbb56380b,0xbb53565a,0xbafe437d,0xba9dedf2,0xb9cbc384,0xba872e3a,0xbac21c21,0xbaf8823e, +0xbb138f55,0xbb3e899d,0xbb46cf25,0xbb568efa,0xbb39b906,0xbb5f9aa5,0xbb4369e4,0xbb4d17bc,0xbb636101,0xbb3889a6,0xbb80f585,0xbb471d23,0xbb475b27,0xbb2bd54c,0xbb090c25,0xbb424a05,0xbb47d9bc,0xbb85d478,0xbb6a647c,0xbb1405c2,0xbb919fe6,0xbb9163d6,0xbb817bff,0xbb525187,0xbb725e47, +0xbb6f445a,0xbb7b13af,0xbb3b02fa,0xbb0aa0a8,0xbad393a6,0xbacf9026,0xbad22d18,0xbaae07ed,0xbac833ad,0xbad24604,0xbae59a2d,0xbaee20ee,0xbacf1568,0xbb19d9dd,0xbb036fc5,0xbb2d5450,0xbb310646,0xbb4ee2c5,0xbb3e094f,0xbb39a642,0xbb54d650,0xbb6cc86f,0xbb51291a,0xbb8c20a5,0xbb941d06, +0xbb9231f4,0xbba7225b,0xbb59fa7b,0xbb147be2,0xbba24f29,0xbb4d4c11,0xbb5286de,0xbb3dd156,0xbb458731,0xbb472016,0xbb481e46,0xbb3985f8,0xbb3b3564,0xbb3d1028,0xbb422eff,0xbb3ba547,0xbb2bf0c6,0xbb184a09,0xbb0a2bcb,0xbb13dcfb,0xbb1b9828,0xbb24d1e7,0xbb2eb7ab,0xbb3350ee,0xbb3f3405, +0xbb456817,0xbb0a0371,0xb938934a,0xbb5045d4,0xbb122cdb,0x362c9926,0x37e3c708,0xb9696653,0xba09918c,0xb9c8061f,0xb9e5733f,0xba505c8c,0xbb1f9e53,0xbb592612,0xba2f821a,0xbb018b26,0xbb8be0e5,0x3b60c2f1,0x3b34a731,0x3b78c3d6,0x3b318f06,0x3b30bbde,0x3b2cb309,0x3b340c74,0x3b3a4ef0, +0x3b33cb9d,0x3b3fc37e,0x3b3f961b,0x3b2ab1da,0x3b38a4f6,0x3b43865d,0x3b557adc,0x3b4bc510,0x3b4ac921,0x3b3cfcac,0x3b347eb2,0x3b1a911f,0x3b34aa2a,0x3a74f005,0xba589f7c,0xbb81a395,0x3b0e017a,0xb9b8f146,0xbb86a09c,0xbb849830,0xbb81724f,0xbb6b2cf8,0xbb8af581,0xbb81bfb7,0xbb46841a, +0xba964618,0x3b0bc11d,0xbb48ad3c,0xbac577f2,0xbb90fd75,0x3b2836e1,0x3b5fd668,0x3b6f92e7,0x3b5f6b83,0x3b6df02d,0x3b7eda41,0x3b75a576,0x3b9b5d2b,0x3ba40241,0x3b80fd3f,0x3b8ba265,0x3b96dca7,0x3bb3b98a,0x3ba8227f,0x3ba0ec11,0x3b81f023,0x3b4feedb,0x3b306730,0x3b410e42,0xbabfecae, +0x39e32db2,0x394d9fc0,0x3a4aa659,0x3b24481c,0xba20b7f5,0x3a6cc9c3,0xba264da7,0xba5dde18,0xbabcadb7,0x3a7b2ced,0x388a0377,0xba2049e2,0x39948504,0x3a67adcf,0x3999dc4f,0x38ee1789,0x3b9cfba2,0x3b7fdba0,0x3b85ed53,0x3b780202,0x3b92f7ca,0x3b9a491e,0x3b8a81b0,0x3bbe109b,0x3bba00e2, +0x3b8c5e5f,0x3ba35e97,0x3bbf9749,0x3becf071,0x3be6b936,0x3bce57a3,0x3bab80a5,0x3b60ad3d,0x3b496ab3,0x3a052a06,0xbb209bf0,0x36b8132d,0x3b14584f,0x3aa51657,0x3aaad97c,0x3a48daba,0x39a1ecaa,0x3af67546,0xbad9c02a,0xba49a52d,0xbad8d614,0x3ab2f9b3,0x363de100,0x38d19277,0x3ad55690, +0x3b3cd130,0xbb1313c9,0x3996ed67,0x3b9fb095,0x3b97498f,0x3b967c5d,0x3ba14877,0x3bb6dcf7,0x3b928042,0x3c0ad027,0x3c0d00bc,0x3bb6beb8,0x3bdf6843,0x3be9005b,0x3c279ba4,0x3c1e672e,0x3c099c45,0x3bbae2a9,0x3b66f510,0x3b19612b,0x39180c42,0xba83e694,0x3ad6d81e,0x3b062aab,0x3b6db223, +0x3b162065,0x3aa370b5,0x3a9ca5ec,0xb916f6ec,0xbb3d9205,0xbb2747fe,0xbb2c851d,0x3a9f7115,0xbaeea265,0xb97e27ae,0x3b85c53c,0x3a80a497,0x3b56fa7f,0x3b867537,0x3bbd0f4e,0x3ba4bc25,0x3ba52bc8,0x3bcbb3a3,0x3be57cea,0x3bba6abf,0x3c07e017,0x3bff9ff8,0x3bb2d013,0x3bce3e9e,0x3c0ba660, +0x3c3ea397,0x3c3e8b3f,0x3c1fca7d,0x3bf0afd5,0x3b857b86,0x3b071185,0xba52f031,0xbb94ff3d,0x39ed64c5,0x3b20e3c4,0x3b49b6ab,0x3b43fa1d,0x3ac0b995,0x3b11133c,0x3a85594a,0xbae574ac,0xba7972c8,0xba6d7ed9,0x3ab3062a,0xba9a8f47,0xba939f73,0x3b9f41e5,0xb836f50b,0xbc08a5f4,0xbb872ba2, +0x3993689d,0x3849f881,0x3afe5da7,0x3a99be8d,0x3b285315,0x3c01c7a8,0x3c1fb3fa,0x3c4afa84,0x3c71b36f,0x3c32dbf9,0x3b877513,0xbb7acc90,0xbb73a131,0xbab30736,0x3b90c444,0x3bf2a5ab,0x3c291b42,0x3c230a37,0x3bce0c07,0x3ba88ee4,0x3b0f3e78,0xba6b6600,0xbaa1a5b4,0x3ac233c4,0x3aa2e9f6, +0x3aa516ea,0x384bbb7d,0xb9ce6950,0xbaaa815b,0xbaa355c1,0x3b2f2ee5,0x3b3ef462,0xbad43294,0xbb202b7e,0x3c0f5af3,0x3c403780,0x3bbeeb99,0x39c0144a,0xbb88c867,0x3bf30acd,0x3c201477,0x3bb13948,0x3b38244f,0xba381337,0xbb8e5cdf,0xb9f42e95,0x3b524e19,0x3c088934,0x3ba4672e,0x3b76feeb, +0x3be098de,0x3b57a893,0x3b7b1739,0x3adaa7d8,0xb82661ce,0x3acc14b4,0xba695246,0xb7f1a133,0xb9de9c01,0x3a343d41,0xbaaf0ea8,0xbae12d93,0xbaa2b76e,0x3a20ccb7,0x3a2114a3,0xbac4e7b2,0xbbc64150,0xbbd98fdf,0xbb6da606,0x3b7be517,0xbbb7fd53,0xbc7eae84,0xbb4d81b0,0x3b1000b0,0xb95cab85, +0x3bbbde4f,0x3bdca086,0x3abd3ba0,0x3c0ed0b6,0x3c08bfda,0x3a67ca17,0x3b87138e,0x3b919193,0x3bcf7b8f,0x3b7e9828,0x3b64a340,0x3b2591a4,0x3b1ecf24,0x3b5489bd,0x3b2c7383,0x3af640b7,0x3ac6bf35,0x39158b99,0x38063e78,0xba57bdcc,0xbaa6c13d,0xb9e672eb,0x39ae7644,0x396fdeeb,0xb9877bb7, +0xb9ee57cf,0xb753c9d6,0xba1f9949,0xbac5c5eb,0xbb94e8e3,0xbb8f6a2d,0xbbe81a4f,0xbc383bdb,0xb98914e8,0x3b8097fa,0x3c13252f,0x3bb0d98d,0x3b9a41aa,0x37590653,0x3be76b3c,0x3c094790,0x3b5bcfd8,0x3bbec5ac,0x3bae9710,0x3bb02b38,0x3bae80ad,0x3b85800d,0x3b1649a2,0x3ae426a0,0x3afd4b5a, +0xb96ee808,0xb9587412,0x38428831,0x3a85f341,0xba1d4109,0x3725ece6,0xbaaf3e29,0x3a3be31d,0x3a12d523,0xb91c042e,0xba49202e,0xbad413b9,0xba0df0a0,0x3ae3957d,0x3b269805,0xbaf9f77b,0xbb00aba5,0x3c42a055,0x3c8de0d3,0x3c4cc356,0x3c1399d9,0x3c2f5a63,0x3bf0f31e,0x3bb0726d,0x3b4ac683, +0xba30b0e9,0xbb4e4816,0xbad78654,0x3aaefc45,0x3b85688a,0x3b90e54b,0x3b905904,0x3b840982,0x3b89fc7b,0x3b0462c2,0x39eda8d7,0xbabcf88f,0xbae57338,0xba8abc31,0xba5f8004,0x39ac61e8,0x399a0b21,0x3a8ebb1d,0xb9ca9a94,0xb9c37245,0xb985933d,0x3a64a6d8,0x3a955828,0x3af05c7f,0x3aed930b, +0x3ad8cb71,0x3af70e09,0x3c01bba6,0xbc1e7db3,0xbbd64575,0x3ab1045e,0x3ac04844,0x3b8a56d7,0x3bcd1af5,0x3bfb84cf,0x3bee8c80,0x3c0e133e,0x3c2f5872,0x3c2edf85,0x3c17d962,0x3be7c43c,0x3bf0af6b,0x3b7b9917,0x3ac56103,0x38e7bace,0xbad0699f,0xbb15069f,0xbb0f1c4e,0xbb802fb8,0xbb697685, +0xbb6c3881,0xbb226556,0xbaab4070,0x3896b767,0xb9b6be53,0xb98e148a,0xb92e315e,0x39df50d8,0x3a80e30d,0x3aa97f56,0xb8ef685c,0xbaa4c892,0xba7d1873,0xbaf71b20,0x3aef1648,0x3c05561e,0x3c031f23,0x3bd6369b,0x3bea1bcd,0x3bee3b7e,0x3c0514e0,0x3c101e97,0x3bb12a6f,0x3b263378,0x3acea9b4, +0x3b1771f7,0x3b18c882,0x3ae5651f,0x3af758b1,0x3ae86482,0x3a66d653,0x3a0f3bac,0xb822ad02,0xbaeed993,0xbaa58445,0xba33c952,0xbaa6c7a8,0xbaa21473,0xbaa94adf,0xba65393c,0x3ab47d3f,0x3b0cddd6,0x3b3f6cd1,0x3b5e28f3,0x3b693a83,0x3b5fc993,0x3b59e697,0x3b896fe0,0x3b8bf2a6,0x3bba96cb, +0xba180991,0xb8c86a46,0x3b42277c,0x3b67ecd4,0x3b950839,0x3b8734c6,0x3b84f81d,0x3b9891b3,0x3b50090f,0x3b35e1a4,0x3b11dfd7,0x3ad8e4ee,0x3aa5e117,0x3a35049d,0x3a283681,0x3959019e,0xb9c678a8,0xb9b99417,0xba0ea81f,0xba565f61,0xbb040b61,0xbb1fe2ef,0xbb0c2111,0xbb2e98d6,0xbb11fee0, +0xbafbf672,0xbaabe486,0xb9a93a45,0x3a0b8c8b,0x3a9af4ba,0x3ab9c9b8,0x3ac947e4,0x3ab44843,0x3a85c8b6,0xb95100e4,0xb9c9f881,0xbb28bcb9,0xb9b224d9,0x37466528,0xb8f5f1e9,0x3a0e9449,0x3a7f7933,0x3abe5753,0x3ae0ec4d,0x3aac4407,0x3a8c30de,0x3a3549c9,0x39f29220,0xb7d1cd2b,0xb9a279bb, +0xba43d504,0xba8c6f7e,0xba9df0fc,0xbab666c9,0xba936a35,0xbad41cbb,0xbafac575,0xbb159de5,0xbb0f8b38,0xbb0f1e3c,0xbb15c5e4,0xbb1d6d2c,0xbb28a4f2,0xba74e269,0xbb288c69,0xba5d9719,0xbae107d6,0xb9df5ed5,0xba16ade6,0xbb2e70c4,0xbadf2aba,0xba833b90,0xbbabcf07,0xbb2685b9,0xbb075ce5, +0xba9aa242,0xb9cdb5a1,0xb936802a,0x3a04fc13,0x3aa0ee56,0x3a59b884,0x39ed3041,0x39092db8,0xb9523c06,0xb9fe9e2d,0xba581d77,0xba572cb7,0xba6def70,0xba99ac59,0xbaac23b8,0xbad18cce,0xbac1608c,0xbb0ac2c0,0xbaf9edfb,0xbb090280,0xbb06d5c6,0xbb159bbe,0xbb03eb23,0xbb29a84f,0xbb25363f, +0xbb5edabc,0xbb720c54,0xbb41ae2e,0xbbb739d1,0xbb8ab2ac,0xbb6b9679,0xbba4ded0,0xbb2e0700,0xba8133f0,0xb98cafc4,0xba1fc8f3,0xba00bc8d,0xb9c82dbd,0xb99249f2,0xb93363e9,0xb837c6fb,0xb918bd71,0xb912c143,0xb92a01e5,0xb95c7071,0xb97d967d,0xb9a4e441,0xb9cbbd0f,0xb9f6540a,0xba06fde8, +0xba0a24b0,0xba1e58fd,0xba0d6157,0xba8662d8,0xbb193896,0xbb7fe07f,0xba7699aa,0xbb1557dd,0xbb8a1ecd,0xbb979fa1,0xbb8af9f2,0xbb86ecb4,0xbb90d269,0xbb86ddf7,0xbb6b4d3f,0xbafcb5a0,0xba68bcff,0xbb7dc64e,0xbb2f7931,0xba5d18b9,0xbabe9390,0xba3e35bf,0xbb311d7e,0xba94a54c,0xba8d0e95, +0xba675713,0xbaa34ab5,0xbab648f6,0xbad15336,0xbab11952,0xbab59900,0xbad54019,0xbab350ae,0xbaa04569,0xba85aaf2,0xba98a4f6,0xbaa98ea5,0xbab866cf,0xbacee8d0,0xbabaef4c,0xbb064f23,0x3a209b01,0x3b1bfe2e,0x3b8f872a,0x382f96be,0x3b1a1345,0x3b8b04aa,0x3b8b7f5c,0x3b7fe297,0x3b55c3cc, +0x3b89bef1,0x3b86805b,0x3b820e2e,0x3b22b235,0xba1bed6b,0x3b851477,0x3b554d93,0x3bab4410,0xbab10cea,0xba9794b2,0xba095da8,0x35d12b91,0xbabbcff7,0xbb037aa8,0xbb33b776,0xbad6cd8f,0xbacc5372,0xbb0648b9,0xbac25848,0xba9a2f99,0xba185ff7,0xba4f45ba,0xba998fde,0xbae00a80,0xbb028d4d, +0xbb1cc67d,0xbb50b948,0x3ae0023b,0x3a0e3592,0x3b0f95ae,0x3b0a6a94,0xb824e698,0x3aa60117,0x39eaeef7,0x3aafa0ab,0xba048c2f,0xb9b8c36c,0xbb4ad91a,0x3a999404,0x3a102cc1,0x3a153a2d,0x3b2acd0e,0x3a4b0f1a,0x3b0cfbac,0xbb413a34,0xb9d942a1,0x399d22a8,0x3aba9f5d,0xba106a8e,0xbaa9ee88, +0xbb3bf08c,0xbab4f5ef,0xbabfd682,0xbb24edc7,0xbabd40b7,0xba3522b8,0x3a27580a,0xb8be3c4d,0xba2cd7ca,0xbafb3d88,0xbb0b536e,0xbb6cd6bb,0xbae4cc92,0x3afbf499,0x3a11f0f8,0x3ab8521c,0x3b0eda60,0x3ac80107,0x3785a965,0x39753588,0xbb5b3721,0xba9a84cf,0xbb571e3f,0xba8d0c26,0xb911f3ad, +0xbabc6eb3,0xba2009ea,0x3b5a4cee,0xbacc51cc,0x3b08d1ee,0xba0711d7,0xba5b664b,0x3afefe75,0x3b38d000,0x3789e6d3,0xbaff53d6,0xbb9b21e5,0xbac656fb,0xba957021,0xbb366498,0xba91b9d0,0xb9e210bd,0x3afdad06,0x3a6d9784,0x36e487d6,0xbaf725ad,0xbb452f4f,0xbb87c797,0xbb692fbb,0xba951a98, +0xbac221f3,0x3b32d494,0x3a9f31d0,0x3b2871ea,0xba306336,0x3ab5785b,0xba181a84,0xbb4f6a50,0xbb8e60fb,0xbb486cc6,0xb900da6d,0xba6c140b,0xb9e0a51e,0x3b4ec615,0xb9e548bd,0xba6c243d,0xb9516065,0xb9855554,0x3b3e985c,0x3b96c856,0x3ae87887,0x3a45cf88,0xbb4bc672,0xba8b3c83,0xbad33934, +0xbb688222,0xbae695cc,0x3912db5e,0x3b5b83d6,0x3b124f5f,0x39a60bc2,0xbb00e032,0xbb4ca7e9,0xbb99b25a,0xbb871a67,0x3aca133a,0xba05486d,0x3b4f45db,0x3b18241b,0x3ae06c1e,0x3ac0a0cb,0x3a6eeb4d,0x3952b71d,0xbb4601f8,0xbad91199,0xbb1204b8,0x3a76530b,0xbb28e838,0xbb297ae3,0x3b7286c5, +0x3a49cf86,0xbb8cd1ee,0xbba28ad2,0xbc247352,0xbc082b71,0xbbdf4984,0xbc06ccb1,0xbc0f94ec,0xbbb03222,0xbb505d21,0x3ad50d10,0x3b8dfe10,0x3b3473d1,0xbadaf95f,0xbbf7431e,0xbbf852cd,0xbbacaf92,0xbb574426,0x38de997b,0x3b0ef6f0,0x3b9cabe9,0x3bce2921,0x3ac225dd,0x3acc0c07,0xbb49ed21, +0xba91f337,0x3acb7ad5,0x3a2c0152,0x39bc4539,0xb9998088,0xba46f365,0xba7bdba6,0xb7873b8b,0x3b2781b7,0x3b4939ed,0x3b043efd,0xbb98ae2d,0x3c0ec64e,0x3ba76d0d,0xbb06e359,0xbb5b0c7a,0xbbaeef47,0x3b91e174,0x3c02e004,0x3ba7a858,0x3acea22e,0xbb54c67c,0xbbfca7e4,0xbac677a0,0x3b1d0170, +0x3be13da7,0x3acd65a3,0xbb121a0b,0xbb7b3cc5,0xbb437771,0xbb405e49,0x3af5adae,0x3b64fbbe,0x3ad0e6a7,0xba6c0690,0xba5547b1,0xbacaad2c,0xb7e01ee5,0xbada2d86,0xbadcaaf8,0xba93ccc7,0x391c6ab2,0xb9992638,0xbb25a210,0xbbbcc42b,0xbbef6a81,0xbb9a0a07,0x3ba07f39,0xbbf1a506,0xbc90387c, +0xbb7add11,0xba2a862d,0xbbfbc944,0xbb334a73,0xbb525e42,0xbc13cc1f,0xbb435538,0xba9fb869,0xbb8c81bd,0xbb9648d5,0xbba6d249,0xbb5b0f95,0xbba8b2ae,0xbb547a47,0xbad86cef,0xba577d23,0xba18003d,0x3962b890,0x3adc4429,0x3a9cec09,0x3a40f967,0xbaa55b75,0xbaa28227,0xbacaab6b,0xba06d57c, +0x38d81f78,0xb7c2530c,0xba0e2a9e,0xba1b9b1f,0x3932f06d,0xbb1e86b6,0xbb2bbd4e,0xbb7ab864,0xbb992f3d,0xbbd85865,0xbc3b64e5,0xbb2ee090,0xbaa26ea2,0xbbc07445,0xbc025fbd,0xbc2b9a37,0xbc4df822,0xbbb38881,0xbaa354bd,0xbad922a1,0xbb7c325c,0xbb94b57b,0xbba45932,0xbb54d7cb,0xbb0f8605, +0xba513a73,0xb9fbcd16,0xbae230d9,0xba615d58,0xb91d4e0c,0xb9ceea6c,0x393fd7d4,0xb9ad8788,0xba4c99d3,0xba9d5cf3,0x391fd6bf,0x39a34bc6,0x386b9031,0xbaa518ec,0xbacd97b9,0xb9c28dbd,0x3b03c3b8,0x3aab0965,0xba11c479,0xbb9ab942,0x3c613e7b,0x3c6b6b15,0x3b7ef06b,0xba956fd6,0xbbfc7fac, +0xbbc7cd10,0xbb96ebde,0xba8b1b80,0xbaf9b665,0xbb24948b,0xbb562cde,0x3a347c30,0x3b253e01,0x3b656695,0x3ab3f3f7,0xb992ebab,0xbabbb297,0xbb33fbc7,0xbb49fd17,0xbb0ee885,0xbaec9ba7,0xbad2735a,0xb96f7665,0xb830286e,0x37f5622b,0x3a2e71b0,0xba1f8fa8,0xba43c5cf,0xb995b8c5,0x3a1dc9e1, +0x3a89ccca,0x3ab0bb8a,0x3b04e1e7,0x3a5ae5f9,0x3b32b022,0x3c111a25,0xbb835e51,0xbb719b8f,0xbc307ca0,0xbc042e71,0xbbd8164e,0xbb8fc22a,0xbb89a7b0,0xbb6d519a,0xb81c0540,0x3b55c7f8,0x3b605402,0x3b8e6f15,0x3ae08984,0x3b2df155,0x3ad756b0,0x3a49a4dc,0xba1cc9bb,0xbab33da9,0xbb570652, +0xbb9c7e8e,0xbb405d0e,0xbb5d1f27,0xbb8d2565,0xbb0ada71,0xbaa2de24,0xb93a7941,0xb9d62f72,0xba39ffed,0xba406505,0xb8e894d2,0x386d4898,0x3aca1d4f,0xbaaee6c2,0x39b7c5d2,0x370e0e5a,0xbb867ce5,0x3c030d9a,0x3b7661d8,0x3ab013c3,0x3a4303e1,0xb796b79f,0x39bfe0fc,0x3aa54e95,0x3ac865a7, +0x3b0e28f2,0x3acf2544,0x3a8408d9,0x3a7d08b7,0x3a2eb6e4,0x387a9cb0,0xb996e637,0xba829e5f,0xbb10bef2,0xbb11d37b,0xbb002027,0xba4144a1,0xbaa5bf6e,0xbb03933d,0xbaa464f0,0xbaf3c70e,0xbad88548,0xb9ed43ea,0x39e772fd,0x3af0c650,0x3affc96b,0x3b3a9a07,0x3b1b84be,0x3b193f7f,0x3b4f2a1b, +0x3b31e6a2,0x3b65749b,0x3b8dd84b,0x3a9e2b51,0xb927a90c,0xbac0d90c,0x38b6242a,0x3a6590d4,0x38ba52b8,0xba33cd19,0xbabb2f82,0xba499cd1,0xb9126750,0x39f817bc,0xb98cc190,0xba256662,0xba8fc4ed,0xbaadaa89,0xbab79c87,0xbb100c0a,0xbb09ce09,0xbb18003d,0xbb0cfbc3,0xbab0a4a0,0xbacb50e0, +0xbb27cf20,0xbb0a14fe,0xbb14c3f1,0xbaf81081,0xba1dd456,0x39f8aa35,0x3a417ca1,0x3a9bfe47,0x3ad2a101,0x3b0b1aa6,0x3aabc016,0x3abade10,0x3afe9f81,0x3a73cebc,0xb998456e,0xbb18275d,0xbb110c4f,0xbb1f79a4,0xbb3bef50,0xbb3388ac,0xbb24bd65,0xbb2898c3,0xbb29e149,0xbb2a2b42,0xbb22d2b1, +0xbaf76e3a,0xbac4c9f7,0xba5dc75e,0xbad01a0d,0xbb041dd1,0xbb2873f9,0xbb23b0ee,0xbb5956d3,0xbb285dd6,0xbb250353,0xbb257e0b,0xbb43c9df,0xbb27203f,0xbb245e8f,0xbb292087,0xbb13190e,0xbb4c8f0b,0xba8c6076,0xbaee63c0,0xba284d4c,0xb9e8701f,0xba081e76,0xba03226a,0xbaa3a8b9,0xbab8a42c, +0xbb2a85d2,0xbb95dab3,0xbb8acc7a,0xbb82d5b2,0xbb5f83d8,0xbb834c1c,0xbb83a910,0xbb8c14d3,0xbb74d7ed,0xbb525590,0xbb3a3fd2,0xbb2d29c8,0xbb2270ba,0xbb096ad6,0xbb0bde7a,0xbb08e512,0xbb1509d4,0xbb17ce3a,0xbb136c01,0xbb3c2170,0xbadb0a1b,0xbb13d22e,0xbb01684f,0xbb1e10d9,0xbb0c5576, +0xbb064479,0xbb1338d8,0xbb21fb0f,0xbb228b56,0xbb640dd2,0xbb92a564,0xbb7ddf25,0xbb94b8e3,0xbb74090b,0xbb323fbd,0xbb9b52fc,0xbac3b7cf,0xbb3c781c,0xbb305b3d,0xbb381ce4,0xbb3a3100,0xbb3cf0e6,0xbb343181,0xbb38befb,0xbb340016,0xbb3663f9,0xbb317bca,0xbb276b09,0xbb1b2787,0xbb11f4d3, +0xbb1c3ea8,0xbb24aa10,0xbb2c28cc,0xbb32379f,0xbb339767,0xbb4c490c,0xbb0224ff,0xba36e9f8,0x398d81d5,0xbb013ffa,0xba24501c,0x3a0b237f,0x3a1cc96e,0x39b95de7,0x391b9089,0x3a0d7813,0x3a181d70,0x399080ab,0xba23064a,0xbaf0b960,0x3967b38c,0xb92ef162,0xbb72d7ef,0x3ada0ea3,0x396cd319, +0x3b37aab2,0x3ad2c833,0x3aca83b3,0x3ad09d5c,0x3abd38a5,0x3abf4e35,0x3ab9dc71,0x3ad23e18,0x3ad483d7,0x3abafa4c,0x3ad1d5f1,0x3ae7ed56,0x3b0298dd,0x3b00a651,0x3afd6f20,0x3ae5696e,0x3acd6f4c,0x3aa46ec1,0x3ad8d83e,0xba88d564,0xbb0d0c0f,0xbb0d99a8,0xb89a39e6,0xbb02031e,0xbb2f4acd, +0xbb348731,0xbb2f9d33,0xbb26c68d,0xbb5a4bf4,0xbb528913,0xbb2b7045,0xbb32bf14,0xb9474dc8,0xbaf7b6ab,0xbb34cba1,0xbb9bfa82,0x3a3eff34,0x3b159cd1,0x3b17b583,0x3b1be17a,0x3ad78c9e,0x3ac9683e,0x3acfa80c,0x3b1bf24c,0x3b31801d,0x3b0d69f1,0x3b1c5469,0x3b2b3040,0x3b4f92a5,0x3b524c14, +0x3b4de973,0x3b225a97,0x3ad79997,0x3ab2213b,0x3addad8d,0xbb14c68b,0xba024cc7,0x389bf5f1,0xba5b55e1,0x3a1ded08,0xba64300d,0xba0e6358,0xbaff84af,0xbafd4f7f,0xbb2fce8e,0x38ac4def,0xba36673f,0xbad118da,0xba824d17,0xb95c72a9,0xba4f5e25,0xbb1aef2d,0x3b3cd4ae,0x3b3ac2ab,0x3b2821a4, +0x3b4203cf,0x3afd3df6,0x3ac6ef2a,0x3ac00b99,0x3b32d7a7,0x3b3db7b1,0x3b0c6984,0x3b30baaa,0x3b65198e,0x3b94da7c,0x3ba30aff,0x3b8dfca4,0x3b656111,0x3ad3bc9e,0x3ad91566,0xba4ea30e,0xbb64adf2,0xba21bf99,0x3a6ff25a,0x383b3b8b,0x3a0576d1,0xba416c31,0xba0feb7f,0x397f5413,0xbb60c36a, +0xbafcdfb5,0xbb511ceb,0x3962c384,0xbaae05c5,0xbaa0f405,0x39e08d66,0x3a3ca114,0xbb904299,0xba540d79,0x3b8412bd,0x3b66522c,0x3b8ca4f3,0x3b08bda7,0x3ab11d3b,0x3a8fba36,0x3b77e193,0x3b943bae,0x3b4f9128,0x3b74b2af,0x3b845d24,0x3bbde2cc,0x3bd3385d,0x3bbcf989,0x3b7c607b,0x3ae2e1b9, +0x3a90e4a3,0xba6c4cfa,0xbae3c157,0x3aae2b82,0x3b08dc25,0x3b42964e,0x3abcbf1e,0x3a3f01ec,0xb98a2342,0xba874271,0xbb60eb5c,0xbb59bfdd,0xbb73cca6,0x39f12f39,0xbb442c72,0xba8fdb3e,0x3b352d29,0xb9cc905b,0x3a282b88,0x3af3234d,0x3ba67e5d,0x3b611828,0x3ba09db5,0x3b2b82f0,0x3b0e4d27, +0x3acacda1,0x3b66cfbe,0x3b71aec0,0x3b371566,0x3b526dfd,0x3baa7099,0x3bfa6cfc,0x3c0e4fc4,0x3beaa10a,0x3ba86cbf,0x3ae69378,0x3a3303a4,0xbaab32fa,0xbb9c9ead,0x3a44215b,0x3b27fd7c,0x3b399cc4,0x3b31a70b,0x3ab4c463,0x3ae690d2,0x38e91744,0xbb3429c9,0xbb288efa,0xbb0e7ea8,0x3a03f94f, +0xbb129ed5,0xbb0160d0,0x3b88c3aa,0xbaeea0ba,0xbc2511e2,0xbbd554aa,0xba2d5f3e,0xbaa44616,0xb9259362,0xbaeff13f,0xbb04e9fb,0x3a208642,0x3baf75be,0x3c272a9b,0x3c4e3941,0x3c553fb6,0x3bf42305,0xbb10e539,0xbb609289,0xbb22dcbd,0x3b3d53be,0x3b9b22b5,0x3bdad89a,0x3bd1a85c,0x3b7ffddc, +0x3b6480e9,0xb91db565,0xbb153ab9,0xbb18dbc7,0x3b124990,0xb8928d41,0xb992f1a1,0xb99d3b5b,0xba186ec9,0xb9a9b6c8,0x3a4ae7ef,0x3b4fde8c,0x3ae3697c,0xbb223ab0,0xbbb28d71,0x3c0ff80d,0x3c1ad1d3,0x3b811d6f,0xbb0067e3,0xbbc7fa91,0x3b51b61f,0x3bc11761,0x3b727e9d,0x3b0c2739,0xbaddcb6b, +0xbbe0490b,0xbb3df55a,0x3a4c0b79,0x3bd16561,0x3b938687,0x3b314a68,0x3b525010,0x398258a8,0x3adcb292,0x3ad3fdfa,0x39fad124,0x3ab7d8b3,0xba530a34,0xb820f9a4,0xba36b5b0,0x393c15bb,0xbab71d0b,0xbab3d5c2,0xba878fb0,0x37f258ce,0xb999a841,0xbb413d6e,0xbbdaab95,0xbbd0fa39,0xbb5b8a03, +0x3bb2128d,0xbc183a18,0xbc75785e,0xba83d7c5,0x3acb4e6c,0xbb8d735d,0x38ae8b8e,0x3a803991,0xbb3e7794,0x3b54a28a,0x3ba2e2a1,0x3ab0c67e,0x3ad973cc,0x3a402757,0x3b264412,0x3a448319,0x3a7e23d4,0x39f7dc2e,0x3a59d306,0x3b24b40d,0x3b172c7f,0x3ab66114,0x3abd465c,0xba5d50aa,0xb9eae3d6, +0xba9ad73f,0xbabf6bc7,0xba1f5762,0x3a24c425,0x391b0702,0xb9831638,0xba078a34,0x39f52bcb,0xbb3e236d,0xbb6bcc38,0xbb234ede,0xbc01b5c5,0xbc18d4cd,0xbc3fc48e,0xba75068e,0x3ad30624,0x39b2f0ad,0xba5320b5,0xbaed7b5c,0xbb8e7fec,0x3a306489,0x3b5a9235,0x3b0788eb,0x3b05f9d9,0x3a33068c, +0x3a085d74,0x3aad9ec5,0x3a98e080,0x3a9693d5,0x3a62b5ff,0x3af4a85b,0x38db562c,0xba193037,0x393978cc,0x3a28c84d,0xba8e8324,0xb9891a77,0xbab0e991,0x3a060b2d,0x39693c17,0xb9d33722,0xba36046c,0xbab0dfaf,0x3a1671bc,0x3a859742,0x3aa53021,0xb95b6dab,0xbb934b55,0x3c54c22a,0x3c50348a, +0x3b90d77b,0x39de591d,0x3a7cb101,0xbacae7da,0xbad64efb,0x3af08f04,0xbb00c849,0xbb833f67,0xbb943365,0xbab1e5ac,0x3aed4747,0x3b2b1928,0x3b242b68,0x3b03594a,0x3b3c97bf,0x3a44847a,0xb703dfcb,0xbabe14d6,0xbaab1a2b,0xb9ebba60,0xb9509233,0x39e406bd,0x39662cda,0x3a346dca,0xb9cdbbd8, +0xb9f33b75,0xb984a806,0x39cb5dd8,0x3a3cb662,0x3ae80db6,0x3b2764f5,0x3aecab0f,0x3ae0b52e,0x3c163d7b,0xbc3c0b61,0xbbf1d4a3,0xbb1d7c48,0xbb4fb2b9,0xba83f743,0xb9c04d21,0x3a4c7f6e,0x3ac90b94,0x3b60864c,0x3bb9e0b7,0x3bb0293a,0x3ba5d7cd,0x3b65f9cf,0x3b6bd94c,0x3b0e4e8a,0x3a3c6e15, +0xb9bd5df6,0xbb1c0fb6,0xbb4c9173,0xbb4c997e,0xbbaa73ca,0xbb9224da,0xbb6c9287,0xbb05a7e1,0xba831b64,0xba1effeb,0xba7ab005,0xba4fb88e,0xba9287dc,0xba520160,0x38a14877,0x3a24b4d3,0xba6c50d2,0xbac6ada6,0xbb0ca8cd,0xbb3f5368,0x3aaffae7,0x3b58cb91,0x3b2aa6b4,0x3b0527c2,0x3b659653, +0x3b9bb331,0x3bcf9ee7,0x3bec1cb9,0x3bb06fe2,0x3b5f4926,0x3b17fd3e,0x3b2f5006,0x3b087c4f,0x3a823824,0x3a2fe23d,0x39c1012a,0xb8fa18aa,0xb91de99c,0xb997acf7,0xbab0316b,0xba99cfb7,0xba45f968,0xbb1906ce,0xbaaf416e,0xba9293e2,0xba020cca,0x3b025c9a,0x3b0ff104,0x3b166dac,0x3b1418ee, +0x3b05efe2,0x3aeb16d1,0x3ad5160c,0x3b10be54,0x3aebd373,0x3b3feb66,0xba9f220b,0xb996cd41,0x3b10160f,0x3b1f32ab,0x3b5cba83,0x3b33be4e,0x3b3a915d,0x3b58ef93,0x3b343cbf,0x3b3662e5,0x3b2e56e6,0x3af227d8,0x3aa39fb4,0x39f6a449,0x390023ed,0xb9b09cd3,0xba7801f7,0xba547c46,0xba4bdc4a, +0xba8ad313,0xbb207b72,0xbb257e6e,0xbb1da5e6,0xbb2dcfc7,0xbaf0c171,0xbaa8a4d1,0xba72a491,0x39b328ff,0x3aa07779,0x3ad5109d,0x3afcec91,0x3b060535,0x3ad6310f,0x3aa43b03,0x39079123,0xb9c5e365,0xbb009613,0xb9c51377,0x38517a60,0xba3c6e44,0xba14a3b7,0xb9d30de7,0xb9324af9,0xb978a89b, +0xba059364,0xba0d9e2e,0xba210a20,0xb9c99778,0xba03499f,0xba03388d,0xba6bb7b8,0xbaa63be7,0xbac3299f,0xbae3d94e,0xbaafb69c,0xbb0e4579,0xbb29f24e,0xbb1f9559,0xbb21ac4f,0xbb129e17,0xbb1d62e7,0xbb2da334,0xbb0b9725,0xba43133d,0xbb179672,0xb727f813,0xba448079,0x3a66cd03,0x39a91a3e, +0xba9afebd,0xba4e8231,0xb9432a69,0xbbadce92,0xbb4279c3,0xbb3d8f0c,0xbb136fe9,0xbad55e11,0xbae6efb7,0xbab4f124,0xba8d358c,0xba626d81,0xba52bbc9,0xba568318,0xba71b06d,0xba892ba6,0xba9c2590,0xba9d5d94,0xba9cf898,0xbaaa7671,0xbab841e3,0xbabd3eff,0xbad64ba3,0xbb30d95f,0xbb2a084f, +0xbb41c34a,0xbb40b041,0xbb457825,0xbb359d64,0xbb5ed859,0xbb6f2397,0xbb819cfd,0xbb908074,0xbb5657de,0xbbbeedce,0xbb9fe9a4,0xbb8a2104,0xbbab4fbe,0xbb7be603,0xbb054674,0xba431135,0xba8de4d6,0xba8cd92a,0xba8ba5b0,0xba881960,0xba81c234,0xba879737,0xba8ae735,0xba8956c1,0xba81448f, +0xba719afa,0xba56356f,0xba4359f7,0xba568cf5,0xba702d4e,0xba82e018,0xba894b15,0xba92bc56,0xba72e707,0xbb0db78b,0xbb5269e5,0xbb57692e,0xbb0e6965,0xbb55610d,0xbb6243ae,0xbb73afec,0xbb5cc2eb,0xbb55c612,0xbb69d360,0xbb5f4645,0xbb3b9108,0xbb1b0dcb,0xbad55500,0xbb416876,0xbb46f60d, +0xbaf436f8,0x3a944c50,0x3b04122a,0xb9e544a4,0x3a0f8fbb,0x3a2f7a0c,0x3a57c2e9,0x3a47cdc4,0x3a3bc5ed,0x3a04849a,0x3a2e82bb,0x3a232d74,0x39bf092c,0x3a08c0bc,0x3a28eb1d,0x3a553d68,0x3a4d8924,0x3a4d312a,0x3a3a4894,0x3a028c1a,0x39e23801,0x3736e5e6,0x3b1a5ba7,0x3b3ba32e,0x3acbed5d, +0x3b112b41,0x3b4583f0,0x3ac85570,0x3ad43868,0x3ab6e0d8,0x3a9fabc4,0x3aedf929,0x3af6b862,0x3b10c0c4,0x3b3f2c9c,0x3ae94e99,0x3aefc8b4,0x3b54c31b,0x3b561c2f,0x3a81a58d,0x3a6543a2,0x3ad7a37d,0x3b06bb38,0x3aef8255,0x3ad69a3d,0x3a53c97e,0x3abcfc29,0x3ac63ddd,0x3a896b94,0x3aae8adb, +0x3acdbe78,0x3b0d774c,0x3b0cfd8d,0x3b01c5a5,0x3ab9e835,0x3a4fe89b,0x3914fb7c,0xba135141,0x3b04f55c,0x3ad0aeee,0x3b09984e,0x3b469ea7,0x3aed7299,0x3a839e58,0x3aa8901a,0x3acd020f,0x39af631e,0x3938dc68,0xbadbb8fd,0x3aae9936,0x3a7bd042,0x3aad92c6,0x3b3e2f03,0x3aaaac2b,0x3b606fd3, +0x392d56c5,0x3a8b9ceb,0x3b178b93,0x3b49ea66,0x3b4c2237,0x3b468a49,0x3aa423c1,0x3b1c28a1,0x3b0503f5,0x3a917004,0x3acdc2a9,0x3b15598f,0x3b55af15,0x3b5fc481,0x3b5250ed,0x3b1edb26,0x3aacd1c5,0xb9b39bd4,0x39a55611,0x3b260553,0x3acc989d,0x3b3e8d78,0x3b3d98d8,0x3aef108a,0x3a7cdedb, +0x39721364,0xbac9f878,0x39233421,0xbb190160,0xba23dba9,0x39f4966e,0xb9e5138a,0x39ae77bd,0x3b68c81c,0x3a628372,0x3b02bac7,0x3a1d850d,0x3a9da483,0x3b752405,0x3b967548,0x3b98915c,0x3b89e01f,0x3aac98e6,0x3b59ef38,0x3b5ca2a8,0x3b0ab493,0x3b3f4faf,0x3b5a7ce0,0x3bb38f01,0x3bb8aad8, +0x3ba36add,0x3b54820a,0x3a908633,0xba4356ae,0xba98eb18,0x39ad1059,0x38e44a1d,0x3b4b957a,0x3ae6689d,0x3b2e9400,0xb9f4920e,0x3a8a9353,0xbab8c87f,0xbb4fccbc,0xbb9f2de8,0xbb65cf08,0xb8cf5779,0xba8f52c4,0xba141531,0x3b6a1021,0x3890277a,0x3ad8c3e9,0x3af62db3,0x3a50984f,0x3b8a2460, +0x3baa1ccc,0x3bd4cdc8,0x3bd2e5e1,0x3b313211,0x3b8cdf38,0x3b4f02b8,0x3a9f1294,0x3af739e3,0x3b6ac6da,0x3bc62e73,0x3bea69a8,0x3bca482f,0x3b98455e,0x3b0096e3,0xba115996,0xbada70f1,0x3b04b31f,0x3a3a7d68,0x3b8658ed,0x3b37d138,0x3ae835b1,0x3aa266f2,0x3925d2b5,0xba26cabc,0xbb5d0374, +0xbb4980a1,0xbb5afd89,0xb82b95a0,0xbb3e1984,0xbb19ea9b,0x3b7cc252,0x3aafd737,0xbb5a7954,0xba03f2f6,0xbb756f35,0xbb08785b,0xbb059b52,0xbb355536,0xbb301ac8,0xba4e87e3,0x3a7e8e02,0x3ba12aac,0x3bdf4f51,0x3bf8daac,0x3b3d5bc5,0xbbd20114,0xbbc96310,0xbb9e9c87,0xbb879ba0,0x38ac7024, +0x3b4015df,0x3bb5b917,0x3bb4eaf3,0x3a666096,0xb80b1731,0xbb73ca98,0xbacae5ce,0x3b159f84,0xb973cb11,0xba871d2f,0xba4bc215,0xba16b3e4,0x3a0d4cf8,0x3b377fb9,0x3b745de6,0x3b6ea486,0x3a95b60c,0xbb1fcd49,0x3c3bb452,0x3bb70b3e,0xbb3b137d,0xbb6d1e39,0xbbdb6379,0x3b83afe0,0x3be7c917, +0x3b9bfdcb,0x3b6db426,0xbaa4f130,0xbc060942,0xbb3686bb,0x3a75095c,0x3bcd652b,0x3b9ea984,0x3b37a8b3,0x3b4a9b38,0x3ad044b2,0x39df633d,0x3b7426b8,0x3b4d031d,0x3b1c8ca5,0xb6503be6,0x39888910,0xba8a4e01,0xba0a1528,0xbac8ac9c,0xba859a8e,0xba534e04,0xb7b455ac,0xba85855f,0xbb643510, +0xbbc8726d,0xbbc52f08,0xbb185dc5,0x3c07f03e,0xbc118d37,0xbc7121be,0xbae554cd,0x3ae7c195,0xbb315c1e,0x3b83c600,0x3b916f4f,0xb953c5a0,0xba94b289,0xba990c3e,0xba377535,0xbb12791f,0xbb040208,0x39e2b302,0xbac1fb3b,0xb996fe40,0xba0921cd,0x39ccf5b5,0x3a2a4a64,0x3b1fe813,0x3b39db01, +0x3ad58601,0x3a28bd5f,0xba261723,0xba37c78c,0xbaf2b824,0xb98f5b9b,0x391d40cd,0x38856255,0xb9420034,0xb99b3381,0x3a0d9c42,0xbb803426,0xbb83af44,0xb9e65aa7,0xbbf9e467,0xbc0d962f,0xbc3811b9,0xb98d830f,0x3b7e87b0,0x3bb30188,0x3b4eabcd,0x3a11b89e,0xbb8e095a,0xbb3dc77d,0xb7d32a18, +0x3b54229d,0x3a5642f0,0x389356d6,0xba388241,0xb7bef561,0xb984797d,0x385e9f0e,0x39f4a92a,0xb99aea35,0x3a123953,0x3aba0f6a,0x39b5b9c5,0x39f25d32,0xb92be2bd,0xba1e7f19,0xba8be37c,0x3943206c,0x3934e028,0x390347da,0xba74260b,0xba7f54f6,0x3a848bb2,0x3ab03a0f,0x399ec1d4,0x3b030db2, +0xbbcac45e,0x3c5d7b6e,0x3c2f7cde,0x3bb4b1c7,0x3b8ad91a,0x3b8b5ddf,0x3afba5b5,0x3a4a2c1c,0x3a46dfdc,0x3aaf0a38,0x38a5f0fd,0xbad9736a,0x3ab198e7,0x3b577059,0x3b5e24cf,0x3b530cec,0x3b2409ae,0x3b2a1850,0x397969aa,0xba8715c9,0xba5e2e0a,0xba5098f2,0xb984fa4b,0x3a7ba5f6,0x3a5b63a1, +0x39a64198,0x3a02167d,0xb9e8fd1b,0xba15e3f8,0xb92d3608,0x39a754c2,0x3a68d10b,0x3aea698b,0x3b3b2de8,0x3b16c3bf,0x3b37d47e,0x3c2ad7fb,0xbb5bc959,0x3a3a4803,0x3a5800f0,0x3b10901f,0x3aa6d0a6,0x3b1fb185,0x3b10dae8,0x3aed79a2,0x3b52f339,0x3bcdb55e,0x3c0588a1,0x3bf52f14,0x3b98217d, +0x3b9de171,0x3b2dec27,0x3a655fc8,0xba99f833,0xbb0e377a,0xbb5bc25b,0xbb6aace3,0xbb20b656,0xbb39b8be,0xbb852d1a,0xbacdf779,0xba5a23e4,0xb9bf3d59,0xb9fe7ea6,0xba5f3f1d,0xba7439b6,0xba1c2e9e,0x398d4ef2,0x3ae8a0cc,0xba51a1e0,0xb9a69b43,0xb89b6e71,0xbb74d74d,0x3b99a7b5,0x3b97e277, +0x3b1d3f9e,0x3b19e063,0x3b2c4eef,0x3b63c6e6,0x3b91cf2e,0x3bbcdbfe,0x3b9c8b25,0x3b557e53,0x3b111397,0x3b3de359,0x3b4efcc3,0x3b1b6c62,0x3af27982,0x3a6d69b8,0xba2ae19e,0xba84216a,0xbaa50549,0xba783ddc,0xbaa76454,0xbad3252d,0xba422197,0xba9053f4,0xba4942dc,0x39cd2c95,0x3a8e130e, +0x3b07fddb,0x3ae0ae28,0x3b0f2515,0x3adad02e,0x3ab6cec0,0x3b12736b,0x3b079610,0x3b30d775,0x3b8f6cce,0x3b0f47eb,0x3ada5e5d,0x3ab7d93b,0x3b08635a,0x3b117908,0x3b0a6459,0x3b129ee1,0x3b2f4778,0x3b1a6f22,0x3b29d13d,0x3b409102,0x3b04a79b,0x3aa308f6,0x39d32112,0x382a38b5,0xba26114a, +0xbad86ba0,0xbab158d2,0xbac9539c,0xbaaaf47b,0xba62feec,0xbab8f9db,0xbb024e94,0xbad8d6c5,0xbad5bca8,0xba95b841,0x392ae0e8,0x3a8cbb2b,0x3abc0ac9,0x3b01b0bc,0x3b1d30e9,0x3b4c064e,0x3b13cc23,0x3b1e9122,0x3b3f5543,0x3adc0f49,0x3aa1c2c3,0x39247c5a,0xb96bcc6c,0xb996dc7a,0xba158216, +0xba00baab,0xba082290,0xba1536d3,0xba0552d5,0xb9edb1fa,0xb9e752c0,0xba5a4c20,0xba97261a,0xba91d8ee,0xbaddfcce,0xbb02cc48,0xbb1b9b63,0xbb0bf283,0xbb294c95,0xbae57f68,0xbad0efe5,0xbb0528b3,0xbb0e73d0,0xbaf3dd55,0xbae16679,0xbacfd63e,0xbac61e78,0xba9278a9,0x39e5cd69,0x38c12b28, +0x3a8ef0cd,0x3ab6c30c,0x3afa555e,0x3abaa91c,0x3ac25bda,0x3a983c9f,0xbb6465bb,0xbb614b13,0xbb40e116,0xbb38236e,0xbb1f2d33,0xbb2efa8d,0xbb223d02,0xbb232317,0xbb2ef9ff,0xbb2f562a,0xbb2e6cc1,0xbb218566,0xbb12a5df,0xbb040588,0xbafcbfba,0xbaf8ab97,0xbb0dd10a,0xbb11d504,0xbb1eec91, +0xbb2f1e8d,0xbadb456b,0xbaf66c4b,0xbacecc2b,0xbaef6bdc,0xbae643ab,0xbad90aeb,0xbae53182,0xbae2ee17,0xbb123700,0xbb316167,0xbb610387,0xbb62d7e0,0xbb5e8356,0xbb6a4ce9,0xbb687e8b,0xbb5b63a7,0xb8c0b4f9,0xbac732bb,0xbad669a4,0xbad94f86,0xbadbb877,0xbae28d4b,0xbae53e5e,0xbaeccdd1, +0xbade8b72,0xbadb0122,0xbad90ae1,0xbadae683,0xbadd5c61,0xbade4c87,0xbaec5742,0xbaf6d8a5,0xbafce51a,0xbafd05fb,0xbafbc593,0xbb1191dc,0xba71f8cd,0xb9c3934a,0xba80e2bc,0xba51069e,0xb95977cf,0xba6acf20,0xba715bb1,0xba697709,0xba640031,0xba12d904,0xb9c22298,0xb995b8e9,0x39823c30, +0xb9b113a4,0xba0ceb8d,0x397c0351,0xbb1993fb,0xba3489ef,0xbae8ddab,0x388f9b79,0xb933a81a,0xb965ac9f,0xb8117d56,0xb9e3301c,0xba0c8183,0xba1bb00f,0xb9db5005,0xb9d162ad,0xb9f27e12,0xb9b2b077,0xb9525d5d,0xb87e3793,0x36d1a579,0xb83edbd4,0xb9300d38,0xb9cc7c65,0xb9f7e021,0xb9f33a49, +0xbadc97ec,0xbaa7a5a9,0x3ac632bc,0xbac7279b,0xbaba7ad8,0x3a698404,0x3a46ed53,0x3a329fcf,0x39d90f9c,0x39304cb2,0x38a6d0e4,0x390f41ac,0xbae87b48,0xbaf5057a,0x3a90888e,0xbaa87c4d,0xba92d5a5,0xbaa12e1b,0x395b2ae3,0x39ab1aa4,0x3a6362a1,0xba357443,0xbaa39fad,0xbab6f5b2,0xba5fb48b, +0xba14223c,0xb9fe27f7,0xb9a1f382,0xb94a822b,0x3775f9f2,0x39befe08,0x39b5d6f5,0xb76294fd,0xba31e1f5,0xba649278,0xba6f324f,0xba97f5b9,0xba2579f1,0x3a31b49b,0xba5e1a07,0xba803dd3,0xb9a8034f,0xbaa2a758,0xbad7f08f,0xbb04ccd4,0xbb291fd4,0xbadf738a,0xba237760,0xbab87c36,0xbaa2dcf7, +0xb85e9882,0xba67c203,0xbb0ee80b,0xba059672,0x3a609b7c,0x3a33d504,0x3af78a54,0xba19d445,0xbacbe8dc,0xbafc49ae,0xba89a82d,0xba4705ff,0xba52de39,0xb9cdf35d,0x398fb964,0x3a688f0d,0x3ad3256d,0x3a9d19cf,0x3a032e96,0xba61c50a,0xba9200b1,0xbaf29734,0xbaf6131e,0xb9e76af4,0x36c3ae4a, +0xb7bf395d,0x3985a6a1,0xbad926c1,0xba81e8ba,0xbb142791,0xbb676a08,0xbb4ea7b9,0xbb5e816b,0xba7631e3,0xbb105074,0xbaf15d47,0x39bac446,0xbac74bfb,0xbb52fa19,0xbaa47a13,0x3acbcbff,0x3b0a19e9,0x3b756498,0xb9802b67,0xbb1d19a0,0xbb435989,0xbaf07fca,0xba4751cb,0xb97508d0,0xb8dec46b, +0x399cb85b,0x3a44d3d7,0x3b05f4d3,0x3af31ab3,0x3a42e978,0xba868b04,0xbac19319,0xbb17adea,0xbada8a83,0x397ca125,0x3b016b34,0x3ad0d26a,0x3a89077b,0xb9f2150a,0xba88ccfe,0xbaf3bf4d,0xbb5dd954,0xbb915942,0xbb8f24da,0xba247610,0xbb4406f1,0xbabccc5f,0x3abf6d22,0xbaa80486,0xbac10024, +0xb9cf94ef,0x3b22325c,0x3b0af1d0,0x3b993a17,0x38b0e584,0xbac6e880,0xbb3b6a38,0xbadf7c72,0xbaa6416f,0xba74947b,0xba1af8bb,0x3a84e01b,0x3b2851b0,0x3b866426,0x3b477649,0x3abf6792,0xbaa59117,0xbaed84ed,0xbb11c9b9,0xbafda242,0x3a402c06,0x3b290ce4,0x3b16ab96,0x3af71142,0x3a8c9d97, +0x3a10d27a,0xba845219,0xbb4f5cc7,0xbb7a789a,0xbb63e2a4,0xb9a9c2c7,0xbb52903b,0xbb30e4ae,0x3b35bf30,0xbafdf868,0xbbfda2d5,0xbbd380d2,0xbb54e03b,0xbb689bde,0xbb84745e,0xbbbe9b1f,0xbbf0c39b,0xbbece7db,0xbabfb2d4,0x3b939654,0x3bdcd5ab,0x3c26b668,0x3bd0efc2,0xbb4fe689,0xbb97fa5f, +0xbb94e5d8,0xbaed659c,0xb9b6df5c,0x3a10f8d7,0x3a879441,0x3a9a07fa,0x38857d0b,0xbb0aeabb,0xbb81956b,0xbb36245f,0x3b29b106,0xba525c93,0xbaad2fab,0xba640f38,0xba805ba9,0x3a064450,0x3b47a228,0x3b7807df,0x3ae2b82d,0xba8bb580,0xbbc94ee8,0x3c0a698f,0x3b9f7336,0x3990e8b4,0xbb805276, +0xbbeb4faa,0xba3f0da8,0x3b1e7dc5,0x3b1cb73a,0x3ae203f9,0xbb20c164,0xbc10e8e6,0xbb96408d,0xba987be0,0x3b6db01d,0x3b5fdc18,0x3a958b26,0xbab16003,0xbb1fd11b,0xba9bfdf6,0x3af69a86,0x3af6f66d,0x3ab01756,0xb9ceafc2,0x385be117,0xba6c5baf,0xba1e2b10,0xbac35353,0xba829c42,0xba614e25, +0xb926a51c,0xba820490,0xbb879407,0xbbe42eb9,0xbbcdcab9,0xbb4103b7,0x3bd309ee,0xbc3ac871,0xbc64bdc2,0xbad4a90e,0xba64096a,0xbbe4175b,0xbb9a5fb0,0xbb9e4a46,0xbbf88367,0xbb8476c8,0xba30cadd,0x3a2e1fbc,0xbb1961f2,0xbb876dd7,0xbb3a1fc7,0xbb65b80a,0xbb10b47a,0xbb097d5d,0xba7fe58d, +0x3a21c742,0x3a9a21ec,0x3a80421f,0x3a87d88d,0xba9350a0,0xba8db038,0xbab67070,0xbad21376,0xba29de5b,0x3a02f06b,0x37cc236d,0xb925baa6,0xba11ec4d,0x391c2b3e,0xbba7e0ee,0xbba6f44d,0xb95b45c6,0xbc1b288d,0xbc22afec,0xbc41c73e,0xbb3cefc6,0xbac5ae72,0xbbb99d41,0xbbd32965,0xbc0efd17, +0xbc2151f1,0xbbe72b11,0xbb37ba21,0x3a91f9cc,0xbb17f05a,0xbb905473,0xbba3ab57,0xbb608add,0xbb1fb5c1,0xba3e17bf,0xb9af9e4b,0x39de07c9,0xb805f962,0xb9e44b5c,0x38c0b5c2,0x383f84b6,0xba9984f9,0xba4d3a1d,0xba9b74c3,0x385de408,0xb8a88415,0xb99e62bc,0xba2d1ff8,0xba894d12,0x3a8e19ba, +0x39835993,0xb8e5a04d,0x3b165464,0xbbce4da4,0x3c4aca76,0x3bc5a450,0xbb2c36db,0xbbc8cee0,0xbbed9b0d,0xbc0b3176,0xbbe26ddb,0x364ebfd9,0xbb06f85d,0xbb46ed52,0xbbb066c6,0xbb1a6d47,0x39c1172b,0x3a9b2eea,0x3a375fab,0x38dce5b6,0x3a28b9ee,0xba8e26ed,0xba926cdb,0xbab3b081,0xba5489ee, +0xb82ce9a5,0x3a163f80,0x3a07f3b4,0x3917c765,0xb804f765,0xb9c34973,0xba01d19a,0xb9498936,0x389f8e3c,0x3a14bfe6,0x3b019220,0x3b32fe30,0x3acfb549,0x3b42a286,0x3c1ef76c,0xbc0f2049,0xbba49400,0xbbd50111,0xbbdf110d,0xbbcd4109,0xbbc8e01e,0xbbb7ccfc,0xbb875b8b,0xbaf5ac6a,0x3a3c8e4f, +0x3a898ad0,0x3ad9d095,0x39b8b453,0x39e96a49,0x3a31daef,0x37ee7712,0xba90c9db,0xbb2cb643,0xbb6e019c,0xbb853560,0xbba38ccd,0xbb93b96d,0xbb63ec4b,0xbac7bba6,0xba35d45c,0xba6e4deb,0xba957fb7,0xba93ff21,0xbad2f602,0xbab564a7,0xba0fb701,0x39aa32bf,0xba9fb666,0xba54acec,0xbb2086ea, +0xbb824620,0x3b10becc,0xbab08996,0xbb378fc3,0xbb19c15f,0xba5076ae,0x3aaafe3b,0x3b4f6225,0x3b817647,0x3b920b5d,0x3b8138ab,0x3b4d538c,0x3b49411b,0x3b0dba0f,0x3a5a9a63,0x387a3ea2,0xba2fe0cf,0xbaa36a3b,0xba968a46,0xba89a20a,0xba7f846f,0xbab70bec,0xbab9c9f3,0xbb2c6a3c,0xbab2e501, +0xba67550e,0x370d077e,0x3ae1ca81,0x3ae8c55f,0x3a97aa29,0x3a90d3aa,0x3a2b5ba9,0x39cb57ed,0x3a176262,0x39fa1083,0x38ea20f7,0x3a290283,0xb9cb2a0f,0x391be18c,0x3a208727,0x3a6ce92a,0x3ade7eaf,0x3a9df0d7,0x3aacc05d,0x3aa900bf,0x3aebc70d,0x3b182642,0x3b333317,0x3adecc55,0x3a6a7066, +0x3787d894,0xba00dd53,0xba7adc86,0xbad35d9b,0xbac18251,0xbabc6584,0xbad6cdf0,0xbb15465b,0xbb0c6e67,0xbb21b0b1,0xbb096ce9,0xbaa965db,0xba1a6ee8,0xb8e4d5db,0x3a98b815,0x3af002b0,0x3aff2f0f,0x3b13425b,0x3b234751,0x3aed7a33,0x3ada6fc4,0x3aa91e22,0x39c9a14b,0xb842ccac,0xb983b1e7, +0x38fe5fd9,0xba505f1e,0xba9f6d81,0xbac8b68f,0xbadcd511,0xbb047fce,0xbb06a985,0xbaff001c,0xbae83aff,0xbaaa5f28,0xba9672ff,0xba690592,0xbaa78e4a,0xbad49669,0xbaf692ae,0xbb090562,0xbb037bbf,0xbb23f9ec,0xbb3667f3,0xbb1a3cea,0xbb2a9ca8,0xbb0a0fc2,0xbb0e908d,0xbb1b86d3,0xbab50aaf, +0xba71b009,0xba757c6b,0x39e68360,0x3a19f652,0x3ae33cdf,0x3a9a1bf3,0x3a647877,0x39f8e5b4,0x3a3d3a24,0xbb78fd18,0xbb5a99e1,0xbb67310f,0xbb5e422e,0xbb489900,0xbb5daf24,0xbb5b1db9,0xbb697638,0xbb3f3b54,0xbb206ced,0xbb0bcab9,0xbafe1bcd,0xbae9349b,0xbad124ee,0xbad39a47,0xbad074c7, +0xbad8f77f,0xbadedf09,0xbacb3e26,0xbb090d05,0xbb307c75,0xbb3cfa6c,0xbb4f6f5d,0xbb5c0c5d,0xbb562f45,0xbb52266e,0xbb6961c9,0xbb8098e7,0xbb6b1d01,0xbb8636d7,0xbb5e6ac7,0xbb8e821b,0xbb8de64a,0xbb7c3f02,0xbb7aebf9,0xbb8e6b4b,0xbb1bf4c8,0xbada5536,0xbae9bed8,0xbaf54546,0xbb0168bc, +0xbb07719b,0xbb09c6de,0xbb151e39,0xbb10ff0e,0xbb118395,0xbb0b596f,0xbb02dd98,0xbaef4f47,0xbada403c,0xbae3f20f,0xbaede150,0xbaf95e72,0xbb010e05,0xbb033e30,0xbaf86d7a,0xbb368191,0xbb386665,0xbacb044c,0xbb3cac18,0xbb3e33e9,0xbabf4573,0xbabc7a82,0xbaabd368,0xbaaaea14,0xbaae9e49, +0xbaae3509,0xba8de469,0xbaf86e10,0xbb06714b,0xba85b40e,0xbb066ad5,0xbb5495c0,0x3b42d870,0x3b4c90e9,0x3b138735,0x3b03eacc,0x3b09fddc,0x3b0fa6ed,0x3b17365a,0x3b19c762,0x3b101794,0x3b15a1ea,0x3b148b2d,0x3b08eedd,0x3b0b9282,0x3b124b13,0x3b1a9f13,0x3b20fea7,0x3b270c06,0x3b222a4b, +0x3b139ae9,0x3b001337,0x3b017b4b,0x3b111735,0x3aa6f118,0xbae264dd,0x3b32e1ad,0x3ac75cfd,0xbaf4e32d,0xbae8cfb5,0xbae889e3,0xbac46395,0xbada3a76,0xbac38274,0xba57c1a4,0x3a8b49bd,0x3b283907,0xba92b590,0x3a7a7f3b,0xba7d5d3c,0x3b20a944,0x3b2e2083,0x3b535d68,0x3b65f37a,0x3b825843, +0x3b844d12,0x3b6068bf,0x3b6cdbb5,0x3b789d6b,0x3b6a305b,0x3b6948c6,0x3b71fa3f,0x3b8724bc,0x3b8f8ec3,0x3b913a35,0x3b7d8704,0x3b4247b7,0x3b173ea6,0x3b0760db,0x3a3941b7,0x3ac84a3a,0x3a8fceb5,0x3b078c9d,0x3b211931,0xb7017034,0x3a84c81e,0x39962143,0x38054b3b,0xba0ae0a6,0xb8b9535e, +0x39fabd03,0x3996a412,0x3a7800ce,0x3adaa27b,0x3a64a0db,0x3b0d8217,0x3b572b60,0x3b2abf3a,0x3b6ec10e,0x3b852bb0,0x3ba73d5e,0x3baef909,0x3b835fa8,0x3b9b5282,0x3b9183a9,0x3b854883,0x3b8142f4,0x3b9643cb,0x3ba61975,0x3bc963ee,0x3bc8f760,0x3bbc62c2,0x3b783442,0x3b31d940,0x3ab7d9e9, +0x3a5d9c44,0x3ac19c36,0x3b3aa98d,0x3b0e861b,0x3ab6f7bc,0x3a31913d,0xb95dbe62,0x39955e2c,0xb94ee8d7,0xbabf866b,0xbaa534c3,0x39e0a297,0xb84e5ef4,0x39d08440,0x3b05bc4e,0x3b1ee351,0xb985b5ae,0x3a8152f8,0x3b5ed9e9,0x3b9764ed,0x3bb9fac7,0x3be390fd,0x3bf10d3b,0x3baee4cc,0x3bc7e8a1, +0x3bcd6c55,0x3bc70243,0x3bc14881,0x3bc64cdd,0x3bf07b1b,0x3c1050e0,0x3c0a73b4,0x3be40d42,0x3b89c669,0x3b1cbf4b,0x3a50154a,0x3a4f791f,0x3ae2d023,0x3b20f3da,0x3b158247,0x3b0388ea,0xb9938e58,0xb892f3e2,0xbb111d4f,0xbb49f225,0xbb9cf48c,0xbb82c9d8,0xb9bbe88e,0xbaf3bc03,0xba4f78a9, +0x3b3a8da1,0x399b1575,0x3b4d00ce,0x3b54a18d,0x3b3d3f18,0x3b97527e,0x3bad3878,0x3c059e64,0x3c0b5f41,0x3bc55f48,0x3be905d1,0x3bcbe8b6,0x3bae8ec3,0x3ba08b0a,0x3bd078cb,0x3bfaf141,0x3c2e4200,0x3c2a7775,0x3c1a89c7,0x3bb554a9,0x3b4ab0fa,0x3a1659b9,0x399b2720,0x3ade0a88,0x3b6facb5, +0x3b3ed1fb,0x3afaa1f4,0x3a416c44,0xb99878de,0xbaae18e5,0xbb3e5db3,0xbb88e150,0xbb82a36b,0xba75d632,0xbb3f66aa,0xbaf772c8,0x3b4f2804,0x3a1e8a0d,0xbb6cfefe,0x3a9b9af7,0x3b54b95d,0x3b681705,0x3af038fe,0x3ae7b8e8,0x3b0410a1,0x3b16094d,0x3b9a3998,0x3c012dc6,0x3c1726f7,0x3c43c81f, +0x3bf0e7b8,0xbb84987a,0xbb8719f4,0xbb8211a7,0xbb5e2fe7,0x39937db1,0x3b3babc5,0x3b77e3f1,0x3b12701e,0xb7eb941e,0xbb081012,0xbb7db9a1,0xbb123d5b,0x3b37afee,0xba5565cf,0xbadad83f,0xba8f5f5a,0xba197d3c,0x3ad11088,0x3ba02611,0x3b9f00d3,0x3b70e32d,0xb9f7feb6,0xba44f773,0x3c3b803a, +0x3bc50d9c,0xba34df66,0xbb3de3e9,0xbbecf3c4,0x3af0db3b,0x3b90fb00,0x3b6aeba6,0x3b97b69c,0x39f6c31c,0xbbf920ef,0xbb8820d9,0xba85dea8,0x3b894072,0x3be1f73b,0x3be0f6f4,0x3c05c68b,0x3b9ac56e,0x3b688668,0x3b8c46f4,0x3ae56f38,0x3b1e6f56,0x3a220f87,0x3a9a9d3d,0xb9a0a9bd,0xba711c52, +0xbaaedb84,0xba0b57e9,0xba1741ed,0x3895e0c5,0xba9ef062,0xbb878fed,0xbbe37820,0xbba93652,0xb992765c,0x3c1533e5,0xbc21c7fa,0xbc3627f7,0xbac61eb7,0x3aef55a1,0x3adebb3a,0x3bdf5a14,0x3bf2c9f5,0x3b969ee6,0x3a3b3568,0x39c624c9,0x3b55510b,0x3a5bca4a,0x3a7d0ea6,0x3b45c0f7,0x3af04f23, +0x3b1197d1,0x39730690,0x3aa3e66e,0x3aedd0d3,0x3b637616,0x3b2eea07,0x3abdfca6,0xb93cd340,0xb95ecac6,0xba0ff347,0xbae8e702,0xb984aa34,0x39971c24,0x38b9b25a,0x3927b796,0xb969665b,0x380ce9b0,0xbba6ccf3,0xbb9eedc4,0x3ad430c8,0xbc189c94,0xbc20cf9a,0xbc2f17c2,0x398fc462,0x3bbab87a, +0x3c571e95,0x3c245776,0x3bf5a28c,0x3aa3a238,0xba5594c7,0x3a8a38cd,0x3be3bab4,0x3b997fcc,0x3b5f1144,0x3b1bce72,0x3b16a303,0x3aa286ec,0x3a2f55f0,0x3a8fe11f,0x3aaa907d,0x3a8a3175,0x3ae30913,0x3a3d0a8c,0x3a09faaa,0xb9fcc1f5,0xba0c7774,0xba798282,0x3902a0a4,0x3718527a,0xb78beca4, +0xb9e67907,0xba22558c,0x3ac8eab0,0x3966d294,0xb99604be,0x3b69cf19,0xbbc55cad,0x3c34afa7,0x3ba868c8,0x3bacf073,0x3bd543b8,0x3c479212,0x3be88be6,0x3b9249b6,0x3b0ee660,0x3b2f108b,0x3a7ae7b4,0xba7650e6,0x3a40b203,0x3b3ecbd0,0x3b1b938f,0x3b83c11f,0x3b92fbf6,0x3bb4c4b6,0x3b33cd64, +0x3a972215,0x392f3705,0x3785798a,0x3a704959,0x3acbb530,0x3ab69fae,0x3a02f02b,0x37c18d78,0xb985e2c2,0xb99a18fd,0xb8071724,0x3938afad,0x3a4cead8,0x3b1d1b8c,0x3b39e654,0x3b35e5a1,0x3b64cc1e,0x3c292f49,0xbb99264a,0x3af62db1,0x3c089db3,0x3c00498f,0x3bb9068e,0x3bbe3082,0x3bbc5828, +0x3ba8d9c7,0x3ba20b0f,0x3bed3cdd,0x3c20cd79,0x3c05e207,0x3bc70c2b,0x3bb699a4,0x3b3ea497,0x3a29f968,0xbac65d4e,0xbb363f0f,0xbb4d9721,0xbb1ad3b2,0xbb3ff00a,0xbb3da0e6,0xbb500077,0xba95b315,0xb9e34a4c,0xb9fe910d,0xba35eff7,0xba70f68a,0xba8b4087,0xba75db9b,0x3984008b,0x3a9562d3, +0xb8c519bc,0xba772a82,0xba9ad08b,0xbb3fae6f,0xb88f2b2f,0x3b4d94a3,0x3b02722d,0x3b1f79d9,0x3b8577b2,0x3bbc0fb9,0x3be45881,0x3c0dec40,0x3bdde58a,0x3ba1f950,0x3b7c9000,0x3b9d5f75,0x3ba4aa88,0x3b809267,0x3b5db604,0x3b1f657d,0x3a7520ee,0x39c7ce75,0xb9d67a54,0xbac221f6,0xbac45283, +0xba979ae2,0xba76393d,0xb9e65734,0xb7bf1da7,0x3a4ad95d,0x3ada0086,0x3af68135,0x3a9a5d56,0x3aa331e8,0x3a8315cb,0x3a13f341,0x3a815d75,0x3a9c011c,0x3aa7ceaa,0x3b3e45cf,0x3af1d356,0x3b2467b5,0x3b7376b3,0x3b668327,0x3b6ab0ef,0x3b837b09,0x3b9e91ad,0x3bc4eee6,0x3ba406f5,0x3ba04cab, +0x3b9f00a9,0x3b7a442c,0x3b33b936,0x3ad39d90,0x3a9e39c2,0x38f4025c,0xba5a2daf,0xba106332,0xba3706a9,0xba3d38f9,0xba946c64,0xbad9f700,0xbacebeef,0xbab23e1d,0xba52ef6e,0xb9296489,0x3a2f88c7,0x3abe3cfd,0x3b0538c4,0x3b1f6aee,0x3b31027c,0x3b54d5bf,0x3b3109cd,0x3b35256f,0x3b2e102a, +0x3ad4871b,0x3ae9f656,0x3b1ad858,0x3b064744,0x3afd91af,0x3b002063,0x3ae5fec3,0x3ac397aa,0x3abaf691,0x3ab65fbd,0x3ab3c408,0x3a9e14ea,0x398b6a88,0xba1a4d57,0xba928661,0xbabbcc6e,0xbad37b45,0xbadc44c8,0xbacc6bb0,0xbab603a2,0xba98e982,0xba93d6eb,0xbad6e8ae,0xbac6c132,0xbaa5ee06, +0xba8f0fc7,0xba66615d,0xba490445,0x3a5c9e34,0x3a7dfb66,0x3adf1f35,0x3b00d454,0x3b2d1c71,0x3b517aa9,0x3b12ea63,0x3b44f9ec,0x3b417203,0xbb86e30e,0xbb01835d,0xbad296f4,0xbac77893,0xbaaccf8c,0xba85e443,0xba205982,0xb9af9986,0xba73c9ba,0xbaaba505,0xbacda308,0xbac61ae6,0xbab28fb4, +0xbaba5e7b,0xbaa77123,0xbaac5ade,0xbad2f86e,0xbadd2b64,0xbb0474d1,0xbb014140,0xbb028d37,0xbaedfdde,0xbaecc687,0xbaf63785,0xbb090095,0xbb068a7f,0xbb0b75d4,0xbaff056c,0xbb249282,0xbb1bb15b,0xbb0c3d48,0xbb4c2d5e,0xbb17d5f9,0xbb45af4c,0xbb836375,0xbb004616,0x398c53cc,0xb8b392bd, +0xb9e42e66,0xb9b8357e,0xb9c4e3bf,0xb9e39bc2,0xba196946,0xba20d660,0xba149b8e,0xba0ba4fc,0xba1820e1,0xba3bfa49,0xba64d707,0xba813a13,0xba8550df,0xba874559,0xba855daa,0xba7a8d31,0xba76f4b9,0xba7d5daa,0xba1626da,0xba97a8a0,0xbb2db9ce,0xb9ea3c53,0xba84e3c9,0xbb35909a,0xbb3cc80c, +0xbb25f136,0xbb17a19b,0xbb14dbcf,0xbb03f999,0xbac71d86,0xb8b4f2db,0x399e65a4,0xbaeea5ed,0xba15d690,0xba972077,0xbad4a677,0xbade323f,0xbb002a26,0xba92a017,0xba8f58cb,0xba5ad24e,0xbaa492d4,0xbab9e1f5,0xbacb58f7,0xbab8bcbe,0xbab79388,0xbab520b5,0xbaaf4a64,0xbaa34a5b,0xba9ad2b5, +0xba89f386,0xba8e5813,0xba95d41a,0xbab331f1,0xbaa7f1aa,0xbadd2e07,0xba1baac7,0x3a58d0a8,0x3b7de88b,0xba9214f3,0x3a1518a8,0x3b5f702a,0x3b5b9d59,0x3b4e7e09,0x3b2f2aff,0x3b4ade64,0x3b3e92b5,0x3b2cb388,0x3a1e99c6,0xbad55263,0x3b534001,0x3ab1b648,0x3b44fe2c,0xbadad788,0xba85b0d7, +0xba212fbd,0x39894393,0xba9fc9e3,0xbb00f995,0xbb29c14c,0xbb1887b9,0xbb0b4eb2,0xbad02016,0xbac24f4b,0xbabcb220,0xbabb4221,0xba79aecc,0xba7eaa08,0xba99895f,0xbad820e0,0xbafbd180,0xbb1f6d38,0x3a5af918,0x38f4d6eb,0x3ab76fee,0x39ffcd77,0xba8d42e8,0x39c92403,0xba6034fc,0xb9b0fe9a, +0xbaa6284c,0xbabd6ef1,0xbb3a416a,0xb892d5a7,0xb9b8fa0c,0xb9dc44ac,0x3a664a8b,0xb8e5c4c1,0x38e5da72,0xbb21b050,0xba05de3f,0xb87605a5,0x3ac6fcd4,0xba5c1491,0xbaee9563,0xbb485104,0xbb232caf,0xbb181522,0xbaf0e7be,0xbae04823,0xba9b81f6,0xba77988b,0xb900674b,0xb963f906,0xba5125ce, +0xbad1e554,0xbb23342d,0xbacd1158,0x3a81794d,0x39eed579,0x393d1e72,0x3a6c58ac,0x3a11463c,0xbacaafa3,0xba73d178,0xbb6adbf2,0xbb0c78cb,0xbb63844f,0xbb1d657f,0xbaca48e4,0xbb03e3a8,0xbab35701,0x3a826ae6,0xbb088e14,0xb96fab97,0xba36a685,0xba012b24,0x3ac4ee47,0x3b6d7345,0x3981e18b, +0xbb11c476,0xbb85ba78,0xbb878f93,0xbb4ee38c,0xbaa93e63,0xbabee59f,0xba8641e6,0xba9d17a5,0x396176cd,0x398845b4,0xb9d23a76,0xbafb925b,0xbb30f72a,0xbb23c5b7,0xba260da8,0xb9f3d7f5,0x3ae4575e,0x39f6b242,0x3a9863ed,0xbadac1bc,0xba8e69da,0xbb2837b1,0xbb5334b8,0xbbb1b8a9,0xbb9260fb, +0xbadcbdb5,0xbb0884d6,0xba9b0410,0x3a30108f,0xbaa5fc9e,0xbad0cb38,0xba89a57e,0xb90f5090,0x3aef7b2c,0x3b9148cf,0x3a57b5f6,0xba85e2ab,0xbb7b4c50,0xbb584b50,0xbb4c0d6a,0xbb0f13f3,0xbb057435,0xba632377,0xb855cd4b,0x3aefc669,0x3ab2a404,0x398692ed,0xbae92e7d,0xbb24fab7,0xbb0b1149, +0x3af3585c,0x3a50fc9e,0x3b279dbe,0x3af8b282,0x3a8f9e68,0x39d79300,0xba68a1a1,0xbaf71ef6,0xbb45cea2,0xbb94729e,0xbb94bd4b,0xbaa6b25a,0xbb7077c4,0xbb35e963,0x3aa8168f,0xba383973,0xbb3029b5,0xbb45db5e,0xbb60b9db,0xbb593cc5,0xbbbbd8ce,0xbbd4a5a6,0xbc08fcf8,0xbc2506b6,0xbbb6cbdd, +0xb9bae3b8,0x3ac838fa,0x3bca8330,0x3b7de618,0xbb9eacf0,0xbbc34afd,0xbbcd1218,0xbbe7b2de,0xbba34ec0,0xbb901855,0xbb5436f8,0xba8808bf,0xbb4fcc0e,0xbb5fd38d,0xbba4348f,0xbb28fa74,0x3b307843,0xba875818,0xbadc1d75,0xba95f786,0xba80535e,0x3ac72452,0x3baaf355,0x3b9c451c,0x3b402423, +0x3a8d8cf0,0xbb6977b4,0x3c050ae9,0x3a7122b2,0xbb45ba47,0xbb99d8b9,0xbbf1f1c0,0xbb411465,0x39f2e994,0x3b0d741c,0x3b21da6b,0xbae70841,0xbc1538b6,0xbbb0791b,0xbb26b549,0x3a9c5379,0x3b43decf,0x3aa9f632,0xbb158ba3,0xbb024165,0xbafac7b2,0x3b3b0fb0,0x3b4b5bf3,0x3ac5480d,0x39992ad0, +0x39e9cde5,0xba576577,0xbaad92bc,0xbac20523,0xba180896,0xba0e4589,0xb867b5e4,0xbabf16b6,0xbb9a3727,0xbbedc340,0xbbc4b95e,0xbab91440,0x3be59f81,0xbc355fe8,0xbc3ee6b2,0xbb688c70,0xbb3959cc,0xbbaa1fc8,0xbb96fd62,0xbbbbe9aa,0xbc04f769,0xbc089b58,0xbba501c2,0x39239d55,0xbb9bc00f, +0xbbd12bea,0xbbbb75e9,0xbbb1af4e,0xbb604c43,0xbb60ed5e,0xbadd4973,0xba834008,0x39bc60f9,0x3a6db357,0x3a09c60f,0xba4f442f,0xbab7e1fe,0xbaa7c1ca,0xbad2f3ba,0xb9f5de98,0x399276d5,0xb81626eb,0x382bc805,0xba04e8d6,0xba344ca4,0xbbcc43c5,0xbbad9a31,0x3a80a9fa,0xbc0fd4ec,0xbc107016, +0xbc2a1f41,0xbb6d2b42,0xbb082578,0xbb645b42,0xbbafa56a,0xbc124b07,0xbc399253,0xbc37024a,0xbbd8c5d9,0x3ae58ad9,0xbb6e9f7f,0xbbbce629,0xbbe90031,0xbbb1efc7,0xbb883f02,0xbafd62f7,0xba79a423,0xba84668d,0xb9a6e15b,0x397dca7b,0x378f9d43,0xb9bc2be9,0xba734767,0xba9d9c6c,0xba653a92, +0xb996448d,0xb914884b,0xb80fb38f,0xba0164fc,0xba3cd692,0x3a634e9c,0xb960df73,0xba68a893,0x3b6d76c2,0xbbd64332,0x3c2268e8,0x39b34ca5,0xbb8fb335,0xbbc04697,0xbbed65e7,0xbbf3d74f,0xbbc47ecb,0xbaa1d3ed,0xba0db9ac,0xba3930cc,0xbb6f44f4,0xbadc3cb4,0x3915c734,0x3a021837,0x39c77920, +0x38f82d2b,0xb82826eb,0xbab82d70,0xbaa6c67f,0xba3a3e2e,0xb93b0bbe,0x39ded851,0x3ab6b339,0x3a4e7ecf,0x39379896,0xba1f4bdf,0xb9bf5577,0xb9cad3cd,0xb4df93b0,0x386ad677,0x3a400ca2,0x3b0e637a,0x3b0b68d9,0x3a914639,0x3b960e6d,0x3c16d0b0,0xbb5f11c3,0xb93f2d45,0xbbb88fe7,0xbba9ffc6, +0xbbe1b820,0xbbe1bb91,0xbbe9aef8,0xbbc2523b,0xbb7f4a20,0xbaa5e08e,0x399db67f,0x3a9112d3,0xb90659b4,0xb90c17ed,0x3986d96b,0xb9a162c8,0xbaeb07d7,0xbb23bec5,0xbb6c4ffc,0xbb8b662b,0xbb6c2b6b,0xbb6d4c99,0xbb403127,0xba76f16a,0xb9ba4621,0xba38ccdd,0xba6914ec,0xba91f1f9,0xbaacfb99, +0xba9b4608,0xba21a310,0x3986d1d6,0xba5b2723,0x39242786,0xbaf1b375,0xbb86726f,0x3b221f65,0xbb658954,0xbbad7b3c,0xbb882be8,0xbb3eb268,0xba1be09f,0x3a806817,0x3ae0707a,0x3b75d8a6,0x3b8ec83a,0x3b824493,0x3b79cd2e,0x3b482fc2,0x3ae44d8f,0x3a6cfd62,0xb9779730,0xbab266b0,0xbac6bc6a, +0xbad45479,0xba8336f0,0xbae1a8ee,0xbb037c2b,0xbb008b63,0xba847b80,0xb9d29a29,0x3a1f4097,0x3a83dd39,0x3a949976,0x38a54a08,0x39aa7429,0xb8b966c3,0xb9ba59bb,0x3945ee94,0xb9f88926,0xb9e163c8,0xb99fb640,0x3ab1f685,0x3a9d27cf,0xb9518e06,0x3971ca4a,0x3a52ea0f,0x3a42d86c,0x3a68e64f, +0x3a1ddab0,0x3acf16a9,0x3b171013,0x3b439b57,0x3af7728e,0x3a76e329,0xb7930343,0xba03c24b,0xba92f78e,0xbaf4ef4a,0xbaea1ecc,0xbaf8f794,0xbb020575,0xbad602d8,0xbac86e55,0xbb0a4e1a,0xba9a7d05,0xba1a27af,0x395860fc,0x3a714009,0x3af52205,0x3b0fc511,0x3b0d5c24,0x3b1cbe42,0x3b379b0d, +0x3b0a9074,0x3b16b737,0x3b3155d2,0x3aca5d95,0x3b146b6f,0x3a240d82,0x3a4f2893,0x39768175,0xb9e382c9,0xba92ffe2,0xbacebe89,0xbb017ab3,0xbafbcbb1,0xbaf72b82,0xbae3d476,0xbac5705e,0xbac052c3,0xbaa16bbf,0xbad446ff,0xbaf6d62a,0xbb0a448e,0xbb0c4bb1,0xbb1da990,0xbb10abc3,0xbb10c090, +0xbb002bf7,0xbb16bee2,0xbad7ef42,0xbac0143f,0xbab802d9,0xb9f949dd,0xba31a47a,0x3a6bd7d2,0x3a5acbd3,0x3af37dd4,0x3b0df87d,0x3b06293a,0x3b303c5e,0x3b03f631,0x3af36ad2,0xbb039675,0xbb46f747,0xbb50d47f,0xbb66841e,0xbb635da6,0xbb6ea383,0xbb779533,0xbb8a290b,0xbb70dc6a,0xbb4eae1d, +0xbb35eb01,0xbb20fab5,0xbb0b76da,0xbaeaf782,0xbae7e752,0xbae775ed,0xbafb0cee,0xbafd7692,0xbaf05988,0xbb20df46,0xbb0f9f51,0xbb28990a,0xbb2ba248,0xbb45573a,0xbb3f645c,0xbb48f959,0xbb4599c9,0xbb52f0b7,0xbb2b1355,0xbb3f3edc,0xbb44666a,0xbb0cd4ad,0xbb37484b,0xbb36ade6,0xbb06e4f8, +0xbb6d05ca,0xbac891b9,0xbafc7b1a,0xbaf1cf6c,0xbafe9ba3,0xbb09fbbc,0xbb14ccda,0xbb1c3a10,0xbb285832,0xbb238aa9,0xbb271b43,0xbb24b2e7,0xbb1f759c,0xbb188be7,0xbb10ddf7,0xbb14d0eb,0xbb17158c,0xbb1a6a6b,0xbb1c71d1,0xbb1ad54b,0xbb202da2,0xbb16dcf0,0xbac1865d,0xb8c19674,0xbb1c0ca9, +0xbac37b34,0x39291be6,0x39d49d31,0x39bdcb6a,0x39a5cf05,0x3a205281,0x3a13f9f4,0x3a0682c9,0xba3361ee,0xbac87e3f,0x3a1912f8,0xb9b630e2,0xbb6beeea,0x3b3053c3,0x3afd36ea,0x3b4d1d31,0x3b082fe5,0x3b095224,0x3b0dec1a,0x3b11a13b,0x3b1410bf,0x3b0e5046,0x3b12291d,0x3b143236,0x3b1370e6, +0x3b0f6ec7,0x3b14a867,0x3b19f131,0x3b26772a,0x3b2d8c15,0x3b277fc3,0x3b1a80a3,0x3b0365c9,0x3b17ecd4,0x3a202e88,0xba4d60b7,0xbb330c52,0x3ab57bdd,0xba26c1b7,0xbb4c56a5,0xbb499928,0xbb3fd762,0xbb27cd3b,0xbb541990,0xbb4c1ce2,0xbb270fa9,0xbaa45918,0x3ab1abcf,0xbb1978a7,0xbabdb387, +0xbb751775,0x3b02e0ee,0x3b33ba8d,0x3b43d4ce,0x3b5ab1d2,0x3b6df5d6,0x3b6b37ad,0x3b5117dc,0x3b4d0b55,0x3b617e62,0x3b7409af,0x3b66567d,0x3b6797d7,0x3b725c0b,0x3b8924e0,0x3b8ef52d,0x3b7f2bea,0x3b43be15,0x3b269bd1,0x3b31cbc5,0xba5b0a7c,0x3a24c9e8,0x386b7c58,0x394f72bd,0x3abe3867, +0xba7a9fd2,0xb8fe4a0b,0xbab40b86,0xba8c255a,0xbae446dd,0x39b9f422,0xba436921,0xba4565fd,0xb8eb0245,0xb8c359bf,0xb8aad910,0xb9a4c737,0x3b7dea21,0x3b363fa9,0x3b52cc9e,0x3b715de0,0x3b89bdcb,0x3b8a27b8,0x3b5d9ac4,0x3b7aa9fb,0x3b7b9cdf,0x3b8e0ed6,0x3b79b5da,0x3b8e6d79,0x3b9055e6, +0x3bc44361,0x3bc547fa,0x3bbe072c,0x3b7191f6,0x3b5f876b,0x3a8ade38,0xba9cfee4,0x3a307876,0x3ab7525f,0x3a3bf6a3,0x3a0f8f2c,0xba2d73af,0xba60ec16,0x3a1c49ec,0xbadf7389,0xbaaa7473,0xbb196de4,0xba07bd9b,0xba055999,0xb9b78059,0xb8cede3f,0x3afc30b5,0xbb2ca2c9,0x3a044b63,0x3b78c41e, +0x3b7d1bbe,0x3bb1bcb6,0x3bbe2ffc,0x3bbdced0,0x3b983f49,0x3b9080f7,0x3ba5e055,0x3bd5e398,0x3bb71c24,0x3bb82b31,0x3bbdcc23,0x3c037f5c,0x3c02abd5,0x3be1682a,0x3b8e2cd2,0x3b4fdae8,0x3aa0408c,0x39b6350a,0x3b11bd79,0x3aa2ae31,0x3b078b7f,0x3a81cc26,0xba32791e,0xbabd9c7b,0xbb3e74be, +0xbb536628,0xbb994e53,0xbb8fcf2a,0xba9f0dfc,0xbb255164,0xba806f83,0x3a919f8e,0xb890b597,0x3b181fd1,0x3b3103c6,0x3b7954a7,0x3b6d89e0,0x3b991e56,0x3bc7a8d1,0x3bc110f7,0x3b93de68,0x3ba9414c,0x3ba8bf71,0x3bc6189c,0x3b9facca,0x3bc52220,0x3bcfbc51,0x3c23eb94,0x3c262834,0x3c19e83f, +0x3bb4afd5,0x3b854df1,0x3ac037e9,0xbab17602,0x3b026847,0x3b14c9b4,0x3b228be7,0x3aebebbf,0xb8647f49,0xba2e186e,0xbae91efa,0xbb15cfbc,0xbb9a60fd,0xbb8d59c3,0xbaf537d7,0xbb3c7efe,0xbad09e67,0x3ad1a5a7,0xba53eaa6,0xbb622668,0x3a1cddca,0x3be1c484,0x3bb76a66,0x3b1a5daa,0x3b2e4b41, +0x3b1d84c2,0x3a8897c8,0x3b908f97,0x3bedb7d4,0x3c0add04,0x3c512de2,0x3c17378c,0xbaf61a2e,0xbb436711,0xbb7b1b2b,0xbb622846,0xba93fdb8,0x39c3c5f2,0xba05fc9a,0xbb0cc172,0xbad7f896,0xbb857f53,0xbb7bd1e3,0xbb33bfd4,0x3b42af72,0xba8e0345,0xbacea9ea,0xba808793,0xb9f8ba9d,0x3b1873a3, +0x3bc70528,0x3bbc36bf,0x3b638a25,0xbaa8ca67,0xb76054c9,0x3c0f593a,0x3b9db5c1,0x3ac089de,0xbb1d3073,0xbbeacc09,0xbaed1839,0x3a1e2a85,0x3b087b22,0x3b905221,0x3aa57fb1,0xbbd8beb5,0xbbb54312,0xbb540ea7,0x3a9f65d4,0x3bd29359,0x3bfb03dd,0x3c061da6,0x3b9bfd6f,0x3b8ffb67,0x3b77a4fd, +0x3a3a8028,0x3ae7e0fe,0x3a542008,0x3ac49eb2,0x3930a51c,0xba9c5c89,0xba9f1934,0xb98e1fda,0xb9b0c3a3,0x38b13d78,0xbab17208,0xbb92b9bb,0xbbfffbe4,0xbba0c36a,0x3a974b2c,0x3bf5de50,0xbc213af1,0xbc02c1c1,0xbb3a7a9e,0xb9af4e89,0x3b483e73,0x3b8b9c1a,0x3b8fb18f,0x3b51acda,0xb619251c, +0x3a552483,0x3ba10059,0x3af6970c,0x3aaab7e8,0x3b04063b,0x3b0860a5,0x3b183cc8,0xb9a2cd96,0x3a7d0aef,0x3ae34685,0x3b2d1445,0x3ab087cf,0x3a32c58c,0xba9a639e,0xb9cc3951,0xba58bb98,0xbabc2531,0xb9a503e5,0x39d2a5ec,0x37d4d5e7,0x399b3bf3,0xb9c09cde,0xba89a9eb,0xbbb37e96,0xbb9bbdc7, +0x3aafeca9,0xbc13f484,0xbc165c47,0xbc10d808,0xba33d526,0x3b778cc8,0x3c4bbe6e,0x3c1a0164,0x3be4a7e9,0x3a98556d,0xbb008cc1,0xb9beeee0,0x3be6ee19,0x3b9fe17a,0x3b48c8cd,0x3acb2b89,0x3ad08884,0x3a3d7210,0x399a0c89,0x3a567018,0x3ae5fa5b,0x3a0197fe,0x3a67118c,0x3a174227,0x39716ac2, +0xba875c4d,0xba408cdd,0xba4c6035,0xb847f9ba,0xb867c3cb,0xb91f1bcb,0xb8d91e6d,0xba039473,0x3a620c4e,0xba31b645,0xb9ee28a2,0x3b47a0db,0xbba357e9,0x3beb1902,0xb89c02a9,0x3b2aa13b,0x3b8a4c7e,0x3c2ded01,0x3bd39ee7,0x3b8a47da,0x3af69ab0,0x3af52389,0x39856343,0xbaafe4b3,0xba825ca3, +0x3aa853ad,0x3a51dd35,0x3b53a69f,0x3b8f86ec,0x3bb41e39,0x3b57c12a,0x3b150b09,0x3a2e4f4f,0x3a032b13,0x3ac629fd,0x3ada6ee2,0x3abf14d8,0x39f2a317,0xba0b3473,0xb952d802,0xb8b89a77,0x390bc688,0x3925004b,0x3a3f1c09,0x3b21a2b3,0x3ae75e2a,0x3ae88af7,0x3b88cc6e,0x3c08cdfa,0xbbb48e39, +0x3a5ee544,0x3c034456,0x3bcc4566,0x3b814bad,0x3b4d0a5d,0x3b5ab9b2,0x3b5bb33e,0x3b41393a,0x3b915166,0x3be07f69,0x3bb39317,0x3b9b075d,0x3b809e7a,0x3b06c608,0x38fe6525,0xbada866e,0xbb3d8781,0xbb3c47f5,0xbb027bd9,0xbb706687,0xbb4f0e2f,0xbb011e09,0xba407de2,0xb8c76b36,0xba0984f0, +0xba6589c9,0xba6d8394,0xba7a19fa,0xba874181,0xb8e20354,0xb8d7719b,0x39aee18a,0xba6f07a3,0xbb132a34,0xbb09c936,0xbb5e7cb3,0xba28ca92,0xba39385d,0x38e65ef0,0x3b29be43,0x3b9d2deb,0x3bcc35a3,0x3bfb64e3,0x3bdaa2bd,0x3bba3b06,0x3ba513e7,0x3bba7077,0x3bb132ef,0x3b8537e7,0x3b6a157a, +0x3b2fc434,0x3ac868b9,0x3a59a65e,0xb9246814,0xbafa48c2,0xbae9edde,0xba83661d,0xbac57b79,0xb8e55411,0x39c066f6,0x3a568535,0x3ad935c6,0x3a99b9fd,0x39b4b08c,0x3957b2ca,0x39983805,0xb90d1afc,0xb98ba042,0xb801b30f,0xb9db3449,0x399f5b85,0x3a6302eb,0x3b09afc3,0x3b739891,0x3b4f73b3, +0x3b6cce20,0x3b8824ea,0x3ba84f57,0x3bcca722,0x3bb2688f,0x3baeaf65,0x3ba7fea6,0x3b878bba,0x3b45c461,0x3aecee71,0x3abb16da,0x398df506,0xb9de40c1,0xb9b23d4d,0xb9ee096f,0xba4d57ca,0xbae48a1f,0xbaf9ca4f,0xbabb8b6c,0xba8d14bd,0xb7ef9b94,0x3a5515ce,0x3a89524e,0x3ae1bca5,0x3b1ae1aa, +0x3b20d252,0x3b253599,0x3b343a65,0x3b2a93b8,0x3b2888ad,0x3af4e3a8,0x3a9af33b,0x3aed8256,0x3b571cf2,0x3b5cfd56,0x3b48233f,0x3b50a605,0x3b2f3a21,0x3b152be7,0x3b0aba8c,0x3af1dd05,0x3ad5d327,0x3aab7db8,0x3a072324,0xb9c59ebe,0xba89449e,0xba97132d,0xbaa638e8,0xba942791,0xba9d495c, +0xba1b39e3,0xba8b9d29,0xba9f5a2d,0xbabdc0f0,0xbaaa4048,0xba76b7d5,0xba3997c8,0xb9fbc3c4,0xb8afe4da,0x3aebb463,0x3a688358,0x3b1a3cbc,0x3b04c8af,0x3b3d07a4,0x3b47d5f9,0x3b13c38f,0x3b4a9840,0x3b5e6d14,0xbb707b82,0xba6a9a41,0xba6234f7,0xba6a3d47,0xba61c67a,0xb9986e4f,0x3882a4f1, +0x39cf96ab,0xb85c92d3,0xb9c67219,0xba275667,0xba3cea68,0xba393ef5,0xba7d9623,0xba5ed11a,0xba755492,0xba9c3a58,0xbaa9ea0e,0xbad06b44,0xbac850e4,0xbb1b95b9,0xbb0788b6,0xbb1a23f5,0xbb1b6896,0xbb3269ee,0xbb36a5e6,0xbb3c48c4,0xbb333b99,0xbb3d2a31,0xbb1f5c3f,0xbab52b4e,0xbb2bf331, +0xbadbd6c6,0xbb159880,0xbb653e61,0xbaa53d96,0xb99fccce,0x3a07d514,0x391dab0d,0x39842a4b,0x393f0b18,0x38f3c947,0xb8a65070,0xb8f5200b,0xb9438ba2,0xb967eafa,0xb9a1e4cc,0xb9ef7ef7,0xba1df22d,0xba3ac5dc,0xba33ccc2,0xba2e2f3e,0xba24d683,0xba0fd3c2,0xba0b61e1,0xb9abd1c7,0xba81bc63, +0xbb09c642,0xbb4e3aa2,0xba796706,0xbb05eceb,0xbb598b7b,0xbb5ee4dc,0xbb3ff41f,0xbb2e94ad,0xbb38a1d6,0xbb2cbed2,0xbb0539b7,0xba714989,0xb87d3a62,0xbb0f4705,0xbac19fc7,0xba80b823,0xba1cbcf5,0x38df4dcb,0xbae3b3fe,0xba222ef6,0xba0986cb,0xb999aacc,0xba0434d4,0xba269d6c,0xba5e3818, +0xba441619,0xba40ee77,0xba319cbe,0xba409ace,0xba35cd1e,0xba30cdcc,0xba03b6c6,0xb9f6fa09,0xba0154d4,0xba32e15e,0xba20c728,0xba9262f8,0x3a943bfb,0x3b171d67,0x3b51e5cd,0x3a0885e8,0x3b0cebe4,0x3b4322fb,0x3b4895da,0x3b3cdb4a,0x3b2624a9,0x3b51c28d,0x3b493d7e,0x3b3a132d,0x3b15f112, +0x3888419e,0x3b393f47,0x3b3b3bb9,0x3b8a326d,0xb9decfd0,0xba1958c2,0x384e9e70,0x3a79169e,0x39cdac84,0xb9543f1a,0xbaa284d3,0xba9fb91e,0xba8c3bdf,0xb9b1f782,0xb9ca3c74,0xb9cd2886,0xb9d73e53,0x3899a05e,0x38a146e4,0xb921f6d7,0xba14a768,0xba822f77,0xbada5cfd,0x3b090d34,0x3a8c1da2, +0x3ac96ab2,0x3aec794c,0x387a4426,0x3a0a0d70,0x376ab360,0x3a2c83a1,0xb9e03ef3,0xb9a99aa8,0xbb23e39e,0x397f9046,0x3a224fed,0x3a2a29ba,0x3ac382b0,0x3a4316e5,0x3b17ef3d,0xbaceefdf,0xb9c9754b,0x3a2fc3ef,0x3b03c649,0x3a9a470f,0x3a2e6515,0xbab27900,0xba73fe8c,0xba79f858,0xb9025e4c, +0xba0239ad,0xb8c72815,0xb8d06b71,0x3a65fcc6,0x3a8d5c2c,0x3a2612e3,0xb7c5bad4,0xbaa93d13,0xb88f06ae,0x3b3af3b7,0x3ab19023,0x3a80fbfa,0x3aeb7434,0x3a6fe054,0xba654a93,0xba286802,0xbb3a10db,0xba2224ee,0xbb2d725e,0xba95f32a,0xbace9b4d,0xba88fb8c,0xb9af90f7,0x3aae8ae0,0xba531a87, +0x3af5cc91,0x39d8bc77,0xba336f91,0x3af925c6,0x3b8395a9,0x3b4c8487,0x3ac8f243,0xbac39809,0xbb0bdc8d,0xbac46d52,0x3a82a6f5,0x39e13ab7,0x3a38a8bc,0x3a0f73c8,0x3b01a662,0x3b0706c0,0x3ab62dda,0xb90ee95a,0xbab88b00,0xba89e369,0x3a3c205c,0xb91b3d5c,0x3aa76420,0x3900e9e5,0x3aad5cd2, +0xbb196cad,0xba7de158,0xbb4c3d16,0xbb54d991,0xbbbd8676,0xbb8aa803,0xbb207ae7,0xba91a7e0,0xba27bcd7,0x39939858,0xba1f017a,0xb7641711,0x38fa6339,0xba7a5968,0x3b1a8272,0x3b8621f2,0x3b81cc86,0x3b30235b,0xba986542,0xba5288ec,0xba7af906,0x395a79cf,0xb9b18214,0x39da23a5,0x3a4a1d0a, +0x3b52c9ae,0x3b5d41a8,0x3b2e022b,0x3a55da83,0xb9f4b968,0xba1624e8,0x3b8210fa,0x3a95b10b,0x3b12c3ef,0x3ae31c8c,0x3a3f4070,0xba035ec3,0xbaee29c9,0xbb0fc5ff,0xbb241e16,0xbb96949e,0xbb9fd3cb,0xbb1b9ac4,0xbb5fc917,0xbb0cb0b1,0x3902663d,0x3a16cbbf,0x3b05535c,0x3affdc8c,0x398cfc04, +0x39b5a156,0xbb6ae34e,0xbb4bbfd2,0xbb8b0208,0xbbd58848,0xbb9735b5,0xbad4b420,0xb99286b6,0x3b8b3bb5,0x3b324822,0xbbab0ca0,0xbbc7989e,0xbbd9a64b,0xbc246b62,0xbbe9cbd8,0xbbca0ec8,0xbba30d88,0xbb34b8fa,0xbba07bfd,0xbb8aeebb,0xbba06af2,0xbb059649,0x3b2c691c,0xba622670,0xbab1f4b7, +0xba651e01,0xb9c5eaaa,0x3b304b41,0x3bdc2699,0x3bc23f12,0x3b91cbbb,0x3b1c874b,0x3a3f057e,0x3bf41314,0xba123c4c,0xbb7af2b3,0xbb868e39,0xbbe4cc1a,0xbb6624c0,0xb9e6f6c0,0x3b0c8f00,0x3b79e224,0x3978c6d1,0xbbf4b4df,0xbbb7d423,0xbb6b19bf,0xb9940add,0x3b656343,0x3b6727f9,0x3aabaa5e, +0x3ac73085,0x39944eb9,0x3b82a415,0x3b514491,0x3ad887a1,0x3a73253b,0x3a88f2cd,0xb9c05d7d,0xbad78063,0xbab2be2a,0xb96c5977,0xb946bbc0,0x3727da7f,0xbae5b455,0xbb969f32,0xbbf32e01,0xbbae59df,0x3a9801e0,0x3bdf586c,0xbc1165f3,0xbc087b10,0xbbb18261,0xbb5761c8,0x39043689,0xb994e278, +0xbac1fa3b,0xbb40680c,0xbbf23d96,0xbbbefb55,0x3a393052,0xbb811ea8,0xbb96db66,0xbb9853ed,0xbb7ca905,0xbb025bb1,0xbb420b4e,0xba82a756,0xbaac9654,0x39b94357,0x3a78b092,0x3887ec6a,0xb9d6560c,0xbaa6001e,0xba723b81,0xbab669a6,0xb925f237,0x39537a8c,0xb88791e6,0x39702814,0xb9cd8946, +0xbad51459,0xbbb58e67,0xbb8b5c37,0x3a195032,0xbbe18175,0xbbe13c60,0xbbecbffd,0xbb1f2a15,0x39acd853,0x3ba7b80e,0x3b062ec4,0xbada6a0d,0xbbd0286e,0xbc1d0deb,0xbbdaa725,0x3b6815f1,0xba8d8703,0xbb2e2660,0xbba1c336,0xbb759964,0xbb553609,0xbb01a714,0xba440df6,0xbaaf3487,0xb9de108c, +0x3a794cd3,0x38ae457e,0xb9cf4c39,0xba2e5a14,0xbaa1a021,0xba08a9d3,0xb9a1b38a,0x36c988e6,0x37821311,0xb9662ddc,0xb9e9998f,0x38a31f32,0xb9ae0c44,0xba5b50be,0x3b32711b,0xbbb43510,0x3bbfdd23,0xbafffbb8,0xba1807b1,0x39bb2ab5,0x398036ce,0x39fe853d,0x392b0ba8,0xba87ee07,0x3ad82fa3, +0x3abb52cf,0xba6e51c4,0xba059cb0,0x3a320d61,0x39fae37b,0x3ac573ed,0x3af574e6,0x3ab82600,0x397b6607,0x3852287c,0x39e73770,0x3a0c1d11,0x3a889a17,0x3b0441b2,0x3a9ae259,0x399a67e0,0xba50c519,0xb9b6f475,0xb9203815,0x3920ae4f,0x390f66f1,0x3a613885,0x3b038e28,0x3a7883e1,0x3a055fe8, +0x3ba57e4f,0x3be5d5a1,0x3a8ceede,0x3b881f7e,0x394dda9f,0x3a48976b,0xbb2775b5,0xbb44319c,0xbb76e872,0xbb60a70e,0xbb21f320,0xb9caac37,0x3b2a4fe3,0x3b2890ad,0x3ad911b0,0x3abb1c59,0x3a4e1a2d,0xb984d416,0xbb095680,0xbb0ecad8,0xbb473dfb,0xbb61df2e,0xbb055d77,0xbb16c168,0xbafc4086, +0xb9c8469e,0xb73e9903,0xb9952510,0xba0a7ae5,0xba512ced,0xba0d90df,0xba27fad4,0xb99de467,0x38cfc2c9,0x37c30129,0x3a3b83f5,0xba5157cd,0xbb3ae802,0x3a4dd372,0xbb4d0955,0xbb8f0228,0xbb50e831,0xbb119e62,0xb9da31d5,0x3a1dcf92,0x3acd3b1c,0x3b6fbfec,0x3b95e7a6,0x3b95d726,0x3b9b0ba7, +0x3b91258e,0x3b5aba4e,0x3b2dd265,0x3aac8804,0xb9844ef9,0xba88ae72,0xbad76a09,0xbaba14c9,0xbb021491,0xbb05fb1c,0xba6e8a7c,0xb9ae80f8,0x3977d126,0x3a8f5ef2,0x39c7703d,0x3a012ea0,0xba0d3435,0xb89ec317,0xb95b51e6,0xba00b028,0xb7ad6ca5,0xba4daa19,0xb9def502,0xb9d905ec,0x3b27bca4, +0x3b043cbd,0x3931fee9,0x3a11ccbb,0x3a74bc47,0x3ab5a825,0x3ae56e17,0x3aedfafe,0x3b1f6079,0x3b42be10,0x3b639beb,0x3b25e177,0x3ac935e2,0x3a047b52,0x3923c6c1,0xba40565f,0xbac588d9,0xbac62db3,0xbae85a98,0xbae90a71,0xba854f25,0xba8ca09f,0xbac08e84,0xb9ae99f8,0x390c74de,0x3a825c89, +0x3ae55392,0x3b10de36,0x3b178b2a,0x3b11bac3,0x3b17542f,0x3b356813,0x3b1c0fe0,0x3b339843,0x3b5a3346,0x3b11c6c4,0x3b741b03,0x3b0c0ff3,0x3b05b75a,0x3b036bfa,0x3ac67bcc,0x3a560ddb,0x399863a1,0x37939d25,0xb900ffcb,0xb9c54c0b,0xba0f6fce,0xba71de85,0xbaae8ce6,0xbabcf940,0xbae31239, +0xbaf41390,0xbafff1e7,0xbae9795e,0xbb04f0c3,0xbaba04dc,0xba9f22d4,0xbab6b71b,0xbad5f66c,0xba805998,0xba02cf56,0xb8975414,0x39cf11b9,0x39bf93ae,0x3b1792e8,0x3ab88944,0x3b288832,0x3b1151b8,0x3b2a5feb,0x3b623427,0x3b503d73,0x3b3da92e,0xba5c38a4,0xbadf6576,0xbaddfdba,0xbb1352a3, +0xbb20252c,0xbb16997c,0xbb2168bd,0xbb3387cd,0xbb32488a,0xbb24b0ea,0xbb1b77b4,0xbb0f1652,0xbafd1a35,0xbae91039,0xbadd769f,0xbae25a14,0xbb03621c,0xbb07609a,0xbb10b145,0xbb28f85f,0xbae78a4a,0xbb02ff6c,0xbaedc192,0xbb0efaf6,0xbb12b6e8,0xbb225caa,0xbb0de044,0xbb09e34c,0xbae0376f, +0xbad2102d,0xbb05256f,0xba0683b4,0xba7f6bba,0xbac448aa,0xba6d0ed5,0xbae5936f,0xb92852e3,0xba9a3768,0xba904e88,0xba959daa,0xbaa9bf9d,0xbabce58b,0xbad19d2d,0xbae0ad41,0xbae311d0,0xbaf21b04,0xbafd4892,0xbb029311,0xbb05b3d6,0xbb070fae,0xbb081e77,0xbb07a2fe,0xbb06a611,0xbb0309c1, +0xbafc6e98,0xbb0aab33,0xba9b3418,0xb9a8534a,0x386c5f8d,0xba993103,0xb949ec04,0x399e6f4d,0x3a141dea,0x3a0eebdf,0x3a11eaf1,0x3a767a25,0x3a75f56f,0x3a59ceb3,0x39b2118b,0xb9ec71e5,0x3a5a3c03,0x3a4f9c48,0xbb36b48c,0x3a4e647e,0xb9925643,0x3ae4a857,0x3a617afd,0x3a5844ea,0x3a762fdb, +0x3a51c8a0,0x3a4645f5,0x3a2e7c84,0x3a43d448,0x3a56b6f8,0x3a7f2bf5,0x3a5da9ae,0x3a6aab25,0x3a71c065,0x3a984067,0x3aa1311d,0x3a94f04e,0x3a808ab6,0x3a4b65dd,0x3a85c892,0xba74f723,0xbacf31c4,0xba81d6fc,0xba065596,0xbad9fcb4,0xbacab9e0,0xbac9dd2a,0xbab8bcaf,0xbaae2e06,0xbaf69a30, +0xbafb2112,0xbaef85e9,0xbb097190,0xba1ca6c0,0xba98e7c0,0xbb04dbd3,0xbb454e93,0x39a06f8b,0x3aa36f36,0x3aace3c7,0x3af9c57c,0x3ac9dfdc,0x3a96aa94,0x3a3b0cab,0x3a247389,0x3a81d773,0x3aeeb791,0x3acca75f,0x3ac276aa,0x3ab304df,0x3b03b170,0x3b0f5d31,0x3af4b5f8,0x3aa100f9,0x3a8693ec, +0x3aa3f897,0xbaa0cea4,0xb9745374,0xb9a27343,0xba8af388,0xb995ef9f,0xba9f74bf,0xba9cc86d,0xbb0b1bba,0xbb036f2c,0xbb19ebd1,0xba037849,0xbac77c45,0xbaa1846b,0xba6a3045,0xba93992d,0xba444f9f,0xbaf37fda,0x3af763a8,0x3ac8b596,0x3ac8f9f5,0x3b1b2aac,0x3ad5564f,0x3a94d79d,0x39a1448c, +0x3a2dae48,0x3a838d2d,0x3b16ff1b,0x3accedbe,0x3afff202,0x3ae4a751,0x3b5c0930,0x3b6046b2,0x3b4d3bd1,0x3ad7c7c1,0x3ae61770,0x37ea8dcf,0xbadd81bc,0xb81acbc3,0xb98e909e,0xb9c0f371,0xb9309ba5,0xbb06600e,0xbaa8248c,0xba2151fb,0xbb43ccbb,0xbae41c63,0xbb39fdc3,0xbaf20947,0xbaa55df8, +0xba96fc44,0xbabfe061,0x37739c33,0xbb4e9fa7,0xb904c5d9,0x3b0d566a,0x3b0b73e0,0x3b8a2e5e,0x3b3e8911,0x3ae02376,0x3a214452,0xb9108d9c,0x3a7963d6,0x3b832f5e,0x3b3081f6,0x3b312819,0x3aff7011,0x3b8d9af5,0x3b9492f8,0x3b791ae2,0x3b0a3a61,0x3ad3c0b9,0x39cd7ff1,0xb96a8fd4,0x3abbb463, +0x3903ce4b,0x3a846e89,0x3926ba2c,0xbadbebb2,0xbb1c7a68,0xbb5b9f1e,0xbb6d0d66,0xbb9b13b5,0xbb92e7ed,0xbb2478ab,0xbb21407b,0xba76a693,0xba4e7060,0xba3fae53,0x39123616,0x3a7e46c0,0x3b326587,0x3b01bcf3,0x3b6ef513,0x3b2a9240,0x3aaf34d4,0xb81ff1d4,0x39c989b8,0x3aa27ed8,0x3b73c400, +0x3b0ff3c1,0x3b3c9219,0x3b303d69,0x3bc695ae,0x3bcfaf83,0x3bb6a4ee,0x3b3d17fd,0x3b273550,0x3a904926,0xba8db900,0x3ad7b91b,0x3a4eeba2,0x3ad8777c,0x3aa4b582,0xba804875,0xba8f3870,0xbafd37a9,0xbaf70bfa,0xbb955dcf,0xbb8b9bb4,0xbb3ad295,0xbb38034e,0xbac5edce,0xb99ecf6e,0xbae4ede9, +0xbac80661,0xb922f553,0x3bd03165,0x3b8d671e,0x3981bebb,0x39d649de,0xba1e29e4,0xbb402e54,0x39d20254,0x3b40b2f6,0x3b89d213,0x3c18336c,0x3bf7602e,0xba753d09,0xbb53f57c,0xbb99161e,0xbbb2a00f,0xbb8f9a3a,0xbb8337cf,0xbbb128c7,0xbbbc4068,0xbb7bf077,0xbbb267f0,0xbb73ae20,0xbb2888f1, +0x3b312d2a,0xba7175b0,0xba81e05c,0xba0447f4,0xb87e11a2,0x3b3d847f,0x3bd11ff7,0x3bcc51e4,0x3b691f29,0xb9d6924f,0x39ea7251,0x3ba4f40f,0x3b027ff9,0x3ae045ec,0xbb259020,0xbbdd3584,0xbbaaac72,0xbb36294b,0x3a4277e6,0x3b6120d4,0x3aa2d663,0xbbb8fedd,0xbbd13254,0xbba2a06a,0xbab6a263, +0x3b80c435,0x3bb3337e,0x3b91c125,0x3b3ae726,0x3b4d44ca,0x3b411855,0x3a478700,0x3a774580,0x3a3b3e73,0x3aa8847f,0x395276f9,0xbab77466,0xba9caf57,0xb90c4cb6,0xb92b0305,0xb89a5a3b,0xbad21538,0xbb8f1997,0xbc0287d7,0xbba06b85,0x3b0fd9bc,0x3b9e97d7,0xbc0ecad3,0xbbc3e7d5,0xbba9fead, +0xbb5c5ddf,0x3b0caee4,0xba5ed026,0xbab49b5c,0xba64ad91,0xbb4436d2,0xba845d07,0x3b711bbb,0x39c94b8a,0xba4c7ca1,0xbaeb1cc9,0xba126861,0x397b7830,0xbaea2320,0xb913e8bb,0x39dde482,0x3a269200,0xb9608264,0xb991fdac,0xbadfea26,0xba7f09dc,0xba994f4e,0xba8373f2,0xb96beea4,0x39c78f3d, +0xb7f2eedf,0x398db97d,0xb9e7864c,0xbb0786d4,0xbb98a47e,0xbb751ef9,0xba333d19,0xbbe705df,0xbbe85e19,0xbbb95e3a,0xbb030e5d,0x39933f6b,0x3bd1d745,0x3b82837e,0x3ae70bcd,0xbaf7addd,0xbbb3dc90,0xbb80e2de,0x3b8ab264,0x3b08be98,0x3916adfd,0xbb12365e,0xbaaeeafd,0xbab4bf4d,0xba81adc8, +0xb956e24c,0x3a490359,0xba05ce09,0xb959bdb0,0x3920b737,0xb98669a8,0xbab18a23,0xba81e389,0xb9fed88d,0xb92d4055,0x3764a4e7,0xb9533f89,0xb6ea2a07,0xb9eb2def,0xb9dde871,0xba5944df,0xb9942ef0,0x3a496406,0xbb85a62a,0x3b434986,0xbb12b004,0x3933096d,0x3a013e42,0x3b273968,0x3b0cd88b, +0x3ad4da96,0x3a187358,0x39bab440,0xba47b2b8,0xbb0c38f9,0xbb2a5943,0xba07dbeb,0xb9e36775,0x3ace88d1,0x3b2b1096,0x3b4d7761,0x3b08b3f8,0x3b08fa9e,0x3a5788f5,0x3a46bb78,0x3acd78e0,0x3ad68201,0x3a9acd65,0x398f4cb5,0xba5f0085,0xb985aca0,0x38374c42,0x3915e4cd,0x3905fd3d,0x3a227269, +0x3af4e196,0x3988e6a6,0x37fb886e,0x3b8348c8,0x3b96c776,0xbb806cd8,0xb9563eff,0x3b1840a4,0x3a37463f,0xba975a63,0xbb33848c,0xbb320b49,0xbaf260fe,0xbac7b137,0xba11579d,0x3acc473e,0x3a97e5fb,0x3ade76f7,0x3a900294,0x3a19ca36,0xb9e2be0b,0xbad99c7b,0xbb1e2ad9,0xbb277a80,0xbb1a71d3, +0xbb6f9c23,0xbb41e654,0xba60ed46,0xb9a0bb8d,0x38f2421f,0xb9dc6e39,0xba54140b,0xba3a5aa2,0xb9fc8bfa,0xba4a1857,0xb9dfbc1e,0xba8b37e1,0x399f7415,0xb931685a,0xbb0b4695,0xbaa6c557,0xbb824a16,0xbb92bbba,0xbb80b9ee,0xbb496936,0xba83eff1,0x3a8e297c,0x3b20eb14,0x3b5e523f,0x3b95d147, +0x3ba89b56,0x3bab3cc1,0x3bb0f552,0x3b97ae78,0x3b598b38,0x3b33da39,0x3aeebf30,0x3a85b702,0x390cfae1,0xba3342b0,0xbb01f3f8,0xbb0347f9,0xba9c7c30,0xbae9ea24,0xb8145059,0x39f41d6b,0x3a39de62,0x3a731075,0x397bf1cc,0xba092196,0xba15fc2d,0xb9b8c49f,0xba2bf5f1,0xba8e5920,0xbaa61107, +0xbae85c84,0xbb0f031d,0x389e509b,0x3a64658c,0x3ac17af4,0x3a9ef9a1,0x3b03b5e4,0x3b1fdf59,0x3b4dec4c,0x3b72876a,0x3b79ddca,0x3b84c07e,0x3b844d25,0x3b529a74,0x3b133cd1,0x3a95e669,0x3a519b2e,0xb92afe55,0xba20f645,0xba46e1f2,0xba6370a1,0xbaa6d8bd,0xbb06fa3e,0xbaec0909,0xbab4a3bf, +0xba2ed094,0x3a0744e3,0x3ac7e171,0x3abb590b,0x3af793b6,0x3b19eafd,0x3b07b05a,0x3b0155f5,0x3afea9fe,0x3b06a246,0x3b061cc1,0x3a9f9a3b,0x3a447c04,0x3afdda32,0x3b4059dc,0x3b5969c6,0x3b3ce35c,0x3b3bf24f,0x3b13b6f7,0x3af60e95,0x3ad7d0e5,0x3a93cfad,0x3a304f47,0x398ecc78,0xb847e951, +0xba24ac93,0xba8dae70,0xba8f2e30,0xba9a641f,0xba84d023,0xba981a3e,0xba089af1,0xbaa50841,0xbabdfe34,0xbaaf8f6d,0xbab28f3b,0xba4df2f4,0xb9cd8e01,0xb8acbc4f,0x3a1162bd,0x3ae2cb3a,0x3a83e0b9,0x3b0af2fb,0x3ae44e20,0x3b11dd4c,0x3b0258d4,0x3b022672,0x3b191069,0x3b36c5a4,0xbaf4e7c1, +0xb96118b1,0xba0cc254,0xba5180da,0xba837180,0xba1b60dc,0xba251fdc,0xba1004e5,0xba0c5935,0xba03e571,0xba134c3c,0xba3563db,0xba4a859f,0xba8d143e,0xba851246,0xba8f366f,0xbaa80327,0xbab75e55,0xbac9d03d,0xbadab1f3,0xbb272445,0xbb17bb68,0xbb2a8d32,0xbb2d993b,0xbb404280,0xbb496e19, +0xbb49ce4e,0xbb4aebc6,0xbb31d0ad,0xbb12579c,0xba84e11d,0xbaccb685,0xba80bf65,0xbaa26d76,0xbaef38c1,0xba5e4d13,0xba8a4b4f,0x3922d16f,0xb8200ed8,0xb7aeb8b0,0xb91addc8,0xb9636c20,0xb9c184c2,0xb9ed2868,0xba2457fc,0xba4b5dd8,0xba695869,0xba806d78,0xba86ee3f,0xba8c1943,0xba8507d5, +0xba81c6c9,0xba7be06c,0xba68b19d,0xba60c8c7,0xba221d69,0xbad7c8ba,0xbb1a8b04,0xbb1015a4,0xbadcc95a,0xbb1852e7,0xbb0f1a2a,0xbb0c1e8b,0xbaec976b,0xbad61db3,0xbaeb3841,0xbaec080d,0xbabcf4d2,0xbab8d7a1,0xba5e3daf,0xbaaf1cb4,0xbad019d8,0xbae94742,0x3aa124f8,0x3af8f138,0x39562547, +0x3a314792,0x3a4be010,0x3a6e6218,0x3a7c4e3f,0x3a6fe3c3,0x3a321a1e,0x3a43141e,0x3a4c8160,0x3a65173d,0x3a3af8b8,0x3a3c5428,0x3a3c1c0d,0x3a73d0a3,0x3a879db9,0x3a843d72,0x3a654a49,0x3a4f2842,0x3a0e499a,0x3b03c27d,0x3b05c40a,0x39e80d21,0x3af05499,0x3b06a323,0x39b06b4a,0x3a098e5c, +0x3a0189c3,0x39f31773,0x3a5616ee,0x3a57f012,0x3a5d8ebe,0x3b04567c,0x3ad48f2f,0x3a07671a,0x3b0c832a,0x3b02303e,0x3aa98578,0x3a5a34fd,0x3abd6a48,0x3b0b02ac,0x3b2a6b73,0x3b179b7c,0x3a9a76ad,0x3a89b713,0x3aa1ccde,0x3b038130,0x3ae760ad,0x3adfbf74,0x3adf1b9a,0x3b10299b,0x3b14ecff, +0x3afb4798,0x3abf9bdd,0x3a7c3f16,0x3a0cadec,0x3ae86717,0x3abb743f,0x3a6effda,0x3af9eac1,0x3a9cf2a8,0xb8927199,0x3a01c952,0x3a0370d7,0xb97af227,0xb782a79a,0xba8e6988,0xb906eb98,0x3a4b1065,0x3a8dc2c0,0x3a8f677e,0x3a76398e,0x3b2df0bf,0x3a8bd426,0x3a4d6c04,0x3afd6c48,0x3b2ff12b, +0x3b667fc5,0x3b685590,0x3ab05aef,0x3ae4b678,0x3ada3a59,0x3b36176f,0x3aef63fe,0x3b0b19b4,0x3b009aff,0x3b53fb68,0x3b6ce762,0x3b58fd52,0x3b1ee4b8,0x3ab2ed3a,0x3ac3fe28,0x3b24cb72,0x3acacefd,0x3abe222b,0x3ae397ad,0x3a57785d,0xb9fc79a3,0xba00bf50,0xba65fffd,0xb97ac6a4,0xbab36dd9, +0xba17b109,0xbabcfc99,0xb8d7652e,0x39d216a5,0x3a3e0724,0x3a7d45df,0x3ad5913a,0x3aa981e6,0x3a21f906,0x3b28fe58,0x3b8f91b8,0x3bc01102,0x3bb42159,0x3b12656b,0x3ac69f77,0x3afc83aa,0x3b991d49,0x3b68b68c,0x3b66acca,0x3b64981b,0x3baa6059,0x3bacd7a2,0x3b8f043e,0x3b356310,0x3aaab2fe, +0x3a840e5e,0x3ac33069,0x3a52e920,0x3a0ea549,0x399aa93d,0x3a8708a9,0xbb20f9c8,0xbaa11d7c,0xbb5ec6d0,0xbb6d4697,0xbbac64cc,0xbb7ca5c7,0xbb4506f8,0xba3ae5a6,0xb9551f15,0xb91dd4d6,0x36ecfec0,0x3ada5b36,0x3af9b1ef,0x390bc019,0x3b3b950a,0x3b67163d,0x3bd805b0,0x3bc7a22c,0x3b1e2cea, +0x3b3a412c,0x3b31fd79,0x3b8adbb4,0x3b2aefbc,0x3b412422,0x3b45ba46,0x3bcbcfe0,0x3be1cab8,0x3bd1973c,0x3b900aee,0x3b3adb72,0x3acaf577,0x3b5bd0c6,0x3ac9fbf0,0x3ab9001b,0x3aca0bb7,0x3a2f34df,0xbab44ac2,0xbaf196af,0xbaf5d42e,0xbaf130e9,0xbb85a66b,0xbb8cd916,0xbb5e164d,0xbb2f067e, +0xba9dacf7,0xba347e1e,0x3a4ecb3c,0x3b89d1c7,0x3bb35599,0x3bbf4bbf,0x3baba3e7,0x3a5d9ddd,0x3ae789ad,0x3ace4a75,0xb979bb93,0xba16857e,0x37318300,0x3a5e0278,0x3b9c4695,0x3b6d76c4,0xbb53a976,0xbb9b248e,0xbbbbd5bc,0xbc1fbc3b,0xbbe24d58,0xbbb3dd34,0xbba284aa,0xbb919557,0xbba833d4, +0xbb9fea0a,0xbb73467a,0xbab79050,0x3b1a7def,0xba03769e,0xba3345ca,0xb9750538,0x39dde3a4,0x3b6827b9,0x3be1885b,0x3bda9325,0x3bafeca0,0x3b166e4f,0x3b8ac421,0x3bc1c7c2,0x3947849f,0xbaf265ea,0xbb31cf61,0xbbd1c851,0xbb690216,0xba99473b,0x3af7de1e,0x3b9c2760,0x3b1e7628,0xbb9edadc, +0xbbb85558,0xbb959910,0xba8d5c33,0x3b7dfaca,0x3bc17954,0x3bce9fac,0x3bb4a66d,0x3b751c0c,0x3b8f3e48,0x3b0b5a24,0x3ac34748,0x3a9c162b,0x3ac6f5f9,0x395d4d16,0xbad2aed6,0xba91cc2a,0x387393ad,0xb881d600,0xb8807f65,0xbaee8790,0xbb831297,0xbbeb034b,0xbb8e3013,0x3b736ef0,0x3bb64c8a, +0xbbd2723a,0xbba27d67,0xbbd53977,0xbb39c160,0x3bbcd0da,0x3b87cbda,0x3b6d9a75,0x3b74072c,0xbb59de96,0xbb742101,0x3b04e19e,0xba629e3c,0xba143b06,0xbac83497,0xba1f138d,0x3a063549,0xbac56d2a,0x3988c5f1,0xba07d316,0x3a393de8,0x3a2f4251,0xb9a7d183,0xb9ffb9bc,0xba67ce5c,0xba26dd62, +0xba797608,0x39044fa1,0x392c173d,0xb8c70af7,0x39abc14e,0xb91988ce,0xbb0d5bab,0xbb6aeb14,0xbb28a5a6,0xba9bd588,0xbba29989,0xbbab0906,0xbb4d0355,0xba0569b0,0x3b4cdcac,0x3c5b78d5,0x3c2180ff,0x3bed665c,0x3ac68314,0xbba062aa,0xbb934afd,0x3ba3c09c,0x3b4d2251,0x3b117a4b,0xba763035, +0xb9d5ce0e,0xba88edb6,0xbaa5ca38,0xb94a04de,0xba171745,0xb9aff220,0x3a958ce6,0x397aa5f7,0xb96501ca,0xba1c53d4,0xba70adaa,0xb9575605,0xb8bcc09a,0x3835f6bc,0x37627b7d,0xb8b45001,0xb961bd84,0xba593f5e,0xb90e7be7,0xb93b72ae,0xb8c8d4bc,0xbb886be6,0x3aadc4c8,0xba053169,0x3ba80866, +0x3bea58af,0x3c05a01b,0x3c0ef7bc,0x3bdf8d42,0x3a368744,0x3b48935d,0x3b0680af,0x3a61573b,0xb967c4ca,0x3a72a032,0x3a2123fa,0x3b33bb6c,0x3b6ef423,0x3b696eaf,0x3b28d506,0x3b08427c,0x3acfbe32,0x3a991f52,0x3adaceec,0x3b153a0f,0x3abacb2f,0x39c4665f,0xba340713,0xb980295b,0x38a02f38, +0x377bcbb1,0x38e0e8bd,0x3a37b202,0x3ac1dcd4,0xb932536f,0xb90396a8,0x3b726825,0x3b475f6d,0x3b2c04d4,0x3bb14027,0x3bd395db,0x3bd4efb6,0x3b3d75d8,0x3ad79551,0x3a1ef2ae,0x394987c5,0xb8a17539,0x3a8ab31c,0x3b9a94a1,0x3b73fb1d,0x3b6d3461,0x3b4d6103,0x3ab1e928,0xb8a24bb1,0xbaf3e7f9, +0xbaee6fbb,0xbb0ebb20,0xbb0762e7,0xba918cfb,0xba9a0f0d,0xba2dba65,0x38808e37,0x398746a9,0x37261a09,0xb9a01302,0xb9bc340f,0x392766fa,0xb93fe5f9,0x34789d01,0xb9ae0ed5,0x3a2da91e,0x3a2f03f1,0x394c8149,0xba1efd9e,0xbb10ba55,0xbaee426d,0xbae4f78f,0xba948fb5,0xb9f4fbc6,0x3a2494b2, +0x3a9f971f,0x3b212ada,0x3b7441bf,0x3b90fef0,0x3b99db2b,0x3badb8f9,0x3baf97ec,0x3b949938,0x3b83a31b,0x3b353ede,0x3a9ac928,0xb9401c66,0xba9eb502,0xbafa89f6,0xbb06d810,0xbac77e32,0xb955aabd,0x39bb5912,0x3a4dac69,0x3a94df4d,0x38c84c96,0xb68d6e09,0xba324695,0xb99a0b37,0xb8b9dc1f, +0xb9c6d6a4,0xb9d6b3b7,0xba710f2a,0xba2915b8,0xba234991,0x3b0dbd9e,0x3ae791e4,0x3a6b839d,0x3a8af478,0x3aa77aac,0x3b0b8237,0x3b37a3c9,0x3b67223a,0x3b6721b6,0x3b78309d,0x3b812dd1,0x3b54762b,0x3b161af7,0x3aa15c32,0x3a7fb09f,0xb9124f60,0xba59ed65,0xba70cf0a,0xba9fb2eb,0xbaa215aa, +0xba591a2b,0xba7bcea7,0xba5284e7,0x390fca61,0x3a3d2294,0x3ad4c077,0x3b07757d,0x3b07be24,0x3b0e207d,0x3b0233c6,0x3af42bb7,0x3b090807,0x3b10c54c,0x3b242c15,0x3b29c2d4,0x3af0325b,0x3b726a49,0x3b5c1fc5,0x3b4c3f68,0x3b5dd43b,0x3b59cf4d,0x3b4136d3,0x3b2b3679,0x3b285f1e,0x3b0952dd, +0x3ac6f2d4,0x3a83d788,0x38846539,0xba55b93e,0xbab5a2c0,0xbac42537,0xbac5a59a,0xbab927a5,0xba9ab560,0xba888f52,0xba291e60,0xb9c754f5,0xba62e10f,0xba61d2d4,0xb9a3dd82,0x39c50b1d,0x3a8ed2e6,0x3a8cea8b,0x3ae68c2c,0x3b3430d7,0x3b02df56,0x3b23b6de,0x3afdd1d1,0x3b232e7b,0x3b402310, +0x3b5cc907,0x3b576092,0xb975fdf9,0x395a6642,0x3993b97b,0xb9612279,0xba1c6776,0xb96a4b6b,0xb9cd4180,0xb9b9c1e9,0xba5d92f5,0xba8815a2,0xbaa2c174,0xbaad5a49,0xbaabc737,0xbaca3418,0xbab79931,0xbac06d08,0xbaec62d3,0xbafbb712,0xbb14cbfe,0xbb14577a,0xbadb8662,0xbac2ed4c,0xbaa086e6, +0xbaaeb67b,0xbacf2b01,0xbae82fe4,0xbab79928,0xba93a8d9,0xba90cf29,0xba065f2c,0xba0e91f8,0x39c33aab,0x3a37e2e5,0xb906eb6c,0xb9942edf,0x3a04725b,0x3a3c0083,0x38812546,0xb7ad9cd0,0xb670f884,0xb8d06e04,0xb92343a8,0xb99d36e3,0xb9aa3f88,0xb9ff6e75,0xba2ca73c,0xba61041a,0xba8a7087, +0xbaa30fa2,0xbab79bfe,0xbab1cb54,0xbaacfd4c,0xbaa3a94b,0xba925790,0xba87796a,0xba965691,0xb99e3b43,0xb91e2e4e,0xba7e7e64,0xb934dead,0x38f3123f,0xba515c41,0xba312752,0xba0bfe71,0xb9d2cfc7,0xb96a22a9,0xb937ecc2,0xb8e050b1,0x39fae3c7,0x39c729c6,0xb9195c70,0x3a33e2f9,0xbac271a7, +0xba86fdf7,0xbad49e1f,0xba0041f6,0xba08f57e,0xba111de7,0xb9cd71f9,0xba2bbe99,0xba4c82bf,0xba7380ae,0xba575438,0xba408d93,0xb9fbb99f,0xba2d5452,0xba2aa8cf,0xba2efdfb,0xb9de70c9,0xb9cf2eb9,0xb9ef848d,0xba14af2a,0xba128b47,0xba2519bb,0xba9d5d45,0xba3405e6,0x3ad83158,0xbaba410c, +0xba7af7c3,0x3a93b6ed,0x3a97c407,0x3a98afaa,0x3a6281ff,0x3a66e9b2,0x3a3c5c74,0x39aab30b,0xba83df68,0xbad5466a,0x3a869335,0xba226cab,0x3914a4a6,0xba8cd3fb,0xba04cdd7,0xb9bd061c,0x39e497db,0xb9a9404b,0xba841065,0xbae3cbe0,0xbae6a5c1,0xbabbdb28,0xb96a0837,0xb9fa5730,0xba22944d, +0xba6c0669,0xb96b0bb7,0xb8f7faa6,0xb99f714c,0xba1cb238,0xba36de2b,0xba43dfb0,0xb98ed178,0xb9cfab2d,0x381624e7,0xba74ef6e,0xbab735b4,0xba5795a7,0xbabb7237,0xbacb8bfd,0xbb09cb68,0xbaf070a0,0xbad84f73,0xbac67cd0,0xba53d2cd,0xba509bdc,0xba795003,0xba30d4f5,0xbab72d59,0xba35d279, +0xb8a62ef0,0xb8164978,0x3a8fabba,0xb9af2a6f,0xba916fce,0xbb1f2468,0xbb08213e,0xbad4c451,0x393298e6,0xba4d9de6,0xba14afa8,0xba5bca6e,0x39fe1c5c,0x3a2e5b35,0x399044a0,0xb99b350f,0xb9cb68b1,0xba0cdc20,0xb9b87590,0xb9013db4,0xba855424,0xba028466,0xb9d82791,0xbb274222,0xbaa35f7e, +0xbb0659ee,0xbb49b4e7,0xbb0c7cde,0xbb183b20,0xbb340f14,0xbac93095,0xbaa6f6cb,0xbac07b1c,0xbad384d9,0xbacf38ba,0xb9881871,0xb93334f2,0x3a2bfcd3,0x3b3e672d,0x3a72a244,0xba934559,0xbb46a6bf,0xbb8050a9,0xbb32703e,0x3aab58d0,0xb90b66a2,0xb9222c1f,0xbaa29fa8,0x3a521a42,0x3a97a209, +0x3a2c99d2,0xb90d759b,0xb9d8f6d6,0xb9f2e5ff,0xb986b8f0,0x390a56de,0xb9f1b8be,0xb9b53eb3,0xb96d8acf,0xbb36c915,0xbb24f4aa,0xbb5ff12f,0xbb8602bd,0xbb9a295a,0xbb8560c6,0xbb7654f7,0xbad62ff3,0xba23990b,0xbb012021,0xba97fd9c,0xbacda1f2,0xb9dccfbb,0x3a09b033,0x3a484a35,0x3b298787, +0x3a1f9616,0xbaa6b728,0xbb69c1eb,0xbb5a0f01,0xbb0bc493,0x3a93dc07,0xba36645c,0xba1cefc4,0xba4cb034,0x3afc74f4,0x3b1906e4,0x3ad50f27,0x39f2e8dc,0x3a22e8d1,0x3a06a9c9,0x3a6ed978,0x3a85dc46,0xb919a693,0x3a3d91ee,0x39e0ed2b,0xbae146fd,0xbab24f4b,0xbadb1ff6,0xbacdb448,0xbb77b4e2, +0xbb75c463,0xbb6eb4b2,0xbb29ab60,0xbab487f9,0xbaecc7a2,0xbacf6e9b,0x3af49643,0x3a4668c6,0x3b87391c,0x3b1c9da7,0xbace00ec,0xbb03b76c,0xbb675b91,0xbbbe8cff,0xbb83da94,0xbb13c9b4,0xba8ac722,0x3b811e28,0x3b864a39,0xba15a0c8,0xbb82a7ad,0xbbbaf154,0xbc093a28,0xbc018671,0xbc0391c9, +0xbc0ba5df,0xbbf1b427,0xbbbd44ab,0xbbc06c2e,0xbb5381d5,0xbacef2d7,0x3b079893,0xb9edcc3d,0xb99e8831,0x38affe2a,0x39febc9a,0x3b554fa6,0x3bc173ef,0x3bcb3ca6,0x3b892c31,0x3ad4050a,0x3ace96dd,0x3b0dd68c,0xba59a59f,0x3967a6b4,0xbb3e9293,0xbbcc6b56,0xbbe098df,0xbb8d31e1,0x39f28138, +0x3b3a4d11,0x3aa7f915,0xbb9243fc,0xbbd4ce20,0xbbc3aaf7,0xbb3dc602,0x3a86c7c5,0x3b218974,0x3a405ae2,0x3ab90221,0x3ace1d8b,0x3b1ff95e,0x3ac539a7,0x39cef7f4,0x3a1aa13d,0x3a6abfe1,0x379fc023,0xbac3b2c5,0xba85ed2c,0x380a052e,0xb92c386a,0xb9621e93,0xbae5fdb7,0xbb7a8b5c,0xbbe5d54c, +0xbb9275f3,0x3b4b1e8d,0x3b2ce799,0xbbe4a8fc,0xbb9bb6ff,0xbbe923f5,0xbbac051d,0x3add5009,0xbb820aa2,0xbba278a7,0xbb74d5de,0xbbc423e7,0xbb7d47cd,0x3a92ec13,0xbaf36920,0xbb3d0ff7,0xbbaa8cc2,0xbb6486c0,0xbb04f2c2,0xbb401efb,0xba94bf93,0xba990719,0xba94aa4e,0xba95b7c3,0xba806c34, +0xbad1348a,0xbab9b50d,0xba9a33c3,0xba196e36,0x38165635,0x396f058d,0xb8abbe1d,0x39944654,0xb8fc8b14,0xbb181c01,0xbb481fe9,0xbb10aa4d,0xbb4a123a,0xbb9695a3,0xbb9c6294,0xbacec7ad,0xbb23742c,0xbb0819ae,0x3ab8df32,0xb9ba7a0b,0xbb13df55,0xbb8206a8,0xbc0bf73f,0xbbefa007,0x3a890f80, +0xba26fce6,0xbb0705b0,0xbbb0764e,0xbb7d895b,0xbb5820e4,0xbb0ffd41,0xbaa08072,0xba5137f0,0xba96e19b,0xba240afc,0xb9198c06,0xba274eae,0xba99058f,0xba83e24b,0xb8f686f4,0xb8f06e59,0xb7d23b91,0xb88b6966,0xb8ae0099,0xb9706725,0xbab921ee,0xb98043d4,0x37046f15,0xbb120ea3,0xbb82375b, +0xba1d2417,0xb9e57c3b,0xb8a2daf9,0xbab6001c,0xbba77deb,0xba8b2505,0x3954affc,0x3910b078,0xb8d67523,0xba65bb86,0xbb07a991,0xbb4d9ed2,0xbacee7df,0xba4a627c,0x397f0c79,0x3a337017,0x3a1630ef,0x3a255ee4,0x3abbbbc1,0x3a8baddc,0x3a8648c5,0x3abe9cab,0x3ae5f54d,0x3a5eef4f,0x39110920, +0xba582a09,0xb9572cba,0x385c3a35,0xb852fe2a,0xb7880223,0x39e4accb,0x3a800410,0xba43f558,0xbab9c909,0x3b2020e8,0x37f2fb9c,0xb76a299a,0x39848167,0xbb2c0635,0xbb4172e3,0xbb9841f5,0xbbd9970b,0xbbf4a33e,0xbbd27e85,0xbbae6602,0xbb9534df,0xbb21b5c4,0xbaf536ce,0xba1fec1a,0xba680f9c, +0xba00eecb,0xba2667b4,0xbab82bc8,0xbace4f34,0xbb09c5d8,0xbb2aa540,0xbb21580f,0xbafe9fd8,0x37001191,0x392c815a,0x3982f528,0xb923e7bf,0xb9f145a4,0xb98fd50c,0x38e67403,0xb981c8db,0xb9d03bb4,0xba9f31dd,0x37f0d378,0x3a4a1181,0xba097890,0xb89a5ba2,0xbb282df2,0xbbc1b7f8,0xbbad5715, +0xbb9ddd14,0xbb88b4f0,0xbb369052,0xbae68a10,0xba98e66f,0x3af7dd40,0x3b76b692,0x3b9183cf,0x3b8e30f6,0x3b67fc13,0x3b2b9119,0x3aff5611,0x3a6a2ab9,0x38d9fc83,0xba756023,0xbabda8fe,0xbae4c978,0xbb0492e1,0xbabbc9c3,0xbab58fb0,0x380fc644,0x39ffda70,0x3a0d32c9,0xb8b671b8,0xb9f57a26, +0xba8351bf,0xba532c05,0xba2bad8c,0xba6873eb,0xbaac1b1e,0xbb052277,0xbb162e81,0xbb5b46be,0xb927830c,0xb9c5d5c4,0xbaa899a4,0xba7dc613,0xb9855795,0x38c900a1,0x39dc8111,0x39fd80c0,0x3accd782,0x3b146441,0x3b2e375b,0x3b060f85,0x3aa9f3bf,0x39d602ad,0x389062bc,0xba32d61d,0xba8c610e, +0xbaaf46bf,0xbac3607d,0xbae3571e,0xbae8c861,0xbaaa6d35,0xba8e234f,0xb8d8bd8e,0x3a5e6e6a,0x3af42f72,0x3ae45608,0x3af38080,0x3b010652,0x3abeba03,0x3aa2294d,0x3a88c1b7,0x3aac2471,0x3abbb289,0x3a7a2961,0x3a04860e,0x3b1603e7,0x3b029943,0x3b16bcc3,0x3b010ba9,0x3ae3ed15,0x3ab22c09, +0x3a987834,0x3a80f704,0x39c89d40,0xb961006a,0xba11f6cd,0xba220909,0xba6f6bbc,0xba930634,0xba9746c5,0xbaa0d856,0xba961449,0xba9fae1a,0xba68201b,0xbab1bc62,0xbaacaf82,0xba8c92dd,0xba9f439b,0xba02d556,0x38c505f3,0x3a1aa40a,0x3a974d7d,0x3aaa8b43,0x3ad1a6ba,0x3acba858,0x3aca2edf, +0x3aab0fb7,0x3a7be893,0x3ae7ace1,0x3acf02c2,0x3af4c5f8,0x3a0c30ef,0x399108ea,0xb929cb16,0xba223639,0xba87ff8d,0xba866dcf,0xbac7519f,0xbae6fda6,0xbabccdcc,0xba929bb3,0xba853c7c,0xba911665,0xba9bb116,0xbab99843,0xbab4e011,0xbaba8187,0xbacee798,0xbadc8273,0xbade43d9,0xbb02b373, +0xbb12c4a1,0xbb0aaffb,0xbb0bd70a,0xbb0f7d4f,0xbb16e34c,0xbb2147a1,0xbb13d14b,0xbb189d86,0xbad7468e,0xba9f2222,0xb9f7ea63,0x3948762f,0x39678515,0x392e9948,0x39eaefbf,0xb91318b0,0xba98fc4e,0xba04bab2,0xb9f7ca7b,0xba15f05b,0xba3b755d,0xba47d75f,0xba57026d,0xba733b37,0xba96f534, +0xbab5946d,0xbac75e54,0xbacd9282,0xbacc8793,0xbacc2b5f,0xbac57857,0xbac38373,0xbac0e429,0xbab8c728,0xbab2eb06,0xbaa638f5,0xbaeb84c1,0xbad895c1,0xba2a5bf2,0xbaec5942,0xbac7e9c3,0xb9b06508,0xb91f06ef,0xb8ab21ba,0xb826b15f,0xb864ae59,0xb966e095,0xb97afe99,0xba8ed485,0xba9de80d, +0x37b98c23,0xba45ee21,0xbb23d07d,0x3b0f4eb6,0x3b0fba0a,0x3b03c071,0x3aca8e9c,0x3ad04885,0x3ad47b1e,0x3aec8d0d,0x3aeea032,0x3ad4b3ce,0x3adaf886,0x3ae47e26,0x3af9fe6c,0x3ad8c920,0x3ad683b1,0x3ad665bb,0x3af5e38c,0x3b04100c,0x3b018a66,0x3af7d941,0x3adb2c7c,0x3ae9d76d,0x3abb9eb6, +0x39f1bbb0,0xbafd5884,0x3ae35d2b,0x3a0be654,0xbb0a32b5,0xbafa085e,0xbae9e172,0xbad2b8b0,0xbae78e51,0xbadb5ffb,0xbac4d3ad,0x399a1531,0x3aea6f0b,0xbad8f0af,0x3893b744,0xbab5ed50,0x3b03f5a4,0x3aef1a9d,0x3b0fa5f7,0x3b2a26c7,0x3b67a237,0x3b6098de,0x3b222bd6,0x3b166b4a,0x3b28cd04, +0x3b61942d,0x3b457864,0x3b3d73d5,0x3b3bbb8b,0x3b5f2ee2,0x3b6948cf,0x3b4f92dd,0x3b2f3cda,0x3b142583,0x3b14693d,0x39cbf40f,0x3a76f600,0xb7ab6b31,0x3a3f1985,0x3aa58a61,0xba767a2e,0x3948bc13,0xba104070,0xba522a0b,0xba0ad9dc,0x39696445,0xba80e298,0x3919d257,0x3a2598f0,0xb8b2918c, +0x39c2e189,0x3a8d1776,0x3b4a02b1,0x3ae51747,0x3b206f9e,0x3b301cf6,0x3b88ab9f,0x3b90be2c,0x3b2d0734,0x3b43e26f,0x3b482227,0x3b95330e,0x3b4965d8,0x3b5563d6,0x3b48e1bf,0x3b956ff7,0x3ba34c13,0x3b9e61c6,0x3b7347bf,0x3b568f53,0x3b07031a,0x3a264c6f,0x3a6ff709,0x3a86cdd1,0x3a2af6ec, +0x39461348,0xba55bba9,0xba2373a5,0x3a26a15d,0xba9ca3d3,0xba040a5c,0xba6acb4b,0xbacfcf65,0x3951fc2e,0x39ca73aa,0xba146d81,0x3adbb7ba,0xb9baafe5,0x3ab20caf,0x3af8d7eb,0x3b2c385f,0x3b846006,0x3bce2129,0x3bd49c18,0x3b7bd2b4,0x3b510569,0x3b71adcd,0x3bdfa733,0x3ba6544a,0x3b9c25be, +0x3b98a71b,0x3bdbf452,0x3be1070b,0x3bc1ae70,0x3b91afa0,0x3b55d016,0x3b16f1dd,0x3aa8a44e,0x3abb84bc,0xb987f136,0x39ac5cd2,0x3942a05b,0xbb1ae9fb,0xbaf2cf45,0xbb5aa686,0xbb881838,0xbb885ce7,0xbb61da8a,0xbb6476d0,0xba6e325e,0xb8953ab3,0xba6da1f8,0x3882af20,0x3b0102c7,0x3b3472a1, +0x3ae1fd70,0x3b283486,0x3b2a87f0,0x3bd4b089,0x3bcff6f7,0x3b760327,0x3b871a48,0x3b932c46,0x3be00fc1,0x3b855be3,0x3b81acad,0x3b8274c7,0x3bf80f8f,0x3c0b6788,0x3c0676dc,0x3bca3408,0x3ba39da8,0x3b42af0e,0x3a91314b,0x3ace531d,0x3969be17,0x3a83394d,0x3a092aff,0xbafa16f3,0xba9b6875, +0xba9b5c00,0xba8ee67b,0xbb508594,0xbb4d0cbc,0xbb821ea6,0xbaf0ca78,0xb9db5666,0xbaaf0ca2,0xb91b84f9,0x3b7f9679,0x3bc5eaa8,0x3c213935,0x3c095ba1,0x3b978ecd,0x3b9864ed,0x3b9a4706,0x3b764dd5,0x3b269383,0x3ae0e272,0x3b106515,0x3bc09e2f,0x3bb178e2,0x3a1051b5,0xbb2c8cad,0xbb8fdb42, +0xbbf77883,0xbbc289be,0xbb97778b,0xbba07280,0xbbc7fbb4,0xbb999321,0xbbaf940c,0xbb00a664,0xba452b51,0x3af12ab6,0xb93082f3,0xb852d0be,0x399ac295,0x3a6f6f87,0x3b6b9e4d,0x3bbcb0d7,0x3bd28ea9,0x3bafea17,0x3ad1486f,0x3bb50174,0x3b65a95d,0x3ac90c38,0x3a87cb2d,0xbacb02ac,0xbbc0a74b, +0xbb8993a8,0xbb19b203,0x3ac60562,0x3b9ad32c,0x3b72327a,0xbb132b47,0xbbbc9f82,0xbbbc8a55,0xbaf3ed0b,0x3b46f063,0x3bcefa34,0x3c0db9ee,0x3bebda65,0x3bc0ff3a,0x3b7043dc,0x3a30d091,0x3a6a66e6,0x3a83ea72,0x3ac5bcb8,0x39f4f40f,0xbaae4d1c,0xba394dd2,0x3924e152,0xb94ccc5a,0xb9238dd4, +0xbad2f64e,0xbb54e193,0xbbce919f,0xbb5579e9,0x3ba6f8f1,0x3b60201e,0xbba32911,0xbb255ce2,0xbbd24dae,0xbb1863d5,0x3c0e15a5,0x3ba9b98d,0x3bad4458,0x3bd894ff,0xb81b6ff1,0xba9c10f6,0x3b3bfbbb,0x3afdc17d,0x3b2caebb,0x3a357260,0x3acc4479,0x3afa221e,0xb9bc9248,0x3a713010,0x399e7743, +0x3a38fcce,0xb89c77af,0xba314ad3,0xba85e502,0xba232fd7,0xba192497,0xb9d9b1fd,0x39857243,0x38904267,0xb693ff65,0x39975de9,0x39b1aa69,0xbb009826,0xbadac8fd,0xba950218,0xbb5435f2,0xbb7aab01,0xbb8d1e5e,0x3a8cb798,0x3a380684,0x3b707260,0x3c76660f,0x3c49e8c5,0x3c39e4bf,0x3bdbf7a6, +0xbaac9776,0xbb35ccb3,0x3b9247cd,0x3bba27e7,0x3bae4a65,0x3ad4917b,0x3adb3b01,0x39ca2613,0xba27343f,0x37a790de,0x39b4076d,0xb95dc639,0x3a3e4607,0x39c07653,0xb8d8e8e1,0xba3a164d,0xba0e8008,0x38abdae4,0xb73dc1f1,0x359a5d63,0x386a88d2,0xb8e10d02,0x36eadc44,0xbaae6baa,0x38eb8ef5, +0x39f04ecf,0xbb67ec05,0xbb66dae5,0xbb1e0784,0x3b584456,0x3bfd642a,0x3c0e4f5a,0x3c138f11,0x3c34e83e,0x3c1c4f5c,0x3b4def1d,0x3b4d2341,0x3a9b82b3,0x3a6eb094,0xba9e39b1,0x392bb1de,0x39d56ad9,0x3b342a85,0x3b76b33f,0x3b9063f6,0x3b7adf34,0x3b65f064,0x3b15e702,0x3ad22b9f,0x3b07bfe6, +0x3b0f652d,0x3aa51b38,0x39ad0434,0xba0612a1,0xb755bfba,0x382c403f,0xb85bb55f,0xb7a97240,0x39ad0360,0x3a4e5937,0xba36170e,0xba43c4a4,0x3a22b1a3,0xbaebf469,0x3b0788fb,0x3b6ab38e,0x3c0ceadf,0x3c0448b0,0x3bb09df2,0x3b569824,0x3afe821e,0x3a992ea3,0x39e9230d,0x3a385cf6,0x3b82aba1, +0x3b3cec96,0x3b7c5efc,0x3b4ece74,0x3aaaa97f,0x388615ac,0xba94c949,0xbab213d5,0xbaae91c2,0xba52f911,0xba5f4858,0xb9f3dee0,0x3a149212,0x39e2969e,0x39d45563,0x38d8491a,0xb94ffd24,0x37bf911a,0x39bc0210,0x3709f329,0x38fb743c,0xba586da4,0x3a260fd3,0x39c6f9e0,0x3a87c08f,0x3b007b1a, +0xbb945503,0xba91eec2,0x38fb9042,0xb8a56b62,0x398634d1,0x3a4b0533,0x3aa5a7a1,0x3b28a7df,0x3b529126,0x3b746b1a,0x3b8663a1,0x3b9fbdea,0x3ba43fda,0x3b9340cc,0x3b860463,0x3b486848,0x3aecaa18,0x3996ef77,0xba481552,0xbb08e5af,0xbaf86837,0xba5a6b59,0xb9173f09,0x3a3e4a96,0x3a7eff19, +0x3a31c479,0xb836dd12,0xb9aee5af,0xba11b3e5,0xb9e63a45,0xb8f3c59f,0xb9eaecc3,0xba8261da,0xbaa121d2,0xbaaded7f,0xbab9d269,0x39dab05c,0x39d8a757,0x3a646dc0,0x3a5fd5a0,0x3a7ff877,0x3af3bb9d,0x3b3016be,0x3b7b8581,0x3b6fb543,0x3b7c6094,0x3b7a2ea0,0x3b5e7192,0x3b2b0367,0x3ad9a73f, +0x3ab7b180,0x3985592c,0xb9a04cc0,0xb9fcadc8,0xba3f3d61,0xba615ed7,0xba8a1569,0xba848f02,0xb9887117,0x39968ea7,0x3a9225b9,0x3b009dc7,0x3af3b165,0x3ace20c9,0x3adecf6c,0x3ab822b7,0x3a91cf5f,0x3a714e94,0x3ac2b630,0x3ad24179,0x3a81150d,0x3a277bac,0x3b237dd1,0x3b5d4f74,0x3b4fe932, +0x3b5c538a,0x3b6d0c73,0x3b751071,0x3b75c697,0x3b8010e5,0x3b538e78,0x3b24fde9,0x3afd7b57,0x3a596ddc,0xb94b86ab,0xba864c9c,0xba80f9aa,0xba7790ef,0xba3cdbe4,0xba203b13,0xb8a2f95b,0xb9a8cd34,0xb860e6f0,0xb9ed571e,0xb94ae24b,0x3979bf94,0x3a785701,0x3ae5c5bb,0x3ac807b4,0x3b32be5a, +0x3b195483,0x3b15026d,0x3af4cf8a,0x3ac27951,0x3ae5f223,0x3ad9eca9,0x3b22dc25,0x3b31abce,0x39733980,0x3ae04d10,0x3adf76ab,0x3abea2c1,0x3a85a25e,0x3aaea47a,0x3a90084e,0x3aaf0d2c,0x3a38d7ea,0x39a44a49,0xb8db9fca,0xb9cdb0cb,0xba1dbadd,0xba94cfb6,0xba81f493,0xba8ca7a0,0xbab2c466, +0xbac5c1d9,0xbaf4842f,0xbad5d742,0xbae3387d,0xba98f1ab,0xba818f21,0xba4adc2c,0xba8e049c,0xba97265e,0xba63e4a5,0xba15b36a,0xba3578e9,0x3950b16d,0x3a604a03,0x3a5aefa2,0x3ae5e8ee,0x3a897f3f,0x3995c061,0x3b062abc,0x3a2b4243,0x3a76279d,0x3a3e3baa,0x3a419403,0x3a38e1bd,0x3a45e2c9, +0x3a34e9c7,0x3a3d1844,0x39ec79a5,0x3985e6a4,0x37a3bb8d,0xb96c87be,0xb9ef0382,0xba2d5d33,0xba176645,0xba0bc008,0xb9e8ea16,0xb99a9d35,0xb9801d9b,0xb93ee5eb,0xb8d515ca,0xba3e823c,0xbb00b4c2,0x38de56cf,0xb9d02138,0xbaee6a22,0xbaf01ec1,0xbacbe5b3,0xbaaffe7c,0xbabf5fcb,0xbabb42b8, +0xba9abd4a,0xb8fd38d3,0x39fc9ea4,0xba9edf49,0xb9630f4b,0xb9fe57d2,0xbaba18b1,0xba9f054c,0xbae040f5,0xba848bc4,0xba82e4eb,0xba5cabc1,0xba887542,0xba9b0408,0xbab737b7,0xbaa9a525,0xba9ee247,0xba7457d7,0xba9a430b,0xba9e5a84,0xbaa20f46,0xba856867,0xba812573,0xba81c214,0xba8c303c, +0xba793f4a,0xbaa8680f,0xb95ee1d2,0x3a64a95f,0x3b3bee0a,0xba5f0606,0x3a15fe5c,0x3b25fddf,0x3b2cd91f,0x3b26f8c3,0x3b083ba8,0x3b2af283,0x3b1fefd7,0x3af5140f,0x3a5988ce,0xba8d5593,0x3b122ff2,0x3aa93916,0x3b383b23,0xba920db7,0xba9e4180,0xba635359,0xb89f14cd,0xba0cf8ff,0xbaa2eee7, +0xbb17c67f,0xbb183756,0xbb080bae,0xba45f86c,0xba8c63b8,0xbaa24cc6,0xbac1c71b,0xba67d67b,0xba5addcd,0xba75bffa,0xba883c5e,0xba9e3c3b,0xbacb762c,0x3a8a3c84,0x38b3dfc4,0x3a1161eb,0x38b24292,0xbaa3e99d,0xb998fd37,0xba55b879,0xb9bdb399,0xbabd9fb2,0xba2caf74,0xbb021bbe,0xba85a008, +0x38ae72f1,0xb7fe6084,0xb8f421c1,0xb8aa1d97,0x39b045f4,0xbae263a4,0xba62d7bb,0xb9ee6d80,0x3a17607a,0xb9a5a46a,0xba70d171,0xbb399bc3,0xbb24b4ac,0xbb0eacc8,0xb95aa579,0xbac98c05,0xbac1d2d1,0xbad3ec48,0xba22a783,0xb980cb1c,0xba127edb,0xba1777a7,0xba94a73d,0xb8b6ab9a,0x3ac418b3, +0x3995b253,0xba18ffee,0x378320ac,0xb995868b,0xbb05a753,0xba6ccabe,0xbb1e00a8,0xbb0e4254,0xbafe94a9,0xba9b7fe8,0xbb3a28df,0xba88973a,0xba231659,0xba2a8c19,0xbae658f3,0x3a17f0bb,0x39773659,0xbac020fb,0x39816085,0x3b0ab20d,0x3aa497a0,0xba26faf9,0xbb6a191b,0xbb909035,0xbb649174, +0x3a4afb84,0xba649876,0xba8141eb,0xbae14411,0xb90925e4,0x3987c3d2,0xb8f0cd43,0xba0178a7,0xba8b0db0,0xb9ab0ecd,0x3998404a,0xba362bb1,0xba04ff8b,0xbaabe8ba,0xb9c0f1a2,0xbb5aa4ea,0xbb02b619,0xbb4b51da,0xbb8da641,0xbb8ba8bd,0xbb554c65,0xbb8f99a1,0xba18e54d,0xb933cbcd,0xbb0dc79f, +0xba8c6811,0xbad31d42,0xb9e16b3e,0xba91e8ea,0x3a005372,0x3adf318d,0x3aa40d0a,0xb9be4b7d,0xbb6ce8f8,0xbb6bb36a,0xbb2b64bf,0x3a3ac4e4,0xbae0d55e,0xbb106415,0xbb030357,0x3989aa0e,0x3a77ecff,0x3a1928e9,0x39a2f088,0x394b6fb5,0x3a2a95e7,0x3b3d5bc5,0x3a05575e,0xb9e3136a,0xb7e3d982, +0xb99a72d4,0xbb012187,0xbaa43555,0xba8968c9,0xba7ff903,0xbb2aa77e,0xbb38a726,0xbb80fd4f,0xbb06207f,0xba785395,0xbb22de30,0xba32ae86,0x3ba4fe15,0x3b5cda27,0x3b5f2e7b,0x3b260168,0xba1ccb5a,0xbb06f385,0xbb684965,0xbb9ec4bc,0xbbb2b932,0xbba4c52a,0xbb8b370b,0x393bd67d,0x3ae35ba1, +0x39ed587b,0xbb7eef47,0xbbc13ac2,0xbc26624a,0xbc1fc2c4,0xbc1e22ab,0xbc0fcdd9,0xbbe8b417,0xbbd3382e,0xbbb32b5a,0xbb03f857,0xb94ade28,0x3aaac494,0x383c6fee,0x393b9dec,0x39bda5b8,0x3a4e17d2,0x3b4f2356,0x3b9dc346,0x3bb916fe,0x3ba460ff,0x3b6abe4a,0x3b654e6b,0x3a78878b,0xbb026819, +0xbabb61f0,0xbb43bcab,0xbbb9d48e,0xbbd839be,0xbb896786,0x3a904c0a,0x3b3fcd8b,0x3af98557,0xbb301039,0xbbc36054,0xbbd0d973,0xbb57e853,0xba4d3be5,0x3a587d14,0x391578fd,0x3afac8c7,0x3aab552b,0x3b1c8ad9,0x3afb6750,0x3930e829,0x3a1554c7,0x3a32c20c,0xb8e6e0d2,0xbab045be,0xba1d5cbd, +0x37116eca,0xb9832437,0xb94e69ee,0xbac6407a,0xbb477802,0xbbadb2c1,0xbb6177db,0x3b81f36d,0x3abfa9e5,0xbba7a832,0xbb5b8fe4,0xbbebd193,0xbb9e72b1,0x3b5664e7,0xbb37c0f4,0xbb749f64,0xbb2318f3,0xbbd3d511,0xbbb5a80f,0xba46aac2,0xbb29fc86,0xbb33122a,0xbbb7368c,0xbb8ac991,0xbb30d25a, +0xbb36fb3e,0xbaa8b4ba,0xbb006733,0xbad6da87,0xba963250,0xba9f383e,0xba8d56ea,0xbaac0c25,0xba4f165f,0xb95df72c,0x397de1a8,0x37dca0b4,0x37d42977,0x38e8f08a,0x3a1c2208,0xbad96a96,0xbabfe703,0xba4e0e95,0xbb8f5bc8,0xbb3608aa,0xbb47bafd,0x3b3c0246,0xbac60f11,0xbaf36d8b,0x3aa7592a, +0x387e8b09,0xba9529ae,0xbb003635,0xbc093233,0xbc06417c,0xba3b7595,0xba581072,0xbaa02db4,0xbba9135f,0xbb81dfd0,0xbb6bdd40,0xbb24f80e,0xbad283b2,0xbae23d29,0xba820755,0xb90beb47,0xb876d909,0xba3299a1,0xba22f5b2,0xba3beea4,0x395ea30c,0xb9103a89,0xb7228a96,0x38c628d4,0xb968c2fb, +0x38911cf1,0xbac69ef3,0x39dcd161,0x399fdcef,0xbb9c5025,0xbb8e6a1a,0xbb4a9bc4,0x3b8888b5,0x3ad0bda7,0xba2859c4,0xbbf56aad,0xba61815b,0x3abe6f1f,0x3adbaeac,0x3a924526,0x38e017ae,0xba81f523,0xbb28dd0e,0xbada050b,0xb9e2ed66,0xb900924e,0xb913833b,0xb9ba89bd,0x398fd626,0x3aa56e9e, +0x3ad507a3,0x3aba1e0c,0x3ac49ff8,0x3b023c94,0x3a243533,0x38c5e5c8,0xba111f47,0xb7428fda,0xb90126ce,0xb90354dd,0xb9088f85,0x39805294,0x39816b17,0xba5ada03,0xbaf2b381,0xba3dba49,0xbb8b8722,0x3b90e072,0x3b0bb4c1,0xbb289198,0xbad76304,0xbb661dc2,0xbbb57d31,0xbbf59897,0xbbf20ae5, +0xbbcac68c,0xbbb56bee,0xbb4b3853,0xbb11c9ce,0xba593922,0xba780114,0xba07893d,0xb9a57d08,0xba6909d6,0xba2e0831,0xbab51445,0xbb03123a,0xba0d07a4,0xb9adc8bd,0x3a419374,0x3a29c9cb,0x39d15af0,0x38f44c97,0xb7ca2fa6,0x392fcbef,0x39d28e9e,0x3916d91c,0xb8bea1fd,0xba45d6a7,0xb915d41a, +0x3aae1a82,0x3af800f9,0x3b007ce7,0xba880600,0xbb8ae162,0xbb7b8be8,0xbb843876,0xbb9dec3c,0xbb919928,0xbb7ef07b,0xbb5650c5,0x39205700,0x3b166165,0x3b472c07,0x3b4a4d1b,0x3b34f97d,0x3b1d64d4,0x3aea9318,0x3a229214,0xb9d37024,0xbaca636c,0xbaf192f3,0xbaba5e45,0xbaec1b25,0xbab51aa6, +0xba0547a9,0x39705c49,0x3a05e38a,0x39bc0e8e,0xba4fd9c5,0xba379a2a,0xba77f612,0xba18a239,0xba15d397,0xba5da8fc,0xba9572bd,0xbb0b2d8f,0xbb07a39f,0xbb4625f0,0xb8dd8e5e,0xba90ca50,0xbb361484,0xbb071d5a,0xbaee8876,0xbabb1bc2,0xbaa3814c,0xba9de205,0x39708b17,0x3a98a537,0x3aed684e, +0x3ac4ab01,0x3a7e7560,0x39a14754,0xb7eda7b7,0xba3ece64,0xbaa04427,0xbac6fa93,0xbae62dcb,0xbaeabeba,0xba91809f,0xba27b044,0xb9ed0cbc,0x39fa969a,0x3a8c95e1,0x3af2bc69,0x3aee5e22,0x3acbcc0f,0x3ab63251,0x3a5ea67d,0x3a13ad22,0x3990680d,0x3a275624,0x3a69929c,0x3a6407e6,0x39b69467, +0x3b1f74ef,0x3a9a231c,0x3a92cd9a,0x3a88981c,0x3a3c2431,0x3a658649,0x3a8070b2,0x3a86759f,0x3a081832,0xb8744ef8,0xb98ac020,0xba05b46b,0xba4721d4,0xba713234,0xba865a48,0xba8c979a,0xba8d02e5,0xba8680d4,0xba88a5ac,0xba90d706,0xba3544ca,0xba0f9f62,0xba1aea6b,0x38a3aeca,0x3a502ca3, +0x3ac740f8,0x3add61e2,0x3aa43af9,0x3b18e61b,0x3aa06281,0x3ac85228,0x3a359f3a,0x3a0a763f,0x3ac8f2c6,0x3a97c6b3,0x3a97cbc1,0x3b1472a4,0x3a5e5f89,0x3a184f44,0x3916b274,0xb9b1432a,0xba2e80a6,0xbab7702a,0xbae7f3e7,0xbacc4700,0xbaa776a5,0xbaa0f867,0xbaa6cc9e,0xbaae4961,0xbac567f0, +0xbabe82dd,0xbac19938,0xbad7be0e,0xbae3791f,0xbae368f9,0xbb02fe5e,0xbac9aed0,0xbab6a5ce,0xba8d9340,0xba888ff0,0xba84c1e7,0xba93cb03,0xba41598c,0xba4200b4,0xb91fb2b1,0x398ffc91,0x39a6789d,0x3aefe330,0x3acba102,0x3ac16f91,0x3b0fa867,0x3a78f79c,0xb9fbd06c,0xba31a096,0xba0cb7d0, +0xba38ba2b,0xba52848c,0xba4ffcd7,0xba4487ac,0xba56297b,0xba8710f7,0xbaa62e8c,0xbab9eacd,0xbac2d7f3,0xbac65138,0xbac9af33,0xbac4d671,0xbac3b0df,0xbabfe9c3,0xbab7a6a8,0xbab1dde1,0xbabc4c64,0xba957abc,0xb9e5bf3a,0x39d62845,0xba8517b7,0xb924056e,0x3a715d79,0x3a9796ff,0x3a881603, +0x3a84bf1b,0x3a95ae3e,0x3a76489b,0x3a30ae4f,0xb96b4b96,0xba4b082f,0x3a62e589,0x39bb5fd2,0xbb10c31f,0x3ac600b3,0x3a6b221e,0x3b0f15a2,0x3aa6523b,0x3aa2706e,0x3aa1848b,0x3ab1a15c,0x3ab2e940,0x3a9f7dbe,0x3aa640fe,0x3ab3e893,0x3ad65b15,0x3aac96b8,0x3aa826a0,0x3aa94970,0x3ac8593c, +0x3ad82051,0x3ad4d15d,0x3acc91a1,0x3ab049d7,0x3ad4dba2,0x37332067,0xba88628e,0xbb0c984d,0x39d6d0d3,0xba8cac30,0xbb22bcc1,0xbb19ca26,0xbb0e44fd,0xbb066d95,0xbb208fb8,0xbb1cf0df,0xbb1aa450,0xbaad4adf,0x3a1b404c,0xbb072b12,0xbacd082d,0xbb483ff6,0x3aa6715c,0x3ac6611a,0x3ad2ee2d, +0x3af79185,0x3b27e8e0,0x3b1ba30d,0x3ad65a89,0x3ac2430a,0x3aefbe1b,0x3b3e1ace,0x3b193838,0x3b0dcece,0x3b096859,0x3b2ebeb8,0x3b3b38e1,0x3b2a8e0a,0x3b0dc431,0x3afd8bc4,0x3b10ba56,0xba59ba92,0x37a88d11,0xba20d6d4,0xba4cfae7,0x394d9fb0,0xbaba2cb4,0xba1a5bc8,0xbacb6f96,0xbad484b7, +0xbaa1037e,0x3a044214,0xbadeb0f1,0xba1d8422,0xb95f32e4,0xba9c5690,0xb9ede1fe,0xba77af6c,0x3b3f5e72,0x3ad1f506,0x3addb9c4,0x3aebcdac,0x3b3225f8,0x3b35a2ca,0x3ac5dde8,0x3ae61a08,0x3b0713f1,0x3b8358a9,0x3b0e3866,0x3b11b7a2,0x3b0bf702,0x3b6a01ef,0x3b82457e,0x3b829d3c,0x3b40f563, +0x3b479fda,0x3abad7ad,0xba8b895f,0xb8492a78,0x3724f78b,0xba3ae40c,0xba24fc84,0xbad085b9,0xba7429f1,0x3a26ac44,0xbb27dc67,0xb9d792e5,0xbac3c399,0xbb0874c1,0xb9249b3c,0xb931230c,0xbadd700c,0x3a5cf4e8,0xbb0d460d,0x3a4d252d,0x3af57982,0x3ae5a950,0x3b3f750b,0x3b8cd546,0x3b861ca3, +0x3b0dc8be,0x3ac2386a,0x3b126ae3,0x3bc4aa24,0x3b72eb23,0x3b57e7f0,0x3b43db82,0x3ba7a4d0,0x3bb29d30,0x3b9e56f3,0x3b76f883,0x3b4b44b6,0x3b0ce826,0x39ec0cac,0x3a8e794d,0xba5088a6,0xb97e2df8,0xba6a5ec2,0xbb1710b2,0xbb1abb1a,0xbb43fa50,0xbb925341,0xbb4bbe13,0xbb435a19,0xbb7a98ce, +0xba987463,0xb907c988,0xbaef613e,0xb9e5ce3e,0x3a421902,0x3b08ece5,0x3b111087,0x3ab85e67,0x3ac219c8,0x3b7e65ae,0x3b61f435,0x3af2995b,0x3afb939d,0x3b416d19,0x3bcff233,0x3b35d5c8,0x3b0edd84,0x3b1b3f3c,0x3bb9b1a0,0x3bdafa6c,0x3bda1f91,0x3ba4da98,0x3b96b067,0x3b421ff4,0xba32c926, +0x3a896c26,0xba5a1944,0x389864ae,0x38a85d58,0xbafe2ac7,0xb9e7c35d,0xb9d464b1,0xb985cad5,0xbb080178,0xbaf5778e,0xbb7e2a79,0xba9ec7c5,0xb8b19e49,0xbb00101e,0xbab3682d,0x3b34c74a,0x3b94a04f,0x3c27749a,0x3c0abd82,0x3bc502df,0x3b81ed12,0x3b5f9ff7,0x3b578fd1,0x3b10f69b,0x3a9cbb85, +0x3abdc624,0x3bb76037,0x3bd345be,0x3b8f5cf5,0xba4832b5,0xbb61c084,0xbbb844fd,0xbbbec7a3,0xbba8f837,0xbbb9752c,0xbbebc123,0xbb8dad2f,0xbbb10b24,0xb999b31d,0xb8b92a3c,0x3a944f50,0x38b9ae8e,0x390b74f5,0x39951846,0x3a597657,0x3b396575,0x3b7ec400,0x3bacc64b,0x3b9b88e4,0x3ad16e68, +0x3b9c5fd4,0x3a74a758,0x3aeede4a,0x3b24eb2e,0xbaadf728,0xbbb0cef1,0xbbb5fa42,0xbb84540b,0x3a88fb22,0x3b690137,0x3b6c28a2,0xb9b20279,0xbbbc78ac,0xbbdddd07,0xbb422bcc,0x3a58c1d6,0x3b88822d,0x3bdf9c28,0x3bbe4b1c,0x3bafb5f3,0x3b12cd27,0xb9967814,0x3807d2e9,0x3a17198b,0x3a81d059, +0x3981423d,0xba7b6b8a,0xb9932edb,0x374486f7,0xb93e04b2,0xb966eb17,0xba8a3c29,0xbb244007,0xbb9d002a,0xbb202025,0x3ba27029,0x3a8fea04,0xbb8c7910,0xba6ec678,0xbbabfc21,0xbb108e5b,0x3c013d35,0x3b2a7b6b,0x3b3f033b,0x3ba1cae2,0x3986cb85,0xba08d32b,0x3b14efa7,0x3b292c16,0x3b4ea932, +0x39e6b2a7,0x3a9345d5,0x3a949e80,0xb9956fb3,0x3a03b557,0x399f1b5c,0x388dd6c3,0xba6d4a66,0xba7aa0cc,0xbac4fe0c,0xba16a4c4,0xba1b829b,0x3781a8eb,0x3942de0d,0x37188899,0x391924bd,0x37deb21a,0x3a4e631a,0xba86b8be,0xba2591b7,0xb9b17ea2,0xbb8f5580,0xbb4f71ad,0xbb5fb661,0x3b9fab1f, +0x3a31d926,0x3acaeff7,0x3c18afdd,0x3c099c67,0x3c110ed3,0x3bee565b,0xba6cb04a,0xbb4294c8,0x3adc1ae8,0x3ba4891e,0x3ba63ef1,0x3ab4d94d,0x3a93636c,0xb822bffd,0xba38d11d,0xb9cc4d9d,0x3a16c3e5,0xb8f58ecc,0x39244565,0x39ed7981,0xb94d4ed4,0xba42af1e,0xb98db49a,0x395b03f7,0xb87309f5, +0x381ed269,0x3831470c,0xb914bb82,0x3901b1a9,0xba977044,0x397dd578,0x3a3f7708,0xbbc2f7fb,0xbb6ef376,0xbb937496,0x3be5c9eb,0x3bb1daec,0x3b81805d,0x3b012b56,0x3bc0a9c1,0x3bdca729,0x3bac45dc,0x3b1a43d0,0xb7d93cda,0xb9c2a117,0xbb2f5c3a,0xbaaa3ac6,0xb997f04b,0x3aa72513,0x3b0264dc, +0x3b4c9d42,0x3b53774a,0x3b69231d,0x3b1ec856,0x3aebec5e,0x3b0a75e9,0x3af13b96,0x3a385cdc,0x39087f82,0xb9ad4bfb,0x38437882,0xb8a14b54,0xb8276671,0xb892ea74,0x38e5fd56,0x393833a3,0xba298fcb,0xbaadfcb7,0xbb56ea7f,0xbbca1ef1,0x3afc9108,0x3a9db990,0x3bbc3ad2,0x3ba484fe,0x3b743305, +0x3aa11aa5,0xb9fb3a18,0xbab5b76e,0xbad93a9b,0xbaf42a99,0x3a0e392f,0x38f9a64f,0x3b030798,0x3abe92ff,0x3a2f6414,0x393d9c90,0xb99b3819,0xba38c21c,0xba1bf086,0xb84a893f,0xba221985,0x38d4757f,0x3ac1da3a,0x3a4485e8,0x39ee0892,0x38ccd01e,0xb8135198,0x39477b40,0x3990fb38,0x386b9a95, +0x389c5987,0xba6f4109,0x3905bfc0,0x39d35b5d,0x3b0373e4,0x3b8f1ce8,0xbb97d844,0xbab64b1b,0x39345a3f,0xba2903f9,0xba466537,0xba2b04f5,0xb8bc228b,0x3a82c709,0x3af66fd5,0x3b278cd5,0x3b3a325c,0x3b61576d,0x3b5f3675,0x3b4d8332,0x3b3748ed,0x3b014bb6,0x3a9deed1,0xb834663e,0xba379d05, +0xbaedc4ff,0xbacc9c71,0xb9d3a134,0xb9dfb5bc,0x3a2ad0d2,0x3a3aab54,0x384b320f,0xb994353a,0xb9fd6a54,0xb9f92315,0xba05554a,0xb99eaaf6,0xba3a8681,0xbac24c1f,0xbae7b2d9,0xbb0de27a,0xbb23f8e0,0xbac19ef5,0xbaa9a3d4,0xb998e2d2,0xb98d55b1,0xb95d96ad,0x39d4ef46,0x3a94f4ac,0x3b0edad0, +0x3b1f353e,0x3b3a5dfd,0x3b3f29a6,0x3b37ae43,0x3b1666e2,0x3acf88c1,0x3aa547cf,0x3999917f,0xb91d3775,0xb9e54a23,0xba24452a,0xba64afd2,0xbaaeb7aa,0xba75e851,0x38a9565a,0x39b05661,0x3aa5e7f0,0x3af5cfd5,0x3ab55115,0x3a7dbbbf,0x3a8e4a2d,0x3a2e4cc3,0x39a30093,0xb980d5ae,0x39ed410a, +0x3a015941,0xb9f0750b,0xba1bb742,0x3a8394d5,0x3b097649,0x3b03e206,0x3afa7065,0x3b0bb46a,0x3b335097,0x3b4b7ca0,0x3b60343a,0x3b3759f1,0x3b100c17,0x3af1471e,0x3a86c0c7,0x399b29bf,0xb9d6c1d7,0xb9b6d75b,0xb9adaef2,0xb90ecf60,0xb96d74fa,0x39cd4f59,0xb9e57743,0xb9126d29,0xb9170b6b, +0x396d51ae,0x3a1f7291,0x3aa12ecd,0x3aff94d7,0x3aec562a,0x3b3554dc,0x3adecb54,0x3b04e6b6,0x3a9762d7,0x3a774215,0x3a44d18f,0x39e00ebf,0x3a859bfe,0x3ab8d6f7,0x3a72c945,0x3b16d9f1,0x3b0d0564,0x3b0db278,0x3aedcc71,0x3aeb0ed7,0x3ab81d29,0x3acc7fe8,0x3a9a9702,0x3a670ed1,0x39feb1e5, +0x3932a0b7,0xb9107771,0xba3e4ed4,0xba25ddb4,0xba383d08,0xba64c89f,0xba83ee94,0xba9b0644,0xba7f852c,0xbad14984,0xba6e5ff4,0xba56fcd4,0xb9d7660f,0xba2214f0,0xba183cac,0xb9e0d441,0xb998537d,0xb98bdbb5,0x3a111441,0x3ac746f7,0x3a930831,0x3b02719a,0x3ae79b72,0x3a8b650e,0x3b1e32c0, +0x35220ad3,0x3a830d28,0x3a50cdb5,0x3a410a30,0x3a40d94c,0x3a5ef4ac,0x3a6d5d68,0x3a79ad51,0x3a30c18d,0x3a01a6cd,0x39a14c41,0x38fe324f,0xb81ff0be,0xb942b529,0xb8d4306b,0xb893e1bb,0xb5bdd839,0x38d81ce3,0x38dc41cd,0x399643d5,0xb9bf276f,0xba9c9822,0xbaf54d38,0xb91cd1fc,0xba678c0c, +0xbad754fc,0xbadc92e1,0xbabdd64c,0xbaa695d8,0xbaca3a8a,0xbad1ee0d,0xbab4260d,0xba45b2ac,0x3756d6db,0xbab39451,0xba7580e4,0xb91f78bd,0xb9d450b3,0x398ccd87,0xba97052f,0xb9dfe3fa,0xb9c795c4,0xb99af871,0xb997ea27,0xb9c6005c,0xba229fcb,0xba108f21,0xb9f96fd6,0xb9574113,0xba084f2d, +0xba193b47,0xba1bbbe0,0xb9d87b61,0xb9b183b2,0xb9950b5c,0xb9b80977,0xb995fc66,0xba2292f4,0x3a7d5ef2,0x3ad93ccf,0x3aedf861,0x39d46bd2,0x3abfaec2,0x3adb35f6,0x3af15523,0x3ae7ba39,0x3abbc771,0x3b05cf17,0x3b014059,0x3acbe8f6,0x3ae7dcda,0x39a5319e,0x3ac80906,0x3b03cc85,0x3b3c733d, +0xb785cc7b,0xba1819bf,0xb90bdb2b,0x39da612a,0x3a422ccd,0x398c89c3,0xba7b3660,0xba87d14f,0xba5f5d0c,0x39c02adc,0xb8dfc4ba,0xb98bb796,0xb9a8f2ed,0x39042917,0x393961c5,0x3903be8a,0xb72bd760,0xb99f3bf3,0xba39390e,0x3accb2b4,0x3a1ef991,0x3a2e1472,0x3a5d4445,0xb9a239d3,0xb916c57a, +0xb837a767,0x39abce0f,0xba3f9882,0x39667f60,0xbaa2db73,0xba22aba8,0x3a33b790,0x3a2f016a,0x39da789c,0x39d20c4a,0x3ad96236,0xba293925,0xb9f1c028,0x3972c903,0x3a4c9944,0x3a9f7a92,0x3a8ec6b7,0xba8d1f83,0xba618a4c,0xba3ac892,0x3aa37dc0,0xba0d7707,0xba1e38cd,0xba0c7a33,0x398bc482, +0x3a577064,0x3a534026,0x3a3cb207,0xb8b6e78d,0x3a6de58a,0x3b11829c,0x3a216001,0x39b54d30,0x39c0c7fb,0xb96a3cda,0xba907613,0xba2025f9,0xbabc1a34,0xbaa633a5,0xba915c09,0xb97b6fc7,0xbb18ef9c,0xb94bdb86,0x396ff436,0xb7de0636,0xba1e6d1d,0x3acc4769,0x3a7946ed,0xba8c96e1,0x3a488ff9, +0x3afd5dc9,0x3b4e6846,0x3b11ff88,0xba9c3d48,0xbb015a12,0xbac08da9,0x3b238d22,0x39f1a006,0x3962c0f5,0x392e3d83,0x3abaddbf,0x3aeb7550,0x3acad15d,0x3a89b2c5,0x3855057d,0x3a3947d9,0x3a6183fd,0xba30a0ff,0xb9a7516c,0xbad6fd6c,0xba1f321c,0xbb420c0e,0xbabea94d,0xbb2b6f5b,0xbb873af7, +0xbb59dc5a,0xbb1aa91b,0xbb879047,0x389ffa12,0x393cd03c,0xbae9877b,0xba2e4fc0,0xb9b38a4e,0x3a350b98,0xba9982db,0x3a5d1d64,0x3a87d7f2,0x3b5ac808,0x3b285da4,0xba601a4f,0xba8e1b87,0xb9fb50b7,0x3b2bf9c8,0xba212497,0xbace12ae,0xba82ee3f,0x3a9fc432,0x3b14cae3,0x3b2514d3,0x3b1015b6, +0x3ac29919,0x3abfc47c,0x3b500f55,0x397b0242,0xb9e373c5,0xb9fc359d,0xba283bea,0xbadf3549,0xba444861,0xb94e7059,0xb8df7a27,0xbab4561d,0xbad6374b,0xbb69e778,0xbaa93b5f,0xb995a4a9,0xbb1eea40,0x385a1e98,0x3bcd394d,0x3bc5d8d9,0x3bab3432,0x3ba77349,0x3b525c9b,0x39a7efbc,0xba4b75f2, +0xba33fcec,0xbb59888a,0xbb8e4081,0xbb898adb,0xb862ed58,0x3b12960d,0x3b3b0ff3,0xbb10ebf2,0xbb9d03bf,0xbc1935c7,0xbc1576da,0xbc0ad5bc,0xbbdf203c,0xbbc1ec59,0xbbb8395a,0xbb9472fc,0xb9876f80,0x3a57e462,0x3a23c8c8,0x39b24483,0x38ab5831,0x3953189f,0x3a1c3ee0,0x3b218605,0x3b53abab, +0x3b98e187,0x3bad3afc,0x3b9174a3,0x3ba9d095,0x3a58c859,0xba956785,0xbae47aa6,0xbb28a5c7,0xbba4d61f,0xbbb4b64f,0xbb760f95,0x3ae11593,0x3b4ab40c,0x3b3a327c,0xb9badb3e,0xbba68750,0xbbd3377b,0xbb596739,0xbaa7ae14,0x3a7c93bd,0x3b2572a5,0x3b76980b,0x3b1c4666,0x3b137533,0x3aaec951, +0x36266264,0x3a2388ca,0x3a2062bf,0xb90d3d62,0xba734bad,0xb919d911,0xb89a09f9,0xb8b9b931,0xb987867c,0xba45ce82,0xbb0aedbd,0xbb648c36,0xbb0eb7f4,0x3b92b155,0x3a7cb415,0xbb5671b4,0xba925a3e,0xbbad4921,0xbb2df4df,0x3bc21770,0x3a9b9352,0x3a6f0af2,0x3b07cb31,0xbb81ebcc,0xbba2a165, +0xba7af5e1,0xba9ea9c2,0xb970436c,0xbb387f41,0xbb1ebd62,0xbace3dcd,0xbac84cca,0xba2894c1,0xbacad597,0xba7d4fbd,0xba177ae9,0xba875317,0xba138a6c,0xba49cdbb,0xb993ff7d,0x38782e70,0x39400d5d,0xb8ba7c2d,0x38f04b32,0xb88f7c52,0x3a3c7277,0xb9afe764,0xb9f7961e,0x3827107a,0xbb87f4a4, +0xbafa2157,0xbae76ba0,0x3bd575c5,0x38f1e1ad,0xb857f7fb,0x3b949115,0x3b875368,0x3b864de6,0x3b6e33cf,0xbb99521a,0xbbc7a127,0xba7c6a82,0x3ac26f2d,0x3b0c9c98,0xbad13ecb,0xbae6aec9,0xbb16d154,0xbaf9860c,0xbaa7bd69,0xbab74da3,0xb9236c3c,0x3a4dcbc5,0x39c99795,0xb9d1bfcf,0xb91f324b, +0xb988333d,0x398062df,0xb90276e1,0x3893f163,0x38d3ac78,0xb938cb0d,0x38aed74e,0xba6981da,0x3a1db6fb,0x39f0c74b,0xbbc258b2,0xbb940d38,0xbb8f7cb3,0x3c03aad2,0x3b5210ba,0x3a8d2173,0xbb9bf281,0x3a9e0ebf,0x3b6fde46,0x3b99afd3,0x3b4ae689,0x3abee421,0x38f6e820,0xbae11c54,0xbaabe806, +0xb95617bb,0x38fffa16,0x391f831a,0x39eebd16,0x3a933f88,0x3aee5539,0x3b168cbb,0x3aef952e,0x3ae3304d,0x3b019c8e,0x39e5ee7d,0x3810ccff,0xb94be95c,0xb8301b28,0xb94bbe5d,0xb88029b8,0xb90f7c16,0x395407d5,0xb8935937,0xb9f1a523,0xbad254a2,0xbb967c53,0xbbf2ee35,0x3bf41811,0x3b924327, +0x3ae71f10,0x3b34f453,0x3a69a9a9,0xba69449e,0xbb671bf4,0xbba311d2,0xbb8ff361,0xbb83de36,0xba9bb5ec,0xba6aba78,0x3a004483,0x3a086f0c,0x39a22051,0x39b2304b,0xb97dd45f,0x389aa266,0xb9ceee7a,0xba05cfed,0x3aa29975,0x3aa79b67,0x3ab48231,0x3a801429,0x3a02a040,0x39743d12,0x398e5126, +0x398e6b32,0x39abc532,0x394348dd,0x3905a5f3,0xb967a230,0xb8f329f8,0x3aac7643,0x3b83fcbf,0x3b9bb25c,0xba2954f6,0xba86e907,0xba3e5ac6,0xbacabdea,0xbb4495e4,0xbb65ffab,0xbb5a537b,0xbb1f2384,0xb902226f,0x3aa868bd,0x3ad3b3f1,0x3b03f1e7,0x3b1242c9,0x3b17bf06,0x3afd82ff,0x3a6342f6, +0xb98b5c83,0xbab38f90,0xbad4c727,0xba9e1945,0xbaba5e2c,0xba76a070,0x39a1ce5b,0x39fff019,0x39febcbb,0x390c4950,0xba6a0221,0xba077565,0xba1872d5,0xb9843c5f,0xb98c8aa9,0xba2ca04f,0xba78f4e4,0xbaeb0bc7,0xbadce610,0xbb00bddd,0xb990a948,0xbaae2b59,0xbb22ba03,0xbaeee404,0xbb090b03, +0xbacff924,0xbaa6758c,0xba5f66e4,0x396d3207,0x3a8ea3cd,0x3ae135da,0x3ae2755d,0x3ab6c1b2,0x3a6ee1bc,0x3a16d821,0xb954ef39,0xba5428ef,0xba900c48,0xbab87291,0xbab24033,0xba08e408,0xb9290f30,0x398da56c,0x3a583725,0x3a998967,0x3ac52695,0x3ac517c7,0x3a7e9df5,0x3a4d22ea,0x39cbb7c3, +0x38c1dd30,0xb9a058ea,0x3917739d,0x39d25a32,0x3a1a6556,0x384a1303,0x3afabc48,0x3a3d5279,0x39a66f55,0x39f46315,0x39681463,0x3a7f32de,0x3ab6d11e,0x3ae62991,0x3ac01a2a,0x3a88edef,0x3a7f9b0a,0x39aed51c,0xb8252722,0xb9b130c6,0xba01bec2,0xba0642ea,0xba124acc,0xb9f4cc13,0xba19681f, +0xba0efb6e,0x38feaf61,0x38b2686c,0x39988bff,0x3a43a77b,0x3abf65b9,0x3b15c028,0x3b040761,0x3add097f,0x3b2c1678,0x3aa37edf,0x3ac0e483,0x39fdad9e,0x3a0faac1,0x3a8b6ab6,0x3a6ec8ed,0x3a41750a,0x3b32db73,0x3ad36cf2,0x3ad42baa,0x3abc9373,0x3a8e04f6,0x3a2beac4,0xb6ba0c95,0xb986d14b, +0xb9f051e5,0xba050226,0xba349a04,0xba46a4c0,0xba60beca,0xba8f4417,0xba84953a,0xba8813f8,0xba9e84fe,0xbaa9e130,0xbab3d11f,0xbab7baef,0xba42b2ce,0xb9d254e5,0x38bb2f18,0x39a544e3,0x39bc66dd,0x39b66c18,0x3a412db4,0x3a590353,0x3a860404,0x3ac20055,0x3a95391a,0x3b246ec1,0x3b1df493, +0x3b12347f,0x3b332d31,0x3b096bf0,0x39f48bab,0xb907e6c4,0xb8560c45,0xb95c4604,0xb970f6fb,0xb91e8f57,0xb8082c66,0xb65f5ca0,0xb92ff408,0xb9ae30f4,0xb9fc20d6,0xba1eea49,0xba3b3546,0xba53cf36,0xba4b8b75,0xba48a42b,0xba3b57e7,0xba2934d7,0xba23b68d,0xba489a34,0xb85a6077,0x3a0591d0, +0x39f4b52e,0x394dcd98,0x3a6a760c,0x3a7e4206,0x3a9381dc,0x3a81c852,0x3a80986b,0x3a9168b1,0x3a800511,0x3a3dad27,0x3a06fcce,0x38ce1c43,0x3a3b5879,0x3a73f805,0xba6330e9,0xb705b844,0xba3e2c62,0x3a67bfe1,0x39867296,0x3948b92f,0x39524c53,0x393f0893,0x3910d5e7,0x3722b231,0x388c1d8a, +0x393d90fd,0x3a092f3c,0x393642c2,0x38f852d9,0x3909c317,0x39a9b20e,0x39d0db65,0x39de2db1,0x39bdc937,0x398d3cc7,0x39e37648,0xba873f73,0xbab03faa,0xb9f3a282,0xba794a7e,0xbacc17c8,0xba68b191,0xba5b44fe,0xba431c0c,0xba61aed2,0xba8a1434,0xba8fc730,0xbab3d30b,0xbad1432f,0xba501843, +0xba4679c5,0xbad19b2b,0xbb05849b,0xb890e81e,0x39bb18f5,0x39b2bfaf,0x3a291159,0x3a4e85ec,0x39c9ee50,0xb99d5ccd,0xb9deab57,0xb8d6dfb1,0x3a97d260,0x3a0d0e16,0x39b437fd,0x3984b514,0x3a44e7e9,0x3a6f83ba,0x3a7172c1,0x3a230967,0x3a0edd21,0x3a46d201,0xba82aabf,0xba21000b,0xba0ede88, +0xbac80088,0xba8bda68,0xba9d68d6,0xba9838b8,0xbadd86cb,0xbafe05c6,0xbab50c27,0xb8f775bc,0xbae87144,0xba50cfde,0xba3846fe,0xbac2b37f,0xba62f6a6,0xbaeb9a1f,0x3a9434fc,0x3a2a5574,0x39db9789,0x3a322fc6,0x3a2933cd,0x39c11d1b,0xba36cfd7,0xba201897,0xb931777e,0x3b0778b0,0x38e4b925, +0x36d796f4,0x386991a0,0x3a8f7a80,0x3ac384dc,0x3addb5bc,0x3a88a247,0x3aa4d11a,0x39af2966,0xbaafcdd9,0xba2e8d41,0xba49e914,0xbac2e0ed,0xba9bdc9a,0xbb06dfd6,0xba96a100,0xba111dca,0xbb56b0ea,0xba4a2531,0xbad4210f,0xbb249cb7,0xba261627,0xba24058d,0xbafb463e,0xba20be23,0xbb185fc1, +0x396bc05c,0x3a46a60b,0x3a3566bf,0x3ae1f277,0x3af42c3d,0x3a65057d,0xba5dfef1,0xbae0b2dc,0xba5ff217,0x3b5cead9,0x3a5a25ca,0x39fd123d,0x384f46ef,0x3ae43d33,0x3b13179e,0x3b133986,0x3adc849f,0x3ab45b3a,0x3a878cf1,0xb998ad36,0x3794b040,0xba61f02b,0xbaa9b00f,0xbadae731,0xbb0fdc3c, +0xbb19abfc,0xbb1b4bd3,0xbb81d5ba,0xbb1a3a56,0xbb1930ec,0xbb765807,0xba84fc7e,0xb92ade63,0xbb1f9a2c,0xba8406de,0xba60eccd,0x3a35d5a6,0x3ab93a1c,0x398cf406,0x3a2c732c,0x3a96889c,0x3959cc85,0xba93ea9f,0xbac94638,0xb930c92e,0x3b7cc7c1,0x38a6f097,0xba8109c4,0xba2691b9,0x3ae7963a, +0x3b35b64c,0x3b50d694,0x3b17a812,0x3b205d67,0x3af13cc5,0xba5b2c83,0x3940e8a3,0xbaaf4e08,0xba640c54,0xb9f2ce3b,0xbac8ad5e,0x387a64ac,0x391eeccf,0x39a449da,0xba77cbb9,0xba686c84,0xbb4af314,0xba5a5fc3,0xb89e1747,0xbb1afa97,0xbaf6c233,0x3b20199e,0x3b49cece,0x3c01b1b5,0x3bdd557e, +0x3bba002b,0x3ab60dee,0xb8d313ad,0x39964bf4,0xba1c5cc4,0xbaa14116,0xbaa1b489,0x3b77d9e5,0x3bccd9a1,0x3be5d8bf,0x3a1fb71a,0xbb3c4d74,0xbb9e838e,0xbbd73c06,0xbbd91ce1,0xbbd57136,0xbbe8dd2a,0xbb8a81b8,0xbb986a7a,0x3a63479e,0x3a03835c,0x39f8f0fb,0x3919ce32,0xb8595178,0x38996dee, +0x3992c049,0x3ae22ec3,0x3b0341dc,0x3b75ad86,0x3b8294b4,0x3b273052,0x3b6456af,0xba595ceb,0x3a752f3f,0x3b000512,0xbae1002a,0xbb95a9b5,0xbbd8e5c3,0xbbb04cac,0x3a6ae4f1,0x3b0d62b4,0x3b3e19b4,0x3a9bf6c0,0xbba75137,0xbbe6b79c,0xbb82cc96,0xbad3beb2,0x3a805684,0x3b38d893,0x3b4450f9, +0x3b44bd3a,0x3a4adc77,0xb9f630e6,0xba3d75a4,0x39890222,0x399c2b09,0xb94b5a61,0xba0c4e2f,0xb7fe5f19,0xb8184c7a,0x373be2bf,0xb966d8cf,0xb9eb6f36,0xbac73fb3,0xbb46677f,0xbae4b9bb,0x3b793178,0xba099a8c,0xbb6152c6,0x39bead22,0xbb525427,0xbafc0257,0x3babb56a,0xba129b6e,0xb9c48343, +0x3acd6124,0xbaba268c,0xbad703fe,0x3a3f898d,0x3ab05edd,0x3ae90e65,0xba7ff16c,0xba4bcbbb,0xba456cd6,0xba52e90b,0xb9d85d1b,0xb9b18e5b,0xba467935,0xbaa76338,0xba8372e0,0xbaba1fcb,0xba13229d,0xb9e41c7a,0x394a555d,0x37a156b6,0x368d918c,0x380b9496,0x37a1fc60,0x39c46672,0x38b70968, +0xb9a2a7c7,0xb91178d3,0xbb86a5e7,0xbb2246fc,0xbaf32d1c,0x3beda21a,0xb7367996,0xbaaec63d,0x3a860858,0x3b0df712,0x3b60e788,0x3ba8155f,0xbb0b845e,0xbb8099aa,0xbadfd2ef,0x3b272fb9,0x3b43f7eb,0xb87eecc0,0xba593b77,0xbac75c5c,0xba9ae386,0xba84c7b2,0x392cae07,0x3922fb91,0x37a3fbf4, +0x3a167c80,0xb9bef41e,0xba0022e8,0xb8e7a1b9,0x38f307f0,0xb85ddd21,0x3898e6dc,0x37a990a1,0xb8565549,0xb6486cdc,0xba196bf3,0x394fabfa,0x3a04d89d,0xbbd27384,0xbb8132ec,0xbba0da74,0x3c043358,0x39fc7591,0xbb3d6fcc,0xbbf29c6b,0xbb1cfc5e,0x3a9ec0a3,0x3bd4a96b,0x3b088f5a,0xb7a06ddd, +0xbacc8c8e,0xbb5831b4,0xbb1ebe38,0xba8edf07,0xba2950b1,0xb9b7f1df,0x3a49cb84,0x3acc6ff6,0x3b293538,0x3b1329c6,0x3af22658,0x3af8bc0b,0x3aaebf2a,0x38a6f112,0xb88b99c4,0xb93b75ee,0xb7d49a84,0xb9038425,0xb82c3f7b,0xb8f315f5,0x38e7cdde,0xb84f52e5,0xb9e4bd46,0xbade2602,0xbbd94479, +0xbc105e15,0x3b82bacc,0x3aa71fe2,0x3aa1c548,0x3a05fbb8,0x39a730f6,0xbaf93092,0xbb80d7b7,0xbba6fb13,0xbb93db65,0xbb9aff23,0xbb433084,0xbb28ac6c,0xb995c9d9,0xb980d35f,0x392dd6bc,0x39f35f36,0x39e7a252,0x3949cf70,0x39405af4,0x39e9b8b1,0x394d9f0e,0x3a69fd38,0x3af82315,0x3a7d22b9, +0x39da7a11,0x38d68d09,0x38ebcdc5,0x3945c4b9,0x3947ddd3,0x386c3900,0x37fe58fd,0xba0f46b4,0xb993e1ff,0x3a67236b,0x3b5871cb,0x3bd4cf6a,0xbb2adb09,0xbadd11fa,0xba28ab0e,0xbadd7989,0xbb195eaf,0xbb298732,0xbb04c6cb,0xbaa67544,0x39c7ecfb,0x3ab4fd56,0x3abfa010,0x3ad5db68,0x3ab4d432, +0x3aacb7c6,0x3a888ba7,0x39ccfdb6,0xb78c8ca3,0xba4ea856,0xba682609,0xba9ef916,0xba99508a,0xb979f812,0xba04ecbb,0x39c7ea70,0x39a0e888,0xb9b65bf0,0xba014a81,0xb9ec1dd9,0xb9dbc7cb,0xb9d529fb,0xb9c56161,0xba563fd1,0xbac4bc9b,0xbb09513b,0xbb2a6e74,0xbb414c26,0xbb19f881,0xbb18fae3, +0xbae1c051,0xbac7e974,0xbac4ebbc,0xbaa616ce,0xba5b541c,0xb9ac8eef,0x3a206760,0x3ab5f096,0x3aefac24,0x3aff80d9,0x3ae4d600,0x3aafe152,0x3a75034b,0x3976c067,0xb926948f,0xba0d8014,0xba38f586,0xba808249,0xbaa436b9,0xba1abfbd,0x39b42649,0x39e7c89c,0x3a9595df,0x3ab321ec,0x3a5e43f0, +0x39f483c5,0x3a0730ee,0x3896aa95,0xb97b8f81,0xba6ff43b,0xb9d71ea3,0xb9b32b83,0xba85529e,0xba987ba1,0xb6a3c07d,0x39afdb50,0x39b1c3fd,0x382b34fa,0xb7de5323,0x3a621a75,0x3abf30f0,0x3af36923,0x3acf35dd,0x3aa7c4c2,0x3aac37c6,0x3a7ec92e,0x3a44e026,0x39daee77,0x39c00042,0x39a449d2, +0x39acd5d4,0x38cfdd52,0x39fe243d,0xba110aa6,0xb9451099,0x3943ab8d,0x3a0409f9,0x3a603a7e,0x3ab3015d,0x3af57e3d,0x3af9cb4a,0x3b093abb,0x3ab01524,0x3abbb814,0x3a36aa37,0x39e4797e,0xb83d7557,0xb955d889,0xb95db644,0x389b4cbe,0x3af3219c,0x3b10ddd3,0x3b011b7c,0x3b0b8543,0x3aff0808, +0x3acb6ece,0x3a85c775,0x3a7048ec,0x3a68d813,0x3a56ff06,0x3a1d3c67,0x39d881ac,0x3918dc2a,0xb9896659,0xb97bf671,0xb993b8ee,0xb9a152d6,0xb9d82686,0xb9c158c6,0xb9b0a431,0xba85d562,0xb9db1386,0xb9a34713,0x3907e926,0x38caf11e,0x396d6638,0x3994308a,0x39414b1b,0x39d12f64,0x3a674f6c, +0x3ad10509,0x3abe5613,0x3af03ea2,0x3b075b7e,0x3b001afa,0x3b095c56,0xb9f1a138,0x3a1605e8,0x3a032488,0x39bb4c7b,0x39bbcd05,0x39fbc949,0x3a275a92,0x3a33fd23,0x3a03d391,0x39c6ab75,0x399537d5,0x39598ecc,0x392cd224,0x38ff3e20,0x3934d9a6,0x393ba25f,0x395de950,0x397e4814,0x3955b953, +0x39ca3d2d,0xb9f92d5c,0xba6ddd70,0xba376bb6,0xb9a0db9f,0xba2c472d,0xb9b5fa06,0xb9ae6bf0,0xb992219b,0xb962b41d,0xb9ec4f08,0xba22a195,0xba1a1be8,0xba4931c2,0xb9c374a6,0xba0efae0,0xba570c7d,0xb7fa9bbb,0x3a941e8c,0x3acfde8e,0x3a1b51d3,0x3a37ba87,0x3a41e899,0x3a3ec851,0x3a730c3a, +0x3a70d6b2,0x3a39fa0d,0x3a3f4694,0x3a53dd10,0x3a8c36d9,0x3a385499,0x3a2186d8,0x3a24a5a4,0x3a491204,0x3a67f0f8,0x3a802999,0x3a6f5dbc,0x3a59f8af,0x3a3ff41c,0x3abb84f9,0x3a9c790e,0xb9c1fde3,0x3aa903b8,0x3a924dff,0xb9df8271,0xb9922eaa,0xb9965ef8,0xb9afbc53,0xb85313a9,0x37d5487b, +0xb8ac66ae,0x3aa626d7,0x3abb6af1,0xb98a2ad1,0x3a9a69fa,0x3a38522d,0x3aaea13e,0x3a52de41,0x3a98f342,0x3ab54ed3,0x3b1de78f,0x3b12b438,0x3a978803,0x3a76727d,0x3a91fbea,0x3b0c0aed,0x3ac2d269,0x3aaf2942,0x3abc0a81,0x3ae0d8ee,0x3aef35f9,0x3af1a53c,0x3acabca2,0x3a9ddf5c,0x3a83b827, +0x3a83fc92,0x3a489101,0x39baa382,0x3a41a9f3,0x3a140953,0xb9bccea2,0x39acfdca,0x395b1f56,0xb986f475,0x39dbf68e,0x38d950e8,0xba13788a,0x3a350098,0x3a64ac2f,0x39957e56,0x39ff5fd5,0x3ad9ee7d,0x3ace9322,0x3a4b25f1,0x3ab92e7a,0x3ab61a67,0x3b422b3a,0x3b54d337,0x3ab64cf1,0x3ab9f491, +0x3abf195d,0x3b5a6928,0x3aa32213,0x3a8aa8f5,0x3a9e5672,0x3afbb8ca,0x3b25a1e8,0x3b3f6d10,0x3b1bae8f,0x3ae63f10,0x3adb16db,0x3ab8131c,0x3a0fa115,0x3a82df5b,0x38a90eae,0xb9e8aaf5,0xb9c103d1,0xba0ff444,0xb8473033,0xba991cd6,0xb9062301,0x38561ea3,0xbacd12b9,0x3a062b4b,0x3a4532ea, +0xb889bf9f,0x3a64d234,0x3a6e9266,0x3ac28b49,0x3a1d9686,0x3ae21d12,0x3b12505c,0x3ba40bd1,0x3ba7ee6d,0x3b0b6e42,0x3aa6a339,0x3abe91e0,0x3ba0962d,0x3b235824,0x3b0a6802,0x3b21721b,0x3b65e04c,0x3b7d3127,0x3b7ec8cd,0x3b4857c4,0x3af855a8,0x3aee7b55,0x3a835654,0xb886d975,0xb9231012, +0xbac29c5b,0xba8a110a,0xbafec8e9,0xbab2a7a0,0xbafbdac2,0xbb503c32,0xbb0cc004,0xbad5985f,0xbb5207e1,0x38d08990,0x39bf1ec8,0xbaacee30,0xb95a6658,0x3a947dda,0x3b067e57,0x39b41dc2,0x3ac04e5e,0x3a5e9510,0x3ba6b1cc,0x3ba7b7d7,0x3b267b25,0x3b035fcc,0x3b1d1867,0x3bae786e,0x3ac739e0, +0x39655e8c,0x3a452b9b,0x3b422dcd,0x3b8c1edb,0x3baa2131,0x3b8cde2a,0x3b555fed,0x3b14224e,0x3ad28aaf,0x3903cbfd,0xb9fb2207,0xba498fa7,0xba203a0e,0xba99582c,0x384aec03,0x39580f85,0x398a67c8,0xb99df912,0xba1cb03a,0xbb293509,0xba11ac84,0x39bac0dc,0xbaf7ba2f,0x38ecbc3d,0x3bb14406, +0x3bebdd7c,0x3c0a348c,0x3c0e8060,0x3c02b341,0x3b70d847,0x3b3d1072,0x3b832042,0x3a3db0c6,0xbaa1235c,0xbae941e3,0x3b222e5a,0x3ba713ce,0x3bd569eb,0x3a73ba6d,0xbb1f7f09,0xbbc342d6,0xbbd600bb,0xbbba33b3,0xbb8931bf,0xbb9d204d,0xbb7dce16,0xbb562517,0x3ab0b1c5,0x3a8fa9c3,0x39781400, +0x394de9fb,0xb91fc178,0x384d07d2,0x38216f9a,0x3aba40ff,0x3ad462f9,0x3b591e5b,0x3b9697b3,0x3b7edeb3,0x3bc177ed,0x3a807040,0x3a8756a0,0xb938b82c,0xbac14244,0xbb79bb11,0xbb8ec2df,0xbb65de19,0x3b0a8f52,0x3b553bd6,0x3b828a49,0x3b279c99,0xbb6efdef,0xbbc34b66,0xbb4fafa3,0xba55a633, +0x3b09c195,0x3bb52217,0x3bafadfc,0x3b75875b,0x3ad4b509,0x379dadcb,0xb98252e8,0x3a33116f,0x39e13998,0xb914d0e0,0xb9c4ea35,0xb5a302b9,0x37850e13,0x38534f9a,0xb8c56692,0xb9bf9d2a,0xba6a3a2d,0xbb07db9e,0xba81d544,0x3b89b516,0x3a2bd3c0,0xbac2843c,0x3adf7f64,0xbae75e32,0x399771d1, +0x3c02d886,0x3ba5bd24,0x3bb873be,0x3bdeebb5,0x3979abb0,0xbb0c69d4,0x39fd0ce4,0x3ad3bc4a,0x3b58fbf0,0x3ac372c3,0x3a3ff214,0x39f4a1a0,0x39956152,0x39c8c6ff,0xb9847824,0x39598471,0x3815e055,0xba132eec,0xb9a92913,0xb92b91ef,0x38835cd0,0x38c78ceb,0x387fdb17,0xb883314c,0xb7a565f2, +0x3838fd7c,0x394e2301,0x39f7620d,0x385cb7cc,0x38f9ccf2,0xbb3b3ff3,0xbac578d5,0xb9d2d911,0x3c06825b,0x3ac48938,0x3ad56b17,0x3be99608,0x3c030011,0x3c1810aa,0x3c1a9cc7,0x3a54a5da,0xbafded71,0xb9cf7cad,0x3b96fc37,0x3bc17ab9,0x3b5180da,0x3aa00c11,0xb9a9e95b,0xba296361,0xb9f9cb0d, +0xb7796757,0x3a865fe7,0x3acdc4e7,0x3a81b986,0x369f077a,0x385e3693,0x3866c4f6,0x3883fb7a,0xb7a3fde1,0x387f8c0c,0x3892e950,0xb86377c7,0x37943911,0xb9bcb0df,0x39bb3c9c,0x39b61d74,0xbbb5749a,0xbb760292,0xbb918614,0x3c09efcb,0x3b3bd886,0x3ac22653,0xba947167,0x3b122639,0x3b9698d7, +0x3bfa1108,0x3ba683d4,0x3b4313e4,0x3a501785,0xba6eb5fc,0xba64d246,0xb99ebd3b,0x3a01214b,0x3a739045,0x3afd103f,0x3b1e1197,0x3b34044b,0x3b3ae3c7,0x3b0f1108,0x3b079a4a,0x3ac7ebdd,0x396293ad,0x37112063,0xb83d1919,0xb8530169,0xb8d0103b,0xb7cc7d3a,0xb8673c02,0x38d97306,0x37972244, +0xb9327fcb,0xba92b361,0xbbf67c04,0xbc0d4fc1,0x3c10336e,0x3bdb2cf1,0x3bdaac97,0x3bd342c1,0x3ba9aaba,0x3b712481,0x3a9b5d91,0xbabc9cd4,0xbad6d32e,0xbae0560b,0x3a91dd39,0x3a2bb168,0x3b0e034d,0x3b1bca77,0x3ac535f4,0x3a9bf43c,0x3a224a0a,0x3a5824ee,0x3a681039,0x3ac0ded6,0x3b19ffc1, +0x3b1f7d35,0x3af8e7eb,0x3a903417,0x39f0ff0d,0x3954e4f6,0x3951ea8c,0x39308a82,0x393c6a0f,0x38b3f2dd,0x3913bf59,0x3789c71f,0x38af8e3c,0x3a927511,0x3ba6fc4b,0x3bffcc19,0xba81113c,0x3af0d96f,0x3b13657a,0x3a920d99,0xb918eb6b,0xba867ab6,0xba833abe,0x38a0a2e7,0x3a5353b2,0x3a9675a9, +0x3a6e11ef,0x3ab7cbbe,0x3aebd4ab,0x3b05013e,0x3aff251b,0x3aa2f7de,0x39b056be,0xba082231,0xba44c5bc,0xba7208df,0xba664d40,0xb8896df7,0x3a4921ee,0x3a392f52,0x39ee0b03,0xb8b56ffa,0xb9f5b987,0xb967c837,0xb953b0d0,0xb89e87d3,0x37e19a74,0xb9cd4f83,0xba50c941,0xbaa348dc,0xbaa933d7, +0xba4cf5ce,0xba276260,0xba8c1b5f,0xba5dc0b0,0xba1a693a,0xba85b98e,0xba108a8c,0xb84d8a4a,0x3a32614d,0x3a95b00b,0x3ae7f7e4,0x3b13c9bf,0x3b223033,0x3b17a83a,0x3b018a9d,0x3ad23516,0x3a47a92c,0x391841cb,0xb9102ea5,0xb9e27eac,0xb9f6be5a,0xb90caf80,0x38e30683,0x3a802f1b,0x3a72530f, +0x3a9459d1,0x3a8498b8,0x3a630077,0x39b32c46,0x39aab812,0x3906006c,0xb910499e,0xba23d3d0,0xb91bd050,0x3775586a,0x387b13dd,0xb99d012b,0x3a5a0761,0x3a21ee15,0x3921979c,0x39c5fa6a,0x39abbce4,0x3ab9af11,0x3b066bd0,0x3b2c6a06,0x3b2c8172,0x3b217668,0x3b2633d7,0x3adc3c93,0x3aa28033, +0x3a52b262,0x3a25f066,0x3a1e68a5,0x3a07e601,0x3a06a43e,0x3a14938f,0x39814eba,0x3a6d5629,0x3a4c6c7b,0x3aa0c1d0,0x3ab62809,0x3afc6cfb,0x3b2a6d2b,0x3b093d9f,0x3b18a7fc,0x3b136f1d,0x3ac6d738,0x3aa4002b,0x3a1c1398,0x3a3a36bf,0x39df2660,0x3a26b9e1,0x3a0936fa,0x3b17d4d4,0x3b2248ed, +0x3b2d1978,0x3b3767ff,0x3b2f28fa,0x3b1b9023,0x3b01dab8,0x3b00bc7a,0x3ab92d87,0x3a87cd0b,0x3a2a1582,0x3a0a7bdf,0x39b6d46b,0x37f2bae7,0x38cc6c39,0x3863812a,0xb81d3614,0xb9149adf,0xb997d1a7,0xb863c67b,0x38747f46,0x3a3583c2,0x3a90dd4d,0x3acb7548,0x3ac75a7b,0x3ad7dff0,0x3af41846, +0x3b0034ea,0x3ae1f037,0x3b107602,0x3b0456c4,0x3b18fb26,0x3b341da3,0x3b24f6ee,0x3b1db4fb,0x3b46dfc8,0x3a9e279e,0x3a7acad9,0x3a688763,0x3a502032,0x3a5c84fe,0x3a7ede6e,0x3a9367e2,0x3aa46efb,0x3a97c345,0x3a903dce,0x3a81314a,0x3a5a177e,0x3a31f1a2,0x3a0fc153,0x3a173a29,0x3a1a6e12, +0x3a29d3e6,0x3a386646,0x3a31b577,0x3a2b1fc8,0x3a8861f2,0x3a70144c,0xb841b4c0,0x3aaceaa5,0x3aa738db,0x39951754,0x3990b67e,0x3987a340,0x39a889c9,0x398f437c,0x39736034,0x3957ab5a,0x3a64e147,0x3a8429bc,0x375e1fee,0x3a59d188,0x3a9a0b34,0xba9eadff,0xbab59b72,0xba643041,0xba3fc835, +0xba4bfed9,0xba43f77f,0xba5bf3f1,0xba747880,0xba8d7d0d,0xba865a44,0xba718c95,0xba108d71,0xba6aac11,0xba805b19,0xba807b91,0xba60561e,0xba55a931,0xba3b6f79,0xba4db5b5,0xba3f5090,0xba60c097,0xba6d10af,0xb9994ed0,0x3ad9fef8,0xbaaad6ba,0xba2266eb,0x3aaf080a,0x3aab950e,0x3aa1f3b0, +0x3a6de067,0x3a9cf5a3,0x3a91880f,0x3a1fdf30,0xb9b6c4e0,0xbaa38c2c,0x3a940d28,0xb8c705a5,0x3a46db37,0xba743c0a,0xba505a36,0xba3df099,0xb9cb72c6,0xba0083c4,0xba870bab,0xbaee8f38,0xbafdb042,0xbae1a5cc,0xb9e2fe35,0xba8630da,0xba9df6f6,0xbaa9d79a,0xba7deb56,0xba6659e1,0xba1f0249, +0xba45fe1e,0xba516029,0xba7040b3,0xb86bb981,0xba09a281,0x388d804f,0xba8a87ed,0xbad2918a,0xb9fec794,0xba8bea58,0xba5c966b,0xbab511fc,0xba37840b,0xba7dfdcc,0xba9b58b9,0xb98cbea9,0xb9e91aad,0xba536cc5,0xba1bc7ed,0xba5c48cf,0xba597e39,0xb9efaeec,0xba11f787,0xb946e988,0xba264e73, +0xba8944b4,0xbb151790,0xbb191670,0xbafc766b,0x39a11068,0xbac97ad0,0xbaec057e,0xbae0ea89,0xbaa13a06,0xba4dd51b,0xb9bbb52c,0xba0e513b,0xba2b9240,0xb9bf8588,0xb8df0ee8,0xba14c569,0xba327122,0xbaab88c5,0xbaa50d1b,0xbad302f1,0xba938fb6,0xbaf3a9b3,0xbb3160d3,0xba8aca35,0xba7931c4, +0xbb195b92,0xba34eb3a,0xba06c5e5,0xba921301,0xbac4c3c6,0xba324362,0x39608d4c,0xba2e6656,0x37d35620,0x3a495520,0x3a1a9e95,0xba4b475e,0xbb36f151,0xbb7c44ca,0xbb4e590b,0x3a7d3741,0xbab677a3,0xbad60df0,0xbb05f61c,0xba9698d2,0xba1b3a68,0x38805b9b,0xb929d65b,0xb9f7258a,0xb8c55240, +0xb9ceb785,0xba85599b,0xb9fa0846,0xbb13d56d,0xbae725a7,0xbaf85bf7,0xbae16940,0xbabfa359,0xbb26be1d,0xbaecf94d,0xbac59edf,0xbb4cb4bd,0xb9a4efb9,0x3740ac05,0xbb1a1d82,0xba9bf8ac,0xbac80168,0xb99130c2,0xb9435dc2,0xb9bd240f,0xb641cfda,0xb881691a,0xba9e804c,0xbb3d3b14,0xbb719b68, +0xbb215d99,0x3ac1db66,0xbafa64f5,0xbb5bfadd,0xbb4b8186,0xbaea453d,0xba411f63,0x398a2d33,0x38b0e215,0x3985a057,0x3a04d0e7,0x39f5fb85,0xba0ca2d0,0xba8ae041,0xbab25a44,0xba4cf459,0xba6071b7,0x399953fd,0x37d54db7,0x39816453,0x37be5681,0xb9b0261d,0xbafa6e26,0xba19f428,0xb8608a11, +0xbb15c141,0xbaa724aa,0x3b63075c,0x3b4149e5,0x3ba5fa32,0x3baa6bc7,0x3ba536c4,0xba38b830,0xbb35eb88,0xbb0c1e29,0xbb6117d0,0xbb7f2166,0xbb86b4e8,0x3a8a409e,0x3b9e0d8f,0x3c02171f,0x3acc2a98,0xbb16d9a4,0xbb9fb2ad,0xbbeb5c0e,0xbbf96306,0xbbd2c2bc,0xbbbcf279,0xbb8454e7,0xbb43b3a7, +0x3ab5b59d,0x3a6c268a,0x37bb0739,0x38d1949d,0xb8bfbb40,0x389b1b20,0xb97b2ba3,0x3a3c165d,0x3a4c0003,0x3b11789b,0x3b57ea5f,0x3b765c39,0x3b3f0d1d,0xba88e349,0xb94e9f67,0xb8fe729a,0xbb1d8745,0xbb79d0f0,0xbbe4943c,0xbbc98751,0x3a22f28f,0x3a707a53,0x3b0be82a,0x3b203b4a,0xbb7eda0d, +0xbbd7eb79,0xbb9f459c,0xbb5b6cd5,0xbaba54a6,0xb9b7183d,0x3a62f806,0x3a1035db,0xb94ef531,0xb8caff68,0xba8052c7,0x399384e4,0xb966f44a,0xb9d759b7,0xb95c0de7,0xb7875d3c,0xb7b7cb66,0x372db97d,0xb7068e92,0xb95caf9b,0xba0e2b4e,0xbab27674,0xba860414,0x3b23f21b,0xba5fafe2,0xbad8e1c0, +0x3ad4c195,0xbaa88369,0xbabfce07,0x3b1f2613,0xbafa8749,0xbae615ff,0xb9b55ed2,0xbb4150dd,0xbb54b3d7,0xba8e8e26,0xba16cce5,0x37ff9e31,0xbafe3d37,0xbb22536e,0xbb1c2716,0xbaa99550,0xba98aee1,0xba946335,0xba936e33,0xba6867ef,0xba34c10a,0xba28c393,0xb9df1dcb,0xb8e04950,0x38ef05b4, +0xb82221cb,0x379b5a84,0xb81c35b2,0x3767b5de,0x36a370d8,0x39ec4797,0xb8d1ffc2,0xb956202d,0xbb35f52e,0xbaa21382,0x3a037e42,0x3bf1c92e,0xbaa68431,0xbb6895a4,0xbb9ef4fa,0xbb082bad,0xba097868,0x3b41ac96,0xbb31f7f3,0xbb8a3e9f,0xbb901cfa,0x37881928,0x3a713229,0xba6ccc86,0xbb268f9c, +0xbb3f386d,0xbae3fe75,0xbac3d48e,0xba152668,0x3a34c456,0x3a230ed3,0x3a587397,0xb9c15e28,0x3485b051,0xb8b8f9db,0x3803df30,0xb7872071,0x3823ebc6,0x37573b0a,0xb68b7c63,0xb737c9e4,0xb9b38f0c,0x39680cdf,0x36cf750d,0xbba62c03,0xbb6df5e8,0xbb8417f7,0x3ba1f530,0xbb99d1bf,0xbc022c56, +0xbc5746ec,0xbc0d74a0,0xbb6f5d1a,0x3bc7338e,0x3b2fe225,0x3aac0b3d,0xbb05a3b7,0xbb454455,0xbb4b4d35,0xbb08a56c,0xbb120a8b,0xbb0657bb,0xba9fea2e,0x36eaa3c4,0x3aa9f513,0x3b05a925,0x3afb9660,0x3ad09929,0x3a6dd0a1,0xb982880f,0xb90213a8,0xb8bc1f7b,0xb8a2dd4d,0xb8c0478e,0xb8324c81, +0xb89846c3,0x37ad8715,0xb69a9c64,0xb94eb5c1,0xbae10273,0xbc015ff9,0xbc126423,0x3c02939e,0x3b936846,0xbae3d79e,0xbb19ac8a,0xbb0b1825,0xbb633d8f,0xbbb36a87,0xbbe8ca3d,0xbbc846b6,0xbbcc9e7d,0xbb9b8747,0xbb7d5164,0xbadcd41c,0xba812e43,0x3802a6fa,0x3a41501f,0x3a532be0,0x3a8950fe, +0x3a76dc25,0x3a82abe1,0x3ae874cb,0x3b0aa746,0x3afa55e1,0x3a8d5905,0x39b037dd,0x38ccccf2,0x3911e3f9,0x39010958,0x38c84fcd,0x37f8b37b,0xb7c92c8d,0xb766c306,0xb9b2f390,0x3ad3d4c3,0x3b9595c8,0x3c040ee0,0x3a05efdd,0xbab3d4b2,0xba9cb17d,0xbb054326,0xbb4e7828,0xbb6d19de,0xbb576236, +0xbb3c036d,0xba467a7c,0x39bd1c34,0x393753ba,0xb8c94cde,0xb9e80323,0xb9cb9915,0xb9f5f66c,0xba699b0a,0xba930c43,0xbab7880f,0xba95dbe0,0xba02bc80,0xba0c98de,0xb94ef68b,0x3881d033,0x3985ee09,0x38bf1a36,0xb99610ff,0xba08ec01,0xb9818d3a,0xb9a0d1eb,0xb91cbe61,0xb949bad2,0xba1490e4, +0xba70bd77,0xbadd1f22,0xbb0405c3,0xbb106eb3,0xbae510cc,0xbb0d23fa,0xbb27730c,0xbb0a52b5,0xbb09ac34,0xbb0f7387,0xbb0a7dc1,0xbb12a80e,0xba6d2e7b,0x38a73bc8,0x3a657361,0x3a985f21,0x3aa0bba9,0x3a90f878,0x3a2e4fd7,0x396ded5c,0xb93c1bce,0xba093dd1,0xba43666f,0xba707fb8,0xb9ff4a4c, +0x3917286a,0x3a3e48be,0x3a48bae2,0x3a72de2f,0x3a406672,0x3a0fd9e1,0x3965f24d,0x394885ec,0xb924e527,0xb9c516f0,0xba6de3db,0xba3eaf66,0xba1f45a5,0xba24d3fa,0xba65e28e,0xb902d341,0xba8fde12,0xba956418,0xbaab25ba,0xbadbe2d4,0xba4a1c65,0xb9201929,0x3988fd80,0x39ee72d1,0x3a02613a, +0x3a627a75,0x3a69f58a,0x3a94c254,0x3aa24ebd,0x3a873c27,0x3a748c70,0x3a373d70,0x3a00fa99,0x39dae7da,0xb95cae8d,0x39877411,0x3a394f7e,0x3a72cab3,0x3a9fa9dd,0x3acfca11,0x3af7b980,0x3af90d1b,0x3aa31ed0,0x3ac89528,0x3a52ebba,0x3a3a9a7c,0x391db5f8,0xb997ab45,0xb90dc28f,0xba41542f, +0xba53b7ff,0x3b3bae9a,0x3adb81f8,0x3acbb50c,0x3ae0be4f,0x3ae03623,0x3a9502b8,0x3a1e397e,0x398aea82,0x39e4cb54,0x3a123b03,0x3a0e5f7f,0x3a12c1cf,0x39e0fa5c,0x39acba92,0x39900f7e,0x39871ad9,0x39b12905,0x399255ca,0x39cd1ac1,0x39aa8836,0x39860797,0x3a14888b,0x3a53fd7f,0x3a903425, +0x3aa40a25,0x3ab71268,0x3ac2b629,0x3aa85821,0x3ac5c873,0x3ad64c99,0x3ac4130b,0x3b0c25ae,0x3afa9194,0x3b14f6d0,0x3b3fd5c1,0x3ae706f8,0xb8cea5ff,0x38c064d7,0x39678a9d,0x383031d6,0x381fb994,0x3902a7fb,0x39aba73c,0x39cb3f64,0x39b9caa5,0x39a2816f,0x399e35a8,0x39a6e82c,0x39c013a0, +0x39d77fac,0x39d8e9da,0x39d1eb93,0x39d0c2af,0x39bf631a,0x39a65ff4,0x39adc94a,0x38c378a4,0x39c63cee,0x3a8defe7,0x3967050e,0x3a13aeb4,0x3ac35023,0x3acf7626,0x3ab8a0a0,0x3ab10d2f,0x3aae0b7e,0x3a9490ee,0x3a6d60a1,0x391e651e,0xb8f0b885,0x3a6bc86c,0x39b01958,0x39bc95d5,0x3a9c196e, +0x3a9eb7cc,0x3ab8b471,0x3a6cbd1f,0x3a69cb21,0x3a520b6e,0x3a893c1a,0x3a8c797e,0x3a71e485,0x3a72a4e2,0x3a85247f,0x3aab4dd9,0x3a77d22f,0x3a5e0584,0x3a60a0ac,0x3a7c010b,0x3a8df01a,0x3a9ec5b6,0x3a965218,0x3a814fd8,0x3a912c2f,0x3a0d5dc7,0xb963623c,0xbadeae9f,0x3a385af6,0xb995a821, +0xbaed0186,0xbae9b2cc,0xbae54060,0xbad5115a,0xbae003e9,0xbacdfd43,0xbac9e8bd,0xb989b2f9,0x3a80f53f,0xbacaf9dc,0xba05fb8f,0xbadb8598,0x3aa9dc17,0x3a929aa9,0x3aa38c78,0x3a9bb196,0x3b18e23a,0x3b150420,0x3ac4dc3d,0x3aa47ade,0x3ab9ee46,0x3b18dd75,0x3ad92467,0x3ac63eea,0x3ad321e9, +0x3aea39f0,0x3afa6285,0x3b0a0248,0x3ae27e1d,0x3ac3fb8b,0x3ac782e0,0xb992fafd,0x39095f7d,0xb991c6cc,0xb9cc42f4,0x3955e153,0xba565a7a,0xb97b220a,0xba326864,0xba115edd,0xb96334aa,0x3a25864d,0xba8178e7,0xb8385325,0x39347680,0xba1d54d5,0xb93ec223,0x3937646c,0x3b16e6e5,0x3a8e5636, +0x3aa7573c,0x3a61f7ef,0x3b245542,0x3b3ba942,0x3ad4c570,0x3ac4bc41,0x3ad89fb8,0x3b66215f,0x3ac64f9b,0x3aa2115b,0x3aaad164,0x3af49dc1,0x3b1f949a,0x3b51ede2,0x3b1b93a1,0x3b11b51f,0x3a9951a7,0xb9a9346c,0xb901f006,0x3a280a19,0xba74746e,0xba8f5146,0xb9e462f6,0xba805641,0x38c073dd, +0xbaf242d6,0xb78bc0f0,0xb9f3307b,0xbaa8bdad,0x39a9e189,0x39b8c523,0xba618194,0x3a78b1d6,0xba399057,0x3a93e400,0x3ab01e38,0x3ac5166b,0x3abeef81,0x3b89f658,0x3b98557a,0x3b2dc668,0x3ade8fe5,0x3af77caa,0x3ba1fc4c,0x3b299dd4,0x3b0f3465,0x3b1e5d42,0x3b5131f6,0x3b6a4016,0x3b87b35a, +0x3b548865,0x3b1d5b25,0x3adee5e8,0x39c4f350,0x3921bd96,0xb972f772,0xbac7b67e,0xbad39c10,0xba8d2af7,0xbac1ab49,0xbaa1ce36,0xbafea2bf,0xba95cc23,0xba9b850e,0xbb13bd6e,0xb9aaebc3,0x391182f1,0xbabbb21c,0xb9d0b102,0x3a93b508,0x3afd94ab,0x3aa3bebf,0x3a51f572,0xb94b7a1f,0x3b72c148, +0x3b7e0854,0x3b2afe19,0x3af6ff23,0x3b249402,0x3bb733d6,0x3b00aa98,0x3a0156b8,0x3a1208d6,0x3b1b0b28,0x3b779f2d,0x3bae6bc8,0x3b87e707,0x3b5f6690,0x3aff02e2,0xba05781d,0xb900dcfe,0xba28820a,0xba864699,0xb9f5f476,0xba005dfb,0x3a02f69e,0x39297ed1,0x39d5bc56,0x38f981ee,0x38d24ddc, +0xbabca43b,0xb917e80a,0x39e0f2e0,0xbac8a7d8,0xba2f37f5,0x3b52a091,0x3bb31d45,0x3c1aae4b,0x3c1ef08a,0x3c1f8570,0x3b8b7d8f,0x3b58beb2,0x3b99469d,0x3afcd75f,0xb794fd12,0xba232a2c,0x3b6a8023,0x3bd8921a,0x3c10bafe,0x3b58c08b,0xba233167,0xbb3765e7,0xbb9160f2,0xbb8027ae,0xbb420f0e, +0xbb8f633f,0xbb19b886,0xbb039fb8,0x3b043ab0,0x3a4c10f6,0x36a58b9e,0xb6e9a13a,0xb91b62d4,0xb8586328,0xb90ee693,0x39b3cc98,0x39fd4223,0x3ad63757,0x3b4396cd,0x3b2035a9,0x3b94cbc1,0x398f216a,0x3b08a296,0x3a602ac8,0xbad7baff,0xbb7554ce,0xbbafe25f,0xbbb2fdf3,0x39bb2219,0x3aa442cf, +0x3b46cfea,0x3b746042,0xbb5bf9fe,0xbbd10d54,0xbb99910f,0xbae23db5,0x3ad253e7,0x3bb3a04a,0x3b93c2c2,0x3b5b524a,0x38f69961,0xbaa98616,0xba3f4c6d,0x39f89b36,0xb746ff27,0xb938d209,0xb7ff11a3,0x3841af1d,0x388a287d,0x385dc0cc,0x386d93b9,0xb8d5ad59,0xb93c25e9,0xba706d2f,0xb9b31617, +0x3b35021d,0xb8b60e24,0xb9b88229,0x3b5dcf39,0x39b09210,0x3a7724a7,0x3bc6799e,0x3b979a15,0x3bbd3c84,0x3be3f33c,0x3af509fc,0xba49035d,0x398f6785,0x3b09fc29,0x3b7e7619,0x3b4d52b7,0x3ae0df0f,0x3a33e02e,0x3a21275a,0x3996a50b,0x39adc25d,0x3a0f107f,0x381d598c,0xb986f8fa,0xb9c6fe23, +0x38bd3365,0x38b7c6ab,0x382ae10b,0xb74873df,0xb7e4d277,0xb827b7e2,0x37e72b9c,0x35805641,0x3999ab3a,0x397d0265,0xb9711a3c,0xbb00b19a,0xba9c1013,0x3a1d684c,0x3bd7dc9f,0x39a9d9aa,0x3975a9a3,0x3b902a28,0x3be07cf7,0x3c140e31,0x3c22dc66,0x3b63a15d,0x391ab7b0,0xbb0bc824,0x3b8bd214, +0x3bbf3daa,0x3ba21cff,0x3ad8835b,0xb90c8cc1,0xba05ec86,0xb9fae610,0x3a3f0fb7,0x3ace6020,0x3acb63a7,0x3a9de8fd,0xb79f81a4,0x38ab099e,0x37a804f6,0x37c32db0,0x37f91fa6,0x3802a4f3,0x380ed758,0x3703e483,0x38004856,0xb9007cdd,0x38040021,0x36a26e67,0xbb93a756,0xbb2fd4a9,0xbb90c074, +0x3b5869aa,0xbab775c1,0xbb0073da,0xbada0f0b,0xba9909eb,0x3a912159,0x3be3a0f8,0x3b97f787,0x3b36c127,0xba355622,0xbafd4101,0xbb17a6bf,0xbb105968,0xba6a2de7,0x38f40718,0x3adca393,0x3b11b7f0,0x3b296d87,0x3b204935,0x3b05d811,0x3ae2340a,0x3a2fcd04,0xb8dd462f,0xb83b5ea4,0x36aaaf27, +0xb7fe25d0,0xb72bb488,0xb783dcc6,0x3745116f,0xb77f31c7,0x38d5f414,0xb8cb47de,0xba91e86a,0xbc07f782,0xbc0580d8,0x3c0695ee,0x3bef7a87,0x3bddaed7,0x3b9de236,0x3b9b8116,0x3b6b2628,0x3afff3f2,0xba71c873,0xbac98afa,0xbb0bb625,0x3845234a,0xb9fb7ed0,0x3abd2630,0x3b03acd8,0x3ab40d58, +0x3a924993,0x3a5d3133,0x3a787eac,0x3ac53cb8,0x3b208a25,0x3b25848c,0x3b39a87d,0x3af8236c,0x3a757ab7,0x396cc1b2,0x3891853d,0x38ca9f7e,0x38409ae1,0x3880775a,0x37b36313,0x389bd8df,0x3863b5b6,0x35bf4b86,0x3a9c077f,0x3b91b22d,0x3c19c8e4,0xbaadc0f8,0x3af5eb2d,0x3b1b09e4,0x3ab1d1eb, +0x3a29a739,0xb924ab12,0xb93d98b3,0x3a2388dc,0x39de85c2,0x393bd672,0xb9dbcd3c,0xb9381138,0x37a39304,0x39128472,0x39f92468,0x39b9b33c,0x388288d5,0xb9c32806,0xba100d68,0xba60da6a,0xb9e1c9a8,0x398d5bdc,0x3a102327,0x3a01c32c,0x397beb2f,0xb9480404,0xb911c324,0x374c974a,0xb69498fc, +0x376bb4a0,0x38a3b1bf,0xb983959c,0xba3e82e9,0xba7f8fad,0xbaaa04a6,0xba2430c8,0xbac74a65,0xbab1c7fd,0xb997f022,0xb9c3a873,0xba155cb8,0xb9dfaeaf,0xb6eacfcf,0x3a0936e2,0x3a28024f,0x3a8e999e,0x3ac38c2e,0x3afed70e,0x3b0592da,0x3afb17a9,0x3acd76f4,0x3a6b3a1d,0x39e8087d,0x3950e4f9, +0xb8329ff9,0xb97ce8d4,0xb928933a,0x392d4333,0x3a896c76,0x3a32caa6,0x3a51891a,0x39e78db8,0x39915ef5,0xb8f628a3,0xb6731a07,0xb9226751,0xb9bbfa4a,0xba58ab99,0xba272bb7,0xba18521d,0xba5e4d0d,0xba773e11,0xba2a03ee,0xb9f7733c,0xba370593,0xba0a3377,0xba030932,0x3a09cd0a,0x3a98b970, +0x3ae5a2a4,0x3b06ac24,0x3b0dd1d5,0x3b1dc37f,0x3aec3e63,0x3ad50cb2,0x3ab4b7be,0x3aa17041,0x3a9f802b,0x3a8d0e07,0x3a78e7ed,0x3a92d7c3,0x3a107301,0x3a7e16d8,0x3a865ae9,0x3ac0f7b2,0x3ac6cd2c,0x3ae7b25c,0x3b047425,0x3ada4fb3,0x3af36626,0x3aac3049,0x3a8f84b2,0x3a26b3d0,0x3995b567, +0x3941230b,0xba07fdfd,0xb9dad859,0xb9f7decf,0x3add36cc,0x3b08630a,0x3b148a6c,0x3b2ce3b7,0x3b3583e3,0x3b28453a,0x3b2050c2,0x3b245aa2,0x3b03baf9,0x3ad41c01,0x3aa81a4b,0x3a9dfe4a,0x3a84e30f,0x3a459567,0x3a461ed7,0x3a39992d,0x3a40a759,0x3a2c41fd,0x3a07ab32,0x3a5a4c2d,0x3a36ed24, +0x3aa3b453,0x3ac1735b,0x3af58869,0x3af8efe3,0x3b0a0674,0x3b0995b2,0x3b0ac4ee,0x3ae2b9fb,0x3b078b26,0x3b031eaf,0x3ae64632,0x3b0de16c,0x3b0d2ce4,0x3afd232e,0x3b2613a1,0x3a6cb49a,0x3a8e8d3d,0x3a860ff4,0x3a7fd4bd,0x3a8a14c0,0x3a9a48a5,0x3aafad1d,0x3ac5ae04,0x3ac566c5,0x3aca0a55, +0x3ac45316,0x3ab74034,0x3aaabaef,0x3aa0d9fb,0x3aa38d9a,0x3aa49c79,0x3aa97b6d,0x3aab5fdb,0x3aa5db03,0x3aaa88c0,0x3a9c4d01,0x3a3b3998,0xb8bab617,0x3ab620b3,0x3a714424,0x3806572e,0xb8520c92,0xb795886b,0x3887bd18,0xb8a12f44,0xb8c7139d,0xb8306c3c,0x3a10b81e,0x3a774782,0xb99b8f75, +0x398cdf56,0x3afb807d,0xbaad890f,0xba63b3f9,0xbac012d2,0xba75097e,0xba759f87,0xba744a8f,0xba779d1d,0xba8789e8,0xba9d1b37,0xba9a3d2c,0xba90cc2e,0xba4d903b,0xba8f0933,0xba9d8106,0xbaa0819b,0xba99665d,0xba93d3f6,0xba79ec5d,0xba85f72e,0xba726ac7,0xba9d2e7e,0xb960f46f,0x3a1e9ebb, +0x3af6ab3a,0xba4a2486,0x399fc4e7,0x3ae2c040,0x3ad87f9d,0x3ac35f73,0x3a9c75f6,0x3add2bfa,0x3adbc280,0x3aa5a83b,0x3a3a1fca,0xba408c99,0x3abac6b6,0x3a7d4ba5,0x3b02c2bf,0xba4f091b,0xba859163,0xba5869f0,0xba210198,0xb9c95e13,0xba5a7438,0xbae0c848,0xbafa9127,0xbaf2d958,0xba4c2119, +0xbaa6e2ba,0xbaba4dc9,0xbac27a05,0xbab7798b,0xbab4f2ed,0xba6c1562,0xba823bc4,0xba8f0d74,0xbabe3713,0x3a151be0,0xb98634cf,0x39a6350e,0xb9cc2d3b,0xbaade486,0xb9073a6c,0xba457774,0xb9740c1f,0xba1d08e3,0xb7c467e2,0xba8cb2cd,0xba33fa7b,0x39108045,0xb894f267,0xb96b9043,0xb982f1ce, +0x39c8a9d4,0xbaa25250,0xba46a3be,0xba12f989,0xb9d7fc3c,0xb994e2f1,0xb9fedd2a,0xbaf7fafd,0xbb0d070f,0xbb009583,0xb8e2e21c,0xbad9fa11,0xbb063383,0xbb067dac,0xbb06f370,0xbacad86c,0xba4e515e,0xba528e48,0xba9defc4,0xb9dfa426,0x3a629c2c,0xb9a5377a,0xb8de263e,0xba7b60a1,0xba9a2205, +0xba3c2efe,0xba96a97d,0xbb0b6296,0xbae7a943,0xba88a0b8,0xb9a79fc6,0xbad78f2e,0xb9d9b2ce,0xb9412daa,0xb9e9ca64,0xbaa28c4b,0x3a35765b,0x3a00da07,0xba837ea0,0x390c9ad5,0x39b14a19,0x3a9e35bb,0x39a61779,0xbb021f95,0xbb5696a5,0xbb46d35f,0x3982e5db,0xbacd2dfe,0xbae7b331,0xbb026ef5, +0xbb038389,0xbac90f60,0xb99bace2,0xba05a306,0xba863d56,0xba0957d7,0xb9547a15,0xbabd5220,0xb9089189,0xbb27a726,0xbacd4b00,0xbaaf5449,0xba87dcc4,0xba48fe60,0xba8a5d97,0xba8dd414,0xba58e871,0xbb0ba732,0x38fdcb7d,0x388f358a,0xbaebbad9,0xba8a0122,0xba7b6901,0xb9788fe8,0xba68bf8c, +0xb953ea77,0xb9dd7095,0x3a553f05,0x3866477e,0xbaf107ce,0xbb435033,0xbb1a4cff,0x3a3e5bf4,0xbafb694c,0xbb693848,0xbb72aaf5,0xbb555ecb,0xbb0804fa,0xb9b69f72,0xb99b4898,0xb9fb49b3,0xb97a6b71,0x3aac71c5,0xba6a97cf,0xba05b96c,0xbab1785a,0xba33c307,0xb9216131,0x3960add1,0xb62cb93a, +0x398c2950,0x38defc23,0x3926e50a,0xba65809a,0xb9c92be6,0x3829b5ed,0xbaf01551,0xb9d8fb20,0x3b8b372d,0x3b802158,0x3b91a067,0x3bb5c750,0x3bc07de1,0xb926fcfe,0xbb0be98a,0xbab71d13,0xbb7662f4,0xbb9a467d,0xbba8a203,0xba44b673,0x3b6825b7,0x3c00b460,0x3b333314,0xba91840f,0xbb93f081, +0xbbdb2446,0xbbe63a45,0xbba61949,0xbb87eead,0xbb527f79,0xba9bdcd0,0x3aba63c8,0x3a5005d9,0xb918f5ce,0x381a6f94,0xb88cceda,0xb891332f,0xb9146044,0x38c63baf,0x39368e04,0x3a894b10,0x3b1cdfbd,0x3b6cb7c8,0x3b4d9dfe,0xba1353eb,0xb9c8b47b,0xba94d353,0xbb11eebd,0xbb3b2f35,0xbbc946c6, +0xbbc75373,0x39852ef5,0x38eaede4,0x3addf494,0x3b5e121a,0xbb32aab2,0xbbc17bee,0xbbb454fb,0xbb7ac53f,0xbaf2fac3,0xba1b839d,0x3a1c2043,0xb9d77650,0xba4289f5,0xb98a4bbc,0xba7802e4,0x39b388a5,0xb9db0648,0xb9a58a6c,0xb87c3983,0x371902db,0x361f6947,0x383f0dbb,0x377de8d6,0xb8234acd, +0xb917dcfd,0xb9b515ad,0xb9b5b8c4,0x3acc69ad,0xba1d4dbf,0xb856ae92,0x3b53d130,0x3a9c1e66,0x389e446d,0x3aec30d7,0x385f54be,0x39d8db2f,0x3a6d48f4,0xbb28150a,0xbb823d73,0xbb14efd2,0xbac905e0,0xb915abbc,0xba12a7d3,0xbafa9edc,0xbb0e145d,0xba59a72f,0xba86ceda,0xba8f0ad1,0xba53c693, +0xb9863617,0xb9be7475,0x374840bf,0xb942c1bf,0x390733e1,0xb7861dbc,0xb70037b8,0xb7dab790,0xb8259faa,0xb760273f,0xb7cc5559,0x3906034a,0x38a3e8fa,0xb943aa1a,0xbae7f1de,0xb998eb1b,0x3afba9e0,0x3bb4526a,0xba7e5426,0xbb3c6ad6,0xbb9c79b5,0xbaa4f0e1,0x397f01f7,0x3b36fa33,0xba79d417, +0xbb3554db,0xbba72039,0xb9e13b30,0x3a919449,0x3a8341ce,0xbafb4b28,0xbb2b467a,0xbaca0ce6,0xbaa610b8,0xba1f0c63,0x3aa11061,0x3aa7bfbf,0x3a670452,0xb9a26acc,0x39856c28,0xb8e49d20,0x37d3b4de,0xb726a60c,0x373e84ed,0x37df51f0,0xb7a64152,0x3689c940,0xb8f97e06,0x38e08cd7,0xb9528e8d, +0xbb732ac7,0xbb1cf56a,0xbb727210,0xb98d1734,0xbbd29737,0xbbff03a1,0xbc3ccabf,0xbc1bfedd,0xbbb49a49,0x3b8da0a0,0x3b81018c,0x3b67b937,0xbaad0016,0xbae1a6b9,0xbb3c46f0,0xbb32314c,0xbb2895c7,0xbb0d08e6,0xbac83d0f,0xb9c2ceea,0x3a2b1253,0x3ade509a,0x3add1414,0x3a898276,0x39a28cf5, +0xb99f3e8a,0xb8615109,0xb7e81999,0xb87d79d3,0xb80e6d1f,0xb80e88be,0xb49b5985,0xb70feb9d,0xb59412d6,0xb7e1bb5f,0xbab62c6a,0xbbf3f13a,0xbbe5edd5,0x3c3437b1,0x3c0d0bd0,0xba1e17c9,0xbb0c2e29,0xbae920f1,0xbb24c524,0xbb848c88,0xbbc64b87,0xbbb53721,0xbbb8fd8a,0xbb74e8a0,0xbb45eecc, +0xba976240,0x3684fa67,0x3a2b1c81,0x3a93afb7,0x3a8d75ec,0x3ad828f4,0x3adbce32,0x3adff6d3,0x3b3dc538,0x3b38fc5f,0x3abfbc2c,0x3a4d6d96,0x38f09561,0x387e0156,0x38bc5cd8,0x380c4659,0x37abc45a,0x36c32ec2,0xb8a32075,0x393b0c9d,0xb929eef7,0x3aebe858,0x3b9bfb0d,0x3c0e30fc,0x3ae95823, +0x38b94a4d,0xb9df537d,0xba8d70dd,0xbb228025,0xbb533341,0xbb5bd3be,0xbb4c8b74,0xbab89df9,0xba215632,0xba7d86a5,0xbaa9b8e6,0xbab90ae5,0xbab7375f,0xba8dd71e,0xba9f85e6,0xbab3f2dc,0xbac7a98b,0xba9ae4fe,0xb9b7c367,0xb9d9c34d,0xb902fc0a,0x39f6cc03,0x393d4d23,0xb794b7de,0xb8de9df4, +0xb99be914,0xb81de904,0xb90939ca,0x385b0fcd,0x38503048,0xb91e8ead,0xb9c8ac14,0xba79d4ad,0xba8eb547,0xba530343,0xba93f38d,0xbad697b4,0xbb13b868,0xbb000176,0xbaffc894,0xbb0ed3bc,0xbb165b1c,0xbb356c6f,0xbad9fd7f,0xba520c11,0x38f74d05,0x3a260bc5,0x3a72c310,0x3a853ae0,0x3a2b6501, +0x39a1746d,0xb901381c,0xb9d8a21c,0xba23211a,0xba3a18d5,0xb80a51f3,0x39e61c4f,0x3a47fa9b,0x3a2d2eee,0x39fe2aa1,0x38e68e68,0x3948f074,0xb764e30e,0xb7cd9987,0xb98b8c34,0xb9f141f8,0xba5afdc7,0xba716ac2,0xba623c3f,0xba0656e6,0xba544f48,0xba3fa557,0xbb0be4ed,0xbb0fdcc8,0xbb07cc96, +0xbb20529c,0xbad9ee40,0xba8fc33b,0xba28a5b8,0xb8686af2,0x39848f71,0x3a5018e2,0x3a5038de,0x3a9eba23,0x3ac8d4fd,0x3aa0e14d,0x3a945bff,0x3a4a1c20,0x3a30553a,0x39d0de66,0x391acf54,0x3a1659e7,0x3a685049,0x3a86d82f,0x3a9b012d,0x3aaf44e6,0x3ac29973,0x3aaf7b10,0x3a003da4,0x3a999a24, +0x391c93e8,0x39c90adc,0xb98d5fc1,0xba0dfaa5,0xb9f2a9ca,0xbaa0a2ec,0xbac815f2,0x3b21e88b,0x3a6babb4,0x3a752036,0x3a8f7dc6,0x3aa3a3f9,0x3a3d81a6,0x39c5e98b,0xb68c29a9,0x388609ca,0x3940381e,0x39844551,0x39e937e8,0x39ec9700,0x3a121db4,0x3a04cba8,0x3a08f20f,0x3a2ac7a0,0x3a2183ef, +0x3a37994b,0x3a2c74e5,0x3a839a4e,0x3a9c861e,0x3ac67593,0x3adfe3e5,0x3b004c0b,0x3b0809b0,0x3b0c4ed3,0x3b005273,0x3b0264a9,0x3af87321,0x3a9c888d,0x3b07a008,0x3acfe91a,0x3af41863,0x3b2cce72,0x3aa1e58c,0x399408f0,0xb915d323,0x384af471,0xb88a0872,0xb81d30f9,0x37b5b9bc,0x396ba6bb, +0x39ae0d21,0x39e3745c,0x39f459d9,0x3a01a948,0x3a0a8037,0x3a18f31d,0x3a2a62a3,0x3a22fe6d,0x3a1d2d07,0x3a1ab657,0x3a0e72ea,0x3a048219,0x39dbef35,0x3a2e8c8d,0x3a9c816f,0x3adc0482,0x3a42cd5f,0x3aab17a9,0x3b01eb77,0x3b07e32f,0x3aeea098,0x3ae257f7,0x3aef7d66,0x3ade0563,0x3ab6a5ca, +0x3a44ef1d,0x3980ea5d,0x3aa10af9,0x3a6ac95c,0x3a54f34f,0x39dc7b5f,0x38f3072a,0x3a9c4f5f,0x3a08544e,0x39f7f2df,0x39bd2d35,0x3a08476a,0x3a0a8b73,0x39ea857d,0x39df581f,0x3a04f9b3,0x3a5116c8,0x3a0366f4,0x39cf9399,0x39c5af9c,0x39deedd8,0x3a06225d,0x3a300358,0x3a1fce19,0x39fb3607, +0x3a2cf706,0xba0e7be3,0xba9965ae,0xbac42c19,0xb9ba8305,0xbaac7e94,0xbadc0779,0xbaebda11,0xbae99cca,0xbad907b0,0xbaf5aaf6,0xbae69da7,0xbae6f3e7,0xbaa886fa,0xb86ca8cd,0xbac9faa7,0xbac04493,0xbb1cabdd,0x3a195032,0x3a4a0f8f,0x3a3b0221,0x3a120ae8,0x3ab41584,0x3aa62828,0x3a508399, +0x39f1264a,0x3a148d00,0x3ab36722,0x3a5ca465,0x3a399777,0x3a2f1ad2,0x3a3113a2,0x3a4bdd76,0x3aa07965,0x3a6b5d69,0x3a56dfe0,0x3a700eff,0xba9322fd,0xba13882f,0xba20c836,0xbab54d2e,0xba2ee45e,0xba73f1ef,0xba80508c,0xbab39159,0xba6b9da9,0xba4878a4,0x39f786ca,0xba9a95ff,0xba26920e, +0xba077c59,0xba9eb273,0xba3b607d,0xba892911,0x3aeb1a77,0x3a785330,0x3a490af4,0x399c67fa,0x3aac2121,0x3abdaa72,0x3a5a49a6,0x39da8830,0x3a2062a7,0x3b131410,0x3a4c952f,0x39ce744d,0x396c3070,0x39d9edff,0x3a5cdc2d,0x3af80114,0x3a947ca3,0x3ab1c064,0x38d6548e,0xbabfadf7,0xba4c5961, +0xb81297e7,0xbae9908e,0xbacd1a0c,0xba36c7d8,0xbab61fa1,0xba29fbbc,0xbb149e13,0xb9c2c3ed,0xba67a43c,0xba8f1bf1,0xb91cbffc,0xb98994bf,0xbab5da80,0x398a1d0c,0xbacdb4c0,0x3a35f33a,0x3ab55a26,0x3a895f49,0x3a4de7a4,0x3b2bb9c1,0x3b354712,0x3ae19032,0x39b7629d,0x39f772f2,0x3b46ec55, +0x3aaa4311,0x3a7e9bc3,0x3a372178,0x3a56d6ac,0x3a9ead29,0x3b256dc3,0x3af13450,0x3ac1c2bc,0x3a21d2d8,0xb9f59a99,0xb97d3247,0xb9c8c623,0xbae37ed0,0xbaf4a514,0xba0413a3,0xbaac3a52,0xba1a2d2a,0xba33ecd6,0xb9c8b933,0xba434ee2,0xbab1b365,0xba11334b,0xb8e89a46,0xbacbeeb7,0xba38e2ef, +0x39d0eae6,0x3a99d450,0x3ad6d71c,0x39a5a1bf,0xba015c2b,0x3ae99638,0x3adae40b,0x3ac43249,0x398b16ed,0x3a6ce78b,0x3b76ce15,0x3a9adc89,0xb9c29fc7,0xba877a50,0xb98551f3,0x3a8455a9,0x3b48ecaa,0x3b0b8fdd,0x3b00f0cb,0x3a44b7ec,0xbae5a597,0xba1172b0,0xba41cd30,0xba9b0066,0xb94f4240, +0xb8b554cb,0x39f0cc49,0x392e7739,0x39f223e5,0x37bc8c6f,0x39cde2fa,0xb9f05232,0xb7e8f918,0x397c28eb,0xba9a1ff5,0xba9ddfb0,0x3affc8a8,0x3b67a666,0x3c0d7c33,0x3c156555,0x3c1f9fe4,0x3b72dd72,0x3b16b81f,0x3b5be571,0x3ac9d461,0x38ec54c7,0xba162929,0x3b61a2af,0x3be8dd8d,0x3c2a62a4, +0x3bb70801,0x3ab4a790,0xb998eda8,0xbb4bf400,0xbb616249,0xbb3fa05c,0xbb893e90,0xbab93456,0xba5d9537,0x3ae524d1,0x39824d1f,0xb80eb7db,0xb8bddd18,0xb9037d94,0xb918dc01,0xb8caf67a,0xb7975a63,0xb862e9d6,0x3a01f19a,0x3ac3239c,0x3abf6ba0,0x3b359c84,0xb980cb53,0x3b1f3b69,0x3b0c6635, +0xba4c6e33,0xbb1d76a2,0xbbba1789,0xbbd1498d,0xb9dda5ac,0x394aca04,0x3b2aa474,0x3ba2018d,0xbb062864,0xbbb54f2e,0xbbb14553,0xbb237f12,0x3a0c0e3e,0x3b57a166,0x3b1fbf0a,0x3aeedb19,0xba9aa732,0xbaed9058,0xba7636d0,0x395641ed,0xb9b5ab19,0xb948473d,0x38859ef6,0x388adf03,0x3887d689, +0x38afcc6a,0x380b79cc,0x380da73a,0xb5bc8660,0xb9b7ce67,0x389b272f,0x3ab362f7,0xba0d3ad6,0x3a6b4590,0x3ba941c6,0x3b35fad8,0x3abeca83,0x3b3430ab,0x3b1d8b03,0x3b74b199,0x3b9a722a,0x3b11b674,0x39617f14,0x390fcda2,0x3af0fa99,0x3b5c2b1f,0x3b6bc39c,0x3af3b6bd,0x3a057546,0x3a4d6d57, +0x39305aa4,0x3a220788,0x39d5d1e9,0xb8aeced0,0xb8773afb,0xb9c0d0bc,0x38d916d5,0x38801e36,0x370f72a0,0xb80e617b,0xb7b481ff,0xb82b6f15,0x37042887,0xb779d1cb,0x3828f6d5,0x39223611,0xb9758aee,0xbab875f8,0xb9fdf81b,0x3b0a172e,0x3b8502c9,0xba3d5cef,0xbad9c84f,0xbadc5c27,0x3b322b67, +0x3ba97407,0x3be16f11,0x3b8a7d7c,0x3ab3e7c9,0xbb61881b,0x3b2ff597,0x3b8a0fbd,0x3ba929a3,0x3aaa052e,0xb97fce4c,0xb99baa36,0xb9b55d83,0x3a8eabee,0x3ae40b6d,0x3aa426c8,0x3a814c82,0xb90114f8,0x37efcb99,0xb83462b9,0x378d4f85,0x37ff387d,0x373e35ce,0x3746e7de,0x372e598d,0x379e0d02, +0xb840ed0c,0xb71a3d76,0x37e6ead1,0xbb52ff69,0xba95890a,0xbb71ab57,0xbb83f2dd,0xbbc536b7,0xbbbe4e73,0xbbbbf1b3,0xbbd2cf10,0xbb8457bc,0x3b90c4c8,0x3b863570,0x3b6512a9,0xbaa77a3d,0xbaf95333,0xbb3c8952,0xbb525e4d,0xbaf95ee2,0xba4ee0a2,0x3a1195a7,0x3aa62a80,0x3aec2620,0x3ae48401, +0x3ad7a3ac,0x3a8bf536,0xb908a410,0xb96fce67,0x37af7a9e,0xb694538d,0xb74e5d8a,0x37db1511,0xb6c8c886,0x3808780c,0xb7b84b79,0x38a2a168,0xb78fb49f,0xba7e408d,0xbbdff22d,0xbbbbf6b4,0x3c0617b5,0x3c04fb5b,0x3b4e0114,0xb7ffe545,0x3a880ea1,0x39afbfb5,0xb8977e2b,0xbaf4327d,0xbb21c6d2, +0xbb562845,0xbaedba8b,0xbaf780da,0x39bec79b,0x3aaf6260,0x3aa68eba,0x3aa85e93,0x3abb0b6d,0x3ad4cae9,0x3b145964,0x3b40e71f,0x3b1e86de,0x3b249e98,0x3ac42555,0x3a10b43d,0xb8763270,0x384b7844,0xb7105f04,0xb7455fd7,0xb81b75b3,0xb79ecbe3,0xb86896b7,0xb6afd0e3,0xb91efb71,0x3ab7daca, +0x3b66b755,0x3c12c5d7,0xb9e03e8e,0x3a66df01,0x3aac3375,0x3a3c11d4,0x38fe6a3d,0xb9af337e,0xb9d1ff89,0xb83c8654,0x37f6f803,0xb8bbaae5,0xba313313,0xba6332ec,0xba9443f5,0xbab7b58f,0xba64c05d,0xba183ee4,0xb99667ea,0xb9ab5450,0xb961b7be,0xba06d200,0xb90a3e84,0x3a1c70f8,0x39699d94, +0x398550e2,0x38289458,0xb947ae08,0x38841ffa,0x38918b5b,0x38b9928a,0x3843502e,0x3911a8c7,0xb804d6eb,0xb9dcc448,0xba0d7e94,0xba856f9b,0xb9bb51be,0xbaf7273d,0xbaac9336,0xb932d37b,0xb9fadafd,0xb998b8f3,0xb9f382ab,0xb99444fd,0xb9a1fb40,0xb8e83bc5,0x398ffa08,0x3a3cd53f,0x3aaa408d, +0x3ad1811c,0x3ad604b5,0x3aabb899,0x3a6834ad,0x3a2277ba,0x39d82a0a,0x39a987b6,0x38b0d559,0xb958c3fa,0x3924f686,0x3a5ef5c7,0x399e8d53,0x39b61e0d,0x38238fcb,0xb918af4d,0xb994cb71,0xb8bbfe29,0xb99b2d0b,0xba063198,0xba6b5949,0xba833f80,0xba8dfc5d,0xbac41d3d,0xbab6f5b1,0xbb034efa, +0xbad55a27,0xbac0b538,0xbab4a6f6,0xbab278ab,0xba19dbff,0x3784ea0b,0x3a11aeab,0x3a899b6f,0x3ab1854d,0x3ae122c1,0x3ad1c1e9,0x3aed66ed,0x3afc49a3,0x3ae62b80,0x3adcd17d,0x3abc19e1,0x3aa18c5a,0x3abd622f,0x3a3141fa,0x3a514a3f,0x3a86bedb,0x3aaa5c26,0x3a9f89cd,0x3a9a8939,0x3a912e49, +0x3a77853a,0x3a72e349,0x3984c0b1,0x39b7fc44,0xb901cd91,0xb98f60e2,0xba20f084,0xbab2cebe,0xbacc973b,0xbac3bb2c,0x3a797df7,0x3ab701eb,0x3abb9331,0x3af098fe,0x3b0bbc94,0x3b002691,0x3affbcb7,0x3afcf32f,0x3ae6ac57,0x3ad58d13,0x3ac93476,0x3ace92fa,0x3abcbdb9,0x3aae33b6,0x3aa5d932, +0x3aa4c8a4,0x3abb28f4,0x3ab39a8d,0x3aafcb6a,0x3accd56d,0x3a811ad4,0x3abcfe8a,0x3ac2ccf8,0x3aef8fc2,0x3af26087,0x3b0231b0,0x3af3a67f,0x3ae20063,0x3abc6dad,0x3aca91af,0x3ad26da3,0x3a908d59,0x3aae9003,0x3ac8ab06,0x3aabdc0c,0x3ad19663,0x39bac76e,0x3a7524de,0x3a6e5408,0x3a6f983b, +0x3a81e538,0x3a8e84b5,0x3aa57e47,0x3abb8707,0x3ac53a58,0x3ace18ff,0x3ad08e86,0x3acf68c0,0x3ad1b130,0x3ad5e28d,0x3ad65747,0x3ad4efc7,0x3ad4e225,0x3ad05b88,0x3ac853b2,0x3ada304b,0x3a888be6,0x39f31d53,0x38d57e5f,0x3a8e3847,0x3a03b0c8,0x39344a1e,0x38c6333b,0x38cca0c4,0x3916bf9d, +0xb806b0eb,0xb8c79792,0xb8276631,0x3956d292,0x3a23ca29,0xb9af75ff,0xb9679a25,0x3b0fb288,0xba02a261,0x39522df6,0xba667040,0xb9da81bc,0xb9cbc78f,0xb9ed2dcf,0xb9a62f20,0xb9b9b677,0xba0185e7,0xba0687b7,0xb9f44157,0xb971f3bd,0xb9f29387,0xba1a7167,0xba294459,0xba2d4564,0xba1dbe07, +0xb9c9abcd,0xb9e85983,0xb9d31c2b,0xba277c1a,0x3a04db70,0x3a7102f9,0x3a4d9701,0x38ea9e35,0x3a3a6800,0x3a468b02,0x3a21dc6d,0x3a02aee0,0x39e96f38,0x3a521085,0x3a69a0d3,0x3a47094c,0x3a8cca2f,0x395893e4,0x3a21a2e1,0x3a9a46a6,0x3ad9e4c3,0x38cb80ea,0xb9c477c9,0xb91ae1a2,0xb93aaf12, +0x3a20e2d0,0x39dd080d,0xb9b43e98,0xba2c5648,0xba3ac4e2,0xb7e11cdc,0xb9af286a,0xb9e145c9,0xba07da5b,0xba3af754,0xba425cdd,0xb91dee70,0xb99167a8,0xb9e4597a,0xba5f9664,0x3a293215,0x382df906,0x39976f47,0x3843e17a,0xba121cb9,0x3611f942,0xb9b14c9a,0xb7fa5e9e,0x36f9cc9c,0x39de9681, +0xb9b2ca83,0xb981b4c1,0x39c0927d,0x39891e34,0x38e765c7,0x3849d1b3,0x3a9dce0d,0xb9aa7ac7,0xb9915996,0x38dcaf82,0xb9400be8,0x3a684d80,0x3a8a97d1,0xb90b6201,0xba17d61d,0xba1a243a,0x3a322504,0xb9af1db9,0xba5216ce,0xba8de61b,0xbabf61f6,0xba815aa6,0x38d156ba,0xb8489311,0xba00137a, +0xb8bdaef7,0x3a830319,0xb8e52596,0x3a0ee21d,0xba3a6889,0xba878812,0x3872c0a9,0xba9ae396,0xbac51f18,0xba593f0f,0xba2dd789,0x3502921c,0xba34e661,0x38106701,0x393faa28,0xb7d294e5,0xb987c945,0x3aaddae2,0x3a862866,0xb9c38ced,0x3a37ae4a,0x398dbdd0,0x3b27e5ed,0x3b2c3a37,0x3a31566b, +0xba4ad7cb,0xba829835,0x3a7d620d,0x3889f95e,0xb912144c,0xb9b4f233,0xba9e3d31,0xba786499,0x3a36418c,0x399a5ab4,0xb9c182a0,0xb9b78cd5,0xb7f9c61c,0xba9af7d2,0x38a42afe,0xbb101344,0xbaa6bc00,0xba1e0e2b,0xb9f71733,0xb91fc687,0xb9aa0c5f,0xb98a2d3f,0xb9802064,0xba893b9a,0x397b614d, +0x38be4edf,0xba85fc6d,0xba2bf961,0x39268bf7,0x39f5e19b,0xba2dd9f5,0x3980bc19,0xba42ee2d,0x3b11be39,0x3b0eaa16,0x3a6888c7,0xb9e84543,0xb9d8fa83,0x3aca27b8,0xb638eaa8,0xbad99683,0xbb279406,0xbb3840ec,0xbad2b245,0x3a41b9d1,0x3a1f2af9,0x38a5d30b,0xb9b6bdcf,0x3a7f1146,0xba5b48f4, +0xb907d6a7,0xba84cf5d,0xb91df0a2,0x38a95c9d,0x39000c62,0x3925b69f,0x391137b4,0x38b20dc1,0x3924b8e0,0xb8b55400,0xb9435b13,0x3935f439,0xba93bee1,0x397f080b,0x3b9233b2,0x3b9a6dc6,0x3baaf57d,0x3be31289,0x3bfa637c,0x3b023b84,0x3a23c5d4,0x3ac3b149,0xbab242c5,0xbb30f522,0xbb4e397e, +0x38b3e214,0x3b8d5c8c,0x3c0dc557,0x3ba9e2bc,0x3aa83ef3,0xbb224f9b,0xbb9648f4,0xbb9e99d5,0xbb3fe797,0xbb300607,0xbae52d2b,0x395ad3e1,0x3a949c30,0x39ab9a8a,0xb8d83e26,0xb7e57734,0xb90148ed,0xb87a12ce,0xb8b98df4,0x36b495f7,0x3851cd9f,0x398dae36,0x3ab6a518,0x3b1e9004,0x3b477182, +0x3a101dde,0x3993e97a,0xba9881cd,0xbae222a4,0xbb154199,0xbba98d2a,0xbbc0b7b7,0xb9fc9202,0x37443f02,0x3b121f63,0x3ba0cc3e,0xba743ff8,0xbb933264,0xbbb28dbd,0xbb58988d,0xba52dfc9,0x3aa638c5,0x3ad3b9e4,0x392caacb,0xba648f3c,0xba140895,0xba068f75,0x39a351ce,0xb99362f2,0xb92dcfee, +0xb6ace7d9,0x385a7a64,0x38398778,0x3827536e,0x37cf1be9,0xb70bd6ee,0xb70129db,0xb8e36f07,0x393a70ba,0x3a97b0db,0x3984ebc5,0x3b0887ab,0x3b9f9fb7,0x3b12f8b6,0x3a6dee7f,0x3a87f9f9,0x3b269ae4,0x3b70225c,0x3b6ef2d4,0x38286eb7,0xbb1fe21a,0xbb006849,0xba68ef52,0x3a8ff642,0x3b0c0a79, +0x3983968f,0xba2b09af,0x392235d0,0xb991f628,0xb9bfa42b,0x38142063,0x3a0c12e9,0x383aa173,0x39cb3ba0,0xb745e9e2,0x39380b5a,0xb86b309d,0x368a4ca1,0xb855026d,0xb7cfaa10,0xb723ced3,0xb6fbf116,0x3867772b,0x380a8311,0xb7dd59fb,0xba824af3,0x39b94070,0x3b407752,0x3b1201c0,0xbaa6e94c, +0xbae8eafc,0xbb2ca3f8,0x3ae8780f,0x3b63b22a,0x3b82ab97,0x3b2510a4,0x379dec2f,0xbb8f0e89,0x39821c80,0x3b0ecbee,0x3b79a080,0x35bbb020,0xbaa5ed0e,0xba8b30f3,0xba4774d3,0xb98354ca,0x3acfd2f1,0x3ae2e0a6,0x3a45858a,0xb85d7cb9,0x394d225c,0xb8c14460,0x37d67599,0xb64a619d,0x361401ae, +0x37fa5a64,0xb7fe19db,0x379e532e,0xb8b58091,0x38eff6c8,0x3932efef,0xbb1f7a3a,0xba86aed7,0xbb74ab22,0xbc002ad1,0xbbd30ec7,0xbba0e210,0xbbc98ef7,0xbbdfb84c,0xbbaa22a3,0x3ad80995,0x3b99c696,0x3ba9a60c,0xb98f2132,0xba436e72,0xbb3278fa,0xbb5fdc1f,0xbb1fbe80,0xbac910ae,0xba6a65d2, +0xb8526a82,0x39dc8694,0x3aa98056,0x3aaf81fe,0x3a15bab7,0xb8b66091,0xb8a50480,0x37b0a609,0x377bd1aa,0xb7a82ad9,0x354fc07c,0xb66c5344,0x378129b8,0x381a598b,0x3764dc79,0x38d5bfbb,0xba219655,0xbbb1d0ac,0xbb87e092,0x3c362764,0x3c33f882,0x3adafc01,0xba483ea0,0xb994ac4e,0xb99d1406, +0xba2cd04c,0xbb1e35e3,0xbb480fdd,0xbb6c4861,0xbaf224ee,0xbae0dca3,0xb8b2ad54,0x3aa354ea,0x3a8b8102,0x3a949d0a,0x3a95ba73,0x3b023fc5,0x3b1af8b8,0x3b2be9fe,0x3b6e6721,0x3b44cd96,0x3a8837fa,0x39cb4eec,0xb82afdf7,0x37b59dac,0x37e0e158,0xb73cbbab,0xb7c9278d,0x3735bd11,0xb8c875bd, +0x38da54d3,0xb9662b3f,0x3ac0f207,0x3b80a29f,0x3bf814a7,0x3afaeba4,0x3ab5f1af,0x3a912b94,0x3a618b62,0xb9d83597,0xba9df251,0xbae54c69,0xbad819f2,0xba898eb8,0xba62182a,0xbaac5e70,0xbad85675,0xbae09851,0xbafc1bba,0xbaaf4a5b,0xba90459c,0xba898c5d,0xba7d366d,0xba37155e,0xb8f36683, +0x38116bb3,0x39a397cc,0x3a65f8ce,0x398aafb1,0x3730f9ec,0x38ab74f0,0xb8983ef7,0x3880dd93,0x37806535,0x38fb6feb,0x390f74bd,0x39411654,0x390572ee,0xb79dceb8,0xb8d040de,0x3a28638d,0xb9d466f1,0xba135aeb,0xba4ad031,0xba53dc80,0xba389e34,0xba799148,0xba8e5016,0xbad03bda,0xbaa6d0f1, +0xba6525d0,0xb97e57a5,0x39c31a9c,0x3a41898a,0x3a69a1b6,0x3a2e0d98,0x39c7afa9,0x38a84e78,0x370892f3,0xb8a2a873,0xb7c15a83,0x3a0bb71c,0x3a3046f2,0x3a515376,0x3a02f2e4,0x3949c308,0xb924367e,0x371f389c,0xb8ba18c4,0xb8b10761,0xb904ad80,0xb99faa42,0xba1cf6e9,0xba54c893,0xba67de86, +0xba0b24b7,0xba284591,0xbaa360d3,0xbb0e49e2,0xbb0ec09a,0xbae45f59,0xbaf7553d,0xbaaaaba2,0xba5ae64a,0xb9aee25c,0x39a4cab0,0x3a2d9d49,0x3a861de3,0x3a7a7110,0x3aa953ba,0x3ad9d1bf,0x3ab72822,0x3aae6f9e,0x3a7eed8a,0x3a82e2ad,0x3a40ae0e,0x3a57fb41,0x3a8e186c,0x3a913f12,0x3a9af2d1, +0x3a8ed007,0x3a8835f3,0x3a8874cd,0x3a33f875,0x393261f3,0x3a1c63f1,0xb95b42e9,0xb7c7b5ed,0xb9fff07d,0xba0b6a24,0xba595da0,0xbaab4369,0xbad7d042,0x3ad0ebbc,0x3a2b9817,0x3a6278f0,0x3a8b0c5b,0x3ab0a1ab,0x3a938b0f,0x3a8f8ba4,0x3a6c6832,0x3a4979d3,0x3a4e9745,0x3a651e5b,0x3a8f88d4, +0x3a96307d,0x3aa908c6,0x3a9ec0be,0x3a9ea5c2,0x3aaf7d4c,0x3aaa3856,0x3aa321bf,0x3aacad6c,0x3add0b7f,0x3af1ee81,0x3b0b2612,0x3b1313f9,0x3b1b4b79,0x3b1ab744,0x3b20924b,0x3b175d9b,0x3b0a62b0,0x3b03691e,0x3a9edf4a,0x3ae1ed17,0x3ab6626a,0x3ac0fb0f,0x3af3fc38,0x3a9a5446,0x3a7a69ee, +0x39a778b0,0x39f39554,0x39f6b55a,0x3a0d88b9,0x3a1afbaa,0x3a4684fc,0x3a71cd7a,0x3a8ce3c4,0x3a9653cb,0x3a98e07b,0x3a99c57e,0x3a9d3f81,0x3aa4568d,0x3aa0572b,0x3a9e530e,0x3a9d13c9,0x3a973100,0x3a93b102,0x3a866b6e,0x3ac1bdbb,0x3ae96deb,0x3acebae6,0x3ac77db4,0x3af180ca,0x3ae27cfa, +0x3ae70182,0x3accf7ae,0x3ac5c91b,0x3ad130b4,0x3aca8052,0x3ab30b80,0x3aabc352,0x3a7cdbd9,0x3a8615bf,0x3a9ebd13,0x3aff3167,0xba66863c,0xba8dcf62,0xb8c3b3aa,0xb9cc7bb3,0xb9e5d797,0xba0d415b,0xb9fbeabe,0xba043b3d,0xba0db544,0xba151cc5,0xba05dec7,0xb988f951,0xb9e7d681,0xba11ce02, +0xba24f079,0xba2b74c9,0xba237313,0xb9e34721,0xb9fa2b52,0xba000350,0xb9e95c2b,0xba9cd992,0xba9a11d5,0xb8ba7d88,0xbaa819aa,0xbabd5f7b,0xb9a636f8,0xba117127,0xba14f0b2,0xba0c1344,0xba20122b,0xba1cd5a3,0xba427806,0xbaa48a60,0xba8f4ade,0xb9deb202,0xba9fc704,0xba9c0f05,0xba0344ff, +0xb979dcc7,0xb9b8d0fd,0xba08e886,0xb8caf435,0xb996d633,0xba15ace5,0xba6fa3e7,0xba702199,0xb99aabc0,0xba01f562,0xba1f6d8d,0xba636e79,0xba8dfaf9,0xba8e332e,0xb9d58b32,0xba0f9261,0xba02672b,0xba14c9dc,0xba96884e,0xba832693,0xba15f7a6,0xbae1b79f,0xbac81260,0xba230f9f,0xbabac825, +0xbac64579,0xba9718aa,0xba6c7b98,0xb9727a20,0xba7abefc,0xba52cdd0,0xba6f931b,0xbaa7757b,0xba803293,0xbab8917c,0x3873c5f1,0x3840c662,0xb985ba9d,0xba29d567,0xb99966cc,0xb9b6187a,0xba17b775,0xba99f6fe,0xba807dd1,0x395cc4a4,0xb9d75bae,0xba6d2c06,0xbabb7f3c,0xbaee2fb9,0xbacc9418, +0xb9cc31c5,0xba3668d8,0xb9c9d564,0xba8636b7,0xbabbc58d,0xba8be42e,0xba0f0095,0xbafbd8ef,0xbad3cd6c,0xba4e4a0f,0xbacadf94,0xbaca94c3,0xbae40252,0xba42cff7,0xba6e0e07,0xba642398,0xba1c013e,0xba42408e,0xbaaef8d9,0xba66af1c,0xbaa92541,0x398cf276,0x39ccadcc,0x39750dca,0xb994813c, +0x3a3a2dac,0x3a034426,0x3863d8df,0xbacc3ae4,0xbac8e2fd,0x3961faf7,0xb9a9679b,0xba0ffe1c,0xbabc3fae,0xbb191b6f,0xbb07a8e8,0xb8fbc673,0xb9b2f69c,0xb9a24563,0xba642b3f,0xba923a2f,0xba878611,0xb9da84af,0xbb014bb7,0xbad08b40,0xb9647e0e,0xba2fcf4f,0xb7dfffa8,0xb928e444,0x37ec2cd5, +0xb96e2822,0xba2cdae6,0xb9d7d55d,0xb98876b8,0xbace8ff4,0xba916de7,0xba5ed760,0xb944d830,0x3a38b8c9,0xb9efe24b,0xba93315f,0xb980965b,0xba1c443b,0xb9529ea6,0xbadd4060,0xba9ef4fb,0x3a7e38a7,0x3794f4d1,0xbacca800,0xbb4b690d,0xbb75bcef,0xbb38bb98,0xb9e09329,0xba1d8c9f,0xb982bde4, +0xba4ec434,0xbac896ec,0xba692e46,0xba1ef5b5,0xba82d5e7,0x3911761d,0x3887f259,0x398a1eff,0x38d88502,0x388d68dc,0xb63cb054,0x3935e724,0x38a25531,0xb87eecde,0xb888d33a,0xba83cce5,0xba94628e,0x3acd2899,0x3acf9e15,0x3bb4716f,0x3bd3c335,0x3bf8ae0c,0x3aff80cf,0x39ae84e3,0x3a610d5f, +0xb9d48558,0xba89484d,0xba9d121b,0x3b0b61b7,0x3bcf9c8d,0x3c2af0ba,0x3be6ce79,0x3b39c9f0,0x39ee1f7e,0xbb41df15,0xbb83c956,0xbb5c8f69,0xbb674cee,0xba852ac9,0x39386efa,0x3a631eff,0xb841d41f,0xb86d53d6,0xb8bc244a,0xb8815a38,0xb6f88a67,0xb80fb7ba,0xb8d1ff01,0xb89adc9d,0xb86d3fe6, +0x39d4635b,0x3a777cb9,0x3a768e46,0xba4ec0ad,0x3a7065a9,0x3aa8d504,0xba784e03,0xbacdb19c,0xbbbe183b,0xbbe31fe0,0xbad5658f,0xba809d7a,0x3ae8ab98,0x3bace672,0xba3ca552,0xbb906091,0xbbc6ef49,0xbb7e24ca,0xbab8620c,0xb87c7bac,0x3882fde1,0xb93abf95,0xbaf6cb73,0xbaa5c421,0xba394590, +0xb84666f5,0xb9bb065a,0xb8bb8ec2,0x38802dd6,0x387867a0,0x37c66cf9,0x36848945,0x3735127d,0x37e8f3d4,0x37f2b7dc,0xb8fd76d3,0x38d00da7,0x39ed2e0a,0xba03b4e3,0x3ad4b4e2,0x3bb63666,0x3b6c590f,0x3a85d253,0xba216192,0x38e6e20a,0x3aa8fc73,0x3abf6a4e,0x3a5937b4,0xba2ad09c,0xbac04374, +0xb9c00e43,0x3a85a46c,0x3b10b388,0x3a304ac6,0xba0d45e8,0x396a0ab4,0xb99b7908,0x3998e186,0xb90b6a5a,0xb9329020,0x3818cc42,0xb91c79df,0x35c5f4e8,0x37eb40d4,0xb7a08397,0xb816300f,0x369acf11,0xb729ed38,0x372c5e9f,0xb8252eef,0x38585342,0xb907d5a2,0x3869fecb,0xbaa6a9e1,0x39352223, +0x3b2cf7a1,0x3a19ab36,0xba96fe7c,0xbb28562d,0xbbd1eedf,0xba7e0a2e,0x3a8afcf7,0x3b0be324,0x3b4bdc58,0x3a5d1194,0xbba13a95,0xba166983,0x3a7a4699,0x3b674328,0xb8cda4c9,0xba8e15d0,0xba5de2f2,0xba3180a8,0x39ed484a,0x3aab7121,0x3a31d5c8,0x39f55545,0xb94cd72c,0x37c2bd6a,0xb8b348d5, +0x37d028da,0x3689c93d,0x36a28d18,0xb79c915c,0x37801876,0xb7f10603,0x377eeb1f,0xb92221e6,0x3a00df59,0xbb15eefb,0xb96c81fd,0xbb8627d6,0xbc31e2c8,0xbc04e3e4,0xbbe16ef3,0xbc0aab90,0xbc19fbce,0xbbfdb72b,0x394819ed,0x3b5588cb,0x3b8d7036,0xba85ed61,0xbacbc55d,0xbb65ca51,0xbb86e41f, +0xbb56c795,0xbb189e1d,0xbabb4036,0xba0a5b0b,0x3950cfe4,0x3a27e2c6,0x3a679143,0x39626b98,0xb9f48e1b,0xb8bd2ccf,0x3756f926,0xb71ec6c1,0xb4fa5dcb,0x37974224,0xb6facc6a,0x37c810d2,0xb6e6df1e,0x38596475,0x36a7a7a9,0xb9b9bb42,0xbb8ead43,0xbb44fc62,0x3c00164e,0x3c06a55e,0xba61c100, +0xbb9164a9,0xbb392cbd,0xbb4e835f,0xbb2b3c79,0xbb4dd2d8,0xbb7c09bb,0xbb9d44d9,0xbb821f1f,0xbb57476c,0xba93af3c,0x391e00e7,0x3a2c8abc,0x3a81de11,0x3ac175a3,0x3b024a66,0x3b25949b,0x3b327315,0x3b1f4a6a,0x3b0752d7,0x3a693b90,0x391ec82f,0xb8892507,0xb719bc6d,0xb84b2f87,0xb73eccd4, +0xb8404a01,0xb6fc507f,0xb91215a2,0x35bbfce3,0xb9c7ac51,0x3a99a95c,0x3b30beec,0x3bd9850a,0x3a7f4a67,0x391b40e6,0x39b57157,0x399b436c,0xb9e2d5ca,0xba718839,0xbab20437,0xbadc7006,0xba902e48,0xba5e4e15,0xba96ccd8,0xbaecf0fc,0xbb17cf98,0xbb3c2f4f,0xbb130d95,0xbadffa37,0xba8d732f, +0xba41e4bf,0xb9a92683,0xb89c4b4c,0x398c5476,0x3a182873,0x395f8928,0x38bd4f84,0xb8b51667,0xb741395d,0x388753e3,0x381b447c,0x36248a01,0x38362270,0x383f9272,0x38e4fb5d,0xb7c3ce9c,0xb76a3bac,0xb9df817c,0xb77b96d4,0xbab3c463,0xba5dc653,0xb995b73c,0xba2550b4,0xb93e8763,0xba366301, +0xba6e20c5,0xbad6c5a6,0xbab19074,0xba9136a2,0xba23aa29,0x37ccb00d,0x39f499bb,0x3a2c9ee8,0x39eecbda,0x39b1991e,0x398f0c98,0x39518244,0x3998bf68,0x3939d69d,0x371a33fb,0x39a9d492,0x3a009040,0x390863b4,0x38174ea1,0xb901c0e0,0xb9324b39,0xb90c5c60,0xb7b1d8de,0xb92e933d,0xb990a51f, +0xba21884b,0xba7178e0,0xba91503e,0xbab0b095,0xba94cc8a,0xbb1ba2a1,0xbb1f7aed,0xbb0624d2,0xbaf9e51c,0xbafe2213,0xbac7d7eb,0xba8a93a8,0xba2264a7,0xb85cd1e8,0x39a3c0ee,0x3a3126be,0x3a702bcf,0x3ab950c9,0x3af1837b,0x3adce6f8,0x3ad22ff7,0x3aac23ed,0x3a99239b,0x3a9f8db7,0x3a3e3300, +0x3a1d04a5,0x3a6edf6b,0x3a56c352,0x3a3bcc45,0x3a0c0942,0x39a4b86b,0x3993045e,0xb92032f7,0xb99ea1b2,0xb9de432a,0xba1f91d7,0xba3a2826,0xba8e097b,0xbac7278e,0xbb03da9f,0xbb095dd1,0x3a52738c,0x3a01b2e8,0x3a03a539,0x3a53ab5d,0x3a9ac7fa,0x3a868baf,0x3a8c6771,0x3a71d0f4,0x3a8ee117, +0x3aa713b1,0x3ac1f636,0x3adf0a05,0x3ae1a0d4,0x3af0abb1,0x3addee16,0x3adb1b24,0x3af7ed49,0x3af03345,0x3af4c748,0x3af6b4cf,0x3abdec9c,0x3ad358b3,0x3acfb027,0x3adc3cd1,0x3add6214,0x3ad9919c,0x3accf9ca,0x3aa65fb4,0x3aa01e15,0x3a8ca428,0x3a74c7d7,0x3a57b859,0x3a14d9ca,0x3a6e03a9, +0x3a8bc7ba,0x3a095ff1,0x38f44967,0x39fa0b30,0x3a1835f5,0x3a2034e5,0x3a317df7,0x3a4089d0,0x3a6ea4a5,0x3a8b84e8,0x3a9d6ecd,0x3aa6f96b,0x3aadfc42,0x3ab5b00d,0x3ac26424,0x3ad292fa,0x3acefa0d,0x3acc4b1f,0x3ac7c496,0x3abdc32d,0x3ab6e42e,0x3ac2ebd0,0x3a7253dd,0x3a42f47f,0x3a8afc90, +0x3a616fe0,0x3a349a4b,0x3a976ab5,0x3a98e7c6,0x3a8ab6ef,0x3a8615ed,0x3a795661,0x3a59266b,0x3a43cf0d,0x39c3f34e,0x39de8247,0x3a062d50,0x38cf685d,0x3b065c85,0x3957a10d,0x3a4377f8,0x393506fd,0x392c7123,0x394647d9,0x384f2be3,0x399f4665,0x39aaa3b0,0x398612ed,0x393e337b,0x394ef33f, +0x39aef771,0x395dd377,0x38bbdc43,0xb65e3798,0xb88a878c,0xb615400d,0x39623c2f,0x394747f5,0x39191abe,0x38bfe026,0x39f3c558,0x3972f40c,0xba6177c5,0x39ce36a5,0x38a6c1e4,0xba65911c,0xba8737a2,0xba862a9f,0xba57a580,0xba51025f,0xba30d141,0xba16a458,0x39976fa9,0x3a194f04,0xba558017, +0x394b3cb3,0xb9765196,0x3a37e322,0x39bf7b00,0x39f70dec,0x39140b9f,0x3aafb41a,0x3aba69ea,0x3a8271f9,0x3a0ce4f4,0x39cf8ea7,0x3a2ed9d9,0x3a23fdce,0x3a160719,0x39c157b3,0xb7acf2db,0xb8a63e23,0x3a110503,0x39db98fd,0x3997beed,0xb66db335,0xb90a1a8d,0xb9185056,0xb958bfb5,0xb9aa929a, +0xb920ff6d,0xb993c866,0xba051534,0xba2e01b1,0xb9040b19,0x3842399b,0x39a0dc43,0xb9632daa,0xb4edf32a,0x37557458,0xb98bcd8b,0xb91c2fc9,0x3a3d4606,0x3a70e1b6,0x39d601fc,0x3a3386ea,0xb89ac65a,0x3ad844d2,0x3b084cfd,0x3ac7c98d,0x3a4ff056,0x3a28f509,0x3aa4f94a,0x3a7fb99c,0x3a018afb, +0xb9210a11,0xba4228c7,0xb9d5576e,0x3a611ad4,0x3a172de3,0x39eec578,0xb80cf8ee,0x35e3934a,0xb9b26a3a,0x3a1df501,0xba8156e1,0xba956980,0x39020dd1,0xba9a7f43,0xba19f840,0xba04a4ee,0xb914f09f,0xb8b53994,0xb8cb6afa,0x38ec2962,0x38204455,0xb9bab40d,0x39e4abcc,0x3a04afcb,0x3a90f0fa, +0x3a3b2cb5,0x3a8c4fa8,0x371b7c58,0x3b4d5bba,0x3b8446b8,0x3b4bfe74,0x3ab8dc45,0x3a5f5452,0x3abed903,0x3ad9c7b3,0x3abd8304,0x3a707472,0xba009f1a,0xb9ec8012,0x3ab80e9f,0x3a834a2f,0x3a02c061,0xb958faab,0xb9a061ee,0xba41de73,0xb9020d5a,0xbacef8b6,0xba830ba0,0x386b5fd1,0xb970e5d4, +0x3895b867,0xb7b699eb,0x38aa7a6f,0xb8da3932,0xb925354f,0xb8758d14,0xb8e4c45a,0xba2dc6b8,0xb9df6c29,0x3a603938,0x3a85f4a0,0x39ce22a2,0x3a124eaf,0xba86b7d4,0x3b32dff0,0x3b5324b1,0x3b51b492,0x3ad09a1a,0x3a9b30e3,0x3b08e53b,0x3af5e5a4,0x39d81d04,0xbab63718,0xbb0f7a99,0xba99213b, +0x3abfccc1,0x3aa3dfab,0x3a51a7eb,0xb9ac4a42,0xb9e4454b,0xba29f6d2,0xb908e6c4,0xba049ce4,0x3999aa56,0x386b9ff0,0x38d41d0f,0x380f908a,0x380e84b0,0xb79fdd7e,0x38c5b032,0x37e6bae5,0x387b4e6e,0x38d25e5a,0xba12e1c1,0xb7683ea6,0x3b47fa65,0x3b925290,0x3bd89a2e,0x3c05fe2c,0x3c1b7b25, +0x3b9d4832,0x3b82fa98,0x3b96c5bd,0x3ad9992b,0xb885eddb,0xb9f24175,0x3ad6cfdb,0x3bafa990,0x3c13d4db,0x3bef4da0,0x3b6c0085,0x38e79b8b,0xbb0d1860,0xbb2683b9,0xbab70dce,0xbafe7645,0xb9e34e08,0x3a5617ad,0x3a0a4460,0xb7a16b4f,0xb869d0e9,0xb80eab16,0xb811c309,0xb7a20cfb,0x37c71071, +0xb7c94a3c,0x3882b23b,0xb8426000,0x3a01f114,0x3a387b0a,0x3b128461,0x3a70128c,0x3ab50f29,0x3a762260,0x3931fcab,0xba2b011d,0xbb72791f,0xbbafe3c1,0xbab98b9f,0xb99ca775,0x3b1b4b61,0x3bb1fe53,0x39553f84,0xbb5e4a77,0xbbb2d4d3,0xbb49ed8d,0xb8e04457,0x3b2d0ee4,0x3b128730,0x3a894d96, +0xba812eb2,0xba719000,0xb9431c91,0x38e17ec6,0xb9019b2b,0x3805ed21,0x38159e8e,0x38191c25,0x37b53c63,0x37030b0d,0x374ce4f7,0xb72a1b77,0x3863b7ea,0xb85e0689,0x38c837b9,0x3a668df7,0x3a1ac014,0x3b52335c,0x3bdd0e00,0x3b8df6fc,0x3b1bfc72,0x3a9aca31,0x3b91f1c2,0x3bcc8980,0x3bc70ca3, +0x3b49e48b,0xb8a44dcb,0xbabeefb5,0xb7256b7e,0x3b0f1351,0x3b89c70a,0x3b24bc96,0x3a85a1a9,0x3a9cc2ea,0x3a16a2f7,0x3a318f1f,0x3a3f7279,0x3a40265b,0x3956170d,0x39677b6e,0x38ac5e28,0x38ad4d5a,0xb836b80c,0x36cf2dab,0xb78bc604,0xb6f7665f,0x37442280,0xb7194bef,0x386d8eef,0xb82d7129, +0x392989cb,0xba3455ce,0x39f6774f,0x3b5544ec,0xb9608c4f,0xb89f4e1d,0x38ad96f7,0xba5ea72e,0x3b96c2f0,0x3bda01be,0x3bac9cc9,0x3bc6d757,0x3b42e92e,0xbb3c0f23,0x3a979488,0x3b47b8ed,0x3bc788d0,0x3b0af21d,0x3a022eb3,0xb9a52e3f,0xb8c834be,0x39d5f68e,0x3ac10077,0x3aaf1217,0x39c06045, +0x3897d93e,0x380f13bb,0xb7612a9d,0x379f408d,0xb60d0aa9,0x36a3f777,0x35b7d6b1,0x37691a3f,0xb823c731,0x38d34ddc,0xb97945af,0x3a17e090,0xbac5d94e,0x39416be2,0xbb7ed362,0xbc5562de,0xbba455dd,0xbaaee60e,0xbaa29d6e,0xbb58f5eb,0xbb836dfc,0xba8d93e0,0x3b973092,0x3bc734e9,0x3ab3cf6b, +0x39922bdb,0xbb1665f7,0xbb668ce8,0xbb0feee5,0xba8b9caf,0xb94f6d54,0x39841866,0x3986b3dd,0x3a20dd96,0x3a33427e,0x389cc06a,0xb990b488,0x38e7784a,0x37d5248d,0x37e85942,0x36f29eb5,0x37a26e86,0xb6b96ade,0x38024a85,0xb63bb135,0x38a575dd,0x37b5349d,0x38b385d9,0xbb41d8f2,0xbad1b230, +0x3c0caed8,0x3c2c7fff,0x3b48b906,0xb873f5c9,0x39f7857f,0x3a54dc5b,0x3ad66493,0x3a60e750,0xba69c1be,0xbaffe076,0xba0f7d9c,0xba110778,0x3a854d23,0x3b0f62b5,0x3acc8f76,0x3aa9f337,0x3ac31c90,0x3b0c59f8,0x3b31f016,0x3b4e140e,0x3b53b8a1,0x3b172d15,0x3a1bccb4,0x341e9da8,0xb85eec75, +0x36cf4b13,0xb7a9e9d9,0xb6ceb7fc,0xb7a7a6b1,0x38250c19,0xb8870de0,0x38cc775e,0xb98542ba,0x3a3040ae,0x3b350579,0x3bafe094,0x3ab1dd20,0x3b151e56,0x3b20e95a,0x3b2a32f4,0x3acee6a9,0x3a4f1093,0xb913792f,0xb9806733,0xba2bc088,0xba6baac7,0xba9d08a8,0xbac657cb,0xbaca37b6,0xbb078b24, +0xbaa65e0e,0xba3f2fc6,0xb9d9085a,0xb9880cf2,0xb8d3b89c,0xb7d7d67b,0x39dd807b,0x3a3dbc00,0x3a451d3c,0x397cfb6a,0x381723f9,0x38d4ce85,0x38a65d52,0x385cb6e5,0x385bed72,0x386e40ad,0x38bedddc,0x3944d1af,0x39267d15,0x3a0b7c2c,0x3a0a98ba,0x3abc8067,0x388f35c2,0x39e0de4c,0x3a592b11, +0x39c1012a,0x3a05357d,0x39947808,0x396c16fa,0xb935785b,0xba0da409,0xba263208,0xb9b63e23,0x39afddb9,0x3a41e360,0x3a6b0167,0x3a59587b,0x3a217585,0x39fbdb5e,0x3a0e8af1,0x3a205894,0x3a3182a5,0x3a3a8f8c,0x3a1c1207,0x3a27d116,0x39684c48,0x358ea432,0xb9181066,0xb8a6d319,0xb8d01965, +0xb73bd0e4,0xb76b67e3,0xb83b228d,0xb98fd1e7,0xb9ec65eb,0xba37dbd5,0xba2ac2ed,0xb9ee0fd6,0xbae67bdb,0xbaf0fe66,0xbae492b8,0xba9f2160,0xba936898,0xba3185ef,0xb98005c2,0x39a751ff,0x3a6a36d3,0x3aa1b643,0x3abfdf03,0x3aa1c31f,0x3abc0503,0x3adedffc,0x3ac96830,0x3ac66b1d,0x3aa59721, +0x3aad6ca1,0x3aa70fac,0x3aafd2a3,0x3aa63b7f,0x3a8c25ab,0x3a86e626,0x3a40a13e,0x3a0c89ae,0x39d9190c,0x388b08b3,0x3797069b,0xb8ebef07,0xb9b1b97e,0xb9ee4652,0xba1c4d54,0xba1d75c5,0xba9870d8,0xbaa193c5,0xbac5b2b4,0x39f65793,0x39d35074,0x3a39ae9b,0x3a8168e3,0x3ab52825,0x3aba4950, +0x3ad5ebc7,0x3ad75e2a,0x3ab7b13e,0x3ab0ca02,0x3abad5c1,0x3adba9c1,0x3ae7bc89,0x3af9c07e,0x3aed8b26,0x3ae84705,0x3af8f454,0x3aeffa21,0x3adac9b8,0x3af373dd,0x3b00324c,0x3b088b2f,0x3b0cec2b,0x3b0f07b0,0x3b093e55,0x3b0044bc,0x3aff586a,0x3aea2a48,0x3abf4af6,0x3ab5d30b,0x3a76de26, +0x3a5f3abe,0x3a513861,0x3a4d1db2,0x3a333112,0x3a56a8b5,0x3a99517a,0x3a4287a4,0x3a54d3dd,0x3a70066b,0x3a859346,0x3a8defc4,0x3aa10292,0x3abc591b,0x3ad1b204,0x3ade6418,0x3adfefbc,0x3adccd7e,0x3adb973e,0x3ae101ab,0x3adc8d3e,0x3adba3af,0x3ada8dba,0x3ad5ca15,0x3ad287e5,0x3acd998b, +0x3aee4a93,0x3adf6b8f,0x3a8febe1,0x3aec7efb,0x3addd4db,0x3a8cac9f,0x3a892910,0x3a80abd5,0x3a815800,0x3a7df7de,0x3a786b07,0x3a6fdc9c,0x3aa7f43c,0x3aa8824a,0x3a15dab8,0x3a8086ff,0x3b2e848a,0xbadca339,0xbaba6336,0xbaa4ff89,0xba868c56,0xba8833c8,0xba94089b,0xba9283d2,0xba999b32, +0xba9cb6f3,0xbaa4c89a,0xbaa384f2,0xba8fbf8b,0xba93c988,0xbaa1d44d,0xbab1c952,0xbabcdb83,0xbabe33bb,0xbaa3dd7e,0xbaa4c941,0xba97e19d,0xbaaa9067,0xba8a761d,0xb9fa9e0c,0x3a83cd6a,0xbab83d31,0xba50b1c4,0x3a56181e,0x3a14f284,0x3a09c589,0x3a0194ed,0x3a29934b,0x3a24d873,0x39e44213, +0xb9ed3b0d,0xbaaebd2b,0x3a12aa7e,0xb98b7915,0x3a04a3e7,0xba86b5e0,0xba744208,0xba807a06,0xba9b5a99,0xba6faf5b,0xba93c5f9,0xbab043a7,0xbae82964,0xbafe9f71,0xbad2df57,0xbab6eeb4,0xbabc48e3,0xbaf3d035,0xbb13b6c3,0xbb1b8a8b,0xbad24704,0xbac84e30,0xbabcdc76,0xbae84989,0xba290f65, +0xba83f6e6,0xb9b5f891,0xbaa884fb,0xbad4d4e8,0xb9669b9e,0xbab338b5,0xba9c699e,0xba69d283,0xba193a23,0xba4b6734,0xb9e9348b,0xba0836b2,0xba54359e,0xba574e39,0xba5255de,0xba3756c5,0xba9ec2ba,0xba1159d3,0xba350a98,0xba8f41b4,0xba7c10ac,0xba909be8,0xba9fa0ca,0xbb09294e,0xbb087bea, +0xbacbe5dc,0xba9dbdcf,0xbadc399d,0xbb245fd5,0xbb5bfed9,0xbb531837,0xbb09d472,0xbaf4c5f9,0xbadde512,0xbacf473d,0xba1e2ac0,0xba72b153,0xba07f726,0xbabf9a0c,0xbab379d9,0xba10f771,0xbaa81b85,0xbad2e205,0xba548316,0xba2c8e1d,0xb9d6f54f,0xb9e05d18,0xba28290f,0xba448d18,0xba49a9f6, +0xbaad0339,0xb8a38348,0x398a84c8,0xb99977e0,0xb7832b1c,0xba673641,0xb8607a7f,0xb9b0d189,0xba1557c1,0xbb278a60,0xbb3cf394,0xbb14d997,0xbaad4031,0xbaafa158,0xbb29d43b,0xbb8d5fc0,0xbb8b5059,0xbb07f0a5,0xbaefbfd6,0xbadaefb1,0xbafa9dc6,0xbaa747c1,0xbad025f2,0xb9cf720b,0xbaf3f0a9, +0xba5adc64,0xb63d733f,0xb6189ec9,0x39bed2ab,0x38d466b9,0x38d47667,0xb7e31ac4,0xb90b42d7,0xb88d573d,0xb98ee520,0xba988b5a,0xba887e6e,0xba9b1fd7,0xba50bf26,0xb90dd95c,0xb9d65d6f,0xbaa1fec6,0xba4abcf4,0xba9d1f1c,0xba3b9ed5,0xbb2aea51,0xbb3303dd,0xbae044cc,0xba534eb5,0xbb0b4aad, +0xbb8df896,0xbbc5cd48,0xbbb247d2,0xbb47071e,0xbb187ea5,0xbaf01215,0xbaf576d1,0xba04bdb8,0xba7d3b34,0xb9adea1c,0xb9d53bfa,0x398f0bde,0x37666977,0xb8305e2f,0xb904d0a6,0xb8a9040b,0xb80e8347,0xb7d15784,0x386cfda2,0xb86103e5,0xb8ff2eda,0xba4b2334,0xb9c8a81d,0x3b21723d,0x3af62534, +0x3b55a6ab,0x3b9c1812,0x3bd2e9f9,0x3aca0378,0xb894cfae,0xb9825039,0xbae59738,0xbb13432e,0xbb16c958,0xb90fa0db,0x3b860ecf,0x3c0cc51a,0x3bf42b83,0x3b802d3b,0x399e07bb,0xbb3b59a4,0xbb8c1973,0xbb5c364c,0xbb1f11dd,0xba5625a1,0x3a4d066f,0xb82485cf,0xb892bac5,0xb8851016,0x38169e46, +0x384405f5,0x383b0e24,0xb6150f0f,0xb7b63763,0xb82c694b,0xb8545641,0x37f3575b,0x3a6d37ca,0x39d9c54c,0xb94583ca,0xb94125fe,0x3a2cdd1e,0xb92eaea7,0xb9a97ce6,0xbb9ce1bc,0xbbcc50ac,0xbb0cc564,0xbab2c254,0x3a9edc91,0x3b9a25a8,0x39c6d139,0xbb4c13b9,0xbbc9b563,0xbba2de07,0xbb450785, +0xbb19e028,0xbaa033c1,0xbab5b04c,0xbae50a96,0xb99a4356,0xb9a0c3ac,0xb8dbaca7,0xb9212ec6,0x37da4589,0x36da6ef4,0xb7bc0f62,0xb7f9088a,0xb7d377b2,0xb6e7db7f,0xb69823be,0xb73d6dfa,0x379e0a96,0xb8e71735,0x39483b1e,0x39969595,0x3b4f2b7d,0x3bca64ba,0x3b69aa41,0x39dd14b1,0xbb4d288c, +0xba312032,0x3a4d2d95,0x3a24446e,0x3a01517f,0xba8b5d34,0xbb36bfa2,0xbb0b81eb,0xba4c9437,0x3a8cffea,0x3927225b,0xba624019,0x3896f512,0xb9ceaa72,0xb8509265,0xb9e31bbe,0x3739dd58,0x37b329d1,0x38e4a5ff,0xb8c27193,0xb7c5bad6,0xb74b87ba,0xb4204513,0x37b64210,0x35683e54,0x36bee167, +0xb8088753,0x3874274d,0xb93b0726,0x3958ae0e,0xba39fb4e,0x3a3383fa,0x3b53f25b,0xbaf66829,0xbaf29860,0xbb440ae4,0xbc0db7b5,0xbb1abdbb,0xba16a911,0xba458f9a,0x3b317a2d,0x3a619d52,0xbb99c658,0xbb2a93e8,0xba97ee4a,0x3b1fcebf,0xb9dfaa6c,0xba81a8e4,0xba84ff75,0xba3622d6,0xb9a7cedc, +0x3a2b0544,0x396e7d74,0xb898e0ca,0xb8ad19f7,0x376f1212,0xb854719a,0x3770acbf,0xb7aedd15,0x36a9347f,0xb7a4de1c,0x37c457c3,0xb85e0943,0x389bce32,0xb9893365,0x39ed7647,0xba7a2a57,0xb8688609,0xbb8a67a0,0xbc83a697,0xbc09f5bc,0xbbbb8397,0xbc0a3580,0xbc14508a,0xbc1078bc,0xbb82af61, +0x3b1f5a17,0x3ba513e1,0x3a4373ad,0xba039ea8,0xbb5b6e3c,0xbb854ad7,0xbb78e783,0xbb4d1de5,0xbb2f9bd7,0xbae86a23,0xba93d1c5,0xb9c1b40b,0x38a4b4a1,0xb9dbeef3,0xb9a538c4,0x3883f0fc,0xb82fb0c6,0x37069892,0xb713f2a0,0xb6d7d8e0,0xb7759bfe,0xb6ecde24,0xb6f7ff72,0x36400a4d,0x38b3510e, +0xb93ac126,0xbad60505,0xba8c7f6b,0x3bd094ee,0x3be8caee,0xbb70919d,0xbbd37772,0xbbb206f1,0xbba3555c,0xbb706b14,0xbb4691af,0xbb826636,0xbba53f1d,0xbb99240a,0xbb6694d1,0xbadf7b11,0xb9b7e482,0x39d96244,0x3a6eb19a,0x3ad877ee,0x3b1a202d,0x3b28b7cf,0x3b1712ae,0x3b1a3466,0x3acf8b02, +0x39931a88,0xb8900cd4,0xb428d2c1,0xb833229c,0xb72cd8d6,0x37818299,0x35e6230e,0x37faa1e7,0xb89a2aee,0x3787f594,0xb9a531c3,0x39d5067f,0x3b0f7ea4,0x3b563e85,0x3b1c9334,0xb938c457,0xb8bd87ca,0x39c5b3b7,0xba484173,0xbaa8d806,0xbb0c57d3,0xbb36a534,0xbb040a7f,0xbabf32f6,0xbab80e5e, +0xbb12bc1d,0xbb2e8dc3,0xbb587a8d,0xbb264fcc,0xbafd29ed,0xbaabf7f2,0xba62618a,0xb9a8a8a9,0x39c774f6,0x3a126441,0x3a0217a0,0x39bb6e24,0x37c43e75,0xb88186b5,0x385949c6,0xb81343dc,0xb858ac87,0xb8a97595,0xb8688a19,0xb8b348fe,0x38ddcba7,0x38a48f14,0x39a57b8a,0x39c5700d,0x39f748a8, +0xb9802d58,0xb880fc77,0xb9e03545,0xba460260,0xb9ccec59,0xba6d0b83,0xbaa903f2,0xbb18108f,0xbb08a795,0xbb0537da,0xbad2f538,0xba76fd9c,0xb9edc155,0xb93b47e8,0xb92f2fbb,0xb87c5aee,0xb7a4ec51,0x3846a936,0x3983601d,0x39b5f1b6,0x39f94a24,0x3a0b49ad,0x3965bee1,0x38eb4ff2,0xb8ca0b52, +0xb8bb4028,0x36bc7dd7,0x390ec84c,0x389dd34d,0x38eccd06,0x388e8940,0xb94f8683,0xb9caaa13,0xba3e65de,0xba3db234,0xb9fe6457,0xbb077e40,0xbb364c92,0xbb1e25aa,0xbb0bc468,0xbb13522f,0xbb069edf,0xbae0e4bf,0xbaad3fc8,0xba43d80f,0xb9bc7105,0xb801fa01,0x398e788b,0x3a5b6b80,0x3abbf683, +0x3aa50032,0x3a9c2aed,0x3a72f9df,0x3a78d8d4,0x3a3fe370,0x3a5bde4e,0x3a216659,0x3a4145af,0x39dbf41d,0x39901f72,0x38358216,0xb9164e5f,0xb943abb2,0xba3e4815,0xb9c624b9,0xba4f92de,0xba39dbb6,0xba5bcacc,0xba9dfef5,0xbaa635d6,0xbaf171ea,0xbb0d0569,0x3a1c80ca,0xb9d89ec7,0xb9b2b939, +0xb93b7dfc,0x39516a1d,0x384322ad,0x38db8a4e,0xb9163588,0x391cea15,0x3a024bce,0x3a65f1da,0x3aa4d694,0x3abf13dc,0x3ae86437,0x3ad7b1aa,0x3ad5b549,0x3aed7045,0x3ae8e611,0x3aef2d4b,0x3adf8d8e,0x3ae83a05,0x3ad034e4,0x3acb0034,0x3ab737f7,0x3ab9fc17,0x3aa026e8,0x3a9afed4,0x3a53c464, +0x3a66195e,0x3a154a7f,0x391ddc38,0x3a0038cf,0xb8313960,0x398f1930,0x3a34fef1,0xb9e83922,0x38f1e6b9,0xb8e9dace,0x38becccb,0x3913f76b,0x39523f76,0x3967d7de,0x39c6f9ad,0x3a067d38,0x3a368ccd,0x3a496958,0x3a590ed1,0x3a6c7420,0x3a84300c,0x3a97676a,0x3a902e36,0x3a8d8c56,0x3a87ef1b, +0x3a7af316,0x3a75bf32,0x3a6d318c,0x3a618798,0x3a9d1d95,0x3af46a91,0x3a3f86b1,0x3a8d03d5,0x3af8c114,0x3b0139da,0x3aea101f,0x3add9b03,0x3ae3203a,0x3ad19ed3,0x3ab5c0e8,0x3a2fa1df,0x39989152,0x3aa3cf35,0x3a2a0bdf,0x3ac6d0c6,0x394c1b2c,0x39b54d43,0x3a397e38,0x39a6542a,0x39a769f4, +0x390f9f36,0x39c4ee61,0x39de926c,0x39ecf8d4,0x39b1d0bd,0x39acc2ab,0x39c4e9c2,0x39c985bb,0x3995a24d,0x3928d3f9,0x389024de,0x38d71a3c,0x39900984,0x3998a1ab,0x3964e2fd,0x39addfb7,0xb979186a,0xba51e038,0xbade6544,0xb8e6bafa,0xba7cac68,0xbae40eeb,0xbaf8058e,0xbaeb575e,0xbac483c7, +0xbae079c2,0xbad5c7d7,0xbabfb7da,0xba5fe776,0x390fbed7,0xbad5edea,0xba864002,0xbaeb8a19,0x3a2e4340,0x3a2b4104,0x3a184109,0x388a086a,0x3a935ecf,0x3aac0d69,0x3aae5221,0x3a4885e0,0x3a13e5b8,0x3a03df4b,0x3a4c1478,0x3a4c3723,0x39da2e1a,0xb862fb40,0xb91e61d9,0x39eb2c1f,0x39caf776, +0x39c412b1,0x3982a455,0xba93777d,0xba2f79a5,0xba4a2f28,0xba8ab648,0xb9bf3927,0xba283462,0xba84acf8,0xbab8efa4,0xba3067e7,0xba1c5c63,0x39ba4211,0xb9c15aee,0xba1ab35f,0xba0d4edd,0xba65c1a5,0xba1f86fc,0xb9dcce13,0x3aaa7e5e,0x3a4b7e38,0x3a426f1f,0xb97345a7,0x3aa4c893,0x3ad84d93, +0x3afff49f,0x3a7b23ed,0x3a4a45b2,0x3a48a8ce,0x3aab64ea,0x3a689204,0xb885e845,0xba486350,0xba2ebb62,0x39fc9635,0x3994305b,0x3a1e5384,0xba0247d0,0xbaa5af1a,0xba4676ee,0x38ef14de,0xbab75f1e,0xbaacf19e,0xb92f9bad,0xba84b5f5,0xb8acb481,0xb9e9b20c,0x38c4145d,0xb99aeab2,0x38f910da, +0xb8d01212,0xb9cb3cb4,0xba56618c,0x39ccf8c2,0xba093092,0x3a73b776,0x3ab88433,0x3a8cbab0,0xb9af13f0,0x3b13ad14,0x3b583009,0x3b74fd7f,0x3ae69c27,0x3a89ae0d,0x3a0b3100,0x3af4c8eb,0x3ae6f559,0x3a417e8b,0xba6ddd38,0xba8a9bfa,0x3a4649c4,0x3a25aa25,0x3a16e7e0,0xba1b1d82,0xba6f9014, +0xba1a61af,0xba08c7d3,0xba8310b3,0xba01200b,0x39a1a464,0xb6f3c7b7,0x390cab61,0x37372789,0x38beb5a7,0xb89ae5fc,0x38faa4ee,0xb98bf750,0xb989694a,0xba270ba8,0xb9f19a31,0x3a04209e,0x3a5b1413,0x3a9f52af,0x39f59d59,0xba9d4836,0x3ad0eb6d,0x3b0fe1fc,0x3b6de4bf,0x3ae4b577,0x3a943807, +0x3a98d5d1,0x3b18d516,0x3aa43775,0xbaa17cb6,0xbb24bfb2,0xbafcbe25,0x39d9abb8,0x3a06cb01,0x3a14b327,0xba3ab3eb,0xbae84bd7,0xba0c1b98,0xb98ab182,0xb8908947,0x39c142fe,0xb8d6e5a6,0x38440953,0xb82d69d6,0x3801a8e0,0xb7a6f64f,0x388b17dd,0xb7fd538c,0x39265a79,0x382c068f,0xb989ab33, +0xb9d02941,0x3ade0e1a,0x3b52abba,0x3bc651d8,0x3beff487,0x3c18342c,0x3bb337a9,0x3ba08a8c,0x3ba7a1bb,0x3b5138dd,0x3af31505,0x3ac9aed7,0x3b2e5e2b,0x3bbcc36f,0x3c0fdf06,0x3c109d3c,0x3bb78809,0x3b25169e,0xb94445a4,0xba98b272,0xba87f2ca,0xbaec287c,0x39a97865,0x3a27f88d,0x38546089, +0xb90e5835,0x37dd4ce3,0x3677945b,0x3713f83e,0xb6176f32,0x37824da8,0xb5c1db20,0x37887a8b,0xb8223cf6,0x3766124e,0xb96ba6c9,0x3a71003a,0x3a1da3d2,0x3abd7672,0x3b074e84,0x3a8ba9e0,0x3971fff3,0xbb3e5799,0xbb9eb7e0,0xbb068173,0xb9dc044a,0x3b1c6aeb,0x3bb5f917,0x3aa86c88,0xbb076bc0, +0xbba56821,0xbb5c4c9a,0xba3137b3,0x3ae39db1,0x3ab1b599,0x3a871bc7,0xba8ff74e,0xba712633,0xb82855b0,0xb90173c2,0x37fe8e63,0x38d03981,0x3790e115,0xb6b8b418,0x36bd555f,0x35e49015,0x370acf4a,0x36dbd106,0x37a11116,0x37690cf1,0x3688727b,0x39a4759e,0x3a4f6adf,0x3b667b24,0x3be65c40, +0x3b8e03d1,0x3b06f625,0x37ff8a34,0x3b6f424e,0x3bbbacbb,0x3bb58bbf,0x3b964f21,0x3af8b84d,0xba6366a6,0x3a1872ea,0x3b1f0290,0x3b9b0f7c,0x3b7df21d,0x3b07d857,0x3af3f3b0,0x3a8e374b,0x3abae211,0x3a613aae,0x39bd0208,0x393c22e4,0xb8af94f9,0x38f075e6,0xb7b628d5,0x36a6ab8c,0x36a18eee, +0x36dd214f,0xb6ab4c86,0x37530b50,0xb76546fa,0x384fd988,0xb89e19ed,0x39619750,0xb9ffb6d7,0x39dfa5ad,0x3b1ce730,0xbb224a26,0x393fad63,0x3a140db1,0xba94ff10,0x3b8cc9d3,0x3bd06d13,0x3b7bb53d,0x3be1ce73,0x3b855a45,0xbae442f0,0x3a53a9b6,0x3b1b2a79,0x3bce78e8,0x3b528cb3,0x3af2f4fd, +0x39d1fd9c,0x39eb3aec,0x3a6aff50,0x3a693bea,0x39a2c98f,0xb8842fa5,0x38b5c9de,0xb7ff293a,0x37bf2317,0x36f6b5c1,0xb5999c20,0x3722468c,0xb6e33634,0x3803acda,0xb81f3d25,0x38ff4605,0xb98217a9,0x39c986e3,0xba1fb736,0x39a5604a,0xbb9f03f7,0xbc7ffaed,0xbb8397c5,0x39a47f62,0x3a643563, +0xbae9b510,0xbb82cfaf,0xbb813dcd,0x3b38e2cc,0x3babd8a1,0x3b234867,0x39d54f03,0xbb1ba53d,0xbb606f4b,0xbb2085e1,0xbab58e14,0xb9cbff2e,0xb89b9d0d,0xb8ffa57e,0xb95077e4,0x36f4619b,0xb99c126b,0xb943d835,0x38f87243,0x36967a26,0x37a02650,0x370c6a10,0x36f29a90,0xb71c4066,0x3688b181, +0xb70bed39,0x37d32882,0x383f4f45,0x390913a2,0xba81ee83,0xb9e873d7,0x3b6c0daf,0x3bc48b23,0x3b000751,0xba96f597,0xba359248,0xb9874b02,0x3ab49307,0x3ae7a34b,0xb9e254bc,0xbb0051d6,0xbabd3fb6,0xba9413de,0x3a122a1b,0x3ac1ac46,0x3aa36c29,0x3a94fc3c,0x3aedf8c1,0x3b151592,0x3b3b534f, +0x3b4ef0eb,0x3b09e593,0x3ab00a49,0x393afa50,0xb8dc183f,0xb6b4a51f,0xb6c1bb33,0xb6f8eb7a,0x3705edf7,0x37c513d7,0x37d7410a,0x378e0b6b,0x37390e27,0xb800e992,0xb9618c96,0x3ab04b29,0x3b24b209,0x3a0417eb,0x3b057153,0x3b299f7d,0x3b438300,0x3b0e93b6,0x3ac3e65a,0x39e9c35d,0x38da6d97, +0xba5666df,0xba9814bb,0xba9f9487,0xbad756a2,0xbae208b8,0xbb1d3096,0xbabf0ab0,0xba3c638d,0xb9470486,0x39514077,0x39e9a164,0x39a39f0d,0x3a534a29,0x3a74048d,0x39cd505e,0x38c86b3c,0x38881f1c,0x372d6eb0,0x38855443,0xb4c8cb9a,0xb6ba1fe0,0xb7c8649f,0x35d2d16e,0x38a47c6a,0xb72f7fa1, +0x39c47bbf,0x3a26c096,0x3a97f861,0xb5a217b1,0x3a3d581c,0x3aca7768,0x3a49d5bc,0x3a6d2715,0x3a30023b,0x3a20e31d,0x395f3f2d,0xb9fde0ae,0xba795a34,0xba82899c,0xb9b3d8bf,0x380c7d90,0x39445385,0x39b6f500,0x399f8d1f,0x39c28574,0x3a10fde9,0x3a546121,0x3a71884e,0x3a04d863,0x399c7f77, +0x3987f3d8,0xb821dc6a,0xb8d72eb6,0x3746847d,0xb7c60bf3,0x382bd38f,0x38be59e5,0x39009d5e,0x38a4e11b,0xb7ea4759,0xb92ea81e,0xb9dc2f57,0xba67ddbe,0xb9da514c,0xbb130c9c,0xbadb434f,0xbabc3ac6,0xba8608c6,0xba504b74,0xba10b2c1,0xb97151a5,0x397b77ee,0x3a33d16b,0x3a84ac28,0x3a9683c2, +0x3a685c4e,0x3a7d2abc,0x3a9438bf,0x3a8c0e90,0x3a8afcca,0x3a822c19,0x3a8b814f,0x3a8ecfe3,0x3a9ae3a7,0x3a5f1dd6,0x3a30ae2b,0x3a0109ae,0x394a23d2,0xb824fa59,0xb9432c59,0xb9acdc4d,0xb90d617b,0xba031404,0xb9c35dc4,0xba2fbd09,0xba253fd0,0xba5b183c,0xbabfee7f,0xbaae6600,0xbac137f5, +0xba0e84ed,0x389505e8,0x3991d7d8,0x3a145bca,0x3a79a09a,0x3a8f6604,0x3ab878b3,0x3ac45f48,0x3aaddc87,0x3aa7c0ea,0x3ab5eb6b,0x3ad932a5,0x3aedc33c,0x3afda568,0x3af8d7bd,0x3af409d2,0x3b010252,0x3afdda36,0x3af285ef,0x3b021452,0x3adf9702,0x3aded591,0x3acb9428,0x3ac200af,0x3aa754c6, +0x3a8c4f1e,0x3a72303e,0x3a2fedcb,0x39c3100a,0x39a81bcc,0x39a2c5a4,0xb92d2489,0xb813a706,0x37cc477e,0xb9da2bad,0x38dbeb0c,0x3a2aa1f2,0x3a39884a,0x3a38ec7d,0x3a5f34b2,0x3a7bb4c1,0x3a84fcb6,0x3a9363c1,0x3aab70a3,0x3abeff14,0x3acc417f,0x3ace170d,0x3ac973b6,0x3ac6006f,0x3aca928d, +0x3ac67f17,0x3ac6f963,0x3ac5e76e,0x3ac1838d,0x3abf330c,0x3ac6019a,0x3ab07174,0x3a7da277,0x3a09eee0,0x3aa50ad2,0x3a63bebd,0x39cdb3b4,0x39b81a5f,0x39c84b56,0x39d89d68,0x399c4fdf,0x397bc7ee,0x398f7889,0x3a1952b6,0x3a60ae4d,0x38181d13,0x397c234a,0x3b1accda,0xbaba23c5,0xba5240d1, +0xbac1852f,0xba7e3a4e,0xba7634b4,0xba88a028,0xba7b1f16,0xba804671,0xba7b2bf6,0xba8b585c,0xba9034b3,0xba8e6eae,0xba823ece,0xba8e2d84,0xbaa1b8db,0xbab17b76,0xbab5134a,0xba9f3a6d,0xba9b334d,0xba8ba590,0xbaa7365c,0xb9bad28a,0x398351bf,0x3a6a3aaa,0xba41d4ad,0xb7b42af1,0x3a57e173, +0x3a284620,0x3a23812a,0x3a283f46,0x3a596ae2,0x3a5eb3fc,0x3a4e7569,0x39afc10c,0xba3b99e0,0x3a2669c7,0x3a05ccdf,0x3ab04744,0xba394010,0xba712ead,0xba677733,0xba9b9ab5,0xba32a4bd,0xba354ad9,0xba3ed980,0xbaa3f440,0xbacc3818,0xbad5b24f,0xba9276e0,0xba8e339b,0xbacc6fc4,0xbb06d817, +0xbb13f32e,0xbad2cb45,0xbaba49d5,0xbab3e304,0xbaeecfa8,0xb90a3b32,0xba30b3fd,0xb93f3648,0xba0b2047,0xba813248,0xb8e2ec5b,0xba7f452a,0xba59a324,0xb9dfac51,0xb917430c,0xba22b889,0x37e00362,0xb912b6e6,0xb9db6f7d,0xb9855f58,0xb9da5536,0x3999932f,0xbab810c2,0xba3a89a3,0xba19e841, +0xba953e5b,0xba04d49e,0xb9cb7e78,0xb9557dd2,0xbaa7378a,0xbac5fd4c,0xbae7fb8b,0xba39b36d,0xba9123e0,0xbb0a10bf,0xbb4df8df,0xbb4d38e8,0xbb1392cc,0xbae538e6,0xbae195f2,0xbab08a72,0x3906f354,0xba13f458,0xb8dbe29a,0xba741aaf,0xba82ec5a,0xb8850387,0xba3d7be3,0xba3bb727,0xb66f8879, +0xb972a8c4,0x38193dfb,0x38dca19a,0xb9b3235f,0xb9fab2c1,0xb9391601,0xba712f72,0x3a7bdb08,0x39e35536,0xba217a57,0xb83356e5,0xbaa7f074,0x399ff962,0x3a29b42b,0x3a7128d0,0xba9fd2c8,0xbb028142,0xbb33bd6e,0xba32c32e,0xba15bac0,0xbaf16e9b,0xbb805dc5,0xbb86f8bb,0xbb155afe,0xbaf0a689, +0xbae4c3bc,0xbaffbd06,0xba84ecdf,0xbac2f23c,0xb9d25809,0xba956509,0x363fb36b,0x38818cbc,0x394298d6,0x39895a1b,0x39078adb,0x36de113d,0x382c4275,0xb8000a46,0x39472359,0xb93445ee,0xba1ec32c,0xba3bec81,0xba460048,0xba49d023,0xba65f95a,0xb99b8fc1,0xbac17263,0xb8c23698,0x38e1e009, +0x3a84f920,0xba88cb21,0xbaf767d9,0xbb185acc,0xb914fbf4,0xba8b7924,0xbb694483,0xbbb8db03,0xbbb13785,0xbb60a361,0xbb155315,0xbaff3c78,0xbb026102,0x38a3cbf1,0xba49b25d,0x35e6f7ff,0x381244cc,0x3915737f,0xb8eafd8b,0xb8a890ca,0xb91786b4,0xb8a8acab,0xb7cd309a,0xb830b96c,0xb66199a1, +0xb8a64e22,0x388d79fa,0xba03dfd1,0x395e950e,0x3b3a7b14,0x3b283b62,0x3af00840,0x3b67e450,0x3bbf333b,0x3b1fa723,0x3ab8b645,0x3a7fd4c5,0xba1f415e,0xba99cf85,0xbaa726ae,0xba0d2f65,0x3b3a5673,0x3bd813fb,0x3bf9536c,0x3ba39b7b,0x3a3f2963,0xbae6a32c,0xbb4fc20d,0xbb17cf8e,0xba9e72b3, +0xb98fc60f,0x3a36afcc,0xb9958bac,0x3742deb2,0xb69f49e3,0x38598b19,0x385b1ae7,0x381e1798,0x36447cb6,0x36ec1dc7,0x372749e6,0x370222ac,0x37fcaee8,0x3a1e3dc2,0x39f4abf8,0x39fad7b9,0xba6937b7,0x398dbeb8,0x3a70cbf6,0x3a892225,0xbb32466a,0xbb90e599,0xbb0de515,0xba7413fc,0x3ab9a3ea, +0x3b931ebf,0x3af7ec5d,0xba8a1fac,0xbb98cb89,0xbb93112a,0xbb45f77e,0xbb15ab11,0xba701227,0xba9607e2,0xba715d67,0x39a9cd40,0x3808985b,0xb888eba8,0xb7f83ddb,0x38228e54,0xb838ed03,0xb800e338,0xb7f4048f,0xb79a3cc8,0xb704bc24,0xb6bf1a28,0xb805d537,0x388f9ea1,0xb9097ad4,0x38ae1656, +0x3a5967d1,0x3b6daa6a,0x3bcd273a,0x3b7b0484,0x3a76ca15,0xbb2224b2,0x3a2c1db3,0x3b0c0d5b,0x3accd621,0x3aa67a3f,0xba0a1d76,0xbb37ea30,0xbb1270b6,0xba4a653b,0x3ab7c5a5,0x3aa20419,0x397b21f6,0x3a660780,0x39ade2dd,0x39cc6cb9,0x370c854d,0x39c4dc3b,0x37c82c61,0x3949c940,0xb8b3fb8f, +0xb6d20e38,0xb69f7747,0x3789146c,0x36b00eae,0x365ed0fa,0xb661cc56,0xb7511cc0,0x37d73d1b,0xb8bc447e,0x3920dc46,0xb997e56d,0x3a40c4e8,0x3b2ce9fc,0xbb2fb02c,0xba3bac08,0xba9f53e4,0xbbc20943,0xb9f009cc,0x3a78289e,0xba8732be,0x3b3fad4f,0x3aa44010,0xbb482409,0xbb330e80,0xbab4994f, +0x3b1f6968,0x3a2c2933,0x399ea7d2,0xb9cc8dc1,0xb8d900f4,0xb9cfa236,0x39731d3a,0x38abb4c6,0xb987d32b,0x38b228e9,0xb825c283,0x378543ef,0xb73b5ccd,0xb71038a5,0x368559c3,0x367491ca,0x371e6ebb,0xb7a2c56c,0x381db844,0xb8c05e0c,0x38d74c84,0xb91ec184,0xb7fd9d88,0xbb90039e,0xbc82f553, +0xbbb6d1ef,0xbaecca42,0xbb88596f,0xbb9ff28e,0xbbd3787f,0xbbcbb04a,0x3ab37182,0x3b98d877,0x3b2df243,0x3a049242,0xbb2f88fd,0xbb651a73,0xbb696fcf,0xbb467152,0xbb316774,0xbb03762d,0xbaddfef0,0xba5c950d,0xb9acf855,0xba10372d,0x3826d03d,0x37d6583b,0xb79e985b,0xb6e735ad,0xb73d85e5, +0xb7e24479,0xb7573348,0xb7f05415,0x36e03bb3,0xb8424a84,0x38855874,0xb7c5791b,0xb905e1b1,0xb90af06a,0x3b79e3af,0x3b8d734b,0xbb3c0591,0xbb935161,0xbb973b1c,0xbb6d1efe,0xbb0dc450,0xbaa0af98,0xbb2ca120,0xbb78c602,0xbb6bc1a1,0xbb28800c,0xbaa4a98a,0xb92446f3,0x39d3a6e4,0x3a4bb5c4, +0x3acfd975,0x3b1bc211,0x3b21be69,0x3b0e8f76,0x3b12f184,0x3a9fe654,0xb8d47c2f,0xb88d55da,0x3722ca53,0xb606fa73,0x380742cf,0x37f9e7f1,0x387c3702,0x377912be,0x3839fcdd,0xb83801ee,0x38d58d27,0xb9ea3eee,0x3ab7b9e1,0x3a2e57e7,0x3b2b8369,0x3a5e191b,0x3a5bbccf,0x3ac69bcb,0x392c752d, +0xba12a931,0xbae29b2d,0xbb1875ea,0xbb06649b,0xbada3cd0,0xbac06b6e,0xbb0ccf0c,0xbb158e96,0xbb3e3a19,0xbb0811b3,0xbac4949f,0xba96fca4,0xba15b941,0xb86551f7,0x3a491eab,0x3a6c5f1f,0x3a0972ce,0x39eeb066,0x3809c526,0x356ee21c,0x365cecd9,0xb8d7ca4e,0xb8b6b991,0xb8f4900a,0xb8b8d7b6, +0xb86c5ac8,0xb82db4af,0x38aca58a,0x394195b2,0x3a72eb2b,0x3a8066e7,0x3a5da91f,0x3a56b294,0x39226db4,0xb9781a52,0xb93f23d0,0xba0824e2,0xba626295,0xbae0f587,0xbaebb631,0xbb063f9a,0xbaf5dc6f,0xbaad4192,0xba7b06e8,0xba4509cc,0xba049085,0xb9afc7f7,0xb98bc77c,0xb88b4c09,0x394c47c8, +0x39ecc0ba,0x3a30a83c,0x39f11caf,0x3842f72f,0x3857077f,0xb8a2745b,0x385a1f9e,0x3903e3cd,0x396acdff,0x3933ad5f,0x393c1acc,0x390e5272,0x38f51dd1,0xb7443f1a,0xb9557181,0xb93d9d07,0x38737c30,0xbac9b5b8,0xbb126cb7,0xbb05a6b1,0xbad59def,0xbade25c4,0xbad2a580,0xbab7d4a7,0xba8c9674, +0xba1aa996,0xb975a592,0x3781ae84,0xb7b02284,0x3989e234,0x3a29a449,0x3a07dd87,0x3a001ec4,0x39c7ec72,0x3a0c2ff9,0x3933e630,0x3a3eaad3,0x3a068524,0x39d5d0dc,0x38e73965,0xb8a2fb14,0xb9840feb,0xb980af10,0xb9af395b,0xba05094e,0xb9355ae5,0xba0fbd44,0xb9f93ef3,0xba243468,0xba5f4513, +0xba7e4b64,0xba9d54c5,0xbacf158d,0x39289bb2,0xba2fb3e4,0xba0b176f,0xb9ee6183,0xb91e12bd,0xb973868d,0xb8f97440,0xb99e09b2,0xb93885bd,0x382a8f7a,0x39b5aaaa,0x3a475a3b,0x3a8c7455,0x3ab8d246,0x3ab7f987,0x3ab89f34,0x3ac64d41,0x3aca4e09,0x3ad23d14,0x3ac4730a,0x3aebe1f1,0x3abf0c7e, +0x3ab87005,0x3a9a82cf,0x3a92b04c,0x3a510259,0x3a464503,0x39ccc493,0x39d129e3,0x390d31da,0xb99b8c02,0x3802d41f,0xb9a88a32,0xb8f9436f,0x38c531f4,0xba2fec02,0x39b2d282,0xb99106eb,0xb8de59d3,0xb7c6f7dc,0x3833040c,0x38510820,0x39290a9c,0x3990f9de,0x39f03005,0x3a0d5bad,0x3a17ed06, +0x3a1d4ae0,0x3a2454c4,0x3a39e1a0,0x3a2a84b3,0x3a29690a,0x3a227c87,0x3a145526,0x3a150033,0x39fadef8,0x3a64c4d1,0x3ab09750,0x3adf3288,0x3a4841c6,0x3aa226ee,0x3adbc643,0x3ae5a259,0x3ad21855,0x3ac7a04e,0x3acdfbb6,0x3ac00043,0x3aa79794,0x3a5a9aea,0x39c1915b,0x3a98708c,0x3a678af9, +0x3a956cd9,0xba13da9d,0xba25ff65,0x395e9995,0xb91afdf2,0xb927c350,0xb9a6a4c7,0xb9408fe1,0xb91b900f,0xb8488f8d,0xb93e380e,0xb9648026,0xb97bfb55,0xb8e37d92,0xb934dee9,0xb9a28a6b,0xb9d8b696,0xb9e2f90a,0xb9ad05ac,0xb9911965,0xb998a9de,0xb92a3994,0xba802051,0xbaa81de3,0xba9595e0, +0xba6d23fb,0xbabe240a,0xba9ad6f0,0xbaaff72a,0xbaa7f9e1,0xba8e60b1,0xbaa74a2d,0xbaa3eff1,0xba989a7d,0xbab2a4a9,0xba3f0e4e,0xbaa1e40a,0xbabff249,0xbaf5841b,0xb93c22b2,0x38cba004,0xb8af146e,0xba178525,0x37e6c92e,0x39490390,0x3a0e31dd,0xb854af33,0xb9a01862,0xba12b6e9,0xb6f2fde7, +0x3864ae65,0xb9dd8065,0xba6184b8,0xba84d4c5,0xba090526,0xb9e27bb6,0xb9a30863,0xb9c151e9,0xbac682bf,0xba8ebc5b,0xba7884f4,0xbabca7a4,0xba7746f9,0xba4cae87,0xbab529f1,0xbad29d75,0xba7bc97d,0xba6a647d,0xb8c389d7,0xb9c82486,0xba68110c,0xba7c66b3,0xba9c1c12,0xba7e1f4c,0xbaadb08b, +0x39996d9f,0x39ab6b6e,0x386e279f,0xba468977,0x3723bb92,0x3955f884,0x3a912938,0xb8846107,0xb980cebf,0xba3ac1a0,0x3a0ba393,0x397b2220,0xba562de9,0xbaceb3ad,0xbae0827c,0xba7b22c4,0xba5454d4,0xb97a944d,0xba98476b,0xbae043d7,0xba7355f0,0xb9ed03a0,0xbabf64e5,0xba930120,0xb993d65a, +0xba0e75e0,0xb8193021,0xb9bb49ff,0x383f93b1,0xb9a96419,0x38bc55a3,0xb9bf7932,0xba4b0037,0xba82f228,0xb9bef75d,0xba96723e,0x391d7180,0x3a6f98b8,0x39aa68c1,0xba867744,0x39db817f,0x3a935d72,0x3b276ff7,0x39d74467,0xb99c5faa,0xbac5dc85,0x3a35da06,0x3a5653a1,0xba15eabf,0xbb1103ed, +0xbb23c366,0xba86c110,0xba3520fd,0xb9916b52,0xbaa90f1c,0xbaaf994b,0xba4ad669,0xba3e13c2,0xb9fa2b57,0x37e69872,0x3976693f,0xb7017a17,0x3908df9b,0x3826f068,0x38bd6bbc,0xb7fdf2e8,0x38203c3a,0xb92d5a87,0xb97c3e97,0xba551265,0xba321211,0xba143d23,0xb9af0889,0x3a7f5734,0xb9088c31, +0xbaaf5698,0xb994efa8,0x3928b8f5,0x3b1a0e17,0x39965f92,0xb9de1cf3,0xba83050a,0x3aae7417,0x3a40be68,0xbafa7590,0xbb6a15be,0xbb682fe2,0xbb00ee27,0xbaa1192c,0xba1719ab,0xbaac2dee,0xbb01f9ab,0xb9f08c05,0xb943110f,0x389ab88c,0x38deddfa,0xb90da681,0x381aa76d,0xb88878c0,0x36ac2fda, +0xb805a62c,0x380d11c8,0xb694ce58,0x38726ace,0x38fdfca6,0xb9666625,0xba1e5b0a,0x3a571070,0x3ae0d540,0x3b7c0eec,0x3b9b0ba8,0x3beffa3b,0x3b8c66c7,0x3b63d16b,0x3b3c328d,0x3b264683,0x3b0a68d7,0x3af65568,0x3b1db24e,0x3ba2c61a,0x3bf64233,0x3c111f60,0x3bd06b97,0x3b6b2ff3,0x3a32e367, +0xba6e8b71,0xbab48e9e,0xbac8f2d1,0x39fe760a,0x3913cc2c,0xb8380513,0xb84e98ed,0x38646b5c,0x3680d475,0x37f088fc,0x3718ba2a,0x37931224,0xb767d251,0xb743ba41,0xb82dc5ae,0xb8c63f99,0xb99e2f56,0xb9010e1d,0xb8681bfd,0x3a15ecdb,0x3b2b09d6,0x3afdda2d,0x3abd4bd9,0xbb10f5f6,0xbb850ab6, +0xbb20aa8a,0xba6e6ffc,0x3ac492a0,0x3b8c49ed,0x3aef30ff,0xba5b2790,0xbb8a5d72,0xbb80654d,0xbb12fda8,0xba7a8aed,0xb9f81219,0x38aadd5f,0xba7a6b72,0xb9c22d19,0xb69d19d2,0xb945a890,0x388ed92b,0x372a72b2,0x36b10c28,0xb7897eda,0xb6909656,0xb70c19d9,0x36654627,0x367262ea,0x37bde9bf, +0xb818e1cb,0x388e8848,0xb9003b07,0x3a14bfd6,0x3b5961ad,0x3bd82134,0x3b7965b4,0x3a8d5799,0xbb03308f,0x3a693ddb,0x3b2feebe,0x3b2db57d,0x3b64fa3e,0x3af50b4c,0xbac85123,0xba08df1a,0x3a224dc3,0x3b2c5b17,0x3b402361,0x3aca1311,0x3ad53f89,0x3a758575,0x3ab6b140,0x3a098fd3,0x38075e59, +0x38879b58,0xb8dfc3a0,0x3854ed69,0xb7fc6dbe,0x37b01c8c,0xb6a99949,0x3764f8e7,0xb61a51de,0x36e889b7,0xb78953f4,0x37ccf07b,0xb8887444,0x390ddf88,0xb99ce7fe,0x39c225d3,0x3adb2dcf,0xbb4353e2,0xba14f0d6,0xba23f0ff,0xbb868249,0x3a8659f2,0x3b3918cc,0x3a415472,0x3b98f7f6,0x3b35a705, +0xbad5985f,0xbaa7cfab,0xb99731af,0x3b64cc56,0x3b0c18b7,0x3add18db,0x39b6ccc4,0x39d1cd2a,0x3a13cd23,0x38825a1c,0xba0d35ea,0xb95d5714,0x386e7434,0xb890c400,0x37fb720e,0xb6df5308,0x3724e5ed,0x36ba007a,0xb697aad6,0x37a29791,0xb6c99d0a,0x383eb464,0xb8a7e63c,0x389dbdea,0xb92df107, +0x3943c11e,0xbb9b9c79,0xbc7827b2,0xbb8ab173,0xba0bd9a7,0xba49269b,0xbb1b5d8d,0xbb968581,0xbbbabbaf,0x39be2bfb,0x3b5f061d,0x3b4a4681,0x39980805,0xbb25fe2d,0xbb5b6e27,0xbb52bf46,0xbb254803,0xbae9383b,0xbaab92ef,0xba923b7e,0xba8c1455,0xba0e352b,0xb9e2cf14,0x37628c6e,0x372274f4, +0x36f27d31,0xb76344d0,0xb6e94cd5,0xb7315ff3,0xb7223c57,0xb7a12f27,0xb747f44a,0xb7927b94,0x37864890,0x382ede2d,0xb8679dd4,0xb89bac82,0xba035ef9,0x396998a4,0xba7f98b3,0xbb3ee0a8,0xbb468235,0xbb14f9ca,0xba073913,0x3a2617ca,0xba86df46,0xbb24fa1b,0xbb420234,0xbb0c9d7f,0xba40abf5, +0xb5422944,0x3a043274,0x3a3a8a4d,0x3adedc2d,0x3b04b218,0x3b1b8226,0x3b1b0967,0x3a9a251c,0x3a19d76c,0xb8c93e68,0xb78be422,0xb7a1b2a4,0x3804075a,0x37a6bf93,0x37ab4986,0x38404494,0x3684d1a3,0x38919d9c,0xb888a5c3,0x3912b6af,0xb9e4ef34,0x39a5267f,0x396dbf88,0x3a3691a9,0x3a5de687, +0x3ac92aa7,0x3b0968be,0x3ab2cf45,0x3a60cfd4,0xb90e30bb,0xba2be8f7,0xbaa7f1d5,0xbaac5761,0xba90a4c6,0xbae235ab,0xbaf5f0ea,0xbb24dc9a,0xbad78e65,0xba73d773,0xb9e213ae,0x3933d8f4,0x3a168c64,0x3a369d6b,0x3a7ab053,0x3a444ddd,0x3813b368,0x37c615b1,0x37fa5a43,0xb8b05368,0xb82d50e1, +0xb82fad93,0xb86ae50d,0xb8b51f17,0xb8205c34,0xb89af95c,0xb84f3f7a,0x387b742f,0x3a025469,0x3a213676,0x38a05c7e,0x3a39a561,0x3a9e7c84,0x39ff1b0b,0x3a14070b,0x3994437c,0x391e3e44,0xb9aab8d1,0xba5b7e50,0xbab3ae15,0xbaca91a7,0xba88d54d,0xba4527bc,0xba1a2539,0xb98f5e86,0xb91252b5, +0x37f9a76a,0x3972f1bb,0x3a1c30d7,0x3a39c06b,0x39610a36,0x38900c32,0xb82ce23a,0xb9154fcb,0xb78ab549,0x39153d61,0x38d1ce6d,0x38fb6c80,0x391ed560,0x391c73f2,0x38fab770,0x38e25df3,0xb6c75bf1,0xb9312b61,0xba31bacf,0xb9829894,0xbb09a632,0xbad4689a,0xbaa913a5,0xba89c1c0,0xba642d66, +0xba545e65,0xba24c349,0xb9b2a96d,0xb7e9cc45,0x398dcbf0,0x39d845e2,0x39813702,0x39a44d8b,0x39e04aeb,0x39dbd2ee,0x39d556c3,0x39fc92ea,0x3a0e9eb9,0x3a051bd5,0x3a280dfd,0x395e2f30,0x395cefb1,0xb801e8fc,0xb969707f,0xb9c79284,0xb9b6cc42,0xb996aa40,0xb952d4ad,0xb9d32ba1,0xb988e446, +0xb9f0063e,0xb9f42dcd,0xba548ce6,0xbaa83605,0xbaa696b2,0xbab1ee25,0xba46ed92,0xb992d5e7,0xb981594f,0xb85b13fa,0x3977b4fd,0x39a270f3,0x3a110a05,0x3a178f9f,0x3a1f81df,0x3a2cade4,0x3a585e6f,0x3a91d78a,0x3aaf4606,0x3ac3f285,0x3acac2ef,0x3acae8b1,0x3ad879e1,0x3add49b2,0x3ae71364, +0x3ae77fc9,0x3ab173c5,0x3a957b5b,0x3a641af2,0x3a3a2879,0x3a00ee7d,0x393dc7c3,0x32ea06e2,0xb98e53d5,0xb9b52e0f,0xba015b4b,0xb9c851e2,0xba3a368a,0xba2e2d04,0xb9e6febe,0xba464680,0xba175563,0xb88b57b3,0x395a1c84,0x3968bb78,0x39b51856,0x39e1005e,0x39f03353,0x3a0cf354,0x3a2a7e86, +0x3a4c0b14,0x3a635388,0x3a6bd917,0x3a687ec0,0x3a65582e,0x3a6ff0f8,0x3a668822,0x3a6873be,0x3a649616,0x3a5b32fb,0x3a58e839,0x3a6f92e0,0x3a117b14,0x39a7419c,0x39dcacca,0x39e4673c,0x39478646,0x39ad9444,0x39b2889a,0x39a794ee,0x399e6fa7,0x395f74e2,0x38fc766c,0x38d60eea,0xb7970b6c, +0x39227871,0xb7cb11a9,0xb97f6676,0x3aac97d9,0xba07bb95,0x38b3bff2,0xba26d407,0xb9b73ee6,0xb99de535,0xb9dd4f37,0xb98857c2,0xb9720957,0xb92ad433,0xb9a487c9,0xb9c9ea2b,0xb9fd54fc,0xb9a265d2,0xb9c1bfb0,0xba0653ad,0xba24eeef,0xba2b5fff,0xba12a7e9,0xba011bb4,0xb9e30563,0xba0acf3d, +0x3921652e,0x398fa065,0xb988e036,0xb7e9a05a,0x38fad358,0xb94edd5c,0xb9a84ec2,0xb9a62cf8,0xb92f6625,0xb8e4f739,0xb80f76ed,0x38b3b5f7,0x39a0a815,0x37f1bd6b,0xb9851fd4,0x39ae5f52,0x39ec1406,0x378746c2,0xb94e1653,0xb9174461,0xba10eb5b,0x392e6944,0x39be3626,0x3a10f42a,0xb873b818, +0xb9d93e7f,0xba571edd,0xb9332239,0xb88993ba,0xb9fcbb6c,0xba76d92f,0xba988db8,0xba4d156e,0xba19a8e0,0xba142b90,0xba67d824,0xb929186c,0xb9d577d3,0xb9961617,0xb96237ae,0xb9beb922,0xb9a09eb3,0xba23a638,0xba19c86b,0xb8a6c674,0x378d50be,0xb884a641,0x39872776,0xb8bf0f88,0xb95733d8, +0xb90fa761,0xb96dc2f9,0x3a05d910,0xb9c93301,0xb8dcda74,0x39056f56,0xba17aa72,0x3a02a889,0x3a58183f,0x3ab2aa8a,0x392e1e2d,0xb975feea,0xba8b0cd8,0x39b9f0d7,0x38f6b52f,0xba65ccb4,0xbae63c7c,0xbaf2cb03,0xbaaf7bd4,0xba5e7965,0xba488765,0xba3f6a08,0x38a71d1c,0xb99c4f7d,0x3903b237, +0xba2a630a,0xba00cafc,0x394b828a,0xb925c8ef,0x38b5432b,0x397890a3,0x389d6252,0x392145d5,0x39933350,0x365c0dcf,0xb991b717,0xb8aea322,0xb8fb50cf,0x3a54cbc6,0x3a07b004,0x3949ad9f,0x3a00c248,0xba6116fc,0x3a980229,0x3b068b0d,0x3b401c44,0x3a545ef1,0xb951ca56,0xbafda95c,0x3a1e7dd4, +0x3a598cd3,0xb977b3ae,0xbb057390,0xbb20940f,0xbab12165,0xba68dadd,0xba5458ee,0xbaa43087,0xba2a9fad,0xba7342de,0xb9c1ecf6,0xb98462d2,0x39857229,0x384742d1,0x38d88465,0x35b1f0d3,0xb7bc863c,0xb836f825,0x35ce03b5,0xb8441aa8,0x39188887,0xb806c628,0xb97fbc0b,0xb9b7a2c0,0xb80056b3, +0xb93ce549,0xb97c514f,0x39a620a3,0xba864c11,0x3a80ca5a,0x3adeed06,0x3b4b1f3e,0x3a8579ac,0xb97883a3,0xbad8eaff,0x3a88f548,0x3a2208de,0xbaed96d7,0xbb68836e,0xbb6d544d,0xbb1e15e8,0xbaa3567d,0xba89c8f4,0xbab12b66,0xb95531b4,0xb9cc249a,0x395f110f,0x37d79ef1,0xb810c01b,0xb89b5b5f, +0xb7fec031,0xb7909069,0x36d54172,0x372c6646,0xb6a8391f,0x3765ec81,0xb82916b5,0x38f106e3,0xb8d8dacb,0x3967df3b,0x3b1ef41b,0x3b60086d,0x3b0e23e2,0x3b6ecb05,0x3bcc57a9,0x3b83c3c1,0x3b660426,0x3b34bcfb,0x3af019b0,0x3a995af5,0x3a2d1839,0x3a12b9d0,0x3b3402cb,0x3baa5e6e,0x3bf79378, +0x3bbe2019,0x3b0c8dbe,0x39955cc7,0xba82bf2d,0xba4306d3,0xb9b0eb70,0x398ebb85,0x393e7ab4,0xb8c9f287,0x38a9ce45,0x37451a4c,0x378dd315,0x340999e5,0xb706a451,0xb59d3d73,0x33cf9a3e,0x37e1c0ad,0x36ab3424,0x389a0832,0x392a6504,0x3a1309a1,0x3a5a647b,0xb9f69604,0x3a225bb1,0x3ae4aed5, +0x3ae54a53,0xba65ede5,0xbb24e3db,0xbae93feb,0xb9d15ca8,0x3ab7a1e0,0x3b636edf,0x3b0df965,0xb89fd777,0xbb606440,0xbb7dd25a,0xbb3146f4,0xbab9cf8f,0xb9bb4bab,0xb9b9e618,0xb939d8f0,0x39cafdd8,0x39178824,0xb87b52bb,0x384e940a,0xb802c992,0xb7ab9d91,0xb71e0a9f,0x36327861,0x3659f9d8, +0x36a94a7d,0xb70a374b,0x37549515,0xb4f5e192,0x388d5296,0xb90906f2,0x3a5aeaaf,0x3b6d7768,0x3bbdabb7,0x3b51cbac,0x3a9ab318,0xba9fc8f8,0x3b0b081f,0x3b6ee02c,0x3b58c92a,0x3b363d44,0x3a4a3925,0xbb04bbc4,0xbab5aacc,0xb7e64ecf,0x3b03bd04,0x3b260c59,0x3ac06a9f,0x3ade2fed,0x3a8457ac, +0x3a7f230e,0x3a1333a5,0x39fffa60,0x37b1f660,0x3906ce21,0xb7448ebd,0x37d58b0e,0xb6950dc2,0x37210dc1,0xb7174974,0xb67af4c5,0xb3f39b1b,0xb6d4efc0,0x377e5e36,0xb81fccbd,0x38bb35dc,0xb8728192,0x39b1c6c4,0x3ab5fe41,0xbb320739,0xb7dbea53,0x3a03a847,0xbacf737f,0x3b17020c,0x3b68a845, +0x3a45206d,0x3b7ae7f3,0x3b14aeb7,0xb9fecf5b,0xba9b2ba1,0xb92d022b,0x3b4acfb9,0x3b16a057,0x3b028a6d,0x3a099798,0x3a1c57b0,0x37f0ec7a,0xb8f8cd77,0xb910f8f4,0xb93ee1c6,0x38e580c1,0xb814bd80,0x38035f86,0xb753d1f7,0x36f5188b,0x35362490,0x37410e84,0x3548427c,0x366d9ffa,0x378bd10e, +0x368ce47a,0x36d8de81,0xb7bfb633,0x380cdc22,0xbb8ff0f4,0xbc549a4d,0xbb1ad6b8,0x3ad53837,0x3ac5734c,0x3932e41f,0xbb26342b,0xbbbef87e,0x3a1df273,0x3b79d43e,0x3b98bb71,0x3ade42de,0xbaad2815,0xbb1d22bf,0xbb2641d0,0xbb0ae230,0xbaf23a34,0xbabd2f37,0xbac1f041,0xba8c6bea,0xba180c15, +0xb9a6ab10,0x39261b9f,0xb7a4095c,0x37654915,0xb78189a7,0xb704a9c7,0xb7422226,0xb5a72e4e,0xb744e2be,0x35cfc479,0xb7fd9aca,0x371e9927,0x37f942e0,0x3888534e,0x3958aeef,0x39a0c48e,0x39142d65,0x39a21aef,0xb987deb2,0xbaccc052,0xba1852d8,0x3a12df09,0x3a9b36b6,0xb9cb5b87,0xbad20041, +0xbad9ed8b,0xba7754d0,0xb8de235f,0x3a0f55e8,0x3a53f579,0x3a63e13a,0x3acfb7da,0x3b0928c9,0x3b0ec1b5,0x3b093dd8,0x3ad7c388,0x3a30eae7,0xb9469ba2,0x37b5788a,0xb716556e,0x382541de,0x38061083,0x3731ebda,0x37f27a77,0x36817097,0x386b64ec,0x37107bc0,0x390402ee,0xb9641faa,0x39ccfb27, +0xba12a626,0x3ad1c8cf,0x3af4e62f,0x3b0269d7,0x3b288b7e,0x3ac0236a,0x3a40c1ac,0xb9e78d01,0xba513ed3,0xbab8c010,0xbaba5c78,0xba947247,0xbad2d273,0xbab94db9,0xbaf26142,0xba85a7b6,0xba011dec,0xb9d577cd,0x391b13ce,0x3a078bf4,0x3a7928d1,0x3a85c719,0x3a2662b7,0x3993f7df,0x37c43801, +0x3788d823,0xb7da5b74,0xb8abc350,0xb7a24f87,0xb7e8cfbe,0xb7f93977,0xb703e2ce,0xb8b55f74,0x389a85fa,0xb81f24e1,0x3a30bdea,0x3a9af6a3,0x3a9d240a,0x3aa8b532,0x3a89041a,0x3a0cf214,0x399f2b01,0x394c5b1f,0x385563cf,0xb9b49f41,0xba62f211,0xbaba8311,0xbace62bc,0xba972b06,0xba744752, +0xba48f55d,0xb9c6f9d4,0xb985555f,0xb9506d57,0x38826c7b,0x39bd6322,0x3a2b687f,0x3a1ba248,0x3979c2c3,0x383cf441,0x3707c347,0x37cd7bb0,0x38ba57c1,0x390194d1,0x388ea5ea,0x384ce682,0x389919b7,0x38ec58db,0x392ae0a1,0x38f2eca3,0x380da962,0x38e9835d,0x398a4375,0xba976850,0xbaa6c577, +0xba9e690f,0xba4e6130,0xba35080f,0xba275b38,0xba0ea22b,0xb9988429,0x383ae725,0x39aedeb6,0x39f56a90,0x3864c4e0,0xb7fbfcfb,0xb66ddcf8,0xb87bcb21,0xb885b53f,0x37ae56be,0x3978b584,0xb89e281d,0x3a185e53,0x39cee657,0x391e5427,0xb70191b4,0xb968ece8,0xb955aecc,0xb8de4e7d,0xb947c302, +0xb8b9d847,0x357823cc,0xb8fbfd7f,0xb929c6d0,0xb954693d,0xb9b0e754,0xba36b739,0xba2627df,0xba63cd24,0xb9bf98a1,0xb9dba6a8,0xb9922cf8,0xb95f6dc8,0xb7a43249,0x37b73d23,0x3962d326,0x395030fc,0x388e4036,0x380fe869,0x391da3bf,0x39fbc7f9,0x3a50c51a,0x3a861240,0x3a97c3a2,0x3a9baeec, +0x3aa03b6f,0x3aa9e800,0x3ab1964b,0x3ab0f509,0x3ac5ecdb,0x3a99746f,0x3a88d0f2,0x3a59277a,0x3a1bcc3e,0x398b9065,0x3980f317,0x3848aca4,0xb8407161,0xb95d14ae,0xb9dd8ecb,0xb9f64710,0xb9f9b8da,0xb9bbcd15,0xb9fd4e40,0xb9ea9cd9,0x39ddc731,0xb8bc4f5e,0xb7f37f98,0x38af9429,0x39295c74, +0x39356653,0x396bd03d,0x39a932cd,0x39f58e67,0x3a12fcec,0x3a172466,0x3a0aac76,0x39f11144,0x39ebb98c,0x39d2ff2e,0x39d8d079,0x39d801bb,0x39d11e41,0x39d8f3c3,0x39bd3b85,0x3a4ec7f6,0x3a827956,0x3a5d4cfe,0x3a3f72fc,0x3a741d13,0x3a4638af,0x3a487949,0x3a355298,0x3a2a4be2,0x3a2aaa0c, +0x3a213fa4,0x3a1440db,0x3a22370d,0x39d95816,0x39dd61c2,0x3a1003e9,0x3a7568ef,0xbaa174df,0xba98f3d2,0xba3c7498,0xba35a22e,0xba3500c9,0xba4dd46d,0xba47c839,0xba46577d,0xba268e98,0xba4b8df7,0xba5c106a,0xba7056d8,0xba3b1eaa,0xba43ead8,0xba66ebb6,0xba800d32,0xba88029e,0xba82f0ad, +0xba71d20e,0xba5d6718,0xba594f63,0xba896ef5,0xba5e2eb9,0xb5ab8a02,0xba968ab8,0xba8173df,0xb83380ea,0xb9683fbf,0xb9602aab,0xb91406d5,0xb93792b6,0xb9247682,0xb90cd25e,0xba627944,0xba909e54,0xb9524323,0xba5afb0c,0xba0dda4c,0xba5a4122,0xba158473,0xba37f9c9,0xba8790da,0xba6ac568, +0xba57f037,0xb9c3519c,0xba785b02,0xbaa4dc9e,0xbad207e6,0xba73191f,0xba55e24c,0xbaa7f0d2,0xbad26a5f,0xbaedc49e,0xbac464ef,0xbaa54569,0xba8d57ee,0xba9b6714,0xba8701d3,0xba853f30,0xba25f440,0xba95a739,0xba9d0231,0xba0b931c,0xba929df2,0xba8fad0d,0xba30f7f5,0xba19e7bf,0xb9d028a1, +0xb904d422,0xba2c485e,0xba6441e2,0xba5ccfbf,0xba5cafea,0xba8a9adc,0xba7e2160,0xb9a23c60,0xba07a56c,0xba808a51,0xba6d39ef,0xba6dc43f,0x38f5591f,0xba900715,0xbaae5cf6,0xbb09a700,0xba0f3fd0,0xba372fb6,0xbad7c73c,0xbb1ba5fb,0xbb2b7985,0xbb1a9cc8,0xbaec024e,0xbaac1865,0xbac0ed6a, +0xba87b840,0xba321cf0,0xba2dd7fe,0xba8007fa,0xb9d16ad1,0xb91714b9,0xb8570064,0xb812f151,0xb8c28e44,0xb840e9a6,0xb927042e,0x37fdc3dd,0xb99b4ac9,0xba33d7c0,0xba2b4462,0xba5e2505,0xba062042,0xb98cb774,0x387ed8c9,0xb93c8a31,0xba9aebc4,0xba51ebd8,0xba134a75,0x3a92966b,0xba871f54, +0xbae74d31,0xbb578ab8,0xba51acde,0xb9ef42e9,0xbaeb8d1e,0xbb50be45,0xbb688a83,0xbb2e2a09,0xbaff9d4d,0xbab00e1a,0xbae5be8a,0xba9d9c09,0xba7b3980,0xba01de73,0xb5329dde,0x389f5da1,0x380d1116,0xb850756c,0x37e11d09,0xb793142a,0x37de1a50,0xb69e4c86,0xb8666cff,0x3682a2a3,0xb7986bbf, +0xba130450,0xba329af7,0xba8d09be,0xba9a4132,0x388d5025,0xb9c73adf,0xba851bc6,0xbaa82a65,0xba8c8c7f,0x3a7f7922,0xba918b59,0xbb0114d9,0xbb475f9a,0xb95aebef,0xb9c60406,0xbb30e042,0xbb8f8855,0xbb9bc84f,0xbb86673a,0xbb34ee5e,0xbaf3675d,0xbae5841a,0xba88fac1,0xb9ad6f15,0x38c1821c, +0xb7fc007c,0xb86baf28,0xb7dec644,0x37a4ee0c,0xb783aae3,0x36a68b2b,0xb6f34bee,0xb6a81d3a,0x3820ad5d,0xb89d1f0a,0x386cdaf4,0xb8a163b3,0xb9849b01,0x3a885c5b,0x3a879807,0x3a5bf305,0x3ad59692,0x3b8cef97,0x3b0eddaa,0x3aa70653,0x38706af3,0x3a575f7c,0x3a868431,0x39fb98c8,0x3a0dcecf, +0x3b1f3815,0x3b9b127c,0x3be4286c,0x3bb57be2,0x3b496104,0x3a3384db,0xba8e1137,0xbacc747d,0xba4aea25,0x392bf816,0xb8c58c16,0xb7d6b334,0x3797fd4d,0x372cdcff,0xb67156fb,0x37166bda,0x35c29299,0xb5a43636,0xb72a4931,0xb81e8328,0x374c7c89,0xb90e5962,0x387d812e,0xb9de4b4f,0xb96d97b4, +0xba6c5846,0x3ab08854,0x3ae89dd5,0x3b0313ba,0xbab8ca3e,0xbb3cb109,0xbb1561e5,0xba89a58d,0x3a293ab0,0x3b328bbc,0x3afbe99a,0x383660d0,0xbb563ed2,0xbb8f8794,0xbb809822,0xbb732465,0xbb1375f8,0xbaab10d8,0xba397995,0x397df0ec,0xb83fa844,0xb8c8c601,0x37621e2c,0xb8271c9d,0x36dce97c, +0xb6b96c42,0xb6716061,0xb67d1c98,0xb58a270c,0x3507a62b,0x37379980,0xb82e0e89,0x38515a4e,0xb985f895,0x3983024b,0x3b2d2648,0x3ba33495,0x3b3e0d53,0x39aacd7a,0xbb3c5b40,0xba8e0d8e,0x38ee3af3,0x3984449a,0x3af1fae6,0x3aa12173,0xbae2c502,0xbabd1a5e,0xba76ab1e,0x3a0b0a60,0x3ad64f9d, +0x3a4c7fa1,0x3ab1f309,0x3a1d55b4,0x3a6977d2,0x38375d58,0xb905ee5f,0xb7a279e3,0xb8188a55,0xb7c91691,0xb716c5d6,0x36e38930,0xb6e8beb8,0x36d961f4,0xb643fe27,0x3637c69b,0xb769a486,0x373d1b8e,0xb85394ac,0x384b3f46,0xb9089333,0x38a56b5d,0x3a570615,0xbb29ca5b,0xba78e0a9,0xbab26a53, +0xbbaf3ec4,0xbad0c819,0xb9ad1b2c,0xbac5edd2,0x3b025db3,0x3aa34bc8,0xba8adbb3,0xbb1b485c,0xbaf868c8,0x3a813e2f,0x3a97abdb,0x3aca9a8b,0x3a167a96,0x3a01914a,0x391d4c0b,0xba082d2d,0xba52db58,0xb8f17b03,0x376b96bc,0xb86ca766,0x37972d10,0xb731bceb,0x36d1a1c2,0xb65ad89f,0xb6bdf96e, +0x3623c086,0xb5b59a20,0x368f1227,0xb77e3268,0x366e59f3,0xb83a9319,0xb84aadb4,0xbb7be163,0xbc3e1544,0xbb8c7e1b,0xbae80d5f,0xbb0b08bb,0xbb3392d3,0xbb901f26,0xbbbf814b,0xbab9c945,0x3ade3d34,0x3b69afab,0x3a4dd5a9,0xbae28731,0xbb28a782,0xbb4d735c,0xbb400efb,0xbb34d344,0xbb08e2e2, +0xbae490c0,0xbab92afc,0xba3dd7c3,0xb97a30bc,0x389f4259,0xb87743e9,0x361ae66a,0xb7a5e961,0xb612bc1a,0xb6b8f4f0,0x36118151,0xb70e422c,0xb62c237e,0xb7d2e4a5,0x371383cd,0xb89b7322,0x3847ea7d,0x392be162,0xbafd9a43,0xbb7cc784,0xbb190bbf,0xbb2a2b12,0xbb698977,0xbb3b0098,0xbae86c29, +0xba5c5f8c,0xbae558fc,0xbb42d60b,0xbb760ef9,0xbb319de2,0xbad90834,0xba8912d1,0x387fe257,0x3a0647f1,0x3ac7f894,0x3aebe778,0x3af15e92,0x3ad29682,0x3a4744f4,0x393d4486,0xb8fe920b,0x37ef9771,0xb6040b60,0x3793e748,0x358f74ed,0x36200b51,0x33938ea3,0xb7868406,0x37bf8f95,0xb8362da2, +0x388d9a78,0xb9172fde,0x392a4c5e,0xba6d36c3,0x3ab94418,0x39051e52,0x39ceba3f,0x3a76dfef,0x3999e7d6,0xb90e3faa,0xba82cd8b,0xbac59d87,0xbad83646,0xbab48174,0xba82176b,0xbadcdb04,0xbaed63c8,0xbb13d97f,0xbaca2487,0xba7c9211,0xba2804ba,0x38f22c58,0x3a2120ac,0x3a8d0a54,0x3a8cd24b, +0x39fb2072,0xb8c16d0b,0x365a917c,0xb86fd65b,0xb8401a32,0xb7c288bf,0xb796c794,0xb547ea95,0xb80d5152,0xb77f1f35,0xb8baf879,0xb801e31c,0xb92336b1,0x392cb17b,0x39c47086,0x3a0591ae,0x3a42c7ec,0x3a08612a,0x38451298,0xb87593f5,0xb9a42820,0xba039b18,0xba828cbf,0xba9d1845,0xbad8641c, +0xbaf12eaa,0xbac7e59d,0xbaadb3e8,0xba95a0cc,0xba46e689,0xb9fc71c0,0xb9a18d6b,0xb8d7acd7,0x397adf9e,0x39d167bb,0x3921da63,0x3845d2de,0xb8eb35fd,0xb80085dd,0x38818568,0x389a4e5f,0x378d5001,0x38151a1f,0xb7757693,0x3755836e,0x37d671fd,0x38280c0d,0x38ab66a9,0xb8049093,0xb8bd6ca1, +0x38ea0c87,0xbab6be6e,0xbab4d8e8,0xba91d3d1,0xba859de3,0xba84bda4,0xba8a076d,0xba84f4d6,0xba6e3acd,0xba307c75,0xb9d17c60,0xb96908f4,0xb9a5e527,0xb9861a14,0xb93a3c52,0xb9488373,0xb96bf97c,0xb8db701b,0xb786aa49,0xb9875bd2,0x38b6f832,0xb9450892,0xb8d22289,0xb996ea20,0xb9b6825f, +0xb9692c6b,0xb93c020d,0xb898331c,0xb86c6459,0x3764f5c6,0xb758a42d,0xb9102fc8,0xb8c88fd4,0xb9d8a015,0xba34ab05,0xba65ebee,0xba849e85,0xb9ea6b89,0xba0e9130,0xba25512a,0xba143cae,0xb9d3240c,0xb9ec75bf,0xb9b1c87b,0xb9dda77b,0xb990748f,0xb933db7f,0x3708ab8b,0x3997907d,0x3a133cd2, +0x3a493ffd,0x3a6d7251,0x3a7c747f,0x3a8950db,0x3a97b977,0x3ab288a0,0x3aa31f57,0x3a8a1231,0x3a2b63c6,0x39d521e5,0x3936d9e9,0xb8453c9b,0xb982bfe8,0xb9a4142e,0xba1b438d,0xb9ff1033,0xba3a5d5b,0xba249677,0xba471e38,0xba6cf6b7,0xba1b84b5,0xba1a28c9,0xba6a0f90,0xb9e9b816,0xb9c32e28, +0xb99dff6d,0xb9721517,0xb944690f,0xb9472fe3,0xb917fa51,0xb8e31f87,0x36a2bfb5,0x38a7cbc5,0x39054bac,0x390ca6b6,0x3905bdbc,0x3924c2c8,0x38f204ed,0x38fa8b7f,0x38d05aa6,0x388ab374,0x389721fb,0x38e23c4c,0xb7b4b3d3,0x38fe7aab,0x3a21b0d2,0xb8c04f24,0x3847f707,0x3a103771,0x3a125e39, +0x39fff54c,0x39d94fe7,0x39c7f25f,0x399cccb6,0x397f9386,0xb9263dcd,0xb99ca2c9,0x396f3522,0xb96f4c40,0x395ec68b,0xb85749e4,0x3986d6fc,0x38e3b491,0x38412c78,0x38aa3f76,0xb80fc478,0x3901efb0,0x393a1f00,0x399591ea,0x39045184,0x38572765,0xb8b13ed7,0x38f0cd36,0x38bd31e1,0xb7d163ef, +0xb8e6e5b8,0xb90fde22,0xb9010ff2,0xb82fdd25,0xb82b3db7,0x37edb821,0x36b1045c,0xb9a1e551,0xba9a17b9,0x384c516d,0xb9bacaf5,0xba8b5416,0xba95a339,0xba900dac,0xba6814e1,0xba7a1579,0xba66fea2,0xba339761,0xb9a68323,0x390ffaec,0xba8847bc,0xb9e28c57,0xba61368a,0x39845414,0x396f313e, +0x395c942b,0xb951bd21,0x39da0d66,0x3a358b76,0x3a8f914e,0x3a018fa3,0x3936aa4f,0xb9b0b5a1,0x3993c93f,0x39e26763,0x38fd6be0,0xb93628a8,0xb9c29421,0xb9834f82,0xb8cafdcc,0xb82880b4,0xb8c9f15c,0xba1f8618,0xb9d8caea,0xba0dde9b,0xb9fa2784,0xb95e3c8b,0xba042e1a,0xba065167,0xba1225af, +0xb911d3f7,0xb9432726,0x39336544,0x39213f99,0xb9ab7005,0xb9bc6013,0xb9d3458e,0xb9c23dc9,0xb8a7ee5e,0x39883fc1,0x398c08d0,0x39bd4891,0xb998770f,0x3a308820,0x3a83e9be,0x3af52679,0x3a3c0f8c,0x39ae0557,0xba2b1f63,0x3a4ace76,0x3a39dff9,0xb8dff059,0xba2b3061,0xba5b9e28,0xba3aca0d, +0xb9bc767b,0xb892bb78,0xb9ea9ef5,0xba0adaaa,0xb98828ec,0xb8d8be30,0xb9e61072,0xb8baef12,0x3965c85e,0x39438095,0x39b991c0,0x3944efb7,0x39446743,0x388db555,0x38fdac1d,0x3912ef51,0xb9537d28,0xb9aeaa79,0x396b6915,0xb6ff1a7d,0x393fa0ea,0x3a2c09d3,0x3a00fc67,0xba21a773,0x3a7b2678, +0x3afc656d,0x3b5dda11,0x3abda6e4,0x3a02bde5,0xbabc7412,0x3a70eba1,0x3aa616ac,0x39ec24f3,0xba2ba414,0xba931baa,0xba46044b,0xb9b80574,0xb8d587e1,0xba2f3f1b,0xba07f6c9,0xb9c516f8,0xb964659e,0x398f99ec,0x38e4f8b5,0xb78659f9,0xb7637048,0xb8b407e4,0xb868104f,0xb8126403,0xb7478760, +0x37a210f7,0x36c66df7,0x3888b1ac,0xb8b72567,0xb98654d6,0x38ea5424,0xb90fae3b,0x399bdb63,0x39a04765,0xba3b5d8e,0x3a567c84,0x3ad6f870,0x3b607d33,0x3ac925ba,0x39b23a10,0xbaa56e10,0x3aaf661a,0x3ab45521,0xba217619,0xbae28c05,0xbb059cec,0xbadd3de6,0xba44278e,0xb9dbbd0e,0xba4e150e, +0xba62eef2,0xb842f05e,0x393a0408,0xb7775cc7,0xb84118c6,0x37bc0224,0x37709f29,0x38349c6d,0x3805e1fc,0x379ed8ce,0x377878e5,0xb630e073,0x37e09573,0x37f8490d,0x392e9461,0xb809c330,0x3a9ad85a,0x3b2ae66e,0x3b079ab1,0x3b3b8029,0x3baf83a9,0x3b862743,0x3b7bfc84,0x3b37c6c8,0x3b507393, +0x3b365720,0x3aee6c07,0x3a9d5e14,0x3b1053f5,0x3b6d58a2,0x3bcfbc42,0x3bb2c60e,0x3b565ada,0x3aeedb6e,0x3a344cb0,0x39390b0c,0xb7897b16,0x39c4387e,0xb8d063cb,0x38997b99,0x381536b1,0xb5f2049a,0xb73bf3eb,0xb79bc916,0xb79359ae,0xb5bae9f4,0x35ea3818,0x37c3cc14,0x355594d9,0x3897124d, +0xb914622e,0x39538a2b,0x39e3e381,0xb90f19b8,0x3ab0fd78,0x3b14d95a,0x3b1656b4,0x398488e4,0xba9e2fab,0xbad1786c,0xb92358ad,0x3aa1c079,0x3b2d340a,0x3b164cd2,0x3a4ea19b,0xbb03c4eb,0xbb4270ab,0xbb1a9d54,0xba90c45b,0xb9f263e1,0xb8031980,0xb80c88b8,0xb6fbf731,0x3801dcca,0xb60e3ab4, +0x384cf134,0xb7d8a282,0x374e7d78,0x3713da3b,0x374fcc11,0x3717b370,0x36e85ab8,0xb640135f,0x378e38f8,0xb7905b03,0x38a018e8,0x379bf759,0x3985b0d4,0x3b29994c,0x3b9d22ca,0x3b34c358,0x3aa39d82,0xb9ffd022,0x3b065309,0x3b5d7bce,0x3b69e37a,0x3b67bf18,0x3b08d2bb,0xba490a7b,0xb9242939, +0x3a33fe55,0x3b125e3c,0x3b53df16,0x3b10764b,0x3b16eae0,0x3ab3d4e9,0x3ab7d073,0x3a50b872,0x3963a247,0x3845e27c,0x37bef36c,0x38152e08,0x37bd1d2c,0xb6a1d17e,0x34c71b75,0xb6c924e8,0xb622296d,0x36091b25,0x3689b3af,0x362112a0,0x37a0a32e,0xb681385b,0x3899527d,0xb97a881c,0x39bde2d2, +0xbb04f48b,0x37d54444,0x3a5a4989,0x39f435c0,0x3b3a966a,0x3b836e45,0x3afe3035,0x3b726e33,0x3b232b9b,0x3a685a34,0xb8c76c66,0x39f84469,0x3b3971df,0x3b42ff13,0x3b4132b5,0x3ab23c89,0x3a94022c,0x3a25af18,0xb989c5e8,0xb9a3d122,0x36b9fc87,0x38374f7a,0x3538fffb,0x378021e6,0xb64adf1e, +0x36f2530f,0x331469e5,0x368c2740,0x35caa803,0xb511e691,0x374f1ed4,0xb51e77bd,0x37eb066b,0xb71dc5a9,0x376ef855,0xbb613393,0xbc1038cc,0xba9cd7a8,0x3af80d56,0x3b8be061,0x3b1c83ae,0xb9a52bbc,0xbb8f89c3,0xba396f47,0x3aeabb07,0x3b99e0ed,0x3af2ffee,0xb9e5fbf8,0xbae01242,0xbaecd2f3, +0xbac26abe,0xbaa81e59,0xba731cb4,0xba879286,0xba86d56d,0xb9fdd7d8,0xb8119696,0x38a96856,0xb70fcd37,0x3774e012,0x3586700a,0x366e64e0,0x36a50f39,0x36710498,0x36ad89de,0x36c123b9,0x36bcc0d5,0xb705e66e,0x385d8dc3,0xb8aa6bce,0x39f08eec,0xbb14375c,0xbb6f2f1f,0x3b231c52,0x3b2e4211, +0x3a6c9789,0x3acc2e8f,0x3b1094b3,0x3b10796e,0x3a4bd3b9,0xb9e1c621,0xba4606ee,0xba15ffdc,0x378df302,0x39c31652,0x3a2d0c77,0x3a2406e7,0x3aafb52e,0x3aca4c27,0x3ae5d8d0,0x3afa865d,0x3a711ef9,0x39472f04,0xb89efbff,0x38337da9,0xb7067728,0x37842780,0xb5eb67d2,0xb6485b31,0xb6a5b1c1, +0xb571970f,0x36a6024f,0x3728ff15,0x38729f09,0xb83d088a,0x38fde007,0xba11f06a,0x3a1f3bd6,0x3ae09d80,0x3afc5260,0x3b13b6bc,0x3af33419,0x3aa87bb6,0x39c08a83,0x3958116d,0xba53c069,0xba8b0c0c,0xba4f77e5,0xba95e5a7,0xba6cd8f1,0xba9743c1,0xb9d4a34c,0x38e7020b,0x39083291,0x3a39999e, +0x3a75b257,0x3a816205,0x3a8b289b,0x3a051564,0xb7cd0ae4,0x3850bc3d,0xb75130b2,0x37aa3bac,0x3757bbf1,0x37b91ef5,0x37fb9400,0x37d64d47,0x3827a158,0x3766bf4d,0xb726d6e0,0x37feef52,0x3804d49c,0x3a4ed83d,0x3a6e8d3d,0x3aa6030f,0x3abad71e,0x3a61c2db,0x3a063e39,0x3a01551d,0x3a0a73d3, +0x3a06989c,0xb932ebda,0xba574373,0xbaa0f6f1,0xba7b7e9d,0xba5e6fca,0xba384ad2,0xb9936945,0xb91c4dad,0xb8817863,0x3928035e,0x39e0c7db,0x3a1dacba,0x398a17e2,0x37d67acb,0x378e6db0,0x3834b515,0x385c89a2,0xb5e52e9a,0xb751ed39,0xb81c5bea,0xb8269956,0xb7ad132f,0xb802c1de,0x370d3a5c, +0x38e92b0a,0x3848cff3,0x37a19506,0x39be2898,0xba70b5ef,0xb9e5d3b4,0xb9d60fb1,0xb9334123,0xb809ae69,0xb6b1638f,0xb7414fcd,0x38eeed7e,0x398af5b5,0x39f17e0f,0x3a0509d0,0x3846872b,0xb94fb4f2,0xb9ca0d7b,0xb9cafce9,0xb9ceca17,0xb9572eea,0xb845a7e0,0xb982e528,0x39729bc4,0x385e0046, +0xb8c59f1d,0xb9059aa4,0xb9425412,0xb81f4447,0x387cddb1,0x38600112,0x391d45f2,0x38eb0cce,0x391904e7,0x3912d549,0x38a56457,0x3739f7ce,0xb9d1e08f,0xb98d80e7,0xb9d30ebe,0xba3e0363,0xb9286470,0xb8f516c6,0xb814c19b,0x389e2dae,0x393cab3f,0x39d02f3b,0x3a036b28,0x39966186,0x38e5957d, +0x389d87a8,0x3981bcbf,0x39f36db2,0x3a0f8da6,0x3a465cbe,0x3a557380,0x3a576b3c,0x3a73b81f,0x3a85d668,0x3a8bb041,0x3a7b463e,0x3a31948b,0x39f6dd10,0x398b7b2c,0xb4b33822,0xb90a0c01,0xb93e3719,0xb976db7f,0xb9bef0f9,0xb9e3145f,0xb9bd2b39,0xba2f3ef9,0xba103ad7,0xba0acb4a,0xba5cdc29, +0xb98be449,0x3906dfcf,0x3870c515,0x37ed6cf5,0x390dd3c8,0x3950541c,0x395ce504,0x395ff7dd,0x398d93ae,0x39ba284e,0x39e631c0,0x39eb98ba,0x39c95966,0x3995c801,0x396bbdcb,0x394bba74,0x395904c6,0x395f5fa7,0x3965d752,0x397639e5,0x39841a9d,0x39c935ed,0x398eeacb,0xb7fa5979,0x39cfbe81, +0x39869957,0xb933bcaf,0xb966ea00,0xb9571906,0xb96a9b40,0xb9917cd1,0xb998d7d8,0xb986eaca,0x388122dc,0x394ecd6b,0xb9aa383c,0xb8edecf2,0x3a175f97,0xbaa0c854,0xba6efc7c,0xba93b4f0,0xba558739,0xba4ed132,0xba5a2bc4,0xba5b0ce1,0xba5bedb9,0xba40c77c,0xba635f22,0xba76895a,0xba8938e6, +0xba5c127d,0xba5f73e0,0xba7c32a3,0xba878b7c,0xba9044b2,0xba9144fd,0xba87626d,0xba718394,0xba8123de,0xba16cb44,0xb93b0e39,0x39eb823b,0xba42f1fa,0xb99f31e5,0x39c764ac,0x39713c81,0x395e9b96,0x39938bc4,0x39b9863c,0x39d28c4c,0x39eb48e1,0xb90fe673,0xba4c8da7,0x39a0eba1,0xb872f81e, +0x39f88e14,0xba6da1fd,0xba57ceb8,0xba5c5b0d,0xba870907,0xba86b080,0xba7e4ccf,0xba17f0c1,0xba8cbeff,0xbab55590,0xbae5284f,0xba944c54,0xba81c001,0xbaad91e2,0xbac61617,0xbae314b8,0xbad4479b,0xbab23403,0xba9e50c4,0xbaae1ef7,0xb9acbf4e,0xba163a71,0xb9a21e24,0xba1be082,0xba410739, +0xb91f0207,0xb9e5d7f2,0xb9908ade,0xb8d5f585,0xb8e899bc,0xb98f247f,0x38f8a36f,0xb9836ad6,0xba1151c9,0xb9aa5e65,0xb9f63d2a,0xb99a738c,0xbabf218b,0xba2f2815,0xba2dd086,0xba64d4a6,0xba6e65b7,0xba713779,0xb8dd33e6,0xba99656a,0xbabdb583,0xbb16b27f,0xba629efd,0xba6a8447,0xbad0b146, +0xbb0c9f1a,0xbb1bc007,0xbb23bf6b,0xbaef38b6,0xbace4a80,0xba96f93f,0xb8df5a2f,0xb9ac71b5,0xb9fdceb2,0xb936ca5b,0x38f4611d,0x37ab5476,0x389c900a,0xb927075f,0xb6c808f7,0xb8bf71eb,0xb73f109e,0xb822d2a7,0xb815606a,0xb9772f26,0xb9853f7b,0xba46b083,0x39427715,0xba00e982,0xba1676e0, +0xb9d9f968,0xba8bef51,0xba6f0f6d,0xba4defe6,0x3a2162e2,0xba9e096f,0xbafc7ee3,0xbb61ecca,0xbaa36085,0xba4ea447,0xbadf9098,0xbb2dbfe9,0xbb474d9a,0xbb362f37,0xbb086204,0xbad0fc74,0xbabeaf9e,0xba2f0a54,0xba3be4cf,0x386f967d,0x380e05f9,0xb8102ee2,0xb8ccb873,0xb72a4614,0x36c95e84, +0xb5aa45c1,0xb76dda9e,0x37378fea,0xb881759e,0x3803fce1,0x38b35af7,0xb8841981,0xb9f7fde7,0xba621996,0xbab29d84,0xba445315,0xb9d882c7,0xba39a6ba,0xba870a89,0xba509260,0x3a249c77,0xba99aec1,0xbb09c159,0xbb5fc6f1,0xba50b791,0xba300401,0xbb1a281d,0xbb6c93fe,0xbb86add1,0xbb89a987, +0xbb386662,0xbb0aa795,0xbac47e4b,0xb86fb666,0xb915600a,0x38b27fa6,0xb8f3fda5,0xb49df3c8,0x37c28020,0xb6a8f904,0xb70bc3cd,0xb72cd26a,0x35cc6fc2,0xb79541cb,0x37c0d813,0xb8447cde,0xb8870f44,0xb8686aa7,0x39297ec8,0x3aa295ef,0x3a9e53d4,0xba1d4721,0x392d9fb2,0x3b1ea6dc,0x3aa7ef7f, +0x3a0efe5c,0xba7a01ce,0x39c4e394,0x3a3aad5a,0xb983661e,0xba2c88e9,0x39ea7c14,0x3b1920b7,0x3b9d02aa,0x3b8d54fe,0x3b1c2373,0x3a6d8cf1,0xba16959d,0xba6ac0ae,0x37e6eedc,0xb8c058a7,0xb76c3a86,0xb7c5a59b,0x36a77257,0xb7bae227,0x3662fd01,0x35ac68f5,0x3682d31d,0xb6fc132c,0xb5ef90b5, +0xb7c22cbc,0x3720a724,0xb80b71af,0x3928b2b3,0xb978e845,0xb7b8f76a,0xbaaebc9f,0x39c1b9ce,0x3ad6cc20,0x3b177b77,0xb9432ca2,0xba9c96d5,0xbac95505,0xba3364c8,0x399aa71b,0x3ad7e4cf,0x3b0a3596,0x3a807a8c,0xbaeb3ce1,0xbb689831,0xbb806bd7,0xbb89fbc7,0xbb272661,0xbaebf37e,0xb9bae077, +0x39dee810,0xb8dc1620,0x377ff64e,0xb84172b3,0xb6f16606,0xb55e3369,0xb4af7620,0xb6ac276e,0xb5827f04,0xb69ee7f5,0x360f17df,0xb748bce3,0x373e4997,0xb854d6a6,0xb861ec59,0xb8930e2d,0x3afbed01,0x3b63006e,0x3b019b2d,0x392e770b,0xbb1e92e2,0xba9b580e,0xba0b9dc3,0xb96f33cc,0x3a552e89, +0x3a0b871d,0xbacd25f3,0xbae15ed2,0xbac11c4f,0xb9c32e61,0x3a710628,0x3a090f5d,0x3ab051df,0x3a1510cc,0x3a183ed7,0xb80ac29b,0x36f7cdab,0xb82bd1f3,0x37abfb17,0xb83b9e75,0xb680e832,0xb6ac83a2,0xb5621515,0xb60b02d7,0x34a9584c,0xb6a33170,0x364cc127,0xb79e6312,0x37b6ed5c,0xb8b55982, +0x39065a02,0xb99e66fd,0x39b1c7bb,0xbae875c4,0xba6e3f66,0xba8af99c,0xbb6d2b37,0xbaeba2ba,0xba9158d0,0xbac5df13,0x39e43e96,0x39958a0f,0xb9909e28,0xbb111782,0xbb032b45,0xb94c1807,0x3a413029,0x3ac4129c,0x3a61bc35,0x3a3326ca,0x37f84a7b,0xba222caa,0xb9d84c05,0xb65f7c08,0xb7dc41eb, +0xb6a9999e,0xb6c599e8,0xb54d1051,0xb6578ffb,0xb5d52d60,0x33dde6ea,0xb6a92d46,0xb5aa640a,0xb73807c1,0x366ac141,0xb67a597d,0x373ce66c,0xb92abf70,0xbb2186bf,0xbbe92849,0xbb4b0781,0xbac56aaa,0xba20a2dd,0xbab43175,0xbb2ecd6b,0xbb8fa4cb,0xbaf5a57c,0x3a2b2ceb,0x3b734ef2,0x3acb64d4, +0xb9f6072e,0xbad2a3cb,0xbb186611,0xbb1f5687,0xbb343447,0xbb05a4b8,0xbae2a18a,0xbaa21293,0xb9dce75a,0xb8072635,0x36537466,0xb7f1be85,0xb717d769,0xb66c20d6,0xb62a016b,0xb68702aa,0x3481874b,0xb4af2a9b,0x35ae9971,0xb620cb64,0xb6af5651,0xb818b31a,0xb8ca0d5f,0x3a101702,0xbad63c1c, +0xbb9e7abb,0xba54f267,0x38f277d7,0xbac99e56,0xba84248b,0xba4aea66,0xba293dcb,0xbaa64135,0xbb0eecab,0xbb370326,0xbb0a954f,0xbacfc7b4,0xba94a3c9,0xb86cc114,0x39b33d00,0x3a93df02,0x3ab92df8,0x3aaeb460,0x3a960f07,0x3a2b7c52,0x37d40412,0xb86351e5,0x381524ed,0xb674392a,0xb6c20826, +0xb5b5f22d,0x357f15dd,0xb668ca6a,0xb703fc6f,0xb707b5d4,0xb7f32e87,0x369f5ab3,0xb7b0826f,0x394ef029,0xba0cb51b,0x3ad95d6c,0x39795eb5,0xb760cb7d,0x39987d1d,0xb8fc12b8,0xba0eff67,0xbaa15eee,0xbac5a836,0xbac01226,0xba96d1b6,0xba460394,0xbaabf04d,0xbaa733e5,0xbabffc56,0xba6af06a, +0xba038e82,0xb9faf89d,0x394bb30a,0x3a1b3686,0x3a9606d6,0x3a83f3e5,0x391e04d9,0xb8bd4a2e,0xb80bd495,0xb81c50b3,0x37169f27,0xb7880728,0xb75eca0b,0xb70b23d6,0xb6896cb2,0xb63b14c5,0xb721d9ca,0x37968854,0xb8cb009f,0xb80acd15,0x3910e6a6,0x3a77c2b2,0x3a6833de,0x396b7ad5,0xb8518d3b, +0xb9b611e8,0xba018ae0,0xba267b29,0xba7986d8,0xba8b06c1,0xbabc7930,0xbad98f8a,0xbac057ea,0xbaaf7b8a,0xba92c823,0xba4478b9,0xb9f9739e,0xb9c7a68b,0xb96e9457,0x359cd55a,0x3924a5d7,0x391262b3,0x38873e98,0xb7ff225c,0x38e50e40,0xb782e059,0xb75189dc,0xb72131f0,0x37b2fba3,0xb7840dcf, +0xb7b2cb21,0xb803d20e,0xb849c427,0xb74eeba3,0x37923709,0x391b4b11,0x39de01b4,0xba12fc4e,0xba4cc504,0xba3489c9,0xba20d3a1,0xba3812b9,0xba498197,0xba5e5764,0xba6308b3,0xba40e7c7,0xba1064a7,0xb9dd235c,0xba0dc5d4,0xba0ee1fc,0xba0c84d0,0xba1ad218,0xba281238,0xba09d78e,0xb9d4a7e6, +0xba4a4de8,0xb98fc4cd,0xb9a1d8b7,0xb984212a,0xb9965a03,0xb91e413f,0xb7445e1b,0x3708ad0e,0x3807d776,0xb8aedd0e,0x38764d95,0xb5d11129,0x388c5478,0x38c80d9d,0xb726b3a8,0xb8b54fda,0xb989a874,0xba0199d9,0xb9260338,0xba10f8c9,0xba298fbd,0xba33b4d8,0xba2824cf,0xba3ac5c1,0xba2f25f7, +0xba447563,0xba2cebd3,0xba1efead,0xba0373df,0xb99c0bfc,0xb880dfd3,0x38f1c388,0x399fc6ae,0x39cde4d4,0x39ded91b,0x3a1165b0,0x3a49ad6b,0x3a252b8a,0x3a3733c0,0x399aac37,0x39060eb3,0xb8f6e5ae,0xb927ae6f,0xb9478ad3,0xb936a8a6,0xb97c9a79,0xb95e483b,0xb9b6ce99,0xb9c6ced0,0xb9e17f76, +0xba237b13,0xba065ae7,0xb9ccd4d1,0xba3d912d,0xb9bd9c3c,0xba146069,0xb9fa2be3,0xb9e42aa7,0xb9d9a064,0xb9e20f17,0xb9df763e,0xb9e3fc96,0xb9b9a29f,0xb99c48ba,0xb9887caf,0xb9885ee4,0xb99521e6,0xb998a6c1,0xb9af5582,0xb9b0f77d,0xb9b8ec37,0xb9c143af,0xb9b8bc1a,0xb9c5c18a,0xb937fde5, +0x3929e2c6,0x3a17ddfe,0xb920d76e,0x3901e4f2,0x39ef8df1,0x39df4780,0x39b8b1f3,0x3996efff,0x398bf692,0x39815c43,0x394ff9c8,0xb896eb65,0xb9a36e98,0x399ae31d,0xb7708911,0xb9ae5462,0xb9401ce2,0xb921cc77,0x396b2e04,0x362f9acf,0x378c41aa,0xb86921ae,0x37cc1b60,0x388b271d,0x393e41ec, +0x383c71f9,0xb796741b,0xb9082375,0x383ba278,0x3834d302,0xb82648c2,0xb8ae93f5,0xb8f6e64c,0xb923868a,0xb8b1ecf7,0xb8bdfa6a,0x386cf63e,0xb9da8f63,0xba475461,0xba93bb67,0xb99c23da,0xba4e3660,0xba8e933c,0xba97f991,0xba92ba10,0xba73d8c7,0xba849ecc,0xba787710,0xba4f8904,0xba47a0ad, +0xb956db9b,0xba897ca6,0xba728247,0xbab9962a,0xb8c9e745,0x38eb3f42,0x383106cc,0xb96a8744,0x384fc7d1,0x39858518,0x3a3fb458,0x397e9fc8,0xb6b3f2b9,0xb9dfb3a4,0x383fac68,0x39447827,0xb7ee8384,0xb90a26fd,0xb99897dc,0xb9ac0590,0xb95e2a3f,0xb8c23cbe,0x38127fbf,0xba5f0f0c,0xb9f03921, +0xba397c6c,0xba38748f,0xb961f865,0xb9bacf8d,0xb9a5ab2a,0xb9cd3769,0xb946e41f,0xb99943db,0x3870e3fb,0xb8528229,0xb9f2fcfb,0xba188400,0xba2c4332,0xba0d31a6,0xba39d438,0x38c46150,0x3942771f,0x38eaa74b,0xb982bfc7,0x392e7c4e,0x39adcddf,0x3aa5b901,0x399d8f8f,0x380c3c7a,0xba4c766b, +0x39c1942f,0x39d3d4a2,0xb92bfd24,0xb9d5892f,0xba236cbb,0xba4f6512,0xba09532b,0xb8ebadc8,0xba0295d7,0xba58d0db,0xb9a7767e,0xb98e5373,0xb8d9afdd,0x38359c2c,0x388dd30f,0x38df6ee3,0x3996435a,0x381ed555,0x3916f46a,0xb4c6e88a,0x38231792,0x390a4ea7,0xb81a365f,0xb9f14fd9,0x37d48cf3, +0xba464de5,0xb9d23cb1,0x3a05b6f9,0x38fdf2e8,0xb9f0d3bb,0x390b1a97,0x3a39c32a,0x3b189fd4,0x3a4708f9,0x3894d2a4,0xbac05501,0x39874f30,0x3a288c10,0x38029a12,0xb9d77408,0xba53dd13,0xba6f896b,0xba11e053,0xb9013440,0xb9eeab5e,0xb9fa8439,0xb75fa611,0x370eb123,0x3922266f,0xb8391505, +0x37acb188,0xb8591d8f,0xb88ccab9,0xb82f89ec,0xb6a614e6,0xb7c51895,0x37ef8193,0xb8bcb2c9,0x3884e510,0xb7be02e9,0xb977b103,0xb938ee42,0xba1308cf,0x39dca1aa,0x37749499,0xb9c07f0f,0xb724b2bf,0x3a08fb11,0x3b11a648,0x3a3353c2,0xb92ae3e9,0xbab58ee5,0x3a27528f,0x3a6a4440,0xba036760, +0xba8ddee3,0xbac577fb,0xbaed8853,0xba8e0003,0xba105f84,0xba155c62,0xba802f2b,0x38ed4956,0xb824356e,0xb683c313,0x38107537,0x371618cd,0x38136011,0x381c5bfa,0x37fddff4,0x3715fcf2,0x37c79c34,0xb6f4d27e,0x387d5b6c,0xb7dc7c9c,0x38eb64eb,0xb85067f4,0x391eb2e5,0x3aac2a0a,0x3aa68e4b, +0x3ac77b0b,0x3b5e53d0,0x3b2f6017,0x3b1bffe7,0x3a8e8391,0x3b350e4d,0x3b3c1657,0x3adee8a4,0x3a94431b,0x3ac2731c,0x3b1eaa00,0x3b975d50,0x3b8e0151,0x3b6f0e9a,0x3b1e8fb0,0x3aab180d,0x39cc5f32,0xb7803c84,0x3965a25e,0xb8988a98,0x38b0d9bf,0xb8014c4c,0x36e91312,0xb785b989,0xb779bbd1, +0xb73aba94,0xb66ab2b0,0x352f477a,0xb53caca6,0xb4b4781c,0x3725f175,0xb91a5424,0xb8deee19,0xb9189a2d,0x384e6702,0x3ab8ea84,0x3b014e3f,0x3b0ba2cc,0x39e228ac,0xba25cfca,0xbabe32f9,0xb9c6f29b,0x3a18033b,0x3ad314b7,0x3afcf285,0x3a8aba23,0xba939a1b,0xbb17adf4,0xbb1a93de,0xbafa2538, +0xbaaaa4bc,0xba08d758,0xb997372c,0xb973bdeb,0xb6a0b09b,0xb6d15eba,0x37cf5681,0x37087022,0x37722558,0x37187e19,0x370a1739,0x36e3fb56,0x36070141,0x36da99a0,0x36706fad,0x350375b6,0x36a32532,0x38bbc114,0xb694a94f,0x3a9b24ef,0x3b58b745,0x3af2302d,0x3a44ae47,0xba646d4c,0x39b869ea, +0x3a98b84b,0x3aefeefa,0x3b29b385,0x3b08544a,0xb92d6be4,0x35ae4608,0x395da684,0x3a9a81ea,0x3b16a00e,0x3ad4a025,0x3aff84ca,0x3a8bd832,0x3a9e5970,0x3a0653a7,0xb86d72e0,0x386689b0,0xb83f6dd0,0x3832f473,0xb62cf596,0x35fbb316,0xb699691f,0xb4701d5a,0x3430e886,0xb5957036,0x371103ca, +0xb7a5bf2a,0x38710378,0xb8b6354c,0x39349a25,0xb9dab990,0xb89d114c,0xbabd5e2a,0xb9e7cc97,0x3817a7b2,0xb807bacc,0x3a6a5c93,0x3ae76439,0x3aa65f19,0x3b0f82c8,0x3ad6be60,0x3a7677ca,0xb9060413,0xb7d45348,0x3ab00a37,0x3b081eef,0x3b21a714,0x3ac294f6,0x3a922594,0x3a5047bf,0xb9b2dd28, +0xb9a465d6,0x38d85995,0xb796954e,0x37824d83,0xb65201c0,0x36a4e852,0x361e0777,0x356613b3,0xb676c0b4,0x366bb184,0xb61cd162,0x371a39cd,0xb7457f58,0x37f50012,0xb7b99f5e,0xb6d12263,0xbae86196,0xbba7f5c3,0xbabd4152,0x39091d35,0x3b67354c,0x3ac48d74,0xb996ceae,0xbb3847c0,0xbaeb2293, +0xb8d47503,0x3b5dfe3d,0x3acb245f,0x39109b37,0xba9f824b,0xbab4a9e8,0xbaa80b0e,0xbaac1a13,0xba636583,0xba5556fc,0xba6df119,0xb95d1829,0x38d0a93e,0xb7fedae8,0x37b01a86,0x366144e8,0x36d2ad2c,0x363398dc,0x371b3894,0xb5171852,0x373b5b1b,0xb71054ee,0x38021f65,0xb8366194,0x38ea7790, +0xb9826993,0x3a177a7a,0xbb28edf7,0xbba6c690,0x3b281d35,0x3b4f5717,0x3ad427a4,0x3aef33fb,0x3b01712c,0x3acdb159,0x3a0cfc99,0xba05a5a0,0xba8e275b,0xba8e3f03,0xba1e45f4,0xb9c008db,0x394bca88,0x3991a9cf,0x3a751367,0x3a7af77d,0x3a997d66,0x3ab5272f,0x39845af3,0xb9057af8,0x3845d069, +0x364fd1f4,0xb69ec8cb,0xb42f3e2f,0xb7316afd,0xb6df2e9f,0xb77100e6,0xb642c013,0xb7473a96,0x36acd07b,0xb726b946,0x380641a6,0xb92231e8,0x39d770b4,0x39ae91b6,0x3a404f35,0x3a5073ad,0x3a5c0518,0x3a7edd12,0x3a1fa01f,0x38d50703,0x38bb983b,0xba19093e,0xba3c0852,0xb9f31d29,0xba480953, +0xba2f3f58,0xba50d7a0,0xb98ce654,0x3928a61e,0x3954d887,0x3a46ff7a,0x3a72bc65,0x3a677b30,0x3a68385d,0x3911f9b9,0xb8c0794c,0x37ccc572,0x371fc19c,0x36d0faf4,0x3813cdfd,0x37ce88ee,0x38008679,0x37d9c2b6,0x37b24175,0x380d7825,0xb7a61671,0x38067a05,0xb8629aa7,0xb8848c33,0x3a11ca32, +0x3a6bcde4,0x3a8c4a20,0x3a189cc0,0x3984db32,0x3961c46b,0x399d913a,0x39cd24ec,0xb8a7b2e2,0xba18dc21,0xba860e75,0xba666eb2,0xba55423b,0xba284861,0xb9a0d314,0xb91ae79a,0xb844d921,0x38b1b2b2,0x3999b8f8,0x39aa1618,0xb83ecc6d,0xb8b9ca30,0x3886839c,0x372822e7,0xb6407b01,0xb6508291, +0xb825ba80,0xb8585b31,0xb821782e,0xb80d2f59,0xb8237998,0xb7c48bd0,0xb7dd2da9,0x388db92a,0xb9362b47,0x39794a0a,0xba311192,0xb87f3384,0x3557731f,0x380a2220,0x38f3ea41,0x38bc864e,0xb6de6ee3,0xb818fe7c,0xb818eb42,0x388467c0,0x38a09e87,0xb9342602,0xb9b93719,0xba0dfa92,0xba0c6cc5, +0xba143045,0xb9cb2368,0xb9a8bb9b,0xb9e88202,0xb95dc8bc,0xb9a0a597,0xb97f4946,0xb91ac60a,0xb797e5f3,0x37faacbb,0x381ece69,0x3856e8c2,0x391d1e43,0x380454ae,0x391bf9dc,0x3861fbbf,0x38ccd381,0x38c7046f,0xb906971a,0xb8cdcfc9,0xb924ea6c,0xba2f7f2d,0xb92bbe93,0xb97c3af3,0xb95137d1, +0xb935dd25,0xb8c57792,0x3883e6ca,0x394042d2,0x38ae4dc9,0xb8585365,0xb8ec5692,0xb8757972,0x3860436f,0x38885517,0x398af1b2,0x39b2fa79,0x39b90d95,0x39f3c6ac,0x3a1e6d7c,0x3a1f8a8a,0x39bd6cc0,0x39187136,0xb8a239e3,0xb955d25a,0xb97dc954,0xb92696df,0xb9771d36,0xb929832e,0xb9a181e6, +0xb9980a15,0xb8e27f1b,0xb9e934bd,0xb9e20669,0xba025cbe,0xba4a9698,0xb9abf8cf,0xb9937525,0xb86e3661,0xb8b31916,0xb742a71f,0x37cb4a0c,0x37fa1ac4,0x364fd9c8,0x363f58b1,0x380a3097,0x38b77b2f,0x38dd45af,0x3893eba3,0x36f43b6e,0xb845512e,0xb88ef9e1,0xb88aa6b3,0xb88d66dc,0xb8810af0, +0xb859baba,0x36cde0e3,0xb8e32b00,0xb98ed1ac,0xb9b2edf6,0xb885d030,0xb9a2b447,0xba05b28d,0xba19e6e8,0xba134564,0xba13e918,0xba2a1f82,0xba261daa,0xba1a7fcb,0xb9d344fe,0xb927da7a,0xba09f5d2,0xba06ef34,0x380bc773,0xba21fcb6,0xb96c8d84,0xba3a60c7,0xb9e64d7d,0xb9d317c2,0xb9dbe1ed, +0xb9d1c7fa,0xb9cec45c,0xb9aa2f0b,0xb9e4f315,0xba03101c,0xba1d50f9,0xb9e9ee0e,0xb9eb6e6e,0xba08ca78,0xba136187,0xba1ea66a,0xba26ba18,0xba173be2,0xba03c843,0xba0f55c7,0xb810d204,0x393ba0e4,0x38b933da,0xb922e9b7,0x38cefbbf,0x38b9afcd,0x384353c4,0x3865a361,0x390422d8,0x394d5ed1, +0x397bc330,0x39a58866,0x393e7f5d,0xb94505f4,0x38d5280e,0x3977d858,0x39e46903,0xb9e69ccb,0xb9ee9a78,0xb9ce1f1f,0xba00e99a,0xb9df8d27,0xb9b39cdd,0xb890e41d,0xb9f32823,0xba3ae2e8,0xba872650,0xba20d495,0xb9fb88b3,0xba27d6e5,0xba3a6636,0xba684b10,0xba745886,0xba45dfc4,0xba2f1cf7, +0xba3dc9df,0x38a96948,0xb91c941d,0xb9775c63,0xb854f3ab,0xb8e4459d,0x385b0a31,0xb76bab37,0x38cb9b9a,0x38fecb8c,0x38f132ab,0xb8a17bcf,0x392d4f71,0x38aada10,0xb92dab7f,0xb8cdc056,0xb916d5c6,0x395d710a,0xba61ce0b,0xb9d28240,0xb97533b8,0xb9ac63db,0xb94c26d1,0xb90fcfb8,0x39c697b4, +0xb9e0bed2,0xba38d960,0xbab88ede,0xb9dbefdf,0xb9c81cf2,0xba503759,0xba8e8463,0xbaa30d27,0xbac73423,0xba8708cb,0xba789c70,0xb9ff3b20,0x39a789da,0xb8a8550b,0x37c6d559,0x39514308,0x386f5615,0x389ad9fe,0x3862228e,0xb89c919b,0x3891a9e1,0xb8286433,0x389321a7,0xb8194026,0x38639f12, +0x38dbac3d,0x38d60170,0xb98d1c03,0x39ba876d,0xb9d03d62,0xb9b84c9f,0xb8e81ada,0xb9dd4990,0xb9190d38,0x389a7b7b,0x3a872ccc,0xb9a28bd4,0xba76c4a6,0xbb0dd42e,0xba3236c0,0xb98db3ba,0xba2ee026,0xba925513,0xbac00a21,0xbad98157,0xba9f280d,0xba79e607,0xba2b2caa,0xb90c10db,0xb938335d, +0x38f796c7,0xb903f9ee,0x37e90fc9,0xb896e890,0x37968875,0xb74913a1,0xb5e843b0,0xb7fff886,0x370bf2b7,0xb7b75ed6,0x384a59e8,0xb7c550ec,0x39148f86,0xb8ede272,0xb9235101,0xba5634f8,0xba1ca572,0x360379f9,0xb90ac627,0xb629f152,0x39a32609,0x3a92dc1e,0xb95f4a83,0xba8af4f7,0xbb106350, +0xb9d06466,0xb9315741,0xba980991,0xbaea70a9,0xbb0ff6ce,0xbb2dd0e6,0xbadd7d4d,0xbab2ea13,0xba489e48,0x399eb5d2,0xb7de41f0,0x37f65cf2,0xb71b9179,0xb71170ad,0x374458b4,0xb7376e37,0x34d3d4d6,0xb6e704df,0x36e7813b,0xb73169de,0xb6393aee,0xb72c2c7c,0xb79a5b88,0xb885c5b5,0x3948dbbf, +0x3a6acb51,0x3ac2d035,0xba10340f,0x37e68b92,0x3ac766a5,0x3a95321c,0x3a52ea9c,0xba028970,0x3a786392,0x3a9d74f1,0x38573b41,0xba158338,0xb94e9d85,0x3a7d1748,0x3b441a0e,0x3b48ba6f,0x3b0803b5,0x3ab85037,0x39e913a8,0x3980df8d,0x39c07b6a,0xb9341fab,0x38963bfc,0xb86a63d3,0x379b5fe0, +0xb77fbc55,0x3694b9d6,0xb688b2ec,0x35a29515,0xb6cab24b,0x365d00b3,0x3621756d,0x36c47baa,0x36caf09e,0x394dabe8,0xb8ca66c6,0x38fa3f88,0xba4cc937,0xb7e2f536,0x3ab6c916,0x3b030727,0x3a4d316b,0x38c439ac,0xba694d33,0xb96ce95d,0x3985add9,0x3a78369f,0x3aef3b34,0x3aa1caaa,0xba3fdc7d, +0xbb11cb1b,0xbb344209,0xbb420e77,0xbaed61ae,0xbab5efbf,0xb92b93fe,0x3968c9d3,0xb7f0146c,0x38100d63,0xb7e3af30,0x36b3ed70,0xb72f75c0,0x365ef099,0xb5ade6d7,0x361e8a66,0xb630c7c0,0x364d43a6,0xb7882e84,0x3806bd57,0xb85203fc,0x37a1cffd,0x371e5011,0x3a5702f4,0x3b12c088,0x3a96b488, +0x39c8769f,0xba93fe6c,0xb90f834a,0x396a7e75,0x3a268df1,0x3a664981,0x3a145321,0xba48c459,0xba8b5e23,0xba70fa4d,0xb913f316,0x3a5fda9f,0x3a28b9a5,0x3ab00ef8,0x3a26bbba,0x3a0939a3,0x39141b8f,0x3901123f,0xb82446e0,0x3868174e,0xb80d6a59,0x36ea751e,0xb6dcd6d8,0x36995c68,0xb6e5f2b8, +0x3625872b,0xb6b8c443,0x37307ef7,0xb7c920d0,0x384b4835,0xb8ea275f,0x396778d7,0xb9b8977f,0x39059295,0xba9373fa,0xba16c606,0xb968ddcc,0xb9ffc6fa,0xb9af1104,0x363c3b57,0xb895f345,0x39cd486f,0x39a55bfa,0x3a09fdd4,0xba77a908,0xba5c970d,0x379b29f1,0x3a715119,0x3aca5abf,0x3a923b9d, +0x3a5c9be6,0x397622e3,0xb9c71bae,0x382d9213,0xb7611a46,0xb6f0a909,0x373ae769,0xb6ba6c92,0x35885937,0xb645a9fb,0x3410b7a2,0x369a014f,0xb6aca5fb,0x3608e6e6,0xb7111996,0x378011ee,0xb705d956,0x378a5034,0xb8c87ec6,0xba55d35a,0xbb6b83d9,0xbab178bf,0xb9a75d55,0x3b1098ac,0x3a420901, +0xb9fb1979,0xbb1fe208,0xbac8cef5,0xb6a64b8d,0x3b494d12,0x3afc2d12,0x3a2a3a72,0xba32f685,0xba94dc3c,0xbaacee98,0xbae4efac,0xbaa02a67,0xba90806c,0xba4c0f4f,0xb80c3eef,0x37a8673c,0xb4c09ab5,0xb621bec4,0xb67fa066,0x35fee1c1,0xb582b1b2,0x33b2e2e8,0xb536ad3f,0x36ec6609,0xb68ec900, +0x37888ba5,0xb80eafb9,0x385cde90,0xb90faedc,0x39e2582d,0xba1fc8ff,0xbb683266,0x3af3f295,0x3b43fca4,0x3ab6ba14,0x3ace4a8f,0x3aaaf9a6,0x3a2fd824,0xb7de4a82,0xba3db6d0,0xba8b0ed6,0xba8591e1,0xba6710e3,0xba153cca,0x37ae340c,0x3941ac5c,0x3a29eb62,0x3a622401,0x3a6060be,0x3a72026d, +0x39ddc9e4,0xb8bb3576,0x37b93790,0xb7539dbf,0x36ce1670,0xb6d86dc1,0x364e8fba,0xb470e010,0xb636e2c9,0x3670f763,0xb75a036c,0x37900539,0xb821585d,0x38afdd59,0xb824363d,0x39847f9c,0x3a8c4e17,0x3a2323e2,0x38fbc238,0x3921179d,0x389acb2a,0xb9accb60,0xba5397e6,0xba56cc40,0xba67a88e, +0xba409a42,0xb9e43c1b,0xba3bc373,0xba156e35,0xba16e17e,0xb9456d56,0x38990f3d,0xb893facc,0x39da83d8,0x3a1a38be,0x3a704540,0x3a34da32,0xb8589e95,0x37d6bf94,0xb6d6f2e2,0xb6260ca7,0x3769b20b,0xb72c3538,0xb3341c67,0xb63c267c,0x3756beb2,0x34bf941c,0x3727d1d4,0x381348e1,0xb7a5e694, +0x38be9c2d,0xb9261374,0x3a8374d1,0x3a74978b,0x39cb369e,0x392b7b0c,0xb96d47af,0xb9889fe1,0xb997e6f1,0xb9b83d8b,0xba08b0b4,0xba593665,0xba8efb41,0xba826a82,0xba73aa3e,0xba3e1827,0xb9e6e130,0xb9875ab6,0xb96e9f0c,0xb8fb5cea,0x36a869a8,0x38d4c556,0x38e7393d,0x385449bb,0x387bce21, +0xb4ec8a91,0xb6ef0cb1,0xb7c65e6d,0x3596094f,0xb69c7749,0xb7556899,0xb7d56918,0xb76fdbac,0xb7a7a9da,0xb79ee7c9,0x3617d9dc,0x3894e7c9,0x39896daf,0xb88d0ba6,0xb8b4ef34,0xb90aa16f,0xb8469f00,0xb8bfc8eb,0xb92f70e7,0xb9a974ea,0xb9dcc15b,0xb9d47440,0xb9af617a,0xb99e1b9c,0xb9eb77be, +0xba0c5806,0xba20f6b1,0xba2f818c,0xba3a7c0d,0xba207f5e,0xba032db4,0xba4cfef2,0xb9b70717,0xb97dc392,0xb95544b2,0xb822e64c,0x38075c7d,0x37c1061a,0x3821c029,0x37ec3646,0xb7ce1890,0x3890ee8d,0x376b83c9,0x388b932d,0x3827feb2,0x38a8c4fe,0x38ee9728,0x38e6dc90,0x358120c5,0xb937e943, +0xb9bca9c2,0xb9dca198,0xba032047,0xba0ed374,0xba0fa381,0xba0103d5,0xb9f9f27c,0xba06afb8,0xba1293dd,0xba14a6a5,0xba015e7d,0xb9bf6b03,0xb99608bd,0xb8d4d0a1,0xb75216ad,0xb7b0f92a,0x38b93ad9,0x397291f2,0x392918c2,0x399c3468,0x37c2b2f6,0xb89076b9,0xb8dfdb8a,0xb78acbde,0x379201fd, +0xb7bc4ccb,0x3822be7d,0xb7efca5a,0xb83a3e68,0xb8e25a1a,0xb8280892,0xb928d68a,0xb972cf80,0xb9a468f4,0xb9c2ec24,0xb90ea660,0xb9c784d1,0xb9af0eeb,0xb999105e,0xb990e82f,0xb9977c3e,0xb9a90ca1,0xb9b72697,0xb9a5b777,0xb9940c2b,0xb98b3a28,0xb99314ee,0xb9a8e657,0xb9bea106,0xb9ce91ec, +0xb9d21e3b,0xb9d4a5e2,0xb9d221dc,0xb9c8e99c,0xb9db119b,0xb8ebe5f7,0x3907893b,0x394c8f27,0xb8aa7804,0x3882ba32,0x385ca8c6,0x37cca727,0xb62cfc84,0xb7ec054b,0xb8237729,0xb80fe2a6,0xb8b6308f,0xb8a39e3d,0xb9337080,0x3789d526,0x37be1425,0xb9c2bf58,0xba0aea2d,0xba0cc86c,0xb92f446b, +0xb98a113e,0xb9887ad5,0xb991ce36,0xb997e43a,0xb992c0fb,0xb94e7500,0xb99687ff,0xb9ac96c6,0xb9cc932c,0xb98e6de6,0xb98b4cb2,0xb9a6587f,0xb9af0a64,0xb9c2d5d4,0xb9db8e70,0xb9c29303,0xb9b46867,0xb9853eb5,0xba169d0c,0xba213841,0xb9e130a1,0xba07f572,0xba22202c,0xb9cacd02,0xb9e055c9, +0xb9d600e1,0xb9b6fdbc,0xb9d0c4a2,0xb9c49a68,0xb9a06e66,0xba257a60,0xba08e17a,0xb9df710d,0xba352ad2,0xba57c9e1,0xba04baa9,0xb985377a,0xb9a26169,0xb9cdf284,0xb9f8bb4e,0xb9d95e4f,0xb862453b,0xb9bfd476,0xba0a95c8,0xba45db66,0xb9f2b8d0,0xb9bd3305,0xba004d6a,0xb9f9769d,0xba1bdf6c, +0xba2f8b21,0xba13c68f,0xb9de5123,0xb99e9d12,0xba1535bb,0xb9de749d,0xb9f9877d,0xb9eefb9e,0xb96159fc,0xb898c8f8,0xb9173e92,0xb93e5057,0xb911569e,0xb920a281,0xb5784626,0xb891f541,0xb94d3bd0,0xb9bbd343,0xba0f6eb5,0xb9fcce10,0xba3378ca,0xb9ec2b46,0xb91f6f38,0xb987bc53,0xb99e737b, +0xb9eae952,0xb9fb7e08,0x394ab9ab,0xb9f2c835,0xba1cd11c,0xba8d0c05,0xb9af16fc,0xb9913f20,0xba194d34,0xba330af4,0xba607dc9,0xba946b21,0xba624cd7,0xba0f0443,0xba15cd1e,0xba0b2574,0xb95ed9f9,0xb8a58171,0xb8364ad0,0xb7cb11f2,0xb842f727,0xb798469a,0x388a7829,0xb8a40d9a,0x37ccdf10, +0xb88d55bc,0xb79703b9,0xb737344c,0xb721e914,0xb90450f8,0xb96be437,0xba27f03f,0xba311fc7,0xb705edde,0xb980ebf3,0xb9b80d14,0xba24ead3,0xba17277c,0x3a2458ff,0xb9e46e18,0xba562f38,0xbad99dd5,0xba2c4748,0xb9a8cc68,0xba3a0d6d,0xba50aed7,0xba8a3c69,0xbaab7ae3,0xba7de8f2,0xba098c60, +0xb9f8b6ea,0xb9a7ca95,0x38a320f7,0xb820525e,0x37197fee,0xb832116e,0x37d8d17d,0xb80bd245,0xb6d10bdd,0xb6c9e29b,0x379cfee0,0xb7276387,0x373b245a,0xb87abdcd,0xb86203d7,0xb7cb6288,0xb88bbe96,0xb9745845,0xba65d495,0x38092c3f,0xb98490bf,0xb8e28126,0xba3a5a32,0xba178983,0x3a03c29b, +0xba117782,0xba843b21,0xbad905cb,0xb9bbf477,0xb8e50926,0xba64089f,0xba9b6962,0xbace77d6,0xbb0a7787,0xbac51d75,0xba7da20f,0xba10aa48,0xb9e172de,0x3840c742,0xb88c8367,0x37ab307f,0x379e4ff6,0xb60004d8,0x37981542,0x36b92cf4,0x3702bd7e,0xb6773033,0x370ef731,0x36402665,0x37493e48, +0x38175e3b,0xb83b518e,0xb6d220cd,0xb8fcf2d8,0x3920dfec,0xb8a8543b,0xb7714697,0x3a9a0f76,0x3a61931f,0x3a095e30,0xba306eb6,0x3aaa8f73,0x3ae1e057,0x3a32095b,0x39a0f0ff,0x39e022ee,0x3a9952c6,0x3b235f4b,0x3b286cb3,0x3b3304d0,0x3af3d9b8,0x3a715759,0x397280f9,0xb8b8b591,0x38446828, +0xb7efd354,0x37abe96a,0xb7cff104,0x36d41752,0xb6ec8125,0xb4f31f59,0xb5f304be,0x3513a041,0xb6a445d7,0xb7135198,0xb6da16bd,0xb844bad5,0xb893f4d0,0xb94c29e1,0xb9b3f1f6,0xb9370629,0x3a5c2023,0x3aa80436,0x3adbdf8f,0x39e80962,0xb904c858,0xba8602e8,0xb9f16878,0x37d317ae,0x3a36a549, +0x3aadfc45,0x3a6ee943,0xba227d8c,0xbae66bb3,0xbb139250,0xbb2c465f,0xbafca46c,0xba9ae0e2,0xba0e12e1,0xb8a2b3b5,0xb80e5be0,0xb75382c0,0x36b42d41,0x36db4a96,0x36c8bb4b,0x359edc87,0xb466a73b,0xb4cd0869,0xb59e7d23,0x362c437a,0x3623d119,0xb750ce3a,0x379c59d9,0xb824f19f,0x38068c12, +0x38c72baa,0x3adf320f,0x3a71c3d8,0x3921e3c6,0xbaa61d6f,0xba8906c0,0xba4eccfb,0xb8c49a93,0x3a7ec31c,0x3a96e8d6,0xb8e6797d,0xb9ceacb1,0xba196182,0xb8fd0ce5,0x3a49818f,0x3a0e9d73,0x3a93895d,0x3a003e15,0x3a2914d0,0x38211b8c,0xb8e6bb24,0x37dcbfc4,0xb8690cd1,0x37978fa5,0xb74d6d3c, +0x36abe90a,0xb6b1054e,0x36781568,0xb4dd90e4,0xb58b99a7,0x34d1a9b6,0xb716eabe,0x379ae173,0xb82f219a,0x3882e0e7,0xb9410de6,0x380c85f6,0xba8536c9,0xba3fcde0,0xba373d47,0xba95ae53,0xba99fe43,0xba476497,0xb8cf53ad,0x39aecc8c,0x39c2a6d4,0x39b89ff2,0xba254d35,0xba40e768,0xb90284de, +0x3a35dcd0,0x3aab3dcc,0x3a90c139,0x3a4dd5e6,0x3a13fc8d,0xb999aa7c,0xb90e5499,0x37df3957,0xb776ca1f,0xb6805f93,0xb685b02d,0x35c9e5e3,0xb510f584,0xb56f18ae,0xb6b09fa8,0x359955af,0xb5d8f8f8,0xb40eabd0,0xb6e436aa,0x36a4ee38,0xb788d1ab,0xb78551a3,0xb8ff6bad,0xbb2c2e66,0xbaddc538, +0xbab2dd7b,0x3aafd848,0xb8848e61,0xba47e3fc,0xbad0af65,0xbaf9e05a,0xba6d5b18,0x3af0f091,0x3aa0b48d,0x3a09d261,0xba1dc2f8,0xba7d91a0,0xba9415af,0xbab3b3df,0xba6de173,0xba3c06a9,0xba26842c,0xb7834718,0x381da60a,0xb805f21f,0x370e870a,0xb4475a6a,0xb4a9c22b,0x3516cb6d,0x363cfd5a, +0xb616b0cf,0x36707f98,0xb70a517e,0x37787f29,0xb7c99424,0x3838c590,0xb8ca39c9,0x39101653,0xba780e4a,0xbb743cc4,0x3ac39ae4,0x3b0d00b3,0x3aa8e017,0x3a97b0cb,0x3a823207,0x3a0c3be6,0xb8b862c3,0xba54cd7a,0xbaba8db6,0xbab99be4,0xba939065,0xba71678d,0xb971d8f6,0xb636d2d5,0x3a053462, +0x3a0c810b,0x3a229c25,0x3a44a86e,0xb8f17439,0xb905f917,0x383fa3f5,0xb7ace418,0xb31583f5,0xb6957eac,0xb6e61ef8,0xb68308b0,0xb70ab5c4,0xb679dcf2,0xb718b872,0xb694289f,0xb7bdec0a,0x37bd77f9,0xb92c7608,0x3992b8d6,0x39b8506b,0xb8bfa878,0xb9c59a79,0xb9e8474a,0xb934423f,0xb9baec5d, +0xba13f1b9,0xba141d05,0xba226e36,0xba011d88,0xb9757e74,0xb9ffb756,0xba093d28,0xba162feb,0xb99827a6,0xb61d6c4b,0x382c04b4,0x3a057600,0x3a20410b,0x3a4479a2,0x39dda831,0xb898dfa0,0xb7ac9474,0xb503b67f,0x3754e7cb,0xb7626a92,0x379f9780,0x367f50c6,0x37261808,0xb5d862c7,0x36861d76, +0xb664796a,0xb596c743,0xb7fcaa4f,0x38094f83,0xb9988097,0x39a61df7,0x3a144a78,0x39c1e1fb,0x38ef915b,0xb91c1c7b,0xb967e6b7,0xb95bf967,0xb95e2e09,0xb9b1102e,0xba19be30,0xba63684a,0xba5477ef,0xba4523bc,0xba1620f6,0xb9bc6735,0xb938a993,0xb8bacf38,0xb7d76ec7,0x38c2fb6b,0x3879f48a, +0xb8c83288,0xb5d38a89,0xb6a49a5b,0xb86a72d6,0xb70d44dd,0x36a043ae,0xb794598a,0xb7902a9b,0xb6eff1fd,0xb741e691,0xb7008608,0xb7d44634,0xb7b46fd0,0xb844002f,0xb8c78da7,0xb8afb89b,0xb9901447,0x36c69552,0x38c3bc25,0x37b39e7e,0x37c47ec4,0xb89342a7,0xb9674bc4,0xb9bdd384,0xb9ddac02, +0xb9d02553,0xb9cce2c3,0xb9ccf62e,0xb9de47a7,0xba022553,0xba05a709,0xba114e0d,0xb9ec75b4,0xb9e821d8,0xba0bbd22,0xb9e6475d,0xb9d32561,0xb93121b8,0x37953994,0x3821f9a3,0x3776c4d6,0xb7b074fd,0x36d752aa,0x38327b67,0xb809ebef,0x382fe30c,0xb7c2f72c,0x37d90ff8,0xb6d7ae7b,0xb65f2f1a, +0xb84e3a95,0xb695add6,0xb9c737cc,0xb97e9f9a,0xb9c97597,0xb9ddba6b,0xb9f59d95,0xb9ec34e8,0xb9cce874,0xb9ae9ec5,0xb9985e0d,0xb9a2675a,0xb9aa5c9d,0xb9ab291b,0xb99588b3,0xb9930432,0xb913505c,0xb886e296,0xb8500645,0x382832fd,0x3942e7d9,0x3900519c,0xb83c0728,0xb9561812,0xb9980579, +0xb95f0ddf,0xb8ecbb1e,0xb895cddf,0xb900b19b,0xb8f4ff83,0xb90cb7cb,0xb9017823,0xb856c9f5,0xb8e99dfd,0xb916f2cb,0xb92b96a2,0xb9c7968c,0xb9c3b09b,0xb9e720ea,0xb97d0d9e,0xb9734104,0xb94d104d,0xb9446feb,0xb94a923a,0xb9713349,0xb98da89c,0xb98dfab7,0xb983b61a,0xb97160f3,0xb96d95b7, +0xb97a3b81,0xb9895da6,0xb99271aa,0xb9976e6c,0xb99cdc42,0xb99d659b,0xb99aa1e7,0xb9834c6c,0xb9c330cd,0xb9c80ac3,0xb97b7de8,0xb9bd4207,0xb9e32f24,0xb99a6c50,0xb9a6bdfd,0xb9a58a9e,0xb9a6e435,0xb9b88a83,0xb9bcf856,0xb9bc39d6,0xb9f28447,0xb9c4ff8e,0xb9ad261f,0xb9f43154,0xb9d6cb45, +0xb8bfb7ed,0x3927960f,0xb8d3b908,0xb8406d73,0xb7af1ac1,0xb8009a0e,0x36fa78fd,0x37c1cf70,0x3883888a,0xb73274d7,0xb84dd07a,0xb8eb074c,0xb8018dbc,0xb7f4c77c,0xb8864d1c,0xb8a2d1ea,0xb8c440fa,0xb9029703,0xb8bcf287,0xb89debf0,0xb8586f85,0x390313e7,0x38114f71,0xb9faacd0,0x38e8295f, +0x383af36e,0xb998c977,0xb98d7acf,0xb986f18a,0xb966edb8,0xb943997e,0xb931e5d4,0xb8e1ad12,0x387b2073,0x38dea9a9,0xb9c35d29,0x35714588,0xb94060c9,0xb82fc1f0,0xb8668b5b,0x369fa66d,0xb84d4ad5,0x38a081d5,0x39336db6,0x39b4d5fb,0x38d6e6d1,0xb8334d67,0xb9841c1e,0xb880f5d2,0x37d0c606, +0xb72809f8,0xb714104b,0xb8dd5a7e,0xb9573aee,0xb90e6db9,0xb8cf043b,0xb86a27f5,0xb60e895c,0xb7b47612,0xb9040029,0x390fb10f,0x393fb0fa,0x38307cf8,0x38f9acf9,0x390c7d27,0x38ebadc6,0x3904b5ab,0x37998bd7,0x38e38a47,0x38326936,0x38bb04a5,0xb827dc14,0xb8c725b5,0x390382e5,0xb907d61c, +0xb87d184c,0x38a4ec1c,0x37c5dab9,0x398bc408,0x39bf6a89,0x3a2c5f5b,0x39451d06,0x3592ccf0,0xb9d814ce,0x388a0c1b,0x38f696e6,0xb86c95de,0xb9059aab,0xb959d0ca,0xb9e3768c,0xb97b0c12,0xb947334f,0xb80d5e89,0x38eb66e0,0x389bc131,0x3944c120,0x38cc8d51,0x37e25d1d,0x38970cc9,0x37fb6f70, +0x379e145a,0x38b9f14b,0x37a5e012,0x389ceb8b,0x37d3f7dc,0x3896d938,0x38d710c2,0x390f4fec,0x393eb342,0x38f2f577,0xb9a7c0cf,0xb719f2ec,0x387ccb61,0xb788960c,0x39a34b12,0x3a19fa14,0x3a99dea9,0x39e2b118,0x37a4623a,0xba3bd218,0xb80779ca,0x39617721,0x392a5ea7,0x38be7a7b,0xb911b672, +0xb9f09b86,0xb9999351,0xb92c8239,0xb835cd41,0x38de7930,0x386299d7,0x36555584,0xb730511a,0x3818cc40,0xb794a3d3,0x37c891e5,0xb73ff2cb,0xb68e54f1,0xb7ac5d01,0x36393433,0xb51cc664,0x38063b5b,0x36d141b5,0x3816be77,0x389f90f5,0x39845bda,0xb9a2b0e8,0xb93b9a5a,0x3906ca55,0x38bb91fe, +0x39f4f9f7,0x3a498b69,0x3a9f33fc,0x39f7602d,0xb8903396,0xba45b7ba,0x38ec0c8c,0x39a171c3,0xb8f4e752,0xb98048e8,0xb9f80621,0xba6d92b9,0xba05c630,0xb9e18a67,0xb9071994,0x38a3f405,0x37fab956,0x38116d78,0x379ae029,0xb77a43df,0x36ef5373,0xb72eb775,0x36aff08a,0x3556bc06,0x36f74878, +0xb5b4b6ed,0xb67411ed,0x3681f9c1,0x3681407e,0x380df5fb,0x38928f10,0x394ed8d9,0x3a87ffb7,0x392be2ff,0x39c7ec28,0x3a8facf5,0x3a93e30d,0x3a8f7a3d,0x39801663,0x3ab3696b,0x3abd06e8,0x3a0a3ca5,0x37843e30,0xb884f969,0x39c70456,0x3ac7b62f,0x3ae6aeca,0x3ae5624f,0x3ac6ff27,0x3a8c2815, +0x3a5a63f8,0x38d31d21,0x346f3ff3,0x37a5f94e,0xb726d1f8,0x3789c723,0xb66dc51d,0x364eca6c,0xb63aa10f,0xb5a54ab0,0xb502b4b6,0x36708bc2,0x373f2cf5,0x3662c89b,0x3817e409,0x3850f923,0x38ff75da,0x3790f26b,0x382ae3eb,0x397c4174,0x3a8676e2,0x3aacd857,0x3a7bb09f,0x3a0a6f1c,0xba09163b, +0xb80e1bfb,0x396b0001,0x3a12990b,0x3a9ea080,0x3a7e565a,0xb8bc64e3,0xba68a6e0,0xba9e9742,0xba9c6e8c,0xba5b1454,0xba271610,0xb93755cd,0x378b91e1,0x38277111,0x374358ac,0x36f14bf7,0xb5d2683a,0xb620332b,0x35cab095,0x362d74ba,0x360afd54,0x362767f7,0xb562a6eb,0x35d43518,0x36896974, +0x374f3ec8,0x361f9044,0x39001fdf,0x38b8af78,0x3a9dd011,0x3a247233,0x39e4157e,0xb90595d1,0x39f20c58,0x3a2f0def,0x3a94f715,0x3a86750b,0x3a45664b,0x38487000,0xb9284438,0xb8bacc3f,0x39c17ef9,0x3a69eb7b,0x3a3e37bc,0x3a8bc592,0x3a163491,0x3a0771c7,0x3983c60b,0x38a47a32,0x36cd3cf4, +0x3819c626,0xb61e4913,0x3736fabb,0xb670e177,0x368eaadf,0xb651ff31,0x35c2c9c0,0x34fd3c56,0x367c91fc,0xb4f567f8,0x37251563,0xb6f2d88c,0x383d89d3,0xb7d49e31,0x38a1f1eb,0xba2bb333,0xb951bea2,0x39939bb1,0x3aa05f4d,0x3a378e7c,0x3a6c6aec,0x3a84b140,0x3a3ad7dd,0x3a10ddf8,0x3a4c1fd8, +0x391f5364,0x39506df6,0x3a050f75,0x3a802da1,0x3aa69fbf,0x3a83d7c3,0x3a4a5bdc,0x39e5e298,0xb814f027,0x38ebb5a7,0xb643d326,0x373aeb8b,0x370e93f4,0x3606360c,0x343dcec6,0x35c07fde,0x35b8bd18,0x36933e72,0xb4c73ddd,0x3671cb04,0xb5f4d217,0x37657ab4,0xb73f2f40,0x37e6ba1d,0xb7fd4747, +0x398884af,0xbab29a62,0xb97eb85c,0x39d6b636,0x3b4d97b2,0x3ae1d656,0x3a4e0595,0xba5fe654,0xba7172c6,0xb9b67425,0x3ae7b37f,0x3ac4b4f8,0x3a810ae4,0xb8a06705,0xb9811be6,0xb9c3644c,0xba1c9ae6,0xb9b7a967,0xb9cdc657,0xb9892666,0x380ec603,0x3737b5ae,0x375a9217,0x37156b8b,0x3583146b, +0x367cbe20,0x34e0cbaf,0x35991c5e,0x357f0ed8,0x35fe8408,0x35e4e227,0x3602ce1e,0xb61587a8,0x378f54d2,0x374f7c04,0xb6911a8b,0xb8b90632,0xbab7678d,0x3b3854e3,0x3b66cf00,0x3b2c9375,0x3b279a51,0x3b13e14e,0x3acb7e36,0x3a5007bd,0x3989a392,0x38091796,0xb992ae1b,0xb994d19f,0xb91a4fa6, +0x379d80f8,0x37dcd951,0x398cb3f4,0x39c061f6,0x39eb2bd1,0x3a2d55b2,0x3863e6e5,0x38495660,0xb6def1df,0xb6e88c01,0x36adfe62,0xb4cdc4dd,0x369a9c15,0x35dbb081,0x3675ea42,0x36c456f0,0x355de619,0x37a71411,0xb701fad1,0x381d1f22,0xb7a841a6,0x3917d211,0x391e5c5a,0x3a23a7e0,0x393e179e, +0x38c1e58c,0x397fc52c,0xb713efa8,0xb97740f5,0xb8c81ece,0xb9a902d5,0xb9b58206,0xb93b9c09,0xb96534a5,0xb8babbfb,0xb851a8ca,0x392a4e2c,0x39b0973d,0x3969704e,0x3a061ae6,0x39f5a3fc,0x3a1cac39,0x392c4156,0xb8bd6651,0x38d7fa7b,0xb6677978,0x374515f7,0x3711b7f8,0xb65da4f7,0x3649b9b2, +0x3592e1bd,0x36e3f43b,0x36e02ca1,0x366dc1aa,0x37a4b9c2,0x379949dd,0x38a122e4,0x3884bf5c,0x39dd3fea,0x3a43af75,0x39f64b6b,0x399d70c4,0xb7e02eee,0x36c99968,0x3870d54e,0x393825eb,0xb8233a04,0xb9852d37,0xb9fe30c1,0xb9ee218f,0xb9e1f05b,0xb99ca05c,0xb90813e2,0xb81e0e95,0xb795a649, +0x384c38f4,0x38d0d1ae,0x38d4021f,0x38c55792,0x3840f3f1,0xb58b0781,0x347eaf23,0x3671be39,0xb728a485,0x37221e27,0xb6534ac7,0xb29d124d,0x3513fb90,0x368e65db,0x375a7af1,0x37cc3dc6,0xb74817bf,0x38b8e90b,0xb8ba12a9,0x38db8673,0x3991e2f0,0x396e92b6,0x3993865f,0x39a31c8c,0x3984eba8, +0x38e28932,0xb620001c,0xb85ec550,0xb87c1b96,0xb8c00268,0xb962ee41,0xb9aa8ea5,0xb9e5acea,0xb9f15961,0xb9fd24e0,0xb9d44a5b,0xb9b8df3a,0xb9e89ef8,0xb980f82b,0xb90a4b4c,0x368b3c30,0x38adc55b,0x380aa033,0x37964c59,0x380a358f,0x369513ef,0x3708dfff,0x381a8d44,0xb6896ee3,0x3816ecac, +0xb7090ae5,0x38355534,0x389b5dd7,0x38c6f353,0x3918d16a,0xb993f209,0xb907477f,0xb92568cd,0xb962dfe8,0xb992eb40,0xb968edd7,0xb91c1bee,0xb86aa68a,0xb91fb6da,0xb981853d,0xb9a63f8d,0xb9b14484,0xb9a3757f,0xb9a8ecc5,0xb9530a65,0xb918c1a7,0xb9303019,0xb8da8e8a,0xb85ab84a,0xb847d164, +0xb8180fee,0xb8edb41d,0xb7b394e1,0x38263a6f,0x3875c49d,0x38761b0e,0x38b65976,0x38c84c04,0x38a50f3a,0x38d54e64,0x380d3995,0x38b74957,0x38a2d4eb,0xb7dfabdc,0xb94a9c55,0xb8545bcb,0xb7c50026,0xb8cddfec,0xb8de98fd,0xb8881e72,0xb8536b6c,0xb85d0d24,0xb8ca48ba,0xb8fd4db5,0xb902a869, +0xb8e3a4c3,0xb8e0819e,0xb905a6eb,0xb92ecd26,0xb95f5b70,0xb96d6785,0xb97396f9,0xb9738537,0xb96647f6,0xb95be602,0xb960f8f2,0xb84fb0b2,0xb8460ad5,0xb987a83c,0xb7d194f6,0xb81c42ee,0xb9704cc8,0xb96d9e67,0xb971b742,0xb96ec2e2,0xb9621436,0xb9663555,0xb95b837b,0xb89cd3b2,0xb82ab963, +0xb9980eb7,0xb8efe2b5,0xb96af9c0,0xba0d0c0b,0xb9f0b883,0xb9d32bd3,0xb9b403b3,0xb9b1dfa6,0xb9aa6b1f,0xb9c0e70c,0xb9c6aa1f,0xb9b58271,0xb9ca9a44,0xb9d59b06,0xb9e07025,0xb9c3ad1e,0xb9c1774f,0xb9cd6bbf,0xb9d0573b,0xb9de0019,0xb9eb950c,0xb9e08852,0xb9cb74e7,0xb9c86e3a,0xb9b608b6, +0xb9640470,0x38a41ba2,0xb99b657e,0xb90b6ae4,0x394a6671,0x3930b5ca,0x39313a60,0x3925f744,0x39239ebc,0x3921f549,0x391d0ee6,0xb8fdbb53,0xb9a4da69,0x3806a078,0xb9625ee2,0xb8c04c38,0xba09b91e,0xb9cd7655,0xb9cc1009,0xb9bea70a,0xba0e3538,0xba158f34,0xb9dd1867,0xba11ee46,0xba282815, +0xba398ca8,0xba18f72c,0xba0ba8c5,0xba184fe7,0xba0f0f9a,0xba20b816,0xba2c023c,0xba17a6b8,0xba01dc48,0xb9ec7aea,0xb9262acd,0xb90c2c88,0xb753801e,0xb85463a6,0xb91223f0,0x37b5bdb4,0xb85e356d,0xb8445e7e,0xb8881cdd,0xb842d268,0xb86b3622,0xb82398c9,0xb7e3449d,0xb7b20598,0xb85521ca, +0xb914c88f,0xb9768251,0xba22df9d,0xb9a0f015,0xb9b120a5,0xb96d53e3,0xba07b03e,0xba202893,0xb9b8b492,0xba2cdf17,0xba3bcff7,0xba6bf3a0,0xba15ed81,0xba0cf031,0xba2602b4,0xba346d25,0xba4a9499,0xba7d73df,0xba46e8d9,0xba280981,0xb9d78a1b,0xb82302a2,0xb7a98f90,0xb8d3ac6d,0xb887946a, +0xb7dc8b77,0xb899544b,0xb8240259,0xb8993c96,0xb8a86b6a,0xb83c211b,0xb87f6353,0xb81a1a40,0xb89bcfaf,0xb8aae75a,0xb84c60f2,0xb9033822,0x35e91cf3,0xba230fe5,0xb98fa01b,0xb9a324ad,0xb93ecc0b,0xba27e22c,0xba554747,0xb9a4e44f,0xba57553e,0xba8123b9,0xbaa550fe,0xba6310c0,0xba2f164b, +0xba541c1d,0xba54c858,0xba724e5a,0xba8fdd3f,0xba639ded,0xba21dd4a,0xb9cca4dc,0xb83ad628,0xb8cf5742,0xb782eef6,0xb7c1f3ab,0xb7ce0467,0x36b4bc01,0xb7451207,0x37a2a279,0x372d0a8f,0x376756dd,0x36172616,0xb6f28ce2,0xb78143dc,0xb6e8501d,0xb880528e,0xb88cf291,0xb89cd09f,0xba3096b0, +0xb9915c29,0xb9596d1d,0x3844d993,0xba1e9b74,0xba32a109,0xb9b933c4,0xba620dff,0xba8b4044,0xbaa9bea1,0xba396aba,0xba16e0c7,0xba54733c,0xba82b0d1,0xba9fa1d0,0xbad10e39,0xba9c81f7,0xba6fc218,0xb9cac01b,0x38a98f67,0xb8437487,0xb72d420e,0xb79e785b,0x36c37ea9,0xb6e275cf,0x3608012e, +0xb7358b0d,0xb6cf3cb5,0xb70153bf,0xb61d2a3b,0x346d079c,0xb66c76c2,0xb7c75d58,0xb547a645,0xb8e7e83d,0x375aab9a,0xb8c3e7b2,0xba2e57df,0xba1b8b8f,0xb933b905,0xb969ab38,0xb9f8befe,0xba9f616f,0x3771fc0c,0x39d30e51,0xb9319e17,0xb9b4d2cf,0xb98a472c,0x398580f7,0x3a503e53,0x3a7e142b, +0x3aa2b5ce,0x3a58dd3a,0x39a3c764,0x383e7332,0xb9001ba6,0xb83723e4,0xb7093b56,0xb729bad5,0xb6f66175,0x349c0b13,0x34351ea7,0x36776fca,0x363885c4,0xb55268b4,0xb5931ba4,0xb7526713,0x36885412,0xb83905da,0x378a79cc,0xb9340246,0xb936019a,0xb990f792,0x39346342,0x3a0d4629,0x3a6df0f0, +0x39b4cd4d,0x3931e77f,0xb9f6fc5d,0xb99780be,0xb920f6a1,0x3949397c,0x3a45adda,0x3a24bad5,0xb93be561,0xba72d2e9,0xbabb1369,0xbb04e059,0xbac09cd9,0xba91af31,0xb9d590b9,0x390c5abb,0xb888f163,0x36d61a56,0xb79c0a96,0x362f5791,0xb647af0f,0xb6060707,0xb6750343,0xb6294b0d,0xb62bb47d, +0xb5a630b9,0xb5c24f99,0xb6d7c404,0xb686fbbf,0xb8408323,0xb8070377,0xb8917762,0x39e5b367,0x399d5db8,0xb910c9b2,0xba770539,0xba8ddc98,0xba9566c8,0xba413c91,0xb916a8b7,0x392073d4,0xb9475144,0xba19c226,0xba518ad6,0xba276726,0xb941f61d,0xb8ffa02a,0x39be564f,0x38ba0e0a,0x39051e97, +0xb9205695,0xb82cd476,0xb810a764,0xb75924dd,0xb755569c,0xb6d995b2,0x3551e736,0xb5e88873,0x352174e6,0xb598f72c,0xb5e14df7,0xb62d99f8,0xb60f39f9,0xb69ed1be,0xb6f45c7b,0xb7537e0c,0xb7d505c2,0x38be6d6e,0xba021eb7,0xba10c9c2,0xba2ac066,0xba9b05d2,0xbac192f2,0xbaba6cfb,0xba296d93, +0xba0da710,0xb9a9bf34,0xb8b435d9,0xba44247c,0xba5b109e,0xba2f13e9,0xb92e72a8,0x399e4639,0x3a041fa6,0x39bb7260,0x393b88ac,0xb900842c,0xb865be54,0xb7b359ea,0xb6a5c366,0xb728c712,0xb58944f9,0xb581db18,0xb6156ba9,0xb5f370be,0xb5ac07f3,0xb654fecf,0x351a8ba8,0xb6f416c9,0x36a71610, +0xb77c99cc,0x37710f41,0xb841a7bc,0x39b29d84,0xba554e68,0xbaa1f71f,0xbaa0c6c3,0xb90385bb,0xba1581f1,0xba2c0aa6,0xba3c543f,0xba8e34b8,0xba293494,0x3a2e6333,0x3a50e9ca,0x3a0fc0cf,0xb8995f7d,0xb9f96ca7,0xba3abe9e,0xba7a4fc0,0xba2dd938,0xba06dc0b,0xb987862d,0x37c09ce8,0xb7db7667, +0xb72aa79e,0xb71913dd,0xb671f9f8,0xb67656b0,0xb5aff74e,0xb64e760e,0xb53efba8,0xb66018e5,0x35211532,0xb6ff9ef4,0x37107227,0xb81f2ba1,0x385054d8,0xb90cac49,0x388fb8f4,0xba8aa9b4,0x39d2c2b3,0x3a7b411e,0x3a294538,0x3a05abba,0x3999a096,0x383d371f,0xb98e1024,0xba218142,0xba86448e, +0xba82ab79,0xba73c93d,0xba4c5259,0xb9a74c0d,0xb8ea0dec,0x39263dff,0x39692215,0x39673ce4,0x394d07da,0xb926d4f6,0x35bb25a1,0xb73e8e0f,0x36c61f3c,0xb5d2a62f,0xb5120ade,0xb57c1d0f,0xb5248576,0xb515a254,0xb67bbcfc,0xb450184b,0xb75fb359,0x35cd1856,0xb7ab157d,0x36f0065e,0xb8e4083d, +0x398609eb,0xb9849878,0xba33e627,0xba4129ba,0xba229b4c,0xba3879ff,0xba48172e,0xba4606d9,0xba062ff5,0xb99b65ee,0xb8f777db,0xb97e8e1f,0xb9945f46,0xb9910def,0xb945adef,0xb89f49a1,0xb89a8ec1,0x393de977,0x3968cf5e,0x39f3be4d,0x3808c497,0xb855cc2b,0xb78852df,0xb7b6e357,0xb6c81f8f, +0xb7317af9,0xb684d370,0xb7094f17,0xb6ccc8ca,0xb73a9134,0xb6cdcbc5,0xb782bf63,0xb5873d3b,0xb832406e,0x35659d68,0xb9139840,0x377fb482,0x39b894e3,0xb8cb4822,0xb90be022,0xb9a42603,0xb9bf8344,0xb9d67581,0xb9f6a683,0xb9d029cc,0xb9e8316a,0xba09ea3c,0xba083671,0xb9fbccde,0xb9bd50a8, +0xb98afe7d,0xb90d65eb,0xb8bf9a7f,0xb88d5ca3,0xb8102ba0,0xb841d8a8,0xb7cb6824,0xb74147f6,0xb813b1eb,0x356e55d5,0xb60f1bb4,0x36e200e6,0x34cb62ba,0x373e3927,0x36e2e0b7,0x3654ccf3,0x3654932c,0xb73769ba,0xb6e62b3e,0xb80e7ed3,0xb6e83f1b,0xb8dc0964,0x3828988d,0x3731b423,0x38005e56, +0xb6ea85db,0xb855d03c,0xb9114736,0xb98a1106,0xb9d20365,0xb9e6dc5d,0xb9e8758e,0xb9e102c2,0xb9b710f7,0xb9a17dd6,0xb99cc0f2,0xb9a8dbc7,0xb9ba62b1,0xb9a92184,0xb9adb512,0xb9ca6512,0xb9c43dbc,0xb9086224,0x386052e6,0xb819bb5c,0xb7c7cf0f,0xb7c92691,0xb8046307,0xb7820cb9,0xb81c6e64, +0xb80e2f8e,0xb7ed9026,0xb80cbeb9,0xb781ce7f,0xb856fe27,0xb7aa2ad9,0xb847bb39,0xb7c07801,0xb8ab03c7,0xb96d21fd,0xb9a5fad1,0xb9cc56bb,0xb9ed0efe,0xb9f5dd3a,0xb9f80471,0xb9f6a564,0xb9cdec75,0xb9b9e4b5,0xb9b1201c,0xb9b39725,0xb9ab643f,0xb9a0a0b8,0xb9800d5b,0xb9533c49,0xb94d75d0, +0xb9217a47,0xb8870f4b,0xb912db30,0xb9559997,0xb921ac46,0xb882ed21,0xb71eec4c,0xb7d4402f,0xb7ebc2b5,0xb75cf0e1,0xb85d32c6,0xb6819e87,0xb7aafa9d,0xb792aaa5,0x37514c32,0xb7f08f39,0xb4b4126e,0x378aceb8,0xb92d30bc,0xb99cb55c,0xb988a0ce,0xb9757893,0xb96bc406,0xb96f6280,0xb9799016, +0xb98b0538,0xb9a02558,0xb9a36fb6,0xb9a331f3,0xb99bd2d5,0xb99344ba,0xb98e0b86,0xb98f49d7,0xb9965097,0xb99c01b0,0xb9a1b35a,0xb9a33c41,0xb9a38fa6,0xb99a6881,0xb99994cf,0xb9681d38,0xb889616f,0xb94b35f3,0xb8fcf8be,0x38682d44,0x38827008,0x3841a7cf,0x381fb7a3,0x381f86e6,0x37c0ea16, +0x3751b1ec,0xb8f2a3c5,0xb94512a4,0xb89a2997,0xb95217da,0xb9e81155,0x38fed920,0x390b4e5a,0x395b0c58,0x38dcd211,0x38e9e50d,0x38d84242,0x3905836d,0x39126381,0x3922a23d,0x39092173,0x38fe11d9,0x38d8f468,0x39001b3e,0x39023a86,0x38f68642,0x38f77952,0x38f882fd,0x38dc1c55,0x38f0309a, +0x38caf198,0x39205498,0x37394393,0xb939ba48,0xb9f89451,0x3904a089,0xb83ac26e,0xb98de1f7,0xb986d127,0xb9847d9f,0xb96f50e1,0xb97fe651,0xb977c05b,0xb95bc31c,0xb886b0d9,0x391fc172,0xb9da0830,0xb97eadf5,0xba051a3b,0x38b05d4e,0x39048721,0x3904a964,0x38cd1afc,0x3934b59a,0x396c45f9, +0x399e951c,0x396da8c4,0x394820e2,0x38fdb2cd,0x391ef276,0x393a9fd3,0x3945526f,0x39570184,0x3941e534,0x390c9154,0x390790b3,0x39142633,0x39578d56,0xb93694ef,0x3820d15b,0xb84eb6b2,0x382d8560,0x38fb1712,0xb806961c,0x381c57a1,0x372e394f,0x3805c0f4,0x378cf3c3,0x3891e3e6,0x37a6ec11, +0xb72b34b0,0x38419bcc,0xb58c0f54,0xb61ae174,0xb72a855a,0x394acdd1,0x390663b8,0x3903c5b9,0x38c15714,0x3968c1df,0x39926a5f,0x39d41cfb,0x398dc645,0x3964e97f,0x38e174dc,0x39543fc6,0x396ddb93,0x394e4985,0x396d1fcb,0x3954ee13,0x390f0214,0x38f2dfdf,0x393ea049,0x38818364,0xb8f46d7f, +0x386e4a00,0x388939b5,0x37f8d485,0x371ea8be,0x385dca7c,0x37d6ed7e,0x38c15a26,0x3856145c,0x385936c0,0x3812b1ff,0x3816ce92,0x387382c3,0x385e0e98,0xb7472db0,0x3963834b,0xb88f8b41,0xb926a41c,0x3945489c,0x38a2a8f3,0x38a93e2e,0x39623b18,0x39c27d39,0x3a22954e,0x39df6744,0x399e939e, +0x38b43e4e,0x3955a018,0x398c9222,0x39a07878,0x39c3629e,0x399e38f5,0x391f1592,0x391a6178,0x394edc5a,0x39061bb5,0x38613a8a,0x38c2ab68,0xb622c2ed,0x3832c8d6,0x37595522,0x371c5430,0x35fda684,0xb79c5fc6,0xb7314517,0xb6b1175d,0xb6a96448,0x375ee03d,0xb685ebf4,0x37865986,0x37e75765, +0x3848ebed,0x395d2d41,0x3770d201,0x3926e6b1,0x38a83f75,0x3888eac8,0x39828127,0x39c97a01,0x3a1ccfc0,0x39d4e78c,0x398995c0,0x38bc647c,0x39830901,0x39aad191,0x39803319,0x39a37b49,0x3985aec9,0x38d597a0,0x38c35567,0x38ebe6af,0x38ec7f6c,0xb917e18b,0x386dbf0f,0xb5cd00f7,0x37ad4fe0, +0xb5a11cba,0x369b9f7d,0x3660a65a,0x3740c5c4,0x370f84fe,0x369bc682,0x36eb0514,0xb6950e94,0x37832919,0x36e1772b,0x382f9904,0x373f0036,0xb892f9d9,0x398849c2,0x39d83c19,0x39c788e4,0x3a0cb562,0x3a256479,0x3a35e52e,0x39e3c9eb,0x3a694349,0x3a674daf,0x3a11de23,0x39c2ddaa,0x39752865, +0x3971ac40,0x3a023376,0x3a1b039d,0x3a740a79,0x3a56c30f,0x3a481fa7,0x39dd1d5f,0xb8812676,0x38e9b305,0xb7caf517,0x37ee0d70,0xb65aee06,0x3684a629,0xb629d4b9,0xb64070d1,0xb628d556,0x354178c3,0x34f56cb7,0x3705f165,0xb5def949,0x37f6d364,0xb83b928b,0x38f4adab,0xb6a219f3,0x399942dd, +0x39c0d0bf,0x39d8973e,0x39e067a3,0x39e4abf6,0x39912b53,0xb956004c,0x377932a9,0x3900186a,0x39681fbd,0x39cf1a6c,0x39b580f3,0x388ca9c6,0xb89dd6ad,0xb901d8fd,0xb7da245c,0xb8f417a2,0xb83d607d,0xb8ca317d,0xb833812c,0x37b0fe70,0x365c444c,0x377b9754,0x35a57736,0x36836d5b,0x361954d3, +0x3660392d,0x35d581af,0x3642e0ee,0x34c1eb10,0x36bf7448,0xb701c9ab,0x37c7b5a2,0x37182a47,0x38bc3218,0xb8180e74,0x399ebf0b,0x397d1495,0x395eaefe,0x3949ef15,0x39b6bf0b,0x39ea588d,0x3a35826a,0x3a2c1683,0x3a0c9cbe,0x3991f663,0x397c8ac5,0x397e835f,0x39c4f3ab,0x3a0494bd,0x39d3d2fe, +0x39e56545,0x3989fae7,0x399b5613,0x39179ba3,0x37aa8df0,0x37e9b88f,0x361fec81,0x3779f787,0x369dfd8f,0x341841a8,0x34f50676,0x35ad1684,0x3588d126,0x36149edc,0x3530133a,0x3697ede7,0x3519355f,0x378d44be,0xb71c2c4b,0x3807ced5,0x3715305d,0xb9435fe9,0xb77d88c4,0x397ea865,0x3a66b302, +0x3a1e25dd,0x3a3c6d5c,0x3a53a1f5,0x3a140323,0x39df800f,0x39d7d9b7,0x39c7260e,0x39c9107d,0x39ede61c,0x3a09b80a,0x3a10d3e6,0x39ea0590,0x39b1419a,0x39a18821,0x3893e4d2,0x379bfe8a,0x37f3fda2,0x369b5f86,0x36c6281a,0x36052556,0x3411107a,0x36492bab,0x358da72a,0xb501a5ac,0x365791a8, +0x3546a6da,0x361ee5b2,0x35d89c8b,0xb596f1c0,0x37409c5c,0x36c52613,0x38acb0cf,0xb90be21a,0x38603230,0x39bc12bb,0x3ad02950,0x3a839d6d,0x3a2483af,0xb80ceb13,0xb998bb60,0xb9865d7d,0x39e70b5b,0x3a06dfdc,0x39f89982,0x38cc4f68,0x38abb5b2,0x38635b26,0x38800715,0x38ada636,0x37c024ff, +0xb63ebf93,0x380caf00,0x3757df45,0x36d5e202,0x3715baab,0x364cd2b0,0x36515204,0x35c0fd96,0x365537f9,0x358170cd,0x3593bb41,0x35502d5a,0x36420d70,0x358e5627,0x378f34c9,0x35d0325f,0xb7ba90fa,0xb9177623,0xb8cf0fa3,0x3abbdadf,0x3ad13e33,0x3ab9f4b6,0x3aaf25a8,0x3aa50cb8,0x3a83a7d8, +0x3a1ecc4e,0x39be6a29,0x39626253,0x3705dc6f,0x3745e372,0x37d13272,0x36673eae,0xb7f2f237,0x38855aa4,0x3804b0b2,0x3916f424,0x395a920c,0xb8497907,0x38534dfd,0xb68ff6f6,0x3640d4a9,0xb6264681,0x35ab89af,0xb5f36bb6,0xb35db2af,0xb557391f,0x35a20015,0x34fe6225,0x36bdc01a,0x3680846a, +0x366cb1d1,0xb7ac4b05,0x38c33da8,0xb9591f34,0x396d91b4,0x3914296a,0x384ab2b7,0x394e50e7,0x390f43af,0x38dc789f,0x394ea359,0x3713f9d7,0xb87eafa8,0xb7a2ae8c,0x37be5bdf,0x388770a0,0x389d0fa8,0x39103d0e,0x395994a0,0x394e1103,0x398e8b92,0x3965fb3a,0x3920da35,0xb7da5672,0x3837ca0c, +0x37184f28,0x378ba5ff,0x36e25a8b,0x36c82133,0x370f1129,0x37098991,0x36fc6285,0x36ff6251,0x36de2b38,0x374242c7,0xb681789c,0x380ec5ab,0x3661b3c9,0x38ca6431,0xb8d3430b,0x3984b44b,0x399c0f64,0x3946dd1c,0x389a32af,0x38ce71f9,0x391e50fc,0x39862aa5,0x390644fa,0x382622c9,0xb88b75eb, +0xb880c5e0,0xb86dfe56,0xb79eb037,0x38089aa5,0x38594980,0x388bc788,0x38ba8c1c,0x38c75aed,0x38b4ae04,0xb7977dfb,0xb74bfb85,0x37c3cc7d,0x35d4f069,0x361707a5,0xb6264ab3,0xb6705d4c,0xb75b8c48,0xb6b8478e,0xb5e233d7,0xb624f122,0x36febbc3,0x3714aab6,0x37b93a46,0xb77b6ce9,0x37fd5407, +0xb7fdb99b,0x397d1e2a,0x3942cf9e,0x395dc7fd,0x39834323,0x3974a64d,0x3936b495,0x3902f11c,0x38b295f3,0x388bc37b,0x3817aeef,0xb771a5da,0xb893e73f,0xb90d43b2,0xb908bf7e,0xb90edc88,0xb8cd9c37,0xb8d8a11e,0xb8826a55,0xb8d6db40,0x387e4072,0x37ff87d1,0x37769533,0x3782c1fa,0x3785c0d7, +0x37c62e64,0x37163348,0x38409028,0x377cfae3,0x38007eda,0x37a38984,0x37598384,0x381767a1,0xb62c2557,0x38058a8d,0x386f0621,0xb94661bf,0x37438b08,0x3728cc11,0x356add33,0xb7f98534,0x37a77421,0x38884599,0x390dcde9,0x38a382fa,0x37a4d220,0xb7f294a5,0xb8860901,0xb8aa973d,0xb8f1b505, +0xb8a65590,0xb88b8007,0xb89eb91b,0xb88978af,0xb864b8e3,0xb8684851,0xb8f2a76b,0x3815323c,0x38284c89,0x383a71e3,0x372ce677,0x3795bf8e,0x37029ea2,0x3809216a,0xb6c4b2d3,0x37788590,0x37eaa8de,0xb79ef194,0x37ff5bce,0x36967c12,0xb87fe43f,0x38c83669,0xb7e24df8,0x386af245,0x37fe0c7b, +0x384ecbe4,0x38746eb6,0x388112eb,0x3827de8f,0x380479e2,0x37a7ac96,0x37cbbe41,0x37b58318,0x37344c86,0xb6c6cdd6,0xb7e14460,0xb7ebaf27,0xb7fe5a3b,0xb7f48d3b,0xb7b8d17a,0xb7c6acd8,0x36e8cd04,0xb83d4b7d,0xb922f4f7,0xb99505f0,0x38a6f27e,0xb779eb17,0xb912c20e,0xb91a09ae,0xb90af8b4, +0xb900bfdb,0xb907585c,0xb8f934a1,0xb8d94d1e,0xb6abf61d,0x38a4b41b,0xb98a74bb,0xb92859ae,0xb6d9e0d1, +}; + +const uint32_t orange53_rom_AlphaR48[578 * 128] = { +0x3e19a898,0x3de6627f,0x3e157d8b,0x3d58b459,0xbc6642fb,0xbd08b0ec,0x3d726c14,0x3b5cf6af,0xbd5b6ab2,0xbd64857f,0xbd489dd2,0xbd0fcff7,0xbd1c7e93,0xbd5d1646,0xbd22b20b,0xbb2f6614,0x3d296fcf,0xbd2a6fdf,0xbc0f342e,0x3d12fd31,0x3e04120f,0x3ddb8e50,0x3de27e65,0x3de2befa,0x3deae52c, +0x3decb987,0x3de8f62d,0x3de9d263,0x3ded8c1e,0x3ded9100,0x3dfc4d51,0x3df81d6f,0x3e034c99,0x3dfec26b,0x3dfd29a9,0x3df4ed96,0x3deff75b,0x3e1b94e4,0x3e096b2a,0xbd324d90,0x3da2b26f,0x3bbfd3d9,0x3d674b5d,0x3d298a8f,0x3d2103ef,0x3d9d84bd,0x3cd24051,0x3ce76c1d,0x3c99af42,0x3d4b90bc, +0x3d03e7f5,0xbcaaf3ec,0x3d6e3bd9,0x3ca0e4cc,0x3d42543e,0x38c216d4,0x3de1792e,0x3e036313,0x3e00ca6d,0x3e089782,0x3e03df55,0x3e034a3d,0x3e11cd58,0x3e16966d,0x3e1ca540,0x3e1bb2db,0x3e2cac10,0x3e2414e7,0x3e382987,0x3e3549c0,0x3e326cf3,0x3e246350,0x3e14065d,0x3e38bb8a,0x3e04d687, +0x3c8352b0,0x3dc2d9bd,0x3cc4f7f0,0x3d2f7ebb,0x3a2a83c6,0x3d6fc498,0x3b9c0034,0x3d8bba11,0xbc8752d8,0x3d9fce1f,0x3cbad190,0x3ced6d33,0x3cb1d1ff,0x3d2c6425,0x3d2c2d5f,0x3cd3793f,0x3cd69bec,0x3daee1d8,0x3e0d536b,0x3df8ff3f,0x3e13b427,0x3e101c21,0x3e180e73,0x3e1cac4f,0x3e1dca42, +0x3e2906ec,0x3e367a27,0x3e47bb4c,0x3e5bad9b,0x3e6dfc26,0x3e67a32c,0x3e59682c,0x3e3ce816,0x3e301042,0x3e4260d4,0x3de97a03,0xbc0bff40,0x3d247094,0x3c6d2ecf,0x3ca66a70,0x3c912622,0x3c91d849,0x3ccfa4ac,0x3c9ad2be,0x3c22d7c8,0x3cc87c79,0xbbe67a64,0x3d06b251,0xbb2b63c9,0x3cb61939, +0x3cd477ea,0x3c844f47,0x3c7c7789,0x3d3cf60e,0x3e007261,0x3ddaeb2f,0x3e0d763e,0x3e0c4204,0x3e17e95b,0x3e1d68b1,0x3e27acc4,0x3e31f561,0x3e4930b7,0x3e5d24e6,0x3e762fa5,0x3e8b5aa5,0x3e891046,0x3e7c591a,0x3e52f38b,0x3e2b510e,0x3e4e3030,0x3e124dfa,0x3be54067,0x3d6fff0d,0x3d086530, +0x3cf6fd95,0x3c4ded1b,0x3c280405,0x3bb791d8,0x3a8f2fc6,0x3c96fe47,0x3c340b83,0x3bb0fad9,0xb994a1c1,0x3c177b75,0x3c68886b,0x3aa1304b,0x3d5dc3e5,0xbcca1b8c,0x3d8a3a43,0x3deceb96,0x3df3b440,0x3e153eb2,0x3e1681ef,0x3e23b65a,0x3e2bf80b,0x3e3386a1,0x3e4941d0,0x3e5c74a9,0x3e83e048, +0x3e946363,0x3ea61243,0x3ea48319,0x3e95fda9,0x3e6ca283,0x3e4f48ba,0x3e713af7,0x3e81e5cf,0x3d4738b9,0x3d0ee3ee,0x3d3fe311,0x3c1c625a,0x3d5a40a9,0x3c7592eb,0x3cc759e8,0x3c6b9383,0x3c55e9c2,0xbb1d703c,0x3bf8919d,0x3c0ad6e6,0x3bd83f75,0x3c8e7d4c,0xbc0ca87b,0x3d1dc51a,0x3ca8cd08, +0x3db4d5c5,0x3e072b85,0x3e1470c1,0x3e405a19,0x3e4d2c5b,0x3e69d01b,0x3e6fd7a9,0x3e8b40a1,0x3e90cd02,0x3e9253f1,0x3ea8c4ad,0x3eaea1ae,0x3ead03b7,0x3ea26b5d,0x3e9ea1f1,0x3e9235af,0x3e8c2c95,0x3e9eadec,0x3dcfb210,0xbd9de642,0x3df0398d,0xbb6f5358,0x3d4330f5,0x3ccd6f30,0xbc2de694, +0x3cb61d2a,0x3b19db13,0x3bb0988d,0x3c42e448,0x3c3bfc69,0x3c13221e,0x3bd77d4e,0x3d0ecf57,0x3c82a19d,0x3d2aa449,0xbbe75f30,0x3d554642,0x3e21ca2e,0x3e1e2b47,0x3e54600e,0x3e617157,0x3e772539,0x3e816e83,0x3e8213d5,0x3e8ace7c,0x3e9002fe,0x3ea3c438,0x3eae3bb8,0x3eb130d5,0x3eb52eb3, +0x3ea9899f,0x3ea2ebe7,0x3e8e4729,0x3eb5ab67,0x3e148a27,0x3ddb96f9,0x3d877c48,0x3d1d886e,0x3d44e8da,0x3cce4fac,0x3c645da4,0x3bf7756e,0x3c02ecac,0x3c82c8a9,0x3c08c10b,0x3bde1c7d,0x3ca5cb0e,0x3bf2b8ac,0x3c9e824b,0x3c9e61e9,0x3cc8dbc1,0x3d054530,0x3dd6e9fb,0x3e2089bd,0x3e26c6ec, +0x3e5ce24a,0x3e7e3ad9,0x3e92a08c,0x3ea99795,0x3ead9db4,0x3ea7bcc3,0x3ea271ea,0x3ea0d936,0x3ea5e3ff,0x3eafd9ad,0x3ebd45ad,0x3ec2b985,0x3ed7183f,0x3eaec3e6,0x3ecdff10,0x3e6d0ee4,0xbce8c624,0x3e1007de,0x3c68b6d4,0x3cb91f31,0x3c1f976a,0x3cd063e0,0x3c67689f,0x3cfb28e8,0x3c908080, +0x3c4b1187,0x3b745552,0x3c803a22,0x3cfb5d9b,0x3c7bb19e,0x3ce19e1a,0x3d48bf3d,0x3c8b2d0d,0x3ce22831,0x3e25d1b2,0x3e1955c4,0x3e4e2fd1,0x3e7b069f,0x3e9681f0,0x3ea7be06,0x3eb7edbd,0x3eba74b8,0x3eb53b16,0x3ea895ff,0x3ea7a29f,0x3eb414c8,0x3ebd242e,0x3ec89e92,0x3ede6fd2,0x3ed1260d, +0x3ed61e50,0x3e56f7f0,0x3da49d1e,0x3dbd7b39,0x3c04b91d,0x3dae3666,0x3cb71869,0xbc1b52d2,0x3c69394b,0x3c89ae5a,0x3ca7604c,0x3c9adf7d,0x3c14c580,0x3ccc62e3,0x3c81adb9,0x3c596c54,0x3cb55a07,0x3d4e36af,0x3ca4f9ca,0x3e0de2b7,0x3e11f8f4,0x3e1b7e89,0x3e3c55ac,0x3e557d47,0x3e789ade, +0x3e8d0f2b,0x3e982874,0x3ea20282,0x3ea4347d,0x3eaba09f,0x3eb0205b,0x3ea7d0f8,0x3eaf5953,0x3ea5c9e7,0x3ebc64cc,0x3ebc2bc2,0x3ed0fa84,0x3e663b9c,0xbcbca97d,0x3de8bed4,0x3d55c23d,0x3cfb1ab4,0x3d03c199,0x3d9be8df,0x3c2b2fb5,0x3cdf8118,0x3b4fb032,0x3c9f1ffa,0x3c69c811,0x3d049ea5, +0x3c4164ed,0x3cae7e57,0x3d0fe1a7,0x3c926423,0x3d0b7f9e,0x3cdc4f14,0x3e22a366,0x3e0188f9,0x3e0ed4d3,0x3e2cc6cb,0x3e4f87df,0x3e80dc3c,0x3e917e41,0x3e9d5d10,0x3eacbb4d,0x3e99e7d6,0x3e929b0e,0x3e9f447a,0x3e98c748,0x3e9e4293,0x3eb5a234,0x3eaa439c,0x3e8c3c1d,0x3e6f46cb,0x3d57b7c2, +0x3d86ca11,0x3d0deb82,0x3c323be8,0x3d105840,0x3bfc424a,0x3d20d22c,0xbce3f707,0x3d82c18f,0xbad31b99,0x3cda720e,0x3c8b94c4,0x3ca63fa4,0x3cccecc3,0x3d636458,0x3da0c9d7,0xbc916cc6,0x3e0df565,0x3e296b24,0x3e0b37b5,0x3e28e118,0x3e303f44,0x3e4a1af6,0x3e56e87f,0x3e5eaae4,0x3e656511, +0x3e66fcee,0x3e6ae3c8,0x3e80f96e,0x3e843df7,0x3e838b78,0x3e7e1180,0x3e80be72,0x3e8526c5,0x3e88ee55,0x3d212638,0x3dbe0e39,0x3d862ef7,0x3d216dfe,0x3dd50604,0x3cbcc64a,0x3d188caf,0x3c2c9663,0x3d5832c5,0x3c0c39d6,0x3d51da27,0xbb835869,0x3d2b1ee4,0x3cbb881d,0x3d0eced8,0x3b2f260f, +0x3cd594af,0x3d84460f,0x3cbc488f,0x3e29d0e0,0x3deaadb7,0x3e0fa109,0x3e150a90,0x3e28af5d,0x3e2f0282,0x3e3f6892,0x3e48e1fd,0x3e513b9c,0x3e5c1218,0x3e658846,0x3e707187,0x3e6d9c4e,0x3e5e5566,0x3e66068c,0x3e319a1a,0x3e34110c,0x3e2fd9f7,0xbbd40aec,0x3db5d6e2,0x3ca4f028,0xbc14c6fc, +0x3c7818ba,0x3d4bd16c,0x3ce47f09,0x3d5b584e,0xbcb5c2f6,0x3daf08a1,0x3cf85cdb,0x3d694934,0xbb3fdfdc,0x3d3bf926,0x3d5fd09b,0x3d73a3b7,0xbc0d8831,0x3dc10377,0x3e14f7e2,0x3ddd714b,0x3e0221d0,0x3df3aa84,0x3e04fad3,0x3e0c0607,0x3e282eff,0x3e3b08d8,0x3e52a075,0x3e5245c3,0x3e584c65, +0x3e5b41dc,0x3e52040f,0x3e47e61b,0x3e4b0896,0x3e2c920f,0x3e153168,0x3e2bdf73,0xbd17612f,0x3ddf9437,0x3d9dee91,0x3d9860a6,0x3dda064f,0x3d0c8fd2,0x3ddb9f31,0x3d008393,0x3d1e75e1,0x3c77f49c,0x3d6e91d2,0x3d35f2cf,0x3d553d8d,0x3d38edc5,0xbc0f72e4,0x3d90eff6,0xbd271cac,0x3e0a82df, +0x3e02e956,0x3e072172,0x3e09076c,0x3e0b4578,0x3e0991b8,0x3e006ddc,0x3e107e35,0x3e0d1b1e,0x3e148d91,0x3e244d0f,0x3e25d41a,0x3e37e898,0x3e3697fe,0x3e1dcd65,0x3e207d5e,0x3e294def,0x3e0cf366,0x3e22d05e,0x3d401b10,0xbcfe7598,0xbd62c79f,0x3d6f66db,0xbbf497b9,0xbd92dc25,0xbdafc397, +0xbd777b99,0xbd356ab5,0xbd4fc530,0xbd89ba8a,0xbd8c3996,0x3ae85a1a,0x3d8f06c8,0xbd24332f,0xbbb82b9b,0x3d70d9a0,0x3e22c3e1,0x3e04c9b1,0x3e07f275,0x3e077954,0x3e0776ca,0x3e0716f2,0x3e05d3d9,0x3e0c3c7d,0x3e0e7515,0x3e13c399,0x3e16d692,0x3e14a308,0x3e1991b9,0x3e16ec4a,0x3e125dbc, +0x3e13eada,0x3e10d023,0x3e42b404,0x3ee13301,0x3e9cc958,0x3eb11fae,0x3e8cb17f,0x3e142e06,0x3d195e3f,0x3e867d75,0x3e288a8f,0x3caecbef,0x3bca5a92,0x3b8815e8,0x3cbad244,0x3c828394,0xbc89fc31,0x3c8ff989,0x3e1b891d,0x3e74003f,0x3bc20da9,0x3e0a03ad,0x3e6794a8,0x3e9fd86c,0x3e930189, +0x3e986d81,0x3e97b881,0x3e9d8be9,0x3e9f50c9,0x3e9d5049,0x3e9e46e6,0x3ea11b14,0x3ea0ce31,0x3eaa9643,0x3ea718b3,0x3eb12c9f,0x3eabbefc,0x3eab93f9,0x3ea69658,0x3ea2d5a2,0x3ecc5612,0x3ece5647,0x3dec0ecf,0x3e8bc1ab,0x3e20a62c,0x3e77a0e5,0x3e70c72e,0x3e42e16c,0x3e7a2e14,0x3e4c7b32, +0x3e3b91ab,0x3e3b96c2,0x3e69b65d,0x3e3f83b0,0x3d9da3fb,0x3e7c84bf,0x3e32f369,0x3e5fd7d8,0x3e27ed1c,0x3eac7d9c,0x3ead16a2,0x3eb334da,0x3eb87ec3,0x3eb4c993,0x3eb30eca,0x3ec77558,0x3ed02399,0x3ed7fd91,0x3ed4830d,0x3eebdfbb,0x3ede31d5,0x3efa9116,0x3ef6f591,0x3ef502af,0x3ee1d700, +0x3ed05b70,0x3ee8cb3e,0x3eccff18,0x3e6be456,0x3ea2c393,0x3e43fd4f,0x3e588864,0x3e086329,0x3e5b945b,0x3dea826a,0x3e5d4293,0x3dc6f987,0x3e7ee084,0x3dedc996,0x3e2b3da7,0x3e0ce96a,0x3e35de71,0x3e471e20,0x3e18fb3d,0x3e4399c4,0x3e85258a,0x3eaf9cbd,0x3eadd73f,0x3ec3286e,0x3ec52ffa, +0x3ecf060e,0x3ed88859,0x3edb9665,0x3eec2d41,0x3efd03bf,0x3f08ce47,0x3f157b4e,0x3f22756b,0x3f1df479,0x3f16ca55,0x3f042597,0x3ef8f4c0,0x3eeec815,0x3ec26ac7,0x3e2b32b3,0x3e504eb7,0x3e1ade15,0x3e01aeb9,0x3dd443fa,0x3e06b7a7,0x3ddefe94,0x3db6d063,0x3d91d08a,0x3dc04f23,0x3d5cbb4c, +0x3de60ec7,0x3d695552,0x3dd0591c,0x3e01c054,0x3dd63cbf,0x3e082873,0x3e3d7e44,0x3e9eedc9,0x3e98282f,0x3eb9facc,0x3ebeb961,0x3ecd5dab,0x3ed803ea,0x3ee9ceb0,0x3ef71c3a,0x3f09295c,0x3f16516b,0x3f25f64e,0x3f3c50e0,0x3f39cb22,0x3f2ea2e2,0x3f10303f,0x3ef838e4,0x3f0405d3,0x3ed634d1, +0x3e4f5342,0x3e6a7adf,0x3e280d61,0x3e0bf654,0x3dbee43a,0x3d86e01b,0x3d209f8e,0x3d038b9a,0x3d6e915d,0x3cf7269e,0x3cb63006,0x3c5f8a99,0x3d225b0d,0x3d4da893,0x3d554641,0x3e08121a,0x3d2a585e,0x3e51e59f,0x3e8f9c8b,0x3ea5b51d,0x3ec37f33,0x3ecbf9c1,0x3ee08c09,0x3eef1c52,0x3efd4d5c, +0x3f0df115,0x3f1989ce,0x3f33931c,0x3f495d28,0x3f631993,0x3f60dbcf,0x3f51992a,0x3f282df9,0x3f12e2d5,0x3f1a08e5,0x3f216e54,0x3eb59200,0x3e6bcd7d,0x3e531e2c,0x3df39639,0x3e349a62,0x3db7aa71,0x3dcaf573,0x3d7f53b0,0x3d7964a1,0x3c740e56,0x3d26e3d4,0x3d1f9b0b,0x3d3b5c56,0x3da4a169, +0x3d315b85,0x3e018cef,0x3e1c9924,0x3e871a55,0x3ebe37b5,0x3edc9664,0x3f07eacd,0x3f12a93c,0x3f228f7a,0x3f2df363,0x3f4033ef,0x3f47bfec,0x3f4b5ab6,0x3f6e1d7b,0x3f763e24,0x3f73a110,0x3f6123d3,0x3f59d5e4,0x3f4aee3b,0x3f3b9ec1,0x3f48b70e,0x3ed7a379,0x3dc7bfd1,0x3ebcd67d,0x3e126140, +0x3e5bb16b,0x3dfac314,0x3d2b1e05,0x3db2917c,0x3d231652,0x3d26bfce,0x3d5a8045,0x3d305c12,0x3d4d24b1,0x3d62d9db,0x3de52886,0x3decdaf5,0x3e2920c8,0x3dd4f11d,0x3e6b4fe6,0x3ed4ecfa,0x3ee47baa,0x3f0de711,0x3f1e3ae2,0x3f2ec8cc,0x3f3ef334,0x3f44875c,0x3f54d72f,0x3f5a85f1,0x3f7616b8, +0x3f819c43,0x3f820996,0x3f81eac4,0x3f7453e8,0x3f6844f6,0x3f4e6c0c,0x3f6910f9,0x3f0d39b8,0x3eeea977,0x3ea027ef,0x3e83d927,0x3e57b641,0x3e0c6b4c,0x3dc9beb2,0x3d6fc754,0x3d7d918b,0x3d96c46a,0x3d6d8e8b,0x3d5a2b6e,0x3d9a1e5f,0x3d9989b5,0x3dcc60d7,0x3df9e609,0x3e1a5503,0x3e49cd2e, +0x3ea2dff9,0x3ed12eea,0x3eedbbdc,0x3f131932,0x3f26f67e,0x3f3bdc0a,0x3f5cf57d,0x3f684779,0x3f6b4c62,0x3f71118a,0x3f730bd5,0x3f74f14c,0x3f75f49c,0x3f7c63bb,0x3f7f7720,0x3f85b468,0x3f6e7e30,0x3f74ebe3,0x3f3a0292,0x3e5c7177,0x3ee2c25a,0x3e494b19,0x3e294b0e,0x3deeb90b,0x3de680bc, +0x3dac9217,0x3ddbff5b,0x3dfdd104,0x3d883f95,0x3d3a227b,0x3daf149d,0x3df595f2,0x3deeaf4e,0x3e301bd5,0x3e307833,0x3e191a8d,0x3e5f7667,0x3eca92f5,0x3ed6b86d,0x3f0abf08,0x3f222628,0x3f3ec6b4,0x3f52e2db,0x3f6cd344,0x3f784886,0x3f7b8d1e,0x3f749f96,0x3f6f4259,0x3f780c6c,0x3f73d331, +0x3f792341,0x3f81556a,0x3f80c21f,0x3f6ecf4e,0x3f332e33,0x3ef4284d,0x3ea085cf,0x3e595acf,0x3e7c08f9,0x3e139963,0x3d1032ee,0x3dd26762,0x3db4367f,0x3e0ac3a8,0x3dd490d0,0x3d611ffc,0x3df27ae2,0x3dd6ed1f,0x3dd7334d,0x3e079d3a,0x3e6728a8,0x3e424792,0x3eba1d4b,0x3ec29918,0x3ed7f8c7, +0x3efa4ca1,0x3f149d50,0x3f2cb91a,0x3f428f07,0x3f52e193,0x3f6216d7,0x3f65ba4b,0x3f762612,0x3f7ebbfc,0x3f77239f,0x3f703cab,0x3f589cba,0x3f557311,0x3f6a0637,0x3f6d2864,0x3f2dac95,0x3e9f72ca,0x3ed1c621,0x3e812098,0x3e343487,0x3e56390d,0x3e7fd958,0x3de5e38a,0x3e0838d6,0x3da1f2c3, +0x3dcd13cb,0x3dad0304,0x3e0313c1,0x3de3ab5e,0x3e064024,0x3e43def5,0x3e1897ad,0x3e668532,0x3e697e53,0x3ee62511,0x3ecf54f8,0x3ecfd485,0x3ef9d51e,0x3f0fb8f0,0x3f2f2c54,0x3f4516de,0x3f564673,0x3f68e56a,0x3f5cc825,0x3f57498f,0x3f681e5c,0x3f5bbf5b,0x3f5eb215,0x3f6922e0,0x3f63c01b, +0x3f3d1f67,0x3f2c2e8d,0x3ec3086d,0x3ea6f3d7,0x3e7ad602,0x3e2dc3a3,0x3e3a7806,0x3debfa9c,0x3e2aaeea,0x3c9943aa,0x3e5ee436,0x3d809ea6,0x3df9ea5a,0x3de030d0,0x3e00e2e9,0x3e33c385,0x3e76a4e4,0x3e9abfec,0x3dfd076c,0x3ed926f4,0x3ef2bad4,0x3eda1987,0x3ee83863,0x3ef8182b,0x3f0d0f4d, +0x3f1a5159,0x3f23f421,0x3f305f18,0x3f38ab29,0x3f3ce8b7,0x3f49d250,0x3f49f69b,0x3f485128,0x3f408a83,0x3f39cb55,0x3f3fa852,0x3f357133,0x3eb334a9,0x3edfdf9a,0x3ea966d0,0x3e84ff4f,0x3eabd260,0x3e3d3484,0x3e30dbc7,0x3e095ea7,0x3e4a451e,0x3ded67cd,0x3e3ae94f,0x3d959114,0x3e3a9f56, +0x3e176dbc,0x3e2a3422,0x3e126d23,0x3e534b58,0x3e9e71ef,0x3e614d47,0x3ef2cc2d,0x3ec3fe8d,0x3edf838e,0x3ee789a4,0x3efde8d9,0x3f05b9a3,0x3f12100f,0x3f1aed6e,0x3f23a080,0x3f2cbd77,0x3f3226f1,0x3f38bfa3,0x3f3719a3,0x3f2eef42,0x3f2d0eab,0x3f15ed3e,0x3f0ac683,0x3f08fdd4,0x3e52e65c, +0x3eb8d001,0x3e65056c,0x3e116d16,0x3e2d69e5,0x3e67a0ad,0x3e36f473,0x3e6e48ed,0x3dd25aa2,0x3eb094d2,0x3e27d43c,0x3e8ab961,0x3ddc2f4e,0x3e78d0b3,0x3e7b18c0,0x3e896201,0x3dfeb30a,0x3ec0cb6b,0x3eda918a,0x3ec6f14b,0x3ed4910a,0x3ed4a838,0x3ee40993,0x3eef7226,0x3f075e53,0x3f126407, +0x3f1f36c5,0x3f203f14,0x3f257062,0x3f296988,0x3f210fc4,0x3f1cba46,0x3f1c41aa,0x3f0c2989,0x3ef2a2b0,0x3f07f6da,0x3e174d6c,0x3ed01f09,0x3ebcad4a,0x3eb7fc4f,0x3ede9563,0x3e64fece,0x3ec987a3,0x3e82bc51,0x3e8336fd,0x3e574a05,0x3e9dd127,0x3e86a656,0x3e9f3cd5,0x3e9c08d5,0x3e23603d, +0x3eba9ebf,0x3dbc34e4,0x3ee2c98d,0x3ed3a2a3,0x3ee23ecd,0x3ee2d5ab,0x3ee895a5,0x3ee4aa10,0x3ed95323,0x3ef1a40a,0x3eeb8750,0x3ef64d8e,0x3f0552ad,0x3f034109,0x3f0eb6bb,0x3f0ee06d,0x3ef97bb9,0x3efee60a,0x3f06415b,0x3ed5bdc0,0x3eebea0d,0x3ea405fb,0x3e093b7d,0xbbe9861a,0x3ea9d171, +0x3e439923,0xbc8b2809,0xbd6339d3,0xbc52c213,0x3c89029b,0x3ab1829f,0xbd18ed1b,0xbd1c9cb8,0x3e5838c9,0x3eb6771c,0x3c0f07a1,0x3e3f19e0,0x3eafbb3d,0x3ee33fe9,0x3ecc17a9,0x3ed11d8d,0x3ed09584,0x3ed2101f,0x3ed242e0,0x3ed01a2c,0x3ed895be,0x3ed93240,0x3edfb27e,0x3ee38ae4,0x3ee0dd7c, +0x3ee7bc01,0x3ee4c426,0x3edddd51,0x3ee0f02d,0x3ede6b61,0x3f1f42a9,0x3e9377de,0x3e2dc93e,0x3de89c81,0x3e8757e8,0x3eaf2ba7,0x3ea4d47e,0x3e69c35f,0x3e9c2029,0x3eb2a4f7,0x3eaec044,0x3ea933dc,0x3e9c8e6f,0x3e9d0d03,0x3ea5e2fd,0x3e9fbf44,0x3e9bc97a,0x3e80be48,0x3e9e3d62,0x3ea31035, +0x3e862260,0x3df95ce5,0x3e1efc78,0x3e1ffccc,0x3e1d93ed,0x3e24ad12,0x3e28b451,0x3e28d9f9,0x3e2b5ce6,0x3e2f4233,0x3e2d3acf,0x3e33ca5e,0x3e2be026,0x3e33d09f,0x3e2f95b9,0x3e32d32a,0x3e32f25d,0x3e2ab7ab,0x3e52f5e7,0x3e67ae9d,0x3eeb3431,0x3e7d1fb9,0x3eab3279,0x3e85dfc8,0x3e95ee81, +0x3e8abd9e,0x3e478f26,0x3e94beb5,0x3e8cb036,0x3e8fd564,0x3e7a9fd2,0x3e8c1357,0x3e9ff2cf,0x3e84c1f4,0x3e95d595,0x3e8609e7,0x3ea9a753,0x3e55f9ed,0x3e37be58,0x3e4b18d1,0x3e447436,0x3e47df15,0x3e44d6c4,0x3e5e2456,0x3e7259b8,0x3e78b4ee,0x3e6a86a3,0x3e800762,0x3e656b89,0x3e7aaddb, +0x3e7ae9d7,0x3e805ba6,0x3e7c4413,0x3e6c6df5,0x3e4fba81,0x3e8876c1,0x3ec30c5c,0x3e6f9170,0x3e94bc79,0x3e80e89c,0x3e8c50de,0x3e38c51a,0x3e6e3cac,0x3e12c3b3,0x3e8192bd,0x3e117f46,0x3e3c6e41,0x3e488b83,0x3e5064b4,0x3e409798,0x3e5d0201,0x3e6c8f39,0x3e8a0f41,0x3e4e9602,0x3e1727c9, +0x3e49b11d,0x3e4021c4,0x3e562be6,0x3e62e4d0,0x3e7a5ad2,0x3e83fdda,0x3e8e4a8a,0x3e93949f,0x3e91a198,0x3e94ada1,0x3e985f3d,0x3e9733be,0x3e987b44,0x3e964214,0x3e8abc1d,0x3e4132c9,0x3e8de42c,0x3ec3ef70,0x3e82e85f,0x3e79e1aa,0x3e4bd48b,0x3e32ffea,0x3e25543f,0x3def3d7d,0x3de388aa, +0x3dfdf033,0x3dd06a25,0x3e0f014a,0x3dca4df1,0x3e11ce58,0x3e08dc62,0x3e24ac4a,0x3e292060,0x3e577e7c,0x3e466b68,0x3e0d8760,0x3e2c258e,0x3e350834,0x3e4baff1,0x3e5cc030,0x3e77d66a,0x3e90b7a8,0x3e972e32,0x3e993b77,0x3ea1259f,0x3e9fa0b1,0x3ea5594a,0x3ea9678d,0x3eabc274,0x3e9e46e3, +0x3e95e1f0,0x3e7030de,0x3e8d4fea,0x3ec068d8,0x3e6bc718,0x3e43560c,0x3e29f3a2,0x3e18598b,0x3dd2624e,0x3d9d05c9,0x3d74203c,0x3d123818,0x3d01cfed,0x3cf4d811,0x3d3165ec,0x3d4cbed6,0x3d8344b8,0x3de2d0aa,0x3db917bc,0x3e4d5ed5,0x3e204a1b,0x3e01be52,0x3e31bf3c,0x3e36f3c6,0x3e532b52, +0x3e7e52fe,0x3e8eacb2,0x3ea489f9,0x3eb4f263,0x3ebdf2cc,0x3eb98824,0x3ebe638c,0x3ec4fff4,0x3ec8fc0a,0x3ec9bee1,0x3ec3cc22,0x3ea28291,0x3e77092b,0x3dea79ea,0x3ed0f84d,0x3ea14605,0x3e5cba8e,0x3e57f2b2,0x3dea47be,0x3e074f59,0x3da34828,0x3d8f8ef8,0x3da79fa1,0x3d762b2d,0x3d8a7797, +0x3d714b95,0x3da9ddc1,0x3dd7c753,0x3e10ea2a,0x3e0f65a1,0x3e6b0073,0x3e4e84ff,0x3e79accc,0x3e989743,0x3ea62c15,0x3eb65f9d,0x3eb68a9c,0x3eeaed0a,0x3ede339d,0x3ee981c7,0x3efce595,0x3f0484cf,0x3f01970f,0x3eedfbd8,0x3ed973b4,0x3ecc81b7,0x3ecb3e5a,0x3ea1b512,0x3e6a6f53,0x3ee83d3c, +0x3f220d21,0x3e8f0ec8,0x3eb69450,0x3e614b13,0x3e3e55f6,0x3e214661,0x3dd57269,0x3db54a87,0x3d9d8fb9,0x3d8469ad,0x3d443e30,0x3d809b5f,0x3dae3253,0x3db53f3b,0x3e2e4995,0x3e43255d,0x3e94b098,0x3e919e34,0x3e60f6d0,0x3e8d32d7,0x3e7a512f,0x3ea1e092,0x3eb14040,0x3edf9d19,0x3efc0b86, +0x3f14206a,0x3f180a48,0x3f1debef,0x3f1cb6e5,0x3f102c5e,0x3f0813b8,0x3eff46e2,0x3ef16ba9,0x3ece0b51,0x3e8142e7,0x3ef96dfb,0x3ee8e62b,0x3ec1d9f6,0x3ebea24f,0x3e82a268,0x3e5d83d2,0x3e271488,0x3df52942,0x3dd3dcd3,0x3dfea1b3,0x3dce44d2,0x3dd12f98,0x3dd07557,0x3dfe861c,0x3e15ac03, +0x3e4b5e3f,0x3e6fd2c2,0x3e8a7df1,0x3e65c9cf,0x3e499100,0x3e79a05c,0x3e65d322,0x3e64ed95,0x3e5c609f,0x3e8a56d8,0x3eb02c1a,0x3ee31717,0x3f15e3c8,0x3f237f01,0x3f1dc35b,0x3efd03d8,0x3ee2a7cb,0x3ec2a01b,0x3e806249,0x3eaa45bb,0x3e13f546,0x3ec77c78,0x3f278dd9,0x3e94d684,0x3ec1208a, +0x3e8f37b9,0x3e68ea89,0x3e1c96d7,0x3e065696,0x3e012b49,0x3e65e70f,0x3def9304,0x3de08f01,0x3e0aab90,0x3e181352,0x3e3f1826,0x3e8267c1,0x3e4def18,0x3e90803e,0x3e9c27db,0x3e122d10,0x3e4881f2,0x3e5ba90b,0x3e3c2e70,0x3e3acc5b,0x3e341425,0x3e77ce83,0x3ea8456c,0x3ee2f79c,0x3f0d4684, +0x3f0df080,0x3f00d83b,0x3ed60c9b,0x3ead5394,0x3e56d236,0x3e5ecff0,0x3dafcab9,0x3ed6bce3,0x3f0a0193,0x3ea40f83,0x3ec83591,0x3e35882c,0x3e6194f2,0x3e2234f5,0x3e22e054,0x3e15087b,0x3e86477d,0x3e12c8b8,0x3dcb32e9,0x3e17df1e,0x3e31696c,0x3e502d54,0x3e713e87,0x3e8a86a0,0x3ea6cd91, +0x3e47f965,0x3e42d602,0x3e59bbac,0x3e4790c6,0x3e83ec6a,0x3e916c22,0x3e97bcfe,0x3ea7c55a,0x3ec01124,0x3ed4cada,0x3f01105c,0x3f130d04,0x3f1c0123,0x3f02f86f,0x3edb9b2d,0x3e88d07a,0x3e8a9baa,0x3e15c11c,0x3eb9b614,0x3f311144,0x3ea2c23e,0x3ea63e93,0x3e855abd,0x3e89a0d6,0x3e476fc7, +0x3e5c451f,0x3e453cd3,0x3e53273b,0x3e22c608,0x3e1f5d5f,0x3e296285,0x3e66693e,0x3e6f8091,0x3e8d49c2,0x3e9c50a9,0x3eb964f0,0x3ecb9120,0x3e898c89,0x3e9b26b4,0x3e77e4ba,0x3e88785c,0x3e8085ad,0x3e89f03b,0x3e959f33,0x3ea9f2f4,0x3eb9dcae,0x3efbc8a6,0x3f0dc9c5,0x3f188728,0x3f17e210, +0x3f0c303b,0x3ed14128,0x3ed1bcc1,0x3ec1c4ac,0x3eb69b01,0x3f0d8883,0x3edee38e,0x3ec24626,0x3eb4620c,0x3e86efb5,0x3e78315a,0x3e5e903c,0x3e5a7066,0x3e5fc97b,0x3e36963c,0x3e2ffddc,0x3e4712ef,0x3e5c3df2,0x3e8f3cce,0x3e9782c4,0x3ea4fc77,0x3ed70a2d,0x3ea675f7,0x3ea483b0,0x3eabdcb9, +0x3e7ff231,0x3e885243,0x3e90776d,0x3ea8fc29,0x3ebf6eda,0x3eec486c,0x3f0cc659,0x3f14e0b3,0x3f19c188,0x3f191d03,0x3f1e5649,0x3f184a84,0x3f046194,0x3ef4a997,0x3ec46c05,0x3f1cec9a,0x3f0074a6,0x3ee2673e,0x3ec373a4,0x3e8b05cb,0x3ea2e0aa,0x3e777003,0x3e8e10db,0x3e729605,0x3e83b641, +0x3e6939e4,0x3e7821aa,0x3e7820d1,0x3e863776,0x3e884778,0x3eb36f93,0x3eba9266,0x3ec9aebd,0x3edd274a,0x3ea32070,0x3eb5c681,0x3eb70dbc,0x3eb3edaf,0x3eb361e0,0x3ebfc9c4,0x3eceb9b1,0x3edec067,0x3ef5aee4,0x3f04a9c8,0x3f073c57,0x3f0d367d,0x3f1076c7,0x3f11d521,0x3f0a51c5,0x3f0c1f9a, +0x3eeaf5d4,0x3edde77b,0x3f0b77a8,0x3eddfbcb,0x3eea7e6e,0x3ed6b6d6,0x3eba8ef0,0x3e99de2d,0x3e9cf86b,0x3e956459,0x3eb34c2a,0x3ea40bfc,0x3e941caa,0x3ea63ece,0x3eabbf75,0x3eb4669d,0x3eae3152,0x3ebc7827,0x3ecd6fde,0x3ecc91d8,0x3eb2b177,0x3ed332bc,0x3ecff3bb,0x3ede6769,0x3ee6d3a5, +0x3eeca7d6,0x3ee7ef11,0x3ee8c603,0x3ee08861,0x3eeae64e,0x3ef6e724,0x3f020bdf,0x3ef8808c,0x3f0114c3,0x3f019be5,0x3efcb5a3,0x3edd76b4,0x3eda5801,0x3f13dc3c,0x3edb68b9,0x3ee34482,0x3ef0e8a3,0x3edf99a3,0x3edce4db,0x3ecf825a,0x3eeb1d3f,0x3ee3c1de,0x3ee757f7,0x3ed96a47,0x3ed7105e, +0x3ee1727c,0x3eec8378,0x3ef3e4b2,0x3eee6cca,0x3ef88937,0x3ed56ed7,0x3ed0c3ab,0x3ee2fe11,0x3ee3d6fb,0x3eed3c9a,0x3eeac96f,0x3ee7c993,0x3efaea1a,0x3ef3989f,0x3ef96ce3,0x3f00651b,0x3eed1795,0x3ef3212c,0x3ef62c40,0x3ed9333b,0x3edd5b54,0x3ee55c99,0x3ea8e26f,0x3ea1732d,0x3ee7d388, +0x3ef9f8f4,0x3ed3f745,0x3ed716d8,0x3eecc86e,0x3edfb70e,0x3ede9a8e,0x3ed3faa9,0x3ecd550b,0x3ecfc399,0x3ed4cb85,0x3ed651e3,0x3eea0090,0x3ecf21a0,0x3ec65a89,0x3eec950b,0x3edbc08d,0x3e94ef96,0x3ea22f4a,0x3ea6d17b,0x3ea7c6d6,0x3eabe108,0x3ead832a,0x3eab6a7c,0x3eaeeb98,0x3ea84611, +0x3ea9e76b,0x3eaa319a,0x3ea973c3,0x3ead054b,0x3ead2f90,0x3ea8f85a,0x3eadcf60,0x3eaf4213,0x3f0ceb61,0xbda6adf6,0xbd9f98e8,0xbdfb1cb7,0xbd84ff30,0x3db04a26,0x3e79ca0e,0xbd8129af,0x3d625a0d,0x3e79e394,0x3e84dec4,0x3e8985cc,0x3e7bf716,0x3e80a86e,0x3e960b98,0x3e82057c,0x3d79c1f2, +0xbd1c65ad,0x3e8c32d6,0x3dc61500,0xbc74c1c8,0xbdbb40a0,0xbd850ca4,0xbd9cbea5,0xbda09f1d,0xbda6edff,0xbda6eec9,0xbda10fc5,0xbda1ff04,0xbda5bcdd,0xbda8e4f5,0xbdc13561,0xbdc7a186,0xbde35c01,0xbdd20108,0xbdcdead8,0xbdc0a26d,0xbdbfe4c7,0xbdc47d44,0xbe077bd2,0x3e54624c,0x3a7692ad, +0x3e02d1ad,0x3c5d39c8,0x3cac9d0c,0x3da1aa1a,0xbc3680c5,0x3d3fa529,0x3d92cef1,0x3d4d59ce,0x3c750aa8,0x3d96dc4f,0x3e3f0e83,0x3c48f9c4,0x3db49156,0x3d436e75,0x3dd576c8,0xbda7e75b,0xbd86a235,0xbd9f94bb,0xbdb812c5,0xbdafac78,0xbdab9e52,0xbdb79a6d,0xbdb34483,0xbdbff718,0xbdcf7eea, +0xbdfbb67b,0xbe0613f5,0xbe34ff2a,0xbe284403,0xbe1e3253,0xbdf52acd,0xbddb556e,0xbe0d6e4a,0xbdb1c878,0x3d7e6dcd,0xbd820a5c,0x3d5a5fa0,0x3cf555d6,0x3db4210d,0xbc600533,0x3da3f70e,0xbcf5e57e,0x3da5ddbd,0xbd871c6d,0x3da8cda8,0x3c1487fd,0x3d849f43,0x3ccd771b,0x3cb29741,0x3dbad4e5, +0x3d5a8e34,0x3bea5da4,0xbd9f301f,0xbd89f0a1,0xbddbe1a1,0xbdd1c0e9,0xbdd798f3,0xbdc569f1,0xbdb7a5ca,0xbdd10a00,0xbdefd4fe,0xbe2ae633,0xbe5f5d28,0xbe94a81c,0xbe84b97a,0xbe73de46,0xbe2ec9ec,0xbe200d5e,0xbded5cd4,0xbd80263d,0x3dd015d6,0x3d199f25,0x3d5cb87f,0x3d9660c1,0x3daeed3f, +0x38f7b833,0x3cacc51a,0x3d0a4e2c,0x3d968073,0x3d3735ba,0x3d99aaf0,0x3cea7d40,0x3db11a19,0x3d8320ec,0x3d645e2d,0x3dbbfe51,0x3d9babbd,0x3d2c46b4,0xbd36b8e0,0xbd4cf720,0xbdc2248a,0xbdc408d8,0xbdc5706a,0xbda2dc9a,0xbd94b04c,0xbd9ab555,0xbdf5b058,0xbe22d8e3,0xbe7a1eef,0xbebc7427, +0xbea958bf,0xbe963e5b,0xbe2dac76,0xbdf0424b,0xbe11ea4e,0xbd4beaa3,0x3dc4e482,0x3c91049b,0x3cf34d2e,0x3d44b6fb,0x3d809c6a,0x3d51dd4a,0x3d5733c2,0x3d002cc5,0x3c61bc99,0x3d04de50,0x3d0ef138,0x3d53184e,0x3d2f4a70,0x3d62789c,0x3d9eaf9f,0x3d50ba5e,0x3e0fb3dc,0x3d192aea,0xbcb9da4a, +0xbd71466b,0xbddf1029,0xbded14a8,0xbdd9308e,0xbdc23e9e,0xbd9093c4,0xbdc2e71a,0xbdd579ee,0xbe6ab343,0xbeabc0c9,0xbefe4584,0xbee4b6e4,0xbecdab8c,0xbe755b3b,0xbe3d72f6,0xbe61b54f,0xbec2730b,0xbde2652b,0x3ce7dc49,0xbab61cfa,0x3d613fbb,0xbd1749b0,0x3d0a136c,0xbc7b2195,0x3c9d87e1, +0x3d14456c,0x3d8b4b6e,0x3d7db137,0x3d467185,0x3d8355f5,0x3d642ebb,0x3de1c5d6,0x3daf1aa2,0x3dbde228,0x3be00d5c,0xbd799eed,0xbde2d926,0xbe4946b8,0xbe59ef4d,0xbe87e93a,0xbe636d0d,0xbe88450e,0xbe8383ac,0xbe4634bb,0xbed4085a,0xbee6fad7,0xbee6489b,0xbec076cb,0xbeb792d3,0xbead28ba, +0xbe9f3cd5,0xbef5c2d3,0xbc68435f,0x3eb920f1,0xbc8c6eb4,0x3e3610cd,0x3cbf289c,0x3dd1a877,0x3e072adc,0x3d795e87,0x3d90003d,0x3d9aabcc,0x3cf2e089,0x3c87eea9,0x3ca59b34,0x3d0c08ec,0x3c45d803,0x3d56719c,0x3d75cdde,0x3e31ae38,0x3d9ea520,0xbdb7bd79,0xbde986ac,0xbe8368db,0xbe9b5207, +0xbec4ebd3,0xbed13583,0xbec8f70f,0xbeb973f6,0xbea5f076,0xbee474c1,0xbefee488,0xbf052cd7,0xbef72b55,0xbee5fa13,0xbee073aa,0xbee706b5,0xbf16d9dd,0xbe29830e,0xbdbaf1c4,0x3d21d2fa,0x3d5838a8,0x3d5073b5,0x3dd03ea9,0x3dbebe92,0x3dc94afb,0x3d955faf,0x3deda585,0x3da8e49f,0x3db22deb, +0x3d870053,0x3d66ea34,0x3d895f6d,0x3dbae93b,0x3dc26223,0x3d86a851,0xbca91cf8,0xbdd884e9,0xbe34dae2,0xbea84103,0xbecd36ff,0xbef9c1de,0xbf194919,0xbf1add74,0xbf101d8a,0xbef2746f,0xbecd07ab,0xbeb1ceb4,0xbebedf21,0xbea4cfbc,0xbebef937,0xbf0673f4,0xbf07cf27,0xbf043a59,0xbec71b89, +0x3e7ab07b,0xbde38d14,0x3de42109,0x3de3132e,0x3de3670b,0x3da6ed71,0x3da1c83a,0x3d98a510,0x3e3317b4,0x3ddb3aa2,0x3de035e2,0x3dbf0d21,0x3d8f7780,0x3da56142,0x3dbd9e7e,0x3dcab239,0x3e105a52,0x3d45d1f0,0xbdf4d27a,0xbe352f8d,0xbe9a5df3,0xbecfedbc,0xbf04c30d,0xbf1880cb,0xbf2b8e8b, +0xbf28cf03,0xbf148ae5,0xbed90a31,0xbe9869a9,0xbea3e9a7,0xbe44e727,0xbe5a3a68,0xbe809690,0xbee82145,0xbec483b4,0xbe96df71,0xbdc51806,0x3daf5031,0x3dd7d4c4,0x3cefa208,0x3dc81276,0x3e23ee04,0x3da81399,0x3ddf973c,0x3e5fab19,0x3d872ac3,0x3d93fd72,0x3d8a668b,0x3dc404d7,0x3e0b5b0f, +0x3e188b08,0x3d91b312,0x3df50179,0xbd7d5083,0xbdc5282b,0xbe0a557a,0xbe6292b1,0xbea38bf3,0xbed3cbfa,0xbefb54b2,0xbf085aba,0xbf0862aa,0xbee819c0,0xbee8d76d,0xbec1fdd7,0xbea36507,0xbe35faa8,0xbd153ca0,0x3dee3214,0xbe87e57f,0xbec388fe,0xbe905d63,0x3d76ef92,0xbd8bde4a,0x3d9d2a1d, +0x3de5e8e6,0x3d155139,0xbcad5394,0x3df5414c,0x3dd3cd7b,0x3e48c6e0,0x3df6d82a,0x3e072bab,0x3dbbbbb2,0x3e164fcb,0x3e19fb82,0x3dd98566,0x3e50a86e,0x3e0b52b5,0x3e152b4e,0xbe0e896f,0xbdd26103,0xbdeeceaa,0xbe39064c,0xbe86163a,0xbec44da9,0xbee216be,0xbef7ec19,0xbf0133fe,0xbebf0a2f, +0xbe85d430,0xbe7f9f82,0xbdcafd04,0xbde493d7,0xbe36c1d2,0xbe7c22e4,0xbe6565b3,0xbe6ea09e,0x3d920220,0x3d9ddbaa,0x3ddb819f,0x3e205dee,0x3dd18be5,0x3e0f6744,0x3dd383e9,0x3e80cd27,0x3d645ccc,0x3e30b962,0x3de231ca,0x3e13be87,0x3e0dd0ac,0x3def80d8,0x3d9b6c15,0x3d111605,0x3e9e25a0, +0xbd8da800,0xbde1551a,0xbd3e65db,0xbde8f042,0xbe0ae042,0xbe4d8255,0xbe7b5dc6,0xbe917d0d,0xbe924766,0xbe81b9bf,0xbe7149c3,0xbe6618fb,0xbe2d4d58,0xbdb23053,0xbd2de4cb,0xbd309995,0xbe1a1b0d,0xbe52d45f,0x3e377cee,0x3c8ce8d0,0x3ddd6f8e,0x3e1015ac,0x3b93f20f,0x3e1d0eab,0x3e03419a, +0x3e3ce2b6,0x3dd03837,0x3e3b467e,0x3decc6e2,0x3e7288b1,0x3dd7ea14,0x3e263bfd,0x3e2356f6,0x3e5fb7b0,0x3e245267,0x3d9a64d2,0x3e518b18,0xbdd388a0,0x3c943300,0xbc594546,0xbd144db3,0xbda55644,0xbdc97ad3,0xbe0596f6,0xbe211914,0xbe267ce5,0xbe287bf8,0xbe284a76,0xbe14929d,0xbde3297a, +0xbd8ea068,0xbd25d367,0xbb81605f,0xbd14bde2,0xbd4c2d49,0x3eb23350,0x3dd19cb9,0x3e80cf40,0x3e99745c,0x3e76cdb6,0x3df2e654,0x3e2719e0,0x3dc6a143,0x3e74fcba,0xbd2f098b,0x3e36b409,0x3d307750,0x3e8fb333,0x3dfbde8c,0x3e09d63c,0x3e0575ca,0x3ea6db0c,0x3cd26976,0xbb327592,0x3d8463f3, +0x3d6e8c26,0x3d808594,0x3d3d53b4,0x3cfdbcbc,0xbd1f7142,0xbd8e510d,0xbe090273,0xbdf92761,0xbdf8546b,0xbdfb239a,0xbdcbfa29,0xbd6dd6a9,0xbd08cc52,0xbbad6f35,0xbc2a291a,0xbde1043f,0x3edc8d1d,0x3d1c38b2,0x3d3cb419,0x3dce11dc,0xbd2ff9ae,0x3e788dd1,0x3cada4f9,0x3e4a06cb,0x3e46a9b7, +0x3e7720f4,0x3ddfd826,0x3e288110,0x3dca64de,0x3debc256,0x3eb11f45,0x3d9988cf,0x3ee06507,0x3c37f92c,0x3d1f369b,0x3d3e35d7,0x3d524786,0x3d886bb3,0x3d981d15,0x3dae24e9,0x3da52ecc,0x3d863acc,0x3d5916d6,0x3d125b10,0x3b85f63f,0xbca8d4ae,0xbcb51195,0xbcc74679,0xbd0835f0,0xbd37f1ec, +0xbd7ea862,0xbdf897cb,0x3d9704e2,0x3ea3f831,0x3f0180de,0x3cde442f,0x3e5ad09d,0x3f00ca52,0x3f0c0c10,0x3efb5de4,0x3ee846eb,0x3ef2c077,0x3f068433,0x3f072b06,0x3e3a5a9b,0xbc6dbcff,0x3ef60395,0x3e69bc68,0x3c3a2224,0xbdf1c3f7,0xbd6ae4a3,0xbd6d9748,0xbd613b8e,0xbd4ce163,0xbd41bb8d, +0xbd3bdfc0,0xbd53c2a3,0xbd88a00b,0xbd9451ac,0xbda68e2e,0xbdaabb2a,0xbdb9629b,0xbdb0ad81,0xbda5fac8,0xbd9ca352,0xbd9472fe,0xbd61a96c,0x3d804570,0x3d5725cd,0x3dd6dcab,0xba4182dd,0xbdc82892,0xbdddac59,0x3c5c7cad,0xbd89bf9d,0xbe064074,0xbe076b4a,0xbe016ab2,0xbdd2bca8,0xbdda9974, +0xbdff7de2,0xbdd87b93,0xbd92142b,0xbbe62332,0xbdd48052,0xbda842d7,0xbc7993d5,0x3db1289e,0x3d781e9e,0x3d7ba8ce,0x3d6f4956,0x3d6c4057,0x3d612a01,0x3d5804ed,0x3d4b579b,0x3d448260,0x3d456c2d,0x3d535d95,0x3d57dc12,0x3d5ec2d9,0x3d6cb2a2,0x3d6c6481,0x3d5366f0,0x3d6782e1,0x3dbfa60c, +0x3dadcfe4,0xbe235b37,0x3cc38422,0xbd8fc28f,0xbb050f8a,0xbca8600f,0xbcb79c3f,0x3d066b20,0xbcd8e56b,0xbc9dde5a,0xbcb9d15b,0x3c6af501,0xbc996780,0xbd9af6e4,0x3c2b3e21,0xbcea093f,0x3bb9b39f,0xbd35bcf3,0x3d940f66,0x3db5f12d,0x3da1443d,0x3d96ec4d,0x3d843b14,0x3d803152,0x3d8a305e, +0x3d606beb,0x3d65dccc,0x3d72ffe8,0x3d7be58a,0x3d7592d8,0x3d71a1e3,0x3d87fdca,0x3d8a8ee3,0x3d6abcb5,0x3d933a20,0x3df1ab9a,0x3d9dd70d,0xbd6d654f,0x3d63e89a,0xbce6d110,0x3b995de2,0xbd2f1772,0x3d2b6bc1,0xbcf03550,0x3d78b5c1,0xbcf58656,0x3d9ffc36,0x3c4a7d5d,0x3c6633ab,0x3c65280a, +0x3d05ffb0,0x3ca8e909,0x3c42bbcc,0x399777e1,0x3d8fae6f,0x3df27004,0x3da812f3,0x3da55988,0x3d7af32b,0x3d4a0b3c,0x3d458915,0x3d043171,0x3cc83223,0x3cfe8182,0x3d1c3d7e,0x3d36b5e0,0x3d1b1800,0x3d77e4b8,0x3d7a4f6f,0x3d2c8a80,0x3d9b0074,0x3e40d5a9,0x3dd9a903,0xbd9a5b3e,0x3cc8367d, +0xbc88ca1d,0x3b9067ee,0x3c203b77,0x3c1fa575,0x3d032853,0x3cf2b4f0,0x3d18429a,0x3d5d857d,0x3cb70fe4,0x3d584ac6,0x3cc4ada5,0x3d3c4b45,0x3d12cc3c,0x3d56eeb0,0x3d19146d,0x3d8c399f,0x3e0946f2,0x3dd00372,0x3db348a9,0x3d8750ae,0x3d83e631,0x3d86a9bb,0x3d1a0f84,0x3d2ce1b9,0x3d572965, +0x3d2d35ee,0x3d4203db,0x3cf1e39c,0x3d6645ba,0x3d55c415,0x3d538867,0x3dc3ae67,0x3e3cc917,0x3e09eb61,0xbce30acc,0x3d824cea,0x3d531d28,0x3d307ac9,0x3cb3c4ef,0x3d199134,0x3cca2ac3,0x3d03a747,0x3d878dea,0x3d3ed4c9,0x3d467be7,0x3d2c2d34,0x3d69c337,0x3d7ce02c,0x3d414ec2,0x3da90200, +0x3d01f6b2,0x3de61821,0x3e0d7bd7,0x3ddea69f,0x3dccfa65,0x3d863572,0x3d20f0da,0x3d29fa44,0x3c7d5a1b,0x3c08001e,0x3c2585f1,0x3cfe64b7,0x3cb0cd27,0xbc084720,0x3d1a7423,0x3d3d46f2,0x3cd4ce31,0x3dfa6574,0x3e916c4e,0x3ee34881,0xbbf15eb5,0x3d146040,0x3d9cb979,0x3ccba91a,0x3dfa22dd, +0x3c629af3,0x3d589327,0x3d01b527,0x3ce5ccdb,0x3d3de359,0x3d56dcb2,0x3d1f111c,0x3d27c005,0x3d1b2e8c,0x3d5364a8,0x3d8ac3a5,0x3d170f63,0x3d59c63f,0x3c558c66,0xbd2c05f6,0xbdf947f1,0xbe317d91,0xbe2e8688,0xbe8fd8ea,0xbe5eeca6,0xbe614a49,0xbe4c3565,0xbe564ed6,0xbdb7fc6a,0x3dec1f38, +0x3e389cec,0x3e61fcf3,0x3e1e3b2a,0x3e75339c,0x3eb66b2c,0xbbd590cb,0xbea95f6b,0x3dfb3aff,0xbd676289,0x3da2b463,0x3d315670,0x3d4daf6a,0x3d9014fb,0x3d4532a6,0x3da1b89f,0x3d17c3f5,0x3cc715a8,0x3cc334d6,0x3ce709aa,0x3d5a2d18,0x3c126a31,0x3ccea70a,0xbd089097,0x3cf4cff6,0x3dc59042, +0x3d57e2c5,0x3d6dbb40,0xbc8aae0a,0xbda5dede,0xbe442c03,0xbe86e226,0xbea4a1ee,0xbe977f23,0xbe8f5657,0xbe5e79fb,0xbd410b75,0x3d463eb2,0x3dfbf1c7,0x3e2b1f27,0x3e3c84da,0x3edf8937,0x3c223af3,0xbbfd4b50,0x3c422dbe,0xbd7770db,0x3c9db85d,0x3ca07403,0x3d4c18ff,0x3d6d5bc2,0x3d8cec26, +0x3dc9f4e8,0x3d873c04,0x3d70b5cf,0x3ceb3d0b,0x3d0f9298,0x3d05d9fa,0x3c6abdcd,0x3c8f0fa7,0x3cd80695,0x3ded37f5,0x3e2625d2,0x3dfba359,0x3dcda769,0x3ddd4928,0x3dd712cd,0x3d18d4ce,0xbd4ef44e,0xbe275906,0xbe8d03e2,0xbe860364,0xbdf47662,0x3e281baf,0x3e941d4c,0x3ed2e3d0,0x3f0ab039, +0x3ed0039a,0x3f20af85,0x3e7b97e8,0xbe8a0ccd,0x3e1b37af,0xbd8f165f,0x3b82e29f,0x3c12ad92,0x3d765b51,0x3d78b513,0x3d91fb62,0x3df9d95f,0x3da834f7,0x3d87865d,0x3d562dbd,0x3d2801f0,0x3d06e51d,0x3c3ae9a0,0x3db8db46,0x3cd43fa4,0x3d459237,0x3e7476ba,0x3e392f1f,0x3e1c3e21,0x3e3aaf95, +0x3e3df050,0x3e52626a,0x3e1ca2f6,0x3d976c0a,0xbc9f3764,0xbd967e1c,0x3ce12110,0x3e0ee3fa,0x3eb0dedb,0x3ef19411,0x3f1d8be1,0x3f189ee5,0x3f1b6a3d,0x3e72d400,0x3b7e09ee,0x3dd74e38,0xbca5d437,0x3e08aa79,0x3d7f6c34,0x3da2c6cc,0x3d8cb2dd,0x3da291ed,0x3e031cb7,0x3d4ed689,0x3d4db7b5, +0x3d80411f,0x3d4a220c,0x3d46bc2a,0x3d410fb9,0x3d2d598c,0xbb7ceb0f,0x3e17c451,0x3e2f040f,0x3e32d8da,0x3e45db73,0x3dc323bc,0x3dae52bd,0x3dee8a2b,0x3dcef8b9,0x3db90f19,0x3db52604,0x36f80b32,0xbce60e3b,0xbd8fa8a1,0x3e3eb55e,0x3e9d010a,0x3f12ce91,0x3ee3f5b6,0x3ec54dbb,0x3e20a8d5, +0xbe560181,0x3dff1c0d,0x3d52a5ec,0x3da8de13,0x3d3b8611,0x3d0ff17e,0x3d067e7d,0x3d3c9c5d,0x3da63841,0x3db4c416,0x3da8f473,0x3d37a130,0x3c6a735f,0x3cafc18d,0xb9bbf389,0x3bba0a35,0xbd2b17f4,0xbd72dfef,0x3d740881,0x3d53bd02,0x3e2f5b52,0x3e357991,0x3e48b34a,0x3e23a53c,0x3e2e76fd, +0x3ddc030b,0x3d9a995b,0xbdfbd0cd,0xbe254d7c,0xbe2916be,0xbdb0b220,0x3c84016b,0x3e396337,0x3e2136e7,0x3ce909a0,0x3d9c94ce,0xbdd743d7,0xbd8d1d52,0xbd1015e9,0xbd68f8b2,0x3b4f52dc,0x3ccd48ba,0x3d20d303,0x3d9f8736,0x3c384f86,0x3daaa46c,0x3d9bfbe5,0x3d853ffc,0x3d57b973,0x3b4cafe0, +0xbcb5c37c,0xbce56f34,0xbd635c7a,0xbd2696fc,0xbca2cb24,0x3ce265f2,0x3e2368eb,0x3e2ea59b,0x3e2b8612,0x3dc6f260,0x3cb50476,0xbd89bb02,0xbe29ddfb,0xbe5433df,0xbe4dfa8e,0xbe50e684,0xbe2c385a,0xbde8ff6f,0xbce96c10,0xbccec526,0xbd70401d,0xbe3a7f63,0xbdc00e69,0xbd5cecb0,0x3cbb7f04, +0x3d1a60a7,0x3c493471,0x3d694305,0x3d012b76,0x3cd0b36f,0x3ca7f647,0x3ce901aa,0x3d6f3e7d,0x3cac4a6d,0x3cd4639e,0x3cc6adec,0xbd0ada61,0xbd190fb5,0xbd89f951,0xbdac08f1,0x3bd0bf14,0x3cbc9c0b,0x3d8968da,0x3dc30043,0x3de5ebaf,0x3dcc9464,0x3d8e8bdc,0x3c8c3555,0xbd11117f,0xbdb87cde, +0xbde51b4d,0xbe16f360,0xbe233fd6,0xbe2f3916,0xbe1413d8,0xbe1ddd14,0xbe102a98,0xbde0b551,0xbdb4b8f2,0xbd96859b,0xbd406fbb,0xbc92e7b1,0x3b9cf674,0xbb20ae36,0x3ac8054d,0xb9cae897,0xbc7218e0,0xbd683c82,0x3b3b24e7,0xbd5203be,0x3a29f431,0xbd3b9d81,0xbcc756a1,0xbd3ead61,0xbbefc9c0, +0xbd7b6fb5,0xbc846130,0xbd1df722,0xbc69f8c4,0xbd0cda93,0xbcf2f069,0xbca247bc,0xbcc65c38,0xbc30ae59,0x3bdb0304,0xbd210b8b,0xbd909159,0xbded61cb,0xbddf4a1f,0xbe02c7bf,0xbe10dd50,0xbe0b3e1d,0xbe0c6b02,0xbe35b3b3,0xbdcb7d6c,0xbdfba029,0xbe1233d6,0xbe0e43b9,0xbe2672e3,0xbda78e27, +0xbdf36267,0xbddcacb9,0xbdd017ba,0xbdb83834,0xbdba355d,0xbda0500a,0xbdcf9745,0xbdf8dfe7,0xbd6f00ec,0xbdf3eb9f,0xbd1688d9,0xbe016298,0xbe0647f7,0xbe05f714,0xbe0c57a2,0xbe0a8048,0xbe0f398d,0xbe20161a,0xbe26405f,0xbe3f6f5c,0xbe46f084,0xbe414c69,0xbe2efa1a,0xbe27736f,0xbe26c53d, +0xbe15485e,0xbe118500,0xbe168934,0xbdeb5d18,0xbdf96290,0xbe176c1d,0xbdf9d0b4,0xbcb08932,0xbe0feb2c,0xbe07d202,0xbd329f46,0xbd0c5289,0xbd14ddfd,0xbd158008,0xbd220a7a,0xbd26a3da,0xbd2d53cc,0xbe102723,0xbe0e201b,0xbc199f43,0xbe063b03,0xbe1bb0f2,0xbdca95aa,0xbdc1e587,0xbdcb3e12, +0xbdcd9d40,0xbdd06da3,0xbdce6092,0xbdc4a337,0xbdbc68fb,0xbdb594cd,0xbdb01236,0xbdb736ec,0xbdcf6ead,0xbdda624c,0xbde2a041,0xbde59550,0xbdf074c4,0xbdfac0a2,0xbe436f96,0x3e039bf0,0x3dbea970,0x3da747b6,0x3e04fb56,0x3deb9ad4,0x3d2c4543,0x3de3db7b,0x3ddb394b,0x3d742104,0x3d5062d2, +0x3d36da86,0x3d29ff12,0x3d251ade,0x3d0de731,0x3d1e5a38,0x3ddbac58,0x3de72f2b,0x3cec50e7,0x3dcd327d,0x3ddb4c06,0x3d8aebb5,0x3d9e5828,0x3da508cc,0x3da387b8,0x3da62f12,0x3da36f75,0x3d9cac95,0x3d982cc3,0x3d95804d,0x3d906bf7,0x3d9d588c,0x3d9e518a,0x3db2bb09,0x3daf3b2b,0x3dbd7aff, +0x3dc916c9,0x3dc6feaf,0x3df03619,0x3e15d782,0x3e0ae754,0x3de5ef6d,0x3dc8e613,0x3dd675bb,0x3de75119,0x3db38074,0x3da71991,0x3de1305d,0x3dc73936,0x3ddd7a14,0x3dc3cdcb,0x3db79669,0x3d9b9956,0x3dd3e6bd,0x3dbfe8d7,0x3db64ab2,0x3de39509,0x3de82ff1,0x3dbeb96d,0x3dd821be,0x3dcd93d3, +0x3dc275cc,0x3db14a15,0x3db22051,0x3d9f2149,0x3d9550ad,0x3d8a56ce,0x3d9c120e,0x3d9e0494,0x3def397f,0x3debc051,0x3df9b870,0x3def22b7,0x3df6ba86,0x3e1f79b3,0x3e2aa802,0x3e2e3556,0x3e1ab76d,0x3e08bf35,0x3ddc1158,0x3dc40da8,0x3dbe7c7a,0x3db96fd1,0x3da434db,0x3decd80d,0x3dc20129, +0x3d98078c,0x3db95fa0,0x3daaf29c,0x3dac2dae,0x3dbf6b10,0x3da07047,0x3ddb4e0c,0x3db2527f,0x3db48fa1,0x3ddaf22e,0x3dda5046,0x3dd64d5e,0x3db80691,0x3d9ceb8d,0x3d5d68c2,0x3d395e18,0x3d14df28,0x3d5c6519,0x3dad865a,0x3e11d84b,0x3e0dbd9a,0x3e285284,0x3e334551,0x3e391ffb,0x3e1072a1, +0x3e3eb04d,0x3e61f866,0x3e2c94b2,0x3e076b9c,0x3db2fb8f,0x3d817ff8,0x3dd2b83c,0x3d86b1c1,0x3d8a2e05,0x3d8c67b1,0x3d7e907e,0x3d90c04a,0x3d3dff56,0x3d897b74,0x3d7e1d2e,0x3d8c6207,0x3d81dec2,0x3dd630f0,0x3dd0a1fe,0x3da6488c,0x3de28c10,0x3dcca2de,0x3dca0411,0x3da37a8b,0x3d49e6b5, +0x3c92acf2,0xbbd71990,0xbb6b1cce,0xbb4aeb27,0x3d5ee784,0x3e1fc9d9,0x3e176449,0x3e305d9b,0x3e09ad12,0x3e24db5d,0x3e5ba4dc,0x3e48ad98,0x3e62268f,0x3e364f66,0x3e1400bb,0x3dcb1f8f,0x3d9c1e5d,0x3d9dcdf0,0x3d5081bb,0x3d67b327,0x3d7f2a47,0x3d48d775,0x3d3aa8d8,0x3d258d0a,0x3d56ed77, +0x3d554283,0x3d752d25,0x3d2b3ee2,0x3dcc175b,0x3da850de,0x3da0aa55,0x3ddd9bed,0x3df47751,0x3deb8dbc,0x3da2632f,0x3d66a189,0x3bbf21b5,0xbc2c8e34,0xbd52e128,0xbb0c3e37,0x3d6faa9c,0x3e40a549,0x3e35f7e2,0x3e6aa33e,0x3e7b1741,0x3e7bc97d,0x3ecc8075,0x3f08a202,0x3ef0a385,0x3ea24aad, +0x3e8d6d1f,0x3e6c954f,0x3e53fad1,0x3e02d677,0x3df2f323,0x3d90c40b,0x3d8e532a,0x3d445648,0x3d345523,0x3ce6f116,0x3d273851,0x3d4375ee,0x3d93c835,0x3d3c4c43,0x3d79878d,0x3d8a39fa,0x3db4c08b,0x3df1c54f,0x3dc55623,0x3cae6012,0x3ba6429d,0xbdc39deb,0xbe1767c7,0xbe471dc2,0xbe86d0c6, +0xbbb14d81,0x3ddb4dfd,0x3e754268,0x3e8437ed,0x3ea6597a,0x3ec0b3cf,0x3ed493cd,0x3f1ac997,0x3ebe3a0b,0x3e44c444,0x3e5c3b64,0x3e0592a8,0x3e1ce1a7,0x3daf8755,0x3da6e9e6,0x3d990469,0x3d8e4bb0,0x3d95bbd4,0x3d884a3e,0x3d73f3ff,0x3d4d0658,0x3d810015,0x3d8859ff,0x3d8ced7f,0x3d7319a1, +0x3d75f76a,0x3df5a534,0x3df9fb40,0x3e1ee7e4,0x3e541453,0x3e77bc57,0x3e8abc09,0x3e846b5e,0x3e53f438,0x3e0d5a3f,0x3d4afd30,0x3e362f95,0x3e65070b,0x3eacd6a5,0x3e7ff6ba,0x3ea58fb9,0x3eea5d9d,0x3f1d3587,0x3f057756,0x3efa96a1,0x3eb2447d,0x3e7ad9a2,0x3e5cc4bf,0x3e16b0dd,0x3dca8c3f, +0x3da323fe,0x3d9fd668,0x3db1ea75,0x3dcf4054,0x3d5f2d21,0x3d3460f1,0x3ca3ba11,0x3d923108,0x3d9c3e70,0x3da7a472,0x3dd974a9,0x3e2641f9,0x3e2c9b40,0x3e4c421d,0x3e85bef3,0x3ea554dc,0x3ea87c14,0x3eab9e65,0x3eac40ca,0x3ea6b330,0x3e958d3e,0x3e83fd3f,0x3e55fc81,0x3e3e1676,0x3e807c7d, +0x3d01e5aa,0x3d49af4f,0x3d2156e4,0x3ecc12ab,0x3d173ffb,0x3ee94f1a,0x3eb1dff1,0x3e3fc077,0x3e5e91ef,0x3e07e94d,0x3df2dff8,0x3da9fa57,0x3db20df4,0x3d98509d,0x3de5e13f,0x3d8071f1,0x3d46746e,0x3d18d65b,0x3d7e72d1,0x3db2c9ba,0x3dae120d,0x3de8e65e,0x3e20a347,0x3e73a0c0,0x3e805398, +0x3ea685da,0x3eb8600d,0x3eb71383,0x3eb748e7,0x3ea8f032,0x3eb7521c,0x3ea3c3d8,0x3e946f20,0x3e44ceb6,0x3dbd4377,0x3d4f8317,0xbe4a2435,0xbe9803bb,0xbf09e4ca,0xbdee48c0,0xbebc89fd,0x3e465edf,0x3eabd567,0x3dc8af59,0x3e471809,0x3d6640b7,0x3dfc2906,0x3dbaf0fc,0x3dca6935,0x3d9e91c6, +0x3d9cc4de,0x3da68680,0x3dae4571,0x3d923c9e,0x3daabd1e,0x3d8fac93,0x3d92b746,0x3ddbe6d5,0x3e063248,0x3e3c6ea5,0x3e78a100,0x3e8d2627,0x3e91bb94,0x3ea23a33,0x3eaeea83,0x3eb77269,0x3ea7e5e1,0x3e8cff2b,0x3e0e297c,0x3dc33249,0xbc9716c9,0xbd18c567,0xbe839495,0xbed1542e,0xbf40069d, +0xbebeefd3,0xbec9a245,0x3d49d330,0x3ec855b5,0x3dc5bdfb,0x3df5f35f,0x3dd96f76,0x3df249fa,0x3d203f2f,0x3d8c0298,0x3d4d600f,0x3d04c3a9,0x3d8b4822,0x3d7a5380,0x3ce5b5e4,0x3cbbb23d,0x3c92f811,0x3d838913,0x3c29e06c,0x3d505b30,0x3d9e94ef,0x3e511b63,0x3e89b432,0x3ea56271,0x3e9d6361, +0x3e926c81,0x3e9195e5,0x3e800050,0x3e5a6377,0x3e13fd2c,0x3d9e3424,0xbc78998f,0xbdec44c8,0xbe8e45aa,0xbea86b34,0xbee6c8b8,0xbea4bd4d,0xbe4f778c,0xbdba91be,0x3db1b56f,0x3d79c74c,0x3d886fdd,0x3d83237f,0x3d2049ab,0x3da6327f,0x3cc4f94f,0x3c560b05,0x3b193dee,0x3d386733,0x3d4e379b, +0x3d0834f0,0x3d0e3fa6,0x3d0cc5b8,0x3c7d6228,0x3d404865,0xbc898498,0x3da3da8f,0x3df93b7e,0x3e196e80,0x3e72fa5c,0x3e765c5f,0x3e8ce1e4,0x3e8e1765,0x3e8da6b3,0x3e8f08c6,0x3e6bf1f2,0x3e314140,0x3d92e103,0xbd742fe9,0xbe265507,0xbe64863f,0xbe9176f6,0xbe64a1a8,0xbe36d389,0xbc4645eb, +0xbc5064cf,0xbc52be88,0xbc119f97,0xbca753d1,0x3cbf8b4d,0x3cfd7ed9,0x3bfac2b8,0x3b8777d7,0x3c0de697,0x3b9d88cb,0x3c467b55,0x3cce2298,0x3c9d8201,0x3c5ea804,0x3c0daedf,0x3d03d5ce,0x3d2229a9,0x3c8c5b06,0x3db393d1,0x3dc310c0,0x3e069aa4,0x3e28a2a2,0x3e3dd26c,0x3e57ddd4,0x3e4f5065, +0x3e43c4d0,0x3e369298,0x3dfe36ac,0x3d809688,0xbcc82d0e,0xbdb75538,0xbe0f3433,0xbe6f9cd5,0xbe1dcf86,0xbdf048af,0xbdfdcc2a,0xbdc4a365,0xbd8cb1c4,0xbd20a6ab,0xbc701540,0xbce103b0,0xbc73283b,0x3b26a5a5,0x3acd4a7c,0x3c5a0e32,0x3c99822a,0xbc253e5a,0x3c7d7087,0xbcaa70b2,0x3a44b649, +0xbb75f18c,0xbc386eca,0xbc9149ae,0x3c752ea9,0xbae9fd02,0x3c042b92,0x3c186e15,0x3ce13687,0x3d61ec34,0x3dafc545,0x3d831fad,0x3d3315d5,0x3d29d912,0xbb3c5990,0xbd0af12b,0xbd7cd6e5,0xbdb71b8f,0xbe019b5c,0xbe39948d,0xbe114685,0xbdd32d7f,0xbd97d26c,0xbdef3cd2,0xbdb7fba1,0xbdaa4089, +0xbdc39770,0xbd50ca13,0xbda45a8b,0xbd7f4366,0xbd906c5b,0xbd8e108c,0xbd791938,0xbd3da347,0xbd47e438,0xbd1706d2,0xbd38c771,0xbdb328c1,0xbd739979,0xbde96f24,0xbdc284d9,0xbdd25aa4,0xbde7a509,0xbe0012d4,0xbe0fcc66,0xbe236f7d,0xbe309683,0xbe397cc7,0xbe38b1c8,0xbe34cb94,0xbe3ea780, +0xbe30ac79,0xbe3a421d,0xbe2782cd,0xbe00427b,0xbdd55509,0xbddd27c6,0xbd936db7,0xbd8e4028,0xbd92148c,0xbdb8c25c,0xbe04f22c,0xbd2193a8,0xbd7f783b,0xbdf9cedc,0xbdfd709f,0xbdf028f9,0xbdee6c6a,0xbdf3c729,0xbdfdb3d3,0xbdfc4fb9,0xbd6cbaa5,0xbd210f7d,0xbe01709b,0xbd8ad77a,0xbd22ec64, +0xbd54fd48,0xbd6523e5,0xbd735733,0xbd76000b,0xbd793822,0xbd705ca3,0xbd6b153a,0xbd7821ef,0xbd73a9b5,0xbd87036b,0xbd86d07a,0xbd862b2a,0xbd8cb4ef,0xbd8b760a,0xbd910422,0xbd9a03ca,0xbd963c49,0xbdd52ad5,0x3d463d97,0x3d00945d,0x3c74b2e4,0x3b1d09d8,0x3d481b00,0x3dd70d7f,0x3bfe7c5c, +0x3d1149e4,0x3dc2a85b,0x3dce4d64,0x3dda3598,0x3dd0a023,0x3dcffd3a,0x3de24993,0x3dcb4de8,0x3d0f5ae1,0x3c47ffad,0x3dd8be21,0x3d4243f7,0x3c95699a,0x3cd37684,0x3ceccb06,0x3ce1ac36,0x3cf687e1,0x3d094beb,0x3d0f93f1,0x3d0a1356,0x3d084a0e,0x3d063a9d,0x3cecfa08,0x3cc393b5,0x3c8d9bdb, +0x3c27c782,0x3c02478d,0x3c1eb1d1,0x3cabc10b,0x3cb4e2b9,0x3cda937b,0x3b3896ab,0x3e014a53,0x3d630dda,0x3dc21522,0x3d552980,0x3d347d79,0x3d892b25,0x3d183c50,0x3d3fa9be,0x3d78db82,0x3d3348ea,0x3d36bc29,0x3d6be80c,0x3da66d82,0x3d3c76e8,0x3d6d28a6,0x3d5492aa,0x3d59d1a9,0x3c96f4a6, +0x3d16d4ed,0x3d1285ab,0x3d3a2664,0x3d3aa920,0x3d36d8d7,0x3d400f93,0x3d4727be,0x3d257814,0x3cdf597f,0x3cdd0a7e,0x3c85ae98,0x3b5394b2,0xbb9177e9,0x3ba9f09b,0x3d14c917,0x3ccad9af,0x3c524651,0x3caf14f8,0x3d94b4a5,0x3d05aed3,0x3d92fff3,0x3d4a568a,0x3d710e82,0x3cfadee9,0x3d600684, +0x3d0ab5f5,0x3d3f387e,0x3cff51c1,0x3d7f96af,0x3ced1d10,0x3d4d54da,0x3d32120f,0x3d3a34cc,0x3d6bbb7a,0x3d460a8f,0x3d1825e1,0x3d0af394,0x3d2ce795,0x3d626973,0x3d86f05c,0x3d93ec22,0x3d83ae4f,0x3d6f5e3f,0x3d4c93f5,0x3d03b218,0x3c3a6b95,0xbc5b16fe,0xbd3ca9f6,0xbd86731b,0xbd7d33c8, +0x393679c7,0xbb1547d8,0xbd1da0ca,0xbc7a7795,0x3dea4eb5,0x3d6c03ab,0x3dcd8641,0x3d9d43c7,0x3d7fce77,0x3d00fada,0x3cb127a8,0x3d26c4f0,0x3d85490a,0x3d5f2696,0x3d45ae52,0x3d25eb57,0x3d566b14,0x3d650cd7,0x3d67c0e9,0x3d558f01,0x3d48cdec,0x3d07b55f,0x3d1eb8b4,0x3d314c23,0x3d885855, +0x3d9bf656,0x3d9b5491,0x3d75a792,0x3d5c0557,0x3ce25518,0xbb7d4f72,0x3ba1b10d,0xbccd3cca,0xbd659caf,0xbdb05065,0xbd8467fa,0x3c2147ec,0xbc861918,0xbd5c6e45,0x3c2002ce,0x3dde69e3,0x3d67b998,0x3d56d8a7,0x3d68114c,0x3d817293,0x3d3530f6,0x3d3e4253,0x3cf0b0d9,0x3d52d3eb,0x3d543101, +0x3d541588,0x3d241bf9,0x3d56fa09,0x3d579e24,0x3d50f3e9,0x3d9a7a8f,0x3d697d7b,0x3d0e6577,0x3d29b879,0x3d46005b,0x3d8e5dd7,0x3db1e30a,0x3dce20f2,0x3d96fc4c,0x3d850f8d,0x3d22e7a1,0x3cbec87b,0xbccb76ac,0xbd6c0bc8,0xbde46dd8,0xbe25f506,0xbe2d5a5d,0xbd448456,0xbd9ff72e,0xbe112df3, +0xbe96a050,0x3e24267b,0x3e085ab9,0x3de26fb4,0x3dff94de,0x3c956eb5,0x3deb19fa,0x3d639e02,0x3d809403,0x3d9b83ef,0x3d5043a3,0x3d4d249c,0x3cee3e64,0x3d499d8c,0x3d8766bb,0x3d426f18,0x3da3a0ea,0x3d5bef6c,0x3da03f90,0x3de96d92,0x3e02c5d3,0x3e531ea7,0x3e67387e,0x3e505ce1,0x3e6b6765, +0x3e1ce51c,0x3dfaa7d1,0x3dac0bed,0x3cd16c50,0xbe18ef57,0xbec85494,0xbedc272d,0xbecef0fd,0xbe844282,0xbe3ae5d1,0xbf00b4f2,0x3da82607,0x3f076ccb,0xbcb60ea1,0x3e34b606,0x3ca3ad31,0x3db7679f,0x3d848a8b,0x3d47e580,0x3d818f01,0x3d574aa9,0x3d902a22,0x3d89d579,0x3d3218bf,0x3d50167a, +0x3d467803,0x3d84f394,0x3d97556c,0x3dcf898a,0x3da7ce25,0x3d4e1943,0x3d86d304,0x3dae57ec,0x3dd25308,0x3df0d137,0x3e16a447,0x3e27c0a2,0x3e280c98,0x3e0a1b0a,0x3d42a14f,0xbd8d1385,0xbe86adfd,0xbecf0cb6,0xbefa82fa,0xbf14479a,0xbee21f57,0xbf620d3f,0xbe1a5c39,0xbd8ec8b6,0xbc43a62e, +0x3dba46a4,0x3d16c973,0x3da6d87a,0x3d567a21,0x3d9a084c,0x3d7f50fd,0x3dd93cd1,0x3d264e85,0x3d05a356,0x3d1d2d80,0x3d4db980,0x3d90298c,0x3dc05381,0x3ddf3672,0x3dde0596,0x3d69e4b7,0x3cf67a96,0x3cb9d888,0x3cc7cbcc,0x3cc9cce2,0x3b8bb8e1,0x3bea6e21,0xbc28845d,0x3be6f429,0x3c3de727, +0xbd9180ac,0xbe639fc5,0xbef9849c,0xbf1b9a79,0xbf432e91,0xbf790ddf,0xbf5bc3c4,0xbf85a533,0xbf393a05,0x3e28da2a,0xbe9aec46,0x3d881831,0x3d2f09d9,0x3d9b71fd,0x3d2ff0c5,0x3d50edb7,0x3d47bd9b,0x3d4f1631,0x3d54461b,0x3d30ce96,0x3cf48c68,0x3d87603a,0x3d85778a,0x3d948682,0x3d9287dc, +0x3e059492,0x3dacbde1,0x3a14d76c,0xb8002f28,0xbcff5a11,0xbd84f444,0xbdffa228,0xbe547621,0xbe8fedf2,0xbea4bb8d,0xbea8e1b1,0xbead525d,0xbedea57c,0xbf123583,0xbf2700c3,0xbf3f2769,0xbf56ef58,0xbf7eac17,0xbf5a8335,0xbf3d5d00,0xbec64f66,0xbe2eaf21,0xbd50fa70,0xbdb7c340,0xbb167a3c, +0x3cee4cdf,0x3caf2a4b,0x3d214c70,0xbcd863b9,0x3d7c1718,0x3dc19b1c,0x3d1687a9,0x3d6b8dec,0x3d6ceac5,0x3d67f57f,0x3d1e74f5,0x3da246c6,0x3d24250b,0x3d2fcf73,0x3c9b9bd5,0xbd5dcd08,0xbd3620c6,0xbe11407a,0xbe888893,0xbebbace5,0xbede3698,0xbee9cb2e,0xbeeba9f8,0xbef6336d,0xbeec3166, +0xbf1ddead,0xbf18623f,0xbf251f3e,0xbf422890,0xbf1e590e,0xbf0f56a2,0xbe964955,0xbe9d942a,0xbe2c76ac,0xbdd3cf14,0xbdf0a116,0xbd5708fa,0x3bfe0144,0x3ca716a2,0x3c516f15,0x3cfc2b9a,0x3d086690,0x3cfc9cd4,0x3d3ed766,0x3d3fda41,0x3d88d5b7,0x3d88eaeb,0x3d900db4,0x3d99c49d,0x3cffa0f8, +0x3cef71c9,0xbd7a8526,0xbe239b18,0xbe758ec1,0xbe82659c,0xbeb379af,0xbeacd408,0xbeaf0982,0xbe155aad,0xbdfb000e,0xbe2baacb,0xbe6ac9f0,0xbebfe89e,0xbf0312e3,0xbf0adca9,0xbeb54b8c,0xbec49e16,0xbe62094e,0xbdfad0d7,0xbda34719,0xbbc4fe6b,0xbc68e57c,0x3c8ba9b4,0x3b59b037,0x3c8fd888, +0xbb4e15a4,0x3cb6b013,0x3c6575e5,0x3ca48001,0x3b27b157,0x3b014135,0x3c876fd8,0x3b7f6339,0x3d6eda2b,0x3ce12bb4,0x3d0a722e,0x3bd4c1dc,0xbd8f7e7f,0xbdd22cc0,0xbe040720,0xbde1dd83,0xbdfc4a7c,0xbdde0078,0xbd891109,0xbd85a257,0xbddd031e,0xbdac8da0,0xbe267697,0xbe728ff1,0xbea632f4, +0xbeb41d83,0xbe5b1d68,0xbe28ae7e,0xbe576195,0xbe0db490,0xbe27c0cf,0xbde0942a,0xbd69ef76,0xbce3037f,0xbcd3aaa6,0xbc3ede28,0x3b8643d6,0xbbdea5ae,0x3bc6e5ba,0xbba0d5f1,0x3b63b09d,0xbb3e7ba3,0x3bd1c1f0,0xbc1d7143,0xbc7d54b6,0x3c907339,0xbde48fa3,0xbdc3b82e,0xbe0fcd9a,0xbe1ebfee, +0xbe484771,0xbe4bd368,0xbe5c6d88,0xbe4e1cab,0xbe3559e4,0xbe26eda3,0xbe29bbaa,0xbe108f69,0xbe1c18d3,0xbe27935a,0xbe4527d7,0xbe42badf,0xbdd2085d,0xbdf98c0e,0xbdcfb5ed,0xbdd16ba7,0xbdbc281b,0xbd84b0b4,0xbd7a5eb7,0xbced2cc9,0xbcba8a53,0xbd0236bd,0xbcda16d5,0xbd397ff1,0xbb631eaf, +0xbd0df011,0xbbcb7391,0xbcd5cf59,0xbd1c194f,0xbd2ac35b,0xbcbd8289,0xbdc9438f,0xbe00eed7,0xbde9271c,0xbe126b59,0xbe136755,0xbe24ff06,0xbe2f56c6,0xbe404914,0xbe6154b5,0xbe82628b,0xbe5fd5b6,0xbe56a328,0xbe42a14f,0xbe39424e,0xbe2005cb,0xbe0dd43f,0xbdfd3af5,0xbd7397bf,0xbd362e2c, +0xbddf4292,0xbd67324b,0xbd84ff0d,0xbd7bdede,0xbd2a9245,0xbd0bb87c,0xbd198c97,0xbd4dc11d,0xbd4b5439,0xbd51fdfa,0xbd84248d,0xbd60463d,0xbda0b0e0,0xbdae334b,0xbd854f1b,0xbdb99fb1,0xbd910de2,0xbd8a7749,0xbd30f028,0xbd9032cc,0xbd77b4e5,0xbd8aa05a,0xbd730480,0xbd0e1fd9,0xbd73b47f, +0xbcba1cdf,0xbcbf342b,0xbd2f5ee5,0xbd2f99e1,0xbd73092f,0xbd79f50c,0xbd5890f0,0xbd803dd5,0xbd8ad8a0,0xbd26bf0a,0xbd0d1a36,0xbda55c20,0xbda740a2,0xbd7f96bd,0xbd851887,0xbd99e82f,0xbd7f3299,0xbd73a92f,0xbd571cce,0xbd4c3a83,0xbd401543,0xbd2d8758,0xbd3043b3,0xbd96d41b,0xbd91491d, +0xbd5612a8,0xbda12db8,0xbdafb028,0xbd4ea007,0xbd6f799f,0xbd7be9b9,0xbd81003e,0xbd8cdefa,0xbd93c633,0xbd98d8f2,0xbdac4631,0xbda62bd9,0xbdb3d1ed,0xbdae9a3b,0xbd90e4a3,0xbd935804,0xbd83f983,0xbd5f2b23,0xbd4af141,0xbd355450,0xbd87d6a5,0x3e14a920,0x3d9e7ff9,0x3db72df8,0x3db51f4d, +0x3d3a5670,0x3b42d820,0x3dbec1b1,0x3d6a7a3e,0xbae36862,0xbbe8feeb,0xbc295d38,0xb9a46c4b,0xbb89db6a,0xbc88ccf9,0xbb20dc2a,0x3d64ab1d,0x3dc1c6a6,0xbbce715d,0x3d402cc2,0x3db4e9ff,0x3dcee966,0x3dc0a884,0x3dca8f37,0x3dcbcd1a,0x3dd7c2fb,0x3ddd71bf,0x3ddccc5e,0x3de041a5,0x3de846a9, +0x3ded7697,0x3df6c2af,0x3dea2de3,0x3de54384,0x3dcd907c,0x3db5215a,0x3d95a049,0x3d9c6622,0x3da730ed,0x3dd3b64c,0x3d0d0726,0x3d948d4b,0x3d7bfdab,0x3da4bfff,0x3dab780f,0x3d6b3078,0x3da4d5f2,0x3d9d720a,0x3d959987,0x3da7cb93,0x3dc15d6c,0x3d929f94,0x3cfc297c,0x3dc0f8cf,0x3d970e3e, +0x3db4780a,0x3d900fdd,0x3df7f3b2,0x3de7bdec,0x3df6fedb,0x3e05b9d1,0x3e060e97,0x3e0aeab7,0x3e243991,0x3e2e3b01,0x3e3cc6dc,0x3e423429,0x3e57c398,0x3e436dd3,0x3e2aab42,0x3e0f2559,0x3df9fd9a,0x3dcc4c8e,0x3dbfcd4e,0x3c9a0711,0x3d26e811,0x3d0f60ee,0x3d86ceaa,0x3d579372,0x3d851bee, +0x3d46d330,0x3d97c072,0x3d4222ea,0x3db40f9d,0x3d8e35c5,0x3de9402a,0x3d8040fe,0x3da91812,0x3d929326,0x3dab29af,0x3dbd4029,0x3d9d7e66,0x3dade02a,0x3dc5fa8f,0x3df0e46a,0x3dfb1e9a,0x3e151b2b,0x3e1ef553,0x3e2fbd71,0x3e45f2a6,0x3e51aa35,0x3e6b5004,0x3e85b19c,0x3e8bacfc,0x3e843430, +0x3e543795,0x3e1da66c,0x3daef791,0x3c264e9a,0x3ca59abd,0xb94e11a5,0x3ccd7aeb,0xbb3b2e64,0x3c0c76d9,0x3d685531,0x3d416dd1,0x3d441ef8,0x3d018264,0x3d29a958,0x3d33e351,0x3d88590e,0x3d8d1d09,0x3d878838,0x3d881f1b,0x3d6daf5a,0x3d8f6888,0x3da798cf,0x3daf6f06,0x3da19112,0x3da8bd81, +0x3df3e6ee,0x3de8a2aa,0x3e22b9e8,0x3e2d58ee,0x3e4d94fd,0x3e74d64b,0x3e86bccc,0x3e9ad944,0x3eaba4d4,0x3ec09e6f,0x3eafcb91,0x3e81af7d,0x3e3c8208,0x3dcdc832,0x3d3fd282,0x3c88d4ea,0xbdbcd791,0xbd3e61c6,0xbcd8ecbd,0xbb34e21f,0x3c9db0d3,0x3d054e21,0x3d01c0c4,0x3c628183,0x3ccf7e24, +0x3d00bd41,0x3d80fee6,0x3d5b8b4e,0x3d688218,0x3d34f685,0x3d722e33,0x3d8912ba,0x3d95c066,0x3dab4906,0x3d8de541,0x3dbc9ea3,0x3ddeb828,0x3e032739,0x3e2a702c,0x3e363a33,0x3e644215,0x3e7c2924,0x3e8f228b,0x3ea55a10,0x3ec8906c,0x3edd0ad5,0x3ece6141,0x3e94bdca,0x3e4db581,0x3d684595, +0xbdcaff76,0xbdc8b7c1,0xbe970c0b,0xbe9b4090,0xbe0f9511,0xbd4c1e61,0xbd604a91,0xbd0b81d0,0xbc8d3d41,0x3d169050,0x3d071a5a,0x3d58577b,0x3d7c19b9,0x3d83f687,0x3d83e858,0x3d3be8eb,0x3d8f7e2c,0x3d9b37f3,0x3dacd1bc,0x3de1466b,0x3e0bcd31,0x3e0eb085,0x3e080eab,0x3e16d36c,0x3e63e64b, +0x3ea21f8c,0x3ebe5cf7,0x3ee9ac9c,0x3f0db8ed,0x3f14ab33,0x3f1ba1ce,0x3ec55714,0x3e7030cc,0x3d8a85c7,0xbdb8c198,0xbe5f5207,0xbe9998af,0xbea784f3,0xbef5a924,0xbeaec7ed,0xbe3f4b2b,0xbe0a90dc,0xbc8cf4e2,0xbc037d2e,0x3d1a8632,0x3d431f13,0x3d597e3c,0x3d73dd16,0x3d8c44f4,0x3d856431, +0x3d77b3b3,0x3d26b6b3,0x3d6dd107,0x3d96dff9,0x3d9f1692,0x3dd4d2fb,0x3db3c38b,0x3dcd1e5b,0x3e0d0411,0x3e230fa9,0x3e4c7c3f,0x3e5f5664,0x3e6caeea,0x3e675b4c,0x3e65d96e,0x3e5e83a6,0x3e93da0c,0x3dc53286,0x3cbf7b67,0xbdef37e3,0xbcd7350f,0xbe01e08a,0xbebab68b,0xbef721bb,0xbe56d5fa, +0xbef91030,0xbeaaaa69,0xbe614069,0xbe3f91c9,0xbd99d711,0xbcbad996,0x3c9eabec,0x3cf8523f,0x3d2079ef,0x3dc574e6,0x3d637213,0x3d554cac,0x3d6293c5,0x3d88e642,0x3d94523b,0x3daa9efe,0x3db6369f,0x3db3fb2e,0x3deec1e6,0x3e1e547b,0x3e132a64,0x3e0c6c9f,0x3e1b594e,0x3e16deef,0x3e4d0c54, +0x3dd0567e,0x3d03631f,0xbdb076e8,0xbe3a82d1,0xbe8653c1,0xbeace80a,0xbc1b35f3,0x3dcf01f8,0x3ebfd612,0xbd4b5931,0x3ef3f9b7,0xbe74c875,0xbf152b2a,0xbd88ff0d,0xbe756dec,0xbdc0fbeb,0xbd72ac2a,0x3c32a786,0x3c9261d6,0x3d22441e,0x3d34f0dd,0x3d7b28d5,0x3d65985a,0x3d532862,0x3d8729c1, +0x3d88dba6,0x3d9d730d,0x3d914c7b,0x3d73d9aa,0x3d8ed31b,0x3ddff118,0x3d9cf582,0x3dae58d8,0x3dc6e54c,0x3de75a73,0x3e1eb386,0x3db8d5d5,0x3d52593a,0xbdc625c9,0xbe2fee19,0xbe58f48d,0xbe1f722f,0x3e18b951,0x3ebcd6f4,0x3f59f023,0x3f0e3171,0x3f4a9b8e,0x3e01d459,0xbe85315c,0xbd9db345, +0xbe2987c4,0x3d786712,0xbd4deb5d,0xbcad36e6,0x3c99efb5,0x3d375bbe,0xbc9445d8,0x3d969107,0x3d9c1d8e,0x3d20765a,0x3d3ec607,0x3d49b008,0x3d421bd9,0x3d76c8fd,0x3d4c9a7a,0x3db52b96,0x3d858aac,0x3d87a184,0x3dae5a0b,0x3d9c3338,0x3d88988d,0x3d72772e,0x3d7a54f4,0x3d69eca2,0x3dc876ea, +0x3ddb4f7c,0x3e10a7e9,0x3dc4eed7,0x3e8d7edd,0x3ebb5d9b,0x3f24ec70,0x3f19f12b,0x3f2961ea,0x3e4ed395,0xbecfa3ea,0x3d9a1c5f,0xbda6f7fe,0xbd6061a2,0xbcbb924a,0x3da88d51,0xbc582d7a,0x3c831393,0x3c75d43b,0x3d16b657,0x3d0bdbf7,0x3d77994e,0x3d766dec,0x3d6b25ac,0x3d119a7c,0x3d98ec35, +0x3dacdcbe,0x3d8f591f,0x3d8ccebc,0x3c4f3376,0xbd6450a9,0xbb58633f,0x3d51e9e3,0x3dc5f9f7,0x3e2f106f,0x3e42d555,0x3e5908e5,0x3dd264d6,0x3d9176a9,0x3e211639,0x3e5fd633,0x3e985608,0x3f04446d,0x3ed61523,0x3ea0aba8,0x3e9a5b84,0xbdbf43d2,0xbd8ba6c6,0xbd5316ed,0xbda3510d,0x3bdc137e, +0xbcfd0cbc,0x3d2bc87a,0x3c8b1aba,0x3d4e8f9e,0x3c8f4158,0x3d037b28,0x3d12f089,0x3cc340a5,0x3d1aff8c,0x3d9bb9c4,0x3d688360,0x3cc7860f,0x3d6f3f97,0x3d37eddf,0x3b8945aa,0xbd53ee91,0xbc8daa43,0xbc475379,0x3cb8ee65,0x3c2444b5,0xbd0f907a,0xbd39003b,0xbd20d1b2,0x3ce80cf0,0x3dadff4c, +0x3de05f59,0x3e0d5328,0x3e697585,0x3e7ee4ad,0x3e81d012,0xbddb6554,0x3d233f32,0x3b6f638f,0x3cb5b8ba,0x3dc20006,0xbc26b724,0x3c078e59,0xb96b69c3,0x3cdc3865,0xbae7e4d0,0x3c6ecd9b,0xbcc50713,0x3cb3333c,0xbbef29f8,0xbc0fc169,0xbd0c9210,0xbd21b0b1,0xbc6d21e9,0xbd67752f,0xbc68e182, +0xbd821a3c,0xbd98cec0,0xbda22f78,0xbd97e40e,0xbdac1b16,0xbd9d1255,0xbd7f1503,0xbd82c75b,0xbd3c8405,0xbc1be16a,0x3d0d9d61,0x3d9e5719,0x3dce6dbc,0x3e372896,0x3dbb8101,0x3dec2213,0x3e121581,0xbd843bc2,0x3d536e3d,0xbcc89c81,0xbd7a1041,0xbc4be0ad,0x3d09ba16,0x3befe085,0x3d1f659f, +0xbc6bdcc2,0x3dbb6f52,0x3c116543,0x3d3c22bc,0xbd3763af,0xbc198d2a,0xbcf2296b,0xbce0d217,0xbdfa11cb,0xbcf7aef3,0xbbfd2830,0xbd30dcbd,0xbd62ad38,0xbda974f1,0xbde1b555,0xbe094f2b,0xbd6b10a8,0xbc4251d7,0x3d387fac,0x3d8b6b6e,0x3db4c76e,0x3dcb262a,0x3df8280a,0x3e0bf316,0x3e2e5650, +0x3e040cd9,0x3e07d927,0x3e20bf74,0xbd533ab2,0x3de2bf9c,0x3ddccb5a,0x3dc7961f,0x3e0679c8,0x3caa01b4,0x3dd36f59,0x3d13ea8a,0x3cecf3ca,0x3c182907,0x3d801bec,0x3d2e3650,0x3d82545b,0x3d599ddd,0xbcd50d1b,0x3d965706,0xbd6f8398,0x3dd50373,0x3dbe5f6f,0x3db99ecc,0x3dcd869e,0x3dd9e05e, +0x3df8cea3,0x3e02f508,0x3e031e97,0x3e064c76,0x3e02cd75,0x3e184ac7,0x3e242857,0x3e41039d,0x3e340439,0x3e1121f7,0x3e09bffe,0x3e1a037c,0x3df11e12,0x3e15b190,0x3d9cae18,0xbd1a25d8,0xbdf09d45,0x3d9bb92e,0x3aab0b4e,0xbdd7af67,0xbe003bcd,0xbddca1bb,0xbdbf6ebe,0xbdd4f389,0xbe053fe1, +0xbe09830f,0x3c21f5c5,0x3dbf602c,0xbded9171,0xbca2e107,0x3d87cb91,0x3df904c4,0x3dcbac82,0x3dd1c480,0x3dc9c513,0x3dbe1e0f,0x3db21d07,0x3dad2148,0x3dbd1ad1,0x3dd7930b,0x3df0702b,0x3dfda8fe,0x3dfb447a,0x3e0435f2,0x3e02b6d0,0x3e0275af,0x3e04c44c,0x3e009fa9,0x3e2b80c3,0xbd46e28e, +0xbd732f6c,0xbdc9b9b4,0xbbd5dafc,0x3db9ba5f,0x3e0bbf9b,0xbc536bcd,0x3d95ce35,0x3e1f1c3a,0x3e237a6b,0x3e2522e7,0x3e14807d,0x3e18eeea,0x3e31e38d,0x3e1890f2,0x3da5502e,0x3c43c1f5,0x3e1d141b,0x3dc60327,0x3cb91a0f,0xbd93c7b7,0xbd3a869e,0xbd4d31ae,0xbd4be5e8,0xbd54a60e,0xbd55c72b, +0xbd535f65,0xbd531474,0xbd598bd7,0xbd536ac3,0xbd5c594e,0xbd4f7f27,0xbd4a37ca,0xbd4dc2a6,0xbd4fcebc,0xbd5db040,0xbd7496f3,0xbdcd748a,0xbdbcc0d3,0x3e055dbb,0xbbfc28d3,0x3d9a4454,0x3c0749df,0x3d019d6f,0x3d5b272a,0x3bb1d75b,0x3d73f598,0x3d7e164d,0x3d7e079b,0x3ca65a03,0x3d688962, +0x3e00a583,0x3c8cab58,0x3d8f41cb,0x3d04026c,0x3db58de9,0xbd2fece9,0xbd6589d2,0xbd5cb071,0xbd724b03,0xbd6289fb,0xbd632bde,0xbd7bde2b,0xbd660de2,0xbd4bd9c8,0xbd25991d,0xbd59479d,0xbd56afbc,0xbd6e6e7e,0xbd8e4779,0xbdb2ed41,0xbdd9c39a,0xbdd686e6,0xbe12d384,0xbdea82b2,0x3c7bd935, +0xbd5dbd49,0x3cd34ccb,0x3bd4c270,0x3d4f42b7,0x3bc47fac,0x3d8ff4cb,0xbbf0458b,0x3dc77912,0xbce840a2,0x3d796048,0x3cd36be6,0x3d415325,0x3c8b9b09,0x3ccd56a5,0x3d668c28,0x3d3b1cc0,0xbba669cb,0xbd94f0e9,0xbd3d93ca,0xbd8491a5,0xbd6dfe2e,0xbd7bd0e3,0xbd74cc89,0xbd4e163f,0xbd53879d, +0xbd482ed0,0xbd7ae259,0xbd868a14,0xbd656ae8,0xbd8c3c7b,0xbd990eb8,0xbdcfc5af,0xbdf0f1c8,0xbe2cedc7,0xbdda6df6,0x3cd267ce,0x3ba46ae1,0xbb08bef8,0x3bc4b19c,0x3ce9d348,0x3ce4f952,0x3d3ac6ba,0x3d27f476,0x3d74f37e,0x3d17b873,0x3d8442c0,0x3c0d7e7c,0x3d6303cc,0x3ce80352,0x3d0a41eb, +0x3d452548,0x3d5e0225,0x3cdf27df,0xbd8280cf,0xbd3d2d6e,0xbd839603,0xbd6e4b5b,0xbd72440d,0xbd587498,0xbd04a1b0,0xbc244fc2,0x3add1869,0xbd133e25,0xbd5fe210,0xbd77d40e,0xbdb431bd,0xbdff904e,0xbe3bb957,0xbe2777a6,0xbe26997a,0xbe32f9c5,0xbd3aea4c,0xbd374515,0xbc863781,0xbceae9f9, +0xbc363753,0x3d0aa3bb,0x3d16c484,0x3d406103,0x3d192d70,0x3d477e37,0x3d2f2da5,0x3d29d818,0x3d04683a,0x3d1d1f21,0x3d78bfc6,0x3b18b043,0x3dccbb13,0x3beb855b,0xbd3f8e69,0xbd414d7e,0xbd6ee556,0xbd5bc901,0xbd4e2346,0xbd2fca80,0xbccfc3b9,0xbcd2871c,0xbd2c59f7,0xbd727960,0xbd948d52, +0xbd666125,0xbd906f50,0xbd992b50,0xbdf1f916,0xbe0974cd,0xbe1b94cd,0xbd4981c2,0xbe51f8f6,0xbd94cf2b,0xbd5e1705,0x3caec882,0x3cd2e773,0x3b2e243c,0x3c7e3ca1,0x3cf0292b,0x3d2e3f00,0x3d8240d8,0x3d55a19e,0x3d1bd509,0x3d5cc496,0x3cf89c5f,0x3db6e75a,0x3ce59386,0x3d5b46f0,0xbc89b6b4, +0xbd6c5392,0xbd4e65b2,0xbdc929a8,0xbe074726,0xbe0c48fc,0xbd832ec5,0xbd950f90,0xbd917c65,0xbdbe3933,0xbe01ad2a,0xbd96a273,0xbbfd7c18,0x3c9bc7ea,0xbcacf48c,0xbdbf5538,0xbe466d03,0x3e80897c,0xbe3a1849,0xbec147d8,0xbdc9d0ee,0xbdf018ac,0xbd529de4,0xbd29b5d6,0x3d1e546d,0x3cc4d7c3, +0x3d462aff,0x3d8bed0a,0x3d447a32,0x3d48c269,0x3ce9eb11,0x3d500488,0x3d132029,0x3d4750b3,0x3d35529e,0x3de4ec6c,0x3d711349,0xbcb6334b,0x3b6a6581,0xbd508cef,0xbc865f8b,0xbd06a16d,0xbd50a6bc,0xbdbbeb2f,0xbe1d7d14,0xbe889027,0xbe8a6069,0xbe845603,0xbe413f35,0xbdb0ae1b,0x3d8f1e36, +0x3ea47df9,0x3e89404b,0x3f0a8f2c,0x3de7966f,0xbca42603,0xbc77cee8,0xbd840f79,0xbc6c6e15,0xbcf98c57,0x3b6c6fcf,0x3beab4fb,0x3cb7fd63,0x3d68ad2e,0x3d637219,0x3d807b74,0x3d2f2492,0x3d8ee28d,0x3d675b66,0x3d876a00,0x3d47b6b9,0x3d5a56ef,0xbc36e503,0xbd0fc9dd,0xbc8f955b,0xbd32a677, +0xbe1052cd,0xbe563d56,0xbe7c4bfa,0xbe63701e,0xbe590fe3,0xbe45a675,0xbe1b03bd,0xbe28bc98,0xbe070bde,0xbe1c03e1,0xbd6d9144,0x3def3e2f,0x3ec26bb6,0x3e83c98d,0x3f0d2008,0x3db357f4,0x3e20f834,0x3ce7c8e4,0x3baa71bb,0x3ad4290c,0x3b7cf483,0x3ce308f0,0x3d027f45,0x3d55c6df,0x3d6e9c16, +0x3d902669,0x3d03d64c,0x3cf06cfd,0x3d2166f2,0x3d36bf5d,0x3c7c6761,0x3d91567e,0x3d88c6bb,0xbd8685cb,0xbcd8ced7,0xbc85347e,0xbde62856,0xbe0e0548,0xbe1e33e1,0xbd862a0c,0x3adb05cb,0x3cbad44d,0x3d249f19,0x3c3c9653,0x3d8f04aa,0xbe1d7d5d,0xbe67627c,0xbecc9848,0x3d561124,0xbe21d605, +0x3ecfbe3a,0x3ebc811e,0x3db1afe0,0x3dcc63e1,0x3c8155fe,0x3d449052,0x3d096f32,0x3d90bbe7,0x3d9197b5,0x3d642201,0x3d8a9393,0x3d493aa6,0xbc6a781d,0x3c7fe830,0x3cc2e756,0x3cc9d679,0x3c2f8bc1,0x3d52bd33,0xbdbdb593,0xbdb67324,0xbd77f9c5,0xbd0f4416,0x3af06191,0x3d9de59b,0x3e002f65, +0x3e59371e,0x3e6895df,0x3e24e69f,0x3e3420cc,0x3e23b48b,0x3e3c9ec5,0xbb16e21e,0xbe449b96,0xbf102813,0xbe2df977,0xbe293a09,0x3e6aec17,0x3f030884,0x3e35f2e2,0x3e28ec80,0x3dcd9ca5,0x3df67370,0x3d6e35b9,0x3d26cf2e,0x3caf44fb,0x3d54a910,0x3d29ce9f,0x3d45fade,0x3d1334f8,0x3d453a5b, +0x3d00ce72,0xbc155d68,0x3c837620,0x3ce5bede,0x3d3cfe5c,0xbdb7bcf4,0xbc32e638,0x3cf0370a,0x3e02d909,0x3e431d8f,0x3e3bbdde,0x3e8801b5,0x3e73447d,0x3e5455b6,0x3dd52487,0x3c8ecc28,0xbcefb4ea,0xbe0528df,0xbe034f20,0xbe6a6f79,0xbddbd0ca,0xbc0dc12c,0x3d7996b0,0x3e612481,0x3e0a50f1, +0x3dd443da,0x3dc4cc8e,0x3d80874b,0x3d36d1b0,0x3ccb7050,0x3cc4446c,0x3d0350e4,0x3c99b71b,0x3cf7aca9,0x3d08a83b,0x3d39280b,0x3d28612d,0x3c7b70c6,0x3cb387b1,0x3d6fe9f8,0xbd0ffc08,0xbd3f706a,0xbc88f6c0,0xbc8871f7,0x3b3c56ed,0x3cc316b2,0x3d8e3720,0x3df5563e,0x3e218a36,0x3e15b0d4, +0x3dfed1fd,0x3d933347,0xbd3f7d56,0xbd4e4763,0xbd212110,0xbc9ef648,0x3b9bd19f,0xbba561e2,0x3e4f0062,0x3e1a4a97,0x3de68fcc,0x3de6d3c5,0x3d21f0a5,0x3d909af8,0x3ceedc55,0x3d3e0cff,0x3ce5bbf4,0x3d332205,0x3d2fb6ac,0x3d2858ae,0x3d81144d,0x3d200d3b,0x3d40aaaa,0x3d888d0e,0x3d5e12d4, +0x3d4ba634,0x3d48cc63,0x3dc55c09,0x3d9bf14a,0x3dd6f7ba,0x3dc25198,0x3dfd0f99,0x3e16950f,0x3e2227f5,0x3e27d616,0x3e20c1bd,0x3e02f206,0x3db586f7,0x3cc9e7be,0x3c6a5328,0x3cd9fb80,0x3cb4b486,0x3da11da4,0x3d53a2d2,0x3d141eac,0x3df23b6a,0x3da8471e,0x3df0a08f,0x3ddf7d79,0x3da08668, +0x3d1c4bc2,0x3d5b31c3,0x3d4be45f,0x3db04f3f,0x3d67bcbf,0x3d47d0b0,0x3d9dc685,0x3d8606b3,0x3d8ffc80,0x3d8e234a,0x3da7669b,0x3d09ec49,0x3dcd4262,0x3e01de7b,0x3dec579d,0x3e0662fa,0x3e0ea9d2,0x3e18fb5f,0x3e118e92,0x3e006190,0x3df220cb,0x3de7947d,0x3db2927b,0x3dadf610,0x3da859d2, +0x3d9d797b,0x3d6ca444,0x3d01a6ec,0x3d40062e,0x3d58fb7f,0x3d5758c0,0x3e3ec5e8,0x3d896f1a,0x3da7e10a,0x3dc1a602,0x3d8a0162,0x3dd6b94f,0x3d87dc3d,0x3de33e7f,0x3de463c5,0x3df639a4,0x3dcdf7bc,0x3dd56d2d,0x3de5eecd,0x3e0aed1d,0x3de546d9,0x3df35157,0x3dd8faa2,0x3df0d5cc,0x3db65480, +0x3dd11418,0x3db588aa,0x3daabe7d,0x3d8dedca,0x3d509ce1,0x3d9b67ff,0x3d608ee9,0x3d5cbb4d,0x3d540023,0x3cfdcd0c,0x3c846394,0x3cccaf60,0x3d0216c1,0x3d547e0c,0x3d59d1fb,0x3d0db97b,0x3c8949c3,0x3dc5f375,0x3e1ca890,0x3e115d99,0x3dae6824,0x3e08d272,0x3e1d8b78,0x3e25a434,0x3e16f627, +0x3e0c7604,0x3e117db2,0x3e1cda18,0x3e1f133a,0x3e07043e,0x3dab9a46,0x3df628a6,0x3e1229c6,0x3deae2ac,0x3d4f2716,0x3d6cc791,0x3d809739,0x3d83a778,0x3d90ee98,0x3d95df80,0x3d9070d5,0x3d8dc3bf,0x3d6a7699,0x3d5f9857,0x3d4f9686,0x3d3c78db,0x3d403da8,0x3d3eb915,0x3d1d16a2,0x3d0e0e1b, +0x3d103701,0x3da42db9,0xbd373802,0xbc2c787b,0x3ca916a5,0xbd782966,0xbdcc4fd9,0xbd5a8ec8,0xbd615439,0xbdaea20c,0xbd85e526,0xbd742088,0xbd51e539,0xbd2a6eeb,0xbd2e013c,0xbd389e25,0xbd328fb4,0xbdaf7721,0xbd8e432d,0xbd151f8d,0xbdad245d,0xbd8d4d8e,0xbb602648,0xbc89c6e7,0xbc9e9d47, +0xbca94c9d,0xbcb59799,0xbcc89600,0xbcdb228f,0xbcf964ee,0xbd1554fc,0xbd2b2185,0xbd42c696,0xbd3889bd,0xbd3ce1d8,0xbd01f6fe,0xbcab0afc,0xbbb85bec,0xbbdc0c93,0x3cbd6262,0xbcf03aad,0xbe1d776e,0xbcd8817e,0xbd9c2a4c,0xbd403010,0xbd7f1c78,0xbcf5e287,0xbc53163c,0xbd4b7dbb,0xbd2ee99a, +0xbd609bd4,0xbd0fe5a7,0xbd3fb1b3,0xbd6a5b2e,0xbd48409e,0xbd654192,0xbd31ebbe,0xbd9177ea,0xbd14cc79,0xbc5fcb4d,0xbcd30d29,0xbcdfaf7b,0xbceba5aa,0xbcf416bd,0xbd29f477,0xbd47a5ba,0xbd7ef259,0xbd9dd13f,0xbdd4874f,0xbdd59fb6,0xbdc9d5c1,0xbd789cea,0xbcfe4e32,0x3ba2c51f,0x3b9a9b75, +0x3dba95a7,0x3bc3bd8b,0xbdb1fa0d,0xbc6d6924,0xbd83271a,0xbd2aa356,0xbd6d3692,0xbb65f5be,0xbcd71ef2,0x3c274e21,0xbd302e64,0x3b4091ef,0xbc0c4c4e,0xbd0a79d3,0xbcd33001,0xbccf1868,0xbd194e2f,0xbcfdeb00,0xbd4c2820,0xbc8db6e9,0xb935b401,0xbcc16c41,0xbcffdb15,0xbd1b348c,0xbd398dc3, +0xbd8399af,0xbd9664ea,0xbde24405,0xbe1947aa,0xbe3cdc1b,0xbe419f2a,0xbe348f3c,0xbdc7fc01,0xbd09731d,0x3d6f854c,0x3d5e3b14,0x3e287ad8,0xbc24eea2,0xbe06660b,0xbc0dcc17,0xbd3ca083,0xbccb289b,0xbc9108c4,0x3cd08a94,0x3ccb4591,0x3d02fbb3,0x3cd2923a,0x3d05462c,0x3ba8e694,0x3c257a05, +0xbbcffc2c,0x39eb51ce,0xbc2b9523,0xbb020153,0xbcc97759,0xbc90a071,0x3bd74067,0xbc7aa0c2,0xbcec8d7a,0xbd09a29b,0xbd28b299,0xbd868218,0xbda16df8,0xbdeeb969,0xbe2be8b9,0xbe74c07b,0xbe85fb78,0xbe757794,0xbe03d7be,0xbcefee6e,0x3daee545,0x3db29b89,0x3e5c7869,0x3dc89e78,0xbd8063b3, +0x3c768e52,0xbba84f6f,0xbc5c3825,0xbc303a89,0x3d292e2c,0x3d05744a,0x3d182967,0x3d6f79e1,0x3d4f3a33,0x3d4001ca,0x3ce4cafe,0x3d0e5477,0x3ce75938,0x3caf3130,0x3d06d769,0x3ba72c04,0x3c42214e,0x3c49b1e3,0xbc27ae0a,0xbd0d2ed4,0xbd32828c,0xbd731b34,0xbdb60474,0xbdcce56b,0xbe23ef3a, +0xbe789103,0xbea817f3,0xbeb448ab,0xbea0570c,0xbe326743,0xbd26d78a,0x3e19e8f1,0x3e2f85e9,0x3e66898b,0x3e4d3222,0xbd29a4c5,0xbda6ed1d,0x3d260d9a,0x3cd78f7e,0x3d9d1fbc,0x3cacc315,0x3d5e7ca1,0x3d1684fe,0x3d00b141,0x3d2a690d,0x3d2a7770,0x3cfd8920,0x3ccb7b08,0x3c241160,0xba642498, +0xbc23bd78,0xbd470867,0xbc975e66,0xbc84d904,0xbd64378e,0xbdd5be6f,0xbde71eb0,0xbe227249,0xbe4f7dd6,0xbe967aca,0xbea8612c,0xbebaefdd,0xbea1f684,0xbe85eaad,0xbe727768,0xbd9dac20,0x3d565194,0x3e1d4c45,0x3e79da02,0x3dd7d88d,0x3df204ba,0xb98eb6f4,0x3d2054a3,0xbda253c8,0xbce7334d, +0xbd309301,0xbd0bc6e0,0xbb19b332,0x3c525ccf,0x3d5446da,0x3d44ceb4,0x3d46cdeb,0x3d0e449b,0x3d165ef2,0x3cdb5092,0x3c968c5c,0x3b1cb99d,0x3bc90c91,0xbd25fab5,0xbd381ef5,0xbd9432e2,0xbdf37175,0xbe5c7de6,0xbe96c5e7,0xbebfe737,0xbec6e3cf,0xbec530ff,0xbeeee45b,0xbe92c89f,0xbe5ad7b6, +0xbe05b576,0xbe651af0,0xbe5ac328,0xbda254db,0x3cf784f3,0xbec1908c,0x3dd63346,0x3dcdfcb9,0x3cfbc09d,0x3da153a1,0x3c92b841,0x3c9d5302,0x3a592ed6,0x3cd7baf5,0x3d157abd,0x3cdf5b5f,0x3d72a14f,0x3d7c494a,0x3cbbe776,0x3cf72c09,0x3c093515,0xbc6db116,0xbd199302,0xbd915e31,0xbdc8119c, +0xbe0cf9d8,0xbe14a6f8,0xbe0bf380,0xbe0a8263,0xbe0f9092,0xbe4fc3d1,0xbe0ab3b2,0xbde4cf1d,0xbdb5825f,0x3d7ca9f6,0x3e2d1118,0x3e7aa81b,0xba941b4a,0xbe4850e2,0xbf1e394e,0xbeee3075,0xbf383073,0xbeab6741,0x3e5ecf2f,0xbe11a4d9,0x3da4e4fd,0x3ce6efe8,0x3d40bc25,0x3b8cfe33,0x3d47db9d, +0x3d39dcc0,0x3b81783f,0x3d75664a,0x3d6fc403,0xbbf58386,0xbb86ac1e,0xbcd49841,0xbd732158,0xbd8ab7d7,0xbd8e2708,0xbe096fd8,0xbdd3a842,0xbdc3b7ec,0xbdbfd038,0xbcbf0a23,0x3bc9ad89,0x3b30c155,0x3d3d1e90,0x3da3f08a,0x3e3e663c,0x3e6e778c,0x3e9b49ce,0x3e85402e,0x3d6fb979,0xbe0041fb, +0xbf02104e,0xbf1c8127,0xbeffa44e,0xbf030061,0xbe296355,0xbdadb0b4,0xbc89f08c,0xbd765fdd,0x3be025c0,0xb6356327,0x3d05d697,0x3d435d48,0x3c917298,0x3d28b689,0x3cf45c25,0xbcd35395,0xbcff05ae,0xbd4c4537,0xbd755cd1,0xbd9e0930,0xbdc94ee3,0xbdc8d67c,0xbd250f5e,0xbbbfc779,0x3be206e0, +0x3ccc88c4,0x3d4cbf59,0x3d869229,0x3da3efea,0x3e0265cc,0x3e61b44c,0x3e0790f8,0x3dc78ef2,0x3cc04f06,0xbd1ac08d,0xbd53b7ee,0xbc81fb46,0xbe91838d,0xbe36ffc5,0xbe8225b9,0xbe1babe7,0xbe2b4e70,0xbd891603,0xbce4ea72,0xbd1af44e,0xbc07b304,0x3d2a9216,0x3d4965c6,0x3d7607c4,0x3d2a788e, +0x3d31705a,0x3d051ae6,0xbc1029a5,0xbc6f603c,0xbcc8a530,0xbd86b355,0xbdcde5e9,0xbdf8b5a5,0xbdaf417f,0xbd81ab52,0x3d5e9a67,0x3d69475f,0x3da360e3,0x3da122d8,0x3d9f8b23,0x3d90d7f3,0x3dc3ac38,0x3e3b7994,0x3e373954,0x3db1d8ad,0x3cf3f82e,0xbd83c159,0xbe32edc9,0xbdf6f178,0xbde9d76f, +0xbe57942a,0xbda9ecb3,0xbca418c6,0x3aecbf67,0x3d31465b,0x3c23bba7,0x3c64cd29,0x3c00b4d6,0x3c814983,0x3d17390d,0x3d2402b5,0x3d36157a,0x3d18273e,0x3d2dee83,0x3c42343b,0xbc42d20f,0xbc8516db,0xbd2ba726,0xbc8d47ae,0x3b82ed03,0x3d144ee4,0x3ddae247,0x3dad9140,0x3d984e5f,0x3d32a802, +0x3b5eeac3,0x3a958fdb,0x3ba97284,0xbc4fbdda,0xbd134b40,0xbb9f0ce6,0xbc6ea1e3,0xbcf07dda,0xbdb6b569,0xbdc47cb6,0xbd91f45e,0xbd22ee16,0xbdb9cd20,0xbd142740,0xbd40f5d2,0xbd0dc400,0x3a0f550b,0x3c2f6e7d,0x3c7b73d4,0x3cc80556,0x3d1b6c87,0x3d41d18d,0x3d826aba,0x3d46d103,0x3d9ac215, +0x3d9d4afb,0x3d94aa7d,0x3d9330ed,0x3d8017cc,0x3d9636b4,0x3dba5cf2,0x3dad4b56,0x3da84f3b,0x3d968f82,0x3d7fd098,0x3d583692,0x3d055fac,0x3bf57b58,0xbbb53640,0xbb8d6432,0xbc29737e,0x3c0a376f,0xbc625764,0xbce2b4bd,0xbd283954,0xbd1e088a,0xbd0a88d3,0xbd184e1d,0x3caf7c9c,0xbce4042d, +0xbc2c08fa,0x3c2f4206,0x3bf8fc6f,0x3c576c9e,0x3c7212ff,0x3bde95ea,0xba97ac20,0xbc899dea,0x3d13fe0b,0x3c6fa58c,0x3d8c9480,0x3d94471f,0x3dd2205b,0x3dd22d2c,0x3e166b6b,0x3deef032,0x3dd2e691,0x3dc2de18,0x3dc2b72c,0x3db6368d,0x3db3498d,0x3db2ed8d,0x3d219e49,0x3c3a99de,0xbcfaddaa, +0xbccc712a,0xbcdb0478,0xbce9c122,0xbd066b95,0xbcf15584,0xbce5b354,0xbd04b11e,0xbc916092,0xbd30c12d,0x3c2bdd46,0xbc691f2d,0xbcdbf3c6,0xbca4ad60,0xbd157fa0,0x3c35d694,0xbc79db6f,0xba1a2364,0x3be1b774,0x3bf48476,0xbc30507a,0xbb91da73,0xbc91681a,0xbc8b0add,0x3d0710f3,0xbb2b1d7e, +0x3d70fc6e,0x3ca1d16e,0x3c9499ca,0x3cf971b3,0x3cd49b2b,0x3ce023fb,0x3cafc8c3,0x3c82d9df,0x3cb6bc19,0x3cb39a59,0x3ccb4ebd,0x3c626fe5,0x394cb259,0xbc1b2bb6,0xbc2e4b57,0xbc5e5bbd,0xbc98215e,0xbcb49879,0xbc234487,0xbc84dc8a,0xbcf60318,0x3ac795e4,0x3d88ff15,0xbd01987e,0xbc82c21f, +0x3d563077,0x3d759f44,0x3d689588,0x3d630551,0x3d71465f,0x3d8c6e21,0x3d8f2da8,0xbc3bbf8c,0xbcb1ae3a,0x3db9914f,0x3c88533e,0xbbfbc194,0x3c04660a,0x3c232715,0x3bcc05b5,0x3baf476d,0x3bccc012,0x3be354da,0x3bc402a6,0x3b37730b,0xbbbcfca6,0xbc2cfe32,0xbc57c03a,0xbc4bfecc,0xbc7a7a61, +0xbc71d465,0xbc5c4719,0xbc4a7b5a,0xbc58df06,0xbc3f8008,0x3d397a40,0x3d251538,0x3d2c4acc,0x3da42d1c,0x3d22c475,0xbd2a670f,0x3d80e33c,0x3d16e284,0xbccae298,0xbd028f95,0xbd20b0d9,0xbd201b9b,0xbd286443,0xbd52f43f,0xbd2d51ce,0x3d11bedf,0x3d69ce65,0xbd587605,0x3cb0e5da,0x3d3e954a, +0x3c99dd30,0x3cb562f1,0x3cc7d7c0,0x3cbafde1,0x3cbbc7e2,0x3cb85907,0x3cbf19c7,0x3cc2265e,0x3ccbfd01,0x3cc776c9,0x3ce19afb,0x3cdda921,0x3cf01bf5,0x3cf2558a,0x3cfc93fe,0x3d0eb2f0,0x3d22611e,0x3dbd6327,0x3deca176,0x3d0ccbc9,0x3d3df09d,0x3cdaee06,0x3d52b076,0x3d4e6317,0x3c97923e, +0x3cdfac75,0x3d2abf70,0x3cc9701b,0x3d2deeb4,0x3d114b6e,0x3c8cbc3c,0xbc109058,0x3cf62537,0x3c6a28aa,0x3c7ec904,0x3cdea85a,0x3d29ef87,0x3c9bb8a6,0x3ce317b0,0x3cb2f3cf,0x3cbc5111,0x3cc79251,0x3ce3ef7f,0x3ca421d6,0x3c6f630f,0x3bc258ec,0x3c1914a7,0x3baa5553,0x3c8f13eb,0x3cec7a4b, +0x3d7508fd,0x3dcad023,0x3deb8f7c,0x3deca53f,0x3e0365eb,0x3de7d115,0x3dd8def1,0x3d923053,0x3d7f03ad,0x3d5077ec,0x3d288f8b,0x3d1dbc02,0x3d2798cf,0x3d658dae,0x3d62e90c,0x3ca549ac,0x3d315efe,0x3cd18c0c,0x3cc6d1e6,0x3cc6f6d7,0x3bca9b4d,0x3cc1c1c4,0xb7497990,0xbb184734,0x3ba0ab96, +0xb98b4735,0xba53b8bd,0xbbeae68f,0xbb150c81,0xbc114ae8,0xbc1f48b7,0xbc5699fe,0xbb003ae6,0x3bd18fac,0x3c9c969d,0x3d07c64d,0x3d61335f,0x3dcfd738,0x3dfd5273,0x3e388292,0x3e3ebc52,0x3e134ff4,0x3dd358d4,0x3de6ea81,0x3d84de5e,0x3d1bd73e,0x3d8bcb86,0x3d1ad774,0x3d272492,0x3d024fbe, +0x3cfc9eb2,0x3d20c172,0x3c177011,0x3c99a274,0x3bd959bf,0xba99d791,0x3b4766d4,0x3cafab8d,0x3be59b26,0xbcaef567,0x3b5ab7fb,0xbc421b91,0xbc23798b,0xbbf17a4f,0xbbf2058b,0xbce95ae4,0xbd4cdfe9,0xbd749e25,0xbd6da4d4,0xbd2b5e7c,0xbca3dd31,0x3c80e74e,0x3db7c3ed,0x3e5a7721,0x3e6a95b6, +0x3e1b9083,0x3e337831,0x3e3e4a82,0x3e081558,0x3dcdd22e,0x3db7030b,0x3d8da3e1,0x3d27edea,0x3d0d5b35,0x3d2746c5,0x3d3fda6e,0x3d33806c,0x3d0a757a,0x3c8f61c5,0x3cc859c3,0x3c959af9,0x3c8d55b9,0xbce7f844,0x3d1ef67e,0xbd063ef8,0xbd497c1d,0xbd03e05f,0xbd0bc0b8,0xbd2d2815,0xbd7fa563, +0xbd63b72f,0xbd957db1,0xbd8011bb,0xbd8459a0,0xbd33d058,0xbd047035,0x3c969334,0x3cbab064,0x3d9aece9,0x3e15d4e4,0x3e3990e7,0xbd40c17b,0xbde3f833,0x3e3e1eff,0x3d7c3a55,0x3d41bb92,0x3d21870c,0x3cda5469,0x3d92ec3d,0x3d8ec698,0x3d6319ef,0x3d1ef74a,0x3d34b4a7,0x3d176055,0x3cecfefb, +0x3c87d37b,0xbbb7f19b,0x3c83b915,0xbd2097e0,0xbb878a44,0xbd0e9caf,0xbd4d62a4,0xbceb7537,0xbd940c70,0xbd1f5606,0xbcc28d20,0xbe0a6a6e,0xbe0dffe2,0xbe2d7d15,0xbe17f210,0xbc94d44c,0x3d5195ff,0x3e21f4b7,0x3d5ef162,0x3c20d646,0xbc7e5f38,0xbc6d5f68,0xbec39736,0xbcbdc917,0x3e230e30, +0xbd300e6e,0x3d91581f,0x3cfb99ab,0x3d08888a,0xba418e76,0x3bcd281a,0x3cd4267d,0x3d2b10f8,0x3d5c5aea,0x3d57f752,0x3d2cfab1,0x3d2e4d74,0x3c449ecb,0x3cbf85e9,0xbc5496da,0xbcdd4f9a,0xbd5d7e3a,0xbdb95260,0xbda8c425,0xbd7047fb,0xbd8d2d84,0xbcde75f0,0xbccd0107,0x3d086c6e,0x3db69963, +0x3e748835,0x3e8a9248,0x3e9fbdd8,0x3ea769e1,0x3e4c8af4,0x3c8faf4f,0xbe837a7a,0xbea8e1be,0xbe992c4d,0xbea0417b,0xbe107918,0xbdbd5782,0xbd0fca40,0xbc9748fa,0x3be9a89b,0xbaae30ed,0x3d26ea4f,0x3d42e11b,0x3c84f954,0x3d768939,0x3d59a3fb,0xbc07ed79,0xbbd3882a,0xbc8acd3a,0xbd8ae82f, +0xbd653ad8,0xbd8dfa74,0xbcc1ef19,0x3cbc6cab,0x3da6dd60,0x3e28871a,0x3e951d3a,0x3eca54b2,0x3edbf586,0x3ee01b2e,0x3ed1f562,0x3ecc1aa7,0x3ea340a9,0x3ea65982,0x3ea21773,0x3eb10c70,0x3eb4ab5e,0x3ebdb25a,0xbd01037c,0x3eafbed3,0xbe9b2bba,0xbeaf6d03,0xbda00998,0xbdd92bbd,0xbceceef3, +0xbc23ba59,0xbbbd0811,0x3d289fff,0x3d423f53,0xbc76ec97,0x3d66069b,0x3d2ad25c,0xbc6a9803,0xbc868c78,0xbcc50b3c,0xbd8640f4,0xbd3352fc,0xbdb90bbe,0xbc926e61,0x3e01d5dc,0x3e41e2a3,0x3e83571a,0x3ed5fee0,0x3f03540f,0x3f164d6d,0x3f0ef577,0x3f009804,0x3ef792c1,0x3ebb3ff3,0x3ea43e91, +0x3e534caf,0x3ebcfc16,0x3efc4dab,0x3f50f48d,0x3f01a9ed,0x3f244775,0x3da43ce6,0xbe2fc42d,0xbd43cf58,0xbd770fa2,0x3cff3fbe,0xbceb5e6b,0x3a1f6bb6,0x3c2f6806,0x3cd4c420,0xbb53d92d,0x3d221003,0x3d4061c4,0x3d13f2eb,0x3ca59ded,0xbbf9ef8f,0xbc2a63ff,0x3bbc1328,0xbccdf938,0x3dcf580e, +0x3e0b4e03,0x3e2fb9bb,0x3e780d79,0x3e6d9484,0x3e8e05f1,0x3ec05308,0x3eae2539,0x3eb4daae,0x3ebd1acf,0x3ea87095,0x3e86edc9,0x3e16edbf,0x3e8efe78,0x3eac2093,0x3f2935da,0x3f0643ed,0x3edc9b2e,0x3e3c1333,0xbe2ea93d,0x3d13409e,0xbd1f7d7f,0xba1f1ed6,0x3ced84bc,0x3d09548d,0x3d5bac4b, +0x3d7d0917,0x3d2dac40,0x3d190893,0x3cf703a8,0x3ccf986b,0x3c5c3d19,0x3b037ded,0x3d2ecb64,0x3a5aae13,0xba405e9a,0x3bae07d6,0x3e1b69a6,0x3e0715f7,0x3e2d5bfd,0x3e2d6afe,0x3e1be4fb,0x3e03ac1d,0x3de775af,0x3dc40a2b,0x3cf39a8d,0xbcde6387,0x3a035f06,0x3c8bb211,0x3da9fa28,0x3e3fc02b, +0x3ed8e512,0x3ec31414,0x3e5e84d5,0x3e6477b6,0x3c6e939c,0x3b0f85be,0x3c90ccba,0xbcea2ba8,0x3b374044,0x3c18dd43,0x3d07668b,0x3d51451c,0x3d0de8ca,0x3d8b5828,0x3d5c9595,0x3d2a9243,0x3d3da810,0x3d8c7051,0x3d85e8aa,0x3d8ea0a7,0x3cc43f63,0x3db65577,0x3da805f9,0x3d8d1ab3,0x3db19102, +0x3dacd3b7,0x3dae2b8c,0x3d3f4bfc,0x3c9eda10,0xbcecc809,0xbd2ac7fa,0xbd691068,0xbc3a5539,0x3d3c31ef,0x3d85321f,0x3da07c63,0x3df1ee9c,0x3e34ada3,0x3dc4df46,0xbd150c81,0x3d402836,0x3ce1d340,0x3d44e434,0x3d3faa92,0x3c4c08e6,0x3caddb6b,0x3ca8cad4,0x3cb50a9b,0x3cd7b072,0x3c87c2a5, +0x3d12f6d3,0x3c802d76,0x3d43181e,0x3d2894c3,0x3d51bd39,0x3d898320,0x3d85b3e7,0x3d68198b,0x3b813839,0x3cd6b1e1,0x3bda7114,0x3c49d116,0x3a8907b8,0xbcc72f76,0xbd03c599,0xbd3c2dfb,0xbd82c862,0xbd639a57,0xbcbeb946,0x3a930183,0x3cf7c0ca,0x3d0ecb2e,0x3d21c48f,0x3cbcdb1f,0x3c1db4b3, +0x3d10adbd,0xbca3f251,0x3c4c68e2,0x3902dffc,0xbbe58631,0x3c3a36b4,0x3c4d9abc,0x3c631e70,0x3caa0ab5,0x3ccb61a3,0x3d1b54b2,0x3cca3c40,0x3cdb1ca8,0x3cf18f3d,0x3d07414e,0x3d0c9a95,0x3cd109f0,0x3dad50f1,0x3d10a978,0xbc53cf7d,0x3c1df796,0xbc2890f7,0xbc51147f,0xbcbcf0f1,0xbc7c2210, +0x3c32b453,0x3d02e59d,0x3d779fe9,0x3d673e35,0x3d3a77dd,0x3cda64a1,0x3cd25cac,0x3cebc8e8,0x3d197311,0x3cccfd07,0x3ce6d39f,0x3cfbd85b,0xbc00f13b,0x3cd5a220,0x3d08306a,0x3cbc8a3c,0x3d01414c,0xba120af6,0x3caab543,0x3c8a2280,0x3c80b229,0x3ca0f8a3,0x3d069abd,0x3d07a4eb,0x3d2ceb28, +0x3cd3c8a8,0x3d06dd28,0x3ce9a89d,0x3d05a0df,0xbc63e849,0x3a79cbf2,0xba82f629,0x3b245610,0x3bd6e36c,0x3c3b7d1b,0x3c52f239,0xbb946262,0xbc480888,0xbc91ec40,0xbc1a3772,0x3bf380c8,0x3cea31af,0x3cf6e32f,0x3cc40b01,0x3ca0fae7,0x3ce8f0ac,0x3ca220d1,0x3ce5787d,0x3d15fc3c,0x3b58ccea, +0xbd0e50d7,0x3d12fa76,0x3ca54593,0xbcba7767,0xbce48d26,0xbcdf37c1,0xbcda10f6,0xbcf242db,0xbd18c46e,0xbd1b2e60,0x3ce94542,0x3d365602,0xbc9ba23f,0x3c96add1,0x3cfb2258,0x3c59c1a6,0x3c86bf63,0x3c57f7d4,0x3c3cde8e,0x3bf5e977,0x3baf90e7,0x3be91bba,0x3c5ccb1a,0x3cc2c951,0x3cf81673, +0x3d06db44,0x3ce0de08,0x3cd1044b,0x3cbc3b42,0x3cc7b99d,0x3cd1eb31,0x3cbedd68,0x3d1a1548,0xbddc953b,0xbdae75f5,0xbdff62c4,0xbdbef0fa,0x3bfec60f,0x3da10236,0xbd9de2c3,0xbc37ab99,0x3d95a451,0x3da6a8bf,0x3daedfbd,0x3d971789,0x3d9e8eb4,0x3dc37982,0x3d985974,0xbc38b46d,0xbd85a243, +0x3da1f2a1,0x3aa32cad,0xbd6e0709,0xbdb36df6,0xbd9e183c,0xbda65074,0xbd9ef3f1,0xbda3b096,0xbda1faba,0xbd9b5489,0xbd98f1f2,0xbd959bcb,0xbd922899,0xbd9b869f,0xbd9fc61e,0xbdabd514,0xbdb8878e,0xbdbf163f,0xbdc0f34d,0xbdc12a4a,0xbe0f0359,0xbe03b7c8,0x3df4111d,0xbd273f2b,0x3d1325c4, +0xbd10c17a,0xbd01eb05,0xbc0139e6,0xbd28ed9b,0xbcad322a,0xbc4a5700,0xbcbe73c9,0xbd2cd1c6,0xbc822388,0x3d17fe43,0xbd57dcdd,0xbcb3f5ce,0xbd2f5a6b,0xbcc07a13,0xbddce321,0xbdcabd43,0xbdd4f0e1,0xbdcbd703,0xbdc6f56f,0xbdc55836,0xbdd72a46,0xbddd1e99,0xbde4cc0e,0xbddb5a6e,0xbddf4864, +0xbdcd22c2,0xbddd3dd0,0xbe0b5221,0xbe1f7055,0xbe2138d0,0xbe19edd5,0xbe56dbd3,0xbe1df4d4,0xbbc7394e,0xbda73771,0x3c3bc2e8,0xbca4b323,0x3c787391,0xbd2c6e44,0x3c543cb3,0xbd1f6803,0x3b1ae3db,0xbd80dc35,0x3bbbdcb1,0xbd0b412e,0xbc979a98,0xbd2ce2c4,0xbd4b6662,0xbcec4aee,0xbd663fea, +0xbd9d9c26,0xbde4e197,0xbdd6adeb,0xbdcd42f8,0xbdca5c7d,0xbdc7139a,0xbdc4b065,0xbdd153ad,0xbdc49026,0xbdc347f9,0xbdc6edc8,0xbde1cfee,0xbdef1cf5,0xbe30f096,0xbe46d935,0xbe544a0a,0xbe541436,0xbe945803,0xbe05e12e,0x3de941d7,0xbb7d989c,0x3d0928b6,0x3ce12700,0x3d0bc66f,0xbc8b7790, +0x3c32e040,0x3c5054c9,0x3c9502ea,0x3bf46e7e,0x3c341a11,0xbc7a9979,0xbb889267,0xbcc0cc8c,0xbd21e7df,0xbd2377a7,0xbd632a52,0xbd9ce1c6,0xbde8d289,0xbde09f5c,0xbdde8230,0xbde479f9,0xbdf8ada4,0xbe0485b2,0xbe178a7b,0xbe1ffa52,0xbe20771c,0xbe0ebe4b,0xbe053ee4,0xbdedad20,0xbe5ce9b8, +0xbe87fd28,0xbe92e41a,0xbe873b41,0xbeb217f5,0xbe816404,0x3c70c2cc,0xbd110a7a,0x3ba49783,0x3c5cbc3f,0x3cee809a,0x3ca773f4,0x3d2e90fa,0x3cfb0b96,0x3ce31eb7,0x3d28a72b,0x3cda60f5,0x3c47a16d,0x3b285207,0xbbbc052e,0xbce0b7d5,0xbd17f0ab,0xbd6ef31d,0xbdb91f4a,0xbdbea25e,0xbdea3397, +0xbdc71082,0xbdb7c452,0xbdd6907d,0xbdb53530,0xbdf452fe,0xbdfd4717,0xbded8d9e,0xbdfde717,0xbdfcde0a,0xbe066c00,0xbe80b014,0xbe95a4fa,0xbea3e64a,0xbeaa85b6,0xbec7845c,0xbec41657,0xbe845e2c,0xbdbddf6d,0xbe2c6e0b,0xbd87e774,0xbdf6da12,0xbc86b97a,0xbce5a25e,0x3cbe86b4,0x3cf0c6d7, +0x3d1ed3ed,0x3d13a111,0x3cb94d2b,0x3c10fe46,0xbc4b0ced,0xbc81e852,0xbcead50c,0xbd8fdb54,0xbdfa908c,0xbe13ea62,0xbe11007b,0xbe23edab,0xbe6eefc2,0xbe4ccf6f,0xbe8128e4,0xbe58f55f,0xbe3eeea8,0xbdec5733,0xbde225d1,0xbde3032d,0xbd7656af,0xbe0a86bb,0xbe70ac47,0xbeac4303,0xbee9724b, +0xbd7b50ff,0xbe81e7b9,0xbe2b8ecc,0xbe05cec3,0xbcf1c32f,0xbd56462c,0x3b68309a,0x3c9e7d64,0x3bfd6bb0,0x3cfc995c,0x3cc4d4a7,0x3d3a7a76,0x3d34c647,0x3cad6116,0x3c372972,0xbc254b4d,0xbd2d5fac,0xbd643201,0xbd9fd1ab,0xbd6c5a0d,0xbd367122,0xbd196daf,0x3c29f8a9,0x3e01c6cd,0x3e5e28aa, +0x3eaf13df,0x3ec25ec5,0x3ebed678,0x3ec173f8,0x3e402940,0x3cd25e16,0xbe08b0a6,0xbda64076,0xbb9ad2ec,0x3df14818,0x3c87353a,0x3eac41dc,0xbd88d857,0xbe3264fd,0xbd982e06,0xbdf23539,0xbd3ca0ee,0xbd2e2918,0xbcdccb59,0x3c821299,0x3cc4895f,0x3ac376dc,0x3d1506ff,0x3ccc8b24,0xbcc4bb50, +0xbd250c55,0xbd1b9d32,0xbd6c7c49,0xbd37b4ad,0xbd1bb7e8,0x3b6f1c72,0x3cbc528b,0x3d589982,0x3ddcb1ea,0x3e13963d,0x3e4529bc,0x3e424f57,0x3e58e040,0x3e5c0b68,0x3e963959,0x3e0171cb,0xbc17fbb9,0xbe3409b7,0xbe482c24,0xbdec40a7,0x3e22721f,0x3e881b16,0x3e2dc4b6,0x3eaf6cac,0x3c4b7c3d, +0x3d8a7cc5,0xbc8038f4,0xbca140a3,0xbcb30ca8,0xbc875e12,0x3c9b9c4f,0x3d08853d,0xbcc6b41d,0x3d0e9e7b,0x3cdd24ea,0xbc93f2bf,0xbc342a61,0xbcefc2ba,0xbcc34254,0x3afba1da,0x3cb50b1d,0x3d92742a,0x3c3e32b9,0x3d2f79d5,0x3d86a60a,0xbacaa7ef,0xbd594dc2,0xbe0283e1,0xbe0809ab,0xbe307df5, +0xbe31500c,0xbe0c6b4f,0xbe487031,0xbe502664,0xbe9d3efd,0xbea93a2f,0xbea9b1ca,0xbd3a732f,0xbe9b2d47,0x3e3f232f,0x3e42e6c2,0x3d959b0d,0x3d172628,0xbc4a9d7b,0x3ccc9b47,0x3ce79477,0x3cd4b181,0x3ca6814d,0xbc2a64c0,0x3cc2dd3f,0x3d397199,0x3ce041b0,0x3d1c06ec,0x3d1c2774,0x3d479a9d, +0x3c3bfd79,0x3d4ff0ee,0xbaa32d9e,0xbd4826e1,0xbda8c231,0xbde28c5b,0xbe24dd7e,0xbe56c48f,0xbe6f3c27,0xbe88a6e0,0xbead1fe5,0xbf099d0f,0xbedc5000,0xbed98c6f,0xbe8f0665,0xbeca9ebd,0xbedadafe,0xbf1c54b1,0xbec77ca7,0xbed8cd1f,0xbda4cd12,0x3e8c7df6,0x38861325,0x3d90e0d7,0x3d0da715, +0x3cacb23a,0xbd2fa7a4,0x3bed37de,0x3c27f8da,0x3c9c783f,0x3be94b1a,0x3ac3a274,0xbcd0cf6d,0x3c9a4ad9,0x3ccbebc0,0x3cd52740,0x3d8b488b,0x3d815f3a,0x3daf3786,0xbd232fc0,0xbceef22d,0xbdeb6a63,0xbe24842d,0xbe7750a1,0xbe91ff2a,0xbecb6d8f,0xbecae668,0xbed07b71,0xbec43e0b,0xbeb0801a, +0xbea9f8e2,0xbe93b2b4,0xbe887528,0xbea52d93,0xbeab15cf,0xbe507561,0xbe08a8c9,0x3d78b81e,0x3ce54fe1,0xbafae8ae,0x3c2b8b1f,0xba9188fa,0x3cc1f34e,0x3c36145a,0x3cfce803,0xbc49e11b,0x3c951d86,0x3bb2b79d,0x3b25f08e,0xbbee5e72,0xbc7eb4be,0xbd249a16,0xbcf12ee7,0x3da9fe27,0xbd6129a0, +0xbda71094,0xbdb8416c,0xbe328406,0xbe52024c,0xbe673742,0xbe661bfc,0xbe2767ea,0xbdea5ed4,0xbdd6091c,0xbd8a732a,0xbdca3d8d,0xbe1d88b2,0xbe24cc9b,0xbe2260a8,0xbe04f1d9,0xbe312001,0xbe08487c,0x3d8e2fc1,0xba9d1c22,0x3b410046,0x3b08810e,0xbd073f81,0x3bbd32d4,0xbaaddd4d,0x3c46b80f, +0x3b69c70d,0x3c81f8cc,0xbaefb5bc,0x3c4830ca,0xbc9f9ff3,0xbcc2150d,0xbccf1546,0xbc4a8bd7,0xbcf60ee4,0xbd5b2e90,0xbcbb936a,0xbde69700,0xbd8c81be,0xbd962026,0xbdc66d96,0xbde468ea,0xbde345b1,0xbdc4f9d1,0xbd97dd14,0xbd519dfc,0xbd621272,0xbd9af3d7,0xbdf3ede0,0xbdf6db18,0xbde1257c, +0xbe012b64,0xbd910a6c,0xbd5a8354,0xbd8ef2b5,0x3b43f056,0xbc8135ae,0x3c9f49ad,0x3cfdf5ed,0x3c0e3bf9,0xbcaef569,0xbb995dd6,0xbc8472db,0x3cc3ae1f,0xbd33ad3d,0x399a199e,0xbd107efa,0x3c806e2b,0xbd15eed0,0xbd424d7b,0xbd4adb46,0xbcd93f77,0xbdc4b583,0xbda00cbc,0xbd67b3fa,0xbd31103b, +0xbcdca5ae,0xbc9be1fa,0xbcc3d734,0xbd399d24,0xbd85731b,0xbdb256b0,0xbdd457d8,0xbde98a22,0xbde5df52,0xbde4a8dc,0xbdf0d0b3,0xbe0566df,0xbdb1c836,0xbd9121a4,0xbd915e25,0x3d010d09,0xbd6a6545,0xbd6e4bbd,0xbd44cd06,0xbd8c646c,0xbb5e1115,0xbd37c2f0,0xbc4a533d,0xbc0d24e2,0x3b8e6a4c, +0xbcc05c53,0xbb12ad35,0xbcdd8130,0xbc9cc304,0x3cc11d7c,0xbd1f20b2,0x3d05c98e,0xbd397a9c,0xbd1e7159,0xbd6584e2,0xbd821515,0xbd95a3ba,0xbd9f8814,0xbd9b48e1,0xbd981f15,0xbd8d16f8,0xbd88f2e9,0xbd92c201,0xbd949bea,0xbdbc587e,0xbdb2f026,0xbd7f6b22,0xbd6a74a5,0xbd945564,0xbd86efb9, +0xbda84557,0xbd3da221,0x3cab95a5,0x3d8c38f6,0xbd3cc894,0xba2a107c,0x3d7e241c,0x3d96eba9,0x3d8a18f9,0x3d7e9c0f,0x3d8fdd33,0x3db12004,0x3db73c42,0xbc11de6a,0xbd846a82,0x3d643253,0xbbd3865b,0xbd7d5ca2,0xbda9c5ce,0xbd9349ce,0xbd8d33e6,0xbd8298e7,0xbd74a014,0xbd6c3567,0xbd6ea64c, +0xbd829dc3,0xbd8f41db,0xbd9d6b1b,0xbda7a192,0xbda2b0bb,0xbda60397,0xbda08470,0xbd9ee553,0xbda2b3f7,0xbd969b13,0xbdc5456a,0x3d4a8db9,0x3d1b6e20,0x3d9aec51,0xbc1ea42a,0xbdb8f2b3,0xbde4898e,0x3c08986c,0xbd800ee6,0xbe03e8f7,0xbe04a326,0xbe03e67b,0xbde6aa5a,0xbdedeec3,0xbe0be86f, +0xbded816b,0xbd85b603,0xbbaa78a8,0xbdfa079a,0xbda347a8,0xbc419711,0x3d9c2ae0,0x3d5349de,0x3d6ae642,0x3d6f43b4,0x3d80c3cb,0x3d848fd1,0x3d830b1c,0x3d7977e5,0x3d756d7b,0x3d6a8584,0x3d6f35c1,0x3d5e11a6,0x3d5a95f9,0x3d552b04,0x3d4e63f9,0x3d2d8286,0x3d3714f2,0x3cd1c60a,0x3c6e0965, +0xbe250198,0xbbfc075b,0xbd9be58d,0xbcacd2f1,0xbcd8945f,0xbd0e88b7,0x3c8bc3ab,0xbcdc852f,0xbd0b8a73,0xbcf7d6c1,0x3b5dac5f,0xbcee9004,0xbdc45ba8,0xbba87140,0xbd39fa3a,0xbc4b8a30,0xbd8dd00f,0x3d692955,0x3d891612,0x3d8686bc,0x3d9fee9a,0x3d9b85c2,0x3d9cc867,0x3db621e9,0x3db3af5e, +0x3daacad4,0x3d92f493,0x3d9f50f8,0x3d921e3b,0x3d95a258,0x3d8c1693,0x3d436801,0x3b80c4eb,0x3bd63c40,0x3cce2e0f,0xbcc2e633,0xbdf5951d,0xbc8b7379,0xbd77ca70,0xbce88122,0xbd6de91c,0x3c340441,0xbcea1936,0x3d369fa9,0xbd294bbe,0x3d75f166,0xbc73f8a8,0x3c32b52a,0xbc9cdc47,0x3aa3806d, +0xbae470ef,0xbcd11583,0xbcc81f86,0x3d39ffa5,0x3dddf651,0x3db8e8e5,0x3df320fb,0x3dfaefd3,0x3e0cc4a8,0x3e12ca8a,0x3e032c9a,0x3dfa00d6,0x3ddf0c88,0x3ddb6352,0x3dd09f04,0x3dbcfa35,0x3dad00a9,0x3d763cbb,0xbc35a14f,0x3afa3557,0xbb6f7440,0xbdc49db2,0xbe3fc548,0xbd8fb728,0xbda37652, +0xbd182a5b,0xbcaf8599,0xbc2a64a1,0x3c8410ab,0x3cc0e8d8,0x3b9f9027,0x3ccdbd3c,0x3a0376c6,0x3d11ed2b,0xbca71cdf,0xbb265305,0x3b89d28b,0xbbd7b165,0xbcd28a55,0x3c71c14b,0x3ded0993,0x3dad15a7,0x3e073da2,0x3e0d24a7,0x3e17ee3f,0x3e265e9d,0x3e18a52f,0x3e0bd132,0x3ddbb0ad,0x3df8e958, +0x3dec9ed8,0x3dfc41c9,0x3dcbc002,0x3d2bc988,0xbdcc6037,0xbda9fffa,0x3be59dae,0xbd970d30,0xbe49e6fb,0xbdafcb4a,0xbd2b27bf,0xbd10baad,0xbcf0f5b2,0xbadd69e8,0x3cd87d10,0x3d078ae7,0x3d3b4631,0x3d21934f,0x3d1634e7,0x3c9144ad,0x3c7c2e14,0x3baaf5e1,0xbc71fe90,0x3d2b0aae,0xbd8d8aef, +0x3d9839be,0x3e0c181e,0x3e140926,0x3e2fd9fa,0x3e44c247,0x3e64ae6e,0x3e6bbdb2,0x3e557506,0x3e303d7a,0x3e1ccabe,0x3e19459c,0x3e1bd8c6,0x3df81c3c,0x3dfb8355,0x3d7dd8fc,0xbd9c64c4,0xbd52cf5e,0x3e44b48d,0x3e8f27f2,0xbe14355f,0xbdd22e2f,0xbd5e678e,0xbda736dd,0x3c2a653b,0xbd7bdd74, +0xbab9fe25,0x3c98a0a5,0x3c86af54,0x3d252849,0x3d2fa98c,0x3d14666a,0x3cce9770,0x3cc53714,0xbcbc6b80,0x3d0fbf30,0xbc0a9f0a,0x3d90b3e2,0x3ddca5c7,0x3dc390a5,0x3e37d8d3,0x3e740e6a,0x3e8fa3b6,0x3eae0e08,0x3ecb601f,0x3ee4c951,0x3ee60116,0x3eac2c41,0x3e87fd28,0x3e22818d,0x3e74a5ed, +0x3e92ca2c,0x3e874dc8,0x3e8857cb,0x3ec5ae46,0x3d324682,0xbe68b603,0x3da6a7ac,0xbdb9d905,0x3c917242,0xbcd33f55,0xbc4964da,0x3c8256b7,0x3c48b26c,0x3d12398c,0x3d2f1414,0x3d311d0d,0x3cd5a3e8,0x3c9591c2,0x3d16cdd1,0x3b18f63e,0x3c8056c3,0xbd0312b8,0x3d819743,0x3e3a01ea,0x3e43bf60, +0x3e768aa2,0x3e93c72c,0x3e96f54e,0x3eae19ad,0x3e931fc9,0x3e869cb9,0x3e1a970b,0x3e07ac87,0x3dc5d34b,0x3d43f6b0,0x3e0f9fa8,0x3e2eb529,0x3e6d2f9a,0x3e9427d8,0x3dc989fd,0x3e7292dd,0x3e3d4a15,0x3d95c250,0x3d510e42,0x3ca7461e,0x3bbfaecd,0x3b8f9c34,0x3caea175,0x3d1ae5da,0xb9be1f56, +0x3d29a67e,0x3cf19a1d,0x3b74c82e,0x3ca117d4,0x3c1d390d,0x3ceedce6,0x3cd25046,0x3d2e5773,0x3d919ac3,0x3d681532,0x3d0af10c,0xba828f6d,0x3b88d20c,0xbcc108d0,0x3c2e05ae,0xbd91f6dd,0xbdb78312,0xbe4457c2,0xbde06d8d,0xbd7d3efc,0x3dae262b,0x3d9d75d6,0x3b3ead07,0xbdfb87ba,0xbd82b58d, +0xbe6bcfe5,0x3ce2727e,0x3e19c1a3,0x3d363e12,0x3d5ee60d,0x3cbbf0c4,0x3ce17b01,0x3c6ac6c9,0x3d2e4735,0x3d434458,0xbc8e0ac4,0x3d0fecf2,0x3ccecdab,0x3ae74171,0x3c9215c2,0x3c20f211,0x3d011272,0x3c4ef9ce,0x3cd45032,0xbc581921,0xbd945102,0xbe034c31,0xbe2b7ebd,0xbe517045,0xbe75b520, +0xbe7cbc2e,0xbe9b11f6,0xbe9374f7,0xbeab70b1,0xbe63ede6,0xbdf646f1,0x3d08a9fb,0x3d7e1fce,0x3d0b95a5,0xbda479d9,0xbe2cf9b5,0xbd6824ae,0xbe61efa9,0xbd671baf,0xbca02798,0xbcbede10,0x3c0d75c3,0x3cca9ed0,0x3b112402,0x3cef9b61,0x3cc729bd,0xbc6a6e8f,0x3cc6b233,0x3cb8476a,0x3c952dab, +0x3bf19c79,0x3bd40462,0x3b7fc088,0xbc27e841,0xbcb4bd47,0xbd6ab3c1,0xbdc7d005,0xbe004f54,0xbe320623,0xbe36e633,0xbe725bc3,0xbe9a91cc,0xbe90faf8,0xbe802a86,0xbe032b69,0xbe0b2b47,0xbda17aab,0xbd99892b,0x3cf4b1f5,0x3e092931,0x3e508507,0x3dac4083,0x3e0ab531,0xbdd5d00a,0xbe808ec1, +0xbd996ebf,0xbd46cef1,0xbd094863,0xbd11246f,0x3cf8a574,0x3bd639a4,0x3cab72dd,0x3c4dc3b2,0x3bf208bb,0xbbf0b949,0xb97de218,0xbc9f1dee,0xbb9676cf,0xbd23f0cc,0x3b4cfedf,0xbbc4ee1e,0xbd343b39,0xbdc37dee,0xbe124668,0xbe3f78c0,0xbe503c4e,0xbe37eafe,0xbdcad7f8,0xbd9d81ea,0xbc2f019e, +0x3dfff406,0x3e2644c7,0x3e1c3ddc,0x3e3379ca,0x3e46d171,0x3e1ba05b,0x3db65cae,0x3d7ad773,0x3d0c86c1,0xbd4349c0,0xbdf8750a,0xbd7842f6,0xbd4efb49,0xbcc6ce94,0xbc1e4b3c,0xbb47236f,0x3c8749c9,0x3bcbef8b,0x3c0a0961,0xba281417,0x3aad2f0b,0xbb8d4100,0xbcaad00e,0xbd54ff8b,0xbd1e5b3b, +0xbd93e6ae,0xbdb53563,0xbd9ee7b2,0xbd9270af,0xbd7be1b3,0xbd1a641d,0x3aa37048,0x3bf7a5f9,0x3b83e24b,0xbcff7056,0xbd1d5bb3,0xbd0922b8,0xbc8b0850,0xbba58741,0x3cb6daa9,0x3d0eedb3,0x3d74a88c,0x3d71b714,0x3d02f2f1,0x3d71c13b,0xbd8e746b,0xbd59ad9e,0xbd1ccea2,0xbd36f521,0x3bfdc107, +0xbbc62be5,0x3c455f82,0x3bdafbd0,0x3c92d90c,0x3bb3fbef,0x3ae65460,0xbca88445,0xbc779aaa,0xbcf63218,0xbd190c49,0xbd92c8ba,0xbda23664,0xbd9cdf31,0xbdacdfca,0xbcd9d83b,0xbd2e0f75,0xbd046b80,0xbc7e6662,0xbc349803,0xbbeda61b,0xbc245357,0xbc4e39e0,0xbbc04e8c,0x3b9fa37e,0x3c25d82a, +0x3d244231,0x3cd27249,0x3c9abe10,0x3d3833dc,0x3c05bb74,0x3c8f024d,0x3d0c9a97,0xbcde024e,0xbbcd9b0d,0xbd1c5686,0xbd17f78b,0xbca4da6e,0x3c59213c,0xbaac20a2,0x3b00af52,0xbcb6ba6a,0x3bb4bc41,0xbc8bda3d,0xbca8f875,0xbd47b2fb,0xbd1ff7e1,0xbd20f6e1,0xbd240cfc,0xbd8de6b8,0xbd2dcda2, +0xbccb4caf,0xbd2f768f,0xbd15d8c3,0xbd3eda8c,0xbd365d28,0xbd300129,0xbd24313b,0xbd0f21ce,0xbd164939,0xbc8a6439,0x3a0de182,0x3c9d2f25,0x3cb3e958,0x3cd5a9d1,0x3d08e806,0x3cb1118d,0x3b9c1b68,0x3a165463,0xbdd239ee,0xbc522d5f,0xbca4ded9,0xbce52b60,0xbb2863e1,0xbd4979ab,0xbc45eeb1, +0xbd4b8d3c,0xbd608fb9,0xbd7fb710,0xbd259abe,0xbd4bf0b1,0xbd313183,0xbd4bec60,0xbd89fe7d,0xbd2089c1,0xbd8f1098,0xbcce767a,0xbd02349f,0xbcc68278,0xbca49f98,0xbc5ffa51,0xbc1d8ae3,0xbc02643b,0x3b66a35f,0x3c920788,0x3cec5ed3,0x3d17c6cc,0x3d24dd0f,0x3d4ccb15,0x3d1efc7b,0x3cd7e998, +0x3c8fe1a4,0x3c73bfa6,0x3c67633f,0x3ce7b3c8,0xbce4b8ab,0xbda76902,0xbdbceb06,0xbca87d5b,0xbd861b2a,0xbdcb1627,0xbddc0d9f,0xbdc41a2b,0xbdb19fa0,0xbdbb1523,0xbdcff6a7,0xbdd45e6f,0xbd8e8dd3,0xbcbb866f,0xbdae8a23,0xbd995535,0xbd119808,0x3c219650,0x3b96d9f4,0x3b8dd1df,0x3b62e076, +0x3b1c68f2,0x3b2d9094,0x3b69d931,0x3ba555aa,0x3bcc7d85,0x3bfe2a14,0x3c27fc9f,0x3c6b7056,0x3c9bd30f,0x3c8ecb81,0x3c8e3985,0x3c8dc448,0x3c7a537d,0xba354837,0x3d8a8136,0x3d23bd41,0x3d0fd899,0x3da92af6,0x3da516be,0x3d16f93d,0x3d8144ae,0x3d9be7ba,0x3d60a629,0x3d57af4b,0x3d4e4a32, +0x3d2f589b,0x3d33caa7,0x3d38016e,0x3d35988a,0x3da21d6b,0x3d8d16e5,0x3d10e714,0x3da139e7,0x3d8cf0c7,0x3cbba9ed,0x3d0cc7cf,0x3d0ec714,0x3d08469b,0x3d126851,0x3d15d802,0x3d11f12a,0x3d1712f9,0x3d1b0462,0x3d1e609b,0x3d32ce27,0x3d3d5b41,0x3d5fc838,0x3d45bbf0,0x3d3b9860,0x3d2b924f, +0x3d2b8aac,0x3d642b68,0x3d718582,0x3d44b597,0x3d1a74a2,0x3d420517,0x3d4d93e7,0x3d7c5bab,0x3d43d76a,0x3d37d677,0x3d8fe6ae,0x3d66c1b4,0x3d886737,0x3d4f32ad,0x3d7c6f65,0x3d6883ad,0x3d5f4423,0x3d7e97dc,0x3d4c2f28,0x3da14d16,0x3d67fe1c,0x3d1d21e0,0x3d471ffc,0x3d32c7d2,0x3d417ee1, +0x3d45617c,0x3d624047,0x3d7c1f38,0x3d8dab8a,0x3d938f0f,0x3da7e38d,0x3da5b526,0x3dbf21ca,0x3da21f0b,0x3da20ac7,0x3d9042bb,0x3d944715,0x3d957c0e,0x3d9be042,0x3d862c8b,0x3d384a1d,0x3d345001,0x3d24f93c,0x3d3ef72a,0x3ce5b8c9,0x3d6a3415,0x3d0a0ffd,0x3d863713,0x3d08f897,0x3d299eec, +0x3d69cb9d,0x3d238436,0x3d03c04b,0x3d442d47,0x3d32ac10,0x3d9158a2,0x3d176575,0x3c90f999,0x3d15d250,0x3cd8a79e,0x3d2487bd,0x3d31091e,0x3d4b4fd5,0x3d8073e4,0x3d95f962,0x3dae1e87,0x3dd4b20e,0x3dedb0cd,0x3e0fc95e,0x3dea5d90,0x3dd6dba0,0x3db81b93,0x3dbed74c,0x3dd1f1be,0x3d71c78c, +0x3c368dbc,0x3cd8e1d6,0x3ca68c4e,0x3bf72733,0x3bf638c0,0x3cbfe0b3,0x3d0ca094,0x3d1608c8,0x3ca05cbd,0x3c8e4900,0x3d07d070,0x3cb8c332,0x3ca60161,0x3bfdb650,0x3ce555b0,0x3ca63edd,0x3d678445,0x3d5d2feb,0x3c077692,0x3d25b6ab,0x3cea44f5,0x3d495f31,0x3d75a958,0x3d9ac766,0x3dd22f18, +0x3df94465,0x3e100ba5,0x3e2211dd,0x3e264554,0x3e337635,0x3e135e8c,0x3e12f65d,0x3dfc5ff4,0x3e065db3,0x3e0dc596,0x3df5d24f,0x3d4020fd,0x3ce6b360,0x3cbc4f6f,0x3c0822f9,0x3c09f7be,0x3c16407f,0x3cceee6f,0x3d1669a9,0x3c57dcbd,0x3ce8e33e,0x3caa034f,0x3cad1ebf,0x3b58c878,0xbb8e3880, +0x3cb00b59,0xbc29fb5a,0x3d9ac5fc,0x3ca95d23,0xbc9a7899,0x3bc892da,0xba9f21ba,0x3c6acc82,0x3d2c8f3c,0x3d159fc8,0x3d8df72f,0x3dd4fefb,0x3e0325ad,0x3e34069f,0x3e3ae325,0x3e5ed666,0x3e3925d1,0x3e1eff83,0x3e0fb16f,0x3e136f30,0x3e59d962,0x3e271e5d,0x3e70147f,0x3ddd99eb,0x3e08d6fa, +0x3dafb367,0x3da7807e,0x3d0ab434,0x3d12a7e0,0x3c84ceed,0x3c4c7efc,0x3d22163f,0x3d028f73,0x3d0655b2,0x3cca2d4e,0x3c548cb7,0x3d1a3dbb,0x3b9c8c89,0x3d558c99,0x3d3fd7fb,0x3db7062e,0x3e11c646,0x3e4d6028,0x3e80e6bd,0x3e789c98,0x3ecc1431,0x3ec7d626,0x3eba7f3b,0x3e789d38,0x3e8a574d, +0x3e967e13,0x3e895283,0x3e95af99,0x3e9f10fa,0x3ea63f81,0x3ea4abe8,0xbdb26cb4,0x3e3f6ee0,0x3e511a35,0x3d4b79f9,0x3d992547,0x3d215d0f,0x3cc7eae7,0x3c2e86c4,0x3c6e6291,0x3c9c48ff,0x3d008673,0x3d02873e,0x3d14c091,0x3cd6177a,0x3cda5892,0x3c40ab89,0x3d4f238c,0x3d326aab,0x3de5c757, +0x3d42ed59,0xbdb198b2,0xbda8fe50,0xbe1c9f1a,0xbdfe31c2,0xbde86009,0xbe1489f9,0xbe38124d,0xbe226a97,0xbdff81f0,0xbd3e20d7,0x3d94657b,0x3e635e05,0x3e003a39,0x3d072955,0xbe065950,0xbddabe50,0xbe4e5ef0,0xbcd28b72,0x3ddb1148,0x3d848fe3,0x3dcc8a75,0x3d59e8ee,0x3d59c737,0x3caebb83, +0x3d3b50bc,0x3d38b75a,0xba2beeca,0x3d351afe,0x3d1ce883,0x3cf5fb86,0x3d2be8f2,0x3d11b0cd,0x3d738ae0,0x3d38a1da,0x3d2a0085,0xbd316cc8,0xbdb3db6c,0xbdd3869b,0xbe33b2fb,0xbe6067f6,0xbe84a551,0xbe5a8ac7,0xbe80ec6d,0xbe6d5719,0xbe7e1b29,0xbe40c632,0xbe255487,0xbdd8337e,0xbdc68d13, +0xbd8f4a33,0xbc4672a4,0xbdd8da6e,0x3d8f83c9,0xbe205368,0xbd0d503d,0xbb86d87b,0x3cf4b76f,0x3d0efff7,0x3d23a8ac,0x3c4dab63,0x3d3ebb6a,0x3d384730,0xbbed4297,0x3d045557,0x3cd61753,0x3ca66028,0x3bb99157,0x3c302153,0x3c6fa168,0xbc9c2cc8,0xbc8e7290,0xbd4ed3f8,0xbdbbdc22,0xbdba1560, +0xbdf1e0ed,0xbe0562a5,0xbded9906,0xbd2b7119,0xbd3e46df,0x3c0af59f,0x3cac51c7,0xbd66e8f3,0xbdc459d0,0xbe36065d,0xbddee5ea,0xbcfdfd1a,0x3e588a90,0x3e0604ff,0x3e693586,0x3ddcde6a,0xbcec5716,0xbccbc4c0,0x3cd70855,0x3c9553f3,0x3be59c04,0x3cccb1f0,0x3ca73067,0x3ca5fc6a,0x3b9c816c, +0x3bfdd90d,0x3bb99a41,0x3b579813,0xbc87ba86,0xbcbcc96f,0xbd0796a1,0xbcadcd78,0xbcdc803a,0xbd66b9e5,0xbd985634,0xbd8e958c,0xbd4aac8f,0x3a84d5da,0x3d5ac9c3,0x3dae7ca6,0x3e08275c,0x3e355630,0x3e8cfd44,0x3e6757de,0x3e48912f,0x3dee37bf,0x3de22790,0x3d848d22,0x3dbcabb4,0x3e299620, +0x3dca8db6,0x3de315aa,0x3d8520ed,0x3d32572a,0x3ccabc11,0x3c9dcb12,0x3d561720,0x3d74440b,0x3d46f152,0x3cd3aea1,0x3aff1ca4,0xbba76f32,0xbb5b408a,0x3c72291b,0xba92861b,0xbcc6df22,0xbd03efcd,0xbd8bf9bf,0xbd66da18,0xbd4cd826,0xbc94ec66,0x3bb23157,0x3d1dc719,0x3d846dac,0x3db43635, +0x3d8d238c,0x3e2a9d9d,0x3e09b95d,0x3d15214c,0x3b75dace,0xbcbd346d,0xbcda9232,0xbd9c8d83,0xbcfc8f68,0x3d9bcf48,0x3deed5c6,0x3dc6762e,0x3df01d15,0x3d5e7923,0x3ba8dd90,0x3ca008ea,0xbb9e84c4,0x3bc67411,0x3c8198d2,0x3bf75f90,0x3c982d64,0xba872a90,0x3c41ce1a,0x3aa122a9,0xbb89675c, +0xbc04f1c0,0x3b3313e1,0x3c8e9128,0xbb9374c0,0xbd5d669b,0xbc897917,0xbcf379bb,0xbd293795,0xbc916067,0x3c64854e,0x3d279684,0x3d8bcb9e,0x3d8be04b,0x3d4c896c,0x3d588a4d,0x3b9e6448,0x3bde727f,0xbbdb7b58,0xbbcec5b5,0xbc1ae65d,0xbc06991b,0x3d8cbca9,0x3c83c4bb,0x3d01e911,0x3d43a142, +0x3cc41623,0x3d0ec929,0x3c1effb2,0x3c811e3f,0x3c41f72b,0x3c531ccb,0xbaa07e01,0x3c1e0812,0xbb0ce196,0xbb305c57,0x3b522a1e,0xbc0dac07,0xbc107c1c,0xba192732,0xbbc5d9ef,0xbc160b27,0xbc86f27c,0xbc8bdb5f,0xbcf39046,0xbd072c1e,0xbbd59675,0x3c4ecc9f,0x3ce08c3c,0x3c5c83d6,0x39a34cef, +0xbcaba7ba,0xbd0a182e,0xbcc31ce6,0xbca979a7,0xbb9b76d4,0x3c012c51,0x3c34a856,0x3ce8cef9,0xbbf0818c,0xbb8d25d9,0x3cd1f3a1,0x3c5c3b71,0x3cddb365,0x3cbe89de,0x3ca362b4,0x3b6e6a43,0x3c2544cf,0x3c002a3c,0x3cbb36dc,0x3c34bafa,0xbb82cc95,0x3c6194fe,0xbc35fb4c,0xbbefd80a,0xbc846139, +0xbca13cd0,0xbcb14e43,0xbc9c48c5,0xbd0988ea,0xbd08bcd4,0xbd425143,0xbd387064,0xbd379d8e,0xbd11bb08,0xbcba349c,0xbbf52235,0x3c756390,0x3ca3c9ec,0x3cc2a96e,0x3c9bae18,0x3cbf5c90,0x3cbfd009,0x3caff9a0,0x3c047c99,0xbba3d443,0xbb87fb7e,0x3d1d8d14,0x3aa7fe9a,0x3c898563,0x3c9c60ba, +0x3c46ee49,0x3c959776,0x3b1b26ad,0x3c9f7d37,0x3c79b75a,0x3c98e1dc,0x3c758fec,0x3c31c545,0x3c945ce2,0x3c949db5,0xbb8bfbc1,0xb9a6b941,0xbca5f497,0xbcb572f0,0xbc853462,0xbc642ff3,0xbbdb17f2,0xbb8bb212,0xbb3b861a,0xbb5f611f,0xbc4ab95e,0xbcbc5bff,0xbd07ec15,0xbd1ba4a5,0xbd233c79, +0xbd14ea7b,0xbd03fdcf,0xbd03aff6,0xbcc9a956,0xbc5dbf85,0xbbf698ce,0xbc2f1edb,0x3d03a51c,0x3d337f72,0x3c45a33c,0x3cea1b2f,0x3d3664ad,0x3ce1f060,0x3ce3b8d2,0x3ca23d6f,0x3c5bc144,0x3c443723,0x3c259492,0x3c18a1c7,0x3d284da8,0x3cd1e444,0xbb04f4b0,0x3d10a228,0x3cf76f1b,0xbbb9d008, +0xbb9e5bf0,0xbbc402af,0xbc0ed593,0xbc2d50b0,0xbc2cce54,0xbc123e60,0xbbeac981,0xbb4051c5,0x3aa1c5f4,0x3b8c000a,0x3addd1df,0x3a9d13d1,0x3a35b8e0,0xba2b3806,0xbadd60dc,0xbb8b1733,0xb8d98333,0x3d00b43e,0x3cb95cd5,0x3cd9e59a,0xbb2a284b,0x3b71d41b,0x3d35eff4,0x3ac508e8,0x3ba4ca7e, +0x3d0d1597,0x3d20c523,0x3d325af0,0x3d306e78,0x3d349a66,0x3d430a37,0x3d3e4a53,0x3b24d812,0xbb5f7b84,0x3d4e9f75,0x3c08906a,0xba86be71,0x3c99f4cb,0x3c7c09d6,0x3c4e0eb6,0x3c3bd636,0x3c3d8d26,0x3c2e919d,0x3c1372bf,0x3c338b3f,0x3c45e9e9,0x3c6628ca,0x3c73d684,0x3c9031b1,0x3cb5aa63, +0x3ca94695,0x3caba332,0x3cd3e6f9,0x3cb14d74,0x3d38c91f,0x3cb50a3a,0x3c9f84b2,0x3cd6d612,0x3cc6b8cb,0x3c8cc88e,0x3c3ffc0c,0x3ccd6956,0x3ce97b5d,0x3c9976e4,0x3ca7e2a1,0x3c256144,0x3cad20e2,0x3cd94281,0x3cd0d6d1,0x3c65f625,0x3c8be8e6,0x3c9e428d,0x3c3850d5,0xba53aa0f,0x3c918489, +0x3c410eda,0x3c0c2b99,0x3c0ff361,0x3c033784,0x3b6531dc,0x3bc512ea,0x3c547aa1,0x3cdcd23a,0x3d0a9303,0x3d3eb2a4,0x3d7bc03b,0x3d6248cd,0x3d740ad3,0x3d9e02ef,0x3d4c6451,0x3d7c16be,0x3d230ed7,0x3c9e33ba,0x3cb5743a,0x3c49d3f4,0x3c8df3ad,0x3c60a848,0x3c6ed6d7,0x3ca4a527,0x3cead280, +0xbba1cf10,0x3c93f4fe,0x3cb2733e,0x3c454e5f,0x3c33f57d,0x3bdcdf6c,0x3b9f8a7e,0x3c40332d,0x3b6a8971,0xbb08ada0,0xb9c9da70,0xbc489f9f,0xbca43c5f,0xbca68da7,0xbcbe1813,0xbd01f01c,0xbca16dbb,0xbc3ce092,0x3c46834e,0x3c9b5b2d,0x3d1ba2db,0x3d80f887,0x3d5af96e,0x3d585abd,0x3dbbced3, +0x3d796f33,0x3db9523c,0x3d574cad,0x3cd6e572,0x3cc4bc1f,0x3cb4e495,0x3c4b7961,0x3c38fb42,0x3ad5118a,0x3cd82241,0x3cf14139,0x3c72820d,0x3ccb4486,0x3c2a4d91,0x3cf66b7b,0x3a851397,0x3bb365ad,0x3ba93498,0x3c13f699,0xbb688546,0xbc785ddc,0xbbc4c89f,0xbc4e1edd,0xbcefcc3b,0xbce2dbbb, +0xbce5a00a,0xbd24a960,0xbccea232,0xbb66cfe9,0x3d1feaa7,0x3d6e0575,0x3db2d6e6,0x3e01dbc9,0x3de7e9bb,0x3de9dbbc,0x3e374f1e,0x3dd87640,0x3dab557c,0x3da4c196,0x3d65e696,0x3d441aa7,0x3cda4003,0x3cf94eb1,0x3cf31fa4,0x3c8b71e6,0x3cf22f47,0x3cee8e03,0x3ca3a7dc,0x3cd811a3,0x3cb7e183, +0x3cb1a771,0x3bc8c06f,0xbb388d8d,0x3b7dfa19,0x3c9f3315,0xbafcf105,0xbcbfeb71,0xbcd9ed19,0xbd523315,0xbd85385c,0xbd8a8e3f,0xbd8a43a0,0xbda24a91,0xbd5a3426,0xbcbf5cb2,0x3caed8eb,0x3d0af4fe,0x3d8378c0,0x3db778d1,0x3da6f7da,0x3d8ec400,0x3e24cd77,0x3dd39966,0xbbe69797,0xbd688a62, +0x3d4983b1,0x3d4e5070,0x3d002dee,0x3cc57a72,0xbbaf7d23,0x3d218edd,0x3c9c2528,0x3c94af78,0x3c1f398f,0x3cc78d40,0x3cd550d6,0x3cd7ffb1,0x3c7402f7,0x3c24f812,0x3bdfb9d2,0x3c539186,0x3b901572,0xbc15fb37,0xbd056ba0,0xbd7393ac,0xbda2506d,0xbdfcfddb,0xbe294cfc,0xbe2e3825,0xbe268328, +0xbe225610,0xbe19fdb9,0xbe12bdb0,0xbe155666,0xbe20918d,0xbdeac101,0xbdee14f5,0xbdaaea42,0xbd7dc49d,0xbe61baf7,0xbd99e9e5,0x3da9c313,0xbc12790b,0x3d0b3428,0x38d3d4c6,0x3d22a1dd,0x3cb78c6b,0x3d01f15e,0x3ce994d8,0x3cbf6f17,0x3d01e0a8,0x3cc7f2e4,0x3c97071e,0x3bd96043,0x3b192feb, +0xb96b259a,0x3c3456eb,0xbb65f232,0xbd88819d,0xbdc93bf5,0xbe1fa957,0xbe4c9b11,0xbe8c1d5b,0xbe9bf2ef,0xbea30733,0xbe8f449d,0xbe73de9c,0xbe359787,0xbe2ba33d,0xbe3ceb7e,0xbe751bc7,0xbe77837c,0xbe550a6a,0xbe26586c,0xbe455f52,0xbd58ace9,0xbde56d92,0xbe199bbc,0xbd3bbd7d,0xbd0257c1, +0x3aa8621f,0x3c900ee1,0x3be7166c,0x3d2733a7,0x3d327732,0x3b7346eb,0x3d395e13,0x3d19b36e,0x3d1e0a6a,0x3c2390f8,0x3a474611,0xbb400923,0xbc92becd,0xbd529a19,0xbd90adae,0xbdde19e1,0xbe112725,0xbe02d989,0xbe174496,0xbdf4d838,0xbe10ebd0,0xbd129d47,0xbbd5e97c,0x3dd8c5d2,0x3d7fec7d, +0x3d09fd59,0xbe1c088d,0xbdfc400f,0xbdec148e,0xbd93b9a3,0xbcf69fe2,0xbde39140,0x3c50fc19,0xbcff105b,0xbd03bccf,0xbc46b42b,0xbbb9b46f,0x3b1caeaa,0x3bd2c489,0x3ccc52e1,0x3d104d89,0xbc57266c,0x3d039bea,0x3cd87c93,0x3cddc0b3,0x3b9c5aea,0xbca71e8d,0xbcef6170,0xbce487b0,0xbd5f383e, +0xbd9f2bcf,0xbd3e23f4,0xbd455dd7,0xbd1f893b,0xbd100824,0xbce2c290,0xbd6975ab,0x3cbe22fc,0x3c6e72dd,0x3d4b1989,0x3cc6029c,0xbcd9badf,0xbde104a4,0xbe00903b,0xbe16796e,0xbe3585b8,0xbe42b073,0xbeac104c,0xbd4ce739,0x3ccdff16,0x3ce38cfa,0x3bef3549,0xbc00b4bd,0x3c9d99b5,0x3d016608, +0x3cac11d6,0x3c57fcaa,0xbc3d587a,0xbb482e84,0x3a360bd5,0x3a347cf4,0xbc9c6304,0xbd218d05,0xbd5e9537,0xbd4d84bf,0xbd669298,0xbd035c0e,0xbc6c3534,0xbc183a1a,0xbc1a2daa,0xbd0f8cee,0xbd639d6f,0xbdc4c1e7,0xbdb8dc8e,0xbe0a865c,0xbe8a3cb7,0xbe7774de,0xbe6dc0e1,0xbe238a45,0xbe4bf657, +0xbe521bf8,0xbe5fa217,0xbeae5e24,0xbe6bfcf1,0xbe1ad7a2,0x3d387cfe,0xbcb5e205,0x3bff5e3a,0x3b87d07a,0xbc04c068,0xbc94dfc3,0x3b68a388,0x3b2c1680,0xbc61d9b7,0xbc3b47d0,0x3a68ea13,0x3c2a198c,0x3bad5f27,0xb96e9a6e,0xbb8f4084,0xbd067371,0xbd43a6cb,0xbd459a8f,0xbd39001e,0xbd613fe2, +0xbd093f76,0xbd35c6f1,0xbd68f5d6,0xbd9f9a21,0xbe15d0fb,0xbe305c76,0xbe449d05,0xbe2a0f6f,0xbe151b9c,0xbe2deef8,0xbe045b08,0xbe0a318a,0xbe15ed46,0xbe33092d,0xbde829f3,0xbe03f2d8,0xbca0d67d,0xbc95f4c9,0xbcab8990,0xbb7c57c8,0xba259255,0x3c11d659,0x3b5bd70e,0xbbe6e50d,0x3bb00993, +0x3b030768,0x3b9275ad,0xba27ac22,0xbc1c8b5f,0xbc83575d,0xbcd1ca65,0xbb85b1a1,0xbc0e2868,0xbb3cec9e,0x3c117f10,0xbc66ffb6,0xbd6969f5,0xbdfef1f3,0xbe1710e0,0xbdff0686,0xbdacae86,0xbd5e6b6d,0xbd81571f,0xbd3dcce2,0xbd573430,0xbcf07eb0,0xbd466bc2,0xbd8096f9,0xbd481129,0xbda86fb8, +0xbd0a45a7,0x3b83b0ee,0xbd0b13b4,0xbc9e2909,0xbccee681,0xbc13c972,0xbbe2bc8b,0x3b0611f7,0xbb826b30,0x3bad71eb,0xbba2a201,0x3c7c41ea,0x3c20fbbe,0x3c9000d9,0x3b9830bd,0x3bf0002e,0x3b8662ed,0xb8e866d5,0x3a8d73d1,0xbc4a2373,0x3b31da6c,0xbcaed50b,0xbd1169ce,0xbd7a6f4e,0xbd8cceb5, +0xbd86d7ae,0xbd614745,0xbd24433d,0xbce698da,0xbcc48334,0xbd02386e,0xbd1cf092,0xbd1f66c5,0xbd0d8d5d,0xbd10f0a4,0xbc8095a0,0xbc67bded,0xbcb8ec9c,0xbcce0a6a,0xbc78d049,0xbc7f1663,0xbc1d3691,0xbc2c148e,0xbb9dbc03,0xbc3b9cf5,0xbc31efa9,0xbcfc6860,0xbc87d9a7,0xbaaf343f,0xb9c434ba, +0x3bf90b19,0x3bfe71cc,0x3b47fffc,0x3b4e032a,0xbccdf1a6,0xbac35f3e,0x3c2f1f48,0xbc08da5b,0xbb8d5e15,0xbb3bfb1a,0xbbadd634,0xbcbde0c7,0xbd03f1e3,0xbd43622e,0xbd80280b,0xbd8b978b,0xbd97c1ca,0xbd9c3024,0xbd880e42,0xbd75d4ae,0xbd62158a,0xbd2fff59,0xbd4d01ca,0xbd424ebb,0xbd0d46f1, +0xbd2a2f76,0xbd58a36a,0xbd355bfc,0xbd4834a0,0xbca6286e,0xbcceafa7,0xbce995f4,0xbcb6a39a,0xbce33ee4,0xbd0a26a0,0xbd05e850,0xbd3866df,0xbd1aa512,0xbce37d73,0xbcdce5cb,0xbcc5bc08,0x3b56f68a,0xbb94b0e5,0xbc4ac064,0xbcb2c6aa,0xbd0e6695,0xbd29065d,0xbd2b70dd,0xbd23d0f3,0xbd14b9c5, +0xbd0f2c1d,0xbd2de0f8,0xbd30161d,0xbd685f02,0xbd629e57,0xbd3ba2ad,0xbd3679b9,0xbd49b1a1,0xbcf3e634,0xbd08f2b7,0xbd586147,0xbcf59814,0x3c8da5db,0xbd49ebc1,0xbd2246a9,0x3b2b43e2,0x3b8b01c0,0x3bd04b02,0x3c0b6f6c,0x3c2a6826,0x3c82b9ff,0x3c9333b8,0xbd1cce56,0xbd3ee376,0x3c6b5f96, +0xbd00038f,0xbd25883c,0xbc991425,0xbcd47541,0xbcdae7b9,0xbcd496e9,0xbcc9b9a1,0xbcd47f38,0xbcf6457e,0xbd0c69a3,0xbd1d6a83,0xbd322217,0xbd3dc265,0xbd3723fc,0xbd419f89,0xbd317c7f,0xbd23449d,0xbd219f5c,0xbd139520,0xbd57b2fb,0x3d1ce99a,0x3ced70d8,0x3cc1a19e,0x3d809944,0x3d4fe30a, +0x3c592b46,0x3d4e2ef7,0x3d3fa77c,0x3cd49aa1,0x3cc6214c,0x3c9aa175,0x3c628929,0x3c5cd723,0x3c45f980,0x3c85e1d1,0x3d42f85c,0x3d5264be,0x3c132971,0x3d27954d,0x3d426df4,0x3c44190f,0x3c9883da,0x3ca4ac58,0x3c94e695,0x3c919bbc,0x3c93a965,0x3ca432cb,0x3ca0db2f,0x3ca7c8a9,0x3ca66a82, +0x3cb253b3,0x3ca049d0,0x3ca4de66,0x3cb89a2d,0x3cd6efa2,0x3d034fbe,0x3cfd8a5d,0x3d814fa9,0x3d9dc3aa,0x3d652243,0x3d2caec2,0x3d23b5d6,0x3d369c51,0x3d43ba43,0x3cd039a4,0x3cbafdd9,0x3d3f349b,0x3d0cb0b5,0x3d45c43b,0x3d252b63,0x3d1d018d,0x3cea9ca8,0x3d151256,0x3d1032ea,0x3d061046, +0x3d3692e2,0x3d0484ba,0x3ca797f6,0x3cd0dd55,0x3c902982,0x3c9346d1,0x3c8da2ff,0x3caaf809,0x3c875a5e,0x3c3f7d1b,0x3b05cecd,0xba48e773,0xbc0be3c9,0x3b50cbc1,0x3c9c1e53,0x3d1da9ee,0x3d8a0ca9,0x3d925d04,0x3d98bd62,0x3d9fa600,0x3d9e9a87,0x3d891929,0x3d49ace0,0x3d4c3613,0x3d44b286, +0x3cb74224,0x3d2eea78,0x3ceb7919,0x3d581063,0x3d109a96,0x3cdf8a28,0x3d44a657,0x3d02b9a7,0x3cdfc024,0x3cd9c0e5,0x3cbf899f,0x3cde327a,0x3c5391ef,0x3c5baa96,0x3ca3d00c,0x3c159757,0x3bd651bf,0x3b5fe4d8,0x3c64e2ce,0x3bc60e0f,0x3b89479c,0x394b689e,0xbbc352b7,0xbb40b807,0x3b2f0292, +0x3d02362e,0x3d5c5351,0x3db5a92d,0x3daff054,0x3de14fbf,0x3dfae66e,0x3db367d9,0x3d882311,0x3d6d8b40,0x3d377244,0x3cdf8fd0,0x3c934860,0x3caf6f29,0x3cdebb04,0x3c7ef99a,0x3cabb43b,0x3d17a77f,0x3cc8dc63,0x3cb047f7,0x3c243313,0x3c0b090b,0x3caa0fa1,0x3cbc07ab,0x3c0e68d4,0x3c399fb0, +0x3c64e5cf,0xbaade6c1,0xbbbb4148,0xbbd63635,0x3a5355da,0xbc8d0823,0xbcf46dee,0xbd525903,0xbd8ddbfb,0xbd89d576,0xbd2cb7b4,0x3c119d0e,0x3d652ca1,0x3e07a407,0x3dfdf6f8,0x3da9118e,0x3d8d46a1,0x3d9e4ffe,0x3d6cc51d,0x3d35eef7,0x3d596678,0x3d0b46da,0x3b226303,0x3cc62046,0x3d07e729, +0x3c2d1b4c,0x3ca1eb7d,0x3c86d240,0x3c920ad3,0x38bb7835,0xbb23af07,0x3bcd5cea,0xbc9af0d6,0x3cab216b,0xbbc61fe9,0x3bacbd9b,0x3c86e735,0xba873805,0xbc390bbc,0xbcaea999,0x3b2ed5c4,0xbbd96303,0xbca8394e,0xbce85982,0xbd547573,0xbd0f178f,0xbbd3b5fc,0x3d303c45,0x3dbe578e,0x3dfea0a1, +0x3de22e08,0xbd2480c2,0x3d300ca2,0x3dd23aee,0x3dce9e74,0x3cd32046,0x3c00a647,0x3c55a564,0x3c58b78c,0x3d02eec5,0x3d24fb39,0x3c970fd4,0x3cef3f40,0x3c8f2b20,0x3d0cef70,0x3c7928a3,0xbb6a0ac2,0x3c8e4f39,0xbc57e30e,0x3c5196e6,0xbc77b55f,0xbdb584e9,0xbde8b394,0xbe35c866,0xbdf98273, +0xbde4b4d5,0xbe54136a,0xbe4d86be,0xbe1cfa75,0xbd3147b7,0xbcd7fe48,0xbcea3d7c,0x3b953837,0x3b8eb0a8,0x3c0eec8d,0x3a9c05ff,0xbd43ebcd,0x3d906a02,0xbda1b7b3,0xbdc2fbad,0xbc091a10,0x39c5f13b,0x3cf86ed7,0x3cfaf231,0x3d6cead5,0x3d4399b7,0x3d2eeb25,0x3d05a66f,0x3cfea9cf,0x3cc065b6, +0x3c9b56ed,0x3c00e15f,0xbb9ee3e3,0xbbcc0482,0xbc95309c,0xbd277a80,0xbcfec0c2,0xbcaed2e9,0xbc68fcea,0x3c496675,0xbd84c27b,0xbd9ff040,0xbd1bb538,0x3caa4396,0x3d4b2493,0x3d84c03b,0x3e197ac8,0x3e35b3bb,0x3e10385b,0x3e723728,0x3e5c3000,0x3e38e8ae,0x3de91232,0x3d934682,0x3ce75d91, +0xbc0f5af0,0xbc8e7b6a,0xbcd8221a,0xbc0d63b5,0x3b7cd342,0x3cb2415e,0x3d02b55b,0x3d36f006,0x3c21a516,0x3d24e1b1,0x3d0f3357,0x3d0d5e97,0x3c5b1dc6,0xba030f2e,0xbc9784ca,0xbcab14f5,0xbc9e6f20,0x3b341be1,0x3cd23706,0x3d3db653,0x3daf431d,0x3dd061fd,0x3df9dca0,0x3e058984,0x3e1e960a, +0x3e285ff7,0x3db4c3a2,0x3e0263e4,0x3e232111,0x3e50c3b4,0x3eb2aa63,0x3ea531ed,0x3e372de7,0x3dba6813,0x3d99e5ed,0x3d407e00,0xbc85c862,0x3cf3f95e,0xbbf1ac13,0xbb8b9a2e,0x3b911a90,0x3cb77d1e,0x3c8235da,0x3cb36759,0xbbaa4532,0x3ccf164d,0x3cde9a89,0x3d24e0f2,0x3c8881cc,0x3c73e581, +0x3bd5299f,0x3b856396,0xbc775689,0x3be5d842,0x3d351b37,0x3d49dd97,0x3d9162b7,0x3df443e2,0x3e153902,0x3e19d9cb,0x3df9bf1a,0x3db6c3f2,0x3c3ef6f7,0x3cf5274c,0x3d807526,0x3e04e14d,0x3e984a28,0x3eab0705,0x3e7c2408,0x3e2707b1,0x3e5a20a1,0xbc00b9c2,0xbce1069e,0xb9e1d84f,0xbc8083c1, +0x3cd850cd,0x3c6a7713,0x3d12eba3,0x3cac6b50,0x3c789b37,0xbba939c1,0x3c318448,0x3c68a08d,0x3d107998,0x3cb55322,0x3bc8ee39,0x3b93b271,0x3c019b00,0xbc4f3e50,0x3ce4ed64,0x3d33e27d,0x3d4f0735,0x3d85d1a1,0x3d3fd396,0x3d3205b9,0x3d874d89,0x3d2cd110,0x3d639c8d,0x3e04bd20,0x3dcaf36b, +0x3e01091e,0x3dab7ef6,0x3e7ef395,0x3ea578aa,0x3ec81b74,0x3e8ef88a,0x3e832aab,0x3de2cc18,0xbddf1d2d,0x3d3de407,0xbc4cad9d,0x3c278623,0x3c47819f,0x3cfa5dcf,0x3c5ff304,0x3c8b12dc,0xbbdffa3f,0x3cabef95,0x3cbdd670,0x3cf80a73,0x3c2e64d3,0x3c4120de,0x3bc5e686,0x3d06b2a8,0x3d1e9c87, +0x3cb49e8f,0x3d791ec8,0x3c9c627a,0xbc4997b6,0xbc0b74a3,0x3c812e63,0x3d822751,0x3d6d4a43,0x3dd762b3,0x3e5ca452,0x3e250fc6,0x3e168979,0x3e2788f6,0x3e7dbeed,0x3e8851cf,0x3e94de00,0x3e508d9d,0x3df5e64a,0x3da23006,0xbcbd1da6,0xb800a794,0x3bdc0569,0x3c16dce8,0x3ca47b74,0x3c4224e3, +0x3ccc76fd,0x3c7dffdc,0x3ca7eeef,0x3c30c8cb,0x3c40eaac,0x3c98698f,0x3c9f8327,0x3ce85c4f,0x3d0791c3,0x3d141f99,0xba80c9fa,0x3d42d203,0x3d6d95a2,0x3d71d93d,0x3d934ea5,0x3d795880,0x3d4622dd,0x3c8a0511,0xbc52f2a6,0xbd15b187,0xbd143621,0xbcd5bdcd,0x3bc85c0a,0x3d220ee9,0x3dbf5f05, +0x3e10b0b1,0x3e2659ea,0x3e085b05,0x3dbf6f3c,0x3b8c388c,0x3d2849f8,0x3ccd90e8,0x3cc9caa8,0x3d2a3466,0x3ccd9a3a,0x3cce1bc5,0x3ca56a08,0x3ccdd755,0x3c7df3e8,0x3c81b261,0x3c4afee8,0x3c8f533f,0x3cc7f987,0x3c9ee6dd,0x3c1024d7,0x3cd958a6,0x3d183397,0x3cceb121,0x3d5d750e,0x3d23607d, +0x3d05a9db,0x3cbfd0a4,0x3c357331,0xbc332fc0,0xbb448dbc,0xbb94fb08,0xbbba83cc,0x3bf716e5,0x3c94cf05,0x3d070bcd,0x3d69bffb,0x3d899602,0x3dbb4af3,0x3d6fd7f4,0x3d5b9aed,0x3d9e3ebb,0x3cb76107,0x3d2555ff,0x3c213d79,0x3bad0927,0x3c7cf218,0x3d147f49,0x3ce6c191,0x3d03429a,0x3cb81325, +0x3d594b2d,0x3cb391bc,0x3d00f4de,0x3bca5cb9,0x3cd44d91,0x3cbdd91b,0x3ce0c37b,0x3cbf8381,0x3d6bb9d6,0x3d11fd1f,0x3d00f2aa,0x3ccf4d6a,0x3c70a84c,0x3bc1a88a,0xba9936d8,0x3c66b4a1,0x3ca0b4a9,0x3cd868a1,0x3d027a94,0x3d159b63,0x3d102402,0x3d2253ab,0x3d4b5341,0x3d8d7fa2,0x3d813f43, +0x3d623cb0,0x3d882e96,0xbd1ac49e,0x3d2592f5,0x3d3a6ade,0x3d0dde04,0x3d804630,0xba67276a,0x3d1fdd78,0x3c39cedb,0x3bb3c93a,0xba0ec05d,0x3c8c29a6,0x3bfb4f9b,0x3cd48ec7,0x3ca337e0,0xba9a38bf,0x3d028f58,0xbbf6589c,0x3c7bdead,0x3c0fbb2e,0x3c4a414a,0x3c063da0,0x3c0fef27,0x3c204be3, +0x3c0c6069,0x3c30e7e5,0x3c8af6bf,0x3ccca6a7,0x3d08c15a,0x3d2bff9d,0x3d675d79,0x3d71f60c,0x3d5a13b2,0x3d4a0f98,0x3d653c73,0x3d3e7146,0x3d82a996,0x3d1b669d,0xbc9ea1f4,0xbd8ea3a7,0x3d2f85d2,0x3b37f201,0xbd7d0854,0xbd9304d5,0xbd8363a8,0xbd72283b,0xbd80c535,0xbd956028,0xbd9a1963, +0x3ba12b8c,0x3d321a0a,0xbd718411,0xbba3417e,0x3d0b8f3a,0x3d30dcc5,0x3d23d774,0x3d1d915a,0x3d19cd46,0x3d118a48,0x3d084a8b,0x3d03c07b,0x3d11d2fd,0x3d22d6df,0x3d2c2391,0x3d368dbf,0x3d389d87,0x3d3df414,0x3d39660b,0x3d3eb03c,0x3d497c28,0x3d4ba3ae,0x3d7f07af,0xbde58c37,0xbda8189f, +0xbde720d2,0xbdab0c9f,0xb9f3b4b6,0x3d8099ea,0xbd9f2c7e,0xbc9665c7,0x3d720939,0x3d8aebed,0x3d956d4e,0x3d806985,0x3d88eb5c,0x3dae7eaf,0x3d881926,0xbc879ac9,0xbd87b698,0x3d923331,0xbb892cc9,0xbd741025,0xbdb7c718,0xbd9fa9e0,0xbda8fc06,0xbda44f88,0xbdad6562,0xbdaf54f1,0xbdab83d8, +0xbda7c66e,0xbda87ac1,0xbda753a6,0xbdafddd5,0xbdad6cdb,0xbdb83335,0xbdb9c832,0xbdba5040,0xbdb61f73,0xbdb7572a,0xbe00c05c,0xbdf3bd5b,0x3da384c9,0xbd493882,0x3c35f1a6,0xbd33b9a7,0xbd2b04c2,0xbca7857b,0xbd41e248,0xbd016716,0xbca190bf,0xbcf18b6e,0xbd3e3cf1,0xbc8f5a1a,0x3d05e075, +0xbd56dbb7,0xbcb85495,0xbd363c9e,0xbc9a1ed4,0xbdcd7183,0xbdc0027b,0xbdcb630b,0xbdcc43d8,0xbdcc597e,0xbdc9a658,0xbde070d2,0xbddc3e27,0xbddd5801,0xbdd997a1,0xbdf2a550,0xbdfa50ec,0xbe1784bb,0xbe222109,0xbe271a67,0xbe1c7e67,0xbe0d5ad6,0xbe2d9fa5,0xbdf0310a,0xbbc3c0f7,0xbda23053, +0xbc5175fc,0xbd0c0de6,0xbb2c6079,0xbd4b4f37,0xba93e564,0xbd3cf781,0xbc19bd51,0xbd8c178e,0x3a1a6ce3,0xbd071880,0xbc8e4424,0xbd1f5f54,0xbd457999,0xbcdbecd0,0xbd4bdc80,0xbd8f98f8,0xbdd968c2,0xbdccf342,0xbdd56343,0xbde5bb4b,0xbdf3d97c,0xbdfb98e2,0xbde9c12c,0xbdea66da,0xbe00bd05, +0xbe0610d5,0xbe1c489f,0xbe3725c1,0xbe44df57,0xbe3f9d77,0xbe3438eb,0xbe2fc9e6,0xbe644828,0xbdce89db,0x3d8e6378,0xbc61d418,0xbbd3d839,0x3b752101,0x3c3ef357,0xbd1c7890,0xbb9d03f7,0xbb195441,0x3ae263ed,0xbb48a92e,0x3b599456,0xbc12be1f,0xba326d34,0xbca2b183,0xbd0bbd29,0xbd10b427, +0xbd1f7601,0xbd59029a,0xbdd1c3b8,0xbdc02556,0xbddbbc03,0xbdf4fd1d,0xbe03651c,0xbe0f0b38,0xbe085052,0xbe08c89c,0xbe107982,0xbe24d8e3,0xbe476f8f,0xbe8344a1,0xbe91e146,0xbe8f6035,0xbe850605,0xbe5c0a6f,0xbe810556,0xbe2c3b15,0x3b3907c4,0xbd481470,0xbcde322f,0xbcc0fa42,0xbbe344e0, +0xbc3f082f,0x3caddaca,0x3c997c03,0xbb005f10,0x3c9541ba,0x3c3f1729,0x3c32d4a5,0xbc13682b,0xbc8d812d,0xbcc647b2,0xbd404d2a,0xbce433a1,0xbd9df264,0xbdc4d9ab,0xbde35806,0xbdd5b6b5,0xbdfa09cf,0xbe1a5fa6,0xbe1dfa59,0xbe1ac00f,0xbe1521de,0xbe2d1107,0xbe35c668,0xbe65f314,0xbe85c121, +0xbe9ccc85,0xbe908d2c,0xbe846478,0xbe8607d1,0xbcef1940,0xbda1fed3,0xbdb862cc,0x3b49cd52,0xbc73f60c,0x3cfc8ac3,0x3b027b5e,0x3b2ca3a2,0xbbefff06,0x3c378581,0x3cc9b4fc,0x3c5c7da0,0x3bc9f013,0x3cd325f5,0xbb5d2884,0xbcae51e7,0xbca5ae55,0xbd2f3415,0xbd9571aa,0xbdea8079,0xbdc6811b, +0xbdb41e9b,0xbe0a7697,0xbe41b614,0xbe25af79,0xbe27a665,0xbe31db9f,0xbe48a202,0xbe46353b,0xbe15a7b8,0xbd90c2a4,0x3c3f8660,0x3d18a29e,0x3d53bfe3,0x3bc4db73,0xbb7f8471,0x3d6e257f,0x3d5dbafe,0xbcfcd327,0xbcd361bf,0xbc73695b,0xbcaedac5,0x3a2802a8,0x3ce533d8,0x3d1b84d4,0x3d2586e9, +0x3c7793ed,0x3c920dd3,0x3c8ecf4f,0x3cc305e4,0xbbd4de76,0xbcef5473,0xbd37c7d1,0xbd92a675,0xbd6f3121,0xbd9bf476,0xbde66fc8,0xbdc0d925,0xbd85f2d6,0xbd54c41e,0xbcc4fa77,0xbcb25443,0xbb3424ed,0xbc5f1953,0x3babe2b2,0xbd3a9a53,0xbcdfd269,0x3d83ca92,0x3cd9dd5d,0x3d2929cb,0x3dc2ba3d, +0x3d1a9ca1,0x3c8cec12,0x3c007ea3,0x3d1fb7cb,0x3c9fab86,0x3bbedc08,0x3af03f35,0x3b84764e,0x3c8f79db,0x3cabd13c,0x3cdfed7e,0x3b0ecf90,0x3c45451d,0x3c3b81f3,0x3d1159a1,0xbc515ed2,0xbc83d5bc,0xbcb609de,0xbce5cc6a,0xbc9569c0,0xbd1ab745,0xbcb002c5,0xbc9ed430,0xbcea4c4b,0xbd4a6ca2, +0xbd7784c2,0xbd8e02db,0xbdaf1a03,0xbd9e7e78,0xbd99b3a7,0xbdd5b433,0xbe147a3f,0xbe1e0120,0xbe46b5e0,0xbe2e64cd,0xbdc32e39,0xbca8273c,0x3cdc8a9e,0x3ce59865,0x3d309469,0x3c59392b,0x3cf2bb38,0x3b67881b,0x3c30aaed,0x3cb3b4a6,0x3c2dc921,0x3c36af28,0xbc08f6a2,0x3b1d337e,0x3c239bc9, +0x3d388e5a,0x3c0bccbd,0xbb37c77b,0x3c12ec36,0x3c7c39b6,0x3ca80501,0x3cb5bf3b,0x3c456e7b,0x3c1450f7,0xbc6f7949,0xbd3b5356,0xbd84f54e,0xbd69c6dd,0xbdd7cc12,0xbdd8c9a3,0xbd640799,0xbdd08120,0xbdf3ff1e,0xbe16ffc5,0xbe4ef2d7,0xbe6d8309,0xbe8b3b4e,0xbd6778fc,0xbd816e62,0x3dba5a18, +0x3cee300a,0x3bd14d7d,0x3cbb7a1d,0xbbab0206,0x3bcfe69c,0x3cff994b,0x3c062a10,0x3b207618,0xbbaedb99,0xbb46e2aa,0x3c2c349e,0x3d2a8624,0x3c9a64e0,0x3cd70c61,0x3d4a7055,0x3cb061e6,0x3cbf2a0d,0x3ad27271,0xbce69379,0xbd635b7a,0xbd517205,0xbd3954e0,0xbcefb75d,0xbb647f8d,0xbd1267ce, +0xbd16e0ad,0xbcba82bc,0xbcc66540,0xbcc3f6af,0x3d5401f9,0xbd8d95f9,0xbe175103,0xbeb012a7,0xbe25f440,0xbe7a1284,0x3c2b6069,0x3e1e4915,0xba2fd908,0x3d1a9e2f,0x3cb95e79,0x3cdee307,0x3b4f4b5d,0x3c1b8b98,0x3bb9f3c8,0x3b3dfde0,0x3ce66f33,0x3ce032ee,0x3c9334aa,0x3ca92a3f,0x3c08c078, +0x3c848e39,0x3bef805d,0x3ca10044,0x3d3d43c8,0x3cc9f55a,0x3d7cdd02,0x3d2c8636,0x3bf36a9f,0xbd11154b,0xbdd60a2d,0xbda4a2e1,0xbdd7e7a3,0xbe380758,0xbe310c25,0xbe19ffec,0xbdebff54,0xbe1adaa9,0xbe220fef,0xbe58ca4c,0xbe54e56e,0xbdf087e8,0xbd8d0ff1,0x3cd8c4f5,0x3bf365bb,0x3c3e4993, +0x3cd06847,0x3ca9f9b4,0x3c1eb3a4,0x3bce135e,0x3c30ac41,0x3b8bc100,0xbb500cec,0xbb07938e,0x3c0139c8,0x3c40e5c6,0x3ca62cd2,0x3c9e1d7f,0x3c9de1b0,0x3d536503,0x3bfd5385,0xbc5e8e5a,0xbc5c2a5c,0xbc8f79d7,0xbce2e696,0xbd133ea5,0xbd95262c,0xbd64b0ad,0xbd5f6a79,0xbd1cf06b,0xbd217e32, +0xbd19db12,0xbd6b6110,0xbd3aabae,0xbd61d623,0xbdb0da39,0xbdcd946d,0xbdd4c4bf,0x3c92ff8c,0xbc412d69,0xbc259574,0xbb003dcd,0xbcd61da1,0x3b0bf5af,0xbb308ca7,0x3c263823,0x3be68c09,0x3cd84285,0x3c31c591,0x3c70ddce,0x3b7fe14a,0x3bf53a14,0x3c278444,0x3c8c6ade,0x3c8bc29c,0x3c5e1304, +0x3d01aa4c,0xbbe1af8d,0x3c6b3c8a,0x3c939e46,0x3b8f4264,0xbc03458a,0xbcb4c7a4,0xbcea5c6a,0xbd1c3050,0xbd4b6b72,0xbd5e727c,0xbd4d2f43,0xbd70c24d,0xbd564eb2,0xbd295d8f,0xbd51f2a3,0xbd14c0d2,0xbcd04b2a,0xbd372c81,0x3d138291,0xbb950924,0x3cb32d06,0x3ce02239,0x3c6dfb32,0xbbb7cad5, +0x3c24652f,0x3c2b22a0,0x3d0ef429,0xbae4a98f,0x3c93ac25,0x3b74aebf,0x3ca5584f,0x3a4e1336,0x38d3120e,0x3b619936,0x3cdb1e00,0xbbd57dc1,0xbb6d8a22,0x3c1a0bc4,0x3c3b52d2,0x3c2658a4,0x3c1f81a3,0x3c4b847e,0xbaa27174,0xbbc24496,0xbc3d488a,0xbc63ca20,0xbc8d9a5b,0xbca53db3,0xbcb90454, +0xbce8e2dc,0xbd10bff8,0xbcc6eb1e,0x3b3a093c,0x3a9245e4,0x3daec75d,0x3c691a10,0x3cae7919,0x3d004b32,0x3c042a44,0x3d51ffe3,0x3c3d9314,0x3d12c8ff,0x3d0bd916,0x3d1f7eeb,0x3cc11dac,0x3d043080,0x3cb3a6ce,0x3cc454e2,0x3d162564,0x3c08d021,0x3cf679a0,0x3bcfe677,0x3c84f70a,0x3c32e142, +0x3c5b2538,0x3c80c6e8,0x3c832bb4,0x3c7de585,0x3c482bc3,0x3b8eb3b2,0xbbac962b,0xbc43a576,0xbcb333fa,0xbcfd9184,0xbcc13a6c,0xbc553f30,0xbbad3df7,0xbbcf2ae7,0xbc47d2b4,0xbcbc817a,0x3c5285e0,0x3d6905d9,0x3d8e928e,0x3bc1dc4e,0x3d23321f,0x3d989ee7,0x3da8b9ca,0x3d974517,0x3d89e4d2, +0x3d8f5420,0x3d9956fd,0x3d97d9a1,0x3d195b60,0x3b839efb,0x3d6c17c6,0x3d20e543,0x3c0e9f67,0xbc4213ce,0xbc0bfa7f,0xbbd6f30c,0xbbb50644,0xbb9655a9,0xbb5232c1,0xbad83dd8,0xbb7b300f,0xbbd88d15,0xbbdf5449,0xbc0a697b,0xbc2c8216,0xbc4f3afa,0xbc4d78e1,0xbc6cb55d,0xbc7a3b71,0xbc5c7f50, +0xbbeaa737,0x3c6fd89d,0x3c6eebcc,0x3d32f46a,0xbcce9a1a,0xbdb6d457,0xbddae07e,0xbbe31466,0xbd85ed05,0xbdf4e897,0xbdf8b3e4,0xbdfa9ef0,0xbdddd9ca,0xbde31700,0xbe02986d,0xbde0cea2,0xbd880487,0xbc8908dd,0xbde9c1ce,0xbda5c29d,0xbcd14a21,0x3d341da5,0x3cbdf3fa,0x3cdbf51e,0x3ce8c1e7, +0x3cea718a,0x3ce05fbc,0x3cc78fac,0x3cc3556c,0x3cbfc142,0x3cbcc9f7,0x3ccbb745,0x3cd57cd1,0x3cca9d93,0x3cee49bf,0x3ce1a4c1,0x3ca5bc03,0x3ca20e3c,0xbbe93a06,0xbc51e5ac,0xbe138066,0xbcdafc8a,0xbdaf0b8c,0xbd1de387,0xbd206be4,0xbd387e2c,0xbb1262b8,0xbd1d3a67,0xbd26c95b,0xbd1dab2b, +0xbc260ad0,0xbd189442,0xbdb5ffab,0xbc80afdc,0xbd59354a,0xbce3b8fe,0xbd945ea4,0x3cd0675f,0x3cf20217,0x3cde7fbf,0x3d1dbd31,0x3d02cc75,0x3cfa4b8a,0x3cff1f57,0x3cf5da73,0x3d08841e,0x3d27d824,0x3d56c236,0x3d7116c7,0x3d46094d,0x3d6f3bb2,0x3d3081e6,0x3bae5ebd,0xbc393927,0xba88f548, +0xbd12e6cb,0xbddf0972,0xbd110e08,0xbd8c2b59,0xbd24bea1,0xbd79963c,0x3b82092c,0xbd1a2407,0x3ce28fbf,0xbd2e17ba,0x3d2496e5,0xbcb70517,0x3b646781,0xbc92d40d,0xbae4ad8e,0xbc6721a3,0xbd17a516,0xbd21e5be,0x3c3cafa4,0x3d59d3a0,0x3d0c53ce,0x3d758ae3,0x3d4ad92e,0x3d48013b,0x3d1658a6, +0x3d0b1d33,0x3d0e5a0c,0x3d2ac1d1,0x3d6a3685,0x3d8ae177,0x3d512f33,0x3d9099a4,0x3d605427,0xba9d9293,0xbc3ae8ea,0xbcf8fd1d,0xbdc91d46,0xbe1d9c9b,0xbd93fb48,0xbdbf86c6,0xbd6614d6,0xbd08d03b,0xbc591dbe,0x3ba012cc,0x3c34935b,0x38c47f52,0x3c800c89,0xbb9c068b,0x3d0b966f,0xbc2f5190, +0x3ad95603,0xbbfddf5a,0xbca6fc84,0xbd1684b4,0xbc11b61e,0x3d5753fb,0x3cfd905f,0x3d8e71c2,0x3d65bae4,0x3d61018c,0x3d376117,0x3d2605b4,0x3d426df5,0x3d930385,0x3dd5258c,0x3dffba74,0x3db6ca7d,0x3df573e3,0x3d948a55,0xbcfb1e9e,0xbd7e04f6,0x3a6f85e1,0xbd4381ca,0xbe16c538,0xbd9f64c5, +0xbd68da08,0xbd425b59,0xbd0a29fb,0xbc2a0694,0x3c259331,0x3cc25816,0x3cedfc12,0x3c9e7640,0x3cb36926,0x3c959587,0x3c4fc631,0x3b1506b2,0xbcb7e9ce,0x3c4b4a44,0xbd9803f3,0x3c99d76c,0x3d6b0532,0x3d5deb76,0x3db1e1a9,0x3da343f6,0x3d95ddb3,0x3d4ddbea,0x3d1cdd99,0x3d2b3533,0x3d56e165, +0x3dcb6029,0x3df67af9,0x3d8c5162,0x3df1ebac,0x3da86bfe,0xbc9a59c9,0xbcb2cb23,0x3e968a87,0x3e8a5000,0x3d2568dd,0xbae6c05c,0x3d26d536,0x3b1eb610,0x3d666353,0x3cef4c19,0x3c8f3069,0x39dac9a7,0x3ca1c305,0x3bcd78e6,0x3c236238,0x3ccec84c,0x3bda8eee,0x3c6ad727,0xbce7db25,0x3c757c00, +0xbcb16511,0x3ce46d5a,0x3d6e0e7a,0x3d22bc7c,0x3d876842,0x3d55be68,0x3d7ee29d,0x3cd0f8d7,0x3d6d7274,0x3cf8f2c8,0x3b84f24d,0xbd756e79,0xbdc21c65,0xbe15ba73,0xbd9a1046,0xbc030c98,0x3c8714bf,0x3e827998,0x3da8a6f5,0x3dc754e9,0x3c7824c7,0x3dc71d37,0x3c4a6442,0x3d42fe45,0x3c75d20a, +0xbc0b19e5,0x3d270e9d,0x3cef1f9f,0x3c9bc7c4,0x3caa01bb,0x3c9442ca,0x3d1b7e05,0x3c229f0a,0x3cabef1a,0xbc90551d,0xbc0e8abf,0xbd8c23fa,0xbc200a61,0x3dd9e9b8,0x3dc35090,0x3e04e673,0x3e008688,0x3deca290,0x3d9df78b,0x3d84e4bd,0x3d45fe05,0x3d4d2e93,0xbd683ecb,0xbdb71bdc,0xbdcb96e3, +0xbdac5f58,0xbd459173,0xbd2a74dc,0x3cb173c7,0x3d4fe997,0x3db4d540,0x3d882a5c,0x3d71100b,0x3d864b6a,0x3d1b3d30,0x3cf900cd,0x3d4030ac,0x3cf97b81,0x3d16f6e7,0x3b71da44,0x3bd803b2,0x3be42ce5,0x3d53d104,0x3c3a3d51,0x3b5dff86,0x3c0780d5,0x3c18ed72,0x3c41ffed,0x3d1a9ae4,0x3d463b5a, +0x3cd23cdc,0x3c5dabc8,0x3d422ea4,0x3d8ad0a0,0x3d79f31c,0x3d542f78,0x3c058e86,0x3d4fd320,0xbc783a9b,0x3c9578f8,0x3db17984,0x3d0fedc7,0x3c98dc4a,0xbbff7b0a,0x3c4c3149,0xbd2c2a87,0x3d00afda,0x3c238b30,0x3d084d79,0x3c8da2b9,0x3c3fe91d,0x3c8269dc,0x3d5f1f0f,0x3cdc7022,0x3ca76e04, +0x3b8ea995,0x3a832a30,0x3b73695f,0x3d7d557c,0x3cdd8542,0x3c73f1cc,0x3cdcee2a,0x3cb7678a,0x3ca43076,0x3c397bb6,0x3cb0bfc1,0x3a9c5468,0xbc70fbe5,0x3ad16ac2,0x3b5a2cf1,0xbbf4231a,0x3cb54d2f,0x3be80f4b,0x3d4cc480,0x3d8f98d5,0x3df5a786,0x3e4a4434,0x3e1725e2,0x3dd2f2f3,0x3d2cfdbb, +0xbd2d9375,0xbcb1e4c9,0xbd4c30be,0x3cc42227,0x3d01c72d,0x3c16a401,0x3cd32585,0x3ce3bc38,0x3caa3cab,0x3c840f62,0x3a9ed730,0x3a4529b2,0x3c0d3d9b,0x3c4ca50d,0x3d4ed3e8,0x3c9dfcf7,0x3c6afb30,0x3c58ad63,0x3cabe71c,0x3c21a851,0x3ccdfc65,0x3ce9885c,0x3cfbe91d,0x3cbcf4af,0x3c6ba3d3, +0xbccb8ffe,0xbdb32841,0xbdc4b147,0xbdf54e36,0xbe31119d,0xbe0403a9,0xbdb01a53,0xbcc13abe,0xbba4ce36,0x3d4730e7,0x3de0db91,0x3c3ceb82,0x3da9156c,0xbd4b2a9f,0xbde7e176,0xbc08eab7,0xbc804b2d,0xbb808dfe,0xbbe004c4,0x3c8442a0,0x3b689edf,0x3c8faa0f,0x3cc3b55f,0x3ccc4e8d,0x3c914c99, +0x3cb6b282,0x3c5f8297,0x3cb87371,0x3cad7694,0x3c95d0ef,0x3c5af545,0xb93a449a,0xbbbaba14,0xbd01b8f1,0xbcda55e3,0xbd0fd4c1,0xbd0d051c,0xbc3f5629,0xbd41caf4,0xbd4fd7f5,0xbcff92e2,0x39eb1fab,0x3d18c44d,0x3d9ba5d9,0x3dd6fd3b,0x3d9f8d02,0x3c08282d,0x3cf54800,0xbc278e09,0xbd02fb8a, +0xbd5b85ce,0xbc40eaa4,0xbae4723b,0x3c1abae4,0x3c97670a,0x3c34d1d8,0x3cb17367,0x3c1d2622,0x3cbc9ae2,0x3c8129f9,0x3cb38231,0x3c6922d0,0x3c74b60e,0x3bbccbc0,0x3b3ca4ab,0x3b9f4ed3,0xba50bf27,0xbba3d920,0x3b443856,0x3c034640,0x3c4b5dad,0x3ca9009b,0x3c986e6d,0x3c39c097,0xbc2b7477, +0xbc91dfa8,0xbd3dc4bb,0xbb58bc89,0x3cb687a3,0x3d920987,0x3cec9fdd,0x3bb7c991,0x3c28ed03,0xbc898d27,0x3d0b5341,0xbd91b400,0xbd1c5c0c,0xbc99c5ea,0xbcadfc1b,0x3c894de1,0xbb87215e,0x3bcf74dd,0x3c054c06,0x3ca3bd42,0x3c603430,0x3c9dcf9d,0x3bfcdfcf,0x3c948f9c,0x3c47d08a,0x3c31ba0c, +0xb9985767,0x39ff29a6,0x3c10c840,0xbbb9399d,0x3ca60256,0x3c642c92,0x3cb66dc9,0x3c9ee29a,0x3ca34d1f,0x3c93402f,0x3cc6f513,0x3d0103fd,0x3d3c6828,0x3d5f751f,0x3d6131ac,0x3d911647,0x3d1d9b4c,0x3c781c13,0x3c9fc86a,0xbc0f8ca0,0x3c8a2123,0x3c947512,0xbd1106a1,0xbc36f4e1,0xbce2d921, +0xbd01992b,0xbc7ff3c4,0x3bd594d2,0xb9f8ba0c,0x3c2bbb5f,0xbba1ae5f,0x3cdbb145,0x3c556f00,0x3cd37f42,0x3b9d37a8,0x3c7ba60b,0x3c804ce6,0x3c683886,0xbba4fc98,0x3c8b1f1c,0x3cdceca8,0x3c95237f,0x3cbac682,0x3c7a96b6,0x3c4e4c2f,0x3bd30b99,0x3c93c0d7,0x3cef31c7,0x3d1ad452,0x3d033fdb, +0x3cfecbea,0x3d075788,0x3d07fe92,0x3d048a19,0x3ccc6662,0x3c868efb,0x3c477608,0x3be0969e,0xbcbe29c3,0x3c94895a,0x3c316b52,0x3c36ddfb,0x3c9b4930,0xb9d7c1c9,0x3cc09cef,0x3af89828,0x3b0f0546,0xba393af6,0x3c745714,0x3c320e1d,0x3c752100,0x3c58afbf,0x3b9759d4,0x3cc514af,0x3bc04164, +0x3d040026,0x3cc10743,0x3cf1de92,0x3cf16b45,0x3d06632a,0x3d0c8b85,0x3d07289f,0x3d13bbe5,0x3d035e7e,0x3d0b7e7f,0x3d2ebbc5,0x3d4046fd,0x3d5265ee,0x3d2b0333,0x3cf15918,0x3cd82183,0x3cc1f551,0x3c86e6b0,0x3c9f6427,0xbc14ed98,0xbd0105ae,0xbcabccaa,0xbc2e0455,0xbce255fd,0xbcf928f4, +0xbd0c35f8,0xbcd6f0d4,0xbc9eff7f,0xbcb3690e,0xbcd86eb7,0xbcd13949,0xbc952884,0x3b2f277d,0xbc72a0ce,0xbc9285e1,0xba04694b,0x3ca35671,0x3c90155c,0x3c9380bf,0x3c8f059b,0x3c8fae48,0x3c8cf739,0x3c8ced17,0x3ca0b751,0x3ca520c7,0x3cadd24b,0x3ca0d1a9,0x3c8f143d,0x3c9712ff,0x3c98ea24, +0x3c9685fa,0x3c9236d9,0x3c84edb4,0x3c7d8f3d,0xbb5c632d,0xbb6fe74c,0xbc1f39c8,0x3d2ac9a3,0x3d4f18b4,0x3ca7fcc5,0x3cc871b0,0x3d35127b,0x3d2922dd,0x3d2474f7,0x3d1dce24,0x3cf9013a,0x3cfd954c,0x3d10080e,0x3cfc4aca,0x3d4b62ef,0x3cf8eae5,0x3cbd1eda,0x3d485280,0x3cfa3236,0xbc9e8c8c, +0xbc0ad790,0xbc104df9,0xbc113549,0xbc20cea3,0xbc20d1de,0xbc23b110,0xbc26fc81,0xbc1bc83c,0xbc062632,0xbc019d29,0xbc1507af,0xbc12e40d,0xbbfb4bdc,0xbba2e3b8,0xbb030c25,0xbb1fb172,0x3bfde85c,0x3c51f441,0x3c78489d,0xba48e7b6,0x3c762893,0x3c771b4a,0x3cb5ea63,0x3c88d748,0x3b3b3808, +0x3d018565,0x3cd38f83,0x3d0656ae,0x3c632e87,0x3cf39e18,0x3d2abd95,0x3c9b084b,0x3ce71935,0x3c541663,0x3d1f6758,0x3bbbe9ef,0xbc549d31,0xbbafe915,0xbbd3a1e8,0xbc0edba2,0xbc5262a4,0xbc881443,0xbc8b4d44,0xbca455db,0xbcd0e5ad,0xbd05347d,0xbd1d1bde,0xbd04c883,0xbcc4a384,0xbc52c4c0, +0x3bab6b5d,0x3c8905ce,0x3d0710cd,0x3d0e6530,0x3d05e9c5,0x3c7f63ce,0x3c9dcc91,0x3c86bfad,0x3cdd5c65,0x3995959f,0x3cf9f27a,0xbb15c334,0x3d54d74a,0xbb0fa180,0x3cad91b7,0x3d05bc6f,0x3cc8295d,0x3c69c96a,0x3c8eb72d,0x3c875569,0x3cf77b05,0x3b7d9c54,0xbcb3a7b1,0xbbe82899,0xbc449695, +0xbc45c3b3,0xbc719caa,0xbc86fac2,0xbc9664ed,0xbc921870,0xbc7e3e4a,0xbccd7863,0xbcfa48f9,0xbced5df1,0xbc88f159,0x3bad5ffa,0x3d12394f,0x3d25ca69,0x3d886bdc,0x3d35772c,0xbc6cbfb4,0x3a7bd730,0x3c11b574,0xbc14b5aa,0xbbfb9fcf,0x3c170fa3,0x3c2c10fd,0x3c76e922,0x3c528ef4,0x3b25464e, +0x3cbb650d,0x3c903bb9,0x3cc1f41f,0x3bc2fd88,0x3c17d88d,0xbae6b4d0,0x3c9b1013,0x3c8c1724,0xbcc82f7f,0xbb65c645,0xbb3b4cc4,0xbc0d177a,0xbc91b7e3,0xbcb5538b,0xbca1a2f1,0xbcf38d90,0xbd36f0bb,0xbd938eb8,0xbda9b32f,0xbd979c97,0xbd4cc0e5,0xbc6fce03,0x3d5504cd,0x3d9e615f,0x3dea7ddc, +0x3dbe00da,0x3cd4e0ea,0x3cb4f8f6,0x3b1d0546,0x3c2955f4,0x3aeeba3c,0xbb0bb6ef,0x3bbf68df,0x3ccc10a5,0x3bdefc6e,0x3c571c7f,0x3c30bb18,0x3cb2b2a9,0x3b25af41,0xbad55957,0x3b6727f2,0xbcc7aebc,0x3cc64933,0xbb0f2360,0xbcee5513,0xbc845334,0xbc870ce0,0xbcbcfeab,0xbc828fd2,0xbcaf24a5, +0xbcb0d2f5,0xbcd29bce,0xbc67d29a,0xbd32b10f,0xbd45b65c,0xbcf6f09b,0xbc50e4bc,0x3d350064,0x3db922dc,0x3df608c2,0xbd2f02de,0x3ccb160b,0x3e8ebcde,0x3e21ad37,0x3deb27a6,0x3d8701b1,0x3d3788f6,0x3d853bd8,0x3d47dee1,0x3cd0762b,0x3c914600,0x3c1a94c9,0x3b164b86,0x3cd34bbf,0x3c377f1f, +0x3bba6d78,0x3c5236ea,0xbbfd63d5,0x3ccff807,0x3c284ed4,0x3c22b315,0x3d2af391,0x3db711e0,0x3e07933c,0x3de93300,0x3e3b1aee,0x3e156b95,0x3e11ec6f,0x3dd7d5c9,0x3d72ab8a,0xbcb4e6f5,0xbdab5ff5,0xbe1a7837,0xbe1df4f5,0xbdce0850,0xbd850f35,0xbd011cac,0x3d0a46fc,0x3e0caf34,0x3c161841, +0x3db4ba99,0x3d563e50,0x3d6a5ce9,0x3d0165f6,0x3cebe2a6,0x3cfb9885,0x3c5f4cb6,0x3cb89b3a,0x3cc603dc,0x3cd9c824,0x3c9a8e2c,0x3c26dafb,0x3cec0783,0x3ce987f9,0x3d82f0be,0x3d1a5b4a,0xbd0a4735,0xbd16ddac,0xbdd55971,0xbd4b8f4e,0xbceccce5,0xbcd6edb6,0xbcd63a6b,0xbbd6df35,0xbc84f8b6, +0x3da71a9a,0x3e0dda2c,0x3e32c7cc,0x3e4609ee,0x3e14cc83,0xbd1df56f,0x3ca12518,0xbce3b815,0x3cb22c63,0x3d148b25,0x3d2e9e73,0x3d81044a,0x3d17695c,0x3d2caf93,0x3d825114,0x3d1695a5,0x3cd83749,0x3b9e27c3,0xbac3942a,0x3ba993b0,0x3d81fe5f,0x3c942445,0x3c8f3c27,0x3cbdc3b4,0x3ce2372a, +0x3cdd2e78,0xbb5330e9,0xbc00c465,0xbbb7b393,0xbd1d5c1d,0xbd8e837d,0xbdce640a,0xbddb1505,0xbdc711bb,0xbd8fbd95,0xbd891657,0xbca94e93,0x3c827494,0x3e05b5d1,0x3e024562,0x3e083180,0x3d6147f1,0x3d11094d,0x3d052434,0xbc732185,0x3d2f4852,0x3c824d1b,0x3ccbe839,0x3c9dbb2f,0x3cb220a9, +0x3d8134dd,0x3c917d58,0x3bdfbe88,0x3c642a39,0xbbd69b6d,0x3bbf2be4,0x3d89d4ae,0x3c9d5f28,0x3ca1615b,0x3c8968b8,0x3b0859bc,0x3c525d69,0x3c4cb65a,0xbd022f1d,0xbc8f04d9,0xbc106ccb,0xbcf5c5cb,0xbd1043c9,0xbd281f9f,0xbd06f378,0xbc80d18f,0xbd4f66b2,0xbcaf78a5,0xbc0cd859,0x3b413370, +0x3d0a0af3,0x3d45f857,0x3d99165e,0x3db5c2d1,0x3e16f4f6,0x3d861c80,0x3c7ebf1c,0xba7c27db,0x3ce7f7cb,0x3c93d5f9,0x3caea6fd,0x3d1e4672,0x3c139879,0x3b6acc9a,0x3ce7cd8e,0x3c68c92f,0x3cab37ca,0x3d1331d3,0x3cb4709a,0x3c9b6702,0x3bd14ce5,0x3c900946,0x3d022b37,0x3a69a136,0xbc47aaf4, +0xbb4c98a1,0x3b8ff7c6,0x3d074e18,0x3d730828,0x3da71d43,0x3d918e31,0x3d84df86,0x3d9e171a,0x3db244f8,0x3d97f032,0x3a9dce62,0x3d552003,0x3d5aa7cc,0x3c980304,0x3e23f079,0x3da5d9f1,0x3db8e764,0x3d835e24,0x3d3e2433,0x3c91898d,0x3cb686a9,0x3ce9fde3,0x3cff11df,0x3ce12cb1,0x3c81a57b, +0x3c81237e,0x3bd920f1,0x3c0b439f,0x3c533abd,0x3c4c4a3b,0x3c469d7b,0x3ba10e92,0x3c9c258e,0x3c8dc94c,0x3c955580,0x3c3c20f1,0x3c2dd005,0x3bbb61ff,0x3d238bad,0x3d5bfa10,0x3d860c58,0x3d781c28,0x3d640ab9,0x3d51ef03,0x3cf26aee,0x3c64e819,0xbbb8d991,0x3a94f067,0x3cb14526,0x3cd40614, +0x3db20533,0x3d4628af,0x3dc1a95a,0x3d67534c,0x3d3a1b19,0x3d3bd165,0x3d007f2a,0x3cc2977e,0x3d0edb1e,0x3cba0f7a,0x3d0eec1d,0x3bac2996,0x3cda5b59,0x3c804669,0x3c7e4714,0x3c7f41c9,0x3cb14c91,0x3ca30808,0x3c54077e,0x3c15d211,0x3bbcae08,0xbc41756a,0xbbcfe14b,0x3bf0ec04,0x3d5a3887, +0x3d868264,0x3d8d18d9,0x3d2379d6,0x3cddecc8,0x3d252a36,0x3c479d9a,0xbc03435e,0xbd6be80b,0xbcd3c2f0,0xbc2da112,0xbc78e7f2,0x3cac716b,0x3b2bb3a7,0x3cf73e67,0x3d355ada,0x3d16cd07,0x3d12865c,0x3c1ae519,0x3cb979b4,0x3c73321c,0x3ca0a6e6,0x3c040a92,0x3c7a2f90,0x3be829b2,0x3cb1a4da, +0x3c7e2314,0x3c8c5931,0x3c842dd0,0x3cddf91c,0x3cc27d67,0x3c42b504,0x3c8f6a02,0xbc3e72af,0xb998776d,0xbae9daca,0x3c9ad8d3,0x3cf8e8c0,0x3d132609,0x3ce1221c,0x3ca7830b,0x3ca0cfc0,0x3bb7f885,0xbba91660,0xbcf1d06a,0xbbed09f5,0xba3eb903,0x3b83d79f,0x3b6311db,0x3b9d04d3,0x3b9ec7db, +0x3cc8f46d,0x3c8c3628,0x3cf4735c,0x3cfee06b,0x3cce5dc6,0x3c53cf08,0x3cb40a5b,0x3c687494,0x3d23b766,0x3c676526,0x3cb98e34,0x3caa01d7,0x3cfc05e9,0x3ca5ce98,0x3ca01e28,0x3c21f12b,0x3cf8d644,0xbaf255a2,0xbc508aee,0xba81067c,0xbbd85822,0xbaefa26c,0xb944ebf1,0x3c2ecb9c,0x3c460e42, +0x3c40a511,0x3c1dc351,0x3b833020,0x3b32aeb5,0xbb5f42bc,0x3b994a40,0x3c5e9e23,0x3cc76453,0x3c994405,0x3c4f22de,0x3ca6f238,0x3d0e078a,0x3cbab98c,0x3d03eb05,0x3cfcee40,0x3d11ab35,0x3d091009,0x3ce2bcbd,0x3d175913,0x3d0a5dbd,0x3d23250a,0x3ce90548,0x3d016572,0x3cfdfbd3,0x3ce749c8, +0x3d0f1888,0x3c6b2a8b,0x3d138209,0xbc72146b,0xbc4d43da,0xbc30f5a2,0xbc1bae99,0xbbe47a2f,0xbbdc62e9,0xbc14edce,0xbc799a65,0xbc9e5661,0xbc8e5ca4,0xbca2a7f0,0xbca99eb2,0xbcb40af0,0xbc759b0f,0xbc76ec7e,0xbc347d1f,0xba22457e,0x3baed18c,0x3ba4fad5,0x3cdbafa6,0x3cf89dc5,0x3c30f06a, +0x3cda9c2a,0x3d08b493,0x3ca55ede,0x3cb303b4,0x3ca818b9,0x3c958143,0x3caa49b6,0x3cd1651c,0x3cdbc236,0x3d064828,0x3c98e972,0x3c978961,0x3cf4a10a,0x3c8e8717,0xbbb95a56,0x3b108260,0x3ac2c057,0x3a87966d,0x39774c0d,0x3a0163c4,0x3b0ed99d,0x3b75725d,0x3b9043d3,0x3b6653ba,0x3b8a1668, +0x3b92d46f,0x3b908bd4,0x3bc37162,0x3be628a2,0x3c176c53,0x3c11268c,0x3c6d0a9a,0xbcc7701e,0xbc8fda17,0xbc69099c,0xbd470fd4,0xbd1ec6ca,0x3a8775bc,0xbd188c4c,0xbd1c0f97,0xbc6c4c5b,0xbc2ba3a9,0xbb999948,0xb9aae057,0xba27afaf,0x3a65f888,0x3a30f974,0xbd25f62e,0xbd2971c4,0x3b9e2ec8, +0xbd142f1f,0xbd1e6946,0xbb6b0cb1,0xbc345dba,0xbc4e4ca0,0xbc402392,0xbc57eb43,0xbc6e0c26,0xbc88fd72,0xbc736c49,0xbc6d9613,0xbc56e8ac,0xbc805349,0xbc844119,0xbc9cbae5,0xbca59e7e,0xbcb144e5,0xbcb62235,0xbcaf3c9a,0xbd108a87,0xbd04de72,0xbc645aae,0xbc84ccc4,0xbc336d04,0xbc91bd78, +0xbce3fb48,0xbc776c75,0xbc0ef3d8,0xbcf53501,0xbca6aa91,0xbd03f439,0xbc900216,0xbc6115f8,0xbc686491,0xbcae838c,0xbcc69bed,0xbc968477,0xbd11c548,0xbcd49971,0xbc041c93,0xbc6f3665,0xbc30c0af,0xbc6e6067,0xbc86e757,0xbccf92f2,0xbca492e4,0xbc85fa05,0xbc3b821e,0xbc86d615,0xbc964612, +0xbd04412a,0xbd290e87,0xbd47aea4,0xbd47c0a7,0xbd3d9f56,0xbd5f129d,0xbd07c68f,0xbc905380,0xbc4142cb,0xbc180602,0xbc52b674,0xbc803195,0xbbe3e539,0xbc8b21f7,0xbb8cb048,0xbd09ca40,0xbc07b7ba,0xbb839562,0xbc52c1b4,0xbc2cdd1c,0xbc23672c,0xbc97173a,0xbc50559f,0xbcb737e6,0xbc2299e7, +0xba4fa32b,0xbc5ea5ff,0xbc0561a8,0xbc9665eb,0xbcbd7106,0xbd1e875a,0xbccdf054,0xbcaeaf8e,0xbc7b9934,0xbcbdbc86,0xbd186bf3,0xbd6c01a4,0xbd9354b8,0xbda7cfac,0xbd9f2011,0xbd9441ca,0xbdc2096f,0xbcc519d3,0x3cd93050,0xbbf37cdd,0x3cc34398,0x3c053be1,0x3bb6af58,0xbc079dbd,0x3a82234a, +0x3b02439c,0x3b4c5dff,0x3c06b709,0xbb7ed01a,0x3ce2559f,0x39facfa2,0x3bad1a87,0xba8e6220,0xbbb6cf9e,0xbcac6f18,0xbc57c0f5,0x3bdf7bb9,0xbb929040,0xb9631b76,0xbc522a19,0xbc9ccbee,0xbd3a8b59,0xbcb4c7c3,0xbc1be819,0xbaa3b77f,0xbc375103,0xbd09f1b0,0xbd92947f,0xbdce9975,0xbdf4c3c8, +0xbdef91ef,0xbdcd79e8,0xbe01e65c,0xbd29079d,0x3d21819f,0x3d0f1bd2,0x3cbc3023,0x3ca52a7e,0x3ca350a2,0x3c0a8810,0x3c569e78,0x3c3eeac3,0x3c5e7691,0x3c5e64c3,0x3c9b6b4e,0x3ce3733f,0x3c794dc6,0x3c1481fb,0x38aac91c,0x3cfcd8af,0xbcd0ffec,0x3bc870c0,0x3c2b3a2a,0xbc191d14,0xba4e0313, +0xbca2b623,0xbcfeb65d,0xbd6dbff3,0xbd0021cd,0xbc88be7f,0xbbb1f1a1,0xbcc58e97,0xbd89a8c6,0xbdee959f,0xbe168513,0xbe2b97a6,0xbe12e9ba,0xbe1411e3,0xbe062876,0xbe04a20c,0xbddae923,0xbca10343,0xbce0cae6,0xbbad0d3c,0xbd01597a,0x3c681ce5,0x3cc3cc70,0x3d1155ce,0x3cdf84c4,0x3b77aca7, +0x3bd45cbf,0x3cbbe932,0x3c266348,0x3c823af5,0xbcaefcae,0x3ca4925c,0xbbe5eb9a,0x3c3854cd,0x3cff5ad5,0x3bff8450,0x3c52b54f,0xbd7dfa61,0xbd9353e7,0xbcdeba79,0x3aaf5141,0x3ca2282b,0x3d084abc,0x3cdd01df,0x3d77dc96,0x3df29d90,0x3d629705,0x3c740982,0x3c555f5f,0xbde625b9,0x3c45bc7d, +0xbca205e5,0x3b67860f,0x3c05a5e2,0x3a5c1c7f,0x3c1f0c16,0x3d265cc1,0x3c9e2576,0x3d01bafb,0x3d02181e,0x3b508542,0x3cab94c1,0x3ca1f9d9,0x3ce99703,0x3c171988,0x3c7391e7,0x3b7a99cd,0x3c875876,0x3ad95474,0xbcad029a,0xbc605f3a,0xbd3b0cc9,0xbd58520c,0xbd9929a8,0xbdc4faa5,0xbe0d86ef, +0xbe1ede44,0xbe20681f,0xbe194e81,0xbda34e87,0xbd82bae5,0xbcd2d260,0xbc82e959,0x3c9a0f5f,0x3d11521e,0x3c4d4c67,0xbb818ee3,0xbd4db789,0xbd4b969c,0xbca43fbb,0xbcd53b6c,0xbb2cefac,0x3c1b80d8,0x3d37a826,0x3cb1f78d,0x3c6ebd18,0x3ab3cff7,0xba06beaf,0x3c013db3,0x3d82c3ce,0x3c362e26, +0x3b607feb,0x39e3d88e,0xbba78cd4,0xbc89ae43,0xbc7c3026,0xbd2452a9,0xbd928cbe,0xbd9d8342,0xbdd95a6b,0xbdddd83d,0xbde5208a,0xbd9d1b60,0xbd472152,0xbcc966db,0x3cc7dac4,0x3c9402c0,0xbd1be0bd,0xbde57686,0xbe0863f6,0xbe043ad8,0xbd074313,0xbd86f80b,0xbcdff117,0xbc1fa546,0xbd27d848, +0xbc2c275a,0xbc781369,0xbb802331,0x3d4b8903,0x3bfb5803,0x3b214f1d,0x3bfbdf9e,0xbbbcc3a7,0x3be92ad6,0x3d6ed9ed,0x3c1d3a67,0xbc399bfc,0xbc8530fc,0xbc07d848,0xbc96b979,0xbce7f661,0xbadbaa4c,0xbca12767,0xbd1361ad,0xbd08978b,0xbce27d93,0xbcd0ef0e,0xbc95585c,0xbcb406b7,0xbc66c372, +0xbd3980b3,0xbd98d035,0xbdfbaef5,0xbe55ceb9,0xbe7be82d,0xbe8dd05e,0xbe184c72,0xbe368872,0xbd17ac15,0xbc7613a2,0xbb5a2ef4,0xbb6af7d2,0xbba1a1ac,0x3bf69102,0x3c7ca4fd,0x3b8d37c7,0x3b500c98,0x3ca7456f,0x3ba5f90e,0x3c4b9e56,0x3d00acde,0x3b3be490,0xbb15ac54,0x3a548995,0xbb97e699, +0xbb8960e1,0x3c1cb386,0x3c791c3f,0x3c1d2249,0xbbd8791d,0x3ade0486,0x3b3ae03c,0xbbec6028,0xbcd66fe0,0xbd7cf0ae,0xbe0a2702,0xbe1c2751,0xbe292136,0xbdbe5936,0xbe2a5350,0xbe4b4743,0xbe945000,0xbe66ea11,0xbe43e3d4,0xbdd494f5,0x3cbdd25f,0xbcefbc6e,0x3b3482b9,0xbb954e22,0xbc39bfd2, +0xbb4a4326,0xbb34a2e7,0xbac3a476,0xbb7ce4b5,0x3b714318,0x3c05f22b,0x3bf30ae5,0x3bd446a4,0x3bd0bd5e,0x3c20887d,0xbc70f3d2,0xbcd66b49,0xbc854055,0xbc8fb6c8,0xbb246ca4,0x3cbcd3f6,0x3b9e9f3e,0xbc9e4103,0xbd6af06e,0xbda5e814,0xbdd55d72,0xbe10f67e,0xbdd03d87,0xbdb661d6,0xbdc4d187, +0xbe1a1f6e,0xbe36efef,0xbe5fefe8,0xbe31e16a,0xbdc555f1,0xbd8f57dc,0xbc130b14,0xbbf8112f,0xbb40f4de,0x3b29b12f,0x3bcaf509,0x3bd88604,0x3c389b41,0x3c29faf9,0x3c1b2533,0x3b8cb30b,0x3be3e910,0x3c19c173,0x3b292017,0xbbd31256,0xbc0ce187,0xbb9a1e1f,0x3bac7bed,0x3c04bc1c,0x3bb65acf, +0xbb643b94,0xbcb26764,0xbd1f62ee,0xbd5fad49,0xbd7d3bfc,0xbcbe3e8e,0xbaec48b3,0x3c483ebd,0xbc027878,0xbcd89825,0xbd069004,0xbca70861,0xbd1ccf76,0xbdbc9841,0xbdbc3c66,0xbd732961,0xbc7a872b,0xbd1d836a,0xbcca225f,0xbc9bc191,0xbc720889,0xbc11608a,0xba3ec6e6,0x3a8a277a,0x3bb35888, +0x3b0b04f4,0x3c2dd5cc,0x3c1b4d8d,0x3c2cb2ff,0x3bfca0a7,0x3bfe4ec4,0x3b0c6c79,0xbc096547,0xbc69c759,0xbc82d596,0xbc60c4ff,0xbc6d3909,0xbc60d091,0xbc790daa,0xbc84f489,0xbc8614c3,0xbccc970c,0xbd0023c9,0xbd215b6d,0xbd1c8606,0xbd0259f0,0xbce62d9b,0xbcbc3f73,0xbcbb77d6,0xbd285936, +0xbd16b0be,0xbc80b30d,0xbd15baaa,0xbc60f6ab,0xbc5a3560,0xbbc7f058,0xbac4b115,0xbb0671a3,0xba9c6df5,0xbbb65b40,0xbb13ec49,0xbc59e6b0,0xbc20ecf2,0x3b9ec1ac,0xbb6db865,0x3bd84614,0x3b38c0c1,0x3b4a9e7d,0xbac58210,0xbc67c59d,0xbcbdc103,0xbbd22061,0xbc47e6df,0xbbcdfd76,0xba6da7ca, +0x3be88ff7,0x3c7d38f9,0xbbf527c7,0xbcd31fdc,0xbd429971,0xbd14ec87,0xbd0ec863,0xbcec38b0,0xbd06d56b,0xbd084118,0xbce90401,0xbcc7e3d2,0xbbe372df,0x39aa0100,0x3c03d860,0xbad60b30,0xbc181c65,0xbb3fac6a,0xbc4b72a7,0x3c698148,0x38a972af,0x3ac6636f,0x3ad7f1bc,0xbb5233da,0xbbf69c06, +0xbbc6c4c7,0xbca7901f,0xbcc09a98,0xbc8c5bf5,0xbcb7942f,0xbca772dd,0x3a59fc07,0x3ad091b2,0xbba2e8b2,0xbbefb0b0,0xbc477794,0xbc8dca73,0xbca92625,0xbc5c91a8,0xbb87cfc8,0xb9db533c,0xbc0258d6,0xbc5dc3bf,0xbca9313b,0xbc86e58e,0xbc32678d,0xbc36d284,0xbc4f0be8,0xbb1b855d,0xbbcd82d9, +0xbcade200,0xbc0d83df,0x3c8d1ddc,0xbc9c799d,0xbc7d3d02,0x3c4f67aa,0x3c7e4acf,0x3c673059,0x3c6c85f9,0x3c768f1e,0x3c83d3dc,0x3c7ba836,0xbc8798ac,0xbc7dd2a4,0x3c75bfed,0xbc6cc501,0xbc92366d,0x3b803f11,0xbaec7448,0xba9efb12,0xba12252d,0xb8ce1f1b,0x3a12981e,0xba096cbe,0xbb739b6a, +0xbc076727,0xbc363a54,0xbc35440f,0xbc05a16d,0xbc104059,0xbc01b3b5,0xbbe257ff,0xbbb3ddfc,0xbb6d65c9,0xbb209d40,0x3d3fa756,0x3cfa6d9d,0x3cf1ce55,0x3d2c1674,0x3c8a9aef,0xbcecd196,0x3d347b24,0x3cc355a3,0xbcaf6483,0xbce15987,0xbd09509c,0xbd01b64c,0xbd07460d,0xbd267513,0xbcf9db22, +0x3cce04e2,0x3d3df45d,0xbd1dd840,0x3c759512,0x3d253f76,0x3cfafcdf,0x3cffdb31,0x3d0c35d2,0x3d059cc3,0x3d0ad4eb,0x3d0c43fe,0x3d0c0557,0x3d0ad3a0,0x3d0ab2e6,0x3d04e5b1,0x3d10e31f,0x3d152c8f,0x3d1d4c9d,0x3d286642,0x3d244c77,0x3d12d9b9,0x3d104dcb,0x3cb19932,0x3d01c626,0xb8980447, +0x3c99defe,0x3bd4bf87,0x3cc2d295,0x3d07aa38,0x3c532fb4,0x3ca4d0a6,0x3cd94f59,0x3c88e6ed,0x3cf65271,0x3cfcb99d,0x3cb16b3f,0xbb41316b,0x3d07bfa5,0x3c9005af,0x3cc7448c,0x3cc7b153,0x3d47d762,0x3d1320cd,0x3d278ee1,0x3d158480,0x3d1aeaac,0x3d18e596,0x3d2ed32e,0x3d2e424f,0x3d35a53d, +0x3d3bc7cb,0x3d76c290,0x3d85ca13,0x3d8ae003,0x3da7c282,0x3d9e3a62,0x3d481a49,0x3d0cc587,0x3c7aa1fa,0x3a89c0fd,0xba6f735b,0x3ca5f120,0x3c843058,0x3cb3d2ae,0x3c94eb05,0x3cfe7d88,0x3c953fb7,0x3cde9b3a,0x3cf7369a,0x3d2825dc,0x3c77eb4b,0x3d2ff7a2,0x3ce46551,0x3d0062c3,0x3cd8f598, +0x3ca30abf,0x3d01ba01,0x3cf3f384,0x3d2862ea,0x3d4011b7,0x3d29288a,0x3d354ce6,0x3d34374e,0x3d404f52,0x3d31dbc3,0x3d38e39a,0x3d39f667,0x3d8135ac,0x3da9532d,0x3db623bb,0x3de0f94e,0x3dc44790,0x3d3895af,0x3d0f5112,0xbcdc79a0,0xbd27f86b,0xbc018653,0x3ad9613c,0x3a5bdbbe,0x3c5eb22e, +0x3c69de55,0x3cda6849,0x3c61a813,0x3c693b5d,0x3c225c3c,0x3c69a299,0x3cd6e8ae,0x3cfaa72d,0x3cd86e20,0x3caca5ce,0x3c5d60ba,0x3ccb53e1,0x3d0b36fe,0x3ceaca0b,0x3d1a5862,0x3d1b85b0,0x3d02fac8,0x3d1afc26,0x3d1cead4,0x3d33c63a,0x3d1739ae,0x3d3240af,0x3d59fc0a,0x3dbd068b,0x3e0027ae, +0x3dfb50c7,0x3e2e4fe0,0x3e15725c,0x3d188c41,0xb90d09b4,0xbd2bf433,0xbd9e2469,0xbd1f1081,0xbc9625ec,0x3bf6c15f,0x3bed549e,0x3c534413,0x3c02ad60,0x3c5f14e3,0x3c996bf5,0x3c1cea6e,0x3c177bf9,0x3c7977aa,0x3cef724d,0x3c92977b,0x3c80c035,0x3c4ab773,0x3b856e8c,0x3d17f86f,0x3d0272a8, +0x3d182b74,0x3d80cb6c,0x3d341972,0x3d572b30,0x3d4965ea,0x3d5ae4e1,0x3d4bacea,0x3d3fbac9,0x3d2df57a,0x3db3a84d,0x3e05e2fa,0x3e0a5c47,0x3e4174b9,0x3e19c2d0,0x3ccb49dd,0xbc4322a3,0x3df5a7a9,0x3df0544c,0xbca1c848,0xbcd4ba0e,0xbca466e1,0xbcafe4d8,0x3b1ac0d9,0xb94bb846,0x3c9586e4, +0x3cc75c7a,0x3cece389,0x3c81d91a,0x3c6b375e,0x3cdc6a8a,0x3cac9997,0x3c95fa32,0x3cdf7cb3,0x3c8c4e44,0x3d3f0b7e,0x3d848b82,0xbb98f9dc,0xbd0127ca,0xbd9d13e8,0xbc691157,0xbc08f6ae,0xbdd30d67,0xbdafdc74,0xbd9f0eda,0xbd4d1970,0xbcc6e6b7,0xb6c91fd0,0x3d42a178,0x3c9e7add,0x3d270291, +0x3da6c46c,0x3de30cc2,0x3df26e2f,0x3cf75e72,0xbbac31a5,0x3d6f5eb6,0x3cf6d991,0x3d5dba87,0x3d064f6a,0x3cb99e53,0x3d0fc29e,0x3d08304e,0x3c9cae86,0x3c654454,0x3c479177,0x3d06fddd,0x3ca399c5,0x3c9690ca,0x3c371614,0x3cc5074e,0x3c6b1f59,0x3d32967e,0x3d8cdfda,0x3db46541,0x3df6f275, +0x3d90ba77,0x3d2e37fd,0x3d4fdd42,0x3d359c8c,0x3d059367,0x3d27582d,0x3ba780c6,0x3b89c04a,0x3c8e6d8e,0x3d1c6917,0x3d5616bd,0x3dcab607,0x3df1d062,0x3e022e15,0x3d8d06fb,0x3d41108d,0x3cde0604,0x3bcf2d56,0x3c6cde48,0x3c6833ee,0x3d47e57e,0x3c941c92,0x3c8accec,0x3b8950e1,0x3bb2d0c7, +0x3c8b6499,0x3d58c04d,0x3d037c74,0x3cb75740,0x3cb6dc69,0x3c4e63ac,0x3c5a0d0b,0x3c9d1b1e,0x3cd59128,0x3d072e60,0x3d15cad3,0x3db024eb,0x3de0b163,0x3e174545,0x3e07e21f,0x3de39e92,0x3d997f50,0x3d729a69,0x3d942525,0x3df5d7ad,0x3dfb9942,0x3dd58569,0x3d8294df,0x3db22506,0x3db26792, +0x3d3829eb,0xbd0a61e9,0x3cf0ee3a,0xbc7ffb4a,0x3ab3994c,0x3b138b34,0x3d52666c,0x3c8615d2,0x3b896f43,0x3c5e2692,0xb92b017c,0x3c4a278e,0x3d59588d,0x3c7ea1c7,0x3ca96938,0x3c9ee33d,0x3baaceb1,0x3be5b780,0x3c78e599,0x3d1ea373,0x3d1cbe45,0x3c9d2fe7,0x3da39833,0x3de33372,0x3e0302e9, +0x3e06721e,0x3de3dd34,0x3d9611b3,0x3d81fa10,0x3d55227d,0x3de818ed,0x3df22b7e,0x3e20ba2b,0x3e46772f,0x3dd27044,0x3e0d01a7,0x3bdad198,0x3c9ce073,0x3ca6eb10,0x3b6be353,0x3ce781aa,0x3c82e7fd,0x3c8ea120,0x3c6568f9,0x3c2da3f9,0x3cc10e59,0x3bbdd784,0x3c3e4fcd,0x3d1533b1,0x3ce03bb9, +0x3c7d79b2,0x3c0bf4fa,0x3c9c85b0,0x3c832616,0x3d0e47bf,0x3d94ec2a,0x3db21cf7,0x3d9e9b3b,0x3da0b259,0x3d95b4f3,0x3d6c358c,0x3d8b5df9,0x3d86a61d,0x3da3720a,0x3d3b444b,0x3d480c7e,0x3cdbac7f,0x3daeb2cf,0x3e1283b6,0x3e9bcf71,0x3e3d9eb9,0x3e514943,0x3d8c6b32,0xbda85518,0x3cfa183a, +0xbb452bd1,0x3c117610,0x3c812bd3,0x3d1508a7,0x3c7cb905,0x3c5416b9,0x3bbe4d49,0x3c924418,0x3ca1ada0,0x3cabbf6a,0x3c4d5394,0x3c60ed5b,0x3c2db1a5,0x3c97e30f,0x3cb66350,0x3be37d72,0x3ccf2280,0x3c501dfd,0x3a9c4bd0,0x3c3acca5,0x3cdb5f1c,0x3d498514,0x3d585901,0x3da736d1,0x3e0fecef, +0x3e099a7f,0x3dff3c9d,0x3e09b786,0x3e027b57,0x3e002f94,0x3e24f868,0x3e1c0198,0x3dd2dc78,0x3d919c62,0x3b26f65d,0x3c45f3e3,0x3cadfe05,0x3bd7f49e,0x3c2e4f5c,0x3c28b2b2,0x3c52ae25,0x3c877343,0x3c60f144,0x3c69112b,0x3c45c468,0x3c258abb,0x3cabe872,0x3cc65dee,0x3ca6a9de,0x3c8d246d, +0xb9219f94,0x3cd62d90,0x3d1c142e,0x3d110738,0x3d0dcf88,0x3d07a13e,0x3d06536a,0x3d34f51f,0x3d243f32,0x3cce9b3f,0xbc134c44,0xbb0a9db9,0x3cab575e,0x3d93a6b6,0x3d486dda,0x3d59789b,0x3d7fac6f,0x3db11b18,0x3d876ba0,0xbc603a14,0x3cd1ba00,0x3cbb71b0,0x3cfb4bc0,0x3d19350f,0x3cb71580, +0x3cac162f,0x3ca42911,0x3c664a20,0x3c0dfb08,0x3c096c41,0x3c1a488c,0x3c581cca,0x3c7b8807,0x3c35e847,0x3ba809ef,0x3be5f9ff,0x3c2b3f3a,0x3b5b3c6a,0x3c618118,0x39ecf625,0x3a698f78,0x3987135d,0x3b6dce5e,0x3b9c70a5,0x3c5bc028,0x3caf2b67,0x3cca773a,0x3d1b9bc8,0x3d430bae,0x3d944ebe, +0x3d523630,0x3d0dce5c,0x3cd75b34,0x3c9ef591,0x3c9ef08d,0x3d134e75,0xbaa527c5,0x3ca1c106,0x3c3d6d83,0x3b9c1edb,0x3c7de946,0x3cc9da61,0x3c8576ee,0x3c947a61,0x3c77c723,0x3d0284b2,0x3c4c71b7,0x3ceb8d94,0x3b8b5646,0x3c5e29dc,0x3c027199,0x3c3ed7ab,0xbb372d90,0x3cb25879,0x3c1d0b16, +0x3c167b7d,0x3b33b078,0x3b9d0ef9,0x3b7d58a5,0x3ac60ead,0x3c73b04f,0x3cd2060f,0x3d2551bd,0x3d3fc744,0x3d56ea7c,0x3d6ce0e5,0x3d38d056,0x3d20bff9,0x3d03a52c,0x3cdd2d53,0x3d1499d0,0x3d04dc7e,0xb9f81cdf,0x3ccb2ba1,0x3ccc273a,0x3ca119fb,0x3cca3acb,0xbb503791,0x3c86de8b,0x3c50123b, +0x3c412cf0,0x3c53d727,0x3cbae77d,0x3c9c4fc8,0x3d09238e,0x3d07df44,0x3c62cdcf,0x3d1103fe,0x3bedd850,0x3cc62474,0x3c9bd38b,0x3cae6e5f,0x3ca3e705,0x3c998931,0x3c93d088,0x3c92700c,0x3cb1f892,0x3ccc5be5,0x3cee4c93,0x3d1e3d1b,0x3d3d9a19,0x3d7ae630,0x3d6ab2ae,0x3d4a0126,0x3d39201e, +0x3d3abd6b,0x3cfe7e2a,0x3d1578d6,0x3d12bd0d,0x3c089f3b,0xbca810f1,0x3d126171,0x3ca0649a,0xbc624e50,0xbc93d130,0xbc8ee410,0xbc86977e,0xbc98af35,0xbcbfb143,0xbcc63e49,0x3cb8ea4a,0x3d225c51,0xbcb58d79,0x3c8d12a8,0x3d1baccd,0x3cf150c0,0x3cec4cf2,0x3cebe89c,0x3ce7ae1f,0x3ce3d9b7, +0x3cdd1057,0x3cd3e0f8,0x3cef9bdc,0x3d07af2f,0x3d15fa05,0x3d1f1fea,0x3d1d3c9a,0x3d257b10,0x3d19a4e6,0x3d13b975,0x3d11f0ff,0x3d08b70a,0x3d559d6b,0xbd6f3d84,0xbd23b694,0xbd5c2986,0xbd0c0840,0x3c583a60,0x3d656e9b,0xbd1c4f83,0x3b644110,0x3d72a630,0x3d822c97,0x3d89c2fa,0x3d744d54, +0x3d808e92,0x3d9d27d1,0x3d80ea89,0x3bc602fd,0xbd0301a6,0x3d867de4,0x3c83c98b,0xbcdb1b36,0xbd5887fe,0xbd2fa673,0xbd3f167c,0xbd3e05c2,0xbd426a9a,0xbd4032b5,0xbd38ee72,0xbd3aafb5,0xbd3e609c,0xbd400533,0xbd4bb735,0xbd4a3326,0xbd4d91e9,0xbd56b86b,0xbd4b4a91,0xbd2aa194,0xbd2d509c, +0xbd50545f,0xbd8b7f0c,0x3cadd923,0xbcfa5137,0x3c0e6ba8,0xbc911c28,0xbc7c1c20,0x3bc60b48,0xbc99d8e9,0xbbdf4c18,0x3aedcb01,0xbbceca80,0xbca05ef6,0x3b5753aa,0x3d301be7,0xbc9ee902,0xb8878540,0xbc825d2c,0x3ba4167e,0xbd71d24c,0xbd53d4f2,0xbd619c70,0xbd73c5df,0xbd6a4f09,0xbd6ccd66, +0xbd82594f,0xbd8475c0,0xbd8d898f,0xbd93a3a1,0xbda8e749,0xbdab8fbf,0xbdab10f6,0xbdbe76bc,0xbdb4df75,0xbd8c6979,0xbd750443,0xbd4bfd69,0xbd52ee67,0xbc94ecef,0xbd46ead4,0xbc22976a,0xbc688da2,0x3bd9b257,0xbc9e42aa,0x3bc2c7d0,0xbcd70629,0x3b627694,0xbd250297,0x3c3a27c4,0xbc721e05, +0x3b116771,0xbc5a0b77,0xbcb8c868,0xbb904258,0xbc8023bf,0xbd19906d,0xbd83d94e,0xbd6f5c68,0xbd934d7b,0xbd89e8d4,0xbd8a3b6f,0xbd881b58,0xbd8e19a9,0xbd9a6b23,0xbdb1e036,0xbdc8c498,0xbdddf9b5,0xbdcc7563,0xbdeef821,0xbdc3cc8d,0xbd5b515a,0xbd54e8eb,0xbd6280cc,0xbd8c1bf5,0xbd57165a, +0xbd34ff04,0xbcb68770,0xbc0ba3f4,0x3bde5867,0xbbf78932,0x3b971af0,0x3b42bd52,0x3c0003eb,0x3b418247,0x3c065998,0xb79a1211,0x3c7a7383,0x3b084d98,0xbc84de02,0xbc577d0e,0xbc5b0d08,0xbce576bf,0xbd7d94f9,0xbd63e9b3,0xbd9c6cfb,0xbd9ce48f,0xbdad64b9,0xbdb03fae,0xbdb8aaf4,0xbdd1f7c6, +0xbdf24207,0xbe11db79,0xbe212617,0xbe1280ae,0xbe2f8fa7,0xbe109dbb,0xbdb676ae,0xbd8f2415,0xbd04b4fc,0xbd70fd59,0xbd833966,0xbd6fca2a,0xbd04d8e0,0xbcb4d1b4,0xbb719fd7,0x3b2613b5,0x3c1e5014,0x3c3942b9,0x3b2916f6,0x3c2f8eb7,0x3c493269,0x3ca5c96e,0x3c4327b8,0x3b24e0e0,0xbc25fb47, +0xbca40224,0x3bed28aa,0xbd331d28,0xbd82bf3c,0xbd90669d,0xbdb95cc5,0xbdb16a54,0xbdb7db58,0xbdab9362,0xbdbc91b7,0xbdd8be59,0xbdfe6a4f,0xbe1ef4d5,0xbe2f26a5,0xbe06c9c9,0xbe36d43c,0xbdf8434c,0xbd271f9c,0xbd1e6974,0xbd5b1435,0xbdab3462,0x3b886649,0xbcd75d0b,0xbc5c60ef,0x3a849db8, +0xbc14e689,0x3c398fb1,0x3b8d7748,0x3bdb69e7,0x3c82ab62,0x3c2f3370,0x3c6bfdcd,0x3cac30f9,0x3b963ae7,0xbb76d0b9,0x3c2bca85,0xbcb9427a,0xbce099b3,0xbd6bf1a7,0xbd736c6c,0xbd3ee389,0xbd8fa9b8,0xbd3d82f1,0xbd61866c,0xbd180372,0xbdcd5748,0xbe03c0ee,0xbe322a64,0xbe08af82,0xbe0edc0e, +0xbe0aa528,0xbe4f8ac4,0xbe483311,0xbe1c580e,0xbdc9da98,0x3d952a5d,0x3d90a193,0x3d82cd97,0x3c8ce100,0x3d366dee,0x3bc44a42,0x3ca7ec01,0x3cb85795,0x3c853fa0,0x3ca21887,0x3c1717ae,0x3c013517,0x3c02e005,0x3cb42d71,0x3bc6a324,0xbc0f0446,0xbc324f84,0xbcabbc06,0x3ca01dfa,0xbca31a9c, +0xbdd4cc1b,0xbdb4e413,0xbdd72f0c,0xbd850c4f,0xbd402be2,0xbcda2d65,0xbc7ae62b,0xbb8f03c6,0xbb176d75,0xbcab5810,0xbcd9da4e,0x3c84123a,0xbd9a42e8,0xbd96feef,0xbbcc12fd,0x3d37866a,0x3ce512c5,0x3cf62951,0x3d40cb6e,0x3d0bcbe3,0x3ce2c5db,0x3cd6ee3e,0x3cd88ae5,0x3d2df65b,0x3c53f442, +0x3b761f3f,0x3bde557d,0xb95b0c29,0x3c2d918f,0x3d2a9e0a,0x39700b49,0x3ae3cc6b,0xba500576,0xbbd79a1e,0xbc6da672,0xbd2a6e91,0xbd20fb68,0xbd107e86,0xbd435471,0xbd4106be,0xbd8e200f,0xbdbf4107,0xbdc4cfe5,0xbd99d2a5,0xbd5451be,0xbd292d10,0xbd944484,0xbdbc02f1,0xbe156c8b,0xbdca97a0, +0xbd0a68ab,0x3c9d3118,0xbc44b86e,0xbc32c7ec,0x3d689bcd,0xb91a010a,0x3c943ba8,0x3cbedb77,0x3cb387a6,0x3d1d908f,0x3c1aa535,0xbad1c443,0x3c22cf30,0xbb85fc46,0x3c1ba9c1,0x3d1fd2f8,0x3c42b1e2,0x3c08549e,0x3c40f5ec,0x3c341b0c,0x3c3391fa,0x39658456,0xbca9144d,0xbcc75d8c,0xbd0aa8a4, +0xbd9477e1,0xbdcbc9d2,0xbe011628,0xbe0ba051,0xbdefb848,0xbdd9508c,0xbd8e4b3a,0xbd9721b5,0xbdc26bc6,0xbe1eaf44,0xbe15c616,0xbe038eab,0xbcc02879,0xbd305b5d,0x3d1961e7,0x3c67a793,0x3b51cfa8,0x3cc6145e,0xb9dbdd8b,0x3c529aa1,0x3c90293c,0x3bc14c4a,0x3b7f178e,0x3c54a3bd,0xbb91e3c0, +0x3bc8d8d5,0x3c6d3c25,0x3cbab4c0,0x3cf8aaf3,0x3cc3b001,0x3c1888b0,0x3ca95ff8,0xbc041214,0xbce1e2ff,0xbd1f3769,0xbd1bd74c,0xbd0b7a31,0xbc703c8c,0x3c123a67,0x3c85cd05,0x3cdc62c4,0x3d2f300b,0x3d3550ec,0x3c33f814,0xbbdfaf0d,0xbdbbb699,0xbe0cb413,0xbe36448a,0xbd99f78c,0xbe1f9d91, +0xbbc72116,0x3dd23136,0xbc160ab1,0x3cac9b53,0x3c857ac7,0x3ca9ac56,0x3c75e6c2,0x3c7d49bb,0x3b7d7b8b,0x3a29a7f4,0x3c017bba,0x3c792b50,0x3c1adf4d,0x3c369c96,0x3b0db739,0xbbb05115,0xba4baddc,0x36d8c971,0x3c524c7b,0xb9c8245c,0x3cc328c4,0xbc986262,0xbbc38ad0,0xbca47619,0xbd7e6629, +0xbd3759c5,0xbd419c42,0xbda37568,0xbdaebd35,0xbdb1ffde,0xbdc72852,0xbe046d61,0xbdfc9ced,0xbdccd93f,0xbdf277cc,0xbd2d8f3a,0xbcb4e02c,0x3d28f28a,0x3cbf6570,0x3c672530,0x3c807b25,0x3b4af630,0x3c78818c,0xbba35228,0xba996ffa,0xba24dd67,0x3a9b879a,0xbb20fd49,0x3b3fb7e6,0x3c012c05, +0x3c1ac03e,0x3aa2fdc4,0xba8f107a,0x3ccb094a,0xbb46503b,0xbc8b855b,0xbc8e04f7,0xbcee078a,0xbd01d26b,0xbcde6d49,0xbc1237b4,0xbbd78c6f,0xbb7ca898,0x3bb3681d,0xbc2b3b64,0xbd0b6307,0xbd87b70b,0xbd9e5f27,0xbd9d39c4,0xbd917697,0xbd382524,0xbd419647,0x3d2278b5,0x3c48d4dc,0x3c864695, +0x3c8304f2,0xbb9c8115,0x3c8a4044,0x3c720610,0x3c3bd5b9,0x3b187f38,0x3c130415,0x3b7638f6,0x3c6343f3,0x3af7b58a,0x3b17e83d,0x3b989cca,0x3c04e1ac,0x3b89296c,0xbb77e449,0x3c316f86,0xbc93ed98,0xbc4b0222,0xbc7d7ee2,0xbcdf060a,0xbcd2752b,0xbc64fe77,0xbc85404e,0xbc5b0fb4,0xbc810282, +0xbcd3c0ae,0xbd174902,0xbd59a295,0xbd6f0262,0xbd568c57,0xbd71a755,0xbcba9344,0xbcc5e1af,0xbcd88ed6,0x3c81d6ce,0x39cc920c,0x3cc42722,0x3cfd2f94,0x3ca27c10,0x3af21bfa,0x3c1c9bba,0xbaf07b39,0x3c366e87,0xbcd207e3,0x3b7c3b24,0xbc5d6d74,0x3c69554e,0xbc00e0e7,0xbbabf9f6,0xbbcb97c1, +0x3bfd7acc,0xbc9de6ed,0xbc66e3a1,0xbc1296d7,0xbc0d6cf1,0xbb756941,0xbba1e8d6,0xbc414764,0xbc92ff12,0xbcb8e264,0xbcd59695,0xbcf8df88,0xbd02b679,0xbd06747c,0xbd02671e,0xbd131ccc,0xbd334af4,0xbd098ddc,0xbcb5bc78,0xbcf806cd,0x3d08a6b8,0xbcb24e99,0xbcc6a813,0xbca05ef0,0xbd117d3b, +0x3b287461,0xbccf7ed2,0xba312f64,0x3b92240c,0x3c2edcf0,0xbc02f801,0x3aef08c7,0xbc245a04,0xbb8a0333,0x3c965b29,0xbc57fe41,0x3ce834cd,0xbc2865f8,0xbbddbb70,0xbc258024,0xbc22bb3a,0xbc4f3c43,0xbc4d1c31,0xbc204886,0xbc316a3c,0xbc67f3ca,0xbc93031c,0xbcb6fe24,0xbcde28f7,0xbd0c901c, +0xbd046b58,0xbcd5036d,0xbcac7e07,0xbcc02429,0xbc9f6b1e,0xbce72b1e,0xbbb052c1,0x3d07b3cb,0x3d6ac0ec,0xbbbf62dd,0x3caf0a24,0x3d6773f8,0x3d8245c1,0x3d6acfd7,0x3d55aeb3,0x3d67eb9f,0x3d87bdd1,0x3d8aed2e,0x3c6e2386,0xbc899126,0x3d5b9477,0x3c9fa128,0xbc47f398,0xbcc53558,0xbc9737d5, +0xbc91753d,0xbc86188a,0xbc6b0e07,0xbc5d4b15,0xbc617be6,0xbc80c162,0xbc8f505c,0xbc9852ad,0xbc9f96b0,0xbc9f8ef0,0xbca2f265,0xbc9ea657,0xbca85fcb,0xbcb448f0,0xbcb2cdb7,0xbca67dfa,0x3cd3d862,0x3cae6b3c,0x3d3822aa,0x3b781d60,0xbd3d4aa7,0xbd7e2992,0x3c27d1ed,0xbd05e093,0xbd905a8d, +0xbd95e385,0xbd98010f,0xbd844861,0xbd888336,0xbd9fd385,0xbd869196,0xbd1168dd,0x39903b1d,0xbd8c076a,0xbd3a19f7,0xbbc49bc2,0x3d2106b1,0x3cd28c01,0x3ce7f9f3,0x3ce876b7,0x3ceb2fde,0x3ce34282,0x3cd395d0,0x3cca15bc,0x3cc2f1be,0x3cbb05bb,0x3ccc0cf5,0x3cc96d90,0x3cb020d7,0x3cb8499e, +0x3cb2ebc3,0x3ca0f9eb,0x3cba4d06,0x3cbe4050,0x3ce2a605,0xbdace50b,0xbb1a2e43,0xbd1fb45e,0xbb92ed9d,0xbc0590ec,0xbc81ab52,0x3c0cc1f0,0xbc7ba552,0xbc888829,0xbc69b157,0x3bafc963,0xbc840620,0xbd48d104,0x3b766073,0xbcc02391,0xbba44f4f,0xbd150b0e,0x3cf97c3a,0x3d1137e5,0x3d0bd42e, +0x3d2041bf,0x3d0baac8,0x3d0a4223,0x3d19071b,0x3d0c1ea5,0x3d0f39fc,0x3d0b7c8d,0x3d2607cb,0x3d20175b,0x3ce4a8b4,0x3cf45998,0x3cd1ce44,0x3c7a3f97,0x3c88ba0d,0x3cfcbd5f,0x3cd6292a,0xbcf96c9c,0x3c80d934,0xbc7731fa,0x3aa6e6d1,0xbc8d8bf0,0x3ca8f5f3,0xbc85f17a,0x3cc62be2,0xbc9df866, +0x3d183169,0xbbe037b0,0x3c069bfc,0xb9200727,0x3c52eb38,0x3b588b11,0xbc5809a5,0xbc61b3a4,0x3ca47ddb,0x3d5ca1cc,0x3d22c5c2,0x3d585ca9,0x3d35c01a,0x3d2e2492,0x3d1ee183,0x3d07de1a,0x3cfaf494,0x3cd5bb8a,0x3d1e5846,0x3d0ae86c,0x3bebb7d0,0x3c590f3f,0x3c07f182,0x3b2f8cf8,0x3c809101, +0x3d0fc45f,0x3c61949b,0xbd897711,0xbcbeefce,0xbc5e9993,0xbc1c6909,0xb9e6c5c2,0x3c80385c,0x3c06e90e,0x3c1b854c,0x3c020422,0x3c94d2a1,0x3be5ce51,0x3cd3aa6c,0x3c0f36a1,0x3c9cab81,0x3c00f9c2,0x3b87351d,0xbc3e3c07,0x3c005847,0x3d724116,0x3d2afac2,0x3d834290,0x3d49fb69,0x3d53bb35, +0x3d5c968b,0x3d3988b2,0x3d3fa556,0x3d337f26,0x3d6f4afb,0x3d4ec01e,0x3c6df6f3,0x3cb1cc91,0x3c0c427b,0xbb665b13,0x3ba4bd2d,0x3d509e71,0x3d5d7ecc,0xbcebe70f,0x3c192bb6,0x3c75e19c,0x3c445f0b,0x3c32048b,0x3c6b2209,0x3bfef60f,0x3c6801bf,0x3cd15025,0x3c4f7ce2,0x3cb3b5f3,0x3cbd4425, +0x3cea4c35,0x3cb85acd,0xbae9f83c,0x3cd2acd4,0xbd0c4d30,0x3ced3c7c,0x3d7c6e9b,0x3d6b72b4,0x3d987348,0x3d80c885,0x3d6b45fb,0x3d4a051b,0x3d170cd7,0x3d131f44,0x3cafc075,0x3d6676ad,0x3d10a78d,0xbcf17b70,0xbc8c0edf,0xbcc5d4db,0xbc1674f9,0x3ce93884,0x3d701cee,0x3d65ebb9,0xbcb9dc00, +0xbd1c5f05,0xbc7caf39,0xbcde62b9,0x3bfb2977,0x3bfd262b,0x3cdf119b,0x3cac3d5f,0x3c262c44,0x3c846675,0x3cb79afe,0x3c917a46,0x3c5abb7d,0x3c9fe589,0xbc24f084,0x3c8f4d4c,0xbbe08ff9,0x3cbe7945,0x3d6c9aea,0x3d10a06f,0x3cdd7d43,0xbb6c18d1,0xbbf82272,0xbcdad91f,0xbc17cf00,0xbc300e2e, +0xb9e9b9ab,0xbbb5795a,0x3c6807df,0x3d5452cf,0x3d2670e6,0x3c474262,0xbbda2dea,0x3cfaab1b,0x3d8d1458,0x3da51032,0x3d894211,0x3dc3050e,0x3d13debc,0x3cf566e8,0x3c630dd0,0x3ca61eca,0x3c9ede36,0x3c4ddad9,0x3be025c0,0x3c3bacb4,0x3c37eadd,0x3cd799c7,0x3c1e8256,0x3c93b393,0xbbc3ab81, +0xbc3aa6a9,0xbd575522,0xbce793e1,0x3d566679,0x3d577be1,0x3d9ba783,0x3d8eb6e9,0x3d6c4050,0x3bb23d87,0xbbe48b74,0xbd2553f7,0xbd858fa9,0xbd2e5c35,0xbd7cf5a6,0xbdae60c8,0xbdc90e4a,0xbceb9fee,0x3db0f372,0x3d47ce88,0x3ba6e628,0x3c764f87,0x3c159da8,0x3c4b3487,0x3cca557c,0x3cf0df69, +0x3d0d9d79,0x3d596fa6,0x3c7e2132,0x3c0f3d3f,0x3c1b1ec8,0x3bf42258,0x3c7683c2,0x3cd2240e,0x3ca668d1,0x3c070e78,0xbc3efa2d,0xb94f29c4,0xbb9a1f9a,0x3c5717e6,0x3b95dfd4,0xbc48c4b4,0xbb5df537,0x3b82e09f,0x3bd9fdf6,0xbb0de3b3,0xbc95e96d,0xbd00a63e,0xbcd85efa,0x3d02b210,0x3da05e01, +0x3da61781,0x3d626e01,0x3d67b675,0x3db2474a,0x3cfec617,0xbc7ccb29,0xbd0df4dc,0xbd26d233,0xbcb600ef,0xbc12da43,0x3cbc130d,0x3ce35e94,0x3d1e5e64,0x3c605ae8,0x3b70d4df,0x3c887f11,0x3bb3acdf,0x3c6f51d5,0x3ccf5988,0x3ce4b763,0x3cca5c40,0x3bf3b1f0,0x3c8c566a,0x3bd661b9,0x3aa9873e, +0xbb3066ef,0xbcb6ed55,0xbc91bd09,0xbc5b16f2,0xbbd6ee97,0x3c328d11,0x3ce1fd70,0x3d31fd86,0x3da3a465,0x3dd0cd0a,0x3e15dd6f,0x3e205b61,0x3e111a02,0x3dd5c033,0x3d6e0f5e,0x3c0af316,0xbb6341e8,0xbd190337,0xbbde07b2,0x3bfabc72,0x3bac90c8,0x3ca38bfc,0x3c65ff9f,0x3b8ab5ea,0x3c662bbb, +0x3c15ae35,0x3c211610,0x3c26df4d,0x3c1823b8,0x3c83725d,0x3c5b4da7,0x3c82b63a,0x3bdb6c50,0x3b6e4316,0xbc466341,0x3bcb6f80,0x3c6545e6,0x3cceb14a,0x3ce70815,0x3d033ec3,0x3c94dc3f,0xbaac0c69,0x3c74bbf7,0x3cebb73a,0x3cb73e45,0x3c0aca93,0xba2b72e5,0x3c501184,0x3cb9577e,0x3d17e7da, +0x3da71a4d,0x3bb5ca3d,0x3d6c7aa2,0xbcf1bf48,0xbdab41f8,0xbbe4b2c1,0xbc7c2af1,0xbb17bab1,0x3ab66c39,0x3cbc7b4b,0x3bd47b13,0x3c20f6c5,0x3bdce80f,0x3c27d382,0x3c2648a7,0x3c9ce791,0x3ba03c55,0x3b86f1ae,0xba30fdfd,0xbc03ffdf,0xbc20698b,0xbc8d629f,0xbb5ff3ca,0xbc76aeea,0xbc0d33b4, +0xbbe7bd00,0x3bb32084,0x3d010233,0x3d22a3aa,0x3d0f2ef3,0x3d3a86b0,0x3cffcb71,0x3d31a4dd,0x3d8e1bf7,0x3d84e2c3,0x3d5bce77,0x3d29c3aa,0x3cf706ef,0x3b9dc514,0xbc5d0cc7,0xbcf6f09e,0xbc4b2a14,0xbc515bb2,0xbba962eb,0x3b40b757,0x3ad6ee60,0x3c20dfb4,0xb9cafabd,0x3c976aaa,0x3c084016, +0x3c7b931a,0x3ca328ff,0x3c15cd62,0xbaa5f8bf,0x3acf5780,0x39cdbbcf,0xbc3d1857,0xbbc5b146,0x3c760ce9,0x3ccce3ad,0x3cdc5f87,0x3cfad110,0x3cfd0b0d,0x3cc8e2b3,0x3ca178a0,0x3cb31534,0x3c9adffd,0x3d30b6ad,0x3d5364f8,0x3d96242d,0x3d309d9c,0x3cf63d57,0x3d0d367d,0x3c5fed70,0x3d1f1761, +0xbc88e1cc,0xbbd8634b,0xbb65e71d,0xbbabc4f7,0x3cb109c3,0x3bef8280,0x3c866959,0x3bf3084c,0x3c80861e,0x3b5c8ce4,0x3c2ff2d2,0xba96324e,0x3c12d74d,0x3bf00d4a,0x3bbaa4a3,0xbaf24d58,0xb8a49530,0x3bf31f2b,0xbbc2b1db,0x3cf58f07,0x3c9a49e9,0x3ca6072a,0x3c95c7b0,0x3c964687,0x3ca73abd, +0x3c9f4a7c,0x3c992c41,0x3c620c90,0x3cde2381,0x3d1a93ee,0x3d762488,0x3d2bea68,0x3cefa945,0x3cd2ff6d,0x3c87ae0e,0x3ced44a2,0x3d07d796,0xbc27a50a,0x3c00e7f8,0xbc3900bc,0xbc5a76d4,0xbbb7aedb,0x3c46835d,0x3ab94ede,0x3c190c23,0xbc87f77b,0x3c913fa1,0xbb54c916,0x3b63a649,0xbc5ccb1b, +0x3bcec12b,0x3c19af61,0x3c246e47,0xbc09d216,0x3ca16adb,0x3cb74a42,0x3bdfd135,0x3bd09cfe,0x3aae0b85,0x3af362c3,0xbae80858,0x3b8f4fb1,0x3c2f31cc,0x3c96a278,0x3cda11f1,0x3cfe9280,0x3d223c24,0x3d0eadae,0x3d08a159,0x3cd2fe88,0x3cc6a60b,0x3c39bbed,0x3c15296d,0xbd3beed3,0xbaf32281, +0xbc1ecf9d,0xbc6943cb,0xbb80fd33,0xbcdf255b,0xbb995660,0xbcaaea9c,0xbc9b98f6,0xbcc339bf,0xbb744e32,0xbc09b2fe,0xbba90d29,0xbc3238f6,0xbcd756aa,0x39a06c94,0xbceebdb5,0x3c5fc7a1,0x3c07145c,0x3c5efc90,0x3c61986b,0x3c5654d6,0x3c377565,0x3c0426bb,0x3cabefae,0x3ce2c301,0x3d0d132f, +0x3d2d0a9a,0x3d470f6b,0x3d6e7761,0x3d45bd3c,0x3d16a875,0x3d01da7a,0x3ccf6518,0x3cc6ad5d,0x3cf45b83,0xba3f7e51,0xbcef1acc,0xbd04e760,0x3b5c0c86,0xbcab1139,0xbd1897fa,0xbd2cd3a2,0xbd1b8e7b,0xbd0a5992,0xbd1a8587,0xbd3e7884,0xbd435420,0xbc95fbd5,0x3c3bdf0d,0xbcefef87,0xbc9be64f, +0x3bd77520,0x3d016a01,0x3cc98dfa,0x3cc06c72,0x3cb569cc,0x3cb579c1,0x3cb5afc6,0x3cab971f,0x3cb505b4,0x3cb6cee3,0x3cc3e10e,0x3ccc3e7d,0x3ccc44c8,0x3cdd3a49,0x3cd411ea,0x3ccedb97,0x3ccc642a,0x3cc79bab,0x3ce51f74,0xbc9d649a,0xbc8ba358,0xbd045aa1,0x3c8ee4bd,0x3d3ec13f,0x3d12914d, +0x3c0df9c2,0x3d18f0d8,0x3d4d4dab,0x3d46d9b0,0x3d3e8554,0x3d1d0bd9,0x3d228794,0x3d3fb4c1,0x3d1ec6dd,0x3d24929d,0x3c852570,0x3d1434e3,0x3d2d3f18,0x3c8ab1de,0xbd045236,0xbca2a936,0xbcae3503,0xbcb27a74,0xbcbcb027,0xbcb96fd3,0xbca8f6b6,0xbcb1449a,0xbcb8711a,0xbcc5c5fc,0xbcb9f417, +0xbcb0a946,0xbccb27f8,0xbcab56a9,0xbca736c7,0xbca17275,0xbc99629c,0xbc125e6a,0xbbde5215,0x3d5eca13,0x3a4431a3,0x3cfa667d,0x3c527671,0x3ca61c00,0x3c94bd7f,0xbbbe07ea,0x3cadc98a,0x3ca2ed58,0x3ccb0ea6,0x3b9f7ba0,0x3c9cf616,0x3d33ddf2,0x3c150799,0x3ccad9e0,0x3bde5f06,0x3d134bcf, +0xbc3d89d7,0xbce6e4a5,0xbcc7ee4e,0xbced1e49,0xbce3754d,0xbce615b3,0xbce1a00a,0xbcfc3efa,0xbd09c13e,0xbd1be4d9,0xbd01a2ed,0xbcf98fa4,0xbd2c9edd,0xbce48e06,0xbc97f1d7,0xbbbd4481,0x3b1b2f11,0xbb882881,0x3b2b304b,0x3d2052f0,0x3bf5188b,0x3d07a407,0x3cafff8b,0x3d124aa1,0x3b510366, +0x3cd37290,0xbc53b634,0x3d28b924,0xbc5f7a18,0x3c9c57af,0x3c61f337,0x3caa28de,0x3c0cef6f,0x3c2c0e9a,0x3c71152b,0x3c9b2c04,0xbc030f9c,0xbd251a7d,0xbcd8304e,0xbd1902f8,0xbd0f143d,0xbd130f86,0xbce0bcdc,0xbd10c23e,0xbd1a192b,0xbd517d26,0xbd0a5c98,0xbd0899d0,0xbd580a77,0xbce530aa, +0xbcaac839,0xbb439ade,0x3bacafbe,0x3ceba88b,0x3cce8611,0x3d4a3bf4,0x3cdd2d89,0x3d0a3852,0x3cb6512a,0x3c940d7f,0x3ca2058a,0x3b94be25,0x3baa5905,0x3c546f5a,0x3b2387d9,0x3cb24df0,0xba5119a7,0x3cd0d7cf,0x3c1682e0,0x3bd54be3,0x3b6db13d,0x3ca76e46,0x3c2b2976,0xbd3333e2,0xbce24705, +0xbd1f92c1,0xbd2008ab,0xbd30e9a0,0xbce9c4a4,0xbd27e3e7,0xbd3fad58,0xbd83ed11,0xbd26247e,0xbd2b11a6,0xbd9dc909,0xbd031891,0xbc3b1106,0x3d17ea73,0x3d61f3ff,0x3d1d7a76,0x3cc13f40,0x3d6963d3,0x3d1a5376,0x3d1cc6a0,0x3d05c5ff,0x3ce10aba,0x3cb019bc,0x3c148950,0x3c3736fe,0x3bafc801, +0x3c2123d8,0x3c3971ab,0x3c9983d5,0x3c3c7d27,0x3c38940c,0x3c2b51fc,0xbcd37160,0x3d0643e0,0xbc1c6b5c,0xbd2ddcf9,0xbd09dcd3,0xbd385692,0xbd366432,0xbd2ab524,0xbccf09d9,0xbd29b100,0xbd539293,0xbd9b90d8,0xbd286355,0xbd0cf8c1,0xbd90d740,0xbcd494dc,0xbc4d223d,0x3c827757,0x3d4e62f3, +0xbda9dfd6,0xbd3ac0a4,0x3d68b6b0,0x3cee80da,0x3c6e3961,0x3ca96aed,0x3b93fc80,0x3b637423,0x3ccf5021,0x3ce4be78,0x3c2c402c,0x3cb6ba1a,0x3c9c3f52,0x3c22e60d,0x3c8cc7cf,0x3c1bbdb7,0x3cc58444,0xbc2e299d,0x3c3296e9,0xbb44acaa,0xbcd212d0,0xbba9ad66,0xbac9a9d9,0x3cffcef9,0x3cae285f, +0x3c537473,0xbcc54114,0xbcf22ffc,0xbd27ddf3,0xbd129015,0xbd771936,0xbd9e1266,0xbd7ab9dc,0xbd9443be,0xbd2f3a16,0xbdb2b700,0xbc6d9f35,0x3c93e6fa,0x3dbf4c08,0x3c2f1e3b,0x3d8ce3da,0x3c99c7fe,0x3cc5be79,0x3d3a9c78,0x3c7e0cb5,0x3c65b9af,0x3b9d746e,0x3bff8996,0x3c556bc3,0x3c8de9ff, +0x3c53dc04,0x3b3095c5,0x3b6e8496,0xbbd34ea4,0x3c8ae341,0x3b7a03a7,0xbce73863,0xbc89d5c4,0xbd769114,0xbd168454,0xbc827c02,0x3c30914d,0x3c01b3b7,0xbc029c2c,0xbcf1ef1f,0xbbe50b2a,0xb9940d65,0xbd492bd3,0xbc651c42,0x3ac60c66,0x3d5fd576,0x3d013559,0x3ad451c3,0x3c2bf10b,0xbc650097, +0x3ba28cd4,0x3ba6f578,0x3cc01ff5,0x3d00099c,0x3d36ba72,0x3c4dad9d,0xbb628f1e,0x3bab5f0f,0xbb13a28d,0x3be0756f,0x3bfb5132,0x3cba288f,0x3cb6c31f,0xbacfde04,0x3b2a2e48,0xbb03408c,0xbce7123a,0xbcf25d39,0xbcd5beec,0xbd2ac85a,0xbd8760dc,0xbd9c7551,0xbd50f4c2,0xbd4edb8f,0xbd1921d8, +0xbd2b007e,0xbd178ffd,0xbceb5ea5,0xbb2594ff,0x3d0774cf,0x3d0b4a90,0x3d567c87,0x3c8d9582,0x3cf66be6,0x3c8a729e,0xbbde3024,0x3c40cc18,0xbac9c899,0x3ce6ef36,0x3cda4da2,0x3ccd00db,0x3c026645,0xbb3ceffc,0x3c70401c,0x398a0991,0x3c5dcec2,0x3b2225dc,0x3cb2f1d4,0x3d00ed99,0xbb857da7, +0xbc218361,0xb98597af,0xbb873ad4,0xbd327319,0xbce17cff,0xbc924c73,0xbcf06ebb,0xbcdcd0b4,0xbbb99def,0x3c821714,0x3d3d5911,0x3d7e1ff6,0x3d878207,0x3d620448,0x3d09c78b,0x3d46553e,0x3d4461f5,0x3dad13a5,0x3d3bde59,0x3d71c28a,0x3d317d1e,0x3cbf5006,0x3c5d26d6,0x3ca776ed,0x3c1b66d2, +0x3b4e9c44,0x3c746ee0,0x3c8f1e3d,0x3ca1e5ba,0x3cb2f899,0x3c704f20,0x3c829aa6,0x3a52bb18,0x3c9bb443,0x3c8f31aa,0xbbca4f42,0xbb8cb763,0xba4ee324,0xbc9c0f30,0xbc6b428d,0xbb395eeb,0x3b0d4e1d,0x3cce45f4,0x3d543462,0x3db83c7a,0x3dbec7b5,0x3de2deb4,0x3e152184,0x3e10fd2b,0x3defdc1c, +0x3d0f27cd,0x3cf32d39,0x3bdbf611,0x3d1a9b8f,0x3d6a6d07,0x3d5e1171,0x3d8b6195,0x3d41d570,0x3cc5d97c,0x3c97e0fb,0x3cdb3731,0x3d12c778,0x3ce0b3fe,0x3c89cba7,0x3b852d10,0x3c19bffa,0x3b184616,0x3b989e23,0x3c2c6350,0x3b8f582f,0xba8c74ea,0xbb6a560c,0x3ad008d7,0x3b87f1a9,0x3aeb02ff, +0xbb0de491,0x3b8425f8,0x3cad9648,0x3cfed3c0,0x3d32d2a8,0x3d8cabda,0x3da4ac47,0x3da0c674,0x3d9a7432,0x3d734e3b,0x3d1c4e2f,0x3cd95b6b,0xbbb6b635,0x3902f474,0x3ceb1170,0x3d7ffecd,0x3cc85c31,0x3d2cd720,0x3d01ab3f,0x3caad3cd,0x3c6cdb0e,0x3c23db78,0x3b9e044b,0x3c08328b,0x3b97bd89, +0x3c701ca4,0xbb3aafb3,0x3c564bd4,0x3c40459d,0x3c91503b,0x3c2c1691,0x3c5f053a,0x3c4bfd14,0x3c280021,0x3bc8b403,0xbb4aca7d,0xbb42ece8,0x3a09a92b,0x3c400816,0x3d1169f6,0x3d3cd9ef,0x3d25df36,0x3ce4209d,0x3cabffe2,0x3cacbdc6,0x3ce85dd1,0x3caa328e,0xbc4263ae,0xbcc6c51e,0xbcb90af4, +0x3ae4581c,0x3c4d8daf,0xbbdf00b1,0x3cd2e576,0x3cf1b5de,0x3cbaf3b5,0x3cc43743,0x3bb6d8d6,0x3c7b1939,0x3c03fed3,0x3c3ff9e3,0x3bac3e80,0x3c46a322,0x3bcdc7f0,0x3c33f5ac,0x3be3dfd4,0x3bddc0d5,0x3be53cfd,0x3c9ecb9f,0x3cac5cac,0x3c8c9e48,0x3cc61632,0x39e91059,0x3b88771f,0xb977f01b, +0x3c38a7a3,0x3c523f14,0x3be673c6,0x3c1072e5,0x3c110d39,0x3c40a36f,0x3c85df56,0x3c6a92fe,0x3a572ff3,0x3b3c8630,0x3adf10c7,0xbaf25709,0x3a88d7c5,0xba8bc689,0x3b65013d,0x3cf973a9,0x3c41187b,0x3cc164f3,0x3cb331e6,0x3c7f84c2,0x3b874036,0x3c678f73,0x3c51cc33,0x3d07aff3,0x3c54de9b, +0x3c22ef18,0x3c2ce609,0x3c790c76,0x3c553dc2,0x3c2e8903,0x3c5d5d86,0x3cdefcce,0x3ca658c7,0x3bbd781d,0x3c2294ae,0xb944aa00,0x3aaf5c78,0x3aafcf7a,0x3c1c5942,0x3c814683,0x3cb25bf0,0x3ce97d0f,0x3cb1f879,0x3c9b0e6e,0x3c8e3f33,0x3c5b72bb,0x3c39468c,0x3ba9364f,0x3c1dd730,0x3c1ce76b, +0x3bbb57ce,0x3cffbb58,0x3bcb2fc5,0x3c539841,0x3c336322,0x3c11577d,0x3c104da2,0x3b5d0753,0x3c74282f,0x3c80a058,0x3cc6d860,0x3cb50ad1,0x3ce543dd,0x3cf57857,0x3d019125,0x3cf7aa80,0x3cb5d939,0x3cae6c58,0x3be862a8,0x3c5de3f8,0x3c840d0b,0x3ca8d32e,0x3cc247fe,0x3cc458f0,0x3cb768bd, +0x3c8b8f61,0x3c3e4b0a,0x3bf569c2,0x3c0a343e,0x3be7a2e7,0x3ba95cd3,0x3bcb1536,0x3bd14597,0x3bed3590,0x3bef3b9b,0x3ac7bc79,0xb9c6209d,0x3ce3e6f7,0x3d1def34,0x3cc29643,0x3cd33dff,0x3d19852c,0x3cf1136e,0x3d015457,0x3cf147eb,0x3cdaa694,0x3ce3a6d8,0x3cf421f0,0x3cfb77dd,0x3d190846, +0x3cb37e0a,0x3cb446ae,0x3d1d0f97,0x3cec91d5,0x3adb7e97,0x3b81f482,0x3b6cf560,0x3b1d60a2,0x3ab78fe5,0x3b014279,0x3b6c82f3,0x3b8c93c0,0x3bae5542,0x3bbbf624,0x3ba29155,0x3b7d1b5e,0x3b7710c2,0x3b72b135,0x3b3ceb2e,0x3b43dc4d,0x3b3dee5a,0x3c288598,0xbd0151c9,0xbca2638b,0xbc671329, +0xbd4f30ba,0xbd425d38,0xbc494a7e,0xbd212f78,0xbd33f30d,0xbccabc0f,0xbcb8cbc3,0xbc9c9e41,0xbc68d85d,0xbc695b83,0xbc672455,0xbc6a8213,0xbd3cfd95,0xbd31ef56,0xbc13db82,0xbd33ff77,0xbd2e3081,0xbbf118c8,0xbc804a9f,0xbc8b4e4e,0xbc855eed,0xbc8715ab,0xbc88d841,0xbc8a2aef,0xbc8c1b8e, +0xbc8d6685,0xbc8ac720,0xbc9dc2c2,0xbca82adb,0xbcce7b1f,0xbccac87f,0xbcca8c3a,0xbcc854a4,0xbcb7588f,0xbced42d9,0xbd0be8ae,0xbd087923,0xbcb7ae09,0xbcb2cf87,0xbcc2c42a,0xbd06c37a,0xbca470fd,0xbc821f71,0xbd11c956,0xbcdf3348,0xbd122c2b,0xbcb8e712,0xbcda39c3,0xbcd3c122,0xbce27e21, +0xbd01d850,0xbcd98c30,0xbd39c71a,0xbcf83630,0xbc6944e6,0xbca71946,0xbc8a757a,0xbc908ed3,0xbc9004cc,0xbcb0d1da,0xbcc8ba7b,0xbcd51d30,0xbcc87efa,0xbcdd0e29,0xbcdf3f86,0xbd269041,0xbd3d02af,0xbd55b777,0xbd59f447,0xbd30624f,0xbd1f917f,0xbd0e1471,0xbd1a5262,0xbcc81afd,0xbca119f1, +0xbca0f18c,0xbcae8224,0xbbf2c4a1,0xbcbffe46,0xbc09f252,0xbd1d20de,0xbc09b08f,0xbc214b5c,0xbcc2fadd,0xbc874f00,0xbc71d998,0xbcb8db6b,0xbcb67427,0xbd0e5479,0xbc884710,0xbbfa1c02,0xbcaac1cc,0xbc82609c,0xbc98da4f,0xbc97e4ec,0xbcc04731,0xbccc87e6,0xbcdabc78,0xbcda6d1b,0xbd09bde4, +0xbd428ceb,0xbd87abc4,0xbd9267aa,0xbd9aec4f,0xbd9669fc,0xbd6fec63,0xbd5dcba9,0xbcde7293,0xbbfe9e9c,0xbc983435,0x3bcb79a6,0x3bfff86b,0x3bc27b2f,0xbba51c49,0xbb912eb9,0xbb132993,0x3aa797d0,0x3c191ac4,0xbb6e8baf,0x3c0d7049,0xbb985128,0x3b2af54a,0xbbc41022,0xbc544fc7,0xbd00f70c, +0xbca19092,0x3ab24621,0xbc256b4c,0xbbfef178,0xbc14fb64,0xbc3d15a1,0xbcc57361,0xbcd6f619,0xbcfc1498,0xbd0456ea,0xbd11e769,0xbd58bca2,0xbd964da0,0xbdc66c6f,0xbddd1821,0xbdeab5bf,0xbda2987f,0xbd8dac50,0xbd240d2a,0xbb8243f5,0x3b56f291,0x3c63eefe,0x3c37030b,0x3c939235,0x3c7dde7f, +0x3c25929a,0x3b5377b7,0x3c780ec6,0x3c679bf5,0x3caccb15,0x3ca54f4a,0x3cb60819,0x3c6c5cda,0xba2f2b0c,0x3cbcb499,0xbd0b6cae,0x3a56ab21,0x3b9f6664,0xbc918e85,0xbc3b457f,0xbc8b142e,0xbc8b01d1,0xbcdd74e5,0xbcde61a6,0xbcfb0cc0,0xbcc1d5b3,0xbd4a676b,0xbd9ebd1a,0xbde75444,0xbdf858b4, +0xbe099064,0xbdf71c0f,0xbdc7af09,0xbdd3a4f8,0xbdc006f9,0xbe1b20f6,0xbdbebffc,0xbd58f7af,0xbc8104ab,0xbca68b8f,0xbcb29ce8,0x3b867ed2,0x3cbb4103,0x3c301991,0x3c8c24f5,0x3ca5ae04,0xbb01f247,0x3c19e65d,0x3c871c71,0xbc5c677a,0x3bfdcc62,0xbcb216b0,0xbbdcac86,0x3cda2183,0x3cb5a93b, +0x3d55678f,0xbb538fc7,0xbc8ecc02,0x3cd1494f,0x3d02920f,0x3cf2bc65,0x3bb95824,0x3af6a672,0xbbcf7cc4,0xbd18ba03,0xbd42dffd,0xbd2fbc12,0xbc49fc26,0xbda0d8c7,0x3d515ffd,0x3d10339e,0xbc9623b1,0x3cb32466,0xbbbc3a99,0xbbc3bbe6,0x3b8d4153,0x3cd858d9,0x3c654dff,0x3c1281e8,0x3adfa2a2, +0x3baf170a,0x3c1836c2,0x3cb8745b,0x3c7799a4,0x3ca1db8a,0xbb25d558,0xbbb3bf06,0xbcbe405d,0xbd0d58bd,0xbc95b5c0,0xbd43cbdb,0xbd7ffc66,0xbd857341,0xbd88aef0,0xbd6e04f2,0xbd8882cb,0xbd0d6c8c,0xbbca1776,0xbc8e8a58,0xbd69683d,0xbe083930,0xbde88a36,0xbe06ba59,0xbdcc3337,0xbcb59f40, +0x3b47d74e,0x3bb8bb2b,0xbbc78f9f,0xbb3c43b9,0xbc1e8943,0x3c9e5ce0,0x3cb4c70b,0x3ccf07e6,0x3b742eaf,0xbc0a3201,0x3ab265b7,0xbb990f91,0x3b42c521,0xbb1bf9d4,0x3c488e18,0x3c562e16,0xbc739564,0xbc79be80,0xbd011f5e,0xbca1e7ee,0xbd00571b,0xbd37883d,0xbd2eafcd,0xbd42ab56,0xbd37bf84, +0xbd41b36d,0xbcbd5d3a,0xbb8ce0a7,0x3ced4a4a,0x3c916c74,0xbb0abc59,0xbda106ea,0xbd80db6d,0xbd0b4edf,0x3c102ded,0xbc83d84c,0xbd35a994,0xbbab3f5e,0x3c51b854,0xbb849d29,0x3bce0ee9,0x3cb006fb,0x3cc1ab87,0x3c6e2c9c,0x3c1bce29,0x3a8168c0,0x3bd7027e,0x3ac34062,0x3c0b67d6,0xbc700597, +0x3c8e680d,0x3c25c768,0xbccdbf7c,0xbc662770,0xbd081275,0xbd0d129b,0xbc66b321,0xbc9c10ce,0xbc89f854,0xbcddf906,0xbd0e4bca,0xbd2c4ada,0xbcf129cc,0xbcbc3e1a,0xbbf5b459,0x3c42d2c9,0x3cc1b127,0x3b83a382,0xbd35264e,0xbd31b903,0xbc865d79,0xbd3ff47e,0xbdba4cca,0xbcaef000,0xbb988a0c, +0x3b2f59e1,0xbbb67562,0xbbb15e85,0x39772efb,0x398b0569,0x3ca6dccf,0x3cb01302,0x3c1b6bc0,0x3c2fab18,0x3c2ebabf,0x3a387e25,0x3c5b76dd,0x3c6136c4,0xbbf5a909,0xbc10c2dc,0xbc87f26b,0xbba1566d,0xbc646717,0xbcb6d5b7,0xbccea2fd,0xbd233286,0xbd1081d2,0xbc36c7cf,0xbc8bc560,0xbcc0a864, +0xbd59d96b,0xbc1a1c70,0xbc085b0a,0xbaca6524,0xbd84e72e,0xbdde8338,0xbe02c264,0xbe0138e7,0xbdb78174,0xbd819f49,0x3b4eb43f,0xbca32e9d,0x3c075026,0x3c655a6b,0x3c4dac59,0x3a0e9339,0xbb182ef1,0xbb1838fe,0x3b885666,0xbb2818d5,0xbaf2e12d,0x3acf917d,0xbb0b45e3,0xb9d20cc2,0x3baa671e, +0xbc087291,0xbc922397,0xbc69a1ab,0xbcac4e77,0xbc8a54a3,0x3c5f3d88,0x3b58b92a,0xbc08de69,0xbcb20abb,0xbd32307d,0xbd5942e3,0xbdaae328,0xbd3eeee4,0xbcfd2fbd,0xbd07edd2,0xbd7d2c67,0xbd985266,0xbd8ea800,0xbd92adc4,0xbd077952,0xbd13769b,0xbc13354c,0xbbdbeed7,0xbc7c5e36,0xbb90e7d2, +0xbaeb806a,0xba9f4357,0x3b2090b2,0xbbc0a540,0xb9cdb250,0x3a4f6db2,0x3c01503a,0x3c12bfa8,0xb8fabc8b,0xbbceff6e,0xbc195bb7,0xbbb958df,0x3b0f00ec,0xba59672b,0xba942cfa,0xbbf71349,0xbcbc09ad,0xbcfb0ac3,0xbd0fc36f,0xbd095527,0xbcb818e2,0xbc797a0f,0xbbe94f02,0xba7f1b9d,0xbc3c8ec6, +0xbcc7bd8f,0xbd0499a9,0xbd2af565,0xbd0bd752,0xbd185a07,0xbc8c9bad,0xbc0a0c8a,0xbcba951b,0xbc5a9f64,0xbc7562f0,0xbb861113,0xbbd257ec,0xba8094c4,0xbaae4096,0x3bc037d7,0x3bb79c7e,0x3c25bb63,0x3be4f1fa,0x3b600bbc,0xba72502d,0xba6de575,0xbb7c2f0a,0xbb845c3c,0xbb005c6c,0xbb231020, +0xbb5ff3a4,0xbaa66398,0xbb635cfd,0xbc312e12,0xbc928723,0xbcf036ae,0xbcc4c7b0,0xbca4f168,0xbc515e3b,0xbc874712,0xbcac0794,0xbd011755,0xbcfe6a4d,0xbcc72dcb,0xbc8c3910,0xbc7d92c9,0xbc580679,0xbc93441a,0xbc88a242,0xbc408b38,0xbc17d026,0xbc07f28b,0xbbeddb5d,0xbbbddd85,0xbb2cdb80, +0xba6cbc81,0xbadcba04,0xbc14e232,0x3addd0f3,0xbc1d3fad,0x3bc1d640,0x3adb0f09,0x3ba4e7c0,0x3baba9e0,0x3bb42a77,0x3b8d845d,0x3c6aab2b,0x3c390262,0x3c8e82fe,0x3c34a1de,0x3b9bd0ad,0x3a737b0d,0xb9e844f5,0xbb91920d,0xbc302e6c,0xbcabab29,0xbcf213c7,0xbd129104,0xbcf49f18,0xbcfc38c9, +0xbcedf778,0xbcc7fea5,0xbc9724e6,0xbca7a42a,0xbbc78635,0xbc50936c,0xbc92f0fb,0xbc5f0c71,0xbc7d73c7,0xbb316f0b,0xbbefe0f4,0xbc522976,0xbc4bdede,0xbc4dc7dc,0xbc6f0474,0xbc4d9068,0xbca8815a,0xbc8f65b6,0xbb14fd2c,0xbc111493,0x3be1baa4,0x3bfe3e98,0x3c0c3ecb,0x3c099f4e,0x3c1140cf, +0x3c4d6b77,0x3c931611,0x3cba6f24,0x3c4c933e,0x3be7f4c3,0xba60ebeb,0xbb9cb71c,0xbc14f636,0xbc9f8e6f,0xbca00900,0xbc76598a,0xbc71d3ad,0xbc91a26e,0xbc98f5bd,0xbcaed0b3,0xbce72419,0xbc65a8d3,0x3c75b6a6,0xbce2bd71,0xbca498a6,0x3bcb2d45,0x3bf82da1,0x3c2b4df9,0x3c4d0290,0x3c5a30f8, +0x3c81aefa,0x3c89a207,0xbcadba84,0xbcdf9225,0x3c8f7f2a,0xbc823147,0xbccdd57b,0xbc657b31,0xbc6e3e95,0xbc63eae3,0xbc5c2682,0xbc6a0892,0xbc800ab2,0xbc7ba940,0xbc8bf971,0xbc91d3e7,0xbc9d2368,0xbcb2f02f,0xbcba2fa5,0xbcc902f3,0xbcbc988c,0xbcb680d0,0xbcba310f,0xbcb12d15,0xbd01f433, +0x3d04000b,0x3cbafec7,0x3cc2a1f0,0x3d038f06,0x3c17a44a,0xbcfff4b6,0x3d07b383,0x3c7dfaa6,0xbcc1b75f,0xbcea3a0d,0xbd096286,0xbd057728,0xbd085899,0xbd23b887,0xbd06b007,0x3c8a3ca3,0x3d0ec811,0xbd204b48,0x3c01c4f0,0x3cf093c7,0x3cb8ae91,0x3cb93ae1,0x3cce49b4,0x3cc210ee,0x3ccde26b, +0x3cd0c908,0x3cd41868,0x3cc9e6ce,0x3ccfb8af,0x3cd77431,0x3ce97ba1,0x3ce00136,0x3cd97af7,0x3ce459cb,0x3cdf2365,0x3cc63f06,0x3cd196d5,0x3c4790dd,0x3ccaf503,0xbc0fdb7c,0x3c15e927,0xb9b155be,0x3c7be3ad,0x3cb12334,0x3ba65d5e,0x3c298a93,0x3c83cf0b,0x3c05ab02,0x3caba270,0x3ca14f8b, +0x3c15e158,0xbc1a8fee,0x3cb895b5,0x3c2909d9,0x3c675ab5,0x3c5cc5fe,0x3d21c5c5,0x3cec16e3,0x3d0b5940,0x3cf1f90a,0x3cfe873e,0x3d00aad3,0x3d1c92f9,0x3d024ea5,0x3d039aeb,0x3d0c017b,0x3d1f15a4,0x3d1cd465,0x3d27f192,0x3d5216cd,0x3d47b4ea,0x3cd94549,0x3ca58f50,0x3c3f79e2,0x3c23da5f, +0xbb94288f,0x3c20ecb1,0x3c3a8f82,0x3c5b1f1f,0x3c3a2f74,0x3ca78a35,0x3c33c2e1,0x3c844fdc,0x3caa33ff,0x3cf4fea2,0x3c15f109,0x3cde72bb,0x3c97a169,0x3cb96ac6,0x3cb910f9,0x3c2d70f6,0x3cb2aab2,0x3cbe7d17,0x3d1155db,0x3d209346,0x3d08f98d,0x3d1cc67d,0x3d1b2a10,0x3d36dfd3,0x3d0e35f0, +0x3d1a0d1c,0x3d44f3d7,0x3d54fb96,0x3d6557c4,0x3d52784e,0x3d882299,0x3d7633f2,0x3cc5703e,0x3cc49327,0xbce7b319,0xbcd4b881,0xbc420b09,0xbbc31852,0x3abc2410,0x3bed5997,0x3c09e8d9,0x3c93e052,0x3b8bc54c,0x3bcddc41,0x3bcd9781,0x3c37db85,0x3cb24c4e,0x3c363cae,0x3c949920,0x3c7b930e, +0x3c6013a9,0x3c7ec682,0x3cc5f131,0x3cdc6247,0x3d14e9d7,0x3d26e813,0x3cfaa289,0x3d232ec2,0x3d2aede7,0x3d5bd746,0x3d0b8916,0x3d1409ca,0x3d40bc35,0x3d57d895,0x3d7be827,0x3d8b9697,0x3dc6ffc7,0x3dbae83a,0x3bdf2f5a,0xbc218c2a,0xbc6cefdd,0xbcdb597a,0xbcf0b7dd,0xbcb20f9c,0x3be8a632, +0x3bca59e4,0x3c3ed7fa,0x3c0aebd5,0x3beb7d75,0x3c3893f3,0x3c250de4,0x3c44f2e8,0x3c94de47,0x3c9f07db,0x3ca88ae4,0x3c9c12d8,0x3c841e50,0x3b42bbc0,0x3ce1113d,0x3cf525d8,0x3d10fb12,0x3d53cd80,0x3d1172e2,0x3d407fe0,0x3d46c230,0x3d5e6c8f,0x3d285865,0x3d2c3aa3,0x3d81644b,0x3d96731c, +0x3dad0b21,0x3d93f6c7,0x3de5597a,0x3dbd0aa7,0x3c1c8f88,0xb9931cb5,0x3d2d4be7,0x3d462b69,0xbcea8307,0xbd2d8986,0xbca8ecd7,0xbc4b1836,0x3bf893bc,0xbc38344a,0x3c1061fd,0x3c93b1e2,0x3baced57,0x3ccc04f2,0x3c939f88,0xbb9ee7d8,0x3c8873d7,0x3c80272d,0x3c34250c,0x3b8e72ad,0x3d03adfb, +0x3d036e10,0xbb03ee26,0xbba8b763,0xbc0fc5dd,0x3ac4b32e,0xbbc1ae3f,0xbd532baf,0xbcb7f400,0xbb83adff,0x3d006c54,0x3c86412f,0x3cb0427c,0x3ce992d0,0x3d199073,0x3d2f1cb3,0x3d8350f2,0x3d123c4f,0x3bf0265b,0x3d4188f1,0x3d6ca6f6,0x3d37458d,0x3c967a40,0x3ca5f25a,0x3b982d90,0x3cc95611, +0x3c372c0a,0x3bd70f57,0x3c1ee607,0x38f72910,0x3be5f0b8,0x3cddb4f6,0x3cc32282,0x3cbef7f9,0x3caa154b,0x3c997285,0x3b278a5a,0x3ce3c318,0x3d418478,0x3d418ed4,0x3d70154b,0x3d49bb05,0x3d1d8ff2,0x3d3a13de,0x3d1b108f,0x3d0d1c0c,0x3cc42e85,0x3d03e54c,0x3c937a19,0xbd32d72a,0x3c2e2ad9, +0x399c4e7e,0xbcfead3a,0xbacd2226,0x3d2d4df1,0x3d1aa024,0x3cb87fd9,0x3c7a914b,0x3cd58ca3,0x3d0c309e,0x3d098d52,0x3cb6b0e3,0x3bd4c87d,0xbb96b2bf,0x3b0dfa9b,0xbb4f215b,0x3bff5d4b,0xbc27f20a,0x3d09962a,0x3cfc051d,0x3a9e22f3,0x3bf7d52c,0x3b970d2a,0x3c39f186,0x3c2a383f,0x3cdc89aa, +0x3d1afd55,0x3d707d33,0x3d711e38,0x3d90ea12,0x3d05da2f,0x3c9faad0,0x3b8ebb08,0x3cdb64a2,0x3d5f5f29,0x3d94917f,0x3e1a80bc,0x3e354b0b,0x3e236003,0x3da6931f,0x3d9fff6b,0x3c1cbcf4,0xbd01b36c,0x3bf7ce59,0x3c3c12e8,0x3d0f65f2,0x3d0710f3,0x3c400b45,0x3c7a3ab1,0x3b54185e,0x3c03a698, +0x3b9e7b6e,0x3c14cc72,0xbc93926e,0x3cc5ec9e,0x3d0c527f,0xbb9bbb66,0xbb0a6d5c,0xbbabb467,0x3bcc4acb,0xbacdf23f,0x3baac5b5,0x3bfbc6bc,0x3cdaa5f5,0x3d247578,0x3d852bdf,0x3d4fdefd,0x3d535a2f,0x3d25c4a5,0x3d37be44,0x3d8be827,0x3dda7cab,0x3e2393d1,0x3e4aa0fc,0x3e6d6e8b,0x3e026a65, +0x3dd729a0,0x3c846a7b,0x3c684f3a,0x3b9da49e,0xbb26cb4c,0x3c969b97,0x3c412b04,0x3c41123d,0x3cc6fa2b,0x3cbdd141,0x3c5bfdf0,0x3c57b379,0x3c548ad2,0x3c4db896,0x3cc5fdd6,0x3cb12add,0x3b635561,0x3c1e89ce,0x3b1b5252,0x3b1c20c0,0x3bdae531,0x3c203d4b,0x3c12692e,0xbb4ba01f,0xbc269e4f, +0xbc755c4a,0x3c5622fd,0x3d08c3d3,0x3d4db448,0x3d933ce6,0x3db82549,0x3d2e3c2c,0x3dbf1dc6,0x3dd40619,0x3e271bb2,0x3dfbc3e2,0x3e15404e,0x3d6934d3,0xbd00b3a5,0x3d14facf,0x3bde3203,0x3ca584d0,0x3cb4a40a,0x3c5a845e,0x3c2edc75,0x3bdad9ff,0x3bc4fc8d,0x3a997cf8,0xb97b1ef1,0x3c19ed0c, +0x3be99a6d,0x3c1efca2,0x3be0b18f,0x3c8ef97c,0x3c9c0445,0x3b9fc637,0x3bd8c873,0xba1b848e,0x3c3a62d8,0x3cb2ac19,0x3d1f0c71,0x3d6efa7d,0x3d68c21c,0x3d744499,0x3da5ab4a,0x3d9a6064,0x3d91c540,0x3d776b2d,0x3de0dc2e,0x3e067fee,0x3e187993,0x3e016b9e,0x3da06a64,0x3d7683e0,0x3c213753, +0x3c03447e,0x3c27a0fe,0x3c04a720,0x3c442daa,0x3c2face8,0x3c62c227,0x3c705af3,0x3bcdf69b,0x3c2edf90,0x3c1a68ee,0x3be1b9ba,0x3c26fbdf,0x3c4db9fd,0x3c4d2689,0x3bcea625,0xbb89e9c7,0x3bb07ac7,0x3c75d1bc,0x3c529378,0x3c056f74,0x3c87dc8f,0x3cacd426,0x3d00d724,0x3c7c2d5a,0x3b87fc58, +0xbbb62bb8,0x3b12614d,0x3c79014b,0x3cbf5a04,0x3ce5e7ba,0x3d1a1502,0x3d76318b,0x3d8f6e4e,0x3d6973f1,0x3c617759,0x3cf5951b,0x3cabc3fa,0x3cc0f5db,0x3cc7ea66,0x3c841746,0x3c402b95,0x3c505f8a,0x3c1b16e5,0x3c182024,0x3b8dff7d,0x3b8ae4da,0x3b751128,0x3bf6d794,0x3b96fd53,0x3bc44dae, +0x3b959ec2,0x3bb51f07,0x3a5fe2f7,0x3b82cffe,0x3be556f9,0x3bbd9f44,0x3c3012e7,0x3c189020,0x3b840595,0x3bc70584,0x3bd59167,0x3be77384,0x3ba5c548,0x3bc09502,0x3c2253a7,0x3cad361b,0x3ce20c28,0x3d258b27,0x3d16d0d2,0x3cb7c293,0x3d10b613,0x3c13e361,0x3cb5e7a8,0x3c418e01,0x3beaa2dc, +0x3c24692b,0x3c706cac,0x3c525221,0x3c4f5e45,0x3c86240c,0x3ca34e94,0x3bd44a66,0x3c4497e2,0x3ac091ac,0x3c11e3c6,0x3c294db1,0x3c0879e4,0x3c69f8ad,0x3c41aea3,0x3a4c958a,0x3be78fea,0x3bef7a0f,0x38dc8734,0xbbedb2da,0xbc475848,0x3a9b986a,0x3c2c519c,0x3cb6dadc,0x3c98d60b,0x3c9044b1, +0x3c2c3445,0x3c8857ff,0x3cb3368a,0x3cea4373,0x3cc52b36,0x3c7e617a,0x3c94f67c,0xbc7c0579,0x3c3cbc18,0x3c806f6c,0x3c6195a3,0x3cc6923b,0x3b06c446,0x3c616d1d,0x3bb4067d,0x3a69c779,0x3a13a73c,0x3bc5a7cb,0x3a25d55b,0x3c4404ae,0x3c19c4d5,0x3b1263d0,0x3c4dfcf5,0x3bb222d5,0x3b56f523, +0x3b192602,0x3b228632,0x3a430a4c,0x3b75e4a3,0x3bf81382,0x3c19ccd1,0x3b2b7bd1,0xba46871f,0xbb076527,0x3b15a990,0x3c01e99d,0x3c845a5e,0x3c86766e,0x3c5c7ca9,0x3c54deca,0x3c8b462b,0x3c03f414,0x3c6cc310,0x3c36266f,0xbc24fb6a,0xbd01a634,0x3c3f77f5,0xbac983de,0xbcd43b2c,0xbcf3219b, +0xbce650d9,0xbce0411c,0xbcf244da,0xbd0adb90,0xbd10146d,0xba30e0a5,0x3c43eb0b,0xbce5ee5c,0xbb7bbdf5,0x3c07a88b,0x3bbbd2c5,0x3bcc66a5,0x3bba8e6a,0x3baca7f2,0x3b5f272b,0x3aba8d5c,0x3ab58bc7,0x3b8495bb,0x3c01ed58,0x3c264f6c,0x3c3662e9,0x3c1d4d85,0x3c194738,0x3c0fd269,0x3c1b869e, +0x3c2052cc,0x3c15e1f2,0x3bdc1a0e,0xbd18fe2e,0xbcce8815,0xbd049df1,0xbccc8ec7,0x3bbe51cd,0x3d21101b,0xbce552bd,0x38a4df12,0x3d202fab,0x3d2cb00e,0x3d3a78f7,0x3d27e330,0x3d31d674,0x3d5899ec,0x3d2f275a,0x3a9e4775,0xbcc6d31b,0x3d3f0afa,0x3c17a4b1,0xbcaad240,0xbd0e23d2,0xbce418a8, +0xbcfb19a3,0xbcff1f11,0xbd00dd20,0xbcfe2dcb,0xbcf252fe,0xbcf3e1f1,0xbcf76bf0,0xbcf122e8,0xbd05d7aa,0xbd03ff4e,0xbd00c11e,0xbd0975ca,0xbd07b953,0xbce7e98a,0xbce5453c,0xbcc87101,0xbd36dbd8,0x3c01cb22,0xbcac2b43,0x3be5d98b,0xbc5b3d2f,0xbc53168c,0x3b770143,0xbc4b4a9a,0xbbff96e0, +0xba7d5ed2,0xbbe964d0,0xbc7167cb,0xba81fee7,0x3ce2c620,0xbc626739,0x3a5def76,0xbc3df70b,0x3b120e36,0xbd2c548f,0xbd0c4b5c,0xbd1a364e,0xbd333914,0xbd21006d,0xbd1dfe80,0xbd2b02e7,0xbd2ef300,0xbd32adfe,0xbd232eec,0xbd52fa5e,0xbd57008d,0xbd461c65,0xbd65d2fe,0xbd451e29,0xbce533be, +0xbccb292a,0xbca31d39,0xbce35deb,0xbc712933,0xbd0dac55,0xbbdf92c1,0xbc340df9,0x3ac40135,0xbc4b9375,0x3a2227ff,0xbca05407,0xbb8c0c40,0xbce4974a,0x3be8a892,0xbc8c452a,0xba0edf3e,0xbc22f8b9,0xbc42f29c,0xbb7e6d02,0xbc322854,0xbcf16040,0xbd3814ae,0xbd2ac18f,0xbd655595,0xbd48f220, +0xbd46ca18,0xbd3b72c2,0xbd407c20,0xbd49ccac,0xbd40019b,0xbd802cf0,0xbd889677,0xbd5a63af,0xbd8d776b,0xbd75a619,0xbcd7bc8d,0xbcc427c2,0xbbacfadb,0xbd25c48e,0xbd3eaa98,0xbd08c431,0xbc363e30,0xbc0a345d,0x3ade0ce0,0xbb85b665,0xba6ae99f,0xbb253962,0x3b35bb90,0x3b3128c0,0x3b8e29dd, +0xbc21cdec,0x3bf6129b,0x3a9723b1,0xbbbb5294,0xbc3e5bc4,0xbc1a0720,0xbcba8ba6,0xbd3eaca4,0xbd25591b,0xbd8addf7,0xbd67179e,0xbd764956,0xbd6a9eb2,0xbd78d695,0xbd7ecfe8,0xbd5c6cda,0xbda5b820,0xbdbb1cca,0xbd90e2be,0xbdc6aa5d,0xbd8da537,0xbbe59f34,0xbbf0b838,0x3c1574ee,0xbc4c06d8, +0xbd1d0ad7,0xbd19e4a1,0xbc8677de,0xbc5c7ac5,0x3a3d4c3d,0x3c1f11f2,0x3ba2d27b,0x3b838f64,0x3b43a4dd,0x3c5f9944,0x3c816b3b,0x3be2c742,0x3c4112a8,0x3bc2f795,0x3a419d19,0xbc36f191,0x3bcb1029,0xbd0d4ce3,0xbd3d8b46,0xbd570f7c,0xbd9d2305,0xbd88255f,0xbd8be32a,0xbd70f992,0xbd828f9e, +0xbd8a6384,0xbd7915ce,0xbdc1cb1d,0xbdc8ff1f,0xbd72389c,0xbdd062e4,0xbda80fe3,0xbc86faf1,0xbb47f353,0xbdc48513,0xbdae2853,0xbcd545b0,0xbd0bb14c,0xbc81336a,0x3b7d0685,0xbbf7b5d4,0xbbeb22d0,0x3acc7a0a,0x3c2ad7f9,0x39eaf11d,0x3c6bfdf8,0x3c315b06,0xbb787b2b,0x3b8b7936,0xba9ac90e, +0xbbd3054c,0xbcd0c417,0xbd035f8c,0xbd776555,0xbd8005a3,0xbd38cc4c,0xbd494714,0xbd1d427c,0xbd01628b,0xbc2d63f3,0xbd499e65,0xbd5022cd,0xbd4fc5ae,0xbd81bd92,0xbdaf6771,0xbe0870d1,0xbda6b7fd,0xbd798ca6,0xbd4d6bd9,0xbdd10fd9,0xbd1c0685,0xbc499c85,0x3cde6f04,0xbc980d01,0xbc4d4d6a, +0xbc99b301,0x3bd7cc5b,0x3cc34bdd,0x3b6dde64,0xbb277475,0x3a843fa2,0xb8ff9f4e,0x3bf7bb09,0x3c8cb4e3,0x3c271acd,0x3a22e8ee,0x3ae60086,0xbb37e434,0x3c97e8d1,0xbba4a0bc,0xbd8523eb,0xbd8597ed,0xbd89450d,0xbd7e41e5,0xbd672f7d,0xbd0030dd,0xbcccb994,0xbd088ff2,0xbd6a4980,0xbd7a3b1c, +0xbd4d4e8d,0xbd6c6425,0xbd7db764,0xbd86fdc5,0xbd69eb43,0xbd0da86a,0x3c5bc819,0x3beb3ade,0xbc43f428,0xba1e8d37,0x3c0c8ad8,0x3cee5199,0x3cea431e,0xb9223aba,0x3b23162a,0xbc2eb261,0x3b86e7ae,0xbbc46d0e,0x3b1a0035,0xbc00bea3,0x3c2e0376,0x3c8a287c,0xbbcd46e4,0xbc090b76,0xbc8f42e8, +0xbcffa7a5,0xbce22040,0xbcc78245,0xbcebc34d,0xbd641bf1,0xbd92f6a9,0xbdad9d97,0xbdac52be,0xbd962215,0xbd70a9b1,0xbd7df85f,0xbdb60d31,0xbe07bbaa,0xbdbe2cba,0xbd912381,0xbd35331b,0x3c11f8bb,0x3c855b82,0x3cec86a5,0x3cd8d504,0x3c25a6bc,0x3cd782ef,0x3d0563ec,0x3ce7880d,0xbb8b0544, +0x3bcf2c23,0x3a7508d2,0x3a60d419,0x3a90d1de,0x3bc2a60c,0xbc90dcbc,0x3c9df21d,0x3ca3fca9,0xbbcc5a95,0xbb0afb6f,0xbc01cc00,0xbcaec818,0xbd032170,0xbd05834f,0xbd09cc3b,0xbd7ad21c,0xbda3f3ef,0xbdb87979,0xbddab336,0xbdc4c0cb,0xbda0affa,0xbd8ae7e5,0xbdaba0ea,0xbe085870,0xbddd36b6, +0xbdcc53e9,0xbdcc0838,0xbc9675ed,0xbd86a020,0x3c2bf3c0,0x3b929ae2,0x3b17abca,0x3b41622c,0x3b1b283f,0x3c35b24d,0x3c80be6b,0x3c86c9e6,0x3c85bff6,0x3b12edbe,0x3bd3059d,0x3c317718,0xb967bcf5,0x3c8bc753,0x3ca8c8f4,0x3b8b4d40,0xba3b567b,0xba5d0ad6,0xbcab8545,0xbd3d0d80,0xbd7f8ddb, +0xbd84320b,0xbd959224,0xbd8eb28a,0xbd7e2e4e,0xbd5ce6f9,0xbcff8371,0xbc353df5,0x3c8f4112,0x3c1bf61e,0xbcb0a9dc,0xbd8f8169,0xbdeabbb1,0xbe37ed5a,0xbdce5036,0xbde0539a,0xbc528f5b,0x3d9a239d,0xbaad9a9a,0x3cac0a4e,0x3c86f7d2,0x3c401d76,0xbc001a7d,0xba2b814a,0xbbcdbb1a,0xbb977e45, +0xbbab201d,0xbaaf84df,0x3b61e72a,0x3c42d0ca,0x3c0e784f,0x3b306fde,0x3bb29929,0x3a29a3b9,0x3bb3ee6d,0x3b70ffe2,0x3c88bee6,0x3c414313,0x3bbd0edd,0x3b33ba6d,0xbc996226,0xbc187c0f,0xbcd17fe8,0xbd64f65d,0xbd66534c,0xbd9a77e4,0xbdfff2bd,0xbdcc73dc,0xbda9a81c,0xbd9e040d,0xbda97930, +0xbd23684f,0xbcd79085,0x3c84700f,0x3bb7082e,0x3b6972f2,0x3c4c095b,0x3c2e3cd6,0x3c48a7b8,0x3bbb3836,0x3b9bdfcb,0x3b4f6e97,0xba35681f,0xba769da1,0xba517c3c,0x3aef3a48,0x3b0c2e1b,0xbb9ac7df,0xbbbb6fbb,0x3bda8a4b,0xbb50bc44,0xbcac802e,0xbce776b7,0xbcd8c420,0xbd178564,0xbd1cdd8b, +0xbd0c60dc,0xbcd71e82,0xbc3fbca6,0x3bd0f198,0xbc353212,0xbced03d2,0xbd94bbf1,0xbd3e5bde,0xbd2e1860,0xbd38ecb0,0xbd1041b4,0xbd018bfe,0x3cc6db72,0x39b478c2,0x3b082f63,0x3b7d4d83,0xbc035c42,0x3b647a4a,0x3b028ef2,0x3b094c29,0x39fe9ea5,0x3be36030,0x3ba111ab,0x3bd624aa,0x3aef0b31, +0x3ade4d0d,0x3b84e9cd,0x3bc655fe,0xbb3c6f77,0xbc3b29d7,0xbbdb5ab2,0xbc9b5960,0xbc7f6e76,0xbc931c2f,0xbc558fe7,0xbc2c3f2d,0xbb2d634e,0xbbfec9c8,0xbc1be719,0xbc0d6a2f,0xbca94f28,0xbd03d81e,0xbd6a021d,0xbd1ce0a0,0xbcc58020,0xbcc094d8,0xbb7993b6,0xbc6b9ab2,0xbc8be2b7,0x3c85d295, +0xba5ae480,0x3c27d87d,0x3c652c76,0x3bd66ed0,0xbb8aba01,0x3ab83b58,0xbae9a26a,0x3b2829ec,0xbc65355c,0x3b000042,0xbbbe199e,0x3bcb6054,0xbb6be41f,0xbb250001,0xbbbdbf38,0xbb478d6e,0xbcb8c7bd,0xbc62a3c8,0xbc32041f,0xbc11e0f4,0xbba6e068,0x39d6ec48,0x3baef48c,0xbbabd90c,0xbc5505b9, +0xbcb8b2e2,0xbcebe7cb,0xbd0194ad,0xbd13dc14,0xbcff4ff7,0xbcfad7e3,0xbccd4fb9,0xbca563fe,0xbc792146,0xbc73a14b,0x3ca88f8c,0xbc14d129,0xbc092494,0xbb3a46ae,0xbc53dbf9,0x3c52cb6e,0xbc0a868c,0x3a92d655,0x3acfbd44,0x3adcad00,0xbc25c1c6,0xbbf7a70b,0xbc60a363,0xbc2966e3,0x3a389b54, +0xbc48ce62,0x3bd1e207,0xba111892,0x3b499928,0xbb1af3fd,0xbaf430ed,0xbb8e758a,0xbc0a4a85,0xbc3b41ba,0xbc597b34,0xbc8809ab,0xbca5e15a,0xbce0cbe2,0xbd106ac2,0xbd3efa65,0xbd2124ce,0xbcf5375a,0xbcd0aeab,0xbcbb3b02,0xbc8e45ef,0xbcacf916,0xbc48d296,0x3c15ae34,0x3cb4500f,0xbc5b13fd, +0x3a130636,0x3cb1a44b,0x3cd6d6f7,0x3cbce3f8,0x3ca59cb0,0x3cb56424,0x3cdb8981,0x3cdaa278,0xbb342058,0xbc8fe12d,0x3c9af1b7,0xb921c47a,0xbc8170f8,0xbc8d27af,0xbc8b08b6,0xbc84ad64,0xbc7f75a9,0xbc6bfe5c,0xbc4c4081,0xbc38ae52,0xbc5f279d,0xbc893509,0xbc9d283e,0xbca8b31e,0xbca451bd, +0xbcaee532,0xbca58313,0xbca4a7e7,0xbca4890e,0xbc9cb479,0xbcca6899,0x3cfe7983,0x3cb11a6d,0x3d190d79,0x3c599f25,0xbccf3f43,0xbd344119,0x3c80806d,0xbc821884,0xbd43e098,0xbd508b39,0xbd5847ea,0xbd3d832b,0xbd4354ab,0xbd693836,0xbd425c89,0xbc8f2a5a,0x3c2f10e5,0xbd477859,0xbcd00364, +0x3bb095b4,0x3d0c45b3,0x3ccfca11,0x3ce4a1b5,0x3ce0a2ee,0x3ce69115,0x3ce03a07,0x3ccf8b79,0x3cd5f212,0x3cd95d73,0x3cdc2e3a,0x3cd04653,0x3cc767f8,0x3ccd3132,0x3cce405c,0x3cc59c99,0x3caa838a,0x3cbe80da,0x3d066d35,0x3d15d92d,0xbd4d4f62,0x3ba70867,0xbca1bdb6,0x3b3a1695,0x3aac7a40, +0xbbbd8bec,0x3c2fa9c7,0xbb811f5d,0xbbfeba67,0xbb31a2a6,0x3c31e7af,0xbc008107,0xbd06a8aa,0x3c33670e,0xbc083365,0x3b836695,0xbc9e2bea,0x3ce84e06,0x3d05001a,0x3d06ed26,0x3d135c32,0x3d0fcc19,0x3d13eb35,0x3d1b117d,0x3d25ba3c,0x3d2e2ca6,0x3d37bc2a,0x3d2ef0f6,0x3d31d7a3,0x3d3d5af0, +0x3d3512a2,0x3d25b718,0x3ce7c27a,0x3d01ec87,0x3cf4e979,0x3ced11c7,0xbc213d4a,0x3c9d0a9a,0xbbf90c59,0x3b13fefa,0xbc29da25,0x3cab935f,0xbbf50971,0x3ca63294,0xbc2b3e05,0x3d034bc8,0xbb6017e4,0x3c0ce4ed,0x3b59c046,0x3c72d3bd,0x3c4896e3,0xbb8b8835,0xbb6bba1f,0x3c6e1654,0x3d37e804, +0x3d16e696,0x3d38f632,0x3d2a95f8,0x3d26e5e4,0x3d147d71,0x3d304ba5,0x3d2dbf9d,0x3d4d9ed4,0x3d122841,0x3d132289,0x3d292c99,0x3d26c952,0x3cfa7b7d,0x3c2433bc,0x3cb863ad,0x3d4697ed,0x3d1a4d45,0xbce7b923,0xbc0b6033,0x39226dcb,0xbb840fe5,0xbb1dfc1d,0x3c91c6b4,0x3b7b6a62,0x3bb6adea, +0x3acd0f46,0x3c5e21b5,0x3c0910f6,0x3c312cd1,0x3bd36f19,0x3c83e6e6,0x3c65c5da,0x3bd3c6fe,0xbbcf3d47,0x3a2143d2,0x3d3bb5f4,0x3d12692d,0x3d4de07a,0x3d4d6b0c,0x3d6cbc9e,0x3d59213e,0x3d7d9ba7,0x3d839573,0x3d974ae7,0x3d80d201,0x3d888a03,0x3d9d79b4,0x3d9232cd,0x3d5e2630,0x3c9a8408, +0x3d01682e,0x3cd3bb5c,0x3d396090,0x3b012a7c,0x3c636732,0x3c7e889e,0x3bc6c89c,0x3bd9f147,0x3c897a5d,0x3bba9ae0,0x3be3af88,0x3c70bb8c,0x3c65edfd,0x3ca1d7b1,0x3bc1789e,0x3caf62e7,0x3ca5dcd7,0x3befad52,0x3cadab9e,0xbca30fe2,0x3c66ec52,0x3d444ed2,0x3d4da6c9,0x3d76f270,0x3d6443eb, +0x3d55e248,0x3d2e7625,0x3d5e0554,0x3d742edd,0x3d916626,0x3d297c55,0x3d1d3446,0x3d264221,0x3d49f4ed,0x3c9c949d,0xbc1f8b1e,0x3c737ffb,0x3c445408,0x3d031e15,0xbd228f59,0xbd0533db,0xbc90ddf5,0xbc7e33f2,0x3b1603ed,0xbc0c9970,0x3c4ddca7,0x3c98e689,0x3b92842e,0x3c71c643,0x3c4eba33, +0x3be59389,0x3c05f71c,0x3c3b2bea,0xbc6155fd,0x3b976d47,0xbc494efc,0x3c3db3df,0x3d1c4063,0x3c991dc1,0x3beedcfd,0x39734674,0x3c618ae8,0x3c984d49,0x3d25b029,0x3d0b9172,0x3d166e4f,0x3cd76c1d,0x3d3c9d9b,0x3d237dbd,0x3db3750c,0x3dc5dd08,0x3d4b0b25,0x3d25b40b,0x3b4a9c83,0x3c486368, +0xbcdc399a,0x3ce1a0c7,0xbd02716c,0x3c20136a,0x3b473663,0x3cbc9a6b,0x3c2c47d9,0xba303839,0x3b826166,0x3ba635cc,0x3c0fd107,0x3c6bb6fd,0x3c7efaa0,0x3cab24d7,0x3b9fd196,0x3b49fbfa,0xbcdb866c,0xbb959db4,0x3d455786,0x3d441a62,0x3dade075,0x3cce26b1,0xbb17cd6b,0xbcba2531,0xbce8ff21, +0xbd0ff1e0,0xbc3b4893,0xbd81b65c,0xbd8eb2ea,0xbd584348,0xbd3d56d3,0xbd5ec5d4,0xbd8bf1c7,0xbd040b75,0x3d044387,0x3d26ebbc,0x3d008b40,0x3c763727,0x3ccf5bc8,0x3d0bc053,0x3cf3c684,0x39ca029e,0x3bfe5eed,0x3b27c40c,0x3bd81903,0x3b8b8375,0x3c104506,0xbbc86a06,0x3cc90f4a,0x3caa44dd, +0x3ab8d927,0x3a480d20,0xbb91b383,0x3ca394d0,0x3c3e94f5,0x3bc2ad1d,0x3c9ce628,0x3cce0a39,0x3d27d3ef,0x3d32f101,0x3d3e24ad,0x3d06c9a4,0x3cc94672,0x3bb4b9f9,0x3cb217bf,0x3aaa9c85,0x3d86e5b7,0x3d956966,0x3d5a2d0e,0x3d0e1d57,0x3d4af631,0x3d0a4420,0x3c27de49,0x3cf2fc91,0x3cd853f0, +0x3d00e8ce,0x3ceca73c,0x3ac23503,0x3c5c50ea,0x3bf1f3b4,0x3b9e8e35,0x3c11757b,0x3c2ee7ac,0xbc13c87a,0x3cbda05c,0x3cdc98c6,0x3c0a789a,0x3c10f404,0xbc01b58b,0xbbaf1cb4,0x3bc3ad13,0x3a36750c,0x3babe0e9,0x3cbd0601,0x3cca7e0d,0x3cc1d8dd,0x3ca20dc5,0x3c321bdf,0x3c32adb1,0x3cfc4ead, +0x3d751f2b,0x3d818b60,0x3e078ccb,0x3e1cb94c,0x3e062dc3,0x3d98704b,0x3cb27005,0xbcc03199,0xbb3e4e3e,0x3b9c7366,0xbbb227bb,0x3ca55ad4,0x3c99605a,0x3c651303,0x3c9cfc22,0x3c5888ca,0xbb73282f,0x3c4cb760,0x3c32f325,0xba89c808,0x3c603198,0x3c830477,0x3b158f31,0x3c0ed4ba,0xbc00c466, +0x3bb63a1c,0x3be62fc8,0x3bc6ef0b,0x3b21d7e8,0xbc5277a6,0xbd064ca1,0xbd545c53,0xbd3cb547,0xbcf60e64,0xbc10f526,0xbb8281a8,0x3c450a6c,0x3cb1981f,0x3da4681d,0x3dd2573e,0x3dfcfd68,0x3d33e86d,0x3dc330fb,0x3c004ccf,0xbd5fb028,0x3c27efbd,0x3bb527c6,0x3c2f7646,0x3bee8007,0x3bc9b84b, +0x3b089005,0x3c0035eb,0x3b4e1620,0x3bb57391,0x3bb44ada,0x3c81527b,0x3c864adb,0x3c933ab0,0x3c44fff9,0x3c54d4da,0x3c4f905e,0x3c104586,0x3caaf918,0x3bcb662a,0x3c4c2d32,0x3b5dba7a,0x3c97be16,0x3d2b71fe,0x3d6a789f,0x3d7a6baa,0x3da448af,0x3d3cd282,0x3d2d5e20,0x3d28422b,0x3d9c87eb, +0x3daa8051,0x3da38f52,0x3d94977c,0x3d0cc260,0x3c2d6a2e,0xbc6e8c6f,0xbac160a3,0x3a0a7145,0x3bcfa7e6,0x3c7ae2f0,0x3c5ac74e,0x3c9bd307,0x3bf98945,0x3c9408ea,0x3c146171,0x3c5ae620,0x3c4e498a,0x3c2dee95,0x3bb9d34f,0x3af2d27b,0xba50fa99,0xbc6aacbb,0x3a01005f,0x3bf1cdde,0x3c3d6f43, +0x3ca295b9,0x3b16391b,0xbbb114d1,0xbc528932,0x39ef9004,0x3c375b63,0x3c80137e,0x3c921880,0x3cef13e6,0x3d4e5589,0x3d64ebb9,0x3d6a49df,0x3d6af1ad,0x3d2ff550,0x3d4608c9,0xbc0ac991,0x3b8b94d3,0x3b89495f,0x3b3eec60,0x3caf3400,0x3bf91866,0x3c409333,0x3be72c83,0x3c69288e,0x3bd9de73, +0x3c43869c,0x3b669298,0x3c3e04d6,0x3c39b7e3,0x3c14e380,0x3a16b049,0x3b3a6a8e,0x3befeb46,0xbb9645d4,0x3cdc37ac,0x3c64d223,0x3c8b6616,0x3c880ea3,0x3c8bdbe8,0x3c9556b8,0x3cd2a580,0x3cf03653,0x3d03cf27,0x3cf75d47,0x3d0557b2,0x3d3444ce,0x3d234d3e,0x3d150067,0x3d1eb7e5,0x3ce744b2, +0x3cad48ff,0x3ce844ed,0xbc06fbd9,0x3bc0b295,0xbc2ecbf6,0xbc558ff3,0xbba3b8c7,0x3c1a4112,0x3b1abf27,0x3c1e4df0,0xbbe09a9e,0x3cb90b6f,0x3bad7c42,0x3c804e1d,0xbb4e3742,0x3c46cfc2,0x3c3f268c,0x3c494c93,0xbbdbf69f,0x3cb2a73d,0x3cbba968,0x3c4a86fe,0x3c4186f2,0x3c4ff9bf,0x3c90a733, +0x3c9a9a86,0x3c9a9459,0x3ca35105,0x3cb8d4ed,0x3ccebb8d,0x3cdd25f8,0x3ceaf6f0,0x3cc743ce,0x3cae2d82,0x3caf5df4,0x3c9514b5,0x3c11b535,0x3c0ca7f1,0xbcc9573e,0x3c16ae3c,0x3c00db9b,0x3bcebc05,0x3c7f487a,0xbbafc810,0x3c556cdb,0xbb5890c9,0xbb9b52dd,0xbc28d944,0x3b2e52c9,0xbb80d2cc, +0x3b5fa486,0x3a49bc83,0xbc45b251,0x3c2ef068,0xbc2b4693,0x3c61e651,0x3bdef2d4,0x3c4f4496,0x3c4c3de9,0x3c3b06a0,0x3c097650,0x3bd27f33,0x3c403612,0x3c693bf0,0x3c8d2107,0x3ca61609,0x3cbb0f8c,0x3ceb3d92,0x3cd3f6d1,0x3cb69b7e,0x3c99fcbe,0x3c890a83,0x3c85ca7a,0x3caa26e3,0x3b11f4b2, +0xbcab1220,0xbcf160d4,0x3b6a6a17,0xbc65591a,0xbd02e817,0xbd1703dc,0xbd069d0e,0xbcf05524,0xbd04ca2a,0xbd1fb10b,0xbd245435,0xbc237aff,0x3c3bad99,0xbce3f9f0,0xbc51a584,0x3be65a76,0x3c9b58f2,0x3c853315,0x3c7a8207,0x3c6a537a,0x3c717787,0x3c7a6d1d,0x3c724f19,0x3c8067af,0x3c811691, +0x3c88af63,0x3c9054bb,0x3c909df9,0x3c96d76c,0x3c8af813,0x3c87191e,0x3c84ec81,0x3c835550,0x3ca3555a,0xbc8c5abc,0xbc794cd3,0xbcfbd643,0x3b887388,0x3d0e3791,0x3d102a34,0xb974d4cf,0x3ce180a9,0x3d3dad5e,0x3d3cd1ee,0x3d3a13d6,0x3d1be6b5,0x3d23a62f,0x3d412846,0x3d1f6150,0x3cfb402a, +0x3c07ef71,0x3d20dc82,0x3d0e1895,0x3c24da8c,0xbce14c8a,0xbc900bdf,0xbc9c6552,0xbc9cdc69,0xbca6dc07,0xbca42248,0xbc99c639,0xbc9209a7,0xbc8fac44,0xbc8faf5b,0xbc956808,0xbc9561cc,0xbc96e172,0xbc85a9c7,0xbc812e9d,0xbc74a865,0xbc844243,0xbc54b15e,0xbc425625,0x3d5bdbc6,0xb99cc894, +0x3cc86f84,0x3bb8404c,0x3c4191ff,0x3c84430c,0xbba12ba2,0x3c6f9434,0x3c6f480c,0x3c8a6532,0x3a9b75e1,0x3c6a6eb3,0x3d1d40ca,0x3bb55fb0,0x3cb07e4c,0x3bc8a78d,0x3ce70c73,0xbc80d4c9,0xbccedb60,0xbcbbee0b,0xbcd3d02d,0xbccf6521,0xbcd05a75,0xbce0c866,0xbcb6d6b3,0xbcbe3d8c,0xbce29953, +0xbd07711a,0xbd0deb63,0xbd022dc2,0xbcb11d70,0xbc55ad21,0xbb7d28d4,0xbb947920,0xbc9b347c,0xbc55c990,0x3ca8260b,0xbc21a8b7,0x3c5bfc9e,0x3ba2dcdf,0x3ca670c3,0xba1edfcd,0x3c945655,0xbc5c6060,0x3ccf0111,0xbc91533a,0x3c54a0dd,0x3b90c5b1,0x3c5d2258,0x3b95ea17,0x3c180111,0x3c59591f, +0x3c5190b0,0xbc491a2a,0xbd1927e7,0xbce3a07b,0xbd0d6417,0xbd0ac433,0xbd08442f,0xbcf29a1e,0xbcb78426,0xbcb53501,0xbcdaab01,0xbd0c4e13,0xbd13a33b,0xbd047a15,0xbc824df4,0xbba33d57,0x3b8ea2c9,0xbb9e55c7,0xbc045c39,0x3b9b9de0,0x3d39c702,0x3c7a7952,0x3c4ec096,0x3c081e92,0x3c05fe0a, +0x3c4f6c60,0x3a18d296,0x3a1a5331,0x3b9fa89a,0xba1905d2,0x3c597bb1,0xbc0fc3db,0x3c7f701a,0x3bafadeb,0x3bf5fb8a,0x3b315082,0x3c36a4b4,0xbb80c074,0xbd31b549,0xbd0137b2,0xbd1d8ec9,0xbd281e77,0xbd2c7717,0xbd15b50e,0xbcc7fe1c,0xbcd55031,0xbd20a03a,0xbd672b77,0xbd75f74c,0xbd5bfaf2, +0xbcaec343,0x3bb04d32,0x3d02eda7,0x3cb23fb3,0xbca6bb99,0xbcb77b79,0x3cbae70f,0xbb41f6db,0x3b050084,0x3b38fc16,0x3bd8e274,0x3c7423c1,0x3bacfffc,0x3b9789e5,0xbac0015e,0x3c314331,0x3bf02b76,0xba51abcc,0x3b4b149e,0x3c038412,0x3c3e070f,0xbcad75e2,0x3caddefe,0xbcc49129,0xbd3de7ef, +0xbd303637,0xbd414719,0xbd41984d,0xbd31c5b2,0xbd07a12d,0xbca7d516,0xbca7a921,0xbce21518,0xbd4eb0e0,0xbd4d3440,0xbd0f85c5,0xbbb80650,0x3ca93896,0x3cf6b40f,0x3c3b6469,0xbd45a344,0xbd61e206,0x3caa3f44,0x3cb911df,0x3abedd26,0x3bbaab2e,0xbc0e8d90,0xbb36adbc,0x3a2a08c3,0x3c52ac3c, +0x3bbdd271,0x3c595074,0x3c1662db,0x3c856741,0x3c077dd1,0xbaf4de03,0x3c4d3c3a,0xbc7dd1ed,0xb9be9385,0xbcb1a72f,0xbd24ea05,0xbcb81cb5,0xbcdea419,0xbbf3c4ca,0xbc250dda,0xbc8acb45,0xbd0d6a5f,0xbd5a5b49,0xbd816aea,0xbd8667d2,0xbd8810f2,0xbd7377a2,0xbd2938fb,0xbd585c71,0xbda2d14c, +0xbd8bafb5,0xbdc691bd,0xbcbf41f9,0x3cc1b0f8,0xbd0c9a82,0x3b3f7558,0x3b31ab03,0x3c235c24,0x3ca1be8d,0x3b9238d2,0x3b0fed2b,0x3b73921a,0x3b0a023b,0x3bb3854b,0xba3a448b,0x3c356974,0x3b68c032,0x3bc03537,0xbb5f1f4e,0x3c949400,0x3c1d1de5,0xbd0653a3,0xbccedab9,0xbd56f606,0xbd20bcc0, +0xbcdba5fa,0xbc1232f7,0xbb80169b,0xbb7cb26d,0x3c3f1d1b,0xbd01bc8c,0xbd017cfe,0x3bc92f78,0x3bad042a,0xbbd9e36f,0xbd1b456f,0xbd83d3d3,0x3c68ad92,0x3cacf1a6,0x3cc8011a,0x3cc140d8,0x3cfaf45d,0x3cefecc7,0x3cd9c2d2,0xbb837aa1,0x3c137da9,0xba22da02,0x3b5a8805,0xbab22813,0x3b912c8e, +0xbb95d4b6,0x3c9537ec,0x3cb7557c,0x3c06f556,0x3a9a720d,0xbb931804,0xbca7c6f3,0xbcbd6b58,0xbc769542,0xbca70e75,0xbd134ec6,0xbd387b63,0xbd10043c,0xbd37bb1c,0xbd24f62b,0xbd1fe5c1,0xbd8ccc6f,0xbd9675e7,0xbd6fab94,0x3ad1da5c,0x3ca01875,0x3c2eeb3e,0x3cedaf05,0x3d8a3f60,0x3d13d9cf, +0x3d255a43,0x3cfe09b6,0x3d1faa34,0x3d074add,0x3ce34d0f,0x3acef9a9,0x3c3305be,0x3b846386,0x3b25e326,0x3b6ea2d1,0x3bf1d840,0xbbad7196,0x3c62fd63,0x3cae0daf,0x3bcecbda,0xbb91d8de,0xb8815923,0xbae801f2,0xbcf795c7,0xbcb78ff7,0xbca09f39,0xbd3f896e,0xbd6b233f,0xbd4dbe65,0xbd690485, +0xbd16e1d3,0xbc952fbe,0xbd09fc68,0xbd2f8f99,0xbd7a1de8,0x3b7549cc,0x3d04d3c9,0x3cca774f,0x3d8e8f46,0x3bc10520,0x3c8ddef4,0x3b99d426,0x3af0e6a1,0x3c02c350,0x3c4b67d2,0x3c8e57d7,0x3cdb2e9e,0x3c3f643b,0x3c0b3ad4,0x3b5e403f,0x3bec2ebe,0x3bfd98b5,0xbc36b043,0x3bf890cc,0x3c3aa150, +0x3b9d2b2c,0x3adc5818,0x3bab9c77,0xbcadf5e8,0xbcdd24c7,0xbd10b368,0xbd3b8523,0xbd220a99,0xbcdee0bc,0xbc451594,0xbbd76201,0x3bfef2a5,0x3d6966b2,0x3d2fd78e,0x3d4f669d,0x3c9d88c6,0x3d333531,0x3d09db61,0xba6af6b2,0x3c953533,0x3bcd418a,0x3d3efa72,0x3d7b8a53,0x3ca04545,0x3ce95c63, +0x3cc26c1d,0x3caf9648,0x3bec496d,0x3c4a8850,0x3c0fc533,0x3bdbe880,0x3bc35ed7,0x3c182d29,0x3c294db7,0x3cbd558f,0x3c8ea5b7,0x3baa4801,0x3c1beb14,0x3c7c97f1,0x3cad972f,0x3c25d1b9,0x3cabf6bf,0x3c72d3ca,0x3cb5aa80,0x3cb791a8,0x3c768693,0x3d1c5e3a,0x3d2cfe5c,0x3d6ac281,0x3ca10370, +0xbb8a06cf,0xbcf512d4,0xbcbd6b1e,0xbc02393a,0x3be0b7fa,0x3c7a6f18,0x3a5e175f,0x3c8ff973,0x3cdbdd2b,0x3c9c395d,0x3c81ec0b,0x3c9608c4,0x3c81467e,0x3c93c0e5,0x3c803b9d,0x3c9b19e1,0x3b58238a,0x3c4bf5be,0x3c1c6355,0x3c12f011,0x3c15c3c6,0x3c3fd716,0x3c38d060,0x3bd6225b,0x3b7ace90, +0xbadb6b04,0xbb443162,0xbb9a2322,0xba17d1eb,0xbc62ea7b,0xbc0c18ad,0x3756e5f0,0x3b2010c2,0x3b0f1c43,0x3c0d6bfb,0xbc434d3c,0xbc87d51a,0xbcc8aa24,0xbc89e5ef,0xbbc10aff,0x3c31510b,0x3a5dedda,0xbbe47617,0x3d06b226,0x3ccb1b92,0x3c9fbd8e,0x3c94cdfd,0x3b05f661,0x3c65eb53,0x3c090d77, +0x3c562cdf,0x3c0bc279,0x3c4f7531,0x3c0cbe74,0x3c5b2a42,0x3c1d15c3,0x3c25f4b3,0x3c334280,0x3c8cfb6b,0x3c95c26f,0x3c6aa9da,0x3cc5f3a2,0x3bd4ad77,0x3c33f031,0x3c51ec76,0x3c017334,0x3ba069e8,0x3bb3b4b5,0x3bc9daeb,0x3b825dff,0xba9756fe,0xbc35ec20,0xbc8dc9b2,0xbcb5dc75,0xbc2dad9a, +0xbb05de3d,0x3b6b5a19,0x3c0f1842,0xba46149a,0x3a16d2ec,0x3cc789f8,0x3c272166,0x3c92fbf9,0x3ca6b108,0x3c739aa4,0x3bf52eda,0x3c588c4d,0x3c1a0762,0x3cd0c28b,0x3c0286d8,0x3c591dfc,0x3c2a7885,0x3c944054,0x3c2b7a58,0x3c1af696,0x3c14bd1e,0x3cd0a333,0x3bfab909,0xbac00f80,0x3ba0c82e, +0x3a89ff54,0x3bc92a13,0x3be755de,0x3bb70472,0x3a90b62b,0xbb2b7cd0,0xbb826b38,0xbb419da5,0xbab40adc,0xbbbf3799,0xbb4ea631,0xbae578d5,0xbad53c9d,0x3b1d5464,0x3933ea3f,0x3a7ce9f7,0x3cb8ab48,0x3b9ea21c,0x3c3c4faa,0x3c5dd3b2,0x3c52462e,0x3ca0302d,0x3c4ae35e,0x3ca8ccfb,0x3ca324d5, +0x3cc63d17,0x3c90c3b1,0x3cb05bd8,0x3c993a44,0x3c8f2a1a,0x3cb19847,0x3bab4816,0x3c841e8f,0xbc3917f0,0xbc0b1c77,0xbc1bdbf4,0xbc2bcf21,0xbc4fcd9e,0xbc64c09e,0xbc534b0d,0xbc6a2de3,0xbc7821e4,0xbc7fd103,0xbc9ca568,0xbcab5ba1,0xbca407ba,0xbc804e87,0xbc3bb7de,0xbbed9199,0xbbaab1c2, +0xbacf88dd,0xbb5e6bbd,0x3c6548a2,0x3cd1222b,0x3ca2dd35,0x3c53e842,0x3cbf4d63,0x3cc48cef,0x3cd2c981,0x3cc59be7,0x3cb52547,0x3cc25d3e,0x3cda2639,0x3ce106eb,0x3cc01ca9,0x3c101103,0x3ca569e4,0x3cba8e14,0x3c2c22aa,0xbbad7b31,0xbb00e6ed,0xbb2bc307,0xbb215e99,0xbb0c153b,0xbb1697f0, +0xbb46de06,0xbb4de0c1,0xbb436943,0xbb4017e4,0xbad72ff3,0xba9f9710,0xbace64ab,0xbad537d5,0xbafcdb07,0xbb0108bd,0xbab36394,0x3b5a41d3,0xbc0174a5,0xbb8c6b18,0x3ba42036,0xbce3a6d2,0xbd1ba7b2,0xbc9ab092,0xbca52cbc,0xbd034edb,0xbcdebe8f,0xbcd93c34,0xbcc8584c,0xbc9dc5c2,0xbca1aa6b, +0xbcb66f65,0xbc9f86ab,0xbd09f1c0,0xbcc63f89,0xbc77f13e,0xbd07bd86,0xbcc4fd05,0x3c01cb16,0xba8ccf34,0xbaad9f62,0xb916a4fa,0xba2e360c,0xba874000,0xbae17e0a,0xbab5e284,0xbb0a3775,0xbb24e73e,0xbb88631c,0xbb84cef5,0xbb68f718,0xbb767b56,0xbb876057,0xbb91662f,0xbba2a857,0xbb97dd20, +0xbc0e6fd9,0xbd1743de,0xbc2e0dd2,0xbcbac8dc,0xbc7d3c55,0xbca93bbc,0xbc3ecd6e,0xbb81ee2a,0xbcb8d4db,0xbc973520,0xbcc3cc8e,0xbc2b3b27,0xbc8da0b9,0xbcc948c5,0xbc560436,0xbc9f27dd,0xbc44f7b8,0xbd041bb5,0xbc1babaa,0x3aac650f,0xbb4fbcea,0x3b0e031e,0xbab68f23,0xbaf02d6c,0xbb9ada70, +0xba82bd2c,0xb9c90525,0xba7fe3cd,0xbbd0331e,0xbc0c197e,0xbc22dd8c,0xbc76fc06,0xbc849873,0xbc310677,0xbc3aa0ee,0xbc212b8f,0xbc633f8f,0xbd07d22e,0xbc83f049,0xbccc0cc5,0xbc85d236,0xbca917ee,0x3adf401a,0xbc968ebd,0x3a89b4c7,0xbcf1db25,0x3af17006,0xbc24ded8,0xbc5098c7,0xbc3c2a37, +0xbba966ef,0xbbeb9f69,0xbc393a0f,0xbca60237,0xbb7f90a5,0x3bf16c9c,0xbba95bd4,0x3bd7cb11,0xbab2fa57,0xba3ae68d,0xbbe240ae,0xbadd6dc1,0xbb9985b0,0xbc13546a,0xbc829cb6,0xbc9d5824,0xbc82de6d,0xbcba86f5,0xbccfb465,0xbc9ee424,0xbca95c9c,0xbbfaa537,0xbc29c6bd,0xbcebcf2c,0xbc9f20b6, +0xbc72f110,0xbbf3cccb,0xbb217302,0x3b9e245a,0xba0c23e2,0xba657975,0xbaa91e20,0x3bdde0d6,0xbb9208d6,0x3c12c321,0xbbbef437,0x3ba4441c,0x3ba171e3,0xbb4b1827,0xbcb7eabb,0xbc59e79d,0x3c480e47,0xbaadf1af,0x3c56c9f2,0x3aa24f34,0x393e5545,0xbc3d837c,0x3a8bbc20,0x3b07f300,0xba9a827a, +0xbc579053,0xbcb79807,0xbcbc0857,0xbd2aed70,0xbd409f4d,0xbcab9c68,0xbcc5a50c,0xbcaebcf9,0xbca5cadf,0xbd0b2e59,0xbcc6e9fb,0xbc8bd1da,0xbc0c36c7,0x3981033f,0x3c3a8e0c,0x3b646a6d,0x3a87da44,0x3c13e136,0x3c4633e5,0x3c5310b5,0x3b3dbd9e,0x3c48aebf,0x3c3d43f0,0x3b9e4314,0x3cc3f397, +0xbd124135,0x3b437a8c,0x3c52d167,0xbbcc2e38,0x3c70e642,0xb9b71caa,0xba2a3b01,0xbc3e5ca0,0xbb4c87f8,0xbb90bcd4,0xbc86bf33,0xbce4b4f7,0xbd1ac725,0xbcd687e6,0xbd3e4309,0xbd48a58a,0xbd06cded,0xbd02f043,0xbd0c8f55,0xbcf9fbee,0xbd8fd56a,0xbd25de0f,0xbcd1747b,0xbccbb3dc,0xbc8e994b, +0xbbe98dc9,0xbb922c1c,0x3bfcf523,0x3bb9e0d8,0x3bdbfaf0,0x3c412fae,0x3c9c02b7,0x3b9b2852,0x3c1ca523,0xbbb89088,0x3c4842e5,0xbc883fe9,0xbc564a80,0x3cd2544a,0x3c9f096b,0x3d1f96c5,0xbc43449e,0xbc768baf,0x3cb4239e,0x3cc91c5b,0x3c976880,0x3bc56d88,0xbb6cce0b,0xbc15fc95,0xbca9f8b9, +0xbcc235dc,0xbcf1d6fd,0xbd3cd24c,0xbd1ebe7e,0xbcce046d,0xbce93199,0xbd7ea672,0xbc06080b,0xbd1d0ace,0x3b2395e3,0x3ba7be6d,0xbb736017,0x3a3f97a1,0xbb64223d,0x3b48a810,0x3a8ac4b0,0x3aab7e92,0xba64a6e5,0x3c42526f,0x3c9dad4f,0x3b7bc5d0,0xbb3c8e5b,0xbca3f67f,0xbcbca5a4,0xbbd0bde1, +0xbcb3148c,0xbc9a1d90,0xbc80c8d0,0xbcae705a,0xbd3546cd,0xbd2744bf,0xbcf18f20,0xbc8d274d,0xbcfc0a81,0xbd0b4203,0xbc9e901b,0xbcdad6da,0xbcf75f78,0xbd0c30d2,0xbd2d1a45,0x3cd5fb62,0x3cb91dca,0x3c8573ac,0x3c3beda3,0x3c96c94f,0x3cb7de1a,0x3c8865a9,0xbc1f09ec,0x3bacc38a,0x3a467717, +0x3abc7993,0x38c0d37d,0x3b6e1a9b,0xbb48cdcd,0x3c264c45,0x3c3cdd65,0x3941124d,0xbbeab311,0xbc979810,0xbb698e8a,0xbba2abd5,0xbc8efd88,0xbc86d9c3,0xbcd1240f,0xbcbc7358,0xbcfc8c2a,0xbc0d264b,0xbc4941b5,0x3c37bcf2,0xbccc278a,0xbcfce002,0xbd322c39,0xbd5b6321,0xbd39c26b,0xbca8f944, +0x3b3d609c,0x3c814371,0x3d2cfc8d,0x3d09c747,0x3ceaa976,0x3d01b507,0x3cac4220,0x3c9e4413,0x3ba5a3ba,0x3c29cc11,0x3bcef61d,0x3abab7b2,0x3b9ab3f4,0x3b666830,0xb865decb,0x3c205026,0x3bc72cf9,0x3bbbfb2c,0xbab58a12,0xbc7da91b,0xbcaee9d7,0x3769b576,0xbc9902b6,0xbcd62243,0xbd34ad53, +0xbd37eb2e,0xbd2f298a,0xbcc13672,0xbca83109,0x3bcb54a9,0xbc95f9bb,0xbc772ce0,0xbc905f51,0xbc806bda,0xbcbcd489,0xbd2c67d5,0xbb91970e,0xbd8c8ae0,0xbd12a5b0,0xbc904c06,0x3b45eacf,0xb91de7fb,0x3c89b796,0x3ca019b9,0x3c8fca14,0x3c1ce566,0x3ba5938f,0x3a6f58ec,0x3b978617,0x3a89db0f, +0xbaca73b8,0x3aa6762b,0x3ac59a30,0x3b8d832f,0xbb282cf4,0xbc565754,0xbbb50f77,0xbc40bab7,0xbcb89d32,0xbcd4424e,0xbd0082b9,0xbd0f8e3d,0xbd20e51a,0xbd3f92f2,0xbd63209e,0xbd717e16,0xbd74c435,0xbd124fe3,0x3c4f92c8,0x3c3f0f91,0x3c143949,0xbd25ac5e,0xbd85e73e,0xbd142773,0xbd12e3c1, +0xbb3525dc,0xbb35718b,0x3c2e7f59,0x3be86d4a,0x3ab408e6,0x3a000355,0xbacb1f99,0x3bf59ec1,0x3c53d47c,0x3c277520,0x3c1c28c7,0x3bbf2841,0x3c9f70de,0x3ca0211d,0x3c4cf9de,0xbb66e5cc,0xbc1a23a0,0xba95a855,0x3b3798a2,0x3b3bd7d6,0x3c4372b5,0x3ba45080,0xbbab0cb7,0xbc9b2f19,0xbc583797, +0xbc323a3c,0xbb12c883,0xbbc1c742,0xbc2a39a6,0xbc32fcd9,0xbcd4c885,0xbd140c0b,0xbd310975,0xbd3cefbb,0xbce43b74,0xbcfb7ff7,0xbc8b4318,0xbbe967f7,0xbb80c544,0x3bcaf85c,0x3c66f56e,0x3bd93c9b,0x3c8d1891,0x3c0367f4,0x3c582a36,0x3bfe0d2f,0x3c3dd52f,0x3bab73db,0x3a63e56e,0xbb2abf76, +0x3b9297a0,0x3bc8774d,0x3b89431c,0x3c1815d0,0x3c1c011f,0x3bdb2041,0x3b025481,0xbc6de1c7,0xbc56c74d,0xbbfcefa5,0xba11dea9,0x3a91209d,0x38ce9e23,0xbc96a863,0xbc9e9be8,0x3bccd7fe,0x3b954ccc,0x3b4a810c,0xbabb15f1,0xbcb6fc38,0xbab84a57,0xbc2f6b41,0xbc6cec6c,0xbc2d1aa9,0xbc27186f, +0x3b42d6f5,0xbae7d482,0x3b7ac202,0x3b8d141e,0x3c2fd119,0x3bc2ebbe,0x3c4eca26,0x3c0602dd,0x3c3f804c,0x3bd41a58,0x3bed32c8,0x3ae2da4a,0x3b2bfe63,0x3be7ccec,0x3ba04563,0x3c92cc06,0x3c83d1ef,0x3c8b1856,0x3c1b84bc,0x3bb88a06,0x3bdbc04b,0x3b06c1f7,0xbb3b8560,0xbc19d943,0xbc3a2404, +0xbc218a05,0xbad9f06c,0xbbc243a6,0xbb2c67b1,0x3bb54a64,0x39edee9d,0x3b397adc,0xbb3ac75e,0xbc0c2185,0xbb653917,0xbc162357,0xbbf706f7,0xbb0b2f67,0x3bb62414,0x3b0033c8,0x3b8fe088,0xbb775397,0x3ba44831,0x3bf3b07a,0x3bf8b9d2,0x3bc5bf48,0x3bc566b6,0x3b782e15,0x3b8e644e,0xbb141d58, +0x3b4e1665,0x3c4275be,0x3bb886f9,0x3c1e2538,0x3bf790bd,0x3bfd9df5,0x3b8718cd,0xbb58758d,0xbc2e1f72,0xbc9ca9e3,0xbc490bc6,0xbc26c60f,0xbc1c41b0,0xbb4ff8b9,0xba82390c,0x39892a9a,0xbab3dc35,0x3ae05ae9,0x3ba8bf06,0xbbcd2792,0x3bc6edfa,0x3b71ba08,0x3bc8fbac,0x3beeb560,0x3c15c140, +0x3c3d87b6,0x3b7114de,0x3b376da3,0xb9b632d3,0x3ac614a7,0xb9a0e2c2,0xbbdf8071,0xbc0f6f18,0xbbf7da7d,0xbbe1b80b,0xbc461464,0xba5d617c,0xbb7bc0ba,0xbba0f5ff,0xbbeed6ce,0xbc190217,0xbc2be44f,0xbc333b70,0xbb8b22c2,0x3a81cddd,0x3b81a863,0x3aa23c8b,0xb9fd5030,0xbb05a790,0xbb3fa51d, +0xbb5f92e2,0xba1a5d67,0x3a10887a,0x3b7da4d6,0x3b91a4a3,0xbc26d76b,0xbc4aa592,0xba2d2e1b,0xbc12cbbb,0xbc521103,0xbb8f0ee5,0xbba34ffc,0xbb1c1f73,0x38f81060,0xb99e98c6,0xba6153bc,0xb9a97325,0xbc3c3aff,0xbbb78ff6,0x3af48b37,0xbc3eb351,0xbc021b68,0x3be147a8,0x3b915968,0x3b98d583, +0x3ba7ca10,0x3bb8f139,0x3bb2718a,0x3b8b2f6d,0x3b301301,0x3a3a1912,0xb9204b5a,0x39a8ecfe,0x3abfa218,0x3adae0e1,0x3b426018,0x3b58a01f,0x3b527c17,0x3b57eae6,0x3b80d747,0x3ca86a53,0x3c3846d5,0x3bea0f8e,0x3cda7aed,0x3ca16a9a,0xbc1c6357,0x3ccf278d,0x3cadb02e,0xb836cb08,0xbb69bdc3, +0xbbe830cb,0xbc0e4e68,0xbc134abc,0xbc3fbe10,0xbc0b846f,0x3cbdfa39,0x3cec5324,0xbc4b1258,0x3c9aac1d,0x3cda792e,0x3c2e2035,0x3c4fb925,0x3c67338c,0x3c612b61,0x3c5a112e,0x3c5702a5,0x3c5add59,0x3c5370b5,0x3c537f51,0x3c50baf2,0x3c5599bc,0x3c55b80b,0x3c6b39a9,0x3c805310,0x3c7f8c98, +0x3c65d6ab,0x3c5c469f,0x3bf758dd,0x3c963f3c,0x3c59e02c,0x3c0a1f5b,0x3bc5dcdc,0x3c5b75d5,0x3ca766a2,0x3c36dcf7,0x3c0c8e69,0x3c94717e,0x3c3f8675,0x3ca611ed,0x3c7eb38e,0x3c6b4b69,0x3bd4764b,0x3ca25e04,0x3c920143,0x3c8af286,0x3cb43750,0x3ce6ecc3,0x3c77026c,0x3c9b5fa0,0x3c96d73b, +0x3c874c2f,0x3c843ea2,0x3ca183c1,0x3c983418,0x3c96f10b,0x3c9783f5,0x3ca1e24e,0x3cb99b87,0x3cf19c94,0x3d132971,0x3d0bf03e,0x3cb8ea72,0x3c81dbd9,0x39345986,0x3b7c0f55,0x3c1b048c,0x3be6cedf,0x3c053efe,0x3c3ef684,0x3c73da35,0x3c6f90cb,0x3c5fbb2f,0x3bf5f874,0x3cba045d,0x3c5b7234, +0x3bfda63d,0x3cca24e8,0x3c8ac483,0x3c99c708,0x3cbea66e,0x3c90bfd3,0x3cd0a952,0x3caa9a54,0x3c99ce75,0x3cbf3cd6,0x3cbffce6,0x3ca01623,0x3c920d40,0x3caff6d0,0x3c95060b,0x3c8d6ab7,0x3c9b5aa9,0x3c907d7c,0x3ccb6aee,0x3d0d7729,0x3d3ceb5d,0x3d2a7946,0x3ca3b96a,0x3c5b549d,0xbc4e5a46, +0xba4ae734,0x3c054123,0x3acc5992,0xbb66ab1d,0x3adf9df7,0x3ba15872,0x3ca1b479,0x3bb59244,0x3b8edbdd,0x3b69f33a,0x3b5a28ea,0x3c7d0539,0x3c3e3e7b,0x3c6f0934,0x3c519448,0x3c9bf25d,0x3ca80dac,0x3cdb87cb,0x3cda18a5,0x3c9d5503,0x3cb17b59,0x3ccd1a0d,0x3c9b1f2d,0x3c9a5335,0x3cdb33e0, +0x3ca853b2,0x3ca1dc30,0x3cae4321,0x3cc2f3bf,0x3d21fc6c,0x3d671456,0x3da30e1f,0x3d8c0f60,0x3cb38dc7,0x3b86614f,0xbc9a57fe,0xbc95533e,0xbc240a78,0xbc8f83e6,0xbc010836,0x3a89d8ed,0x3b80aeaa,0x3c1bd6e1,0x3b04e915,0x3bbdcb57,0x3ace4a9d,0x3c04f6d5,0x3be76593,0x3c18fd03,0x3c079506, +0x3c5b9fd7,0x3ca75d7a,0x3bb0f2e8,0x3ce5f15b,0x3cdabe26,0x3cadd6bd,0x3d03c12d,0x3cfa98fd,0x3cc7d02b,0x3cba099e,0x3cc78ea7,0x3c90b607,0x3c828866,0x3c70c184,0x3c8c21c0,0x3d073c40,0x3d46e32c,0x3da54d84,0x3d89dba0,0x3c2f0f0f,0xbab0dad6,0x3c83f106,0x3d198c0a,0x3d061679,0x3ca5d060, +0x3b914370,0xbc2034c3,0xbabfa043,0x3bd9345e,0x3b9005b9,0x3bcc3c4f,0x3b61ec4c,0x3c318fa2,0x3c2b6020,0x3ca05868,0x3c34ad33,0x3c13be62,0x3cc8f786,0x3c22c69e,0x3cd8ec49,0x3c97699f,0x3a8796a8,0xbb7e1756,0xbbe3f7a3,0xbc01113d,0xbc8a119c,0xbd2408e3,0xbcc74f49,0xbc6adae5,0xbca61e9d, +0x3bb9432e,0x3cb4392f,0x3d135621,0x3cd5530a,0x3c96c532,0x3c97c2b0,0x3c881cde,0xbd409160,0xbce76635,0xbc428b15,0xbc1acabe,0x3b6ba7ce,0x3caf0449,0x3c2d0dd4,0x3991829b,0xbb4510bd,0xbb4b0c58,0x3be1db08,0xbb01e03f,0x39fd9615,0xb89aed5a,0x3ca21dad,0x3ca2a0ab,0x3c8bcc11,0x3c534c35, +0x3bcca33d,0x3c835ef9,0x3ccec3fd,0x3cf889b5,0x3d090308,0x3d067f55,0x3ce91f99,0x3cbcbecf,0x3cdd9b64,0x3c16fa85,0xbc245901,0xbc9bcd0b,0xbb1307d1,0x3d228199,0x3d6ae875,0x3d58a9e5,0xbbf2c769,0xbcb8c83d,0x3d082672,0x3d53e4cb,0x3d2b9081,0x3cbe2b18,0x3d2496f2,0x3cc9b78a,0x3c97993e, +0xbba7bf7f,0x3bccea0e,0x3a189336,0x391e16d5,0xba890ab8,0x3b4064d6,0xbbebe23e,0x3c8ff3fe,0x3c9ad469,0x3c866240,0x3c13fbe5,0x3bed9f40,0x3bf02459,0x3c17eae5,0x3c932480,0x3c649bdf,0x3c69460a,0x3c88e767,0x3ca60f0c,0x3cbb48bf,0x3c24547d,0xbc00c6a5,0xbd0d1057,0xbc9f10d2,0x3d4263b1, +0x3d21dd92,0x3d40aff6,0x3d82ab61,0x3d18a1cd,0x3d868147,0x3d654eed,0x3d046063,0x3d39f36c,0x3d1e34ef,0x3cdfe476,0x3ca6c221,0x3c0c643b,0x3c00ccf2,0x3aca0be4,0x3b69c875,0x3b73d3ab,0x3b3e47a1,0x3b17b854,0x3bb8a8d9,0x3c7dd939,0x3ccf81b2,0x3b5b37f8,0x3b7baae3,0x3bcf220a,0xbad5fa12, +0xbb34cc72,0xbbe65379,0x3aff7198,0x3c7a3cdc,0x3cc5fe94,0x3d2813d0,0x3d03d870,0x3c61033f,0xbc2f1352,0xba31b931,0x3d8621f1,0x3da0a2a3,0x3dbc66b7,0x3e057cf6,0x3dae37ef,0x3d66c653,0x3be53215,0x3b157680,0x3c27c75a,0x3c624aaf,0x3ce66357,0x3cbbdf10,0x3cc840b2,0x3be9f097,0x3b8b4aae, +0x3c2c9066,0x3b98322e,0x3b74ec16,0x3c10aa37,0x3c3b7e57,0x3c1fad60,0x3c8737a9,0x3c073653,0x3b3d516c,0xb90e1ca4,0x3b24c7ff,0x3b47e23a,0x3baaf887,0x3c551dc5,0x3c46ed91,0xbb87bfd5,0x3b9c4bec,0xbb398baf,0x3c68806c,0xbc104262,0x3c82da5e,0x3d37e4fb,0x3dd4dae3,0x3e0c6315,0x3e14fabc, +0x3dc25efd,0x3dcf25b4,0x3d760e84,0x3bc63662,0x3d0a0007,0x3c8af4c6,0x3c8a7cc4,0x3c77be9f,0x3c5c9f2c,0x3c6db710,0x3c85651d,0x3cc255ce,0x3c7b927b,0x3c2eaed3,0x3c1ff339,0x3c94997a,0x3c9c15ba,0x3c317d66,0x3c8518ba,0x3c95a88c,0x3c505476,0x3c1e3eef,0x3ba602ec,0x3b477761,0x3a2c46d8, +0x3c289738,0x3d068d0f,0x3d592e2d,0x3d883f62,0x3dbd215a,0x3d73d950,0x3d54e247,0x3d99ccaf,0x3d8cfa18,0x3d8e57fb,0x3d76b927,0x3d9ea8b1,0x3d17286f,0x3cf19cbb,0x3c1a35fa,0x3c6739c2,0x3cb4ad78,0x3c9e5018,0x3ca36894,0x3c85dd62,0x3c88811f,0x3cacfd3d,0x3c5e34a6,0x3c7678f4,0x3c2c905c, +0x3bb25534,0x3c1898d3,0x3c6cfe0b,0x3cb22113,0x3c8ab19e,0x3c279425,0x3c199fae,0x3c5b11fe,0x3c8dddd9,0x3ca918c8,0x3d29fa62,0x3d4ccbfe,0x3d40b014,0x3d0b0c15,0x3c83d874,0xbb48b9ce,0xbb1edd64,0x3c058a67,0x3cf83f4c,0x3d0ccd69,0x3d1fc41c,0x3d011238,0x3d15276c,0x3cdd5216,0x3bdb010e, +0x3cb813e6,0x3c8cc791,0x3cafb5a6,0x3c8b6cd1,0x3c84c6e2,0x3c44e996,0x3c65cf82,0x3c21ea5b,0x3c201fad,0x3bf4259b,0x3c32cdad,0x3c52b419,0x3c4b3497,0x3c2d1c04,0x3c2e610e,0x3c72fb73,0x3c8c07fb,0x3c913525,0x3c85bfc4,0x3c8c2474,0x3c64fea9,0x3cc31995,0x3cce0d1d,0x3cbce58c,0x3ca672b7, +0x3c857400,0x3c3356fb,0x3c4d6f1b,0x3c8a9278,0x3ce52f6c,0x3cd07d0f,0x3cb504c7,0x3ccb2518,0x3ca83282,0x3c87bbfb,0x3c93569f,0x3c42c6db,0x3c854694,0x3c5e7087,0x3c426aa5,0x3c6aed9a,0x3c859e24,0x3c6c1e7d,0x3c512015,0x3c877bba,0x3ca85461,0x3c74df22,0x3cbeb71d,0x3c43a8d4,0x3c43af52, +0x3bad8bff,0x3c10f9c3,0x3c5c9425,0x3c8e0b44,0x3be4964f,0x3c17a58e,0x3bc9206f,0x3b0da763,0x39239e86,0x3b0c2b7c,0x3b8049eb,0x3becba53,0x3c48d2b1,0x3c9d2ec6,0x3cc88f06,0x3ce0900a,0x3ce0e41c,0x3cfe1ae7,0x3d05f40e,0x3cc7baae,0x3cca6e77,0x3ce0f7fa,0x3c5b6c55,0x3cb8fd28,0x3cd938ce, +0x3cce123b,0x3ce70544,0x3c881d4e,0x3cb589b2,0x3cb78784,0x3ca6f615,0x3ca6bfbd,0x3ca54821,0x3c92cd55,0x3cbcc0a1,0x3caf5363,0x3c694240,0x3c7c9528,0x3b4575c5,0xbafa4323,0xbadc75bf,0x395c150d,0x393dd81c,0x3b256961,0x3b4f08be,0x3aec4ecf,0x3b9253b5,0x3be39d9d,0x3c17b965,0x3c430c9a, +0x3c6d0ae7,0x3cb002ff,0x3cb0fc1f,0x3c87c2c5,0x3c90d0e0,0x3cbe113a,0x3c76ef94,0x3c915144,0x3cbae47d,0x3c54935c,0xbb8e6342,0x3cb500b2,0x3c92c0e7,0x3b00d5e9,0x38a1ceec,0xba180960,0xba8a7bca,0xbac695fe,0xbb27cd89,0xbb2db810,0x3c9f6f3c,0x3cb4035a,0xbb980853,0x3c7cff0f,0x3caee062, +0x3c49b48f,0x3c59edc9,0x3c53a5e8,0x3c498ccb,0x3c384b99,0x3c30e77a,0x3c338fe8,0x3c48fa8a,0x3c611ebf,0x3c7d02d7,0x3c8d01a5,0x3c8e5b0e,0x3c960128,0x3c947782,0x3c94d84b,0x3c99474a,0x3c8ec09b,0x3cc8d7b2,0xbce45f52,0xbca43a74,0xbcbf2634,0xbcddb897,0xbbce9d15,0x3cbc8335,0xbcce0302, +0xbc080316,0x3caccb2c,0x3cc0f30a,0x3cda8bc6,0x3ccc646e,0x3cd70e05,0x3d04b6ea,0x3cdd9a14,0xbc01e2fc,0xbcc1a8a2,0x3cfec3d4,0xba9802c2,0xbca43a05,0xbca83b39,0xbc9b490e,0xbcae8b90,0xbcab175e,0xbcb31567,0xbcb32df2,0xbcad242a,0xbcac37c2,0xbcae4df0,0xbca97a27,0xbcba0aa3,0xbcb77c74, +0xbcacc999,0xbcb97a03,0xbcb70af9,0xbca5690e,0xbcb002d5,0xbcbb9dea,0xbd0aa580,0x3a053652,0xbc7384d4,0xbb19cdfd,0xbc473d85,0xbc58b144,0x39b8a707,0xbc094c94,0xbc39b2fc,0xbbc014a0,0xbc5645dc,0xbc5f3911,0xbb127e25,0x3c5f1f68,0xbc523375,0xbb1c38d3,0xbc017c58,0xbb3d9b3a,0xbce38fcc, +0xbcb90882,0xbcdbf480,0xbce1badb,0xbce2f81d,0xbce919cd,0xbd0421cd,0xbd05150c,0xbd0a3c8b,0xbd0149d2,0xbd2afebf,0xbd3048a2,0xbd14e7c6,0xbd2d0763,0xbd201c47,0xbcdb8e3b,0xbcdb9583,0xbcdff348,0xbcffe1b0,0xbca6ac8f,0xbcdfef88,0xbc84ea95,0xbc306e28,0xbb2afafe,0xbc06136a,0xbb8a6f6a, +0xbc65bbb4,0xbc43005c,0xbcb79b65,0xb8968c99,0xbc2c9336,0xbb4fdabb,0xbbfa1391,0xbbefe885,0x3a58926a,0xbbc84bb4,0xbc59cb81,0xbce0e1ca,0xbcf3de7b,0xbd0923c4,0xbd0d2793,0xbd0d0b34,0xbd0f98c1,0xbd10674c,0xbd18b0e2,0xbd0f9b86,0xbd429c02,0xbd4e6947,0xbd1cd8f7,0xbd4ce43d,0xbd2ec2c5, +0xbcc5e9cf,0xbd008384,0xbcc16ce6,0xbcf49cda,0xbcda7083,0xbcaf7ba7,0xbc87bfc7,0xbbb3eed0,0x3b1885eb,0x387e88ef,0x3a3d1956,0xbb4010e0,0xba55584b,0xbabfe378,0xbb1bc7e3,0x3ba9ac21,0x3ad614bf,0x3b153761,0x3b191f89,0x39f8e52d,0xbad27626,0xbc04d5dc,0xbce0f5cc,0xbcebf122,0xbd1b70e1, +0xbd213543,0xbd36bde9,0xbd418338,0xbd488266,0xbd5775fa,0xbd35ac79,0xbd94d4e1,0xbda2faf2,0xbd6e3e8b,0xbda1bb8d,0xbd82c9fd,0xbcb8ba11,0xbcefe9c9,0xbceffa9e,0xbcfca1c2,0xbd05672c,0xbce273e4,0xbcd68308,0xbc16db8c,0x3ad071c8,0x3c33da46,0x3b18d220,0xb8da9c12,0xb9e5703c,0x3c02408a, +0x3bfae708,0x3c1892cf,0x3bdfdb35,0x3bb6eeef,0x3c099f7a,0x3c042556,0x3c033855,0xbc34c8e1,0xbcdc2060,0xbd1d18c2,0xbd37a835,0xbd3e4e07,0xbd451405,0xbd2c89b1,0xbd3b8fb8,0xbd488b49,0xbd2a1903,0xbd9299fe,0xbd9dee39,0xbd393730,0xbd9c702f,0xbd60a31e,0xbc96dfdb,0xbd053f94,0xbd6e8873, +0xbd57e827,0xbc0650c8,0xb9c570c5,0xbc01bc81,0xbba356fd,0xbc5dcb5f,0x3b023521,0xbaf1522b,0x3ae54725,0x3ab660b7,0x3aac4f79,0x3bd1c4d7,0x3c8b731a,0x3b002322,0x3ab027f4,0x3c103ef0,0xbb7f38e7,0xbc9a5e41,0xbd0c89aa,0xbd0f9dd8,0xbcc8803f,0xbc9757aa,0xbc95e6c1,0xbc978254,0xbcf68664, +0xbd383944,0xbd3ec555,0xbd8ea792,0xbd091e80,0xbd145173,0xbd6c2dfd,0xbd80f904,0xbd8ca1a8,0xbd8ebdb4,0xbd98a84a,0xbd581b6e,0xbd56198e,0xbd47525f,0xbd23119c,0xbc42cbbd,0xbb59da55,0x3c28bb0c,0xbbc7e29b,0xbb465f1d,0xbb7f4510,0x3a6fe54c,0x39ef799a,0x3a94b032,0x38a11f19,0x3c5eebb5, +0x3c2a1bcc,0x3aab5ff6,0x3b541ca1,0x3c432892,0xbc186482,0xbd27879f,0xbd3e96d3,0xbd61dc45,0xbd2565a4,0xbcc26d66,0xbbc3c754,0xba16a56d,0xbc4e9d48,0xbd41ecc3,0xbd47261d,0xbd44a00b,0xbc205abe,0xbca8e1f0,0xbc7d3f9c,0xbcfcdc7d,0xbd2ed79d,0x3c2db9a0,0x3c8332f8,0x3cc20309,0x3c76c215, +0x3cee82aa,0x3c67d927,0x3c063abe,0xbc41b16e,0x3955b64d,0xbbb18d5c,0xb92e7ecf,0xbb6a45fe,0xbb9663f1,0xbb1875f6,0xbbd1d03f,0x3b113fc4,0x3c6200c9,0xbb4d4c55,0xbc3e7a3a,0xbcb0d6d9,0xbc6c5bdc,0xbca7fab6,0xbd06d371,0xbd478125,0xbd6714c6,0xbd9fa6eb,0xbd64c48c,0xbd43b588,0xbd793845, +0xbd7cff32,0xbdb0627e,0xbd88b633,0xbe00a9c5,0xbdf555b9,0xbd8f15ed,0xbc56e52e,0x3c10df49,0x3d2362d1,0x3d6ed6de,0x3d064675,0x3d38b7c4,0x3ca09dee,0x3c4a972a,0x3b657c51,0xbaa25f28,0xbb2da07e,0xbab968bc,0xba071e2d,0xbafa0588,0x3ac10cb7,0xbb881248,0xbb9a3954,0x3ca83217,0x3a86d82b, +0xbbd2baf3,0xbc90ae65,0xbc890a10,0xbcc2078e,0xbccd3d47,0xbd2aeeef,0xbd4c7ea8,0xbd8de986,0xbd6d2f81,0xbd85cee8,0xbd9c4f3e,0xbdbe8ce1,0xbdd5297c,0xbd8fcaff,0xbe018d07,0xbe05b8c5,0xbdd6b098,0xbd01de31,0xbd61cccd,0x3b9c6b05,0xbbab4e5f,0x3c33dc5a,0x3c739b69,0x3c837e04,0x3c9b0beb, +0x3c88a5cc,0x399c6719,0xba1a6499,0x3b8807db,0xba491339,0x3b1712a0,0x3ba77cde,0x3bb0aa83,0x3c02eef6,0x3ca0534b,0xbacabf5d,0xbb33151e,0xbc32fe9d,0xbce6426e,0xbd29a589,0xbd2b8fc3,0xbd382c81,0xbd124e9b,0xbce39ac6,0xbccf5318,0xbd12e8a6,0xbd34c0d5,0xbd5b97bd,0xbd469541,0x3c111996, +0xbd0435a3,0xbd2bf990,0xbdaada4e,0xbd82c392,0xbdaa6f5c,0xbc623b48,0x3d5029e2,0xbb015b0f,0x3ca67c05,0x3c1f4bb6,0x3b87d559,0x3a31cbb0,0x3c097619,0x3c2e2ae9,0x3c8db5ec,0x3c25fab0,0x3bd0aac2,0x3b8e29d7,0x3c340c13,0x3c112958,0x3c021389,0x393dda6c,0xbb992b91,0xbafd5e57,0xbc376ee7, +0xbb598dad,0xbc3d4633,0xbcc99085,0xbd02d6ca,0xbd3aac20,0xbcff2e7d,0xbcf70e4b,0xbd442274,0xbd0246e3,0xbd0e6ca9,0xbce2cd2f,0xbd8cad0c,0xbdaa7c2f,0xbdb7beb0,0xbd9b9b02,0xbd462085,0xbd06abc0,0xba52aa1d,0x3b440e94,0x3bd687ac,0x3c58e5d7,0x3c4bd007,0x3c41b470,0x3bc9a64a,0x3ba572f7, +0x3c2b7a0d,0x3b7e5717,0x3b13f685,0x3a7a4dcd,0x3ba37de2,0x3bfbe47c,0x3be53c85,0x3c0c6cef,0x3c87ba7e,0x3bc18f91,0xbb8394b8,0xbbdf4820,0xbb2133ae,0x3b8c271d,0x3c030636,0x3c1783f2,0x3bca3d46,0x3a621211,0xbbd9b663,0xbb94adcb,0xbc59fd0e,0xbd0869c4,0xbc9bd160,0xbcc32607,0xbd3652f3, +0xbd359da3,0xbce6a620,0x3b96f8c0,0xbc091de3,0xbabc145c,0x394ca614,0xbb53eecc,0x3b7d59f0,0x3bd551d2,0x3ba1d2d2,0x3b9a2fb0,0x3c037572,0x3bf93c36,0x3c30139b,0x3c1d96ba,0x3bc78266,0x3bc11e18,0x3acd9b41,0x3b29626f,0x3ab5bc1b,0x3bd5c34e,0xbbab593e,0x38632b8e,0xba5e69ae,0x3b80c605, +0x3b784f3f,0x3b9ae6f1,0xba3fd55e,0xbb7ee8f0,0xbc074753,0xbc098f34,0xbc424269,0xbcb9f146,0xbc9229f6,0xbc8ec2c2,0xbca8a938,0xbc571d8f,0xbba02700,0xbc5d50c0,0x3bd4af35,0xb82dafc9,0x3c03c274,0x3c3f21bf,0x3c111565,0x3b8a2e81,0x3bb8b3f4,0x3b14f991,0x3acbfdfc,0xbba4cc6d,0x3c1d306e, +0x3b7a2487,0x3c2e11a0,0xbab6d207,0xbb9b8e91,0xbb86e685,0x3aa0b6bf,0xbc32a72f,0xbbb78e46,0xbb025f7d,0x3a36f572,0xbade36ca,0xbb2c53d7,0xba8050a5,0xbbd3afb3,0xbc26d415,0xbc6e9dec,0xbc775643,0xbc6364d1,0xbc2f6f24,0xbc22f58b,0xbc11e8bc,0xbbe09500,0xbbf1b3aa,0xba8773b6,0x3a0b203e, +0x3cc64968,0x3b76aa5f,0x3aba52f8,0x3ba6e1ce,0xbb62f24b,0x3c729d16,0x3b0eb261,0x3c19b4e0,0x3c37f60e,0x3c23a003,0x3a5281f9,0x3b80bf87,0xbb693237,0xba8e22ff,0x3c0b11fc,0xbb808161,0x3ba9befa,0x3ac276ef,0x3bab506d,0x3ac6cd83,0x3b1081c1,0x3b7e1ac7,0x3ba3c518,0x3bb0febf,0x3b75c780, +0x3b02a6ca,0xbacf9370,0xbbb83521,0xbc40ca51,0xbca342f7,0xbc805b28,0xbc51b879,0xbc186c1e,0xbbcc7ba9,0xbb9ac166,0xbc059b7e,0xbb9b1242,0x3c371f40,0x3cd84497,0xbbc7a963,0x3b8f478f,0x3cc7f9dd,0x3ce0c5a6,0x3cd046e2,0x3cc56405,0x3cd70346,0x3cfb22a5,0x3cfecab8,0x3b0fff5e,0xbc13221c, +0x3cbc686c,0x3b61e207,0xbbf2910a,0xbbaffb9f,0xbbb5a814,0xbb943f20,0xbb823126,0xbb8ae777,0xbb87dae7,0xbb72566e,0xbba95d3b,0xbbd0b669,0xbbea0e4b,0xbbfea418,0xbbe6222e,0xbbe90808,0xbbc0a406,0xbbc336ca,0xbbb21545,0xbba8ffeb,0xbbcca75e,0x3ce44b26,0x3c8d40b6,0x3ce90114,0x3c8dac47, +0xbc3fc405,0xbd0c4b11,0x3c9aaafd,0xbb8bbbe4,0xbd06fa03,0xbd141175,0xbd1e59a7,0xbd0e35bd,0xbd13b901,0xbd3085e4,0xbd0cc994,0xbba21555,0x3c85d42c,0xbd178aa3,0xbc37880a,0x3c51c62c,0x3ce5bffa,0x3cb42ec3,0x3cc487a3,0x3cc3920d,0x3cc8c31b,0x3cc2cf8d,0x3cb3dc0d,0x3cb52fd1,0x3cb599e5, +0x3cb8a17a,0x3cbda111,0x3cbf9a5b,0x3cd3d678,0x3cd1742a,0x3ccb0db3,0x3ca61fde,0x3ca0c607,0x3c8de06c,0x3cff143c,0xbcf3e45f,0x3c053666,0xbc581e65,0x3bfd2b54,0x3c0eb0b0,0xb9e8ee17,0x3c2ee22a,0x3b3d97da,0xbb2d944a,0x3b32b3a3,0x3c3ad67c,0x3ac08948,0xbcaa8bf8,0x3c636418,0x39bf8fb1, +0x3c2a58c3,0xbb5cdc7e,0x3d01c8f1,0x3ceea2b4,0x3cfac54c,0x3d0aa45d,0x3d0284f6,0x3d017237,0x3d06c6bd,0x3d010e51,0x3d08fafb,0x3d16d3dd,0x3d152f6e,0x3d127f9a,0x3d236e0b,0x3d188066,0x3cf39ca0,0x3c6f8de4,0x3c79685c,0x3c389f47,0x3ca89249,0xbb9a999d,0x3c8bcf16,0xbbe5a54c,0x3bede441, +0x38c455cb,0x3c974b05,0xb9115389,0x3c837024,0xbaf13185,0x3cbed947,0xbb02fa3c,0x3c93f97d,0x3c03f905,0x3c89c8f8,0x3c86b6e6,0x3bf13578,0x3c383195,0x3cba45ea,0x3d203ea1,0x3d0ebb97,0x3d2da25c,0x3d223a09,0x3d1900bf,0x3d058c1b,0x3d063672,0x3d031d60,0x3d21871d,0x3d1a2da3,0x3d354beb, +0x3d56195d,0x3d435e1d,0x3d1a2544,0x3c110a2e,0x3c15ab58,0x3c1bc531,0x3ccc4d4e,0xbc5708fd,0x3ae9bfb0,0xbbcb207c,0x3b0e1224,0x3b78b676,0x3c93b398,0x3bbd9195,0x3b830202,0xba895c83,0x3b9f5e50,0x3bd4af52,0x3ca3ab8f,0x3c097951,0x3c801b5f,0x3c8e1da3,0x3c9d94df,0x3c56238c,0x3c985e00, +0x3d302bda,0x3d17506a,0x3d4f978a,0x3d47c296,0x3d56d7f1,0x3d3e0fb7,0x3d2d77c4,0x3d37e679,0x3d75c95e,0x3d5eace6,0x3d7dade4,0x3d8ad178,0x3d6c1c95,0x3d018a69,0xbc4fd661,0xbb807cae,0xbbd8dfe8,0x3caf5fc2,0xbbb443a8,0x3bd53401,0xbb78b9cc,0x3c09635e,0x3c1389ea,0x3c4cf3a6,0x3b813418, +0x3b730781,0x3ba4141c,0x3bbbee68,0x3c26421f,0x3c8270ab,0x3c85a1f4,0x3c8f15c4,0x3c751f53,0x3cd62f0b,0x3bb421aa,0x3ce389db,0x3d34b997,0x3d421c73,0x3d6fbf5d,0x3d5ce16e,0x3d4e336c,0x3d228281,0x3d1cb57a,0x3d23d3a6,0x3d480e55,0x3d566075,0x3d82aed4,0x3d9a93cb,0x3d902609,0x3d41e159, +0xbbb9bc88,0xbc1d1a51,0x3cb40ce8,0x3d048f61,0x3c3a8c44,0x3bd449c7,0xbbe75464,0xbc4ccc83,0x397e1c1f,0x3abd0c2c,0x3b857c31,0x3bccf055,0x3b5316db,0x3b50f930,0x3bc7634a,0x3c87b28f,0x3bd0646f,0x3c2eec46,0x3c1d71aa,0x3c831a1f,0x3c0dd71b,0x3cc9162c,0x3ce52170,0x3c4aa39f,0x3ad27ef4, +0x3c7feaf1,0x3cb8a6ee,0x3b841d3b,0x3c72b1ed,0x3c7f31b9,0x3cf05730,0x3d5e66c1,0x3d7b1aa3,0x3d3af2cb,0x3d151580,0x3cdacb31,0x3b4cab9c,0x3c9e92f4,0xbbca8d24,0xbcb1e4b4,0xbd30ad96,0x3b8f3427,0xbbd01599,0x3c92ead8,0x3c08212d,0xbb872a0c,0x3b872497,0x3a9d58e6,0x3b944153,0x3b39cdf4, +0x3b0d2259,0x3bc7e9f1,0x3c96de0b,0x3cb42c60,0x3c41aba6,0x3c410115,0xbc13f009,0x3b47643d,0x3d2df1c1,0x3d415fa8,0x3d91a7a4,0x3d167f87,0x3cbd4c51,0x3b95a140,0xbbea3686,0xbc839d2a,0xbd053a0b,0xbc16dcab,0x3b097aa1,0x3c93732b,0x3c98f535,0x3c87ae19,0x3bc9097c,0x3b94b35e,0x3cc6aa99, +0x3cca8c7d,0x3d2589eb,0x3cb13f8f,0x3d1ec567,0x3c5b0dce,0x3ba0d5a3,0xbb885674,0x3b064f43,0x3b07c69e,0x3b045459,0x3b5478c8,0xb9c93634,0x3a8fe090,0x3bb43950,0x3bc5d588,0x3cd7cf6a,0x3c51e7c2,0x3c1e68ea,0x3c923f18,0x3c80ac91,0x3c259a0c,0x3c749c63,0x3ce84361,0x3d1e04f2,0x3d058daf, +0x3d12346e,0x3cabe750,0xbc873465,0x3b553440,0x3caa7096,0x3d84c2de,0x3cef2055,0x3c89930a,0x3bfc8a26,0x3c2b2922,0x3d1b1f81,0x3d060d61,0x3cf0a689,0x3d20c001,0x3d193a34,0x3c8e378c,0x3c2d03f5,0x3c0f6951,0x3b2059c3,0x39f4d388,0x3b39233c,0x3b86c107,0xb8fa30bc,0x3b985763,0xbb4c87dc, +0x3b2118e3,0x3d02f025,0x3c112cbf,0xba8fa8ec,0x3aec6440,0x3bfc49f0,0x3b9bde03,0x3bd01218,0x3ce9ead1,0x3d26d941,0x3d0f7dce,0x3d4a6975,0x3d0383e1,0xbb1c8f74,0xba5198d7,0x3c35406a,0x3d9769a8,0x3d708f1b,0x3d871e23,0x3d9dec45,0x3d23be0d,0x3d9008c2,0x3c4f5804,0x3c361e95,0x3c9665b3, +0x3cad32c7,0x3d00bb0a,0x3cc43e05,0x3c47e5d0,0x3b8cc178,0x3914ed6d,0x3b5821b5,0x3b79f351,0x3b80d884,0x3c265f2e,0x3bce99bf,0x3bd87b89,0x3ca5c430,0x3b8ba76b,0xbbe199a9,0x3b2a2eb8,0x3c0ff9bf,0x3c5dee14,0x3ca20547,0x3c0c2d98,0x3a991f8a,0xbb139490,0x3c64d2d0,0x3c139dc7,0xbcbc0cba, +0xbd022852,0xbc7fed5e,0x3d2a6b5e,0x3da62598,0x3df540fa,0x3e26e393,0x3dd32c08,0x3db2faf7,0x3cb9a51f,0xbcf8d223,0x3caf5a3b,0x3c12e175,0x3c12e7ab,0x3c055522,0x3c85e19f,0x3c7bf036,0x3cb0b73d,0x3c9fd901,0x3c81daa9,0x3c101b27,0x3c189b33,0x3c0c3789,0x3c22ea3d,0x3c7adeb9,0x3c07caed, +0x3b8b97a0,0xbb4d0de5,0xbb7c6278,0xbc8af13c,0xbc91ea97,0xbca3bc54,0xbc045c65,0x3c2b9d7d,0x3c58034e,0x3cc3eb93,0x3d1fe17f,0x3d875157,0x3d9b87fd,0x3de2f924,0x3dc6f26a,0x3d9c3f0f,0x3d7d56c3,0x3d87409d,0x3d04e3db,0x3cac9acb,0xbbf14c1d,0x3b43c60a,0x3c5f9399,0x3c423f0a,0x3c8a467c, +0x3c4653d2,0x3c46cc30,0x3c0fa45b,0x3c851666,0x3c217b9b,0x3c1849ec,0x3c23de6a,0x3c6610fc,0x3c6c1c1d,0x3c3b43cf,0x3c3fcf42,0x3b9da6b3,0x3c198916,0x3c860d07,0x3cbd433a,0x3d0b67d3,0x3d1f2486,0x3d20094b,0x3d2aab1b,0x3d0d28b9,0x3cdc1c05,0x3c170269,0x3cb89ae9,0x3d10fd98,0x3d68b5fd, +0x3d4526a0,0x3d478bfc,0x3d30fd8d,0x3d1008cc,0x3d035cc2,0xbc0b2111,0x3c0b18cc,0x3c09422a,0x3c1a2c2a,0x3ca31105,0x3c307832,0x3c620fad,0x3c208dda,0x3c38e13a,0x3c0ae116,0x3c07a479,0x3bd78c75,0x3c3b1d43,0x3c36643f,0x3bed579f,0xb9b52cee,0x3b002a05,0x3be21d6e,0xb9bba9a3,0x3c678c93, +0x3c4cc914,0x3c70398c,0x3ca4959a,0x3c9ea9a8,0x3c9d2f99,0x3c9e3da6,0x3ca38046,0x3ca1e280,0x3cef61c0,0x3d12cd81,0x3d3b6ba6,0x3d09aa5f,0x3cc2cae2,0x3cbe5caa,0x3c471489,0x3cab79f1,0x3ccca7b7,0xb9082414,0x3c2e56bf,0x3a54f2dd,0xba8250e7,0x3bac798e,0x3c652392,0x3c111a10,0x3c405d82, +0x3b123672,0x3ca83a65,0x3c2129c1,0x3c8f3a52,0x3ab71754,0x3beb0c12,0x3ba0ac92,0x3b895f74,0xbbcad10e,0x3bca7072,0x3b6b8c56,0x3b4afdbe,0x3b2cb902,0xbb0dd8c4,0xbb919f14,0xbba76a6b,0x3baa169b,0x3c522a2e,0x3cb69ab3,0x3cc6cffe,0x3cd2cb6e,0x3cf4c522,0x3ce44bf8,0x3ce4102f,0x3cceaacd, +0x3cbc5320,0x3c8caeb3,0x3c9675dd,0xbb8d0d9c,0x3c8a7411,0x3c83354d,0x3c605872,0x3c933337,0x3b19fd53,0x3c65e1a8,0x3beb242e,0x3bddc681,0x3b7c1ef7,0x3c36ff85,0x3c02d117,0x3c70065c,0x3c536dbe,0x3b603cd7,0x3c8b997e,0x3b38d1a6,0x3c7139f3,0x3c463424,0x3c5caaea,0x3c66d453,0x3c873391, +0x3c982584,0x3ca156a7,0x3c985604,0x3c992a41,0x3c9b2a48,0x3cbd41b4,0x3cde45d7,0x3d021371,0x3ce7c081,0x3cb929b8,0x3caf1fbb,0x3cafa036,0x3c97b80e,0x3cb04c9f,0x3c3fd5af,0xbbb67954,0xbc7b8584,0x3c3ea028,0xb9252e7c,0xbc6f2505,0xbc8fd26c,0xbc8523a3,0xbc71d754,0xbc86c079,0xbca678ed, +0xbcae70cc,0x3ae65341,0x3c7d53dd,0xbc80743b,0xbab75cc6,0x3c42f39c,0x3c848006,0x3c77ef63,0x3c7751d9,0x3c6b8f56,0x3c596102,0x3c4bb6b4,0x3c49eee4,0x3c621266,0x3c85870c,0x3c933dd9,0x3c994b82,0x3c969f26,0x3c9f42c6,0x3c9ffc43,0x3c9f2f05,0x3ca253d3,0x3c9ec122,0x3cce449c,0xbc9c76a7, +0xbc8072f7,0xbcdd5a62,0xbbbe4838,0x3cb2b9ed,0x3cfd90ad,0xbbea6089,0x3c89ee97,0x3d1c84f0,0x3d20104e,0x3d218df1,0x3d091361,0x3d1049d2,0x3d2dd3ad,0x3d1308c9,0x3c9b9086,0xba9050cb,0x3d15b4b9,0x3cc5843d,0x3ac415ff,0xbcc58fb2,0xbc898b88,0xbc9937ea,0xbc9a95bc,0xbc9f2a75,0xbc9d7d07, +0xbc97bce6,0xbc960b09,0xbc966cc3,0xbc93ae39,0xbc984499,0xbc92b971,0xbc8ffd9c,0xbc9241d8,0xbc8c2f34,0xbc6ac797,0xbc865b34,0xbcaf6b28,0xbc9f0a7f,0x3d1b1f17,0xbb730aff,0x3c6d981b,0x3aa8166c,0x3ba6931e,0x3c350ac4,0xbb9b20df,0x3be36328,0x3c0081a5,0x3bd638c6,0xbb87a6bd,0x3c364af8, +0x3d003637,0x3a480dcc,0x3c6ffca2,0x3b829024,0x3cb2e6cc,0xbc8329dc,0xbcb45763,0xbcb70dd4,0xbccf7bc5,0xbcc5ced4,0xbccb742a,0xbce34880,0xbcdf7688,0xbce11b16,0xbcd7fdd9,0xbcf04f23,0xbce1ed82,0xbcc4d629,0xbcbecd48,0xbca9f365,0xbc5d06c4,0xbca114d2,0xbcde51c6,0xbc92dee5,0x3bd6dc3a, +0xbc7eec8e,0x3aeadbd0,0x3af4ae6f,0x3c78b87e,0xbb894c92,0x3c407c66,0xbc543630,0x3c382d54,0xbcad97d6,0x3bfdb25e,0x3b18748a,0x3c1d2ed4,0x3b080155,0x3b8931f3,0x3c5768f3,0x3c3e8541,0xbbf9a62a,0xbcfea969,0xbccf70fa,0xbd097312,0xbcfa1aac,0xbcfea291,0xbcfd3b6a,0xbcf83f53,0xbcf5c25d, +0xbcf7f152,0xbd049ad5,0xbcf8cfcf,0xbcc7a102,0xbcc9c3e4,0xbc8fabad,0xbb866b5d,0xbca1a1b9,0xbd09f4cd,0xbc1ddeba,0x3cc52f0c,0x3bd85a24,0xbb19180a,0x3bc5f3bc,0x3c0e81de,0x3ba4fa1c,0x3b2d75df,0xba8d045d,0x39ad9733,0xbbaa0bb0,0x3b90a196,0x3abeedeb,0x3c4deb28,0x3bbf46dc,0x3bdee1c1, +0x3c230cc3,0x3c8b5790,0x3ba0e0d5,0xbd051749,0xbcd857d6,0xbd1830a9,0xbd14ca15,0xbd240f88,0xbd23ef1d,0xbd243d07,0xbd20f765,0xbd1d44dd,0xbd39f5cb,0xbd2bb33e,0xbd00889c,0xbcdb4c65,0xbc8187bc,0x3a0b74a7,0xbcb0eef8,0xbd2320f9,0xbcd313c8,0x3ad04eb1,0xbc4b10b0,0xbc706d30,0x3b8db69c, +0x3c04f5ae,0x3c16d43a,0x3b992bb2,0x3a15584f,0xbbae14a5,0x3b409c65,0x3b2eee18,0x3c3d48f9,0x3b8183af,0x3be3b589,0x3c5aa9cc,0xbb514b0a,0x3cee17c5,0xbc0cbe87,0xbd06cea5,0xbd0d657a,0xbd3a34fb,0xbd2838ae,0xbd291d5f,0xbd1ab1d8,0xbd1b23f0,0xbd2138ab,0xbd230e86,0xbd452bfc,0xbd223453, +0xbcc95fa6,0xbcd4d7cc,0xbc0f4d4e,0x3c6d9041,0xbcbc25e3,0xbd391d19,0xbd82c2e1,0x3d021c76,0x3d0d3920,0xbb38b82c,0x3b614eac,0xbc108dfa,0x3b91f512,0xbc033404,0xbae04759,0x3b8c294d,0x37e8cce1,0x3abf1ca4,0x3c71b827,0x3bca8cec,0x390019cf,0x3c78ce59,0xbbf6ed58,0x3a700df8,0xbc698bb9, +0xbd1a43a0,0xbcd30927,0xbd0949a9,0xbb3c6339,0xbc0fd10d,0xbca8880a,0xbd59e23c,0xbd5c6efd,0xbd4c2a0f,0xbc81b5c0,0xbccae357,0xbd82f5cb,0xbd70b5d9,0xbd9c41e9,0xbdac5862,0xbd918a98,0xbd3b9373,0xbd44c2bf,0xbc205cc3,0xbd2af5ab,0x3c5ed54f,0xbb3094bc,0x3bfb3784,0xb9f4138a,0xb9180726, +0x3a623213,0x3aa180c2,0x3973a858,0x3ac73cce,0x3a89b6cb,0x3be0ef5a,0x3a0fd674,0x3c2f254c,0x3ba985f8,0x3cb59bd7,0x3b9e3283,0xbcfac487,0xbcdc4c68,0xbd412654,0xbd12b91e,0xbcdc5659,0xbc0267c9,0xbc8323d8,0xbcc4099b,0xbd169162,0xbcd467c9,0xbb05d460,0x3d007967,0x3c331633,0x3cadcaab, +0x3d054fd4,0xbba25724,0xbc868b01,0xbbe465cd,0x3c893d86,0x3c86bb1e,0x3cb6bbc8,0x3b501dc5,0xbae4a490,0xbbb65378,0xba6b17f4,0xbb6f3684,0x3acb5ae9,0xba03acf9,0xbb6bfeac,0x3b9b5437,0xbb67dc89,0x3b8451dd,0x3cdf2130,0x3c1ac2dd,0x3b6be974,0xbc954eff,0xbc94f1a6,0xbc55f8b7,0xbc8e4b53, +0xbcdae2e1,0xbd0dbd72,0xbd081c4d,0xbd485ba4,0xbd3b1b02,0xbd582a28,0xbd362c8e,0xbd6dc8d3,0xbd4a5bd0,0xbd92c6d3,0xbda3b565,0xbda62619,0xbd0b7fd1,0x3c087166,0x3c8a45c7,0x3d4b1aa4,0x3cf90cde,0x3d196c36,0x3c79b912,0x3bbfdc53,0x3b81398c,0xba9a6f42,0xba98eef3,0x39ec0707,0x38f59f4b, +0xbb507357,0x3b779eac,0xbbf086a8,0xbb0ba344,0x3cb73428,0xb9f860c3,0x39a6e5dd,0xbb98192a,0xbcbe53ba,0xbc95d84c,0xbc8285ca,0xbce28cc1,0xbd09a321,0xbd278202,0xbd4f38cc,0xbd361ad3,0xbd7ab3fd,0xbd578b28,0xbd9352dc,0xbda16dd5,0xbdaeed2f,0xbdafae09,0xbda9ebd5,0xbc88b2a2,0x3d25cdda, +0x3d397093,0x3ca25a0a,0x3ca27fb9,0x3d019284,0x3c945c8a,0x3c9b5e39,0x3c81cf24,0x3b01aaaf,0xb85c4ebe,0x3b5dea68,0x391e5010,0x3b2c39f0,0x3b6e14c8,0x3b62f4df,0x3b9ca790,0x3c943503,0xbba3663d,0xbb510c7e,0xbc96f5f8,0xbcc98c29,0xbcef6417,0xbcfebbfa,0xbcc8324b,0xbc58aea0,0x3b91db08, +0x3c86bcd1,0x3c70f281,0x39d8f0c2,0xbba5f29f,0xbc30e2be,0xbbb5c2e1,0xbc2b24d1,0xbab9f78d,0xbb460a5f,0x3d27c3eb,0xbd33834b,0x3c7e9812,0x3d5f4859,0x3c21032b,0x3cb65cec,0x3c795d62,0x3c76917d,0x3c853a14,0x3c9582d7,0x3c84ca84,0x3c4dbfdc,0x3c61a1a5,0x3c294021,0x3adea7da,0x3bc9cbb8, +0x3ba84a66,0x3c15a15c,0x3bbbf8ec,0x3b0c9233,0xbab86b06,0xbc641db6,0xbc15d3e8,0xbcc51d5d,0xbc5ca901,0xbc6cae5f,0xbca443b0,0xbcfb73a7,0xbcfcd3f1,0xbd200de3,0xba5b47af,0x3be00289,0x3c4c8b3a,0xbbc19f1e,0xbcaac53d,0xbd221b12,0xbce7d778,0xbbac6cb8,0x3bbe416a,0x3cc0b998,0x3c98fecb, +0x3cb19f38,0x3c977c60,0x3c467304,0x3c3fd8b5,0x3b3cd394,0x3c058f8a,0x3a686694,0x3bc320df,0x3b7e040e,0x3c113b4a,0x3c454bb7,0x3c5238b3,0x3bedb406,0x3bf92518,0x3c46184c,0x3ba33cbe,0x3b1ae5c1,0x3b3000b0,0x3c345474,0x3c4f8791,0x3c784707,0x3cae00b4,0x3c76a840,0x3c8368a4,0x3cba2604, +0x3c804086,0x3bf71196,0xbc250744,0xbc84a92b,0xbc4bc1fa,0xbc14387c,0xbbba278d,0xbcad695a,0x3c7c1d1c,0x3c40f69d,0x3c507496,0x3c5bdb80,0x3a312f66,0x3c31fa83,0x3bff2aef,0x3c14701d,0x3b95382c,0x3c22a703,0x3bba3242,0x3c31cc81,0x3bdc4c10,0x3bf5d670,0x3bf6f192,0x3c24432b,0x3bcb2a85, +0x3acf265c,0x3bdb79e0,0xbbda2b7f,0xbb6628d9,0xbb9a84a3,0x3a30ce74,0xb90c663f,0x3abd3a93,0xbb2d9e52,0xbb554fb3,0x3a6fa178,0xba63ffd3,0xbbae0e0b,0xbc7e5faa,0xbc7883d8,0xbc7165bc,0xbc83693c,0xbc4085a0,0xbbabeb7d,0xbbe25f8d,0x3c897cca,0x3bae1baf,0x3c845df9,0x3c938743,0x3c5d2578, +0x3bc421eb,0x3c32b1ab,0x3beb74a5,0x3c8abc23,0x3985d21a,0x3c129306,0x3b394f7f,0x3c403150,0x3b25401e,0x3b6614d5,0x399220e1,0x3b661556,0xbc3a80bc,0xbc56dc78,0xbbf0dd5b,0xbc2aa2c9,0xbc1b55b3,0xbc1c13e9,0xbbd63131,0xbb96e37d,0xbb9ec866,0xbbd0da8d,0xbc05c435,0xbc156721,0xbc26be92, +0xbbf02d31,0xbbb835b5,0xbbea260b,0xbb1bad2a,0x3b7cb74e,0x3b8c34c5,0x3cd4d494,0x3baedb81,0x3bc51d73,0x3beed269,0x3ab91681,0x3c541f25,0x3b2942e8,0x3c50a42d,0x3c69f4cd,0x3c939120,0x3c32b290,0x3c82aafc,0x3c459df3,0x3c4f6739,0x3c90d53d,0x3ba475d6,0x3c9a353d,0x3b292a2a,0x3be3af8a, +0x3b7b1ab2,0x3bcfedda,0x3bdf827e,0x3bf439f0,0x3c0e5202,0x3ac0c90b,0xba70213e,0xbb5bc9ae,0xbbd1bf12,0xbc0ff9b1,0xbc52fa7d,0xbc25cb53,0xbbed1cb9,0xbb5ce50c,0xbacd475a,0xb990208f,0xbb2af486,0x3c11d36e,0x3cb3552a,0x3cc5344d,0x3c06a75a,0x3c96603c,0x3cd7c56b,0x3cf007d0,0x3cdc3017, +0x3cc917b0,0x3cd7fbbd,0x3cf600d7,0x3cf9c42a,0x3c823a61,0x3b3e7d44,0x3cb87739,0x3c857d29,0x3b84dec2,0xbbaa6d2a,0xbb5053de,0xbb48715a,0xbb5d7fa7,0xbb7b2bbf,0xbb6bfa90,0xbb32022d,0xbb3bb123,0xbb0f85e1,0xbb3aa04c,0xbb41325e,0xbb1d930a,0xbb2d07fc,0xbaa556db,0xba94e638,0xba45846f, +0xb99074fe,0x3b9ab7f2,0x3bc8a265,0x3bb72599,0x3c8aa6b6,0xbc2318dc,0xbce7ef49,0xbcc07549,0xbba26f69,0xbcb01030,0xbceb3a30,0xbcedb28d,0xbce99ab9,0xbcc4852a,0xbccae32e,0xbcea515a,0xbcc056ee,0xbcbf67af,0xbc1be4ae,0xbcb27905,0xbccb8ba0,0xbc2fe629,0x3c802ad7,0x3c02ee33,0x3c08f1e3, +0x3c0c1c6f,0x3c158202,0x3c0fa525,0x3bf45cd2,0x3bf76ec7,0x3bf50aff,0x3c008548,0x3c006b7e,0x3bfaa342,0x3c057f9b,0x3bc47bd3,0x3bb0e129,0x3bb1b166,0x3bb5f11d,0x3bc15495,0x3c04174f,0xbd156737,0xbb27244d,0xbca33b0a,0xbba1624d,0xbc0d933d,0xbc02fbbd,0x3b2f2a5a,0xbc4fee15,0xbc501563, +0xbc749fe7,0xbb47d63b,0xbc21a01a,0xbcb4dd4b,0xbb2a9532,0xbc435b1f,0xbb384ea6,0xbca1bbef,0x3bcd5598,0x3c469eae,0x3c10eb40,0x3c414b76,0x3c3032f4,0x3c261cac,0x3c047f00,0x3c082194,0x3c1a2372,0x3c3c4a38,0x3c3326b9,0x3c22136b,0x3c2e5672,0x3a4e0f22,0xbb1752af,0x3ab6de46,0xba08f0ee, +0x3bac298c,0x3b92f707,0xbcb7f06a,0xbad14322,0xbc97dc01,0xbb958cf7,0xbc2cbccf,0x3be9900d,0xbc2ed74b,0x3be9ae77,0xbcaa47a4,0x3c08039a,0xbc03647a,0xbb21c2c8,0xbb86fe22,0x3b591313,0x3a87a5fc,0xbb392817,0xbbf3b94f,0x3be55316,0x3c999a37,0x3c120e97,0x3c7ea935,0x3c5859ce,0x3c512573, +0x3bb282a5,0x3be0a79b,0x3bf42f51,0x3c2a56a9,0x3c2e7087,0x3c0ed0eb,0x3c07cf2e,0xbbf4c58c,0xbc4677c0,0xbb89aed8,0xbb8d21b6,0x3b86a962,0x3b5df557,0xbced7d5d,0xbc52b10f,0xbc6ec8d4,0xba953215,0x3b2be62a,0x3bc5699f,0x3b751d9e,0x3a5531b5,0xbb59e4ee,0x3b3d6853,0xbb8d4d0f,0x3c65d4bc, +0x39f05f74,0x3c212d3c,0x3c1d2d5f,0x3c0c1ebb,0xbb84d790,0x3b33c9ca,0x3cb9f2fa,0x3c2903c8,0x3c9d8823,0x3c8ae525,0x3c86489c,0x3b219e03,0x3bf0f727,0x3c1eb4cc,0x3c8a0ca2,0x3c7205ee,0x3c19b4e6,0x3c4f6297,0xbca4b105,0xbcf27df0,0xbbceb72a,0xbc6d44fd,0xbafb19f3,0x3a0795fc,0xbce44e2f, +0xbc6f4966,0xbc855ffc,0x3b0e5f76,0x3be5c606,0x3c1374f5,0x3b961daa,0xb87ca133,0x3b929b80,0x3b5c34ba,0x3c0b324e,0x3c4b598b,0x3c5a5cdb,0x3c50d768,0x3c366806,0x3cfc367d,0xbc450b40,0x3c7de91e,0x3cb6a97e,0x3c39d232,0x3cb228e1,0x3c8a74f6,0x3c65fcd9,0x3a4a020e,0x3b9bff46,0x3c0cc28c, +0x3c4edcb6,0x3c621aac,0x3bd1f615,0x3b65780b,0xbcf8d3b8,0xbd1f154b,0xbc2865a0,0xbc647ee3,0xbbde5370,0xbc8f1e4e,0xbca185d5,0xbb379b27,0xbc82db88,0xbc4f508c,0xbb53fb29,0x3b4bf7e7,0xbbce519a,0xbbad7e7f,0x3bc1f09b,0xbb318c10,0x3b3420f3,0x3c456530,0x3bedee63,0x3c52701e,0xbb908695, +0x3c51cbeb,0xbbbdf287,0x3c2d6b08,0x3d12a63e,0x3cc7abc6,0x3ce1b5bf,0x3c0573b5,0x3ba7dc7c,0x3c28ac2d,0x3be64b9d,0x3c8d32fa,0x3cb294d6,0x3d3c6dd3,0x3d3dfeb7,0x3bff5f05,0x3c55f07a,0xbb0ca64f,0xbd014467,0xbc1c202b,0x3ccd2000,0xbcbf5873,0xbd784aaa,0xbb8a26b9,0xbc2e6e43,0x38ac849d, +0xbb89bc3f,0xbbbbd563,0xbad13203,0xbb3d6d6d,0xb90f2fc6,0x3a55d104,0x399fd0d1,0x3b8fb3da,0x3b8fadf2,0x3c2eb152,0x3c6daf38,0x3c03e483,0xbc30ead8,0xbc6f158a,0x3c0cc3f8,0x39d0c45b,0x3c6e5c22,0x39f4ed85,0xbc0b07d9,0xbcbfb8b8,0xbd03903a,0xbce4ced6,0xbc6dc5ec,0xbc038e40,0xbc6f149d, +0xbce197dd,0xbd07a9aa,0xbc4e8cea,0x3ca4b88c,0x3c40ab72,0xbcc14006,0xbc5b9242,0x3c6f34e6,0x3c261ba9,0x3c21560f,0xbabb70a0,0xbbd2543b,0xbadc1431,0xbb3abc2d,0xb9e89ab7,0x3a502002,0x3b7f0367,0xba50f2be,0x3bae95a0,0xbb89d295,0xba2f9632,0x3c9a1a84,0x3bc28e68,0xba089b45,0x3c0b761f, +0x3c17ccf3,0x3b075b0c,0x3bcc007d,0x3c889a03,0x3cb68479,0x3c97a9e9,0x3b268743,0xbb9c049e,0xbb039e05,0x3ca51347,0x3c98124c,0xbc5fbf8b,0xbd113256,0xbd5d121c,0xbd91e183,0xbd3a5c24,0xbc59bce1,0x3ba11e32,0x3cb48e97,0x3cb1b279,0x3cb2e5ec,0x3bf304a5,0x3b3a33b3,0x3bd2e166,0x3b34e41c, +0x3b795438,0x3ab34787,0x3b5b6501,0xbb314d71,0x3bc08689,0xbb695c39,0xbb375b05,0x3c939c2e,0x3bf12885,0xbbd0683b,0xbc149d49,0x3c0310b3,0xbacb2844,0xbb53995a,0x3b850b46,0x3bd42b37,0x3c5f45fe,0xbb1db669,0xbc497072,0xbc9dc7bc,0x3ad8bf44,0x3be8b186,0xbc2f4a40,0xbc155c2d,0xbcd51dfd, +0xbd5e1f89,0xbccd0fda,0x3d64740d,0x3ce84433,0x3cb64bf8,0x3ccf44a5,0x3cdc7069,0x3cc01013,0x3c9d8bf3,0x3c11113a,0x3bee762d,0x3b1bd15f,0xbab6e86f,0x3ad4fcf5,0x3999294e,0x3c157f3e,0x3b2b6f54,0x3abed686,0x3c406f2b,0xbb10c0aa,0xbc5290f9,0xbaa66831,0xbb1311d7,0xbb2e339b,0xba39cd91, +0xbb1b85fe,0xbc135342,0xbb9ae0c8,0xbc9c44a6,0xbccba716,0xbd30b67f,0xbcfbe800,0xbce58ed6,0xbc50c8dd,0x3bc07dfa,0x3d07083f,0x3d7149dd,0x3d69d94d,0xbc4858e7,0xbce63c42,0xbccd4ef8,0xba4802ed,0x3bd8875b,0x3bc5b1c7,0x3bee5925,0x3ca5690d,0x3c305662,0x3c834c08,0x3c359f04,0x3c8f17c7, +0x3c395ca3,0x3a9b18df,0x3b1a7fc2,0x3bd168eb,0x3c8279ac,0x3aff7319,0xbbcdf0f5,0xbc3eec77,0xbb854a74,0xbc5248bf,0xbc95d6e6,0xbc61d3d0,0xbcab4e12,0xbca5baa3,0xbd2f23ea,0xbd1bf376,0xbd126615,0x3c0d9020,0x3d04d67c,0x3d57ed98,0x3d41abf1,0x3ce42bf1,0x3c0a5d52,0xbc46ab64,0x3c73a5c6, +0x3baabd73,0xb8a7f81e,0x3bf02ca6,0x3c20db9e,0x3bffeebf,0x3c1b5855,0x3bad0b7c,0x3bb8f64e,0xbab759b5,0x3ba62d82,0x3b9f1884,0x3c33b469,0x3c54b5f7,0x3c293449,0x3bb0c9d1,0x3b83ec6d,0x3bc7a1b2,0x3b79fdc2,0x3c594718,0x3c7cdc76,0x3c864a6a,0x3c997dcb,0x3c2acef6,0x3c03c90c,0x3be813f1, +0x3c369500,0x3caa0fc6,0x3d00924a,0x3cf72942,0x3cec8de5,0x3d23f71e,0x3cd2d884,0x3c996797,0x3c8688d5,0x3c894ef5,0x3c37872e,0xbc572c97,0xbb8d1bc0,0x3a5e893b,0x3a36e6f3,0x3c4fccbb,0x3b9ff317,0x3c160001,0x3bbdd672,0x3c164561,0x3ba92318,0x3c1307be,0x3badff1d,0x3c0708fa,0x3bfbfe5c, +0x3beb7d6d,0x3b5728bc,0x3affa364,0x3b83123d,0xbb2b6c4f,0x3c658e51,0x3bfdf3e0,0x3bfda6dd,0x3be86559,0x3bd5d537,0x3bdd1faa,0x3beac229,0x3c0924c5,0x3c7216b6,0x3c8c5f36,0x3c97ca63,0x3cbfa351,0x3c40af05,0x3b7f9c09,0x3b342c5d,0xbb5cf297,0x3bc22a0c,0x3bcbe116,0xbc05b984,0x3ab6c0b3, +0xbb10154e,0xbb5e0991,0x3b04ee99,0x3c14e100,0x3bc0b893,0x3c086337,0x37e3e432,0x3c040126,0x3b579ad3,0x3b47b03e,0x38da2069,0x3bc94558,0x3c11f5bb,0x3bdac0f1,0xbc0b3eff,0x3ba06b2a,0x3c368af4,0x3b93c5b1,0x3baf9d01,0x3b4d5425,0x3b67abeb,0x3b663e4b,0x3bcc5c55,0x3bce03a3,0x3b4e8594, +0x3b9f3aec,0x3b93fa7d,0x3bd3b16a,0x3bd97799,0x3be5789a,0x3b9ba4ad,0x3b8cea19,0x3c2c5133,0x3c309c88,0xbb4e6fef,0x3c1b34a8,0x3b9bbbd5,0x3b870600,0x3bb4bfdd,0xb9de131c,0x3bc17377,0xba915c54,0xba84f4ad,0xbb18796a,0x3b781357,0x3b15b95d,0x3a042b0a,0xbac0e6a5,0xbbc915e9,0x3b607648, +0xbb45bbc5,0x3c490438,0x3c1785c1,0x3c34a249,0x3c46943f,0x3c4deb53,0x3c546e40,0x3c5680c1,0x3c60f4ef,0x3c802bc8,0x3c95fefc,0x3ca0b4b7,0x3ca6e30d,0x3ca8f415,0x3c91bf7f,0x3c6dcbca,0x3c67ab32,0x3c5c2034,0x3c3f3300,0x3c54e436,0x3a6c9e6d,0xbbe641f0,0xbb54ac0a,0x3b175284,0xbb9e5c09, +0xbbbd207d,0xbbe74e84,0xbba20545,0xbb4a7e54,0xbb923bba,0xbbe6e964,0xbbf1590d,0xbba54d80,0x3ba8df7d,0xbb06511d,0xbba22040,0x3b287bf2,0x3c59eef7,0x3c39a825,0x3c389cb1,0x3c2f6c2a,0x3c2de14b,0x3c2ccfb3,0x3c2cae27,0x3c31929b,0x3c2f8c28,0x3c27554f,0x3c22b7dc,0x3c28d010,0x3c2fda6f, +0x3c3b1093,0x3c3df72c,0x3c3f4fcc,0x3c3be2a0,0x3c8ddeaf,0x3bd03fb9,0x3ace90e1,0xbb90be09,0x3c96c826,0x3cc241d0,0x3bd66063,0x3c7900d3,0x3cb01f78,0x3c761894,0x3c59159e,0x3c33e0b7,0x3bf2354e,0x3c00ef7e,0x3c10cfe5,0x3c03dd2d,0x3cbb7fb3,0x3c9ca5be,0x3bc54c15,0x3cb40fcc,0x3c96041b, +0xbb33044a,0x3af57018,0x3b07f470,0x3ac4c167,0x3abc1e5c,0x3aadaac9,0x3aa6ea34,0x3aab3d8d,0x3acccbd5,0x3ae33981,0x3b350b88,0x3b480c46,0x3b58ee40,0x3b77d653,0x3b8b334f,0x3b89a154,0x3b3195a9,0xbb15bcc4,0x3bfaec48,0x3cca496c,0x3bb27e48,0x3c336563,0x3c433ec9,0x3c8d0522,0x3c34314f, +0x3b90a4bf,0x3c7ae078,0x3c2c2ad5,0x3c7fc16c,0x3c013969,0x3c54a0d8,0x3c89646b,0x3c61f2ed,0x3c8ee3d9,0x3c4e97d1,0x3cc02f86,0x3c485ccb,0x3a9234af,0x3b657d26,0x3a9df36b,0x3aeda9cf,0x3af2fd52,0x3b3e2e4f,0x3b34ed20,0x3b52bb5f,0x3b25464c,0x3bb176ea,0x3bdc9e94,0x3bec1ee8,0x3c1c72e8, +0x3bf56e1b,0x3b766e00,0x3ac7dcc1,0xbbcf7677,0x3b604888,0x3c9130f2,0x3bcbf696,0x3c1db1b0,0x3c53d14a,0x3c9c392b,0x3bed6a24,0x3c6f7f66,0x36adfe96,0x3c99d331,0xba40fc18,0x3be15a55,0x3c6cf4f3,0x3c6fd9c5,0x3c5dedda,0x3c88181e,0x3c861534,0x3ca6fc4d,0x3c2562dd,0xba86fd5b,0x3b9ea85b, +0x391b4155,0x3abb6f89,0xb923a83a,0x398e7aa9,0x39a0b828,0x3aea5d8c,0x3ad44459,0x3c0a01dd,0x3c43e952,0x3c37f427,0x3c865aa1,0x3c760c49,0x3be7c2b6,0x3b500000,0xbc4e9d56,0x3bed40a6,0x3c8c34f7,0x3bc8d593,0x39945229,0x3c0c4311,0x3c2dff4d,0x3c41005e,0x3bda4ecf,0x3b1b106e,0x38013bb9, +0xbb51e271,0x3c08b90d,0x3bbef82c,0x3c80a2db,0x3c3b8ecf,0x3c6d1258,0x3c965aee,0x3cd17119,0x3ca1a907,0xbb08e78f,0x3afe31bc,0xbabfd700,0xbaa01446,0xbaa95947,0x3b12675d,0x3acbe889,0x3b62553a,0xb9a2b47f,0x3c20f729,0x3c8a6327,0x3c6fcd68,0x3ccbd890,0x3c832dac,0xbb84af65,0xbb7a79c1, +0xbc2a79ef,0xbb90c62f,0x3bc260a2,0xbb682f88,0xbc0706e4,0x3c0c93e9,0x3c0b5f2b,0x3c0d5454,0x3b7cde91,0x3ade61ab,0xbb5e0ab7,0x399be3c1,0x3b26440c,0x3c3fb20c,0x3bcb2ff2,0x3c3879b8,0x3ca4727b,0x3b867682,0x3d044473,0x3c55de7e,0xbb4aa4d3,0x3ba77444,0xbb08b74a,0x39667373,0xbacc1663, +0xbbbf5866,0xbb94cd9a,0xbb1eb000,0xbbbe683b,0x3c5b0702,0x3cbad171,0x3c9ac891,0x3d0cb270,0x3cf99404,0x3b8697c5,0xba653314,0xbcaa2630,0xbc8c10c3,0x3d309900,0x3d2ac4c7,0x3bcc4f12,0x3be26885,0x3be174f6,0x3c4fef6c,0xbb176dfd,0xbbd72413,0x3b63c90f,0x3a555e68,0x3a989b03,0x3c18a71e, +0x3c6179f7,0x3c393bac,0x3c807022,0x3bad6cc0,0x3cc5c20d,0x3c98ad26,0xbb923caf,0xbc1064a3,0xbc8e43ff,0xbc14f686,0xbc990695,0xbd09b5ed,0xbcd9691e,0xbc8e5aa8,0xbc0158a0,0x3c01d607,0x3bf66928,0xbb827c78,0xbc769cf4,0xbce86bdc,0xbcf838ee,0xbcbfe150,0xbc68ff16,0xbcb8ee54,0x3c1b08a9, +0xbc70fc52,0x3ce61f8b,0x3a9f78ed,0xbc01d969,0xbaec4540,0xbbd89ddd,0xbb3fd1b2,0xba3754e6,0xbab6b05e,0xb8e41bb7,0x3a3970ae,0x3b4c004e,0x3b11af66,0x3cb080b9,0x3c2fa866,0x3c26738b,0x3c22f8df,0x3bd2d8fb,0x3c62c991,0x3c3ae787,0x3c8978f9,0x3c3d09be,0x3a1850aa,0xbb7a9c40,0xbc09f7cf, +0xbc0d8ed3,0x3c661a40,0x3c93fbf1,0x3b0a3dc5,0x3c8b2f79,0x3cc21deb,0x3c920d99,0x3c319890,0xbd2f12f3,0xbcbe7d0c,0x3af3674e,0x3bc9ed16,0x3c2efea2,0xbb82d644,0xbbc2b721,0x3aaf3463,0xba90cef6,0xbacfd8e0,0xbb284509,0x3a538c25,0xbaa9ac3b,0x389d06f2,0x3a7c8582,0x3bb28c12,0x3cba5d54, +0x3c63d94c,0x3c7e5f95,0x3bc3eb3a,0x3bbe1169,0x3c6fdb28,0x3c56234c,0x3c97e604,0x3c713ecd,0x3c8eb385,0xbc286f96,0xbc969d37,0xbd08cc98,0xbc380492,0xb98bea9b,0x3c22d85c,0x3c997f27,0x3bc1eb75,0xbcde7387,0xbd140a03,0x3a4e998e,0xba81a005,0x3c88f649,0x3c972388,0x3c880c27,0x3c267bcb, +0x3bb12268,0x3bde8391,0x3b84490c,0x3b274c95,0x3a1db3af,0x3a989eca,0xbb004375,0x3b8847c5,0xbae140e5,0x3be1079a,0x3c9f7472,0x3c16a727,0x3c3c1a04,0x3c05b508,0xbb676cf2,0x3b174fc4,0xbab58559,0x3be7dbc7,0x3c2a9c2c,0x3cc41a9a,0x3ae6b4c2,0xbb365cd0,0xbc7b5678,0x3b52bc5e,0x3bb0f238, +0xbbbe2560,0x3cba4109,0x3ca85d08,0x3c917e55,0x3c3490b6,0x3de94789,0x3d8c2397,0x3d41b168,0x3d08dc92,0x3d20154b,0x3cd37da1,0x3c9cb987,0x3c6ed5bf,0x3bfadb5e,0x3b8a23a5,0x3b7c148d,0x3aa83473,0x3b137963,0x3bf1a13a,0x3be66f88,0x3bca5778,0x3c534279,0x3ba54944,0x3b65d98d,0xbbe0494b, +0xbb749b29,0x3a8ba7b0,0x3aa7b8b0,0x3c90c5eb,0x3c6a765a,0x3c04b94c,0xbc322f6b,0xbc30609b,0xb97022bc,0x3c85734d,0x3cae79d9,0xbc68a02f,0x3cd42297,0x3d61cc4c,0x3dc6ecdb,0x3dfdae77,0x3cd8b508,0x3cfde181,0x3c3f4d94,0x3ca3ae5c,0x3c87efb4,0x3c88d026,0x3ca1122c,0x3cbda9f2,0x3ca6e6aa, +0x3c8da072,0x3c40168f,0x3c8b331f,0x3c34a171,0x3b038fd3,0x3b640a42,0x3bbeca6a,0x3c523141,0x3c47df9d,0x3c3ce311,0x3b95223f,0x3b562323,0x397910c2,0xbc4a1304,0xbc37e955,0xbc8ca34c,0xbba9b97e,0xbcae015c,0xbc00b908,0x3ca13aa7,0x3ce5a0e3,0x3d256e7a,0x3d750e12,0x3d9c911c,0x3d95acef, +0x3d66b867,0x3d1c50b4,0x3d253bb5,0x3d225517,0x3d07199f,0x3cdf0cf1,0x3ce2db09,0x3c8e1995,0x3c3de7be,0x3c54327f,0x3b9c3fd6,0x3bf6f75e,0xbac135ef,0x3c0b40d9,0x3c26cf66,0x3c423841,0x3c5b577c,0x3c557897,0x3c52478c,0x3c07aeb1,0x3c0b66c2,0x3bc16c22,0x3bb5e415,0x3becba86,0x3bb29653, +0x3c83e71f,0x3ca93511,0x3c745fea,0x3c979eaf,0x3cb5685e,0x3cce350a,0x3ced3c9f,0x3ced6c3d,0x3cd981a8,0x3c791f00,0x3c8a27e4,0x3cbb1e36,0x3d203239,0x3c1561dd,0x3c69a826,0x3cba3117,0x3caab014,0x3cb6a62c,0x3c5fc6dc,0x3c86fad2,0x3c4cb578,0x3c4cfe2d,0x3bf979d4,0x3c042413,0x3bb21dbd, +0x3c04d906,0x3bdd2f51,0x3c1e1376,0x3c2411cf,0x3c833917,0x3c6aa686,0x3c47ed4a,0x3c689a9a,0x3c0a5505,0x3c249943,0x3c0ab3e3,0x3c2a651f,0x3c2e1318,0x3c0327ac,0x3c5db894,0x3c84f88f,0x3caa7e89,0x3c9d10b2,0x3c88ad90,0x3c89e309,0x3c42a88c,0x3bc9ee0d,0x3b2fccce,0x3b9205de,0x3be2858b, +0x3c227fb1,0x3c636c55,0x3c5fff81,0x3c9a7d80,0x3c90f7d6,0x3c84f80b,0x3c56d4bd,0x3c6a25c0,0x3c3f520d,0x3c949bb3,0x3c2ca0b3,0x3bf9de98,0x3c04a65f,0x3c1a3116,0x3c2bdde4,0x3c4862e0,0x3c467333,0x3c8abbd4,0x3c54b024,0x3bd44260,0x3c0dc1bf,0x3be1c1d9,0x3bcc42ad,0x3bb02100,0x3ba4cfbf, +0x3bd4d4b7,0x3c0c1211,0x3c3e16d8,0x3c32ed98,0x3c2a2efb,0x3c1716d0,0x3c06bb99,0x3c2d68e5,0x3c1a8325,0x3c2e4399,0x3c5052ab,0x3c3f1409,0x3c8c910b,0x3c300728,0x3c4d343c,0x3c408d07,0x3c3d2434,0x3c194806,0x3c0896da,0x3c541365,0x3c517a19,0x3c80a0aa,0x3c74dde1,0x3c84c702,0x3c9084dc, +0x3c85256e,0x3c57fcbd,0x3c20e82a,0x3c244166,0x3b018ecd,0x3b1cbe61,0x3b53f0eb,0x3b2dc327,0x3b4e9f76,0x3b4bd35f,0x3b18b666,0x3b7d0b16,0x3b8d5be0,0x3bd7a3f2,0x3c157024,0x3c4e82e5,0x3c8af9b9,0x3c83340b,0x3c594fea,0x3c4c9d1a,0x3c53819c,0x3bff5cb3,0x3bf7de89,0x3c94c86e,0x3c9e91ef, +0x3c341524,0x3c91e804,0x3caac93c,0x3c758c0a,0x3c772a3e,0x3c60b04d,0x3c48fcc8,0x3c48b57e,0x3c490037,0x3c49a4f6,0x3ca4e5bf,0x3c82966f,0x3c335ed4,0x3ca8ba68,0x3c913574,0x3bdf53a7,0x3c0351a3,0x3bfd717b,0x3bf37fba,0x3be96a8b,0x3bde7f0f,0x3bd5bea0,0x3bf0123a,0x3bfdda2f,0x3c02a25a, +0x3c061bbc,0x3bff6563,0x3bfec8f3,0x3c0019b3,0x3c07627f,0x3c0fca01,0x3c0d864d,0x3c814501,0xbc8df36c,0xbc339da1,0xbc1b8acf,0xbcb5ef9c,0xbc6aea76,0x3bf2f3cd,0xbc9bbcc3,0xbc638a52,0x3b456211,0x3b9e76ae,0x3be66f4a,0x3bf601d9,0x3c073b8d,0x3c332878,0x3c0cf571,0xbc753dcf,0xbca69a7e, +0x3c5151c7,0xbc3491db,0xbc9a8463,0xbc17dc0e,0xbc306fb1,0xbc48d8a1,0xbc4566cb,0xbc4840ae,0xbc47f56d,0xbc4728dd,0xbc3f6279,0xbc42546f,0xbc439b4e,0xbc504641,0xbc4f9b9b,0xbc5c1f0a,0xbc6d5a9d,0xbc68f9e1,0xbc3c9514,0xbc448acc,0xbc5cd341,0xbca296f8,0xbc2c9046,0xbc1b3221,0xbc04721d, +0xbc0e7401,0xbc3df9bc,0xbb829c37,0xbb8cf340,0xbc4c0798,0xbc1c6400,0xbc80e9ce,0xbc43a1e4,0xbbedbc03,0x3a62d674,0xbc288522,0xbbe5e4b2,0xbc052ca6,0xbc31c91c,0xbc9a3b94,0xbc548deb,0xbc8dcae8,0xbc90fdbf,0xbc8abf7a,0xbc8aa60a,0xbca40ef9,0xbc920cad,0xbc92991e,0xbc97cd7f,0xbcb17c6e, +0xbcb7ec31,0xbcc02177,0xbcdba820,0xbccd1ca1,0xbc856c45,0xbc9bfbda,0xbc5480cd,0xbc7f2243,0xbc842cd1,0xbc55f8c9,0xbc6ad0ce,0xbbb90fa2,0xbb7338e6,0xbb93148a,0xbbdc3a69,0xbbdb0756,0xbc8da855,0xbc5eb282,0xbb9d884d,0xbc4c75b1,0xbb9bcdbe,0xbb92e8b9,0xbbcd56cc,0xbb3d587e,0xbc2b09a2, +0xbc1b191f,0xbc7b4fd8,0xbca645b5,0xbcb2301a,0xbcae9498,0xbca633ee,0xbcbf1674,0xbc9fc903,0xbca2823b,0xbcbfdb56,0xbcd0799b,0xbcef849c,0xbd00a41f,0xbd1abcc5,0xbd0576d2,0xbc747d35,0xbca4e362,0xbc6b64d9,0xbc42b561,0xbc8d341e,0xbc3ee805,0xbc35e1e7,0x3ad0f910,0x3bd38054,0xba48f460, +0x3b8b12e0,0xba599355,0xbb7578ed,0xbb56c69c,0xbbf1fffe,0x3b91932b,0x3b0f67fd,0x3bb39595,0x3b3e3ff2,0x3a9f5706,0xbba6dea6,0xbbfb8897,0xbc7943d1,0xbcaafdf9,0xbcda992d,0xbcd1cb62,0xbce60775,0xbd065a0d,0xbcd7aee0,0xbcd14d9d,0xbcf07b3f,0xbd14aa3a,0xbd2f8944,0xbd32e273,0xbd58b733, +0xbd2ea9d2,0xbc6c63f5,0xbcce85ee,0xbc26300e,0xbbcfdcf7,0xbc75e7f5,0xbbb165c7,0xbc6d656b,0x3b679030,0x3bdf4402,0x3c1da0d9,0x3b96d646,0xbb149b4f,0xba403d19,0x39e2103a,0x3b9d0300,0x3c093de6,0x3c0b2755,0x3bfcccb4,0x3c0c44c9,0x3c6ab787,0xbac1d7a5,0xbb908d89,0xbc6cc3f6,0xbcdca2e3, +0xbcf9e5ea,0xbceec158,0xbcf29722,0xbcff57ca,0xbccaeff3,0xbcd2ffb4,0xbd03769a,0xbd1b5ba2,0xbd3cf248,0xbd413f9f,0xbd8210bc,0xbd433cf9,0xbc15c379,0xbcaa9022,0xbd621ab9,0xbd676d4e,0xbcda2f91,0xbb6efc5b,0xbc12a57a,0x3b1f7f6b,0x3a6aa59d,0x3bb0c2ea,0xbbc6aafc,0xbbf8391c,0x3a4ce2f8, +0xbba5597b,0x39d9b91f,0x3be02524,0x3c246474,0x3c50acc9,0xba6aec67,0x3ba3f443,0xbbf4c71c,0xbc81fe6e,0xbc49917b,0xbbfd534a,0x3b9c772f,0xbc55c962,0xbc5fab56,0xbc7c0de8,0xbbdd3324,0xbb9e0182,0xbb90cc4f,0xbbac333e,0xbc9b336f,0xbd1612c0,0xbd5338fc,0xbd7d50e7,0xbd72fe2b,0xbd7c1a4e, +0x3c31bf7e,0xbcf69363,0xbd0dab2d,0xbc985644,0x3b9dd52e,0xbc3abbfe,0xbc22f251,0xbc553354,0xbbd0e50a,0xbba9ccb0,0xbbb5c1e3,0x3a6c21ff,0x39c0a8af,0x39e31c1f,0xbb1b7860,0x3902dfd0,0x3c2f66c7,0x3b9e82be,0x3b397e6c,0xbc0437e0,0xbc9388bc,0xbcdf013a,0xbd09a3f5,0xbc88912e,0xbc79a656, +0xbcdea89f,0xbcbbef6d,0xbc9091d6,0xbcade13d,0xbbc68fb3,0xbc04bcc3,0xbcafa31b,0xbccd336f,0xbc75e8c4,0x3afbbed0,0x3ad67bbb,0xbd5af5af,0xbd499104,0xbccbc2a4,0xbc13d155,0xbc452044,0xbc261a93,0xbc488c63,0xbb90bbf6,0xbb993a90,0xbb7ea96e,0xbb8f24d1,0xbaba6e66,0xbb9c7ff2,0x39d6247d, +0xbc30e7d2,0xbb820c27,0x3c343140,0x3b28f215,0xba4832c3,0xbbbdb27b,0xbb3ac219,0xbbe42cfa,0xbc2afef4,0xbc888e04,0xbcc74a1e,0xbd24edd6,0xbd0eac51,0xbcf1ef36,0xbcad4c0d,0xbc524cae,0xbccc5c24,0xbd6dad50,0xbd914c96,0xbda4cc23,0xbd9d7920,0xbd879a66,0xbd2af70d,0xbbfb90d9,0x3c6fe9bb, +0x3bf68367,0x3c1f09d6,0x3b285c96,0x3a812ed9,0x3b54f717,0x3af82dfc,0x3b33948f,0xbb38bf4e,0xba9ec23c,0xbb617f17,0x3abd5458,0xbaaeb436,0xbb2e645e,0x3bd8bc45,0x3c0c416e,0x3aa071fb,0xbc2f3b76,0xba9c5394,0xbba90660,0xbc21eed6,0xbc438a95,0xbcaf1175,0xbd0d91f8,0xbd49d1e7,0xbd550edf, +0xbd2c337f,0xbce0e327,0xbcf9698e,0xbd877636,0xbdaaba6e,0xbdccd07e,0xbdd41800,0xbd853893,0x3ce27cac,0x3d6f09c5,0x3d32096b,0x3d20598d,0x3d0db153,0x3cb5184c,0x3c8edfa2,0x3bc441e7,0x3bc81f1b,0x3b495f0f,0xbaa5c636,0x39b6a22b,0x3a7a9a56,0x3b0a7e19,0x3ab676a1,0x3b25af9a,0x3c0bbf36, +0x3b5bf921,0x3a638e1f,0xbb962b8c,0xbc153ecf,0xbc6059fc,0xbc9dea8a,0xbc699ab8,0xbcaa07a8,0xbcd671a5,0xbd53ecbe,0xbd58449c,0xbd460244,0xbcaa6f17,0xbcc4e20e,0xbd057c22,0xbd8da200,0xbd8fdd3e,0xbd554e81,0xbb96c2e9,0xbd9378b4,0xbcf3f44b,0x3c43a44b,0xbb49d6cc,0x3c5c81db,0x3c1ce67b, +0x3c08e496,0x3c386d15,0x3c1ce2ba,0x3c23cd8f,0x3bd3944a,0x3c320166,0x3be6e6db,0x3ac4c626,0x39586c71,0x3ae6e002,0x3c2cc11e,0xba9b2a31,0xbbd4eb62,0xbbe17329,0xbc0952ba,0xbbfd01cb,0xbc57f1d3,0xbcd39173,0xbd264f86,0xbd4e8fc6,0xbd8d4a0b,0xbd866ae7,0xbd770456,0xbd27366b,0xbccc9154, +0xbc332f6c,0xbc11a55a,0xbc651773,0xbc9948b5,0xbd44cb14,0xbc4e6fc1,0xbbd670d5,0x3c596e4a,0x3c4fb3f2,0x3c1fee96,0x3c06f921,0x3bd32728,0x3bd91e46,0x3b42cad0,0xbb3f5965,0x3ad99524,0x3a2655cd,0x3bc20efc,0x3bcb7043,0x3be5a667,0x3b7d8c2b,0x3b95d452,0x3b01343a,0x3bc56a2e,0x3b2bdb8d, +0xbbb11365,0xbc192e0f,0xbc8aae3b,0xbc656ffc,0xbc50541b,0xbc8dba2c,0xbb29e74c,0x3c25b6eb,0x3ca2a06e,0x3cbd6d4a,0x3c736c3f,0xbaea58a0,0xbbc7d18e,0xbc2f7d2f,0xbc836c42,0xbc32216f,0xbc5256bb,0x3b034cef,0xbba0b78d,0x3aeed796,0x3ab939dc,0x3b8ec07f,0x3bac62d1,0x3c0ca2aa,0x3bc4ce50, +0x3c044aee,0x3bda8528,0x3c0e4236,0x3bcfa56c,0x3bda581e,0x3bc5563b,0x3c09e607,0x3c17b76d,0x3bab02ec,0x3b85f696,0x3b705afe,0x3b4f02ce,0x3b7fda33,0x3b692af2,0x395f0e97,0x39fbb025,0xb9334630,0x3ba785d0,0x3c0dd8c4,0x3c3edbd3,0x3be5dc9f,0x393206fc,0xbc134a91,0xbc021661,0xbc072307, +0xbc46f1d2,0xbc1b846d,0x3a8e8ff8,0xbb34616a,0x3b405a09,0x3b3bde86,0x3bfb20e4,0x3c0b8dc6,0x3bf8426d,0x3bd72fe1,0x3bc8ccac,0x3bbd30b9,0x3aad5024,0xb9503225,0x3b8d8789,0xba280d84,0x3bc862a6,0x3ba12e2a,0x3bea4336,0x3bed4739,0x3bd30dcd,0x3b242f4d,0x3c366eb6,0x3c1bf314,0x3c776c03, +0x3c603539,0x3c57c2f2,0x3c277e87,0x3b90c5ac,0xba318193,0xbb9ca276,0xbc0d1c61,0xbc432d64,0xbc68eb32,0xbc479dc1,0xbc2ac991,0xbc00e1bb,0xbb7c1fe0,0xbb56ed82,0xbb561c2c,0x3bd8d2a6,0xba9d3c90,0xbba5649d,0xbb2b559e,0xbbc5de6b,0x3b7d99b5,0xbae13e4a,0xba3c375d,0x39dd4cd4,0xba386a15, +0xbb21fd53,0xbaa1a537,0xbbd1c8f7,0xbbad5f16,0xb98e6f59,0xbb63351e,0x39060fc7,0x3c101e16,0x3be0fb6e,0x3b833f1b,0x3a3024d3,0xba424295,0xbaeeb0b5,0xbb54bcad,0x3afd12ec,0x3b5b9175,0x3b809acd,0x3b33de86,0x3af996b1,0xbb000fb6,0xbacdd8b4,0xba92c0f4,0xbaf1eb4a,0xbb600b4b,0xba93ecdd, +0xbb4656c1,0xbbbf20ab,0x3b088f8a,0x3c7899a8,0xbba925d8,0xba9815a1,0x3c481311,0x3c5c554c,0x3c5931bc,0x3c5a7671,0x3c645347,0x3c7b1616,0x3c7e57cd,0xbb4e4887,0xbbc28923,0x3c74094e,0x39066a56,0xbb84ad4c,0x3b328586,0x3a5799ec,0x3ae014ae,0x3b225127,0x3b36bd4b,0x3b1eda42,0x3aa89f96, +0xb9b7198b,0xbb2ec3c0,0xbb85323c,0xbba648ac,0xbb9f5f43,0xbbb187ef,0xbb93b92c,0xbb79b620,0xbb4a76f3,0xbb0b677b,0xbb34d6a0,0x3cad8d47,0x3c5e03ec,0x3c9909df,0x3c9ebeb6,0x3abdc966,0xbca90e35,0x3c9b5500,0x3baab652,0xbc8f71ed,0xbca371ce,0xbcb8b9f2,0xbcaebcbf,0xbcb4ceac,0xbcdb1016, +0xbcb1a72a,0x3b9b9777,0x3c93f094,0xbcc15982,0xb93675ec,0x3c716579,0x3c8cff7f,0x3c788b07,0x3c891c2a,0x3c855e08,0x3c8a136f,0x3c878e96,0x3c7e743f,0x3c835d17,0x3c85272f,0x3c8350b3,0x3c8a3ca9,0x3c88518e,0x3c8c42b7,0x3c8daca6,0x3c88b054,0x3c67c11b,0x3c70751d,0x3c5cc28b,0x3ccb9447, +0xbc114548,0x3c15b74b,0xbb82494b,0x3c32e0a7,0x3c56cb64,0x3b2df67e,0x3c1995a5,0x3c06b873,0x3ad710f1,0x3be1b8db,0x3c1c5144,0x3b7b1b22,0xbc051afb,0x3c6ba33b,0x3bb95e0b,0x3c1f26e1,0x3b872e47,0x3cc3c560,0x3c9cafe7,0x3caebae4,0x3cb3faef,0x3cb44cca,0x3cb899e8,0x3cc4905c,0x3cce9f29, +0x3cd72c2c,0x3ccded08,0x3ce06dec,0x3cdb8bcf,0x3cde29c2,0x3ce1f218,0x3cc600d9,0x3c7cfe1c,0x3c771093,0x3c5b2685,0x3ca50d27,0x3c064226,0x3c98f4b2,0x3b2bdd89,0x3c50f17a,0x3c138901,0x3c55e6a1,0x3bc84755,0x3c3a23d9,0x3b9ee573,0x3c6e7a2b,0xb9c3aede,0x3c5c6f1f,0x3c23d86b,0x3c84b27f, +0x3c806581,0x3bffc1b4,0x3c33a357,0x3c7a839d,0x3cc879c5,0x3cc72ddf,0x3cdb2fd8,0x3cd8693e,0x3cd0616f,0x3cc0cb02,0x3cdf1c7f,0x3ce14da5,0x3ce505e5,0x3cf4fd4f,0x3d01c840,0x3cfeca21,0x3d01fe5d,0x3cd0c305,0x3c336620,0x3c6364c9,0x3c255059,0x3cae2e7b,0x3be712dd,0x3c2cd799,0xba2a7f47, +0x3c1c6a1a,0x3c244d34,0x3c5f1c28,0x3c0fac57,0x3ba41d5e,0xbb27be21,0xba9c2687,0x3b74764b,0x3c2769a7,0x3c513ed5,0x3c7c23bf,0x3c6cad9a,0x3c72d144,0x3c5a47e0,0x3c7d48a8,0x3cd5a8bd,0x3cccf28c,0x3cf8bee2,0x3d05ad2e,0x3d15d5ae,0x3d0b6823,0x3d1c288c,0x3d219035,0x3d1f27ba,0x3d2de598, +0x3d387742,0x3d2e6a17,0x3d33a0d9,0x3cf6cf84,0x3bf83ad1,0x3c234a8a,0x3c3e870b,0x3cbcff3f,0x3c5880e1,0x3c814d18,0x3b8b5605,0x3c7eea9f,0x3c576a1a,0x3c1911ee,0x3bcfe4d0,0x3b03baf7,0xba570dec,0xbaf3b6a2,0x3b838745,0x3c2c2163,0x3c69f916,0x3c89e2cb,0x3c75d21c,0x3c7d251c,0x3c3f8bb6, +0x3ca2c42a,0x3ce0b67c,0x3d06fb3a,0x3d14a571,0x3d1030de,0x3d0b3add,0x3cde141a,0x3d0d28c9,0x3d16be29,0x3d0a4f38,0x3d2e24d6,0x3d36179e,0x3d212b1e,0x3d34fe37,0x3ce9af59,0x3bae4edc,0x3c1e2d54,0x3b427824,0x3c1c55ec,0x3a079616,0x3b6e9310,0x3aa106d2,0x3ba57519,0x3c46de6f,0x3b9f3379, +0xba9b9c33,0xbba26322,0xb8051c89,0xbaf5c0ac,0x3a7db856,0x3bc6f1bf,0x3c6e600f,0x3c933211,0x3bd88a2e,0x3c7bdf15,0x3c94aa8a,0x3cbcb220,0x3cb371dd,0x3c3fffac,0x3c027c51,0x3c22de98,0x3c43b93a,0xba5b53e8,0x3ca2afb9,0x3cce6da7,0x3d2c084a,0x3d091b92,0x3d1327cd,0x3d455279,0x3d07b0e7, +0x3cdbe091,0x3c7ba247,0x3c202d07,0x3cac48b6,0x3b3156a5,0xbbdbe57d,0x3c0a2336,0x3c2b8109,0x3bd6d404,0xbbac9d90,0xbc104e6c,0xbb740098,0xbb362969,0xbb615a98,0x3ac1b5dc,0x3ac42383,0x3b3e2b84,0x3b65b98e,0x3beda973,0x3c9eb64b,0x3c43fea6,0x3a8ab590,0x3c1f9e3b,0x3cfede44,0x3d0f7fcf, +0x3d3856d4,0x3cd0eb2d,0x3c4d8cbf,0xbc2d9306,0xbbb6efe8,0xbafb7f92,0x3c486211,0x3c8b76f6,0x3c94d333,0x3a8405fb,0x3c6bf27e,0x3c6640ec,0x3c1c0089,0x3c99f882,0xbd1fe53d,0xbcf57f00,0xbc7cb315,0xbb907475,0xbbbd8ecf,0xbbb55ef8,0xbc0776f2,0xba18a8d9,0xbb376a59,0x39a6de58,0xbb86ce92, +0x3a764206,0xbabd59bf,0xbb061221,0x3ad2fbdb,0x3b108aa2,0x3c433479,0x3c5c2d8c,0x3c8544c3,0x3c885b7c,0x3c4e13e8,0x3c539010,0x3c86bc3e,0x3ce3f038,0x3cee0f6a,0x3cba1c56,0x3c9fa5ec,0x3c5d8ba0,0x3c76a45f,0x3c9e1391,0x3d109fe2,0x3d256fd7,0x3d497c28,0x3d1dd7f2,0x3c74a885,0xbd087f56, +0xbc144346,0xba9a9a0e,0xbbb7df70,0x3c2c2111,0x3c0a4191,0x3b93ebb8,0x3b65c5eb,0x3b8bc1cb,0x3b8b62d6,0x3b60c249,0x38b5b174,0x3a5daf54,0xba03c29a,0x39601bab,0x3ab2c411,0x3bac5ea0,0x3c1240ff,0x3c3ea13f,0x3c2b3145,0x3c1b6465,0x3c276755,0x3c658e54,0x3c2a8aea,0x3cf35bb1,0x3cfea7db, +0x3cd72a22,0x3cc2aa82,0x3c84ce87,0x3c901fe8,0x3cbff199,0x3d0a314c,0x3d3b5adc,0x3d42deef,0x3d52a066,0x3d924083,0x3bb7e938,0x3dcc7776,0x3d8c59c8,0x3d84be04,0x3d3a0503,0x3d24bafa,0x3d02a713,0x3caaff86,0x3bc08117,0x3c01476f,0x3b553ab8,0x3a888552,0x3b77d9ea,0x3b38588b,0x3b36a8d9, +0x3b5e0e11,0x3b9538cc,0x3c0e0cd4,0x3c474d54,0x3c0b0c7e,0x3b299e72,0x3c82b77f,0x3cbb55e4,0x3cb1d69b,0x3c889af4,0x3b484d07,0xbc1e9f01,0xbc888803,0xbc476217,0xbb92b889,0x3aa9b5d6,0x3b9ead2d,0x3b26e5f7,0x3c9df0b4,0x3d3b70e6,0x3de80780,0x3dcb62de,0x3d9f8bd7,0x3ce9333a,0xbca2a89b, +0x3cd67904,0x3c36e746,0x3c78165c,0x3c7cd1db,0x3c9c2967,0x3c7cac3f,0x3c80b5ee,0x3c29f0e3,0x3c290bc5,0x3bd131a1,0x3c18e3e6,0x3aba1986,0x3b1db91e,0x3c027af6,0x3c126937,0x3c004be0,0xbaed11b4,0xbbf7445d,0xbc85c64c,0xbc40a9fe,0xbc829d50,0xbc3e1d58,0xbaeac52f,0xbb84ba01,0x3ad8c2a3, +0x3c4c6a34,0x3c610b56,0x3cf0db9c,0x3d8169be,0x3db8063a,0x3dce8480,0x3ddfe8ed,0x3daaf55a,0x3d332988,0x3d1b66e3,0x3c9563e4,0x3c8e0580,0x3c94d872,0x3c3a33f4,0x3c37b26c,0x3c19fe6e,0x3c21ae20,0x3bef8873,0x3bfad271,0x3be1259a,0x3bf8b201,0x3c01a125,0x3c3da687,0x3c506a56,0x3c80108a, +0x3bde604d,0x39518d22,0xba332130,0x39911fa8,0x3b4f40b8,0xbaa2b251,0x3c164863,0x3c2ff616,0x3c22da6e,0x3c85d485,0x3ca711ab,0x3c991cea,0x3d012b73,0x3d236312,0x3d5550c8,0x3d237e74,0x3d1a8a75,0x3d1d02d1,0x3d2e4fab,0x3ce287ad,0x3bbd1453,0x3c8a2beb,0x3c840480,0x3c822c52,0x3ca250ad, +0x3c7085ef,0x3c666e11,0x3c557c37,0x3c53474a,0x3c305519,0x3c16c897,0x3bde7022,0x3c1268c7,0x3c3ef027,0x3c3b8a36,0x3c4c6fbc,0x3c31a0b6,0x3c43c86e,0x3bde2520,0x3c4f7899,0x3c2f94a8,0x3c2c7345,0x3c4467c9,0x3c710c7c,0x3c826fd8,0x3cbe78b7,0x3ce22414,0x3cf07c81,0x3cf5a77b,0x3cfa1c76, +0x3d11807e,0x3cfb9014,0x3ccc5d7f,0x3ca6e44a,0x3c6ee45e,0x3c9d4644,0x3cc71ffd,0x3c17616c,0x3c7ef929,0x3c4576ea,0x3c116093,0x3c31b35d,0x3c613b2a,0x3c36fa16,0x3c568482,0x3c2b2e9d,0x3c9eea73,0x3c1f49d6,0x3c76e384,0x3bca77c3,0x3c5c6ea1,0x3c51b12c,0x3c71aef6,0x3c42c333,0x3caab67f, +0x3c9d68c2,0x3c93d26d,0x3ca1a07e,0x3c9581ef,0x3c8c0c4a,0x3c6bdfb7,0x3c8d736d,0x3ca299dd,0x3cd34630,0x3cc46118,0x3cb3477e,0x3ca4110c,0x3c90c221,0x3c990638,0x3c9a1f14,0x3ca3e7fe,0x3c211457,0x3c0f2705,0xbb2e3ba8,0x3c03ae26,0x3c06826d,0x3bfb78bd,0x3c3a781b,0x3ac01b6b,0x3c0b9edb, +0x3bb708c5,0x3b953bcc,0x3b6ed709,0x3c12faf4,0x3bd8de82,0x3c5ddd08,0x3c5a1715,0x3bedd296,0x3c8d4ee5,0x3bcbccc5,0x3c82874e,0x3c2d9943,0x3c3cdace,0x3bfb7439,0x3be4dbdd,0x3bc40420,0x3b8f0ba5,0x3c195f84,0x3c324c72,0x3c595aa8,0x3c8f54e0,0x3cba6e71,0x3ceb9c39,0x3cd4070e,0x3cac7083, +0x3c8c2efe,0x3c73036e,0x3c4e04ea,0x3c6a223d,0x3c53b0f9,0x3b1f1311,0xbbf9c572,0x3c566dea,0x3bd203fb,0xbbba93ce,0xbc026b20,0xbbfeba0f,0xbbf1c621,0xbc0eded0,0xbc41412e,0xbc4fbda7,0x3bfae9d0,0x3c7fd4b6,0xbc039e54,0x3bdf34c2,0x3c7eb6ce,0x3c713ea9,0x3c61f06e,0x3c64e9cf,0x3c64ef71, +0x3c5eb73f,0x3c4ead3e,0x3c380ce6,0x3c42d520,0x3c48776b,0x3c53d647,0x3c56bb37,0x3c47acb2,0x3c4731cd,0x3c3d63cf,0x3c444ec2,0x3c5026c1,0x3c553bea,0x3c87ec9e,0xbc93362f,0xbc532391,0xbca5040e,0xbc34ba54,0x3c25c339,0x3cc64b74,0xbc38cc56,0x3bcaa6ec,0x3cd41ca7,0x3ce2848d,0x3cec0297, +0x3ccc5de5,0x3cd8961d,0x3d02f6eb,0x3cd7974a,0x3be228a3,0xbc05757c,0x3ceced66,0x3c3c17c4,0xbbd52005,0xbc9db538,0xbc6f86de,0xbc858bfa,0xbc870b17,0xbc89bff2,0xbc8657d8,0xbc7fe187,0xbc76db8f,0xbc7758f9,0xbc784206,0xbc832072,0xbc82a9ee,0xbc83718e,0xbc844835,0xbc79acc6,0xbc500e55, +0xbc65bdf0,0xbc7a4715,0xbca3d878,0x3cbdf7ce,0xbb96158a,0x3bf69751,0xbaa6cf94,0xb978587c,0x3ba95287,0xbb5667d1,0x3a58ee4e,0x3ad3c437,0xbafa0c77,0xbbf56ed8,0x3b532fd2,0x3cae6b3b,0xbb39f6fe,0x3bd8612f,0xbaf43d1b,0x3c0c2b37,0xbc9c08da,0xbc9caefa,0xbca8da31,0xbcc1e263,0xbcb44366, +0xbcb313cd,0xbcc587be,0xbca362f3,0xbca7d8bf,0xbcbf329b,0xbcde471f,0xbce0c5dd,0xbcd1883a,0xbcd1a5c1,0xbcbc3e64,0xbc6ad265,0xbc7c2abe,0xbc8080f6,0xbc6c3de2,0x3b691a57,0xbc38e180,0xbaa59e6c,0x3a914864,0x3c1d374b,0xbbd155ba,0x3bc23350,0xbc1bba64,0xba2b9caf,0xbc9bbde2,0x3b1f86da, +0xbbdd089b,0x3b926457,0x3808e68b,0xb92c287e,0x3b98f112,0x395de661,0xbc4ced4b,0xbcdd668d,0xbcc9de04,0xbd02c05b,0xbceb36a1,0xbcde70d9,0xbcda6b6a,0xbcab5e55,0xbcaef98d,0xbcd5625a,0xbcf4918b,0xbd055c2c,0xbceb5edf,0xbced8c13,0xbcb32b15,0xbbefff67,0xbc6c0dd2,0xbc89ebfe,0xbc3d8a5f, +0x3c624542,0x3b1a2eea,0xbba663e9,0x3bf64417,0x3c2a8da8,0xb9a33903,0x3bd0ab81,0x3a817e23,0xbb4b5bf8,0xbbdc7cd7,0xbb3c61a2,0xbb4a7b22,0x3c2eab96,0x3be59798,0x3b69b294,0x3ab55fa7,0x3b89237a,0xbbb1dac8,0xbcf182c8,0xbcd3c080,0xbd1ce728,0xbd103c70,0xbd179da2,0xbd15212c,0xbcc7670d, +0xbccf1054,0xbd125e80,0xbd356602,0xbd44739f,0xbd26e36d,0xbd217322,0xbcecaf4c,0xbbd7ed24,0xbc285b7d,0xbc65cdcc,0xbc5a2417,0x3be0bffb,0xbb2f7f2c,0xbc1ee45d,0x3bc903ab,0x3c2c3edb,0x3be62d7f,0x3bf3cd8a,0xb98a76ad,0xbbdb653d,0xbb400b5d,0xb9559c2d,0x3ba69778,0x3c016f7f,0x3c25750c, +0x3c16eecf,0xbb0d1e8b,0x3c6366d0,0xbc73f028,0xbcff0ebf,0xbd0efcd7,0xbd3ffb14,0xbd250962,0xbd19b2bc,0xbd0d005a,0xbcbddaf4,0xbccf6778,0xbd08fa7f,0xbd34fa9d,0xbd415923,0xbd0f5753,0xbd165438,0xbca0850e,0x3b884f2a,0xbc210706,0xbd3d678d,0xbd822bd8,0xbca0fcf3,0xbb03b9b8,0x3b0f4d72, +0x3c4790e5,0x3ab71e9d,0x3a8d3edf,0xbc0cf8e8,0xbc155c1f,0xbaafa0ba,0xbbab2883,0xba493193,0x3bac9dea,0x3c3a8ff0,0x3c17beab,0x3bb065d2,0xbaa14101,0xba1f428d,0xbc42b511,0xbce6e396,0xbca81d7c,0xbc8fd593,0xbc0231fe,0xbc5ce46d,0xbc2e2a49,0xbc9f630e,0xbc8848f5,0xbc69eccd,0xbcfec71a, +0xbd473dce,0xbd6ec643,0xbd880647,0xbd849922,0xbd458d95,0xbd58f0fe,0xbc83a581,0xbc439a35,0x3c10dbdc,0xbcad0bdd,0x3b9d01d5,0xbc573581,0xbb4c1317,0xbbc2581e,0xbbc0d0d3,0xbb92a214,0xbbe08bdb,0x3a5baf07,0x3b114e2f,0xba8bdcdd,0xbb263673,0xbba7c310,0x3c055994,0x3ba9ed65,0x3c913232, +0x3ae6cb76,0xbce97107,0xbd03b209,0xbd514cd9,0xbd1b9443,0xbcf78c12,0xbc7b42e4,0xbc4c553d,0xbc3959c1,0xbaeea487,0xbbd4476a,0xbb150fce,0x3b23dd7b,0xbae8fded,0xba5229c4,0x3a5748ba,0xbc227847,0xbd4ef256,0xbd3b8896,0xbd124f02,0xbc49ad68,0xbc9524c8,0xbc1c33fb,0xbc1190cc,0xbbb75fac, +0xbba0c904,0xbb6fe304,0xbb8ad058,0xbae52b63,0xbb5a717d,0xb9ea91cb,0xbbd5b91f,0xbb2d139d,0x3af41c75,0x3b899f9c,0x3b82dd28,0xbc5b4a88,0xbc7efa39,0xbc829eb0,0xbca62381,0xbd001747,0xbd2bd4f3,0xbd487530,0xbd4bdea9,0xbd1ecc79,0xbc85aa5b,0xbcc1b639,0xbd232d56,0xbd5d51bd,0xbd55fb90, +0xbd4e8a77,0xbd2bec73,0xbd491ac1,0xbd01a085,0xbc5fab16,0x3c0b1665,0xbae003bb,0x3c5279f2,0x3b3af624,0x3a9ee6cd,0xbb266faf,0xb8820b98,0x3aaae7a3,0xbb200579,0xbb0a68c2,0xbb07f789,0xbb299ed2,0xbaa61986,0xbb80837e,0xbba5d36d,0x3b554fcf,0x3be215e8,0xbb99075e,0xbc451625,0xbc37b9c7, +0xbc43017b,0xbcfc5bab,0xbd3c41ca,0xbd6dfc6b,0xbd76ad0e,0xbd483e21,0xbcf6cbde,0xbd245199,0xbd6f92a6,0xbd985159,0xbdc523d7,0xbdbe6831,0xbd8a86e6,0xbd392af3,0x3c38f4cd,0x3d7295e7,0x3d6b531d,0x3d2e80b4,0x3d1c53e4,0x3c984d1e,0x3c7a5be1,0x3ba7a57a,0x3b686eb4,0x3a407f8f,0xba1bd770, +0x3a06a82b,0x3ab68549,0xbb4d0367,0xba79d5d9,0x3af5a5c1,0x3b81e94d,0x3baf55ba,0x3c2b3624,0xbc449b1e,0xbc50a645,0xbc989ae9,0xbccdcc3d,0xbcd2a095,0xbcb04825,0xbca6530b,0xbc907afd,0xbc93efd9,0xbc965ebe,0xbc9f464c,0xbcc9d31f,0xbca9957d,0xbd8e94bb,0xbda87a03,0xbd98fda3,0xbcc8bbcb, +0xbcd7eb1e,0x3c644cfe,0x3d2d2374,0x3c58fcc7,0x3c9f5bcd,0x3c8be181,0x3c624679,0x3c3c03ad,0x3c4e0299,0x3c168ec4,0x3b8ee3a6,0x3b546eee,0x3b70b70e,0x3bf4477c,0x3ab28710,0xbaf289ca,0xba4152f3,0x3907122d,0xbb448d17,0xbc0bfb66,0xbcaf41d4,0xbc8809cf,0xbc96794a,0xbc91bf09,0xbcbb9043, +0xbd2a3997,0xbd11d314,0xbd258dba,0xbd84eb75,0xbd650714,0xbd569792,0xbd495604,0xbce933c5,0xbc13e4bb,0x3be8b899,0xbb28a04d,0xbc2ef38b,0x3b1428b6,0x3cc3a36a,0x3c86de96,0x3c416da1,0x3c3fdbb9,0x3bf7ce92,0x3bf4097b,0x3bc74ff9,0x3be1e955,0x3b5eace3,0x3b516768,0x3aead485,0x3b86048c, +0x3be9a051,0x3c1bc669,0x3c1a80b9,0x3b8d9355,0x3ba47ba9,0xbbbda3d1,0xbc5be577,0xbc907e9b,0xbcba80fd,0xbcb8109b,0xbcb08b5e,0xbc876ef5,0xbbf550f6,0x3a5289e8,0x3c02b351,0x3c58d734,0x3c117101,0xbbd34f4a,0xbbf1ae9d,0xbc3f1437,0xbc6880c9,0xbc2e375c,0xbc6e4a3e,0x3c8e169f,0x3bd5a516, +0x3c1dfffb,0x3c1564eb,0x3b324b43,0x3c17f210,0x3bf254ce,0x3c25de14,0x3c199b76,0x3c52759e,0x3c242f9c,0x3c347765,0x3bf0bb1d,0x3c0a97f6,0x3c255d12,0x3c4ade39,0x3c0ee541,0x3b9db793,0x3bf191a3,0xbb5279b6,0xbad2b2a6,0xba9d4a35,0xbb37e3f4,0xba8d66fb,0x3b7ecc98,0x3bbedc4a,0x3c000f47, +0x3c1cdb3f,0x3bab9275,0xba868843,0xbc2a279c,0xbba5c071,0xbb2791a8,0xbbeee9b3,0xbafaf254,0x3a465372,0xba617c95,0x3c869a5d,0x3c0bc394,0x3c8ac5ce,0x3c88f69a,0x3c3bfc73,0x3b95a8e5,0x3c01d8ca,0x3bcb9da0,0x3c45cfab,0x3ac926a7,0x3c1e5093,0x3b96c84d,0x3c5616ec,0x3bf4980a,0x3c008994, +0x3c100879,0x3c75381e,0x3bcb14eb,0x3c15a317,0x3c3957f7,0x3c53cbb5,0x3c88f94c,0x3c98caab,0x3c92f2a8,0x3c46047a,0x3c011cbf,0x3b6b0a98,0xbb00afb2,0xbbbcdc03,0xbc29aaa3,0xbc27daa9,0xbc20787a,0xbc068eff,0xbb12ef72,0xbbafbdf0,0xbbd491aa,0x3c3f464c,0xbba0a428,0xbbbe5267,0xbb18d501, +0xbbc7336c,0x3bd883b5,0xbad4a931,0x3b9cbe2c,0x3bc2edb2,0x3c015f05,0x3b378b65,0x3bd4263f,0x3b890ee8,0x3be8d3d3,0x3c7c595b,0x3bf2b5ef,0x3c8901b3,0x3c4ab0e6,0x3c47b697,0x3c1c3347,0x3be35d44,0x3b91e69a,0x3ae920fa,0x39c04fe4,0x3a9ae9f3,0xba7df39a,0xbb1f7a8c,0xbb9cde7b,0xbbf22765, +0xbc3c3490,0xbc0e93f8,0xbbba767b,0xbbb5fa9e,0xbbe4af54,0xbb99138d,0xbbe3c79d,0xb95ad721,0x3c4b86e3,0x3ca433fe,0xba323ada,0x3bf9de03,0x3c9af1f8,0x3cacebed,0x3ca285c4,0x3c9967fe,0x3ca6129b,0x3cbe9a32,0x3cc1bd2e,0x3bdf4736,0xbb5395a7,0x3c9b3b02,0x3c140334,0xb967c0fc,0xbb3e28ce, +0xbb324d7e,0xbb050d4f,0xbaa24242,0xba0b0445,0xb9ab5c83,0xba81c8ca,0xbb09e885,0xbb83f5c1,0xbbadb168,0xbbd3443f,0xbbe186f7,0xbc04600d,0xbbfd58a0,0xbbf3a4ce,0xbbe03ce0,0xbbb7fe55,0xbbe58b3d,0x3c7a266d,0x3c43cae4,0x3cabc8db,0x3b84e3db,0xbc837ae5,0xbcb9c1d1,0x3bc535fb,0xbc31bef3, +0xbcd1a8e9,0xbcd7aebf,0xbcddbfc1,0xbcc3088e,0xbcc98cce,0xbcefaa07,0xbcc5804d,0xbc4acac5,0x3b257e5e,0xbcbf3499,0xbc802b2d,0xb8540706,0x3c9625d5,0x3c51da2f,0x3c63d106,0x3c613167,0x3c6df98f,0x3c6d3bef,0x3c5e7cfa,0x3c65bcd5,0x3c6570e7,0x3c600ba5,0x3c6578ec,0x3c5daa22,0x3c6cebe0, +0x3c5938ad,0x3c50fa7a,0x3c3ef506,0x3c4a973e,0x3c6a89fb,0x3c86e97b,0xbcd29772,0x3b8eccf8,0xbc5621a4,0x3b4ac5ad,0x3a9d43f7,0xbb8541d3,0x3bf33182,0xbb3992ac,0xbbd584ec,0xbbbbc578,0x3b46ff4d,0xbbaf9dcd,0xbc8b3b51,0x3bb260fe,0xbb9879a9,0x3afc8323,0xbc47089e,0x3c5603d4,0x3c8a83a1, +0x3c8471e3,0x3c905b59,0x3c90125f,0x3c92db1e,0x3c93f3d6,0x3cae1754,0x3cb1968a,0x3c99303c,0x3c956a83,0x3c84d17b,0x3c9df988,0x3c7cbd43,0x3c5dab68,0x3c3892dc,0x3c450f12,0x3c872775,0x3c68d9cf,0xbbb49214,0x3c37b38d,0xbc0e79d0,0x3b6a0fa1,0xbb233378,0x3c1011a2,0xbb344223,0x3c3ffe14, +0xbc3b71d6,0x3c52dc58,0xbbae9095,0x3ad94839,0x3acf3d9d,0x3c14e8d0,0x3bf328a6,0xba68e0cc,0xbb44c025,0x3bed3778,0x3cb6e798,0x3c8848de,0x3cae4b1c,0x3ca9d067,0x3cb2560f,0x3c94817f,0x3cc0aa65,0x3cb9cad0,0x3ca72ec6,0x3c9d665b,0x3c95ce99,0x3cb5d2ad,0x3c78e890,0x3c3ee54d,0x3bfb32ce, +0x3c33dccc,0x3c79755c,0x3c0fe4fa,0xbc5147ee,0xba87c290,0xbc0df6b2,0x3bc209ad,0x3bebbe37,0x3bd03dbe,0x3c0b7b9b,0x3ba996ab,0xbba04df8,0x3a2053fe,0xbb3f1e9f,0x3bea2bb4,0x3bcd00b0,0x3c599ae7,0x3c35899c,0x3bcc0c09,0xbb58bd7d,0x39ed9589,0x3cc51d5b,0x3c8b6ddb,0x3cbc1d1d,0x3cca3365, +0x3ce188e9,0x3ca1abf2,0x3d018485,0x3d008ecd,0x3ccd30d4,0x3cb0c6de,0x3c97ab03,0x3cd9b019,0x3c698305,0x3bfe79db,0x3bb5c72d,0x3bedb23f,0x3c6979e7,0x3c726b07,0xbb0d46c5,0x3bb08294,0xbb9f7e6b,0x3bf4d37d,0x3c38a026,0x3bd5afd6,0x3c0a1c30,0x3b0f2138,0xba5c1d4d,0xbb33d022,0x3b626561, +0x3bb2c5ee,0x3c850cdc,0x3c8a6558,0x3c1b1a6b,0x3ca30fb6,0xbc373c44,0x3c0bab8d,0x3cb9ed09,0x3ca61833,0x3cdb9b3e,0x3cd56bea,0x3cdd30ef,0x3c983309,0x3d000d81,0x3cfff5fd,0x3cc982c6,0x3cc6a1c8,0x3ca4e069,0x3ce3949e,0x3c68de52,0x3bfd05d5,0x3b6bef6a,0x3bf47bbc,0x3c885804,0xb71b31f4, +0xbd2c50fd,0xbcdd835f,0x3b4840a1,0x3a3d25d6,0x3bf94940,0xbada30ab,0xbb7a2510,0xbbe13831,0xba98f206,0xbb8227ee,0x3ac53917,0x3b9aed1a,0x3c2d6c5e,0x3c86e9eb,0x3acc8d5f,0x3c82e95c,0x3b8c7b7c,0x3ca4dfdc,0x3d02b022,0x3c9cf3b4,0x3ca2ca7b,0x3b886d5b,0x3bd8c748,0x3c5fec9e,0x3cf6e66a, +0x3d1a3569,0x3d5206d6,0x3ccd69a4,0x3c799c99,0x3c972a20,0x3be4de10,0x3c143dba,0x3c110017,0x3cc83d7e,0x3c9f3034,0x3c63f440,0xbc4cc62d,0x3c6fac46,0xbc62dbfb,0xbba8f33e,0xbc1b5a5e,0xbb822d6d,0xbb760d80,0xbb92c117,0xbbb3c0bf,0x3ac50aa7,0x3aeb61d7,0x3ac1f427,0x3ab5696a,0x3bd35907, +0x3bdbeb08,0x3c19d20a,0xbb8cdc23,0xbb3a2d3c,0x3c88e48e,0x3c2aa897,0x3cb9d266,0x3c164817,0x3a9bcf86,0xbc081301,0xbc34e7b2,0xbbec09d0,0x3bfe1377,0x3bb658a8,0x3b67db9b,0xba411f77,0x3b78feea,0x3b557294,0xb9d4ecdc,0xba6457b7,0xbcb11c6d,0xbcf6b2cc,0xbcc067ef,0xbc3169da,0xbc911aea, +0xbbe9b0d0,0xbbd58c3f,0xbb161d51,0xbb6f531f,0x3ad4cd5e,0xbb4c864d,0x3b5a16ea,0x3abff743,0x3939f391,0x3a41c485,0xbb2d94f9,0xbb5a2e5e,0x3bcfe7b9,0x3c0b9528,0x3c433494,0x3bfdf073,0xb90f205b,0x3abb052e,0x3bf84328,0x3c3d884d,0x3c21d861,0x3c689a01,0x3c85a1ba,0x3cdab372,0x3cbe2edb, +0x3cce0bae,0x3c768891,0x3c95ae98,0x3c87602e,0x3c77c874,0xbc4ada2d,0xbbc8140f,0xbc71e1a7,0xbc7d90c1,0xbafb0a9b,0x3bc6beb8,0x3ad38932,0x3b3209a4,0xbace2939,0x3b234e0b,0x3b58a8df,0xb920f68b,0x3ac75f70,0x376ef7ed,0xbac26148,0x3ae34fd1,0xbaeb4199,0xbbbf401b,0x3c1305d6,0x3b9f5da9, +0xbad5c886,0x3c13774b,0x3ad112c7,0x3ad87c31,0x3b9c86c7,0x3bafa683,0x3b98e736,0x3c36b02f,0x3c0b2cc4,0x3c3f379b,0x3bb99a4b,0x3c0093a3,0x3c57e1eb,0x3c0fb77e,0x3c6285fb,0x3c984573,0x3a05ba99,0x3cfdea6f,0x3d03036c,0x3d5ac57d,0x3d262d32,0x3d01aff7,0x3cbaf8e9,0x3c60ad09,0x3ac2053c, +0x3bc144a4,0x3a89dd2c,0xbb033f6b,0x3b11705b,0x3a553adb,0x39af61d7,0xb9f9760e,0xb823a6ce,0xbb286ca7,0x3c1c7563,0x3bb5de15,0x3a76048b,0x3c02fd78,0x3c1a22eb,0x3c2f5c5b,0x388c7d59,0xbbfff8fb,0xbc963231,0xbc386335,0xbc57e6d7,0xbcdc7de8,0xbcd261d8,0xbcaa9ad1,0x3aa9c441,0xb966701e, +0x3ba69ec7,0x3cba9a03,0x3c7c2a5a,0x3d9556b7,0x3cc0262f,0xbc47fa82,0x3ccd73e8,0x3c278736,0x3c757645,0x3c572374,0x3c8b5155,0x3c288db2,0x3c366a60,0x3b84a1a9,0x3b3c8ee4,0x3b560fa3,0x3c336ac3,0x3b4d843d,0x3ae90423,0x3b37a5bb,0xb7d32f4c,0xbbbade3f,0xbc5fbf58,0xbc4a99ed,0xbcc0e278, +0xbcb6878b,0xbc85b925,0xbc465ec8,0xbc469f15,0xbb00f6f6,0xb929529f,0xbc62aea3,0xbc508351,0xbc0cec0d,0x3a6284f7,0x3d049a7c,0x3d5d0ea6,0x3da04c41,0x3d8c90db,0x3cd78192,0x3c9d2eea,0x3bbe45ce,0x3bffd2d4,0x3be1d068,0x3bdde1e7,0x3c292c06,0x3be9f7f7,0x3c58c46e,0x3c11609f,0x3c389a28, +0x3c017bed,0x3c059711,0x3bffe606,0x3bf2123f,0x3bfbc283,0x3bfe0705,0x3be52519,0xb8d69b6b,0xba7823d0,0xb85b8e1d,0x3a32ea69,0xbab77b87,0xbc2d919d,0xbc73d816,0xbc4b1f4c,0xbb9a7e72,0x3b0141bd,0x3b198a40,0x3c879061,0x3cea2f29,0x3d3ed08c,0x3d3a33f4,0x3d22c228,0x3d02fd0d,0x3ce33a34, +0x3cd86819,0xba41a1e3,0x3ba7c1a8,0x3bddb596,0x3bd687d1,0x3c87a8fe,0x3c08487d,0x3c1f9a0d,0x3c23b27d,0x3c55e223,0x3c37d56a,0x3c3f6bc8,0x3c0e6882,0x3c179a84,0x3c26d387,0x3c1add30,0x3bccdb07,0x3be0ad16,0x3c0a86bf,0x3b0fe42c,0x3c699a67,0x3c20cb14,0x3c57db10,0x3bfa9550,0x3c2070ac, +0x3c6b6ae8,0x3c928913,0x3ca83350,0x3cc244bd,0x3cdad28a,0x3cf2d861,0x3d19d7ae,0x3d062e50,0x3ceb9228,0x3cca3dcb,0x3c97483a,0x3c88fa47,0x3ca56754,0x3b78a6b6,0x3c3c8eb0,0x3bbd7eda,0x3ad08ec3,0x3b8597b3,0x3c00f9bd,0x3bc46af4,0x3c116749,0x3b93ec2a,0x3c63dfd8,0x3c0e2251,0x3c3d9bfd, +0x3bc1acfb,0x3c4127a0,0x3c475a32,0x3c5fd86e,0x3c0723e7,0x3caefd95,0x3cc47192,0x3c9db320,0x3ca98541,0x3cbfc291,0x3cd1deab,0x3cbb729e,0x3cc2b032,0x3ccf6487,0x3cd49ac1,0x3cbe48ec,0x3cac1719,0x3c9e6c0a,0x3c80adf9,0x3c60e96e,0x3c60b3c1,0x3c6809bb,0x3c0782d0,0x3c025d8f,0xbc22c371, +0x3bb6870a,0x3b53ba6e,0x3b785bca,0x3c0bf800,0xb9744502,0x3c0755f2,0x3a96ba57,0x398ecaec,0xba3f216a,0x3baa1585,0x3b504cad,0x3beabeda,0x3bef8af8,0x3bac5c2b,0x3c80790c,0x3c050eec,0x3c974220,0x3c5b1fb7,0x3c87bdbf,0x3c6c6943,0x3c4faff3,0x3c2c1717,0x3c14aa76,0x3c567fab,0x3c4258df, +0x3c5d7db6,0x3c83e152,0x3c8f4d92,0x3ca26394,0x3c9afcb1,0x3c8cd55a,0x3c713eec,0x3c51fbd1,0x3c2d8435,0x3c558d3c,0x3b470722,0xbc002eda,0xbc2d284c,0x3b7ffb33,0xbbaeceed,0xbc4f3848,0xbc7036c4,0xbc4bd2fa,0xbc2c8bad,0xbc412251,0xbc6c83d5,0xbc739690,0xbb6bb5ab,0x3be06aef,0xbc10018b, +0xbb86fb74,0x3baddecf,0x3c534127,0x3c4484b7,0x3c459cd8,0x3c4b28a2,0x3c5c3eda,0x3c5f6459,0x3c5233cd,0x3c5b1853,0x3c4ec86b,0x3c4ff425,0x3c455ccb,0x3c3332a6,0x3c2cbdc6,0x3c20ca4c,0x3c1f330e,0x3c22aeb5,0x3c27f8ad,0x3c46f7e9,0xbadf4509,0xbb3ae492,0xbc2f280d,0x3c156631,0x3cb33a5d, +0x3c84ff86,0x3bc1c6bd,0x3c91418b,0x3cb4c809,0x3cb5ef4e,0x3cae6d64,0x3c8ac13e,0x3c92c6ab,0x3caaf99e,0x3c8f4f31,0x3c9c1ccf,0x3c237a04,0x3c903431,0x3ca7112f,0x3c2708a3,0xbc1847ee,0xbb8652c0,0xbb943551,0xbba3713c,0xbba9d5fd,0xbba0d6f8,0xbb88c506,0xbb7f67eb,0xbb7ce868,0xbb93c45d, +0xbb8c3c7d,0xbb857201,0xbb5b510d,0xbb4a0b3a,0xbb2e27f7,0xbb014057,0xbb3b5a32,0xbba98a06,0xbb743695,0x3cee6639,0x3b68999e,0x3c4329f3,0x3c0797cc,0x3c429889,0x3c1c3e02,0x3b209de6,0x3c45eae9,0x3c1582e5,0x3c324e63,0x3b42cdd8,0x3c1defe0,0x3caa9afa,0x3c0a3eba,0x3c7c093f,0x3bf9e411, +0x3c963ead,0xba7aac5f,0xbbd3c9e1,0xbb9d5125,0xbbf7856c,0xbbccced5,0xbbb25f4c,0xbb93af3b,0xbb218d38,0xbb74618c,0xbc0b8798,0xbc001899,0xbbe4fb47,0xbb80b444,0xbac80ae4,0xb984e0cc,0x3923c212,0xba8e4d0b,0xbbd527b4,0xbb3c5bce,0x3c95d1ed,0x3b092ae5,0x3bfbd2ac,0x3c0db5a8,0x3c835795, +0x392f33ae,0x3c5a1248,0xbb0ef32f,0x3c4c37f2,0xbbf49372,0x3bc0742c,0x3b9ece08,0x3c330920,0x3c061640,0x3c3ab4d8,0x3c353731,0x3c406083,0xba98194a,0xbc39578e,0xbbc0d838,0xbc3fc6f2,0xbc1f52a3,0xbc1554ee,0xbbada3e8,0xbb3278c2,0xbb71e060,0xbc1f8be2,0xbc084ffb,0xbbe14680,0xba206ea2, +0x3b2527bf,0x3b9f092a,0x3b75ce9c,0x3a64dcdb,0xbc1e3575,0xbb730b69,0x3caf6439,0x3c26cd79,0xbaf87c68,0x3c2765b8,0x3c3df7bb,0x3b767940,0x3c014094,0x3b84e43f,0xbb0caa45,0xbb9ee9e4,0x3b4b14d4,0xbb5003e7,0x3c61a311,0x3c204514,0x3c2fed61,0x3c0cf397,0x3c52cb2d,0x3b8588aa,0xbc5c3e5b, +0xbbfafb68,0xbc72e287,0xbc555e7c,0xbc365231,0xbb934877,0xb930c9d7,0xbb48dea2,0xbc944c4b,0xbc6113a9,0xbc2dee99,0xbb2fd3b8,0x3bdd7f1f,0x3c1be7a9,0x3b599290,0x3b2b0faa,0xbbb96ade,0xbbb6b602,0x3c91b78d,0x3b9b7bff,0xbbbfddf6,0x3bcd03bc,0x3c1fcb81,0x3b9e449b,0x3c07af8b,0x3b395ec7, +0xbc03efdf,0xbb88549c,0xbb02a560,0x3b4d5444,0x3bfc3ff3,0x3c455759,0x3c6204b6,0xbb5e8818,0x3c9ea2fd,0xbb951375,0xbc77e249,0xbc23da2c,0xbc9b00df,0xbc7ec59d,0xbc586e68,0xbc0c5886,0xbb35d546,0xbbb91293,0xbc84ebf0,0xbc5ec091,0xbbf61214,0x3bddbe71,0x3c61bbf1,0x3c99d707,0x3bcd7a10, +0x3b68b5f8,0xbc57064a,0xbce4a053,0xbbda374f,0x38ff65e7,0x3c9df1b1,0x3c5c1e62,0x3bc39241,0x3b18cbf8,0xbbb2e241,0xbc012429,0xbb3152c7,0xbaabf9d7,0x3a86fe78,0x3b407e5b,0x3c28cf75,0x3c059d1e,0x3c9c3261,0x3b73ec92,0x3c774555,0x3c1a003b,0xbc5c4dd4,0xbc6a9bf4,0xbcb2228f,0xbc804acf, +0xbc8d62a9,0xbc357130,0xbc5ff9d4,0xbc6803f5,0xbc138a49,0xbcf031f3,0xbd2589fe,0xbcf09f31,0xbd0e7bd5,0xbcf5e8b1,0xbc73ef8a,0xbc594961,0xbcf491a7,0xbaf7afff,0x3d130ccd,0xbc08c779,0x3b83c4a9,0xbc75dd6a,0xbc4e447c,0xbabde9be,0xbbda2664,0xbb54fcf2,0xbbbcb113,0xba6a7257,0x3a1b0567, +0xbb2c645b,0xba64a1b1,0xbb620844,0x3b4e5308,0x3bca1e33,0x3c81dcd3,0x3c0c69c2,0xbc2cff90,0xbc00a611,0xbc9889ae,0xbc0f77ee,0xbbe3fb08,0xbb4991f9,0x3ae72a57,0x3a00eaa9,0x3bd338fc,0x3a57c502,0x3bd5be92,0x3c5166d2,0x3c9b3106,0x3c700d78,0x3b1a6d92,0xbc4a1d4d,0xbc6e7a7b,0xbcd8fd66, +0xbce43b87,0xbc31a61a,0xbc965177,0xbc1a1d3b,0xbbb075c4,0xbb266d2c,0xbb479916,0xb9d6859b,0xbb5d86e0,0x3a5333bb,0x3a58b612,0xba86dd89,0x3b4db9e3,0x3a2c5af6,0xbb52414d,0x3c0f253e,0x3c5b05d4,0xbbac8192,0xbc24282e,0xbc0d049d,0xbc6cd2ed,0xbc9a0148,0xbcba9058,0xbc90748d,0xbca8ebb1, +0xbc667988,0xbc72f3bb,0xbcb4f335,0xbccca4bf,0xbc83d4de,0xbb298887,0x3b518025,0x3b85f30d,0x39d8ebeb,0x3b31668d,0xbc42f80d,0xbb90efbe,0xbb8e8a95,0x3bd08199,0x3b6151fd,0x3b89c46a,0xbb740ba8,0x39382f37,0x39b30972,0xbad6a620,0xba71ace6,0xb9d82434,0xbb38d8ec,0x3a0f6a77,0xba2fe815, +0xbbfad126,0x3bacd666,0x3c49f720,0x3abf36f0,0xbc4910e4,0xbc2d421a,0xbc351c32,0xbc928a00,0xbcac913d,0xbcb7e16f,0xbca0a3e4,0xbc67c53d,0xbcbcb89d,0xbcbf0bc5,0xbd05ebb9,0xbd1fc2fb,0xbce30cf5,0xbc90a0e3,0xbc4cfda4,0x3b2c509c,0x3be14abf,0x3cf16a15,0x3d46faac,0x3d0c093b,0x3d050e6f, +0x3c5a9e5a,0x3be7e4d0,0x3bb077fc,0x3b1e146d,0xb8df07f4,0x39b0269f,0xba378655,0x3a30b711,0xbb8d9552,0xba7758a2,0x3a1ce497,0xbb5f4786,0x3bee3ee4,0x3c430c26,0xbc254b57,0xbc39abbd,0xbc50f80b,0xbc351380,0xbc2beb9d,0xbbf5e507,0xbc57c951,0xbb2580cc,0xba461f1f,0x3b7371a7,0x3a79b41d, +0xbac27c3f,0xbc9dff2b,0xbc164df4,0xbc5ad181,0xbd1ad87b,0xbb833f31,0x3d526dc7,0x3d7a2a62,0x3d3d54db,0x3d0d5786,0x3cb1b973,0x3cc127ad,0x3cb367e6,0x3c82e96e,0x3c69ae05,0x3c0ef7b0,0x3ab46da2,0xb9fe21e2,0x3b3bf46b,0x3c0fb48b,0x3bb7cd9c,0x3adf7ed0,0xbb7e1e16,0x3b11e78e,0x39500860, +0xbba2881c,0xbc367507,0xbc5aab6c,0xbca93adc,0xbc62727a,0xbc1fb5ab,0xbba46c56,0x3ba56f86,0x3b8ac955,0xbb8e361e,0xbcae9131,0xbcf2253e,0xbd270ae1,0xbc32beea,0x3c8e5ac8,0x3d1f5ffb,0x3d5edd2e,0x3cb26dd1,0x3cc3e640,0x3cecef2b,0x3ca9b84c,0x3c96e412,0x3c7e217d,0x3c4a67ac,0x3c5d8906, +0x3c3d17a6,0x3c78a631,0x3bc7b45a,0x3c2a9103,0x3bcc122d,0x3b9950ce,0x3baafb2c,0x3becc3a0,0x3bce13eb,0x3bae5dbb,0x3ba4911f,0xbbe02b43,0xbc21ab77,0xbc3280a8,0xbc4da0ba,0xbc826510,0xbc8f7d05,0xbc95af42,0xbc9c27a7,0xbc826337,0xbc1bb600,0xb846b03c,0x3c23f8a3,0x3c4956bf,0x3cb42cf6, +0x3ccbd702,0x3cb4a144,0x3cbc02ce,0x3c074a9d,0x3cad98ce,0x3c9710c8,0x3c8a0012,0x3c8e06e6,0x3c11020c,0x3c520f92,0x3c0f4401,0x3c3b6438,0x3c09c575,0x3c3d3653,0x3c060b55,0x3c37c07a,0x3bc27e68,0x3c02bef1,0x3c0ab442,0x3c4637da,0x3c4c3cef,0x3c152803,0x3c4ba6c5,0x3b31bded,0x3b8fe66c, +0x3ba6d81f,0x3ac2c136,0x3b52ff6f,0x3ba16e3f,0x3bee7688,0x3c150201,0x3c5aaa6c,0x3c5a6945,0x3c6c6760,0x3c7ae8ae,0x3ca16414,0x3cab6089,0x3c803ea9,0x3c92ab8e,0x3bf29892,0x3c1694b9,0x3c9f76b4,0x3c652d6e,0x3c9c8d15,0x3c881957,0x3c402c19,0x3b9bb021,0x3c0b04ee,0x3bd70aeb,0x3c73c78d, +0x3bb1e9c1,0x3c1fc9a6,0x3c012ce2,0x3c5af207,0x3c1dbfa9,0x3c29ee9b,0x3c3b4f3e,0x3cbcd471,0x3c741ccb,0x3c2ec4b3,0x3c59b2b5,0x3c443d22,0x3c8f4c9a,0x3ca6ab63,0x3ca95270,0x3c9d2d40,0x3ca983b0,0x3caf0560,0x3c896ed9,0x3c7085bc,0x3c40aa23,0x3bfef9b5,0x3bc20de7,0x3bbe9daa,0x3c05379e, +0x3bf2a102,0x3bc130c8,0x3c69d047,0x3ba21d6c,0x3bc6c970,0x3c0776b5,0x3c0195e8,0x3c4321fc,0x3c0b61b9,0x3c557281,0x3c57c72e,0x3c82ed3a,0x3c4b7a0a,0x3c7131cb,0x3c757abb,0x3c7774b2,0x3c9c852d,0x3c3957fe,0x3c8dfd39,0x3b4a113c,0x3b95eef8,0x3bdd6789,0x3bd1d3b2,0x3bafdbd4,0x3b691632, +0x3b13ceac,0x3b37ebbf,0xbab7377f,0xba8d94a7,0xb8d5041c,0x38c76db9,0x3ad9fa84,0x3b97ed6b,0x3bed7782,0x3bed3e9b,0x3be3a986,0x3b77e4de,0x3b634919,0x3c38d777,0x3c82042a,0x3c40d0eb,0x3c2f8ef6,0x3c67ebd3,0x3c538103,0x3c62ff82,0x3c557294,0x3c427248,0x3c4f2714,0x3c692271,0x3c6dff1c, +0x3c67aaf1,0x3c012878,0x3c43849c,0x3c6ad7dc,0x3c161d79,0x3b28a442,0x3b986f34,0x3b946724,0x3ba6b252,0x3bcf9074,0x3be8e840,0x3bee3f39,0x3c03c483,0x3bf2ee71,0x3befbf8c,0x3bdad4c6,0x3bac95ec,0x3b8e1af8,0x3b5ce14d,0x3b45ced4,0x3b484bd3,0x3b676732,0x3c0156ae,0xbb2e1e40,0xb9f412ac, +0x3b6c9f63,0xbc41d777,0xbc7a572b,0xbb7acfa4,0xbc133bc2,0xbc5a15e9,0xbc0d2996,0xbbef6d7b,0xbbc7e350,0xbb8fd7f7,0xbb8d5a01,0xbb99675f,0xbb86a9e0,0xbc6dd9ac,0xbc3b33d1,0xba3e2fdf,0xbc5699a8,0xbc37a5ee,0x3b5d9369,0xb9419f27,0xba2200cb,0xba07409e,0xb9de9d51,0xb958f010,0x39531c1e, +0x389ed63d,0xb992b4ef,0xba9a39ba,0xbaaeeae9,0xbabaf2a1,0xba74418a,0xbafa6e6e,0xbb017b44,0xba5c77ca,0xba5d653c,0x3a232b5b,0xbbbb36cf,0xbc86cfe6,0xbb390b11,0xbc24fcd5,0xbb7d16c3,0xbbe3feff,0xbb8ff8ee,0x3a98baa8,0xbc027260,0xbbe5d7e4,0xbc37032a,0xbbaa3206,0xbbe42816,0xbbe3a0c3, +0xbb858709,0xbbb02e5e,0xbb6be68d,0xbc4b40c7,0xbbcaef3b,0x39bd7f2a,0xbb218b78,0xbb0348c2,0xbb01c6b0,0xbabec013,0xbaaa0fcf,0xb96700f1,0xbafdcb8f,0xbbc6a2a3,0xbbc9cd52,0xbbc51c8c,0xbb66d527,0xbbe00c3a,0xbbb2e57e,0xba194763,0xbb267535,0x3b122498,0xbb98ec0e,0xbc3640c6,0xbb283e3d, +0xbc359cbb,0xbb5b7afe,0xbbae1576,0xba188064,0xbbaa244e,0x3b38884d,0xbc742ccc,0xbaa885cf,0xbba5cb98,0xbc04af83,0xbb74eed1,0xb9604c6f,0x3a1bd26d,0xbb28a978,0xbc05ab7e,0xbb52e305,0x3ab5b38a,0xbb990ab8,0xbb49bc52,0xbb800341,0xbaceb601,0x38c98444,0x395fc8cb,0xbb1a485b,0xbc136b1b, +0xbc1cc93e,0xbc316a8e,0xbbc40afd,0xbc48b926,0xbc26a3f2,0xbb05709f,0xbb7321d8,0x3b783f13,0xbbc8509e,0xbc793a33,0xbbafc8e5,0xbc382662,0x3b4021f5,0x3bba4787,0xba5b49c9,0x3bc5a71c,0x3b6d5914,0xbb589984,0xba210fe5,0xbbdef665,0x3b0e243a,0x3aa6805f,0x3bf79943,0x3bf38834,0x3acda143, +0xbc042dc3,0xbc0c64ba,0x3adecec6,0xbba27b5b,0xbbb5f472,0xbbba07f8,0xbb90d308,0xbb3f0ab9,0xba40fe7b,0xbbac8a1c,0xbc8e7dba,0xbc88ad52,0xbc93a13b,0xbc14ca44,0xbc9d7c0e,0xbc610e39,0x3b5a3896,0xbb9f1e7c,0x3b95210b,0x3a7f7ee7,0xbb83afdd,0x3b50e636,0xbc0864f0,0x3b02fd96,0x3bef639b, +0x3ba57540,0x3c068ecb,0x3afc698a,0xbb2dd898,0xbb5620d7,0x3aae3931,0x3af223b5,0x3c2dff22,0x3c2e2a58,0x3c0adb42,0x3c6eb4b3,0xbc2e90cf,0xbb20f2f8,0x3a813d86,0xbc0af654,0xbbf5d426,0xbc026584,0xbb914071,0x3ae428d6,0x3ad0d20e,0xbb8e4735,0xbc5d7f07,0xbc9657d8,0xbcb02daf,0xbc1fa6ba, +0xbcccfa84,0xbc8ed0f2,0xbab23b1c,0xbb590ced,0xbc105ec6,0xbca7f81f,0xbd69cb1e,0xbd147f1e,0x3c28f0e3,0x3b1d00d1,0x3b29aff8,0xbae489f5,0xbbbb84f0,0xbbe90bbe,0xbb3a0791,0xbb378508,0x3b1cd337,0x3ab41cbc,0x3bb8511d,0x3c272be1,0x3c163dc6,0x3c1efbd0,0xbba239a1,0xba815175,0x3bf5c102, +0x3bd80d16,0x3c610ccd,0xbbbfd760,0xbb155c96,0x3c49246e,0x3c854bab,0x3c77f7dd,0x3c3f817a,0xbc7a307a,0xbcc7379c,0xbc9f50d5,0xbccb07cd,0xbc9df82c,0xbc4e1d03,0xbb64de9b,0x3bc9c867,0xbbb6be39,0xbc35cef7,0x3b54f3ba,0xbcb4adca,0xbc91e837,0xbc8086d2,0xbc228f39,0xbbb3df56,0xbb8396df, +0xbbd38e83,0xb9290e02,0x385c8b20,0xba751b06,0xbb10fce8,0x39ef078c,0xbb95d431,0x3b9c3b66,0x3ab192ac,0xbbd16699,0xbbad780c,0xbc7d8827,0xbc8128ab,0xbc2b35c9,0xbc1fb1a9,0xbc6f328b,0xbbe79b3e,0xbb33274d,0x3b9f81ea,0xbaf33cb9,0xbc1ea048,0xbc861c59,0xbc5a4190,0xbc54e129,0xbc1c0d6e, +0xbc1138cf,0x3b772fa7,0xbc99a276,0xbcaf03ae,0xbc4871d8,0xbcc6a77f,0xbc3a45fe,0xbc082c48,0xbb83ea36,0xbbabde59,0xb987d84b,0xbb0f79e6,0x3aca42cf,0x39852f07,0x3a2c53e7,0xba0cd6cf,0xbb746d4c,0xbc1ec63d,0x3b2472bd,0x3b0e49ec,0xbb49efd4,0xbb645f20,0xbc515a94,0xbc704e10,0xbc9002d2, +0xbc897533,0xbc982ed2,0xbba148fa,0xbb13b9a7,0xbbdfba24,0xbba2c5f9,0xbc5ae07d,0xbd0cccad,0xbd0458f0,0xbcee65ce,0xbc703989,0x3a3e1c8b,0xbc5e2a33,0xbc0ba998,0xbbfc8535,0xbbc562dc,0x37dd603e,0xbb224b40,0x3a988bde,0xbb870845,0xbaabd106,0x39f9739b,0xbb13d480,0xba36248e,0xba8d2f35, +0xbaf49028,0x3aaec641,0xbbb0b1d4,0xbc2e63dc,0x3bc1f7ba,0x3a914e17,0xbc28d4d4,0xba1689f4,0xbc28f655,0xbc356ced,0xbc7b7f1a,0xbc911af4,0xbcc9d27f,0xbc92ea5d,0xbc8b16e7,0xbcb46aa4,0xbc951b63,0xbcafc04b,0xbd2ec926,0xbd25a2bf,0xbd32666f,0xbd648c84,0xbccacac2,0xbd3b98e8,0xbb9335e5, +0x3cc4202b,0x3cd4b722,0x3c9c6033,0x3c1290bd,0x3acf5e5d,0xbb16a29d,0x3a9b9555,0xba8cbed0,0xbb924c82,0xba8dd856,0xba83e449,0xbb9f5694,0xbb9e7fc2,0xbb8618fa,0xbbc3a352,0x3b929040,0x3b34d4f4,0xb922f5f7,0xbc0bf03a,0xbc5d15df,0xbc2a574a,0xbc8bc782,0xbc8b8389,0xbca96c3a,0xbca6e518, +0xbcb49fe9,0xbcc35a2f,0xbca8ce0e,0xbcd178af,0xbcd27ef8,0xbd021fea,0xbd2b3bdb,0xbda6395b,0xbd8ab85f,0x3ccac77a,0x3cefa03f,0x3cc58ffa,0x3cd2159a,0x3c8d5264,0x3ca192fa,0x3c8ddccb,0x3c670b17,0x3bcd5319,0x3bb1098b,0xba50ecb1,0xbac6e10d,0x3b012f66,0x3bd6aa5a,0x3b852e6b,0x3ad3efbf, +0xbb1ec8e1,0xbc069c9a,0xbc51b2ab,0xbc539bb0,0xbc02bffa,0xbc462eba,0xbc367ba0,0xbc680937,0xbc51f025,0xbc231e07,0xbc689233,0xbcaa6c4f,0xbce7b072,0xbd0534a9,0xbd13906e,0xbd5af57d,0xbd2f329d,0xbcce9386,0x3b1cc736,0x3c6d38f7,0x3c1e2834,0x3b86021f,0x3c163562,0x3c2d6940,0x3c0535d7, +0x3c2b2084,0x3c4dacd2,0x3c1d0465,0x3c53401a,0x3bfca50c,0x3c3a7b63,0x3c0afa14,0x3c009ae9,0x3b04eb97,0xb9e0b2b3,0xbb1545b6,0xbad4dd54,0x3b2cbed3,0x3a6f3beb,0xbaf93578,0xbbc30371,0xbc2b0a31,0xbc6a7d86,0xbcb8859c,0xbcde1b50,0xbd042021,0xbd0926d2,0xbcdeb289,0xbc71cff0,0xbbe1c0c5, +0x3ba9ecf7,0x3c877960,0x3cfbe093,0x3cf8c998,0x3cc11a62,0x3c53ddcf,0x3c90bfab,0x3bcd9e00,0x3b312df4,0x3b9eead8,0x3b555b84,0x3c25c25a,0x3bb8232b,0x3bff3e00,0x3bd42178,0x3c1eb2ed,0x3c029006,0x3c257875,0x3bee4ae0,0x3bca63db,0x3b9a1a1d,0x3bac22f2,0x3b5d66ce,0x3b9ed12f,0x3bb1d485, +0x3b1e5657,0x3bc9f93d,0x3b7fe4a2,0x3b89ff31,0xba85c3c5,0xb9418988,0xbab025d9,0x3aeafa96,0x3b88480e,0x3c230892,0x3c4f96fc,0x3c8d6ef3,0x3cb77ac0,0x3ccd435f,0x3cd9a4ea,0x3cc9834d,0x3cac1ed3,0x3c40861d,0x3c31e4f5,0x3b8dcf4e,0x3bfc9f4c,0x3ba4c333,0x3b32b965,0x3b2e797c,0x3b7895fb, +0x3b4011a8,0x3b94db9b,0xb9c3ef0a,0x3b966ab7,0x3bb7c4e9,0x3b9c8e63,0x3bca6ee9,0x3be2de4b,0x3bfd9226,0x3bf72beb,0x3c06ef09,0x3c1c28d6,0x3c68d155,0x3c3d09d0,0x3c69d9f4,0x3c8ecc05,0x3caa2f2e,0x3cafe427,0x3cad8154,0x3cb8b711,0x3caf6e2c,0x3c9687ed,0x3c8a8b67,0x3c850387,0x3c487f13, +0x3c0b39c3,0x3c08c87c,0x3c053074,0x3c0eb819,0x3c00938d,0x3aa7fe6d,0x3be2a1c9,0x3b6f8ac7,0x3bc01804,0x3bf97f7f,0x3bfc43dd,0x3c255570,0x3ba7b1f7,0x3bad493c,0x3b796949,0x3ba91b53,0x3b935cc6,0x3ad79485,0x3a90840a,0x3b410d8b,0x3b8a0fce,0x3ad2bbd2,0x3c00ce79,0x3bfbb9f8,0x3c2ba443, +0x3c2b180d,0x3c2b8aeb,0x3c1d421c,0x3c042eff,0x3c3970d7,0x3c0c9731,0x3c262234,0x3c41940b,0x3c3404af,0x3c3bb915,0x3c4dbd45,0x3c5ffdfc,0x3c55bb7e,0x3c3c0029,0x3c0eb747,0x3c198137,0x3a8b87a2,0xba9dde88,0x3b71777d,0x3ad3fc34,0xbb18b06d,0xb9631928,0xba160c34,0x3aabce00,0x3b33f20d, +0x3b28cfda,0x3b1bc054,0x3b2fa80f,0xbaea1801,0x3b20241a,0x3b9af8b3,0xbaabc048,0x3acb669f,0x3c2ed020,0x3c1fe03e,0x3c26f0c7,0x3c3329c3,0x3c486cb9,0x3c546e9d,0x3c57899b,0x3c624308,0x3c4ccc42,0x3c486bc9,0x3c39bf1c,0x3c264dfc,0x3c1fb2c2,0x3c0dead3,0x3c01987d,0x3bf79635,0x3c00da91, +0x3c485220,0x3c60d419,0x3bfc377a,0x3bd52227,0x3c8c86d7,0x3c44d067,0xbb973904,0x3c7bb950,0x3c430df3,0xb9b8ff6e,0xbacc418b,0xbb651ef2,0xbb9697d1,0xbba0edec,0xbbd9a29a,0xbba61056,0x3c4b4928,0x3c8887f8,0xbbc6c73e,0x3c28cf87,0x3c7bc2a0,0x3bfdb37f,0x3c0de3b7,0x3c1bc40c,0x3c141803, +0x3c14e1dc,0x3c158e51,0x3c1ccc65,0x3c13042d,0x3c0fb8f6,0x3c01c10f,0x3c1537ec,0x3c18b4e2,0x3c27af6f,0x3c2d627f,0x3c25f2ef,0x3c09f415,0x3c0a3459,0x3bff380f,0x3c5f197d,0x3c0e6a1f,0x3bfe6ca2,0x3b9048dd,0x3c2fba9a,0x3c59d4aa,0x3bbdde1d,0x3bdb3afb,0x3c40c0f6,0x3bf4d5fe,0x3c3482d7, +0x3c09f9b9,0x3beadfd7,0x3b78abca,0x3c509c00,0x3c41b0a7,0x3c3166c1,0x3c40a59c,0x3c8274ad,0x3c2f8e6e,0x3c569280,0x3c4f2839,0x3c4c33ae,0x3c58ee57,0x3c8a0bd3,0x3c6e444f,0x3c5522d9,0x3c190390,0x3c57da41,0x3c6d1e8e,0x3c8964ce,0x3c9bf647,0x3c95f5fd,0x3c5c5a76,0x3c4cbf73,0x3bc1c1ad, +0x3c0e33b3,0x3c614e65,0x3c4fa6e9,0x3c07e036,0x3c29d683,0x3c33f673,0x3bdcfe01,0x3c23188e,0x3beaaf2f,0x3c3e77ba,0x3bf685f1,0x3b4018e5,0x3c31ee88,0x3c1c878d,0x3c4a605b,0x3c871793,0x3c3170bd,0x3c61d984,0x3c3315ef,0x3c56ae3a,0x3c7bdd17,0x3c755f67,0x3c695b19,0x3c687233,0x3ca02044, +0x3c7b72fb,0x3c551f04,0x3c0c0620,0x3c618f57,0x3c91a73a,0x3cb3d26c,0x3ccff760,0x3cb2ee4f,0x3c32bb7d,0x3c38cd0e,0x3b9d8228,0x3c06ccc7,0x3c64fcb5,0x3c2d754e,0x3a680b6d,0x3c14f67a,0x3c0d2d7f,0x3be61030,0x3be987e5,0x3bc2316b,0x39340b0f,0xbacc5896,0x3b6481c2,0x3b2b8ada,0x3c2aa687, +0x3c3d646c,0x3c7a0cf9,0x3c5baccc,0x3c59e0c0,0x3c37b3dd,0x3c656d01,0x3c7c6eff,0x3c9113b3,0x3c8e9e05,0x3cac63cb,0x3cf6699e,0x3cb16efb,0x3c8b1b69,0x3bd9edcc,0x3c8a2d65,0x3cc81196,0x3ce955f8,0x3d16f54d,0x3cf7f92a,0x3c839e42,0x3c706a74,0x3b600e0d,0x3b912068,0x3c9517ae,0x3c4f124f, +0x3b5a766c,0x3c056866,0x3c13f96d,0x3b5fa81f,0x3bfa7fd8,0x3b9f663c,0xbb9e287b,0xbb931d96,0xba9b9e9a,0x3b67d1df,0x3c16c135,0x3c580d23,0x3c82cec7,0x3bd9f56f,0x3c61cb95,0x3c346683,0x3c6d0892,0x3ca6891c,0x3ca478b5,0x3c921e0d,0x3ca7c7bd,0x3cdcdaa2,0x3c9f174d,0x3c601f32,0x3b9d70ac, +0x3c90a091,0x3cd9ba35,0x3d05fdc8,0x3d2c218a,0x3d08c422,0x3bfe57e0,0x3c3fb4a5,0x3c78e8b8,0x3c4975c5,0xbc5dbb36,0xbc4d3da0,0x3cb23928,0x3c06c5dc,0x3bfe3a3d,0x3b1b0334,0xbb0b188d,0xbba65e93,0xbb52a475,0x3acad7eb,0x3b1ec591,0x387cdab2,0x3be137eb,0x3c0e0ff9,0x3cb99023,0x3c2e2d10, +0x3c89eff3,0x3c8a798a,0x3c540588,0x3c00e811,0xbaa4efa3,0x3b48101e,0x3b1d4846,0x3ac2035a,0x3c063db2,0x3c12364e,0x3c92f99a,0xbc56d771,0xbc326a0d,0x3ca39804,0x3c72e383,0x3c967ad1,0x3c7a0f79,0x3ca9dc47,0xbbf5c42e,0x3b9b8ae2,0x3cc716f1,0x3c20fe3a,0xbbb02764,0xbbd8db21,0xbc3f23b4, +0xbbbbeaa2,0xbbbd790b,0xbb0f84eb,0xbb86912d,0xbae3a54c,0x39a62a27,0xb8816bc2,0x3b0a6f3f,0x3af2c94d,0x3abea09a,0x3c01b9f3,0x3c054d38,0x3c2598e1,0x3c787d32,0x3c969b78,0x3cad243a,0x3c41708b,0x3c0fe98c,0x3ad0aece,0x3c0e8c0c,0x3bda0ab4,0x3bd37aef,0x3c271b8c,0x3c2083ce,0xba57106b, +0x3c840c8e,0x3bf70bfa,0xbc700dd3,0xbb5e5b55,0x3c3ac5cb,0x3ade59c9,0xbba1d736,0xbb4897e0,0xbc1fe51a,0xbc03545f,0xbba84f29,0xbae37a69,0xbb745af8,0x3a0a75ba,0xbaa8ec75,0x3a8b2b94,0x3a6f15a9,0xba85367c,0x3be27911,0x3b00242e,0xbb818a7d,0x3c1f726c,0x3c585116,0x3bad6930,0x3af863d2, +0x3a961d83,0x3b263680,0x3bc2966a,0x3bed137e,0x3c3c8565,0x3c65a56b,0x3c0f666b,0xbc35a683,0xbbf2ea55,0x3b7217bc,0x3c82c289,0x3d1c7bda,0x3d246abd,0x3cf0cd12,0x3caffd30,0x3af36d29,0xbb5587c8,0xbc27e206,0xbb5e444c,0xba87c426,0xba8a1b9b,0x3ac22f0d,0xbb8b0a49,0xbb060373,0xbab49525, +0xba76456a,0xb94c32f1,0x3919d123,0xbab26302,0x3acfc907,0x3aaa0ac4,0xbb41fb72,0x3babccac,0x3c15b6dc,0x3bbf2837,0xbb12d395,0xbb00566d,0xbb549c1d,0x3b9591c4,0x3c34dcdc,0x3c7b14f9,0x3cb2ae33,0x3c9f941b,0x3be4f421,0x3bb92939,0x3c19ff46,0x3c4df05e,0x3d1e3cf8,0x3d38f1ef,0x3d316a14, +0x3c7715fb,0xbc4fca44,0xbb81f44e,0x3cab2340,0x3c899c63,0x3c90dcb3,0x3be9a8c8,0xbb021530,0xbada738a,0xba11dd92,0xbae5867b,0xbb26a70e,0xb9b0d7a5,0x3a34e3f1,0xbb7b8d04,0xbb09d987,0xbb13075c,0xbb616198,0x3bb7f0a2,0x3bcedb93,0x3b1acbf0,0x3a647d38,0x3b7478bb,0x3c011495,0x3beff378, +0x3bc494cd,0xb8eb178d,0x3b508cb8,0x3b6bfdd3,0x3be69564,0x3b95e42d,0x3b60d1aa,0xbc210e8a,0x3cc9dd99,0x3cfa13f2,0x3c880ac9,0xbb6a28f3,0x3dc52f44,0x3da20baf,0x3d0d2bcf,0x3d4ba766,0x3cbda77a,0x3cf7ceb6,0x3cf169a1,0x3ca50b26,0x3c522ea5,0x3c0fff06,0x3b61c647,0x38321b80,0x3afb74ac, +0x3bb5e4e6,0x3b8e63e0,0x3b1ec781,0xbb4d7375,0x3a9dea31,0x3b023e3d,0xbaff65c5,0xbb0a62f7,0xbbbb302f,0xbb818190,0xbb13fa7b,0x3be6c148,0x3caa8c0f,0x3c82c3c3,0x3c6550d9,0x3cca163a,0x3c1bfaec,0x3badcde5,0xbb1e9586,0x3bd6c546,0x3ccf7495,0x3d6b3e5e,0x3d9d353c,0x3d377883,0x3d1840d9, +0x3cd34eaf,0x3cbd9d1f,0x3cbafb78,0x3c9f6e8d,0x3c910bc6,0x3c63ee16,0x3c70f7da,0x3c7b40d1,0x3c3b9955,0x3c5f64b3,0x3c117332,0x3b112ead,0x3a5ce5a5,0x3ae17fdb,0x3b5ae0a7,0x3ba44606,0x3b0bd55e,0xbb59e06f,0xbb90694d,0xbbb4c137,0xbc080854,0xbbb0f5ad,0xbc05464d,0xbc57aaf0,0xbcb3fb64, +0xbcc6ecc7,0xbca5b736,0xbc49e028,0x3bb3741c,0x3cdafe9d,0x3d234cf2,0x3d3f8fce,0x3d4749f9,0x3d35216b,0x3d1393de,0x3cae9921,0x3cd452a2,0x3ca8a087,0x3c981360,0x3c88bd25,0x3c703aca,0x3c38044c,0x3c3d2bd1,0x3c27f8dd,0x3c20a3f9,0x3c03d126,0x3c02d34b,0x3bdb3c98,0x3bd9d888,0x3bbff760, +0x3c04db00,0x3c1f6737,0x3c1aa34f,0x3bf8f0d8,0x3b52b41a,0x3b4aa81a,0x3ac5d5de,0x3b05cf54,0x3b7f4997,0x3af1c43b,0x3bd5e56a,0x3c18bd33,0x3c7c9ddc,0x3ca1552d,0x3ce83431,0x3d24dded,0x3d29512d,0x3d29470a,0x3d23cc69,0x3d14d4eb,0x3cada449,0x3cc291dc,0x3c849587,0x3c9091ad,0x3c6b27f1, +0x3c3905c7,0x3c28c47e,0x3c1e92e9,0x3c1a5599,0x3c1c66db,0x3c371772,0x3c635f5d,0x3c1d7a67,0x3c5cd2d0,0x3c2014d2,0x3c3ef437,0x3c289129,0x3c1d7611,0x3c6493ac,0x3c52036e,0x3c037bc2,0x3c1b394a,0x3c070b97,0x3c3bab3a,0x3c64b2a7,0x3c87eb0b,0x3cbbbe6d,0x3cf7736e,0x3d150ea5,0x3d1673f0, +0x3d1cd2a1,0x3d1f7520,0x3d053975,0x3ced5cbd,0x3cdd351d,0x3cc56a83,0x3cadce01,0x3ca2cbd4,0x3c441b49,0x3c912861,0x3c9c522d,0x3c9e02af,0x3cb869b3,0x3c7b7b87,0x3c9dad1b,0x3c8ed779,0x3c8567c7,0x3c8522dc,0x3c8b589e,0x3c7f82d7,0x3c9381d9,0x3c87b8a6,0x3c5b1ca8,0x3c70805a,0x3c18e2cc, +0x3bbd7f22,0x3be9803d,0x3c382015,0x3c4a90f3,0x3c6650e6,0x3c6a177f,0x3c577571,0x3c6a2761,0x3c386299,0x3c5b6d23,0x3c91fbfa,0x3ca28eb4,0x3cdc38fc,0x3cddbaf5,0x3ccdf95d,0x3cc664be,0x3cc5c87f,0x3c82c358,0x3c8e8728,0x3c9f37cc,0x3c5ae39b,0x3b58dece,0x3c9a419c,0x3c79e70e,0x3ba0d015, +0x3b737101,0x3b86a98e,0x3b886469,0x3b74c274,0x3b3a9926,0x3b40e89c,0x3c885084,0x3c99fa4a,0x3b7a4de9,0x3c75a780,0x3c945905,0x3c634d21,0x3c73ebbe,0x3c7491e5,0x3c775e14,0x3c7fc451,0x3c83089a,0x3c877941,0x3c9b7aa5,0x3ca291a4,0x3cadd409,0x3cb13de1,0x3ca54622,0x3ca78ef5,0x3c97b3e9, +0x3c8ed17e,0x3c8c4602,0x3c887dde,0x3cd28a44,0xbc55717e,0xbc16acf9,0xbc4e2581,0xbc5ca77e,0xba0bea9e,0x3c75f7a7,0xbc46b66c,0xbb2cbcae,0x3c55d53e,0x3c752680,0x3c879332,0x3c7aa28e,0x3c82a16b,0x3c9e147d,0x3c81a05d,0xbb2146a5,0xbc36ac31,0x3c9d6f84,0x3ade104d,0xbc15a09f,0xbc2af236, +0xbc17a517,0xbc2de0ed,0xbc2ddf62,0xbc3585ad,0xbc306007,0xbc1c5d69,0xbc28da34,0xbc30b7a8,0xbc3907a3,0xbc40edd0,0xbc3acb70,0xbc38fa13,0xbc38f0c7,0xbc33f164,0xbc1aa349,0xbc25547b,0xbc2a943e,0xbc94ff8f,0x3bdf772d,0xbb9e4110,0x3ae397a6,0xbb7c3cb9,0xbbad146d,0x3a092e7e,0xbb323ae9, +0xbb5e29a5,0xb9d8f5f3,0xbbb8ebe0,0xbbe104bc,0xba962959,0x3c1a9470,0xbba4734b,0x3b03aaf3,0xbb103347,0x3a2886f8,0xbc68626a,0xbc3822e4,0xbc5e3db3,0xbc7550d9,0xbc759fab,0xbc719339,0xbc66e9b6,0xbc800441,0xbc903dd0,0xbc9f1601,0xbca53313,0xbc9988b6,0xbc914e64,0xbc9064f7,0xbc7cb397, +0xbc18e0f4,0xbc313728,0xbc4411bf,0xbc873832,0xbba8386d,0xbc26f8d3,0xbb4631f4,0xbb6fa158,0x39341ed5,0xbbc48e32,0xb9072348,0xbb9b5c36,0xbb9f9267,0xbc3acbe9,0xb9cf3f2d,0xbc056a0e,0xba821b5e,0xbb1c4fa9,0x39374d84,0x3b35bebb,0xbae5a148,0xbbe4fcf4,0xbc6afe11,0xbc830c41,0xbca027cf, +0xbca02ae3,0xbc93b036,0xbc5db66c,0xbc91aa7f,0xbca81169,0xbccf5b27,0xbcd3464b,0xbcd27707,0xbcb50514,0xbcb26826,0xbc927d8a,0xbc06c2b9,0xbc534705,0xbc415576,0xbc901d4e,0xbaf8852b,0xbb70b80e,0xbb953321,0x3b3fe20c,0x3b99e50d,0xbb8bf47a,0x3b72a4b6,0x3b0f426d,0x39dfe213,0xbb2f17d2, +0xbba7c02c,0xbaffcd4a,0x3b2bd08c,0x3b9117d8,0x3bcbc674,0x3b342566,0x398dada5,0xbba9f8ed,0xbc702527,0xbc84eb20,0xbcbc06e5,0xbccb22a9,0xbcd60572,0xbc9040a7,0xbcc1bc92,0xbce4c976,0xbd14cbc9,0xbd104b58,0xbd0c71c3,0xbcf26c45,0xbce1fe90,0xbca40052,0xbb308249,0xbc0d3f34,0xbc676b08, +0xbc9956b7,0xbb1e6456,0xbb29369b,0xbbcf82d7,0xb9dd28fd,0x3b93bfb5,0x3b0d63ed,0x3bd3e8bb,0x3b137803,0xbb818fd4,0xbb6efa32,0xbae50320,0x3a802c33,0x3bb4041c,0x3bfaf48f,0x3c2b3088,0x3b9c619b,0x3b8caedb,0xbbea5245,0xbc71b55e,0xbcb6f2f8,0xbced7333,0xbce9172b,0xbcca03d2,0xbc727cd4, +0xbcbac415,0xbcfdb470,0xbd185244,0xbd278cdc,0xbd1e9cf8,0xbcf4df6f,0xbcf8f56d,0xbca9551b,0xbb9ecd73,0xbc4287d9,0xbcb19aff,0xbcf065fc,0xbd1f614d,0xbccf29cb,0x3c48846b,0x3be9edd3,0x39d93d86,0xba7a9419,0xbb9ff1e8,0xbbb10d67,0xbb762c32,0xba59d2ad,0x3ad1bfb5,0xba4b9d2b,0x3b4f8668, +0x3b84dc48,0x3c6a98be,0x3b5bd9e7,0xbb4a5a5d,0xbc569316,0xbc53c5ca,0xbbd4083d,0xbaee1de3,0xbb37dca3,0xbbd50785,0x3b3822d2,0xbb52a8e0,0xbb7789b7,0xbb06fee2,0xbd13e859,0xbd4315b6,0xbd2bae14,0xbd18598f,0xbcf51ac7,0xbcbee40c,0xbcd43448,0xbc3e343a,0xbc3c933f,0x3be6fe21,0xbbc5ad1d, +0xbc4873db,0xbc8f2ea2,0xbc2313a1,0xbbef7abe,0xbbc5c7b1,0xbb6ee567,0xbbb35d16,0xbaac0d4f,0x3a73fab0,0xb976e7f9,0xba816af4,0xbb20700c,0xbba79be9,0x3b183f58,0x3c21c65f,0xba1f921a,0xbc93d04b,0xbccf7be9,0xbd17f2c7,0xbccf1d81,0xbc88f8f9,0xbbb7119b,0xbbba2a4a,0xbbf3834a,0xbc6b395b, +0xbc6f7997,0xbc6faee8,0xbc72644b,0xbc63171f,0xbc8b015b,0xbcbef698,0xbc856211,0x3ba478bf,0xbba7ff4b,0xbc4fd3fe,0xbbde637a,0xbc7131f8,0xbc2db0fe,0xbbe8f9f5,0xbbd9d32a,0xbbb55591,0xbb111afd,0xba04e3de,0xba8ee2d7,0xbae02999,0x3ab2054d,0xbadde030,0xbb4c42ce,0xbbffc929,0xb97c895b, +0xbae689ac,0xbc269da9,0xbc29d766,0xbc74bd20,0xbc813069,0xbcd444e3,0xbcfab24e,0xbd067b7c,0xbce56a18,0xbcbb51cb,0xbcb86c27,0xbceced24,0xbd287e16,0xbd657921,0xbd365644,0xbd1b41da,0xbce57f9c,0x38c66fe7,0xbcf1b067,0xbc2d7b7c,0xbb260200,0xbc48200f,0xbb98e4e7,0xbbde799f,0xbb9ba5be, +0xbc188dba,0xbbc35bc7,0xbb33708e,0xbb43e776,0xbad9e28c,0xbac155c3,0xbab895d3,0xb93c9b8a,0xbbbd17bf,0xbbf07454,0xb9b74bed,0x39b831ba,0xbbf3e57a,0xbc1a08fd,0xbc69b5c4,0xbc5ad629,0xbccf2edf,0xbcf53854,0xbd077780,0xbd0dc80c,0xbcf86ecd,0xbcd5a87d,0xbd03b7ae,0xbd24e576,0xbd67e454, +0xbd7ac58e,0xbd86e40c,0xbd8d5476,0xbd2bc2b3,0xbdb01567,0xbcd805d1,0xbbc44c65,0x3b8f6501,0x3ba0c039,0xbbaeadcb,0xbc0a8285,0xbbe3d985,0xbb98dae4,0xbb7eb4a9,0xbba58765,0xbae58352,0x35c4c309,0xbb8f7aa1,0xbb947638,0xbb93c858,0xbb94208d,0xbb2b0eca,0x3a0a0ddb,0x3ad4c600,0xbc41e5d4, +0xbc97a570,0xbcac6bc1,0xbca647e9,0xbc729841,0xbc31b180,0xbc5f167f,0xbc901182,0xbc9d6d1e,0xbc9c5ee1,0xbcce8ab4,0xbcc4de41,0xbd580857,0xbd93bd5d,0xbdd3ce21,0xbdcf6674,0xbb7f3ab7,0x3d270e0f,0x3d7549f5,0x3d094986,0x3cdccf09,0x3cf855ac,0x3cd93579,0x3c4eb80f,0x3bf1a34e,0x3b6bcddb, +0x3ac5e3f1,0xbafda90a,0xb9c8d39a,0xb9c85405,0x3a8acff9,0xb98cd57e,0xbbadc332,0xbb876233,0xbbbe8700,0xbbe80aa4,0xbbff0853,0xbb5e7ab7,0xbaf94a73,0xbb4fe1d8,0xbc016da5,0xbca69759,0xbcfc335a,0xbd1621fc,0xbd25ae43,0xbd1cfaeb,0xbd263ffc,0xbd6a498b,0xbd979c53,0xbd87b916,0xbd1dd8db, +0xbc82a632,0x3aa4b3be,0x3b8633f8,0x3ca87e65,0x3c9bdd34,0x3c7dff1d,0x3c9219dc,0x3c720592,0x3c2f1834,0x3c3c59a0,0x3c1d3fed,0x3c2fadbe,0x3c108c40,0x3bbd23e7,0x3a1bca6a,0xbb434abb,0xbb835664,0xbb74464c,0x3a269d08,0x3b4e7c2d,0xbb3bc86b,0xbc2e22b4,0xbc8e45b1,0xbcb60146,0xbcd5e3d9, +0xbcf38e9c,0xbcfa1ab2,0xbd06a635,0xbcfca0f9,0xbcb33d7b,0xbccc67a9,0xbcbb2b95,0xbccdfc2f,0xbb2e6134,0x3b8c8df1,0x3badc89a,0x3a306a15,0x3c462326,0x3cb3d73b,0x3c546fd1,0x3c4806b0,0x3c0b9977,0x3bebd2e4,0x3c151188,0x3c06c3c2,0x3c07cb6a,0x3c1ad9f6,0x3c194d1a,0x3c1cb67a,0x3c0e6a8b, +0x3bf3bdca,0x3b85728e,0x3b855e22,0x3b86a6e8,0x3b182369,0x390dba27,0xb9db7f86,0xbc0d6a3a,0xbc02358f,0xbc141b5b,0xbc1d5db1,0xbc0dcb86,0xbc085e49,0xbbfeeb22,0xbbe2aabb,0xbaf14de8,0xba4dcf2f,0x3b726899,0x3ba5dcd6,0x3c6ffd64,0x3caafe58,0x3cb76292,0x3cc181b3,0x3c6548a5,0x3c15d714, +0x3c6c1416,0x3c36c13c,0x3c461cd0,0x3c3da90c,0x3c111879,0x3bcedda7,0x3bdab796,0x3bc36e56,0x3ba38180,0x3b5f5d6f,0x3c087275,0x3bb6471e,0x3c2ee791,0x3be09ecd,0x3bc65167,0x3b6b8732,0x3bb12693,0xbb3d930c,0x3a54c191,0x3b03e262,0x3b46958f,0x3be3e402,0x3c2ef4f5,0x3c656e0e,0x3c68a1af, +0x3c7c6e73,0x3c55c3d6,0x3c6bec48,0x3c8e00a8,0x3c9e20cd,0x3c8c88c9,0x3c70f604,0x3c82bfe4,0x3c59507f,0x3c6d7a64,0x3c7649dc,0x3ca18f46,0x3c660515,0x3c443cad,0x3c6a9dd8,0x3c45a7b6,0x3c95b609,0x3c677e40,0x3c69e375,0x3c6c5857,0x3c57034f,0x3c171c2e,0x3c21c6b7,0x3b99ec08,0x3ba1bd89, +0x3c1eb76a,0x3b9163a3,0x3c0aa41d,0x3c0a1723,0x3c383250,0x3c3d73ba,0x3c538ec7,0x3c5c555d,0x3c51ce83,0x3c3e7c1f,0x3c46bfb0,0x3c1b10ca,0x3c21f506,0x3c1cec50,0x3ba50a1a,0x3b847396,0x3bf7ec6d,0x3c133899,0x3c387643,0x3c56129e,0x3c068661,0x3bf1f67d,0x3bdfd34a,0x3c52b98a,0x3ca05470, +0x3bca38b3,0x3c1ba26a,0x3c8edeff,0x3c9670a1,0x3c978bba,0x3c97fa8e,0x3c9f7e53,0x3cafbee8,0x3cb4cb31,0x3c1188a2,0x3b8efecd,0x3c9e5cce,0x3c1a5c84,0x3b8f4eaa,0x3bdc198f,0x3bd5c3fe,0x3bed6c1c,0x3c0085c5,0x3c0e8eae,0x3c1c42e2,0x3c26d4f5,0x3c34692a,0x3c24e445,0x3c258688,0x3c24d5c6, +0x3c2324cf,0x3c28e71d,0x3c1bc923,0x3c08b714,0x3c06fbae,0x3c05c991,0x3c59be74,0x3c87442a,0x3c3802ae,0x3c88530f,0x3c2e0b7b,0xbba603a7,0xbc8834de,0x3c35b0b8,0xbaf25eb6,0xbc8be813,0xbc9551d4,0xbc9f1782,0xbc8c956c,0xbc95bd0d,0xbcb6a225,0xbc942bdd,0xbb17d501,0x3c19cce2,0xbc95d25c, +0xbba8957c,0x3bffb23e,0x3c852226,0x3c549ffb,0x3c66a5e0,0x3c63058d,0x3c678620,0x3c648ca1,0x3c6183e0,0x3c544d97,0x3c5222b9,0x3c4dd2d0,0x3c573f35,0x3c54fad6,0x3c5f298e,0x3c60f56c,0x3c55c3a4,0x3c327c23,0x3c42d7ae,0x3c3ee836,0x3c817612,0xbc6f06a6,0x3bd215a5,0xbb934f05,0x3bbc623b, +0x3ba7a44d,0xba0ab740,0x3bd8ca38,0x3b64b90d,0x3a99cf2a,0x3b280c5e,0x3bd81780,0x38c02ace,0xbc2f69a8,0x3c0a1cbe,0x3b1139d0,0x3be8053e,0xba8f2d6d,0x3c912749,0x3c8ec66c,0x3c943d18,0x3c9d1a21,0x3c93de3d,0x3c950717,0x3cac4549,0x3c8fd381,0x3c889830,0x3c855cea,0x3c9a445b,0x3ca05817, +0x3cab4117,0x3cb18f26,0x3ca083b9,0x3c47ac1d,0x3c4ca24a,0x3c35cdd3,0x3c2e8d4a,0x363689a5,0x3c48a722,0x3b06cbb2,0x3b9ac48a,0xb9578f3d,0x3c076532,0x3aa245ed,0x3c3325b1,0x3adb21d6,0x3c64d495,0xbab8e511,0x3be1fb4b,0x3b778f72,0x3c1fd298,0x3c418711,0x3bbaa379,0x3be33ea9,0x3c566985, +0x3cc29495,0x3cab70b1,0x3cc7383d,0x3cb53e7a,0x3cb03ede,0x3cbda89d,0x3c9014f5,0x3c81a68d,0x3c8a1f79,0x3c950ca7,0x3cac02d5,0x3cb8b7e6,0x3cc47b19,0x3c9985c7,0x3bc4e6b9,0x3c23cc3a,0x3beb0a08,0x3b6d237b,0xbbca6d26,0x3b5566e0,0x3a98c1e3,0x3b83ca22,0x3b3c1d0f,0x3baecc9a,0x3b9cc143, +0x3bb3bf61,0x3afb2908,0x3b041592,0x39ec45bb,0x3bbb27e5,0x3b93d0d7,0x3c27f72c,0x3c6057f0,0x3c42cf95,0x3be9b138,0x3c1ad283,0x3cd8c7aa,0x3cb642ab,0x3ce6f0c6,0x3cd90c04,0x3ce837a4,0x3cff2d14,0x3cae9988,0x3c9542b5,0x3c92effb,0x3cc5d885,0x3cef6680,0x3cfedfa5,0x3d0a4722,0x3cce6575, +0x3ba4ac26,0x3bd468f0,0x3b8a93a1,0x3bae5cac,0xb922e9c4,0x3bf09626,0x3b97abf3,0x3b8054a6,0x3ba6d993,0x3b08a04d,0x3bb956af,0x3b95e2d4,0x39cab8c9,0xbb446ba9,0x394d41c2,0x3b39e4f7,0x3c21eb7b,0x3c517308,0x3c602a5a,0x3c845036,0x3aafa809,0x3c826349,0x3ce13ebe,0x3ce637c1,0x3d08b970, +0x3cec0ee3,0x3ced1d4e,0x3ceb68d6,0x3c9f4ee8,0x3c76f1a3,0x3c8cc4c8,0x3cb26e7a,0x3cdd16bb,0x3cd49825,0x3d026849,0x3c9c75a9,0xbb481f1f,0x3b5cf1df,0x3cb3db95,0x3ccbd565,0xbcb33581,0xbcb61359,0x3c58163b,0x3b9af8b5,0x3c2288d2,0xb93379e1,0x3ac965ee,0xba932567,0xbb26af9e,0x3b08cad5, +0x3b23b28c,0xba481992,0x3b96c0ab,0x3c1af6da,0x3c5da0e0,0x3c869d9e,0x3c3f9bdf,0x3c87c837,0x3ce757f9,0x3ca0031c,0x3c86bd92,0x3c234e55,0x3c380e71,0x3c447afe,0x3cb817c0,0x3cdbb482,0x3d329e5f,0x3c67ff8b,0x3c9293f2,0x3d172ee1,0x3d271943,0x3d2a616e,0x3cd776a3,0x3cf838e9,0x3c55096e, +0x3c1b38f6,0x3a520925,0x3c8be0b6,0xbc2644d4,0xbb65af48,0xbc1df12f,0xbb58b8aa,0xbb5ead7a,0xbb07a507,0xbb1be09f,0xba6e9a75,0x3a75b558,0x3b306633,0x3b9cd3ad,0x3be0b793,0x3b07b8bb,0x3bd57ae8,0xbafc61bf,0x3bc613cf,0x3cbe8060,0x3cb139e1,0x3cff6670,0x3c8bd8a4,0x3c483378,0x3bce3d53, +0xbb0de683,0xbb8bd05e,0x366a9832,0xbb160c82,0xbb842cc0,0xbc092aff,0xbb3b5189,0xbc0a700c,0xbca785d2,0x39a80fc8,0x3c91a6bd,0x3c5f8d46,0x3b8b5068,0xba82639b,0xbbd7e94d,0xbbdfdab0,0xbb9bc689,0xbb8914a7,0xbb74f8e7,0x3aa42b2a,0x39f8abc5,0x3ad73398,0x3ab37059,0x3ac722be,0x3ba9ba31, +0x39ea46e4,0xbb191a11,0x3ba83570,0x3bd97237,0x3c693874,0x3c2630ca,0x3bbbf274,0x3c29e23b,0x3c7023ac,0x3ca0b910,0x3cc84b43,0x3ca71eac,0x3c73cb24,0x3bf71a11,0x3bd6ff8e,0x3c8101d0,0x3cab01b7,0x3d17761b,0x3d1a8cd0,0x3cd5e343,0x3ca104ea,0xbc0925d4,0xbc1df03b,0xbc913916,0xbc1594b8, +0xbc4bf467,0xbc00d895,0xbbc12aa5,0xbc1167d1,0xbb94b35a,0xbb04dfcf,0xba311663,0x3a9c4779,0x3a11493a,0x39f72a03,0x3ab90284,0x3a46858e,0x3913baf8,0x3b6c7a0c,0x3b2174cb,0x3bcd16bd,0x3bef8a09,0x3b8ba276,0x3bcf9cf4,0x3c67aa47,0x3cacdd09,0x3cf8b6da,0x3cddb8b2,0x3ca6e90e,0x3c6e1317, +0x3c2df3fb,0x3ca868a3,0x3d16bd57,0x3d3463c5,0x3d3ea50e,0x3d389de0,0x3b647c01,0xbcf352f5,0xbd097ea7,0xbc3ff94f,0xbb9a13b1,0xbb12cfb3,0xbb1eba2b,0xbc006c91,0xbc04af4e,0xbb5aeb4b,0xbb616de0,0xbb2bb5c3,0x3a5b3752,0x3a97c8dd,0x3a13b3c8,0xba0061b1,0xbb1bd709,0xbb7a71a4,0x3a3721c8, +0xba006fc1,0x3c5b9a1f,0x3c2665ea,0x3c48ebbb,0x3c4ee6e5,0x3bf6a264,0x3b599487,0x3aadccaf,0x3a2ff712,0xb990832c,0x3a165029,0xbbd45706,0xbbc36689,0x3b8d4230,0x3c58e874,0x3c8eb3a6,0x3d09e126,0xbc91e4a5,0x3da01091,0x3d5eb13e,0x3cb8b3a1,0x3d45bb07,0x3cc4cca1,0x3d05b620,0x3cf3b2c8, +0x3c83a20e,0x3c12be3b,0x3bdc2cbf,0x3bb089f0,0x3a3a5ae8,0xb9781ff6,0x395b9bc8,0x3a560b80,0x3b053882,0xba937b11,0x3b9af24a,0x3b864232,0xbafb45c8,0x3a47955e,0xbbba6427,0x3a686aa2,0x3b58a1dc,0x3b659260,0x3b6ad3aa,0x39951e2b,0x3b40e837,0x3c2e3f6a,0x3c107894,0x3c575c85,0x3c95f5f4, +0x3bc70301,0x3c1200fc,0x3ce3f348,0x3d4f459c,0x3d283332,0x3d02fe2a,0x3c8fb6e9,0x3ca1f6f2,0x3c9e0001,0x3c91e99a,0x3c8e6244,0x3c5e81d5,0x3c8600fa,0x3c5ef547,0x3c747f57,0x3c4c12d2,0x3c1b702b,0x3bc90978,0x3afbc7ff,0x3a8020c6,0x3a1ec382,0x3afeb858,0xbab53d7a,0xba3edb12,0xbaeec9d1, +0xbb33679e,0xbbc5689c,0xbbf9be40,0xbc2e02a0,0xbc0a9fd7,0xbc32b62f,0xbc5f4796,0xbc86c88b,0xbc8ade06,0xbc15c97f,0x3bde6d0c,0x3cb7fd00,0x3d0486a1,0x3d1c9fc4,0x3d184e86,0x3d3a4a8a,0x3c96f5a1,0x3cd14143,0x3cabb22c,0x3c8a252d,0x3cae34e2,0x3c7eb2b2,0x3c6fb2a9,0x3c56e6fb,0x3c5ed60c, +0x3c297ce5,0x3c22fbaf,0x3c044996,0x3c272aa6,0x3c05555e,0x3bb25249,0x3b6d22f6,0x3b21eb8c,0x3b2240b6,0xbb7388ab,0x39add6c0,0xbad9004a,0xbaaefbf2,0xba6a3632,0x3a28e7ec,0x3acabb5e,0x3b29b4f7,0x3b558294,0x3bab20da,0x3c4586fa,0x3cbb3e51,0x3d12f127,0x3d20bd95,0x3d28bdfe,0x3d39a571, +0x3d2009e5,0x3cf5db92,0x3cf7271f,0x3c65a7bd,0x3ca12fdc,0x3c516bde,0x3c1dc8e1,0x3c3bf221,0x3c6ff320,0x3c3a5440,0x3c505dd0,0x3c04d91a,0x3c944e4c,0x3c331143,0x3c783232,0x3bfdc011,0x3c488413,0x3c2839fa,0x3c0b2df0,0x3b0b364c,0x3c05db01,0x3c02b595,0x3bd0cd48,0x3bbeee1a,0x3beae464, +0x3c128408,0x3c2531b2,0x3c816a16,0x3caf2048,0x3ccc28e6,0x3d02531d,0x3d1de6b2,0x3d378354,0x3d2b18d5,0x3d240501,0x3d2565ca,0x3d0758b2,0x3ce4bccd,0x3ced7efa,0x3c667ec9,0x3cd6aa10,0x3ccc0df4,0x3cc6e465,0x3cde33a2,0x3c898a02,0x3cc26249,0x3c90bc03,0x3c827bec,0x3c5be5b7,0x3c894a08, +0x3c600af5,0x3c82e00b,0x3c6a5fa0,0x3c1824e9,0x3c8bfe18,0x3c0bb7c6,0x3c7b9b8e,0x3c639dac,0x3c8d4e09,0x3c94764e,0x3c9db1f2,0x3c9d8b87,0x3c9622e3,0x3cae63a0,0x3cace7ba,0x3cc18023,0x3cdc8e9c,0x3cd2959b,0x3cfa89ef,0x3cfbe7fb,0x3cd99c75,0x3cdfda46,0x3cf6947a,0x3cb0352c,0x3cc13ae5, +0x3c98bc7d,0x3c082674,0x3aabf1dd,0x3c9446a4,0x3c332b0b,0x3aa7be45,0xba8002dd,0x395832a6,0x3aa5c021,0x391a3be1,0xbb113999,0xbb2c06d1,0x3c41ccef,0x3ca02a63,0x3a906730,0x3c20a9df,0x3c8b8769,0x3c9931eb,0x3c9775e9,0x3c9970b7,0x3c98b8a0,0x3c9bb42c,0x3c9d9793,0x3c9e7203,0x3caec822, +0x3cb41273,0x3cc12754,0x3ccaa148,0x3ccaa3b9,0x3cd769cb,0x3ccd627f,0x3cc25d90,0x3cc2370e,0x3cba5912,0x3d009551,0xbc0274dc,0xbbdeb1a8,0xbc5b3c63,0xbaa00f99,0x3c5f323c,0x3c98fdc6,0xbb28afdb,0x3c1f83ac,0x3ca98b22,0x3cb08e34,0x3cb49954,0x3c9e299b,0x3ca24885,0x3cbedbbc,0x3c9e9245, +0x3c335fd4,0x39f75939,0x3ca936e0,0x3c67678f,0x3b1307b1,0xbc34a934,0xbbe7a917,0xbc0442df,0xbc0815e5,0xbc111713,0xbc0fd341,0xbc0048ac,0xbc0bcf84,0xbc0d21c5,0xbc0daab5,0xbc1090de,0xbc0b5f8c,0xbc0bb4f8,0xbc001778,0xbbf737b7,0xbbdf5380,0xbbee42c8,0xbc25d98a,0xbc4840b5,0x3cac1076, +0xb83338e7,0x3c392160,0x3af73954,0x3b3a9b25,0x3bc7a31c,0xbaa917e6,0x3bb3b257,0x3bf40f78,0x3ba86eeb,0xba927176,0x3bbca4f1,0x3c8baa51,0x3adf6027,0x3c22e9af,0x3b87839a,0x3c5b68f1,0xbbd0d17c,0xbc0e860a,0xbc0e6c22,0xbc3291fb,0xbc329b2c,0xbc325f54,0xbc228d97,0xbc56a162,0xbc726843, +0xbc7896dc,0xbc71cb06,0xbc5609f2,0xbc511bc7,0xbc1b965a,0xbbfee8e7,0xbbe4a845,0xbc063dd7,0xbc43f6dd,0xbc333d7a,0x3bdbaf94,0xbb9f4e7a,0x3c0a11e5,0x3ad45889,0x3bdad7c3,0xbb4f54f9,0x3bd3b1ed,0xbb8e97b9,0x3c149d27,0xbc11401e,0x3b90f845,0xba2983b7,0x3ba6ff12,0x3b0e6dc8,0x3bb1c847, +0x3c1958ee,0x3c12cce1,0xbabcebce,0xbc43d313,0xbc18cdbc,0xbc6fe64f,0xbc6cac4e,0xbc76d6a9,0xbc2f4eb7,0xbc864f1e,0xbc8f664d,0xbc940961,0xbc9059af,0xbc838ec8,0xbc6f889c,0xbc19c7bf,0xbbe4ff29,0xbbc89d43,0xbc06d5da,0xbc81f130,0xbc5e3998,0x3c189e34,0x3b9ac0ce,0x3ba65442,0x3b6f0e38, +0x3b62b3ed,0xba58d6c7,0x3b220c1b,0x3b1ac6e1,0x3b94d1d4,0xbae46a79,0x39ef1e31,0xbb4a35c9,0x3bd08bec,0x3b9cbff3,0x3c00c503,0x3c07484b,0x3c4405d2,0x3b8ec738,0xbc45706a,0xbc0ff238,0xbc85ac23,0xbc93351e,0xbc9e3372,0xbc317539,0xbcb15c50,0xbcce9556,0xbcead873,0xbcc97ea8,0xbcac4444, +0xbca68299,0xbc17a4d1,0xbb72a74d,0xbbd7e2dc,0xbc0e54e1,0xbc5e7590,0xbc73715c,0x3b3f960f,0xba57853a,0x3aac8f91,0xb9824a37,0x3ad99222,0x3ab4b7c7,0x3b8ee3f7,0x3b42617e,0xbb148183,0xbb18ca1d,0xbb392f57,0x3a33d73c,0x3b36e914,0x3bea4628,0x3c4eaa5a,0x3a4f5718,0x3c91b88a,0xba9e2a9a, +0xbc3f6b61,0xbc4d3b2a,0xbcaafbb3,0xbcabec92,0xbca93cda,0xbc5f8229,0xbcc81eb9,0xbcebf134,0xbcd9e9e3,0xbce02d5a,0xbcac0dbe,0xbc9656ec,0xbbfe5d22,0xbb5a0924,0xbbea563b,0xbc100f40,0xbcaf1f3b,0xbcbcafd8,0xbbb43a73,0xbb85ef5c,0x3c5f2863,0x3c5e89ad,0x3bd9304d,0x3ada548d,0xba7242c7, +0xbaf3c4be,0xbb12d3f9,0x3b0aaafd,0x3acc5438,0xba8547de,0x3b87794d,0x3b4b8d82,0x3c85c7f9,0x3bc1f228,0x3c365029,0xbb383340,0xbc717d90,0xbc3c2a04,0xbc6e2723,0xbbd8ff4d,0xbc11681d,0xbb4f4e7e,0xbc976e1c,0xbca7d6af,0xbc457475,0xbd0cfa5e,0xbd1b7dd2,0xbcddf6fc,0xbc7786cb,0xbc43e230, +0xbc59f5c3,0xbcaadbcd,0xbc7f3aa0,0xbb582626,0x3c8b41fa,0xbc2c3db6,0x3a0c23ec,0xbc4f4308,0xbbff0525,0xbb289eeb,0xbb96cd1d,0xbad32c01,0xbb319f0e,0xbb087340,0x397d0a67,0xb9378b65,0x3b0e22d2,0xba99642a,0x3a05c475,0x3acf6653,0x3c3b502b,0x3c174517,0xbc3a531e,0xbc4077db,0xbcd184ae, +0xbc83c08f,0xbc2657e5,0xba4e33bf,0xbbab7c72,0xbc0c91e9,0xbbe10607,0xbc406778,0xbc1f40e5,0xba31668b,0xbc5fa51f,0xbc9e2231,0xbcaada45,0xbc3b03ac,0x3ba5c970,0x3c1a47a4,0xbb3eaaef,0xbb2c2cfe,0xbc2db69f,0xbc10cad6,0xbba5e92c,0xbbe6e270,0xbb8c223b,0xbb021fbf,0x3905d08b,0xba930e0f, +0xb920bf07,0x3afaa530,0x3aac194f,0x3a2780a1,0xb90ed750,0x3b1e8233,0x3b5be827,0xbae72ce1,0xbbe6410e,0xbbe16125,0xbc05a9b3,0xbc868919,0xbca7c3a0,0xbc9d6dae,0xbccc4477,0xbcb628b8,0xbcaf4998,0xbce2f9e6,0xbd07a394,0xbcd64263,0xbc918281,0xbc55b8b0,0xbc575149,0x3a412a3c,0xbca34819, +0xbc7a51fc,0xbb918ffb,0xbc54dc61,0xbc72b483,0xbc02cae4,0xbbf3d72b,0xbc3be09d,0xbbedd904,0xbb84d9c7,0xbb1bd5f9,0xba6383e7,0xb96e9c12,0xb986b40e,0xb9accc52,0xba8100be,0xbac939de,0xbaa99706,0x3b80d07e,0x3baca519,0xbbfeabe4,0xbbc91ad8,0xbbb5f6b4,0xbc67d53c,0xbc943faf,0xbc9b61a2, +0xbcc2001f,0xbca64eec,0xbc9edcdd,0xbcd2d9bf,0xbd024d17,0xbcfa7200,0xbd069f1b,0xbcf666fd,0xbce49c4d,0xbccc7991,0xbd570f42,0xbd0ba64f,0xbcc66908,0xbc716e29,0xbbee5d9f,0xbc42a2c8,0xbc1e4a4b,0xbbb4adb7,0xbbc126b4,0xbb91ba0b,0xb9a2c776,0xba9cc993,0x3a812a75,0xbaeaeedb,0xb9517d0b, +0xba7c3a7d,0xbb48a433,0xbb852033,0x3ad5eba3,0x3b62b0c2,0xbbf4c2ab,0xbc42c0de,0xbc93b2bc,0xbc5e3062,0xbc1ad1b8,0xbbed98ac,0xbb87c2af,0xbb5a3216,0x3b2dc6c8,0xbb84fb8b,0xbc2e333b,0xbc88af5a,0xbd0fe7b5,0xbd3d9b25,0xbd5bcc52,0xbd571a87,0xbbcae52a,0x3d1ca853,0x3d80a4a2,0x3d1827e7, +0x3cfb6fa2,0x3d05d0ab,0x3cdf7d80,0x3be3af5b,0x3bf69951,0x3b0eec5b,0x3b2da2f3,0xbab2c553,0xba39a70e,0xbb6e8490,0x3a15db5d,0x39d02e71,0xbb87258e,0x3b8bebb4,0x3b8f92b8,0x3b4dc0d5,0xbb37b61e,0xba3f1f30,0xb9c3b0ae,0xbae7ee96,0xbc1a41f4,0xbca1d548,0xbc858481,0xbc959f57,0xbccd1b58, +0xbcd5cb40,0xbcd65c19,0xbd021874,0xbd389e12,0xbd3e550a,0xbd3f1326,0xbc708b6e,0x3c51d905,0x3c924107,0x3cf45a68,0x3ccde771,0x3cb3d041,0x3ca415c0,0x3c758012,0x3c8ebc1c,0x3c5962bd,0x3c6b017a,0x3c1f1579,0x3c2131fe,0x3bc9af20,0x3bdcd273,0x3b463fa6,0x3ae45cca,0xbaf8120a,0xbb36ebf2, +0xb8d3d726,0xbbcbc827,0xbc538785,0xbc893c91,0xbc9d1f73,0xbcaacfd9,0xbca6c41b,0xbc6f5ea3,0xbc863f96,0xbc95a041,0xbc943300,0xbccb10ca,0xbcf77916,0xbd2d3b85,0xbcd3882b,0xbc5523e5,0xba0a5b8c,0x3bd29d0c,0x3c7817d5,0x3d034ea6,0x3cdd56ad,0x3cc51a19,0x3ca55389,0x3c420a15,0x3c8c31d2, +0x3c771dfb,0x3c6f74e3,0x3c3f5638,0x3c407c0d,0x3c13d49d,0x3c2eb26c,0x3c0d4f26,0x3bd71b89,0x3b9fe8ff,0x3bbf83bd,0x3b1f9319,0xbb1ca7d5,0xba96ffee,0xbc3cd27c,0xbc1fcf08,0xbc295a2a,0xbc348a84,0xbc316f42,0xbc1586bc,0xbc407059,0xbc4b50d2,0xbc604de6,0xbc24338a,0xbba4c211,0xbb8a884b, +0x3bc71c83,0x3c6a0457,0x3ca93705,0x3cc1bce8,0x3c8b140a,0x3c61c5c0,0x3cc57fc7,0x3c916ee6,0x3cb501c2,0x3cb5cd6e,0x3c950122,0x3c508d46,0x3c5e2504,0x3c366bea,0x3c675ecf,0x3bf7626a,0x3c3b9269,0x3bfd8e2e,0x3c5436ee,0x3c00e52f,0x3be4b6d8,0x3ba8beaf,0x3c0a6bad,0xbaa409af,0xbad02614, +0x39f4d6c2,0xba6544d1,0x3ad4db3c,0x3b2386a6,0x3b55368e,0x3b18f0ac,0x3b2700e1,0x3a988e03,0x3bfe2cef,0x3c721a88,0x3cab22ef,0x3cb29e96,0x3cb1dfcd,0x3cbaed3e,0x3c9fec9e,0x3c989123,0x3c9e5c9e,0x3d0339a1,0x3ca36892,0x3c9c3204,0x3ca99314,0x3c8cb682,0x3cc297bd,0x3c947da0,0x3cb0ff3e, +0x3cb038e6,0x3cb14a31,0x3c890440,0x3c97622c,0x3c74de90,0x3c6d5a6c,0x3c96092b,0x3c271d6a,0x3c89b006,0x3c0349ec,0x3c2e6ece,0x3c3a10c3,0x3c546c97,0x3c5ca587,0x3c5ed158,0x3c636e20,0x3c6a754a,0x3c58f9d8,0x3c4c7744,0x3c318153,0x3ba4b941,0x3b59360e,0x3bd905f7,0x3be14319,0x3c3541ae, +0x3c78c509,0x3c29972e,0x3c138e70,0x3c7af78e,0x3cba8c6a,0x3ccb1dab,0x3c69c293,0x3ca2d126,0x3cca8ac9,0x3cd2835f,0x3cc9cf9d,0x3cc121c2,0x3cc8efc6,0x3cd898da,0x3cda63df,0x3c948467,0x3c2e5a88,0x3cbbf8da,0x3c96c1d8,0x3c355d84,0x3bc6acc6,0x3befef42,0x3bf85fd8,0x3bfcad0f,0x3c072b4d, +0x3c0ea72d,0x3c11b86b,0x3c17b913,0x3c10dd81,0x3c1b84fe,0x3c2a389f,0x3c39b78e,0x3c4dfbb3,0x3c4e3df0,0x3c3a7bf2,0x3c3bc847,0x3c3461b1,0x3c92c474,0x3bec00eb,0x3bbe0fca,0x3c3cc768,0xbb1b6a6d,0xbc5512d8,0xbc2a4ca2,0xb913f9d9,0xbc2390e4,0xbc714da7,0xbc72cf65,0xbc6b6499,0xbc37c9a4, +0xbc47ca19,0xbc70a7d1,0xbc460939,0xbc31a245,0xbb364cdb,0xbc2cb5da,0xbc394f41,0xbb49e338,0x3c36c116,0x3be94b41,0x3bf17ff9,0x3bf12c6e,0x3bf7d31d,0x3bf1dc8e,0x3bea9c7b,0x3bd1e6e7,0x3bcba10c,0x3bc67b0b,0x3bce37b0,0x3bcd77ca,0x3bd65b80,0x3bcd4362,0x3bbd2a91,0x3ba6e35e,0x3bc24d71, +0x3bd76fca,0x3ba90e5c,0xbc9ea0f5,0x3b113648,0xbbad3dfb,0xba0fd1dd,0xbb67edc5,0xbb3c33ed,0x3b5d2368,0xbb78615a,0xbb102b67,0xbb9ef020,0x3a5d8fca,0xbb8d21e4,0xbc34f1ef,0x3a6849b7,0xbb6b13dc,0x3ad42ce1,0xbbf6e9a8,0x3bd70797,0x3c2c4052,0x3c12a925,0x3c213e98,0x3c109ac3,0x3c0b48bb, +0x3c199a8f,0x3bc51912,0x3ba56747,0x3bb5f698,0x3bf2f54f,0x3c0452d9,0x3c079571,0x3bf075eb,0x3be59995,0x3ba02f7e,0x3b8fbf68,0x3bfd0156,0x3b6b2869,0xbc1459c7,0x3b925863,0xb9a1a4d2,0xba909ca0,0xbbe18a80,0x3b9fab5f,0xbb97b07e,0x3beed61b,0xbbab7715,0x3c0ab6e2,0xbb468918,0xbab24ee6, +0xbabed4b8,0x3b5f5c4e,0x3b8191bf,0x3aed4d46,0x388b73be,0x3be27e29,0x3c77f1af,0x3c1e6489,0x3c4a9185,0x3c2d736e,0x3c283d93,0x3c25c9e7,0x3b8ca0df,0x3b414db2,0x3b737c0c,0x3bad02dd,0x3bdbb29f,0x3bdd134b,0x3ba55858,0x3b3bfd74,0xb9a8d3fa,0x3b30e439,0x3bccd2ce,0x39840479,0xbc7709b6, +0xbaba87d8,0x3ba58eb2,0x396d305b,0xba0057f7,0x3b443d87,0x3b311171,0x3b7fdc43,0x3ba547bb,0x3b7a9607,0xbb306794,0x3b950c26,0x389d4f18,0x3be36894,0x3c11eb03,0x3c05c893,0x3aeefe35,0x3b6466ca,0x3c91798d,0x3c3a7af1,0x3c5fc610,0x3c4613c1,0x3c40083a,0x3c3bc65f,0x3af50a45,0xba794216, +0x3a281955,0x3bc8a3f6,0x3c0bdf92,0x3c0be28f,0x3ba2d3c9,0x3b847aa9,0x39afba8d,0xbaf36683,0x3be68188,0x3bbdb138,0xbc0b6298,0x3b7016e9,0x3bfe6b19,0x3a07ac44,0x3a497114,0x3b38a60e,0x3b732ffe,0x3b59ca64,0x3b9ec164,0xba28775d,0x3a51528e,0x3a970c48,0x3bf3ca24,0x3c14e28b,0x3c1ea0a1, +0x3c9969fe,0xbb407805,0x3c35277d,0x3c99b669,0x3c4c40c5,0x3c81ba06,0x3c50fcdd,0x3c45c55f,0x3c47d16e,0x3a893fd1,0xbb20d340,0x3a8c5414,0x3b79ebe3,0x3bbfe8dd,0x3b692862,0x39458268,0xbb8db681,0xbbefdb2f,0xbac0b5ef,0x3b597b1b,0x3b3d490f,0xbcde33f2,0xbcb50817,0x3b5353b6,0x3b93f6f4, +0x3c259ff0,0x3ad381b1,0x3b27fa5e,0x38552feb,0xba7df483,0x3b030684,0x3b487797,0xb931bd93,0x3b6e22f6,0x3c0c2de9,0x3bcde241,0x3c8bd8de,0x3be0ae1f,0x3bd8de24,0x3c97c16d,0x3c6d2775,0x3c93ba9a,0x3bbd287d,0x3c19a14a,0x3c8287e3,0x3c88c675,0x3c917335,0x3cc8292d,0x3bf3d91b,0x3c153b5b, +0x3c8d2ca7,0x3ca84d29,0x3cbbb4bd,0x3c6ecce2,0x3c73bf25,0x3cbceaa3,0x3c6893db,0xbcab6023,0x3ba4ff75,0xbc5d17e1,0xbbabe1fa,0xbc05f121,0xbbbe5c68,0xbb2187d1,0xbacb1b11,0xbaaf4d63,0xbaa8d2cf,0xb9dcd8c6,0x3b03d5c4,0x3b7a32d2,0x3bcef0b5,0x3af61227,0x3b705727,0xbb64bb5a,0x3b4b6942, +0x3c4aeeb7,0x3bc1e9db,0x3c2569dc,0x3b8544b0,0x3a6c38f3,0xbbacbbec,0xbc2ae9bf,0xbc098774,0xba04b956,0xbb028741,0xbbf52d33,0xbbd72598,0xbccf845d,0xbcedfb73,0xbc936761,0xba960545,0x3c4f779d,0x3c980e8d,0x3c0951fb,0xb9dc89b3,0xbc25a846,0xbbe4488a,0xbb9ac122,0xbbc47927,0xbb8fbfa2, +0xb79f6a9d,0x3a3bd49a,0x3a795f9a,0x3abaaa60,0x3b28799f,0x3b1a178e,0x39066571,0x394c7bcf,0x3aafa8e8,0x3a853069,0x3c63a91f,0x3c115c81,0x3b4cad06,0x3bbf877d,0x3c075d52,0x3c35d297,0x3bb66df7,0x3c222789,0x3c017047,0x3bfeb35d,0x3bf9400d,0x3c045615,0x3b9c7ef6,0x3b3efdf6,0x3b1666cf, +0x3a9bbbc4,0x3b5bb807,0xbc558742,0xbc83acda,0xbc6b889f,0xbc2de13a,0xbcaf15c1,0xbc14060e,0xbbddaca7,0xbc141abb,0xbbc42711,0xbb3b1a28,0xba5f2719,0x3a707bba,0x3a381155,0x3a84a348,0x3ac68cf3,0x393cd781,0x39f32226,0x3afe4377,0xbabf51e4,0x3bd632fa,0x3c2e82b0,0x3ba72033,0x3b8bfdf1, +0x3c100a97,0x3c0c9cf3,0x3b5245ce,0x3bb4bdfd,0x3af72dcd,0x3b5201e7,0x3b2b254c,0x3bee07db,0x3c2e521f,0x3c1fcd10,0x3c0484dd,0xbb34c774,0xbc3d0fa4,0xbccac7e8,0xbd2a9685,0xbd081b33,0xbc9e6214,0xbc80c157,0xbbffa430,0xbbda6511,0xbbf82986,0xbb6b43bf,0xbb64e071,0xba087e4e,0x399f153e, +0x3a234e02,0x3ab58b9d,0x39d78dc0,0xbaaf1fb9,0xbb4c2fe9,0xbb03a0fd,0xbb796226,0x3c549645,0x3bc9eb31,0x3b8ed2dd,0x3a597cf0,0xbb87b00e,0xbc1aedfa,0xbc408df6,0xbc2b2328,0xbc15dfed,0xbc268e46,0xbc3bd758,0xbc78007b,0xbbf86a63,0xbc8421e8,0xbc98c59c,0xbc3788dd,0xbcc89d1d,0x3b4901cd, +0x3bac6fe3,0x3c589f3e,0x3cdb0cb6,0x3ca45836,0x3cb7813d,0x3c8e0142,0x3b64d30e,0x3ac89c20,0x3a69d94f,0x3acd2f31,0x391c018e,0x39534de2,0xbb469504,0x3a39fa75,0x3b10c506,0x3ada88d4,0x37b8acb3,0xbabf7904,0x3a9e7861,0x3b0f9697,0xbb97344f,0xba15277a,0xbbdc2e17,0xbc1749c7,0xbc09b9eb, +0xbbef2282,0xbc1eac62,0xbc48b845,0xbc2e15e0,0xbbb885dd,0xbb587c3b,0xbc0f8b03,0xbc903571,0xbce815cd,0xbc57687f,0x3cc900c1,0x3caec35d,0x3c818ea0,0x3c9a351e,0x3c8fc880,0x3c74d4fd,0x3c80e611,0x3c92218a,0x3c8a57bd,0x3c3c8f9b,0x3c638dfb,0x3c18d65c,0x3c1a47f0,0x3c287f91,0x3baa17de, +0x3a5aa867,0xbb5bd953,0xbb74b7f3,0xbbdd1061,0xbb2a805b,0xbbacb38a,0xbbe13c05,0xbbccf926,0xbc4e6fd2,0xbc5f13b7,0xbc28bc5f,0xbc2eb481,0xbc3779ad,0xbc4df6f4,0xbc857e96,0xbc9553d0,0xbc91f15f,0xbc364870,0xbb36ae25,0x3c4f5b5f,0x3c881f27,0x3d07c3d8,0x3c8c685b,0x3cab7913,0x3ca2ef2f, +0x3c82bcf0,0x3ca78bc4,0x3c844246,0x3c9ef751,0x3c7c9944,0x3c80c30b,0x3c36fb6a,0x3c32d8ac,0x3c0177ad,0x3c19ccc5,0x3bdb36ec,0x3b7f2899,0xb9994380,0xbab1ba28,0xbb1256cd,0xbbd97c35,0xba2569f2,0xbb808fc7,0xbb65b0f6,0xbbd9f3c1,0xbbe3e583,0xbbd8f7f9,0xbc0489cd,0xbc082e1b,0xbc366bd1, +0xbb86c51d,0x3b328930,0x3c17b7b0,0x3c49224a,0x3c9168b5,0x3ceaf963,0x3cce827f,0x3cbcd85b,0x3cba69e6,0x3c45906c,0x3c83c706,0x3c498018,0x3c4352a0,0x3c6644df,0x3c8986fe,0x3c5875e0,0x3c684a0e,0x3bf96559,0x3c69bf65,0x3c1d499e,0x3c1123d4,0x3bc0ae1b,0x3bf785e7,0x3be523dc,0x3bbc20d0, +0x3954d733,0x3b9a6b1f,0x3beb6eeb,0x3b737997,0x3b78e6e0,0x3b47d4a9,0x3b03afd5,0x3952b088,0x3ab059ea,0x3b09b61e,0x3b08682a,0x3c26eecf,0x3c8cef7c,0x3cc7f00d,0x3cddf005,0x3ce0a3ee,0x3ce61f7a,0x3cc11626,0x3caef610,0x3cbac086,0x3c828820,0x3cbf01fa,0x3ca64ad6,0x3ca5effe,0x3cab9f59, +0x3c8d11cc,0x3ca983b5,0x3c79b330,0x3c68ff01,0x3c3fcb41,0x3c6a0162,0x3c4efc62,0x3c37dd8b,0x3c17b4f9,0x3bf57cd6,0x3c2f0895,0x3bd4b69e,0x3c374af0,0x3c240086,0x3c57bf8b,0x3c6d35c7,0x3c7fcf45,0x3c8b1c34,0x3c93d47a,0x3cabd272,0x3cb78d46,0x3cbad523,0x3cbb1ff9,0x3c9c5540,0x3c99e1fc, +0x3c984ca9,0x3c7d605b,0x3c9758ed,0x3cb17c42,0x3c92ca21,0x3c9a2690,0x3c43a194,0x3bd144dd,0x3bf4fff1,0x3c4c1f0a,0x3bfce12b,0x3bc0093b,0x3b9297fc,0x3bb989f5,0x3bdcbd1a,0x3bc20e2a,0x3b8c41b3,0x3b7c249c,0x3bd31b96,0x3c48c853,0x3bdd11f8,0x3bbf29dc,0x3c27323e,0x3c7e29ac,0x3c77a65e, +0x3c76b69f,0x3c725e49,0x3c75dbf4,0x3c7391e9,0x3c6d0dc2,0x3c72b5c8,0x3c71cda1,0x3c819697,0x3c8ae753,0x3c948be2,0x3ca3deee,0x3ca6b10f,0x3c9e29ac,0x3c9dcdd9,0x3c97a2c4,0x3cd9ddff,0x3bb299d5,0x3b00cce5,0xbb0f7cf7,0x3c32ac19,0x3c796894,0x3bff4274,0x3c140216,0x3c571201,0x3c338058, +0x3c26b67d,0x3c19cae8,0x3c021a1c,0x3bf88575,0x3c04f8d0,0x3be6606f,0x3c68908c,0x3c3ac79d,0x3bd13a82,0x3c6bba36,0x3c3f877f,0xb99b20fb,0x3b2390e8,0x3b27c9a0,0x3b0ce8d2,0x3b0421e5,0x3af08003,0x3afedc09,0x3aafee47,0x3ab1ea80,0x3a9d5c5c,0x3b012c97,0x3b16a0dc,0x3b1dff31,0x3b51af0a, +0x3b434cf9,0x3afdeba5,0x3b0bcf31,0x39b353fb,0x3b6e45f1,0x3c8cf288,0x3bd09547,0x3c598552,0x3bf7a4b2,0x3c18a70e,0x3c031601,0x3b53f4c9,0x3c2e7479,0x3c2c8144,0x3c393c71,0x3bc16d9f,0x3c0586f1,0x3c351fbb,0x3c10b51f,0x3c430f13,0x3c1bf771,0x3c81b649,0x3c09c748,0x3b640556,0x3ba54c8f, +0x3b788d31,0x3b74bd68,0x3b66db59,0x3b9a531f,0x3a4f2e1f,0xb9cfb189,0xba15b14e,0x3b443449,0x3b9cd3d1,0x3b947203,0x3c0ae826,0x3c093523,0x3b7bd9e8,0x3b836631,0xba9e40af,0x3ad1ae89,0x3c4ac08b,0x3bd05767,0x3c84d579,0x3be733e9,0x3c0a0c2b,0x3b90c02a,0x3c0f9d22,0x3b0a17a3,0x3c8430b9, +0x3affc7f4,0x3bb17e28,0x3bed33b4,0x3c0a583e,0x3c0452e4,0x3c31ce27,0x3c48357f,0x3c7404e7,0x3c03d12e,0x3b779cfa,0x3be85213,0x3b88d6e9,0x3b8ab647,0x3b1441e5,0x3b87ee0a,0xbae0eea2,0xbb1d2536,0xbb1fdd9a,0x3b394439,0x3bd40511,0x3bc6c2d8,0x3c460660,0x3c261c31,0x3b0180cd,0x3b73acdc, +0xbb8bc288,0x39fd8a12,0x3c82a159,0x3c3d1eac,0x3c8612f2,0x3baa2cdf,0x3b3f8554,0x3bce3594,0x3b4c0b16,0x3b807054,0x3c07c8e8,0x3a7bf3c7,0x3b8a4dc3,0x393b4951,0x3c03549e,0x3bf021ef,0x3c2d8da3,0x3c5dcc71,0x3c90c44c,0x3c5940c2,0x3ba86704,0x3c051a77,0x3bc4e9bc,0x3bc23120,0x3bb70a17, +0x3c15b3b4,0xbb3b8f06,0xbbccbf58,0xbbfe10f5,0x3b64d77b,0x3c2c1345,0x3bf34235,0x3ca7ce92,0x3c934974,0x3b046186,0x3baebe9f,0xbad4ae66,0xbb02442a,0x3c36170d,0x3be3f8f8,0x3c78caf8,0x3b68701d,0x3a45a9d5,0x3b41aef2,0x3b46c6f7,0x3b8ac73c,0x3b32e523,0xba124bfa,0xbb0b47b1,0x3ae89fd9, +0x3b760fcb,0x3c096e16,0x3c5730e1,0x3bb7bb96,0x3cad24d2,0x3c250ad8,0x3bd95f31,0x3c2d8f12,0x3be92a01,0x3bbb9be2,0x3b7473f7,0x3b971ce7,0xbbddb35d,0xbc1b7857,0xbc0f381e,0x3b599870,0x3c46393c,0x3c1049fd,0x3cb74c4e,0x3c868a4b,0xbafc5cfd,0x3b6547d0,0xbb133eb7,0xbba82e26,0x3c173635, +0x3b8eb287,0x3bd33d44,0x3c3fb248,0x3c3b2b64,0x3bf554f1,0x3b5da087,0xb95c4edf,0xba7fe752,0x3b800e21,0x3b40c9e0,0x398f530b,0x3bb54a80,0x3baed7d8,0x3c7d92af,0x3c5346d8,0x3caf16d3,0x3c216ec8,0x3ac90988,0xba4b8483,0xbc2a118f,0xbae2cfae,0xbaffd73f,0xbba3f035,0xbc10b380,0xbc252ab5, +0xbbfad297,0xbc58730f,0xbbc70ae7,0x3c7d51f0,0x3c8aacf8,0x3c8c3c07,0x3c515c12,0x3bb50054,0xbb9dabbf,0x3ca71712,0x3c5fd5c7,0xbbe52a59,0x3b985c34,0xbb179159,0xbb8da7bd,0xbb1f9e90,0xbb4e7eef,0xb9d8754b,0xba2cbe8c,0xbb2ab434,0xba44baad,0x3a103921,0x3b91c4a8,0x3b300262,0x3bb94771, +0x3b5a840b,0x3c058bd0,0x3c67f698,0x3bde85d4,0x3c2e6034,0x3bf87dab,0x3a8ad660,0xb9d3a60e,0x3a316211,0xb98597c8,0xba65dbaa,0x3ae0d0f5,0x3b5e4673,0x3b6b3f98,0x3c04f671,0xbc239da0,0xbc8cbe91,0xbc4c9033,0xbba544ee,0x3b39659e,0x3c9e0eac,0x3c17eedc,0x3b11af10,0xbb7dc1e8,0xbbca08d6, +0xbb3e00dc,0xbb9eb038,0xbb4a9d25,0xba8c69c6,0x3984137e,0xba499da9,0x3aa30c1f,0x3a7e677d,0x3ba8a771,0x3b8acd28,0x3bc6ace9,0x3ba783a9,0x3c015495,0x3c31e49e,0x3b536091,0x3bacf68d,0x3ba70509,0x3b80feeb,0x3aec8984,0x3ac52feb,0xbb984411,0xbbb6c159,0xbc064841,0xbc17c1f3,0xbb4a3a39, +0x3c694be0,0x3c95a878,0x3c96c7af,0x3bfb5eb0,0x3b6ae682,0xbb23f1d3,0xbc87fdd4,0xbc140119,0xbc295a18,0xbca63da3,0xbbc8ae88,0xbb981195,0xbc030240,0xbbd03710,0xbb91384e,0xba235b71,0x37d89ded,0x3a90cc9c,0x39e01239,0x3a73100e,0x3b7d3f94,0x3b8377a6,0x3a0039ed,0x3bd58c9f,0x3c8eaa24, +0x3b087ab5,0x3b907b1a,0x3b1b256e,0x3b2b9073,0x3abf3255,0x3b21863f,0xba2bd6c7,0xba7efe92,0xbac13732,0xb92fb2a5,0x3acf8034,0x3bc4d5d3,0x3caae290,0x3ccbb6e9,0x3c91701b,0x3bbf6f6b,0x3b87e720,0xbca996f7,0xbcdeef57,0xbcb719b7,0xbc534f4b,0xbc0f97e7,0xbba2e3db,0xbb3e5ab4,0xbb80e5bc, +0xbb3fa671,0x3b1d81a1,0xb9cdabf2,0x3aa90049,0x3a6dac84,0x3b0d51fc,0x3a8cb048,0xb9d5ac50,0xbab483ba,0x3ab4d402,0x3bc3d584,0x3b26c6ec,0x3b226c69,0xbaa80069,0xbb1b51c4,0xbbadd308,0xbb67354f,0x38f28b54,0x3b8dc214,0x3c448b76,0x3c0037a0,0x3b5b7ccd,0xbc46a662,0xba9b5652,0x391085e8, +0x3b5a51c4,0x3c645dbb,0xbba7f477,0x3c573c0c,0x3ce1ae70,0x3cc99b52,0x3ca53bab,0x3c9e36b9,0x3c72c9d5,0xb9cd61bd,0x3b58dfb5,0xb9caa4e9,0x3a93c9cb,0x3a22b782,0x3ab2d16d,0xbb53e9ca,0x3b0099d0,0x3b22f78f,0x3ad76eac,0x3b79776e,0x3bb36810,0x3c16b062,0x3a1da072,0xbad4b532,0xbba761ca, +0xbbbbd3da,0xbb23b913,0x3b97843b,0x3ba89b25,0x3b7cf801,0x3c1e4a67,0xba197d08,0xba0b9fd7,0x3a862b69,0x3bc9e7d9,0x3adc66cd,0xbc99cf4d,0xbbf7d74d,0x3cfd9385,0x3d11d799,0x3d0c5678,0x3cf7f09f,0x3cef822d,0x3cb3f5e6,0x3c937ce1,0x3cb9f3df,0x3c881ebc,0x3c89a5d4,0x3c190d7d,0x3c2cabed, +0x3c07bf9c,0x3c244bcf,0x3be8c90b,0x3b88ea3f,0xba5c64a0,0xbb8af7de,0xbba56975,0xbbbdb1c3,0xbc056940,0xbc07d550,0xbbc8ea6c,0xbbc16816,0xbb97dc93,0xbb510881,0xbbbe62e0,0xbc229952,0xbc586baa,0xbc87ab95,0xbca08bdc,0xbcc3edc3,0xbcc7663c,0xbc6e8d2a,0x3bea625d,0x3ca4935d,0x3cc20643, +0x3d014f93,0x3d0bb240,0x3cfa2cc0,0x3ce491c4,0x3ca0a682,0x3cb9cb51,0x3cb117fe,0x3ca1dce3,0x3c76901f,0x3c5b4ed2,0x3c16f6fa,0x3c1956a9,0x3be550c8,0x3bcfc4a0,0x3b82c8f8,0x3b8af6d5,0x3b579cd6,0x38d5cbba,0x3afc740e,0xbbbef506,0xbbbab1d6,0xbbe82a47,0xbc00ac64,0xbc06f177,0xbc19dacd, +0xbc2571bd,0xbc2dd2b0,0xbc6dbd3b,0xbc274346,0xbbe31b87,0xbb8e488d,0xb89060a4,0x3bd64417,0x3c8b11ef,0x3ca82fb8,0x3c8a56d2,0x3c989a7b,0x3cb75773,0x3c9c78a5,0x3cb2c6b6,0x3cbb36ce,0x3cb0414f,0x3c96e2a2,0x3c92a135,0x3c8198dc,0x3c99cefb,0x3c54b3f4,0x3c37bedd,0x3c11787e,0x3c20474d, +0x3bdbe290,0x3bc6169c,0x3ba18313,0x3c1f1bd5,0x3b47cd9a,0xbad4c273,0xba043b38,0xbb5eea50,0xbb816038,0xbbd0c85e,0xbbef279e,0xbbcd1f3b,0xbba2676c,0xbb2083e9,0x3b69c198,0x3c15605e,0x3c5c6299,0x3c920d84,0x3caac583,0x3cb1586f,0x3ca32859,0x3c9d754a,0x3c9fc796,0x3ce1d319,0x3cb1158c, +0x3cb705e3,0x3cb77263,0x3caa2d03,0x3cb778c7,0x3c9fc986,0x3cb2db92,0x3caac28d,0x3caf6226,0x3c9d4c8f,0x3ca23e18,0x3c99f8ed,0x3c8982f3,0x3c86307f,0x3c218ac4,0x3c43cd78,0x3a0954ef,0x3b20aa91,0x3b9959a9,0x3bd22d56,0x3c0388b2,0x3c2400db,0x3c3de415,0x3c440e0c,0x3c510d05,0x3c4cd629, +0x3c50a592,0x3c3b7db4,0x3c55123a,0x3c570919,0x3c2c62bd,0x3c61d34a,0x3c8da061,0x3c62f74b,0x3c5ab62d,0x3ca2ae3a,0x3cb1b7c2,0x3c918627,0x3ca0b4c1,0x3cb62eb7,0x3ca605bf,0x3ca5f077,0x3c9cdcd6,0x3c93aa74,0x3c9415e3,0x3c959753,0x3c937bae,0x3ca39dc5,0x3c834990,0x3c81eaa5,0x3c9e6877, +0x3c836019,0x3c163396,0x3c309ce7,0x3c2a1b63,0x3c229a22,0x3c1ce5f1,0x3c164481,0x3c12c4df,0x3c1b8a5b,0x3c297b8a,0x3c3db2e7,0x3c53270a,0x3c6029b2,0x3c76e592,0x3c803b7b,0x3c78c206,0x3c7b61ea,0x3c7144aa,0x3cc8abae,0xbb8043d7,0xbb0eb4f5,0xba89eb74,0xbc1f316b,0xbbe516d0,0x3bb8d7b1, +0xbbfd78fa,0xbbddd6fa,0x3aa52c17,0x3b059e08,0x3b65db54,0x3ba354d9,0x3b968777,0x3bae944a,0x3b8fe328,0xbbe8fbda,0xbc0e3036,0x3bdf7c6b,0xbb9c6881,0xbbf3053c,0xb9d7c445,0xbae81632,0xbb25fefb,0xbb248b4b,0xbb264161,0xbb2d9b84,0xbb34df3c,0xbb4fd700,0xbb59764a,0xbb62ed77,0xbb5e4913, +0xbb50fd52,0xbb69011a,0xbb668658,0xbb6788f5,0xbb3cbff2,0xbb324685,0xbb0bbbd4,0xbc00d1ca,0xbbad8ae6,0xba0afde8,0x3b1c1e88,0xbb48b90c,0xbbbde70b,0x38b5195a,0x384f9d66,0xbb860d16,0xb90f5a65,0xbba8ee3a,0xbb479c24,0xbb26b8a7,0x3965deb6,0xbb4abc36,0xbad92638,0xba0c207b,0xbb3c4651, +0xbb9db1d8,0xba915de2,0xbb682e38,0xbb7b0795,0xbb89bdaa,0xbba203dd,0xbbcbbb41,0xbc069498,0xbc16d995,0xbc0fbd8d,0xbbe6862b,0xbbcae746,0xbbfab65b,0xbbe7d980,0xbbc34c18,0xbb7fe7a9,0xbb8d3d5f,0xbaa3bb20,0xbbcd0b4e,0xbc008528,0xbb589c0c,0x3b557ab2,0xbb3b8c83,0xbba67873,0x3a3a47f1, +0xbb5d626c,0x3a2566a1,0xbb51e885,0xbac9d0fe,0xba46d1e7,0xbbb80968,0xbada0eaa,0xba4a87a7,0xba24ec61,0x3b238359,0xba31026a,0x3982423c,0xba5b0f2c,0xbb9680ca,0xbbaf60cc,0xbbb9a436,0xbbcba1e6,0xbc036c8b,0xbc3ea4d5,0xbc480789,0xbc555401,0xbc243439,0xbc1ebfdc,0xbc425268,0xbc3adee5, +0xbc2724f1,0xbbaac95a,0xbbb2c651,0xba9d3b5f,0xbc10d5d0,0xbc072d74,0xba688823,0x3c2cded4,0x38067f5a,0xba0d8a08,0x3ad08025,0x3b04f8c9,0x3b2d182a,0x3c00a2db,0x3b3e9cc5,0xbb512704,0x3acb4958,0x395269ca,0x3b8cd51c,0x3ba3367f,0x3bc0e47c,0x3b3c6dfd,0x3a9550c0,0x3a02bcd0,0xbb73382c, +0xbbdd5c6c,0xbbfe4fa6,0xbc305cfc,0xbc5c1ac0,0xbc9a3998,0xbcae52e7,0xbcaf6cdd,0xbc6ce031,0xbc61590f,0xbc91512a,0xbc816a07,0xbc386f03,0xbb8dacc1,0xbbbb875d,0x3995292f,0xbb8452e1,0xbbef321b,0x391b7796,0x3c354c10,0xba398d98,0xbab10873,0x3b982e90,0x3b32ce30,0x3b2a7654,0x3bef7f3d, +0x3a82a3be,0xb98d817f,0x3aa707cd,0x3b9ebd66,0x3bd03339,0x3bf644c5,0x3c5d9f00,0x3b6d4e69,0x3b6b978f,0x3aa2e84d,0xbbde83e6,0xbc0d949c,0xbc14c1eb,0xbc35302a,0xbc4bb13d,0xbca28c48,0xbcb7cf5d,0xbcaabf92,0xbc880fd4,0xbc846d60,0xbca592bb,0xbcaff3aa,0xbc9502b4,0xbbc44202,0xbbd4d047, +0xbc2f3ddd,0xbc96e45c,0xbcb9186b,0xbc7ca4e8,0xbbe26a14,0x3b9ab269,0x3bfdf427,0x3bcc376c,0x3b243385,0xba4c2564,0xba6ace6b,0x3abf3344,0x3b7693cc,0x3a8fabd0,0x3b830a5c,0x3bc4848f,0x3baaf175,0x3c5a9998,0x3ba25f30,0xbb531c5d,0x3ab8b293,0x3affbfe1,0x3bb5c0ea,0x39ab25f0,0x3ae74133, +0x3c05ed4e,0x3ba77d11,0x3b4ada0b,0xbbd9b34b,0xbc1b45f6,0xbc2c691d,0xbc05e315,0xbbc49b4a,0xbaca380f,0x3b1d5e3e,0xbba379bb,0x3c0c05c4,0x3c9906af,0xbc7ed745,0xbc19e9ec,0xbc05d3fb,0xbbb215b2,0xbb24c86b,0xbbb7b0ce,0xba9cc3ac,0xba54985e,0xbadb45ee,0xbaa053ab,0xba0f05d9,0x3aded1cf, +0x3b18df1f,0x3b59b306,0x3ac48e35,0x3aa83e38,0x3af58291,0x3b125f18,0xbb907b47,0xbc38933b,0xbc7d22a0,0xbc612084,0xbc48dc37,0xbc01ae91,0xbc11fb1f,0xbb8d3295,0xbaa01ac0,0xba9230d3,0xbbd3892f,0xbb52e610,0xbcf50076,0xbd03c4aa,0xbc29aeec,0xbc1aed24,0x39e28977,0x3c263c3e,0x3b2a8692, +0xbb190525,0xbc1d35b9,0xbc043350,0xbbac0bbb,0xbbbc67a2,0xbb73d9d8,0xbae13f3e,0x39e1a428,0xba768945,0x39e43485,0x3b1c3123,0xb75e0836,0x3a514514,0x3b6b9641,0xbaae359e,0xbb179ded,0x3bd6684f,0x3b2178b7,0xbb10cd82,0xbb635de9,0xbc226f89,0xbc3c233d,0xbc54ce3a,0xbc54a551,0xbc2bd68c, +0xbb3d4eaa,0xbb9ad8d0,0xbc2ae2ba,0xbc9e916f,0xbce7a85a,0xbce690c7,0xbcb84776,0xbc178d5f,0xbc5dac83,0xbc852a73,0xbc1ee865,0xbc5d458b,0xbcb24b53,0xbc2722f0,0xbbf41fee,0xbbe1ad23,0xbbdd3bfa,0xbb795736,0xba96a124,0xb99469d9,0x39a4c7bf,0x3a61dede,0x3a9cb531,0xb9bd756e,0x3aa8c436, +0xb94cc701,0xb9a56f09,0x3be2e4bc,0x3bc1bb6b,0xb97a163d,0xbb145f74,0xbc37470a,0xbc852f18,0xbc8a01d7,0xbcbde50d,0xbcb189b2,0xbc5fe7c1,0xbc30f621,0xbc418273,0xbcd3c066,0xbcd49afe,0xbcffbebb,0xbd3dad90,0xbca3266b,0xbcc4b26b,0xbcab09ef,0xbd0faf06,0xbcbe2795,0xbc98f811,0xbc2a6ea8, +0xbb91d958,0xbbb2b128,0xbb58e256,0xbb09e42a,0xb986336c,0xba322c4f,0xb81d7c0a,0x3af352f0,0x384fde9e,0xba8fffa5,0xbac325b7,0xbb461796,0xbb2ebf9f,0x3bdd4d6c,0xb9c78bd3,0xbbc7000b,0xbc453a56,0xbc7603a5,0xbc8716ef,0xbc3644bf,0xbc61626a,0xbc5d1c44,0xbc51ad61,0xbc3ea420,0xbc892366, +0xbc9eac83,0xbd2435c2,0xbd4db05b,0xbd702cbb,0xbd117162,0xbd8bedd6,0xbd227d22,0x3bbb4d16,0xba6af421,0x3c2633fa,0x3ba3a094,0xb99f7c4e,0xbbffe0ba,0xbbae9955,0xbbb31ed5,0xbacc1151,0x3a3bbfd1,0x3adf4708,0xbb69adfd,0x398844b2,0x3ad6f8e8,0x3b8bb1bd,0xbb8eb7c1,0xbbc23875,0x3a643b92, +0xba8cb721,0xbabd3361,0xbbb3688f,0xbc0438a9,0xbc2b3f2c,0xbc7ee857,0xbcb356ca,0xbcc78213,0xbcc68199,0xbcb43d6d,0xbca78c00,0xbcd1002b,0xbcdf1af9,0xbd151038,0xbd677dc5,0xbd840309,0x3ba27b5b,0x3c5a1c4f,0x3cb0fc20,0x3cb8919f,0x3caa7fed,0x3c92641a,0x3c86ff71,0x3c99051b,0x3c87aed7, +0x3c3ded51,0x3c21037a,0x3bdee19d,0x3bf83030,0x3bf73aee,0x3b88952b,0xba89ddf5,0xbba9a016,0xbbbd13e4,0xbbc6484f,0xbacad8cc,0xbbb8fe05,0xbc13d397,0xbc0986f1,0xbc5ad9f1,0xbc64dd91,0xbc59ba49,0xbc3308bf,0xbc2fea2c,0xbc2ba1f7,0xbc609646,0xbcae47e3,0xbd0208cb,0xbd04cdea,0xbcf3b9f6, +0xbc815fe5,0xbba74423,0x3c5a17a1,0x3cacf26c,0x3c978672,0x3ca627c9,0x3c943524,0x3c8ec13e,0x3c8e8583,0x3ca351b1,0x3c8b309d,0x3c83e7ad,0x3c4b8cc4,0x3c3d47af,0x3c02f2e7,0x3bdb357f,0x3b81dd1d,0x3b206190,0xba6d7506,0xbb261451,0xbb79d1f3,0xbb9457e5,0xbbddda55,0xbc076bb6,0xbc194415, +0xbc3bf162,0xbc501cb9,0xbc599404,0xbc78b6c8,0xbc84e1a3,0xbca5b821,0xbc9012cc,0xbc9272e9,0xbcab0588,0xbc74ff12,0xbbe460ce,0x3b698788,0x3c15f97e,0x3c3c9db8,0x3c397c14,0x3c4b3588,0x3c4a7a2b,0x3c5fdc06,0x3c7e56eb,0x3c84a057,0x3c86913d,0x3c66186e,0x3c5a12f2,0x3c20f342,0x3c029fc7, +0x3c030ad2,0x3b6a7318,0x3bb888cc,0x3b38f9e6,0x3b32f3ac,0x3a3496ae,0xba2fa021,0xbb9e6f46,0xbb3983a9,0xbb977bbe,0xbbac1b9c,0xbbda1480,0xbc099d0e,0xbc1b3749,0xbc346000,0xbc5705a2,0xbc79f37d,0xbc4050f4,0xbc0d64dd,0xbbba784d,0x3aceb872,0x3bc14a3d,0x3c1ad7bf,0x3c16e713,0x3c383f40, +0x3c45d6fc,0x3c900c41,0x3c74b4ee,0x3c52534f,0x3c62c56d,0x3c40e901,0x3c89e907,0x3c5f0ea2,0x3c47fc30,0x3c3c06cb,0x3c233067,0x3c0b9c32,0x3c096c89,0x3b718ad7,0x3b267c68,0x3b8699fc,0x38cea890,0x3ad2a62f,0x3b215c59,0x3b690fa1,0x3b6fa9d5,0x3b9d08cb,0x3bb5ae5d,0x3bdffa66,0x3c017762, +0x3c1a0d6b,0x3c3a5921,0x3c3b31dd,0x3c2f39d2,0x3c0c3a15,0x3bd2a40e,0x3bd1c26b,0x3b94bb50,0x3bed0261,0x3c1f0a16,0x3c16e2fc,0x3c0a9029,0x3bd9b90b,0x3c238092,0x3c8c3ff3,0x3beaa16c,0x3c1470a0,0x3c83a558,0x3c84c2c4,0x3c85b046,0x3c87160b,0x3c877c94,0x3c8aed04,0x3c8aa464,0x3bcc8a56, +0x3b9b9a05,0x3c7f6017,0x3be06e0c,0x3b905f2e,0x3bf29269,0x3bdf2bbb,0x3be0d16b,0x3bd9f8ae,0x3bd0c32e,0x3bc5f0b5,0x3bb971b7,0x3baa1b09,0x3ba158e5,0x3ba5b55e,0x3bb3d9d2,0x3bd616fd,0x3bf7e9e9,0x3c10e3a1,0x3c1217c3,0x3c180670,0x3c15c77a,0x3c7afba5,0x3c768ccb,0x3c1c44f8,0x3c3bb0f8, +0x3c694325,0x3bb95298,0xbbb99597,0x3c5550c2,0x3bd6d1fe,0xbb9931aa,0xbbcd0453,0xbbf2af27,0xbbce5bef,0xbbf31185,0xbc229fa8,0xbbfc234e,0x3bdc452c,0x3c540253,0xbc10d73b,0x3b9a1dee,0x3c4591fc,0x3c39b694,0x3c2d9ab9,0x3c3a3cf2,0x3c35156a,0x3c39d77e,0x3c3367cb,0x3c25474b,0x3c2243aa, +0x3c2482f4,0x3c20c00e,0x3c34ad7c,0x3c367da0,0x3c369a30,0x3c400150,0x3c373eca,0x3c172530,0x3c239a78,0x3c1efb51,0x3c7665d0,0x39b37b9b,0x3c16e30a,0x3bfae010,0x3c0757b9,0x3c104367,0x3bafea26,0x3bd468c0,0x3c0da461,0x3bf1da14,0x3c142882,0x3c0f59a4,0x3bac3a1b,0xba805c9f,0x3c2a6f20, +0x3be8113f,0x3c221fd5,0x3c08d6cf,0x3c8e9f6a,0x3c67cab2,0x3c7ce4d6,0x3c806a6c,0x3c76b2f8,0x3c69c269,0x3c6c173b,0x3c422b6a,0x3c3d1473,0x3c3fbbd9,0x3c8a9eeb,0x3c917251,0x3c858e24,0x3c9e5baa,0x3c92fabd,0x3c34337a,0x3c3fd8fa,0x3c1f2895,0x3c506f3e,0x3c1143db,0x3c62779e,0x3c6c57ef, +0x3c02eb11,0x3b8a293f,0x3c22c29f,0x3bb85b9f,0x3c098e1f,0x3c45e867,0x3c3ce352,0x3b51ba89,0x3c1a72fe,0x3be9463b,0x3c248458,0x3c372862,0x3c217e65,0x3c4f4388,0x3c67ad39,0x3c939284,0x3c953374,0x3c9dd98a,0x3c970164,0x3c81ce34,0x3c573961,0x3c23d67e,0x3c2b2e37,0x3c3a5cfd,0x3c967978, +0x3cb1ac0b,0x3c97c06f,0x3cbd46cd,0x3c98c7ef,0x3bef81d1,0x3c3164be,0x3bd7eebc,0x3c0f6fb0,0x3bca8598,0x3c2f4d8f,0x3c965892,0x3b987b2f,0x3ada0f56,0x3c217b44,0x3b780dfb,0x3ba66290,0x3c145b69,0x3b748396,0x3b8a4ad1,0x3b918a74,0x3bd17801,0x3c0ef814,0x3c2f6c76,0x3c68932f,0x3c720cbb, +0x3c7a325e,0x3ca8c42d,0x3ca13110,0x3cbb5c59,0x3cba59e4,0x3cb256d9,0x3c8983db,0x3c282f43,0x3c0e6c5f,0x3c25b347,0x3cc6b24a,0x3cf3bbf2,0x3cba2a95,0x3d03b914,0x3cd1f631,0x3bc405e3,0x3c21ff79,0x3c04be22,0x3c3c711b,0x3c0a58e8,0x3c31a6bf,0x3ca93a0a,0x3ba5013c,0x3a8621b1,0x3bb9ac6d, +0x3b407293,0x3b9c0cfa,0x3c041f57,0x3a8eec0b,0xb9c457a6,0x3b68e27b,0x3bdd93b1,0x3c207166,0x3c380f5a,0x3c5d4046,0x3c609bf2,0x3c8f0165,0x3cb153a9,0x3cc9431d,0x3ce1aeb3,0x3cc94853,0x3ca384dd,0x3c4bea61,0x3bd7a499,0x3be5141c,0x3c15e6ab,0x3ccee4d0,0x3d013e08,0x3cb78b60,0x3d078f5d, +0x3cb0e6f7,0x3aeb8511,0x3beca517,0x3c8bfb65,0x3c6fce41,0x3b74f57d,0xbb4cb012,0xbb3d63ed,0x3bd6a08e,0x3c61de32,0x3c259ef7,0x3bcf0f70,0x3a154e40,0xba40c6eb,0x3b75a01c,0x3b93cf81,0x3ae36c44,0x3bdde2c3,0x3c094ccf,0x3c327aac,0x3c9061bc,0x3ca48b02,0x3ca338a0,0x3ca6d892,0x3c439fc5, +0x3b86ac7f,0x3ba333fa,0x3be29868,0x3b64d3c1,0x3c390724,0x3c50d55a,0x3c36da1d,0x3c819d9a,0x3cc29071,0x3d1a5f59,0x3d0c3ae3,0x3d14eb19,0x3d12b328,0x3ce92363,0x3badef1d,0x3d0e428a,0x3a785fca,0x3a009888,0x3aa9af7b,0x3b94d5d1,0x3916ea1e,0xba4b25b5,0x3a2c780f,0x3aeee31e,0x39a8cddf, +0xba91feda,0xb9eb77a2,0x3b5bb28b,0x3bb5dde2,0x3be32ec5,0x3bf9a98e,0x3ba4e9df,0x3adbd654,0x3c2c62f9,0x3c9065d7,0x3ca172b3,0x3cc9d66f,0x3c4826fe,0x3be4df84,0x3b1e4484,0x3b18d895,0x3bb15a8f,0x3c15bc05,0x3c31fd7f,0x3c1f8056,0x3c2f1eb9,0xbb900cd8,0xbc4b3029,0xbbbf8b57,0xbb49755a, +0x3b83ffca,0x3c8d17a6,0x3c139219,0x3a5d6abc,0xbaba7dc3,0xbbc20b2d,0xbb82b8c5,0xbaf4a26c,0xbab61e1a,0x388602b2,0x39d89656,0x398fc5d8,0x3b1c3198,0x3a87e169,0x3bc30b14,0x3baf4516,0x3c091331,0x3ba03ad5,0x3bf22ee4,0x3c92f7e8,0x3c38273e,0x3c296ba0,0x3c1ddb3c,0x3c548283,0x3c7d59a0, +0x3cad1dcd,0x3c776b8a,0x3c37d780,0x3c16d2d9,0x3c28befe,0x3cb3266a,0x3d0bd7d1,0x3d0c7858,0x3d0312e0,0x3c970314,0x3bd1fab3,0x3c0d70ad,0xbc03efb9,0xbc77ce0e,0xbc1b68ce,0xbca08ca7,0xbc0e2057,0xbbd02f52,0xbb69cdff,0xbb9dfb0f,0xbb626a77,0x3a1b6c15,0x3a5ea30e,0x3ae64236,0x3ac75379, +0x3b23169b,0x3bb9cb93,0x3bdba613,0x3b299cc5,0x3bc9706f,0x3c8da0b5,0x3c1ae101,0x3c129b27,0x3bbb940e,0x3c3bf955,0x3c7b596e,0x3cb8b54b,0x3c9051d0,0x3c67d973,0x3c493910,0x3c7b812e,0x3cbfe9d1,0x3cfa5d85,0x3d3f283d,0x3d4f02db,0x3d2a48d4,0x3caf0f84,0x3cca0f10,0xb986551d,0xbca6f01e, +0xbcabc511,0xbc680e46,0xbbc832b0,0xbb051ac9,0xbb1600ef,0xbaa0140a,0xb8f8d01f,0x3afad9bf,0x39ad7558,0x3a1dbec2,0x3b8a5d6a,0x3b39bc07,0x3aafb88d,0x3a1ed09a,0x3b2281bb,0x3b0af92a,0x3be01b38,0x3c24d0c4,0x3c3ffa3e,0x3c1ce44b,0x3c162cd8,0x3b81ad3f,0x3b1250f7,0x3a91f29a,0x3b571862, +0x3c0b388b,0x3b8ca549,0x3b92c901,0xbb06a408,0x3c5b72ec,0x3c9cc902,0x3d145942,0x3d032038,0xbbfa865b,0xbcca6b0c,0xbc915a76,0x3b69c9a0,0x3b753365,0x3a2b8f69,0xbb1eb4ea,0xbbac62f8,0xbb70f8a0,0xbb8de862,0x3a17fc70,0x3b436ac6,0x3b5b5463,0xb9ec6c34,0x3a8e0ae1,0x3b39043d,0x3bd0bbf4, +0x3b0078e8,0x3b42f6de,0x3bcf436d,0x3baa74ac,0x3aa02b41,0xbb7640e6,0xbb3866c0,0x3a87ccee,0x3c0eaaa4,0x3bce439f,0x3c2e6c85,0x3cad81cf,0x3c86b4df,0x3c93ecd6,0x3cba5449,0x3cfaa862,0x3cda4ecb,0x3c424520,0xbb9d272f,0x3cee97b1,0x3d108241,0x3cd7cd64,0x3cd55895,0x3cde1651,0x3ca986d8, +0x3c98cf03,0x3ca6accc,0x3c981fb8,0x3c8c32fa,0x3c1bc8b7,0x3c216786,0x3c069b62,0x3be1b35c,0x3bc5ff24,0x3b589792,0x3a850232,0xbaf6c638,0xbb922858,0xba60bf2d,0xb69a3277,0x3a746bf2,0x3a9d2c84,0x3b8c79ec,0x3b803e3e,0x3b828c0b,0x3b4d0d73,0xbaa4bb77,0xbc010ee1,0xbbc397e0,0xbbc7dc79, +0xbb2fa2a0,0xbc1b90c0,0xbbfafef1,0x3b46be8a,0x3c917889,0x3cd7e129,0x3cc28188,0x3cf5e749,0x3ce9e62f,0x3ce9c67b,0x3cca478b,0x3cbf5f32,0x3cb44793,0x3ca644e1,0x3c888966,0x3c5d944b,0x3c2d6cdd,0x3c0b1ba7,0x3be65f93,0x3bcf117e,0x3b8354e7,0x3b1f75b5,0x3a5adea3,0xb927003a,0xbb15feef, +0xbb8ee669,0xbbae843f,0xbbebac26,0xbbbbe011,0xbbccec5f,0xbbd964d5,0xbbfac741,0xbc09eee5,0xbc489adf,0xbc090b12,0xbbd8e5ad,0xbb809ba7,0xbb04cbf9,0x3b09f752,0x3c1c4d33,0x3c77125f,0x3c8a7393,0x3cb12fd2,0x3c8948c7,0x3c9b9774,0x3c9806e6,0x3c972793,0x3c9fdad5,0x3ca310b1,0x3c8dafb0, +0x3c8545e7,0x3c84769c,0x3c7bd9a5,0x3c22a554,0x3c2932a5,0x3bbbe029,0x3bcce2cd,0x3b97f7e3,0x3b3dfa83,0x3a4b688b,0x39ffe540,0xbb84242e,0xbb9d2fbd,0xbc05bce8,0xbc231760,0xbc475ee0,0xbc55169c,0xbc27eadc,0xbc0c0431,0xbbba7551,0xbaf5afdf,0x3a61a488,0x3b55dfde,0x3c0cb870,0x3c662483, +0x3c8f422d,0x3c8c419f,0x3c70ced4,0x3c72c1c4,0x3c696761,0x3c888d97,0x3c90bcd6,0x3c8e665c,0x3c953e13,0x3c7db4ca,0x3c818a52,0x3c6d6cdb,0x3c479d80,0x3c3a8385,0x3c3c8e74,0x3c1c096a,0x3c32e122,0x3c1bb8f2,0x3bc5a88a,0x3be38f3f,0x3b83177e,0x3b18b40d,0x3b0d44bd,0x3b47c97b,0x3b794578, +0x3b93efcb,0x3bb04f92,0x3bc1aad5,0x3bea349b,0x3c205fd6,0x3c39bd8c,0x3c5f9d5d,0x3c83bf94,0x3c9e7321,0x3c8f4c23,0x3c54e512,0x3c578751,0x3c77f694,0x3c446751,0x3c4da494,0x3c79fe84,0x3c45314c,0x3bf5e996,0x3c7a5b80,0x3c69ede3,0x3c232921,0x3c0ea461,0x3c06caea,0x3c013fab,0x3be8eff8, +0x3bbfb9b4,0x3bae8af3,0x3c4df1bb,0x3c609a27,0x3bb70063,0x3c3ae10a,0x3c527ec4,0x3c0cd532,0x3c10bd46,0x3c09b29d,0x3bfbbb2d,0x3be2916f,0x3bcff972,0x3bc26960,0x3bd6c489,0x3bfc15b9,0x3c0d2e60,0x3c1b4aa8,0x3c230667,0x3c336b75,0x3c3fc125,0x3c48ad26,0x3c541c18,0x3c4f2956,0x3c9c5af3, +0xbbdefd09,0xbba8078c,0xbc0c345b,0xbbaba998,0x3bcac54d,0x3c896da0,0xbbb7ccc9,0x3b61bf47,0x3c7db78d,0x3c8556ce,0x3c8eddba,0x3c872912,0x3c882e78,0x3c9ea1db,0x3c84c363,0x3b810041,0xbb89f6a1,0x3c91dd71,0x3bea62c3,0xbb157a98,0xbbec7a01,0xbbb18720,0xbbd681ba,0xbbda0459,0xbbe239a3, +0xbbe6555a,0xbbe9aee5,0xbbe88a2f,0xbbe8b345,0xbbeea07a,0xbbe51385,0xbbd95f98,0xbbee9887,0xbbdc20f1,0xbbd32fb0,0xbbb74c25,0xbbc148bf,0xbbcd7e7a,0xbc294fc7,0x3c55479d,0x3a764ae7,0x3c39b333,0xb8a5b965,0xba58f453,0x3ba8a1a8,0xba088748,0x3aec9bac,0x3ba549a5,0x3ab41959,0xbacadacb, +0x3b5163ae,0x3c42acee,0xba502c59,0x3b9ea09d,0x3b0b1311,0x3bf5ed49,0xbbcd5d2f,0xbbcb7e79,0xbbf7e6bd,0xbc146b2c,0xbc15de72,0xbc279978,0xbc4cf5f3,0xbc588520,0xbc633ba3,0xbc605dc4,0xbc3bd823,0xbc2b5797,0xbc4e9ce8,0xbc24ef7e,0xbc0b32e1,0xbbcb4e23,0xbbd3948e,0xbbccbd6a,0xbbd415e0, +0x3b5cbdac,0xbb39e36b,0x3c220acb,0x3a04110c,0x3b056406,0xba0f7c05,0x3b3975d0,0xbb28d632,0x3ba09f72,0xbbc7f4e1,0x3b71f48a,0xbb340583,0x3b207502,0xb7c65b1f,0x3a39444d,0x3bd866af,0x3ba5f781,0x391b7b84,0xbc100ba9,0xbc111434,0xbc4ecf09,0xbc490224,0xbc60cbe6,0xbc8358f6,0xbc8d753f, +0xbc87e71c,0xbc930df1,0xbc5f3941,0xbc55177a,0xbc841d46,0xbc489b79,0xbc2119e8,0xbba51a4a,0xbbd780d2,0xbbdb48a8,0xbc033545,0x3bbe3d3f,0x3bb07e8d,0x3c75cf75,0x3b2554d5,0x3aad8a64,0x3b0a5374,0x3b139f2e,0x3b18b20e,0x3c0bb3ba,0x3ad62988,0xb8690ebc,0xba3a28ba,0x3b71ee1c,0x3b635894, +0x3b61b524,0x3be1e8b8,0x3c123484,0x3b9ce7fb,0xbc03ab7e,0xbc03a091,0xbc6c4c5f,0xbc7c4d54,0xbca1fb37,0xbcbf8256,0xbcd0b32d,0xbcd87296,0xbcdd5267,0xbc9c5280,0xbc9415a4,0xbcc1d11e,0xbc8056ea,0xbc1ffe65,0xbba7802c,0xbb90c81a,0xbb6d7547,0xbb7d16ad,0x3b680758,0x3b5c6374,0x3c658ed9, +0x3a34597f,0xba6f68da,0x3bc5d519,0x3b4696c8,0x3b4326ff,0x3bf0826b,0x3af6ce01,0xba8c6d65,0x3b1a4bc0,0x3b5e343e,0x3bae7bdb,0x3becb564,0x3bdf0a45,0x3c69bb2d,0x3b23955d,0xbc014ddb,0xbc4cc379,0xbc95b856,0xbc94e855,0xbcb125ea,0xbcc74c33,0xbce22f4a,0xbcdee7bd,0xbcda5d78,0xbca8ef1b, +0xbc9343db,0xbcbd15b1,0xbc899a3a,0xbc477225,0xbb5f42b2,0xbbc6e101,0xbc890d80,0xbcc394a7,0xbc065421,0xbbc73a81,0xbc0a9aa2,0x3c057387,0x3c0a3fb4,0x3c1f485f,0x3b6a03a9,0xba95a863,0xbac36389,0x3ae43ee8,0x3b8a73af,0x3aef71e0,0x3bcc4bc8,0x3b9875ad,0x3c0ca3ec,0x3c003537,0x3c07bfef, +0x3988dee0,0xbc268ce6,0xbc0e137a,0xbc0b4445,0xbba5965c,0xbbc19ea3,0xbb1cc528,0xbc0eef70,0xbc344f32,0xbcc14ae1,0xbc6fd580,0xbc960c1f,0xbcc69514,0xbc9560f8,0xbc30b5a8,0x3b9550d4,0xbc39b121,0xbc18f1b0,0x3ca53d95,0x3aaa97ea,0xbc878b4b,0x3a8bde85,0xbbcab20f,0x3a44fd1d,0xba9f320c, +0x3a32b829,0x3b11bf92,0xb9c6270b,0xba20df46,0xb98e4a85,0x3b24608d,0x3aeb8673,0x3ac48c42,0x3b5bdb06,0x3b008796,0x3c052b6f,0x3b9b12c1,0xbc45612a,0xbc76d2c2,0xbcd8230a,0xbc9292b2,0xbc4f9d58,0xbb45c1df,0xba2f517b,0x3b3baa06,0x3b0b1a92,0xbb36ab7d,0xbafd8e83,0x3c0be3e5,0xbc813bac, +0xbcad1aab,0xbc00bab1,0xbc65be60,0xbbb1fbbf,0x3b984763,0xbb6796bd,0xbb8a9792,0xbbd900c3,0xbc151f4f,0xbbe60079,0xbb74d440,0xbb0879aa,0xbb11407f,0x3948a521,0xba85aaea,0x3a8595da,0x3add1dad,0x39cb5d54,0x3b593a53,0x3bb06385,0xb8d74e58,0x388fd1cb,0x3aaee8cf,0xbb290ccf,0xbb7c6e29, +0xbc0ebd38,0xbc73ab8f,0xbc99ac69,0xbc970e4f,0xbcac5d6d,0xbc86878b,0xbbc97380,0xbc40ec7e,0xbc8e0cd5,0xbca6614c,0xbceb0b61,0xbcde79c6,0xbcc6226c,0xbc3c3bb7,0xbc0e8d8b,0xbbe8e180,0xbb86920d,0xbc4a2118,0xbc7df241,0xbc222d75,0xbc08dc2e,0xbb80545e,0xbbc1cfdc,0xbb771508,0xba7c642e, +0xba308d59,0x3a5c05e7,0x3a500f60,0x3aef843c,0x3ac43f9b,0x3b1f5e5d,0xb9afd7e7,0x3b5c1591,0x3bb01d0c,0xba8c7b60,0xbb083389,0xbbaee56a,0xbc5c600b,0xbc9b062b,0xbcb5e554,0xbcefc4d8,0xbccff47e,0xbc86de90,0xbc91f421,0xbcb991a8,0xbd03e5c7,0xbd126967,0xbd14e060,0xbd2d8036,0xbc8815c6, +0xbca07299,0x3ab3435d,0xbcadca56,0xbca0da83,0xbc68b8d4,0xbc44ce88,0xbb66d2c8,0xbae5bd14,0xbb0b11a3,0x3992c8ae,0x3aa3cdc2,0xbaa9e786,0xb964b9cd,0x3b21c0bb,0x3a9f01b2,0x3a949d28,0x3a8de9f2,0x39eb9b6f,0x3b32c615,0xba63521b,0xbb7fc732,0xbc162a01,0xbc71811c,0xbc24c5c9,0xbbfdad0a, +0xbbb2f32a,0xbc30273e,0xbc31506d,0xbbb73faf,0xbc0880c7,0xbc47936b,0xbc936b6d,0xbd2511f9,0xbd5588b9,0xbd6fd3ab,0xbd0819b6,0xbda17771,0xbd5b2d28,0xbaef3f63,0xbc8a475d,0x3aa8a58a,0xbbe6e55b,0xbc38f314,0xbc3b42c4,0xbc08dd44,0xbc1cadca,0xbb34187e,0x3a9dc4b2,0x3b541c8e,0xba95958c, +0x389658c9,0x3a2de723,0x3b651793,0xbb1ecc30,0xbb11b18a,0x3b51d453,0x3a922627,0x3b87d162,0xbb79441e,0xbbe24d77,0xbc3aadb4,0xbc8d3457,0xbc95abea,0xbc99076c,0xbcc8abbb,0xbca002da,0xbcac36fb,0xbcecadfc,0xbd0475cd,0xbd180b43,0xbd411409,0xbd805bb4,0xbc4ebefe,0x3b89fa3e,0x3cadb62a, +0x3ca02a06,0x3c979a80,0x3c8c3719,0x3c61637e,0x3c8b993c,0x3c65b537,0x3c5d2d89,0x3bd089e2,0x3bc1d1e3,0x3b8663d4,0x3b39f5b8,0x3b470f4a,0x3a211481,0xba875630,0xbb2c9310,0xba87c38d,0xbadb6e0c,0xbba175bd,0xbc06df7a,0xbc201c18,0xbc12f0f2,0xbc212b77,0xbc107cb9,0xbc00e2a8,0xbc104359, +0xbc16601f,0xbc29adf5,0xbc94f910,0xbd02adbb,0xbd0beed1,0xbd120937,0xbd06e6e4,0xbcaacb73,0xbb6af3b9,0x3cc19c76,0x3c8eeb01,0x3ca7d001,0x3cb45733,0x3c6c2ce1,0x3c993e2d,0x3c8dedd3,0x3c8795b7,0x3c5d2fc7,0x3c4b80b4,0x3c2ce56f,0x3c1cc358,0x3bcbe5b7,0x3b8ceb2b,0x3b64f122,0x3aeba3bd, +0xbb00ac67,0xbbb294bd,0xbba258f4,0xbc50855c,0xbc4c43cb,0xbc721f69,0xbc68f99e,0xbc80a713,0xbc78f50d,0xbc992b19,0xbca3732a,0xbcbca4bd,0xbcbde4da,0xbcd7eea2,0xbd0a1be2,0xbcd599f6,0xbc99479d,0xbc62aad0,0xbafb98cd,0x3ba890bc,0x3bbb3fe9,0x3c8ec6a3,0x3c5e5c29,0x3ca107da,0x3cab75e6, +0x3c949f67,0x3c682d4d,0x3c60db75,0x3c364cec,0x3c49b6f9,0x3b84c6d6,0x3c04933c,0x3b4e2221,0x3be54169,0x3ae06465,0x39e45497,0xbaf8221f,0xbb0a574a,0xbc2a204c,0xbc30c119,0xbc2cc72b,0xbc53c95e,0xbc5b60dc,0xbc6b48ba,0xbc6d001b,0xbc8c4e8b,0xbca62816,0xbcbfbb2f,0xbcb8c9bc,0xbcb55a8d, +0xbcb22f00,0xbc6c21f6,0xbc044314,0xbb1de4b2,0x3aa9f402,0x3a8f1d5b,0x3ad5657f,0x3c807623,0x3b8ebea1,0x3b74b874,0x3bcd4116,0x3b4a1e9f,0x3c60476a,0x3bb86965,0x3c0c0326,0x3bf74f57,0x3be71012,0x3af2bafe,0x3b173dfc,0xba9f2e31,0xba0ce9b9,0x3b74eaa6,0xbb36dfdd,0x3b8c7e12,0x3a1c272b, +0x3b0c8358,0xb9f75fba,0xb79df9ac,0xba85219d,0xbae1fa3f,0xbaf30ae5,0xbb0d7651,0xb99d564a,0xba19b4d9,0xbafdde58,0xbb336797,0xbbb8ab79,0xbb95654a,0xbb98f30c,0xbb5a1032,0xbadb7bf8,0xba181520,0xbb0c3371,0x3b234f81,0x3c3e65a4,0x3c9b92d3,0x3b214c65,0x3c10250d,0x3c9aeb25,0x3ca2af00, +0x3c97eac8,0x3c8fabd1,0x3c94bbd3,0x3ca3078d,0x3ca2dda8,0x3bbc83cd,0xbab55722,0x3c830473,0x3bd1ee3e,0xba5ced5b,0xbb4faccc,0xbb5d28b5,0xbb66efcf,0xbb7f1a88,0xbb8c4a50,0xbb8d25ec,0xbb939904,0xbbad264b,0xbbb83e83,0xbbc930ce,0xbbcc3781,0xbbb073eb,0xbbaceb3e,0xbb7203fe,0xbb2f3ea5, +0xbada2239,0xba87275a,0xba56b74a,0x3c61af63,0x3c2121cc,0x3c771af6,0x3be9c3d4,0xbba2ef2d,0xbc1d3083,0x3bf22406,0xbb2d86a9,0xbc43f730,0xbc53e155,0xbc5a4ddf,0xbc3020b6,0xbc42103d,0xbc73bffc,0xbc418620,0xbb56e690,0x3bb3494c,0xbc4461b7,0xbba18dda,0x3b9ce1ef,0x3c68cf20,0x3c331a40, +0x3c3c429d,0x3c39dd5a,0x3c403fb7,0x3c39f22d,0x3c27bc15,0x3c280f89,0x3c285ab2,0x3c246210,0x3c34b258,0x3c34b351,0x3c32a28b,0x3c350b47,0x3c2de839,0x3c16dd59,0x3c2531df,0x3c4160ef,0x3c664134,0xbc35eaed,0x3bf7bde9,0x3acfa863,0x3b908994,0x3b44508c,0x3abfbdc8,0x3bcbfe55,0x3b290a20, +0x3b06e36e,0x3b167e7f,0x3bccf91c,0x3a1f0b23,0xbc011ff7,0x3bc3d773,0x3a073275,0x3bc2f086,0xba3acb18,0x3c6e9671,0x3c75b3d7,0x3c6f73d7,0x3c7baff0,0x3c6bb4f6,0x3c581a03,0x3c4800b2,0x3c385c9e,0x3c3c9a40,0x3c47ad74,0x3c83edf3,0x3c8540ab,0x3c75b000,0x3c80f727,0x3c706da3,0x3c26185b, +0x3c332f81,0x3c5a9e59,0x3c5cc30a,0x3afc330c,0x3c4fff47,0x3c018ef1,0x3b8fc0e1,0xbaebeef3,0x3c164452,0x3a319dbb,0x3c220464,0x3b25e447,0x3c52d81a,0x3a60daef,0x3ba5d67f,0x3b33e19b,0x3bd96423,0x3bd5ba2d,0x3ba9292b,0x3bc654fc,0x3c5c8d40,0x3ca1ac95,0x3c859cb1,0x3c99f421,0x3c8ed1e4, +0x3c7ec4f4,0x3c2f713b,0x3c1bc61d,0x3c27c47d,0x3c3624a9,0x3c8691a4,0x3c959e7c,0x3c74bde4,0x3c84baeb,0x3c55298b,0x3bc7e5b5,0x3c243cc7,0x3c59bfe1,0x3c2fe223,0xbb1dd705,0x3befe557,0x3c79a3b8,0x3b4090c2,0x3a07478e,0x3c042766,0x3b7b69e9,0x3ba432fe,0x3bf74302,0x3bb46374,0x3b069600, +0x3bbfbf0d,0x3b4113a1,0x3beceae8,0x3bf018ff,0x3c2f7362,0x3c00f13a,0x3c3eef49,0x3cba12ee,0x3c927b41,0x3cad4e3b,0x3ca79293,0x3c94542c,0x3c1cf31b,0x3c019ef9,0x3c0571d1,0x3c47b409,0x3cacdec5,0x3cc16082,0x3c9adf34,0x3ca5228f,0x3c866a7d,0x3bad3431,0x3c0a7a61,0x3c69c5f9,0x3c9013e0, +0x3b9da5be,0x3c49febe,0x3ca4e4ae,0x3b8a0df0,0x3a2b2e7f,0x3bdb54a9,0x3b6b04ad,0x3b9996d4,0x3c2e93ab,0x3b21744d,0x3ad1f2e4,0x3b7e2761,0x3c015917,0x3c0b4ef3,0x3bed727e,0x3c910929,0x3ba54cd0,0x3c98db65,0x3cc14f00,0x3cad5754,0x3ccea350,0x3cb5f761,0x3c927003,0x3c113538,0x3bc2fd6d, +0x3c01d1e8,0x3c28f212,0x3cad62d1,0x3cc00967,0x3c71564c,0x3c95e26f,0x3c228a11,0x3a88854b,0x3bd22e22,0x3c80cf3e,0x3c5fae36,0xbc3bae29,0xbc6f4c4b,0xbc37f1a1,0x3b497faf,0x3c61bda6,0x3c2b495a,0x3c032b2e,0x3a662d05,0xbac8aec4,0x3b288412,0x3ba79d92,0x3b1c8e6d,0x3bfb5d8e,0x3c1dc905, +0x3bca4910,0x3c70672d,0x3c2f9203,0x3c91bc9e,0x3ca73c66,0x3c61ffbc,0x3c72989b,0x3be4b459,0x3c1d6712,0x3c0b23a0,0x3cafe677,0x3cbe0661,0x3c5877e6,0x3cdb6f9b,0x3cfa6828,0x3cdb252f,0x3ce28589,0x3d0b2174,0x3d28f8da,0x3d0242d7,0x3c5f8eaf,0x3d01b9e7,0xbc25c997,0x3b6ebe86,0xbb240578, +0x3ab112b7,0xbaacd7f8,0x37ee5806,0x3b20ef77,0x3b581b25,0x3b056291,0x3a02b068,0xb718eb9e,0x3b9ed3ba,0x3b89ca49,0x3c059139,0x3be80adb,0x3be04ad3,0xba0bb1b9,0x3bab88c8,0x3c8a3431,0x3c6ce3a9,0x3ca4912d,0x3c42c4ed,0x3c075b19,0x3b81daf4,0x3b12386a,0x3bd67239,0x3c436f16,0x3bf4f16a, +0x3bc44459,0x3c13ef5c,0xbba88b9d,0xbc3370ca,0xbbc1e7f0,0xbb3c7c8f,0x3b17bdf8,0x3c3d44b0,0x3bb8a340,0xba865774,0xbaae897c,0xbbdc6dbf,0xbbea224e,0xba606cb3,0xba97810a,0x3a0970a9,0x3a739cad,0x3aedcad8,0x3b5ae8d9,0x3ac3431b,0x3b8ddd8e,0x3bac2b75,0x3bbe3731,0x3b67825e,0x3b967760, +0x3c786b93,0x3c4de6e2,0x3c224aec,0x3c112567,0x3c68d1d3,0x3c8bec17,0x3c981cfb,0x3c8ca0c1,0x3c6cd31d,0x3c942cea,0x3c96c7f5,0x3cd4d28a,0x3ce3d68c,0x3ca4df10,0x3c857d30,0x3c0e1581,0x3a09c574,0x3b8a44a4,0xbab71118,0xbc446586,0xbbd8a5e3,0xbc634990,0xbc0df031,0xbbdcba4f,0xb98c1d47, +0xbb50851e,0xbb0c0938,0x3a6261c2,0x3aba4231,0x3b1a7cc7,0x3ae6a18e,0x3b76b538,0x3bab25dd,0x3bbd068c,0x3b88be17,0x3b4abf02,0x3c010ec1,0x3c529c3d,0x3c3061d5,0x3c00c366,0x3c74a935,0x3c8f2f15,0x3c95ef5d,0x3c6ac245,0x3c266de2,0x3c6285da,0x3c5d871c,0x3ca81c6a,0x3ce50814,0x3cf18cdc, +0x3d00c919,0x3cd45fc2,0x3c39abca,0x3c503dd2,0xb9481220,0xbc4a9e8b,0xbc7722ee,0xbc4b0723,0xbbd061af,0xbade28ab,0xba93d00b,0x3a3a56b9,0x3b0715b9,0x3b0671d5,0x3a23d346,0x39c119c8,0x3ba8d05c,0x3b55ae08,0x3b38d838,0x3b402711,0x3bc5d51d,0x3b400927,0x3bdb3137,0x3c42eb5f,0x3c52d7bd, +0x3c45861f,0x3c27ea4b,0x3bc9e27b,0x3b3873c3,0xbb2efaa6,0xbb19f3e9,0x392ca6af,0xbb974499,0xbb82ac7d,0x39e3f416,0x3b9d3e14,0x3c0b030c,0x3cce4ba0,0x3c4f95fc,0xbc359699,0xbd3cd2be,0xbd283c26,0xbc6d7c95,0xbc01205a,0xbc4ef4de,0xbc717f2c,0xbbfee241,0xbc183957,0xbc08a339,0xbb0075f8, +0x3b2036f4,0x3b85c06f,0x3b17d4ae,0x3a655cae,0x3b0dfd8b,0x3bc719ec,0x39a7076e,0x3a6cf3a4,0x3b5945ae,0x3bdc5c9d,0x3ae1c111,0xb9eae3ba,0xbb315b8f,0xbada69e0,0x3aebddfd,0x3ba7c114,0x3bee966a,0x3bbe3021,0x3c3e65eb,0x3c505d40,0x3c661fad,0x3c5b7a37,0x3c1be895,0x3bdbe136,0xbc1c0b76, +0x3b5e9c4b,0x3c218bd7,0x3bd1b98b,0x3c27f73b,0x3c3daccc,0x3c396be1,0x3c4c3811,0x3c6d6da3,0x3c6e7db2,0x3c4e4aa0,0x3c1372b1,0x3bee7e96,0x3bbddfda,0x3b87a705,0x3b98e672,0x3b51113e,0x3b63441d,0x3a9efeb5,0xbb1ca4a1,0x3ac2e069,0x3b847de0,0x3b921f0e,0x3b8fa213,0x3b80983e,0x3adc630a, +0x3ab5a041,0x3a58ad62,0xbab5b9ea,0xbbb8b9b9,0xba987f5e,0x395444ec,0x3bc4abf3,0xba6cfbf4,0xbba0ed06,0xbbe01f41,0xbaf398e6,0x3c641121,0x3c326faf,0x3c7a4bdf,0x3c90fb74,0x3ca86872,0x3caf98e7,0x3c971a60,0x3c9156fc,0x3c80cfd5,0x3c675f19,0x3c35bebf,0x3c2ae165,0x3c03c551,0x3bf85d84, +0x3bcebc23,0x3b89ff64,0x398cfbcd,0xbaf1f691,0xbb2b5026,0xbbe828b0,0xbb1f3461,0xbbb5b960,0xbbe1baaf,0xbbe7a816,0xbc05f350,0xbc096bfa,0xbc1bb792,0xbc1ac7bc,0xbc3ccfea,0xbc0e6558,0xbc00aad2,0xbbde60cf,0xbbc4ef38,0xbb8f3445,0xbaa50291,0x3b65e0b6,0x3c5173f9,0x3c8f4073,0x3c3b3757, +0x3c801332,0x3c747dc2,0x3c5fa85e,0x3c6e3021,0x3c842774,0x3c57149d,0x3c559ae1,0x3c1a740b,0x3c4abcc8,0x3c00f098,0x3c0d7e49,0x3b2c75bf,0x3b8d1bf1,0x3aff679a,0x3a144391,0xbbdc93cd,0xbae05003,0xbb5ed96b,0xbbcdc83a,0xbc0f4422,0xbc2d7b36,0xbc4664d9,0xbc5e655b,0xbc3d633e,0xbc3813ff, +0xbc2502bb,0xbc136036,0xbc15f283,0xbc0bfdec,0xbb6d6a9a,0x3afc31e2,0x3bcf1bd8,0x3c15b172,0x3b8ec6d2,0x3ba571f7,0x3901235e,0x3bb49298,0x3b969472,0x3bb95dd3,0x3bf327c1,0x3bb60467,0x3bdd3f5e,0x3b673734,0x3abf0e6d,0xb9b332b3,0x3a83edbe,0xbae533cb,0x39c32ae5,0x396861bf,0xbb02843b, +0x3b5a28d6,0x38999b55,0x3b9dbdea,0x3b24f9f4,0x3b06457a,0x3ad3f392,0x3a010531,0xb9b5d9d0,0xba6b6149,0x3967b44f,0x3b433093,0x3b8edb34,0x3bca6f88,0x3c161946,0x3c2bdfc7,0x3c1598cb,0x3bceca64,0x3bad5c96,0x3bb8414c,0x3bb2283d,0x3bd585f3,0x3b7b08d3,0xba0c1b2e,0xbac0c4aa,0x3b8fe01b, +0x3a66ba82,0xbab2fd99,0xbb3894ad,0xbb3449cc,0xbb22428f,0xbb66afcc,0xbbacc7b3,0xbbc4b8fa,0xb9df691b,0x3b7a8916,0xbb84f5db,0xbae7c269,0x3b070661,0x3b53ed67,0x3b219b36,0x3b01ab87,0x3aa9b379,0x3a4bc1cc,0x39f60178,0x37393c24,0x39079144,0x3a45e5cc,0x3a7c4015,0x3a8ce077,0x3aad6af5, +0x3acff533,0x3b2a8d83,0x3b738919,0x3b9b57a5,0x3bab9ece,0x3b9cc3d1,0xb9a21e47,0xbabba8fa,0xbbc9b3b0,0x3b9d0bfa,0x3c6a494b,0x3c737842,0x3b3820b7,0x3c34feb3,0x3c87869a,0x3c88655b,0x3c88b7ff,0x3c714072,0x3c74ab2a,0x3c8b3d16,0x3c6caa12,0x3c4331e5,0x3ba9d60a,0x3c6b9925,0x3c607bea, +0x3bd3f4d9,0xbb9130e2,0xbacef1fe,0xbb1010d8,0xbb2395ce,0xbb3222ad,0xbb3e9587,0xbb4de7cf,0xbb461e56,0xbb436d54,0xbb4e2b76,0xbb254222,0xbb0f384b,0xbb275709,0xbaeed4f0,0xbad368c0,0xbad0a882,0xbaee8025,0xbb0ef536,0xbaf2afe6,0x3caba448,0x3ba2861e,0x3c6f9674,0x3b9c6215,0x3bc4ac1e, +0x3c031f9f,0x3afdebef,0x3c082a76,0x3c107b4f,0x3c0de5ed,0x3b67215f,0x3bf83b96,0x3c675a0a,0x3b9acaee,0x3c1f1247,0x3bd5420c,0x3c695c09,0x3b027351,0xbadbae5a,0xbab013b5,0xbb43e20c,0xbb496c32,0xbb869198,0xbbb7d059,0xbbcc28d3,0xbbd32408,0xbbcf472c,0xbb7a4d65,0xbb399d74,0xbb86f403, +0xba962139,0xb997b472,0xba1900ee,0xb9995f6a,0xbb3ae1fa,0x38b8ec49,0x3c5508d5,0x3b6f9db0,0x3c6b1697,0x3ba6a8ee,0x3beda5d6,0x3aea6e30,0x3c070054,0x394adb62,0x3c4315b5,0xbae94d26,0x3bdd1f48,0x3b6d64d1,0x3bd330c7,0x3b7a833d,0x3bb808b5,0x3c21cdc6,0x3c3af98f,0x3bc154e9,0xbb5b7b1f, +0xba624800,0xbb9f2d7e,0xbb95f711,0xbbdaa934,0xbc0cb511,0xbc18a0e1,0xbc0abe49,0xbc1983de,0xbb92deff,0xbb38508b,0xbba1f581,0x37aeb5c8,0x3a8a253d,0x3a1054d4,0x392f037c,0xbb53d3c1,0x3a113c10,0x3c9644ad,0x3c4419dd,0x3c876e17,0x3b96aa60,0x3b307de9,0x3b8ead0f,0x3b62320a,0x3b746328, +0x3c00120d,0x3b095cff,0x3b8cd25b,0xba14f305,0x3bd9145d,0x3b8abe68,0x3b9e352a,0x3c1ac1bc,0x3c6d219f,0x3c433587,0xbb199b72,0xb8873518,0xbba28919,0xbbb24b9f,0xbc143b5b,0xbc44646b,0xbc655843,0xbc66ab12,0xbc665789,0xbbdfb159,0xbb783f04,0xbbfd32b5,0x3ab1660b,0x3b782d79,0x3a3bccfa, +0x3b641e5f,0xba539724,0x3a91a646,0x3c72c8c1,0x3c1807b2,0x3c889210,0x3b49c3ad,0xb9527893,0x3bb47624,0x3b765cca,0x3b94c5b3,0x3bdefe01,0x3b21c45a,0xba073e02,0x3b46e566,0x3b64711b,0x3bb04ab7,0x3bfb7444,0x3b80ffbc,0x3ca9a5df,0x3c1b4f86,0xbab9f8ad,0xba7459bd,0xbbd017ec,0xbbe3b982, +0xbc2e20b2,0xbc6dfbcd,0xbc8a9c52,0xbc804ba8,0xbc853399,0xbbe363d0,0xbb173cb7,0xbbd1cde1,0x3b789ad5,0x3b89a3d2,0x3ae51398,0x3ab03594,0xbbcc810b,0xbc53fcd2,0x3b96525d,0xb72f92f3,0xbc1cda9e,0x3c0d7037,0x3c308116,0x3c52193e,0x3be69428,0x398821e9,0xbb1d05e6,0x3b220dd1,0x3b85bc3a, +0x3b1c4dd6,0x3c081206,0x3ba662a2,0x3c3c801a,0x3b897819,0x3c3a7ace,0x3bd610c9,0xbc12c375,0xbbfc0a2f,0xbc320269,0xbba05f43,0xbbd07db1,0xbc107f3d,0xbbc41170,0xbbff2118,0xbccb497e,0xbc0bfe3b,0xbc08ee31,0xbc456d87,0xbbdde4c7,0x3aa7ad8c,0x3c976f6f,0x3b115ad7,0xbc8acf81,0x3c86c633, +0x3c8b57c6,0xbc217979,0x3c1d1bb3,0xbb8b8c05,0xbab00746,0x3abaf0b8,0x3a7bbf1f,0x3b6a59da,0x3b129aa9,0x3960aa38,0x39b2cc7a,0x3b393220,0x3b15e7c5,0x3b0c894e,0x3bdda982,0x3bb1920f,0x3c43e6f8,0x3c1a8d65,0xbb563dd7,0xbaa25a70,0xbc279dc2,0xbbb0560c,0xbb14c3f3,0x3b819c1a,0x3bc053b3, +0x3bcd6b8e,0x3b58bf7a,0x39ed6b1c,0x3b6c11bb,0x3c37c7e5,0xba5d5737,0xbbec8882,0xbc018223,0xbc4e4635,0xbc1fa968,0x3b53be77,0xbab5c282,0xbab1ada6,0xb9e7fd7f,0xbbe5619b,0xbbf164a9,0xbab99f73,0xba8cb631,0xbaab9701,0x3a7ec9be,0x39d3f609,0x3b1bfa11,0x3a91ef46,0x3b381e2c,0x3bd10749, +0x3bc8cfab,0x3b87a58d,0x3bb509b9,0x3ab4a1dd,0x39c12cde,0x3b3d824e,0xbb21f12d,0xbbb2d41f,0xbc18bfdf,0xbbf4b3cf,0xbc438165,0xbc2905b7,0xbbb23d38,0xbbf5ac2a,0xbbb5f927,0x3b486d96,0xbb6c9095,0xbbb2ba6f,0xbc3c2bd9,0xbc13994f,0xbb24f2c2,0xbb2398a3,0xba13de13,0xbbd2d067,0xbbffa49b, +0xbbd64058,0xbbc1b693,0x39a6b608,0xbb66d278,0xbb3434a6,0xb7983f7a,0x3973041e,0x3b050f40,0x3a5eb798,0x3b2befdd,0x3b9e61b3,0x3b969973,0x3af42b63,0x3bd56175,0x3bd29fb0,0x3a18b6f9,0x3b839b85,0x3a119f18,0xbb29f090,0xbbb519cb,0xbc00732a,0xbc609bc6,0xbc3e330a,0xbbb7ade2,0xbc06c7e8, +0xbc32d82b,0xbc25bf9d,0xbc2b211c,0xbbdbcfed,0xbbcf333c,0xbb18f9bf,0xbb88a4a9,0x3ab3e561,0xbbf19912,0xbc4c1445,0xbc019811,0xbc2bf067,0xbb65951c,0x3b26c3ee,0xb9ab1c4c,0x3b08156a,0x3b5e93b3,0xb9e1a349,0x3a56c497,0x3b3e6860,0x3b742460,0x3b9dc140,0x3baad63a,0x3baa8ae3,0x3bed2363, +0xba927f97,0x3a9c81a0,0xb9b8b2e4,0xbb73f02a,0x3a2e3c5e,0x3b4ddc80,0x3b0cb8b0,0x3aa4b111,0x3ad8bd05,0x3bbd6cd0,0xb98e794f,0xbb705a15,0xbc51176c,0xbc5f6a82,0xbc823356,0xbc94138e,0xbb966e5b,0xbd04ac48,0xbcf8cbde,0xbc24d3b7,0xbc9654fd,0xbbb16bbb,0xbc493a0e,0xbc6814f3,0xbc224591, +0xbc00ee1a,0xbc23c25f,0xbb765c7e,0x3958d1cc,0x3b6cb677,0x3af99c91,0x3ad98576,0x3aa082dc,0x3b1e428b,0x3b2d6f5b,0x3b95b0d0,0x3bcd2760,0x3b3eb505,0x3ba7a11b,0xb90d0b8e,0xbac93c3a,0xbb5dc4dd,0xbbd946f4,0xbace5872,0xbad07c9f,0xbbfa2f32,0xbb4ed21e,0xbbf1a7f2,0xbc852d71,0xbc969993, +0xbc9bbd1b,0xbcbc70f5,0xbcbeda1e,0xbc8efdc2,0xbb8a5c28,0x3c1ddbfa,0x3c101de6,0x3c076f77,0x3c292ffe,0x3c0b1f38,0x3c4c1a3d,0x3c08d0ff,0x3c35cf64,0x3b6bb237,0x3bbdb2ec,0x3b3ba26f,0x3b4e3cda,0x3b8a7f82,0x3b923028,0x3b9a15fe,0x3a31349d,0x3a993718,0xbaf87d2b,0xbabc453a,0xbb10f545, +0xbb0e0347,0xbb2b8412,0xbb518357,0xbb817ec7,0xbb8df967,0xbbd6a3d1,0xbc0cde23,0xbbd87880,0xbc0bd3bb,0xbc3f2241,0xbc8d32e4,0xbca3c608,0xbcb6740b,0xbc9d9b90,0xbc2be10d,0x3c83de37,0x3c547ebe,0x3c805b58,0x3ca2ce87,0x3c401ee6,0x3c8ba4ec,0x3c5d05bd,0x3c5bfd17,0x3c1d39d2,0x3c2dda76, +0x3c08ffb8,0x3c1ca21e,0x3bc2b787,0x3ba8681d,0x3b821381,0x3b6a13e3,0x39f0e333,0xbb53afeb,0xbacb7b38,0xbc0d25f5,0xbc0e9717,0xbc34841f,0xbc3e0ad5,0xbc56098e,0xbc63d60c,0xbc717732,0xbc70b527,0xbc813750,0xbc87fb3e,0xbc9c7d5e,0xbcc18c0a,0xbca3df52,0xbc8b6759,0xbc89e675,0xbbfa9e30, +0x3ad994db,0x3b99561c,0x3c90d1a3,0x3c5492c6,0x3ca3c634,0x3ca3f807,0x3c84ca91,0x3c3f3000,0x3c52409d,0x3c2673bc,0x3c64b0f2,0x3b9e97b0,0x3c003b58,0x3b9773b5,0x3bd4f2c4,0x3af45ba8,0xb945ae28,0xbaa5278a,0x394a739a,0xbbca0145,0xbc233031,0xbc195202,0xbc5024a1,0xbc522131,0xbc671950, +0xbc71c141,0xbc7e00ee,0xbc88db96,0xbc89faed,0xbc96e1b4,0xbca5e773,0xbcb6af23,0xbc908aab,0xbc475787,0xbc070c96,0xbad5df8b,0xbb64d42f,0xbb615e7a,0x3c0a213d,0xbb1ac5cd,0xbb0ac242,0x3a10a2d6,0xbaa577b8,0x3bd88145,0xb8f93ab5,0x3b88058d,0x3b6342bd,0x3b91b18a,0x39c53140,0x3a994830, +0x3a29f38b,0x3aa7548a,0x3b91011c,0xbaa50a8e,0x3bad22b8,0xbb5667a3,0xbb1ed44d,0xbb947610,0xbb9b7661,0xbbcf97bc,0xbbf4c6aa,0xbc01329a,0xbc1a17bf,0xbc0dac6f,0xbc146765,0xbc196208,0xbbf367a2,0xbc0424cb,0xbbe13648,0xbbbd7b97,0xbbb7513b,0xbbb305b1,0xbb881824,0xbba2c170,0x3ae5700e, +0x3c0e00ab,0x3c2808fd,0x3adfc58c,0x3bd6f5f9,0x3c36e820,0x3c44bd36,0x3c2a2aa7,0x3c127649,0x3c183b07,0x3c29f29e,0x3c26759a,0x3b907123,0xbb0d7952,0x3bde61cf,0x3b81d3e3,0xbafd3e5d,0xbbf71e3f,0xbbe054a3,0xbbf0f62c,0xbbfdfbb2,0xbc0474f6,0xbc0501a9,0xbc06c0c9,0xbc0c3718,0xbc06f839, +0xbc0c3460,0xbc1063bb,0xbc1019e6,0xbc1a49bf,0xbc0765c9,0xbbe44437,0xbbc1a882,0xbb9de7f9,0xbbfea47d,0x3b938932,0x3b80db23,0x3bf5e29b,0xbb3bbfc5,0xbbfca51f,0xbb0e25cc,0xbad35eff,0xbbd0c763,0xbbc8c431,0xbbbe1898,0xbba76a4b,0xbb51449c,0xbb6b82d4,0xbb9849a4,0xbb6b9ae4,0xbbe85550, +0xbb5bc72d,0xbb1d95dd,0xbbd705fc,0xbb41ee54,0x3bed2841,0x3b91f24d,0x3b8b34f1,0x3b8a0736,0x3b9031bd,0x3b898b49,0x3b679c3d,0x3b69bd9e,0x3b61542e,0x3b5378f9,0x3b6f0c04,0x3b712f9f,0x3b6389d6,0x3b5c3019,0x3b5be0d2,0x3b5ee60d,0x3b76173c,0x3bcaea3a,0x3b5b5304,0xbc0fa0e6,0x3b52d38c, +0x393013fd,0xb9ae9975,0xbb235160,0xb957971b,0x3b604ae1,0xbacd9b94,0xba09cf81,0xbb1ac841,0x3acb9ae5,0xbad5fc16,0xbba05b2a,0x38d11705,0xbb04242c,0x3abe04fc,0xbb6cda64,0x3b88e33a,0x3bddf4a3,0x3ba15a73,0x3ba7067e,0x3b8f195a,0x3b52e1c3,0x3acbc20a,0x3ace5414,0x3ae4c5ca,0x3b158239, +0x3b81eeb6,0x3b82d83b,0x3b56abb2,0x3b27bbba,0x3b360944,0x3b5ec4fa,0x3b78af44,0x3c00f9b4,0x3b924fc5,0xbb44bde9,0x3b94b152,0x3b1c9df4,0xb9037a3c,0xbb8fbbe3,0x3b7e7e24,0xbabb0846,0x3bcf55b9,0xbb5a6c11,0x3bd711a7,0x3a301d71,0xbaa27da2,0xba33cf43,0x3aada226,0x3ac7ac7e,0x3b0255b5, +0x3a76c5cb,0x3beaec19,0x3c1546a9,0x3b9ef3bb,0x3bb95638,0x3b9b493e,0x3b7f45d4,0xb969f636,0xb9ece18f,0xb819bb8d,0xba127161,0x3b208c90,0x3b2fb330,0x3a50f5ec,0xb9363496,0xb7b04585,0x3b0e6da4,0x3b68aa56,0x3c24ce8b,0x3b69f7c4,0xbb920ee6,0x3b3b8cb1,0x3c194bc9,0x3a570e8c,0xb97ba022, +0x3b5b9788,0x3b7680bc,0x3b9b23b8,0x3bc5c6c2,0x3bb85c15,0x39c5f57f,0x3b69aefe,0x39f4a711,0x3b849eaf,0x3b852920,0x3bc16699,0x3b507eec,0x3bde5301,0x3c363a4e,0x3bbf2717,0x3bacc991,0x3b8dbfa9,0x3a7a9a87,0xbbc5cd3c,0xbba9ed62,0xbb920471,0xbb09729a,0x3aca8e2c,0x3ae15597,0x39950d78, +0xbb48e887,0xbac5cf72,0x3b2cba15,0x3b5cec64,0x3c26ae1d,0x3c133884,0x3a5fe1a7,0x3c00f24c,0x3c56023a,0x3ae45947,0xb9e3454e,0x3bb44113,0x3b8acd5a,0x3b9cde3a,0x3c23f324,0x3b6370d7,0x3b1f74ff,0x3b2e723b,0x3bd46735,0x3bb9d12c,0x3b9b2fe4,0x3c702d03,0x3b3f4615,0x3c58b03d,0x3c4321a1, +0x3bb073bc,0x3bbe4565,0x3b8d1252,0x3abdcc62,0xbb8f2b07,0xbbb0ce38,0xbb9133e7,0xbb8dfaac,0x3a884a71,0x3903f1a1,0xbb6ed3a1,0xbbcf484f,0xbbd47062,0x3adbdb87,0x3b34f3ab,0x3be8e2f5,0x3a90501e,0xbc99ac71,0xbc93e645,0xbc8d1a88,0x38db8249,0x3c205233,0x3c31753a,0x3c1409d1,0x3ae2874e, +0xbb1947e5,0x3a9cb9a2,0x3b8ebfc2,0x3b525f9f,0x3bf4c2fc,0x3c022394,0x3b4d00dd,0x3bf27145,0x398bd66f,0x3b89d266,0x3be68e50,0x3be47c86,0x3c6006e4,0x3b91c317,0x3be08f94,0x3c1d173a,0x3cb2610f,0x3cab56a7,0x3a78b54a,0x3c4001a2,0x3c2467ba,0x3a6d9fb6,0x3b3e9458,0x3c46d46c,0x3cde42b5, +0x3c93cc1b,0x3bb05e29,0x3c303893,0xbc0119d7,0x3b91bd8c,0xbb387c15,0xba9111e7,0xbb0f2ccc,0xbaed4c65,0x3b10ddfb,0x3b59f869,0x3b490c32,0x3af3eb2b,0x3a578219,0x3b8b8a55,0x3b1ebc21,0x3bca60d4,0x3bb9a9ca,0x3be06e8d,0x3b46b14e,0x3ae52295,0x3bd55813,0x3acfb04d,0x3a4a882a,0x3af8861e, +0x3a8dfbea,0x37a6c737,0x3acf6696,0x3b9dcc7e,0x3a7c7ec2,0x3b178f67,0xba17cf02,0xbb174b76,0xbc20aa9f,0xbc4a282a,0xbc06da56,0xbc041ad0,0xbbb7203e,0x39e6cc12,0x3a8d98ec,0xba89d405,0xbaf64e39,0xbbadcb8b,0xbbfea99f,0xba7a8fa2,0xba9b7df3,0xb8a24b17,0x3afaeaf3,0x3b0599d2,0x3b370c75, +0x3b179742,0x3ac4cf52,0x3b94a1b5,0x3b48f6ad,0x3b0438ce,0x3a319b1c,0x3ba65042,0x3c0b9e73,0x3bbc0f39,0x3af3a33e,0x3b5923d7,0x3b6dc4e1,0x3af41a32,0x3bc6437e,0x3bb63106,0x3c158124,0x3c3e9d6a,0x3c4bfa9d,0x3bace431,0xbbede37d,0xbc43090b,0xbc4cbfe0,0xbc19088a,0xbb8bc6ae,0xbae69eb6, +0xbba4befb,0xbb81f1c1,0xbbd1e9b0,0xbbfdf38f,0xbbd399c0,0x3b2ac533,0xbb0035c5,0xba648f57,0x3a44eac8,0x3ab72104,0x3b0725e2,0x3adc0aa5,0x3b6247dc,0x3b6c4657,0x3b66b80e,0x3b7664b8,0x3a688bc7,0x3a1b94ea,0x3c350a41,0x3c072331,0x3ba2aefe,0x3bd7c956,0x3ba40303,0xbac81a13,0xbb06048b, +0xbb30a608,0x3b31a35e,0x3b310378,0x3b94c61b,0x3ac7c661,0xbb938af7,0xbbce6342,0xbc50943a,0xbbbd160d,0xbc1b8f3c,0xbc411745,0xbc1c1144,0xbc077601,0xbc26768c,0xbbfb9c59,0xbb614339,0x3a3d1aa9,0x3a8b00d0,0x3b2f302f,0x3ae2c536,0x3a535840,0x3a2f54bd,0x3b90238d,0x3b5c854c,0x3b87dfee, +0x3ba66ad9,0x3bcdefb5,0x3b822ca2,0x3bafb971,0x3bf1117b,0x3bbd0696,0x3b801a16,0x3b2e57a5,0x3af16075,0xbb0320f6,0xbb340296,0xbb9df202,0xbc3141d3,0xbc448348,0xbc606798,0xbc07e6ba,0xbc543078,0xbc5f08f7,0xbc66e907,0xbc5f249b,0xbcab8ef1,0xbd187f54,0xbd0741e9,0xbcc4dd5e,0xbc507d80, +0xbc898678,0xbc904fbc,0xbc1c04c9,0xbc347f03,0xbc25f342,0xbb9968d8,0xba2d15fd,0x3b3c11d6,0x3b436b03,0x3acc428c,0x3b0c1c4a,0x3b97df75,0x3795dfd6,0xb9be1600,0x3a05557b,0x3ba80dec,0x3b76f366,0x3b3b6a16,0xbad41bc1,0xbb8e1809,0xbc046b77,0xbbf079d1,0xbbe84094,0xbc478741,0xba8acdd2, +0xbb3570c5,0xbc597f0e,0xbc96e0ed,0xbcb66683,0xbcb5018f,0xbcbdea0d,0xbcb63b68,0xbc908240,0xbc355792,0xbb9c2c6f,0xbb9ac32a,0x3b060904,0x3baa4c7b,0x3bb4d662,0x3bbdbd4d,0x3b823590,0x3b9ac7d5,0x3b8b397f,0x3b98eca0,0x3b963d5a,0x3b6beb08,0x3b139467,0x3b67ddf0,0x3a622bba,0xbaa79ec9, +0x3b033a9d,0x3b90abcc,0x3b779825,0x3b89d538,0xbb0d753d,0xbb8a414f,0xbbcb5634,0xbb87a03f,0xbb82890a,0xbbb58b44,0xbb79016b,0xbb1fa531,0x3b90c4e4,0xba87303b,0xbbe0b137,0xbc59e084,0xbca34225,0xbbc30802,0xbb126b31,0xbaf9bdfd,0x3b51ab91,0x3bfc4ee5,0x3c397f1c,0x3c27eab5,0x3c2932e7, +0x3c0c85b3,0x3c13ae24,0x3c04dd78,0x3c13e57f,0x3beff8e4,0x3bd27888,0x3b930418,0x3b40fabb,0xb9fc56eb,0xbb2382ae,0xbb46e4ae,0xbbacd4d2,0xba485651,0xbb819ca5,0xbbab5b09,0xbc0146b8,0xbc1b5a23,0xbc348010,0xbc2cca2d,0xbc261b6a,0xbc257065,0xbc28fcfa,0xbc36a430,0xbc39484b,0xbc43f7cc, +0xbc3f81bf,0xbc3f8ce1,0xbc17736e,0x3b101cec,0x3baa95d0,0x3baadcbc,0x3bf10512,0x3c0da46f,0x3c02b055,0x3c060315,0x3c21db1d,0x3c14302e,0x3c15c5b6,0x3bc9af53,0x3bce0506,0x3ba99ea9,0x3b6c4ec1,0x3ab46d84,0x3a9a0000,0xb9e1d5ff,0xbaac203d,0xbbcf05f0,0xbb6c877a,0xbb581372,0xbbd4fa93, +0xbbfdbc4e,0xbc147844,0xbc2510b4,0xbc3e8b9a,0xbc3978e3,0xbc48d05e,0xbc51c10e,0xbc6bd5b9,0xbc8a2aa4,0xbc9c2528,0xbc7c387d,0xbc40de76,0xbc0e4399,0xbb49cfeb,0xbb773852,0xbb432d46,0xbbb98934,0xbb56b6dc,0xbbae9def,0xbb595af5,0xbb1d4311,0xba9f4faf,0xbadad755,0xbb82ec13,0xbb99a529, +0xbbaf3a25,0xbb89aed9,0xbbaa0a86,0xbbbe1c13,0xbbc59a97,0xbbbdc11c,0xbb7db062,0xbb93c76e,0xbab0350e,0xbb385554,0xbb775934,0xbb8f414d,0xbbbf0e8a,0xbbde23fb,0xbbf12390,0xbbeadf93,0xbbbd6e3e,0xbbaf0238,0xbba5858b,0xbb3626a5,0xbb52de52,0xbb429901,0xbb0e26f4,0xbb2bfefd,0xbb62c010, +0xbb0737a0,0xbaa639b9,0xbbafe364,0xbbccfeb7,0xbb3674d7,0xbb920ea0,0xbbd65a1f,0xbb8b504f,0xbb9765f4,0xbb89cc0b,0xbb7cf8db,0xbb93b8ff,0xbbb21a0b,0xbbbd6448,0xbc00c07f,0xbbb30130,0xbb9fc1b3,0xbc0be99a,0xbbe1c9b4,0xbb4ac619,0xbb80fdb8,0xbb8f4d74,0xbb9a5878,0xbba0e866,0xbba45e6e, +0xbbacafb8,0xbbb7ba85,0xbbb61082,0xbbc26a0f,0xbbcf7c1c,0xbbd295e4,0xbbe66908,0xbbc7e116,0xbba23fae,0xbb88535b,0xbb4a5cde,0xbbf1b4ee,0x3c11b7b7,0x3ba7cfdf,0x3b5cd368,0x3c40bf40,0x3c3cc025,0x3b636cad,0x3c1ea92e,0x3c283eac,0x3bbc22e4,0x3ba934e2,0x3b8dde54,0x3b5ada57,0x3b51282b, +0x3b38cef7,0x3b355828,0x3c30ccab,0x3c34df0d,0x3ae31d4a,0x3c28ac82,0x3c340b32,0x3b855a64,0x3baff40a,0x3bb79918,0x3bac21de,0x3bae8992,0x3ba7bbb0,0x3b992950,0x3b9a79c3,0x3b9afc3e,0x3b93b8ff,0x3bae9508,0x3bb2e532,0x3bb33900,0x3bc460cf,0x3bc3cf8f,0x3ba62c23,0x3bae0938,0x3bbc6001, +0x3c16b205,0x3c4d8216,0x3bf67df1,0x3c27af2e,0x3bf07632,0x3c11db9a,0x3bd87331,0x3ba34a10,0x3c263ed0,0x3c078010,0x3c30632c,0x3bfd1dd4,0x3bed5f32,0x3bd48a69,0x3c083d9b,0x3c170b8f,0x3c0c38c9,0x3c47f8e4,0x3c3b557e,0x3beb0a2e,0x3c090099,0x3bf7e41b,0x3bf2199c,0x3bd8e070,0x3bcd9fb5, +0x3bb13af1,0x3bb41b09,0x3bb3e639,0x3c06f084,0x3c1104ad,0x3c0d22ca,0x3c2feeb1,0x3c2852e4,0x3be0cf26,0x3c00f823,0x3bae7be0,0x3c0a86df,0x3c5d71cf,0x3c2239dd,0x3c4ad91e,0x3be88dcc,0x3be56b4d,0x3ba90d91,0x3c10f21a,0x3bbed98a,0x3c4a02bb,0x3be1f716,0x3bd3e4ae,0x3bfea0d7,0x3be848ae, +0x3be3c3b7,0x3c1a6284,0x3c19d09c,0x3c4da4e8,0x3c331bbb,0x3c06ba4e,0x3c28debf,0x3c0d8b8e,0x3c0cb913,0x3bda4376,0x3ba3acb0,0x3b8a503d,0x3b9c4514,0x3b940903,0x3c1256ac,0x3c3333b2,0x3c21fa29,0x3c5f5dd8,0x3c489855,0x3bd7066d,0x3c0c74b8,0x3b9fcde5,0x3c0adc49,0x3c814a5e,0x3c4034e1, +0x3c602190,0x3b98198e,0x3b21f902,0x3bc46d04,0x3b958596,0x3bbbaf35,0x3bd532d3,0x3b881299,0x3bd94ac6,0x3aa4d69c,0x3bd10d69,0x3ba7f477,0x3bf2d0a1,0x3c2bbe12,0x3c6c9c96,0x3c7a8d44,0x3c219dc3,0x3c38ba32,0x3c279a55,0x3c30403c,0x3c131d8d,0x3bb9cf9c,0x3b614604,0x3b78eab1,0x3b98bd59, +0x3c34b066,0x3c7402a7,0x3c54a441,0x3c9eb9fb,0x3c87daf7,0x3bc1f446,0x3c2a93ab,0x3bbaf6c0,0x3bf9fe2d,0x3c807ca7,0x3c3fb602,0x3c70a6b7,0x3b9338c0,0x3a703763,0x3b853f6e,0x3b930a7b,0x3bd32573,0x3bdeebb0,0x3b595e9e,0x3a906b1d,0x3b320e33,0x3b9cb5c3,0x3bc8f453,0x3c0a303d,0x3bc7d892, +0x3c928afb,0x3c7bcf9f,0x3c33d0f2,0x3c666e54,0x3c48485a,0x3c327733,0x3c008f9c,0x3b46bc55,0x3ac69f06,0x3b2f4045,0x3ad494d0,0x3c4a932b,0x3c844e3b,0x3c4e7a52,0x3cb27f73,0x3c88cfad,0x3bb77c65,0x3c14d001,0x3c52bfe6,0x3c154a14,0x3c1955c7,0xb82fa9c7,0xbc2054f7,0x3b7d7996,0x3c27fe2b, +0x3c5604a1,0x3c365bea,0x3b49d4f8,0xbb267ae9,0x3b28fccf,0x3b668d9e,0x3b81d81a,0x3c0f971c,0x3bd3fe1b,0x3c1fcae2,0x3b995e41,0x3c2d4176,0x3c296c24,0x3b6efb24,0x3b2d70c9,0xbad7c76f,0x3b0017f4,0x3b1a121a,0xbb1838bb,0x3c283fda,0x3c17c6ea,0xbbacd4da,0x3b87d3de,0x3c067c90,0x3c883667, +0x3c6ec581,0x3ca2451b,0x3cfdd787,0x3cae55ad,0xbc4dfd3f,0x3baa03f4,0x3ca6447e,0x3be2236f,0x3bf936b2,0x3b7b70cf,0x390560cf,0x39fa9e32,0x3aba5e13,0x3b949d74,0x3b97413d,0x3ac70a9a,0x3a813b1c,0x3b61dc29,0x3b85f9a6,0x3bac599e,0x3c1438fa,0x3bfbbb0b,0x3c1bf29d,0x3c1c0ea2,0x3c3138d4, +0x3c7171c7,0x3c485f4f,0x3c045f35,0x3bd2cc9a,0x3bcbaabe,0x3c1b55a2,0x3c15eec5,0xba449b02,0x3bbf785b,0x3bcf113f,0xba616b8b,0x3b9b1e77,0x39d2a36f,0xbbe821bf,0xbbe73060,0xbc0b70dc,0xb986957d,0x3b66a34b,0x3b3614ab,0x3b7dd316,0xbb244be9,0xbbb8e0b5,0x399d8384,0x39854099,0x38b2b94c, +0x3b0cf563,0x3add49c1,0x3b423aff,0x3ad150d2,0x3b969761,0x3bf4d1cb,0x3bb51396,0x3bc997bc,0x3be5e749,0x3ba54a1b,0x3bfdeb94,0x3c27413e,0x3ba9d707,0x3c0afc7c,0x3bf6393b,0x3c16becf,0x3c06e91b,0x3bcd880f,0x3ac1aa6f,0x3bc055fc,0x3c76175a,0x3cc425a1,0x3cad7752,0x3c856b12,0x3b97c252, +0xbb368347,0x3bb5d146,0xb9df82e5,0xbb237c85,0xba7c4a2b,0xba9d7a49,0xbb8ce178,0xbb94c8fa,0x3b6baf7d,0xba79a896,0xba6ead90,0x3ac15562,0x3ab59158,0x3b1d317b,0x3ad96eff,0x3b417d35,0x3bde14c9,0x3bb847c6,0x3b6f93c1,0x3bdac7e5,0x3c0a3465,0x3bcd3152,0x3c25c90c,0x3bce5d29,0x3c396dee, +0x3c497a81,0x3c0cac64,0x3c3146f7,0x3c274143,0x3bef9a93,0x3c09b61f,0x3c3cb1ef,0x3c92399d,0x3cc83a6f,0x3ce88851,0x3ce142a7,0x3c556b7c,0x3c52dddb,0xbb7ffa5b,0xb868876b,0xbba14c44,0xbba4178e,0xbbc10cc4,0xbb485132,0x3b6cc1ff,0x3a406747,0x3b2fa069,0x3b60c675,0x3a64b17a,0x3ad029dd, +0x3b84813c,0x3ba72fbb,0x3bcd7d2c,0x3be3396c,0x3bf946de,0x3c068e87,0x3b0c9dbb,0x3bf7b890,0x3c212205,0x3c24b954,0x3c33a4f2,0x3c22a142,0x3b90e3a5,0x3c049e86,0x3bf57f95,0x3b961a4f,0x3accac3e,0x3a93c1ab,0xbbacce7b,0x3c6f4229,0x3cb29261,0x3ccd6fa4,0x3cbe10d6,0x3c676398,0xb9d8d9ab, +0xbc8e0e83,0xbc5913af,0xbc39fd38,0xbc4099f6,0xbc32d4b4,0xbbe0ce09,0xbbc3d139,0xbbfcb325,0xbb720216,0xbace0239,0x3b1a5f21,0x3b7d5b45,0x3b393148,0x3b40f69a,0x3b692e19,0x3bc99ca5,0x3c02eba5,0x3bbc0283,0x3bc69bad,0x3bcc0541,0x3b375e1b,0x3acf48cd,0x3b32eb99,0x3bd8f2d5,0x3c0c41b1, +0x3c32fbc0,0x3c5b6d55,0x3c6ea747,0x3c32b539,0x3b40958a,0x3b972a87,0x3bb50c83,0x3b97cb95,0x3c45a565,0xbc1efa1f,0xbbeafeb3,0xbbbff3e2,0xbb51a17e,0xbacc8088,0x3b6bb5d1,0x3b8d339e,0x3b7900da,0x3b03f7d3,0x3b9eb4ac,0x3a33e5e7,0x3bbb6641,0x3b9eef52,0x3bad2a5b,0x3ba0e477,0x3baa425b, +0x3bce3966,0x3ae040a5,0x3a4ed506,0xb971b0b1,0x3b83dd37,0x3bbc3fb6,0x3bbe35f0,0x3bb09180,0x3b992a0c,0x3b3ee22e,0x3a8bc131,0xbb030106,0xbbb07f07,0xbbbd44cb,0xbae8c5f9,0x3c1f089e,0x3b914e59,0x3b23fbdc,0xbaea0ea6,0xbbd4187d,0xbbf3b918,0x3a663556,0x3b74c075,0x3bbb28da,0x3c37c152, +0x3c07209f,0x3c3474c8,0x3bfa2092,0x3c019714,0x3bbe646b,0x3c00747d,0x3bcebec6,0x3bfcc380,0x3ba53681,0x3b9e4ede,0x3b55b386,0x3b73b9fb,0x3b08ed40,0x39fc5c41,0x3ac3473d,0xba7e9d47,0xbad09c75,0xbb6f850c,0xbb8ad1d4,0xbbb4747a,0xbbf8728e,0xbbd8237d,0xbbcf1fd7,0xbbaf218a,0xbbe05ae1, +0xbbdb3382,0xbb7a8db4,0xbbc07619,0xbbf1e1b6,0xbc23c476,0xbbfa8d8b,0xb9e982c3,0x3b7a1d7e,0x3c1aa323,0x3c04f2d1,0x3c3e869f,0x3c3641df,0x3c1f0f83,0x3c0ef489,0x3c2cf923,0x3c185d0e,0x3c5b7bf1,0x3be6f38a,0x3bc5a329,0x3bab2dfa,0x3b735fec,0x3b17ca3c,0x3a1bfade,0x3803a5c6,0x3aab7e3c, +0xba930ce1,0xbbc8ee47,0xbbccdfc2,0xbc1591ee,0xbc23744a,0xbc38b513,0xbc49c79c,0xbc289d76,0xbc14a3f4,0xbbe0d8e2,0xbbfdf2da,0xbc1d2230,0xbc495cc8,0xbc36a8bf,0xbc0a76c4,0xbbed0ac9,0xbb004e6d,0xbaf0f6b8,0xbaeafabc,0x3a01f28d,0xbb0aaa75,0xba9b1048,0x394e1524,0x3a5aeb55,0x3a88fb33, +0xba81fbe5,0x3a2cb077,0xb942cb2b,0x3acbd0eb,0x3a93c9de,0x3aa264d8,0x3b136828,0x3aa77885,0x399418f2,0xbafbe357,0xba9f0db1,0xbc04adb9,0xbc038ac1,0xbc0c9e0c,0xbc12a056,0xbc2194b8,0xbc2b0e40,0xbc319f32,0xbc453539,0xbc3c122b,0xbc30fb84,0xbc231b1b,0xbbcc3c22,0xbb718389,0xbb412fa5, +0xbad1dddc,0xbb047145,0xbb1ece88,0xbb4deb68,0xbb244d4f,0x3ad96365,0x3b09b46c,0xbad7212a,0x3aeb4c42,0x3b1c9583,0x38e01438,0x39379a60,0xba0dde9a,0xbabe2d5e,0xbaf82ed4,0xbb1eda2d,0xbb31b822,0x3ab72565,0xb98a026c,0xbb747e91,0x3982275a,0xba45f9c6,0xbbb690c2,0xbba0550e,0xbbb733a9, +0xbbc5a05c,0xbbd2dd73,0xbbd95d50,0xbbdaa041,0xbbcf4c8a,0xbbb36622,0xbbb069d6,0xbbad9e2a,0xbbbb5de4,0xbbd49c4b,0xbbc99250,0xbba85b57,0xbb93816f,0xbb6f58ea,0xbbdc53c4,0xbb7785d3,0xbb1144b0,0xbb3f6002,0xbbd70592,0xbaa65171,0x3c0db4df,0xbbc44007,0xbb149cd7,0x3bc76414,0x3bef408c, +0x3c0af660,0x3c0973a8,0x3c0ec279,0x3c25bccf,0x3c09f3b9,0xbb1c6690,0xbbc3b35f,0x3c264d1b,0xb822b7ab,0xbb9a7073,0xbb1d5c27,0xbb240af4,0xbb57c9bd,0xbb59be0a,0xbb5a8492,0xbb58d52c,0xbb5c0ec5,0xbb5b9830,0xbb67547d,0xbb710f6d,0xbb770915,0xbb711dc2,0xbb824507,0xbb81d277,0xbb6bb87c, +0xbb2aa850,0xbb327c07,0xba8d761d,0xbbcac934,0x3b51cfab,0x38cab233,0x3b723254,0xbad738f9,0xbb436905,0x3aa999fc,0x3a3ae989,0xba307798,0x3a95f5d6,0xba9b4f14,0xba518703,0x38cab3ed,0x3b832563,0xbb164d60,0x3a54c843,0xb7c811aa,0x3a622aa3,0xbb8fb757,0xbb23e66b,0xbb8cda7c,0xbba806b1, +0xbba96a9e,0xbbc320a1,0xbbf817a9,0xbbecd566,0xbbefa926,0xbbe3facc,0xbbe63f8a,0xbbdf0d87,0xbbec5902,0xbbf944df,0xbbd40d04,0xbb540d31,0xbb3b259c,0xb9c4b85d,0xbb72dfa0,0xba5e1de3,0xbb0aa87f,0x3accc750,0xbace9317,0xbaca7b59,0xbab313da,0x3a4c04b4,0x3abf1204,0xbacba1d3,0xba137384, +0x3b41db98,0xbb78d5a6,0xb9f7d7d4,0xbac11723,0x37be653b,0x3b170fa7,0x3a356074,0x3a0585b6,0xbb768299,0xbbb6fec3,0xbbfae956,0xbbec1564,0xbbedf7fb,0xbc15d960,0xbc137b6b,0xbc11e67d,0xbc247027,0xbc17ca88,0xbc25c1f1,0xbc328699,0xbc373bb5,0xbc0c797c,0xbb04b49e,0xbb184aa5,0x3b0ab7e8, +0xbb6c5724,0x3a069ef7,0x3aa2ae59,0x3bc3d9ec,0x3a1df69b,0x39bf1e86,0xb9e40af6,0x3b5b0084,0x3b8b8d3c,0x3ba5d41d,0x3b9ceaf3,0x3aa4dc9d,0xb98bd647,0x3a208b80,0x3ab29e99,0x3b304aae,0x3b4eeff3,0x3b578361,0x3b60cd84,0xbb4b21c5,0xbba49fed,0xbc224796,0xbc2168b8,0xbc56150c,0xbc84a0bc, +0xbc757ddf,0xbc6ab361,0xbc5c0ecb,0xbc5fccc7,0xbc6efd96,0xbc6e854c,0xbc84cc23,0xbc39e7a6,0xbae5826e,0xba4f23ae,0x3b284104,0xbaa0e592,0x3b13c2ea,0x3b84b493,0x3bc4a2bb,0x37cf32cc,0xba18529f,0x3b517aa0,0x3b92fa2f,0x3bade5b1,0x3bedd1b9,0x3b8f3e6d,0x3b113c37,0x3a63f0ee,0x3b7a8999, +0x3b5a5bd8,0x3b9d0110,0x3beeeb4e,0x3be519e0,0x3b9773c1,0xbb34dcb0,0xbc0af47c,0xbc5317b7,0xbc41c5e5,0xbc4dc5af,0xbc66c968,0xbc644b11,0xbc65fb23,0xbc71b6fe,0xbc69b2c9,0xbc88d5eb,0xbc8f3234,0xbc9d1322,0xbc5ee248,0x3849c81a,0xb987a0bb,0xbb3e35e0,0xbc1ddd00,0xbc54b192,0xbc44dbf2, +0xbc6812a8,0xb99d5181,0x3b9002d1,0x3c20c7b1,0x3c273fb5,0x3b6c5bd0,0xbb266b95,0x39798461,0x3b43fc59,0x3ba682fe,0x3be339f2,0x3baa093b,0x3b561889,0x3a95122e,0xbb5ece90,0xbbd0a837,0xbbef1f68,0xbb184495,0x3b772530,0x3ab63683,0x3aa6fa28,0x3b73f76d,0x3c272aa9,0x3be81b7b,0xbc5095a7, +0xbc2559a0,0xbc64ea16,0xbc7c20ac,0xbc611a64,0xbbcf9976,0x3c15ad6c,0x3a4f8d43,0xbbe60990,0xbc4aacba,0x3bd22f73,0x3bb1f663,0xbb3b8b32,0xba2b913e,0x3aafa005,0xbb443040,0x3abb392f,0x3b7ab5b6,0x3b91c29b,0x3b22c802,0x3a9705e7,0x3b4e0b89,0x3b1e6712,0x3b8e4d4f,0x3b93b09d,0x3ba1d813, +0x3bf08195,0x39e570a4,0xbb819440,0xbc00928b,0xbc883fbe,0xbc1f005a,0xbbbef701,0x3a932725,0x3b3ccc37,0x3b85fa09,0xbbfc0a3d,0xbac890d1,0xbba597c0,0xbc895479,0xbc6470da,0xbc474320,0xbc039ba5,0xbc22dfd3,0xbc2f7119,0xbc2becca,0xbb25bb63,0x3a3c770f,0xbab326c7,0xbb153b75,0xbbcb33eb, +0xbacb58d9,0xb9fc76ac,0xba6aca7e,0x3b30a73f,0x3a946518,0x3adfd852,0x3b53b4c0,0xb9395d2b,0x3b8465f9,0x3ab30561,0x3a0193c2,0xbae003dd,0xbb5f68dc,0x3b370614,0x3aadf0e3,0xbb953891,0xbbdf65a9,0xbc1c2f4d,0xbc4da779,0xbc01a449,0xbb9e4dcc,0xbb156341,0x39eb2e2b,0xbb81d198,0xbc8e2b3f, +0xbcd14c1e,0xbce67ca8,0xbcbf9cae,0xbc64844e,0xbc06e8af,0xbafd69f5,0x3a33f9e4,0xbb1cc855,0x3a689e88,0xbb959234,0xbba86d0b,0x3b3d1fd8,0xba8d38c7,0xb988bcf5,0x3a46612e,0x3a3a7d8a,0x3ab4d0ef,0x3ae2307f,0x3b1010de,0x3b0e7c44,0x3a905511,0x3ac59cd7,0x3a84d4b7,0xbac90207,0x3b8619b7, +0x3b40217e,0x38aca8ce,0xbb957de3,0xbc16d520,0xbc938297,0xbc7d119b,0xbc565d70,0xbc213d93,0xbc1245f1,0xbc3cf6e9,0xbc9e6c4a,0xbce1e783,0xbcfd4ff5,0xbd0b5c15,0xbc7c897e,0xbca58626,0xbc3f7330,0xbbcbae2b,0xbb3c376f,0xbc00c106,0xbbe6ec20,0xbb732423,0x3a1ba08e,0xb9a000e8,0x3af37808, +0x3a9457bd,0x395a50f2,0x3a644a53,0x3b427f62,0x3b51dac3,0x3b991ab3,0x3bb03d78,0x3b8d3fe7,0x3b9a73a6,0x3aa41b32,0x3a33c9e8,0xbb11dd4a,0xbb839635,0xbb8f727e,0xbb3da73d,0xbb6e0de8,0xbb8bfd83,0xbc006f80,0xbc80cb17,0xbc538436,0xbc76e166,0xbc689b34,0xbcbd4b05,0xbce263b8,0xbd209609, +0xbcdfebca,0xbd02a27d,0xbc910750,0xbc1dcadc,0xbcc0f8d2,0xbc5f3b1a,0xbc64ea59,0xbc5bedf2,0xbc1d445b,0xbc0d70a5,0xbc150718,0xbbb751d3,0xbb6a7863,0x3a63b72b,0x3b47b22c,0x3ae54c2a,0x3b0681c5,0x3b2c0e4b,0x3aa11f7a,0x3a3644dc,0xba082aaf,0x3b34b583,0x3bbea8d4,0x3b434fe5,0xb9f63098, +0xbb9b1dea,0xbc32e856,0xbc45cd32,0xbc66ff43,0xbca47624,0xbc51d8a1,0xbc77ce59,0xbce1a090,0xbd0d738d,0xbd17173c,0xbd159a05,0xbcfcc5e1,0xbd02577d,0xbcec745d,0xbc901f0c,0xbc4e8ff5,0xbc360192,0xbb07be25,0xb9744154,0xbb399c3e,0xbb28b856,0xbb1a5db1,0xba762cff,0x3b0aaf18,0x3b7db031, +0x3b8107f1,0x3b1a4f93,0x3a78f6eb,0x3ac3e7f7,0x394d961f,0x3a7cf55e,0x3ab6b35c,0x3b4d719d,0x3accdc14,0xb980ec09,0xbb803639,0xbbbe65a5,0xbbdb4e1a,0xbbd8c7e3,0xbbc78ddc,0xbb82a8b6,0xbc0d684e,0xbc2991e2,0xbc18df0c,0xbbe93442,0xbc252f5a,0xbc952bac,0xbcd7cdb2,0xbca3b509,0xbc105741, +0xbc46ad20,0xbbdf56a5,0xbad6a11e,0xb9accb8c,0x3b12c9fa,0x3ae4c0c3,0x3afcf5f3,0x3b4dd16f,0x3baca606,0x3bc5c730,0x3bc98144,0x3b880503,0x3b1a487a,0x3adbc456,0x39d0d228,0xbaa1f653,0xbb0f7e3a,0xbad9b390,0xbb047f2a,0xbb3c4376,0xbb8d821d,0xbbcd691b,0xbc071d59,0xbc1ecc61,0xbc2b7084, +0xbc312b80,0xbc15a866,0xbc4a61de,0xbc620030,0xbc7b4f16,0xbc6a1ade,0xbc68e442,0xbc89c364,0xbc7c91cd,0xbbe4bafa,0xbbe13f13,0x3a6541be,0xb9959503,0x3b5266a4,0x3b84d7f1,0x3b52160d,0x3b65a9ab,0x3bb5225c,0x3ba5c6b4,0x3bca39d8,0x39b59ed3,0x3b40c868,0xba218266,0x3acc8908,0xba8a38e5, +0xbaf1d67e,0xbb41f69d,0xbb701c06,0xbbe98f87,0xbbd13137,0xbbf5a7fa,0xbbfeeedb,0xbc0bab6b,0xbc10661a,0xbc224e84,0xbc30bd74,0xbc4f4140,0xbc779679,0xbc846379,0xbc92d66c,0xbca46bff,0xbc9867a1,0xbc8d46e9,0xbc7c1c93,0xbc3079c5,0xbbf2a736,0xbbd7404e,0xbb2aed37,0xbbcc62da,0xbbf0b2d9, +0xbba797da,0xbbc121b6,0xbaa0b60b,0xbba5a6a5,0xbba045f3,0xbba37164,0xbb87b310,0xbba81fdf,0xbb8fd2c6,0xbbf9b9be,0xbc05fa10,0xbbd0a299,0xbc1d4435,0xbbf69213,0xbbfe1264,0xbbf01907,0xbc1a719f,0xbc247777,0xbc3b44dd,0xbc4aa8b1,0xbc5378c3,0xbc5e7f61,0xbc548d8d,0xbc500f61,0xbc6709e7, +0xbc5fe46f,0xbc7a88b4,0xbc56d794,0xbc1cc417,0xbc127545,0xbc1650ac,0xbbff7de3,0xbc00dad2,0xbc0e0c1a,0xbb97db94,0x3a49cc42,0xbc069594,0xbbd18517,0xb9839152,0x3a1ba79e,0x3a326be8,0x39fdf866,0x39e8f181,0x3a5ada16,0x3a6a9755,0xbbfe4771,0xbc1f92de,0xba29815d,0xbbf6faa4,0xbc23a7e4, +0xbc010abe,0xbc0bfbdb,0xbc0fff80,0xbc109915,0xbc11cc14,0xbc1159db,0xbc11fb81,0xbc1a7e27,0xbc2048d3,0xbc2d051c,0xbc329ee5,0xbc308c8f,0xbc3e1dcb,0xbc350cc8,0xbc288ac3,0xbc214f6f,0xbc112342,0xbc6e37cb,0x3c5366dd,0x3c0e013c,0x3c346ce0,0x3c2a3f84,0x3af9fe42,0xbbd89d88,0x3c1c5ce2, +0x3b46d71a,0xbbcdf821,0xbbe136e6,0xbbf9bd65,0xbbe01319,0xbbef3578,0xbc1c995b,0xbbf7adec,0x3b3e398c,0x3c143aa4,0xbc07a879,0x3a9e1eb4,0x3c055dd4,0x3c2a722f,0x3c16f691,0x3c224877,0x3c1f62d2,0x3c25eb68,0x3c239dc6,0x3c19dfc6,0x3c18b495,0x3c17f508,0x3c1652f5,0x3c1f2df9,0x3c1c9838, +0x3c1fd093,0x3c210027,0x3c1dd16a,0x3c09940f,0x3c14e584,0x3c316750,0x3c618152,0xbb097039,0x3bdd6ca3,0x3b228447,0x3bbf5d70,0x3bca81a1,0x3b2991c2,0x3bc61f29,0x3bd2bf94,0x3b8b435b,0x3be4b8f4,0x3c04b080,0x3b566386,0xbb54d43e,0x3beadcc2,0x3b8d7a32,0x3bda79fe,0x3b849771,0x3c600239, +0x3c45c6d2,0x3c523982,0x3c587078,0x3c53e507,0x3c4c1f14,0x3c516c9b,0x3c4774cd,0x3c4de264,0x3c5567b0,0x3c6c7e7c,0x3c6ada02,0x3c74bfe8,0x3c76ae51,0x3c62ff4c,0x3c1d1bd5,0x3c379ee7,0x3c35c118,0x3c42a55c,0x3bda6ba7,0x3c3706dd,0x3bbda3d8,0x3ba8552c,0x3b164755,0x3bc79eff,0x3b9ec0a2, +0x3c18e9c1,0x3bcc2d6d,0x3c4fd6ed,0x3b882065,0x3bdf3f44,0x3b8c4951,0x3bd6edc3,0x3c0f340a,0x3bb55cc1,0x3bfb14ab,0x3c2ef399,0x3c74efca,0x3c70638e,0x3c82c091,0x3c8266d7,0x3c776877,0x3c57a504,0x3c4e787a,0x3c4f02db,0x3c622b78,0x3c7d378d,0x3c86531f,0x3c82fc44,0x3c87a16c,0x3c669958, +0x3bea9226,0x3c399764,0x3c476d1b,0x3c367f33,0x3b915a30,0x3bd3a7d9,0x3c059674,0x3b3c4795,0x3aa72e5e,0x3badf5dc,0x3b8fc417,0x3bcf42a8,0x3b9fb15f,0x3bd8083b,0x3bcf84c5,0x3b388f46,0x3b5fab57,0x3b9cf246,0x3c0104bd,0x3c0994c5,0x3c0b7b50,0x3c384229,0x3c87c07e,0x3c7df6e1,0x3c91cb4d, +0x3c9b8ce3,0x3c990e5f,0x3c761544,0x3c66172d,0x3c711704,0x3c9481c4,0x3ca05595,0x3cb29f57,0x3cb60316,0x3cb38ed2,0x3c8c3d76,0x3bbe7599,0x3c36cace,0x3c36fb11,0x3c3e46d2,0x3c1aef77,0x3c32614e,0x3c25d6f4,0x3b6bd864,0x3aa8d3e8,0x3b0ff719,0x3b93991b,0x3be6fe4f,0x3be7908a,0x3b97c46a, +0x3b4c4aee,0x3abfe8f9,0x3bb934ea,0x3bc48ba2,0x3bfa363b,0x3c1f345d,0x3c074494,0x3c695051,0x3c8e1ccd,0x3c9d449d,0x3cadc346,0x3ca98d02,0x3ca0bbff,0x3c6e02e1,0x3c664714,0x3c7097bb,0x3c811d90,0x3cb1a367,0x3cb11e1c,0x3c972748,0x3caeecd2,0x3c6fc020,0x3b59eea2,0x3c2d44d7,0x3cb9cdd3, +0x3ca8102e,0x38bc71e3,0xbc01a3cc,0xbc136af7,0xbab17aff,0x3bf6cfa9,0x3c2267bf,0x3c604331,0x3bcf4613,0xbaf4e1e8,0x3abc6263,0x3b3c6a6e,0x3bd28585,0x3bfdbdc1,0x3bf38932,0x3bbd69da,0x3bbe9dfd,0x3babbd81,0x3c18ab5e,0x3c635cfd,0x3c422beb,0x3c3cfaed,0x3c0dc3df,0x3c1bf810,0x3bbe55d1, +0x3cafcbd3,0x3ca82231,0x3c2bb2cc,0x3c464632,0x3c9027ac,0x3d03a3ca,0x3cd7d4f7,0x3ceb9f73,0x3d0719a8,0x3cff0166,0x3aa4b8c8,0xbbe02444,0x3c5c37d6,0x3cacd3df,0xbaa360cc,0x3c044c58,0x3b187cdd,0xbaa054ad,0x3b0778e4,0x3b9ed9ab,0x3bd79833,0x3b37db12,0x3aa1bb46,0x3b836a86,0x3bc058ae, +0x3c138160,0x3c04da9f,0x3bf2e7c5,0x3b63b553,0x3b9e23c7,0x3c921ffb,0x3c9cf3f7,0x3cb196b0,0x3c71bab0,0x3c41c15e,0x3c180b60,0x3beddd7c,0x3be3ec73,0xba4c0129,0x3c17e431,0x3bb2380e,0xbc803e48,0xbab7c986,0xba04a3fe,0xbbbaa339,0xba50c0ea,0xbb9282c9,0xbba1e0a6,0x3bbff582,0x3babb9f2, +0x3b8d34a2,0x3b116f87,0xbb2fbb59,0x3a9142f0,0x3a8d695d,0x3a837f15,0x3b5ce338,0x3b17e992,0x3b4a9e0b,0x3b39511e,0x3b8bdb05,0x3bccc262,0x3b48bc59,0x3b8b58da,0x3b8ca155,0x3bf4a8a2,0x3c44a231,0x3c4718ef,0x3c163822,0x3c7727fc,0x3c86f029,0x3c9170d8,0x3c9b0c32,0x3c841bfa,0x3c1bd125, +0x3c903b83,0x3cd3fa21,0x3cbfd182,0x3cc5b077,0x3ca12f35,0x3c5122f8,0x3a645c28,0x3be4df5b,0x3aed61c0,0xbbb3b9b2,0x3abb54be,0x3b063aea,0xba448468,0xbad7787b,0x3b8cc09a,0x3a80bbff,0x39d28e8d,0x3b182f73,0x3ae708e5,0x3b1a6931,0x3b196508,0x3b2b0fcc,0x3bb6e0e7,0x3b725cac,0x3b538922, +0x3b6c084d,0x3bbd9da2,0x3c169326,0x3c276017,0x3c04ea82,0x3c708f84,0x3c8f7745,0x3c92ba8d,0x3cb15fdc,0x3c93601d,0x3c487e5f,0x3c757e9d,0x3cb10365,0x3d02d81d,0x3d0f3c45,0x3d167685,0x3d1b641d,0x3c8470a8,0x3c893e63,0xbb89b5bf,0x3b11e120,0x38cddac7,0xbb9d5246,0xba9dba46,0xbaf0d77a, +0x395de3b5,0x39db90d1,0x3af13c6a,0x3b002309,0x3a9d4994,0x3ac109f1,0x3b81e0b5,0x3ba1113d,0x3bbda99c,0x3bb19921,0x3bd71fe0,0x3baf29ed,0x3b9c8adb,0x3c2dad0b,0x3c64836f,0x3c8382b8,0x3c5356bd,0x3c1d1a78,0x3bbe7c18,0x3bc61d51,0x3b7ce658,0xbb6ae393,0xbabc7015,0x39ccfb25,0x3a913ceb, +0x3cb94412,0x3d029836,0x3d26f9f9,0x3ccfb8c3,0x3cdd95af,0x3ba6e78f,0xbcb7fbd7,0xbc34481a,0xbc83e5a4,0xbc399bfa,0xbc0d3eff,0xbb9fc105,0xbb96be9d,0xbba3f153,0xbb4e62c8,0xbb317576,0x3a39a34e,0x3ba2a411,0x3b23544d,0x3b571443,0x3b6bb926,0x3bc014a2,0x3bd1d4d8,0x3b16ffbd,0x3bc4d4d5, +0x3b8ddc42,0x3ba305c5,0x3ba94917,0x3be35721,0x3c2a631a,0x3c4aac15,0x3c523d5c,0x3c7032ae,0x3c64ec36,0x3c6fff7b,0x3c83cc32,0x3c7ad9dc,0x3c7b3b3b,0x3c96cc47,0x3cad59bf,0xbb83bcba,0xbc164e22,0xbc900d41,0xbc4da363,0xbc00ff55,0xbb33fe79,0xb9d3c89f,0xbb831dbd,0xbb3bda97,0xbabdb971, +0xba6c3be9,0x3b70b380,0x3ba22f68,0x3ba0fe17,0x3b792808,0x3b60f552,0x3b83e51d,0x3b3abcf3,0x3aa1619d,0x3b22c97c,0x3bfd8e77,0x3c1e35de,0x3c085ba5,0x3c10379d,0x3be1badc,0x3bc2e3ae,0x3b578cbb,0x3a8c38f6,0xbab035eb,0xbb22600a,0x3a29df43,0x3c2acdb7,0x3c49b66d,0x3c44c53e,0x3bbf1077, +0x3916a4de,0xbb2a4c7a,0xbc45324e,0xbbd0e47e,0xbb939d5f,0x3a244c3b,0x3b443de5,0x3b184342,0x3a63b746,0x3acb7ad2,0x3b119ea7,0x3b8a9908,0x3b8019ba,0x3b91da6e,0x3b80cc30,0x3b62608a,0x3b01b332,0x3a9e7828,0x3a9b7c5f,0x3ae4492a,0x3905a37b,0x3b70fc6e,0x3b38d3fb,0x3b0647b1,0x3ad56115, +0x39cd7352,0xbaa01037,0xba560769,0xba42ed43,0x3a330760,0x3988e6f3,0x3b1fa536,0x3be17d74,0x3b83f17e,0x3a144e11,0xbb1f930f,0xbbbc0d14,0xba9acb25,0x3ad5806c,0xba92de77,0x3ac7a7de,0x3a4b6565,0x3a1c8428,0x3affd0be,0x3b95fdfe,0x3bc18ea6,0x3bd4c90a,0x3c06fae1,0x3be6ceb7,0x3b64dd8f, +0x3b9465bb,0x3912dac6,0x3ae29369,0x393e2a9e,0xb9d44328,0xbb3e8ca0,0xb96bd7d5,0xbb2b65d4,0xbb62450e,0xbb898d6b,0xbbb86bfb,0xbbd542da,0xbc044206,0xbba3891f,0xbb5db6e4,0xbacb48e1,0xba37e68c,0xba4a4b7f,0xba7d9e62,0xbb1e56df,0xbb269a6d,0xbb3365ee,0xbab97b36,0xba5dc23a,0xb9a770dc, +0xbbbcc189,0xb9ed9069,0x39ee58fc,0x3a4c0215,0x3b3fbbd1,0xbad32e1c,0xb8b3a7f3,0xbb0e36fe,0xbb623b3a,0xbb2bce51,0xb9be66c7,0xbac280e2,0xb83000a2,0xbac5eb08,0xbbab4a20,0xbb14f478,0xbbe6d3b9,0xbbc27418,0xbbeb2d0b,0xbbf8e1e1,0xbc0bc6c7,0xbc179b6f,0xbc1ddee5,0xbc245166,0xbc250c4a, +0xbc151b06,0xbbf97a22,0xbbd75e6d,0xbb8312af,0xbad4803c,0xba96a85b,0xb92617ce,0xba1d4fb1,0xba1514d4,0xbae0efa1,0xb9b1f5b2,0xba913da6,0xbbb9a2f3,0xbc25a9ea,0xba655f7e,0xbb7dac8d,0xbc0f0c0c,0xbc19d853,0xbc13c62b,0xbc137447,0xbc23fc35,0xbc402640,0xbc46f9f5,0xbb7aed26,0xb9b9f453, +0xbc33238d,0xbba7a28f,0xbac6b1b4,0xbb0f858b,0xbb1f0238,0xbb38afc9,0xbb48c2dd,0xbb5cbc5a,0xbb7038e9,0xbb7b5a8f,0xbb5bb44c,0xbb2c55b6,0xbb226131,0xbb0fbb0e,0xbb16dc46,0xbb250184,0xbb324f59,0xbb1b9b4f,0xbb0f08fa,0xbaf7f9c3,0xbbaa62ab,0xbb928d60,0xbb730e68,0xbbfacffb,0xbb0b0390, +0x3bfc78e9,0x3c5b1bc6,0xbb39fd0f,0x3ba9351c,0x3c5fd650,0x3c71c3b9,0x3c7e240d,0x3c6238e6,0x3c6cc545,0x3c893e04,0x3c63bbe7,0x3bbc50fc,0xba976f48,0x3c73b4c4,0x3c03c15f,0x3835acc8,0xbbd503c0,0xbb8aacd2,0xbba172c7,0xbba2c411,0xbba66445,0xbba30af1,0xbb9b5827,0xbb9c1083,0xbb9f856e, +0xbb9e4552,0xbba6a282,0xbba4dc0f,0xbbab7d9b,0xbba54dbf,0xbb98740f,0xbb7f1228,0xbb881ce4,0xbb67e40a,0xbbdba79a,0x3c6a3062,0x39c789de,0x3bfe2b6b,0x3a55b311,0x3aa190bd,0x3b86ebbe,0x39b084a8,0x3b791500,0x3b9f203d,0x3b8c6b97,0x3a8e2268,0x3b7df673,0x3c2da66c,0x38f0a189,0x3bbb4ac8, +0x3b028270,0x3bf85c5c,0xbb9c9276,0xbbb49b57,0xbbc14510,0xbbe2b370,0xbbd6170b,0xbbdf36f4,0xbbf6ed65,0xbbf3472a,0xbbf5ef5f,0xbbe83945,0xbc06cb28,0xbc03fe86,0xbc010153,0xbbf3e0fd,0xbbd4a031,0xbb8c35b7,0xbb616c52,0xbb95ccf9,0xbba8b104,0x3babae67,0xbb2a23db,0x3b8e9199,0x3a097586, +0x3b65e568,0xbb2afd9d,0x3b9fda89,0xba0697a3,0x3b9f5bfc,0xbb0ae636,0x3bc4eaee,0xba5accd6,0x3b27ca46,0xb91818a7,0x3b25d705,0x3b9a3a20,0x3b884896,0xbabbc6be,0xbc0b21b0,0xbbdf11fc,0xbc1f2df5,0xbc0bc48d,0xbc0b6c33,0xbc0acc35,0xbc097b48,0xbc0bee8f,0xbc0dcc47,0xbc1bae0b,0xbc28feb5, +0xbc27033d,0xbc16aa0f,0xbbe0c708,0xbb3ab76d,0xbb468d9b,0xbb276fcf,0xbb7e8223,0x3c0f3fb9,0x3b3d89ab,0x3b9fb0af,0x3aceec9e,0x3acaa447,0xba2a7386,0x3b3cc851,0x3b82f16e,0x3b94c5f6,0x3b932c8d,0x3b9852b8,0xbb175c46,0x3b2da61e,0x3a5b1754,0x3b70ad6a,0x3b59409e,0x3bc8b5c7,0x3b3e720d, +0xbc14727c,0xbbe4c118,0xbc3c74e3,0xbc2f77b2,0xbc4a485e,0xbc448940,0xbc413684,0xbc3cf0ba,0xbc29a9ac,0xbc5eef19,0xbc6634c7,0xbc555304,0xbc3f2621,0xbc065c79,0xbb56594a,0xb99cd634,0xbb56aee9,0xbbc1b7da,0x3bd91d32,0x3b44bff5,0x3b39174f,0x38937183,0xb956274c,0x3a548658,0x3b82ae47, +0x3bb5dd5e,0x3b8f5c60,0x3baa5197,0x3b1062a4,0xb94a1acc,0x3af0d5dc,0x3b27abfe,0x3bd25448,0x3a8505e0,0x3c403ee3,0xba0ccaca,0xbc11a244,0xbc1eb9c5,0xbc6d8dde,0xbc4a9ef9,0xbc443e70,0xbc3de5d7,0xbc393000,0xbc40cae2,0xbc3b2619,0xbc5529f6,0xbc721331,0xbc66949e,0xbc4eccb0,0xbc01c573, +0xbacd07a5,0xba3b8aed,0xbb3e62d5,0xbc2480b0,0xbb471430,0xbbbdf35a,0xbc1bddf5,0x3a0ef829,0x3b052513,0x3c04778b,0x3c39dc58,0x3bcf8395,0xbabec413,0xb8fd440d,0x3af5cee4,0x3bee44da,0x3bcfdd4c,0x3b51777c,0x3bc157cb,0xbb099755,0xba66cdcb,0xbbd7c37e,0xbc38bb03,0xbbc4a3f7,0xbb93628b, +0xbaa00768,0xbb4d8110,0xbb1aa75c,0xbb0c8bb8,0xbbf34ea1,0xbcae823b,0xbcabfa68,0xbcb3269e,0xbc509bee,0xbc4b8706,0xbc0dc04e,0x3b0a939d,0xbb40d505,0xbc81345b,0xbcbabed8,0x3cb54061,0x3c1454e3,0x3a0f33d0,0x3a8044f8,0x3b48a649,0xbb077d64,0x3a91d661,0x3b8f47b3,0x3bc44d5c,0x3b484fd0, +0x3acf31e9,0x3b2002b2,0x3b848b5e,0x3b9525f7,0x3b8de2c5,0x3b72e86a,0x3c18cc82,0x3b297350,0xbbb28c3b,0xbbb9e0ae,0xbc80ff8a,0xbbf3b3bd,0xbb40f39f,0x3bb02080,0x3b95f889,0x3b3f034f,0xbc0ec500,0x3980e7e4,0xbb17b3b5,0xbc98c53e,0xbc2e8bf9,0xbbf1ae51,0xbbd2245f,0xbc1d9aa4,0xbc36ec11, +0xbc7fade5,0xbb61951f,0x3b123b03,0x38dfeaed,0x3b0d2486,0xbaae7ca5,0xb98dbb07,0x3a705125,0xba2ed110,0x3b6396b6,0x3a450811,0x3adcee6a,0x3b598d50,0x39df4dd8,0x3b8d07e6,0x3a2342f7,0x39a90a00,0xba1959c0,0xbbb64123,0xba7ab480,0x39919cd5,0xbb8f220e,0xbc0e9562,0xbc537730,0xbc58097c, +0xbc3de794,0xbc0737eb,0xbc0f3483,0xbb85ef1c,0xbc0d4bc1,0xbc9bf69a,0xbca16eaa,0xbca20d3f,0xbc72399c,0xbc18b86e,0xbb9a0e1b,0xb9835598,0x3b1801bf,0xbaf4927f,0x3b722e20,0x3a3101a2,0xba322f20,0x3b135cc1,0x38da800b,0xb8d2d973,0x3a906f3c,0x39845f06,0x3aba59b4,0x3ad093ea,0x3a91243c, +0x3ada864c,0xba261c53,0xba4b524c,0x3b00a8dd,0xba22434c,0xbb1a4bd6,0xba56100d,0xbaf2088e,0xbc1023ec,0xbc51fb45,0xbc7d8e2d,0xbc6de0e0,0xbc44c175,0xbc4398b2,0xbc34b764,0xbc7499cb,0xbc897608,0xbcc74959,0xbccb1a98,0xbc9ed83d,0xbc17c49a,0xbc5b1c4b,0xbaee8872,0xb9603e77,0x39fa62ae, +0xbb8ad343,0xbb99ff01,0xbb57284d,0xba8e6818,0xbae5edc0,0x39cbc330,0x3a95e1c8,0xb9928cfd,0x3a6cbf25,0x3abc1fd4,0x3b5dc630,0x3ba13c33,0x3b8203a0,0x3b0eeaa5,0x3b941df1,0xbab3efa7,0xbb01ed4d,0xbb75b146,0xbbaf8284,0xbb6c3a65,0xbaad8c5c,0xba3590f8,0xba63c435,0xbb8af641,0xbc47b6ad, +0xbbe42f94,0xbc1093fe,0xbc56ca9f,0xbc80cae2,0xbc995889,0xbce1c19d,0xbc8fa429,0xbcc6ccd1,0xbb8f9fe9,0x3b89e6e4,0xbc9002b3,0xbc5eb357,0xbc38fb2f,0xbc158313,0xbc0247e6,0xbb8be1cc,0xbbbb2172,0xbb8a86e8,0xbb8b0691,0xb9adac11,0x3b4d30b8,0x3ae90fd0,0x3ad5717c,0xb8bb5571,0x3b64b2de, +0x3b60a485,0x3a98ce76,0x3a347b00,0x3bab6d4e,0x3ba38188,0x3b6e3174,0x37d8a686,0xbbdce63e,0xbbccdd41,0xbc1e9e58,0xbc7e9798,0xbc752a96,0xbc800472,0xbc9ce218,0xbcd05835,0xbcd4e2c3,0xbccc75c8,0xbc9e74c1,0xbcc712ed,0xbcb93ea9,0xbc60c95d,0xbc49ccea,0xbc102815,0xbb839eb5,0xbb8e8713, +0xbbced11d,0xbbee0aa5,0xbb964e06,0xbb8ded59,0xb849545e,0x3aa7f94d,0x3b2ecf95,0x3acd0d64,0x3aa11905,0x3a655350,0x3ac4d7cd,0x3b7a0c3c,0x3a99b2a4,0x3acd6126,0x3988db3a,0xbaabb5a4,0xbb0cbdca,0xbb513999,0xbb757b71,0xbba6d5e4,0xbba4f7fc,0xbb430a59,0xbbd7b878,0xbc400648,0xbcad5430, +0xbc689f20,0xbc535b56,0xbc8f7d6a,0xbca91752,0xbcb36e80,0xbc131939,0xbc48a499,0xbc149454,0xbb8efc4a,0xbbef911a,0xbb2a96b8,0xbb80277c,0xbb008b82,0xbab66f96,0x3b3144cb,0x3b0d2c99,0x3b82cd55,0x3b206c1e,0x3a91389a,0x3a785571,0x3a87cb12,0x3963c747,0xba88ac2c,0x39ec6e1c,0xbb407adf, +0xbab1d07e,0xbae57eec,0xbb2da800,0xbb89f404,0xbbb47cd5,0xbbe07bf3,0xbbf64813,0xbbd076c8,0xbc107042,0xbc24d0a3,0xbc645d43,0xbc45cd1d,0xbc4a7924,0xbc7a87a5,0xbc6bacdc,0xbc2fdad3,0xbc42ad06,0xba61fe61,0xbb8dd70f,0xb8df863b,0x3af7892c,0x3a147b8f,0xba2b4999,0x3b3a9a17,0x3b09f4cb, +0x3bd7f17b,0xbabe08f8,0x3b16d68d,0xba2a5cb1,0x3b0b850c,0xbab536cc,0xbb16db65,0xbb560a5c,0xbaf6830b,0xbbebd4fd,0xbbdb9e15,0xbbac427e,0xbb99755c,0xbba6ee78,0xbbb33241,0xbbcc8e2b,0xbbf27f33,0xbc157262,0xbc3bbe73,0xbc40f9a3,0xbc41ced7,0xbc42e1c1,0xbc4d8186,0xbc5ae545,0xbc5cb6df, +0xbc3b9ab9,0xbbee2b3b,0xbbdc155a,0x3aa5c8d2,0xbbaf2de2,0xbb980258,0xbb465ef3,0xbb97ee6f,0x3a74ea70,0xbb90054e,0xbb09dc3c,0xbb13ded0,0xba3e42fb,0xbb480e50,0xbad8b879,0xbb8ad04e,0xbb92e5ba,0xbb2b18f0,0xbbebfe99,0xbb8331f3,0xbbeef951,0xbbd4410b,0xbc146092,0xbc22a4e5,0xbc339b4f, +0xbc3cc560,0xbc4158d4,0xbc589f4b,0xbc5c84b6,0xbc60346f,0xbc7f870b,0xbc898d99,0xbc9d247d,0xbc86de38,0xbc4b6e57,0xbc321a8f,0xbc25b301,0xbc10e77e,0xbc1a6e32,0xbbd51879,0xba80ebbc,0x3b0435dc,0xbbd6e0d2,0xbb3050a1,0x3b2a499c,0x3b7eb500,0x3b5e2398,0x3b2d9fab,0x3b4126a9,0x3b7bb22d, +0x3b7fa336,0xbb617c43,0xbbfef7f5,0x3a8678ee,0xbb5b6b08,0xbbf5ec00,0xbc10a8ed,0xbc102ce8,0xbc0f4d53,0xbc0c145a,0xbc0c88b4,0xbc0ce450,0xbc0c1d51,0xbc12e222,0xbc17c333,0xbc22cc17,0xbc25635a,0xbc1faabf,0xbc263c52,0xbc22ceb3,0xbc21460b,0xbc20de3c,0xbc19b34d,0xbc66e6e8,0x3c0d12cf, +0x3bcf1223,0x3c24d64a,0x3b1d6460,0xbbc202eb,0xbbf2d773,0x3b534ccf,0xbb8054c2,0xbc1aabb6,0xbc1a321f,0xbc18ee50,0xbbfaa0fb,0xbc0282d3,0xbc23c1fd,0xbc04cf9f,0xbb914375,0x3ad9a683,0xbbfdaa45,0xbbb2a976,0x3a8097fc,0x3c16cc6b,0x3bdfc7dd,0x3beec5e8,0x3bf1c0aa,0x3bfe2022,0x3bfc9410, +0x3bee3bd3,0x3bea1764,0x3be6551d,0x3be75d5e,0x3be9352e,0x3be11094,0x3be6adce,0x3bda362c,0x3bd4bdeb,0x3bc17a62,0x3bd6dbcb,0x3c1272ce,0x3c09d981,0xbc245c15,0x3b504c87,0xbb30ecd4,0x3ae58242,0x3a3cee9f,0xba26094a,0x3b906c0a,0x3a66fa4b,0x397d6fd0,0x3aa4c655,0x3b9e3a55,0xba245f93, +0xbbe0ac62,0x3b24728c,0xba1177bc,0x3b1f6013,0xbb4fa9dc,0x3beb3769,0x3c103234,0x3c09d19e,0x3c1be8da,0x3c16d751,0x3c130c0d,0x3c165f34,0x3c13db7b,0x3c1ac9b1,0x3c29418d,0x3c23b58d,0x3c19a0fa,0x3c25e432,0x3c09ad67,0x3bf73483,0x3bbd2d44,0x3beebf26,0x3c182a56,0x3bdf9587,0xbb07e69c, +0x3bbe87ef,0xba27a442,0x3a90535e,0xbb1752f6,0x3b7bc153,0x393cf275,0x3c030b7a,0xba5eb7cc,0x3c381f54,0x3b1749bd,0x3b15bac9,0x3a1b1c8a,0x3b4795d4,0x3b93a2b3,0x3aa2d096,0x3a550afb,0x3baf1727,0x3c35aaa6,0x3c11a0d3,0x3c3ecec7,0x3c3b7f32,0x3c3f9a69,0x3c22e15b,0x3c1e5c6c,0x3c18e1bb, +0x3c352fd1,0x3c2467dc,0x3c1d308d,0x3c1dc869,0x3be4e5ce,0x3bb0d7ef,0x3b460ba4,0x3bdb7a87,0x3c431f4e,0x3bd135c7,0xbbb9f1f2,0xb941c25a,0x3b18ddac,0x3a145b3f,0x3983dcd1,0x3b37e720,0x3b5f0f27,0x3bb16eee,0x3b6c7725,0x3c00702d,0x3b9b3e38,0x3b3fc672,0x3981f655,0x3b4e76e0,0x3bc8002a, +0x3b89d483,0x3a906fb5,0x3b46f9b5,0x3c3eaba7,0x3c0fb6cc,0x3c46e431,0x3c525130,0x3c54ccc4,0x3c2164ca,0x3c29948a,0x3c335c92,0x3c804582,0x3c4b5da5,0x3c449885,0x3c600d71,0x3bf8444d,0x3b9d26bf,0x3ae4a263,0x3bb55b36,0x3c12830f,0x3bec7952,0xb9c6c41b,0x3bb4a7ea,0x3b8d6bc5,0x3acb2431, +0x3a63697b,0x3a55fb1a,0x3b7856b2,0x3bc32c90,0x3bd185e0,0x3bc0ec73,0x3b9ac197,0x39bb3e24,0x3ba26e16,0x3b9c5315,0x3bd100f8,0x3c2772c6,0xba3ae151,0x3be05b14,0x3c42a194,0x3c2cd4ff,0x3c6bbd8e,0x3c6d81b5,0x3c70579b,0x3c3a6063,0x3c3a69ee,0x3c3d687b,0x3c6b9685,0x3c61c558,0x3c2cb031, +0x3c172fbe,0x3b85df47,0x3a043f46,0xba818069,0x3bac3d24,0x3ca139f8,0x3c88e205,0xbc4249cf,0xbc86dcde,0xbc43f0d4,0xbba2cf63,0x3b896bb9,0x3bb7a512,0x3c5f329f,0x3c0f0987,0x36ac4c7d,0xb949fa6e,0x3b136070,0x3c095123,0x3bbb77f8,0x3bcc6c48,0x3afe4bf5,0x3b8c390c,0xbae3092f,0x3b5b0c50, +0x3c563f5b,0x3c46248e,0x3c86ca33,0x3c154cd1,0x3c345c58,0x3c52a0ae,0x3caaed73,0x3c8c0448,0x3c0b9f18,0x3c006b86,0x3c3ef50b,0x3cb656e8,0x3c9bdb63,0x3cac0182,0x3cb32dda,0x3cc90846,0x3bdb280a,0xbc872a0a,0x3bb600d5,0x3ccbdca6,0xbbdb0b4e,0x3bedd6e9,0x3b2c9a9b,0xbb0e8bf5,0x3b1b4a6e, +0x3b8cd90c,0x3be991e6,0x3b8d8b66,0x3b0f2241,0x3b8595be,0x3bcf4b34,0x3c2353fc,0x3ba1a4f6,0x3bb5cf02,0x3902edbf,0x3a4bcd48,0x3c5e3b46,0x3c3d9ae9,0x3c7a8a92,0x3c446322,0x3c1b2b5b,0x3be7ae00,0x3b53ae1d,0x3b6f32f9,0xbafe003c,0x3c0e8216,0x3b3f8eff,0xbc8e318e,0xbc0b05b2,0xbbb27acb, +0xbb82253b,0xba13f061,0xbab1bdc0,0xbc4702ee,0x3af98f76,0x3b3d2bd6,0x3a339cc9,0x3b985bef,0x3a6f7c7b,0x3acbf69d,0x3ae4a269,0x3ad73ea3,0x3b85b183,0x3b2dcf45,0x3b471c1a,0x3b6cdad8,0x3b159057,0x3b738fc3,0xba27bb92,0x3a191ee8,0xb92ff045,0x3b9dbdfb,0x3c122517,0x3bf40537,0x3bedfe64, +0x3c1b335a,0x3c355ce4,0x3c306a36,0x3c8244a5,0x3c73eff9,0x3c205c1a,0x3c9d2d4a,0x3ca9061a,0x3bfd5f61,0x3bf8406e,0x3bb11f1e,0x3bfc795c,0x3ad11a98,0x3b8dd784,0x3b303455,0xbbb9453d,0x3889da7f,0x3ac1cbd3,0x3ab02442,0x3a8656f2,0x3b2233ad,0x3aea1451,0x3aa4b20a,0x3b1642a1,0x3ad3b324, +0x3b081e37,0x3b1badca,0x3af90d0d,0x3b0da6e7,0xb96b954f,0x3a7ec605,0xba748e4b,0xb884a5a9,0x3bf2b066,0x3bba8fcf,0x3bc5bcea,0x3c021ff4,0x3c1422fb,0x3c16dc72,0x3c5d52bf,0x3c34a477,0x3beeb907,0x3c3331b5,0x3c71679c,0x3c9fd9ca,0x3c7b172b,0x3c76660f,0x3c9d2f83,0x3c0278c7,0x3bbea6b4, +0xbaf19e45,0x3afa78ae,0x3b15900c,0xbb9cbc5e,0x3823c5cd,0xbb03bc1b,0xbb642fad,0xba2e648b,0x39ada683,0x39e09d0d,0x3a8948e7,0x3a696559,0x3b376e0d,0x3b7157ca,0x3b8a1f5f,0x3b265194,0x3b5f5df9,0x3ac9eb60,0x3ba9e666,0x3c000312,0x3c1b3b93,0x3c317a26,0x3bf3bf86,0x3b8a9c21,0x3b0ddae5, +0x39cc51fb,0xbb566257,0xbc6780fe,0xbbf4aeb5,0xbbbbad15,0x3981bc25,0x3c0693cd,0x3c5998d5,0x3cad6542,0x3bdb8b2e,0x3c2a4bd7,0xbc002905,0xbcb01c95,0xbc5eb7b9,0xbc97881a,0xbc5eee7f,0xbc25950b,0xbbae2442,0xbb8762af,0xbb3e4a80,0xbb190700,0xbb3b454e,0xb9c4472a,0x3b7f8dcb,0x3ad4a539, +0x3b1ba3fb,0x3abe3a04,0x3b3de54b,0x3b0ebc7c,0xb92edd4b,0x3b5ef17c,0x3ae14469,0x3bd81cdf,0x3b97de1a,0x3b8c9a5e,0x3b6f1e72,0x3b25c470,0x3ae0d41c,0x3aecbd30,0x3aaac4c3,0x3b8dd4d5,0x3c2932c1,0x3bb551b9,0x3b7cefee,0x3bf1e415,0x3bd27d69,0xbbe13055,0xbc51f670,0xbca47453,0xbc76ae8a, +0xbc1d67ad,0xbbf25d0a,0xbba1aa6d,0xbc052b6f,0xbbc704e2,0xbbccb6ca,0xbb034435,0xba47d6b3,0x3aebd9de,0x3b604380,0x3af05b95,0x3ab12e47,0x3ac0cf0c,0x3b64cbdd,0x3b0ffa57,0x3b96143b,0x3bda5a7f,0x3bf028a9,0x3c00cc9b,0x3ba0273b,0x3b552532,0x3aa9c7c8,0x3a05b9d7,0x399de350,0xba711c3a, +0xb9120a5d,0xba88f97a,0xbae4d95b,0x3ae08632,0x3b133f59,0xb89894b1,0xbb97fd58,0xbb9b2836,0xbc966ab0,0xbc66bbc8,0xbc3fb1f0,0xbbfb92a3,0xbb4adcb5,0xbba2bfbb,0xbb82b617,0xbb57d0cf,0xba6545b3,0x3a5c20af,0x3ac3e596,0x3aae73ad,0x3b559cdb,0x3adf2e4d,0x3a6a6366,0xbaca0f2b,0xba2166d6, +0x3a40ca09,0xbb14c744,0x3b9e8733,0x3b84e363,0x3bb1f9ba,0x3b801b36,0x3b452042,0x3aae064b,0x3a8f9a5e,0x3a3741a8,0x3a94fd4f,0x3b04314c,0x3b65bd15,0x3b992812,0x3adbaf89,0xbabda2e2,0xbb30a25f,0xbbf735ee,0xbba2e6a8,0xbb97e6fc,0xbc14d26c,0xbbb80897,0xbc008ed2,0xbbdc69eb,0xbb7e7938, +0x396bcc5c,0x3a7af830,0x3b2c9fe2,0x3aff5fde,0x3b919eb5,0x3af4f80f,0x3b523605,0xbaaf1a35,0x3a188e03,0xba3d6e17,0xbaae7c09,0xbbce3cf5,0xba642043,0x3a89ccb1,0xb7bd6d21,0x3adbb594,0xb8ad5eb0,0xba5b7268,0xbb125621,0xba6af6da,0xba3ca71d,0xba83a393,0xb993c118,0x39ea8c60,0x3b012284, +0x396da95c,0xbafc96ff,0xbb680ef6,0xbb9ca77b,0xbb071a86,0xbaa30b27,0xbc057652,0xba48f6d8,0xba09c0b7,0xba3afda4,0x3a72d550,0xbb3c7bb8,0xba47991f,0xbb85158b,0xbba3a5dc,0xbba9a963,0xbb18f92a,0xbb5fae44,0xbb364eec,0xbb701672,0xbbd954ed,0xbae36933,0xbbdfe9da,0xbaa8da27,0xbb60df20, +0xbb82bc22,0xbba9937a,0xbbb53bfe,0xbbb55f3e,0xbbbfbc5f,0xbbb5873a,0xbba61acb,0xbb8acca2,0xbb8a50ed,0xbb8d9068,0xbb9d471e,0xbb8f729c,0xbb51402b,0xbb270cdf,0xbb044d30,0xbac8fcc8,0xb9cee03c,0xbb9ee4e5,0xbc1fafee,0xbc3631c5,0xbb8d771d,0xbc032219,0xbc2f0196,0xbc37b462,0xbc29170b, +0xbc1e809e,0xbc2c5c81,0xbc473c71,0xbc4dbc00,0xbbef55b6,0xbb14ed7c,0xbc327f17,0xbc0a6299,0xbb7d2f36,0xb9c63b38,0xba811ee7,0xba6a2eb6,0xba56f7a8,0xba6c2b93,0xba975fc5,0xbaa918e9,0xba9c77ce,0xba91ee35,0xbaa2d0bd,0xba9a6217,0xba7ab52d,0xba3f547a,0xba60e78f,0xba96171c,0xbabb8fb3, +0xbad1ba52,0xbb83c4a6,0x3ab32dd9,0xb96de6ec,0xbb787068,0x3bacdecf,0x3c33061a,0x3c0a0589,0x3b7dbb53,0x3c134d28,0x3c2ec4b2,0x3c32a24e,0x3c308162,0x3c14bdea,0x3c1bf861,0x3c2e915a,0x3c12c586,0x3c1fbf38,0x3bba8ece,0x3c0dd63e,0x3c28f73d,0x3bc5258b,0xbb399863,0xb9da51c3,0xba021852, +0xba0e8f32,0xba1fb5fa,0xba1ba67b,0xba01369c,0xba153cb4,0xba1547fd,0xb9d5b698,0xb9ee29b7,0xb9f35e40,0xb9d5047c,0xb98919ab,0xb924bedb,0xb9a417fc,0xb9903c95,0xb97df0a3,0x39f14992,0x3c6cbf9c,0x3b3190d1,0x3c03772f,0x3b8cc8ad,0x3bbf99e1,0x3bae2f62,0x3b081727,0x3bf295af,0x3bdf7095, +0x3c0e704c,0x3b9f004c,0x3bc673ec,0x3c19d9f7,0x3b8809a5,0x3c011729,0x3b99fc87,0x3c22d13b,0x3ace651d,0xba98dcd7,0xb8e74e99,0xb9e97923,0xb9325c5c,0xb94869ad,0x387fedc3,0xba046062,0xb9d8329d,0x39929f95,0xb9ec3479,0xb9e068e9,0x39027778,0x3a4b0961,0x3a3e8c69,0xb9ae9283,0x3a8ae633, +0xbb058302,0xb9110970,0x3c0d7070,0x3ae9312f,0x3bd8df46,0x3b7a14a0,0x3bd5089b,0x398f0f79,0x3bebf4e5,0x3ace407d,0x3c1c9527,0x3b1d00e8,0x3bee5c59,0x3b8f04db,0x3bab8420,0x3b51ab79,0x3bbf0926,0x3bc7e226,0x3be3fe5d,0x3ac1916a,0xbb40e37b,0x399ab672,0xba852440,0xb997cd0e,0xba48bf9a, +0xb925dd1f,0xba4334c2,0xba583228,0x3a42b3c3,0xb9612d30,0xb8a39172,0x3a0876a2,0x3ac68d2c,0x3abc2383,0xb9e90843,0x3a96571a,0xbaa2ea8a,0x3a972445,0x3c3a1619,0x3b9efef3,0x3ba34097,0x3b4348bc,0x3b2e7ff4,0x3afb54a4,0x3b46093f,0x3b8f5672,0x3b883e21,0x3bacded9,0x3bff484d,0xba80538a, +0x3b8db496,0x3b02a489,0x3bb1d30b,0x3b9c325e,0x3bfb6b6e,0x3b8be45e,0xbb76d627,0xb9b1a41a,0xba63da32,0xb824fdc0,0xb7ffb696,0x3a69d116,0xba180ab5,0xba14bd0d,0x3b1816cc,0xba3ad41f,0x39648998,0x3a95edab,0x3b542840,0x3b232c49,0xbb172943,0x3b2fcd0d,0xbb3c78af,0xbb45a965,0x3c04d0f6, +0x3b73117d,0x3b5817f5,0x3af05c8d,0x3a8ab03d,0x36866eac,0x3b5d0b2c,0x3bb3a912,0x3b31f757,0x3bbf7b0f,0x3b4d0557,0x3973a46f,0x3ad80a54,0x3b65414d,0x3c03b423,0xba094523,0x3c3bb9a4,0x39919a18,0xbb69f58f,0x389af785,0xba9b3833,0xb97514f6,0xb9e3b353,0xba4292ca,0xbace81b3,0xba9ae5e3, +0x3abab60f,0x3a569fb9,0x3a7e3de7,0x3ada219e,0x3b7b9738,0x3b3b2ac1,0xbb100616,0x3af13b14,0x3bbb4987,0x3b5eb490,0x3be3238a,0xbacce155,0xbbf57a6a,0x39eebcaf,0x3b3982d5,0x3bb559f2,0x3c4a60a3,0x3c15aea8,0x3a87194a,0x3955c856,0x3abfd7d7,0x3c0cd561,0x3bb25356,0x3b1eba1f,0x3be243ad, +0xba849a66,0x3b71f458,0x3a86a0c1,0xbb40a5a5,0xbabd8261,0xbb8c5061,0x3a8c2dd2,0x39491c1f,0x3ac40705,0xbb6a129b,0xbc247c45,0xbc85f799,0xbc7593bd,0xbc267a05,0x3ba8210a,0x3bb93bac,0x3bc6763a,0x3becb826,0x3b9ea3e3,0xbc6539d2,0xbcb16d73,0x3cd42c61,0x3c6a4135,0x3b270d26,0x3ba2fe4a, +0x3b801cd9,0x3a109293,0x3aa07ef4,0x3b85691e,0x3be7b642,0x3b885b2b,0x3b39c9fb,0x3b2c3c2a,0x3bc944d7,0x3bc87442,0x3b989c80,0x3b6927f3,0x3c013e86,0x3bc14028,0x3afcfe86,0x3bb3cf22,0x3aed1397,0x3b54b701,0x3b8b6c72,0x3c03c6d3,0x3bc5ec42,0x3b7e9821,0xbb874bc8,0x3bc4240f,0x3b9a85f5, +0xbc04a424,0xbb166a06,0xbafe658e,0xbb83e8db,0xbb933e4f,0xbb9e403e,0xbc814756,0xbb419052,0x3ad26345,0x3aa5e46b,0x3b95ecc4,0x3b2d9d97,0x3ab746d0,0x3b173335,0x3a6c1da7,0x3b7a07fe,0x3ad89e2c,0x3b2d2eae,0x3b4a4515,0x3b1f7e5b,0x3b86ad86,0x371a7694,0x3aa78f42,0x3b067be2,0xbafa4909, +0xb98bae27,0x3b37d809,0x3b050ba2,0xbac1ae93,0xbb7776e6,0xbb322dd8,0xbafc710f,0xb9fadef3,0xbba52d18,0x3ac9470e,0x3ac128a6,0xba842f7e,0x3b1f7515,0x3b3fb344,0x3b750d74,0x3ad1583b,0x3b9e2c88,0x3b1507a9,0x3a644340,0xba6a0e8d,0x3b334517,0x3b648544,0x3b28a039,0x399e4af6,0x3ab651b1, +0x3a3d85f3,0x3ae3e2d9,0x3a57f6b6,0x3af5b7ea,0x3afa8398,0x3a4249c9,0x3ad15316,0xba7b96fb,0xbac0afab,0x3b0c42e9,0x3b0620c9,0xbb27f07d,0x3a3db7fd,0x3aff80ad,0xbb4023bd,0xbb966023,0xbb71d4eb,0xba512219,0x3a44eb99,0xbb37c0ff,0xb7fe603d,0xbb045ee9,0xb8926aa0,0x39d36d81,0x3b656a74, +0x3c5031e4,0x3bdd5d70,0x3b79c7c8,0x3bcd2b5b,0x3bb1253d,0x3b013f0d,0xbaece30a,0xbb166d6c,0xbb3c0aad,0xbaeb81dd,0xbaf98b87,0xb9ddb63f,0x3aaf86e9,0x39aa15f5,0x3a935959,0x3a67e197,0x3b68d189,0x3b9586bb,0x3b28f48e,0x3ad8a2e6,0x3b6f8f72,0xb99fe499,0x3a59297b,0x3afb3081,0x3b159f08, +0x3b449088,0x3b46887c,0x3b55422c,0x3b2fa7ef,0x398f4c82,0xbb9b255d,0xb9a84f42,0xb8b29061,0xbbaed393,0x3b54811c,0x3bb947dc,0x3bbd3d3e,0x3bea1ec3,0xba8464ab,0x3b26c4e5,0x3accb589,0xbc2d1002,0xbc6fb346,0xbc3c7e8d,0xbc04e7d0,0xbbca783c,0xbaaf76b4,0xbaffcfd0,0xbad7db69,0xbb3e56cc, +0xba0faf2b,0x3b17c42f,0x3ae1dd9f,0x3ac0d0f4,0xbaad214e,0x3b89c8d5,0x3ba3b881,0x3b6c64c8,0xb76be142,0x3b11a0e3,0x3b85fe89,0x3b874579,0x3b63ef1e,0x3aeb72b6,0x3ac751a5,0x3a5f6c7a,0x3ad9511d,0xbba92881,0xbba54876,0xb9417794,0xbb173ca4,0xba8977e5,0xbab83235,0x3b3ca725,0xbc085cd7, +0xbc0c29f9,0xbbf1c069,0xbc0193c8,0xbb55ec63,0xbb93c73e,0xbbc47f2f,0xbbe3ec19,0xbc075839,0xbb9d5beb,0xbbb66d54,0xbb1a31f6,0xbab94178,0x3b00f868,0x3aca2f65,0x3b2c0742,0x3b0674ec,0x3b4fece6,0x3b9a61f9,0x3af6a797,0x3a9d3b11,0x3aec2419,0x3b534c35,0x3b2f4695,0x3b3244af,0x3a262532, +0xba8b9cfd,0xbb397c70,0xbb97ec93,0xbb90487d,0xbbf67794,0xbc724d0a,0xbc65ddbf,0xbc3c7978,0xbc0bbe6b,0xbc01c33e,0xbc72c121,0xbc198ca7,0xbc10a8b3,0xbc03f64c,0xbb8d29a8,0xbc07d4b4,0xbb8f64ca,0xbbb78810,0xbb59df90,0xbb699553,0x39bf37af,0xba7ca4fb,0x3add1311,0x3b039c36,0x3a9b5ab2, +0x3a9508e9,0x3ac18df8,0x3b0cc0b5,0x3aa847e8,0x3b2ba4f0,0x399ff480,0x3b0c0259,0x3b5ebd2d,0x3b219158,0x3adb0ddd,0xb92894a5,0xba639ab6,0xbae1ce38,0xbb15cf8b,0xbb3384db,0xbb59033f,0xbbb0830e,0xbbe437fd,0xbc0c3cb5,0xbc23b885,0xbc2dbd33,0xbc2ecd37,0xbc3d4ca2,0xbb860e40,0xbbd7eb0b, +0xbb837ee6,0xbac5b0b2,0xbabf80fd,0xbaeea5f0,0x3a9a0be6,0x3a5c3a53,0x3bc4788c,0x3a4a5a24,0x3b3da3ef,0x3b23ecdf,0x3b268de4,0x39a0c3ba,0xba60e0a8,0xbaa562e3,0x39edf23b,0xbb0509d5,0xbb1cab56,0xb9f472a1,0x3989aa71,0xb9d9657d,0xba9af6d4,0xbad62e64,0xbb0a0631,0xbb264b7a,0xbb3f9e8e, +0xbb4e40e2,0xbb2d00e7,0xbb07c94d,0xbb6a9880,0xbbb4a5fe,0xbc0304c7,0xbc0c95be,0xbb7cb72e,0xbb781a7d,0x3ad4d4f0,0xbb13e7ba,0xb982a4fd,0xb94a006a,0xba9a9c42,0x3a7a918f,0xbb03e2c5,0x3a0af9b2,0x39a057ba,0x3afd05b6,0x3a2bb862,0x3b00d4de,0x3ad84028,0x3aa7f153,0x3aabc99d,0xbab86133, +0x3715f6dd,0xbba51d76,0xbba0d59e,0xbbc141ef,0xbbd5e4db,0xbbd77fbb,0xbbd07f00,0xbbd05a7d,0xbbfb68cc,0xbc0b6bc8,0xbc118353,0xbc21c368,0xbc2f0959,0xbc403610,0xbc2cc50f,0xbc0936c1,0xbbde0b92,0xbbbec49a,0xbb9d187b,0xbbaa5b8f,0xbaafdc49,0x3a8aa1a9,0xba1ee3f1,0xbab79a9d,0x3a93416d, +0x3ac64b4b,0x3b1c6131,0x3aee800c,0x3a961339,0x3ab31572,0x3ae279ab,0x3ad89926,0x3acdbb67,0xbaa98991,0xba0aa64f,0x3a63ba4c,0xbab3aa07,0xbb97e6d6,0xbb7bc9bf,0xbb75eda5,0xbb6bfeaa,0xbb6f91da,0xbb780032,0xbb70d529,0xbb720e69,0xbb6d5c60,0xbb78c7c7,0xbb75b573,0xbb6f3afe,0xbb6f957b, +0xbb727622,0xbb849589,0xbb91ac34,0xbb99539d,0xbbb7c616,0x395d3cad,0x3a18b988,0x3b1ebace,0xbb9f2678,0xbbc6e50f,0xb8658630,0xbb63d644,0xbba82db1,0xbb30318c,0xbafee553,0xba91341f,0xb8b02dfc,0x388c4538,0xb8dce9f6,0xb8aaf871,0xbbb489f3,0xbb96839b,0x3a8a843d,0xbba161cb,0xbb8ee3c6, +0x3b0b5c33,0x3a3a17ed,0x3a0dd6bb,0x3a4551ff,0x3a5cae7e,0x3a5e7f16,0x3a3a67de,0x3a1afcd5,0x3a03b64b,0x3a47eea1,0x39c72af7,0x396d123c,0x397b5263,0xb985c4e6,0xb9710de5,0x3922a22a,0x39dea898,0x3b11e568,0xba9cadd3,0xbbd008ce,0xb9ddbc63,0xbb0d64c7,0xbaac5a15,0xbb30e2c7,0xba784eb7, +0x3ace1a7c,0xbafac24c,0xba50925e,0xbad4395e,0x3a7c6675,0xbabcf854,0xbb249a1a,0xbaef0874,0xbb0369bd,0xba805548,0xbb8a7048,0xbb029ca9,0x3a55d61d,0xb9ab340a,0x39d3e7b8,0x390cc5aa,0xb92652eb,0xba269fa3,0xba1fd6c3,0xb97ead0c,0x3aa6a00c,0xb9cd4b62,0xba86e38e,0xba38daa8,0xbb381e52, +0xbb2f985b,0xbaaa842b,0xb974f591,0x3b1748ac,0xba87d3f6,0xbbb416b9,0xba956a76,0xbb39f89a,0xbac3c4e0,0xbb37fc8b,0x3956802b,0xbaa6f9fa,0x3b6805ac,0xbb5959d2,0x3b9e29f5,0x3b2071b0,0xbad175af,0xba89855d,0xba3e2774,0xb9446593,0xba3e58f7,0xbb407d9b,0xba4bcd64,0x3a5cdc27,0xbaa1daa1, +0x39729387,0x3852be88,0x39f46356,0xba5468cf,0xba955fa3,0xba9c0b15,0x3a9935f0,0xbac52378,0xbb330098,0xbb2678ca,0xbbc85598,0xbbbbdbeb,0xbb2bbb67,0xba4f4d78,0x3ba98955,0xba31fc9f,0xbbe97e6d,0xbb4f2ada,0xb9d7de17,0xb799548e,0x3a45196c,0x39489c61,0x3b32dee7,0x3b86a097,0x3b50266e, +0x3bf4606a,0x3b72a173,0x3afbe64c,0xba33d9f3,0x3a8b8d26,0x3b3411fc,0x3a0ad4f9,0xbb26c87b,0xbb3a61c3,0x39a0397b,0xbb00b6a2,0xba61b83a,0xbaa1856c,0xbb079d6b,0xbb86635f,0xbb567582,0xbb2337bd,0x3b49307e,0xbb36b7e1,0xbb9ffe43,0xbb5ff9db,0xbc2da2f5,0xbc16ea4f,0xbb892c02,0xbaea41d4, +0x3b3220b3,0xb8f57b3e,0xbba7f96a,0x39bf10fd,0x3944cbc4,0x38b2b964,0x3a441573,0x3a1c7703,0x3b5409e9,0x3b9099cd,0x3b9b6bee,0x3bda40b0,0x3bac22b5,0x39a31f3c,0x3b4ef7ea,0x3b4fd932,0x3b9e1b68,0x3bc9f721,0xbb50ce92,0xba95c0f1,0x38e7377d,0xbb4e83f9,0xbacf3991,0xba869bb9,0xba905197, +0xbb12aa64,0xbb335fa7,0xbb055a3a,0x3b48e295,0xbb2495d8,0xbbcff686,0xbbbaf10b,0xbc6bfa79,0xbc562f4a,0xbba03ac7,0xbaad426d,0x3babd4c2,0x3ba63d9e,0xbc471bcd,0xbc64e5fb,0xbc48bd34,0xbb8603f3,0x3ad77c27,0x3b0f8446,0x3c4011d5,0x3c26b119,0x3b304b6d,0xba6a04e3,0x3ae498d7,0x3c10e786, +0x3b70febd,0x3b552210,0x389c3378,0x3ac7a94d,0xbb967b56,0xbb1e92a8,0x3b859bfd,0x3bb16800,0x3c3a2e39,0x3bd7efb4,0x3bff84d8,0x3c81d833,0x3c0b8b39,0x3b0a56eb,0xbb95069c,0xbbb378dc,0xbb7c3999,0xb9cff102,0x3b7aada4,0x3bc2cabb,0x3baed09f,0x3bacb61b,0x3b94aa30,0xbcb5a957,0x3a0f5a7c, +0x3c83c02a,0xbbee3d97,0x3b838476,0x3b6b4520,0xb9d1a49e,0x3b044327,0x3b368b93,0x3bde36dc,0x3bb53a15,0x3b6deea3,0x3b617064,0x3bbb767b,0x3bfd931b,0x3afabf12,0x3b34511c,0x3a87ff01,0xba341289,0x3b08ca75,0xba51bfc1,0xb99a598b,0x3b301952,0x3b41bfc2,0x3b8c019a,0x3a1e3ae5,0x3a990446, +0xbb3f8b2a,0x3bb16d08,0x3a278c51,0xbc443270,0xbc3e8bee,0xbc191a6b,0xbb8455bd,0xba6f1331,0x3a6f3dab,0xbc8a4b03,0xbb96c105,0xba95b115,0xbadaec1e,0x3b8a6821,0x3b25f7dd,0x3a75c638,0x3ae46296,0x3ab85d1b,0x3b84fb7e,0x3b29348f,0x3b39df7d,0x3b8598e8,0x3a0eb48b,0x3a907b1e,0xbb34c68a, +0xbb0290bb,0xbb5c290e,0xba8e86c1,0x3ad6efcc,0x3a3564fc,0x3b372191,0xbaa5abe7,0xbaab234e,0xbb2dc2be,0x3b20bf89,0x3b8172ee,0x3b917927,0x3c25cf44,0x3b929743,0xbc40b127,0xbc609ba0,0xbc5425f5,0xbb7950e1,0x3a500b65,0x3a96723c,0x3b37cb75,0xba6ecbaf,0xba479f77,0x3a12f955,0x3b1f8a11, +0x3b1eaebb,0xba3cefb8,0x3af02bab,0x3af522cf,0x3ada5574,0x3ab6952a,0x3ae1f192,0x3b2b7762,0x3a70ffbd,0xbab25357,0xbb3c599d,0xbac483ab,0xbb56f307,0xbb8600f7,0x3b1e36ee,0x39ce660c,0x3b5ca0b2,0xbb81dbc6,0xbbd9fe5d,0xbbe64520,0xbb7c050e,0xbb31560b,0xbacdee6d,0x3a6915e4,0xba6d1f37, +0xbbe1ba54,0xbc528b2c,0xbc6daaec,0xbc2ca2cb,0xbb1ebb0e,0xbbffba58,0xba08bd2d,0xb8becc08,0x3adcc659,0xbbb067f4,0xbb174364,0xbb5c1095,0xbb85446b,0xbaaa3383,0xb9d2467a,0xb9c4e6fd,0x3a7b5899,0x3a3f701c,0x3a90f793,0x3b04cfc7,0x3b248007,0x3a7dbb1c,0x39d2dace,0xb989d4f5,0x3b684c60, +0x3b1e9859,0x3ab2ca19,0x3a88ed1a,0xbad41a81,0xbb271a4a,0xbadc9afc,0xbbb22aa7,0xbc1032ab,0xbc824de1,0xbc1f436e,0xbc1471e5,0xbb474bf1,0xbc1f52c5,0xbc40c113,0xbc5da663,0xbc5a2492,0xbc84982a,0xbc86903f,0xbc483e08,0xbc8aa4e4,0xbc8dcb8f,0xbc7d7398,0xbc4b9c49,0xbbf5724f,0xbb92a264, +0xbb0fe107,0xbae459fe,0xbb103de8,0xba4da538,0x3a95f2b9,0x3a2bb96e,0x3a95c907,0xb919ef2c,0xba2fc9a7,0xbaf2bb78,0xba9fc3fd,0xba07e591,0xb9b356b1,0x3b6f932f,0x3b047303,0xba2299df,0xbbbc9829,0xbc05e438,0xbc253e44,0xbc40ee9c,0xbc5f3bdd,0xbc43a2b7,0xbc005c7d,0xbc4e9002,0xbc661801, +0xbc4f3895,0xbc800394,0xbc634048,0xbc8103df,0xbc7574dd,0xbc40cf43,0xbc00ff65,0xbc0bad15,0xbc0040d9,0xbc1d9ffa,0xbc059a09,0xbc0c9039,0xbb8e6768,0xbbacbad1,0xbb150187,0x3a96881c,0x39ad28bf,0x39a66f47,0x3732a718,0x3b2fa8ca,0x3b371efa,0x3b8f9eb4,0x3b26db5b,0x3b099186,0x3b8091c3, +0xba113c41,0xbadd8907,0xbb87cfef,0xbb7034c4,0xbb5b3349,0xbb67178e,0xbb86bec8,0xbbe80844,0xbc417534,0xbc4e750f,0xbc599765,0xbc3fcd58,0xbc5deede,0xbc450145,0xbc8de6a5,0xbc8a50a5,0xbc6a268b,0xbc3eadb6,0xbc09c533,0xbc0d734f,0xbbd7d3e1,0xbbbbbecb,0xbb5d75a1,0xbae226d3,0xba4c6ae6, +0xb9a1f8d0,0x3b145ff2,0x3a0590e8,0x3a288533,0xbae2344a,0xb9e0da4c,0x3a0ba64e,0xba2224bc,0x3b762619,0x3b5bf09d,0x3bb6c3d4,0x3b515590,0x3b0b6bed,0x3a0890a1,0xb9cb05ba,0xbabbf5a6,0xbb2a79b1,0xbb2abd87,0xbb56a710,0xbb9dfcc1,0xbbf92964,0xbc1758da,0xbc183cbd,0xbc42c4fd,0xbc23b2a0, +0xbc45cd03,0xbc4e3b4e,0xbc2e4454,0xbc3db238,0xbc12e55d,0xbbcae6ce,0xbb3264d5,0xbb013b42,0xba5ada4c,0xbaabc5e6,0x39111b24,0x3aa64e66,0x3aa417c5,0xb962428b,0xb9acbfbf,0xba879475,0xbaa5995c,0xbb8406cb,0xba95174a,0x3b1fcfcc,0x3ac7db84,0x3b72fe9f,0x3b28acf1,0x3b1ba096,0x3ad9e09c, +0x39a7e63e,0xbaa25c38,0xbb5d3356,0xbb71c9c8,0xbb6cd09a,0xbb453a57,0xbb79a191,0xbbcaace3,0xbc094a5e,0xbc23cf93,0xbb8c498c,0xbb714069,0xbbbb90ca,0xbb221848,0xbb200392,0xbb36fe98,0xbb3c6232,0xbb3c1b0e,0xbb253785,0xbb7ec6e7,0xbb7dc57d,0xbb80de7c,0xbb36f823,0xbb19c9a8,0xbb6fa4ec, +0xbb824af4,0xbb90f258,0xbb3e9811,0xbba3a51a,0xba72e993,0xbb04165d,0xbb1b26df,0xbb40522a,0xbb3ecc2d,0xbb32a68b,0xbb3620ac,0xbb2753b1,0xbb37b0bd,0xbb42da04,0xbb863787,0xbbbc49c6,0xbc025bf5,0xbbfc050f,0xbbd290dd,0xbba92b7a,0xbb9cb4c9,0xbb262d08,0xbb235213,0xbbcc8d7f,0xbbeb50ac, +0xbb995362,0xbbb76c13,0xbbd581f8,0xbb994539,0xbb90231f,0xbb726fb1,0xbb496fec,0xbb4d9b30,0xbb619089,0xbb6510cd,0xbbbb588c,0xbb6fbb1f,0xbb640f62,0xbbc6a2f1,0xbb91bf3b,0xb99cf010,0xba555a44,0xba1492de,0xb9c05354,0xb983a5f6,0xb9a434f4,0xb9b32ec3,0xba366537,0xba9d1f42,0xbaceb447, +0xbae6b698,0xbacd6fdf,0xbabdce88,0xbab4adf7,0xbaee22c4,0xbb191d16,0xbb2cfec7,0xbb4f8bbd,0x3bf94ba5,0x3b8f7be5,0x3b88de98,0x3c11d015,0x3bccc37c,0xba9e8add,0x3c013065,0x3bce8429,0x3a2d5b44,0x39437e2d,0xba00b7ff,0xba57036a,0xba5b1b4d,0xbadd847b,0xba9651a9,0x3bd87c2f,0x3c088024, +0xbb156b08,0x3bae2434,0x3bfe0aea,0x3b882f86,0x3b9bd097,0x3bac6070,0x3baaeb6f,0x3bac3743,0x3ba72347,0x3b9c7f62,0x3b99d534,0x3b9d89a6,0x3ba984b8,0x3bae0ba5,0x3baa4d51,0x3bb2a777,0x3baf5341,0x3ba7c417,0x3b89563e,0x3b982d82,0x3ba73aa6,0x3c0bd0c9,0x3b9c3ecb,0x3b913a66,0x3b800c53, +0x3bb60a4d,0x3be0b39a,0x3b73160c,0x3b833a3f,0x3be64a21,0x3bb0f4cd,0x3c09e94d,0x3be7fe77,0x3ba13078,0x3b0e01a5,0x3bbdfa76,0x3baa7570,0x3ba92b72,0x3bc5e035,0x3c0179a3,0x3bb6d348,0x3be3f7aa,0x3bf23401,0x3be90137,0x3bdfcbc5,0x3bedb055,0x3bd16a5f,0x3be3e4c6,0x3c0bb896,0x3c09d89a, +0x3c05ef31,0x3c0f55f4,0x3c0c9b79,0x3bf924c7,0x3b8d936a,0x3bc174cb,0x3b81664a,0x3bdae486,0x3bde8ef7,0x3bd62ee3,0x3bb12094,0x3bad03f1,0x3bad95e2,0x3b7d6de9,0x3bc1672b,0x3baf5e4f,0x3c0d53c1,0x3c0d6a4f,0x3bc72e5d,0x3bef2ee6,0x3ba7cbe7,0x3ba39063,0x3bc97184,0x3b9767b2,0x3bc997d0, +0x3baa7ac3,0x3bd50043,0x3c0ac560,0x3c19a854,0x3c12d3d3,0x3c0073a7,0x3beaa9c2,0x3bc9936f,0x3bd94812,0x3c2ac0c4,0x3c1d6137,0x3c2b2d51,0x3c30ce38,0x3c28bc6e,0x3c0166a8,0x3b0ecdb0,0x3bb5ac51,0x3b9461af,0x3bfc4311,0x3be28775,0x3b9f34bb,0x3b88b0c2,0x3b5e7ce1,0x3b4abe96,0x3b8ca930, +0x3b6c224f,0x3ba53f61,0x3b82a924,0x3be305c6,0x3c0e8e9c,0x3b22ecaf,0x3b86322d,0x3b4222a5,0x3ba6a99c,0x3ba229ce,0x3bc0a78f,0x3ba364f6,0x3bd0ca4f,0x3c02e847,0x3c347b71,0x3c32e163,0x3c33dc08,0x3c1d9390,0x3bff4596,0x3c0c41d6,0x3c7162d5,0x3c4ddd2f,0x3c6782b8,0x3c6d946e,0x3c6005ab, +0x3c1cae08,0xb9493c92,0x3ba81eef,0x3b2e60c9,0x3b93223b,0x3bc1ce16,0x3ba7279b,0x3b93e59e,0x3b61fe34,0x3b19a8c0,0x3a29def9,0x3b569f97,0x3bab7cc6,0x3b5347fc,0x3bd6c161,0x3b9d8033,0x3adbf7c8,0x3b3f8277,0x3b90ee65,0x3bdec539,0x3aff25e8,0x3bbd0a1c,0x3b843801,0x3bdba8df,0x3c386740, +0x3c5c708c,0x3c4b87fd,0x3c2cc405,0x3bf9635f,0x3bbda63a,0x3bff0377,0x3c65e2ed,0x3c6bfee6,0x3c7eaa61,0x3c732abd,0x3c6c1aee,0x3c06c757,0xbb115908,0x3b920438,0x3c4ee6f4,0x3c8fc9b8,0x3c2a96b3,0x3a2c76c8,0xbbce42e7,0xba12375c,0x3b8529f1,0x3b63c1a2,0x3c448b3a,0x3c36852e,0x3b8d6937, +0x3a632b56,0x3ac94802,0x3c0b4f75,0x3b86fb8d,0x3b32f823,0x3ba50e7d,0x3b46fd87,0x3bd7f232,0x3c0f92b8,0x3c1c9de8,0x3beb950f,0x3b8f0102,0x3bdb4bb8,0x3bea57c0,0x3c2e7c11,0x3b224cc8,0xbb47e97f,0xbb14e384,0xb932156e,0x3c06297e,0x3ca8f154,0x3cc37f13,0x3cb84898,0x3c768fb6,0x3c633d87, +0xbaa54b39,0xbc6b4686,0x3c3a2193,0x3c63a051,0x3b134187,0x3bf56bb8,0x3b8a5627,0x3b6efc53,0x3afeb91d,0x3b4a51e3,0x3bf2bc66,0x3bb85149,0x3b8de6b8,0x3b4f8083,0x3bed3693,0x3bfa5b85,0x3b992ff5,0x3b658185,0x3b53b1a3,0x3bc3c4b2,0x3c254e16,0x3c6a8fda,0x3c992d7d,0x3c70772b,0x3c3f80b5, +0x3c16ef9e,0x3ba04939,0x3b6ccf4b,0x3ad04068,0x3c292c40,0x3c10d027,0xbb361603,0x3b394cde,0x3ab257e5,0xbb7de1fb,0x3b5de5ea,0x3b5c1901,0xbc2c2aef,0xbabbc3f5,0x3924601d,0x3b819756,0x3bb13e40,0x3b9226bf,0x3b1efc28,0x3b28323d,0x3aff1932,0x3b7e075e,0x3b420463,0x3b71030b,0x3b5004ee, +0x3b835d7a,0x3b3b2b6b,0x389125ca,0x3aeae45c,0x3b20742a,0x3b4d41f5,0x3b3f44bc,0x3bbef6cd,0x3c17f980,0x3c042d9c,0x3c0e5105,0x3c3efa2f,0x3c31356e,0x3c140df0,0x3ba98ae5,0x3c255dfe,0x3c53e291,0x3c581c67,0x3c9461e1,0x3c981009,0x3c88ed95,0x3c27c53e,0x3c442600,0x3bafc6c4,0xb93e4c98, +0x3b04b11b,0x3a65b52b,0x3b9c8437,0x3b8c023f,0xba60168e,0x3b26bcfa,0x3afc8b06,0x3b1129bc,0x3af9cb41,0x3b215fe4,0x3b441e00,0x3a48134d,0x3a8b280d,0xb854324e,0xba689b49,0x3a7f2193,0x3b4f05a7,0x3a9bb881,0x3b71f01f,0x3bdc3895,0x3b8ae871,0x3bb7b179,0x3c2d6908,0x3c5b2fd3,0x3c4ec1d8, +0x3c1a34e1,0x3c29ec4e,0x3c3f5b93,0x3c88414f,0x3cb7a4e0,0x3cd803a4,0x3d0800e3,0x3c9641ce,0x3c850e8e,0x3bcc7d96,0x3babac7c,0x3a6ee267,0xbb333a58,0xbac691b2,0xbb5aa61f,0xbb00efdf,0xba3bcd3d,0x38c17243,0x3a870817,0x3ad6e901,0x3ad0e153,0x3a78d3ff,0x3b3c0321,0x3b4ebc81,0x3ae4a580, +0x3ac8d2a1,0x3b0a2773,0x3b437180,0x3bc02f46,0x3c0c2f4d,0x3c2063b5,0x3c0620ae,0x3bbcb83e,0x3b7a88d0,0x3b3af102,0x3b08893b,0x3aa934b7,0x3b45e0d9,0x3bb46b97,0x3bb1557c,0x3ca7bd2e,0x3cd41eb9,0x3d00dfdf,0x3cc8b609,0x3c8ac343,0x3b9d5d1f,0xbc256b0f,0xbbf5b7f4,0xbc677e64,0xbc48a2c5, +0xbc103c4b,0xbbb32d31,0xbabfa3f4,0xb92a9950,0x381e66db,0xba69da12,0xb9e184c8,0x3a32c644,0x3a8d48fc,0x3ac36b57,0x3883108b,0x3b42a8a8,0x3b6cd10a,0x3b5bf2e5,0x3a5d6507,0xb9462cc5,0x3b13aea1,0x3b783b7d,0x3bb5d552,0x3c055cda,0x3c0b91c4,0x3c09e146,0x3c4e2e9c,0x3b609ac8,0x3b7c2c04, +0x3c48d3ac,0x3c7c34d5,0x3c940b1d,0x3c9ebf70,0x3c88d51f,0x3b3bff75,0x3a002693,0xbbb792ae,0xbbadabb1,0xbaabc3a3,0xbbc1ff61,0xbbeb8b93,0xbbf9610f,0xbbfaf7d9,0xbbaee8a8,0xbbba4841,0xbb91fb35,0xbb514c4b,0x3a28e096,0x3ad54999,0x3b53aaf3,0x3b42da26,0x3b62debb,0x3b51db76,0x3b2c5586, +0x3b0ec679,0x3b83d12e,0x3bc18693,0x3bdae6ab,0x3bcc26d0,0x3b71bb25,0x3af7f9f5,0xba1b4082,0xbb6c2f85,0xbb72db94,0xbb404197,0xb9c44e9c,0xbb943b0d,0xbb7b5915,0xba1fb616,0x3ad51e3c,0xbba8c0ff,0xbc2dc3e8,0xbbd25a34,0xbbe6a396,0xbb9d264e,0xbbc26823,0xbba59a19,0xbbae4946,0xbb778a98, +0xbb86d8ae,0xbafdf517,0xbb3cb9cf,0xb9fcf7e4,0x3ab78ddd,0x3acbd56e,0x3ac9d115,0x3ac95750,0x3b4a943c,0x3b6d9449,0x3b82a122,0x3b8b0fee,0x3b9e93b0,0x3bcb6ada,0x3bbe6235,0x3bacacfe,0x3b7714a6,0x3b72d1f7,0x3b32081a,0x3a60a8e5,0x3a6e64a3,0x3a8dc73d,0x3b2b6ce9,0xbae2d4e1,0xbb958fc6, +0xbbb7e926,0xbbe8021e,0xbbf77727,0xbbf2b641,0xbc04825d,0xbbe4a373,0xbbf3df76,0xbbafb7bc,0xbb4b0601,0xba8eae56,0xb73da205,0xb6c6b368,0x3b49fd89,0x3b2758cc,0x3b21d52f,0x3b8971e2,0x3abf6d2f,0x3adcae9f,0x3a544ba0,0x3aa21c1d,0x3afc3608,0x3b6b4d71,0x3b1d40f4,0x3b3cace2,0x3b452299, +0x3b1e0720,0x3b082bde,0x3b01c66d,0x3b0a4701,0x3b26ad2e,0x3b616bcd,0x3b677ca7,0x3b7413d4,0x3b74eec6,0x3ad99a62,0xb9c2f11d,0xbb56d92e,0xbba79fc9,0xba793156,0xbaa3d938,0xbafb3f07,0x367a5147,0x3b0ec41f,0x3a78d77a,0x3aa9633f,0xba96983d,0xb9706808,0x3a4eb9bf,0x3a0f7016,0x3ad314ef, +0x3b101e71,0x3b36f9ef,0x3b88df44,0x3b6cf863,0x3ab91954,0x3b054a5f,0xba0958a8,0xbb1654f3,0xbb33abab,0xbaffa171,0xbb086527,0xbac94e91,0xba945c6a,0xba84a881,0xba9fc98d,0xbadf67f0,0xbadce142,0xbac26187,0xba9afaa9,0xb90d5221,0xba5342e6,0xba8df77d,0xba62d54b,0xba3b9ca8,0x3917adcf, +0x3974120f,0x3b01a5c3,0xb9072b6f,0xbb8e3c31,0x3b0c65ec,0x3aee61fb,0xbaec508d,0xbae9e504,0xbafd210b,0xbb07585e,0xbb0b8863,0xbb26f1c5,0xbb3158e2,0x3b44a000,0x3b73695b,0xbb4e6bc4,0x3b0bca3a,0x3b670a72,0x3aa5887e,0x3ae948ab,0x3ae3976b,0x3add28bd,0x3ad16ee7,0x3abee8f4,0x3ac2c15e, +0x3ae30112,0x3b02dbff,0x3b1335b4,0x3b2032ab,0x3b11dc9c,0x3b185d91,0x3b003b65,0x3acd3c01,0x3a8fc37b,0x3a18790d,0x3b2fc866,0xbbaf9ad7,0xbb79cd6a,0xbba94635,0xbbc04bed,0x39a409ef,0x3c0249f2,0xbba9e825,0xba193a28,0x3bdf744d,0x3bffe12b,0x3c0f183e,0x3c0794bc,0x3c1070c1,0x3c2a6238, +0x3c0caa64,0xba06f191,0xbba48d45,0x3c19cb16,0x3a8d9c7d,0xbb852107,0xbb999e9e,0xbb81f442,0xbb94d980,0xbb90d656,0xbb9a716c,0xbb9bcbd5,0xbb9a4c1c,0xbb9a9be8,0xbb991b90,0xbb88e16f,0xbb99c1fe,0xbb99dac3,0xbb9cda00,0xbba72d2a,0xbba283e7,0xbb887cb2,0xbb8c077e,0xbb6b236f,0xbbd74978, +0x3b9168a7,0xbac54a77,0x3b030598,0xbaa53b2f,0xbadd2e2c,0x3a9744bd,0xb9860234,0xb99b2991,0x3ab12db7,0x39823d75,0xb9b023fe,0x3a7e7ec4,0x3b9fcdeb,0xbb361651,0x38bd1346,0xbaba8f82,0x39d8d24a,0xbbdb59e9,0xbba9c236,0xbbc69e5d,0xbbd02cf5,0xbbdade1f,0xbbee73cc,0xbc09e0fc,0xbc078a46, +0xbc007053,0xbbbf5cfe,0xbbfdbed8,0xbc021849,0xbc01ff6d,0xbc177453,0xbc0be35e,0xbbbb6bdc,0xbba9b25b,0xbb8a9cbb,0xbba6e879,0xbaf5c7cc,0xbb8bab1c,0xb9e51792,0xba4ae9bc,0x3a40b572,0xbb059fe9,0x3a8b09a2,0xb95ef522,0x39460033,0xba107d00,0x3b8d8bc1,0xbacbb455,0x38f29393,0xbb0f0081, +0xbb132862,0x392d4573,0xbacf8062,0xbb6f7fcd,0xbbe49d05,0xbbe8b1dd,0xbc057746,0xbc0d4874,0xbc140295,0xbc22fdbd,0xbc26cdb5,0xbc1ad265,0xbbd0d64a,0xbc147193,0xbc230cdc,0xbc1fb41d,0xbc459ce7,0xbc2fd727,0xbbb96faf,0xbbb6f827,0xbb0355d2,0xbb4950e2,0x39ac9253,0xba9421d2,0xb8b07f5f, +0x3a8cc7ea,0x3b1aba69,0xba1be338,0x3b33a689,0x3b637cd6,0x3b749b9a,0x3bd51102,0x3b9a6f2b,0x3a9480a0,0x3a52f8ef,0xb9c03028,0xb98b4100,0xba3d5d01,0xba540687,0xbb597f34,0xbc00e687,0xbc001498,0xbc1fffe8,0xbc3c2917,0xbc629278,0xbc763564,0xbc6a7e09,0xbc550562,0xbbec29a6,0xbc4e9d8e, +0xbc683606,0xbc5a3bf2,0xbc90c768,0xbc6dfe1f,0xbbd65c07,0xbbad9872,0xbb5e7fe2,0xbb96a045,0xbb3545d2,0xbab151c7,0xba3322bd,0x3a3d99ee,0x3aab5772,0x3a87ab9e,0x3b560b39,0x3b782352,0x3b6be5d3,0x3bedfe88,0x3baee48f,0x3ab97e61,0x3aced7f8,0x3ae30ac1,0x3b3dd911,0x39a360e5,0x3a5b11c1, +0xbb9b62d5,0xbc02dabd,0xbc23d128,0xbc46c80f,0xbc4bd617,0xbc673262,0xbc6928a1,0xbc79898c,0xbc58e269,0xbbd1417d,0xbc519942,0xbc6b8de0,0xbc56153b,0xbca01a52,0xbc864d43,0xbbc744ad,0xbba62e21,0xbbe3ac7d,0xbb464be5,0xba8ec276,0xbb21db8e,0xbc1cdf75,0xbad80a76,0xb8fb366a,0x3aed62f1, +0x3c0e678d,0x3c28c859,0x3bbc5f08,0xb9371c02,0x3a9f6a62,0x3c00a59c,0x3b192bcc,0x3a38bf52,0x3ad383b1,0x398cd278,0xba95a652,0xbb6f3805,0xbb92076b,0xbadd2c8f,0x3b054ae1,0x3b448d96,0x3b2894ce,0x3c43ae0e,0xbbd174ba,0xbc66e4e4,0xbc91be92,0xbc82b88b,0xbc6df67d,0xbc83b902,0xbb93dd6f, +0xbb4951c5,0xbbd1ba28,0xbc24ff4e,0xbb18395c,0xbcabab90,0xbb46d215,0x39a708c3,0x3a8184f8,0x3a4bc6a6,0x3b70367f,0x3b4af236,0x3b04bfeb,0x3b0fc8d1,0x3bcbf0d1,0x3bd69816,0x3ba90bd0,0x3b216171,0x3b9cc032,0x3b90dbb9,0x3a78c4c8,0x3a329b36,0x3b6c3f05,0x3a3138df,0xbbce3266,0xbbe62327, +0xbc1b5a4f,0xbb0f832d,0xb9b20edd,0x3b642b55,0xb9e72cc5,0xb9bf8383,0xbb1ecf4b,0x3ae9f6e3,0xb94eb5fe,0xbbca4273,0xbc04a1b9,0xbbe9c494,0xbbad459c,0xba33a61d,0x3adbf470,0xbc6bbf06,0xbbff7554,0xbb80200a,0x3a5090f4,0x3b668e53,0x3b609c5f,0x3a46ccd7,0x3ad01aba,0x3a5d38ed,0x3b6edefb, +0x3b24c00c,0x3b36f260,0x3b7f8e30,0x39b61921,0xb8b57a05,0xbaf7eedb,0xbb0dc017,0xbb7fd3e9,0xbba424a9,0xbb8e676c,0xbb573c4c,0xba2f4e0d,0xbbfa7693,0xbc1c76ea,0xbc230448,0xbc07bd96,0xbbc86291,0xbac93e86,0xbb191878,0xbc3a2a1c,0xbcb6695e,0xbcba53af,0xbc9f0274,0xbc16af87,0x3a95ee35, +0x3aa999ad,0x3b925e4d,0x3bb73a75,0x3a824ed3,0x3a0f8046,0x3b669b89,0x3b3b6577,0xbb0ec83f,0x3adddce5,0x3b0c5cb6,0x3a9d19c4,0x3ab120cb,0x3aefd7ce,0x3b44abd1,0x38aa0461,0xbb34cd86,0xbb2f66d7,0xbb32e188,0xbb2481cf,0xbb82f886,0xbb3fb98c,0xbb52b3ae,0xb75f5eab,0xbc30bfdf,0xbc70d1a0, +0xbc7f077a,0xbc6be362,0xbc3bfda8,0xbbd4d9d0,0xbc17bf36,0xbc718272,0xbcac93b4,0xbcde79b6,0xbce23c3a,0xbcba6d2e,0xbbc403bd,0xbc56bda4,0x37579495,0xbb370df8,0xbaa56a43,0xbbb319c9,0xbbad142a,0xbba2981e,0xbb51c919,0xba9971e5,0x38d502e6,0xb95d4306,0x3ab5ef27,0x3aa72aee,0xb9cb3774, +0x3a25c6fe,0x3a8ebf9e,0x3a2a339e,0xbabfcd73,0x37a5adb1,0x3a8854ab,0xbaa89f98,0xbb6acfc7,0xbbb6064b,0xbbbcfd64,0xbb9fe22e,0xbb900ddd,0xbbd529f3,0xbc07d732,0xbc0e825a,0xbbbe7f50,0xbbb4b711,0xbb1414da,0xbc52db16,0xbc9b49ff,0xbced31cd,0xbc957ba6,0xbce32121,0xbc43156e,0xba2a6dfd, +0xbc854f05,0xbc3967ab,0xbc5c6962,0xbc3f1495,0xbc0f695f,0xbb911e7a,0xbb1e1416,0xbad401e5,0xbab9bed5,0xba79515f,0xbad0e1ee,0xb8befc30,0x39803d65,0xba4f4c8f,0xbac6dc65,0xbb0cfba3,0xb94d1e0a,0xbb1088c3,0xb8f8621c,0x3a2a515b,0x39840134,0xbb1fe602,0xbc037a27,0xbc21e688,0xbc5b3e7a, +0xbc8941c2,0xbca38b98,0xbcaa1ce6,0xbcabf592,0xbcb69678,0xbcac1a76,0xbca14221,0xbcbfbecb,0xbc8a2793,0xbc7269b0,0xbbfd0224,0xbbf033dd,0xbbc80ec9,0xbc0c411d,0xbc24f6bb,0xbc1cc0a2,0xbc17957f,0xbc094163,0xbbd80d0f,0xbbf6a10e,0xbbb2617b,0xbadd532f,0xb99083b9,0x3a0640ee,0x37339290, +0x3ac6a3d6,0x3b39a87e,0x3b198ac2,0xba78443d,0xbb16bfcf,0xbb03fcfc,0xbb3dab7e,0xbb70c48c,0xbbb9a42c,0xbbbf0cf1,0xbbb3692e,0xbb71b413,0xbbd45466,0xbc259fea,0xbc8a4b46,0xbc8a4091,0xbc93bc39,0xbc99578f,0xbc8d71aa,0xbc8682dc,0xbc2ab38a,0xbc52f871,0xbc379b9f,0xbc236959,0xbc2b97dc, +0xbc08f321,0xbbe786e6,0xbbc49cd5,0xbbaebf15,0xbb6a66d8,0xbb4ded2f,0xbaa3ef9c,0x398c805c,0xb8a2391d,0x3a71c646,0x39dbc1c0,0x3a74bdf9,0x3a8c08ed,0x3b0bb284,0x3a01e20e,0x3a8727d4,0x3ae959ed,0x3a86e376,0x398e8881,0xb94ddfec,0xbaeb5593,0xbb5fd14e,0xbbb4b344,0xbbf42b93,0xbc234834, +0xbc6207cb,0xbc658188,0xbc67cad7,0xbc794547,0xbc5e9240,0xbc44fe46,0xbc6c820d,0xbc22e73a,0xbc2b26a4,0xbc0faa7d,0xbbc35bba,0xbb980ac9,0xbb6c043c,0xbb339b72,0xbb5d5bff,0xbb0d91ec,0xbb899bb1,0x399be348,0xba830f71,0x3a94bbb1,0xba4b308d,0xb9fb2fb5,0xb9ba7838,0x3a1c6f8a,0xba86912d, +0x3a8cb8b4,0x3a8ea09d,0x3b06fd3f,0x3b13a0c0,0x3b390513,0x3b62bc78,0x3901a718,0xbb1ffb55,0xbbb418ed,0xbbdb6cd5,0xbbf7d369,0xbc09e70f,0xbc14d16b,0xbc2ed35a,0xbc41ed15,0xbc49547d,0xbbd66837,0xbbde380b,0xbaf2dca8,0xbba1319c,0xbb92ea10,0xbb949348,0xbbc8ddba,0xbb1352af,0xbb8f3717, +0xbb1c42ac,0xbad316f2,0xba88487a,0xbb252d11,0xba59ca24,0xbb3cf4f9,0xbb22fc26,0xba594111,0xbb53c11c,0xbaee2329,0xba87f556,0xb9d921b0,0xba7768a6,0xba69ea70,0xba56d2ca,0xba746592,0xba8031f5,0xbaa7c639,0xbb005fd4,0xbb3c9ca0,0xbb9533b8,0xbbd749aa,0xbc134927,0xbc0d814a,0xbbf2d395, +0xbbe38599,0xbbedafd5,0xbb856e6f,0xbba71103,0xbb9ed8fb,0xbaa74766,0x3b34a336,0xbb916056,0xbae7c978,0x3b4c15e7,0x3b84a522,0x3b7fef98,0x3b7e690e,0x3b9489ed,0x3bb8dda8,0x3bc0118f,0xbaba4ec3,0xbb6d9bbb,0x3b82ac34,0xba494255,0xbb4021ef,0xbad07c9e,0xbaf555f4,0xbad7af11,0xbabf0f62, +0xbaadca96,0xba9c0552,0xba8f69ad,0xbadd66c6,0xbb20162a,0xbb40dfeb,0xbb572037,0xbb54cb8d,0xbb641cc1,0xbb64cb6b,0xbb75ba96,0xbb868902,0xbb8a8057,0xbb766386,0x3c077e31,0x3bb84ea4,0x3c0bd20a,0x3bb8cd45,0xbaf5f0eb,0xbbefa37e,0x3bc04ef3,0xb93fdda2,0xbbf48393,0xbc01b3e7,0xbc09480e, +0xbbee5f4d,0xbbf7bc52,0xbc1a9abd,0xbbf82a5c,0xba0d7962,0x3b97b8a6,0xbc0d6204,0xbb17741e,0x3b7cdeff,0x3bfb971b,0x3bcf0286,0x3be29104,0x3be2742f,0x3be21823,0x3bd97349,0x3bc6c568,0x3bc65b17,0x3bcb983c,0x3bdbb7fb,0x3bdec7bd,0x3bd94c06,0x3be2966d,0x3bd570cb,0x3bc98a49,0x3baac7d3, +0x3bc0101d,0x3bea54f8,0x3c27226f,0xbbbc5544,0x3b73f60e,0xbab8bb45,0x3b68f893,0x3b6f205c,0x3a12b113,0x3b862a96,0x3b48699e,0x3aed8e05,0x3b826c05,0x3bbd9a25,0x3ad35170,0xbb994bed,0x3b5e6630,0xb91db038,0x3b2c42f4,0xba4623bb,0x3c041024,0x3c060ba2,0x3c0e2ef0,0x3c18f396,0x3c09444a, +0x3bf9bfc0,0x3bf3c8c6,0x3be7de4b,0x3c02da17,0x3c268da9,0x3c25ad2d,0x3c1f577d,0x3c27c750,0x3c0f93a4,0x3bf9bf9b,0x3ba23635,0x3bcdbfee,0x3be84906,0x3c0ed0f4,0x3a8a89cd,0x3be1988e,0x3ac75cb7,0x3b80bef1,0x3ac8654b,0x3b98ee99,0x3b1329c4,0x3be76632,0x3b633fa2,0x3c335905,0x3b713a9a, +0x3bc16895,0x3b13a639,0x3b59dbe1,0x3b325786,0x3a8dfe51,0x3b0350d3,0x3bb237cc,0x3c3196b1,0x3c260573,0x3c4726a3,0x3c29b129,0x3c13530e,0x3be1bffa,0x3bcdc9fe,0x3bf20703,0x3c452e9f,0x3c34ce8b,0x3c3f80e0,0x3c40976c,0x3c175a19,0x3bd2f467,0x3aefa05a,0x3bb46abd,0x3c0a596a,0x3c251c94, +0xb9a9a510,0x3b2a53fd,0x3b0102e9,0x3b3635d5,0x3b450bfe,0x3b8c9fe8,0x3b7ee1da,0x3bac5dea,0x3b828b05,0x3c07737b,0x3bf28d9e,0x3baefacf,0x3b04beb7,0x3b154647,0x3b166338,0x3b3cb706,0x3ad73cf7,0x3b451c29,0x3c3d979a,0x3c26eb25,0x3c60a731,0x3c3f51e1,0x3c2ad049,0x3bdd8c62,0x3bd7c8e0, +0x3c09c3b4,0x3c85aa07,0x3c697408,0x3c76580c,0x3c80a6fd,0x3c2ae5d3,0x3bcf12c2,0x395512fa,0x3b7532c0,0x3bd1962a,0x3c1574e8,0x39a24e50,0x3b90dfa1,0x3b8ffedf,0x3b9307e1,0x3b50eb10,0x3acf0ce3,0x3b69480a,0x3ba31869,0x3ba9bc24,0x3bf8a00e,0x3bdd1795,0x3b4d15d2,0x3b82dbe9,0x3b77b7a7, +0x3b45bf03,0x3b9cc372,0xba931aca,0x3bb6041e,0x3c42dc84,0x3c5edc8b,0x3c89c16e,0x3c5edfd8,0x3c29d306,0x3bcfb8f1,0x3ba00d18,0x3c07887c,0x3c86d624,0x3c7f114b,0x3c83117a,0x3c702f75,0x3c214ca5,0x3b509ce1,0xbb416cab,0x3b5b938d,0x3c5c21e6,0x3cbe1903,0x3bfc00a1,0x3a0e5e90,0xbbeb57fa, +0xbb6ccda3,0x3b345114,0x3b255cd7,0x3c1c8f54,0x3c3665c6,0x3bf90069,0x3ab9e921,0x3ab7e66f,0x3bf024e4,0x3b27e5c9,0x3b52c298,0x3b326aaf,0x3bd8fbe8,0x3bbcbdec,0x3c24ce58,0x3c793c58,0x3c428591,0x3c5156c0,0x3c2afc8f,0x3c3f9f37,0x3c870266,0x3bdf546b,0x3af172af,0x3b82ee42,0x3c0d7422, +0x3c8780c0,0x3c9f8101,0x3ce2a225,0x3cdba770,0x3c731434,0x3c7c25f4,0x3c192443,0xbc1055d8,0xbc43b337,0x3bc02a4b,0x3b92accf,0x3bde33ad,0x3b45af5c,0x3bae1485,0x3b48fd43,0x3b3228ae,0x3be5868c,0x3becbc51,0x3bbdd963,0x3b56a46e,0x3bcf3c54,0x3bed5ea1,0x3b6c08e3,0x3b3753b3,0xba8fe222, +0x3b5399fc,0x3c4218f1,0x3c6338e2,0x3cb777ca,0x3c8f6c3d,0x3c50ff0c,0x3bd6bd4e,0x3a988a14,0x3b08d0df,0x3bb4af38,0x3c0d4d9e,0x3bd3bcea,0xbb04a4f6,0x3b0e0ba9,0x3ab5f9e1,0xbb8d0c8e,0x3bf6616c,0x3c1529ac,0xbb90cf78,0xb996f124,0xbafb9091,0x3bc6bdf4,0x3ba58b4c,0x3b90982b,0x3b1e8d78, +0x3b170c3c,0x3b2f5c4d,0x3b682a0b,0x3b853708,0x3b8819ab,0x3b5e894f,0x3b723ad8,0x3a821d6e,0x39311c6b,0x3a82efb6,0x397145c6,0x3bade121,0x3b8d3b8a,0x3bafacde,0x3c272c4f,0x3c4086f8,0x3c67280b,0x3c795e87,0x3c81b22d,0x3c4da7c4,0x3c3c9656,0x3c4474d7,0x3c54d6ca,0x3c3b1b73,0x3c79153f, +0x3c88f760,0x3c8c9df1,0x3c4f13be,0x3c5ed805,0x3c07f31d,0x3acbe2d9,0x3bac4695,0xb8c00181,0x3b8b2a4b,0x3b652211,0xba89441b,0x3b3e4ed9,0x3b3efed4,0x3b168819,0x3b2cbc16,0x3b35372b,0x3b6e4a7d,0x3a4e6684,0xb80fee08,0x3a21b6e2,0xb9639e5f,0xba92af72,0x3ad015dc,0x3b84c919,0x3b8abd40, +0x3be5e3f6,0x3c006b02,0x3c234fc9,0x3c4f8059,0x3c7b5bd7,0x3c56457e,0x3c5ae0e1,0x3c22b9a7,0x3c505029,0x3cab3096,0x3cb5dced,0x3ccc113e,0x3ceec3e3,0x3c8e4d0b,0x3c5784a0,0x3a1f5a54,0xba08ac6f,0xbb0b431a,0xbb9e0075,0xbb036300,0xbb7a67bb,0xbb4888da,0x39bd8a87,0x3a9677e9,0x3a117daa, +0x3b3e1a13,0x3afe0bd8,0x3a2658b0,0x3aa3460e,0x3a7dbc05,0x3a7ce4c3,0x3a7d9ab7,0x396344e5,0x3baf4778,0x3c09972f,0x3c30ba50,0x3c3f28f4,0x3c04b59e,0x3b945bee,0x3a92412c,0xb7b4fc86,0xb9398df5,0x3b172498,0x3adfc771,0x3bbd550a,0x3c53d72a,0x3cbb3b27,0x3cdc27cc,0x3d03be47,0x3ca7a94f, +0x3c91042b,0x393f4a5f,0xbc8de71c,0xbbfe0883,0xbc2fd572,0xbc3b77c1,0xbc16cfeb,0xbbb226e4,0xbb5d12fb,0xba418321,0xb9bc7d3d,0xb9280670,0xba327e91,0xba9049ce,0x39758477,0x3a968be3,0x3a9640f8,0x3a5044ce,0x3a6fd88e,0x3ab1b050,0x3a9d7ef4,0xbadb9b47,0x3a2f4f10,0x3afb6ba4,0x3b88ad62, +0x3bfd768f,0x3be21a53,0x3bd725b5,0x3c1d28f3,0x3b608c78,0x3b7b9b19,0x3c10fea8,0x3c61418b,0x3c8a2a02,0x3caa040d,0x3c6ef9e3,0x3b679e65,0xb8bb00df,0xbc0506c0,0xbbda5fe4,0xbbaf88c1,0xbc180e3d,0xbc19149f,0xbc16302a,0xbbef667b,0xbbd63647,0xbba2a778,0xbbbf5333,0xbb8f801d,0xbac36a18, +0x3a654588,0x3b180762,0x3b1ef634,0x3b43de39,0x3ac31452,0x3b482408,0x3b519d9f,0x3b8d8924,0x3b96ebb7,0x3bccdfc5,0x3bb2b991,0x3b581232,0x3ab9e8b3,0xb82ddf4e,0xbad974e9,0xba7feeba,0x3ab8641c,0x3bba2374,0x3b7e04e4,0x3b356d11,0x3aa3ae71,0x3b2b8e4c,0x39869c2b,0xbc351eac,0xbbcdec6c, +0xbbdee735,0xbbc985ef,0xbb7f3fd0,0xbbbfce7a,0xbba1a9b1,0xbb9b0cc5,0xbb97d73a,0xbb92fde6,0xbb87e29f,0xbb2bb227,0xb9124263,0x3a919583,0x3ad11f0f,0x3ab1d419,0x3b181813,0x3b6caf9b,0x3b0b9b30,0x3b9c5ac1,0x3b85aac9,0x3b925794,0x3ba9f756,0x3bb357d2,0x3bb4684d,0x3b993566,0x3b5436e7, +0x3a471799,0x3a8d8615,0x3aa56651,0x3b37491d,0xb99af40e,0xbb33c2fc,0xbb7fb348,0xbba80eaf,0xbb9e46d7,0xbb8797cf,0xbc258509,0xbbd21890,0xbc07b938,0xbbeeb6fa,0xbb88a984,0xba75aca3,0xbaffd72c,0xbb028734,0xbb265c81,0x3a5cd37c,0x382c9e14,0x3b1be4a8,0xba230900,0x3ae91b0f,0x3b0c7b6a, +0x3b27a358,0x3a7426d5,0x3bad67dd,0x3b9eab1b,0x3b7b7ba4,0x3b781b39,0x3b67c248,0x3b753cfa,0x3b8def99,0x3b7faf11,0x3b8353aa,0x3b88e33a,0x3b7faa2d,0x3b5adf75,0x3b499e1a,0x3a8f0712,0xb9fc8ad5,0xbb07bd4d,0xbb77f5d5,0xbaef0626,0xbb27c1a6,0xbbea5e7e,0xbae1cca9,0xba4326d8,0xbb030a5f, +0xba530352,0xbb93e197,0xbab6127e,0xbaef41cf,0xbae8ffa0,0xbadf7f42,0xb86c9581,0xb99ed59b,0x3acf05f2,0x3abbcc31,0xba939265,0x3b31103d,0xbab1c839,0x3b18e918,0x3ab11b44,0x3b22aeb1,0x3b2120b7,0x3b400c68,0x3b44f352,0x3b3a8687,0x3b5e13c2,0x3b5b172a,0x3b628644,0x3b86d7dc,0x3b94ec9b, +0x3bb7e8dc,0x3b80fe28,0x3b1ecd4e,0x3a8aaf32,0x3890be4f,0x3ad67f3e,0x3aff2ca1,0x39f05d5a,0xbb6e125d,0xbbd0d548,0x3a8b4f12,0xbaa32d23,0xbba114b8,0xbbb4a0be,0xbbae5153,0xbba30ccb,0xbbab7778,0xbbc49494,0xbbca6010,0xb8ee806b,0x3b5c5db2,0xbb9e1563,0xb9cf3ff4,0x3b514baa,0x3b7dad31, +0x3b6c72f3,0x3b6bcadb,0x3b6525e2,0x3b5f96e2,0x3b5b33c0,0x3b5999a2,0x3b6259b4,0x3b64d03e,0x3b721f74,0x3b70e46b,0x3b5d0b2e,0x3b60f62e,0x3b40fc03,0x3b30488b,0x3b1b044a,0x3b005b3d,0x3b85e147,0xbb934644,0xbb77307d,0xbbdbf231,0xba88e4d1,0x3bd71336,0x3c1957cc,0xbabfa73a,0x3b9da461, +0x3c297ef7,0x3c33bdc8,0x3c399f49,0x3c2304e8,0x3c2bd847,0x3c493cf0,0x3c277ee8,0x3ba9a668,0xb9f34eb1,0x3c215289,0x3bcf9286,0x39dcecea,0xbbc4b0fe,0xbb801daa,0xbb8ee8de,0xbb9072ef,0xbba1d53b,0xbba6a85c,0xbba545d7,0xbba1cbcb,0xbb9bffae,0xbb89f4ce,0xbb942ee1,0xbb916e14,0xbb91a547, +0xbb952645,0xbb91f691,0xbb8486ee,0xbb8939dc,0xbb8c1ccf,0xbb8701dc,0x3c413eb7,0x390c5559,0x3bacf670,0x3aa9ff36,0x3b0bece8,0x3b4dd7e8,0xb8221b43,0x3b5c7cb6,0x3b83d847,0x3b8bc6be,0x3aa4da3b,0x3b807614,0x3c080340,0xba13f0de,0x3b37415c,0x39cc4edd,0x3bb02fad,0xbb8afb0d,0xbba0c03d, +0xbb9dc18d,0xbbc07c6e,0xbbd53be9,0xbbf0cc3b,0xbc0aad0b,0xbc075c98,0xbbfcdfd5,0xbbbeeefd,0xbbe4432b,0xbbdd2b55,0xbbd88342,0xbbe71015,0xbbd84b05,0xbba51f2f,0xbb921fdd,0xbbb1c22a,0xbb30239c,0x3b890a05,0xbafeb937,0x3b63b66c,0x3b169d22,0x3ba2067f,0xbad081ee,0x3b91a79f,0xba21e66a, +0x3bbe4143,0xba6f7326,0x3bc1bf88,0x3af752d6,0x3b1a6905,0xba76fe8c,0xba9cb315,0x3b025891,0x3b0c1848,0xbb07b5af,0xbbd94a73,0xbba0b531,0xbbf0becd,0xbc0cba79,0xbc24799a,0xbc2dee47,0xbc2d4bbe,0xbc16981b,0xbbc5f93c,0xbbf5f1e1,0xbbf6522a,0xbbe70201,0xbbffd416,0xbbe7fa98,0xbb9d9657, +0xbb996d94,0xbb8a10a8,0x3a55cb95,0x3c13d707,0x3b6698e1,0x3b070af4,0x3b579bb7,0x3b8a792e,0x3a09cfa4,0x3b556ce6,0x3b787475,0x3b90bec3,0x3bc2dc29,0x3bdfbb93,0x3ad214d9,0x3b3a6ac7,0xba2e307d,0xbabe3ecc,0x39008c73,0x3b44fcb8,0x3901f527,0xbbe0b687,0xbb9f0fa1,0xbc02e80e,0xbc358073, +0xbc66d1b7,0xbc7009c2,0xbc67794e,0xbc4aa105,0xbbf1464e,0xbc28a3fd,0xbc28a7ea,0xbc1aba61,0xbc32e21b,0xbc165050,0xbbb913f9,0xbb77e229,0xbba16031,0xbb184e85,0x3b39b99a,0x39c95a64,0x3ac21217,0x3b624594,0x3b308b94,0x3aaeb69f,0x3b696596,0x3b89e57e,0x3b71cc45,0x3c01d57b,0x3bbed3bf, +0x3b44f329,0x3a8db43b,0x3a822b3f,0x3aa4e0bf,0xbb5ac420,0x3bbe7c28,0xbb3d9daf,0xbbde6678,0xbbbfd537,0xbc1e5c1e,0xbc45d5ee,0xbc7a577b,0xbc7d9bb4,0xbc842762,0xbc532cbe,0xbbd57dbd,0xbc25914f,0xbc1596df,0xbc01256f,0xbc26cd3b,0xbc13f51e,0xbba9720d,0xbb8a7081,0xbbe35dcf,0x3a939383, +0x3c6bcc75,0x3c20b5f7,0xbbaa0d34,0xba77e352,0xba978fcc,0x3b3e84bc,0x3bc743ae,0x3c1d09f5,0x3c11ed57,0x3abbf674,0x3a16827f,0x3bd0a392,0x3aec6b17,0x3824f8a8,0x3ba8a50d,0x3ad55004,0x3ba7cf48,0x39baf2ac,0xbbad8c0f,0xbb5b6928,0xbb623cbf,0x3b03139a,0x3934bbd3,0x3ba424ff,0xbc72d922, +0xbcb33573,0xbcbffaeb,0xbc87b5b3,0xbc4f55a9,0xbc717c60,0xba73415c,0xba2a4b99,0xbbeca3ec,0xbc35bd1f,0xbbfe1906,0xbc77f30d,0xbbefc6a6,0xbc3ec661,0x3c47eb7a,0x3abd3460,0x3b510991,0x3bc0e97d,0x3b1e2917,0x3b24a847,0x3bc364ea,0x3bebbf98,0x3bccf012,0x3ad663a9,0x3b7cc369,0x3b02fb9d, +0x3adeed20,0x39454617,0x3ba44eb2,0x3b6269fb,0xbbc2f24b,0xbb59e0d7,0xbba91afa,0x39e339f3,0x3a9a985c,0x3b2d9235,0x3981ea50,0x39281f15,0x3a9ca3ec,0xb9b8117a,0xb93fc91f,0xbb078abf,0xba1b063b,0xba15b5af,0xbbb0192f,0x3a35bb92,0x3b86f2e3,0xbbc71039,0xbbb3b08d,0xbb7c9f92,0x3bbbf2fe, +0x3b710149,0x3b80388f,0x3a823247,0x3b044e0b,0x3ac32edf,0x3b3c97ea,0x3b42c7aa,0x3b51049d,0x3b579b63,0x3abebce0,0x38dbc5d5,0x39856ba9,0xb9a40f0f,0xbab8dba7,0xbb7f55ee,0xbbb417f3,0xbb39b64c,0xba03908c,0xbba48873,0xbbec29f1,0xbbed8641,0xbc059ec2,0xbbf69c9a,0xbb60d8be,0xbc1620eb, +0xbc7d603a,0xbc84902d,0xbc4be117,0xbbfa48d7,0xbaf78847,0x3ba990ed,0x3bda1468,0x3bf75d59,0x3c25691d,0x3b9a052e,0x3ac3dd3f,0x3b8ec9aa,0x3b35a320,0xbb03817b,0x3af91db1,0x3b1d38a1,0x3aa95007,0x3ad6c598,0x3b0e7d50,0x3b4051e2,0xb9304674,0xbae6742c,0xba2ffd4e,0xbb15ea4f,0xb96c826a, +0xba12bbc5,0xbb987856,0xbb2bae51,0xb9fa763e,0xbbfc688e,0xbc286746,0xbc3354f5,0xbc352e73,0xbc0f3d48,0xbb6b21c9,0xbc2da0c7,0xbc74c276,0xbc4e329c,0xbc87d416,0xbc6ecafe,0xbc17626d,0x3a3d68af,0xbbefd0df,0xba1235de,0xbb8dcb65,0xbb8c5d31,0xbb8f9a4e,0xbbb3731b,0xbb98c0fa,0xbb1f66f4, +0xba36ade3,0x3a80d71b,0x3a573238,0x3b0b3e95,0x3af421d4,0xbabc5bfb,0xb8509e9a,0x3998cac7,0x3a74fe2b,0xba9e9690,0x3aa3c2ce,0x39890e31,0xb9f909cb,0xbaba0d38,0xbb5b0745,0xbb2c230c,0xbadf5134,0xbb3244d5,0xbb77c5d8,0xbb700b24,0x3b404a79,0x3a0cfbe7,0x3b220d89,0x3b8186f2,0xb9ca0caa, +0xbb951c6a,0xbc693878,0xbbbdcb38,0xbc7df9b7,0xbab351ee,0x3bad1a28,0xbc284647,0xbbacf435,0xbc118caa,0xbc03749e,0xbbeaeeab,0xbb5f9b3e,0xbb257ace,0xbb042616,0xbabf969f,0xbaaa55b5,0xbb40f324,0xb88703fb,0xb704e28b,0xba844e00,0xb89f4478,0x39a9ef56,0x3ac9c0c4,0xbb0f6051,0xb9886288, +0xbaa2ced6,0xba055f94,0xbab66ed6,0xbb45de5a,0xbb83095d,0xbbc2ffb3,0xbc0553be,0xbc5b1209,0xbc821af4,0xbca03276,0xbc8182d9,0xbc43afd0,0xbc2d5122,0xbc31fa65,0xbc2e5cbc,0xbc030866,0xbb138fd5,0xbb95324c,0xbbce1227,0xbc0f35df,0xbc347f07,0xbc1bbbfd,0xbc1ac6dd,0xbbdb5cee,0xbbec1ef3, +0xbbe59059,0xbbd5a40e,0xbb6cb128,0xba0c0db9,0x3aa6623b,0x3a9b76e8,0x3ab2c591,0x3b3af4e2,0x3a389a3c,0xbacf59d3,0xbb2ca3a1,0xbb681374,0xbaaf1b9a,0xba7aafcf,0xbb041daf,0xbb74e6d9,0xbb938769,0xbb735c0a,0xbb99f2af,0xbbd374b8,0xbc51eddf,0xbc42ee26,0xbc46dc89,0xbc58ec2b,0xbc3468e4, +0xbc59801f,0xbb72f281,0xbbbb9a1b,0xbbbd617a,0xbbb661dd,0xbc11f53a,0xbbcbb833,0xbbd4fc5c,0xbbba57bf,0xbbddfdfd,0xbbb05aa2,0xbbb174f6,0xbb20b3dc,0xbb0fb041,0xb9d931de,0x3aa45a7e,0x3b51c4f4,0x3b29c398,0x3ad19425,0x3b52d61d,0xbae794ce,0xba401b01,0xbaab9ead,0xb930f672,0x394da5c5, +0x3a881190,0xbaa557e5,0xbb53094a,0xbbbef035,0xbbf2bd09,0xbc21908e,0xbc62381e,0xbc4f6fdf,0xbc46b00b,0xbc5a3cac,0xbc274ca2,0xbc272e13,0xbc3cf2a8,0xbbb301ac,0xbbecfd0b,0xbb8369fc,0xbb190eb4,0xbb26bfe9,0xbb6bdc38,0xbb451b29,0xbba0f42c,0xbb2f89a9,0xbbcac25c,0xbaac4219,0xbb193b21, +0x3ab585d1,0xb91ad9bc,0x3aabedef,0x3aa6ed4c,0x3b86a340,0x39d82c3b,0x389e3d6e,0x3a7b9c39,0x3a09baf6,0x3abe71fc,0x3b00cfef,0x3b5a5920,0xb85b8fd6,0xbb00d207,0xbb869472,0xbbb6a624,0xbbdde7bb,0xbc01cea0,0xbc0dd4b8,0xbc1b59ff,0xbc264031,0xbc210dfc,0xbbe60417,0xbc046987,0xba901955, +0xbbdcf81a,0xbbc2e581,0xbbc03f71,0xbbf3df28,0xbb42a30b,0xbbb5052d,0xbabba4c6,0xb9ac373c,0x3a40272b,0xbae012ac,0x38a7080e,0xba3e853f,0x3728db91,0x3b0828b6,0xba8b9189,0x3b26e00a,0x38f07025,0x3aa14dee,0x3a5013c7,0x3a8a3ee1,0x3a8d1df2,0x3a4f15ef,0x3a301f54,0xb923bfb7,0xba87b624, +0xbb12d59e,0xbb5f478d,0xbb986315,0xbbc8fc4f,0xbbd00027,0xbbbdf463,0xbbcf97ee,0xbbefb5b9,0xbb8bbb96,0xbbb4be1f,0xbb0ebee8,0x3b19ab48,0x3b8fc95a,0xbaeb7aa2,0x3aefd3f2,0x3bb242fb,0x3bcf3fae,0x3bb22ce3,0x3b9d71ae,0x3bb71235,0x3be5d7d5,0x3bedb63e,0x3b0078e5,0xbaea39bc,0x3bb163df, +0x3b40d57c,0xba08ae57,0xbb21ac9c,0xbb146989,0xbb0f7b3a,0xbb0b45d3,0xbb091511,0xbafcdd71,0xbaea59c9,0xbb122cbd,0xbb31d0a8,0xbb45d179,0xbb5c1844,0xbb64e71c,0xbb794bfc,0xbb812e65,0xbb84717c,0xbb8ba5f9,0xbb8cc8ae,0xbb72a4c4,0x3b41025e,0x3b263389,0x3bc0477e,0xbaa5cbe3,0xbbd9720a, +0xbbba5c6a,0xb801d556,0xbb9fed5a,0xbbf93537,0xbbf2fe9a,0xbbeb584a,0xbbbc63ed,0xbbc24c30,0xbbe9b439,0xbbbdf463,0xbbb6c17b,0xbaf5f556,0xbbcaaae9,0xbbcf63d8,0xbb09656b,0x3ba16bc0,0x3b4a376e,0x3b55c6a6,0x3b580d6f,0x3b49baf7,0x3b399c43,0x3b1ce4db,0x3b22eb21,0x3b2c0f88,0x3b4aa178, +0x3b40cfab,0x3b398cf3,0x3b474ee7,0x3b20548a,0x3b11ac67,0x3b046996,0x3b217bd1,0x3b85748e,0x3b9e93be,0xbc0ca760,0x3a99d2e5,0xbb784d67,0x393fa487,0xba4176da,0xbae208d0,0x3b13fe92,0xba9097c6,0xba8f9d97,0xba54c734,0x3b08154b,0xba8de49e,0xbbc07fed,0xba888181,0xbb852b10,0xba8e341b, +0xbba78c22,0x3b142544,0x3b98381e,0x3b81a155,0x3b8486fd,0x3b331f2a,0x3adec3a8,0x3a4a5987,0x3aaf1704,0x3b11cf0d,0x3b8b0c82,0x3b7584b2,0x3b652a44,0x3b83349f,0x3abfe17a,0x3a777cce,0x3a8c7eac,0x3ae540c2,0x3b95b2f0,0x3ba4386d,0xbb6de567,0x3b368a55,0xbb0330b8,0x3aa38e24,0xbaa76fab, +0x3b07025e,0xba3487e9,0x3baa9444,0xbaa7a967,0x3bf53899,0x3af99ba8,0x3af514eb,0xba7e51a7,0xb9ebc38c,0xbb00f087,0xbb0be065,0xbb20690f,0x3b01bd6b,0x3bdef19d,0x3b8f6830,0x3bb23c90,0x3b42b71b,0x3af093c5,0xba0608bd,0xb9208808,0x3aa2c158,0x3b9bbf06,0x3b63e000,0x3b5a9622,0x3b78463b, +0xb986830a,0xbac1e53e,0xbaa90dd1,0x3a6d36fa,0x3bde3286,0x3bfb87b3,0xbb72b9fb,0x39da104c,0xb92f0dc0,0x3b0b953e,0x3b461787,0x3b019b8d,0x3b76b7fe,0x3b9de677,0x3b7a804e,0x3c064a01,0x3baa5a49,0x3bb92b51,0xb941dead,0x38f406b8,0xbab1d7a3,0xba1c7da8,0xbb197366,0xb9de8506,0x3c023662, +0x3ba4de65,0x3bb757a2,0x3aea541c,0xba7ae0e7,0xbb93cbea,0xbb1b8273,0xb6aac074,0x3bd259ad,0x3b897e95,0x3b68f6fb,0x3bb32a61,0xbb515f59,0xbb8c64ae,0xbaf365d3,0xba81c130,0x3ba0d4f7,0x3c04a2ed,0xbb617a69,0x3b04a100,0x3b25eb17,0x3b91db4d,0x3b61cdb4,0x3af4260d,0x3b76addc,0x3b932749, +0x3bd4c652,0x3c0bfcc9,0x3c01b766,0x3b7c1ea8,0x3b6b716c,0x3adef042,0xba70e3a2,0x3b8d14a8,0xbb9bcda2,0x3b414217,0x3c0381b1,0x3bc63762,0x3bddff35,0x3b33813e,0xba25901d,0xbb547124,0xbb486d6c,0x3a17f6f1,0x3bedee7a,0x3b8b522a,0x3b557eda,0x3b6246e3,0xbba6c798,0xbbfd88a4,0xbb892c44, +0xba87b361,0x3be26be1,0x3c8cdf1e,0x3bb0063c,0x3b14d580,0xbbd3219c,0xbbc0f411,0xba6a1886,0x3af710b7,0x3bc0927a,0x3c1d40bd,0x3c2fbaad,0x3ae01f6e,0x3a2bf90f,0x3bbf3b0b,0x3aa0db9b,0x3b37c03e,0x3ad7c253,0x3be5c775,0x3b388328,0x3ba275cc,0x3c2d3511,0x3c173429,0x3c5fda05,0x3c1da699, +0x3c22646d,0x3c5fb0d3,0x3b40acaf,0xbade9b6a,0xbb2fd711,0x3b9fcfbc,0x3c2287b0,0x3b557b28,0x3c7b725b,0x3c7fc6f1,0x3b8ee847,0x3bd6f94b,0x3c1c3890,0xbc08aa13,0xbceccbef,0xbbcdaa35,0x3c000fd2,0x3ba47bc9,0x3b1f491f,0x3b9dd374,0x3b646bac,0x3b1feda0,0x3bc4398f,0x3c01865c,0x3bd66d52, +0x3b2b27ca,0x3b7feaf1,0x3b970eb8,0x3aed1758,0x3ac2a1e5,0xbb050531,0x3957b7fb,0x3bb08da9,0x3b9a510d,0x3c39cb8d,0x3c315935,0x3bee25b6,0x3ac01e8e,0xbaf62dc6,0x3984867d,0x3bc7467f,0x3af4fe16,0xbaaf9292,0xbbc9fca8,0xbadd1cd8,0xb97cbe86,0xbb71c06e,0x3bbc7ddf,0x3c2b36a3,0x3a664d07, +0x38870998,0xbb3737e5,0x3be60fa9,0x3b96482b,0x3b8082f8,0x3ad4b75d,0x3b0efd16,0x3b4587d2,0x3b337797,0x3b8d329a,0x3b803599,0x3b672359,0x3affcae2,0xba34758e,0xb90844fe,0xb9ad754e,0xbb05d71d,0x3b3cd34d,0x3b010a06,0x3ab7591c,0x3bab48df,0x3bd67a3f,0x3c0b1a31,0x3c04839b,0x3c187013, +0x3be42413,0x3c2b09e5,0x3ba66c00,0x3adfc792,0xbb5ed76f,0x38767f74,0x3b5b2755,0x3c0f108e,0x3c1f49fa,0x3c283337,0x3c1e656c,0x3bc88b22,0x3bf12ba7,0x3a07399b,0x3b712a48,0x3b2f46a9,0xba16c0c8,0x3b3b275c,0x3b5a1fc3,0x3b019c7c,0x3b27a3ba,0x3b1eec16,0x3b5704d0,0x3a2f8cfe,0xbaab0c84, +0x38fc48cc,0xb99b611c,0xbb27b1e6,0xba9f2445,0x3b6656dc,0x3b042500,0x3b73482e,0x3b6c8452,0x3b903fdf,0x3b96adbf,0x3ba471ab,0x3b71936c,0x3c04f998,0x3ad33c32,0x3b4e3d29,0x3c161d09,0x3bb3fd86,0x3bb5eb6f,0x3bc213e0,0x3bf530e1,0xba2ab67f,0xbbd5e03a,0xbbee196f,0xbb973e99,0xbbb9894b, +0xbb1ec102,0xbb59eb8a,0xbb768048,0x39db8f66,0x3ac5d6d9,0x39b8d59b,0x3b4721fb,0x3ae07407,0xba127b77,0xb9d7433d,0xba348589,0x395b6b2d,0x3915b76c,0xba395462,0x3ba9b2f2,0x3bc4a4ca,0x3bd6e9f7,0x3bcae974,0x3b53ae89,0x3a65921e,0xbb0c843a,0xbba143b7,0xbb98fa41,0x3a4c72a1,0xbb02c5cb, +0x3b0fd0b9,0x3c576286,0x3c33a727,0x3c2b412f,0x3c1cd43a,0x3b04ea43,0x3b234480,0xbbe88b61,0xbc59d6e6,0xbc0e84b9,0xbbf305f1,0xbc1436ca,0xbc025c0f,0xbba236df,0xbb97e483,0xbb1510ea,0xbb157ece,0xbaaf6b67,0xbad61559,0xbb2594a1,0xb9759af6,0x3a0b39b6,0x3a82b5cf,0xba9edc4a,0xbae5605a, +0xba82f4a4,0x3a005e98,0xbaeca7c6,0xb9b3d031,0xb999a9c0,0x38cf0fcf,0x3aa0564d,0x38e0f819,0xba37c87e,0xbae8c2b9,0xbb74f3d3,0xbb87ccb5,0xbbd12e3d,0xbb0c31a7,0x38852513,0x3b580ac8,0xb99f97dd,0xbb3e4496,0xbbb843e5,0xbc17fac9,0xbc049bd1,0xbc2d8705,0xbc3d686f,0xbc3434a1,0xbc3599d2, +0xbc042e91,0xbc00e219,0xbb9bd5a8,0xbbd40b26,0xbba5ebec,0xbb63df31,0xba6e1a44,0x399abae8,0x3ab04c5b,0x3af18082,0x3a3d6903,0x3b382c7e,0x3b24b9a1,0x3b113e4f,0x3ab26291,0x3ac4ef3b,0x3aa801f7,0x3a3dd5e1,0xba22ad61,0xba7466bb,0xba9366c8,0xb9cac817,0x3a9233c0,0x3b2c89ce,0x3b27ff23, +0x3a6d7300,0xba6f181b,0xbb2e7bd9,0xba8bb155,0xbc1cf6e9,0xbbf062ab,0xbbee4112,0xbbfed9c9,0xbb9354a3,0xbbedf918,0xbbc4ab32,0xbbd9afcd,0xbbc27d72,0xbbe23d1d,0xbbaf96e8,0xbb923180,0xbb2d6a88,0xba144620,0x3a6edc57,0x3ac0fca4,0x3a9fdf97,0x3af1d031,0xb81f1692,0x3b3aca37,0x3acedcbf, +0x3ac8b26c,0x3b06c36a,0x3b32c188,0x3b79af4a,0x3b040e0d,0x3a04154f,0xbaef8f45,0xbad197ab,0xbb0dd325,0xbb1f5065,0xbb6a0e78,0xbb8b9e9b,0xbb8367d0,0xbba610d6,0xbb92ba19,0xbb9a1124,0xbc265f99,0xbbd6de3e,0xbbff07dc,0xbbf9414d,0xbbb37cf8,0xbb41335d,0xbb96f570,0xbb9e4f43,0xbbf645cc, +0xbb67953e,0xbb4eb433,0xbb020120,0xbb0dc401,0x3a025af3,0x3b19cfaf,0x3b125223,0x385405dc,0x3b62cbe1,0x3b906dfb,0x3b3a71dd,0x3b419e56,0x3b4395f4,0x3b52efe1,0x3b6dc1cd,0x3b107d8f,0x3abdf9a3,0x39e09fed,0xb9b01c3e,0xbaafc3a9,0xbaecc8fc,0xbb21100f,0xbb61476d,0xbb837419,0xbb9f7430, +0xbb910243,0xbba3f310,0xbc1ec76b,0xbba637d2,0xbbb8c49d,0xbbcffe27,0xbbaed39c,0xbbe8924d,0xbb8d7fce,0xbba070e7,0xbb89c356,0xbb96092f,0xbb50044f,0xbb5e2908,0xbb2b37f1,0xbb1b8d74,0xbb4bfd6d,0x3a0a1a5b,0xba90f602,0x3b7e6092,0x3b3c0e25,0x3b6382d8,0x3b60710d,0x3b607fb0,0x3b53d348, +0x3b48c6a1,0x3b6bb16d,0x3b6f1a5d,0x3b5df1e5,0x3b693356,0x3b606857,0x3b515513,0x3ac71f71,0x39b479b5,0xba90001a,0xbb291d1b,0xb8915dbb,0x37d69d3e,0xbb58be1f,0xbbc12f7c,0xbba91c37,0xbb174789,0xbb91544b,0xbbaa97a8,0xbbba1474,0xbbb0b1e9,0xbba11ebe,0xbba4d014,0xbbb0eb27,0xbbb167f3, +0xbb75e4c3,0xb9f31321,0xbb64ded6,0xbb541c73,0xba0e0f22,0x3b1d4052,0x3ae85528,0x3ae6bea1,0x3adcc68d,0x3adc9c94,0x3adc9abb,0x3ad00d2e,0x3ab97107,0x3a99a15f,0x3a95d819,0x3a6dc720,0x3a437d66,0x3a455a73,0x3a03d44e,0x39c886a0,0x3909033e,0xb8188ee2,0x3a11d89a,0x3a24c9b5,0xb9b5cde8, +0xbb07d830,0x3b91c435,0x3bea46ff,0x3b64011d,0x3b69826e,0x3bca35b3,0x3bb0c61e,0x3bb210b4,0x3ba7fec4,0x3b85dde5,0x3b8bf14e,0x3b9c6bed,0x3b8657c5,0x3bd1a0a2,0x3b8b3a66,0x3b2ee5e7,0x3bc972ff,0x3b911129,0xbaeb2a1a,0xb918a4b4,0xb8fffd29,0xb9a450e2,0xba50ad86,0xba864eff,0xba971e58, +0xba7c2211,0xba3c99b6,0xb99eefa1,0xb9a21d26,0xb983c1af,0xb80b0bee,0xb930bc50,0xb9935dc1,0xba1df3f4,0xba02a62f,0xba223bce,0x3b41d9f7,0x3c21e0a7,0x3b1c73e9,0x3b9396c3,0x3b6ae8cb,0x3ba3b6be,0x3b45cd85,0x3aca3c4d,0x3bb14b12,0x3b946376,0x3bcfd516,0x3b68430b,0x3b975af9,0x3ba66aca, +0x3b04498a,0x3b4d0664,0x3b02e43a,0x3bc01d23,0x3b000084,0x396111f4,0x3a893433,0xb9136568,0xba879ac8,0xbaf78f13,0xbb2374a8,0xbb0a351b,0xbac33b1d,0xb948a5da,0xb92db267,0x39545b38,0x3a49bbfa,0x3965cc2a,0xb91617d8,0xba53c4a0,0xb8ea0333,0xbae9fbff,0x3b534923,0x3be6de81,0x3b3729fc, +0x3b9b1e29,0x3b9bed6f,0x3bcd6f77,0x3a1396ab,0x3bba68e9,0x3af77e00,0x3c096b98,0x3b382b83,0x3bb4d7ad,0x3bb060bb,0x3b5572e0,0x3a885537,0x3a585c8c,0x3b162d21,0x3b87316c,0x3adf7fa3,0x3995d88b,0x3b0ef682,0x3877ef63,0xbaea255b,0xbb7012e4,0xbb8b5e10,0xbb74d82c,0xbb0df165,0x39d64248, +0x399a0b3c,0x3a81eb47,0x3b04c09f,0x3a9fcc3c,0x396fed61,0xbae68190,0xba071579,0xbaa579db,0x3bf19b19,0x3c42075b,0x3bd07071,0x3b4e03e4,0x3b95b46e,0x3ba42950,0x3b194d20,0x3b81b6ae,0x3b978f43,0x3b8f134b,0x3bc3e751,0x3c0115a2,0x3b4b1437,0x3b58fb5c,0xb9da6a9b,0xba91b601,0x3a7165c8, +0x3b924617,0x3b6c0c22,0x3a987dfc,0x3b49352b,0x3a37996e,0xbb3246b2,0xbbac1ee6,0xbbbe751d,0xbba100f0,0xbb49f196,0x39dd5681,0x3a0a7be9,0x3ae79c7c,0x3b5b9365,0x3acbb29b,0xb363d24e,0xbb1c97b7,0xb909400a,0xbb11584d,0x3b6a9e32,0x3bd71768,0x3b4bb37d,0x3b639485,0x3bc0d1bc,0x3b85a906, +0x3ab13759,0x3b758f24,0x3b9c302d,0x3b958eeb,0x3c097ae9,0x3bda373e,0x3b8ad060,0x3ac69e06,0x3a3aa179,0xb70db5c7,0xbb5b1a0e,0x3bc8aff5,0x3adb7a46,0x3abfaea0,0x3b910a80,0x3a938fd3,0xbb311cd6,0xbbcf9487,0xbbf152b7,0xbbe2ce3c,0xbb557dd3,0x3a9a1c46,0x3a82c0ee,0x3b4e09bc,0x3b928ceb, +0x3b5d85ff,0x39d22df1,0xbb6a73ef,0xba98dea6,0x3b01efec,0x3c408bd1,0x3cbff3e3,0x3c86d34a,0xba8021be,0xbb208ff6,0xbb1381c1,0x3b576740,0x3b857a4f,0x3c08a145,0x3c4328e6,0x3b33f08c,0xb96d6e31,0x3b9e73d1,0x3ac96491,0x3a868e3b,0x3bde1609,0x3b9055a2,0x3c1754cb,0x3bc314b6,0x3af68038, +0x3aa2c44c,0xbad48c90,0x3b7c7f1a,0x3ad5da30,0xb896ec43,0xbc4ed550,0xbc8df1f9,0xbc8f4782,0xbbdbf498,0x384619a9,0xbac4652a,0x3c2a8606,0x3c141cfd,0xbb03d1df,0xbac72ca5,0xbc04f8d7,0xbc0259a9,0xbc618735,0xbc72b696,0x3c8e31fa,0x3ba55fc5,0x3b55e6a2,0x3bc0ef20,0x3b30c149,0x3b3ea516, +0x3bb618b1,0x3bec04b6,0x3bd8ccdf,0x3acccbbd,0x3b588091,0x3ad3c992,0x3b3fa04b,0x3a89b7d6,0x3b775f9d,0x3b9eca01,0x3a4b586f,0x3ba8b925,0x3bef5d77,0x3bfb6e4d,0x3bb6e2bc,0x3b307cea,0x3ab34bd9,0x3ab992a4,0x3bbecf81,0xba5612f1,0xba817807,0xbb0b6ad2,0x3bba2e1b,0x3bae2874,0xbb451432, +0x3afe3cac,0x3bdc0ba6,0x3b83c2a8,0x3a689169,0xba91e381,0x3c1d8963,0x3b9e380b,0x3b9b13a3,0x3b03b8a0,0x3b37840c,0x3b316e66,0x3b0739f9,0x3b69018f,0x3b6d97ab,0x3b31f705,0x3b3cfc74,0x3a312014,0x3afa717c,0x3ae8792e,0x3ad7b1fa,0xb82c6e38,0xbb199f18,0x39f28ecd,0x3b050a22,0x3b3d3e7e, +0x3b2e51be,0x3b955c92,0x3a1bde9e,0xbaa14926,0x3a81164d,0xbbed7931,0xbc019555,0xbab5c238,0x3bfb2169,0x3c428c5a,0x3c403393,0x3c25c837,0x3c438c10,0x3c20eb2c,0x3c2c9d62,0x3c052d0b,0x3b2815dd,0x3ba34c8d,0x3b5d51a8,0x390587be,0x3b351000,0x3b3020fe,0x3aeec7fc,0x3aff328d,0x3b13450d, +0x3b2775c8,0x39831972,0x3756fb18,0x3a787de0,0xba6af5d3,0x3aa78e9d,0x3b2047e9,0xbb1f6f4a,0x39b79c08,0x3a3cc84c,0x3a8fc89e,0x3b01c450,0x3b5ccd67,0x3afc54d5,0x3af78eb2,0x3b747b0a,0xbb390b54,0xbb377f83,0x3bb1598d,0x3c188695,0x3c4c0fd5,0x3c6c5015,0x3c365010,0x3b4e5876,0xbb329e94, +0xbbaf4449,0xbbb5d50f,0xbb213b43,0xbb3482cb,0xbb3a4dfc,0xbadd37dc,0xb98be0b8,0x3aa35cff,0x3acaaa42,0x3b18bf18,0x3aebaf13,0xbade54ac,0xb9363670,0xb88c098d,0x3a1ef5dd,0x394d2887,0x3b015558,0x3a972dbc,0x3b11af72,0x3b7330f3,0x3b6dc40f,0x3b84f1fe,0x3b554970,0x3940c581,0xb9930b69, +0x3ae10f07,0x3c382e67,0x3bd01f1c,0x3c21897c,0x3c35abe1,0x3c875571,0x3c8b27ab,0x3c629d97,0x3c42891c,0x3bd658e8,0x3be3872d,0x3b1f36fd,0xbb4e2976,0xbb6849ae,0xbb993dfb,0xbb6bc1c9,0xbb65d84a,0xbaf8d325,0xbb021b1c,0xbb25868d,0xbb118d44,0xbb0cc206,0xbb3cc993,0x3828eef7,0x39363f9f, +0xb8e8d6f4,0x3acafe40,0x3b1d8d23,0x3b2039d2,0x396e7749,0x397e171f,0xba898c34,0x3a231a36,0x3af0ecc2,0x3b90dab6,0x3bb332e9,0x3ba30d8b,0x3b98c5bb,0xba333909,0xbb480bce,0xbbe3d64b,0x39d83d8c,0x3b9b48a3,0x3ba58223,0x3bedb114,0x3903c2a1,0x3808491d,0xb9aafc09,0xbb4566bd,0xbbe5a195, +0xbc108522,0xbc2f239e,0xbc1cd818,0xbc123f1f,0xbbb79c2d,0xbbd98601,0xbbb2ea8d,0xbbbca266,0xbb8bd48d,0xba91b862,0x3a9fdba3,0x3b2eaa41,0x3ac6f0e2,0x3b04b1f4,0x396f29b4,0xb94e160d,0xb8333bda,0xbaa069ef,0x3ae25231,0x3b2dd7be,0x3b54f527,0x3a56190d,0xba8c2b52,0xbb0b6120,0xbb0d5a3d, +0xba87867b,0xba31e089,0xbae48bb0,0xbab09482,0xb9136923,0x38f28241,0xbb918b3c,0xba6dfec1,0xb914b6a1,0xbafd7546,0xbb24d62c,0xbbc0a1fc,0xbba6a8d5,0xbbd48ffd,0xbbc58194,0xbbf493d8,0xbbe40979,0xbbe60da3,0xbb8dd160,0xbb975ac1,0xbaa2797f,0x3a459c23,0x3b8e3526,0x3b633909,0x3b181bf9, +0x3b5c79ca,0xb9db2241,0x38ce441a,0xba295440,0x3a0f0c74,0x3aa12ab7,0x3b1012f3,0x3a2e40d0,0xba148a1f,0xbb2290e8,0xbb5fbd5f,0xbb999d8a,0xbbb7c374,0xbbb78c94,0xbbafa0a3,0xbbb1a897,0xbb874a69,0xbbb526e2,0xbbb19455,0xbb6349fd,0xbb830332,0xbafeffc4,0xbafc2bfb,0xbb28bf00,0xbb80cf7f, +0xbb774903,0xbbb13dba,0xbb6b4e45,0xbbb4e7c1,0xbb56f0df,0xbb4a7f7d,0xb98b961e,0x39235def,0x3b153ae6,0x3b0892c1,0x3b9e7f75,0x3b23e6a1,0x39e9573f,0x3a98bbe3,0x37949b17,0x3a19e47f,0x39bf458e,0x3a4b2724,0xb9be5ea2,0xba07aacb,0xb9855c8c,0xba998858,0xbb082679,0xbb59160e,0xbb76d792, +0xbb84d6d0,0xbb9b95c2,0xbb93f102,0xbb928ff7,0xbbb025bb,0xbb3eb261,0xbbb608df,0xbb9f92fe,0xbbaf3a25,0xbbb3b047,0xbb906688,0xbb9ab9b1,0xbacee593,0xba2b3677,0x39dc07b1,0xba2cba0e,0x399fd997,0x3a90d86e,0x3ab0eeb2,0x3b025e21,0x3a2bd23f,0x3b59a41e,0xb9ba8d3d,0x38c6f202,0x399b1ead, +0x39e82e12,0x39e50205,0x39cdc41d,0x3a0d4506,0xb962805a,0xba458580,0xbabea6a3,0xbac05946,0xba89d13b,0xb9e77028,0xbabd8559,0xbaf99b63,0xbb3dace6,0xbb831e0d,0xbb11b4af,0xbb371fa0,0x39bdfa14,0x3af4d9d8,0x39fad40b,0x3a5a681f,0x3b1ba61c,0x3ae60f2b,0x3b02c23a,0x3aa07baa,0x3a23654d, +0x3a8288d4,0x3ad6d171,0x3ae9944e,0x3b2dfb3d,0x3a50e192,0x3acc7c28,0x3b56dd23,0x3ad6a379,0xbab604b7,0xba65dca8,0xba8947eb,0xba979663,0xbaa3aa39,0xbaa7cefe,0xbaa8e1b0,0xbaabca5d,0xba97e0c8,0xba887695,0xba8eed5a,0xbab1fe99,0xbaca3279,0xbaeb8247,0xbaeaf15f,0xbb01027a,0xbb066d21, +0xbab1164f,0xbb79dce2,0xbb10661b,0xba8f47fa,0xbbc5799b,0xbba0c157,0x3a65ccd5,0xbb9bc50f,0xbb9213ea,0xba89a7c4,0xb95eb5ce,0x3a0fcee8,0x3a8e4b9c,0x3aa0b882,0x3ad4f48a,0x3aadcb98,0xbba3bc2c,0xbbc0228f,0x3abc2a61,0xbb8d6bca,0xbbadd1c9,0xbab1a0e3,0xbb0338f9,0xbb1af471,0xbb1d50a3, +0xbb380641,0xbb409bbe,0xbb45b8c4,0xbb37c0f1,0xbb2f8f1a,0xbb19f138,0xbb31b514,0xbb319920,0xbb2ac187,0xbb50296f,0xbb51d4e7,0xbb2dd49c,0xbb2b8046,0xbacaf0df,0xbb2a1f51,0xbb2f9651,0xbaa6e20a,0xbb183d1c,0xbafef549,0xbb376494,0xbae007e8,0x37aad25a,0xbb1ad9cc,0xbab870a3,0xbb23cc3a, +0xbaa15dbc,0xbaa96865,0xbad2f381,0xbb881954,0xbb8831e8,0xbb5c1d73,0xbb8d9f87,0xbb8e5cac,0xbad8f31c,0xbb3cafc2,0xbb7c8283,0xbb9fc78d,0xbbbdd06a,0xbbe7887c,0xbbbbda34,0xbba902d7,0xbb813407,0xbb9dccee,0xbb9db1df,0xbb90a0ef,0xbbe328b4,0xbbd9a433,0xbb8010ba,0xbb7c8ba0,0xbac6ecd0, +0xba905171,0xbb7ec4c0,0xbb122571,0xbb475467,0xba00a271,0xba6d0e55,0xbad001a5,0xba588ea5,0x3ac4bef7,0xbaffb6de,0x3aa11442,0x3ad1b891,0xba933c62,0xbb19b548,0xbb6a0c7b,0xbb9c117f,0xbb4d3949,0xbb82cab6,0xbb0df517,0xbab2ec31,0xbb60aa14,0xbb9e2096,0xbbde8984,0xbbf57c21,0xbc10f5ba, +0xbbf4986d,0xbbc6e4a5,0xbb94abee,0xbbc175d0,0xbbdbdf50,0xbbbbe6cf,0xbc1f4581,0xbc15d215,0xbb9d6414,0xbb99b0cf,0x3a52c95c,0x3b28c914,0xba8c4342,0xb996bb54,0xbab779fc,0x3af5e4b8,0x3b58f006,0xb9c4ebc8,0x3b6c2850,0x3b87ae14,0x3b64d226,0x3bd69b81,0x3b6aece9,0x3b7e63d9,0xba9b2d96, +0xbb14dbfa,0xbb766b94,0xbb5d3ee3,0xbb66feb1,0xbb2ba02f,0xb9de9c23,0xbb252c3d,0xbbcb76b0,0xbc266936,0xbc5b7ccb,0xbc7365a6,0xbc36e98b,0xbc1404fa,0xbbc6b5a9,0xbc028ef5,0xbc1d7698,0xbbeace79,0xbc7ba09d,0xbc5b4ab9,0xbb8ccf38,0xbbad8a87,0xba69d1a2,0x3b00172a,0xbb55618f,0xba23c54b, +0xb99a3814,0x3b83734f,0x3b6b50b8,0x3ac6d6ba,0x3b7545f9,0x3b823d89,0x3bcb439c,0x3c0fe5b2,0x3bfe3cb4,0x3b804fe9,0x3aecf80b,0xba56a3db,0xbb46f57c,0x39936656,0xbb6920d4,0xbaa0df26,0xba04d81f,0xbb844d20,0xbbfd5882,0xbc300c40,0xbc583c6b,0xbc576364,0xbc357b76,0xbc013d94,0xbb8bb845, +0xbc10cd4a,0xbc2b1b20,0xbc04f6b6,0xbc8c4909,0xbc7c9224,0xbbb11f4c,0xbbb641e6,0xbaea23fb,0x3bca45b5,0x3bf38a8b,0x3bf290b4,0xbb86d6b3,0xbbdb1cc4,0xbbb66bf6,0x3aa2feaf,0x3b0787af,0x3be8e94b,0x3c528d92,0x3aed7921,0xba0734fe,0x3b839b9f,0x39bebede,0x3ace55e5,0x3af67aec,0x3b958648, +0x3a8f407f,0xba513ff3,0x3aa7fbff,0x3b1c3fdd,0x3bd3e478,0x3baf0b01,0x3b76efec,0x3b943651,0xbbd7e639,0xbc31ec21,0xbc7188b0,0xbbb0fb99,0xbb705e95,0xbc802a79,0xbae2fea1,0xba828874,0xbc20eaaa,0xbbd64dd4,0xbabb18e9,0xbc354df1,0xbcf9713d,0xbc83db4e,0x3c26bb7d,0x3b546cb6,0x3b4d0bc8, +0x3b4399cf,0x3b446eb1,0x3b1eae83,0x3b95fd7d,0x3bf72c9e,0x3bdbffcf,0x3b03ad50,0x3aea8b9d,0x3ac07198,0x3a2f3237,0x3a19282d,0x39f22a9f,0xba769003,0xbb686490,0xbba7e1a1,0xbb819140,0x3a7362f1,0x39d6bb96,0xbac1fd7f,0xbb2b3f5b,0xba4a2a4c,0x3ba21a16,0xbba657f0,0xbc00092e,0xbbec94b0, +0xbb6bfe83,0xbac9c27f,0xbac933a0,0xb98bd088,0x3bf196d4,0x3b71006c,0x3a2927b1,0xbae34d3b,0x3bc50f0a,0x3b8836f5,0x3b81688e,0x3ae3b1da,0x3b1cb4a3,0x3b357308,0x3af134b5,0x3b6e4856,0x3b4dd737,0x3b5a5148,0x3a1f9e1f,0xba9cb4b7,0x38ada6bf,0xba750d73,0xbb415a0f,0xbb14ed85,0xbb1f7a22, +0xbb43928d,0xbaf4241c,0xba8d323e,0xba1eb000,0xbada0ad1,0xbb08af9c,0xbb214549,0x3b636d1a,0xbbc47c2f,0xbc4cff14,0xbc9348fb,0xbc41a99d,0xbbe5ca91,0xb96f59e4,0x3bad6804,0x3ba61b0b,0x3c169091,0x3c29ca42,0x3bf9d850,0x3b0b6cba,0x3b4bebb5,0x3b0ebc29,0x3aab7acd,0x3b36b1dc,0x3b452d89, +0x3acd3765,0x3ad9c700,0x3acbdd13,0x3b178b32,0x3a0504f9,0xbb0076b4,0xba91e2ee,0xba8a58a9,0xbb2e127e,0xbb5ec08e,0xb9a55571,0xbac6421c,0xbaaefbe3,0xbb019d4e,0xbb482e20,0xbbae427f,0xbbe27937,0xbbd191be,0xbb195b1f,0xbbed051c,0xbc095f1f,0xbc257625,0xbc2cc390,0xbc427a90,0xbc7c9efb, +0xbb198b18,0xbc5b7aea,0xbc1ed6d9,0xbc3e2299,0xbbc7e8b6,0xbb8e0565,0xbb28ad28,0xbb23ee9c,0xbb4c362e,0xb9ef3051,0x3a62d3af,0x3961096e,0x3af58cd1,0x3a6e5be7,0xbae24bcc,0xbac7d60d,0xbad01ed4,0xba508160,0xba3b12b2,0xb9da5477,0x3b160add,0x39b2ea23,0xba21ae6b,0xbab0bde7,0xbafd98ab, +0xbb1a672e,0xbb8da3e1,0xbbca0b34,0xbba970d0,0x399f0ea4,0xba5b3568,0x3ad1de01,0x3c0168e6,0xbb2b5d2f,0xbbfcc620,0xbc6f4df6,0xbc6a7188,0xbc675443,0xbc0005a1,0xbaf280f0,0xbc0389f5,0xbb8df766,0xbbbba376,0xbba787d3,0xbb6f3d05,0xbb805554,0xbb443a9e,0xbb753578,0xbb4b937a,0xbb42916d, +0xbb4af503,0xba814658,0xb9dc5413,0x3a2eaee9,0xbaf64121,0xbb2a68bc,0xbab8770f,0x399bb128,0x39d1274e,0xb79e52a4,0xba373b1a,0xbb0fa5f3,0xbb94b6cf,0xbbaaf3dc,0xbbf4a8cb,0xbc492d05,0xbc303669,0xbc407b1a,0xbc99a900,0xbc870907,0xbc80981c,0xbc74cae2,0xbc7b05e4,0xbc16a79d,0xbc218fc1, +0xbbeaf4c9,0xbbeaa602,0xbc4adad2,0xbc3fe6f8,0xbc40c63f,0xbc397096,0xbc13f5e4,0xbc0a4f0f,0xbbb5d043,0xbbd6d9e6,0xbbb215c7,0xbb9e017a,0xbb3628b3,0xbad4ad43,0x39e6fe8a,0x3a390680,0x3a702034,0x3ad2e3cd,0x3a08a663,0xba7f5d27,0xbb20ce91,0xbb4f76a8,0xbb4db936,0xbad7bece,0xbb019f55, +0xbadae1a0,0xba0bceb3,0xbae19809,0xbb1aee65,0xbb738687,0xbb5f3495,0xbb9bd712,0xbba5a6de,0xbc04b1cc,0xbbaf11dc,0xbbaa86ef,0xbbd92245,0xbbd99cce,0xbbfccffe,0xbbe0226e,0xbc096778,0xbbffad30,0xbc0654aa,0xbbf1d6e3,0xbc05918f,0xbbd2d0ad,0xbbbdc733,0xbbae210a,0xbb3a2b26,0xba014f25, +0x3ad3c215,0x3a47f7d8,0x3a08e37b,0x38d7ca0b,0x3a0638ae,0xb9a96aee,0xba1befbd,0xba84ddd7,0xba635800,0x394c40bf,0xbabbda42,0xbb1ae17e,0xbb6e20a7,0xbba248ee,0xbbdc1c5b,0xbc0cd94d,0xbbfc4902,0xbbd5d643,0xbbb7a120,0xbbaff7ed,0xbba85afe,0xbbcab5bd,0xbbee78b6,0xbbc177a9,0xbbb0aee2, +0xbbb8bd07,0xbbb9aad1,0xbbb7a4f7,0xbbd01287,0xbbe0ea65,0xbc115e5a,0xbbf8c507,0xbbb6b9a5,0xbbcb98fa,0xbb3ef5be,0xbae3d933,0x3a636170,0x39ae37a2,0x390e2f49,0xb60bc789,0x3aaf6c3e,0x39d69f13,0x3a27ee91,0x3a372f45,0x3a1bb6c7,0x3994f031,0xbaa794b2,0xbb26adc8,0xbb816380,0xbba3183d, +0xbbc5d89d,0xbbee26bb,0xbbd707b4,0xbbe02e49,0xbbd92bed,0xbbcf6cf8,0xbbb92e5d,0xbbbb6f50,0xbbe18254,0xbbd559f6,0xbbfedc74,0xbc027626,0xbbfed8cc,0xbbd428a2,0xbbbcbda8,0xbbb449e9,0xbb90959e,0xbb9483f8,0xbb907725,0xbb833a60,0xbba47c4e,0xbb9c8108,0xbb65e0f2,0xbb4c6429,0xbab4c106, +0x3a288cf8,0x3a0822a7,0x39b292f3,0x39ab1035,0x38b5ee6a,0x381856c5,0x3985d84b,0x39259272,0x38525171,0xba286746,0xbaaee9b4,0xbb00a745,0xbb4a0ef0,0xbb727458,0xbb698424,0xbb86bd37,0xbba90419,0xbb3edbe4,0xbb53c5c4,0xbbacf1cf,0xbb8d8882,0xba83018c,0xbb9064e2,0xbb905223,0xbb054e85, +0xbb00e034,0xbaebe864,0xbacd057d,0xbaafd122,0xba6ed93e,0xba2dbdf8,0xbb90946a,0xbb83658b,0x398236e7,0xbb596ab0,0xbb6da29d,0xba91cb99,0xbacb8f43,0xbacbf982,0xbac8ef4a,0xbac4500e,0xbac5fa57,0xbad478f7,0xbb05efe4,0xbb1b4260,0xbb2a5e87,0xbb3a85fa,0xbb3c1048,0xbb4863d4,0xbb47d15a, +0xbb45d59c,0xbb50b928,0xbb4c5814,0xbb837f71,0x3b97f37b,0x3b3972de,0x3b7a3f7b,0x3bb88860,0x3afbfdab,0xbb8e4bf6,0x3babe894,0x3b275bd4,0xbb5193f5,0xbb62a043,0xbb828d5f,0xbb7c7e9d,0xbb85b465,0xbba73a55,0xbb843391,0x3b18659a,0x3b9cd9e7,0xbbba5de8,0x3a7c986b,0x3b8e11fa,0x3b60b958, +0x3b5df485,0x3b76eef4,0x3b668b9f,0x3b56b694,0x3b48b411,0x3b366596,0x3b466401,0x3b5557a1,0x3b6396b7,0x3b6c9b5c,0x3b6a0e53,0x3b810258,0x3b6aef58,0x3b56838e,0x3b26a7a4,0x3b3e1e6e,0x3b5954cb,0x3bffaab9,0x3a8548d3,0x3b452c57,0x3976ce0e,0x3b625dbc,0x3b8efb11,0x3a526c69,0x3b33407e, +0x3b82e924,0x3b1b0d84,0x3b9104d3,0x3b81396d,0x3b261ed8,0xbae2fa5f,0x3b12d974,0x39ea5477,0x3acd4917,0x3aca7526,0x3bc1821a,0x3ba35f80,0x3bb9c70a,0x3b9c5d27,0x3b7ef132,0x3b545b41,0x3b4a9227,0x3b7e923a,0x3b93a6b5,0x3ba81e6b,0x3bbbe0ef,0x3bbffe1d,0x3bdacebd,0x3baed0a3,0x3b91409b, +0x3b3441df,0x3b5c7874,0x3b2b419c,0x3be385e2,0x3b8ec018,0x3baf322a,0x3b0220f3,0x3b94f6e7,0x3b824fd8,0x3b0d5fea,0x3b7a0e42,0x3b9747d1,0x3bc6d77d,0x3bcfbc3d,0x3b4bf9c4,0x3bc6cef4,0x3ae219b2,0x3abba643,0x3a94234d,0x39e8b9b0,0x3b283980,0x3b82c702,0x3be3c8d5,0x3beab6eb,0x3bcc29e5, +0x3b8f0a45,0x3b427776,0x3b0baa2a,0x3b5c1ca5,0x3b9cb36f,0x3bd486cf,0x3bdc7497,0x3bf17359,0x3c0ce873,0x3bd3ae9c,0x3b8baef8,0x3a03c79f,0x3b233c71,0x3b53fe78,0x3c293142,0x3bde0f1c,0x3baa8c9c,0x3add46f2,0x3b8677a8,0x3b91aa71,0x3b4c2ddc,0x3b91410e,0x3baa8ef8,0x3b72b228,0x3bc18dce, +0x3bd68392,0x3b9a284b,0x3ac55d08,0xba17c81f,0xba4671f9,0x399bdc36,0x3b0e699c,0x3b842bdd,0x3c0be4e5,0x3c099c02,0x3bed7e75,0x3b91cb63,0x3b40f903,0x3b006967,0x3b87b107,0x3bc07b18,0x3c03b265,0x3c186686,0x3c2803dd,0x3c4907ec,0x3c020925,0x3b923707,0x3a0166ca,0x3af56e35,0x3aa78618, +0x3bf66b03,0x3b960087,0x3b71432a,0x3b3b6e86,0x3bdb2dbd,0x3ba39dd1,0x3a99c843,0x3b7908a3,0x3ba2442c,0x3bb8093f,0x3c0710af,0x3bef4ba2,0x3b99ca2d,0x3b004a69,0x3907378f,0xba9c544a,0xba60887f,0x3ac7023c,0x3b9f5b98,0x3c117482,0x3c337d66,0x3c1410d2,0x3baf61aa,0x3b28d290,0x3a85ac41, +0x3b51d0c0,0x3bde18dd,0x3c184297,0x3c21ce88,0x3c367d41,0x3c4a2f13,0x3c1323ae,0x3b700f58,0xbb22f425,0x3a0a94f7,0x3c2be50b,0x3ca55e9b,0x3cb3aeb4,0x3c7eea1a,0x3a6b6a35,0xbbca0fae,0xbb984ccf,0x3b0461b2,0x3b145a0b,0x3bd93103,0x3c58bdf5,0x3b4905b8,0xba5e9ce0,0x3b4c82ac,0x3a907ed2, +0x3b21a31c,0x3ba09d0b,0x3bcafab9,0x3c0b8886,0x3c150319,0x3c22c3ac,0x3be9a022,0x3b96ec31,0x3bd6f780,0x3b9d4f53,0xba4e93d3,0xbba97c20,0xbbed1a23,0xbbcd6264,0x3ba427c0,0x3c426d20,0x3c0bf717,0x3c8edff3,0x3c789aaa,0x3adefbf7,0x3beb9d28,0xbbbbe100,0xbba91119,0xbcad60b6,0xbc461b72, +0x3c60502e,0x3c00749a,0x3b83f7b8,0x3b832f19,0x3b3b542e,0x3b43f916,0x3b9c1ea1,0x3be1d064,0x3bd7fd32,0x3b1f656a,0x3b40e100,0x3b18842b,0x3b62cce6,0x3b232b20,0x3aa0d820,0x3b6356b5,0x3bdfbe54,0x3c22a796,0x3c789121,0x3c485022,0x3c0b92bd,0x3b053848,0x3a8ee16c,0x3ae283ef,0x3c1578fe, +0xba39ad6a,0xbaead101,0xbae10b11,0x3bd51a44,0x3bc94bcd,0x3a5b18f2,0x3ace5203,0x3c0d68d2,0x3c1d497a,0x3bd51274,0x3ad10463,0x3c0bae38,0x3baacaed,0x3ba81506,0x3b79e03a,0x3b5a89e7,0x3b6e5291,0x3ac4729f,0x3b7be354,0x3b6fcd11,0x3b215701,0x3b6bb08d,0x3a823de2,0x3b1b7cff,0x3b2077ec, +0x3b079b55,0x3b3387be,0x3ac96517,0x3b42726d,0x3b89b795,0x3c28fdda,0x3c4b0844,0x3c5ea7b9,0x3c24d424,0x3bda60dd,0x3bbb61e7,0xba887754,0x3ad3b6bd,0x3bed2966,0x3cabe308,0x3cc7e032,0x3c98882d,0x3c4ec9ad,0x3c5220ed,0x3c2a3797,0x3c070373,0x3c1903f2,0x3b32f17a,0x3b6c6c30,0x3b37a237, +0x3b5e75fa,0x3b6955c1,0x3b3889b9,0x3b0e9ee5,0x3ae1b324,0x3ae107cc,0x3b00bef2,0x3a62f5da,0x3a7f31e0,0x3a75a7fa,0x390d6c24,0x39c4784a,0x3b18b90b,0x3a8f6b50,0x3b3b3220,0x3b2106eb,0x3c198f8a,0x3c4b06b1,0x3c691fa9,0x3c596160,0x3c344735,0x3becd78a,0x3bb71e68,0x3c186468,0x3c71f11c, +0x3ce2ed1d,0x3cf7a98d,0x3cd29477,0x3c7f51eb,0x3bfac40c,0xbba658f5,0xbbeeb576,0xbbca59ca,0xbaab29dc,0xb876580d,0xbaa3517f,0xbad24564,0xb9c48041,0x3a2a5c58,0x3a8fd2d9,0x3ad7557a,0x3a595b41,0xbaa0ebdf,0xba1a7590,0xba71cded,0xb9f87004,0x3a972a7f,0x3abe0b31,0x3b1f1657,0x3b8edf0c, +0x3bf1312e,0x3c179cc4,0x3c08aeb1,0x3bb756ce,0x3af06bfe,0x3b131923,0x3ba3b835,0x3c40b446,0x3c1faaba,0x3c5a6ad5,0x3c5bb0c3,0x3cbbf9c1,0x3cd3b5ee,0x3cfb70e1,0x3c946cdc,0x3ca25b9f,0x3c1de2a8,0xbb7631a5,0x3ad76645,0xbb247bd1,0xbb0519e8,0xba3f1d03,0xb8da5f3d,0xba44f960,0xba7238db, +0xbb1ca9d1,0xbb3763af,0xbb49b70e,0xbb031062,0xba505201,0xb89f5337,0x3ac2b56a,0x3accf038,0x3b091e78,0x3afc15b8,0x3b2e36b2,0x3a90b6cb,0x3a2a7f49,0x3aee7424,0x3b85fbe8,0x3c0424ec,0x3c1a0fc9,0x3c19298b,0x3c1c20d6,0x3beb075c,0x3be79ca8,0x3bce604a,0x3c4c05d1,0x3c6c0992,0x3c70f270, +0x3c7b4791,0x3bd7be75,0x3b5c55b9,0xbb4f0d59,0xbb8b5688,0xbc0897ce,0xbc207d70,0xbc26ef20,0xbc182a09,0xbc01c395,0xbbbd378e,0xbbb1ff35,0xbb902cc1,0xbb8fafd0,0xbb87e95d,0xbb0255c5,0x378ff860,0x3b1d949d,0x3aea47ba,0x3aaaa38b,0x3a681c29,0x3b0732d6,0x3b3659f5,0x3b029ed0,0x3b726515, +0x3b80f6b9,0x3bbd1277,0x3b8166a3,0x3b0bfd6d,0x39ddebaa,0x3a285c14,0x3b5476b5,0x3c11416a,0x3bd80d26,0x3bddc80e,0x3c077728,0x3be61aca,0x3b6b2549,0xbaca9449,0x3a8b521f,0xbabb68be,0xbb17a814,0xbb709a21,0xbbb9ee4c,0xbbde71b6,0xbbde1a47,0xbbef2ece,0xbc001ed1,0xbbef5585,0xbbc89b28, +0xbbc0e6b1,0xbb226114,0xba1509ee,0x3b3ee690,0x3b30da28,0x3b2b32d9,0x3b1c5897,0x3b14c711,0x3aec57c3,0x3ab1b8da,0x3add9e27,0x3b066726,0x3b358eb0,0x3b1932b1,0x3b02814a,0x3a8bed10,0x3a1750d3,0x3a1bbabe,0x3b28682f,0x3acad93d,0x3a9bfa1c,0x3abdc148,0x3a5a781e,0xba865272,0x39656005, +0xbb59992f,0xbae050be,0xbb063c19,0xbb58186f,0xbb6f006a,0xbb8dc9e6,0xbb9c5eb0,0xbbac3b32,0xbbac56d8,0xbb81e4d0,0xbba3d0d7,0xbb6b2283,0xbb419a6d,0xba06e6ec,0x3ac970e8,0x3aa52fa3,0x3b09011d,0x3b4949c3,0x3a950316,0x3a8239ea,0x39101553,0xb8df122f,0xba5a5d56,0xbac35858,0xb9c35a1e, +0x3a371d6e,0x3b1faea9,0x3b1bc6a8,0x3b04b86d,0x3a8a3f77,0x3a38cb8a,0x3a0c1b1e,0x38370ee1,0xb97b1d2c,0xbab2a886,0xbadae559,0xbba415ed,0xbb424782,0xbb39da23,0xbb7367c9,0xbb15d5fc,0xbb9c5c36,0xbb21fb26,0xbb141295,0xbaf84632,0xbac7e96c,0xba155ba8,0xba70852f,0x3a0a320a,0x38f86b69, +0xba9c6d16,0x39b5cc3a,0xb7fdb4df,0xbaa30343,0xbac637bc,0xba4cf50d,0xba384f84,0xba0239a1,0xb8aa6ad6,0x39df3e92,0x3820d79d,0xb7b1078c,0xb94ff1e6,0x39d7e33c,0x3ace9fe5,0x3b5604a5,0x3b0d221a,0x3aa5b2fc,0x39a141be,0xb9c472b3,0xb9b8d2bf,0xb7e46f42,0x3a25da09,0xbabbfaa7,0xbb8e0f28, +0x3a93874e,0xb928f8d1,0xbb7a185e,0xbb8f2f3d,0xbb914c70,0xbb93ebd2,0xbb9a5bcd,0xbba80405,0xbba6caf6,0x39112d7f,0x3abbab35,0xbb659e4b,0x39bc22d0,0x3ad2e5d7,0x38ea0ef0,0x39d2df3a,0x394504ff,0x38093631,0xb9093531,0xb9ae5e13,0xb9e8795f,0xb983c7e3,0x39785db9,0x3a17ef39,0x3a465578, +0x3a056f63,0x39e76f07,0x3911a268,0x3934d7ef,0x38186e11,0xb8fe035e,0xb793dcca,0xbbdb12f6,0xbb9abffe,0xbbcbd47e,0xbbab609e,0x3a37671d,0x3bc06b90,0xbb9d98bd,0xb96754e8,0x3bb5daec,0x3bd52807,0x3bebfc90,0x3bd6ab78,0x3be0fc42,0x3c08ae4b,0x3be1f882,0xb9b40f77,0xbb998aa3,0x3bde670b, +0x3a706d3d,0xbb76c7ab,0xbbbbea98,0xbb9c9546,0xbbaf7bd6,0xbbb4908d,0xbbc3d76b,0xbbc4b9f2,0xbbbdd98f,0xbbb3bcac,0xbbaf15dc,0xbba97671,0xbbb5c564,0xbbb34e77,0xbbb1736d,0xbbbd73c9,0xbbbb087d,0xbba3116a,0xbbaaecb0,0xbba78537,0xbbbf651f,0x3bb6cd1c,0xbae8c148,0x3a583284,0xbac0448c, +0xbab864a0,0xb8a50b1a,0xba774af5,0xb9bfa765,0x3a0461e1,0xba2c7867,0xbb051243,0x3a260439,0x3b627d33,0xbb826617,0xbabeb064,0xbb40698f,0xb909de07,0xbbd2b4ed,0xbbb24bf5,0xbbcd1463,0xbc0247d8,0xbc0a2ceb,0xbc12ca11,0xbc232277,0xbc081ef7,0xbc03c167,0xbbff9232,0xbc0de554,0xbc0a8a95, +0xbc0438e7,0xbc1da482,0xbc13f16a,0xbbc26259,0xbbca25df,0xbbc40bc4,0xbb8ae6cb,0xb97e9e11,0xbb851a57,0xbad3652d,0xb8b7c33a,0x3af24087,0xbb5d38b9,0x3ab6a32a,0xba766ea7,0x3ab7310a,0xbb41b2cd,0x3b0f8b6b,0xba3c1a0b,0xbabafd15,0xbb83cac7,0xbb90256c,0xbaf1a1ba,0xbb06ec94,0xbb6c89a4, +0xbbd9582e,0xbbe60892,0xbc27e6cb,0xbc39cdf1,0xbc409057,0xbc40b814,0xbc1df1a1,0xbc0948e4,0xbc09b812,0xbc1caa06,0xbc2a701c,0xbc15c775,0xbc3e88e5,0xbc2afc1b,0xbbbcf95d,0xbbe2853d,0xbb930b69,0xb9987eeb,0x3b966a74,0x3a9dae3c,0xbab3bb44,0x3b19422f,0x3b75b2a7,0xba9fae09,0x3b74fb39, +0x3b7b22c7,0x3b5cac46,0x3b89446a,0x3b49fa1d,0x3b10dc15,0xba47fa99,0xbb617c0d,0xbb848ed5,0xbb785910,0xbad8057e,0xbafe415e,0xbbc8523f,0xbbcdf75d,0xbc45aac9,0xbc77968a,0xbc8fb64f,0xbc8848dc,0xbc4c9087,0xbc32e59c,0xbc37765f,0xbc4bd21c,0xbc64322e,0xbc3f8880,0xbc85ce02,0xbc608ffd, +0xbb9f4354,0xbbce5954,0xbbc9ea66,0xbb34fc54,0xb80e0c08,0xbae9a3b8,0xbb1dd311,0x3b80c9a4,0x3b83fc0f,0x3a69cbbe,0x3b74f606,0x3b819561,0x3ba4c8bc,0x3c0190a2,0x3bd639b3,0x3b7eb2d0,0xb9146ef6,0xbb20c32c,0xbb468c17,0xbb7e1591,0x3a08ab40,0xbb4a8dae,0xbbcad48e,0xbc0bc0f5,0xbc73ae09, +0xbc882b06,0xbc9326fa,0xbc83c576,0xbc4aa626,0xbc1c78d0,0xbc108c46,0xbc5a5dcd,0xbc69ddd9,0xbc355ba8,0xbc89a505,0xbc62eb56,0xbba5ef7e,0xbbea97ba,0xbbc0b87a,0x3861cfe4,0x3c6d68c1,0x3c69f564,0x397c70f6,0xbbdad196,0xbc171d32,0x39abf8fa,0xba08d59f,0x3b9d55a6,0x3c50579b,0x3b0588d8, +0xbaa4ddd1,0x3b09aaf6,0x399afffc,0x3a3a9ad7,0x3b317fdf,0x3ad67b9e,0x3b0d5bfe,0xbaefacc6,0xbba1afb1,0xbb476e26,0xbb06813e,0x3a9fd66f,0xbaff167e,0xbb9eed95,0xbc74b3b7,0xbc9675a0,0xbcb28776,0xbc401ef1,0xbc3424a6,0xbcb332b6,0xbc1fbcd1,0xbc29935d,0xbc8ebc74,0xbc6780e1,0xbc661e0e, +0xbc690e16,0xbcb49cf1,0xbca68eaf,0x3c20380e,0x3b47e2fb,0x3ba1c374,0x3b17d2ee,0x3b15b5eb,0x3b14b69f,0x3b608894,0x3bd33883,0x3bd12021,0x3b080cd1,0x3a657af8,0xba363473,0x3a65f8cc,0x3a620174,0x3b78e327,0xb685f3d7,0xbbfe04dd,0xbc03813f,0xbc38a16d,0xbb883149,0xbb2f575a,0xbb086bc3, +0xbad6a09c,0xba736245,0x3ba002f7,0xbc008d78,0xbc1092f2,0xbb7f57cb,0xbb2390eb,0xba5e02e8,0x3b103c5b,0xbba27d4f,0x3b8c4063,0x3b987c45,0x3aff739c,0x38556f67,0x3b56fadc,0x3b546ffa,0x3b86f46f,0x3b592145,0x3b3cb270,0x3b287cc6,0x3a8cd949,0x3b346379,0x3b2303fd,0x3b2fe1b6,0x3a55bf66, +0xb97f9d79,0x3a68b577,0xb9c399ad,0xbb0f9323,0xbbab0907,0xbb9fabbb,0xbb8d70f1,0xbba0b8f9,0xbb84c723,0xbb9f2c94,0xbbc7b9ef,0xbc0272cd,0xbbf0f96f,0xbb88172a,0xbc4f44e6,0xbc96b87a,0xbcaf3ef0,0xbc1cc26c,0xbb8e499e,0xbb86228d,0x3b637fb7,0x3b0809f4,0x3bffdfbf,0x3c43b834,0x3bdc6e86, +0x3b493926,0x3ac8ed41,0x3a886b47,0x3b72ac79,0x3b38432a,0x3b2153ff,0x3a933c21,0x3a03ab55,0x3a1a0dbe,0x3a8cfc13,0x39c97f2c,0xbab13269,0xbae3b3a9,0xbada4483,0xbad31e04,0xbb41de94,0xbb6c8043,0xbb4772d9,0xbb5c8d92,0xbb873cd4,0xbbbece4a,0xbbf37636,0xbc215f55,0xbc0a5d60,0xbc180267, +0xbc213d35,0xbc45a480,0xbca05240,0xbc3f885a,0xbc4e6988,0xbca587ac,0xbba4456c,0xbc82226e,0xbc016bd2,0xbc438633,0xbbe6c149,0xbaf776a4,0xbb1d1353,0xbae55d7d,0xbb05b2b9,0xbad8591f,0xb9c07884,0x386c0394,0x39162d4e,0xb972e9e2,0xbb0b3c6e,0xbb058bb4,0xbb0889dd,0xbabc6cf6,0xba81a9ee, +0x3a319deb,0xba6576bd,0xbb4c3e7c,0xbb82750a,0xbb907a41,0xbb49bc8c,0xbb24ed04,0xbb2ad91c,0xbb46c7ff,0xba9e5956,0x3b68c26f,0x3b938b6b,0x3ba268a5,0x3acc5264,0xbc01abaf,0xbc61d46c,0xbca18985,0xbc868e4a,0xbc85c122,0xb979b1d7,0x3c184093,0xbb52a673,0x39e17a00,0xbac03e38,0xbaa44d7c, +0xbac8de26,0xbac8f45e,0xbb06278c,0xbb551c7c,0xbb77b25e,0xbb745cae,0xbb37137a,0xbae98205,0xbaa299cd,0x39dff676,0xba8e846c,0xbab26284,0xb8f8d47e,0x393bc6ae,0x3b176893,0x3a1b6898,0xb8a72932,0xbaf577c2,0xbbad30ed,0xbbafe8c1,0xbc004418,0xbc5e618c,0xbc3c8c68,0xbc43baa7,0xbc8995ce, +0xbc88b1bc,0xbc8cb51c,0xbc982d02,0xbc85d64c,0xbc1ebdc3,0xbc0daa5f,0xbb8b0ad0,0xbbc553dc,0xbc32005b,0xbc2baea7,0xbc38d7d9,0xbc1c9a13,0xbc152db1,0xbbf6ecd9,0xbbcb9ef7,0xbbbce0e3,0xbbaada1c,0xbba2ce9c,0xbb6db113,0xbb1e224b,0xba03f8db,0x39e479fa,0x3b04a629,0x39ffdfc1,0xba3144b6, +0xbb16e6f2,0xbb580ee5,0xbb85885a,0xbb7da991,0xbad21e5e,0xbae397de,0xbacd391a,0xb913fa0c,0xbb04387a,0xbb828e17,0xbbfa6d31,0xbbed50f4,0xbbf77933,0xbbed42d3,0xbc0c1d9f,0xbbf227f8,0xb96a0543,0xbb7c21f3,0xbb98cce6,0xbbba0ccf,0xbc082bee,0xbc047bd7,0xbc0ac648,0xbc0864b8,0xbc04d7c8, +0xbc059907,0xbbe32d07,0xbbc79ad0,0xbbd2ec4c,0xbb89355e,0xbadf8a5f,0x3ac1db33,0x3a6d64d7,0x3984f33f,0x3ab7c4d8,0xba9184d9,0xba8e0bea,0xbaca9959,0xbb0ce782,0xbb1b8498,0xbaced5f0,0xbb341d55,0xbb531ea3,0xbb77d2bf,0xbbbe8094,0xbbfce167,0xbc271049,0xbc00fefd,0xbbc7ff13,0xbbc38150, +0xbb898ce1,0xbba73c95,0xbbc9b3aa,0xbb2ceb77,0xbb7bccb4,0xbae38acf,0xbb10a2b1,0xbb8a9f39,0xbbdf364d,0xbbd12a90,0xbbeb1c07,0xbbeb45f5,0xbc0fead6,0xbbc9eb69,0xbbf322f3,0xbb364c35,0xbb46171e,0xba36a8e6,0xbaa545eb,0x3a1fdd4a,0xbb08aaf2,0xbacdcdf8,0xbaad4e8c,0xbaac7624,0xba97f3fc, +0xbac2be0f,0xbb007863,0xbb4dce47,0xbb8b5c67,0xbbade305,0xbbc711c5,0xbbdcb732,0xbc03a921,0xbbeccd6e,0xbbe9cef7,0xbbd74bbe,0xbbc03d28,0xbba9bd1f,0xbba7f7fb,0xbb035819,0xbbbff8a6,0xbbdcc605,0xbbd08092,0xbbdd60f5,0xbb57af45,0xbb976e06,0xbb5b6d28,0xbb208d22,0xbb10569d,0xbb5f5aee, +0xbb3323de,0xbb9148b7,0xbb8db03c,0xbb21cf25,0xbb9a9928,0xbaae8676,0xbb3574f8,0xbaf1de61,0xbb20cd60,0xbb124556,0xbb199e0f,0xbb091a6c,0xbac47cf6,0xbb20fe7e,0xbb3e7964,0xbb8263db,0xbbab533f,0xbbca61a9,0xbbf7211b,0xbbe6ca35,0xbbc22b62,0xbbbd4765,0xbbc5228d,0xbb9e6e36,0xbbb2813c, +0xbb94f27d,0xba834bdd,0x3b0d88b8,0xbb869bcd,0xbb0e3f56,0x3a8b3f9e,0x3ac0ad71,0x3aac3c79,0x3a91c4cd,0x3ac76962,0x3b1f8a4b,0x3b35e95f,0xbb2fcf46,0xbba3911b,0x3b206301,0xbac8e2f1,0xbb8879c0,0xbb8364c1,0xbb83e192,0xbb835028,0xbb809973,0xbb800809,0xbb806443,0xbb808fd6,0xbb8fb012, +0xbb96ecfd,0xbb9f4c11,0xbba41eec,0xbba22a7b,0xbbac4019,0xbba98fb2,0xbba6a5ab,0xbba8e854,0xbba51764,0xbbe4094b,0x3b82cdee,0x3b4151c0,0x3bbb03b6,0x3af43d86,0xbb8c48dc,0xbbfcb5cc,0x3b1dd3b9,0xbb2b856a,0xbc05502b,0xbc065b63,0xbc0952fe,0xbbeee921,0xbbfcf503,0xbc16fabe,0xbbf3afd4, +0xbb548157,0x3a825ec6,0xbc0bda92,0xbb95a81b,0x3a06a822,0x3ba4e853,0x3b6912ad,0x3b7eb1a8,0x3b736ac1,0x3b6d5feb,0x3b654f0c,0x3b5577b6,0x3b67f4b3,0x3b726c28,0x3b75baf6,0x3b77825b,0x3b70169e,0x3b82921d,0x3b629757,0x3b4ea408,0x3b2e6d74,0x3b476e35,0x3b8039de,0x3bd7f92b,0xbbd96de3, +0x3aced1d3,0xbb7ff5b8,0x3a8b5616,0x3a7abc76,0xbae1b04c,0x3b1f72c4,0x3a05fad2,0xba0f4b3e,0x38f5eced,0x3af2aa34,0xb9e0b7e9,0xbbd09c1f,0xb905f2a3,0xbb4c8e8a,0xba28d2d0,0xbb73852d,0x3b928529,0x3baac03b,0x3ba4fc4f,0x3b94e8f5,0x3b79a572,0x3b619493,0x3b5d1455,0x3b9d2af8,0x3bae5f2f, +0x3bae7e5c,0x3bb97474,0x3bb43a7a,0x3bcd2854,0x3b892ec3,0x3b5bd2ef,0x3b23acc9,0x3b390d2f,0x3b7345c1,0x3bb7a4b4,0xba697e6d,0x3b795323,0xbb23531a,0x3b03fe5e,0x39a7258f,0x3aeb46fd,0x3a2b9246,0x3ba7d35f,0x3ab2073c,0x3bc96dd9,0x39a9c34e,0x3b724d7b,0xba87b2a8,0xb992667a,0xba7cd363, +0xbb0dbb4a,0xba8efb31,0x3b47e0d2,0x3bf81ea3,0x3bbc9566,0x3bbeb5d6,0x3b87fb09,0x3b747f32,0x3b3c4d2c,0x3ba1cfce,0x3bc72ad5,0x3bd7edd9,0x3bcddd92,0x3bc96b85,0x3bebe246,0x3b7e313e,0x3b07df2d,0x3906ef7a,0x3adf88ed,0x3b9cd757,0x3c05f49b,0xb9ced476,0x3af603f7,0xbab18223,0x3b1e7311, +0x3b4db342,0x3b04776c,0x3b948e53,0x3ba98b5a,0x3b4f89cf,0x3ba6fd30,0x3b61b872,0x3bb0f952,0xba9f7bc9,0xbabc9b4d,0xbac1ead2,0xbac42907,0xbae6d441,0x3acce9f8,0x3c13f072,0x3bd816e1,0x3bc591dc,0x3b6fa0a0,0x3b4160f5,0x3b0296e1,0x3bc6ca86,0x3bfc3181,0x3c06a2cc,0x3c0fa8fe,0x3c084c18, +0x3c2a849d,0x3b7bc8f9,0x3a99164a,0x39bb5d31,0x39784c34,0x3b0bcda9,0x3be158d4,0xb944db87,0x3ae24317,0xb9f5b177,0x3bb0ff13,0x3ba75217,0x3a8e5eb7,0x3b815b72,0x3b9e10f6,0x3bcade93,0x3bebcd4d,0x3be2eb6e,0x3b9601f0,0x3acd0599,0xba7af96e,0xbb1d8e21,0x3ab4da33,0xbb7330ec,0x3b956b6d, +0x3c17069f,0x3c082004,0x3bef0f8c,0x3b9168f6,0x3b4f1ad3,0x3b15da42,0x3bd0886d,0x3c1c714d,0x3c2639c7,0x3c114e5f,0x3c0332f0,0x3c141ea2,0x3b475607,0xba46f64f,0xbb22b810,0xba52694a,0x3c35b79b,0x3c9a0003,0x3c6ed6f0,0x3c3f6651,0x3b0907c2,0xbc1666b3,0xbbffb53f,0xba2cb578,0x39f63605, +0x3b9d9b4e,0x3c4444f4,0x3b2d864a,0xba58f975,0x3ab2db81,0x3a51f469,0x3b59f120,0x3aa84328,0x3bb52aa6,0x3b8aade7,0x3bf3cb8e,0x3c38bc89,0x3c0c77ff,0x3c15cbd7,0x3beea8d5,0x3bc30f52,0x3982e083,0xb8bd0a60,0xba7250cf,0xb9684516,0x3c202031,0x3c6b4bd7,0x3c05a1d0,0x3c618e3f,0x3c33fb17, +0xba02a4c5,0x3be1b6f7,0xbb5fbf91,0xbc00c6b6,0xbcdcc1be,0xbc2a1057,0x3b8c0ebb,0x3c051720,0x3bb7d441,0x3b290da8,0x3b308af0,0x3b0ce44b,0x3b6db409,0x3bc4f308,0x3bc29b6a,0x3b5fa81f,0x3b0eb6ec,0x3b18573a,0x3b2c53a8,0x3b4b7dda,0xba27d1bf,0x39da9307,0x3be65129,0x3be88318,0x3c4373c0, +0x3c1f09f4,0x3bd41fd8,0x39db2edf,0xba4b33f3,0x3a2f3d1b,0x3c2731a9,0xbafa7de9,0xbb899453,0xbb08516b,0x3af13d99,0x3b504a2a,0x3bb730d9,0x39a76497,0x3c0bb6d3,0x3c2111cd,0x3bfe07ac,0x3b0fdf62,0x3b6052fb,0x3b6e9e64,0x3b8f3109,0x3bb09b95,0x3b614627,0x3b7bc0c1,0x3a766195,0x3b633b90, +0x3b4de8d7,0x3b11fe98,0x3b4f12c0,0x3a717857,0x3acef473,0x3ab2c81a,0x3858197f,0x3b3a834c,0x3b4e6472,0x3b2f6cd0,0x3b6b6f45,0x3c2ea4b5,0x3c5f6396,0x3c600a5b,0x3c489281,0x3c14d215,0x3bd5e415,0x3b3670d4,0x3b9ed095,0x3b96d1a1,0x3c949ad2,0x3ca84de1,0x3c4ff7c2,0x3c223b4d,0x3c04ce00, +0x3c0e26b8,0x3bbfea7c,0x3bfd9bc3,0x3b02015f,0x39960e9e,0x3a1f23ca,0x3bb4a771,0x3b79c0ce,0x3b3fc7d2,0x3adbc74c,0x3a83476a,0x3a3709df,0x3a85a556,0x3a948288,0x3a3cbb9c,0xb926c1f8,0x396153d1,0xbacd1c3f,0xb8801d6a,0x3b4067a5,0x3b34530d,0x3b1ff124,0x3c21818c,0x3c50d9ef,0x3c7524d7, +0x3c658ae8,0x3c390459,0x3b9e4957,0x3c004b3d,0x3c4b183d,0x3c343e69,0x3ccde2b3,0x3ccc7913,0x3c6a4b9c,0x3c1f8cd5,0x3b2d42db,0xbbf0db40,0xbc169a73,0xbbcfb96c,0xbaa2ef29,0x3a8d2425,0xb9362404,0xbb0cafb7,0xba78c553,0xba04ef5b,0xb8095e39,0x39877138,0xba296c32,0xba2ee89e,0xbacc1046, +0xbb130223,0xbadf1298,0x3a5a3251,0x394ff3b4,0x3b10e432,0x3b83fdea,0x3bd49b75,0x3c0b2f06,0x3be2798a,0x3b7bebb9,0x3b148d82,0x3afa7b92,0x3b8e78ef,0x3bf4140c,0x3c0bf8c9,0x3c2ac76b,0x3c0ec68d,0x3c598d8a,0x3c7a31a7,0x3cc03876,0x3c128511,0x3c8a93d9,0x3bc4f0a4,0xbbb73d26,0x3b4d19fe, +0xb9459bf9,0xb973847b,0x3a07bafd,0x3ad89586,0xb9c8e52a,0xb8b2a419,0xbabcc9f6,0xbb31dda5,0xbb65b775,0xbad4fe23,0xbae1e471,0xba05f1cf,0x3b0973c7,0x3964e3c6,0x38b44132,0x39b27b00,0x3b49385b,0x3ab0403e,0x3afbbb0c,0x3aeb8e0c,0x3b404ad3,0x3ba5e09f,0x3bb2d33b,0x3ba4e562,0x3b7fd499, +0x3bb09e1d,0x3bf5b4e6,0x3c2eb0f9,0x3c432358,0x3c312365,0x3c338727,0x3c2b1d07,0x3b8daaba,0x3a02acf1,0xbbf634e8,0xbbf3bbf4,0xbc286afd,0xbc2fe9cf,0xbc1ef942,0xbc0b4221,0xbbe6c6b8,0xbbd6f557,0xbb8c9342,0xbb861b6e,0xbb57cc17,0xbb6a018d,0xbb3e3bae,0xbaf7b4e2,0x38cd1956,0x3ad8a4bf, +0x3a97e0e2,0x3af56815,0x3b50ee3c,0x3b6d9741,0x3b6fa624,0x3b2d697e,0x3b21e2db,0x3b85e37f,0x3b66b7d3,0x3b3e763f,0x3adafbab,0x3b122cf0,0x3b887cc8,0x3c14e841,0x3bf651ea,0x3be27fed,0x3bdd4052,0x3ba7bdf1,0x3bb392cc,0xbb553e71,0xbacf3354,0xbb67889e,0xbb99a547,0xbb7478d3,0xbbe8f21b, +0xbbe33fac,0xbbf45462,0xbbde1a40,0xbc03824c,0xbbd6844e,0xbbdcc2a3,0xbbb87696,0xbb6197b8,0xbaef5c34,0x3979f8fa,0x3a72e367,0x3af6b1f7,0x3a4c3a1b,0x3b6d369f,0x3b1c2fe3,0x3b1ffcc1,0x3af7e5bb,0x3afd4730,0x3b1507ea,0x3b1d4ae6,0x3b244a17,0x3b05bdc5,0x3b060a3b,0x3b2ef045,0x3b9b6641, +0x3b87a50e,0x3b6b023f,0x3b716464,0x3b0bfd2f,0x3a3f255a,0x3ad2957e,0xbb855d78,0xbabd67af,0xbb499c60,0xbb96bc05,0xbb9be915,0xbb9ff4c9,0xbbbc02bc,0xbbaaa568,0xbbeb0445,0xbb661789,0xbbbd2793,0xbb856b66,0xbb976f35,0xbac68508,0x38b24058,0xb858df31,0xbaaf47e6,0x3b127c80,0x3af808ff, +0x3a77ad99,0x3a5d3427,0x398355c0,0xb9dcfce9,0xbabc76fe,0x37f464e6,0x3a755906,0x3b193f11,0x3b2aed91,0x3b27c28d,0x3b0fafe7,0x3afe3f87,0x3ae43ffb,0x3ae893ce,0x3a641eb9,0xba403e91,0xba1bfea9,0xbbccf8dd,0xbaf8de83,0xbb26e41a,0xbb4421b4,0xba7d8927,0xbb7eada1,0xba604bee,0xbb3d9b80, +0xbb3f5b02,0xbb62dc89,0xbad52197,0xbb37d290,0xbaf4c776,0xbb1d5cbd,0xbb8dbcb0,0xba7dd159,0xbb58f483,0xba5182d7,0xbac2258a,0xba555609,0xba4466b2,0xba0d7e43,0x3616b40d,0x3a1d3c77,0x3a0ce1b8,0x3a3acb6c,0x3a1e08b7,0x3a885c3c,0x3ae1193c,0x3b31c234,0x3b006914,0x3a9ace3c,0x39e95a71, +0x394989c3,0xb89c612a,0x3a133ce9,0xbac876c7,0xbb9ebbb6,0xbbd46b91,0xba7b14f5,0xbb774f82,0xbbeb7b46,0xbc03e68f,0xbbf6e50c,0xbbea2144,0xbbf904f8,0xbc0aa266,0xbc0b1ca9,0xbb6c27bb,0xb9c23672,0xbbc93456,0xbb6368b6,0xba21fe05,0x3a219a41,0x39d2cb96,0x399b874c,0x395532a0,0x38d7cf00, +0xb8c141e2,0xb9663c5b,0xb90bf5e5,0x39618c68,0x39fa0f00,0x3a249614,0x3a0ba351,0x3a119217,0x39ae86a1,0x39b3d76d,0x3987e1ba,0x38a762af,0xba7cad37,0xbb87df29,0xbb6179cc,0xbbbdd1d9,0xba03691c,0x3b9e9718,0x3ba7598a,0xba7f330b,0x3b6e7b39,0x3bd5e19d,0x3be65f09,0x3bebdaa3,0x3bc819a9, +0x3bccda11,0x3bf4807a,0x3bcec026,0x3b773c15,0xb96aab47,0x3bb2a993,0x3b8f6d2c,0x39d0eae2,0xbba4d7cd,0xbb63dc99,0xbb7a5563,0xbb843b5b,0xbb914e97,0xbb91366c,0xbb8890d5,0xbb798d4a,0xbb6e7a19,0xbb6c761f,0xbb79c102,0xbb766936,0xbb701ba1,0xbb79d9d7,0xbb7719e4,0xbb640841,0xbb724c61, +0xbb8a80f5,0xbb46d142,0x3c14556d,0xb9aca33e,0x3b20e7a4,0x3a14e78f,0x3acba367,0x3ab584ae,0xb92d1e06,0x3b2b0c08,0x3b29ae66,0x3b14e5a3,0xb9ff47aa,0x3b2ac892,0x3b9b0aea,0xbab9d25b,0x3a89f3dc,0xba62da38,0x3b54db0b,0xbb47597b,0xbb89cbca,0xbb88e010,0xbbbae481,0xbbc09217,0xbbc45bff, +0xbbcef2b3,0xbb995613,0xbb93fbcf,0xbba620e9,0xbbb2bc21,0xbbab987b,0xbb9d7d94,0xbbb08bc1,0xbbab93a0,0xbb82fa1e,0xbb82ed99,0xbbb9518a,0xbb2ef37e,0x3b770555,0xbaea36ce,0x39875ea5,0x3acf61e1,0x3b8ae945,0xbb0d7d8b,0x3b71eec7,0xb9ede4a1,0x3bb14a73,0xbb235615,0x3b228ba5,0x3b0ce959, +0x39b4c515,0xbb0d7c06,0xbb0a89a9,0xb85255c5,0x3a806ff9,0xbad17940,0xbbafac00,0xbb8ff3ee,0xbbf2c497,0xbc05d393,0xbc0ab566,0xbbf95374,0xbba77496,0xbb83f0aa,0xbb9e397e,0xbbb27672,0xbbc212a1,0xbb9c5373,0xbbb99cd7,0xbba99886,0xbb74b5fb,0xbb956be5,0xbbaaee43,0x3a51a40f,0x3c0e0e19, +0x3b618bdc,0xba72050d,0x3b319558,0x3b752f68,0xb9268a19,0x3b892d40,0x3b89c5ec,0x3b6e0de6,0x3b217710,0x3b4da450,0x3b0a1f73,0x388f7fa4,0xbb477718,0xbb3db136,0xbb16c260,0x3a875482,0x3a45094d,0xbba6084a,0xbb8589fc,0xbc0a0bc8,0xbc2c8a2f,0xbc3aa61d,0xbc1988b3,0xbbaefd9c,0xbb88edd0, +0xbbd4bfbc,0xbbd824d6,0xbbed21f9,0xbbbbe376,0xbbe6fb9a,0xbbd1cb1b,0xbb6e6d8e,0xbb769c31,0xbbe1940c,0xbb51ec70,0x3b6def1f,0xba5aa77d,0xbb54f8f7,0x3b8498ab,0x3b986989,0x3a439b8d,0x3b816c12,0x3b93d221,0x3b8c14c5,0x3bcc3b32,0x3ba1662d,0x3b87f0e5,0xba975cf9,0xbb2f44fd,0xbb0b8851, +0xbbaa8942,0x3b6b24e4,0xba938fdd,0xbba316cb,0xbba23760,0xbc29fd00,0xbc432572,0xbc4ba7e3,0xbc2983cb,0xbbb56f31,0xbb39a7f6,0xbb8cefaa,0xbbe1f449,0xbbe6684f,0xbb99c1ad,0xbbcc7a27,0xbba6c704,0xbb5b6cf0,0xbb9eb86a,0xbb364238,0x3b043c98,0x3ca9c359,0x3c9a27ed,0x3ba81194,0xbbc8f96d, +0xbc2ac495,0xbaa04f29,0xbaaf2a89,0x3b5c4013,0x3c2906ac,0x3b276d09,0xba80a610,0x397fb980,0x3a81a8ed,0x3a949e7e,0x3b488c75,0x39e41206,0x3b90124f,0x3abeb364,0xbb8818a3,0xbb5b37fc,0xbbabb343,0x38ce5e36,0xbb629b2d,0xbc1895a2,0xbc847141,0xbc95d2e4,0xbc9610ed,0xbc0d7ba2,0xbbd42462, +0xbc342e68,0xbbae0419,0xbc0bb409,0xbc6e916a,0xbc3a635c,0xbc98ee0e,0xbc647efa,0xbc641ed3,0xbc9ae93d,0x3ba90d5b,0x3b9fe55e,0x3bec63eb,0x3b4892f0,0x3ad07a12,0x3ac574ea,0x3b291c6f,0x3b9edd03,0x3bb0f64d,0x3b2fcd79,0x3a85a1f4,0xba869827,0x3ae475a6,0x3ad3018f,0x3b9aaac1,0x3aeaef2b, +0xbb974915,0xbb4d556b,0xbbda6bac,0xbb30e4e8,0xbad541b3,0xba03aae3,0x391b9dbf,0x3903149d,0x3bd4503e,0xbbd03e26,0xbbd1abd3,0x393fb711,0x3a7454a5,0x3b2ceef8,0x3bee97aa,0xbb9eaa7b,0x3b2ac279,0x3bd9d9ed,0x3b60abec,0x3a9b0ea6,0x3a1e84a7,0x3aecccd2,0x3b751657,0x3baaa69e,0x3b5b01cd, +0x3b2c435e,0x39b6ca9d,0x3b0315d8,0x3b09c45d,0x3ae52295,0x3b129154,0x3aaf7c10,0x3adb7f2a,0x3a5c1e7e,0xb8e44b0d,0xbb6103f2,0xbb70bc29,0xbb11fe77,0xbb56ffe3,0xba8a09a7,0xbabaacc4,0xbaa7aaa9,0xbb921900,0xbb99ed9d,0xbbc24b18,0xbc3434e6,0xbc44cff8,0xbc13e8e8,0x3b28ce1e,0x3bbd8aec, +0xba641728,0x3b4c4186,0x3b07db01,0x3bd34f5f,0x3c1d4667,0x3ba773b9,0x3b2a93cc,0xba69cdbd,0xba2a8c89,0x3ba72624,0x3b4cca77,0x3b185d1a,0x3a25947f,0xb91f1518,0xb8f21307,0x387daef0,0x39e3e751,0x38e23975,0xba9d0205,0xbac31a1f,0xb92a4216,0xba46bc17,0xbb89f43d,0xbb0c3acd,0xbb219831, +0xba8c380a,0xba9fd1a4,0x39068956,0xbb14a23d,0xbae88e21,0xbbf022fb,0xbb7ea6d0,0xbb8ce15a,0xbc2e0926,0x3a548fef,0x39ec132e,0xbc0c2fd1,0xbaa3be72,0xbc032445,0xbbaea761,0xbc0c89b9,0xbbd2f5ba,0xb8ec3384,0xba4f8521,0xb940afb3,0xba84a834,0xbb03d7a4,0xbab2cb2e,0x3824d6df,0xba9b30c6, +0xbaa505d7,0xbad17fa9,0xbb0efd1f,0xbb1eac05,0xbaeafce4,0xba558b7b,0x3a96e93b,0xbb391ec6,0xbb367efa,0xbb150503,0xbaee9aa5,0x37e788ac,0x397bdcc6,0x3ab8c1bb,0x3b0cd80b,0x3b9717a8,0x3c0bccec,0x3c235b93,0x3c127f1d,0xbaa51e0f,0xbb34fda8,0xbb9eaf93,0xbba46106,0xbb9444cb,0xbae6705d, +0x3c1492df,0x3c4a8391,0x3b3f56c1,0x3b740c68,0x3b02b433,0x3b00c4b8,0x3a746046,0x3a57729b,0xb9877d09,0xba9712a6,0xbb433113,0xbb69754b,0xbb235797,0xbaf260e7,0xba9c4a1a,0x391da364,0x3a1fbe64,0x3a87450b,0x3ad0ad95,0x3a4b9cf6,0x3b395cf0,0x3a8e2a29,0x3a8bc529,0x39424e27,0xba8244f5, +0xba5d0b02,0xbb1cfd42,0xbbb3d52e,0xbb8f74c0,0xbb6ebffe,0xbb1057cf,0xbb3e3ae0,0xbb67599c,0xbbb8dff7,0xbaf18fba,0xbb9a3cc8,0xbb705ab1,0xbb1fe9c1,0xbbb129de,0xbc09985a,0xbc0ef61f,0xbc1ddc40,0xbbe65102,0xbc030aa9,0xbbbfdf2f,0xbbc0e83b,0xbb8d6c41,0xbb890597,0xbb808c7c,0xbb66cd60, +0xbb1e7efb,0xba9a59e0,0x3a2e53ab,0x3b2d373b,0x38b51b4b,0xb9c6b639,0xba684745,0xba686c68,0xbab4b2e1,0xba56ec80,0x3a22fe30,0x39b39c89,0x38af1136,0x3933d261,0xba53be6e,0xbb08956b,0xbb981ef3,0xbba7b8e0,0xbb9c96bd,0xbb915340,0xbb7fdef5,0xbb9ef359,0x3b25d970,0xba314a92,0xbb2e8572, +0xbb7bec3d,0xbc00419c,0xbbe1a062,0xbbf8fc46,0xbbece47c,0xbbfb89a4,0xbbf20d79,0xbbdb183a,0xbbb866e2,0xbbc0147b,0xbb885984,0xbb134323,0x3a5e872d,0x3aa8bc70,0x3a6e62f6,0x3b37552b,0xb9fa7d5e,0xb803b87d,0xb99a0c8e,0xba4abeec,0xba83a3c6,0xba6a75de,0xba8cb671,0xba8d0099,0xbab6b18a, +0xbb38c79c,0xbb7a8aba,0xbbac3948,0xbb62dec7,0xbb29a85c,0xbb51e8fc,0xbacb9582,0xbb503a0a,0xbb72971d,0x3990b703,0xbae5dc24,0x397ed476,0xb997f08e,0xbb3baaf4,0xbbcf25e0,0xbbb1ba39,0xbbc6e8ec,0xbb9c6906,0xbbe223d4,0xbbad9df8,0xbbbc3c5a,0xbb1c0fc6,0xbb34de77,0xbaa9b5cb,0xbaab021e, +0x3ab33656,0xba67cf78,0xbadcbc9c,0xba53300b,0xba9cb599,0xba84e4e3,0xbac26c0b,0xbafe8a3e,0xbb150d4d,0xbb2886d4,0xbb1b894d,0xbb323655,0xbb3e73ee,0xbb73b72c,0xbb68fe7c,0xbb5be0fd,0xbb479429,0xbb39b9dc,0xbb58e738,0xbb59bdcb,0x39c0ae04,0xbb7ae6fb,0xbb80335c,0xbb5ccee2,0xbb663f62, +0xba062a39,0xbb0de4eb,0xba30d35a,0xb98cc177,0x389a4de8,0xbaaf5704,0xba8115ca,0xbae72212,0xbae5874a,0xba4b3492,0xbb4748c9,0xb9fa537c,0xbb67bd76,0xbb28f546,0xbb441ff1,0xbb33ece1,0xbb33bfc8,0xbb1be7cf,0xbae541a1,0xbb3c1eba,0xbb5dfeaf,0xbb8e0763,0xbba98dd4,0xbbb8077b,0xbbc8861e, +0xbbb48df0,0xbb9a92d6,0xbb949e87,0xbb8de184,0xbb7adafe,0xbb8d7816,0xbae9e764,0x3a9352ea,0x3ad4c32c,0xbad92f31,0x39086a4c,0x3a9c9dd4,0x3ac5102e,0x3a947d62,0x3a305d59,0x3a80a650,0x3add3acd,0x3af87402,0xb99f358a,0xbb384db1,0x3aa8ede0,0x39c2f458,0xbb039243,0xbb7a52ed,0xbb64a453, +0xbb66ec72,0xbb645cbc,0xbb6602ba,0xbb68e8d6,0xbb6727a8,0xbb758671,0xbb70cc38,0xbb72fe17,0xbb70f540,0xbb701915,0xbb7e6c76,0xbb7ef753,0xbb7a5681,0xbb7a9eee,0xbb79c919,0xbbb47d62,0xb9d1c533,0x39275cce,0x3b1b84e4,0xbb578d99,0xbbd265c5,0xbb9a4bd6,0xbb0f0a52,0xbba5c32d,0xbbc5a6f3, +0xbbb99336,0xbbadc28a,0xbb89629c,0xbb94a020,0xbbaac1ec,0xbb87f99a,0xbbbbd0d3,0xbb6cf881,0xbb942352,0xbbc6bfbc,0xbb6bb910,0x3b04c889,0x3a016b55,0x39ea5060,0x39c761e9,0x398562a9,0x398666d7,0x3989c346,0x3a18452e,0x3a2f9cf0,0x3a263cb8,0x39d93abf,0x399b93f0,0x39de6c68,0xb8599d9e, +0xb91144dc,0x3777703d,0x38f47db4,0x3a73ec4d,0x3a51bf26,0xbbe92a35,0xba1dc99b,0xbb9f41f1,0xbacf6c32,0xbb17e837,0xbb2872e2,0x3a7d2535,0xbb07f80f,0xbaf25b11,0xbb4ca978,0xba922430,0xbb003e2e,0xbbb77cad,0xbb47c659,0xbb9e0fc1,0xbb3ca315,0xbbbc18b3,0xba23f8f7,0x3a8b89e3,0x38a5dcac, +0xb9a94f48,0xba4d6131,0xba658f8c,0xba92cfcf,0x3a63d03e,0x3aa2af91,0x3a4ce354,0x39b0bdbd,0xb79cbdb1,0x39c3db46,0xbad92f81,0xbafb1795,0xba65bbd9,0xba657c33,0x3a61fa82,0x39d20f56,0xbb8a64a8,0xb98318ef,0xbbaab34d,0xba3f7299,0xbadfab65,0x37c9e723,0xba9f4e73,0x3b4bddc3,0xbad40191, +0x3b1b83af,0xba8aa6c2,0x39d58ffc,0xbb41aa02,0xbb325054,0xbb782f27,0xbb71021a,0xbb7cc9a1,0xb8fbd673,0x3b095ca0,0xb9f74c71,0xba12fdf9,0xbaf11ea4,0xbab289b0,0xbad80851,0x3a94d7e4,0x3b0291d0,0x3aadaaa6,0x39295cbd,0xba74c766,0xb9a7e456,0xbb65bc92,0xbb6d14a1,0xbaf843bb,0xbae6de19, +0x3b1d4bf0,0x3b2390b3,0xbb6e3db2,0xba2c5a80,0xbb72dbb8,0x3a4393dd,0x3b009d5c,0x398a20b5,0x3b8f2527,0x3b9b7480,0x3b5ad4a7,0x3b6f01e6,0x3a1408ee,0x3b9977f4,0xbb43b827,0xbb29964c,0xbb436e74,0xbb59eb93,0xbb8a132c,0xbabd5ffc,0x3b338347,0xb9c0d94a,0xbae0ab9e,0xbb79e795,0xbb87070d, +0xbb892a32,0x3ab8d358,0x3b3fd209,0x3adfe1b0,0x3a2bf008,0xbab75300,0x38a3ea1b,0xbbcb0817,0xbbccb5ae,0xbb0095cf,0xbb4822c1,0xb906bbae,0x3acad8d1,0xbb68329a,0xba83c238,0xbb8cae8a,0x3b516229,0x3b989f18,0x3aad6bdb,0x3b87a792,0x3b979298,0x3bc809cc,0x3bb9dfd8,0x3bb518c0,0x3b8acb7b, +0x398c1642,0xbb122c6b,0xbb5e3973,0x3a878f4b,0xbbaffffa,0x3ac0cd86,0x3b2fc92c,0xba58e13f,0xbb207bc8,0xbb8981a2,0xbb825d11,0xbb4828f3,0x3b291f71,0x3ba7d6db,0x3b7d7e96,0x39185a5e,0xbb2c7495,0xbad99d47,0xbc04e679,0xbbf5a9ec,0xbb29d951,0xbb599a64,0x3b8b79ca,0x3c14f0f7,0x3c017968, +0x3c165add,0x3b6dd08b,0xbc1962ad,0xbc299b42,0xbb5ef1b4,0xba82896b,0x3b516b28,0x3c0e5366,0x3b15db4e,0xb93b3bc4,0xba0aa324,0x3a6902e4,0x3b508cb4,0xbab465c4,0x3b33fefa,0xb9bd902c,0x3b017888,0x3b9fa5bd,0x3b90d4cf,0x3c006b15,0x3ba337ba,0x3b5f165a,0xb9a4d041,0xbb13db91,0xbb3b387c, +0xbace6967,0x3bac7f54,0x3bd2e078,0xba0c725c,0x3ac543ea,0xbadaf24c,0xbbfd81a9,0xbad3a47f,0xbb98754d,0xbc43b190,0xbcdd22cc,0xbc481ed0,0xbbaa802b,0x3bcf7fe7,0x3c00157c,0x3b10cdd4,0x3b024937,0x3a1fb247,0x3b063c8f,0x3b95e15a,0x3ba084de,0x3b7b9f5e,0x3aa50e17,0x3aa266d5,0x3a8f1c5c, +0x3b0ebcb5,0xba40cb77,0xbad2d1dd,0x3ad79375,0xba5cc074,0x38a8d2cd,0x3a8fcf89,0x399991d7,0xbad69063,0xbaeb117e,0xb92e8e53,0x3c015613,0xbb840c5b,0xbbd66df0,0xbae31702,0xbb337526,0x3a7b2ad0,0x3c2c6a94,0xbaa7bbc5,0x3badab8b,0x3c0a6050,0x3b9dd26f,0x3a1cf926,0xbb17d1ad,0x3a8848ba, +0x3b3a9730,0x3bb9c1d8,0x3b4ccf28,0x3b4d5a5d,0x395de76e,0x3b1618c7,0x3b07c419,0x3afcc63c,0x3b0b4425,0x3a4feb46,0x39f197e2,0xb9648909,0xbaf86a13,0x3a1aba5c,0x3a8e008f,0xb97ba84a,0x39074c1e,0x3b97c56b,0x3be394cd,0x3bbe1acc,0x3bc32c8f,0x3b97002a,0x3b4fd2bb,0x3a2062be,0x39109083, +0xbb163c12,0x3b1f4e25,0x3b5fddb6,0xb8e1050d,0x3b111727,0x3a8a08cb,0x3bd27807,0x3b94f2d0,0x3b86ed03,0x3a467f92,0xbb582c74,0xbb09dd49,0x3bb5e9f8,0x3b6c6278,0x3b42954c,0x3a1c79d8,0x390792f0,0xb9cfa3ca,0x38c09b01,0x3a6e9a3b,0xb91e9783,0xbac1f4ea,0xba0865a4,0xbb393286,0xbb419434, +0x3aa500ff,0x38532d6f,0x39d2fc58,0x3b8c7bd1,0x3bb057f6,0x3bd69730,0x3bba6717,0x3b893aa3,0xbab325d7,0x3b8372ba,0x3bd51d65,0x37db0301,0x3bb22686,0x3b038901,0xbc12ca08,0xbb119cd3,0xbbe8c160,0xbc18e0ca,0xbc18f71b,0xbba86f21,0xbaf52b05,0x3aad0f2f,0x3a8706d4,0xbb0085b9,0xbaa5dc16, +0xbabf7dac,0xba652bd5,0xba9315d8,0xbaf7be10,0xba0c2334,0xbb3220ec,0xbb5f044d,0xbb27f3a8,0xba3be7ee,0xbaa62d76,0xb62bb711,0x3a404387,0x3aa61b4d,0x3b1cab78,0x3aaee62b,0xb78ac6ac,0x3aae6003,0x3a8e387d,0x3b253075,0x3b2450fb,0x3bbf3d3d,0x3b9f42a4,0x3ab68176,0xbb4d7907,0xbb83ca8b, +0x3a02cd67,0xbbd0c58e,0x3b917ced,0x3ab9ac3d,0xba70a678,0x3aead6d2,0x3adcc8a0,0x3a1a4b56,0x3a01d708,0x3ad83adf,0xb9c08314,0x39939257,0xb9903443,0xbb0506dd,0xbb556466,0xbb11d15c,0xbb0a4887,0xba64f686,0x3a859bfd,0xba70decf,0xbab88928,0xba4f1a01,0x3b0a4920,0x3ad23269,0x3afba751, +0x3a6e19cd,0xb872d669,0xba8aa56e,0xbb2eadcd,0xbb777339,0xbbc79d3c,0xbaad54cb,0x3ada71ea,0x3bc5da63,0x3b2dbc81,0x397c9d0e,0x3a400263,0x39c02e52,0xbb76bedf,0xbbbb277e,0xbc1bc277,0xbc17caf2,0xbc36a571,0xbc29273c,0xbc11b6b4,0xbbeff3eb,0xbbd5ccee,0xbbe50faf,0xbb746be5,0xbb893039, +0xbb3a7125,0xbb47693c,0xbb769378,0xbb6f046b,0xbb1a8e18,0x3a442497,0x3a9c9705,0x3b09b2f7,0x3b1fe618,0x3b0e6f4c,0x3b29465d,0xb935fd10,0xba06aea4,0x396805e4,0x3a97cbb8,0x3b0910f5,0x3b0cfb8a,0x3b026d25,0x3af6423e,0x3b2a7a5b,0x3b03d166,0x3a3cc2bd,0xba4891a2,0xbb2b3cb5,0x3a924560, +0xbb648491,0xbb9e392c,0xbbc4b5a9,0xbbf7615e,0xbbbe1397,0xbc087d29,0xbbe31a64,0xbbf741a3,0xbbcd16f9,0xbbf2d3c0,0xbbb15bd1,0xbbc82987,0xbb95c26d,0xbb825e32,0xbb2f7bc7,0xbb01293b,0xba20db64,0x3a3f107f,0x39c4764a,0x3b507c67,0x3b041c29,0x3b20c731,0x3a9887c9,0x3a6a0a72,0x3a5fa495, +0x3a99c532,0x3abab97f,0x3ab06fbc,0x3a92ab89,0x3a9fa692,0x3ac7c505,0x3ace89d0,0x3aa6c6fb,0x3a9ff0d0,0x3891b0f6,0xb8daf847,0xb9e7ddac,0xbb861669,0xbb24bc98,0xbb824314,0xbb9fce88,0xbbad9704,0xbbba16b5,0xbbcea202,0xbbb24eb9,0xbc0292a8,0xbb92778c,0xbbb5c96d,0xbb97d1a9,0xbb93eb8b, +0xbb271ae3,0xbac733ad,0xba9aef2d,0xbb1f3c47,0x3a636301,0x3afe404f,0x3a690246,0x3ab377d8,0x3a74a26d,0x3a20d2d2,0xb9883adf,0x39044260,0x380092c2,0x3903c659,0x3928d8bd,0x39076407,0x3893706c,0x39020099,0xb88110e2,0x3974d5e0,0xba1b6a1e,0xbad96a91,0xba9a6dbc,0xbba918b7,0xbb0e4dca, +0xbb55fb5e,0xbb49cee2,0xbaf106eb,0xbb205a97,0xba6649d3,0xbb437a3e,0xbb417471,0xbb802a15,0xbb363e53,0xbb774af4,0xbb8180e3,0xbb84ec9b,0xbb9c1913,0xbb177235,0xbb821749,0xb9a724ee,0xba6ba77e,0xba424786,0xba4ae00d,0xba50a308,0xba032ada,0xb8ba253d,0xb5721656,0x38ed1662,0xb929ad81, +0xb9d8f9ef,0xba3c695c,0xba995677,0xbaa1a665,0xbab163cf,0xbac1e935,0xbab828c0,0xba4d92c8,0xb9da082f,0xbb5ddcdb,0xbba79cb3,0xbb8dfe7d,0xbb40ad3f,0xbba5b032,0xbbbe4026,0xbbce0ba1,0xbbbb16c8,0xbbac07a3,0xbbb40104,0xbbc278c7,0xbbc1d7d0,0xbba55dc9,0xbb28d3ca,0xbb8d6d15,0xbb9ac23b, +0xbb32063b,0x3893df87,0xb9dd6c4f,0xb9d54754,0xb9cc2dcd,0xb9c29b09,0xb9f21723,0xba1584a1,0xba4041c6,0xba46c9fa,0xba481c2d,0xba458da8,0xba32d0ea,0xba2e6420,0xba30a1db,0xba33a256,0xba3bc8c0,0xba4fe161,0xbb194aba,0x3a5c19d1,0xb7ab9910,0xba849241,0x3b6efdbe,0x3b88446f,0xb9749c15, +0x3b4277cc,0x3b7d9e68,0x3adf442c,0x3acffb81,0x3aa2c344,0x3a46558b,0x3a077e50,0x3a02a16a,0x3a321920,0x3b7f991c,0x3b58d16e,0xba4ca5d1,0x3b57fc10,0x3b563c0d,0xba24e0b6,0x391b01e8,0x396fac22,0x379cccd2,0xb94d6176,0xb950841e,0xb877e4d1,0x39966117,0x39ee404a,0x39d72d12,0x39cde413, +0x39b20241,0x39f67b85,0x39e34fd3,0x39c95ce4,0x38dc04a7,0x38946ad7,0xb9c9674e,0x3b20e254,0x3bac17b9,0x3ac36ca6,0x3aa444a3,0x3b0a8b09,0x3b546052,0x3abb0a8c,0x3ab2f4f5,0x3b7cb175,0x3b468e39,0x3b5eed60,0x3abcd213,0x3b361071,0x3abb194e,0x3a76b302,0x3a94a3b6,0x3a378c53,0x3b3ee313, +0x3b0b7f50,0x3902fb5e,0x3a28c3ba,0xb94371ab,0xb98a6f74,0xb8cd51a5,0x395a3177,0x3ae34713,0x3b036fa9,0x3a971793,0x3aa1ae3e,0x3a97014b,0x3abf93fc,0x3aaaab9c,0x3a4e7b69,0xb8a09e13,0x3961c1c2,0xbad10c63,0x3aadf450,0x3b963aae,0x3b00f43e,0x3a391bb4,0x3b32bd45,0x3b8923c9,0x3a37bbb2, +0x3b8312b0,0x3b01d657,0x3bdbdc7b,0x3a947940,0x3ae64f52,0x3b95a97a,0x3a916209,0xb805e79c,0xb99422a4,0x39c56e02,0x3b0da438,0x3abc3972,0x3900bd78,0x3a82bacc,0xb9cabbd5,0xba96422d,0xbaa281d0,0xb9952660,0x3b164c64,0x3b4e6ab7,0x3b1e1bf8,0x3b0a945c,0x3af466ed,0x3b1b25a6,0x3b127759, +0x3ad696b7,0xb99c3ead,0xb9556183,0xbad280c5,0x3b745774,0x3bf7c300,0x3b9209ac,0xba27fd92,0x3b27afea,0x3b4833ee,0x3ae43342,0x3b971512,0x3ba11792,0x3b8acf0a,0x3b024189,0x3b3b7608,0x3b5962da,0x38fbb8f3,0xbafa5681,0xbade220d,0xba5750c7,0x3aee0b3e,0x3b32e807,0x39c91739,0x3a69ad79, +0xba052f88,0xbada74b9,0xba878c94,0x3a1571ac,0x3b974c11,0x3bba2d79,0x3b5272a2,0x3b71ea00,0x3b5de93d,0x3b6fa5a6,0x3b6e1e79,0x3ae2f8ff,0xba9686ef,0xb95b09c7,0xbb5ee3db,0xb96fc96c,0x3b907fa7,0x3a76c5d3,0xbb3cc7f0,0x3b830a45,0x3ba4f887,0x3aa6e32a,0x3b89e1fd,0x3baaeec5,0x3b991292, +0x3b96de55,0x3b7ba850,0x3b9287a5,0xba8290b3,0xbb03b0e4,0xbadba8b3,0xbb63b5c5,0x3b3fbc0c,0x3b0ae1ca,0x3a075952,0x3aeae73f,0xba2ea058,0xbb13673a,0xbb0bfbb5,0xba66343e,0x3b94c3f3,0x3be5ac34,0x3b9b50b7,0x3b832912,0x3b73d885,0x3b8216a9,0x3b98808c,0x3b657c83,0xba4ebeea,0xba81010a, +0x3b7abdd8,0x3c096564,0x3ca6e789,0x3c91d8e0,0x3c0a95e1,0xbbb9ec2b,0xbc1c572f,0xbb43ce08,0xba7b9594,0x3b31a756,0x3bd9099f,0x3b5662dc,0x39375273,0xbac1b595,0x3aeeb5ad,0x3b20eb0d,0x3afcbebc,0x3a6b672a,0x3b9c79cf,0x3b9d63e4,0x3abdf4b6,0x3a18830f,0xbaf04049,0x3ab1cb5a,0xbab0a6a1, +0xbbfc865e,0xbc32815e,0xbc353f43,0xbbb79c3f,0x3a9001c6,0x3b9d3fee,0x3bd63864,0x3b9305f2,0xba888884,0xbbd43994,0xbb249295,0xbc6935cf,0xbc260d6b,0xbc3e1707,0xbc608a4a,0xbb2c44f9,0x3be0bb2c,0x3c17237a,0x3b8bd718,0x3aacf110,0x39af78cc,0x3ac908c9,0x3b593124,0x3b8e4fd4,0x3b659d67, +0x3aedc8b4,0x3981a6cd,0x3b1ce024,0x3afc0d91,0x3b24d9e3,0x3b30e411,0x3b00239a,0x3b7d3cd8,0x3b50c07a,0x3af9f881,0x3a996352,0x399f42a3,0x3ad058ac,0x3ab90fb8,0x3be467d7,0xbb34682f,0xbb2e4e6a,0x3b5ec813,0x3b8ccecd,0x3be220a3,0x3c4f366e,0xbabb3575,0x3b187d0c,0x3c2ab636,0x3b9319c4, +0x3a51ee2a,0xbaf54a21,0x39dcd76c,0x3b422c4b,0x3bc3b3c5,0x3b61f703,0x3b33b449,0xb99948f3,0x3ab90be9,0x3ae2e342,0x3a98ebd2,0x3b6ad8e5,0x3b2216dc,0x3afc4534,0x3ae0d479,0x3aea10bc,0x3a4e5a00,0xba0e7137,0x3a777fef,0x3a67755e,0x3ba094b0,0x3bc86371,0x3bddbaa1,0x3b80b8cb,0x3b1a1130, +0xbadf834d,0xbb7197c2,0x395802cc,0x3c2022ff,0x3c4bac15,0x3c459224,0x3b8f2862,0x3b08ff6f,0x3b57c607,0x3bc8b819,0x3b92b9ac,0x3b32d4fa,0x3a82b5a6,0xbb5c012b,0xbb17670a,0x3ba5dc93,0x3b677e85,0x3b29eaa2,0x39b64a3b,0xb987eef9,0xba123dc6,0xb9bfe7bb,0x3a0dab63,0x3ab07e9c,0xb9d1b518, +0xba2e384a,0x39c91bbd,0x3a6f2360,0xbb0c059c,0x38707694,0x39fde2e1,0x3b995b7c,0x3bdad222,0x3c216d76,0x3c15f1ec,0x3bffe49c,0xb925a673,0x3bb05eb2,0x3c028c37,0x3c030a92,0x3c603099,0x3c4b7a0e,0x3bc58c53,0x3b5f1626,0x3b034617,0xbb9aadd3,0xbb8c9599,0xbb830f0f,0x397a4533,0x3aecc7ed, +0x3af1567f,0xb89c8bbe,0xbaaada1e,0xbada12e7,0xb7af90df,0xbad3510c,0xbaf495bb,0xba502745,0xbb14a6ac,0xbb35faed,0xbb02e030,0xba502f30,0x393b09df,0xbb2d44e3,0xb99fc99b,0x3ace13c4,0x3b569b2a,0x3b77fdc5,0x3b58cd6a,0x3b9f726e,0x3bdf5084,0x3c12a8f5,0x3c304093,0x3c482287,0x3c2e1363, +0x3a508879,0x3bcf58fd,0x3c0ef334,0x3c6b0bf9,0x3c15c864,0x3c8a6ec8,0x3c6703f5,0x3bed0882,0x3bd47c42,0x3b80a128,0x3b3ef43e,0x3b3aa920,0x3b1e066c,0x3af8f397,0x3ab69c11,0x3a7dba4d,0xba9eb35f,0xbb2dd769,0xbb157c09,0xbad451d8,0xba5bea88,0xb980e3ea,0x3ae3b628,0x3b2a7a95,0x3b1a50ed, +0x3aff5be1,0x3b16849a,0x3a8b94eb,0x3aee2092,0x3b18adc2,0x3b7e98ac,0x3b4a977c,0x3b60522c,0x3b8be7a5,0x3bb66c41,0x3bfcb027,0x3c65be60,0x3c5869f4,0x3c59f093,0x3c5cea57,0x3c808552,0x3a8c4baa,0x3a211020,0xbb658ec2,0xbbbbae31,0xbbddaace,0xbbead329,0xbbec5d43,0xbba3df73,0xbbc8efde, +0xbb91c1a5,0xbb91bed1,0xbb43b00e,0xbb3bb918,0xbb310be9,0xbb4f6254,0xbb17e57e,0xbac09e5d,0x3a204592,0x3b000496,0x3a18f6da,0x3aa23d52,0x3b030c9a,0x3b24449a,0x3b291c2b,0x3b3687c5,0x3b4f1d32,0x3b4ae395,0x3b2fd6ab,0x3acc3c8a,0x3ace7af4,0x3afe2122,0x3b382ceb,0x3a9345a6,0x3a9fb003, +0x3a99b6df,0x3ad0a687,0x379f7676,0x3accaed3,0x39aeb703,0xbb18c447,0xbb72badd,0xbbc4ec5d,0xbbc4eea2,0xbbcaff5e,0xbbc2f989,0xbbd13cbf,0xbbccf190,0xbbba4ab0,0xbba08913,0xbb89db96,0xbb5e3df1,0xbb1f94f5,0xba084793,0x3a831fcc,0x3ad665a9,0x3b5ef946,0x3aef7af2,0x3b06cfa4,0x3b082ff9, +0x3ae1b2a0,0x3ad3d1d3,0x3ab784a5,0x3b070f97,0x3b1a9c3d,0x3b208119,0x3b071fe0,0x3b115fe4,0x3b361d49,0x3b18ccd4,0x3accaaff,0x3a3f2989,0x3a641b7d,0xb9cc3c02,0xb9001d79,0x39dc50b7,0xba218d2d,0xb9fcad4e,0xbaa11388,0xbb3c1f56,0xbbace91b,0xbb9a6a18,0xbb988c2e,0xbb752966,0xbb6f4f31, +0xbb831008,0xbb3f374e,0xbb1ed79c,0xbaf6664c,0xbabc87df,0xba2a3a52,0x3abeb3ca,0x3aecbcb1,0x397779b2,0x3a55f5b1,0x399be232,0x398c2f3a,0xb9317538,0xba27e8e7,0x38c2e2d1,0x3a45904e,0x3b034ab4,0x3b069af5,0x3b115e86,0x3b07a9cf,0x3acae1d8,0x3acd4131,0x3aa30885,0x3a3b9ccc,0xba0777f2, +0xb9e43149,0xb89749d7,0xba9adc9e,0xba593fd3,0xba2e1407,0xb911026a,0x393181e5,0xb6fb93ee,0x39f675d5,0x39ddca4d,0x39e4a79b,0x3880b9c0,0xb98f2f30,0x39e86d89,0x39ea805d,0xb7ab6d92,0xb98bbf06,0xb96751cb,0xbb1141ff,0xbb041e33,0xbaf2c566,0xbaecb31f,0xbae0bf30,0xbabab713,0xba87bc41, +0xbad84ae6,0xbb01a8b6,0xbb155eab,0xbb153d18,0xbafe208c,0xbab1dffb,0xba9f6561,0xbaa9b074,0xbaa48224,0xba68cd33,0xba48c794,0xba3e8547,0x3a8c9ce3,0x3a8b4a69,0xba9b2c38,0x3a7a73a1,0x3a6a7d6d,0xba98ac91,0xbaa56f06,0xbac17406,0xbae78ee4,0xbae49509,0xbadfdca4,0xbadd1592,0x3a82813d, +0x39fadacc,0xbacd6218,0x3a879c15,0x3a686750,0xba86905c,0xba357223,0xba4ed444,0xba592f2f,0xba6b1ca7,0xba82fdaa,0xba8583f8,0xba6f6d7d,0xba1d3011,0xb9dd22e1,0xb9879fa7,0xb9ac8c16,0xb9be48ee,0xb9eab5df,0xb9e6333a,0xb9e2104e,0xba0f45e8,0xba85987f,0xbb95e7ac,0xbb403a17,0xbb3bd6d1, +0xbbb4435e,0xbb5dab81,0x3aa20001,0xbb9816e7,0xbb53999a,0x39cd0027,0x3a82635a,0x3ad30bd2,0x3aff3b65,0x3aedc599,0x3b1cdfed,0x3b09fcf7,0xbb6c8dae,0xbbabddc5,0x3b056429,0xbb426b0d,0xbb9ad55f,0xbb2d2036,0xbb44db47,0xbb5edf93,0xbb617a42,0xbb6fb5d0,0xbb68cae9,0xbb55721f,0xbb40c2eb, +0xbb3ca8c7,0xbb3ee265,0xbb5857f7,0xbb5d80ac,0xbb63ba20,0xbb717023,0xbb6695fb,0xbb3bbd4f,0xbb4bedbb,0xbb3b2d1a,0xbb939a3e,0xbaa06fc3,0xbaec3962,0xbb1b171f,0xbb1e00a5,0xbb426de4,0xbaaf2ce3,0xb9edb4ca,0xbafa7d8b,0xba431e4c,0xbb4bb83c,0xbb354787,0xba9bbc4e,0xba79ba2b,0xbb88a928, +0xbb6fb2fd,0xbb65bef8,0xbb6786c0,0xbba15411,0xbb76f841,0xbba03bde,0xbbb67c23,0xbbb7b95c,0xbbb28c4d,0xbbbcb1af,0xbb707ec1,0xbb6229c3,0xbb878969,0xbba8530f,0xbbb4fa00,0xbbb9a798,0xbbdeeca0,0xbbd556d6,0xbb88419f,0xbb8e1e5c,0xbb505404,0xbb894891,0xbb58b05b,0xbb5b47e2,0xbb8fa246, +0xbad7784c,0xba54894a,0xbac1082e,0xba2049de,0x39b4b121,0xba2de316,0xbafa940c,0xba18e718,0xbaa258d0,0xbb36aeea,0xbb809ffa,0xbba7f8b2,0xbb58a1c6,0xbb81c502,0xbb43de5e,0xbb99d32a,0xbbce0edc,0xbbf3bc1c,0xbc039695,0xbbe9ab00,0xbbd27e7c,0xbb65967a,0xbb3ba078,0xbb86e86a,0xbbbbf9dc, +0xbbeffff5,0xbbf10a56,0xbc136d0f,0xbbf688c6,0xbb5d5ca7,0xbb99b805,0xbae7642c,0xbb101dbb,0xbaa586ca,0xba1ab076,0xbb74a52b,0x39bbd905,0x3acec0bf,0xba335908,0x3b858751,0x3b8c2d2d,0x3b8ad92d,0x3b06a2a4,0xba1437ae,0x3b507fe4,0xbb3c5323,0xbb548229,0xbb866c66,0xbb858746,0xbb7cbd39, +0xbb398ab4,0xbba40c01,0xbbe12c30,0xbc1d5480,0xbc341fb2,0xbc33ad09,0xbc1d1135,0xbb7d28f4,0xbb2adfce,0xbba5d468,0xbbe6c1cd,0xbc20df46,0xbc1f0d79,0xbc545ded,0xbc33e213,0xbb80ad9d,0xbba748d6,0xbb65b5f9,0xbb7825fe,0xbb41d1fc,0xbb1d694a,0xbbc4bb2b,0x3aca89bd,0x3b85b57d,0x3aebc817, +0x3b8af2fa,0x3b980f1f,0x3bb8f981,0x3b899608,0x3b781c0c,0x3b81173d,0xba9e86fa,0xbb45299f,0xbb6e4d91,0xbade1c3d,0xbb4c4df7,0xbb0dd5f6,0xbbb02d24,0xbc1502be,0xbc46a2fe,0xbc4ddd85,0xbc39dc02,0xbc0bc8c1,0xbb239aff,0xba44f473,0xbb452fb7,0xbc005b4b,0xbc35d372,0xbc2eeb6b,0xbc6e32de, +0xbc25c798,0xbafe6d43,0xbb9babf3,0xbb76b5a4,0xbac2565d,0x3bc97ffa,0x3c1ffb7a,0x3bcb2dc9,0xbbd9ed62,0xbc3264d7,0xbb9fe417,0xbaf91d63,0x3b04eb8d,0x3b995cf8,0x3b2e0c05,0x3a7840dc,0xbb0db62f,0x3ab03452,0x3b1aa841,0xbaff0c33,0xba0e5592,0xbb2695b2,0xbb400c84,0xbb5cb8b1,0xbac9fd3e, +0x3af5aac5,0x3a604962,0xbab7a3ae,0xbb5ad5d1,0xbc174880,0xbc1ea6fb,0xbbbc1aad,0xbb2212c4,0xbb62a792,0xbc04f2fa,0xbc1eae64,0xbc5ee940,0xbc6ab3e1,0xbc31ea87,0xbc13cb76,0xbc5ad6c1,0xbca1377f,0xbc71cd40,0xbc2b5560,0x3b61d8a8,0x3c1a15a4,0x3b602761,0x3aba5d5f,0xba3907ab,0x398e207f, +0x3b3d26cd,0x3b7e5ebc,0x3b6c3cf2,0x3a6e4fc0,0xb8fcdf15,0x3925b14e,0x39ee22c7,0x39f370d5,0xbad1b722,0xbb9588f6,0xbbe8920a,0xbc2763e9,0xbbd8337e,0xbba82fd7,0xbb4cfa0c,0xba89fd2b,0xb94724a9,0x3b6ece7a,0xbbbc4e94,0xbbe755c0,0x397b5c82,0xbb51ab0f,0x3b105f38,0x3c6d8de5,0xbb1aea7b, +0x3a876332,0x3c09bad6,0x3a5382d1,0xbaf78612,0xbbc7733c,0xbaa14c90,0x3ad7d5d9,0x3b972d12,0x3b33072f,0x3b0debf9,0xba175de3,0x3a4f1f00,0x3a63fd6d,0x3ad77f43,0x3ab65586,0x3a870080,0x391bd9cf,0xba6cc6d3,0xbb012024,0xbb0aaa6d,0xbb1a4cfa,0xbb3efa83,0xbb35a177,0xbb08693e,0xbabe6d99, +0xbb4820c6,0xbb313e9c,0xbb090535,0xbaf02649,0xbb9b848d,0xbbde373e,0xbb8b7b9e,0xbc44a2d7,0xbc528dfc,0xbc30dcc5,0xbba9fd71,0xbb7b28d7,0x3ba02df0,0x3b67932b,0xb8e5140b,0xb8ff3780,0xbbac6c8c,0xbb76cf1d,0x3b7bc21b,0x3b476058,0x3b34f091,0xb9851fc3,0xba22aad8,0xbaa05615,0xba01e58e, +0x39a70261,0xba1d0fa4,0xbb0c1039,0xba988405,0xbb19defa,0xbb77104e,0xbb04e0f9,0xbb334ce9,0xbac4ba2c,0xbb06700e,0xbb2f4c7b,0xbb267781,0xbb4e13f9,0xbb3cd7d1,0xbbc5aeb9,0xbade1134,0xbae58138,0xbbc93405,0xbc676b86,0xbca22df1,0xbcd3cd48,0xbc373359,0xbc5a3291,0xbc15fc85,0xbbe09f09, +0xbb35bcb6,0xbae1b0dc,0x3aa40f61,0x3b010289,0xba671302,0xba9c2241,0xbaf20495,0xba8a9bea,0xbafa1d81,0xbb1b5d6e,0xba75da18,0xbb578f5e,0xbb77b80a,0xbb37bbdc,0xbb216c7b,0xbb0cf448,0xbb2d9415,0xbb52d17c,0xbb8b1095,0xbb83dfe1,0xbb7b33ea,0xbb1a2e9a,0x3a9e2633,0x3b07a8c5,0x3b2d95f5, +0x3ab099c5,0x3b935bf4,0x3aba346c,0xbb6237f0,0xbc5bb802,0xbc87f056,0xbc927038,0xbc7bf367,0xbba83a50,0x3a73e0e2,0x3bdc5e99,0x39ec130c,0x3b5b44e0,0x3a7807c8,0x395451ff,0x3a1dce16,0xb8ea105b,0x3a0c8f13,0x3a1d989e,0xba44d231,0xbb16dd86,0xbb3a4123,0xbb0d97c4,0xbab5c5f7,0xba60e4e1, +0xba9531d1,0xbaa7081f,0xba067be9,0x3a4526e1,0x3af93302,0x3a8d1fde,0x392294a7,0xbb0f38ac,0xbbba1be9,0xbc0883cf,0xbc11b175,0xbc37ba1f,0xbba98925,0xbb3cb8bd,0xb9174978,0xbbab8de6,0xbbda3aa1,0xbba30679,0xbb9e23dc,0xbc23005c,0xbc171ea3,0xbc075066,0xbc10cc6b,0xbc22ef74,0xbc04389b, +0xbbe52884,0xbbb59f18,0xbbc0e6cd,0xbbc9b049,0xbb693455,0xbb8427d6,0xbb3ef34b,0xbb3ee22d,0xbb84118b,0xbb88fc29,0xbb71ec94,0xba1dd892,0x3a89c49c,0x3acf2006,0x3a7655c7,0x3934a1b3,0x39caa2b4,0xbaed5020,0xbb0fcf7e,0xbb086fa8,0xba0179ff,0x3a7e6f71,0x3b128543,0x3a8fa782,0xba529349, +0xbb8bb12e,0xbb82f173,0xbbaf5769,0xbbefdef5,0xbc0ff22f,0xbb997222,0xbb00b841,0xbbc7d61f,0xbbe23950,0xbc0b5ec4,0xbbfe43d8,0xbc07a2b7,0xbbdcbcf3,0xbbe34e35,0xbbc01fff,0xbbc9735a,0xbb9148e0,0xbb983a0f,0xbb5b21af,0xbb7ad2c9,0xbb415b29,0xbb37d6d0,0xbaadc7c5,0xb90e7d3b,0x3aa07752, +0x3ab90246,0x3a952437,0x3ab91fb6,0x39bc073d,0xb825ac29,0xb89dda61,0xb6ff5505,0x3862a9d4,0x39f136d9,0xb98aa107,0xba823a7f,0xbb301f87,0xbb1987f3,0xbb1f52a6,0xbb377836,0xbb2d1af2,0xbb055362,0xbb55828d,0xbb28fa28,0xbb51db85,0xbb65b020,0xbb7e36c3,0xbba45b79,0xbbd279f0,0xbbccc013, +0xbbb6e24b,0xbbe33193,0xbbb08dc3,0xbb90a0e7,0xbb8fcbbf,0xbb476a14,0xbb4529e9,0xbb285769,0xbae865b7,0xba9af4bc,0xb9d6d07b,0x3a4cc307,0x39fe4b81,0x3a89515a,0x3a8272dc,0x3a8b4ead,0x3a3b965f,0x35f0ba07,0xba5b3026,0xbaf6a24e,0xbb19fb26,0xbb2700ca,0xbb2b8b14,0xbb1888e4,0xbb1d5858, +0xbb10c949,0xbb277824,0xbb19b317,0xbaea75dd,0xbae03a0f,0xbb265cf1,0xbb611d56,0xbb370b4d,0xbb3ae41e,0xba583e6c,0xbab9060f,0xbb04f21f,0xbae64435,0xbb231dd1,0xbb3a75fe,0xbb4730fe,0xbb83457b,0xbb6a5675,0xbb2c036d,0xbb331408,0xbb1909d2,0xb9fd1e38,0xb9e84f43,0xba682bce,0xba82bea3, +0xba9c7d6f,0xbaa24d3d,0xba93f8da,0xbaac7a13,0xbacdaf3b,0xbb009e1b,0xbb379d02,0xbb758222,0xbbab8174,0xbb97490d,0xbb824c9d,0xbb5ffa7d,0xbb46558e,0xbae13ece,0xbaf2ae49,0xbb503840,0xbb065853,0x39474d4d,0xbb4ed590,0xbb5189d5,0xbab66ace,0xbaa11d54,0xba7ff01e,0xba4c4d68,0xba1b58b0, +0xb9714fa2,0xb8ac8ee5,0xbb50d6bc,0xbb588ae1,0xb765fd2f,0xbb2f945d,0xbb43356f,0xba867b6a,0xbab95698,0xbaad6377,0xba9fbaf0,0xba95887e,0xba92cf26,0xba9650cf,0xbabd1e13,0xbae267ce,0xbb02757f,0xbb0b87f4,0xbb03626c,0xbb0840b7,0xbaf58e36,0xbaf55a67,0xbaf439d7,0xbaefd3d6,0xbb4466e6, +0x3b7a17eb,0x3b211609,0x3b6aca13,0x3b7dbcfb,0xb95d6336,0xbbac9a3a,0x3b735334,0x3a356b33,0xbb8bfad7,0xbb9a0660,0xbba85daa,0xbb9554de,0xbba78392,0xbbcb80a3,0xbb9f2dbb,0x39cd080c,0x3b4b3980,0xbbcd8e8c,0xba7b1062,0x3b2845c0,0x3b59578e,0x3b32a4e8,0x3b48581c,0x3b3f608e,0x3b3e4575, +0x3b3f1963,0x3b413586,0x3b5254ee,0x3b5aaa0c,0x3b56e115,0x3b58c3a1,0x3b4df3b7,0x3b52e4f4,0x3b4fbbb2,0x3b4ac8df,0x3b2b4bbb,0x3b33ffca,0x3b3be21a,0x3bb492ed,0xbb037b15,0x3b02bad7,0xbac91b49,0x3af46d33,0x3b1733c7,0x391ebb92,0x3b0e44fb,0x3b2026a9,0x3ad672f9,0x3ae68612,0x3af159b9, +0x3a8bde3e,0xbb560071,0x3a98bee3,0xba8e4792,0x39d08ad1,0xba1a7c93,0x3b923816,0x3b593cf0,0x3b6c4a00,0x3b63fc2b,0x3b614c6a,0x3b761ca2,0x3b8f9b82,0x3bbb55d6,0x3bc76140,0x3baf1ec6,0x3bb5ef53,0x3ba72c39,0x3ba6595f,0x3b9984e4,0x3b7b34c4,0x3b154f0d,0x3b35b1cc,0x3b210302,0x3b7b5ef4, +0x3af97e00,0x3b7dd9e9,0xba2758a6,0x3b15bbe1,0x3afa3f78,0x3b347bea,0x3b0e3a82,0x3b800008,0x3b94b3ea,0x3b871313,0x399d4f7e,0x3b8eadf4,0x3988206d,0x3a14e22e,0xba0d506c,0xba81b189,0x39d5d8bd,0x3b27152c,0x3b8ae64d,0x3b7e330e,0x3b8a22fc,0x3b6622c7,0x3b7d224e,0x3b97dcb8,0x3be0e8c6, +0x3bf3bab3,0x3be6968d,0x3bd9b097,0x3bca3670,0x3bbdc33a,0x3bb09b5d,0x3b91c418,0x3ae54e7e,0x3b263d34,0x3b33426b,0x3baa2a34,0x3b1cee0e,0x3b53ce94,0xba8a611b,0x3af84001,0x3b08694c,0x3b3456ec,0x3b95f3d4,0x3bac694b,0x3b9f75cb,0x3b13a2d9,0x3ae7ce50,0x3b9328c2,0xba4ef208,0xba9033cf, +0xbad7332f,0xba6279e7,0xb9339ba7,0x3b0838e2,0x3b9025c6,0x3b5ca988,0x3b896d1a,0x3b798544,0x3bad1fc6,0x3bcbe290,0x3c24b0d2,0x3c3544b8,0x3c19ae6f,0x3c1ed52a,0x3c10f0a6,0x3c029922,0x3be3d486,0x3b868507,0x39636314,0x3ac196af,0x3a8ce648,0x3b3efbd0,0x3b10a92a,0x3afba8ce,0xbb1dcb95, +0x3b58c157,0x3b9ec073,0x3b0df784,0x3b8f19d4,0x3bb85514,0x3bbe71bd,0x3b61fc66,0x3b5b42b0,0x3b93221a,0xb9ab37b6,0xbab35713,0xbb106c77,0xba68439f,0xba8cbeb3,0x3b4df945,0x3b8988ae,0x3b9b283c,0x3ba4ff65,0x3b7bd6c0,0x3b998060,0x3bba26d3,0x3c2fbd92,0x3c4cbbaa,0x3c2cbcf4,0x3c25f624, +0x3c0ec0ed,0x3be4b8c1,0x3be7dedd,0x3bb6cdaa,0x3a7a8fd5,0x3acd25b1,0x3bf5bc1c,0x3c37f4fe,0x3c51971e,0x3c447d5f,0x3c173e16,0xbba6ea73,0xbbfe5f51,0xbb912cad,0xba42a345,0x3b147984,0x3b49cd80,0x3b826a49,0x3af5e2b5,0xbb2be74f,0x3b11e3fb,0x3b659ab2,0xb9ad302c,0x3ac9a44f,0x3b165590, +0x3baa0236,0x3bd31a33,0x3b9f272a,0x3b890c29,0x3b52d904,0x3ad27b3c,0xbb621dea,0xbb8a1951,0xbb2ebdeb,0x3be44718,0x3c20066e,0x3c58e116,0x3c892cb9,0x3c148ea2,0x3b31b910,0xba7df571,0x3b725c1a,0xbbbd4d8c,0xbbc02e41,0xbc5a8b3d,0xbc07035e,0xbc22a32f,0x3bcddd05,0x3c177c22,0x3bb0b93d, +0x3ad71c3b,0xba2572be,0x3903e3d4,0x3b02da78,0x3b5a5b60,0x3b7c9dff,0x3b1f7639,0x3ad2caa0,0x3b10b365,0x3aa87e53,0xba8e553a,0x3a9da7e8,0x3bb79956,0x3bd3369c,0x3c114af7,0x3b8d0503,0x3b17425b,0xb98757cd,0x3b089ec5,0x3b19a0a6,0x3bbf8dfc,0xba3260d4,0xbaa518dc,0x3b794551,0x3ba9ea54, +0x3c1c23bd,0x3c86828d,0x3b091bb5,0x3b1e06e7,0x3c604164,0x3b811ce9,0xba8acdcf,0xbb772181,0xba42d9ff,0x3b08e6f6,0x3ba2ac9c,0x3b4750e7,0x3b3300a8,0xba58efdf,0x3a5129f6,0x3a92f004,0x3a8e675f,0x3b6dfc4f,0x3b25b2e3,0x3ae0815d,0x3acb2735,0x3b06f6ec,0x3b696bf3,0x3b0b49b9,0x3b32daef, +0x3b85c24c,0x3c03d973,0x3c2b63e5,0x3c3353bb,0x3c21f294,0x3c000085,0x3b6ee8db,0x3b4693aa,0x3c0f1d15,0x3cb1b4b5,0x3c423fad,0x3c090550,0x3b8fbe0b,0xb9b8e9c5,0x3b43a41a,0x3bc5e646,0xba2b7b31,0xb8fb5659,0xba15cbc8,0xbb99cd01,0xbb4e3457,0x3b599dbc,0x3b59308f,0x3b311519,0x398a7b0d, +0xb9653e48,0xba70f645,0xb9ae24f3,0x39ef247f,0x3ad177fa,0xb8af22e9,0x398e22a9,0xb880b9de,0x3a8a1f94,0x3a1b5f09,0x3aba1ab1,0x3b372b93,0x3bfd46fe,0x3c3249d0,0x3c6a4009,0x3c713d52,0x3c4c0042,0x3bcf7d52,0x3c270452,0x3c7113cf,0x3cb603c6,0x3c7b5ef8,0x3c4121ba,0x3c0a7cae,0x3b63cf25, +0x3bb00355,0xbbc83ec1,0xbaaee19f,0xba7c3c7e,0xb91a5d25,0x3b67d6f6,0x3b423cce,0x395a173c,0xb9b740b2,0xbac7a91e,0xb9d8e9b7,0xbab79867,0xbafe1bef,0xb9aa7e81,0xbb153821,0xbb4547ec,0xbb1a7297,0xbaabbbb2,0xbae01608,0xbabab06a,0x3aa417ce,0x3b5651e8,0x3baf433f,0x3b9455e7,0x3b905c9b, +0x3bc56d9d,0x3c08a2d3,0x3c1ef1aa,0x3c182846,0x3c22c4a1,0x3c08e05b,0x3b78841d,0x3c23c000,0x3c647c74,0x3cabc264,0x3c4b6176,0x3cc8d299,0x3c38430f,0xb81bf0d4,0x3bc826c5,0x3b46a7a4,0x3b0b73d8,0x3afba933,0x3b107b26,0x3ab4c1da,0x3b0805f5,0x3b051d9b,0x3a4e1cb1,0xbaafb91a,0xbb068553, +0xbade6b90,0xba805c03,0xba15ac01,0x3aa20233,0x3b0b11f1,0x3ae947cf,0x3b253df9,0x3ab58bff,0x3ab6058b,0x3aee3941,0x3b2012a5,0x3b9377c8,0x3b60267a,0x3bb2fa82,0x3c0a8626,0x3c3387e2,0x3c5d8387,0x3ca8c02c,0x3c9fa594,0x3ca48a02,0x3cbd9113,0x3cb885b0,0x3b548d05,0x3a8715a2,0xbbce4bf7, +0xbbe44931,0xbbd5a194,0xbbbde479,0xbb905e52,0xbb6b27d8,0xbb841f4d,0xbb72af7c,0xbb2c0e96,0xbb17c111,0xbaff378e,0xbb093c04,0xbb33dcd9,0xbb1cd051,0xbb0c0b96,0xb90ccd66,0x39ed9264,0x3ac6e409,0x3b3331a6,0x3b82e411,0x3b96b4df,0x3b975da3,0x3b902696,0x3b83275b,0x3b8ec701,0x3b85eb5c, +0x3b3cb65e,0x3b5b7e4f,0x3b9938c8,0x3bfd621c,0x3bc9dc07,0x3bb69ebc,0x3b8e1848,0x3b7848b4,0x3b58a764,0xbacdfa70,0xbac28f6c,0xbb7bd5ad,0xbbaf4254,0xbb8edf02,0xbbbfbf5e,0xbba83676,0xbba9f82c,0xbba0add1,0xbba8ad01,0xbb8e0f2d,0xbb86c8f9,0xbb29d9a5,0xbb23e1c0,0xbb1df2bc,0xbb0d9579, +0xb95d6ca3,0x3abbe690,0x3b1adf41,0x3b5e30ba,0x3b542b8b,0x3b60d1cf,0x3b60cfd2,0x3b61196d,0x3b518ba5,0x3b834a0e,0x3b8b0593,0x3b992250,0x3bab09fa,0x3bc87591,0x3bfce5d9,0x3bb12a69,0x3b63250c,0x3b38da98,0x3ad62e77,0x3a9d4386,0x3af258f0,0xbabd2d91,0xba61f4da,0xbb32a9bb,0xbb77c03d, +0xbb87994f,0xbb9bf45c,0xbb9cac42,0xbb7907e0,0xbb8c482d,0xbaa8112e,0xbb416dc6,0xba683618,0xbb3083ea,0xba9c5020,0xbab3b930,0xb94ce6ce,0x39829ed0,0x3b4a7880,0x3b042afb,0x3b001e6b,0x3aec57f5,0x3ac933e7,0x3ab430aa,0x3a8e46ee,0x3b10fe97,0x3b509fc6,0x3b8f3655,0x3b926322,0x3b969270, +0x3ba0aec1,0x3b8998e4,0x3b84132a,0x3b5a94c6,0x3b1187c6,0x3aacb50b,0x3acd27fd,0xbae992d6,0x3a06bab6,0x3a392aca,0x3a13fae6,0x3ad81297,0xb9fbf6dd,0x3a901fd7,0x37fda97a,0xb9726986,0xba44a6f6,0x38c96971,0xba46996a,0x3a3fb678,0x3a54309e,0xba126aec,0x3abe7206,0xba30aab1,0x3959ae8b, +0xb9c4034c,0x381bb240,0xb9328f80,0xb8d1eafa,0xb8549283,0xb88befb8,0xb852e873,0xb92635f6,0x3923d58d,0x3a3d03fe,0x3abbd6a3,0x3b17ef9c,0x3b027cff,0x3aa84ce5,0x3aa2ee62,0x3ad5c31e,0x3acb337c,0x3b06e203,0x3ae4cea6,0xba3efe56,0xbb68a83f,0x3ac2ba2b,0xb9cf6cbe,0xbb7b95c3,0xbb8c50b7, +0xbb857370,0xbb803f17,0xbb86af37,0xbb97279e,0xbb99922e,0x39931fbe,0x3b0435eb,0xbb6f5aa0,0xb7be4106,0x3b009ccb,0x3acfdb4a,0x3ad08d61,0x3ac7bf63,0x3abfe7d9,0x3ab7b3ff,0x3aaae0ce,0x3aa49f59,0x3ac662a2,0x3aed6e7e,0x3b02ee32,0x3b0a8a68,0x3b0259df,0x3b080834,0x3b04d56f,0x3b03561c, +0x3b02b1bc,0x3aec6355,0x3b122d91,0xbba7ec88,0xbb740d3d,0xbbb3da61,0xbb58dd68,0x3adc47e2,0x3b9e4ef9,0xbb5446e7,0x3a5107ea,0x3bad9a13,0x3bbb47f5,0x3bc85274,0x3bb919da,0x3bb81f81,0x3bde71bb,0x3bbb5afa,0x3a4bca13,0xbb3fd093,0x3baf73b5,0x3ac9d66f,0xbb1bc731,0xbba2847c,0xbb857e99, +0xbb935ef6,0xbb9586ce,0xbb9d5c42,0xbb988ac8,0xbb8990cc,0xbb814306,0xbb7d9e0c,0xbb7f16a7,0xbb8abb63,0xbb8c5a6a,0xbb935478,0xbb90d6a4,0xbb879d4b,0xbb657527,0xbb7ec404,0xbb89d147,0xbbac490b,0x3baa8830,0xbaa4272b,0x3a848c38,0xba89f20b,0xba6bf42a,0x3a3e6e05,0xba49c405,0x39d3581d, +0x3ac70bdf,0xb9f8db30,0xbb0a7a38,0x3a4f87f2,0x3b55a060,0xbb32d2a0,0xba8954a8,0xbb15f3f8,0x39d8131a,0xbba7e39c,0xbbb4b613,0xbbc64356,0xbbe0dbb4,0xbbd6bd16,0xbbca0d80,0xbbc8d031,0xbb968d22,0xbb93ead1,0xbbac44f7,0xbbc81e66,0xbbd21f82,0xbbe42aed,0xbbe70b85,0xbbdba502,0xbb9a2178, +0xbb99a003,0xbb9e08e5,0xbb9d8b38,0x3a149269,0xbb46ae95,0xba9e72ed,0xb9c83c53,0x3ae5bef4,0xbaac4f3c,0x3ac76e6a,0xba884573,0x3b37d950,0xbb635900,0x3a4a28e3,0xb9ce6f94,0xba75381f,0xbb41ca25,0xbb8b7371,0xbae792f5,0xbafbe971,0xbb6810af,0xbbf927db,0xbbf3b4cd,0xbc169cec,0xbc165573, +0xbc082e5f,0xbbd71eec,0xbb8cd5a0,0xbb7d7ad5,0xbba8b0d7,0xbbd11f95,0xbbfe571c,0xbc09649b,0xbc0769d2,0xbbd298d5,0xbb3e19da,0xbb92ac36,0xbb836d48,0xbb3d7dff,0x3b6e1813,0x3ab3e461,0xbafcb9d6,0x3a998e14,0x3afed5ae,0xb8b113b8,0x3b780de5,0x3b84f96f,0x3ba9df23,0x3a851d92,0x390230ed, +0x3afd1332,0xbaa2739f,0xbb34cf78,0xbb8a6411,0xbb623eb9,0xbae27b97,0xbb067d38,0xbc0bc56d,0xbc0a4cf7,0xbc37b711,0xbc3f6465,0xbc347ecf,0xbc053a1a,0xbb89fee7,0xbb631eaf,0xbbd0eefe,0xbbfc439f,0xbc23c9d5,0xbc38e654,0xbc368512,0xbc186faf,0xbb865a3a,0xbb864df6,0xbb9a98ed,0xbbabc146, +0x3a4e4c20,0xbaae1c2f,0xbba09cc5,0x3aa6f21b,0x3b790aeb,0x3b1cc85e,0x3b8d3e08,0x3ba3cfb7,0x3babe267,0x3b48fca1,0x3b1b5f8c,0x3b74dcd9,0xbaf31160,0xbb367147,0xbb5987c8,0xbb95d7a7,0x38c256d9,0xbb80193e,0xbc173618,0xbc311eab,0xbc654bc7,0xbc5f61d1,0xbc433020,0xbc01762e,0xbb430235, +0xbb0dd91c,0xbb9cc4a1,0xbc06d2e9,0xbc2d06e3,0xbc37cbea,0xbc3adc7f,0xbbcfdc40,0xba0040ff,0xbb595f52,0xbbeaa302,0xbbd342bc,0x3bf52cbe,0x3c313701,0x3c0d3d89,0xbb3ea5b6,0xbc145f78,0xbba53f45,0xbb200182,0x3a9b8472,0x3aca2cf4,0x3b787c45,0x3b2241d9,0xbb47fe78,0x3af745de,0x3ad0b805, +0xba380db8,0xbb1849ec,0xbace9c16,0xbb674e1d,0xbbd8a2f4,0xbb884e3a,0xbb61313b,0xbada2fbc,0xbb9694b8,0xbbec4828,0xbc6e6a72,0xbc681dd6,0xbbd2867f,0xbbbd2870,0xbbdc9329,0xbbe81c7b,0xbc4c910c,0xbc8f4d6a,0xbc7e990d,0xbc663503,0xbc4690e3,0xbc2dbf21,0xbc1220a9,0xbc6ce728,0xbc2aa997, +0x3a7eeb8b,0x3c0c9e62,0x3babe5ae,0x3aab5532,0xba954182,0xbaa1a71f,0x3a9f270f,0x3b3b117c,0x3b3ff0c1,0x3a9cf833,0xba5e8e08,0x39a9934e,0xba88fed1,0x3a8afeca,0xba5cb881,0xbbe3f706,0xbbf40964,0xbc3fb7d2,0xbc106d41,0xbbd6d5a2,0xbb47f914,0x3ae57ecf,0x3ad301ef,0x3a32011f,0xbbb80976, +0xbbb035f6,0x3b317f19,0x3a542271,0x3bd7e0c8,0x3c86d3dc,0xbad7ce44,0xbb17581a,0x3c248f4a,0xbac856ab,0xbb774231,0xbbc84d04,0xbb1035d5,0x3aa161be,0x3b3dee45,0x3b11da04,0x3ac245d0,0xba974c65,0xb9e96298,0xb867024b,0x3aa77c20,0x3aac1c6b,0x3ac9cbf0,0x3a727e0a,0xb9d04ec3,0xb9bffd9c, +0xbb3e92c7,0xbb760c58,0xbb42e1f8,0xbb31df2e,0xbb937f6a,0xbba2e0e5,0xbbc2261e,0xbbc882f5,0xbb9a2a07,0xbb91375d,0xbbfca496,0xbc0a8104,0x3af64e86,0xbc68f8cb,0xbc89b55b,0xbc57bd2e,0xbc0afa4f,0xbb943aeb,0x3b87d1a1,0x3af80280,0xbb4de7f2,0xb9817ebd,0xbba5421d,0xbb743d59,0x3a9d7784, +0x3b06e00c,0x3b07a346,0xb9e64eaf,0xba7e9c9d,0xbac8b393,0xba29777c,0xb98040d1,0xb956ce5b,0xbada4313,0xba8ee613,0xba156351,0xbafdb539,0xbb88071d,0xbb676cbe,0xbaed9f1b,0xbb837a00,0xbb96a71b,0xbb8a6962,0xbba9e41c,0xbb8195da,0xbb936adf,0xbb6658c6,0xbb92a8f8,0xbad6f861,0xbc9770be, +0xbcc708fc,0xbcd116a0,0xbc42ee74,0xbc39a93b,0xbbee8af3,0xbb355476,0xb9315bcc,0xb9bfb4dc,0x3aa12589,0x3b0c4012,0x39dca2c7,0xba5dcfcb,0xbaebea28,0xba6fad12,0xbafbce0e,0xbb01bc1f,0xbaab81db,0xbb3e4af5,0xbb55741e,0xbb316cf4,0xbb5f9b95,0xbb1df2e5,0xbb8ae72e,0xbba9c67e,0xbbcfec0b, +0xbbd4cb7a,0xbb9fc40e,0xbab14a9e,0x3b20a85b,0x3b97ecd1,0x3ba98bae,0x3b99963e,0x3babbd06,0x3ad5c4e8,0xbb6b9a7c,0xbc2ff16f,0xbc5c1c16,0xbc95fecb,0xbc3fcc29,0xbb89e474,0x3b52d166,0x3c31cd25,0x3a580c32,0x3b8d5892,0x3af3af55,0x3a6c6f52,0xb8f6bae0,0x39dfe3c2,0x3a6eb7ac,0x3aa6b66a, +0x3a6aa0e1,0xba747e27,0xbb39f38a,0xbb0ae7e4,0xbb03520d,0xbb0f2054,0xb9fb5111,0x3984fbed,0x3a72b153,0x39097d9e,0x3b088c9f,0x3a664fd5,0x398f7389,0xbb129e94,0xbbb2a6a1,0xbbe27bd1,0xbbcc9a27,0xbbd9288e,0xbb347c97,0xbaf7e543,0xb98531e9,0xbb817bb1,0xbb67b464,0xbac111d6,0xba1c3842, +0xbc121365,0xbbff5496,0xbb9c4fae,0xbbd41211,0xbbdf4466,0xbb9607e5,0xbb8267a5,0xbb4bdb96,0xbb8ea6df,0xbb84c024,0xbb52e985,0xbb591944,0xbb4286dd,0xbb3dc89e,0xbb59dd8d,0xbb5bc476,0xbb7b7ef9,0xbae7a163,0x3a0e2c2b,0x3a27c6b5,0xb92a6e05,0xba160882,0xba088734,0xba905056,0xba78e2e2, +0xbaa99f9d,0xb97af259,0x3a10e1fa,0x3af5e4cf,0x39f571aa,0xbad9b92e,0xbbc68289,0xbbb0f5e6,0xbbc1d629,0xbbf968da,0xbc013e0a,0xbbddaf7d,0xb89150ea,0xbb978ec5,0xbbbb7226,0xbbf0bfc5,0xbc01de26,0xbbde283c,0xbbc26868,0xbbb5f4ce,0xbba91d2f,0xbb95a9c3,0xbb7a44df,0xbb52f75f,0xbb2cd4fb, +0xbb47511d,0xbb2ca7e8,0xbb1f3bd0,0xbaa36ab2,0xba02abe9,0x3afd3145,0xb986c1e0,0x3a0c97d5,0x3a05010b,0x39e060f8,0x39130e4a,0x37e56b2d,0xb85e11e6,0xb94a1da1,0x39baaaf5,0xb9dce164,0xbab0c3c1,0xbb6baf4f,0xbb704da9,0xbb81ee34,0xbb9606f4,0xbb5b928b,0xbb489430,0xbb873b93,0xba501999, +0xbb470269,0xbb22a131,0xbb2f486d,0xbb8ca888,0xbbd27f85,0xbbb407a4,0xbba6b02e,0xbb95a2bc,0xbba22220,0xbb40aa43,0xbb530ec1,0xbab63821,0xbb260647,0xbb1db14f,0xbac041d8,0x3a28018c,0xba49a624,0xb9eb0a35,0x3993a31e,0x3a192de1,0x3a630a5d,0x3a991920,0x3aba34a9,0x399e7940,0xba085e00, +0xbad92a77,0xbb204ac4,0xbb3afdd0,0xbb4a657a,0xbb3c9b86,0xbb37256a,0xbb41d36a,0xbb450dd3,0xbaf4404e,0xbacf8f02,0x3acc91ed,0xbb030a75,0xbb0eb91b,0xbac64006,0xbb174b9c,0x3a05c754,0xbaa0eef3,0xb9bc2d08,0xb6bbe96b,0xb95d11f8,0xbad013a8,0xba9237cf,0xbaf58666,0xba9e5ee3,0x39d0f0b9, +0xbac78ee0,0x39db983f,0xb9f1526f,0x385cfdd9,0xba387270,0xba640348,0xba94986e,0xbabd9edc,0xbad727ce,0xbb0c240e,0xbb2f82cd,0xbb45fd9d,0xbb79054f,0xbb940461,0xbbbeda1d,0xbba64675,0xbb8baab8,0xbb656ff3,0xbb42213b,0xbb07f9c8,0xbb2385d0,0xbab2894b,0x3ab10c5e,0x3b44b0eb,0xbaf0e3b8, +0xb9989209,0x3b00d35e,0x3b24cd58,0x3b1ce1f7,0x3b150ba4,0x3b33ceef,0x3b6b8f55,0x3b78fac1,0xb83378fe,0xbb10aa2c,0x3b37e8eb,0x39e4376b,0xbacaaa0d,0xbaee9990,0xbaf28622,0xbae6a1b5,0xbad7bf17,0xbacdc10e,0xbac168b3,0xbab8c998,0xbad3d8b2,0xbaf6c995,0xbb0ed31e,0xbb1b591f,0xbb1a1319, +0xbb246742,0xbb139b12,0xbb10b257,0xbb0f7e3f,0xbb0d0105,0xbb2e0b49,0x3b311a2b,0x3b0eb10c,0x3b8cf04b,0x3a170d78,0xbb88acd7,0xbbc15879,0x3a90d238,0xbb39d865,0xbbcefad0,0xbbd89a60,0xbbdc36ea,0xbbb53ece,0xbbc7d687,0xbbee5eae,0xbbbfe59f,0xbb5ce58d,0xb8f27b43,0xbbda8dad,0xbb9304e4, +0xba2c1f8b,0x3b6f796c,0x3b15201b,0x3b24eec1,0x3b236f5a,0x3b2823be,0x3b2cc874,0x3b32c5db,0x3b3cdad1,0x3b40d8bf,0x3b3c94ac,0x3b378db7,0x3b2a595e,0x3b26e2a7,0x3b1f0bd5,0x3b1fce03,0x3b14f9b8,0x3b1d65b2,0x3b486997,0x3b793a1d,0xbbd3a70a,0x3a7bc9ba,0xbb5c30d8,0x39756ae4,0xb95befb9, +0xba8f9dca,0x3ad2abaa,0xb9629cc1,0xb96d332d,0xba8c48ce,0x3a0073c9,0xba8554a6,0xbbabc54f,0xb9fa4115,0xbb668afc,0xbaa484c3,0xbb845624,0x3b18cb0c,0x3b2f3d4a,0x3b18d826,0x3b29dce7,0x3b2c1dc0,0x3b472241,0x3b71ccb8,0x3b9bb9f8,0x3ba5176c,0x3b93ecc4,0x3b92f5cc,0x3b7b0ade,0x3b5eeb48, +0x3b25b5a4,0x3afa209c,0x3ac00ef7,0x3b010b81,0x3b62790d,0x3b3637b8,0xbad1a83c,0x3b31571b,0xbb152d15,0x3a346bda,0xba198579,0x3b34a2f6,0xb929de0c,0x3b69a43a,0x3a7892c3,0x3b7dc68e,0xba5d7cf6,0x3ae3bfe9,0xba9c82d7,0xb9e8109a,0xbb2257f0,0xbb3b67f0,0xbb2bd5f4,0x3a55f3f5,0x3b59ba2c, +0x3af019f8,0x3b41f9d8,0x3b257ebb,0x3b614e80,0x3b8ea04f,0x3bc40415,0x3bcc18d8,0x3bbca368,0x3ba680ba,0x3b86c03d,0x3b4a5f63,0x3b00661a,0x3ae5fc00,0x3aad7816,0x3b03caaa,0x3b90d9bc,0x3b65f95d,0xbb1facbd,0x3a76bfdc,0xbacf4656,0x3a973642,0x3ab4893e,0x3b21c0df,0x3b82cee2,0x3b9e453b, +0x3ba78a93,0x3b1f5ee0,0x39c756d8,0x3b8d6f33,0xbada8bae,0xba69c9d3,0xbb36fb95,0xbb11c5bf,0xbb515acf,0xba3c3d2c,0x3b47c409,0x3a6dd6f8,0x3b149f82,0x3b146077,0x3b7f7a10,0x3ba840ad,0x3c059d10,0x3c11e6b9,0x3bfc4145,0x3bf57552,0x3bb847ff,0x3b85eaaa,0x3ab1540b,0xb9814c43,0xb99f1a05, +0x3a23794b,0x3b5ecff4,0x3b53248e,0xba23ed55,0x3adccdac,0xbb11dc7e,0x3b13beb5,0x3b8af0fd,0x3b492a5b,0x3b9174e4,0x3bb6215f,0x3bdadeb2,0x3b37dcb7,0x3b456e30,0x3b82142c,0x39283808,0xba96ae77,0xbb5ecaf2,0x392d5768,0xbba9a4c1,0x3a637040,0x3b160f92,0x3a8da81c,0x3b235b94,0x3b0ea042, +0x3b7f5e7e,0x3bc3f184,0x3c23916f,0x3c2c8dcb,0x3c0f86da,0x3bf6d876,0x3ba12128,0x3b1b8d4f,0x39a7e690,0x3a778b91,0x3ab19fbe,0x3aeb3178,0x3b8fb76c,0x3bd4725b,0x3b0c75f5,0x3b9178e0,0x3c03aa66,0xbb7d404a,0xbbc7a44e,0xbbb0b2f7,0xbad1d8ca,0x3ab4643e,0x3a3982e2,0x3b95ce81,0x3b6e9d5d, +0xbb48b2bd,0x3b07fb20,0x3b5dd95d,0xbaf63aa2,0x3aa55c4c,0xbaa07f07,0x3b16ee3c,0x3bd87afd,0x3bc163e8,0x3bf0f976,0x3b78d5d8,0x3b29eaec,0xba83e53c,0xbac0f9bf,0x3a8e9d13,0x3c44d1d8,0x3c349911,0x3c492160,0x3c600469,0x3b89d2df,0xbaca0335,0xbb3a9bb3,0x3ae07524,0x3a2cab3b,0xbb69bd9a, +0xbc65f790,0xbbb39226,0xbc605bfa,0x3b49c932,0x3be7c2a2,0x3bb0a22c,0x3b082b3d,0xba7ef116,0xbabd7abe,0x3a532c99,0x3b1b5d92,0x3b630cf5,0x3b166233,0x3aefaf73,0x3aa64a2f,0xb981fcc7,0xbb7ad875,0xbafcbbf3,0x3b5ed1a2,0x3b24e76a,0x3bac9dd0,0x3ac0b88b,0x3931b3f9,0xbb00ee6c,0x3b306f94, +0x3b5c505d,0x3b4e6579,0xba6261cf,0xbafcc8e7,0x3b349775,0x3b828756,0x3c1f99a2,0x3c8be88a,0x3b7a06f4,0x39c1fe83,0x3c5736f7,0x3acdc49d,0xbb6acedd,0xbb97db29,0xbac371c1,0x3ab295e0,0x3b2aefdc,0x3b0118b4,0x3b0b5670,0xba8c8537,0xb7d3b87b,0x395c5458,0x3aa32f58,0x3b177ae2,0x3ade2f75, +0x3aa03027,0x39c94828,0x3a327b8d,0x3b47e953,0x3b229996,0x3b0a43ad,0x3b82da76,0x3bc49436,0x3c07d223,0x3bf74f5a,0x3c100146,0x3bff822b,0x3bbd96ec,0x3ba14447,0x3c0b7311,0x3c9ee2b9,0x3ab0952e,0xbb6488f6,0xbac5c9ce,0xbb9a8191,0xba122e9e,0x3b92b52d,0xbb5f0d0f,0xbb3f2f9f,0xba691229, +0xbb9b2b4f,0xbb51891c,0x3a119dd8,0x3b07690f,0x3b08721d,0x396f8ece,0xb99c3cdb,0xba9889ce,0xb9602017,0x392c06bb,0x3a518bdf,0xb9f80d1d,0x3a0424c3,0xba7f1291,0xb97e0179,0x3acc9f18,0x3a65eb0a,0x3b374144,0x3bc6a780,0x3c0d6c1b,0x3c2c6f2f,0x3c2e2a79,0x3c155913,0x3c01e1cd,0x3c0d66a7, +0x3c466a7c,0x3caf42b9,0x3b905b61,0xbac1af53,0xbb1cb9fe,0xbb14172a,0x3aa19c65,0xbbf2319c,0xba34abb2,0x3ab33563,0xb9232af2,0x3b5befe7,0x3b2bdcbb,0x399e81b9,0x39580af8,0xbab21150,0xba97f38a,0xba860e0d,0xbac81657,0xb9d1b12a,0xbb105a89,0xbb44416b,0xbb3a3996,0xbb1ce0c7,0xbb694d2c, +0xba6e71d2,0x396ca497,0x3a87e834,0x3b1bd9ee,0x3ac2f83c,0x3b32cd0f,0x3b9bc02d,0x3bdb8b35,0x3beede63,0x3bc52585,0x3bab73cb,0x3b5ae056,0x3b8829fd,0x3bb6e731,0x3c027965,0x3c28d970,0x3b98e30a,0x3c7e9b61,0x3b0d800d,0xbb816663,0x3b1fde52,0x3aeec1b5,0x3abafa43,0x3a827160,0x3a8ee053, +0x394d0490,0x3ae99530,0x3b05eba9,0x3b0e8ea0,0xb9321b70,0xbafebe50,0xbb086d68,0xbae39d64,0xba95aba4,0xb9a11eb4,0x39f0d170,0x3a3a5f44,0x3b0d3887,0x3a69f61a,0x3af6b960,0x3ab30f8a,0x3a461f1b,0x3aa66794,0x39ef4a3d,0x3b30799f,0x3bbded5e,0x3c1154d1,0x3c32d429,0x3c819aa8,0x3c5f5e62, +0x3c622d08,0x3c8fab8c,0x3c736181,0x3a8ac6ba,0xbb2a33f4,0xbbf417a1,0xbbe101c4,0xbbcd87b4,0xbb86d614,0xbaf4f689,0xbb156179,0xbb03e1f8,0xbb4d6c72,0xbaa087d4,0xbb18b608,0xbae76f17,0xbb0cca2c,0xbb1e3c31,0xbb2ecdc1,0xbb4ec29c,0xbabe0422,0xba8cca08,0x3ad5b22e,0x3b2ac5cc,0x3b6a00b3, +0x3b82589a,0x3b59dd3c,0x3b50c58c,0x3b20d96d,0x3b47b3ff,0x3b5e1a2f,0x3b57e4c6,0x3b5f148a,0x3b8b3d44,0x3bd60898,0x3bcd80c5,0x3bb31bee,0x3b5cc3ba,0x3b08c44c,0x3b260dbe,0xbb889405,0xbb8c2c03,0xbbb88a78,0xbbf3dae3,0xbb84f59d,0xbbc4bfce,0xbb935564,0xbb9840de,0xbb6b0169,0xbb83ae43, +0xbb4da3ba,0xbb63ec68,0xbaff883e,0xbb089494,0xbb17ea75,0xbb53c950,0xbada66f9,0x3949f172,0x39cbf971,0x3b47728b,0x3b38bbc1,0x3b4fcfca,0x3b5490c2,0x3b51a05f,0x3b41feab,0x3b64d5a9,0x3b6adc36,0x3b880090,0x3b9e392b,0x3bb77a1b,0x3bd86538,0x3b849559,0x3b07cb3c,0x3af0f9c5,0x39dad834, +0x3a3a7f97,0x3a92f7d5,0xbb65e4d1,0xbb1b478d,0xbba3ff76,0xbbc0da12,0xbbb366c4,0xbba0406c,0xbbaa0b13,0xbb716be0,0xbba9b27b,0xba8e3714,0xbb2515c2,0xba5b9ff5,0xbb33379b,0xba9a2419,0xbaa5b05b,0xb9723c26,0xba96c46f,0x3b108735,0x3b2244a0,0x3b057958,0x3b240eaa,0x3b10a8b5,0x3b1db9b4, +0x3b1a4e32,0x3b3f1d0c,0x3b5d732f,0x3b6cfa49,0x3b5c3d69,0x3b493aee,0x3b581d5b,0x3b3ee121,0x3b325dba,0x3b09c05a,0x3a871f93,0x3a9d37af,0x3abf0897,0xbb334725,0x3a322f84,0x39f71719,0x3982f47a,0x3a96f430,0xbaa29548,0x3a3e645e,0xba90f61e,0xbaa886d2,0xbb0be5b2,0xba7a7cfe,0xbae3c76b, +0xba2110fc,0xb9bdce7a,0xbab06550,0x3aa771e2,0xba68b87d,0x3b055044,0x3a973ebc,0x3aaddcbe,0x3a7c1823,0x3a62c84c,0x3a223c7b,0x398adeba,0x3a34e170,0x3a3b94bf,0x3a9f3c9d,0x3ae91d55,0x3b186ee6,0x3b2ff011,0x3b11a787,0x3aca15a8,0x3ac45a56,0x3ae3d01d,0x3abfadd9,0x3b035b0a,0xb71eff99, +0xbb2f8e04,0xbb780df6,0xb9c9daf1,0xbb27ed19,0xbb993789,0xbba5b069,0xbb950457,0xbb84cbdc,0xbb89bd5d,0xbb990cfc,0xbb9aa9f6,0xbad5a0a3,0x3a4cbe0a,0xbb61dc0d,0xbae70695,0x3a163a5e,0x3b0174c3,0x3ad96da4,0x3adba994,0x3ada7b83,0x3adcf0f1,0x3adb9d0c,0x3ad70140,0x3aec44d2,0x3af1c342, +0x3af41216,0x3aeb1901,0x3ad92c9d,0x3ae080e7,0x3ae6e0b2,0x3ae7521b,0x3ae2b8bb,0x3acd4c25,0x3af16102,0xbafdc55d,0xbae1d517,0xbb6c7afb,0x3a871708,0x3b91a50a,0x3b675b02,0x39e3abb6,0x3b64dd84,0x3ba3c9c7,0x3ba10927,0x3b9e358f,0x3b89c125,0x3b866137,0x3b9d0791,0x3b84b001,0x3b6de700, +0x3a889492,0x3b4f7535,0x3b6efa49,0x3a93f73f,0xbb584c3f,0xbb0b8e61,0xbb14159c,0xbb199c7e,0xbb2242ff,0xbb1982db,0xbafb4230,0xbae83333,0xbadd2d38,0xbae3d0d7,0xbaf660b8,0xbafeb81b,0xbb0b885a,0xbafdcf26,0xbae0d5f3,0xbac45e0e,0xbae30281,0xbb0ea52e,0xbacbc6ed,0x3bdf10b8,0x39f55a37, +0x3b2c29c3,0x3a90d17f,0x3aeb0bb0,0x3b0583fd,0x37ffd66e,0x3b2b088a,0x3b3ff5ed,0x3b122500,0xb73f2b74,0x3b0a3cca,0x3b78bb5e,0xb7290fa6,0x3a463adf,0xb9bedee1,0x3b2e0e01,0xbad91495,0xbb589891,0xbb495482,0xbb6b2173,0xbb4d3eb7,0xbb281a89,0xbafa0d37,0xbaa272d9,0xbaa2f0a0,0xbaff8277, +0xbb0c21bf,0xbb1e693b,0xbb4d3f1e,0xbb337e5e,0xbb35cf52,0xbb147986,0xbaeeb07d,0xbb2b5119,0xbacc1248,0x3b80cc24,0x38e164b3,0x3ae64dcb,0x3ad55d4f,0x3b66924a,0x3a130b8f,0x3b4981bb,0xb9c31a80,0x3bb1aab2,0xbacb1051,0x3ad6e101,0x3ad90419,0x3a86a35e,0xba25a326,0xbb0adee5,0xb9e390fb, +0x396e09b7,0xbaf389ca,0xbba7cfd9,0xbb7c1945,0xbba41ea6,0xbb98f9a8,0xbb824469,0xbad97649,0xb9eb6b25,0xb98ed3a0,0xbaa8c917,0xbadce95d,0xbb231d07,0xbb64a5de,0xbb286460,0xbacc6867,0xba305f3e,0xbaa004bd,0xbb20a586,0xb95e4844,0x3bd660a5,0x3b6483b2,0x39e5f563,0x3b13fdce,0x3b18dbd5, +0x3aecf482,0x3b61f47e,0x3b814c56,0x3bb251e7,0x3a65d270,0x3ac2b950,0x3acd9744,0x3a138336,0xbaa503bd,0xbb5cdc5f,0xbb067312,0x3887502e,0xb9de70b3,0xbbca8af9,0xbba4416f,0xbbc76010,0xbbb85f50,0xbb860f05,0xb9d7955e,0x3a719cfc,0x3a91bbfc,0xbac7a97d,0xbaa7c9c9,0xbb2b513e,0xbb9e68ff, +0xbb525fdf,0xbb512040,0xbb1930d3,0xba46a48e,0xbb0a2360,0xbb1b53a7,0x3b90e738,0x3aabae6e,0xbb00422a,0x3b02ad67,0x3b7bcf77,0x3b4d189b,0x3b8f69d9,0x3bb100c4,0x3bac35df,0x3b1e33ea,0x3ae1dd6d,0x3b650079,0xbaa40b56,0xbad6aa79,0xbb3cb0af,0xbbaca2f7,0x3a9ec4de,0xbb4b1771,0xbbe8575c, +0xbbc70d44,0xbbf8eade,0xbbe39d4f,0xbba3d62a,0xba61840f,0x3b12eb9f,0x3b0846af,0xba12ea47,0xbaab3565,0xbb1ca4e3,0xbb8bf52c,0xbb171b59,0x3a250f9b,0x3a9e3461,0x39e013d2,0xbbaa6218,0xbb96bf2f,0x3bfcb799,0x3c182d9a,0x3c1e3899,0x38b82de4,0xbbbd80ed,0xbb9bf51b,0xbb3f9464,0x39c338e9, +0xb9141c9d,0x3ba949bf,0x3b86dc5d,0xbb552fa7,0x3b115e48,0x3ab83ddd,0x3a9b36ae,0xbadd573a,0x3a5c9f35,0xb9d119b2,0xbb46ae20,0xbaefc735,0xbb84af17,0xbaa6ee65,0xbb8a08b2,0xbc137a7c,0xbc60ca89,0xbc3ee737,0xba164032,0xbb0b3e50,0xbad5612c,0x3b00be50,0xbbe08675,0xbc4f9c8d,0xbc39b493, +0xbc245ef6,0xbc17c83b,0xbb991f38,0xba60bf7e,0xbc2c4081,0xbc13d02c,0xb971e87d,0x3bc8288a,0x3bc0d123,0x3ae6d006,0xba25e8c6,0xbb147fad,0xb9452cbf,0x3af96b40,0x3b1a21ca,0x3ae8bd77,0xb9dc87ca,0x3a8f27cd,0xbadc7497,0xb8a686a9,0xba04af5d,0xbb881262,0xbb2970d3,0xbb9d39e4,0xbba96dbf, +0xbb7b3f5d,0xbaed8d93,0x3ba459fc,0x3b859f9b,0xb89f9f7f,0xbb4f0a7d,0xbb06bd82,0x3b995a12,0x3bd3fb01,0x3c3bf660,0x3c7febc8,0x3abed396,0xbb9cd144,0x3c1cd897,0xbad8c929,0xbb940a54,0xbb867173,0xbafcdb03,0x3ab4ede8,0x3a8f5ded,0x3ac0dc8f,0x3a88ea98,0xba9e314e,0xba910b37,0xba156161, +0x3a788d2b,0x3ad832ed,0x3afb15d2,0x3af1206f,0x3a0bf8a2,0x3ac5a085,0xba987ee5,0xbb096092,0xb9b34a0e,0x39a291ba,0xba98aa8e,0xbad222ea,0xbb07a966,0xbb229e0c,0xbacad212,0xbb1f3610,0xbb9f17e2,0xbb42a5bd,0x3c3a9f21,0xbbc888cf,0xbc257340,0xbbe73383,0xbc0798df,0xbb6d4f02,0x3b056bf8, +0xba62009c,0xbb8fa827,0x39c087e9,0xbb66b3d1,0xbb302f71,0xbaa12899,0x3a5db723,0x3a8a56d5,0xb809abc3,0xba543c54,0xbaa8f796,0xba14bc8f,0xb9f368ba,0x3a10d98a,0xba24554b,0xba0a5c24,0x3a66ab70,0x3a3186c2,0xbb61c2f5,0xbae6235e,0xb91070a8,0xb9dcd9ae,0x39bae934,0x3ab268bf,0x399e5173, +0x3a9d2822,0x3b060dd9,0x3a86e26e,0x3a4a9051,0x3c10bce9,0xbc0c0e20,0xbc59006a,0xbc248df9,0xbbde2e87,0xbb04c39b,0xbb6d50e5,0x3a62ec54,0x3adff555,0x3adc5147,0x3ad305e1,0x3af1313d,0x3ac9f97b,0xb95cc6a4,0xbabd1163,0xba6c2772,0xbaa8a265,0xba8a9514,0xbaa72c46,0xbaf97e18,0xbb1943b0, +0xbb2c0086,0xbb5e4ef8,0xbb27c58d,0xbb84f6f1,0xbb8a0319,0xbb8cae2f,0xbb82bae9,0xbb05081d,0x3ac53ad2,0x3b9041b6,0x3bef0664,0x3c06422d,0x3c198663,0x3bdab85b,0x3b72f391,0xb9a2ab55,0x3a6a4ecd,0x3ad1b9d5,0xbb406a4f,0x3aafd574,0x3b64dd48,0x3b9169d4,0x3bedda0a,0x3aec3c6a,0x3b619956, +0x3b3c05a0,0x3b12e196,0x399affd9,0x3a90cea1,0x3ac7b5c2,0x3aed5e50,0x3b106dc5,0x39594ebf,0xbb109e86,0xbb089466,0xbb22c299,0xbb2fd565,0x3992157b,0x3af6fe3b,0x3b1a744e,0x3a272cfd,0x3afd03c2,0x3aa1a917,0x3a978915,0xb86140ea,0xba361058,0xba01b958,0x3ab18d4f,0x3b83f1c6,0x3b987212, +0x3b9e8214,0x3be94499,0x3bb4ba54,0x3bd362a3,0x3c01db72,0x3c007a1c,0xbaf20977,0xbb489073,0xbab1241d,0xbb45824b,0xbb3e4357,0xba99f53a,0xba3622c3,0xba0950e2,0xbaf2a0a9,0xbabe652c,0xbb10b8bb,0xbb12470b,0xbb2cc4c3,0xbb2d081b,0xbb135aca,0xbb08bfa4,0xbb48608b,0xbb1e2d1d,0xba169d3e, +0xb9d1c557,0xb9a5d505,0x3996a131,0x39cbe90c,0x3aa7cc23,0x3afa26f0,0x3ab8e8a0,0x3aaecb01,0x3aa6ca43,0x3aeb80b7,0x3a85c277,0x392b1b70,0xbae67acb,0xbaa8b20d,0xba2a9555,0xbab536ab,0xba5bb1ab,0xbb89611d,0x398554fc,0xbb0c851c,0xbb6e3d8a,0xbbaed98b,0xbbc8a22f,0xbb9b1b8a,0xbb9296dc, +0xbb7523b6,0xbb7e12d2,0xbb453850,0xbb58ee61,0xbb2295a8,0xbb223139,0xbb0fe75c,0xbb0bc6a2,0xbad9e0ea,0xba6e1391,0xb9f095e8,0x3ae78af2,0xb9f7e08a,0x3a592154,0x3a4d1ea0,0x3aaa28dd,0x3a969c28,0x3a6eca23,0x3a88c31c,0x3a7c01a3,0x3ac6ae38,0x3a97c3c4,0x3a56e186,0xb996e1f0,0xbaaabd7a, +0xbb154313,0xbb3e7974,0xbb000665,0xbb1b01c8,0xbb21df0c,0xb9604198,0xbb2962b7,0xbb208645,0xbb2b019f,0xbb796dcf,0xbbb5a42f,0xbb936447,0xbb85c01c,0xbb247eba,0xbb53af2e,0xbafcfb7b,0xbaed8e5a,0xba393ea8,0xbace69fc,0xbabdd860,0xba1e2f86,0x3adc1519,0x38974c1a,0xba181db7,0x3a1f835e, +0x3a3196aa,0x3a7a06ca,0x3aa066d2,0x3ad63dae,0x3a98cdc2,0x3a9111f1,0x3a6a7fd8,0x38dd8b3f,0xb9fc42df,0xba66e152,0xba8c1737,0xba75d0b9,0xbaca7a4c,0xbad0e1c5,0xb9c14958,0xba0a218b,0x3b1d15ff,0xba1152fb,0x37e23a08,0x38f57c76,0xba1d7167,0x3a290562,0xba169548,0x3a21eaec,0x3a4f8395, +0x3a6fcccd,0xb98cb7c5,0x3980bb01,0x3a045ace,0x3a896507,0x3b057b41,0x39a7e0e3,0x3b0c8270,0xb94518ea,0x397c8dde,0xb9869320,0xb9eb0db3,0xba1ea0e0,0xba727bbd,0xbaa03d1b,0xbada3e37,0xbb0d7efe,0xbb10fc0b,0xbb144856,0xbb066d4e,0xbb0ddf1d,0xbb0009e2,0xbadc40b8,0xbab0962d,0xba85b7d3, +0xbaba2c6f,0xbae02142,0x3a027df4,0x3b13bfa4,0x3afa5e3e,0xb9a8fc09,0x3a94e8d8,0x3addc2d9,0x3b0e3185,0x3afb2f52,0x3adf106d,0x3b0b320d,0x3b37fe5b,0x3b409257,0x3ae8a3a7,0xb99a81c0,0x3b08dd00,0x3b0615ce,0x39b061bd,0xbac52ad4,0xbaa06c92,0xba9d43a5,0xba961196,0xba911242,0xba861ec7, +0xba73f252,0xba69dfe0,0xba729348,0xba87e47a,0xba9abe93,0xbab072f1,0xbac5e20c,0xbab6e2ac,0xbaacaee4,0xbaae3974,0xbab4cefc,0xbab4424d,0xba6ca430,0xb8c9a846,0x3a99a708,0xbb433ae0,0xbb91aa02,0xbb06218d,0xbb11bcbf,0xbb746edf,0xbb4c3167,0xbb4aedef,0xbb38f98c,0xbafadbd0,0xbb10756a, +0xbb25b25d,0xbb0900cd,0xbb89008a,0xbb518fa2,0xbb126817,0xbb90ce62,0xbb5d4428,0x3a237dc9,0xb9cc77fc,0xb9e9cfa2,0xb9cf9fa0,0xb9b0c92e,0xb9433b70,0x38d60ec0,0x391fca87,0x391eeec9,0x38897207,0xb9205d4a,0xb99f5960,0xba01c56d,0xba229f2b,0xb9ee8654,0xb8963398,0xb8c8547e,0x3a1d4b2b, +0xba480d8a,0xbb9db4c5,0xb9e93a2c,0xbb2823fd,0xbaa4aeb5,0xbb091235,0xba8ed2b8,0x39376130,0xbaf803d0,0xba84fb14,0xbb2cbca9,0xbaa2a69a,0xbaea3dae,0xbb48b009,0xbb0c6aa4,0xbb8345ac,0xbb2aee7e,0xbb95f383,0xbb024112,0xba6123c4,0xbad70ea9,0xbac14389,0xba9d1f25,0xba329793,0xb8d8a82a, +0x3a153068,0x3a214881,0x39434bfd,0xb90f8f00,0xba47881e,0xbad1bdc2,0xbb29434b,0xbb2a9723,0xbaa2f215,0xba600cfe,0x3ac24708,0xba046bec,0xbb3b6387,0xb8ab66b6,0xbb1f0377,0xba3a49d4,0xbab9698e,0x3aad2724,0xbaa0230a,0x3aa1cb03,0xba9edeb4,0x3a6fadc8,0xba5e40ae,0xba8e2e4c,0xbaea350d, +0xbae2821f,0xbb87b605,0xbb694430,0xbb8e8744,0xbb0fdc48,0xbac3b24f,0xbb43b37f,0xbb1a02a3,0xbb0eeaba,0xba608c2d,0x3a3303f1,0x3acc8bea,0x3ac5a72c,0x3a173458,0xb97a8737,0xbad17c21,0xbb3f3e24,0xbb8a200e,0xbb4fb295,0xb9cae6c8,0xb9c43f12,0x3b2f21df,0xb93c0a37,0xbb4d5831,0xb976fb94, +0xbaad3635,0x3a57e6bb,0x3a8f3bb2,0x3ad7c75b,0x3b4236d2,0x3b71bf9c,0x3b9b85f1,0x3b06cec9,0xb9b0176f,0x3b37e3ae,0xbacac628,0xba688132,0xbb7ffc32,0xbb6380c5,0xbb9afd5f,0xbb65380d,0xbb1c4668,0xbb8afe8b,0xbb832cb4,0xbb664455,0xbb04d849,0x3a031a10,0x3b084958,0x3b1b9b64,0x3a5a0431, +0x39d27920,0xbb117630,0xbb8cca1e,0xbbef58b1,0xbbd7e5da,0xbae2e57d,0xba9fa58e,0x3b48c51b,0x3a51913d,0xbac709f1,0x3a561384,0xbb061389,0x3a9ddaaf,0x3b5f2170,0x3b76556c,0x3b8f4f5e,0x3ba719f6,0x3bd8056a,0x3b2350d5,0x3b25ad8f,0x3b4d4b5e,0x39438038,0xba98818b,0xbb883ded,0xba7a278f, +0xbbcbcf49,0xbb4478d1,0xbb6b49dd,0xbbbe1e8c,0xbbac30ba,0xbb8bc50a,0xbae27445,0x3b12df5e,0x3b9c0e69,0x3b82db18,0x3afef3fd,0xb908ce4d,0xbb4fc7f0,0xbbb3b138,0xbc0cf0c8,0xbba34605,0x3a9832e8,0x3a65573e,0xbb6890a9,0xbb41ca79,0xbb991ee1,0xb83f257b,0x3bd2a811,0xbabcf765,0xbb9b4835, +0xbbbd8a7d,0xbb5e141d,0xb82a4ee0,0xb9fc12ee,0x3ba7a8e3,0x3ba49e02,0xbb4d4ef3,0x3ae29f09,0x3b12ead9,0xbaad2296,0x396babbf,0xbb5051b3,0xbac98fb9,0x3b177ef1,0x3b51b235,0x3bb17738,0x3b0f1f2c,0x39faa02f,0xbb23c5a8,0xbb8e6690,0xbaa43126,0x3c143e24,0x3bac469a,0x3b84ce8e,0x3b322aca, +0xbbc804ac,0xbc2cdd61,0xbc17ea6a,0xbbd02ef7,0x3b3916e1,0xbb25dc7b,0xbc2ed177,0xbbcf55d0,0xbc6341c4,0xbabbb467,0x3b8961bc,0x3b909d14,0x3b29dd95,0xb9e28123,0xbb3453a9,0xb9b3e473,0x3ac58cdf,0x3b2b6c6d,0x3ad1c5b9,0x3a6772d1,0x38e3c5b6,0xbae67358,0xbb84a794,0xbb8b2d55,0xbb0874f4, +0xbb7d0512,0xbb5fd329,0xbb85b6a9,0xbb5e2fe0,0xbb3395f4,0x3b742a12,0x3b7f326b,0x387f288f,0xbb1db724,0xbb52fb3e,0x3af57a88,0x3b52370f,0x3c1564c0,0x3c6df9ef,0x3b880493,0xbb804548,0x3be1e396,0xbadb6e05,0xbba8a4f7,0xbba8783f,0xbafa6569,0x3a6c652b,0xb83b99cf,0x3a39dbfc,0x3a861923, +0xba73bd02,0xba7564e7,0xba4721fe,0x3aaaac8d,0x3a126cdd,0x3a3d05c5,0x3a40e776,0xba510822,0xba47158e,0x38fbc804,0x3a30dc2b,0x39a71689,0x3adebd6e,0x3a58218a,0x3ad75a90,0xb9a4ebca,0x3b1931a7,0x3b542a6a,0x3b71714b,0x3b1c84db,0x3b01c554,0x3beb0997,0xbc3fb34c,0xbc8224d2,0xbc081281, +0xbc19c126,0xbbcc6818,0x395c244f,0xbb67d762,0xbb9153db,0xb9731b40,0xbb67373f,0xbb2bb688,0xbb09d3ec,0x398dbc5c,0x3a63d67f,0x39460644,0xb9f233d5,0xba9ca49d,0xb9b9aa30,0xb9864396,0xb9b05f1c,0xba8e86fc,0xb8bd221b,0xbac20dd1,0xbae3716b,0x39dd990c,0xba126f12,0x3a965722,0x3ad62296, +0x3b187446,0x3af16d64,0x3aac3ecc,0x3adf5d32,0x3b9f7d17,0x3b80e9db,0x3b85acd9,0x3c0671f6,0xbc3e69cb,0xbc948520,0xbc7ab9cf,0xbc2596e3,0xbb86bc49,0xbbab7510,0xba3f8b01,0x3b1d881a,0x3a6d7c13,0x3b08c810,0x3ad6f82c,0x3a3104ec,0x39bef69e,0xba9333d4,0xbae523b7,0xba3a1c00,0xba5d464e, +0xba5206ef,0xbaf98c65,0xbb2c720c,0xbb55b3e1,0xbb65b8cc,0xbb8f02db,0xbae489b4,0xbb29d173,0xbb579070,0xbb4753df,0xbb33627f,0xb8157e4b,0x3b3e13c4,0x3b8b3d90,0x3b8dae23,0x3b673c1f,0x3ab2aa3d,0xba83b6c3,0x3adb6935,0xbb0dcce7,0xbb0e0a04,0xbbd0ee7d,0xbba54faf,0xbb2434de,0xbbcf9438, +0xbb44d346,0xbad8f96b,0x3a623fc4,0x3a9f74ea,0x3a42938b,0x391782b6,0xb98eeb72,0x3aad3473,0x3ac7531e,0x3b250668,0x39ef1f1d,0xbae645d7,0xbb217598,0xbb3145fc,0xbb08dfe2,0xbaee3bc7,0xba81d96a,0x3897fcdb,0x3a96214d,0x3a8e7db3,0x3ae8a56c,0x3a5274c5,0xba4602be,0xbb227f6b,0xbb2e6cf2, +0xba90e51c,0x3a34d516,0x3b749ae2,0x3b9a6af8,0x3bcf7296,0x3b3174d8,0x3aafbdfd,0x3b59a74d,0xb9e07bf8,0xbb1b18bc,0xbbc039a0,0xbbb6b1eb,0xbb954b37,0xbb894841,0xbadbecfe,0x399af7bb,0xba1ce744,0xb996f164,0xbb053f80,0xba03455a,0xbb1c1f5d,0xbb04e319,0xbb1f6264,0xbb1c0f39,0xbb3f4516, +0xbb710923,0xbb34884f,0xbb085f85,0x3a03510d,0x3a779f99,0x3aaaab7f,0x3ab9f3d3,0x3a12ea80,0x3a201ade,0x38db1bb8,0x3a227d54,0x3acbbe82,0x3b33e981,0x3b128e9d,0x3ade57ee,0x3a91ae9e,0x3b182041,0x3b0c7ad0,0x3a062e6a,0xba628198,0xbab9b2a2,0xbb97dcad,0xbbc266ad,0xbbca7aed,0xbc030f31, +0xbb9a4fc7,0xbbba9ae0,0xbb81d426,0xbb80566e,0xbb2f54fa,0xbb3bf7d5,0xbb187908,0xbb3dfdcf,0xbb07f149,0xbb10fe06,0xbb148e5d,0xbb4f880e,0xbb240d51,0xbaa70f51,0xba8339d9,0x3a91fb56,0x3ab0872d,0x3aead758,0x3ad69a16,0x3ab2e46e,0x3a9cd124,0x3aa0ef70,0x3a999cef,0x3ae6c0fa,0x3b04b7de, +0x3b0c695e,0x3ad6cbbd,0x3970a6c3,0xba78ec15,0xba73d081,0xbaea5742,0xbaa89402,0xbac845dd,0xbb87bb1b,0xbb855f63,0xbbc6cbcb,0xbbce1cd3,0xbbc0a041,0xbbadad0d,0xbbb02152,0xbb842e90,0xbbae1524,0xbb24c8f3,0xbb25aa78,0xbb0724f6,0xbb15a65e,0xbad8015d,0xbab3d519,0xba3e3403,0xbabeccc1, +0x38027423,0x3aae088f,0x3a980efc,0x3b0a4e33,0x3afda52c,0x3b17ad61,0x3b1e6100,0x3b0c495d,0x3af6267b,0x3a8df33a,0x39ce9b85,0xb9ae5041,0xba0403e5,0xba06529e,0xba2bbbcc,0xba8875e1,0xbac4dd19,0xb94ff683,0xb8f4be27,0xbafc894a,0xb970e4c6,0xba0b6240,0xba527965,0xba55ba18,0xbad005de, +0xba478d2b,0xbb03a4d1,0xbafe952a,0xbb2f9b9d,0xbb10945a,0xbb1f190f,0xbb16a025,0xbaf1b4d6,0xbac7f70e,0xb9a41827,0xba2fd929,0x3af9561b,0x3abd2987,0x3a9aebe0,0x3a623ded,0x3a3b7708,0x39dd1fe8,0x38a5f93a,0x39d94532,0x39c7ae27,0x3a24f780,0x3a4c8b79,0x3a5d96ce,0x39ceb762,0x390b6d21, +0x377998f6,0x37c3ec04,0x37596d65,0xb9e9a581,0xb9981d02,0xbb1500ff,0xbb4a8996,0xbb0121a6,0xbb391cdd,0xbb6f5a5a,0xbb4ce692,0xbb49f025,0xbb2c6851,0xbb0cb960,0xbb056b25,0xbb01df6f,0xbafb321f,0xbb364217,0xbad94152,0xbaa45925,0xbb22bcd1,0xbad41994,0x39ab6fe9,0xb8344bd0,0x386f237d, +0x390d6e04,0x396b38ca,0x399a6572,0x39a136ef,0x398a5884,0x384695f6,0xb909b6aa,0xb9c41682,0xb9fadb11,0xba0ea0af,0xb9e298c1,0xb9cdf11d,0xb9eea160,0xba0995b8,0xba7ed250,0x3b077e23,0x3aa39a6b,0x3a4f2e04,0x3b7adc4d,0x3b48ee26,0xba52e3a1,0x3b4f8a06,0x3b3da5ab,0x3a13d9d8,0x380cb738, +0xb9d66426,0xba0658a5,0xba448792,0xba8d269b,0xba5a9f5b,0x3b4072ba,0x3b5b9a28,0xbafbf3ef,0x3b05d7ee,0x3b3b083c,0x3a050873,0x3a6fa7e6,0x3a947f6a,0x3a8b1494,0x3a948c83,0x3aa35a45,0x3ac8f2a7,0x3ac9d9ea,0x3ad127d7,0x3ac277bc,0x3ac84523,0x3abae202,0x3aaee346,0x3abd3b38,0x3ac785c5, +0x3ab0484f,0x3ab6d4c9,0x3aabc8d0,0x3b42549c,0x3b3f2cc2,0x3af87f5d,0x3adb944e,0x3b11bd71,0x3b37ff81,0x3ae8d313,0x3a801cbe,0x3b3761e9,0x3b1add1d,0x3b3821b0,0x3ae1fa4d,0x3ae3eec3,0x3a71f4bd,0x3af8c7ce,0x3a15d7b7,0x3a409210,0x3ad8518e,0x3b0c458b,0x3a075556,0x3a8e77ea,0x3a8d3fe8, +0x3acf9fef,0x3b13f3ee,0x3b61806b,0x3b58f890,0x3b54e7b2,0x3b2dbf33,0x3b4dd07c,0x3b35fab4,0x3b02b82b,0x3b0d5327,0x3ae3d43c,0x3a853124,0x3ae6ac40,0x3ad2458d,0x3b26c453,0x3b898c91,0x3b54f803,0x3b26e6ef,0x3b28867c,0x3b42681f,0x3b2bf04b,0x3b2e05c7,0x3a9dd18f,0x3b9e71c6,0x3ae81ef3, +0x3ab5c100,0x3b3a8441,0x3ae4ff67,0x3aaf1aeb,0xb9d71d5f,0xb99289c8,0x3a27dde8,0x393bee27,0xb9330e12,0x3a65a864,0x3a8162a4,0x3ac949ec,0x3b132972,0x3b95886e,0x3b97e136,0x3b9469dc,0x3b77fad9,0x3b85344c,0x3b731eaa,0x3b2581f8,0x3b46646a,0x3b40d45e,0x3ae7d6f1,0x3b260b43,0x3ab66391, +0x3b39e436,0x3ba8d542,0x3b8460d2,0x3aee2671,0x3b26f938,0x3b05f963,0x3b634101,0x3b33bdef,0x3b671448,0x3b97f91b,0x3ab41700,0x3b147b35,0x3b01d433,0x3abccfda,0x39fdc133,0xbb0d8da1,0xba7af589,0x373f374e,0x39799885,0xba86c903,0xb9896ddf,0x3a2f22db,0x3b082e82,0x3b8ddad7,0x3c01bcc6, +0x3be598ee,0x3bddce0a,0x3b9e12cc,0x3bd42a9f,0x3bbb0755,0x3b4250b7,0x3b78d5a3,0x3b0f6095,0x390efa00,0x3b2022de,0x3b32e605,0x3b1211dd,0x3ba83e9d,0x3b5cbc45,0x3a421e4c,0x3b208b15,0x3b6c66ee,0x3b7944ee,0x3b8bb23e,0x3bb05ee3,0x3bb344e1,0x3b0dd34f,0x3aefd5d0,0x3b4f188e,0x394a5c88, +0xb947e495,0xbb2823c0,0xbb640c20,0xba22f3b5,0xbab3b28b,0xbb05b91f,0x3895ecf8,0x3a4d7186,0x3ae77a59,0x3b8276ed,0x3bfd1fd1,0x3c0fa8aa,0x3bfe22cc,0x3bafd7e7,0x3bd9b517,0x3bc83787,0x3b6134c1,0x3ba2141b,0x3bad7cb7,0x3b2f31c7,0x3b866ecf,0xbad84290,0xb92c6796,0x3b9bc3e8,0x3baf26a3, +0x3c0a085c,0x3ad29766,0xbb255abb,0xbb9d31ec,0xbb6cddd2,0xb9fdcbcb,0xba3d0fe1,0x3bc9bb80,0x3bb1195e,0xbb4cc46c,0x3b0ed31d,0x3adb1ffc,0x3b1f3919,0x3a0b54e6,0x3b17bdde,0x3b4a3c08,0x3b759414,0x3b4d9968,0x395d9539,0x3a5cb5f1,0xbad21cc6,0xbbfbd877,0xbc070a98,0xbb8c0ca2,0x3c0a8494, +0x3bb1681a,0x3be9538b,0x3c3e450e,0x3a5d76c6,0xbb9d5777,0xbbada9c3,0xbb6e1c69,0xba645174,0x3ade1bf3,0x39f8a163,0xbbbdf416,0xbc0f3ee3,0xbab40c1e,0x3b3c4ed6,0x3ba93f37,0x3b3029f1,0x39fca24f,0xbb3339f0,0xba998505,0x3a8a3ffa,0x3b0b1138,0x3b08807a,0x3a185613,0x3aae3c47,0xbabedc91, +0xbb09e7a8,0xba97bb49,0x3a51020a,0x3b3602f0,0x3b7c6793,0xb780e3e6,0xb8bd88de,0x3932d114,0x3be4d729,0x3bb8b23c,0x3a2fdc19,0xba160633,0x39d1ab75,0x3baf6c2c,0x3c25b3e9,0x3c613282,0x3c4dccfa,0x3bb4fb90,0xbbbaa6db,0x3baf02f7,0xba1f40e5,0xbb72d75e,0xbb3b3374,0xbaacb184,0x3abacba8, +0xb9c2944d,0x3a304568,0x3a559c63,0xba52b3ab,0xba9ae459,0xba4c8b13,0x3a36ae3c,0x3ad0740e,0x3adb826d,0x3b068cee,0x3a89fafa,0x3b163241,0x3a96852c,0x3a897147,0x3b37f18f,0x3b7690ce,0x3b7941d7,0x3b8a9f57,0x3b7f26ae,0x3b91679f,0x3b93c475,0x3b03cbf4,0x3b0b960d,0x3bb09dd6,0x3c7825c9, +0x3b2cd315,0xbab8469d,0x3a07c1d7,0xbbd71049,0xbb60861d,0xbac047f7,0xbb62c1a0,0xbb5eba62,0x3a121922,0xbadbabbc,0xbabe901f,0xbb35b6c7,0xb9a8580d,0x38bc14d7,0x39facee9,0xb9ac0e78,0xba4e9db5,0xba07d5b0,0xb9ddb1bb,0x3a6c5db5,0x3962d816,0x36cdc041,0x3a7ea5c8,0x3ae90bff,0xba33fd35, +0x3a8a94ea,0x3b0be608,0x3b9e18fa,0x3bdf7053,0x3c044bf3,0x3bf5ba34,0x3bf7540b,0x3c0a5448,0x3c02e7db,0x3c0d6acc,0x3c721bc9,0x3b5fac09,0x39df9e80,0x3bca3f02,0xbaf472a3,0x3bfa5b86,0x3a379f81,0x3b4c7927,0x3b35888e,0x3b61182b,0x3b183eba,0x3ac85d78,0x3b010745,0x3a052c6b,0xba5c40f0, +0xba89c114,0xb9f3d56b,0xb946c315,0xba58f111,0xba615721,0xbacc27c0,0xbb368958,0xbb3cf60b,0xbb3c7ef9,0xbb347629,0xbaf10744,0xba45ad33,0x3990379d,0x3acbedb5,0x3b731850,0x3bc02909,0x3c071a29,0x3c15bbaa,0x3c2b4f3b,0x3bc30f1f,0x3b94186b,0x3b7a2d3d,0x3c374c1d,0x3c778c72,0x3c64101f, +0x3c504cf2,0x3c0ee012,0x3b0baa4c,0xba8f2bfe,0x3b051c73,0x3a9eb692,0x3b3824d0,0x3b393fdd,0x3a998583,0x3ad0a820,0x3b1156f0,0x3b02cf6f,0x3b331fd8,0x3a5013ae,0xba8ecf4d,0xbb09e024,0xbb34ee3f,0xbb23a29c,0x37f10215,0x3afa79b1,0x3b1d44d2,0x3abd6baa,0x3abf0921,0x3aa65558,0x3b03dbee, +0x3b2b1e4f,0x3b851b47,0x3bbec402,0x3c08d4ba,0x3c4fed1b,0x3c41f7a4,0x3c4321a1,0x3c730760,0x3c70235d,0x3c683cbd,0x3c6301bb,0x3c3c814a,0x3bbb7627,0x3b0982f1,0x380dcbff,0xb9c1b6a1,0x3a45e855,0x3abdcba6,0x3b1226f8,0x3acd7044,0x3a668345,0x3a22ed71,0xba207152,0xba8f3197,0xbafa4a1b, +0xbb0f9eb1,0xbad629cc,0xbabb992d,0xbb090f05,0xbb297e6f,0xbaf95457,0xba8e1e84,0x3980e189,0x3ae58c19,0x3b00e409,0x3b6506e3,0x3b843eea,0x3b6be61a,0x3b3737a9,0x3b137a60,0x3af4e172,0x3b05a0ca,0x3b37c1ad,0x3b92492b,0x3b957809,0x3bc40d30,0x3bccb171,0x3bdb186c,0x399a9544,0xbab61454, +0xba789402,0xbb1551d3,0xbb72dbb6,0xbb5f09b9,0xbb4dbf41,0xbb3c7b92,0xbb1522b7,0xbb1de1e9,0xbafe20d2,0xbb2e3001,0xbb168625,0xbb17df96,0xbadef773,0xbaf2ad9a,0xbab763ce,0xba85bea3,0xba0b76c5,0x3a0c252f,0x3991d417,0x3ab71351,0x3ad37ef5,0x3b102675,0x3b08dcc7,0x3ae767e0,0x3b05877b, +0x3b04fecb,0x3b229d57,0x3b41f8b8,0x3b68ea22,0x3b8be85d,0x3b29541f,0x3a905e18,0x3a38d32f,0x38ad4c55,0xba75fb55,0xb9aa0f30,0xbab0f028,0xbb25aad9,0xbb7577bf,0xbb815e4a,0xbb8493ea,0xbb938152,0xbb829f8e,0xbb55aa4b,0xbb0c3a63,0xbababaac,0xbadcba98,0xba4d2b5c,0xba922c68,0xba5b330d, +0xba4606ba,0xb8d4cf2b,0x3a8a7524,0x3a6d8928,0x389ba1c4,0x3a86d516,0x3aa2be62,0x3a9a1ad7,0x3aa41bd7,0x3ac394ee,0x3b0422d6,0x3b331e2b,0x3b5c479d,0x3b416e45,0x3b1ead74,0x3b09d6c5,0x3ac2169f,0x3aba8ed6,0x3a24582a,0x3982f2e5,0x3a75e66c,0x3a0ee4df,0x3a2d4f21,0x3a369bd8,0x3ad478a8, +0x3a719976,0x3a4bdc62,0xba0deb11,0xb92b41a1,0x391275fc,0x38650514,0x38a6a1d3,0xb8000890,0xb604e53d,0x3a9c2a4a,0x3ac21c46,0x3aaf9fca,0x3ab53385,0x3ade64fc,0x398df02a,0x398f50b3,0x399c0b54,0x3906ac2f,0x39871495,0x396680b5,0x389f61b2,0xb8c444f5,0xb99e20fb,0xb840d924,0x3a209611, +0x3ac6e34c,0x3b21c565,0x3b000ec1,0x3ac5a2b8,0x3a99f2d9,0x3a90af5d,0xb9a5d87b,0xb9866097,0x3a833fe0,0x39bd18a4,0xbad22453,0x38e6273d,0x394af9e5,0xbab5202a,0xbaa71b6f,0xbab08ce9,0xbab232c8,0xba9de7e8,0xba8ee0a5,0xba8bfa2a,0x3a9f7c51,0x3a7c39cb,0xba757b7d,0x3aa01b8e,0x3aa359ad, +0xb9bef537,0xb88ecb0f,0xb8a7e7c2,0xb8a2dd17,0xb8ca25cc,0xb8c1c35f,0xb7d1e851,0x395e76ab,0x39d0c146,0x3a01e437,0x39e4f5ae,0x394258f8,0x38e12138,0x3729f3cd,0x38810b7d,0xb6a933a5,0xb92761e9,0xb78dd06c,0xbb6c1dc3,0xbb0a7eb6,0xbb2d23e9,0xbb7547cb,0xba999bb3,0x3b338f4b,0xbb5edf3e, +0xbacacd72,0x3b0e2f68,0x3b19614e,0x3b3194a0,0x3b358c2b,0x3b39c4e6,0x3b6464d8,0x3b363562,0xbad7d4b1,0xbb667ea3,0x3b3f478f,0xba9b076f,0xbb5dc2da,0xbb3af04f,0xbb353d9a,0xbb47233e,0xbb442f0a,0xbb4210ab,0xbb3476af,0xbb158f43,0xbb18c0e5,0xbb1b15e7,0xbb230e5c,0xbb33878d,0xbb371c5d, +0xbb474bd5,0xbb4a2ecf,0xbb397a2a,0xbb0b80f7,0xbb169be4,0xbb03994e,0xbb867141,0x3a533d49,0xba7f84a4,0x39116f77,0xbab23b6e,0xbaf9db95,0x38c917a9,0xba881467,0xbac5a5bd,0xb9c5a27b,0xbaebd364,0xbaea0397,0xba58b335,0x3aa0f704,0xbb0e115c,0xbb10d9ef,0xbb22f394,0xbb08e90f,0xbb9b20e2, +0xbb852d2f,0xbb9a2db1,0xbb9f3f98,0xbb8b2ce6,0xbb6cc4ba,0xbb431248,0xbb3eb1d1,0xbb4e641c,0xbb6ca459,0xbb80104e,0xbb8da136,0xbbb157da,0xbbc2ecbc,0xbbb35be1,0xbb4ebc9e,0xbb3da5e8,0xba8fc4e0,0xbb3c3d80,0xba8872d0,0xbaf82e78,0xba35f193,0xba627c37,0xb99c4090,0xb89d3ded,0xba0c2839, +0xbaac7603,0xba519bc0,0xbb06c93e,0x395083e6,0xbb055e4f,0xba5ce935,0xbaee4f16,0xbb81f290,0xbb29fa6f,0xbb6ec74d,0xbb86578e,0xbbc3b70c,0xbbcf4e0a,0xbbdc50b1,0xbbbe360c,0xbb910929,0xbb0942e5,0xbb0d1649,0xbb1fc6f7,0xbb798a89,0xbb8e0a35,0xbbb68bf5,0xbbdf9c27,0xbbf5175a,0xbbbc2f29, +0xbabac427,0xbb0486cc,0xb9cfae4a,0xbb358c45,0x38c1bb56,0x39df7632,0x368392e2,0x3a87a132,0x3a8fe710,0x3a91c463,0x3adeab89,0x3b1524a9,0x3b71058d,0x3aab2ece,0x39413613,0x3a874f3f,0xb90259a9,0xb9db1e1d,0xbb7ca3c9,0xbb6340c0,0xbb7c552b,0xbb8dca19,0xbbefdfbc,0xbbfbc333,0xbc0fdd9a, +0xbbf5a251,0xbbc5dc07,0xbb06c234,0xbb2929b3,0xbb3c4c60,0xbba6735c,0xbba0f119,0xbbf01f94,0xbc22452e,0xbc37d844,0xbc1433e6,0xbb11bb8f,0xbaf2a5d9,0x3acde7b9,0xbacd2a9f,0x396225cf,0x39c333c0,0xbaa02aaa,0x3a170527,0x3b2311f2,0x3b834214,0x3b83b4fb,0x3b912093,0x3bb0c1ee,0x3b151c26, +0x3b041955,0x3b1ec966,0x394b6513,0xba51f69e,0xbb76c78d,0xbb48ef86,0xbb84db5f,0xbbbccf12,0xbc0e3a91,0xbc26ab3e,0xbc3419ea,0xbc0fe089,0xbbbdac85,0xb9bf5f61,0x396e3be8,0xbac8a113,0xbb841938,0xbbbd7601,0xbc02d8c6,0xbc1ce2c5,0xbc3e9aa5,0xbbdbd37a,0x3ab0e936,0x3a0df647,0xbc2e1475, +0xbc2d9c98,0xbba51af7,0xb83958aa,0x3bacd358,0x3ac844cb,0xbb4fbb47,0xbbbb5cad,0xbba5dae2,0xbaac596b,0xba57f836,0x3bb85cef,0x3bb881d1,0xbb42ff14,0x3aba76a8,0x3a4ae8f4,0x3a8c0320,0xb9c8f697,0xbb0c5a23,0xbb4dfc87,0xbae0dbc6,0x380f722d,0x3a7b2908,0xb9e9defc,0xbb4cc7ec,0xbbcce933, +0xbc1b1623,0xbbc42c7a,0x3b61c93d,0xba9216e6,0xbb5ee764,0xbbb2d157,0xbc58e1e7,0xbc880236,0xbc642be9,0xbc602dab,0x3afe65a4,0xba578b56,0xbb853c4f,0xbc0b40cf,0xbc34facd,0xbbb41aa8,0x3a8845ad,0x3b5fd477,0x3b3fb571,0x3a2682e7,0xbb575967,0xbabc3ecb,0x3a2d5e19,0x3ae7d39b,0x3a6164f8, +0xb9ed3437,0xba43d5a2,0xbb1ef56b,0xbb0e528c,0xbb8ea575,0xbbcabcaf,0xbbf4393b,0xbc1ff741,0xbc032d59,0xbbb36975,0xbac5a305,0x3bb00834,0x3b8db68e,0xbae2bf9f,0xbb7f2a79,0xbb6911ae,0x3b440cab,0x3b8e80b7,0x3c0d70c2,0x3c259e5c,0x3b80f02b,0xbbff43c9,0xbab56961,0xbb638cc0,0xbb90889b, +0xbbac5be2,0xbafc3a9e,0x3a280885,0xbaf69ea4,0xb913a59a,0x38d904e1,0xba1fdeb9,0xbac51fd9,0xbab4aeec,0x3a7585d0,0xba3adf0b,0x38d8bdc7,0x3a29ab94,0xba893093,0xba8a5135,0xbb3cb47b,0xbab77745,0xba62d72d,0xba2a1ebf,0xbb609b4a,0xbb889e69,0xbbcddf76,0xbb69bccf,0xbab255ff,0xba1c7e28, +0xba12379e,0xbb6d9a90,0xbbaf2aea,0xbc892f38,0xbc9c4aa9,0xbc3bc15a,0xbc39f00a,0xbc23e1c7,0xbb9469dc,0xbafe74b5,0xbb733d28,0x3a0a60eb,0xbaca9bc3,0xbad68191,0xbb740bb6,0xbaad2613,0xb9c567d8,0x38ca0ee6,0xb9fa2f71,0xba7823c8,0xba3c9a29,0xba292e27,0xba80969c,0xba9d4ea6,0xba7e0848, +0xba9e6486,0xbb1adecb,0xbad05bbf,0xbac27f39,0xba043abf,0xbb00ba5d,0xbb39c582,0xbb91734e,0xbbb72562,0xbb68b3bf,0x3a59e86b,0x3a0f61c2,0xbb28105a,0xbbe02622,0xbca3db87,0xbcc97141,0xbca043db,0xbc609ac6,0xbb982f1a,0x3967cabb,0x39ead7ae,0x3b35a36d,0x3b3a1916,0x3a5d342d,0x3a4405c0, +0x3ab6037a,0x39b6d307,0xba42536a,0xbadf3769,0xba15dfa4,0xb971c8ab,0xba8aaf32,0xbaa88ba7,0xbafbb7c8,0xbb5d1ab0,0xbb83d4fb,0xbb8152fb,0xbb59b017,0xbba24739,0xbbcf6787,0xbbdff236,0xbb9e429b,0xbaada82e,0x3b1cebcc,0x3b5cf84d,0x3b4efcea,0x3b383bf8,0xba4152de,0xbb3aab1b,0xba17e673, +0xbbca1f47,0xbbf52c58,0xbc73adda,0xbc0293f0,0xbc8360df,0xbc1d878c,0x39bbd2c9,0xbb5979aa,0x39dfdb5c,0x3ab26dc9,0x3a8d7d59,0xb939695e,0x39b7d3dc,0x3aad437d,0x3a882d16,0x3b0d749a,0x3a2b00f8,0xba916ef2,0xbb25bed2,0xbb5df85d,0xbb3fbe72,0xbb2bc221,0xbacd88c6,0xb8146aca,0x37345343, +0x3ac574b3,0x3a8b5757,0x3a516c9f,0xba3751ab,0xbb5f2f75,0xbb1e9503,0xbac9ef44,0xba5ec3e5,0x3a938d3c,0x3a21443c,0xba530835,0xbb68bd9c,0xbbcd880d,0xbc0ac8c4,0xbc3cd3ef,0xbb3a2975,0xbb998ffe,0xbaa9429c,0xba6ebf91,0xb8d8e369,0x3ac9e19d,0x3b1f5656,0x3ac339e4,0x3aa032bc,0xb93e462b, +0xb926fd04,0xbaec9c70,0xbb10a4b7,0xbb2ad724,0xbb1fe222,0xbb37b740,0xbb5a98a8,0xbb5f0854,0xbb18083e,0xba9d4cd7,0xba850081,0xba72257b,0xba843c51,0xba92eb54,0xba529ecc,0xba8e5f91,0xba6861e8,0xb8995623,0x3ab77042,0x3a0f6ee5,0xba50f6e7,0xbb596fbf,0xbad05c07,0xba379c64,0xba792008, +0xbabd78fe,0xbb9b63a3,0xbb45ef74,0xbba7b029,0xbb9c2500,0xbbc78a09,0xbb9f2b9e,0xbb8e5b6d,0xbb5162f0,0xbb396def,0xbb0b95df,0xbaf7d219,0xbb008ba5,0xbb128954,0xbb1d6e5b,0xbb1f30e8,0xbb1396d4,0xbb1e6397,0xbb27630a,0xbb1524c9,0xbab94c61,0xbaa22879,0xb9954ecb,0x3900e070,0x382f0a05, +0xb9bdf245,0xba185afd,0xba80eeba,0xbaa0fe99,0xba52d9a0,0xba661dc8,0xbaa7fd30,0xbb30041f,0xbb209fb2,0xbb270cac,0xbb24e814,0xbb3e171b,0xbb4e70b1,0xbb84c18a,0xbb57dbd1,0xbb9dddc4,0xbbb4231b,0xbba89259,0xbbab8cc6,0xbbb3b77f,0xbba76089,0xbb8e949e,0xbb915a9a,0xbb80ad16,0xbb24a041, +0xbb4455b5,0xbac597d8,0xbb095e39,0xbae48eef,0xbab90fd1,0xba6a574b,0xbb021ada,0xba2e12ae,0xb878ec63,0x3a802f5c,0x3a7b34a9,0x3aa8b709,0x3ad1059f,0x3a4bebfe,0x39181240,0xba8f77b2,0xbaf3076c,0xbb2c9fa0,0xbb4cf287,0xbb4606b4,0xbb4be6b4,0xbb50d8eb,0xbb4ffb60,0xbacfabea,0xbae40cba, +0xb928414c,0xbaab36ae,0xbaa40ea6,0xbad40b00,0xbb267824,0xbac87768,0xbb0ec4be,0xbb059a90,0xbae5ae97,0xbb064405,0xbb2e3088,0xbb13318f,0xbb387510,0xbb124143,0xba4b5846,0xbad4cb12,0x38344aeb,0x39d3cae5,0x3a33e5ae,0x390ca86c,0x372a07c0,0x378a5937,0xb8975dfc,0xb93b7db5,0xb995cbb0, +0xb9f2e7b4,0xba180b43,0xba5913d6,0xba96a986,0xbaffa09c,0xbb022a7c,0xbad2cb82,0xbadcaa0f,0xbafa690a,0xbb1e34ac,0xbb346f38,0xbb4eccee,0xbaec9c29,0x3960dda5,0xbb7e5848,0xbb3ec80b,0xba2b5e9e,0xb9381504,0xb88100e3,0x390e0316,0x3a09955b,0x3a970d27,0x3aae664b,0xbb0f0f3a,0xbb4aaaf4, +0x3a8813ca,0xbad66791,0xbb304964,0xbaec86a5,0xbafbebb9,0xbae94a01,0xbad74b00,0xbacb7ad7,0xbabeab17,0xbab2e1a7,0xbac83961,0xbaee35da,0xbb077d36,0xbb19dca8,0xbb1d8b41,0xbb27e4c6,0xbb23e7cf,0xbb208214,0xbb25773b,0xbb25b9b7,0xbb68530d,0x3b6dafc6,0x3b356b34,0x3b7ef563,0x3b4b3067, +0xba372c84,0xbb8624fe,0x3b3db2e1,0xb858a956,0xbb764a0a,0xbb8f68da,0xbb9d1e3b,0xbb8b3797,0xbb933ce6,0xbbb30a25,0xbb942a7e,0xb941dcba,0x3b20758e,0xbbaca4f4,0xbab86263,0x3ad9ca05,0x3b4a49fc,0x3b21c67b,0x3b38fd93,0x3b381256,0x3b487350,0x3b5035fa,0x3b5c27d5,0x3b53ac4a,0x3b52cfba, +0x3b4768ad,0x3b4e6164,0x3b46dd95,0x3b43d90c,0x3b4097d1,0x3b3f7bf9,0x3b3083ca,0x3b406acc,0x3b5e2937,0x3b9302e8,0xbb29cc1e,0x3aff5aaa,0xb9e51e7f,0x3acf5e39,0x3ac5ac57,0x39df3b57,0x3a8c246d,0x3a64b289,0x39a3610b,0x3a8dd196,0x3aefd957,0x3911bece,0xbb17556a,0x3aeffa2d,0xba827681, +0x39a51a48,0xbaaf2f10,0x3b493098,0x3b291eee,0x3b3e2b9e,0x3b5948f1,0x3b7c92c4,0x3b94d929,0x3bc02c95,0x3baac119,0x3ba5edd9,0x3b9730e2,0x3bb12734,0x3ba298e1,0x3b85853b,0x3b73948b,0x3b575763,0x3b27983a,0x3b58a34b,0x3b9477a7,0x3b89d97c,0x3ad8636f,0x3b8145e6,0x3aad79cd,0x3ae3ce7e, +0x3a29f232,0x3b550691,0x3a203660,0x3af11661,0x3ab7dd3b,0x3b662549,0x39e1345f,0x3b06c561,0x3a902057,0x3ae7551d,0xb9351f98,0xba9d8f1b,0xba6eac3f,0x3a202756,0x3b3192d1,0x3b32a4cc,0x3b7ee600,0x3b9928d7,0x3bb80ebb,0x3bf94bd5,0x3bdc9fb9,0x3bd045b7,0x3bb866a5,0x3bcaee49,0x3bc247ab, +0x3b984699,0x3b8ae024,0x3b74eacc,0x3b305b75,0x3b85d197,0x3b90a43c,0x3b688e4b,0x3a78f5f0,0x3b30df29,0x3b01b95f,0x3af97834,0x3a970ad0,0x3b6f3528,0x3accc4de,0x3b23c5b1,0x3b3c3282,0x3af148e3,0x3b065903,0x3b19bb1a,0x3ab4acc6,0x3ad9f9d7,0xbaaf6fb4,0xba6ef28d,0xbae75ead,0xba540040, +0x3b03a697,0x3ad987af,0x3b6d0a0e,0x3bbb753e,0x3c054398,0x3c3797d5,0x3c116901,0x3c0947fc,0x3be6d765,0x3c17d354,0x3c0a6296,0x3bb2f75e,0x3b984e24,0x3b4523ed,0x3ad90519,0x3b68af2b,0x3bd5c02e,0x3ba3d3f3,0x3b45dbab,0x3b68c0f6,0x3b04e24d,0x3afe424e,0x3b35712b,0x3b84a5b2,0x3b78eb9c, +0x3b98604c,0x3ba6605c,0x3b0b3dc0,0x3b192f9f,0x3b2f7ff5,0x3adb4865,0x3a7ca552,0xbb1ed998,0xba825fc2,0xbb802593,0xba71d200,0x3a6fac63,0x3b134feb,0x3b91d3a9,0x3bc6e1af,0x3c0d4d77,0x3c463cac,0x3c38b776,0x3c1c4633,0x3bf2b70c,0x3c16e10d,0x3c0a3ae0,0x3bb7e41f,0x3bab09aa,0x3b9a16bf, +0x3b530bde,0x3bb6d567,0xba63b9a9,0x3a8dc660,0xbaaaaec2,0x39462717,0x3bbcf740,0x3afd4678,0xb9aa41a4,0xbbabd404,0xbb8dae76,0xba93f64f,0xba2194a8,0x3bced18d,0x3bbcf323,0xbb2c6cf7,0x3ad3bd6c,0x3ad56209,0x3b31b20c,0x3b378465,0x3b0afccd,0x3b9253dd,0x3c0ffc38,0x3be7c502,0x3bb1e4eb, +0x3b18ab1d,0x39c12145,0xbba422f1,0xbb26336c,0x3b30815d,0x3c704b4f,0x3c2ecc18,0x3c43063e,0x3c6c27e4,0x3b6077c6,0xba80f3aa,0xbb083a64,0xba2cd68a,0x3bfe89fd,0x3bc43edc,0xbb08c5be,0xbb2f2f44,0xbc1f5cf4,0xbb631ceb,0xba23356b,0x3b61c332,0x3b551499,0x3ab1eb87,0xbb36275e,0xbaf74c6e, +0x3950b9ef,0x3b0387f7,0x3ade11e5,0x3a9163c3,0x3a04852a,0xba801cc8,0xbb6297bd,0xbb22809d,0x3b5aed39,0x3b7ea340,0x3bd9b374,0x3b0aab20,0x3ad86b7b,0x3aea135a,0x3beb0fbe,0x3bb9afa7,0x3a9a169f,0x3940c2b0,0x3a34c00b,0x3ba617d8,0x3c2363d9,0x3c48415e,0x3c04d355,0x3bf8fef5,0xbbcaceca, +0xbaee9b95,0x3926ad57,0xbafbfa61,0xbb5a2b62,0xba4d436a,0x3a9175a1,0xbac64865,0xb7c00d8e,0x3a1f2fa5,0xb9bf6274,0xba7600a9,0xba63c207,0x39d38bc8,0x3a3450f2,0x3a447689,0x3ac81a17,0x3a4834c9,0x3ab213be,0x3ae4cada,0x3b490b39,0x3b825513,0x3b9cbf10,0x3bc113c1,0x3be3a62d,0x3bd11e58, +0x3c078480,0x3c0194e2,0x3b96606b,0x3c0812ac,0x3c2da7f0,0x3c1f7c63,0x3ba1b3d2,0x3aedd14a,0x3b1f1be6,0xbbb86bcb,0xbb9f7f8a,0xbbb05692,0xbb8fa83f,0xbac4292a,0x39972372,0xb8b20134,0xba04f8ea,0xbb61a227,0xbaa6c41d,0xba152e33,0x3a19b55a,0x395533b8,0xb9a6e5b3,0xba288ed3,0xb9b10a27, +0x39fd05d3,0x39e1efc4,0xb830f483,0xb9b4082e,0x39ea5c98,0x3ad1cd9b,0x3b264687,0x3b482620,0x3be4782a,0x3c144ac9,0x3c224dee,0x3c1dcf57,0x3c17063c,0x3c21a656,0x3c3f2bfa,0x3c4758c7,0x3c302079,0x3be45663,0x3bab2967,0x3c2510ff,0xba7a2741,0x3c40a4be,0x3b9a2a85,0x3b81e61f,0x3b5941f7, +0x3b8b5cc4,0x3b1af867,0x3a8f0a21,0x3afc5030,0x3a858088,0xb95c86c1,0xba9fe491,0xb84abf47,0x393881b8,0xb98da650,0xb997ffb0,0xba9f5d08,0xbb4a5b18,0xbb2bdc5d,0xbb5ee23d,0xbae01db5,0xb9c92f61,0x3a61ae7b,0x3b06f945,0x3b3ce06f,0x3b7f96b3,0x3bbe68d3,0x3be46492,0x3bec189b,0x3be7c4da, +0x3afb9130,0x3ae547b4,0x3bb18d6f,0x3c479210,0x3c887dd7,0x3c92ecb0,0x3c6aa17f,0x3ba2f0d3,0xbb839606,0xbc06d934,0x3a468e94,0xba5d2aa2,0x3aeb6b16,0x3b0e3eb7,0x3ac95829,0x3ac35529,0x3b219bac,0x3addf87a,0x3b1e9384,0x3a5c66a4,0x385f1c76,0xbb0c7a9c,0xbb4107d6,0xbb0d62f3,0xbabe14ff, +0xb792dd50,0x3a40b391,0x3abc4235,0x3a670911,0x3aa85f4d,0x3b0f4e2c,0x3b697c1f,0x3bbe7703,0x3c0019f3,0x3c240619,0x3c6798d8,0x3c5f2df8,0x3c5e9c6b,0x3c79fd44,0x3c841d16,0x3c5ec974,0x3c2bd04d,0x3bce43a4,0x3c12498c,0x3b987b05,0x39b06470,0x3a911816,0x3b45cd67,0x3b4d9ccc,0x3b8b1937, +0x3b40f4a1,0x3b459ced,0x3ae4d8fd,0x3a7583d7,0xb98c35b7,0xbaa18de5,0xbafcc264,0xbadb3aab,0xbad58961,0xbae1444a,0xbb25a8b0,0xbb35509e,0xbab0f727,0x3a137748,0x3b114457,0x3b2876cd,0x3b6f2a41,0x3b7fae2e,0x3b5d8fcc,0x3b31cdbe,0x3b1ba0ca,0x3adc86b6,0x3b18ced4,0x3b806799,0x3bf85509, +0x3bf74575,0x3c12ab7d,0x3c1e6e1a,0x3c1f63be,0x3b46bc92,0xbb60f66b,0xbac237b8,0xbb055a11,0xbb4b8799,0xbaa93991,0xbb13a889,0xbad58d2a,0xbabae5bd,0xba9b03e0,0xbab88175,0xbafd6bbe,0xbb1633bb,0xbb15a9ce,0xbae8e6bc,0xbb02eb92,0xbb0311e5,0xbaeffc08,0xba9d0d7b,0xbab0fa97,0x3a2c3982, +0x3aa6e230,0x3aedc794,0x3b0d0436,0x3b06f4b3,0x3ada05cb,0x3af39594,0x3aebba62,0x3b064056,0x3b4c49da,0x3b8966ee,0x3bc3e8ae,0x3b99807c,0x3b668a13,0x3b6764fd,0x3aa364b9,0xb91bf057,0x399244a4,0xbb5cf504,0xbb4feb00,0xbbb14d09,0xbbb6f9e0,0xbb9ad964,0xbb7f8c2b,0xbb86c9c6,0xbb4a9b37, +0xbb55cb4e,0xba69db8a,0xbb08a83a,0xba6346c2,0xbb0684a6,0xba812064,0xba83c10d,0xba105989,0xba6e9bc5,0x3a0bc778,0x39ed59a1,0x3a5caa9e,0x3abe6487,0x3a925ee1,0x3a93c064,0x3aa57631,0x3b0a6a57,0x3b41befc,0x3b6ba974,0x3b6bf1e5,0x3b564b53,0x3b4fc552,0x3b218cf9,0x3b0ecc7d,0x3adcac5a, +0x3a712702,0x3a6306db,0x3a044163,0xbb0072a3,0x3a3294c7,0x3ab1a5ed,0x39424762,0x39f92fe3,0xbb180324,0xba2a26a8,0xbabb2cf8,0xbacfbc51,0xbaf5da53,0xba8964fb,0xbabb8d12,0xb8f8a47b,0x38385047,0xba2eeb83,0x3a7eb7bd,0xb5e269f2,0x3a15de23,0x395bdca5,0x3a0f6fc8,0x39ea8227,0x3a4e3db8, +0x3a837911,0x3a85a558,0x3aa1c1bc,0x3ab5d510,0x3aeca605,0x3b300c7d,0x3b6c0a9b,0x3b9ba021,0x3b77098a,0x3b403c12,0x3b07b564,0x3ad2321a,0x39124d60,0x39ce1b8d,0xb98603dd,0xbb27a8d4,0xbb90a37a,0xba7d010a,0xbb0c4ab8,0xbb8f0264,0xbb950fa6,0xbb8e35d0,0xbb84c32b,0xbb86600e,0xbb8fe449, +0xbb90b5c9,0xba81e13f,0x3a05a6c9,0xbb619398,0xba8f776d,0x39e5f015,0x39bde2cb,0x39efad07,0x39f9b217,0x39fceab2,0x39f008b0,0x39dff483,0x39f8020e,0x3a3ad071,0x3a6acbfb,0x3a897690,0x3a859c7d,0x3a595c34,0x3a5f9a1d,0x3a219f82,0x3a22619f,0x3a05b265,0x39a8ba05,0x38f82846,0xbb518561, +0xbb0b5941,0xbb7c111d,0xbab3e304,0x3b2a5ebb,0x3b960864,0xbae0c3cf,0x3acb2c98,0x3ba51cfa,0x3ba52355,0x3ba8c4aa,0x3b93dcf0,0x3b9d0f56,0x3bbc58d5,0x3b97fc0c,0x3aed4cfd,0xba8af723,0x3b96b78f,0x3b136051,0xba804efc,0xbb7cd4a0,0xbb3e064e,0xbb4c3cf3,0xbb4bde1f,0xbb47a254,0xbb39e7fd, +0xbb19067e,0xbb229362,0xbb262cd2,0xbb314360,0xbb38daf6,0xbb37788d,0xbb46036d,0xbb409076,0xbb31dcf9,0xbb0ce16b,0xbb17fc20,0xbb20aa52,0xbb724834,0x3baddaaf,0xb989775f,0x3b2b8c23,0xb91c7a4e,0xb9003b87,0x3ab902d2,0xbaaa1cd4,0x38ecccb0,0x3a38c51c,0x39e83ee2,0xba463ac6,0x3a4ee9b0, +0x3b861542,0xb9f5a4ea,0x39b354ff,0xba8c5067,0x3a85cf39,0xbb80a453,0xbb8f83db,0xbb90efd1,0xbb99b62c,0xbb7b6b37,0xbb4cdce9,0xbb144edd,0xbb3e2cb1,0xbb59919a,0xbb7c1d6a,0xbb7104e6,0xbb7cfca9,0xbba63e7a,0xbba0e829,0xbb8f5720,0xbb2b2989,0xbb17b438,0xbade0f5b,0xbb1bfb6a,0x3b0670cf, +0xbaab153b,0x3aed59a4,0x389943bf,0x3ab09eb5,0xb96fc374,0x3a518584,0xbb217908,0x3a66279d,0xbb328552,0x3ab2497b,0xba5bc285,0x3a756e40,0xb9e6acda,0xbafdf452,0xba6241ed,0xbac000ed,0xbb73ecc2,0xbbd851aa,0xbbb68f30,0xbbd2379d,0xbba2bf53,0xbb7bbc43,0xba9046fa,0xbb0b69fb,0xbb298b0a, +0xbb8614f4,0xbb7c7eae,0xbb93cad1,0xbbbb5172,0xbbad8f77,0xbb7df16d,0xba442e6d,0xbaa40fd6,0xbaec591c,0xbb2a2013,0x3b82685d,0x3b0a430e,0x3b009b65,0x3ac4bd17,0x3a8ae4f4,0x3ab11a42,0x39fca9b2,0x3a7f4f12,0x3b01c5ff,0x3a2c4f69,0x3ac66c43,0x389413d0,0x3aee810c,0x3a33ba8b,0xbb1c91bd, +0xbb1345ec,0xbae1aad7,0xbb4e026e,0xbc036835,0xbbdfae1b,0xbc030b80,0xbbbe5f8b,0xbb87b6d9,0x39e088bd,0xbb1517a0,0xbb458e87,0xbbb5c3e6,0xbb85494f,0xbbb21562,0xbc0dec45,0xbbf6039e,0xbbb9a02c,0xba95713a,0xb99add6a,0x3a9ed91d,0xbada472c,0x3b49e029,0x3a6f8ff4,0x3a0f2675,0x39e4eb93, +0x3ad80a46,0x3b733027,0x3b5a3b28,0x3b6dcc03,0x3b5ecc0d,0x3b0754f4,0x3aee1675,0x3b045c1c,0x3a2ba06c,0x394afbfe,0xbb1a504a,0xbb8ae316,0xbaa20715,0xbbc2f5a2,0xbc181ce7,0xbc0f312c,0xbc1ff9fd,0xbbe23cb3,0xbb813837,0x3ac9d1c8,0x391b57c4,0xbb0d92a5,0xbba27b68,0xbb9e3b76,0xbbb58c07, +0xbbe6f733,0xbbd6d09e,0xbb368621,0x3b0bed82,0x3aec5497,0xbc4a5563,0xbc461b9c,0xbb05c181,0x3ac28e23,0x3ba19154,0x3b72d630,0xbaa08625,0xbbab527c,0xbbb6347e,0xbaf168ad,0xba1a5e0f,0x3bbe783f,0x3bac57af,0xbb1a0b4f,0x3a8b0ce5,0xb9a21632,0x3b7a5fea,0x39f88f2b,0x3aad427d,0xb9ffe56e, +0xba8d9eb2,0xb9b1124c,0xbb09f255,0xbb1769c1,0xbbb7ddc0,0xbc1c5976,0xbc3faf6b,0xbbf2ad13,0x3ae227e0,0xbb287a38,0xbb8c2e62,0xbb90a6e0,0xbc488786,0xbc798c5a,0xbc52681b,0xbc6eb0ab,0x3a9d6378,0x3b2d1a0f,0x3b4eeb4d,0xbc090287,0xbbff3f44,0xbbf69baa,0xbaebdc99,0x3b1d19a1,0x3b333768, +0x3abb31be,0xbb4853b9,0xbb1b10c8,0xb95c3173,0x3aa126d4,0x39d1c854,0xba9c3773,0xba83d2b4,0xbafd2d68,0xb836f0a2,0xbb2ec6b1,0xbbbeebd5,0xbbbeb31f,0xbc0fd6df,0xbbebbe7b,0xbb89a6cc,0x3acd7c1c,0x3be304d6,0x3b8f74ad,0xbb0d69fb,0xbb7ce344,0xbb0d909f,0x3ba445ff,0x3bf06e8d,0x3c16609c, +0x3bae205b,0x3b75ab9b,0xbc23761e,0xbc11dce6,0xbb57d0c3,0xbafb4c5f,0xbba6fb22,0xbaab3e19,0x3a32b994,0xbb2c7c37,0xb9fc9dbe,0xb9bc0d8e,0xb9b2ee2e,0xbac35365,0xbabc35b5,0x39678ca0,0xba859e56,0xb80ffae4,0x3a820d2b,0xb997efb4,0xb96f046d,0xbb6f6bce,0xbae9cc4a,0xb9bc0613,0xba7cefcb, +0xbb6c1edb,0xbba39432,0xbbc21cbd,0xbb93db57,0xbb2a3607,0xbb68a947,0xb9b68ae2,0xbb3a6a14,0xbc12a198,0xbc31efab,0xbc469470,0xbc14510c,0xbc2214ed,0xbc245467,0xbc0889f5,0xba4dd8ec,0xbaebfbc4,0x3a1dcebf,0x3a314242,0xb99b4973,0xbb87e4d5,0xbb0c9a6f,0xba976683,0x37cebfc5,0xb916e54b, +0xb9edf77f,0xba8ecaae,0xba4bacd0,0xba4bccc0,0xba0e51c1,0xbac3b4b6,0xba32f674,0xbaf467aa,0xbb2d9d2b,0xba9440b9,0xba62cae3,0xbb0157f0,0xbb3d98ae,0xbb864b78,0xbbaf431f,0xbb5402e8,0xba0e4a20,0x3acefb69,0xbb213d6b,0xbc48077c,0xbc7dbcc9,0xbc8ccf40,0xbc444033,0xbc2c65ca,0x3af1ab61, +0x3bf22998,0x3b5f8dd7,0x3b4bde5a,0x3b94c305,0x3948ebc9,0x398a0a32,0x3b132639,0x3a0e9472,0xb93979cd,0xba9afe5d,0xba1cacae,0x38a3ad93,0xba559394,0xba1930d8,0xba9c6587,0xbb4e7735,0xbb77fec9,0xbb483aab,0xbb8d4e48,0xbba78199,0xbbc2218e,0xbbcc318b,0xbb4a1b10,0x386b2cf0,0x3b62f04f, +0x3b89d0c2,0x3b7c8791,0x3b7b273d,0xba95dccc,0xbb21ac1e,0xba8c24c9,0xbb597cb9,0xbb67321d,0xbc1b81e6,0xbaaad473,0xbc8e4dc8,0xbc055700,0x3aa92631,0xbb1765af,0x39950bef,0x3adb5f61,0x3ad215bb,0x398e0fcf,0x3ab155c2,0x3ad8e1c7,0x3a669536,0x3ac54660,0x3a104884,0xb9336ece,0xbb14f6a9, +0xbb67bcd2,0xbb57c41e,0xbb2f725e,0xbabef2f6,0xb8e2990d,0xba37c2e6,0x3ac76f15,0x3a1bf1ca,0x3a995123,0x3a6e504d,0x382e988f,0x3ac55b2d,0x3b0c7cd8,0x3b52637f,0x3b5d533b,0x3afd4724,0xba58f8f6,0xba80a023,0xbb843343,0xbc1d611a,0xbc444d6b,0x3a81f174,0x39e3e50b,0x3b6bd2e4,0x3b3d08f8, +0x3b836142,0x3b8e6dfe,0x3b893bb1,0x3b68616e,0x3b2ed47b,0x3b00a17f,0x39a56762,0xba25213b,0xbafe8dff,0xbb246de4,0xbb175251,0xbb14286c,0xbb1e8c95,0xbb4ef42f,0xbb07c356,0xbb23424c,0xbb06ac4a,0xbadb09a8,0xbad0f146,0xba41fd90,0xb969ff63,0xba0de0a3,0xba3d152f,0xb9cb1e0a,0x39cfd44d, +0xb95b4ce9,0xba92c6ee,0xbb47e87f,0xbafb4086,0xb988b047,0x3a600d8a,0x3aea1332,0xbb969284,0xba6c5ae0,0xbb196545,0xbb07efbf,0xbb455ceb,0xbb70f792,0xbb118535,0xbaff2584,0xbab64b3e,0xbac34eb5,0xba8f5ddd,0xbaec4ac3,0xbae666da,0xbb390b60,0xbb28dc72,0xbb1952e9,0xbae9ab84,0xbb0f26f7, +0xbb25a28d,0xbaaacf28,0xbb246588,0xba94eb58,0xba4fac75,0xba2948c0,0xba723ab6,0xbaa046ba,0xbadd3e4f,0xbb03f614,0xbaf049ee,0xbaf47a56,0xbb10b8ba,0xbb50f2e4,0xbb0352b5,0xbab7c03a,0xbabd0189,0xbafdef58,0xbb622669,0xbb924597,0xbb0a49b6,0xbb91288e,0xbb8ae100,0xbb70409e,0xbb85fa7e, +0xbba0558a,0xbb8eba24,0xbb883e6f,0xbb4d64fa,0xbb87bdee,0xbb22bfe0,0xbb4d14c3,0xba9c7b6e,0xbb1a65b0,0xbb0dc99f,0xbafcfd46,0xb9ddad4c,0xbb2f33a1,0xbb0df054,0xba81234a,0xb990126d,0xb8d53751,0x3903c25a,0x3a27183c,0xb91a8cee,0xba178d4b,0xbabc019d,0xbaf2b51a,0xbb18421e,0xbb355a85, +0xbb3bdd86,0xbb4412a9,0xbb3e76ce,0xbb39eadb,0xbb09e2a5,0xbb232093,0x3a49f359,0xbaeec1a8,0xbaa8239a,0xbaf7ad8e,0xbb497ac8,0xbae552a1,0xbb3d85d9,0xbadbe49f,0xbaada24c,0xba98f011,0xbb14b7e3,0xbace3aba,0xbb03ab31,0xbac04a09,0x38a567e7,0xbae95f94,0x3a23ac3b,0xbaa1330c,0xba02a671, +0xba77a349,0xba612e4b,0xba2c40ba,0xba06d11b,0xb9d1c7f4,0xba419d45,0xba6b187b,0xba92da14,0xbab2708f,0xbad2c5cc,0xbb0438bb,0xbb0bc56e,0xbae454eb,0xbb0b14b0,0xbb2777b5,0xbb46af5c,0xbb6bbebf,0xbb1b51bb,0xb9b6d5e9,0x3a467e65,0xbb4dd118,0xbab1a6c2,0x3a080e7e,0x3a90fc03,0x3a694005, +0x3a4fbec4,0x3aa569fc,0x3b07226b,0x3b144026,0xba416ff6,0xbb31df09,0x3ac1de9c,0xb9912877,0xbb0c4525,0xbb3d00e0,0xbb2d78bf,0xbb26026b,0xbb1d4226,0xbb19649c,0xbb1349b7,0xbb0a0bbe,0xbb12429b,0xbb1dc720,0xbb2836c8,0xbb3400f5,0xbb35ab07,0xbb3eb61a,0xbb443b6c,0xbb422b5a,0xbb47cb56, +0xbb47d99d,0xbb87e38a,0x3b00f661,0x3b0081ba,0x3b64727e,0xb65e25b7,0xbb5ea3db,0xbb6f78eb,0x39986ba7,0xbb2b7e6d,0xbb8fde70,0xbb9c7dfe,0xbba03369,0xbb88292a,0xbb89d548,0xbba25845,0xbb88adc2,0xbb36b8b0,0xb9c378f6,0xbb8ba3a5,0xbb68c3ff,0xba8435cc,0x3b292739,0x3acd380d,0x3aea1a92, +0x3af20728,0x3b0d1d54,0x3b172444,0x3b23db6e,0x3b151922,0x3b0ebb08,0x3b003576,0x3b041af0,0x3afe4866,0x3af0807d,0x3ae11b4b,0x3ae2bbf9,0x3aecf980,0x3b03ae89,0x3b337a46,0x3b0e3ce2,0xbba48c2d,0x3a5923b2,0xbac80508,0xb88a00a0,0xba52b654,0xba366acf,0x38fae24d,0xbacdfb73,0xbad7d415, +0xbaa241e9,0x3a104d51,0xbaa659cd,0xbb4549c2,0x39d47fa7,0xbb0ed2ad,0xba6f4c96,0xbb69cee2,0x3a434095,0x3ac64e20,0x3ab02a25,0x3af68dd0,0x3b23f45e,0x3b4e2b3e,0x3b8ad433,0x3b5e16e1,0x3b4ca8e1,0x3b33f934,0x3b63020c,0x3b467532,0x3af80844,0x3aa9b945,0x3aa54a8f,0x3ad97e0d,0x3b0b2d68, +0x3b8e7eeb,0x3b283b4b,0xbaa4879c,0x3b016409,0xb902de5a,0xb8d69e51,0xbad40968,0x3b0cd9e6,0xbacb5fcc,0x3a2c0b2b,0xbb1b8d3a,0x3b1bcc2d,0xb9a501a5,0xb7c57d07,0x382404f5,0x3a64cda3,0xba646a1b,0xbb0b9361,0xbb3c85e7,0xba6036f1,0x3ac32919,0x3a4aa3bc,0x3b0a9f35,0x3b526cc7,0x3b911d33, +0x3bc946cd,0x3b9a4039,0x3b86f7ef,0x3b4889c3,0x3b7075c1,0x3b52e907,0x3ae9504d,0x3a8052ea,0x3a85eac9,0x3b017adb,0x3b3cccfd,0x3b93ecd8,0x3ab17179,0xbb2051d7,0x3a455f8b,0x3ad8d4ea,0x3a54eca3,0x38898cb3,0x3b20148c,0x3898dd7b,0x3a6501df,0x3a331d01,0x3ae1205c,0x3aab48e3,0x3b0165ed, +0x3a8b8cfe,0x3b030bbe,0xba648be5,0xbacf73fb,0xbb6ef430,0xbb3ad4fd,0x3a3a434d,0xb992eeb6,0x3aa71754,0x3b77bca9,0x3bbf04d9,0x3c0b311b,0x3bb830b3,0x3ba4eb21,0x3b744cf9,0x3bbfd3d3,0x3b96f779,0x3aab0052,0xb93fe4e6,0xb98d4dd1,0x3ae4da01,0x3b23779e,0x3be8370e,0x3b8a3cce,0x395d2faa, +0x3b0808bf,0x3b073c4c,0x3a146ceb,0x3ab7300d,0x3b6e83e5,0x3b3d8010,0x3b55599e,0x3b6799f2,0x3b09708c,0x3b345cf4,0x3b077c06,0x3b1f75d3,0x3ac4de7d,0xbb012aeb,0x39a301f1,0xbbc6471d,0xbb21d3ef,0xb9f86d14,0xba0b244c,0x3ad766b7,0x3b86eeac,0x3be470ed,0x3c2d35ca,0x3c0ace41,0x3bc994d9, +0x3b823048,0x3bad505f,0x3b84436e,0x3abdd0b2,0xb9445313,0x3a2c200b,0x3b503128,0x3b9744a7,0xbb894314,0xbb2e4856,0xbbea299a,0xbb7f7478,0x3b50b937,0x3af88f30,0x39eaf2c1,0xbbafec70,0xbb979ebb,0xbabb18d0,0xb99bcb50,0x3bb58061,0x3ba3cec1,0xbade7b6f,0x3a3596db,0x3a5cd259,0x3b2c9b63, +0x3b7d6bbf,0x3ac9d45e,0x3b8b3c8e,0x3c181b72,0x3bf28d57,0x3bed2864,0x3ac4baa0,0xb9d7c37f,0xbb822e44,0xba3b9a9a,0x3ba68b67,0x3c6fc95e,0x3c22f35c,0x3c175156,0x3c0bfc15,0xba3476e3,0xbb612890,0xbb6884ce,0xbb532f2b,0x3c3b3234,0x3bed4207,0xbb582b1b,0xbaf8d75e,0xbc2a25c4,0xbbc65398, +0xbb521274,0x3aae501b,0x3b410f4d,0x3ac812e2,0xbb26a3d1,0xbb193356,0xba18f451,0x3ae76c10,0x3a30189d,0x3a223aaa,0xba718a4e,0xba1190c5,0xbb4035f3,0xbb5c5a7c,0x3af1dde1,0x39fac1a5,0x3b21f59d,0x386e71ea,0x3a361783,0x3b5b644b,0x3bca8443,0x3b86867b,0xb9921f0b,0xba8a2a5e,0xb9ef359e, +0x3b918f10,0x3c007b3f,0x3c13a623,0x3b731d14,0x3bd37a15,0xbbeb1068,0xbc279032,0xba51667f,0xb9761657,0xbba8fbfe,0xba0d129e,0x3a309a69,0xbb174ea6,0xba13ce90,0x38c8fea7,0xb8a6b278,0xba3ed221,0xba79952e,0x38438da9,0xba308609,0xb9b5edb6,0x3a410c4a,0x38924d79,0xb986e572,0x39d4d766, +0x3b343a3d,0x3b2f66b9,0x3b455684,0x3b66e350,0x3b8da09f,0x3b77963d,0x3bc6f2b2,0x3bc514ec,0x3b58b76b,0x3c1e294a,0x3c1a1454,0xbab313fd,0xb9e808f6,0xbb2a14d3,0xbae94cce,0xbbcaba78,0xbbf3ef45,0xbc145249,0xbb71c5b3,0xb96e8d76,0xba09ac0c,0x3a9b5d34,0x39c0ab0d,0xbb69092a,0xbaf58307, +0xba70bfb3,0x3986b11e,0x3a0512ec,0xb8428d86,0xba71cc23,0xb9af9383,0xb9b38a39,0x393042a0,0xba19ce37,0xbafb8781,0xbafcaeb5,0x3ae70ec4,0x3aebec9f,0x3b07f7d6,0x3b9bae98,0x3bba82ee,0x3bacab90,0x3ba71383,0x3ba1c8e2,0x3bbdd3ea,0x3c24c6c4,0x3c14b2a9,0xba4718de,0xb9ae5fcd,0xbaf65158, +0x3aba9e3b,0xbb8726e8,0x3c2387e1,0x3c101b1e,0x3b9c761b,0x3b7721e2,0x3b839633,0x3ac0d85d,0x3a1b5ba4,0x3aea9148,0x3aa5aa55,0x39b689b0,0xbaa35a0f,0xb94fc2ee,0x38812c0d,0x393e679e,0xb98807dd,0xba9cd2ab,0xbb517820,0xbb388733,0xbb77f624,0xbae07e19,0xba6efb6e,0xb9ea8584,0x39e879bd, +0x3ab9cb1f,0x3b1ab786,0x3b9599e1,0x3b8c0cce,0x3b681f1c,0x3ae5cf25,0xbb3439bd,0xbb269cf1,0x3b717d3a,0x3b9839f5,0x3beaacd1,0x3bfd9a06,0x3bebf3c1,0xbbccdadc,0xbc2ae333,0xbc275182,0xbacfdc42,0xbadf3880,0x3a1ffd3b,0x3a657dc6,0x3aa0d5d6,0x3a7bacfc,0x3b0489cf,0x3a8a86af,0x3ac0a913, +0x39f27bc5,0x3a21e996,0xbb0f526a,0xbb4b7bc2,0xbb16a2e3,0xbb568ef2,0xbb29d564,0xbacd78d8,0x39a1e9a6,0x39b116db,0x3a8f19f7,0x3ae155f8,0x3b3e9670,0x3b8ee68a,0x3bb4466f,0x3bd92790,0x3c1042ef,0x3c211248,0x3c1ba213,0x3c0a0dec,0x3c10fd3f,0x3ba4a170,0x3a0d3202,0xbb9b4946,0x3be3e342, +0x3b84610c,0x3aa9fb0e,0x3b164a20,0x3b7a1cb7,0x3b7e54a3,0x3ba006b0,0x3b71e9aa,0x3b85bbf8,0x3b125bba,0x3afed1fc,0x393959e3,0xba5ae42a,0xbafa3a4f,0xbb081e06,0xbb12c049,0xbb024083,0xbb1c44ef,0xbb37ffd8,0xbac4a811,0x382889cc,0x3a8acc0f,0x3ac2ae76,0x3ad1746d,0x3ad15f48,0x3a914d21, +0x3a8b027e,0x3ac1a17a,0x3ab37b1a,0x3afb1145,0x3b474c68,0x3bbbfe17,0x3bc5d5b4,0x3be20cbf,0x3bf69293,0x3bf6a5e0,0x3b113680,0xbb8851e4,0xbb2cd6b5,0xbb118b83,0xbb526b07,0xba2dd20a,0xbae9f2c6,0xba519211,0xba6b9f79,0xb9aca6c7,0xba8687e6,0xbaa37846,0xbb129dc9,0xbb25a43d,0xbb1aecf4, +0xbb20158d,0xbb38a43e,0xbb342dac,0xbb0d4ace,0xbb35ebbd,0x38799f34,0x3995750d,0x3a7e174d,0x3a6709ae,0x3a4af8f7,0x39f18025,0x39c11447,0x3967abc1,0x39b2f189,0x3ab51899,0x3b11b34b,0x3b693527,0x3b659156,0x3b5d7b22,0x3b7362e2,0x3a77cf3d,0xba26b023,0xba79cbcc,0xbb97b098,0xbb86671c, +0xbbcbd944,0xbbc869a4,0xbba3221a,0xbb6d5d46,0xbb8cb144,0xbb5bcd4f,0xbb9418eb,0xbaf5061c,0xbb38ded1,0xbb0a7b38,0xbb3c11d9,0xbafff356,0xbafe6515,0xbad88c7f,0xbb3305ef,0xba76ffd3,0xb8b4a0ef,0xb8eb37b2,0x3a4cdc2a,0x3a0ef149,0x3a36be09,0x3a6c5b4b,0x3a9e6c78,0x3ac2acc1,0x3ab344da, +0x3acdd780,0x3abbedf6,0x3ad01a20,0x3a952420,0x3a3000ea,0x3a32ab58,0xb8ce9695,0xba3993d7,0xba7dac33,0xbb6a3daf,0xba335a28,0xba053163,0xbadd956c,0xbac72322,0xbb798153,0xbb088034,0xbb4d5a28,0xbb4b508f,0xbb6938ae,0xbb2a31ff,0xbb415bc3,0xbb190da4,0xbb0a7854,0xbb21f2a3,0xba364e32, +0xbad4fc22,0x39292f0e,0xb91cd92f,0x3909284d,0x39176b93,0x39ff4419,0x3a4b16f8,0x3a6dc46b,0x3aae210a,0x3ae02aa6,0x3b05afe9,0x3b26c866,0x3b3b3398,0x3b56af3c,0x3b198a16,0x3ae73c8a,0x3a4d45ff,0x38831b8f,0xba153658,0xb9e53068,0xbb15cc24,0xbb8c8b63,0xbb9663db,0xbb3372aa,0xbb822b66, +0xbba3960b,0xbba92082,0xbb9ea251,0xbb90cc32,0xbb921edb,0xbb99b7a7,0xbb98ccf0,0xbb4980d9,0xbaabeffd,0xbb6e2657,0xbb474ef7,0xbabebe2e,0xb9139d93,0xb97f7de4,0xb92c2d8b,0xb8d16460,0xb88e4d19,0xb86313b5,0xb683f433,0x383fae9d,0x37c1fe11,0x385116ad,0xb7aaaeb8,0xb82e6b60,0x38112501, +0xb955b92d,0xb980a1fc,0xb9c58404,0xba00a8f8,0xbaaafcb8,0xb94daac8,0xb95377b2,0xbad54bc7,0x3afbf2d3,0x3b7bcfab,0x3b25c538,0x3a9b0c41,0x3b435f05,0x3b69a503,0x3b51e032,0x3b404f53,0x3b1397fd,0x3b26212e,0x3b4380b1,0x3b1d738c,0x3b5dd1cd,0x3b0249ac,0x3b074672,0x3b526892,0x3ae01596, +0xbae82e84,0xba59aa18,0xba4b6092,0xba4e5b4d,0xba227351,0xb9eda65d,0xb8cd3ecb,0xb9a406de,0xb9cb6359,0xba2161eb,0xba0404ed,0xb9f408f6,0xba23de39,0xb9f3f45b,0xb9bc4b49,0xb956eaac,0xb9848df8,0xb9f2abb4,0xb9972942,0x3baa25c4,0x3a8541dd,0x3b524bf5,0x3aa17c57,0x3acc149b,0x3af04d97, +0xba3e5141,0x3aa5077a,0x3a875664,0x3b0aa5ce,0x3a7598ae,0x3ad9a199,0x3b6d15de,0x3adcb86d,0x3af57707,0x3a128d9a,0x3b13a3c5,0xba256a3c,0xbae758d9,0xbaa06be9,0xbaa22907,0xb9b344c8,0x39bcfb24,0x3abcf5da,0x39a9bf7c,0xb8e1c49d,0xba392b46,0x3918d252,0x38238216,0xbaa2f5de,0xba26ddc2, +0xb9caa772,0x382ac247,0x39cdd029,0x39833cba,0x39e3311b,0x3b73c9c8,0x3a65a4e7,0x3b62e77b,0x3a8ad3df,0x3aed6357,0x3a4a935c,0x3a9eb740,0xbaff7136,0x3ad98659,0xba7a02b5,0x3ae0d6b0,0x3a8e5f2b,0x3b138cdf,0x3ac2b266,0x3a3616b3,0x39d3eff9,0x39bc37ea,0xbade15ad,0xbb50c98c,0xbac9f267, +0xbaed7859,0xb975981a,0x3a18a94a,0x3b460165,0x3ab1461b,0x3a49c36e,0xba287ce9,0x3a0776d1,0x39fe5a77,0xba65436b,0x398e50ba,0x3a3eb713,0x3ab09cbf,0x3ab36c0c,0xb9e6e986,0xb9a1ce80,0x3ba49a70,0x3b5039a9,0x3b6935b3,0x3acd476e,0x3a100323,0x3b016c95,0xba28e8c7,0xb93149d0,0x36aebfce, +0x39d65f10,0x3b2a8373,0x39561f50,0x3b4d606c,0x3b06d32b,0xb89de1ab,0xba1d41e2,0xb9428aea,0xbabea160,0xbb8c0649,0xbb274b7c,0xbb20a589,0x39f0fbd8,0x3b1ef82a,0x3bcb9e0a,0x3b14c6d1,0x3ab4fa89,0xba871e17,0x3af95840,0x3aced0ae,0xbb180ee5,0x39a7a6ef,0x3a300eed,0x3aaa05d6,0x3b2004df, +0x3b31ac83,0x3a2e116d,0x3b9307f2,0x3af09265,0x3b3384a2,0x39c5fcc1,0x3a4a09ec,0x3b439296,0x3b1116e0,0x3b274687,0x3aab28e0,0x3af07ae0,0x3b054329,0x3af0ce27,0x3acf2615,0x3ac95362,0xb9d93596,0xbb55a40e,0xb9712631,0xbb84c056,0xbbae73f0,0xbb4026a1,0xbb300ec5,0x39618235,0x3b39df28, +0x3be2e6a7,0x3b8a1318,0x3ae6e283,0xba90df60,0x3ac15cbe,0x3af9356d,0xb99a5dfd,0x3b119c47,0x3b654187,0x3b65a0fe,0x3b817273,0xbc12b54f,0xbc0162a4,0xb8cfee41,0x3ab884e4,0x3b8db81c,0x3b872500,0x3a2244a2,0xbb8af7ac,0xbb97a93d,0xbacea229,0xb97c37cf,0x3bacf6c7,0x3b86629c,0xba98dafb, +0x3a173a1e,0xba385798,0x3babf515,0x3b238704,0x3ba7df2a,0x3ba50748,0x3b8462cd,0x3b24b684,0xbaa41fdb,0xbb29f83e,0xbbbb3c5d,0xbc253508,0xbc132cb0,0xbb63a103,0x3bbb536c,0x3af52c79,0x3aa8934c,0x3b4a1ebb,0xbba55d9f,0xbc018b89,0xbbe5ea5b,0xbc1772f8,0x3b2a1074,0x3be3090a,0x3bf16eaf, +0xbb99dc15,0xbbbc2fc2,0xbbf0dc11,0xbb714665,0x3aaa273c,0x3b0d31bd,0x3ad3135e,0xbb174e93,0xbb35e6cb,0xba732b5f,0x3a9396f8,0x3927942f,0xba81ff3e,0xba6e284d,0xba10f8f3,0x3a7b929d,0xba28144c,0xbad622e2,0xba4e5556,0xbaec49b8,0xbb2da07f,0xb9fe2473,0x3bad541f,0x3bf153ca,0x3b7018b4, +0xbb11a761,0xbb1bab4e,0x39b41974,0x3bdd5c51,0x3c2ccb2e,0x3c24cd73,0x3ac621cd,0x3b6734c5,0xbc196a59,0xbc624efc,0xbb235dbb,0x3a233ff3,0xbba3832f,0xba11b1ee,0x3a4e78eb,0xbb18e5ed,0xba0bbd80,0xb9fec130,0xb7a4740a,0xba78fad1,0xba89dfc4,0xba026bd0,0xba3eeadc,0x368a70d5,0x3aadbc99, +0x3a60e8f2,0x3a8f0f7f,0xbadc9fef,0xb927b391,0x3aac7289,0x3a3f62be,0xb9a87692,0xba998196,0xb9f15baa,0xba314e96,0xb9476be0,0xbb53d0f1,0x3b4f0620,0x3b4966f9,0xbba19233,0xb81b19ca,0xbabc5876,0xbb4d9d0e,0xbbc42052,0xbbeb13fb,0xbc2d7772,0xbac4ed4d,0xb93e0039,0xb9b263c5,0x3b182944, +0x3a966f93,0xbb672a28,0xbb0e5849,0xbaacac01,0x38862b7d,0x39c1f4d5,0x38751fa2,0xbaa77177,0xba23cd5f,0xb8e4154a,0x3a002276,0xbaa3fe6c,0xb9c0b8b9,0xba46a35c,0xbaf38664,0x39880d0b,0x39a7ce9d,0x3a98a97c,0x3aa7b6d5,0x3a848c07,0x39c0e4da,0x3a9e1a79,0x3a911064,0x3bc2952c,0x3b4848fc, +0xbc03e461,0xbb7a704c,0xbb64948c,0x3ab267c5,0xbb68970d,0x3c3316eb,0x3c617244,0x3bf4b551,0x3b81debe,0x3ba1303c,0x39c6b590,0x39afc865,0x3b2a2bd6,0x3a8256e0,0x39fb33de,0xba0ef46d,0xba258681,0x38bd7bfb,0xb80a8069,0xb76fb2ac,0xba2798a1,0xbb2bb23c,0xbb4083cd,0xbb1ee053,0xbb7fe0a8, +0xbb4d0ee5,0xbb2de5c5,0xbaff0263,0x3a425b4b,0x3b336510,0x3ba86cfe,0x3bb18167,0x3b9dc1fd,0x3b8304e3,0xba2e4698,0xba306db0,0x3a78a322,0x3b5ee41a,0x3baf7e89,0x3b80a230,0x3c0e0bd0,0xbc1a8b98,0xbbad5582,0xbb06a524,0xba041f9a,0xb9348072,0x3ac6f869,0x3adaf8ec,0x3a909899,0x3af9bb9a, +0x3af4f92e,0x3a6fce1c,0x3a5f5661,0x398992db,0x3a091906,0xbafe7bcf,0xbb52ad0e,0xbb561b8e,0xbb23d378,0xbab3e741,0xba327b54,0xba808372,0x3a4ab4af,0x39c0b3e3,0x3af0747b,0x3b574698,0x3ba0404e,0x3bd4a514,0x3bf17655,0x3c184467,0x3c0a566e,0x3bdec372,0x3b8ea40e,0x3bc35697,0x3b58b685, +0xbb1d260e,0xbba98312,0x3bd2b48a,0x3bccd9d9,0x3bd7afc7,0x3baf5551,0x3bd13336,0x3bb5b984,0x3ba3dd99,0x3b9b0033,0x3b7ae065,0x3b6c6589,0x3aa2e63e,0x3a42121a,0xba8fbf70,0xbb04793c,0xbb02a240,0xbad943fd,0xbac53aed,0xbb163829,0xbae8b18e,0xbb341c2c,0xbae9e841,0xba76ae15,0xba172689, +0x3a5faa94,0x3aad6c8a,0x3a87418c,0x3a0f5481,0x39e0ba8e,0x396922d4,0x39f16de7,0x3a766577,0x3acc5fe6,0x3ad020f7,0x3b4eb37f,0x3b9d1bd7,0x3bd555ee,0xbab56daa,0xb87c7d64,0x3957467c,0x3959e5ae,0xba166c57,0xbac5cc8e,0xb9870e82,0xb9e7a91a,0x376c9e55,0xba0e029b,0xb9e1b948,0xbac01a09, +0xbad0b77c,0xbb425015,0xbb280336,0xbb200c2b,0xbad65dd1,0xbaeb8199,0xbb0b60b6,0xba9aff4a,0xbb0b05bf,0xba8279c4,0xba38530a,0xb9c03b0b,0xb9dddf7f,0xba40d255,0xba799272,0xba95226f,0xba8aa6ef,0xba361661,0xba01755f,0xb9383cbd,0x3a5929f6,0x3ac6ad1e,0x3ac1450b,0x39a04b63,0xbb16da97, +0xbb38e6f3,0xbad10e41,0xbb61d612,0xbb61893d,0xbb41df1b,0xbb49b405,0xbb66702c,0xbb5c64c8,0xbb5e5a17,0xbb178f58,0xbb4b6e79,0xbb27be2e,0xbb2c1aee,0xbadb79ff,0xbb196755,0xbb19b626,0xbb08b8f2,0xba2a96db,0xbb056f08,0xbb1ec4b3,0xbaaa0291,0xba84510a,0xba4addd9,0xba26f830,0xb8c5af0a, +0xb9a1143a,0xb954ae9d,0xb98d0a5b,0xb924bae3,0xb93fc46b,0xb963a7e5,0xba2eeaca,0xba81b5c6,0xba821d86,0xba9d61e8,0xbaf928ec,0xbb1fccf4,0xb9803dbc,0xbaeffcc2,0xba823fcb,0xbafda5e9,0xbb2fd7f7,0xbb2eb930,0xbb443aeb,0xbae2de38,0xbabf05cd,0xba93cec8,0xbae2870e,0xbaa80824,0xba85014c, +0xba319c1e,0xb862e530,0xba9db981,0x398ee40e,0xbb0938e5,0xbabe4404,0xbac1ee67,0xbaa719f2,0xba7233c3,0xba212972,0xb9bdf526,0xba2371db,0xba190b0e,0xba25d936,0xba10693b,0xb9e19024,0xb91949dc,0xba20fc23,0xba16d239,0xbaaba8dd,0xbafcae1c,0xbb1141eb,0xbb2b218e,0xba87e324,0xb9573256, +0xba5aa712,0xbadb711b,0xba08493e,0xba09d143,0xb95c0b61,0xba0a312c,0xba395406,0xb9dad84b,0x382e3399,0x393b720d,0x3814a7ef,0xbaaacde4,0xb98f408f,0x39343968,0xba6be76b,0xbb21523a,0xbb05d76d,0xbb029492,0xbaf9f981,0xbaf76e5f,0xbaef8be7,0xbadceab8,0xbadbf0ce,0xbad9760f,0xbad97082, +0xbadd6bf9,0xbaddf007,0xbae0b6b9,0xbaff0ca5,0xbb00e2de,0xbb08715b,0xbb0b2f49,0xbb3ef0ef,0xba76742d,0xb8956b47,0x3a00157b,0xbb26379e,0xbb3b06fa,0xb906fdff,0xbb0c7bde,0xbb304a48,0xba9b885e,0xbaa9181f,0xba923e19,0xba4e52bb,0xba10876e,0xb9fbb849,0xba04ad10,0xbb2f785d,0xbb1d2420, +0xb863373a,0xbb2cd2a7,0xbb2d0452,0xb8afaf3e,0xba1df012,0xba239d85,0xba06c748,0xb9891820,0xb8ab5d2e,0x3937234c,0xb8982b4f,0xb96d5a26,0xb9f8ce9e,0xb9f201ef,0xb9f0fa59,0xba2f0142,0xba3c6a81,0xba1fb528,0xb9248665,0xb93b222a,0x39d3effa,0xbaca79e4,0xbb34fa05,0xb9c2cb17,0xba07b99b, +0xbaa1f672,0xbb0cb60d,0xba312735,0xba98c39e,0xbb3165a3,0xbb0ec920,0xbb0e0d0c,0xba4c1794,0xbab06d38,0xba35ad2a,0xba3eca4d,0xbad6318d,0xbad01c2e,0xbb4fec02,0xbb208519,0xbaa1fcae,0xbad4f319,0xbaa20599,0xba05ecec,0x386e8f99,0x3a455ea9,0xb8595b05,0xb9db3020,0xba5f76a6,0xb9a20b07, +0xba295552,0xbb0640c3,0xbb1bb7fb,0xbaf86c9b,0xb95e237a,0xb923196b,0x3af03e1d,0xb9e2f91f,0xbb0d2e1f,0xba4f1d21,0xb90dc3ed,0xbac0ba4f,0xbb15ff02,0x39b120fc,0xbb2194ca,0xbad87b62,0xbb81dae0,0xba04470b,0xb98d5a7d,0xbad9d174,0xb98b5337,0xb88f09a2,0xba96c618,0xbb0180d3,0xbb5fde84, +0xbb317ab7,0xbb07ba4c,0xbb25953a,0xbae80f60,0xb9c2208b,0x3a692d4f,0x3b1e72c6,0x3a63b0ac,0x39361537,0xbaaf6cfb,0xba1c952e,0xba9a3d2a,0xbb34d138,0xbb4b10a5,0xbb0f0426,0x3a5e9690,0x3a1233c7,0x3b0cb61b,0xbadcd912,0xbb30caec,0xb9c79f1a,0x3af29855,0xb83d122f,0xba484ce1,0x3a5b51a3, +0xbabe5f5c,0xba833462,0xbaa35a9a,0x3a6ba396,0x3a4fa191,0x3a6eab32,0x3aa2d9be,0x3af96805,0xb97167d5,0xbafa1860,0xbb81eee1,0xbb8b19c0,0xbb4584bd,0xbb6692c4,0xbb4aa7dc,0xb9e066f3,0x3a8c82f2,0x3b61d153,0x3a245f60,0x37f7bfa8,0xbae79ea2,0x393a73b3,0xbaaca31c,0xbba40578,0xbbb457b4, +0xbb779252,0x3aba78e4,0x3a824281,0x3b9c58b4,0x3aaa9d7b,0xba8d655b,0x393a537a,0x3b04a723,0xba706b73,0xb9350739,0x3b32e4d6,0x3ac489fb,0x3abdc8a1,0x3a935685,0x3af39836,0x3b314d1f,0x3ac72b09,0x3b1c710c,0x3aded74c,0xba38c13f,0xb8417765,0xbbafb152,0xbb95ca10,0xbb8893db,0xbb9c2eef, +0xbb6b1957,0xb9ea49c4,0x3b1d5351,0x3bc239e7,0x3b591194,0x3a378bdf,0xbaeced4b,0xba46cae0,0xbb01f728,0xbb88e688,0xbbaeb4bb,0xbb2640b2,0x3b565330,0x3b3283e1,0xbc1483ae,0xbc092e42,0xbc1a2054,0xbba866d0,0x3ab92ee2,0x3b0d402b,0x3a081ad9,0xbb9122f4,0xbb88296b,0xbab1d788,0xb8d55880, +0x3b86b0ec,0x3b6193e6,0xb9d09be2,0xb9595e22,0xba0f9c84,0x3b318741,0x3b6c9c27,0x3b0e0092,0x3b792664,0x3bcb11b5,0x3b9cd9de,0x3b9ddc56,0xbaa6c208,0xbb630bc0,0xbba9e26a,0xbb329a86,0x3b467b2e,0x3c23fce9,0x3baa5a1a,0x3b17080c,0xba829894,0xbbf31366,0xbc0e332f,0xbbe3992a,0xbc0b2d5c, +0x3c0e46c7,0x3bdf4fc2,0x355a4dac,0xbb04d840,0xbc152680,0xbc051489,0xbb9817cd,0xb99c887d,0x3b03c271,0x3a9dad97,0xbb0b7b37,0xbb2226b6,0xba9c079c,0x3aae46fc,0xb9fe8185,0xb9fb8a9d,0xbb067187,0xb91f0607,0xba32e2cd,0xbb313d44,0xbadcd660,0xbb819d5b,0xbb85adc7,0xbb644f5f,0xba8decc8, +0x3ba1167c,0x3b9ffca4,0x3af2828d,0xbb51e572,0xbb42725a,0xbaa548a7,0x3b95cfc1,0x3bd76576,0x3bd37f7a,0xb7a92046,0x3b36517c,0xbbf66959,0xbc868da8,0xbb78cc60,0x39524644,0xbbd9eee9,0xba4e0675,0x3942ba6a,0xbb145804,0xba5f53db,0xba162a19,0x3915dc9c,0xba1b80e7,0xba7c70ae,0xb9cd01b7, +0xbae918b5,0xba8a0df2,0x39565050,0xb97811ef,0xba70c836,0xbaa8fcfa,0x3a59093f,0x39ad9684,0x390d4265,0xba819db1,0xba98d8ba,0xba9db17e,0x3865292e,0x3a1d328b,0xba35a70a,0x3bcc3d2c,0x3b6c9295,0xbc39a74c,0xbbf4a99b,0xbc0eaaff,0xbbeba58f,0xbbc974e6,0xbc0afba4,0xbc389473,0xbb3984ee, +0xba012975,0xbab43466,0x3af935ec,0x3a9b4e80,0xbb439acf,0xbb0acb17,0xba96133a,0xb8afd157,0x3a026b67,0x3886afec,0xba9f01b5,0xb9e88dda,0xba812044,0xb8b1c27f,0xba8c78b4,0xbb1d7dfd,0xbb56a9b8,0x391a2013,0x36a938cd,0x39c7235b,0x39c22cf6,0xb956ba26,0xbaf2b3d1,0xbb069cdf,0xbabe58e0, +0xb9a6cd86,0x3ba6b826,0x3b00bb1f,0xbc53a9f3,0xbc387180,0xbc4d82be,0xbc1b73ca,0xbbe80375,0x3bbf3087,0x3c542023,0x3bdebea8,0x3b9589ed,0x3b529930,0x39c94d48,0x39d545a1,0x3ad3284b,0x3aa0306c,0x3a3d264d,0xba6e4aac,0xba268ed1,0xb958f250,0x39ee883f,0xb9bb8c6c,0xba864e2e,0xbb32c9f1, +0xbb417b92,0xbb668a8c,0xbb21f39d,0xbb26d138,0xbb41ea83,0xbb1e5005,0xba8396a0,0x3a4ed616,0x3b589f1a,0x3b0e5cc4,0x3a0c166f,0xbb4188b8,0xbbac2cad,0xbba428f8,0x3a46ba43,0xbb8d7d4f,0xbb9ba78e,0xbbd5bd07,0xbaf84838,0xbc88c7b8,0xbc56e4b2,0xbbedf1fc,0xbb66d474,0xbabfdc76,0xb96c0a25, +0xb9411613,0x3a35e13f,0x3a095047,0x3a956660,0x39c19b8e,0x39c53743,0xb809b7f0,0x39ffa000,0xbb0afd7c,0xbb4c23b6,0xbb432666,0xbb8f8d04,0xbb8af9b7,0xbb5608ef,0xbab82557,0xb8d8d0e6,0x3a18c95d,0x3a9a5d81,0x3ae927bd,0x3ae5db46,0x3b130e62,0x3b1e9407,0x3b260a94,0x3b8e3fed,0x3b4b94d5, +0xba22200e,0xbaa9c8be,0xbba626c1,0xbc19372a,0xbc63e492,0x3b391d3f,0x3b327970,0x3b583f39,0x3b6413b7,0x3b87bd08,0x3b84c749,0x3b90c9a7,0x3b7b7d3d,0x3b84ee0e,0x3b2bbb61,0x3b152ac6,0x3a242de2,0xba08bbfe,0xbaee7bf6,0xbb19d424,0xbb292026,0xbb15a081,0xbb0c8f55,0xbb0cd703,0xbad656c7, +0xba8c18e0,0xba7c32da,0xba225799,0xba6cc536,0xba6d6381,0xba9400b4,0xba366306,0x396c34d8,0x3a623dc8,0x3a8c7742,0x3aae7ebd,0x3adec720,0x3b145e30,0x3b21e52e,0x3b34a601,0x3b470d36,0xba4b4917,0xbb4932b9,0xbb4ade70,0xbb024270,0xbb38ec20,0xba7b754d,0xba94966e,0xb940babb,0xb99d7273, +0x39379b18,0xba096036,0xba30998b,0xbaf5416a,0xbb2d2eb9,0xbb3b512d,0xbb34afa3,0xbb47e52d,0xbb465452,0xbb33357e,0xbb3ee04b,0xba9fb6a3,0xba8902c3,0xba0e1ade,0xba40cac5,0xba5b161a,0xba845d23,0xbaaab00f,0xbab90c3a,0xbaa1b602,0xba52658a,0xba33f86a,0xba1efd60,0x3a03dc05,0x3ac04f6a, +0x3af57411,0xb89dcda5,0xbb0525d0,0xbb42ca7a,0xbb885044,0xbb91680a,0xbbb2cbb8,0xbba3488f,0xbb89cecf,0xbb5212c0,0xbb804097,0xbb63a58a,0xbb9981f1,0xbb5699be,0xbb563e6b,0xbb5c8fe5,0xbb432369,0xbb3dfcde,0xbb3a1c25,0xbb2f743a,0xbb5580da,0xbb2c33e5,0xbab97fa5,0xbab3aec7,0xba0a4803, +0xb9ec9a69,0xb8fb7441,0x3991fa14,0xb96cb1ff,0xba2d4879,0xbacb267c,0xbab94684,0xbabc515b,0xba9b548a,0xbaaad6e4,0xbaf2dff5,0xbacc68e7,0xbb01c459,0xbb37fb64,0xbb48e140,0xbb6a6424,0xbb2e25c0,0xbb321c98,0xbb6c22af,0xbb825dfa,0xbb934cf4,0xbb75fb1d,0xbb8375d8,0xbb6fd555,0xbb811293, +0xbb69cdb7,0xbb67ae94,0xbb7ad197,0xbb647f5f,0xbb459e55,0xbb22a75f,0xbb1424fe,0xba8168a2,0xba623d03,0xba6a62fe,0xba477620,0xba0a3457,0xb9a018e3,0xb9051ea9,0x38f4f308,0x39ebea01,0x3a03260d,0x39bd8782,0xb792ee94,0xba1019cd,0xba8ccf7c,0xba7e1d50,0xbadca2e8,0xbb2018be,0xbafe181b, +0xbb0a78bb,0xbb6934c6,0xbb792478,0xbb2749ad,0xbb7ace9f,0xbb82713e,0xbb4ecc5b,0xbb49c5f9,0xbb40733a,0xbb2e5172,0xbb26a26c,0xbb1ca524,0xbb138cc5,0xbb68645b,0xbb468563,0xbafa656b,0xbb5ac782,0xbb456e5a,0xbacf043a,0xbaddcc14,0xbacd6d90,0xbabc8ca4,0xbab10c09,0xbaa509cb,0xba98678a, +0xbaadb2b4,0xbacb6a29,0xbadf3261,0xbaef5b8d,0xbadeebc9,0xbad8d244,0xbaec92bf,0xbaf47731,0xbb03ddbc,0xbb03ba60,0xbb53bf4b,0x3b34068a,0x3afbfdbb,0x3aef675a,0x3b5f0051,0x3b0047a9,0xba8b3dfe,0x3b37b5f1,0x3af157f0,0xb9ca1317,0xba858637,0xbac0c6a2,0xbad4f7b5,0xbabfbe34,0xbae9f295, +0xbac20bb4,0x3b0d03e4,0x3b50ff9e,0xbaf0f49b,0x3ab68618,0x3b28656b,0x3ab4de71,0x3acde30f,0x3af60f95,0x3afa1cab,0x3b0f27e4,0x3b1624d2,0x3b1e1a97,0x3b0e744e,0x3b075c22,0x3aec883c,0x3b08c665,0x3b09dea9,0x3b0288e7,0x3b0af1ec,0x3b0a3f49,0x3afeb03c,0x3b044871,0x3b0d41ad,0x3b41ecca, +0x3a9705be,0x3ae17104,0x3afe4492,0x3ad3d1b2,0x3ae1483b,0x3a93af55,0xb8f8526f,0x3a533f99,0x39313b4d,0x3af79d89,0x3af5c42d,0x3a9ae34e,0x3a5b0cd8,0x3b31e8ee,0x3ad9bb5b,0x3aa4387f,0x3a8082c0,0x3b10499d,0x3ab933d1,0x3b0b8fd3,0x3b2972e4,0x3b59713a,0x3b7f8e2d,0x3ba1c94e,0x3b759d2b, +0x3b614f8b,0x3b3cbcdf,0x3b871c07,0x3b809a73,0x3b2dbfce,0x3b5096f1,0x3b4e84f9,0x3b310ad9,0x3b46596c,0x3b422cf1,0x3b4816aa,0x3b30ab80,0x3b25c1ac,0x3b5c79de,0x3a8e63c4,0x3a14025b,0x3aee129f,0x389ffdb0,0xba7260bf,0x39ee9a4a,0x3aa32165,0x3a861290,0x3b00c1c0,0x3b165164,0x3b2bba62, +0x3b17c2fa,0x3a0dd3d6,0x3a11f3f6,0x39785605,0x3a9ceae4,0x3b1ef73f,0x3b58e6e7,0x3b991340,0x3bad6101,0x3bde3684,0x3ba30a58,0x3b8d478d,0x3b4e1aff,0x3b9e6b54,0x3ba76726,0x3b6955ea,0x3b96f35b,0x3b8b3764,0x3b5618cc,0x3b713db0,0x3b1e2a48,0x3aef2511,0x3b1cc055,0x3b256203,0x3b875ea1, +0x3a79c7f6,0xb9d0c875,0x3b10a572,0xbae58f80,0xbaae4dd1,0xbaea8fa6,0x39a70cc7,0x3b28d405,0x3a641145,0x3b52000d,0x3b450eaf,0x3af9f8d8,0x39e8ff4c,0xb99aa3b8,0xba3d6b3b,0x3a1b5af9,0x3ae0f755,0x3b634feb,0x3bd64cb3,0x3c0bb789,0x3c2c674d,0x3bdad097,0x3bc3218b,0x3b89c5ea,0x3bf9718f, +0x3bfb82cd,0x3b6ae20c,0x3bc03ac0,0x3ba62280,0x3b714e21,0x3b95a949,0x3b9e396d,0x3b5df32e,0x3b574702,0x3b06a036,0x3b902b70,0xb8d5c538,0xb9a5dc4e,0x3b0aeedb,0x3a3ec176,0x3a8602ac,0xb9da3936,0x3ac0a01c,0x3b18a614,0x3ae13d07,0x3b26e06d,0x3b2ff1da,0x3aac2160,0xba5968ea,0xbabc8d5d, +0xbaeb8c05,0xb957c670,0x3b29e8c0,0x3b9c086d,0x3bef1dc5,0x3c1aa090,0x3c3abb8d,0x3c0737b9,0x3bc227e5,0x3b5e93f3,0x3bf3cf75,0x3c0414e4,0x3bab4448,0x3bffba2e,0x3beae806,0x3b9931dd,0x3bb12a76,0xbb88ee03,0xbb2ee82a,0xbaf4ed60,0xbaa1b7c8,0x3b38e732,0x3b5474d4,0x3b06b288,0xbb3af867, +0xbb3caafd,0xba6d8b00,0xb4851152,0x3b7e051c,0x3b2a01b8,0x3998f236,0xb91790ef,0xba654379,0x3b946fd4,0x3b91d961,0x3be7ee44,0x3c16dfbb,0x3c1b8acf,0x3bc8c238,0x3b10c7de,0xbb00ff5e,0xbb85038a,0xbbf62cb9,0xbb253507,0x3b7c87cd,0x3c461c62,0x3c0a71cf,0x3c02b606,0x3c16ff1d,0x3aca5c95, +0xba2d3d38,0xba36eb46,0xbb26ae20,0x3ba928c8,0x3c25a784,0x3bff6e31,0x3a4f27b5,0xbbb084c9,0xbbd428a2,0xbba44f9b,0x3828b573,0x3abc05f9,0x3aa56606,0xbacbecba,0xbb27ea96,0xbabe648e,0x3a93e6a4,0xb9065b61,0xb9630ef1,0xba55fd2b,0x3a68d70d,0x3a4e470a,0x3a39ae92,0x3b320250,0x3b52862c, +0x3ba3a945,0x3b0870b3,0x3b50b77f,0x3bfc44be,0x3bc5e447,0x3b0164e6,0xbb3fe4c0,0xba6929fc,0x3b141826,0x3be5c9f8,0x3c413d33,0x3c1e1547,0xbace0001,0x3b23ec5f,0xbbccbf64,0xbc7b7f50,0xbb613353,0x3a5ba7fb,0xbb9c2548,0xb9fcbc42,0x39c3e449,0xba9dd933,0xba07c0d2,0xb9e0b6da,0x39836a1e, +0xb969773e,0xba0dbfed,0xba824ac9,0xba0c9e8a,0xb91bf9bb,0x3a9ad000,0x3ad46162,0x3b03eb0a,0x3aab68eb,0x3b059550,0x3b2bfd7b,0x3b270b16,0x3b464f30,0x3b51278f,0x3ba640a7,0x3b7bc8c1,0x3b3afc09,0xba2e10a2,0x3be0d0ca,0x3c0ad26b,0x3a00b575,0x3be9b61b,0x3bb09b09,0x3ab512fc,0xbab15d59, +0xbb5865e1,0xbc31a135,0xbb84a2a7,0xb9cc0158,0xbaacf18f,0x3b2c55a2,0x3b066096,0xbb0769d5,0xbaeef316,0xba9aa315,0x390d3e43,0x3a384877,0x39d9bd19,0xbaa22896,0xb9c48923,0x398e6c45,0x3a9706c8,0xba008c84,0xb9ec5987,0xb86b42dc,0x38fa2d9d,0x3ad55b06,0x3aefd79b,0x3b886862,0x3bac8fcf, +0x3bb42f60,0x3bbbc10a,0x3ba861a4,0x3b6d0d8d,0x3c155140,0x3bfbfea4,0xbadf2631,0x3b9c7b22,0x3bc78648,0x3c26401b,0x3b317292,0x3c80f66e,0x3c8ba53d,0x3c346ec6,0x3bacb68d,0x3b831540,0x3a909c2c,0x3a7a271c,0x3b0d57b4,0x3ab49ef1,0x3a6f52f5,0xb926fa5a,0xba1d846b,0xb8a82627,0x3a4ed80e, +0x399401c6,0xb98accd0,0xbaf485de,0xbaf7e054,0xbb114ae1,0xbb216741,0xba2f9397,0x3a493305,0x3b2471c0,0x3b734d4c,0x3b97ebd8,0x3bbdae11,0x3bb134df,0x3b8b0a69,0x3ab9d0be,0xba862f21,0x392e6ccc,0x3b4ad11e,0x3bf71127,0x3c2c16fd,0x3c55d586,0x3c56656f,0xba86284f,0xbb91ee8c,0xbbefdf27, +0x38526e42,0xba89c402,0x3a1a45ef,0x3a742030,0x3ae00afd,0x3acf87c4,0x3ac438a6,0x3a3b9601,0x3986b024,0xb869e66b,0x3a330f29,0xbad987bb,0xbb2e08e0,0xbb4a55a9,0xbb32beee,0xbb05aef1,0xbb00b699,0xba9c1e2c,0xb9da8e79,0x39873093,0x3b04f933,0x3b9301e6,0x3bfd8d6a,0x3c14f1fd,0x3c279b0a, +0x3c4fe634,0x3c3f47b7,0x3c249a83,0x3c096cc0,0x3c274545,0x3c04cd04,0x3b85f14f,0x3a83ed03,0x3c18a77c,0x3c190d41,0x3bd6a91c,0x3bb5980a,0x3bd2c532,0x3ba472f0,0x3b9a8199,0x3b93a887,0x3b8b1ed6,0x3b86cd35,0x3b13f96c,0x3af3e955,0x3889ece9,0xbaa71bb5,0xbad77887,0xbab3f8cf,0xba89b110, +0xbab8d8ab,0xbad26e7e,0xbb02e03c,0xba574b70,0x392ca6de,0x3a2c64ee,0x3b05442a,0x3b1787fc,0x3b093918,0x3ae882ce,0x3acd6aec,0x3a43bb5c,0x3ae7504c,0x3b6cd0ab,0x3bdf5a58,0x3bc4774c,0x3bd96516,0x3bf76a20,0x3c11ea9e,0x3b15847f,0xba42d0b3,0x3a6eed2f,0x3a827afd,0x39ea3725,0x3a363b0b, +0x3a73940f,0x3a5c3691,0x3a7f57c4,0x3a051b00,0x382ea080,0xba5043aa,0xbabfdd6a,0xbb2710cb,0xbb19c563,0xbb21eae6,0xbb04203c,0xbae5af7a,0xbad57a52,0xbab6e456,0xba7753d4,0xba061d74,0xb99800ac,0x3945e691,0x39cd8483,0x393ed3f6,0x39d41222,0x3a0c5cd6,0x3a430516,0x3aad008c,0x3afdd67f, +0x3b5fe89a,0x3b6ac678,0x3b814059,0x3b83634b,0x3b12c799,0xba77ffb3,0xba616478,0xbb012480,0xbb20ac9c,0xbb531b1f,0xbb455d8d,0xbb1eaaa1,0xbaf1c8de,0xbb1f0b18,0xbb1d80d2,0xbb18c83b,0xbae11d3d,0xbb2b7f41,0xbafe2967,0xbb21678e,0xbb0e0744,0xbb1bbd5f,0xbb085491,0xbaddc016,0xba9e7fa4, +0xbaee4144,0xbaa5c07d,0xba9afd50,0xba8396ff,0xba603006,0xb9c6cb2e,0xb862b2b0,0x39da81b7,0x3a6ecbb4,0x3ab05a43,0x3ad0d256,0x3afde46b,0x3aa97d4f,0x3a4701a1,0x3a1917ef,0x3855b478,0xbae6fb6d,0xbb175c58,0xbb34a743,0xbb0594e6,0xbaaae7b5,0xbb1e426a,0xbb20c0a7,0xbb869949,0xbb46f09e, +0xbb24e0dd,0xbb1746d8,0xbb097e94,0xbadcd54d,0xbae1ee37,0xba6d3155,0xba4d639b,0xbaa42c57,0xba4ba2d0,0xba7e867e,0xbb01fc27,0xbaea38a1,0xbac0d671,0xbaa7eb5c,0xba73fdf5,0xba24fd6a,0xb9d8dffd,0xb9d40d55,0xb915bd85,0x3847d667,0x39d27cfc,0x3a58825d,0x3ac55e3c,0x3a3dae2c,0x39e54bd8, +0xb9f6b2e7,0xba9b8548,0xba840685,0xba86cf7a,0xb9fb86ee,0xbabf6ba4,0xbb4bf037,0xba55c290,0xba84d358,0xbb2f8b7f,0xbb362348,0xbb41f57c,0xbb44910c,0xbb44444c,0xbb48c956,0xbb44acc8,0xba13df74,0xb9a2ca6b,0xbb338ac9,0xba4aad31,0xb9a19b8c,0xbaae9aff,0xba849aaf,0xba82faac,0xba7a9168, +0xba794a9f,0xba6e4fdd,0xba4faf6c,0xba35d7f9,0xba14828f,0xb9f86442,0xb9d8a26b,0xb9d33aa2,0xb9a977aa,0xba1f7cf3,0xba2efa87,0xba570031,0xba6b2a2a,0xbab107aa,0xbb21914c,0xbabe2463,0xbb1462dd,0xbb225c98,0x38cbc372,0x3b5911e1,0xbb205848,0xba0c92b0,0x3b363c2e,0x3b33b554,0x3b40f31b, +0x3b2e47f7,0x3b4a1d68,0x3b7c5c79,0x3b4b62ee,0xb978d6f0,0xbb033ded,0x3b717190,0x3998742e,0xbb007c13,0xbb1c1afd,0xbb0407b1,0xbb0d92f5,0xbb054c84,0xbaf5b408,0xbae05f0e,0xbabdf559,0xbadaf090,0xbaf0fcba,0xbb083015,0xbb0543ba,0xbb007845,0xbb11b504,0xbb0c1bca,0xbb00fdbb,0xbab8304f, +0xbad4de3e,0xbab2c7bc,0xbb62164b,0x3ada376f,0xba3d385a,0x3ad9dca0,0xba8fd8fb,0xbad890d8,0x398fbd9f,0xbaf92167,0xbb06184b,0xbaabdfe5,0xbaa135e8,0xba8c6bf6,0xb95f0c23,0x3b2368b1,0xba05ff3d,0x3999d57c,0xba8d2265,0xba3e3a2f,0xbb7466bb,0xbb48f193,0xbb512321,0xbb4194a6,0xbb11eef2, +0xbae72c26,0xbab338fc,0xbb0ac411,0xbb238c58,0xbb42f803,0xbb251bdd,0xbb324530,0xbb8892e6,0xbb7fc656,0xbb4f8020,0xba92a28c,0xbaa76e9d,0xba1112d2,0xbb0c1571,0xba396010,0xbb0cab59,0x3aad6e37,0xbacab12c,0xbab1e23e,0xba4fa651,0xbb01b330,0xbb668b2b,0xbb417777,0xbb3898db,0x39a21aec, +0xbadce5ee,0x39f6310d,0xb86a89c7,0xb99da492,0xba462ad2,0xbb0a5617,0xbb552c4b,0xbb941e6a,0xbb8138d9,0xbb77e01f,0xbb174b18,0xbab146c7,0xb88d6141,0xbac7292f,0xbb11e959,0xbb7c5a28,0xbb3a9ebe,0xbb560d6d,0xbb9e1cfb,0xbb899c24,0xbb3e0fea,0x3a006dd7,0xba30e0aa,0xb9792b4c,0xbb4c5b75, +0xb9c7a130,0xb9817bd5,0x3b33dbce,0xb9ae9f5f,0xba9844ff,0xb8b38c9c,0xbb2eb8aa,0xbb2be141,0xbb2639cc,0xb99a1af8,0x3a4aacdb,0xb90b5482,0x3b01ee68,0x3af35043,0x3a4ef083,0xbab4cdcc,0xbb26bf91,0xbb7dbd9c,0xbbb41e0e,0xbb9b5f1a,0xbb9fb923,0xbb1b2194,0xbaa966b7,0x3a270946,0xbb0614fa, +0xbb2a2b83,0xbb9734af,0xbb3a4c43,0xbb8351f4,0xbbfe348a,0xbbce1999,0xbb800f01,0x3ad41b86,0x3a5eee35,0x3afaabcc,0xba874714,0xb977cb2e,0xba623386,0x3b291c19,0xbaf3bbaf,0xbac5dd14,0x3ad6ba5e,0xb8e18e5b,0xb9c6c9b0,0xbab504eb,0x3aa61c1f,0x3b0cccdf,0x3aa384a4,0x3b041bec,0x3b00779c, +0x3a8d5e3d,0xba9c350c,0xbb27d260,0xbbac74fa,0xbbd24812,0xbbc92879,0xbbb66a51,0xbb226219,0xb9020d94,0x3b282c8c,0xb93f6a1f,0xbb31e34d,0xbbaca619,0xbb71f71b,0xbb8ab4fd,0xbbc60429,0xbbad9df2,0xbaf97aa5,0x3b6e6bbc,0x3ae2ac1b,0xbc3826f6,0xbc3aeda3,0xbbfb6d05,0xbb82f796,0x3a430e27, +0x3b3de7fa,0x3a84c07f,0xbb2154e2,0xbb3d5379,0xba851e7a,0xb8b3e977,0x3b204285,0x3ae1242e,0x3a697d94,0xba81e381,0xbb0901f1,0x3b369dcd,0x3b3baa73,0x3b85bb58,0x3b85ae28,0x3b3ce8e4,0x3add8dbd,0x3933485b,0xbb8af92f,0xbbcc92c5,0xbbe12d7a,0xbb8a075e,0x3a97fdc3,0x3bb51724,0x3aa11f0b, +0xbb3c3bc2,0xbbe21b5b,0xbc34507d,0xbc39dfc1,0xbc06badc,0xbc383442,0x3b2bd7a0,0x3bd1fd92,0x3bd9d52b,0xba9017c1,0xbbca06e6,0xbc10cb7d,0xbbb3e31c,0xbaa6e8ca,0x3a530269,0x3a3642c3,0xbad858c0,0xbb153655,0xbad18419,0x3a35a342,0xbaa01cde,0xbaa3614f,0xbb0be28a,0x39bd53f0,0x3af8ac81, +0xb9fceaec,0xbb7ddbff,0xbbb449e5,0xbbe39d84,0xbb9b04f0,0xbaa5537e,0x3bcd6e07,0x3b758588,0xb9525446,0xbbca9072,0xbb7de65c,0xba23a5e6,0x3baa94b5,0x3be71fd8,0x3bafbf48,0xbb4dd55b,0xbaa19946,0xbbd313b0,0xbc9511de,0xbbfa809f,0xbaaa9b1a,0xbbcbacb9,0xbad00d84,0xba2aadc8,0xbaaa4338, +0xba551d23,0xba768e69,0x398049cb,0xb9cd687d,0xba50ca34,0xba7ad02d,0xbb05830f,0xba8fd30f,0x38e0747d,0x398b063a,0x384b7949,0xbada74ce,0xba4a06e5,0xba909689,0xbade4f26,0xbb832337,0xbba57b50,0xbb85eae7,0xbb9cdfb2,0xbb86f1a2,0xbb819c65,0x3aa582ff,0xbaec0991,0xbc59aa98,0xbc17427e, +0xbc20dac7,0xbc18223c,0xbb7de75a,0xbbd755de,0xbc3f0257,0xbb5c16a8,0xbb18e19c,0xbaa12d23,0x3af0ffff,0x3ade05f6,0xbae1c871,0xbb049c0e,0xbaac3510,0xb95ba987,0x39b33dc4,0x3926a055,0xbaafcb6a,0xba11a269,0xba8bf252,0xb74e224f,0xba895d86,0xbac673da,0xbb2cc55c,0xbac13361,0xba9945af, +0xba4382ea,0xbb2f6200,0xbb8366a0,0xbbc51d89,0xbbc9c386,0xbba66f75,0xbb600a46,0x39d3b1c8,0xbb863a0b,0xbc8eef22,0xbc815ae6,0xbc826e4c,0xbc4e94ac,0xbbb9bc68,0x3b63c824,0x3c810f10,0x3c233b2c,0x3bba2d70,0x3b30ad02,0x382a64a2,0x3a717a2d,0x3aca1522,0x3a842b43,0x3a4665c4,0xb9b5fd26, +0xba7c4663,0xb9c5e812,0x3a091ad1,0xb9826e38,0xba020c96,0xbadf33aa,0xbb259783,0xbb27f529,0xbb4ba916,0xbb69f96e,0xbb87101a,0xbb633fd9,0xbaf079b7,0x3a273c76,0x3b344f71,0x3ad07df2,0xb9e0b526,0xbb94e482,0xbb9fd8ec,0xbb98546e,0xbace5560,0xbc020f03,0xbc2180a9,0xbc5729d9,0xbbb60f7c, +0xbc9687f1,0xbc31bb2b,0xbb50a031,0xbb8238f3,0xba555ae2,0xba0b95d4,0xba1e47cf,0x3a02b529,0x39e11f77,0x395b8f22,0xb96966a8,0xb9ff5262,0xb9c43414,0x378ca198,0xbaedb737,0xbb391731,0xbb72e222,0xbb909ba5,0xbb90819c,0xbb7718ce,0xbb39404e,0xba1c690f,0xb883bdb4,0x3a4cca93,0x3aa5a8fe, +0x3a7bbc2d,0x3ab28013,0x3a9f7e80,0x3a15ef88,0x3ad70361,0xba2d3fb3,0xbbb393a7,0xbbce7cc2,0xbc116f98,0xbc4eb51d,0xbc712edb,0x39a6f59b,0x3b3c6129,0x3bb3df78,0x3b8e4ba9,0x3b8fae48,0x3b809603,0x3b63f21e,0x3b63a31b,0x3b57799e,0x3b422a81,0x3b07b0ac,0x3aaef71e,0xb828f9ed,0xbab778eb, +0xbb0bde0d,0xbb17ecd9,0xbb0e4a79,0xbaedbf84,0xbaa7181b,0xbadc42c8,0xbaffc2f2,0xbb18f621,0xbb0e1c06,0xbafb7bed,0xbadabcb7,0xbad9af3c,0xba80746f,0xb8f1293e,0x3a35a1d4,0x3a491eb0,0x3a2efae1,0xb9bebe1d,0xb77cd37c,0xb98790c4,0xb9be6bc2,0x395e5226,0xbb308316,0xba543baf,0xbb02c95c, +0xba50a32e,0xba9ee876,0xba5d534f,0x38f34445,0x3a0785c9,0x3a16d8ac,0x3a12c3c2,0x38df11fb,0xb96518d3,0xba997b61,0xbb1de997,0xbb394f77,0xbb332773,0xbb2dfb79,0xbb29e05f,0xbb2d90c9,0xbb062587,0xbb182447,0xbb004f58,0xbaf1bbea,0xbade393e,0xbad1bf8c,0xbace2ad4,0xbae09a61,0xbad3e233, +0xbaa30418,0xbacd34b2,0xbb099f41,0xbb3bd780,0xbabb00c3,0xb8946591,0x392ede10,0xb9c8d37f,0xbb44685b,0xbb815776,0xbb170295,0xbb626281,0xbb50b25c,0xbb2b3aa4,0xbb1e5668,0xbb0ca09b,0xbb3067a5,0xbb3f671b,0xbb616078,0xbb77836f,0xbb47e25e,0xbb6e7f75,0xbb1e7d6f,0xbb4f47a7,0xbb509219, +0xbb489cb7,0xbb2bc4cb,0xbb630ee9,0xbb3229e8,0xbb16f710,0xbaf2bcf8,0xbaba7968,0xba8088b0,0xb9b91383,0xbaabdefa,0xbb05de82,0xbb4706d5,0xbb4b5bda,0xbb4cd8eb,0xbb446470,0xbb417375,0xbb5e5b24,0xbb4c6825,0xbb4c040e,0xbb88150c,0xbb935df4,0xbb39215b,0xbb89833d,0xbb879baf,0xbb989a6c, +0xbbb1c93c,0xbb940ed5,0xbb9b7195,0xbb7bb55c,0xbb54a2d4,0xbb4bb746,0xbb606b06,0xbb4361fd,0xbb71d9f5,0xbb5810ab,0xbb172703,0xbb5117d1,0xbaf190bc,0xbb0f9deb,0xbad4f6b9,0xbafbda4e,0xbae1908a,0xbad5741d,0xbacabb9a,0xbab96c38,0xbac8491a,0xbab91fd8,0xbad450dd,0xbb0f497b,0xbb36a31b, +0xbb73b993,0xbb7b95bf,0xbb517177,0xbb6a6c7b,0xbb89f3f5,0xbb3be8c3,0xbb54ce91,0xbb5385d3,0xbaf2da1f,0xb9a0715c,0xbb5c0cc8,0xbb19aad0,0xba2db3eb,0xb9cd5527,0xba14292f,0xba1a35fa,0xb9b2e534,0x391576d1,0x39b855b0,0xbb1c7592,0xbb5ea954,0xb9115dbd,0xbb0e5cbf,0xbb51edea,0xbb3a4ec2, +0xbb363557,0xbb2e6f3a,0xbb247df8,0xbb1d914f,0xbb13aa11,0xbb09e181,0xbb1a4eb0,0xbb2bf3a0,0xbb3b383a,0xbb439491,0xbb39a05b,0xbb3c47ac,0xbb404f5f,0xbb422fb3,0xbb4b757a,0xbb4614f0,0xbb8997a7,0x3b5d581d,0x3b289116,0x3b6de7a4,0x3b0e1c0c,0xba8c6534,0xbb44d95c,0x3b04f028,0xba1b0ab9, +0xbb55a010,0xbb7e8e1d,0xbb8a10b9,0xbb78a976,0xbb73c577,0xbb8ffe27,0xbb6c6133,0xb9edc7d3,0x3af996ba,0xbb6d7921,0xbaa54f80,0x3aa30d11,0x3b4412eb,0x3b1e9062,0x3b35d375,0x3b3dc996,0x3b51e8c6,0x3b562cd5,0x3b533c8e,0x3b43f692,0x3b3a0848,0x3b29920d,0x3b3d2e8e,0x3b3d1c8f,0x3b35f412, +0x3b3868f3,0x3b355a65,0x3b2ab33e,0x3b30fbfe,0x3b590084,0x3b63ef36,0xbb4a599c,0x3aab56f9,0x3955960e,0x3a483281,0x39b59a49,0xb8359ae9,0xb9156fef,0xba67f47b,0xbaa385cc,0x38ee308e,0x3ab5bb83,0xb89d33ba,0xbad119ac,0x3b092f82,0x39d8286c,0x3a4354fe,0xbaacfdc2,0x3b1f9b70,0x3b2ecec0, +0x3b4d24fb,0x3b827bc9,0x3b91b25d,0x3b9e99d9,0x3bb63fb0,0x3b963d9d,0x3b904b47,0x3b836369,0x3ba6b93d,0x3b9c239d,0x3b6d89df,0x3b7949b4,0x3b776d21,0x3b66fe81,0x3b71850f,0x3b89eb2b,0x3b60c834,0x38966e28,0x3b14eec5,0x3b010bdb,0x384c4d45,0xbabe3d40,0x3af384fe,0xbaf41dac,0xba3063ee, +0xbb029776,0x3aec701c,0xb91616d7,0x3a973bae,0x3aaa8fe8,0x3b19b6a9,0x3b138a4e,0xb91df860,0xba196bc3,0x3a2ea3ec,0x3b4dc951,0x3b65f004,0x3badfc36,0x3bcec158,0x3be16677,0x3bf06579,0x3bbc0400,0x3ba459d2,0x3b85b636,0x3bb96aff,0x3bbf48d0,0x3b8cc1d3,0x3b9c1e7a,0x3b8dca06,0x3b7375ca, +0x3b82eb1b,0x3b8e9280,0x3b0331b2,0xbad81020,0x3a10a7a7,0x3b6b7a10,0xb902c44c,0xbabbbe19,0x3aceb504,0xbb34d992,0xbb276b09,0xbb45cedb,0xb722639e,0x3abb7f7c,0x3aa294aa,0x3b19c678,0x3b49ce2e,0x3b318006,0x39e1b04e,0xbacae783,0xbaaa5e86,0x3b39a167,0x3b47704a,0x3bbc40c8,0x3c0805fe, +0x3c21cf73,0x3c268271,0x3bec6e38,0x3bde0491,0x3bc0b1cc,0x3c0a2784,0x3c067771,0x3b990aa9,0x3bb9918f,0x3ba50e93,0x3b9a79ca,0x3b9d6777,0x3bb96869,0x3b8afec5,0x3a1097f8,0x3a9db94e,0x3b99525d,0xba900557,0xbac56a0c,0x3aa384dd,0xba54b394,0xba4da568,0xbae070fc,0x3a66ba2c,0x3b155c99, +0x3acd97c3,0x3b464bc3,0x3b4f1bd4,0x3b13e576,0x3aad0b3d,0xbb57519c,0xba5d8d37,0x3b12dd9e,0x3b870536,0x3bf9eab3,0x3c1e5867,0x3c39c908,0x3c3d6e0b,0x3c0cb781,0x3bd260f3,0x3b940d48,0x3c07ddde,0x3c08d9c8,0x3bb90692,0x3be192a2,0x3bc9b609,0x3ba2e7ce,0x3ba7fd10,0xbad8875f,0xba42524c, +0xbbc6844d,0xbba066fb,0x3a480e39,0x3b0dd258,0x3b3bca7c,0xba9f33ee,0xba9da037,0xb9e8ee6a,0xb870470d,0x3af7dc14,0x3a94b75c,0x3ac6f391,0xba99a012,0xbac08751,0x3b12dcec,0x3ba24f27,0x3bcfff4f,0x3c1ac73e,0x3c33072e,0x3bea903b,0x3b9052e6,0xbaeca5d8,0xbb1abc38,0xbb7f9df0,0x3b8d9f9c, +0x3c2e0509,0x3c7db429,0x3c40985f,0x3c201f4a,0x3c03aacc,0x3b19d0c8,0x3abcfe69,0x3ae7af90,0x3a3b1c24,0x3bcd4a8d,0x3c291b7e,0x3bda8727,0x3bacac0a,0xbbbb99e9,0xbbc781cc,0xbbc36bd5,0xbabaf9a5,0x3a031bc4,0x3a16b509,0xba91206b,0xbafe91d9,0xbae10a01,0x3a649776,0xba117242,0x39e0ab9e, +0xba606158,0x3ae0b4c5,0x39d17bf0,0x3a953935,0x3b8113f0,0x3b5a8f61,0x3bda2c8a,0x3b802e53,0x3b99ef95,0x3bff7b9f,0x3b66612d,0xb97418c2,0xbb9fd168,0xba0845da,0x3b2d9280,0x3bbcfd79,0x3c2134da,0x3be5024c,0xbb843a99,0x39ab9391,0xbb3f21bd,0xbc77b830,0xbbd4b654,0xbac98e27,0xbb850c04, +0xbac6a530,0xba88c054,0xb8c56982,0xba029c44,0xb9bcffb1,0x399c96a4,0x39678d49,0xb96dfa5f,0xbaaeb454,0xba492c65,0xba087914,0x3a03c244,0x3ad857ab,0x3b09d1d3,0x3b489621,0x3b496876,0x3b1bad02,0x3b2d804b,0x3b6157a5,0x3b881919,0x3bc942ca,0x3b9d8948,0x3b58e6af,0x3ae2c7aa,0x3bf0c5f0, +0x3c0cd556,0x3ae0b192,0x3bd911bc,0x3ba472cb,0x3a3be20d,0x3ae3f8ba,0xba922b97,0xbc2e6df8,0xbbe57e75,0xbb20619d,0xba90678b,0x3ad697f7,0x3b06c12c,0xba01fad0,0xbaba6817,0xba89d634,0x3872ca12,0x3a22e95e,0x39fb98bf,0xba91e779,0xb97bdb68,0x37a25238,0x3a8b6373,0x395a0894,0xba436c3a, +0xb9209d4b,0x3ae1f11a,0x3af36180,0x3b13ac30,0x3b8a8fa7,0x3bad6dd2,0x3ba6c3b2,0x3bc2988e,0x3b9f4375,0x3b9ba047,0x3c004a86,0x3bdac1c9,0x38ab275e,0x3ba19d20,0x3bc953c1,0x3c09e433,0x3b9dde4b,0x3c54a59f,0x3c83dea7,0x3c529e00,0x3bda5e60,0x3b32c86f,0x3aeff530,0x3afbbe3a,0x3abf1e7e, +0x3ab444f5,0x3a590be4,0xb920d8d2,0xba1eca48,0xb9921c69,0x3a91d648,0x39966414,0xb7d2dbb2,0xba82ed2b,0xba8bd24f,0xbb0ef0e1,0xba8d8f4b,0x39f97bb3,0x3affa492,0x3b88f357,0x3b7fbca7,0x3b8ffde8,0x3b99e1f5,0x3b72c68d,0x3b031200,0xbb16e3b2,0xbb1d0a1b,0xba59178c,0x3b521fe6,0x3bab6205, +0x3bf0d6eb,0x3c338bcf,0x3c0ff94b,0x3aa32052,0xbbc4c6c8,0xbc2cb1c2,0xbaacc150,0xbaeafda0,0xba2009ba,0xb9a40dc5,0x3adda637,0x3a257553,0x39f007e7,0x37164b58,0xb9bfdfb0,0xb9b324a3,0x3994593f,0xbabad5e5,0xbb0b6707,0xbb487b44,0xbb66063d,0xbb6001dc,0xbb632a72,0xbaede85e,0xbad5ad17, +0x38ef6cbb,0x3ac896db,0x3b7f2562,0x3bdff352,0x3c000afc,0x3c10d2e8,0x3c2dfb08,0x3c29eff0,0x3c0eb681,0x3be8b375,0x3c029bc1,0x3bcda053,0x3b8342aa,0x3ac4f87c,0x3bf34950,0x3c03dce2,0x3b96eef3,0x3b838f81,0x3b94f766,0x3b5e27f7,0x3b66195f,0x3b53d125,0x3b6da3d7,0x3b5c21f4,0x3b3455ee, +0x3b1aad01,0x3a86b502,0xba0e9a75,0xbab4c8b2,0xbac59641,0xbaa47011,0xba864d0e,0xbac5ee2b,0xba8229b8,0xb94922f2,0x39f4e4ae,0x3a6292c4,0x3ae3c7ed,0x3af8e06d,0x3af23051,0x3b0f64dd,0x3b1921cc,0x3ad72bcc,0x3b44c3b7,0x3baa0f82,0x3c132f42,0x3c010b0f,0x3bef40a3,0x3be711aa,0x3be8bfda, +0x3b7eba76,0xbad247c8,0x389b53f7,0x3a203e07,0x39e4c22d,0x3b072200,0x3abbe00d,0x3ae04279,0x3ac3cfb9,0x3ab7cbb5,0x39db0c55,0x38825b61,0xba96b596,0xbaf7c34d,0xbb09dcd1,0xbb1fe18a,0xbb2ab25c,0xbb083b4c,0xbac9d52e,0xbaf4fc9a,0xb95c157f,0xb9d5ceb8,0xb99739c8,0x395ee90f,0x3a28e9a9, +0x3a3cad64,0x3aa39c73,0x3adcf6e7,0x3b0ca805,0x3b292822,0x3b4c3756,0x3b9ac3cf,0x3b8bbeb0,0x3b8d73e1,0x3b93b71d,0x3b3b09e2,0xb982c23b,0x38c6b076,0xbb18a380,0xbaca45bb,0xbb33319a,0xbb34a901,0xbad9ec34,0xb9843e7d,0xbac091b4,0xbabb3674,0xbb293a2d,0xba79c60d,0xbb27b409,0xbae5f503, +0xbb418923,0xbb0a8824,0xbb1e0b1d,0xbb0cc760,0xbb3c7290,0xba91d127,0xbaa49979,0xbab0b489,0xbaa271ba,0xba8b253b,0xba50822c,0xb9c5dea5,0x314165ec,0x39c5c4a7,0x3a5a945b,0x3a9a4074,0x3ab4302d,0x3aec08db,0x3aab7a95,0x3a4fb637,0x3a25ff71,0x389f5089,0xbb0ea16e,0xbb288e9a,0xbba5a2a5, +0xbb36169f,0xbb23c538,0xbb6104e7,0xbb45d77c,0xbbad0feb,0xbb5cdcdc,0xbb6d7658,0xbb5da6f5,0xbb5d1e49,0xbb14743a,0xbb29f60f,0xbaf2c60a,0xbaecea6b,0xbb2fd6d0,0xba9287f7,0xbb1652b2,0xbac798e1,0xbadb6307,0xbaaa724b,0xba9930b6,0xba7bac0f,0xba4fa227,0xba33fabe,0xb9fe3481,0xb91d5e81, +0x38c4a0d1,0x39ca40e2,0x3a4f3436,0x3aa08b72,0x39ec47ab,0x393347c0,0xba259cf7,0xbaac5721,0xb9f4f790,0xb9602f4c,0xba878e86,0xbb3bda3a,0xbb860212,0xba8165c2,0xbb08fc79,0xbb80bc48,0xbb8cd57b,0xbb8c3b15,0xbb879f6e,0xbb8d90fb,0xbb99d439,0xbb99021d,0xbb00f503,0xba1760a0,0xbb81d099, +0xbb15bc8b,0xba65c652,0xba266de0,0xba11de5f,0xba0d0776,0xba01f887,0xb9f3b359,0xb9d4cd49,0xb9a4e9aa,0xb98b0235,0xb9487d8d,0xb919a769,0xb8eab614,0xb8be45f2,0xb78f7498,0xb96498a5,0xb9855406,0xb9d569d9,0xb9ee1945,0xba64fbd4,0xbab80c36,0xba8b91a1,0xbb231966,0xb917a425,0x3b379a79, +0x3b81fb66,0xba1fe3c4,0x3aefff21,0x3b8a3d21,0x3b82ef51,0x3b82320f,0x3b5d0847,0x3b778597,0x3b965f48,0x3b784781,0x3b17ad88,0x398e6de7,0x3b871a92,0x3b31893c,0x3999c6f2,0xbb1c6b22,0xbac4bbfe,0xbacb453a,0xbab9f185,0xbaab1004,0xba9da46c,0xba894526,0xbaa1d4e0,0xbab63b3c,0xbad1955b, +0xbabe89b7,0xbab1e5df,0xbacf3901,0xbab74829,0xbaa5638a,0xba6f99bf,0xba98f38b,0xba913b37,0xbb0e946e,0x3b8e8d6d,0xb89d69b4,0x3b50bc17,0x377b89d1,0xb821493b,0x3a9d44d3,0xbadf508e,0xba0dd562,0xb8a5949e,0x3a0344bd,0xb9825986,0x3a8b47bf,0x3b809a8d,0x3a5d46a7,0x3b0d550f,0x39892290, +0x3adad698,0xbb0fccff,0xbb1ee4dc,0xbb03cb06,0xbadc435d,0xba916271,0xba4857ac,0xb9ef3242,0xbaa2707b,0xbac97f34,0xbb006de9,0xbac1d8b3,0xbad20a83,0xbb353e85,0xbb02cd68,0xbab573f3,0xb8c7d8f9,0xb991a8d0,0xba665c35,0xbaab6b3e,0x3ac97d4a,0xbaa6b6c2,0x3b42d19f,0xba26eeb5,0xb88960b9, +0xba25a5be,0xba87eb7a,0xbb7aa437,0xba6bd0ab,0xbb436e02,0x3a42325d,0xb9c019b1,0x3acebb89,0x3a761d46,0x3aad3ed9,0x3a392a3d,0x380bfa60,0xbb05fd5b,0xbb72eaf7,0xbb0d80e1,0xbafbb75a,0xba2c4292,0xb93caa52,0x3a27082c,0xba30ca60,0xbab47251,0xbb2efe9c,0xbabe04e1,0xbac1d026,0xbb36d279, +0xbab5d4ca,0xb9fe9384,0x3ab6cb94,0x393414ab,0xba2f2d91,0xbb080e81,0x3b0140f4,0x3a115483,0x3b709865,0xb9960262,0xbaafbfcb,0xb872d347,0xbb5f5733,0xbb6fe187,0xbb4be095,0xbaaa44e8,0x3a7a2836,0xba1233ec,0x3b321744,0x3b077f61,0x3b02b44c,0xb90c4570,0xb9fe6360,0xbb0c5380,0xbb92dd1f, +0xbb2e4096,0xbb083bb5,0x38599b66,0x3a7d0a94,0x3b07ec80,0xba124774,0xba8a7a7c,0xbb2bb084,0xba926cff,0xbacd03a2,0xbb9bd2de,0xbae2121a,0xb8f88b4b,0x3b388aac,0x3b16f08a,0x3a300dd3,0xba8b2ee1,0x3ac75de6,0xba18a473,0x3b672ee8,0xbb085813,0xbb1913f0,0x3a2c204d,0xbad1676d,0xbaf7d488, +0xbb4cc9af,0x39cee18e,0x3ab7c251,0x3aa3cb66,0x3af03770,0x3b1dd557,0x3b2f3b15,0xbacb6ffe,0x3969759a,0xbb7f98ee,0xbba4ce9e,0xbb4ca96f,0xbafe6551,0x39f03dfa,0x3b03dbfc,0x3b466ecd,0x39ca56f1,0xbaf5c112,0xbb84aba3,0xbac55303,0xba9793d1,0xbb2ea6f7,0x3728158a,0x3b0bfed8,0x3b8cc0c2, +0x3b19530c,0xbc0cace1,0xbc17fdcf,0xbb898a7f,0xbb1e2824,0x3a37433e,0x3b62de69,0x3b0ed1ba,0x37b34ab9,0xba9a8239,0xba47d69a,0xb9a408cf,0x3a62546b,0x39a04804,0x3af7487c,0xbade6e87,0xbb541d97,0x3b158a32,0x3b0ac50e,0x3bbd554a,0x3bad45fb,0x3af20340,0x395318ed,0xbb5faa1d,0xbbbb4a4e, +0xbbdcca0d,0xbbf418c1,0xbb04bb11,0x3b448b73,0x3b9c742a,0x3aa88260,0xbb3aeab1,0xbbc92b12,0xbc0e302f,0xbc0df3d7,0xbbbfb0c8,0xbc0cdc53,0xbb05b3b4,0x3bd29c88,0x3c4fc1ea,0x3af510b6,0xbb4b43d4,0xbc01cace,0xbbc46e63,0xbafe7dc1,0xb9da1967,0x39642b54,0xba988893,0xbaf0d16d,0xbae854e4, +0x38df0e29,0xbaa49175,0xba89d4c9,0xbaa1527c,0x3a8d3570,0x3b579929,0x3b079a6a,0xbb38d572,0xbb41a12b,0xbb73fb98,0xbb06963b,0x3a84b925,0x3bdd97dd,0x3b33c34b,0xbacccb18,0xbc04e1d1,0xbb4c3620,0x3aaf5fcd,0x3bbd7bb6,0x3c00601e,0x3b996148,0xbbb04195,0xbb6c8ce1,0xbb8db7f6,0xbc877209, +0xbc2d318e,0xbb6fe759,0xbb74d1d6,0xbb343441,0xbb0a455a,0xb9334ca2,0xba080388,0xba4b865a,0x397add9d,0xb8b53b96,0xba02ea6b,0xbacc8b7f,0xbac2219d,0xba30e7be,0x394d830e,0x3aa382fd,0x3af7534b,0xb958c2b9,0xba3d7036,0xba60c138,0xbac430a5,0xbb677bed,0xbb99c7fc,0xbb4122fa,0xbbaaf5bc, +0xbba5fb4e,0xbb7c512e,0xbac48d09,0xbb4b528f,0xbc002b50,0xbb66e8ef,0xbb7b1862,0xbbe95f06,0xb93b2f13,0xbb4dabb4,0xbc397257,0xbbb69625,0xbb8dc1c0,0x39593f97,0x3a916aa8,0x3ae25ab3,0xb9789641,0xbacc70da,0xbaa4aeab,0xb939ebc4,0x394fcc40,0x39866e36,0xbaad2a1e,0xba17ba07,0xba2f184d, +0x39c099c2,0xb9ee4cb2,0xb7582c30,0xba137aec,0xbad29e62,0xba6f4aa3,0xba133b03,0xbb295d7b,0xbb688b35,0xbb9fc478,0xbb99a95b,0xbb772f30,0xbabe6ef2,0xba85214d,0xbbafefc5,0xbc544e04,0xbc20f474,0xbc0a00e1,0xbbbf932f,0xb9ea9309,0x3b85d06f,0x3c7b37a4,0x3c5426ed,0x3be6a091,0x3b36d735, +0x3a566c07,0x3b04c742,0x3adccbd3,0x3a4ecd4d,0x39fd73b7,0x386c6f79,0xba80f726,0xb9b85574,0x39efdced,0x38b26393,0x395fd1b3,0xb9d92450,0xbac06307,0xbab586e9,0xbb38dcbb,0xbb3f93ad,0xbb318221,0xbab3701e,0xb972a07c,0x3afe910f,0x3b40a6f7,0x3b126520,0x39d74783,0xbb569ca4,0xbb1ef992, +0xbaf4e759,0xbaba78b6,0xbba108b7,0xbbc717f6,0xbbf20f29,0xbb0e46eb,0xbc2735a5,0xbbb56eb2,0xbae7e83f,0xbb4d4d6a,0xba07256e,0xb9e1f364,0xb9fdf449,0x3a57c8fd,0x3a0b4a28,0xb9f6f536,0xba25d643,0xba7a4f28,0xba091e48,0xb9df0e5a,0xbaad43ba,0xbb1371bc,0xbb8384fe,0xbb7802d5,0xbb6febba, +0xbb5fb5e1,0xbb609de1,0xbaaeb541,0xba1982be,0x3a40c3ac,0x3af2341a,0x3b16930f,0x3b584088,0x3b69f34d,0x3b69b6f1,0x3b46d91a,0x392bda64,0xbb71ee89,0xbb71efc2,0xbb9a676b,0xbbf945ca,0xbbedbaa2,0x3a2b59fb,0x3b885804,0x3bd15c94,0x3b8fbb29,0x3b8815ad,0x3b566bd7,0x3b1f0a4d,0x3b33d0a7, +0x3b1507ca,0x3b40e45e,0x3adc33f2,0x3b078a79,0x3a291470,0xba2a6098,0xbac2791e,0xbad8999c,0xbae2ef72,0xbac2de7b,0xba4dc8bf,0xbad11a56,0xbb05d295,0xbb12a821,0xbb0cd2df,0xba7b53c2,0xb9cc8def,0xb8eb69fe,0x3a0d9794,0x3a6cff94,0x3a957d4d,0x3adbfb75,0x3b062ebf,0x3acf8ecc,0x3a7fb68a, +0x39e918b3,0x39ae7743,0x3a14f044,0xbadb67b1,0x3aa0088f,0x38fa0ecc,0x3a6f92f2,0x3a872895,0x39b4f75c,0x3ae25e2e,0x3acbb4c2,0x3adc79ff,0x3a973a36,0x3a5970ee,0x3977239e,0xb9ea16b4,0xbaf9a9be,0xbb16ff8a,0xbb1ec7dd,0xbb07528b,0xbaf7a57f,0xbb08c381,0xba8adb5e,0xbb20ea31,0xbb00f429, +0xbb0ef102,0xbaca4b58,0xba957d80,0xba63e4e7,0xba21a62f,0xb94c07e0,0x39d0d9c1,0xb9360ec1,0xba550a7c,0xbab0cf93,0xba171eba,0x3990f2e1,0x396d5227,0x3a22d321,0xbb1eb2e9,0xbb35c1fe,0xb90e4a86,0xbaae4061,0xb9eed5ef,0xb88a0ec5,0xb91dac21,0xb98dff8e,0xba4f265f,0xbac9a14d,0xbaba0e7f, +0xbb37e0d4,0xbb19caf7,0xbb3f4dbf,0xbaedfe99,0xbb317b61,0xbb3cb707,0xbb335ff4,0xbadb4b90,0xbb475c0b,0xbb501900,0xbb2559e5,0xbb27ba89,0xbb00a6ed,0xbacd6eca,0xba679440,0xbacd8624,0xbb022165,0xbb196d77,0xbb258122,0xbb283abe,0xbb28e4f5,0xbb2b4da3,0xbb374832,0xbb306e77,0xbb1fcc54, +0xbb8486dd,0xbb913e99,0xbb1c3a2b,0xbb9334fc,0xbb893ef9,0xbb93bc11,0xbba91238,0xbb8a9d03,0xbb975f4b,0xbb4e7c41,0xbb2875cf,0xbb0a26f4,0xbb291fc4,0xbb07ccd1,0xbb227f99,0xbb0e5c0a,0xbab8ef77,0xbb33ac32,0xbaa3aee2,0xbb3efa46,0xbb0ff684,0xbb201de1,0xbb10ae06,0xbb0df6f3,0xbb0bc368, +0xbb0444bb,0xbb1ef045,0xbb249453,0xbb37fbc3,0xbb5a98e5,0xbb6c3d8b,0xbb89d3a1,0xbb88fe3c,0xbb6573d9,0xbb75529d,0xbb899801,0xbb2efcc3,0xbb4299f6,0xbae22e6f,0xb8fe8358,0x39ddffa4,0xbadfbb64,0xb9d32819,0x3a15e20d,0x3a488406,0x39c49267,0x38f51b2e,0x39a493d7,0x3a46aeeb,0x3a730826, +0xba5b95b1,0xbb1c83bf,0x392a4c1d,0xba4a3d38,0xbb0d03fb,0xbb478599,0xbb3663f2,0xbb329880,0xbb2b201c,0xbb263b9f,0xbb1cd031,0xbb11f740,0xbb1dc679,0xbb25d01b,0xbb30d461,0xbb35e492,0xbb31832f,0xbb393726,0xbb3a9643,0xbb3806f3,0xbb3e889f,0xbb37e06d,0xbb70d79a,0x3ad74792,0x3ac291d4, +0x3b2ae805,0xb9b3ca1c,0xbb27f06b,0xbaf2e1fa,0xb916b160,0xbb0b5dd7,0xbb393ab7,0xbb5260ac,0xbb54f3c3,0xbb30070b,0xbb29a8cd,0xbb4175b5,0xbb1e6f23,0xbb0687b1,0xb9cc0889,0xbb00f642,0xbb1a0293,0xba488359,0x3b07e6a9,0x3ab268a9,0x3accb14e,0x3ae84745,0x3b04902c,0x3b07bc51,0x3b014ba6, +0x3ae87947,0x3ad0838f,0x3ab671b7,0x3acf0771,0x3ad02ee0,0x3abd754c,0x3abb9951,0x3abcad1b,0x3acb8fba,0x3ac89ee6,0x3b1a1c20,0x3aa6c92c,0xbb85265b,0x3980b251,0xb9ea6091,0xba03ff62,0xbaa97803,0xba4087a7,0xba575f96,0xbb1e93ff,0xbb07ec17,0xbad44fb7,0x37ca8563,0xba809b7a,0xbade15a4, +0x3a2de67d,0xb9e45e50,0xb9245d1b,0xbb20e5b7,0x39b73df9,0x3abc5152,0x3acab02c,0x3b251cfb,0x3b353eee,0x3b42d51a,0x3b5376aa,0x3b297ed0,0x3b2271fd,0x3b16adbc,0x3b357286,0x3b1cc5b7,0x3ac513aa,0x3ac3d1d9,0x3ae79483,0x3b225b81,0x3b16ecee,0x3b4f04c0,0x3acb4ea5,0xbaf68796,0x39f616f1, +0x3a232d18,0xbaa42def,0xbb33ccba,0x3a48239b,0xbb56027d,0xbad19f7c,0xbb778a42,0x398a0a05,0xba7761f4,0xba106b89,0x3983697b,0x3a9ddb2d,0x3a9ee677,0xba2dc0bf,0xbad60b8b,0xb9af21b1,0x3ae27dc7,0x3ad73311,0x3b6b29d6,0x3b8ee77e,0x3ba0a1bc,0x3b96cbdc,0x3b61edd3,0x3b30454a,0x3afa12d7, +0x3b3c9dcd,0x3b35f7a1,0x3ac3ebd1,0x3ad4a425,0x3aea44f4,0x3b3d1d95,0x3b20b7c7,0x3b8231b6,0x39920e6d,0xbb806ee2,0xbaa60eaf,0x3b2b5dfb,0xba9093cc,0xbb0d20db,0x399af37e,0xbb6ed07b,0xbb76792a,0xbb626b50,0xba49daca,0xb8920b44,0x3a49c46f,0x3ab649a9,0x3b1ed10f,0x3b1fdea5,0xb7949014, +0xbb1fbc1f,0xbb1c9102,0x3abb65ce,0x3aae1b00,0x3b7f6666,0x3bb93a98,0x3bd66398,0x3bbe8268,0x3b839c94,0x3b785dfa,0x3b69ea1d,0x3b8ebe71,0x3b6c1e73,0x3a9849b2,0x3abb761e,0x3b0a12b1,0x3b94fc32,0x3b680e3f,0x3b914831,0x3b2e10b8,0xbacd79c1,0xb944ee0f,0x3b772d64,0xbb121b1d,0xbb29c83b, +0x39ed9952,0xbb11558e,0xbb278f0a,0xbb2b9bd5,0x38202057,0x3adc93ee,0x3aa8d9a4,0x3b34e354,0x3b40cb10,0x3b27a722,0x3b065d0a,0xbb6f010a,0xbabae12e,0x3a88333a,0x3ae6b37f,0x3baf99d9,0x3be96191,0x3c09159e,0x3bf892c5,0x3bad4af1,0x3b5264f3,0x3af33ad9,0x3b868dbb,0x3b67dcc3,0x3ae27029, +0x3af7634d,0x3b287c6e,0x3b9a8571,0x3b6c1f4b,0xbb0ad46f,0xbb289cbd,0xbc12ae18,0xbbe05275,0xba4a70b5,0x3ae93fed,0x3b4dd3ec,0x3a33e63e,0xb731cf98,0xba105b74,0xb9f28263,0xb88cc10d,0xb8779766,0x3b1b31b8,0xbb12e477,0xbb2d21d4,0xb99b565a,0x3b53e6db,0x3b76d6b7,0x3bc92210,0x3be80f52, +0x3b924214,0x3b3e733b,0xbb413fe4,0xbb14cfed,0xbb131029,0x3bf42dd9,0x3c525d01,0x3c596627,0x3c1d55ab,0x3bb1eb82,0x39908138,0xbb087143,0xbace6668,0xb9a4acef,0xba004d84,0x3b90d861,0x3bf79b75,0x3bd72536,0x3be3bd52,0xbbae2826,0xbbd255bc,0xbbd494a1,0xbb39a28a,0xba19b2cd,0xb886a834, +0xba78753f,0xbaac238c,0xbae7ab87,0x39915eb9,0xba75b114,0x3a11d108,0xba6463fe,0x3af3c2cf,0x3a3becba,0x3aa4aab6,0x3aec2ba8,0x39c380dc,0x3b487294,0x3b3b786e,0x3b8711b3,0x3bc36194,0x3a575863,0xbb1fe29f,0xbbf7ccb1,0xbaac1343,0x3b073f4e,0x3b867d65,0x3bbe442f,0x3b337b86,0xbbc2479e, +0xbb1b8e4d,0xbaba2ee2,0xbc6be641,0xbc2a0358,0xbb9df6cd,0xbb2655c7,0xbb4f209b,0xbb4f72b2,0x398c4cad,0xba023a86,0xb9ac4b15,0x39659712,0x397e9cfb,0xb96e5e17,0xbacca512,0xbaa4f213,0xba6c165a,0xb9caf0dd,0x3a98bac1,0x3ad50347,0x3b3621b5,0x3b15af05,0x3a30828e,0x3a4d89cc,0x3a40e882, +0x3a969545,0x3b1daffd,0x3ab2e5f1,0x3a008d2e,0x3b1a205a,0x3b82bd33,0x3b4e2f0c,0xbb15bbe7,0x3a6ee8c7,0x3948be9b,0xbb73f1c1,0x3b052f08,0xbad080c0,0xbc316326,0xbc0f2bd2,0xbb9b5071,0x3a3e4742,0x3924f4a6,0x3ab2fc48,0x3a2aaaff,0xba900737,0xba7da9a5,0xb8eff299,0x3985c60b,0x3984510b, +0xba8be867,0xb9ad9fc4,0xba239df9,0x39e688d8,0x39f40cf0,0xba45b90e,0xba1a49e7,0x3af155e3,0x3a542c0b,0x3aa16a04,0x3a923237,0x3a9fa1c9,0x3988baad,0x3aa1c00b,0x3a775dfa,0x3b7e423b,0x3b39703c,0x39c5d15c,0xbb903133,0xbad9a57a,0xba26e150,0x3819040e,0x3b2a2f2a,0x3ba2d248,0x3c3fcda4, +0x3c5174b8,0x3c00d168,0x3b0e7cff,0x3b0d3215,0x3b32323f,0x3a9db2ed,0x3a82e963,0x39dcafbd,0xb9802c07,0xba34c259,0xb9c56a7e,0x3a42174f,0x391cd9b2,0x395ccacc,0xb8b04239,0xba14a7a8,0xbaf26771,0xba04b407,0xb8c9783c,0x3a42a422,0x3b379c97,0x3b026dc0,0x3b2f34f7,0x3b301beb,0x3abcba40, +0xba148988,0xbbb3e71d,0xbb59f207,0xbb03af8e,0x3add0ed3,0xbad78765,0xbae20d73,0x3ab20cc9,0xba15ea3e,0xbb175549,0xbbee75cd,0xbc1a157f,0xbb66f8f0,0xbb04077f,0xbaae0644,0xbaa27660,0x3a9bf492,0xb98afdf3,0xba523436,0xba6e48c1,0xba8196be,0xba15cbd1,0xb9c238b7,0xba9c069e,0xbae5f745, +0xbb552cb3,0xbb8d763c,0xbb99089c,0xbb90fc66,0xbb33ac63,0xbb1eb72e,0xb9bec28f,0x3a39cfdf,0x3b1460d9,0x3b564d1e,0x3b871c05,0x3b9c7487,0x3baefbe6,0x3bb61382,0x3b692914,0x3abb7767,0x3a737c91,0xb9d39e04,0xbad94d31,0xbb2848bf,0x3b040525,0x3b6ef835,0x3b241dad,0x3b0bb1d6,0x3b0a169d, +0x3acebda2,0x3af9111e,0x3ad97ee9,0x3b149cdb,0x3b035af7,0x3b1c1f1e,0x3b119bd5,0x3ac01f43,0xb7cfc2ab,0xba989e09,0xbae6009f,0xbae94927,0xba9f0b02,0xbabecffc,0xba0869e4,0xb9d83b85,0xb992fac3,0xb8abf9a0,0x39bd0f5a,0x3a2498a4,0x3a826b77,0x3b0422c6,0x3b29ef5c,0x3b20b527,0x3b7221b7, +0x3ba885d2,0x3befb99b,0x3bcaac7a,0x3b99d2b6,0x3b70368f,0x3b142d84,0x3b38f215,0xbaac06c9,0xba717458,0x3896274f,0x39a07de7,0x3b17f3c4,0x3ada3364,0x3b12bede,0x3aee4ace,0x3b033f37,0x3a6eba9c,0x3a642553,0xba1a3823,0xbaa1d0d4,0xbaf46e91,0xbb1658da,0xbb3dce62,0xbb1e5adc,0xbaf0eda1, +0xbb0c297d,0xb9ee922f,0xba5d4b9d,0xba5ea09e,0xb9c6bf34,0x39311429,0x3a15d733,0x3a9a3d4f,0x3af4a2de,0x3b2a979f,0x3b2d8181,0x3b2e9e68,0x3b62bae6,0x3b436f7c,0x3b3f53a0,0x3b471768,0x3b119619,0xb936d38b,0xb7983826,0xbadb4352,0xba1796b2,0xbab763f6,0xbab8bb0f,0xb9ce2922,0x3a8b618f, +0xb9a395d1,0xba030ea9,0xbb0fc876,0xba75c032,0xbb1411cb,0xbb080293,0xbb37d809,0xbb10eda6,0xbb233b37,0xbb17d890,0xbb5a329a,0xbaed8471,0xbab06eca,0xbae05184,0xbac4a526,0xbaa4df6f,0xba6f6299,0xba0f34c6,0xb9fa23b8,0xba009229,0xb9e389e4,0xb9ddd7c5,0xb9ddedcb,0xb9435bfa,0xb9a36d0c, +0xba08c353,0xb9d96032,0xba20d480,0xbb440693,0xbb4d7b97,0xbbb54a2a,0xbb6e4bd5,0xbb794e34,0xbb8cff6e,0xbb81e4f7,0xbbaf5a24,0xbb7a22bd,0xbb8b83c3,0xbb819fc1,0xbb84ba3f,0xbb477f1e,0xbb5a1969,0xbb4f54b1,0xbb47c1b5,0xbb63f7dc,0xbb0e51fc,0xbb47716b,0xbac5e7f0,0xbad13ace,0xbabb806b, +0xbaaaa561,0xbaa31675,0xba9a0d78,0xba902f56,0xba868835,0xba5ba967,0xba571a81,0xba6ffac1,0xba5aba8e,0xba8c3670,0xbabe15cf,0xbab62dbd,0xbaf62181,0xbb1c379d,0xba72ea28,0xba31ae42,0xbb050526,0xbb4ebfbd,0xbb46372c,0xbae0170c,0xbb2acfdd,0xbb515509,0xbb68d462,0xbb63c462,0xbb58d08d, +0xbb64f23f,0xbb78bd42,0xbb77085e,0xbb44d6c7,0xbaeb6aa2,0xbb524509,0xbb4e850f,0xbb07d6d5,0xba7fa4b3,0xba8e1a10,0xba88b7cb,0xba80246f,0xba70ad49,0xba5aee71,0xba448a7a,0xba5d11d3,0xba6a876d,0xba7fc76e,0xba86ada6,0xba81d706,0xba861219,0xba8a7619,0xba84bff4,0xba8fd0a1,0xba89323d, +0xbaf3d441,0x3a95362d,0x3a15415f,0xb99e0987,0x3b17df90,0x3b4efd9e,0x3ae61a0c,0x3ad3c623,0x3b23d58c,0x3b19c9b9,0x3af62d84,0x3ad25a43,0x3a9f97e2,0x3abaefcd,0x3ade0e0f,0x3abf674a,0x3b420795,0x3b1d5b94,0x3ac617a5,0x3b3aa5bf,0x3b0ff953,0xb9a4e262,0x39c03afa,0x3a0bd023,0x3a336cf7, +0x3a584100,0x3a5e2dbb,0x3a4fefb5,0x3a28689e,0x3a04bae2,0x39b81c82,0x3a192ad2,0x3a29e154,0x3a07c5de,0x3a38586d,0x3a43b260,0x3a47cd0f,0x3a1f8363,0x3a412ee5,0x3a63e438,0x3b5add63,0x3a644eaa,0x3b405287,0x3a875afc,0x3a9b8859,0x3aa4ad71,0xba81220c,0x39b29537,0x39d9a4bb,0x3abb78d4, +0x3a50f3c7,0x3ab89462,0x3b316d0e,0x3b0cbf77,0x3b2f84d5,0x3abbe7c3,0x3b144102,0x3a28e28f,0x377d6863,0x3a5807b6,0x3ac234a6,0x3aeaf478,0x3b02c340,0x3b13bd30,0x3ac6d962,0x3ab59a7c,0x3a96dfe2,0x3acfc4d9,0x3ab9dfbd,0x3a4154fd,0x3ad55808,0x3afc05b8,0x3b097fcf,0x3af7c14f,0x3a4e5bdc, +0x3a891157,0x3b283fdd,0x3a39765f,0x3b5dad35,0x3962589f,0x39916fe5,0x39745343,0xba4d3780,0xbb384e92,0x397da33c,0xbab88c04,0x3a0061ef,0x3a71065d,0x3b09762d,0x3b065c07,0x3b2b52f0,0x3ac4e17e,0x3ac0d8a7,0xb8259df3,0xb9cc09a1,0x3ab279fe,0x3b1a780a,0x3b5487f7,0x3b58598e,0x3b56d524, +0x3b142bc6,0x3acd8242,0x3a6fa73f,0x3b0508ae,0x3b18e137,0x3ab28981,0x3b3f38ba,0x3b480ab9,0x3b42600e,0x3b0f947f,0x3a782b56,0x39957fa6,0x3b0ed3f5,0x3a80c008,0x3b79b6cb,0xb9a9bc94,0xbad02385,0x3991c4a5,0xbb7ed94d,0xbb8aadd0,0xbb4f35f0,0xbaf6b03a,0x3a4638ac,0xb9dd8f28,0x3b35cb8c, +0x3b17b791,0x3b38a0fa,0x3a978a36,0x3a506cc3,0xb9e08f96,0xba51297b,0x3a985356,0x3b55cb35,0x3ba1009e,0x3bbcb8b7,0x3bb45b5c,0x3b5be0f5,0x3b437d88,0x3b230752,0x3b54a195,0x3b5d0217,0x3aa0cea4,0x3b924e3f,0x3b9bdb8f,0x3b989a8b,0x3b897be5,0x3ac454e3,0x3a674f32,0x3b1c2157,0x3995e9d1, +0x3b85ec39,0xbb018a2e,0xbb375f95,0xb8daa043,0xbb3adbc7,0xbb4c517b,0xbb6bf782,0xba1d76ee,0x3a34c750,0x3a9fc7f9,0x3afc9d71,0x3b3a8e66,0x3b659d31,0xb9e93a77,0x3aada577,0xbab37517,0xba692924,0x3b07fa17,0x3b9bdac9,0x3bcd9da2,0x3be40494,0x3bbf0b18,0x3b763786,0x3af500ba,0x39dd3c5d, +0x3b5f46de,0x3b88d48d,0x3b3b13c3,0x3bce4d82,0x3bd2cd18,0x3ba5fd41,0x3b774f0f,0xbb2ca138,0xbb6c6a54,0xbae728a3,0xbaec6c40,0x3a3e6ef2,0x3b6636a6,0x3b7128b8,0x3b1be84e,0x3a10899d,0xba410950,0xba382a87,0xb9d49808,0xba1aaa69,0x3b2bb37d,0xbb190a1d,0xbb77b8c7,0x3a3a17d2,0x3a95bad4, +0x3bb18f2c,0x3bba7c21,0x3b2a5ea2,0x39f03823,0xbb87ed68,0xbbb67cc6,0xbba87545,0xbbd16ada,0x3b36e9e7,0x3bf5d8bd,0x3bed49b4,0x3b985290,0x3aa07087,0xbaa87f15,0xbb3462aa,0xbb2a72c2,0xbabca89b,0xbb09b3bd,0xbb2e07de,0x3bd30245,0x3c6c77c3,0x3bbc27bc,0xbaac0c12,0xbbce522d,0xbbd2b972, +0xbb2bbd55,0xbaa405e7,0x37075179,0xba5259a3,0xbaa62909,0xbae563a0,0xb9c61d76,0xba4910ed,0xb718fa42,0xb5441445,0x3af19f1e,0x3b46ce40,0x3b73865c,0x3a14f5c4,0x3ac71d14,0x3b338f02,0x3b499358,0x3b947fdb,0x3bc2d860,0x3aa9caec,0xbb2d2b69,0xbc0de665,0xbab01127,0x3b611ed8,0x3baedb00, +0x3befa018,0x3b505035,0xbbdd8ef8,0xbb7f872b,0xbb284ff4,0xbc5a804d,0xbc401be2,0xbbb96945,0xb9e5e70b,0xbb747278,0xbb7cf8ed,0x39b1f46c,0xb97a40bc,0xb9978a75,0x3943841d,0x3947ffa5,0xb96862f4,0xbafb110c,0xba42f5ba,0xb9980740,0x3868b806,0x3afc220d,0x3b501470,0x3b09d87d,0x3a2b8628, +0x39ac5f8d,0xb909020c,0xba2a7f59,0xba999d57,0x3a26d9aa,0xbb052ea6,0xbb2e2899,0xb9e3b394,0xba900646,0xba81dfea,0xb8441cae,0x3b8d545b,0x3b887230,0xbb126f58,0x3b1e8f18,0xba2512f7,0xbc336181,0xbc07a3a4,0xbbb06f23,0x3b1e352b,0x3906e96a,0x3aa37bd2,0x3a8599f2,0xba7e75c8,0xba75873c, +0xb8aa53a6,0x38cc17fb,0x39816ecd,0xba99627f,0xba0e9c85,0xb9754506,0x3a357bc5,0x39b18341,0x3a8de02f,0x3aa7f2d0,0xb9966529,0x395ecb10,0x39b2bc6f,0xb9f0a9d9,0xb9dc7489,0xba1c13de,0x3923e3d1,0x3a162dca,0x3b712364,0x3994d1e0,0xbb442201,0xbb8e264b,0x3a17dea1,0x3b66bbe0,0x3bb44443, +0x3b985571,0x3bb62b30,0x3c370128,0x3c643fe7,0x3c05a6be,0x3b63237b,0x3b04ccb8,0x3b41c043,0x3b04e9c5,0x3a4641de,0x3954bd63,0x3925f83b,0xba444f5d,0xb96e76df,0x397a4626,0x39df2f48,0x3a53075f,0x3a3d1aa1,0xb9279ea3,0xb9eae951,0xbad0a141,0xba7f4ed1,0x39a2c758,0x3b1e2809,0x3b2ce1e3, +0x3b6ac3eb,0x3b51033b,0x3b40c503,0x3ac79c8b,0xbaf33d68,0x390acf52,0x3aa3ec3b,0x3a364b9a,0x3a666e21,0x3abaf962,0x3b9c167f,0x3b665d0f,0x3abccdd8,0xba093a57,0xbb67f5a2,0xbb05d96d,0xba821ded,0xb9925d84,0xb952a72c,0x3aa57723,0x39f9722f,0xba56f497,0xba6a5a85,0xba917c0a,0xba0f31ad, +0xba1c4140,0xba57d572,0xbacc7e57,0xbb722d51,0xbb4f3ef0,0xbb422f8a,0xbb4198c0,0xbb514e40,0xbb1040f9,0xba85d238,0x3a548c20,0x3b35ee60,0x3b8dd8a5,0x3bc2b4de,0x3be00ba4,0x3c065183,0x3bc6b989,0x3b57e63c,0x3adf2260,0x3b218d6e,0x3b20a366,0x3a26fadd,0x3b1cc49c,0x3b05a8ab,0x3b9bd00c, +0x3ba33898,0x3b56eeec,0x3b4e482c,0x3b078135,0x3ac31555,0x3ae2022f,0x3abc7527,0x3b1ae024,0x3aafabdb,0x3b1ea14c,0x3aaef247,0x39345d82,0xba371ec4,0xba822c7d,0xbaa594fb,0xbaa9e642,0xba7bfdf1,0xbab48486,0xbab2bdd1,0xba78fdee,0xba55e1ad,0x3a82702e,0x3ae74901,0x3b1c415f,0x3b428f5b, +0x3b3c0faf,0x3b179355,0x3b628e80,0x3b984ee6,0x3bc19113,0x3b8bbcb3,0x3b5b9011,0x3b3f657c,0x3b16a921,0x3ab9ac0a,0x3b06113b,0x3af375cf,0x3b0c6cec,0x3b304d74,0x3b0b7e58,0x3b40de12,0x3b277782,0x3b276125,0x3afb13e2,0x3ac5cb9d,0x3a54bb91,0x3908158d,0xba905112,0xbac25bd1,0xbafe1434, +0xbae6205e,0xbabd808c,0xbac0c9e6,0xba2e5f44,0xbad3b552,0xbaa6daa7,0xbace3a60,0xba22a4ee,0x38449a86,0x3a0125da,0x3aa232c1,0x3b067b32,0x3b3ddc4c,0x3b2738a2,0x3b14c0ab,0x3b3396bf,0x3b1de5d1,0x3b13db3f,0x3af6c76e,0x3b15ff01,0xb9bc54b1,0xb80e960d,0x3ab0167c,0x3a81c568,0x3ac3f3ec, +0x3accec74,0x3ad7bbab,0x3ae4d584,0x3a8b9bc0,0x394d4cfc,0x39b6d20e,0xba6435e3,0xbac1d650,0xbadd0b78,0xbace17d5,0xbaf9a5c7,0xbb147d3d,0xbb075e97,0xbaa4e391,0xbaf679f1,0xbb2a7862,0xbb0a1637,0xbb1e2a1a,0xbb00153e,0xbae5b48f,0xbaa5647c,0xba947040,0xba70b1af,0xb9b57fb0,0xb9ee7b29, +0xb9ea2687,0xba0041b2,0xba365dea,0xba0e57a5,0xb9f42308,0xb985a1d6,0xbb430af1,0xbb5400b4,0xbb328114,0xbb6ebb42,0xbb52e8fe,0xbb6441d8,0xbb6b5bb7,0xbb773931,0xbb6c0edf,0xbb2a56a7,0xbb180465,0xbaf65f07,0xbafc2e92,0xbaea8a69,0xbac4f37f,0xbaafeefb,0xbaaf8e95,0xbaf6d01a,0xbab0e46f, +0xbb3abb2c,0xbb19700e,0xbb17ce14,0xbb08f7a9,0xbb036716,0xbaf7d4d5,0xbae2df04,0xbb12f61e,0xbb1c2931,0xbb2bb454,0xbb387cf4,0xbb276d2e,0xbb236f43,0xbb2724ac,0xbb16e42a,0xbb2c9ed8,0xbb3f9be3,0xbacf5058,0xbad0fea6,0xb9aad31d,0x39171d3a,0xba24ec23,0xb92d1002,0x39d40cc7,0xb8e559b1, +0xb965ea0d,0xba18e4dc,0xba631255,0xba67fe69,0xba58a436,0xba4f6a17,0xb987c342,0xba89ca14,0xba97fbce,0xb9cbec6a,0xba7630c7,0xbb10d9d6,0xbafcceac,0xbafef273,0xbaf9a75c,0xbaf8b029,0xbaef99e4,0xbade6f99,0xbae2c0b7,0xbad53679,0xbad77f3c,0xbad64b85,0xbad9f03d,0xbaeb457c,0xbaedb83f, +0xbaded941,0xbae002b9,0xbad519c0,0xbb1b294b,0xba2dbcd2,0xb9583c9f,0x36a4bbae,0xbaf7a396,0xbac2b17e,0x3a8cbb19,0xbae558e3,0xbad4d34e,0x38f6e643,0xb64ea1c5,0x393445eb,0x39dc4568,0x3a1b51d5,0x3a619464,0x3a3ba2a2,0xbabe0ae4,0xbad8d123,0x3abc5c83,0xba928ed6,0xbad81e5c,0xb95965ae, +0xb9d17d36,0xb9d1a252,0xb921a83f,0xb6e5f399,0x37e81ab2,0xb88d2a43,0xb95648e3,0xb9c8a7e3,0xba02e2b7,0xb9e7d16e,0xb9d5ee92,0xba181530,0xba1164b9,0xb9f28325,0xb8a290d2,0xb98c4014,0x39c0137f,0xbabbd9e4,0xbabeed3d,0xba16f45d,0x39a65495,0xba94325a,0xbaf554ae,0xba1c00c9,0xbad30efe, +0xbb309216,0xbae954d4,0xbb04d773,0xba8e4201,0xba6c6deb,0x3995d6fd,0xb99a7ed9,0xb8f1e3e9,0xba06c4e8,0xbac54c6f,0xbafcfcec,0xba4c2eeb,0xba4dc5ca,0x38510f32,0x3943eb23,0x3983be0f,0x389ad78f,0xb973812e,0xb99b096d,0xb9a343f1,0xba0a3376,0xba62b721,0xbab9e09d,0xbaa143d5,0xba2362be, +0x3a6af73a,0x39bf1cd5,0x3a6c6ec6,0xba3d3f35,0xbae4ade2,0xbaabdfa4,0x39777bac,0xbaf3a4e1,0xbb257bf8,0xba4164a3,0xbb5aaa37,0xbb4400c8,0xbb6f1129,0xbb074408,0xba851760,0xbaeba1b5,0xb84b5d89,0x398737de,0x39bb8afc,0xb9b971dc,0xbac04d07,0xbac0701e,0xba8faec7,0xba67927a,0x3a0f12fd, +0x3aa255b8,0x3ad33741,0x3a66bd3f,0x399d2bd4,0xb9dfd291,0xba8619cf,0xba48667c,0xba884331,0xbafa8864,0xbac4bcec,0xba2a43de,0x3aee5bca,0x3a1565a5,0x3af505d6,0xbacc838a,0xbb475816,0xbae99019,0x3aed7d4c,0xbac1ecc4,0xbb192c00,0xba8b516e,0xbb8df9a1,0xbb9bd7a4,0xbb593020,0xbaf314d9, +0xba905dec,0xb9c92b2c,0x3a82028d,0x3acdb88b,0x3adf699b,0xb90a6788,0xbb008ccc,0xbb3419c1,0xbac7d3b9,0xba91bd9a,0x3a410117,0x3ae83b8d,0x3b04fc12,0x3a649380,0x39238a92,0x38258f4d,0x393f2ee2,0xba635934,0xbaf11f98,0xbb4aaa76,0xbb13ae01,0xb9aca18d,0x3b831e1e,0x3b0b56f2,0x3b052a3b, +0x3984534e,0xbad786da,0xba9e109f,0x3b1d9638,0xbb40c9d3,0xbb5cbdbb,0xb9b7ca32,0xbb5d93bc,0xbb83353a,0xbb48e324,0xba7b89ef,0x3a16e880,0x3a57a3aa,0x3b022c68,0x3b1dbcdf,0x3b27ae64,0x3ab2b235,0xbaef9d59,0xbb13cf48,0xbaceb196,0xbaa48655,0x3ac9935b,0x3b4c20fd,0x3b7a0c5f,0x3b1ff3bc, +0x3a978200,0xba3dd21b,0xbadab954,0xba8a9d20,0xbae7fa1d,0xbb21f02e,0xbb015f34,0x39182044,0x3b904b9f,0x3b08da63,0xbb568abb,0xbbabfe49,0xbbff78e6,0xbbb44127,0xba89b836,0x3b228475,0x3b64f5c6,0x3b3532f9,0x3a607830,0xba7958a8,0xba815a3e,0xbaad43e7,0xba643312,0x3b3ef928,0xbb44f675, +0xbb819a3d,0xbb0bf91c,0x3770d112,0x3a5d990c,0x3a9f4ac6,0x39dcf6cb,0xb9c4d01b,0xbae857fe,0xbba82231,0xbb771c1d,0xbb4e2cee,0x3bca1096,0x3c2680bb,0x3becf1c5,0x3b872a89,0xbaaa7423,0xbc032c95,0xbbed0d5e,0xbbbcd30f,0xbb7a8364,0xbb4b680b,0x3a06bde5,0x3b7edce2,0x3c09b579,0x3bcf8519, +0xbb5c536d,0xbbe4c5c6,0xbbe1b23a,0xbb71a27c,0xbabb97a5,0xb9761f3d,0xba5cf60f,0xba5f57eb,0xbada0de3,0xba1cf69c,0xba831e0b,0x39bbe37f,0xba09c6cc,0x3ad73ed9,0x3aea9fba,0x3af7adc4,0xba8e53e7,0xbb180389,0xbac4bcde,0x3ab2ad9f,0x3b43e753,0x3b603997,0xba9f5dbc,0xbb8699bf,0xbc1cda07, +0xbb07741b,0x3adfd418,0x3b3ac13d,0x3b144ec4,0xba89aaaf,0xbbe9a7d6,0xbb914f77,0xbb19f0f9,0xbc58f0a4,0xbc56605d,0xbbe974f3,0xba292f6d,0xbb92a11e,0xbba71da7,0xb96315fe,0xb9e6ab27,0xb97236f3,0x38f92691,0x38d8287b,0xb9bb6c1b,0xbade0d7d,0xbad069f1,0xba889183,0xba88e54d,0x3a23d799, +0x3a97e595,0x3aab26e0,0x39ecb964,0xba997dc1,0xbad671ff,0xbb2cd894,0xbb47646d,0xbb32be29,0xbb6bfce2,0xbb628c24,0x3ac051bf,0xba9d1589,0xbb85441a,0xbbdb1d8b,0xbb9f5fe1,0xbb8efe90,0xbbd81e14,0x385c8a16,0xbb578a93,0xbc355f8e,0xbc11fc89,0xbbc6890c,0x3b49f30b,0xba65928c,0x39f4375f, +0x3a96ba9d,0xba6a474d,0xba53630b,0xb93dff56,0xb8afe0e5,0xb86203e9,0xba89f242,0xba1e0167,0xba94abba,0xb95068d5,0x39a7aa39,0xb97ca5de,0xba5db297,0x3a21106f,0xba28f427,0xb9ecadb7,0xbb33ce9e,0xbb727466,0xbba60354,0xbb87d3c6,0xbb4b1039,0x3b2b112e,0xbb3e731d,0xbbe93004,0xbc253c50, +0xbc0b427c,0xbbdd5c62,0xbbb84eca,0xba450c84,0xbb115c45,0x3bc0ff52,0x3c3775c5,0x3c08e18d,0x3b3e3691,0x3afdc08c,0x3b3c3cb7,0x3ae22326,0x3a2c01e7,0x38ee3560,0xb8fed824,0xba38a9c2,0xb9b71f0c,0xb898bf13,0x38b8ba92,0x3a0db9ec,0x3a5207dd,0xb9382085,0xba82442e,0xba2c4a34,0xbaa2529b, +0xba843a32,0x3a0892bf,0x396d6d2b,0x3a91767f,0x3a71d8af,0x37e62181,0xbaece0c5,0xbbcc442f,0xbb331a7d,0xbb0395c5,0xb9c18a5a,0xbbe239ff,0xbc0f6e67,0xbbde71b4,0xbbf1070a,0xbbcc2e76,0xbbbb3444,0xbba2b804,0xbb9ce617,0xbaea318a,0xba9ed6d4,0xbaa763c4,0x3a01caff,0xba1f4fba,0xbac64611, +0xbabd70ee,0xbab6f489,0xba343dd4,0xba560e06,0xba678b09,0xbabd10f0,0xbb5be632,0xbb924acb,0xbba12d8d,0xbb8faae4,0xbb645333,0xbb2e4d7c,0xba8aebc9,0xb7ed8ec6,0x3a50a581,0x397b54df,0x3a95c330,0x3ab1829e,0x3a8e41fd,0x3a4415a8,0xbadd8fab,0xbb87ef93,0xbbb2e19b,0xbbcf5b8b,0xbbeeac94, +0xbbc415fb,0xbb57ebf3,0xba4bcfb3,0x3a9f03b8,0x3a537d34,0x39f5fe2d,0x39c9f1b5,0x3a12dfa3,0x3a009d7b,0x3a603b41,0x3a59edc5,0x3aa9916c,0x3ae37f39,0x3aba5a6c,0x399b0e0d,0xba598904,0xbada1703,0xbb050b38,0xbad762d9,0xbabca92c,0xba50014e,0xba9366ee,0xbaa250ae,0xba9fd88c,0xba231663, +0xb831f5a9,0x3a430747,0x3b0b6ed0,0x3b3ee49f,0x3b5909bc,0x3b83622c,0x3b8c0355,0x3b8231f6,0x3b485977,0x3aa2ecf7,0xb9d0b91e,0xbb1edd89,0x3a23f6fa,0x39c37d04,0xba505b9e,0x396dd326,0x3a550fab,0x3b01b746,0x3b021ab2,0x3b1d5b66,0x3b080605,0x3b131091,0x3ac89f31,0x3abe12fc,0x395be204, +0xba0cff10,0xbab99c35,0xbaf988ba,0xbb2b73f8,0xbb1b62f0,0xbb08e14a,0xbaf89cab,0xbaad1936,0xbabc0aa7,0xbacb812b,0xba84f73b,0xb9df5a48,0x392a1a00,0x3a54cc08,0x3ade11a2,0x3b31f843,0x3b14e35c,0x3ade954c,0x3abfb318,0x3ab60802,0x3aacb27f,0x3a90dd9f,0x3aaa8e06,0xb73e4871,0xb9872c7e, +0x393ab959,0x3a254f0c,0x3a2cf6b9,0x3a42caa0,0x3a99c568,0x3afc345c,0x3a72bf8c,0x39bbf3de,0xba592d79,0xba8c8dc3,0xbacf327f,0xbb11b82e,0xbb04f1e1,0xbb0d7986,0xbb207ea2,0xbb191b3f,0xbb3327de,0xbb271267,0xbaf9a7a7,0xbb089c6c,0xbaf6e85f,0xbacf7e84,0xbaaa5f1d,0xba7f9a8f,0xba946fae, +0xbab9a464,0xbad0479d,0xbaf325d7,0xbb016ece,0xbb03ef1f,0xbaeda91c,0xbaca173b,0xba866cc6,0xba4d0953,0xbb697ff5,0xbb639463,0xbb86cfaf,0xbb81d986,0xbb8b43a3,0xbb8a843b,0xbb8be451,0xbb8681ba,0xbb7a8961,0xbb7e3957,0xbb6f070c,0xbb7271b2,0xbb614d76,0xbb66c63a,0xbb7c4aea,0xbb6a3ff7, +0xbb5418de,0xbb4922cb,0xbb3e628d,0xbafbb0bf,0xbad95d75,0xbaea613c,0xbad4feeb,0xbad7faa0,0xbacff12b,0xbabf0b84,0xbae689c2,0xbaebe438,0xbb098d4c,0xbb29664e,0xbb3811d9,0xbb67d952,0xbb5fe308,0xbb48aa4d,0xbb55db54,0xbb668dc2,0xbadc4237,0xbad851a2,0xbb1da49d,0xbb06d999,0xba6fe99c, +0xbb0573a2,0xbb03890a,0xba976e8c,0xbaac6281,0xbab20692,0xbab0d123,0xbaba871b,0xbabc9043,0xbaba1b40,0xbb3bc94b,0xbb371aaf,0xbabd77cc,0xbb36876d,0xbb385608,0xbaf47bac,0xbb036416,0xbb006d22,0xbaf6d673,0xbaf0b938,0xbae67c96,0xbada9252,0xbaf4153a,0xbb008c57,0xbb0b09bd,0xbb10e7b5, +0xbb0cce2d,0xbb15ac50,0xbb0eb411,0xbb05cd9d,0xbb02f75a,0xbaf20dee,0xbb52b46d,0x3b40bf80,0x3b005080,0x3b10d304,0x3b3f6801,0x3aa007a8,0xba952c06,0x3b1c51aa,0x3a9a2485,0xba689f51,0xbaba2596,0xbae48d3c,0xbad3bb98,0xbad48f54,0xbb0149a1,0xbacd1973,0x3abf1ad7,0x3b3148fb,0xbacacb45, +0x3a7e0fa8,0x3b189389,0x3afe5c30,0x3b00ccff,0x3b155250,0x3b20fad3,0x3b2d3a55,0x3b2aa1ff,0x3b1a0254,0x3b12bd33,0x3b0aafa3,0x3b050194,0x3b140df0,0x3b1461f2,0x3b10c4b6,0x3b188a4a,0x3b164f35,0x3b0b15d4,0x3b090134,0x3b20fe70,0x3b478f57,0xb86b320c,0x3aa29178,0x3aa30009,0x3a9480bb, +0x3a8cd539,0x39b624c5,0xb9f074a8,0xb8f82535,0xb94c8974,0x3a4eb7ce,0x3a8c537b,0x3a1bdf47,0x391860e4,0x3b184aa1,0x3adbcd71,0x3ad5695e,0x3a7c7828,0x3b1feb73,0x3b0f71b2,0x3b42f96f,0x3b8177c7,0x3b836545,0x3b854c89,0x3b88d363,0x3b6ff1bd,0x3b72bd0a,0x3b726e63,0x3b7bd8f1,0x3b6801d0, +0x3b5a1024,0x3b837fbc,0x3b863fad,0x3b70c12d,0x3b5b5387,0x3b30eee6,0x3b38b369,0x3adb2a4d,0x3b006599,0x3b0b7321,0x39848ce6,0xba10ec52,0x3a2da96c,0xbac54d48,0xbad01320,0xb9c9c16a,0x395b4aad,0xb9c20111,0x3a7a12ad,0x3ad3dc4c,0x3b1906d8,0x3b2cd653,0x3aa7f0df,0x3ab83e98,0x3aae74a7, +0x3b33eeac,0x3b7ebfe9,0x3bba5e99,0x3bcae6f4,0x3bc63c2c,0x3ba74108,0x3b94d08b,0x3b7db1de,0x3b7bcb1c,0x3b91185f,0x3b9c232e,0x3b866013,0x3bad2c9f,0x3ba18e6d,0x3b7ff88f,0x3b68ba1a,0x3b3ef133,0x3b044f38,0x396d58a6,0x39ef851e,0x3b35ca13,0xba1cd148,0xbaf7779c,0x3743b7f8,0xbb8a90be, +0xbb97863e,0xbb4d43be,0xbb10e349,0xb8a93205,0xb99f8e4e,0x3b05132b,0x3b1141dc,0x3b30fe56,0x3adf6333,0x3a35d3d2,0x3977eef8,0x3b2e7b7d,0x3b7e32d5,0x3bea51c2,0x3c0790e0,0x3c128d78,0x3bee9994,0x3bc9e790,0x3bc3ffde,0x3bd8a835,0x3bc56d20,0x3bcad179,0x3bab0272,0x3bf84b45,0x3beb04f5, +0x3bbffd59,0x3ba1eb6c,0x3b405b8f,0x3b3b3153,0x3ad31481,0x3a3b93ae,0x3b6437ba,0xbafbd011,0xbb4b5b9d,0xba50877e,0xbb7a9b48,0xbb8674db,0xbb46fcdb,0xbabe174c,0xb5e1edb9,0x3a583000,0x3b074540,0x3b40dab7,0x3b561bbe,0x3ab0400d,0x3a33e10b,0x3a46cbb3,0x3b47ec33,0x3bbb5b63,0x3c1d6f7b, +0x3c2b0717,0x3c2aca69,0x3bf8b762,0x3bd2eb9c,0x3ba256b6,0x3b8ec04a,0x3bd79df5,0x3be5f6f1,0x3bc2f94f,0x3c102ffe,0x3bff8f69,0x3bad846d,0x3b94204f,0x3b495759,0x3ad52cab,0xbaaea7d5,0xbb0191ae,0x39ed1ed9,0x3b584025,0x3ba4cdd3,0x3b88d3aa,0x3b004450,0xba4e776c,0xba898154,0xbaa1fb39, +0xba89729c,0x3b4b7508,0xbb3bf148,0xbb7c2bbe,0xbae4c229,0xb995db04,0x3b221ed7,0x3b6717a8,0x3b31eac2,0x3a3b97ba,0xbb55dc42,0xbba01b51,0xbb435200,0xbb87376b,0x3bf6201c,0x3c3d0214,0x3c1e6ae0,0x3bfa30d7,0x3b9cff3c,0x3b083ba2,0x3af40762,0x3b1c9b6a,0x3af0df01,0x3b838941,0xb9c7a2f1, +0x3bb5f49f,0x3c3fbd0f,0x3c0b38f5,0xba3b5ab4,0xbba8cc64,0xbbe8a21a,0xbb5989bd,0xbad3c426,0x3790f843,0xba093b97,0xba34ffd7,0xbacca251,0xba5c0dc9,0xb95b4472,0x3a977f9e,0x3a6e8aae,0x3b133134,0x3af1db33,0x3b84b3ec,0x3b6f817b,0x3b97f6e4,0x3bf4f167,0x3bebf955,0x3bde5b4f,0x3b738a06, +0xba4ef730,0xbb747eaf,0xbc068643,0x39d21aaa,0x3b96081c,0x3b8112f2,0x3b9e7d91,0x39eb94ef,0xbbef9495,0xbb4be68e,0xbb0cbb6a,0xbc2535a4,0xbc3a51da,0xbbd8a1db,0x3ad28a3d,0xbb8bad2a,0xbbaff565,0xb906d53d,0xb9236d89,0x39361370,0x38bf8c9c,0x39a3d234,0xb8ccc989,0xbaf72fb3,0xb9ee6201, +0xb99a7bf4,0xb9f094a9,0x3ae062a8,0x3b42033a,0x3b63a215,0x3afcc2b0,0x3a94218e,0x3a539ffb,0x3aeff290,0x3b047c14,0x3b42e0e2,0x3aa3dd08,0x3985aaed,0x3b69ea20,0x39ee1314,0x3a8207f3,0x3b877037,0x3bf6f05f,0x3bfc76fc,0x3b132c0e,0x3b1281bc,0xb90bdad7,0xbc24c6ba,0xbc21d88f,0xbbafbf3f, +0x3b7ada1e,0xba29c3ce,0x3a02dd71,0x3abe9724,0xba159713,0xba0c7e7e,0xb7689b4b,0x37985e69,0x388fcdcf,0xba72d8a8,0xba184a63,0xb956b902,0x3a1e30c2,0x3a5846d9,0x3a984e87,0x3ac782df,0x3aa63ba3,0x3a8b3a13,0x3a762c89,0x3aa33bfa,0x3afcd3c7,0x3b195647,0x3b7addce,0x3b802f8a,0x3c036a0f, +0x3a9ded48,0xba91212b,0x3abeb3c3,0x3beb0555,0x3c34a39f,0x3c56472f,0x3bce607d,0x3bb0fd2d,0x3b96e1d8,0x3c450d1e,0x3c0a2574,0x3b8bace2,0x3b2d913e,0x3b44af0c,0x3b1d103e,0x3a5fafb5,0x39161286,0x390359e6,0xb9dfbd3a,0xb93bbe7d,0xb9066475,0x3a149922,0x3a8f4340,0x3ac0b7eb,0x3a6245d6, +0x387309be,0xb782bae2,0x3a867b03,0x3b396063,0x3ba9138a,0x3b97d317,0x3b86e00b,0x3b28419d,0x3b25ebf8,0x3ac3c587,0xbacdae89,0x3a93a913,0x3b23c8bd,0x3b18fcfd,0x3b9cb859,0x3bd321ba,0x3c5095d1,0x3bcc904e,0x3c0cbd80,0x3af40ae7,0xbbc36d07,0xbadb3e98,0xbaf068e6,0xb98e576d,0xb8ae972e, +0x3a96b899,0x387b7157,0xba7c0bdc,0xba852476,0xba95dfb7,0xba0a1854,0xba0375cd,0xb9e98d6c,0xba75be41,0xbb3bb207,0xbb3ffec2,0xbb3ebb5d,0xbb40f9a3,0xbb300472,0xbb3bd7ee,0xbaa8c064,0x3a17c837,0x3b3fbd6c,0x3ba63a0d,0x3bddd1a9,0x3c0087cb,0x3c1fc912,0x3be94876,0x3ba17ef3,0x3ba4d46d, +0x3bbdaec7,0x3bc3d520,0x3badebf7,0x3bf6c52a,0x3af6745d,0x3b479a23,0x3ae71e02,0x3aa4a1a2,0x3abd49c8,0x3a1d58dd,0x3a315475,0x3a2a9f19,0x3a63b3e6,0x3aa825b5,0x3a80e18f,0x3b0b16c3,0x3adfb62b,0x3a4e9557,0xb8968a9f,0xba1fbc58,0xba83e223,0xbaadd793,0xbaca661c,0xba98fd54,0xba04b783, +0x39eb770f,0x3a2a2562,0x3b2602fa,0x3b5a4998,0x3b861380,0x3b9ef866,0x3b9c1b64,0x3b814acf,0x3baaa95a,0x3bd9423b,0x3c10b100,0x3be1ea06,0x3bb5fed4,0x3b8b1c2a,0x3b2f96f4,0x3b8373c1,0x3ae46bb0,0x3b16a762,0x3b175779,0x3b4a3eb7,0x3b64641c,0x3b575ff1,0x3b4449cd,0x3b37d983,0x3b237048, +0x3afce183,0x3abc2b7b,0x3a1b67fa,0xb8b0b537,0xba1e5441,0xbab3d23d,0xbaecc638,0xbabd318c,0xba9ada86,0xba83e554,0xba22c1a1,0xba10dc41,0xba3d0100,0x398aaceb,0x3a89f696,0x3acd879c,0x3b3064d8,0x3b7759c9,0x3b9f1f0a,0x3b9db414,0x3ba01010,0x3bc770e3,0x3ba40be5,0x3b8537c3,0x3b665064, +0x3b5b045b,0x3b021e17,0x3b262ef5,0x3af705f8,0x3b2852f7,0x3b153c3c,0x3b045ea9,0x3b1f1c7a,0x3b464915,0x3b0e6a98,0x3ac75f5f,0x3a9d9086,0x3a5c4ec6,0xba3660d8,0xba1f3dec,0xbacc0690,0xba9b857f,0xbae0a6f6,0xbac10fe0,0xbac42572,0xba681f9f,0xbac884e0,0xbac2c6a4,0xbae60d74,0xbacf54a1, +0xbacd8c5e,0xbab1066a,0xb9fef457,0x393a3c9b,0x3aaac30d,0x3ab272c4,0x3ac1f0bf,0x3ac9af5a,0x3aa9e085,0x3ae2e066,0x3b04358b,0x3b0535ea,0xbaf4bb84,0xbaf4f860,0xbb5d09c1,0xbb20c47f,0xbb0e9c01,0xbb184004,0xbaf8edd8,0xbb4d39e2,0xbb1d3df1,0xbb203350,0xbb290e03,0xbb2240e3,0xbb026053, +0xbb1c5bb6,0xbacde75e,0xbabfe9d9,0xbb07fe1e,0xbab2777f,0xbb044750,0xbb0b63dd,0xbb0280ba,0xbae2c648,0xbacb464a,0xbaba1e5f,0xba9e5f51,0xba83af9a,0xbab9c681,0xbabd5a71,0xbacaaaaa,0xbabb8f1a,0xba64d326,0xb9cd2dc5,0xba187874,0xba689a3b,0xbab30050,0xbacaafe9,0xb9aed1d7,0xb8c28a99, +0x391c1f1d,0xba477b86,0xbb09fd77,0x39d56643,0xb8e3854b,0xbad0a089,0xbb023f37,0xbb0d322a,0xbb16503d,0xbb264354,0xbb3e45fc,0xbb46259c,0xba5e373b,0xb9ba973d,0xbb358ba4,0xba8f60ec,0xb9e5bc06,0xba8560d5,0xba6ea6ef,0xba7e0ad9,0xba81be5d,0xba888932,0xba8a4bbb,0xba81202e,0xba6f53f6, +0xba2e4544,0xba1558a8,0xb9ff7e11,0xba09dbd8,0xba1bf5a6,0xba1f9785,0xb9efafcf,0xb9bbaa76,0xb997a6ab,0xba9e4a8f,0xbace271f,0xba8b6582,0xbaf373d9,0xbab00cbd,0x3a77a9db,0x3b4d9679,0xbaccee27,0x39796dfc,0x3b37a8bb,0x3b37c4e0,0x3b4322f0,0x3b361230,0x3b43af8c,0x3b6e5e9a,0x3b43d70f, +0x3a143a98,0xba839606,0x3b6e0ae7,0x3a9822aa,0xba4faee9,0xbae68d9c,0xbaa7ae7b,0xbab25298,0xba969cf4,0xba8dc6c4,0xba8ccfb2,0xba9aa1b7,0xbaa4562d,0xbab68198,0xbaba279a,0xbabb74d3,0xbab5eafe,0xbacb6baf,0xbaba8b13,0xbaaa0b64,0xba6769fc,0xba97fb2b,0xba74e986,0xbb193ccd,0x3b0b4e4e, +0xba1a4718,0x3ac652ba,0xba370aa1,0xba8b5d63,0xb811bd74,0xbaf5f88e,0xbae1a35b,0xba5759b7,0xba8fb2f9,0xba9d4954,0xb9115533,0x3b1c3642,0xb9099745,0x3a7874e0,0xb7d66040,0x3a1eeed1,0xbb1d4c2c,0xbaf9b65d,0xbae0ab19,0xba8fa5d0,0xba81ee72,0xba83151c,0xbab2da55,0xbac34f0a,0xbac57dcf, +0xbabb0420,0xbb09c18e,0xbb1c2074,0xbb29687c,0xbafaa5cd,0xba9cce25,0x39866526,0xba018c3e,0xba3ff04c,0xbac9641e,0x38494dee,0xbade8be5,0x3a2b74d6,0xbab9a351,0xba9de3cb,0xbae3f15e,0xbb17d78b,0xbb703dcc,0xbb0444cf,0xbb589772,0xba211687,0xbaf2ccad,0x39e525b8,0x3933f156,0x39a7f47d, +0x3a166622,0xb9049008,0xbac4fa23,0xbb25d326,0xbad3e954,0xba593bd1,0xb930bd0e,0xb8d90b14,0xba8217d0,0xba9314e9,0xbae79c5f,0xbb04596b,0xbb177f24,0xbb256971,0xbb463fe8,0xbaf59556,0xba5bd705,0x3abc67aa,0xb921c4f8,0xb93e143e,0xbafcdc1b,0xb98c93b0,0xba828775,0x3aaaf240,0xba9853d1, +0xbb02ed55,0xbb01ff77,0xbb978212,0xbbae6bf1,0xbb4cf80f,0xbb3c73af,0xbab425a0,0xbad20bc3,0x3a9a154b,0x3a827a84,0x3a8ca995,0x39b56731,0xb9c292ee,0xbaeb645a,0xbb445633,0xbae68313,0xb9df8e3a,0x3951ab5e,0x392e07d9,0xba8a7268,0xba99a3b5,0xbaa72c37,0xba6802a8,0xbb53edf4,0xbb81813f, +0xbb8dedba,0xbb028dbf,0x392944f8,0x3b790173,0x3ad76551,0x378409a6,0xba92a42b,0xb8b4d26f,0xbaaa08b7,0x3a9d63f8,0xbb39cbc4,0xbb6e3e9e,0xbaa2086a,0xbb8ae5f0,0xbb9e6f09,0xbb464de0,0xbae80def,0xba25ee9b,0x391fdfac,0x3aa565d2,0x3b011644,0x3b1b2181,0x399609c7,0x3a807bb8,0xbb021386, +0xbb275040,0xbadd78a4,0x396d8fbe,0x3ac93715,0x3ad31e73,0xb976df7c,0xba364a24,0xbb106f1c,0xbb31fda2,0xbb498c0e,0xbb61682d,0xbb61d174,0xbab6067d,0x3a6d6c3d,0x3b89a820,0x3ac90a9a,0xbb12bac3,0xbba82388,0xbb44f732,0xbad5d040,0xb924c00e,0x3b787fba,0x3b903691,0x3b990441,0x3aee68cb, +0xba85a0a5,0xba98991f,0xbad933f2,0xbaa732af,0x3b4f7e0b,0xbb54e4df,0xbb994c6f,0xbb4ed0e8,0xbb472b59,0xbaad5c35,0xbb36f4de,0xbba4a6af,0xbb965f40,0xbbe54cdf,0xbbe7be7d,0xbbac19bc,0xbb9db7ae,0x3b6d2966,0x3bcaa83c,0x3aebe8dc,0xb9efb8f0,0xbbb04340,0xbc33922d,0xbc065356,0xbbd5dda2, +0xbbaa32f9,0xbb53c384,0xbb492c32,0x3aa7a349,0x3c2c186a,0x3ba5dec0,0xb99697e6,0xbbe319be,0xbbf0e785,0xbb7e6102,0xbafd0fa5,0xb8e7133c,0xba140219,0xba096e65,0xbabcd318,0xbab4885f,0xba2fc0b5,0x3996937a,0x398851e9,0x3ab6b55f,0x3b37c5db,0x3b4d6cf8,0xbaf485c5,0xbb012fa4,0xbb298464, +0x3ad3528a,0x3b2d7cbd,0x3a9107cb,0xbb2379a3,0xbba445be,0xbc1f184b,0xbaccbf83,0x3b22e2b2,0x3b2a1e74,0x39e3bdee,0xbb5830a0,0xbbf76961,0xbba5a2bc,0xbb8aba57,0xbc3259b0,0xbc56649b,0xbbf60e72,0x3a2fcb4a,0xbb9eaa9a,0xbbc70140,0xba9634d2,0xb9a6be51,0xb7bc4c77,0x388819a1,0x389d6d09, +0xb9c600db,0xbadb102c,0xbac1895b,0xba6d8dde,0xbaa3933f,0x39abe14c,0x3a818d5b,0x389f2369,0xba75f264,0xbaf3b95f,0xbb3bb729,0xbb81fab3,0xbba52a8f,0xbbb1442b,0xbbca1bae,0xbbb1ca16,0x39f980c7,0xbb9f883c,0xbc06a8f9,0xbbf1ad65,0xbbba4d2a,0xbb8d98c7,0xbb9e5697,0xbb064738,0xbb7eb5d1, +0xbc21dadc,0xbc009413,0xbbc0625b,0x3b8642bc,0xba89d337,0xb9037a58,0x3a6584ab,0xba3f1f6d,0xba05624a,0xb8cf2956,0xb9319d4f,0xb968533b,0xba7980dc,0xba6779ea,0xbaa07cea,0xb9f140f0,0x3891c8ab,0x39fe2d8b,0xba270f80,0xba38d7ac,0xbab21617,0xbac854a6,0xbb9533c9,0xbbbfe5e2,0xbbe4b9a5, +0xbbbcdc4d,0xbb81c35a,0x3b258a96,0xbbcb6a68,0xbc359713,0xbc3ed038,0xbc0e1c47,0xbbb6d8b9,0xbb5154dc,0xbadbe446,0xbb892f9c,0x3a5870d0,0x3c0f0ec5,0x3c00a281,0x3b89f727,0x3aadae18,0x3b0f4f49,0x3b211fb5,0x3a15e957,0x3882c574,0x39297f96,0xba0ccb06,0xb99a3ef3,0xba4744b1,0x393a3bc4, +0x3a77039f,0x3acd475d,0x39ae1a8a,0x39212cd7,0xba37cb80,0xbab92217,0xbaa555b5,0xb98323a0,0x39ab9a52,0x3a600e3e,0x38cd71e6,0xb920c71a,0xbab68e33,0xbb885fac,0xba5aa00c,0xba05806b,0xbaccc8f1,0xbbc3b203,0xbbfd67c8,0xbbde98a0,0xbbdb9305,0xbbaf3787,0xbaa56eed,0xb9e1a556,0xbb87cae7, +0xbab15032,0xb9e3a0b3,0xba089fc5,0xb8e592bf,0xb9d9cf7e,0xbab66cbd,0xbaa54f26,0xbab397c2,0xba238f70,0xba55f986,0xb9f558e8,0xba85ae4e,0xbb42f0ab,0xbb733ca7,0xbb84cb30,0xbb6a15bc,0xbb6c3647,0xbb25669f,0xbad8a227,0xb9cdeeec,0x39bb029f,0xb9ae6f83,0x3a48b1ac,0x3a4b4bf1,0x39bfdcad, +0xba9bb931,0xbb752424,0xbbc23bc2,0xbbe3949b,0xbbea8612,0xbc02653d,0xbb984da8,0xbbb707f0,0xbb499967,0x3a0da5da,0x38fe7468,0xb8dc2994,0xb90c5be0,0xb972253e,0xb806cd24,0xb88572c5,0x395809a7,0x38e6bb93,0x3a95d086,0x3a952a31,0x3a15f093,0xb998db7a,0xba8e4235,0xbade0757,0xbafd289d, +0xbac541d6,0xbac15e7c,0xbad740ed,0xbac2639d,0xbabf0e42,0xb9035fa0,0x3a4c38c8,0x3ada31da,0x3b4461ac,0x3b6ee97e,0x3b880628,0x3b8cbf01,0x3b6ff98d,0x3adefc40,0x3a70185e,0xba1f0c56,0xbb20a349,0xbb8cf881,0xba2bafb7,0x3b19cc7c,0x3a134c2b,0x3a94e4fa,0x3b005955,0x3af0c767,0x3b24dd75, +0x3b1b7329,0x3b17aa05,0x3b123359,0x3b05a1a9,0x3ae62202,0x3a86818c,0x3977e7ab,0xba2f50d3,0xbaa59c60,0xbafa01fd,0xbaf810d2,0xbb031d5e,0xbab170fc,0xbb04a0df,0xbadcacf9,0xbaf178bc,0xba91c40f,0xba0309c0,0x38c23f22,0x3a656480,0x3af18a45,0x3b45253b,0x3b174ed9,0x3ac1b7da,0x3a3ff673, +0x3a69b427,0x3a422a63,0x395cc96d,0x3a718dc7,0x3a48a142,0x39998723,0x3b1a9804,0x3b0143cf,0x3b2ee2d8,0x3b323aa2,0x3b23e2a0,0x3b1c4dc7,0x3b007519,0x3a9530c4,0x3a80c958,0xba3339ce,0xba20d5be,0xbada04cc,0xba8558df,0xbae1ea0e,0xbb0b3275,0xbb03a901,0xbac61105,0xbb27387f,0xbb16af6f, +0xbb0bb660,0xbb0b5b5d,0xbaeed1a6,0xbadde63a,0xbab7c9a0,0xbabc6cce,0xbad4a812,0xbacf223d,0xbaf1e7f3,0xbaf4ac4d,0xbb029915,0xbadb9545,0xba86419a,0xb98b9027,0x395a9976,0xbb538919,0xbb45da30,0xbb01e3fb,0xbb5ea6b8,0xbb660171,0xbb4c9a36,0xbb6398bd,0xbb16ca83,0xbb5089bf,0xbb3361b5, +0xbb32dc39,0xbb2fbf48,0xbb4e7df9,0xbb4c37a0,0xbb60d263,0xbb4783a2,0xbb15720a,0xbb4b5dab,0xbb0b5bc5,0xbb1ca9d4,0xbaef57bc,0xbb07192f,0xbaf1a8f7,0xbaf25c7d,0xbae22784,0xbac6d8cb,0xbb0bbbe2,0xbb160847,0xbb32ad79,0xbb576477,0xbb6788e3,0xbb897a84,0xbb79781c,0xbb64f101,0xbb690564, +0xbb6b9888,0xbaed6cc0,0xbb01971a,0xbad58139,0xb99f22e6,0x3a400085,0xbab6ff03,0xba1be7ef,0x3a3ede07,0x3a42e57b,0x3a051411,0x399d6e7b,0x39a2edf9,0x39fbe0de,0x39ea0fed,0xbad5b24b,0xbb2b4fcb,0xb89b159e,0xbac1bcf7,0xbb1d26e2,0xbb1b5a71,0xbb1cbd0b,0xbb1c31b8,0xbb192d45,0xbb196f03, +0xbb16a504,0xbb10b498,0xbb1bbb14,0xbb1c85d4,0xbb248d3b,0xbb26a3a6,0xbb20d316,0xbb29c020,0xbb1fc7c7,0xbb143ddd,0xbb09a00a,0xbaf9de84,0xbb6a7280,0x3b2dfe75,0x3b02755c,0x3b425546,0x3abd418f,0xba9305ce,0xbb1877fe,0x3aa7f75a,0xba4e9e9a,0xbb32b4c8,0xbb47d66d,0xbb50d44a,0xbb312cd4, +0xbb36df81,0xbb5ab578,0xbb349859,0xba3421c5,0x3a9b92bf,0xbb2423c9,0xba8fdd60,0x3a6500f5,0x3b2918ef,0x3b090405,0x3b1b1643,0x3b278b15,0x3b345f82,0x3b305890,0x3b1a1ab7,0x3b1544cf,0x3b0ded9f,0x3b0da800,0x3b14de89,0x3b11d8e4,0x3b0ea8f9,0x3b12fa2f,0x3b107571,0x3b0a1229,0x3b0a1fa9, +0x3b2bb7f6,0x3b33fc3b,0xbb35c508,0x3a467701,0xba084aa4,0x39c17748,0xb8ad0bfe,0xba5e94bc,0xba0bae2c,0xbab6739a,0xbaab6860,0xba527d77,0x39af2148,0xba30152e,0xbad174d4,0x3aaa2ac0,0x390668e9,0x3a6ac4ef,0xba4ea44e,0x3b044bca,0x3b2460a0,0x3b403ee4,0x3b824971,0x3b7f967d,0x3b7c5451, +0x3b73b565,0x3b663205,0x3b700182,0x3b7dc0ba,0x3b62a5d9,0x3b4662da,0x3b4c0bb7,0x3b6a8142,0x3b73e608,0x3b6788d5,0x3b428789,0x3b4cf48d,0x3b2c0a46,0xb9445bcd,0x3ac7c990,0x38a1d1d7,0xb9f1655b,0xbadf6513,0xb6951a05,0xbb24285f,0xba908252,0xbb04873d,0x39f99f5e,0xbaa28092,0xb9aba403, +0x3a0bebf5,0x3acd8473,0x3abdbbdf,0x3a02509b,0x39b6c06a,0x3ab03505,0x3b649f08,0x3b78793d,0x3bbd673f,0x3bc782ba,0x3bc2f523,0x3b9133f8,0x3b8d7483,0x3b726163,0x3b86d57c,0x3b7ac0d8,0x3b7f325c,0x3b6043d9,0x3b8a8628,0x3b838eb1,0x3b67e057,0x3b4f148f,0x3b60b379,0x3af8ff4d,0xbb09c873, +0xba2b8c15,0x3a82aa31,0xba747c4a,0xbb03b93e,0xba96b751,0xbb90e85e,0xbba3fbf6,0xbb5769fe,0xbb27882b,0xbaa4e51f,0xba3ecf41,0x3a76a0c9,0x3ad18bfd,0x3ada1705,0x3ab2fdc9,0xb946fe32,0xb902ef07,0x3b67ba23,0x3b7b7d54,0x3be8c54c,0x3bfeaf65,0x3c04cb30,0x3bbbf4cb,0x3bbb1244,0x3bbaefae, +0x3be8e1df,0x3b9cfb97,0x3b9483bf,0x3b935575,0x3bc32382,0x3bc43e9e,0x3bba8793,0x3b8135ca,0x3b5730bd,0x3b4bdb0f,0xb903aeb0,0x39799b6c,0x3ae089a1,0xbb025926,0xbb56a1e5,0xbad24757,0xbb915b86,0xbb9b7136,0xbb1122ec,0xbafde8e8,0xba2c9821,0xb81277ce,0x3afe57f7,0x3b25a543,0x3b10b432, +0x3b256913,0xb9b9c260,0x3ac1082f,0x3b8e39bd,0x3bbb2dbf,0x3c1c8421,0x3c268f89,0x3c1ff7d7,0x3bd0d3d9,0x3bc5b19c,0x3ba14444,0x3ba8e543,0x3bb36e0a,0x3ba76e68,0x3b903f3b,0x3bcd88ee,0x3bbb1cc0,0x3b9a6227,0x3b78f988,0x3bbca654,0x3b730352,0xbae0ab31,0xbae819de,0x3960aff9,0x3b59a5ba, +0x3bc063f1,0x3bad01dc,0x3b41c3db,0xba1a26e0,0xba85b1f7,0xbac7e505,0xba9a1130,0x3b55b1cc,0xbb4c5fc4,0xbb715627,0xbb8a9eb4,0xbb119698,0xbaefff66,0xba647d11,0x39a22993,0xba413b5f,0xbb5447d7,0xbb9e05b4,0xbaf5959d,0xbb0421a5,0x3c1b1697,0x3c488f3e,0x3c117b5b,0x3be71424,0x3b8ee084, +0x3a6ff7e1,0x3b15f6fb,0x3b5b0312,0x3b014f09,0x3bd1932d,0x3adf2897,0x3b5d0878,0x3be4ea95,0x3c0b982f,0xb98b4aba,0xbba0949d,0xbbfc4695,0xbb7d4a5f,0xbaf4b12c,0xb8865019,0xb98abe1c,0xb9812085,0xbaacaccd,0xbaa1ecd7,0x38a31168,0x3adff66d,0x3a9d00ec,0x3b050f1b,0x3a6899a5,0x3b670884, +0x3b904980,0x3b9a8072,0x3bf338af,0x3c033a81,0x3bd1cef4,0x3a43624e,0xbb4eed21,0xbba11ade,0xbbeef82e,0x3ab36831,0x3b93d492,0x3b11925a,0x3a735f9a,0xbb46360f,0xbbeed393,0xbb26af2e,0xbb4a8d7e,0xbbf8c35b,0xbc24f84c,0xbbd5a2cb,0x3ac29c2d,0xbb8a2c41,0xbbc1f78d,0xbaac8e40,0xb985389a, +0x39bd5baf,0xb51682fe,0x398a0a3a,0xb8c1189f,0xbacb83cd,0xba439145,0xba30b9f3,0xba96c120,0x3a391a37,0x3abad550,0x3b3e9979,0x3afe8503,0x3a4c1b14,0x39bae686,0x3af99477,0x3b122d37,0x3af5335c,0x3aeda491,0x3a9b61b9,0x3bad022e,0x3a54817d,0x3986a3ac,0x3b3797bf,0x3b99239d,0x3babcbea, +0x3b712b1b,0xb9727b67,0xba9a22a8,0xbc030b2b,0xbc164a31,0xbb9b25dd,0x3b5c0de0,0xba72c1e3,0xb9109dd9,0x3a4ebc6f,0xb9e44977,0xb988b402,0xb6fb0bf6,0xb71ef31c,0xb92631f1,0xba2eed21,0xba3f45ac,0xba288cb1,0x38b0ee80,0x3a443f74,0x39f095d0,0x399f7416,0x3aee6861,0x3a68637e,0x3a0cd7b5, +0x3a504bde,0x3aa9975d,0x3ab90d63,0x3b6ec480,0x3b7ae23d,0x3c0bc3b4,0xb9bacfee,0xbb167af2,0x3aaa78ce,0x3bdaf1b8,0x3c2af172,0x3c4abba6,0x3b88060f,0x3b3f7664,0xbaa37bb6,0x3bfdca84,0x3bee9b09,0x3b926b33,0x3b04755e,0x3af5ce94,0x3b1b3a4b,0x3a5f8b1a,0x395e1d96,0x390cbd42,0xb9334135, +0xb9862410,0xba0bb227,0x39e73685,0x3a916b52,0x3af0a723,0x3aab4aa0,0x39aeec65,0x3a9a75d5,0x3b00e51f,0x3b5e7ba1,0x3ba6d75f,0x3b93da02,0x3b50ec03,0x3a9577ab,0x3a756a3f,0x38d140db,0xbb166b4b,0x39ff4a3b,0x3adc8882,0x3b08aa6b,0x3b944e67,0x3bc44eb4,0x3c353a95,0x3b89f7d9,0x3bff615a, +0x3ada5c86,0xbbc3c129,0xbafdf206,0xbb10b819,0xb97dff54,0xb8baf2c6,0x398c8969,0xb9f56e9e,0xba7b5dea,0xba68a539,0xba8da12d,0xba07dff9,0xb9c356b5,0xb93a3384,0xb9f16b29,0xbaf4fb8d,0xbb3e5909,0xbb576173,0xbb54bad0,0xbb1a5eec,0xbb44d326,0xbabc70b9,0x388b7b6a,0x3b03de97,0x3b6b0eed, +0x3b9dda05,0x3bb46863,0x3bdc2d42,0x3b929b76,0x3b4049c5,0x3b55409c,0x3b552006,0x3b53c9b4,0x3b6b35f4,0x3bc1e965,0xba446c3f,0xba40ac8c,0xbad7038e,0xba69cf53,0xb9e990b2,0xba407e57,0xb9005e03,0xb96637c5,0x39b2e339,0x384e51af,0x39e60517,0x3a9b5225,0x3ac86208,0x3a8d1ccf,0x398b8a9d, +0xba03a5c8,0xba8120ad,0xbacb699a,0xbb092271,0xba9946af,0xb95735a4,0x3a6a1979,0x3aa1c0ac,0x3b361002,0x3b678116,0x3b8bbcfa,0x3bae3a7e,0x3bb74d90,0x3ba8bbe0,0x3bc1020f,0x3bd62cd9,0x3bfef927,0x3bcde33d,0x3b9a7e8c,0x3b309f0b,0x3a0f3f9d,0x3b84753b,0x3a84e9f4,0x3ac7b961,0x3ad2c344, +0x3b1f803d,0x3b71b67d,0x3b3d7552,0x3b35b2e2,0x3b23ede4,0x3b2d5eaf,0x3b07f9cc,0x3aff8c08,0x3a8667d0,0x3a63fc28,0x38b5b343,0xba57c294,0xbafdecaf,0xbadbb62c,0xbaadc204,0xbad834ce,0xb99581fa,0xb9c7e5a7,0xb9aa8285,0x39f6ec0d,0x3a9e4136,0x3ae05a04,0x3b3f2169,0x3b840b86,0x3ba984c0, +0x3bab2783,0x3bae719c,0x3bd00d9d,0x3ba94688,0x3b8595f5,0x3b6c85ef,0x3b3ed2ee,0x3b5cc5a7,0x3b6c2b5e,0x3afb5092,0x3b464418,0x3b13f666,0x3af2e25f,0x3b19c1a6,0x3b501f20,0x3b1d07d0,0x3b07b247,0x3aae1c97,0x3acb080e,0xb8886fdc,0xb8568576,0xbab6d59e,0xba54d6e8,0xbabb5357,0xba9de0eb, +0xbaf26496,0xba2a56ef,0xba446689,0xba932d7b,0xba9d6a5c,0xbaa32af7,0xbaac1ec1,0xbaa9f0f6,0xb97db47d,0x39d637c9,0x3abdd912,0x3ad9b00b,0x3afc4a0e,0x3b0e8083,0x3b0d33be,0x3b32b0a2,0x3b54e306,0x3b4ff0fb,0xba9f32d9,0xba755b32,0xbb5c5a18,0xbacdf440,0xbad86a77,0xbad11693,0xba8c8dd1, +0xbb1c3574,0xbadf20db,0xbb263c79,0xbb410a38,0xbb5115bd,0xbb261442,0xbb515a75,0xbb1ddf78,0xbb140452,0xbb3bfc02,0xbacf4acd,0xbb30894c,0xbacab348,0xbad56c6c,0xbaac3c35,0xba971fc5,0xba8622e4,0xba49539b,0xba0cd67d,0xba4ad47c,0xba23836d,0xba26dae3,0xb9f70858,0xb80b078e,0x39b05a25, +0x392c6db3,0xb9cf2335,0xba4f8c85,0xba60da69,0x39884c7b,0x3a13acfc,0xb9962cb1,0xbad73921,0xbb1fc525,0xb81d814f,0xba8c9b82,0xbb131721,0xbb30385d,0xbb2ec7f2,0xbb2da661,0xbb42d3b2,0xbb65858f,0xbb72d182,0xbaeaa3ac,0xba2784bb,0xbb4dc8b0,0xbb0306fe,0xba57be50,0xb9cc9ca0,0xba009062, +0xba1195fc,0xba1e5359,0xba3143d4,0xba3f159a,0xba39d138,0xba28d19e,0xb9d4651b,0xb99e31fc,0xb946e74a,0xb916aa0f,0xb8ed252d,0xb8971354,0x38897522,0x397cf331,0x39aa88ba,0xba86823f,0xba13c52d,0xba0ccb02,0xbacfc747,0x3a1273cd,0x3b284bd4,0x3b330a82,0x36f83631,0x3ae6e4c0,0x3b4725d6, +0x3b45fe0b,0x3b46bc89,0x3b2bd057,0x3b366d62,0x3b572ba8,0x3b2ece9f,0x3b0c89a7,0x3a431f40,0x3b453fd8,0x3b24bc45,0x3a6b5e4e,0xbab6b0c7,0xba2b7fb9,0xba2bc2ed,0xba070e59,0xb9f083e3,0xba012414,0xba2f4e96,0xba36c9b8,0xba4c74cc,0xba3efdd6,0xba420e05,0xba3fcf64,0xba610760,0xba2571c0, +0xba0de245,0xb9b49e4e,0xba162409,0xba2f0f75,0xba73ddf4,0x3b6eaebb,0x384465ec,0x3af79b82,0x399da8ae,0x399c956e,0x3970a1ec,0xbac17a8e,0xb9f9140e,0xb8c9d28a,0x38f2dae7,0xba0350bb,0x39f70d51,0x3b35a37c,0x3a42ed64,0x3adf8278,0x3a5ca79a,0x3b0b65e2,0xba54b683,0xba8cf30a,0xba190800, +0xb89d4708,0x375a1316,0xb7d5c5bd,0xb9b76c21,0xb9e9b87e,0xb9c88d77,0xb95fef58,0xba8a4994,0xbaad08e5,0xbaa335ca,0xb9199130,0x39cf004a,0x3a811518,0x394d0766,0xba264f49,0xb9e1a854,0x3aeb26bb,0xba21a363,0x3a84ba60,0xb9e19931,0x38159eae,0xbaf76537,0xba960c4c,0xbb4822a2,0xb9e3e6cc, +0xbb2dd0b2,0xb997153a,0xba8c0fd1,0x3a88a3a0,0x3a420ba5,0x3a5e4629,0x3ab4bc5a,0x3ab27cfe,0xb9906a51,0xbaafeead,0x37ba943a,0x3a0e480d,0x3a946339,0x3a643b49,0xb91928e3,0xb8345284,0xba151fd2,0xb98fd274,0xba761cc6,0xba7f2456,0xbaab31a5,0x3a0ab753,0x3a99d13f,0x3af9e1e4,0x3a2116a6, +0xba39efb0,0xba185d80,0x3af3aad7,0x390212d5,0x3a57be68,0xba0f84fa,0xbabfa5f4,0xbb1d68ac,0xbb94092e,0xbbb137c0,0xbb529b31,0xbb63501f,0xbaa4ac16,0xbb190fc2,0x3ab790e7,0x3a48d7ef,0x3a3e4f18,0x3a90be65,0x3a9f3ccc,0xb885cb50,0xbad78797,0xb7364c64,0x3abac0c2,0x3b01daf1,0x3b0145e3, +0x3a20d77e,0x3a2ffc39,0x3a18ce27,0x3ab876b0,0xbad383c9,0xbaf0ec2f,0xbae9917f,0x3aece68e,0x3b4daf1d,0x3b86ce53,0x3b0cf1ee,0xb9cfaeb3,0xba09032f,0x3ac38d01,0xba2fd897,0x39ba9891,0xbb087faa,0xbb5cd51a,0xbb1193f1,0xbb95618f,0xbba14368,0xbb28600f,0xbb0ab13e,0xbab9e8c3,0xba298d11, +0x3a759051,0x3ae60de8,0x3afb64ac,0xb84e58fe,0x3b40515a,0xb9ae2c17,0xba30ac2d,0x3a866f3f,0x3b2b1eb4,0x3b6a9d3f,0x3b47eca2,0x3a224029,0x3a115855,0xb9dac78a,0xb97d27c1,0xba7a569a,0xba7b73a7,0xba874de7,0x3b31f380,0x3b8022ba,0x3b842913,0x3b023632,0x3aca49b7,0xbaae40e4,0x3b1d5953, +0x3b1600d4,0x3aa12298,0x3b9f6eef,0x3bb97d9a,0x3bc2f85d,0x3b454c4c,0xb9f26590,0xba566a55,0xbaa896e0,0xba9bf8cb,0x3b4b6272,0xbb4037e1,0xbb9035e5,0xbb7cc8d1,0xbb9e7428,0xbb3509cb,0xbb97990c,0xbbe3df7c,0xbbd0e0de,0xbc223a42,0xbbfc01b9,0xbbaf1eb0,0xbbac80f8,0x3b2c9e8b,0x3b85224a, +0xb9239c74,0xbac816fd,0xbb92f373,0xbbe7efdb,0xbb894071,0xbb448867,0xbb4d59c1,0x39b8015d,0xbb84df50,0x39f3d803,0x3c2bb161,0x3b8eb7d3,0x3b2b81e7,0xbbc32742,0xbbf61b0a,0xbb6e8501,0xbb0fb51f,0xb8a1c298,0xb95bb901,0xb9838079,0xbaa09197,0xbae05fa0,0xb8a79eac,0x3a1dd9ea,0x3a93ff3a, +0x3aa5fff1,0x3b413696,0x3b8c1796,0x397ed355,0x3ab808f4,0x3a3dba03,0x3b803f4f,0x3b5cbabf,0xb9eb8b51,0xbb5acb13,0xbbae7017,0xbc01a7d6,0x395973de,0x3b7d3548,0x3b1eeadd,0xb95d5c54,0xbb86332d,0xbbeffd4f,0xbb887ea7,0xbbbbd09c,0xbbfd9edd,0xbc2bed34,0xbbcfdbaa,0x3a5f3fac,0xbb88a9d0, +0xbbb54a39,0xbb07feb8,0xb94d9ca6,0x3951bce9,0x372d3168,0x39228dc5,0xb93e1d7c,0xbabd1c56,0xba82c8af,0xba33a057,0xba9711b4,0x396418fc,0x3a6dc86e,0xb8b7e5a0,0xba7e7094,0xba938e40,0xbb18d701,0xbb254d71,0xbb6fb7f7,0xbb8e2b13,0xbb988a30,0xbb8542ba,0x3a0df1c0,0xbba7fa94,0xbbe9a452, +0xbb3870a2,0xbaaebe66,0xb8681e66,0x3a2a1d72,0xbb4b0059,0xbb316d27,0xbbe3f9f5,0xbbd09dc5,0xbb9b16b5,0x3b3cc0cb,0xba0f9e06,0xb9789881,0x386f266d,0xba0f431c,0xb9448642,0xb8c16148,0xb8054143,0xb93d2651,0xba36d224,0xba791f09,0xba7e3e9b,0xb9adb998,0xb7627871,0x3a738ce4,0xb90fd598, +0xba8919ee,0xba83c6e7,0xbacd46d4,0xbb65d919,0xbb8a5895,0xbb9b2307,0xbb2ef36a,0xba9bb472,0x3b772ad0,0xbbc4f5b9,0xbc1c79a8,0xbbd64ca0,0xbacfbf6a,0x3b1f33c6,0x3bb24888,0x39df7193,0xba015648,0xbacceaf0,0x3bb4475a,0x3bbda6b2,0x3b9c0224,0x3a0d95a5,0x3a71c9fd,0x3b275fa7,0x3a1ef7a8, +0x3907daf6,0x399e5cca,0xb94f9109,0xb999d615,0xba7940e4,0x39ad5644,0x3aa4a3d7,0x3b087c90,0x3a7f2739,0x3a97970b,0xb8aed9ae,0xb92352bd,0x39da909e,0x3a8bfaab,0x3b09642e,0x3aec477e,0x398b58c5,0x39dfe047,0xb9504228,0xba99cf86,0x3a8f3111,0x3aca2141,0xba86ad51,0x398c236d,0x3943c639, +0x3a20db97,0x398a96ed,0x397a743b,0x3b62e43c,0x3ad47f1f,0xbaf9d57d,0xba6a5b16,0x39fd2c52,0x39e36e03,0xb9e1f7ad,0xb8d0944d,0xba4fce2c,0xba13f485,0xba80cdd5,0xb9e5232e,0xba016888,0xb7de6303,0xb9f1f173,0xbb05087b,0xbb1cd3db,0xbb2d6c7c,0xbb29027f,0xbb43378b,0xbb1360c7,0xbaef2d4b, +0xb9af1c5d,0x3a579097,0x3a9c31b7,0x3b14a97e,0x3b1bb9fe,0x3b297385,0xb9a4cae2,0xbb1daf15,0xbb632718,0xbb6ff1ca,0xbb4ed5ed,0xbb59d50e,0x3a43b5ff,0xbb91b962,0xbb4a3c90,0xb9acbb74,0xb9fc20ee,0xb97c04e2,0xb9e1513b,0xba1bc57a,0xb92a20fc,0xb9b7c8f4,0xb82bcb08,0xba1f5f95,0x3a0ed231, +0x3a5351e1,0x3a5fbb32,0x39a3dbfa,0xb998f0b4,0xba7a2f81,0xbaf9b81f,0xbae12f8d,0xbb0494e7,0xbad512d7,0xba63a080,0xba0f83ea,0x3ac02c41,0x3b2718d3,0x3b5d81ec,0x3b8e2a8e,0x3b96cc3c,0x3b9a3581,0x3b9498e6,0x3b6e107a,0x3acf375e,0x3a288304,0xb9bc7401,0xbafc9712,0xbb4c9dd1,0xb9aae643, +0x3b4a22f7,0x3b02651c,0x3b02dfbd,0x3b3d64ed,0x3b09cd5a,0x3b3ed061,0x3b112ed3,0x3b1b0467,0x3b0b2c5d,0x3b14fd1e,0x3af4d727,0x3ad2073f,0x3a82b457,0x394277be,0xba1107ae,0xba9ed74d,0xbaa88e11,0xbad2703e,0xba7294ac,0xbb02350c,0xbab90020,0xbac23688,0xba1d6625,0x37f27692,0x3a061673, +0x3ac0f9c4,0x3b1ff05c,0x3b679861,0x3b4201a6,0x3b19d917,0x3af7271c,0x3ad8482d,0x3aa18d14,0x3a26fc45,0x3a897afe,0x3b09b50f,0x3ae7131d,0x3b734641,0x3b43e0ff,0x3b6f4d5f,0x3b668c30,0x3b43777d,0x3b21c4db,0x3b25f50b,0x3aec2712,0x3b229a33,0x39da864c,0x39d0503c,0xb9e39d7e,0xb985b900, +0xba8264c9,0xbacf025a,0xbab919f6,0xb9f4133d,0xbae201a3,0xbb069df2,0xbae63a25,0xbb02ea49,0xbaece615,0xbaf4ba5b,0xbadde84a,0xbaa4ea80,0xba879d35,0xb9dc1eeb,0xb9c69d49,0xb8d7baf3,0xb77449b4,0x3984caf6,0x3a816783,0x3ad253ac,0x3b0380b8,0xbaee7609,0xbaca7946,0xb9c03dd7,0xbafcb735, +0xbaf23124,0xbabbd8a3,0xbae541a7,0xba664af0,0xbb057bc2,0xbacd8179,0xbaf2e3c4,0xbae4655e,0xbb1a7d36,0xbb1d1a09,0xbb1543ef,0xbb004b70,0xbabc0ffe,0xbb1d51b2,0xbacc50de,0xbb2e7fc5,0xbb092222,0xbb0df28c,0xbafab96b,0xbaf13e46,0xbad46a9b,0xbab0552f,0xbb01367a,0xbb04ab74,0xbb190226, +0xbb2b863a,0xbb2a7a1d,0xbb33ec6f,0xbb1d99be,0xbb1e21ba,0xbb1c417d,0xbb126918,0xba92daa5,0xbaa4856f,0xb992d576,0x3a51c09a,0x3a6145af,0xb98649c7,0x3a0aacf7,0x3a93ba69,0x3a97d5b0,0x3a645617,0x3a17ce4a,0x3a126291,0x3a26bea2,0x3a0a9f8e,0xb9b09dc4,0xbac1f2a8,0xb7cb76c3,0xb9a6ef1c, +0xbaa2ad7e,0xbb0733dd,0xbb002824,0xbb03ed6e,0xbb05523a,0xbb09bb51,0xbb0ab96d,0xbb068905,0xbb096718,0xbafe219a,0xbafcc46c,0xbaf06d0a,0xbae148ce,0xbae40170,0xbad28474,0xbabf9b81,0xbaa363c1,0xba8ec8a7,0xbb376771,0x3a4cd690,0x3a552c76,0x3ad1c37f,0xba2668de,0xbafdf508,0xba98a498, +0xba0e6c07,0xbae163ff,0xbaff7172,0xbafb1662,0xbaeba00f,0xbab72b0a,0xbab7223e,0xbad6571d,0xbabcd60d,0xbadcab2e,0xba3806b0,0xba6eaead,0xbad91b5f,0xba44fbaf,0x3ab027bc,0x3a660d8d,0x3a805eb6,0x3a967cbc,0x3aaa515e,0x3aa359b9,0x3a750fb4,0x3a6c62f1,0x3a541aa1,0x3a67f40e,0x3a59f369, +0x3a47fa3a,0x3a2d5ca5,0x3a44d5c5,0x3a4b1242,0x3a6c1f3b,0x3a5ac31d,0x3aa3086a,0x3a20547e,0xbb31cd2b,0xb8f7b4d4,0xba986ed0,0xba030c0a,0xba996e44,0xbacb223c,0xba8796fc,0xbb16c734,0xbb021a89,0xbb04b3ed,0xba4f77b4,0xbabc6b3c,0xbab37602,0xb892e4f3,0xba459e74,0xb78ebaf8,0xbab90bca, +0x3919e333,0x3a8c94cc,0x3a93231b,0x3afe54ac,0x3af6b085,0x3ae86bd0,0x3ab531a4,0x3abe4dcf,0x3ad5b6ae,0x3b015e06,0x3a80ec92,0x3a089aec,0x3a34e1e2,0x3a9a2085,0x3accb77e,0x3b05ac05,0x3aa1d538,0x3af24a6e,0x3a796628,0xbab594dc,0xb82dd997,0xbabab4b8,0xba9e5568,0xbb0ad5c9,0xbabc9dcb, +0xbb38eae6,0xbac3b36f,0xbb51f9cb,0xba21e9f9,0xbaca05fb,0xbafbe3cf,0xb9c33108,0x39aefbea,0xb7eafc63,0xb8b0388f,0xba08732d,0x39ea6f37,0x3aee2b16,0x3ae19039,0x3b4db7bb,0x3b640df5,0x3b5d9176,0x3ae36ac4,0x3b011790,0x3abf9ae1,0x3b0b351a,0x3a83744b,0x3a3c5e90,0x399dd805,0x3a979e23, +0x3ac7854a,0x3b14dee9,0x3ac5af02,0x3b092f85,0x3a0354ba,0xbb39b0f1,0xbac1bc89,0xba2ac099,0xba8665bf,0xbaea4b26,0xbb365135,0xbb90fad3,0xbbab2130,0xbb6df473,0xbb456668,0xbb10984b,0xbae16028,0x38d0b0a4,0x3a266091,0x3997ceb3,0x3a299107,0xba406a26,0xba2fd1bb,0x3aec1344,0x3ae3481a, +0x3b811a9c,0x3b8f8d0d,0x3b8d5189,0x3affcfd6,0x3b31d053,0x3b39a8d7,0x3b9358c3,0x3a42c928,0x381b2861,0x39ddeed7,0x3af1ccf1,0x3b40f990,0x3b9291bd,0x3b058855,0x3b0d340d,0x3ae24240,0xbab309d5,0xba444835,0xb9ee9d22,0xbb029033,0xbb5260dd,0xbb27d86a,0xbb914e49,0xbb9dd335,0xbadd5d4f, +0xbb022480,0xba9b9967,0xba93244e,0x3ab88b98,0x3ae06353,0x3a74cf04,0x3b1b1371,0xb9cc1b0d,0x3a8520a2,0x3b3ec4cf,0x3b49c3f8,0x3bb89423,0x3bd28939,0x3bbe6564,0x3b335895,0x3b3e13a9,0x3b0fec8c,0x3b4cf0a0,0x3ab7829b,0x39b2e942,0xb8925239,0x3accc332,0x3b1d8f59,0x3b6fd39d,0x3b0e5235, +0x3bacddac,0x3b32a98d,0xba873add,0xb991818e,0x3a06e709,0x3b7da8ae,0x3bc7f290,0x3bba4ab0,0x3b681795,0xb858d7a6,0xba16e44e,0xbaa284db,0xba79782c,0x3b44e6d1,0xbb399d50,0xbb5cae9d,0xbbbef10e,0xbb8f8a91,0xbbb67815,0xbbb5381e,0xbb8a6db7,0xbb81c0c0,0xbbab9135,0xbbb94122,0xbb182a7d, +0xba8e7d96,0x3bfbf0d6,0x3c11190e,0x3b923cb7,0x3b3bd3aa,0x399f786d,0xbb4d1d0d,0xba23eb37,0x3a545109,0xb91ab075,0x3ba5d3a9,0x3adbe277,0x3a37df8d,0x3b5e1d71,0x3bc3851e,0x3a859a49,0xbba8daec,0xbbfa986a,0xbb8065c6,0xbb094932,0xb995c7e0,0xb8dfccc3,0x372654e7,0xba92b5f3,0xbac7cb63, +0x38aa8fb4,0x3ac0b629,0x3a879527,0x3ab1cced,0x3a5eae6d,0x3b3de24a,0x3b464727,0x3b398354,0x3b793806,0x3bbe243f,0x3b7f5ecb,0xbae347e2,0xbba14a67,0xbbbdadb4,0xbbcd06e8,0x3ac3d7d0,0x3b6e5736,0x3a4453f8,0xbb2d1bf1,0xbbbd6e6a,0xbbe41b27,0xbb28c2c5,0xbba4a328,0xbbca0782,0xbc0a5589, +0xbbbad3f0,0xb97ac097,0xbb69a8ae,0xbba4bfa8,0xbb22b48b,0xb9918f3c,0x39a7ade0,0xb815c868,0x39390d25,0xb86c720a,0xba8eeccf,0xba9b8c5a,0xba8ec3ab,0xbada42ea,0xb9f1f6ac,0xb9ced96b,0x3a66830a,0x3a3e7ade,0xb9b5cd5d,0xba94c416,0xb94d1d8e,0xb9cf0910,0xbaeffd50,0xb9ac545a,0xb915744a, +0x3b7f87e4,0xba6d06b5,0xbb38ef37,0xba61df6a,0xba8e8fc9,0xb9b32fde,0x3b389522,0xbb68fdb3,0xbb2454ee,0xbba1a691,0xbbdbb650,0xbb86c795,0x3a94d227,0xba1c6db8,0xb9b7754a,0xb9d88d44,0xb9d7c10c,0xb90b2ba0,0xb8a1d42d,0x37964b56,0xb9628cc9,0xb9d8c269,0xba58fb39,0xba9823cc,0xba095d63, +0x39944ac4,0xb991a375,0xba9bf3f1,0x3a854348,0xb93514f4,0xba4236d1,0xbab66c4f,0xbad03491,0xbb19867d,0x3a1f0de7,0x3a9ee147,0x3bb53534,0xbb7e2ed8,0xbbba9da5,0xbb00de0d,0x3adf350a,0x3b96f950,0x3bd39efb,0x39d0aae8,0x3a22a470,0xbb54ab13,0x3b29ecf1,0x3b8adac8,0x3b70221e,0x39ffefd8, +0x397b9e49,0x3af784cf,0x3a248646,0x3956c61b,0x38af3aa0,0x38047919,0xb9be1413,0xba4c2909,0x39458a71,0x3a8289fc,0x3b025079,0x3aa9d871,0x3a34e46b,0x3ad18835,0x3adc1301,0x3b11b0d1,0x3b35575f,0x3b339310,0x3ace2dd7,0xb974106b,0xba4beed5,0xbacf03f7,0xbb483822,0xba2a4f4b,0x3953c8e5, +0x3a3e8d92,0x3ae73eac,0x3b030025,0x3b384d2f,0x3a119125,0x3ae73478,0x3a1b76db,0xbb350430,0xbaf4316f,0xbacdfa78,0xb6eaf65c,0xb8ce07af,0xba461638,0xba2a2984,0xba405e45,0xb9de3af6,0xba58ed98,0xb9e9914e,0xb99bef93,0xb62a1751,0xb90b3085,0xba85fab4,0xbb2a2c6b,0xbb5b1841,0xbb595221, +0xbb10c5e5,0xbb260917,0xbaba330b,0xb9f7cf2b,0x3a0fd94a,0x3a824970,0x3ab94ea2,0x3abb9e07,0x3ab79ec5,0xb9bfb229,0xbac15774,0xbaf8d5b2,0xbb399d53,0xbb38861b,0xbae16da4,0x3a35b578,0xbb8489fb,0xbb916585,0xbb6e6dcc,0xbb1c3d94,0xbaee15e5,0xbacb34a0,0xba54ffac,0xba3e0fc0,0xb9558bee, +0xba536cf1,0xb9972252,0x3889e04f,0x3a5e19ce,0x3a81264a,0x39d0c587,0xb9e3faa6,0xba7d8681,0xbae8d875,0xbb16e6ea,0xbaba21d9,0xba2c523a,0x396cb078,0x3a458089,0x3afb506f,0x3b30530a,0x3b61b0fc,0x3b97d9fe,0x3bab79d4,0x3bafe613,0x3baa5d3b,0x3b92b0b1,0x3b5ea0a9,0x3b2bf5e5,0x3a9bc113, +0xba70811f,0xbb2dab36,0x3ac8fea0,0x39e4a177,0x39a950d0,0x3a2ae61e,0x3ab732f4,0x3b2f84fe,0x3b09b927,0x3b026f09,0x3af2912b,0x3b1451b5,0x3b057697,0x3b0aadb5,0x3abb873a,0x3ac863f7,0x3a03aa88,0xb9b8eb30,0xbaed824b,0xbae80057,0xbad30fbc,0xbb00f457,0xba452ec0,0xba4ad278,0xba11d7a2, +0x372e92c7,0x3a1f8216,0x3a8de74e,0x3b0a8895,0x3b49ee7a,0x3b86e01c,0x3b816aeb,0x3b748db8,0x3b7a8731,0x3b415901,0x3b113e58,0x3afd84ed,0x3a9bc96a,0x3b5c8394,0x3b4ac436,0x3b0466e5,0x3b2c9e5b,0x3b057f5a,0x3adc2279,0x3af15686,0x3b1c25ee,0x3b0953e8,0x3b0395cf,0x3ac0d174,0x3ab6567d, +0x3a06f766,0x3923970b,0xba5e1e78,0xba3393d4,0xbaae9dfe,0xba980c0b,0xbae321fc,0xba8805c6,0xba273859,0xba9320f1,0xba8ace86,0xba9799cb,0xbaa11362,0xbaaa775e,0xba057c97,0xb9359069,0x39eaf175,0x3a41a4b4,0x3a979af1,0x3ad01471,0x3af8795e,0x3b1e0c46,0x3b411652,0x3b4210d0,0xba5085f7, +0xb9a9a70c,0xbb0403a5,0xba603dba,0xbaa31fb4,0xba7efccf,0xba4103ac,0xbaa9dbaa,0xbaa7de91,0xbb15fa1c,0xbb367a00,0xbb4d0db4,0xbb3710ff,0xbb59aaa4,0xbb461018,0xbb391a35,0xbb423338,0xbb0fd5a3,0xbb4042e7,0xbaccefa2,0xbacf099e,0xbab97a4b,0xbaa35d21,0xba99b802,0xba75d447,0xba36a440, +0xba5770a2,0xba0e29ba,0xba13d824,0xba15d8bd,0xba030953,0xba1595a6,0xba040128,0xba65edca,0xba66bf73,0xba3ff952,0x36dac0bd,0x39501c03,0xba793043,0xbad695cf,0xbab7c43e,0xba5c1ec1,0xbacaf3f9,0xbad0dfa5,0xbaf0d02f,0xbae03bad,0xbad596c7,0xbaf457d5,0xbb1279f3,0xbb1e5209,0xbb0e41e5, +0xbaba5b13,0xbb095353,0xbb14b39a,0xbacbbeee,0xba275b97,0xba5cf71a,0xba6abef5,0xba76ed47,0xba840052,0xba8a79ac,0xba8af988,0xba8d0991,0xba74336e,0xba687caf,0xba49de1d,0xba1cde14,0xb9fb0076,0xb9b5a1db,0xb98a2663,0xb89084db,0x381a7dcd,0xbaeaf070,0x3aa0e508,0x3a3c3987,0x399077f5, +0x3b073231,0x3b0dfb95,0x39f1dbeb,0x3ac2ce84,0x3ae729f3,0x3a71210f,0x3a604cff,0x3a3afdf1,0x39e9d6f9,0x3a099495,0x3a08ef34,0x39b81fa2,0x3b054208,0x3b017c55,0x39e6e2a5,0x3b012640,0x3afe1bcc,0x39ac1e08,0x3a4900c1,0x3a6e31c1,0x3a81374c,0x3a8e0ff6,0x3a847915,0x3a3ec17f,0x3a3e0f3f, +0x3a34718e,0x3a5212c3,0x3a5221db,0x3a446e25,0x3a2e5f8c,0x3a71ceb9,0x3a7676bb,0x3a61e6e4,0x3a4a14fe,0x3a2226c4,0x3ab1241f,0x3b0f4b4b,0x3a2fbce6,0x3a84f438,0x3a836dd6,0x3a8be481,0xb94ef977,0xba46a591,0x389b8487,0xb9491fa5,0x3a0746f4,0x396dfe46,0x39a8a021,0x3aa20956,0x3ab235b6, +0x3abee67b,0x3aae2897,0x3b02b573,0x3ab1d235,0x3a5cb102,0x3abf538a,0x3b02c561,0x3b0633cf,0x3b01ec21,0x3ae4df08,0x3ad8d909,0x3aeee5c1,0x3b09e10a,0x3aa286e2,0x3a70ceb8,0x3a964f01,0x3b19aa26,0x3b2a8c5e,0x3b1268ed,0x3ac8025e,0x3a453c07,0x3ac04d9c,0x3b086fc2,0x3a52d94e,0x3a20620f, +0x3992a0ad,0x39aadf80,0xbac9c3f0,0xba30a214,0xbadc088b,0xb94bce6c,0xba676a9e,0xb9c8e274,0xb9dd3246,0x3a8a47cd,0x3a9c132e,0x3a9d4940,0x3abce48f,0x3afa5887,0x3aa81376,0x3ab164ce,0x3b266bc1,0x3b527220,0x3b702404,0x3b51d0d3,0x3afebb79,0x3b0c137d,0x3ae511fa,0x3b2d2d3c,0x3adbda9b, +0x3ae35cf0,0x3ab7d0cd,0x3b5f029f,0x3b62e4dc,0x3b282b2f,0x3afbf934,0x39692b5b,0x3aae5380,0x3aed71c1,0x3a0fd246,0x389a46a8,0xb8e66622,0xba88cb78,0xbb33c1dd,0xbb85c522,0xbba406ac,0xbb70548a,0xbb63782a,0xbaa92ac6,0xbb2460cd,0x3a91be78,0x3a1790fc,0x39f5b499,0x3ac8439b,0x3ae7587a, +0x3aade28b,0x3aafe615,0x3b2c66b5,0x3b937586,0x3ba8bb72,0x3bac35c3,0x3b61442b,0x3b6e41f8,0x3b6ede77,0x3ba72dae,0x3ae34698,0x3aee24e6,0x3b02ce4e,0x3bbc1d82,0x3bc45670,0x3b9224ac,0x3b37c2d7,0x3a23fad7,0x3aa755dd,0x3ae4ce59,0xb8355fcf,0xb9bd7076,0xba9d3a4c,0xbb375b13,0xbb4adc96, +0xbb899ff0,0xbb8e3c5f,0xbaf1ea20,0xbaf76342,0xbacaff63,0xbab9f7d9,0x3a6337cb,0x3ac8e838,0x3a9690f8,0x3a15b7b2,0x3b43829b,0x3ae57d7a,0x3b3116b1,0x3b99d29d,0x3bd222f3,0x3be7331e,0x3bc6bfe9,0x3b4410d9,0x3b44ec04,0x3b2f6f75,0x3b776d4d,0x3b36cc88,0x3b32f1e3,0x3b1147a4,0x3bd6ac30, +0x3bd0645c,0x3b70168c,0x3b2e4d6b,0x3bc6d201,0x3b7baaf4,0x3bb28236,0x3b8c95cf,0x3b15e427,0x3baaa9dc,0x3bd79bad,0x3bc732de,0x3b82035d,0x39bcc43b,0xb93273cb,0xba349397,0xba3e5de2,0x3b2fee85,0xbb0aa093,0xbb53d1e9,0xbb997e38,0xbbafc424,0xbb870970,0xbba203e3,0xbbc79e3e,0xbbc4db65, +0xbc1cc6ab,0xbbe137f6,0xbb7d744d,0xbb5ed6cb,0x3b793083,0x3b8d1839,0x3a6e7cc9,0x3933bf31,0xba1fb447,0xb989f57f,0x3abd1f4d,0x3b0cf889,0x3a56a5f5,0x3bb40381,0xbb09ef52,0x3a55069e,0x3bf3bf5e,0x3b8b11d6,0x3b89c18e,0xbb915139,0xbbe788ce,0xbb56f0b4,0xbb0fd76c,0xb981ebdc,0xb80eae3d, +0x3820623e,0xba802880,0xbad99041,0x39cccb3f,0x3a951b11,0x3ad48d85,0x3a9b8c80,0x3b0a0d63,0x3b929a9d,0x3b6c5858,0x3bae1b94,0x3bb4252a,0x3bce2e62,0x3b820e12,0xbabaceef,0xbb891299,0xbbae9b3a,0xbbaa3b4b,0x3b161045,0x3b9fb623,0x3afce681,0xba400f64,0xbb8e837f,0xbbdeee0e,0xbb242460, +0xbbce074a,0xbb9d0c48,0xbbe64ef9,0xbb98c8ca,0xb9901509,0xbb36cee9,0xbb7da47b,0xbb261923,0x36164cde,0x39bb0704,0xb8b209ce,0x395382b8,0x38fa1f84,0xba85a7c6,0xba12e1e4,0xba189bec,0xba91ca7d,0x38036459,0x3a029321,0x39ea671b,0x37a366f9,0x392c3577,0xba6861c9,0x38c098c2,0xba18e7f1, +0xbab76b98,0xba2ea8df,0xba23692e,0x3ad1337c,0xbb3be407,0xbb445dea,0x3b521120,0x3b7d47fa,0x3b8fbcf1,0x3bd5a093,0xbb5b4d40,0xba6f48da,0xbb3feea0,0xbbaa8d04,0xbb7128ad,0xb8fa943d,0x3918f13a,0x37a7be1c,0xba4f863d,0xb99a5bc3,0xb8ce2cf0,0xb7d5cd68,0xb738d455,0x36c917fc,0xb9ace01a, +0xba47ecec,0xba2e1b07,0xb8f1cff1,0x38f39865,0x3a524410,0x391cd50b,0xb9bd057b,0xb9264753,0xba7bfc65,0xba886786,0xba4eed20,0xba5ce732,0x3b1f21f8,0x3b3cd959,0x3ba96ad6,0xbb810d34,0xbba4d86b,0x3aca6355,0x3be76c59,0x3c320f1d,0x3c5f0a10,0x3b46d09b,0x3bacf074,0xba4467c8,0x3aee4923, +0x3b0ce3f5,0x3b71b0d0,0xb948c837,0xb96fb26d,0x3af1f6d2,0x3a0ec8cf,0x39037ffe,0x387d8dca,0x38dcc5ef,0xb98b83ea,0xba41565b,0x39caf841,0x3aaa3a3c,0x3b184053,0x3acc7b5a,0x3adee652,0x3a91e3a6,0x3ae64fc9,0x3b343848,0x3b4ccc05,0x3b7ad39e,0x3b33d5f9,0x3a4a31d4,0x3a3a849f,0x39d5b883, +0x3a17c0ae,0x3ae866a5,0x3b38677e,0x3a8b3773,0x3be5da5e,0x3c0a7b19,0x3c09518d,0x3bfcedca,0x3bc65a87,0x3bb7cde0,0x3a90941a,0x3a414750,0xb9c9db20,0x3a813abb,0x3a536f37,0xba132f10,0x36cbfb46,0xb95f43da,0x39070ada,0xb9eec229,0xb975b436,0xb900949c,0x39937c5b,0x38df19d0,0xba5134e0, +0xba90f647,0xbabb8813,0xbaf7df7b,0xbafc8d51,0xbb008276,0xbac20523,0xb90a1de2,0x3aad25cf,0x3b3e440f,0x3b6bc29f,0x3b7b6c5f,0x3b957460,0x3a951592,0xb8d1134e,0x38d103d6,0x3a10fd5d,0x3adb45a0,0x3b2735a9,0x3bc5e06e,0xbae0d98b,0xbb0a025c,0xbadbfabb,0xbab42cdd,0xba246487,0xba640135, +0xba42ad00,0xb9897c47,0xb982d02a,0xb9746834,0xba414a4b,0x36bc188a,0x39ff27c6,0x3a78a67a,0x3a47a848,0x39aafcd2,0xb96a90b2,0xbad3d550,0xbb02c560,0xbb08625e,0xba982c39,0x3896eb02,0x3a3f9440,0x3b3ee1c8,0x3b81d5be,0x3b9a81f5,0x3bace29d,0x3baa733c,0x3b9ceb57,0x3b92b526,0x3b73e808, +0x3b2458ad,0x3ab682fb,0x3a432fc9,0xb9ea4595,0xba43c8e9,0x3a3ad89f,0x3b009fe0,0x3b11039e,0x3b005e38,0x3b33983a,0x3b158ed4,0x3b2bebba,0x3ae23ee2,0x3b010f28,0x3af3c5e3,0x3b0c752f,0x3aeb9e18,0x3ae8b4a7,0x3ad27a2c,0x3a647b32,0x37fd75c6,0xba587d30,0xba69a6d9,0xba9651bb,0xba6e5636, +0xbab09e24,0xba656430,0xba4cef1e,0x38cdec56,0x3a3f92ff,0x3a93af7e,0x3b10c51a,0x3b4c4c87,0x3b8412f4,0x3b73c978,0x3b639e00,0x3b695a0a,0x3b294fc0,0x3af15c5e,0x3ab6183e,0x3a8b3c82,0x3b52e9fe,0x3b52fed7,0x3b6e6d33,0x3b523b1a,0x3b5675cf,0x3b3e54e5,0x3b2195a7,0x3b0dd198,0x3b24031a, +0x3b0f6975,0x3b4a2d11,0x3ae033d9,0x3a9d0065,0x3a73757c,0x38cffeba,0xb968c1f5,0xba7af578,0xba47cf30,0xb8f86b07,0xba279d50,0xbaa2c5fa,0xba959480,0xbac28b6c,0xbac1c7b5,0xbada96b1,0xbadac27e,0xba354e54,0xb82878d9,0x3a91305e,0x3ac4db1a,0x3b087062,0x3b24b322,0x3b2e20db,0x3b4e0025, +0x3b5a00d7,0x3b61c2d8,0x38a374bc,0x39c9fa79,0x39c9e433,0x37a7c890,0x39017a38,0x39cd6e31,0x39db09be,0x39001af9,0xba04a1b1,0xba2cf76d,0xba9fe3c1,0xba9b9f9d,0xbabb75a0,0xbae001c5,0xba96223d,0xba866314,0xba9948cb,0xbabf9b07,0xbad178c2,0xbb1e7122,0xbb0b505c,0xbaff4905,0xbae1b853, +0xbad0c36c,0xbaac1595,0xba862c28,0xbab546a1,0xba9c6610,0xbaa13428,0xba9015eb,0xba4cfa9e,0xb9c9e848,0xb9813795,0xba196e17,0xb9dfa5e2,0xb8e34e19,0xb88f6802,0x376e7ffb,0x3a321d70,0x3a24154e,0xb998d439,0x3a0dabad,0x3a1dc4fd,0x37dce8d2,0xb87d8498,0xb939ece0,0xb9ba0bd1,0xba006253, +0xba33a550,0xba5f7d23,0x38e6ec15,0xb9946e63,0xba8c84cb,0xb8e2b64e,0xb97d450e,0xba96efe4,0xba8874b0,0xba9652bf,0xbaa0f67b,0xbaaf42c7,0xbab813f1,0xbab5d886,0xbaaa395f,0xba82ff2b,0xba5f7d87,0xba285b6c,0xba01df5b,0xb9b7eba7,0xb987280e,0xb9528000,0xb76dc8cb,0x385a121e,0xbac845b5, +0xba8335b2,0xba00b918,0xba04a75c,0xbad07345,0xba58cb35,0x3a8148ff,0xbac8387a,0xba8672a8,0x39bb2dd4,0x3a2d99f5,0x3a6d0738,0x3a6a4522,0x3a8a2f55,0x3aa9213c,0x3a6fb140,0xba785f67,0xbabd9a1b,0x3ac8c272,0xba03b9aa,0xbaa12887,0xba02ee36,0xba042625,0xba144b12,0xb9ec3e14,0xb9c37d63, +0xb9d90ad2,0xba29ee61,0xba2996f4,0xba38803c,0xba1110a1,0xba3dd241,0xba4fcc71,0xba774dd5,0xba4a19c5,0xba3401be,0xb9d9b84c,0xba1397ae,0xb9f3b61f,0xbab40609,0xb9a76611,0xba31b6d5,0xba18bbe4,0xba414a1c,0xbaa90180,0xbac197d6,0xbab628f5,0xbb081978,0xbaeb1360,0xbb03326e,0xbab9e538, +0xbaa9ffff,0x394a0e96,0xba523615,0xba037dbe,0xb9c86775,0xba071d9d,0xbab2df7a,0xba27ba39,0xba384c76,0xb97a1fac,0xb95c95a3,0xb9b11bac,0xba6409cb,0xba318d5d,0xba03f246,0xb8bffbc8,0xbabe46e8,0xbaf48fa4,0xbae0da23,0xba787533,0xb9c0531e,0x39fe00d0,0xb9d7bada,0x37433e7c,0xba2532ea, +0xba8d1144,0xbab25c29,0xbad80d4c,0xbaaabfb1,0xbaba50ba,0xbb31229f,0xbb0e7044,0xbb09cf98,0xbb498d7b,0xbafb09d2,0xba9b5390,0xbb3003eb,0xba20d98b,0xba104f08,0xba504d66,0xb86a9da7,0xb9e61f4d,0xb994cd09,0xb9c7d44f,0xb983908d,0x398ad852,0x3a37b4dd,0x3a0d7c6e,0xba67a0c0,0xba0425be, +0xba5e0af3,0x3843862a,0xbad26a90,0xbb07cc46,0xbb2070f1,0xba966e51,0xb9ada243,0x3a888af5,0xb8233bff,0xb82149fa,0xba46b613,0xbac982cb,0xbabd19a1,0xbac8ce11,0xba42b0b6,0xbaa5ca60,0xbb8783ff,0xbb844f7d,0xbba40945,0xbb845552,0xbb5a0350,0xbb2296e6,0xbb38d498,0xb9726425,0xb998c34a, +0xba389ec7,0x3915c43e,0xb9b92c4a,0xba0ec5c8,0xba0125c9,0xb9771971,0x3a36a078,0x3a8ce2e5,0x3a426abc,0xba9d7e70,0xb94112cd,0xb5eea3ec,0x3ada3391,0xbb3aa314,0xbb704425,0xbb5595f0,0xba7db47c,0x3a5e197d,0x3b4907c3,0x3a130232,0x39db8d2f,0x37b169eb,0xbaa877d4,0xbac1d145,0xbb063804, +0xbadaf7d7,0xbb393990,0xbb5d7bd8,0xbb79ca9b,0xbb890c64,0xbab71126,0xbad0fecc,0xbab127dc,0xbb012430,0x3a19d58a,0x3a4984a6,0xb6d48447,0x3a97fa14,0x3a441aa5,0x39fe55df,0x3a531b92,0x3a2d37cc,0x3acf2b69,0x3b2484d2,0x3ae053ab,0xba465974,0xba0d66ba,0xba3bbd8c,0x3a655fb3,0xbb0d8ec7, +0xbb5e4dba,0xbb672e71,0xba9f2123,0x3a210748,0x3b295e95,0x3a483f18,0x3b795c1d,0x3a98e997,0x3ac1b5d9,0x3b1ad6fa,0x3ac26817,0x3b9c0685,0x3bbf7144,0x3bb0196e,0x3b7425e9,0x3a143336,0x38687596,0xba210326,0xba054c6e,0x3b1a3239,0xbaf67893,0xbb309980,0xbbca1cce,0xbbc68933,0xbbf08e41, +0xbc086a85,0xbc0bdb24,0xbbefd0b6,0xbc06cf20,0xbbd8ee92,0xbb5a619d,0xba40a479,0x3b86a2c0,0x3b6f4178,0xba84b712,0xbb0c7855,0xbb86d51c,0xbbc673d9,0xbb66ee44,0xbafae3e9,0xbae49a42,0x3b399068,0xb8e3764d,0xba8ed1aa,0x3b12e0a4,0x3b2b4de5,0x3b438f99,0xbba1d012,0xbbdae196,0xbb620107, +0xbb0ad8f0,0xb9fd75a8,0xb8defbfe,0x391ddbb2,0xba528244,0xbad51a1d,0xb5d44c60,0x3a53a03f,0x3a5814a1,0x3a21f6bd,0x3abbb8a3,0x3b2e4433,0x3ab46356,0x3ab0ac29,0x398234ca,0x3b34ce3a,0x3a82674b,0xbb4aade0,0xbbbe90b0,0xbbc76403,0xbba017fb,0x3ac7eb96,0x3b483adf,0x39df0fb9,0xbb8b4347, +0xbbe20de6,0xbbd7826a,0xbb3a5c5f,0xbbdb6651,0xbba92b38,0xbbe45edc,0xbb99fcce,0xbb156018,0xbb1f1fd0,0xbb52f3fb,0xbb385a4f,0x389830c3,0x3998e26e,0xb86ed524,0x38b215a1,0x38ca2a35,0xba27dbd1,0xbaa2d96f,0xba9a9a45,0xbaee139a,0xba9881b3,0xbac48781,0xba95fe16,0xba45e479,0xbaa9639f, +0xbb1c2b3b,0xbb1fe67e,0xbb5a0096,0xbba5d4d9,0xbb338577,0xbafa5809,0x3a7bb3c0,0xbb5f40d5,0xbbc050fd,0xbb6014be,0xbb9b9deb,0xbb838dcf,0x3b1e73f6,0xbbb949a3,0xbb415bef,0xba9f92fd,0xbb8618de,0xbb82253d,0xbb00260e,0x3670e719,0xb8c4b2b4,0xbaa85935,0xb97fc36b,0xb90bdbf0,0xb71501cb, +0xb7d53a7c,0xb88d2ad0,0xb92959b5,0xba3ce1a6,0xbaaa2bb2,0xba5ed9bc,0xb91642dd,0xb9eb4a7f,0xbaeadcaa,0xb9d6e90e,0xbaa54580,0xbafe4c50,0xbb6028e3,0xbb86eb7c,0xbbb0b6ce,0xbaf24dc6,0xba86613c,0x3ad7a080,0xbbe62368,0xbc0c436c,0xbb8a58a1,0xbb0bd259,0xb90d9b3b,0x3ae1c430,0xbb104f4e, +0x39c207af,0xba46a5c5,0xbad688d8,0xb8e93ecc,0x3aeba1e8,0xba8f8fee,0xba60551f,0x3a975613,0x39a2342d,0x3833118f,0xb89b8b26,0x3807cca1,0xb9904b63,0xba4b2fb4,0x384b176d,0x3a666426,0x3b0aa5ef,0x3a9fbf9a,0x3aa7185d,0x3ac8c63b,0x3a84e646,0x3a52d926,0x398865f3,0x3a5b73c0,0x39b655a4, +0xba4d9caa,0xbae387a0,0xbb20372e,0xbb2c108e,0xba8809e1,0xb95a900d,0x394dbb50,0x39574648,0xba84cc4a,0xbba57c06,0xbaa73867,0xbb58cb5c,0x39fb8631,0x3afbd63f,0xb9f942a7,0xb8c5873f,0x39e61552,0xb81de300,0xbaa1390f,0xb9c17b0a,0xb99ef009,0x390b4fc5,0xb9ae5267,0xb981e4b5,0xb946889e, +0x3929d4d7,0x392adefa,0xb9b8fd89,0xbadaa809,0xbb245a35,0xbb319d22,0xbb02a125,0xbae0a32a,0xba9104b1,0xba300a68,0xba02e27a,0xba5a8bd9,0xba81f8a7,0xbac63d32,0xbb2b7658,0xbb8cd1a3,0xbbab265f,0xbbd2f5de,0xbbf6d4a2,0xbbe00278,0xbbaec74a,0xbb31bede,0xbbb384b8,0xbbbdabe7,0xbb6f85a2, +0xbb396568,0xbb12999d,0xbae22c5b,0xbaa214eb,0xba5a0dee,0xba136db7,0xba78b80a,0xba5ace4e,0xba34583c,0x38902918,0x3a20fd8d,0x39fed911,0xb93afa52,0xba3867e9,0xbae7bdeb,0xbb0b8363,0xbae144b2,0xbab0ff77,0xba4bbcf1,0xb92d33a5,0x3a82c72b,0x3af5e833,0x3b2e2ccf,0x3b6b7184,0x3b87b866, +0x3b967d97,0x3b7000b6,0x3af55eb8,0xbaa35e8f,0xbac76a0d,0xbb270020,0xbb861389,0xbb94a9ca,0xbacd9df3,0x391769c4,0xb9f32e0c,0x381a08c0,0x3a2e307f,0x3a965c44,0x3aaa3fb2,0x3a71920b,0x3a92b64f,0x3ac3aea0,0x3aecb7aa,0x3af12b9e,0x3ada8dc8,0x3aed4595,0x3a4a2637,0x3886db49,0xbaa2b957, +0xbac06683,0xbad9760e,0xbae69455,0xbac97eba,0xbaa97cce,0xba8a68f5,0xba100272,0xb88d97da,0x39ce7a1a,0x3a99bdd3,0x3afc0a18,0x3b348120,0x3b10743a,0x3ac928a3,0x3a19eeb1,0x3859599b,0xb96995b8,0xb9c49c1e,0xba3e0b92,0x3b1c2f06,0x3af38396,0x3b1669a6,0x3b000e51,0x3aff78d1,0x3ae32756, +0x3ab5832b,0x3ab195f2,0x3ae1944c,0x3ae27dd6,0x3b001729,0x3a89a07b,0x3a934699,0x39f15060,0x37c3742c,0xb9eca259,0xba8cf131,0xba83ffef,0xba83dc70,0xbabcae77,0xba7b9771,0xbaa07cd3,0xba99864d,0xba9dc78a,0xbaa4da1f,0xbaab543b,0xba58c227,0xba40eb2c,0xb9d254bd,0xb92331d2,0x39b68fed, +0x3a581a09,0x3aab9046,0x3ad055a2,0x3aeca144,0x3b021325,0xb97477fa,0x39655a3b,0x39801f54,0x36453c81,0xb9d7d364,0x383cb08a,0xb8d83782,0x398563bc,0xba13d1e1,0xbaa19c94,0xbae2b6f5,0xbb000cf1,0xbb0fdc47,0xbb1dbdb4,0xbb2a470b,0xbb1fcff9,0xbb0b9c4d,0xbb1e0fe8,0xbb210fc6,0xbaf6d1d3, +0xbadb49f4,0xbae0339b,0xbac870ff,0xbac56c85,0xbaac55da,0xba8d7736,0xbaa02863,0xba74b0d1,0xba83eccd,0xba98a90d,0xbab32a63,0xbae419f3,0xbab81bf2,0xbab6c531,0xba7065c7,0xba0d49fd,0xba0b4624,0xba04acaf,0xba8a25e0,0xba35448e,0x38ff2a96,0xba970c3d,0xba903f44,0xb9571f29,0xb93621b7, +0xb8861c96,0xb80b8aab,0xb8e31489,0xb94662d9,0xb99fb29e,0xbacbf12a,0xbae8608b,0xba0eb5ef,0xbad29d41,0xbaec3d4b,0xbaa1a8df,0xbab594c3,0xbabad70d,0xbabf2e44,0xbac66f72,0xbaca5fd0,0xbaca5490,0xbad2e9d8,0xbac7bf31,0xbac76e36,0xbab7721f,0xba96e62f,0xba804585,0xba4fae10,0xba4de0a5, +0xba278517,0xba0ee3d3,0xbb232d10,0x3b0d9a2a,0x3ac86bef,0x3affaac0,0x3b013734,0x39a631e6,0xbad9cae5,0x3adbdc99,0x39ec74ea,0xbad00f79,0xbad14c92,0xbae46779,0xbae17dae,0xbadca459,0xbb092a9f,0xbaf2498b,0x3a04f512,0x3adf5dac,0xbae93ac4,0x39596432,0x3acbefdc,0x3aecb0e4,0x3adf3559, +0x3afabfc8,0x3b00bd30,0x3b09217a,0x3b031a98,0x3ad89356,0x3ad8b2d8,0x3ad771a2,0x3aee202b,0x3ae96472,0x3adb219f,0x3ad2f1bd,0x3aef8db3,0x3aeae618,0x3acf871e,0x3ad3f0e8,0x3ad2a06f,0x3b254318,0xba28782e,0x3a3d3a05,0xb9f3c1bc,0x3a6c2972,0x3a436d48,0xba8aaab1,0xb97edbf7,0xb9ac97a7, +0xba77e187,0xb905b9e3,0x39a97340,0xb9f6f85f,0xba653254,0x3a8c37a3,0x39d3fbed,0x3a882faf,0x3a19aa30,0x3b1a5ce2,0x3b0f3ced,0x3b2d7d3f,0x3b547483,0x3b533ad8,0x3b4bfe67,0x3b3d3f17,0x3b39c622,0x3b4a7ab0,0x3b673ec2,0x3b282f69,0x3b0d41c0,0x3b1f55e0,0x3b61578b,0x3b67bfd4,0x3b34ff9b, +0x3b0de479,0x3b023d0c,0x3b24589d,0x3a61295f,0x3aad2941,0xb9ff219b,0x3992201e,0xb9877c97,0xbab536fc,0xba829a27,0xba0410fd,0xbab04dad,0x39fbcff3,0xba5335cd,0xba1a2a15,0x39abcd0d,0x3a6f5851,0x3a68f4fe,0x3a4516bb,0x3aa59196,0x3b0746e1,0x3b592dff,0x3b7c7452,0x3b9c31c6,0x3ba47309, +0x3b948bf1,0x3b4947db,0x3b551537,0x3b44dc07,0x3b911744,0x3b48d605,0x3b45ed5c,0x3b2efaa3,0x3b8dcf92,0x3b856e01,0x3b28d53a,0x3b21b909,0x3ab52236,0x3b1501c2,0x364d3f15,0x36fd5838,0xba73508f,0xb8669e73,0xba60d192,0xbb57b71e,0xbb62e0f9,0xbb8e65a7,0xbb89cc2a,0xbb46eda4,0xbad6e207, +0xbb1fc8a2,0x396697b3,0x38f2e43f,0x38ab87ea,0x3aa08497,0x3a95825a,0x3addb62d,0x3b6847fd,0x3b850524,0x3bc877a9,0x3bdbcc34,0x3bde883d,0x3b942f06,0x3ba2accc,0x3ba7cd0d,0x3bed452e,0x3b61ea1a,0x3b61637d,0x3b714859,0x3bda384f,0x3bd394b1,0x3b882678,0x3b31642d,0x3aefcfd9,0x3b2cab21, +0x3a125aab,0xb7c6b51b,0xba9b72d2,0xba1dcf72,0xbb0e3718,0xbb6c3b9b,0xbb596084,0xbb5cb434,0xba821759,0xbaa59604,0xba956e1b,0xbaffd8f4,0x3a2f1d00,0x3a8296e2,0x39469c23,0x3ab830f7,0x3acc5a6e,0x3b476e6a,0x3ba572d8,0x3bd42a6d,0x3c07b9a5,0x3c0d2bb9,0x3bf2aae4,0x3b86bc6a,0x3b812f0a, +0x3b8b19b2,0x3bd1e29a,0x3b97adec,0x3b858d74,0x3b5deb6e,0x3be4f5aa,0x3bca27ff,0x3b3970d6,0x3b2c0906,0x3c0ff1b4,0x3bea75f6,0x3bb29770,0x3b8cbe4a,0x3b34dc35,0x3ba2bcb0,0x3bd30126,0x3ba7692e,0x3b86caed,0x3a6c40f5,0x39ae22b7,0xb92ff894,0xb95f13b4,0x3b023ab2,0xba86522a,0xbacc8f89, +0xbbb59f61,0xbbaa9754,0xbbb7ed13,0xbba95d84,0xbba15bfb,0xbba821e5,0xbbf1c795,0xbbb0eeba,0xbae875a2,0x398a6fcc,0x3bbc966d,0x3bac34ba,0x3b128983,0x3af39374,0x3b18a351,0x3b875a1f,0x3b91460b,0x3bab985f,0x3b85f82a,0x3c137877,0x3a5c3528,0x3a9f18aa,0x3b3316e3,0x3b7cf675,0x3b8bccbb, +0xbb44cf6b,0xbbc4b97b,0xbb3ef532,0xbafc8ca7,0xb9ecbd3f,0xb8d07731,0x390cdd50,0xba0edc79,0xbab8d343,0x39e396cd,0x3ab54f87,0x3ac79ae0,0x3a738647,0x3a5db627,0x3b6bc9e9,0x3bba33c2,0x3be52ab8,0x3c006c91,0x3bd8f201,0x3b56509c,0xbb17fed0,0xbbafe100,0xbbb0c17e,0xbb269b9b,0x3b6f1553, +0x3ba0df93,0x3aaf9b0a,0xbaf543fb,0xbba4627d,0xbbcd4e8d,0xbaa5f58c,0xbbbed5bc,0xbb393be2,0xbb94a10c,0xbb677f56,0xbb02f88a,0xbabccde5,0xbb0a5ca5,0xbb15e243,0x39ef8113,0x39aff50b,0xb756e826,0x380ea98e,0x399b5694,0xba005617,0xb9e68f3f,0xba30e5a6,0xbaa7be39,0xb9d4be2d,0xb9bbdc2c, +0x3a49d8db,0x3a66b70e,0x3a5b2ada,0x39338dc0,0x3ad5c908,0x3ac4defb,0x3a21166e,0x3b2d4a9c,0x3b17910b,0x3b1c6d71,0xb9fa52ad,0x39762a39,0x3bc143cb,0x3bb6c0b6,0x3bb54689,0x3c1d792c,0xbb50b9b1,0x3932e63c,0x3ab34ebd,0xbb925f9f,0xbb605225,0xbb6b8498,0x3a029836,0x399a3bb8,0xba9d035f, +0x36a3703d,0xb936d981,0x38f509f7,0x3553f9c2,0x3763cfa3,0x388ac3c4,0xb9fd4817,0xba0c2152,0xb8e97d0b,0x39a7fa64,0x39972838,0xb8221839,0x3a068114,0x3999531e,0xb9fbe081,0x3a17874d,0x3abe9a60,0x3ac9c302,0x3bbce10a,0x3baa2bdc,0x3b9f0b5a,0xbb23fada,0xbacd0dad,0x3be08ef6,0x3c33eb25, +0x3c5d9430,0x3c7a3ab9,0x3b64b94a,0x3c0465bb,0x3b1f1838,0xbae6ac58,0xbb148b06,0x3a530951,0xba53e40e,0xba461981,0x3a4fd2d2,0x39a80418,0x37d15063,0xb8de0400,0x3896f857,0xb8e1a4e1,0xb9e85174,0x3995efee,0x3a829dec,0x3b190648,0x3af6d33e,0x3aeef9d3,0x3b186bde,0x3b49a0e8,0x3b827da3, +0x3b81aa43,0x3b7f56f7,0x3b26fc60,0x3a5d4066,0xb6a5c9db,0xb988d02e,0x39fa0a1d,0x3a8b78f4,0x3b3b8ab0,0x3b6c4636,0x3c205ae8,0x3c3162bb,0x3c141b0a,0x3c1b1984,0x3bffe127,0x3b941f9f,0x398c829b,0x3b41c753,0x39b11058,0x3a7e88ff,0x39d8b4b6,0xba27f524,0xb805ed21,0x38516792,0x39b70fc4, +0xb697157c,0xb8904a23,0x38d73957,0x39d40be6,0x3a19c930,0x39beddda,0xb93eb80b,0xba394bce,0xbac8148d,0xba784935,0xbace478b,0xba364622,0x3816d29c,0x3a9ee995,0x3b45d064,0x3b510a2b,0x3b5971d0,0x3b744baf,0x3a5a9b23,0x39d08d80,0x3a8b9ad5,0x3ae63c3b,0x3b60863c,0x3baf4ca6,0x3bf70fa7, +0x3915e39c,0xbac14720,0xbb440557,0xbb1cf6ed,0xbab69c95,0xbabd6d0f,0xba6cbba3,0xba13f713,0xb938342b,0xb9e6bac7,0xba05d794,0xb9e1249f,0x39146104,0x3a39f6b5,0x3a62b2d7,0x3a0c44ff,0x392a1088,0xbaa4b903,0xbb0b3866,0xbadd3c08,0xba327a5d,0x3a0e1182,0x3aad6ba7,0x3b4fedb9,0x3b859909, +0x3b9b0bf3,0x3ba31985,0x3b9cb01d,0x3b88ca38,0x3b7a2b91,0x3b525810,0x3b2aeb2e,0x3ac9e292,0x3a6e4abd,0x389e4d59,0x3a001136,0x3a86133d,0xb96fa30d,0x3a7dac62,0x3a7501f8,0x3ac7fa29,0x3af4a4a0,0x3ad2532b,0x3a68406e,0x3a9a064c,0x3ab0bd8f,0x3ad385a4,0x3ac74ae9,0x3acf58cf,0x3aface10, +0x3aa4d632,0x39ddf55f,0xba26cb6c,0xba45f3ef,0xba64f56b,0xbaa70fe7,0xba3c5e2d,0xba02d0e6,0xb97e6cc0,0x3a08b4f0,0x3a929635,0x3ac56e5b,0x3b244a45,0x3b55d533,0x3b80643e,0x3b75d574,0x3b6e1f41,0x3b7dc243,0x3b1b86db,0x3ac887e5,0x3aaf0339,0x39f5329f,0x3b56332b,0x3b66c2d3,0x3b1f1f05, +0x3b240ff0,0x3b017b19,0x3aca1ba2,0x3aba81f9,0x3ad39559,0x3b03693c,0x3b10a8cc,0x3b381fff,0x3b24183f,0x3adc526c,0x3af3bf23,0x3989e63a,0x39d2afbc,0xb9b11301,0xb97cdd3a,0xb9b429c4,0xb7a15d68,0xb9b94515,0xba1749db,0xba5033d9,0xba77fea0,0xba956f22,0xbaa5f328,0xb84cea6d,0x3a443583, +0x3b03a25e,0x3b24a9f4,0x3b512737,0x3b7a36ef,0x3b7dc4eb,0x3b8021b8,0x3b69f6a3,0x3b627ba5,0x3ac64f9a,0x3ae94104,0x3a1700f1,0x3acf75c6,0x3aca5bf9,0x3ae0b66f,0x3b045940,0x3a61b3c1,0x3a60364e,0xb8524f9e,0xba4544fe,0xba69fb34,0xba332e82,0xba96baed,0xba07ddec,0xba23e891,0xbaabbb54, +0xba55eedd,0xbafb54dd,0xbae36a25,0xbae8fe45,0xbac0a19e,0xbaac2e8f,0xba9a57f3,0xba6dcad4,0xba2ec48f,0xba339777,0xb99e54b8,0xb8e8f342,0x399b3669,0x3a3ba0fe,0x3aaad876,0x3aa78747,0x3a6208f5,0x3a9e76a9,0x3ad25120,0x3a2ef305,0x3a792be6,0x3a43d8f2,0xb99e7541,0xbaba9df2,0x3a0dbab9, +0xb9146b20,0xbaa6b870,0xbabe98fc,0xbaadb93c,0xbaa9ccc9,0xbac6e2c4,0xbafd4aed,0xbb0b01cd,0xb9891174,0x399099c8,0xbb02a15e,0xba28bd1d,0x3850aa60,0xb9708f9e,0xb96f05a3,0xb9ace61e,0xb9e00c83,0xba0cb512,0xba2359da,0xba290962,0xba025a90,0xb9383a15,0x37c1e849,0x398b7208,0x39e294c2, +0x3a3606ea,0x3a462183,0x3a39a8cd,0x3a516a87,0x3a4b9a3a,0xba0cc712,0xbab4bf3f,0xba72bc64,0xbad33fa8,0xba681432,0x3a7fac4b,0x3b0d8b7e,0xba87bf30,0x39f4a063,0x3b03ae9b,0x3b1c3aef,0x3b27aa2f,0x3b0c87e1,0x3b1d85bb,0x3b3b5465,0x3b106cbe,0x3a1c90a5,0xba38953e,0x3b2ec406,0x3a93b455, +0xb9d1a1a9,0xbab992bb,0xba7bb7af,0xba8ab050,0xba832c1d,0xba816c63,0xba877679,0xba9f1998,0xba9d81cc,0xba9ec612,0xba821ade,0xba9cd619,0xbaa60004,0xbab9f7da,0xba987495,0xba8cbb70,0xba62565d,0xba859575,0xbaa0e01f,0xbadb40bb,0x3b0a9dde,0xba1a4839,0x39b11a80,0xb9812df3,0xb9f0fbd5, +0xba7d294d,0xba9f15f4,0xba81120c,0xba89c2de,0xba7b24b6,0xba97bfad,0xba1c5088,0x3abd49aa,0xba2032d3,0x39c1fc7b,0xb89ca1fc,0x3a7b1363,0xbaa9cf15,0xba9d8843,0xba8fdec0,0xba645f93,0xba555584,0xba77f738,0xbabbede5,0xbaad706f,0xba9663cb,0xba2daff1,0xbb09720f,0xbb1f9af5,0xbb159dae, +0xba99d777,0xba1f63e3,0xb880ef8f,0xba5da975,0xba7f0d15,0xba6804a2,0x39622915,0xbac0409c,0xba76cc4e,0xba2dd0c0,0xb936ec0f,0xbb4c1d78,0xba876614,0xbb0b8705,0xbb049678,0xbb14fb19,0xba2487b2,0xbb152dc5,0xb9ab201c,0xba37f43f,0xba10b069,0x39bf2323,0x39cecb74,0xb90f198b,0xba9950f1, +0xba0c6c9f,0xba220ecf,0xb973f6cd,0xba16d2a7,0xbadafdab,0xbab777af,0xbacc6735,0xb993cf72,0xbb0c9967,0xbb271d4b,0xbb39bac6,0xba87d395,0xb98adeef,0x3a0ab5ae,0xb9e8b1f8,0xbab7bf85,0xba4fb867,0x3a031039,0xba40d072,0xbad5a008,0xb973026e,0xba3674ac,0xbb955316,0xbb57debe,0xbb8cd2b7, +0xbb8ae968,0xbb512796,0xbb06ea3a,0xbb5c4d02,0xb99aeeb8,0xba6e31f0,0xba748cfa,0x38a36cad,0x3a22e4e0,0x39d4e721,0xbaa59761,0xb9d91c16,0xb8c0249f,0x395bdf10,0xb93645f7,0xbae15b2b,0xba7cdb09,0xba4dd4fb,0x3a857d05,0xbb6a382a,0xbb86730d,0xbb79872f,0xb9e8ca28,0x3a9c1619,0x3b0ecfbb, +0x3989b68c,0xba2dbaa5,0xba2044dc,0xb97d8ce8,0xbac4236b,0xbb2a444c,0xba804d2a,0xbb0a7173,0xbb72ff9c,0xbb363de3,0xbb43b04e,0xba719693,0xba71918a,0xba8f4f53,0xbb10c04b,0xb92b23cb,0xb7286c6c,0xb9dcc033,0xb8f64c9c,0x3b0866b1,0x3a4535d6,0x38ed113c,0x3a0a12e4,0x3a03dede,0x3a98a369, +0x38fd6332,0xbb0088cd,0xbb0b6e2a,0xbadd1c85,0x3a33bddc,0xbb33682d,0xbb71a4e7,0xbb6d68e9,0xb9924322,0x3aaa1e55,0x3ae37177,0x39975ee3,0x3b73866a,0x3ab74393,0x3b9be1f5,0x3ba29991,0x3b3b1b54,0x3bb2399d,0x3bac35a8,0x3b9134c4,0x3b613ad0,0x3a61547b,0x39dfc92f,0xb794855b,0xb83f50d4, +0x3ac58f3e,0xba0a914c,0xbabbc3e2,0xbbb5be83,0xbbd5de42,0xbbe6ab55,0xbc0a9ea4,0xbc295abe,0xbc12e14e,0xbc255f41,0xbbdb2d72,0xbb629e3d,0x397fade4,0x3ae11c57,0xb86998c3,0xbb9032e1,0xbb9bd488,0xbbb62188,0xbba2603e,0xbb6e4d01,0xbb036490,0xba1ff9c2,0x3b32f36b,0xbaf640b9,0xbaa3fba3, +0x3b252265,0x3996fbae,0x3b9aa52a,0xbb7a8033,0xbba6511b,0xbb31d2a9,0xbae5dccc,0xba047dc6,0xb95bf308,0x385f28fb,0xb9ae0cdb,0xbabe9fd8,0xb7c01a7e,0x39a6a01e,0x3a50e1f1,0x38b0c543,0x3ae5de1d,0x3b335079,0x3a8c8860,0x3ae6af12,0xb98d0907,0x3a8ac12d,0xba402d88,0xbb60fc8d,0xbbc61306, +0xbbbd050f,0xbb3b96f9,0x3b0286d0,0x3b4b7965,0x3a896552,0xbb83c85c,0xbbd9b3d8,0xbbc8b2fc,0xbb3aefec,0xbbdd5e5f,0xbb71d918,0xbbb2a724,0xbb764bc4,0xbb5c1ccd,0xbaa4278c,0xbac2cbc8,0xbb0a7855,0x3a47a4a7,0x387e0c58,0x38c0c3d8,0xb8a9e4a4,0x392c2db8,0xb96fa71c,0xba58068f,0xba61a555, +0xbacd8b08,0xba9e921b,0xbac99906,0xbaf7fb69,0xbabe3235,0xbab2153d,0xbb1c2810,0xbb461dae,0xbb87d39d,0xbbafde43,0xbb4013eb,0xbb084c40,0xbab3a36e,0xbb9975a7,0xbbcfe95d,0xbb152204,0xbb6b2ef6,0xbb40ad90,0x3b855ef3,0xbbad4daa,0xbaf907f5,0x3b41145e,0xbb20654b,0xbb854651,0xbb9bb141, +0x3a0ed2e9,0x39900968,0xbaa9e123,0x3811e844,0xb97bc27b,0x39102077,0xb8764484,0xb6e5f3e2,0x38b0b80b,0xb9e982c0,0xba733a92,0xba3cea20,0xb942b596,0x3798dfcd,0xba9b3ad4,0xbaaf021c,0xbad52b02,0xbb15d6ad,0xbb743a07,0xbb8a174f,0xbba6a9f9,0xba9b7ad6,0xba453c56,0xba69faa0,0xbbfbab08, +0xbc078ff1,0xbb0fe527,0xba90a728,0x3969c01f,0x3afaaa5a,0xbb0d0fea,0x3b00257c,0x3b8fde56,0xbb83ad8d,0xbb96a790,0xba90bca2,0xbafb8d66,0xba745b48,0x39d3d0d9,0x38eb76e4,0xb85ac71a,0xb93621c7,0xb89ac7d9,0xb8a3ff8d,0xba0c812d,0x380fe324,0x3a422860,0x3b10a9c9,0x3ab1ded9,0x3afd0a91, +0x3acabef4,0x3a693246,0x39f3d992,0xba2999a1,0x38300e12,0x379aabfc,0xba0414a3,0xbae46e54,0xbb0efcb5,0xba90f808,0xb9a02f3e,0x3a8913ae,0x3addc344,0x3ac2fcc4,0xba682bdf,0xbbf872af,0xb9e035b7,0xbb5024ce,0x3af5b962,0x3bb8d00a,0x3b2391a1,0x3ad08f05,0x3a7c6729,0x3889f39d,0xba7ec5d8, +0x38809682,0x385ddd80,0x39bf552b,0x39229948,0x383721db,0xb8162ec6,0x39c28d05,0x3a0d8fa3,0x39a839f5,0xb9536c58,0xba654c85,0xbac148f0,0xbab7975b,0xba5ee2fc,0xba00dda3,0xb9ba3dd5,0xba0a3472,0xba6380b9,0xba9df38c,0xbaf60cb8,0xbb549636,0xbbadd698,0xbbc7c8f4,0xbbf1f31e,0xbbf6a27a, +0xbbba0ac1,0xbb84272b,0xbac2c01f,0xbb8310ad,0xbb89245a,0xbb1fc774,0xbb2578f3,0xbafba34f,0xbac61a4d,0xbaae36bf,0xba3d5aea,0xba20d811,0xba161a16,0xba6b3f8d,0xba656812,0xb9e316d9,0x39612f50,0x3a0f244e,0x3971c018,0xb9515a33,0xbabee274,0xbae498d7,0xbaeb3237,0xbadf6e35,0xbaab0d24, +0xba3fae44,0x3a40ea7d,0x3ae2115b,0x3b1ef072,0x3b36f489,0x3b3fcb0d,0x3b4ef13d,0x3b0b3300,0x3959a5f4,0xbb5d0b98,0xbb6e9269,0xbb8aa8e5,0xbb9ccda4,0xbb7e7236,0xbb517e17,0xb9107bdd,0xba1b0e40,0xb8d845e8,0x39ef11e2,0xb7afa60a,0x3a3741d5,0x374a29d0,0x3a108833,0x3a39a4f3,0x3ab69218, +0x3aa8febd,0x3ad5f07c,0x3ae51313,0x3a85a5cf,0x39f0bcca,0xb9c96229,0xba57e495,0xbaaeb8ef,0xbaa7682b,0xbafea481,0xbabcb108,0xbaa0fe95,0xba1e2979,0xb91be99a,0x399f2513,0x3a66d30c,0x3ab88485,0x3afa06c2,0x3a976bd6,0x39794679,0xba968c61,0xbad96e8d,0xbae20663,0xbaf4368f,0xbae99ff5, +0x3a9f5839,0x3a650f0f,0x3b19349d,0x3ab07ddd,0x3aeaed34,0x3ae38f46,0x3a93502f,0x3a35afb5,0x3ac4c5f3,0x3acd9087,0x3b2911d2,0x3a94f652,0x3ae1e890,0x3a9495e5,0x3a6c4f3f,0x38da8c4f,0xb9f6178e,0xba0e3a8f,0xb888d19a,0xbaaf248d,0xba91fce7,0xba8ab73a,0xba900074,0xba8ae559,0xba8fdf4d, +0xba8c2729,0xba35931b,0xba19649c,0xb945afee,0xb844d739,0x39e8c76d,0x3a5c3110,0x3a9a65b7,0x3a8e6d9b,0x3a40fa28,0x3a85b2b5,0x3a2d6950,0x3a6b7b4a,0x3b0d2c51,0x3a83b4e2,0x3a568484,0x3aa9170f,0x3a70609c,0x3ad7ffef,0x39e1451b,0x396c5d6c,0xb97cff0d,0xb9881353,0xba61c010,0xba54e803, +0xba9747c5,0xba9767f9,0xba5a39a1,0xbaee8d1c,0xbac9330e,0xbb0201fd,0xbad7222f,0xbae63940,0xbacfe6de,0xbaccad46,0xbab816cd,0xba9e59a3,0xbab2e47a,0xba9542b2,0xba9dd597,0xbaaa1a41,0xbac144fc,0xbae2b35a,0xbaab2341,0xba8528db,0xb982f526,0x397034f4,0xba30a519,0xba3c8d64,0xb9d52c1a, +0x39ef8338,0x3a822d36,0xba32a896,0xb8e3cc85,0x3a608e1e,0x3a8a8626,0x3a8ebee5,0x3a879fb0,0x3a8c025f,0x3a9834b5,0x3a8f636a,0xb99fbf90,0xba9aac59,0x39e957f7,0xb9df5c01,0xba9afc7c,0xbab51b45,0xbab66f8c,0xbabb11be,0xbabed9ec,0xbac6186c,0xbac8d57a,0xbac76906,0xbacb806b,0xbabdc6bd, +0xbaba5b78,0xbaa88573,0xba8ac3af,0xba641554,0xba3ce06a,0xba4fe83a,0xba434acb,0xba3956c2,0xbb105234,0x3ac35b58,0x3aa17b91,0x3b06b255,0x3a083fed,0xbab08195,0xbb065b03,0x3a175fc3,0xba7d26e0,0xbb242530,0xbb191eeb,0xbb191775,0xbb0e927c,0xbb0a0408,0xbb25f53f,0xbb12b555,0xba8db078, +0x3990c14b,0xbb02a034,0xbaa3b7b7,0x394fba2e,0x3af003cf,0x3ab9712d,0x3accce59,0x3ad4a115,0x3ae166d9,0x3ad6223f,0x3aac71dc,0x3aaadd25,0x3aab7fa5,0x3aca3e49,0x3ab917fa,0x3aa77b82,0x3a9dc83e,0x3ab406b7,0x3aaf7eeb,0x3a9df9f9,0x3aa71c2d,0x3ab742e3,0x3ae7524b,0xbb1dc7f8,0x392ea82f, +0xbac280df,0x39488a6b,0xb963daf1,0xbae30a05,0xb96642fb,0xba94b542,0xbae187da,0xba9b7962,0xb9824a64,0xbaa3f362,0xbb016577,0x37b5057e,0xba221e41,0x395dcd98,0xba526644,0x3acfad6e,0x3afecdcc,0x3b09bc19,0x3b2f3ee7,0x3b284683,0x3b1dad16,0x3b0a3e8a,0x3b092494,0x3b1b4b90,0x3b43af97, +0x3aec1fc6,0x3ab17672,0x3ad31060,0x3b1ccdc4,0x3b270d4d,0x3b05f8a5,0x3ac5a8c5,0x3affb896,0x3b00816f,0xba41b39a,0x3a1a4582,0xbacfd77c,0xb9740fc8,0xba79e155,0xbae7cadd,0xbac18f72,0xb93efbcb,0xbb36b5ae,0x3a0033fa,0xba9ea20c,0xbab7461e,0xba30bf08,0xb845182b,0x38a037ca,0xb9241f13, +0x389ea87b,0x3ad73f71,0x3b4b9ce4,0x3b47f188,0x3b819add,0x3b82b781,0x3b6ac741,0x3b0c81de,0x3b128691,0x3b0b7900,0x3b801a15,0x3b0810c6,0x3aec3b38,0x3ac4eda7,0x3b332c76,0x3b2be431,0x3ae07d40,0x3ae1e384,0x3ac8e068,0x3ae3319a,0xbaebe638,0xba7aed34,0xbaf0a42b,0xb95fa39b,0xba4966a3, +0xbb7e7fdc,0xbb3a9dbf,0xbb6edd6d,0xbb91a4d4,0xbb26898e,0xbb0583ba,0xbb1b8381,0xba6ea5d3,0xba341074,0xb9d299cc,0x39b93446,0x3894d8d6,0x3a99f243,0x3b5ecd4d,0x3b5b97da,0x3ba53acb,0x3bad9da0,0x3ba91b55,0x3b39ba63,0x3b64073f,0x3b7496f1,0x3bcf8a67,0x3b043167,0x3add3964,0x3b0594ca, +0x3b89cc6b,0x3b90aa44,0x3b49cdc1,0x3ada8cbb,0x3b032ebf,0x3b239c22,0xba82676e,0xba204343,0xbb0a2208,0xb9c88c72,0xbad36f5c,0xbb685b0f,0xbb0ddad2,0xbb11e5c2,0xb9090d62,0xb9ef4ace,0xba14ed47,0xbb0728fe,0x392f6aec,0x38cbd791,0xba274cdc,0x3ac924de,0x384d514f,0x3b3f123c,0x3b9da0a6, +0x3bac9f53,0x3bdcc1a1,0x3bdd97d3,0x3bb4b7a4,0x3b2afb9e,0x3b0bef6b,0x3b421bbc,0x3bc74b86,0x3b488d07,0x3afa896e,0x3ac85d47,0x3b825208,0x3b6c05cc,0x3ada73d5,0x3ad30e5e,0x3c0d1722,0x3be92bd1,0x3b7c467e,0x3b642581,0x3b44f6f5,0x3b94c7ff,0x3baba144,0x3b6597f0,0x3b570824,0x3a5e3cf4, +0x39ae7aa6,0xb8203835,0x3941df47,0x3a96545a,0x371e56f7,0x3808a9ae,0xbbc08d28,0xbba0e511,0xbbdda62b,0xbbc30486,0xbbad84dc,0xbbaa6ab6,0xbbb4e965,0xbb87b483,0xb920c52f,0x3b842761,0x3bdd7e87,0x3ba4e814,0x3ab6e5e5,0x3aaeae75,0x3af945c7,0x3b75004f,0x3b4a6919,0x3b95ecc9,0x3bac34f2, +0x3c17eb1a,0x3b1c0fd7,0x3a6e1631,0xba95ba98,0x3b25f98f,0x3b6a5148,0xbb0f9521,0xbb921417,0xbb209cf0,0xbaa77e9c,0xba1a5859,0xb8a71c57,0x38098f1d,0xb92529dc,0xba892b92,0x38b785aa,0x3a88d4fb,0x3a835960,0x39be2188,0xb8de63cb,0x3b0e12ef,0x3ba7ce49,0x3bb9234f,0x3bcc2360,0x3b8e22de, +0x3a8e78d2,0xbb5bc3ed,0xbbd4e123,0xbbb03f08,0xba0f31b7,0x3b72011d,0x3b78ac9c,0x3a4e5524,0xbb7064b3,0xbbcc7be1,0xbbbc5602,0xba99e88c,0xbb97af0a,0xbac5af47,0xbb5897a8,0xbb464cbe,0xbb578d72,0xba209d3f,0xba7c5a64,0xbaaf7277,0x3a5c1ffc,0x388e4c74,0x390e7fcc,0xb8700a5a,0x394bc6ac, +0xb81387c3,0xb9ff59a9,0xba470b29,0xbabfb4b2,0xba734037,0xbaa375c1,0x39a9126b,0x3a519aca,0x39e0c5d9,0x38d1f2f7,0x3a7d6ea0,0x3a8d66c6,0x398eaa1a,0x3b54bd58,0x3b4496f9,0x3aeb174e,0x373fb7b4,0x39d00eab,0x3b926a3f,0x3b519228,0x3b50a50a,0x3c10a73d,0xbb3d0941,0x390e65eb,0x3bad7101, +0xbb5ffe1a,0xbb711845,0xbbc58f0e,0x3a0dc773,0x39ae4920,0xba772c55,0x3932ad55,0xb98531b5,0x392b6773,0x3710162c,0xb8127f59,0x39824dfe,0xb9645705,0xba0c032e,0xb9b53585,0x39fe9304,0xb8d2849e,0xb9e74df0,0x3a48bfb3,0xb8815a99,0xba29ad59,0x393168f6,0x3a87b901,0x3a9c8a13,0x3bb64edb, +0x3b93982a,0x3b0bd1b8,0xbb3e5ba0,0xba8e33e6,0x3bf1b1db,0x3c0a2e62,0x3c17839b,0x3c208adf,0x3aacac63,0x3bc1e8f7,0x3bc825e4,0xbb915fa0,0xbbcf830a,0xbb492b45,0xbaa972db,0xba3c186c,0xb7aea4e9,0x3919acbf,0x37fe8ab4,0xb91a3697,0xb6bf3f75,0xb85c79ef,0xb9769b63,0x385daced,0x39ff8d74, +0x3b098391,0x3af719bd,0x3ae80f39,0x3b414792,0x3b4a740d,0x3b5c9649,0x3b347ab1,0x3b0a0498,0x3a8c26e7,0x39383158,0xbab7d954,0xbade9c1a,0xba5ccef4,0xb8b82f3a,0x3b10b4df,0x3bb3d988,0x3be5750c,0x3bb8af70,0x3af24ac5,0x3b924a12,0x3ba0b5ca,0x3b0dc7ec,0x3abf7889,0x3b9d3b2a,0x3ab7d533, +0x3a4baceb,0xb964ec23,0xba192b2d,0xb8709b19,0x38c0c6ad,0x39873715,0x3964638f,0x38c8d26b,0x390fc631,0x39dcbcd1,0x3a695457,0x3a99bd77,0x3a0176a9,0xb958b381,0xba938650,0xb9894714,0xba7c8a07,0x3917badd,0x3930e662,0x3a127063,0x3ac0504a,0x3a83e5dd,0x3a4020ba,0x398b9e67,0xbad9652d, +0xbad9e22a,0xbabac6e2,0xba3829db,0x3ab586ad,0x3b75446d,0x3b9ae646,0x39008353,0xbaccb27c,0xbb639184,0xbb496d3c,0xbb0ec55d,0xbafb2329,0xba957c3f,0xba6b9b18,0xb987723e,0xba15a1c4,0xb9bc78d2,0xba2fc70a,0xb96e2a6b,0x397164ca,0x3a1c3c80,0x39c7f3f8,0x394c26b3,0xba80b164,0xbaff7c42, +0xba99e5b5,0xba18bdf6,0x39313575,0x3a51f67c,0x3b068155,0x3b37b9f0,0x3b59af81,0x3b6087bd,0x3b5a7c61,0x3b3edf4f,0x3b28976e,0x3af7499b,0x3a7db576,0x3953f0a2,0xba16fd20,0xba7a2bc9,0xb935237d,0xb84e09d5,0xbb09051b,0xba663eb2,0xb9e57c56,0x37624e88,0x3a50e5d8,0x39a4c7c4,0xb89fb996, +0x3994fe21,0x3a32447a,0x3a7ea1d3,0x3a89c9a0,0x3a9d5d24,0x3ae88c43,0x3aa94097,0x3a2b145f,0xb9dff999,0xba3886f0,0xba592a98,0xbad6902a,0xba104702,0xb9fa17c9,0xb8d3e2b3,0x3a0301fe,0x3a8751cf,0x3ac09351,0x3b0efc70,0x3b30da64,0x3b453d5d,0x3b359032,0x3b1f170b,0x3b1218d6,0x3a51929e, +0x393271f7,0x38e93be5,0xba363c50,0x3b086dde,0x3b19ab99,0x3a756cf9,0x3aa21c82,0x3a198997,0x39b4629f,0x39faa8e5,0x3a7b7d6c,0x3ab3c31a,0x3af591e8,0x3b0d2451,0x3b209458,0x3afa58dc,0x3b0b8181,0x3a0dd574,0x3a4809a5,0x3928999d,0x389e6c7d,0xba1f8893,0xb8a9b1ad,0x3935499c,0xb96ca9bb, +0xb942af85,0xb9bbe057,0xb9e288a0,0xba0e217e,0x39db58d6,0x3a80ed6f,0x3af68ad0,0x3b10bc4e,0x3b340dd4,0x3b583cc9,0x3b563676,0x3b3a0b97,0x3b08a383,0x3b01de43,0x3b08c0c2,0x3b12c5d3,0x3a530aea,0x3b13172a,0x3b044672,0x3b0d85dd,0x3b1db28e,0x3aad85a9,0x3ac3106d,0x39af1858,0xb9934fe4, +0xba060682,0xb93344d6,0xba0dfa13,0xb9954265,0xba0b9e36,0xbaa5d388,0xba17c4bc,0xbaff845c,0xba7c7eeb,0xba99c42d,0xba74f943,0xba604855,0xba48913c,0xba17b9e5,0xb9e656a6,0xb95578d0,0x3967f7f9,0x39fb2812,0x3a6b4e06,0x3a98a1e8,0x3acbf25a,0x3acab801,0x3ab747f8,0x3afd66d9,0x3b163b7b, +0x3a3e315b,0x3a894f4e,0x39417dc3,0xba7fed3d,0xbac35966,0xb79a64f3,0xba61c027,0xbacc6447,0xbadd19f8,0xbab987bb,0xbaa2d48f,0xbabb5148,0xbaee0518,0xbb00c25c,0xba4010dd,0x391bd060,0xbaebb69d,0xba90dcbd,0xb961493b,0x397d775a,0x3904698d,0x389bb790,0x36e3308f,0xb889a110,0xb909925a, +0xb930cd0a,0xb8749ad2,0x39230350,0x39a0407c,0x3a00cee5,0x3a2af29a,0x3a72459d,0x3a7b9865,0x3a594187,0x3a52e489,0x3a4225aa,0xb9401a37,0xb9c7abad,0xb9b5ccd7,0xba8809a9,0x3a17757c,0x3af08938,0x3abf9b36,0x398c0f39,0x3ab6020e,0x3adc21ab,0x3b01023d,0x3b01d6c0,0x3abe69cd,0x3ade1a89, +0x3b008a0f,0x3ac37aee,0x3ac28992,0x3a1ca6c3,0x3ade50a0,0x3ae75cdb,0x3a4ee826,0xba637065,0xb9ab7956,0xb9af92dd,0xb9a29714,0xb9adc488,0xb9d0d6a5,0xba156c22,0xba15d257,0xba0ca376,0xb98aef25,0xb9ea1565,0xba0bd286,0xba286006,0xb9babe4f,0xb9a7dc6f,0xb9aa69af,0xb9cd65d8,0xba38f413, +0xb9b2f343,0x3b2865ab,0xb8d4dcca,0x3a1f9dca,0x39ea9838,0x3a077e49,0xba1dce86,0xba27229b,0x3802c720,0xba0105b8,0x37ff2cd1,0xb9e04b1b,0xb81f6f82,0x3aa1c910,0xb76e7ce8,0x3a75af99,0x39e16c39,0x3adbfd24,0x388bfba7,0xb9bb59f6,0xb765f95c,0x395017b2,0x392fdfeb,0x37f52a9d,0xb9919086, +0xb9c0a729,0xb9348558,0x39dc4a71,0xba65ccb2,0xba97e1ee,0xba78327b,0x39aa8b67,0x3a33de40,0x39f5e42f,0xb8a24c26,0xba170b44,0x392ff902,0x3a9f83ef,0xba0c62e3,0xb97ffd58,0x392ce162,0x3a2da7b9,0xbb2d07aa,0xb9291f49,0xbab1188b,0xba966ca5,0xbab90ef2,0xb9c62d54,0xbaa449d9,0xb8bff08f, +0xb9d21ffc,0x394d31b2,0x3a2179f3,0x3a91c1da,0x3a2d4134,0xb8fc7b69,0x3a4c5540,0x3a38988c,0x3a562bd5,0x39946dff,0xba149988,0xba0e2e4b,0xba0d96ef,0x3a9e37cb,0xba31c65b,0xba6b6a5a,0xba8a2610,0x3a73d7bf,0x3aa12d2f,0x3a395625,0x39851917,0xbaa428a7,0x39a22ad5,0x3accc66c,0xb8a0d119, +0xbab88cb5,0x39361650,0xb996840a,0xbb852095,0xbb1e3d37,0xbb582189,0xbb858298,0xbb2d92ac,0xbabeaedc,0xbb428fa3,0xba06df0a,0xbaa3fad1,0xba16b5cd,0x3950a0dd,0x3aab1141,0x3ac3f2f2,0xb87204f2,0x3a8fdc3f,0x3ad8f522,0x3ae23ab1,0x3abcd268,0x38812747,0x39b79da7,0x3a003bce,0x3b2f810d, +0xbacec222,0xbad97a8b,0xbab7f23e,0x3b1f8a10,0x3b523957,0x3b0086d5,0x3a64dff9,0xba03ffae,0x3908f047,0x3a31d1a6,0xba7f9567,0xbb1af9f1,0xb93e8363,0xbaaa6286,0xbb5c3e7c,0xbad32db8,0xbad67571,0xb8ce5267,0xb8dec6e2,0xba144072,0xbaf65f06,0xba11ff1b,0xba058aa1,0xba006aef,0xba315444, +0x3b1df51d,0x3ad6778a,0x3aa582b3,0x3b1eb119,0x3b22c89f,0x3b20c627,0x3a987dc1,0xba641271,0xbac9775b,0xba01e36a,0x3b2ef3e1,0xba157331,0xba99c796,0xba85b6d4,0x3b3cc3e6,0x3b53911a,0x3a968245,0x3a20bf4e,0x3bb371e0,0x3b6eda14,0x3bdeba92,0x3bc6c3d7,0x3b83fb3f,0x3bacd5b3,0x3b90cb1f, +0x3b419787,0x3b2cc4e0,0x3a21a119,0x3992b60b,0x374c6cf7,0x39915e2e,0x3a381ba3,0x3a23138b,0x39444aed,0xbb943363,0xbbbacd09,0xbbba30e3,0xbbd9a5b4,0xbc14beb6,0xbc075e02,0xbc194798,0xbbb01cd8,0xbb0008ad,0x3b287f17,0x3b18d5ce,0xb9bcf4d7,0xbb92a67a,0xbb832180,0xbb647fd6,0xba060fc4, +0xba89cfb4,0x3a2a441d,0x3b4a02cc,0x3bae759b,0xbb08ffac,0xb92dddc0,0x3b1a931e,0xb9a159e0,0x3baa61bf,0xbb115938,0xbb5bbdb6,0xbaf65c2c,0xba719e7c,0xba0fea44,0xb7c9b669,0xb8ddb002,0xb6320fa6,0xba7c18dd,0xb8966ebc,0x396dba7e,0x3a700fc4,0xb96d7845,0x3a9e3655,0x3b2517a8,0x3b0d5e10, +0x3b67cfae,0x3b0a29b2,0x3a913de8,0xba8c655e,0xbb642d1c,0xbbc60650,0xbba4125c,0xb9a22755,0x3b33c07d,0x3b549e4e,0x3ad3df72,0xbb5c8816,0xbbc6836c,0xbbb4a879,0xbb20ae05,0xbba32122,0xbaab72ca,0xbb68300a,0xbb3d64c6,0xbb4fc7aa,0xb9e6c45c,0xba00bec4,0xba31f1b2,0x3a4d5b65,0xb88dde2b, +0x39089038,0xb8b39d33,0x38c588ff,0x37ca44f2,0xb96ac0c7,0xb9e1d99f,0xba8b1abd,0xba5972e4,0xba66b2e4,0xbaa3e490,0xba854ab3,0xba275937,0xbaa3c170,0xbae72264,0xbb20d2b7,0xbb312da6,0xba1c4892,0xb99dd93f,0xbaf5e2e1,0xbb802028,0xbb7a48bc,0x3aee8727,0x3a8d585c,0x3ad1cbca,0x3bdc6e79, +0xbb440db4,0xb952a483,0x3bd59eb2,0xbacea12d,0xbb81286b,0xbbcd9727,0x3a45dd1f,0x39bc466b,0xba267d0d,0x38209423,0xb94f4c1a,0x3907dd3d,0xb7987a68,0x37525e0e,0x3917c645,0xb8f99946,0xb9c45ab5,0xb99d0d22,0x3956fc19,0x3a3e40a9,0x389e9134,0xba9350b6,0xba9a7e94,0xbae5c4a2,0xbb16e6f3, +0xbb013d6e,0xbac90c72,0x3b0fe0a8,0x3ae0b63d,0xbacd3020,0xbbb6185b,0xbb95f544,0x3b6c019d,0x3b781bad,0x3b94909e,0x3bb18544,0xb9dd0604,0x3b60d112,0x3c0a2061,0xbb99315e,0xbc038940,0xbb8e4829,0xbaf797ed,0xba09880f,0xb84b03a6,0x3907a1f8,0xb887d5ae,0xb8e1715b,0xb8d269a3,0xb8d2c9ec, +0xb95290ce,0x378478bf,0x39f7352f,0x3b0542ff,0x3adaba22,0x3b185289,0x3afb4dab,0x3ac3e19d,0x3aaa1e5a,0x39290a4d,0x39b35a9b,0x392fae20,0xb8d34d1a,0xbab03dad,0xbab69738,0x398d1fa1,0x3a7fded5,0x3b48a68d,0x3b993d48,0x3b7f7a9d,0x3a5994d0,0xbba02f3f,0x3ab35fe9,0x3ab791ad,0x3b86b9eb, +0x3beaa074,0x3bcc7c9a,0x3b3ac4a4,0x3aac2acb,0x389e0065,0xb9c657d3,0x39884fed,0x38f8c9d6,0x399341ae,0x398aa44c,0x3996e8b6,0x38ac938d,0x3a0592b6,0x3a6bbea9,0x3a86d73a,0x3ab030a1,0x3a75bebb,0xb85c3576,0xb9c86059,0xb92e90b4,0x3975b98e,0x39a10e1f,0x3980b1ff,0x3a0cd745,0x37983e38, +0xba0e8b00,0xbab2938e,0xbb7cbebe,0xbb8ebdb2,0xbba2629c,0xbb6b0903,0xba584875,0x3a3f2690,0x3b2a3c4f,0xba4a1572,0xba90ed8e,0xba9d415d,0xbb04ddd5,0xbac5db84,0xbaaa708a,0xba9af31f,0xba1d15bb,0xb9cda4d2,0xb9301008,0xba1e432a,0xba244b1d,0xba0e3615,0xb848f826,0x3a03e8f0,0x3a12c241, +0x39b5ad7d,0xba7bd590,0xbab46a15,0xbac90184,0xbac14d46,0xba8e8057,0xba2cf716,0x3a7fb4df,0x3afa8476,0x3b1d0851,0x3b10ea68,0x3afca524,0x3adc641a,0x3a965e41,0xb8147104,0xbb23e5cb,0xbb4c9832,0xbb63eec0,0xbb468b17,0xbabce853,0xbb33f6be,0xba429968,0xb9e1a1f3,0xb89be5ff,0x39e97d3f, +0xb9e9d503,0x3980bc38,0xba03d6a1,0x3938360c,0x39473374,0x3a62e643,0x3a2d1b9d,0x3aa5a532,0x3ab48209,0x3a99eaf5,0x3a472d5e,0x39aefa55,0xb938b666,0xba4cce1c,0xba65e9c1,0xbad23e5b,0xba88d4bc,0xba5355dc,0xb8871b1c,0x39e1a7c9,0x3a66285f,0x3aaecde2,0x3adaca58,0x3aeb43b6,0x3a91f226, +0x39805836,0xba5e92c2,0xbaced37a,0xbae34935,0xbb01e36c,0xbae8e7f0,0x39d44469,0x3a05772c,0x3ae4088c,0x3a5e7baa,0x3aa7e16c,0x3aad24fe,0x3a6466e7,0x39f8b11a,0x3ab12b80,0x3ac74b25,0x3b387a63,0x3ad6cfe8,0x3b0a9729,0x3afafbab,0x3aba31d1,0x3a501cb4,0x399f10ec,0x38f65655,0x3a1092b6, +0xba2e4719,0xba38918d,0xba04adc2,0xba1aeb17,0xba09e938,0xba0b06f0,0xb9e15315,0x37e7ae9f,0x39a7fd14,0x3a7b1627,0x3a83c2a4,0x3ab5c82c,0x3ad4915c,0x3acc6acc,0x3a8c1250,0x393f95ea,0x39ea6556,0x3ae5f4f8,0x3ae20075,0x3b3bff7c,0x3afffcb2,0x3b0313f3,0x3b14a072,0x3afe974c,0x3b137de8, +0x3ab20d12,0x3ab1ed61,0x3a7cee11,0x3a8e4e80,0x3a1e4ee6,0x3a45d0a9,0x3a177b19,0x39c16ef3,0x39928abf,0xba1edffb,0xba2bc210,0xbac2b7b5,0xbaa40618,0xbaa6aee1,0xba983d46,0xba90c147,0xba80efb8,0xba64b6e0,0xba6c8cb5,0xba3b9a59,0xba2e2505,0xba01b8b3,0xb9d9cbf0,0xb96ec9dd,0x388b48c6, +0x39d17344,0x3a946b50,0x3ac7d736,0xb956bd8b,0xb9387da1,0x3a0619cd,0x3a81186e,0x3a435fbd,0x393dc004,0x3a2bdcf5,0x3a6a41a5,0x3a8dfb6e,0x3a8e8c09,0x3a852b21,0x3a8ad3db,0x3a926cf1,0x3a8be684,0x3a48e7a9,0x380bc300,0x39e6216b,0x3a082942,0xb8497146,0xba416a89,0xba299824,0xba3208ec, +0xba3ac68b,0xba4976ce,0xba507423,0xba4f11cc,0xba3fc8aa,0xba174a79,0xb9fead27,0xb9b30b7b,0xb95d07c2,0xb819e4f0,0xb68ded3a,0xb91105ea,0xb94be85b,0xb972a1f8,0xba66cdde,0xb6175b4b,0x39819260,0x3a4fa66a,0xba792b27,0xbad10e4b,0xba487ae5,0xba3e4feb,0xbab315fe,0xbabdf7f3,0xba8f4c85, +0xba75403d,0xba6eab98,0xba48536c,0xba63de3f,0xba5f9e02,0xbac90133,0xba892933,0xb9e7375c,0xbab1cf0f,0xba777b2f,0x3a26611e,0x39ad7969,0x39b6baba,0x39dda0a1,0x39e2efa3,0x39c06960,0x3927f1c7,0x390f383a,0x3928651f,0x39e9b945,0x39624810,0x38b90f43,0xb6acab67,0x391d711e,0x39203f63, +0x393afa37,0x395b030d,0x39b8463b,0x3825aed2,0xbafe4ff2,0xb9f7b8ea,0xbabd4581,0xb9e7bc3e,0xba6b9396,0xbae58d7b,0xb9fa5efe,0xbac510f6,0xbaf5a835,0xbae22612,0xba779c33,0xbab7960b,0xbac8d410,0xba81c84c,0xba68264e,0xba009dea,0xba92b1de,0x3613262c,0x3a207ffc,0x3a10f67d,0x3a81a97c, +0x3a50ff1c,0x3a1ed0e3,0x398ad2b7,0x39869126,0x3a02533f,0x3aa12f45,0xb917ea46,0xba0c5466,0xb99a54b1,0x39e07ec0,0x3a45d846,0x3a447205,0x397f045b,0x3a6a36b5,0x3a14f05b,0xbabb77ad,0xba1f43ae,0xbafedbcc,0xba2b15fa,0xba8902b1,0xbb1975be,0xbabded36,0xba12e093,0xbb5cccd0,0xba13a4e7, +0xbaa77a00,0xbb063042,0xbaaf50c3,0xba8a6147,0xba187ecc,0xba2e7b6a,0xba3453f4,0x3a161878,0x3aaa1170,0x3a8e7c24,0x3ada5644,0x3ac26d70,0x3a966ee5,0x3854685e,0x38638583,0x38cbc228,0x3b044066,0xb9173e28,0xba18aac3,0xba3db587,0x39b138d6,0x3a19b8e6,0x3a212974,0x39eb29d1,0x3a37f41d, +0x39ffdbad,0xbb0beef2,0xbac68169,0xbb12987a,0xb99afe1c,0xba1932d5,0xbb844d2f,0xbb10c7ab,0xbb3cfdbc,0xbb8172a5,0xbb09652a,0xbb0971bf,0xbb138f1a,0xbae04f9e,0xbad0435a,0xba41ffbc,0xba097162,0xba0fd36d,0x39fccb54,0x3ac342f8,0x3abe7baf,0x3b1e36c6,0x3b0bea4a,0x3ae31269,0xb8b1131e, +0x3a1e9bfb,0x3a60b0f5,0x3b6968e2,0xba828e8a,0xbac5cb43,0xba81f9e0,0x3a7fc7af,0x3afb126c,0x3af7b525,0x3a0c9693,0x3a9d2579,0x3aa3481a,0xbadd6241,0xbaa4fe59,0xbb33132c,0xb9aaca89,0xba8f0b6e,0xbb3de9e4,0xba8753ee,0xba96ae30,0x3a0ce151,0x39613a32,0xb83c5c2a,0xbae1ad26,0xb9d87a87, +0xba5acc4a,0xba88437c,0x3a3b3ed8,0xba0359d8,0x3ae732d6,0x3b2cb3a1,0x3b213e36,0x3b52c978,0x3b3b55ab,0x3adc1138,0xb9ba7af9,0xba869e93,0x395cb6a5,0x3b7d532f,0xb92c0187,0xbacb0cff,0xbaa9afa6,0x3a05f040,0x3a7b31c7,0x3a428f55,0x39decfca,0x3bdc9521,0x3ba118bf,0x3b35b322,0x3b4f78a9, +0x3b591891,0x3b86fec6,0x3b6aba2a,0x3af7156f,0x3b00577b,0x398af074,0x38d65ad1,0xb9433f0f,0x397848d8,0x39e9618b,0x3a37fb46,0x3a97a061,0xbba8e190,0xbb981cef,0xbbe0b05c,0xbbd7eb96,0xbbdf0196,0xbbc75467,0xbb9e8fc0,0xbb50e657,0x3a4fc0a7,0x3bdaf8f7,0x3bd26dca,0x3b5ffe03,0xbabc733a, +0xba88b555,0xba6b5bcb,0x3a17552e,0xb9d5fd42,0x3afbabca,0x3ba51c9d,0x3bf4dc6b,0x3af14445,0x395d5c3d,0xbb25b011,0x3a2162ba,0x3b3da312,0xbadf3a46,0xbb37b568,0xbacdc37d,0xba11a1e1,0xb9fed1a4,0x38dccd2f,0xb815e184,0x38312ce9,0xba1864c3,0xb9ac7e95,0x39a87b88,0x3a063da4,0xb9b3fe1f, +0xb9e8c2ee,0x3a5b6f6a,0x3b35c262,0x3b3cd962,0x3b257a10,0x3a857bfe,0xbab52814,0xbb892abb,0xbbe1e3f9,0xbb9e4ff1,0x3a985875,0x3b47183e,0x3b1d6634,0x3a2fdca4,0xbba7bfa3,0xbbecb7a6,0xbba0b17e,0xbae8d15e,0xbb3c07de,0xb9778008,0xbb283912,0xbb32640a,0xbb61cd09,0xb9b2c1a9,0xb9e57dfe, +0xb9054f05,0x3a010f88,0xb5ac3da9,0x3843d388,0xb8454e76,0x37bce671,0x39169068,0xb9cd97cf,0xba242cdd,0xbaae572c,0xba993a28,0xbacf3425,0xba122baa,0x380411cf,0xb9f0ccbe,0xba18176a,0xba6021db,0xba4f9bdf,0xba918e56,0x3aec4da8,0x3af52162,0x392f0b8f,0xba94cd23,0xbab7ea45,0x3abc6970, +0xb9092267,0x39c99aab,0x3bc4adce,0xbb080ef1,0xb9ca7296,0x3bfb10ac,0xbada18fa,0xbb74fdfd,0xbbd9cbf7,0x39b09157,0x39362642,0xb9d58959,0xb833c5a1,0xb8c2081d,0x38c30bba,0x382555f6,0xb787650e,0x390c0e08,0xb7981620,0xb9e97470,0xba11bc7e,0x3a22aa5e,0x385a303e,0xb9f00060,0x39d32e61, +0xba4eaa4f,0xba974ace,0xbab9b46c,0xba65783f,0xb95e6254,0x3b58ed69,0x3b160cff,0xbaccc87a,0xbb7cfbfc,0xbb0a0827,0x3ba88c1b,0x3b445163,0x3b1f8021,0x3af63dab,0xbad427dd,0x3a6c6c99,0x3bfe2b8e,0xbbb5dbb2,0xbc11cf5c,0xbbd0f88c,0xbacd56b3,0xba0af7fd,0xb940f0ff,0x3912bafe,0xb8394aad, +0xb8f78635,0xb8843dc4,0xb8f43981,0xb8f13c3d,0xb91c2fd4,0x380f96ed,0x3ad0247e,0x3ae11e8d,0x3ae7de65,0x3b3dc4ed,0x3b0e65d5,0x3addaa26,0x3a0a5642,0xb966762f,0xba3de3dd,0xba4b8135,0xbb209df1,0xbb2aac62,0xbaf0dba2,0xb9324146,0x3b0c3a34,0x3bcee763,0x3ac86383,0xbb3a9f99,0xbbf76a4a, +0xbb3dd135,0x3a500daf,0x3acfb98f,0x3ba33a03,0x3bddb52a,0x3b2ae936,0x3a6529ef,0xba00c43e,0xb9c40795,0x36dfc2a6,0x38858034,0x393222a0,0x39622bd4,0x394c4d0c,0x38ae4456,0x39c71236,0x3a824cbc,0x3ac77296,0x3aa22d6f,0x3a0f0d34,0xb9a35730,0x39a84db7,0xb894e806,0x3a5df673,0x39f210c3, +0x38668134,0xb908b179,0xba9fbb48,0xbb02478c,0xbb522ba2,0xbb92de62,0xbb91d9c3,0xbba4d63c,0xbb866a0c,0xbaeaa699,0x395b1af5,0x3a0b12ba,0xba427a14,0xbad00a62,0xbb2ea655,0xbb3b3dc5,0xbb21f888,0xbafc4c86,0xbaa04ccb,0xba6ec498,0xb99e9e91,0xb9f800e8,0xb9abbce1,0xba25f4ac,0xb9e90c4f, +0xb9428a76,0x3982d47b,0x3931fe51,0x39388895,0xba3ca7d9,0xbac4a06f,0xba445807,0xba419b05,0xba2186e8,0xb99dbc2f,0x39e78f76,0x3a8a6f13,0x3ab7aa1e,0x3aba54ec,0x3ac854ba,0x3aca1610,0x3aa6019c,0x39d99b29,0xbab35978,0xbaece5df,0xbb2d5428,0xbb1ce17c,0xbac6c316,0xbad65465,0xbb2eb6c9, +0xbb055511,0xbaa85038,0xba7490cb,0xb9d9dba7,0xba25650f,0xba47b8af,0xb9a7919d,0x38b5e962,0x39ede544,0x3a048034,0x3a46fdfa,0x3aa24c8c,0x3a89468f,0x3a494bc1,0xb831b5aa,0xba033c28,0xba4586f7,0xbace5602,0xba2e06f7,0xba142182,0xb910e794,0x39b024bd,0x3a53f7fc,0x3aac0d56,0x3ad85a0a, +0x3af877b1,0x3af74944,0x3ab66cb2,0x3a2365e7,0xb9962b23,0xba908915,0xbaab0298,0xbab87ceb,0xbae08960,0x39ca6a5f,0x39fc5c0d,0xb8dbc38f,0x38751d48,0xb9646d71,0xb9208e5c,0xb6cabf7d,0x39c3bf81,0x3a63d22c,0x3ab495c6,0x3ad6e821,0x3af091b5,0x3afe82e4,0x3afb2e64,0x3a830d7e,0x3a76c305, +0x3a1359d1,0x39a7238b,0xb9ea5751,0xb9bb8aa1,0x39c6b58a,0x385e3470,0x39a3950b,0x398d64ec,0x39c843fa,0x39dce6cd,0x3a572b7a,0x3a7fc683,0x3aac34af,0x3aa8cb3b,0x3ac82248,0x3ae38b63,0x3ad2d48b,0x3a63ea68,0xb832a8dd,0x3844f3bf,0x3b07f5e5,0x3b08f72c,0x3aba228b,0x3b126245,0x3af96ae1, +0x3b053c37,0x3b03663f,0x3ad6ee9f,0x3ad07587,0x3a484e79,0x39d50dd5,0x398c3a9a,0x39e20201,0x39d07507,0x38d0d5da,0xb93ff349,0xba1c4c6e,0xb9b878b9,0xbab119b5,0xb97892f7,0xb9d0208d,0xb9ae7944,0xb9a50fee,0xb998512c,0xb9748cc3,0xb965ea8a,0x38eebcbe,0x39d91b87,0x3a1e0887,0x3a60dd12, +0x3a63a951,0x3a780116,0x3a8e7828,0x3ab090ac,0x3b0095fb,0x3b106336,0x39d7ed57,0x3a20a531,0xb9903a8e,0xba4d23f5,0xba050307,0xb9e098db,0xba60c546,0xba3a41bc,0xba30fb29,0xb9d1d426,0xb958bce1,0xb98a8b49,0xb9e053b8,0xb9ff5d4c,0xba1fc28a,0xb8b511a5,0xba14a448,0xba5eae31,0xb9cf75a0, +0x39c51b17,0x395d9052,0x39696349,0x39597918,0x3944e793,0x392f1a00,0x390f7fee,0x3931dffd,0x39694eb0,0x39917238,0x39be98e6,0x39fabee3,0x3a2d71d0,0x3a2d43fc,0x3a010840,0x39ca23ad,0x39abb6f2,0xb8057c52,0x3a937c9a,0x3a3eac13,0x3a22cfb2,0x3ad3d31b,0x3aa4224b,0xb998d551,0x3aaf059e, +0x3a99a298,0xb8a35010,0x38ac3ede,0xb830c53a,0xb9cca144,0xb98160ca,0xb9b6d963,0xb9b19ee7,0x3a93bcd0,0x3ab5a044,0xb9a99b36,0x3a8d8c25,0x3ab77e44,0x3a1847bd,0x3a53bfde,0x3a71afbd,0x3a789bc1,0x3a70645c,0x3a5a6873,0x3a2af70d,0x3a269474,0x3a38e375,0x3a835ace,0x3a5fdc1d,0x3a410e50, +0x3a3547cf,0x3a74b18a,0x3a6c1a1b,0x3a34f60a,0x3a44907d,0x3a224ffa,0x3ac364d0,0x3a870f0e,0x39e040d2,0x38dd8d53,0x3a66e1c2,0x3a814aba,0xba1779c0,0x3888d714,0x39e1e197,0xb9a1ad75,0x39c863a3,0x39598163,0x3867f915,0xb9240ad1,0x39d6b503,0x3a58343c,0x3a3c0c04,0x3aa1a17b,0x3ad0dfe7, +0x3a95315c,0x3ace2ca9,0x3afb5d93,0x3ae01bea,0x3acbc3e7,0x3abe953e,0x3aa3365c,0x3ac1352d,0x3b0d4e90,0x3a8dd27a,0x3a550382,0x3a94ae5b,0x3b14dbb2,0x3b1d0198,0x3ac5bf15,0x3a9c41e0,0x3a57b20e,0x3adaea6f,0x3aa615fc,0x3a2e5946,0xb8d10a2c,0x3a3354c4,0x3a35885f,0xbad8bfe4,0x3880d8ea, +0xb95632bc,0xba98fe5d,0xb91d61f4,0xba104a5e,0xb9b66388,0xb985982e,0xb9144447,0x3a576f1d,0x39efd1f4,0x3a9a22c4,0x3abe80ea,0x3ae71bfd,0x3b208307,0x3b383ed8,0x3b24cabd,0x3afb75da,0x3a9f9318,0x3a8e1332,0x3aa25838,0x3b596fb9,0x3ac2e8fa,0x3ab9ba8a,0x3aba627f,0x3b4c2797,0x3b3d2845, +0x3aa8a251,0x3abd4fb1,0x39635dd1,0x3ae3ffcd,0x3a8f0711,0x38f1a730,0xba9fcd2c,0x39bab5a5,0xb8f0bd44,0xbb45e706,0xbad76cf3,0xbb13a03c,0xbb5568e9,0xbaeb029a,0xba9a46c0,0xbb008277,0xba85235f,0xbabe4701,0xb84e6571,0x395f4f15,0x3a9efd52,0x3b025b89,0x3b02c86f,0x3b3fe5d0,0x3b86c5be, +0x3b75b66a,0x3b6a228d,0x3b1385bf,0x3b196272,0x3b220dd4,0x3ba54ba1,0x3aaab6b2,0x3ac93a3e,0x3b00d623,0x3bada425,0x3baa8f94,0x3b16aa63,0x3aee98d4,0x3a4b1276,0x3ad4bf06,0x3a5b48e5,0xb9a6d312,0xbaee5e48,0x39cb598e,0xba20ef30,0xbb1f8612,0xba220e4c,0xb9ff0b8e,0x39e03613,0x395a8c54, +0x390ba1eb,0xbaa9afe8,0xba13b649,0xba54e9ef,0xb9e5bfb1,0xb9cc6f00,0x3abd3ee3,0x3b1caf2b,0x3b4ab0fb,0x3b933063,0x3bab81d7,0x3b8efe4b,0x3b43925d,0x3a855f3c,0x3933ec11,0x3ae046ff,0x3bafff06,0x3b1db4fa,0x3aff4c02,0x3b11702a,0x3bba2294,0x3b9bac2a,0x3a871042,0x3ab61aca,0x3c03a782, +0x3bd1faf9,0x3bdccb93,0x3bb4623b,0x3b90daee,0x3b8a4446,0x3b572faf,0x3ac111a1,0x3ac92c99,0xb7f05f41,0x392352a7,0xb9387dd1,0x395c9fcc,0x393718b4,0x3a95cbb8,0x3acd51ac,0xbb5db1b6,0xbb874e9c,0xbb8f5aaf,0xbb8cc6eb,0xbbc48bff,0xbbbe2f5d,0xbbc47915,0xbb31acb8,0x3a82c521,0x3bca3e2a, +0x3baf1e63,0x3b077006,0xbb097cfa,0xba73d69b,0x39f22f7d,0x3b9218de,0x3b207844,0x3b8fde24,0x3bf6830a,0x3c161767,0xb98d7d07,0x3ab8074a,0x3a783d6a,0x39e6af93,0x3b85f2b4,0xba39bbc4,0xbb0188dd,0xba5f46c6,0xb9dc5cc8,0xb986cd3d,0x38d4e953,0xb84ee71d,0x389ebda4,0xb9b385c0,0xb93fccda, +0x39845a69,0x3a84d029,0xb9af2781,0x34824642,0x3add6e93,0x3b691c97,0x3ba8261b,0x3ba7c7ad,0x3b0c4273,0xb9ec1069,0xbb5d59b0,0xbbb8cb90,0xbb6a2310,0x3b3486ae,0x3b78d393,0x3b5fd6aa,0x3afdc697,0xbb421841,0xbbb462b1,0xbb8a3fc4,0xbac0f75c,0xbad97fc5,0x3acb79d8,0xba994b63,0xbaf5b484, +0xbb0dd217,0xb92c11d0,0xb8685519,0x39875e79,0x3998008d,0x381063c5,0xb5d617cb,0xb80ac8db,0x375826b8,0x387ccb02,0x39280863,0xb9063add,0xba0ee136,0xb9a3b7f4,0xb9002ea7,0x38f3ca56,0x394da131,0x39ddb49e,0x39ed0aa4,0x39da9353,0x3a1896af,0x3ab406fc,0x3b44fc68,0x3b29fd68,0xb9f559ea, +0xba9ff88a,0x39c20225,0x3bc7965c,0x3bc02805,0x3bd0764d,0x3c0e5dbe,0x3969372e,0x3aa7220b,0x3c09662a,0xba40f6a5,0xbb46ea28,0xbbc8b3d3,0x39f44ff1,0x398969f4,0xb932deed,0xb880bce3,0xb84f0a7e,0x386f484d,0x37f1a6d3,0x383063f0,0x3809392e,0x38888f10,0x38934568,0x38ad5d73,0x3a690b4a, +0x3aab2924,0x3aad52ec,0x38da6662,0xb96f228c,0xba1f0b6a,0xb9212058,0x3a8f2b15,0x3b4fdb07,0x3bc7cc6a,0x3b99efc1,0xba7b186c,0xbad211d7,0x3a61ba88,0x3c1e2bff,0x3c0c385d,0x3c0d8d4a,0x3c054c3e,0x3aa77d8b,0x3b4170a1,0x3c0d45f0,0xbb8658dd,0xbc17bacb,0xbbd9d187,0xbaa902c2,0xb987be92, +0xb6112f21,0x38ae7576,0xb7c3db7f,0xb827ade3,0xb8561b8d,0xb8c59bbc,0xb805ab05,0xb6567816,0x38dac378,0x3ac89369,0x3b03b9da,0x3b1ca814,0x3b2cbe82,0x3b2132ec,0x3b26822d,0x3ad8b24b,0x3a8e7f01,0x39c2cac6,0x38ae98f4,0xba681af8,0xb9f5df33,0x3a7685ec,0x3b2cbac1,0x3ba7e622,0x3bf6d630, +0x3ba74473,0x3ab8de56,0xba9c200f,0x3adb0241,0x3bdb62f9,0x3bd63b2b,0x3bf1b7a1,0x3c1def2e,0x3b5d2aea,0x3ac7b29d,0x38483205,0x380947ca,0x3925914a,0x389b9edb,0x39239ece,0x392ef309,0x396a372b,0x38fb9b17,0x39fd701c,0x3a936dc7,0x3adb2a2e,0x3b28cf35,0x3b1c1a8b,0x3aa38ea6,0x3a84c25e, +0x3a0f9c7c,0x3a8f7824,0x3a9b8a4c,0x3ab2f719,0x3b1848e2,0x3ac579c8,0x3a89b9b8,0x3a68bb28,0xbacff3c0,0xbad7f7a7,0xbab63888,0x3a89164c,0x3b821358,0x3baeb469,0x3bc4d9bd,0x3b182f40,0x3adefad7,0xb9c84458,0xbab56e6f,0xba96ddce,0xba93ae59,0xba55b60e,0xb9f00f4d,0xb84cbffa,0xb801b342, +0xb976da46,0xb99046fd,0xb9a70fcf,0xb8d89b61,0x39d495aa,0x3a345ab7,0x3a5be747,0xb98ec509,0xba84237d,0xba503052,0xba20ac0c,0xb98a8234,0xb8679a0e,0x3aabdce5,0x3b022ba9,0x3b0ee738,0x3ae3e902,0x3ab611ed,0x3a767be2,0x3a8dcbbb,0x3a6730b0,0x38488e3e,0xba5f3bed,0xbaa27814,0xb94e6f03, +0x3a9ee51d,0xba5122f2,0xbaae2c77,0xb957c5dd,0xb85b31cc,0x39a685c4,0xb96e9eb1,0xb8f58a49,0xba1dd86e,0xb85a8ce9,0x37a82db0,0x39c7c3d1,0x39568285,0x3a307a3c,0x3a70cd05,0x3a999225,0x3a80e40b,0x3a4f51cb,0x39b49b4f,0xb85bbe10,0xba19a1fb,0xba047c92,0xb925babd,0x393e9f17,0x3a6b3fe4, +0x3abcae35,0x3afab477,0x3b14b5a1,0x3b2053c0,0x3b15db06,0x3aed8bde,0x3a96f29e,0x3a28d4ac,0xb940e583,0xb9fa07bb,0xba55cf04,0xba5f017c,0x39649248,0x3a2d7dc0,0x3a25e2cb,0x39f891ed,0x3a00dca3,0x3a1061eb,0x3a136c25,0x3a1adc98,0x3a9ebf71,0x3ac7ca94,0x3b1fff23,0x3b1330a0,0x3b10e688, +0x3b24419c,0x3acde6e7,0x3ac2a817,0x3a9381b3,0x3a6a8d54,0x3a431aea,0x39df8df5,0x39d110d6,0x39fc136c,0x39fa7029,0x3a10beba,0x3a29f200,0x3a5376ca,0x3aabdcad,0x3ae283b5,0x3b2182ca,0x3b1d5086,0x3b292a6b,0x3b2974e3,0x3b0ba796,0x3ab19ee7,0x3988ad4c,0x39c5bbcd,0x3b337506,0x3b27cc77, +0x3b26bad2,0x3b33f621,0x3b3ba889,0x3b3ae1ab,0x3b377f1b,0x3b121d60,0x3b105a21,0x3b039371,0x3ae2ac41,0x3af29ccd,0x3af63d2c,0x3b00a24c,0x3b0347b0,0x3ad69310,0x3a814adf,0x3a6a90bb,0x3786c29a,0xb92866d1,0xb9608cbc,0xb8563c72,0xb8014d78,0x38449bf8,0x38c78f8b,0x38a3b805,0x399f2e6e, +0x39ef0072,0x3a2b72fd,0x3a8ded65,0x3ab47704,0x3b00fc02,0x3b060247,0x3b123189,0x3b30a5e6,0x3b3cecb5,0x3a4b606e,0x3a7728ee,0x3aa5c83c,0x3a549bfc,0xb8ab78f6,0x3a8787e7,0x3a706ac0,0x395a2e09,0x3980f5df,0x39adcf6b,0x39ba16d7,0x39ae1d38,0x395dde64,0x39370f84,0x3aa8316d,0x3ab14c02, +0xb89e3876,0x3a787511,0x3a95a810,0x3a24cfc1,0x3a3424b0,0x3a3099b8,0x3a27efc9,0x3a1e8547,0x3a177968,0x3a13573b,0x3a36112c,0x3a5d7a00,0x3a80a1db,0x3a9098b4,0x3a922bf1,0x3aa3bdcf,0x3a96b487,0x3a80a5c3,0x3a60e562,0x3a493b9a,0x3a95a63b,0xba9ac94f,0xba3409fc,0xba5e11de,0xbaa79c2e, +0xb9a0bdb3,0x3a8dda34,0xba9a1bcf,0xb9f1e92f,0x3a2e563c,0x3a8c6c37,0x3aa144b1,0x3a7389b9,0x3a94e377,0x3abce309,0x3a962ce3,0xba1708c5,0xbaa48f01,0x3aca1039,0xb902e299,0xba81e8df,0xba5ded65,0xba3cd084,0xba51c65d,0xba3ef9ca,0xba57b7ae,0xba649f15,0xba7933cb,0xba7d6ced,0xba6f17f7, +0xba1ef82e,0xba695ad6,0xba828e61,0xba8fe333,0xba703b5f,0xba66fccc,0xba4a6b17,0xba4e2c0d,0xba49a3d1,0xbaa5d07e,0x399e4e60,0xba3d9679,0xb9f44cec,0xba00f817,0xba3ab8bb,0xba948ee0,0xba2e1a31,0xba7d2420,0xba95ee7d,0xba9e619e,0xba9a333f,0xba54dcfb,0xb9017592,0xbaa806be,0xb9795973, +0xba15fca0,0xb938f733,0xba92c0e2,0xba43a351,0xba4e45f8,0xba0e206e,0xba52e5f9,0xba81e42f,0xbaa85842,0xbaa9df1d,0xba924301,0xb9cd8159,0xbae82fb9,0xbb051399,0xbaeaaf6f,0xba7bbb7e,0xba0d04ed,0xb9b0c171,0xba448297,0xb9eb3db7,0xba0e3975,0xba33020b,0xbaa9cd50,0xbaad6e3f,0xba097901, +0xb99e2dbc,0xbb21f20b,0xba3f228c,0xba8eba13,0xbb2bbca5,0xbaea3b87,0xba84482f,0xbae980d0,0xbab1b06e,0xbaca5643,0xba1059a3,0xba027d47,0xba0190b2,0xb9a7094c,0xba2cb64b,0xba0f97ac,0xb9dbc4cb,0xba544d38,0xba97f1ab,0xbae328fc,0xbae25db2,0xbac8dba6,0x39a5d2c3,0xbaf8144a,0xbb1945ae, +0xbb164b5a,0xba926206,0xba2be845,0xb982fdfa,0xba0b0592,0xba11d21a,0xb9c12ee4,0xba3df34b,0xbaa0bdbd,0xbafd0fa7,0xb8bb01ba,0xb9726c70,0xbb5c54cd,0xbac4c925,0xbafe8ef7,0xbb268b5d,0xbac0ad58,0xbad4ad97,0xbafb6f52,0xbae7ec82,0xbb0d8676,0xba3469bd,0xba60433a,0xb998c2cd,0x39534979, +0xba198f0b,0xb904a874,0x394d71de,0xba2aada7,0xba9c0950,0xbb0de9dd,0xbacbaac6,0xbab33a95,0x3a85032b,0xbb52c9c2,0xbb6d5b15,0xbb439425,0xba298e94,0x3a253125,0x3a6a3059,0xb8a243ef,0xb884c8de,0xb8a7fa7a,0xba7755e0,0xbab989e2,0xbb2b7e8d,0xb8ec8ca8,0xba14315e,0xbaf41845,0xb9670750, +0xb9bb4346,0x39ca0cf3,0x38ff0dae,0x39aa85db,0xba8a77c0,0xba46b632,0xbab35fb8,0xba5b2540,0xba107f30,0x38e6b6d7,0x3a03ce6f,0x3985da3b,0x392b8140,0x3969c947,0xba2809c1,0xbae614e1,0xbb3a0f3e,0xbb5e0613,0xbaf207fe,0x3ae46a7b,0xbb282a64,0xbb740b05,0xbb417cb6,0xba853048,0xb969aeb3, +0x38123adf,0xb9cb3b87,0x3b9fe63b,0x3b1e6d2f,0x3b571af4,0x3b776c72,0x3b665704,0x3b6b47f3,0x3b005ccb,0x3a5a63ab,0x3a2c56d0,0xb9067254,0x390a56f2,0xb966f13c,0x391537fe,0xb8013946,0x3a853e65,0x3ad6883c,0xbb563782,0xbb889366,0xbbb96e5d,0xbbcda1fb,0xbc01e782,0xbbdcd34c,0xbba26db6, +0xbb14c556,0x3aa605aa,0x3bfb3085,0x3b9f0fe8,0x3a6b0a1d,0xbb925d8a,0xbb6db682,0xbb6fbca7,0xbb044502,0xbb4885e9,0xb96b64b3,0x3b98b24b,0x3bb91c41,0xb98de97e,0xb83bd732,0xba8b696e,0xba793967,0x3b300c3e,0xba9644fc,0xbaac800b,0xba069b8e,0xb97d8f43,0xb8e815ff,0x37668499,0x372edd95, +0x383fc37d,0xb945a4ac,0xb9eea18b,0xb9b5fa3c,0x39d2e38b,0xba5eafff,0xb9888cca,0x3838ce30,0x39be5457,0x3a4751ca,0xb9e2daef,0xbac1f471,0xbb4bcbe0,0xbb9eaa63,0xbbd55fc4,0xbb781ce9,0x3b2da95f,0x3b0dfaa4,0x3a945593,0x39f0fe9c,0xbbc15f85,0xbbfb8e77,0xbb87d157,0xbb2c0e68,0xbaab7afe, +0x3aadecb1,0xbabe59a8,0xbb017bca,0xbb231c40,0xb9d475dc,0xb7451142,0x391e3530,0x38bebd91,0xb61ea33e,0xb705eb99,0xb806c2cd,0xb85ec600,0x38e3f743,0xb906b53a,0xb98d22a1,0xba423415,0xba593830,0xba8d855e,0xba9aba38,0xba63022a,0xba97961e,0xba9e805a,0xbb1f7ad1,0xbb24c7c3,0xbb03e8b8, +0xb906978d,0x3904c82e,0xbaeca62d,0xbb2d1576,0xbb43ea05,0xb9c6cbf2,0xbacb353e,0xba0c77f2,0x3b3e92a7,0xba8c8c4f,0xbab27ce9,0x3bf6ee22,0x3a3f633f,0xbb464335,0xbbb53321,0x38b67cee,0x38cf4637,0xb9371673,0xb83494bb,0xb76296ac,0x380807ce,0x37bad072,0x380f37d3,0xb785e036,0x37daf394, +0xb9239038,0xb9df8854,0x3a4b77e6,0x3a5db22d,0x399e8cee,0xb9ad2b28,0xbab87736,0xbade3f86,0xbb3f6a71,0xbb2b728d,0xba708d18,0x3a80fe22,0x39188a07,0xbb9d03a1,0xbb83b043,0xbb22ef60,0x3b424dcf,0xba88a323,0xbb11986f,0xbb72143c,0xbb7fdbec,0xbb972458,0x3bbb698b,0xbba54304,0xbc16e087, +0xbbf4b33a,0xbad6966f,0xb99a2264,0x37d1636b,0xb7a6d8e4,0xb7e1aacc,0xb89bdab6,0xb88f02c5,0xb906e92e,0xb86283d1,0xb9358d64,0xb92809ca,0x3a844f11,0x3ac89fd1,0x3b02e23f,0x3b13d634,0x3a877e92,0x39081fbb,0xbab2b0ca,0xbaf841b6,0xbb0f69e7,0xbafd1e10,0xbb488c07,0xbb33818f,0xbb024146, +0x3a863504,0x3b3f163d,0x3bb70d26,0xbb532e34,0xbc19b9a3,0xbc583e20,0xbc08d84c,0xbabf5f11,0x3b75fd05,0x3c1bafd4,0x3c10c7c8,0x3b61f94c,0x3ab5dbdf,0xb9935137,0xb8c339fe,0x38167e41,0xb72e6d5a,0x38d5e5ea,0x39032158,0x3962692f,0xb6f4db9f,0x39a7e944,0x3a806372,0x3acff9c9,0x3b140ae9, +0x3aed1ef6,0x3a8f4d05,0x3a5aebd9,0x3a56df99,0x3a9a755a,0x3a4376ec,0xb89f0ff2,0xba60a529,0xbb18efec,0xbb6217ac,0xbba0c681,0xbbc4f2bf,0xbbc4d68e,0xbbe411ea,0xbbb6f0c1,0xbb5cf088,0xbb190f02,0xbb113e69,0xbaa4dbf1,0xba8994a7,0xba52ea52,0xbad1829d,0xbae6da6e,0xba9acbf6,0xba773087, +0xba085495,0xb93180e8,0xb9369871,0xb991cd85,0xb9c4ec17,0xb9d8ea41,0xb991dc10,0x38fc2f4a,0x3978898f,0x39c683a3,0xb9b11e95,0xba2c7220,0xba167784,0xba7fa40c,0xbaa1603c,0xbaaf2f39,0xba60a229,0xb9ea15c7,0xb9c8d22b,0xb9dd7b93,0xb92b85ff,0x3981c83f,0x391975a4,0xba366661,0xbb43fe8c, +0xbb504905,0xbb7be419,0xbb45679c,0xbb109c43,0xbb34b349,0xbae6c8dd,0xbaf05629,0xba9d00d3,0xba777933,0xbaa3175b,0xba5a9688,0xba6f5247,0xb9d9a437,0xb967307e,0x3963178a,0x38e15285,0x3a02c791,0x3a224d5d,0x3a51acff,0x3a62ff00,0x3a35b6a5,0x38b3b493,0xb9bb89e4,0xba5f00f6,0xba5f66af, +0xba09eca0,0xb937bfc4,0x39790cc2,0x3a248171,0x3a972578,0x3a98ec49,0x3a97d31d,0x3a699f01,0x392e3950,0xba6928e5,0xbb12282e,0xbb1309c4,0xbb032517,0xbb14304d,0xbb008735,0xba8fc5a8,0xba99a335,0xb996f31f,0xba259f15,0xb98cf0c2,0x38b7f3cf,0x389923aa,0x387f1112,0x3a3894f4,0x3a7ad11a, +0x3ad3c63b,0x3a979bab,0x3af84cae,0x3adae179,0x3ad9ad18,0x3aa07e1f,0x3a867e25,0x3a3c32e4,0x39dc7516,0xb9927dc5,0x39d77551,0x39ddee52,0x3a36b4aa,0x3a6654ab,0x3a958c5d,0x3ab2b6b6,0x3a967974,0x3a7811e8,0x3a57afc0,0x39fc7ca0,0x39d5bfa8,0x393fe64d,0xb8876093,0xba60abf0,0xbada5bca, +0xbab4059d,0x3ae8cd0d,0x3ad3b263,0x3b23ebfb,0x3b02d2f8,0x3af14d4a,0x3b00fab8,0x3ad45893,0x3b08ea6a,0x3ad4acd6,0x3ad04e4a,0x3ac67c51,0x3ad4e5b4,0x3abb4f2d,0x3ae507fb,0x3a8ef7e3,0x3a5aee6a,0x3a655251,0x39b764fd,0x39184a85,0x39d07d01,0x39cf6ca4,0x39b426e6,0x39aa2e30,0x399eff4a, +0x3971b1b5,0x3913e160,0x39e1ff41,0x3a03f6a8,0x3a113c82,0x3a1eee61,0x39da5f37,0x39a3ad19,0x3a1bb3ae,0x3a9587e1,0x3ad83f83,0x3ae31a0d,0x38f58ba7,0x38bd9e96,0xb5ba5d8d,0x39e302bd,0x3a8a319d,0xb9067162,0x393f75f2,0x3a7eb962,0x3a9a60ee,0x3aa90cec,0x3ab1cbf8,0x3abd47cc,0x3acc4a15, +0x3ad17928,0x39f0efbf,0x39536463,0x3a9997c1,0x39c772d4,0x38afa734,0x39bbdfc0,0x399f5b2a,0x39b9821f,0x39c71c98,0x39d69aef,0x39e496fa,0x39de5e75,0x39cf7b14,0x39a51014,0x3999b07e,0x3998d958,0x39aa9e4a,0x39c3f6ef,0x39a74ec9,0x3927f585,0x37ced71c,0xb69eaef4,0x39c4f352,0x3a99c66d, +0x3a68ea12,0x3ab13d5f,0x3a831d16,0xb9ac0ba4,0xbacb62ed,0x3a738256,0xb8b17be1,0xbad4ea0a,0xbac62ab3,0xbad66c1e,0xbae198db,0xbada99a5,0xbafdd11d,0xbad0f8fb,0xb98cc1e3,0x3a319cd6,0xbace5050,0xb9d58b13,0x3a26c992,0x3a95c03b,0x3a832b53,0x3a95450c,0x3a9bc950,0x3a92d74c,0x3a876f2b, +0x3a67b564,0x3a63505d,0x3a790267,0x3aa2acfd,0x3a8ba67a,0x3a756e75,0x3a6df673,0x3a8ded53,0x3a8507f0,0x3a47d685,0x3a7004cf,0x3a8101b2,0x3adcfadf,0xba93aba6,0x39315611,0xba655de0,0x39cf8ca2,0x39b02669,0xba862879,0x39145d14,0xb8eec684,0xba40c93e,0xb99eb71a,0xb8b10007,0xba00faf6, +0xbad7f196,0xb90cd1ef,0xb75cf816,0x395dfbcf,0xb9001623,0x3ac4c09e,0x3ac05e4c,0x3ae51526,0x3b0e9222,0x3aeb2cdf,0x3ad61901,0x3ad2ac83,0x3abc5c0e,0x3ad934d7,0x3b19dc01,0x3ab3ceee,0x3a9676a5,0x3ac23f4b,0x3b1783ac,0x3b18ab10,0x3ab02ab9,0x3a9f87b3,0x3aa7ef7a,0x3ae8ed4f,0x38fdae5f, +0x3a31a510,0xba522785,0x399c6f1f,0xb88415fb,0xba97239b,0xb9e6100c,0x388a8dcb,0xbafe683d,0xb843c5f4,0xba9743e3,0xb9ab61ec,0xba822971,0xba2045f8,0x3a1a8e40,0xb96b15b0,0x3988220a,0x3a95f8c7,0x3b144be2,0x3b1f277d,0x3b4bf77a,0x3b1de69a,0x3af6c93d,0x3aae73aa,0x3aa44990,0x3ac414f6, +0x3b665200,0x3adb466f,0x3ac9bd7e,0x3ad6773c,0x3b3699f8,0x3b1c0067,0x3a44c100,0x3aac2325,0x3a848402,0x3af18039,0xb9feabaa,0xba0932c3,0xbabd0011,0x38dca488,0xb972d854,0xbb10aea1,0xba976a8e,0xbaaa8d5e,0xbb05475b,0xba8a1120,0xba9e4df4,0xba8f8aa7,0xbadaab02,0xbaed057c,0x38847899, +0xb950ab77,0x398e2e80,0x3aa5d348,0x3b2a98de,0x3b453c10,0x3b913f0e,0x3b61e771,0x3b54d676,0x3b0dab33,0x3b1eb2c3,0x3b27dde4,0x3ba573c1,0x3ae20035,0x3af71178,0x3b23f195,0x3b9c445b,0x3b91ef49,0x3ad1b44c,0x3ac2354a,0x3aa57dfd,0x3b0231c9,0xb824389d,0xb9b174e9,0xbadaa8ef,0x39b83e2a, +0xb985fe0c,0xbaad724c,0x388c9b51,0xb8c593c6,0x3a0e0ec1,0x392e8fb9,0x39c4bc66,0xba1dd5c6,0xb9e1d8b4,0xba88254d,0xb9f5726a,0xb6dfa676,0xb909cd9c,0x3b00f460,0x3b5fbd84,0x3b8bc430,0x3bb081a7,0x3b77ca63,0x3b21a223,0x3a70315e,0x39c84f3d,0x3b0c6b8a,0x3bb9d887,0x3b282f22,0x3af692cf, +0x3b130389,0x3b94ea4d,0x3b532214,0x369b1b9c,0x3a715c1e,0x3c0b1c15,0x3bd466e3,0x3b9036c4,0x3b687626,0x3b646709,0x3b2cf1cd,0x3ae16028,0x39c5e7f1,0x39c45586,0xb8a06b70,0x35c98e84,0xb9435bd8,0x38e45f5a,0xb8c8c553,0x3a7d44d1,0x3b0703fd,0xbb157f44,0xbb321b67,0xbb818f1d,0xbb533966, +0xbb81b8a8,0xbb82695f,0xbb3a9200,0xba0fb209,0x3b49a828,0x3c0b58aa,0x3be1fe57,0x3b5093eb,0xba74f438,0x3954b988,0x3ad66c52,0x3baac657,0x3b3a3c6e,0x3baab131,0x3c1338c4,0x3c2a1faa,0x3a695864,0x3aea8dc9,0xba856041,0x3a3b15ba,0x3b04eaea,0xb84cf2d0,0xba68896f,0xb92dabc3,0xb8d7406a, +0xb626cacd,0x387ab9aa,0x385dbe4b,0x37ac6d99,0xb7ff5d14,0xb97c5e75,0x352667f3,0x3a413261,0xba19bd57,0xbaa56ccd,0x38b4715b,0x3b51c9d8,0x3b8e720b,0x3ba9d527,0x3ac78cd7,0xbaa61550,0xbb9e8c4e,0xbbcced93,0xbb53edd2,0x3b8370f1,0x3b3aa06b,0x3abf8016,0x38adfd15,0xbba12680,0xbbdfc46d, +0xbb83f2e9,0xbaea9dfb,0x399c1e99,0x3b50b743,0x39999512,0xba9e8a52,0xbad871c8,0xb9985d94,0x38cb35e5,0x39559108,0x37ce723d,0x3828f2e8,0xb7f0f197,0xb7b48c13,0x3698a128,0x381dffc9,0x390dc974,0xb82c1eee,0xb9b0a99a,0xb928ca3a,0xb7724488,0x3a28c542,0x3a1e10b4,0x39b0d7e6,0x3a320877, +0x3a4664a5,0x3ac4d943,0x3b36fa51,0x3b76322c,0x3b3f4abc,0xba06b1c3,0xb9372c02,0x3afc77b7,0x3bc75a12,0x3bc7a06c,0x3bdac8cf,0x3bd6042a,0x3a9e5fb8,0x39903054,0x3bde86be,0x39323256,0xbb08a563,0xbba73327,0xb839ea4c,0x38d3b2e2,0xb8b5fab4,0x37e74c5b,0xb6af94dc,0x37cca331,0x381dd5c7, +0x37cd34cb,0x37c830d1,0xb6125a98,0x39566ecb,0xb8039f6b,0x3a9c614c,0x3ab36645,0x3ad36bd1,0x3a4b6a93,0xb937758c,0xba121b17,0x38fe7596,0x3ad55ee3,0x3b9f636f,0x3bc85bf2,0x3b8931ee,0xbb21144f,0x395b7781,0x3b661abc,0x3c292388,0x3c043940,0x3bf3b474,0x3bb0d6ed,0xb8bea4d8,0xbabc670b, +0x3b5f3926,0xbb86420f,0xbc0c2025,0xbbf06a44,0xba81bd01,0xb95559e1,0x3901c05e,0xb8033e89,0x37de8a8a,0xb79518cd,0xb5ea2263,0xb854b802,0x382a753a,0xb8738ca2,0xb969d07c,0x3a3253a7,0x3adbf15c,0x3afbd0b9,0x3b2823b2,0x3b1928c8,0x3b17507b,0x3abff1cd,0x396fece4,0xba9315f2,0xbad7fc23, +0xbb154f28,0xbabdd3ee,0xba2cd8f4,0x3b2dea8f,0x3b9cf708,0x3bdb8506,0x3aed6c34,0xbb137c8e,0xbad0634e,0xbb074136,0x3bed0242,0x3bec87d3,0x3bebe8cd,0x3c30cebc,0x3b36d606,0x3acc6d25,0xb91d79d2,0x39149f69,0x380ae6f3,0x381c8ca3,0x38594361,0x386e99c4,0x38f1c482,0x3801ef41,0x39686211, +0x3a81588f,0x3adf44a9,0x3b448630,0x3b3a3289,0x3af64e9c,0x3ad262e8,0x3a374e47,0x3aa56703,0x3a9600c1,0x3a9c6619,0x3b00d52b,0x3a222ba3,0xb873fb5a,0xb9366b08,0xbb030cc0,0xbac99b6e,0xba5a085f,0x3ae12e3e,0x3b81c2be,0x3ba26f37,0x3b8f5d38,0x3b240168,0x3af556ed,0xba136c62,0xba8bc7e8, +0xba94d41c,0xba8339af,0xba17b6b7,0xb9b9bc8e,0x38bc162c,0x36e214d4,0x3604a523,0xb7e872a3,0xb8fd0ff3,0xb8c7567c,0x394e5e17,0x39d47c87,0x3a409662,0xb70810fe,0xba310452,0xba0cdf2e,0xb9d2b8f2,0xb94019f1,0xb989f805,0x39c55324,0x3a114abc,0x399e57d4,0xb7d52c52,0xb9199a0d,0xb9dc0e80, +0x3909ae7b,0x39f53843,0x3a1eaea7,0xb8bfc623,0xba0c38f4,0x3a2e6758,0x3ab37a7d,0xb8dc48f1,0xbb06950e,0xba630328,0xba3aff58,0xba08be83,0xba0b74cd,0xba395a6a,0xba355a95,0xb9b11f18,0xb93cb6c5,0xb7326bc9,0xb8f88adc,0x393b6a8b,0x39b7153d,0x3a50b6ac,0x3a5b843b,0x3a57809f,0x39cc71d2, +0x38fb82c9,0xba26753d,0xb87b50e4,0x390d58f6,0x3a006389,0x3a81720c,0x3abb8910,0x3af4115f,0x3b0295dc,0x3afe1433,0x3ac53696,0x3a962157,0x3a29b14c,0x39fde521,0x3502299d,0xb926df43,0xb9f365b0,0xba3571cc,0xba2e5f05,0xb97bd1a0,0xba5ddfa8,0xba0cfff0,0xba35ab2b,0xb9e9d703,0xb884a71a, +0x3990646c,0x3a2f5fa4,0x3a83bf9c,0x3ac334be,0x3ae5067b,0x3ae59a6b,0x3b087e57,0x3ab95ee2,0x3ace3d4f,0x3ab715c0,0x3a943f29,0x3a1f7840,0x3a4d16da,0x3a817b71,0x3a6f300b,0x3a888a70,0x3a958213,0x3aae5de1,0x3ac4eddb,0x3adada2a,0x3af8112b,0x3b16f97b,0x3b09feb8,0x3b04d7b2,0x3ae7c5d5, +0x3a9ad184,0x39b59287,0xba0ddad2,0xba09e2a3,0x3b1a4333,0x3b0613a1,0x3ade586d,0x3b1f2fe5,0x3b2570bd,0x3b1bd567,0x3b1e9514,0x3ae75330,0x3b0ace11,0x3af65363,0x3ae7d2b9,0x3afa1fc0,0x3b108a57,0x3b169382,0x3b143b77,0x3af24e4e,0x3aa2fb55,0x3ac76e38,0x3a1662bc,0x3a508e50,0x3a0cb058, +0x3a4a84d6,0x3a3aac18,0x3a46a57f,0x3a3a17f4,0x3a1b0fa7,0x3a818c35,0x3a8d223b,0x3aa7c347,0x3adcc48a,0x3afddbf2,0x3b245f7b,0x3b20c81a,0x3b2a677b,0x3b332faa,0x3b2ee570,0x3a7fb902,0x3a92706b,0x3a801548,0x397cf18f,0xb9bd46ff,0x3a6c0736,0x3a0b4f31,0xb8f9870a,0xb9072cfb,0xb5b668a5, +0x38b83ab1,0x3822a52f,0xb90a2ed5,0xb9157442,0x3a7f57be,0x3ac8f95e,0xb89bea68,0x3a43878b,0x3aa859cf,0x3aa557d5,0x3aa802d5,0x3aa8f380,0x3aa7069e,0x3aa79d58,0x3aa6b9d4,0x3aa2cee1,0x3ab03f08,0x3ab6835a,0x3ac39efb,0x3aca2ccc,0x3ac12821,0x3ac7966f,0x3ab0741a,0x3a9c4afa,0x3a8885cf, +0x3a783351,0x3af8a8ad,0xbaa9b1ed,0xba648b5c,0xbab595cd,0xba22036d,0x3a439645,0x3ab4038c,0xba3b2fd1,0x39e0e0c3,0x3ab304bc,0x3ad79afd,0x3adab0b7,0x3aa0ce51,0x3ab8501f,0x3aeac15c,0x3ac75892,0x39bda493,0xba24d2e7,0x3ae444a5,0x3a49bfcf,0xb9c67336,0xbab15352,0xba7baa4b,0xba87559d, +0xba805bee,0xba979086,0xba9e2a22,0xba9d010c,0xba9c470f,0xba90af7c,0xba564502,0xba8c5abb,0xba96b674,0xba9fba53,0xba851e5a,0xba81f0c7,0xba7c3ecf,0xba79f28c,0xba872b5c,0xba992ee7,0x3ac6f65f,0xba269d4b,0x3897e17c,0xb98ce38f,0xb96d51db,0xba28e36f,0xba14e307,0xb981db41,0xb9de34d5, +0xba0a3ea9,0xba83e2ac,0xb98b01e1,0x39b923bf,0xba8de5ef,0x39a46ecf,0xb9cfaa96,0x3a18aa6b,0xba8b2b31,0xba8f0bbb,0xba7f46cf,0xba5de82e,0xba9e7d17,0xbab1b115,0xbac1d709,0xbac487cb,0xbab2fe51,0xba4b7737,0xbaf9956e,0xbb02c0bc,0xbadcd2d8,0xba457784,0xb9e19c77,0xba154605,0xba4eeb89, +0xba6551d4,0xba1b1723,0x397ad944,0xba8d38f6,0xba2af32e,0xb94f4bd2,0x399856eb,0xbafa466a,0xb940c1af,0xba9a19c3,0xbad2ffdb,0xbb089d84,0xba7e7307,0xba70e27b,0xba958465,0xbac97f3f,0xb8fdc7e5,0xb989ff41,0xb85918b3,0xba1a343b,0xbaa112ad,0xba573389,0xba687188,0xbacf78d3,0xbb032c21, +0xbb07747a,0xbb018a98,0xbad98212,0xb86437d9,0xbafcaa06,0xbb0e3a4b,0xbaf75d49,0xba1ccf93,0xb9a2ac97,0xb9fce13b,0xba0c575b,0xba7840af,0xb95e966a,0x3a1afb3c,0xba366438,0xbabf6f46,0x37feadb8,0xb8b429be,0xbb0fde6f,0xba5f1652,0xba7e5296,0xba939eb3,0xba6be793,0xba83ae05,0xbaaa9a91, +0xbaccbd44,0xbb15b190,0xb9d527e7,0xba5f5580,0x391e007b,0x39665372,0xba9e6439,0xb9b9a0ad,0xb916399c,0xbacddc02,0xbb050ed5,0xbb0c51cf,0xbadaa488,0xbacc6a78,0x39636f7e,0xbb49654a,0xbb4701c1,0xbb105dac,0x39f36d79,0x3aac9c09,0x39db4f8e,0x3902de98,0xba0d6379,0xb9e8a24f,0x3806a379, +0xba892616,0xbb00bce2,0x38e59265,0xb96865b0,0xba5dfc51,0x397bde40,0xb8d14f7f,0x39a758c0,0x390cb8e3,0x3941f3b6,0xb9a685fa,0xba2ff0fa,0xbab4eadf,0xb9dcfdf2,0xbab4d161,0x3a22ecc0,0xb9210c4c,0xba27c58a,0xb9828ac0,0xb9d92c81,0xbb02e26e,0xbb4b0087,0xbb61cafa,0xbb6ca3c1,0xbaf4d9a2, +0x3a8f8a33,0xbb22eb6f,0xbb46ef9b,0xbafda67a,0x39b75037,0x3a15e167,0xb9bd018c,0xb9a8e53f,0x3b9d3b99,0x3b0d72ba,0x3b8c81d6,0x3b85e025,0x3b50dff3,0x3b23df08,0x3a63a149,0x3918b565,0x37be97b7,0xb87700f3,0xb80343ea,0xb927e55b,0x38c3938f,0xb93460f8,0x3a53255c,0x3accd5a7,0xbaa26a0a, +0xbb51813a,0xbb84243f,0xbb9f9e60,0xbbf26cf4,0xbbccc41e,0xbb97dfb5,0xba62339d,0x3b0aef19,0x3bfa5404,0x3b69443f,0xba5a3832,0xbbb70afa,0xbb8ff1c4,0xbb806abc,0xbaa7495c,0xbb1fce8e,0x39d9371a,0x3bb771c3,0x3bbf4bdc,0xbaa047cf,0x396d9f17,0x395b9871,0xbaaa9c4f,0x3b0d4d76,0xb9f68f4e, +0xb9979809,0xb868767c,0xb859415f,0x369688fc,0x37d21e72,0x37fb9d66,0x37f99579,0xb8a67503,0xb98b2999,0xba1d4b41,0x39d4b3de,0xba85f2b1,0xba042633,0xba024901,0xba056330,0x39f29fa2,0xba1cd630,0xbb01bfd0,0xbb64196b,0xbbb0e9b1,0xbbbec2a2,0xbb35a928,0x3b789bba,0x3ac714e5,0x3996732a, +0x38ef98e9,0xbbbbd0cd,0xbbeaaa7f,0xbb4db2ab,0xbb24ace9,0x3a5fea77,0x3b4ddb68,0xb7521e06,0xba8ae383,0xbad5400f,0xb9b821c9,0x390d9015,0x36c56f1a,0x36d6547a,0xb7d988dc,0xb772fb1a,0xb844f1c1,0xb7ec26f7,0x37427317,0x38b7e580,0x37accae4,0xb9379bb9,0xb9b6f250,0xb993b4d4,0xba83f6d5, +0xba74a957,0xba7a6732,0xba62f1d7,0xbb0c0701,0xbb06f291,0xba30efb0,0xb9fadb93,0xba24b2a1,0xbb4f8ec7,0xbb5337c7,0xbb2a27d3,0x3a1c310d,0x3a21ced4,0x3af9d233,0x3b02c278,0x3a4a96d7,0xba559733,0x3bb9b431,0x3aeb7aa5,0xbac9c222,0xbb8b27d0,0xb8284199,0x388a5a4b,0xb8b0506f,0xb58517ab, +0xb76a4921,0x372fb023,0x36a18178,0x37d1b77a,0xb7ffd834,0xb82427f1,0x38ab0e73,0xb984646d,0x3a48c18a,0x3ac00b0a,0x3a9af1d5,0xb9e970fc,0xbaa164a0,0xbac728b5,0xbb29b7c4,0xbb0290bf,0x3a8fe9ae,0x3a8526e2,0xb79bff37,0xbbc3f908,0xbb2081fb,0xba27fdf4,0x3b41386b,0xb9f3110d,0xbab6fb7e, +0xbb69d5c3,0xbb53d6ee,0xbbd8725a,0x3a1ab4b8,0xbb874000,0xbbf5e8d4,0xbbdb687b,0xbaafdd04,0xb8837f86,0x38940038,0xb85b27c1,0x36a8a17e,0xb7ba1e0a,0xb813d685,0xb88fc1ac,0xb7bfbccd,0xb86333d8,0xb95db5d7,0x3994e721,0x3a8d6eff,0x3aeea215,0x3acd342a,0x3a09cd00,0xb9900fae,0xbad2c79a, +0xbb04e8ab,0xbb282c51,0xbb260a47,0xbb35aa5f,0xbae787d6,0xba7f3df9,0x3b501ee7,0x3b8b6d15,0x3b755dfd,0xbba064db,0xbc2df8d8,0xbc3a7d06,0xbc0991a8,0x39b3ff8b,0x3bf6c4a6,0x3c3ca513,0x3c259596,0x3b508d0a,0x3ae5adcf,0xb84374ea,0x38809ebd,0xb72b64d0,0xb8141a97,0x37d41a18,0x379038a1, +0x38f2817e,0xb780aa48,0x38bd476e,0x3a31ff64,0x3aa0bb0e,0x3b36ed33,0x3b35eb92,0x3b0bce37,0x3ac19c85,0x3abda19c,0x3ab9f5fd,0x3a98b721,0x3a0aa372,0x382a322a,0xbace80a3,0xbb37071e,0xbb7bac91,0xbbb385c0,0xbbb21329,0xbbc115db,0xbb884e52,0xbb196f2e,0xbb059d66,0xbb0a126d,0xb9c4ccb0, +0x39acf006,0x39f41145,0xb99edf2c,0xba58874e,0xba0740b8,0xba0975f7,0xb8d6264a,0x37f9c8d8,0x3884676e,0xb907ceb8,0xb8a6dd06,0xb93bf9f2,0xb93e6524,0x385f032f,0x39856ac9,0x39fedabc,0xb89dbe5e,0xb9c46959,0xba21bbb1,0xba86159a,0xbab25bb8,0xbacc46a7,0xba9e16c2,0xba8770ef,0xbab45e8b, +0xbabd451b,0xbaa7e9f4,0xba7923b3,0xba5bf68c,0xbaade8ad,0xbb525a1a,0xbb59d4e6,0xbb6b66a4,0xbb10e104,0xbaba8104,0xbb242ee2,0xba93a2a9,0xba9945d0,0xba874a89,0xba5b7d0e,0xbac8b15e,0xba7215c1,0xba68f2ab,0xb9e498ac,0xb9bfaa95,0x37c9e55d,0xb929fbc1,0x392a45f2,0x3821f158,0x39cb410e, +0x3a20ca56,0x3a6ebe25,0x39c6ced3,0xb8e9c942,0xb9d2172e,0xba49d0a8,0xb9d527b9,0xb8f5eb88,0x399711a8,0x3a277764,0x3a8c7313,0x3a6d2c74,0x3a2dcd6e,0x38e8b051,0xba2e39c8,0xbad62c49,0xbb3884b1,0xbb15f0a0,0xbaf29f35,0xbb106979,0xbae36852,0xbb0df767,0xbb1436d4,0xba7e6022,0xbaad4aa6, +0xba42583d,0xb96febd5,0xb94b1843,0xb9b46b6d,0x39838ccc,0x39be3141,0x3a956365,0x3a04ffb5,0x3aaf1d55,0x3a9af83d,0x3ad1cf58,0x3a94c016,0x3a91b7b0,0x3a5548d6,0x3a66c3e1,0xb673c279,0x39d7cc74,0x3a1ba72b,0x3a4aca9a,0x3a8bffef,0x3ab5ee51,0x3ae2a3a6,0x3a9bed47,0x3a69fd34,0x3a34543c, +0x39433f8f,0xb8db7e3e,0xba2df559,0xba8c54c1,0xbaef6992,0xbb1e5831,0xbb0d7803,0x3a995b0e,0x3a6cdb25,0x3b19350e,0x3aba3b4d,0x3acaad56,0x3acd9869,0x3a9cfc8b,0x3af5d1fa,0x3ab7f80a,0x3af3c083,0x3b032339,0x3b155a9b,0x3b030683,0x3b20c530,0x3af5ce1a,0x3ad11041,0x3ae342ae,0x3a773498, +0x3a8dad15,0x3a307d9f,0x3a40ae32,0x3a32e185,0x3a269aac,0x3a1ae0fe,0x39e20f36,0x3987d384,0x39f4c6a1,0x39b0e9f1,0x398f6533,0x3977ca21,0x386e0820,0x38279ead,0x39a4b440,0x3a6b68d3,0x3a94d270,0x3a8aa4d4,0xb7c30e29,0xb931db7e,0x39911b1f,0x3a80134e,0x3ab3ec2e,0x397c56ed,0x3a5e355b, +0x3ac91c18,0x3ae8fe61,0x3ae77c84,0x3ae320d2,0x3af4fccf,0x3b089b78,0x3b0df8de,0x3a97217f,0x3a1dc9f3,0x3adf0355,0x3a982619,0x3a21271e,0x39ecd42f,0x39ff2468,0x3a0bb3c3,0x3a1450bf,0x3a2062d6,0x3a2d03f8,0x3a2dc376,0x3a24a5aa,0x3a06da6d,0x39ff778d,0x39ed92e1,0x39cd829b,0x39aee6a0, +0x394ec953,0x38866abe,0xb8a3b7c6,0xb8e5fb46,0x3a58d3c0,0x39d63a4f,0x3a013cb3,0x3a907b92,0xb9186df7,0xbaaf9030,0xbaca1d4a,0xb8450ee8,0xba8652d2,0xbaf38b90,0xbae36388,0xbae85613,0xbae2b776,0xbae2036d,0xbaf9c950,0xbac56c33,0xbaa6f299,0xb9e32025,0xbab81ea8,0xbaa9803f,0xb9e05515, +0x3a5308e5,0x3a0670b2,0x3a1a4dba,0x3a2c8662,0x3a0a2ac7,0x39f14737,0x39d33955,0x39d7b804,0x3a03ac1f,0x3a44a6f4,0x3a119598,0x39e830f2,0x39e3932f,0x3a0c8ef0,0x39fe2b74,0x39ae9c92,0x3a01cdd9,0x3a410189,0x3a6af5c1,0xbb04dc42,0xb98cb99e,0xbab02ed6,0xb9832bd0,0xb9f2477f,0xba9dd695, +0xb84cbc44,0xba3b0cef,0xba8b9d72,0xba8eca93,0xba41195a,0xba6ae1c0,0xbb0f3f71,0xba71b5ab,0xba2b188d,0xb9e762ff,0xba900809,0x39ec2045,0x3a5d061c,0x3a6cc514,0x3aa6819c,0x3a4771a9,0x3a20f270,0x3a265f6e,0x3a2e3386,0x3a5b6eac,0x3ab2c3ad,0x3a05144a,0x39c69385,0x3a4fbeb5,0x3aac8c50, +0x3ab3149e,0x3a337f80,0x3a28b2bd,0x3a97df8a,0x3a936595,0xba54eece,0x38f3958d,0xbab1b9fc,0xb997e95f,0xba2e947b,0xba6d0477,0xba516f31,0xb95aafe7,0xbb18efd6,0xba40139c,0xbacda86a,0xba1bd46b,0xbacf9db9,0xbaa93a66,0x382c8e60,0xba58bac5,0xba35fe43,0x3963327e,0x3ab7c93f,0x3a96ceed, +0x3aef8c4f,0x3a55492c,0x39f22156,0x39859eeb,0x39daa18d,0x3a44c53e,0x3b15cefb,0x3a25dc43,0x39f50f72,0x3a57800b,0x3aba352a,0x3a9b4984,0x396514f6,0x3a546b2c,0x3aa45178,0x3aaa94e8,0xbab9b24b,0xba8f55ae,0xbac62b31,0xb925d685,0xb997dd7d,0xbabe3a8e,0xba3b2658,0xba0cd072,0xba4cbf4a, +0xb9febca7,0xba950fe0,0xba0dfe44,0xbb00f517,0xbb09ca81,0xb9051c91,0xba57e347,0xba36f462,0x3887fb89,0x3ad4a7c5,0x3ad891c4,0x3b36ea30,0x3a922a05,0x3a5ab5e2,0x39f32c71,0x3a95b213,0x3aa76b80,0x3b4865ba,0x39bb0482,0x39ff7032,0x3acf518c,0x3b3984e1,0x3b39e46f,0x3a73ecd4,0x3a6f592f, +0x3ab724aa,0x3acc9e0f,0xba41f10f,0xba0a3162,0xbac79d28,0x38f3469b,0xb8fa70cb,0xb9cb6c98,0x39b35e08,0x36303333,0x3a0c7326,0x39592336,0x3991a1c8,0xb8bf0c75,0xb94b0ec0,0xba944e66,0xba065851,0xb8793ae1,0xbaabd3a9,0x3a348f3f,0x3b08c567,0x3b0deba9,0x3b4a42ad,0x3a7ea054,0xb8a02c6e, +0xba2afd1a,0xba077383,0x3aa99834,0x3b81c86b,0x3a765a2d,0x39927169,0x3aa04e22,0x3b128c81,0x3aae091d,0xb9a6e7ee,0x3a09688a,0x3bfb640d,0x3baada9e,0x3b288d4f,0x3b037c37,0x3b1909b1,0x3ab820f6,0x3a0855aa,0xb8afa609,0xb67d3ad6,0xb893770a,0xb8ffe6f3,0xb939d145,0x380deb69,0xb9055cb6, +0x39cc841f,0x3ae1f0aa,0xba99e156,0xbae43340,0xbb7e4374,0xbb4cfb93,0xbb5e311c,0xbb3ea74e,0xb9bb7fc8,0x3ae83acb,0x3ba2eed3,0x3c268013,0x3bef4207,0x3b5172f4,0xba68e62a,0x399055ee,0x3aa4c0af,0x3b786941,0x3af94c81,0x3b974244,0x3c11bd96,0x3c20de4f,0x3b12fb82,0x3ae9785d,0xbb05bb48, +0x3a2cf00a,0x3a14300d,0x3938030f,0xb99f108d,0x36413593,0x37c03a5e,0x38443f21,0x389dc798,0x38a1daae,0x37d5081a,0x3806323d,0xb941871a,0xb993d492,0x39b13331,0xba2c67c1,0xbaedc873,0xbaa161c8,0x3ae5cfba,0x3b19da0f,0x3b5193e2,0x39bacb67,0xbb036607,0xbbb25f9b,0xbbb6a1c3,0xbafe5b89, +0x3bad2196,0x3b231674,0x39e2f9e3,0xba3ce03a,0xbbc42a20,0xbbe5fad8,0xbb256010,0xba8e28a4,0x3b287439,0x3ba1cd63,0x3ae35e77,0xb9c8597d,0xbab2463c,0xb91d2be0,0x38375dac,0x38348f29,0xb79d7c77,0x373d75bc,0xb806cf58,0xb801fed9,0xb5fccd91,0x37af858f,0x386b0b8d,0xb7ced511,0xb94f201b, +0xb902cbaf,0xb842dc64,0x3a18fd2f,0x3a3354e6,0x396a15d1,0x3a411505,0x3a28772f,0x3ad30ec6,0x3b516292,0x3b58e33c,0x3b22d44f,0xba00902a,0x3a1236a6,0x3b0ee6f9,0x3b83e662,0x3b842de7,0x3b9c3b76,0x3b3bca91,0x3b06cb2f,0xba1b6d92,0x3b8feacd,0x3adbaab7,0xba2ce3d0,0xbb6f43ba,0xb8c5c667, +0x388eb570,0xb878eca0,0x38285508,0xb6755cb6,0x372c7027,0x37ee0d00,0x36145d00,0x37ea8dad,0xb84af3fb,0x3920af79,0xb97050f7,0x3a8943db,0x3aa10fcd,0x3ac47a19,0x3a908502,0xb8fad5ad,0xb9cb2b13,0xb6c2910f,0x3ab12b1b,0x3ba700d9,0x3b90d73a,0x3b2b3bd2,0xbb742060,0x3aac928f,0x3b8e0321, +0x3bed981d,0x3b8a7ff3,0x3b403af3,0xba46eae0,0xbafeb3d1,0xbbcc5fb7,0xbb7201c1,0xbb753e70,0xbbc3a20a,0xbbc49051,0xba4559be,0xb7692351,0x38201fe8,0x36c0abbd,0x37ea8114,0x33f0c6a5,0x3763e67e,0xb775634e,0x37e8288d,0xb640c5df,0xb994f9f5,0xb8ae65b3,0x3a86d7ea,0x3ab2d6c0,0x3b0a3cd2, +0x3ad8afef,0x3aabec28,0x39ece331,0xba4301bc,0xbb0d301a,0xbb2ede70,0xbb372651,0xbacaa148,0xbaa8b68e,0x3b64074f,0x3b8f5c63,0x3b82aa96,0xbb55925d,0xbbf9cc20,0xbbb50380,0xbbcf4d89,0x3b86ae07,0x3bfadb6d,0x3c078b4d,0x3c2250d8,0x3b0af482,0x3ac93963,0xb98728b8,0x389b029d,0xb8ddca15, +0xb68a94e8,0xb8078ed0,0xb70ebece,0x36bc4394,0x38525d11,0xb8537f9f,0x3a132fea,0x3ab079aa,0x3b2e298d,0x3b398324,0x3b145c96,0x3b150bc9,0x3ab9603e,0x3ae353e1,0x3ab2b1b3,0x3a8e22be,0x3ab067dc,0xb9f6fa86,0xbac289ae,0xbb034801,0xbb4b4dc7,0xbb1dd687,0xbae6555e,0xb9affd92,0x3a2d3f3f, +0x3a809c25,0xb93aecac,0x3abc3e9d,0x3a91e822,0xb9d31132,0xb9abc730,0xba536fde,0xba0c9c3a,0xb98d1bc7,0xb89694db,0x393d156f,0x37ad1417,0x39065b6e,0x382fe9ab,0x385188c5,0xb89c3a4a,0x360a8820,0x3917e09e,0x3a0a2fb9,0x39a0ab0b,0xb9d0bac1,0xb892e12c,0xb8acf21d,0xb9728737,0xb9f42833, +0xba2297ea,0xba4b9571,0xbaa7af3e,0xba9612fb,0xba595ad3,0xba31f450,0xb93e12bc,0x382705b4,0xb88cc078,0xb9bad95d,0xba4e824a,0x39a43ed2,0x3a0d93f8,0xb7b1aa58,0xbb002177,0xbaa3febb,0xbaa7e163,0xbaba2702,0xba7a0562,0xba93e184,0xba459b9b,0xba0efa71,0xb9882ae6,0xb91ff718,0xb947eebf, +0xb924621a,0xb71c9a7b,0x399f1b17,0x3a046d1a,0x3a197253,0x39b362e5,0x39874572,0xba0bb057,0x39c3a11a,0x39abfc90,0x3a30188f,0x3a6ec17e,0x3aa24a5c,0x3ad4d586,0x3aca54bd,0x3aaba877,0x3a37dc7e,0x39b94415,0xb8bd0f48,0xb9b7df21,0xb952b9d4,0xb8b17302,0xb9d3c610,0xba25a5a2,0xbabeec6a, +0xbab5ca18,0xbb0ef46d,0xbac7020e,0xbadf5941,0xbaad11ca,0xba51bce3,0xb9980370,0xb8448d11,0x39818079,0x39c0f322,0x3a54ac17,0x3a7e6106,0x3a9f5feb,0x3a79f087,0x3aa27a07,0x3aa84abf,0x3a8f0ad9,0x39aab131,0x3a713cc4,0x3ab6995e,0x3a9c6bd7,0x3aba8459,0x3ad162c7,0x3af9a367,0x3b0bff97, +0x3aeef231,0x3ade1dd6,0x3ad716ac,0x3aabd8a6,0x3a871669,0x3a1a7f29,0xb6b48832,0xba55fadd,0xbaafa3e6,0xbab911ff,0x3ac664e4,0x3aaa634c,0x3a43c6bc,0x3adc89d0,0x3adf7c3e,0x3ac73c84,0x3ad84e28,0x3a9cd929,0x3ad8c93a,0x3abb0b70,0x3ac322af,0x3ad4087d,0x3b014878,0x3b0a17ee,0x3b01a939, +0x3ad9f2f7,0x3a9fa811,0x3add91dd,0x3a4c9f55,0x3ad31e29,0x3aa92e72,0x3ac1f0da,0x3ab4ad61,0x3ab1a32f,0x3a9ca676,0x3a828340,0x3abdd360,0x3abc5516,0x3ac7bcd1,0x3ade0a4c,0x3add2b5f,0x3afea66d,0x3afb3855,0x3b0b168e,0x3b05f600,0x3aeda908,0x3a71b5b7,0x3a7f90cc,0x39d9d15e,0xb967efa7, +0xb9a44acb,0x3a114c0c,0x39154aa9,0xb923eea0,0xb91783a6,0x37a887cb,0x391ec18b,0x3907d8d7,0x37e2736a,0x38441c39,0x3a12b934,0x3aa76458,0x39323d06,0x39fd5ee0,0x3a924bc4,0x3ad5c469,0x3acb43cb,0x3ad038d0,0x3ad1c803,0x3ad806bf,0x3adba542,0x3ad745b8,0x3ad8f193,0x3acd2562,0x3ad0380f, +0x3acdcd54,0x3ac1a190,0x3abe08be,0x3aa385ad,0x3a9132d7,0x3a7b6974,0x3a68bf13,0x3b0f1d4e,0xb9ff85b9,0xb9bfb1cf,0xba502c12,0x39d1f608,0x3a8f9286,0x3a183583,0x392e83ea,0x3a5f5721,0x3a5760b4,0x3a6bc375,0x3a4bc6d4,0x39e6dce9,0x3a00a180,0x3a2b29ff,0x3a343968,0x3a4993d5,0x398319e4, +0x3a3fe5df,0x3a7aa8ed,0x39cba343,0xba594aca,0xb9ecd50b,0xb9eb18e6,0xb9da3a46,0xba24e4f4,0xba321de4,0xba238a56,0xba1848f6,0xb9f47959,0xb982f653,0xb9de957e,0xba01d42c,0xba066d62,0xb9b20c62,0xb9bbfd98,0xb9fd8ae0,0xb9cfb9b4,0xb9ebcde5,0xb8a49f29,0x3ac4317f,0xb98512ac,0x3937e743, +0x38e229b5,0x39a51fa2,0xb972fb9d,0xb8db5744,0x39c230f7,0x3705cf64,0xb7b40ec2,0xba022b88,0x39096676,0xb82a55b7,0xba1e60cc,0x3a12904c,0xb8a08f3c,0x3a4de990,0xb96a3b5b,0xb9fd199e,0xb964f97e,0xb8f0d658,0xba175b8c,0xba2d6357,0xba0ea7ef,0xb9f509a1,0xb9c0eec1,0xb8887a19,0xba48460b, +0xba3f0c9a,0xb9ad1095,0x3a01444e,0x3a194606,0xb8e8d84e,0xb8cb004c,0xb9ca0c21,0x395a2bd5,0x3a70259f,0xb98f1377,0xb90d7485,0x3930dbeb,0x3a098cc5,0xba6b0ebc,0x38028a92,0xba48dfb6,0xba440fd3,0xbac8d97c,0xba915374,0xb800d9e8,0xba6eb5c3,0xba97a677,0x39e35608,0xb9031caf,0x399aa438, +0xb9b0d14f,0xba03dbe3,0xb84a20a0,0xb7a591a2,0xba860fda,0xbabab6a4,0xba8c4172,0xba476ff3,0xb9bc38bb,0x3a47ae5a,0xba124d9f,0xba184fe0,0xb8ec51bb,0x3a77dc74,0x3a565e87,0xb988760d,0x391628f5,0xb9f2b153,0x3a2c058f,0x3aa14b04,0xb94d2ddc,0xba658449,0x38c44cf8,0xb8129a10,0xba73fb6e, +0xb991445f,0xb8df17eb,0xb9cdcb42,0xb983826d,0xb9f50c2a,0xba0e6ae3,0xbaa7a1e5,0xbb0501dc,0xb782f11c,0xba33faa9,0x39a1c51f,0x3985ed2e,0xb9f39488,0x39d0f753,0x3a6cc1e7,0xba80e683,0xba9d1326,0xba12ce26,0x370dfee7,0x38486a5a,0x3a6d1ecc,0xba88e9ec,0xba171ff0,0x39fb0dbf,0x3b3496a2, +0x3b358e22,0x39a596f7,0x3a3e6d73,0xb98c6b9d,0x38f00edd,0x3a5805a5,0xb9c9f8e1,0xba93e735,0x39945ed8,0xb88db7f8,0xb821e277,0x39203b1f,0x38b6a676,0x392d87d6,0x3930a872,0x38ba2402,0x384a26ff,0xb92fab50,0xba8606d0,0xb8d5e44f,0xbab26a9c,0x39f330fc,0xb9759081,0xb8ee1158,0x3a299b50, +0x3a2f7c05,0xbad16515,0xbb24e949,0xbb153062,0xbae6179b,0x38392f97,0x3af6fac4,0xb9fea602,0xb9faf28c,0x3a2facc7,0x3b30a402,0x3af0f41a,0xba13ed72,0x3929a99f,0x3bb749ca,0x3b374b64,0x3b9dd471,0x3b61d67f,0x3b170ddd,0x3aa840ef,0x397d0e03,0xb6f69e4f,0x36174086,0xb8d02bd3,0xb80cbd6c, +0xb8fe6c8e,0x378225ec,0xb90342df,0x39984958,0x3a957b38,0x396d9aad,0xbae589c8,0xbb214888,0xbb3d7bfc,0xbba6741c,0xbb8ae0ee,0xbb2885aa,0x3ae8b043,0x3b8afa28,0x3c0ba94b,0x3b8e9116,0x3801ad08,0xbb684360,0xbb205b57,0xbac5ee1d,0x3ae6a0a8,0x3992797c,0x3b3277e1,0x3bebe199,0x3beafd35, +0xbaa36efd,0x3a8d8b7a,0x3acaeaae,0xb9fcdd69,0x3ad5c0f0,0x38f2aac7,0xb8d1976c,0x381876ec,0xb6ddcc60,0x38554916,0x37f28c9e,0x3801b042,0x383eb5d3,0xb812ca40,0xb84d359f,0xb9d8c6f9,0x39d72fc5,0xba2e3594,0xba3d0fe3,0xba4105d2,0x39103ac3,0x3ac11ced,0x3aa23b5e,0xba81f5bf,0xbb37816a, +0xbbaef1fc,0xbb916dda,0xba8a72a6,0x3bb15abd,0x3afc607c,0x39455ae1,0xba3407b2,0xbbb1c06c,0xbbd37874,0xbb20139c,0xbb011a5b,0x3af394d3,0x3ba47b0a,0x3af2cffd,0xb8eedd8d,0xba696330,0xb869c3d6,0x388fd8f3,0x379acd8c,0x353887f8,0xb7aab3c9,0xb73baba5,0xb82600d7,0xb70095f8,0xb7ef686a, +0x3905c7e2,0x38fee53f,0x39684c1f,0x3959e1ab,0x3a21a64a,0xb938f918,0xb99cad9d,0xb926282a,0x3821c5ef,0xba05c4cc,0xb86081b1,0x3afa27ff,0x3a398964,0x38aca79e,0xbb3bd966,0xbae3c2d1,0x384b6d8c,0x3b3efeb6,0x3b7f915a,0x3b9a0263,0x3a800506,0x3ad388e6,0xba6bec5c,0x3b09b1f5,0x3b2825d5, +0xb98fcf08,0xbb3f1c38,0x397ac6d8,0x37aab3e6,0xb8281bbb,0xb53d99be,0xb739b40a,0xb57aa815,0x364c7bc4,0x36b7d6c8,0xb6cb6c21,0xb88947ad,0x39128a1c,0x381b5763,0x3a2657d7,0x3aea38e5,0x3af52e6e,0xb960a51e,0xba35ece3,0xba8da51f,0xba943e3d,0xb7f56c74,0x3b81bb84,0x3b06c61c,0x3a3b792b, +0xbbb255cd,0x39aa46d9,0x3b359ec5,0x3b8d9782,0x3b2c1198,0x3af55e58,0xbadc3699,0xbb0b23f3,0xbbe14c06,0xbbe27d0f,0xbb6be02f,0xbb99cf83,0xbb953344,0xba2ca972,0x38aaf66b,0x386385b9,0x375758ad,0x371c87e9,0x37a22821,0xb707434b,0x34b4b099,0xb676e17c,0x38322e47,0xb898e646,0xb925e3a2, +0x3a234322,0x3abf7ba4,0x3a70adfa,0x39d96aaf,0x362aa48a,0xba7bc31d,0xbac09e91,0xbb28d3e2,0xbb4a470c,0xbb29d1b2,0xba68bcd3,0x393b6551,0x3ba0836d,0x3ba3b8f9,0x3a9d3b12,0xbb90751f,0xbc03e93f,0xbbbfc0e0,0xbbb3615e,0x3b43e40e,0x3c21c8bb,0x3c2e86bf,0x3c165570,0x3b163644,0x3ace9ec4, +0xb8ba7c8a,0x37878606,0xb81b4b79,0xb7f4d320,0xb7a36aaf,0xb7cecfc5,0xb5db73b3,0x3766965f,0xb88166c6,0x39b08c67,0x3a742f19,0x3b3e4233,0x3b679e02,0x3b45f07c,0x3b0e315e,0x3aef8995,0x3abe1c9c,0x3a9e8887,0x3a6e79e9,0x3a9d1add,0xb9ffbb24,0xbacbc75b,0xbb0035e4,0xbb6584b6,0xbb43290d, +0xbb188f9a,0xba5aff8b,0xb7a4f756,0xb9f16674,0xba6c80ff,0x3aaa09fd,0x3acd26b9,0x3a9a0135,0x3a5c5c9a,0x38e65124,0x39411841,0xb7940bae,0x3960a42b,0x38cb4ee3,0x3936ece9,0xb6b1566a,0x38b2c63f,0xb71761d1,0x3774e776,0x3863563b,0x39b5402d,0x3a396df0,0x39d7a1e3,0x38de7dcf,0xb9bf52be, +0xba118362,0xba5bbeef,0xbaa04f38,0xba944c78,0xbaa5e27d,0xbaf05f51,0xbae5f115,0xbacfa634,0xbaafe9cb,0xba855f9b,0xba82c6d3,0xbad8ea4c,0xbae73f3e,0xbad9159e,0xb8ee71b6,0x39f99628,0xba72da0a,0xb9cf4e2a,0xb9550078,0xba1fb58e,0xba3825ba,0xba9f2ed4,0xba4c1b2a,0xba1e6d2f,0xb97c7b21, +0xb9412884,0xb885c0a9,0xb920e25b,0x378b4f4b,0xb9375059,0x393a0751,0x39d008c1,0x3a776209,0x3a3bc00c,0x39dc3094,0x39879e54,0xb971033b,0xb74b7405,0x38e87b76,0x39cfa6fd,0x3a240fce,0x3a6c6d9c,0x3a3b8548,0x39cde3a9,0xb98c9d39,0xba448ae8,0xbaa18486,0xbadc1715,0xba7bd86d,0xba116411, +0xba72e37b,0xba341148,0xbb0cd8de,0xbb118777,0xbac0e882,0xbac8c60e,0xba8fce4d,0xba2f539a,0xb9fa48b1,0xba0830e9,0xb94489a1,0xb8caba17,0x3a0fef57,0x3951bcd4,0x3a360eaa,0x3a56e390,0x3a9d6144,0x3a89dc8f,0x3a991b05,0x3a887a95,0x3a9d308a,0x3a459da0,0x3a451eb8,0x3a7c0a8f,0x3a7ca964, +0x3aa5af0d,0x3ac88c74,0x3af2dc34,0x3aa6fe86,0x3a89ae99,0x3a74d1ec,0x3a18ca18,0x39927bcc,0xb99743e7,0xba6542e1,0xbac6b87b,0xbaf36715,0xbaeed2d3,0x3a834e2b,0x3a381c7c,0x3ae0f077,0x3a9ade8e,0x3ac41a6e,0x3ab79cc8,0x3aa01b57,0x3ac8a91e,0x3abafb76,0x3b001368,0x3b0c1458,0x3b20e36f, +0x3b198d5b,0x3b301401,0x3b23823c,0x3b162f7e,0x3b1617ed,0x3aeb027a,0x3aeffbef,0x3aa5b6b0,0x3aa76175,0x3ab1679f,0x3aacb45c,0x3aaaebb6,0x3a959355,0x3a7ee80e,0x3a987ff2,0x3a7f5519,0x3a6410dc,0x3a5e5bb4,0x3a3ffc06,0x3a72348b,0x3a86da5a,0x3ab2214d,0x3aa3063d,0x3a84b437,0x39ebb09a, +0x399a393b,0x3a68f63c,0x3aa2216f,0x3a8cecc0,0x3a7bb112,0x3ab6531a,0x3abf8bc8,0x3ad30f42,0x3acc8122,0x3ac6b600,0x3ad3b575,0x3ae6c6e1,0x3af174b9,0x3ae4a4e9,0x3ab69293,0x3ac9ccf3,0x3ae46812,0x3abed52a,0x3a8791cd,0x3a9352b3,0x3a9763ac,0x3a99cbee,0x3a9fba50,0x3aa5a309,0x3aa54e50, +0x3aa398d2,0x3a97072f,0x3a98b074,0x3a95f834,0x3a876cfa,0x3a76a227,0x3a3fb3da,0x3a226dcd,0x3a0176c4,0x39e928a4,0x3afed5a5,0xba64c7a8,0xb9cc7d89,0xb90b4faf,0xba99b0f6,0xbaa5d73d,0xb9e8c9a2,0xba879d0e,0xba981a9c,0xba48f169,0xba22191b,0xba10533e,0xba113ce4,0xba1a53f6,0xba0c22ba, +0xb9aaf90b,0xbab5392e,0xbaabc1ea,0xb8ed2743,0xba9648d0,0xba9a12c6,0xb9b22d30,0xb9f69e90,0xba03757f,0xb9e86288,0xba29f71a,0xba32624e,0xba1ee5c5,0xba0fe497,0xb9ec933a,0xb992950c,0xb9f7b0a4,0xba0f0962,0xba116690,0xba01e7f9,0xba08695b,0xba1253c6,0xb9e395f0,0xb940d3c9,0xba09d944, +0xbaaa39c5,0xba4ed628,0xba95917a,0xba554b23,0xba7f691f,0xba7890c5,0xb9c3c06d,0xba7dbe38,0xba95d8a0,0xbac61953,0xbaa940e8,0xba628e44,0xbacbbf61,0xbad0030d,0xba4d92b3,0xba779563,0xba9f8664,0xba82bd8c,0xb9ed843b,0xba0e1682,0xb9cd8898,0xba728edf,0xba843622,0xba72741a,0xba2186f7, +0xba076279,0xb9a78ac6,0xba805165,0xba7bb744,0xba0f328d,0xb966434c,0xb902a351,0xb9ee09b8,0xb9d1d820,0x38f8b5cb,0xb92bfcf3,0xba92cfd8,0xba57fd77,0xbab9c904,0xba3faaee,0xba3a4904,0xba59d1c9,0xba4f05a4,0xba2be020,0xbae3cdd7,0xbacd294b,0xbad2226a,0xba4d8376,0xbade647d,0xbae643c5, +0xb9e5678c,0xba89ad96,0xba9cc156,0xba6ee87d,0xb9bfbf12,0xba3b2457,0xb9e9baca,0xbad113fd,0xbae4fed0,0xbab8ab87,0xba631df0,0xb9ef5022,0x3997042c,0xba7a8ec2,0xba952d5a,0xba1daf24,0xb9bd28ac,0xb9c76025,0xba374778,0xb95fae7d,0x3a071f86,0x3981c145,0xbaad1ecf,0xbab1d27f,0xbab61856, +0xb9a64961,0xb96eeaab,0xba54f304,0xb932fed5,0xb8a5e045,0xb924077d,0x3785bb22,0xba30b75d,0xb95c58d6,0xbadb0c97,0xbb0b88a6,0xb9c73e4f,0xbaa70f48,0xbaa08f13,0xba840bb7,0xb9b07589,0xb9badd54,0x3897350c,0xbb09addc,0xbb1b3a41,0xbad60fd3,0xb9f0d22b,0xb9a9948a,0x392453a6,0xbace887f, +0xbabdbc63,0xb8c4f893,0x3a0ca4c9,0x3a6221f7,0xb92902e4,0x386d3728,0x3a0047e6,0x39521a10,0xba84e5d7,0xba524e0e,0xbaaf8696,0xb90519b5,0xb88d8f41,0x38dd1b15,0x38de0c87,0x3824a695,0x38c615ec,0x38bdc785,0x3935af3e,0x3889e77c,0x390c4437,0xba748a24,0xb9e6e7f6,0xba151a9a,0xbabfcbef, +0xba623b22,0xb914e93b,0xba23bf3e,0xba02ab9a,0xbb3b6774,0xbb62e25a,0xbb356dc3,0xbaddeb09,0x377ef84c,0x3aa81ec5,0xbaa2b6e7,0xbadb7a4e,0xb9ba37fb,0xb939cab4,0xba1d72e8,0xba80dd00,0xb99be0f6,0x3ba87e8b,0x3b1aab78,0x3aaa45ac,0x3a9456c7,0x3a8e7842,0x3a17a734,0xb90bb9b0,0xb8516914, +0xb8ab6c95,0xb806d0a3,0xb7a3a1e6,0xb8a77801,0xb802f258,0xb89aed28,0xb80837d4,0x3a561b45,0xb7eb0523,0xba96d4c3,0xbb5e3c16,0xbb5ce0be,0xbb846a94,0xbb3e8fdf,0x39c38688,0x3b66e0f5,0x3bc3274a,0x3c29a101,0x3bcf57d7,0x3b0be7ef,0xbac2efd9,0xba74ca60,0xba1dc836,0x3a90a54e,0x387a0a15, +0x3b2db676,0x3be1fdfe,0x3be32a3d,0x3aaf64e4,0x3a13f036,0xbad5b426,0x386092d9,0x3978f4c3,0xb802afdb,0xb8e24626,0x3816aab9,0x36f1896f,0x37fa91ee,0x35a83f08,0x38224443,0x380011c3,0x37cd6b46,0xb7a5f28a,0xb9b77578,0xb77b6b7a,0xba094681,0xbab18888,0xbaf2fd9d,0xb938622b,0x37895536, +0x38615fd2,0xbada0286,0xbb5dac70,0xbbc26ccd,0xbb951d35,0xba3fce33,0x3bba6b4b,0x3ad9e57e,0xba40aa71,0xbafae3cf,0xbbd9f2ff,0xbbe07a42,0xbace09b8,0xbaaa5dfb,0x3b543920,0x3baf7d5a,0x3b114fde,0xb886af10,0xbaa6f018,0x38d560b9,0xb8a97c07,0x37c7fb22,0xb7fc07cb,0x36fb34b7,0xb707e9ea, +0xb77fcd5e,0xb7244b65,0xb6952ac7,0xb7d57a2c,0x36e281f0,0xb890f181,0xb8cf8686,0xb8d38bcd,0xb844d538,0x393cc302,0xb9557750,0x383acdf0,0xb9af13cc,0x39c93eb9,0x3af5d5cd,0x3a67b775,0x39907f51,0xbb07a9b4,0xb9b66b5e,0x3a40db3d,0x3a7b6533,0x3ac8e343,0x3b18cbb0,0xba5f4311,0x3aed453c, +0xba571135,0x3a672d38,0x3b165e14,0x394923d0,0xbb20eec5,0x39ac0c08,0xb8c1d4c1,0xb72d95a0,0xb710d024,0x360ec698,0xb6cbd1c0,0x3750e85e,0xb753e9f1,0x37e623d2,0xb84f7437,0x3792661f,0xb98a112d,0x39fcd106,0x3a659a92,0x3a81d42a,0x39fac54e,0xba1d9cea,0xba752417,0xba70bae0,0xb5a5c8b6, +0x3b69f213,0x3a722456,0xb9bce61e,0xbbb56b67,0x3a639615,0x3b59be58,0x3b1fdc50,0x399599a3,0xba8fc342,0xbbb93f2b,0xbb36d73d,0xbc093993,0xbc2efcce,0xbb8b5f74,0xbb4d303c,0xbb792f44,0xb991d754,0xb4e0a1ac,0x383d5a88,0x372cc5ef,0x37b37839,0xb71d6542,0x36f5f8b8,0xb5b79a18,0x36bf3deb, +0xb76ec4e1,0xb8513db0,0xb9e4ef90,0x396c71ab,0x3a33f26f,0x3a72de95,0x393da68f,0xba062e60,0xbaba5426,0xbb190e78,0xbb6309d5,0xbb74f9cb,0xbb5bdbf1,0xbaced664,0xba5c0de7,0x3b8b3422,0x3b6ce16f,0xb9a964d4,0xbbe49eee,0xbc2c136e,0xbc057df2,0xbbfc1e52,0x39c130bd,0x3bf99c90,0x3c0baf05, +0x3bec4b5e,0x3ad9e06d,0x3a911525,0xb9c92ded,0xb68a4790,0xb9149b09,0xb7d38625,0xb7cf889c,0xb721bd2c,0xb80e5ca7,0x37682df4,0xb8a4b9bc,0x38e3817f,0x3a4669a5,0x3b08ce83,0x3b2dae44,0x3b262adb,0x3b19f3a0,0x3af3c28d,0x3adc367f,0x3a8fc8f3,0x3a02c8c1,0x3938ea10,0xbae0a286,0xbb47411b, +0xbb84e6f1,0xbb97f6a2,0xbb7434d7,0xbb489e35,0xbb3b3076,0xbb405718,0xbb4e6b7b,0xbb8c16e9,0x39f6847f,0x39e16640,0x3917f5ed,0x3a0741ac,0xb96dda64,0x38ee2464,0x36c090be,0x39009acf,0x38abd056,0x384aaa09,0x372bde1e,0x37a68031,0x37d1872c,0x37165080,0xb87ed192,0x3876de36,0x39cfdc37, +0x3a03b571,0x391f7691,0x38ab4b27,0xb94f8499,0xba3b8822,0xba9380a6,0xbaea98b3,0xbb0e0098,0xbb377801,0xbb16a101,0xbae5f3f1,0xba9ad966,0xba84f232,0xba8eabef,0xbadfc7a3,0xbab0378f,0xbaaeff43,0xb8e32480,0xb8a7408c,0xb9979916,0xba856f88,0xba87510b,0xbaa14fac,0xbace3cd1,0xba981580, +0xba87a6dc,0xba0cf9ea,0xb9a24d29,0xb90b7add,0xb8390b41,0xb899aaa6,0xb8d47719,0xb90b2582,0xb8248858,0x395e30f1,0x39e09eff,0x39b1bb60,0x39a4af9e,0xb8f9825d,0x39959c39,0x3916a163,0x39a0e30d,0x39a68298,0x39eee0df,0x3a3235dc,0x39dbf276,0x3825c152,0xba2b1f23,0xba832988,0xbaaaa3b4, +0xbadea211,0xba5268f0,0xb9a1285b,0xb9f9f688,0xba0e8027,0xbb064cf2,0xbb18905f,0xbb262957,0xbb03502a,0xbaf4cacd,0xbabc2bf9,0xba893c43,0xba44e32e,0xba21f732,0xb9d6b3d1,0xb9a47ea6,0xb95b2b8a,0x397e3907,0x398f0f43,0x3a2485ba,0x3a33fb8b,0x3a6765bb,0x3a61901d,0x39d4b78f,0x3a4a30ac, +0x3aa76170,0x3a942a45,0x3aad6b72,0x3ac8cef3,0x3af01642,0x3b083576,0x3ab5a580,0x3a8437f4,0x3a2018fa,0x398b54af,0xb8b42346,0xba1b5e2c,0xba8e346b,0xbae41a8a,0xbaf500e8,0xbb01aeb0,0x3a1d674f,0x39d05e9a,0x3a09ec8c,0x3a4abd8c,0x3a429eb0,0x3a2a2ae1,0x3a238267,0x3a6231db,0x3a81492f, +0x3a8d7530,0x3aa57790,0x3abc096c,0x3acda48e,0x3aede5a5,0x3aca8364,0x3ac0829d,0x3ac850bf,0x3ad549b6,0x3ab0478f,0x3b016118,0x3aec30b8,0x3af8b82d,0x3af0fa7d,0x3aec8a02,0x3ad3c99b,0x3ab949e0,0x3ae5e9b1,0x3acfe53e,0x3abf6db9,0x3ab0dc7e,0x3a87e049,0x3a7a5180,0x3a837237,0x3aa5e956, +0x3a8b3022,0x3a430e1e,0x3a226d33,0x3a028cdf,0x38f9a82b,0x390fe3a8,0x3a235570,0x39bdbed7,0x39b29cc6,0x3a3be990,0x3a5992f5,0x3a720757,0x3a84e089,0x3a8c8ca2,0x3a9634f4,0x3a9e46c1,0x3a2d80de,0x3a71791b,0x3a948f51,0x3a3e142b,0x3a707b2d,0x3ac2a776,0x3ab80a0e,0x3abfebd0,0x3ac4234f, +0x3acd9936,0x3ad5054e,0x3ad2f3f0,0x3ac9e0ca,0x3ab16a16,0x3aadb372,0x3aa56bc8,0x3a98cf8d,0x3a8d82bf,0x3a66ef2d,0x3a4721e0,0x3a258b56,0x3a1a479a,0x3b072bc1,0x394c409c,0x3931adcb,0x393fb6a7,0x3a3f1d0b,0x39954721,0xba56603f,0x3a0c195e,0x399c66f3,0xba1d78e7,0xba281cfe,0xba4ac917, +0xba63dd8c,0xba7ec8f0,0xba928f03,0xba4968f8,0x390bd994,0x39e650a9,0xba52a493,0x39042f7f,0x39f3d5cc,0x370d49b8,0x38f4ce56,0x39409f1d,0x3948d5ba,0xb7ac7417,0xb886f764,0x376e0183,0x38cbde8b,0x395f1b4c,0x39ac3550,0x397f871c,0x39492944,0x397bdf60,0x39af4ab2,0x399005af,0x37ef477c, +0x39512810,0x3998b264,0x3a63c6bc,0x36f75326,0xb8fd8053,0xb9e4e435,0x382d9e09,0x39602981,0xb972255a,0x38cdbb96,0x3903e52f,0xb990aad0,0xb9bec787,0xb9e06103,0xb82f889f,0xba96e10d,0xba08459b,0x38ef1676,0xb91df08f,0x38249d15,0x39bdad42,0x3979b1d9,0x39fdf2d8,0x3a131a79,0x3849d8b3, +0x37e3b837,0x39a12575,0x3a18c896,0x3a2b591b,0x3a1f5de1,0x39b24192,0x39ffb697,0x3a830548,0x3ac17378,0x3aad87ec,0x3969ba49,0x39fe3f65,0x39d4178b,0x3a675ffa,0x3a0c1ce9,0x39905381,0xb9a9165d,0x37fbbe8b,0x385a019c,0xb8dffc09,0xb8fc8d8b,0xb8d2c4ca,0xba109bf2,0xba37cf01,0xbaa92ca9, +0x394b1097,0xba849bb0,0xba7d3ba7,0x3a009bc0,0xb9d719ad,0xb5e301cd,0xb94b4aa7,0x39f5ee8b,0x3a1b6420,0x3a47209e,0xb9e7cbbd,0xba3bf3f4,0xb8f3ca89,0x3a043688,0x3a6fd47c,0x3ab09bf1,0x3a2f3450,0x3a582093,0x3ac93734,0x3b03d58d,0x3aca9ba6,0xb907f3e7,0x3a4087e7,0x3a12e4dc,0x3ab53ecb, +0x3a0c8440,0xb98e5a95,0xba3e02f0,0xb8dfd1ab,0xb901023f,0xb810b7b9,0xb8744377,0x373791b0,0xb6fc043a,0x39124833,0xb926366a,0x38931f89,0xba8b2fb5,0xbade1af9,0x38548e0d,0xba3c7937,0xb956e12b,0xb90a44aa,0x3a0eccdf,0x3a803fdf,0x3ad6786d,0xb9ffa83d,0xb9f20fc1,0x3a2d957d,0x3ad3f5c5, +0x3ad62670,0x3ab8f4f8,0x3a4d1038,0x3ac8a38f,0x3b436d35,0x3b85f4ee,0x3b5eb512,0x37c0707c,0x3a894c58,0x3a061dad,0x3a54b9c9,0x3a0d5048,0xb85ddf0f,0xba1a89b4,0x391ac77e,0x38362374,0x37da3d18,0x384332d9,0x382d3ec2,0x37c11bb6,0xb61e5691,0x388068f2,0x38e3e35e,0x39b315a8,0xb9fd9853, +0xb8ba63bf,0xba5577e3,0xb9efc5c1,0xb98d2f85,0x3a3de986,0x3aa61e08,0x3ab95b9b,0xbaa015da,0xbaef31f6,0xba8dd4d8,0x398d10fa,0x3afb3080,0x3b1796a0,0x3a9eb033,0x3ad05223,0x3b3cfbec,0x3b7ee6fa,0x3b146402,0xba4a0b9e,0x3a2a4c60,0x3bd40a75,0x3b8b86a0,0x3b6e1489,0x3ae9fa79,0x3a970631, +0x3995d0d3,0x38225304,0x37c8353a,0x370fa961,0xb714413a,0xb721e092,0xb616a236,0xb7507f68,0xb8959ae9,0xb86f0445,0x39d57cf3,0x3a5119d1,0xba105df9,0xbad7c264,0xbac9cc9a,0xbb291a0c,0xbb012a9e,0x381a0b06,0x3b8bacbd,0x3bca9d0c,0x3c1319d0,0x3bb1a819,0x3ad145c3,0xba40abc1,0x38908daf, +0x3ac2e5eb,0x3ba53803,0x3b6f6079,0x3bb8336e,0x3c0fccc0,0x3c0b2a0c,0x3a81ce87,0x3ac64cfb,0x3a2ad925,0x3a43efae,0x3a380b08,0x393e2104,0xb8936e8c,0x38a6a652,0xb7914aac,0x37e99969,0x36c5286d,0x36784261,0x374b3c84,0x37fb2b70,0x38b70aa2,0xb91177ac,0x3962b2c0,0xb96e1abc,0xba78e27e, +0xba860158,0x3a8f6874,0x3b0a2f8a,0x3b2d578d,0xb9bb64b3,0xbb218166,0xbbb04b64,0xbb5fd3da,0x38ba5df1,0x3bc188d4,0x3b06d505,0xb8cf879c,0xbae14536,0xbba0d745,0xbba472f8,0xba207f1e,0xb882266b,0x3b80ec98,0x3be00899,0x3b67ba73,0x3a086572,0xba1e6401,0x39141595,0xb86658b4,0x38a18e31, +0xb77deaab,0x3780785f,0xb6ffbcd4,0xb57d7013,0x3738eee1,0xb8378c99,0x38b52478,0x384e6d9e,0x3949b73b,0x39b46dc5,0x3a64e40a,0x3a31cf96,0x3a1be90b,0x3a40d7a3,0x3a7c4e78,0x3aaa4a16,0x3b0999a0,0x3b7c23c5,0x3af77eb7,0x3a5cc6b8,0xbb10530c,0x39cf94d9,0x3b4a7e01,0x3ba5d14e,0x3bd3fdeb, +0x3bdd5ff1,0x3a508ba1,0x3b46abf2,0x3998d537,0xb82c863b,0x3b230eac,0x3a36aaa4,0xbae57191,0x3a15ea7f,0xb903a41a,0x380a9bd1,0xb7b1debb,0x371f0c95,0xb6ed7da9,0x36906cad,0xb6c0ab02,0x376469cf,0xb7a7d297,0x389168f2,0x38d27168,0x39acce78,0x3aa4c8ba,0x3aedee70,0x39a5f8c7,0x37ee8a1b, +0xb9dc7761,0x3a48be56,0x3b113f70,0x3bca58f1,0x3b43f757,0x3ac43441,0xbb795280,0x3b4b9202,0x3bcaf2db,0x3bbcb186,0x3bbb5cf5,0x3b9f599e,0xb9934d18,0xb91718b1,0xbbb4066b,0xbc4f6f7a,0xbb57c79d,0xbb014af8,0xbb154bcf,0x390cdd12,0xb5d021dd,0x38f7034f,0xb733af49,0x378422c7,0x3741332f, +0x374d3a12,0x37b45f43,0x378f5730,0x3800df92,0x388949dd,0xb9a4641e,0x38dfca08,0x3a2d3db3,0x39ace1b2,0x39aeea89,0x3983b2bd,0xb9684cce,0xba90092e,0xbb229a95,0xbb469482,0xbb0c611b,0x391e40d7,0x3ae5089d,0x3bc3b613,0x3b9fad95,0xbaaf56e0,0xbb4d7cfe,0xbb923b41,0xba621550,0xbaee62a6, +0x3b8f77c4,0x3c216d91,0x3bf7a720,0x3bd80c04,0x3ac8d456,0x3a3fe1d0,0xb9857fb0,0x388ba8a0,0xb8368bb9,0x37ddf54a,0xb78c655a,0xb6bf9fbd,0xb81c3e42,0x3657d563,0xb79404a4,0x374380a9,0x3a0ffc74,0x3b1329cc,0x3b581e0e,0x3b5132c6,0x3b293435,0x3b04e3d1,0x3ae16286,0x3ab8f015,0x3ab4cd68, +0x3b08261c,0x3a187b94,0xb9e3e437,0xba21730a,0xbaf78b48,0xba59121c,0x3a5eab25,0x3ab2c1a0,0x3a963f99,0x39a2aa9f,0xb965a236,0x3b3294dc,0x3b1a118b,0x3aab5849,0x3ab16107,0x3a2abb30,0x3a1164f4,0x39236f0c,0x394779be,0x388abed6,0x38b55140,0x37b4f4dc,0x38aa2011,0x387501a4,0x38b25aab, +0x37baf3ff,0x398a93a5,0x3a2ac951,0x3a4409b6,0x39dd24a6,0xb78b9cdf,0xb725c020,0xb9541ece,0xba08d62b,0xba54f854,0xba9a0cf0,0xbafb036e,0xbad08b11,0xbab61dee,0xbaa8e9a1,0xba80a8dc,0xba28c87c,0xb93f627d,0xb90e7d31,0x39b8b515,0x3af491bb,0x3b128107,0x3a60f2c5,0x3905e7c1,0x3a0dbbef, +0xb95b9cea,0xba2bfd0a,0xba28a4ee,0xba03159c,0xb954d253,0xb8405c39,0x35420572,0x368fee8b,0xb896edad,0xb8b532ae,0xb8e32b9b,0x38144790,0x3946d7c0,0x3a1fe6e2,0x3a407cef,0x3a4b9f6a,0x3a1c43a3,0x3a15bc02,0x3a0086b4,0x3a08fe13,0x3a2bce62,0x3a4b6a1d,0x3a6132b3,0x3a3d4854,0x39b53e9b, +0xb9c254c0,0xba0c8401,0xb9fcf11b,0xb990f22b,0x39c7d4ce,0x3a2a0676,0x39bb7aa1,0x39b0ab1f,0xbae31a47,0xbae59337,0xbafe6dad,0xbac5e820,0xbaaeb07e,0xba8e212f,0xba4c7b24,0xba1a63f7,0xba09697c,0xb9bb9d0d,0xb8ed8afa,0x3600654d,0x38d02ee9,0x39c21b28,0x3a059527,0x3a3ea69b,0x3a7d2158, +0x3a88090e,0x3a8988dc,0x3abaa3f9,0x3aa4fd24,0x3aabb47f,0x3aa4460f,0x3abd5430,0x3ad77a38,0x3af7f152,0x3ab9fa4f,0x3aaf7fc7,0x3ab2280e,0x3a95a44c,0x3a60973b,0x39cafe5a,0xb99fd16d,0xba69eff2,0xba8f3ef2,0xbaa6892c,0x3a41b953,0x39e39582,0x3a30f335,0x3a45ee82,0x3a83942a,0x3a5a5b28, +0x3a6d33f8,0x3a4acf71,0x3a88eed2,0x3aaf1bbe,0x3ac48e09,0x3ae56a07,0x3afd5fad,0x3b0b2f9d,0x3b170af4,0x3b13f4b1,0x3b0ccf64,0x3b13aeaa,0x3b059fb2,0x3aecdaab,0x3adbd91e,0x3af8a4c4,0x3af40730,0x3af81bda,0x3ae494b0,0x3acd1cf2,0x3ae99813,0x3ac99b9f,0x3ab80aa5,0x3abac49a,0x3ab06219, +0x3ad8ac50,0x3acef400,0x3ad7b94f,0x3aa93391,0x3a767419,0x3a6087e5,0x3a412db1,0x3a8e0460,0x3a79535e,0x3a106bd3,0x3aa6e2e4,0x3aaac148,0x3a6f9524,0x3a7dca5c,0x3a7e66ce,0x3a8174cf,0x3a8596da,0x3a86084f,0x3a8ba5c6,0x3add45aa,0x3aea4fcd,0x3a8a21f7,0x3adb7a7c,0x3af05f5a,0x3aca21fb, +0x3ad41293,0x3ad6d883,0x3ad71d7e,0x3adccb50,0x3ae1f2ba,0x3ae143c6,0x3ae2bb61,0x3ad8afe9,0x3adffe20,0x3ade87b4,0x3acb35d9,0x3abf96f8,0x3a9e88f9,0x3a8fc62a,0x3a802200,0x3a6d8c9b,0x3b2de182,0xbada4a1b,0xba828793,0xbaa06b27,0xbaaaeebf,0xb9df0b30,0x3a0cbe4b,0xbaa77693,0xba151ba2, +0x39fe3c9a,0x3a1b8737,0x3a2a5e58,0x3a07ee8a,0x39f1f9c4,0x3a2c3f33,0x3a300108,0xba3db9fb,0xbab1bf23,0x3a6c183b,0xb9bc80d4,0xba96123f,0xbaadd907,0xba9a7011,0xbaa7122c,0xbaa54e4a,0xbac590dd,0xbac61b5a,0xbaaf6de6,0xbaa1d21c,0xba95a3a3,0xba8d5b43,0xba9f43f8,0xbaa1883b,0xba9ec4d2, +0xba98513e,0xba97213d,0xba94c89d,0xba895ff8,0xba5f899e,0xbaab8278,0x38c30ac3,0xba7ae6ee,0xba16c830,0xba6fa226,0xba5ec50c,0xb9d7b6d1,0xba10d88b,0xba3a47a7,0xba4cfebe,0xbab1c52c,0xbab26af3,0xba00fbde,0xba16c5a9,0xbad3ecfb,0xba008f72,0xba87ca77,0xba37ceb8,0xbaea6ee4,0xbab9dd47, +0xbac4d52b,0xbad42513,0xbb0828c7,0xbb084af2,0xbafced35,0xbab8e328,0xbaba2b0f,0xbad9fb42,0xbb03764d,0xbaeaed4d,0xbaaa52f6,0xba89a0f4,0xba7bbead,0xba9b4f0c,0xba80d4e8,0xba2a3c9b,0xba68ad7c,0xba1b65f7,0xba99c3ad,0xba695685,0xba3a7bd3,0xb9b20098,0xba10b883,0xb9a71d81,0xba33df5a, +0xba444467,0xbacf85be,0xbaa72f1c,0xba23e4e1,0xbab8a0b3,0xbadf881b,0xb9fd6069,0xba69a765,0xba871cf1,0xbad1e467,0xbadf3750,0xbaf9b20f,0xbb0da7ea,0xbb55b054,0xbb575b69,0xbb237fc4,0xbad673ed,0xbaa5652a,0xbabd8fb2,0xbb0681ab,0xbb0804c8,0xbaa2993d,0xba9453ff,0xba836df7,0xba90210d, +0xba2944a5,0xb89a270c,0xb985746d,0xb9847d6e,0xba73b388,0xba825eac,0xb9a8ef8b,0xb8c192b3,0xb94b9f80,0xb799db9c,0x38b2984e,0x39177710,0x39a1868c,0x384e73a7,0x36315995,0xba6330fd,0xbae79e67,0xba00cbbb,0xbab21518,0xba981ece,0xbac73938,0xbaf08082,0xbadb550c,0xbb00bffe,0xbb8a632f, +0xbb8f1ae9,0xbb348ff2,0xbaaa1e70,0xbaac387c,0xbb1c3e9d,0xbb3bf3d0,0xbb20f4b6,0xba3b67d4,0xb9a933c3,0x3893e1df,0xba65416e,0xb922606d,0xb8efccf2,0xba2fe08c,0xb9ea907c,0xba24ba22,0xba682f5c,0xb8c35a5c,0x36b4b476,0x3830f962,0xb6b6dbce,0xb86a4047,0xb8cefc32,0xb8d193fd,0xb84255aa, +0x37529b3d,0x3991f4d1,0xb9dfe580,0xb98ceaba,0xba8d9d03,0xba60835c,0xbaf7ceb9,0xbaef438a,0xbb1c50a5,0xbb4f15ce,0xbbb31578,0xbbb9b98d,0xbb85b65a,0xbb127233,0xba66a426,0xbab186bd,0xbb378e62,0xbb2b3a63,0xba53e510,0xba613b84,0xba87d31c,0xba8c894c,0xb9ab3c24,0x3b68870f,0x3a90f2b1, +0x3aee46a0,0x3a992629,0x3a0eecd0,0x39441266,0xb9095d99,0xb7a713e7,0xb813777b,0x3740df58,0x381510de,0x37bc056f,0x3818ad64,0xb8874f7d,0xb88e110c,0x378a9b1c,0x3a411533,0xba466be1,0xbb1cfb40,0xbb53da65,0xbb903510,0xbb3abc74,0x39491949,0x3b9b0b05,0x3bc71f7b,0x3c0ddab3,0x3b80df0a, +0x388a2b75,0xbb27407b,0xbb0d1652,0xbaf3f9f6,0xb8ee2073,0xb987aa36,0x3b0639de,0x3bc016b3,0x3ba0dbb8,0x3a1aad7b,0x38c97b32,0x39b9ae56,0xb84cd69a,0x3a0947a2,0xb966580c,0x38499dc3,0xb79dca72,0xb5a24ed6,0xb791b392,0xb7b338fe,0xb7924977,0xb75af5c7,0x370e6f9a,0x37d792bb,0xb95d12be, +0xb8f78bb8,0xb9aa977f,0xb9e0e9c8,0xbad72d1d,0xbaad97df,0xbaa6af36,0xbb07d50c,0xbb59478b,0xbb922318,0xbbc1c2db,0xbb55fbb3,0x397e40ff,0x3ba7eec7,0x3a8e32f9,0xba965a23,0xbb1ccf94,0xbbc5b828,0xbbb57b89,0xb954b3eb,0xb9f3899c,0x3b4e9373,0x3bcc249c,0x3b49c289,0x39af2cc9,0xba35624f, +0x3833161f,0xb8a15550,0x374f7d6e,0xb7a6841b,0x367677ab,0x352f0015,0x36fd1426,0xb5ec946a,0xb75fcec0,0xb82973b5,0xb74e581a,0x388a0f68,0xb81c025a,0x38be569b,0xba056774,0xb98bf06a,0xb97a786b,0xb989a58e,0xba140aa4,0xb93f178f,0x3a5ae085,0xba87ff17,0xbabd7f96,0xbb5d1114,0xba443644, +0x39d091f3,0x39389c9f,0x3a7546d1,0x3aa32e91,0xbb73f70d,0x3a9fb576,0xbab5c791,0xbaf78112,0x3b406f7f,0x39c16ae8,0xba8d1dfa,0x3a214f53,0xb95c142d,0x38414bd2,0xb82850b8,0x37790fd2,0xb6ff3867,0xb5ede84b,0xb7057b9e,0x3633ec7e,0xb73397cd,0xb8aab4b5,0xb898b4ad,0xb904670e,0x39fd5e95, +0x3a0e898e,0xb9a7cdd0,0xba3eebc5,0xba932686,0xba5f72e6,0xb98a8eea,0x3b271e03,0xbab52faf,0xbb0b4ac4,0xbbb90626,0x3a817d97,0x3b4179d0,0xba00808e,0xba9af2c6,0xbb2dd488,0xbc05c6e2,0xbb5264b2,0xbc10226f,0xbc7e89ca,0xbb91df3c,0xbaa26690,0xbab5333e,0x376e1142,0xb6af3157,0x384f69e4, +0xb7e17a63,0xb43e5e62,0xb7b20ed2,0xb66a9188,0xb7999a42,0x369036a6,0xb83552fa,0x38ce2df9,0xb9a28576,0xb9c90847,0x3899a094,0xb9d07d22,0xba844c29,0xbae927cd,0xbb293fd0,0xbb51afc1,0xbb816cef,0xbb7b0529,0xbb4ed7e0,0xba628273,0x3a93d426,0x3ba0b84e,0x3b34b00d,0xbb8fd803,0xbc04be21, +0xbc227d0e,0xbc0457f2,0xbbd4b917,0xbb23c185,0x3bcd2d2f,0x3beadb99,0x3b733953,0x3aca62ac,0x38c85370,0xb96f50ce,0xb824b441,0xb80f4cbb,0x363befb6,0x37552769,0x378a9c13,0x37139e1c,0xb809da78,0xb721455a,0xb8f6d388,0x395d9f65,0x3ac26763,0x3b181159,0x3b2ea0e2,0x3b14f6d8,0x3b1585c7, +0x3ae91aff,0x3a877abb,0x398b1963,0xb9ad8287,0xbb03db4c,0xbb61c20a,0xbb982d9b,0xbba10efe,0xbb7b38ca,0xbb468c77,0xbb7eff4c,0xbb9edc77,0xbbc2b3ef,0xbbc8dd70,0x38b498ab,0x39126b25,0x3a7c10e5,0x3aa14176,0x39f37b70,0x3a2964cb,0x3768f559,0x39188fa2,0xb8be1a04,0xb8149f2b,0xb8c034c9, +0xb88c91bb,0xb8606b95,0x375b5413,0xb6f455ea,0x389d0b64,0x39a6535a,0x3a23f098,0x3a25bc8a,0x3946a932,0xb974f200,0xba6952aa,0xbaa3220f,0xbb062208,0xbb220592,0xbb557267,0xbb2da179,0xbb0d1cb0,0xbac33186,0xbad8de1b,0xbb038b54,0xbb36028e,0xbb0c7a3c,0xbad43f78,0xb9bf4bc2,0xb91dbebb, +0xba2192bb,0x398527ef,0xb98e0766,0xba312fc9,0xba902cd0,0xba8536ef,0xba0375d9,0xb9243b6c,0x37f9133e,0x388ccf3d,0x39025f2e,0x38dafbac,0x386fcc00,0xb867d911,0xb9249fdd,0x37f1c453,0x39c4b442,0x39ee1609,0x39f6ee53,0x3a0a01e2,0x3924c33f,0x38578341,0xb7ef417a,0xb89c9ed4,0xb9139637, +0xb9287916,0xb9f710e0,0xba74dd4a,0xbad47e6a,0xbafabdbd,0xbb03bf7a,0xbb1cdcb5,0xba9b1e90,0xba17e25a,0xba47625c,0xb9f9192c,0xbb1e0d60,0xbb3a24ed,0xbb0f50a5,0xbb025a41,0xbac401cd,0xba932325,0xba80a435,0xba6cabfa,0xba4d3235,0xba2db4c2,0xb9f02f59,0xba3cc6a6,0xb968ed95,0xb9b07330, +0x39becd13,0x395fdd07,0x3a026daa,0x3a1c8ac8,0x3a4a547f,0x3a3578ca,0x3a61f2a5,0x3a7137e3,0x3a79f15d,0x3a95b6a9,0x3ab2bb79,0x3ad61a9c,0x3a4e1696,0x39bac64f,0xb8df7775,0xb9dfc718,0xba507306,0xbaaabab9,0xbae483b5,0xbb11800a,0xbb0dae01,0xbb122766,0xb9733999,0xb9f0824d,0x39e2043a, +0xb92e10e9,0xb8fa92e0,0xb900ec12,0xb9826ddf,0x39dc695f,0x395ad2e3,0x3a28ae2a,0x3a6a8522,0x3a933eac,0x3a8d049a,0x3ab97daa,0x3a99b11e,0x3aa621ce,0x3ae70541,0x3ab60395,0x3af56410,0x3ae61fff,0x3aea58a3,0x3aea3d1c,0x3ae8e65b,0x3ae6a2f5,0x3ace90df,0x3ab75348,0x3ac3a9b0,0x3a9a79cf, +0x3a62b03d,0x3a14a123,0x390dced3,0xb8d1c995,0x3745e095,0x39a605b7,0x388ca5fa,0xb98c7e08,0x390ea028,0xb8fbe3ba,0x382edf99,0x3a384bf4,0x3ab68e10,0x398c4439,0x3a3828ea,0x3abf68eb,0x3ad9a0a6,0x3ad90158,0x3adb6c3c,0x3aeb4178,0x3b02868a,0x3b0844ff,0x3a7e8581,0x3a21eda8,0x3af7257b, +0x3a95091a,0x3a4ad174,0x3a74701d,0x3a740bb6,0x3a808881,0x3a8489c4,0x3a8c8b2e,0x3a956f7f,0x3a9753aa,0x3a8a3369,0x3a62bf6d,0x3a583e47,0x3a45331d,0x3a2abca7,0x3a0922b4,0x39b3d797,0x39838ecb,0x391b63db,0x39007bea,0x3aca24b2,0x3936b4bf,0x3999718c,0x3a2e3d6e,0x392fbddc,0xba66026f, +0xbad50fdb,0x39035965,0xba2f8c64,0xbac8cc68,0xbad28826,0xbad9c07f,0xbaca7925,0xbae11883,0xbb025491,0xbacd3104,0xba71913a,0xb9267828,0xbad2aa31,0xba7914ef,0xb91e6166,0x39cf9995,0x3965d727,0x399228c8,0x398b57a5,0x38b4b433,0x38911631,0x39377184,0x39985580,0x39cac78b,0x39cc9531, +0x39c37dd1,0x39b60df7,0x39e76930,0x39dfacb7,0x39babb4e,0x3906727b,0x39afdeaa,0x3a27e7d1,0x3a7719b8,0xbabcfdf4,0xb99cc22f,0xba8b9880,0xb9c64fbc,0xb9ba3b46,0xb9d633e5,0xb87a0210,0xb9f5c404,0xba5d0ec9,0xba95f644,0xba568e79,0xba06dad4,0xbaf844eb,0xba58c858,0xba2097a5,0xba14cb4f, +0xba872d30,0x390455d2,0x39bb7224,0x39e349a5,0x39dfcc25,0xb7f4f629,0x3722c570,0x39ac04ec,0x3a5a2193,0x3a5bd9dd,0x39e1195d,0x3a04ab0d,0x3a433c25,0x3aaf576f,0x3ab148ee,0x3a924b03,0x390be1e6,0x3a11525f,0x3a5e55b2,0x3a687a70,0xb9ba214f,0x396100db,0xba45c3f4,0xb9c4e300,0xba05f428, +0x3989ee5a,0xb9989d44,0x392798aa,0xba073585,0xb9086401,0xba999bbb,0xb7c5293f,0xbaa3ce4d,0xba88bd4a,0x3887d059,0xba5996ac,0xba3c1268,0xb9fdd164,0x3a26c346,0x399850aa,0x39e2896e,0xba37c9db,0xba401825,0xb773b638,0x3a66c9fd,0x3aa0f19f,0x3a61d761,0x3a4f62ab,0x3a84eb29,0x3afe3201, +0x3ad8a64d,0x3a95c246,0xb98815d5,0x3a4fe30b,0x3ab109e4,0x3aba18f5,0xb9fdc08b,0xba23128f,0xba3a1b4e,0xb998fe50,0xb90c49b2,0x3903ea6c,0xb8a2c103,0x380c5e5b,0xb6dc50d1,0x397b7c7f,0x3825c55f,0x398e1cbf,0xba1d9955,0xbaa628b3,0xb960b7af,0xba792101,0xba8ca402,0xba781a49,0x3a308a49, +0x3a10194f,0x3a76c028,0xba8cf4dd,0xba6ac3a7,0x3a025bec,0x3af93554,0x3af0a43c,0x39fa410d,0x3a834e15,0x3aeb7691,0x3b709b0a,0x3b562c27,0x3b233528,0xb9a54c78,0x3a7a1b3d,0x3a8a7ff9,0x3a7b0360,0xb9366621,0xb7feff4e,0xb9cd3040,0x381679fd,0x389117d4,0xb6efdc88,0x3815d77a,0x37c3ef89, +0x37c56ff6,0xb899d877,0x37b7097f,0xb842c14e,0x39be6727,0xb8044e69,0xb96511ce,0xb99dd95a,0xbabbc4b8,0xba44c3d3,0x3a2d71e3,0x39f8ce6f,0x39cd2d74,0xbb04795a,0xbb0c5862,0xba73378e,0x3a8e86a0,0x3b1956f8,0x3aad20ad,0x3a9e2b2e,0x3ae8c574,0x3b5b49c0,0x3b381150,0x3a983964,0xba71dd1d, +0x3a37a50c,0x3bb8b360,0x3b86d082,0x3af2f444,0x39cf6778,0x398ae740,0xb8f898a5,0x38247b06,0xb6d81f5e,0x37906f1c,0xb607e8ba,0x35e3122b,0x37de0d76,0x378045b3,0xb64e70ce,0xb8bd2a37,0x383ab1eb,0x3a1411ef,0x391b6219,0xbacb8091,0xbaa2f524,0xba89e519,0xb96b23e4,0x3b1f4ea3,0x3bd19246, +0x3bf8fb67,0x3c10bc0c,0x3bbd4b2c,0x3b30a494,0x3ab89f4d,0x3af20d1f,0x3b4526fb,0x3bb64b75,0x3b9792cc,0x3bcb015d,0x3c0a3a55,0x3bf983d6,0x3b0cc7b6,0x3a99a7d0,0xb95aa946,0x3ab1232b,0xb8903773,0x39014d18,0xb74c6e7e,0x37b98a36,0x36d5391e,0x37543f49,0x365896df,0xb6a52349,0xb76d01f3, +0x37c6ae09,0x38a84b31,0x3803c42b,0xb8a22323,0x38903bde,0xba65ecaf,0xbaa1bb2a,0x3a9464f7,0x3aa7e072,0x3af94906,0xba82d249,0xbb328f20,0xbba2de82,0xbb0fa329,0x3a9d191d,0x3bc1fbb7,0x3b1195c7,0xb94ea498,0xbb1cb651,0xbb93d936,0xbb8108ce,0x39e2e496,0x3a648b94,0x3b82cb30,0x3be6ba40, +0x3b82eb02,0x3a1648da,0xb9e2ed71,0x390f7992,0xb8b174d1,0x388c1026,0xb7b19d48,0x37a03df2,0xb7176e78,0x378038f6,0x373bf79b,0xb6bdbb8b,0x36d2b53c,0x3848f6c5,0xb67df8f2,0x39305f11,0x3a02ab72,0x3a821282,0x3a99c734,0x3aa65f8d,0x3ac17e0f,0x3b2285a8,0x3b608202,0x3b8da3ac,0x3b14b1a9, +0x3a9f67cd,0xbab3050b,0x3b081d18,0x3b954f84,0x3b973bd2,0x3bc20e63,0x3bba1bb0,0xba16262d,0x3b2ac73d,0x3a11e451,0xbb164f77,0x3ad84c89,0x3a14e628,0xba251884,0x39e59f2c,0xb9030b34,0x3871f49e,0xb7880bbc,0x37a82d34,0xb614c94e,0x37141778,0xb6f6def8,0x379e7a49,0x3604d801,0x37f0fd5b, +0x3801d391,0x3743fe9d,0x3963c50d,0x3a83013a,0x3a3e36e9,0x3a189d58,0x3943a67e,0x3b10117e,0x3b640642,0x3bce344d,0x3b1a4161,0x3a852e9a,0xbb204228,0x3b843bb2,0x3be2be31,0x3b8d526d,0x3bb6a9ca,0x3b947a40,0xba777866,0x39e08154,0xbb8ce980,0xbc82fc55,0xbb88404f,0xba0b3c4f,0xba4245b2, +0x3982052a,0xb7dcfb08,0x386f249e,0xb7992ba6,0x36cccf45,0xb7195906,0x3739f6af,0x369dc965,0x37d5c6f6,0xb6ef8244,0x38b85a4f,0xb9422969,0xb9972508,0xb959873f,0xb924c548,0x37a6c857,0xb9017979,0xb9a67bfe,0xbac7f537,0xbb385834,0xbb3f336a,0xbb10880a,0x39997a24,0x3b333a20,0x3bacf3b7, +0x3b44e226,0xbb845b62,0xbb519fed,0xbb2be755,0x3aa32430,0xb8ebe1b4,0x3b3a8cc5,0x3bc4d473,0x3b35e826,0x3b40c7ba,0x3a4972df,0xb8dd0b05,0xb8cb3246,0x38400112,0x3662cd85,0x38021209,0x3778b7c6,0x37895af3,0xb72179c9,0x3599b5a3,0x37b54092,0xb8bdb0cd,0x393d394a,0x3aaecf2e,0x3b1cc2c8, +0x3b386aa6,0x3b34c32b,0x3b104c92,0x3afbfdaa,0x3aa754ec,0x3a8841d5,0x3ab993ae,0x38532eef,0xba823734,0xbabe0c1a,0xbaf69d8c,0xb9bbc904,0x3adbcd2b,0x3a8c8c66,0x37aa4163,0xba6fe385,0xba97558b,0x3b3d398d,0x3b0569cc,0x3a4054ca,0x3a96709a,0x3a31def7,0x39bf4524,0x3853e0a3,0x38573b05, +0xb72e45e9,0xb6d86b64,0xb718ad22,0x35b9b10f,0x38242944,0x37fe2d5b,0x382ed4a8,0x38a2b1e4,0x39d54cab,0x3a684110,0x3a354b5a,0x3a10edcb,0x3a009ea0,0x39182961,0xb916ec02,0xba60f492,0xbab245d2,0xbb12a8d3,0xbae2c88a,0xbac5663e,0xbab1c33c,0xba9fdc38,0xba5cf693,0x394f318e,0x39f537e6, +0x3a984e43,0x3b1f42c3,0x3b2e5c8a,0x3adcfe6e,0x3943c2ba,0x3a026b9c,0xb96045e3,0xba5f0531,0xb982eb26,0xb98c1a4e,0x3840d7d0,0x38cf492e,0x38be734e,0x38bada39,0x388a978a,0xb810fe8f,0x3815cc90,0xb8a86fc6,0x3704d475,0x3915cc34,0x39eafbe5,0x3a43b571,0x3a1fb887,0x3a54f27a,0x3a0755fe, +0x39c7b29e,0x39c632aa,0x399849ab,0x38e2360d,0x379e1df7,0xb9ba1f33,0xba827cd6,0xba6671f0,0xb9d7ef8e,0x39028052,0x3a46dedb,0x3a76833d,0x3a512aa5,0x3a2c0648,0xbabce35c,0xbac4cce8,0xbb184259,0xbac72fbb,0xbac9fa42,0xbab85019,0xba8a4b04,0xba1da40e,0xba294e8a,0xb9de97fd,0xb9d49d10, +0xb9554805,0xb996bf91,0xb8ec2e68,0xb9085321,0x39465642,0x39f2f7e6,0x3a24878c,0x39fd91ff,0x3aacc6a9,0x3a97c565,0x3a8df93d,0x3a8350c2,0x3a849e94,0x3a9018be,0x3aa4c763,0x3a7ab8b6,0x3a7ea81f,0x3a8970c9,0x3a7251fb,0x3a2a6f1d,0x399f3806,0xb9951ccd,0xba3ead1a,0xba45e771,0xba8a4c37, +0x398890f6,0x38359967,0xba0152a4,0x38d657a7,0x3922eb84,0xb7891ea1,0x3975f05e,0xb8f94d5a,0x399877f9,0x399600ef,0x39cb517c,0x3a1b921c,0x3a7fcece,0x3a8e6284,0x3ab66b25,0x3abfb115,0x3abc0c6d,0x3afc60ad,0x3ae23ed5,0x3b00f5c5,0x3aea1d2c,0x3b001bab,0x3afd1bdf,0x3b017305,0x3af33e73, +0x3ade057f,0x3aedb3db,0x3accc825,0x3ab290c2,0x3ab21a92,0x3aa79dfb,0x3ac52b08,0x3ab1925f,0x3aa9c6e2,0x3a632244,0x3a0559c7,0x3a4ef204,0x3a3e8232,0x3a1b1ca1,0x3959849e,0x37c10162,0x3a5ab0c2,0x3a11e77c,0x394cd3b9,0x396db3bf,0x39a72a76,0x39d9542f,0x39d2d134,0x39a7d2a0,0x39ad4cc6, +0x3a707ff6,0x3ab0215d,0x3a0997f1,0x3a7783f7,0x3ab1d41e,0x3ac2da65,0x3ac2d323,0x3ac50311,0x3ac3b035,0x3ac6588a,0x3aca0554,0x3aca6337,0x3acb8442,0x3ac526c6,0x3acdf35c,0x3acbe692,0x3ab94c2d,0x3aae95a2,0x3a917e95,0x3a8634c1,0x3a728eef,0x3a5ee0fe,0x3b1a498a,0xbab88fd0,0xba73c42e, +0xbab6b433,0xba1d743b,0x39c7d9e7,0x3a2362ed,0xba371657,0x39245c01,0x3a5e3335,0x3a5a853c,0x3a51c79e,0x3a2f2db6,0x3a1ffcc4,0x3a40965b,0x3a38c42d,0x381028d3,0xba2e1028,0x3a54a2ce,0x39adc2aa,0xb9f66781,0xbab68f7d,0xba91a006,0xba9bfa75,0xbaa0c28e,0xbabcb7e8,0xbaba7c6e,0xbaa038ac, +0xba8ea004,0xba837161,0xba88bcf2,0xba8c6a98,0xba8946e0,0xba7ef2a7,0xba7ead4e,0xba80860c,0xba88470d,0xba795508,0xba6506b9,0xba82fca9,0x3a810e1f,0xba397208,0xb8fd6857,0xba1e063e,0xb9ba3808,0x387f5148,0xb9c1f1ce,0xb958ca73,0xb9b519f4,0xba828316,0xba8f6977,0xb9376c1e,0xb8fd49ff, +0xba88896c,0xb90579cc,0xba3f555d,0xb8f1f684,0xbabe53e4,0xbab6965a,0xbab3a6e4,0xbad76b12,0xbb00392c,0xbaf5c352,0xbad63db0,0xba870c06,0xba91db37,0xbae0869b,0xbad35d91,0xbaa3d809,0xba33cf50,0xba24c4ec,0xba3d9f3e,0xba9f2ab9,0xba5dbc8a,0xba6c8860,0xba58ff34,0x392ab53b,0xba5b2fe6, +0xb9819c4b,0xb9dbce5f,0x3809b1ef,0xb85138f2,0x386adfd9,0xb9a38c16,0x37e58ce2,0xba26055f,0xba246e6f,0xb924e41c,0xba7aec5f,0xbaa4fc22,0xb92ba4c1,0xba14f539,0xb9fbcb8e,0xbac3d33b,0xbae3a177,0xbae9ac32,0xbb16fd8d,0xbb4fcab0,0xbb4ad999,0xbb08c7b7,0xba8df333,0xba4acb6f,0xbad82268, +0xbac25398,0xbaa5bdaa,0xb963aa20,0xb9de9d7c,0xba0af9da,0xba934a29,0xba0df042,0xb9e8047a,0xb9195f45,0x3a4a5745,0xb9c4624e,0xba116ca3,0xb97122b4,0x382bf94e,0x37473c8d,0x37f870b5,0x38a04c25,0x38f36797,0x3981f80b,0x394f6a6a,0x38a41f69,0xb7157659,0xba81e457,0xb9e44b37,0xba90903d, +0xba51b397,0xbab751c9,0xbafa5e4d,0xbad6e727,0xbb118c46,0xbb85525e,0xbb818b31,0xbb02e3bd,0xba09d91a,0xba34d2a7,0xbb3c3e83,0xbaff8189,0xba977b21,0x3a581dbf,0x3a26bff2,0x39e4fe2d,0xbab1fa8a,0xb8ece647,0xba2e39b7,0xba86062b,0x39564d86,0xb9a3926e,0xb9d09fd8,0x39130784,0xb7883407, +0xb7ae6bee,0xb79da0c8,0xb85d1952,0xb8cbe83f,0xb90e9343,0xb88bb9b5,0xb90bdc2f,0x39071598,0x38329b42,0xb85e284c,0xba8f91c6,0xb9b9a827,0xbafe5fce,0xbb03ffef,0xbb19d6ba,0xbb672aa1,0xbbb21155,0xbbac31fd,0xbb5d38b1,0xba97c6dd,0xb96feea4,0xbb0566be,0xbafd70fd,0xba899af8,0x3a6dfddb, +0x39eaaaab,0xb9a0eb12,0xbaa7b548,0xb98db7a8,0x3b1de17e,0x3a95725d,0x3b1990fe,0x3a906f36,0x39783139,0x386c3e05,0xb82252f3,0x37aec282,0xb715c618,0x374ab659,0x380ea743,0x3851baf3,0x38264548,0x37258562,0xb6ba0501,0xb98981e2,0x3a565a91,0xb95483fc,0xba95604d,0xbb1378e8,0xbb585f92, +0xbae795e9,0x3a1c5cbe,0x3bbe2584,0x3bcc0107,0x3bdd2868,0x3b2d43d2,0xb989be98,0xbabb3f03,0xba9581b2,0xba305618,0x3a94b625,0x3aa77add,0x3b36a756,0x3bb07d73,0x3b60b32e,0x3965b9af,0xb9ad1753,0x3abf5ac4,0x39336dd0,0x3a010ce0,0xb94018f2,0x38ac4deb,0xb810b887,0x36039fa3,0xb79dc641, +0xb7757719,0xb80404ea,0xb77b3887,0xb811cdb8,0x381307b7,0xb8c7fce8,0xb8d39408,0xb8aead95,0x396e0d45,0xba5c6f0d,0xba85a499,0xba81df18,0xbafd0c67,0xbb5b12c3,0xbb825a38,0xbb90fb50,0xba986e4d,0x3ad99a7a,0x3b9fc9d7,0x3aa6aa89,0xba461896,0xbb1d0e24,0xbb8aa86f,0xbb55dc75,0x3aa40020, +0x3a3f02aa,0x3b5d3779,0x3bd354a4,0x3b625e5d,0x39eed28e,0xb966c8a0,0x37b515be,0xb7e69218,0xb67a7333,0xb6a45f5a,0xb6c4d65c,0x363c4b0b,0x36fbd1df,0x3610a951,0xb6e232a9,0xb7047b09,0xb72540e4,0x3907c8b0,0x388bde80,0x39f3a3da,0xb9061433,0x38b7f83c,0x3a106de5,0x39d255ed,0x3a256c9c, +0x3a5ed4dd,0x3a9fe60b,0xba909333,0xbac9d604,0xbb5b1b68,0xb96dc8a7,0x3aa0e59f,0x3a84de78,0x3b11749e,0x3b0b80cd,0xbb55b282,0x3ad16135,0xb9929e0f,0xbb2e7270,0x3b0caca1,0x39b05277,0xb956d8f0,0x397774b6,0xb8a90035,0x37f78eaa,0xb78e24c9,0x37164c3f,0x36e19b20,0xb6eb3875,0x3724068e, +0xb7afb050,0x37d70ac4,0xb8ea467a,0x3902f2e7,0xb9a1ea09,0x3942d72b,0x39fec52e,0xba042efe,0xb927de7d,0xba0fa43a,0x39fa705d,0x3a690da5,0x3b274c62,0xbada678e,0xbb0ce16c,0xbb88d2a1,0x3abd8a76,0x3b4a4c54,0xba43bd08,0x39ef894a,0xba2acb8b,0xbbbb7239,0xbab64748,0xbbc1c3a0,0xbc809dfd, +0xbb88bb11,0xb997d260,0xb845866a,0xb9179505,0x38649d62,0xb8095d5f,0xb74d5004,0xb7b52786,0xb797b4e2,0xb77b0bc0,0xb7b1bbc5,0xb783a507,0xb71409ce,0x388637b4,0x38065358,0xba05cde9,0xb97f7371,0xba9d731f,0xbabcae57,0xbb06404c,0xbb273589,0xbb4ec9c1,0xbb747f75,0xbb59808a,0xbb22b6b1, +0xb6018193,0x3b4ee98f,0x3b9393c7,0x3acb9bb2,0xbbd10de6,0xbbbf8a53,0xbbb312d6,0xbb7bc3ae,0xbb1746a7,0xbb072dfa,0x3b77d450,0x3b73a178,0x3a871f66,0x3a8e1e13,0xb99840ef,0x38854958,0xb8075a02,0x387ac4ec,0x376a008b,0x3841f139,0x380711d3,0x3822c49e,0xb6eef45a,0x35a139c3,0xb8d58e00, +0xb8cb2641,0x3a8b6cdc,0x3b0cc577,0x3b34ec32,0x3b0dd74f,0x3b1b016e,0x3ad482c7,0x3a6bde1c,0x39766625,0xb9307c36,0xbab5c217,0xbb2a72e3,0xbb65f55c,0xbb73a46a,0xbb24bafd,0xbaab560b,0xbb1a5f90,0xbb6592d3,0xbba6854c,0xbb8a6721,0x3a8f1148,0x3a7b0813,0x3ad23a98,0x3abe76d2,0x3a6806a7, +0x39accb86,0x378d92a4,0xb758a2d6,0xb8d3a84d,0xb89ef1da,0xb8f2d306,0xb8dbddf5,0xb893e917,0xb8488861,0x3828b0f6,0x38d82475,0x39930b13,0x3a425a49,0x3a86e467,0x39e04c1e,0xb7a9596d,0xba2875d1,0xba836bc7,0xbad68bbd,0xbb03f17d,0xbb39d2ab,0xbb15f2b1,0xbb04f124,0xbad1d27e,0xbaee876e, +0xbb06a2a6,0xbb1455fc,0xbae36387,0xba50033a,0x3a06b57b,0x3a830128,0xb8012772,0x3a9d92b6,0x3a42e5ce,0x3659bd29,0xb9cadabb,0xb9dd1555,0xb816eed4,0x38dc1927,0x394a7d2c,0x38ffb9e7,0x393b9fcb,0x392c9e9d,0x390eeed3,0x38a76e27,0xb8d49b93,0xb89ee046,0x3960ed9f,0x39d08403,0x3a089a82, +0x3a5f67bf,0x38828c62,0xb7f03172,0xb9a2cc99,0xb99c0956,0xba043834,0xba4d6465,0xba76a8b7,0xbaadd282,0xbaf48b25,0xbafe9ea7,0xbae11156,0xbaebccb3,0xba46fb3e,0xb99fe072,0xb9e8f4ba,0x34a90e0f,0xbb056759,0xbb1a7ad0,0xbad29ae9,0xbac0e243,0xba826bdf,0xba5efaba,0xba43bcf4,0xba2a28ee, +0xba124a1d,0xb9e1a17c,0xb926e444,0xba0a1a33,0xb9b2dcb8,0xb9dfb161,0x374cf527,0xb902e750,0x3911e470,0x398c526c,0x3a30aab0,0x3a105ed1,0x39b3eb5f,0x3a0f0d01,0x39d90797,0x39f55dfb,0x3a0d02f0,0x3a448e7e,0x3966b550,0x385e4349,0xb8b38e4c,0xb9ab9a72,0xba277ecb,0xba88ff46,0xbabbdce7, +0xbae16ce8,0xbad5f4d7,0xbae09225,0xb9e9d9ea,0xba25fdba,0x395bcc90,0xba0ee978,0xb9bfdebe,0xb9c73a13,0xb9fb2e51,0xb89c9938,0xb9842037,0x39486e9a,0x39c96d3a,0x3a291fc2,0x3a2cfaa2,0x3a7d3d80,0x3a839ea7,0x3a99fc7f,0x3ada17f9,0x3aaa9565,0x3b05b978,0x3ac25edc,0x3acdea73,0x3ac3e954, +0x3ac47b42,0x3ac54450,0x3ab256bf,0x3a9e2a37,0x3a8db078,0x3a3aa93b,0x39b385ac,0x38d7794c,0xb9307599,0xb98dedfb,0xb955e3c8,0xb608692b,0xb98961f2,0xba0cafdd,0xb888239b,0xb9a04f1b,0x396b62ee,0x3a6dd41a,0x3aa1896e,0x39bdb7b6,0x3a67a6b6,0x3ab1b87f,0x3ac951f5,0x3ac60407,0x3ac64df0, +0x3ad3a1be,0x3ae72022,0x3af01406,0x3a964671,0x3a1fcdc2,0x3adaee51,0x3aa6efd6,0x3a4b8936,0x3a03c65f,0x3a153308,0x3a1cce08,0x3a1ed5ff,0x3a23d519,0x3a307fad,0x3a397bcf,0x3a2bdb2e,0x3a14e9a1,0x3a16d157,0x3a0a4d88,0x39d7dbcc,0x3996a2b5,0x390b4cf3,0x389ea45f,0xb601774b,0xb8156275, +0x3a97868d,0xba16eed8,0xb9356c09,0x392890bf,0xba4ff92f,0xbab8c36a,0xbaa1aca8,0xba34ceba,0xba9db771,0xba9e59f7,0xbaa46989,0xbaa1d12f,0xba91091a,0xbaa27f16,0xbaafdf41,0xba8fbfbb,0xbabae6c3,0xba7f9c5e,0xba91d151,0xbab19245,0xba6ccd34,0xb814dad4,0xb991b061,0xb9994752,0xb9aadccd, +0xb9f07e95,0xb9e59847,0xb99c5808,0xb934cf1e,0xb8ebfa39,0xb9563320,0xb9432a5c,0xb932d096,0xb867de77,0xb91c55b3,0xb94b89ec,0xb9a0f3ab,0xb91a812c,0x3931c5b0,0xb84d91eb,0xbae5d665,0xba322043,0xba9e8265,0xba5d575d,0xba60c13f,0xb9d5722c,0xb9b2ee5a,0xba5d6614,0xba851f91,0xbac9db3d, +0xbaa9e094,0xba5bf0d0,0xbadd2b51,0xba997b98,0xba83c9cc,0xba7be11d,0xbaca9d79,0xba487903,0xb998a4b9,0xb9d77a8b,0xba140710,0xba5e9941,0xba47289b,0xba070d6b,0x3906bd04,0x3844b283,0xba256850,0xb9bd7bfa,0xb830596c,0x3a14f0e7,0x396ef183,0x36fe5cea,0xba15aa3c,0xb90b34cd,0x39c143ac, +0xb88f0fc8,0xba90d309,0xb9d96ebe,0xba82e7ea,0xba3f22d0,0xba328f77,0x395cbb73,0xb9953484,0x38b4940d,0xb9ca6850,0xb7e94cf9,0xba15ef9c,0xb9684cd3,0xba96478a,0xba980a7e,0xb9e4a8fe,0xba7fb071,0xba9d1179,0xba87c038,0xb961b504,0xba58ee3f,0xba7be83c,0xbae4e6d7,0xbac8468e,0xba4a3292, +0x39782170,0x39ebf36c,0xba2205f5,0xb96f3af2,0xb6c6a5ba,0x3a8c9fd9,0x398070f4,0xb8770c07,0xba3fb3c3,0x38e65ac0,0x3a8990c8,0x39c55c5e,0xba970221,0xba72288b,0xba4cadc1,0xb9a29bb8,0xb78fa233,0xb770fbdf,0xb826b768,0x384b479d,0x382804ba,0x39323eb3,0x3904a3b8,0x39262121,0xb7eccb43, +0xba2f5665,0xba013898,0xba90467c,0xbacff5c3,0xbad6c460,0xb984b844,0xba3a6de0,0xba7845a3,0xbb2289d8,0xbb132a5a,0xba4466b5,0x3a6576f7,0x3a32c495,0xbacf2a25,0xb998fa7c,0x39caafb7,0x3b260221,0x3a88306a,0x3a127256,0xba8a769a,0x390ba417,0x3a365314,0xb8076d40,0xba734499,0xb98d70c2, +0xb9b152fe,0x388e851a,0x364453e1,0x3740fe9e,0x37b67ea3,0xb7c04bc5,0x3645b057,0xb89fd51c,0xb7b45a9f,0xb8ea4dc7,0x39096c30,0x391ef21c,0xb943bc16,0xb916cfeb,0xbad8161f,0xbab937b4,0xb9cfc46a,0xbaad693d,0xbb025956,0xbb6e28e8,0xbb53a200,0xbadadaaf,0x3a1fa959,0x3aa5396d,0xba650cc8, +0xb9c03f77,0x39af3d11,0x3b101ecd,0x3a0dd874,0xba0dc91d,0xba91bae5,0x391287e4,0x3b63702f,0x3b3f22fc,0x39ba2f12,0xb93c057d,0xb92d627a,0xb827da6f,0xb828f745,0xb68706a6,0xb71fa0dd,0x37a7c494,0x35e95b5e,0x380474a3,0x37ca60d9,0x3835fce6,0xb83929bb,0xb8a00357,0x38f42a19,0x39c376bc, +0xbabac2b9,0xbac3f6a8,0xba4b1564,0x39fa1c61,0x3b635432,0x3bec94cb,0x3bf82cb2,0x3bfb5053,0x3b9e1edb,0x3b2c4fa2,0x3af5d10f,0x3b03140b,0x3b1d12aa,0x3b4e3a0e,0x3b5b0e16,0x3b9a43b4,0x3bd694f6,0x3b9f5930,0x3b2ea263,0x391db036,0xba4e31bb,0x3a8ac21c,0xb9d52b4d,0x38cb2af7,0xb817b0a0, +0x37aa0ef3,0x35a32ff5,0x34f7f959,0xb6ade346,0xb6a5c620,0xb7d08d4d,0x36f7c55f,0x36fbcd31,0x38d82764,0xb95b521b,0x38e666f9,0xb9ad163d,0xba893268,0x3956d8b0,0xba00c54f,0xba1b4338,0xbb2a16ae,0xbb5e506f,0xbb855b0f,0xba8989e1,0x3ae17fad,0x3b9415a6,0x3ac3d8be,0xba37c1a8,0xbb335b79, +0xbb811c54,0xbb2f0b89,0x3ae6a210,0x3ae90660,0x3b67ed0f,0x3bd86a56,0x3b731148,0x39c87263,0xb988924a,0x38c3a2df,0xb88e6464,0x37da5096,0xb79dee04,0x3730d0d8,0xb6d7a6fd,0x3759d75d,0x3691150d,0x375d6ada,0xb7c6b765,0xb7166f0f,0xb78808c1,0xb82bc54b,0x38f1cafa,0x3a32ba2c,0x3a86045f, +0x3a945664,0x3a931295,0x3b02fd89,0x3b268541,0x3b1859d6,0x3a0ab342,0xb8c08680,0xbaec0a99,0x3af236e4,0x3b604969,0x3b084e8b,0x3b3766e2,0x3b1396d5,0xbb351b12,0x3ac91c7d,0xb96b7a1e,0xbb3e64d7,0x3a9b7a80,0x398daf07,0xb94afd0c,0x38c77f2e,0xb8083509,0x37eb42ed,0x3632f550,0x37548cc8, +0x36d27667,0x365e9ec5,0x3699b03d,0x36b8ba2a,0x37acbce2,0xb8117775,0x37ae14b2,0xb9139105,0xba05d9b2,0xb705c229,0x39cb7062,0x39eba5cc,0x38dc331b,0x3b0121e2,0x3b232f6c,0x3b62cec2,0xb9c8b174,0xba87a796,0xbb13bfe1,0x3b306675,0x3b99c1f7,0x3a8920f7,0x3b1afe62,0x3a8142de,0xbb88b902, +0xba4258c2,0xbb8f73e6,0xbc7e1c7b,0xbb91b125,0x3813dfe9,0xb88a7c76,0x37fd3b86,0x36e8cfa9,0xb80b3f0c,0xb6eada59,0xb75df91a,0xb7ad981b,0xb54a65e6,0xb79ac004,0x35a470ff,0xb6e25185,0x37448910,0x37c3ba32,0xb9d8e70e,0xba42e8d7,0xba6eb000,0xba6ce5fe,0xbab56afe,0xbad375f1,0xbb31d410, +0xbb650da6,0xbb469a0a,0xbb1acdd5,0x37df4b3e,0x3b5a666c,0x3b6152ff,0x39f85ba7,0xbbbba4ef,0xbb84d7a1,0xbb349039,0xba070491,0xba619d5b,0xba202343,0x39eb40e1,0xba0b1da9,0xb83306f1,0x39c44412,0xb9b0368b,0x3867ff4d,0xb67e4740,0x381f7bb3,0x37d58b04,0x380e4571,0x37eae744,0x37f16850, +0x37ee5360,0xb70fcb82,0xb7d8d994,0xb8aed2d2,0x3a0fd168,0x3abbdb34,0x3b0caf97,0x3b1189e0,0x3b041531,0x3adab00c,0x3a5d4f00,0x399d7bf9,0xb74dd8cb,0xba88ae3d,0xbb091e7e,0xbb3c99ea,0xbb1fc27d,0xba773f62,0x3a0a860f,0xba490f49,0xbb0ba61c,0xbb584dc7,0xbb31e7a9,0x3aec0b45,0x3a708311, +0x3a068f01,0x3a6da88c,0x39f815f0,0xb73caef9,0x379437e3,0xb8bad015,0xb81bec76,0xb8ddb1ce,0xb8132e24,0xb89604f1,0xb7cd11ee,0xb852b3ba,0x37c60a56,0x3735fb4c,0x38ad9abc,0x3a47367a,0x3a64672e,0x3a664925,0x3a14ff73,0x37d33a4b,0xb95ead96,0xba903138,0xbacd5245,0xbb1d89c4,0xbaf4c4e9, +0xbad1c1a5,0xbaa49bb5,0xbab739f6,0xbaac7051,0xba1846a5,0xb8e4e00f,0x3a2efca8,0x3acfbb48,0x3ae72550,0x3aa6b816,0x39d98cf8,0x398e6905,0xb9777caf,0xba3aabbb,0xb8aa4fb6,0xb8863ed7,0x39183f9f,0x38eb0d91,0x39273248,0x38f27d77,0x3914ae3c,0x38a10c74,0x390d849d,0xb87c99bd,0xb89fc4c3, +0xb912e50f,0x38f13ee3,0x39e4b43d,0x39f16c47,0x3a200978,0x397cfa7e,0xb79bc4ba,0xb87d1ff5,0xb9a23cf5,0xba30ec54,0xba41b0c4,0xba8c64c4,0xbac73788,0xbaab9af2,0xba49550d,0xb9c72607,0x3980aeb5,0x39e7cb7d,0x39e8438a,0x39f5d7f9,0xbaa9b83c,0xbac5d81b,0xbb086e20,0xbab18174,0xbab1f961, +0xbaa2411f,0xba701aae,0xb9e81edf,0xb9c4383c,0xb9927e22,0xb9a6f5ad,0xb98d32a2,0xb9987a83,0xb9a4aec4,0xb9cafbc2,0xb96ce46f,0xb75961a2,0x3920d511,0xb8a583dd,0x3a36756c,0x3a2f4845,0x3a174f6c,0x3a086757,0x39ca1831,0x39ce7d3f,0x3a01806c,0x399a1c44,0x39a33853,0x39a70dd6,0x394e9be0, +0xb87d768f,0xb9a0d3bc,0xba2c70d8,0xba70cd5a,0xba583f28,0xba8e6ba1,0xb97a966a,0xb9b3ee09,0xba6d9219,0xb9f10c43,0xba069071,0xba25f040,0xb9f36348,0xba28c866,0xb9f541cf,0xb9f93102,0xb9b957be,0xb96346d3,0x384a88b4,0x39464c35,0x39df0d91,0x3a1e51fe,0x3a531580,0x3aa2037e,0x3ab475a2, +0x3aec7dbd,0x3ad8b345,0x3ad7be31,0x3ad49501,0x3ad71524,0x3ac77575,0x3ab22079,0x3aae27b4,0x3a8c3e1c,0x3a5495a3,0x3a3e73e4,0x3a1a385d,0x3a1b2c78,0x3a01df75,0x39fb325f,0x3922a82b,0xb8f6ecd4,0x399e1ad6,0x3971afdc,0xb8cd5105,0xb97bbea4,0x375b0b3e,0x38f3bf0f,0xb8664f34,0x3823fc48, +0x3902bcad,0x396102b8,0x399bd32f,0x39a687f6,0x39a588b9,0x39a8cd8c,0x395e8232,0x3a03909e,0x39ececbf,0x399703d2,0x3a0a4407,0x3a6d8014,0x3a5ffbed,0x3a65f711,0x3a62eb0b,0x3a63253d,0x3a6a11b7,0x3a6f674f,0x3a6bff0d,0x3a60be26,0x3a6aae8a,0x3a60d612,0x3a437f39,0x3a2e8895,0x3a08f1a8, +0x39f72475,0x39d0e2ab,0x39b2df24,0x3aad1028,0xba094fba,0xb9b0c529,0xba196949,0x3934280b,0x39b2e91a,0xb9846040,0x372af985,0x39827910,0x38cd5257,0xb7cce94a,0xb8f1cd61,0xb933797a,0xb995c9ce,0xb9a62c66,0xb939dbfd,0x3927b020,0x374f5395,0xb987abb9,0x397a79a6,0x38e91552,0xba229b81, +0xb9f8414a,0xba016e58,0xba14b1be,0xba3468b2,0xba2d3e7f,0xba041967,0xb9c2f282,0xb9a33455,0xb9e2cf75,0xb9bb89a8,0xb9a1acff,0xb933e53c,0xb970eef3,0xb98b99eb,0xb9d948b9,0xb99ea8d8,0xb948121e,0xb7c7eee4,0x39e25487,0xb9b6d0bf,0xb951e9eb,0xb9905ef6,0xb8650489,0x3986b0da,0xb87ac790, +0x383d4706,0xb90a4cf6,0xba03cec9,0xba32c635,0xb939101d,0xba16a0b8,0xba023e63,0xb8c2faf5,0xb9d5a242,0xb8ab93a6,0xba048066,0xba1ed6df,0xba09fc3a,0xba57df40,0xba7d4b5c,0xba5a07db,0xba11e4f5,0x364b414a,0xb900bc0e,0xba6ddc45,0xb9f01143,0xb84a45fc,0x3a170ce9,0x39cf1009,0x3918fcab, +0xba161196,0xb8e82e4d,0xb973eae3,0xb8f40108,0x39b2f81c,0xb93510d7,0xb8875ca8,0xb9823ced,0x38958473,0x397f230e,0x38fc8b35,0x387deae6,0x397c6e28,0x389a2a8b,0xb90a7afb,0x3950116a,0xb9e4a85a,0xba3df41d,0x38008470,0xb9bbbef4,0xb90bb221,0xba66d00a,0xba4820fb,0xba6566cb,0xbab30a15, +0xbaf7c5c9,0xbae2b58b,0xba5bd6fe,0x38f019e4,0x3994f433,0xba7bbf8c,0xb963509a,0x394bd07d,0x3ab18812,0x3a54b968,0x39f22860,0xba110f56,0x392ead66,0x39714459,0x39ced27e,0x3a3a7ca5,0xb90001d3,0xb9a65a72,0xb80f9d05,0x385fa38d,0x378c76fc,0xb738be38,0xb6df998e,0xb7d188ca,0xb7b7a04d, +0x391ad855,0x36332159,0x3998c3c6,0xb9838c99,0xb98002d5,0xba4a65b4,0xba113fef,0xba824820,0xba63ec6c,0xba49a695,0xbaac0040,0xbb1e1ec1,0xbb0695af,0xb9d24a8a,0x3a6b5737,0x3a18ef9e,0xbb04700a,0xb931246d,0x3a5582c7,0x3b3e2a01,0x3b036d2c,0x3aab2476,0xba7de788,0x39ef8e97,0xb8ce5577, +0xb9e12ec1,0x39abe9a5,0xb83ba28f,0xb6a110bf,0x390dc148,0xb7693073,0x36904e50,0x3589a916,0x375e885c,0xb4227b20,0xb796ebff,0xb8041b10,0xb8959b96,0xb7cdf6e6,0x38933f0a,0x391114d5,0xba1ad3bd,0xb9b0b8b3,0xbaab1277,0xba8eb3cd,0xbaaf44be,0xbb1ee74e,0xbb70ea02,0xbb519975,0xbad7beb5, +0x3a0a5486,0x3a806e48,0xbac8f151,0xb9637e43,0x3a879290,0x3b41ecb1,0x3b06d9ba,0x3a4cd0b6,0xba52a193,0x39d42625,0x3b256c7c,0x3b252525,0x3b14e8b3,0x3a2a7bbe,0x390528d4,0x37d77b7c,0x3785842b,0x37944645,0xb551c40d,0xb6fc4f10,0xb63a285d,0x37182391,0x37646bc4,0x37876b3e,0x3835de13, +0xb9046328,0x3992d219,0x39938cf4,0xb96a2910,0xba57337a,0xba83d054,0x39514f61,0x3b01f492,0x3bd78940,0x3bcf5561,0x3bb01f01,0x3b290a06,0x3a554cb5,0x3a27bf45,0x3a928d95,0x3ae6f53b,0x3b42f67a,0x3b5ef4a1,0x3b8d2397,0x3bbca938,0x3b645dbc,0x3a240f94,0xb85e5795,0x3abbc7a1,0x39e6db7d, +0x38848aea,0x382faa90,0x36e7394e,0x37a82bf6,0xb6c9ac4d,0x37180af8,0x3618440d,0xb6b90927,0xb684a201,0xb7a5f1d3,0xb5f92ebe,0x376b9018,0xb823427f,0x384a457c,0x39c6a88c,0xb9442016,0xb95bb6d3,0xb9de3710,0xba86c253,0xbb473a52,0xbb5ce7d0,0xbb55225b,0xb92fe722,0x3aff6281,0x3b750fc3, +0x3aa72a8c,0xb98961cc,0xbb0159b8,0xbb19c79e,0xbaa57a76,0x3b03a4ad,0x3ada8fc8,0x3b3a2159,0x3bc666ce,0x3b664241,0x3985fab7,0xb5b206d0,0x37d55023,0xb79553f7,0x36de63f8,0xb6965fb1,0xb61fd7c0,0xb63d7beb,0xb4bde9c4,0x35960802,0xb69320fb,0x37c09d3a,0x371ac99e,0x38b3617b,0x389895d5, +0x3a1a9e91,0x3a0649fc,0x3a265270,0x3aa3427f,0x3a95b591,0x3afc494c,0x3b0c4df6,0x3aee97ec,0xb99be281,0xba50a849,0xbb1f4a22,0x3a7d353c,0x3b35af6c,0x3b2f45ce,0x3b727461,0x3b4c1f4e,0xbb014a65,0x3acf7537,0x39b45bfc,0xbb395361,0x3a583c3e,0x3976edfb,0xb90e2d5f,0x38df215e,0xb733e6e4, +0x37ad707e,0xb608938c,0x36ce9761,0x36c0e641,0xb5ae90cb,0x3753970e,0xb77d6b54,0x37b9a959,0xb830cc3f,0x38f37c81,0xb915b147,0xb96a4fdd,0x39850ba7,0xb93efe02,0x3a1c9109,0x3997d06b,0x3b12dfe4,0x3b2c3491,0x3b4cc6fe,0xb9c5c479,0xba3d15ff,0xbabd4e7e,0x3b1c2236,0x3b7dc73e,0x3a88d09f, +0x3b4f7a68,0x3b192704,0xbad7e6b8,0x39b9b663,0xbb2629fd,0xbc576eaf,0xbb73265d,0x38f48dcf,0x3914b384,0xb833a559,0x374e2f60,0xb7c3f02e,0xb6f9c1d6,0xb750ff43,0xb3ef9a8a,0xb6f3a44e,0xb712df58,0xb78ca9bf,0x37738537,0x3716bccb,0x39027a11,0xb994f994,0xba1282e2,0xbab71e41,0xba9b982d, +0xbac73249,0xbad8dd1b,0xbb17c29d,0xbb355d04,0xbb0ee95f,0xba975707,0x3aa1f42b,0x3ba80549,0x3b71d5a4,0x3a276f8b,0xbbbc854d,0xbb08e520,0xb8f9e6f8,0x3ae07e2f,0x3ac3d7ad,0x3a1266ad,0x3962096e,0xba271e85,0xb9e593df,0x39f467c8,0xb96590c3,0x391ba372,0xb5f0d312,0x38843a1c,0x3737b887, +0x37b11817,0x372064b7,0x37ef8619,0x378ce4ee,0x365514f4,0xb6956ba4,0xb935ae66,0x3a14abb4,0x3adbd03f,0x3b1a08c0,0x3b02da55,0x3b095749,0x3ac9724c,0x3a81d4ea,0x3a220d4f,0x39f95b48,0xb9164d05,0xba87330e,0xbac88443,0xbacee532,0xb9b14779,0x3a8c6739,0x39c8bbc9,0xb9ec1fdc,0xbae12590, +0xb96650bb,0x3b17da3b,0x3ae6d587,0x3ac6db75,0x3aa0a33d,0x3a1d8a6c,0xb7dd7dbe,0x3864da67,0xb8b039fb,0xb7de6a56,0xb8231587,0xb7e8b45f,0xb7d1841d,0xb830fb6a,0xb81d64f0,0x36846f0e,0x38bb62b4,0x3906656d,0x3a4bbf7e,0x3a8c0070,0x3a56de97,0x39fe5cf9,0x37cdcefb,0xb93fbae8,0xba2a6288, +0xba7a43e5,0xbae3beb2,0xbabd1858,0xbabf57c3,0xbaab1fc8,0xbac5127a,0xbab8e218,0xba3a432f,0xb9e2bc7e,0x3a180b02,0x3ad8c4fc,0x3b1106a2,0x3a8153cb,0x3ab0aba6,0x3a9e5a82,0x39ccd0e0,0x38dc0cb5,0x355090f3,0x39014e7a,0x391ab6b9,0x3908398a,0x389937d3,0x386564d9,0x381ccad6,0x38d840d8, +0x38a4e1f2,0x37cf834c,0xb789d059,0x383fd854,0x39993694,0x3a09127f,0x3a5f6411,0x3993e54d,0x38ec7d82,0xb98c9e31,0xb91fa67a,0xb9dd7f7a,0xba647f0b,0xba66dfd3,0xba9a0ad8,0xbaca372b,0xbab08296,0xba51252c,0xb9dc5819,0x3919a9ab,0x39a0282c,0x39803732,0x3a17c7c1,0xba9d0e83,0xbaac9f2a, +0xba975e44,0xba629931,0xba31f0c1,0xba22a180,0xb9df0363,0xb9260df1,0xb9431646,0xb8dac727,0xb638c58b,0xb8b47f77,0xb93e4695,0xb9475124,0xb950df16,0xb96f054c,0xb7da71b6,0x388b0a89,0x39a63682,0x3a0af0fc,0x38ce4924,0x3994d88f,0x38799695,0xb88c00af,0xb907c696,0x35926042,0xb84ec1de, +0x38f966f5,0x39b4bc3b,0x396f62f9,0x36e11036,0xb983616c,0xba1718b8,0xba3b24c9,0xba30c751,0xba596216,0xb98260ea,0xb9bd9c93,0xb969a833,0xb9fb1b1c,0xb9988821,0xb9e90a47,0xb9e4c3db,0xba0b6971,0xb9e0ba5d,0xb938da2e,0xb8716da8,0x38ec21a3,0x395959d8,0x39cbe8bb,0x3a30e023,0x3a67879f, +0x3a97bf38,0x3a9c76f3,0x3ae653cd,0x3aa8d70b,0x3aaa02fe,0x3a9f7ddc,0x3a9f983f,0x3aa37f1d,0x3a96739b,0x3a83d783,0x3a4a9b01,0x39ea8ad1,0x391e6429,0x38c02969,0x389ce37b,0x395797be,0x39287334,0x3935421e,0xb8ab937c,0xb98d02e8,0x3766d2d8,0xb8e13e1c,0x39abeaae,0x3a0d0ac9,0x39d909f3, +0x39d89c9c,0x3a2a1f0a,0x3a186e19,0x3a298d0f,0x3a25a36c,0x3a2935a0,0x3a36d2dd,0x3a4611e2,0x3a4df771,0x3a6c1326,0x3a2c782d,0x3a515b13,0x3a75f7d1,0x3a3f1e0b,0x39be68ea,0x39e3d8ec,0x39e4eb62,0x39d7e650,0x39ca5d4a,0x39d43c3e,0x39ea09af,0x39f7c454,0x3a047834,0x3a159a62,0x3a118f9d, +0x39e0dbd9,0x39b0b274,0x395e7848,0x3942e348,0x390a084c,0x38a536a2,0x3a755f34,0xbaa12574,0xba35b65d,0xba3bda53,0xba98f936,0xba6bca7f,0xb956d529,0xba8ac0d8,0xba614e4f,0xb903faa0,0xb9365d45,0xb92ad030,0xb910722b,0xb9750499,0xb93a240a,0xb8b17928,0xba770810,0xba98bfa5,0xb840c6cd, +0xba5658f6,0xba8a5bff,0xba481ca6,0xba5dff6d,0xba74f890,0xba81e235,0xba8c9680,0xba8678dd,0xba64682f,0xba45252d,0xba3d1b9a,0xba6259d9,0xba572e70,0xba48554c,0xba281b6e,0xba46c4fb,0xba494b3f,0xba495d16,0xba35aa73,0xb9f380c0,0xba7b426e,0xba426d08,0xba515ef9,0xba3cf1ea,0xba65a08d, +0xba5328f6,0xb9003d72,0xb9c2e641,0xba25937a,0xba252289,0xba95aa04,0xba8db976,0xba37f0f3,0xba72fe78,0xba958c5b,0xba4c637a,0xba7653c7,0xba92d4f4,0xbabaff3a,0xba8a32fb,0xbaa362b8,0xbaca9d8c,0xbad2dd29,0xbac25f05,0xbab143f5,0xba43aec8,0xba6c707d,0xbadae8c5,0xbaaadf52,0xba7193ac, +0xb9ae7a60,0xba4f009c,0xba71fa8e,0xba8d7f7f,0xba3c93a8,0xb9c5bcbe,0xba6f48fc,0xba69b602,0xba4f124b,0xba35c43c,0xba2c4020,0xb9a3081b,0x38349b35,0xb90a4ef8,0xb7b8a8c2,0xb8a890b4,0xb77dfa5c,0xb88d9e2a,0xb9042ffe,0xba02f846,0xba77fc76,0xba2396eb,0xba3911ee,0xba80a192,0xbab62242, +0xbaab960f,0xbaf2a23a,0xbb18faf6,0xbb2dda02,0xbb180eb2,0xbad400b2,0xba35225a,0xba1fbb8e,0xbb0393a0,0xbaac9b43,0xba8b078a,0x38a68582,0xba6346dc,0xba70c93f,0xba74449f,0xb9fcdc45,0x399d6af7,0xba04d1e5,0xba28190e,0xba382470,0xba0a8747,0xb7af2f93,0x384d986d,0xb8dd1ede,0xb69dd752, +0x37163363,0xb7cad653,0x37a37130,0xb7f10f92,0xb5d22ce8,0x394461ab,0xb867af07,0xb9d56697,0xba8301ea,0xbaacddd1,0xbae4d226,0xbabccbe7,0xbaf0d279,0xbb300161,0xbb654bad,0xbb54f55d,0xbaf8ba50,0xb9f38552,0xba523d14,0xbb5defb8,0xbaded8a5,0xba8c3743,0x3a912a44,0xba2a0393,0xba453e21, +0xbaa3d2f0,0xb9abd860,0xb89e7bde,0xba83a2da,0xba3c7093,0xb99ae7be,0xb8d94598,0x37194b76,0xb87413c8,0x38038c75,0xb6020d78,0xb7863112,0x3785d21a,0xb71cce18,0x372eb9d0,0xb82fa0de,0xb89c67fb,0xb7d2b043,0x388008e3,0xb963b4dc,0xba8282ab,0xbaefda8e,0xbae22a45,0xbb3e05a1,0xbb86514b, +0xbb9d802e,0xbb86ac7f,0xbb271489,0xb9ef0a47,0xb9a51bd1,0xbb3e8ad4,0xbb01601c,0xba8cf33c,0x3a7b1523,0xba730825,0xbab2de86,0xba6619b7,0xb9631805,0x3a7cc9f6,0x3a99fc27,0x39862461,0x36dcb483,0xb906bf54,0xb7a22a1c,0xb80d627d,0xb76d652d,0xb788f2bc,0x370a27f5,0xb6db6a0d,0xb5af1706, +0xb51cd46a,0x378f8385,0x37b18dae,0x35d1bf77,0xb902bd66,0x3938fd08,0xba5173dc,0xbaca41f8,0xba87116f,0x39e2d728,0x3b3d3edc,0x3bcea5c0,0x3bbf543e,0x3ba105e4,0x3b10c7b3,0x3a60a7a6,0x3a098e29,0x3a6f96de,0x3a48e1f3,0x38f1e32c,0x3aa6225f,0x3b157006,0x3b7c6b1f,0x3ac68148,0x3ab3ca31, +0xba7f5b02,0xb8e41d6c,0x392e683e,0xb948a92a,0xb6a9622b,0xb78b81ee,0xb5ed01e0,0x36178ae0,0xb6b2c6e4,0xb59c072c,0x3622287d,0xb6231e52,0xb59de481,0xb822b4b9,0x379b86e6,0xb8cc7219,0xb796ced2,0x3969e66b,0xba382fc4,0xba990d9a,0xbb130081,0xbb4fae15,0xbb8bf956,0xbb8356f1,0xbb481850, +0xb9245a95,0x3ae8f0c5,0x3b3c9ee1,0x3a388636,0xba6ca6c9,0xbb20bc63,0xbb3db68d,0xbab95e77,0x3b16eab1,0x3ad7abcd,0x3b2986a6,0x3ba6bb0e,0x3b3071fd,0xb8a98d25,0xb88c1015,0xb71f7e46,0xb7ab2c9e,0xb6e99d87,0xb7028bb3,0x358434df,0xb62f65ab,0xb600aa76,0xb6558205,0x36b5cb99,0xb72a9427, +0xb8225411,0x3703c1ca,0xb904940f,0xb89d29dd,0x390320b6,0x39f64330,0x3a5212dc,0x3a49a263,0x3aa1202b,0x3aaffdcb,0x39bd5816,0xba8792a9,0xba967f31,0xbaf47aa7,0x3a95f555,0x3ae89c6d,0xb6456d4f,0x390dee49,0xb9d8adbe,0xbb6e8a00,0x3a47f2a3,0xba2ae524,0xbb29a754,0x3a096eab,0x3800c968, +0xb9056a8b,0x38819688,0xb7dbecb9,0x3779e5b1,0xb665b563,0x35e78f25,0xb55063c1,0xb58aa463,0x368c8246,0xb674e7c7,0x375cefb7,0xb8575f95,0xb7af7423,0xb8521830,0xba3fab18,0xba17d499,0xb7eeb4f6,0x39f228d4,0x39a0e4f2,0x3ae33d1d,0x3acc07a4,0x3a76bac4,0xbb078f32,0xbb07b9f8,0xbad7a25e, +0x3a9e3354,0x3b04fdf8,0xbab17f36,0xba060d16,0xbaf09cc4,0xbbb3a977,0xbac20ce3,0xbb8d4b70,0xbc4241fb,0xbb740bf8,0x3993b4e6,0x37b04a30,0xb8bc9b37,0x3778a787,0xb838d095,0x36a34c93,0xb6e0b58d,0xb6b3c8ba,0xb698dc33,0xb72d31ed,0xb74819fa,0xb6b8c7aa,0xb7e0f2cd,0x388b2730,0xb9507d31, +0xba57f38d,0xbab02a6d,0xbac11b59,0xbb0eca6a,0xbb235ce6,0xbb4eb70a,0xbb596803,0xbb20cd8e,0xbacdd9b7,0x39cfe741,0x3b7bd5ef,0x3ada77eb,0xbab661f6,0xbbbef881,0xbb873b5f,0xbb366731,0xbb0461ae,0xbb01669c,0xbb1ca452,0xbb6b96b2,0xbadf5a89,0xbaae2c7c,0x39f1b608,0xb98527a6,0x3892e183, +0xb7de6854,0x372bb095,0xb6cef00c,0x368a1ddf,0x36626617,0x37806b6e,0x378a5659,0xb6ebc4da,0x36f8b343,0xb906a6ed,0x38bbc552,0x3a6cce36,0x3adb266c,0x3ad82079,0x3af03fb2,0x3ab28ec7,0x3a25265b,0xb8ea19e1,0xba84f985,0xbae667f3,0xbb32f0d8,0xbb6cb5e6,0xbb3dcda5,0xbadbde04,0xba6e9454, +0xbafdb47b,0xbb38bc58,0xbb751e79,0xbb1ad9ed,0x3a231da1,0x3942704b,0x3a5da942,0x3a54940d,0x38558528,0xb89ad748,0xb7ad4d00,0xb8b803ef,0xb6ef2078,0xb84f026c,0xb4d5fb36,0xb7ee185b,0xb807ebc1,0xb7f12710,0xb8823134,0x37d35e8f,0xb8d4b090,0x3a18874f,0x3a89bd3e,0x3a8b8615,0x3a1461c7, +0xb89e167f,0xb99a731a,0xba94f6f7,0xbac307e2,0xbb1080d9,0xbaeafd6f,0xbacf6c38,0xba94f073,0xbac2536c,0xbadb265a,0xbabfa717,0xba806d70,0xb96a5730,0x39ecf996,0x3a21a066,0x39e63917,0x3a65d20e,0x39c3a4a7,0x37c22de4,0xb93fa87a,0xb891431a,0x381b6d45,0x3882a2de,0x36ce0542,0x37e23b4c, +0x36b039e9,0x37edfc1f,0x385f7e39,0x387df6b8,0x37feb471,0xb7394627,0xb900a264,0x376a1f6e,0x39608dff,0x39e6f707,0x3956b33f,0xb838e04e,0xb9d460ca,0xb9d939ba,0xba4859b4,0xbaa0264d,0xbaa7a6b3,0xbacaff04,0xbaec4078,0xbad0546c,0xba9570c4,0xba86c1ea,0xb9ecba5e,0xb9758b8d,0xb937027c, +0x3927704d,0xba91480a,0xbab89adb,0xbaaf12f6,0xba7b5f01,0xba54f248,0xba29952a,0xb9c25dc9,0xb8c24783,0xb918d4b6,0xb69ec710,0xb893eefc,0xb80e0e5d,0xb8e983da,0xb9782d95,0xb93bb9f1,0xb9b67266,0xb980dfbd,0xb93f2726,0xb98b5980,0x3770a3c7,0xb7ab5910,0x37e7d2b6,0xb8368137,0xb96692ba, +0xb9866d76,0xb930ce20,0xb994821f,0xb98e1468,0xb9a4c617,0xb9f34d5e,0xba37d2af,0xba6b0619,0xba862d8c,0xba909d1f,0xba809cac,0xba8b3517,0xba17eb96,0xba180bf2,0xba2680d6,0xba3d5da1,0xba41e1e6,0xba603867,0xba695aa8,0xba3f4ebe,0xba3422fa,0xba1ea9f4,0xba01ef8f,0xb9e694ef,0xb9b7f7eb, +0xb940d9b9,0xb9474f19,0x388050be,0x3a01254a,0x3a173c5e,0x3a9af534,0x3aa78cf9,0x3aa33b60,0x3a8a7c2c,0x3a87b62e,0x3a855ba3,0x3a6b0ad2,0x3a43c5ee,0x3a0ef88c,0x3996974c,0x375991b1,0xb902ce93,0xb988c5c7,0xb9d4ae40,0xb9d21d10,0xb9a2b9fb,0xb9f574a6,0xba24df06,0xb9853de5,0xb9c16755, +0xb9fb08f5,0xb950b93f,0x3997c57b,0xb9b00e27,0xb92d87fd,0x397ab6f2,0x399eaa7b,0x39b1e18a,0x39d249d5,0x39f509c9,0x3a13bfdc,0x3a1fc9c1,0x36e9d957,0xb8f9778e,0x3a27cd75,0x3893cd16,0xb8d08427,0x39017e3d,0x38c26419,0x38ed5370,0x38d9011b,0x38ba8b1c,0x38f291c7,0x39229a47,0x390d8203, +0x38eb4478,0x38f9cd3f,0x388bcd92,0xb793ccff,0xb8d46a24,0xb929eb2e,0xb9362e4a,0xb962bb51,0xb97cf5e3,0x396f1f85,0xb890c9d6,0x37fb7813,0x38dcf0bc,0x394a2292,0xb9b2a86e,0xba87de83,0x390006ff,0xb97b0a75,0xba3a6428,0xba6281dd,0xba75bd77,0xba6de2d8,0xba89bd7f,0xba9c8a00,0xba7ad313, +0xb9a95f11,0x383c6de3,0xba92bea1,0xb9d530df,0x384ee8fa,0x382c1b1b,0xb85d5ad8,0xb837f5f0,0xb8fc79d2,0xb918d250,0xb8ecd5d7,0xb7972509,0x38b943a0,0x38f8245a,0xb8178532,0x389cc2b6,0x39058df8,0x3993db8c,0x39366295,0x39077a99,0xb7b35f7f,0x38bb5fa3,0x397afd2a,0x39d03ab5,0xba2c4cc4, +0xb983f942,0xba0a884d,0xb99ed7a6,0xb9392578,0x39006310,0xb70c5f53,0xb8e44bc2,0xb9820769,0xb9be4a39,0xb9f0fc31,0xb9bc8c26,0xba92cfd1,0xb9e30c29,0xb9cd9bcc,0xb9b90c03,0xba0feb8c,0xb815f8e1,0xb88e36a3,0xb87257f3,0xb997f715,0xb99388f4,0xb90fb8f3,0x387d723c,0x3a02a85b,0x39b56697, +0xb9d8db4c,0x3911eb96,0x3a05b635,0x3a915d8d,0x3a37f99b,0x39d68163,0xb96058d8,0x395e5782,0x39788881,0x39129f7b,0xb902c982,0x38e4849a,0xb998607c,0xb94c6276,0xb85ab7c0,0x39556eb6,0x383a285e,0x395bbb5e,0x3930917a,0x39a0f1b1,0x38eb81fb,0x39a735fc,0xb8986146,0xb9927825,0xb9176620, +0xb9abf703,0xb9875ebd,0xb9f6f080,0xb85ead27,0xb9c8e72c,0xba36d950,0xba6439e8,0xba26193e,0xb8843360,0x3a34d17e,0x3a3aa5d8,0xba1658f9,0x39b20c24,0x3a475f8e,0x3af2f14b,0x3a86cca8,0x3a2708d2,0xb986ecae,0x39cde18d,0x3a2e378f,0x39d7ceda,0xb7a4ebf1,0xb984902d,0xb92ad41b,0x38a336fe, +0x37e4f70b,0x381f1b9f,0xb7d45c86,0xb80686b8,0xb881007e,0xb8888e33,0xb7ac6848,0xb8025bc5,0x390a8a57,0x390bca25,0xb7eeed1b,0xba0f1eeb,0xba227117,0xba58bb0f,0xb89c9f86,0xb9ad4829,0xba440a82,0xba90d971,0xba2fdac1,0x39a69160,0x3aad3634,0x3a6a4601,0xbac4c0b8,0x3a0b6ab7,0x3ab744a6, +0x3b5f7669,0x3af1fe77,0x3a8bc6ce,0xba3a2ca7,0x39e40a27,0x397e08dc,0xb96271f1,0xb8bac2ef,0x3824af55,0x3919b989,0x381110ee,0x36f8e643,0x36585b25,0x3745f90f,0x38150b95,0x380bc791,0x37ed23b7,0x37af407b,0x37f77a4a,0xb7e14d68,0xb6bd9244,0x39192e0a,0x3838f27e,0xba2a50e2,0xba54185b, +0xb9b5cf98,0xba612de1,0xbad33869,0xbb0a253d,0xbac3114e,0xb9f8ee7d,0x3aa95f79,0x3aa8fecf,0xbaa1fa91,0x39cd27ab,0x3ace48df,0x3b5889a2,0x3afab33a,0x3a306182,0xba0b10df,0x39f36f95,0x3b048937,0x3b3e5bc0,0x3a8b06f3,0x3829ac86,0xb7362a24,0x378c549b,0x37f43e7d,0x37547355,0x36a8852a, +0xb7303b9a,0xb74b248b,0xb6e6d9d4,0xb75d1b8e,0xb55cc898,0x374afc69,0x38911968,0xb8d67376,0x399eb31f,0x38b9b0e7,0x381d016f,0x3a51657f,0x3ad6e1f6,0x3b4a38f6,0x3bc74e9a,0x3bb308c5,0x3b76686c,0x3b099076,0x3ab8332c,0x3af963dc,0x3b2e4591,0x3b4bffbb,0x3b446fe7,0x3b784f6d,0x3b8c0740, +0x3ba05d85,0x3b345d1f,0x3abab6f8,0xb946e60a,0x398f01db,0x39bd17f6,0xb87e8a4a,0x38e6aef7,0xb7d12bfb,0x37d15df5,0xb6883bd8,0x377b478b,0x36cd542a,0x36e0d055,0x36b7cece,0x36f8f2f2,0xb636eea3,0x3830f23b,0x3801399b,0x3849d920,0x37f52300,0xb9004b1b,0x38f1ee1d,0xba01555b,0xba300919, +0xbb2ed779,0xbb28e26a,0xbaf86ffa,0x3a3074d6,0x3b0c2dec,0x3b35ddfd,0x3a9fd104,0xb85265fc,0xbae62b14,0xba932a81,0x38ca31cf,0x3b28ac6d,0x3b1345d5,0x3b2482c4,0x3ba3b741,0x3b32fbbf,0xb981064e,0x391168c9,0xb7630429,0x3704027a,0x3720d057,0x35982692,0x361fb53a,0xb6055dc3,0xb4af5df9, +0x35cb2424,0xb6b2de63,0x37d7afe1,0x376d4831,0x38136b15,0x37bcd0cc,0x39a739ba,0x3a6874b8,0x3a882645,0x3acf1f9d,0x3ae2e751,0x3b2e4663,0x3b3ec3d0,0x3b05687f,0x3a15b79d,0x3936f4d8,0xba7170c2,0x3b06e04c,0x3b675065,0x3b47df00,0x3b5f16bc,0x3b2950a4,0xba9560e7,0x3ac1299a,0x399107eb, +0xbb09e51e,0xb8fb6139,0x38c97fb8,0xb8e497ab,0x38a1d0c2,0xb69af671,0x374a9426,0xb6110593,0x365aff3b,0x34e39971,0x36626af2,0x35e78419,0x35f28e7e,0x35770ed5,0x3812fa5f,0x374c5a82,0x38c5364b,0xb9f59611,0xb7a20eb2,0x39c0d578,0x3a9a5744,0x3a8c4130,0x3b526b6e,0x3b5cf3f8,0x3b34c452, +0x39c66ba6,0x3909a3a9,0x39aa11d2,0x3b20b2be,0x3b6f1362,0x3b0e54c4,0x3b76fe25,0x3b42a443,0x396bba4d,0x3a3a4f7a,0xba9f227e,0xbc183ff1,0xbb34d108,0x39fa6260,0xb6b28cfd,0x37e47954,0xb6811cb6,0x36bd9e7f,0x3707a343,0x3600c1ca,0x36e929d3,0x3642461d,0x36f2f453,0x360437a4,0x37074e85, +0xb6860c2f,0x3848d30c,0x381d9267,0xba2346ae,0xba92d35d,0xba466cfd,0xba8723ff,0xba898008,0xbae0fb43,0xbb0781f2,0xbac35e3a,0xb9a1641a,0x3acb1514,0x3ba3c3c2,0x3ae7be23,0xba4eb97c,0xbb88c014,0xb8a3b493,0x3b1a6db9,0x3b8dcb2b,0x3b049ff3,0x3b163fc3,0xbb4c4580,0xbb536977,0xba28a805, +0x393fdd4e,0xb85c1a20,0x389e3102,0x3651e301,0x3695ecdd,0x34f01aa3,0xb6765de7,0xb6a00f52,0xb6f35cf6,0x371def5f,0x37292857,0x38207d7f,0xb8a003bf,0x389ea275,0x3a9574ac,0x3ae8b744,0x3adc35d4,0x3ace94af,0x3a988fa3,0x3a40bb9d,0x39f858a9,0x39ab0514,0xb898d063,0xba20357f,0xba286a59, +0xb9dcc53c,0x3a4a4b17,0x3b0b061b,0x3b05e427,0x3add83cb,0x3a8e1940,0x3b240cdf,0x3b127ec2,0x3acaa9da,0x3a833a6e,0x3a3c8270,0x36160bca,0xb70e7a3f,0xb712c1d0,0x36ea2d84,0x3815f664,0x37f7ef6d,0x37b1c2e4,0x381176e5,0x3760369a,0x37cf0ae0,0xb85ee3a0,0x38a9fd93,0xb847eb73,0x3a16872d, +0x3a819c73,0x3a8f60d8,0x3a60f0cf,0x3a0cd5a1,0x39e3b4cb,0xb854f83f,0xb9b17da1,0xba88e4c7,0xba72d0d6,0xba84d135,0xba79cb7d,0xba8d45ac,0xba57c772,0x399730ef,0x39cb1288,0x3a9bcfd9,0x3af56d7a,0x3b090e38,0x3abf6edc,0x3a8b587a,0x3a83054b,0x3a036da8,0x382256e7,0x390f1a51,0x38f7ae2c, +0x374cd1d5,0xb7d9dd98,0xb789c15b,0xb7fb096f,0xb829dda6,0xb7bacd70,0xb6cf9131,0x38bc382a,0x38880d1b,0xb8b65f65,0x38e1b7eb,0x39ac7d16,0x3a0d0e2f,0x39dbdf9d,0x395a7930,0xb920aa8d,0xb804eef5,0xb9b350d2,0xba5b725d,0xba4d1829,0xba81b75a,0xba9b9bc8,0xba4dd720,0xb905f901,0x39f50037, +0x3a1ccb55,0x3a0d92cc,0x3a1bc594,0x3a4826d1,0xb9cc8b79,0xb9d099d7,0xba609f8d,0xb9e53bcb,0xb9dc1ecc,0xb9c131c0,0xb903ed1e,0x38e8a085,0x390c6e07,0x38f315b9,0x38bdbaa6,0x393c2bba,0x385ec4d5,0x38e8674d,0xb9309cc3,0xb931c2a7,0xb9151f0e,0xb9029890,0xb95934ec,0x39912fcb,0xb89cf191, +0x3794514f,0xb923e2a3,0xb9cbddab,0xba002e26,0xb9dfa124,0xb953c8d4,0x38c30532,0x39d113fb,0x39c8a618,0x398210e2,0x3922ff21,0xb81e7a48,0xb8691299,0xb85b7f15,0xb9373dae,0xb90ad771,0xb90ec8ff,0xba2deb14,0xb9b9e7f2,0xb9a94dc6,0xba0f809c,0xb9c9469e,0xba2742ce,0xb9d69c66,0xb9dd2ac1, +0xb9c63949,0xb9a3758d,0xb93a4b03,0xb915d821,0x38dbb769,0x399be573,0x39e13fa9,0x3a5317f5,0x3a92e265,0x3a856d4b,0x3a737ad9,0x3a5b097c,0x3a561aa0,0x3a5be50b,0x3a483047,0x3a268ad1,0x39df4f86,0x397298d7,0x38a4bdef,0x391f2ede,0x399616be,0x3a00c299,0x39c10fec,0x39895835,0x387811da, +0xb88f1654,0x389bcd4e,0x387fb9c6,0x38bd6727,0xb903fb9c,0xb9b7abdc,0x3952658a,0x3882f31d,0xb99f5cdd,0xb9a4406b,0xb9899f48,0xb9663f97,0xb95a7b34,0xb96bd1fa,0xb959aea9,0x39967b42,0x39dcada0,0xb84ab499,0x397f5b2b,0x39baee4c,0x397b7aac,0x398cb124,0x39883789,0x396b4e9c,0x393f06de, +0x39429ead,0x396af11c,0x39969db9,0x39c21b9b,0x39e8648b,0x39e5266a,0x39afb39f,0x39955cec,0x395e1191,0x395db160,0x393e9bf9,0x390d5bf7,0x3a1525b4,0xbaa025cc,0xba515743,0xba8decaf,0xba5177df,0xb918fc11,0x39a1852e,0xba469b56,0xb9603781,0x39fb8b8f,0x39cd7319,0x39b45e7a,0x399a15f4, +0x39516e4b,0x398da0f2,0x39a06a13,0xb97ef209,0xba390ab7,0x39d39d06,0xb8e97f5d,0xba24b475,0xba84198f,0xba76b6cc,0xba87d5f3,0xba9074ff,0xba93ffd9,0xba8d7b5a,0xba7a256e,0xba610c2b,0xba5d9069,0xba81f2e3,0xba73a973,0xba60cfa6,0xba41c9fe,0xba5c1631,0xba5aa032,0xba55183b,0xba50b713, +0xba43a9dc,0xba923844,0x3949e3ce,0xba240467,0xb960fecb,0xba29164d,0xb9dec3e1,0x39162d4f,0xb92e33af,0xb91ae8d8,0xb8a32e27,0xb99fc053,0xb9dd615d,0xb993dad9,0xb95ddebf,0xba559f50,0xb9cfba72,0xba190bb6,0xb9ccc9d8,0xbaa5e186,0xba9e4579,0xbaafc663,0xbad95184,0xbacbddeb,0xbab9d3d8, +0xbab3055b,0xba760787,0xba92db45,0xbaed1b2f,0xbab9899c,0xba89518f,0xba0e32cd,0xba781faa,0xba8a62fa,0xba9029dc,0xba58a649,0xba51885b,0xba946baa,0xb9983d2f,0xba2fe4c4,0xb9950ad1,0xb966b61c,0x38faed4e,0xb8b73635,0xb6bc75db,0xb8c13026,0x36f89b18,0xb920c408,0x38b07b51,0xb58cfd50, +0x389b918d,0xb9a1a5aa,0xb9e45d76,0xb9a9b860,0xb9bf47fd,0xba9a11a5,0xbacef7f2,0xbaf7524c,0xbb219f23,0xbb1dff8e,0xbb09db2b,0xbace443c,0xba684d6d,0xba6d449d,0xbb117d44,0xbabc7522,0xba96cbd2,0xb909f666,0xba6cf88d,0xba67ec81,0xba559a07,0xba284b9b,0xb9c7aaaf,0xba6ad423,0x385481fe, +0xb9b952ee,0xb88282bb,0x38a5ebbe,0xb463b3b6,0xb8ab906b,0x378d5901,0xb73a42e8,0x36895809,0xb61905bd,0xb825f424,0xb89b64d1,0xb7bfdddb,0x38b300d5,0xb7a440ac,0xba21fe89,0xba243f68,0xba9daf47,0xbae29a0b,0xbafa6bf7,0xbb3b5dc6,0xbb440370,0xbb31d6eb,0xbae6a6c3,0xba55d0fe,0xbaa3b9dd, +0xbb686e6a,0xbaf1238f,0xbaa33779,0x3a227c02,0xba5fbbf0,0xba6e7f50,0xba9a8cf7,0xb9fb3f89,0xba3bd3a0,0xbabbab14,0xb973d8ab,0xb8b2193f,0xb6ca1e28,0xb864417b,0xb79d896d,0x37869e9e,0xb73ff82e,0xb7011102,0xb73d3489,0xb5d85c82,0x360f3d67,0x374d35a8,0xb72489cc,0xb8ec0cdd,0x38a1316c, +0xb93b9726,0xb94ea262,0xbac7410b,0xbb080a60,0xbb41d4da,0xbb883520,0xbb8793d7,0xbb6023af,0xbb155a62,0xba397d22,0xba6b5e1f,0xbb58325a,0xbb0c44da,0xba961f5f,0x3a2e2f4f,0xba4d25d3,0xba8309bb,0xba238153,0xb9b8b01d,0xb946ce1a,0x3a104dc2,0x3a2ea439,0x39271d82,0xb8671806,0x380e2573, +0xb802a932,0xb7000da7,0xb72914cc,0xb5b0c98f,0x363c4d00,0xb6a482f2,0x355feeac,0xb7947794,0x36b9ddf2,0xb70c8089,0xb6312367,0xb88ad525,0xb76b5ef9,0xba603702,0xba16c7b9,0x3a341744,0x3b0e3667,0x3ba065b5,0x3b81f16b,0x3b23205a,0x3975e631,0xb9b2faba,0xb94ceb75,0x3a231847,0x39c1d6cd, +0xba839302,0x3a1e7cea,0x3a9bd5ac,0x3b118351,0xb8c3c5e8,0x39c83d48,0xba91a657,0x3a0c611f,0xb9b63bc7,0x38f92925,0xb8e206a8,0x380ad5e7,0xb7e0b623,0x3702ef3a,0xb7188d97,0xb47664a9,0xb62fdd87,0x368a4941,0xb65e816b,0xb6d37230,0xb880cb6d,0x374a2f65,0xb90cef9e,0x39c5e49e,0xb99e3754, +0xbada126b,0xbb26ab65,0xbb6f6672,0xbb89e101,0xbb58c81b,0xbacf8d74,0x3a5fdd40,0x3afc279a,0x3ae66624,0x39b6183e,0xba1f2d58,0xbad214d9,0xbaa64ef9,0x386ade03,0x3b27bc7c,0x3ace7878,0x3adeb5fa,0x3b726f29,0x3ae51077,0xba08f4a2,0x392f4e14,0xb8d75fc0,0x382b3734,0xb7f60759,0x370ebcda, +0xb702fcac,0x36288bda,0xb6bafe10,0xb628a5d8,0xb6889d48,0xb7150135,0xb7b7d75e,0x3783d87a,0xb891fc80,0x387da75a,0xb84b045f,0x3958e359,0x3a43f1dc,0x3a4e60bb,0x3a6b9275,0x3a39e03d,0xb9e0115a,0xbad34711,0xbac20240,0xbad970eb,0x3a023e94,0x3a47d4b5,0xb9a7dd67,0xba157c9d,0xba8de868, +0xbb4802c0,0x39f569cf,0xba2af625,0xbafba70a,0x38f46660,0xb89fc108,0xb87a607d,0x38577d2b,0xb7e48e87,0x367e97bd,0xb70344e2,0xb6195362,0xb6086f03,0xb61a1ed3,0xb4b6baa7,0xb5f64905,0xb619ede4,0xb7b83467,0xb83feb7c,0x3701295f,0xb9c99ac4,0xba0a4a37,0xb924afab,0x3a20c2a0,0x3a21c0b4, +0x3ad2b5d5,0x3a8fb20f,0xb96537e9,0xbb115a8c,0xbaf6b9c0,0xba60a36d,0x39a5cb6b,0x3a002644,0xbabfad22,0xba923142,0xbb054ff3,0xbb781e42,0xba9d8b95,0xbb4a22dd,0xbbed2f25,0xbb141cbb,0x3a23f48b,0xb8d4cda2,0xb8656a30,0x367c76ba,0xb6eec2c1,0x368a583c,0xb5a8c3d5,0x34ab7b23,0xb687967f, +0xb66c997a,0xb6db8b0f,0xb6e23143,0xb7249a49,0x3716e0c1,0x3795285d,0xb9f1a837,0xbab06e07,0xbabca03e,0xbb0bc29d,0xbb213838,0xbb2d0bce,0xbb1fe6c2,0xbad34128,0xb9ae7050,0x3a910f4b,0x3b84b27b,0x3a0f5b18,0xbafc7213,0xbb8d00a2,0xbb2bcd88,0xbaa349eb,0xba261142,0xbac34d05,0xba8bd641, +0xbb974e7f,0xbae1f02a,0xba54890e,0x39cc3000,0xb8f78381,0x38147137,0xb8372f8a,0xb61803a8,0xb747d953,0xb4de248f,0xb59b78c1,0x3608f8ff,0xb63ebece,0xb71716e7,0x371f3ecc,0xb86c3751,0xb8e8484d,0x3a3e2336,0x3ab98f35,0x3a972f76,0x3ac12b92,0x3a6a40c1,0x39e45ef2,0xb94b24bb,0xba907e0b, +0xbac89db8,0xbb0f9396,0xbb2d5eb1,0xbb0c7ab6,0xbaa365cc,0xba2f4521,0xba6050da,0xba834634,0xbabbdc9d,0x3913a8b1,0x394fe15d,0x395c9635,0x3a9b5d25,0x39fdda93,0xb8fbef7b,0xb710d744,0xb75e18c7,0x3749ed6a,0xb6bb5fe2,0x34150b24,0xb74f9b60,0xb73b5e57,0xb7a7baec,0x3525a76a,0xb81f40be, +0x3778a21c,0xb8ff96be,0x399befdb,0x3a84977c,0x3a826855,0x3a06c9fd,0x3769d8ea,0xb8e2c922,0xba2a57a6,0xba60a169,0xbabd0b4b,0xbaa722ae,0xbaa06488,0xba669302,0xbaa21bb1,0xbabfd47f,0xbac275ae,0xba9ff586,0xba18a03a,0xb8a587da,0x388734a8,0x3895f685,0x3a9e6aaf,0x3a3412ce,0x39bbff60, +0x3808bf59,0xb8125c6f,0xb79b15e9,0xb8778566,0xb80e4cc3,0xb7ea3195,0xb6997ad8,0x36835655,0x3720b554,0xb7078dad,0xb78ff9e0,0x384e8b83,0x376268ac,0x372c91f5,0x38a001af,0x39cf876b,0xb872624f,0xb91874bd,0xba02792e,0xb9d7e65d,0xba45a78a,0xba9d4cdd,0xbaa5ccd4,0xbac2cc84,0xbad4a845, +0xbab5a4a2,0xba85e083,0xba7f8b10,0xba2157a2,0xb9f88ad9,0xb9c5cf93,0x38ae4971,0xba2f46ab,0xba692461,0xba036dd4,0xb9e4c230,0xb92705ae,0xb8603255,0x3893b9b2,0x388eca3d,0x386135b2,0x37d37b1a,0x37b41724,0xb85e3728,0x3722f5fa,0xb809a9c9,0x3893b866,0xb92438cc,0xb984d3ba,0xb9aac93c, +0xb9909f7d,0xb9d1629f,0xba0d5a8c,0xb9bb7ab2,0xb9f0bd43,0xba23c64f,0xba2fc45d,0xba13ebcf,0xba161055,0xba0529a4,0xba059f84,0xba1f4984,0xba46372b,0xba61c6c7,0xba5e6407,0xba4c5b78,0xba38c257,0xba29a96c,0xba1ce1e9,0xba0cf916,0xb9796aec,0xba264eec,0xba1c9f2e,0xba35c192,0xba348ba6, +0xb9db8418,0xb9d976fc,0xb9a4a65b,0xb972d8d7,0xb94408e4,0xb96801ff,0xb921315e,0xb99bda8e,0xb916eeca,0x398e1275,0x393795d0,0x3a6f724a,0x3a243cf1,0x3a324e3a,0x39e33da4,0x39dfe5be,0x39d49554,0x39a0daa7,0x3942a955,0xb8af58be,0xb995a3fd,0xb9fe3754,0xba1819c6,0xba24c9f2,0xba4236d3, +0xba3a0787,0xba23e48a,0xba2e8a2c,0xba3edd09,0xb9f07fd7,0xba17dc73,0xb9d24fdb,0x375950ea,0x39af5c12,0xb9a88f27,0xb869b484,0x395f56d6,0x3979ad67,0x3986d026,0x39943cfd,0x39b259f4,0x39e4d523,0x3a086bf3,0x38b7af09,0xb97300fe,0x3a160deb,0x38e4266d,0xb98b0242,0xb9bbd00b,0xb9b0b9df, +0xb9abd2dd,0xb9b29e6e,0xb9c04ad1,0xb9b3ed7b,0xb9993394,0xb997fa72,0xb98ee3f1,0xb98ce0ec,0xb9a1da22,0xb9c18dbb,0xb9e2dbae,0xb9e5e51d,0xb9de3c85,0xb9e52c8d,0xb9e92d95,0xb9a5e7df,0xb950a3f7,0xb7b50eb8,0x3945a1f6,0xb98d8d7a,0xba5f3692,0xba89c837,0xb952bf51,0xba2bd263,0xba561f19, +0xba75540b,0xba8235b1,0xba787917,0xba8dbe90,0xba9d87b2,0xba844e96,0xba48eda2,0xb9a5a85d,0xba8d95f7,0xba58f2f4,0xb9b450f5,0x3911ded7,0xb8a7ae05,0xb8bc9ef1,0xb918ecad,0xb8efcad6,0xb8a90cb9,0xb805c80f,0x382d1274,0x3843e20d,0xb8bdd147,0xb63ae428,0x3849d290,0x393e3308,0x3880de72, +0x380c4b03,0xb82267fa,0x37e8c676,0x391d2e5f,0x38540fb2,0xbaa31b2d,0xb9b67804,0xba38ee30,0xb9fed148,0xb9c326b4,0xb8a0f5b6,0xb8e096e8,0xb9769226,0xb98fa9d6,0xb97aecdc,0xb9615d80,0xb9a96a18,0xba75baab,0xba11e1d7,0xba304acc,0xb9d1f91e,0xba603b21,0xb943d17f,0xb8c57b2b,0xb9515ebd, +0xb9bb4a0d,0xb984312d,0xb9098718,0xb88da7c9,0x39768482,0x38bff237,0xb9f9686a,0xb80aadca,0x3989095b,0x3a439183,0x398702fb,0x3831da36,0xb9813728,0x3788031d,0x395dd9e6,0xb939be71,0xba23f03e,0xb810a39a,0xb9eeb9a8,0xb884a7f6,0xb85e4808,0x3902dc96,0xb76af3f2,0x393a63ac,0x379442ce, +0x39785cf4,0x38456ee3,0x390693f7,0x3897418e,0x38b4b949,0xb987e2a2,0xb9b48d16,0xb9e191c2,0xb9d47447,0xb8cbf60b,0xba120e34,0xba43e94a,0xba2a7987,0xb9c7a9a5,0xb9074c0b,0x39cc303f,0x39ab1222,0xba3e75b2,0x380b00b5,0x39b58eb5,0x3aa28059,0x39c27460,0x391ea0f9,0xb958a61a,0x390d45c0, +0x3a135331,0xb924959f,0xba3a81ae,0xb9d1b4c4,0x36c5fb23,0x38952def,0xb7cb59fa,0x378cff86,0xb7c690ab,0xb7ddb2e0,0xb83a89f1,0xb80d269b,0xb8472981,0x374bbc42,0xb8850456,0x3815f137,0x38dcd503,0xb986e128,0xba3184d9,0xba4711fc,0xb8d0b534,0xba122916,0xba772e36,0xba519c53,0xb9e9ef0f, +0xb849892b,0x3a2c4300,0x397f7fad,0xbac64fd6,0x38e8c562,0x3a339816,0x3b1b35c1,0x3a24a634,0x39332b38,0xba0b2741,0x381b1a96,0x3979129e,0xb9e3fea7,0xba005ce0,0x390020a3,0x3866501a,0xb7f72f7d,0x37ae8bbe,0x36af5f99,0x37478e3d,0x37d31868,0x380d309e,0x37c8e8df,0x37cd683b,0x37e48e3d, +0x381d0388,0x37a95ac0,0xb823c778,0x398b42a7,0xba235cda,0xba2ec426,0xb9d24c7a,0xba9f2d18,0xbadebed9,0xbacea070,0xba76a7e7,0xb9d0b704,0x3a5b9210,0x3a1a22c1,0xbab66723,0xb90479e3,0x3a416f6d,0x3b0e4d7e,0x3a28048b,0xb86d61fc,0xb983c497,0x393e7fde,0x3a8ceb74,0x3b0a1939,0xb8474a57, +0xb957dd46,0xb824a971,0xb63f4b59,0x375b409d,0xb5358930,0x3679dc2b,0xb6f0e47f,0xb71fd978,0xb7165d50,0xb72da70f,0xb52948ea,0xb7b48ebc,0x3885ce15,0xb8bf8d34,0x3915d6c0,0x3723364c,0x399b1572,0x3abe8739,0x3b0d8ea6,0x3b62ce0c,0x3b9e5e00,0x3b83dcf0,0x3b251de6,0x3ab66652,0x3aac9105, +0x3aeeaf15,0x3b32d4a9,0x3b31f4b8,0x3a98adc5,0x3b1d34f5,0x3b30fa69,0x3b46b1c2,0x3abe26c0,0x3ac2f7b8,0xb97d2910,0xba269187,0x39979c83,0xb8d46b50,0x38755a1f,0xb750accf,0x3614647f,0x3694a1f0,0x36e26bfa,0x369bc3f7,0x36ee66a1,0x3638734b,0x374b8304,0x3713ffde,0x382fb515,0x365de277, +0x384b8d23,0xb95671d1,0xb9bd62ff,0xb9d2fef8,0xbaa79c0a,0xbabf6d82,0xbb2b865b,0xbb07e067,0xba858b60,0x3a72f73c,0x3af01a09,0x3ad7fff4,0x3a2adb85,0xb9a16225,0xbacaff48,0xba2f93ee,0x3a1144aa,0x3b1be69f,0x3b005f14,0x3ae00d89,0x3b631ac0,0x3aaeec94,0xb9de25fb,0x39466ad7,0xb860b3cb, +0x37f49d09,0xb63fc3bc,0x368e6933,0x34883a89,0x3318be83,0x34de6495,0x35b4e53a,0x33e0e389,0x36965816,0x370d256a,0xb6d8f3a3,0x375ef60d,0x379fa301,0x3a2a661e,0x3a64318b,0x3a9e4bc6,0x3abf9468,0x3b01c12e,0x3b096b5b,0x3a8712ff,0x395e997f,0x38c1a31e,0xb8fe5b97,0x3af85efb,0x3b27f1be, +0x3acfb1fc,0x3a98b22e,0x39eff942,0xbab36785,0x3a644ca5,0xb993a163,0xbac6cd5e,0xb9b6b5cc,0x37bdabae,0xb892eff6,0x3829314d,0xb742dd32,0x36cb7715,0xb616614c,0x3642def4,0xb660b6c2,0x366f73b8,0xb6a6758a,0x371f476e,0xb72a05e3,0x383b77f8,0xb81798df,0x390f0fb6,0xb9d62bb0,0xb9a493e7, +0x3a142f4e,0x3a966ead,0x3a9f538b,0x3b2d7d89,0x3b207561,0x3aa213dc,0xb895b61c,0xb88ee9e7,0x3a3e30ba,0x3ac65f4b,0x3b0b6f3c,0x3ab6180c,0x3adceb0a,0x3a71b3a0,0xb9a4892d,0xb8989c09,0xbab56cca,0xbbb70eeb,0xbab7fc8d,0x3a4a8894,0xb990aa1e,0x392ab8d2,0xb83bbc9b,0x380e2e35,0xb67a7a23, +0x3719222f,0x35fa2ba2,0x36d9430a,0x36d71f45,0x371bf0e8,0x35c8603b,0x365e4802,0xb818c310,0x38f44912,0xb9ce7407,0xba541325,0xba1948f5,0xba7e9ac5,0xba8bc360,0xbac3904f,0xbacf3515,0xba8e4dc4,0x397c9127,0x3ab172db,0x3b67e034,0xb898a226,0xbafa2669,0xbb2bc4de,0xb9879cb2,0x3ad62d43, +0x3b636051,0x39b68ca1,0x3b104927,0xbb93c661,0xbb45d9b6,0x391eb33c,0xb8dbf8e6,0x37ecb1d6,0xb780a02f,0x36ce3df3,0xb7a66856,0xb626c1fd,0xb753af0d,0xb708ce87,0xb75cfddb,0xb43d1859,0x36601312,0x3681f386,0x38acee41,0xb922847b,0x39fd7d96,0x3a9725ce,0x3a938129,0x3a854319,0x3a33e30b, +0x39bf13ec,0x385697ea,0xb9ba25a5,0xba3d7de4,0xba8c55be,0xba8354de,0xba00e2e2,0x3a05abb8,0x3acab340,0x3af2ef76,0x3afa9deb,0x3b035cc5,0x3b408842,0x3a84a8d4,0x3a273b93,0x3a173b94,0x388b7047,0xb8b69017,0xb64e065d,0xb6100293,0x37f9baf5,0x38029a25,0x37f0c991,0x3801bf64,0x380e93d4, +0x37d58da2,0x37c4e3dc,0xb64b1ea9,0x37cc39cb,0xb8ab53ae,0x392229a6,0x3a4bbdc7,0x3a8a6d80,0x3a5ab1d3,0x3a1858c8,0x3a0ba8e1,0x37bd1218,0xb96389c4,0xba3fb341,0xba2f8bd6,0xba3249fd,0xba1725ea,0xba3c1321,0xba1e2936,0x390c18b5,0x39080ad4,0x3a12bba4,0x3a67bc8f,0x3a5360e4,0x3a8e4b91, +0x3a3f08b0,0x3a184a56,0x397f1521,0xb91ccf14,0x392c9a3d,0xb83b54cd,0xb72f73d3,0xb8805133,0xb7adba4e,0xb84c9f71,0xb81857d4,0xb85adb53,0xb6d8a882,0xb6ecfe4d,0x383cc0f1,0xb709a61c,0xb813fd24,0x3898bd91,0x392705d6,0x39ab2e3f,0x39065e6b,0xb915ec3d,0xb87f813e,0xb9b71cc5,0xba45dc6a, +0xba44387e,0xba6d2fd8,0xba816c9b,0xba15d8b8,0xb8760895,0x39c75a27,0x39a8169b,0x3964c895,0x39c17bd8,0x3a02ad2a,0x37d8484d,0xb7607d83,0xba1c5629,0xb923aebc,0xb95976c1,0xb9160e2f,0x38227f77,0x38d96294,0x38ffcb6b,0x38c0043f,0x38894412,0x391c8fb2,0x3892cc89,0x38e456fd,0xb7e3314e, +0x376f6d9d,0xb91e7e88,0xb9816337,0xba1338be,0xb9269857,0xb9923647,0xb98a067e,0xb9ae56e9,0xba124bcd,0xba227a74,0xba183574,0xb9bb8685,0xb919a70f,0x3663f20b,0x37ce9202,0xb826ca14,0xb77c1714,0xb77f52fb,0x38959a74,0x38b0aa07,0x382d297e,0xb98dac5c,0xb93a789d,0xba4392a7,0xb9bd1e1a, +0xb9d8eb39,0xba0a01d4,0xb9935eb6,0xb9ce3af1,0xb9320621,0xb9ade1da,0xb9a63116,0xb9a283fa,0xb949c47a,0xb96fa2a2,0xb97b0470,0xb95c61b1,0xb92b4afc,0x3980b71b,0x39e34451,0x3a1e5f4d,0x3a037a88,0x39c33119,0x39b5ab42,0x39b31359,0x39901c47,0x3930b844,0x37b86447,0xb8767a6c,0xb8dc2000, +0xb7fee663,0x38b7bee2,0x3932b681,0x38680af8,0xb88468ed,0xb9253348,0xb96444c5,0xb8406df3,0xb834fe8c,0xb990833a,0xba04de2c,0xba0baa3c,0xb933b028,0xb9da1a87,0xba27fb67,0xba32b67d,0xba1e64ea,0xba127749,0xba146939,0xba1c4552,0xba15367e,0xb98fd845,0xb729797c,0xb9adebfe,0xb995c051, +0xb904cd85,0xb6a4625e,0xb7b65308,0xb7d50321,0xb857cb6f,0xb8b1c17e,0xb8a73ee9,0xb8428ff3,0x3606129f,0x38869373,0x38d14dbe,0x38b14864,0x37f434cd,0x3730400d,0x36728176,0x37aed532,0x3777eecd,0xb73bdb5f,0x3806cb90,0xba220b85,0xb9e1718d,0xba304de4,0xb90f05ca,0x39597396,0x38d1050c, +0xb948242e,0x390bb090,0x39b1da04,0x397c38b4,0x3941fad4,0x390b7d9b,0x38724c56,0x386f7325,0x3869d444,0x38d27a51,0xb90c1143,0x38a82547,0x3959f770,0xb88ad32c,0xba1d3082,0xba0984b8,0xba16ee94,0xba261e26,0xba216c2e,0xba1853b2,0xba0727bd,0xb9edbd89,0xb9eaa2f9,0xba12b166,0xba00ce3a, +0xb9e298a5,0xb9ab2f9b,0xb9cfa206,0xb9ce46a1,0xb9d47f9c,0xb9d4c7cc,0xb9e26fa0,0xba0a9874,0x39aa9996,0xb9910d3f,0xb8b5ddf5,0xb95fe5ca,0xb666681d,0x393c7672,0xb71598ae,0x38de6ee0,0x38fbcc26,0x38dfca79,0xb7fdf1ca,0x388c5555,0x38dfab0c,0xb9791276,0xb94c28ec,0xb94bc066,0x38a42a7e, +0xba091077,0xba347590,0xba3faed9,0xba79f8b9,0xba507c25,0xba324606,0xba2ce3d0,0xb9eb7f8c,0xba1cb5ca,0xba8d1d48,0xba3ffd86,0xb9eb9fd0,0xb84918f8,0xb9aecdce,0xb9e829b5,0xba0e67ba,0xb9c1e3f4,0xba02030d,0xba241c18,0x3904c8db,0xb98654c8,0x38be06b6,0x38f84ee2,0x39314c76,0xb894fd59, +0x387e7106,0xb86960e6,0x38a8ecff,0xb8ae036c,0x38984151,0x383caba7,0x38a91fe7,0x390321c8,0x37a39cb6,0xb8a98d0c,0x38fa0c28,0xba12b1fa,0xba78f98f,0xba8daf07,0xbac3ab9a,0xbaa69b78,0xba8b829e,0xba4b9ee3,0xb9c7d696,0xb9e9a7bc,0xbab188b3,0xba37f505,0xb9d86963,0x39c0258e,0xb90f9c94, +0xb932cdc2,0xb99521eb,0xb96d2120,0xb99c6073,0xba17945c,0x3994aee2,0x37ea8bb5,0x390d5230,0xb7eced5d,0xb574e48c,0xb757f804,0x370eed85,0xb76c15fa,0x36a4f5dd,0xb7c7719e,0xb6214aae,0xb8751751,0x37d5cbf9,0xb89f7cdf,0x38dbcec6,0xb8a7a5d1,0xb88f91fd,0xb9ed511d,0xba875456,0xba8eb50b, +0xbae1daaf,0xbabc978d,0xba97a039,0xba399be2,0xb9939355,0xba33a94f,0xbb122e44,0xba6542a9,0xb9b553c5,0x3a892868,0x380a6773,0xb916eaa5,0xba0b0105,0xb8d85cb3,0xba08c29c,0xba7b4217,0x3937fd01,0x3545926d,0xb78071c2,0x36567e6c,0x370e9393,0xb6c00475,0xb69b980e,0x3631363f,0xb748b878, +0x363f98b0,0xb58c588f,0x36cda77a,0xb6a51c9e,0xb76e4d86,0x37cef129,0xb92b856d,0x3975e550,0xba47755c,0xbab36349,0xbaeda2ed,0xbb2885d4,0xbb11ed4d,0xbada1132,0xba933cec,0xb93dabcc,0xb9f471e7,0xbb0cdc99,0xba8e52c0,0xb945f79a,0x3a94cdaf,0x39a4f4a1,0x382ece23,0xb894bcc9,0x37dd8453, +0xb94e03e7,0x3a49e8a9,0x3a4ad18c,0x389655cc,0x38bbd151,0x3755efed,0xb7035d33,0x367f511a,0xb5d355a1,0xb6b540cf,0x368febd6,0xb63db9b6,0x34db091c,0xb74d7e4a,0x371b00fa,0xb861e212,0x38d8e6ca,0xb911a64d,0x39b8486e,0x396b8236,0x39f267e5,0x3aa1654a,0x3af79d49,0x3b632c06,0x3b21d10f, +0x3a8b81e0,0xb9b3bd96,0xb9afb16f,0x38fa24f4,0x3a933438,0x3a7b8632,0xba0f7ef3,0x3a62689e,0x3a859482,0x3abc022c,0xb9601da1,0x3699c545,0xba0da33f,0x3a0e80e2,0xb996efbf,0x393e2aad,0xb8b3823c,0x38338187,0xb7c6a476,0x3702fe73,0xb686fc88,0x360fb5dc,0xb66653aa,0x36bc5e2d,0xb70a4fbf, +0x37102a41,0xb844fbf5,0x38138d31,0xb89f920f,0x39468a34,0xb9051f3e,0xbaa715d8,0xbaec7d20,0xbb256d52,0xbb421843,0xbb077b2c,0xba18403c,0x3a998eb4,0x3ada01a0,0x3a841089,0x39968697,0xb954fbdf,0xba6c75e1,0x382c01f7,0x3a8626c3,0x3b0e9f1f,0x3ab6c508,0x3a808783,0x3b23e363,0x3a2bfc83, +0xb9c03c47,0x392e9d41,0xb8a48136,0x38253fb7,0xb79f4544,0x372be45b,0xb6caaf4a,0x365a72ac,0xb66f852e,0x34d887e3,0xb6ab3326,0x367b5b3d,0xb6c9432c,0x37dfe523,0xb7f88c77,0x3941b0cc,0x38df757b,0x398248c5,0x3a484ad7,0x3a6f5f6a,0x3a70870e,0x3a39939e,0xb92a6367,0xba87fa97,0xba6c5c9b, +0xba52cf9d,0x3a0e0c9a,0x3a629c52,0x3a0c9619,0x393b1d7b,0xb9a26bfa,0xbacafc70,0x3a009c49,0xb9ccd3f8,0xbaac2fc8,0xb8968ea5,0x387e9299,0xb81fedf9,0x3821c13b,0xb781ddf6,0x35b39af9,0xb69e34ef,0xb5b2687a,0xb55cb7f9,0xb58140ca,0x34a433a0,0xb65dba27,0xb6129c1f,0xb70808f6,0xb56717ea, +0xb725a22a,0xb7d4c767,0xb94b6386,0x385d2a83,0x3a51703f,0x3a703774,0x3ad46a9b,0x3a9d02bb,0xb65c96ad,0xba83e1db,0xba3a43be,0x38da2fc1,0x39b4faaf,0x39d5ba56,0xb831e47b,0x380f5373,0xb9d2e2bf,0xba333e48,0xb9b72084,0xbab37e65,0xbb727bde,0xba0e7847,0x39db4193,0xb92bae09,0x388f9428, +0xb7f0716d,0x37daa7f2,0xb6f86970,0x36a51f5e,0x366b61ff,0xb41b726c,0x3601b128,0xb6226150,0x353ff246,0x36f0a036,0xb717d009,0x37de2ff0,0xb862c811,0xba77cacc,0xba620f70,0xbaab3dec,0xbac592fa,0xbac1efd9,0xbaa1405f,0xba379f3d,0x3a446645,0x3acf3fdb,0x3b5c2ab8,0xb8d378b5,0xbad6082b, +0xbb16af7c,0xba0def69,0x3a69272f,0x3b0b1b12,0xb8cd27ec,0x3ad6a880,0xbb5bf250,0xba83b561,0x398f10aa,0xb84b3d27,0x385cf207,0xb796bc70,0xb6421337,0xb678fe52,0xb660e8c0,0xb5f553e8,0xb642102b,0xb57a29dc,0xb7218af0,0x367c5c0f,0xb7cedb21,0x3844e622,0xb8e31920,0x39ef848e,0x3a94e159, +0x3a4520e5,0x3a74a4c6,0x39d6335d,0x3982075b,0xb8a0b251,0xba121dac,0xba55b55b,0xba8dc2ee,0xba7dc996,0xba3e8842,0xb8684692,0x3a3113c5,0x3aa4fff4,0x3ad3af78,0x3ae965ba,0x3b33dcde,0x39a2fa9d,0x3a035c7b,0x3a7c9d3f,0xb7925565,0x38341c93,0x38184194,0x36cdf876,0x37c1955e,0xb5cd5b47, +0x37ab0b97,0xb6e2440c,0x36d4778a,0xb6a8c603,0x369c1a97,0x36585198,0x379e53f1,0xb8271eb6,0x378bc9df,0x3a352f2b,0x3a53fcd3,0x3a032846,0x3992eba3,0x3970d2bb,0xb80a95dc,0xb925417d,0xba10f867,0xba188e3c,0xba2a6880,0xba08f6d1,0xba489302,0xba6592ed,0xba510e90,0xba502a56,0xb9bc9e58, +0xb51c03b0,0x38a88ae9,0x398bdc29,0x3a968080,0x3a601d0f,0x3953a1e6,0x38571d8e,0xb86514dd,0xb7ae7f05,0xb7d10395,0xb7d62426,0xb7ea2d72,0xb7549ff3,0xb78f89a0,0xb63556d5,0xb7c23085,0xb769b62a,0xb78e449d,0x38c4d0f3,0x381ebac6,0x381a51d5,0x39949720,0xb7caa82b,0xb86adae9,0xb9ab0992, +0xb9508cdd,0xb9efb98f,0xba52ebe9,0xba600853,0xba843789,0xba8b8889,0xba5295f6,0xba03b43b,0xb9c198bb,0xb99715cf,0xb990beb2,0xb916c20b,0x395ef78f,0xb8d27bd6,0xb938a63d,0xb80298a6,0x386f2f27,0x39113fc8,0x390b723d,0x38eb0731,0x37e77566,0x38a3f7aa,0x37a99297,0x38a0e7cf,0xb7698eb4, +0x38299f96,0x37754c51,0x389d69d0,0x37bf47df,0xb79a6a8a,0xb975eb00,0xb981b3ff,0xb9dc8a30,0xba23d542,0xb9ee2df4,0xba1289b8,0xba36f762,0xba41dcce,0xba2b91a1,0xba1081a6,0xb9e1da2e,0xb9bfbb73,0xb9c39ef6,0xb9d8bea1,0xb9d83e96,0xb9a97db8,0xb927da11,0xb903f9a0,0xb87188ff,0xb9dabded, +0xb9a3ebc0,0xb91927e8,0xb9d89a7e,0xb99ea97d,0xb998d8fc,0xb9179179,0xb8b73a6e,0xb8e27391,0xb88c86e5,0xb81d00e3,0x34ee14cf,0xb80ecd80,0x375117a6,0xb796157c,0xb8b5ddbe,0x365da599,0xb7cd5c61,0x39fcbf28,0x3909117d,0x39382ab3,0xb731955c,0xb7815c08,0xb7f849c0,0xb8c14ce7,0xb9371385, +0xb9cb22a7,0xb9fe1766,0xba104a66,0xba10ab3f,0xb9ff525c,0xb9fdcb9a,0xba031c77,0xba090ca1,0xba090fec,0xba073cfe,0xb9a9d08c,0xb9cf5fdf,0xb92dfb68,0x382ab085,0x37ccdf04,0xb931448d,0xb87ba25b,0xb8940acd,0xb8336de1,0xb7e0e06c,0xb7d89351,0xb6351596,0x3800aad7,0x3867c412,0x38376adf, +0xb8f46ba3,0x39398c76,0x38cf03d8,0xb92d6ffc,0xb9d8233d,0xb9c15f46,0xb9c37b1b,0xb9cc35ee,0xb9db5ea8,0xb9d4c354,0xb9be7682,0xb9ae66d6,0xb9943b78,0xb98dd478,0xb995c217,0xb9a8b7cc,0xb9b64b85,0xb9aa7123,0xb99b87d9,0xb9967dc7,0xb99a080d,0xb9c0a9b3,0xba0b6ece,0xb99044cb,0xb9450ba9, +0xba1a83b3,0xba352d7a,0xb9e0b600,0xba04d356,0xba1d644a,0xb9a40d7c,0xb9c46d26,0xb9cc6f30,0xb9b85baa,0xb9d61c61,0xb9e16e68,0xb9c718cc,0xba2ac4b8,0xba17417e,0xb9e03d6e,0xba21527c,0xba0d7f28,0xb9442aad,0xb9af1553,0xb9c5bd29,0xb9d69d44,0xb9c2bcee,0xb9b3ad18,0xb9a2e065,0xb98ce32d, +0xb98fafc5,0xb9be4258,0xb9a9684f,0xb9939c15,0xb94e63ec,0xb9949cfe,0xb99458f7,0xb98a1446,0xb98638b8,0xb954910d,0xba011be0,0xba5a4f08,0xb9c3d704,0xba0bfee2,0xb9956029,0xb9572f51,0xb8989f0f,0xb84e3f11,0xb91ceae0,0xb911cb79,0xb9369bd6,0xb8cf65d4,0xb9056abd,0xb97fc93e,0xb9a56b25, +0xba0fe240,0xb9ca0b99,0xba2464c5,0xba0b07c8,0xb9d85c89,0xba14056a,0xba340904,0xba111b42,0xb9f6ee3f,0xba04a45b,0xb9b0b9f2,0xb9eb8917,0xba4c16ed,0xba0f9c26,0xb9b7f8f2,0xb81318bd,0xb9d6fa5f,0xb9ff4e7d,0xb9e0c79a,0xb9adaefa,0xb9191f98,0xba148011,0xba175282,0xb9766411,0xb90b44c9, +0xb4dc56a7,0xb8b27a9e,0x377b9403,0xb884bba2,0x38306fdf,0xb8b72962,0x387fbf45,0xb8137673,0xb80e39a2,0xb8380905,0x382f75ef,0xb8688fc8,0xb965f4d4,0xb9b95ce7,0xb9f8f0da,0xba0dcf63,0xba6d678c,0xba8e80fb,0xba65d864,0xba2b78bc,0xba14d428,0xb9915faf,0xb9ba94f6,0xba88b1e1,0xba1d18b1, +0xb9e36e3d,0x39310279,0xb9eb31a7,0xb9e345cf,0xb988f6d0,0xb9824a58,0x38a5cf3f,0xba28f8b6,0xba2a0fe2,0xb90d521f,0xb78718c8,0xb8874da5,0xb7828e47,0xb6f25a30,0xb6c990cb,0x33620543,0xb7025028,0x37098a04,0xb7d0c2da,0x37ccb0ad,0xb866fb1f,0xb7f68c24,0xb7a9c19f,0xb73eede4,0xb9eea512, +0xba22addb,0xba117db7,0xba73055b,0xbab2ab53,0xba889ac0,0xba5cc23c,0xba4065d9,0xb9b5c8fe,0xba2bf33d,0xbadee357,0xba499827,0xba01b8e3,0x3a2c2979,0xba25fa7f,0xba2b2d07,0xb9d50f1d,0xb9a1c716,0xb8edea4f,0xba406e96,0xb9965433,0x388e6851,0xb878133d,0x372b1ff1,0xb6094a39,0x36c0ae2f, +0x363521f8,0xb52287f1,0x3747f83c,0x3643d3d4,0x370ef73c,0x360ddf8d,0x379d1480,0x37e2d4d3,0xb869a748,0x3910fce0,0xb96aed86,0xba25e9ad,0xba602eea,0xbad4c9f7,0xbb04b85b,0xbad43728,0xba925694,0xba571f65,0xb903df59,0xb9dae6e9,0xbad6b6ae,0xba84b933,0xba063148,0x3a09d18d,0xba201ec8, +0xba2da674,0xb88f9fae,0xb922a1e0,0xb9087ff9,0x3a1ad034,0xb9cb1414,0xb9309fe3,0xb85de169,0xb7d21734,0xb70002bc,0xb68dec62,0xb62ddcf3,0x35d4740c,0xb68307c3,0xb64cefca,0xb6184bdd,0x36390f29,0xb75dcab7,0x37733f9a,0xb85f4452,0x37b4e887,0xb90ddc37,0x395e02ce,0x3a852dcb,0x3ad49827, +0x3b28ec16,0x3b3f29e6,0x3b0b5680,0x3aa1b886,0x39a7f364,0x39fffb96,0x3a4962db,0x3ad3fc77,0x3aa8aae5,0xba3b803b,0x3a1c5fab,0x3a442255,0x3a848d37,0xb8df9586,0x3a6c51cb,0xb9d77c8b,0xb9fb864c,0x3921728f,0xb8f26bdc,0x37d0664e,0xb7426ef2,0xb6039131,0x35aef70c,0xb5b39978,0xb50a7083, +0x36246b5e,0xb584841f,0x36a2b430,0x3526d383,0x37a87429,0xb7623d53,0x3725eb92,0xb896136c,0xba11b38e,0xba8f295d,0xbaf68c79,0xbb12fa86,0xbb1f5d39,0xbad968c5,0xba04588e,0x3a538c2b,0x3aa43343,0x3a363c85,0x39073e13,0xb9df3ec3,0xba8a230b,0xb976b0ad,0x3a4198f8,0x3af2f409,0x3aa5c626, +0x3a6113e9,0x3ae931fe,0x3938f82b,0xb91439be,0x380b3de5,0xb776a7e0,0x3624503a,0xb59b3cd6,0xb5dc0b2b,0xb465dafa,0xb516c830,0xb38f1b59,0xb59387a9,0x365fa52b,0xb71218c7,0xb68b3d53,0xb7aa8844,0xb7cc6e15,0xb8a9833b,0x3904af22,0x39c98ce5,0x3a13eb1e,0x3a4dd725,0x3a472a43,0x3a328509, +0xb93575c3,0xba152083,0xb9d82a54,0xb6cf8eb9,0x3a7f3b77,0x3a742b1a,0xb8a188a5,0xba55ab5b,0xbaa573c2,0xbace2e03,0x3953c145,0xba25ed82,0xba88c3ef,0xb8e11632,0x382ff31c,0xb80834ce,0x358d935e,0xb6c6944f,0xb51c1c8f,0xb587604c,0x3510bf73,0xb65288ba,0x34b5c0c5,0xb68f523c,0x36c6bab6, +0xb6e7cf44,0x3763ee0a,0xb8109207,0x3885c336,0xb920c591,0xb9c54ac9,0x39dc514c,0x3a48a0b7,0x3a71b9c7,0x3ab37eba,0x3a7a45f1,0xb94dccf2,0xba52f4fc,0xba1ac91e,0x398a025f,0x39909b2a,0x39a6fe2e,0xb8cf3af7,0xba375664,0xbaa5d729,0xbab34009,0xba4b060f,0xbadb95ba,0xbb3a0885,0xb920408f, +0x3906d084,0xb8cd99b0,0x388b79aa,0xb7a4561e,0x373ab84e,0xb6a3832f,0x3651eb24,0xb643038e,0x35db22f5,0xb3bd58f2,0x364917fa,0xb6657fe9,0x34a83a4f,0xb7f1b2db,0x37cf666d,0xb8a2a8f3,0xba0be1ec,0xba0e7fdd,0xba814e47,0xba981080,0xbaa63641,0xba8accbe,0xba1d3159,0x3a1ee04b,0x3a89cf6f, +0x3afe3604,0xba6bd885,0xbb02a2c5,0xbac255fb,0xba640b76,0x39043d4c,0x3aa1471f,0xba9a7ab5,0x3aa942c8,0xbb645742,0xba3b406a,0x3937f343,0xb91d309b,0x37b89359,0xb81f7619,0x368fd244,0xb7789bbf,0xb60e8e9f,0xb6f7768c,0xb6605301,0xb688c315,0xb6051280,0x357815c0,0xb76903bd,0x3880b422, +0xb8cd24db,0xb79971f1,0x3a326ca1,0x3a14c3e1,0x3a1e55b3,0x398e7d36,0x384fbf96,0xb9a0d750,0xba639eda,0xba9c75e4,0xbab6bc6f,0xbab3531c,0xba504079,0xb8f1f357,0x3a113927,0x3a767439,0x3a9ad5dc,0x3adf3aa3,0x3afd5663,0xb98eba02,0xb8e14a92,0x394cba46,0xb940c12a,0xb72e4515,0xb7e1d3f7, +0x37588489,0xb6be028a,0x372b18cf,0xb68b0f6e,0x375c16af,0x3623b695,0x372314ac,0xb4e6d1df,0x3749a0fb,0xb7b1ae80,0xb5371273,0xb8ca4693,0x39d165af,0x3a54e76e,0x3a0b5254,0x39c1bc7c,0x39a78f45,0xb8cae234,0xb98a563c,0xba13f309,0xba053b86,0xb9ed8505,0xb997d2b6,0xba046b04,0xba24398c, +0xba12e5bd,0xba0d5058,0xb9c2b22a,0xb993a836,0xb9e3fffc,0x39a2c158,0x3a219990,0x3984a16e,0xb9102c86,0xb8873660,0xb7a296ce,0xb81e6992,0xb71bebfc,0xb7b04c67,0xb646525b,0xb75df8e8,0xb6890f21,0xb7822954,0x36014356,0xb7624cf3,0xb7dd2a4b,0xb799d47e,0xb7c9b6f7,0xb880ac24,0xb64478b8, +0x39012471,0x37365201,0xb931aff0,0xb9109376,0xb9c05033,0xba267125,0xba376bc4,0xba57ca6e,0xba5e302b,0xba18978e,0xb9ab9ee8,0xb959553f,0xb9710d18,0xb98007b2,0xb88b3d74,0x390557c3,0x38fa28b4,0xb730f820,0xb9722fe5,0x37307255,0xb89ba5d6,0xb78e3885,0xb7938c25,0x37a32c71,0x36fa1ed9, +0x37a19722,0xb7b71878,0x380a4593,0x36f62d4e,0x36d62ffd,0x36065459,0x37c6831f,0x370e75f9,0xb90460a5,0xba060841,0xb9e640b2,0xb9d5c3c2,0xb9d28da2,0xb9d399d0,0xba0f586e,0xba12534f,0xba07b206,0xb9e459d7,0xb9c8c2b7,0xb9df706f,0xb9d517a3,0xb9de1dd4,0xb9be0b9e,0xb95e991f,0xb879e65b, +0xb6c3b92d,0x37b6e371,0xb9d2bc79,0xb984b1d4,0xba00a0b2,0xb9ad16e8,0xb9a1198f,0xb977a07d,0xb86e4b54,0xb8e545de,0xb883a541,0xb90b77b1,0xb908c4b1,0xb915f281,0xb8cf05ab,0xb8e3d9cb,0xb9001ae0,0xb983c4bd,0xb9a74c70,0xb96afeed,0xb7d930fb,0x39187c5d,0x38e8cd1a,0xb81a5371,0xb862049f, +0xb8a4fd14,0xb90bd96d,0xb9556107,0xb99d7628,0xb9a51148,0xb9a4eb34,0xb9a0e0e1,0xb99037b1,0xb9b2ce77,0xb9cb576d,0xb9ebee33,0xb9e5b85c,0xb9e25552,0xb95c1dea,0xb97711ad,0xb9e2729e,0xb9ec538d,0xb9a766ef,0xb9d272ab,0xb9f3e9bc,0xb9c64a2d,0xb9c32aab,0xb9b4143d,0xb9a6c0f7,0xb9a748d2, +0xb9a7452b,0xb9a501b2,0xb9e0ae8b,0xb9aa582a,0xb965070e,0xb9c73d2e,0xb9ca80b8,0xb9838320,0xb991d0d6,0xb98fc98c,0xb9948f5f,0xb99cf3cf,0xb996ece1,0xb988614b,0xb9811817,0xb96da2df,0xb9747874,0xb98598ac,0xb98ba633,0xb98d6cc6,0xb970c54b,0xb9561a07,0xb949805a,0xb94c9c3f,0xb9d67034, +0xb8ccecf6,0xb84ef154,0xb8c506b1,0x39291f29,0x38089f62,0xb9c439f8,0x38c55dbb,0x386a90d7,0xb8e18d41,0xb92a4ffe,0xb947b107,0xb9642a59,0xb9840a6b,0xb9940caf,0xb98b0451,0x37e67542,0x38ee0182,0xb9f2959c,0x37206658,0x390d19ce,0xb894abee,0xb8af6df3,0xb8bb7f24,0xb901040a,0xb8bb24a8, +0xb89b05d3,0xb87ac332,0xb80135af,0xb7f6bcdf,0xb8c0bb1a,0xb8326d97,0xb722b250,0x3883001c,0x37b189ca,0x377bce17,0xb7bae4cb,0xb78e37b8,0xb880e9e7,0x36d3f1fa,0xb8ef3432,0xb8cd7744,0xb8b33fe8,0x38cfe09c,0x38f8ace4,0x38ceda4d,0x37e2bd69,0x390d731b,0x38d8626a,0x391948c6,0x38ab2bdd, +0x39112c0a,0xb71fd07b,0x38e05d6b,0xb7febd04,0xb806581a,0x37eae8d5,0x384e9380,0xb8f7b37d,0xb8f87c92,0xb95fb482,0xb8c2f5a8,0xb7c2356a,0xb7854a75,0x3820ec3a,0xb8382d6b,0xb9903a5f,0xb85fc3d3,0x38e2d8c1,0x39b873d9,0x3932d8ee,0x3893dc83,0xb893092a,0x3741235d,0xb8a62014,0xb90239f2, +0x38835970,0x39193728,0x3918c696,0x38c153e9,0x38b39536,0x37866b60,0x3887e767,0x370aaa07,0x38ba3d4f,0x3796a88a,0x38151688,0x38910135,0x3892b485,0x38c00eaf,0x3915ddac,0x38915872,0x38ff3e92,0xb877ed21,0xb9459ed2,0xb98b57eb,0xb9d96538,0xb96a853f,0xb8fb4d20,0xb82d9626,0x38eaa980, +0x38570316,0xb9cb2c88,0xb51c98a1,0x395681be,0x3a2adb90,0x39bf64f1,0x3990d4c0,0x384948b3,0x38af7ab0,0xb81b60ac,0xb9835713,0x390222cc,0x38d86e63,0x3819fe36,0x37021063,0x371e9924,0x378e9132,0xb4eed7ac,0xb6df7ba8,0xb64f6f34,0xb7a1bd26,0x3794688a,0xb7831bc0,0x37eac102,0xb666221e, +0x36ca2767,0x38abff7e,0x38d5a3f4,0xb85584b8,0xb932c101,0xb985756a,0xb9ff647a,0xb90e1bc9,0x389bbefd,0x390aede7,0x3965f669,0xb820a0d3,0xba429c42,0x384cfc5a,0x39d2006f,0x3a9ca042,0x3a13c83c,0x39a6f71b,0xb8aaf6a8,0x38991a03,0xb92b9d7d,0xb9cb6580,0x397aff1a,0x38025c8c,0x383cf921, +0x37a31e01,0x36e21a93,0xb6864173,0x3459d844,0x3710d896,0xb6176c26,0x36a9dc07,0xb67228c0,0x36f2a712,0xb70283c3,0x378842a9,0x3802550f,0xb8302066,0x390aab36,0xb8f431e2,0xb9e19f9d,0xba19ac5f,0xba599920,0xba04723b,0xb9426012,0xb8c3a541,0x399deff7,0x38b11aa3,0xba467681,0xb88bb29f, +0x3a01de8e,0x3a9c74fb,0x3a50bf9f,0x39fe0807,0x3910e330,0x39275ca7,0x3979cbb0,0x3a6baa37,0x39757dae,0x38eebca8,0x3837e353,0x378bc66c,0x370ac429,0x36f1ccc0,0x365fa658,0xb625c880,0x358a916c,0x356d3d70,0xb32ea0c8,0xb6195a7e,0x36de1c03,0xb777cbe3,0x382734b6,0x372110a7,0x38b2befa, +0x3a4d2a04,0x3a9251b6,0x3ab6fdbb,0x3ad602f9,0x3b01f982,0x3aa96594,0x39db5c76,0xb8f8589e,0x3906786a,0x3a19637f,0x3ab53576,0x3ab3d41e,0x39804490,0x3a93fdad,0x3a8b81e6,0x3a851d4e,0x398ce2e7,0x398bf311,0x38c57e98,0x39163f3a,0x381dc9be,0x385c3577,0x3745f9a6,0x3633dcb5,0x36b65adf, +0xb58fc20a,0x368cc6ed,0x35e9450b,0xb0ce2ba2,0x35cba9a4,0xb59e10ed,0x368663ab,0x32028f2e,0x374b6fad,0x37b040b2,0x37e060ab,0xb9477684,0xba132005,0xba584a3e,0xba788882,0xbaae45ef,0xba51e6aa,0xb7bb41aa,0x3a7731ca,0x3a92d79a,0x3a18711d,0x397a3d32,0xb80e4006,0xba0b73f3,0x3a03c712, +0x3a919f81,0x3aba6694,0x3a8b1409,0x3a17d357,0x3aaedae8,0x3835a5a1,0xb686ed51,0x37ffca59,0xb4892c7e,0x36b9d4a8,0x35fde3fe,0x3627f8cd,0x358c89e0,0x353cdfcc,0x3586870f,0x360169ff,0xb63b05ed,0x3724e9c8,0x36d56a3f,0x37a772bc,0x37a44ebd,0x38d3fddf,0x39896786,0x39b849e1,0x3a26d7b1, +0x3a579eaa,0x3a66883a,0x3a54770f,0x39b393f6,0xb90d6ab6,0xb8e05012,0x3891ab96,0x3a381057,0x3a874bf8,0x3a8692d2,0x3a2919c4,0x3980443f,0xb9a4db63,0x39d574a7,0xb8ef0556,0xba4131d7,0xb839775a,0x3807128c,0x374b7c39,0xb5bca179,0x36d7f8ab,0xb3538a85,0x3623cb0e,0x34f6fcb5,0x362cdc90, +0x35cd0906,0x361b9981,0xb59ada90,0x35ac4b48,0x36cd6692,0x3773058f,0x373ad141,0x381e799c,0x38d3a27a,0x39a08002,0x3a4914e5,0x3a663c18,0x3aadeb40,0x3a9686a8,0x39f9cb5e,0x390b0d80,0x396c3267,0x3a219796,0x3a0bf032,0x3a34a84d,0x3a88e381,0x3a711e1d,0x3a47b314,0x3a889610,0x395cdbd7, +0xb98966ba,0xbac7f58c,0x39e1acb1,0xb8ce51a2,0x38353153,0x35c7cc86,0x35fd347a,0x368c4ba1,0x34c9e4c9,0x358431a9,0x363387a1,0x359cacc3,0x35d4d183,0x35a38d5c,0x3626cc67,0x3707cf3c,0x36e1263d,0x36aeef96,0x38a3d8f8,0xb9c163be,0xb98075be,0xb9d64fb0,0xb9ef6527,0xb9f29cf3,0xb9a99766, +0xb88bcdaa,0x3a88d2fa,0x3ab02c03,0x3afa9e0c,0xb9c6d190,0xba84f1ce,0xba3aba49,0x3a387eba,0x3af0c36d,0x3b480abc,0x3a2c04ce,0x3b340214,0xbaab2b21,0xb9829d45,0x3987ba1d,0xb8a8029a,0x385aff40,0x35798372,0x374db008,0x36ae5bde,0x3686bee5,0x36696ac6,0x359bc67a,0x3613f7a3,0xb61b6b5a, +0x3711f269,0xb724b1a1,0x372d631d,0x37f03c52,0x38529dc1,0x3a3c1ecf,0x39dd1470,0x39df4370,0x38cc0018,0x3875fb3d,0xb819aba8,0xb9115b8c,0xb99b66ad,0xb99687ab,0x3883fac3,0x397fd774,0x3a435283,0x3acc575c,0x3b11fe08,0x3b2af437,0x3b4ac9ee,0x3b505d18,0x3997ce95,0x3a0de801,0x39526feb, +0xb7cc604d,0x38c6179b,0x3717851d,0x372ea966,0x366cb31b,0x3614de2d,0x371e4805,0xb5b1fcc4,0x36afe720,0x35ec323f,0x3579767b,0x371f9870,0x355708a2,0x388c2d7c,0xb8a51de4,0x39441f12,0x3a188f89,0x39d0b468,0x39e1752c,0x39d19722,0x399137c7,0x3940258d,0xb7e60c0f,0xb8c826e0,0xb93f2556, +0xb96a721a,0xb9ade717,0xb9a6d288,0xb8a1e805,0xb9652c23,0xb8056318,0x38f9a6d8,0x39074a97,0x39d5d4cc,0x3a53bd06,0x39c80650,0xb7a58a1f,0x38d191be,0xb7a1be5d,0x381c2a39,0x36c01217,0x3739374c,0xb63a8b07,0x35bc6736,0xb6e81b47,0x36593f54,0xb6e18c4d,0x374ff361,0x3601d54e,0x361df315, +0x386cb401,0x38155f89,0x3910ed05,0x38e5ba14,0x389cdbad,0xb89c1aeb,0x369fac9b,0xb91dad83,0xb9bc0d3b,0xb9c83576,0xb9f24355,0xb9f768fd,0xb9851fe0,0xb80fd9e5,0x392f5736,0x3845264a,0xb7a85e54,0x38cae3b0,0x399530ed,0x39881495,0x3977671f,0x39140519,0x38f6ffcd,0x3868e834,0x3899aeaf, +0x37b3398b,0x35ce808b,0x37afd60c,0x35df03e1,0x3824f232,0x36eab580,0x3734c391,0x37ba3170,0xb6541ff0,0x380b887e,0x38452774,0x387d5759,0xb95369d9,0xb97c9478,0xb9c720e5,0xb9a539c4,0xb9c54650,0xb9fa1f9f,0xba03f503,0xb9f5086c,0xb9acca36,0xb95ab880,0xb9047308,0xb8a0155f,0xb8604c29, +0x36fc62a1,0x38e38cde,0x398b2771,0x398ccbcb,0x3995c0cf,0xb944d282,0xb8b8eb8a,0xb96f5206,0xb8ee06ac,0x377814f2,0x377c6018,0x38d85829,0x38753552,0x3884cca1,0x38b74ff1,0x38affbfb,0x38c746b3,0x38ad651f,0x38a2e8d9,0x390c0d14,0x38ac40e3,0xb859c6f1,0xb8ce3dc7,0x37bb2dff,0xb8972b93, +0xb8a99624,0xb928d7ce,0xb92d98e1,0xb9301ea8,0xb94a0d79,0xb973d47a,0xb9ac56dc,0xb9b0174c,0xb9a1a06e,0xb9821502,0xb91347cc,0xb89556de,0xb90dfb27,0xb97bd414,0xb9789329,0xb95ecc63,0xb8c8b92f,0xb8d820fa,0xb81ac51c,0xb8f60e58,0xb99e62dc,0xb8304a78,0xb8667638,0xb95c884f,0xb95a5ad9, +0xb96174d0,0xb96b8b44,0xb96962d6,0xb96d5873,0xb9718da7,0xb7f52d6c,0xb7ab1cba,0xb987bedf,0xb8229436,0xb840ad2b,0xb9687f2e,0xb94e66cb,0xb955c95d,0xb9646f7c,0xb9791f24,0xb9757d86,0xb95c6c0e,0xb9360644,0xb901f388,0xb8e17a0e,0xb8df1e25,0xb9004f28,0xb8f71fe7,0xb8bea64d,0xb88b0714, +0xb855dab4,0xb87e7a71,0xb97708d5,0xba0c89c0,0xb9b2e869,0xb9d1770b,0xb9e5c697,0xb97d4275,0x382da54f,0xb9a25b29,0xb903c9d6,0x3921045d,0x391c2082,0x39240dfd,0x392abbbd,0x3924b46b,0x39408dfd,0x393047df,0xb901a351,0xb997269a,0x3885d07c,0xb948fc23,0xb9bb87cc,0xb9c1339d,0xb9cb9704, +0xb9e1e46e,0xb9e92db2,0xb9e012d6,0xb9d77c69,0xb9cb4017,0xb9c29ecf,0xb9c526bb,0xb9d87302,0xb9d514e5,0xb9c7dbf8,0xb9b58a7c,0xb9c6e183,0xb9bf1415,0xb9a5c8a6,0xb9b1bdda,0xb9bd7dd4,0xba1978b4,0xb94601fc,0xb93f6985,0x35cb15c8,0xb876aa6f,0xb8acf820,0xb7fa5dfc,0xb7f2348a,0xb88b429e, +0xb81b63e3,0xb8bda373,0xb8582364,0xb8110561,0x3882dbb2,0xb8550072,0xb891a7c5,0xb90758d4,0xb954a533,0xba06915f,0xb9ffdb2c,0xba17f947,0xba2dbcdc,0xba15dc63,0xba0b5422,0xba18b5a2,0xba0a3580,0xba1ab722,0xba3bd16b,0xba2a8396,0xba0fe021,0xb9d54b2a,0xba140a9d,0xba118335,0xb9cf54b6, +0xb9ced3a7,0xb9a6d615,0xba1895ef,0xb93a44ed,0xb8bedffa,0xb87ae612,0xb893665e,0xb86c54f6,0xb83e23df,0xb85191e9,0xb833ec87,0xb8a35a61,0xb879b850,0xb80c7073,0xb8ad83a4,0xb86b3b87,0xb8b5b8b5,0xb8a539fc,0xb6e0efd4,0xb8ae7b84,0xb9cab290,0xba283c8d,0xba4fe41a,0xba76e421,0xba4dbf81, +0xba2f85e5,0xba25560e,0xba0b0e3a,0xba174a7f,0xba67576b,0xba3bc5d7,0xba2aee91,0xb9bf92c3,0xba1e0a21,0xba013026,0xb95070f4,0xb9b1b9fe,0xb96df433,0xba3c05c0,0xb84939d4,0xb8808147,0xb866f5a8,0xb760009f,0xb68c4a15,0xb7b43d97,0x369a2a9d,0x3702dd40,0x373b1172,0x378cd048,0xb70d18b8, +0x3690275f,0xb78c04ae,0xb71632c9,0xb8205473,0xb8a96ecf,0xb860a9e4,0xb9b88374,0xba2eb8cc,0xba5371b4,0xba95c077,0xba6ec1b2,0xba5d6bc0,0xba528e42,0xba375e64,0xba61443d,0xbaa97cf2,0xba7811a3,0xba5d87a1,0xb99f850d,0xba5ad8ca,0xba314fd8,0xb96b91de,0xb9a8f9ee,0xb9a7d6ba,0xba1bb3e3, +0x387b0213,0xb8fccfb2,0xb74126ba,0xb7de706e,0xb689a183,0x3523d676,0xb5ad8534,0xb747a207,0xb6ad8c22,0xb6f449db,0xb58aa29c,0xb720b8f2,0x35d17d14,0xb7bce53d,0x35fffd71,0xb832d8d1,0x386a53e7,0xb9c909b7,0xba6c5b68,0xbaa51006,0xbacc9dff,0xbaa18609,0xba7e107b,0xba534fe2,0xba14af35, +0xba453d1e,0xbaa50906,0xba8ea3e0,0xba5e1807,0xb9a0d960,0xba47afb0,0xba0b71cd,0x382503a0,0xb93e3edf,0xba10c166,0xb97bfb3a,0xb8ff2a0d,0xb8a5fcd3,0xb7ae32bc,0xb7839f7c,0xb7037b8a,0xb6fe198c,0xb6679d32,0x360c74c0,0x3586e6dd,0xb3b3d616,0x35c138b6,0x33c853ac,0xb603717f,0xb639606f, +0xb7cd03a2,0xb7cfa7e0,0xb927d14b,0x388ee184,0x39af6732,0x3a370e08,0x3a977a30,0x3a960039,0x3a213e92,0x39980177,0xb9b7a2d0,0xb96312ca,0xb90d96f6,0x39bc3576,0x37fe0704,0xbaaa6845,0xb9d749b0,0xb9b73fd8,0xb93ab6d3,0xba3328ae,0x393cc023,0xb9865dc3,0xb8444bfc,0xb8b6caa8,0xb7aac3f9, +0xb7e29813,0x3607d35d,0xb6c08a95,0x350c212e,0xb6a76336,0xb605f745,0xb5de33f4,0xb5369610,0xb624d567,0xb61f003b,0xb78d68c3,0x36e40bfe,0xb88a3950,0x390e308d,0xb9c601cb,0xba8b7c8b,0xbabc6d4f,0xbaecba06,0xbac639bd,0xba6f6502,0xb8c3089f,0x3a18199b,0x3a364bf1,0x394af8bc,0xb8c1e2a4, +0xb996fcd2,0xb9f0db2d,0x38affccc,0x3a1b5d06,0x3a80c5ff,0x3a0bc3c2,0x39871072,0x39ff0b72,0xb9178e4d,0xb614b324,0xb805f20f,0xb509fe4d,0xb6578a19,0xb69364cb,0xb5cbc330,0xb62147ff,0xb4a64a17,0xb6217b64,0xb5efe4e9,0x3489e189,0xb6e87eae,0xb7400d20,0xb700717e,0xb82fc097,0xb87d556e, +0xb9218f7e,0xb63f7018,0x38f3e6f7,0x395252c9,0xb826bd8a,0xb9552ebb,0xba2254a9,0xba554369,0xba1ef65d,0xb9092105,0x38a816fc,0xb9303554,0xba283d7d,0xba99a579,0xbab0ab97,0xba8c4160,0xb8f44f7d,0xb9fd0c8a,0xba0f2abd,0x38f2b8d7,0xb82f4cc4,0x37959440,0xb7a92b0f,0x34e6d528,0xb65ccf16, +0xb584bd9a,0xb60adb76,0xb5ca6b34,0xb62149f7,0xb591eb53,0xb5035b5f,0xb41bc9bc,0xb7539568,0xb735a95f,0xb7c586a4,0xb75c6c99,0xb91849cd,0x38edcf88,0x39a60a71,0x39e0cd22,0x3997c227,0xb8679b6b,0xba3280b7,0xba7066c5,0xba32d29a,0xb92d5ca8,0xb9b3e3db,0xba07fe1e,0xba35d48d,0xbaada4e3, +0xbacfb29e,0xbaa88d42,0xba3801f7,0xba9fc603,0xba62aebc,0x39b3e648,0xb93a9c55,0x38582dda,0xb846799a,0x37449b37,0xb74241a2,0x35a6a305,0xb64c817f,0xb5e54c61,0xb6484fee,0xb61bd272,0xb68b517c,0xb6271d35,0xb6fad377,0x3607946e,0xb80b1f92,0x382e466b,0xb988efb1,0xb9da9450,0xba373ac0, +0xba5bda4f,0xba480b81,0xb9fb5482,0xb9130248,0x3a1c9eac,0x3a2b2b6c,0x3a44de2c,0xba30c754,0xba9317c7,0xba32a7ef,0xba49d6e9,0xb9e7577a,0xb9578e96,0xba95d677,0x39b390fe,0xba85da3e,0x397d7644,0xb92e9d3b,0x3894a72e,0xb83dda4c,0x35d3caaf,0xb74833b2,0x33110851,0xb665bc50,0xb50810f4, +0xb4889195,0x35e43a92,0xb4987a0a,0xb63d6341,0xb5f0f5f1,0xb6ba7aa4,0xb7cdcc7f,0xb9141502,0x399ed308,0x392e5294,0x398f7ca9,0x3791ccad,0xb8c588ed,0xb9b245cb,0xba3fd15d,0xba731526,0xba8262f4,0xba826c53,0xba1ff9fc,0xb9975616,0x388def77,0x399930e4,0x3a029907,0x3a720f14,0x3a58effa, +0xba2a99fc,0xb9836c5b,0x38b2acb9,0xb8a1ff47,0xb7e88e9b,0xb7b88480,0x358d78d8,0xb74a5868,0xb6be5467,0xb757bb73,0xb6aebde6,0xb742ccd5,0xb6d5d1f0,0xb7094e88,0xb676e1c9,0xb7a6c8a5,0xb72a5250,0xb7e38728,0xb4354bf0,0x39dd0e08,0x393780fd,0x38ea39a7,0x38a5c469,0xb8f49c7b,0xb93fed22, +0xb99afada,0xb98d8a8f,0xb977ef5f,0xb90b1c6e,0xb9a54cd3,0xba04a581,0xba48ecda,0xba445a12,0xba380244,0xba357c3f,0xba42ac72,0xb92f26df,0x3a001783,0xb8932fde,0xb8e2bb85,0xb75aaead,0xb83ad38f,0xb77c79b9,0xb710f96b,0x35e2dc72,0x3649f09d,0x3707614f,0x374d27b4,0x3703e121,0x370231e2, +0xb72937c4,0xb643641d,0xb7d8b367,0xb807ec00,0xb7b30a10,0xb603b3ce,0xb7b64687,0xb83de04b,0xb90f15cf,0xb908f6c8,0xb98542c0,0xb9c6c9e5,0xb9eb7002,0xba088ef7,0xba084f0b,0xb9e5bb13,0xb9cdd0c6,0xb9f47b87,0xb9e51b5f,0xb9cde4a4,0xb98e94ba,0xb8945d1c,0x383a7d40,0xb80d253f,0x38602a59, +0xb7c02a6e,0xb802637c,0xb7c7c66e,0xb7b2dd7a,0xb7c05f4c,0xb817dbb6,0xb7ab5d83,0xb831093a,0xb82902b6,0xb7cf20f9,0xb832280e,0xb6917b45,0xb7b15afc,0xb7cff619,0x385120e1,0xb9097764,0xb9d3c78d,0xb9ab60f6,0xb9a3f1a2,0xb99b2e29,0xb9b75810,0xb9b168f1,0xb99ff4e8,0xb9a80d86,0xb9b66820, +0xb9e7c6e7,0xb9e8532b,0xb9e80708,0xb9d6884d,0xb9839b96,0xb8f723ac,0xb893b810,0xb7862fa0,0xb9a57c3d,0xb96c8f7e,0xb90fda08,0xb900622d,0xb8234cd6,0xb79d9938,0xb8856ec5,0x37bb63e5,0xb792cb8a,0xb6ce3eab,0xb61e1cae,0xb713a03c,0xb7c492dd,0xb6ace75d,0xb8a03ddb,0xb814f0ce,0xb82f4b66, +0xb93fc312,0xb942b7ce,0xb903d91a,0xb8be83b6,0xb9500d16,0xb94de5aa,0xb961e248,0xb97da3e7,0xb98d759e,0xb9ad0878,0xb9ae042e,0xb9ac9d19,0xb9bc1fce,0xb9c50ee8,0xb9f8130b,0xb9f56e97,0xb9fb562a,0xb9dfaadc,0xb9cc8d02,0xb971f3f6,0xb989df2b,0xb99bb966,0xb94ae4ff,0xb866064b,0xb94b4259, +0xb9006325,0x37986fcd,0x37e70c89,0x37f278f1,0x38154084,0x383caccc,0x38837d71,0x389e053c,0xb907f60b,0xb9578cfe,0xb8712427,0xb9709fe7,0xb99f349d,0xb9991554,0xb9a11deb,0xb99d427c,0xb99c925f,0xb99e48da,0xb9984837,0xb98e6c67,0xb990d452,0xb99252b3,0xb99c45b4,0xb9a493a2,0xb9a1764c, +0xb9a1908b,0xb98afc2e,0xb980b1d0,0xb971d829,0xb96d0dfa,0xb9e753fb,0x38f29520,0x38cab841,0x39486392,0x38aad5be,0xb9579e6e,0xb9dab873,0x39182c2f,0xb831704e,0xb964898a,0xb971205d,0xb97cb0d8,0xb97476ec,0xb97ce2f8,0xb98f7e97,0xb97bd13b,0xb85e47aa,0x39010702,0xb9ee1ef9,0xb957b1e4, +0x38214a3a,0x393120a4,0x38d38347,0x38ef1628,0x38df7d01,0x39036424,0x390504a2,0x38fa0d35,0x390284fd,0x3901ca1e,0x38e05661,0x39021378,0x3908c9c1,0x392331ff,0x391127d9,0x39099076,0x38dd9ece,0x38f59765,0x38f51945,0x39339877,0xb9c94cbb,0x38800232,0xb83bc230,0x389b22f0,0x3863fee8, +0x37251df4,0x37de01c9,0x381b87f5,0x36d569a1,0x3859847a,0x38340599,0x379e7aed,0xb8fc51d5,0x38ba7003,0x368e629b,0x382821f8,0xb91ab5a9,0x3934224b,0x390ddf64,0x390b9b1a,0x390b2dbd,0x392f1130,0x39426a68,0x3943be1f,0x393df752,0x392a0c7f,0x38f4158d,0x39448e81,0x396e8480,0x399e4272, +0x3968d380,0x39351b53,0x38cfc972,0x38f88c33,0x3928bc58,0x388d6d4e,0xb7c39ee8,0x393ca7a2,0xb61e831f,0x3847cebb,0x37326b41,0x38607187,0x37d97dd3,0x3867177d,0x383d66fe,0x38a7f07d,0x3771d0ed,0x388f8016,0x3801a4a3,0x3887e5f1,0x3847710b,0x3845d5b0,0xb6f87bdc,0x38b6ba68,0x393f0b21, +0x38eef7f3,0x391795fd,0x3950c820,0x396dcb45,0x39566c97,0x396875c8,0x394f2157,0x38e879f4,0x3962cceb,0x39934e92,0x39d2730b,0x399523c4,0x3966133b,0x38ce7d94,0x39058bbb,0x391dbdc1,0xb75a208f,0xb71a42c1,0x37615bec,0x37f4aa4e,0x378ec14c,0xb41850b4,0x37c3e706,0xb6c9c38a,0xb6b53ce0, +0xb74e3b06,0xb74c1343,0x3667f096,0x3700cb32,0x36bb00b7,0x37ab5046,0x37c2522b,0x38723b53,0x363bc2cb,0x37b95545,0x3968757e,0x39046704,0x391fc402,0x399b1239,0x39c269b6,0x39993b04,0x39901474,0x395238cf,0x38b414eb,0x399f779f,0x39d5de8b,0x3a2670ab,0x39bc187c,0x396894ca,0x388b6739, +0x389faec1,0x38f19a8a,0x383adc58,0x38997f99,0x385ad77a,0x3810bf35,0x373cded5,0x3700197e,0xb60b2dde,0x364bd7c1,0x37204a58,0x371bb942,0x36f75068,0x364bbe21,0x37075d7a,0x361d26dc,0x37b7b93f,0xb66553e6,0x388c3959,0xb8334a26,0x38a845e2,0x39154dbc,0x38932fcb,0x390f5589,0x397572cc, +0x39a9f0ec,0x3987d372,0x39a8189a,0x3981b3b6,0x3892eeed,0x39911cb9,0x39dc1c1a,0x3a16f15d,0x39d64d8b,0x397e5ea3,0x38b68599,0x38ed9bba,0x39a7846c,0x3a005ee8,0xb7de7762,0x3808fc92,0x36f06515,0x36bc8f05,0x3721adee,0x3677014a,0x368406fa,0xb5cda7e7,0xb5efba5e,0xb5589660,0xb5e8f9d1, +0x36126cfb,0xb61b6f28,0x379180e0,0xb7808977,0x38b11d0f,0xb7e13087,0x39e9f292,0x3a4f81a1,0x3a4a2172,0x3a6a1dd7,0x3a2e24dd,0x39ed655c,0x39759f97,0x39742d07,0x39cced20,0x3a19999b,0x3a5eef07,0x3a675a79,0x39f01086,0x3a37d068,0x3a24d284,0x39f8c7a6,0x39c79409,0x39c337c0,0x397f56d0, +0xb905f2c3,0x3928941e,0xb80a96c3,0x383507cb,0xb7534d06,0x371bb2e1,0xb6149c4b,0x36ab55bd,0x35a7d328,0x362d4d60,0x3506da56,0x365572b4,0x3667d5de,0x3795236a,0x3712513c,0x37de19a7,0xb809db83,0xb9119b18,0xb7b4d8f0,0xb8dd9694,0x3817ebc5,0xb926a943,0xb8482bef,0x389b87be,0x39add48c, +0x39c7dfd7,0x3962bb3e,0x390ec07d,0x3778b3f1,0xb9630bb9,0x398d1f89,0x39f89da9,0x39f2f06f,0x39e5bca1,0x3981ba68,0x399b7da0,0xb7138c40,0x3886e69f,0xb67ad4c6,0x378fc8e4,0xb6a86aab,0x36edc0cf,0xb56a110f,0x365993f6,0xb40cae95,0x362d9373,0x35e81520,0x3430f573,0x36cc54cf,0x36ffe62c, +0x36809fd1,0x380ab1a2,0x37f1b5eb,0x393e7017,0x3980f834,0x398eeddf,0x39c41ab5,0x39eaf0df,0x39fc9edf,0x39b87502,0x3985ab22,0x396d943b,0x39a51746,0x39ff3ff0,0x3a2ccd7b,0x3a26fb74,0x39e991cd,0x398c980f,0x39248f48,0x39380c5d,0xb70a583e,0xb928683f,0xb7dd1816,0x359ac5d5,0x3739e0f6, +0xb6dbda8e,0x36ddc7fe,0x34baf939,0x36302d8b,0x35e4bf3f,0x35c0c2fc,0x361c78d6,0x35010fd5,0x35d3cdbd,0xb5045f63,0x37683f05,0x36accbae,0x381008c6,0xb70e4a27,0x389b1e1a,0x398a0d73,0x39b71221,0x39d32572,0x3a17e77c,0x3a18b913,0x39e0e885,0x39cbd8af,0x39b9cb88,0x39e10b78,0x39caaabc, +0x3a0d2e50,0x3a58c203,0x3a3bf794,0x3a2e1df9,0x3a50d4a4,0x39706a12,0x3883e291,0xb98a683d,0x39335c69,0xb83001b4,0x37b6e466,0x37618c3a,0x3598f3e3,0x356ed605,0x36284323,0x35bde1d6,0x3519e551,0x3631de01,0x35fa6e44,0x369159c4,0x36151259,0x3645b559,0x36211496,0x37876af2,0x37598a96, +0x37339ac5,0x3882add9,0x3881b2c5,0x38d1ca17,0x37ef9a20,0x383a9920,0x38fa838e,0x3a010025,0x3a043b5c,0x39edaeb5,0xb97b96d5,0xb9ac34f1,0x3805859a,0x3a1bb148,0x3a890c9c,0x3acb7779,0x39f2f488,0x3ab7aecc,0x37bbceab,0xb99c9367,0x39168634,0xb8792751,0x37dafc15,0x351bdb73,0x37136437, +0xb6055915,0x3611a9e3,0xb4d1b895,0xb3d75ef6,0xb6118749,0x35db985f,0x35397610,0x36f2a1b5,0xb6652f18,0x3835a23a,0xb7062688,0x3905c8f1,0x392224cd,0x385d58c8,0x360c3bcf,0xb7af50f7,0xb75ee9c2,0x38020a02,0xb80f7c69,0x37e840c4,0x395f6da2,0x39b997cd,0x3a180518,0x3a83a773,0x3aa2e555, +0x3ab2fc1a,0x3ad65e98,0x3abcdc2c,0x393e7bb2,0x39381f03,0xb83a9e9b,0x38034659,0x3772c41a,0x372926ce,0xb55a9250,0x36ea70bb,0x36ebee56,0x36fcf13f,0x3708130a,0x37298921,0x36f9c1af,0x3705892c,0x35cf1323,0x37849ac6,0x36e9d6bd,0x381e69ef,0xb88ed23a,0x395fc84d,0x3951a473,0x3979db12, +0x39843c0a,0x3945b61b,0x39196561,0x38b5ba2d,0x388a567d,0x3806202f,0xb7fd225f,0xb82e4894,0x36fad27f,0x39571fd6,0x38f41ff0,0x39043952,0x3907f5fd,0x38c04ea7,0x39a2f04c,0x393b0fe9,0xb84cfbb4,0x38822dfa,0x3698716f,0x38542fab,0x3752bd3d,0x37163a0a,0xb5b14991,0x34f67ced,0xb7084f5b, +0xb71b01cb,0xb72264fa,0xb626e94c,0x370305bf,0x37420424,0xb26a6c96,0x37a37e73,0x37bf028d,0x348f7eac,0x39017092,0x38b7b96c,0x385e01b7,0x388b0a26,0x37b966d0,0xb8308c5b,0xb83537bf,0xb886cea7,0xb885a2a7,0x3806dc26,0x39057292,0x3985d512,0x39178e94,0x38b007fb,0x3915c6a2,0x391b849b, +0x394bb5df,0x398a0c61,0xb823076a,0x38528399,0xb7028bc6,0xb730cb0b,0x36710604,0x37afcc80,0x37cc10f9,0x37a0b343,0x37c75fbb,0x383bfc2e,0x377e552e,0x382c5ebd,0xb789c615,0x37b4459d,0x359bdaf9,0x38285efa,0xb7c58006,0xb86ca827,0xb8794e2b,0xb8bab08e,0xb8be8616,0xb90ef58c,0xb9160184, +0xb915f1a5,0xb890756a,0xb755f200,0x37e903cf,0x38894412,0x38b6e64c,0x390864a9,0x3936ecba,0x39799537,0x397150c0,0x396656e6,0xb75d2d43,0x3792a7a4,0xb935c574,0x3868940b,0x38281616,0x384ba944,0x387e41e1,0xb78540ee,0x37dc8693,0x36307e5b,0xb6b5d4b0,0xb664356a,0x379d8577,0x36a4d254, +0x3855a414,0x388fa93e,0xb66949ae,0x38e19ff6,0xb92421b3,0xb88160ff,0xb887b261,0xb8a581fc,0xb8a226b1,0xb89e36c2,0xb89e54ef,0xb8b315aa,0xb8b7397c,0xb88a5d7a,0xb7ea0f3d,0x379d5adf,0x38a21099,0x390466ef,0x38a186c1,0x350b8392,0xb6c6587c,0x37032315,0x381c4e03,0x3874a1ef,0xb7ad40ef, +0xb92c4dbf,0xb991b0c9,0x38b53c61,0xb6e070c4,0xb8eb6f80,0xb9019ae9,0xb8fbfd9c,0xb8fc804e,0xb908b337,0xb91cd089,0xb926cfab,0xb66aed27,0x38ca2af0,0xb998fb7e,0xb916e365,0xb7912b4a,0xb59676a0,0xb7880761,0xb79bdabd,0xb7c66839,0xb7fb417c,0xb801bc76,0xb7da21e4,0xb7056d65,0x37514bad, +0x37b77eb2,0x37d8bc83,0x37bbb178,0x380a25aa,0x3839cf45,0x385e1092,0x387d3052,0x3859e807,0xb740c93e, +}; + +const uint32_t orange53_rom_AlphaL32[578 * 86] = { +0x3e8f52c1,0x3e145823,0x3e963792,0x3e5e155c,0x3e5f72bd,0x3e63c256,0x3e6aa8ed,0x3e715293,0x3e75d7db,0x3e6cdba4,0x3e6ac8ed,0x3e611eaa,0x3e5bb05b,0x3e5a8795,0x3e5baa66,0x3e56bb3d,0x3e593954,0x3e53cf54,0x3e558dcb,0x3e488834,0x3e66ab70,0x3d71aaae,0xbc82e075,0xbe0629bf,0x3dce05ec, +0xbc419c9d,0xbe0866d5,0xbe03c908,0xbded3e64,0xbdc9c452,0xbe12e4c6,0xbe14222d,0xbdf16d26,0xbd2bbbd9,0x3df567fd,0xbdd6b256,0xbd6f131f,0xbe2f205c,0x3e5bdb82,0x3e925c95,0x3e8f7308,0x3e9400ef,0x3ea360f4,0x3eaeb6c6,0x3eb14f5d,0x3e9db253,0x3ea202a2,0x3e968ba6,0x3e8c7853,0x3e8a7eba, +0x3e8c3ff5,0x3e7e7a47,0x3e86bdd6,0x3e818221,0x3e740e62,0x3e6f31c6,0x3e88b450,0xbab6bf87,0x3d8b3aff,0x3cf37ee4,0x3d0339fc,0x3df4b4b6,0x3cf4e8e6,0x3d87a88f,0x3b57097c,0x3d747515,0x3d0ec887,0x3e517835,0x3d556e35,0x3d385e32,0x3d9b237b,0x3cf23b2f,0x3dbc23df,0xba6ef452,0x3eaf0a18, +0x3e9fde99,0x3ea44017,0x3ead0f01,0x3ed09ca6,0x3ed7ad6a,0x3edf233f,0x3ed017ab,0x3ebd1d96,0x3eaa4516,0x3e9fdbfd,0x3e9655a4,0x3e904283,0x3e9018c9,0x3e8544cc,0x3e89307a,0x3e669204,0x3e836bc2,0x3e155eb2,0xbd339444,0x3d31dfac,0x3d93a05f,0x3b87c8ad,0x3d17a77c,0x3d5501c9,0x3d50487d, +0x3e2a71b8,0xbc9ec763,0x3dc7bf69,0x3b74cbf2,0x3da4a8fb,0x3dbb63b8,0x3d97319c,0x3ba25d30,0x3e4c7c88,0xbd8e98ed,0x3e002d83,0x3ebe5e2d,0x3ea36440,0x3ec26f6f,0x3ee8ccdb,0x3f0209a7,0x3f0075a8,0x3eea3e12,0x3ed3cf57,0x3ec12164,0x3eab00eb,0x3e9b5f31,0x3e989415,0x3e8c2777,0x3e860cd7, +0x3e85086e,0x3e63c417,0x3e61a899,0x3e167962,0x3d4b9596,0x3dcfe1e5,0x3c559e5f,0x3db28c8d,0x3b5cf73b,0x3d7d7ab7,0xbce3be26,0x3c8cf35c,0x3c814ccd,0x3dafc9aa,0x3c4c864a,0x3d71dff6,0xbd0140c9,0x3d1f50a0,0x3d84241a,0x3ddfb5fb,0x3e1dc413,0x3e5f1d8f,0x3edc2100,0x3eb80086,0x3ed7dd1f, +0x3f0c3141,0x3f1bbd45,0x3f1cebb4,0x3f0f2116,0x3ef7d35a,0x3ed200e8,0x3eb96677,0x3ea9a6f4,0x3e9d9dfe,0x3e9a5e96,0x3e8ff7aa,0x3e88829e,0x3e65c951,0x3e5520fa,0x3e093732,0xbdba6a10,0x3d0e517b,0xbbe83a15,0x3c0da358,0x3c9303bc,0x3b9e9c8f,0x3cfabda6,0x3c985be1,0x3ca09d9f,0x3bb90cd8, +0x3d461a2a,0x3c8ed9d6,0x3d1a71f4,0x3db26824,0x3d702853,0x3cd0b8a9,0x3bdf59e8,0x3e5cbaf6,0x3f03298f,0x3ef308e6,0x3f064eca,0x3f10daf6,0x3f1a6c38,0x3f1fcc57,0x3f24e97b,0x3f1dcb0e,0x3f07ff91,0x3f094cc1,0x3eff45bd,0x3ed93ba4,0x3ed47a6a,0x3ebb4d27,0x3eac7b7a,0x3e862664,0x3e699b22, +0x3e300cec,0x3ce489ba,0x3dcc1d74,0xbb61af1a,0x3d3a27b4,0xbc0301ec,0x3c90bc47,0x3aa38ef3,0x3cecb012,0x3cfdbadb,0x3c7c149e,0x3c89dbd4,0x3c27f507,0x3db4e3a6,0x3ce74391,0xbd5642d3,0x3e428488,0x3d995d89,0x3e93c2fe,0x3f0007ce,0x3ef721da,0x3f0cd191,0x3f1fa736,0x3f27719b,0x3f1dd6a3, +0x3f1e0212,0x3f0fd2b2,0x3f004547,0x3ef174d3,0x3ee1b958,0x3eeb23e7,0x3edc983e,0x3ecb06e5,0x3ec54eaf,0x3e91b372,0x3e905baa,0x3dfa85d6,0xbd1d4b9e,0x3cc86998,0x3d243164,0x3d12fac3,0x3cb42fd1,0x3ca51b38,0x3c497714,0xbb9c9e6f,0x3c181f66,0x3c39193a,0x3d4e4b8e,0x3cc670c5,0xbc0156c2, +0x3d84e631,0x3dfa76c5,0x3d038430,0xbcd68927,0x3e932924,0x3f2e619c,0x3f27d826,0x3f588194,0x3f423e10,0x3f3a3a80,0x3f24b3c6,0x3f11f255,0x3f04912a,0x3f100003,0x3f158c72,0x3f228892,0x3f2099da,0x3f0d741f,0x3ef14d54,0x3ecf863f,0x3e9e85c1,0x3e9668f9,0x3e1fda2b,0x3d38edf7,0x3d41df18, +0xbc9d9c88,0x3d769a2f,0x3c993996,0x3d26ce58,0xbb2dbe56,0x3d48d10b,0x3d063c51,0x3c61d7c8,0x3c3514f7,0x3d09d70d,0x3d5fa5f0,0x3da29cdc,0x3d1a2a9d,0x3c9fecf5,0xbd9c9d3b,0x3e9bdb59,0x3f569786,0x3f5827d5,0x3f711142,0x3f489fcd,0x3f3c1b8e,0x3f296230,0x3f177348,0x3f15af7d,0x3f2a6c5a, +0x3f3203cf,0x3f307949,0x3f27aca5,0x3f118da4,0x3eeb7de0,0x3ec4a307,0x3e8faa08,0x3e9f5931,0x3e00c37d,0x3d0833e1,0x3d60df6a,0x3d961931,0x3a143889,0x3d55daa9,0xbb7c69c8,0x3cf12898,0x3bbc16f2,0xbcbb52ea,0x3d8abc5e,0xbadf3970,0x3d1d47fc,0xbd69ea99,0x3dd87891,0xbd484ad4,0x3e815111, +0xbd3fcc84,0x3f3bee1c,0x3f5702a6,0x3f4fee49,0x3f4d4908,0x3f337b50,0x3f2c0597,0x3f1b2489,0x3f2343b2,0x3f236df3,0x3f1cc465,0x3f172c50,0x3f116d8f,0x3f0189d5,0x3eef3e0b,0x3ecd5a6f,0x3eb1801e,0x3e945f72,0x3e8e2e24,0x3e0a418c,0x3d8fdf1e,0x3de39d5e,0xbbd4a474,0x3cc5a9d9,0x3d265e35, +0x3c8ee181,0x3ce692c2,0x3d3276d7,0x3d40e57f,0x3c15a361,0xbc06cd88,0x3d2bb831,0x3d1b2a39,0x3debb163,0xbd76a6a2,0x3e04073a,0x3dcfa296,0x3e794066,0x3f61a1e2,0x3f2e3406,0x3f38c211,0x3f152ce6,0x3f0d9ec9,0x3f118389,0x3f04b4b7,0x3f0cd703,0x3f252027,0x3f16cefa,0x3f0a134a,0x3efb64da, +0x3ec74b5a,0x3e9bd1ec,0x3e88ed46,0x3e700735,0x3e81a507,0x3e7247a8,0xbc5b000d,0xbc7f5f9d,0x3d8ce6f3,0x3a9f9128,0x3d194480,0x3c6968ed,0xbc9c9276,0x3cbc3d2b,0x3b8187b1,0x3c8cbd1c,0x3d7fde5a,0x3d25dd61,0x3e1f3daa,0xbd71d326,0x3d9505e0,0x3e85c0bc,0xbe14663f,0x3f078a4a,0x3f08ff25, +0x3eef0a2d,0x3ef62eba,0x3eeaba8f,0x3ee88a3b,0x3ee7ef77,0x3edbbfa8,0x3ec18cc8,0x3ec0e706,0x3ec2e2bc,0x3ecc793c,0x3ec110e3,0x3eb8ee87,0x3ea74e17,0x3e9252bb,0x3e808af6,0x3e97d152,0x3dbdabdf,0xbcf74b6b,0x3e5d392b,0xbbbc975a,0x3daf1530,0x3d2fdf23,0xbcd48ee8,0x3de15cab,0x3cba9a46, +0x3d7f9414,0xbc424eaa,0x3cfe15eb,0x3d3dc6f6,0xbcd041f7,0x3db935e6,0x3d849aa9,0x3e41b928,0x3d6bd316,0x3e28cd88,0x3ee0750a,0x3eb9de30,0x3ec1c4db,0x3ec4a554,0x3ed0721f,0x3ed68788,0x3ec6df2e,0x3ebb7048,0x3eb7a565,0x3eae51d5,0x3ea6469e,0x3e9c0527,0x3e96f892,0x3e81fd61,0x3e7027fa, +0x3e4f2040,0x3e7b0ed8,0x3e5a18b1,0xbca0a8a4,0xbc64954a,0x3da329c8,0xbb84e965,0x3d2a1350,0x3d5499c8,0xbd582c45,0x3c38f946,0x3d327425,0x3d367cf5,0x3cf52dc0,0x3c07065c,0x3d921e85,0x3d43f3ae,0x3c59209c,0x3d607590,0xbd2358cd,0x3e8acbdd,0x3e9e6298,0x3e9447cb,0x3eb5d66e,0x3eb4185a, +0x3ebd9d07,0x3ec21fdc,0x3ec18405,0x3ebf38c0,0x3ebd9faf,0x3ea25d4b,0x3e8cd223,0x3e62d805,0x3e5e91b5,0x3e475292,0x3e532556,0x3e389f94,0x3e7ef9e8,0x3dc26159,0x3d93bba4,0x3da2b952,0x3d9e82ae,0x3d617f4d,0x3cc48cc4,0x3d2a81a6,0x3d6088d8,0x3e4d349d,0xbd991310,0x3e16035a,0x3baf8418, +0x3db092e0,0x3d9d7eb0,0x3c49b9a4,0x3dd1e643,0x3e3c29ce,0xbda96432,0x3e9ccc05,0x3e8a3f68,0x3e8fd060,0x3e85bb76,0x3e9614ed,0x3e97ee48,0x3ea540b1,0x3e952e38,0x3e89e5ab,0x3e7e4b14,0x3e794bb8,0x3e746514,0x3e5fb1df,0x3e66166e,0x3e627c09,0x3e6f4880,0x3e583a61,0x3e6ce9a7,0x3e5ae103, +0xbd654597,0x3d89c3a4,0x3d0b7e2c,0x3dd351df,0x3d9d9073,0x3da5c144,0x3d5ece48,0x3cefadec,0x3d21b446,0x3d3e6217,0x3e51bb0b,0xbd07760b,0x3da681a7,0x3d8cf402,0xbdb869b1,0x3e50f27c,0x3d8ef47f,0x3e8fc86a,0x3e719d88,0x3e7df47b,0x3e80b787,0x3e8595df,0x3e84b419,0x3e895041,0x3e8667b2, +0x3e865617,0x3e83fc47,0x3e7e8241,0x3e73e6d1,0x3e6cf5da,0x3e6b79c6,0x3e6ac9d9,0x3e6d5897,0x3e6d6b10,0x3e62c775,0x3e927b5f,0x3dae94a4,0xbd1c4d87,0xbe079640,0x3d9ebf76,0xbd354e1a,0xbe0e03d6,0xbe1de0dc,0xbe034c9d,0xbdf10d58,0xbe2b5687,0xbe318071,0xbdf45595,0x3b808bed,0x3de64a8a, +0xbdf3d0cd,0xbd91ac9a,0x3eaab7ce,0x3f178910,0x3ee158ca,0x3eb72cf1,0x3ec74ff4,0x3ec94f09,0x3ecee858,0x3ecfce07,0x3ed39bf4,0x3ed6c2e8,0x3ecee1e2,0x3eceeb67,0x3ec9a5bf,0x3ec5b686,0x3ec472e2,0x3ec415e0,0x3ebddfb0,0x3ebf5e62,0x3eb9c37a,0x3eb9de7c,0x3eb65f84,0x3eb23eb5,0x3ed26768, +0x3ecf8325,0x3e8fe59b,0x3ed1051d,0x3ecfa686,0x3e962b12,0x3e973fb9,0x3e97e1a0,0x3e98d776,0x3ea0971b,0x3ea09883,0x3eaef7a8,0x3ed1fa17,0x3ed5616b,0x3ea62f72,0x3ed762cb,0x3efabc31,0x3efe01fc,0x3f006fb1,0x3f03d7fb,0x3f0d3118,0x3f12b26d,0x3f1b0fba,0x3f1c151d,0x3f0a1238,0x3f10ce18, +0x3f08aa78,0x3f00fdcc,0x3f00b281,0x3f0029ec,0x3ee45630,0x3ef4786e,0x3ee53b34,0x3edde77e,0x3ed3c65d,0x3ecf48e7,0x3ed9d0ae,0x3ecf33b8,0x3ebec885,0x3ed0af58,0x3ec90a0f,0x3eb36d5b,0x3ecc8157,0x3ec75d3b,0x3ec58fd5,0x3ed434a7,0x3eb5ccfd,0x3ec3dfac,0x3ed1b0e9,0x3ee058f5,0x3ee616ef, +0x3ee3ceb9,0x3f0d1b7e,0x3f08f082,0x3f08c3f8,0x3f1d44f7,0x3f2a032d,0x3f3d47b2,0x3f3bfa18,0x3f41f99e,0x3f33ee29,0x3f271361,0x3f1e15f9,0x3f1adc89,0x3f107143,0x3f066e88,0x3f031aec,0x3eefe501,0x3ee9e898,0x3ed895b3,0x3ec52865,0x3ec5f488,0x3ec2ac1b,0x3ea6b4e2,0x3eb15bbf,0x3e9c596c, +0x3e8c72d9,0x3e9d3dd5,0x3e817559,0x3ea29115,0x3e9fd543,0x3e933a6c,0x3ea0ea51,0x3ea96136,0x3eb6734b,0x3ec2a155,0x3ed0acb8,0x3eebe83b,0x3ef76492,0x3f02d0b9,0x3f07ebe5,0x3f1ec964,0x3f3b3569,0x3f515b1f,0x3f5dc3b2,0x3f578e19,0x3f4420b2,0x3f3623c4,0x3f2c88e6,0x3f1f338d,0x3f15a618, +0x3f088657,0x3ef825e6,0x3eeb6b0e,0x3edd20b4,0x3ec20b95,0x3eabe16d,0x3e9b8f7a,0x3e908562,0x3e6b88eb,0x3e59f8a4,0x3e47e0d4,0x3e2d7091,0x3e1cc074,0x3e1a0a84,0x3e0c18aa,0x3e26d61d,0x3e333791,0x3e3984ba,0x3e6a4d6c,0x3e819e3e,0x3e8f2285,0x3eb04013,0x3ec203ea,0x3efee064,0x3f1a4b95, +0x3f12f9e2,0x3f3eed8b,0x3f5bac0b,0x3f7e9953,0x3f86d09d,0x3f864732,0x3f70227d,0x3f544d84,0x3f42753a,0x3f39dd34,0x3f28683f,0x3f178d92,0x3f0cc63d,0x3efec2fa,0x3ee30500,0x3ec63c6f,0x3ea7dd02,0x3e8ed124,0x3e4db25b,0x3e280f44,0x3dfb054f,0x3dc37b5b,0x3d85654e,0x3d662a9e,0x3d54b72f, +0x3d4c0f61,0x3d9106c1,0x3d8d67bc,0x3de6ccf5,0x3e0ceef2,0x3e3e4234,0x3e8252ac,0x3e8c83b2,0x3eca75a4,0x3f190a00,0x3f334b90,0x3f2dd110,0x3f60f701,0x3f822d00,0x3f85c4fb,0x3f8ba95d,0x3f920b04,0x3f9eaccb,0x3f9bb589,0x3f81d3b6,0x3f7d7344,0x3f775a72,0x3f6ea04f,0x3f583b35,0x3f3e214e, +0x3f36f55a,0x3f1be9be,0x3efd0d21,0x3ec64718,0x3e914076,0x3e681dd4,0x3e2592b7,0x3e14b67c,0x3dbd4b51,0x3d9d6fb6,0x3d92b077,0x3daf7405,0x3df1c941,0x3ddbc76b,0x3e153221,0x3e39cef9,0x3e7ad953,0x3ea1390f,0x3ebbe2c5,0x3f05088e,0x3f37dc18,0x3f41a361,0x3f5acbc1,0x3f8b728e,0x3f97e463, +0x3f98afa0,0x3fa636d1,0x3fa70e57,0x3fb0ee89,0x3fa7820d,0x3f9d0f4b,0x3f9c781a,0x3f8cb85d,0x3f8406db,0x3f631a86,0x3f46e8e6,0x3f2b6fc2,0x3f19900b,0x3f04629e,0x3ee1d5d3,0x3ea72cd2,0x3e9573bf,0x3e63001c,0x3e228913,0x3df1fe3a,0x3dc1d435,0x3db533ac,0x3d949728,0x3db45b41,0x3de1e1c9, +0x3e1ae278,0x3e4635cd,0x3e6fcabf,0x3e9f836f,0x3ee3356e,0x3f06cbfa,0x3f4be163,0x3f676799,0x3f807951,0x3f853767,0x3f7b0549,0x3f8b52fe,0x3f932344,0x3f979ad0,0x3fabd6fc,0x3fb08417,0x3fa7afac,0x3f96f270,0x3f87f253,0x3f690fb6,0x3f4a06d7,0x3f3c84e9,0x3f2a2d78,0x3f163ef8,0x3ef23752, +0x3ee35402,0x3eca5830,0x3e973dec,0x3e8280c6,0x3e69f510,0x3e210452,0x3e1b85ef,0x3dc5d550,0x3e1a26e4,0x3e2c0f7a,0x3e084a03,0x3e24e023,0x3e407810,0x3eae3167,0x3ecda82c,0x3f1081b0,0x3f02047c,0x3f65b760,0x3f73a2a9,0x3f4fe7e3,0x3f5aa760,0x3f4079dc,0x3f6ced57,0x3f801396,0x3f9ea0cc, +0x3f9d155b,0x3fa30184,0x3f9a2184,0x3f8bb6f6,0x3f73e9f3,0x3f4d065b,0x3f439b3e,0x3f2a57bb,0x3f1eee52,0x3f02f9bb,0x3ee34c7a,0x3ece158b,0x3ed3b75c,0x3e99ae84,0x3eb5dd88,0x3e5f34ad,0x3e6d1654,0x3e131a55,0x3e1cbfaf,0x3e014899,0x3e4ffe2b,0x3e58e877,0x3e15c0c0,0x3e665899,0x3e8a3547, +0x3eca8601,0x3f0b0130,0x3f16cafb,0x3f7258b2,0x3f35da4c,0x3f30aafa,0x3f49d978,0x3f2ea6e8,0x3f6e39b0,0x3f8f624f,0x3fa75a2e,0x3fa1c38a,0x3f99658b,0x3f8a4be6,0x3f827b7b,0x3f7ada1b,0x3f60f4b2,0x3f4f705d,0x3f32fba9,0x3f0d383e,0x3f04c0de,0x3ee1c2c0,0x3ef8dff9,0x3ed86ff6,0x3ee0fd01, +0x3e919d34,0x3e95d625,0x3e6f54d0,0x3e493a18,0x3e15bf7c,0x3e4b5308,0x3eb5abee,0x3e2fc6fd,0x3e396236,0x3e5b5fee,0x3e93b25b,0x3ecabe76,0x3ee1f251,0x3f184ba1,0x3f763bc4,0x3f77cf9d,0x3f3464b0,0x3f7cd3f0,0x3f6f0e5b,0x3f8b871a,0x3f912a4d,0x3fa033c6,0x3f94e39c,0x3f92009e,0x3f883521, +0x3f71b9d7,0x3f5c86cb,0x3f4916d7,0x3f2c9432,0x3f1c66ff,0x3f0e8d5e,0x3f1ac671,0x3f118300,0x3f17d104,0x3ef69941,0x3eb4b7c4,0x3eb2858a,0x3e8e4e48,0x3e8d7ae6,0x3e4a5722,0x3e1cd361,0x3e4c97f1,0x3e5bc280,0x3e7aedcd,0x3e980774,0x3eb627a4,0x3ec83658,0x3ea92755,0x3f10ac9e,0x3ef38c85, +0x3f58e159,0x3f44efc4,0x3f617302,0x3f79384a,0x3f7b90af,0x3f8e47d9,0x3f93c420,0x3f933db1,0x3f9873df,0x3f91aec6,0x3f8abedf,0x3f7fb1dd,0x3f617547,0x3f482fcb,0x3f2d4ea7,0x3f1f9434,0x3f112a6d,0x3f242dca,0x3f2c8a58,0x3f0f7633,0x3ef862f6,0x3f0e532a,0x3ee3904b,0x3ec57380,0x3e9bff71, +0x3e3529c9,0x3e9c1d96,0x3e5ed2f8,0x3ea2d680,0x3e57d141,0x3e98c871,0x3eab62d9,0x3ec1bd38,0x3ef34b84,0x3f0c5640,0x3f36d8ac,0x3f44e9fe,0x3f56962b,0x3f603ee8,0x3f711913,0x3f7b581f,0x3f82a307,0x3f879252,0x3f89f26a,0x3f863bc7,0x3f82d373,0x3f7c90a4,0x3f637328,0x3f53c039,0x3f3f3833, +0x3f345a4b,0x3f2d1af1,0x3f2581e7,0x3f264c1e,0x3f26b523,0x3f27b482,0x3f05078a,0x3ecf75e0,0x3efd4533,0x3eb512d9,0x3ea788c0,0x3e9db265,0x3e6fdf23,0x3e8693d6,0x3ea81f71,0x3ea6846a,0x3eaa394c,0x3e8db9be,0x3ed8dbcc,0x3ed3d050,0x3f06cf87,0x3f1226cf,0x3f1e7497,0x3f50b1bf,0x3f526ea7, +0x3f5e692d,0x3f6bcd48,0x3f6b9c6b,0x3f7147e0,0x3f76c446,0x3f6bd487,0x3f63d6a7,0x3f58c29a,0x3f5afc53,0x3f5174c4,0x3f48ccc7,0x3f451f58,0x3f3ab9d3,0x3f314350,0x3f29c730,0x3f25bca5,0x3f13af03,0x3f184edd,0x3f005704,0x3f097cc9,0x3eeb9ba1,0x3eda68ae,0x3ef77af1,0x3ec6ade8,0x3f16bbfe, +0x3ec2d39e,0x3ef85bee,0x3eca3eb2,0x3ee59236,0x3f03ccf2,0x3f01a2e0,0x3f1c4044,0x3f2e9d5d,0x3f06055d,0x3f4417aa,0x3f4a181b,0x3f44bb37,0x3f3aee14,0x3f524935,0x3f4f25df,0x3f5b12b1,0x3f576552,0x3f56b179,0x3f539bbc,0x3f4f042c,0x3f4a2b6c,0x3f48ba42,0x3f3f7c44,0x3f39c704,0x3f40bb8b, +0x3f396d4b,0x3f31ff11,0x3f3c55c5,0x3f04f3eb,0x3f1ab375,0x3f142d5b,0x3f256c5f,0x3f1422ff,0x3f05e5c3,0x3f16a47a,0x3f12019a,0x3f129f1f,0x3f1edb58,0x3f262f9f,0x3f03c9a3,0x3f2c38a1,0x3f1108a1,0x3ef410a3,0x3f4e434b,0x3f25b7c5,0x3f268526,0x3f213e69,0x3f23ccb6,0x3f224eba,0x3f2607c2, +0x3f246085,0x3f27d81c,0x3f23e476,0x3f22c3a2,0x3f21e213,0x3f21102d,0x3f207248,0x3f20479e,0x3f1ec274,0x3f1ea9e5,0x3f1def8e,0x3f1acb57,0x3f15a330,0x3f1eb4cb,0x3f1e5a69,0x3f0d7bc1,0x3eaa64b5,0x3f1dacc0,0x3f0bd2a7,0x3eb23a34,0x3eaf0fd6,0x3eaf3021,0x3eb426c3,0x3ea668d7,0x3eaa214e, +0x3ec3706c,0x3f14396a,0x3f1df81f,0x3ebff0f8,0x3f0acbc2,0x3f7c2a01,0xbd04f14b,0xbd660f6a,0xbdeb3ea5,0xbd71b68c,0xbd89cd3b,0xbd8edb51,0xbd97c568,0xbd9eea43,0xbdb10ee8,0xbd9443aa,0xbd832968,0xbd52f3dd,0xbd4d0324,0xbd4e2540,0xbd4ef99e,0xbd54809d,0xbd55e16e,0xbd4cf9e2,0xbd3f2f78, +0xbd0c56fa,0xbd72828e,0x3d27412c,0x3dfdeade,0x3eb5f20e,0xbbc0add7,0x3de1a99d,0x3eaed940,0x3eaacfba,0x3ea5068e,0x3e96a85c,0x3ead0fb9,0x3ea67648,0x3e947fc4,0x3e09ffad,0xbcec68f9,0x3e9f5649,0x3e25291b,0x3eb35b80,0xbd037f13,0xbd6a1b45,0xbd959d95,0xbda9bfc5,0xbdf46681,0xbe0c2b77, +0xbe1cdd8b,0xbdc085c4,0xbd9ea1e1,0xbd7de04f,0xbd3d6cde,0xbd2bd1b2,0xbd3b51dd,0xbd4a57e0,0xbd6aae89,0xbd63cf96,0xbd237428,0xbcc8bad5,0xbd445c12,0x3e37d1e3,0x3df456d3,0x3e2c1082,0x3dd48d72,0x3c0ba5d8,0x3e299de0,0x3dc12bf7,0x3e2391ed,0x3dbc4c5d,0x3df70aa8,0xbd518834,0x3e001d58, +0x3def0666,0x3dba6afc,0x3e0b7505,0x3da5da30,0x3de08469,0xbe02eb5f,0xbdb8835a,0xbe018d60,0xbe17d261,0xbe65cb21,0xbe751883,0xbe905150,0xbe3de47e,0xbdf55bb9,0xbd6f261e,0xbd4a0a34,0xbd34d938,0xbd580397,0xbd93ab77,0xbd8a5e53,0xbd8f7ef8,0xbcc954f0,0xbcfdaf4b,0x3d51c434,0x3e3e04ec, +0x3e1664e4,0x3d845d07,0x3e12846d,0x3df649d4,0x3d873803,0x3dd1a651,0xbd36d806,0x3def6ccb,0x3d05d72a,0x3de33c48,0x3d5cb316,0x3d4c2bb6,0x3d98e933,0x3e0a6c4c,0xbd4a1374,0x3e4913a1,0x3df724f1,0xbdb05395,0xbd608699,0xbe151d63,0xbe8b39c9,0xbea416ff,0xbeb8fce8,0xbe4783d7,0xbdb16b36, +0xbd63e1c1,0xbc25e400,0xbbe17df8,0xbc80b1c1,0xbd49f459,0xbd7adc43,0xbd784006,0xbc8d3001,0x3c9a21bb,0x3d89aab5,0x3e089fdf,0x3dab7cc8,0x3e16691c,0x3d80ffb9,0x3e00a374,0x3d859e79,0x3e0d37fd,0x3ddcffce,0x3ddc8e16,0x3cc3e7e1,0x3d9f6d57,0x3d1d616b,0x3e1c5700,0x3df7e715,0x3d3c013d, +0x3d5ff092,0xbab5d697,0xbac61d71,0xbded8497,0xbe1b6597,0xbe7afb5f,0xbec95ded,0xbeef8bb3,0xbf034d9d,0xbe9ef3f4,0xbe205cc1,0xbc9cd979,0xbc0162f4,0xbc5650ed,0xbd2347bb,0xbda579ac,0xbdb233ae,0xbd8c3cff,0xbc44e477,0x3d12d64d,0x3dbc589a,0x3e6c149b,0x3e17f73f,0x3e058e8d,0x3dd99cfd, +0x3d976706,0x3d99f76c,0x3d2aa513,0x3d4bbd4d,0x3d418fdd,0x3d868071,0x3ccf2f12,0x3db8c3cb,0x3dbfdb19,0x3d853651,0x3dbf5d14,0x3e017dad,0x3dd92ef3,0xbe492fba,0xbe8bf22d,0xbe95f902,0xbeb42532,0xbeb6e8ae,0xbeb8dadc,0xbed63f1d,0xbef1e63f,0xbed1d1a6,0xbe0a7ffd,0xbe6d59a3,0xbe620fb8, +0xbe6184a0,0xbe694315,0xbe71f19c,0xbe5763d9,0xbdbf1387,0xbcc7f8e6,0x3d66bb7b,0x3e4c8666,0x3de844cb,0x3e2041ab,0x3da8ef33,0x3de8d565,0x3d9bad65,0x3ddd1bcb,0x3da19101,0x3d610698,0x3d2a19e4,0x3ce7a018,0x3d70f80a,0xbc5e52b1,0x3cf950b3,0x3e1c19fe,0xbe09226c,0x3d8fa36b,0xbe1729bd, +0xbf077823,0xbf17de4f,0xbeff5d2d,0xbee1740d,0xbef8ed1b,0xbf0cb702,0xbf0dee55,0xbf012dc9,0xbead6651,0xbedd7f06,0xbeeb3f27,0xbf03bbd0,0xbee43f02,0xbea91e0e,0xbe85ea26,0xbdbd9c94,0xbd22dbbf,0x3dc16e51,0x3e84c62e,0x3e18cf73,0x3db98d21,0x3d93e001,0x3d4bc08c,0x3d0c74a2,0x3d066721, +0x3d8cc339,0x3dfdd1e3,0x3dcdec20,0x3dbe7797,0x3e20b1c0,0x3e52d0e9,0x3e27311f,0x3dbe0ae6,0x3e7e2d19,0x3e27bf9b,0xbe82d6e4,0xbf34b849,0xbf01a66a,0xbec7fab9,0xbe6ba6a5,0xbe5f462f,0xbeaac281,0xbebf209b,0xbeea32df,0xbf1798d6,0xbf292835,0xbf373504,0xbf28d25c,0xbf0a2daf,0xbee4df9f, +0xbeb5fb4d,0xbe270385,0xbd7b90ce,0x3d7f0f3d,0x3e0f2d28,0x3e2edb84,0x3e47e6f3,0x3d6f509b,0x3dc4c2b5,0x3dc60e6a,0x3e19f7c4,0x3ddfdbc1,0x3e26d319,0x3e06454b,0x3e089868,0x3e300c38,0x3d9fb54e,0x3db6299d,0x3d7d0b8e,0x3e85301e,0x3d925170,0xbe811791,0xbec9dfd2,0xbe64bfb2,0x3e3164d1, +0x3caa0461,0x3c8b014c,0xbe8d4637,0xbe89750b,0xbee1009e,0xbf275506,0xbf3bb749,0xbf38974e,0xbf20e868,0xbf0cd040,0xbed5664e,0xbea679f6,0xbe1cf8c3,0xbdbe58ec,0x3db0d558,0x3e0898e7,0x3e42b693,0x3dffd9bc,0x3e3eeb05,0x3dcb54c2,0x3e3c7509,0x3e0f8e1a,0x3e30e47a,0x3ea390ca,0x3dd067a2, +0x3e15bf87,0x3df884ed,0x3e6da104,0x3db94bdd,0x3e2ded5e,0xbd0eab83,0x3c2a4151,0xbe88c929,0xbdd81877,0xbc5f3cbd,0x3f1330d3,0x3e580780,0x3cc4cb4d,0xbe90a136,0xbea47d35,0xbedd18f0,0xbede3246,0xbf08251b,0xbf15972d,0xbf043cb7,0xbeea6ce5,0xbeb159b1,0xbe3acca2,0xbddd9857,0xbd43c874, +0x3d5ceb18,0x3e36fb50,0x3dce232b,0x3e883493,0x3e2daf31,0x3e07d518,0x3e1eff4b,0x3db192f7,0x3df3dcbc,0x3e9b4d4d,0x3e39129f,0x3e30c9ad,0x3e24a33b,0x3e26cb1f,0x3d7abd49,0x3e8a82f8,0x3df3afe3,0xbe2952d8,0xbe498e17,0xbe0e3eec,0xbd06aa55,0x3b30439a,0x3d83ad68,0x3d0c2820,0xbe4fe626, +0xbe8052f8,0xbec7ec15,0xbf0852d4,0xbef4a774,0xbee87219,0xbeca813f,0xbe799d5a,0xbe1839a4,0xbdcc6904,0xbdda972c,0xbd6c60fc,0xbd19c50f,0x3e8c0da4,0x3eb65c08,0x3e38c430,0x3e8f5a92,0x3e456aa4,0x3e555099,0x3e72ecea,0x3e49857a,0x3e97cf74,0x3e4bb6fc,0x3e03d232,0x3db880fd,0x3d2a8892, +0x3e98b56f,0x3d8aa547,0x3de7a9c2,0x3e96e060,0xbe154db6,0xbe05079f,0xbd01a354,0x3df91b37,0x3d606d49,0xbb1ca83c,0xbe0a2b9b,0xbe70ed0d,0xbe8c27ff,0xbe92f74d,0xbeaa2655,0xbe9ba52e,0xbe6e89d0,0xbe2d8e45,0xbdd0dcaf,0xbd6e840d,0xbcac30f7,0xbde9a889,0x3e3f7043,0x3ecb5bf9,0xbcbc56e2, +0x3e8553fa,0x3e0e4ca3,0x3e420941,0x3e9a6335,0x3dbcfe5a,0x3e719a0b,0x3e2ea6a0,0x3e9fb9cf,0x3e5ac16f,0x3e201d2c,0x3e68b50e,0x3dea7537,0x3e1f7c21,0xbc8152d0,0x3e7ef50a,0x3df51bb2,0xbdb5c219,0x3d173ec5,0x3d765b5f,0xbbc96cc0,0xbd7719d6,0xbdefa0ad,0xbe15a575,0xbe2592a8,0xbe2e2e1e, +0xbe129b6e,0xbde159a3,0xbd898fe4,0xbd2530b5,0x3c988004,0x3d37fdc8,0x3d7cba50,0x3a7b2e70,0xbcab04c5,0x3ea4474f,0x3eae5d14,0x3e18cf2c,0x3e9d4d27,0x3e808f04,0x3e59c79f,0x3ebbc793,0x3e9231fa,0x3e56e39c,0x3e70c1f4,0x3e81cab1,0x3e909966,0x3e5b62bc,0x3e919222,0x3ea0d5e0,0x3ea32496, +0x3f025b4a,0x3d220965,0x3c9c760e,0x3d976935,0x3d693ca2,0x3bfb8e23,0xbd2b511f,0xbd998f9a,0xbd89a05a,0xbd8f629b,0xbd8aff82,0xbcea589c,0x3c8830a0,0x3d7ef454,0x3da44161,0x3dfad783,0x3dffb16a,0x3e0ac0ec,0x3c920502,0x3e65e8a1,0x3e5f6f0e,0x3e7f3e0e,0x3e397f3d,0x3e713d6e,0x3e8b8f8d, +0x3e4db0b5,0x3e8470eb,0xbd5bb780,0x3ec835ed,0x3d969d71,0x3ea1642b,0x3e4e467b,0x3e61fdb4,0x3eb38c74,0x3e786c89,0x3e00fbea,0x3f203879,0xbd88b99b,0x3d058190,0x3bf75cf6,0x3c1c5721,0x3d14783f,0x3d4ded1b,0x3d49cc8c,0x3da253f0,0x3dc92106,0x3dfcb385,0x3e13e33c,0x3e27a9a5,0x3e5a7543, +0x3e2f04b4,0x3e06039d,0x3de647fb,0x3dee65af,0x3d89ab10,0x3d8ae312,0x3f04f90a,0x3ea05d50,0x3eb15b75,0x3e511f74,0x3e7c593b,0x3e5353f4,0x3e85ae81,0x3e874e1a,0x3e9a3eac,0x3e8fe3d0,0x3d071617,0x3ee2ccd5,0x3e65368d,0x3e8a4d31,0x3f1ad8a0,0x3d124578,0x3e1ec220,0xbddc9639,0xbc8fbff7, +0xbd264264,0xbd333523,0xbd51491c,0xbd69ca19,0xbd762866,0xbd527b99,0xbd2b269f,0xbd07ebc6,0xbccebfd3,0xbca9c6e7,0xbc6b8fdb,0xbcac540a,0xbc694f72,0xbc89152b,0xbce1ea0e,0xbc4a02a2,0xbdf67e1b,0x3dfc4921,0x3eb2bf50,0x3f264ff5,0x3df8e26b,0x3eac306f,0x3f1e810e,0x3f2a4271,0x3f1dd883, +0x3f1a160b,0x3f2f7ab6,0x3f2ded1f,0x3f16eedf,0x3e8c909c,0x3da7a1cd,0x3f22462c,0x3edd11a6,0xbc011909,0x3e00bbf6,0x3dc4ba28,0x3e2092fb,0x3de1cbd5,0x3ddebb4f,0x3dd75697,0x3dd6d964,0x3dcfa221,0x3dc8e4a7,0x3db56f3d,0x3daa860f,0x3d9b03ee,0x3d9dd41d,0x3da7341b,0x3db4abd1,0x3db812eb, +0x3dc16133,0x3dc3dbc0,0x3dcc0e1c,0x3dc319d3,0x3de16d53,0x3d159c5c,0xbc41c281,0xbdc1ee72,0x3d74d5c6,0xbba2b4f5,0xbdc3014a,0xbdbb048f,0xbdae2d35,0xbd963c07,0xbdce26a8,0xbdce9609,0xbda96a5c,0xbccafe01,0x3d9134ee,0xbdb86c8d,0xbd24819a,0xbdfc897e,0x3de9da6e,0x3e16e6fc,0x3e08630c, +0x3dea3a6a,0x3e038e0a,0x3e05ea5c,0x3dfac39b,0x3db22a58,0x3da2fb22,0x3d9ddd2a,0x3d9558ec,0x3d9d465d,0x3dc41c53,0x3dc8c1ed,0x3decd93b,0x3df9a967,0x3e014bb0,0x3e01d396,0x3e0db6af,0x3bd9a25e,0x3d2ea679,0x3c543252,0x3cdbab0f,0x3d980389,0x3c75607b,0x3d413934,0x3c8168d6,0x3d38297b, +0x3cd1298e,0x3de8b25f,0x3ccd40cc,0x3c9905f9,0x3d23cb36,0x3c958395,0x3d73dbe2,0x3d54035b,0x3e7bed26,0x3e4e0aae,0x3e41d571,0x3e1e3060,0x3e2eeb56,0x3e10ed37,0x3dfffc71,0x3d91233f,0x3d0a92ac,0x3c345215,0x3c78ecf7,0x3d110f0a,0x3d90d5bf,0x3dba87f5,0x3dde8d51,0x3e04c2d8,0x3e06b8dd, +0x3e1ae405,0x3ddea988,0x3cb4dff9,0x3d40b1f7,0x3d8a15e3,0x3d19c72d,0x3d548602,0x3d556230,0x3d733c78,0x3e0117ad,0x3d3bfade,0x3da88002,0x3cf9ff97,0x3d9434af,0x3d881106,0x3d77f89b,0x3ca27095,0x3e22c7d7,0x3cef4b37,0x3dde0868,0x3e860c29,0x3e30cf5a,0x3e099156,0x3e1f5b30,0x3e1ca2cd, +0x3e0070a5,0x3d12bb31,0xbc9f192a,0xbbcc67c2,0xbc84c949,0xbae6d84e,0x3d437ac2,0x3d9b558d,0x3de0ea0f,0x3e088b48,0x3e20d821,0x3e1e1272,0x3e05bba4,0x3db61fea,0x3dc2d477,0x3d45e8dc,0x3db7c91d,0x3d77c372,0x3d8ca04e,0x3d5b58d6,0x3d8404e1,0x3d954f17,0x3dbc57f9,0x3d49fdaa,0x3dad19bb, +0x3c4b5e54,0x3d3fa04e,0x3de76a50,0x3e20d7d1,0x3e910054,0x3e880634,0x3eb297ee,0x3e8e3b30,0x3e645173,0x3e59bca2,0x3e25434b,0x3dfd9276,0x3ccf3f05,0xbd249f79,0xbdbdb629,0xbd8e797e,0xbcba2bea,0x3d3b04c8,0x3db4ed9f,0x3de7e7ec,0x3e14aacd,0x3e25c9b9,0x3e296f4c,0x3e151d9c,0x3d859d67, +0x3d90e1bf,0x3d9f060b,0x3d8bbca0,0x3da7a1ee,0x3d658367,0x3d9c2b85,0x3d9c6cbe,0x3db9896e,0x3d85571f,0x3dbb40cd,0x3d999d6e,0x3d8f5c43,0x3dea07c8,0x3dfeaa7d,0x3de37139,0x3e21c2f0,0x3f0d7c30,0x3f3227f5,0x3f0b0238,0x3efba7fa,0x3ef8938c,0x3ec6f7e5,0x3e8b3ee6,0xbca2e7e9,0xbe87ee55, +0xbeed1874,0xbed160c0,0xbed9f775,0xbec3fd6b,0xbe9c5a33,0xbe073af4,0xbd610f76,0x3bcc2c1d,0x3d8d7a9a,0x3d6b53ce,0x3d215c77,0x3daec61f,0x3d916caa,0x3d8ac2ca,0x3d379f09,0x3d4d1f14,0x3d8328a4,0x3d97bba4,0x3d9b9817,0x3d8a0f51,0x3dc70e34,0x3ddeed00,0x3e80b9ad,0x3e7f04f0,0x3de87d28, +0x3ee6c546,0x3e2eb667,0x3ef650c3,0x3f670a46,0x3f54ab23,0x3f203cb0,0x3ed5096a,0x3e834e1d,0x3e5f5138,0xbcc79d1c,0xbe0a6893,0xbe87d98c,0xbe520ebc,0xbdbd6598,0x3d79273b,0x3e1a52e3,0x3e2bde5f,0x3e42d712,0x3e297335,0x3e1cec7c,0x3df5ec3b,0xbc5d1ddc,0x3c73f3aa,0x3d688652,0x3d899c83, +0x3d95f60f,0x3d45c16c,0x3d5b7a5a,0x3d9ae12b,0x3ddbaab1,0x3dc024c4,0x3dea080a,0x3dcd6838,0x3d4d92ce,0x3dea5f89,0x3e37e429,0x3d5113ba,0x3d416499,0x3f0bb92d,0x3f82330b,0x3f3b75d1,0x3f09478c,0x3e9c9612,0x3e8e9c32,0x3ebda336,0x3d9eb999,0xbd1d5db0,0xbcbb0b73,0x3de29a51,0x3e575350, +0x3e98d0ea,0x3eb124d7,0x3eb142d4,0x3ebb6bd9,0x3e977eaa,0x3e9ad539,0x3e3fbeea,0x3ddab0fa,0x3d9a4cd7,0x3cbe5b40,0x3db7b55c,0x3d8ba3c4,0x3d094858,0x3da11655,0x3d98c937,0x3e170d98,0x3ddae8f2,0x3dc842df,0x3db23f93,0x3de550c4,0x3e036adb,0x3deaea35,0x3daabb3d,0x3e62183d,0x3efc0c55, +0x3f1ce2e9,0x3ea770d6,0xbddbe7f1,0x3dca2bdc,0x3dff468e,0x3e367ac9,0x3e0a0d1c,0x3e0ebbe8,0x3e4fdb86,0x3eb86dbc,0x3ecf8c9d,0x3ee4a09f,0x3eda0ef6,0x3ed7db94,0x3ee101ef,0x3ecec3ad,0x3ecfdfbe,0x3e6d754d,0x3e1b3d01,0x3e0a0734,0x3d8a62dd,0x3d8298ba,0x3d9be29d,0x3d4dead6,0x3da73f1a, +0x3dcdc886,0x3e3b7ce7,0x3dde9eef,0x3dc9df0a,0x3ddec630,0x3d430279,0x3e11365f,0x3d8e3aae,0x3e9a3c10,0x3ea0526c,0x3ede364c,0x3db83300,0xbc81b112,0xbeaf1d0e,0xbe1c0240,0xbe0a9655,0xbde19364,0xbd844023,0x3d2fb204,0x3e40e987,0x3e94bde0,0x3ebeead7,0x3ebe1fbc,0x3eb8b8bf,0x3eb01a4e, +0x3ebf14b4,0x3eb3a0e8,0x3ea7111b,0x3e515bc8,0x3dcadc5f,0x3dc29fc0,0x3d913e7b,0x3d8dc126,0x3db14f85,0x3db563f6,0x3dc00bff,0x3dbeb9f6,0x3e13377f,0x3dfa1573,0x3df46811,0x3e18c665,0x3e0d9b75,0x3e3a09f8,0x3ddf1dd5,0x3e4c46ee,0x3e7e65d8,0x3e3e36a0,0xbe09f1c8,0xbe852110,0xbe87f056, +0xbead89af,0xbeb25c07,0xbe8dfae3,0xbe2b3158,0xbd43cee0,0x3e3b1f8d,0x3e8acefe,0x3eb5fc6d,0x3ec80bf5,0x3ed5c3a8,0x3ecb0f57,0x3ed21435,0x3e865108,0x3e2e72ef,0x3d81e51a,0xbd4e4694,0xbd09d2c3,0x3cf861f7,0x3bde3812,0x3c2ecd78,0x3d31f2ce,0x3dec7d94,0x3ddf4e49,0x3d9f763d,0x3d752c6c, +0x3d84fcb8,0x3d23747c,0x3dfbfe0c,0x3e06057c,0x3e4cd846,0x3df5ee51,0xbccaef87,0xbd5a9321,0xbe3c1ea7,0xbe8203f8,0xbea94808,0xbea8ca6b,0xbea9b72e,0xbe8298de,0xbdf21a8d,0xbcd14978,0x3d8cd668,0x3e37f741,0x3e8f6314,0x3e9c5eab,0x3eb5a343,0x3eae3307,0x3ea4fce4,0x3e032b8a,0x3d9ee8d8, +0xbd82972c,0xbdd89863,0x3c2eee58,0xbda25843,0x3bc5fbf7,0x3d30da69,0x3dabdba6,0x3d739907,0x3d916087,0x3be776eb,0x3d17a314,0x3d0c14c6,0x3d8e78ca,0x3cc4d34c,0x3b38f379,0x3b341897,0x3c93557b,0xbe139f81,0xbe32860b,0xbe784f76,0xbe9341da,0xbeb697e8,0xbe8ffe38,0xbe62d1a4,0xbe257cd6, +0xbd2f76d3,0x3d17717b,0x3e090b74,0x3e3e3e89,0x3e6f95ef,0x3e8cdea8,0x3e893738,0x3e694b87,0x3e38e6c2,0x3dba92bf,0x3d5a1492,0xbc33a6ce,0xbd9d263c,0xbd2eaae2,0xbce8b45d,0xbc0c342b,0x3c971b59,0x3d090e8c,0x3d31437f,0x3d05c7fb,0xbbc82ef9,0x3c44412b,0x3c1ee707,0x3d8ad494,0xbc09d4b7, +0xbc4cb141,0xbca0fbca,0xbdb3fa89,0xbe2d72a8,0xbe70ac29,0xbe7094c4,0xbe8b7c7b,0xbea27dd0,0xbe808b73,0xbe4ea242,0xbe26b676,0xbdcb49cf,0xbd2369d3,0x3d701f11,0x3c66a007,0x3d2d2d72,0x3d3df9e4,0x3c0677e5,0x3bce8647,0xbbd4a938,0xbc77f736,0x3c0686af,0xbd6b658e,0xbd91a890,0xbd64ee7d, +0xbd7624f9,0xbd56d521,0xbd3a7107,0xbd7ec816,0xbd1ac8f2,0xbd7ceb8d,0xbd3063d1,0xbd086b25,0xbcf0d245,0xbd2c616a,0xbd8ea4b6,0xbd4416e6,0xbdd7fb67,0xbe145a8d,0xbe4e38ae,0xbe6e8584,0xbe7f7c55,0xbe734eaf,0xbe61bf5a,0xbe8eab03,0xbe9c4542,0xbeaca395,0xbeb0ac66,0xbeb15712,0xbeb88d8f, +0xbeabf243,0xbea686d7,0xbe9f4c98,0xbe8e6fec,0xbe82691c,0xbe7efcc7,0xbe78eb72,0xbe65a5e1,0xbe5c20d3,0xbe32701e,0xbe29c29b,0xbe29e028,0xbe28b307,0xbe0f717c,0xbdffac7a,0xbe18cb10,0xbe2092c4,0xbe340134,0xbe413529,0xbe32147e,0xbe343416,0xbe591e61,0xbe580258,0xbe429f18,0xbe838fb8, +0xbe61c535,0xbe3d57e3,0xbe3c6953,0xbe40149b,0xbe3d5bc3,0xbe3aff5f,0xbe2e3309,0xbe2cd30a,0xbe218c03,0xbe1d0354,0xbe17d912,0xbe162dea,0xbe1688a9,0xbe183f9f,0xbe1c103b,0xbe206472,0xbe1c2459,0xbe145563,0xbe111907,0xbe10f40d,0xbe392252,0xbe4b49f7,0xbe120ffa,0xbe3fbb9e,0xbe4fb913, +0xbe25fda8,0xbe2a1244,0xbe231291,0xbe1e946a,0xbe21151d,0xbe269697,0xbe2e9bc7,0xbe5006f7,0xbe3ab867,0xbe266ddf,0xbe5d0c42,0xbe9528f3,0x3e291de4,0x3dc30e22,0x3d82e926,0x3dcb2bce,0x3dca3701,0x3dc3f101,0x3dadb3d9,0x3db07b66,0x3dbaf8b8,0x3dc7c8a6,0x3dd85f98,0x3dde7225,0x3de07e31, +0x3de1ffcd,0x3de34564,0x3ddd1b2b,0x3dde59e2,0x3dd4d680,0x3dcdda4c,0x3dc953d3,0x3dbbba2f,0x3defb144,0x3e031030,0x3dfe9509,0x3de72434,0x3e01ed3b,0x3e024fda,0x3e0437e2,0x3e04d77f,0x3e026aee,0x3e0f3031,0x3e0bba87,0x3e0b9d84,0x3e0641e1,0x3de5e75c,0x3e16ebf5,0x3e19210f,0x3e861c15, +0x3e28be91,0x3e03de8a,0x3e05788c,0x3e1235ec,0x3ddc5a9b,0x3dd14608,0x3df80bd6,0x3dfeb93d,0x3e1053b1,0x3e0b73a8,0x3e0e5057,0x3e195164,0x3e1ee364,0x3e132ce9,0x3e1b0316,0x3e0cbd2b,0x3dffb22f,0x3ded3836,0x3dd8b0b9,0x3e14cafd,0x3e096d2e,0x3e0b1665,0x3e0946b7,0x3df0cf67,0x3e019100, +0x3e0a02b5,0x3e133a30,0x3e0765bf,0x3e0e05cd,0x3db1266f,0x3e08c979,0x3e0d98f8,0x3e15038a,0x3e2515b3,0x3e101b2d,0x3e41a0a9,0x3d69572a,0x3dd610c8,0x3dcf5fb8,0x3dd80eac,0x3d63b09c,0x3d44ab51,0x3dbfa0bc,0x3dff1486,0x3e17f1e5,0x3e1bd74d,0x3e2f2789,0x3e322e06,0x3e30a48f,0x3e39d01d, +0x3e2c84c6,0x3e1fa4f5,0x3e05e57e,0x3dd91f81,0x3de5add0,0x3e13ddb7,0x3dfa0225,0x3dff27fc,0x3df894a4,0x3de779f0,0x3de08f39,0x3de5b9bb,0x3ddce064,0x3e07e6dd,0x3dd343e7,0x3df48c88,0x3dd410ff,0x3df8bf49,0x3e0a5d26,0x3e4d86de,0x3e10d62e,0x3e9749cd,0x3e4b9840,0x3d1d0fd2,0x3dd998d1, +0x3e00b1c9,0x3d891014,0x3d35226d,0x3ddffba9,0x3e06f245,0x3e162659,0x3e0414f4,0x3e189d83,0x3e2f236e,0x3e3c58a3,0x3e444170,0x3e3ddbe3,0x3e261b16,0x3e0239d4,0x3dd4e72d,0x3db3d4b7,0x3df8cf68,0x3dd784ce,0x3de6018d,0x3dc96ad6,0x3dcbad5f,0x3d985cef,0x3dc58c3d,0x3dc8ab9f,0x3ddcf91e, +0x3d88587a,0x3d9a9d30,0x3daf715b,0x3e00870c,0x3e1327b3,0x3e156e24,0x3dd5b04e,0x3d746260,0x3da7b314,0xbd357a07,0x3cfd8fcd,0x3ccefc67,0xbcfbdd63,0xbc3d6273,0x3da4eaa5,0x3dfc78b9,0x3e1d852b,0x3e1c50d2,0x3e321804,0x3e3a5742,0x3e4280a1,0x3e5894fb,0x3e570b1d,0x3e3061f6,0x3e0624a2, +0x3dc94daa,0x3db74fde,0x3e002b0f,0x3dd4eae8,0x3dbca334,0x3db8ba32,0x3da8a2cb,0x3d88fe50,0x3da51fae,0x3d9db51e,0x3db5c51c,0x3d6dbe83,0x3d1439c7,0x3d997223,0x3de259ed,0x3dd91ef8,0x3e209b5d,0x3e6cce4c,0x3f019204,0x3e53b437,0xbe65f379,0xbdd7efa6,0xbe514b51,0xbec67998,0xbec7aa07, +0xbe85ac0a,0x3d133d37,0x3e84b511,0x3e91631b,0x3ea7e062,0x3ecacb05,0x3ee88a83,0x3ef2f387,0x3ed10618,0x3ec2e4d2,0x3e8dc688,0x3e51c719,0x3e2d1814,0x3e003afd,0x3dfd8ced,0x3dd88155,0x3dce7013,0x3da747fe,0x3d3f84b4,0x3d996b17,0x3dadcc2f,0x3defd4a1,0x3dd9451c,0x3e0d4ea9,0x3e47ca4e, +0x3db8fd81,0x3e2b861f,0x3eb43da8,0x3dcf233e,0x3e7f01f0,0xbdb885e1,0xbf0c96c6,0xbf0bb7c0,0xbf2bc1b2,0xbef6eff4,0xbe923188,0xbda8fd61,0x3e11a9b8,0x3e89c515,0x3ebc4ddd,0x3ecb842e,0x3ec4a541,0x3eb86df8,0x3e9eb0e9,0x3e8aeb3a,0x3e75959a,0x3e2a0342,0x3e0b1c15,0x3e2000f5,0x3e27f5d6, +0x3e17e4b4,0x3df044f6,0x3dcc82fd,0x3dada0ed,0x3da40a36,0x3de09cf6,0x3de41c50,0x3db59746,0x3dd22589,0x3da81f97,0x3da27345,0x3e422c09,0x3e129304,0x3dc7eb39,0x3e95f876,0x3eb1e566,0xbe9a2777,0xbf8d8239,0xbf63c75b,0xbf7ed59a,0xbf356b79,0xbf204a9a,0xbf082e5f,0xbe423d99,0x3cde7cd6, +0x3e3644ff,0x3e46760e,0x3e6412b1,0x3e7c2ac9,0x3e61e113,0x3e656141,0x3e36b4f4,0x3e2e11d1,0x3dff2ded,0x3e2ebdf2,0x3e58f8cb,0x3e2fe571,0x3e2537f6,0x3df32600,0x3dc3bed9,0x3d82761b,0x3d6ba02e,0x3d75a7f6,0x3e29b0d1,0x3dd5ea8c,0x3de15307,0x3db99652,0x3db85f1f,0x3d79d878,0x3e1ccec7, +0x3e121c1f,0xbd3d1f40,0xbf07c5f2,0xbf8db434,0xbf61ff2e,0xbf35b88a,0xbf388632,0xbf3bc5e7,0xbf1f612d,0xbef12e54,0xbea834b6,0xbe41beee,0xbe377e6e,0xbdbbc02c,0xbc99c44a,0x3da626f3,0x3debb333,0x3df34dcf,0x3e0be803,0x3de32aad,0x3e31a81f,0x3e409642,0x3e080c6c,0x3e052968,0x3dfcc1f7, +0x3de0d2c7,0x3d4bd176,0x3d8d01ba,0x3d9c42db,0x3e062187,0x3d86801e,0x3de95592,0x3d73eee9,0x3e4644f9,0xbb59c415,0x3e236873,0xbe98cb7e,0xbea55d88,0xbf7956f1,0xbf333304,0xbf318fc6,0xbf1cb90c,0xbf21803d,0xbf1735d2,0xbedf8751,0xbec88a68,0xbeb6cbb0,0xbeb422bb,0xbeaaa8f5,0xbe6c520a, +0xbdd03ab4,0x3cbaa580,0x3de42c86,0x3db505ba,0x3e10e0a5,0x3e15b593,0x3e34993a,0x3e0a5c92,0x3de872ef,0x3dcee0df,0x3dd618bf,0x3dd722db,0x3db330c9,0x3e128ecd,0x3ddded61,0xbcfaceab,0x3d9265d4,0x3d9e2a3b,0xbbf6b9a0,0x3c6ecb17,0xbdcecc5f,0x3d4d80c6,0xbe60e08b,0xbefb70b7,0xbeda976c, +0xbf039cea,0xbef4d45e,0xbedfb679,0xbeaa9505,0xbe4c3385,0xbdb22207,0xbd6c67f1,0xbd85f93d,0xbe600b67,0xbe839be6,0xbe598fcd,0xbe306e93,0xbe18bc29,0xbd9e498f,0x3c63e81b,0x3e23225e,0x3e2a2015,0x3e0f463d,0x3e124c4e,0x3dd370d0,0x3ddfac98,0x3d9cc4d6,0x3daaf233,0x3d389c3a,0x3d9d69ea, +0x3d80e2f4,0x3c410654,0x3d6efc5b,0x3c99d353,0x3c921789,0xbdf39d59,0xbb95f425,0xbe84cc02,0xbe6683c6,0xbe3dd7dd,0xbeb5b7e8,0xbe99d607,0xbea06581,0xbea60a3f,0xbe5e7a5c,0xbdd8eee4,0xbc745e58,0xbcbb53a8,0x3c012613,0x3bb897bb,0xbaf04ba7,0xbd37750f,0xbc192236,0xbd23d601,0xbcc8ae87, +0xbc20214d,0x3dad243c,0x3de712fa,0x3e09bb0e,0x3dbba132,0x3d838301,0x3dcac1e4,0x3d23541d,0x3cd4c443,0x3d348e39,0x3cf8a1f3,0x3d0da6d3,0x3ce25738,0x3cd30b51,0x3cdc4a11,0x3cb2e90f,0x3c4d75dd,0xbd3f35e9,0xbda6b3bc,0xbe27f59e,0xbe300e4a,0xbe2a4222,0xbe21651e,0xbe40a70d,0xbe2a526c, +0xbe10c457,0xbe05441e,0xbdd8c2a6,0xbe0a3b08,0xbe0589a9,0xbe1f4411,0xbe2f4d4b,0xbe4474ce,0xbe389d89,0xbe32bfca,0xbe310d6f,0xbe120ade,0xbdbfefb6,0xbd7c0c5b,0xbc100cba,0x3cfba185,0x3b7b4573,0xbb7dc95f,0x3bc51aaa,0x3bac20d7,0x3c92f873,0x3bd2ae0d,0xba5db601,0x3c34b521,0xbbd10cfa, +0xbc169a15,0xbb8617c1,0xbd3897d0,0xbd72ad85,0xbe0720ac,0xbdfe4b7f,0xbe2905dc,0xbdc2cc0b,0xbdad64d2,0xbdbef6dc,0xbdd5fd79,0xbdf27a56,0xbe1029ef,0xbe25e483,0xbe3d58ff,0xbe4e02d8,0xbe8a537f,0xbe44c891,0xbe53c256,0xbe2d0245,0xbe2b3cd8,0xbe398b3b,0xbe331c3a,0xbe190cd2,0xbe39f6ec, +0xbdbe5d5b,0xbd35a103,0xbd334ea2,0xbd17c687,0xbc89537a,0xbb0bd79b,0xbc07b447,0xbb6fec4b,0x3c658d3c,0xbcb009ac,0x3ac2db09,0xbcd6ee11,0xbcba6cc7,0xbd80a01e,0xbdc9e639,0xbde22712,0xbdb90cd1,0xbe1024eb,0x3ce4df17,0xbc29535c,0xbc890e11,0xbcb05e4f,0xbc986217,0xbc36e1cf,0xbc272890, +0xbbf1ebec,0xbc01020a,0x3b8e9562,0xbce999da,0xbd32fbe3,0xbd94559f,0xbd7661eb,0xbd2b143d,0xbd587a35,0xbd0b9729,0xbc4330bc,0xbd2d9fda,0xbde7bd9c,0xbda01e57,0xbd8e5533,0xbd804827,0xbd800957,0xbd02d0fb,0xbd274b3c,0xbcf5609b,0xbd2d3de9,0xbcf24b49,0x3c5c3e24,0xbd319204,0xbb2a3c27, +0xbcb86ef3,0xbdd0fd6e,0x3c3a5417,0xbd488c76,0x3cac4d3d,0xbaf4d914,0x3b3c77dc,0xbacca673,0xbc0d751c,0xbc99217d,0xbce9788b,0xbd154985,0xbd3b11d8,0xbd58ba14,0xbd5af052,0xbd4768b4,0xbd4be869,0xbd2373f6,0xbd1d7390,0xbd1928cb,0xbd11bb6d,0xbd0049ea,0xbc689208,0xbd4ffa1e,0xbdb79b35, +0xbe16161d,0xbcd2d8c4,0xbd83bd37,0xbe05338f,0xbe0c0bb8,0xbe05483a,0xbe02ed6a,0xbe110ccb,0xbe1371cd,0xbe05cf5c,0xbd896a29,0xbccdb621,0xbe23a6d4,0xbdddf621,0x3bbaa688,0x3d4d8288,0x3c6535dc,0xbc8712f2,0xbb8f049e,0xbba9b2a4,0xbb13f9f2,0x3c65b36a,0x3ccebe1e,0x3d1165c7,0x3d233fc6, +0x3d2fbdc2,0x3d34cfe0,0x3d196a7a,0x3d0c48cd,0x3d0671d2,0x3cfccd61,0x3cf6c2c0,0x3ce84e10,0x3cd76f3e,0x3cdb463b,0x3ca9c096,0x3d5f7d1c,0x3d8f9d0e,0x3dd95d15,0x3d346cbe,0x3d8c50dc,0x3dd2479b,0x3dd07afb,0x3dca7cd1,0x3dbfdb28,0x3dc8e082,0x3dbf78b8,0x3db6edc3,0x3d8f053b,0x3cf21296, +0x3dbecc89,0x3d870943,0x3db9a35f,0xbcfbe0fd,0xbd4746c7,0xbd544cd7,0xbd3fe7ec,0xba24cb45,0x3d202fde,0x3d9695ee,0x3dcec372,0x3decc99a,0x3dd860ab,0x3dbbcb05,0x3d9d145a,0x3d87c21a,0x3d551afc,0x3d47d8f1,0x3d2d7d08,0x3d112fd9,0x3d11d20e,0x3d09ba90,0x3db229d9,0x3d9f7b3d,0x3da9b61e, +0x3d9534c9,0x3d42ba8c,0x3da3c43e,0x3d9a144d,0x3dbbe541,0x3d964f8e,0x3d9f3824,0x3d2e30d5,0x3d7973fe,0x3d841a1d,0x3d45039f,0x3d8447b1,0x3d16fdd6,0xbc8d1fd8,0xbdf2933e,0xbe0b8098,0xbe07f6c5,0xbdf463d8,0xbcf28c71,0x3d3493a3,0x3dcd6f33,0x3e14b960,0x3e2ce638,0x3e341c15,0x3e0f3f02, +0x3def0aaf,0x3dc2d131,0x3da0c77c,0x3d822195,0x3d6732f0,0x3d3574e8,0x3d0ea2c7,0x3d65f35f,0x3dbb345a,0x3db474e6,0x3d9210c5,0x3daacc52,0x3d92a516,0x3d82d311,0x3d99c449,0x3d46be20,0x3dba5a4b,0x3d624761,0x3d7c2c54,0x3d513e40,0x3ca67be7,0x3cb3fa56,0x3ce32883,0xbd3d1392,0xbd816913, +0xbe00c530,0xbe55a67d,0xbe48070d,0xbe49f47b,0xbd815c51,0x3d5e2574,0x3e11b78e,0x3e79fdc4,0x3e94d729,0x3e8a0732,0x3e6f9cd6,0x3e36ced9,0x3e17b70c,0x3dd2a0e2,0x3da0b6e9,0x3d868036,0x3d2e5cd1,0x3d40f91b,0x3d83f0be,0x3da25480,0x3d91e192,0x3dbd6a66,0x3d660616,0x3d97ea38,0x3d64fd7a, +0x3dbf04b8,0x3dac012b,0x3db78c84,0x3d5c6061,0x3d697d7f,0x3cda36d7,0x3d4338fe,0x3c9465eb,0xbc65842c,0xbceef778,0xbe02a363,0xbe57cd6f,0xbe7edc83,0xbe865cdd,0xbe767344,0xbd9b3025,0x3d8e9e35,0x3e2a9c7e,0x3e887812,0x3e9e7030,0x3ea1806b,0x3e81b045,0x3e50e047,0x3e28a9b1,0x3e046664, +0x3dc6ad3a,0x3db3c329,0x3d597f55,0x3d7d0fa8,0x3d954aa4,0x3dd7aa7a,0x3dcc278b,0x3dd22a51,0x3daa1c7e,0x3d928803,0x3d855a1c,0x3d923f5b,0x3d9d4771,0x3da0384d,0x3d67f343,0x3d31e535,0x3cdcd98f,0xbbbe3706,0xbd12ad87,0xbd038206,0xbdcd0771,0xbed11fcd,0xbf0ea72c,0xbed87056,0xbf04bec7, +0xbef0ac42,0xbe71004c,0xbdff6053,0xbc999482,0x3d8af7dd,0x3e3bceb5,0x3edb50ce,0x3ed152bb,0x3eca959a,0x3e8ca590,0x3e35e254,0x3db3e6ee,0x3d69d98d,0x3d20ea8e,0x3d3523da,0x3daf2dbc,0x3e14ea2e,0x3ddc952a,0x3de8b72d,0x3db3a7a9,0x3dc296a2,0x3d7cdff3,0x3dc2e7bd,0x3dafaad2,0x3d9ee316, +0x3d4e3830,0x3c46f933,0x3a223b30,0xbcfe2547,0xbd9aa243,0xbe12ca91,0xbe4deb43,0xbec9dedf,0xbecf05b4,0xbe64bd36,0xbe3c5c59,0xbcb626f5,0xbdae4e47,0xbe462a1c,0xbebcef8a,0xbe9cf447,0xbe34262c,0xbd102494,0x3d309f16,0x3db4691c,0x3dfff0e9,0x3e18647f,0x3e1b9040,0x3e07f712,0x3e0478c8, +0x3dd93dd6,0x3dce04e6,0x3e083868,0x3df42592,0x3da85aac,0x3db0fc62,0x3d9146a2,0x3d50ee89,0x3d9a1069,0x3dac3002,0x3dc9babc,0x3da862c6,0x3d53e3ec,0x3d47cddf,0xbc94574c,0xbd8b2abc,0xbe10d958,0xbe9a1c2e,0xbf24ce68,0xbe8135f2,0x3ed49753,0x3e95b995,0x3ee51ec0,0x3d8a8330,0xbe289b88, +0xbeda4537,0xbee08bc7,0xbec5cae9,0xbe8adc1d,0xbe80a36f,0xbe13f353,0xbdf706da,0xbdd62981,0xbcf3d532,0x3d13dc45,0x3d969f75,0x3dce9b8d,0x3dae974c,0x3dbccf25,0x3dc24dc9,0x3de907e0,0x3dafa57b,0x3dc79331,0x3d9b08df,0x3da6fb92,0x3dada33c,0x3debbd78,0x3d2522c6,0x3c711fb3,0x3c3a1403, +0xbd9a0e41,0xbdc47a23,0xbe8f0283,0xbe6585f2,0xbea882e3,0x3d7ff3a4,0x3f30dc9a,0x3ef75345,0x3eb92633,0x3e04901c,0x3bd757e6,0xbde890ec,0xbe732f50,0xbe6770f5,0xbe05ca00,0xbdd9dd12,0xbd8c1296,0xbdf760c2,0xbdc2d823,0xbda8bea7,0xbc3f867a,0x3b1579ee,0x3c6f80b6,0x3d6db4e1,0x3da7f87f, +0x3da38ffd,0x3d9cff79,0x3dac5c21,0x3d8e175f,0x3d8b41c4,0x3db8cf27,0x3dba5591,0x3d725026,0x3d74078e,0x3c235ce4,0x3c87d719,0xbdfc867a,0xbd4c7814,0xbe8e4ee4,0x3cb49234,0xbdd08b40,0x3f3e9f2a,0x3ef38f7a,0x3ebc0991,0x3dd702a7,0x3e3358ee,0x3e532d95,0x3e4979a4,0x3e112e10,0x3e0dea59, +0x3d082902,0x3e156574,0x3de2d218,0x3d2b1132,0xbba3e386,0xbcb983d2,0xbc6bf7fd,0xbd2e84e1,0xbd83e6d6,0x3c43e864,0x3d3d22b3,0x3cdfeb6e,0x3d7d56d0,0x3d3f67b9,0x3d15312d,0x3cf743f7,0x3da7baf1,0x3dd7fd0d,0x3ca0f5d2,0x3d9cf65d,0x3d4f28a7,0x3ca797b3,0xbc0528dc,0x3d7b47d6,0xbe1d066d, +0x3d0b9cc7,0x3e857b00,0x3e307e46,0x3ed0d66c,0x3e78966a,0x3e70caab,0x3e17c197,0x3d84188b,0x3d81ba8d,0x3ce9c607,0x3e05226b,0x3e92db33,0x3ea5df7d,0x3e523621,0x3e49f4a5,0x3df8b3b6,0x3cfcf862,0xbdb7958d,0xbd9e3488,0xbd5961ae,0x3b5ddb1a,0x3dda0ced,0x3daf4029,0x3cc11c9d,0x3d982043, +0x3d6c7d9e,0x3da4f5be,0x3d5c4bd9,0x3d4e038a,0x3d54a867,0x3b68c0d0,0x3c7c70e2,0x3d811700,0x3dce4d55,0xbdb444db,0x3df202ef,0x3e099e5a,0xbd706e0e,0x3eb09c91,0x3e745338,0x3e3faaad,0x3e3f7085,0x3d906208,0x3cc06c6c,0x3b9ef44c,0x3d054e9d,0x3cc12a61,0x3c9b1153,0x3d19fbd9,0x3d5a24d5, +0x3bcea8a6,0xbd374d94,0xbd8f858a,0xbdbfa15f,0xbd5ecc47,0xbd239aff,0xbb2c576f,0x3d1a8a29,0x3c86075d,0x3cefeaea,0x3d279cac,0x3d59909e,0x3d1508c5,0x3d46a8e8,0x3cccb032,0x3d2e9800,0x3d0e1f80,0x3d25f585,0x3c574809,0x3c0c92af,0x3d6bcc7a,0x3cfc0331,0x3ddca2c6,0x3d91afa8,0x3da575e1, +0x3e360857,0x3e1be773,0x3e2011ca,0x3dbfa42e,0x3d741959,0x3cfb8ef1,0x3d1c1c33,0x3d267fcc,0x3d6dd417,0x3d57b9fb,0x3d1c884d,0x3c949fe0,0x3aef87a9,0xbc185667,0xbc1e6199,0xbab1f9bb,0x3cb3b01a,0x3a000583,0xbd06524d,0xbb975985,0x3d3dbb01,0x3a3c960e,0x3c119aa6,0x3d2403cf,0x3a5bad16, +0x3cb46eb5,0x3cfa9cfb,0x3d086f4d,0x3cb97bc2,0x3b7849d3,0x3d2c59a4,0x3d068ee0,0x3d3aee5d,0x3d181b3a,0x3d2dcf7c,0x3e0f03d3,0x3e0bdd97,0x3e07fa62,0x3e1f6a54,0x3e13bcbf,0x3e135089,0x3e056020,0x3df7d62a,0x3dd9cdb1,0x3de31995,0x3d777d42,0x3d1199fc,0xbc858725,0x3c9f439d,0x3d01708f, +0x3d67daa4,0x3d21c9f8,0x3dd62fe7,0x3c398cb1,0xbd09b9de,0x3ad89c7f,0x3ca8849f,0x3c862c93,0x3cbd7e86,0x3d734a6e,0x3d2be522,0x3ddc19f5,0x3d0e8704,0x3d98eb34,0x3d152e07,0x3d4e4a5c,0x3d9fa743,0x3d4b897d,0x3dded53d,0x3de9290d,0x3d8777c9,0x3e0f83e8,0x3e12d6eb,0x3e166df3,0x3e0de5d4, +0x3e1a40ac,0x3e188c0b,0x3e28cf98,0x3e261773,0x3e2156fb,0x3e1a2dda,0x3e21c6aa,0x3e2711f3,0x3e200152,0x3e195e96,0x3e0e146f,0x3e1d63a8,0x3e14f0eb,0x3e14f38a,0x3e243e0a,0x3d756265,0x3dcaaf9b,0x3dbd32f2,0x3e083412,0x3dd69994,0x3dd2a415,0x3dcf4e47,0x3dbd50e5,0x3dbcde9f,0x3dd226dc, +0x3df4a1d9,0x3da2103c,0x3dd8c27d,0x3dbda00e,0x3d3ce08b,0x3e139c19,0x3deb1799,0x3dfe3184,0x3dec8349,0x3df0c63b,0x3df35d62,0x3e004343,0x3e02878d,0x3e06bcd7,0x3e030b36,0x3e04aa50,0x3e0407e9,0x3dffb6dc,0x3df46fea,0x3df667f6,0x3df859ce,0x3dfdeeb6,0x3dfdfbcf,0x3dfc3f7b,0x3dedc690, +0x3e105633,0x3dcae893,0x3d890d57,0x3b8d3434,0x3dc39f22,0x3d94fbe3,0x3cf6e254,0x3cda050d,0x3d0a34ec,0x3d19d213,0x3ceebd6f,0x3d013da9,0x3d3a70ac,0x3dba83dd,0x3ddebd2d,0x3d336aaa,0x3da4b17d,0x3e3843cb,0xbd4517b1,0xbba7445c,0x3b9d1277,0xbc3d62c3,0xbc4ffce1,0xbc338e8c,0xbcef3868, +0xbd31bffe,0xbd74a806,0xbd83f533,0xbd8c3cfa,0xbd81d69f,0xbd600f46,0xbd49f460,0xbd3b5306,0xbd29cf2a,0xbd211942,0xbd162f22,0xbd0aa8d9,0xbcf3b9ac,0xbd025437,0xbcd37b9c,0xbc9a4f75,0x3ca13087,0xbd0187ac,0xbca17117,0x3c7d3b3f,0x3c805f7c,0x3c77b5b5,0x3c489e72,0x3c7dba55,0x3c3be9fe, +0x3bc2c5b2,0xbcc0898d,0xbcf8feac,0xbc432cd0,0xbce7fa49,0xbdaed974,0xbd14644d,0x3ce5904a,0x3ccb98a1,0x3c950572,0xbd10ba40,0xbda60068,0xbe054b7a,0xbe0faa97,0xbe10bdc7,0xbde7e00b,0xbdb22c49,0xbd95af55,0xbd8b7287,0xbd4fb8b0,0xbd58f00e,0xbd4be8ab,0xbd2190cb,0xbd0e321d,0xbd2765ed, +0xbc4a353b,0xbc9c490d,0xbc37ec19,0xbc9edf06,0xbcd74164,0xbaccecc5,0xbbe89cf8,0x3bb28f5a,0xbb83d7a9,0x3af61bf8,0xbbf1eee1,0x3be0fcd0,0xbc8ae1c3,0xbc4d8ee3,0xbc8f874e,0xba13bc36,0xbc8f88b5,0x3dbae0ee,0x3dd38d45,0x3dccd058,0x3dbd3c7f,0xbcb187f5,0xbde0c612,0xbe5149ae,0xbe7b28a5, +0xbe7cdf7b,0xbe5208ef,0xbe226f11,0xbdf58dbc,0xbdd91973,0xbdb539ef,0xbd8e5dab,0xbd8a28ef,0xbd25ea2b,0xbd1cae16,0xbc8673c9,0x3c467831,0xba8726b4,0xbc314557,0x3adb7a78,0x3bcf8a6e,0xbb8029ef,0x3c970585,0xba5a4f09,0x3cde52f7,0x3ca14db7,0x3cd50719,0x3c5f36c2,0x3b273ac7,0xbc58958c, +0xbd13e706,0x3c8dff4f,0xbd5490cf,0xbbb71628,0x3e71ffcb,0x3e270a5d,0x3e241f1c,0xbc7cca9b,0xbe1fa1a1,0xbe984dc1,0xbeb6409e,0xbea6819c,0xbe7bf003,0xbe352323,0xbdfc95bb,0xbde6fc2c,0xbda5108b,0xbd93cf32,0xbd8f6d18,0xbd241b55,0xbd085de8,0xbc4ec5db,0x3c466dbc,0xbc291485,0x3c188f17, +0x3b0fdd8e,0x3cb2317f,0x3c4563d5,0x3d4bf958,0x3d60f8c1,0x3d589c07,0x3d5305c7,0x3d5f7819,0x3d946e99,0xbabbfefa,0x3ba939cf,0x3d278afa,0x3d9a8139,0x3de4ed73,0x3dec1627,0x3e9f3216,0x3e845765,0x3e80280e,0x3c11f414,0xbe3f2250,0xbeb589ea,0xbee6ee16,0xbedfed14,0xbea96d75,0xbe7491e1, +0xbe2e0f0b,0xbe2403d4,0xbe022fbb,0xbdd16ed0,0xbdb7c722,0xbd2f3107,0xbd0dfbba,0x37f65dae,0x3db49698,0x3d1789c0,0x3d77f9d3,0x3d1f82da,0x3d40221b,0x3d19711f,0x3d64af03,0x3d90c708,0x3da65a6f,0x3d80cfc6,0x3d81ede8,0x3d74f423,0x3c8c11db,0x3ca38329,0x3d18e5df,0x3d0bacfb,0x3d018f7d, +0x3e8c2d78,0x3eaa4274,0x3ead1039,0x3ea9c38d,0x3e240ef8,0x3d4c0dbd,0xbe02c022,0xbe815954,0xbed171e6,0xbf0bdea2,0xbef065a8,0xbed6f42c,0xbe8bcf44,0xbe6d8e54,0xbe27a0f0,0xbe182dc4,0xbd8bcf8d,0xbd317a14,0xbd477f17,0xbc55ff62,0xbd4165d1,0x3cdcabc7,0x3bfbaa9f,0x3d5802c6,0x3d3e02be, +0x3d8ca191,0x3d76459b,0x3d50a9cf,0x3d853de6,0x3dae3285,0x3d9544a5,0x3e0ce405,0x3e00b3f9,0x3d2574c5,0x3d8e0423,0x3d2c1088,0x3e46be78,0x3e599655,0x3e0592b0,0x3c43b069,0xbdf3c188,0xbde30313,0x3cd8a935,0xbe1cc0a2,0xbe9b6c29,0xbf11b3c6,0xbf05885d,0xbf0033ad,0xbef810b4,0xbec82ed6, +0xbe963bb7,0xbe58137f,0xbe021ef8,0xbdd394f7,0xbd4cbe2e,0x3d89cfcb,0x3d05d403,0x3d44c477,0x3d55f81a,0x3d72f271,0x3d64b199,0x3d8d0118,0x3d9e12ad,0x3db0b7cd,0x3cf36b51,0x3b50906b,0xbce65169,0xbd51dc05,0xbd3675b9,0xbc278d3d,0x3c05668f,0x3ea9dbee,0x3dea4817,0xbebca3b5,0xbeb84944, +0xbf10a19e,0xbe1db63e,0x3daabc64,0x3eda1856,0x3e984718,0x3e2c19a1,0xbd8469a2,0xbd60f0c3,0xbe0aff63,0xbe4bc361,0xbe11bb9a,0xbe0fcf6d,0xbe019e51,0xbe19038d,0xbe44736b,0xbdf06f5c,0xbd811ae6,0xbcd2256d,0x3c98578a,0x3c105697,0x3d737976,0x3cfbc573,0x3dd23435,0x3db917b6,0x3d194020, +0x3d61ef3b,0x3d40141f,0xbb28c593,0x3d754fe0,0x3d1274ed,0x3e19a458,0x3bd76281,0x3e5d3225,0xbdbb4dd0,0xbf297e57,0xbf024e64,0xbf004329,0xbdd2e7e8,0x3e027512,0x3ed0a4ef,0x3f012449,0x3f00753c,0x3ed05674,0x3eaebc52,0x3e708013,0x3e4c50ca,0x3dfa8cf1,0x3d9a851c,0xbc1f1f80,0xbd559819, +0xbdf0bcb2,0xbdd48057,0xbdb6c4b8,0xbdaf0f94,0xbd8b73f1,0x3bfe986a,0xbc96f9b4,0x3c7cdf4e,0x3da352a1,0x3dd41f02,0x3d0b468e,0x3d820733,0x3db63b8a,0x3abdcb90,0x3dd6d540,0x3d06d99b,0x3e352dfc,0xbd5f3109,0x3decf984,0xbf261f7e,0xbecd109e,0xbe8924ad,0xbdd4a31d,0xbd230b0a,0x3d8c0d0a, +0x3e5a9fa3,0x3eac890f,0x3edaa7db,0x3f167574,0x3ee82dbc,0x3ec3737e,0x3ea09cc5,0x3e829102,0x3e2b8c7e,0x3dbc7cb3,0x3d1f88d7,0xbbc9146a,0xbe03357d,0xbde53e2c,0xbd9158f6,0xbd81f842,0xbd7b9b34,0xbcd5000f,0xbcd192e8,0x3d561c07,0x3d8b07f0,0x3d4ea36e,0x3db2e126,0x3d95dfc0,0x3a9d8867, +0x3ce3da7f,0xbd352673,0x3db19989,0xbd97e5ad,0xbdb9763b,0x3d2985be,0xbe379db7,0xbd3e5ee8,0xbe4ae4d5,0xbdb26512,0x3b87e4e8,0x3de80da1,0x3e8000dd,0x3e950425,0x3e5767f0,0x3e97244b,0x3e87ac27,0x3e8d6ce2,0x3e88c38a,0x3e692ee3,0x3e3ca6af,0x3cf68f42,0xbd79085c,0xbddbfb94,0xbda36d18, +0xbda734df,0xbcbd8c1b,0xbc7c8e85,0x3c1f59e7,0x3d582e83,0x3d94b335,0x3d98bb9d,0x3dae804b,0x3db49b20,0x3daa3587,0x3d7e93a5,0x3afccf49,0x3dd92142,0xbcbc66ff,0xbd8e0739,0x3e26117e,0xbe4aa5fd,0xbd98c234,0xbd1f142c,0xbdc81d68,0xbc90fb9e,0xbbdfeff8,0x3c88381e,0x3c99a014,0x3d916fad, +0x3e0317d1,0x3ddf5d73,0x3e02ca12,0x3e1f828c,0x3e3cd9e0,0x3e3997f2,0x3e3f6e0a,0x3da570f3,0x3d266f55,0x3c0bcdd7,0xbd26e696,0x3d1669cd,0x3c998e24,0x3d844d3b,0x3da0fde5,0x3d874e09,0x3d8f3420,0x3d945d36,0x3d84505c,0x3d1efa7b,0x3ce00088,0x3d196889,0x3d966a32,0x3d490114,0x3d8d5867, +0x3c07423b,0x3d33f37b,0x3d114fa8,0xbd3f798a,0xbca6d7f9,0xbcf4b05a,0xb9a33fc0,0x3ca42190,0x3d1635ca,0x3d3cd2cf,0x3d5c3cba,0x3d8d3c7d,0x3dc5aca5,0x3e04e8e7,0x3e1ed821,0x3e212099,0x3e2e955a,0x3e2b17cc,0x3e21ec77,0x3e18ba5e,0x3e1a05a6,0x3e21f184,0x3e0a3167,0x3e08e56a,0x3e0899e9, +0x3dfd5c54,0x3da71161,0x3dd51a09,0x3d961643,0x3d85458c,0x3d38507f,0x3d42d000,0x3d26fc51,0x3d2a6547,0x3d4eacd8,0x3d6423b0,0x3d6afc4f,0x3db276c9,0xbcc70ed9,0xbce3c956,0xbbc44d4f,0xbc0ee642,0x3ae5d187,0x3c2b0b47,0x3cdf0744,0x3d1d38f2,0x3d4667f0,0x3d6f1fad,0x3db8f80b,0x3e030207, +0x3e2c7dd5,0x3e271d16,0x3e305168,0x3e292c95,0x3e39d28e,0x3e3fbe5c,0x3e510721,0x3e501c08,0x3e26d7d4,0x3e2db013,0x3e077e0c,0x3dd4a586,0x3db36527,0x3d90242a,0x3c847d1b,0x3d8dc8d0,0x3cb2a3ff,0x3d71d60e,0x3d223c75,0x3cb18d5a,0x3d4e05c1,0x3c349138,0xbb455f34,0x3dee9a07,0xbc2bab0a, +0x3bfc7bd2,0xbb1ec911,0xbbbfdf41,0xbba09304,0xbc200097,0xbc8e7271,0xbbb5cc8e,0x3c48d0df,0x3cd53823,0x3d10ecd0,0x3d184829,0x3d6805a9,0x3d549be3,0x3d59fa1c,0x3d767d06,0x3d569233,0x3cfd992c,0x3d6a4451,0x3dfa52b0,0x3db2c24e,0x3d94c796,0x3d646fa1,0x3d836d85,0x3d1bb10e,0x3d6e2aeb, +0x3d70e5e7,0x3d8a3118,0x3d7013d9,0x3bffdc42,0x3da177c8,0x3d3d1ca1,0x3d6d818c,0x3dffa810,0x3bff06bc,0x3d11c136,0xbc4ac760,0x3ba5e60d,0x3b6bbfa3,0x3badba75,0x3bb517d7,0x3be1d340,0x3c082d13,0x3c62d35f,0x3c79f517,0x3c95a249,0x3cc58459,0x3cfe4494,0x3d13a0fd,0x3d08ad14,0x3d076c6c, +0x3d0ec670,0x3d1a7d01,0x3d2a4d88,0x3cd91a63,0x3d94057f,0x3de563c2,0x3e1d5bd3,0x3d6bdb18,0x3dafa6d3,0x3e025e6e,0x3e096e7e,0x3df86a22,0x3df012fa,0x3e06e059,0x3e06d084,0x3de95949,0x3d7492f7,0x3cbec842,0x3ded7ea0,0x3daf089b,0x3ceabbe7,0xbd0456f9,0xbcccd8a7,0xbd3d8613,0xbcc49cb8, +0xbcbc216c,0xbce14528,0xbd001a94,0xbcfafc9b,0xbcd441a8,0xbcaf7e38,0xbc99225b,0xbca9366f,0xbcae113e,0xbcaf7155,0xbcb3bdbf,0xbcc66d17,0xbcd7b8e2,0xbcd9f694,0xbce514d0,0xbcdd9ad7,0xbcdb23c0,0xbc9901be,0xbc926a9b,0xbccb0c09,0xbc6d2f3c,0xbc4bf0b5,0xbca6f9bd,0xbc9a0732,0xbc928fc5, +0xbc8a5e34,0xbc6f7d58,0xbc560add,0xbc68b6e6,0xbba10a0c,0xbbebccbd,0xbbd83a47,0x3b3ef166,0x3db38b0a,0x3d22549f,0xbc49db8d,0xbc5abd61,0xbcb46562,0xbd522caa,0xbd6fb24a,0xbd41aaf2,0xbd4aee7f,0xbd54cf75,0xbd4a9f2a,0xbd510b89,0xbd4646fc,0xbd29fc11,0xbd287345,0xbd2dbf7f,0xbd1e8c84, +0xbd29bce5,0xbd2d17ee,0xbd29b61a,0xbcffbfbc,0xbce276ec,0xbcebe484,0xbc93dd49,0xbc77d4a3,0xbc885de9,0xbbefbf94,0xbb4bc7af,0xbbe009ed,0xbb1c4be8,0xbc1fb1e9,0xbbbe8f67,0x3b1efccb,0x3b9d689d,0x3c7b9ee7,0x3b8e4552,0x3d8e1501,0xbd75403c,0xbd1639a0,0xbd367a0f,0xbd64153a,0xbdb7f49f, +0xbdb5cc9d,0xbd58b48d,0xbd3c2b88,0xbd41f469,0xbd8758d2,0xbd866b1f,0xbd84ef19,0xbd4ef037,0xbd6b1f71,0xbd6cbde8,0xbd74cfd2,0xbd7ee9ec,0xbd81ce5a,0xbd636d56,0xbd0b7eec,0xbd089875,0xbcc9e42d,0xbc5b6259,0xbbc3b95e,0x3ad45894,0x3bf529fb,0x3c2695fb,0x3c8eeba4,0x3c6248c5,0x3c96c38c, +0x3bb3f844,0x3cb4aaba,0x3d04db27,0x3d8e3d60,0x3d013b1e,0x3e4c0676,0x3ded712e,0xbd894de8,0xbc31689a,0xbd2f7663,0xbdd72ede,0xbdf6aa30,0xbd914ad9,0xbdc8ba73,0xbe01d980,0xbdff5bf0,0xbe093a92,0xbdf86689,0xbdbc8d90,0xbdaa7def,0xbd9cf138,0xbd837309,0xbd969830,0xbd9acb39,0xbd8f1997, +0xbd4562b7,0xbd0dd14b,0xbd089491,0xbc5a4c9f,0x3a843df3,0x3b248285,0x3ce85515,0x3d137654,0x3d0aa25a,0x3cfbd702,0x3d2d7323,0x3cc3d361,0x3d8c14c4,0x3d88297d,0x3da7abdb,0x3d308c7c,0x3d1becf2,0xbb71e387,0xbe2d4227,0xbdbbe53c,0xbdf540de,0xbe188acd,0xbe15e51f,0xbd8aee70,0xbd8bab71, +0xbda705ca,0xbe08fa3a,0xbe0b45aa,0xbdef80d8,0xbdabae77,0xbdb624fc,0xbdba1b9c,0xbdb94560,0xbdc20b41,0xbdbf4ead,0xbdb95a31,0xbd062695,0xbd2702a4,0xbc73f32f,0x3bcf7005,0x3cbf3456,0x3ca3726c,0x3d375f76,0x3d84aafd,0x3d840c29,0x3d51c0e1,0x3d20a404,0x3d422e77,0x3d9ff8e9,0x3d9a6cc4, +0x3dbedc2e,0x3e00e61a,0xbd149683,0xbe99403f,0xbef14819,0xbedb5793,0xbee0e338,0xbe8d55b9,0xbe163993,0x3c98b2f2,0xbdac6cf9,0xbde7c5d6,0xbe266081,0xbe77c941,0xbea9a66d,0xbea3541e,0xbe80db77,0xbe29c64b,0xbe382414,0xbe24f227,0xbe0cedf4,0xbdfec70b,0xbd8aa43e,0xbd27e7a7,0xbc1cc8f3, +0xbbf9f109,0x3c874b2d,0x3d1ad2d1,0x3d69dfa6,0x3d6d43a3,0x3d4bb999,0x3d730b14,0x3d40d1ee,0x3d0119e3,0xbdb4249f,0xbdb6cf4a,0xbd170dc7,0xbe0f3fa6,0xbde8c0e7,0xbeaf620f,0xbefba865,0xbebdcca1,0xbe45abfb,0xbb933fb7,0x3d25fac0,0x3dce00f6,0x3e8b5d55,0x3ec338e7,0x3f106d1a,0x3ed1f5ae, +0x3eba020f,0x3e91b4e6,0x3e30470b,0x3d82f1ce,0xbce870d0,0xbd93f2c7,0xbdc73515,0xbdb4b03f,0xbdec0a65,0xbd9850e8,0xbcecd3ad,0x3b82758c,0x3cf5d6b2,0x3d4b67a4,0x3d8df5da,0x3d99fd6b,0x3d53d441,0x3d0e5c6f,0x3c2fa121,0x3baef039,0x3d4da07f,0x3c1abd4f,0xbd48195f,0xbd8e3df0,0xbecfa3b1, +0xbebc9339,0x3beba20d,0x3de50b42,0x3ef25be1,0x3e487640,0x3e3afb1e,0x3de50c13,0x3e8ebf97,0x3ed4078b,0x3f1bd89c,0x3f19d5d2,0x3f181ef8,0x3f1d08db,0x3f1053cd,0x3ecc545f,0x3e910058,0x3df30e14,0x3daec102,0xbcfaa057,0xbde8a6d9,0xbda3d288,0xbdf40e2e,0xbd64071d,0xbd4a216b,0xbcc06d36, +0x3d6df826,0x3d8f27fc,0x3c5abcba,0x3d5436d1,0x3d2651c6,0xbcd86c74,0xbd83ee76,0xbd8eec55,0xbe3a75fa,0xbddae7d5,0xbeb2e8b7,0xbe2a8c4a,0x3ee8fc69,0x3ed52768,0x3f10a9ec,0x3e7a8cb4,0x3e357b05,0x3b965817,0x3dfad8ba,0x3e3c8144,0x3e4322fe,0x3ea31b73,0x3eb98c73,0x3ee4c758,0x3ecd1640, +0x3ebd64c8,0x3ea09a2b,0x3e470182,0x3e27212e,0x3d0e7451,0xbd455513,0xbd82852e,0xbd82bc0e,0xbd8ca455,0xbcb549b0,0xbcf17347,0x3d4807f3,0x3d932384,0xbce6a1db,0x3d671830,0x3d127e41,0xbc18db90,0xbd7a8ce5,0xbd56a47f,0xbe379b2c,0xbda80fe4,0xbe58a50f,0x3ece32ea,0x3ea544d4,0x3e802a7a, +0x3e7d21b6,0x3d4e8ca3,0xbdbc8fb7,0xbe2fdfe7,0xbe376aa5,0xbe3bd45c,0xbe3784b8,0xbde3b3c2,0xbc3e5f69,0x3d4b9570,0x3d68bec7,0x3d8fe537,0x3dd9b41e,0x3ddb88a6,0x3dc4242e,0x3db845cd,0x3d1e965a,0x3cd3aadc,0x3c27a32a,0x3ced6fd7,0x3d4a109e,0x3d2a2d8d,0x3d8b986c,0x3d3efb91,0xbd19f190, +0x3d0fbf14,0x3cb5022c,0x3bdd1e9d,0xbc4b2bac,0x3b94c86e,0xbdb419d3,0xba7059bb,0x3d13cf9f,0xbdb53d76,0x3e115d00,0x3dc5848f,0x3e548f5b,0x3c08c2a9,0xbdbb7181,0xbe723665,0xbe91912f,0xbec01de5,0xbea1e891,0xbeb50bb8,0xbe4235e2,0xbe4bf9ba,0xbdf1baca,0xbd23e3b4,0x3d146c4d,0x3d79cebd, +0x3dc819b8,0x3de844ac,0x3aa0861d,0x3d4655a2,0x3d6651a1,0x3d0db89a,0x3cc7aafa,0x3bbe5704,0x3d15f0dd,0x3d0d1e48,0x3d33dba7,0x3d5e7f8e,0x3cdd66e3,0xbcd55bfd,0x3c9abad9,0xbd38787f,0xbc8ebe66,0x3b7deeb5,0xbda13c5c,0x3e10a27c,0x3d3b91f0,0x3ccfffaa,0x3d1d25c4,0xbd13e267,0xbd679c3a, +0xbda2acac,0xbddf13a6,0xbe18c529,0xbe3c9c2a,0xbe2d2865,0xbe3d1de3,0xbe356865,0xbe17fcd6,0xbdf0eb09,0xbdb6bdaa,0xbc563d2a,0x3c1076e5,0x3d0de968,0x3def992a,0x3c9d8642,0x3d6a9941,0x3c5f01c0,0x3c93424c,0x3d66f4d3,0x3cbc59dd,0x3d5ec9e7,0x3d06472f,0x3d55e157,0x3d198950,0x3c1bd219, +0xbcc6ec51,0xbcc5a249,0xbc9027c7,0x3b26a193,0xbc98cd48,0xbd0e2371,0xbbebf587,0xbd07a5c4,0xbd69d052,0xbd78861a,0xbd98cb81,0xbdbe7a9d,0xbdd134ff,0xbdf2c8b4,0xbe07484a,0xbe147133,0xbe16c678,0xbe228e85,0xbe071bec,0xbdce8618,0xbda28b17,0xbd7abad4,0xbd98fec0,0xbd4e97bc,0x3ba955d2, +0x3c7773dd,0xbd1cd9f8,0x3cad7552,0x3b243d57,0x3c34659f,0x3d0328b8,0x3cf94355,0x3c3a12e2,0x3cc87728,0x3c4405e0,0x3c10bf1c,0xbb87079e,0xbb53ab6a,0xb9b3b32a,0xbbb90c80,0xbd4d7b35,0xbc678a76,0xbcce173a,0xbd52129f,0xbd84930b,0xbd8ed3f9,0xbd9d5147,0xbdaffb02,0xbd8def52,0xbd56bda5, +0xbd1ef1b0,0xbd4e61fa,0xbd794555,0xbd8cd3e7,0xbd894edb,0xbd885996,0xbd88afcf,0xbd84e82c,0xbde82dd1,0xbd4b167d,0xbcb0bb28,0xbc3b7823,0xbd198163,0xbc2d2cdc,0x3c3efc04,0xbc8972a9,0x3b3cd02c,0xbc9cba80,0x3c2762a2,0xbbab737b,0xbbd74c7b,0xbc55caa7,0x38eb3ada,0xbc5df37a,0xbb292271, +0xbc8419a4,0xbd13d347,0xbd103d07,0xbd1e3442,0xbceb254d,0xbcb741b6,0xbce4837e,0xbcc394d8,0xbce26674,0xbd1deb8a,0xbd61446e,0xbd84a317,0xbd86d85e,0xbd7a6477,0xbd7daa83,0xbd69b3fb,0xbd5a6c52,0xbd720a3b,0xbd321f8e,0xbcf48f13,0xbd2fadd6,0x3bd13b51,0xbc3b4249,0x3bc46991,0xbcac3947, +0xbc5c5418,0x3b881662,0xbba8bc0e,0xbc0b82a8,0xbc9c2a96,0xbcdb9f60,0xbcbe579e,0xbd09b6c6,0xbd330ad3,0xbd216caf,0xbd3f1599,0xbd1c5729,0xbcfe0176,0xbcfbf0a1,0xbd063b7d,0xbd136107,0xbd1bd94f,0xbd27415f,0xbd2f846d,0xbd36c053,0xbd2d5d53,0xbd1e4b7e,0xbd184cbd,0xbd20da4e,0xbd33b28b, +0xbd447dbd,0xbd3dc4bd,0xbd39bd91,0xbd3af9cb,0xbd497a43,0xbd41e571,0xbd77491e,0xbd2b6d3d,0xbd0234a5,0xbbbf6457,0xbcf8102a,0xbc96f641,0xbc148301,0xbc2eb923,0xbc36430e,0xbc41e290,0xbc4b4ce6,0xbc73296f,0xbc7fb0ec,0xbccc5b8b,0xbcd45b68,0xbc45067b,0xbcea8797,0xbd5528ab,0xbbaf2f78, +0xbd0211ae,0x3b5754d5,0xbc12bc6e,0xbc3ebf30,0xbc714462,0xbad98b49,0x3b5b2191,0x3c278030,0x3c395ca4,0x3c6b7992,0x3c847990,0x3c932ba1,0x3c99bad5,0x3cab4e11,0x3c97b386,0x3c87f57f,0x3c5a8bf3,0x3c3108b7,0x3bd40c81,0x3c412bd0,0xbcd04816,0xbd0fdbd6,0xbd2b14bd,0xbc9d9f13,0xbd097d80, +0xbd182945,0xbd1619fa,0xbd0c5179,0xbd05a83d,0xbd1dc8e5,0xbd20b02d,0xbd2944d9,0xbd1c3a82,0xbcc48c3e,0xbd11762e,0xbd368cf9,0xbd92e900,0xbd97794d,0xbd862ed6,0xbd9a1950,0xbdb75e07,0xbd18b8a3,0xbbad6ef2,0x3c969442,0x3caaa456,0x3cda40ff,0x3cc51e31,0x3cdeda2f,0x3d0b5078,0x3d167d79, +0x3ce7ff0e,0x3cfda388,0x3ccd1ba6,0x3c7f6c74,0x3c42d996,0x3cc10fed,0xbd09b8b9,0xbcb1752e,0xbcbc9a8e,0xbce89160,0xbc5642ec,0xbc5fbf1a,0xbc52d629,0xbc9b77b0,0xbc8c3d6d,0xbc6c5afe,0x3c1abefe,0xbcb0fa96,0xbcc47e6d,0xbd03864d,0xbd053cf0,0xbcff6816,0xbdd0ff25,0xbdb1e5e9,0xbdc50d0f, +0xbdedc24d,0xbe09fd1e,0xbd1e0167,0x3bbe596c,0x3d45a34f,0x3d581ff9,0x3d83847f,0x3d8cf63e,0x3db52417,0x3db74d99,0x3dc4ce15,0x3dbcbc4a,0x3d944f39,0x3d851d01,0x3d19b9d0,0x3d2b7876,0x3c28e173,0xbd5c4c31,0xbca1299b,0xbc8ce921,0xbcdf40fe,0xbc6989af,0x3bc766da,0x3b7d3409,0x3c5a5e35, +0xbc442ae6,0x3c6d46b0,0xbb726ca0,0xbc78371c,0xbce991f2,0xbd182e4d,0xbd5f7a66,0xbd96ecb3,0xbe2d29c7,0xbe49e3fb,0xbe3ac3c0,0xbe600ae8,0xbe8773ee,0xbdc60b62,0xbbc2749d,0x3d7e2936,0x3d929b5e,0x3d9a4217,0x3d8b8cb1,0x3dbda5fe,0x3de0dc95,0x3de8e0c7,0x3dc85ee2,0x3dbc1520,0x3d9dbee1, +0x3d47520a,0x3d30e011,0x3cdf247a,0xbc809eac,0x3bb1c58d,0xbc3440fb,0xbb836646,0xbc4ec324,0x3cd2b9d3,0x3c2a795a,0x3cdec2b6,0x3c47e770,0x3d0f458c,0x3cb3d2ab,0xbc6f0b91,0xbc9bfd52,0xbd046542,0xbd772352,0xbd8538e4,0xbe041665,0xbe42e0e9,0xbe123600,0xbe6bf309,0xbe7b5fc0,0xbdb01172, +0x3cb3a32c,0x3dad7b49,0x3dc58e45,0x3ddee1f3,0x3dea0fe7,0x3e2260a9,0x3e2ac524,0x3e4d7ec1,0x3e3abda0,0x3e212f70,0x3e02c566,0x3daa2167,0x3d9ce65d,0x3d3e9e08,0xbda9b466,0xbc2675bd,0xbcd01c13,0xbba6b4aa,0x3c400649,0x3cef4dd4,0x3d32d8fd,0x3d61631c,0x3d4b4029,0x3d4f9333,0x3d3bea81, +0x3c0a5df2,0xbcdb2616,0xbd5dc2cc,0xbda02729,0xbe1f96eb,0xbe6f63e5,0xbd7d6638,0x3e636eb5,0x3e52aa58,0x3eb05b8f,0x3ebec86e,0x3ea7270b,0x3e79a940,0x3eb8c205,0x3ed7bd7c,0x3ef82b5c,0x3ef63269,0x3f00a7bd,0x3eccad77,0x3e9e53e2,0x3e5ed13e,0x3e3b1bfb,0x3dcf3915,0x3d927216,0x3d17a03e, +0xbcfa671f,0x3cf1f9b8,0xbc2bbe52,0x3cd8b02c,0x3cc126d9,0x3d448b1a,0x3d80ce2e,0x3d6661d7,0x3cc87321,0x3ce00a83,0xbca2e467,0xbd9ff393,0xbc6b18cd,0xbd28508d,0xbdfbb369,0xbd2fbc44,0xbd73aa84,0x3e2bbf8c,0x3efd3933,0x3ed9c9db,0x3eb4bfe5,0x3e45b72b,0x3e4b7ebc,0x3dad225c,0x3dbfc961, +0x3df43f07,0x3e4f4e8b,0x3ebd5cad,0x3ed54cf1,0x3eef7c29,0x3ec8d38a,0x3ea65378,0x3e6235a8,0x3e296758,0x3e0f6a1f,0x3da31a64,0xbcb38c19,0x3a11c6c6,0x3b9ebf4e,0x3c9a8939,0x3cf4771d,0x3d29fea4,0x3d616a47,0x3d78c269,0x3d5760db,0x3cbd2e77,0x3c882670,0x3c70dd1f,0xbd34ba6c,0xbd24a97d, +0xbc404654,0xbd9b0ba5,0x3e3864b8,0x3ea9f424,0x3e7e3d82,0x3d8bae32,0xbe1708dc,0xbdf2e503,0xbe04dab5,0xbddfe6c2,0xbe481885,0xbe5c5ad2,0xbe8e3b4d,0xbe54bcae,0xbe43a428,0xbdf61c89,0xbe1165c8,0xbd9a453a,0xbd7f0a66,0x3c8c4041,0x3ca0f2a5,0x3da45f29,0x3dbbce47,0x3bfdca1a,0x3cf1645d, +0x3cc59108,0x3cb840d1,0x3b07ae65,0x3d25ab21,0x3d71de3a,0xbbaaaf5b,0x3d3dd6c6,0x3d176dda,0xbbf5b9c7,0x3d0db234,0x3d152c77,0x3dc82fd2,0x3c584475,0x3e957afa,0x3e71f2ee,0xbe4d38ba,0xbe8106c1,0xbed249a7,0xbe86cc3a,0xbe865f7e,0xbe08effe,0xbea2c707,0xbec99edf,0xbede622a,0xbf03b7f2, +0xbef750e6,0xbef9fc1d,0xbecd6b13,0xbead4ae6,0xbe852dbd,0xbe2b1705,0xbe0bec9c,0xbc2530e2,0x3d3a25ff,0x3d606001,0x3d1b59f5,0x3bfec823,0x3cbd307b,0xbbb2677c,0x3d0862f6,0x3d616c8b,0xbccbd38f,0x3d82a099,0x3d6a1a8d,0x3c2c1d5c,0x3d15df5f,0x3d690924,0x3dd25a59,0x3e0dbe2e,0x3e484258, +0xbe6d3ffb,0xbe613373,0xbe3d17d2,0xbe89673b,0xbe237a82,0xbe044de1,0xbe04729c,0xbe35e226,0xbe598243,0xbe93e68a,0xbe9b2b84,0xbebe9a2e,0xbebccf02,0xbeb85ee3,0xbe9e53f6,0xbe901ac3,0xbe7059e3,0xbe46f842,0xbd61b8ed,0xbbea0c86,0xbce38caf,0x3d3151a9,0x3cc5e04a,0x3c769877,0x3d10727c, +0x3cf28248,0x3cf5654b,0xbbe16de4,0x3d2eeddf,0x3d3b0cb0,0x3d12669e,0x3d38cb3a,0x3c3bb516,0x3d6573c4,0x3c44f5df,0xbd9806d3,0xbbe38499,0xbe31f5ad,0xbe165ad2,0xbe3c98d9,0xbd372af5,0xbc2a6a35,0x3cc94e25,0x3c1e2d40,0x3d10d158,0xbb7df13b,0xbdc268c1,0xbe3fa3e0,0xbe4d4f3f,0xbe770d99, +0xbe7548a4,0xbe678287,0xbe2fb0b7,0xbe03a498,0xbddc9c72,0x3d368560,0x3cfb9f7b,0xbd0be30d,0xbba74ea5,0xbc918a6c,0xbc21cf64,0xbb350863,0x3c1364d0,0x3c8c24dc,0x3cc528d2,0x3cfc7009,0x3cd86da7,0x3b1c1f4e,0x3cf79d7a,0x3c4f3217,0xbd1ee91b,0x3caf2c83,0xbe11e19b,0xbd9932f2,0xbd786546, +0xbd431c0f,0xbd2084be,0xbd5e69ad,0xbd8029ec,0xbcaeaca2,0xb9349938,0xbc07d36f,0xbccf25ac,0xbd0c719b,0xbd2d8e47,0xbd6ad7fa,0xbd97fd54,0xbdf1d3fd,0xbe0276da,0xbe0e8a4e,0xbda4bcb8,0xbdc15dc6,0xbde69597,0xbd94ebc9,0xbd6ac01c,0xbcf30ff1,0xbc0b034d,0xbc5c21ef,0xbb9119b5,0xbaf590b7, +0x3c95080e,0x3c95730d,0x3c96d399,0x3c23321c,0xbc2aa444,0xbcceacf3,0xbd2a7e38,0xbb70a822,0x3c1f4bd0,0xbcdc1cfa,0xbcc0a08e,0xbca3a97d,0xbd009869,0xbcfece35,0xbcabd881,0xbc5c2f20,0xbad9b082,0xbb52235e,0xbb70ca8e,0xbc2c2adb,0xbbaacb7b,0xbc799843,0xbd0b19fd,0xbd439b60,0xbd907b12, +0xbda3e204,0xbde20e23,0xbdb1cf23,0xbd8dfcbf,0xbd7fd78c,0xbd829152,0xbd364511,0xbcd67820,0xbc6b6f51,0x3a434cd7,0x3c8e37e9,0x3c8f3c38,0x3c8f9b35,0x3ca23ac6,0x3bdde459,0xbb9cda97,0xbc2cefdb,0xbc12f037,0x3c28f8b4,0xbc28c907,0xbc7ec37f,0xbc5992af,0xbcc22f4c,0xbc8c71a2,0xbc69ad89, +0xbc205b0e,0xbd0a3647,0xbd598beb,0xbd83d6b3,0xbd5a3a7a,0xbd331578,0xbd1b981a,0xbd45d5b5,0xbd4e9b17,0xbd623a96,0xbd80a7df,0xbd49f534,0xbd953841,0xbdb3d337,0xbd96ec65,0xbd83eaf3,0xbd54f02c,0xbd36ebeb,0xbcfc20cf,0xbc88aa08,0xbc5de9fc,0x3c46c2b8,0xbb391e15,0x3bd914e6,0x3ba317fe, +0xbb118e13,0x3c152b2c,0xbc1aed63,0xbb7c44f8,0xbd00abba,0xbcf32ef8,0xbcd365bc,0xbcbe28e9,0xbc82c862,0xbc95e3b9,0xbca4dfda,0xbc91075c,0xbc3c14ed,0xbbc7dace,0xbbe33712,0xbc803d87,0xbce6c05c,0xbd0c27d0,0xbd13f4bb,0xbd2395f1,0xbd32062f,0xbd488f8d,0xbd6774d6,0xbd6f7b24,0xbd3b8fa6, +0xbd2f4d4a,0xbd2fc37e,0xbd1de5f5,0xbd07e754,0xbd0290e4,0xbd0e5c0b,0xbd162b3f,0xbd116e22,0xbcfa009e,0xbcd686bc,0xbcb0941b,0xbc9ff16c,0xbcd2c3c7,0xbcb5fcce,0xbce5c4fb,0xbcbec7a4,0xbca5bcf3,0xbca889b9,0xbca7f9d2,0xbca72730,0xbca0b684,0xbc8624a3,0xbc7fe6cb,0xbcaa86fd,0xbccca834, +0xbcd825e4,0xbccb88ca,0xbcaf2d75,0xbcaaa7e4,0xbcb77799,0xbcc4a1ff,0xbcce1b84,0xbccc444e,0xbccb60c8,0xbcde6b7b,0xbd181821,0xbd291e8d,0xbd189257,0xbd078121,0xbd11500a,0xbce65163,0xbcd41c74,0xbccba95f,0xbcce8d53,0xbccec5af,0xbcdf0ef3,0xbce4a3b1,0xbcc93936,0xbcaee4b4,0xbcf07c93, +0xbcce601c,0xbd2521cc,0x3e06acaf,0x3de070d0,0x3de1ae76,0x3dbce90d,0x3dc16ee5,0x3dcc00e7,0x3dc7da44,0x3dce0a08,0x3dd3fbf3,0x3dbd0bf6,0x3db2aa1b,0x3da8a8d5,0x3da0aa16,0x3d9ac2cc,0x3d95fbcb,0x3d97e3a2,0x3d9d265a,0x3d9a5afc,0x3da08f50,0x3d9f881c,0x3da30f44,0x3da44e56,0x3d88b63b, +0x3c734738,0x3dab8d2b,0x3d886245,0x3c9df916,0x3c9b378a,0x3ca72ed6,0x3cc2bb94,0x3cb526d1,0x3cb3a9b6,0x3cef501f,0x3d76601a,0x3db94c08,0x3c8726c3,0x3d51ac1f,0xbc92e7c3,0x3dd79cb3,0x3e1acbf5,0x3e2ab7cf,0x3e3e9e02,0x3e3b0ae7,0x3e3813af,0x3e426577,0x3e23d2c1,0x3e191ced,0x3e017178, +0x3de9ab5c,0x3dd935f7,0x3dd0b743,0x3dc7665b,0x3dc44fa0,0x3db0e523,0x3db893b0,0x3db4beb2,0x3da98604,0x3d87ec19,0x3d8c47c5,0x3d62d00a,0x3d8c50f2,0x3da6c291,0x3d81be79,0x3d9c7228,0x3d86600c,0x3d8b9d1f,0x3d9e8ffb,0x3db74099,0x3d6d53f8,0x3d6fb69c,0x3d8efb45,0x3d5d8f9d,0x3d83206c, +0x3d6a6880,0x3e3fc374,0x3e3785c8,0x3e5794da,0x3e70b072,0x3e64d301,0x3e5ee8f1,0x3e6f661e,0x3e401677,0x3e258d68,0x3e0c7b34,0x3dd02a1b,0x3dab30db,0x3d7e5bd5,0x3d7fb740,0x3d85cb49,0x3d6018d6,0x3d8b5fce,0x3d7c8048,0x3d854aeb,0x3d9fca16,0x3d609ece,0x3d8a2b69,0x3d2e40ba,0x3d3484ae, +0x3d935ad0,0x3d5355f1,0x3da45343,0x3d5945d1,0x3d96c4b8,0x3d7ea37c,0x3d566695,0x3d88dcfe,0x3d6f2756,0x3d1389ec,0x3dd141a9,0x3a0899ea,0x3dcdc7b4,0x3e95d222,0x3e96abe0,0x3eb9f046,0x3ea6bf07,0x3ea445df,0x3eada950,0x3e94566e,0x3e845b4e,0x3e4836ee,0x3e1ef6c3,0x3ded1361,0x3dcecf73, +0x3dae6fc6,0x3d8c523e,0x3d280c69,0x3d68aaf4,0x3d4662b6,0x3d2da31d,0x3d5d0939,0x3cfd8fe6,0x3cef0c9c,0x3cc8995c,0x3ca4cba6,0x3d5a8c7c,0x3d06da20,0x3d14120e,0x3cce82b8,0x3d754f0b,0x3d3bcc2a,0x3d006f53,0x3ac35dd0,0x3c605641,0x3d2e924f,0x3d5574e1,0x3ddca242,0x3e3e9056,0x3e9f395b, +0x3ea19fc1,0x3eb272f6,0x3ea61386,0x3ea41f51,0x3eb3db2c,0x3e93fa9d,0x3e7a1320,0x3e562d6d,0x3df53e58,0x3d8511c4,0x3ba7816b,0x3c550837,0x3c32866e,0xbc3c2f3f,0x3c940e52,0x3bc6d33a,0x3cb61645,0x3d97333b,0x3d03b69a,0x3cea5dbc,0x3ab008ae,0x3c25d6f8,0x3d029598,0x3d093e24,0x3d280c66, +0x3d08716e,0x3d47337f,0x3d473143,0x3c8a249e,0x3cfe30e8,0x3d56a07e,0x3d729709,0x3d96ecb6,0x3e90c964,0x3eade84a,0x3e6a999b,0x3e9be3d3,0x3e85df7e,0x3e279dbc,0x3e1aed0a,0x3db9ab0e,0x3e1fb4a7,0x3e1dd661,0x3e050ff7,0x3e723749,0x3e8dbe7b,0x3e80f028,0x3e61c00e,0x3e09ecb2,0x3e2010f7, +0x3e007237,0x3d99cb0a,0x3da1342a,0x3d92ec78,0x3ca8288c,0x3d24dc77,0x3cbd4503,0x3d2549ed,0x3d39d7ce,0x3d489ead,0x3d2592f7,0x3c75e949,0x3cd89853,0x3d4201dd,0x3d955bb3,0x3da7335e,0x3dc4c4e9,0x3e0266c2,0x3e29f972,0x3e06ce90,0x3d0b5a31,0xbea087d8,0xbeaa14c6,0xbeae16c9,0xbe194a03, +0xbda67b6d,0x3c674bb5,0xbd67c16a,0xbe0e4e7f,0xbe7b4abf,0xbeb62f99,0xbed40c03,0xbed742b5,0xbec294f0,0xbe9d2398,0xbe88b757,0xbe34b155,0xbdde28da,0xbc3abeea,0x3dd03048,0x3d98e1c0,0x3d42e0a6,0x3d01c733,0x3cb5b7b4,0x3d1958ea,0x3d2dfb6f,0x3d52e06a,0x3d3a47f4,0x3d09d1e4,0x3d344e39, +0x3cbf65af,0x3d564c18,0x3d921abd,0x3db1174f,0x3e093b00,0x3d730d68,0xbe36c246,0xbea5210f,0xbe29b7c5,0xbd2ad11f,0xbcfcc9db,0xbd93bef3,0xbdd4bfb0,0xbd6d57c6,0xbdc88698,0xbdb0c407,0xbe37e847,0xbe3d5e4a,0xbe655424,0xbe8526a1,0xbe882b60,0xbe7b4f51,0xbe3a4ecb,0xbe1e82d8,0xbda8dd82, +0xbc94e141,0x3d320932,0x3d6ceecd,0x3cfe5fae,0x3d53322c,0x3d5703e5,0x3d7d6da1,0x3d8e7eea,0x3b93820b,0x3d8f6468,0x3d82f9b4,0x3d26d811,0x3d5b82a5,0x3d394357,0x3d17c346,0x3d8e04f6,0xbe1fe5b4,0xbe4ac400,0xbca46e8a,0x3d8104fa,0x3e99fa7f,0x3d39a0b3,0xbc820799,0xbe1cc769,0xbc6b63e5, +0x3d27fc7d,0x3e0ff3d7,0x3dfa72b3,0x3dae9ba5,0x3d02e5e1,0xbd1a207e,0xbd9bd5ac,0xbdd7d66f,0xbdd5596d,0xbdd1e7a8,0xbdc6a2ce,0xbd9b2560,0xbd5c8ed2,0xbc809569,0x3b7a614c,0x3bbd41d0,0x3d151c44,0x3d2d87b6,0x3d5366c7,0xbc5a14ef,0x3d7c4690,0x3d812c31,0x3c516d97,0x3d288fee,0x3c132dc3, +0x3c2d7b2f,0xbd749133,0xbe205834,0x3d92d4bc,0x3dad7446,0x3d971124,0x3e6f5620,0x3d93e084,0x3d692185,0x3c9426b9,0x3d8199de,0x3dbaa01e,0x3df705f6,0x3ddece72,0x3dce4801,0x3d2f82d1,0x3d781c67,0x3d085940,0x3c1405b1,0xbc99f5f9,0xbccd3a5a,0xbdbc983d,0xbdaa4d5a,0xbd5d6f04,0xbdb81b35, +0xbd83ebe6,0xbd023cc1,0x399e80eb,0x3b0ca3e3,0x3c0162ec,0xbc652917,0x3cefaf24,0x3d0b3fca,0x3ce66d5e,0x3c59f1c1,0x3c02a2d4,0xbc8c9ee5,0xbcb19f37,0x3c9a3177,0xbd620545,0x3e0af687,0x3e093c2d,0x3e039308,0x3acda85b,0xbd57a7cf,0xbd89bb82,0xbd46f157,0xbd366a34,0xbd1580a5,0x3d7ee466, +0x3daef1f4,0x3d9b1783,0x3d90558e,0x3d3260f9,0x3babeeec,0xbcd2a976,0xbd221b94,0xbd2cb5ac,0xbdd180e3,0xbdce413e,0xbd2473e2,0xbcf7ac00,0x3b44711f,0x3ca51fe4,0xbc40e5c9,0xbc2c82b9,0xbc161baf,0x3cefac08,0x3d26427d,0x3d427d3c,0x3cf212b9,0xbc86a325,0xbb89ef7e,0x3c5854f4,0xbd7efd03, +0x3daa35af,0x3da94965,0x3d8ac2be,0x3cbe75a5,0xbbaa3c08,0x3b293925,0x3ccc5415,0xbce33635,0xbd1b9aed,0xbc3503a8,0x36b3fee9,0x3c1f8d8a,0xbb35442e,0xbd084b14,0xbd2c7302,0xbc9dc355,0xbcafcaca,0x3bdb7d0d,0xbd2809da,0xbd908f7f,0x3cbc9b76,0xbba39ccb,0x3afd001a,0xbc017e44,0xbc255c33, +0x3c9e9dcd,0x3c8775a8,0x3c489d91,0x3c0a3fad,0x3c2ddfe0,0x3c4dfb2f,0xbc164859,0xbc4ff296,0xbc1e172f,0xbbb5a390,0xbc0e39eb,0x3a8ddc8e,0x3d3ca265,0x3d1720b5,0x3ca81a16,0x3c6cec5b,0x3b161822,0xbc4c9d44,0xbcfebdd2,0xbd32f604,0xbd27b0c6,0xbcfe66b1,0xbce76cf3,0xbcac8e4e,0xbd1b0f26, +0xbd56cb4d,0xbd78393f,0xbd1c844e,0xbbd3195f,0x3cba7f70,0xbcdbe525,0xbcd2230b,0x3ca1dd10,0xbb6691ef,0x3b64627d,0x3c40b730,0x38e99161,0x3b752e12,0xba6b73a7,0x3b551904,0x3b9f2584,0x3c336b1d,0x3b3ecae0,0x3b27a494,0xbbc0eafe,0xbc0d49be,0xbc8df09c,0x3b105a63,0x3a8deb5a,0xbb909816, +0x3c4982d6,0x3b2228d8,0xbbb9fd74,0xbc9aaeeb,0xbc223e24,0xbc0357d3,0xbc56b470,0xbd08d9ca,0xbd440380,0xbd756dff,0xbd51402d,0xbd4c355d,0xbd410194,0xbd0a6968,0xbc54d9a2,0xbcbbd7e6,0xbc4582bf,0xbc230a5a,0xba48660b,0xbafad40d,0xba8894d6,0x3c50ded7,0xbb88ec43,0x3c4f6ac0,0xbca09994, +0x3b363dbf,0xbbb50c73,0x3b3d01fa,0x3be549af,0xbbf3679a,0x3baca0a0,0x3b904c36,0xbd094a98,0xbcc0f058,0xbcd349f0,0xbcead820,0xbd1c85ad,0xbd2ed1f3,0xbd237ca1,0xbd213adb,0xbd37aeb9,0xbd3bbb97,0xbd2c9923,0xbd0ff64c,0xbcdbbebb,0xbce287aa,0xbcbb2ed9,0xbc8e9563,0xbc4869d5,0xbc5e97cf, +0xbbede0a1,0xbbf49a8c,0xbd35a5af,0xbcf05631,0xbcf20358,0xbc823e69,0xbcaccfd7,0xbcaf67bf,0xbc958f5b,0xbc8215ca,0xbc7a8670,0xbc6fb458,0xbbed2f18,0xbca24be0,0xbcaf2a05,0xbcb7b5ee,0xbd0b836a,0xbcced450,0xbc234cff,0xbc286292,0xbc5e551a,0xbc506578,0xbc2ef7d1,0xbc2b6b0e,0xbc5848c4, +0xbc77ecac,0xbc49aeda,0xbc3d503a,0xbc59aee4,0xbc8357d2,0xbc9ca92f,0xbca0ea7b,0xbc8ccccf,0xbc86736d,0xbc766265,0xbc3b0dec,0xbc339c73,0x3a1b08c2,0xbb9d3389,0xbc2047ff,0xbcc08cae,0xbc19b876,0xbc4dcd99,0xbca4d027,0xbcbec08a,0xbcaa1354,0xbc98d024,0xbca94bfc,0xbc9631ba,0xbc59de77, +0xbc06316a,0xbbf8cbee,0xbc555c96,0xbc3deef7,0xbca108fa,0xbd0030d3,0xbc76f95e,0xbd59bca2,0xbcc3fd2b,0xbcc1a9b4,0xbcafea0d,0xbd07fb6d,0xbd1a6db6,0xbd1f0d07,0xbd171272,0xbd11d225,0xbd0bb248,0xbd0e190d,0xbd0e4d30,0xbd12df05,0xbd16e0c1,0xbd19ec0e,0xbd1274d6,0xbd0e7cff,0xbcfb58ca, +0xbd28a49f,0x3b8c8fe7,0x3d091e9a,0x3dc6cc9d,0xbbec76a7,0x3d098c9b,0x3dcae620,0x3dc37fef,0x3dbad203,0x3da8a2b3,0x3dcdaac5,0x3dc83f83,0x3dadaf59,0x3d3c5aef,0xbc128466,0x3db617df,0x3d6b8ca7,0x3e15b980,0x3cade802,0xbc026aed,0xbc42e84c,0xbc0a8953,0xbd7034f9,0xbd986e10,0xbda7ba77, +0xbdae3d3c,0xbda7896d,0xbd87f3fa,0xbd82fe2e,0xbd7dee00,0xbd773595,0xbd670a04,0xbd669460,0xbd4ca259,0xbd2d6a9d,0xbd1bf9e1,0xbd52e72d,0x3d0f970d,0x3c87492a,0x3cfb0f5a,0x3caa4db0,0xbbda0392,0x3d2fa1a1,0x3cb7d1d0,0x3d2f2d17,0x3c9518b6,0x3d0cf100,0xbcdcd9ac,0x3cbeef0d,0x3d060bc1, +0x3cf85530,0x3d4b6340,0x3d127a45,0x3dc0b48b,0xbcd85a20,0xbbcfa8e8,0xbc3a3dcb,0x3b49511d,0xbd905fc7,0xbdc71d54,0xbddac8e5,0xbddb24e6,0xbdd70611,0xbdbd47be,0xbdb27e1b,0xbdafdd14,0xbda7a2b4,0xbdb3102f,0xbda4748c,0xbd97430e,0xbd61e436,0xbd67c589,0xbd1fd6ba,0x3ca713c1,0x3c1b3517, +0xbbee8065,0x3cbb7fc7,0x3ca955be,0x3cbb575c,0x3cc19852,0xbc92e8f8,0x3cff9fd2,0x3c3cb2b5,0x3d27b074,0x3baa1ed7,0x3ca8f134,0x3d0eac25,0x3d7f7cf4,0x3c83e2a6,0x3e2c47a2,0x3df5da93,0xbca8ff72,0x3c40bd27,0x3c8fb869,0xbdcf1804,0xbe1dc47d,0xbe341496,0xbe4d1090,0xbe4511f6,0xbe14519d, +0xbe0d750a,0xbe024c7a,0xbe007e56,0xbde64ff3,0xbdd24596,0xbdada276,0xbd7e5a0a,0xbd535438,0xbd4d069c,0xbc599ea0,0xbc97466d,0x3ab79941,0xbc6bd46a,0x3c852904,0x3c9e6a93,0x3d287efa,0x3cfd1d29,0x3c901ad3,0x3c63e774,0x3d00b488,0xbc11c8cb,0x3d6e9212,0x3d6b87a8,0x3d696b7a,0x3d80ba71, +0x3d74a27b,0x3d2c9222,0xbdaa6ad6,0xbca9f078,0x3c808680,0xbdcaf67b,0xbe1757ea,0xbe356cc3,0xbe3da58f,0xbe3c1ae2,0xbe22d326,0xbe0b2ef7,0xbe01f5f1,0xbdf8578e,0xbe0b5594,0xbe04d691,0xbdcccc29,0xbd9b678c,0xbd73b8ab,0xbd80b19f,0x3c339fc5,0xbc4b8347,0xbae09728,0xbc1a6132,0xbb79c337, +0x3ccfd4ae,0x3c7f77e5,0x3cf49cc6,0x3c61e1fe,0x3d326269,0x3cd8ba27,0x3c1aa647,0x3d2b2c5e,0x3d44b42b,0x3d48cd55,0x3da53bcc,0x3d07dfe3,0xbe2c4f9f,0xbe4bb7f5,0xbe6b21df,0xbe10d3d9,0xbdaebb63,0xbd963700,0xbd9a96e5,0xbe345482,0xbe550d47,0xbe7a6fed,0xbec65a9e,0xbeec3f57,0xbee2045d, +0xbec7755f,0xbe9de355,0xbea44cac,0xbe6fab26,0xbe27b9dc,0xbdda0ca6,0xbccb0388,0xbd0e88c3,0xbb43e514,0xbc571c52,0x3c90ee23,0x3d2ddf27,0x3cfc574e,0x3cf386e6,0x3d054bd7,0x3d4104e1,0x3d04a48f,0x3c33d4c4,0xbcd67582,0xbb257165,0x3d0521ed,0x3d4e4e22,0xbdc8c502,0xbe01eb5a,0x3cfb41f3, +0x3deeb261,0x3e6ec390,0x3e23fdf9,0x3de340be,0x3c0fba87,0x3d8a55d3,0x3d5c481f,0x3b2dd4f3,0xbce52cf5,0xbd7797c7,0xbe2049f6,0xbe419a78,0xbe47fda8,0xbde3a8b2,0xbdf3af1d,0xbdfd66a0,0xbdcbf0f4,0xbd84fe76,0xbd64712c,0xbcf0b17e,0xbcadf40d,0xbb12d9b6,0x3cc2d6c3,0x3cd95dd8,0x3d4c53e2, +0x3d110e92,0x3d836139,0x3d8b3268,0x3d98ed6e,0x3d4a98b4,0x3abf97e5,0xbd2872bc,0xbd8c77c7,0xbe1afdd7,0x3cca88b5,0x3e2e367d,0x3de2f6c7,0x3dd1ee83,0x3e22cbea,0x3e37e5be,0x3d2b4e96,0x3dfda6bd,0x3e2428fe,0x3df8ef77,0x3e278cd4,0x3de81ad6,0x3d2789d7,0x3d5bbe44,0x3cbd366a,0x3d6fb2f6, +0xbcb5f10c,0xbc5f5b51,0xbd5558bc,0xbd90dafe,0xbd0b6094,0xbd28460f,0xbca00df5,0x3a728475,0x3d41f287,0x3d51a8ee,0x3d390590,0x3c6d72b5,0x3d68a6ba,0x3d265f34,0x3ca2fb3e,0xbc4a331d,0xbcc6c1b6,0xbd676d40,0xbd4f0b51,0x3d51cd65,0x3dda7861,0x3c947c1f,0xbd24346e,0xbe137a3d,0x3d471aa4, +0x3d6e8ef1,0xbc43de34,0xbcf165c3,0xbd0565f0,0xbd6edd00,0x3b2d81b1,0x3cda4274,0x3d6cc020,0x3d8ae567,0x3d934696,0x3d89b342,0x3d21fd87,0x3d18ec33,0x3b5775b3,0xbbf6cfab,0xbc8ed651,0xbb23dd4b,0xbbddc176,0x3c7fe1f9,0x3d658a20,0x3d178c35,0x3d0021ec,0xbc015941,0x3cd80803,0x3cac0074, +0x3cb84d64,0x3a0ca143,0xbc07ed1f,0xbc6587d5,0x3ca36879,0x3dad2a41,0xbb4733d1,0xbde1630e,0xbdb67f34,0xbd8bfe4f,0x3d3dd8aa,0x3d136f32,0xbcbb674c,0xbd84fcbc,0xbde2d45a,0xbdb94543,0xbdb42f56,0xbd74e35a,0xbcb3ec24,0xbce281fe,0xbc8ce7d3,0x3bbd2b75,0x3c45d6c1,0x3c3976df,0x3b97d26a, +0xbc0295ba,0x3c0a1ae8,0x3b1b1e9b,0x3c3c566b,0x3ccb9ed8,0x3d0dee4b,0x3cad7806,0x3c15c618,0xbc4820b5,0x3cad76c4,0x3d0bd5ad,0x3d4f81ef,0x3cd3fd37,0x3be9c807,0x3c970dce,0x3d07b8c8,0xbb2b71ec,0x3d061b40,0xbdecbe1a,0xbdb01a9d,0x3cb05856,0x3d7913c1,0x3d84f3a5,0xbc34cfab,0xbcb6702c, +0xbcc8c9ea,0x3c6147e5,0xbdad3578,0xbdb7ff09,0xbd8842c4,0xbd80a5ad,0xbd456916,0xbbaef1d9,0x3c41d4e5,0x3d099c9a,0x3d76d649,0x3ccdbdb4,0x3ce46511,0x3c1f4ff9,0x3c907c06,0x3cba60a3,0x3cd5f883,0x3ca0d5e7,0x3cb0fff6,0xbc8a4bc2,0x3c111495,0x3bb7d8ab,0x3bdb1b08,0x3c32b00d,0x3d1528c5, +0x3ccc7eed,0x3cc333d4,0x3d036052,0xbd8f4f9f,0xbd30fd43,0x3a8996ea,0x3d89576d,0x3d874caf,0x3cfa6313,0xbd10a750,0xbd16d0a9,0xbd65fe60,0xbd98a518,0xbda91081,0xbdc969d4,0xbdce7454,0xbd8c642d,0xbd03f073,0x3c12368e,0x3d4511a0,0x3d566fe9,0x3cf23989,0x3d2e4efa,0x3d2162f7,0x3c918909, +0x3cbcbbc8,0x3c7bb4f4,0x3c837c8c,0x3c204316,0x3bc4524f,0x3c5304fd,0x3c6fff4f,0x3cb54cf7,0x3c8b9bfc,0x3ceeeee4,0x3cab10b7,0x3afdda0e,0xbbf404b1,0x3cf534d3,0x3cb71b87,0xbb0112c2,0x3c93cea6,0x3d02352b,0x3c2debdf,0xbc034593,0xbce90ce0,0xbcceca65,0xbcc1b8ee,0xbd1529dd,0xbd2982e3, +0xbd2bab06,0xbd7266c7,0xbd0acc11,0xba6fffc5,0x3cf876bd,0x3d21850e,0x3d2d0f7c,0x3d2e6a61,0x3d0a9be1,0x3ce27d24,0x3c658ff4,0x3cbc02f9,0x3cdd28ee,0x3ccffce6,0x3cb1febc,0x3cb1bbb9,0x3cc77702,0x3cb5f74a,0x3cab397c,0x3cba68d2,0x3ca5f06c,0x3c6db2a2,0x3c862170,0x3c72ebaf,0x3cebce80, +0x3d277b8b,0x3ce7fe92,0x3c904028,0x3b037b07,0xbc575106,0xbcb497a4,0xbd036a9c,0xbcfa25cb,0xbcfd7278,0xbd053d27,0xbc1ea919,0x3b1b068b,0x3c24c940,0x3cbdbdcc,0x3cf49e07,0x3d136bb7,0x3d0881d9,0x3d23713c,0x3d2d8bb1,0x3d0349cf,0x3cecf720,0x3cc4df55,0x3cd4417c,0x3ccd1600,0x3cb55240, +0x3cd2829b,0x3d093227,0x3c9848e0,0x3cfd3c4f,0x3cae0759,0x3cd41f61,0x3c8db02f,0x3cd63d05,0x3c548f27,0x3cebfc7a,0xbc45bc9c,0x3cfd4fb0,0x3cb83a3b,0x3c9945bc,0x3c96a129,0x3c745532,0x3c1ed36b,0x39b60c8b,0x3b1d555e,0x3b300cea,0x3ae04169,0xbbefc9c4,0xbc809461,0xbca7e962,0xbc979461, +0xbc402b0d,0xbbb9b8eb,0x3b54cf80,0x3c15453a,0x3c79bd52,0x3b6b265c,0x3c14f9b1,0x3bd8409b,0x3b98a91c,0x3a45469f,0x396f82e4,0x3adaaaeb,0x3b790329,0x3c035a50,0x3c476783,0x3cc193bb,0x3c31d29c,0x3cc98d01,0x3c5df41f,0x39f45d81,0x3cef8ef1,0x3c042ce1,0x3ce35140,0x3c994539,0x3c832938, +0x3c40f895,0x3c0ec7aa,0x3be6874b,0x3ba6c1b6,0x3ba6864f,0x3b84e617,0x3b9b2997,0x3bee2940,0x3c2e418c,0x3c3e187c,0x3c6e2573,0x3c760374,0x3c79377a,0x3c701040,0x3c6f5084,0x3c98543b,0x3bb8b5b1,0xbb839e27,0xbc4b4997,0x3c08bcc0,0xbaa88c1f,0xbc504c50,0xbc4ca581,0xbc44582a,0xbc4b141a, +0xbc823f67,0xbc859787,0xbc4cd513,0x3a3e80d2,0x3c2ec7b6,0xbc811bbf,0xbbd8f60b,0x3cb2a218,0xbd813644,0xbd73021d,0xbd356ccd,0xbd385657,0xbd3c590c,0xbd3dac85,0xbd1ed3d5,0xbd199472,0xbd22697e,0xbd110aeb,0xbd1461c2,0xbd1a0c13,0xbd1441cc,0xbd121c63,0xbd13fc38,0xbd0d57a7,0xbd0d166f, +0xbd04601c,0xbd0e388d,0xbd1140cd,0xbd019350,0xbd497b3c,0xbd5eca60,0xbd4b6ba2,0xbd2f1228,0xbd4ba928,0xbd3fac2c,0xbd40b73e,0xbd401827,0xbd3e974c,0xbd503def,0xbd4c62e0,0xbd57ef51,0xbd57a586,0xbd4473aa,0xbd3df555,0xbd5a877a,0xbd48b62d,0xbda6cf76,0xbdbc29c2,0xbdbeb990,0xbdc30a5f, +0xbd90d4be,0xbd7b6890,0xbd86dfdc,0xbd215daa,0xbd1aea86,0xbd2726b9,0xbd227481,0xbd348df7,0xbd41e794,0xbd2dfec9,0xbd3445af,0xbd169d9f,0xbd2e2761,0xbd2c77a3,0xbd0d26d4,0xbd6dde14,0xbd4dff4a,0xbd418521,0xbd3ee974,0xbd0d667e,0xbd0cc477,0xbd1d5d3b,0xbd2d81ca,0xbd1f469f,0xbd3306c6, +0xbceeb1b7,0xbd423de5,0xbd3ef81f,0xbd7230b8,0xbd7a5945,0xbd6d5f56,0xbd9a8428,0xbde3a14e,0xbdee0edb,0xbdff7c65,0xbe009f66,0xbda03805,0xbd7a6596,0xbd9de40a,0xbd27bdf4,0xbd19cbd6,0xbd4bbc9f,0xbd3fb887,0xbd34feb6,0xbd339130,0xbd1c9978,0xbd093d2e,0xbcc15f34,0xbd1c5ca0,0xbd0e650e, +0xbd19f1bd,0xbd809e8d,0xbd3e0c54,0xbd2378d3,0xbcfa5fce,0xbc9fd56a,0xbc390ad6,0xbc5fd0b2,0xbc49037d,0xbcca8eee,0xbc4be5fb,0xbcd3d782,0xbd013d39,0xbd3d05e2,0xbd4d5268,0xbd6b4df4,0xbda69034,0xbdbe0930,0xbe0cce6a,0xbe3752d3,0xbe35c4f6,0xbe446e87,0xbdf4c488,0xbdc096e3,0xbde8ba85, +0xbcfee9a3,0xbcb0fce5,0xbd1f6db2,0xbd347437,0xbd49dfe5,0xbd4a65ba,0xbd240448,0xbd08fae7,0xbc84dc54,0xbd0f99b6,0xbd0c1e64,0xbcf6c495,0xbd3a00ed,0xbd01251b,0xbcf66a18,0xbc1fd89f,0xbb61e544,0x3c8df2b5,0x3b92847f,0x3c013201,0x38a82d63,0x3c3b4b53,0xbb2c93fa,0xbce18a13,0xbcbe24e2, +0xbd37bcef,0xbdac2b13,0xbd96b1b6,0xbdc9a039,0xbe1daf5c,0xbe2c7a96,0xbe460c58,0xbe4aac12,0xbddccb99,0xbdaeba54,0xbde5cf6e,0xbd37b6ef,0xbd05acf4,0xbd986561,0xbd8bd3bb,0xbd70354f,0xbd5dc8d1,0xbd0072f9,0xbc903297,0xba83bc23,0xbcf06fe6,0xbd063ce9,0xbd0cb152,0xbd85c38a,0xbd45d3ca, +0xbd0fa9eb,0xbc72448a,0x3b2b1940,0x3ca7e33f,0x3cbf03c1,0x3cde9d16,0x3c9921db,0x3d08eac2,0x3cb5330b,0xbca1a7da,0xbd1fb26a,0xbd8649e4,0xbda990f5,0xbde6cd96,0xbce6c5a8,0x3e14cf46,0x3ea823d3,0x3e8d2d66,0x3de6bd99,0x3dad20cc,0x3c4e84b5,0xbd8dde6b,0xbdb2d9e2,0xbe02a6f1,0xbdc502f8, +0xbd4c7700,0xbd2ea977,0xbccbf370,0xbcfd7dd0,0xbca8f52c,0xbcd57171,0xbca00259,0xbc73d3fa,0xbd69dc8f,0xbd8dad0b,0xbcb9b889,0xbcde0a7b,0xbb6165ec,0xba959e1d,0x3d2692c5,0x3c48976c,0x3c4d9f39,0x3d0b28e1,0x3c138d9d,0x3b816357,0x3ce622b5,0x3d8e5f56,0x3d599d8a,0x3c9e9f27,0x3d26ad8b, +0x3d8a0686,0x3e4205a8,0x3df86412,0x3d3ee0e7,0x3caba8e0,0x3c468f4e,0x3d183da5,0x3d58a0c1,0xbce4a54c,0xbcf29e8d,0x3d92fb16,0x3d81c40b,0x3da21966,0x3dc630f9,0x3de44363,0x3db6f9ec,0x3dadd164,0x3ce79197,0x3a58385c,0xbd227672,0xbdb93e7d,0xbd8fd1de,0xbd183acd,0xbc8235f4,0x3c2f377a, +0x3d3dbcf2,0x3ccc0002,0x3d071274,0x3cd184d4,0x3d643cd2,0x3d6e6219,0x3c95d9ad,0xbbc354af,0x3c818790,0x3d2e4fe9,0x3cf3cbf9,0x3dfc8b17,0x3da6e3fb,0xbc0fa75f,0xbca0c735,0xbd62a723,0xbd5cd6d4,0xbd920296,0xbcceb8fc,0xbdefca63,0xbe0a31e1,0xbd2d67cd,0xbd5e5ab8,0xbc8317a4,0x3d119538, +0x3ce7f335,0x3d168d94,0xbbef78ce,0x3d0ba728,0x3d1abffb,0x3c0c65bc,0x3c1f8845,0xbc954d90,0xbc2b2d0d,0xb81c415c,0x3bb22c13,0x3d7b7f47,0x3c82c549,0x3bbe7b0c,0x3c0b492f,0x3d3b1bdf,0x3d2da178,0x3d4c60d1,0x3d3699c7,0x3d21a54a,0x3dac498e,0x3d250697,0x3cb21911,0x3be9186e,0x3d2671fc, +0x3ced3dbc,0x3bd874ac,0x3c666430,0x3ce1b7a0,0x3daebfd5,0x3c956df6,0xbc14c352,0x3b87e066,0xbd032f6c,0xbd205a7d,0x3ab3af71,0xbc8bd36d,0xbc652d72,0xbca0a06a,0x3cbddfbd,0x3d18fb6f,0x3cebeb42,0x3d103b2e,0x3d15e58d,0x3d1d5292,0x3c659b45,0x3cd80ce3,0x3da6c57a,0x3c1f6c77,0xb9676b52, +0xbb875f55,0x3cd1575a,0x3ceceead,0x3d6dfe0e,0x3c481ffe,0x3cc0bba8,0x3d0872b9,0x3d5b4b07,0xbc905728,0x3d89efc0,0x3dd3d91b,0x3d755800,0x3c1baac9,0x3d026d6d,0x3d816c4a,0x3db8ba0a,0x3cf9d8c7,0x3b3e1a17,0xbbe877f4,0xbd6184c4,0xbd470226,0xbcafb8c0,0xba889b78,0x3b493f19,0xbacdb263, +0xbc1d5a5f,0x3b8d5ea2,0x3d01acaf,0x3d1d6d7a,0x3d158f60,0x3d65b487,0x3d206182,0x3d1351aa,0x3d90559c,0x3c790728,0x3baa6355,0xbb3248af,0x3b264bd0,0x3c6f69b5,0x3d35f32b,0x3cbe21cc,0x3cbefc8a,0x3c0ae6d4,0x3c1739b5,0x3ca0db64,0x3cc63212,0x3cbe56c6,0xbcc6f532,0xbd2ab0aa,0x3c9e8228, +0x3cd3ce4c,0x3d1f0ee6,0xbcef4e80,0xbd930038,0xbdbab381,0xbd3d4c2e,0xbc39f9be,0xbd528016,0xbc84c1dd,0x3ac7345a,0x3cb3f942,0x3d2eb02c,0x3d24838f,0x3cde22b0,0x3ce02f51,0x3cc40567,0x3cd07bf3,0x3cac8327,0x3ccd3890,0x3d1a2404,0x3d44154a,0x3d2f29b1,0x3cc79fe1,0x3cb4cbf8,0x3ca32ecb, +0x3cd3a7f9,0x3cdce99d,0x3b5e491e,0x3c2fc117,0x3c2f7e3a,0xbd371d08,0xbbd62c43,0xbce06641,0xbd17639e,0xbc940f4b,0xbc78eefe,0x3c2c01ed,0x3d15266c,0xbb758486,0xbd02c5a2,0xbd688ca4,0xbd49bb32,0xbcc0ac21,0xba3c61e9,0x3d1867d1,0x3d12d65e,0x3cc0bbc4,0x39b7ac67,0xbba0e80e,0x3ca2a7d8, +0x3d0cc8d7,0x3ca0a848,0x3d1fbf0e,0x3ce5151b,0x3cdba171,0x3c893b33,0x3c822bfa,0x3c804c58,0x3cac05ab,0x3cb0c69d,0x3cab52f8,0x3c97c81d,0x3cd8edb8,0x3cfba55e,0x3c5ea5d8,0x3bc2f7e7,0xbcef104d,0xbd3015da,0xbcd64ddf,0xbc9c576b,0xbb72ff66,0x39b17359,0x3c270211,0x3cd132a0,0x3c6da468, +0x3af85b89,0xbade3b55,0x3b34f10f,0x3bc93c59,0x3c552c12,0x3cdfb8dd,0x3ce8f07b,0x3d13f475,0x3cc5a3cb,0x3c898e20,0x3c6baaa9,0x3ccf9abb,0x3ca1ac0b,0x3c878385,0x3c897415,0x3c80915e,0x3c69c123,0x3c8a5e82,0x3c9a5ac5,0x3d0c927a,0x3cb77fea,0x3c86eb4d,0x3ac1e581,0x3bc8b9fb,0x3adc91ae, +0xbc4891ed,0xbc8ebbc6,0x3c282a9e,0xbc223d65,0x39bb068d,0x3c4aca93,0x3c988c74,0x3ce9316a,0x3d0d99c7,0x3d263836,0x3d2d2f57,0x3d3e0b84,0x3d66e822,0x3ce7f467,0x3c9485fe,0x3be4c829,0x3c0b120a,0x3c4e2661,0x3cb7734e,0x3cbcc158,0x3c7e410b,0x3c8a404b,0x3cb978c6,0x3c69febd,0x3c41e81f, +0x3c4a4dae,0x3c9736eb,0x3ce35695,0x3cdf3796,0x3d02d994,0x3d118ac0,0x3ca45baf,0x3c8c34c9,0x3bf116d9,0x3a59c5c1,0xbb3e7d58,0x39a6cd03,0xbb7324e0,0x3d629eed,0x3cc19c00,0x3ced0e35,0x3cf011b1,0x3cf0a719,0x3d055a36,0x3d019ca6,0x3d1344e1,0x3d0e3f4e,0x3d038ccd,0x3cfb4b96,0x3d2ebda5, +0x3d5f2721,0x3d7ab434,0x3d70efa1,0x3d4b7c3e,0x3d343430,0x3d1b1d71,0x3d088a9d,0x3d066df5,0x3d0bf8ef,0x3d184361,0x3d307de3,0x3d46223d,0x3d36900d,0x3d3416c3,0x3d2b7bd8,0x3d21a984,0x3d0fddf3,0x3d25a488,0x3d05ca99,0x3d3a4bb9,0x3d32e10e,0x3d3f6427,0x3d601e2c,0x3d132621,0x3cc0e416, +0x3c208e00,0x3c82b247,0x3c806e5b,0x3c866848,0x3c98f40a,0x3ca7295e,0x3cb68c3b,0x3cc58031,0x3ce1c8e9,0x3ced09e0,0x3cd96e3d,0x3cb3bd09,0x3caac05b,0x3c92c8de,0x3c999bda,0x3c9ce081,0x3c98f92e,0x3c8ecace,0x3c72093b,0x3cc9e21f,0x3cefda92,0x3cbe0c8f,0x3cc3a45c,0x3cfa6fd9,0x3ce07e6b, +0x3ce2d50d,0x3cec86cb,0x3cf6a008,0x3cff15ec,0x3d00cb8a,0x3cecda49,0x3cca07fc,0x3c90f412,0x3ceb54f1,0x3d008ebb,0x3cd223ac,0x3b52d251,0x3c643fad,0x3cac566b,0x3bac0cf7,0x3ba09e1c,0x3bb65a45,0x3baf468a,0x3b8672ee,0x3ae18a30,0x3b406f80,0x3b91ce13,0x3ba6a349,0x3b20bdc8,0x3abd7936, +0x3a4b193b,0x3b727ca5,0x3bad6619,0x3beb1d9f,0x3bcb184f,0x3b9dbf64,0x3c0852ae,0xbac27b68,0xbc03a44e,0xbd00897a,0x3b8255ab,0xbba8f36a,0xbcd32d7f,0xbcd7763d,0xbcce1671,0xbcb541fb,0xbccf4aa6,0xbcd52d94,0xbcc70311,0xbc4dd608,0x3bc3f932,0xbd066d8a,0xbca18ce4,0xbda61779,0xbbff9842, +0x3bef5c86,0x3bd27e84,0x3b9d6d8e,0xba107e25,0xbb360e97,0xbc1b73b8,0xbc0f4a84,0xbc04b1a1,0xbb229799,0xbb87763a,0xbb252c3b,0xbb3a89e0,0x3bb49564,0x3c2387bd,0x3c6cdb7b,0x3c1092be,0x3be92666,0x3c6b5a01,0xbc4b16e8,0xbc08464f,0xbc198ca5,0xbaa475ad,0x3c1a22ab,0x39aee17d,0x382bffe0, +0xbbdf9298,0x38545526,0xbb802b25,0x3c07d0a3,0xbc155e2e,0xbc744998,0xbc30f0b8,0xbccaf492,0xbca53ddc,0xbd1e46a7,0x3d39aa47,0x3cc10963,0x3cd8fa39,0x3ca1408d,0x3b9d5ce8,0xbb330d50,0xbc92ff81,0xbbcaa973,0xbac7a8dd,0x3c1ca9eb,0xbb203838,0xbbb20f0e,0xbbf5920c,0x3bcc6206,0x3c53f2b9, +0x3cc024a8,0x3c3ddb6f,0x3c5b7ec6,0x3c200c5c,0xbc62df00,0xbbab1a6f,0x3b73b17d,0x3ae16321,0x3bde06d3,0x3cbcbdf0,0x3bf2ad77,0x3c90f9b7,0x3c19ee9d,0x3c44b1ee,0x3b0be523,0xbb17e089,0x3b320681,0xbbeb2aa5,0xbcce929c,0x3c01cd6c,0xbd98e7ea,0xbc8dffd3,0x3d883ddd,0x3cd6f7fb,0x3d00431d, +0xbc589c2b,0xbcb9b7ed,0xbd180de4,0xbd017052,0xbccac7ad,0xba86ca7e,0xbb496734,0xba903108,0xbbe00cc4,0x3c66b365,0x3cc92fb5,0x3d0cb629,0x3c9193fe,0x3c5eab14,0x3c7a8179,0xbbb893af,0x3a50bb47,0x3a9dd772,0x3c61c09c,0x3c67cb68,0x3d231165,0x3c1dba1a,0x3c339ac2,0x3c4da115,0x3c9aed70, +0x3bea1f34,0x3b53fbcc,0xbcfd7b2f,0xbcff339c,0xbc5d1b4b,0xbcc7b405,0x3ac2715f,0x3d690f11,0x3dd91ca3,0x3db06850,0x3d80fb4d,0x3ca3ac50,0xba71688d,0xbd1e6527,0xbc154e9c,0xb9d8bab1,0x3ce1d721,0x3b9816f3,0xbc14cb33,0xbc2f005b,0x3c021073,0x3cb12df6,0x3d04837a,0x3c68f7c4,0x3c5d01cd, +0x3c7e2315,0xbd1cf43b,0xbb89999e,0xbc203a42,0x3bcabc62,0x3c5cd61b,0x3d16b50f,0x3cd617e9,0x3cbdce6f,0x3cc78fd0,0x3d05df1a,0x3c9a2b55,0xbba643d2,0xbb3d8407,0x3c57130b,0x3c0c3d3e,0x3bb3e8e9,0x3e6683c2,0x3e1c0cf1,0xbc94c634,0xbd4b5289,0xbe13c01a,0xbe4b54a9,0xbe42c914,0xbdef4dd1, +0xbd811fa5,0x3d6a8e2e,0x3dfc8821,0x3e208723,0x3e4218fa,0x3e2d3444,0x3e1171c8,0x3dcb6c54,0x3e0e0d01,0x3da5af99,0x3d4555e6,0x3d28a241,0x3c08b71a,0x3c8c8fd4,0xbbf0a02c,0x3c8ec62f,0x3c55507c,0x3d16e638,0x3ba2ddee,0x3c20c1b1,0x3d080280,0x3ce50896,0x3d654996,0x3db29377,0x3d2413a5, +0x3d526949,0x3da261e7,0x3e218f7d,0x3d9c62d7,0xbb7127dc,0xbc125f9c,0x3c566817,0xbd85529c,0x3dc909a0,0x3dce1ae1,0x3d290761,0x3d59b4c8,0xbbec8df8,0xbd674c74,0xbd819666,0xbd7a45ce,0xbd8a6084,0xbd0bf89e,0xbcdcb342,0xbda0a803,0xbc9efd9d,0x3cb95e18,0x3ca0f64f,0x3ccb1171,0x3d231ff6, +0x3c9fe318,0x3ce4df58,0x3ccaaddb,0x3d2d8bf9,0x3d1612b0,0x3d0d7d6c,0x3c4f1726,0x3d45dd1c,0x3d4f9b71,0x3cf6038a,0x3d91de8c,0x3da60204,0x3da1c3bc,0x3d96761b,0x3d40e57c,0x3cd5e895,0xbbaf2bfa,0x3d1e2eca,0x3cbd6aeb,0x3d97be9b,0x3dd8b4cb,0x3e128b35,0x3d899304,0x3cba18df,0xbd2e2048, +0xbd9ef4de,0xbde80614,0xbe14178a,0xbdf4498b,0xbdc36325,0xbd8bf924,0xbce7147a,0xbc537302,0x3c704705,0x3ce050b2,0x3c9f007f,0x3cd38966,0x3c799ede,0x3cb41f35,0x3dbc19fc,0x3bab8afa,0xbab0d470,0x3c0c38ba,0x3d1faeb7,0x3d42fa16,0x3dbc80e1,0x3d379c7e,0x3d33e591,0x3d660211,0x3d93fa88, +0x3d2431ae,0x3c9998a4,0xbd520be3,0xbd0b8d65,0xbda4a2ef,0xbc6ebcac,0x3c138b8c,0x3d5fad1b,0x3ce4cedc,0x3b896c5d,0xbd4d7d9f,0xbd1342f5,0xbd325e70,0xbdb959b6,0xbd74cd0a,0xbd491349,0xbcfa16c5,0xbd1d0a2d,0xbd135484,0xbb8205df,0x3b98b2d3,0x3c6a0017,0x3c2f0457,0x3ca1114a,0x3cf0473f, +0x3dd336f7,0x3bd62fde,0xbc0e44c5,0x3c93a0f2,0x3c502760,0x3d016256,0x3db52e5b,0x3d0670a4,0x3b849673,0x3d1f399f,0x3b13617c,0x3d5eb59f,0xbcf48baf,0xbccf1622,0xbc966e47,0xbddf5328,0xbd505216,0xbd8d8928,0xbdcb365b,0xbdb63089,0xbdcf8f37,0xbe07093b,0xbd699dd9,0xbc8ebb3b,0x3a390090, +0x3c938a3d,0x3ca25f98,0x3a468f32,0x3bd9e785,0x3a6799f4,0x3c41f3d1,0x3c9fad80,0x3c2be702,0x3b82d258,0x3c6c4c90,0x3cadac54,0x3d650a9e,0x3cdc8730,0x3c8d81d7,0x3d00e650,0x3b5177d1,0x3c82ce7f,0x3d35a7fe,0x3d08d6d5,0x3ccf342a,0x3cff264a,0x3cb7df0d,0x3c0fef92,0xbb858831,0xbb3a23d9, +0xbbbcad91,0xbda0abab,0xbd13ad4d,0xbca53eee,0xbd117c9a,0xbcbd6a2e,0xbceef254,0xbd16b737,0xbd25be15,0xbce224d3,0x3ce5158e,0x3c243e00,0x3bfa6e03,0xbc892d5b,0xbcf76800,0xbc8006ac,0xbc39f9f8,0x3c76e96a,0x3ca9375c,0x3c9a8c08,0x3cc067b8,0x3c637a9e,0x3cbed08d,0x3c41ee48,0x3c1cb0dd, +0x3cc00ba6,0x3c94d597,0x3c977077,0x3cd5c6ab,0x3b97b56a,0x3cc261a4,0x3c5d177d,0x3c4e9287,0x3cfb3fd1,0x3c48f8c9,0xbcc50742,0xbd40aaa9,0xbd6996a3,0xbcfa7178,0xbcf54dca,0xbd4450a1,0xbba30144,0x3c7a1f88,0x3cc938b2,0x3ca147a8,0x3c8a732a,0x3d0ed84d,0x3ce899b8,0x3cb7850b,0xbba9d86e, +0xbc5641f9,0xbc75b1ca,0x3b126742,0x38a45fc1,0x3ae390de,0xbaf4dcc5,0x3c1026f6,0x3c8013ec,0x3cb15f95,0x3cb89532,0x3ce9dcbb,0x3c9f33ee,0x3d032ed7,0x3d0a2526,0x3d19008a,0x3d0103fd,0x3cd99a47,0x3cfddc7f,0x3d01be6f,0x3aef49f6,0x3ab9d706,0xbbda4343,0xbc69624b,0xbb8ca8c6,0xbbd39871, +0xbb738c3a,0xbc6ee880,0x3be7a324,0x3cabf61b,0x3cff5c43,0x3cc48e70,0x3cd72f8e,0x3d02962a,0x3cd5f254,0x3c8f9129,0xba854d86,0xbb3e0f3f,0xbbe56315,0xbbe3c76d,0x3c1411e7,0x3c89b8b5,0x3cae1e65,0x3ca930c9,0x3cae5a28,0x3cd31070,0x3ccfed5a,0x3cad59f2,0x3c33530d,0x3c92cbdf,0x3c850fc9, +0x3c69abee,0x3c5942e7,0x3c552e70,0x3c4631b3,0x3c47a804,0xbbdc7727,0xbb9a49f1,0x3bb01467,0x3c06da0c,0x3c443fb8,0x3a8aca35,0xbc022e31,0xbc955494,0xbc8b3c64,0xbc7c95b5,0xbc408126,0x3ba7ee83,0x3c4a5096,0x3c88c743,0x3bffad7d,0x3bcfa477,0x3b0ddca5,0x3aec8a12,0x39a4379f,0xbb379a7d, +0x3bb35e68,0x3c4e69a3,0x3cd16604,0x3cd41178,0x3cddce8a,0x3cdafb91,0x3cb6e4cd,0x3c37fd8d,0x3c94fb34,0x3c2d2bd5,0x3c4abc9c,0x3c4177df,0x3c3aee4f,0x3b92b44b,0x3bb9a472,0x3b113b8f,0x3bebe028,0x3c449da8,0x3ac38736,0xbc055fa1,0xbc81dcb0,0xbc73bbda,0xbc7f00a4,0xbc8c547f,0xbc58620f, +0xbc2162dc,0xbc1da3c0,0xbc6ef055,0xbc97c296,0xbc75621f,0xbc506f79,0xbc31c4d0,0xbc2fef0f,0xbc316c1f,0xbc391b84,0xbbe5aebc,0x3c7ee26e,0x3c2d9a2f,0x3c0ce451,0x3bd3d4b4,0x3c6964f0,0x3c4b08e2,0x3c9d5001,0x3c9d93ca,0x3caeb4a8,0x3cbb35d9,0x3ce00678,0x3cbaa823,0x3ca9bc19,0x3ca71bcb, +0x3c5765a1,0x3c69aa06,0xbbb0bef2,0x3b73d427,0x3b76b114,0x3baf7a03,0x3b9a23cb,0x3b5827b2,0x399df4a3,0xbb1f6b20,0xbb5cda42,0xbb968c46,0xbb7c4586,0xba82b572,0x3b044f5e,0x3b135fae,0x3a8fe071,0x3a2965f2,0x3ad1b796,0x3b071788,0x3b3de688,0xbac27920,0xbb879d82,0xba97448e,0x3c51a4b2, +0x3988696e,0x37146a92,0x3c2d78fc,0x3c33ee59,0x3bdfa95a,0x3bb33e90,0x3b4606f7,0x38e637f2,0x3815e43c,0xbb8e9d2a,0xbb0c965b,0xb9d457df,0xbbf40ddb,0x3b784a69,0x3a304fb6,0xbc10a24a,0xbc904648,0xbbb36fd6,0xbb95e6e7,0xbba9ebc0,0xbb18ee60,0xba5bdefe,0xba9d2b84,0xba1bd71d,0xba7b9c5d, +0xb9b823f1,0xb99ef81c,0xba610358,0xbb255b5c,0xbac420f1,0xba7eae42,0xb9e7c40c,0x38ec1641,0x3a4d9ca3,0xba34637c,0x3b9e4f19,0x3bde6384,0x3c215f78,0x3b7847dc,0x3bf01c1e,0x3c43fe5b,0x3c203b37,0x3c15f985,0x3c110c39,0x3c1a6728,0x3c10800c,0x3c10eb15,0x3c089323,0x3b269989,0x3c70338f, +0x3c3c358d,0x3d2b2088,0x3ac7d87c,0xbcbe5eb8,0xbc9f2f4f,0xbc89d7ab,0xbb81372f,0x39c311b9,0xbac88e3a,0x3c0ce4bc,0x3c0a6d27,0x3b445de4,0x3a8ab015,0xbb2765b7,0xbbebf099,0xbb78dc7c,0xbb2458c4,0xbaf24ff9,0x3ac72784,0x3aff311f,0xbb09d0c8,0x3c23054e,0x3bf0b4ea,0x3bd68e3a,0x3c1acf30, +0x3c14869d,0x3c839503,0x3c101c00,0x3c03af8e,0x3bae8774,0x3bc7714f,0x3b25e67b,0x3bfbf147,0x3c45af6c,0x3c00f8b3,0x3c426770,0x3b0c1cf3,0x3c98d23a,0xbd6445f7,0xbd2fcefb,0xbd3f87c5,0xbd3002fe,0xbc9c6011,0xbb12fd2a,0xbba18648,0x3b5faa93,0x3b57f15a,0xb8ad0d12,0xbb19ba9e,0xbbe8c21b, +0xbc855a12,0xbc1e5020,0xbbada8bb,0xbafc2a78,0x3b9893b1,0x3b6589df,0x3bd93610,0x3ca238a4,0x3c5a31a2,0x3bdee8bc,0x3c848f03,0x3c8c53d1,0x3cb79c9b,0x3c73577b,0x3bfb632c,0x3c33330a,0x3bbad60e,0x3c2484e1,0x3c60d43f,0x3c3a358c,0x3c7fb8df,0x3d057c28,0x3badd83e,0x3d718ca5,0xbc4f0296, +0xbdf3ac78,0xbd992462,0xbda1a232,0xbca5e214,0xbad2d44b,0xbc37aa97,0x3ce12aba,0x3cdbdb1b,0x3ba52b18,0xb6c9708e,0xbc43486d,0xbcf0116a,0xbc67db02,0xbc19f474,0xbbc97d89,0x3bc33426,0x3bc401ad,0x3bb920e2,0x3c8e5a46,0x3c1f42d7,0x3c1f99e5,0x3c7a5365,0x3cd11078,0x3d137496,0x3cad4db9, +0x3c4fa201,0x3c140211,0x3c2b0ef7,0x3c4b8bbd,0x3c5784cb,0x3cecf5d0,0x3ce845c5,0x3c9cf381,0x3b2db7ac,0xbb37b96a,0xbd89c9d4,0xbe2c53e8,0xbe0be035,0xbdfa7e43,0xbd619a8a,0xbc891aaf,0xbc8ca193,0xbb773f66,0x3c0a4f9b,0xba34f8d3,0xbacb454d,0xbc5b2b79,0xbd0c9ae7,0xbc9ec30b,0xbc2cfbae, +0x39df21da,0x3c44bf9e,0x3c1f332d,0x3c81e6aa,0x3cfdb27a,0x3ca5914e,0x3c630d5f,0x3c882256,0x3caaf60c,0x3d2ca824,0x3cbe56b1,0x3c844245,0x3c41dda9,0x3c9f6d44,0x3c8a0636,0x3c5805c4,0x3ce785ae,0x3cd18bce,0x3d03938c,0x3d27609a,0xbd980f14,0xbdb25d0a,0xbd70600a,0xbce81fb1,0x3dd5cdb2, +0x3d879a99,0x3da4e256,0x3e18b5c6,0x3da5dc74,0x3c88c47d,0xbc69aed5,0xbd4c9466,0xbd7bfff0,0xbdb21583,0xbd8fb523,0xbd7807a4,0xbd8bc2a6,0xbcfb37d2,0xba184c20,0x3d2f6e16,0x3d06e58a,0x3c9be71a,0x3c2f17ad,0x3caa7334,0x3cc59c10,0x3d1ef98f,0x3c4ed4d6,0x3c90b08d,0x3d3a5a95,0x3d4808c8, +0x3d1e3d78,0x3bacef25,0xbcb87669,0xbcbf6114,0x3c0631bd,0xbd7fec6a,0x3c9fc8d6,0x3c50ccfe,0x3da96d66,0x3dc853be,0x3dd3988a,0x3d959daf,0x3d9a7951,0x3d626715,0xbc64810c,0xbd3f1c1a,0xbdb63862,0xbddceeee,0xbddcee46,0xbdb5bcb7,0xbd8b5ef2,0xbd32f7f2,0x3c95f8b4,0x3a8cb464,0x3bba765d, +0x3ca36481,0x3d0dbe94,0x3cfe53f2,0x3c63a94f,0x3ca22a8e,0x3cb54afe,0x3d298907,0x3ce1ee90,0x3cd371c0,0x3c667de4,0x3d57a761,0x3d3f6eb5,0x3d0fc693,0x3d789aec,0x3d4f4475,0x3c21f234,0x3cc45ce2,0xbc9f87bf,0x3c00be0f,0x3d8adc7f,0x3cd4ac7d,0xbd9689d6,0xbd2163fa,0xbc847945,0x3c645f36, +0x3d19e8bd,0x3d173b08,0x3c40cb40,0x3cf9cc91,0x3cc94114,0x3ad884d4,0xbcf2b8c1,0xbd2045db,0xbd424507,0xbd177c85,0xbccdd34c,0xbc54800a,0xbb8e760e,0x3c3e22b3,0x3c888390,0x3cbd1744,0x3cf1becc,0x3db05b59,0x3c8d8604,0x3b8ae1ba,0x3a9ca038,0x3cc12553,0x3cdcf67b,0x3d8f86be,0x3c1bfc22, +0xb8018662,0xbc806c41,0xbb0f9216,0xbcf9e8ef,0xbc59cbc3,0x3d0cf604,0xbc5fcf60,0xbd883309,0xbddc8364,0xbe074b75,0xbd98a3cf,0xbd89822d,0xbc91ef0b,0x3d1bcf0a,0x3d7ddd9d,0x3da648f8,0x3db651df,0x3d7ff146,0x3d004619,0xbc8ada0a,0x3c837907,0x3cb61253,0xbbdc6566,0xbc1ac83a,0xbc338c12, +0xb9642de2,0x3b550e9b,0x3c8225b7,0x3db146df,0x3c436396,0xbbaa137e,0x3c67e753,0x3b0901ed,0x3c915300,0x3d939a3b,0xbb50675c,0xbc542cc6,0xbcf7f7d5,0xbc57801d,0xbcaef4c1,0x3ccfb228,0x3c162500,0xbc452f33,0xbc9378f3,0xbd574f1f,0xbd4485e7,0xbce4ebd2,0xbd31eb65,0xbcc40d8c,0x3cce47a1, +0x3d57395f,0x3d9094b6,0x3daa5d08,0x3d9d6abc,0x3d89a7f1,0x3d546c75,0x3d81e65e,0x3d815603,0x3ccb0ae2,0x3c334db3,0x3c78fe4d,0x3bd90cf7,0x3c454a13,0x3c9fedf8,0x3d565f30,0x3c9a7bce,0x3bc16068,0x3d19333f,0x3c214061,0x3c2fb47a,0x3cd1bfba,0x3c25e779,0x3c63ad43,0xbad81829,0x3b6a1b52, +0x3a3d49e8,0xbc17b8ea,0xbb9873de,0xbc9f6a6b,0xbd5fbe17,0xbd90505e,0xbd6b5b85,0x3c23532e,0x3c80d833,0x3cbda895,0xbb03724a,0x3b0d19fd,0xbbc83b5d,0xbb967363,0x3c8896fd,0x3d02dfad,0x3cf13db1,0x3d0f427f,0x3c5ab7b3,0x3c41b646,0xbc122a6b,0xbb7cb006,0x3c335534,0x3c263e88,0x3c8d884c, +0x3c90851b,0x3ca8a29b,0x3c7c72f1,0xbaf5a028,0x3c01d570,0x3c3e4ea8,0x3cdfc41f,0x3c6bc8b2,0x3a4337b3,0x3c2a5daa,0x3b9d855f,0x3c30f1e6,0x3cd1064a,0x3c19e385,0xbb0c17b8,0xbd176682,0x3b72454f,0x3c3e7fde,0x3bd1da04,0xbc853a09,0xbc821c19,0x3c3846f2,0x3cafd029,0x3c6be312,0xbc15d22d, +0xbc170911,0xbad3be37,0x3c684b45,0x3ca4c9b0,0x3cfa21c7,0x3cd792ff,0x3c44c338,0x3c8fbd88,0x3c94fe6a,0x3cac1132,0x3c8a1bdd,0x3c86e630,0x3c13d53e,0x3c5c3df7,0x3c612ac9,0x3cc119dd,0x3c89c215,0x3c458586,0x3c32fdf0,0x3c3ef070,0x3ca6df34,0x3c12ad92,0xbab4362b,0xbc3e7ce6,0xbc51bc90, +0xbc885a3d,0xbcb09780,0x3b19a6f0,0x3bdacf54,0x3c4ffd24,0xbbc6b174,0xbc92050f,0xbcd7064a,0xbca3fe75,0xbc58c0df,0xbc82981d,0xbc7e2132,0xbc3dba88,0xbca65031,0xbc5baef0,0xbbca49dc,0x3acd7858,0xbbe09c9b,0xb8b9e472,0x3bae70e3,0x3c6d32be,0x3c8a4e45,0x3c8dca54,0x3c8bf3b2,0x3c55535b, +0x3c104f04,0x3c46b3aa,0x3c790fe6,0x3c791edd,0x3c46f0bb,0x3c317eba,0x3c7ba808,0x3b3db9d4,0x3b6239a6,0xbc291391,0xbbd1d33a,0xbb01e87f,0xbadbd7a5,0xbaa5ce65,0x3b9f8d9a,0x3c967e62,0x3c40d913,0x3ba7393c,0xbc2e0d2f,0xb9e8dd65,0x3b82a72a,0x3c8aa588,0x3c05a2a2,0xba9162b2,0xbc05b138, +0xbbf0842d,0xbc524932,0xbc0fde68,0xba80520b,0x3be217aa,0x3bd0b1f3,0x3c31d030,0x3c654ff8,0x3c908ba7,0x3c7746ce,0x3c571b41,0x3c5dcc1c,0x3c48e62a,0x3c5ca475,0x3c84dadb,0x3c9144ba,0x3c65636c,0x3c809b75,0x3bca718d,0x3cf690b6,0x3ce196af,0x3cccc895,0x3cb6d136,0x3ca4fb4c,0x3cc1d1a6, +0x3caa1f49,0x3c885548,0x3c51b2fc,0x3c6646c2,0x3c826a4e,0x3c32907e,0x3b6b18fa,0xbb930d3d,0xba578e9c,0x3bd16301,0x3c195897,0x3c4c3d78,0x3c9ca771,0x3c84a3ac,0xba902c34,0x3bdfd264,0x3c2d3319,0x3c6553ae,0x3c5edd7d,0x3c91d4d8,0x3c93cb2d,0x3c999dbb,0x3c9fa786,0x3cabf6fb,0x3c3ef761, +0x3cca6928,0x3c89edd6,0x3c9a65de,0x3ccb5ca4,0x3cb6376b,0x3cb1ad9c,0x3c93a6fb,0x3c9f5ec3,0x3ca6b21c,0x3ca644d3,0x3ca22b5b,0x3ca4e14c,0x3cb62e9f,0x3cb3bea1,0x3ca12481,0x3c8f2485,0x3c89ec1a,0x3c948182,0x3c964581,0x3c9e6dc2,0x3c9492d4,0x3c94af22,0x3c900b41,0x3c85a2b7,0x3ca7795e, +0x3cb045ee,0x3c902be5,0x3be40b07,0x3cc16d9b,0x3cac66ad,0x3c48ffee,0x3c5d314c,0x3c69e850,0x3c751f2f,0x3c91cbea,0x3c9a4995,0x3c8dca5b,0x3cab2852,0x3cb5cf1e,0x3c5e9214,0x3caf37a8,0x3d22eb02,0xbc2b0fea,0xbb73c46b,0x39b9abba,0xbb447d14,0xbb5c3140,0xbb67a24b,0xbbd6fdf2,0xbc0b96bd, +0xbc044874,0xbc02cc60,0xbc091ecc,0xbc191536,0xbbf85efc,0xbbc873cb,0xbb952895,0xbba66d49,0xbbb8d2df,0xbbd2172d,0xbbbefb27,0xbbbb462e,0xbbde7d1a,0xbbac5fd4,0xbb89aec9,0xbac135b6,0xbb54be9f,0xbadad930,0x3ac033b6,0x3a472cd1,0xb99cd01d,0xbabce175,0xba8fdb97,0xb9e1304a,0xb87880ba, +0xbb82585d,0xbbb48f9a,0xbb5d86ee,0xbbe7a457,0xbd250758,0xbd1a2321,0xbc991558,0xbca507d6,0xbc971d22,0xbc7b83cb,0xbc72bde0,0xbc5e2998,0xbc8a940d,0xbc93e42c,0xbc8ccd8a,0xbc7b05eb,0xbc5d2f0c,0xbc25673b,0xbc36504e,0xbc1f031e,0xbc21e96d,0xbbda2c40,0xbbba12c0,0xbc08862f,0xbba8fcbb, +0xbb94d8c6,0xbb99efe3,0x39fe429f,0x3af03fcf,0x3b8a8efe,0x3aa204b4,0x3a3dfd69,0x3930506c,0xba748788,0xbade70a3,0x3b0378a3,0xbaee4808,0xbc008377,0xbc7569cf,0xbc98e765,0xbd384c18,0xbc9163b2,0xbc680bab,0xbc26ddea,0xbc1e1729,0xbc366967,0xbcbfa38e,0xbca6dcbc,0xbcd8ef64,0xbce6ed55, +0xbd055a60,0xbcb74de8,0xbc7b76b8,0xbbbf140c,0xbbf8a830,0xbc0f64cc,0xbc345caa,0xbba07f56,0xbb87bb68,0xbc0a09a1,0xbb9972a2,0xbb21f36b,0xbbb8678a,0x3c0e094b,0x3c4f28cd,0x3c1e1e83,0x3c23453f,0x3bd09826,0x3b9df83d,0x3b84c6ce,0x3b814467,0x3bdb965a,0xbaa42bcc,0xbbf83077,0xbcaa11a7, +0xbd076de4,0xbdf88f42,0xbdceb9fc,0xbd04176c,0xbd63cdc5,0xbd21146e,0xbcb915b7,0xbcdccd73,0xbcd67801,0xbd36ea6f,0xbd525ae5,0xbd3ad3e2,0xbd2b1b2f,0xbcfe7eba,0xbca8f12a,0xbcb20822,0xbc9263b6,0xbc7d13cc,0xbbdbef74,0xbb351b4e,0xbc06aa28,0xbbb1597b,0xbb10feb4,0xbbed4de2,0x3c8cc3c7, +0x3ccb82a5,0x3cb4d568,0x3cae88be,0x3c609ab8,0x3c4f9089,0x3c5f719c,0x3c3451bf,0x3c3fe58c,0x3b49ed24,0xbc72c1ec,0xbd30b459,0xbd624c18,0xbdbf6e5f,0xbdaec735,0xb9ce8c38,0xbbb1c7bf,0x3c440a21,0xbb596bf1,0xbd06ffea,0xbceea7d8,0xbd3f8d05,0xbd641aec,0xbd8bddf4,0xbd3c473b,0xbce9886c, +0xbbabebd2,0xbc66587b,0xbc38fb0e,0xbc6ccb0f,0xbab05e83,0xbb1ee557,0xbc53fbd6,0x3bc27d30,0xba1d14f8,0xbbb4538d,0x3c83815b,0x3ce39995,0x3d071dd6,0x3cc88688,0x3c8f32d8,0x3c7d79d0,0x3cbe5fdb,0x3c855beb,0x3c034e5a,0xbbc545c3,0xbcb3e557,0xbd252372,0xbdc2bfbc,0xbd0dde6f,0x3d16ac3c, +0x3dbff383,0x3bde1767,0xbe0ae924,0xbe32a9f8,0xbe3ed6bb,0xbdf56e2d,0xbe1ed648,0xbe2722ba,0xbe3f9273,0xbe260c79,0xbe0fd71c,0xbdcf6e34,0xbd5b9884,0xbd09d0fc,0xbdc1e22b,0xbd3d4184,0xbcec7cd6,0xbc5e0a6d,0xbaccf116,0xbc00be69,0x3c68d5ab,0x3c203273,0x3c8ac923,0x3d107d06,0x3ccb87b6, +0x3ca72cbf,0x3cc91d5b,0x3c630f65,0x3c2a6119,0x3c5cd985,0x3b54d41b,0xbcc57a32,0xbd3c21b0,0xbd1598c8,0x3dc17338,0x3dfcb4ac,0x3e28018b,0x3ddc3496,0x3d640675,0xbdac256f,0xbdf0da5f,0xbcf18de5,0xbd4cda06,0xbbeabd5b,0x3ccc4f1b,0x3d1da6e4,0x3d09cd15,0x3d0b4389,0x3cf86654,0x3cdcfca2, +0x3cd262b1,0xba11b082,0xbcc28680,0xbc0d6d0d,0xbb51f3b2,0xbc4bbe92,0xbbf69081,0x3c0b231b,0x3c8f86eb,0x3d0ae118,0x3c83a9f4,0x3c54ae1d,0x3c9c2eea,0x3d07da88,0x3cf283ca,0x3d05f1ff,0x3caba62c,0x3d2539b4,0x3da287e2,0x3d9550a9,0x3db4e2b5,0x3d98482e,0x3dbb486e,0x3db08907,0x3d80297d, +0x3a17d451,0xbcf79d5b,0x3d0e24ed,0x3bc16512,0x3c8f7dc8,0xbab4c171,0xbc0dc770,0xbb6abaf5,0x3c2cafe9,0x3d0d3291,0x3d2834ac,0xbc19e704,0xbb08f9a1,0xbc1de138,0xbc4e5474,0xbbd69b4b,0x3afa04d6,0x3c170b13,0x3bf88311,0x3c8fe613,0x3d7e13df,0x3cac035c,0x3bfd0fec,0x3c25452e,0x3c625262, +0x3cb7078a,0x3d90b718,0x3d4639bb,0x3d30c9f7,0x3d3462cf,0x3d0ff317,0x3cdef6ef,0x3c8a1d92,0x3cad903e,0x3d2ecb79,0x3d136828,0x3d0834b0,0x3cd52de0,0x3d81bffb,0x3d1b35cf,0x3c4c7eb0,0xbd362b43,0xbd4b96f8,0xbd66cacd,0xbd7fd05e,0xbd164534,0xbcd56ebd,0xbcc22150,0xbbfa492c,0x3b3fd207, +0x3c3f1508,0x3cad2f75,0x3cb30f81,0x3cd19538,0x3ccb8ef8,0x3ce6981d,0x3d78b959,0x3c9ae5bd,0xbad42352,0x3c8bbb82,0x3b5ee225,0x3cb109dc,0x3d7adcfb,0x3cee8ba0,0x3d0da88b,0x3c00b25d,0x3c841ca4,0x3d0901cb,0xba97bbf3,0x3cc6db71,0x3d1389ce,0x3d669b20,0xbc41cca4,0xbcc2631f,0x3c0ce211, +0x3cbd4bbd,0x3d258413,0x3d51baeb,0x3d16f3da,0x3cbabb79,0x3b5c9e95,0x3b8ab8b3,0x3bc9d3b2,0x3c62508d,0x3c659609,0x3c53e65c,0x3ca0989b,0x3cb43b67,0x3caa409d,0x3cff9f1a,0x3d23baa5,0x3d096dd4,0x3d19d1af,0x3c089614,0x39a1e51c,0x3cabc016,0x3bfc4906,0x3c76f1c5,0x3cd7f090,0x3cc60dbd, +0x3ce8c432,0x3ca4fda7,0x3cc8cbe6,0xbb189921,0x3c9bd526,0xbbae6032,0xbbf50013,0x3cf33309,0x3bf0eced,0x3be36934,0x3c6dec65,0x3b92c6c8,0x39a2e0f5,0x3c900886,0xba7bfdaa,0xbc67f7a2,0xbcfbb44a,0xbcaab9e8,0xbc9a7e97,0xbd1cf3c8,0x3bf34d7b,0x3c4294ad,0xbb8b3c3b,0x3c86ee26,0x3c353299, +0xbab11c20,0x3c59421b,0x3c856f06,0x3cc0d63e,0x3cdeaabf,0x3c96a633,0x3be0c67d,0x3c58e1ab,0x3cb0ced2,0x3d0491bb,0x3ca6f557,0x3c85666b,0x3beb9f9a,0x3ada4dac,0x3cac5bca,0x3a9d3bec,0x3caa69f8,0x3c8f3b26,0xbb148025,0xbcdea0ce,0xbcdae46d,0x3c56eb5a,0x3b017b17,0x3b866a8c,0xbb7970b1, +0x3c41bb11,0x3c7c71ff,0x3cd0602d,0xb9430a2d,0xbbf908b9,0x3aab9944,0x3c15cbce,0x3bb0130d,0x3c1ac840,0x3c54dcfa,0x39dcf877,0x3c202114,0x3c67a594,0x3c996dc4,0x3c156b1a,0x3bf3d5de,0x3c11fd1d,0x3c4b3e7d,0x3b1a3607,0x3b882a97,0x3c99c67c,0x3c25da7a,0x3c5554fa,0x3c603595,0x3caeec18, +0x3c989062,0x3cb7fac1,0x3c9e8f07,0x3b29f8b1,0xbcdbfd4a,0xbc8ced08,0xbc02d1ac,0x3c7e7867,0x3c32d3d2,0x3c7035ff,0x3c6ee97a,0x3c420553,0x3b86367c,0xbb535081,0xbc90b7e3,0xbc86e61d,0xbbb5e260,0x3ad43340,0x3bb3532b,0x3b426bdc,0x3be162db,0x3bde0a0e,0x3bdedb0f,0x3c080a5d,0x3c43d8ce, +0x3c270cb6,0x3c59825d,0x3c37447c,0x3c3615ed,0x3c7261c5,0x3ca5112a,0x3cf91243,0x3cd2ff6c,0x3cc73006,0x3cdf74e5,0x3cd2aa34,0x3b72b5b7,0x3c5c8ffe,0x3b5dda54,0xbbd95566,0xbc2fae69,0x3aada5d2,0x3be79be6,0x3c442406,0x3bf4883d,0x3ba78389,0x3bbd3011,0xbba603fc,0xbc234084,0xbc98bea5, +0xbba65bad,0x3aaad737,0x3a35381e,0xb91fad7e,0x3b03801a,0x3bab7646,0xb94380b0,0x3b138b7d,0x3a64995f,0x39f2955f,0x3b0fe87b,0x3b9d61c0,0x3bbc4a2d,0xbb5abe24,0x3ba7d393,0x3bd174a8,0x3c76f659,0x3c8c72e7,0x3ca0f2a5,0x3c9b256f,0x3c8d51d4,0x3c3127f2,0xbb7d4fa0,0xbc59aba6,0xbad1c3ed, +0x3c00a6c3,0x3c62caa4,0x3c7a41c0,0x3c914706,0x3cc8d98a,0x3c9edb23,0x3c6be522,0x3c17d082,0x3c0471c5,0x3bd693aa,0x3b842dba,0xba2a6637,0xbb109429,0x3ac3aca0,0x3b69c315,0x3b35c662,0x3b8d873b,0x3c789290,0x3bea8c17,0x3bb526ac,0x3b452c73,0x3b3ad69e,0xbac26d7a,0xbaf9a294,0xbb945c2e, +0xbb74ffe4,0xbc3e0844,0xbc95947a,0xbc9864eb,0xbcb171db,0xbca03b2b,0xbc3870cb,0xbc8439ba,0x3bc36a4b,0x3b395634,0x3b8f4de6,0x3b70123b,0x3ba0c14c,0x3be322d9,0x3c0a8888,0x3c22a299,0x3c0a85b2,0x3c0ffe7c,0x3c0ba72b,0x3bf0442f,0x3bbb423e,0x3ba7e893,0x3bda286a,0x3be29831,0x3bb40e03, +0x3b8c81d9,0x3b97ee93,0x3b0dac9e,0x3b87b7ec,0x3c231868,0x3ca693a1,0x3b87fd6b,0x3c0c1a0f,0x3ca023cd,0x3ca7cca7,0x3c93ef1c,0x3c8ace26,0x3c9b2a80,0x3c988f4c,0x3c90071b,0x3c28a84f,0x3bcfd035,0x3ca36ad6,0x3c345632,0x3c2f27ef,0xbc7a337f,0xbaf1cc60,0xbbc0163d,0xbc2b621d,0xbc4fd6fe, +0xbc82018f,0xbc8cba9f,0xbc92c6e8,0xbca60a4f,0xbc709011,0xbc6444cc,0xbc8b670d,0xbc72dfd2,0xbc5d01ee,0xbc420cbc,0xbc3b6540,0xbc35eeb3,0xbc1f5d3f,0xbc211815,0xbc1a9dad,0xbc1670bc,0xbc069e8b,0xbbead376,0xbbb5e06f,0xbbce4c5c,0xbb9fec4a,0xbb7d3070,0xbb6f6b8a,0xbb7f0b64,0xbb8494b2, +0xbb722f0c,0xbb80bcf0,0xbb5efd6c,0xbb9280e5,0xbb95df53,0xbbb71c45,0xbbbf0a1e,0xbc96d748,0xbb5bb1df,0xbb0b37c0,0xbbc1706f,0xbc8f06fa,0xbcf1018e,0xbd12f4a6,0xbd2ecdfd,0xbcb2e1f2,0xbca43990,0xbcd04865,0xbc8828ac,0xbc835614,0xbc6a99fe,0xbc697e2b,0xbc6db21b,0xbc24ad14,0xbc371512, +0xbc2b5c18,0xbbfa4a5d,0xbbebaf60,0xbbf23644,0xbb665799,0xbaea773a,0xbb25d889,0xbb1748fa,0xbb4bc71c,0xbb1e2f3e,0xbb28ba01,0xbbbef13b,0xbbe364db,0xba93ebfa,0xbb29b93a,0xba6506f6,0xbb2768ec,0xbc154aeb,0x3bc3c5b5,0x3cac5b3f,0x3bbc2d8b,0xbb0765e8,0xbccdf107,0xbd6addeb,0xbd80dd92, +0xbd9c10ce,0xbd13167d,0xbcd55603,0xbd2c59bc,0xbcfc3418,0xbcc2ecc7,0xbc7c85fe,0xbc8f029e,0xbc663981,0xbbfcc291,0xbc15cd97,0xbc0567b6,0xbb5fe0a8,0xbc0153f7,0xbbb86101,0xba1696af,0x3bf2b424,0x3c107f7f,0x3b606a18,0x3bd9cf42,0x3b1a07fb,0x3bd6b974,0xb9d63a0c,0x3b37bb73,0x3c0ede34, +0x3c438365,0x3c3753b5,0x3c09a6c4,0x3c3e4912,0x3ab78264,0x3ce85ccc,0x3d57323b,0x3cf5266b,0xbbd664b6,0xbd911a96,0xbdaaae2f,0xbdda8b36,0xbd29efb4,0xbcb43aa0,0xbd3cbf25,0xbc9ce4a2,0xbc9acecd,0xbbd0cc67,0xbc8117d4,0xbc4bc2a2,0x3a6c4089,0xbbedf508,0xbba87367,0x3b6ca6b4,0xbb68a5f1, +0x3a0c2abf,0x3bf28b43,0x3c8752f0,0x3caff152,0x3c732d28,0x3c8b051d,0x3c5afaae,0x3c836120,0x3bcc7095,0x3be55699,0x3ca62c7f,0x3c619e3a,0x3c37d055,0x3cdb35e5,0x3bd14390,0x3d252d25,0x3d8acb1e,0x3d83adfd,0x3d2eeea8,0xbcb64ee1,0xbdd4f1d5,0xbe02b335,0xbe0d28cd,0xbd79d0b8,0xbcfc4619, +0xbd865d80,0xbd33e22f,0xbcf01018,0xbc55e509,0xbc81b6b7,0xbc3ff847,0x39be3dd1,0xbb83ffef,0xbab7a118,0x3b4a4600,0xbc64b0e5,0xbb4d54d7,0x3ae1896a,0x3cc03ba5,0x3cf1847a,0x3cee72c2,0x3cd17590,0x3c90dabf,0x3cb6843f,0x3c7c3cc6,0x3c7a508c,0x3cd435cb,0x3d052aeb,0x3d1f348c,0x3d48ce8a, +0x3d3ad555,0x3cb0b152,0xbc11280a,0xbdb9493c,0xbdad9f3a,0xbd8a11a1,0xbd4c604b,0xbc5e930f,0xbc782492,0xbce8c932,0xbcf202b3,0xbcdcd350,0xbc395fe4,0xbc73f920,0x3c7243a9,0x3a3c9b58,0x3c4a6942,0x3d01221b,0x3cf22cd3,0x3caef048,0xbb6f2802,0xbc4db1be,0xbab3d70b,0x3bd5f0c9,0x3c9b4ee2, +0x3c963758,0x3cb9c950,0x3ce9aee3,0x3cecd727,0x3c87d6cd,0x3d14cb83,0x3d275fea,0x3c256065,0x39d75a68,0x393ec2e5,0xbb1c5ad4,0xbc082ed4,0x3db7c60b,0x3d5719bc,0x3cd84d36,0x3d3862f3,0x3dec2fb7,0xbc94ee09,0xbdc80028,0xbdb2fa12,0xbd77790e,0xbd371109,0xbde7a1fe,0xbd97962f,0xbd3208ba, +0xbc9216fa,0xb895b2c1,0xbc1843ea,0xbceeb171,0xbc29f983,0xbc082371,0xbd1d2867,0xbcfe6f5d,0xbca054e5,0xbc070f26,0x3c0b0aab,0x3c93486a,0x3cd819f8,0x3cac3207,0x3c7cfbc2,0x3b3a1403,0x3ca61047,0x3cbbe860,0x3d624be8,0x3ce59b89,0x3d0536bd,0x3d8833c0,0x3db5c913,0x3b7c99b5,0xbb9a3aef, +0xbce67d1b,0x3b4d3cd0,0x3d8ee8b2,0xbc8fb10d,0x3aa25744,0x3cd33517,0x3c4c6912,0xbcd6cef1,0xbda25bf4,0xbdcbbb32,0xbdc8ad00,0xbdd3a913,0xbddffb1a,0xbdaad473,0xbd914416,0xbd3bdafb,0xbd31d06e,0xbc9dd256,0xbbe004c3,0xbc016c29,0xbc3d5efd,0x3c8b265d,0x3cc7e309,0x3cd31976,0x3c8bd1de, +0x3a83192f,0x3c4324f1,0x3b75289b,0x3c9d7519,0x3d9a9c43,0x3d33ff5a,0x3d3b3c9c,0x3bde3f20,0x3cb6026f,0xbd17fd8e,0xbcdaee42,0xbc6faaba,0x3b0aeac1,0x3bd7dc7a,0x3d012c25,0x3dafa8f8,0x3da26602,0x3dfd6bab,0x3de4347e,0x3dab4b41,0x3d2de1ff,0xbbd3f752,0xbd05018b,0xbd6475c6,0xbd70184e, +0xbd28c38a,0xbd5b1caa,0xbd44b24f,0xbc233190,0xbb992649,0x3c2e937d,0xbba26621,0x3d2ee1e3,0x3d1620ba,0x3cce839f,0x3c9f7ba5,0x3b458ba8,0x3cb828ef,0xba1af49a,0x3c8036a0,0x3d2ce8d8,0x3d458f64,0x3d0bdfa2,0xbb9e9389,0xbcdb43f5,0x3a96c8db,0x3c09498a,0xbbe36126,0xbcadc1a8,0xbcd788d9, +0xbcb4e45f,0xbc252ed3,0x3cfc6bfb,0x3d8dabab,0x3ddaadea,0x3e022a3e,0x3dd2e4e0,0x3da2899c,0x3d8d70b8,0x3d35b90b,0x3ce771d3,0x3bfeaba0,0xbb91569f,0xbc5275b4,0xbc88a1c7,0xbc9af7a7,0xbc159081,0x3b566d6f,0x3ca1c431,0x3c86d386,0x3c4cda4d,0x3c910698,0x3c92148e,0x3cbdce6e,0x3c8ea0be, +0x3cb0a90a,0x3c3c9a57,0x3c1fb678,0x3c62e9ae,0x3cb43842,0x3c670d9b,0x3ac30ecc,0x3b7bb58a,0x3c1684ac,0x3bdbb2ed,0xbc80bad5,0xbcebd79b,0xbc4bd36a,0x3cce2c81,0x3c988701,0x3cd8722b,0x3d253a5d,0x3d914d61,0x3d92bf0c,0x3d871a78,0x3d0a7eec,0x3ca77afe,0x3c287693,0xba978379,0xbbf4821a, +0xbc9c988e,0xbc14068b,0xbc4890eb,0xbbc07d95,0xba10ed0a,0x3ba581e2,0x3cb9a3fa,0x3c398c87,0x3bede231,0x3c376c81,0x3bef38e8,0x3c6a9166,0x3d0d7358,0x3cdac1f2,0x3c7fb99d,0x3b652c93,0x39dbdd6e,0x3b2e6879,0xbaa6841b,0xbc7c356c,0xbc720099,0xbbb77083,0xbc3e34d3,0xbb9a9e15,0x3cbc5c0b, +0x3d48bb23,0x3d6ed4b9,0x3d32209f,0x3cea14c4,0x3cf06eab,0x3d02c0b6,0x3d4c1edb,0x3d32294a,0x3cc38f03,0x3c255275,0xba0478e6,0xbc21deb2,0xbb9b4e0e,0x3b9d82d7,0x3b9beda5,0x3b97bcfb,0x3c48bd63,0x3ce4cbaa,0x3c96d712,0x3c5a0fcc,0x3c1eb7b9,0x3c0dfe02,0x3c0b45fe,0x3b96c56e,0x3ba7469c, +0x3b46b908,0xbb4b8eeb,0x3b45eae5,0x3c49bd6e,0x3be944fd,0xbb62829e,0x3ad2d991,0x3b4b5752,0x3c213af4,0x3c9f1614,0x3cd51a6d,0x3ccabc91,0x3c8dc01f,0x3bef28d0,0x3c5944dc,0x3c82a4bb,0x3caf541e,0x3cc2d023,0x3c928868,0x3c3e3227,0x3c75112a,0x3c917e53,0x3c85f05a,0x3c77842b,0x3c652499, +0x3c7c9ab9,0x3c0ed25c,0x3bd4edd0,0x3c217c80,0x3bdc45df,0x3c2c10bc,0x3c51a056,0x3c3d11a6,0x3c4a0984,0x3c9a83d2,0x3c236fb5,0x3c354506,0x3be2a651,0x3c0743f0,0x3c83cd16,0x3c5f6a33,0x3c4f1db2,0x3c7938b7,0x3c37a613,0x3cac7f38,0x3cc69106,0x3cf6f7d8,0x3cc392ef,0x3cc2c1d1,0x3ca7748e, +0x3c8aac3f,0x3c480cc3,0x3c2162e4,0x3b95dd8a,0x3a13a1b5,0x3a801263,0x3bf258eb,0x3cb02dab,0x3ca36502,0x3c5f0589,0x3c41a2b8,0x3c543292,0x3c1dd4cc,0x3bba35c9,0xbaa278c7,0x3b622927,0x3c7d7c4a,0x3bf9db61,0x3c593ce3,0x3bf6b5b8,0x3b96ab71,0x3af40e7c,0x3c2a0930,0x3be20c96,0x3c1966ce, +0xbbc8607b,0x3b6d5498,0x3c1fbe40,0x3c59944c,0x3c982cd2,0x3cc14027,0x3cd87168,0x3d0691bb,0x3d06f3a8,0x3cf8e54d,0x3ceab243,0x3cdfff89,0x3cca1f31,0x3c9bcb23,0x3cb7cdc7,0x3cc4de38,0x3ccace02,0x3c9f1c13,0x3c5a6670,0x3c34e36e,0xbb636d4d,0x3bb111b3,0x3b8d6d15,0x3c12f98a,0x3c08b7a7, +0x3c6a3f2a,0x3bf59693,0x3ab5dc1b,0xbb7563fc,0xbbb3922a,0xbbc87f00,0xbc1e0f8a,0xbb5a8172,0xbc078e28,0xbbed9204,0x3a97d61c,0x3c6693c6,0x3c63f333,0x3c5ce3ee,0x3c6050fe,0x3c5b308a,0x3c67f2be,0x3c6eea6c,0x3c78d621,0x3c64623f,0x3c6e628b,0x3c729f94,0x3c6e9405,0x3c79c7ba,0x3c8286c0, +0x3c7265f3,0x3c5d3f54,0x3c60c66a,0x3c7b92f1,0x3c876b4a,0x3cad44fb,0x3c9080a4,0x3c50149e,0x3b8d9aa8,0x3c750c35,0x3c33e51a,0x3b19f290,0x3a93ce95,0x3b8f433b,0x3bbb1b09,0x3ba99ccf,0x3bada4b3,0x3ba8d73d,0x3c3a4db9,0x3c5c1e9c,0x3bc442c1,0x3c38986d,0x3cad32f5,0xbc957cee,0xbca17e40, +0xbc9a8d7f,0xbc5e8e30,0xbc58cb7d,0xbc807936,0xbc60eef7,0xbc715405,0xbc914562,0xbc4da062,0xbc2ff93f,0xbc3bcfdf,0xbc35a624,0xbc3484b6,0xbc272698,0xbc338211,0xbc3c03d9,0xbc3b49b7,0xbc34aabd,0xbc2ee06b,0xbc2503e2,0xbc3c423c,0xbc386c58,0xbc0c6c5a,0xbc23aad9,0xbc1fcdbb,0xbc1270c1, +0xbc133b2b,0xbc12c29f,0xbc130c09,0xbc1ab2be,0xbc0ddd71,0xbbfb4f33,0xbc194111,0xbc3be8cf,0xbbcad9de,0xbc1ff142,0x3b9b57f6,0xbc3c2444,0xbcc63fe5,0xbcd28046,0xbd04b0e0,0xbcb7b61d,0xbca6571b,0xbcec4562,0xbc7697df,0xbc87794a,0xbca7980f,0xbca524cc,0xbc8fc6f4,0xbc4934a1,0xbc408d1e, +0xbc51ea35,0xbc57b0d6,0xbc4612cc,0xbc3ad163,0xbc2193a0,0xbc4771a1,0xbc383042,0xbc056ec3,0xbbfe3856,0xbbea8ccf,0xbbe712f5,0xbbd97b9a,0xbbe1269f,0xbc10b9a6,0xbc2e59c7,0xbc3647ec,0xbbaa5165,0xbba1391a,0xbbd96ad3,0xbbb6609b,0xbc4a18bf,0xbc2f54f7,0xbd2902de,0xbce373f9,0xbd0eecd7, +0xbd3bc6e2,0xbcfc61a5,0xbcd0eba0,0xbd38f3b8,0xbca923b5,0xbc6e2df2,0xbc9cc3c8,0xbc9b8f94,0xbc922473,0xbc1d1627,0xbc4be636,0xbc410dbb,0xbc633668,0xbc282d14,0xbc110117,0xbbc10dfd,0xbc137c35,0xbbbd6418,0xbb516def,0x3add9fb1,0x3b81d4ea,0xb99b93f6,0x3b8570e4,0x37e5982a,0xbb176ecf, +0xbba86a2f,0xbb1d02b7,0x3b9de0f3,0x3a0cec07,0x35090a40,0x3c2176e9,0xbc49d390,0x3cc316ff,0xbc046667,0xbd77466b,0xbd465443,0xbd9caaa9,0xbd16e0f4,0xbcd8c13b,0xbd43d93b,0xbcab8790,0xbca58583,0xbcfc2ac0,0xbcef905e,0xbcb79ad6,0xbbfab354,0xbbfa6dd2,0xbbadb690,0xbc308fd9,0xbb8ecf10, +0xbb67d612,0x3b058ede,0xbb44384f,0xba95b04c,0x3b8b2dd6,0x3c240b51,0x3c4f2dc7,0x3c3dbd10,0x3c715556,0x3c4f3232,0x3c04b9eb,0x3aaaf1d3,0x3b1fb128,0x3c1e4c8f,0x3ca25b0c,0x3cb5f254,0x3c60a847,0xbb922ba4,0xbbfa5a23,0xbd193ac9,0xbd90559b,0xbd80519e,0xbda5a3d4,0xbd1e3a0b,0xbd0e00cc, +0xbd884257,0xbcec2ff4,0xbc88411c,0xbca121ae,0xbca531b6,0xbc93ec26,0xbba16d67,0xbc0fb5ac,0xbc24d8b5,0xbc6d0825,0xbba8adf3,0xb9dd1f0f,0x3c3788a3,0x39df67b5,0x3bdf9bde,0x3c4e404b,0x3caebe9d,0x3cec29eb,0x3ce9fb09,0x3ce3b91b,0x3c962852,0x3c89561f,0x3c29bd1b,0x3c19829a,0x3cda2b67, +0x3cf91114,0x3cb56605,0x3cdfe575,0x3c9eb431,0xbde3ebe2,0xbd9343bd,0xbdbbcfdb,0xbd8c40b2,0xbc14bc23,0xbd835fe8,0xbd814df9,0xbd817969,0xbce452b0,0xbb7503a0,0xbbde691b,0x3bb8dc29,0x3c8e08cf,0x3b2c5c5f,0x3c160eaa,0x3c58727a,0x3d325734,0x3c923f40,0x3bcc0a88,0x3c9ce31b,0x3c142cf2, +0x3bc74de4,0x3c1a4d29,0x3cc5efab,0x3ca50055,0x3b037c8d,0x3ce3c542,0x3d042f82,0x3c6d7efd,0x3d138cc3,0x3c94fef2,0xbcf20e2a,0xbc133b55,0xbc598a81,0xbca3493a,0xbdd520b8,0x3d29764d,0x3d6355c2,0x3d21ae75,0xbbb44616,0xbdb4e827,0xbdafb476,0xbdc9e433,0xbe0e50be,0xbd1aaa8a,0x3c480b98, +0x3d040ea6,0x3c0133ff,0xbcb1b10c,0xbc72aa3b,0xbd47cd41,0xbd455905,0xbd640bc1,0xbcb7f5ee,0x3b2689fa,0xbbe30091,0xbc180396,0x3b75a510,0x3be6d08a,0x3cd2dc56,0x3d04910f,0x3cf1b6a7,0x3c83fa7e,0x3c08b897,0x3bff9ae5,0x3c8960df,0x3c935b90,0x3d475043,0x3c82a18b,0x3c031957,0x3c9e4de3, +0x3d1793fa,0xbbaff656,0x3d0460de,0x3d18cdf6,0x3cb86038,0x3db472c3,0x3d2b74e0,0x3d11e608,0xbc42b529,0x3c336538,0x3ce3c114,0x3d07557d,0x3cd662a3,0x3b642290,0xbb1b313f,0xbcbc5b27,0xbcf179fb,0xbcf54acf,0xbcf11a0c,0xbd0c098c,0xbcafd758,0xbca1264f,0xbc151784,0xbc15dd08,0x3d0d872c, +0x3cebcbe7,0xbb179aab,0x3bff273f,0xbbf25ce2,0xba17316a,0xbbd569d7,0x3c18021a,0x3d3160b3,0x3d225229,0x3d37d6cd,0x3b998050,0x3b3ddbfd,0x3b81f3b1,0x3c29a41b,0x3c69f039,0x3d2eb6dc,0x3e11a4a1,0x3da5bbf1,0x3da8f617,0x3d7e007e,0x3d973128,0x3d825e34,0x3d22227a,0x3d002b47,0x3cd035cf, +0x3b99bcf9,0xbb50a163,0xbc039337,0xbb9d108e,0xbc95bbc5,0xbcd22765,0xbcd3d48f,0xbd0529b4,0xbca58a85,0xbcd0623a,0x3d05b37f,0x3d01bbab,0xbc997a62,0x3c38a2a7,0x3ba0a58e,0x3c444451,0x3a76073b,0x3c95fd69,0x3ccd16ab,0x3d1b81df,0x3d2e7bab,0x3b1b76e7,0x3c405921,0x3c851933,0x3c51c24b, +0x3b4678f6,0x39c40c4c,0x3c8ec70c,0xbc0bfa34,0xbb62fb03,0x3d21e7c1,0x3da09dfa,0x3da58458,0x3cfb0ed9,0x3d412f44,0x3d11ef77,0x3d0bdd37,0xbc1eaf1f,0xbca4ec45,0xbc128046,0xbbdd3247,0xbb51835c,0xbc14c930,0xbc3bbfdf,0xbbacdd3f,0xbc373ef5,0x3cab7de3,0x3cc7499a,0x3b83b110,0x3c9e3a98, +0x3c8e6bd3,0x3cc564ac,0x3d0991d3,0x3d09dfde,0x3c06a7ed,0x3bcaec5c,0x3b766468,0x3b98f423,0x3c66c371,0x3bcc7197,0x3bd2638a,0x3d0c144b,0x3d2b2b3f,0x3d16b2bc,0x3bda9c4c,0x3c465aa1,0x3cebfe7b,0x3d0f18e5,0x3d089fa8,0x3b07511f,0x3c93b2de,0x3bb93b86,0x3d23090e,0x3ce299ed,0x3cca36d1, +0x3c885da9,0xbc529b7d,0xbca6ddbc,0xbb123c68,0xbb83936e,0x3b3a31c6,0x3bbf201d,0x3b6153d7,0x3b6996ab,0x3c054f71,0x3b03e054,0xb9af2dd3,0x3c3ee839,0x3b4f4f1c,0x3c12f25f,0x3ca0b329,0x3d0ac6ec,0x3d0d6492,0x3c930b67,0x3c184477,0x3c07e06f,0x3cb8f96e,0x3ce9d296,0x3c6ce09a,0x3b712cbb, +0xbcc8974a,0xbce6d210,0xbc6340e9,0x3b1304c5,0x3bf1500a,0xbc1ff94b,0xbbc62bf0,0xbaa8f97d,0x3b520972,0xba99e61f,0xbbba4a45,0xbc290874,0x3889180e,0x3bc8643c,0x3b2473fb,0x3bb586d4,0x3b9e4510,0x3b758ca1,0x3bda46e3,0x3bdb8950,0x3cad3d05,0x3c2df5a6,0x3c264a53,0xbaddce19,0x3bb9f20f, +0x3c091709,0x3bc49f53,0x3b3ffb36,0x3b1253c8,0xb986bd0f,0x3c451323,0x3b94bfe3,0x3c35a6fb,0x3c38a6c1,0x3ac12198,0x3b77ea68,0xbc491aed,0xbc80bc73,0xbca055b0,0xbbd8b30c,0xbb16a1d5,0x3aefbe3e,0xbc24dbb6,0xbc99e770,0xbcc85d37,0xbc23edcf,0xbb893dd0,0x39b0721b,0x3b24469a,0x3abb67c7, +0x3bd88a33,0x3c46f838,0x3c07f031,0x3b75e51e,0x3bb0ace2,0x3b9db680,0x3bf986ad,0x3c7488dd,0x3c7ec3e3,0x3c44f412,0x3c441c53,0x3c0baf12,0x3b9633e8,0x3c014753,0x3c0b2c25,0x3c056486,0x3c0b8ca7,0x398859d5,0xba9c429a,0xbb9d2752,0xbbfa643c,0xbc3efe2d,0xbc371df0,0xbc59ce7c,0xbca2977e, +0xbc13d09a,0x3b137156,0x3c92d5d2,0x3c5965ca,0x3c0918da,0x3b49123a,0x3bf150d1,0x3c3a75a6,0x3cba0373,0x3cac02ca,0x3c886f4a,0x3cbb46c7,0x3cb4998c,0x3c8a706a,0x3c6114da,0x3c532252,0x3c2caa8e,0x3bcbb11f,0x3c1ad638,0x3bce4104,0x3cbcdf5e,0x3c0c55d2,0x3c1de58c,0x3b49cfe6,0x3bd6a50a, +0x3b7303aa,0x3c084720,0x3b8b4a85,0x3b90e3d1,0xbbdf09e1,0xbbbb1a98,0xbb895478,0xbb4188d0,0xbbca6a1d,0xbbc504aa,0xbbeb5405,0xbaa8915c,0xba90b2a0,0x3a0770ff,0x3c13bf3a,0x3cb89144,0x3d0bffc5,0x3cfe9ff5,0x3cbac02f,0x3c85c227,0x3c82c128,0x3c5f0785,0x3c5ac62c,0x3cc47e27,0x3c780430, +0x3c6cc253,0x3c077573,0x3bfc2be2,0x3b7d5ba9,0x3b9b9b16,0x3b03c4ae,0x3900651f,0x3a0b1a64,0x3b9dcc5a,0x3a8fcc33,0x3b49a911,0x3acec7c6,0x392e9398,0xbb78f6d0,0xbbba7e75,0xbc715631,0xbc615ff7,0xbc75e96c,0xbc7bc09e,0xbc810bc7,0xbc819ce7,0xbc8ebc37,0xbc801f4b,0xbc50fc5b,0xbc28ff6a, +0xbc2a1695,0xbc565b8c,0xbc612cc3,0xbc66b20a,0xbc30e4a8,0xbc1a2125,0xbc1e253f,0xbc20b9c2,0xbc553d60,0xbb624e47,0x3bc02bb0,0x3c86167f,0xbbba2387,0x3b3df248,0x3c7431fd,0x3c7e40ab,0x3c5fe036,0x3c57a5bb,0x3c469cb4,0x3c1e3eff,0x3c2241c1,0x3b05cb7e,0xbbc9df74,0x3c4b8930,0x3b569973, +0xbcb4820b,0x3923d2bc,0xba048257,0x3bc50183,0x3b6df0ff,0x3b2bb082,0x3a626567,0x39486930,0x3938fd27,0x3ae2c803,0x3ade5c00,0x3b222b9f,0x3b883fe7,0x3b0b8d55,0x3b0282b1,0x3b53c068,0x3b209fe6,0x3b102faf,0x3a762e2d,0x3b1caafe,0x3b0c91cf,0x3af6b796,0xbaf4a3de,0xbb94eaf2,0xbc386ece, +0x3a8e7b63,0xbb617de9,0xbc2ffae0,0xbc26e0da,0xbc2a84b6,0xbc286f78,0xbc3c158f,0xbc32e27e,0xbc16e3ae,0xbbb1109b,0xb9f77106,0xbc24645f,0xbc09a89d,0xbcf136cf,0xbc81bc15,0xbc0e28bc,0xbbc60399,0xbbb384eb,0xba8e5b50,0xba8d6b20,0x3b18e166,0xbb0d11db,0xb653cde1,0x3bcd272d,0x3a1e0d9a, +0x3a348d41,0x3bbb7b3e,0x3b56d4b5,0x3b2ddf0f,0xba8228e7,0x3b9f67ab,0x3ba7b239,0x3a6b8c60,0xbbc6919f,0xbb879c2e,0xbb61b7ac,0xba155402,0x3b451e6a,0xbb5c3552,0x3a64a0db,0xba92293d,0xbb259bc2,0xbb934248,0x3ace63e6,0xba9dbd70,0xbb2ce667,0xbb9731cd,0xbbdb50bb,0xbc667af0,0xbce4e25a, +0xbbe69686,0xbb952032,0xbbbd324d,0xbc1ed462,0xbb7a5217,0xbbc3c396,0x3b7717dd,0xbb0e88f9,0x3a2abe49,0x3c475cb3,0xb892b992,0xba19cf5f,0x3c01a82e,0x3b7c45fd,0x3b76191b,0xbb66fcc8,0x3bf35527,0x3c02be50,0xba64eebf,0xbaa4a639,0xba1da94b,0x3b9ef215,0x3bac8c7d,0x3bf9dba8,0x3b00d154, +0x3be49007,0x3bf883ad,0xbafa8410,0x3abd4a6c,0xba6f1533,0x3bc72bed,0x38a2f726,0xbb7add9f,0xbbeed146,0xbc9deeff,0xbd8f17cf,0xbd6d18e5,0xbd08498a,0xbd0403ff,0xbccd62d9,0xbaf6fe41,0xbbc968a6,0x3bfd16c1,0xbc677576,0xbc091648,0x3c586702,0xbbd5bc04,0xbbf7a4fc,0x3c045eb9,0x3ab44675, +0x3aa279f5,0xbc34ac13,0x3c45d56f,0x3c23e7f8,0x3a0e7dd1,0x3a989eeb,0x3a24aa24,0x3b34ec76,0x3c6ccfc5,0x3c675021,0x3bb89846,0x3c8388bf,0x3c53c40e,0x3bba2e7d,0x3b49e3d5,0x3aaf0d77,0x3c060500,0x3b2ca9a4,0xbbb69600,0xbc5da7d6,0xbd20aece,0xbd67efce,0xbd0e54d3,0xbba91feb,0xbc9ade98, +0xbcb04496,0xbc53fdc2,0xbc16842e,0x3bf61231,0xbbe4f0ff,0xbb94ee06,0x3c7d113f,0xbc058f75,0xbc14c619,0x3bb9b1a8,0x3a95b7b8,0x3adcbcd3,0xbc2a8337,0x3c548d51,0x3c541630,0x3a7ab532,0x3c62ded1,0x3c0cc00d,0x3c4a0fac,0x3c9e88ce,0x3cde9f19,0x3c9a6fe7,0x3ce8414b,0x3ca46e59,0x3c4ef426, +0x3c2cd01b,0x3c1c9d22,0x3c5edd21,0x3bd1aaea,0xbc3ee773,0xbc7338f5,0xbd676a92,0xbd96bd86,0xbce107b7,0xbd1c08e4,0xbd2593ae,0x3c8ffa09,0x3bc63e86,0xbc28ef75,0xbd3a3dd9,0xbcc31018,0xbc823736,0x3bca32f0,0xbccc8c2e,0xbd2dddc6,0xbd37e1b2,0xbd30e3f8,0xbd0f552e,0xbd0e3d28,0xbcfc00cf, +0xbcfcfb68,0xbcb05a43,0xbb9bee57,0xbc27b21e,0xbbe9ddd6,0x3c385d68,0x3c89c884,0xbbf672ce,0x3cb08a6d,0x3cd88233,0x3b271218,0x3cad623a,0x3bc76209,0xbc930dbf,0xba1086ee,0xbc458770,0xbd151da3,0xbd9a541e,0x3d483656,0x3d121157,0xbc240d1b,0xbcc09e93,0xbd817750,0xbd2e3055,0xbd64509f, +0xbd9dda86,0xbd03aaab,0xbcc9bd63,0xbd223eb2,0xbc5c540e,0xbb9bce43,0xba767154,0xbbcdbad1,0x392a09d0,0x3c1e3e0c,0xbc0ee21d,0xbbe21ee2,0x3c2372ee,0x3bb93194,0x3c3f10f9,0x3c80c5d4,0x3cbc4038,0x3cd5caf1,0x3d014640,0x3c55178f,0x35776d6d,0x3c0c5da5,0x3a9c0def,0x3c0c2a5f,0x3d1032de, +0x3ba07a9a,0xbbef1ecf,0xbc2ba457,0x3d151d5a,0x3c571599,0x3cbd9ce3,0x3d32caf2,0x3d6b4d18,0x3d95e2c6,0x3d893efc,0x3d10270a,0xbd1feb28,0xbc192a6a,0xbc9e71e6,0xbd1f0785,0xbd418025,0xbd20e082,0xbc3b1055,0xbb49505a,0x3b64609e,0x3c96880b,0xba87adea,0xbbc689a7,0xbc2a4e9a,0xbc6184bd, +0xba147605,0xbc0cdf6a,0x3d0d9e2e,0x3cf3b939,0xbc1d259b,0x3bfb21e7,0xbbbbfc95,0x3b042c85,0xbc0d21ee,0x3b9d9bac,0x3c89b9e0,0x3d418935,0x3d5fdcfd,0x3cf1c129,0x3c268346,0xbc5ebecd,0x3c85b84f,0x3d733f27,0x3d809c6f,0x3d8a4ac7,0x3d6f64b1,0x3d21cdaf,0xbc87bc09,0xbc0ecd71,0xbcb0e8e2, +0xbccd4b11,0xbd2d6971,0xbd329719,0xbca8df7b,0xbce29042,0xbce167d9,0xbcc6a36d,0xbc9aff76,0xbc8ea638,0xbc7c0b18,0xbc2542da,0xbaef7d9f,0xbc23a27b,0x3d1d23bd,0x3d19dfd4,0xbcfd35c6,0x3c33316e,0x3ba9cae1,0x3bac746b,0x3b543bb8,0x3c98f1b1,0x3b50f48d,0x3d47b53d,0x3d5f750d,0x3d01257c, +0x3ad718de,0x3bf3f342,0x3c2afa53,0x3be21a21,0x3b20a164,0xbd24da84,0xbc3085a6,0x3b154a96,0x3c85da66,0x3d3c9814,0x3d317c79,0xbbf6648d,0xbc72c822,0xbd496254,0xbda00c0f,0xbd9b677a,0xbd811f0a,0xbd223efa,0xbd294f9b,0xbcf587ae,0xbc2bc7f2,0xba94a33d,0x3be97330,0x3c0c32e6,0x3cdddce9, +0x3ce52b13,0x3c545640,0x3c8aa243,0x3c5fc78b,0x3c3a9421,0x3ce9f77e,0x3d05d508,0x3c850ac9,0x3ca1e43d,0x3c589d13,0xbbb34510,0x3b5db14f,0x3c404cb5,0x3c3c5abc,0x3b5d405b,0x3bdd0982,0x3d320f16,0x3cff5c93,0x3bdaf786,0xbd6ad8e6,0xbc50fe90,0xbb064380,0xbbb4618e,0x3c579ff4,0x3c5307e9, +0x3cc0f7bb,0x3cef349b,0x3c821d42,0x3c60121e,0x3c49b009,0x3bba15be,0x3be10bcb,0x3bc6ae44,0x3c5d8404,0x3c1d65c5,0x3c6bb772,0x3c82ad8b,0x3bc63e35,0xbb0ba376,0xbb7476fb,0xba7d2cc3,0xb912f559,0x3b56a80f,0x3953f4af,0x3c9d21cd,0x3ccfa838,0x3c63961f,0x3caa2b94,0x3c4babc7,0x3c340e5f, +0x3cae9d22,0x3cc931a3,0x3bf570c1,0x3b9d3897,0xbbd6274c,0xbcf43ff6,0xbc3bb457,0xbba19a10,0x39e7dcb9,0xbc190723,0xbc2a4282,0xbc467f1c,0xbcadfa41,0xbc934d76,0xbc998a43,0xbbfe20cd,0xbae5d6e2,0x3aa93f53,0x3ad58d2e,0xbab0eb32,0x39b6997d,0x3c04ff5f,0x3bd84b50,0x3ae08900,0x3bcaad9f, +0x3badf79c,0x3c284651,0x3c2ebaef,0x3c7b93b6,0x3c813cd9,0x3c7fd20d,0x3c3121cb,0x3bc0ab71,0x3b20b45e,0x3c772150,0x3c969db9,0x3cb2c9b0,0x3cbfbe76,0x3c845c09,0x3b2b6892,0xbc483389,0xbd055515,0xbcbf60d3,0xbc90697a,0xbbb3b1b2,0xbbb52bfa,0xbb94ca22,0x3b2abfe5,0xbacdcedb,0xbb258adb, +0xbbdaf3bf,0xbbe26136,0xbc18fbd1,0xbc751edd,0xbc0f3077,0xbb739957,0x3ba12090,0x3b5142b8,0x3be50ba4,0x3b8a1c7e,0x3bb04aef,0x3bd3ac43,0x3c286009,0x3c0f19a3,0x3c07460e,0x3c0eeb42,0x3c4489e8,0x3c48f11d,0x3c4a34a5,0x3c1f21d1,0x3c2f7023,0x3c846f4b,0x3c18ce38,0x3b477fce,0x3b376dfa, +0xbbebffe4,0xbc5a29a5,0xbcbb744f,0xbc66f7b6,0xbc38937e,0xbbbe5dec,0xbbfb2dcc,0xbbc798d6,0xbc004b4d,0xbbd6a95f,0xbb9deaea,0xbaa6d0c2,0xbbaa530d,0xbc38ad13,0xbc2fd348,0xbb336489,0xba0affb5,0x3b3de48a,0x3b0ba4e8,0x3a81174c,0x3a25f740,0x3b4d7d27,0x3b6a8851,0x3b6a5f6b,0x3bb13bf1, +0x3bf7bb58,0x3c035e4e,0x3be94ad8,0x3c217adf,0x3c2acc37,0x3c64c640,0xbbec81f2,0x3aa34365,0xbb2384de,0xbb92d1c0,0xbc10ba2d,0xbc561f8d,0xbc7bde8b,0xbca84739,0xbc9d43f6,0xbc8ef062,0xbc7a175a,0xbc4a0521,0xbc12b99f,0xbba86dff,0xbb5574f5,0xbb6014e9,0xbb63c17d,0xba27280f,0x3b68865e, +0x3b1fe857,0xbb3a0683,0xbb9483cc,0xbc1b4378,0xbc36f315,0xbc3908a2,0xbc660091,0xbc39f57f,0xbc09e5f5,0xbbad3dd8,0xba4bd727,0x3a76b469,0x3c00b848,0x3bb38bd3,0x3b5d8320,0xbaba4060,0x3a84ac49,0xbc1f42a6,0xbb2f874a,0xbbc0132a,0xbbdc594e,0xbbe19cc4,0xbbfafcc5,0xbc06c893,0xbc147c84, +0xbbf7ba7b,0xbbed508d,0xbbe94997,0xbbdf4fda,0xbbe402e4,0xbbe7e439,0xbbf5e6f0,0xbbe5e980,0xbbe39cc2,0xbbf18948,0xbbf4a2e0,0xbbd7f000,0xbc4c37b4,0xbc862ece,0xbc857315,0xbc2dfc00,0xbc82bec0,0xbc9a1ff5,0xbc910922,0xbc875c2e,0xbc80d1ad,0xbc785368,0xbc70f53b,0xbc6ccc0b,0xbc629e81, +0xbc0d8322,0xbc870d48,0xbc6e4630,0xbc7cacde,0x39d8e883,0x3b9324ea,0x3a94d6ad,0xba44764e,0xba7ec3e2,0xbb0277e5,0xbb39b114,0xbb510bb1,0xbb5fdd15,0xbba457f5,0xbb96911c,0xb9c6d05f,0xba697469,0xbacfe6c0,0xbb3e08df,0xbb115a8c,0xbafe8190,0xbaf5b8cc,0xbaa5e603,0xba61b613,0xbb062672, +0x3ada37e9,0x3b675cca,0x3ba0ddb4,0x3b32bb91,0x3b90ff00,0x3b8fa176,0x3ba4dc39,0x3b93ae39,0x3b6cf6e3,0x3b9d5064,0x3b9ec9c6,0x3bbb6fe1,0x3b747eb4,0x3a1cef54,0x3b25f526,0x3b09d3a3,0xbc167640,0x3b1986c1,0x3c5f0456,0x3c707431,0x3c264fe2,0x3bd1663c,0x3a174c8e,0x3afa4ed9,0xbb5ec3bd, +0xbb57df46,0x3b5bf04b,0x3b1e6af2,0x3af7df1b,0xbb193591,0xbaa48532,0xbb440fc6,0xbb89c2ab,0xbb290eeb,0xbb3e7b9f,0xbbd0bfaf,0x3aa2aa7b,0x3b0eea7b,0x3bd3be83,0x3bcfb158,0x3b651025,0x3ae7052f,0x3b8f1d7c,0x3bbabcd2,0x3b0ed33a,0x3b1c1b56,0x39a96ffd,0x3bc5fb74,0x3b275fed,0x3b03a51e, +0x3b563194,0xbb286f97,0xb897d70a,0x3c7b516f,0x3c45d3da,0x3c5db471,0x3bc06183,0xbaf5ab37,0xbbb2ee19,0xbba0d5fd,0xbcac4aec,0xbc8c4a14,0x3ba296ae,0x3af6c153,0x3aaefb3b,0xbbef15fa,0xbbde1ea1,0xbbccb4f6,0xbc055db8,0xbb912718,0xbb9f6414,0xbbf67c9b,0x3aafb6ad,0x3abf86bb,0x3c096a6a, +0x3c273226,0x3c189c42,0x3ab7857f,0x3bd12300,0x3b24baa3,0x3b6edf53,0x3ac43a04,0x3b964361,0x3c344535,0x3b5b340b,0x37fa43e4,0xbb192a1b,0xba665507,0xbc8056bf,0x3c828b90,0x3d5b002e,0x3d3de104,0x3d0c30d5,0x3ca63ba8,0x3c0528c0,0x3c83aa87,0xbc497821,0xbc060e39,0x3c611528,0x3c100efa, +0x3c2f7bc7,0xba551877,0xbae0e9f3,0xbbd93f6a,0xbc2ac1a8,0xbc066b96,0xbc107bf7,0xbc82a325,0xbba8524a,0xb988820c,0x3c3fad22,0x3c5bdb02,0x3c6c66f2,0xbb07773c,0x3c706d08,0x3c404a01,0x3ba9e95a,0x3b2c3c0b,0x3b73b750,0x3c88c9ce,0x3b1d25d8,0xba8d79b4,0x3bf63119,0xbbb8b2c8,0x3c386b59, +0x3cf75506,0x3d189697,0x3ce806be,0x3c078657,0xbbad4dc1,0xbc5fe7ab,0xbbf067b0,0xbd1a1254,0xbd18d408,0x3c879b85,0x3bd469c2,0x3bc5ee23,0xbc395951,0xbc3b7fcf,0xbc3c7714,0xbc46471c,0xbbd97447,0xbc0a543b,0xbc99cb4d,0x3a6454a2,0xba4ab48b,0x3c2a22c7,0x3c9e346a,0x3c9fdc1a,0x3bc14eff, +0x3cb008a5,0x3c9e77a2,0x3c2d4889,0x3bff6845,0x3c0baeaa,0x3ccdc5d9,0x3c067c1f,0x384a3b51,0x3c402141,0xbad30387,0xbc3e4fc1,0xbcc3e036,0xbd84b584,0xbd1679b0,0xbc70dd96,0x3cec6cf6,0x3c633d74,0xbd6be556,0xbd0f5316,0xbd285448,0xbcca8a92,0xbc790e3f,0xbb9f8fdb,0x3c787dc1,0x3ac5382e, +0xbc352417,0xbcfce735,0xbca66bd7,0xbc74497f,0xbcf632ab,0xbce60c48,0xbc8c3bf9,0xbc1273e6,0x3b05cfe0,0x3c5ac90b,0x3c02193b,0x3c8c76fb,0x3c9e2ea4,0x3be1bd21,0x3cbb05f6,0x3c5f5bcf,0xbc3b46ba,0xbb59bec7,0x3af5359e,0xbc3c18e9,0xbc628494,0xbbfbc8aa,0xbc4a0455,0xbd733fd5,0xbd73e578, +0xbdc29548,0xbd89847a,0xbd947021,0xbd8510eb,0xbdcbab8b,0xbdb8ee5f,0xbd0b4fa3,0xbd3344e2,0xbd0e3ba3,0xbd1624a2,0xbd32b092,0xbcf70ec1,0x3c70c4c4,0x3b08eeb0,0xbbcb0c5a,0xbaab4e08,0xbb136fdf,0xbaa04b57,0x3b6a2d71,0x3c66fbf6,0x3c9ee0a6,0x3c7006db,0x3c6cf3e8,0x3bb05a01,0x3b8cfec4, +0xba51f923,0x3c36c6f3,0x3d29359b,0x3c415328,0xbc02190c,0xbd011663,0xbbcf972a,0x3ca93ced,0x3d31b954,0x3d3b70a9,0x3ccd2161,0xbb425c70,0x3c9e8d7b,0x3a167c41,0xbda846a7,0xbd82dacf,0xbd686194,0xbc6b0f2e,0xbc74f657,0xbc2b5215,0xbc42eb56,0xbca56969,0xbcd2dbf9,0xbba4a916,0xbc6c1fb9, +0xbc4f3fdc,0xbbe54c63,0xbc2f95b3,0xbb1aea4f,0x3b0773b1,0x3cff19e5,0x3cde3db7,0xbbf897ed,0x3c244bb1,0x3869e9e8,0x3c113b2a,0xba9b4e54,0x3c27f740,0xbb823b94,0x3d337375,0x3d5d0689,0x3d2477fa,0x3cd46f0d,0x3d2d05d0,0x3d5c4759,0x3d8e5f51,0x3d8a6381,0x3d8756a1,0x3da06540,0x3d665f91, +0xbd3432b1,0xbc06b934,0xbca9058b,0xbd203dbd,0xbd4c377d,0xbd6c0085,0xbd2bab57,0xbd0ac8eb,0xbcaf6f5d,0xbc45b826,0xbcb15d5d,0xbcb62f31,0xbc4d37b8,0xbc076cc4,0x3be5a10e,0x3bcff69a,0x3d219b0a,0x3d074091,0xbc8e53ec,0x3c595f12,0x3c012075,0x3b89b5b1,0x3bf3ddad,0x3c83e69f,0xbb37245b, +0x3d335c02,0x3d5bd404,0x3d4b25f1,0x3d2b5817,0x3bd9424b,0xbb5f534f,0xbb955e77,0x3c720bda,0x3cd0ce88,0x3d4a04c8,0x3d3ce0b2,0x3c8ca7e0,0x3d085c8d,0x3cf5ca26,0x3cb32690,0xbd05d8eb,0xbd68d568,0xbd8deb5a,0xbd7d0a3e,0xbd59e50a,0xbd2c0701,0xbd090692,0xbcc4850a,0xbc63498d,0xbb858df1, +0x3bd4b90f,0x3bc522de,0x3caf4742,0x3c9566be,0xbb6361b5,0x3c81dc9d,0x3c819036,0xbabf244f,0x3c972525,0x3cd454e3,0x3cdceb49,0x3cdac221,0x3c8ef7ec,0x3afe6c19,0x3b81809f,0x3c7880ea,0x3cd9adba,0x3cf717ce,0x3cdfd12c,0x3d0cbb23,0x3cbd78d9,0x3b2d8db8,0xbd0c5b45,0xbabe7494,0x3cbf9dfc, +0x3d90b99f,0x3d8970c9,0x3d6a64cf,0x3d22be21,0x3ce0ce7c,0x3c1d061e,0x3c8238ad,0x3cc2c6e5,0x3cd506ee,0x3cc1a65a,0x3c97632d,0x3c890c61,0x3c420d22,0x3cca942b,0x3cd1bcf5,0x3c8dabd0,0x3bdd88f4,0x3b308cc4,0x3ab7476a,0x3ba12c25,0x3c02c771,0x3b3fbf4d,0x3cacdd72,0x3cc53934,0x3cc016ec, +0x3c8029f3,0x3bf0ca85,0x3b901c65,0x3c36a126,0x3cb5bf35,0x3ce0120a,0x3ccd29f8,0x3c98a256,0xba84a1f7,0x3c10a358,0x3c204f7f,0x3cb32433,0x3bae693f,0xbbd72396,0xbcf79674,0xbcc91458,0xbc667405,0x3ba383ad,0xbbd04ec0,0xbc04ad8f,0xbc03f2ef,0xbc1e8a90,0x3a14f496,0x3a2ac353,0x3c382202, +0x3c78f1a3,0x3c226d38,0x3c84db03,0x3c4fa0d7,0x3c7d812d,0x3c792624,0x3cacd74d,0x3cc5c715,0x3caaa66d,0x3c8ca1ac,0x3c2cda67,0x3c3fce05,0x3c4e9c04,0x3c91eddf,0x3c9ad067,0x3ca449cf,0x3caaf99f,0x3c8f71d7,0x3c6789a3,0x3bec1297,0x3c552408,0x3ca35991,0x3cf17787,0x3cd9a207,0x3cbe05e9, +0x3c84ad93,0x3c450b4f,0x3c0bdc77,0x3c091138,0x3bda3b27,0x3c5008c1,0x3c67229d,0x3b8d5b7a,0x3c030be6,0x3c5d458c,0x3c51fbab,0x3c5c615e,0x3c59697c,0x3c1e925d,0x3c3d02d0,0x3c609486,0x3c4b94ee,0x3c389503,0x3c401fb9,0x3c72276e,0x3c64c4ac,0x3c3470c5,0x3c54a936,0x3c424a06,0x3c5350ec, +0x3c100a55,0x3bc9f722,0x3b6535b7,0x3b72649d,0x3bf1a9b9,0x3c3a0ee5,0x3c4bcfaf,0x3c3aaddb,0x3c58a2e0,0x3c6febc4,0x3c9ce633,0x3cbb9809,0x3c96b3ea,0x3c653374,0x3b99edf2,0x3c11bf70,0x3c7dfbed,0x3c2c3121,0x3c05982e,0x3c2535b2,0x3c4d9702,0x3c397102,0x3c396b26,0x3c654477,0x3c31c58c, +0x3c8c7c53,0x3bb5fa2e,0x3c46618c,0x3bca1801,0x3c00f24c,0x3b8033e5,0x3b866ef4,0x3b514f52,0x3be30e8f,0x3b23d093,0xbab2f90a,0x392c029f,0x3aa20e81,0x3b27b627,0x3a80cbe5,0xbabee04e,0xbb968bed,0xbb69eeaa,0xb9b67c80,0x3a8fe5fd,0x3b19f651,0x3ac2b633,0x3b4f7903,0x3b623edf,0x3bc80f56, +0x3c335033,0x3c14de8c,0x3bd0211a,0x3c119246,0x3bb8aea6,0x3bd6883b,0x3bb99df7,0x3bfdda16,0x3bae951f,0x3b8a0330,0x3b9e0567,0x3ba7d398,0x3bb64063,0x3be21409,0x3c28f776,0x3bd4561d,0x3c12503d,0x3bfe0112,0x3be4ffc5,0x3ba0ab09,0x3ba99f78,0x3ba99e9d,0x3b9f3990,0x3b85bf24,0x3b7665be, +0x3b7d5c79,0x3ba48687,0x3bc4ac85,0x3bcbd5b0,0x3baf1830,0x3ba33194,0x3bb0213d,0x3bceb58b,0x3bdf7c79,0x3bd33248,0x3baf1a0f,0x3b8859d9,0x3b98b391,0x3bad3f30,0x3bd2f93e,0x3bbe3056,0x3b800e05,0xbb225bf0,0x3bca6f5d,0x3b8d8a5e,0xbb1c8b9c,0xbb39c1d7,0xbafd0955,0xbab1f485,0xbb21ccc7, +0xbb0ab089,0xba80bb0e,0x3b6a15f9,0x3b92b3f6,0xba894869,0x3b5b0df9,0x3c0adfbd,0xbba75a7d,0xbc101160,0xbc07d5de,0xbbc5199f,0xbb9d9dca,0xbb704006,0xbb404cab,0xbb54930e,0xbba5460f,0xbba6035e,0xbba59ee3,0xbb722ba2,0xbb54428c,0xbb5c3083,0xbb946097,0xbb8980e5,0xbb877241,0xbb4482ec, +0xbb749fc3,0xbb7c241a,0xbb3f5ff6,0xbb626388,0xbb3efdad,0xba581cff,0xbb25cd55,0xbb232c0c,0xbb1a82a6,0xbb0d0d56,0xbb11863e,0xbb20562d,0xbb190073,0xbb03d3b7,0xba9acef3,0xbb67f8e8,0xbba194b8,0xbb61f7ae,0xbb9d1472,0x3c08d9dc,0x3b8372ac,0xbbb731c2,0xbbab175d,0xbb29aad1,0xbb8f46ac, +0xbbe23ac8,0xbc641008,0xbc59d895,0xbc2da61a,0xbba6f90a,0xba9c719e,0xbad35160,0xbbedd41a,0xbbc0882b,0xbbbe34e7,0xbaffa488,0xbbac15fb,0xbb93c9c6,0xbab3db08,0xbb333eb2,0xb98d5270,0x3b3d1f63,0x39981549,0xba75892c,0xbafaf277,0xbaa0e010,0xbab4025b,0xbb337a95,0xbb6319ba,0xbb11b43e, +0x3b30f288,0xba974142,0xbb59d91e,0xbb321b5a,0xbb2728a0,0xbbb84298,0xbc90a3fa,0xbc638e35,0xbc245edd,0xbb134b90,0xbb359304,0xbb8ad042,0xbc8b4d80,0xbc94f094,0xbc83a3e0,0xbbf4f9a2,0xb9084390,0xb9eb7e63,0xbc257866,0xbc025771,0xbc04f028,0xba37bf28,0xbc00f887,0xbbac4289,0xbb84b6ee, +0xbbaa5161,0x3b12275a,0x3bc6b95e,0x3baacef8,0x3b754891,0x3ab54abd,0x3a8afea8,0xba8bae8e,0xbac16318,0xbafe73ad,0xb97018aa,0x3be99fa4,0xbaaf2f92,0xbba9e97b,0xbbc8b23d,0xbc237208,0x3cbb238f,0x3c72e3b9,0xbc9044c0,0xbb9e8a70,0x3b32f458,0xbb8fdc41,0xbc5fe566,0xbd00d1c4,0xbd08291b, +0xbcbd8eb0,0xbbf146e0,0x3bbbc28f,0x3bd33261,0xbc4feea2,0xbc03e4ff,0xbbfe568b,0x3b61e011,0xbc04666a,0xbba19c26,0xbaf76226,0xbb5b9129,0x3bebe4b5,0x3c763c00,0x3c2d92bc,0x3c04ebe1,0x3b5e7cab,0x3c0cffa5,0x3c05e46b,0x3b4d7118,0x3a621b06,0x3b1e5bf9,0x3c869dfb,0x3bc59ea2,0x3b186dfc, +0x3ab943ff,0x386b2c5e,0xbc8108cf,0xbcac3fe0,0xbd0f879a,0xbc50fd0b,0x3b736e63,0x3bbe9085,0xbaa405cc,0xbccd5a19,0xbd01adb0,0xbcd9eab4,0xbc1100cd,0x3c033f6a,0x3bb28962,0xbc509560,0xbc21e3d3,0xbc39b73a,0x3b08fcdb,0xbc69c153,0xbc0d7ab8,0xbba13072,0xbc816fb2,0x3b02789d,0x3c57d054, +0x3c8b0b77,0x3c4e9bd1,0x3b846dca,0x3c6d2007,0x3c89dfb2,0x3bf76c32,0x3ba161a5,0x3b8fe818,0x3ca90633,0x3bcc500b,0xbb4163e0,0xbc2b48f1,0xbc187810,0xbcdae4aa,0xbd3581ad,0xbd56e375,0xbd6b01b7,0xbdbf875f,0xbd142393,0xbcb07e83,0xbc9e0a91,0xbd12193e,0xbd1636c6,0xbca6ea48,0xbc4344af, +0x3bca397e,0x3b557062,0xbc3d8346,0xbc52776b,0x3ca15b95,0x3c345969,0x3b8857e9,0xbbbc6e51,0xbba94da8,0x3bc56172,0x3c0b0ac5,0x3bfd545d,0x3c41bef6,0x3cd614cc,0x3c9183cd,0x3c63a1ac,0x3c199ca2,0x3c90c3f0,0xb98928e9,0xbbf8ea2f,0xbc92b86f,0xbc987ce5,0xbbef1041,0xbca139e9,0xbcee8242, +0xbcf6169b,0xbdb8d8b7,0xbd9c4af8,0xbd334fcf,0xbc2aacea,0xbbc094a5,0xbb3599aa,0xbd108002,0xbd0688d6,0x3baf4fd5,0xbcb6fc7a,0xbd03a94f,0xbd19764a,0xbcb2ee31,0xbc90c3a7,0xbce2b596,0xbc698089,0xbbc8cac2,0xbc0d4538,0xbc318d41,0xbb726b2c,0x3bf997dd,0x3ca25b8b,0x3cab9ebd,0xbb0f10aa, +0x3bae64cd,0x3b93adca,0x3bc4ac19,0x39382cf7,0x3b31ff4f,0x3c13aa9e,0x3c667436,0x3b3760c3,0xbd078c07,0xbca09102,0x3d03ff65,0x3d0d48f8,0x3d30f058,0x3cddb163,0x3cad461f,0x3cd18bbc,0x3b8e9d74,0xbd1aebb9,0xbd55c0cf,0xbd6ecdc4,0xbbfa7b28,0xbcc8232c,0xbca4ac11,0xbcb5f395,0xbcf1fa72, +0xbcc41298,0xbc9e93ae,0xbc775049,0xbc80cbca,0xbbf6c896,0xbc350fa0,0xbb188f17,0x3bcdd197,0x3ceef20f,0x3cc62d95,0xbbb10061,0x3c11706e,0xbaa029a3,0x3b808c18,0x3b25cf55,0x3c4dcaf6,0xbc362d0a,0x3d0786f9,0x3d2e22e9,0x3d4bfa42,0x3d1d8d91,0x3d47175b,0x3d5a1d9f,0x3d90ca6e,0x3d860153, +0x3d1c15d0,0x3d74dc91,0x3d248b16,0xbc92a098,0xbc57a929,0xbc960607,0x3ca0b8ef,0xbcb1ea91,0xbd0bf03b,0xbd45998e,0xbd627b40,0xbd58bdd5,0xbcf7b679,0xbcbb290f,0xbc83b695,0xbc55d881,0xbc3bcf2e,0xbad0e665,0x3c1461d8,0x3cc99c76,0x3ca1c9ea,0xbb4946c9,0x3c0b4956,0x3bd96641,0x3b89f815, +0x3c0b9e74,0x3c968f5e,0x3c0fd53a,0x3d16a6ff,0x3d34b124,0x3d6d2a8d,0x3d403110,0xbc309621,0xbc9656b0,0xbcb58e1e,0x3bcd5e94,0x3cc00f52,0x3d91da3f,0x3d9946c4,0x3d0e3814,0x3c8b9f88,0xbc04eed6,0xbb431c57,0xbcdb824f,0xbd0b1e5e,0xbd08db84,0xbd2f2a2e,0xbd369ed5,0xbd241710,0xbd01c599, +0xbcae9b94,0xbc72460c,0xbbfdb8c7,0x3a7ca19e,0x3bd2b01b,0x3bad76fc,0x3bb4b814,0xbc16fe1e,0x3bb82e35,0x3c2bd958,0x3b984dd6,0x3c173d43,0x3c98ed38,0x3cfa8b10,0x3cfad807,0x3cbf2e68,0x3b94c538,0xbba3a821,0x3cc77822,0x3c860275,0x3c81bceb,0x3b5234dd,0x3c7ac927,0x3bd8c297,0xb907e968, +0x3a8775ed,0x3c7859c4,0x3d1274fa,0x3d86de85,0x3d3372ef,0x3cb0f862,0x3c40aa0a,0x3cb4ca75,0x3cbda1cb,0x3c91eb54,0x3c9269ad,0x3c498734,0x3c4cf7ad,0x3c11aa35,0x3b8fb238,0x3c673acd,0x3d0115d5,0x3d01ecf5,0x3c708ea7,0x3c8517f8,0x3c577e5a,0x3c7a5e3e,0x3c70edad,0x3c1bac24,0x3c109f10, +0x3c957f0f,0x3cc417d8,0x3cc9a6de,0x3cbdca7c,0x3bd87021,0x3abb3048,0xbb2db535,0x3b65895a,0x3ce1f160,0x3c6cffd2,0x3be3b363,0x3c1bd142,0xbcb022b1,0xbcba8489,0x3c0f17b1,0x3ba6b409,0x3c247111,0x39863640,0xbc306582,0xbc532d50,0x3bd241c1,0x3c360535,0x3c4f75b6,0x3beec0de,0x3aaeb7db, +0x3c4b1b24,0x3c6a7f4b,0x3bd4f1be,0x3c18b078,0x3c76e62b,0x3c864448,0x3c9e45b7,0x3c44e231,0x3cbe7a95,0x3cdc0c18,0x3c9a9bc5,0x3cb893bb,0x3c893c28,0x3c2f4ebd,0x3b91ef25,0x3c64f22c,0x3c4c415b,0x3c1fdc17,0x3c539958,0x3cb0a8a8,0x3c0c203f,0x3906c8db,0xbb56a0dc,0xbc65f431,0xbc4c8809, +0xbbc88b0d,0x3b917c6c,0x3c26f9d2,0x3c3e1015,0x3c4d1ad5,0x3c8fe54d,0x3cfee617,0x3cdc433f,0x3cc98262,0x3cb1d170,0x3ca612bc,0x3c7404a1,0x3c63a662,0x3c69f12d,0x3c55f559,0x3c8b6b7c,0x3c826e97,0x3c83445f,0x3c6fa382,0x3c891e09,0x3c6f36f5,0x3c3a5d69,0x3c3d6872,0x3c2b4112,0x3bdbad33, +0x3c27b6db,0x3bfdab8c,0x3c1461da,0x3c16ae50,0x3c208cf6,0x3bf94e2c,0x3bd4b328,0x3b8539a4,0xbb581381,0x3a3a498f,0xbb66c9ca,0xbc460b54,0xbbd870aa,0xba691a45,0x3b77e71d,0x3c17ff10,0x3c5a702f,0x3c2d9052,0x3c3b11d0,0x3c5598e4,0x3c7f965b,0x3c867e8e,0x3c66adae,0x3c50dc37,0x3c7a31b2, +0x3c8d8cb9,0x3c8a58dd,0x3c81e67e,0x3c8a1db0,0x3c86cbb2,0x3c6334a0,0x3c4ec1b4,0x3c580356,0x3c11e2f9,0x3bd3d391,0x3b9f5778,0x3c05748e,0x3b447959,0x3c1cf721,0x3bceff11,0x3b4172d1,0x3ac7df47,0xbb0c3f36,0xbb84a63f,0xbb7d54f8,0xbc0e18df,0xbbffb31b,0xbbb7174f,0xbc100ec4,0xbc67d9e0, +0xbc907abc,0xbca0405c,0xbc8bf6b0,0xbc73ac6f,0xbc535359,0xbc4e1992,0xbc1f0f5c,0xbaa08d32,0x3b557ab7,0x3be84429,0x3c113a4e,0x3c4af153,0x3c797dc3,0x3c8d00d8,0x3c8b6674,0x3c8518ec,0x3c9e0d50,0x3cb331b5,0x3c985d34,0x3ca48f22,0x3c88f2e0,0x3c2c2625,0x3c5ba295,0x3bba10f0,0x3c0d5e50, +0x3bf411e8,0x3bf5a835,0x3be7cf77,0x3bf47972,0x3be824fd,0x3bda0e12,0x3be0b501,0x3bb0d349,0x3b560aa0,0x3b4187c6,0x3b7c2cfe,0x3b86b4c9,0x3bc90c25,0x3bcc2fd9,0x3bd8d871,0x3be2a518,0x3bf7f1a8,0x3bdc2d7c,0x3bd49316,0x3bca864d,0x3bdfc761,0x3c04a43d,0x3c018815,0x3bdf7a89,0x3bcc6a87, +0x3bc28e8b,0x3bc85657,0x3b94861d,0x3b793e1f,0x3b9e2a62,0x3bc02e15,0x3bd7bb69,0x3b51f322,0x3b775d5b,0x3c5029c4,0xba0499ca,0xbb5d6a8f,0xbb383665,0xbb0280bc,0xbaa593d6,0xb9955c6f,0xba317d6e,0xba32c760,0xba1e4cbc,0xbb38f2a8,0xbb52a7f3,0xba979c67,0xba5094b3,0xb9cf9fcd,0x390be5da, +0xb98545d0,0xb83f4eec,0x3a64a1ba,0x39d96117,0x39ab3e4a,0x3abd9e52,0x39a6397d,0xb9039ecf,0xbad43b45,0x3a4f5a21,0xb8e649c2,0xbb11a4d3,0xbb3dcf11,0xbb473ac3,0xbb34b6a4,0xbb48a325,0xbb385890,0xbad63e96,0xbacc13b3,0xba710292,0xbb955eba,0xbb7e039a,0xbbdb06b5,0xbbe31c02,0xbbd9377a, +0xbb802ad3,0x3b07fb92,0x3b2aa9c9,0x3af216f0,0x3b50a78f,0xbb78848f,0xbbb0cc69,0xbae6efdd,0xbb2d6998,0xbb08080a,0xbac1b939,0xbb23b060,0xbaae7b30,0x3ada0083,0x3a2acb44,0x3afb9bcc,0x3bb6c755,0x3b3aa787,0x3b83730e,0x3b8bc774,0x3b279fac,0x3b32b8d3,0x3b0aa27a,0x3a2f8cf8,0xba3190eb, +0xba87546c,0xbab895f1,0x3ad9a66b,0x3b6f9ac3,0x39491eee,0xbb233980,0xbbb16c48,0xbbb3ba12,0xbc8d5053,0xbc93991e,0xbc62d3ea,0xbc2f0388,0xbb214cf0,0xba2ef8b7,0x3afcfa5a,0x3b31b2ef,0xbc6a0de1,0xbc84537b,0xbc01f62e,0xbbdd2220,0xbb961f69,0xbadaf1f9,0xbb25993a,0xbad49199,0x3bb27dc6, +0x3b113c1d,0x3ba563ef,0x3bfadc51,0x3ba47004,0x3c0b1444,0x3c1c953e,0x3be1b7ec,0x3bb4726d,0x3c0ebf0f,0x3ad3ec4d,0x38bbb9b0,0xba228f2f,0xb9c2fc5d,0x3a1c28e5,0x3bd2e21f,0x3ac1a63c,0xbb5e6c71,0xbc540a95,0xbc7f3414,0xbccd06ff,0xbcc3b0a5,0xbcc0e9d2,0xbc99876a,0x3abd744d,0x3bc7cfa6, +0x3c07891a,0x3c6ecb29,0xbc48bec8,0xbc94e145,0xbc16f1b8,0xbc51ed63,0xbc0cc874,0xbbf5972a,0xbbfc8ff5,0xbb8fe79d,0x3ba17de7,0x3b8317f3,0x3bef2119,0x3c69863e,0x3c3beeda,0x3c8084d8,0x3c89871a,0x3c405382,0x3c08336c,0x3c618e7a,0x3bf1c936,0x3bc20ed3,0x3b0910e5,0x3a93484c,0x3b880511, +0x3c76e029,0x3b2014c8,0xbbc9fd45,0xbc8518b2,0xbca7179d,0xbd370791,0xbd1de2a4,0xbcd047ae,0xbcdca8c7,0xbc73627e,0xbb3e2e32,0x3b5e2f6d,0x3ba57009,0xbce9014d,0xbd1137ab,0xbca41b4c,0xbc8b880d,0xbc49dbbb,0xbb926305,0xbbcf4d12,0xbb0348a9,0x3c2f24f2,0x3bb86639,0x3c312ed5,0x3c945b47, +0x3bf52bf7,0x3c758f1c,0x3ca7a17a,0x3c753ef2,0x3c511dac,0x3c4cda48,0x3c4a62df,0x3c5e112f,0x3b851d93,0x3b942748,0x3b69ff73,0x3c69a220,0x3ae38ebf,0xbc0e043f,0xbcfeec30,0xbd30fc83,0x3b8c7f5a,0xbc06d5e9,0xbd0765b3,0xbce6803d,0xbcbabcec,0xbc9f5c94,0xbc9c846d,0xbc0b2b32,0xbadbec5b, +0xbc38c945,0xbd28ad37,0xbcaf1b26,0xbcfc2ea7,0xbd12d40f,0xbcffe309,0xbcc274b3,0x3b2f22ed,0xbb72da99,0xbb8b6c1f,0xbbcc53bc,0x3bb38f8c,0x3c4b5803,0x3ca7fb9e,0x3c433e58,0x3c22f197,0x3ce71fbf,0x3c808b03,0x3c0bacf9,0x3b996458,0x3be137f0,0xba29c019,0x3bca55a9,0xbc711ee6,0xbc979d7c, +0xbbc2a87b,0x3a3db9a4,0xbd5c7bad,0xbd5ec0a8,0xbd7d4f52,0xbd351323,0xbce9d707,0x3c90d737,0x3cf2bf3a,0x3c7372a5,0xbd0105fd,0xbd4f9035,0xbd17e9f2,0xbbfc06d4,0x3c5d0542,0xbb90293e,0x3bdd79cf,0x390063d5,0xbbbe102f,0xbc1f6f8d,0xbb8fde4e,0xba9603cd,0x3ae342ed,0x3c24c57b,0x3c727fb5, +0x3cd3a92a,0x3cd8bfe8,0xbb1369dc,0x39958712,0xba878391,0x3beba494,0xbc00153c,0xbba94b97,0xbbe890ab,0x3c8a8e4a,0x3c1d9f3a,0xbca010e0,0xbd05b6e0,0x3d04cc56,0x3d6d0c49,0x3d48557d,0x3c86d157,0x3b217f2a,0xbcf1d1a6,0xbd6395e5,0xbc87f059,0xbd8aaa8f,0xbd748b6a,0xbcb89f2e,0xbc3c7841, +0xbc1f40b6,0xbd002f5f,0xbcc17902,0xbcb2f501,0xbc162345,0xba31bb13,0x3b3f17ca,0xbbce93ca,0xbbd7e59f,0x3a547bc5,0x3c68ff04,0x3ca2623a,0x3c4cca00,0xbbf6952d,0x3b09b3da,0xbb7b5e61,0xb9206efc,0xbb07fa6e,0x3bb7d5bc,0xbc6e3c00,0x3cb935d1,0x3cfbdd31,0x3d57e512,0x3d036de2,0x3d8512ef, +0x3da1c295,0x3d536aa6,0x3d1537d4,0x3d16940c,0xbbe5d86e,0xbc3ee23d,0x3c5a1434,0xbd4ab938,0xbd5b1fe0,0xbcbc40e3,0xbc280577,0xba63fe52,0xbcdf54fc,0xbccaf9b0,0xbd0430db,0xbd062b9e,0xbc82a287,0xbbdd5d2b,0xbc588b92,0xbbb3bb6f,0x3b1e2301,0x3cef43c8,0x3c2907b3,0x3bb39c98,0x3b70d7d7, +0x3b0be30d,0x3b8673da,0x3b4146bf,0x3a9f875a,0x3c253c2c,0x3c297df6,0x3cddb869,0x3d1f0f9a,0x3d77c7e4,0x3d7d316d,0xbc2b1aad,0xbbd12a94,0xbc5957f3,0x3c40ede8,0x3d441640,0x3d9383ca,0x3d8ff080,0x3d0e397c,0xbcd1cbea,0xbd684722,0xbd17e04f,0xbd3785e1,0xbcdcbc90,0xbcec6ec9,0xbc95ce74, +0xbc95feba,0xbc9fb637,0xbcc4ffc0,0xbc73c5ba,0xbb9d4dc6,0xbb813634,0x3bbc5145,0x3ca2130f,0x3c30cc43,0x3c5a3355,0x3c020e83,0x3b348312,0x3b5af021,0x3c52159a,0x3b836b61,0x3c25aa3c,0x3ced1a2f,0x3d02b46e,0x3d076aa1,0x3c7e8c7e,0x3bd08a0a,0x3ce7eea6,0x3ca90549,0x3c9ecf27,0xbacd335e, +0xbc5d8f4c,0xbac70cf0,0x3b33cebc,0x3d150278,0x3c6df3d1,0x3cd46135,0x3d376b99,0x3d1767fe,0x3c5349db,0x3a63bb44,0xbc0929c7,0xbbf18449,0x3abedb8f,0x3bbbd756,0x3b8693b9,0x3c075cd7,0x3bc7de30,0x3c28b4dd,0x3c69d5a9,0x3cd8358f,0x3cc46079,0x3c267966,0x3c90f1e8,0x3c9704db,0x3cf7be07, +0x3c866d09,0x3c3f10a5,0x3c1d7240,0x3c64c85e,0x3c90a3a7,0x3cc39340,0x3cd41905,0x3a780061,0xbbdc2cdd,0xbbd2c7d7,0xbab6fc90,0xbb8981af,0x3c600781,0x3c909f00,0x3c12627c,0xbc3bdf25,0xbc8644d3,0xbbe16f1e,0x3c42c7db,0x3cf1468d,0x3d170c73,0x3d1dbf44,0x3cf80d91,0x3c4aa352,0x3c4d8372, +0x3c5d248a,0x3c711524,0x3c940bbe,0x3c9cc466,0x3cbdfb11,0x3c468f8c,0x3bf60708,0x3ba2320e,0x3c1f00d8,0x3c7bebf9,0x3c9ec3b7,0x3cb11168,0x3cacb2ed,0x3c97851b,0x3cc538ce,0x3cb6e8fa,0x3c999ba5,0x3bc5942b,0x3b8eb8fd,0xbaaaa215,0x3bd1eaca,0x3c03410f,0x3c1e9c88,0x3c298d60,0x3c165e26, +0x3c23b156,0x3b6ff4dc,0x3b396c83,0x393d5b58,0x3c14e404,0x3c7cedfa,0x3cbcd94c,0x3ccd0404,0x3cb025f1,0x3c6ea0f6,0x3c863d3c,0x3c72ecb0,0x3c84abf0,0x3c82a55a,0x3c4704b4,0x3bfc19ea,0x3c4c93bc,0x3c6109ac,0x3c98851d,0x3c85e4b5,0x3c622c9e,0x3c35f1c1,0x3c4c80e8,0x3c49f052,0x3c3358ab, +0x3c579673,0x3c40fb33,0x3c26f8b8,0x3bdcef39,0x3bea4a29,0x3b87d224,0x3c108661,0x3c67c0ae,0x3cb3dd78,0x3c8a6d11,0x3c6c459b,0x3c5277ca,0x3bfdd4cd,0x3a9645c4,0xbbec52c6,0xbb3b8d32,0xb9c6cf28,0x3b9378d9,0x3b16d679,0x3b868c20,0x3c0d599c,0x3c15aeac,0x3c2e0436,0x3c1c7837,0x3be9f121, +0x3bd62d6f,0x3b05c190,0x3c223d1c,0x3c858b3c,0x3cc348bf,0x3c8c25e4,0x3c5d27e3,0x3c35e678,0x3c3c255b,0x3c621ece,0x3c817100,0x3c5ff107,0x3c20034b,0x3c266aea,0x3c13ef39,0x3ca86a86,0x3cc42d62,0x3ca6f63e,0x3c76e06e,0x3c03a9af,0x3c17c3b8,0x3bf76350,0x3be39c0f,0x3bdc2ee6,0x3c0ef3cf, +0x3c22a87b,0x3bf2d33b,0x3b5deef9,0xbaa07b48,0x3a4feb31,0x3aaa770b,0xba631c44,0xbaeaf1ae,0xbade76be,0xba97d3ae,0xba4c80cc,0x3bbadad8,0x3c296cc5,0x3c3f9544,0x3c3143fa,0x3c319d4b,0x3c835d35,0x3c96e8ec,0x3cab0b48,0x3cb9b607,0x3ca64e40,0x3cc1524c,0x3cb6b524,0x3cbb6d20,0x3caf0f5f, +0x3cbde3ab,0x3c29d95d,0x3c35dc2d,0x3c334113,0x3c423498,0x3c4bd2c0,0x3c4f0c4b,0x3c3fe00f,0x3c3bf7b7,0x3c2f19b4,0x3c18399a,0x3c05cc3e,0x3c02cd90,0x3c11f519,0x3c179a7c,0x3c134d9c,0x3c0e096e,0x3c1d70c7,0x3c256b0a,0x3c1ec533,0x3c208863,0x3c17ece0,0x3c0ae1da,0x3bf5ccd4,0x3c27f44f, +0x3c3d8a38,0x3c48eca5,0x3c49edd8,0x3c2f9cf4,0x3c2ce541,0x3c315a1e,0x3c35bd79,0x3c38898c,0x3c2fb28f,0x3c2cd9a0,0x3c13d146,0x3c244ab6,0x3c8c8847,0x3a9a7d4f,0x39ce6ea8,0x387772a1,0xbb216be8,0xbaeb02b6,0xb546517b,0x3aff5140,0x3b250cf4,0x3b69935f,0x3a2ff8eb,0xb907ea4f,0x3aa67817, +0x397bec61,0x39121b70,0xb8d691e4,0x39d32f3f,0x3a4f713a,0x3a9d7980,0x3a9ee441,0x3acab9f6,0x3b0bd463,0x3b2584d7,0x3b1d4e7c,0x3ae967e5,0x3b23acd3,0x3b1405c3,0x3aefd65e,0x3a07c036,0xb77684df,0x376cb9cf,0x39859b73,0x39db5028,0x3ab9842f,0x3ab1afd4,0x3a50d046,0xbb180afd,0xbacf03c4, +0xbbf14567,0xbb373ad2,0xbb9c6399,0xbbdb98f6,0xbbd8bef0,0xbb13d29f,0x39eb0203,0x3b395274,0xbbb268b8,0xbb9a072a,0x3b236113,0xbaa47e81,0xbab99622,0xb9834cfa,0x3aa12fcf,0x3b09b9f2,0x3b525779,0x3b2c6f31,0x3b538f2d,0x3ba2da0a,0x3bceca38,0x3bd8f817,0x3bc6d2d3,0x3ba2237c,0x3b924f91, +0x3bb56b93,0x3ad38505,0x39ff4045,0xb9b3ee1d,0x3a23d461,0x3b3b4983,0x3ba39350,0x3b52beb0,0x3ada6791,0xbb3e0232,0xba95241c,0xbc3fe67e,0xbb83b305,0xbc84ee47,0xbc66de1d,0xbc0ab3ec,0x3b609607,0x3be9472c,0x3c5c6dba,0xbb1f3400,0xbbd15ccd,0x3b82632b,0xbb646bc4,0xbb2bbc35,0xbad075af, +0x399acb3e,0x3b0a49a7,0x3b5f8727,0x3b773efd,0x3b9dc454,0x3c157d10,0x3c47a0ea,0x3c3beaa4,0x3c3583f9,0x3c25f67a,0x3c0d70ec,0x3c362517,0x3b1961ec,0xbab02175,0xb9106b28,0x39f2bada,0x3b599d4c,0x3c079d62,0x3bbc8d51,0x3abff9c2,0xbc4c77de,0xbbccdba0,0xbc74faf8,0xbbd5668f,0xbc647035, +0xbcb98204,0xbca99946,0xbbde1fad,0xbb597950,0x3bf7710e,0xbc6d4e54,0xbc8a1a78,0x3c16811e,0xbbffb1c2,0xbbb8e115,0xb9a483c3,0x3b1b747f,0x3b842ffe,0x3bb9db70,0x3ba0c51c,0x3bd9802e,0x3c3b36e5,0x3c89223c,0x3c9099bb,0x3c893645,0x3c60af9a,0x3c422d7e,0x3c8c5a70,0x3be3d562,0x3b2df9cd, +0xba1156b9,0x3a67275d,0x3bbf1cd4,0x3c76e820,0x3be55c84,0x39fe95d0,0xbc2444c7,0xbbc4939e,0xbc946b76,0xbc68b6b2,0xbcd2dd15,0xbcf0ccfa,0xbc2584b1,0x3c2887aa,0x3ca2d2e0,0x3cdad56a,0xbb466f26,0xbc3eebe5,0x3c02dfa0,0xbbe9134c,0xbb9dcb62,0xba297c23,0x3a2ae113,0x3ad7b766,0x3b33c89d, +0x3bbf049d,0x3be9f48f,0x3c4dbca5,0x3cbabb44,0x3c9c88d8,0x3cabd746,0x3c8c4df8,0x3c821b23,0x3c9f80b5,0x3c370a34,0x3c19374f,0x3ae6c186,0x3b5170d2,0x3ba34389,0x3c8df6ac,0x3c159848,0x3b3417a5,0xbca90c3a,0xbc778b4e,0x3ced6b0c,0xbc2c3249,0xbcfa3801,0xbd1fc2cf,0xbd524936,0xbceadae1, +0xbcadaa11,0xbbfe94af,0x3c739bab,0x3b988e50,0xbd2432ea,0xbd10b736,0xbd1890f4,0xbd04c3a8,0xbb86f189,0x3b3b8ea9,0xbcc4b66b,0xbca69ee4,0xbc77d9cd,0xbbd9003f,0xbaa8a93f,0x3bde6c61,0x3c915e94,0x3bddbe6a,0x3bf1683d,0x3ccd7f49,0x3c1db04c,0x3b38a4ca,0x3b59c6f8,0x3bdec929,0x3b36dc29, +0x3bc2fe48,0xbc27d7e2,0xbc018f6b,0xbbb1c533,0x3cb5396d,0xbd675801,0xbd6c7fd7,0xbd666221,0xbd0d105b,0xbca59faf,0xbb9538a1,0x3c82f34b,0x3c4239fa,0xbce3b5b7,0xbd23e459,0xbd6e7a02,0xbc5bb294,0x3baeacb3,0x3c2b97a8,0x3be941be,0xba1f40d2,0x3c2923f3,0x3be52c37,0x3a2b5fca,0x3b57cb5b, +0x3bff01cf,0x3c4c0a6c,0x3c42d59d,0x3cc44922,0x3cd117ea,0x3b7fa59f,0x3b2f14a3,0x3b1143ca,0x3ba9b61d,0xbb01b741,0x3b2a7c1f,0xbc055058,0x3c97e74c,0x3c2c4593,0xbbf5ebc9,0xbd04dfe7,0x3d499724,0x3d033e25,0x3ccce004,0x3c1e0a90,0xbd044b01,0xbd2b377a,0xbd60f8a2,0xba11c91d,0xbd58709b, +0xbd6900e5,0xbd8a8994,0xbcdacf63,0xbc8217e8,0xbd0a1a39,0xbc70d2cd,0xbc72f12b,0xbc18daaf,0xbbf245a0,0x3b065937,0xbb90b3fb,0x3b5be632,0x3c0c3efc,0x3cf99ee6,0x3bd9deeb,0x3a069461,0xbabd83b1,0xbb8d7dcd,0x388f027b,0x3a78a3a6,0xbb071187,0x3b1b3d29,0xbc4ed9a8,0x3c2ee74e,0x3c914cb6, +0x3d819fb7,0x3d11310c,0x3d8ae202,0x3d7f8d6f,0x3d260236,0x3ca43e01,0x3c34eda0,0xbd014fca,0xbd52df52,0x3c62db7f,0xbd9c0455,0xbd9ded0d,0xbd74a8cc,0xbccee140,0xbbb61208,0xbcb7ed65,0xbbbc410e,0xbbf9a7be,0xbc40bb1c,0xbc506d12,0xbc16b9d0,0xbc18743a,0xbb4e2aa7,0x3c0ccd1f,0x3d2ae925, +0xbb065376,0xbbf5aa08,0x3bb33180,0xbb0c29ae,0x3b75b081,0x3a125283,0xbb438f4c,0x3a42140f,0x3c244752,0x3c9c596f,0x3d008b22,0x3d8d8ca0,0x3d732bdf,0x3ba4e56a,0x3c94a1c8,0x3cf0ec36,0x3d372deb,0x3d9f2cff,0x3d756f99,0x3d674ebe,0x3d1d3cdf,0xbd0d35aa,0xbd537332,0xbd1f66ea,0xbc1aa1ca, +0x3a147129,0xbc8cea11,0xbcb2ab44,0xbcd0ec5c,0xbc90c751,0xbca2d67a,0xbc924d8b,0xbb8d9de0,0xbb80bc28,0x3b355b5e,0x3d02ac2f,0x3c648cc3,0x3c399801,0x3c338631,0x3b9eb95c,0x3aba7c7b,0x3c01c018,0xba81f40e,0x3b4f7feb,0x3cb29022,0x3d045848,0x3d13e778,0x3ce28426,0x3c8354cd,0x3ce3b714, +0x3cbd5fac,0x3c98a8dc,0x3bec935c,0xbbfcc6a3,0x3bf756c8,0x3cd698c8,0x3d9038d1,0x3d1c1681,0x3d106e76,0x3c14d0c5,0x3b45ba09,0xbb4f9a41,0xbcb0edf6,0xbce1da1c,0xbd07c0fe,0xbc95aa34,0xbc8af691,0xbc24f5e2,0xbbb5a922,0x3baf19dd,0x3c32c6ff,0x3c78a16c,0x3c627d01,0x3c626178,0x3c445763, +0x3c6ce54c,0x3c90e292,0x3ced07be,0x3cc35ae9,0x3cadb24c,0x3c531881,0x3c5ed451,0x3c7cd83f,0x3ccc1ab6,0x3cbd3c85,0xbaf17ed6,0x3847f78b,0xbbca30d2,0xbb643bfd,0x3b47102d,0x3c82e9cb,0x3cb4186e,0x3c7d8fca,0x3c92d841,0x3c56d649,0xba9b186a,0x3cba22d2,0x3d0aca88,0x3d30e0e9,0x3d2bb3bd, +0x3d17ea28,0x3ca5a3ed,0x3c5f7730,0x3c1bf02a,0x3c570430,0x3c80119e,0x3c58be5c,0x3c94a728,0x3ca1c3b8,0x3c8489d3,0x3bd37306,0x3bee5d65,0x3c2fd8f1,0x3cae4f61,0x3c54d9c0,0x3c6af06d,0x3ca28c53,0x3cb8af99,0x3caf245e,0x3c9794b6,0x3bec5157,0x3be02d4d,0x3b96729f,0x3b7e456e,0x3b3a0954, +0x3ab85dad,0x3c197658,0x3c5fa4fa,0x3c85f494,0x3c9c529c,0x3c92b5d5,0x3c165615,0x3c7ae47d,0x3c800750,0x3caecd94,0x3cabd54e,0x3c8db29d,0x3c592a67,0x3bf4a594,0x3bac8b56,0x3b5ed9ec,0x3c1e566c,0x3bf84eea,0x3b38e3ff,0x3c24320e,0x3c69d9c4,0x3c87d45c,0x3c6e9654,0x3c3de34d,0x3c485cff, +0x3c3ca3e6,0x3c4ed171,0x3c8aefa2,0x3c6e5aa0,0x3c6aaa66,0x3c54c6b6,0x3c3a980e,0x3c2d5d32,0x3c2f665f,0x3c5701f2,0x3c6b4f94,0x3c87d79d,0x3c76805b,0x3c7b1f2f,0x3c927381,0x3c3679ca,0x3c190fb9,0x3c0be734,0x3b6e8e7c,0xbb196793,0xbb896e93,0xbb8e6bf0,0xbb91557f,0x3a87d942,0x3a0f7cb7, +0xbbba75fd,0xbb0752f6,0x3a8307b8,0x39da0f32,0x3a0b0223,0x3b9484f0,0x3c33662d,0x3c9975ca,0x3c806907,0x3c5087a7,0x3c099421,0x3c44342d,0x3c5c4ecf,0x3c76fc2b,0x3c57ff9f,0x3c4b4aea,0x3c365dc1,0x3c2b4c0c,0x3c9ed332,0x3c79ffdb,0x3c62db0f,0x3c34e0ce,0x3c0232dd,0x3c270565,0x3c0b8b4f, +0x3c049fe0,0x3c2cf097,0x3c38af6b,0x3c345cec,0x3c57795c,0x3c87e986,0x3c897673,0x3c8b1279,0x3c76447f,0x3c39c740,0x3c331e41,0x3c4ac263,0x3c31c573,0x3c2f5cd9,0x3c464f7b,0x3c68de95,0x3c72e1a4,0x3c4c1366,0x3c34717a,0x3c48e804,0x3c641db8,0x3c8555bd,0x3c80b59f,0x3c456177,0x3c7d43dc, +0x3c6d9028,0x3c804cb4,0x3c986e64,0x3c86c518,0x3c183101,0x3c1c01f1,0x3c2b8929,0x3c2e9715,0x3c2a0a0d,0x3c294090,0x3c222e07,0x3c1eb4f9,0x3c0ec4cf,0x3c08e0d8,0x3c087419,0x3bf011aa,0x3bc2419b,0x3bb6f826,0x3baf8d13,0x3bc5eaac,0x3be3cdee,0x3be446d7,0x3bd524e5,0x3bcc9d37,0x3bd578a2, +0x3be33743,0x3beab3fe,0x3bf2f05b,0x3c137b57,0x3c2bfd13,0x3c341a8d,0x3c22e923,0x3c1c742a,0x3c28bf24,0x3c333bfc,0x3c2af378,0x3c0f97c2,0x3c07a2f5,0x3c2af204,0x3c1efb7e,0x3c6fc7ca,0xb959c479,0xbb123f8c,0xba6b8f41,0xbb31d867,0xbb152b31,0xba1bb139,0xba5949a6,0xb9d3e337,0x3a3e7d2e, +0xba50b5ce,0xbaa8087b,0xba59e2df,0xbaafbc2e,0xbab65af2,0xbae75a0a,0xba55985f,0xba1904be,0xba1f6a40,0xba08f4be,0xb951166c,0x39bb2754,0x3a7b05ea,0x3aa5497c,0x3afc8bd8,0x3a99155b,0x3aa54e58,0x3aff7116,0x3a3bf0a8,0x38b8d3ed,0xb905c8ca,0x3a017f46,0x3a7ac4c8,0x3ad853ba,0x3a4853fa, +0xb99cf4c9,0xbaf90f5c,0xbaff9b3e,0x3a372bb7,0x3b46cb33,0xbbb2d2ea,0xbbef766c,0xbb0671b8,0xbb3e39ac,0xba94ece6,0x3b7da90c,0x39a7f6cf,0xba56410b,0x395794a2,0xbaf51112,0xbb50ebd4,0xbb6e206d,0xb9704a05,0x39a375a2,0x39794f1c,0xb99e77b6,0x3a55bce5,0x3b63214b,0x3bb24cd4,0x3bc62955, +0x3bb27de3,0x3b8d5c75,0x3b51cead,0x3b9059ed,0xb839dd5f,0xba661655,0xba9c515b,0x39ae4c0b,0x3aeee768,0x3b8ba3f7,0x3b418deb,0x3aac1d2d,0xbb544e85,0x3a2e2201,0xbbe4b986,0xbae5f8ca,0xbc62a5fe,0xbc5d79cd,0xbad13d1b,0xbb93944e,0xbae7d371,0x3bea0b01,0xbaa39ac6,0xbb704de4,0xbad8290d, +0xbbbf4891,0xbbc7c82d,0xbbe8228b,0xbb08da54,0xb95949be,0xba25c972,0xba2060b9,0x3a7d9745,0x3bb5b47c,0x3c11613b,0x3c26edc8,0x3c0dae71,0x3c1c1619,0x3c000cb6,0x3bef3859,0x3a7af93c,0xbb31324e,0xbb0b61b4,0x384ca54e,0x3b5a7b8f,0x3be874c2,0x3bb0a2dd,0x3b077214,0xbc245ab2,0xbbaf956b, +0x3bbda6c5,0x3c007b63,0xbc9c63ab,0xbcbb33e9,0xbb377e1a,0xbbf184e4,0xbb50a51d,0x3c5784bf,0x3b793da6,0xba8f794c,0x3b4df277,0xbba39d41,0xbc00920f,0xbc10cd5b,0x3a72e1eb,0x3b26e919,0x3b33d842,0x397bfd9f,0x3b8bb41f,0x3c3395a5,0x3c735b6d,0x3c96658c,0x3c84d4f9,0x3c5f0efa,0x3c4ff894, +0x3c6bc37a,0x3b8bd2e9,0xb8682174,0xbae941e5,0x3a815935,0x3bd4284b,0x3c4cb7f0,0x3c1db2ec,0x3b8a3a61,0xbbf4ccfd,0x3b2cf45d,0xbc72a5be,0xbbf35253,0xbd00c594,0xbcd650dd,0x3b9529f8,0xbc2de9d5,0xbade6ff5,0x3c5885b2,0xbb076be8,0xbbf72998,0xbb64ca74,0xbc08c26b,0xbc2c0b84,0xbc36a3bc, +0xbb2fddab,0xb90e0df1,0xb9aa8a68,0xba339baa,0x3b78c736,0x3c41b01f,0x3c639a8b,0x3ca26234,0x3c9f76e2,0x3c8ecfce,0x3c71a8c9,0x3c9e9f7f,0x3c0b400f,0x3baddf07,0xb825541e,0x3abcfbfe,0x3bbdd632,0x3c74db4e,0x3c525e5d,0x3c216466,0xbc994260,0xbc0b6499,0x3cde9124,0xbd2ea643,0xbd030a5c, +0xbd3931f7,0xbd9b8962,0xbd12ccde,0xbccab3e2,0xbcda2afc,0x3cf95eeb,0x3d10df0c,0xbc0baebf,0xbcd409c9,0xbcb630b2,0x3ae3f49d,0x3c4713e5,0x3c4f7747,0xbc1ae0c4,0xbaf935fe,0x3a4d524e,0x3b4003cd,0xb8933098,0x3bccd81b,0x3c3a87f1,0x3bfea84e,0x3c25789c,0x3cb35fe3,0x3b8a95fd,0xba484259, +0x3be98433,0x39c74fe1,0xbbec6086,0x3b9cb5ef,0xbc247b37,0xbc1de820,0xbc32085d,0x3cd7eb34,0xbd5986b7,0xbd6729cc,0xbc81b260,0x3b89fcc6,0x3d2ebc51,0x3a0b9087,0x3c189966,0x3cbdc48c,0xbae9bab7,0xbcd96333,0xbd42cf22,0xbd2427e9,0xbd1e24b7,0xbc9a78fa,0xbcb77de8,0xbc5e138e,0xbb0e876a, +0xb927ec5f,0xbacd68c4,0xbb020833,0x3bfcc65d,0x3c2e0539,0x3c96fd85,0x3c6a0b86,0x3c506c44,0x3ba38b43,0x3b46bf56,0x3ae17edc,0x3b405164,0x3a1ede02,0x3abd2842,0xbbca463a,0x3c3ce12f,0x3bd8f474,0xbb1e5cdc,0xbd012900,0x3ced9927,0x3b46e815,0xbc880d0d,0xbcf93fab,0xbdaa2ac7,0xbd6e26a2, +0xbd606468,0xbcd747db,0xbcb5d797,0xbcb41ebd,0xbd134081,0xbce3db3e,0xbc8403c6,0xba8083cf,0x3a9a2502,0xbb5a6485,0xbb55d645,0xbbfca4ed,0xbb95605b,0xbb516e8e,0x3bb1fd1d,0x3c7d867e,0x3d17ada2,0x3b835784,0xbadffa82,0x3be6bb61,0xbb7d9278,0x3b8cea6c,0x3b2a293c,0xbaa68453,0xb73d6b87, +0xbbd95d39,0xbb7251e7,0x3b0e9a3e,0x3d196235,0x3cfde9cd,0x3d6737f6,0x3d14799e,0x3c3a6d66,0xbc1743ff,0xbd368775,0xbd3c5f48,0xbd590677,0xbcf44fbc,0xbd3797de,0xbd154554,0xbd3e7621,0xbcc4c944,0xbc86b017,0xbc5f8118,0xbbda326b,0xbbeaacfb,0xbc32eb3b,0xbc3ec2c6,0xbc222ab4,0xbbe37781, +0xbbb2e5ff,0x3b7843ad,0x3d13a5c7,0xbb5f93bc,0xbc12f488,0x3bf47d81,0xbb767fe0,0x3b92a36f,0x3ae1dd1c,0x3ac2abf0,0xb958c392,0x3c0c7ce5,0x3c0ddd4e,0x3ca6dc62,0x3d565ebc,0x3d5a253a,0x3cd4097b,0x3d327e42,0x3da99d4f,0x3dab74ff,0x3db2d00a,0x3d56e0a0,0x3d08333f,0x3bb6263d,0xbcd119dc, +0xbce4f0ed,0xbcda7e6a,0x3c55f83e,0x3c7661a6,0x3ba15bc9,0xbc548b42,0xbc8ab309,0xbc5efe5e,0xbc7bb3c2,0xbc8d29c3,0xbc613d19,0xbc3fd169,0xbba2f104,0x3cd0a8a4,0x3bc30b3f,0x3bb0fb29,0x3c11b3c5,0x3b44cee9,0x3b0fb60d,0x3b3219a5,0x399c4997,0x3bb86cd9,0x3ca33ee0,0x3cf087ed,0x3d0ed986, +0x3d2e11b4,0x3cd73e56,0x3ca18ac8,0x3bbcf215,0x3a40722f,0x3ab9c706,0xbbdb77ae,0x3cd0cf03,0x3d52152b,0x3d9f2afd,0x3d545109,0x3cf2a7a9,0xbd00a66e,0xbd0fae79,0xbce7b820,0xbc92e7f2,0xbc7fef25,0xbcb0bf2d,0xbcec7b76,0xbcc27958,0xbc8069b9,0xbc047d18,0xbac1a652,0x3c08b488,0x3c9a22b5, +0x3c29df4a,0x3bef63d8,0x3bd0970a,0x3c8c0cf3,0x3cac72d8,0x3cb1511f,0x3ccf463d,0x3cbddd96,0x3cce59eb,0x3c96f8b4,0x3c7d0400,0x3cb67fe7,0x3c8a09a3,0x3c1afa55,0x3c679363,0x3c82052f,0x3c63c390,0x3cbc4eab,0x3c78de4f,0x3c980205,0x3d09731c,0x3d02ab13,0x3d076547,0x3d0ee096,0x3d068078, +0x3ce533c0,0x3d0ecead,0x3cf18aff,0x3cf89bb4,0x3cdd545e,0x3cb5e20c,0x3c8bf80c,0x3c379a45,0x3c3747cc,0x3c2e641e,0x3c2747d1,0x3c82cc02,0x3c9977d7,0x3c71dfea,0x3c348d32,0x3c243b8b,0x3c287ce4,0x3c107d6a,0x3c1f11d1,0x3c64e4ed,0x3c9b400c,0x3cb3991c,0x3cc30215,0x3c92f847,0x3c0939d1, +0x3b3f92b6,0xba0bd1e6,0xbb6228cd,0xbb935ff3,0x3aa8365c,0x3ba89e98,0x3c84b5d0,0x3c9627d1,0x3c943483,0x3c65580b,0x3c17e867,0x3bcda48c,0x3c6d2e13,0x3c30d32b,0x3bc20aa7,0x3bb54201,0x3b011189,0x3bb8b157,0x3b3d057c,0x3b03fbd6,0x3ba0ba6f,0x3c1c6229,0x3c337c1a,0x3c519ae5,0x3c435c49, +0x3c48cc8d,0x3c361c85,0x3c401a50,0x3c36c086,0x3c44520a,0x3c6e8373,0x3c5516c7,0x3c4ffe23,0x3c47b8b6,0x3c2ff873,0x3c0f1ca8,0x3bc53fe6,0x3bc69e25,0x3c01662d,0x3bc606ef,0x3c04b3d5,0x3c03b4ba,0x3ba5f001,0x3b30b4e8,0x3b81cd9a,0x3ab793cc,0x3ba11c85,0xba3730d5,0xbb7249a6,0xbbafa9a4, +0xbc160661,0xbc0e8cbb,0xbbcbcdf8,0xbc1f830a,0xbbeac19e,0xbb39a900,0x3b57aa10,0x3c0a22e7,0x3bcdd0a0,0x3bf8c83c,0x3c2575d4,0x3c3dd86a,0x3c3d70b3,0x3c5b328b,0x3c562bc8,0x3c5314ad,0x3c461b86,0x3c3610bf,0x3c1ce0c5,0x3c1a5e8a,0x3bfa6f1a,0x3c6b8157,0x3c759461,0x3c63dc77,0x3c41065e, +0x3c2c6c91,0x3c28c971,0x3c18d99c,0x3c3a4d53,0x3c53ee23,0x3c518e43,0x3c590f58,0x3c48064c,0x3c70e49e,0x3c800aa3,0x3c8cf5d1,0x3c91ef82,0x3c878597,0x3c81fc25,0x3c8b0a09,0x3c658e87,0x3c4e0bc4,0x3c3cff50,0x3c382dcf,0x3c62f659,0x3c72052a,0x3c71dd95,0x3c609df0,0x3c47d424,0x3c3908bc, +0x3c2e3a39,0x3c1287b2,0x3c1be095,0x3c2b2c3c,0x3c304d57,0x3c550ea9,0x3c6273d9,0x3c2d3adc,0x3c49a46e,0x3c4b529c,0x3c4a3d0f,0x3c44623e,0x3c47cb1b,0x3c3c30fe,0x3c26b2cc,0x3c16d0db,0x3c12d8b6,0x3c140a98,0x3c122096,0x3c075c47,0x3bf8430b,0x3bea59f3,0x3be4e114,0x3bdf77e2,0x3bebf5bc, +0x3bf389e0,0x3c029093,0x3c06fb87,0x3c0956a0,0x3c00ec8d,0x3c24a688,0x3c15b46d,0x3c0f9bd6,0x3c19252c,0x3c169658,0x3c1a6176,0x3c201e46,0x3c19f3ab,0x3c15b830,0x3c280957,0x3c347351,0x3c0b4963,0x3c1e6fe0,0x3caece84,0xb9a186a8,0xb9faff85,0xb9e35ca7,0xbab9099d,0xbaa6eae7,0xb89ec851, +0xbaae319d,0xba941264,0x395c283c,0x381c05aa,0x3936a9fb,0xb9f3a24c,0xba8e1515,0xba9d97bf,0xbaa6dfa7,0xba258d0a,0xb9f7a805,0xba23e6dc,0xb9df8220,0xb8a70b02,0x3a152075,0x3a7e36e8,0x3a93a936,0x3a98a99b,0x3ab1c976,0x3a88e726,0x3a1010b5,0xb8f05dd0,0xb9f591e6,0xba148b6b,0xb89fb184, +0x3993b7d5,0x3a5f1642,0x3a7ef89e,0x3a3ce86d,0xbadda271,0xba41a5b7,0xba37896e,0x3a74f2d8,0xbb8ae7f8,0xbbb14bad,0xbafface2,0xbbf53037,0xbbb8a34d,0xb902e0e5,0xbabb6e8f,0xbafbd117,0xbb172b01,0xbb24abeb,0xbb5826f2,0xbb818398,0xbb0bbe31,0xbad4b88a,0xbaf6ecae,0xba96818a,0x39db4bab, +0x3b691f9f,0x3b9cd5cf,0x3bb3227e,0x3baa78a4,0x3b84bc0b,0x3b48b5d5,0x3b3b38be,0xb9fa45e3,0xba97adb5,0xbaac1fd1,0x39baf984,0x3b15f61c,0x3b59605d,0x3b61469c,0x3b0cadc8,0xbb3e6efe,0xba934fba,0xbba68eb8,0xbb4a97c6,0xbc07d07c,0xbc0403d2,0xbb3b3184,0xbc3d6abd,0xbc29468d,0xba98c815, +0xba133d3b,0x3973b60d,0xbb82d47f,0xbbc80f1f,0xbbf2ed38,0xbc0488f9,0xbb88cde7,0xbb39beb4,0xbb3c081a,0xbadd6be9,0x39f7624c,0x3bda2a53,0x3c063287,0x3c1d2356,0x3c165ffa,0x3c129f48,0x3bd69278,0x3b8fc02b,0x37d6a3fc,0xbb3241f5,0xbaedb560,0x386e3894,0x3b4e1b0a,0x3bc3d22e,0x3be710d6, +0x3b867f5c,0xbc048d1d,0xbb899c91,0xbbfeca51,0xba25a124,0xbc5e9f57,0xbc89527d,0xbbde2f6b,0xbcbd4462,0xbc93a1da,0xbb3e89fd,0xbb7508eb,0xbbaa2434,0xbc0166d9,0xbbf9df8c,0xbc3243a8,0xbc74bf09,0xbbf073bb,0xbbb971ec,0xbb8eac86,0xbb68c551,0x3ae1be76,0x3c4dba80,0x3c78d532,0x3c920372, +0x3c89a0eb,0x3c54bf48,0x3c43669b,0x3c419aa1,0x3b0cc2c9,0xbaa79943,0xbb1ef673,0x3a3fd47b,0x3bf0feaa,0x3c2a18d2,0x3c2720af,0x3b8e1f65,0xbc29a620,0xbc04422b,0xbcb842e4,0xbc6b04a8,0xbc70300d,0xbc799216,0xbbae5277,0xbcbbb21f,0xbc9b37c3,0xbbaa475d,0xbb30d870,0x3a883b5e,0xbc2d60c3, +0xbc3f9083,0xbc853fb3,0xbc99e5e6,0xbc1f6854,0xbbb1a705,0xbbb1c644,0xbb9d9e3c,0xba04ae41,0x3c7920bf,0x3c854f95,0x3caf4981,0x3cbf4eab,0x3c8247c2,0x3c4fce2f,0x3c88ebde,0x3be676c5,0x3b3dae2f,0xba21e8d0,0x3a7cdc01,0x3bc51bcd,0x3c434732,0x3c33da51,0x3bfc9aa0,0xbcc1cf83,0xbca48ea6, +0x3cdd5d15,0xbd3e6a58,0xbd000ed4,0xbd1afe06,0xbd7f0577,0xbd1b81f7,0xbcb8107e,0xbc9ad3d5,0x3ccf15d9,0x3cd9478b,0xbc107109,0xbc745844,0xbcd6563b,0xbcddc5aa,0xbc83f2cd,0xbbe45ff3,0x3ad5fdd3,0x3be03524,0x3c345cbb,0x3c5c1c54,0x3c23ddfd,0x3c1e9991,0x3c0b51b5,0x3c7fa07f,0x3c7229a6, +0x3c85496e,0x3b10c3e3,0xbb37a29f,0x3be32fbb,0xbc23480b,0xbc0edb76,0x3c7eab1a,0xba87ee4f,0xbb65e241,0xbc07cf6f,0x3d10ebb1,0xbd27941d,0xbd2b65fd,0x3bde376d,0x3b8efd26,0x3cb5c3ed,0xbbe2ed59,0xbc80b795,0xbcbdce38,0xbbd68358,0xbb1ab065,0xbc890543,0xbce16ea9,0xbcec8dbc,0xbc822a2e, +0xbbd5e079,0xba1ccc58,0xbb5b068b,0xbbd272ac,0xbb8e7158,0xbb912ff6,0x3b9171f9,0x3c46c93e,0x3cd57dfa,0x3bf9b4a7,0x3b5492a6,0x3b272208,0x3a835a7b,0xba34a232,0xba952f33,0xbbbc25d1,0xbbed742c,0xbc13dda4,0xbbf66d4a,0xb9995525,0x3c75af25,0xbcc45fad,0x3c5adfe7,0xbcf1e00c,0xbd8805f1, +0xbd61967a,0xbda119a6,0xbd4de804,0xbd146d44,0xbcedc2ea,0xbaa29e68,0xbad9e894,0xbd13ab01,0xbd0577a9,0xbcbb3ab8,0x3c5f8cf2,0x3c7dbf7d,0x3c6549c8,0x3c23b9fa,0x3bef0794,0x3c083e77,0x3b314be2,0x3bda61e6,0x3c6d639e,0x3cf0f16f,0x3b034b99,0xbb96b9ca,0x3b85a567,0xbb4acde3,0x3b2a85c4, +0xbad09809,0xbb43f5d6,0xbb33fbf5,0xbab420c8,0xbc15a9f5,0xbc28d710,0x3c4fa75a,0x3c676d55,0x3d02d542,0x3c18eb4d,0xbc7a8094,0xbc9eb364,0xbd4df835,0xbd09b562,0xbccca054,0xbd22b16c,0xbc2ac069,0xbc368c3c,0xbd19b9d6,0xbce6779f,0xbca1f570,0x3c394491,0xbb9e9a3a,0xbb80738c,0xbc197978, +0xbb67c0e3,0xbaa28f4d,0xbb31d4d2,0x3b912cb3,0x3c02584d,0x3cdda912,0x3aa8f4f4,0xbb9d3387,0x3bfea7cf,0xbb7fd3ed,0x3b87af3a,0x3ac81e0f,0x3b9b401a,0x3b8581ef,0x3c1f8236,0x3bacccb9,0x3c605210,0x3cf2afb6,0x3d0d68a4,0x3d45768d,0x3d91d7a4,0x3deea927,0x3dd73193,0x3da5b6aa,0x3d170ab0, +0x3bdf202f,0xbcecf5ca,0xbbf5b37d,0xbc3d7bff,0xbd09993e,0xbcfc2734,0xbce2ef2e,0x3b4b19e0,0x3b2eff3f,0x3b76a408,0xbc39b5d7,0xbc26444b,0xbc476cde,0xbc334ff9,0xbb818b2d,0x3a300334,0x3c97f36e,0x3bc5bd22,0x3bf2c332,0x3c3c929c,0x3a42f25c,0x39ba226e,0x3ac2ae3d,0x3b985904,0x3c36d5bb, +0x3c922639,0x3cdc5a7e,0x3d0e65d4,0x3d45e080,0x3d281f5a,0x3bf1dc22,0xbba64ffd,0xbc65205f,0xbabb8963,0x3c90f3c2,0x3d4c347e,0x3d8b91f3,0x3d819c1e,0x3d1e9ef8,0x3c37eb33,0xbcd4a070,0xbd4dab5b,0xbd4d15a2,0xbd0d2bea,0xbd031dd8,0xbc96a764,0xbca3e2c9,0xbc0d96a2,0xbb3fa4d5,0xbb35f671, +0x3aa5f849,0x3c1feb11,0x3ca94326,0x3c0d076c,0x3b7c7199,0x3a0329b1,0x3ca81aac,0x3cc5199b,0x3c8ca1fa,0x3cbabc00,0x3cb9454f,0x3d030904,0x3ca85bc2,0x3c882d8b,0x3cabc343,0x3c3ba1cc,0x3cc69a9f,0x3cea0f49,0x3d01c92f,0x3ce14ff1,0x3ca97096,0x3c4de525,0x3ca466b2,0x3d0ccf13,0x3d1d80c2, +0x3d2d0e0a,0x3d292476,0x3ceabf54,0x3c8e955b,0x3c50f24e,0x3c7cabd6,0x3c6a5f8a,0x3c37eb14,0x3c720ec8,0x3c78c9a8,0x3c485776,0x3c312fb9,0x3c21e32b,0x3c40f237,0x3c4c2732,0x3c8b0254,0x3c9de78b,0x3c64ceba,0x3c148602,0x39fd2e18,0x3b82a64a,0x3bd889a8,0x3c57854f,0x3c75ffdd,0x3ca6a929, +0x3cd9fc12,0x3ce71284,0x3c4eed6d,0x3b9b5251,0x3b668dee,0x394759a2,0xbc02e31c,0x38d01524,0x3be6ee8c,0x3c97bab1,0x3c993ac2,0x3cac416b,0x3cbea0df,0x3c76440b,0x3c378219,0x3bea6b56,0x3c2b2f88,0x3c1b05cd,0x3c26004b,0x3c333e68,0x3c45a533,0x3c52d569,0x3c3a4364,0x3c4d7134,0x3c807be0, +0x3c5515f3,0x3c4238d5,0x3c21f95d,0x3c36934b,0x3c301a66,0x3c1ea39d,0x3c3972a6,0x3c526970,0x3c73aaa4,0x3c74e1b5,0x3c7c2eba,0x3c8ea146,0x3c748884,0x3bae8dcc,0x3bb1718c,0x3b9cc507,0x3b9b85ab,0x3bc307d1,0x3bd98dfe,0x3ba4584d,0x3b60429f,0x3b4b5b5e,0x3b8df136,0x3b318637,0x3bfcf1c0, +0x3bee3757,0x3be10547,0x3bd4a79d,0x3bd86dfa,0x3bf0a970,0x3c08cec8,0x3c391939,0x3c223d50,0x3c21a13c,0x3c487a52,0x3c7b35a7,0x3c34ac30,0x3bff7c7c,0x3b9c5271,0x3c02f35f,0x3c190bbd,0x3c6f1063,0x3c594179,0x3c76aaa5,0x3c727c52,0x3c7de997,0x3c58bc51,0x3c6e2a82,0x3c1c6e74,0x3c7b8165, +0x3c658e76,0x3c766f3b,0x3c772e04,0x3c641e9d,0x3c83a3c9,0x3c91d2fb,0x3ca717c8,0x3c9da1d3,0x3c8c9af3,0x3c81136d,0x3c4fdd8a,0x3c30270e,0x3c2952b4,0x3c2ba2c3,0x3c267b78,0x3c24d13c,0x3c10b1c5,0x3bf9220a,0x3bfc7ec2,0x3bdc8369,0x3be517f8,0x3bcf5877,0x3c1612df,0x3c45d836,0x3c64f580, +0x3c5a0626,0x3c30aeeb,0x3c1a8427,0x3c15ecd6,0x3c095ce2,0x3c04004f,0x3c1cb6d7,0x3c15dbd7,0x3c2e1fe7,0x3c5c5f79,0x3c4444bd,0x3c2c3613,0x3c341d82,0x3c348db2,0x3c356d7c,0x3c366bf9,0x3c23adff,0x3c193db5,0x3c10bcbf,0x3c1544a3,0x3c1b8aa7,0x3c243436,0x3c2c73a3,0x3c26a3d0,0x3c243bc1, +0x3c24bcfa,0x3c281e57,0x3c2fdf16,0x3c348b5b,0x3c3d8234,0x3c4bd5ce,0x3c5f2a94,0x3c66ce9f,0x3c4ef382,0x3c4a817b,0x3c52338e,0x3c5953a5,0x3c5fa863,0x3c6940f1,0x3c6ef9d4,0x3c6435a6,0x3c68bf66,0x3c66a6c0,0x3c4f17d0,0x3c609f7f,0x3c55fa54,0x3ca5bce2,0xba7d928a,0xb9b8bffd,0xba16320d, +0xbafb8c76,0xbaedb268,0xba7e825c,0xbabdb187,0xbabed66b,0xba96899e,0xba68a6d2,0xba6e5bc2,0xbaa1152f,0xba83814e,0xba8f982b,0xbadcccd9,0xba94fec4,0xba7d3bb4,0xba91058b,0xba6f5ec8,0xba137869,0xb925bcf5,0x36a0213c,0x3936e525,0x3a8be7ce,0x3a543657,0x39a4d370,0xb9778909,0xba0ec7c5, +0xba3a4f87,0xba6d4857,0xba334eaa,0xb9a009c5,0x39664db0,0x3a26b82f,0x39bdf243,0xbaabd09d,0xba381fb4,0xbb07c499,0xbadd9c0e,0xbb9f64e1,0xbbcc880f,0xbb7e7967,0xbb71d835,0xbb4fb27e,0xbb2c0bc5,0xbaa25b95,0xbaa1356b,0xbad1ba83,0xb883fdb0,0xba4b06a0,0xbb318d8a,0xbada3022,0xbb0e9eab, +0xbb2f0f27,0xbae6d00c,0xba414a82,0x3aa511da,0x3b30014c,0x3b6991c9,0x3b917641,0x3b585e7d,0x3b322015,0x3adb06b3,0xbad06d98,0xbb125c1e,0xbb11f5f5,0x39bc1cc0,0x3b40b701,0x3b2857b5,0x3b7ca56a,0x3b3ebe6f,0xbb334a11,0xb9b2f96f,0xbaf81726,0x3820bdb1,0xbc062db6,0xbc1075a7,0xbba9e3da, +0xbbbfe57f,0xbbb1c3f5,0xbba192f1,0xbb0e9e82,0xbb0c893d,0xbb90e088,0xbaf95acd,0xbb1067cc,0xbbc6cd4b,0xbb73600d,0xbb49f9cc,0xbb830f0f,0xbb0b298c,0xba4443fe,0x3b830e04,0x3bcdee26,0x3be94cff,0x3c08697d,0x3c10c53e,0x3bd3a8ca,0x3b1c1fcb,0xba8c8712,0xbb7a2d07,0xbb374585,0xb8d7f7f3, +0x3b4c70ec,0x3ba70a17,0x3c0a1842,0x3bdad017,0xbbbbc1fa,0x3ab4bc72,0xbb16fefc,0x3b14b26e,0xbc25266e,0xbc887604,0xbc250c4d,0xbc06dfd3,0xbbd92f87,0xbbfdd8c4,0xbaf66bc0,0xbb03ce78,0xbbb29316,0x3a0bd819,0xbb059829,0xbbda3545,0xbb94238d,0xbba8e847,0xbbbeb9a1,0xbb54c57f,0xb9ac536a, +0x3c092974,0x3c3d70c7,0x3c62e9a2,0x3c70defd,0x3c62e1a3,0x3c504b15,0x3c1ffaac,0xb8869f55,0xbb6dde0a,0xbb87fd68,0x3b0afe1d,0x3c17fecd,0x3c248483,0x3c53bb20,0x3c0c5885,0xbbd55f1e,0x3757cc30,0xb9efe8fe,0x3b800cf9,0xbbd29048,0xbc59973e,0xbbe0559a,0xbc023c66,0xbc1f97fc,0xbc179451, +0xbb807887,0xbb819180,0xbc397c67,0xbba3049a,0xbb9a39b0,0xbc4f4ceb,0xbbc9190f,0xbba21f57,0xbbc59cca,0xbb3364dc,0x3a9fa349,0x3c37c60b,0x3c8a5fc3,0x3c980ff8,0x3cafa036,0x3c84b1e9,0x3c70346b,0x3c744974,0x3bbc3d5e,0xb9019aae,0xbaeed5ab,0x38ff0457,0x3befc9fb,0x3c54e3e3,0x3c6b4c3a, +0x3c72a579,0xbc21ac22,0x3b7fd694,0x3b9b2134,0xbd319c42,0xbd3a22d4,0xbd49b18e,0xbd3c05b3,0xbd383089,0xbcff43f7,0xbbde0e5f,0x3b5a9e4f,0x3c61ce8d,0x3c4b96a6,0x3b4dd8e8,0xbbb81dcb,0xbcda4b5a,0xbc8f9a46,0xbc254458,0xbac015db,0xbbd16e74,0xbb62781a,0x3b90cd37,0x3c56096a,0x3c4c2260, +0x3c0aa132,0x3cad419d,0x3c8ab51f,0x3c3351a3,0x3a78ea90,0xbb971e91,0x3a91e617,0xbc18fe12,0xbb9caa88,0x3c6a54a4,0x3c10118d,0x3baf8785,0xbb95e9b5,0x3c7db832,0xbcda7327,0xbd085500,0x3c8e940a,0x3c126471,0x3bfecc8f,0x3a09a7ee,0xba6e414a,0xbc3d546e,0x3c3a7b95,0x3c1bf9d5,0xbc8b2600, +0xbc941674,0xbcaafaeb,0xbcc445cb,0x3b62b481,0x3c3174c8,0x3b4c6ee3,0x3b763506,0x3b937049,0x3b7ad186,0x3bba0f2c,0x3c4657ad,0x3cc8c3d1,0x3b9f0045,0x3a209436,0x3b054afe,0x3a6f68b0,0x3a5813bd,0xbbb8240c,0xbbe27066,0xbc0a3b03,0xbc8d6346,0xbc6a5a3d,0xba670986,0x3cb74a2a,0xbc57f3b8, +0xbcbb3878,0xbd646b1c,0xbda8f936,0xbd8186b8,0xbd4279fe,0xbd0f2e42,0xbcab7ac8,0xbc92c1b8,0xbb170822,0xbbbff4e0,0xbcbfd52f,0xbca6c61a,0xbca18621,0xbc50e699,0x3aae438e,0x3be9d0ea,0x3be0c741,0x3bf17e14,0x3c0464de,0x3bbfd9d1,0x3c43a8d0,0x3c545fc0,0x3cb82993,0xba4587db,0xbbd089e6, +0xbaa529fa,0xbbbda7c2,0xba5ea772,0xbbd125ba,0xbb623954,0xbba2c8ad,0xbb600228,0xbc809efb,0xbc86e05a,0xbc49bea3,0xbc06cd37,0x3c30b798,0xbb24ac5f,0xbd041bcb,0xbd191a04,0xbd017a37,0xbd19ea71,0xbce30d18,0xbce390d3,0xba90e41d,0xbbcd0dbe,0xbd033a90,0xbcd5aee3,0xbcc84ed1,0xba1545ab, +0x3b53ebe7,0x3c1d6962,0xbac20a4e,0x3b78fc81,0x3b3f7e77,0x399e538c,0x3c3fa600,0x3c6c9c67,0x3c8c551a,0x3b8de78c,0xbaacb010,0x3b69bac4,0xbb6d77eb,0x3a7b3185,0xbae0a551,0x3b81a359,0x3bc647b2,0x3c0495c8,0x3b8ec87b,0x3bfdfa40,0x3c2b0b01,0x3ca57ce2,0x3d9a8580,0x3dca8e00,0x3ddc311d, +0x3d9ea657,0x3d538e60,0xbbfd9c37,0xbd07ab2b,0xbce9378d,0xbb69f2f9,0xbbfd7abf,0xbd129820,0xbd6fe925,0xbd5bb75e,0xbcc4ba72,0xbaeba070,0x3c14b4d9,0xbb98bc8a,0x3b4ef49a,0x3a33a3eb,0xbba227d1,0x3c08ac11,0x3c28cbc8,0x3c76cb14,0x3bdd9e47,0x3bc2a641,0x3bcb8f15,0x3b0efdcd,0x3a88a173, +0x3acf67cc,0x3bbd9ed4,0x3c41435e,0x3c2f1498,0x3ce37725,0x3d28f2cb,0x3d615253,0x3d819cff,0x3b620898,0xbb004396,0xbbafe3fd,0x3c9d0578,0x3d3603e6,0x3d72d6df,0x3d871834,0x3d392c22,0x3c56392b,0xbc503a18,0xbca338cf,0xbd6e6a4f,0xbd4f7f6a,0xbd3a5e42,0xbd3da3b5,0xbcfe790a,0xbc544666, +0xbc56983c,0xbbb67a24,0xbb4fad88,0x3b49274e,0x3bffd1ad,0x3c945cfc,0x3b97ea97,0x3ae3cffe,0x3b709212,0x3c79eb43,0x3c9795c9,0x3c59f16a,0x3c9f7491,0x3ca1e945,0x3ccf01ca,0x3c9d6377,0x3c9742b3,0x3cbff694,0x3c75377f,0x3cdf71d1,0x3ce934be,0x3cde3548,0x3ca9941d,0x3c9741c3,0x3c83be8d, +0x3c999dfe,0x3ce34f1c,0x3d266123,0x3d266f86,0x3cf0a28a,0x3cd69b9a,0x3c4daf26,0xbacd2a22,0x3b62f865,0xbab31350,0xbc3b36ac,0xbb983a26,0xbb2044b3,0x3b9f6bcd,0x3c04e26e,0x3bd5c1c5,0x3c61bf17,0x3c4e3334,0x3c743feb,0x3c5e3919,0x3c164255,0x3bc3cade,0x3b503db9,0x3b83fc73,0x3c006ee4, +0x3c60f5a0,0x3c6834df,0x3c961ac3,0x3cc16cc4,0x3ce7ddcd,0x3c5e70b1,0x3c05324e,0x3b9d3510,0x3b8fbf80,0xbb550b9f,0x3ba9e64e,0x3c1a586c,0x3c6ec39e,0x3ca50a7d,0x3cd24b08,0x3cf4f02f,0x3cd0a95a,0x3cae8133,0x3bcd0cc9,0x3c393668,0x3c424425,0x3c3dbbf3,0x3c5865bf,0x3c26abd1,0x3c263270, +0x3c620cc1,0x3c6e446e,0x3c913a15,0x3c6fd48d,0x3c4249c2,0x3c2cb4b8,0x3c2ea28f,0x3c3bb147,0x3c44a159,0x3c55248e,0x3c69c9bf,0x3c8c2cce,0x3c7f1f3a,0x3c824ceb,0x3c9491fd,0x3c78d968,0x3c2fdd19,0x3c53c9eb,0x3c49409a,0x3c110fdf,0x3c01d9ec,0x3ba9cd8f,0x3b189c7e,0xba055521,0x3b1b5e89, +0x3bd69e2e,0x3c1f6b37,0x3c250de5,0x3c3ad5bc,0x3c5122c5,0x3c82c763,0x3ca5ed2b,0x3cbf4d0a,0x3c9c2f1f,0x3caea8be,0x3c7aa498,0x3c7f4f40,0x3c703959,0x3c776565,0x3c4da0a9,0x3c290951,0x3c0912bc,0x3c1b39bf,0x3c46e315,0x3c368d6f,0x3c610cd0,0x3c6ef20e,0x3c7dab48,0x3c85a5f4,0x3c89ce16, +0x3c8d0659,0x3c5ede93,0x3c2186fa,0x3bb026c7,0x3be7cd00,0x3c0668c8,0x3c109a35,0x3c561555,0x3c8293df,0x3c95fca1,0x3c89b260,0x3c53d77f,0x3c26ca86,0x3c0a492d,0x3b95b55c,0x3aa64d81,0x3a638f1a,0x3a883141,0x3b3712b8,0x3ba479d3,0x3bf1f8a5,0x3c452830,0x3bf39edf,0x3c07c4a6,0x3beadfd0, +0x3c00adde,0x3bf7ec7e,0x3be3f6e9,0x3bf23c75,0x3bb8b10b,0x3be0a85b,0x3bd8a52d,0x3ba9752d,0x3bf40f4c,0x3bd2fbf2,0x3baa2847,0x3bee0e2d,0x3be3a703,0x3c001e60,0x3bd4b771,0x3bee9384,0x3be27cbd,0x3bcc40a7,0x3bb5e9b6,0x3b8345bc,0x3b5dc289,0x3b53e24b,0x3b8bc77b,0x3ba27759,0x3bb160c7, +0x3bddba94,0x3bfdf22a,0x3c1293ea,0x3c1f7b86,0x3c303f99,0x3c2c3bba,0x3c1f1513,0x3c300877,0x3c1b96d2,0x3c26a4ee,0x3c33fc9d,0x3c02933c,0x3c079564,0x3c232511,0x3c2bacb3,0x3c2f74bb,0x3c341589,0x3c3d2623,0x3c3df33f,0x3c3f5c22,0x3c1f14f5,0x3c042fc3,0x3c416abb,0x3c1dcceb,0x3c2c9848, +0x3a965835,0x3a372fd3,0x3acce263,0x3973c6ea,0xb89e60c8,0x398ec9b9,0x391216f3,0x394ca3a4,0x3a0f977c,0x3990a508,0x39ebdd77,0x3a7c08a2,0x3a938f1c,0x3a708330,0xb7384233,0x39a8f3cc,0x398cc5aa,0x36f0edb4,0x39c767c9,0x3a1fb399,0x3a3cf8a2,0x3a36b31e,0x3a3965ac,0x3a227a38,0x3b06ed10, +0x3a91bc41,0xba1fe750,0xba5c4103,0xba7b66dc,0xba936447,0xba53371f,0xb99648fa,0x368d2351,0x3aa23bf3,0x3ad7685f,0xba7eff6d,0xb90335b0,0x3a13c7ef,0x3b1d93f0,0xb8936c8a,0xba247e2a,0x388271c4,0xbaeeae20,0xbae4e738,0xb9d63211,0xbae25167,0xba1c52fc,0x3aa0b8e6,0x3b665d2b,0x3b57a850, +0xb9ceb686,0x3a4145b5,0x38b1ac21,0xba761eaa,0x38912880,0x3a0ef2a0,0x3a2c8653,0x3ac88fbc,0x3b38b74c,0x3b9070b4,0x3b8b03e4,0x3b78ba2f,0x3abfe771,0xbaa1f638,0xbb093619,0xbad47fe0,0x3af42118,0x3b95848d,0x3b29245e,0x3b9bb779,0x3b6eef63,0xbb2ae489,0x3ae5372f,0x3ac996c9,0x3b86fc90, +0xba4dc29b,0xbb1c6a07,0x39d58f18,0xbb74ac74,0xbb8669e1,0xbaa0498d,0xbb774464,0xbad24206,0x3adc2253,0x3ba804d5,0x3b9ac41e,0xbb39562b,0xba6b608e,0xbabb0168,0xbb61ab10,0xba895186,0xb95f23dd,0x3a919f6b,0x3b8458de,0x3bb9f7af,0x3c07d09c,0x3c21750a,0x3bfecd93,0x3a977991,0xba863328, +0xbb2e58d2,0xbb6c45ff,0x3ae25aa3,0x3b971c71,0x3b954934,0x3c107b10,0x3bfd4e02,0xbb453526,0x3b76923d,0x3c042590,0x3bc5e6e4,0xbaa73746,0xba6040dc,0x3b08b3ed,0xbbe06d30,0xbbf64712,0xbb39e853,0xbc0226ab,0xbb75df27,0x3af896f4,0x3c1a3a44,0x3c1ba27e,0xbb61a897,0x3a281f37,0xba86129a, +0xbb9b4090,0xbaa2b2c3,0xb7a7714b,0x3b14168c,0x3be7dea4,0x3c162628,0x3c4eb5b0,0x3c810444,0x3c6f707e,0x3bcae805,0xbabf38ac,0xbbb3d53b,0xbbaeb9be,0x3b8b3337,0x3c333e99,0x3c0957e4,0x3c6f501b,0x3c392a72,0xbc011d6c,0x3bdc3da8,0x3c246139,0x3c1255a5,0xb9f07c3c,0xbae55746,0x3ba54771, +0xbbe5a2cd,0xbc00c53d,0xbb7ebc0b,0xbc0a91c6,0xbb9208b3,0x3b44ae94,0x3c215045,0x3c1d86ca,0xbbc4360b,0xbb17efa5,0xbb7b695c,0xbbeb0c50,0xbb1a379a,0xb90af218,0x3b7859b0,0x3c4d1a6e,0x3c6e8376,0x3c8e30e9,0x3ca365df,0x3c96a315,0x3c397700,0x3b67dc4c,0xbb4caefa,0xbb9e496f,0x3ab59473, +0x3c298f4c,0x3c47a19a,0x3c96af6d,0x3c89f99b,0xbb844c7f,0x3c26dfce,0xbcdf044a,0xbd357d1e,0xbcf09e8c,0xbd00be65,0xbcbd2c0e,0xbccb90e1,0xbcaf65ac,0xbbaca673,0xbba167af,0x3be94b7e,0x3cc628b9,0x3c59b412,0x3bc44994,0xbb26ade6,0x3b984f1c,0x3b948734,0x3ab45e79,0xbb0eee4c,0xb96bbc2b, +0x3b7dc9ef,0x3bf2dd5b,0x3c3a57e0,0x3b942c40,0x3ca97833,0x3c8b7e16,0x3c128678,0xba0e7cd8,0xbbc63477,0xbabe09da,0xbc2f318a,0xbbeb73da,0x3b353b39,0x3c263702,0x3c0f90b4,0xba87db44,0xbc23ffe0,0xbc182db4,0xbbbdcb0c,0x3c631c54,0x3b5abf06,0x3b72dec8,0x3948471e,0x3aeae6d8,0xbb811cc8, +0x3bc15e6d,0x3b62d873,0x3c23a5e3,0xbc45ee0c,0xbc8d29fa,0xbcbd238b,0xbca3f0ea,0xbc53013f,0xbbf237f6,0xbae51efb,0x3a9fe50c,0x3bb05795,0x3c3fe15e,0x3c53a72b,0x3c9e9afd,0x3b67119a,0x39300280,0x3b3dbed9,0x3b58d70d,0x3ad20200,0xbc00e040,0xbbd17a22,0xbbe61cc1,0xbc46f181,0xbbcf7ae8, +0xbae2c81a,0x3bd88b69,0xbbd57158,0xbd102df6,0xbd619404,0xbd9a5355,0xbd6dee78,0xbcc39d30,0xbc8d1a47,0xbc4cf515,0xbc945f8e,0xba450f8b,0x3b398f07,0x3b9cba1e,0xbc8f7f51,0xbcc26c1f,0xbcb3f07a,0xbc17a32c,0xbb765167,0xbbacac3e,0xbb7f297a,0xbb229dae,0x3b2e7e12,0x3c3a0493,0x3c3fc8ba, +0x3c342f37,0xbb55c1b3,0xbb9f7ebe,0xbab7db0a,0xbbaad901,0x390364cd,0xbbcb1d11,0xbb473541,0xbbda42a1,0xbba6644a,0xbc6ac561,0xbc834d92,0xbcbde5b6,0xbca68922,0xb9e00624,0xbc395b44,0xbd06632b,0xbd0e7934,0xbc1d3cff,0xbd291968,0xbd3e052a,0xbcc3b520,0xbca0fc47,0xbc75b05c,0xbc4766ce, +0xbccfa7ba,0xbd05255f,0xbce81257,0xbc7a131d,0xbb0024a3,0x3ae7706a,0x3a0c3ca4,0x3a9df482,0x3a4fea4c,0x3c34c0d7,0x3c3048eb,0x3b03811d,0x3a84aa79,0xbab97aa9,0xba96d109,0xbb14e6ff,0xb9d04b13,0xbaf0258f,0x3b5cbb7e,0x3b777ed7,0x3a6bfe89,0x3b8247e6,0x3ba0aaaf,0x3c21fbd5,0x3c10832a, +0x3dba997f,0x3dbb96ca,0x3d95a737,0x3d088861,0x3cae36c1,0xbd0fb565,0xbd44111e,0xbc5b66bd,0xbcaded11,0xbcb02351,0xbc9a5dfd,0xbd073dcd,0xbcf56871,0xbcda962f,0xbc82587b,0xbc3594d1,0xbbab4f6e,0x3b538275,0x3b92dc5f,0xbbb1ade9,0x3c635d46,0x3c4de984,0x3c19462b,0x3b92c662,0x3ad05b2f, +0xb9c4df74,0x3b2b421a,0x3b354361,0xba11c9c0,0x3b62224b,0x3c154662,0x3bd41646,0x3cd48f06,0x3d1f7c5e,0x3d6dd367,0x3d935a74,0x3c258bba,0x3ca560b1,0x3d0a0eca,0x3d768756,0x3d8909a8,0x3d6f877f,0x3d20347a,0x3b989ca2,0xbcb7ac7e,0xbd2ed3df,0xbd496d4c,0xbd32903f,0xbcc637f4,0xbd2a6d2a, +0xbcee74bb,0xbcce0a12,0xbc92d28c,0xbcef2bc2,0xbcc1bbcf,0xbc55bb26,0x3ace16cc,0x3bb1366c,0x3bed230e,0xba54870d,0x3ae1a6b1,0x3c347849,0x3c16be79,0x3c23cab7,0x3c2c3797,0x3c904de4,0x3c9bba13,0x3cb35dad,0x3ca5442c,0x3cb665d9,0x3ccc794f,0x3cb6ca8d,0x3cc04f15,0x3cca1f7f,0x3ca6277a, +0x3c655b8c,0x3ca14b15,0x3ca53ca8,0x3cd3727d,0x3d09e3fc,0x3d1be5fb,0x3d0cfb2d,0x3ca7e63a,0x3c8a6455,0x3b9036ce,0xbbdc6aa3,0xbc3cba08,0xbc704cae,0xbc8c3b71,0xbc568d77,0xbc28c366,0xbb446d97,0x3b57c868,0x3c0084d8,0x3c8fa55b,0x3c811c1c,0x3c60b4c9,0x3c0c13b4,0x3bb1bf10,0x3bd1d99f, +0x3c1c6ab8,0x3c15fbe7,0x3c3e92a9,0x3c3694f4,0x3c5fedb6,0x3c876d57,0x3c8870bf,0x3cd06dc4,0x3c69f17f,0x3c5d516c,0x3c16e613,0x3c2198da,0x3bd30a08,0x3c5725c2,0x3c88b381,0x3c93f5ea,0x3cb66c58,0x3cd3998a,0x3ce8e573,0x3cd4ecb7,0x3cb9fd0a,0x3c549aec,0x3c188261,0x3c03198a,0x3bcde7d8, +0x3beb1f98,0x3bdd2d33,0x3c05dd54,0x3c2b1861,0x3c53996d,0x3c8cceca,0x3c846d06,0x3c6d64e2,0x3c4e6603,0x3c5c6904,0x3c6f6e8f,0x3c910e3b,0x3c888aa0,0x3c86317a,0x3c83e483,0x3c7a1453,0x3c816f98,0x3c8dde8e,0x3c798291,0x3c808d68,0x3c8b2b86,0x3c7656cf,0x3c35e53d,0x3c072f9c,0x3bdcce0b, +0x3bb16ffc,0x3b9ef20d,0x3c1cab98,0x3c712cf6,0x3ca6d4de,0x3ca45614,0x3cb4da0d,0x3cbba7d4,0x3ccf14af,0x3cde5410,0x3cd7b8fb,0x3cc1905f,0x3ccee970,0x3c9a27f4,0x3c8da4bd,0x3c866371,0x3c78cc8d,0x3c6bce7c,0x3c6bf232,0x3c6a5236,0x3c64be37,0x3c83c99a,0x3c60d06b,0x3c641cf5,0x3c5a2ce8, +0x3c525f9c,0x3c6dcc5c,0x3c89c7ab,0x3c95ba08,0x3c870b2b,0x3b155648,0x39d416fa,0x3b47efd3,0x3b996046,0x3bdc0f17,0x3c2ab67c,0x3c4bead7,0x3c5a9342,0x3c56e55e,0x3c3529d6,0x3c1df45f,0x3c258a96,0x3c1207f6,0x3c0ab6d0,0x3c0198bc,0x3c0ef1cf,0x3c4f9e1c,0x3c76f0a9,0x3c90560c,0x3cbe8e99, +0x3c8c59bf,0x3c89be3b,0x3c73cc26,0x3c5a3f16,0x3c125a56,0x3bb8f4bd,0x3bc2b5ea,0x3b91dc7d,0x3ba4c916,0x3ba79f6f,0x3b79830d,0x3b8e2b3f,0x3b6583ce,0x3a579df6,0x3ad5c4e8,0x3ad1a241,0x3bcb0bea,0x3bb3036b,0x3bbb2473,0x3ba736a8,0x3b87e979,0x3b63cc85,0x3b279dfd,0x3b1d5f3a,0x3b482f04, +0x3b8e8e07,0x3bae8a2b,0x3bc11a1a,0x3bdd82ce,0x3bfa28f7,0x3c118b3f,0x3c1ff367,0x3c28e1d7,0x3c1f413d,0x3c0fe026,0x3c2237b1,0x3c02da43,0x3bf63d4f,0x3bca1da2,0x3bcc7d3b,0x3bd66baf,0x3bcaa421,0x3bd78f43,0x3bd768c2,0x3bd996a4,0x3bdbd01f,0x3bdc7ac1,0x3be021cc,0x3bcc71e0,0x3bba97d6, +0x3c018c38,0x3be97097,0x3bc8f69c,0x3b6058d0,0x3b3221a5,0x3b2c352b,0x3b28fff6,0x3b1fcdfe,0x3b3af78f,0x3b18effd,0x3b13b01f,0x3b434442,0x3b024cba,0x3b01b4ff,0x3b148db0,0x3b33814d,0x3b2e6ee0,0x3afb6343,0x3b013806,0x3aec3e23,0x3ab79a1a,0x3aebdd42,0x3af61d45,0x3ae4a515,0x3b054136, +0x3b0ebd54,0x3b003833,0x3b592fc3,0x3b285c8d,0x3a266171,0x3a20bf86,0x3a125101,0x3998f60f,0x3a80a983,0x3ac2802d,0x3ab8884d,0x3b269b54,0x3b2ca591,0x39e306cf,0x3b09bb1b,0x3b637910,0x3b3c579f,0x3b2986d9,0x3b2098a5,0x3b2ce7f6,0x397cfb27,0x3a399c8c,0x3b1c4e24,0xbaea4807,0xba0d5333, +0x3ac86f63,0x3bbaf7e8,0x3bcb30e5,0x3afebd84,0x3b0871fe,0x3ab82f84,0x396dd971,0x3ac18427,0x3afb4bab,0x3aaa600f,0x3b1eaf96,0x3b84af6b,0x3bd0aaa3,0x3bbb46d6,0x3b91807f,0x3af10d84,0x39d4b634,0xb9ba12f0,0xb9250743,0x3b7a8382,0x3bb58dbc,0x3b4d6600,0x3bc0a7c0,0x3ba920f9,0xba8407c2, +0x3b37a72d,0x3bbf3a8e,0x3b51170e,0x3b4f15d3,0x3b5519c6,0x3b91978b,0x3b350938,0x3af4f177,0x3bafeee6,0xbb00011f,0xbaaaedc3,0x3a35a97e,0x3bf99efe,0x3bff1246,0xb97b5e7e,0x3a89f8f4,0xb9db600f,0xbb18cd4a,0xb9590437,0x3a04a146,0xb9399108,0x3b42c7ed,0x3bb7e747,0x3c1c454d,0x3c267a6b, +0x3c038568,0x39c84489,0xb9810dca,0xba257e9b,0xbb3cc3c6,0x3b70c6fa,0x3bc66ef8,0x3b8a3d21,0x3c095f96,0x3bd6f570,0xbb48909d,0x3b9cf6bf,0x3b9b4492,0x39922b5a,0x39f8f394,0x3b15d471,0x3ae2c4d9,0xbaaf3391,0xbb1331ee,0x3b180043,0xbc36ced7,0xbbfec9ba,0xbb647bf3,0x3c418d1d,0x3c5bb2ee, +0xbb44fa44,0x39b4cdec,0xbb0accf1,0xbba91015,0xbacf8404,0xb94df70a,0xba8e5710,0x3b8deffb,0x3c08c069,0x3c6c9e57,0x3c8077d4,0x3c66e7ed,0x3b175804,0xbaaa874c,0xbba566f3,0xbbcc1d21,0x3bc126c1,0x3c4153f5,0x3bb3c034,0x3c6aec97,0x3c407fc7,0xbc1ecfe1,0x3b62e778,0x3c0c95f9,0x3b2dc54c, +0x39f30116,0x3b6dcd1e,0x3c09b5e8,0x3beb809a,0x3c074a89,0x3c0fc156,0xbb9482d0,0xbbbb814c,0xbaf8cd7e,0x3c3f483b,0x3c46a0c6,0xbbb328ba,0xbaeabd71,0xbb61a5bd,0xbbe76600,0xbb782f92,0xbb486248,0xbb0f2b1d,0x3b989136,0x3c33b2e7,0x3c858264,0x3ca8e9fc,0x3c979151,0x3bd0e68c,0x3ae344a6, +0xbb8ce20f,0xbbe871c5,0x3b5597e0,0x3c484160,0x3c0d7c9b,0x3c8b0b4e,0x3c28b08e,0xbc1ce205,0x3b80ae63,0xbd367583,0xbd1819c2,0xbc008186,0xbbf7d775,0xbcadbcfd,0xbd0e8a9d,0xbd242bdf,0xbcc3aefc,0xbce86913,0xbb880215,0x3ce994b6,0x3c7b43e2,0x3c1b7849,0xb9fbd626,0xbbda8a2d,0xbc1a9742, +0xbb76c6c2,0x39b71426,0x3bc02143,0x3c740b1e,0x3c1d7a70,0x3c483f31,0x3c27e204,0x3c990aeb,0x3c79a122,0x3bf54f7f,0x3838aa44,0xbb9bfba2,0xbb3b8b13,0xbc438d16,0xbbfc7b98,0xb79b7683,0x3c143fb3,0x3c163d26,0x3c075468,0xbcb3d8f3,0x3c3907a8,0x3c090b93,0xbbe32150,0xbc458972,0x3a91b006, +0x3c18333e,0x3c63085d,0x3c0f5da3,0x3bdc8d9f,0xba7f4e1d,0x3bc6c27c,0xbc3c549d,0xbc6108ea,0xbc33b734,0xbc689984,0xbc3eb9f6,0xbc41e415,0xbc226042,0xbb92e34b,0x3b0b3980,0x3c275390,0x3c38e7ec,0x3c1517e6,0x3b055cfe,0xba076c48,0x39d15257,0x3b435ce6,0x39f18b00,0xbc0c5bd7,0xbbf658b5, +0xbbf82f17,0xbba7e5cc,0xbc41cc94,0xbc3ba9b6,0xbb943aea,0x3b245562,0xbd1829ea,0xbd55d82a,0xbd36fd17,0xbcd32347,0xbac0a2eb,0xbb091829,0xbbb1c172,0xbca0977b,0xbbfbf265,0xbae9f49a,0x3c1c6b87,0xbc29f3d0,0xbc95784e,0xbc99f7dc,0xbc9232e2,0xbc7c0daa,0xbc65c51c,0xbc193b22,0xbb9ab474, +0x3acb8c89,0x3c439643,0x3c223a98,0xbaf26882,0xbb877ffc,0xb98f082b,0xb9d53df5,0xb93505e3,0x3b19d5ad,0xbba3acd8,0xba429cd8,0xbbb9dd3b,0xbb856d1f,0xbc1e2d2f,0xbc8651a0,0xbcf1792b,0xbcd4ae0e,0xbc5f1ded,0xbcd5851b,0xbc398905,0xbc3ef745,0xbca3a760,0xbd02a086,0xbd3cdde3,0xbd0c73f6, +0xbd0a0a58,0xbcc67144,0xbc1bd735,0xbc94a5e6,0xbcb76e14,0xbcfadfd3,0xbccffad4,0xbc931d69,0xbc00d183,0xbc164529,0xbb89649e,0xbb059a8e,0x3c46b316,0x3c179a17,0xbc214251,0xbb1be5bf,0x3996dd09,0xbb5cf27f,0xba2e2704,0x38c73de6,0xba6f3b2f,0x3b42aa61,0x3b1486f0,0xbb8d906a,0x3b9f6661, +0x3b9ab29d,0x3c06fa0e,0xbb86d5a6,0x3da9702a,0x3d66124a,0x3cef7564,0xbb4a4c83,0xbcd2f640,0xbd0776e0,0xbcf825ab,0xbc416b09,0xbcc6ec92,0xbceb1a91,0xbcdf6cad,0xbc7c9056,0xbc6ca511,0xbcd2b61f,0xbc7770ae,0xbc7c33c5,0xbbf8d03b,0xbbbc6841,0xbb1baba9,0xbc1f1573,0x3c6948f5,0x3c411ab7, +0xbb238b5e,0x3aac86a8,0xba45efcb,0xbacf7112,0x3a5b32c8,0x3af9c282,0xbb07d45e,0x3adf07c9,0x3bea018f,0x3bac5002,0x3c94a059,0x3ce40b12,0x3d55f446,0x3d88aee1,0x3ccf9b10,0x3d45418d,0x3d88f6be,0x3da91d10,0x3d82aba8,0x3d36727c,0x3bfe5b69,0xbd1fa897,0xbd274931,0xbd2b7896,0xbd1553d3, +0xbc6880c9,0xbbf73351,0xbd01f98f,0xbcc22e39,0xbcbd7f01,0xbcf19fca,0xbd04beec,0xbcbde4a3,0xbc847c2d,0xbb90103b,0x3af19352,0x3a865e01,0x3aa11f30,0x3ba962c0,0x3c600c10,0x3bbb8abc,0x3b5060f4,0x3b9e1062,0x3c7952bc,0x3c952fc5,0x3cb95ef2,0x3cc347ab,0x3cdc6721,0x3ce4e592,0x3cfd23ed, +0x3cb48ddb,0x3cc07acb,0x3cb807eb,0x3cb5b57b,0x3ce47b27,0x3d113628,0x3d1f020c,0x3d0fc192,0x3cec8ec0,0x3c8a3a20,0x39cfb6dd,0xbb6be2ec,0xbc4ee915,0xbcb1c5ef,0xbce49fa6,0xbccf5176,0xbc53bc78,0xbc380f1e,0xbc16480b,0xbbcf6198,0x3ba71eeb,0x3c196b6b,0x3c47b082,0x3c47acd4,0x3c308e7f, +0x3c260365,0x3c0287e7,0x3c380c96,0x3c4c2172,0x3c8043be,0x3c861e19,0x3c5d3302,0x3c709c5c,0x3c8157e5,0x3c63f520,0x3cc37533,0x3c60e076,0x3c7d5180,0x3c84cc5b,0x3ca2cbb2,0x3c9d5d12,0x3cc66f0e,0x3ce27aca,0x3ce88a4f,0x3ce1cffd,0x3cd9c0f3,0x3cd78c07,0x3caab1b6,0x3c96263c,0x3c5e828e, +0x3bd61ddf,0x3c07f2f7,0x3c36ef83,0x3c199320,0x3c175caf,0x3c31a5bb,0x3c2b3503,0x3c522351,0x3c6b295e,0x3c7172eb,0x3c63a04c,0x3c509519,0x3c818998,0x3c81ab2f,0x3c91b53f,0x3c8a19fa,0x3c7c92f2,0x3c4f5cf9,0x3c693196,0x3c7b2829,0x3c87a8c9,0x3c5a61cb,0x3c8c2f6a,0x3c8c2540,0x3c717643, +0x3c4032d9,0x3c179751,0x3c189338,0x3c2f1e85,0x3c5c967c,0x3c922007,0x3cb7b5d3,0x3cf7820f,0x3ce4b090,0x3cf9d95f,0x3ceb30b3,0x3cfd99ba,0x3d006922,0x3ccb3ece,0x3ccf4f0b,0x3ce1fc87,0x3cc848bb,0x3cad4327,0x3c986fdf,0x3c834925,0x3c7ac100,0x3c815ca5,0x3c6a09dc,0x3c692f10,0x3c5493ff, +0x3c6fb4d1,0x3c354a26,0x3c39b621,0x3c153af4,0x3c3ff389,0x3c794857,0x3c97ca1e,0x3c959c89,0x3ab8d1e0,0x3bb7479b,0x3be6f2f2,0x3c07856a,0x3c1c8307,0x3c2e3fcc,0x3c292375,0x3c0b9764,0x3c0f51e3,0x3c090e71,0x3bedd715,0x3c1a605f,0x3c2d728d,0x3c6bc339,0x3c42d1eb,0x3c43dbd8,0x3c8d18bc, +0x3c8e1346,0x3c82f498,0x3ca3917b,0x3cada7fc,0x3ca2d8f0,0x3c969821,0x3c81b9df,0x3c49ff0c,0x3c17f5ea,0x3c1e7baa,0x3c0f9c9e,0x3bf1d881,0x3c03c120,0x3bfd9cee,0x3bcbb595,0x3be4d147,0x3b4675d8,0x3ab718ba,0x3b86b2e9,0x3bc56e05,0x3bef44d1,0x3bd1ccf4,0x3bbc4674,0x3ba6bfe5,0x3b9a892a, +0x3b9a4e77,0x3ba7ae02,0x3bd56b69,0x3c008d3d,0x3c1693d0,0x3c242c86,0x3c277e80,0x3c2e55d0,0x3c311f64,0x3c319a53,0x3c236f4a,0x3c144d1f,0x3c119d40,0x3c075168,0x3be39291,0x3bcf4a70,0x3bba2cf1,0x3bc42a7e,0x3bbceaad,0x3b96f315,0x3b9991a1,0x3b8a0e2c,0x3b8a8bc7,0x3b7100c9,0x3b51b742, +0x3b594b61,0x3b95699b,0x3bbca80c,0x3ba07c99,0x3bb3cd9d,0x3bfbc778,0x3b61678d,0x3b2c998a,0x3ae9ec4b,0x3b163226,0x3b15cc9b,0x3b2db534,0x3b05d49c,0x3b043a84,0x3b28b59f,0x3ac785a2,0x3aa9c030,0x3a76aacd,0x3b1e4c06,0x3b2d77b9,0x3b24c071,0x3af76650,0x3add420c,0x3aca18cb,0x3af2d68f, +0x3afe2e55,0x3af52ea1,0x3b19aff0,0x3b36f8ca,0x3b6158c7,0x3b44fe84,0x3b30b5c4,0x3ae4f661,0x3afe79c6,0x3afa09f8,0x3ac85536,0x3b18f9bc,0x3b31cc22,0x3b16f41b,0x3b34baa9,0x3b21eb61,0x3ac8c92e,0x3b3b0f59,0x3b72648b,0x397a8514,0x3b06ca94,0x3b30bea9,0x3b96935c,0x3b562f21,0x3b1dc5fb, +0x3b5faa4a,0xba5736a4,0xbaaaa7f6,0xbb0b5a43,0x3b51d451,0x3bb4b102,0x3b8c4630,0x3b1bcb1a,0x3ab5f47b,0x3a75d6d4,0x3ad575b4,0x3b060511,0x3af0644d,0x3b54b428,0x3ba0165c,0x3bfac3a9,0x3bb7a7d0,0x3b74f10f,0x3b04103f,0x3a787810,0x3a2a941f,0x3a982529,0x3b8dd931,0x3b9fe617,0x3b49aee9, +0x3bbb8ed4,0x3bac4a07,0xba5ec160,0x3b4957b7,0x3bb9798f,0x3a86f206,0x3b0f6a56,0x3b5a9d95,0x3ba4a898,0x3b7d0ff1,0x3b1dc468,0x3bac68f8,0xbb341738,0xbb6feef9,0xbbaf7e11,0x3ba21b95,0x3be3f92f,0x3b9421be,0x3abaf6f5,0xba22dfbd,0xba84da82,0x39c92149,0x3ac993b1,0x3a4ccc34,0x3b585104, +0x3bd09e81,0x3c313db1,0x3c0e2478,0x3bcbd6c8,0x39eff18d,0xb9545024,0xb90ed549,0xbab07f0e,0x3b8489ed,0x3bbfaddc,0x3b502020,0x3be75a09,0x3bb07242,0xbb16c0da,0x3ba21bcc,0x3b3f779f,0xbb6937d7,0x3aea96be,0x3af4bf12,0x3bf1d146,0x3bc845e8,0x3b33d1e1,0x3bbe1a2b,0xbc027a16,0xbc1bab1e, +0xbc5ff828,0x3b945175,0x3c2d1d2a,0x3be10a50,0x3a8cbff9,0xbb1c460c,0xbb51dd33,0xba73e5e0,0x3a18aafa,0xb9343b6c,0x3b8ef45d,0x3c1f1249,0x3c878f0c,0x3c62f979,0x3c350944,0x3aa89795,0xbacb9baf,0xbb8411b7,0xbb9a5313,0x3bde27dc,0x3c2f30a6,0x3b887236,0x3c562830,0x3c31bea1,0xbc230da3, +0x3b9568a0,0x3c5e54e4,0x3b28b3ca,0x3b9734bd,0x3ba0bf8a,0x3bb5b301,0x3beb78c8,0x3ba4fb37,0x3c1104a2,0xbbc39111,0xbc255c56,0xbc3766da,0x3bb162b7,0x3c1eb2c5,0x3baead73,0xba5dee98,0xbb9c4d9a,0xbba4c531,0xbb1485a7,0xba0c8b76,0xba1efa93,0x3b85cf37,0x3c2f18b6,0x3c942e61,0x3c8d750c, +0x3c7d37b4,0x3b766a02,0x39d0007b,0xbba439ef,0xbbfe35a8,0x3b98adf5,0x3c485c73,0x3bdc3ea4,0x3c72a577,0x3be61e6e,0xbbee8337,0x3c1e5e9d,0xbd594ff5,0xbcbdbf0d,0xbbe45fc0,0xba685dd7,0xbc38a995,0xbca5a715,0xbcdf10ef,0xbc884bac,0xbd15a521,0xbcb508a7,0x3c242810,0x3bd6ea30,0x3c1e6ada, +0x3b90ff67,0xbc3f5496,0xbc744a91,0xbabebc76,0x3a892902,0x3ba14f2f,0x3c5a588b,0x3c36d56a,0x3c4e60a2,0x3cab131f,0x3c843637,0x3c3cbb34,0x3b75fd7b,0x3b1c2361,0xbb0c49f8,0xbb8e3900,0xbc304b18,0xbbdfc4aa,0x3ab771a1,0x3c063247,0x3c2f1d53,0x3c97e38c,0xbcfb473a,0x3c8b9301,0x38a87de3, +0xbc6255e6,0xbc24931f,0xbb449cc4,0x3b9b9910,0x3bbc56ea,0xbb28fa49,0x363ab727,0x3a957556,0x3c4e8b64,0x3ae294f3,0xbb186244,0xbc639a7c,0xbbac2b7f,0xbba2789c,0xbc168163,0xbc025a41,0xbb26994e,0x3b166e1d,0x3c207979,0x3c195608,0x3a08de37,0xb992ceab,0xbab64051,0xbaeb8715,0xb95cb617, +0xba0a7638,0xbc0fa273,0xbbc9925e,0xbc0d0232,0xbc2a0b44,0xbcaf712e,0xbca8f430,0xbc3fae8a,0x3b864ad3,0xbd001976,0xbd074187,0xba57499e,0x3aeabee3,0x3ab47168,0xbb73f9e7,0xbc1e6541,0xbcc32a94,0xbc819ce7,0xbc6225af,0xbbfd2fa8,0xbbb01b37,0xbba28b04,0xbc87fb46,0xbc9c535e,0xbc9793f3, +0xbc9d41f5,0xbc3c97f3,0xbbcaae31,0xba90cd65,0x3c52f341,0x3c2094ba,0xbc0ca56a,0xbb0b272b,0x3b7927ff,0xba499300,0x3aff1ed1,0x3acb4d06,0xbb68b5d0,0xb9959996,0xbbc3e9f7,0xbb8548c0,0xbc286864,0xbc8b4a63,0xbd0c835a,0xbcca3cdd,0xbc5d31ea,0xbca4823b,0xb87daaf9,0xbbc4b7ee,0xbd0f5372, +0xbcaadeea,0xbcf944c7,0xbd2a2813,0xbcdefa6c,0xbcc076cd,0xbcb1a03f,0xbc89622a,0xbc4508b1,0xbcb79a1c,0xbc8ede7e,0xbc82a5cb,0xbc531d57,0xbc4c2d08,0xbbe3a0eb,0xbb61a817,0x3c393fa2,0x3c2a5d62,0xbc54a4a7,0xbb37aa80,0x3ae02d3e,0xbb729f2c,0xb9a0fbf2,0xbab61af3,0xbaa5e6cf,0x3a0f3585, +0x393ee346,0xbb95fad9,0x3b9193b6,0x3acd7bc8,0x3903d5ff,0xbbfe427e,0x3d6a9929,0x3c93a501,0xbc9c4bf8,0xbd1586da,0xbd760a02,0xbcaa7ffa,0xbc815e23,0xbcf6ccc5,0xbc756260,0xbc362531,0xbc6962ed,0xbc3e903c,0xbc897909,0xbcc78b72,0xbc7e1e29,0xbc79e030,0xbc1ca5d0,0xbc5d3a71,0xbc11d4ca, +0xbbebd2a5,0x3c391447,0x3c2c8be5,0xbbf941d1,0xbb0a3696,0xbb89e774,0xbba19930,0xba843309,0x38d72463,0xbb74efe0,0x39833cd2,0x3b8a2ba9,0x3a712b69,0x3bf3291a,0x3c80b0c5,0x3d26e4f6,0x3d56c769,0x3d2eb879,0x3d956974,0x3d9a72bd,0x3d9b9785,0x3d22fa24,0x3c4c2a59,0xbcc62393,0xbd6ef50b, +0xbd21f9cd,0xbcfccb9b,0xbc4b9225,0xb9c653e2,0xbb02ed4b,0xbb243600,0xbc91fa39,0xbca3290f,0xbcb32fb2,0xbcb37f7c,0xbc56fd6f,0xbc4a82f4,0xbbea53e8,0xbb4bdb79,0xbb73835d,0x3b80e082,0x3bdc2f0b,0x3c4dd668,0x3b7b9630,0xb94a5482,0xb8aa06cd,0x3c4026bb,0x3c7922fa,0x3cc1cf7f,0x3cf8e0b3, +0x3d04d12f,0x3d0a8245,0x3d24b9b5,0x3cd0ee84,0x3ccec800,0x3d016bc2,0x3d16188c,0x3d359b1d,0x3d5ceaa0,0x3d4bf9ab,0x3d06bafe,0x3c8ae7f3,0xbb3eea88,0xbc8da704,0xbd05f4f1,0xbd13a12f,0xbd0a6fa5,0xbcf6709e,0xbcd5581f,0xbc74278d,0xbc60a6a9,0xbc2443e5,0xbbd16eb8,0x3b7b1bf7,0x3bce231a, +0x3b914b02,0x3b4772fa,0x3b8ad83a,0x3bf5c774,0x3c2763e9,0x3c795c1e,0x3c6c1c7a,0x3c93f185,0x3c9b48ff,0x3c96c181,0x3c954578,0x3c9dfb90,0x3c9748dd,0x3cde3578,0x3c8165c0,0x3ca42157,0x3ce04c8d,0x3d0463bd,0x3d16ddb1,0x3d1cd383,0x3d235b3f,0x3d14829c,0x3cf93034,0x3cbbbc79,0x3caa30c1, +0x3c34b8ef,0x3c006d06,0x3b347cee,0x3b0eda85,0x3bd5350d,0x3c07e23a,0x3c1da120,0x3c155b25,0x3c37d390,0x3c4eb1ee,0x3c5011d7,0x3c37807d,0x3c3086be,0x3c17c6a5,0x3c250601,0x3c5700de,0x3c5f1e27,0x3c64851b,0x3c67b96f,0x3c5ad104,0x3c54588b,0x3c75a0c9,0x3c83304b,0x3c8d0961,0x3c6ecd81, +0x3c8ad76c,0x3c94c5ec,0x3c8b84f6,0x3c802d4d,0x3c712158,0x3c893374,0x3ca8a5a5,0x3cd8b9fb,0x3cebb9b4,0x3d046eb1,0x3d240682,0x3d067280,0x3d083ea9,0x3ce7ed0b,0x3ce539a9,0x3ce3dc7a,0x3cb057a7,0x3cb270fb,0x3cc361f1,0x3cb58e07,0x3ca6d772,0x3c84c1c3,0x3c60a38c,0x3c5cf4d4,0x3c679cd5, +0x3c3b9d39,0x3c3b173d,0x3c260a99,0x3c32971a,0x3c1bb3ae,0x3c14a8b8,0x3bfe392c,0x3c22e4d2,0x3c60ea41,0x3c8c4962,0x3c95cf78,0x3bf9fb3a,0x3c545db7,0x3c750c34,0x3c8c671d,0x3c9bdb27,0x3c9d9751,0x3c941ed1,0x3c8136db,0x3c5b80df,0x3c3d1673,0x3c0c2c36,0x3c2ce5ea,0x3c3d60f5,0x3c7f061c, +0x3c4e147f,0x3c3527b5,0x3c60c45e,0x3c374b72,0x3be5a448,0x3c0b2000,0x3c4c2efd,0x3c6e4326,0x3c7287a6,0x3c6331db,0x3c5a97b6,0x3c541a65,0x3c6c8296,0x3c67d0c2,0x3c576461,0x3c640bb9,0x3c75f993,0x3c4fea84,0x3c66c456,0x3c22893e,0x3c00342d,0x3c3be588,0x3c35ad41,0x3c57cf2d,0x3c479b3b, +0x3c3d597c,0x3c38de11,0x3c3c1ad6,0x3c4c2098,0x3c65e476,0x3c7f7806,0x3c8ad3ac,0x3c94f828,0x3c987a91,0x3c9388ff,0x3c90d4cc,0x3c880cc9,0x3c82f908,0x3c7792b3,0x3c696118,0x3c68f879,0x3c51afea,0x3c30d517,0x3c11b0ee,0x3bf25bd8,0x3c3043f6,0x3c162be3,0x3bced5e4,0x3bcb16c2,0x3bbe3c78, +0x3bc495cc,0x3bb03859,0x3b9ef041,0x3babe21a,0x3c0b4e57,0x3c3078a6,0x3be06bde,0x3c178f22,0x3c9a6b24,0x3b476b79,0x3acf6250,0x39968a52,0x3a976f96,0x3ab80873,0x3b001eae,0x3af11f49,0x3aff6222,0x3b092092,0x3a9d8d91,0x3a3bce89,0xb98814f1,0x3aacffa9,0x3afdf43c,0x3b3f3e09,0x3ae1b527, +0x3ac340ba,0x3ad30b83,0x3af8a50c,0x3b04533b,0x3b09d7ba,0x3b27437e,0x3b3e39a6,0x3b6aa417,0x3b2c43a4,0x3b1846a6,0x3adf6aec,0x3af025b1,0x3af11126,0x3ae12500,0x3b1446d8,0x3b24dfb1,0x3b062b8f,0x3b1cd0e4,0x3b0edebf,0x3af30345,0x3b258cfd,0x3b4d0c1b,0xb7f5356d,0x3adb252b,0x3b47585e, +0x3badc198,0x3b850ada,0x3b5018bd,0x3b356582,0xb95da6ec,0xbae69420,0xbb818cb4,0x39f2d8f3,0x3b557281,0x3bb6356e,0x3b04d956,0x3ab2e77a,0x3af33d48,0x3b125a26,0x3b3bd270,0x3b488510,0x3b8761df,0x3bb2be97,0x3bfa85ee,0x3ba6096f,0x3b540311,0x3b05edc1,0x3a5a30a3,0x3a547d20,0x3b1a3d65, +0x3b83a45c,0x3b7776f9,0x3b1f95a5,0x3b97842d,0x3b953bf0,0xb901efa0,0x3b0a4f48,0x3b558b52,0xbb4700d8,0xb970ec1f,0x3ae857c7,0x3ba74b37,0x3b8fb63b,0x3b93a3ec,0x3b7b6f16,0xbb0f5d29,0xbbae4036,0xbc1e0173,0xba0c3e67,0x3b62fad7,0x3c07a8c3,0x3b02acc6,0x3847400a,0x3a804093,0x3b07c11d, +0x3b6c3024,0x3b4d23e3,0x3bacc018,0x3c0121dd,0x3c3c3ef1,0x3bf9a9f7,0x3b9de339,0x3a932f43,0xb95e4136,0x39b49752,0x3a1cb085,0x3b80f0f7,0x3ba4e903,0x3b147d83,0x3baedaa9,0x3b8dbfc1,0x3a38c360,0x3b836432,0x3b7b4b9f,0xbb2c0fe2,0x3a95e11d,0x3ba6fd7b,0x3c46b83a,0x3bfccc2d,0x3bc52818, +0x3b9198c4,0xbba9162d,0xbc28d15b,0xbc93d68f,0xbb1c29c5,0x3ba4e04d,0x3c63b535,0x3ae3107c,0xba39271b,0x39cee531,0x3ae9f37f,0x3b80bef9,0x3b50edaa,0x3bd88d91,0x3c37df28,0x3c8e9db3,0x3c4c86f5,0x3c0c8d4c,0x3aff2ed7,0xbb0ca15d,0xbb5e3913,0xbaa042bc,0x3bd81b2f,0x3c0f044e,0x3b2ab9e4, +0x3c2f4f1c,0x3c1b0edb,0xbbca9601,0x3b43d8cc,0x3c4d8196,0xbb34a62a,0xbaad17a1,0x3b73e84f,0x3bb7fabb,0x3c1f9d5c,0x3c08d732,0x3bd0f04d,0xbb7f8dee,0xbc54ccfd,0xbc9f031d,0xbba26c8d,0x3ba66c80,0x3c7b53fe,0x3af69c36,0xbb3a3e27,0xba6d6f77,0x3ad98aad,0x3b90ee1f,0x3b4e9d8f,0x3be8b821, +0x3c404ded,0x3ca17481,0x3c7908b6,0x3c56573a,0x3b64488e,0xba7c8997,0xbbba3708,0xbbe57302,0x3bc23b68,0x3c315fc9,0x3b9d4408,0x3c4f9c5f,0x3bbe50e1,0xbac9b17c,0x3c354458,0xbd60b98b,0xbc353690,0xbb7e0707,0xb9269d95,0xbbcc1ca0,0xbc2e435d,0xbc8aaf24,0xbc2bf30d,0xbd2b4332,0xbd075afc, +0x3c65bffa,0x3c2604e4,0x3c36209f,0x3be93146,0x3a43431f,0xbafa138d,0x3b6cccdb,0x3bc93003,0x3bb2d5af,0x3bb829f5,0x3c13b3f4,0x3c383d09,0x3cd19467,0x3c558075,0x3beec98c,0x39793ca1,0x3b5c7e83,0x379b0088,0xbbab3d3d,0xbc120d75,0xbbbad5af,0x3a8b56ef,0x3bcaa00e,0x3c2158bd,0x3cb5b29c, +0xbd185f1b,0x3c8f7e21,0xbb16c882,0xbc12f5e6,0xbc0deb44,0xbccd04ca,0xbb18d116,0xba81cd5c,0xbc5166e2,0xba755060,0x3b20d846,0x39f74cad,0x3b1954d1,0x3b8b1dd2,0xbc11ee71,0xbb9f227d,0xbbe05e0d,0xbbbf81d1,0xbb915692,0x3ad8dd78,0x3b8bb9c0,0x3c2bed6a,0x3c1545f4,0xbb3d31f5,0xb9a0439f, +0x39bcf870,0xb96c3b37,0xba199457,0xbad5d66b,0xbc019676,0xbba73fa1,0xbc108896,0xbc4b4e9c,0xbc94e1ad,0xbc99899f,0xbc7cebd0,0x3bda55f0,0xbc5b5d04,0xbc190060,0x3c928d1b,0x3c13f26c,0x3a3dd2fb,0x39a597a9,0xbb99be46,0xbcce2686,0xbca664b0,0xbcadba45,0xbcb50dd0,0xbba1cc2d,0xbb0fd541, +0xbc78197f,0xbc72879a,0xbc449342,0xbc571129,0xbc1ae7de,0xbbcc34ad,0xbb1288db,0x3c15a4cb,0x3c0484e8,0xbc21edb3,0xbaab3b71,0x3b80997d,0xb98ffcd4,0x39f77aab,0xb9d5777b,0xba92e19f,0xbad1f9cd,0xbbf0775c,0xbbadee50,0xbc2e526b,0xbc6a1aea,0xbcc987f3,0xbc814f42,0xbc18bcc8,0xbc59f08c, +0xbc83be17,0xbc83536d,0xbcde8b3d,0xbc3f10be,0xbc684c0f,0xbd070d7a,0xbc93bd7b,0xbc806679,0xbc3d6cbd,0xbbcfc9c4,0xbb763cbc,0xbc5ee969,0xbc38479a,0xbc57ce3e,0xbc5b9835,0xbc3fa204,0xbbded53a,0xbadbe625,0x3be2748d,0x3bd77ab0,0xbc1a466c,0xbb595252,0x3aa7de5a,0xbb361739,0xb98287c8, +0xbb2ceb1b,0xbaba5921,0xbb279f53,0xbb7e320b,0xbbf3c784,0x39b5b3c2,0xbba932a1,0xbb594b64,0xbc312bb3,0x3cb6459a,0xbc85e587,0xbd8517d7,0xbd907616,0xbd81a3a5,0xbccf4f80,0xbc8fffbe,0xbcec3379,0xbc8d8629,0xbc49a0ff,0xbc5eb2bc,0xbc4153b1,0xbc4550d4,0xbc416a72,0xbc0c7e02,0xbc118c20, +0xbc0032b2,0xbc33a39f,0xbbd89df7,0x39c6c435,0x3bbc5c2b,0x3ba69b0c,0xbbe2be5f,0xbba247bb,0xbbbc495f,0xbbde8500,0xb9d3f0d3,0xb9aa1ddc,0xbbdf5d86,0xbb1ecc9c,0xba881c8f,0xbbf53190,0xbb61d52b,0x3b60539a,0x3cc535a2,0x3cef2a66,0x3d75d380,0x3db6679f,0x3d923a9c,0x3d70e520,0x3cb80282, +0xbc97d2cd,0xbd357e51,0xbd481930,0xbcdcf70b,0xbca99b77,0xbc31fcd1,0xbc4bcbfc,0xbbe82871,0x3bd4f98c,0xbb83be61,0xbc00c142,0xbbd9d33a,0xbc0b0539,0xbc000f65,0xbc068a14,0xbbcd1e7f,0xbba793c5,0xbbbf1461,0x3b26a5ac,0x3b8bcfbf,0x3c016f5c,0x3a96b8e9,0xb8c01156,0x3a97020a,0x3c261ab1, +0x3c64b19d,0x3cd441c6,0x3d218414,0x3d2a6e5b,0x3d2bd4ff,0x3d4f47a2,0x3cfd74fd,0x3ce4dd64,0x3d0dd682,0x3d20f9fc,0x3d3b6c0b,0x3d4d3c68,0x3d22f94b,0x3c90c31b,0xbb7c3814,0xbcbab660,0xbcf1868c,0xbd377133,0xbd33a198,0xbd0ad612,0xbce0c9ee,0xbcc25037,0xbca038e9,0xbc897356,0xbc2ec8ce, +0xbb80ec99,0x3b83f235,0x3ba95d54,0xb9891beb,0xbb226b71,0xba96f1b6,0x3b1b6ddb,0x3c327ae3,0x3c88939a,0x3c8ae343,0x3c96a6e8,0x3c9c1fd8,0x3c97c9fd,0x3cb7ca1f,0x3ccd04ec,0x3cc8c957,0x3cfef107,0x3cb82185,0x3ce9bd7b,0x3d1d8b2b,0x3d2fbd0b,0x3d4dda1b,0x3d3ee440,0x3d3d192d,0x3d223f18, +0x3cf21dfd,0x3c97c432,0x3c6a560f,0x3b698a43,0xb981f41e,0xbba11972,0xbb80a8f9,0xb88c0fb8,0xbb41f976,0x3a9483f0,0x3ad8f501,0x3bae43b8,0x3c1c18b5,0x3c163fda,0x3c09e611,0x3bf8c84f,0x3be34c37,0x3c24ccdf,0x3c33a017,0x3c521038,0x3c5ab014,0x3c63b48c,0x3c5e05e6,0x3c5cd2e5,0x3c8d7c23, +0x3c94279f,0x3c953aea,0x3c9a01b3,0x3c9b68b5,0x3cc2f91d,0x3cc97da4,0x3cd4a430,0x3ce14fb0,0x3cf9e548,0x3d119c95,0x3d311623,0x3d2f3f12,0x3d2bca50,0x3d39e125,0x3d0facad,0x3d027540,0x3cc12e41,0x3ca698d6,0x3c8f7c4c,0x3c508792,0x3c4c51a2,0x3c4773ca,0x3c3816e3,0x3c5726de,0x3c375c83, +0x3c45bc22,0x3c57066c,0x3c6d91e1,0x3c64016d,0x3c454976,0x3c51ed4e,0x3c266f96,0x3c42c8d4,0x3c295068,0x3c36f1e7,0x3c3a7c44,0x3c5ec4d7,0x3c870c5c,0x3ca7db0e,0x3c79ba09,0x3cbc088f,0x3ccae738,0x3cd73073,0x3cdf5ec6,0x3ce9358d,0x3cdbaf38,0x3cd221ba,0x3cb2309e,0x3ca576df,0x3c8e6630, +0x3c9a5ffa,0x3ca4160a,0x3cbddc2b,0x3caadc45,0x3c9679c6,0x3c990b5b,0x3c7683f5,0x3c39162d,0x3c277bd0,0x3c29a092,0x3c60dc52,0x3c66432f,0x3c6e38d6,0x3c6d6518,0x3c6d28d3,0x3c93445e,0x3c94f3ac,0x3c9b8a5b,0x3ca64400,0x3cba05d4,0x3ca5c045,0x3cbb2e09,0x3ca36152,0x3c878ad7,0x3cb3be28, +0x3c89a1ad,0x3c9ac3c9,0x3c947918,0x3c941c65,0x3c952e64,0x3c9bd7ac,0x3ca7c415,0x3cbb649c,0x3cc24425,0x3cc68a14,0x3cc86fa1,0x3cc54c7d,0x3cb89789,0x3caf104b,0x3ca1dc2c,0x3c9d0a9a,0x3c98f197,0x3c91dd2b,0x3c8e1526,0x3c87ea39,0x3c7b046f,0x3c66c95e,0x3c4e4572,0x3c83b69f,0x3c75a6ac, +0x3c5116e6,0x3c4bfd81,0x3c41c45a,0x3c43b066,0x3c35f81d,0x3c2fc8e3,0x3c3c3545,0x3c6c4095,0x3c834e1a,0x3c4b3c4f,0x3c6fc421,0x3ce9370a,0x3b4b1b21,0x3abf2a5d,0x3a544d81,0x3aa61364,0x3aa40046,0x3a9b68bd,0x3ae8835c,0x3af5a782,0x3ad475f1,0x3a7eccbf,0x3a2fe327,0x39c41de1,0x3a90a3da, +0x3acc71ff,0x3b3cb098,0x3af9ad83,0x3af285a5,0x3b070517,0x3b1812d8,0x3b1f0d4d,0x3b263a31,0x3b2b98ad,0x3b2d39be,0x3b484451,0x3b1fcac4,0x3b04042f,0x3ab4ee26,0x3ab95d52,0x3ac5051d,0x3adc3ed1,0x3aefd907,0x3afd1ee3,0x3ad22c67,0x3ae8b4a2,0x3af5ab0f,0x3ae062dd,0x3af51eef,0x3abac47e, +0xba80fe25,0x398a7c79,0x3abc265b,0x3b0583a8,0x3b94ff24,0x3b90e558,0x3b3689d1,0x3a9aac70,0xba18d931,0xbb0fc009,0xba3cd083,0x3ac93141,0x3bacc65c,0x3b0cfb0b,0x3b05b154,0x3b3eb8da,0x3b597e2d,0x3b82b2f0,0x3b8b83cf,0x3ba379c2,0x3bc44ab3,0x3be3fa09,0x3b93e44f,0x3b435659,0x3b002702, +0x3a8b05ad,0x3a8550de,0x3b5630b2,0x3b659938,0x3b433bb5,0x3b00c63b,0x3b479d8e,0x3b633aef,0x3abc13c8,0x3b009e9c,0x3a66b0bb,0xbb996efe,0xbb136767,0xba979ae5,0xb9d093c7,0x3b66d678,0x3ba9b543,0x3abae5d6,0xbb1a1b4c,0xbbab00de,0xbbcfb547,0xbb71db59,0xb9b67bd3,0x3be76f7b,0x3b0f3129, +0x3ad589e2,0x3b528f4e,0x3b88ec5b,0x3bbdbd7a,0x3baaa353,0x3bdf9daa,0x3c0c49e4,0x3c2be728,0x3be68d45,0x3b908862,0x3ab50964,0x39b9d7dc,0x3ae44c21,0x3b1e276d,0x3b7ae0f1,0x3b7f2c41,0x3b092bc6,0x3b47e741,0x3b2b1b4a,0x3b29aab0,0x3b3a2582,0xb982901b,0xbc21de25,0xbbb9f5fc,0xba04b56f, +0x3aad50ce,0x3c01e7ed,0x3c1db5c4,0x3b7ac2a3,0xbad56a48,0xbbdb678b,0xbc57041d,0xbbdb5893,0xba9b5ddf,0x3c4107d8,0x3ac9543d,0x3a8afe70,0x3b62a227,0x3ba2e995,0x3bea05a5,0x3bcd253e,0x3c1c3fee,0x3c50ca59,0x3c8a7819,0x3c345b2e,0x3beb6b0c,0x3b032648,0xbad98326,0xbb0d06d6,0x3af68656, +0x3bc59b77,0x3bcb2433,0x3ab3f4e6,0x3bd31b84,0x3bd2cc00,0xba8db037,0x3ac8c6a1,0x3b22d2fd,0xbc3e3f10,0xbc17eb45,0xbba500b2,0xbba76852,0x3bb3dd8b,0x3bd48f7a,0x399e5db5,0xbba2c7b3,0xbc694d34,0xbc6e426d,0xbc448000,0xbb4bf29c,0x3c2f6da6,0x3b039b52,0x39e4acd8,0x3b59bda4,0x3bb50c91, +0x3c07cef2,0x3be2c93d,0x3c0c2312,0x3c4559a2,0x3ca491e9,0x3c6e0e0f,0x3c39a2e0,0x3b4338ff,0xbabcb383,0xbba3ac75,0xbb8d6e1d,0x3bc595fa,0x3c0e012c,0x3b32e39f,0x3c0a8f5e,0x3b242e3f,0x3a34bcca,0x3b9b2f91,0xbd2dbe13,0xba88c5f8,0xba8c075b,0x3a80cbc7,0x3b80e268,0x3c086daa,0x3b8c4435, +0xbb0804ea,0xbcd73df7,0xbc91dc62,0x3cdfeae2,0x3c4da84b,0x3c341adf,0x3bcd2313,0x3b94cafb,0x3b2ef6f5,0x3babad40,0x3c010698,0x3c04b0a3,0x3b88c8c1,0x3c285a36,0x3c530e43,0x3cba5012,0x3c3232f5,0x3bb26d1b,0xbaa30973,0x3b360de3,0x3b0f0c93,0xbba29d80,0xbba5e2fb,0xbb1698ac,0xb9e60f66, +0x3c07f440,0x3c2dcd30,0x3c96be6e,0xbd058c9c,0x3c769841,0xb93a2b5c,0xbbd2b21c,0xbc146573,0xbd05e979,0xbc2a3630,0xbc1c7753,0xbc62574e,0xbc3d3130,0xbc55f526,0xbc32830b,0xbc03e069,0xbb591841,0x3b5d05c9,0xbb210630,0xbba2fc1a,0xbb38abdd,0xba41ebdb,0x3b9714d7,0x3bdec741,0x3bfedc63, +0x3bee27cb,0xba918e3e,0x3b1321b7,0x3b67f503,0x3b14447d,0x3a4b9f0f,0xbb041c6d,0xbbbf4703,0xbb91fa5a,0xbbe52155,0xbbdf26f6,0xbc6d7c7f,0xbc6e9902,0xbc2b9f06,0x3c0a6148,0xbb775d70,0x3ba512e0,0x3caaffb7,0x3c207cdb,0x3915ee0d,0x3b5aff23,0xba0b14b6,0xbcac50a9,0xbcb57c62,0xbcabb680, +0xbc535b0c,0xbc018cc6,0xbc0010de,0xbba75a6a,0xbc10e5d7,0xbbfed34c,0xbb974d12,0xbbb243a4,0xbb23231d,0x3b241a49,0x3bb5ddd3,0x3b9ed59d,0xbbe9d0d6,0xba84c0e8,0x3b4e4478,0x3af87611,0x33197313,0xb9d44bbf,0x3a4cd777,0xbac0d654,0xbbe4dd36,0xbbe20d9a,0xbc1564b5,0xbc474ff6,0xbc8cfa90, +0xbbf8c2c4,0xbc65ac0f,0xbc93833e,0xbce1615f,0xbcc5a457,0xbc71305a,0xbc10a4e8,0xbbe9bb40,0xbc592857,0xbc71d9f0,0xbc862b5c,0xbc04bee1,0xbbe38174,0xbb66b238,0x39b375fc,0xbbaddfee,0xbbfa5aa5,0xbbab867b,0xbc0186b2,0xbb8a64c2,0x3b2bded4,0x3b5087eb,0x3b1be54c,0xbb9016f1,0xbb674780, +0x3a21a53c,0xbaa04901,0x3864a575,0xbadf3071,0xbae5f20e,0xbb859087,0xbc014d6f,0xbc652c94,0xbbf20e37,0xbc543278,0xbc2d2679,0xbc969961,0xbc3354a4,0xbd325987,0xbdacad05,0xbda50f5a,0xbd3558df,0xbd0e7fa9,0xbcd62b37,0xbc60a4d1,0xbc9f0196,0xbc74fd2e,0xbc1cd298,0xbc09c054,0xbc0fac60, +0xbb78f9df,0xbbef2a1e,0xbc042cc9,0xbbbce0ac,0xbb858840,0xb91aa2cc,0x3c13c335,0x3ad54167,0xbad72ab9,0xbbc98c71,0xbb858e41,0xbb5d4afb,0xbb5a4a84,0x3a7fef1f,0x3a0f65f7,0xbbd1aaa1,0xbb99d92a,0xbbc655bb,0xbc4e874d,0xbc39eb01,0xbc09ee33,0x3b735dae,0x3b2658df,0x3d8a3927,0x3da87b54, +0x3d6acfec,0x3d185647,0xbb03034d,0xbd1505f8,0xbd41e5d6,0xbcd220c3,0xbc92651e,0xbc98a0c5,0xbc9b48eb,0xbcb7855e,0xbc88cc0b,0xbc4c0c6f,0xbadc5736,0x3abdad5b,0xbb1cf570,0xbba2bb24,0xbbcb6e61,0xbb5ffa8a,0x39ed526e,0x3b364963,0xbbc6c6cc,0x3a7e4c4d,0x3a8b9a24,0x3aaea626,0xbb045553, +0x39e30a4e,0x3b951b8e,0x3c0f665a,0x3c520462,0x3cc34c9d,0x3d32690d,0x3d4f1b78,0x3d474d0d,0x3d65a26d,0x3d0e85ed,0x3cebd351,0x3d052f3d,0x3d07fb82,0x3cfb5958,0x3cf22304,0x3c48b87d,0xbc63e1c5,0xbcd614d7,0xbd057e63,0xbce3f825,0xbd0d649e,0xbd050c07,0xbcd7dbb9,0xbce73e8e,0xbcc9bda2, +0xbca261bd,0xbc8304de,0xbc318007,0xbb56e03d,0x3b571d44,0x3b29f15d,0xbb026114,0xba674bd1,0xb9d47fcd,0x3b7621a0,0x3c3b7d8b,0x3c843c2a,0x3c9ce188,0x3c9e6a33,0x3ca263c7,0x3c9f1878,0x3cc36457,0x3cd7c7c2,0x3cdabdd4,0x3d02e7aa,0x3cf23f12,0x3d0e7e58,0x3d36ad60,0x3d3e9623,0x3d5cbb26, +0x3d40d88e,0x3d30fea3,0x3cf7f814,0x3ca22a08,0x3c0ae0a9,0x3b1db629,0xbb5c0878,0xbb9c69d7,0xbba3848c,0xbbfd1798,0xbbc90c5d,0xbc220b81,0xbbf57acf,0xbbccd21d,0xbb383f15,0x3b052b02,0x3b900b8b,0x3bdd4d8d,0x3be97718,0x3c1a00a0,0x3c567341,0x3c4bfb4f,0x3c60bca8,0x3c71c746,0x3c84d74b, +0x3c884ef0,0x3c7d3637,0x3cb11467,0x3cb67319,0x3cb8c19f,0x3ccf3aff,0x3cc84680,0x3cf19b78,0x3d04e80f,0x3d17d795,0x3d2e2189,0x3d2d1e96,0x3d3924ec,0x3d519533,0x3d38ce52,0x3d1828a6,0x3d07b862,0x3cd58dd1,0x3cbd4911,0x3c85d51e,0x3c5cbe1f,0x3c214c50,0x3bb9ec5f,0x3bc6516e,0x3b90f102, +0x3b6f2e73,0x3bf74298,0x3c1760f2,0x3c50641b,0x3c6cfad9,0x3c822182,0x3c8ad7c0,0x3c79e8b6,0x3c880b64,0x3c54801e,0x3c8160b3,0x3c6e5989,0x3c8ab7f3,0x3c8b57db,0x3c8bf7d0,0x3ca92b38,0x3ccbd2a9,0x3cdde87d,0x3d0b0b1d,0x3d0a1596,0x3d018d03,0x3ce7ea3c,0x3cf64642,0x3cd9f655,0x3ccd08ab, +0x3cbb8fe3,0x3cc9f434,0x3cc59107,0x3cc73189,0x3cc7e421,0x3cd2bed3,0x3cc724e3,0x3cba57be,0x3cc02df8,0x3ca92627,0x3c995c93,0x3c8ee36e,0x3c799cfc,0x3c8caf8c,0x3c8843c9,0x3c8ecf7b,0x3c8d8cb5,0x3c8b970b,0x3cacb1be,0x3cb3ff05,0x3cc4a53a,0x3cd52fa9,0x3ce5fd54,0x3cd86492,0x3cf2f9b1, +0x3ceccfe8,0x3cdaa6e8,0x3d05e47f,0x3cad301d,0x3cbd4740,0x3cba19e2,0x3cbe248b,0x3cc1b24e,0x3ccaa543,0x3cd4e2ec,0x3ce78c01,0x3ce4065d,0x3cda2453,0x3cd1a515,0x3ccb6c6a,0x3cbf5056,0x3cb508dc,0x3caaff7c,0x3ca6869c,0x3ca20e1f,0x3c9b7e72,0x3c96a6db,0x3c94dd40,0x3c90c0be,0x3c8e4ee8, +0x3c86bf71,0x3c9f2240,0x3c993de6,0x3c8a2d26,0x3c8a87ca,0x3c86aab6,0x3c8867fb,0x3c83f173,0x3c844ceb,0x3c8d991e,0x3c9d252d,0x3ca2ff6e,0x3c904614,0x3c9e0dae,0x3d0b1c28,0x3b6ea9e3,0x3b188150,0x3b068642,0x3b062e92,0x3afad892,0x3ad68b12,0x3b0fa32c,0x3b121a4b,0x3af654ea,0x3acbb72a, +0x3aba64cb,0x3a91f3c5,0x3aa71c55,0x3ac93eff,0x3b359bc8,0x3b0d81fc,0x3b15a41a,0x3b24e9dc,0x3b372c46,0x3b3f9d5d,0x3b44b80b,0x3b497d03,0x3b43577f,0x3b436b79,0x3b3018d9,0x3b187eab,0x3ad92858,0x3aeb0c8b,0x3afa721b,0x3b12fb2d,0x3b07650f,0x3b019f39,0x3af84904,0x3af14c6d,0x3b1458ea, +0x3b15185d,0x3b093456,0x3a0b34f9,0xba868142,0x37971cce,0x39d1e2f9,0x3a701200,0x3b9bdac0,0x3b91cc1a,0x3b11c09d,0x3ab98f9d,0xb9aebf92,0xbaeba394,0xbaf14d4f,0x395676f1,0x3b980471,0x3b29702a,0x3b402395,0x3b7c77cc,0x3b8dbb3a,0x3ba0f624,0x3ba82485,0x3bc74493,0x3bdbea16,0x3bd63b44, +0x3b948d55,0x3b4caa3b,0x3b0cf932,0x3afd46d6,0x3b0d36d1,0x3b9c6459,0x3b68fc3b,0x3b3aff34,0x3b2a084b,0x3b140405,0x3b586a51,0x3b859916,0x3b4ea8fa,0x3a1d74a8,0xba817fed,0xbac3f039,0xba90cbf3,0xbb05dce4,0x3b73c709,0x3b9af198,0x3a158c65,0xba176d42,0xbb5d9817,0xbb925017,0xbbb675a5, +0xbb55e294,0x3babb2d5,0x3b012e93,0x3b29080a,0x3b89240e,0x3bb28181,0x3be61f22,0x3bdc19ed,0x3c0b69ec,0x3c170a2b,0x3c1a9b52,0x3bdb6f0e,0x3b8cea75,0x3ac788b3,0x3aa5f0d7,0x3b49e1fd,0x3ba28155,0x3b7ada8d,0x3b4f7594,0x3b3a7146,0x3afbbdaa,0x3b0f69af,0x3bc17767,0x3b55c305,0xbb56a394, +0xbc22553a,0xbbbf1b3c,0xbbd59dba,0xbb8e7569,0x3bfa134d,0x3c01351a,0x3a555f7e,0xba58363d,0xbbd1b6f3,0xbc439e4d,0xbc35caa5,0xbbdbde45,0x3c13842c,0x3acbb51d,0x3b1b2fe8,0x3ba0d3aa,0x3be6c5ef,0x3c11e047,0x3c09a874,0x3c4734eb,0x3c6a7d87,0x3c7d56bd,0x3c1ff67d,0x3bd08cff,0x3ad0e0d5, +0xb97fc682,0x39193478,0x3bbe55b0,0x3bbaf654,0x3b8761a2,0x3b309a10,0x3b2c049b,0x3b7a1cb6,0x3bc9a752,0x3b62b711,0xba872177,0xbbdb0fc4,0xbb9fb1e5,0xbbc4ce23,0xbc1dfafc,0x3b8c03de,0x3b97b277,0xbacd9b28,0xbb087fd0,0xbc2283e5,0xbc31fda7,0xbc818804,0xbc2726b9,0x3bc631a9,0x3a8210b9, +0x3aaa6b4b,0x3b866a8f,0x3bef8670,0x3c26e092,0x3c1f6cd2,0x3c33d0a8,0x3c55cfeb,0x3c9c48bc,0x3c5212b3,0x3c135037,0x3afc4b20,0xba9ab876,0xbb4586c3,0xb92be975,0x3bb586c1,0x3bd77122,0x3b27bf86,0x3b841771,0x39b8d88e,0x3bdcf10f,0x3b4b5820,0xbcd83b3c,0xbb85d6b2,0xbbcd6e28,0x3b1308d2, +0x3ba3f06e,0x3c82a01e,0x3c5fef0e,0x3b0a8a85,0xbc8df788,0xbc6e277d,0x3c93497c,0x3ae5cedc,0x3b16deb4,0x3c1bf688,0x3af69069,0x3a26862a,0x3b835549,0x3bab6365,0x3bf9788c,0x3c009acf,0x3c7bce5c,0x3c8944a8,0x3c99bca8,0x3c2dc073,0x3bb6b196,0xbaa27790,0x3b49ebca,0x3b80a4c5,0xbb4148ef, +0xbac1c351,0x3a8043d5,0x3a98a660,0x3c5cad18,0x3c66a94a,0x3c5dc7bc,0xbcaa43c8,0x3b998618,0x3bd484bd,0x3b323ed3,0xbbc74969,0xbcf45251,0xbcca45f5,0xbcc17569,0xbbce5f8a,0xbc443c46,0xbc3539f5,0xbb8429c7,0xbc46b51c,0xbc2d6d90,0x3a50d80b,0xbb0d32c9,0xbb180b06,0xbb55da1c,0x3b2283d2, +0x3bcd482d,0x3c298b73,0x3bafd47c,0x3baf9817,0x3b125ace,0x3b80fa45,0x3bab75dd,0x3b0f8e6c,0x37ec2f6e,0xbb157fe9,0xbb64ada7,0xbb1f1c20,0xbbaf98e1,0xbbab1672,0xbc60c76f,0xbc4a0743,0xbbdcad3e,0x3aac172c,0x3b2f9912,0x3ca5c5de,0x3c969c45,0x3bc1aa40,0xb9d4bdf5,0x3a226ce9,0x3b30efc4, +0xbbc3d226,0xbc73887b,0xbc773241,0xbc05dff2,0xbc0559de,0xbba2727f,0xba493d27,0xbb0aefa6,0xbb4989ad,0x3a25afb1,0xbab76e27,0x3b06b84c,0x3c23568f,0x3bb5fe12,0x3b85649f,0xbaac943c,0x3a856d67,0x3b6caf1a,0x3b4cf3ca,0x3ab50c5c,0x380402da,0x3a944a16,0xbacbe6b0,0xbbca68a8,0xbc0abdbe, +0xbbeeed36,0xbc311186,0xbc936291,0xbadd898c,0xbc7ef355,0xbcbc95b2,0xbcc63551,0xbca6bb81,0xbb97cc3d,0xba588681,0xb858438b,0xbb49c0dc,0xbc49ca18,0xbc722b0e,0xbb9e2714,0xbbda638a,0xbb1e8167,0x3a34726e,0xba5ecd77,0xba2b5972,0x3abac1a3,0xba62f007,0x3ad94a4d,0x3c1d7fdd,0x3b1c59dc, +0x3ab96829,0xba4f7a3c,0xba80bb1f,0x3aa9516f,0x399db125,0x3a457bcb,0xba2aedc2,0xbada85ac,0xbb9a83e9,0xbc2569e4,0xbc80e4cd,0xbc38b540,0xbc75989f,0xbcb86dec,0xbca269dc,0xbd119712,0xbd662514,0xbd7a4e7c,0xbd562bc2,0xbcf93ae5,0xbd027575,0xbceb393e,0xbc40c35f,0xbc889ecf,0xbc118bcc, +0xbb21da75,0xbb5f6f52,0xbc0374d7,0xbc13e1d1,0xbc0d5f47,0xbc011c0d,0xbc0ffa54,0xbae36985,0x3ab6ed82,0x3c4e5ec5,0xb93ae952,0xbb862695,0xbba27159,0xbadb8c29,0xb9dc0501,0xba0a3fae,0x3aac008c,0x3a876a28,0xbb34211b,0xbba0afdb,0xbbf853a3,0xbc2f5134,0xbc46486f,0xbc607b05,0xbc63be6f, +0xbca1fc17,0x3d73bda3,0x3d5ebc41,0x3cce9e33,0x3b9baa76,0xbcf1f4de,0xbd17fe4e,0xbd09d3a4,0xbc7ade8d,0xbc863ebb,0xbca0084b,0xbcb4db87,0xbc7605c7,0xbc6055eb,0xbca39e68,0xbc2c74d0,0xbaf14e03,0xb9936442,0xbb524d55,0xba362ce0,0x3b799e22,0x3b8f193c,0x3bd5bbac,0xbb81ee10,0x3ac4f773, +0x3a4f9ebc,0xbb3e3e1c,0xbb33b06d,0x39da1c20,0x3b8895ee,0x3bb503ed,0x3c0cba85,0x3c78f54e,0x3d1658be,0x3d4c1fa8,0x3d4882c0,0x3d50690e,0x3d195cc2,0x3d01ef95,0x3d08d2b8,0x3ce1e4ea,0x3c778851,0x3b2f359d,0xbc8c877e,0xbd137b5a,0xbd0c5142,0xbcfc779a,0xbcbbd95a,0xbcb63502,0xbca96629, +0xbc893372,0xbcc56fa3,0xbcc3c9bd,0xbc97551b,0xbc872dc4,0xbc58eec3,0xbbcc4781,0xbb498df9,0xbb3a6756,0xbb18be98,0x3b466499,0x3ba706b3,0x3c2a1bab,0x3c4ff94d,0x3c75fc88,0x3c9dfec2,0x3ca7bc63,0x3cb3d6b6,0x3ccf0ef3,0x3cc237e1,0x3cc09f08,0x3ce52a2e,0x3d0353eb,0x3d115210,0x3d1c1861, +0x3d311d31,0x3d29dab6,0x3d42f3f9,0x3d10c637,0x3ce6b24c,0x3c748d92,0x3bb7d686,0xbb8adfea,0xbc5c8a66,0xbc3be9d7,0xbc2fd7bf,0xbc03d3f6,0xbc3cef11,0xbc2cdf59,0xbc235933,0xbc19970c,0xbc00d7a7,0xbbb874b8,0xbb0cb788,0x3b104e09,0x3b9cd65e,0x3bf57578,0x3c339991,0x3c67334c,0x3c60903d, +0x3c6bac01,0x3c84e9a2,0x3c9f3f7f,0x3caf963f,0x3cb80f6a,0x3cd74670,0x3cdc6141,0x3cea6868,0x3d0510fc,0x3cee994a,0x3cfda14d,0x3d0827fb,0x3d1cd26e,0x3d30fe1f,0x3d2e0f22,0x3d32a481,0x3d3b1de2,0x3d0f426d,0x3cba3309,0x3c45edbe,0x3c23ccd2,0x3c0ab245,0x3bc90c6b,0x3be32826,0x3bb348cf, +0x3b57c8c7,0x3b928418,0x3b9103a3,0x3b884613,0x3bde1bc1,0x3c1b3602,0x3c47229d,0x3c6066df,0x3c709550,0x3c8117ab,0x3c89b086,0x3c965066,0x3c8da063,0x3ca25376,0x3ca2568a,0x3cbb2d31,0x3cbfbbf4,0x3cc11eda,0x3cd14a45,0x3cdfd9b2,0x3d0dca15,0x3d0e7137,0x3d0b67c4,0x3cf715c5,0x3cce31d5, +0x3cd3c2a3,0x3cafed30,0x3cad7cae,0x3cb619e5,0x3cdb57c9,0x3cee6463,0x3ceb965d,0x3ce4fbb4,0x3cdfefd7,0x3ccad118,0x3cbd67cd,0x3cc28fda,0x3cacf207,0x3c97bd36,0x3c9227a6,0x3c993364,0x3ca0007b,0x3ca1b041,0x3ca9cb60,0x3cb0fccd,0x3cb43843,0x3cc95458,0x3ccc91eb,0x3cdbf201,0x3ceb8b5d, +0x3cf39cd8,0x3cf0504c,0x3d027ce1,0x3cff3d73,0x3d050370,0x3d113423,0x3cb9e7cc,0x3cbea3c8,0x3cc24858,0x3cc5e6ee,0x3cca1a68,0x3cd55263,0x3cdd852e,0x3ce73d39,0x3cd9573b,0x3cc655c3,0x3cb74df3,0x3cafed4b,0x3ca9635c,0x3ca632fe,0x3ca31e43,0x3ca08a84,0x3c9be7f2,0x3c987cdb,0x3c976e39, +0x3c92e3b0,0x3c99e3b3,0x3c9fe4f6,0x3ca039b0,0x3ca77f45,0x3ca6bbff,0x3c9f1f0b,0x3ca4048b,0x3ca2620c,0x3ca4fc85,0x3ca3f8de,0x3ca43222,0x3cac3284,0x3cb4ce09,0x3cb1fd84,0x3cb23ac8,0x3cb6f0bd,0x3d11d40b,0x3b9936bc,0x3b2df450,0x3b0fece5,0x3b26cf32,0x3b23d6a1,0x3b08d65f,0x3b32b428, +0x3b3d61ab,0x3b28f869,0x3b1f6f87,0x3b0be0cb,0x3aa06c66,0x3aca4067,0x3af4c615,0x3b44f439,0x3b333e78,0x3b42df5e,0x3b4ba843,0x3b60a768,0x3b674f85,0x3b6d32d3,0x3b6f40fb,0x3b60a9e8,0x3b44c4b7,0x3b512131,0x3b3649cd,0x3af89702,0x3b0d90ba,0x3b1a9e71,0x3b3d89ac,0x3b19ebe7,0x3b0a1ee4, +0x3b1b1d39,0x3b114ca2,0x3b3e9590,0x3b56b03b,0x3b2587e2,0x3ae369bd,0x3a280637,0x3ad1c540,0x3b12cfb9,0x3b1953c1,0x3bbf65cf,0x3bb64629,0x3b5c803f,0x3b5d248c,0x3aa92105,0xbae15af5,0xbb029b23,0xb91d6c31,0x3b939196,0x3b6df7c2,0x3b8b754f,0x3b9902d9,0x3ba99c71,0x3bbf00a7,0x3bce3687, +0x3be5e4e0,0x3bf468dd,0x3bd44348,0x3b9faee1,0x3b6f5aa3,0x3b28a2e5,0x3b3ba251,0x3b5ecd96,0x3bd01b7c,0x3b840e9b,0x3b623073,0x3b8198d2,0x3b1f8d89,0x3b7c494c,0x3bfc0b93,0x3b92ef95,0x3aedc845,0xb8c131e1,0x3a69b3d7,0x3a953d9c,0xba56d6cb,0x3b878864,0x3bb5eb1f,0x3b0022c2,0x3b234e86, +0xba99b2db,0xbbc8ce39,0xbbd70e75,0xbb8b4bc3,0x3b8fcb51,0x3b43ae89,0x3b8a967f,0x3ba93a57,0x3bd7d7f6,0x3c030db7,0x3c00ec74,0x3c1f9e1d,0x3c22f3b7,0x3c0ee8ee,0x3bd91d16,0x3b902e2e,0x3b028db0,0x3b0630d3,0x3b838d64,0x3bf93abd,0x3b8693f8,0x3b4c2a95,0x3b946780,0x3aecb55e,0x3b3db7d1, +0x3c355f45,0x3b95b230,0x3a94670f,0xbb7f8e9c,0xbaa00d10,0xba0532f3,0xba824842,0x3c0c57d8,0x3c1977cc,0x3b16ddfd,0x3b8e5102,0xbb2fe3c4,0xbc5592f8,0xbc5161c7,0xbc0f4a85,0x3bfbb730,0x3b6e05cc,0x3ba84e98,0x3bd19466,0x3c0ad386,0x3c2a2772,0x3c340907,0x3c674988,0x3c804bde,0x3c6929ee, +0x3c19d72e,0x3bc40033,0x3afaf1ac,0x3a37af2a,0x3b1686e5,0x3c264c32,0x3bb89b5c,0x3b6d4cf9,0x3bb76cf1,0x3aae1311,0x3b60b21f,0x3c88a519,0x3bd83951,0x3b0e8425,0xba5be7fd,0x3a96909a,0xba644330,0xbc019a1b,0x3b732d59,0x3b990603,0x3a320134,0x3b3cd1d4,0xbba7a80a,0xbc728dee,0xbc8ee656, +0xbc494e10,0x3ba05549,0x3b46d31b,0x3b8a1094,0x3bcafd18,0x3c1aa29a,0x3c4e4b96,0x3c4862da,0x3c65d966,0x3c762ed1,0x3c8e8243,0x3c3df889,0x3bf699bc,0x3b06c96c,0xba9884a9,0xba596cc4,0x3ba0eb5c,0x3bb5512a,0x3ba6aeaa,0x3b835951,0x3aababe3,0x3a86d65e,0x3c917bff,0x3bb0a220,0xbc8cadea, +0xbc3b5a51,0xbbd3a461,0x3baa9ef7,0x3c481727,0x3c927a1c,0x3c874f77,0x3c3bf362,0xbc0a57b1,0xbc44c765,0x3b8019fa,0xba4edea2,0x3a8eddad,0x3bf30562,0x3b06cf6f,0x3a7b9808,0x3b4da508,0x3ba9d1af,0x3bfab1e3,0x3c00a214,0x3c9eb2a6,0x3ca3fb18,0x3c81a911,0x3c2e2750,0x3bc3b82b,0xb88ff926, +0x3b91f758,0x3b90c4d9,0xbb001a7c,0xb98d7cbd,0x3b553ba6,0x3bddc8d9,0x3c803998,0x3c587b76,0x3b990339,0xbc3ff730,0xbb32e918,0x3cc155bf,0x3c2cba60,0xbbd89fe0,0xbcb78082,0xbd05b91b,0xbd00139b,0x3acda5a2,0xbbac7efa,0xbab50e30,0xbaa0ece2,0xbc03d9c1,0xbc28c265,0xbbad8f40,0xbb93396c, +0xbb1913b9,0x3ab46f1d,0x3bb21a65,0x3c048726,0x3c4c0d44,0x3bae056b,0x3b9de820,0x3ba12d67,0x3b9a8456,0x3bbc0660,0x3ad150ed,0xbabf3189,0xbb39b527,0xbaea7904,0xbad7fb4f,0xbb9404c6,0xbbd6d993,0xbc286aed,0xbc060ca2,0xbb9274d3,0xbbeff229,0x3c3822a3,0x3ce28a53,0x3c142b45,0x3a588ec7, +0xbb47d3f8,0xbb9efd58,0x3ae8ed93,0x3b8a049c,0xbbbff4f2,0xbbe3ab1e,0xbb8eaecf,0xbba8b867,0xbb6c3ab6,0xbb8889ed,0x3b275a62,0x3b360745,0x3bb44126,0x3b58c788,0x3bbe64f8,0x3c76be28,0x3bab1ed8,0x3b7553b3,0x3b69f6b4,0x3b652158,0x3b8c7cd1,0x3b29615c,0x3b093550,0xba21a20f,0x3a53f5dd, +0xbafc3b94,0xbbb4c895,0xbc0ef829,0xbbba2e02,0xbc0da4f9,0xbc6e2371,0x3b566ffd,0xbc70b536,0xbccf3e43,0xbc87382a,0xbc37d5d1,0xbc10216d,0x3bce8aab,0x3c2000b2,0xbb45c298,0xbb392502,0xbbacd82a,0xbb81d35d,0xbc09c55d,0xbbd78039,0xbbc4f9e6,0xba0100f4,0x3b3211c0,0x3b6182fc,0x3b857603, +0x3bf66b2e,0x3c8aceb2,0x3b359d26,0x3a890fba,0x3b117e19,0x3aeaadf1,0x3b177b2a,0x3a46cb1f,0x3aac8e96,0xb9e5427f,0xba4ac7c0,0xbbb50d6f,0xbc2be758,0xbc5a51b9,0xbc0acf38,0xbc5a5c71,0xbcee01d1,0xbc967193,0xbd3d816e,0xbd4234aa,0xbcc105c0,0xbc77d638,0xbcf9972b,0xbcd3b5e2,0xbcdb81a4, +0xbc98f29a,0xbc491f7b,0xbb69f74d,0xbb0df43b,0xbbb04131,0xbc28cbd4,0xbc6af0db,0xbc701497,0xbc19beed,0xbbd5f476,0x3a48a9da,0x3b51b5fd,0x3c4f37a9,0xbb080726,0xbb751204,0xbb1ae7f1,0xba0c0191,0x3a76fcb9,0x3a83ed7b,0x3ab8bb33,0x3a628d14,0xb8e82388,0xbb828092,0xbbdef697,0xbbfcf3f0, +0xbc098a96,0xbc52cae4,0xbcbe22c5,0xbd0494c5,0x3d0f5695,0x3c558eb4,0xbca5660f,0xbd09b98c,0xbd256b7c,0xbcd25de8,0xbc5cba78,0xbc4ca813,0xbc673260,0xbc82b27d,0xbc3f7b08,0xbc1250de,0xbc004262,0xbbc009ad,0xbc42fb74,0xbc2b9856,0xbba0542c,0xbb9147a0,0x3abb0bb2,0x3bf544f3,0x3b2e5363, +0x3adda6eb,0x3a98f644,0x3b6538b5,0x3ae76bdd,0xbb912c8d,0xbaa927b4,0x3a9449b1,0x3a4c590a,0x3a60cfb3,0x3b0acefa,0x3b75d0e1,0x3ca786fd,0x3d15f773,0x3d1816b3,0x3d07b3e7,0x3d2bb7ad,0x3d19c879,0x3d113b9a,0x3cbf575c,0x3ba341cd,0xbca26378,0xbd11f9ca,0xbd21441f,0xbd04fb29,0xbcd5ab51, +0xbc9e6978,0xbc8ef087,0xbc885e1a,0xbc602630,0xbc82fc7b,0xbc8dacb0,0xbc345241,0xbc6e0606,0xbc5028b0,0xbbdedcb5,0xbc1a2a59,0xbbd5ff98,0xbb7d3aab,0x3b63e5e7,0x3c0ed7f8,0x3c77fe2a,0x3c5c3593,0x3c65e8c4,0x3c8ec5f6,0x3cab79a8,0x3cc341fd,0x3cfd667f,0x3cd1e6f7,0x3cc1a53b,0x3d0ae3ea, +0x3d102b9c,0x3d1c4659,0x3d1cb5e0,0x3d17e5df,0x3cfc2e2d,0x3d05603a,0x3c7e3b36,0x3bd5b0de,0xbb15d31d,0xbc0a1c4a,0xbc61333f,0xbcb4881b,0xbc855777,0xbc74ccef,0xbc5a3faf,0xbc5ba725,0xbc5adf17,0xbc16c499,0xbc0e50d5,0xbbc3d574,0xbb6502d3,0xbae462a4,0x3ab7db85,0x3af89a78,0x3bd1e239, +0x3c142e36,0x3c41e6b3,0x3c5257a2,0x3c71add1,0x3c929725,0x3cb7752c,0x3cd1b6b7,0x3cf3b767,0x3ced7384,0x3cf7a58a,0x3d0599db,0x3d1679ef,0x3ce10213,0x3ce25444,0x3ce2e32a,0x3cfc84a0,0x3d06bfb6,0x3d01b234,0x3cf3894e,0x3cd06cbc,0x3c89d8fc,0x3bd79fcb,0xbb90aff2,0xbb839807,0xbbb006ce, +0xbb960786,0xbb0773bd,0xba8d80c6,0xb9b626a6,0x3aef1a58,0x3b55eeab,0x3b9eca45,0x3bd5d955,0x3bfbdc1c,0x3c12f4e0,0x3c230df2,0x3c351116,0x3c42b56c,0x3c819a99,0x3c95b616,0x3ca90f0c,0x3cb71339,0x3cc13bc6,0x3cd86151,0x3cd8ce02,0x3cd4fc25,0x3cce0a2e,0x3ccd03fa,0x3d0be1ca,0x3cf73a9c, +0x3ceff2c1,0x3ccf2ba3,0x3ca86eef,0x3ca50481,0x3c8b97c0,0x3c9bb21d,0x3ca39da2,0x3cbe4e49,0x3cd275b0,0x3ccb547c,0x3cc1fc56,0x3cb1ddc8,0x3c99be33,0x3c88072f,0x3c7b9309,0x3c49b3e4,0x3c0ce105,0x3c003727,0x3c5d8777,0x3c7892c9,0x3c8cff83,0x3c9a9b1d,0x3cb3170f,0x3cbe2c2c,0x3ccaf483, +0x3cc5fa58,0x3cd5268c,0x3ce3fd01,0x3ce47a21,0x3cf4d63d,0x3cfa6853,0x3cf2ca35,0x3d075791,0x3d06ce17,0x3cb3ddb7,0x3cb255ef,0x3cb8ab13,0x3cbac257,0x3cbe4b32,0x3cc8ce8d,0x3cca27cf,0x3cc8e848,0x3cb774d6,0x3ca5d234,0x3c95d544,0x3c8ccf0f,0x3c8800b3,0x3c876998,0x3c89afe9,0x3c8aa15f, +0x3c8b29ac,0x3c8de670,0x3c91ee07,0x3c88ea4a,0x3c96b15e,0x3c9ea089,0x3ca6a906,0x3ca10582,0x3ca2af90,0x3ca44c6d,0x3cadbe4a,0x3caee5b2,0x3cb2e8b9,0x3cb664fc,0x3cb51d5b,0x3cba85d3,0x3cbc1cb0,0x3cb47a69,0x3cb7c14c,0x3cb6e5f5,0x3d131c4a,0x3bb7553e,0x3b565a29,0x3b4f5459,0x3b5488b7, +0x3b49312b,0x3b2c0408,0x3b5bedaf,0x3b65f9b5,0x3b44b0da,0x3b5a83ed,0x3b495d69,0x3aecb723,0x3b0af1d3,0x3b193201,0x3b444bf7,0x3b5593a6,0x3b6df8c7,0x3b70491f,0x3b81e75d,0x3b851089,0x3b8aeb4b,0x3b866ff8,0x3b7b03f3,0x3b5dc543,0x3b6c4cae,0x3b5653b2,0x3b23814d,0x3b33e751,0x3b463b94, +0x3b7190e2,0x3b422fb3,0x3b2cd10e,0x3b4f7577,0x3b31fb5c,0x3b633080,0x3b9349f7,0x3b4c0b1a,0x3b246dae,0x3af2a316,0x3b3569e5,0x3b571175,0x3b3900ca,0x3bd349eb,0x3bd29bed,0x3b548ea6,0x3b9c30e4,0x3b3efec6,0xba91faf9,0xbad4f3fb,0xb9808774,0x3b570783,0x3b88fa13,0x3bac113c,0x3bab2fe9, +0x3bbaf5cd,0x3bd1d5d5,0x3bedd4fd,0x3bfa6cfb,0x3c01a49a,0x3bd3c91d,0x3baaa0e1,0x3b87bead,0x3b557904,0x3b6e1ade,0x3b8e852b,0x3bebe54c,0x3b981672,0x3b83de0b,0x3babcf11,0x3b395824,0x3b8d3e75,0x3c26edcb,0x3bb7a37a,0x3b370d5a,0x3aa8a3b6,0x3b2dc5a1,0x3b04e913,0x39e0fad7,0x3b9b0483, +0x3bcdb709,0x3a967dee,0x3ba35eef,0x3ad42c5f,0xbbba03c0,0xbbc57ba0,0xbb97c6aa,0x3ab0860c,0x3b54c706,0x3bb13adf,0x3bc209b6,0x3be7b88f,0x3c0923e9,0x3c123371,0x3c2873d8,0x3c282736,0x3c024d79,0x3bdd0426,0x3b9f7846,0x3b344f6c,0x3b38f0bf,0x3b9423b6,0x3c157ea8,0x3b9261bc,0x3b695d17, +0x3bca9d2e,0x3b11d6dd,0x3b7cd4de,0x3c6caecd,0x3bbcb913,0x3b230daf,0xbb48a61e,0x39c080a3,0x3b0f9951,0xb982003a,0x3c1002e2,0x3c2adbe8,0xb9e5b15d,0x3be97caa,0x3a4d506a,0xbc535a60,0xbc5703ba,0xbc2712d8,0x3ab03bfe,0x3b7baf52,0x3bdb2fab,0x3bea021b,0x3c0ee93d,0x3c3188fa,0x3c4bc897, +0x3c783993,0x3c81ef43,0x3c531e68,0x3c17d8fb,0x3bc824d2,0x3b330ebd,0x3a9c2f4f,0x3b72beaf,0x3c51ba9e,0x3bb5e12b,0x3b7ffa64,0x3c02c3e2,0x3a3eadde,0x3b693cec,0x3cb4b3c0,0x3c09456b,0x3b441632,0x387ddf2f,0x3b367d6b,0xb9bf6148,0xbb8ac87c,0x3b66ce07,0x3b98b377,0xba71b413,0x3bc1f87b, +0x394aab4f,0xbc759dd5,0xbc8b2665,0xbc65cfaa,0xbb053f50,0x3b208be6,0x3bd29030,0x3bfc641e,0x3c1f4499,0x3c4fd73d,0x3c640b7c,0x3c8083b8,0x3c84bdaf,0x3c810d56,0x3c3d09e1,0x3bfc42ba,0x3b629b86,0xba8f7e2d,0x3a81543c,0x3c1d5d1b,0x3bba4f1e,0x3b8edd2b,0x3bdfa404,0xb90a598a,0x3b11a339, +0x3cbef76e,0x3bc5926e,0xbc46a06f,0xbc2091ec,0x38af5f9d,0x3c222d14,0x3cb1eaca,0x3c9d8f47,0x3c932262,0x3c86d017,0x3a1caa1f,0xbbbe3b40,0xbb869cca,0x3b4de1c9,0x3bbf8aa8,0x3baf1b4a,0x3b5a0e3e,0x3acb56a8,0x3b0fa7fe,0x3bc8d393,0x3c2970d8,0x3c1205ea,0x3ca688d2,0x3cb129c2,0x3c5d8c46, +0x3c30e660,0x3bdc2e5d,0x3adf84da,0x3bbb8102,0x3b8d0603,0xbb011588,0xb8bc0f67,0x3ba447f6,0x3c4134dd,0x3c845f46,0x3c2259f4,0xbb8df57d,0xbc181f94,0xbb87f820,0x3d140886,0x3bd77d7e,0xbc2a59e6,0xbc52f5eb,0xbcff0d59,0xbceed841,0x3ba5e5cd,0x39656e2a,0x3bb99e73,0x3b71fd8a,0xba993bcd, +0xbbc31a49,0xbb9c6084,0xbbc9be5a,0xbb882e10,0x3b1bb188,0x3b9d8e7c,0x3be61889,0x3c3c28ed,0x3ba96adc,0x3b8f60c0,0x3bd978e2,0x3bb56527,0x3bc8f0cb,0x3b2cc5d0,0xbabf2caa,0xbb15adbf,0xbaa4d961,0xb9e61bbe,0xbabc3103,0xbba75019,0xbb80c84c,0xbb1e84ae,0xbb2092d0,0xbc24e63c,0x3c2692a7, +0x3cb3ef84,0x3ab55712,0xbb3145c0,0xbbb35fe7,0xbc067bfa,0xb831d2a1,0x3bea0dda,0x39e89a24,0xbb076123,0xbb3a5d3b,0xbbb97da4,0xbba94a4e,0x3a733739,0xbacfba45,0xbab3aa20,0x3ba0eb2a,0x3b98f441,0x3c06edfc,0x3c867548,0x3b8ded20,0x3b3d7d2f,0x3c00995f,0x3ba619c0,0x3b8726bd,0x3b1dc37f, +0x3b09bd42,0xba88f6c6,0x39dfb53c,0xbaef7e44,0xbb86fb79,0xbbd83991,0xbbd95139,0xbc1568b1,0xbc33c1ad,0x3b391eef,0xbc89adcd,0xbcafc59f,0xbbed5bd5,0xbb4df065,0xbc2fc855,0x3c0bc19a,0x3c5c15e4,0xbba361ce,0x3b5870af,0xba05cc39,0xbb9be1f8,0xbc2dedef,0xbc230d54,0xba9a5543,0xbbb76045, +0xbb7a00ce,0x3b1b6e99,0x3ba05e93,0x3c1f0c98,0x3c9d5b89,0x3b930ff9,0x3a5109c9,0x3ba8f9cd,0x3b5f6446,0x3b34b454,0x3aaa5593,0x3ab4ce16,0xb9c08ad5,0xb9e896c9,0xbbb6cf34,0xbc24f165,0xbc2183be,0xbc0b26aa,0xbc7d39be,0xbcf389cb,0xbc9db01a,0xbd320c5b,0xbcac0389,0xbb87a127,0x37c3771a, +0xbce77fbc,0xbcc46806,0xbcd27522,0xbc9ff072,0xbc0e5f9e,0xbb27f93d,0xba94c23f,0xbbbf12aa,0xbc0ffbb0,0xbc005d68,0xbc5e7705,0xbc179bf8,0xbba5dc11,0x3ade6ab7,0x3b961fd5,0x3c31f464,0xba4158aa,0xbb0b1863,0xba0ac9ca,0xba0e168e,0x3acc8374,0x3b4917a9,0x3a5cf414,0x3a1a01e6,0x397f35c3, +0xbb01c513,0xbbac5fa1,0xbbb98046,0xbbb57983,0xbc3f02b1,0xbcd09cbd,0xbd12e063,0x3b40d4a8,0xbd04584a,0xbd6d4781,0xbd765941,0xbd0ca47d,0xbc74bfbd,0xbadad97b,0xbbf35d2e,0xbbee45f9,0xbc079fe2,0xbb6ea431,0xbc42fec5,0xbc3de0d0,0xbb7c9ea5,0xbbc53901,0xbc0ae1a9,0xbc04835b,0xbae7a890, +0x3abf3df1,0x3bb24a9d,0xba41845d,0xbaffa9cd,0x3bd1a095,0x3b7ded0c,0x3a9ceeb0,0xbb687ca0,0x3a99f28e,0x3b3ffc06,0xba90bfa5,0xbb91188d,0xbb9c7807,0xbbce83c9,0x3a8f5372,0x3c821f13,0x3c973700,0x3c2ecf73,0x3d34d360,0x3d1f6c90,0x3cf7a204,0x3c688afd,0xbc1490bf,0xbcf649c3,0xbd1a6798, +0xbd070e33,0xbccd606e,0xbc92fae6,0xbc7b9948,0xbc3480cb,0xbc24158e,0xbc27110d,0xbc17c63b,0xbc25554e,0xbbe7c180,0xbc1afe64,0xbbfa0417,0xbb26b9dd,0xbc14b4cf,0xbbd557bf,0xbb83fcbe,0x3af87e4a,0x3c05542b,0x3c5950ba,0x3c462ef7,0x3c5611c4,0x3c700151,0x3cb275b3,0x3ccfb1ff,0x3cfc1dd3, +0x3ce529d1,0x3cd83658,0x3d1c43db,0x3d142860,0x3d1f5449,0x3d14ee81,0x3cee9790,0x3ca3eb92,0x3c656d23,0xba92cdca,0xbc32ab1c,0xbc925633,0xbc9c85e1,0xbca1c869,0xbccbb3b4,0xbc9393a5,0xbc854c0c,0xbc71f057,0xbc5ecf18,0xbc7190f2,0xbc3acc74,0xbc2a1739,0xbbf8dc94,0xbb8cd4e3,0xbacdd312, +0xb86cc8d7,0x3a8bfdbc,0x3baff8a0,0x3bf0175a,0x3c1f6096,0x3c4c2257,0x3c82c68e,0x3c9e97d2,0x3cc76435,0x3ce38cf1,0x3d04d492,0x3cf9e5e6,0x3d07836d,0x3d117418,0x3d1fa1f6,0x3cc67300,0x3cc818f2,0x3cb298d9,0x3cb1c470,0x3cb1d339,0x3c8bca38,0x3c35c2c9,0x3aedaa02,0xbb315cbe,0xbc07ffdd, +0xbc8146dd,0xbc62b21d,0xbc7b8ab5,0xbc60c5ca,0xbc448304,0xbc311ac0,0xbc0c4aff,0xbbbb3c15,0xbb9e5b9c,0xbaaa5746,0x3b16eb7e,0x3b768470,0x3bc93ceb,0x3be34e18,0x3c0aee01,0x3c2b0fba,0x3c6cb593,0x3c8c8fe3,0x3cb32884,0x3cb61296,0x3ccc6822,0x3ce08a26,0x3cdeeb3b,0x3cd25704,0x3cc99d44, +0x3cbb6ccb,0x3cee9fd1,0x3cb703b8,0x3cb63a40,0x3c9d4fd4,0x3c7b6e3f,0x3c858f27,0x3c82432a,0x3c9c820c,0x3c984f68,0x3c957ab7,0x3c979ccf,0x3c847f23,0x3c677ef6,0x3c2e1fb3,0x3c1d3bc5,0x3c0f5d08,0x3be2cedd,0x3ba6789e,0x3b640bc1,0x3b12286f,0x3bc58a9f,0x3c01ac54,0x3c248557,0x3c4c4129, +0x3c82286e,0x3c8b29a1,0x3c9da0e0,0x3c97b04d,0x3cad7296,0x3cbe57f3,0x3cbc5039,0x3cdf937b,0x3cd72ac0,0x3cd22290,0x3cecd61a,0x3cd94cb0,0x3c9bfe8f,0x3c89e75d,0x3c91979c,0x3c91d25c,0x3c92af4e,0x3c96b06d,0x3c8e153a,0x3c860d3a,0x3c6e04ed,0x3c5c0f4d,0x3c47eb19,0x3c39a808,0x3c340a05, +0x3c315493,0x3c3aecf4,0x3c3eb80a,0x3c490f05,0x3c52c104,0x3c58f76c,0x3c512a30,0x3c80432a,0x3c91d7ae,0x3ca49827,0x3c88c4df,0x3c94e8d0,0x3ca9b2e7,0x3cb48b91,0x3cb508bc,0x3cb898df,0x3cbf0c72,0x3cbd1037,0x3cc08dbf,0x3cb03ac7,0x3c9ce656,0x3cb7b571,0x3caaf004,0x3cf0c127,0x3bd74e36, +0x3b98fe67,0x3b981165,0x3b85f52e,0x3b71c8df,0x3b5c4ae1,0x3b86a816,0x3b8a798b,0x3b694462,0x3b89df2e,0x3b8244b8,0x3b214ac0,0x3b37ac98,0x3b3f5424,0x3b467727,0x3b7363f7,0x3b8914b0,0x3b89d476,0x3b935c38,0x3b97d32a,0x3ba22246,0x3b9d61ac,0x3b93b03e,0x3b8126f1,0x3b8936e0,0x3b831787, +0x3b5953e0,0x3b64aeca,0x3b7741d2,0x3b90360b,0x3b76a3b9,0x3b60781c,0x3b84df11,0x3b691dc3,0x3b882741,0x3bb03027,0x3b86e211,0x3b66a7d2,0x3b5ec221,0x3b82a9f4,0x3b88f8fe,0x3b65437a,0x3bdf6f0c,0x3be46c6b,0x3b6adfe0,0x3bc5e8aa,0x3b93e818,0xb8a6fad0,0xba45e4a9,0xb881b82d,0x3b00358e, +0x3b8c1a47,0x3bc0abd4,0x3bbfb64e,0x3bd118c0,0x3be8c83e,0x3c07d926,0x3c07da08,0x3c075b46,0x3bd27607,0x3bba17ff,0x3b9a2dac,0x3b8727df,0x3b95ebb2,0x3bad96a0,0x3bf353b4,0x3bb097a0,0x3b9642c0,0x3bc856e9,0x3b66bb10,0x3ba93a35,0x3c3f7a3e,0x3be51d10,0x3bb82d99,0x3bc031b0,0x3b84bddd, +0x3b426393,0x3ae1bbbe,0x3bc007a4,0x3beba8ae,0x3ab92b95,0x3beae4cb,0x3b893055,0xbb8b6d4e,0xbb93fa13,0xbb9342f4,0xbacbdac6,0x3b35be6f,0x3bb88994,0x3bcf1abb,0x3bf40351,0x3c0fb4c7,0x3c2a60d7,0x3c30d0b3,0x3c2c9aa4,0x3bf31120,0x3be226d7,0x3bb1dfbe,0x3b728333,0x3b7c30b4,0x3ba86094, +0x3c1a5c87,0x3ba82e05,0x3b91b7c4,0x3be87f61,0x3b4bc7a3,0x3ba3341b,0x3c7ef945,0x3c014989,0x3b59254e,0xb832db61,0x3b154bf7,0x3b5e491a,0x39ccc5ec,0x3c10fa91,0x3c24d4a0,0xba6f0773,0x3c175fc4,0x3b845db2,0xbc2a6d41,0xbc4334f5,0xbc36ca98,0xbbac1106,0x3b20bc35,0x3bdcead9,0x3bf1a939, +0x3c16a637,0x3c3c65ba,0x3c5fbe39,0x3c7fc814,0x3c7a43de,0x3c32e11d,0x3c11e4b7,0x3bd477c1,0x3b60f837,0x3afde0ac,0x3b967667,0x3c56cd20,0x3baeb753,0x3b8e91f0,0x3c127f3d,0x3a8a1353,0x3b8d43f3,0x3cc7eddb,0x3c2fa0af,0x3be75d87,0x3bd049e3,0x3bad9ea9,0xb867b0f5,0xbb0b8b7d,0x3ba89898, +0x3be23a6e,0xba3703c3,0x3c132985,0x3b9018a2,0xbc4e00b0,0xbc6b1b24,0xbc75d4b5,0xbc0e1e77,0x37d68cd1,0x3bc512c4,0x3bf69e5a,0x3c19ae29,0x3c49b34a,0x3c800cea,0x3c850a37,0x3c8a8a5d,0x3c61fcac,0x3c38ff66,0x3c08993a,0x3b9acd71,0xb9ddf526,0x3b1bf2c4,0x3c4ccc47,0x3bc2db77,0x3b98428b, +0x3c152e16,0x38c5d194,0x3b68d586,0x3cd3460d,0x3c0f135f,0xbc27c84b,0xbbba4819,0x3b536de2,0x3c6439aa,0x3d07aa93,0x3c8fa761,0x3c59d0f5,0x3c293824,0x3bf2e111,0x3ba162ec,0xbb929862,0x3baefb0b,0x3be34558,0x3b9f0b5c,0x3b4b2b12,0x3a9f0a9b,0x3aef4e45,0x3ba6b96e,0x3c2bb6c4,0x3c692ed5, +0x3ca13d3a,0x3ca257a1,0x3c4ab43f,0x3c3c9f31,0x3c09973f,0x3b4a7970,0x3bd49c77,0x3b85428d,0xbb1e0a63,0xb9429854,0x3bdaf4c7,0x3c725c04,0x3c8ce3e1,0x3c1095f9,0xbc162573,0xbc25f52f,0xbb4ccc17,0x3d2a9f2f,0x3a9c5204,0xbc55f899,0xbc1af5ba,0xbcc077a1,0xbc97b493,0x3c4ec6a7,0x3ba2476b, +0x3bc289fd,0x3c0640e3,0x3bbecf78,0x3a343d4b,0xbafcf39c,0xbb9cc365,0xbb747412,0xbadfad3f,0x3b214e26,0x3b9de7bc,0x3c1d94ea,0x3baaf090,0x3bab661d,0x3c023008,0x3bd3c4f1,0x3bc29d19,0x3b90584b,0xba456523,0xba8f60cd,0x3871ce87,0x3b3e812b,0x3b06ebcb,0xbb1b402d,0x3a173d6f,0xba10c44f, +0xba53d589,0xbc337ba4,0x3b918a66,0x3c86a5dd,0xba2f0595,0xbb7b544e,0xbbc6480c,0xbbd76fca,0x39fa1440,0x3c24cd9c,0x3bac197e,0x3b569e3f,0x3b8bbcf2,0xba0cc8f5,0xbb32a882,0x3b592900,0xba4d5f8b,0xba996272,0x3a75ce9e,0x3b9180a4,0x3c043c93,0x3c7ae5ab,0x3b9084e8,0x3b274981,0x3c18e947, +0x3bd1d508,0x3b820548,0x3b22644c,0x3b30ca70,0x38245f53,0x3769272b,0xbaa55095,0xbb25198e,0xbb80ffbc,0xbc0ce3ed,0xbc3381dc,0xbc04f341,0xbaccb5b3,0xbc8236ab,0xbc379275,0xb77f1c92,0x39b3faa0,0xbbb8776f,0x3bed1ef5,0x3c206851,0xbb11af86,0x3b3f7b71,0xba80bdb9,0xbb0b1fe2,0xbc02dfcf, +0xbc013b6a,0xb9135551,0xbaf8c124,0xba8d6fd0,0x39cb7861,0x3bae59d0,0x3c087e51,0x3c74c9b6,0x3bbba545,0x3ae3ef8c,0x3bcf289e,0x3ba3ce4f,0x3b7997d6,0x3aef7b33,0x3af8c083,0x37a4aa3e,0xb9fad8f6,0xbb99775a,0xbc0e2ffb,0xbbc12e5c,0xbc33c4cb,0xbc863ff8,0xbcd34997,0xbc92976b,0xbcfb1e30, +0x3abd356a,0x3a3608a2,0xbac8e250,0xbcb49765,0xbcccab68,0xbcce9add,0xbc679355,0xbc0d7a15,0xbbc7c840,0xbafd1386,0xbc047448,0xbc116703,0xbb6d0ca9,0xbb598a28,0xba855a96,0xbb683158,0x3b0cc651,0x3b8bedde,0x3bc20f83,0x3b447680,0x3b1a618c,0x3a676251,0x3a74bfa0,0x3b23b5f8,0x3ba048d7, +0x3921fc04,0x399d5f13,0x3a66d8a8,0x3a3e2403,0xbb586886,0xbb43554e,0xbb8c2bfc,0xbc3d5a71,0xbcbc4cc2,0xbd0453fc,0xbccefc50,0xbd82ebaf,0xbd8c8fde,0xbd7f45a1,0xbcad3d84,0xbc409873,0xbab5045d,0xbb8df621,0xbb4a9efb,0xbb5a55e7,0xbba302e2,0xbc0ae6ab,0xbc3bda79,0xbc01f1e3,0xbc05e1d7, +0xbc003eac,0xbbc43de7,0x3b8a643f,0x3bbdd26a,0x3bbc066a,0xbac46653,0xbb159d93,0x3c03aee4,0x3b320d1d,0x3a50c566,0xba796fcc,0x3b6f94bd,0x3b85c58c,0xbb1352c5,0xbc1834ac,0xbc25993a,0xbc4141c4,0xbc64295d,0xbb43d396,0x3a9cbed1,0xbc0ded54,0x3d1920ab,0x3cebd8cd,0x3c56c99d,0xbb2ce46b, +0xbcc87f26,0xbd01eb1f,0xbd01ad60,0xbcd17752,0xbc8d1212,0xbc362d53,0xbc4d9d76,0xbbca8b29,0xbba28846,0xbba270bc,0xbb9c7830,0xbb6db9d7,0xbbcb5751,0xbb9e0e4e,0xbb6832f4,0xba2b070b,0xbb8e1005,0xbb3e7199,0xba3dbcb3,0x3b146a7c,0x3bd36a38,0x3c00e962,0x3c0f8b03,0x3c3e5013,0x3c53bb98, +0x3cb4dd04,0x3cc94fc3,0x3cdf4bd7,0x3cd751e9,0x3cca8c19,0x3d0aca17,0x3cedef78,0x3d118ddd,0x3cfb6a43,0x3c92e6dd,0x3c123f5d,0xbb233594,0xbc42dac3,0xbcab8957,0xbcdcf65c,0xbccc7895,0xbcbf5c40,0xbcd5e0bd,0xbca73853,0xbc974fd4,0xbc78599b,0xbc7b8efb,0xbc87c3cc,0xbc82f624,0xbc63c556, +0xbc32d541,0xbc038b6d,0xbb9841fa,0xbaff96b2,0x3aebfd89,0x3bb932f5,0x3c034b93,0x3c24e3d2,0x3c5f4a9c,0x3c88b5ab,0x3c9bf933,0x3cc08c74,0x3cdb553a,0x3cfd9e05,0x3cf4a6e2,0x3d086005,0x3d15bdc0,0x3d1a01ba,0x3cbf2c62,0x3cb5a20e,0x3c8fd903,0x3c654ca5,0x3c3d9e00,0x3b782f9a,0xbb8ee58b, +0xbc7376fe,0xbc8b76b4,0xbc9fa261,0xbccae74c,0xbca524e3,0xbcab6430,0xbc97ed57,0xbc901253,0xbc90090e,0xbc806309,0xbc48981b,0xbc4826d1,0xbbf1f0b0,0xbb3d187a,0x3a269489,0x3b7fa6ca,0x3bb904db,0x3c014dde,0x3c329ec5,0x3c5c309c,0x3c724103,0x3ca51986,0x3ca096a1,0x3cc105d3,0x3cd03b77, +0x3cd72aad,0x3cd5d9de,0x3cd7b1c9,0x3cb96d7e,0x3ca67802,0x3c449256,0x3c44e85f,0x3c1e1ee0,0x3bd8c72c,0x3c11d115,0x3c202cd6,0x3c4587f3,0x3c4406b6,0x3c297dbe,0x3c24d10a,0x3be28452,0x3b9509b7,0x3a4a9900,0x3b116aa8,0x3b6fceac,0x3b60cf18,0x3b73c18f,0x3b9b0e18,0x3b70e397,0x3b86f9a4, +0x3b6a8614,0x3b863592,0x3baa0c84,0x3bd77e17,0x3bc6d99b,0x3c1affb3,0x3c245567,0x3c5c51f4,0x3c82c7ec,0x3c7a88a6,0x3cb2ec10,0x3c99a1c2,0x3c8fb454,0x3ca5b2a7,0x3c8325f9,0x3c416cd7,0x3c0c2ced,0x3c19c658,0x3c139525,0x3c0afdce,0x3c014124,0x3bc4079e,0x3b90ece1,0x3b484cbf,0x3b2a41bc, +0x3b04734b,0x3adea84e,0x3afd2c8b,0x3aefaa2f,0x3b27946f,0x3b2e9fa9,0x3b4ce1c6,0x3b77fefa,0x3b8bdfb2,0x3b9abcac,0x3c061551,0x3c3b07b1,0x3c75f284,0x3c17fd60,0x3c434421,0x3c83d586,0x3c8e3e7e,0x3c8d1601,0x3c8fd541,0x3c98bebd,0x3c98e0f9,0x3c9a8bee,0x3c71438e,0x3c3fd8d4,0x3c9562e5, +0x3c76d2ea,0x3c62fd19,0x3be74b13,0x3ba58d28,0x3ba1fbb2,0x3b925990,0x3b8526d0,0x3b756732,0x3b900e1f,0x3b91b52b,0x3b799468,0x3b924aac,0x3b8bc5ff,0x3b39539f,0x3b4cec63,0x3b553a8f,0x3b4eb081,0x3b81ef61,0x3b9190f1,0x3b925af6,0x3b9cba99,0x3ba2b5aa,0x3bb0c7b4,0x3ba85be5,0x3b9e4959, +0x3b8cfbf8,0x3b8f9554,0x3b8bcf77,0x3b7f3edc,0x3b846632,0x3b8bcda1,0x3b996873,0x3b8b87b8,0x3b81c0f6,0x3b91cbfc,0x3b811363,0x3b8fba6e,0x3bbe9198,0x3b999e56,0x3bba5697,0x3ba2a040,0x3baffd2f,0x3bab4136,0x3b89cf31,0x3be39439,0x3be5f8d1,0x3b8ce66d,0x3bcf9bd9,0x3ba5ae62,0x3a93c005, +0x397adbcc,0x39b6d0dc,0x3aba82a9,0x3b864983,0x3bc51fd8,0x3bc678b7,0x3bdc923c,0x3bf5f1c9,0x3c137ad3,0x3c0b06cd,0x3c051326,0x3bc9ea69,0x3bb99a6e,0x3b9edcb3,0x3b97d4d8,0x3bae035d,0x3bc1ef6a,0x3be72203,0x3bc20972,0x3ba61938,0x3bccecb1,0x3b821c4a,0x3bb2608a,0x3c3f1dde,0x3c02e4bc, +0x3c05e4ca,0x3bfdd6bd,0x3bbcca30,0x3b8f6746,0x3b2cd105,0x3bcdac88,0x3be182e9,0x3af7026e,0x3be88c4f,0x3b9a0583,0xbb401c48,0xbb51448e,0xbb714511,0xbb12537e,0x3b3774b3,0x3bb87ed5,0x3bd42651,0x3c004c3c,0x3c17c606,0x3c41e12c,0x3c33356b,0x3c2975c0,0x3be31ef0,0x3bd2eaad,0x3bb2b763, +0x3b86dca9,0x3b9e7e02,0x3bc243d9,0x3c0c94b9,0x3bc46287,0x3bab037a,0x3be1c71e,0x3b5b5834,0x3baef340,0x3c7d0da6,0x3c186046,0x3c04610e,0x3b961d96,0x3bc39943,0x3bc92119,0x3ad4f11a,0x3c1373c7,0x3c145141,0x3a951555,0x3c0fa351,0x3b929a04,0xbbd2aa48,0xbc1d7bd8,0xbc26bc22,0xbbfa80a9, +0x3acfa98d,0x3bd638e0,0x3bedcc9f,0x3c1db4b6,0x3c454f5d,0x3c7b371d,0x3c7c0c2e,0x3c66a315,0x3c0f13a7,0x3c055a43,0x3bd2ca61,0x3b6d4899,0x3b46a256,0x3baf1bd2,0x3c431440,0x3bb957e0,0x3ba063db,0x3c0d9bb0,0x3ac74a75,0x3b9fc298,0x3cc2e481,0x3c5b86cd,0x3c4b7bae,0x3c373ff4,0x3c0fb2f7, +0x3b1a8127,0xba87baf1,0x3bb03ba9,0x3bd8ffa8,0xba2aa6e1,0x3c051126,0x3ba10301,0xbc222b9d,0xbc3a6895,0xbc5cc16c,0xbc19bf60,0x3928a997,0x3bc05604,0x3bf92641,0x3c2263ae,0x3c5b840d,0x3c95fae4,0x3c88d6e9,0x3c898d69,0x3c3a2473,0x3c25ea87,0x3c0c63d5,0x3ba9a13e,0x3a51ac4a,0x3b696472, +0x3c5e1155,0x3bd7a67f,0x3baf807f,0x3c1c992e,0x3945d322,0x3b89345b,0x3cdcff5d,0x3c55a3c9,0xbc2ae16b,0xbba938df,0x3b6182fc,0x3c968a97,0x3d2b6600,0x3c99e5f2,0x3c3635e8,0x3b84c450,0x3c485555,0x3c2828d6,0xbc23df2d,0x3bfb692c,0x3c0d72c8,0x3a5f33bf,0x3ac39517,0x3a72cbd8,0x3b340bff, +0x3b3ea8f2,0x3bd7c36b,0x3c81c019,0x3c85ba00,0x3c7827af,0x3c440f67,0x3c468af0,0x3c245075,0x3b7a8797,0x3bd8941f,0x3b7292cc,0xbb690a2d,0x39a35f4b,0x3c14b7a2,0x3c8be142,0x3c97533e,0x3c068e57,0xbc57fbb1,0xbc4c33c2,0x3ac05680,0x3d1aa78e,0xba35be00,0xbc4f08b7,0xbc204dcc,0xbc839b80, +0xbc277919,0x3c6f2d09,0x3bb27ebd,0x3b892882,0x3c3b12ee,0x3c10f3fb,0x3b9bc6d3,0x3b90699a,0xb65c9f89,0xba0bfd01,0xba259e7a,0x3b7db73c,0x3bbadba2,0x3c1b639a,0x3beeff12,0x3bfc7d1e,0x3c144a94,0x3be24d46,0x3ba6f774,0x3ba9608f,0x39094d5e,0x3757b682,0x3b2abf73,0x3b9b7651,0x3b4dc11a, +0xb9d16ada,0xbaa226bf,0xbb4c63ff,0x3b1acab1,0xbc08b935,0x3b1a8bbe,0x3c38d4fd,0xbb9aac1d,0xbbf6e0ed,0xbc153dd6,0xbbbdb51d,0x3a7017f8,0x3c67a36b,0x3c0edab0,0x3bdd9708,0x3c02d77b,0x39fa1b02,0xbb092347,0x3b469503,0x3ac27fd8,0x3b15c0a7,0x3b003301,0x3bd677a0,0x3c07090f,0x3c441a54, +0x3bc0d902,0x3b764446,0x3c0b77a5,0x3c00c9ff,0x3b825bef,0x3b245b73,0x3b714368,0x3af5bfa8,0x39891e3a,0xba0be263,0xbaf19893,0xbb30a0ee,0xbc2ef191,0xbc35ee62,0xbb8380f5,0xbb889a3e,0xbc2cd6e9,0xbb90a381,0xb9587e4e,0xba9266f6,0xb95c2bc2,0x3b82c1c7,0x3b94854a,0x3b2294cd,0x3aef5693, +0xbab27b36,0x3aa1ec85,0xbc000c5c,0xbbeba159,0x3aa5eca3,0x3b3cce25,0x3b957164,0x3b77f372,0x3c0e95ef,0x3c171ec7,0x3c1abbbb,0x3bd17965,0x3b813331,0x3bdcf7d6,0x3bd2f995,0x3b9ab37a,0x3aed4a6f,0x3b3b718d,0x3a6693aa,0xba048ce1,0xbb64defe,0xbbd9e728,0xbaee29a0,0xbc317401,0xbc5e8a76, +0xbc9df439,0xbc52db66,0xbc8e9fe1,0x3b0220a2,0xba6fde4a,0xbb800756,0xbc64d330,0xbc97c0e6,0xbca1b6b1,0xbc39baa5,0xbc0d1306,0xbbde0573,0x3ab20665,0xbbbd7efc,0xbbb273cd,0x3aadc843,0x3b3b1106,0x3b769d5f,0x3af1bdb8,0x3bb04757,0x3bd61578,0x3b799ad2,0x3bcc1333,0x3bebe882,0x3b8b945e, +0x3b8e0039,0x3b84c6b7,0x3bb54994,0x3a0814e6,0x39edd39f,0x3b2be4ea,0x3b36dddc,0xbab39cb0,0x3a17e4c3,0xbb8734b3,0xbc47d898,0xbc8f052c,0xbccc394d,0xbd23f009,0xbd8c2fc8,0xbd50db39,0xbd3d6614,0xbc8f2784,0xbc891f6a,0xbc26e74a,0xbbdb7c42,0xbb46fd44,0xba986def,0xbc12ee93,0xba8d96c3, +0xbbaaa461,0xbbf34f3e,0xbbef2c5c,0xbbba1574,0xbb4f9605,0x3ba4aa19,0x3beb0ed6,0x3bdaa4e3,0x3a69f19b,0xb9d63f05,0x3bd90292,0x3af809c5,0x3addb2b3,0x3b03c42c,0x3ba2192d,0x3b53609a,0xbb8bf5ad,0xbc503219,0xbc572643,0xbc5fb160,0xbcbd40a8,0xbc827264,0xbc372157,0xbca95936,0x3ca407ee, +0x3bfa052d,0xbc154d46,0xbc959e91,0xbcea98bf,0xbcd407a4,0xbcaa4644,0xbc630558,0xbc1c3476,0xbbd7397e,0xbc3c08ed,0xbbd30f25,0xbba854ff,0xbb8693a7,0xbb60e28f,0xba8b19c5,0xbb01a57e,0xba26b1a9,0xb94c2429,0xba427f73,0xba534014,0x3a873b3c,0x3b83de74,0x3b980176,0x3bc8b221,0x3b9b1dc6, +0x3bbf6e80,0x3c1dbdab,0x3c35f239,0x3c992bde,0x3ca18bb2,0x3cb03dad,0x3ca46f9b,0x3c8a5e4e,0x3ca2a01c,0x3c70edb8,0x3cd836f2,0x3ca7fb32,0x3b917b03,0xbb2aa690,0xbc5df5e7,0xbc9015f5,0xbcc2f2f9,0xbce364f2,0xbcc6ae66,0xbcb783b1,0xbcc1087e,0xbca69cf7,0xbc9fb6e3,0xbc8d8d9f,0xbc8bb054, +0xbc8a0c21,0xbc8135a9,0xbc571dba,0xbc1c28d7,0xbc001a4d,0xbbcf88ee,0xbb194aa5,0x3b132643,0x3bc01efc,0x3c0f797e,0x3c2e6085,0x3c63d656,0x3c80c782,0x3c89b334,0x3ca2cee3,0x3cbaad9a,0x3cdf1294,0x3cd3d77b,0x3ced6ad3,0x3d03fdcd,0x3cfa7809,0x3cb2f62c,0x3c954040,0x3c4af49c,0x3bcfd2ca, +0x3a096ca4,0xbbf2c7bd,0xbc8000c9,0xbcced063,0xbccc8c2e,0xbcc4b527,0xbcd426e7,0xbcb233e1,0xbcb407ff,0xbca1a8a8,0xbc96f750,0xbc980f9b,0xbc8afae0,0xbc5f53b6,0xbc58f93a,0xbc035ae7,0xbb9f118a,0xba591653,0x3ac42466,0x3b8a9c27,0x3beeca99,0x3c2c49e3,0x3c44ca30,0x3c4b9075,0x3c886183, +0x3c87cf97,0x3ca52543,0x3cae0aa6,0x3cba9c03,0x3cd007a2,0x3cd38e61,0x3ca94d1d,0x3c18fec8,0x3b0300de,0x3af19ad6,0x3984d18b,0xba993ad0,0x3a4b0933,0x3adfa265,0x3b17e9e2,0x3b2390f5,0x386c8cc9,0xba3fd6fc,0xbb518496,0xbb9fb35d,0xbc0356b6,0xbba5c71b,0xbb0a1b4a,0xba55ccee,0x3a9dc2e0, +0x3b602d13,0x3b507161,0x3b56d981,0x3aab6532,0x3a9277aa,0x3a1d8394,0xb8abeccf,0xbac4d0cc,0x3aaf46b4,0x3b29dec8,0x3bad47cb,0x3bf25529,0x3bcd5498,0x3c55177b,0x3c11d12c,0x3bcfcc60,0x3c1242ed,0x3b925425,0x3b85a12c,0x3ad92287,0x3b02212a,0x3a890dc8,0xb93378ea,0xbac5a351,0xbb6da14f, +0xbbb3249c,0xbbc55894,0xbbbcf88a,0xbbb9d6dc,0xbbb94ed8,0xbbab5e87,0xbbac6bc8,0xbb930b6a,0xbb939026,0xbb8f19f0,0xbb76ab21,0xbb4b81ca,0xbb1a3406,0x39cea4ac,0x3b3ef4f3,0x3bc03bca,0x3abc747e,0x3b7e3f5e,0x3be72e30,0x3c0476c3,0x3c041201,0x3c0a7013,0x3c1d52d4,0x3c20b9a8,0x3c1fbb3d, +0x3bc4e23a,0x3b84fd1b,0x3c2662c4,0x3bed2095,0xba2a1da3,0x3be13b91,0x3b98b604,0x3b900513,0x3b901767,0x3b8703d2,0x3b7f2c03,0x3b8c13b8,0x3b8bccde,0x3b77394e,0x3b8a641b,0x3b846f60,0x3b3970db,0x3b4b5326,0x3b557f7e,0x3b4e4283,0x3b7c79dc,0x3b8c2939,0x3b8d247d,0x3b9781aa,0x3b9e8028, +0x3bac19ac,0x3ba6edce,0x3ba117cb,0x3b967e82,0x3b8b0a67,0x3b8b43ab,0x3b8be6b7,0x3b934163,0x3b98302e,0x3b9bf654,0x3b9845e5,0x3b8fc95e,0x3b960428,0x3b8429f0,0x3b8960d4,0x3bc1034e,0x3ba06be1,0x3bef7880,0x3bb68d97,0x3bc4b5e4,0x3bbe765e,0x3ba1073d,0x3bc8261f,0x3bc8e94a,0x3b903429, +0x3bb65e83,0x3b956a2f,0x3ac8e904,0x3a4dff80,0x3a3a7a91,0x3aba4da6,0x3b75e38c,0x3bb78a23,0x3bba0e4d,0x3bd30c11,0x3bece5f4,0x3c0faef7,0x3c0716d8,0x3bf83b2b,0x3bc5cb05,0x3baf4066,0x3b952106,0x3b9977b2,0x3bbbfecf,0x3bd02b40,0x3bd6c421,0x3bcfd09f,0x3babdf26,0x3bbed1ce,0x3b84891d, +0x3ba75c20,0x3c2a5b5f,0x3c007d05,0x3c0ef4a6,0x3bdf3ffd,0x3bd90834,0x3bb53878,0x3b8d89bc,0x3bc0507e,0x3bbaf8e7,0x3b22aecb,0x3bc34230,0x3b81e9ce,0xbb24e1dc,0xbb0e5238,0xbb2ea8c4,0xbaf5e46d,0x3b3091a7,0x3ba9a510,0x3bc60935,0x3bf897c8,0x3c11f1bd,0x3c47e03a,0x3c314cc6,0x3c1d5ac6, +0x3be2c8b0,0x3bbb6866,0x3ba5888c,0x3b8013f3,0x3bb5bc09,0x3bd4908a,0x3bf83e28,0x3bdcf303,0x3bc06da8,0x3bc1b01e,0x3b4f310c,0x3ba014c8,0x3c5e814f,0x3c104daf,0x3c301143,0x3be02daa,0x3bf510bc,0x3c07446f,0x3b9385cd,0x3be9a456,0x3bd89d54,0x3b0d5d60,0x3bdc2fe2,0x3b41be82,0xbba82767, +0xbbf802b6,0xbc0a630e,0xbbf3faff,0x3a81bf06,0x3bba55b5,0x3bd3e9ee,0x3c145fe5,0x3c3b2493,0x3c83d37c,0x3c6c8c68,0x3c49beb3,0x3c008794,0x3be5108e,0x3bc05aba,0x3b4b95d1,0x3b8a9dd4,0x3bc88e04,0x3c2bf333,0x3bd8e0e4,0x3bb873dc,0x3bf26ccb,0x3ac1a535,0x3b9173ea,0x3ca160b5,0x3c531c17, +0x3c5dd2a8,0x3c283c9f,0x3c1852b9,0x3ba16b5b,0x3b38d6ff,0x3ba5886c,0x3bb4d1dd,0x3a0fe2bf,0x3bcfde0d,0x3b6e1a50,0xbc1bda46,0xbc1814c6,0xbc33eafa,0xbc0b86b1,0x398cd04e,0x3babdd94,0x3be529d8,0x3c1d71a5,0x3c5a1432,0x3ca27efa,0x3c8d391f,0x3c7ce6f5,0x3c2440b5,0x3c1093c2,0x3c092542, +0x3b9ad7e9,0x3af9f3eb,0x3b954d28,0x3c577a34,0x3bfb1ca5,0x3bc9c647,0x3c08da3f,0xb9196f33,0x3b839a46,0x3cbec921,0x3c62934c,0xbc0d2518,0xbb1c5c76,0x3bfac349,0x3cb10c3f,0x3d32a328,0x3c81f9ca,0x3bce3b7d,0x3a89b4a3,0x3c171064,0x3c002b24,0xbc433cae,0x3c5ed24e,0x3c7afc3a,0x3ab02af8, +0x3b06e98a,0x3a8fa735,0x3b956b1f,0x3b2b215c,0x3b6eb269,0x3c3ec952,0x3c32284a,0x3c2405fe,0x3c31acfe,0x3c3e71f0,0x3c30c28b,0x3b94fae1,0x3bc8fcd1,0x3b50975b,0xbb8ef3ad,0x3af17b03,0x3c42df06,0x3c9b9b66,0x3c8f6b98,0x3bb304d7,0xbc8b7404,0xbc5ebdbb,0x3be73b36,0x3cb95b62,0xbbe41e0a, +0xbc62b9de,0xbc43fbfb,0xbc2f03ad,0xbbb010c2,0x3bf5183f,0x3b99caa8,0x3b8d5349,0x3b8d83ad,0x3c138017,0x3bfd389e,0x3b804f5c,0x3b5945d1,0x3b38abeb,0x3a80d2e3,0x3bc9f133,0x3beac525,0x3c18b663,0x3c267ea4,0x3c2312d8,0x3c243cab,0x3be61a48,0x3b954c14,0x3baa0fee,0x3a94bece,0x3ab6edb7, +0x3b9b006a,0x3ba77707,0x3b4d1151,0xba37e088,0xbb5a38c6,0xbb20e9bd,0x3b9e66f5,0xba2bec68,0x3b219e15,0x3b5eab36,0xbc23f720,0xbc3d328d,0xbc4b73fb,0xbbb231ea,0x3b05a219,0x3c8b1cd7,0x3c3f1550,0x3c0d929f,0x3b922764,0x3b226095,0x3a8dfbc0,0x3b0f602b,0x3aae29bf,0x3b5183ab,0x3b2b7f73, +0x3c10a6b7,0x3c17db12,0x3bef8eb2,0x3bd64f05,0x3babc65d,0x3bfa3813,0x3c0b2fe2,0x3b7db7a4,0x3b345326,0x3b85dae0,0x3b40f6a8,0x3ab92f9f,0xb8655cc3,0xbaa376d0,0xbaf99858,0xbc2d83f3,0xbc05d994,0xb96a2939,0xbb64d5be,0xbbad3ee2,0xbb3771a0,0xba7cad86,0xba92bcec,0x3a31ff99,0x3b5bb3b5, +0x3b5e4e6f,0x3b701dbc,0x3b7a0272,0x3ae696b3,0x3b09e48f,0xbb79a1aa,0xbb7ec3ae,0x3a812ee7,0x3bbdbea4,0x3c01d671,0x3bc3cdbf,0x3c3e58d2,0x3c318a9e,0x3bcdcf4a,0x3bd1e717,0x3bb03962,0x3bdc2b35,0x3bf3b841,0x3b9b5296,0x3b034520,0x3b52213c,0x3ae631ef,0xb78a87ab,0xbb07e45b,0xbb8c7169, +0x3b459296,0xbc217e13,0xbc343db3,0xbc410ce3,0xbbf7a183,0xbc2d5120,0xbc06d757,0xbb6466a5,0xbae29282,0xbc166c6b,0xbc0b29a4,0xbc3f4b4b,0xbc5e05a9,0xbc1f9966,0xbc05b063,0xb9bbb584,0x39848cec,0x3b00d91f,0x3ae05316,0x3bd3e593,0x3bd4a185,0x3b9c6012,0x3bfaaf56,0x3c060b69,0x3b9297cc, +0x3c07cac4,0x3c227237,0x3bf75d9a,0x3be98eb7,0x3bb59598,0x3bbcbbac,0x3aacf73b,0x3a8c0e4e,0x3b6fc757,0x3b75cae2,0x39a2d082,0x3b5ccc4d,0xbba656ab,0xbc4b0622,0xbc4c0231,0xbc862737,0xbd1fd88d,0xbd460ff4,0xbccd108b,0xbce14fad,0xbca47695,0xbcaeff6e,0xbc8eb7bc,0xbc5be93d,0xbabbc272, +0x3b30bde0,0xbbfbc908,0xb9fcc131,0xbb7d3818,0xbbd157c3,0xbb804b6e,0xbad9ead4,0x3ad6cede,0x3bd71253,0x3bf66580,0x3bc21150,0x3b706c94,0x3b1de053,0x3bbc664e,0x3b2be624,0x3b476fca,0x3b8037fe,0x3b91cf7f,0x3a425625,0xbbc20e2a,0xbc628ee5,0xbc5e5bbf,0xbc615024,0xbcc7a12b,0xbcb68c0d, +0xbc974198,0xbcd5340a,0x38df77aa,0xbc46714b,0xbcca3416,0xbcccde54,0xbcb4404f,0xbc7fae72,0xbc058dd8,0x391e89a4,0xbb9b5c2b,0xbbc61ea5,0xbc310184,0xbbc5956b,0xbb9f0ff9,0xbbbb058d,0xbb3bd512,0xba48a6ca,0x3b6b297d,0x3b5d3952,0x3b48d113,0xb999dd20,0x39498f2a,0x3b0b5439,0x3be17cde, +0x3bbecbb6,0x3bcd4819,0x3bbf7b48,0x3bb2ada8,0x3bffd810,0x3be8b81d,0x3c3c2a8b,0x3c3eceb0,0x3c50c539,0x3c4ffc48,0x3c09e33e,0x3b827863,0x38e4b1da,0x3c554ad9,0x3bdc9d79,0xbbfea472,0xbc4299dc,0xbc9731e2,0xbc9cbe78,0xbcb2cd23,0xbcb05f4f,0xbc9f9694,0xbc92fbb8,0xbc8e1bcd,0xbc885711, +0xbc89ec50,0xbc8eb3f5,0xbc7d87d8,0xbc69699d,0xbc3c4f5f,0xbc0b0be6,0xbba9a549,0xbb8cea93,0xbb94ebd8,0xbab18569,0x3b2e3f46,0x3ba7f6ed,0x3c02c1e4,0x3c2286d8,0x3c54cdeb,0x3c64cd82,0x3c672212,0x3c738612,0x3c894396,0x3cae673d,0x3c9cdb6c,0x3cabd7c3,0x3cb3c41b,0x3c97e6ce,0x3c877ef8, +0x3c336adb,0x3b973968,0xbaf8d703,0xbc283963,0xbc80870e,0xbcb43fc1,0xbcf06738,0xbcd52ddb,0xbcb5fa1d,0xbcaa51aa,0xbc9cf5b5,0xbc9f9080,0xbc9792d6,0xbc8a86fd,0xbc857dab,0xbc749a6e,0xbc44bc49,0xbc2d490e,0xbbb23739,0xbb79aa4e,0xba9258c8,0x37a58944,0x3b37596f,0x3bc07bcf,0x3c099da0, +0x3c23026f,0x3c29f6ac,0x3c6ef253,0x3c67013b,0x3c87e3b1,0x3c837585,0x3c89382a,0x3caa6f93,0x3ca743cd,0x3c752c0a,0x3a464abc,0xbb7d7260,0xbb8a646e,0xbb9e4af3,0xbb90a2c0,0xbb84cf41,0xbb6d52a2,0xbb946373,0xbbaeb10c,0xbc0c1a04,0xbc215744,0xbc35aab7,0xbc3f31bb,0xbc5d09b0,0xbc2ef58c, +0xbc036cbd,0xbbdcf980,0xbb9451bc,0xbb42092e,0xbb42e15d,0xba0f7a85,0xbb0175eb,0xbabe151f,0xbb097c3c,0xbb2cd48d,0xbb5e18a9,0xbb0a34c2,0xbac08468,0xba398c38,0x3a1824f3,0xba12b9c1,0x3b9b8a54,0x3ae0e68b,0xbaf021a5,0x3958b6e9,0xbb40920c,0xbac2e972,0xbb39809d,0xbb4d7f40,0xbb939c8c, +0xbbc711e2,0xbbfa8ce1,0xbc19ee39,0xbc3513f4,0xbc2e3a51,0xbc1fe1d1,0xbc17ed41,0xbc16d520,0xbc13a99d,0xbc15ba2d,0xbc0b6436,0xbc0b5fa8,0xbc0afcd0,0xbc024300,0xbbea74d3,0xbbde9cb3,0xbb987de0,0xbb482d54,0xba85ea56,0xbb728e28,0xbaef24cf,0x38c04024,0x3a41e845,0x3a679725,0x3ab4e8f8, +0x3b162643,0x3b164a78,0x3afe8d67,0xb9b1d216,0xba97d638,0x3b373839,0x3a733019,0xbc1b68b1,0x3bd34552,0x3b8d23ae,0x3b83383d,0x3b8b96f4,0x3b858842,0x3b797176,0x3b8280bf,0x3b8009e2,0x3b682377,0x3b79d503,0x3b70e578,0x3b372d65,0x3b4bf5ee,0x3b58a775,0x3b54b0e7,0x3b72833a,0x3b8304ca, +0x3b81fc8e,0x3b8c1145,0x3b923f51,0x3b9bddaf,0x3b9bb63e,0x3b98ce20,0x3b9382c8,0x3b8298c7,0x3b827349,0x3b85a79d,0x3b90721d,0x3b94de80,0x3b92868b,0x3b974b86,0x3b8f1699,0x3b8acfab,0x3b7aa730,0x3b7ac84c,0x3baa7b0c,0x3b96702a,0x3be43361,0x3baf4672,0x3bc8e2fe,0x3bc2b7eb,0x3b9fa132, +0x3bb41fee,0x3bb5dbe4,0x3b90a679,0x3ba0eb6e,0x3b886d31,0x3af542db,0x3aa90163,0x3aa95dfa,0x3b000344,0x3b7335c5,0x3babcb9b,0x3ba75306,0x3bc13610,0x3bd833c3,0x3bfea070,0x3bf5915d,0x3bdf6b95,0x3bc20e3b,0x3b9e61aa,0x3b863448,0x3b8c089e,0x3bc1af3c,0x3bd4e282,0x3bc3d3df,0x3bd229cd, +0x3ba5a4eb,0x3ba437e6,0x3b7d15f1,0x3b99a155,0x3c0ea6c0,0x3bdeeed9,0x3c032a27,0x3bbe64a1,0x3be1b43d,0x3bce951e,0x3b9c9fa7,0x3bafbb29,0x3b9e6520,0x3b2e1969,0x3b983e59,0x3b5a871d,0xbabae397,0xba0d5f4c,0xba6efd74,0xb9ecd9ff,0x3b41f528,0x3b9acc32,0x3ba76ec2,0x3be12151,0x3c006f3d, +0x3c3258cd,0x3c24859b,0x3c0b55a7,0x3beb49af,0x3ba430c6,0x3b924b31,0x3b5fcde4,0x3bc37d13,0x3be6336d,0x3bdc3466,0x3becd028,0x3bcb6c51,0x3b934a5b,0x3b46d163,0x3b8697b5,0x3c29eb78,0x3bf77552,0x3c1c8560,0x3bd4b580,0x3c011020,0x3c15121f,0x3ba26197,0x3bc7c65e,0x3bc47bec,0x3b452009, +0x3bac8acb,0x3b20a6cb,0xbb562d42,0xbba71595,0xbbbecd63,0xbbb2b6c4,0x3ab958ac,0x3ba9c7c4,0x3ba789f5,0x3c048643,0x3c24f5be,0x3c7142a5,0x3c524ac8,0x3c2bb2ad,0x3c03d861,0x3bb944b3,0x3ba35f13,0x3b0957ef,0x3bad3551,0x3be203d0,0x3c14dea5,0x3bf2c709,0x3bc6eab0,0x3bb74db9,0x3ac5c784, +0x3b7e0c7d,0x3c7e8e7e,0x3c27dd59,0x3c4b2f2a,0x3bfef4c9,0x3c143bfc,0x3be17cdf,0x3b8753cd,0x3b993282,0x3b87d922,0x3a68cf20,0x3b8f12d4,0x3b3ebc62,0xbbe336a2,0xbbb8d836,0xbbde1693,0xbbbebc2d,0x3a598107,0x3b890b12,0x3ba9dacf,0x3c0c3c34,0x3c40a0f6,0x3c948b37,0x3c887611,0x3c5d9274, +0x3c22d80a,0x3bfee7c4,0x3c0016c3,0x3b67a966,0x3b3baf61,0x3bb89514,0x3c42e9d3,0x3c11ca02,0x3be01237,0x3bcc8c10,0x397fbedd,0x3b68d027,0x3c8c8cdf,0x3c4e4d17,0xbba39568,0x3b70bdea,0x3c3e341b,0x3cb29d4e,0x3d239d16,0x3c6666d3,0x3bd46ff3,0x3b99c4e5,0x3b8967be,0x3b41daad,0xbc011c35, +0x3c915b5e,0x3ca75169,0x3b871317,0x3ba79068,0x3b607e1b,0x3bc0ed5b,0x3b512aa7,0x3b1da733,0x3bc438d6,0x3bd046fa,0x3bd7b6a9,0x3c1407c1,0x3c2cece3,0x3c30382a,0x3bc80dcb,0x3bab0030,0x3b1ccd42,0xbb9156c4,0x3b8b8a01,0x3c726bba,0x3c99c8e3,0x3c5e37f1,0x3b0486a1,0xbc8fb52f,0xbc47751a, +0x3c529eba,0x3af38e3c,0xbc2c86ca,0xbc448567,0xbc4947a0,0xbc028d3b,0xbbcbf06b,0xbbf65bfd,0x3ac7050e,0x3b89cb4f,0xbb80a17a,0x3c27b8df,0x3c370b07,0x3b62195f,0x3b2dc285,0x3b17d870,0x3afe9837,0x3c04b4b7,0x3c0d9fa2,0x3bf7196c,0x3c3293c8,0x3c29aa45,0x3c283742,0x3bfb9815,0x3ba91cec, +0x3ba914d2,0x3af121be,0x3b3274d3,0x3bdb21ad,0x3bbdbf57,0x3b43338f,0xbb19769b,0xba3d165a,0x3aec3e63,0x3b27e8f0,0x3c1c78e1,0x3b3bc199,0xbbc23d51,0xbc43d865,0xbc4a6167,0xbc4acaca,0xbbb2e9ea,0x3aa9f7db,0x3c639b6a,0x3c5ebda6,0x3c30af26,0x3ac2fc5b,0x3be187c0,0x3b84b5d9,0x3adacc4d, +0x3b30c21f,0x3b9a58f8,0x3b1a7c0d,0x3c22d532,0x3c28be0a,0x3b7c0e91,0x3bb0528a,0x3ba9c67f,0x3bce8720,0x3c08079a,0x3b6e7b08,0x3b6118da,0x3b74c124,0x3b4b6b9a,0x3b2beace,0x399667a8,0xb99e1da5,0xbae5db26,0xbc1604dd,0xbb92bcf3,0x3b4b5483,0xba9c0801,0xbb14da2a,0xbb195051,0xb93800b3, +0xb9cf7c25,0x39e639d9,0x3b7ca046,0x3babd708,0x3b7df328,0x3bda6967,0x3b9cea61,0x39825023,0x3af29bae,0x3a27cd4f,0xbb0417e2,0x3be618e2,0x3c1b305d,0x3bd8da1d,0x3c474014,0x3c32ad16,0x3ba74965,0x3bbd172c,0x3bacfaca,0x3bbc0cb6,0x3bf8a820,0x3b85be96,0x3b2eb1cd,0x3b36d434,0x3b0dcd21, +0x3a6fcb27,0xba3ca8b3,0xbb0869ab,0x3bb9bec3,0xbc1adf78,0xbc09e50a,0xbb75df7c,0xbb738ff3,0xbbdaae87,0xbc5430e2,0xbb5e4ebf,0x3a196c48,0xbb9cc86d,0xba4c4a0b,0xbb9840cd,0xbc66d83d,0xbc283e3c,0xbc2d8568,0xbbd85591,0x39ee2e74,0x3b7047a6,0x39b51079,0x3bdaf31e,0x3bf50a9f,0x3bea1775, +0x3c06c738,0x3c0219e0,0x3b9a932b,0x3c0e18de,0x3c26d93b,0x3c13b32f,0x3c050b3d,0x3bc8a16a,0x3bc4bcf1,0x3af6abed,0x3aaf0937,0x3b635ce3,0x3b6b9b0c,0x3a438053,0x3b5c5349,0xbba644a0,0xbc217e00,0xbc1e9dd2,0xbc074705,0xbceaf503,0xbcb5b3df,0xbc0651dd,0xbc65fd40,0xbc991e0f,0xbca7d95b, +0xbc952e5f,0xbc7a490c,0x3a545a71,0x3bacdf6a,0xbb32339f,0xba1b63b7,0xbb7343a7,0xbb1a1805,0xbb1fb6fc,0xb9a9ab55,0x3b822e8a,0x3c0afd81,0x3c02f61e,0x3b82887e,0x3bbc6eb2,0x3b9c13d3,0x3bbc9a79,0x3b7d918a,0x3b714397,0x3ba1d5e6,0x3b24fb4c,0xbb061597,0xbbd974a2,0xbc50ba7f,0xbc419de9, +0xbc4e2d18,0xbca46418,0xbcb62fc3,0xbcba68b1,0xbcd213d5,0xbc82a3c3,0xbcc38c31,0xbcf1fba1,0xbcc26bb9,0xbc5c18c9,0xbba17fac,0x3aa69d14,0x3bc8d882,0xbbc62269,0xbc1f2b4c,0xbc01d7b1,0xbbadee91,0xbb669454,0xbb54b82a,0xba106aac,0x3ae45057,0x3bbc8ed2,0x3bdb5eed,0x3bc38c58,0x3a5ac762, +0x3a0d332b,0x3af24dc7,0x3bcf4ac3,0x3ba4f526,0x3bbb2a79,0x3bf98cf7,0x3bcedf0b,0x3bd120c6,0x3b050c06,0x3b6316f7,0x3b4921ee,0x3b1c0fdf,0x3bd18d8a,0x3b2adc8d,0xbbea2487,0xbc3c17b4,0xba876d78,0xbbd69805,0xbc7c91d2,0xbc85d27e,0xbc978517,0xbc83f4c5,0xbc834b80,0xbc574f70,0xbc6ffa50, +0xbc65d1f9,0xbc38221e,0xbc540a4d,0xbc56dc87,0xbc61ac55,0xbc32baf1,0xbc130e25,0xbbd775e3,0xbb696027,0xbab7bb69,0xbaa34230,0xbadb9ab2,0xb8b16673,0x3b3d732f,0x3b844a93,0x3bcf2002,0x3c052a40,0x3c39de46,0x3c3d9bb9,0x3c3560b5,0x3c19ff73,0x3c207f23,0x3c52b8e3,0x3c32e393,0x3c3b29e4, +0x3c1fceee,0x3ba4e4a8,0x3c0c8b41,0x3b1a7bfd,0xbb312458,0xbbfeeb66,0xbc7b6c9c,0xbc94f819,0xbcb2ca5b,0xbcd3acb7,0xbcafde4b,0xbc91919f,0xbc85d50a,0xbc8195a7,0xbc847dba,0xbc886928,0xbc7a5f11,0xbc691166,0xbc50b6d0,0xbc2d59d7,0xbc0ff3d0,0xbb94f989,0xbb44df3d,0xbac87aea,0xba131f55, +0x3ad78fb9,0x3b83ec5e,0x3bb39d69,0x3bef2a27,0x3c00faff,0x3c57d96f,0x3c364c86,0x3c511228,0x3c2a988d,0x3c1f674d,0x3c57d06a,0x3c463301,0x3bf5dbdb,0xbb47ae1e,0xbbac2696,0xbbcbaccc,0xbbd5b843,0xbbbc3e89,0xbbe66170,0xbbf73a87,0xbc22d3ac,0xbc42cf2f,0xbc707a7a,0xbc8108d3,0xbc898b7f, +0xbc8d61de,0xbc95b736,0xbc80b2d2,0xbc5d343a,0xbc532240,0xbc35472a,0xbc23d81f,0xbc257875,0xbbe032a1,0xbbd8c88e,0xbbaa1b45,0xbb9f47af,0xbb843df0,0xbb5907ec,0xbb469fd1,0xbb4766e5,0xbb7f304b,0xbb391cab,0xbb6ae899,0x3a19e1a3,0xba646954,0xbb8c814e,0xbb559212,0xbba89c54,0xbb9ef6f1, +0xbbb3e7a7,0xbbcb020e,0xbbf85696,0xbc133bda,0xbc2a4aae,0xbc3ccf60,0xbc4eda28,0xbc3e7255,0xbc32356d,0xbc2d14f4,0xbc2b1aa4,0xbc28fc56,0xbc2de5ee,0xbc276512,0xbc27eede,0xbc258f64,0xbc1be0c2,0xbc0f0572,0xbc0b9304,0xbbe8cf4e,0xbbcd4212,0xbba17e96,0xbbccc915,0xbba735f2,0xbb7f0137, +0xbb6909cd,0xbb55044b,0xbb2b7a74,0xbb0074af,0xbb1299c5,0xbb332780,0xbb860bf0,0xbb8ce2fc,0xbb16506b,0xbb54612b,0xbc60c096,0x3bc355e0,0x3b805efc,0x3b6fc164,0x3b81db2f,0x3b7a1536,0x3b60f323,0x3b6b426b,0x3b66029c,0x3b57f419,0x3b5f0fb7,0x3b5d9ec4,0x3b4690d9,0x3b4f88b8,0x3b5b9ddf, +0x3b5d8e94,0x3b6e2001,0x3b789789,0x3b6e79c7,0x3b7cd676,0x3b8241d1,0x3b86a4d9,0x3b89e842,0x3b89c302,0x3b8b935b,0x3b6e7589,0x3b6c32e7,0x3b734288,0x3b87284a,0x3b8be417,0x3b85fd67,0x3b8f5ec7,0x3b85d24a,0x3b6ff3d0,0x3b6103aa,0x3b5e8974,0x3b9046bb,0x3b86bc1b,0x3bc4e1f8,0x3b9fd0f5, +0x3bc1f364,0x3bb670f0,0x3b86530a,0x3b9d2cac,0x3ba1cf58,0x3b92fab7,0x3b8f55c7,0x3b856724,0x3b4c7b3a,0x3b18ffb5,0x3b155a7a,0x3b375e43,0x3b7d3a53,0x3ba3a198,0x3b956e3a,0x3ba9299b,0x3bb85c25,0x3bccc420,0x3bd1c265,0x3bc3742b,0x3bb9b999,0x3b8b4af6,0x3b6e23e3,0x3b73f607,0x3bc57055, +0x3bd54bc0,0x3bb06546,0x3bc79273,0x3b97610c,0x3b872106,0x3b6e29dd,0x3b89a9b8,0x3be02c3e,0x3bb39a2a,0x3be515de,0x3ba3be20,0x3bd50739,0x3bc4a6ed,0x3b690afb,0x3b90f482,0x3b73c339,0x3b39e0e7,0x3b6c6735,0x3b594a2d,0x3ab667f9,0x3ac25eb4,0x3ab3aad0,0x3ad3d833,0x3b81f6d0,0x3b9c4253, +0x3b8f605b,0x3bbe0de0,0x3bcc6ee5,0x3c08a54a,0x3c0c1833,0x3bed2fd1,0x3bead787,0x3b8dba57,0x3b806d2f,0x3b444126,0x3bcf41a4,0x3bf80da4,0x3bc24a32,0x3bec8816,0x3bc38eaa,0x3b432462,0x3b33c013,0x3b55723c,0x3bf0e417,0x3bcede2d,0x3bf73996,0x3bba7201,0x3c048871,0x3c09c667,0x3b4b2db2, +0x3b998cf6,0x3ba5471b,0x3b8668f3,0x3b8d3b46,0x3b4442bf,0x3aca89da,0xbaaa4909,0xbaf67e48,0xbb084af3,0x3b329e2f,0x3ba9b677,0x3b85611b,0x3bdb2c1c,0x3c006ecd,0x3c37b640,0x3c2c55ce,0x3c0cba05,0x3c074a4b,0x3b91fa7c,0x3b8533aa,0x3a833d71,0x3bd17d70,0x3bff5cd2,0x3bfd3fd2,0x3bf78f46, +0x3bbd98c4,0x3b7bd8c2,0x3acd9f27,0x3b581caf,0x3c385de1,0x3bf0fb5f,0x3c34356b,0x3bc58889,0x3c09881f,0x3be396c0,0x3ae5b66e,0x3b592ab7,0x3afb6f97,0x3a96fa5a,0x3b44cf39,0x3b70e718,0xba5f02fe,0xba8a2b7b,0xbab47efc,0xbab4f596,0x3b5c3c65,0x3b961a7c,0x3b7b748e,0x3be2f16f,0x3c14a9a8, +0x3c5f592a,0x3c6d89b4,0x3c3b15e1,0x3c2056c3,0x3bdb2c28,0x3be339c5,0x3afc1122,0x3b7bc19b,0x3be081a7,0x3c293b43,0x3c1b3ce7,0x3be065eb,0x3b6dd1ab,0x3a231c0b,0x3b206dc6,0x3c3dda99,0x3c3b3b81,0xbb96bc0c,0x3be4a7bf,0x3c557ef6,0x3cab59b6,0x3d086efa,0x3c58b55e,0x3c0bcc9f,0x3c0e94d7, +0xb9d8e4a2,0xbb3b7fa8,0xbbaaa6a8,0x3c86de1b,0x3ca01f26,0x3b830523,0x3bd412b6,0x3bbc3b20,0x3bfb7b3f,0x3b97ec38,0x3b0e511d,0x3aeb28eb,0x3b4cbfe1,0x3b8f7827,0x3c022bba,0x3c1c4267,0x3c243293,0x3c0cbad3,0x3b855ffa,0x3abf054e,0xbb79a07e,0x3bf22c57,0x3c8d23c0,0x3c858ca5,0x3c1a009c, +0xb9944bf5,0xbc682dab,0xbc500db2,0x3c945428,0xbc8236b1,0xbc0c6038,0xbc03a11e,0xbc3b7deb,0xbbf68255,0xbc362adf,0xbcb04f47,0xba2a3c1a,0x3bb27c15,0xbbd728a5,0x3c045910,0x3c2c6ec1,0x3c032a2f,0x3b8a87b6,0x3b1eb82d,0x3ad68290,0x3c058dcb,0x3c140ae4,0x3b9f071b,0x3c1af93b,0x3c177384, +0x3c18d868,0x3c1870bb,0x3bd9410c,0x3ba08f44,0x3b0f1553,0x3b691353,0x3c0ffcbb,0x3bcc0268,0x3b3e7010,0xbb5654ca,0x3b2d8917,0x3b97dfb9,0xbb032f77,0x3c992e6f,0x3b43e17e,0xbc52a813,0xbc3aff62,0xbc3456d9,0xbc083a1b,0xbbaff3f3,0xbaa34f9b,0x3bd13814,0x3c55609f,0x3c4782d3,0x3a69ff1e, +0x3c015dc0,0x3b8685f0,0x3b05d799,0x3b316ccb,0x3ba51b53,0x3b1875fd,0x3c1ed6e1,0x3c24712a,0x3b0179ff,0x3b7189df,0x3b7265f9,0x3b980ef1,0x3bf5afde,0x3b515fcf,0x3b924b71,0x3b592b1f,0x3b430569,0x3b7f485c,0x39e07d08,0x3a2d86dc,0xbadc070b,0xbbbc1387,0x3972618e,0x3ba43de0,0x3b1161f7, +0xbab15afd,0xba6276b7,0xb9b2b8e7,0x39dd8ff7,0x3b880c79,0x3b5bad8b,0x3bbdde1b,0x3bc40ff9,0x3bc95247,0x3b7bb1b8,0xbb0dadb8,0x3b68cebc,0x3b32682d,0xba8b77f5,0x3b92e749,0x3bd5c9d4,0x3baf2f9a,0x3c1e29da,0x3c0b267b,0x3b5ec5d4,0x3b93da85,0x3b744283,0x3b72d241,0x3bd5983c,0x3b417d17, +0x3b596a83,0x3b1c45e5,0x3b073df9,0x3ac12707,0x38d593a3,0xb982048b,0x3bc8b4e0,0xbbd4537e,0xbb6661b9,0x3b1177d3,0xbab47bfb,0xbb4d2086,0xbc1fb0c6,0xbb1abb19,0x39337105,0x39cbd44f,0x3b433b6d,0xb98cdf5f,0xbc3f1b84,0xbc110194,0xbc2a1d37,0xbc347aa0,0xbb09799f,0x3b33873f,0x3b2af61c, +0x3ba36153,0x3bca53ee,0x3c05c5f2,0x3bfccc67,0x3be5219e,0x3b873f29,0x3bf22aa9,0x3c07fc08,0x3c0691b0,0x3c0569a5,0x3bc74210,0x3bacb688,0x3b044a8a,0x3a6fb459,0x3b3402cb,0x3b1e275f,0xb88db760,0x3a6799af,0xbb85082f,0xbbc52a8d,0xbc0488a3,0xbb155786,0xbc9a9dd8,0xbbe066b8,0xbb290ff6, +0xbbddb88c,0xbc515ee3,0xbc811f09,0xbc6af89a,0xbc1eb2c0,0xba92a0cb,0x3a46ee34,0xbb403a9f,0x3a2dc35d,0xb9d73e51,0x3993d029,0x3aebc5c3,0x3b6d7e97,0x3bafb61e,0x3c02eac1,0x3bcfd5f3,0x3afd817e,0x3bcf0188,0x3bc4bb8e,0x3ba16694,0x3b86215f,0x3b6303dd,0x3bc090f6,0x39cd9672,0xbb8141fe, +0xbbd1fa19,0xbc29158c,0xbc14daf3,0xbc335611,0xbc7fb942,0xbca20339,0xbcd228e9,0xbcbc318f,0xbccd47ce,0xbce0c719,0xbce03d69,0xbca43465,0xbc23fd91,0xb917b5ab,0x3b365be7,0xba6427a6,0xbc05e1a5,0xbc1dfb1a,0xbb98104f,0xbb893fc4,0xbb0c8a20,0x39661d1c,0x3a87065e,0x3b880ca8,0x3b9e57da, +0x3c076c5e,0x3bfcab4b,0x3b0eae9a,0x3b135d05,0x3b1dc832,0x3b81b025,0x3b6e9115,0x3b92254e,0x3bef0267,0x3bb5f2f6,0x3b8c25a7,0xbb02cc46,0xbb34ba9a,0xbb7dd89e,0xbbbfd83f,0x39ed22d5,0xbb0b6049,0xbc5084b2,0xbc9638aa,0xbc3e4a43,0xbc742c7a,0xbc9440cf,0xbc87697f,0xbc7a8959,0xbc334088, +0xbc18c531,0xbc00ebc8,0xbc1cddb0,0xbc1fbd40,0xbbe26e1f,0xbc1a5463,0xbc18a5d5,0xbc0d8fed,0xbbd416aa,0xbb76111f,0xbb239a8f,0xb98320c4,0x39a7e228,0xb98b12a4,0xb8cdcddd,0x39c555ea,0x3b006253,0x3b331764,0x3b907474,0x3bc9eb58,0x3c109b9d,0x3c086f7f,0x3bf85c8b,0x3b87cf8e,0x3b4aa828, +0x3b6bb05e,0x3b2f6093,0x3b17cb2d,0xba04acdd,0xbbc584f3,0x3a9e046c,0xbb97e8f4,0xbbe5fa69,0xbc20ccf7,0xbc691560,0xbc7cdd30,0xbc876868,0xbc888be8,0xbc6dacc8,0xbc55ff3f,0xbc539cf8,0xbc49d3b4,0xbc4a5323,0xbc5ee8a3,0xbc47a31f,0xbc382acd,0xbc20b8f2,0xbc15f3f6,0xbc05f2b2,0xbbbcb52e, +0xbb842932,0xbb28f977,0xbac01622,0x39f8bb8b,0x3b17d785,0x3b5123a9,0x3b9c7721,0x3baddf99,0x3c2dcecf,0x3bf6089b,0x3c08d9e4,0x3ba5a5f9,0x3b5f8b19,0x3bacbb55,0x3b7b86e9,0x3a53e15d,0xbb84f7e5,0xbbb3303e,0xbbe465f9,0xbbf74227,0xbbf22d59,0xbc18f781,0xbc301898,0xbc66a4ae,0xbc7d0517, +0xbc8751ed,0xbc8b86be,0xbc94eaee,0xbc9ad968,0xbca178a9,0xbc8fc23a,0xbc7dfadf,0xbc7624fc,0xbc56b2b4,0xbc3b2091,0xbc3bc04b,0xbc25f5aa,0xbc12572c,0xbbf1efbc,0xbbd2f5f6,0xbbaac799,0xbb6b35c1,0xbb6d42f5,0xbb724514,0xbba5d5c0,0xbb74c148,0xbb81c561,0xb9b45823,0xba87898c,0xbb6424dd, +0xbb5a8ef4,0xbba940cd,0xbbe115a7,0xbbead0c7,0xbbff110c,0xbc0fb02f,0xbc1ec717,0xbc2f316d,0xbc35ad08,0xbc3ca1e4,0xbc2f4f39,0xbc2da399,0xbc2d0c41,0xbc2986c7,0xbc2634a3,0xbc2aeb03,0xbc256bbe,0xbc267752,0xbc23a0c1,0xbc1ccad6,0xbc15a4bc,0xbc0dfb21,0xbc05b4d5,0xbc010f91,0xbbeb9495, +0xbbf2b4b5,0xbbe0ae99,0xbbc69744,0xbbc199ec,0xbbb3e247,0xbb9def53,0xbb8fa19c,0xbb9c5f29,0xbbac5246,0xbbd0f68b,0xbbd13160,0xbbb138cb,0xbbbfe86b,0xbc7e08a7,0x3bb0c578,0x3b5b79de,0x3b3fb093,0x3b5e6617,0x3b5a34ae,0x3b3e29f9,0x3b49892c,0x3b4782df,0x3b46cff4,0x3b45bb34,0x3b4a8856, +0x3b508177,0x3b4a3b1d,0x3b538ec8,0x3b5a20f3,0x3b60c95d,0x3b662a96,0x3b5a61ca,0x3b5d2c05,0x3b5f4157,0x3b5dbb71,0x3b743528,0x3b7d2a7b,0x3b86a653,0x3b5a47e2,0x3b5f6af4,0x3b68d46e,0x3b83fd6c,0x3b87e80c,0x3b7d502e,0x3b8a0bfb,0x3b7d7d56,0x3b5820e6,0x3b51390c,0x3b48eb12,0x3b7d1c27, +0x3b75e211,0x3bb0c6b2,0x3b8cab56,0x3bb0ea5b,0x3ba0ca67,0x3b4e9f6e,0x3b7b964d,0x3b880581,0x3b8f51ba,0x3b74bb35,0x3b812e22,0x3b8e89a6,0x3b5b5a79,0x3b517f4b,0x3b6a3b61,0x3b8223fa,0x3b983c33,0x3b86138c,0x3b8a1498,0x3b8ebbe0,0x3b93ceb4,0x3baef07e,0x3baa0c26,0x3bb0a976,0x3b7dc023, +0x3b5857fd,0x3b5cab96,0x3bcb5b97,0x3bd9a472,0x3ba2db6d,0x3bb8dcb5,0x3b86a60a,0x3b681be3,0x3b649d7c,0x3b7367b8,0x3baa7242,0x3b8c6e68,0x3bb471e7,0x3b59f243,0x3bac0ff7,0x3ba02e60,0x3afe79cc,0x3b45f52e,0x3b280645,0x3b4ca6a3,0x3b40392d,0x3b5e6c70,0x3b83beea,0x3b45503e,0x3b4fdc12, +0x3b581b4d,0x3b9a9534,0x3b9d48c3,0x3b8898d9,0x3b937ba9,0x3b8ed107,0x3bb5c202,0x3be2b745,0x3bc72b30,0x3be43b78,0x3b7e2c70,0x3b6bb5ae,0x3b441b53,0x3bdc46f9,0x3c010409,0x3bb255da,0x3bdc6ac1,0x3bb253ff,0x3b033ad4,0x3b232f4e,0x3b2a7509,0x3ba6767d,0x3b99b760,0x3bb818dd,0x3ba19a51, +0x3bf433a6,0x3be620bd,0x3a717a6a,0x3b2ccb2a,0x3b75664a,0x3ba01091,0x3b5373a3,0x3b5f73a6,0x3bc9bb52,0x3b0c1114,0x3aec075b,0x3abbd738,0x3b86de86,0x3ba74f8d,0x3b755fa6,0x3b977c1e,0x3b9f8a26,0x3bdd1192,0x3c0080ce,0x3bdd4b22,0x3c0b8d1a,0x3b6e2006,0x3b5f5009,0x39da78f4,0x3bfb3942, +0x3c0ff4e2,0x3bdc1fed,0x3beabd89,0x3ba7268e,0x3b390876,0x3acafcdf,0x3b24a668,0x3be9ac4e,0x3b9324b4,0x3bfbb520,0x3b5cde32,0x3bb8fa75,0x3ba7bc42,0xba929645,0x3a80e00f,0xb8f129fd,0x3b036b35,0x3b1e10ad,0x3b92a734,0x3b970e84,0x3b20467b,0x3b325455,0x3b191908,0x3bb2bdc4,0x3bb309bd, +0x3b808bbf,0x3b9e52dd,0x3bb7a965,0x3c041842,0x3c3b93f3,0x3c18b0a3,0x3c22cbf6,0x3bc00371,0x3bbfab49,0x3a2b6ffe,0x3ba2591f,0x3c035023,0x3c0befe1,0x3c1524fd,0x3bccf10d,0x3a9e8c26,0x3a5b6068,0x3ad51869,0x3be7ad87,0x3c10371e,0xbbcc1606,0x3c0585bf,0x3c6f5ed8,0x3ca43f2b,0x3cd48924, +0x3c4a6f07,0x3c1fab70,0x3c2d8c03,0xbb6257db,0xbc008347,0xbbd9e083,0x3c285a31,0x3c7761ad,0x3baacc29,0x3bcb7d0f,0x3bbaf1d2,0x3c057bcc,0x3bb20914,0x3b31e9bb,0xb98d286e,0x3a748c14,0x3b1f8084,0x3bf06dbc,0x3c06a641,0x3c10796e,0x3c365cd8,0x3b459539,0x3a1e327e,0xbb04fcc2,0x3c2b78c0, +0x3c970c2d,0x3c518871,0x3bd2bb1c,0xbb2b9044,0xbc50a7dd,0xbc805a65,0x3cafd493,0xbcd86d13,0xbc00b004,0xbbd997aa,0xbc1de004,0xbbe79de0,0xbc5637b7,0xbccd6399,0xb953f6ff,0x3bfb1a3a,0xbbea1033,0x3bb06653,0x3c0d1aa2,0x3c2a2c90,0x3be8db8a,0x3bb081d3,0x3b628108,0x3c049d3d,0x3c12ea2b, +0x3b72eb55,0x3bf6317b,0x3c01ba55,0x3bfc8fb5,0x3c3456f3,0x3c048f26,0x3b995ebf,0x3b3e1839,0x3b93fcd6,0x3c2772ff,0x3bd2fcf4,0x3b488fe4,0xbb5c6e0f,0x3b7cb701,0x3bcbee55,0xbb7eb2fa,0x3cd1a9ac,0x3ad3656f,0xbc9962e2,0xbc162721,0xbbde27d1,0xbad6c58b,0xbb68d58a,0xbb0c699f,0x3a8132d4, +0x3c418593,0x3c563ca9,0x3945ed50,0x3c0053e8,0x3b99891b,0x3b03e77d,0x3aa8e65d,0x3b82e5ae,0x3b47fa81,0x3c02191d,0x3bfd116f,0x3a5c41e9,0x3b0bc8bf,0x3aeb38ca,0x3b26beb2,0x3bcf0f70,0x3b394663,0x3ba50ace,0x3b59d499,0x3b507ec1,0x3ba5203f,0x3a7b2880,0x3afe7578,0xb9da521e,0xba2c1e82, +0x3b9d9502,0x3b887a14,0x3b7cdbd4,0xbaf2376f,0x3aaa04a8,0x3a566c2e,0x3b282e26,0x3c18f4c3,0x3b1abe48,0x3b841d84,0x3bf4c391,0x3b8ed259,0x3b383baf,0xbb4db11c,0x3b86045d,0x3b6106e2,0x3a4e60a0,0x3ae05b11,0x3b42bd57,0x3b738c11,0x3bbf5278,0x3b9cd970,0x3a90f580,0x3b1db86a,0x3ab31daf, +0x3a84a5b0,0x3b98c2f9,0x3afcc6b0,0x3b63b019,0x3b18dd9e,0x3af8031a,0x3aed0678,0x3a284731,0x3aa4574d,0x3ba801e6,0xbab5f05e,0x3a9493e2,0x3b8add81,0xbab8258a,0x3a176b79,0xbb245de7,0xba6b3085,0xb8ec4c50,0x3bb5b9d3,0x3b856b28,0x3a8ec64e,0xbc182644,0xbc01eb14,0xbc1ec5ae,0xbc738896, +0xbb652baf,0x3b19dc7f,0x3b43813a,0x3b874f79,0x3bb2390d,0x3be7a518,0x3bd14cef,0x3bb95c92,0x3b63c553,0x3baae110,0x3bb08bfa,0x3bbbbc30,0x3bf29a6e,0x3bbb2f58,0x3b80b0ba,0x3aec9b82,0x39d4452a,0x3b0b9d92,0x3a3d68fb,0xbaac7b46,0xbb1e86a9,0xbb6e63e4,0xbb505a39,0xbbc5f459,0x3ad36120, +0xbc60047e,0xbb90b7cf,0xbad4d438,0xbb2b5d17,0xbbdf4e5a,0xbc2cb3d6,0xbc145720,0xbb3421b8,0xbb81bdd1,0xbba33cdd,0xbb9fc893,0xba5e5b23,0x3a9c031d,0x3a63730c,0x3ba146c8,0x3be233cc,0x3c057a03,0x3bd3b741,0x3b8828f5,0x3ad1f603,0x3bc0fa5c,0x3bcd83a2,0x3b36a5d1,0x3b6b15c9,0x3b406891, +0x3bc96065,0xba81e6fe,0xbb9707fc,0xbba5b58c,0xbbe7689a,0xbbcbc47f,0xbc1b7692,0xbc605eec,0xbc965393,0xbce0ed17,0xbca8535b,0xbcd6420e,0xbccd23b3,0xbcb2f8fc,0xbc86ffbd,0xbc210f6b,0xbb6b6441,0xbb8ef1a1,0xbc4a5235,0xbc0655b1,0xbbbbaaab,0xbb3851eb,0xbb394b3c,0xbaea41ee,0x3a2a5f3a, +0x3ac5892a,0x3b89e772,0x3ba636eb,0x3bf143eb,0x3beddc2b,0x3b61a732,0x3b8cb391,0x3b6e65e0,0x3b126cc8,0x3b2e8c9c,0x3b4cbd8d,0x3bc13561,0x3b2f66b6,0x3a826be9,0xbb8e8986,0xbbe11de0,0xbc098284,0xbc27df52,0xbba24117,0xbbd233db,0xbc553939,0xbca01f83,0xbc8a022e,0xbc9983c0,0xbc94ee3c, +0xbc7d604c,0xbc510e0b,0xbc073046,0xbbb82539,0xbbae3937,0xbb97a4c9,0xbb9eba3a,0xbb7843f9,0xbbb360ae,0xbba79210,0xbb7e8616,0xbaf146b5,0x3a226e76,0x3adaca87,0x3afe4216,0x3a869520,0xba052eef,0xb905220a,0x366248c0,0x3a442c1a,0x3ac36d59,0x3b33a117,0x3b9b1d54,0x3bbda636,0x3b999f31, +0x3b86dba2,0xb9052fe3,0xbb0425f2,0xbb603612,0xbb7a16ca,0xbb9aa308,0xbbeb5522,0xbc50fb5c,0xbb936802,0xbc2144e4,0xbc2565f6,0xbc2d9bce,0xbc433618,0xbc371e5e,0xbc2247e0,0xbbe7ca24,0xbc01dab2,0xbc0c9633,0xbc10ebb8,0xbc03fd9f,0xbbf39d37,0xbc0a172f,0xbbe6947a,0xbbbe1ae6,0xbb8bad1b, +0xbbafdf78,0xbbbdb4d4,0xbbc5afa9,0xbb9cd50a,0xbb511a21,0xbb0cc0f7,0xb982bb9e,0x3ac05612,0x3b238fc1,0x3b56615a,0x3b717f3e,0x3becc755,0x3b8600cf,0x3b867887,0x3a4a429b,0xbaadc38a,0xba8a327e,0xbb4c47a6,0xbb9c9f62,0xbb8a5ff1,0xbbab62ef,0xbbe47bdb,0xbc029454,0xbc0da866,0xbc388960, +0xbc5dbcd7,0xbc8ad901,0xbc85e813,0xbc788cf4,0xbc748a6a,0xbc7d0bea,0xbc8135a6,0xbc825344,0xbc6d22bb,0xbc57533a,0xbc51fc75,0xbc312e4d,0xbc0a96aa,0xbc01fb32,0xbc0888c4,0xbbef774b,0xbbcd42a8,0xbbb27577,0xbb9f125e,0xbb594591,0xbb69a121,0xbb6ad40f,0xbb9d992a,0xbb5afc46,0xbb64901a, +0xb987c699,0xba7f6fc2,0xbb157d51,0xbb1eaa92,0xbb94fa17,0xbbf4bd49,0xbbebc90e,0xbbfab146,0xbc057f18,0xbc0a750e,0xbc10cc80,0xbc0b375b,0xbc0bae98,0xbc06d973,0xbc0ee3eb,0xbc0fc078,0xbc0abd03,0xbc06bc7d,0xbc08bd36,0xbc04af2b,0xbc03fe67,0xbc0165bb,0xbbffda63,0xbc012e79,0xbbf3dced, +0xbc014edd,0xbc062b62,0xbc08c851,0xbbe69cb5,0xbbe961dc,0xbbea57a1,0xbbe6dec4,0xbbd77320,0xbbc43f77,0xbbbbb83d,0xbbc7707e,0xbbd6703d,0xbbee39bf,0xbbe3220f,0xbbf03b6a,0xbbec0344,0xbc65c8b3,0x3b98cfe1,0x3b330a2d,0x3b1664ba,0x3b35eced,0x3b351d3b,0x3b15cf64,0x3b215f0a,0x3b24e0af, +0x3b3220de,0x3b2aa990,0x3b30ac38,0x3b44c41e,0x3b33e9ac,0x3b3a338e,0x3b44b7f8,0x3b459fe7,0x3b496f2b,0x3b41da88,0x3b3ada20,0x3b386e66,0x3b332979,0x3b4c48bb,0x3b5774ae,0x3b73765a,0x3b3d6479,0x3b483350,0x3b53e27b,0x3b74054a,0x3b79c26e,0x3b630366,0x3b756d8b,0x3b5e44cb,0x3b3c0da4, +0x3b384475,0x3b30daad,0x3b52540c,0x3b4c6bc0,0x3b87c7c0,0x3b5f27c8,0x3b91af5f,0x3b7979e1,0x3b00e3c3,0x3b30250c,0x3b4eae47,0x3b8278d2,0x3b509eac,0x3b713601,0x3b99950b,0x3b63117d,0x3b570f3c,0x3b7499aa,0x3b77b571,0x3b881e43,0x3b710c8d,0x3b581c4a,0x3b501001,0x3b4edec0,0x3b88f7f7, +0x3b8ed39d,0x3b9c95a8,0x3b5ed8a2,0x3b43d950,0x3b4ba7d3,0x3bc891e2,0x3bd4b82d,0x3b940b28,0x3ba4b5bf,0x3b705763,0x3b4d0516,0x3b582822,0x3b5b54d1,0x3b84660f,0x3b545255,0x3b69c62d,0x3af252c4,0x3b778a02,0x3b6084c0,0x39467a83,0x3ab217e4,0x3ab1be23,0x3b5a7731,0x3b28db9b,0x3b53c4b6, +0x3babaf6d,0x3b4eaa6b,0x3b5ecd77,0x3b7a505b,0x3b96ba2a,0x3b91ddaa,0x3b84cb6c,0x3b580671,0x3b3b5e40,0x3b5a532a,0x3ba4f067,0x3ba115ad,0x3bcb27ca,0x3b6728f1,0x3b5d40c8,0x3b554310,0x3be28b7c,0x3c005ae2,0x3ba71893,0x3bc4ae6a,0x3b9e7d25,0x3ae25c3c,0x3b26bc3d,0x3b18c9b1,0x3b6534b9, +0x3b4ffba4,0x3b530910,0x3b6a9f37,0x3bbde973,0x3b920277,0xbad49d7b,0x39cfb279,0x3b03a7d4,0x3ba0ac28,0x3b37eb0d,0x3b753320,0x3c0a24b7,0x3b527936,0x3b478f4e,0x3b5544da,0x3b99ac59,0x3b9e9a7d,0x3b7779d2,0x3b353acc,0x3b1e4bee,0x3b4a688f,0x3bad3df3,0x3baaf64c,0x3c089fcb,0x3b4bcb51, +0x3b4a7fbf,0x3a357fcd,0x3c0cfdec,0x3c1c72a0,0x3bc4591e,0x3bdba53c,0x3b959eee,0x3b242ed6,0x3afccf69,0x3b16b827,0x3b998cb8,0x3b1bca64,0x3b7b7dce,0x3a5565a9,0x3b3a567a,0x3b31e083,0xbb7a826c,0xbb08644e,0xbafee853,0x3b43539f,0x3b1bf62b,0x3b975bb3,0x3bfa91d7,0x3b5efb51,0x3b5d0757, +0x3b6dade0,0x3bb71e76,0x3bb47bc0,0x3b8a9b26,0x3b3ecc3c,0x3b2fcb21,0x3b65d7fb,0x3bfc1144,0x3bedefd0,0x3c28581a,0x3bb553f9,0x3b9f0ed0,0x399d0a17,0x3bc735ab,0x3c121bfa,0x3bdb69bb,0x3c059606,0x3bb7e2b3,0x385ce036,0x3ac421c0,0x3ad56b98,0x3b8820cd,0x3bb6b8a1,0xbbacdd15,0x3c28eaa4, +0x3c726ec6,0x3c8a664f,0x3c9ee0da,0x3c61fb83,0x3c4a2be3,0x3c32d943,0xbb7e90de,0xbc2a6341,0xbc151c58,0x3b4ed65c,0x3c2f4050,0x3c2b1c76,0x3bf5bb31,0x3bc545b2,0x3c0261c0,0x3bbba474,0x3b828dc1,0xb883521f,0x383749bf,0x3ab2a742,0x3bd05d20,0x3bd12a99,0x3bf1adfc,0x3c52512c,0x3b17d261, +0x392db08d,0x3a4b0c99,0x3c567407,0x3c988c9c,0x3c0c4b20,0x3b9c5637,0xbb7bfc9b,0xbc61ad1c,0xbc830dc1,0x3cab01e3,0xbcfdcafe,0xbbd84a7c,0xbb96fa87,0xbbe94c3c,0xbbf1944c,0xbc3a2833,0xbc91a5ce,0x3b22988f,0x3c1dae8f,0xbbb16cca,0x3b8f18df,0x3be34340,0x3c2479e3,0x3c031fd9,0x3bed2642, +0x3bdce595,0x3c07cc17,0x3c0a057e,0x3b86aca0,0x3bc6c3c4,0x3bd55d02,0x3bbd2bb6,0x3c41569e,0x3c15cdd8,0x3b98f175,0x3b8db21e,0x3bbd84e9,0x3c316393,0x3bc4b50c,0x3b3a9412,0xbacae13f,0x3b977733,0x3bf61869,0xbb90bbe9,0x3ce790f4,0xbaff6e71,0xbcbdb787,0xbb8d0d4d,0xba1cb886,0x3b872bbe, +0xba9f69b1,0xba9efa43,0xb9f43ba6,0x3c39bf83,0x3c65e3e8,0x39d6bbc1,0x3c0ce598,0x3bb15c10,0x3a34e500,0x3a2a4940,0x3b2b9c07,0x3b92b1be,0x3bbd9563,0x3b96d585,0x393360d0,0x3a979faa,0x39a7b134,0x394ec424,0x3b98b886,0x3b2f85a5,0x3baf3e22,0x3b6e9ca2,0x3b7648d2,0x3bb931b7,0x3afa85fc, +0x3b4a08ca,0x3a4f90aa,0x3b3d4f10,0x3be3ec6b,0x3ad5bf50,0x3b3e0839,0xbb01de87,0x3b50685d,0x3b7dcf82,0x3bbf6f28,0x3c4da13b,0x3b1850ba,0x3b2863ed,0x3ba0d0d5,0x3b8e7cad,0x3b9bf8fd,0xbb315cad,0x3b9b9b30,0x3b44d33f,0xbac3b7c9,0xba848838,0x3a25a79e,0x3b87317b,0x3b5b15d7,0x3b1d5597, +0xb9ba0149,0x39bbb296,0xba4e4460,0xba9a3162,0x3b176135,0x3aa023ae,0x3b695c9a,0x3b1e27c9,0x3b0630bf,0x3b08a203,0x3ac27504,0x3b0c986b,0x3b139db3,0x3b19426e,0x3b627e85,0x3b602019,0xbb136294,0x3b7ba638,0x3b5f130e,0x3aa16857,0x3a97f639,0x3c00a6e6,0x3b817ee2,0x3a5e780f,0xbbd0425a, +0xbbd84935,0xbc100e57,0xbc7d5080,0xbbacba5b,0x3a25f42e,0x3b40a5d5,0x3b3c2c9d,0x3b985d01,0x3bde4f1d,0x3bb55bbc,0x3b9cf8d6,0x3b558913,0x3b511b89,0x3b4ae02e,0x3b5855ab,0x3bcf3397,0x3ba6a6ae,0x3b2b1051,0x3ade7b1a,0x39ce2906,0x3ace0617,0xba13fb70,0xbb0a32d0,0xbb8ab6a2,0xbb7b3c65, +0xbb07189e,0xbb8f946b,0x3b607d87,0xbc4533a8,0xbbfc00bb,0xbb17e825,0xba847372,0xbb95a7e8,0xbbc81691,0xbb9f497b,0x3a9038f3,0xbbc6b3cb,0xbc01e68a,0xbb50e38d,0xbb4e4a6d,0xb90db639,0x3968c743,0x3b9384d9,0x3bc689c1,0x3c034ccf,0x3b50f6a1,0x3ada45b5,0x3b057326,0x3b9897b8,0x3b9dcc18, +0x39c6302b,0x3b37abb2,0x3b15bac9,0x3ba7a68c,0xbaca7113,0xbb893be7,0xbb48d61f,0xbb84616c,0xbb91798a,0xbc159bf6,0xbc6c835c,0xbc9e6307,0xbceb544f,0xbc9933c5,0xbcb3fdee,0xbc9f7a41,0xbc8180f9,0xbc5cff10,0xbc232d73,0xbc38e642,0xbc5c700b,0xbc8aac63,0xbc018106,0xbb8a841e,0xbb915a88, +0xbb43f579,0xbb00a9b4,0xb9589541,0x3b13a175,0x3b6de034,0x3bde27eb,0x3bb80c77,0x3bb4a2d2,0x3b93fa56,0x3baaca83,0x3b96a17c,0x3add5d20,0x3b233367,0x3b0d31b5,0x3b8cdb74,0xba7cd63d,0xbb3ad226,0xbbc3a911,0xbc17aa98,0xbc2f9f1b,0xbc461c68,0xbc0b74d3,0xbc0d8d9f,0xbc2030f1,0xbc88cf8b, +0xbc9b1fcf,0xbca792a6,0xbc90c0a6,0xbc770125,0xbc4335e9,0xbc118a82,0xbbb8c553,0xbb8a08f6,0xbb0ec46a,0xbaf9b58b,0xbb1bd2b5,0xbb18f94d,0xbac293d8,0xb9194421,0x3b1daebc,0x3b8a2a97,0x3bcb08a7,0x3b852c69,0x3b2145cf,0x3a28c1e1,0x39d6bc27,0x39dcfa9b,0x39816e8c,0x3a72f97e,0x3af3098d, +0x3b837c1f,0x3b4dd05b,0x3ab4678c,0x3a6e4768,0xbb4d4176,0xbbaabc5c,0xbbf0f066,0xbc037731,0xbc18ec30,0xbc375e6b,0xbc857c05,0xbc203a60,0xbc6d7fed,0xbc564186,0xbc3ed166,0xbc2d9622,0xbc001486,0xbba9337c,0xbacd841f,0xbb64043e,0xbb983f0a,0xbb8d93d5,0xbb765640,0xbb2e2121,0xbb47b411, +0xbafe8e30,0xb9a51ad8,0x3ab352f1,0xba21e794,0xbab70316,0xbb7aa541,0xbb7196dd,0xbb22b5c6,0xbae30f62,0x382bf1f3,0x3ae445cb,0x3b586f98,0x3b40dd88,0x3b42dc24,0x3b853c83,0x3ab3fdca,0x3a31c74a,0xbb0a544d,0xbb9ba809,0xbbc91c67,0xbc14ebcb,0xbc2153e9,0xbb7b1eb0,0xbb96701e,0xbbc8599b, +0xbbe9a5e2,0xbc051df1,0xbc36a244,0xbc5a2e4e,0xbc7e90cc,0xbc62e30e,0xbc3dfbcf,0xbc33d3c3,0xbc2ef52f,0xbc2a7959,0xbc1fbfcb,0xbc16f2d9,0xbc123c80,0xbc14ede0,0xbbfebd80,0xbbc297b3,0xbba1467e,0xbba6f0cf,0xbb8c5923,0xbb6bc727,0xbb40ea16,0xbb384ac8,0xbadd683a,0xbb186746,0xbb2b1746, +0xbb6f93a4,0xbb26ba58,0xbb42e3f3,0xba4b83c3,0xbabb72dc,0xbac80a21,0xbac4eaa7,0xbb74012b,0xbbcd554e,0xbbb892ab,0xbbbeec07,0xbbbf8637,0xbbb5f0e2,0xbbad82f8,0xbb950b63,0xbb927723,0xbb938c52,0xbba76d9d,0xbba7289c,0xbb9cb822,0xbb965627,0xbb9523df,0xbb939813,0xbb8fd2ed,0xbb8a3bc3, +0xbb8c8f28,0xbb985e8e,0xbb96d7e4,0xbbb789c4,0xbbd02f8c,0xbbec4a17,0xbb977626,0xbba9c1c2,0xbbc62e84,0xbbc376c7,0xbbb800da,0xbbabbdeb,0xbbaaca8f,0xbbb67091,0xbbc4e726,0xbbc811b3,0xbbb528c5,0xbbf27d3b,0xbbdac221,0xbc106791,0x3b7a1295,0x3b135a03,0x3b00417d,0x3b0f9273,0x3b0d011c, +0x3adb284e,0x3af15c52,0x3b000d09,0x3b15ccd7,0x3b0d1737,0x3b13e14a,0x3b2f9e4b,0x3b0bf010,0x3b0bf589,0x3b176e6f,0x3b1d63c6,0x3b2443bc,0x3b236dc0,0x3b192185,0x3b1532c0,0x3b0f6975,0x3b22830b,0x3b2bb8fe,0x3b503faf,0x3b18baf2,0x3b2bcb6a,0x3b3e9fe0,0x3b5ae02f,0x3b5eb656,0x3b464328, +0x3b525d92,0x3b3de9f4,0x3b22bd11,0x3b1ebb52,0x3b15a1de,0x3b2ed827,0x3b23f2d6,0x3b40f72b,0x3b37ce37,0x3b63ef7a,0x3b2c963f,0x3a4cf945,0x3abfe241,0x3b0270f0,0x3b4deeeb,0x3b22e349,0x3b4c77b7,0x3b91fda4,0x3b2b82d7,0x3b10130c,0x3b337277,0x3b3eab55,0x3b5b34fb,0x3b4def1e,0x3b2adc22, +0x3b1b7f95,0x3b193da0,0x3b528315,0x3b63166d,0x3b736533,0x3b38beb5,0x3b2ebdd9,0x3b466ae1,0x3bbddf11,0x3bc743bf,0x3b86f20a,0x3b925589,0x3b593874,0x3b388bbe,0x3b4fe4f6,0x3b4d4813,0x3b58442f,0x3b276ebd,0x3b147318,0x3ae2117b,0x3b320078,0x3b092db2,0xbaaa73b6,0xb90ebb0a,0x3931fa7c, +0x3b45a4c0,0x3b14b908,0x3b383a0c,0x3bb7e591,0x3adcca79,0x3acf63c9,0x3b23a6ee,0x3b5bdfaa,0x3b6c102e,0x3b7223c6,0x3b2879fa,0x3b099d55,0x3b0caff1,0x3b617aa6,0x3b75becc,0x3b97c8e4,0x3b4bc641,0x3b523da8,0x3b719f5d,0x3be30142,0x3bfa3a93,0x3b9f3fd2,0x3baefad1,0x3b8f29e0,0x3af453ad, +0x3b357369,0x3b1e9e7a,0x3b2be25b,0x3b1f9ea6,0x3af24d67,0x3b4fca0a,0x3b947d48,0x3b0f9fae,0xbb824234,0xbade38fe,0xb92a4851,0x3b75a292,0x3b115ef0,0x3b5c77ff,0x3c150b6c,0x3adf3d71,0x3a7b1e24,0x3af04d3a,0x3b5c1c73,0x3b7937dc,0x3b6a47aa,0x3aef5192,0x3aa23615,0x3a9ce74a,0x3b629af1, +0x3b7bfeb9,0x3bdf0f65,0x3b2c846d,0x3b4e1c58,0x3ae74833,0x3c158965,0x3c248f93,0x3bbac2fb,0x3bd5b5bb,0x3b92d00a,0x3b27b3c2,0x3b37cfe3,0x3b318fe9,0x3b63da07,0x3ad28152,0x3ada67ad,0x39ef73a3,0x3af32dd0,0x3a8834c9,0xbbc04092,0xbb9743b0,0xbb56f71a,0x3b507d2f,0x3b1f71b9,0x3b8a81d5, +0x3c0ff9e7,0x3aa813ad,0x3820e0f5,0x3ac53628,0x3b610a3f,0x3b97fbe8,0x3b847979,0x3b059599,0x3aab9c67,0x3a8346f9,0x3b906544,0x3baba768,0x3c1b0c32,0x3baed4ea,0x3b8b9a41,0x3a7bb1d4,0x3be967cb,0x3c1cebf2,0x3bb19a84,0x3be919bc,0x3bad3bf0,0x3954a83f,0x3b192ca5,0x3afaf3a0,0x3b315b30, +0x3b745ade,0xba4b5adf,0x3c4364cc,0x3c348683,0x3c3880fa,0x3c6d9a27,0x3c7c511a,0x3c712837,0x3c11786b,0xbb3b15ed,0xbc2fabf2,0xbc214e9c,0xbb61dc98,0x3bb84c3c,0x3c87d060,0x3c1d0e22,0x3beded98,0x3c043b7f,0x3bd13627,0x3bb29758,0x3b0376e7,0x3a8bb3ec,0x3ac8df11,0x3ba57872,0x3b915c8b, +0x3bc28397,0x3c591bc3,0x3aff8b4e,0x39f73316,0x3b8ba1a5,0x3c7894b2,0x3c918cd5,0x3ba19189,0x3b8a6382,0xbb3fad4d,0xbc572e5c,0xbc3b0142,0x3c64c53a,0xbcf7c8fe,0xbb0e1cda,0xba195964,0xbbdc86a4,0xbbec15ff,0xbc0aaaa6,0xbc2f6387,0x3b9f7116,0x3c2d03f8,0xbb23b65b,0x3b58a55e,0x3babd6bd, +0x3c1c5609,0x3c106db2,0x3c113d38,0x3c0828c8,0x3bf133ca,0x3bded85f,0x3b8c792b,0x3b98e80b,0x3ba3f6c9,0x3b8ae8b6,0x3c3bdebe,0x3c1ca5b1,0x3b966fbe,0x3bc4b732,0x3be5bea2,0x3c323558,0x3b9a2dba,0x3b2b53de,0x3b00f4fb,0x3bbed89b,0x3bf064f1,0xbb8a069c,0x3cc28038,0xbbbac082,0xbcbaf521, +0x3a9f2344,0x3baee392,0x3bdea56e,0x39980911,0xbaabff2d,0xbb119a85,0x3c1ab9de,0x3c55b096,0x3b1aee90,0x3bee185d,0x3b9ea4bd,0x3ad9e351,0x3a4888f3,0x3b0758fe,0x3bdb391a,0x3b85afe2,0x3ad080c0,0xb9abb32a,0x39afbb29,0xb9fb1577,0xba93948a,0x3b3a828b,0x3b37af60,0x3bb87993,0x3b83b3db, +0x3b8df28d,0x3bbfda1a,0x3b1389c7,0x3b6398b5,0x3aa176bb,0x3b9ffa57,0x3c029fe8,0x3a6a554d,0x3ada04b3,0xb98efe57,0x3b9f64d2,0x3be1b80e,0x3c0ec37b,0x3c35f1b1,0x3b0afc7b,0x3abf70ab,0x3a5d711e,0x3b80176a,0x3bc17348,0xb97cf7fc,0x3b99e11d,0x3b05c47c,0xbb0c9f1a,0xbb847feb,0xbb014445, +0x3bc28f89,0x3af7e23a,0x3a819258,0xba83ef15,0xba90a407,0xbb0ce34a,0xbb036290,0xb7259c2c,0x3a416c87,0x3b8717f3,0x3b2c4c7c,0x3b2426b1,0x3b0e46ca,0x3b21f4d7,0x3b33a95d,0xba1387b2,0x3b9b03d6,0x3ba6b916,0x3b14818e,0xbab41e04,0x3b9493db,0x3ba803ff,0x3b5c3235,0x3b4cfd69,0x3bc7b36f, +0x3b80b23a,0x3b1f468c,0xbb041f3e,0xbb8a9d00,0xbbd4f4a3,0xbc3e1668,0xbbccfdf2,0xbaea11b4,0x3b1b0023,0x3ab0946f,0x3b33815b,0x3bc5bdea,0x3ba2b957,0x3b9c3efc,0x3b72242a,0x3ae54d03,0x3abdfb18,0x3afec40f,0x3ba04674,0x3b828eb5,0x3ac0fe53,0x3aff898c,0x3a597972,0x3a9021da,0xba5669d3, +0xbaf3eaf1,0xbb8f879c,0xbb9917ff,0xbb4c4f41,0xbb9479c4,0x3b266573,0xbc48f988,0xbc136f3d,0xbba98a13,0xbb3dde24,0xbb1c7c00,0xbb310adb,0xbb2c3a92,0xb9babc94,0xbc13018d,0xbc28f8ef,0xbb0f13bb,0xbb8395b9,0xb9f33d65,0xba71ad7f,0x3b63ad7c,0x3b9d40fa,0x3bb30e05,0x39852429,0xba09a882, +0x3adb8715,0x3b2450cb,0x3b1ea3ed,0xb9b0c6cd,0x3b0cb9e9,0x3aba411c,0x3b45e52c,0xbacc5fb9,0xbb4216db,0xbab76486,0xbb15dd3a,0xbb86e70d,0xbc21859f,0xbc810d80,0xbcaab366,0xbce59bf2,0xbc919ae3,0xbc849f44,0xbc6645ee,0xbc3eae91,0xbc3f5478,0xbc38479a,0xbc88c530,0xbc8fe30d,0xbc677fcd, +0xbc15f661,0xbbd39343,0xbbc49aa5,0xbb79a04a,0xbb0cae03,0xba6af8a0,0x3b12f50e,0x3b4c4d51,0x3bdcc989,0x3b74d0be,0x3b60dd6f,0x3ba0184d,0x3b9cb422,0x3b90d19b,0x3aee7c65,0x3b2c19a7,0x3ac987e5,0x3b184c3e,0xbb8cba8c,0xbbd20a54,0xbbfaaf85,0xbc2d216a,0xbc40752b,0xbc52f369,0xbc30a3a9, +0xbc1b1a3c,0xbbcda664,0xbc4f869e,0xbc98497b,0xbca311c1,0xbc886452,0xbc792f22,0xbc57ee45,0xbc34e5bb,0xbbfefbd2,0xbb90cda8,0xbb4bef11,0xbb1494a5,0xbb29d18f,0xba3bf24f,0x3a42b9a4,0x3aea923b,0x3b92bd15,0x3bccec7c,0x3c0cf74c,0x3bb31517,0x3b81bf1f,0x3b4a067b,0x3b16e061,0x3ae42a7b, +0x3a077a23,0x3a85be60,0x3acff60b,0x3b4dc64b,0x3a970ad0,0xbaaaf0e0,0xbafa60b1,0xbba411f2,0xbbdf53ca,0xbc142389,0xbc25b14e,0xbc3d62b2,0xbc571a50,0xbc8ba3c3,0xbc623904,0xbc88fae0,0xbc6e0164,0xbc4c0769,0xbc281b55,0xbbd6f6ff,0xbb6b70e7,0xb9c04bec,0xbaaeb63a,0xbafebc31,0xba98cb82, +0xba6dba79,0x3a13b486,0x3a7da620,0x3ad8a80c,0x3b43be50,0x3b8ac759,0x3b30cea4,0x3b33e1b3,0xb9a35830,0xba9f2dbc,0xba769ab1,0xba5631ba,0x3a184ab0,0x3b08a069,0x3b7f557a,0x3b36ce3f,0x3af6e6e1,0x3ae05f51,0xba46c788,0xbab58a3e,0xbb5fdd78,0xbbd0deaa,0xbc1bdfa4,0xbc51f419,0xbc554a12, +0xbb67baf2,0xbb8b017f,0xbba80b14,0xbbb78215,0xbbcbd30c,0xbc0def82,0xbc214c06,0xbc2c7a78,0xbc16e6ed,0xbbeb5504,0xbbd33db2,0xbbb9c061,0xbbaa9612,0xbb8d295e,0xbb97a01e,0xbba331b9,0xbbb3b2a3,0xbbaff7cf,0xbb9f27f8,0xbb8038b2,0xbb6084b4,0xbb11fcce,0xbabe044c,0xba3ee08b,0xba1eab04, +0x3936949e,0xba3c7382,0xbaac09b6,0xbb0c38f5,0xbade7efa,0xbb2837c1,0xbad64b5a,0xbb08af90,0xba92abc5,0xba935a80,0xbb4920c2,0xbb8659de,0xbb6f7eac,0xbb68cb3f,0xbb53fc2c,0xbb2c0a7e,0xbb057cb4,0xbaa77068,0xba91c792,0xba9290e7,0xbac41a85,0xbac245bb,0xbaa5963a,0xba934745,0xba78b043, +0xba8616aa,0xba79562a,0xba4bbc2b,0xba490839,0xba8b99c4,0xbaa53b44,0xbb16828f,0xbb4ab6f6,0xbb83359f,0xbad14fdf,0xbb08c19c,0xbb39a28d,0xbb34a801,0xbb343236,0xbb2ff375,0xbb3987fc,0xbb5346f5,0xbb6c8111,0xbb699aff,0xbb564a6b,0xbbb3f654,0xbb9b0733,0xbb43a0a7,0x3b3eb75b,0x3af12eec, +0x3ad67292,0x3acbfb2e,0x3abce0bd,0x3a860b82,0x3a9c1b6b,0x3ab3ac06,0x3ae943fd,0x3ad92023,0x3ae6da50,0x3b0ff8a3,0x3ab36f72,0x3aa3b76e,0x3ab027c5,0x3ad4c3a5,0x3aef9a18,0x3b012e1a,0x3af2afc0,0x3aebb41f,0x3adb05ee,0x3afdb019,0x3b04ed5c,0x3b24cc35,0x3ae4f8ae,0x3b0ffc30,0x3b2c6fd1, +0x3b42023e,0x3b43cd1e,0x3b2bc4b8,0x3b33c5a7,0x3b23118a,0x3b0da1a5,0x3b0ad1b4,0x3afdb1ee,0x3b1316bf,0x3b06e368,0x3b27caa5,0x3b35839d,0x3b298345,0x3acafc33,0x3759c567,0x39cffc3f,0x3a7b2f6a,0x3b1aaf5b,0x3af69760,0x3b1b0597,0x3b703562,0x3a9af52e,0x39c5e6c3,0x3a434bde,0x3ab41729, +0x3b0e4ab7,0x3b203ea6,0x3b0b553c,0x3afd8413,0x3aeb344c,0x3b27bef9,0x3b2afcc3,0x3b1c7f1a,0x3b0f3bd6,0x3b175b2f,0x3b49d522,0x3bb06a2e,0x3bb89077,0x3b7a949e,0x3b84504a,0x3b435b8d,0x3b26bf43,0x3b49679c,0x3b403c2a,0x3b3241c5,0x3b15be90,0x3af5d7d2,0x3b1ac6c2,0x3aed774a,0x3a484d6b, +0xbb0f5b51,0xbabfd351,0xba3df8cd,0x3b267cd6,0x3b07564b,0x3b137d8b,0x3ba612ab,0xba106d28,0xbaadaf1e,0xb9955b5c,0x3a9b0037,0x3b118c6d,0x3b53128c,0x3b1a03c3,0x3b04638f,0x3ade08ad,0x3b235c11,0x3b2e2ef9,0x3b2b352b,0x3b215801,0x3b408d6a,0x3b8a859e,0x3be0f7ec,0x3bf1f532,0x3b9f1434, +0x3b9fe4ee,0x3b875a4c,0x3b07e251,0x3b4aa33e,0x3b36ed8b,0x3b14b6b7,0x3b156b7c,0x3b11bebe,0x3b8e4b3c,0x3b6df127,0x3a06fbc4,0xbb91b1a3,0xbb5db997,0xbae81ce0,0x3b3d180d,0x3b05afe8,0x3b2a5f18,0x3c0420df,0xbaa1197c,0xbb4675fa,0xbb1daef1,0x399272fa,0x3af80d54,0x3b4b4446,0x3ae92e99, +0x3aa62eb1,0x3a3cab13,0x3b28ff17,0x3b308042,0x3b89ae33,0x3b028a36,0x3b5854a0,0x3b5628d7,0x3c1ccdef,0x3c2b541b,0x3bc396ae,0x3bd6cbd7,0x3b9b4252,0x3b3a16f3,0x3b7898d3,0x3b5056bd,0x3b334e9b,0x3afcf208,0x3a1f9f31,0x3ac6c86c,0x3ac59aed,0xb9d9dd56,0xbbdbe8c7,0xbbd79c48,0xbb84d01c, +0x3b47f430,0x3b2e4aaa,0x3b68af8e,0x3c046619,0xbb183eb7,0xbba7657d,0xbb3d9687,0xb99b0b8f,0x3b3f7795,0x3b82b030,0x3b1b6766,0x3ad1eb0a,0x39d64136,0x3b21b12b,0x3b5fce2f,0x3be69e98,0x3b9cdf39,0x3b85aa4c,0x3b18c3c2,0x3c072dba,0x3c2891ac,0x3bad5fa6,0x3bd64823,0x3bae76be,0x3a8cb473, +0x3b4f933a,0x3b403b20,0x3b17495d,0x3b40d020,0x3bb32d5b,0x3c4bc9c3,0x3bd3fc21,0x3bc4da45,0x3c258d58,0x3c8df7a3,0x3c8aff9c,0x3bb1aead,0xb94d914c,0xbc116596,0xbc260f63,0xbc0caa5f,0x3a86273d,0x3ca08d52,0x3c2da577,0x3c02ee7b,0x3c03f3ea,0x3bde6353,0x3bcf082a,0x3b8f5a34,0x3b68d8f2, +0x3b46b981,0x3b90b859,0x3b4db895,0x3b95adef,0x3c4b97b8,0x3ada1238,0x3ab17caf,0x3c035777,0x3c829efd,0x3c7f289f,0x3b5ce09d,0x3b62f318,0xbb281235,0xbc3ad0e9,0xbb895c23,0x3ad6ef95,0xbcd0b8ef,0x3af9a3b6,0x3b52fb71,0xbbf33853,0xbbb304c1,0xbb9e60d2,0xbbd08c57,0x3bb79e88,0x3c1ffe2a, +0x39e038fc,0x3ae7c804,0x3b3ded1e,0x3c1b2ece,0x3c1de0ac,0x3c33a063,0x3c227143,0x3bd325fa,0x3bac240e,0x3b891e01,0x3b5230e0,0x3b6f1143,0x3b5ef8d8,0x3c26ddda,0x3c162742,0x3b8f5e69,0x3bfc5f00,0x3c0910a7,0x3c2c61b0,0x3b8010a0,0x3b4add38,0x3bb51268,0x3bc6935c,0x3bc0ae99,0x39835871, +0x3c5102e5,0xbc05f245,0xbc92954d,0x3baed963,0x3c1b1ab1,0x3be9a68c,0x3a9ac868,0xbb2b010e,0xbba9d865,0x3b9801b1,0x3c160d39,0x3ba4687f,0x3bb3550c,0x3b8fa056,0x3b80cbd0,0x3adf6417,0x3b171392,0x3bfd358e,0x3b3ad895,0xba10e11c,0xb9bbbffe,0xba22dd12,0xba4151ef,0xba8349e1,0x3ab72ee1, +0x3b451c54,0x3bba1e91,0x3b9037dd,0x3b9f9d09,0x3bbce55f,0x3b12a361,0x3b58cfea,0x3ad77249,0x3bc1525c,0x3c08240a,0x3b3585ef,0x39cae65c,0x3b4b3a37,0x3bf699ec,0x3c17fd41,0x3c249fea,0x3c15b297,0x3ab24a69,0xb9b38d8f,0xba3f9ff8,0x3a1539dd,0x3b54ae5b,0x3b41c62d,0x3b6d072f,0x3ac16197, +0xbadfb3d1,0xbb8b8cff,0xbb4919f0,0x3bbabdc1,0x3a42157b,0x36a16596,0xba844ea1,0xbaf10442,0xbb26cb24,0xbaccac6b,0xbacbcb9d,0x39e98423,0x3b9f95f8,0x3b45d162,0x3b4942db,0x3b0ef8c4,0x3b569d0a,0x3b50899d,0xbaf1b943,0x3bb5c9fe,0x3bc2d7f8,0x3ae05dcf,0x3ace1b19,0x3ae679af,0x3b6a716e, +0x3b8109df,0x3b963f4e,0x3baf1562,0x3bc88ffc,0x3be22e3a,0x3b816632,0xba5ccbbf,0xbb4e9afd,0xbbc8ccf3,0xbbcec210,0xbb5c0f06,0xb9b64253,0x3a0155be,0x3af8492d,0x3ba441e1,0x3b9ad57f,0x3ba4fc3e,0x3b80a76d,0x3a6058d1,0x39073da6,0x3aab923b,0x3b4adaf1,0x3b288287,0x3a209806,0x3b263297, +0x3adeb551,0x3a548462,0xb8b5ddc3,0xba702a1e,0xbb8f6137,0xbbc04b0b,0xbba976ac,0xbbbf619f,0xba740945,0xbc3ef330,0xbbf16f19,0xbbd7e190,0xbb90c203,0x3a2cf676,0xba41d35a,0xbb44d06c,0xbba05f78,0xbc35be8f,0xbc3c590d,0xbb3e8fb5,0xbb87dd21,0x39ca3f4a,0xb8b4b467,0x3b33d7aa,0x3b553b19, +0x3b3317d0,0xba155012,0xba760e87,0x3ace9b20,0x3a6888f1,0x3a441b1d,0xb7b1a768,0x3acc807e,0x39eee6e9,0x39e5ccf6,0xbab7e294,0xbae2d776,0xba32bbee,0xbaff0b21,0xbb990a70,0xbc2f1f7a,0xbc81374e,0xbca7d946,0xbcc06bc5,0xbc8815c2,0xbc46aa24,0xbc30553f,0xbc20a8ee,0xbc312307,0xbc4dc727, +0xbc78c9cf,0xbc6a055e,0xbc284d74,0xbc15cb6a,0xbbe92dc5,0xbb9c9614,0xbb8735f7,0xbb322f08,0xbaa4e9ab,0x3af452ea,0x3b41f3f9,0x3b7c00ec,0x3af5088f,0x3af15621,0x3b8e7ea1,0x3b73245f,0x3b6eb8a7,0x3b07ae9d,0x3b310c02,0x3a8ee73c,0xb9acf2d2,0xbbe2b952,0xbc1163a6,0xbc112ef0,0xbc367d5e, +0xbc461c7d,0xbc5accbb,0xbc54a0f6,0xbc30f171,0xbbac6ccc,0xbc258914,0xbc81d51c,0xbc8a8ac6,0xbc70f8d8,0xbc71bdf6,0xbc7a8523,0xbc4c665e,0xbc236d17,0xbbd9b1ef,0xbbb841fc,0xbb853547,0xbb4174b8,0xb8a31366,0x3b012582,0x3b45750a,0x3b99d39b,0x3bc625e1,0x3be6c814,0x3ba36524,0x3b845e46, +0x3b8e25d1,0x3b770e24,0x3b318192,0x3abd4208,0x3aae8bca,0x3ab90d55,0x3ace6464,0xba257845,0xbb6be2a7,0xbb913b4e,0xbbcd6144,0xbbf36343,0xbc16baeb,0xbc2d0564,0xbc3f219d,0xbc5153f4,0xbc74aab5,0xbc709281,0xbc80ea47,0xbc64d035,0xbc4c05eb,0xbc29af42,0xbbf8fe04,0xbba66e9e,0xbb0cd889, +0xbadc3b77,0xbab0d228,0xb98dece9,0x3a02b48c,0x3b1cc6aa,0x3b7cae0e,0x3b6d144b,0x3b8432da,0x3b902113,0x3b793907,0x3b93d23d,0x3b115317,0x3a8de9fa,0x3a16f5b5,0x39a172cd,0x3a42d595,0x3ad7b9d5,0x3b4807d3,0x3ad8521e,0xb9f43ba3,0xba56f4f9,0xbb3ea900,0xbb24c620,0xbb6e5b82,0xbbc67c5b, +0xbc25f7f8,0xbc522349,0xbc59429f,0xbb83a560,0xbbb0d0b6,0xbbacf3b6,0xbba29fb0,0xbb9b484e,0xbbb803fd,0xbbb5caf0,0xbbb28733,0xbb988b4d,0xbb525e60,0xbb1d3d5a,0xbac79a65,0xba939aa9,0xb9854add,0xba5bc80d,0xbaa19ef9,0xbad8c092,0xbb125b42,0xbb24849f,0xbb030c7d,0xbb0fc758,0xba7ec6f1, +0xb9d65596,0x39838fdd,0x3926eebb,0x39dde7e7,0xb9ca8297,0xba68b237,0xbaae2eaf,0xbacdd45e,0xbb499ca6,0xbb369e96,0xbb62b4b4,0xbb0402a8,0xbb032770,0xbb79abea,0xbb1b5dac,0xbb2dff40,0xbb15f792,0xbaf1e273,0xbaa59639,0xba52f5b2,0xb978bf5d,0x38e498d6,0x39a3ea11,0x39840681,0x39ace332, +0x3a0c7834,0x3a463a22,0x3a8ba5db,0x3a7391cc,0x3a754f9e,0x3a8df5b7,0x3a959aef,0x3a7a32d5,0x3a6a47c9,0x39239ded,0xb9ae89ce,0xba6dff4b,0x3982c369,0x39105535,0x3912c021,0x397783b2,0xb8e3b08f,0xb9a45f15,0xb9d3f986,0xba36f04f,0xba823f6c,0xbab490f5,0xbada3203,0xbb3f8bc8,0xbb2ee52e, +0x392f0f73,0x3afa2302,0x3aafb88f,0x3aad6919,0x3a7afc48,0x3a46a38f,0x39c27875,0x3a0e693f,0x3a4329db,0x3a9ae051,0x3a8bc348,0x3a979001,0x3ac99e01,0x3a151daa,0x39bcfe27,0x39b12230,0x3a4734e7,0x3a8a0ca5,0x3ab4eda5,0x3ab07ff6,0x3aac5e4e,0x3a96adc1,0x3aab2d66,0x3aac42ca,0x3ad73e46, +0x3a8880ff,0x3acba123,0x3b0f6f02,0x3b1d597a,0x3b1de542,0x3b08d70e,0x3b0ce1ee,0x3afe497c,0x3ad68665,0x3ad65100,0x3ac46bb9,0x3adb5634,0x3ac0423a,0x3b1aa80c,0x3b378524,0x3aef7bf8,0x3a1c82ab,0xba49201c,0xba2cc05c,0xb8e4ffea,0x3abbe0a2,0x3a80bba2,0x3aa5371f,0x3b1ecf48,0xb9bd2959, +0xbac417b2,0xbabfd63b,0xb9fcb90e,0x3a3f5e10,0x3adbec43,0x3ae6a3df,0x3ae18a80,0x3ab1886d,0x3af78edf,0x3adcd131,0x3a73892f,0x3aaf68c0,0x3ae95ce4,0x3b44dce5,0x3b9bf6f6,0x3ba3eb26,0x3b5e870c,0x3b675221,0x3b2a3747,0x3b080fd3,0x3b3b0a2b,0x3b3031e6,0x3b0e9587,0x3b11e73a,0x3ae83e27, +0x3b5317b4,0x3aa1616b,0xb991fdaa,0xbb4028e4,0xbb25de3c,0xbadaf655,0x3ad986e0,0x3ab017af,0x3aa96af0,0x3b70c945,0xbb272cd9,0xbb841e2e,0xbb57e791,0xbab81591,0x39c686b6,0x3b2892be,0x3b14fab6,0x3b152a83,0x3ac3b45b,0x3aec9a18,0x3ad07005,0x3a0a1a34,0x3abe65a1,0x3b1c449a,0x3b95c5a0, +0x3bd7d1a9,0x3be3b041,0x3b9f3280,0x3b95a719,0x3b80ca72,0x3b0029ba,0x3b5cefbc,0x3b552a25,0x3b08ae4d,0x3b1545d7,0x3b5e6bcf,0x3bc47ec1,0x3b4753f3,0xba38a72a,0xbb9e2aa5,0xbb9d5b92,0xbb6051b8,0x3ae2d7ad,0x3a6a5a7b,0x3a818b36,0x3bc0957c,0xbb860fc9,0xbbe0b7b3,0xbbed8b8d,0xbb7101f4, +0xba3b4673,0x3b1fb718,0x3b154487,0x3b0b4187,0x3a6e7c76,0x3b0fe85b,0x3adb38ba,0x3aa3da7d,0x3a967e32,0x3b527ed9,0x3b9ae555,0x3c21933d,0x3c2ffdec,0x3bd359e1,0x3bd99a89,0x3ba7c017,0x3b3c98ef,0x3ba1692f,0x3b82572a,0x3b2b09ba,0x3b47be0c,0x396cd1fb,0x3b6413da,0x3ace20da,0xbad1a243, +0xbbe670a7,0xbbfea4c7,0xbb9d17b5,0x3b042f9b,0x3af80207,0x3b175f5c,0x3bc6a595,0xbba9671f,0xbc1a385b,0xbbf6c4b1,0xbb9a98c1,0x394bbde3,0x3b6fa66c,0x3b46bd7d,0x3b2ead2e,0x3a6aa023,0x3ae19412,0x3b03a849,0x3b749ab4,0x3b765644,0x3b84d977,0x3b818148,0x3c1b52d6,0x3c36f7ad,0x3bcadf4d, +0x3bd619ed,0x3bb61091,0x3af36753,0x3b8c5b67,0x3b9e1e1e,0x3b2e2fc0,0x3b251022,0x3c4f5e29,0x3c6598d4,0x3b82028a,0x3b24af66,0x3bc65e42,0x3c921bd7,0x3c8babdc,0x3a7c1851,0x3abb6807,0xbbf8c2af,0xbc5173f0,0xbc587bab,0xbb6ab1a1,0x3c9a0537,0x3c313025,0x3c0d74e0,0x3c014171,0x3bdc4c27, +0x3bcf8ede,0x3bc4e0d5,0x3bc97aa2,0x3ba86d98,0x3ba4fc47,0x3b34382b,0x3b5cc01b,0x3c31d163,0x3aaa9541,0x3b20598f,0x3c408937,0x3c7bd641,0x3c4e496f,0x3b574af4,0x3ae5f018,0xbb76cd07,0xbc1afd96,0x3b6420ee,0xbc4a3ab0,0xbca43e0d,0x3b638042,0x3bb7e98c,0xbbfe09be,0xbb37c54b,0xbad19ff2, +0xbb5f6a57,0x3b8c2f00,0x3be1e0a6,0x3b704fc2,0x3a7c1a1e,0x3a257587,0x3bf59c42,0x3c173d02,0x3c3f9523,0x3c306aa5,0x3bb60fc1,0x3b8279d0,0x3b83afaf,0x3b0adf14,0x3b25d1f6,0x3b41637f,0x3c0474b5,0x3bfee9bc,0x3b844ca4,0x3c158e99,0x3c1fc147,0x3c239d1c,0x3b806d60,0x3b7e6098,0x3c05c985, +0x3ba68845,0x3b9c1a73,0x3c0366c8,0xba1f61ce,0xbc0f64cf,0xbc2fe2cd,0x3c171acc,0x3c46645d,0x3beaca16,0x3b2b14a0,0xbb6cc844,0xbbf4493e,0xbad7c5fc,0x3b4ce8a1,0x3bcefc56,0x3b699206,0x3b87c9bd,0x3b810170,0x3b635c07,0x3b60f7a5,0x3bdc3281,0x3ae23899,0xbb01bb7b,0x3921457a,0xba9764e0, +0xba10fb97,0xb9064326,0x39e29c2a,0x3b491053,0x3bb37c84,0x3b9d0135,0x3bb281c9,0x3bac2a65,0x3b329349,0x3b52b4ab,0x3ae47ca5,0x3bc484d0,0x3c02e3d5,0x3bbe0089,0xba2de9be,0x3bf7f2b2,0x3c30c177,0x3c41adbf,0x3c29d539,0x3c04ce71,0x3a3ffa17,0xbaf46dfc,0x3aa092b5,0xbb64774b,0xbaac61b4, +0x3bad64f5,0x3ab9e1d5,0x3a2e9c11,0xbb0fb337,0xbb172d81,0xbad26820,0x3b944943,0x38ffaefc,0xba01b4d2,0xb9f5937c,0xbaff6775,0xbb128e39,0xba01a473,0xbb0a75db,0x399d1203,0x3ba96ded,0x3b59353c,0x3b697c14,0x3b10b1e0,0x3b80cb12,0x3b5df0c2,0xbb0f8479,0x3b995d02,0x3bc346d6,0x3afd1517, +0x3bbd9443,0xbb46820f,0xb89ee2cc,0x3b11872a,0x3b97aada,0x3bc49634,0x3c164df0,0x3c3cff39,0x3c2b5b5a,0x3b4041a2,0xb787518a,0xb99cff43,0xbbb2ba9f,0xbb86dc5d,0xbb07a376,0x39bc1cd4,0x3aee06ea,0x3bace48e,0x3bb22852,0x3bbd4eab,0x3b879863,0x39f6a493,0xba03a3f6,0x3a8ea099,0x3aa6ff6b, +0x3a8a4741,0xb9812d1f,0x3b448129,0x3b3422a1,0x3a79b5e7,0x3a874a9d,0xb898aadf,0xbb96f5c1,0xbbce97f9,0xbbd148ff,0xbbe3f7fb,0xbbb5a273,0xbc18834b,0xbbb10c3f,0xbb9e0a80,0xbb6a53aa,0x3b0f6442,0xba60fc40,0xbbb3bec1,0xbc2b9186,0xbc405d3a,0xbc3493c2,0xbb610077,0xbb6c3159,0x39add805, +0x3a7bbad0,0x3ae090e8,0x3ab175ef,0x398f5b99,0xbab67692,0xba92fea8,0x3aac0636,0x3959320c,0xb83c219a,0xb5d867ce,0x3a81023b,0xb8ccbab4,0xbaf73e0f,0xbab056f2,0xbab97634,0xba987c91,0xbb29e581,0xbbae261e,0xbc2f8e39,0xbc67e33b,0xbc93797b,0xbc8b5efb,0xbc664988,0xbc28ccb6,0xbc1062ea, +0xbc0c0b2e,0xbc196748,0xbc40875a,0xbc2b16e1,0xbc0c0536,0xbbf4740e,0xbbc4a123,0xbb9b2eb2,0xbb7bec6b,0xbb876c3b,0xbb429e72,0xba40816d,0x3afcc238,0x3b276836,0x3a8d84ae,0x3a2fbb36,0x3a90a26d,0x3b6c47c0,0x3b4ac36f,0x3b4faba2,0x3b0e3ca7,0x3b242e7d,0x39e7b441,0xbb48ac14,0xbc09eaa3, +0xbc2123d4,0xbc1526e7,0xbc353da2,0xbc48f644,0xbc676047,0xbc766753,0xbc54c744,0xbbfdbf19,0xbc1e8057,0xbc4575c5,0xbc526796,0xbc43ec35,0xbc53ac1d,0xbc79263a,0xbc46bf5a,0xbc334f7e,0xbc15dc7d,0xbbef1713,0xbbb3f039,0xbb839c9c,0xb9e8147a,0x3b1044eb,0x3b8bb8bc,0x3b89898d,0x3b8a0431, +0x3b582a30,0x3b44530a,0x3b354c1e,0x3b6d29ab,0x3b7b62c2,0x3b4bd976,0x3b37f2dd,0x3accb6d1,0x3a78b459,0xba1b0ed5,0xbb280274,0xbbbbda61,0xbbe3637f,0xbbf6719c,0xbc012a66,0xbc0d2e12,0xbc28011e,0xbc2f7c42,0xbc34e1ea,0xbc3aa870,0xbc5807d0,0xbc5b6f09,0xbc490b77,0xbc3d5017,0xbc2520b8, +0xbc0d4083,0xbbde809b,0xbb8faec0,0xbb578e33,0xbb062260,0xb9f6a11e,0x3a841b71,0x3b4b9b19,0x3bb460a8,0x3b8e71a7,0x3b85a11a,0x3b7687d3,0x3b78b27a,0x3b92bd50,0x3b5e9c65,0x3b2cc284,0x3b021f99,0x3affa986,0x3a75596e,0x3a40d606,0x3a699aae,0xba170436,0xbb6ab717,0xbb855269,0xbbaab869, +0xbb72727a,0xbb7b254b,0xbba9ce7c,0xbc0cd00a,0xbc2a09ff,0xbc3f155b,0xbbc6750c,0xbbff7c35,0xbbda8055,0xbbb6f2f2,0xbb8e431f,0xbb76173e,0xbb296e36,0xbafc87ce,0xba890471,0xb9241a1d,0x3a1aad49,0x3ac67748,0x3b0447f0,0x3b40eb2e,0x3b269062,0x3b129e1e,0x3b0bef9a,0x3ad1111f,0x3aa0d955, +0x3ab7b7fb,0x363fd551,0x3971444a,0xb8d0825d,0x38b69eee,0xb9ed8727,0xba531b1d,0xbabbd24c,0xbacc6769,0xbae6e717,0xbb2b9f07,0xbb9bfe0a,0xbb9b905e,0xbbc42f3c,0xbba156ee,0xbb9c498b,0xbbd1cfbe,0xbb0a0a61,0xbb3def75,0xbb1d005f,0xbafe3965,0xbac4fb5e,0xbaa88a48,0xba6a86fe,0xb9fd5b2e, +0xb952fc31,0x3860ee80,0x39abb581,0x3a18419c,0x3a656298,0x3aa548a3,0x3a901ee7,0x3a93f0da,0x3a9ebd7f,0x3a9c26d9,0x3a8b7924,0x3aa062f7,0x3a50d777,0x3a32147a,0x3a060e65,0x39d2f245,0x39f481c8,0x3a73b0cf,0x3a805d74,0x39f19e00,0x38fe1a3e,0x3955066f,0x3930cd11,0xb7c9a717,0xba5674b9, +0xbab76fea,0xbac66d70,0xbafc0cc8,0x385b4ad6,0x3a69f0a7,0x3a4cc48f,0x3a725422,0x39be60de,0x38ef5e1b,0xb954c322,0xb8ceef94,0x38aed3a9,0x3a129441,0x39cbd3ae,0x39e8545f,0x3a45016e,0xb92cf1d6,0xb9d9e963,0xba12cad5,0xb8a86956,0x39889a47,0x3a409961,0x3a503d61,0x3a514385,0x3a1d6463, +0x3a35f102,0x3a2f2b7f,0x3a5f70e7,0x39b79653,0x3a6acb87,0x3ae4229f,0x3af1d343,0x3af140f9,0x3acfadc3,0x3ad4cfb5,0x3abb236e,0x3a8a7225,0x3a97278b,0x3a81cce1,0x3a9557fa,0x3a73be86,0x3b21af81,0x3b3f2f16,0x3a96574c,0xb986a2ae,0xbab69d04,0xbadf5257,0xba989790,0x3a3f6525,0x38a4cf65, +0x3903ae39,0x3a84c288,0xbaccf2c1,0xbb3c6de1,0xbb57f196,0xbb1345f2,0xba4abbac,0x3a55225d,0x3ab36172,0x3ac65c36,0x3a64c4d3,0x3a987341,0x3a334fdc,0xb9b9aeec,0x39f6e1c3,0x3a93ea84,0x3b34e35a,0x3b82824b,0x3b8cfab2,0x3b39e197,0x3b462782,0x3b0fa495,0x3abc82e3,0x3b2a1d34,0x3b1c9c39, +0x3adb6a09,0x3b10eaef,0x3afd3d73,0x3b82f23c,0x3a3e718a,0xba9493f9,0xbb587f7c,0xbb60d4b1,0xbb342dcd,0x3a7737e2,0x393d02ec,0x38b79d49,0x3addc426,0xbb78cd9a,0xbbbc1c8e,0xbbb9bfbb,0xbb758fa1,0xbac9a687,0x3ad695ab,0x3b09c5d0,0x3b1e8db0,0x3aae629c,0x3a9f08f8,0x3a0e6e0d,0xba9049e6, +0x39b98038,0x3ad88861,0x3b94c8fd,0x3bc59949,0x3bca54dc,0x3b9c2f9a,0x3b8c0b93,0x3b72c5bc,0x3ab8a8e3,0x3b605336,0x3b694c01,0x3af47197,0x3b139d29,0x3bac0948,0x3c053ae7,0x3b25ba06,0xbadd7ea0,0xbba00fb5,0xbbc6bbfa,0xbba30618,0x3ab0ef66,0xb9cb50d2,0xba2a7e54,0x3b44ad57,0xbbbe849c, +0xbc154748,0xbc3335f5,0xbbf2337f,0xbb664fcf,0x3ab2f296,0x3b39720e,0x3b4a2f07,0x3a9b7bb2,0x3adc0f93,0x39b25282,0xbaaf1765,0x38f9906c,0x3b37fb89,0x3bb86bd0,0x3c2129f9,0x3c30b932,0x3bd9ee9c,0x3bdab8de,0x3bb49b80,0x3b238902,0x3bc38b4f,0x3b9e3ba4,0x3b2b69cb,0x3b90440d,0x3a7f6857, +0x3bc31bb2,0x3ac02963,0xbb232639,0xbbdaa6cc,0xbc09e516,0xbbbd4eaa,0x3a9602b0,0x39955c67,0x3a20d5f7,0x3b43618a,0xbbd6c0f9,0xbc3b893c,0xbc3296e1,0xbc0bfa5e,0xbb347060,0x3b2e67ce,0x3b683529,0x3b7318eb,0x3abf401a,0x3acb9794,0x3a5077c1,0x3a08427e,0x3b1cbda2,0x3b7f71f9,0x3bacfc0e, +0x3c2b668b,0x3c451e73,0x3befd9bf,0x3bda5041,0x3bba6cf8,0x3b0c4de7,0x3bad43d6,0x3bd35549,0x3b44bb8e,0x3b2eb131,0x3c9fb72b,0x3c7fb96d,0x3b418655,0x39c808bb,0x3ac6b0fc,0x3c809387,0x3c75c60f,0xbb44ceb3,0x3b12dafd,0xbbe3c9de,0xbc85e09c,0xbc866e28,0xbc015b62,0x3c612505,0x3c1fd57e, +0x3c0e1a0e,0x3bed8331,0x3bcea307,0x3bb89481,0x3bce454d,0x3c0248f2,0x3bdc644f,0x3bc86eb1,0x3b3d9b19,0x3b1fbbb6,0x3c1565b5,0x3a39102f,0x3b590ef6,0x3c7e571b,0x3c6583c1,0x3c1ac761,0x3b697966,0xba4a510d,0xbba7e793,0xbbc8a82b,0x3c3132ae,0xbcc96c79,0xbc800d20,0x3b1305a9,0x3bc8a176, +0xbbda40b8,0x3a1bccb3,0x3a041532,0xbba0ff96,0x39942b8c,0x3b34517e,0x3bc8b52f,0x3a3369cb,0xba1c80fa,0x3b88a32c,0x3c03dc29,0x3c398910,0x3c289321,0x3b8d9fcb,0x3b2b92fc,0x3b7605dc,0x3ad46a07,0x3af14692,0x3b2e3751,0x3bb95ec0,0x3bbd70d8,0x3b6aa6a0,0x3c212ce1,0x3c2e21e5,0x3c175af8, +0x3b8383b0,0x3b8cff8e,0x3c1378a7,0x3b91c71d,0x3ba20389,0x3c7a36af,0xbc51ba35,0xbbe9eedf,0xbb00844f,0x3c4702df,0x3c580aaa,0x3c0296f3,0x3ba44f00,0xbb3fdc71,0xbc13b974,0xbbe67a4c,0xbb249ef6,0x3be54ebc,0x3ae6e9b4,0x3b714e60,0x3b8a0fe4,0x3b8c7b9c,0x3b80df79,0x3ba12370,0x3a534346, +0xbb337b5c,0x3a29c068,0xba61c33f,0xb8371e72,0x3a32c5fd,0xb91e45da,0x3b41b37c,0x3ba71f10,0x3ba6ae04,0x3bbc4c43,0x3b8f9bf0,0x3b64aa5b,0x3b68277b,0x3ab867a0,0x3bcbeeb7,0x3c05856e,0x3c180cea,0xb9fe256d,0x3c45aa0e,0x3c5ea969,0x3c5eeb7a,0x3c268a0c,0x3be7747b,0x3af1d606,0xb9feaed4, +0x3b7c0120,0xbbad6767,0xbb8e037c,0x3be02228,0xb8efa030,0x390d42bd,0xba812e58,0xb9d8c98b,0xba0c95b5,0x3b55fd91,0x39383fbc,0xb9ec0390,0x38bb7018,0xbac4cb7e,0xbad495e9,0x39c650cf,0xbafa3497,0x399b8ae7,0x3ba04065,0x3b58e69e,0x3b782dba,0x3b18f5aa,0x3b8fb092,0x3b6ef73a,0xbac6d120, +0x3b85dd25,0x3bcbb878,0x3b366ce7,0x3c246916,0xbbfcd364,0xbbaaa80e,0xb97816e8,0x3b8eedfd,0x3bd34eec,0x3c3d330c,0x3c6f4768,0x3c787ba9,0x3bb0aef3,0x3ad1f15b,0x3b994a77,0xbb9d7f6f,0xbbacaf5d,0xbb22e8e7,0x3a87a02f,0x3b14f4c4,0x3baeb2c1,0x3bbbbf8b,0x3bc244ac,0x3b8e67d8,0x3a15e93d, +0xb9f2d9c1,0x3a7966f2,0x37100ea9,0xb8ecd275,0xbaa416d3,0x3b43dce5,0x3b5b46b3,0x3ab1354d,0x3ae832e5,0x39927626,0xbb926e52,0xbbb43c48,0xbbbe1ecb,0xbbe6d951,0xbc13a072,0xbbb68ce6,0xbb840b36,0xbb08cc05,0xbb1282de,0x3ab32d26,0xbb018e37,0xbbfedaa2,0xbc75db99,0xbc3287af,0xbc14f692, +0xbb4201e4,0xbabd4016,0x3a2b4455,0x3ac04acc,0x39ab1b19,0xb92a0445,0xbaac9000,0xbae1f62d,0xba786151,0x3a3718f0,0x38280677,0xb934cafa,0xb96a27e7,0x3a2a61ad,0xb916c7ad,0xbb679d6f,0xbae597a6,0xbb124c16,0xbb255fb5,0xbb609a4d,0xbbacb647,0xbc182427,0xbc33cc69,0xbc685f4f,0xbc4258fb, +0xbc2aa5e9,0xbc12198c,0xbbea9951,0xbbe55bc8,0xbbe1ffc1,0xbbf70547,0xbbcefeba,0xbb91e35a,0xbb8cf4ba,0xbb4c67bb,0xbb32861c,0xbb574369,0xbb61e12c,0xbb087838,0x3a0f540d,0x3af503a7,0x3abcd19d,0xb9084341,0x39553bec,0x3a54070d,0x3b3f4a03,0x3b2bc2a5,0x3b2e2587,0x3b25f426,0x3ade544c, +0xba431a65,0xbba55d63,0xbc0faab6,0xbc1ec797,0xbc11d733,0xbc31f529,0xbc4f8584,0xbc7a58e4,0xbc845667,0xbc6d7754,0xbc379d1c,0xbc1d52ea,0xbc0f2b5f,0xbc15dcb1,0xbc146c7f,0xbc266cc6,0xbc44cfb3,0xbc2b314c,0xbc2bb72c,0xbc1caf5c,0xbbf4cc3a,0xbbbf85f6,0xbb9cc4c5,0xba8e987c,0x3ad3cd18, +0x3b919348,0x3b5167b8,0x3b0c73b9,0x39d46d3b,0x3a97ac5a,0x3accb0ed,0x3b1f9b16,0x3b4f824e,0x3b54d5c0,0x3b808d43,0x3ab2bf28,0xb94bb8f2,0xbb5469d9,0xbb9a4087,0xbbfc922b,0xbc195b1d,0xbc138925,0xbc10ae1d,0xbc0e53dc,0xbc25d1a6,0xbc20f2fa,0xbc1b6ede,0xbc08ae94,0xbc39c3c2,0xbc3592c5, +0xbc265de7,0xbc21ee36,0xbc15c11b,0xbc06d19f,0xbbe3eb7a,0xbbb5cee4,0xbb8ebbfe,0xbb358ca2,0xba91894e,0x39d19c33,0x3b126f4f,0x3ba11e42,0x3b750301,0x3b60380a,0x3b39c30f,0x3b576dce,0x3b77456d,0x3b7b86bf,0x3b60c715,0x3b3fd98c,0x3b4e907c,0x3a638a5f,0xba11a979,0xbb0abde5,0xbb5d43b7, +0xbbd9e148,0xbbeb35a1,0xbbf2e825,0xbbb0c9d6,0xbba2ccab,0xbbaf0361,0xbbea053b,0xbc035d27,0xbc2210cd,0xbc086cc7,0xbc1544cc,0xbbfbf7bf,0xbbcc3b88,0xbb8d5da2,0xbb55f8e9,0xbad195a1,0xb9deb21b,0x39e38446,0x3a593ea1,0x3abb1205,0x3b196c43,0x3b431ca8,0x3b7c522a,0x3b6df08c,0x3b60b702, +0x3b6f3bbc,0x3b5ef387,0x3b475caf,0x3b514a92,0x3aed0181,0x3a4ebfd3,0xb9afaeab,0xba55184c,0xbabd76d2,0xbb07d49c,0xbb2e1962,0xbb27c9e9,0xbb3d5b27,0xbb8bb48b,0xbbdb32bc,0xbbe766a3,0xbc0a7b06,0xbc0420f5,0xbc0279d7,0xbc0ee583,0xbb2a20e8,0xbb57cca1,0xbb3bbed9,0xbb1f2c5c,0xbb0bc1a6, +0xbb04ad98,0xbae346c3,0xbaba9a44,0xba9fe8b5,0xba585220,0xba018332,0xb99e1ede,0xb898c5aa,0x398c922d,0x39545ea6,0x399cec22,0x39a2621d,0x39921642,0x39a057a3,0x39fab39e,0x39a79d02,0x39cfed57,0x39f92dd3,0xb986fe36,0xb9a1b83b,0xb68b47a1,0xb88cfd68,0xba185006,0xba7616f4,0xba40110a, +0xba0e6674,0xba3168c4,0xbab4b4ca,0xbae9381b,0xbad4c8ed,0xbb157413,0xbaa09095,0xb6eb1be2,0x394f8062,0x39cd592b,0xb966ad8c,0xb9f7ab3e,0xba38e030,0xba2f240b,0xba00f3fd,0x38272c11,0xb9567de3,0xb9435021,0x385980ae,0xba2d5562,0xba719628,0xba9b01e9,0xba40f7cc,0xb9d8f9f8,0x38d0e2bb, +0x398e82c6,0x39a5d69b,0x38e16e48,0x391e9dba,0x38d0e318,0x3916dd8e,0xb97cb2c5,0x398cc8ef,0x3a9d25b6,0x3a9fc8ac,0x3a9ec56e,0x3a878537,0x3a8c6bae,0x3a654055,0x39d0ff9f,0x3a318c93,0x3a01ef41,0x3a0d8fa8,0x39e06b8b,0x3b2ba754,0x3b3f26cd,0x39ed529b,0xba830655,0xbaf2c40e,0xbb282173, +0xbb03914d,0x3991817c,0xba1befb7,0xba36a10e,0xb92fb2f6,0xbb0bab94,0xbb5f6002,0xbb8d2d68,0xbb619367,0xbb015b44,0xb8db42d8,0x3a73d9ae,0x3aa11f39,0x39c1968a,0x39b526f3,0xb9ad927f,0xbaabb5a6,0xb9b82940,0x39de4711,0x3b17829f,0x3b49d512,0x3b650c5b,0x3b0f85c6,0x3b2519b6,0x3af5287c, +0x3a430728,0x3b13b8d7,0x3afb1583,0x3a7adac8,0x3afc5948,0x3b04a17c,0x3b7eee90,0xb7a65b1e,0xbb013432,0xbb69ee14,0xbb88dc6a,0xbb6b0916,0x3a17fa5a,0xba5f1cd9,0xba525dd6,0x384d8b4a,0xbb7d26aa,0xbbc3b3dd,0xbbddf39c,0xbba99c82,0xbb45dfe5,0x39e1d987,0x3aec9b7a,0x3b1b215c,0x3a8faa67, +0x3a0c75c3,0xb9f77604,0xbb0704cd,0xba3b1b85,0x3a4b0ed4,0x3b89c22c,0x3ba8c403,0x3ba81cd9,0x3b92f79c,0x3b81b829,0x3b5f78a6,0x3a266359,0x3b56343e,0x3b669a19,0x3a9c74c7,0x3b006d8e,0x3bde3951,0x3c1afd90,0x3ad300b3,0xbb21671a,0xbb9ae3cf,0xbbe69962,0xbbc43b84,0x3ac29106,0xbaa20832, +0xbace299a,0x3a08dd70,0xbbbfec9d,0xbc154829,0xbc4b5215,0xbc1d8549,0xbbb80e06,0xb8c8a0c3,0x3b488e9d,0x3b70d1ad,0x3aa4c5fc,0x3a5651c1,0xbaa046fd,0xbb464925,0xba88d8ea,0x3b016ad0,0x3bc0c889,0x3c17c959,0x3c2a25fa,0x3bd04ad3,0x3bdacfe7,0x3bbfbeff,0x3b05eb94,0x3bd65f14,0x3ba793aa, +0x3b050985,0x3b9fd5c8,0x3ae6a6e0,0x3be07f21,0x39e8dfe8,0xbb581e95,0xbbd1314a,0xbc0ee538,0xbbd483fd,0x3a6b9b4c,0xba9c825a,0xba298ac1,0x3a359a14,0xbbc1aeee,0xbc2fe976,0xbc43efdc,0xbc2c7c4e,0xbba46cd8,0x3a82d555,0x3b779a84,0x3b901a2a,0x3ae2943b,0x3a9841d9,0xb9f808c5,0xbaf9076f, +0x3a545a45,0x3b5f5277,0x3bc67ed4,0x3c331176,0x3c4dd631,0x3c046c69,0x3bdb52e8,0x3bba4d9c,0x3b041de4,0x3bc62256,0x3bf44112,0x3b260b8c,0x3b317b6f,0x3cc5c4d8,0x3c8233bd,0x3b4c8ba3,0xba8e0ef0,0xbb89bd1f,0x3c464d21,0x3c43b1fd,0xbbc5ac0f,0x3b2e718f,0xbbc564c5,0xbc98d0ce,0xbc8edcc9, +0xbc2dc11a,0x3bdd0138,0x3bfe224a,0x3c044ec7,0x3bc13675,0x3bc2fc3d,0x3bac2e59,0x3bbd8aa8,0x3c0ccf8c,0x3bf1385f,0x3bd7b769,0x3b4d4711,0x3ade41f0,0x3bee147b,0xb927d064,0x3b73763e,0x3c9a6829,0x3c434a24,0x3bcdc283,0x3b636acc,0xbb873bc7,0xbbdc9a2f,0xbb37651e,0x3c884d74,0xbd02c01b, +0xbc4ea77d,0xbb13ca43,0x3b8787d4,0xbb751515,0x3b60d311,0x3b00de23,0xbbe7afb1,0xbb91e905,0xbabb0201,0x3c00e83b,0x3a5b9136,0xba878163,0x3b11d6d8,0x3bd5b6fc,0x3c2348e7,0x3c14427b,0x3b4f5c94,0x3accb145,0x3b557998,0x3acd35de,0x3ae05559,0x3b281a61,0x3b73a78d,0x3b83b3c3,0x3b5d6851, +0x3c22c2bd,0x3c31c4d7,0x3c0501df,0x3b8989df,0x3b8c2b78,0x3bfacea7,0x3b9a8961,0x3bc05758,0x3c9b3ea7,0xbca900df,0xbb56fecd,0x3bb65589,0x3c520986,0x3c4f32e6,0x3c1d8ce6,0x3c057723,0x38781074,0xbc1a18ac,0xbc2c761c,0xbbe42d93,0x3be9453d,0x398a8ec8,0x3b42111e,0x3bbe0335,0x3ba77fd3, +0x3b860845,0x3b10c6fd,0x3896bc45,0xbb471b79,0x39ab3707,0xb95315d1,0x3a0def99,0x3aad439e,0xb9939fc7,0x3b3f5164,0x3b97af9c,0x3ba7fd70,0x3bb5ee52,0x3b628aaa,0x3b85830b,0x3b869a9e,0x3ace9843,0x3bdc15b2,0x3c0b1b24,0x3c3bbe11,0x3a888c5c,0x3c7460b6,0x3c748564,0x3c5d4a95,0x3c19f08e, +0x3bd8a99f,0x3bac4f42,0x3b7633a1,0x3b7412d6,0xbb9aaf1e,0xbba15462,0x3bc8a268,0xba01ec65,0x3a133d42,0x3abde769,0x3b1b4679,0x3a9b1bb7,0x3a7c1845,0x38434a4c,0xba217657,0xb7d2e512,0xba8ab16e,0xba88488f,0x3a09623e,0xbab47b8d,0x39f9b721,0x3b8a6e75,0x3b3d8e3b,0x3b66b51a,0x3b2bafa0, +0x3b917f8f,0x3b879574,0x3a1b9b02,0x3b876231,0x3bcd3c08,0x3b851d05,0x3c53ad44,0xbc3fa497,0xbc1962c2,0xbb2c8bc8,0x3b84e8ef,0x3bdbe858,0x3c4d9522,0x3c81367f,0x3c8b7d31,0x3c01a754,0x3b8fccd0,0x3c005c20,0xbb327bd3,0xbba10f74,0xbb2c2448,0x3adf32b6,0x3b48680d,0x3ba42cb6,0x3b9b99c9, +0x3b93d9af,0x3b79d463,0x3a410ed9,0xb93c8b65,0x395c9014,0xba5d5a63,0xba663610,0xbb04ef2e,0x3b1e9dea,0x3b4b19dc,0x3ace0d13,0x3ae2e4aa,0x38ddd032,0xbb75c4e3,0xbb84744c,0xbb8421db,0xbbb945c3,0xbc316070,0xbb0c330c,0xbb028148,0xb8ecb3f5,0xbb1a1fb2,0xb989c087,0xbb2f9c67,0xbc06c237, +0xbc83405f,0xbc0add84,0xbbd09984,0xbb35599b,0x3a1c2c8d,0x3acad428,0x3b091e0e,0x39b0641a,0xb75d9f71,0xbaba8b07,0xb9ee45a5,0x39d9e3db,0x3a090599,0x394513a9,0x37128b4c,0x38923faf,0x39aaed70,0xb9e823b1,0xbb8c9d11,0xbb3716f4,0xbb6fbb21,0xbb80249a,0xbb79f052,0xbb9129b2,0xbbdb4af5, +0xbbebe327,0xbc24fe10,0xbc1929ad,0xbbdd852c,0xbbef8172,0xbbbe234a,0xbba46770,0xbb7e0aec,0xbb27ae8e,0xbb43cb57,0xbaae7afa,0xb9d0fbbf,0xbaec5266,0xbaf60dc5,0xbb02e543,0xbafe9d9c,0xb9c61d38,0x3ae5e38c,0x3a956763,0x396f0627,0xba5d8496,0x37fbe35a,0x3a287472,0x3b0bc51e,0x3afcbeaf, +0x3b047850,0x3b431437,0x3994d385,0xbb175460,0xbbcc55b5,0xbc083b41,0xbc1561d2,0xbc10d331,0xbc314ce1,0xbc546513,0xbc81c4a9,0xbc872348,0xbc77088c,0xbc5badb5,0xbc123ebe,0xbbc218e9,0xbbc4954d,0xbbc345aa,0xbbe67574,0xbbf87e9a,0xbc0141ad,0xbc114b9e,0xbc08c0e9,0xbbe419ce,0xbbb1ad92, +0xbb827d8c,0xba9a5698,0x3a48ea39,0x3b4fdc3d,0x3ae99c48,0x3a1f9a0f,0xb9df996d,0x3a12a8ef,0x3aa8c11a,0x3b077d38,0x3b3489ac,0x3b4f83f9,0x3b86b0f2,0x3a065675,0xbb062a17,0xbbca18cf,0xbbe60ab4,0xbc199306,0xbc3636b8,0xbc29e1e5,0xbc24a4e5,0xbc214ae0,0xbc2a692c,0xbc1ab836,0xbc094a31, +0xbbc73fdb,0xbc1ce8ee,0xbc08660f,0xbbfbac6d,0xbbfc3bcf,0xbbfba8ad,0xbbe8a75c,0xbbd2e513,0xbbcf6300,0xbb96c6e6,0xbb43597f,0xbaca30d1,0xba6af449,0x3913e37d,0x3b043caa,0x3ae41420,0x3af81556,0x3acc8c68,0x3b0f7588,0x3b2f02c0,0x3b6021e7,0x3b4c9a38,0x3b2fd6ea,0x3b404027,0xb88e26be, +0xbb1cd06e,0xbbb0a240,0xbbc7ba4e,0xbc1051dc,0xbc1679f3,0xbc116052,0xbbeb57ce,0xbbdb136a,0xbbc5944e,0xbbcf0069,0xbbc8f1b6,0xbc043b41,0xbc13549d,0xbc06853e,0xbbebcf36,0xbbbe6256,0xbb7b21d4,0xbb47eb3a,0xbabc88c8,0xb90b4ff7,0xb477f23c,0xb97a3a7f,0x388a8c06,0x3a4b7380,0x3ab23d5c, +0x3af57cf7,0x3ade0cdd,0x3ace471d,0x3af08a87,0x3af0811b,0x3ac03e2c,0x3ae5948e,0x3aba5163,0xb9169a6f,0xbab35c2d,0xbb0b20e9,0xbb152b59,0xbb2b3392,0xbb57cfc2,0xbb52e266,0xbb7d9606,0xbbb28506,0xbbef1ddb,0xbc0adee2,0xbc18ca38,0xbc1b37da,0xbc1f7d20,0xbc11a689,0xbb3de9df,0xbb55da35, +0xbb48d909,0xbb312b17,0xbb2664b0,0xbb22e4ea,0xbb17483f,0xbb0b5754,0xbafc8bed,0xbac6573c,0xbaab417d,0xbaa745ce,0xbaa103df,0xba876179,0xba6e8b81,0xba43c448,0xba3e61aa,0xba330f46,0xba06ac55,0xba02bb71,0xb9d4b3d9,0xb991d8fd,0xb8bfef3f,0xba86d948,0xbaa012a3,0xbaa39a46,0xbac06c03, +0xbaf083a3,0xbb0b8bd3,0xbb01dd98,0xbae374b8,0xbae63fd7,0xbaffd2e3,0xbb066bce,0xbb0b7d93,0xbb32ba6e,0xbb17b2ad,0xba4cfbf5,0xb9c8a675,0xb9161248,0xba42fd08,0xba7dc319,0xba904bb3,0xba951168,0xba7ca9ae,0xb9ca9263,0xba305d37,0xba308643,0xb9f60194,0xba749d25,0xba9b235b,0xbaca9b96, +0xba9d31ca,0xba7be62b,0xba0ab715,0xb978cd19,0xb916f3d1,0xb9a914c9,0xb9c31aec,0xb9e8b29e,0xb9ed181b,0xba4cb18d,0xb9ba5721,0x3a225c02,0x3a122335,0x3a10e4bb,0x39f3fc56,0x3a005c13,0x399b75e8,0xb98cd9ab,0x391e7165,0xb800a9e2,0xb9309457,0xb919960f,0x3b160ffb,0x3b1e91f0,0xb9568676, +0xbacc88b3,0xbb0a9188,0xbb523844,0xbb306989,0xb9547b31,0xba9b9cb7,0xbaa59d8a,0xba735c05,0xbb0bb80c,0xbb549a76,0xbb95b13b,0xbb8402b9,0xbb390805,0xba8b77e6,0x39ba0738,0x3a4a594c,0xb9249edf,0xba04d068,0xbaa59f11,0xbb02354b,0xba953721,0xb999bac0,0x3ae50ff7,0x3b057bd7,0x3b24c180, +0x3ac8bca3,0x3b01892c,0x3ad13220,0x388cfd7c,0x3ae9c074,0x3aab6613,0x348ac339,0x3ab4ee8b,0x3ad0b70f,0x3b4312d3,0xba616132,0xbb2ef777,0xbb6cdfdc,0xbb9a965c,0xbb8a8d7a,0x397a1deb,0xbacfe491,0xbaa8695d,0xba51153d,0xbb421771,0xbba5361d,0xbbde944e,0xbbbc33dd,0xbb84ce67,0xba8c6cee, +0x3a96fa39,0x3b008da0,0x3a33c18d,0xb9703e31,0xbab08132,0xbb2902a2,0xbadf63e7,0xb93ac3d3,0x3b757a63,0x3b821562,0x3b7e5e0f,0x3b842c01,0x3b6ad6ca,0x3b44ce4a,0xb9393f3b,0x3b3f7fe2,0x3b4a10fe,0xb88bcf22,0x3aa4f945,0x3bdecf14,0x3c113472,0x3a2b3aa5,0xbb4528ad,0xbb8bdab6,0xbbfa46bb, +0xbbdcd5ae,0x3a9f12da,0xbb01265f,0xbafdb3bc,0xba41a9c3,0xbb932610,0xbbf246e1,0xbc449582,0xbc294fe8,0xbbe42f13,0xbaf27ba2,0x3b284406,0x3b68e7b7,0x3a805df9,0xb972e5ba,0xbb2d55f3,0xbb7db91e,0xbb0e85a5,0x3a4e4b83,0x3bbc6e04,0x3c03c88a,0x3c19a911,0x3bbc756b,0x3bda0355,0x3bc6f12f, +0x3ac7e84a,0x3bd9f716,0x3ba0deb6,0x3a63558d,0x3b91c635,0x3ac62850,0x3bbaa2d1,0xba835dfd,0xbb83df63,0xbbbe15d9,0xbc0e7aa7,0xbbe4090e,0x3a3a7dae,0xbb0aac05,0xba94498f,0xb66ae558,0xbb66842a,0xbc03e45b,0xbc39d529,0xbc338cfc,0xbbda763e,0xbab52275,0x3b4f635d,0x3b8b62b9,0x3ad2e664, +0x39bc045b,0xbacf605e,0xbb5a0642,0xba50fe4f,0x3b255924,0x3bcf8afc,0x3c30e35b,0x3c4c1225,0x3c08dfa7,0x3bd926ba,0x3bb8d70f,0x3acf9a96,0x3bdaf57f,0x3c015296,0x3a83bc63,0x3b065fc7,0x3cd8d174,0x3c81755e,0x3b73cc45,0xbb2fa9a0,0xbc2277c6,0x3bef9002,0x3c011a16,0xbc094631,0x3b16d6fc, +0xbb9e8469,0xbc982c90,0xbc8c48e3,0xbc4a3e23,0x39d14193,0x3bb5a664,0x3beed0d1,0x3b9146ce,0x3bb3de49,0x3ba55595,0x3bae5cf9,0x3c04665e,0x3be0ce5b,0x3bc24aa8,0x3b511190,0x3a959a80,0x3bab8677,0xba83233a,0x3b6fe7c3,0x3ca8fc8d,0x3c1b9b77,0x3b5dd9de,0x3b2a535b,0xbc05ac3c,0xbc135979, +0xb958bafa,0x3ca468b9,0xbd0cc7c7,0xbc4e7cc7,0xbc118aab,0x3a1f7007,0x3964de33,0x3b9b125a,0x3b1e55d9,0xbbd3b9be,0xbbe9a643,0xbb8c042d,0x3c11d36c,0x3a81bb69,0xba8971dd,0x3a5d3d61,0x3ba81770,0x3c01998c,0x3bce0b93,0x3af5c7f9,0x3a3dccea,0x3b25002a,0x3b037b6e,0x3b11ce07,0x3b335456, +0x3b1f5a5c,0x3b37d9ea,0x3b73ec5a,0x3c1f6595,0x3c2db068,0x3bdf36b3,0x3b8f1e3d,0x3b8289c3,0x3bb6bf31,0x3bbc7522,0x3be58ab0,0x3c942eb2,0xbcc1b884,0x3a7f52e1,0x3c1fbe69,0x3c4e5a52,0x3c3943df,0x3c28d9d3,0x3c3e0abb,0x3b9066e7,0xbc29e1a4,0xbc418273,0xbc1c319d,0x3bb97285,0xb9825581, +0x3b423f43,0x3bd2d894,0x3bd63ea7,0x3ba32b62,0x38fb3f80,0xba083d26,0xbb44ca2c,0xba3dcbb5,0xb7b60f8a,0x3a887524,0x3ae71d8f,0x38c758a8,0x3b49314c,0x3b88286e,0x3ba18564,0x3ba4149c,0x3b32033a,0x3b8f8349,0x3b9648e7,0x3b41d067,0x3be4c8cb,0x3c050a58,0x3c2e60a8,0x3b4bad8a,0x3c81da33, +0x3c754e26,0x3c43096d,0x3c00b861,0x3bac86fe,0x3c1aff95,0x3c0d06e5,0xb7b89638,0xbb41eb3c,0xbb80d44e,0x3b4b17a6,0x39e6b0c5,0x3b14947e,0x3b703195,0x3ba7c228,0x3b6b99c0,0xb995231e,0xb89cd029,0xba67bfe1,0xba3e323f,0xbaa3eb25,0xba544233,0xb8c066d3,0xba4fcfd4,0x3a41e078,0x3b5ae1bf, +0x3b0985ae,0x3b311962,0x3b3c5c33,0x3b861b16,0x3b9834db,0x3b6f1f86,0x3b6fc968,0x3ba6c468,0x3ba0029c,0x3c6566b6,0xbc703826,0xbc351d94,0xbba4c0f4,0x3b31e65c,0x3bdb022b,0x3c32df59,0x3c636c53,0x3c7ddd16,0x3c2f5daf,0x3c0b1712,0x3c0e8045,0x3a116987,0xbb3dce0c,0xbb17ceea,0x3b0c23b5, +0x3b7b6cda,0x3b9a6d37,0x3b66a363,0x3b2f51d6,0x3b33a1f7,0x3a5fb68c,0x384ed09f,0xba6e993f,0xbae0c9a0,0xbac72755,0xbb1a353a,0x3aaade9e,0x3b05a25e,0x3aaaf830,0x3a79d3f9,0xba1a1caa,0xbb464fce,0xbb33a5de,0xbb22685e,0xbb7c6b7f,0xbc42bf4e,0x3aa69d31,0x3aeeed32,0x3a536669,0xbb66d7b5, +0xba831583,0xbb38b19c,0xbbd32bbc,0xbc4939f0,0xbbab43fd,0xbb88eb0c,0xbb6d6c00,0x3a7f9762,0x3af6d85a,0x3b21a12e,0x3a8c9611,0x3a3e9086,0xb98df976,0x3ac3ed51,0x3af99ad4,0x3a17cc4d,0x3946894c,0x386556f5,0x3a848e5a,0xb9c1341e,0xbab72d6c,0xbb87efa5,0xbb847473,0xbb9ef145,0xbb914e24, +0xbb5a03f5,0xbb401800,0xbb75ed34,0xbb6cd19c,0xbbcd8966,0xbbd057a3,0xbb3e8fea,0xbbdc810c,0xbba2013b,0xbb5e6ca9,0xbabbf9bc,0x396ab1ee,0xba4cb881,0x39eb6d42,0x3b026605,0xba9084a1,0xba86f4b7,0xb9606a23,0xb92fb182,0x3a991ef3,0x3b1e2500,0x395c8e16,0xb9aab49b,0xba478e72,0x3990f37a, +0x3a80c14e,0x3ad73ff1,0x3aef0cd0,0x3ad497a3,0x3b286bed,0xbaaabc92,0xbb744cd5,0xbbde3cfc,0xbbf22c67,0xbc092dbd,0xbc105d1c,0xbc30457d,0xbc52db98,0xbc7bc094,0xbc86c18f,0xbc7c08a6,0xbc67f042,0xbc12fbe7,0xbb7ccad2,0xbb6b6800,0xbb554097,0xbb889a8a,0xbb8450ef,0xbba445c9,0xbbd1be60, +0xbbcea923,0xbbc24fa9,0xbb9622fd,0xbb2b8730,0xba65f76b,0x392cd734,0x3aef51a7,0x3a0f9f7b,0xb98ede5f,0xb9410c31,0x3a35f0c3,0x3abf6141,0x3b07501c,0x3b24d6da,0x3b3143ac,0x3b524ce5,0xba4c116e,0xbb85255c,0xbc0a4ab9,0xbc12cad0,0xbc2a4aac,0xbc434c07,0xbc378c3e,0xbc343fb9,0xbc36d186, +0xbc31e192,0xbc1c6126,0xbbf5cfbf,0xbb9bab96,0xbbede488,0xbbb07060,0xbbb001e3,0xbbb76617,0xbbc724ef,0xbbbd5e38,0xbbb422a5,0xbbc64f0a,0xbb842ddf,0xbb383761,0xbb0127c3,0xbb086b13,0xbaf0a234,0xba89e67a,0xba010099,0x38080abc,0x3937fda8,0x3a2f5003,0x3a94316c,0x3b04cf9d,0x3ad969d8, +0x3aa7d597,0x3ac68fb6,0xbaceda22,0xbb8d7fe0,0xbc011f80,0xbc03f7d1,0xbc1f038b,0xbc23a818,0xbc19da29,0xbc0952f2,0xbc032f9b,0xbbcd876b,0xbbadbdef,0xbb8d8a7a,0xbbc367c9,0xbbfd1bf7,0xbbc81d01,0xbbbbef3f,0xbb9b7dbf,0xbb598ebc,0xbb4e61b9,0xbb0b7249,0xbab2d82e,0xbadc11df,0xbb03ede5, +0xbadbc3dc,0xba9081f3,0xba0990ce,0xb989352f,0xba1b5bc5,0xba57921c,0xba640dd1,0xba5d7064,0xba9cfa08,0xba8e5508,0xba29bbc6,0xbb06df44,0xbb420c16,0xbb65612b,0xbb438775,0xbb348f26,0xbb617f1e,0xbb5be888,0xbb87f814,0xbbb34b5e,0xbbcce8b3,0xbc03838e,0xbc0838d4,0xbc12077b,0xbc19b772, +0xbbf22a1c,0xbb4ec9b3,0xbb5b3bfb,0xbb5dc167,0xbb4fa015,0xbb4ac9be,0xbb4ae4d6,0xbb4357eb,0xbb3d70fa,0xbb2befa4,0xbb17f05f,0xbb15a30c,0xbb1a66f1,0xbb1e8baf,0xbb162338,0xbb084053,0xbaf78a65,0xbaf050c4,0xbae5e715,0xbaceb632,0xbadcd80d,0xbabb3d9b,0xbaa2f9f0,0xba6cde8a,0xbb086a80, +0xbb15328a,0xbb18972d,0xbb2f71e6,0xbb39038e,0xbb44b626,0xbb4484c7,0xbb35f07d,0xbb2d386d,0xbb1fe3c3,0xbb1e27aa,0xbb1c7b69,0xbb446344,0xbb7bec6c,0xbaad61c6,0xba4f83ce,0xba1bc3b5,0xba93fbf0,0xbaaa1f6b,0xbab0a975,0xbabc9b1b,0xbaa8673d,0xba3a2bdf,0xba835f4e,0xba8316e8,0xba4fc155, +0xba86349f,0xbaa4ad0a,0xbaddf562,0xbac0c6cd,0xbaaefca9,0xba852b89,0xba30c4cd,0xba0d4d5e,0xba274a00,0xba409e6a,0xba53e303,0xba609d0f,0xba95dd73,0xba4a4052,0x3947d9b2,0x37f77119,0x37e84f6b,0x3847ba10,0x384272b5,0xb90bd444,0xba4143fd,0xb9685a68,0xb9e9843a,0xba4ca515,0xba1a02ee, +0x3ae8e5c4,0x3ae15d85,0xba48580d,0xbb00d1c8,0xbb13c50c,0xbb60f937,0xbb42f819,0xba10b0f0,0xbaccf39f,0xbaccd7a8,0xbaa68287,0xbade16d1,0xbb2a99fa,0xbb8cc891,0xbb878018,0xbb5a2b2d,0xbaf0f407,0xb9a9ac86,0x392a85fb,0xba179ad3,0xba93650b,0xbaf75c64,0xbb1cb617,0xbadc5483,0xba5b1d35, +0x3aaac528,0x3a86801b,0x3ac96825,0x3a8ed770,0x3acbb5c2,0x3ab5f6b2,0xb9f3601d,0x3aabdf93,0x3a43488f,0xba69f9f8,0x3a61db2a,0x3a84cc18,0x3af75787,0xbadc5321,0xbb502376,0xbb656608,0xbb9e2f01,0xbb90db3b,0xb909fbe1,0xbb0852a0,0xbac31e6a,0xba850854,0xbacfdac8,0xbb66cc5b,0xbbca07e1, +0xbbbb8298,0xbb997066,0xbb1a62ba,0x3948b5f5,0x3a9bdfc8,0x39a0c334,0xba56201b,0xbaf875f9,0xbb3bc753,0xbb1b6c1d,0xba77a289,0x3b5f9b57,0x3b31047f,0x3b2b311c,0x3b7160d2,0x3b531f00,0x3b2cd50c,0xba403044,0x3b22c515,0x3b2022f8,0xbac231c0,0x3a06c395,0x3bc6fae1,0x3bf4993d,0xb9c75a35, +0xbb6d30fd,0xbb7bdd1a,0xbbf3e1f4,0xbbd7ba72,0x3a6e5b0a,0xbb1dab70,0xbaf76efe,0xba85d049,0xbb12e230,0xbb9ad35e,0xbc2b74d6,0xbc244ab9,0xbbfd17b6,0xbb59edf7,0x3aae5bd4,0x3b2fe1ed,0x3a242b67,0xba8d148c,0xbb678545,0xbb87ac86,0xbb4634cf,0xb9cee78e,0x3bb734c1,0x3bcfe2b7,0x3c0084e8, +0x3baad406,0x3bda83d3,0x3bcbdb78,0x3a726f16,0x3bd0104e,0x3b8f4252,0xba1f2f7f,0x3b763eb6,0x3a6ab069,0x3b84df70,0xbb2c65a7,0xbb9b2853,0xbba597d6,0xbc046922,0xbbe48e9c,0x3991e000,0xbb351c1a,0xbaa27c1e,0x39b46011,0xb9cff45f,0xbb96aab4,0xbc229f92,0xbc2c5c3a,0xbbfe354f,0xbb6604d0, +0x3ae49b5b,0x3b566011,0x3ab8958c,0xb9e2e7d8,0xbb0ea326,0xbb7ea6ff,0xbb08caf4,0x3ab778f6,0x3bd069fa,0x3c22cd98,0x3c3cb9f9,0x3c070299,0x3bd935c8,0x3bbcb874,0x3a97ff49,0x3be72810,0x3bf8b793,0xbaa90a01,0x3a8af5de,0x3ce01dec,0x3c748b02,0x3b794cb8,0xbb8f3d93,0xbc661b4a,0x3b357b07, +0x3b9bf3ef,0xbc090324,0x3b2ee6a3,0xbb4c135f,0xbc8b1761,0xbc835f2a,0xbc5441e0,0xbb8c7cb4,0x3b634ab3,0x3bcc65c8,0x3b552a4d,0x3b981a86,0x3b95332c,0x3babcdc7,0x3be32c9d,0x3bb57aa2,0x3b912a33,0x3b52f7f5,0x3a7f38e4,0x3b53cd18,0xbab5e89b,0x3b5d6adc,0x3ca53098,0x3bedf9da,0x3a8a1468, +0x3a4f9e58,0xbc45b3c9,0xbc319df4,0x3b258723,0x3cb514f5,0xbd0a999e,0xbc76f7af,0xbc6c25a3,0xbb180ad0,0x3ba6a63f,0x3b9b7d2e,0x3aaf284b,0xbb976f50,0xbc06e06b,0xbbb9d670,0x3c227fa7,0x3a3ac301,0xbac0a863,0xb78e22c4,0x3b723c0f,0x3bbf4261,0x3b5f4e11,0x3a73eea3,0x397c223d,0x3ad1da0b, +0x3b2a0dc1,0x3b4489ea,0x3b3f1c08,0x3aca13d8,0x3b047d4f,0x3b914166,0x3c15d5a5,0x3c20cf36,0x3bb62cc7,0x3b84b936,0x3b631bf2,0x3b93ee63,0x3bf6369e,0x3c03f151,0x3c560492,0xbcc47b85,0x3b8b7ca4,0x3c355d3f,0x3c43f696,0x3c19fec1,0x3c0fbe7e,0x3c64dccd,0x3c1012b7,0xbc2eb5f8,0xbc2f0bd2, +0xbc1f31e3,0x3b54d50e,0xb90184eb,0x3b6c1eb7,0x3bd5881b,0x3bf27a39,0x3bb68d70,0xba337f2b,0xba23e7aa,0xbb11ef39,0xbac31f71,0xb9a54c6e,0x3aa5ac06,0x3af67185,0x3a5df87a,0x3b5d4ffd,0x3b6970c5,0x3b969b2f,0x3b8b2015,0x3b0819c8,0x3b933790,0x3ba1e83a,0x3bac62e6,0x3bd88eac,0x3bd1da3d, +0x3bf0e3be,0x3b97f95a,0x3c77b8a6,0x3c5ea519,0x3c132abc,0x3bb73664,0x3b014ab3,0x3c4b647a,0x3c4e2bd4,0xbb7b41f8,0xb9b84865,0xbb0a455b,0xb8127fed,0x3afb3834,0x3b8fd35b,0x3bc6a014,0x3bcd1713,0x3b96d6f4,0xba0042a7,0xb830f5e4,0xba63eb00,0xbaaa3db6,0xbad0df6e,0xba51d486,0xba65f32c, +0xb959483b,0x3a78e75b,0x3b0f5299,0x3a941af6,0x3ad38c81,0x3b35ace1,0x3b732730,0x3ba3553c,0x3bd1a6df,0x3b10b737,0x3b28a485,0x3b9a1517,0x3c5a33d4,0xbc830487,0xbc315b8d,0xbbda605f,0x3a5ed671,0x3bcd8812,0x3be58659,0x3c10b6a1,0x3c309889,0x3c47dcee,0x3c3f97a2,0x3c132697,0x3b6bc675, +0xba303ac2,0xba03221e,0x3b1038f4,0x3b8610b5,0x3b8de44f,0x3b30bf69,0x3aaa0b5c,0x3aba7a3d,0x3a6e5edd,0x38b9355d,0xbb002f60,0xbb2f539f,0xbb0de91e,0xbb14bed0,0xb936801b,0x39f9b849,0x3a2762ec,0xb9a13ecc,0xbad0a47f,0xbb2d9194,0xbae6e61b,0xbab9baf9,0xbb08c49e,0xbc4a7674,0x3b9e1cec, +0x3bbfc7ed,0x3b0aa08f,0xbb563132,0xba8ac4b4,0xbb0600a0,0xbb3f97ef,0xbba51c16,0xbb267f9b,0xbb4deef1,0xbb98649f,0x39e28cee,0x3afb3252,0x3af2083b,0x3ad1a060,0x3ab018c7,0x3a671bf3,0x3b331898,0x3b27623f,0x3a1e574a,0x3888fa19,0xb81a8a99,0x3aee0a48,0xba8fc476,0xbb1e3939,0xbb6a3a01, +0xbb9f3df2,0xbbaad3f9,0xbb720fc3,0xbb0b9815,0xbaa7c9c0,0xba834400,0xb9ea3e0c,0xbb1f7ded,0xbae24fc7,0x3a974b9d,0xbbecb138,0xbb8f2a6a,0xbb2916d2,0xb9a2af89,0x39843c5f,0x39293c29,0x3a56a022,0x3b082875,0xb9a4f600,0x38e7ec6f,0x3a843c92,0x3a763e7c,0x3ae46aa3,0x3b2600bb,0xb93c2c2f, +0xb9c0ee05,0x399f2381,0x3a654d18,0x3ac9e8b0,0x3aca7373,0x3b1957c9,0x3abe2f07,0x3a895386,0xbb30ec7d,0xbb971d8c,0xbbd936cc,0xbbcde0bc,0xbbf5a568,0xbc0c15de,0xbc2a4353,0xbc49ad90,0xbc632c76,0xbc81d509,0xbc7ae026,0xbc6aa3f9,0xbc23c4bf,0xbb42a1fd,0xbb0517fd,0xbaba86f0,0xbb02c304, +0xbacff087,0xbb124608,0xbb61f181,0xbb878d57,0xbb8982d5,0xbb5941ca,0xbac570dc,0xb9ce432c,0x37b46206,0x3a91a5c6,0x37a3105d,0xb9e9d2d9,0x398aba50,0x3a7140fd,0x3ad6423d,0x3b0517fa,0x3b0b128f,0x3affa6fe,0x3adc8773,0xbb02558b,0xbbb27149,0xbc18034b,0xbc21c183,0xbc2e01fb,0xbc44a02e, +0xbc3b09a7,0xbc3ab723,0xbc415e63,0xbc35d0f6,0xbc20a250,0xbbe1507e,0xbb8ef2ef,0xbb9f3132,0xbb610d86,0xbb712696,0xbb7714c8,0xbb873f51,0xbb88507b,0xbb8540f1,0xbb946c3d,0xbb3d1229,0xbb116432,0xbafd5a23,0xbb1c5efb,0xbb277a8e,0xbb209328,0xbac8df1c,0xba792822,0xba0f9f91,0xb9a25cef, +0x38199f79,0x3a34ba5f,0x3893ff62,0xb9801673,0xb88d3687,0xbb3513ef,0xbbb31c43,0xbc102cfe,0xbc10427e,0xbc1bc0a5,0xbc232e38,0xbc165f94,0xbc1110af,0xbc0c6f13,0xbbc67b19,0xbb86524a,0xbb3b9b39,0xbb881cc7,0xbbbf6a52,0xbb93c291,0xbb961e74,0xbb8621e3,0xbb5f302a,0xbb6becd0,0xbb4edf8b, +0xbb48f64e,0xbb561286,0xbb56e624,0xbb33f1ae,0xbb0d1f28,0xbac233d1,0xba9ca116,0xbade5002,0xbb08b7f7,0xbb1d982f,0xbb20dc45,0xbb320265,0xbb3f15f1,0xbb2964b8,0xbb6895f2,0xbb885d03,0xbb8e4f59,0xbb62fe57,0xbb355536,0xbb576db4,0xbb44577b,0xbb7147ed,0xbb926575,0xbb8dd28b,0xbbc726d8, +0xbbcef01c,0xbbf2ef11,0xbbfef82a,0xbbbd722e,0xbb681790,0xbb6ec30d,0xbb762f1c,0xbb6da561,0xbb691244,0xbb6be39b,0xbb657018,0xbb617dbd,0xbb4faac6,0xbb46110f,0xbb4a91da,0xbb512d30,0xbb57c921,0xbb4fd5c6,0xbb434c4d,0xbb379aa2,0xbb34f8d9,0xbb30a8a7,0xbb293bef,0xbb2e540e,0xbb264b61, +0xbb1f82bf,0xbb0bea9d,0xbb4dbbb1,0xbb5fd598,0xbb663a37,0xbb801ca6,0xbb7cb004,0xbb80322d,0xbb8385cd,0xbb796aae,0xbb69c54d,0xbb4a579b,0xbb3fbb65,0xbb33d1e3,0xbb59170b,0xbbb35cb0,0xbacad0c9,0xba83b875,0xba68e141,0xbaa9b177,0xbab579c8,0xbab61376,0xbac3d2d8,0xbab4e0d4,0xba62eca2, +0xba943675,0xba9179dc,0xba658074,0xba709a8a,0xba9439dc,0xbad497c8,0xbac896d0,0xbac2aaad,0xbaa27068,0xba745347,0xba4c052f,0xba45194f,0xba745833,0xba898a24,0xba9c66f1,0xbaab4951,0xba84e0b9,0xb91db8cf,0xb9dfb608,0xb9db408b,0xb98b5b08,0xb9afe4df,0xb9fe6080,0xba884205,0xb9f761b5, +0xba3089dd,0xbaa8001b,0xba6c242c,0x3aa5f863,0x3a8a828c,0xba8de060,0xbb0ba73d,0xbb1a94ea,0xbb5bc3b4,0xbb3f04f3,0xba41e6eb,0xbad70d80,0xbac75dbe,0xba9d1cb8,0xba723e5c,0xbad9b123,0xbb6f5a52,0xbb7c5569,0xbb62598d,0xbb10415e,0xba6d9f58,0xb9d4babb,0xba430437,0xbac4cc2e,0xbb0fc268, +0xbb2cdcc7,0xbb022e84,0xba947315,0x3a85cbe3,0x393ec709,0x3a2bee34,0x3a76a9d0,0x3aa7affb,0x3aab6c80,0xba45de15,0x3a5fb1b9,0x398427da,0xbad4cd7a,0x39fa26ae,0x3a033605,0x3a30e223,0xbb0d1a6d,0xbb576c29,0xbb596d97,0xbb9360ac,0xbb8b5a72,0xb9fbdb52,0xbb1583d7,0xbab3872f,0xba4aeb82, +0xb5e90b0f,0xbae6ff4a,0xbba8cf6e,0xbbad7f04,0xbba0c4b8,0xbb46ba7f,0xba48dd1c,0x39b05c93,0x38ebc717,0xbaa0c83b,0xbb0ea44b,0xbb4c10a2,0xbb329497,0xbabbc384,0x3b520b0b,0x3acf2845,0x3ad97384,0x3b664119,0x3b41383c,0x3b1a59fc,0xba54e513,0x3b072382,0x3ae4b90b,0xbb3405ad,0x37913fff, +0x3bad319e,0x3bb902b6,0xba914ab7,0xbb7ef9fd,0xbb7ff9de,0xbbe08c41,0xbbc40b54,0x39fbb47c,0xbb1ee6d8,0xbab77c07,0xba306dcf,0x39d7f2c6,0xbae55159,0xbc093485,0xbc137ea7,0xbc00f145,0xbb8508c7,0xb92b25e8,0x3abfd0d1,0x39f5006d,0xbacc8338,0xbb7b252f,0xbb8a0fd2,0xbb64132d,0xbab214a1, +0x3bb66565,0x3b92ff60,0x3bc8419f,0x3ba4e956,0x3bdf2518,0x3bcee0ae,0x3a186b0f,0x3bb8ae16,0x3b6242b0,0xbb0aff8c,0x3b467022,0x39bd1a62,0x3b0150ef,0xbb701e1f,0xbb9e4694,0xbb8de6ef,0xbbe3705e,0xbbda22c3,0xb9d84a41,0xbb4b30b5,0xba7c0a5e,0x3a9415d4,0x3b380dd1,0xba8f76ca,0xbc05266d, +0xbc1d1b8c,0xbc07df30,0xbb9b7a9a,0x3894dd44,0x3afb4c6d,0x3abf80c4,0xba7d12b5,0xbb18842a,0xbb833cd4,0xbb41536a,0x398b8b33,0x3bcee26d,0x3c0b838f,0x3c22e3cc,0x3c030ff3,0x3bdd8f47,0x3bc69d76,0x3a94a387,0x3be9f1ae,0x3bdb28ef,0xbb7a959f,0x396fea35,0x3cd9d625,0x3c541229,0x3b61c715, +0xbbb62f0e,0xbc808624,0xbab0ab40,0x3b1adba2,0xbbb99222,0x3b613685,0xbaabeee1,0xbc69b2ef,0xbc7024c7,0xbc509f99,0xbbde0714,0x3b04d036,0x3bac2dfd,0x3b2c0ac9,0x3b68991d,0x3b6c143d,0x3ba505b2,0x3bb28524,0x3b81a434,0x3b2dfcb6,0x3b60f961,0x3a9d1a1f,0x3aa9e323,0xba9786b4,0x3b549a20, +0x3c8fd6e8,0x3bb4b49b,0xba02af79,0xbae913df,0xbc750a2e,0xbc3c3144,0x3ba9b46b,0x3cbb72b8,0xbd01e509,0xbc8fa864,0xbc8b45ad,0xbb670d10,0x3c2b34c8,0x3b9727be,0x3941c1f8,0xbb2e4fa5,0xbc0ddbf6,0xbbc77ab1,0x3c2f81f6,0x3a386d0d,0xbae21154,0xb804595e,0x3ae7144e,0x3b5bb0bb,0x3a7fb00b, +0x39b3c0da,0x39647ee0,0x3a6ece33,0x3b32a919,0x3b5bb1f4,0x3b39afbb,0x3a70c9d1,0x3acca821,0x3ba7968a,0x3c046753,0x3c0a0eee,0x3b8e04f1,0x3b4518cb,0x3b29a506,0x3b964a34,0x3c1fa6c2,0x3c126949,0x3ba87990,0xbcbfd657,0x3bb0ca0b,0x3c3deff8,0x3c27055a,0x3bcaa1f0,0x3bc8334d,0x3c55f458, +0x3c2c9c4f,0xbbedd130,0xbbfc520d,0xbc0608df,0x3aaddf39,0x39f58d46,0x3b931793,0x3be46d1d,0x3bf99aab,0x3baea789,0xba7ba7f5,0xba1b9642,0xbaa6f0d4,0xbaaebb0f,0xba125df7,0x3aa0aa8d,0x3adcb7dd,0x3ae08177,0x3b755808,0x3b3ace00,0x3b84e190,0x3b57b77c,0x3ab3e4c0,0x3b8d7128,0x3ba6ac01, +0x3bf306e3,0x3bb1d897,0x3b63d815,0x3b5291e4,0x3ba0e9b9,0x3c526811,0x3c39b431,0x3bb249fb,0x3b25acf9,0xbb1bd7b6,0x3c43d155,0x3c5abdb9,0xbb8b9fbd,0x3b48f5da,0x3a375434,0xbae9df45,0x3b5d2aad,0x3bc91004,0x3c05f6df,0x3bd0305e,0x3b949a09,0xba285209,0xb9c76e1e,0xba8f1d3c,0xbae90aa1, +0xbaedae9a,0xba6623b3,0xbab88fdd,0x399779e7,0x3a8e1f49,0x3a7dc974,0x3965cf45,0x3a23197d,0x3b0fc192,0x3b68e667,0x3baa13a4,0x3c0120c8,0x3823c73f,0xba48d748,0x3b660c30,0x3c36ceff,0xbc77a310,0xbc2ad453,0xbbebb2a4,0xba0e65ed,0x3ba9bc50,0x3b34cea0,0x3b4921cf,0x3ba4bca0,0x3c4399c4, +0x3c599207,0x3c159ca7,0x3bc592d8,0x3ac7afbe,0x3ad1e277,0x3b0d186b,0x3b79605e,0x3b6279e7,0x3af1239e,0x39544c8a,0xb9b41839,0x39f9338c,0xb99ae574,0xbb3b1ef2,0xbb6e5d8d,0xbb3ad5e4,0xbaf71bb9,0xbad4b07d,0xba8d2d31,0xb82d059b,0xbac69fb8,0xbb16456d,0xbb146c15,0xba04a13a,0xb8bb025d, +0xba83f8b5,0xbc4012f9,0x3bee03d0,0x3c0c5658,0x3ba4b1a1,0x38f81ebe,0x39bcfad6,0x39ea5474,0x3ae9e42a,0x3b4a737f,0x36b24c07,0xbb0a9e73,0xbba47060,0xba76ca17,0x3ac9d444,0x3a7bdfe6,0x3ac4fd9a,0x3ae505da,0x3aea401c,0x3b5256e9,0x3b315609,0x3a3ceaba,0x394e129e,0x3889268b,0x3af5e348, +0xbab40fce,0xbb418c3c,0xbb576ca6,0xbba5dc70,0xbb99c7b8,0xbb00bfe8,0xba55921d,0x374af483,0x3aa10fc0,0x3ae462aa,0x3a5058b6,0x3b1fdee9,0x3b8c8b16,0xbc0261b7,0xbb903061,0xbb434511,0xba2cd515,0xba83c364,0x386ca6d3,0x39d04893,0x3abe0b65,0x39e7360a,0x3a87bc7f,0x3ac36fce,0x3ae9a637, +0x3aef2d3a,0x3b0c7806,0x383ef660,0xb910bdaf,0x3adbeb02,0x3ac863c0,0x3afbec14,0x3ad005e0,0x3b38a811,0x3aa51c43,0xba70b289,0xbb7ea789,0xbba57220,0xbbbf41dd,0xbba7dff7,0xbbd7cf7e,0xbc034c5d,0xbc203aa1,0xbc3a61ff,0xbc428f8a,0xbc714e57,0xbc714bb7,0xbc6a1aec,0xbc357d65,0xbb40b234, +0xba8f5cb9,0xba0808e3,0xba46e113,0xb8d696b0,0xb958fa8f,0xba565847,0xbafbeaf7,0xbb017432,0xbac8ead5,0xb998f33c,0x3a060473,0x3a07725a,0x3a3aa361,0x399132e5,0x392a4573,0x3aa1cd05,0x3abf9750,0x3b06790c,0x3b172964,0x3ae7508e,0x3a9baacd,0xb7f91e75,0xbb3bf798,0xbbc5b373,0xbc10cac4, +0xbc209cc1,0xbc268aeb,0xbc3c93db,0xbc34b116,0xbc36694d,0xbc3da64e,0xbc3634cf,0xbc270aa1,0xbbe71d4c,0xbb9b9bc2,0xbb59788e,0xbb186170,0xbb1bfb74,0xbb0e1eb6,0xbb05a448,0xbb147d5e,0xbb15278a,0xbb1dc1a0,0xbab25eba,0xba90f95f,0xba88af8d,0xbae7ef3d,0xbb055374,0xbb0d3b89,0xba9a3780, +0xba22f0c7,0xb942d908,0xb90bfbba,0x390e2e03,0x39d15ba4,0xba3232c7,0xba928b78,0xbaa9b1bd,0xbb5addde,0xbbbaee2a,0xbc0a774e,0xbc0bc38c,0xbc0d76a8,0xbc1a9af6,0xbc0b9294,0xbc0fb2ae,0xbc0bb864,0xbbbeb816,0xbb5a5c76,0xbb1f7b6e,0xbb4eb67b,0xbb9665cb,0xbb658c93,0xbb770afb,0xbb714fdc, +0xbb68b868,0xbb75c751,0xbb69e3f7,0xbb772796,0xbb784a2b,0xbb6909d5,0xbb446a53,0xbb1b020e,0xbae1cb1e,0xbac03b15,0xbb02988b,0xbb1d1330,0xbb3398a1,0xbb37ab20,0xbb3ff407,0xbb4e6dbd,0xbb578ad0,0xbb7a4325,0xbb8be962,0xbb8cddbe,0xbb63ae69,0xbb2b8f7f,0xbb3ee90c,0xbb1e4b1c,0xbb397fd0, +0xbb4dd7c0,0xbb2440ac,0xbb7867f8,0xbb8e111f,0xbbbe7f76,0xbbc65b4f,0xbb92c341,0xbb65de10,0xbb5aead6,0xbb632e58,0xbb5a2871,0xbb535b84,0xbb5639af,0xbb51c957,0xbb4de4fb,0xbb40b951,0xbb3f0713,0xbb46a3e3,0xbb4ea72d,0xbb5607a7,0xbb4e8522,0xbb43ac11,0xbb3a0f62,0xbb393476,0xbb361b6f, +0xbb32b2bf,0xbb3212d0,0xbb42136f,0xbb4df2aa,0xbb50a1e1,0xbb6239e6,0xbb81e5fb,0xbb8eaa9a,0xbb9a5e45,0xbb94c33b,0xbb945c6a,0xbb9898a8,0xbb923b79,0xbb8a2545,0xbb60e64f,0xbb439ee4,0xbb4e4710,0xbb612df6,0xbbbb8c31,0xbacb34cd,0xba8c3c60,0xba85490a,0xbaabbc9a,0xbaacf3c2,0xbaa4d383, +0xbab53b06,0xbaadee76,0xba75706d,0xba942a9c,0xba8d9f84,0xba4f3a52,0xba3d88a5,0xba711c23,0xbabc9440,0xbac0c1cb,0xbac4d4b4,0xbaab12bf,0xba8af183,0xba6b35ad,0xba478729,0xba848a2a,0xba98055b,0xbab2c6cb,0xbaaf09d2,0xba8f1ceb,0xb99ddc06,0xba2e8fcc,0xba28ce96,0xb9c51e9c,0xba0ba8b5, +0xba291f53,0xba8d49a7,0xba1a3e46,0xba4794c0,0xbac90be3,0xba89a71d,0x3a5f7777,0x3a0094f8,0xba9ae501,0xbb08cb84,0xbb1407ed,0xbb4a8e08,0xbb321fa1,0xba846f2f,0xbad327f0,0xbaa8669a,0xba5b8eb4,0xb8d96591,0xba4126f1,0xbb4006cd,0xbb5f9272,0xbb5d0152,0xbb19ab75,0xbab258ad,0xba6595d4, +0xba540b54,0xbad80ae1,0xbb149da0,0xbb3487ec,0xbb087673,0xbaa20aa5,0x3a67d0fb,0xb9cef31d,0x381c4744,0x3a8cf471,0x3a9893e0,0x3aa80418,0xba40663f,0x39f6e715,0xb89e82be,0xbb01cbc4,0x39ae00bb,0x38a2aaed,0xb9ac8bfa,0xbb15d08f,0xbb47bd79,0xbb372703,0xbb7f913f,0xbb7effea,0xba820014, +0xbb1795b9,0xba8f311b,0xb94c5b50,0x3ab81e7e,0xb9343654,0xbb86560c,0xbb9bd0bf,0xbba1894c,0xbb609223,0xbad5d9cd,0xba053bd6,0xb8364b4e,0xbabc0ff8,0xbb170ca5,0xbb5e78d9,0xbb38eb23,0xbad5fe16,0x3b45b17b,0x3a51f863,0x3a8fb9d6,0x3b694fc0,0x3b33550c,0x3b0dbffe,0xb9df20c3,0x3ae23480, +0x3a9645e0,0xbb634f15,0xb972ca8b,0x3b91e5b0,0x3b731920,0xbaa72fd8,0xbb751069,0xbb70cd89,0xbbc6ab59,0xbbafb097,0xba08549c,0xbb1cddfb,0xba33a3f3,0x395bfd66,0x3b37a63d,0x3a666d40,0xbbd27978,0xbbfe5922,0xbbfc73b4,0xbb93bec3,0xbad79bbf,0x38e34c89,0x39a2d28c,0xbae824d4,0xbb790d29, +0xbb8d2894,0xbb69e029,0xbb02656e,0x3bb6c93a,0x3b3c75d4,0x3b96d432,0x3bb06701,0x3be69dc4,0x3bd076b4,0x3a2f6ac5,0x3b9a9a96,0x3b233f67,0xbb4253bd,0x3b2b098e,0xb91784d9,0xb9303ae9,0xbb7ce17e,0xbb8c9f01,0xbb473215,0xbbb54f92,0xbbc898ab,0xbac16795,0xbb54844f,0xba004827,0x3b0d32a5, +0x3bb2f774,0x3aff6d78,0xbbd2a755,0xbc0c4caa,0xbc0bcf1a,0xbbb81b96,0xbadb5209,0x39bb7db1,0x3abe638c,0xba8eb417,0xbb16e2a2,0xbb852320,0xbb5d8727,0xba28ccba,0x3bccb8d4,0x3be56845,0x3c066601,0x3c0180de,0x3be5e7d8,0x3bd1b885,0x3ad10b02,0x3be40ccc,0x3bb7f3f2,0xbbb83f41,0xb95d62aa, +0x3cc5b0e1,0x3c2b79bd,0x3b27cd24,0xbbcb63c1,0xbc817c17,0xbb99b67d,0x39da1e35,0xbadb3308,0x3b8317b0,0x39b6c4b5,0xbc20ecb4,0xbc5b9dd3,0xbc4f0662,0xbbf37579,0x3a493b27,0x3b8557d0,0x3b1dc341,0x3b18ce85,0x3b1001c2,0x3b814e0b,0x3b6ebfbd,0x3b1bd535,0x3a7ddf97,0x3b77af4a,0x3adab5ee, +0xba283075,0xb9b63834,0x3b65a9ff,0x3c5c1291,0x3b8d93c4,0xbaabddb1,0xbb8feda4,0xbc864517,0xbc32d5bc,0x3bf2c0cb,0x3cb71b30,0xbcec4bbd,0xbc95c234,0xbc8c3c7a,0xbb5a31b4,0x3c82de8d,0x3ba0d978,0x39758416,0xb9814666,0xbbfe03e2,0xbbb76a23,0x3c224f43,0x3a8f36b9,0xba9c3b40,0xba3667ae, +0xb9afe45c,0x3a0f1e18,0xbaa2ec18,0xb9835b63,0x398e7e5d,0x3a390e7a,0x3b17797b,0x3b42da36,0x3b26afc4,0x3a267339,0x3ac98523,0x3bb77ea3,0x3be158cd,0x3bdc53df,0x3b3face3,0x3abb892b,0x3adb774e,0x3bb36341,0x3c4784a9,0x3c1a85e6,0xbb649643,0xbcb8f250,0x3b9f1346,0x3c5452ed,0x3bf037bc, +0x3add59e3,0x3b46da19,0x3c055514,0x3c061c13,0xba7e677b,0xbb8d35b4,0xbbc9fe6d,0x39daf03a,0x3a93384b,0x3b9bdc67,0x3bd8cc7d,0x3befbf01,0x3b971c04,0xba483169,0xba3e5815,0xba738893,0xba1fa9ee,0xba072127,0x3a908c79,0x3aa7b800,0x3b240582,0x3b83d91f,0x3b13a8dc,0x3b58b84a,0x3b0e9b00, +0x3a2170c7,0x3b7b6426,0x3ba151c8,0x3c0cdb61,0x3b80046e,0x394f2e93,0xba5ec88a,0x3b6d77a4,0x3c1cdbc5,0x3c1c42de,0x3b0decde,0xba715697,0xbbe1a82c,0x3be7b90a,0x3c1e927f,0xba9bb9b2,0x3bc41501,0x3b6c5ddd,0xbb1fdaea,0x3b96fa23,0x3bef6612,0x3c0f8259,0x3bc1ca0a,0x3b87568c,0xb9a31dee, +0xba7e264f,0xbad01c72,0xbb0db740,0xbafea89a,0xba831ac8,0xbae0aa07,0x3a235c7c,0x3a8f7f90,0x36500ed2,0xba0e58a1,0xb9140935,0x3abecff9,0x3b69fca2,0x3baf0a4c,0x3c0224aa,0xbb115af1,0xbb88ac8e,0x3ad59f69,0x3c013bcd,0xbc4e2bc2,0xbc2c82b1,0xbbe4d720,0xbac9eb6e,0x3b74de46,0xba2476db, +0xba8cedd3,0x3a78d734,0x3c2d25c8,0x3c5d7d2b,0x3c0f9c80,0x3c008802,0x3b8342b7,0x3b51f5d1,0x3afb9854,0x3b3888d1,0x3b19e849,0x3a48f7f6,0xba385457,0xbb080cc1,0xba01edfa,0xba98ca0d,0xbb6089fe,0xbb925f9c,0xbb68a904,0xbac23d14,0xbb316201,0xbb10725f,0xba06d2e4,0xbb1517f9,0xbb166289, +0xbac1c825,0x3a8dc024,0x3ad21d53,0xba4770d6,0xbc1d4c46,0x3c0a2521,0x3c269544,0x3c0fb765,0x3bbd8267,0x3b6d3588,0x3b8399e3,0x3bcb9ede,0x3c202cf5,0x3b3e6478,0xba1322e0,0xbb9a5335,0xbb3bb616,0x3978feb3,0x392da498,0x3a920c18,0x3ae67235,0x3b08693f,0x3b4e7dfd,0x3b3629ce,0x3a62fd8f, +0x3a1f2236,0x39c7eb49,0x3a88663d,0xbab650b0,0xbb4911bf,0xbb5dc8f2,0xbb98572a,0xbb638601,0xb815b226,0x39c08192,0x3a52b22a,0x3b21f9f1,0x3b29c8dd,0x3b28ab1d,0x3b92b8e3,0x3bbf12a3,0xbc0ec19f,0xbbaa340d,0xbb90b83a,0xbb0b24b1,0xbb0813da,0xba03c7c5,0xb95e2a99,0x3a99b2ed,0x3a963c8b, +0x3af8eabe,0x3b15cc54,0x3b31bbaf,0x3afb8cff,0x3acac27c,0x39cd35c0,0x39d7786f,0x3b2b3596,0x3b0a51c2,0x3b0defa2,0x3adbd646,0x3b325029,0x3a40e6df,0xbb2470fc,0xbb9c2cbc,0xbbad2f3c,0xbb9fc549,0xbb888bbd,0xbbbc5e41,0xbbeb0d3e,0xbc12cdab,0xbc271f5a,0xbc21f721,0xbc569a4b,0xbc5c473e, +0xbc60ed32,0xbc3e9545,0xbb66e8b0,0xba7be462,0xba2644d1,0xba1a68c8,0x392bbecc,0x3a23418b,0x3a6b531d,0x398557dd,0x398a9943,0x39f9f58d,0x3aacbd33,0x3ad786d7,0x3ab91d7c,0x3a604c19,0x3a783032,0x3a99d094,0x3b23b11d,0x3b17211d,0x3b2ee970,0x3b3dfa6b,0x3acd9b05,0x39f06bac,0xbadd6fa0, +0xbb6385fc,0xbbc55a52,0xbbf6304c,0xbc137d02,0xbc1699de,0xbc2be4a3,0xbc27084d,0xbc2a91dc,0xbc31891f,0xbc348fb9,0xbc2db5f0,0xbc017031,0xbbb9b1f1,0xbb249bb1,0xbad97427,0xbac816d1,0xba846521,0xba005f11,0xba23ba11,0xba1d9076,0xb9c19578,0x38bab766,0x388d6417,0x389d7d3d,0xba2f94f9, +0xba60463f,0xba891704,0xb92653b0,0x39b936cd,0x3a356ad5,0x3a331309,0x3a852b29,0x3a7e5a81,0xba301291,0xbac26173,0xbb175122,0xbb689616,0xbbaed890,0xbbee3d2a,0xbbf8b840,0xbbf4f910,0xbc0f64f7,0xbbffea30,0xbc0a3586,0xbc0800dc,0xbbbeb620,0xbb5b72e9,0xbb41ed42,0xbb3c94b7,0xbb687189, +0xbb1a698a,0xbb32afea,0xbb442e03,0xbb57c163,0xbb64885d,0xbb670a76,0xbb7b9d9f,0xbb724cc1,0xbb55d140,0xbb36714b,0xbb10f840,0xbae1150c,0xbac4176e,0xbaff809d,0xbb12e530,0xbb214c56,0xbb24cacc,0xbb29af44,0xbb2955d6,0xbb4413cb,0xbb4fab4f,0xbb64bb64,0xbb6ca6f0,0xbb4cb173,0xbb1ff25b, +0xbb275df0,0xbb02f44e,0xbb06c85f,0xbb0bbd10,0xbab58afd,0xbb09d7e6,0xbb3c23d1,0xbb8c46d2,0xbb8ee972,0xbb508085,0xbb30efde,0xbb13c237,0xbb1e9a88,0xbb149838,0xbb0cc3e1,0xbb0d8dbf,0xbb0bc316,0xbb09dd80,0xbb0249b5,0xbb06f052,0xbb0edb8e,0xbb156314,0xbb1afca3,0xbb14b60f,0xbb0b5f2d, +0xbb045785,0xbb03a5da,0xbb0093ba,0xbafdea4b,0xbaf64625,0xbb20da1c,0xbb3eb655,0xbb574b28,0xbb3c3a2d,0xbb669eb2,0xbb88147a,0xbb91310e,0xbb8b31ee,0xbb8b4efa,0xbb8f12ca,0xbb89b434,0xbb84adc0,0xbb49cf42,0xbb1cd5c7,0xbb42366b,0xbb3d3f66,0xbb8cf59e,0xbab8afd0,0xba7ef34d,0xba83961d, +0xba9d65fa,0xba97327e,0xba87d5a8,0xba9af19f,0xba9b979a,0xba7acd78,0xba882ce4,0xba78bd4e,0xba1e294b,0xba071886,0xba37d585,0xba9d3bfe,0xbaae8c53,0xbabaa913,0xbaa84675,0xba8f07d5,0xba73bd3c,0xba419971,0xba814376,0xba95a5cd,0xbab62441,0xbaa19259,0xba838de6,0xb9a0d67f,0xba379a7c, +0xba2d6ed8,0xb9a30f63,0xba0f1b1c,0xba22178e,0xba686a1d,0xba0dcefb,0xba3711ea,0xbac4174f,0xba81985d,0x3a1d6461,0x38fee263,0xba904afd,0xbaf671de,0xbb03e4fd,0xbb343142,0xbb21d652,0xbaad7a71,0xbabebdcc,0xba7181ed,0xb9bf9965,0x3a1198a1,0xb78c80b0,0xbb12dacf,0xbb3f6e31,0xbb4f0774, +0xbb1dc16f,0xbad9f9ac,0xba9eb863,0xba65a3e0,0xbad91976,0xbb10fb47,0xbb3555f9,0xbb026a63,0xba99f7e0,0x3a5b4add,0xba331708,0xb9860df8,0x3ab810b9,0x3a98c885,0x3a9f3bd0,0xb9f96dcf,0x398706e2,0xb92e17a1,0xbaf7e5ee,0x39b64647,0xb8888bcf,0xba570655,0xbb09ac56,0xbb2835bb,0xbb097915, +0xbb5328f5,0xbb62436d,0xbad16f25,0xbb0bfad8,0xba304e18,0x3a11d3b6,0x3b1b1499,0x3a819056,0xbb493df0,0xbb8800ec,0xbb9c24a0,0xbb7326ca,0xbb17491b,0xbaa7644f,0xb99e2b95,0xbacf38fc,0xbb1e6cea,0xbb6f3add,0xbb30e163,0xbacfd049,0x3b36c953,0x39cbe204,0x3a5daa69,0x3b7a6e26,0x3b26a25d, +0x3b06df87,0x398238b3,0x3acbbee5,0x3a56b372,0xbb5ef3ab,0xb94af2b5,0x3b75f0ae,0x3b138f4a,0xba8a5a29,0xbb594821,0xbb4ef5fa,0xbbad4cfc,0xbb9e474a,0xbaf0e070,0xbb0bc01e,0x393f3518,0x3aa3e3ab,0x3b93777a,0x3b3696fa,0xbb99e281,0xbbd4a5c6,0xbbef624f,0xbba1b857,0xbb3ec9f7,0xba9aa89c, +0xb83e9706,0xbb016245,0xbb74eecd,0xbb922b8f,0xbb5fe8d4,0xbb1517c0,0x3bb5b624,0x3ae1ec93,0x3b64fb72,0x3bcb5975,0x3bea8acd,0x3bce858c,0x3a898e35,0x3b7fc212,0x3af9a023,0xbb48101c,0x3b23de94,0xb9652da2,0xbab85c29,0xbb608ccc,0xbb5faa80,0xbac8bf8e,0xbb890e51,0xbbb45743,0xbb323eb9, +0xbb49c0c8,0x392136ef,0x3b573ee7,0x3be9afbf,0x3b880d31,0xbb9a84fe,0xbbf33046,0xbc09916f,0xbbcecaca,0xbb55d895,0xbaa9958f,0x3a78e8ee,0xba96bee5,0xbb1c6197,0xbb8732c1,0xbb61a63c,0xbaa5d7d1,0x3bca57cb,0x3bb9b3b8,0x3bd8c1b9,0x3c044a4b,0x3befebc9,0x3bd87e0b,0x3b1ea1f6,0x3bd67d5c, +0x3b962bfb,0xbbcb3ea2,0xb9284c67,0x3ca68607,0x3c00c8bb,0x3ab7de4b,0xbbcf32ea,0xbc736d07,0xbbe6bfaf,0xba8e7f08,0x3b237fa3,0x3b98876c,0x3b00db95,0xbb97b697,0xbc4b0aba,0xbc5052e2,0xbbe5b1e4,0xba080ad3,0x3b2ce7c7,0x3b11b82a,0x3ab0e5fc,0x3a7e0f9a,0x3b153750,0x3ad9fbeb,0x3a73b698, +0xb9fde0d3,0x3b83d5fa,0x3b137325,0xbb1a33cc,0x3a77083c,0x3b899d1d,0x3c0ead3e,0x3b6a68d2,0xbada8c27,0xbbd0b99c,0xbc84ae18,0xbc154284,0x3c17d8da,0x3cab3b0e,0xbccd26aa,0xbc8a474c,0xbc7e6bcd,0xbb1695e6,0x3ca9d235,0x3bc0a2dc,0x3acfeacc,0x3b0bc952,0xbbcfdd5a,0xbba47264,0x3bfc676d, +0x3ac8deaf,0xb9a8dc79,0xbaee37ef,0xbafd7f61,0xbac85602,0xbb1ea905,0xba2aa732,0x38ca828c,0x3a259fde,0x3ac10e5c,0x3b01b14e,0x3b121a60,0x3a2efe88,0x3af9a4b8,0x3bbb4efd,0x3bbcbc14,0x3ba30c0d,0x3aa9d596,0xb91f0b27,0x3aa4f3b2,0x3be60f61,0x3c653e30,0x3c108b37,0xbc33645a,0xbcacaf4a, +0x3b66bb32,0x3c7a393c,0x3b8b4f8b,0xbb2e4e93,0xb9530600,0x3a89eb66,0x3b5e822d,0x3be762c5,0xbac6dda8,0xbb92005d,0x399ea987,0x3ac023d7,0x3b8ef6a5,0x3bb6a7d8,0x3bd1a8be,0x3b751d9c,0x3863ceb2,0xba4f3f6e,0xba7a0bfb,0x38fa3f08,0xb9658d91,0x3a88d1a4,0x3a7923dc,0x3b4b19a5,0x3b855c1a, +0x3afa2457,0x3b20e5ce,0x3a7b1ad0,0xb915c6b3,0x3b598279,0x3b940e5c,0x3c0c1f3e,0x3b2ba2fc,0xbb32b456,0xbb88ecf5,0x3a821c9e,0x3bb989d5,0x3c0b1688,0xb9baad3b,0xbb7a7313,0xbc3197ba,0xba2eed2d,0x3b55c3c8,0x3bb2dba2,0x3bf45efd,0x3bac3ada,0xbad75ff0,0x3bb16dd5,0x3bfe3d49,0x3c05ad52, +0x3ba4f57f,0x3b604ef3,0x39bfdfba,0xbabd7bf1,0xbb003a41,0xbb06a948,0xbae7838d,0xba7bb23a,0xbaeb6b6d,0x3a590da3,0x3a7731c6,0xba165bc7,0xba97d8b3,0xba38947f,0x3a6d67a7,0x3b6aeda9,0x3bae6110,0x3bd753b9,0xbb7e471a,0xbbd71608,0xb9305184,0x3b77a785,0xbc13cd51,0xbc2d0255,0xbbceb00c, +0xbb1c1e15,0x3b267fb8,0xbb286afa,0xbb39bcb7,0xba3a7b1d,0x3c0f8f8c,0x3c4ddbda,0x3c0bbb8e,0x3c19afa9,0x3bd2f84f,0x3b99b55e,0x3af05751,0x3aa97edb,0x3a858e96,0xb9ea9547,0xbace5edd,0xbb54796e,0xbadb37cb,0xbb177019,0xbb711a79,0xbba27d96,0xbb83b4dc,0xbaaebf1e,0xbb53381c,0xbb3342e7, +0xba4d3bcc,0xbb24caf7,0xbae5637c,0xba228d01,0x3b25bd46,0x3b4ede41,0xba4b76ba,0xbbcdd85a,0x3c0c0263,0x3c32340d,0x3c45f65b,0x3c40aa80,0x3bfd403c,0x3bf4fafc,0x3c18560e,0x3c5d8597,0x3bc514f2,0x3afdbd5b,0xbb5f04d2,0xbb800ae0,0xbaa488ef,0xba7954c1,0x3a3b050c,0x3acd5fcc,0x3b008a46, +0x3b31d0bf,0x3b2d33ae,0x3a88d1ac,0x3a807554,0x3a157026,0xb993f541,0xbacb4952,0xbb463807,0xbb6876ab,0xbb6df4ee,0xbae7ac00,0x3ac29be6,0x3aa40b73,0x3a8cb40e,0x3b27416a,0x3b1e7cfe,0x3b3c8a62,0x3bafc70c,0x3bc1c138,0xbc199851,0xbbbbe828,0xbbbcbfe1,0xbb6cd5bb,0xbb26ba30,0xba4624b0, +0xb99c3893,0x3aa5df0a,0x3af9db38,0x3b33fb38,0x3b5226af,0x3b5ec3b6,0x3b13f069,0x3ab1c332,0x3a77abd7,0x3ab13959,0x3b41e06d,0x3b27e01c,0x3b1b8850,0x3af9d58a,0x3b02ae60,0xb94d6a30,0xbb6b8afa,0xbba6c76b,0xbbac08e0,0xbb89e2c9,0xbb6804ed,0xbba42ce4,0xbbc70da2,0xbc0100a0,0xbc0fd242, +0xbc01e5a0,0xbc31191c,0xbc3b1d90,0xbc520c4b,0xbc3f8135,0xbb93a5dc,0xbab37887,0xbaa148d7,0xba88a3d9,0xba0d1dc1,0x3a0ea60c,0x3adfd88d,0x3afee844,0x3b12e28d,0x3b186fac,0x3b3c0073,0x3b284897,0x3b154401,0x3ad0630f,0x3ae527c2,0x3b0cbc2f,0x3b553ba8,0x3b403187,0x3b45277d,0x3b56f41e, +0x3ab91fac,0xb986e6d1,0xbb43523c,0xbb770e00,0xbbb396c3,0xbbbdb37c,0xbbfc653d,0xbc0254e2,0xbc16d017,0xbc168046,0xbc1c879e,0xbc240863,0xbc2e0016,0xbc2f089b,0xbc10790f,0xbbddfba1,0xbb0b4696,0xbac33d7f,0xbaa36810,0xb9ef52be,0x39c68256,0x39df07fa,0x3a026443,0x3a7c8566,0x3a7c1726, +0x3a747325,0x3a92e85a,0x3a1c073a,0x3a01a17a,0x3956da77,0x3a5b5636,0x3aa0c555,0x3abd6512,0x3ab766b7,0x3ae25d7b,0x3ad0b4e4,0xb9ac7b33,0xbacfbdda,0xbb40e2a6,0xbb61dafe,0xbb951cf9,0xbbb5dd73,0xbbcd0af4,0xbbcc0391,0xbc03990e,0xbbebf976,0xbc04f072,0xbc05ce3f,0xbbc770e9,0xbb7d78d4, +0xbb71ce4d,0xbb3caba6,0xbb1d9fb1,0xba9515dc,0xbacbf062,0xbb0b97c6,0xbb364e25,0xbb44adb8,0xbb512cfb,0xbb65f6d9,0xbb53bc75,0xbb323368,0xbb1f2dcc,0xbb02f1ae,0xbad4edd1,0xbab00810,0xbad3baa7,0xbae30883,0xbaed3c81,0xbaed9c8f,0xbaf01411,0xbad2f0fa,0xbb0d6ae6,0xbb0816d8,0xbb1630fc, +0xbb273973,0xbb24cfdd,0xbb0f3a7f,0xbb0f745a,0xbad96075,0xbaba6785,0xbabfaa27,0xba456bdb,0xba987d64,0xbaf20eab,0xbb3f9238,0xbb3c1af1,0xbb07458f,0xbabe5da4,0xba83f629,0xba9be892,0xba861953,0xba69a4be,0xba633fff,0xba6bdfcc,0xba769482,0xba680a5b,0xba80dcc1,0xba873c9f,0xba8a3e96, +0xba902487,0xba8886a2,0xba79edb2,0xba689957,0xba604a17,0xba55ab28,0xba558146,0xba3e4a69,0xbab51688,0xbafc64db,0xbb222d5c,0xbae81a15,0xbb185dcc,0xbb451e65,0xbb542a1a,0xbb4d5cc4,0xbb52e067,0xbb5b5aa4,0xbb5361d0,0xbb51cbc1,0xbb103770,0xbac02fa2,0xbb082d38,0xbae45b25,0xbb0d0de9, +0xba99bf54,0xba4816e8,0xba5aa672,0xba7fccf9,0xba6d0ccd,0xba4bcbab,0xba746de4,0xba81f17c,0xba6f4dc0,0xba626a6e,0xba3f6807,0xb9c0ab28,0xb99cb9f2,0xb9f53ee2,0xba68f217,0xba924633,0xbaa4c4c3,0xba9a8ffa,0xba8782f3,0xba6a5bf0,0xba34030b,0xba7860b4,0xba9282dc,0xbab79dd9,0xba8a1460, +0xba651b2f,0xb9aa3f07,0xba35020b,0xba24791b,0xb9694888,0xba0c35d9,0xba1612d7,0xba300373,0xb9f04c50,0xba0f6b4a,0xbaabc206,0xba5c700d,0x39c65299,0xb80de2f8,0xba5eb9f7,0xbacb7a49,0xbae71112,0xbb202f1a,0xbb11bf9c,0xbacaa361,0xba9a641d,0xba0298fb,0x3885de9c,0x3a7f4119,0x3a00bdee, +0xbac20923,0xbb1a25de,0xbb37b4f9,0xbb197756,0xbaec7a6a,0xbab8708d,0xba739ec1,0xbadc476b,0xbb0d4571,0xbb351e8e,0xbaee1181,0xba80d510,0x3a48037f,0xba456baf,0xb9ac9b0b,0x3ae08f2c,0x3a984134,0x3a9311d5,0xb928f12b,0x39495885,0xb8998f2d,0xbacc715c,0x39c5de72,0x382faefc,0xba549d76, +0xbace194b,0xbaf62991,0xbabf0bab,0xbb2b1d80,0xbb49535c,0xbb08e4b0,0xbae727b8,0xb921ecc7,0x3a9d6b04,0x3b3c63a5,0x3ae797ce,0xbaf6a643,0xbb60190f,0xbb8f3b2a,0xbb7926ec,0xbb352fce,0xbafcf26e,0xba3d7424,0xbaf77ca7,0xbb2c129c,0xbb800356,0xbb1f96a9,0xbaafa0b2,0x3b1eb4f5,0x398d799a, +0x3a595349,0x3b847894,0x3b194f02,0x3b009cd8,0x3a79e4c8,0x3aca483b,0x3a4777c0,0xbb36bea0,0x3920fc55,0x3b4e6b69,0x3abae9d0,0xba004d01,0xbb2b596e,0xbb331a82,0xbb9c3f07,0xbb93de0d,0xbb428910,0xbad76515,0x3a84d50e,0x3b040d35,0x3bae0137,0x3b805df1,0xbb3263e0,0xbba7a172,0xbbd88659, +0xbba7e892,0xbb7ce8fd,0xbb16848a,0xba200ec0,0xbb1a8025,0xbb770c1c,0xbb9d03ee,0xbb45bff2,0xbb0f0c46,0x3baeb990,0x3a8d08ea,0x3b398014,0x3bea7138,0x3be7f063,0x3bc7a212,0x3ac77bae,0x3b5ba189,0x3ae66c1b,0xbb2eec26,0x3b1e1f3f,0x39941e50,0xbacec864,0xbb181a6d,0xbb0b40d4,0xb916139e, +0xbb4c755a,0xbba22015,0xbb74cc94,0xbb2aea86,0x3a66be7f,0x3b84bb37,0x3bfee8e7,0x3bb7e972,0xbb268fff,0xbbc673b0,0xbc009a5a,0xbbda57f7,0xbb95933f,0xbb419e7a,0xb919cbac,0xbad941ef,0xbb3549c8,0xbb8ebc17,0xbb530402,0xbac26f96,0x3bc4f5be,0x3b98391f,0x3baf46eb,0x3c09cf27,0x3bfb0d7a, +0x3bdb3a50,0x3b5d8dc1,0x3bc6753d,0x3b772e46,0xbbbb3352,0x39cc22d3,0x3c799bb5,0x3ba239ba,0x380e621e,0xbbd01890,0xbc5ec82a,0xbc1433cc,0xbb30a689,0x3bb97606,0x3bae5f10,0x3b6a235f,0x39b3ee0c,0xbc3ad5b3,0xbc51db57,0xbbdc0132,0xbab35a66,0x3ae1b779,0x3b159839,0x3a975dc8,0x39fd66a2, +0x3a680945,0xb86eaeef,0xb94b52fd,0xbab3c447,0x3b8387ad,0x3b31bb29,0xbb67ad30,0x3b2bae86,0x3babb510,0x3b931ece,0x3b424974,0xbb03cdb1,0xbbf56d64,0xbc6f88d5,0xbbd9b9ff,0x3c29b47c,0x3c94a164,0xbca6b0ac,0xbc62fb10,0xbc549373,0xba57f236,0x3cc3c0b9,0x3bf95af3,0x3b789ab7,0x3b5f1270, +0xbbad1296,0xbb9a562f,0x3baaaf18,0x3b2d6ccb,0x3aa35ec8,0xbb3609cb,0xbb48a2a1,0xbb49ff70,0xbb382345,0xba98b419,0xba2b5c1e,0xb8ca85f2,0x397596eb,0x3a205eaf,0x3afdfec9,0x3a4afc7e,0x3b1bfb36,0x3baf59f5,0x3b98b919,0x3b580e27,0xb9db01c0,0xbaa37100,0x3ab45cd9,0x3c0d3e22,0x3c63b457, +0x3be0a729,0xbc7b5015,0xbc9a442a,0x3af28bed,0x3c924c53,0x3abd6010,0xbbc44a18,0xbb602b41,0xbbb19026,0xbacb8739,0x3c6e79fc,0x39f77355,0xbb59035b,0x3a2ee52b,0x3afb0677,0x3b81e093,0x3b8f63c6,0x3ba3f5d3,0x3b2acd57,0x3a9e4d2b,0xba2d9c5d,0xba4abf88,0x3a0d4e9f,0x38ac35a6,0x3a879739, +0x3a7b2559,0x3b5a69fe,0x3b74639a,0x3ae1eff0,0x3acc323c,0xb960e566,0xba588594,0x3b3d2051,0x3b7de90d,0x3bf03d86,0x3aeeab43,0xbb97ff91,0xbbbf0d08,0xbb0e9762,0x3af5bc6e,0x3c02af84,0xbafbeeba,0xbbbeaab2,0xbc6617c5,0xbc022f23,0xbb4947c6,0x3c5bbfe8,0x3bf6c200,0x3bb20010,0x3a641143, +0x3bb76ee7,0x3bf19cdd,0x3bf2e4e4,0x3b8b1f62,0x3b2e9874,0x3a789bd9,0xbadbe7ba,0xbb06eda4,0xbab8ce8e,0xbaab1c74,0xba3b6bcb,0xbad29737,0x3a703c86,0x3a2b2a70,0xba4d6aec,0xbacf6991,0xba8f94a1,0x3a28153d,0x3b5a3e47,0x3b9d01b7,0x3b830b35,0xbb93d48a,0xbbf04cde,0xbab9354d,0xb987790d, +0xbbaa536c,0xbc2fe699,0xbbbd45f0,0xbb53d0b7,0x3ac95cb2,0xbb34d987,0xbb0d1a2b,0xba12b432,0x3be1e43b,0x3c322e19,0x3c0e0c6e,0x3c2c7013,0x3c0583f5,0x3bb9b407,0x3b0acafb,0xb9321a92,0xba2e36f5,0xbaea1a17,0xbb28af3f,0xbb7b41e7,0xbb378e4e,0xbb5fafc6,0xbb79c9b7,0xbba35ee7,0xbb84eb81, +0xbab3bd49,0xbb4cb646,0xbb32e001,0xba826811,0xbb1f2074,0xba8a8e05,0x384f6e61,0x3b573b79,0x3b824782,0xba1cf17d,0xbb28ec42,0x3bfb96a9,0x3c1e555e,0x3c62b0bd,0x3c836a7a,0x3c2de3b4,0x3c210bf5,0x3c2fe1b7,0x3c6b4e88,0x3c04f654,0x3b90c0b8,0xba71e23d,0xbb5912b4,0xbaf196c2,0xbb100414, +0x3899d667,0x3aae2d04,0x3b0bc333,0x3b16f25d,0x3b17e013,0x3aac49f6,0x3a8af66b,0x39ecf4f9,0xbac5f58d,0xbb059af5,0xbb46eb13,0xbb6b95ff,0xbb0c86f5,0x39168f81,0x3b1bbdd0,0x3ae15b61,0x3a6c537f,0x3aeb8059,0x3b09bdb7,0x3b2edab7,0x3bbf3871,0x3ba60ecc,0xbc1badc4,0xbbc67eae,0xbbc77ed6, +0xbb8270d2,0xbb1373ef,0xb9942d18,0x39376b64,0x3ab54ceb,0x3b15e72d,0x3b4cfc8a,0x3b75eb46,0x3b67ecef,0x3b2cd45c,0x3acdb847,0x3ae0fb79,0x3b12b054,0x3b424db9,0x3b3ab9ae,0x3b1e0a65,0x3b066ab9,0x3a7740d7,0xbab5b769,0xbb8e90a3,0xbb9f14a4,0xbb9d5d29,0xbb803573,0xbb514d6e,0xbb8fccd8, +0xbb9f04d1,0xbbd5d102,0xbbe52a51,0xbbbfe88c,0xbc022660,0xbc0f2080,0xbc3c84da,0xbc353ff6,0xbbb45eaa,0xbafbfef0,0xbae6f3a7,0xbac80ebc,0xbad5af14,0xb83e31ed,0x3ae2896f,0x3b3ed053,0x3b65c537,0x3b62eaba,0x3b70282d,0x3b420ec7,0x3b3569ba,0x3b188cd8,0x3b22a3b6,0x3b3d25d8,0x3b584ef8, +0x3b455e3b,0x3b34cb66,0x3b3decba,0x3a7d6419,0xba7c90bb,0xbb76830a,0xbb75d8b9,0xbb968ce2,0xbb8d7f66,0xbbce4d62,0xbbdc4bad,0xbc0016e9,0xbc042056,0xbc0ccb7b,0xbc16f9a1,0xbc201d91,0xbc2970e6,0xbc1cb891,0xbbfee11f,0xbb0bbbec,0xbad9e7cb,0xbaba8799,0xb9fedee0,0x3a1d11df,0x3a53dc69, +0x3a695d4a,0x3ab85404,0x3a9931d5,0x3ab05703,0x3aefd37c,0x3ad8a5c9,0x3ae118a2,0x3ac342ed,0x3adf26fc,0x3af5b9b9,0x3afd119a,0x3ae53dbd,0x3aeab04c,0x3addf1bc,0xb8a37127,0xbac312f8,0xbb440584,0xbb48dcf7,0xbb6e4753,0xbb7e30dc,0xbba036ab,0xbba6c43a,0xbbec2bb7,0xbbd90f7c,0xbc0035c0, +0xbc03f4e4,0xbbd71ad4,0xbb9925a1,0xbb92ab06,0xbb483d5d,0xbab46148,0xb9364199,0xba15c49d,0xbaa928a0,0xbb0e0c96,0xbb1d18fa,0xbb2b7ec8,0xbb3b01eb,0xbb239626,0xbb07471c,0xbb0253d0,0xbadef054,0xbab9d5ed,0xba8813e6,0xba87d02f,0xba785469,0xba608862,0xba378151,0xba0c566d,0xb975aaa0, +0xba75103e,0xba59b67f,0xba861c1e,0xbab25da8,0xbae25099,0xbae71236,0xbae49cf5,0xbaa61361,0xba683cad,0xba81ce66,0xb9ab00b2,0xba39b120,0xba914916,0xbadffa43,0xbadb1b33,0xbaa40c4d,0xb9f259d3,0xb95cf25e,0xb9c9c8f0,0xb964de17,0xb894b0b8,0xb7d51122,0xb9014a98,0xb97f4344,0xb95af0f2, +0xb9855d27,0xb9457392,0xb8fd75ee,0xb8f3f7b5,0xb8c8bc2e,0xb8b61c04,0xb88aff24,0xb8205d40,0xb8255a65,0xb89ac1d4,0x38480f69,0xb9f22d49,0xba683190,0xbab5dd07,0xba55ce11,0xba947c75,0xbad7eb5c,0xbaf3db8e,0xbaf58808,0xbb06bc9e,0xbb125196,0xbb0d3dff,0xbb13909f,0xbaba7851,0xba54a9c3, +0xba8fc0b1,0xba36f24d,0xba1113ed,0xba7989fb,0xba0df021,0xba283010,0xba408b56,0xba2fa8de,0xba157c4e,0xba43495d,0xba5b8ce4,0xba5e9c16,0xba35dbc5,0xba0b4d93,0xb94b75ea,0xb90991bf,0xb98e1507,0xba18a420,0xba6d7f55,0xba8e366b,0xba8b53dc,0xba7f557f,0xba632a44,0xba322c15,0xba7044cd, +0xba8ac48b,0xbaaee9af,0xba5fd520,0xba378d22,0xb999b97f,0xba1829d1,0xba03f78d,0xb8d5fd77,0xb9e4a466,0xb9ec7748,0xb9da7357,0xb9b15c72,0xb9d0a0a8,0xba81cdf2,0xba1fd689,0x39a336b8,0xb85737e2,0xba0ebade,0xba9daf5d,0xbac97d5e,0xbb162bfa,0xbb09de9f,0xbad97324,0xba6cd66a,0xb9229f2f, +0x399cecc7,0x3a91dd32,0x3a4b82ac,0xba3bd0b8,0xbaec113a,0xbb1ed5bc,0xbb10ac80,0xbaf8ee78,0xbad02217,0xba8a715f,0xbadd1da5,0xbb092c7c,0xbb31c37f,0xbacbcac4,0xba4104b9,0x3a25bbb8,0xba300761,0xb9766ba3,0x3af398d8,0x3a8eb8e7,0x3a7845e5,0x39331c1d,0x39818e89,0x3913cd3b,0xba8c1119, +0x39df8304,0x39b6e0cf,0xba0f9137,0xba64657f,0xba960ddf,0xba7a2e15,0xbb14fe3a,0xbb3ef144,0xbb1a2b4e,0xbaafbf09,0x3991ff3d,0x3ac361ba,0x3b460ce4,0x3b1423f6,0xba23c239,0xbb2ecafe,0xbb7df6de,0xbb759e8f,0xbb4c2a68,0xbb2772bb,0xbaaa2c2c,0xbb14d351,0xbb3aea15,0xbb8695e3,0xbb04a095, +0xba71e51d,0x3af79343,0x39b1c40a,0x3a5a06ff,0x3b82e6a6,0x3b0556bf,0x3af0ca22,0x3acf55f2,0x3ad1fa84,0x3a649f6c,0xbaef55fb,0x3a290d81,0x3b3409ec,0x3a931fec,0x398806b6,0xbae4c24c,0xbb17ca62,0xbb977bf3,0xbb94003d,0xbb6ff758,0xba8e505c,0x3ad5f95f,0x3b12992a,0x3baea102,0x3b90f848, +0xba07e2cd,0xbb76f740,0xbbbd88c0,0xbba53be9,0xbb973f74,0xbb5ba02a,0xbab3dab5,0xbb3bfcac,0xbb7b9288,0xbbab4e89,0xbb1b1084,0xbae13fbf,0x3b9d0c1d,0x3a662ddb,0x3b267a7f,0x3c00508f,0x3bdad08f,0x3bbb6621,0x3b0a5de8,0x3b4b1e94,0x3b019a30,0xbaecb373,0x3b18cdff,0x3a93c5d0,0xba8403fb, +0xba5b8505,0xba20794a,0x3a7e5141,0xbb2babe9,0xbb98f431,0xbb8bb210,0xbafea18e,0x3abea448,0x3b862b7b,0x3bfbe924,0x3bd8db72,0xb8783939,0xbb968be2,0xbbe6b1dd,0xbbdc3f53,0xbbb88ca9,0xbb96a0eb,0xbad43a34,0xbb2921dc,0xbb5e8321,0xbb9db8da,0xbb338370,0xbaa689bc,0x3bb8ccbd,0x3b806a32, +0x3b91ac1f,0x3c0eddab,0x3c01d9d3,0x3bdb8dc0,0x3b8e439a,0x3bba3a10,0x3b5927ea,0xbb8e3458,0x3ab14f4f,0x3c17c411,0x3aea82c8,0xbaf66c1a,0xbbe0ca8d,0xbc59b74d,0xbc2e0e44,0xbb8bc993,0x3bed4c08,0x3bb47faa,0x3b9a65a8,0x3b93f9a4,0xbc2613ee,0xbc4fd91a,0xbbe346dc,0xbae0c72d,0x3ab44c26, +0x3b1aecf7,0x3ad9a6d7,0x3a3a7399,0x3885ed65,0xba8f830a,0xba5dc122,0xbaafdfa8,0x3b72985b,0x3b3c9bfe,0xbb8715a0,0x3b9297f3,0x3bd1cc4a,0x3ab947e3,0x3b0e0302,0xbb30e564,0xbc03393e,0xbc46ba95,0xbb82d0a6,0x3c2f60af,0x3c602b67,0xbc77bae9,0xbc263069,0xbc1e2b3e,0x3a63eb31,0x3ccb3a64, +0x3c1bb9af,0x3bcee2fa,0x3b8ab4ef,0xbb862597,0xbb8d2477,0x3b3a3a3e,0x3b952b72,0x3b72eb08,0xbb79049c,0xbb7516fc,0xbb8db82a,0xbb53bfd6,0xbb005021,0xbaef6b95,0xbac898d0,0xbaaec78d,0xba6bc555,0x3ae0c1a1,0x3a542f7b,0x3b31eb3d,0x3b9856a8,0x3b6a2d91,0x3ae79487,0xbb068b3a,0xbad8474e, +0x3aeae1f4,0x3c193863,0x3c4288e6,0x3b86a36e,0xbc89af16,0xbc8197fe,0x39cb2ed8,0x3c99b333,0xbafaa9f4,0xbc08cd8e,0xbbbcba95,0xbc205dc6,0xbbac12bb,0x3c97be44,0x3ad5abaa,0xbb1424d5,0x3aad1087,0x3b238fa7,0x3b628159,0x3b38fc39,0x3b732084,0x3ada8367,0x3b12cc86,0xb9ad8063,0xb9a4af0c, +0x3a26d626,0x392a776a,0x3a6700f8,0x3a9f2cba,0x3b4e484b,0x3b48becf,0x3ad407cd,0x3a3312e0,0xbaa41db9,0xbaa45e18,0x3b1ac15f,0x3b3efcf8,0x3baa6f27,0x3ac66a03,0xbbadea43,0xbbbd21a2,0xbba81d8a,0xbaa9aff1,0x3bede4c0,0xbb65e616,0xbbe94734,0xbc7bb7d0,0xbc526deb,0xbbf70a1e,0x3c981e66, +0x3be0004f,0x3bad2346,0x3b83c9b0,0x3baa70b7,0x3bcc0b75,0x3bdd4d95,0x3b7eb21d,0x3b15f2c5,0x3aab5074,0xbad5b68e,0xbb01ab7f,0xba29b9c4,0xba605af2,0xba059849,0xbaad2edc,0x3a5d49c2,0x39a71120,0xba470085,0xbae54ea3,0xbaad06a6,0x3a280d45,0x3b2bd420,0x3b6afb3e,0x3a76d948,0xbb8ea0e1, +0xbbe0cb3c,0xbac331d7,0xbb76a33e,0xbb0df786,0xbc2b3a28,0xbb9faaa0,0xbb619435,0x3a401a92,0xbaa92b40,0x396f66f1,0x39e0f888,0x3ba79ec2,0x3c12a036,0x3c18de49,0x3c34d696,0x3c138f4e,0x3bc6a7e9,0x3b1a251d,0xbaad4d7b,0xbb1c5ae2,0xbb45bb4f,0xbb698b18,0xbb844fac,0xbb793878,0xbb8e6f04, +0xbb7f7f20,0xbb982897,0xbb72732b,0xbac5d29d,0xbb255c9f,0xbb1874d4,0xbaaf71f0,0xbb12fc39,0xb9f91d4a,0x3a3f052b,0x3b4ec3d0,0x3b80fd9f,0x392d7028,0x3a357ed0,0x3bb6bb6c,0x3bc6b8ae,0x3c4f366a,0x3c8aef69,0x3c391b22,0x3c31be2b,0x3c33bd70,0x3c60c6fc,0x3c15b019,0x3bcdf59d,0x3b14d428, +0xbaceccbe,0xbaca970c,0xbb2af621,0xb9b42c93,0x3ab0dc2f,0x3b23d2ca,0x3b075af6,0x3b055d41,0x3ade790d,0x3a83f5d5,0x39087465,0xbb2627e9,0xbb35ebeb,0xbb4c83c8,0xbb6546c4,0xba0df8b4,0x3af13bc0,0x3b33caad,0x3af3c13f,0x3a2189a5,0x3a7b572f,0x3b170bb7,0x3b377db2,0x3bb218e2,0x3b5f859e, +0xbc088350,0xbbcf12e8,0xbba3ed16,0xbb3542fc,0xba62745c,0x3a6afd28,0x3a8e6728,0x3acadcf0,0x3b191210,0x3b4a8620,0x3b7d7942,0x3b4fe5e7,0x3b3107fb,0x3af71756,0x3b1a3099,0x3b2a3d80,0x3b24fae7,0x3b372440,0x3b065501,0x3adaf591,0xb9b2c80f,0xbb2cced3,0xbb9cd237,0xbb8d10fa,0xbb85b1ec, +0xbb7c7986,0xbb4a4f9e,0xbb8011c9,0xbb6ac88f,0xbb9f8a31,0xbb9cd74f,0xbb6c3a4b,0xbb9fc916,0xbbbafa96,0xbc1cc79e,0xbc1558fa,0xbbc3a0da,0xbb2248b4,0xbb079ddb,0xbae6e04f,0xbb23bca1,0xba42bda9,0x3aa06a84,0x3b4c7eb7,0x3b7f1c61,0x3b75e9bf,0x3b7a0029,0x3b3e9674,0x3b3606f2,0x3b269af5, +0x3b3755b7,0x3b506484,0x3b43564c,0x3b3044ea,0x3b09eb25,0x3af5c652,0x398525a0,0xbaccc8b9,0xbb8344ab,0xbb6763a9,0xbb752609,0xbb68230b,0xbba942fb,0xbbb8e035,0xbbd09b88,0xbbdd9a80,0xbbf3596b,0xbc084e1e,0xbc0c5118,0xbc1d01b1,0xbc21e725,0xbc05ebd2,0xbb21fb01,0xbaf44758,0xbae7463a, +0xba5f4eba,0x399fa99c,0x3a1e473c,0x3a26a7cd,0x3a86dbaf,0x3a6f899b,0x3ac16527,0x3b180826,0x3b1a144a,0x3b29f812,0x3b2201e9,0x3b188f18,0x3b177b4d,0x3b103681,0x3af0e3bb,0x3ac44b1d,0x3abdc609,0x384584d4,0xba9dec48,0xbb26e48e,0xbb293fd7,0xbb40047a,0xbb38232b,0xbb7baf29,0xbb8c9e2a, +0xbbcd4bf0,0xbbc75657,0xbbf4422c,0xbc000bfd,0xbbe5cc97,0xbbb6b0e7,0xbbafb7c1,0xbb6545af,0xba12ea26,0x3987bcd1,0xb71f03ce,0xba1bd457,0xbabcb9df,0xbad08364,0xbad94f61,0xbae2971a,0xbabf9b7c,0xbab040f2,0xbac6ac67,0xbab0ca2e,0xba990aa9,0xba43110b,0xb9ffa6cf,0xb97cc542,0x37fd87a0, +0x39c36bf1,0x3a3c31e4,0x3a862fae,0x39b9fb0f,0x39734384,0xb7935e00,0xb9d43171,0xba829585,0xbab1cdb6,0xbab5d839,0xba82f8d0,0xba17b546,0xba4c9baf,0xb94cc2ac,0xba160aa8,0xba351e39,0xba2c8287,0xba356e5b,0xba387a87,0xb9389ef3,0xb906476d,0xb9819157,0xb8e530c1,0x383f492f,0x38b17fc6, +0xb88281bc,0xb96b79a2,0xb92c082a,0xb8a45482,0x38dcec63,0x39751c76,0x398fa61f,0x398710bc,0x394fb54b,0x393b4acf,0x392fdfc7,0x38f1e243,0x388b62d8,0x393de7dc,0xb8c09b5e,0xb993ae64,0xba129042,0xb9e32b96,0xba0297f7,0xba35c16e,0xba6677bd,0xba843143,0xbaa8ac8e,0xbac43c85,0xbabfce87, +0xbadd001a,0xba9db68e,0xba51ac93,0xba1f8fc4,0xb9a4639f,0xb90fb5a6,0xba346f05,0xb98fd536,0xb9d3552d,0xb9dcaf13,0xb9cb4159,0xb9ba0556,0xba132cc8,0xba2fbaa4,0xba3d36bc,0xba018192,0xb9a73a2c,0xb82f285c,0x38338333,0xb86089d8,0xb976816f,0xba29d78c,0xba607c19,0xba6aa6fb,0xba618997, +0xba4f4a3b,0xba27c5da,0xba57a025,0xba7357f5,0xbaa39e20,0xba1aa692,0xb9f95470,0xb994857c,0xb9f2db18,0xb9ca6bf0,0xb81b66e5,0xb9b14fc4,0xb9aa52f9,0xb9301b84,0xb9408a6e,0xb964c184,0xba2a5d24,0xb9b10941,0x39c79658,0x37db7f77,0xb936bb7d,0xba4b42b8,0xbaa5b4f7,0xbb0ec4e0,0xbb04298b, +0xbad52613,0xba1a21b0,0x393b5456,0x39e5fdaf,0x3a98697a,0x3a84bbf0,0x38dd8c4d,0xba9c1335,0xbaffcd17,0xbb01bded,0xbaf64010,0xbadb6cec,0xba980681,0xbad5609a,0xbafdf7c6,0xbb2576ba,0xba9adeee,0xb9dafb3b,0x39f2e12c,0xb9efd815,0xb81b5091,0x3aeb0246,0x3a747837,0x3a3b32ec,0x3a09c51c, +0x39b8a828,0x39cfe5e4,0xb9efacd4,0x3a1354d1,0x3a5990d2,0xb90d9a5c,0x387e23e0,0xb9964e77,0xba04d1c0,0xbb051c83,0xbb38b952,0xbb1a765a,0xba64fac0,0x3a30a01a,0x3acdd080,0x3b47e391,0x3b2fb61c,0x3a41c80b,0xbae8b8d9,0xbb517d7c,0xbb66b59d,0xbb55384f,0xbb433b7a,0xbaf088bb,0xbb27b26c, +0xbb3f699d,0xbb845dc6,0xbac25d97,0xb9d2874d,0x3aad788d,0x3a07a1c8,0x3a5964b9,0x3b6be26c,0x3ad59c18,0x3ad863b6,0x3b0b83ea,0x3ad5a56d,0x3a88ca0d,0xba38a056,0x3a9a2f42,0x3b2d88f7,0x3a7b1463,0x3a917c54,0xba42e129,0xbaf6f5b3,0xbb966398,0xbb987d9a,0xbb82414c,0xb9e866f6,0x3b0d618e, +0x3b0d4213,0x3ba60b30,0x3b9a160b,0x3af5236b,0xbb186e1b,0xbb9bbb10,0xbb9bf7f7,0xbba4d0c2,0xbb876ccb,0xbb0de94e,0xbb56d6fb,0xbb7535b2,0xbbb1eb97,0xbac35d62,0xba853d5d,0x3b8421ce,0x3a83a008,0x3b234c42,0x3c020f66,0x3bc16af2,0x3ba8c67a,0x3b379be6,0x3b42889c,0x3b194c01,0xba1ae6c2, +0x3b209dc6,0x3b0f327c,0xb8a45bc8,0x3a84d5bf,0x3a94e3b4,0x3aee314e,0xbb18b047,0xbb8ecf32,0xbb8d6abf,0xba992065,0x3afddb30,0x3b77d28e,0x3bf05293,0x3bf4acaf,0x3b308bd5,0xbb3bd3b3,0xbbc08ee1,0xbbd46cd5,0xbbcc15eb,0xbbbf6b9f,0xbb46f021,0xbb68567e,0xbb814dad,0xbbaac7c7,0xbb0767dc, +0xba4138dc,0x3ba62d37,0x3b626046,0x3b7e758f,0x3c112502,0x3c032ae2,0x3bd86144,0x3bad386a,0x3baf4c74,0x3b45cff5,0xbb23d73a,0x3b1da364,0x3b715fa3,0xbab4c5fb,0xbb833b31,0xbbfeffdb,0xbc5e5c16,0xbc426b4a,0xbbc10686,0x3bf5f6b1,0x3baafa27,0x3bab7135,0x3bfd87e1,0xbc09c5ed,0xbc48a43c, +0xbbfdd15f,0xbaf67050,0x3aafe99a,0x3b1c3fa2,0x3b215be8,0x3abb9dd9,0xb9053041,0xbaaa0419,0xba672e27,0xb9b3383c,0x3b546fed,0x3b362ef0,0xbb8bed2f,0x3bcd2224,0x3bf54bde,0xb9e8a85d,0x3a897e0b,0xbb799a37,0xbc066ba1,0xbc179e0a,0xbaa77a7c,0x3c29d7c2,0x3c10ecd3,0xbc254415,0xbbc5d937, +0xbba90be5,0x3b3df916,0x3cbe18bb,0x3c3b62c4,0x3c1201f7,0x3b93b69e,0xbb3c6a7b,0xbb6ff352,0x3a89488f,0x3bcd4037,0x3bcc04f9,0xbb8530d9,0xbb728e2e,0xbb9e2668,0xbb5a1840,0xbb21ea7a,0xbb334f7f,0xbb481f2b,0xbb342d2c,0xbb0a05df,0x3ac367b4,0x3a5349cd,0x3b396055,0x3b7bd66b,0x3b26b342, +0x39d58983,0xbb61f547,0xbaa69f5c,0x3b291c3e,0x3c118bdc,0x3c126451,0x3a820f7c,0xbc8aa59e,0xbc517bcb,0xba7b9eb8,0x3c8026a2,0xbbcc1cc6,0xbc20f645,0xbbd0327e,0xbc442bcd,0xbbfc3749,0x3c95ccc6,0x3b1bf894,0xba41c6ae,0x3b0687e8,0x3b4b1f37,0x3b41e755,0x3ab4061f,0x3b3a52e0,0x3ab562f1, +0x3b5762bd,0x39b3f656,0x39bd9d70,0x3a02b89f,0x390937d2,0x3a1c7578,0x3abfb5bb,0x3b2f9745,0x3b127ecb,0x3ac964cf,0xb8b71c13,0xbb078b4d,0xbaaa108e,0x3ae05996,0x3ae960d7,0x3b2c877d,0x3acee561,0xbba3e109,0xbba77f35,0xbbea61ce,0xbb7bcfb2,0x3b99a27c,0xbbc3e834,0xbc074206,0xbc5d6ec2, +0xbc7ca35f,0xbc289203,0x3c9f1dab,0x3bd2fbc5,0x3bc3a3af,0x3bdb6bf6,0x3b9d0701,0x3ba2ca85,0x3bc5586d,0x3b82e34d,0x3b27c744,0x3ad7174f,0xba8d77b5,0xbacf671f,0xb90b0b86,0xba14518d,0xb9fc5735,0xba8a76f6,0x3a1caf3b,0x378e71e9,0xba3ca6cd,0xbad96f7a,0xbab159fe,0x3a57e132,0x3ad09879, +0x3afdce35,0xbafecc47,0xbb71c6aa,0xbbb16d96,0xba2c157e,0xbbc5c60c,0xb8111978,0xbc05f27d,0xbb242d1c,0xbb09670c,0x3aa14060,0x3ac29e96,0x3b5397eb,0x3aa111c9,0x3b734d03,0x3bed9280,0x3c28a7d4,0x3c342cf2,0x3c16f463,0x3bc8a0f7,0x3b1be379,0xbaf05e4c,0xbb6ab6dc,0xbb7ab4c0,0xbb8c2ac3, +0xbb82b87e,0xbb93fd27,0xbba330a6,0xbb8428e6,0xbb84fb19,0xbb476758,0xbad4d139,0xbad60463,0xbad90090,0xbae8857a,0xbafde95f,0x37008522,0x3abcaded,0x3b28a642,0x3b652978,0x3ac987e6,0x3b39bc2f,0x3b1fb2ae,0x3a992635,0x3c087d15,0x3c646c50,0x3c20c207,0x3c2adc15,0x3c2ffa97,0x3c59d0af, +0x3c25e828,0x3c04b59a,0x3bb4e0b7,0x3a812a95,0xba0c067d,0xbae44429,0xb8895340,0x3ac85695,0x3b3ab3c5,0x3b03011d,0x3af7ed9b,0x3b020169,0x3a6142cb,0xb9c21fda,0xbb5f7152,0xbb6a265a,0xbb541143,0xbb532de2,0x3a399c5e,0x3b3f48f1,0x3b343332,0x3affbc20,0x3a22d74d,0x3a138d12,0x3b394c71, +0x3b4b64aa,0x3b88924d,0x3ab3d815,0xbbcd0783,0xbbbeddc0,0xbb2b6389,0xb9adb7db,0x3adcf680,0x3b23cd9a,0x3b13dbab,0x3aef28e5,0x3b1ce004,0x3b461f1f,0x3b7705ce,0x3b2fc4e5,0x3b26e3f7,0x3b0f13a4,0x3b2d5f6e,0x3b2af260,0x3af4f0a6,0x3b1d6b6b,0x3ab26ede,0x3a43f9f2,0xbae4e83f,0xbb72943f, +0xbb9a1267,0xbb762d97,0xbb607b41,0xbb79cd62,0xbb4643cb,0xbb60be12,0xbb16b337,0xbb42364a,0xbb193a6d,0xbaa0a903,0xbafaf777,0xbb2cc191,0xbbdaf580,0xbbc8e3e6,0xbbc08309,0xbb4ab258,0xbb170d22,0xbaea122f,0xbb39165b,0xba9775c6,0x3a3ddfe9,0x3b430c93,0x3b76cb19,0x3b656b49,0x3b6703f7, +0x3b24c325,0x3b19e169,0x3b14aa9a,0x3b2993e6,0x3b453924,0x3b2f81a9,0x3b1242d6,0x3aae056e,0x3a26bed9,0xb9faba0a,0xbb017be9,0xbb778a32,0xbb562227,0xbb528a6c,0xbb5d9fda,0xbb916730,0xbb9ae580,0xbba177af,0xbbaf3a9f,0xbbc7b25c,0xbbecab09,0xbbeb9907,0xbc0b454b,0xbc1e5b89,0xbc013907, +0xbb44ca64,0xbb055f80,0xbb0ad3a1,0xbaadf60e,0xb9a452f9,0x38f15803,0x38fb83d7,0x39c8212c,0x3a19de3c,0x3acd7f85,0x3b31d6de,0x3b327852,0x3b43d76a,0x3b37d3aa,0x3b257907,0x3b1ec18e,0x3b147de4,0x3adf24b3,0x3a8c9428,0x3a841f6e,0x3866f925,0xba72e3de,0xbb00bd8f,0xbb0fabeb,0xbb28999d, +0xbb224ec9,0xbb56e927,0xbb7e04b6,0xbbb0e0b3,0xbbb93b1d,0xbbe5d64d,0xbbf3b4bd,0xbbee69d1,0xbbd36f87,0xbbcf703e,0xbb88cbf7,0xb894de50,0x3980658c,0x392b8f17,0xb8219da5,0xba18a00b,0xba1d97a3,0xb9d18834,0xb98595d2,0xb9517300,0xba0c63b9,0xba77e7c3,0xba674ed8,0xba4e1d8f,0xb9d27100, +0xb8967be0,0x39277921,0x39f8b68c,0x3a6b425e,0x3aa6fe45,0x3ac8ca4e,0x3a8f1386,0x3a32eb84,0x39b821dc,0xb8bdccdb,0xba35a0c8,0xbaa4c6fa,0xbab5868c,0xba9131ba,0xba3f8e9f,0xba835afa,0xba071152,0xba5e2f13,0xba3d85f3,0x38929dd8,0x36a42252,0xb9c59482,0xba085399,0xba1071bd,0xba1a1cb5, +0xba038e05,0xb9b8aaeb,0xb9addbff,0xb9fc0797,0xba247999,0xba09fb81,0xb995dd31,0xb79a2fea,0x38ff1e13,0x39235051,0x38d9d766,0x37163432,0xb7b7c03c,0xb8933d8a,0xb9274291,0xb956d03e,0xb91bf38c,0xb960ed1b,0xb96a13ac,0xb994999e,0xba173e10,0xba04a43c,0xb9f07aae,0xba2068f0,0xba52ebe6, +0xba965359,0xbab2ff90,0xbab26ce4,0xbadde98f,0xbac9fd4e,0xbaabd44d,0xba60b346,0xba2c994a,0xba26794e,0xb9df0e74,0xb83a8c32,0xb90c56ab,0xb8ae74a8,0xb8cdde9c,0xb910b22d,0xb9d05497,0xba0430d4,0xba114b86,0xb99aaabc,0xb905b03f,0x38931de7,0x39553a94,0x392c2475,0x3904cabe,0xb9beaba2, +0xba1d2932,0xba3bf044,0xba3b039a,0xba31baef,0xba1538a8,0xba3b2cb8,0xba4d0b72,0xba92565e,0xb9ab7c67,0xb98d266b,0xb99516cb,0xb9bbd0af,0xb99b478f,0xb82f1fbb,0xb98d3119,0xb969d479,0x38065580,0xb8a2df3b,0xb8a50159,0xb9b75ae9,0xb9018325,0x39f96989,0x38d0fc8f,0x3930f09e,0xb9af205c, +0xba6b2e19,0xbb05d10e,0xbafd9661,0xbac548ce,0xb98bcc53,0x39fc188f,0x39fd48a8,0x3a975b74,0x3a9f7193,0x3a73d424,0xba0dd585,0xbab9a650,0xbae37f9d,0xbae63ef5,0xbad8b758,0xba9fb554,0xbac8e5a6,0xbadefe02,0xbb0e3ba7,0xba47eef2,0xb8a3763e,0x399b338c,0xb94a0857,0x392080e4,0x3ac0e02c, +0x3a29abf7,0x39d07516,0x3a503be8,0x39ca4c32,0x3a133be2,0x38e8a03d,0x3a3cfa3e,0x3aa40251,0x39b206f1,0x3a85278d,0x3a112566,0x35bf2dca,0xbaf0c373,0xbb31aa2b,0xbb0d1446,0xb9e4056b,0x3a7d6356,0x3ac11306,0x3b434024,0x3b45cffb,0x3b0bc003,0xba4c8417,0xbb1cba38,0xbb54c54d,0xbb50c813, +0xbb4e7014,0xbb13a620,0xbb3218a1,0xbb3777e2,0xbb6f74d4,0xba653ea5,0x391fcf05,0x3a568923,0x3a3e50b2,0x3a4a33ef,0x3b37d0c4,0x3a935890,0x3aaf207e,0x3b1faa9c,0x3ac61125,0x3a91945e,0x39861765,0x3ac9f1f9,0x3b2aa2a0,0x3a4271fe,0x3aebdb6e,0x396eb81c,0xba9e6d91,0xbb918736,0xbb9bb5c2, +0xbb856b90,0x397e8fad,0x3b29f474,0x3af09aa0,0x3b9864c8,0x3b9db788,0x3b8a8c24,0xba533476,0xbb693558,0xbb9241de,0xbba65ad6,0xbb94bb04,0xbb3b7308,0xbb658456,0xbb6009da,0xbba98660,0xb9ea0054,0xb9408b1a,0x3b548ecf,0x3aaa968d,0x3b262b6a,0x3bef0325,0x3b9c403f,0x3b8c7577,0x3b595f5d, +0x3b300adc,0x3b256d9d,0x3a1dac58,0x3b2cc915,0x3b472e88,0x3a80d09c,0x3b3a65c6,0x3b37d48a,0x3b30d460,0xbb0eee9b,0xbb809b56,0xbb814861,0xb9fe432a,0x3b10b906,0x3b54ce88,0x3bdf2067,0x3c041010,0x3bb478e0,0xba7681a7,0xbb937672,0xbbc9a5b8,0xbbd06591,0xbbd58103,0xbb88ab94,0xbb8c172a, +0xbb891f09,0xbbac7e55,0xbaa3c98d,0x37bfb289,0x3b91ace4,0x3b52f8f5,0x3b683044,0x3c0dbf50,0x3bff99f8,0x3bcdf90e,0x3bc750ae,0x3b9dd1e1,0x3b2da181,0xba3b3ab8,0x3b4a6f32,0xb9f3dc02,0xbb8cd684,0xbbc7eb6e,0xbc154bbb,0xbc624bed,0xbc4a7cf5,0xbbe75a36,0x3be54181,0x3ba8141e,0x3bbacc1a, +0x3c21ecda,0xbbda6edb,0xbc413a0a,0xbc0ef424,0xbb169941,0x3aab0d77,0x3b306955,0x3b5c8e01,0x3b1d1242,0x38d39fbb,0xba5723b2,0xb9bc57b2,0x3aa434eb,0x3b33c6a4,0x3b248552,0xbb8af8f0,0x3bfc5580,0x3c084928,0xbaad9f3c,0xb99aacc5,0xbbaa059d,0xbc092056,0xbbd121ae,0x3a9daec0,0x3c16d552, +0x3ba6de07,0xbbce3782,0xbaf18669,0x3786cb7e,0x3ba83423,0x3ca1c44a,0x3c50a2f2,0x3c35637a,0x3b9cff6e,0xbb065a07,0xbb5424a9,0x37c9ee18,0x3bf390a6,0x3c0857ec,0xbb472113,0xbb575c01,0xbba36c50,0xbb4ed397,0xbb2a4987,0xbb4a6af6,0xbb8a23f7,0xbb676df6,0xbb31470d,0x3a8b0537,0x3a327a9e, +0x3b2ed65e,0x3b4dcb32,0x3ad0c094,0xba42727d,0xbb8f6fe2,0xb9564549,0x3b6cb61a,0x3bfb8f5f,0x3bb57712,0xbb1b75b3,0xbc8354a4,0xbc31a8fe,0xbb0565b6,0x3c16fc3d,0xbc240ae1,0xbc27fea6,0xbbc46621,0xbc40647a,0xbc119e04,0x3c5405c2,0x3b4ea3be,0x3ad12ba1,0x3b1aee41,0x3b8317c2,0x3b3b7bed, +0x39877847,0x3b0a7973,0x3a9e80e9,0x3b824343,0x3a982c4e,0x3a90681c,0x374c19d3,0x38aa61ac,0x39a1bd47,0x3acb8d15,0x3b01c68d,0x3aa7f2de,0x3ab4f7aa,0xba38948a,0xbb24e5b9,0xba88bc91,0x3a90fb2f,0x3a3dad99,0x39b943c5,0x3ad5bc19,0xbb8ac1a3,0xbba0f0b3,0xbbf51365,0xbbab723f,0x39fd0871, +0xbc0c6f66,0xbc195cff,0xbc1f4184,0xbc80b864,0xbc3fcb60,0x3c70d06a,0x3bcec7d2,0x3bf0ba99,0x3c03dfaf,0x3b95842e,0x3b7bb32d,0x3ba994d1,0x3b870965,0x3b4b3938,0x3af76072,0xb92d3a1a,0xba804f02,0xb931f288,0xb9ff2d64,0xba23dc60,0xba591ccf,0x3959d0fb,0xb98640ec,0xba4e3c33,0xbab64a33, +0xba9e46fe,0x3a8257dc,0x39f4f7a2,0x39372fd5,0xbb88122d,0xbb356e32,0xbb60e025,0xb6b45af2,0xbbcac257,0x3ada53f9,0xbb7ef171,0x3a565ae5,0x3806d974,0x3b339fca,0x3b84f9ab,0x3bba1129,0x3b0c79eb,0x3b22ab05,0x3babe534,0x3c26e7b0,0x3c291f9b,0x3c12051d,0x3bcbfaab,0x3b0e800f,0xbaeb954e, +0xbb884f58,0xbb889991,0xbb992628,0xbb7f2b09,0xbb9f687f,0xbbabd60a,0xbb8a92ad,0xbb5b15fd,0xbb10beea,0xbacfe2d7,0xba43d0e5,0xba73ad42,0xbb0a57b6,0xbac0d48d,0x39c89b79,0x3b04af76,0x3afe57aa,0x3b466742,0x3b5ab57a,0x3b818e63,0xba45bc4c,0xbb7332f8,0x3af9861b,0x3bfe17d7,0x3bc94709, +0x3c10bd3f,0x3c25bcb8,0x3c518e7d,0x3c32cd10,0x3c225366,0x3c052caf,0x3b8477e7,0x3a962676,0xb9b9c4f2,0x3a7516c8,0x3aec1783,0x3b2e6749,0x3b0103d8,0x3ae6293e,0x3aee0bc0,0x39c6a50d,0xba970c63,0xbb839ce8,0xbb8bbbc5,0xbb5783c1,0xbb2bed43,0x3abe0958,0x3b59cde6,0x3b23b670,0x3b11ea0b, +0x3a854181,0x3a1b890a,0x3b5397a9,0x3b4e7b40,0x3b1d5683,0xb9cd259e,0xbb808ab0,0xbb7c0bf4,0x3a0b3860,0x3b23795e,0x3b95570f,0x3b8492d8,0x3b591d97,0x3b0b6e75,0x3b1931ef,0x3b32d8b9,0x3b59a474,0x3b0b8ea6,0x3b15e4bc,0x3b18e3a4,0x3b2bafb9,0x3b22bad4,0x3a983256,0x3af228c1,0x3a15694f, +0xb9e3ed38,0xbb41b3af,0xbb905a9f,0xbb894008,0xbb606c06,0xbb4a7c7f,0xbb71dcf4,0xbb39054a,0xbb34450a,0xba863750,0xba808712,0x38aa799c,0x3a91ed01,0x3a6bb95d,0x39ebd803,0xbb379b7c,0xbb3c20a6,0xbbb28299,0xbb6d6e7d,0xbb1bf312,0xbac462ed,0xbb11ea36,0xba689fcb,0x3a1fee52,0x3b30c9c1, +0x3b54ce4a,0x3b3938f2,0x3b2bded8,0x3adda16d,0x3ac6a6f7,0x3adf46d7,0x3b04c063,0x3b25cafe,0x3b17d4de,0x3ad64214,0x39f69041,0xba2569f3,0xba9b2166,0xbb15e3e6,0xbb5ef46c,0xbb49d558,0xbb44a00c,0xbb5ea41c,0xbb81e068,0xbb81d945,0xbb732140,0xbb8493f8,0xbb9cec6a,0xbbc3b782,0xbbbd51ad, +0xbbe952b1,0xbc0ea17f,0xbbe80b3a,0xbb6cd522,0xbb1e255f,0xbb202f17,0xbae40774,0xba68bbd7,0xb9bf5e8c,0xb995a549,0xb82fa95b,0x39d36157,0x3ac8fbe6,0x3b302eaa,0x3b307cf5,0x3b3ca1ed,0x3b2a5d2e,0x3b17ed8c,0x3b0f6670,0x3b0ddb10,0x3aaff7be,0x3a06ef9b,0x39a3dfe6,0xb96ede54,0xba6ff1d3, +0xbad73cda,0xbb017d0a,0xbb200e0d,0xbb25fe15,0xbb4bb74e,0xbb762cfc,0xbb9f7d0e,0xbbb1591c,0xbbd9ee60,0xbbe7671b,0xbbf080d8,0xbbeb682e,0xbbe9f2cf,0xbb9f4b45,0x383b8d7b,0xb8b4f55d,0xb83be5a7,0x39311b11,0x3811fecb,0x3910df4e,0x3a176ba0,0x3a68186b,0x3a513d69,0x394c027f,0xb993bb73, +0xb9960683,0xb952ae3e,0x391c8ffb,0x39b8b4f3,0x39c6c8c4,0x3a0a9f8b,0x3a6d4291,0x3a9c6957,0x3aaecb94,0x3a90bfac,0x3a047ce3,0x38e610e8,0xb9d417d2,0xba6f05d0,0xbac671c1,0xbae28307,0xbac6fb55,0xbaa1e586,0xbaca7aee,0xba943dfa,0xbac0b1cd,0xba971779,0x39ba6799,0x3998527d,0xb9ca3549, +0xba9e31e2,0xba9f506f,0xba96b1fc,0xba8f7b58,0xba78ff25,0xba75a7e2,0xba862e00,0xba8fca27,0xba8079ec,0xba2d2489,0xb9c5acd6,0xb9869967,0xb9856fd4,0xb9aba306,0xb9e3b028,0xb9e547ed,0xba01a9cf,0xba1f59fc,0xba2d586f,0xba30d50b,0xba286bd9,0xba19ec3c,0xba06d41d,0xba857dfc,0xba731847, +0xba4c4fed,0xba741d09,0xba94e8f1,0xbac56773,0xbae2a911,0xbae253ee,0xbb0ae662,0xbb0f71d6,0xbb06de42,0xbacdd9ce,0xbab9869f,0xbacac11c,0xb97c3580,0x38e3c483,0x383acab5,0x393a7e5c,0x38ee1430,0x37061c70,0xb999a0ac,0xb9c80fa7,0xb9d8a98d,0xb92229a1,0xb77c39f0,0x38b57c01,0x399465a9, +0x39a1935b,0x39d9c747,0xb904e0e8,0xb9c99ebe,0xba19932a,0xba1d1a62,0xba1a5efa,0xba0bd9b8,0xba1d153c,0xba1d45ed,0xba6351dc,0xb8cffb76,0xb8632f6b,0xb9591255,0xb94f9609,0xb934468e,0xb84e7b69,0xb92905ec,0xb8b89bfa,0x39678a13,0x377398d4,0xb75b18d9,0xb89e52f5,0x388c14b1,0x3a232de4, +0x38ff100a,0x39d1eabf,0x383da259,0xba048a0a,0xbaf05077,0xbaede96d,0xbab4827d,0xb7e1edbe,0x3a28ee10,0x39c12dd8,0x3a84a64c,0x3aa9090a,0x3ad2d721,0x383f8bf3,0xba6d82ee,0xbac7d565,0xbad3a843,0xbad3101e,0xbaa8e585,0xbab5d8bf,0xbaba07b4,0xbad9ea7d,0xb9a0b7f8,0x397a7c52,0x39464806, +0x38a72917,0x39a5d2fc,0x3a75fbc3,0x398ca738,0xb7ae1d66,0x3a6fdcf3,0x39b30f6a,0x3a286d9a,0x3a1f468e,0x3a5e56bf,0x3acb6a07,0x3a38a616,0x3ae7ea91,0x3aa09f7e,0x39fa96d3,0xbad2e411,0xbb217e17,0xbaf1c200,0xb8ad0499,0x3a8c8cce,0x3a959ce0,0x3b31bdb6,0x3b4d9a6b,0x3b5a3f56,0x39396563, +0xbaccb31e,0xbb4267af,0xbb44e9cd,0xbb511120,0xbb25c2d8,0xbb31c1c0,0xbb259ab2,0xbb4432e2,0xb95d0492,0x3a3a7b06,0x39eb7ef2,0x3a71f93c,0x3a194426,0x3ae06dc1,0x3a03ebac,0x3a6e1f81,0x3b1f3491,0x3aa0ccac,0x3a839d6e,0x3a7e224f,0x3ad920bc,0x3b243887,0x3a0ed4cd,0x3b10e856,0x3a90d3aa, +0xb9ab2525,0xbb8189d8,0xbb94aad1,0xbb83a638,0x3a5aca90,0x3b34f4f9,0x3aa16137,0x3b827cf4,0x3b979d7b,0x3bcbce50,0x3a283366,0xbb17131e,0xbb870aa0,0xbba02732,0xbb9a2129,0xbb5c6556,0xbb692bfb,0xbb428b62,0xbb916a25,0x3a2af452,0x3a451a5d,0x3b25f154,0x3ae13766,0x3b2785a9,0x3bc0c10f, +0x3b5c065d,0x3b4dfc52,0x3b61c9ed,0x3b1280d2,0x3b23b840,0x3ae5e3df,0x3b32503e,0x3b669244,0x3b0246a4,0x3b8c995c,0x3b87bec9,0x3b620616,0xbaf74f30,0xbb4f1fb1,0xbb57ac82,0x38702077,0x3b0fcd1f,0x3b1d9452,0x3bc45f7d,0x3c05c871,0x3c02305e,0x3a7ff1fa,0xbb45d60b,0xbbbbc7e0,0xbbcad858, +0xbbde1859,0xbba1f009,0xbb985870,0xbb868cb7,0xbb9ecd3e,0xb993007a,0x3a77c35e,0x3b7e296d,0x3b51127e,0x3b59fe04,0x3c007621,0x3becdc17,0x3bbaa23e,0x3bd5ad13,0x3b847701,0x3b09f7be,0x3a60a37c,0x3b587edd,0xbb580ca0,0xbbddea8a,0xbc0333d9,0xbc2b9dc1,0xbc5d36f6,0xbc48baaa,0xbbfccaf0, +0x3bcf6d3c,0x3baadb4c,0x3bcc322f,0x3c352f18,0xbba292a4,0xbc3631e1,0xbc1aa31b,0xbb4b309a,0x3a83f2a1,0x3b5657cb,0x3b92471a,0x3b739daf,0x3a411fe2,0x3988942d,0x3a2e1e5b,0x3b450300,0x3b0d240c,0x3b090f91,0xbb838f8b,0x3c0b0afd,0x3c0ec003,0xbabdd8c3,0xbac1e42f,0xbbd1526d,0xbc0cea28, +0xbb721b4d,0x3b51ab64,0x3bf83743,0x3b226229,0xbb61cd35,0x3b10bc2e,0x3b9df9fa,0x3bdca65b,0x3c75ae1d,0x3c53ec42,0x3c49a01e,0x3bb9c682,0xbacf2665,0xbb526f5a,0xb996ab0f,0x3c039fab,0x3c202f01,0xba9654dc,0xbb2ca894,0xbba19229,0xbb589d96,0xbb2cdbcc,0xbb4577d7,0xbb9b1eb0,0xbb686590, +0xbb30d63a,0x39c5cd42,0x39c68213,0x3b11ce2c,0x3b2a34bc,0x3a2d40c4,0xbae31e26,0xbb9bc29d,0x3a8945ed,0x3b8f6a51,0x3bc7cf82,0x3aeba8ce,0xbbbc4599,0xbc7040fc,0xbc1e50e0,0xbb1548a3,0x3a86a8a4,0xbc5188e3,0xbc205c2b,0xbbbe7452,0xbc15740b,0xbc04932b,0x3b96147e,0x3b8c1281,0x3b9255b7, +0x3adf1148,0x3b96a391,0x3b3a57d9,0xba017f86,0x3abfe61c,0x3a8b91a9,0x3b803332,0x3ae7087c,0x3acf6bcd,0xba56ebec,0xb7aa5d1f,0x38cd94c4,0x3ac7070f,0x3a951a92,0x399900be,0x3a850bd3,0xba91a667,0xbb256e91,0xba3d378b,0x3a32c018,0xb88991ba,0xbab14fb6,0x3acabc1e,0xbb50ba34,0xbbabefae, +0xbbcb4116,0xbbadb66a,0xbb8a9038,0xbc2bad61,0xbc203bfc,0xbbc20400,0xbc61d163,0xbc3c1d6a,0x3bccc1c6,0x3bcadd3c,0x3c0e8895,0x3bfc7f73,0x3b8a37eb,0x3b376fc6,0x3b90ef37,0x3b7f7e31,0x3b5c988a,0x3afbf5d4,0x3a3193a4,0xba0d213d,0xba61b988,0xba459c3b,0xba75d0a8,0xba227ae4,0xb977dd4c, +0xb9fd260b,0xba82bb65,0xba8295b3,0xba60fb10,0x3a7f6880,0xb9fc3419,0xbab60082,0xbbb2eca7,0xbaef901d,0xbaaaf33e,0x39b3cb11,0xbb956f27,0x3b560bfa,0x3ad8fdf6,0x3b9468d4,0x3b12c9a7,0x3b832b74,0x3bacc3cc,0x3bd8674a,0x3b3b033a,0x3a4cca7c,0x3b1fa1fc,0x3c109fef,0x3c190a59,0x3c0b2903, +0x3bd2ee7c,0x3b05bbdd,0xbab39fd8,0xbb90f66e,0xbb89fc6e,0xbb9d2e6e,0xbb814e24,0xbba23696,0xbbabc4f9,0xbb8fd06f,0xbb2cc86c,0xbab65aab,0xbaafe80e,0xb91cb80d,0xb9d227ac,0xbb0f8ad6,0xba6a2f1f,0x3a2cdb08,0x3b25d630,0x3aae6829,0x3b1db481,0x3baa028e,0x3b93567e,0xbb5ca1ef,0xbc03c561, +0xbba124ea,0x3a0c3a33,0x3aa199ff,0x3be6854c,0x3c1afbfc,0x3c3857d5,0x3c351bee,0x3c390839,0x3c240a49,0x3bdd4bde,0x3b44708f,0x3ab5773d,0x3b08855e,0x3b0d00ee,0x3b13b49c,0x3af73635,0x3ab0c36f,0x3a829db6,0xba07ffad,0xbb0ef804,0xbb8e9719,0xbb9ba83b,0xbb52aa70,0xbade1c64,0x3ae7a14a, +0x3b4fbbf3,0x3b0a0973,0x3b2ba14a,0x3acc5667,0x3a516bd0,0x3b52ffd9,0x3b3ba474,0x3a4e88fa,0xbacef1c8,0xbaab7388,0xba20e11f,0x3b7832ef,0x3ba4ddf4,0x3bdd5e37,0x3ba6d0bf,0x3b8558fa,0x3b22b209,0x3b08fe63,0x3b02c28e,0x3b20e98a,0x3aca6231,0x3afe2d63,0x3b0feb56,0x3b20ae23,0x3b1427ed, +0x3a029d50,0x3a9a2604,0xb965e03e,0xbacb6825,0xbb72da95,0xbb995298,0xbb65acce,0xbb56dbe9,0xbb483e82,0xbb67678b,0xbb25f55b,0xbaf781c0,0x3934a9df,0x3a6a39de,0x3b142083,0x3b5484de,0x3b65fefb,0x3b5dafdb,0x3aa51091,0x398391e4,0xbb99d16a,0xbb790fe6,0xbb10af3e,0xba6290a4,0xba3d4e83, +0x38528b14,0x3a627e17,0x3b128652,0x3b182586,0x3aeebb73,0x3aaa5144,0x3a1e5f75,0x3a0b77a5,0x3a762a97,0x3ab05695,0x3af6f70d,0x3ae2622d,0x3a5b5a70,0xb9fdb1fe,0xbaf1de32,0xbafbbd79,0xbb2c1b36,0xbb545326,0xbb487943,0xbb44f852,0xbb62a758,0xbb6ae6f7,0xbb5aa083,0xbb38f5d0,0xbb42036a, +0xbb6ab1f6,0xbb993ac8,0xbb8cd451,0xbbb34292,0xbbe6dcba,0xbbc12720,0xbb895933,0xbb4552c1,0xbb2e61c1,0xbaffd7b5,0xba947245,0xba2edb3f,0xba026931,0xb98537ea,0x399f457f,0x3aa7cafd,0x3b1073c6,0x3b1469fe,0x3b1a2d3f,0x3b080cc8,0x3ae64c1f,0x3ad22d16,0x3ae5ea2e,0x3a3c376e,0xb9939e57, +0xba25bd38,0xba65db2a,0xbaa93285,0xbaed687a,0xbb06147f,0xbb2368d7,0xbb356257,0xbb5120d3,0xbb804d3b,0xbb99360f,0xbbafabb3,0xbbd2659f,0xbbdc56da,0xbbed31da,0xbbf97a74,0xbbf92444,0xbbb0b161,0xb96a57b3,0xba378508,0xba203437,0xb8938ef1,0x39585d05,0x39f0dbf3,0x3a941ee4,0x3ad0ba59, +0x3ab978a6,0x3a4130c9,0x39a2eac6,0x397be542,0x39a50ac1,0x3a1df00c,0x3a23c19f,0x39cfc1b4,0x398fba87,0x3a0a01c0,0x3a35be12,0x3a30a5ab,0x3a2ea2cd,0xb80ce0e6,0xb9dec200,0xba883981,0xbabd015b,0xbafec5fa,0xbb123d51,0xbb0547d2,0xbaf3b726,0xbb128d4b,0xbafbb2fb,0xbb16b063,0xbafa12f4, +0x39172f00,0x38de5ed6,0xba581f5e,0xbaffc446,0xbafcc941,0xbae4806a,0xbadb3a39,0xbac7b627,0xbac5bbe8,0xbac5bee3,0xbac17397,0xbab46cdf,0xba8a697c,0xba54218a,0xba3c8f48,0xba42a857,0xba570dfc,0xba770b62,0xba70eb55,0xba7e85ec,0xba9034c7,0xba9a1e37,0xbaa6f22a,0xba9b67fe,0xba92f352, +0xba808e79,0xbaca809f,0xbabf3f60,0xbaaa90fc,0xbac0a55c,0xbadb013c,0xbb067c0c,0xbb140153,0xbb12629f,0xbb2daf9a,0xbb3aaa2d,0xbb36251a,0xbb1a7f95,0xbb10df7a,0xbb247165,0xb8c8006c,0x39539d15,0x392d20f1,0x39c58920,0x3993ddaf,0x39095faf,0xb941d995,0xb98618b0,0xb9999bb7,0xb806413b, +0x38920ce9,0x38738eb7,0x39a8b9c6,0x39da1cf1,0x3a2cf337,0x38caad8e,0xb93623bc,0xb9eb090d,0xb9fb89bb,0xba0205b8,0xb9ffa052,0xba02700c,0xb9eae231,0xba29d1e2,0x38bc65ea,0x38dff8ba,0xb9341f9d,0xb8e93300,0xb90bc001,0xb91d50fe,0xb91306db,0xb83118c9,0x399d0500,0x380eae3a,0x3537bc11, +0x38a551bb,0x392edc1d,0x3a2de9f1,0x38c7e345,0x3a14a911,0x39cea395,0xb8eb88a7,0xbac40eab,0xbace5fd6,0xbaa2de7e,0x39707b28,0x3a4dc0fa,0x3963e6e2,0x3a5f6fcb,0x3aab5251,0x3b0cf5b8,0x3a1c382e,0xb9c6db9f,0xbaa68242,0xbabb6b97,0xbac85439,0xbaace9e8,0xbaa71990,0xba974787,0xba8f53c7, +0x38e64c89,0x3a06bf3f,0x38f5a6af,0x399facf8,0x39c64afe,0x3988ffdf,0xb95378d1,0xb9f6f358,0x3a699953,0x3951670d,0x3a227008,0x3a822471,0x3a6a8f08,0x3ad99d51,0x3a68fcab,0x3b1735e3,0x3ae6e4e4,0x3a71b1c0,0xba9cb707,0xbb02ea5e,0xbacc2bde,0x3995f311,0x3a95e7f0,0x3a3efc6a,0x3b1ad51f, +0x3b4d021e,0x3b8d4be4,0x3a93a3dc,0xba2ec129,0xbb2702e8,0xbb30912b,0xbb4a78d5,0xbb2f0578,0xbb2e1530,0xbb0f9127,0xbb0b9f59,0x39d02d35,0x3a9b4f2c,0x3969f5e4,0x3a891606,0x39a68236,0x39e58e54,0xb95331e4,0x39bf5164,0x3b10d081,0x3a4aa32d,0x3a38dffd,0x3ac2da29,0x3ad000be,0x3b155a1d, +0x398346d0,0x3b1fbd5d,0x3afa18e7,0x3a1108d9,0xbb489d38,0xbb7f7d82,0xbb7fe730,0x3ac47bf6,0x3b3eb6bc,0x3a22eac3,0x3b5995c0,0x3b8cda90,0x3bfd6253,0x3b059320,0xba785004,0xbb6bbc75,0xbb934803,0xbb98a47d,0xbb70ae23,0xbb668608,0xbb219006,0xbb5834f6,0x3adb8230,0x3ad9c3f5,0x3b00d5cf, +0x3b0cc1f8,0x3b201697,0x3b7c2472,0x3aea4633,0x3aee4865,0x3b543896,0x3ad3baa9,0x3b14c5e5,0x3b380505,0x3b2edaea,0x3b6ff564,0x3b2c824b,0x3bacafe9,0x3ba77e5a,0x3b83e651,0xba97ebb2,0xbb06d687,0xbb2ec745,0x3a252b18,0x3b0ca51b,0x3ac2e71b,0x3ba54b1e,0x3c020e37,0x3c22626f,0x3b3dd36f, +0xbab356c9,0xbba3aa8d,0xbbbb1285,0xbbdb8b9d,0xbbb0abff,0xbb9e9da7,0xbb76bc2a,0xbb819709,0x3a3fe8de,0x3af607a2,0x3b5e0d48,0x3b59174c,0x3b4ee18c,0x3bcdf36a,0x3bcd9b1c,0x3b9ec917,0x3bd3a1a1,0x3b4862a7,0x3aac933e,0x3b101a07,0x3b4d5d17,0xbbb1c84d,0xbc0d7344,0xbc19039e,0xbc383cfa, +0xbc4c4916,0xbc3e80c2,0xbbfd1a14,0x3bc4e6eb,0x3baf1df9,0x3bdfea54,0x3c42b244,0xbb426f11,0xbc24e733,0xbc25c53a,0xbb8c99de,0x39b2b013,0x3b757fbc,0x3bb938fc,0x3bb50c69,0x3b14b37e,0x3af918dd,0x3b07b0cc,0x3b94e072,0x3ac2abb2,0x3ac567a5,0xbb6349a1,0x3c09fbf5,0x3c0bf8d4,0xba8c316f, +0xbb12642d,0xbbe62045,0xbc0f05ad,0xbaba11cf,0x3b95764b,0x3bc57b31,0x39f1b518,0xba4a5e28,0x3bbed6fb,0x3c0aa49b,0x3bed3358,0x3c1f7153,0x3c4e3cd4,0x3c53c0b4,0x3bd483b7,0xbaa28987,0xbb5e920c,0xba20afb9,0x3bfd3a8b,0x3c2a8077,0x3ac897e8,0xbadf3479,0xbb94f611,0xbb595ae9,0xbb285b99, +0xbb272003,0xbb938a59,0xbb404114,0xbb0f4704,0xb9d942d5,0xb87372c7,0x3accf53e,0x3b0f13ec,0xb98f9f76,0xbb2aff0c,0xbb98bc8e,0x3afdc613,0x3b93a24e,0x3b8c8ad3,0xbae7a109,0xbc0dde06,0xbc5b9685,0xbc0a7d16,0xbb092612,0xbc00dd3a,0xbc720c3e,0xbc116657,0xbbc565ac,0xbbbdaa1f,0xbbc6321a, +0xbb3f9a97,0x3bc35b88,0x3bf19843,0x3989a98e,0x3b978567,0x3b3536f7,0xba0983dc,0x3a6d7889,0x3a7c24e5,0x3b5f1029,0x3b088a05,0x3af17b89,0xbad5f6b8,0xb926bdcc,0x380c03cc,0x3ab986fa,0x39bbe0ee,0xba0c71b1,0x39f1bd88,0xbaaa8fd1,0xbb1018b8,0xba074f50,0x39b419f1,0xba165ecd,0xbb2646db, +0x3abf1e97,0xbafc7cc8,0xbbccb5a2,0xbb821756,0xbb9c4397,0xbc100d03,0xbc3b02e3,0xbc18afab,0xbb4ead5f,0xbc33e193,0xbc28a0ca,0xbaee5c1b,0x3bd50448,0x3c23384e,0x3bc67644,0x3b743321,0x3b06495b,0x3b76cbd9,0x3b6acb88,0x3b5b347a,0x3adc940b,0x3a98876e,0xb9b530e4,0xbaf3cc00,0xbaaef052, +0xbaade7d6,0xb9c0d615,0xba1975ff,0xba1d1201,0xbaad37cd,0xba09a040,0xb9bdbdfe,0x3a443c56,0xba945136,0xbb246794,0xbbc33ce9,0xba4f6a46,0x3a5a103d,0x37fe43d4,0xbb11e656,0x3baa1df8,0x3c03b0a2,0x3c0c719a,0x3b96803c,0x3b958069,0x3baecd8d,0x3bc7bc96,0x3b30b06f,0xbab0502a,0xba3e3d2d, +0x3be1c232,0x3c02a8c1,0x3c017054,0x3bd95ce1,0x3b142dad,0xb9e55e26,0xbb896983,0xbb826b70,0xbb98f390,0xbb86e233,0xbba077cc,0xbba77ec7,0xbb914fef,0xbb0a196e,0xba4ed8c5,0xba6aed52,0x386d0f5e,0xb94567cb,0xbb080c0b,0xb976dd96,0x3a7caa5e,0x3b44337a,0x3a558395,0x3ad43d66,0x3bd556fa, +0x3b9f6ea4,0xbbb69cfd,0xbc39b7c7,0xbc2bec44,0xbbb5f528,0xbb30986b,0x3bb7f087,0x3c117028,0x3c19cd9d,0x3c31b855,0x3c45d59c,0x3c367a13,0x3c0ca8fb,0x3b94b73e,0x3b703cfa,0x3b41888e,0x3b13178e,0x3af8dbba,0x3ad853cb,0x3a2cc674,0xb99da7a6,0xbae2e9e2,0xbb56d179,0xbb941080,0xbba3ac8e, +0xbb47f1a8,0xba2c195e,0x3adda0f2,0x3b2a0fc9,0x3adb4208,0x3b3d8172,0x3b00e146,0x3a8fb9f1,0x3b37f7b5,0x3b1ef279,0xb960f223,0xbb131df5,0x3acc0176,0x3b3c8424,0x3bdb0122,0x3be42cbd,0x3c02b533,0x3bb63cb2,0x3b93f1cc,0x3b3c09d6,0x3affbc11,0x3aac927a,0x3adc88d0,0x3a951269,0x3ac1e3f8, +0x3adf574d,0x3b08c797,0x3af91cb8,0x38af2ec8,0x3a08721f,0xba662e05,0xbb1fddf4,0xbb803db8,0xbb941e1f,0xbb3eb1a2,0xbb5375ec,0xbb501070,0xbb5e2b3c,0xbb0c8bbf,0xba78905c,0x3aa3e54e,0x3b26721a,0x3b85723b,0x3ba4ef10,0x3bb63b4b,0x3bbaf7dc,0x3b94ffe5,0x3b4e3c3f,0xbb6cda4a,0xbb6a1b38, +0xbae8bb42,0x373403fb,0x3a91bd93,0x3aa553a9,0x3aa9cb98,0x3ae41fdb,0x3aaec831,0x3a57e3d5,0x37b3058f,0xb9d5c948,0xb9a711db,0x391ce0e0,0x3a237b80,0x3a925db3,0x3a84fa16,0x3699c7fb,0xbab0320f,0xbb36f733,0xbb2e02b7,0xbb46c07b,0xbb5c5119,0xbb56c6b4,0xbb54e86d,0xbb71cc96,0xbb5a216e, +0xbb3825e6,0xbb0beece,0xbb02d83c,0xbb1de850,0xbb57ec80,0xbb38cf48,0xbb77113a,0xbbaa8ae9,0xbb92b9bd,0xbb994106,0xbb6345d6,0xbb2d6742,0xbb008bd9,0xba90e118,0xba4b9e14,0xba0439c4,0xb97fff94,0x3958c08e,0x3a570c43,0x3ab22fd3,0x3acdf036,0x3ad3986f,0x3ac145b3,0x3a8881ba,0x3a576f84, +0x3a810bd3,0xb8f821b3,0xba997364,0xbad3232b,0xbae5c6f2,0xbb00d08f,0xbb1e215a,0xbb225ae7,0xbb3a0785,0xbb54d066,0xbb651ff4,0xbb8a6aa3,0xbb99c85f,0xbbae6900,0xbbcaf0d9,0xbbcd8c17,0xbbe2af0a,0xbbfbcaae,0xbbfc8908,0xbbbb1604,0xba63adb2,0xbacb08a8,0xbab9c975,0xba2305de,0x37bb9f0d, +0x39da6bfa,0x3aa549b7,0x3af2d81c,0x3adaa2b6,0x3a8b5063,0x3a412033,0x3a1424a3,0x3a0f32f5,0x3a37e16a,0x3a113463,0x391d923b,0xb9469f8d,0xb8b8716f,0xb84acd04,0xb97b8d7f,0xb891f911,0xba4c5024,0xba902880,0xbae83dbf,0xbb0808c3,0xbb1d76cb,0xbb371ffb,0xbb2afc60,0xbb27ac80,0xbb48039e, +0xbb3831d0,0xbb5b3f6d,0xbb3f0039,0xba104e8f,0xba14df96,0xbacca5ae,0xbb27657f,0xbb22644e,0xbb10486c,0xbb09d407,0xbb0029b7,0xbafd2d45,0xbaf1713a,0xbadfdd33,0xbada979a,0xbab91b34,0xbaa1551a,0xba9830d5,0xba996852,0xbaa0ba02,0xbab26f52,0xbab047d9,0xbab82d31,0xbacaa622,0xbad70866, +0xbaecde4d,0xbadf016d,0xbadb9695,0xbac97cd2,0xbb05bef0,0xbb024c4b,0xbaf67114,0xbb07d13c,0xbb13513e,0xbb2bfc28,0xbb37bc4b,0xbb33c9c9,0xbb4d73d5,0xbb5b2b45,0xbb580a67,0xbb465f51,0xbb3bfa7f,0xbb56ea2f,0x38902465,0x39823bd2,0x3996ccd4,0x3a0e1b8e,0x39e70178,0x39995526,0xb7de9210, +0xb8ba0613,0xb92e5cb4,0x38f401b9,0x393dd3cb,0x384a597c,0x39c73270,0x3a0d1939,0x3a68a051,0x39aef5bc,0x3880c74e,0xb98a5470,0xb9a74c76,0xb9bff834,0xb9ceabfd,0xb9d372c0,0xb9a8605e,0xb9e67b2f,0x397ea2b6,0x395abaf8,0xb91e5c4d,0xb8922eee,0xb91748c6,0xb99735db,0xb93f36c1,0xb886935d, +0x39a15381,0xb74ae91b,0xb6c10958,0x393dd564,0x39495868,0x3a16492b,0x3881f3c3,0x3a3b363b,0x3a3fa406,0x39b6c1a7,0xba878534,0xba9e3056,0xba8ee741,0x3a0f0ada,0x3a823d21,0x390c320f,0x3a54fc59,0x3ab5d3ab,0x3b290a3c,0x3a93e611,0x393f1ba2,0xba71e5d2,0xba993ac8,0xbab3cb8e,0xbaa7751c, +0xba9ad9ef,0xba69f98b,0xb9f6b0f1,0x39f35749,0x3a414c07,0x38b54dfe,0x39f4348f,0x39b4257a,0xb9e05255,0xba3a8504,0xba6beddd,0x3a504e3c,0xb7c945f6,0x3a03817b,0x3aa8fb65,0x3a629768,0x3ac7f4ae,0x3a7c5c1a,0x3b2b6c34,0x3b0dab16,0x3ac0acb0,0xba15c6fd,0xbaae2d25,0xbaac6696,0x3a3d7215, +0x3aaae58f,0x39c831f6,0x3b0b0f73,0x3b4e4848,0x3ba5b897,0x3b06b530,0x398bb4d4,0xbaff8b99,0xbb1363c7,0xbb393454,0xbb30a19c,0xbb27dfcb,0xbaebf159,0xba91f582,0x3a6a4580,0x3ac79706,0x38daaa1a,0x3a8c3ea7,0x3745441a,0xba5af6b4,0xba7a9882,0xb99e47b7,0x3af30cb6,0x39450214,0x3990721a, +0x3afa97d5,0x3ab1b9a7,0x3aedceed,0xb900b107,0x3b258090,0x3b278d62,0x3accb04c,0xbaf6d79d,0xbb4152ed,0xbb77454c,0x3b1231a2,0x3b52adff,0x392077e0,0x3b40e220,0x3b85df33,0x3c0e6175,0x3b5c34f4,0x39f65019,0xbb3bc2f7,0xbb801ca4,0xbb8fa2d4,0xbb7d03bf,0xbb5e3ceb,0xbaf946b7,0xbaec912d, +0x3b261778,0x3b1f619e,0x3ac6ab77,0x3b22f1f8,0x3b0d52d9,0x3ac4f300,0x3923948d,0x39c50378,0x3b35cf24,0x3a4b508d,0x3aea6d28,0x3b707506,0x3b1fc8c2,0x3b5bf7e1,0x3b3c8be9,0x3bbaefd3,0x3bb92a87,0x3b9a4060,0x366a8998,0xba36e0fc,0xbb0c63df,0x3aaafb61,0x3b12a54c,0x3a3ea1cc,0x3b8b9dea, +0x3bfa0de4,0x3c38bbe5,0x3b9b4933,0x39b6a979,0xbb811469,0xbba1ae5c,0xbbce3d65,0xbbb871b3,0xbba0ef4b,0xbb4f0a27,0xbb269c37,0x3adba399,0x3b2e5719,0x3b438c8c,0x3b6564bc,0x3b43a874,0x3b87c9d3,0x3ba1e275,0x3b70ef5d,0x3bc09616,0x3af3c537,0x39b0efeb,0x3b5d0412,0x3b2b3381,0xbbe5ce34, +0xbc1f900f,0xbc24d1da,0xbc3a31f2,0xbc35240b,0xbc2c0697,0xbbec9d50,0x3bb7eba5,0x3baf8b92,0x3bf485a3,0x3c4c8cd4,0xba5ef42a,0xbc10a2e6,0xbc2f5162,0xbbbe9fe9,0xba373488,0x3b841be8,0x3bd9e471,0x3bf51a9c,0x3b9e2d77,0x3b82218b,0x3b65422c,0x3bb5bd45,0x3a4c18a0,0x3a540fd4,0xbb251d1b, +0x3bf68722,0x3bfdb659,0xba13513b,0xbb203439,0xbbe12a45,0xbc096d99,0x3969cdf2,0x3ba7ef7f,0x3b959cb4,0xbaa42654,0x3af15685,0x3c0e7df6,0x3c296676,0x3bd5fe51,0x3ba3d619,0x3c44e316,0x3c5ae2b2,0x3beef6fa,0xba39e371,0xbb6c8d9b,0xbaceb3b6,0x3bd44185,0x3c2685c4,0x3b9d827a,0xba20a3f9, +0xbb82ab1a,0xbb426cf3,0xbb1a0063,0xbaf0919d,0xbb6fb0ce,0xbaf1302d,0xbaa94c47,0xba97919f,0xba14514d,0x3a48d87e,0x3afac4c0,0xba8ca0ab,0xbb52f0be,0xbb87b872,0x3b130955,0x3b83cea7,0x3b224c0b,0xbb925b86,0xbc2dad3f,0xbc45ff8b,0xbbdd5f43,0xbb0585f9,0xbc836990,0xbc7e4f50,0xbbfcd8d3, +0xbbd227a4,0xbb563872,0xbb834c64,0xbc0a02e4,0x3bf31c52,0x3c1b829b,0xbab9393f,0x3b857cb0,0x3b1dcdf5,0xb80d0486,0x39b8f0fc,0x3a42ea47,0x3b304b6d,0x3b07c352,0x3afdfc68,0xbaff5f96,0xb90ebba0,0x393f8d26,0x3aa51151,0xb98645eb,0xba95cf5c,0xb92a9f50,0xbaac42e5,0xbad6c495,0xb9b2696d, +0xb75b4695,0xba67683c,0xbb4bf2e3,0x3ab06de5,0xba50916c,0xbbfc81da,0xbade0e7c,0xbb8d3c81,0xbc521408,0xbc3aa481,0xbc08ab16,0xbae80291,0xbc126d36,0xbc17a21d,0xbc0356ec,0x3bde15b3,0x3c30e59f,0x3b6eee47,0x3b44ddba,0x3abc45b4,0x3b4061f5,0x3b50d38f,0x3b4d160c,0x3ab4315c,0x3a9eadc6, +0xb9c5bbb5,0xbb2d5527,0xbaf93af4,0xbacf622a,0xb83b6c8a,0xba49a376,0xba214312,0xbad9859e,0xb8b6c87d,0x39198951,0x39cb11cc,0xbabcb12e,0xbb4a92ca,0xbbbe60ed,0x39e22953,0x3b321ed0,0xba8ac677,0xb90b0d79,0x3c00b86c,0x3c6d54ca,0x3c46307f,0x3bd1213e,0x3b8c1373,0x3b8ffa83,0x3b98d622, +0x3b20b832,0xbb422b3f,0xbb56f22f,0x3b92e537,0x3bd0e500,0x3beaa993,0x3be0f9e9,0x3b2a0a48,0x3a055673,0xbb60b393,0xbb667807,0xbb8db707,0xbb8c0cff,0xbb9bbc79,0xbb9f0e8e,0xbb8b2b1c,0xbae234b6,0xb9db10bc,0xb98e11bc,0xb84dccf3,0xb977a10c,0xbae78f25,0x39eeb282,0x3aaf36e1,0x3b555fbb, +0x3a077113,0x3a5f594c,0x3be1f6e7,0x3bb589bf,0xbbf42abe,0xbc572b84,0xbc67f696,0xbc1eb5af,0xbb9eb6ea,0x3b84b503,0x3bf8ccae,0x3bf5e0a1,0x3c2a6cdd,0x3c49f05c,0x3c359af8,0x3c1bb926,0x3bb4dd58,0x3bb6d502,0x3b780bf3,0x3b186b07,0x3ac2b420,0x3a8f9df1,0xb9a8655f,0xbae93720,0xbb431525, +0xbb8a6455,0xbb9b4cba,0xbba44e99,0xbb3d15c4,0x3917bcdc,0x3aa62300,0x3ae94817,0x3aa36ecc,0x3b3c6138,0x3b084738,0x3ab67002,0x3b0514f4,0x3af717bd,0xba2d29e4,0xbb2e15e7,0x3b8d71e1,0x3bbd5e4d,0x3c0d806f,0x3c01c7f1,0x3c0648af,0x3bb62366,0x3b9d30f9,0x3b5afb30,0x3b0dc51e,0x3a8a6ac4, +0x3a9d7cc9,0x3a6caae4,0x3a812b9a,0x3a8e28e1,0x3ac4a76e,0x3ab1be3d,0xb9802711,0xb8d50d8a,0xbaae9ceb,0xbb436a37,0xbb718b3f,0xbb834f50,0xbb275d50,0xbb517203,0xbb57f449,0xbb530751,0xbad18b16,0x36b3ed57,0x3b11a12c,0x3b7d3f4f,0x3baebd4e,0x3bcc3712,0x3bdc4e45,0x3be5ec1f,0x3bd7fd5e, +0x3bb60a3a,0xbb209f7f,0xbb4d6d96,0xbaac90f7,0x3a5d3bf3,0x3b30c772,0x3b178941,0x3ad8ac8c,0x3aa08df4,0x3a0f3b7c,0x389fcb5c,0xba6d1660,0xba9aee17,0xba83f2f8,0xba0ffbd7,0xb8e079fc,0x39a7382b,0x3995473f,0xba3ad2e3,0xbafc8089,0xbb568cec,0xbb50c0d4,0xbb5cb232,0xbb6ab583,0xbb6d2256, +0xbb6d71f1,0xbb832a9e,0xbb506c96,0xbb182b8f,0xbac20dd5,0xba9017b8,0xbaa89977,0xbaf6ba27,0xbac8af8b,0xbb14a82a,0xbb6bdca4,0xbb491279,0xbba08af6,0xbb6d8eb3,0xbb228d6e,0xbafabbe8,0xba897f6c,0xba5d55fc,0xb9e7b5cb,0xb90aeadf,0xb599d759,0x39352c5e,0x39925bdb,0x3a41c371,0x3a4fc2c6, +0x3a5b7a46,0x3995253d,0xb80ea67f,0x36bbdaee,0xba82d585,0xbaff2b6c,0xbb1c0008,0xbb284317,0xbb30c295,0xbb4db9c3,0xbb4b33af,0xbb5f3051,0xbb7f76b1,0xbb80ba2f,0xbb93dd7f,0xbb9c1520,0xbba89255,0xbbbe9da9,0xbbb75f24,0xbbcf1586,0xbbf1a618,0xbbf56703,0xbbbce27a,0xbaed343b,0xbb2a0fad, +0xbb1c818d,0xbab9beae,0xb9fee265,0xb8328500,0x3a60b825,0x3ac52fd9,0x3abd8580,0x3a89b38f,0x3a63065e,0x3a198dc3,0x39e8a13a,0x39f7c15c,0x39430ac8,0xb997ee22,0xba45d4be,0xba51a724,0xba686c7c,0xbaa18026,0xba7c4247,0xbad4b8b2,0xbaf3ad15,0xbb249551,0xbb311c88,0xbb3abd32,0xbb5bc465, +0xbb52ba74,0xbb573412,0xbb80743d,0xbb745d09,0xbb92c09c,0xbb840142,0xbace2d30,0xbacc74bf,0xbb22f529,0xbb40a8ae,0xbb37d544,0xbb237ff0,0xbb1c8b97,0xbb13c9ef,0xbb116612,0xbb05e6fb,0xbaf19062,0xbaf77c7f,0xbae48c17,0xbad5e10d,0xbacc6401,0xbac7792c,0xbac9b6b9,0xbadc2606,0xbadddf84, +0xbae86c71,0xbafb5246,0xbb0449ec,0xbb11c0ae,0xbb0bc75d,0xbb0d5ea7,0xbb05e152,0xbb20af8a,0xbb207083,0xbb1ca9f5,0xbb2ade15,0xbb332309,0xbb4a1f2d,0xbb538f39,0xbb4ce7f2,0xbb624e9e,0xbb6c35c1,0xbb69a30d,0xbb62c029,0xbb580686,0xbb77da08,0x399d57ab,0x39ab767e,0x39d335bb,0x3a331b7e, +0x3a1ce16f,0x3a05769e,0x394811a3,0x390b231b,0x34e9142b,0x39a621e4,0x39b69130,0x38c52033,0x39fcb644,0x3a345d42,0x3a8eac5e,0x3a1a7ba2,0x39af2a4c,0xb75981c2,0xb8d28ea2,0xb93c7a7d,0xb9802ff7,0xb96eb1aa,0xb8ef48ca,0xb91a7f81,0x39e026f9,0x39bd8333,0xb84d4247,0x380c9e61,0xb8bed2ff, +0xb9ae56a5,0xb928f970,0xb81efa21,0x39bfcfc5,0x373dd30a,0x3851f5d4,0x39bb2371,0x399366fb,0x39fdd49d,0x38a765a9,0x3a634f80,0x3a8d59dc,0x3a6c8f5d,0xb9fd5571,0xba3fa1a9,0xba622afc,0x3a75e819,0x3aabde55,0x394b2a6f,0x3a7affb6,0x3acf2512,0x3b3dd087,0x3ada6b0a,0x3a51d31d,0xb9e7d969, +0xba511c5f,0xba91470a,0xba964e0f,0xba8218d8,0xba10b346,0x396edf47,0x3a5a25f1,0x3a778988,0x390b7bd0,0x3a1d496b,0x39a27960,0xba7afb2d,0xba967942,0xbaa64136,0x3a3bbb1b,0xb9612d21,0x39cbf786,0x3ad2cd3a,0x3a508293,0x3aa8da73,0x3a7f20a1,0x3b30c1c2,0x3b207954,0x3b0d545e,0x3955dba3, +0xba05c2b2,0xba835fbe,0x3aa997c4,0x3ad6467d,0x39618447,0x3b07475f,0x3b551973,0x3bb47f20,0x3b41728e,0x3aa46d76,0xba92a0e6,0xbad628b6,0xbb1c5952,0xbb269a20,0xbb166951,0xbaa9f51b,0x37003764,0x3ab0cf25,0x3ae6606d,0x38b408a7,0x3a81b7fb,0xb9b6472f,0xbaefbc2e,0xbae0c4d5,0xba835ff7, +0x3ac09d9d,0xb9d1d346,0xb9131ff0,0x3b1c1c91,0x3a8847d4,0x3a95f37c,0xb9db9dec,0x3b2541fa,0x3b4cdae7,0x3b33d7d3,0xba166eae,0xbaef97d1,0xbb6408c0,0x3b473516,0x3b75ef4d,0xb6a0fb84,0x3b428626,0x3b86b737,0x3c153df8,0x3b982ec5,0x3b01108b,0xbaf07eb5,0xbb4a0cb7,0xbb7be66d,0xbb7ed76e, +0xbb4cd634,0xbaa6981a,0xb89325cc,0x3b50216b,0x3b4588c8,0x3a94db0e,0x3b2d92ea,0x3adc1725,0xba498943,0xbac26fa3,0xba91f87e,0x3b0e243f,0xb93541c6,0x3a94df4d,0x3b90b02e,0x3b01faae,0x3b30572f,0x3b3da169,0x3bb80907,0x3bbfe6e9,0x3bb71904,0x3abbb76c,0x3a5c18d4,0xbac64d14,0x3b11753a, +0x3b2b9fc9,0x398f59a7,0x3b7649f7,0x3bf032e0,0x3c4342bf,0x3bd3f7e6,0x3b0dc776,0xbb2212db,0xbb7bb400,0xbbb4a0d2,0xbbb7855e,0xbb99f286,0xbb1841c9,0xba2ab117,0x3b25890e,0x3b528012,0x3b2e2cf7,0x3b6a5026,0x3b315b85,0x3ae49cb6,0x3b541a0b,0x3b0de8dc,0x3ba128d8,0x3a03e342,0xba346e55, +0x3b94303c,0x3af5f407,0xbc06662e,0xbc259377,0xbc282478,0xbc32dc2a,0xbc177fe7,0xbc162773,0xbbd8c0bc,0x3b9e3d75,0x3bad3d28,0x3c07815e,0x3c566613,0x3aac9a71,0xbbef025d,0xbc326cd5,0xbbf0d623,0xbafeb851,0x3b880843,0x3befcec9,0x3c14f45f,0x3bfbeafa,0x3bcb7282,0x3b97b784,0x3bbde9b2, +0xb62ab19f,0x38e28e39,0xba9c31fa,0x3bc4b2ed,0x3bd05a16,0xb91d92a0,0xbb1006f6,0xbbc38d69,0xbbedf1c1,0x3aafb6c1,0x3ba4cc6c,0x3b4ab73b,0xbb38b88b,0x3b99c5c2,0x3c336c5b,0x3c263c66,0x3b98236c,0x3a8011b7,0x3c3b4ec9,0x3c63ba05,0x3c035d73,0x39110fe9,0xbb75f62b,0xbb501a9e,0x3b94ba4c, +0x3c150cc7,0x3c01f7bc,0x3a281a5c,0xbb4f69b7,0xbb1564f8,0xbb04e9e3,0xba8c1ca6,0xbb157d9c,0xba02c12b,0xb94ebbaa,0xbae0f03f,0xba80b4ad,0xb886923c,0x3adfade7,0xbad92677,0xbb64b3bc,0xbb601397,0x3b080417,0x3b522f78,0x3a5ad92b,0xbbce3c13,0xbc3c494a,0xbc2e8d66,0xbb8411aa,0xbb3c5cc4, +0xbcb497ac,0xbc6ae96a,0xbbc1fe25,0xbbd8ef35,0xbad4ebbe,0xbb1b37e2,0xbc3bdfea,0x3c02af91,0x3c2879b1,0xbb3f7bcb,0x3b41791b,0x3adaa7bf,0x3a20623e,0xb960c2ff,0x39f899cd,0x3b02244b,0x3aeed0e3,0x3af8ad63,0xbac3e132,0x396d37ac,0x3a103e2d,0x3a8debd9,0xba34f0a9,0xbaca60fd,0xba44eb64, +0xba9ea217,0xba7d48af,0xb8f468b7,0xb9c503a0,0xba886e10,0xbb3ba2a6,0x3a8af994,0xb9598e27,0xbc13375a,0xb9f2b878,0xbb9931e0,0xbc8056a9,0xbc222036,0xbbd91164,0xba99f4ed,0xbc00b572,0xbc11133e,0xbc43cd9f,0x3bd08657,0x3c2fc330,0x3a9e1032,0x3b1335ad,0x3a6bb7ac,0x3b00fa12,0x3b2d87e1, +0x3b318f3b,0x3aa363ff,0x3a8a43d4,0xb9f753ff,0xbb3cd02e,0xbb0a274f,0xbacb9b63,0x39ab244b,0xba587280,0xba1d00c1,0xbafb310d,0x398a998d,0x3a0b0c7d,0x38d49661,0xbac89d65,0xbb541e32,0xbba39427,0x3ad71f88,0x3b813618,0xbb22e08f,0x3a332a75,0x3c37628a,0x3ca5caa3,0x3c68abe7,0x3be2097a, +0x3b4d5ced,0x3b2f9010,0x3b3e69e6,0x3b21ef20,0xbb6e8ce3,0xbb9ef15c,0x3ab12691,0x3b9b3aa7,0x3bd4aa83,0x3be5e195,0x3b471ea0,0x3aa14541,0xbb14d10d,0xbb3d8383,0xbb793c9b,0xbb8a4a07,0xbb91c3ef,0xbb8f7e6d,0xbb7295e7,0xbaae7f56,0xb94270b2,0x39dd9d4b,0xb99a8207,0xb9e019f8,0xbaad135c, +0x3a89403c,0x3adb1190,0x3b4f1ccb,0x3a1a26b9,0x39ca5433,0x3bcd3680,0x3be101f3,0xbc134e25,0xbc5bcabf,0xbc7e0e81,0xbc3d7b77,0xbbb59267,0x3b0f79b7,0x3bb28978,0x3bb444fe,0x3c192de0,0x3c442dff,0x3c2d17c5,0x3c2067ad,0x3bc3d798,0x3bd9ce9e,0x3b8cf934,0x3b1b44b2,0x3a88b8f0,0x39a64fb9, +0xbac0e290,0xbb52fe2d,0xbb83f9fb,0xbb9f7bc5,0xbba65346,0xbb9da820,0xbb31fae3,0x3a0a7492,0x3a31911d,0x3a782348,0x3a597c41,0x3b24d526,0x3af85e6f,0x3ad75c32,0x3a8a0029,0x3a9fcca8,0xba4b147e,0xbb464216,0x3bd36982,0x3c007438,0x3c19db26,0x3c00387c,0x3bf7510c,0x3bad5659,0x3ba70561, +0x3b85fad3,0x3b3065e9,0x3a8d5f36,0x3a70e7c5,0x3a519f22,0x3a2a3677,0x3a25dbc3,0x3a713e93,0x3a4cd2b9,0xba1a0c5c,0xba33bb9c,0xbacf176a,0xbb4827cc,0xbb519439,0xbb58f6b9,0xbb18db86,0xbb4aff95,0xbb56813c,0xbb3de6f2,0xba5ebd4a,0x3a7ee08f,0x3b48004b,0x3b9d6bcf,0x3bc28958,0x3bd96dd0, +0x3be4d56b,0x3bf0128c,0x3bf645d9,0x3bea6ac7,0xbacac0ea,0xbb2dec35,0xba7744d8,0x3abaf55d,0x3b727307,0x3b3e8a9a,0x3aecbb8d,0x3a661d47,0x3908db4a,0xb94d691f,0xba9267cd,0xbabc5722,0xbaadf7a9,0xba85a742,0xba2d5f81,0xb9a56128,0xb9e279f8,0xbaa4d11a,0xbb110f1d,0xbb55ffc5,0xbb5b6763, +0xbb646a60,0xbb7471ff,0xbb7d503b,0xbb7ef309,0xbb85ed55,0xbb42fcd4,0xbae91985,0xba53d2b7,0xb9857341,0xb97154a7,0xba02cd08,0xb9f47691,0xba861a5a,0xbb14cf13,0xbafbe035,0xbb9c2159,0xbb6c13b7,0xbb1c1d5d,0xbb041c4a,0xbaa2f0b5,0xba85d0e0,0xb9ed9a9a,0xb8c70f99,0xb9a57819,0xba06263d, +0xba3f3d53,0xb89dd9d1,0x3730b1f7,0x3951c9ba,0xb9edc53d,0xba628aa3,0xba7f077b,0xbae7f569,0xbb26f14e,0xbb3f6b5d,0xbb4fdce7,0xbb57f156,0xbb74a2f5,0xbb6d4f97,0xbb7ead7d,0xbb8edb09,0xbb8b4c4c,0xbb95e2d8,0xbb9a7f61,0xbb9b0728,0xbbaa123e,0xbb9872cb,0xbbb10f8d,0xbbdba68c,0xbbe268af, +0xbbb34c64,0xbb40ee5a,0xbb72cfc6,0xbb5e26ea,0xbb188a6e,0xba9ed952,0xba6b210f,0xb89a25e8,0x3a0fb02e,0x3a2ea471,0x3a0d901f,0x3a02016f,0x392ba21a,0xb8729461,0xb8bce9e4,0xb9df0fb5,0xba64842d,0xbab514cd,0xbac95cf7,0xbade0de6,0xbb0be00b,0xbaf0bced,0xbb1d9bd6,0xbb27a403,0xbb4cb858, +0xbb51a1d8,0xbb5091f4,0xbb76e0ca,0xbb7339a4,0xbb801ab8,0xbb99e6ea,0xbb9668d6,0xbbb634b4,0xbba7e6e9,0xbb343145,0xbb3169e9,0xbb683a00,0xbb4869d7,0xbb40635f,0xbb2e5457,0xbb28dc36,0xbb214412,0xbb1d8455,0xbb0d405a,0xbafe767f,0xbb069135,0xbb047338,0xbb008ebb,0xbaf580a7,0xbae9c0e5, +0xbae74d64,0xbafb2314,0xbb012dd2,0xbb07ac88,0xbb108c1b,0xbb176489,0xbb25f220,0xbb1ff595,0xbb2322c2,0xbb1de7eb,0xbb30a291,0xbb321f01,0xbb31c301,0xbb41dcf1,0xbb460f51,0xbb59a2bb,0xbb5ffc50,0xbb563f66,0xbb6590ea,0xbb69feea,0xbb696b45,0xbb6b733c,0xbb5fae06,0xbb82f553,0x3a12db97, +0x39df6f5b,0x3a099f67,0x3a501fe0,0x3a41b8e8,0x3a3facba,0x39df0a8a,0x39c23cb5,0x394971fb,0x3a0c870d,0x3a0e1d80,0x394e20f7,0x3a1dddeb,0x3a5abf83,0x3aa23b7c,0x3a5b70e1,0x3a22b65d,0x39960b04,0x3922ad3e,0x382db39d,0xb849506e,0xb7c1989e,0x38c8115b,0x3921d367,0x3a1dfb20,0x3a032823, +0x3882106f,0x39054b9d,0xb8044494,0xb9a80271,0xb917d444,0xb7ebfe95,0x39dc97ce,0x3853e2c9,0x3912ed78,0x3a0f9465,0x39c1c223,0x39a08650,0x3913bacb,0x3a8b576e,0x3abcbf96,0x3abe6788,0x38a4ea93,0xb9622a87,0xba10d338,0x3aacdfc7,0x3ad87c65,0x39d68a90,0x3a9e7ed1,0x3aebecac,0x3b4882c5, +0x3b0ccf6e,0x3aba0efc,0x391dc225,0xb9b526e4,0xba474b72,0xba70a698,0xba4d380d,0xb95e1b78,0x3a632ba0,0x3a944b2f,0x3a902a8a,0x39541d28,0x3a28e8ec,0x39639ce3,0xbaabe92c,0xbac65fd7,0xbac8dc9f,0x3a2c1176,0xb9be68d6,0x39918eac,0x3af68d34,0x3a2b62cb,0x3a7dccab,0x3a7d39c5,0x3b2dcc81, +0x3b2dc629,0x3b38147c,0x3a7e83bb,0x39a07f52,0xba1dfeb2,0x3af42fd3,0x3b049690,0x3995ea49,0x3b081b33,0x3b59c3d0,0x3bb7f3f0,0x3b747704,0x3b1212bd,0xb892c17d,0xba6a7053,0xbaec3905,0xbb10ccaa,0xbaff1e11,0xba4c1314,0x3a874df9,0x3adf6c25,0x3af4f557,0x38d2f89b,0x3a49c8e7,0xba44b449, +0xbb236a55,0xbb1ef09d,0xbaddf01e,0x3a92fbc2,0xba70a1aa,0xba019137,0x3b385ee5,0x3a38f164,0x3995035c,0xba1c2a9b,0x3b2bff82,0x3b741567,0x3b7e0f37,0x3a302932,0xba373a0b,0xbb3f0727,0x3b72d16f,0x3b8cce71,0x39958417,0x3b519dbb,0x3b8998f1,0x3c12e5da,0x3bbc6c8a,0x3b60b2f1,0xba0131fe, +0xbb06e3f5,0xbb4a45ed,0xbb718b9e,0xbb37521d,0xba3911ce,0x3aceac1e,0x3b6856f2,0x3b5b3334,0x3a5b50dc,0x3b23fc22,0x3a7ea9d5,0xbb301b3a,0xbb466ecd,0xbb2671a1,0x3ace5d9f,0xba90ffa2,0x39e1d39e,0x3ba236fd,0x3aad496b,0x3af96dae,0x3b3545bf,0x3babb8ea,0x3bbedcda,0x3bd16e45,0x3b362e6e, +0x3b154347,0xba48787e,0x3b4c7e03,0x3b4b62c4,0x396a991e,0x3b5b45d9,0x3be06d5d,0x3c411ea7,0x3c01d43f,0x3b82506d,0xba151992,0xbb2488d9,0xbb912b75,0xbbaab82f,0xbb8ae9cf,0xbabd96ec,0x3ab2d573,0x3b53f803,0x3b66d964,0x3b1e69da,0x3b5ed1bf,0x3b11f9d8,0xba19a325,0x3aa68c30,0x39edf6b7, +0x3b767e15,0xba69afd6,0xbad9e0ce,0x3bb542b0,0x3a85a7f8,0xbc17beb9,0xbc218f2c,0xbc2165ac,0xbc216bab,0xbbea89a1,0xbc00b3ac,0xbbc9fce6,0x3b6cdb91,0x3bab404b,0x3c180932,0x3c615963,0x3b87c04d,0xbb99c6eb,0xbc282614,0xbc0940fc,0xbb53b657,0x3b773178,0x3bf30c75,0x3c23295b,0x3c200dcb, +0x3c0413cc,0x3bae8383,0x3ba9d186,0xba7ab69d,0xba22cf72,0x39963acb,0x3b892c9a,0x3b958032,0x38d3a8c3,0xbad93388,0xbb941b7f,0xbbb05c4d,0x3b15eee5,0x3b999404,0x3ae3d279,0xbb8c78c8,0x3bfb83ed,0x3c4cd9b6,0x3c076459,0x3b054c51,0xbb28e166,0x3c2e9554,0x3c6937c6,0x3c075b02,0x3a9512c3, +0xbb77a55d,0xbbacfd7a,0x3b0b6c7b,0x3bf042e5,0x3c28393f,0x3b070e24,0xbb03ec2c,0xbaa45df2,0xbad8aac9,0xb9e47d9a,0xba0d7dd4,0x3a55c10d,0x3a60419d,0xbafdf6d6,0xba9687db,0xba550a3c,0x3ab560ff,0xbb05315e,0xbb5e5550,0xbb3168e0,0x3ad1d292,0x3b119466,0xba2ff3ca,0xbbf9be81,0xbc3e2719, +0xbc15dfea,0xba03ff97,0xbba4ceca,0xbcccab3d,0xbc39e488,0xbb6041e2,0xbbdc1b5c,0xba3dd3d4,0xbaa86371,0xbc3b8eb9,0x3bed89ca,0x3c1aba79,0xbb6e9fa0,0x3acbad98,0x3a3b20e1,0x3aa89eb6,0xba4adb43,0x391813f7,0x3aaede93,0x3ac289ff,0x3af46284,0xb9d231e1,0x3a723a83,0x3a8c6978,0x3a618f90, +0xba79038c,0xbae572fe,0xbaa5d231,0xba89942f,0xb99d85b5,0x388dea07,0xba22ec12,0xba8c36c0,0xbaf39616,0x39b49b68,0xba10a219,0xbc1755e3,0xbabe479e,0xbbca1e3b,0xbc89b818,0xbbe9c677,0xbb827908,0xba641432,0xbbe933e2,0xbc102cbf,0xbc56d022,0x3b9bb22d,0x3c17ff47,0xb98542c4,0x3ac9c393, +0x39d1ccba,0x3a7b209d,0x3b047962,0x3b0acd73,0x3a9778b5,0x3a696fa2,0xb9d2b51f,0xbb265b4a,0xbaf36b62,0xbaa16569,0x3a2563d2,0xba5d00f6,0xba181fba,0xbb03e5d8,0x3a074bd1,0x3a415c48,0xb8877681,0xbaca21e5,0xbb4baaa2,0xbb6832a1,0x3b251137,0x3b8b3fef,0xbb5ad6ee,0xb9d45554,0x3c712eec, +0x3cc4fbd5,0x3c6bf95b,0x3bca2e66,0x3aac19e2,0x3a480c6c,0x3aa13137,0x3b0b141e,0xbb74f051,0xbbb7aa93,0xbaeb8a68,0x3b46fae5,0x3bbc5b81,0x3bdf0b03,0x3b655731,0x3ae67f82,0xba6bae64,0xbb0e98d0,0xbb509166,0xbb7fc1df,0xbb8105e3,0xbb70165f,0xbb3a2fdf,0xba5dac9d,0xb7c2d8a5,0x3a807b06, +0xba1241b2,0xba2654b9,0xba61fcdd,0x3ab449e3,0x3af0a6d2,0x3b3842fc,0x3a92df84,0x39de0488,0x3ba62bcf,0x3c0fa0a9,0xbc27aaf5,0xbc4c1137,0xbc6e1db0,0xbc386fd4,0xbbaede26,0x3a1f2bf6,0x3b5229d1,0x3b6a4851,0x3c01008c,0x3c370c42,0x3c2464c2,0x3c1e3090,0x3bc6db94,0x3bea5593,0x3b8c9278, +0x3b0e42a0,0x3a0cfcdc,0xba1c634a,0xbb2a92f7,0xbb8ff96d,0xbb9e87e7,0xbbabed60,0xbbb22ff2,0xbb909ae9,0xbb23000e,0x3a03cabd,0x38ba86f3,0x39424a67,0x39a3f84e,0x3aea664a,0x3ac02d3c,0x3aee1495,0x37f17d7c,0x39ddfcf2,0xba5f7936,0xbb659a06,0x3bf86e35,0x3c11a79f,0x3c12bf8a,0x3be2b4a9, +0x3bcfc3da,0x3ba86b92,0x3bb8df48,0x3ba850a2,0x3b660cfc,0x3abd5c17,0x3a82826c,0x3a8a4278,0x3a3beab7,0x39de25e5,0x3a1567a8,0x39bcb483,0xba710749,0xba8fc0d7,0xbad44c6d,0xbb31acc1,0xbb2b5b4a,0xbb2d4733,0xbb1084ba,0xbb3e3308,0xbb47eb33,0xbb1b5cb2,0x3840b2b9,0x3af950dd,0x3b6b8ae7, +0x3bab3e1b,0x3bbf40e0,0x3bcac741,0x3bd52bc8,0x3be14995,0x3bf396f4,0x3bfecea5,0xba7509b9,0xbb063c54,0xb9f42478,0x3aef81ea,0x3b85c152,0x3b484d67,0x3af2d502,0x3a6a8d48,0x39620c9f,0x390e2ee0,0xb9dea7b4,0xba7c9532,0xba88c0cf,0xba927299,0xba6e3286,0xba3dfe87,0xba9491a0,0xbad6c0b8, +0xbb168258,0xbb41b4f9,0xbb537090,0xbb604808,0xbb781c30,0xbb813c1e,0xbb7f4a3d,0xbb78d409,0xbb2919c8,0xba9621b0,0xb92ad2f4,0x3a0469e2,0x3a3adf63,0x3a3f94d1,0x39e83209,0x383c9cb7,0xba8b0fb0,0xba8a31ee,0xbb8c2160,0xbb5f2318,0xbb18c2b2,0xbb134f85,0xbad86bbc,0xbaaf0b72,0xba2bbf60, +0xb9a47998,0xba3e0b07,0xba8ed747,0xbabbd322,0xba3bdfb4,0xba1c38b0,0xb9959462,0xba8997c4,0xbacb29ea,0xbaeef7c0,0xbb1b7bcb,0xbb42ce68,0xbb5528ee,0xbb683a91,0xbb702001,0xbb85b2b3,0xbb7d24a4,0xbb85021c,0xbb90e3db,0xbb8c3893,0xbb8d4dd9,0xbb914eda,0xbb83e057,0xbb8c55cd,0xbb61674f, +0xbb873a7c,0xbbb7d47f,0xbbbd357e,0xbb98ce9a,0xbb8a5ee7,0xbb9a0253,0xbb8c222c,0xbb52778c,0xbb0526ef,0xbb00e4e7,0xbaa8728b,0xba471694,0xba068a79,0xb9d81472,0xb9b8c213,0xba2b966c,0xba6b4800,0xba7654b2,0xba9c987e,0xbac41559,0xbaff9152,0xbb0b7150,0xbb144e74,0xbb32a0ae,0xbb238840, +0xbb4151a7,0xbb46fbb6,0xbb64aa0f,0xbb650caa,0xbb5b33bf,0xbb8255ab,0xbb83bfd3,0xbb8edc78,0xbbad7fc2,0xbbac8e11,0xbbd5c495,0xbbc7a6f5,0xbb82ba02,0xbb8373f3,0xbb988689,0xbb40f7ae,0xbb3d71f2,0xbb326292,0xbb2f5a7a,0xbb28f347,0xbb244416,0xbb121120,0xbb06945c,0xbb0ecfb4,0xbb119132, +0xbb0f6946,0xbb086d3e,0xbafebdeb,0xbaf82746,0xbb06eac7,0xbb0dce93,0xbb157169,0xbb1d8011,0xbb24729f,0xbb32123f,0xbb2cd9fa,0xbb311043,0xbb2e7695,0xbb35e356,0xbb3841d2,0xbb3ab335,0xbb4c9256,0xbb4ce9a0,0xbb5bd9ee,0xbb5f7512,0xbb532171,0xbb5a1323,0xbb5741c8,0xbb58ccbe,0xbb6315b8, +0xbb560dc1,0xbb821ec3,0x3a4bc153,0x3a072a8a,0x3a22fca9,0x3a605d59,0x3a5a68f1,0x3a6c2470,0x3a2099a2,0x3a124339,0x39bb2db7,0x3a38e5a9,0x3a36258c,0x399f5d93,0x3a358313,0x3a74d33c,0x3aac5b2e,0x3a866f89,0x3a617243,0x3a154584,0x39c8fa0e,0x3979e0df,0x390a8c03,0x392aad54,0x39944280, +0x39ead9d3,0x3a3da4cf,0x3a1e93a8,0x394a7b9c,0x396c110d,0x3848e6e5,0xb9809d34,0xb8e09ee7,0xb66e5815,0x39ff23bb,0x38ced779,0x3966acb2,0x3a441b4e,0x39f0b52f,0x38f1577b,0x3964ecc2,0x3aa4b013,0x3ae42200,0x3af88499,0x3a159efe,0x3982ad31,0xb96abd58,0x3acb63f8,0x3af353e6,0x3a2a43c2, +0x3ab88d19,0x3afd4a47,0x3b493404,0x3b22fcf0,0x3afc97d0,0x3a453fed,0x38b625a5,0xb9dc07e0,0xba2ff155,0xba146cf8,0x38917882,0x3ab133eb,0x3aada452,0x3a995aa9,0x398be97c,0x3a170852,0x387861bc,0xbac3fc61,0xbae95860,0xbade7dfc,0x3a1f9b0b,0xb9f53ac5,0x392ef89c,0x3b060399,0x39f407b1, +0x3a333469,0x3a791dad,0x3b2578d2,0x3b348d25,0x3b578b6e,0x3ad08511,0x3a7dc8c9,0xb95bc7a2,0x3b124b5f,0x3b148323,0x39ea2439,0x3b052531,0x3b5624b2,0x3bb219cc,0x3b8c4f40,0x3b474c46,0x3a86f0eb,0xb93b2256,0xbaa073d5,0xbaeb4539,0xbac9b39d,0xb9a490ae,0x3aeab899,0x3afc8df6,0x3af50c6b, +0x38b8432f,0x39e5d4e9,0xba998542,0xbb3b29f3,0xbb45b822,0xbb1637da,0x3a5495d9,0xbaaceb17,0xba463756,0x3b4b16a5,0x39df5dfc,0xba1a3bd2,0xba2816cd,0x3b366243,0x3b8a1b12,0x3b9c04d2,0x3ae2fb2f,0x39a6c560,0xbb0dcd9f,0x3b813e17,0x3b9390c0,0x3a466614,0x3b58fb1e,0x3b87e52f,0x3c09de0a, +0x3bd50d48,0x3b9798d9,0x3a7ece28,0xba86d42b,0xbb172f91,0xbb591a30,0xbb1e9ce7,0xb992488e,0x3b3a5d91,0x3b6e3203,0x3b6100f1,0x3a1b3311,0x3b05b2ff,0x38b01043,0xbb8571c1,0xbb8e7878,0xbb75c9e4,0x3a88f21c,0xbafd2d4b,0xb98724d9,0x3ba80669,0x3a125f9d,0x3aa25947,0x3b259733,0x3b99c5e9, +0x3bb7ac34,0x3be1ec2a,0x3b7b9cfb,0x3b5c369e,0xb8667124,0x3b7230f7,0x3b5d486b,0x39b954f5,0x3b3ab1e7,0x3bc89fcf,0x3c34d566,0x3c12280e,0x3bb56bb9,0x3ac50874,0xba9a9cc5,0xbb592d04,0xbb9560bd,0xbb69c22f,0xba2bbbe8,0x3b49a3a9,0x3b74cae0,0x3b6c9978,0x3b15949f,0x3b409507,0x3ac68f7f, +0xbb290a9e,0xba40ef51,0xbaa2a50d,0x3b2631de,0xbb0dbc33,0xbb22dabf,0x3bc99a6b,0x398266f3,0xbc266dec,0xbc158f71,0xbc11bdc9,0xbc087563,0xbbaee93b,0xbbe24dbe,0xbbc81dbb,0x3ae6ff7b,0x3b9a0bbd,0x3c239e27,0x3c67a88d,0x3c004bef,0xba44e836,0xbc125174,0xbc0caf34,0xbb8fa921,0x3b2821f7, +0x3bd90a10,0x3c1fdc15,0x3c2cf6aa,0x3c13321e,0x3bb0cba0,0x3b79e049,0xbb0bad5a,0xbaba015d,0x3ad083ec,0x3b1da0f9,0x3b2823aa,0x38814900,0xba9433f9,0xbb3cb06a,0xbb427469,0x3b530bed,0x3b8cf1ff,0x3a0fde2c,0xbbb8df3f,0x3c2f0599,0x3c5476b1,0x3bafaa8a,0xba437681,0xbbb613ce,0x3c19ced5, +0x3c6065c6,0x3c01fd03,0x3b0bd6b9,0xbb6bf596,0xbbfb07ac,0xb988f1b3,0x3bae4dee,0x3c38c69f,0x3b64091a,0xba2ec824,0xb82c6c65,0xbaa5a9da,0xb8b9dbcc,0x3a9c7604,0x3afa5aba,0x3adf1af4,0xbaea6bbd,0xba8660f5,0xbab0cb09,0x3a6c5a6a,0xbb113e7d,0xbb4388bd,0xbb0b05ea,0x3a7cf862,0x3a8deffd, +0xbb0afc53,0xbc0c4d0f,0xbc36a45c,0xbbf921bc,0x3b642ec6,0xbc02e947,0xbcd1fea9,0xbbf8c05d,0xba4e5b4f,0xbbe64e81,0xb99a52a5,0xb9db3915,0xbc19c1a8,0x3bada9ad,0x3bec59f3,0xbb5e70cc,0x39056de2,0xb9e30784,0x3ac3f92d,0xbab216df,0xb980728f,0x3a384a0b,0x3a8fa80d,0x3af510c3,0x3a71d798, +0x3ae769fe,0x3ad4aa11,0x3a18bc02,0xba8a4e5d,0xbae9c53d,0xbae64561,0xba6a141b,0x395737e2,0x390bb084,0xba37325d,0xba7d6cf5,0xba1f51f2,0xba8a5806,0xbafb14a5,0xbc045bb8,0xbb91d4a5,0xbc0d2e2f,0xbc8c5da7,0xbb8b7d68,0xba851ee7,0xba72a7f3,0xbbc44701,0xbc05454a,0xbc4794e2,0x3b0a471c, +0x3bd99ac2,0xb99aecb8,0x3a4aae6f,0xb9840b8c,0xb9608925,0x3a9fb868,0x3ab5531d,0x3a873dbd,0x3a481b7b,0xb900572c,0xbae18f08,0xbaa45ea5,0xba3e730c,0x3a50a0a5,0xba62a55d,0xba1a0865,0xbb02319f,0x3a28a2fd,0x3a3eab3e,0xb9179721,0xbaca74be,0xbb35d260,0xbaf21b3a,0x3b3a29f9,0x3b700564, +0xbb46b20a,0xbb467b7b,0x3c91d3d4,0x3ccb5c6b,0x3c4fb988,0x3b991214,0xba070208,0xba6e5c20,0xb9c93f83,0x3abcf9e5,0xbb6106cd,0xbbb6d7f4,0xbb7b3ac3,0x3acb894f,0x3ba09f53,0x3bc9b628,0x3b72ef14,0x3b032052,0x39ff3a5a,0xbac534c3,0xbb295d72,0xbb5dbc83,0xbb567083,0xbb34982c,0xbae64dbe, +0xb99b4d54,0x38de0b8b,0x3aa5f290,0xba3d5227,0xba516c24,0xba0eaf77,0x3aaa6d55,0x3ae7a99b,0x3b215788,0x3b0882a4,0x3a8476db,0x3b7fc620,0x3c338e97,0xbc35fe6e,0xbc2eda8b,0xbc42b8f7,0xbc196df1,0xbb965f59,0xb9e85f2b,0x3ab6ca27,0x3afb99db,0x3bcdc0b2,0x3c249016,0x3c184484,0x3c17373b, +0x3bbee5cf,0x3be53f86,0x3b812b82,0x3aed0bfc,0x3855544e,0xbad2bddb,0xbb702e6a,0xbba9c671,0xbbb14afa,0xbbb36cab,0xbbbcb085,0xbb7e2a7b,0xbb0e5921,0x391fe87b,0xb9daba02,0xb9e854e8,0xb9b4c485,0x3a54a978,0x3a73d8a5,0x3af47bf8,0xba61b662,0xb9b3a8db,0xba7ef6f2,0xbb880451,0x3bfde7f7, +0x3c0e6583,0x3bf43034,0x3bb549dd,0x3ba79b3a,0x3ba6ea06,0x3bcc7b14,0x3bce4164,0x3b964430,0x3b153eb2,0x3ac18eff,0x3add1bc1,0x3aa112e1,0x3a095a71,0x3a05301e,0x39002ce4,0xba9c5308,0xbab0bb21,0xbacdcef0,0xbb0f242b,0xbb09fa63,0xbb0e9cc7,0xbb1106dc,0xbb2d430c,0xbb2dd329,0xbad927db, +0x3a75dbbf,0x3b2d0bc7,0x3b758563,0x3ba46b4b,0x3ba6967f,0x3ba7f77b,0x3bb48583,0x3bc02c4e,0x3bd389a0,0x3bf55a69,0xb9dccd25,0xbaa400b2,0x393f2166,0x3b0bfbea,0x3b831d85,0x3b3de432,0x3af86d61,0x3aa5c6d5,0x3a4a7f98,0x3a73d64a,0x3a54c04f,0xb722b2a4,0xb9b2c664,0xba5fb234,0xba69a840, +0xba7de573,0xbae3769a,0xbaf6851d,0xbb14f22f,0xbb28f882,0xbb43434b,0xbb559b2a,0xbb758cfc,0xbb7ce56d,0xbb6f7d97,0xbb560e6c,0xbb034239,0xb9de3b28,0x3a01eca0,0x3aa138f8,0x3ad35be4,0x3af29cef,0x3aace8ff,0x3a86e78d,0x392cfb6b,0xb9ac0287,0xbb5c645b,0xbb3e5209,0xbb0c580f,0xbb1c43dc, +0xbb068d7c,0xbadba2db,0xba86f572,0xba55e487,0xbaa0597e,0xbac6c0ab,0xbae95681,0xba93f0fc,0xba83b60d,0xba20eec8,0xbac0c2e5,0xbb05ee09,0xbb231efd,0xbb3717fd,0xbb546934,0xbb5d7f86,0xbb70a806,0xbb77407a,0xbb87c14b,0xbb7a68c8,0xbb815fe2,0xbb8a0783,0xbb831a5e,0xbb75b6c9,0xbb77c57c, +0xbb432401,0xbb468b4a,0xbaf9861c,0xbb203ad7,0xbb8256aa,0xbb8404bb,0xbb573959,0xbbb09e10,0xbbaeeb6a,0xbb9f1654,0xbb7e4da6,0xbb34188c,0xbb41cb0a,0xbb1e752a,0xbb04d530,0xbae03bde,0xbac2cec5,0xbab4143d,0xbacdcae3,0xbae67e4e,0xbae6fcb3,0xbaf74304,0xbb03385c,0xbb19f74a,0xbb23c9f2, +0xbb296eb1,0xbb47a931,0xbb3c399f,0xbb540bb1,0xbb56f7b0,0xbb6e4edb,0xbb6be2d1,0xbb5c0a58,0xbb837e0d,0xbb8893ee,0xbb974e47,0xbbb95beb,0xbbb93fcc,0xbbebb758,0xbbdd872d,0xbba7134c,0xbbac105f,0xbbb6d047,0xbb2d8821,0xbb30d971,0xbb300fe1,0xbb2fd16b,0xbb2b3d14,0xbb27269b,0xbb1705e3, +0xbb113934,0xbb169225,0xbb1a10b9,0xbb17378b,0xbb0f3441,0xbb03f62f,0xbafd22bc,0xbb0a05e1,0xbb13d198,0xbb1c79b5,0xbb23c758,0xbb2a30ef,0xbb366fc7,0xbb3176b6,0xbb35394e,0xbb333465,0xbb32d674,0xbb34f7c8,0xbb377c1a,0xbb491137,0xbb45a1c1,0xbb4f2271,0xbb4ff721,0xbb42665e,0xbb3f1421, +0xbb357f1d,0xbb3a8ebc,0xbb4a0501,0xbb3d5db6,0xbb793f05,0x3a807e2e,0x3a27975b,0x3a38f6d1,0x3a6d16ae,0x3a6fd37b,0x3a893904,0x3a4ae46d,0x3a3b93e8,0x3a069dc7,0x3a5b4e83,0x3a564543,0x39e56399,0x3a4c0a1b,0x3a8524fa,0x3ab21ade,0x3a9b474d,0x3a8ce372,0x3a5bdb80,0x3a1b52a1,0x39dbab13, +0x399bc7b0,0x39bdf642,0x39fa2220,0x3a338ff5,0x3a5adef1,0x3a39d96d,0x39a56083,0x39a5793a,0x390b0757,0xb90828ca,0xb8205f1a,0x384fa6e2,0x3a12e9d2,0x39449100,0x39a9200f,0x3a703d95,0x3a188c0b,0x379a7ee8,0x39ae702e,0x3abcccb4,0x3b02aafc,0x3b160013,0x3a8ac3c0,0x3a3a8137,0x3922d065, +0x3ad97e3e,0x3affb344,0x3a783f09,0x3ace7255,0x3b0466aa,0x3b45a3c6,0x3b33dab0,0x3b1ac25a,0x3aafebfb,0x3a01a831,0xb8c14ca6,0xb9db81a2,0xb99c0ee3,0x39b39c57,0x3adadad1,0x3abe3f71,0x3a9c14b9,0x39a0c9dd,0x39ea80fb,0xb8cffb33,0xbac3821e,0xbafafd88,0xbae9cc2f,0x3a15e7c7,0xba04f5e6, +0x38cfc973,0x3b0a1e9e,0x39aa9b2c,0x3a169139,0x3a768521,0x3b1bfc9d,0x3b3a005b,0x3b70e157,0x3b0bc9fe,0x3ac801f6,0x39577d02,0x3b1d491d,0x3b1a6dda,0x3a40548c,0x3b035f5d,0x3b51c0aa,0x3ba7e105,0x3b9a1869,0x3b758a45,0x3b09ef69,0x39ff8b23,0xba339e8d,0xbab253e1,0xba874763,0x39111a91, +0x3b14b9a3,0x3b065dc3,0x3aeb67cd,0x378a5431,0x3886d14c,0xbac9d914,0xbb3eb530,0xbb602b6b,0xbb324cd7,0x3a09b727,0xbacdd19b,0xba6d1941,0x3b50b746,0x3999b592,0xbaa11387,0xba1bb871,0x3b40eba7,0x3b96dcb2,0x3bb48b04,0x3b3485b6,0x3aad7331,0xba9bc5c5,0x3b7811c0,0x3b901c1e,0x3abe1813, +0x3b5cc652,0x3b85f077,0x3bfce5dd,0x3be6721a,0x3bb85894,0x3b20a2ac,0xb855930d,0xbacd76d6,0xbb39dcbe,0xbafbdbe3,0x390217ab,0x3b6d98d9,0x3b651878,0x3b58e82e,0x39a773f4,0x3ab15d6d,0xba66527c,0xbb9de721,0xbbb1ca6d,0xbb9a5484,0x3a1800ef,0xbb292121,0xba609396,0x3ba30cc3,0xb8edb4fb, +0x3a6119a5,0x3b0fef65,0x3b86f20a,0x3bb0a12e,0x3bebf120,0x3b9abdc7,0x3b87a5d2,0x3a26fa46,0x3b809af6,0x3b5ed982,0x3a3954ba,0x3b2223d2,0x3bb41a9d,0x3c2427a3,0x3c1e05f9,0x3be30396,0x3b68f93d,0x38bb4c0d,0xbb12f03c,0xbb774306,0xbb2e351a,0x38f1cc80,0x3b8c6235,0x3b8366d7,0x3b651ec6, +0x3b0ef4e9,0x3b136de8,0x3a1f8739,0xbb834b0e,0xbb2a10b4,0xbb3892c9,0x3ab6a678,0xbb5238d9,0xbb4a6358,0x3bcd4222,0xb97fa0cf,0xbc2be0d1,0xbc0045c7,0xbbf0779a,0xbbd24336,0xbb85851b,0xbbc841e5,0xbbc64729,0xb9fc0879,0x3b751732,0x3c26f76d,0x3c659ea9,0x3c3deb2e,0x3b689377,0xbbfb0cbb, +0xbc066490,0xbbacce16,0x3a287b1a,0x3ba2d6cb,0x3c09bb4b,0x3c2434de,0x3c0d9510,0x3b965721,0x3afd3142,0xbb6173d6,0xbb1188a5,0x3b2a9906,0x3a677aa9,0x3a1e006a,0xb993a23b,0xba698711,0xbaaae6d7,0xb95fb054,0x3b871720,0x3b8231c0,0xb98f8bcc,0xbbd7086e,0x3c5899d7,0x3c46ba36,0x3b1a7e00, +0xbb4a7ec2,0xbc01f0c9,0x3bf2df66,0x3c43bc55,0x3bee1b33,0x3b49a57c,0xbb56f675,0xbc2341bf,0xbb1fa78a,0x3b56c937,0x3c316e46,0x3b9fb4df,0x3a742c3d,0x3aa32eb7,0xba481dd0,0x38b72c0b,0x3b2e0d91,0x3b2f6dce,0x3b17df9a,0xbaaf0f6d,0xba254528,0xbace9103,0x39b0538a,0xbb14d701,0xbb1ecabc, +0xbadca0a0,0x39accd2a,0xb8dd9c10,0xbb69bc89,0xbc15ee31,0xbc297581,0xbbc79d4c,0x3bed7b9f,0xbc37a185,0xbcca3a2e,0xbb888179,0x3a98fa28,0xbbf13540,0x399e7d09,0x3a45428d,0xbbe55e30,0x3b2d7a74,0x3b90eef5,0xbb123325,0xba835b2a,0xbad05214,0x3a98f3c4,0xbaf252f9,0xba13c470,0x37ca9889, +0x3a36983e,0x3af70a5b,0x3b0c6de0,0x3b24748a,0x3b06572f,0x397bba23,0xba8b83a2,0xbadc58e1,0xbb0fa117,0xba4c497a,0x3a002384,0x390a28cc,0xba1cc29e,0xba5368f0,0x39c2584e,0xbb4a424b,0xbb7ed80b,0xbbb783ae,0xbc0702c5,0xbc386244,0xbc8cdc93,0xbb10de0b,0x3ab8f9a7,0xba385438,0xbb810309, +0xbbd07b7b,0xbc2ebf40,0xba5d19a8,0x3b740857,0x3a61eca0,0x39a14be6,0xba67bc45,0xbaa774cc,0x39a4bca7,0x3a08ecd2,0x3a57c2d9,0x3a354709,0x399c2344,0xba292fff,0xb9e5623a,0xb93e8240,0x3a52bc4f,0xba6e0808,0xba287499,0xbafc1779,0x3a215fe1,0x3a0d3ba1,0xb950a414,0xbac207ad,0xbb166029, +0xb963747c,0x3b28823d,0x3b20dd2d,0xbab33332,0xbbc3ec02,0x3ca2139a,0x3cb75ebf,0x3c1b67a3,0x3b3b8a73,0xba90bb77,0xbb0d7aec,0xbaf6fe3c,0x3a960296,0xbb22819c,0xbb9a7d22,0xbb9f60ba,0x39d53a7b,0x3b85a0e3,0x3bac5c1d,0x3b72babb,0x3b0d7607,0x3aec0e2a,0xba6165f1,0xbb03bd14,0xbb31284f, +0xbb23cca3,0xbae3fd75,0xba167cf3,0x398f0132,0x396c0371,0x3a9f616c,0xba458823,0xba64456c,0xb9d0d118,0x3a73c9a2,0x3ac1f627,0x3b195d48,0x3b51bb85,0x3b00f54c,0x3b550b41,0x3c56c9e4,0xbc3a3f8d,0xbc06e288,0xbc05566c,0xbbd4cdbe,0xbb627721,0xba67da72,0x3980e39d,0x3a557c09,0x3b9aae29, +0x3c0fb714,0x3c0e72c1,0x3c0ee91f,0x3bb0433d,0x3bcb5ffe,0x3b6724de,0x3ab9a62b,0xba03dd8e,0xbb281f2c,0xbb93a7f7,0xbbb580d3,0xbbbc167b,0xbbb75bdf,0xbbc2a104,0xbb57be66,0xbaeb8269,0xb9b6a390,0xba586969,0xba76b7f4,0xba89310a,0xb986d74f,0x39e5095e,0x3af335e7,0xbab8258b,0xba6961b8, +0xba9ff8b6,0xbb9e8bf4,0x3be58e61,0x3bee2cbe,0x3ba9910b,0x3b805a13,0x3b8938c8,0x3ba44b46,0x3bd95370,0x3bf3b2b9,0x3bbe8d61,0x3b62bc85,0x3b11b845,0x3b2badf4,0x3b0e0dd7,0x3a8b63b7,0x3a467bde,0x38cef295,0xbaaa5ce6,0xbabd689b,0xbac66308,0xbae507fd,0xbaef633e,0xbb00d80b,0xbb189bb2, +0xbb19c387,0xbb0bfbb4,0xba61d0d1,0x3adcc188,0x3b48f7c4,0x3b64d870,0x3b8c91e0,0x3b803aff,0x3b742bea,0x3b89835d,0x3b924fc4,0x3ba03aba,0x3bd5983e,0x38f48154,0xb9998415,0x3a81b51c,0x3b1e5faa,0x3b753cb3,0x3b3374cd,0x3b0f784a,0x3b08a63b,0x3ae6c72f,0x3b07e15b,0x3b14029b,0x3a9ae80f, +0x3a0dac82,0xb9ae259c,0xba2cc989,0xba8b6a5a,0xbb0a8cf7,0xbb010bf9,0xbb0e64cc,0xbb14183e,0xbb32c791,0xbb492b8a,0xbb6db231,0xbb6d5bdd,0xbb542fda,0xbb2c127a,0xbaadffcb,0x39b2c5eb,0x3a9f2947,0x3b007e7b,0x3b228daf,0x3b40ae36,0x3b0bfb0e,0x3afbd2f0,0x3ab1a3f7,0x39b734c5,0xbb06623a, +0xbb021260,0xbad250c4,0xbb0c0239,0xbb0b8020,0xbae96dca,0xbaad6737,0xbaa8b78a,0xbace9063,0xbadcdf26,0xbae9349e,0xbaaede8b,0xbaa82ed0,0xba6f7446,0xbae9895d,0xbb1b4555,0xbb3f4f09,0xbb46be91,0xbb5b47e5,0xbb5b02f5,0xbb6bb061,0xbb70fd58,0xbb8279fa,0xbb6a6aea,0xbb6f8e36,0xbb7cbadc, +0xbb640175,0xbb3e5c69,0xbb33b908,0xbad703c2,0xbabe1c67,0xb902f29c,0xb9f5febb,0xbaf8b25f,0xbaf78163,0xbac3b485,0xbbc7d08e,0xbbb37e4a,0xbba44888,0xbb8a5d31,0xbb544cea,0xbb6f4f45,0xbb548f56,0xbb45f569,0xbb30bc8f,0xbb1fe901,0xbb176337,0xbb1990b4,0xbb1d0db3,0xbb17f9d3,0xbb199728, +0xbb18e9cd,0xbb2a7cee,0xbb32c347,0xbb37acc4,0xbb567109,0xbb4b6690,0xbb5e70dc,0xbb5fa4e7,0xbb726901,0xbb6d4bf5,0xbb5b1c0d,0xbb8235bc,0xbb8a29a1,0xbb9a0427,0xbbbbab4b,0xbbba5c4b,0xbbf12e14,0xbbe295f8,0xbbbe633b,0xbbc70523,0xbbc51322,0xbb1489f6,0xbb20097e,0xbb298085,0xbb2bef04, +0xbb2a4246,0xbb28a194,0xbb1e073a,0xbb1f410e,0xbb1f38f4,0xbb207f3e,0xbb1bcd38,0xbb13eab0,0xbb08e501,0xbb022027,0xbb0d6403,0xbb185534,0xbb212a8b,0xbb272f04,0xbb2c1dfd,0xbb36e97f,0xbb2ff11c,0xbb3198cd,0xbb2e5dcf,0xbb2d0ba0,0xbb2dad16,0xbb2e551a,0xbb3d1385,0xbb35505b,0xbb38ddba, +0xbb36a402,0xbb28a8d3,0xbb1aaf4c,0xbb0c9935,0xbb16d607,0xbb26d04a,0xbb1ccaa6,0xbb718a59,0x3a954626,0x3a4642e1,0x3a4f264e,0x3a765180,0x3a7fe98b,0x3a98b704,0x3a6b9f6d,0x3a5a7e48,0x3a282906,0x3a70941f,0x3a6ba56c,0x3a18a471,0x3a5d496b,0x3a8b6bdb,0x3ab118a9,0x3aaaceb9,0x3aa3f9ab, +0x3a8b8869,0x3a48647a,0x3a148ce1,0x39e28d95,0x3a0ab130,0x3a24b8a6,0x3a5dfb4a,0x3a6db932,0x3a499d8f,0x39ce1c75,0x39c3cfa2,0x39548764,0xb625c52d,0x38077864,0x38cfe2f7,0x3a1d8a10,0x39874cb3,0x39d3de86,0x3a83f6ad,0x3a30d2d5,0xb7961ada,0x39e86375,0x3ace608f,0x3b0e6395,0x3b2d62a4, +0x3ac6f795,0x3a946345,0x3a09e0d9,0x3ad7f202,0x3afe11db,0x3aa7d488,0x3ae036e4,0x3b0693f8,0x3b3b1a4c,0x3b3e4d9f,0x3b30c35c,0x3af1ab5d,0x3a5bf697,0x394e9a0e,0xb93c5dc5,0xb77af008,0x3a1d9533,0x3aec917c,0x3ac2bbed,0x3a96942d,0x399204bc,0x398aa8f1,0xb98b8c4f,0xbab4bea7,0xbb010ce2, +0xbaf068fd,0x39fd2a5c,0xba085e19,0x3851c9a7,0x3b04cc02,0x39863cab,0x3a1689f7,0x3a81b230,0x3b1398a6,0x3b3e5230,0x3b83bc1c,0x3b29d051,0x3b0181af,0x3a180534,0x3b1bf592,0x3b1752ae,0x3a952406,0x3b02e208,0x3b4c5c1c,0x3b983dc4,0x3ba320ee,0x3b8d7ad0,0x3b475c80,0x3a8a7e89,0xb94fcadf, +0xba7cdc70,0xba047872,0x3a13779d,0x3b207f2d,0x3b07cb18,0x3ad8aceb,0xb934a4b1,0xb9ab564e,0xbaf11512,0xbb3426df,0xbb6fa968,0xbb456dd5,0x394558a0,0xbae05828,0xba81664f,0x3b43c3d8,0x3988549c,0xbad20316,0xb9fea8c9,0x3b489595,0x3b9f06e7,0x3bcc93db,0x3b739f16,0x3b139be2,0xb91e7593, +0x3b59b3ea,0x3b843019,0x3b187a10,0x3b61352e,0x3b84baf3,0x3bdee90e,0x3befc98e,0x3bd0f7b3,0x3b76683f,0x3a527559,0xba6af214,0xbb1758f9,0xbaaea77f,0x3a122ad6,0x3b7f1e8b,0x3b510fb0,0x3b44efdd,0xb85f7cbb,0x3a0722cb,0xbaf0ef67,0xbba3cbe9,0xbbce2a92,0xbbb41013,0x38acebd9,0xbb48bfa2, +0xbaad69f0,0x3b92d898,0xba11ed3d,0x3a47999c,0x3afbac2b,0x3b70d278,0x3bab5c23,0x3bf3f163,0x3bb28bde,0x3b987590,0x3a9f0245,0x3b7b2dbd,0x3b549299,0x3aab3d08,0x3b181a33,0x3ba5f998,0x3c0fcf79,0x3c25383e,0x3c04d4e2,0x3bb082d4,0x3aa07a08,0xba9e97fa,0xbb3ecf24,0xbad20a7d,0x3a6500c6, +0x3ba16e2c,0x3b853b6b,0x3b5236f8,0x3b0219e8,0x3ab3a481,0xb9eca037,0xbb9ae787,0xbb8b6f1e,0xbb8a4e47,0x39c22556,0xbb83fba6,0xbb641f42,0x3bbeb091,0xba09241c,0xbc236c84,0xbbc9d4e5,0xbba94187,0xbb8a4da9,0xbb5907ea,0xbbae8f76,0xbbbe8811,0xbb2d8468,0x3b2a2be5,0x3c1ee8c9,0x3c55bf2b, +0x3c693a39,0x3be1ec11,0xbbdfbd11,0xbbfbde8d,0xbbc48571,0xbada6b23,0x3b3026ed,0x3bc43bcc,0x3c031a89,0x3be20506,0x3b397e9a,0xb958ef06,0xbb9b72ba,0xbb40e957,0x3b5bd6b2,0xb98b784a,0xba84bed2,0xba575485,0xba7b910c,0x388e57b5,0x3b2acbbd,0x3ba5abf8,0x3b7d7f3b,0xba21f748,0xbbdb283a, +0x3c723918,0x3c29d874,0x389e533c,0xbb98cd94,0xbc1eb9e1,0x3b9cbc7d,0x3c18240a,0x3bcac579,0x3b7d935a,0xbb37aaff,0xbc404257,0xbb906336,0x3a9b452b,0x3c17142e,0x3bcbb0e3,0x3b39305d,0x3b21c3dd,0xb8caa5db,0x39a1ca80,0x3b75d708,0x3b4ba518,0x3b321fee,0xba3b2f86,0xb82addd5,0xbac3f98b, +0xb9a2f6b9,0xbb136c88,0xbaf1dbff,0xbab7efcc,0xb86dc288,0xba892ff1,0xbba16f86,0xbc1ccd78,0xbc1bc8bd,0xbb98bd0f,0x3c24afbe,0xbc6415f3,0xbcbaa5e5,0xbb14c7d7,0x3aeb6238,0xbbe540e8,0x3a64f79d,0x3acfb2a8,0xbba0af7b,0xb9837251,0x3adb9f14,0xb9c7fdc7,0xbae51a3c,0xbb293aea,0x39f7abc0, +0xbb0cac69,0xba3e344a,0xba48f63d,0x39a31a5b,0x3aeb253f,0x3b44a32c,0x3b40b37f,0x3b105c1e,0xb93e5d3d,0xba8a8c31,0xbacc001c,0xbb22e6e7,0xba3b379f,0x3a13d673,0x390195e8,0xb9cf2633,0xba2f2cd3,0x3a426fd7,0xbbadbf39,0xbbbeea5d,0xbb1935dc,0xbc3e65a1,0xbc5adff8,0xbc8df1d0,0xbacf7fd8, +0x3b308f3a,0x3a393f59,0xbac76d07,0xbb90d24b,0xbc169e4d,0xbb75d369,0x3a81f51e,0x3b368876,0x39a1ad66,0xbab5e859,0xbb09f7fe,0xba20d0d4,0xb9dcd2bc,0x39cc72fe,0x3a1a84c6,0x3a2adef4,0x39929f8e,0x39cacce8,0x3988e936,0x3a313950,0xba80f3e4,0xba4b2dfb,0xbaee31e6,0x39e70f21,0x3988b3cd, +0xb9542e26,0xbaaab79d,0xbaeaa043,0x3a91ec1a,0x3aeba136,0x3a8bca18,0x3ab17e11,0xbc07aa15,0x3ca4f243,0x3c8d4405,0x3bb93482,0x3a8668a7,0xb95d1e50,0xbb3b72c7,0xbb4126b1,0x3aa20a80,0xba930cf3,0xbb57ec99,0xbbac3d11,0xb9cbe905,0x3b5d5cdd,0x3b8bd69d,0x3b6b39fe,0x3b1f21f5,0x3b3f17d6, +0xb962997c,0xbabab138,0xbb013607,0xbadb75da,0xba37d9f7,0x3a0979c7,0x3a553e19,0x39ae6f62,0x3a571992,0xba2d97e3,0xba5bb1d0,0xb9adfaff,0x3a026429,0x3a9ac76e,0x3b28fa2b,0x3b83fef5,0x3b3933ed,0x3b6450f1,0x3c709b83,0xbc31ebd1,0xbbb18c15,0xbb89c577,0xbb5fd704,0xbb198127,0xba76efff, +0xb9a60ace,0x3991dd43,0x3b564303,0x3bf2f5fc,0x3c0954fd,0x3c05863f,0x3ba0719b,0x3bab74bd,0x3b4d62ce,0x3a892109,0xba9c595c,0xbb5be952,0xbba3f807,0xbbb3fff5,0xbbbf3e7f,0xbbb7f704,0xbbbfa524,0xbb31aae6,0xbab6e0a1,0xba4ed7dd,0xba935d90,0xbaa9eebc,0xbad7ab46,0xba94ab6e,0x389da58c, +0x3ae2b834,0xbac64a7b,0xba976bc7,0xbade381f,0xbbaf17cc,0x3bb2b4eb,0x3ba24d57,0x3b22b576,0x3b0aa0db,0x3b55a401,0x3ba05d83,0x3be12f3e,0x3c08d0cc,0x3be4a8cf,0x3b9c67ac,0x3b55eb88,0x3b7bdd74,0x3b613c00,0x3b03a5a6,0x3aaa810f,0x39a90f53,0xba970b83,0xbaaffc3d,0xbabe77e3,0xbacc5930, +0xbaf17f20,0xbb00bf4d,0xbb2271af,0xbb02cd42,0xbacabcd8,0xb8fbc042,0x3b0ee923,0x3b4d60d3,0x3b3ccf90,0x3b553a26,0x3b2bf90b,0x3b148ccf,0x3b3ac60b,0x3b430d51,0x3b504d67,0x3ba6565d,0x3a378c65,0x3a49ac53,0x3af24e47,0x3b3114fb,0x3b6a5f42,0x3b3d7637,0x3b3e1358,0x3b571042,0x3b466602, +0x3b5f769d,0x3b75cc90,0x3b20029b,0x3abd09da,0x398ee4d0,0xb9952093,0xba862174,0xbb120e87,0xbafba0bb,0xbb047b7f,0xbb0563b7,0xbb264dd2,0xbb3e4463,0xbb6120fd,0xbb541a49,0xbb2db1c1,0xbaf39017,0xba159e72,0x3a92ac3f,0x3b02886c,0x3b2d4ccb,0x3b5227e0,0x3b7b86c7,0x3b37e208,0x3b2f69ef, +0x3b1b9527,0x3a825a0e,0xb9fb1d0e,0xba2dbfda,0xba16aac9,0xbaa87c70,0xbacb2999,0xbaba66de,0xbaa8e031,0xbabcc7ea,0xbacc4366,0xbac554b0,0xbac03062,0xbaafeca7,0xbabfff1b,0xbaa34496,0xbb046776,0xbb272dc3,0xbb48c71d,0xbb49ec87,0xbb55407d,0xbb50f7b4,0xbb5d98ce,0xbb6217f2,0xbb717857, +0xbb51ce62,0xbb536f82,0xbb5b7aa1,0xbb34732b,0xbaf09481,0xbabc3dc0,0xb94e917f,0x3963fed9,0x3acf61f1,0x3abc9125,0x3989e83b,0x3993fc0e,0x39e28acb,0xbbcbd4a3,0xbba93897,0xbb9dc2bb,0xbb8cfd4a,0xbb696c79,0xbb82c986,0xbb70e8dd,0xbb6d46ac,0xbb5c1d2c,0xbb4cccc8,0xbb43a988,0xbb3a59da, +0xbb31fd95,0xbb272c17,0xbb250087,0xbb2232a8,0xbb326413,0xbb39ae62,0xbb3f80e6,0xbb5ec128,0xbb58000f,0xbb65c124,0xbb674da0,0xbb7752cd,0xbb71d423,0xbb6268a8,0xbb826053,0xbb8aef09,0xbb981d66,0xbbb3a50f,0xbbae6c0d,0xbbe10d86,0xbbd2a607,0xbbc1be9b,0xbbcd1535,0xbbc00636,0xbafdd244, +0xbb0dee1e,0xbb1e606b,0xbb21f419,0xbb24076e,0xbb2698b5,0xbb243b5e,0xbb2b9716,0xbb263b08,0xbb250776,0xbb1faafb,0xbb19e557,0xbb11d740,0xbb0b3b45,0xbb14f94a,0xbb1e67e8,0xbb25e682,0xbb29d414,0xbb2cc87e,0xbb347d66,0xbb2e1f7d,0xbb2f1e9b,0xbb2a8dca,0xbb2ab0d2,0xbb2ad84d,0xbb28c2dc, +0xbb326f53,0xbb2617ad,0xbb23dc33,0xbb1eec35,0xbb1177be,0xbaf595d6,0xbad6cc16,0xbaf13e61,0xbb0744ac,0xbb00ffc3,0xbb731fb2,0x3a9b5269,0x3a552f3a,0x3a55a48a,0x3a726ee5,0x3a80091e,0x3a9dc1a6,0x3a77c096,0x3a645eb6,0x3a34c9ce,0x3a6e83d0,0x3a6b9acd,0x3a31cdbf,0x3a5d1229,0x3a8762f4, +0x3aa3c903,0x3aade472,0x3aae1b3e,0x3a9b4204,0x3a5f2418,0x3a2887f1,0x3a020609,0x3a267d0b,0x3a3efaee,0x3a7c6b12,0x3a6e78d5,0x3a4e01c5,0x39ed942f,0x39e1628a,0x3996eaad,0x3918c577,0x39090530,0x392eaced,0x3a210c52,0x39a24d5a,0x39e00bbf,0x3a874376,0x3a41b085,0x3870ffcf,0x3a099a71, +0x3ad0d0d1,0x3b10b442,0x3b3babfd,0x3af3e12d,0x3aba6a4b,0x3a45fa17,0x3abf33ed,0x3ae6c47f,0x3ac991bd,0x3ae7536f,0x3b029a69,0x3b26d6e3,0x3b3e1da7,0x3b3aa12d,0x3b0cc514,0x3a8a748b,0x39cf4e46,0xb6ccb637,0x398645c1,0x3a52ce1d,0x3ae6628f,0x3abb404e,0x3a868a2a,0x39316f44,0x382736c9, +0xb9e680c9,0xbaa72995,0xbb015f42,0xbaf702be,0x39960371,0xba05927d,0x379a8699,0x3aea0ad7,0x39754a6b,0x3a2da177,0x3a8b0a64,0x3b097c04,0x3b3d3a37,0x3b8a036b,0x3b3df04f,0x3b1530ff,0x3a50f675,0x3b0cb694,0x3b08f0de,0x3ac8a945,0x3affe5aa,0x3b421ac5,0x3b823b21,0x3ba3e711,0x3b97aa8a, +0x3b71595f,0x3ac0695c,0x39523e43,0xba1fd090,0x3550cbb0,0x3a6dd881,0x3b186079,0x3b032bbf,0x3abf920a,0xba0365ae,0xba3778c4,0xbb0851f8,0xbb247951,0xbb75423e,0xbb4fae46,0xb9941bc4,0xbae5cc98,0xba84f173,0x3b236243,0x39873a33,0xbad726c2,0xb9860704,0x3b4412b6,0x3b9f3fc7,0x3bddf6f7, +0x3b9315d1,0x3b429cb0,0x3a286f80,0x3b25b9a0,0x3b5ca02c,0x3b4e7b82,0x3b63927c,0x3b826ac2,0x3bb947d7,0x3bedeb44,0x3bdccfee,0x3b99393c,0x3abd2c46,0xb9b34dfe,0xbae73e1a,0xba3dc344,0x3a751bb4,0x3b6f5eb8,0x3b34767d,0x3b2a1d00,0xba1b792b,0xb9bb4a28,0xbb3506e0,0xbb9faa90,0xbbe4c096, +0xbbc7b602,0xba1b6a02,0xbb5a1a74,0xbacff8ba,0x3b6d50e7,0xba4ad7a5,0x3a66dac5,0x3ae93a88,0x3b559354,0x3ba4fc92,0x3bf5f1cb,0x3bc287db,0x3ba17572,0x3ac98289,0x3b5f7cb4,0x3b3df550,0x3b02454d,0x3b177eab,0x3b9a37d6,0x3bef00aa,0x3c24dd99,0x3c10f30a,0x3bdd2b17,0x3b0cd769,0xb9702376, +0xbb025568,0xb9f56bf3,0x3ac5437d,0x3ba2d091,0x3b80654c,0x3b37d9ac,0x3ace92b3,0x39b57d5f,0xbac6b11e,0xbb9c8e72,0xbbb89125,0xbbb0b253,0xba2101d2,0xbb97208b,0xbb6d022e,0x3b9d8c45,0xba211a84,0xbc09311b,0xbb8d35c6,0xbb2213de,0xbaf687d2,0xbb3bce96,0xbb9345c6,0xbbb2a9e8,0xbb94060d, +0x3aa92319,0x3c09a6ec,0x3c385566,0x3c78a832,0x3c0f82cd,0xbbd09daa,0xbbefb557,0xbbdb52d8,0xbb8a22fc,0xb839500e,0x3b356967,0x3b95378c,0x3b8279f0,0x39dbb7e0,0xbb1a9ca8,0xbbbfaf05,0xbb6528e6,0x3b7e3b6a,0xba85b0db,0xbb084cc7,0xbab6366a,0xba98e953,0x3aa0bafe,0x3bac5c38,0x3bc70ffc, +0x3b85db40,0xba107f40,0xbbbb91ad,0x3c797a13,0x3c04b447,0xbaa55d53,0xbbb15402,0xbc2f1485,0x3af05d6e,0x3bcdff21,0x3ba2aa86,0x3b93b1b8,0xbb079172,0xbc4ee981,0xbbc5a6c4,0xba60d8fa,0x3bde2210,0x3beb4838,0x3b9addae,0x3b6bb22f,0x3a502ed5,0x3a42a557,0x3b94c5e6,0x3b56b231,0x3b3d4cfa, +0xb7e67d10,0x3a22c3de,0xba9ad677,0xba83c7dd,0xbb0fdd0b,0xbaab7747,0xba981f12,0xb8e20978,0xbad33b5a,0xbbc467b9,0xbc254542,0xbc10f998,0xbb4d6a3d,0x3c3e8a02,0xbc805e70,0xbca56c8a,0xbb1536a0,0x3a75fa1c,0xbbb0978b,0x3a88d4c2,0x3ab9010a,0xbb60ae18,0xbb468348,0xba54b86b,0x3acdb7c6, +0xbb0ffbba,0xbb5a57eb,0xba146a29,0xbb16b651,0xba4925bb,0xbad00eff,0xb7f82ada,0x3abfdbe6,0x3b5629c3,0x3b403e9c,0x3b02da76,0xba22f02b,0xba8e021a,0xbac00a6f,0xbb2a5dc5,0xba2e5879,0x3a0cdcb2,0x38a8b7fe,0xb8ecb2ea,0xba19f036,0x39d1b2de,0xbbee1f75,0xbbecd0d0,0x3a00ce45,0xbc5f631a, +0xbc6dfdd8,0xbc8ce51f,0xbb023bb7,0x3b3ab726,0x3b5f8e2d,0x3a47653f,0xbb3ceafe,0xbc03a7df,0xbbd3803f,0xbacc305c,0x3ba1726f,0x3a184cc5,0xbae1b9c7,0xbb395a75,0xbac371f9,0xbaacc8d4,0xb95abee3,0x39d397a9,0x3a44ca20,0x3a34c8ef,0x3a819ca3,0x3a07e821,0x39e506b2,0xba8dadbc,0xba81da4f, +0xbad84c84,0x393422a3,0x36751697,0xb93f911c,0xba840eba,0xbab1f714,0x3af62b0a,0x3a4df241,0xb8fb07b3,0x3b8281ba,0xbc1aaced,0x3c98f33a,0x3c2d38b2,0x3b19963b,0xb9001a46,0x3ac3545f,0xbb23f37f,0xbb3df5cc,0x3aa14f9a,0x393f0c9a,0xbadfd0a3,0xbba0a4dc,0xba5d5cf0,0x3b33c3e4,0x3b4db8cc, +0x3b5e30e0,0x3b3b83f8,0x3b75adcd,0x39e6efd5,0xba42146a,0xbaa274a7,0xba647623,0x39887a8c,0x3abb61dd,0x3aa68882,0x39e428c1,0x3948f666,0xba0c03bd,0xba35ce18,0xb96a8e03,0x396eddc3,0x3a88cb63,0x3b497268,0x3b8c7c4d,0x3b5393d5,0x3b953ef8,0x3c79a5a4,0xbc1b749e,0xbb249b46,0xba4e9b9d, +0xba34fc29,0xbacd2a39,0xba7f9709,0xba3dd15a,0xb88f65c0,0x3aff6b78,0x3bc25ac1,0x3c02842e,0x3bf3c723,0x3b941f09,0x3b91c035,0x3b30f59c,0x3a2595a2,0xbaf375f2,0xbb7d8db6,0xbba9850b,0xbbab59ea,0xbbba9014,0xbbb3bfb4,0xbbb0268a,0xbb0d3000,0xba81f2cf,0xba8425fa,0xbaa9800c,0xbac6f9bd, +0xbb0109ec,0xbad5ddda,0xb93d5b38,0x3aba3f8b,0xbaa22254,0xba92d533,0xbb13c0b8,0xbbb441d1,0x3b5da5be,0x3b0e05ca,0xb97748dc,0x3986b931,0x3b0cd03a,0x3b98a958,0x3be14c27,0x3c0dfda9,0x3c002d75,0x3bc75106,0x3b97a687,0x3bac154a,0x3b9dadb7,0x3b4c223a,0x3b0aa378,0x3a5bd8cb,0xba4a55d8, +0xba8a3a8b,0xbab624b5,0xbad5f939,0xbb08214c,0xbb08d110,0xbb26c7fc,0xbaceda71,0xba743f37,0x39ff4a8f,0x3b1a794d,0x3b3be5ad,0x3b021f1f,0x3b0bfd20,0x3ac3f47e,0x3a850941,0x3ad99a77,0x3ad399f5,0x3ad5725d,0x3b5c1aea,0x3aad8e10,0x3aeb6d6c,0x3b2638e4,0x3b3e8366,0x3b66e54e,0x3b58d1e8, +0x3b789900,0x3b91b553,0x3b8bafb9,0x3b993e25,0x3ba6e8fa,0x3b6a4a56,0x3b139f4a,0x3a5c45d3,0x392ae262,0xba65eaf5,0xbb0b99a3,0xbaeaa601,0xbaf704d5,0xbafde915,0xbb1d3e57,0xbb33a4b5,0xbb4f662b,0xbb30a1f0,0xbaf7d920,0xba77973d,0x3983f57c,0x3af124de,0x3b30c99f,0x3b4f081f,0x3b6f3a58, +0x3b8e0bd8,0x3b569107,0x3b55777e,0x3b4e7bf3,0x3ad01434,0x3a9a67a7,0x3a5e7203,0x3a56758b,0x38b137a2,0xb9ab5d19,0xba1b9dde,0xba584280,0xba924157,0xba9205d3,0xba83e1dc,0xba746102,0xba95d5dd,0xbac5cfbe,0xbac839f2,0xbb0d40d1,0xbb29a869,0xbb413fdd,0xbb417f63,0xbb443ee7,0xbb402877, +0xbb481b72,0xbb4ce48c,0xbb588b09,0xbb331eeb,0xbb2e9658,0xbb2f0879,0xbaf74292,0xba4028e7,0xb8afad53,0x3a8cd296,0x3adc0e8b,0x3b3e03f7,0x3b4058ef,0x3b0b8cfb,0x3b0ee7fa,0x3b103aeb,0xbbbd1876,0xbb9418ab,0xbb8d68c2,0xbb8762b6,0xbb7068d2,0xbb7e9175,0xbb6ce4fc,0xbb7084c5,0xbb6721b3, +0xbb5bb153,0xbb538e78,0xbb434a5b,0xbb3183bc,0xbb24688a,0xbb1f2876,0xbb1e1881,0xbb2f9600,0xbb353808,0xbb3c0f23,0xbb5a250e,0xbb5d920b,0xbb669b32,0xbb6b9bfb,0xbb7c58e2,0xbb7ba137,0xbb74c73b,0xbb84f7ba,0xbb8af009,0xbb9172af,0xbba1b229,0xbb974e6b,0xbbbbf819,0xbbaf9bb2,0xbbb085d7, +0xbbbd57a7,0xbbaa707c,0xbad3c4af,0xbaed4c5b,0xbb08f3c3,0xbb0b7a2c,0xbb11659f,0xbb18a889,0xbb1f0c41,0xbb299c4f,0xbb222921,0xbb2092b6,0xbb1cdb75,0xbb1acede,0xbb17822c,0xbb1320cb,0xbb1a27c8,0xbb2022bb,0xbb2503e7,0xbb268142,0xbb277b2c,0xbb2aad9e,0xbb28a1e0,0xbb2bd658,0xbb28c1c1, +0xbb265ff7,0xbb27f5b2,0xbb258ff6,0xbb2853cf,0xbb1837ac,0xbb1154f4,0xbb09c899,0xbafbb5b8,0xbac4e0a6,0xbaa7212f,0xbabeac3c,0xbadc5fae,0xbad1b33a,0xbb71939e,0x3a965151,0x3a5763f6,0x3a4fcf6f,0x3a646fa8,0x3a7430cb,0x3a9a17de,0x3a757998,0x3a603173,0x3a30c3e1,0x3a5cf5c8,0x3a5deb47, +0x3a429383,0x3a524750,0x3a7a1199,0x3a9063fb,0x3aa81add,0x3aae1528,0x3a9f46fa,0x3a66be97,0x3a3104fe,0x3a09279a,0x3a35061a,0x3a48f998,0x3a7ed848,0x3a63df94,0x3a46a31d,0x39e33a47,0x39e18dcc,0x39aed23c,0x39803d7a,0x395124cf,0x394f568b,0x3a0f12c3,0x39ae2f2c,0x39db0b8f,0x3a7715d5, +0x3a44fb25,0x393d6fb9,0x3a195148,0x3ac45127,0x3b0a5137,0x3b4051b1,0x3b0a85a7,0x3ad36da1,0x3a59ac13,0x3a97e90e,0x3ac2f220,0x3ae3a1c8,0x3ae92b58,0x3af91a02,0x3b10e9a9,0x3b3764a6,0x3b3b2058,0x3b153424,0x3a9bc797,0x3a0e9e65,0x391928bd,0x39f85bff,0x3a726f9c,0x3acab47e,0x3aa9f142, +0x3a6135dd,0xb804b5e6,0xb942f3da,0xba238ffe,0xbaa72cbf,0xbaff680c,0xbaf8c133,0xb7f36a14,0xb9f4c727,0x379c9f78,0x3ab72207,0x3972b3b5,0x3a4a85bb,0x3a916b3f,0x3af67097,0x3b352e26,0x3b8a1989,0x3b49ff8b,0x3b226a77,0x3a5b8372,0x3aeaf777,0x3ae89999,0x3afb6116,0x3af95ffc,0x3b36a754, +0x3b586db1,0x3b9ec703,0x3b9aa54f,0x3b83c594,0x3ae8a67b,0x3a165c2d,0xb984bb7f,0x39e0f375,0x3a952919,0x3b015ee6,0x3af2e97e,0x3aa2c7f7,0xba74db70,0xba84ca7d,0xbb0f2d68,0xbb1730aa,0xbb6ed4f6,0xbb50bfcb,0xba697386,0xbadd86a1,0xba804776,0x3ae59fbb,0x398bc41c,0xbabc0aba,0x3760e6e9, +0x3b2ff79f,0x3b96b771,0x3be58f0e,0x3ba70969,0x3b66e276,0x3a8c349b,0x3ace8daf,0x3b27887f,0x3b7ec80c,0x3b6723ed,0x3b8113d3,0x3b97bc46,0x3be5172e,0x3bde72d1,0x3baa0244,0x3afd6bc9,0x392cb2a5,0xba99958a,0xb9260c16,0x3a9e467a,0x3b44c12e,0x3b138440,0x3b0d68c0,0xbaa93946,0xba96e735, +0xbb6c4683,0xbb9c2863,0xbbf51b6a,0xbbd33f1a,0xbac0b519,0xbb5907bf,0xbad276a4,0x3b226e24,0xba576fa3,0x3a87221e,0x3ad99684,0x3b34d629,0x3b9aa523,0x3bee5b94,0x3bcb4b39,0x3ba48ed9,0x3acf0fb3,0x3b3716ed,0x3b21cd6a,0x3b325fdd,0x3b1e054e,0x3b90b9da,0x3bc1aa2b,0x3c1f0af3,0x3c162180, +0x3bf867f6,0x3b4027dd,0x3a47b453,0xba84dca7,0x3a17e8eb,0x3aff6d34,0x3b925d13,0x3b6d8101,0x3b1c596f,0x3a660df2,0xba384cae,0xbb1c6265,0xbb8fb6e1,0xbbd82329,0xbbcf3b11,0xbad6bc40,0xbba0ac88,0xbb633dfa,0x3b5bed2e,0xba1cdfc6,0xbbbdebba,0xbb10f2af,0x3a1ec6f9,0x3a0c72a2,0xbb25859d, +0xbb5667f4,0xbb95c565,0xbbbb85e4,0x38243d2e,0x3bd5d7b3,0x3c131850,0x3c715327,0x3c1aba43,0xbbc29f02,0xbbe7bf5b,0xbbf0584d,0xbbe0d18e,0xbb3f7a41,0xba3918d1,0x39c6a5ac,0x39f6d32c,0xbb0b6488,0xbb8d6461,0xbbd6749e,0xbb795b45,0x3b88eb20,0xbabe86d6,0xbb25d6e1,0xbadb8050,0xba9f66c6, +0x3b15b4b5,0x3bf55f6b,0x3bec0260,0x3b983108,0xb93aaf1a,0xbb7380fb,0x3c6bfcc9,0x3bbb08e2,0xbaedcb00,0xbbb4f556,0xbc347782,0xba99ee22,0x3b55d478,0x3b845bf1,0x3ba8df72,0xba827832,0xbc4c53e9,0xbbf034d5,0xbb3b80d5,0x3b8023b0,0x3bf6399a,0x3bcf5144,0x3b974ea5,0x3afdd315,0x3ac3166c, +0x3ba71ca8,0x3b537b12,0x3b38fd1f,0x3a20767b,0x3aa1b74a,0xba4acc84,0xbad643e4,0xbb0907a5,0xba5e47ae,0xba62e0db,0x363826f1,0xbaff2105,0xbbda9431,0xbc30c2d8,0xbc0939ba,0xbaae1c13,0x3c427e80,0xbc834064,0xbc8b024f,0xbb699f7f,0xba4859e0,0xbb364c74,0x3a92e5d8,0x3a515b3b,0xbb3bd757, +0xbbaaa841,0xbb2ff2b6,0x3b4bcc03,0xbb17d3a0,0xbb6faaf7,0xbade98f1,0xbb169642,0xba2ec846,0xbb16247c,0xb98e45be,0x3a727970,0x3b40b5de,0x3b233a20,0x3ac03c76,0xba83f5de,0xba99ff6a,0xbabddd2e,0xbb23ffe9,0xba1dd939,0x39fe1b53,0x383ed64f,0x391c45b4,0xba17d940,0xba00a721,0xbc0c33d1, +0xbbfd2567,0x3affbf8b,0xbc63ee2d,0xbc6a30ca,0xbc82e2c7,0xbb2b68ee,0x3b204766,0x3bdbe60f,0x3b4ec584,0xbaa10b68,0xbbf284eb,0xbc0cf395,0xbb787935,0x3bd7e70a,0x3a8a0a85,0xbad9dafe,0xbb5bd5b2,0xbb0d8de8,0xbb034bbb,0xba50b2e3,0x393c2d02,0x3a21a612,0x3a11c37b,0x3aa20137,0x3a143a59, +0x39192634,0xba9f28bf,0xbaa66a16,0xbab86c0d,0xb8e3ae20,0xb90564d1,0xb8dfc4e8,0xba2e5ccb,0xba8737a8,0x3af2186f,0xb90d71a4,0xba5e2231,0x3baf570f,0xbc18b68e,0x3c8041e5,0x3b800444,0x3947b854,0xb9703d3f,0x3b61f79a,0xba4cc8e5,0xbacbbc98,0x3a721c13,0x3a9c6749,0xb9b2abbf,0xbb8072bb, +0xba9c7e50,0x3b040098,0x3afea5b0,0x3b513a9b,0x3b613189,0x3b8cc30a,0x3a9973fb,0x3910f078,0xb9ea78a6,0xb90e94a2,0x3a8ba88a,0x3b0a912d,0x3ad45304,0x3a030df4,0xb9f1c756,0xb9e8cf72,0xba025cef,0xb8072481,0x39228138,0x3a8e3a40,0x3b63ef84,0x3b763f6a,0x3b3fe781,0x3bc31c7b,0x3c6f7d2b, +0xbbf16716,0x3954d813,0x3afd2b4c,0x3abee597,0xba951571,0xba993ea7,0xba9d540f,0xba1462b2,0x3a4c9c6b,0x3b8e7756,0x3bebb8da,0x3bd7a74e,0x3b8c9113,0x3b7c38eb,0x3b155c1b,0x394f12be,0xbb1e562b,0xbb856b42,0xbba5cdbd,0xbb9f808f,0xbbaf9767,0xbba914e0,0xbb938d4d,0xbad1865c,0xba1a0199, +0xba7e84a9,0xbaa9bff1,0xbacc9041,0xbaf8877b,0xbae04a82,0xb9b5be39,0x3a5e2d6b,0xba3b67bf,0xba549a97,0xbb2f428b,0xbbaa2af1,0x3a8f1742,0xba2ed0b8,0xbb2ce2c1,0xbabed49b,0x3a815d70,0x3b8772ce,0x3bd0be97,0x3c05d772,0x3c053c04,0x3be9d539,0x3bc4abe0,0x3bd6db6e,0x3bc55374,0x3b874fe8, +0x3b4adaed,0x3ad26e27,0xb951e147,0xba315851,0xbab0959d,0xbafc243e,0xbb1db1dd,0xbb1295a3,0xbb206196,0xba8f7315,0xb9a9aa70,0x3a791329,0x3b0fee61,0x3b1610de,0x3a807eb1,0x3a901f50,0x3a281415,0x38db4119,0x3a332f78,0x39ed8741,0x39be971c,0x3ad2ca5b,0x3afa4d77,0x3b2921f6,0x3b3d2c84, +0x3b40171b,0x3b657413,0x3b74f5d5,0x3b940f3e,0x3bab6857,0x3ba909a9,0x3bb6e668,0x3bc451a5,0x3b8f9de3,0x3b3b5f04,0x3aa72f1b,0x3a1ad24e,0xba34cab1,0xbafa053b,0xbad7f023,0xbaec5d3e,0xbb00fb7a,0xbb17d70c,0xbb283a74,0xbb38962e,0xbb055674,0xba868981,0x389b8f4c,0x3a8d7df8,0x3b1fb317, +0x3b521ac6,0x3b61dcf0,0x3b797d5d,0x3b918051,0x3b69fe0e,0x3b710584,0x3b6f9571,0x3b09a65b,0x3b2e5368,0x3b1649b0,0x3b163932,0x3ada663c,0x3aa1f869,0x3a10ebec,0x37c0bcbd,0xb9b2bd0e,0xb9bd5742,0xb9b6ac37,0xb9c0108e,0xba5b08b7,0xbabcd01f,0xbaddb190,0xbb0eba79,0xbb24d2f8,0xbb30dac8, +0xbb317bc1,0xbb2c2832,0xbb29221a,0xbb2d1f64,0xbb33abf6,0xbb3cc3ff,0xbb10fef0,0xbb029109,0xbaf1a2c3,0xba7ec114,0x399559d4,0x3a8ca1aa,0x3b043c3c,0x3b322de7,0x3b70ef51,0x3b7c6cd2,0x3b62f73d,0x3b6ba741,0x3b69f7e6,0xbba0e0ee,0xbb6f6722,0xbb699865,0xbb71c508,0xbb641cc6,0xbb5bcb51, +0xbb4c2767,0xbb513eda,0xbb50c71a,0xbb49cc88,0xbb4486b0,0xbb3449bf,0xbb1f6da8,0xbb1562d5,0xbb0dcad8,0xbb0fd62e,0xbb23fe2f,0xbb28f80b,0xbb32e88b,0xbb4e2d5c,0xbb597eab,0xbb5fa54c,0xbb68f0f3,0xbb7cd89f,0xbb8259e7,0xbb8481ab,0xbb878263,0xbb893492,0xbb86f121,0xbb8a27a0,0xbb77934f, +0xbb8c099f,0xbb8384ba,0xbb91e9fe,0xbb9e9d31,0xbb8aa852,0xbaa12a6f,0xbab0b163,0xbad0f781,0xbad16862,0xbae3c726,0xbaf8f750,0xbb099fde,0xbb145240,0xbb0f5fea,0xbb103eb8,0xbb104a63,0xbb129754,0xbb143e5e,0xbb1364ac,0xbb175697,0xbb19b125,0xbb1baab4,0xbb1a7af2,0xbb19548e,0xbb18d123, +0xbb19f738,0xbb20235f,0xbb2136cd,0xbb19182d,0xbb1c1c36,0xbb1d6bd9,0xbb18f960,0xbb05f139,0xbaf7d002,0xbae364af,0xbacf1c4b,0xba97b647,0xba7d8088,0xba8e231d,0xbaab82bb,0xba9d1cdc,0xbb63d717,0x3a880b69,0x3a484f2e,0x3a43ed61,0x3a4e346e,0x3a5e407e,0x3a8f5f71,0x3a67cd77,0x3a503fd1, +0x3a1c5738,0x3a3f8c8b,0x3a4730ec,0x3a4d3a7c,0x3a402dab,0x3a5cb24f,0x3a741add,0x3a9bb5fd,0x3aa5d473,0x3a99590e,0x3a6253c9,0x3a30d4e0,0x3a0b5252,0x3a30fb57,0x3a3cced1,0x3a679866,0x3a49f143,0x3a2d22c0,0x39b101c9,0x39c57b80,0x39ada9d5,0x398cd90e,0x396a63b8,0x393fe9a9,0x39caec96, +0x3999a0a9,0x39be5646,0x3a45a664,0x3a328c46,0x3984fe40,0x3a1c7ceb,0x3aabf0c3,0x3af97e46,0x3b3b9aa9,0x3b14a6fa,0x3adfa231,0x3a4813dd,0x3a55a109,0x3a99f037,0x3af743c8,0x3ae65dd5,0x3ae9f349,0x3af85da0,0x3b2bfe4c,0x3b34116b,0x3b136f97,0x3aa3a4aa,0x3a2b0a5d,0x399b96c4,0x3a1d2f81, +0x3a7649df,0x3a9fb295,0x3a8d71b0,0x3a286bec,0xb99f74ce,0xb9d5e0db,0xba58a0c2,0xbab837a7,0xbafbe567,0xbaf5a2c9,0xb9e7c4cf,0xb9d8fe3e,0x37da7847,0x3a6a70eb,0x395d503c,0x3a4e3f11,0x3a95493e,0x3ad36132,0x3b261d72,0x3b841704,0x3b4e098d,0x3b282820,0x3a31a9ef,0x3ab326c4,0x3abb263d, +0x3b173687,0x3af080d4,0x3b293feb,0x3b315d11,0x3b954487,0x3b97901c,0x3b857d47,0x3b021407,0x3a71f258,0x38f22a85,0x3a3c9610,0x3aa06e61,0x3ac113db,0x3ad272ba,0x3a81250c,0xbab9bfa8,0xbaa20b55,0xbb0c281a,0xbb13f500,0xbb5bf0f6,0xbb48b68f,0xbad14d41,0xbacd5de3,0xba6f5ffd,0x3a63deae, +0x39771cde,0xba9a757f,0x3984ad00,0x3b119b14,0x3b867c40,0x3be261f3,0x3bb4434d,0x3b7ecbea,0x3a9528b7,0x3a263eab,0x3ae3a3af,0x3b949d01,0x3b69d2c1,0x3b7e00b5,0x3b7bf922,0x3bd74fca,0x3bd804ac,0x3badf78b,0x3b156f6d,0x3a243e97,0xba0c1bc3,0x39a14a79,0x3ab08bda,0x3b091726,0x3adf75dd, +0x3ade94c0,0xbb08256a,0xbaf164eb,0xbb8e0253,0xbb9e0633,0xbbff7b57,0xbbd78d36,0xbb233087,0xbb48a192,0xbabb04ac,0x3a99e8c3,0xba4da831,0x3a88b7de,0x3aca6cc5,0x3b12f102,0x3b8b2f49,0x3bdc48fa,0x3bcd7933,0x3ba0995b,0x3aa7676e,0x3b06de76,0x3b05c0e1,0x3b664ed0,0x3b25c3a0,0x3b8694d2, +0x3b9c4c3a,0x3c154c80,0x3c15201a,0x3c00f413,0x3b690594,0x3ae0fa18,0xb79d2d6a,0x3ab8ce12,0x3b1027bd,0x3b68693a,0x3b523e20,0x3b02a0a8,0xb885292f,0xbacfe953,0xbb3fb442,0xbb79ece7,0xbbe60ea2,0xbbe0b1cd,0xbb35407f,0xbb9fee78,0xbb4ad645,0x3addcf6a,0xba1bfc9f,0xbb2f0d04,0x386038f8, +0x3b70af5e,0x3b39b394,0xbb06954d,0xbaf90ea7,0xbb57b937,0xbbc26202,0xba7b3c60,0x3b8e5360,0x3bd45fac,0x3c58fab5,0x3c16f597,0xbbb0035e,0xbbe21d9c,0xbc00afcc,0xbc187718,0xbbb94d56,0xbb829dcb,0xbb722181,0xbb48869a,0xbb90f4f7,0xbbc347c5,0xbbdc2279,0xbb79aacc,0x3b8b0ffe,0xbacc1fbd, +0xbb1bf831,0xbaca316d,0xba6e9906,0x3b5a303d,0x3c15b99d,0x3c08865e,0x3bb0b989,0x39ef4f13,0xba920778,0x3c4c4ed1,0x3b653d1d,0xbae51d11,0xbbaaceb1,0xbc3105ef,0xbb7ee386,0x39d77fbf,0x3b51fd17,0x3bb9b59c,0x39a041ec,0xbc398a86,0xbc084012,0xbb9bb610,0x3a98ad68,0x3bec5278,0x3bf3a75a, +0x3bb28dde,0x3b5210dd,0x3b214140,0x3bb219ec,0x3b45df19,0x3b25c293,0x3a8e79aa,0x3adbbc50,0xb9b5dc0e,0xbb0641d6,0xbb0238f2,0xba017c7f,0xba06e7e1,0x38803f9b,0xbb12f676,0xbbe27dc2,0xbc3aa9a6,0xbc027cda,0x3a3ab52f,0x3c32d00b,0xbc755e17,0xbc5dd6ae,0xbbb549e4,0xbb2e8ac8,0x3953633e, +0x3a966b79,0x398dfa13,0xbb0e9bb0,0xbbd05dca,0xbb79aac0,0x3b803059,0xbb0c64b4,0xbb63f4ee,0xbb307d59,0xbb0faf81,0xb9fcab63,0xbb35f613,0xb9cba46e,0x399c4bad,0x3b0f2d2c,0x3ae10544,0x3a3e3c20,0xbaac19a0,0xbaae9a96,0xbabebf0f,0xbb1209be,0xb9f981d2,0x39f7d369,0xb7e03113,0x39af69ba, +0xba225e49,0xbadadae8,0xbc0e81c1,0xbbed648c,0x3ae4c6ed,0xbc50406c,0xbc51abb2,0xbc5b0f8d,0xbb3f8dab,0x3b02f507,0x3c1dab7d,0x3bb2e841,0x3a4b1553,0xbbce5ee9,0xbc1f9618,0xbbb6d3a9,0x3becfe78,0x3ad15d8d,0xba9b7f1c,0xbb70ad4e,0xbb26161a,0xbb2055ee,0xbaaff9e1,0xb8b0be50,0x39a64c2f, +0x389453d5,0x3a94e46f,0x39f01f9a,0xb916161f,0xbab25c29,0xbac538a9,0xba918c52,0xb995293c,0xb8dd6d7c,0xb8ce1dd0,0xb9b4d75a,0xba52b6bc,0x3a87cef3,0xba4356d7,0xba8baad4,0x3b9ff8a5,0xbc08a864,0x3c3af342,0xba8746c1,0xb9a7694e,0x3a41d343,0x3ba0c6b2,0x3af4ca10,0x3a33ccf0,0x39d66857, +0x3af05bfa,0x3a136f31,0xbb30c423,0xbac9f0cf,0x3aa38b78,0x3a7360a2,0x3b47f27c,0x3b8127fe,0x3b92d3f1,0x3af80a5d,0x3a9494ba,0x39c48a35,0x3a05c395,0x3adbd3c7,0x3b27cc93,0x3af03500,0x3a09284f,0xba7ca77c,0xb9dd6b5d,0xb98fe3de,0x3935f423,0x394a8a30,0x3a98e751,0x3b628066,0x3b242bc6, +0x3afe0796,0x3be24e5f,0x3c4d715b,0xbb9cfdbf,0x3b18a8f1,0x3b71ce57,0x3b3805f2,0xba6ce7c0,0xbad78769,0xbaf8e982,0xbaa94839,0xb9d799be,0x3b25a36e,0x3bc72297,0x3bb16d4e,0x3b833432,0x3b593155,0x3af79fbb,0xb913b1a9,0xbb348e49,0xbb80e712,0xbb99c829,0xbb9246d0,0xbb9e8c72,0xbb96d095, +0xbb5aafa0,0xba882405,0xb955a205,0xba48d351,0xba9b5863,0xbab9c003,0xbabbb0e2,0xbac00772,0xb9e98380,0x389fdcb3,0xb8896614,0xb99da5bf,0xbb308cc1,0xbb8d3dd0,0xba957268,0xbb4e1559,0xbb90eba4,0xbb3c75ad,0xb942828e,0x3b48dad2,0x3ba7d4b6,0x3bdf68fc,0x3bfdba1d,0x3bfa7e81,0x3be638a9, +0x3bf51bb8,0x3be0dcaa,0x3ba1f5d3,0x3b82dd94,0x3b1b5710,0x39f1112b,0xb9d1ad4c,0xbab674fe,0xbb17bf17,0xbb33c432,0xbb18b416,0xbb109ea8,0xba1e5a84,0x395b6955,0x3aa7c9db,0x3ae3def3,0x3ac2327c,0x381855fa,0x3965bf9c,0x38879154,0xb9f14f79,0xb90df1c9,0xba0ce1d5,0xba289e53,0xb8971caa, +0x3b12bd6f,0x3b3b3387,0x3b30c4f4,0x3b2b0c96,0x3b58409f,0x3b7c76d4,0x3b9c0cad,0x3bb2d72c,0x3bb4b876,0x3bc25cb3,0x3bcd0155,0x3b9b1095,0x3b4ec202,0x3ac47f9b,0x3a6b5149,0xba0b87d0,0xbad63c96,0xbaca0612,0xbae87b70,0xbb0644b8,0xbb1540ef,0xbb1bd779,0xbb1f32c0,0xbab0c1f1,0xb9414c94, +0x3a8c16cc,0x3aef2259,0x3b3bf8d1,0x3b6496f1,0x3b65eb1a,0x3b717819,0x3b89b53e,0x3b70318d,0x3b7d935e,0x3b78188d,0x3b1c7a4c,0x3b749184,0x3b63f734,0x3b69dfdc,0x3b4bef3a,0x3b336c80,0x3aebba5c,0x3a90ecf7,0x3a3c48a0,0x3a04eeaf,0x3992898d,0x3844b562,0xba194561,0xbab428f7,0xbaecded1, +0xbb0d0611,0xbb1c9620,0xbb1e2984,0xbb1db4f6,0xbb0f23ec,0xbb0f35dd,0xbb10b4bc,0xbb19ddda,0xbb21f8f3,0xbadee338,0xbaa73244,0xba7206e9,0xb8a9fa8f,0x3a9909fd,0x3afe9265,0x3b29fcd7,0x3b55376f,0x3b7c3f44,0x3b85e5e1,0x3b870954,0x3b8e3773,0x3b8f1f82,0xbb763d0c,0xbb267696,0xbb283ec1, +0xbb414126,0xbb4379a0,0xbb284268,0xbb1ec9d3,0xbb21b778,0xbb28a679,0xbb253990,0xbb23d9af,0xbb19fede,0xbb0986ce,0xbb085d65,0xbaffc8d1,0xbb04f672,0xbb1c3474,0xbb2305be,0xbb31fd29,0xbb48fc6d,0xbb54370c,0xbb568715,0xbb6096cd,0xbb75e5ab,0xbb82d3b9,0xbb89a025,0xbb869c04,0xbb84feeb, +0xbb766814,0xbb65f8e5,0xbb43521f,0xbb3d570d,0xbb2f923c,0xbb5a7728,0xbb708a9f,0xbb4770ce,0xba617f2a,0xba5ff44e,0xba89cb0a,0xba8705f1,0xba9e4289,0xbab5278e,0xbad653bb,0xbae9641b,0xbaec706a,0xbaf80e05,0xbb015263,0xbb07ceb2,0xbb0d5301,0xbb1010ea,0xbb10d502,0xbb106875,0xbb0f9ca9, +0xbb0b3ce8,0xbb07d28e,0xbb057325,0xbb077ee4,0xbb0f18b5,0xbb129cc8,0xbb077d76,0xbb09a551,0xbb0e0664,0xbb04403c,0xbadf92b2,0xbac8751c,0xbab23b14,0xbaa359dc,0xba6679ba,0xba469449,0xba520d8c,0xba7d653e,0xba5bffdb,0xbb52bef1,0x3a65b5b0,0x3a2cd624,0x3a2d9188,0x3a30ecfe,0x3a3fe1f7, +0x3a7d1f17,0x3a4f8d14,0x3a3557fd,0x39f16443,0x3a18e29a,0x3a28a6b9,0x3a4cb4e8,0x3a25f227,0x3a37685c,0x3a41af74,0x3a89a0f6,0x3a968945,0x3a8b1d61,0x3a52a5e6,0x3a28329c,0x3a061d80,0x3a23d9c0,0x3a29a5da,0x3a4a760c,0x3a2742bd,0x3a0f2349,0x397b85e7,0x39afe65b,0x39af6e20,0x3987a157, +0x3985462a,0x39424531,0x3965a218,0x39832d30,0x3996fbb9,0x3a11156e,0x3a1b5c89,0x39a91f2a,0x3a18519d,0x3a8c41ad,0x3ad5c2a8,0x3b2edf4e,0x3b17678f,0x3ade4546,0x3a16a040,0x39fe40df,0x3a62fe20,0x3b000e1c,0x3addad60,0x3ad670d3,0x3acfa0b3,0x3b1df126,0x3b280b90,0x3b099c4e,0x3aa33c8a, +0x3a3ab1eb,0x39d95ce7,0x3a2f8bd4,0x3a65b65c,0x3a620346,0x3a587432,0x39cfaf32,0xba1a935a,0xba1bba61,0xba8298a6,0xbad2866f,0xbaf1894d,0xbaeed310,0xba687719,0xb9b174aa,0x3854b8d3,0x39c98760,0x3930affb,0x3a3d242a,0x3a95fe61,0x3aae6094,0x3b12813e,0x3b7209ec,0x3b4a1e87,0x3b25e737, +0x39b4d86f,0x3a74866b,0x3a8fcc3d,0x3b2b5b37,0x3adf9f16,0x3b175e9f,0x3b0cfcad,0x3b889e5a,0x3b904476,0x3b7f8496,0x3b0a4bc9,0x3a9e5f72,0x39fe3924,0x3a70a193,0x3a9b4698,0x3a7710e6,0x3aa86b2f,0x3a349b4d,0xbaf4928b,0xbab0ee30,0xbb01e019,0xbb1ac0f8,0xbb41df74,0xbb36eea4,0xbb170c51, +0xbab8299b,0xba56d802,0x37a5de91,0x390ff431,0xba6c1f6b,0x3a069f08,0x3adc6b7f,0x3b652638,0x3bd5ba39,0x3bb9b8db,0x3b847791,0x3a696cdd,0xb90a4d63,0x3a88144f,0x3ba39f54,0x3b67b018,0x3b7286ff,0x3b50ce2b,0x3bc79f9e,0x3bcd7487,0x3ba7a354,0x3b240b30,0x3a842694,0x38b29ccc,0x3a2cfd68, +0x3aaf1853,0x3a91bf4c,0x3a905ab5,0x3aa08d36,0xbb3b2eb3,0xbb1dd2a6,0xbb9f8e88,0xbba77156,0xbc007374,0xbbd4b8dc,0xbb6a8d67,0xbb2c50ae,0xba928221,0xb900a748,0xba438423,0x3a660335,0x3ac43d36,0x3ae3fbe9,0x3b7107fb,0x3bc1f9d1,0x3bc9877a,0x3b9644d0,0x3a340391,0x3aacbb69,0x3adc2b82, +0x3b8a009e,0x3b256c89,0x3b6d68da,0x3b754f8f,0x3c08d48f,0x3c0fb114,0x3bfcd299,0x3b83d9c1,0x3b26e07b,0x3a6e9b20,0x3b0590ec,0x3b14fafe,0x3b1dcced,0x3b30479e,0x3ad168a9,0xba92714d,0xbb0ee1a1,0xbb49c319,0xbb540e85,0xbbe1c184,0xbbe09b29,0xbb81796f,0xbb95d190,0xbb296637,0x38292415, +0xba2929f6,0x3a044650,0x3b1283df,0x3bce0102,0x3b9cfb61,0xbaa9cacb,0xba1b1b7d,0xbaf55214,0xbba9f6a6,0xbad568cf,0x3b0b20dd,0x3b81f1d3,0x3c3414f1,0x3c0741a3,0xbb947766,0xbbdc714a,0xbc0656c5,0xbc391da6,0xbc03df47,0xbbdd6a41,0xbbe5f1f8,0xbbc901a1,0xbbcd7344,0xbbec0ba4,0xbbcfd8fe, +0xbb61375a,0x3b84bf13,0xbaaf5bb3,0xbae8d662,0xba87a43a,0xb98e1abe,0x3b8cb218,0x3c236642,0x3c17ae0e,0x3bcab032,0x3aa8702b,0x3ac9f3e8,0x3c210ee7,0x3adb717d,0xbaa93892,0xbb99f550,0xbc28bc05,0xbbc54eb6,0xbb04f25c,0x3b17cf72,0x3bbf68f3,0x3acc6f78,0xbc1cf077,0xbc11f38d,0xbbcf652e, +0xba84cf22,0x3bcc7bfe,0x3bff736d,0x3bc7c795,0x3b92999b,0x3b65e0be,0x3bb418ba,0x3b349b12,0x3b08fb9f,0x3aafacda,0x3afc38ab,0x362d505c,0xbb146e3e,0xbaf7e10f,0xb97dd647,0xb97ebb4d,0xb7ad27e4,0xbb23ad1e,0xbbdb7835,0xbc3dda2c,0xbbf612a1,0x3b3b93b5,0x3c14f3c5,0xbc54b701,0xbc2a32c5, +0xbbff20e9,0xbb907d90,0x3b478d88,0x3a85b3ed,0xb87e0f5f,0xba47109f,0xbbd550ef,0xbb90bbdf,0x3b7ed317,0xbaebbbe5,0xbb3dd8fd,0xbb67aafd,0xbb0ce487,0xb9ce7a78,0xbb4723b5,0xb9d237a6,0xb993626e,0x3a9dac2b,0x3a5137f0,0xb888c68c,0xbac5ad83,0xbac4bf9b,0xbabee6f2,0xbaecf46d,0xb988ef26, +0x39e9a3c1,0xb86f42ef,0x39d203ba,0xba1d6f8a,0xbb34e934,0xbbf819ef,0xbbc2eb3c,0x39071ca9,0xbc2c332c,0xbc2d20a8,0xbc1d8d31,0xbb349a6c,0x3adc80b9,0x3c3ef56a,0x3bed8908,0x3b3d2f3b,0xbb878dc3,0xbc20db72,0xbbe27315,0x3bdeaefd,0x3b0b1d28,0xb9d762f2,0xbb7fed87,0xbb2c464a,0xbb2ed5ad, +0xbaf4b76d,0xb9d4d82c,0xb8b8ebe5,0xba066927,0x3a55d962,0x39953ba0,0xb9c1bc8e,0xbabf52b1,0xbad08953,0xba452e0b,0xb9a91fea,0x381544fb,0xb91fb9eb,0xb9083368,0xba29ad9e,0xb9443652,0xba68d667,0xba4fde93,0x3b31c630,0xbbe6edce,0x3bd64c1f,0xbb43f7c1,0x3a8fc3b4,0x3b2ffd90,0x3bb2e94e, +0x3b953fce,0x3b514f32,0x38ee99f3,0x3b096b3c,0x3a66e442,0xbae4f191,0xbb0059ab,0x3a063a3b,0x3972846e,0x3b3dac60,0x3b879030,0x3b8e4d21,0x3b2239fd,0x3b078964,0x3a9738cb,0x3a8a97ae,0x3b0951f3,0x3b38f2ac,0x3af9654d,0x39fd4ee5,0xba9c5fde,0xb9e2d31a,0xb86a4408,0x397f6cca,0x39633966, +0x3a938dc1,0x3b4330bc,0x3a77e134,0x3a239f0f,0x3bde7c94,0x3c115639,0xbb0b0696,0x3b6961d5,0x3b8f09a8,0x3b5d79f2,0xba40497b,0xbb1445fb,0xbb381b5f,0xbb106378,0xbad8c4d0,0x3a0f93b7,0x3b974757,0x3b7e911c,0x3b65f5f2,0x3b364c1f,0x3abb3500,0xb9d25be3,0xbb39beef,0xbb65e6e4,0xbb86fb57, +0xbb843e3d,0xbb873212,0xbb790abb,0xbb066a96,0xba045c0a,0x38dc5802,0xba00a317,0xba80fd72,0xba918f57,0xba3f1200,0xba884d82,0xb9e5562a,0xba2c02f1,0x39e0b1f0,0x398bd695,0xbb0b7cad,0xbb3deb3d,0xbb4399b3,0xbb9feb40,0xbbac5adb,0xbb77ee91,0xbab6314d,0x3ac09e6f,0x3b51a4ea,0x3b9c9d88, +0x3bdad283,0x3bf4e3bb,0x3bf4200e,0x3c010129,0x3bec930b,0x3bb225a4,0x3b94ec31,0x3b3b8d48,0x3a835fec,0xb9b6074c,0xbacc2278,0xbb2e9806,0xbb43edac,0xbb17bf4c,0xbaf13b04,0xb91595dc,0x3a272e58,0x3abb205a,0x3a8d4948,0x3a21a737,0xba38e51c,0xb9dd168f,0xb99f2fb5,0xba49ad75,0xba4aeb52, +0xbab16570,0xbabf6c89,0xbacd4159,0x3b0c27f4,0x3b216d07,0x3af7c401,0x3af40ce2,0x3b2ef28c,0x3b61b925,0x3b8f4aa4,0x3ba64d0b,0x3badd451,0x3bbc611d,0x3bc44a85,0x3b9924a9,0x3b4f7666,0x3ac7d6ac,0x3a863535,0xb9f1d1bb,0xbab86caf,0xbac4474c,0xbaea7732,0xbb096603,0xbb114be2,0xbb0d8a94, +0xbb04bfee,0xba3ca6e3,0x3a0a3dd4,0x3afb684e,0x3b1e750c,0x3b48d2df,0x3b66ba21,0x3b58258a,0x3b571c50,0x3b6d9885,0x3b62f635,0x3b73842f,0x3b63444b,0x3b17602d,0x3b8d484c,0x3b8a2c27,0x3b8ed48e,0x3b8623eb,0x3b7a92e7,0x3b3c924d,0x3b105aea,0x3af52398,0x3ab13b68,0x3a50d5b5,0x399d90a9, +0xb9e0f0b0,0xbaaf0189,0xbaf885e9,0xbb09a5af,0xbb12be55,0xbb0c7ab4,0xbb0972d7,0xbae24cf7,0xbaed12d8,0xbaea53e1,0xbb012e6d,0xbb091ae4,0xbaa0610c,0xba115ae4,0x3826388d,0x3a422c38,0x3af83927,0x3b2a263a,0x3b3b0648,0x3b5abd1f,0x3b631f81,0x3b725313,0x3b8718c0,0x3b90b32b,0x3b954372, +0xbb16dcff,0xba9e3967,0xbab2a807,0xbafdfc88,0xbb124230,0xbadf5e94,0xbae7c1df,0xbaebaa9f,0xbb011f68,0xbafe7c13,0xbb022753,0xbb023847,0xbaf72cfd,0xbb0783e8,0xbafd8155,0xbb0524e1,0xbb1e11fb,0xbb2788fa,0xbb3a997c,0xbb4bd9b7,0xbb5193fb,0xbb4bb905,0xbb505987,0xbb61fa48,0xbb76b669, +0xbb844b26,0xbb799d07,0xbb72ab16,0xbb573e0d,0xbb33cd6e,0xbb09feb6,0xbad1e42e,0xbaa9c1d3,0xbb04c930,0xbb15fbbc,0xbad3849d,0xba1771b6,0xb9e39079,0xba19d7bd,0xba15b589,0xba48536d,0xba6f678d,0xba983722,0xbaa858ab,0xbabc8702,0xbad52ef1,0xbaeb6a94,0xbaff7fe6,0xbb07b3d9,0xbb0d6a72, +0xbb0aff46,0xbb08e96f,0xbb05c5d6,0xbafc65d1,0xbaf1e731,0xbaebe5a8,0xbaee1cf9,0xbafc18f0,0xbb0280c2,0xbaec5b82,0xbae8d330,0xbaf37226,0xbadb2e40,0xbab3d340,0xba9c01cf,0xba8a637b,0xba84da8e,0xba424ec0,0xba2f3353,0xba28ae92,0xba3c7190,0xba17fc46,0xbb45e0e3,0x3a449389,0x3a14f46a, +0x3a21bab6,0x3a1c1212,0x3a28290d,0x3a5dfc91,0x3a3d119a,0x3a222f1b,0x39ba41ec,0x39f9b3da,0x3a1430b2,0x3a50bc67,0x3a12c76f,0x3a19df17,0x3a1a2c32,0x3a746a9c,0x3a88f4de,0x3a7cb8c1,0x3a4854fd,0x3a24efb7,0x3a083c03,0x3a14fcf0,0x3a107ea9,0x3a1f3d23,0x3a070343,0x39dafc6d,0x38d8eb78, +0x39844914,0x399591be,0x3935e574,0x396205b0,0x3911a601,0x37ce85a9,0x39550b84,0x39805b88,0x39ae7a0f,0x39fae00e,0x39a0c52e,0x3a1b7f61,0x3a619034,0x3ab520e2,0x3b1ec227,0x3b172cc5,0x3adadfa7,0x39d04b31,0x3987f00c,0x3a2dbb9a,0x3b050e1b,0x3ad9236e,0x3ac8143c,0x3ab1d73e,0x3b12acc3, +0x3b1d6de9,0x3aff703c,0x3aa55fd8,0x3a4f48ab,0x3a11d2e8,0x3a3075d9,0x3a481404,0x3a0be79e,0x3a121cc7,0x392bc7a1,0xba61509e,0xba38e323,0xba91535a,0xbaece199,0xbadbf532,0xbad80a11,0xbaab02bc,0xb987b9e1,0x38c492f0,0xb87bbfca,0x38d6414a,0x3a1a74a3,0x3a9d14a9,0x3a916f93,0x3aff02ec, +0x3b56a1cd,0x3b43aab4,0x3b23644d,0x389125a9,0x3a259b0f,0x3a6a4a28,0x3b3f7df3,0x3acf2d1e,0x3b0516c8,0x3ae01dce,0x3b780f78,0x3b8818eb,0x3b6ff02e,0x3b12124a,0x3ac2e239,0x3a5eb587,0x3a8204f1,0x3a882fbd,0x3a009545,0x3a6940b6,0x39b9750c,0xbb0f915d,0xbab2269c,0xbadf3fe3,0xbb28efb8, +0xbb250459,0xbb214033,0xbb3c24da,0xba9c8578,0xba34a9f7,0xba312a64,0x37f2777e,0xba37a0d5,0x3a48e362,0x3a9c30c7,0x3b3e9a4c,0x3bc2bc97,0x3bb98aa0,0x3b8641f0,0x3a18067e,0xba1db740,0x3a1d4ca9,0x3bb09113,0x3b65a2de,0x3b640bae,0x3b30cdaf,0x3bb9d525,0x3bc3134e,0x3b9df105,0x3b31d8b8, +0x3ab47621,0x3a30ed81,0x3a6551bc,0x3a9c313a,0x396db849,0x39f4e245,0x3a3958b1,0xbb6813a0,0xbb3a5fea,0xbba8276c,0xbbb825ec,0xbbf64999,0xbbc98eb9,0xbb981ec0,0xbb0b47b1,0xba473469,0xbaa2455e,0xba434dcd,0x3a1c4f98,0x3aca2a9f,0x3ab12a94,0x3b4b7bb9,0x3ba355ef,0x3bc25e90,0x3b8ceff5, +0x396035e2,0x3a4dc49d,0x3ac6fb01,0x3ba04d07,0x3b1f11c9,0x3b433b75,0x3b3a6632,0x3bf6f94d,0x3c07d62b,0x3bf0a949,0x3b90b926,0x3b561c45,0x3ae3c1d7,0x3b1a981c,0x3b0de14b,0x3aa211bf,0x3b05b501,0x3a95dfbd,0xbb08492c,0xbb18b992,0xbb375d10,0xbb305f10,0xbbcc743b,0xbbcd98d4,0xbba444a8, +0xbb84d79e,0xbb037ae4,0xbab41c50,0xba467bfb,0x3b523eb8,0x3b87f967,0x3c0852cc,0x3bd0b18f,0xb7baf283,0x3a1f41c0,0xba0ae4cb,0xbb73d677,0xbafc58b2,0x3942d07e,0x3ae6aa8f,0x3c0c46cd,0x3be9a385,0xbb43b7de,0xbbcd957b,0xbc06b9f1,0xbc4cee99,0xbc21a217,0xbc0fd61d,0xbc169bbf,0xbc0a9dec, +0xbbf6f320,0xbc0311e2,0xbbb28a87,0xbb2f40c6,0x3b6af883,0xba6edeca,0xba82df98,0xb9abe235,0x39fc865e,0x3ba3b645,0x3c2135fc,0x3c1f6343,0x3be1b6fa,0x3b0ac81e,0x3b7c89e9,0x3be55798,0x3a000a28,0xba107029,0xbb855af0,0xbc1e7a88,0xbbf1ab9d,0xbb738ead,0x3ae7badf,0x3bc07f4d,0x3b32d298, +0xbbf4bc4c,0xbc154541,0xbbf86a38,0xbb258303,0x3b9b124a,0x3bf19bd7,0x3bd50831,0x3bb7979c,0x3b93f546,0x3bac491c,0x3b1ee246,0x3acfd590,0x3ab46efd,0x3b000a3c,0x3982307d,0xbb176d69,0xbadde302,0x3759b311,0xb918b593,0xb92bf5a9,0xbb2e1343,0xbbc818e5,0xbc35dbf4,0xbbdfe78e,0x3b9cb0b3, +0x3be1f15e,0xbc2fe85c,0xbbfc46a7,0xbc1d3825,0xbbb521cb,0x3bb8a453,0x3a7e9ba7,0xb7b429b4,0x3a52e0d2,0xbbc441f7,0xbb97b957,0x3b5c2480,0xbaa1a84e,0xbafa6b2b,0xbb817d13,0xbb07ee4d,0xb9bdfd63,0xbb437295,0xb9acde30,0xba34f5af,0x3989224e,0xb8beea0c,0xba44ab13,0xbada0f02,0xbad13df1, +0xbab724a7,0xbaaba2e6,0x379808bd,0x39bef8e9,0xb905ba97,0x39ee3280,0xb9bebf21,0xbb5bf74a,0xbbb822e0,0xbb88e3b6,0xbb1a1beb,0xbc043126,0xbc08939a,0xbba76216,0xbb0dcaad,0x3ac39d6a,0x3c4f97b8,0x3c0a4e6d,0x3ba0f2a9,0xbaabe7b0,0xbc158408,0xbbfd4837,0x3bb9f810,0x3b34de37,0x3a451b6e, +0xbb771748,0xbb1d97a6,0xbb2c541f,0xbb0f857a,0xba3a23a2,0xb9e72a4a,0xba758d8f,0x39ef6724,0x39236e8f,0xba0931b6,0xbabcc945,0xbac04983,0xb9cb761b,0xb931bfd2,0x37f610b0,0xb8d2886b,0xb8beb9b9,0xb9e0eb49,0xbab47080,0xba0f1627,0xb9767f35,0xba1ff034,0xbbc692a1,0x3aebcbf2,0xbae12188, +0x3b7189b2,0x3b9d6a93,0x3b9f6e5d,0x3bdb714f,0x3bb6cd6a,0x3a2a8b58,0x3b136a0a,0x3a5880cd,0xba87cfe3,0xbb1ec7b2,0xb9332adb,0xb888457a,0x3b2f87d1,0x3b80a54a,0x3b82b026,0x3b3ea8ed,0x3b3d036e,0x3af5f10d,0x3ac96db1,0x3b1c7a70,0x3b4213e3,0x3aef59c3,0x39deef76,0xba99f7a4,0xb9c58077, +0x38fa649e,0x3817445c,0x390aea2f,0x3a73dfd6,0x3b0ec7b6,0xb9cdbcb5,0xba3490cc,0x3baf3d5e,0x3b849a8f,0x39b6a405,0x3b80993c,0x3b91076f,0x3b6f96c5,0xb9b42986,0xbb2e7f77,0xbb71af0a,0xbb50b1fc,0xbb38b361,0xbaaf0d76,0x3b4198a5,0x3b17a142,0x3b42f664,0x3b1634dd,0x3a8104dc,0xba02b69a, +0xbb2885c3,0xbb3caab8,0xbb5e95f7,0xbb62c611,0xbb53e1bc,0xbb3750fa,0xba507352,0xb74f48a4,0x39af663c,0xb96645a9,0xba3e6d90,0xba2bd48b,0xb4837289,0xba08ea07,0xb9b728e7,0xba9abd91,0x3a25b8d6,0x3a41448b,0xba7df39e,0xba84d36c,0xbb8a7108,0xbbb5c198,0xbba42eb7,0xbb83990a,0xbb2070ff, +0xb9908ad7,0x3a8e5c65,0x3b27c208,0x3baa877e,0x3bdc0ce8,0x3bed2f77,0x3bfbf8bb,0x3be84c48,0x3bb7860c,0x3b9b3bda,0x3b48a3ab,0x3aabe4a5,0xb9e78271,0xbae05c64,0xbb3b03d9,0xbb49d55c,0xbb0c036e,0xbab8243e,0x3987e4df,0x3a7847ec,0x3aad735e,0x39cacb42,0xb9057331,0xba951353,0xba506da4, +0xb9fce35d,0xba6939ed,0xbaa57429,0xbb029ffc,0xbb0924b1,0xbb304b3f,0x3aca56fb,0x3ac24c3e,0x3a399893,0x3a5cefea,0x3ad3f12b,0x3b269437,0x3b608128,0x3b88b491,0x3b98556f,0x3baa818a,0x3bb2e6cb,0x3b8fd270,0x3b467bd2,0x3ac1d135,0x3a87452a,0xb9e67770,0xbaa464d1,0xbac2cb3d,0xbaec6427, +0xbb080821,0xbb0ab2fe,0xbafb3f7b,0xbacc704b,0xb94f5a60,0x3a8c0407,0x3b2571a3,0x3b3480b4,0x3b438b31,0x3b570555,0x3b392884,0x3b2ae8f3,0x3b2feeee,0x3b3fb03c,0x3b50c30c,0x3b32a301,0x3aef9de0,0x3b8ea44e,0x3b9002b8,0x3b93b6a7,0x3b90371f,0x3b8ba376,0x3b6a2c89,0x3b4ab664,0x3b3d9cc7, +0x3b097d19,0x3aa464d5,0x3a17bc63,0xb977103d,0xba9e4936,0xbaf58c8d,0xbb00c1b9,0xbb0544f0,0xbaf4674c,0xbae9d5eb,0xbaa970a8,0xbac32efe,0xbab3c6ac,0xbaced214,0xbad8bca3,0xba4271a4,0x391b494a,0x3a8045c2,0x3abe7643,0x3b20ed95,0x3b44a64f,0x3b3ccbd5,0x3b4a632c,0x3b35ae8d,0x3b4096a8, +0x3b6bf374,0x3b823e63,0x3b8a32ae,0xba313464,0x394a6894,0xb88e21ed,0xba3da4eb,0xbaa45157,0xba536840,0xba95b0f5,0xba9b14e3,0xbab6b4a7,0xbab54f06,0xbac5550d,0xbad8cea4,0xbae0903e,0xbb09300b,0xbb000f8c,0xbb065061,0xbb1eeb27,0xbb2a3bd1,0xbb3eb08f,0xbb49add7,0xbb4b7b89,0xbb398ce3, +0xbb354a24,0xbb3d74a2,0xbb53bd62,0xbb64de77,0xbb4e32b2,0xbb43c1f4,0xbb263369,0xbae5a35c,0xba81c8b6,0xb9912374,0x3951fc06,0xba077ce4,0xba41bd87,0xb7dd3359,0xb9c48958,0xb8c1f08d,0xb95e3b96,0xb971dfc5,0xb9d69c89,0xba02a950,0xba34616e,0xba4d2a11,0xba8afa03,0xbaaf7abe,0xbacf8932, +0xbae929cc,0xbafcb332,0xbb0695a9,0xbb01ab6a,0xbafdc037,0xbaf472b5,0xbae0dd8e,0xbad4f65c,0xbacde2d6,0xbad05aa8,0xbaded4b5,0xbaecba4f,0xbac7670d,0xbabdf37e,0xbacb94d7,0xbab3c482,0xba91c339,0xba751870,0xba65c25c,0xba6f66c6,0xba403077,0xba2b96a3,0xba109196,0xba1f0828,0xb9e3d169, +0xbb35d7f1,0x3a1d6d8f,0x39ecb8ed,0x3a0dc606,0x3a028f67,0x3a0a4d67,0x3a356bf2,0x3a228018,0x3a08bbf4,0x397a0d9c,0x39bc00a8,0x39f7206f,0x3a4c4d55,0x39f03aa3,0x39eb1400,0x39e11d14,0x3a4e0630,0x3a6db23e,0x3a5ce6d7,0x3a363770,0x3a19bde6,0x3a01805d,0x39ffa9f4,0x39ee2601,0x3a01b2ba, +0x39c1eb0f,0x39972e19,0x37c01e57,0x395fbc3d,0x398a2899,0x38c6cba6,0x394a75cf,0x38feb289,0xb8f2aa3e,0x3934c45b,0x394e9038,0x39463087,0x39c5cb51,0x398e27dd,0x3a124414,0x3a29579d,0x3a92c792,0x3b087725,0x3b0f9133,0x3acba5b4,0x393a9e6a,0x3826ff94,0x39f2a67a,0x3b05723e,0x3acb6948, +0x3ab1ed44,0x3a93a8eb,0x3b049dbd,0x3b0f9bd2,0x3ae85945,0x3aa210ec,0x3a57b011,0x3a293c52,0x3a260e90,0x3a1f266e,0x3994bd3c,0x3993e2d2,0xb8b2ec47,0xba8b46e7,0xba4659c4,0xba95f065,0xbb002187,0xbabd5428,0xbab8c01e,0xbad5c06f,0xb9497aa4,0x38fee9dc,0xb9d0c994,0x36a0cbf3,0x39da89c7, +0x3a9c1c53,0x3a6b0608,0x3ad44deb,0x3b334331,0x3b34d9c4,0x3b1a368f,0xb948346f,0x39b57180,0x3a34a0e2,0x3b4d6f20,0x3aaf9093,0x3ad5ba5f,0x3aa966fd,0x3b594ff9,0x3b7922b0,0x3b5c90ea,0x3b14aa75,0x3ad9d71d,0x3a956565,0x3a7d7f97,0x3a5471d2,0x3921342f,0x39e57665,0xb795cbe2,0xbb1c4089, +0xbaab9251,0xbabaed14,0xbb3a113d,0xbb0a6c2d,0xbb0af8db,0xbb56b5cc,0xba7d2e06,0xba0ca211,0xba962d1e,0xb90336a2,0xba20e3f7,0x3a71944e,0x3a474326,0x3b1a4750,0x3ba8220e,0x3bb158f3,0x3b81180d,0x3936cb7d,0xba817329,0x3966f3a5,0x3bb78b9a,0x3b583ecf,0x3b49e63f,0x3b12842b,0x3ba96f9c, +0x3bb5abe9,0x3b924e25,0x3b3aa507,0x3ad7c0dd,0x3a9a00b4,0x3a77b577,0x3a6cc69b,0xb9e70397,0xb95efe44,0x3903bd4f,0xbb848b19,0xbb4a507f,0xbba60af0,0xbbc9b33b,0xbbdfa126,0xbbb709e6,0xbbb51fde,0xbad7b9b6,0xb9eb3e77,0xbb09c45e,0xba549fe0,0x396a23b8,0x3acf3576,0x3a869fb8,0x3b2375da, +0x3b7f22d6,0x3bb3c537,0x3b80e926,0xb92db6a2,0x3993e676,0x3aae91a8,0x3bb1596b,0x3b083ee9,0x3b05d05c,0x3b0101ac,0x3bd6d3b9,0x3bf833d9,0x3bdf81f4,0x3b97d560,0x3b763193,0x3b1d4f6f,0x3b1cf19a,0x3af4eada,0x3949ad9f,0x3aa672fb,0x3a1ee934,0xbb33c3c9,0xbb07b282,0xbb0fb578,0xbb06b9f5, +0xbbaad392,0xbbac373c,0xbbbc58f1,0xbb5e5820,0xbab8e729,0xbb1f5033,0xba7512db,0x3ba9775b,0x3bb704c5,0x3c1de877,0x3bf69301,0x3ad9c77c,0x3abeb002,0x39b2cbf3,0xbb0bd3d0,0xbb06776f,0xbab60747,0xb8fb3b1f,0x3bce7b31,0x3bcb9bcf,0xba318712,0xbbb2daff,0xbc023b03,0xbc5312db,0xbc3520b7, +0xbc2571fc,0xbc28862a,0xbc2201c2,0xbc0621aa,0xbc089062,0xbb851c24,0xbad47034,0x3b3e6661,0xb9deb402,0xb9827181,0x39a0f5c5,0x3a8dbb14,0x3bab0fb4,0x3c11625c,0x3c1c0bff,0x3bf207b2,0x3b4065ec,0x3bb66a02,0x3b901da7,0xb8742560,0x389df490,0xbb6a3bd2,0xbc1526d0,0xbc0676a0,0xbb9de4f3, +0x3ad3ca50,0x3bbbd48a,0x3b6f36b9,0xbbaac9e3,0xbc1586e7,0xbc0ea2c4,0xbb6931f9,0x3b3b8a19,0x3bccd559,0x3bd57312,0x3bced2a0,0x3baa65bf,0x3b9b8a27,0x3b04c7ec,0x3a890f86,0x3aa37e5f,0x3aea847a,0x39a67a1a,0xbb0e5bcb,0xbaac0238,0x3928281c,0xb9894c9b,0xb991fafe,0xbb284808,0xbbae29c2, +0xbc227b96,0xbbbee6b0,0x3bca3341,0x3b99ddcc,0xbc106c31,0xbbb885e4,0xbc2b504a,0xbbc0698f,0x3bf95801,0x3a697479,0x38e052d9,0x3af315df,0xbbad2b6a,0xbb985266,0x3b2174fb,0xba2c7ae9,0xba555040,0xbb82a2c7,0xbb059d2f,0xb9ffc4ca,0xbb31967a,0xb9a7a8ac,0xba82f0c0,0xb9f9ee51,0xba55d391, +0xbaa4da47,0xbae79c0f,0xbad0334d,0xbaa66f47,0xba4a7bee,0x39862793,0x3953869b,0xb8a748a7,0x39e91aeb,0x39306e4a,0xbb540bf2,0xbb679e45,0xbb208bc7,0xbb9b5696,0xbbc7349d,0xbbd770c4,0xb9afe37c,0xbabd7b88,0x3a928dbc,0x3c47780b,0x3c0e773c,0x3bcf3e01,0x3abc4e87,0xbc05235b,0xbc05ee68, +0x3b80cf4a,0x3b54f124,0x3b020e82,0xbb5cdf58,0xbb09ad33,0xbb269416,0xbb1a565d,0xba881305,0xba42474c,0xba8cdff8,0x39626a3e,0x3908f87e,0xba1d59dd,0xbaaa0687,0xba9c5ed8,0xb54fad0b,0xb8c3fc17,0xb78bf857,0x378fc6d3,0xb91f2837,0xb91f7e9f,0xbb09486c,0xb59f8230,0x399cbb3a,0xbb8b1d1a, +0xbbbc8cd3,0xbb108c9c,0x3b06d6fa,0x3bbd66de,0x3bb7f77d,0x3b21cdee,0x3bf23843,0x3bed4e65,0x3b0b2e89,0x3b2011c0,0x3a117c0b,0xba2688a1,0xbb4422f2,0xba799565,0xb944092c,0x3b1047e5,0x3b51a8d5,0x3b5ecb22,0x3b48cf69,0x3b6114ff,0x3b2440d7,0x3b01652f,0x3b29620a,0x3b4764e6,0x3ad15e2e, +0x39bc0bdd,0xba826532,0xb9361dc3,0x38857f78,0xb8c08be7,0xb823c081,0x3a1e3d0d,0x3aaa1f06,0xba91a931,0xbadb5381,0x3b22b2e2,0xbaa73b48,0x3b26878f,0x3b6d2d34,0x3b8496c4,0x3b77a4da,0x397bff87,0xbb32ce38,0xbb935ebb,0xbb8ea2da,0xbb823766,0xbb4a0c32,0x3a919e0d,0x3a51f18a,0x3b18e800, +0x3adb03c0,0x3a14a850,0xb9e687ac,0xbb027141,0xbb0bdfb3,0xbb2bf400,0xbb32d6c4,0xbb0e95a0,0xbad70b94,0x39bc17df,0x39fa64c2,0x3a0257c9,0x37266523,0xb9e124d2,0xb9248e83,0x39dc84aa,0xb8ed0218,0xb9301453,0xbab74064,0x3a01c849,0x3a8a30a0,0x3a2ab832,0x3aa28e20,0xbb995836,0xbbabc772, +0xbb84befa,0xbb7964a3,0xbb5809e0,0xbaff5e8b,0xba6a3aef,0x3a096706,0x3b68e184,0x3bb4147e,0x3bcf7e44,0x3bdfad42,0x3bd18725,0x3bafba1c,0x3b94a29f,0x3b3e0e27,0x3aa43e19,0xba355467,0xbaf1966b,0xbb386aad,0xbb41af13,0xbaf19a58,0xba7f995f,0x3a1359c6,0x3a90578f,0x3a82064d,0xb97ab072, +0xba25236c,0xba9f8bad,0xba696d29,0xba151a75,0xba80f2ee,0xbad262a4,0xbb1f69dc,0xbb285b87,0xbb60a3f9,0x3a16b6c9,0x391e3ca4,0xba2813f9,0xb9998c00,0x39930af8,0x3aa0710b,0x3b04ce2b,0x3b3acd8b,0x3b6e5629,0x3b8f20e7,0x3b9abf32,0x3b810ca8,0x3b36c4a4,0x3abaa6fe,0x3a80946f,0xb9e101f0, +0xba9a4de9,0xbac47793,0xbaef90b6,0xbb05bc7e,0xbaff85cb,0xbad19fdb,0xba82df9e,0x397c2f68,0x3ac000f2,0x3b3b37f9,0x3b380ee1,0x3b2d768f,0x3b347cc4,0x3b0d1bbf,0x3ae9563f,0x3acbafcb,0x3b0bd9b8,0x3b1b345b,0x3ae6a060,0x3a8dde62,0x3b80c4c4,0x3b814b99,0x3b816ebb,0x3b808fe9,0x3b7db85c, +0x3b70267a,0x3b659d92,0x3b64269e,0x3b270bf3,0x3acd70d7,0x3a6822ca,0x3693b2ab,0xba7c1806,0xbadda96d,0xbae11dfe,0xbae455ca,0xbaca93a7,0xbabf8ac5,0xba77742b,0xbaa578f1,0xba7d0224,0xba9436f2,0xba8dcd83,0xb94e8dd1,0x3a56af09,0x3af07688,0x3b064777,0x3b3a88c0,0x3b530f64,0x3b351f29, +0x3b302e5d,0x3b05a905,0x3b084213,0x3b3798dc,0x3b5030f8,0x3b622f77,0x3a69858a,0x3ab1da16,0x3a8b2e50,0x39f2f434,0xb954bf83,0xb57abc70,0xba1bcde8,0xba2d0cb1,0xba68385f,0xba6cd57f,0xba915d8b,0xbab191d1,0xbac8d84e,0xbb061c63,0xbafa0002,0xbb02b48e,0xbb19ad32,0xbb257745,0xbb37eeb3, +0xbb3d62bf,0xbb3b4aed,0xbb1deb9a,0xbb104e80,0xbb0bb04e,0xbb1e56e0,0xbb2ad714,0xbb0e7771,0xbb024efb,0xbacb29e3,0xba1c65fd,0x394ecf81,0x3a8a4fbf,0x3ad29863,0x3a81a690,0x3a5b1522,0x3ab7e750,0xb9749239,0x3901a36e,0x38250aa0,0xb81ed16c,0xb9390316,0xb941e2d9,0xb990f075,0xb9b1e38f, +0xba36e26d,0xba865973,0xbaab4ac3,0xbac7cb38,0xbaddb9dd,0xbaf19015,0xbae53dfb,0xbadf9569,0xbad4e78f,0xbac00655,0xbab55c65,0xbaaf067b,0xbab0c6d0,0xbabcf76a,0xbacd269f,0xba9ba8e2,0xba8d19c5,0xba99e9e9,0xba83fd32,0xba53d1b7,0xba28c770,0xba2c6ff2,0xba48ee93,0xba32c214,0xba2468be, +0xb9fd96a9,0xba059c68,0xb9a999a1,0xbb1e9baa,0x39fb2919,0x39bfbc90,0x39fdf8a3,0x39dab647,0x39e1dc2c,0x3a10a008,0x3a0b9c6c,0x39e8427a,0x3920f5eb,0x398bc85c,0x39cf83aa,0x3a486653,0x39be0fcd,0x39a7a600,0x399dec73,0x3a29dcd7,0x3a4afaa3,0x3a42cba2,0x3a253905,0x3a0dd175,0x39f45d1d, +0x39d6d3b6,0x39bd9b7d,0x39c87f9a,0x397e090d,0x392ce61b,0xb87f4fcf,0x391be9bc,0x3957a9b7,0xb712923e,0x390e0955,0x38a2c911,0xb97eff1f,0x391d35d1,0x393b0dcc,0x389b3ce9,0x3996325e,0x393a7014,0x3a09670d,0x39ff67e1,0x3a6e13ee,0x3ae446d7,0x3b06b41f,0x3abcaf30,0x371b4ad3,0xb905ec46, +0x399d5411,0x3b03b6e4,0x3ab68017,0x3a9713d6,0x3a75a321,0x3aec7627,0x3b01a0d6,0x3ad731d3,0x3a9dd23a,0x3a5a8267,0x3a39ef61,0x3a115821,0x39e4de60,0x39012a75,0x37a44d97,0xb9a22cc8,0xba989fae,0xba4235f3,0xba914cbf,0xbb02d5f1,0xba994cfe,0xba8f14cc,0xbaedc3e8,0xb90b5060,0x39122f81, +0xba215b77,0xb8ca0393,0x3986fd8f,0x3a9c5312,0x3a414ecf,0x3aaefb11,0x3b105861,0x3b2590c9,0x3b115585,0xb9b2a4a7,0x3903229b,0x3a06b99d,0x3b573d1a,0x3a858bab,0x3a97065d,0x3a74b078,0x3b38732d,0x3b5f4c19,0x3b4c72a5,0x3b13c8fa,0x3ae470f7,0x3ab00162,0x3a62d313,0x3a0db393,0xb7c38e2b, +0xb7fa1633,0xb9c71209,0xbb1e9580,0xbaa45c10,0xba999422,0xbb487ef2,0xbae2746a,0xbaec034f,0xbb640518,0xba3b4733,0xb9baa7c6,0xbab6c9ad,0xb97a0fa0,0xba22ada6,0x3a85a6cb,0x39fbeaab,0x3afb041e,0x3b8c0660,0x3ba73042,0x3b76487d,0xb90aa585,0xbaa42a6f,0xb8c5ece4,0x3bba3d30,0x3b3e92b9, +0x3b25bbe8,0x3aef2965,0x3b979724,0x3ba70676,0x3b895280,0x3b4045e5,0x3aed56b4,0x3acd9fc0,0x3a6c39e6,0x3a09b128,0xba556453,0xba672490,0xba0f9a0e,0xbb8b4ca2,0xbb4c47a9,0xbb9ac759,0xbbd5acb4,0xbbc14abc,0xbb9f671a,0xbbc6611e,0xbaa2e3f4,0xb949f007,0xbb2d871c,0xba6cf946,0xb89ffd3a, +0x3ad62227,0x3a548124,0x3afd4ab7,0x3b39be6c,0x3ba438a0,0x3b6e5608,0xb9a93153,0xb9048081,0x3a9520e0,0x3bbdc13e,0x3ac97a14,0x3a6d06ad,0x3a934c6e,0x3bb352bc,0x3bdc92e9,0x3bcf3aaa,0x3b99e833,0x3b82e143,0x3b3b91f2,0x3b103231,0x3ab9c47d,0xba1a7b61,0x39d319e7,0x3800b3d6,0xbb42b637, +0xbac89f28,0xbab58bee,0xbaa3b2f8,0xbb810743,0xbb82550d,0xbbc3896b,0xbb2dbdba,0xba5f75a4,0xbb4b509f,0xba909188,0x3bcd3782,0x3bd8aecc,0x3c2b7251,0x3c0ba567,0x3b7947d9,0x3b05511b,0x3a521dd5,0xba12d22a,0xbafcf306,0xbb1d56cf,0xbacb8a6b,0x3b97f9ad,0x3bc12b5f,0x3b15b42d,0xbb8710ef, +0xbbeeef52,0xbc4bfdde,0xbc3e2988,0xbc3046e0,0xbc2b9b32,0xbc2a7d67,0xbc06134a,0xbc06612d,0xbb1834ba,0xb9f08560,0x3b0a0394,0x36ba1374,0x39692b99,0x3a0c67e0,0x3aaa52b3,0x3b9ebb70,0x3bee48c8,0x3c0e74fc,0x3bf8dc88,0x3b775a79,0x3bd9dc0c,0x3b199650,0xb8b36cd6,0x39ffaa64,0xbb51b32b, +0xbc0a9d1c,0xbc0bd5e2,0xbbb378ae,0x3aee9dd4,0x3bb1a93e,0x3b8d598e,0xbb3d6b99,0xbc103020,0xbc1ba466,0xbb8a80e0,0x3a81244f,0x3b9ca265,0x3bce1258,0x3bd78955,0x3bb32686,0x3b84dac1,0x3ac57e80,0x39fe2861,0x3a86e4e1,0x3ac2e517,0x396c0e54,0xbaf57981,0xba56539d,0x38a9611a,0xb9bcab35, +0xb990661e,0xbb0f3e70,0xbb918441,0xbc063d9d,0xbb999e4f,0x3be19848,0x3b3550d1,0xbbef5b7c,0xbb74bb6f,0xbc20b2bf,0xbbac03cd,0x3c1435ff,0x3a914290,0x3a1e32a8,0x3b3aa1fb,0xbb91f849,0xbb9561c0,0x3ac89088,0x378f8246,0x39df181c,0xbb665454,0xbaf94efb,0xba2e583e,0xbb10caf4,0xb9a8d31e, +0xba95157a,0xba66b300,0xbaa35d51,0xbac95c63,0xbaeb7653,0xbab98313,0xba886198,0xb99a4697,0x39c1c032,0x38383647,0x389e6691,0x3958baaa,0x3a73abe8,0xbb1fcdc7,0xbaf4ae97,0xba8d5468,0xbbcd2b68,0xbb99b651,0xbbabd2c1,0x3b930059,0xb9dfec23,0x3a59cc48,0x3c2f97d7,0x3c08d7e2,0x3bef1829, +0x3b8a492e,0xbbdefce0,0xbc04cca3,0x3b014de7,0x3b743d76,0x3b59af43,0xbb21ed10,0xbad91556,0xbb1b8038,0xbb16923d,0xbaa71d12,0xba5eb58b,0xba6231ae,0x39638eb0,0x398c7086,0xba1e69a2,0xba872ba4,0xba5a62fb,0x39989a3e,0xb90688d0,0xb62b5474,0x38fa9288,0xb9913916,0x39098722,0xbb0baaf5, +0x39f29fc6,0x3a3e480d,0xbbef981b,0xbbc0a231,0xbba71236,0x3bec862d,0x3bd8b64c,0x3b9c8f2f,0xba691e79,0x3bcf7162,0x3bfc4224,0x3b93dd3a,0x3b424f52,0x3a081f98,0xb9e1aa69,0xbb5c6eae,0xbad2f867,0xb958e118,0x3acc7365,0x3b115de5,0x3b350a66,0x3b46e957,0x3b75ce2d,0x3b477c0e,0x3b1b125a, +0x3b3365f1,0x3b4600b4,0x3aa199ec,0x3986b258,0xba418834,0x382cacdc,0xb8e6f23a,0xb91056ef,0xb90e35ff,0x39a6db7e,0x3a08fe06,0xba98a5b3,0xbb0d9d79,0xbac9c892,0xbbcdf793,0x3b995f7d,0x3b58dba7,0x3b7f46f2,0x3b855791,0x3a999b15,0xbb0dafbc,0xbb9c7b24,0xbbaea4fa,0xbb9fceee,0xbb907fcf, +0xb9deb976,0xb9cbbeae,0x3ae642c6,0x3a96e23b,0x39d57750,0xb907fbac,0xba9b0d35,0xbaa7bb65,0xbae3ce4b,0xbae6bfda,0xba82190a,0xb9ce7093,0x3ab3242f,0x3a75714c,0x3a25eca5,0x392dedb1,0xb8fa9df9,0x3973f5fa,0x3a121e57,0x39175125,0x376124a9,0xbaa6dcb0,0x395a36fd,0x3aa27e43,0x3b262373, +0x3b7f37a7,0xbb9279b0,0xbb837713,0xbb2909f1,0xbb4e5b5d,0xbb6e9627,0xbb4db1d9,0xbb19120f,0xba7954d3,0x3b0a08e8,0x3b873a61,0x3ba21af6,0x3bb53650,0x3baf3066,0x3b9cd201,0x3b84bbf9,0x3b2263c1,0x3a7864fd,0xba80ec39,0xbaf5e1d5,0xbb285f97,0xbb2eaf12,0xbabeac07,0xba1a9a4e,0x3a3e6f15, +0x3a89c40c,0x3a0ccdff,0xba37d105,0xba5f9089,0xba8ee966,0xba53fd3f,0xba1902b5,0xba8b3138,0xbaede565,0xbb31a382,0xbb3be39f,0xbb75116b,0xba09f5c8,0xba990bd3,0xbae60746,0xbaa2df20,0xba82763f,0xb8f9868c,0x3a23ff8a,0x3ac8f96d,0x3b297aa5,0x3b64c1e1,0x3b81cba3,0x3b673279,0x3b2cdb8d, +0x3ac57748,0x3a883869,0xb99ca119,0xba88e2b6,0xbabcf6ca,0xbae9257f,0xbaffe88d,0xbae55176,0xbaa241cb,0xb9c9dc46,0x3a1b28e3,0x3ae210ba,0x3b3c85ad,0x3b29c2ea,0x3b0ae688,0x3b0950f4,0x3ab9a7ad,0x3a7812e8,0x39e23d03,0x3a9f0c9b,0x3abe750c,0x3a4ebb33,0x397efcad,0x3b4c23a4,0x3b47bafe, +0x3b3ddd0f,0x3b3c6f35,0x3b3abb47,0x3b550e5b,0x3b64071f,0x3b7250e3,0x3b378cc7,0x3af31712,0x3aad9881,0x39c7e6fc,0xba03e89f,0xbaa25832,0xbaa5db34,0xbaa71db7,0xba908cb9,0xba8adca1,0xba1d2edf,0xba8e67b9,0xba150218,0xba244f28,0xb9d411a7,0x39cf8835,0x3abc2ed2,0x3b2870a5,0x3b2611f4, +0x3b4b9a28,0x3b550467,0x3b29cb39,0x3b149ccf,0x3abcfc9e,0x3ab07cdf,0x3af88da6,0x3b108f9b,0x3b218f1e,0x3b091d2a,0x3b1302c2,0x3b01e248,0x3acdd240,0x3a6c82af,0x3a4d92db,0x36b42b73,0xb8ce0382,0xb9b63aa5,0xb9dc3748,0xba3a3adf,0xba8159b8,0xbaa21be8,0xbaee1276,0xbadca18c,0xbae6b84a, +0xbb074382,0xbb12d6a5,0xbb20997d,0xbb215313,0xbb20544e,0xbaf00f78,0xbac540bf,0xba9feabe,0xbab83933,0xbac490be,0xba890357,0xba6440bd,0xb9fec9e1,0x3a06886f,0x3a9fe34c,0x3b0a2780,0x3b2cf060,0x3b10fb78,0x3b0ad9f2,0x3b23b55a,0xb8be8434,0x39a25972,0x397c6c80,0x38d6d257,0x37a5c6ac, +0x38c71154,0x39009a25,0x38dc1935,0xb98e80f2,0xba1be0a7,0xba64e4b1,0xba8f8d6a,0xbaa690bc,0xbabb948a,0xbaaf3382,0xbaaa73a9,0xba9f7755,0xba8c2337,0xba854a08,0xba7e4297,0xba84427d,0xba90e1a2,0xbaa64340,0xba448aa8,0xba29976c,0xba458083,0xba1fa2a4,0xb9feb724,0xb9b5708e,0xb9db79ba, +0xba16ce98,0xba155119,0xba0b44de,0xb9bd5403,0xb9e61e8b,0xb972d871,0xbaef213c,0x399254d0,0x39734d4d,0x39b81e73,0x3990fcfc,0x398fffa2,0x39b79c14,0x39c63840,0x399ba156,0x372c42e8,0x38e937a5,0x39838680,0x3a306ac4,0x39543729,0x3908f03c,0x3904d351,0x39e83f65,0x3a15eb38,0x3a1afed8, +0x3a016c0a,0x39dbdcbb,0x39b77cf0,0x3996e100,0x3987302b,0x39abcf5e,0x389f84da,0x37f6c7b9,0xb8ba87a8,0x38f49ca3,0x393a16af,0xb88bb8bd,0x39043baa,0x38962078,0xb9a77522,0x38eb911c,0x38e9787b,0x37c0ae4b,0x3956dcdc,0x38d3d970,0x39dcf384,0x3996e1d4,0x3a2b197f,0x3aae4d8b,0x3aee3b52, +0x3aa0eb8d,0xb9638ed1,0xb9bce858,0x384b9ee9,0x3af17961,0x3a8e0e6a,0x3a584493,0x3a34706c,0x3ac20afb,0x3ad8d01f,0x3abf602a,0x3a8c841e,0x3a40fd55,0x3a26ec71,0x39e08d21,0x3973ccf5,0x37c1fc36,0xb985804f,0xba0fbebf,0xba99d1fa,0xba43d710,0xba8e2d0d,0xbb0383b8,0xba7b16e4,0xba5f3b05, +0xbaf363bc,0xb8c28d18,0x38d7a16f,0xba465ace,0xb9700ffc,0x38db0a7e,0x3a8d4ee7,0x3a093608,0x3a816b90,0x3ad244d4,0x3b0df78c,0x3affa144,0xba1088c1,0xb954850b,0x395f02a5,0x3b53e04c,0x3a11a5ad,0x3a0e85f1,0x3a08c176,0x3b0e853e,0x3b3be4af,0x3b393f96,0x3b09429b,0x3ad6121d,0x3ab06a3c, +0x3a359d88,0x3973ba6c,0xb8cdc648,0xba0014c2,0xba4a20af,0xbb18d513,0xbaa48afe,0xba879a3d,0xbb512048,0xbab59c99,0xbac52dd9,0xbb68a447,0xba0c1eee,0xb9653b62,0xbac0f780,0xb9c83595,0xba2bacc9,0x3a88107e,0x39596324,0x3ac3cfd0,0x3b5bdfd3,0x3b9855cd,0x3b6183db,0xb9f2f072,0xbad0200e, +0xba0917d5,0x3bb39c17,0x3b12e7a9,0x3ae9766b,0x3ab1b25b,0x3b800f12,0x3b92ceb3,0x3b7fbc51,0x3b3caa9c,0x3aea5908,0x3ae355bf,0x3a3fea39,0x389753ab,0xba71e2bd,0xbacf9cf4,0xbaa320b3,0xbb85899b,0xbb42d834,0xbb8a208e,0xbbd56011,0xbb9fb026,0xbb8513f9,0xbbc8156d,0xba6958e1,0xb8075f5e, +0xbb41b3c1,0xba887aa9,0xb9a74fa1,0x3accc8c7,0x3a0d17fc,0x3aab7b83,0x3ae629d3,0x3b8f14c0,0x3b50aee7,0xba094c73,0xba2ff928,0x3a3f419a,0x3bbf005b,0x3a4e4202,0xb9cbad54,0x39366463,0x3b88c65a,0x3bb98fba,0x3bbd48aa,0x3b93d9a5,0x3b7f3e74,0x3b43503a,0x3aeff37c,0x3a5eaf58,0xba8f31f8, +0xb9dfa506,0xba01d413,0xbb34f152,0xba6ec02b,0xb9f6c830,0xb98cfa53,0xbb2a1de6,0xbb2da9e2,0xbbb7b801,0xbafe8c25,0xb9d0a5f0,0xbb61e775,0xbaa407ee,0x3bd75864,0x3bea99ab,0x3c2fe2b0,0x3c17f2a0,0x3bc5a698,0x3b0d07b2,0x3a2bc702,0x3a01f079,0xbafd2cab,0xbb4e677a,0xbb34aa2b,0x3b6ea201, +0x3bcb6abc,0x3bb1d235,0xbb1e62fb,0xbbd1c0e4,0xbc3ad5ad,0xbc3e986b,0xbc325b74,0xbc245baf,0xbc2673f8,0xbbfbf96e,0xbbf862b3,0xba02b9e5,0x3a0bb2ed,0x3aa8b80f,0x39aebbb1,0x393e1f24,0x39bff759,0x3a8b2d23,0x3b8117ce,0x3bad3c5d,0x3bf20c2e,0x3bf26fd3,0x3b9750b1,0x3be304f6,0x3a6ad08c, +0x38c5fb5f,0x39f851e6,0xbb4e69d4,0xbc017e64,0xbc110bc0,0xbbce622d,0x3af27c54,0x3b977fd3,0x3b92893a,0xba453b03,0xbc07ff44,0xbc254be7,0xbba35ac4,0xba60ae4c,0x3b4abdc5,0x3bbb43d0,0x3bcddb96,0x3ba9234f,0x3b4cc524,0x3a699d70,0xb8ced1d1,0x3a54c3da,0x3a8e36b2,0x36a792af,0xbabc6630, +0xb9a87ba3,0xb88f5640,0xb95a747c,0xb9c3932b,0xbab17ac2,0xbb6689ab,0xbbcade95,0xbb6a97d3,0x3be0c7fb,0x3aa302b9,0xbbc008d7,0xbae608c5,0xbc059394,0xbb89c4a8,0x3c187b65,0x3aa61e7a,0x3a9654b6,0x3b6cb415,0xbb7406f9,0xbb95dc22,0x3a1ab1a0,0x39e49733,0x3ab12cc4,0xbb37595c,0xbaf103c9, +0xba85edea,0xbaea33a5,0xb9f406ae,0xba9fbc72,0xba87ac3f,0xbab0e6f7,0xbacf7089,0xbad8e3bf,0xba948c7e,0xba3ff864,0x38a28b48,0x398c2539,0xb861c769,0x395a4818,0xb871dd37,0x3a98d142,0xba87785b,0xba670a17,0xb9840c16,0xbbd780a1,0xbb78619d,0xbb7be5d4,0x3c0bea55,0x386f34eb,0x3894c1eb, +0x3c03883e,0x3bee7186,0x3bf7c82d,0x3bd9c9cb,0xbbaecbf1,0xbbfa097f,0xb96a444c,0x3b7bfb29,0x3b8bf61a,0xbaaea6ac,0xbab7137c,0xbb1c2b3d,0xbb13c898,0xbac5caa3,0xba5f9666,0xb9c51702,0x39f3d095,0x3a0e349a,0xba10b90e,0xba3b1614,0xb9e90aa5,0x39ba38a1,0xb920526f,0x38ad9ddd,0x38d60bbb, +0xb98082f9,0x392650ec,0xbacea4c4,0x3a29f406,0x3a622bcd,0xbc13d525,0xbbcc505c,0xbbda8b4c,0x3c35a517,0x3badd72e,0x3b08995e,0xbb9a4b32,0x3b5a259c,0x3bd0cd87,0x3be8b974,0x3b66362d,0x3a232cb8,0xba3a6955,0xbb74b095,0xbb1b1d1e,0xba1eacee,0x3a13102c,0x3a8373fc,0x3b027b7c,0x3b336e79, +0x3b7405d8,0x3b5dfa99,0x3b2eaa58,0x3b3724d4,0x3b389abd,0x3a49cbde,0x38b86c90,0xb9d9431a,0xb6f32485,0xb964f2fd,0xb8aa26cb,0xb9311a09,0x3970fd3f,0x37eab4ed,0xba634c8a,0xbb1c494c,0xbbc0cb87,0xbc2a06e1,0x3bdf226b,0x3b6ab421,0x3b71b71a,0x3b8392bd,0x3af14707,0xbab631fb,0xbb98031f, +0xbbc952bf,0xbbb7c6b4,0xbbb2c5ce,0xbae59da9,0xbac972a2,0x3a87a8e8,0x3a39ade2,0x39c01dbc,0x39853355,0xb9da840f,0xb9f880fd,0xba5aa0a3,0xba302dc2,0x39979bc7,0x3a6a0140,0x3b0c9489,0x3aaad095,0x3a3821e7,0x3978c772,0x39453296,0x39b93041,0x39eda9e8,0x39471b2f,0x38eb3551,0xba67ccc0, +0xb901adf9,0x3ab6dda6,0x3b907f85,0x3bda9078,0xbb700188,0xbb2ab818,0xbaa2d9dd,0xbb1f1dc7,0xbb6ebcfb,0xbb7d89e3,0xbb5478a3,0xbaf474f2,0x3a763d52,0x3b349411,0x3b571e67,0x3b7f95c8,0x3b7fc0c2,0x3b74fd49,0x3b4ec993,0x3ae35954,0x39cf6dbf,0xbaaa65b8,0xbaf77051,0xbb109fa9,0xbb12697c, +0xba8fea14,0xb986e0e6,0x3a46a1e1,0x3a58d5d2,0x38b2e6d6,0xba7dc953,0xba534415,0xba6211cc,0xba222681,0xba08c87d,0xba92b421,0xbaf8d262,0xbb3ac0a8,0xbb4ac2b8,0xbb75a28a,0xbac682a3,0xbb127381,0xbb297567,0xbb0282fc,0xbb0855a6,0xbaad419d,0xba2283b0,0x39a63146,0x3aca8404,0x3b2a7f3b, +0x3b51d762,0x3b4c831f,0x3b24aeb2,0x3ad713ee,0x3a94a1ae,0xb8db2a6d,0xba610d5e,0xbaab974c,0xbadb1b26,0xbaf04681,0xbac395f7,0xba5be0b9,0x3937a6c1,0x3a5e3a91,0x3aee6d61,0x3b27141e,0x3b0dde8b,0x3ac11d64,0x3ab6bb75,0x3a3fd90c,0x3980fbb9,0xb9ffcbe9,0x39b207bd,0x3a159254,0x35f23691, +0xba04ae87,0x3b0aef2e,0x3aef754d,0x3ac814f5,0x3ac1f701,0x3ab5793e,0x3b1b8422,0x3b42327e,0x3b6121b3,0x3b34014e,0x3b024720,0x3adfcc7f,0x3a4d50f0,0x389d7eb7,0xba17bdd8,0xba2c2ab2,0xba2f67ee,0xba178c9a,0xba1f0907,0xb98d607c,0xba6b5b8e,0xb94808fc,0xb8e67782,0x398e0502,0x3a77d4d1, +0x3afe6c3b,0x3b48c03d,0x3b3b43c0,0x3b4cb8bc,0x3b4f38d6,0x3b182176,0x3af800ac,0x3a7fb678,0x3a4a4af6,0x3a8b8400,0x3aa0387c,0x3ab6bc76,0x3b4001b4,0x3b360cfb,0x3b2a890a,0x3b20971f,0x3afb4faf,0x3ac50acb,0x3a2a5a4e,0x3a0240e9,0x396361ed,0x38940c84,0xb99599c4,0xba102c44,0xba5d943f, +0xbabab9e4,0xbaabf935,0xbab49b77,0xbad33fd8,0xbae7d080,0xbaf90dd0,0xbaf1b818,0xbaed8e21,0xba9140d1,0xba34fe34,0xb980e214,0xb9ac8f10,0xb9a6a3f1,0x38b2a18c,0x39550eee,0x3a0195c2,0x3ab6aefb,0x3af48704,0x3b33efc3,0x3b4fbef0,0x3b43a888,0x3b461a6a,0x3b4d5b3d,0x3872b572,0x39d94c8c, +0x39c027ec,0x393925b1,0x391a6983,0x3994dca2,0x39dee1ea,0x39f1ec3b,0x390840be,0xb91105a9,0xb9c53390,0xba17d387,0xba427da0,0xba698c72,0xba53a7fd,0xba4caedf,0xba37e583,0xba195ca7,0xba153074,0xba0d4ff0,0xba178251,0xba28f19a,0xba551b2d,0xb98539ef,0xb915f962,0xb968fdf3,0xb8d661f8, +0xb88fb86b,0x37f35978,0xb883b4cb,0xb980acaa,0xb9a8ccd3,0xb9b1fab0,0xb94e24cd,0xb990de08,0xb8aa9a18,0xba8e906a,0x39a73af5,0x397f7cde,0x39f330bd,0x39a91b5e,0x39a29a30,0x39b46ec1,0x39daf79a,0x39b7b1cf,0x38a810ae,0x39229b91,0x399bb28e,0x3a44b6ab,0x396f5bef,0x3906e15e,0x3913ab10, +0x39d448c7,0x3a0c586a,0x3a2042b5,0x3a07740c,0x39e6e449,0x39cf75ee,0x3960c190,0x3913cc8b,0x3923be8c,0x36f699de,0xb8f140ba,0xb96c14cc,0xb8716215,0xb792b84e,0xb9819ccc,0xb834b8ff,0xb894f2e7,0xb9f62060,0x380371b6,0x391a013a,0xb8f033be,0x38a4d3c6,0xb90b3f1c,0x3a0396ec,0x39c6c3ff, +0x3a3409a0,0x3a9d6c70,0x3af352a8,0x3aad26f1,0xb8af3b19,0xb9984eca,0x38ab800b,0x3af4bb56,0x3a7eeef8,0x3a3a29cd,0x3a2f856a,0x3aac2154,0x3ac3de77,0x3ac255f3,0x3a8fc625,0x3a4ec85f,0x3a3b4b23,0x398fd471,0x38c529a2,0xb7660a96,0xb9faf625,0xba28d943,0xba8d6ed5,0xba3a2020,0xba84e334, +0xbaeacabe,0xba42107c,0xba014bb2,0xbae58b59,0xb81c1d80,0x38d32a84,0xba53b28d,0xb9918c5f,0x3605fb5e,0x3aa215b0,0x3a230b8a,0x3a80ad94,0x3ab2fac5,0x3b0e401c,0x3b063024,0xb9a0bebc,0xb91b813c,0x397583c5,0x3b5b5064,0x39cd601f,0x3965d380,0x39ba4ee6,0x3aded0f0,0x3b204a77,0x3b336def, +0x3b0469bf,0x3ad3f997,0x3aa99849,0x39e98353,0xb7e45388,0xb79fdcf4,0xba6a191a,0xba920e84,0xbb06b28f,0xbaa6b154,0xba6fd067,0xbb58d6f3,0xba846796,0xbaa1867a,0xbb5b1fcd,0xb9a30226,0xb852184a,0xbabb7d7c,0xb99ea5b5,0xba40ae63,0x3a92f192,0x39d0e0cb,0x3ac49b09,0x3b3d8042,0x3b9740d1, +0x3b6ce5ca,0xb92a1893,0xbaba2b2c,0xba0e71ee,0x3bb12a25,0x3aed3400,0x3aab0784,0x3a95b472,0x3b56299e,0x3b804792,0x3b79fbb0,0x3b3d4201,0x3aed2971,0x3aea7f18,0x3a0b03e9,0xb9909c3a,0xba570132,0xbb0d4e0c,0xbaf54816,0xbb662fcc,0xbb368ee5,0xbb65d2d2,0xbbbd8bfb,0xbb79bd5a,0xbb53c99c, +0xbbb80fb8,0xba2dcdf5,0x38cb66e9,0xbb42f44f,0xba8bb679,0xb998efaf,0x3ad2af7f,0x3a3f4a6d,0x3a9387ff,0x3a9fd1a9,0x3b8a5abd,0x3b5751ea,0xb83ce9ed,0xba27f5fe,0x3a3d29f6,0x3bc3c835,0x39e656de,0xbaa02cee,0xba029fa4,0x3b43ad25,0x3b982339,0x3bb0d1db,0x3b8cbe8f,0x3b71c037,0x3b3a3352, +0x3aa5a190,0x398dfec4,0xbab06355,0xba94c3ad,0xba5cc311,0xbb12c7f5,0xb9679424,0x39514e94,0x39bc3e36,0xbaad85ff,0xbabf3f83,0xbb994a9e,0xbaaa5d0b,0xb6c9776c,0xbb601148,0xbaa918d2,0x3bcfbade,0x3bf56580,0x3c367cf6,0x3c295f43,0x3c0c7072,0x3b2dff98,0x3a62a8a1,0x3ada71ba,0xbab26694, +0xbb46e5d5,0xbb52a7aa,0x3b724603,0x3bf2a915,0x3c0fbf22,0xb879bb7b,0xbba0c28d,0xbc1bbf8b,0xbc3261b3,0xbc28fc47,0xbc12f2d9,0xbc18c35a,0xbbdd9948,0xbbd34119,0x3a92b1e1,0x3a9814e0,0x3a2c896a,0x39ae597c,0xb8af738d,0x3903a353,0x39f2c225,0x3b35685b,0x3b57a905,0x3bbfaa5b,0x3bde470b, +0x3ba7bc65,0x3be2fc04,0x3813e3d8,0x3a2646b5,0x3a3386fb,0xbb36ad30,0xbbdc34b8,0xbc0c07e0,0xbbd93985,0x3b126302,0x3b864d8e,0x3b9dc687,0x3ae61aa4,0xbbe90c70,0xbc2306b3,0xbbaff093,0xbb01e508,0x3afbad48,0x3bad1301,0x3bbe9ebd,0x3b9805b3,0x3b09419b,0x3928f1e6,0xba2599ef,0x3a34bd33, +0x3a274562,0xb981c5f7,0xba67d659,0xb84886e4,0xb85ac71c,0x379724bd,0xb9a9fcef,0xba3acd9d,0xbb14b515,0xbb8de6d8,0xbb21813e,0x3bcb3c4a,0x394ff8af,0xbb909a67,0x3a02084c,0xbba48595,0xbb109a0b,0x3c1b68be,0x3b12219f,0x3b2197b8,0x3b9bc0a2,0xbb1fc847,0xbb828d28,0x39b61c7f,0x3a9ccc43, +0x3b2ad356,0xba9465b5,0xba955d48,0xba6e89f5,0xba8416b2,0xb9bd01f9,0xba71199f,0xba5c6d8a,0xba97258b,0xbab3ab24,0xbab5e553,0xba4507b9,0xb9ca2520,0x3968b15d,0x38d723b9,0xb88594ea,0x386096d8,0x3721d391,0x3a21d40b,0x39563c85,0xb9bce41d,0x379b5c64,0xbbbd7317,0xbb4ef377,0xbb1689b0, +0x3c37c148,0x3a62dc18,0xb8f97f15,0x3bb80d58,0x3bd6ccfe,0x3c028d01,0x3c140c96,0xbb43f90b,0xbbc36e3a,0xbade6f02,0x3b8f3e70,0x3bb3f688,0x3a3a5d27,0xba342ef2,0xbb0598ca,0xbaec4b0f,0xbab66c95,0xb9d465ba,0x39eb407a,0x3a71714a,0x3a77b61e,0xb9db1488,0xb9ca6c21,0xb909f7ac,0x3954e45b, +0xb8ca92cf,0x38eb2e1d,0x38adadec,0xb8ff3823,0x37b13e06,0xba5f551d,0x3a05b2b6,0x3a3c7969,0xbc183838,0xbbc9076a,0xbbeaa701,0x3c51c2c0,0x3b4ad804,0xba52cef3,0xbbf40ce3,0xb91170cf,0x3b8eb81c,0x3c1ecbb8,0x3b9c588b,0x3ae4f76f,0xba304e0e,0xbb5aced2,0xbb254379,0xba670f2e,0xb921132b, +0x3960524a,0x3acb26ca,0x3b27e9df,0x3b728993,0x3b6fa1ea,0x3b3dd46c,0x3b3bbb79,0x3b1960e0,0x39a16fc4,0xb8151b27,0xb957d2f0,0xb85d7e00,0xb960bf70,0xb883466d,0xb9308515,0x3961c611,0xb8a5ef75,0xba1029f1,0xbb14eb85,0xbc1f8949,0xbc524d73,0x3c1712ed,0x3baa3915,0x3b91a9de,0x3b8a2fa6, +0x3b3a7d98,0xb8cdc62c,0xbb6ec1c0,0xbbc8df81,0xbbb65805,0xbbb763fe,0xbb07aa56,0xbaf3ec21,0x3a706c63,0x3a86e8f1,0x3a64acbf,0x3a7d420d,0x3a02473e,0x3a03b46d,0x39b0ec2d,0x3a3b3d51,0x3ac992f6,0x3b097f9a,0x3b2eb53f,0x3ac68ed1,0x3a342b59,0x398350a4,0x3994d825,0x39a6575a,0x39b24128, +0x391ce97a,0x39158869,0xb9f5e05e,0xb95f3410,0x3aca3c06,0x3bc53fe2,0x3c1e2d21,0xbb2ca665,0xba436f48,0x3993cd0b,0xbaaa19d9,0xbb3bcd30,0xbb6f00f1,0xbb501bcd,0xbaf07565,0x3a07d5a1,0x3afa16c5,0x3b035124,0x3b247ffd,0x3b2b0aa7,0x3b31f8d8,0x3b18d4f1,0x3a970df1,0x38251116,0xbaabbc15, +0xbaccb4e8,0xbae327c9,0xbaea825d,0xba130f20,0x383a0a45,0x3a43a5d0,0x3a192693,0xb9866118,0xba6b26a2,0xba21db38,0xba1d4446,0xb9dab7b2,0xb9bfb3d0,0xba83eac2,0xbaeb4883,0xbb330342,0xbb49e491,0xbb52a40c,0xbb0b1ed8,0xbb3042d0,0xbb26fa34,0xbb070fe9,0xbb19e3bd,0xbaea1023,0xba95dc19, +0xb99d7a8f,0x3a8009c5,0x3b0b003d,0x3b3c66e1,0x3b48c805,0x3b32a743,0x3b0ac0a0,0x3acad87c,0x39cf9ffd,0xb9c41496,0xba6798bf,0xbaa1c5ae,0xbabb7c40,0xba9d66d9,0xb9f99439,0x3a3fbf87,0x3a81b5af,0x3ae24676,0x3b0116da,0x3ac7773f,0x3a5865d7,0x3a4c2359,0x396fe1e8,0xb9684863,0xba8cc244, +0xb9ade81b,0xb8f7472a,0xba089ddf,0xba811967,0x3a85b686,0x3a48bb74,0x39da999b,0x39b33025,0x39463f46,0x3acf4fc5,0x3b201d1f,0x3b4bee52,0x3b3738fb,0x3b19a49b,0x3b1b8529,0x3ac56541,0x3a8445e4,0x39efdc2e,0x39998cf6,0x39794610,0x3959c328,0x389ab93d,0x39b2582b,0xba0f05e9,0x398091e6, +0x39ef01a1,0x3a785895,0x3abce811,0x3b174183,0x3b56b2b3,0x3b43ba7e,0x3b4bf06c,0x3b3b8875,0x3b0b00d3,0x3ac9fca6,0x3a3c18ff,0x39e882c0,0x39cf8570,0x39e455e3,0x3a0c6938,0x3b573c55,0x3b545b49,0x3b4d308a,0x3b54dae2,0x3b3f9104,0x3b198bf3,0x3ac9f88a,0x3ab2fd9f,0x3a871eba,0x3a5145e4, +0x39d237db,0x3944ac6d,0xb8f76168,0xba28436c,0xba12cc69,0xba21b26b,0xba42a33d,0xba6ac64e,0xba78085c,0xba5cc8d2,0xba8b9948,0xb965cb23,0x39621f98,0x3a561788,0x3a50a07b,0x3a7717e9,0x3a9f117a,0x3a9f30f0,0x3ab0c3d5,0x3b07b04f,0x3b1d7d90,0x3b3f93c6,0x3b5ae072,0x3b5b8cff,0x3b5e49d9, +0x3b68a703,0x39a12638,0x3a45a0c9,0x3a35e878,0x3a00d67c,0x3a04cd1c,0x3a32a5d6,0x3a6d6720,0x3a83c751,0x3a494765,0x3a1b03e1,0x39dae117,0x39819550,0x38e1738c,0xb78e9ddc,0x38385447,0x38737781,0x3905318c,0x395270e8,0x3931bb07,0x3980006d,0x37e7ff8d,0xb9100c73,0xb9d7c9e2,0x39bd598a, +0x39b39825,0x39353f10,0x3977f100,0x396770a4,0x3997900b,0x39152d25,0xb84dcbe9,0xb9069e21,0xb840b788,0x39217b34,0xb93b21c5,0x384df7b5,0x38cdaec1,0x398cd95e,0x39900a23,0x39af603f,0x3988d5c1,0x397de532,0x3979aea1,0x39b38afe,0x39943eb9,0x3801995b,0x38ac6c74,0x396b56f7,0x3a37e4ae, +0x3929186c,0x38154d41,0x384c73ac,0x39846427,0x39c715fd,0x3a073af8,0x39d9f8f6,0x39b7c2d8,0x39917784,0x398a4f14,0x398b856a,0x39b3d7b8,0x370fbf85,0xb767dd1b,0x37f0adac,0x38f31511,0x38c4071f,0xb8f84d05,0x3927ef97,0x3934b7b1,0xb963ec95,0x39693c22,0x395a2bdc,0x38ba9cf1,0x398b5b8e, +0x393902cd,0x3a0b5352,0x39b9eb04,0x3a22c947,0x3a80b47a,0x3ae559ad,0x3aa61606,0xb88071e4,0xb9ab6eb7,0xb730214c,0x3adfb260,0x3a432767,0x3a0148df,0x3a0524b8,0x3a800b00,0x3a96ec8a,0x3ab06d82,0x3a7c5c9a,0x3a32fb21,0x3a1105c1,0x39b759ef,0x38ccebfa,0x3909f435,0xba0062b5,0xba348db2, +0xba562b7e,0xba21abda,0xba427f5a,0xbaafa545,0xb9d244da,0xb9ad92fc,0xbabf4d81,0x3916378e,0x39594bdb,0xba245ad6,0xb94ed6a0,0x39744b23,0x3a97263a,0x3a17b882,0x3a677b7e,0x3a89f0c4,0x3b035b84,0x3aff2956,0xb9655eab,0xb98478c6,0x38e39acd,0x3b526fd5,0x395ed3ea,0xb8f77959,0x3861d695, +0x3a88450f,0x3aeda749,0x3b20d8d7,0x3ae5f1da,0x3ab09902,0x3a8eb045,0x39f094e0,0xb906eca6,0x3952e514,0xba92d0e4,0xbab37259,0xbacbb724,0xbaa9c5c6,0xba8eee8b,0xbb4d8eda,0xba41cc84,0xba5c2b96,0xbb3d7c7d,0xb8cebbbb,0x3918dcfe,0xba93d03e,0xb967c39f,0xb9ca6a27,0x3aa76d1f,0x39de1d60, +0x3ac0b9f6,0x3b1bba2b,0x3b902320,0x3b6bc940,0x389508b4,0xbab1d767,0xba2eeaa4,0x3ba3b40f,0x3aaddaad,0x3a598af0,0x3a4b42c7,0x3b1a8ae7,0x3b47aa63,0x3b66763f,0x3b2d1feb,0x3acf3769,0x3accc95d,0x39ce8d2e,0xba10ae33,0xba0ecb35,0xbb2cff1b,0xbb11c5a8,0xbb34ba15,0xbb21c8e9,0xbb277fb0, +0xbb8e42f5,0xbb3c19a3,0xbb1d269b,0xbb99ee49,0xb9ad72ec,0x39858b1f,0xbb357621,0xba82bee0,0xb8d0d7ea,0x3acffca1,0x3a2beab3,0x3a6e2b33,0x3a2e1863,0x3b7d6f1c,0x3b4b7e86,0x3969edab,0xba49a118,0x3a0731c8,0x3bbc86cb,0x396ebfdd,0xbaee77d6,0xbaa45e35,0x3acb4b30,0x3b5adb34,0x3b9c75ec, +0x3b773494,0x3b4ea321,0x3b19a4d6,0x3a6f71c7,0xb96b1b6f,0xbaa57702,0xbad0961c,0xba81530f,0xbacafd8b,0x39beabee,0x3956f302,0x39df05df,0xb93d7cf4,0xba29f01b,0xbb5d08fc,0xba4f401c,0x39998790,0xbb496013,0xba909802,0x3bc98c2e,0x3bf5082b,0x3c342ffd,0x3c35cb8e,0x3c2bb5dc,0x3b3c8a4f, +0x3a507132,0x3b0f1fce,0xba8c6293,0xbb40b051,0xbb69e39f,0x3b696f8c,0x3c06e02d,0x3c3ad50a,0x3b14e005,0xbb548cba,0xbbf265e2,0xbc1f3e78,0xbc1a1ecd,0xbbfc82b4,0xbc045e84,0xbbba1ba5,0xbb9cba61,0x3b105052,0x3abb82df,0x395b4565,0x3948e0cd,0xb9550b55,0x38b16ded,0xb9443e83,0x3ace70f3, +0x3ae267d5,0x3b870ddd,0x3bbee34b,0x3bb07560,0x3bd7c2ca,0xb89d5dda,0x3a99c03d,0x3a00e156,0xbb2d9179,0xbbba1190,0xbc0b1c87,0xbbef8f44,0x3b03d841,0x3b5267e9,0x3b9d33ac,0x3b82e619,0xbbb93eaf,0xbc1ae251,0xbbc33923,0xbb3bd83f,0x3a77b484,0x3b968583,0x3ba48233,0x3b72e5e6,0x3a84f45b, +0xb9ba72ba,0xba7bd44a,0x3a38b728,0x392eca3e,0xb9d42c36,0xb9d32110,0xb70f0300,0x370d47c9,0x38609498,0xb8866b4a,0xb9e14c8f,0xba86d300,0xbb2bd95c,0xbac0ceb1,0x3ba6cd4b,0xb965d221,0xbb18f908,0x3b345fed,0xbb095e7c,0xba329382,0x3c05729f,0x3b2d2125,0x3b5aa2fc,0x3bb2f17c,0xba9e0ac7, +0xbb53c3b6,0x38c0c62b,0x3ac643d0,0x3b518472,0x399ec1dc,0xba35f723,0xba82898f,0xba014987,0xb9cd7bf4,0xba407112,0xba03545d,0xba2dfcb0,0xba6fa4b9,0xba616687,0xb9d16e3c,0xb88413c8,0x39354255,0x3605265a,0xb7b2e0e8,0xb8526884,0x38726920,0x3902198d,0x3a3e91ad,0xb7461f00,0xb8c9fb46, +0xbb89e82c,0xbb0f98b7,0x3760303f,0x3c420f51,0x3984a05b,0xbaa8f620,0x3b108c6b,0x3ba58315,0x3bf26fcf,0x3c271c84,0xba2344b0,0xbb82b690,0xbb570bf9,0x3b8710ef,0x3bbba3c4,0x3b18c51b,0xb9f989b1,0xbb063439,0xbacda8ef,0xbaaf16a2,0xb8df2274,0x3ab2f67b,0x3ad235b5,0x3ab9559c,0xb96e9aa8, +0xb800a9ca,0xb517a135,0x38683f13,0xb776c20f,0x389bcad9,0x3863fbed,0xb7fc798b,0x369176a4,0xba08c54f,0x39cd8228,0x3999c8a1,0xbc037540,0xbbb26e63,0xbbd0f2d9,0x3c2696e5,0xba9fb590,0xbb99a0cb,0xbc239a9a,0xbb8db14b,0x3a91d856,0x3c2f61c7,0x3bbe4aff,0x3b461e39,0xba84dbc1,0xbb4ab54e, +0xbb4482d5,0xbaec9c4d,0xba98621a,0xba1f14ad,0x3a74f6d2,0x3b0d6aa2,0x3b5a3e0c,0x3b75bc65,0x3b4caf6a,0x3b3a269a,0x3aeae1f2,0xb80da2f5,0xb8bc88be,0xb8de560d,0xb8bffbc0,0xb907924a,0xb83bfedb,0xb8ba522a,0x38a54efc,0x37e64aa6,0xb995d865,0xbb09e347,0xbc40511c,0xbc5a227d,0x3c4359fb, +0x3c029aa9,0x3b8e5a38,0x3b6567d7,0x3b3a82a6,0x3a2acde2,0xbb2bd766,0xbbbe8558,0xbbaf352b,0xbbb8042e,0xbb22625a,0xbb15dc86,0x3a1a91a8,0x3a9e1b4d,0x3aa22875,0x3ac19db3,0x3a953e2e,0x3ab34851,0x3abbf31a,0x3b063be5,0x3b409050,0x3b5b83e7,0x3b419d1d,0x3ad716fe,0x3a1b17c3,0x39613632, +0x396e77cf,0x395a4f5a,0x394a7c1e,0x3898437c,0x38ae6cf6,0xb882d779,0xb94a1647,0x3afea8fd,0x3be8cfab,0x3c4652bb,0xba5f3dc8,0x39dc47b7,0x3a8c0ae2,0xb9e9feeb,0xbb073200,0xbb459833,0xbb301316,0xbac70ae5,0x39baeba8,0x3aab580f,0x3a7679d4,0x3a94db60,0x3a948c91,0x3aad0efe,0x3a9db2a0, +0x39d59f85,0xb9c4a602,0xba9f7e23,0xbaa24a4b,0xba90a1e8,0xba85f678,0xb868fcad,0x3a0ee103,0x3a451bc0,0x39de628a,0xb9b0cb1d,0xba312683,0xb9b52a70,0xb9b98ab0,0xb952954b,0xb90ad86d,0xba4344aa,0xbab40c61,0xbb10f213,0xbb287971,0xbb16926f,0xbb03f0e7,0xbb20144b,0xbb118b50,0xbaea41aa, +0xbb085dde,0xbae91678,0xbaa69da9,0xba37f279,0x3a093515,0x3adbbaf2,0x3b2792f6,0x3b403937,0x3b3aa041,0x3b22acdd,0x3af43b89,0x3a660357,0x390c0e01,0xb9b18c9c,0xba3ab75b,0xba6fedc6,0xba0d85ae,0x38fc52f3,0x3aada77b,0x3aa10473,0x3ace9b83,0x3aafb7c4,0x3a836696,0x39bf935e,0x39c57a2e, +0xb8079349,0xb9d221af,0xba9d4158,0xba2eaaa3,0xb9fbcc06,0xba237922,0xba8469e8,0x39b4e624,0xb949a14f,0xba0cd355,0xba0c669f,0xba4ef786,0x3a419631,0x3adf100a,0x3b218747,0x3b28cf9d,0x3b21dfe2,0x3b35abc0,0x3b0ba703,0x3afdf1ed,0x3ad5755b,0x3ab40cb1,0x3aa7bb15,0x3a8bc744,0x3a63f245, +0x3a7b9f96,0x38c64f92,0x3a6c5e0e,0x3a96d8d8,0x3ade5d1c,0x3b037a58,0x3b2eb2c6,0x3b5d4ee4,0x3b456b2a,0x3b3cf736,0x3b31221a,0x3af581d1,0x3ab9fe30,0x3a238b47,0x39b196bd,0x38b03f0c,0xb8c913a8,0xb91a4f32,0x3b71ffad,0x3b5927b8,0x3b5a5e52,0x3b6d8ee9,0x3b683128,0x3b40563c,0x3b156833, +0x3b0829cb,0x3ae63be1,0x3ac684d1,0x3a995826,0x3a898562,0x3a4b64f7,0x39d3cb1a,0x39d7ee04,0x39bc81c7,0x39bc0dae,0x3970dffa,0x3947229a,0x39bf41fb,0x393cec97,0x3a7b2dd2,0x3ab67c2c,0x3b02ac55,0x3b05f846,0x3b1468cb,0x3b20b4d6,0x3b1b7922,0x3b1875d5,0x3b39abd6,0x3b365e22,0x3b51d5bd, +0x3b65990d,0x3b6c62cc,0x3b7ad7d1,0x3b75a043,0x3a553b70,0x3a850e63,0x3a84f8c6,0x3a5787c2,0x3a61aec1,0x3a87a85d,0x3aaa5ebd,0x3abe20a8,0x3aaf7304,0x3aa5d51d,0x3a9974af,0x3a8af2b0,0x3a7f6ac4,0x3a6c711a,0x3a7491a8,0x3a74fa4c,0x3a805940,0x3a82d716,0x3a75539f,0x3a806a14,0x3a6655d3, +0x3a4b10db,0x39ef31b4,0x3a9b269a,0x3a9a2a51,0x3a7f3e78,0x3a835ee2,0x3a6f02ca,0x3a773c23,0x3a57638a,0x3a2b79dd,0x3a0cf88c,0x3a22eb20,0x3a3aa66f,0x39c8688d,0x3a23ef10,0x3ab6184f,0xb96c9e44,0xb8ad702c,0x36cf3ce1,0xb8992e59,0xb8d51cf8,0xb91fc370,0xb7a18f1c,0xb89d91ef,0xb9a0d98c, +0xb98da6d6,0xb90ce08e,0x39b887d3,0xb92ebccd,0xb9a4d56b,0xb9a573c5,0xb931a4c6,0xb8536d30,0x391ea254,0x38537be1,0x34c9f839,0xb8a70d04,0xb8ad12da,0xb7fa8afc,0x39826ad5,0xb9bcd867,0xb9add57f,0xb79716d3,0xb82e7dc0,0xb8eff086,0xb993fe88,0xb784ddec,0x381e5703,0xb9a53965,0xb8212d0b, +0xb9058d2d,0xb84b3d4e,0xb6f7505b,0xb8681a8b,0x393df952,0x36fefa8d,0x3955a069,0x39c50c9b,0x3aa18261,0x3a4f7916,0xb9df6176,0xba391378,0xb9fb7fb2,0x3a929ed0,0x3951f027,0xb80e5e03,0xb79c35f8,0x39916189,0x39d3f38d,0x3a5ce578,0x39fc7cb4,0x3989bcec,0x38b6005f,0x370f4a33,0xb9728607, +0xb84200a5,0xba619cda,0xba8a90d5,0xba5791c6,0xba6c8f2b,0xba6a6cc8,0xba9d2654,0xb9e8e100,0xb9d8cf2a,0xbabe69ef,0xb8be42d0,0xb8d3685d,0xba5e01ac,0xba006416,0xb8a89fda,0x3a3d07b9,0x3958896f,0x39c2bc27,0x39920a04,0x3aab3d85,0x3aacc8b2,0xba2333c8,0xba54a0bf,0xb9eac6d0,0x3b2548c0, +0xb98fbcac,0xba3eb91d,0xba26100a,0xb83750e9,0x3a442f4c,0x3ae70139,0x3a90e739,0x3a4e5d0e,0x3a00c0f9,0x38b19698,0xb9e8986b,0x39072b5b,0xbaccf68c,0xbae67309,0xbaa26ef2,0xbad22ea1,0xbace0935,0xbb4a0eeb,0xba63165a,0xba5a0b93,0xbb25e361,0xb96e231d,0xb82155df,0xbaa1b034,0xb9f8f6b9, +0xba03243d,0x3a8916bc,0x395540e1,0x3a8a20b6,0x3ab42423,0x3b6abf4d,0x3b43b187,0xb9298a85,0xbae20b8b,0xba9be852,0x3b8152a5,0x3a191fe2,0x38febecf,0x38630ced,0x3a7d5018,0x3ad857ad,0x3b374814,0x3b02e17d,0x3a8cb384,0x3a78638b,0x37e2e10d,0xba69bf4d,0xb9ce4884,0xbb470382,0xbb22c18e, +0xbb06ef9f,0xbb0b5d98,0xbae4fad8,0xbb37ff93,0xbb00a49a,0xbae56d57,0xbb72daff,0xb99a9656,0x3906f89d,0xbb30ec37,0xba9ead24,0xb987265c,0x3a8f3656,0x39b8c337,0x396ebd9c,0xb9e92a0a,0x3b35de2d,0x3b0be817,0xb955235a,0xbabcd473,0xb964fb92,0x3b9d75b0,0xb9633fc3,0xbb23aa01,0xbb1c2e3f, +0xb9cbf4a4,0x3ac5dc31,0x3b71dc7e,0x3b38d873,0x3b165065,0x3ac0df4b,0x39c7dc1c,0xba2f45e6,0xba8d382e,0xbaf000ea,0xba7954fe,0xba3a1d5e,0x3a18842e,0x38df4fdd,0x39fd5082,0x3951367f,0x37c85d64,0xbb09d2d0,0xb9f94eb1,0x39972574,0xbb347a64,0xba981d77,0x3bad4b55,0x3bd47940,0x3c28c439, +0x3c34017c,0x3c35a380,0x3b216187,0x3938ce8a,0x3ae28b4d,0xbadd5f5b,0xbb6c9b6c,0xbb8b252b,0x3b269b95,0x3c01aab3,0x3c4c9642,0x3b815c79,0xbafae378,0xbbbe5bb4,0xbc0f242a,0xbc0d96b3,0xbbdacb50,0xbbe5cd96,0xbb95616b,0xbb48b432,0x3b2a6040,0x3aa6902f,0xb8a09df2,0x383c65af,0xb928ed9d, +0xb7c8e537,0xb98b638e,0x39fd8006,0x3a2fa49b,0x3b1c797a,0x3b8eff96,0x3b99f7d6,0x3bb63787,0xba107bd0,0x3a90e4f6,0xb933f645,0xbb57ed87,0xbbb52c20,0xbc16d6a6,0xbc123a9e,0x39dd0777,0x3a8dee81,0x3b642fd0,0x3b9efaf1,0xbba91272,0xbc1e2ef4,0xbbf92754,0xbb8afcdb,0xb9a9bd0c,0x3b5e23d5, +0x3b71a24a,0x3b197db2,0xb9b490d9,0xba8b8ab7,0xbaac7963,0x3a17c5e5,0xb994d9b9,0xb9dde8a9,0xb8e577a0,0x381010c0,0x3828f8c2,0x384fab68,0x3882f9c2,0xb9206697,0xb9b6ce2b,0xbaa1bf80,0xba4b5f06,0x3b657fe5,0xba36b05c,0xba8341c1,0x3b88590a,0x3726be39,0xb82ccf18,0x3bc0b66e,0x3b1fcc3f, +0x3b61631d,0x3ba3fde8,0xba8c4442,0xbb6e9197,0xbab1d57c,0x39f0a2ef,0x3b25650d,0x3a897d4c,0xba3a5fc4,0xbac3a543,0xba0ba3ec,0xba4aed0e,0xba3f1555,0xb9df3c07,0xb9ecd675,0xba1e0872,0xba0419f0,0xb9319063,0x38aad46e,0x388518e6,0xb7ff7030,0xb7ac09ba,0xb8714229,0x377355da,0xb7b8a4d3, +0x39e81086,0x393a3339,0xb9b5b68a,0xbb510595,0xbabfa1c1,0x3aaa09c7,0x3c202924,0xba4b4ded,0xbb236dc4,0xba39fdca,0x3b61a111,0x3bcb64d9,0x3c17dbd1,0x3a5f0c87,0xbb3b872b,0xbbb57d1b,0x3b2ea1ba,0x3b9ca093,0x3b5e3147,0xba4c2ce4,0xbb2099aa,0xbaea38b6,0xbac91a31,0xb7c33973,0x3af50739, +0x3af1d395,0x3acbace7,0xb99ff399,0x394c0885,0xb89902cf,0x3835280d,0x374d4c38,0x382fb453,0x3823aed1,0x35880809,0x37b8fab1,0xb984ea98,0x39090eec,0xb8fefe83,0xbbdba936,0xbb902e39,0xbbcf93d0,0x3b8f3973,0xbbb52e7d,0xbc0022e9,0xbc346aa3,0xbc05e3f0,0xbb410afd,0x3c14cca2,0x3bbea4ab, +0x3b75a78f,0xbb037b56,0xbb608e6d,0xbb89a8fe,0xbb6deba0,0xbb31c114,0xbae3b1a5,0xb4162c0c,0x3ab115a7,0x3b274c63,0x3b517159,0x3b3cc354,0x3b1461f5,0x3a7a8cb7,0xb9a7c935,0xb8fb4a4a,0xb80e0530,0xb8a206f1,0xb86ec542,0xb83927b1,0xb7aa1446,0xb77877d7,0x38a0d155,0xb9278e92,0xbb06926f, +0xbc478553,0xbc49cc9e,0x3c5a8f18,0x3c28dc37,0x3b7f7d1d,0x3ad9fd43,0x3af35902,0x394b08c3,0xbb1faec1,0xbbc5f15b,0xbbc017ba,0xbbd1a074,0xbb663514,0xbb53d15f,0xb98a4b9e,0x3a691f65,0x3a95c934,0x3abe3afc,0x3aa5b217,0x3ada691e,0x3b065d97,0x3b35f473,0x3b70f47b,0x3b849400,0x3b30b8d3, +0x3abb70ee,0x39b8708d,0x38d2ce06,0x3934541a,0x38c3744e,0x38c53a64,0x38093eed,0x37bec2b4,0x39130390,0xb958fbb5,0x3b121092,0x3be18775,0x3c5c2050,0xb84f24bc,0x3a556138,0x3a81b7fd,0xb9afcc49,0xbaee0231,0xbb3e9489,0xbb3b094c,0xbb05e467,0xba3929df,0xb9168ebd,0xba529752,0xba65ba9c, +0xba6be03a,0xba442a39,0xb9cf841e,0xba34cfe7,0xba893547,0xbac5742a,0xbab779c9,0xba7c03fe,0xba2e0bff,0x371bd372,0x3a20b749,0x3a040c2c,0x39439d72,0xb9957575,0xb9e6c2b2,0xb8b75e98,0xb93d1fd1,0xb7397d32,0xb72993c2,0xb9f77279,0xba87e5ce,0xbae8fac0,0xbb0ff6c1,0xbadf9ad4,0xbb1458a2, +0xbb266643,0xbb1065f8,0xbaff7c0a,0xbb0936c9,0xbb0c5445,0xbaf5d654,0xbae56ae5,0xba36ea77,0x39bb7850,0x3aaedccb,0x3b0235c6,0x3b10aabb,0x3b0b649f,0x3acd068c,0x3a4ee310,0x390d8264,0xb9965948,0xba27f343,0xba68f316,0xb9a6241d,0x39c283bb,0x3aaefe3a,0x3a8cd94b,0x3a940b88,0x3a2311b2, +0x3a018522,0xb77058fb,0x3820bcec,0xb99a856b,0xba1a7f9c,0xbaa7a2cc,0xba945bf2,0xba83b718,0xba898f6d,0xbaaf53da,0xba4b98cf,0xbadd035d,0xbaf94bf7,0xbaeb730d,0xbb08a2e4,0xba335b4d,0x3973f9a8,0x3a812512,0x3ac88244,0x3ae673df,0x3b171209,0x3af78364,0x3b056664,0x3b056169,0x3ae2ab51, +0x3ad83e59,0x3aac500d,0x3a90b44a,0x3a8b6c8d,0x39b43377,0x3a83aabf,0x3ab309dd,0x3aeec0a0,0x3b06615a,0x3b2014c0,0x3b36ae4a,0x3b2375b1,0x3b00a2c5,0x3b063480,0x3a94924e,0x3a6e09db,0x3920fada,0xb951609e,0xba19efbd,0xba8ea2d0,0xbaab26cd,0x3b5ed34b,0x3b20eee6,0x3b286800,0x3b424ec1, +0x3b4cb9e0,0x3b26208a,0x3b09d7f9,0x3af33aed,0x3ad14aaa,0x3ab8bd09,0x3a9c51bb,0x3aa0a3b7,0x3a88e9fd,0x3a6452e0,0x3a58d0b2,0x3a4e957d,0x3a68738b,0x3a5117be,0x3a4b1085,0x3a79674d,0x3a893743,0x3ad28431,0x3b031f35,0x3b20c28c,0x3b2dc347,0x3b3f2040,0x3b42aa52,0x3b39b0d8,0x3b2e13dc, +0x3b3dfc9f,0x3b21a75d,0x3b425372,0x3b3fb8db,0x3b50dee4,0x3b6fdb5c,0x3b41e974,0x3a380abc,0x3a363219,0x3a4f316c,0x3a26295a,0x3a372907,0x3a5cc368,0x3a92bce8,0x3aaaf3d1,0x3aaf10b4,0x3ab26eaa,0x3aafe5fe,0x3aa97397,0x3aa5ef47,0x3aa4bd59,0x3aa52dd3,0x3aa4343e,0x3aa70687,0x3aa3f8d5, +0x3a9bee0e,0x3a990bd6,0x3a9497cb,0x3a980a65,0x3a92d626,0x3ab23892,0x3ababdeb,0x3ac28011,0x3ac51936,0x3ab0a2f3,0x3aafe568,0x3aa8a654,0x3a95daf6,0x3a797774,0x3a477d3b,0x3a372a6c,0x3a3a7b88,0x3a3c77e1,0x3ae8c1c0,0xb9b0a6a9,0xb8e21295,0xb58b146e,0xb8dff96c,0xb90918d1,0xb966fc8d, +0xb882d544,0xb8e7dfd3,0xb9a02ced,0xb9a3ebff,0xb953edd2,0x397de4be,0xb962831d,0xb9c74a62,0xb9d65968,0xb9aeafc0,0xb96ad7c8,0x3804b51e,0xb88b0315,0xb8e9708a,0xb93d5926,0xb95c9340,0xb946ce66,0xb7eeba25,0xb9eb2c95,0xb9fe8c36,0xb9752073,0xb9be82d1,0xb9f51ce0,0xba106940,0xb9b5fa2c, +0xb973ef9a,0xb9fa2de9,0xb9359fde,0xb93cbe69,0xb99f309e,0xb933bb63,0xb99afd21,0x393f6a42,0x382b485f,0x39437528,0x394f2e81,0x3a99ba10,0x3a55e9d6,0xb98184e0,0xba2ef608,0xba11f617,0x3a53f3a0,0x37d5c5f6,0xb93caa4e,0xb96675b7,0xb92f72f9,0xb89a7a7e,0x3a1d6d5b,0x398997d6,0x38b36fa0, +0xb909342b,0xb98350fc,0xb9dd7439,0xb93510a3,0xba8a8b98,0xba98902c,0xba4a5dc6,0xba8e4de6,0xba883ba9,0xba6ba576,0xb9d08701,0xb988d9c8,0xbaaa89d5,0xb9662955,0xb979fc3f,0xba6c82a7,0xba120bb0,0xb8c52a55,0x3a4a4ec7,0x39a4673e,0x39e5dc55,0x38fd3fb9,0x3aab85d3,0x3ab39b45,0xb9809ea7, +0xba469583,0xba0b34e8,0x3b054cc7,0xb9914926,0xba5f7e88,0xba7c9802,0xba5543c0,0xb89de283,0x3aab92f8,0x3a30074e,0x39ef2c38,0x38449acd,0xb960555d,0xba2e2511,0x3930c3cf,0xbaf62f31,0xbb00c019,0xba5abdef,0xbaf06fa3,0xbaebba87,0xbb399106,0xba6d08cb,0xba4275f9,0xbaf8b965,0xb9722048, +0xb90a4c99,0xba9ea045,0xb9bca139,0xb9cca6b0,0x3a8d2248,0x39f492d8,0x3a9401a6,0x3a8471ac,0x3b67ae70,0x3b534f6e,0x3a125b03,0xbabb5990,0xbaa4bb49,0x3b459fb1,0x39acf5c2,0xb8b1d20c,0xb9a71f2d,0xb982d6b7,0x39c51ba1,0x3b12e163,0x3ac147eb,0x3a32a53a,0x39b404fd,0xb99aa6e2,0xba94985f, +0xb9a57c93,0xbb4d4f3a,0xbb2491d6,0xbaad575e,0xbae2dff5,0xba85e33f,0xbaa501d2,0xba8b46e9,0xba989cbf,0xbb271d50,0xb989ccf8,0x37a6dad4,0xbb195b33,0xba983e55,0x37dc3e7b,0x3a8a88cd,0x3a248d3f,0x39b4d4fa,0xba2032f1,0x3b323a3a,0x3b13cc9a,0x3a1621a2,0xba9e01fb,0xb9d0c707,0x3b801530, +0xb8a84e1b,0xbb2255cc,0xbb4750d3,0xbb048462,0xb902d66f,0x3b34fe86,0x3b029877,0x3ac94da8,0x3a20640c,0xb938d2a1,0xba86332b,0xba5cb1b6,0xbaf1a0d8,0xba2a94a7,0xb92373fa,0x3a057116,0x3910680f,0x3a182f87,0x38bc2294,0x39f1f000,0xba83419a,0xb98e31e9,0x399e4749,0xbb0e97d6,0xba826f28, +0x3ba1a983,0x3bcd74ba,0x3c2a088d,0x3c3eafbe,0x3c4a1c39,0x3b5c898d,0x3a818f4f,0x3b1efacb,0xba8c6c56,0xbb4d2980,0xbb858f21,0x3b09a4a3,0x3c027a6a,0x3c5e38e5,0x3bcc2b9d,0x397dce59,0xbb71415b,0xbbebe8b7,0xbbf5e3c1,0xbbb62537,0xbbc517b9,0xbb5c1285,0xbabba5ba,0x3b20feaf,0x3a523e78, +0xb90c00f5,0xb82f8e68,0xb91fb09c,0xb9435f22,0xb9276686,0x3863d1af,0x38b82846,0x3a9972f4,0x3b449104,0x3b788e3e,0x3ba071f9,0xb99537db,0x3aeabd70,0x3a4f1142,0xbb06788b,0xbb7bc1dd,0xbc0ae8eb,0xbc142640,0x3845dcbc,0x39ef072f,0x3b60f6c2,0x3bd0406d,0xbb65b4aa,0xbc0b5978,0xbc038066, +0xbb912a09,0xba0804ea,0x3b3d3e12,0x3b3eb14d,0x3ac03ba5,0xbaa54ec8,0xbad35b7b,0xbab15724,0x39f9ae79,0xba0b0328,0xb9b7bc4a,0x3731c729,0x3877773f,0x387b2031,0x38e6bc8f,0x38171017,0xb66f376a,0xb8b83432,0xba048be0,0xb9129f17,0x3b1a8b95,0xba320d5c,0x3a5ab816,0x3bd606b6,0x3b5134bc, +0x3acbc7f5,0x3b87f628,0x3b413eed,0x3b8da2cc,0x3bb0c326,0x399cf1f3,0xbb2d5db5,0xbabb8b5f,0x3a0fa2af,0x3b3ff293,0x3b3e4adc,0x39f574a3,0xba598dcf,0x3976bb0b,0xb9df4f23,0xb967d14c,0xb89c58c6,0xb89342d6,0xb9901044,0xb94afcd8,0xb6dc894f,0x3938ce9a,0xb77ef84e,0xb7b53068,0xb8409b7c, +0xb883fc8d,0xb5a57413,0xb7b7cc63,0x38ddde71,0x39775049,0xb9a37f35,0xbb14d22d,0xba1367aa,0x3b4b279c,0x3bf120e4,0xba77e2d5,0xbb354a8a,0xbb59e8c5,0x3b243023,0x3bb49a01,0x3c0891f7,0x3b503ac4,0xba104ea1,0xbbc30166,0x3b1b5d1d,0x3b9c6800,0x3bb05f4c,0x38ea1db7,0xbae750d8,0xba9d8598, +0xba8a4cbb,0x39f3d3b7,0x3b1a19b6,0x3b0a7198,0x3abfe0f4,0xb9876d69,0x39696e23,0xb8c2263b,0x37e7f0ce,0x37a1b90e,0x3783f8fc,0x38162ec8,0xb72cd1e1,0x37c143ad,0xb8dfc4b5,0x388e0bab,0xb919b00f,0xbba8ffab,0xbb293f1b,0xbbb38700,0xbb4443da,0xbc0d8208,0xbc15dd39,0xbc39f55a,0xbc2f5cd3, +0xbbcc101d,0x3bdfaf69,0x3bd37247,0x3bb7ba53,0xbad06567,0xbb1d3fbb,0xbb83f05f,0xbb8c4c9a,0xbb464762,0xbaecb1dc,0xb997a34a,0x3a84f93d,0x3b057189,0x3b3133fb,0x3b2768bf,0x3ad81f6d,0x3928b895,0xb9c355d6,0xb728bdff,0xb7806f6a,0xb856871c,0x361ee369,0xb7dea536,0x38128702,0xb7d06ada, +0x38873f43,0xb7aab0db,0xbae0c004,0xbc30e61a,0xbc1c550f,0x3c722b8b,0x3c57df76,0x3b4f1c35,0xb9c8ad64,0x3a04fc23,0xba0779c2,0xbb03fe24,0xbba68de8,0xbbae87e1,0xbbc4d713,0xbb570e05,0xbb45f509,0xb7ce262a,0x3acb412b,0x3adf8dae,0x3afb5fb2,0x3af8142b,0x3b21e4ae,0x3b456a6d,0x3b6ee002, +0x3b88bf7a,0x3b87b555,0x3b12300c,0x3a832d82,0x380b5118,0x38b68b50,0x38747aee,0x37193847,0xb76dac8a,0xb725b6ae,0xb8b64abe,0x390e1883,0xb92b52d2,0x3b19bc26,0x3bcff34e,0x3c5bcf64,0x3a6ff6a6,0x3aa4e4fb,0x3a9c04af,0x3960b6c1,0xbaac0b36,0xbb152b66,0xbb22a092,0xbafe5fcc,0xba5be1a3, +0xb9fc3258,0xbaa1595f,0xbac682d0,0xbadd5d1a,0xbaf29348,0xba9b175c,0xba8d046f,0xba89c137,0xbaa5645c,0xba81b061,0xba372881,0xb9e7d31c,0x39cf239a,0x3a26db8d,0x39c993ee,0x3856dce8,0xb95ca7dc,0xb9113ed1,0x383ede67,0x3651dfa7,0x38b75ab2,0x3941966d,0xb8d29abe,0xba1878f4,0xba86cdca, +0xbabcb80d,0xba1b47f9,0xbb099156,0xbb06ecb3,0xbacecf11,0xbad3e5e8,0xbaca2497,0xbae86f30,0xbada26b9,0xbafc9fa4,0xba8d49a2,0xb9437c46,0x3a54030c,0x3ad6f2d9,0x3b07ee7e,0x3b0d3286,0x3ad7ec75,0x3a856895,0x39f11175,0x38bebd21,0xb91f60bc,0xb9ca0e95,0xb8c378c9,0x39f7d505,0x3aa7d26e, +0x3a42f869,0x3a25c446,0x38c1cdd6,0x37b63cb6,0xb984dba5,0xb8d5f3a2,0xb9d87ef0,0xba3e35da,0xbaa8a401,0xbab6c269,0xbab9de57,0xbabbb2f0,0xbad169ba,0xbb01fc25,0xbb2fc20e,0xbb2f1b5a,0xbb202a17,0xbb2f6781,0xbac0928e,0xba18c839,0x394d323d,0x3a85c3e6,0x3ac231ce,0x3b0cac21,0x3afe6fc2, +0x3b1951a0,0x3b2b05f1,0x3b136337,0x3b0bca12,0x3adc367f,0x3ac20221,0x3abd0ad2,0x3a3dd5c8,0x3a98d525,0x3ac2c2b9,0x3af1c7fb,0x3af428ea,0x3affb133,0x3b059af6,0x3ae20b4d,0x3a9db6b0,0x3a94178b,0x39ef1f39,0x3980f907,0xb9bc5183,0xba4351f2,0xbaaeeeea,0xbafffed3,0xbb0c91a5,0x3b22efc0, +0x3aec0655,0x3af9c775,0x3b195ffa,0x3b2fb134,0x3b0f7447,0x3b007124,0x3adecd91,0x3ac64889,0x3abb3693,0x3ab1cff5,0x3ac75f7d,0x3aba1c34,0x3ab74a47,0x3aae2ea8,0x3aaef2e6,0x3aca7b84,0x3ac0fbc7,0x3ac16c54,0x3ada0d55,0x3ac9ba25,0x3b075500,0x3b1adfc7,0x3b36d46d,0x3b437489,0x3b504a52, +0x3b4da637,0x3b409e0b,0x3b2e9dbd,0x3b317634,0x3b0f8b83,0x3b1da957,0x3b16d4fe,0x3b2918c6,0x3b3dbbab,0x3b1637b4,0x3a33fd9f,0x3a399eea,0x3a5403fa,0x3a42336e,0x3a5977ce,0x3a79743f,0x3aa15645,0x3abe43fd,0x3acfe71c,0x3adaa140,0x3ade1488,0x3addde07,0x3ae1a93e,0x3ae86d31,0x3ae63602, +0x3ae35157,0x3ae35e7f,0x3adcba9d,0x3ad3439d,0x3ad6c885,0x3ac03639,0x3ab4b11e,0x3a9ffde1,0x3ace7b0d,0x3ac571a0,0x3ac14c9a,0x3ac0046c,0x3aa9fd29,0x3aa76100,0x3a9f7d3b,0x3a8fe177,0x3a772970,0x3a609e84,0x3a5b9a3a,0x3a12ef20,0x3a1e2f35,0x3b1f0901,0xba0fb739,0xb989ac80,0xb9593667, +0xb9852212,0xb98f1f68,0xb9d323c7,0xb96c56a2,0xb987be60,0xb9d4454d,0xb9e41c01,0xb9b417ea,0x38309d58,0xb9a4ffea,0xba0123da,0xba151cb2,0xba15df17,0xb9fd85d2,0xb946276d,0xb990043e,0xb99dd544,0xb9c87fb3,0xb9b22ab4,0xb98fe1be,0xb7f7d4ef,0xba19d4dc,0xba1a8658,0xb95b684b,0xb9f1040d, +0xba0fbdfa,0xba094f21,0xb9c98686,0xb98d8853,0xb9de3938,0xb97b23eb,0xb9ab1c8d,0xb99ecd1c,0xb9628d8e,0xb9456642,0x38d23e01,0xb8813e49,0x38025e9c,0xb8f0e25c,0x3a713f26,0x3a2c30ce,0xb9448052,0xba30423f,0xba2e86c0,0x39ce2b41,0xb8fdf6c4,0xb995f44e,0xb9f34c55,0xba346df1,0xba2f16a2, +0x3956127b,0xb89e6690,0xb94f71f3,0xb9fdf143,0xb9e32621,0xba1a57aa,0xb982fa14,0xba9dae2e,0xbaa89b89,0xba1c470e,0xba9b67f3,0xba94ad65,0xba4fcf42,0xb9b05b12,0xb91553a0,0xba84f4e5,0xb99ec11f,0xb9c53d80,0xba6b78f4,0xba25cd3f,0xb8eb9ed8,0x39f9d5aa,0x39462cdd,0x39898b52,0xb9914c15, +0x3a81e608,0x3a94d0f7,0xb83904cc,0xba4435bc,0xba1a2708,0x3abe0920,0xb8e7423e,0xba50e133,0xbaa5f6fb,0xbad438f0,0xba84903f,0x3a2ac5c7,0x38f219d7,0x373d0d32,0xb9e9ac4e,0xb9e53478,0xba550fa2,0x391e659a,0xbb02152f,0xbb036a87,0xba0dea8e,0xbb05221e,0xbb048c43,0xbb0f4e31,0xba7c11ce, +0xba3ea38e,0xbaa663dc,0xb98f32be,0xb98afa57,0xba8d99a5,0xb9e8eb2a,0xb9217049,0x3a945ea9,0x39dc3778,0x3a83acbf,0x39d1fc9a,0x3b4b29c4,0x3b4acc64,0x3a924a5a,0xba8db365,0xba98f353,0x3b004c15,0x39cd4cc4,0x37f56699,0xba14eb76,0xbac48227,0xba898ee2,0x3abba5bc,0x3a4b64b5,0x39385abc, +0xb9c10a91,0xba2b4c57,0xbab21849,0xb97e3d2f,0xbb48deca,0xbb16b009,0xba3b9593,0xba9083fc,0xb9a2aa3f,0xba0d5495,0xb9931b57,0xba077233,0xbac9c0ae,0xb9549230,0xb89e40c7,0xbb00b084,0xba9c5a4e,0xb8c43948,0x3a3959ac,0x39e00dd6,0x38ba0f79,0xba9b70e4,0x3b0ab004,0x3af71846,0x3a8b878d, +0xba76befb,0xb9ecf656,0x3b42a18a,0x39e9eb37,0xbb024ed2,0xbb64fbe9,0xbb6e4709,0xbaf92ef7,0x3acad02e,0x3a82bc3f,0x3a36e06a,0xb998755f,0xba21fe17,0xba9b7af0,0xba239c61,0xbad51209,0xb8fefcbe,0x388955a6,0x39c068c7,0x3986a4b9,0x39a1eb6b,0x38b78189,0x39aee023,0xb907e359,0xb9368599, +0x39469ae3,0xbad94af6,0xba414ab9,0x3b979963,0x3bae801b,0x3c16d748,0x3c34f85e,0x3c483acd,0x3b64787e,0x3aab6083,0x3b29fbb5,0xba16a980,0xbb15d7b1,0xbb3fd0b0,0x3b16daaf,0x3c0acd73,0x3c6e5bb4,0x3c100242,0x3b2ccb1b,0xbad3a799,0xbbb86d81,0xbbd125e9,0xbb953449,0xbba29b2c,0xbb0ec1b2, +0xb897420b,0x3af53c05,0x3995ed2f,0xb8e2e5b4,0xb8cce4e5,0xb93cb96b,0xb8d4938d,0xb90be9bf,0xb84bbf6d,0xb81afe6c,0x399c0ec9,0x3ade5568,0x3b308557,0x3b6a2993,0xb6c7bbef,0x3ac39f26,0x39aa9fa1,0xbb0c0081,0xbb5e3a89,0xbc098e38,0xbc1ceb16,0xba9a98b4,0xb9a4c22d,0x3b5b6fe4,0x3bfaef05, +0xbadee126,0xbbe91b84,0xbc0a4b67,0xbb9fcb1c,0xba731aa4,0x3b0be80b,0x3b084968,0x3a387289,0xbaf6e5e8,0xbad70a68,0xba8682c7,0x399162fa,0xba01422d,0xb9827582,0x38418df2,0x38c6c923,0x389b515e,0x3887a816,0x38289e4a,0x37d3ee69,0x372c4db2,0xb97fadca,0x39879d64,0x3ac04e61,0xb9654628, +0x3b287105,0x3bf9ad09,0x3b7d7202,0x3ab90c33,0x3aaa2094,0x3b2bd6a7,0x3b911925,0x3b9f922e,0x3a9b8589,0xbafa45a7,0xbaf73341,0xb80484c7,0x3b251b9a,0x3b7bc8d0,0x3a96a078,0xba087d48,0x39f764d8,0xb9964224,0x38972254,0x39032f83,0x399a2191,0x3838b8db,0x38c70318,0x38034968,0x392a30e2, +0xb8370c19,0xb7e57869,0xb846e311,0xb81fdaee,0xb67a8f40,0xb7d8dbed,0x389b79a1,0x37bd5c8e,0xb8d0478f,0xbae3e63a,0x39343f2e,0x3b830dec,0x3b5482a9,0xbaff957a,0xbb509010,0xbbad38b0,0x3ae2e417,0x3b9a6d9e,0x3bcc99a4,0x3b978f0d,0x3a5d6f69,0xbbd69e03,0x3a722c93,0x3b66f6ec,0x3bc8b42d, +0x39d36581,0xbac3fd8f,0xbaa35f97,0xba804442,0x39dc2d41,0x3b1aede1,0x3b04ef6b,0x3a939876,0xb93038e8,0x392fcf2b,0xb909dd7a,0x382118bb,0x37478935,0x36ff2d0a,0x37af813a,0xb78844ee,0x379ed3da,0xb8d5fb1f,0x3894c8fc,0x39a67af7,0xbb7dc47b,0xbaa74753,0xbbbd0684,0xbc416144,0xbc2bac4e, +0xbc104650,0xbc264a5d,0xbc3b0af5,0xbc0d0a10,0x3b42dcd9,0x3bcb965a,0x3bdc584d,0xbaa6f74d,0xbb0438be,0xbb95e9cd,0xbbb24528,0xbb7c397b,0xbb1a9e40,0xba866f2e,0x3976469f,0x3a8e2365,0x3af5b2a2,0x3b01d778,0x3a6e287d,0xb9af4fe8,0xb9469cc2,0x380799fd,0x36f4f24b,0xb799b946,0x3794a00c, +0xb69a74be,0x37ef0d2e,0x37dfb278,0x3857a6dd,0x38bac953,0xba810d0a,0xbc0858bf,0xbbd1acb4,0x3c69f6b2,0x3c6ae2a2,0x3b027dcb,0xbb20de32,0xba8164ba,0xbab59ed9,0xbacc923c,0xbb762a5c,0xbb9a84e3,0xbbbebdfb,0xbb741848,0xbb5f4d12,0xb9fcb992,0x3ab5adc7,0x3abd6769,0x3ad90ef1,0x3afd00e0, +0x3b3af891,0x3b6cb983,0x3b87cc39,0x3b957b53,0x3b83047b,0x3adda35d,0x3a1294a0,0xb8c8d43b,0x37ebc87c,0xb61dfa8a,0xb7ab8ee2,0xb8640fb6,0xb68a9994,0xb91ebfe6,0x3882650a,0xb9cf0a4a,0x3b0c8204,0x3baa5afc,0x3c3ea34d,0x3acfac97,0x3aac3c4e,0x3ab44394,0x3a7955b4,0xb9f080b6,0xbab3d89b, +0xbafd7822,0xbaf33b60,0xba9a6c5d,0xba83905d,0xbadf3747,0xbb16d76b,0xbb2fc2c2,0xbb4eb980,0xbb154d3e,0xbae705f4,0xbaaf3b9a,0xba928cb9,0xba391828,0xb99628a0,0x38de9b29,0x3a3795ed,0x3a559a33,0x39a59a6f,0xb79280fb,0xb7330822,0xb6a0b0d7,0x38c42beb,0x385cad55,0x390c5a39,0x3933f2fa, +0x394594e2,0xb832276b,0xb96d8389,0xba2df019,0x3999eb3e,0xbad568a1,0xbaa97652,0xba4650b3,0xba87a51c,0xba32d557,0xba964423,0xbaa62eca,0xbaff4fbd,0xbaca0542,0xba84250d,0xb94d9eed,0x3a3e8c92,0x3aa85aef,0x3ac353d6,0x3a928f0e,0x3a3abd3b,0x39c5feee,0x396f609a,0x3934a722,0x38ac4e82, +0x39a5dc93,0x3a34775a,0x3a90f331,0x3a0a9bad,0x398fbca4,0xb9310c2a,0xb905edd4,0xb97479d1,0xb8faec89,0xb990ab63,0xba0fd5e8,0xba88e812,0xbab6258e,0xbac97d7a,0xbacaa886,0xbac43ceb,0xbb2e81b9,0xbb51d115,0xbb43285b,0xbb287336,0xbb2f6d75,0xbaecc4ec,0xba8b2039,0xb9abe58d,0x3a121b4e, +0x3a8c75f1,0x3ad23156,0x3ad7145d,0x3b0e7e48,0x3b2f49dd,0x3b1a792d,0x3b1330d4,0x3ae7fde9,0x3ad8a91e,0x3acbb19d,0x3a956349,0x3aae69ba,0x3ace62de,0x3ade6dd2,0x3acc3adc,0x3abb117c,0x3aa9a040,0x3a7cfdc1,0x39c7cbbc,0x39cb4772,0xb964d5c5,0xb9a9cc4b,0xba471f26,0xba8d0d71,0xbae7b369, +0xbb1d8e1b,0xbb2d507f,0x3af16450,0x3aa0224f,0x3ab51e66,0x3aec1154,0x3b14f1ef,0x3b0267fe,0x3b0298d9,0x3aea3bb3,0x3adecf71,0x3ae429e7,0x3af32170,0x3b0a5151,0x3b095bb2,0x3b101dc8,0x3b06c9eb,0x3b061e98,0x3b166789,0x3b11c359,0x3b0f9ea5,0x3b18b8da,0x3b0f6c48,0x3b26b312,0x3b3475c8, +0x3b4561ef,0x3b4c6e45,0x3b4eefe6,0x3b4dd258,0x3b3c496f,0x3b2a521c,0x3b2418b7,0x3af7dc43,0x3b046273,0x3ae6d15e,0x3b059dfa,0x3b16baf5,0x3addd5c7,0x3a62e3d0,0x3a5035c1,0x3a73c828,0x3a78eb83,0x3a8a430a,0x3a96a70d,0x3ab80135,0x3ad7ef0e,0x3af14516,0x3aff4e2e,0x3b02814b,0x3b04591d, +0x3b08e4b0,0x3b0fab15,0x3b0db80f,0x3b0c2f6b,0x3b0abead,0x3b059bf0,0x3b016fad,0x3b029bc0,0x3af12807,0x3ae620f5,0x3ad185ee,0x3af3df82,0x3aeab0c8,0x3ae89c75,0x3ae889b8,0x3acfbebd,0x3acafd94,0x3ac6ada6,0x3ab84304,0x3aa625b4,0x3a98fb33,0x3a90c8a3,0x3a51be86,0x3a54dbd2,0x3b4afdfc, +0xba541156,0xb9e08895,0xb9cc3975,0xb9dcd187,0xb9e22db4,0xba1c0a32,0xb9c9f585,0xb9d2b77b,0xba01096f,0xba13d509,0xba05eb7d,0xb9652b78,0xb9e83cc4,0xba23441b,0xba44d876,0xba57888e,0xba471e28,0xb9e9b6f1,0xba02de15,0xba03c6a6,0xba19967c,0xba05eae6,0xb9e129a0,0xb92efe24,0xba438aa0, +0xba491f43,0xb9b555fb,0xba2a1b87,0xba32ae4c,0xba13e21b,0xba024df2,0xb9d6cba7,0xba0201de,0xb9d4cd14,0xba03d4b6,0xb9eca4bd,0xb9c879cd,0xb9bda286,0xb8c0db65,0xb9609388,0xb9419931,0xba05e81d,0x3a24afb3,0x3a030360,0xb8b802c2,0xba2ff976,0xba50611d,0xb8d0dbae,0xb98a8f61,0xb9cc739d, +0xba444621,0xba9f24c5,0xbaa75318,0xb98b379d,0xb9e2b2e0,0xba0095a1,0xba5cbea9,0xba385051,0xba57f9fb,0xb9e5b9e3,0xbab5c9de,0xbab455d2,0xba0c694b,0xbab959b7,0xbabfd57e,0xba684b5e,0xba053010,0xb92c7090,0xba4e63c4,0xb9fc31eb,0xba211bbf,0xba833d9d,0xba4c6405,0xb997124f,0x395b995a, +0x38310576,0x38a8a5bb,0xba370e64,0x3a41860a,0x3a7fd2ee,0x399301e0,0xba38e58c,0xba3182e0,0x3a338b52,0x3809d2b0,0xba3aca59,0xbad048ab,0xbb1cf42b,0xbafee427,0xb9056e92,0xb9eae57e,0xb9d0a6bb,0xba71bea1,0xba3b23b6,0xba81d471,0x383cd8fe,0xbb06bbd7,0xbb032e19,0xb9e6c9cf,0xbb04d86a, +0xbaedb6dd,0xbaca7fdf,0xba45ee59,0xba2939b0,0xba40d374,0xb9ce9266,0xba063610,0xba9157be,0xba17581c,0xb967a238,0x3a8004dc,0x39db342c,0x3a508914,0xb9b5efd3,0x3b2c44e9,0x3b458b97,0x3aee87cf,0xba307a57,0xba8cfc9e,0x3a40f5d6,0x3a0bbf8a,0x3967d592,0xba601439,0xbb309732,0xbb212468, +0x39ed8675,0x388162f3,0xb99eea18,0xba895e0c,0xba8978f6,0xbac9e5bf,0xb9b69a19,0xbb36a729,0xbaf8667f,0xb937337f,0xba1c334c,0x38a8d667,0xb8c7e586,0x38a4e783,0xb94c428e,0xba231cee,0xb97520fe,0xb98318e2,0xbadc7816,0xba9eeb6a,0xb95d59dd,0x39b8c7e1,0x39cb44e9,0xb845d24f,0xbad9c952, +0x3adb660c,0x3ade7f15,0x3ae57877,0xba17b6fc,0xba112cfc,0x3ae52b45,0x3a7a5432,0xbab245cf,0xbb7c76e4,0xbba6bbd4,0xbb6e786f,0x3918fda7,0x37a878ac,0xb842cc22,0xba8c97fe,0xba852152,0xbaa0825d,0xb9fd99dc,0xba94ebe2,0x399ed314,0x38f718ae,0x397a5f9b,0x38b98307,0x37db3006,0xb76dae8b, +0x3937890c,0x38db0ef0,0xb837b26f,0x3773e813,0xbaa1b6fe,0xba36ab13,0x3b783ce7,0x3b937ddb,0x3c093191,0x3c2a6482,0x3c483e80,0x3b923fc2,0x3b27806e,0x3b5ac779,0x38cc0789,0xbacfc4a9,0xbafdcc7c,0x3b0c554f,0x3c0712c4,0x3c6a6034,0x3c2c0db9,0x3b968459,0xb8e34a7d,0xbb8d5c0b,0xbbb1ef0d, +0xbb7b3ff0,0xbb8313ec,0xbaa5537d,0x3a5efb4e,0x3a807e1d,0xb76cf101,0xb8d66c5b,0xb8afe437,0xb8850570,0xb6ad4b60,0xb3d22560,0xb8c9036c,0x362094d7,0xb8a722ef,0x3a35fbbe,0x3ac0f0f0,0x3b1c934b,0x386f2ab3,0x3aa6b11f,0x3a9c6749,0xba43c64a,0xbad456ee,0xbbeb75f5,0xbc178645,0xbb15caa9, +0xba8c7f6f,0x3b40a39c,0x3c01a78d,0xb9b6d125,0xbbbe4f8e,0xbc0e9fa0,0xbbb28920,0xbac77364,0x3aa80796,0x3ab48c3d,0x397105ec,0xbb0d5e28,0xbababe38,0xba2a3bea,0x388cd0d4,0xb9c2f6c0,0xb82f4605,0x38872470,0x3891e6f6,0x37ddc6a8,0x35135a4a,0x374c5da3,0x36e2a2d2,0x387dd463,0xb8dc79f8, +0x390c1304,0x3a829768,0x38987c17,0x3b6c9b82,0x3c1527a6,0x3bc2f977,0x3b1fc872,0x38bbedf8,0x3b47f781,0x3ba8a86a,0x3ba4569a,0x3b113d84,0xba9c4719,0xbb2d1219,0xba66da41,0x3aed105e,0x3b8ad5f5,0x3aee9764,0xb88387f9,0x3a592ef0,0x37ca02cc,0x39fab47e,0x398fe586,0x39e9bca5,0x392fa2f1, +0x392223f1,0x38060de8,0x38d643f7,0xb86f3ba9,0xb794ad89,0xb72fd3d8,0xb72c5e25,0x377ef00d,0xb81e189d,0x38aedf2c,0xb914254e,0x3947767f,0xbac0e328,0x3a19f1c3,0x3b951a68,0x3990c0e9,0xba8316c8,0xbb0a63fe,0xbbcbb10e,0x3b021ce9,0x3ba0f4f2,0x3b9c7831,0x3bcb2a67,0x3b185fda,0xbbcc331d, +0xb9428f86,0x3b1ddbb9,0x3bd8db6b,0x3a81dd7d,0xba5c26a3,0xba8e41a6,0xba3f699f,0x39c481a3,0x3b057cfb,0x3acb05e1,0x3a1f39b0,0xb8d18ecc,0x38895039,0xb8a75530,0x38083cb8,0xb6537e90,0x36b7f0c7,0xb753d6c2,0x378cd6bb,0xb861d3a3,0x38b0f90d,0xb998a78e,0x3a579453,0xbb3a1654,0xb86fb8ab, +0xbbc1e70b,0xbc93d187,0xbc26dd92,0xbbd78c6a,0xbc078303,0xbc27b031,0xbc18ff4c,0xba73bc67,0x3bc1c606,0x3c01f6d7,0x39638c5c,0xba6be0f9,0xbb903e03,0xbbbd4893,0xbb8cca83,0xbb389fd8,0xbad4c4b2,0xba0c373f,0x38a8f968,0x3a66e35e,0x3a96cb84,0x392b7072,0xba0f00fe,0x37b1d626,0x37d90fd6, +0x3754a821,0x3629de67,0x37c8a3db,0xb739d0e6,0x382a70d3,0xb69ecdd2,0x38bb77b0,0x37d87805,0xb93c0f59,0xbbb21906,0xbb5dceb3,0x3c53fa88,0x3c6c7653,0x3a78f996,0xbb80c3c5,0xbb1a5fee,0xbb15d7a4,0xbaaf3311,0xbb16f883,0xbb83575b,0xbbb1cc7b,0xbb7260b0,0xbb497621,0xb9b5d4e9,0x3accdb3b, +0x3acd2c3a,0x3adc5e70,0x3b0e320e,0x3b4d4df1,0x3b7f1ba3,0x3b8b858b,0x3b902235,0x3b5be0ce,0x3a8d1c0c,0x38d96904,0xb8a7bf84,0xb6c5b250,0xb84ce7ca,0xb73b9dcd,0xb8481874,0x37d38ecb,0xb92c825f,0x38b678f8,0xb9fe1ac3,0x3aba4e61,0x3b8bc420,0x3c127977,0x3b10a64a,0x3ade2457,0x3aefa4bb, +0x3afcefb5,0x3a0331f3,0xba03790c,0xbacd967d,0xbaff2727,0xbacd2f0e,0xbabae8cf,0xbaf21193,0xbb2be0a6,0xbb4668c5,0xbb7ab96c,0xbb35d404,0xbb031f68,0xbaadb830,0xba770083,0xb9f22bc1,0xb8090615,0x3a033ca5,0x3a68da6d,0x3a4f5ddb,0x39836dc7,0xb8604556,0x38cc790e,0x38b2627a,0x38794b78, +0x37befd82,0x38a5ea9b,0x38d4f328,0x3979a8b9,0x39276ea0,0x39dfacb6,0x3926ce36,0x3a912ba1,0xba574183,0xb9a0daa9,0x390a5c7e,0xb9cd9a70,0x38534332,0xba0d6e21,0xba54593e,0xbae7c52a,0xbadf88d4,0xbac8572b,0xba65b0c1,0x390167cc,0x3a4a761a,0x3a8a2bdd,0x3a5ded11,0x3a244ac0,0x39f2cea5, +0x39ecd5b5,0x3a139bee,0x3a1092cc,0x3a1d5ede,0x3a467946,0x3a5aa24f,0x399dd30f,0x37b145b1,0xb96c1128,0xb92eebfe,0xb91938ff,0xb7a0dc68,0xb9038102,0xb96a5eef,0xba2a735b,0xba85dc73,0xbab0d9e4,0xbab1b07c,0xba907a0b,0xbb42eb40,0xbb5beb76,0xbb450aaa,0xbb22df6c,0xbb23cab6,0xbaf56b62, +0xba9e3d00,0xb9f5d846,0x39da2b12,0x3a7a9219,0x3abb660c,0x3ac28358,0x3b07505e,0x3b2d555e,0x3b1c27f1,0x3b16b958,0x3af49278,0x3aee6562,0x3ae4b1a6,0x3ac5e851,0x3ab5d6a5,0x3ac2a218,0x3ab15a72,0x3a8ce45d,0x3a506c79,0x3a128879,0x39891a04,0xb95f574e,0xb976265c,0xba2a73f6,0xba4a767a, +0xba84c0c1,0xbaa6f15b,0xbafab828,0xbb1f4379,0xbb354cb9,0x3a972221,0x3a0f8568,0x3a4e13e6,0x3a9bb1e1,0x3ae6716d,0x3ad58fa5,0x3ae9e4d1,0x3ad50698,0x3ad43662,0x3ae83c3c,0x3b04ba50,0x3b1e19de,0x3b255d0a,0x3b34e1c7,0x3b28d0d5,0x3b25ff20,0x3b373fea,0x3b312268,0x3b2bdeee,0x3b331587, +0x3b2bc785,0x3b36f81c,0x3b3b6261,0x3b3fd2e8,0x3b3e2366,0x3b35151a,0x3b31f590,0x3b1a6f78,0x3b0b611f,0x3afa953a,0x3aafc213,0x3ab655b7,0x3a870d79,0x3aa8ac0c,0x3ac2fca0,0x3a6e145e,0x3a7e83ba,0x3a456492,0x3a71d736,0x3a849192,0x3a946761,0x3a9f57c0,0x3abf9977,0x3ae27473,0x3b00ad96, +0x3b08d889,0x3b0c5da0,0x3b0ed923,0x3b13f778,0x3b1cdcec,0x3b1968dc,0x3b17dfea,0x3b15807c,0x3b0f9ddf,0x3b0c020f,0x3b0c6e0f,0x3b05c286,0x3b02cf71,0x3afa8ce3,0x3b01d750,0x3affa08a,0x3b02b9d3,0x3b03a3a3,0x3af08884,0x3aea5832,0x3ae76bed,0x3ad84099,0x3ac62229,0x3ab35746,0x3aa4732b, +0x3a8e86a0,0x3a8450fa,0x3b5e5ba1,0xba8783ff,0xba162fec,0xba07c168,0xba0a0dc3,0xba09d904,0xba3cb1cb,0xba07c51e,0xba0b23ee,0xba14d248,0xba34135f,0xba31bccf,0xba02422f,0xba133739,0xba3e30d5,0xba6bad86,0xba85e98b,0xba81a27c,0xba34597d,0xba368926,0xba30b90b,0xba444d19,0xba310004, +0xba1b60de,0xb9ae0438,0xba6a4ed0,0xba77c710,0xba0209cf,0xba51aeca,0xba4e7f91,0xba1e3a44,0xba16f536,0xba04a7b7,0xba0c380e,0xba177e1c,0xba2e74b4,0xba1f5ab0,0xba10d97b,0xba0523f8,0xb93a0954,0xb9713d59,0xb9858c68,0xba42ddbb,0x39b3c4f4,0x399887c1,0xb8110e65,0xba43fb98,0xba83ed14, +0xba337fa8,0xb9e2e625,0xb9fc0a7e,0xba846278,0xbad68b28,0xbae9bcba,0xba4110c2,0xba474203,0xba4575f9,0xba976be4,0xba80fdd6,0xba89dcfb,0xba29a122,0xbac371a4,0xbab26294,0xba072142,0xbacf793f,0xbadca7b4,0xba78472f,0xba29ce25,0xb98df95c,0xba0f0ac8,0xba2138bc,0xba50fbbd,0xba8a3a1b, +0xba663987,0xb9cf950c,0x38a5875d,0x3902f540,0x38f87f0a,0xba63c485,0x39ff3f78,0x3a364f66,0x3a02dd4f,0xba567f13,0xba7767d5,0xb9a940cb,0x384ef1f4,0xba29a8f8,0xbaf67d40,0xbb44cade,0xbb32f8e7,0xba7a9369,0xba80d400,0xba4a1c31,0xbab05d6d,0xba7bc7a8,0xba91a312,0xb8becc24,0xbb032208, +0xbb00b346,0xb9e5ce67,0xbaedc8c3,0xbabcd56f,0xba7f24fd,0xba008e81,0xb9ecbbe5,0xb9991a4c,0xb9eff0f6,0xba32442e,0xba870f0f,0xba1afd21,0xb8b452ca,0x3a85566f,0x3a3dad7f,0x3a6bf01e,0xba3a24d9,0x3b0b5500,0x3b2f8949,0x3b16a897,0xba1a9324,0xbaad8a1f,0xba609999,0x39f13f6f,0x39aa4236, +0xba9c5892,0xbb6f46f5,0xbb6f17c3,0xba201f49,0xba291986,0xba44f988,0xbadd03c1,0xbab83040,0xbad8b7cb,0xba0b9424,0xbb1b78ba,0xba9ed564,0x393c6501,0xb8864c49,0x39c9d294,0x38accfe1,0x392da837,0xb8c422e1,0xb85018cf,0xb951d338,0xb9bbeb91,0xbaae091e,0xba8ce0ec,0xb9887a97,0x396f02ac, +0x3a2af403,0x39479592,0xbae00ad7,0x3a9b68de,0x3aa74401,0x3b0df52c,0xba19dfb6,0xba8d2db9,0x382062db,0x3a90288b,0xba5e78db,0xbb88179e,0xbbcb7898,0xbba83450,0xbab8811d,0xba79080e,0xba4630b8,0xbae62e24,0xbaa65650,0xba97d2c4,0xb9d820d9,0xba03483f,0x3a01b138,0xb6ce0621,0x36baf069, +0xb8ec4823,0xb7e0ab3b,0xb833eae1,0x380a89ec,0x381a337f,0x38932b66,0xb85f8777,0xba605185,0xb9e572d1,0x3b7039fb,0x3b929741,0x3bf6134a,0x3c1f650d,0x3c47e8d6,0x3bacd78b,0x3b69471c,0x3b7427cc,0x3a330d7e,0xba7290e6,0xbaa639d7,0x3acc81d0,0x3bef9e30,0x3c588674,0x3c40b5ae,0x3bd4594f, +0x3aabc4ed,0xbb3f6680,0xbb92992d,0xbb5a41d0,0xbb51e7e9,0xba1dc92b,0x3a9c35cf,0x391af0a8,0xb90bf663,0xb882c287,0x37d49185,0x38073a4d,0x37c3d22d,0x3766b236,0xb79e6184,0xb6d83807,0xb8acb847,0x39395d3d,0x3a4eb1da,0x3ac8a165,0x3a0e8d3d,0x3a92073a,0x3ae5cd19,0x39d4df29,0xb9db86a0, +0xbbc6ef62,0xbc0bfce5,0xbb3f6f08,0xbaa8f275,0x3b31a6c6,0x3bfad2c0,0x3a4dd5f0,0xbb92e827,0xbc0e6be3,0xbbca6c32,0xbb226dbf,0x38963e2e,0x3a0e87d5,0xb9335060,0xbb0a84d2,0xba78fc70,0xb99e55f3,0xb8c4ec6e,0xb90c554e,0x38a6cdb7,0x37f086e2,0xb73d3717,0xb764a2a5,0xb7743603,0x3679d50c, +0xb6d5df64,0x37c2525f,0x35fad8fa,0xb85f0fdd,0x3a1d3771,0x3a50ef1e,0x3ba79de7,0x3c234c5b,0x3bc15f52,0x3b01121a,0xbb01fe85,0x3b31733c,0x3bafbaa3,0x3ba99710,0x3b667d11,0x3816f396,0xbb401853,0xbaaae2d1,0x3aa48408,0x3b8decfd,0x3b2d183c,0x3a19e3cc,0x3aa0d6f7,0x39b51258,0x3a49bf23, +0x39a0fde0,0x39eb2d71,0x39324234,0x3907e11f,0x37103525,0xb6e31669,0xb7abfc93,0x36be51eb,0x377be65c,0xb6991743,0x376cfd80,0xb80707fe,0x38b91875,0xb93cc596,0x39a194c1,0xba747195,0x3a62e886,0x3b993cd7,0xbb2891e1,0xbac336d1,0xbb046d05,0xbbe9d7fe,0x3aef594a,0x3b9ce69c,0x3b4cdf28, +0x3bede732,0x3b69d876,0xbba89480,0xba881ba6,0x3ab159b9,0x3bdd3528,0x3af1bae1,0x3970fb68,0xba3b7465,0xb9c4d8c9,0x398fe0e1,0x3ab6a3f1,0x3a529aa4,0x38147842,0x36c0a5e4,0x370b7efc,0xb80e0efc,0x37c201dc,0xb79ec0a8,0x372a3975,0xb79909e5,0x38231f8e,0xb89a3e9c,0x39208e4a,0xb9d85d78, +0x3a413638,0xbabe1168,0x3948c5a0,0xbbd3231d,0xbcbf3d3c,0xbc1ffe96,0xbb954f7b,0xbbca3f41,0xbc0bc14e,0xbc1c7f15,0xbba1964f,0x3b9c36c9,0x3c068e7b,0x3b0ba4a1,0xb80247dc,0xbb8a315f,0xbbb9236d,0xbb940638,0xbb4f7180,0xbb0aa075,0xba9a6dbf,0xba440c90,0xb90aeb59,0x399b8259,0xb9dddd68, +0xb9e45f2b,0x3924fdea,0xb7e1e1f7,0x37f9222e,0xb3676b83,0x36f0e126,0xb78c376a,0x3706d557,0xb756a421,0x38461285,0x38cb0b3d,0xb8481557,0xbb2a3bfd,0xbac04cd3,0x3c194a03,0x3c41001e,0xba39a900,0xbbaa6075,0xbb84c9de,0xbb5e7b65,0xbab72aee,0xba86286b,0xbb579f37,0xbba6da58,0xbb865a5e, +0xbb4df7d1,0xba10159e,0x3aa443b4,0x3abd95c6,0x3ad7978f,0x3b258bd3,0x3b62278d,0x3b852097,0x3b87e60d,0x3b775ce2,0x3b26e647,0x3a00f7c5,0xb8eb0738,0xb7c045e3,0xb81a2b8a,0xb7988911,0x3756dd2b,0x33663c56,0x3868a568,0xb898bfb6,0x3885122b,0xb9cb0180,0x39ffda42,0x3b4f70f7,0x3bb0141f, +0x3b210094,0x3ac67285,0x3af9a5ad,0x3b22569f,0x3a76de23,0x379c8b26,0xbab46395,0xbb0485b9,0xbb0457b1,0xbaf2c1f5,0xbafe4367,0xbb3a2188,0xbb5144c8,0xbb8756f1,0xbb3cd617,0xbafcb4ad,0xba93e3c7,0xba21113d,0xb8a2516e,0x39c5f68b,0x3a664c4c,0x3a86b747,0x3a38981c,0x39147f9d,0xb5a3c70c, +0x38b1dcb9,0x380ac142,0xb7a08586,0xb8133aa2,0xb81560f9,0xb8393dad,0x394a9d87,0x38ec8501,0x3a261e3a,0x3a42d3b0,0x3ab5e817,0xb91ac301,0x39e05029,0x3a299669,0xb8aefeb7,0x399d3064,0xb97f3239,0xba12f70a,0xbad40004,0xbaf7fa88,0xbb08b9ca,0xbaddab1d,0xba30156d,0xb43f9049,0x39ad4ec8, +0x39c47f10,0x39b9151d,0x39bd3d36,0x3a0596f0,0x3a4e2ec0,0x3a73967a,0x3a61a2a6,0x3a46966a,0x3a083be1,0x3920aa9c,0xb90105c1,0xb9028bfb,0xb813ae00,0x38a9a807,0x38a42bec,0x3916e0fe,0x38c209ed,0xb9853c03,0xba030d1f,0xba806e55,0xba94bcf4,0xba34d9ae,0xbb4a1bf8,0xbb5f537d,0xbb44ed91, +0xbb1ec69e,0xbb1bbbc3,0xbb00eff2,0xbabaa00e,0xba3da76a,0x38c265f1,0x3a263118,0x3a83b86e,0x3a893085,0x3ace83a0,0x3b0fd38f,0x3b018d84,0x3afb2aa4,0x3ad0e554,0x3ada921a,0x3ac58fff,0x3ad90a51,0x3aae026e,0x3aa34deb,0x3a71b83f,0x3a159cd9,0x39681e21,0xb836356e,0xb98ef16a,0xba21534f, +0xba14ae83,0xba6957f3,0xba81bcc9,0xba90845d,0xbabf46e7,0xbb008736,0xbb1a5634,0xbb33c391,0x39c4959e,0xb910531e,0x3902e917,0x39f4d6c3,0x3a8a57e1,0x3a868a80,0x3aa8414c,0x3a969114,0x3a9d2f00,0x3ab9cc20,0x3ae855d0,0x3b13a1f4,0x3b236fe8,0x3b39423f,0x3b2f5e82,0x3b2c7f40,0x3b3b090d, +0x3b366632,0x3b316b3a,0x3b345e53,0x3b3390e1,0x3b2db777,0x3b29586e,0x3b2090c3,0x3b19fb22,0x3b0796d8,0x3b01fd87,0x3acc3279,0x3ab1bd5f,0x3a8dd32b,0x3a1cfca9,0x3a1f4162,0x3985f701,0x3a015d1f,0x3a188dde,0x37a42066,0x3a55775c,0x3a0358b3,0x3a311368,0x3a552dd1,0x3a769323,0x3a834fe3, +0x3a9f7d86,0x3ac0ae59,0x3ae256b9,0x3af3512f,0x3afa3cab,0x3afe5914,0x3b037782,0x3b0c87fc,0x3b08356a,0x3b072286,0x3b04aa64,0x3afe3be0,0x3afa55a9,0x3af7a096,0x3af836af,0x3afe0dc6,0x3b034145,0x3ae5fe3b,0x3aeba6c7,0x3affa5e2,0x3b014e83,0x3aef6ed2,0x3ae87494,0x3ae58c8f,0x3ad56a7a, +0x3ac1aa0b,0x3aa13d05,0x3a8c3e94,0x3a96f43c,0x3a7b8bd2,0x3b4bdde8,0xba954d9c,0xba2f9369,0xba2bf4fa,0xba1ed46b,0xba1b30cd,0xba528396,0xba1b3e7c,0xba17a161,0xba0bb233,0xba355c41,0xba3d9630,0xba2f28b4,0xba1a5cde,0xba3f6bb1,0xba75acfd,0xba8fba53,0xba902a7f,0xba5e5ad1,0xba550a26, +0xba49b736,0xba5936bd,0xba411cfd,0xba2b3482,0xb9f5a09b,0xba758470,0xba82feb1,0xba187fff,0xba5d9ed3,0xba4dea32,0xba17075b,0xba1e2d40,0xba103c0b,0xba05cd78,0xba2871f7,0xba406407,0xba328959,0xba2268f5,0xb9fb4a21,0xb9824638,0xb9a8984c,0xb9cbe674,0xba820c01,0x386da2e4,0x39201e56, +0x393d7d05,0xba243cbc,0xba82d467,0xba8c6857,0xb9f6d3db,0xb9ec9b4e,0xba911503,0xbaef54e7,0xbb062a7c,0xba8eaa3c,0xba80ce36,0xba7157d6,0xbaadaaee,0xba94eb0b,0xba99d138,0xba50c6f5,0xbabaf1d2,0xbaa40a2d,0xba1ea504,0xbada0e50,0xbaf1b06f,0xba84d98a,0xba3ce973,0xb9b28fce,0xb9ba359b, +0xba3553aa,0xba68f6b5,0xba8579ea,0xba713ec3,0xb9ec2a66,0xb98a955c,0xb7e44ee6,0xb87901d6,0xba988840,0x3957832b,0x3a06652b,0x3a7e02ef,0xba19b0cb,0xba612993,0xba8639cc,0x395d256a,0xb9d6eecd,0xbaf7bdb5,0xbb51dea1,0xbb4e3671,0xbad53060,0xbab47599,0xba874865,0xbad1c185,0xba909981, +0xba929263,0xb9447151,0xbaf6ab15,0xbaee273e,0xb9999442,0xbab02472,0xba3e1e95,0xb9dd91b3,0xb93135ea,0xb99253b6,0x38d76331,0xb9ecaea9,0xba4e1825,0xba68036b,0xba24d7b5,0x388ae85e,0x3a69675b,0x3a0b9b61,0x3a22de13,0xbaad9bcc,0x3ac06e0c,0x3b19fda3,0x3b462e07,0xb8b95391,0xba950dc2, +0xbb043249,0x3a0e7114,0x3a1151b1,0xbaa6b410,0xbb851c50,0xbb8d213c,0xbac562c1,0xba9e77b7,0xba8c80c5,0xbb0980d9,0xbad4bd33,0xbad72061,0xba47127c,0xbad90782,0xb9c95726,0x398fcd97,0x3912bfa8,0x39aad2fb,0x38f8c832,0x38a643ea,0xb75fdac7,0x38756e03,0xb8b02892,0xb9b96e9c,0xba8a5418, +0xba82cf81,0xba01a729,0xb943ef63,0x399805f7,0xb84c52d8,0xbb07726b,0x3a18b832,0x3a8a7d3d,0x3b4187f5,0xb7aa9276,0xba855098,0xba9e804b,0x3ab09210,0xb9264d5a,0xbb81105b,0xbbd646e8,0xbbc375d3,0xbb32c791,0xbae39c36,0xbaa915ab,0xbb0fb45f,0xbabee847,0xba85f88a,0xb9849c46,0xb7cf7c68, +0x39ca6287,0xb92dfb2e,0xb7d1d18a,0xb91d8b48,0xb85c66eb,0xb80a0e19,0x3787fc9b,0xb79e7864,0x3850703d,0x3864ecdc,0xba205ae1,0xb98b9f5f,0x3b4e5478,0x3b79207e,0x3bb80753,0x3bfe8bcd,0x3c341a2c,0x3bb3fd0d,0x3b892b8c,0x3b825d5e,0x3ad108cc,0x39b6d9b7,0x38d99a7d,0x3ace9e41,0x3bd57e14, +0x3c3f820f,0x3c4b5aaa,0x3c02c2ff,0x3b28dcde,0xbac7efcc,0xbb62b400,0xbb38b304,0xbb205b04,0xb70d0856,0x3a810fca,0xb95f0e96,0xb8dbfb61,0x3799b843,0x38373571,0x38601eb2,0x3816f0ae,0x3747b516,0xb5d7e7d3,0x360ffe16,0xb7cb8a11,0xb7f5c87c,0x39975545,0x3a46e3e4,0x3a0d5354,0x39948788, +0x3af1191d,0x3ab75ffe,0x3a738dc8,0xbb930146,0xbbec0193,0xbb58cc9b,0xba99ee45,0x3b341c65,0x3bf7ef91,0x3b1bd07a,0xbb1b65be,0xbbf28f27,0xbbc75602,0xbb4850b4,0xba7905af,0xb8c4c034,0xb9ae52cb,0xbadce465,0xb9f5133a,0xb82fccd7,0xb93741ef,0xb70f2d96,0x38e026b6,0xb7a7184e,0xb7fdc725, +0xb7bebddc,0xb7904531,0xb620aee3,0x36a79ac4,0xb78027ee,0x389b60ce,0xb8ee9b4e,0x39688194,0x3a92ffab,0x3baa3d17,0x3c221ad4,0x3bc89fce,0x3b07111a,0xbb152e32,0x3b25c150,0x3ba88c4d,0x3b960ddf,0x3b874249,0x3a8609cc,0xbb377289,0xbab01c9f,0x3a84c7d1,0x3b8dc703,0x3b6d3e2f,0x3ac9d38a, +0x3afe010a,0x3a791a0a,0x3aae56d7,0x3a05ccb0,0x39d2bbc5,0x390ff9ca,0x3835b6f6,0x3744c50b,0xb805de52,0x369bed66,0x375c163d,0x376e3120,0xb3d39ea5,0x36ec1bbd,0xb7c75fba,0x3877365c,0xb913ecf3,0x3997c974,0xba26e3d7,0x3a68294a,0x3b73d60d,0xbb83a094,0xba0eb9dc,0xba665a5d,0xbbcf74fc, +0x3b0082dd,0x3b9580d4,0x3ab971dc,0x3be548f6,0x3b7623ee,0xbb809bd5,0xbaf24fa8,0x39955d7f,0x3bca355c,0x3b2a7b40,0x3abb7077,0xb87065ad,0x394629a1,0x39c2e2ed,0x3a4c6a57,0x3905d8b3,0xb990d3f2,0x38d25b8c,0xb8585187,0x37ceb0aa,0xb648f7ec,0xb71445a8,0x372d0d63,0xb6d8af30,0x38077571, +0xb83dfed0,0x38f962d5,0xb9886611,0x39bc29bc,0xba13a06b,0x3945fdae,0xbbe60e47,0xbcc4624d,0xbbfcc3bd,0xbaf38c9f,0xbb670282,0xbbc230a7,0xbc0c689e,0xbc00995d,0x3b3a28f3,0x3bec0e96,0x3b6996d4,0x39df1add,0xbb83e070,0xbbaecff8,0xbb9b9ec1,0xbb6a7d68,0xbb298367,0xbae69a05,0xbabf0c4e, +0xba6221a2,0xb996b591,0xba332834,0xb907eb1a,0x38cf67fc,0xb789078c,0x36dec423,0xb6329d9b,0xb78ea325,0xb7963ebd,0xb7b537eb,0xb5f4697c,0xb7d0b89c,0x38b9f075,0x3867ce58,0xba4ce05f,0xb9ea45e1,0x3bacb73c,0x3bef8681,0xbac6485b,0xbba9463e,0xbb9ab5e8,0xbb72c237,0xbaacd3a0,0xb9297c82, +0xbb3587db,0xbb9d943b,0xbb90724d,0xbb563df5,0xba7152d6,0x3a232442,0x3a8b958b,0x3ab3826b,0x3b288a92,0x3b6540eb,0x3b8304cb,0x3b811adf,0x3b4c09b1,0x3af1b0ec,0x3840bd04,0xb91026ac,0x37483785,0xb7569a7d,0x3785b236,0x37fcdbdc,0x38879aa5,0x37d69889,0x382f1d07,0xb8243957,0x386e53c0, +0xba0cdf12,0x3b046f88,0x3b172891,0x3b1986f1,0x3aed4152,0x3b12a44a,0x3b485628,0x3ac15653,0x39f0c4e6,0xba995026,0xbaff8a50,0xbb16444f,0xbb0ea7cf,0xbb0651ef,0xbb412bf7,0xbb511bf0,0xbb895329,0xbb3c36b7,0xbaf40860,0xba93ea7e,0xb9b81318,0x398f2892,0x3a59ab02,0x3aa99649,0x3a8c352c, +0x3a14e2fd,0x389cb12a,0x380f12cc,0x364b8bc0,0xb806275e,0xb89d7879,0xb8dfd1fe,0xb8c1f3ac,0xb862f35a,0x37c111ee,0x38099b18,0x39cc5cbd,0x3a923dec,0x3aba37fb,0x39f21c9b,0x3a85a9ec,0x3a9599bd,0x3988efb3,0x39ef8827,0xb7dc66e2,0xb9bfaadf,0xbab5a34e,0xbaf7bb01,0xbb1d6a22,0xbb1616b1, +0xbab56c77,0xba55c8d0,0xba0c7ec9,0xb9728b74,0xb8d1afaf,0x38064c35,0x39a320f5,0x3a3ca654,0x3a801ecd,0x3a51eb08,0x3a0c37be,0x3934a6b7,0xb78718df,0xb91ac634,0x38603584,0x3894ec8a,0x3967bca2,0x395a0523,0x3974a157,0x3922cbd2,0x3873e016,0xb91f94e4,0xba011914,0xba690f37,0xb9ae338f, +0xbb42901d,0xbb48921d,0xbb2fa4d7,0xbb0ae510,0xbb040131,0xbaeaf3c1,0xbab78925,0xba5744fa,0xb903d7ac,0x39ce08e4,0x3a3744b2,0x3a1223cc,0x3a67a8c0,0x3aaee3b5,0x3a9cc92f,0x3a9835fd,0x3a86cee9,0x3a99a6a8,0x3a731a24,0x3ab19642,0x3a6e156c,0x3a4a3008,0x39c3c3c1,0x38100b15,0xb9923a75, +0xb9d14d10,0xba08bb13,0xba11d426,0xba0fb52c,0xba41cfa1,0xba6e91b8,0xba81d511,0xbab3d803,0xbaf813fd,0xbb051d10,0xbb1def8c,0xb99ed5a8,0xba061774,0xb99a1ad6,0xb7a63b9a,0x3a03de9e,0x3a09b64d,0x3a597565,0x3a40a2d4,0x3a4b8596,0x3a7a15ed,0x3aaa504c,0x3aee7453,0x3b0e4b17,0x3b25844f, +0x3b22b430,0x3b213733,0x3b2c840b,0x3b2c9c87,0x3b2d5ccf,0x3b2c7a9d,0x3b28d819,0x3b1697c9,0x3b0b6b0b,0x3af7bf44,0x3adf5f6d,0x3aac9fbd,0x3a978d70,0x3a2b596f,0x39fe5c8d,0x396bebae,0xb882e5ac,0xb9225aa3,0xb9c58962,0xb9068917,0xb98767f5,0xba144f16,0x3a13d577,0x39874e35,0x39cde3f2, +0x3a12001b,0x3a330f9c,0x3a3e63e7,0x3a6af356,0x3a91c2fc,0x3ab23776,0x3ac3c036,0x3aca1595,0x3aca8571,0x3accf9f6,0x3ada9d03,0x3ad1b804,0x3ad16bbf,0x3acd5294,0x3ac3b716,0x3ac1e1d7,0x3ac063cc,0x3ac6d6d6,0x3ad093b1,0x3adeb74d,0x3ab16dc7,0x3aba28c2,0x3ad065ce,0x3ad530db,0x3ac8bae0, +0x3ac2b768,0x3abbbe4a,0x3aa8d2f4,0x3a97a4cc,0x3a708ad0,0x3a4a55eb,0x3a70b491,0x3a39e3c5,0x3b255713,0xba997399,0xba3ee860,0xba34c48d,0xba25571c,0xba1f4ba0,0xba54a02c,0xba20b91f,0xba18f3f8,0xb9f93e4f,0xba307af4,0xba42dbd6,0xba50b520,0xba1af941,0xba36866e,0xba6ee59e,0xba8db6ee, +0xba924d8d,0xba7610e9,0xba61bf4c,0xba520777,0xba5a1b2a,0xba4a0726,0xba37c40b,0xba17541c,0xba765d26,0xba81a800,0xba1ea8e4,0xba5bc440,0xba5272d8,0xba1bcd63,0xba26792e,0xba176d97,0xba00205a,0xba3acb3f,0xba4dbd58,0xba421ab0,0xba395de1,0xba25d9b6,0xb9d77da0,0xb9c9a75e,0xb9fbb91c, +0xba937bbe,0xb9452d0d,0x376191cc,0x39ad4b35,0xba0e6b84,0xba81e1bf,0xbab43151,0xba041771,0xb9d30168,0xba90844d,0xbaec7a6a,0xbb087f62,0xbaad1489,0xba905788,0xba81877c,0xbaaf9f5c,0xba9d26b1,0xba9e1b3c,0xba636b54,0xbaab7be5,0xba9acb8a,0xba3eb735,0xbad4f775,0xbae05209,0xba650338, +0xba33b8c5,0xb9aacb99,0xb91c9e5e,0xba3b1b33,0xba746ff8,0xba837c96,0xba77f0be,0xba23414c,0xba0615db,0xb8dcf73c,0xb923da7c,0xbaa3fe03,0x36d00b50,0x39ae98c5,0x3aa72e6a,0xb9f40d1f,0xba5f4936,0xbad683b0,0x398dbccf,0xb94748e2,0xbae501de,0xbb48b95c,0xbb51ab63,0xbb09bf78,0xbad19c67, +0xba966ca3,0xbad89cd6,0xba94d0e1,0xba83b942,0xb99a5b05,0xbada6140,0xbab9f39d,0xb90e5830,0xba3efe32,0xb98415e0,0xb921ba14,0xb73cb0e1,0xb9161379,0x397d7b0d,0xb9d16a9b,0xba60f97d,0xba540776,0xba30a6b7,0xb90a619f,0x39ef0c09,0x39f0729c,0x39c3fe34,0xbad816d8,0x3a63e6b2,0x3af87dd9, +0x3b5e2744,0x3932257f,0xba89c050,0xbb412bc8,0x3a05a3e2,0x3a40ccad,0xba9cef1e,0xbb810860,0xbb8ffdc1,0xbb0e130d,0xbaccf74c,0xba9dbeb0,0xbb0ff80d,0xbad4a8cd,0xbac50bf5,0xba5ae725,0xba67c01b,0x3944e3c5,0x396cb070,0x38f0f361,0x395f47a3,0x38b8814a,0x388171f5,0xb6202622,0x365a6f17, +0x37d8e5ea,0xb98c7309,0xba703a0e,0xba6bceea,0xba3ba822,0xba2706a7,0x3973be06,0xb8ea15f0,0xbb02fa7f,0x391b673d,0x3a60b9f3,0x3b5bd4cc,0x39770e46,0xba92e7f5,0xbb170353,0x3ab2c302,0x39d8a8de,0xbb623466,0xbbca9b40,0xbbc828a5,0xbb72f0fe,0xbb13b227,0xbacf93be,0xbb146068,0xbac08980, +0xba4e0ac1,0xb85c58ec,0x38e3d874,0x38e1b0df,0xb942c88c,0xb7a09f94,0xb8fffa3e,0xb7d83778,0xb80f4029,0x36aec58a,0xb60eaf5c,0xb60ff8ec,0x394681cb,0xb9d7d765,0xb9872be8,0x3b2eba3a,0x3b6dc052,0x3b8fc2b8,0x3bcdda6e,0x3c25cd21,0x3bbc3984,0x3b9536b5,0x3b6d9de4,0x3b1ba0b1,0x3acf4286, +0x3a9e1c9a,0x3aeb0bb2,0x3bbf2583,0x3c253d98,0x3c4bcfc9,0x3c1226e4,0x3b75c646,0xb85a39bf,0xbb147132,0xbb0e0b5d,0xbadca5a3,0x39d158eb,0x39e6ae71,0xb9472382,0x37011d97,0x3846de8a,0x3806f087,0x3841715e,0x379b8caa,0x378a2aa8,0xb7078172,0x370c4b78,0xb813289b,0xb76f0e4d,0x3853df27, +0x39a96262,0x3a079210,0xb8a4b7fd,0x3b1ac738,0x3b2985dd,0x3b13b009,0xbb404548,0xbbb77dfb,0xbb59d997,0xba9b9f74,0x3b0e8764,0x3bcac984,0x3b42ad73,0xba7ddb50,0xbbca2ec0,0xbbc6c540,0xbb7a0014,0xbb0891a4,0xba4c3df4,0xb9fb9e01,0xba8d468c,0x3855bf0c,0x38af0c97,0xb942fd75,0x388a431d, +0x36b33e16,0xb7cc3df4,0xb7faa42a,0xb77679ab,0xb756779f,0x35d84e05,0xb68a5168,0x3752cfa7,0xb6ae7bd4,0x380ad569,0xb8e2cd8d,0x3a9039ea,0x3baf9187,0x3c1d7f7d,0x3bb54aa2,0x3ad21f52,0xbb43e545,0x3ae43627,0x3b8afc12,0x3b7c2dd3,0x3b867eec,0x3ab6f0a3,0xbb4c5c29,0xbaf8b6bd,0x3850160e, +0x3b50b382,0x3b69dfdf,0x3ae8de3f,0x3b0e17ff,0x3a9fbcd5,0x3acb57f7,0x3a2475b9,0x39d4583d,0x3882ebc9,0x3880e94e,0xb659c900,0xb7742458,0x3763bb4e,0x36e9992b,0x3709c2c3,0xb5ca7bd4,0x362aaa93,0xb795b6c4,0x380146b2,0xb8b89f7e,0x39407353,0xb9a697fa,0x3a3d69c8,0x3b3c1e91,0xbb8c918d, +0xba46af4c,0xba47e9cf,0xbbc4b4b2,0x3ac072be,0x3b7a0069,0x39c423f1,0x3bc54101,0x3b5bfc48,0xbb2a5b6e,0xbb297522,0xba74b388,0x3b97076a,0x3b2dd6c4,0x3b07e748,0x397e9a49,0x39ecdcc1,0x3963b24c,0x388f9a75,0xb9d5060d,0xb9b51800,0x39097319,0xb8b84126,0x38399389,0xb7842756,0x370bfa84, +0x36d3792a,0x36a6006f,0x3792a13a,0xb6cc716f,0x384ae9c3,0xb89f08f4,0x3885d37b,0xb90ea0db,0x391e2ebd,0xbbe11bf0,0xbcb8b252,0xbbc8c374,0xb9a64e85,0xbacc304f,0xbb63330b,0xbbdf4d4a,0xbc1311c9,0x3a86e13a,0x3bbeba89,0x3ba8fbd2,0x3a8c862f,0xbb61f656,0xbb9c3714,0xbb9c4724,0xbb7f0af5, +0xbb4c3829,0xbb1a34ff,0xbb0a7157,0xbacd00fd,0xba4a2c4b,0xba32e695,0x38eb1f84,0x36e20f5f,0x3692fbd3,0xb7ac7dd5,0xb7819be6,0xb7dac0a7,0xb768df86,0xb80eb6f6,0xb6dbfa52,0xb83cca76,0x381ac235,0x3828644c,0x3812970c,0x369858c8,0x3a96a867,0x3af953b8,0xbaef4555,0xbb851c28,0xbb9b22c7, +0xbb59fbfd,0xba80497d,0x3a0ce8da,0xbaf29e83,0xbb7c71b7,0xbb87f014,0xbb3c2154,0xba897aa9,0x3929cc72,0x3a5816ed,0x3a94ea09,0x3b2099da,0x3b51eecb,0x3b665fa7,0x3b5bb965,0x3b1c19c4,0x3a985213,0xb95ea1ba,0xb7b8c5cc,0xb7b94379,0x383d934e,0x3846ead4,0x38123e63,0x38a27e0b,0x374d8043, +0x38db1402,0xb897904a,0x3968086b,0xba27a54a,0x3a635248,0x388a6d91,0x3b0fb25d,0x3adadaa8,0x3b131347,0x3b4f8d45,0x3ad77b82,0x3a3aa6f1,0xba76e20c,0xbade2ef4,0xbb15c8c5,0xbb0d751b,0xbaecde8f,0xbb319f93,0xbb368a4a,0xbb7056cc,0xbb1c540b,0xbabce156,0xba728f44,0xb862adf3,0x3a181f6d, +0x3a9a33d5,0x3abc7325,0x3a825e54,0x39a5d6d3,0x38273496,0x382637e8,0xb8af4e35,0xb8fccbab,0xb8a9d70f,0xb8e3dfe3,0xb90221ea,0xb87304ad,0xb8fb87d0,0x37fc3c1f,0x38da5bbf,0x3a88b916,0x3aac131a,0x3a6c0bdb,0x3ab3b430,0x3ab1ae89,0x39fce1f9,0x39f4b824,0x38c422d6,0xb94afcc6,0xba865eaf, +0xbad703fc,0xbb1a0e47,0xbb220b00,0xbae25d9c,0xbaa8e75a,0xba868331,0xba0e7498,0xb9ae5a23,0xb92a26c3,0x392d92a2,0x3a2ac359,0x3a79662f,0x3a2dc138,0x39a9da4d,0xb64afc90,0xb8b9eab9,0xb8001caa,0x393b3383,0x3951f096,0x39671beb,0x396c65d0,0x396f5c35,0x395572b3,0x39612543,0x385a562b, +0xb92f18e2,0xba05f911,0xb81fa67f,0xbb27be31,0xbb271a52,0xbb10fb28,0xbade9d6e,0xbacb37e5,0xbabecf1f,0xba9e6524,0xba498ea3,0xb96df596,0x3979d290,0x39ff5cde,0x39402eaf,0x39a07e8e,0x3a103d89,0x39f74065,0x39ed29fd,0x3a03b315,0x3a36d4e5,0x39d53e73,0x3a81b22c,0x3a077b34,0x39bf7e37, +0x374b4f92,0xb99823aa,0xba0100bd,0xb9d2132f,0xb9df98ea,0xb9cf5182,0xb9c81d33,0xb9f2cf42,0xba15ec58,0xba2fed10,0xba8ace2a,0xbacfa460,0xbad49f50,0xbafd22dd,0xba281c58,0xba292688,0xba045e58,0xb9a44a4c,0x38bbc926,0x39094219,0x39e1701a,0x39c294e6,0x39cc32d4,0x3a02d4f6,0x3a4e62b4, +0x3aa92a75,0x3adf3a0b,0x3b05d56a,0x3b0bb162,0x3b0c8a47,0x3b14dd76,0x3b193a83,0x3b1f99eb,0x3b1d0852,0x3b160ac7,0x3af4578b,0x3ad12271,0x3aab1d22,0x3a887e40,0x3a0b38a0,0x39c1e8f8,0xb817d1d4,0xb90494b4,0xb9d2b582,0xba1b1326,0xba37c497,0xba503706,0xba06906e,0xba3bba18,0xba6469dc, +0x398bb341,0x359de188,0x38d7a049,0x398e0dec,0x39cc2050,0x39daf292,0x3a0d4feb,0x3a38ce13,0x3a72bd79,0x3a8aa353,0x3a9079f9,0x3a8dbaab,0x3a8a455a,0x3a91bed4,0x3a88cfb3,0x3a89ef72,0x3a872e9b,0x3a807396,0x3a80999a,0x3a8125c2,0x3a8b7320,0x3a99241d,0x3aac3704,0x3a6e818d,0x3a835a48, +0x3a9e2482,0x3aa416e1,0x3a960e6c,0x3a8e431e,0x3a88c64e,0x3a71b42c,0x3a54e993,0x3a15bed3,0x39e0436c,0x3a2176f3,0x39d5d70c,0x3ae78425,0xba8c7262,0xba2c3bcf,0xba2f41cb,0xba186a6d,0xba0f9398,0xba3d89f0,0xba133885,0xba0911c8,0xb9c3442e,0xba1c769d,0xba36adba,0xba5a7e29,0xba109986, +0xba22a12b,0xba58904b,0xba80fb6c,0xba888f36,0xba782396,0xba5b57b0,0xba47d36d,0xba491930,0xba3201af,0xba24a1cc,0xba21508a,0xba55e35b,0xba5a724c,0xba17e7c5,0xba50f6a3,0xba4a4140,0xba14d1f1,0xba1f5ebd,0xba0c3e90,0xb9d03687,0xba285537,0xba3862d3,0xba3a81ba,0xba2b8792,0xba1d9dba, +0xb9d75f65,0xb9aacee3,0xb9d68240,0xba83f79a,0xb99747ee,0xb845b334,0x39f92857,0xb9e219e8,0xba72168a,0xbac6d89c,0xba0af346,0xb9c005bc,0xba85e97a,0xbad32a72,0xbafc30e5,0xbab9e74c,0xba92c324,0xba7e3a9c,0xbaa1aa43,0xba8e4701,0xba8f8e76,0xba53c2d4,0xba927977,0xba918ba7,0xba41b0d2, +0xbab1d5a0,0xbab51d51,0xba2775db,0xba0a0053,0xb97eed7d,0x383c91b2,0xba2eb4c0,0xba5f8c78,0xba60bf05,0xba602727,0xba189857,0xba1e6f90,0xb89389b2,0xb8b7619d,0xba880778,0xb8686fd1,0x3971b575,0x3ac24390,0xb9b2b10a,0xba565d6d,0xbb059f8d,0x393e96aa,0xb8dbedb2,0xbace55b4,0xbb33a2f2, +0xbb44b2ab,0xbb1dc307,0xbadf7fdc,0xba9ea32b,0xbaca66bc,0xba80c188,0xba4acdfe,0xb9d4598e,0xbaac05a7,0xba39cf14,0x379eb056,0xb9172bc5,0x392808b3,0x38a8a527,0x389dd1db,0xb835d0fb,0x3980a995,0xb955409b,0xba440ca9,0xba2e497f,0xba0fc3c2,0xb85164f9,0x3980183a,0x3a0ac41b,0x39d3b6cb, +0xbab876b0,0x3a07005a,0x3ac2f5a1,0x3b676ee9,0x39ab2f8c,0xba82128f,0xbb6608b5,0x398533b7,0x3a2d6c0a,0xba95124f,0xbb6442b8,0xbb85a65d,0xbb2b7aca,0xbaeae2c6,0xbaa678ce,0xbb0821d6,0xbab88e9a,0xbaa96985,0xba3ac92a,0xb8e8fbfd,0x397c7bd7,0x38c04150,0x37a8326a,0xb7217965,0xb85cfa9e, +0xb72159f9,0xb75e06c3,0xb884216c,0x387a840a,0xb83f7055,0xba268015,0xba440708,0xba36f5e1,0xba53b532,0x3970613e,0x389d117e,0xbac2540c,0xb7b95fe0,0x3a4645df,0x3b666753,0x39cd6fd1,0xba9ca405,0xbb4a4952,0x3a86c170,0x3a1c8c25,0xbb450c63,0xbbb3cbfe,0xbbbe8baa,0xbb909791,0xbb2d4cf9, +0xbaefa507,0xbb0d8f54,0xbaa67207,0xba02787f,0x395adc42,0xb4e7d52e,0xb8920f41,0xb8a00bfc,0x3717bd8f,0xb696aa8b,0x37c6b94c,0x3704bbd0,0x36ff1845,0x382bafdc,0xb8802677,0x39088780,0xb8a08643,0xb91645ea,0x3b19bf55,0x3b5e9713,0x3b370c14,0x3b904cff,0x3c0919f2,0x3ba81339,0x3b87fd74, +0x3b32b32b,0x3b2d5198,0x3b127ba5,0x3abaa072,0x3ab4a258,0x3b8e02f7,0x3bfce281,0x3c371d5c,0x3c0f628d,0x3b8e16d8,0x3a90a7eb,0xba98791d,0xbac4223e,0xba6a8a87,0x39ec7ad3,0x3683b573,0xb8627c3a,0x388dacb3,0x37cd8dbe,0x3612a4f9,0xb5102fc2,0xb7370ec2,0xb5f0784a,0xb747f2df,0xb726206e, +0x36d192ed,0xb8805305,0x3831820e,0x38a3ba3c,0x39dd4fe4,0xba3be1c9,0x3ae93e8f,0x3b33466f,0x3b357945,0xbad8e2f4,0xbb8451b8,0xbb497189,0xba86a402,0x3ad80fe7,0x3b9b698b,0x3b47072e,0xb899b441,0xbba4b1d2,0xbbc6c05c,0xbb9a3d9d,0xbb5b85b6,0xbadcd451,0xba716a87,0xba2b8162,0x39a91ecb, +0x38b116c3,0xb912a173,0x38885bf9,0xb86c65f8,0xb61dd374,0xb70249b8,0x369fda05,0x3622f3f9,0x36bff3f5,0xb661f38f,0x37e5a463,0xb822694a,0x3900c6d4,0xb9a7b715,0x3a568e2c,0x3b994f75,0x3c064a3f,0x3b9784e0,0x3aa5ce63,0xbb34a873,0x3a994347,0x3b58a1c5,0x3b52041e,0x3b83c932,0x3affe2b2, +0xbb260f05,0xbae0e417,0xb998a839,0x3b1ae768,0x3b6a6667,0x3b03df56,0x3b21e4f1,0x3ab133e9,0x3ad10878,0x3a1bf41c,0x397847d9,0x378b850b,0x37ed742d,0xb4a64a3b,0x3751cbbd,0x369473d1,0xb51dfa4d,0xb5bfc256,0xb6d14617,0x368f51d8,0xb78ebe94,0x37c78a09,0xb88fb20e,0x38f345c7,0xb92a1bcf, +0x39926ce6,0x3ac657b5,0xbb84f0f9,0xba1633fe,0xb9ade5bf,0xbb920971,0x3aa1cb2a,0x3b51eb39,0x38215332,0x3ba1ef07,0x3b49bcd2,0xba5fe873,0xbb0fd453,0xba8d26d3,0x3b6a0dea,0x3b464b3c,0x3b42fe0a,0x3a8046da,0x3a73d46c,0x39acbfef,0xb9e82798,0xba490228,0xb95fe0c5,0x38bd7417,0xb88c89e6, +0x3824ac8e,0xb789aa19,0x37574028,0xb5d29372,0x364c68c0,0x36a090f7,0x35e305ba,0x37c1a271,0xb7667f58,0x37adbf9d,0xb89ef16f,0x380bef11,0xbbcf37dc,0xbc96eae0,0xbb970523,0x39cbf50d,0x39fb2a91,0xbaa5a6fb,0xbb9b6ad8,0xbc0d2f40,0xba135f4a,0x3b870c33,0x3bcdf6ab,0x3af552b8,0xbb12b3ed, +0xbb727112,0xbb86f075,0xbb6b0885,0xbb4e672f,0xbb1e02dd,0xbb12b362,0xbaf18fd2,0xba82b97c,0xb9d0d7bf,0x392fe957,0xb87056b0,0x378f1ffa,0xb7dbcfeb,0xb6c1f3bf,0xb711ca1f,0x35e5755d,0xb7446a40,0xb64e6c4b,0xb81a651f,0x37022831,0xb76ae181,0x385971d0,0x398b0a8f,0xbae05549,0xbb46f3ef, +0xba63825f,0xbad761c6,0xbb59f6fd,0xbb0abe12,0xb9cddcc0,0x3a469aa3,0xba9feacd,0xbb4c70c7,0xbb777b73,0xbb25bf01,0xba8cb2e5,0xb9397c92,0x3a469238,0x3a8cd138,0x3b1bb1af,0x3b3dcecd,0x3b485c9e,0x3b3db0f2,0x3adf17d4,0x3a1a265d,0xb96bfc66,0x38223f28,0xb70d1ad5,0x3844def3,0x37b412cb, +0x36da8a4e,0x378c3ea0,0xb72e5899,0x3877da84,0xb78b30f8,0x3914f208,0xb98071c8,0x39939b17,0xba898b95,0x3af8bc04,0x3adbc6df,0x3b087600,0x3b3e5f24,0x3adadfac,0x3a5300b2,0xba3ca595,0xbab00884,0xbb0b5f2c,0xbb0622c0,0xbacc5a18,0xbb1d6eb0,0xbb18f1eb,0xbb44afb2,0xbaeef8e5,0xba7cdcff, +0xba2648f2,0x39b23a78,0x3a7bb379,0x3ac2b5d3,0x3acf00de,0x3a6b0ccb,0x38e524ba,0x37bcc893,0xb7df1fd2,0xb87d968c,0xb8868e56,0xb779bc64,0xb6e40318,0xb81f46cd,0xb7388c2d,0xb907b869,0x37827fd9,0xb9206d14,0x3a1992b8,0x3a99cfa1,0x3a98e3c6,0x3ac8ca2e,0x3abb2c16,0x3a2255c9,0x39bf4d79, +0x38e78bab,0xb8c902a9,0xba34a4de,0xbaafecf4,0xbb0d6925,0xbb21d50a,0xbafac539,0xbad2645f,0xbab18d35,0xba49e4db,0xba0096aa,0xb9a20952,0x38475eea,0x3a0e9a3e,0x3a635a06,0x3a07bcee,0x3929bea3,0xb8471bcc,0xb84dcc10,0x3899d776,0x39076137,0x38c59ca5,0x385a14c2,0x372d665f,0x3861376a, +0x38d1952e,0x39219231,0x391b0e10,0x3650d2ee,0xb89087c4,0x3964f94b,0xbb04eaf8,0xbaf6acbd,0xbad4bf18,0xbaa2eea9,0xba9196aa,0xba8f5877,0xba816ca5,0xba39a2d1,0xb99a5109,0x39011135,0x39b0945d,0xb8c487e2,0xb928ed04,0xb90ce264,0xb92f95b6,0xb946e3f9,0xb72eeca4,0x395c348c,0xb91ae83e, +0x3a0f1679,0x39273e90,0x3825a35d,0xb9620ff8,0xb9e73159,0xb9accb2f,0xb96f2b19,0xb9505ea9,0xb851f54e,0xb767e70d,0xb86987f5,0xb979d417,0xb961354f,0xba13a3c7,0xba926080,0xba9769a8,0xbab5223e,0xba4abcbb,0xba24ad5e,0xba199e84,0xb9f0a46d,0xb9430a14,0xb9218102,0x38e6f672,0x38a5bb64, +0x3845dc54,0x386914ad,0x3980c77e,0x3a336c6d,0x3a91b8e8,0x3ab7f5ef,0x3ad39cc3,0x3adba131,0x3ae719e3,0x3af8c321,0x3b087c37,0x3b04a666,0x3af8070f,0x3ab39748,0x3a8b69e7,0x3a429e61,0x39bcfddf,0xb80b6aee,0xb8f6485c,0xb9f3aaaa,0xb9fee31f,0xba45b42f,0xba4a1130,0xba85a13e,0xba8afdea, +0xba43eaa2,0xba774f32,0xba75dc9f,0xb72b849f,0xb96130ed,0xb91a6c55,0x35d9e7a4,0x38d07b07,0x38eae8b2,0x393dae79,0x3997671a,0x39fa25d7,0x3a1f10f6,0x3a2a74a2,0x3a1fb193,0x3a0da534,0x3a0ecc8c,0x39fcf2e8,0x3a022f6d,0x39fdb251,0x39edadc8,0x39f4ea25,0x39fbe31a,0x3a1e29f1,0x3a3f001a, +0x3a6627d2,0x3a03a572,0x3a234308,0x3a445e45,0x3a447634,0x3a2efe7b,0x3a1bb25b,0x3a0fc489,0x39f2c75e,0x39d9d14e,0x398707a3,0x38f96921,0x3992ccdb,0x38c803a7,0x3a8207c1,0xba89db2a,0xba2fbdc9,0xba3992ed,0xba1c8ae2,0xba12de34,0xba3685df,0xba17ea82,0xba0e0a59,0xb9c42492,0xba1c553d, +0xba38c934,0xba662864,0xba14b867,0xba1dc2c3,0xba4cb938,0xba6e744c,0xba80b245,0xba7c1caa,0xba5caf08,0xba479bc5,0xba4169b1,0xba295ccf,0xba1f6505,0xba207e9d,0xba3e4570,0xba411bc0,0xba147bcf,0xba453b17,0xba3ea43d,0xba0a1bcd,0xba11ca50,0xb9fc2499,0xb9a50b99,0xba1d4229,0xba2fd9c6, +0xba2b1534,0xba25cae4,0xba14a599,0xba0dc652,0xb9e0c677,0xba035bde,0xba8329a4,0xba08dbeb,0xb990346a,0x39b8e8b0,0xba03b552,0xba80867c,0xbad601f6,0xba2e47e3,0xb9ed62d3,0xba824a70,0xbab855c0,0xbae19aab,0xbac09b93,0xba9731f9,0xba802958,0xba9211e0,0xba7b0fdf,0xba744325,0xba410043, +0xba859efb,0xba78a5f7,0xba2735a3,0xba826df6,0xba7568b1,0xb9d2e525,0xb9d269a6,0xb91c25ec,0x39058e8e,0xba16bd15,0xba546910,0xba3f31ff,0xba4c88cb,0xba1619d9,0xba5e4804,0xb97846a1,0xb983a6f6,0xba801b80,0xb99c1a59,0xb89510b0,0x3aa89968,0xb9eb5078,0xba736aa6,0xbb165efa,0xb871721e, +0xb930e5ae,0xbab7fd96,0xbb1757fc,0xbb2cb5d0,0xbb247982,0xbae4e66b,0xbaa39bdc,0xbab58a75,0xba53fd42,0xba14db01,0xba0f2ff4,0xba4915e7,0xb90d8b7e,0x390a328a,0x394a04c2,0x3936bfed,0x38f30818,0x38a66d09,0xb74bf7e4,0x388ea975,0xb806c1db,0xba0971ab,0xba1738f4,0xba028ce7,0xb8a9c7d5, +0xb940191d,0x395a559c,0x3897d6a7,0xbab5155a,0xb8a1d2b3,0x3a43a6d1,0x3b469a1e,0x386f62be,0xba9d9f11,0xbb7a1d2a,0xb970d128,0x39b984e2,0xba941a2f,0xbb3a9699,0xbb6456d7,0xbb363c3a,0xbafa96c8,0xbaa90208,0xbaea3fe3,0xba920a51,0xba7a2cae,0xb9ad1171,0x398abb1f,0x38d57b30,0xb86b29e7, +0xb8208ca3,0xb83a55f8,0xb82416b8,0xb7965fe8,0xb47f22d4,0xb7d63e57,0x381042d1,0x38afb036,0xb99c8006,0xba291d1f,0xba3a45d5,0xba97528a,0xb906681a,0xb90dd891,0xbaa02e91,0xb9d5e546,0x39b8a57c,0x3b453ccf,0x38e07d8b,0xbac0800a,0xbb6b477f,0x3a0077d8,0x3a099ba4,0xbb229960,0xbb922afb, +0xbba57a11,0xbb96e7dd,0xbb3892c4,0xbafcee99,0xbaf6da30,0xba86252e,0xb96267f9,0x396ea300,0xb8908d8f,0xb8908446,0x37fc0342,0x3764b7f5,0x37a96837,0x379669d6,0x3733c804,0xb62790d9,0x37bb54d2,0xb81b392e,0x37bbe03d,0x38ab02ec,0xb85f665c,0x3ae8bcdf,0x3b3018ac,0x3aba4cc0,0x3b2a03ab, +0x3bd13f5b,0x3b8ab107,0x3b5ec814,0x3acbcbff,0x3b2f0360,0x3b2baefd,0x3aad654e,0x3a35b28a,0x3b28349d,0x3babacce,0x3c1540b3,0x3bfeb603,0x3b91a19e,0x3af8cdfc,0xb9515a8d,0xba67a026,0xb98b2a1d,0x39953b48,0xb90897f2,0x382535b9,0x3823bded,0xb7430b31,0xb70f3e17,0xb707c46e,0xb7268fd2, +0xb683d36d,0xb6422f4f,0xb6e8cbdb,0x371a8e0a,0xb725c76e,0xb6adad22,0xb90f8bc2,0x3963e7c8,0xba8eaab0,0x3ad89f30,0x3b474dc3,0x3b6232fe,0xb9cbbf05,0xbb1e82a5,0xbb2e5812,0xba4f6d1f,0x3aa364b7,0x3b6b56fb,0x3b5755d5,0x3a891580,0xbb5db2f5,0xbbad21c1,0xbb9f7b27,0xbb83e34c,0xbb161862, +0xbaa9e946,0xb9df770d,0x3998a50e,0xb85e8939,0xb790f7b4,0x37a1204e,0xb82899aa,0x3756b0c9,0x369e5bcd,0x3698a6d1,0x36891cde,0x362192cd,0xb61dd5d6,0x37484e10,0xb7e303f1,0x3865f3e5,0xb8c175d8,0x395e0a82,0x3b711ec0,0x3bddccd8,0x3b815911,0x3a8db8a3,0xbb22fd9e,0x3a066fc7,0x3b0fbddd, +0x3b23eec6,0x3b68b004,0x3b0fce82,0xbaf5466f,0xbab55fa2,0xba056012,0x3ad19563,0x3b591be9,0x3b095fc3,0x3b3396cb,0x3abde5b0,0x3acf2928,0x3a13a709,0x38ded9cb,0x370b316c,0x37a61283,0xb6ddc33b,0x375e6992,0xb68e3c39,0xb643dc74,0xb61a40a8,0xb629bd60,0x3522b51e,0xb56c5729,0xb5237707, +0x36914001,0xb7b05254,0x38799439,0xb9950bc4,0x3a3ad67a,0xbb4d2981,0xba44d722,0xb9dd8abf,0xbb5bfc61,0x3a1b75b8,0x3b0ffacb,0x38e33652,0x3b65b2c1,0x3b17fd81,0x38d28c54,0xbb011265,0xbaaa8d14,0x3b121cab,0x3b3af721,0x3b5a07b2,0x3acba604,0x3aa81dbc,0x3a03f421,0xba2e543a,0xba3c7a10, +0xb8154703,0x37ebb7dc,0xb7cb5810,0x37858f44,0xb6fac6c2,0x36cdf09c,0xb62aca2e,0x35384773,0xb55ddca6,0xb60439fd,0x365c0cb2,0xb63f7c1c,0x37826f41,0xb599086f,0xb8b4f507,0xbba228e3,0xbc5fc908,0xbb7bc9b0,0xb7933200,0x3af3f345,0x3890a825,0xbb460d02,0xbbedab08,0xbaf963de,0x3b0c33dc, +0x3bcdc194,0x3b133f7c,0xba9d2a36,0xbb3cb586,0xbb64e47c,0xbb53e113,0xbb4f371a,0xbb19dad9,0xbb0d7b64,0xbaece323,0xba5676aa,0xb9034c86,0x38cd1835,0xb83d1938,0x36f818d6,0xb6fc9d6b,0x35e1a89e,0xb4ae9be0,0x3690a5fa,0xb3e96df7,0x36e01b7c,0xb70275a2,0x35a69eea,0xb7a4c03c,0xb84f9025, +0x3a220500,0xbb4d4f20,0xbbcdfac4,0x39d7d984,0x3a659b38,0xbabfc1d2,0xb9f5effe,0x3a0535f7,0x3a7421b2,0xba2d8eb7,0xbb1ac32b,0xbb4f2b8c,0xbb1a37a7,0xbaadd92a,0xba2b31f3,0x39e86540,0x3a49395c,0x3b037055,0x3b1ba0ec,0x3b23e432,0x3b1f76eb,0x3aa0e834,0x395eae7d,0xb9062f8c,0x38815107, +0xb70fa776,0x375d0ef8,0xb688d748,0xb58a8383,0xb6df404a,0xb73314be,0x36abe21b,0xb7e09829,0x3898fdf5,0xb8d736d2,0x3993ad2d,0xba944c8b,0x3ade8dd2,0x3aae3f88,0x3ac2e2f3,0x3b07f9af,0x3ab425b8,0x3a26721a,0xba28b62b,0xba8e06a4,0xbaf08786,0xbae870c9,0xbaa5d741,0xbb047dae,0xbaf70671, +0xbb175391,0xbaa58670,0xba0535fe,0xb9be946d,0x3a24f96c,0x3a97375f,0x3ad325d1,0x3ad19bde,0x3a2225f0,0xb8eacfd8,0x3809ffb6,0xb86b943e,0x3711090d,0xb59e284e,0x3637a612,0x37aae1da,0x36a480a0,0x37e87153,0xb7b4f338,0xb790e88c,0xb888c6e1,0x37bc7bf9,0x3a545862,0x3aa37d15,0x3acd2d73, +0x3aa88ff8,0x3a1d3685,0x3940b8ac,0x373f9445,0xb8cd79a9,0xb9e1c490,0xba877cbd,0xbaef7dd1,0xbb15accd,0xbaf8d790,0xbaddff3e,0xbabbcc82,0xba57e7d8,0xba032a43,0xb9ac22db,0xb7da0f1a,0x39cc806a,0x3a2866fe,0x39a147b6,0x38938694,0xb87ce1bd,0x38a1b7e2,0x388b68b9,0x371c1685,0xb79603ff, +0xb6bb8941,0xb8437add,0xb7c6f0d6,0xb829f79b,0xb760d143,0x3907649e,0x37c616b7,0x389eecb8,0x3a0687cc,0xbab7c19b,0xba98d434,0xba83d504,0xba4b1970,0xba3ccd5c,0xba435c27,0xba49b0e5,0xba2a0a58,0xb9cfe322,0xb89a004c,0x38b04087,0xb9ab2583,0xb9fb30f1,0xba17b8cd,0xba1f19c3,0xba2952f1, +0xb9d8fdf8,0xb96353e1,0xba2115e9,0x38a3c77b,0xb930b9b8,0xb9679fe8,0xb9aeb025,0xb9b4eda9,0xb8e227f9,0x34451c3c,0x3866e6a7,0x3881c64c,0x3917ee50,0x38f621f2,0x3902d667,0x38afc671,0xb90edbbb,0xba14daf3,0xba24126a,0xba65d736,0xba4465e2,0xba122422,0xba1dd197,0xba0ca720,0xb9c56200, +0xb9ba2727,0xb9164fdd,0xb913da30,0xb94e44b1,0xb98878e3,0xb933a6f3,0x3917a88a,0x3a043206,0x3a3c6824,0x3a837118,0x3a90b669,0x3a977089,0x3aae9bab,0x3acdbcd2,0x3ac3ddbc,0x3ab57355,0x3a60378a,0x3a0dc4c0,0x394ef922,0xb8ee456f,0xb9a06112,0xb9bb2b4b,0xba0e2d1f,0xba13adaa,0xba493ed5, +0xba373696,0xba7e3d03,0xba85c234,0xba58b613,0xba816436,0xba5c8484,0xb97e6b6b,0xb9b9cd0b,0xb9a2d8a1,0xb94949aa,0xb9016ce6,0xb902157d,0xb8d73830,0xb85feac7,0x38b1ac6f,0x394e7181,0x397a5a8d,0x394d28dc,0x38ed5ca2,0x38a3df62,0x37bab1e6,0x38058f0e,0x37b7b3e2,0x36dc723b,0x37e61a8b, +0x382c9b98,0x3935f094,0x399dd7dd,0x39f29deb,0x39321cfa,0x39867f20,0x399aa67e,0x3985616c,0x395a6701,0x390dab81,0x38aa9e8d,0x37d8abe9,0x367dd453,0xb84079ff,0xb8f23ab9,0xb7801a4a,0xb9391cae,0x39aa18d7,0xba6c1290,0xba16d3f6,0xba1ec92c,0xba0831f1,0xb9fd2154,0xba165056,0xba01470d, +0xb9eff52a,0xb99c01aa,0xba03ca2b,0xba1f5315,0xba4cdabf,0xba018fe5,0xba049ca7,0xba2a6979,0xba417e96,0xba5414d3,0xba5ce5bd,0xba3fda13,0xba2cdaed,0xba1de041,0xba110f75,0xba13d775,0xba244914,0xba1af2be,0xba32aee0,0xba26d520,0xba4fd9ce,0xba4ac54d,0xba1215c6,0xba1276ff,0xb9f3bb21, +0xb997a0e6,0xba0bfdfc,0xba0e007a,0xba2576ed,0xba1e547a,0xba28f07e,0xba1b02ae,0xb9e4a819,0xb9f93bea,0xba59f814,0xba0d0209,0xb9a33136,0x39a7e4f9,0xb9df4bd1,0xba5f69b4,0xbac0b813,0xba2af79f,0xb9e4022b,0xba5a404c,0xba8ae0ea,0xbab09c87,0xbaab29e8,0xba8712bb,0xba5f0db9,0xba60a720, +0xba4b7b11,0xba308c4a,0xba3ea836,0xba60f62b,0xba160611,0xb9c0e3de,0xb9f92b9a,0xb9d774ee,0xb90493a9,0xb97025e7,0xb8c4acf0,0x38daebfb,0xb9fe3ac2,0xba4a2b66,0xba27d832,0xba2f6ea8,0xba109a10,0xba65f352,0xb99c8e09,0xb994e8de,0xba447c17,0xb9a16005,0xb90edfb2,0x3a94804d,0xb9cc949e, +0xba59a922,0xbb0b0ccb,0xb943b0b0,0xb93c51e4,0xba93a174,0xbae1e320,0xbb061bf5,0xbb146b11,0xbace226c,0xba936a95,0xba8f16b0,0xba14afc1,0xb9e00315,0xba008204,0xb90ce849,0x3924e356,0x38ec2847,0x391f5db8,0x390617cc,0x3882371f,0x387fef28,0x37e4b898,0x37a0fa54,0x390d3cfd,0xb911350f, +0xba005643,0xb9d516e2,0xb993b0b8,0xba157337,0x37817e1a,0xb8dbd79b,0xba8c69ad,0xb9914963,0x39c0eb57,0x3b286102,0x381609e7,0xba8c4528,0xbb6202b3,0xb9fdef05,0x39178336,0xba76a0fe,0xbb02b94c,0xbb2aace3,0xbb25a122,0xbae83e70,0xba96fdc4,0xbaab2fa6,0xba46c871,0xba053378,0x38cf0c37, +0x39216e42,0xb8657f78,0xb88988ad,0xb80d1e12,0xb8816a7e,0xb8238df2,0xb7e147f1,0xb7289e5c,0xb7b97e05,0xb83172a9,0x3906e574,0x34b64dc2,0xb9fedd69,0xba221a40,0xbaa7b26c,0xb9858d46,0xb937f960,0xba4b4cfc,0xb9d979e7,0x39883d8c,0x3b26aa96,0x383a515d,0xbab2ab28,0xbb5ce6a1,0x38e993e4, +0x39d3e5f5,0xbaf84ba1,0xbb5414eb,0xbb8027a9,0xbb89eb16,0xbb2dbfa0,0xbaf01a47,0xbabd28b8,0xba384e54,0x3546a9f2,0x3844b39d,0xb8d0631b,0x3802c060,0x37dfba57,0x37a76cd8,0x37f6fd91,0x3798beeb,0x375cb200,0x36f7c0d5,0x372033e1,0x37ca2325,0xb8b0607b,0x38992512,0x3903bdb2,0x3a973f0e, +0x3b138ef0,0x3a35b120,0x3ac6eb0d,0x3b96ba26,0x3b572b2e,0x3b29fe57,0x3a0bdf54,0x3b2d2038,0x3b3b8071,0x3a9febd1,0x39d3657b,0x3abc0a02,0x3b64b39e,0x3be8034d,0x3bd65a62,0x3b930269,0x3b295ff1,0x3a3bda40,0xb922de4f,0x390073fc,0x38f677f6,0xb85ca309,0x3850bdaa,0xb784e08c,0xb760fbc1, +0xb719a975,0xb775971d,0xb7052d0b,0xb71d9a45,0xb487da8c,0xb73d110d,0x367eb969,0x3710e0fe,0xb69d8faf,0xb92346ef,0x36ad6aca,0xba670b5f,0x3aa37259,0x3b33eed1,0x3b5b18a7,0x39c7f9e3,0xba9af149,0xbb0c1681,0xba2ec226,0x3a47a278,0x3b22d877,0x3b4b2a7f,0x3ad30c53,0xbb086500,0xbb8b8361, +0xbb93fe5e,0xbb8a863d,0xbb2af47a,0xbacda6a7,0xb9c01cd6,0x390de9a2,0xb88bf5d8,0x376cbac2,0xb776a779,0x363a7bd5,0x37200d6c,0x37085606,0x36a10f52,0x36d8bf33,0xb54e2480,0x36e4db88,0xb6c5ef20,0x3797643e,0xb8144a75,0x38546daf,0xb831e0fc,0x3b1eba33,0x3ba7c0bc,0x3b3bba9a,0x3a589f69, +0xbb0c25a7,0xb8dd95d6,0x3a86b219,0x3ae1b75b,0x3b35847b,0x3b02f1eb,0xbaa36af1,0xba9b8cca,0xba43b6dd,0x3a61ba29,0x3b2ce527,0x3aec15b0,0x3b2a0b41,0x3aaf100a,0x3ab6e77c,0x39f6d860,0x37fc5ac3,0x3763d147,0xb6e6d79f,0x366a5ad1,0xb39cf425,0xb699a067,0xb6197f68,0xb692f77b,0x34d8b0f6, +0xb6a1d563,0x373acc9d,0xb802a2a2,0x388d7b9d,0xb91058ad,0x39859a11,0xba1637b3,0x39206d5b,0xbb1ccc5c,0xba5d2f71,0xb9d4a050,0xbaf8d3a3,0x37cbbb1c,0x3a9a38dc,0x39927305,0x3b139aeb,0x3ad64f31,0x3a4634be,0xbac09340,0xba9be277,0x3a9a51e1,0x3b1bf347,0x3b4f3d91,0x3af11597,0x3abaa46d, +0x3a29b600,0xba32e1d4,0xb9f76b3e,0x38ab8b98,0xb7fb5634,0x3789f50f,0xb6f67ba8,0x3692b0be,0xb5173e24,0x3488b415,0xb4bdff63,0xb5bf3e14,0xb605d2e1,0x3509ee5d,0xb676c7da,0x37c20f07,0xb6b22676,0xb8fc0dc0,0xbb542a90,0xbc1386b6,0xbb413d4e,0xb9d460d1,0x3b4a73af,0x3a55d027,0xbadd3883, +0xbbad73af,0xbb276d93,0x3a1a5a08,0x3bb6f19a,0x3b253d15,0xb8bd16de,0xbb0488c7,0xbb2b85fb,0xbb2a89db,0xbb3bca45,0xbb05ecd3,0xbaf12968,0xbaccfbf0,0xb9eed0fd,0x388fa607,0xb7b71d21,0xb369cd59,0xb64bd3a5,0x3694d74a,0x346e5ce8,0x36a3ecf7,0xb38c3258,0x37266816,0xb69e330b,0x37cae8f5, +0xb8231392,0x389950bb,0xb9925ff6,0x3a6d6bc8,0xbb4e4707,0xbbedf608,0x3b003eeb,0x3b4ea016,0x3a200282,0x3a9ad186,0x3aba9de6,0x3a910147,0xb9688c9d,0xbadd9290,0xbb230337,0xbb078185,0xbab39f60,0xba66376a,0x396b6c45,0x3a067013,0x3acad81a,0x3aea7f87,0x3af935ac,0x3b00ac1a,0x3a44dea7, +0xb8765714,0xb6fbd92b,0x3805b736,0xb6ea241d,0xb67087e3,0xb6efb185,0xb6966760,0xb7502039,0xb6b8d978,0xb77e79b5,0xb704d951,0xb6bb234e,0x37cb9d4f,0x37cd2e3d,0xb8278bfe,0x3abc4ca3,0x3a86cc7c,0x3a61fb63,0x3a915a50,0x3a672d47,0x3982a9aa,0xba32234c,0xba5f7d41,0xbabe01d1,0xbab582d9, +0xba6f1ac6,0xbac60728,0xbab0a71f,0xbacce8b5,0xba3e05e7,0xb8f5cdaf,0xb8fae518,0x3a4b08e7,0x3a9943db,0x3ac6b589,0x3abbc92f,0x396f4dfe,0xb8f0f44d,0xb726651a,0xb763364b,0x379d94fd,0x376085fc,0x375ec167,0x37975d7c,0x37caad80,0x3795a79d,0x37ee26c3,0x36f3a872,0xb80c1f54,0xb883200e, +0x390f9d1d,0x3aa0cee0,0x3abc2037,0x3a8ff3b2,0x3a06fa64,0x370cea25,0xb8cac777,0xb8f19709,0xb974f928,0xba4227bd,0xbabbeaf6,0xbaffb527,0xbade32bf,0xbacc1f42,0xbaa62251,0xba3f532d,0xb9e0c9e3,0xb99cd19e,0xb8a3ebf8,0x397f331f,0x39d0b30f,0x38e9a0ce,0xb78f7f57,0x3845bde5,0x38dc855f, +0xb7b6d7df,0xb79cd0a6,0xb80e62c3,0xb7f4a429,0xb82e2a4d,0xb837c9ce,0xb86298fa,0xb8544e4e,0xb80e0703,0x38a82c94,0x36c07d94,0x3a0cf0ee,0xba624b21,0xba0d27f3,0xb9f158f9,0xb9b33dac,0xb9abb47c,0xb9c9ad1d,0xba07b501,0xba0dc88b,0xb9e7a46a,0xb97307cc,0xb9111fbe,0xb9fb540e,0xba2dc511, +0xba599ee3,0xba63bea6,0xba7258f3,0xba36ee17,0xba0d47fe,0xba6fa979,0xb9a78ef4,0xb9d5b062,0xb9bd68e2,0xb9a3543c,0xb8e6dbbf,0x380215df,0x38728175,0x3885bcfe,0x3877c973,0x38902ded,0x38f0d52b,0x38e957af,0x39264810,0x38ee8f3d,0xb909b0f2,0xb94fa52c,0xb9dfcdff,0xba27d4e8,0xba02594c, +0xba1c67ca,0xba1bac1a,0xba0ea2ea,0xba07e26c,0xb9b84e19,0xb99defca,0xb9bf0fac,0xb9f2f981,0xb9ee8f4a,0xb98aadca,0xb4b7e81b,0x390bce5d,0x39e43a45,0x3a121c95,0x3a17a711,0x3a46e1ab,0x3a83c0cb,0x3a732167,0x3a5889ba,0x39bf4c85,0x38b58e1e,0xb9568401,0xb9900177,0xb970bedc,0xb98a9cb3, +0xb96efd18,0xb9b8acd0,0xb9dd9de3,0xb9aa0f1d,0xba282b3d,0xba444983,0xba469f1f,0xba6bacba,0xba38f38d,0xb9c0826b,0xb9d90f49,0xb9c6544b,0xb9956c42,0xb97a3719,0xb9802736,0xb98a96fd,0xb98ad94b,0xb93d7a2a,0xb8c6a065,0xb874b7d7,0xb8c97f7d,0xb9393576,0xb9762737,0xb9944f93,0xb993ddf6, +0xb9984276,0xb9995f1e,0xb98e1713,0xb986279c,0xb8f4e745,0xb608c91f,0x39138ef3,0xb881110b,0xb870a0cf,0xb8ca416e,0xb942f43f,0xb9625d35,0xb9881322,0xb9b2bb8b,0xb9aed729,0xb9a9d117,0xb9935ff4,0xb9887fcd,0xb9585247,0xb9ac0c96,0xb91a7600,0xba455b11,0xb9f6e457,0xba052280,0xb9e54ec3, +0xb9d40c44,0xb9eb7e3d,0xb9d9757c,0xb9cd6c32,0xb98974f8,0xb9e2f9e5,0xba08578a,0xba2d1956,0xb9e2cc46,0xb9e25f57,0xba0cb05b,0xba1a2791,0xba2a2332,0xba39a4f0,0xba221665,0xba1140a7,0xba00acee,0xb9e8335f,0xb9df0541,0xba06886b,0xb9f0181d,0xba0093c5,0xba01150b,0xba13eb11,0xba0b8841, +0xb9c9d6cf,0xb9caa029,0xb9a86ef2,0xb93e457f,0xb9e21dfc,0xb9ea40a5,0xb9fac652,0xb9fb41a6,0xba15b60b,0xba1a9336,0xb9d32ad2,0xb9d735dd,0xba200d8d,0xba06d668,0xb9ba7705,0x393affbb,0xb9de2575,0xba48bee1,0xbaa394b5,0xba295044,0xb9ec5dc2,0xba37880e,0xba4bb318,0xba84e1c3,0xba9016d1, +0xba672b1b,0xba3a5aac,0xba29c1b6,0xba03b3f4,0xb9eda5bb,0xba2dc14c,0xba0382de,0xb9881d82,0xb8fbedfc,0xb94f83e6,0xb9271c9f,0xb86f41f6,0xb8dc6f77,0xb84cfd7a,0x3876b19a,0xb941bc42,0xba061ae1,0xba1471ee,0xba03fdc6,0xb9d893e3,0xba51509b,0xb996cb44,0xb9807d06,0xb9ee3b88,0xb99a7327, +0xb9610c0d,0x3a51b0b3,0xb9df659b,0xba4cdc23,0xbaeb74c0,0xb9afc4f8,0xb98b65cb,0xba6c53a5,0xbaa234a7,0xbac5bd4b,0xbaf98424,0xbaae8519,0xba80212a,0xba4f6444,0xb99d915b,0xb99300be,0xb8f0e876,0x38f4321d,0x37f2cf76,0x386176c3,0x389ac2d9,0x38ad1a41,0x380d7ac8,0x380e4960,0x37be51ac, +0xb800b87e,0x3899e841,0x389c1b67,0xb91cc7d5,0xb9a23208,0xb9a7de39,0xba42bb2e,0xb889e06e,0xb91855a5,0xba2080f6,0xb9bd2ce9,0x377feb88,0x3af1154c,0xb938daf2,0xba8962ce,0xbb3b5dc6,0xba3cb9ca,0xb907226a,0xba536d6d,0xbaabf228,0xbaeee3d0,0xbb0ba48f,0xbac80ab1,0xba802ca9,0xba5d3450, +0xb9d9b923,0xb892342d,0x389bf41f,0xb881c9c3,0xb6ca569f,0xb803ed06,0xb7c3dd59,0xb80e5f5c,0xb787498e,0xb76704c5,0xb6c9de8d,0x36b2f1fd,0xb7ad1f88,0xb812393a,0x38c85de1,0xb952dfab,0xb999c0b3,0xba9c6776,0xb9822cec,0xb8c76f01,0xb981a2de,0xb9b2855c,0x39045409,0x3aeccdd0,0xb9430fe3, +0xbaab0969,0xbb3b2b91,0xb97e8dd4,0x390eba31,0xbab8ee4c,0xbb108d53,0xbb39d157,0xbb67fa65,0xbb173b1e,0xbad5a278,0xba83ad50,0xb9a8aa85,0x38492f87,0xb8105504,0x379a045a,0x374bcea1,0x372c2411,0x376bdc90,0x37810590,0x371290e2,0x36be95b2,0x36988e03,0xb6c51448,0x37ab7554,0xb34ee0b1, +0xb81f662f,0x38eaa3a5,0x3a264998,0x3ad0ef72,0xb81b25d1,0x39ff1ede,0x3b3544fe,0x3b09cd3a,0x3ad21e34,0xb9b7a729,0x3b127099,0x3b2f7d43,0x3a78a221,0x38f97538,0x3a1050f1,0x3b067687,0x3ba0edfe,0x3ba0fdfb,0x3b84adc4,0x3b334eb2,0x3a9f92f0,0x39db0015,0x3983e3c1,0xb85634d0,0x37c64213, +0xb710f5b1,0xb71733ef,0xb6aaa650,0xb6cffe57,0xb708a2d2,0xb664931e,0xb6b3be23,0x3581b691,0xb62f1045,0x36007c58,0xb7a43c6d,0x38abd884,0xb97dd71b,0xb90ad541,0xba2a08a6,0x3a5f3f2d,0x3b168ee8,0x3b42eb94,0x3a74a20a,0xb9536ebb,0xbad563a5,0xba057f20,0x39caeb48,0x3ac9e129,0x3b2ad4c5, +0x3ade6ea6,0xba9c8865,0xbb53ee74,0xbb7dfdf2,0xbb8513c0,0xbb2f78bc,0xbae458d6,0xb9f14825,0x37ef65b3,0xb8208bdd,0x37a6b356,0xb70c33d3,0x3744764d,0xb5800eb1,0x36e5be31,0x35c0da0f,0x36852503,0xb61d7046,0x36dc82cb,0xb747fc27,0x37b671dd,0xb80ebd2b,0x382c6b5b,0x36f64fb9,0x3a84649b, +0x3b689111,0x3af83abd,0x3a20a8e7,0xbae11b2a,0xb9fcab76,0x393affa1,0x3a875d98,0x3b023b4e,0x3add0cd4,0xba2b1558,0xba78b933,0xba669827,0x39679576,0x3ae66c73,0x3aa6db0f,0x3b0e88ba,0x3a8a4627,0x3a8f73a7,0x399b6662,0x3755322d,0xb4ef2827,0x365bef20,0xb6776e58,0xb5b2b5e1,0xb5e87e80, +0xb51812ab,0xb6658e9d,0x3617d383,0xb6b54a23,0x374dd2e7,0xb8051734,0x38956249,0xb917d2e1,0x399179c0,0xba0a2ab6,0x388a0b85,0xbae62c61,0xba767883,0xba03b717,0xba6f3445,0xba05b14b,0x396fc4f9,0x39adc529,0x3a997cd3,0x3a7a766a,0x3a64c444,0xba872006,0xba80c980,0x39c31728,0x3ade043f, +0x3b29266d,0x3af19fa0,0x3ab1e4f8,0x3a3928b4,0xba0edf42,0xb90d39b5,0x3827ee75,0xb7a0e8e9,0x374e3743,0xb6f4c42a,0x36500332,0xb5e55ca3,0xb41dde51,0xb54a778d,0xb60b4846,0xb46623d3,0xb6668047,0x36860de6,0x36cf24f5,0xb5a34168,0xb89fbe8e,0xbaa42ef0,0xbbb5580e,0xbb16182e,0xba634108, +0x3b623e22,0x3a8438d2,0xba557452,0xbb639f93,0xbb2ede74,0xba0856aa,0x3b8ab73c,0x3b22bbe3,0x3a46a234,0xba9e42cf,0xbae60778,0xbafcfa15,0xbb1b58c6,0xbad387d0,0xbab9725b,0xba9bbf1a,0xb8a9ee80,0x389312b1,0xb7dc58d0,0x372e849c,0xb5e15361,0x367053d8,0x3551652d,0x36b07997,0xb5fc0c07, +0x374ac416,0xb74294fe,0x380d6dcb,0xb876072b,0x38ece029,0xb982f1b2,0x3a23200d,0xbaeece13,0xbbcb2aa2,0x3b408862,0x3b8c9f13,0x3b0e889e,0x3b17eb94,0x3b08d350,0x3aa3a8c0,0x38fd29df,0xba8d10e6,0xbaec6ff6,0xbae9ec2b,0xbab5e4f9,0xba8030d5,0xb8090006,0x3966570f,0x3a857ece,0x3a9b6dba, +0x3aaaa81d,0x3ac25a80,0x39b47919,0xb959dfae,0x388d4c67,0xb7cf7eed,0x36854e7b,0xb700d35f,0xb6b9bd4d,0xb6a09926,0xb751348d,0x33d7a0ad,0xb7a95b75,0x3772c242,0xb84c70cf,0x38c5394b,0xb944f692,0x3a13672d,0x3a8d625a,0x3a2678d2,0x39380f31,0x3937a13f,0x39a09fde,0xb94ed028,0xba54f07f, +0xba589a93,0xba93212c,0xba832154,0xba17967b,0xba83c265,0xba687027,0xba79c3a9,0xb9bdf865,0x38e27f98,0x381e61d2,0x3a51efa1,0x3a87ff88,0x3aab09ed,0x3a87a487,0xb7fc4701,0xb81073f4,0x3753e5a9,0x36ca6a4c,0x36d83a59,0x3784efe4,0x3743af49,0x377a91f2,0x37a6017a,0x3714d0b3,0x37ac97f6, +0x3786e059,0xb6fe9838,0x389494c4,0xb9b961a1,0x3a8e87df,0x3aa21beb,0x3a5903db,0x39c21aa0,0xb918f7bb,0xb966e89a,0xb9552f13,0xb961f07c,0xba119cfc,0xba8ba9c5,0xbaca4103,0xbab7ab22,0xbaab3d5a,0xba851deb,0xba1be86d,0xb9a9007d,0xb96c2cd3,0xb89bbbea,0x39163f55,0x395bbe29,0xb50956bf, +0xb6f42378,0x38a8b89c,0xb82695c5,0xb6b52530,0xb791299c,0xb7cd41e9,0xb80af6d7,0xb7f992af,0xb8262705,0xb7f701c2,0xb80e7ddd,0xb816378a,0x371801c3,0xb8b59007,0x398c9cfd,0xb9dc90cc,0xb88ba5bf,0xb84185a7,0xb7298cdc,0xb7830021,0xb9023d9d,0xb9b3db05,0xba013659,0xba069bcc,0xb9daabd3, +0xb9ca572b,0xba164e0d,0xba3afb1c,0xba64149d,0xba6fa809,0xba7fc205,0xba5028c8,0xba343d1f,0xba7fe363,0xba0e3cc4,0xb9f79b6a,0xb9af361d,0xb89d3a7a,0x3843d71e,0x3801f20a,0x37fe4e10,0x3844b56e,0x38858890,0x38769c1b,0x38c39e33,0x3871bdcd,0x3895e443,0x38bf1b29,0x383a1d85,0x3829d465, +0xb83c710a,0xba0bcbfc,0xb9e2b06b,0xba15d243,0xba25d830,0xba31f2ec,0xba2966d9,0xba0989c6,0xb9e96211,0xb9fe458b,0xba1646a8,0xba1f8f96,0xba0dbcae,0xb9cd8492,0xb9ace955,0xb87c2dc9,0x388e346d,0x3899e44a,0x3975a7d2,0x39f01b4e,0x39c5523b,0x39a559bf,0xb7ec2c27,0xb97e03e8,0xb99081d1, +0xb929501d,0xb89adad6,0xb93a4a92,0xb8b7d653,0xb95bde87,0xb9577132,0xb9141af4,0xb9704742,0xb9b11385,0xb9ded0f5,0xba332d56,0xba13cb5d,0xb9d8d098,0xb9d7e5b1,0xb9c906b5,0xb9a36dc1,0xb9955374,0xb99ab932,0xb9b5b600,0xb9ca7ce0,0xb9b918ed,0xb99de509,0xb98edf6b,0xb9999738,0xb9b76d13, +0xb9d6dc64,0xb9ea4a4d,0xb9eedd19,0xb9f36831,0xb9f0b505,0xb9e70693,0xb9ddf5d5,0xb9a0eda9,0xb947b8ae,0xb8ae6e5a,0xb9858c83,0xb9929b67,0xb9959c58,0xb9b5d0c7,0xb9b8e974,0xb9c404f0,0xb9e1d731,0xb9de3af5,0xb9ef7dcf,0xb9e19732,0xb9bd192f,0xb9ab2b2d,0xb9cb8fc1,0xb9ee8dfe,0xba11d82f, +0xb9a95e44,0xb9b88cc0,0xb9a2bbfc,0xb99669f0,0xb99df20a,0xb99849b1,0xb990eaab,0xb9453be5,0xb9a22caf,0xb9c2732f,0xb9f32aa6,0xb9a405af,0xb9a13e6d,0xb9c3b0d5,0xb9d02390,0xb9e6aa0f,0xba026285,0xb9e4a444,0xb9cd3e99,0xb9af0ae3,0xb9a1ab30,0xb9a6d43e,0xba03d6f5,0xb9a788f9,0xb9b0fc13, +0xb9b9511b,0xb9c1c8fa,0xb9b7a4ca,0xb999009f,0xb995b00c,0xb9869627,0xb92dc33b,0xb9aa6a07,0xb9b580f4,0xb9e3013a,0xb9c0bc42,0xba015b7e,0xb9fc2454,0xb9ac657d,0xb9a2ac50,0xb9cf34d6,0xb9ce4be1,0xb99a3c41,0x38b927a9,0xb9a8a88f,0xba120937,0xba657fdd,0xba05517e,0xb9c05315,0xba00b8e5, +0xb9fbe382,0xba29dc93,0xba4b4e73,0xba253e79,0xba02950e,0xb9d2e4e8,0xb9a4eb3d,0xb9a8c19e,0xb9d015b0,0xb939d400,0xb7de5894,0x37ef4a43,0x378be612,0x37c25e76,0x37b50a3b,0x3807a7d3,0x355b88cc,0x3877747b,0xb86a35e2,0xb9280a6b,0xb9ca85f5,0xb9d58bc0,0xb9aaa27a,0xba1bfef2,0xb986c210, +0xb955acca,0xb981e309,0xb965e239,0xb9435834,0x3a038361,0xb9b1cbe5,0xba1910d5,0xbaa416de,0xb9acc45e,0xb982d04b,0xba1ed8c3,0xba451da0,0xba7648e4,0xbaae55ef,0xba761aac,0xba37a377,0xb9fd89c8,0xb93a37c6,0xb8aeff6d,0x38e6758d,0x3886c694,0x374fc1ff,0x3780f2db,0xb65b6be7,0x375369b8, +0x353a6668,0x36e4f7bd,0x36de81c5,0xb60fa3e1,0x3817570e,0x38a146aa,0x38a1d969,0xb8c06df5,0xb9893ab5,0xba4565fc,0xb91a7463,0xb944f11a,0xb9a01172,0xb9a50c11,0xb8fae72b,0x3a98a4a7,0xb9433026,0xba4ce93e,0xbaff9980,0xba307296,0xb96e1210,0xba117715,0xba36b575,0xba8b44dc,0xbac38017, +0xba8e315f,0xba2e6f06,0xb9ed58c5,0xb90dd937,0x3880125c,0xb7445037,0xb7caa4de,0xb63b6c73,0xb6ae0a93,0x360c3574,0xb6b9ad61,0xb6357474,0xb6594961,0xb5b5101f,0xb4fd9d71,0xb70faec9,0xb83752c3,0x37dbfff3,0x379a166f,0xb6ffbe1e,0xba7b88c2,0xb98b3485,0xb8fa3569,0xb7437660,0xb9730bcd, +0x3888d84c,0x3a939d09,0xb96ddb40,0xba80a6ed,0xbb027a08,0xb9b4f1de,0xb783ccd0,0xba690e54,0xbaa4d728,0xbae28ebf,0xbb2208b8,0xbad94f47,0xba9df02a,0xba16f22b,0xb8dadac1,0x380d0b91,0xb759ce3f,0x379eac2a,0x35a77726,0x36839f74,0xb3d3e78d,0x36535b37,0x35db96a8,0x36161bb2,0x356f4e2c, +0x36274bb6,0x36269242,0x37efbe71,0xb7ffe8c2,0x38af6094,0x392f95db,0x3a6eb81a,0xb949f4eb,0x38a43d99,0x3ac5416b,0x3aab5434,0x3a8399b4,0xba119baa,0x3ae5d08d,0x3b0cb033,0x3a2ffbac,0x369f734f,0x388db077,0x3a862a02,0x3b3d5660,0x3b4ebde2,0x3b507a92,0x3b1d1793,0x3aaf3acd,0x3a441bae, +0x386ad361,0xb708c2ed,0x37218334,0xb717ff80,0xb5dfbc80,0xb5916b42,0xb4a14ed5,0xb598be64,0xb57c04d2,0xb4a0b2e0,0xb5b3ae67,0x3590eaa4,0xb656fa01,0xb750854e,0x3755f8ff,0xb85c1c0d,0xb95f18c1,0xb97a8e1c,0x3a24a3ba,0x3adafd81,0x3b1416a7,0x3a8bf650,0x39ba20dd,0xba9120da,0xb9c2049b, +0x3915b56a,0x3a673ea8,0x3afabb04,0x3abc0bf2,0xba09d341,0xbb061294,0xbb32a255,0xbb4ac6ce,0xbb0fe31e,0xbac65c63,0xba0c1362,0x37afd419,0xb60d31fd,0x3612a101,0x35cd016c,0x36539f16,0x32b2b922,0x3563e4be,0x350c77fe,0x3521914c,0x34a5cb70,0x35227af8,0x35add051,0xb65ba7b1,0x379b0331, +0xb84168b0,0x38f1c5bf,0x390cb0f4,0x3b09e5c1,0x3a8fc525,0x39c8024a,0xba96c9c9,0xba12f809,0xb98b234b,0x3a169a79,0x3aa5b71a,0x3aa07196,0xb92faa59,0xba1ca794,0xba350b89,0xb6898980,0x3a8b14e8,0x3a576ac5,0x3ace64e3,0x3a4270b0,0x3a4e126d,0x3928daea,0xb5c58b74,0x3753b84a,0xb6e9e5f3, +0x3655383a,0xb592d9fe,0x3491d2f1,0x32d02fe4,0xb4fc451e,0x352803a6,0xb59091cf,0x3639bed1,0xb6f91835,0x3797a3cc,0xb8201479,0x38aadb5a,0xb919caf2,0x38ed7f7a,0xbaa559a9,0xba3e7b4c,0xb9c5de19,0xb8fd0234,0xba1bd47f,0xb94b09bd,0x39e2b4ce,0x3a0c9ac1,0x3a066a5e,0x3a4b7d4e,0xba09a26d, +0xba147824,0x38d03f08,0x3a9058cb,0x3aef486d,0x3ac9423a,0x3a94d658,0x3a307d74,0xb98cb206,0x378b0029,0x349f340f,0xb5e7fafa,0x35f927e1,0xb607c3a6,0x3573e152,0xb4a6c97e,0x3443148a,0x34db7bd6,0xb5548575,0x36014304,0xb6727fef,0x3702125d,0xb7097156,0x374f8685,0xb840d0e4,0x3943ce0a, +0xbb4192e5,0xbac4405d,0xba58adde,0x3b4b2e65,0x3a8b9399,0xb8c6c8d5,0xbaf598ee,0xbb0a7eb8,0xba6b7b1e,0x3b32fdef,0x3b0a116d,0x3a9958b5,0xb9f95c18,0xba73ec29,0xba9b5cce,0xbad0d1a9,0xba87cc3f,0xba6d84fd,0xba32ebb3,0x379f1403,0x37d7bb0e,0xb75c0b6d,0x3720410f,0xb50c709b,0x35e26ff5, +0x33570e9f,0x35b7064e,0xb597124d,0x365062ca,0xb689aac3,0x371e45e2,0xb78a9e01,0x380d2a72,0xb832149a,0x38accc2d,0xba0ff763,0xbb76aa85,0x3b48027b,0x3b87f049,0x3b382451,0x3b2e2d0b,0x3b147183,0x3ab5d6e5,0x39cfde41,0xba05d075,0xba92ef12,0xbaabfd75,0xba93b5ce,0xba60ce7c,0xb93e100b, +0x3795fdfb,0x3a15f148,0x3a378e7c,0x3a4d85d6,0x3a85ee13,0xb7ad6881,0xb853b073,0x37b46e28,0xb7af74df,0x369a790c,0xb691a8a0,0x34905ac9,0xb58053b7,0xb5d74c7c,0x360726ae,0xb6becb71,0x373d0421,0xb7cee58b,0x384065d8,0xb8fc49dc,0x398143e7,0x3a034dc8,0x39c7c824,0xb9803bf3,0xb9b6c93e, +0xb89acff5,0xb9d71216,0xba42e236,0xba2a3cbc,0xba4b6390,0xba2b131a,0xb9a71be5,0xba10d298,0xb9fa78b8,0xb9f9b9d2,0xb8ebf89d,0x39660aef,0x3918386d,0x3a3bfaf3,0x3a49f55f,0x3a88219f,0x39e15b06,0xb91b4dd9,0x38a61dc5,0xb75f8703,0x3795a7a3,0xb6837fc2,0x36b3261f,0x357e48d0,0x3655069f, +0x35179d50,0x36b2265b,0xb6af6f21,0x37bfd7c2,0xb7cde65f,0x38ce5652,0xb92c7543,0x3a26a010,0x3a8293c7,0x3a0b75fc,0x39828980,0xb953d742,0xb9769089,0xb95b340c,0xb9210e5b,0xb9c135be,0xba36cfb2,0xba8ad04e,0xba825ecf,0xba73ce11,0xba347267,0xb9d2ec2c,0xb9443972,0xb8ee3b24,0xb78e38c6, +0x38dcd1d0,0x38bd7755,0x37e44669,0x387175ea,0xb76fb0bc,0xb81db2de,0xb7098204,0xb6c06855,0x32976352,0xb6fb441b,0xb430798e,0xb6c3391f,0x35d013a5,0xb73606c2,0x36097590,0xb8737b30,0x3823b725,0xb916149f,0xb86dd9cc,0x3938f665,0x39558c81,0x394b2e48,0x39514358,0x38a43224,0xb91ce556, +0xb9b50bda,0xb9dda3d1,0xb9d5c0af,0xb9dc818f,0xba038bc9,0xba1ba783,0xba3ba1c9,0xba44fb2b,0xba52d9bd,0xba318b2a,0xba236291,0xba4eedd5,0xba0b49a1,0xb9d9515e,0xb8fdd426,0x38ba9ced,0x3865abd9,0x37cb2470,0x36c43fa2,0x354da814,0x371834fb,0xb67c9c2f,0x36ae9127,0x36fd3746,0x372299e6, +0x37c6f68d,0x38a95639,0x3852fe3e,0x38f2deca,0xb9e33e8d,0xb9a51821,0xb9e91441,0xba0bbcf3,0xba22df93,0xba179bcc,0xba01167b,0xb9d06adf,0xb9de7620,0xba017cba,0xba0f1f2c,0xba113c04,0xba01cce1,0xb9feba6c,0xb997f487,0xb9454db4,0xb94cf668,0xb8a3cf30,0x389b56eb,0x37a2c8d1,0xb8530ea5, +0xb989cbc2,0xb97638df,0xb8fb1b19,0xb7628331,0x36c19f83,0x364786fd,0x3684979e,0xb696593a,0x376116aa,0xb7952962,0x37bc4f82,0xb7da2f17,0xb8f4f621,0xb9c8de01,0xb9b65b4c,0xb9b0cded,0xb9a24bdb,0xb99b29ff,0xb97d0360,0xb96df2a1,0xb9772c70,0xb99b1880,0xb9b619cc,0xb9b6781a,0xb9a94fd3, +0xb9a00d3d,0xb9a51457,0xb9b7aa7d,0xb9d1ab8e,0xb9ded412,0xb9e57842,0xb9ea01f1,0xb9e5e9d1,0xb9df1eb1,0xb9d6f17b,0xb9a6a5bb,0xb988cf5e,0xb996026d,0xb9a28dd4,0xb9a445af,0xb9a619dc,0xb9ab19fb,0xb9b09ea2,0xb9b25bb5,0xb9b5f255,0xb9bc4ea7,0xb9bbe6c0,0xb9c27f63,0xb9aebc4f,0xb9c76473, +0xb9be3764,0xba0c9d8f,0xb9d53179,0xb97c0f1a,0xb98c95d1,0xb9802842,0xb970473d,0xb9696fbb,0xb9757ac9,0xb9743082,0xb9455f74,0xb98616ef,0xb997eb74,0xb9af8afd,0xb9869d57,0xb983f211,0xb994a634,0xb998ef96,0xb9a665b9,0xb9ba2650,0xb9a938f8,0xb999d996,0xb986b57f,0xb96336ba,0xb97356e0, +0xb9a93462,0xb8faa370,0xb8b3f4c4,0xb859af74,0xb865c513,0xb8476869,0xb815faca,0xb8008b21,0xb7d63f3f,0xb579a16c,0xb8a3474d,0xb8f9da00,0xb99baff4,0xb98f98b6,0xb9bd0576,0xb9d1bcd9,0xb9938bdf,0xb984563a,0xb9868606,0xb9ab53bd,0xb99b06fb,0xb8bb9809,0xb9a33d06,0xb9e90655,0xba1c49fc, +0xb9df3079,0xb9b453b3,0xb9c8e857,0xb9b3e4eb,0xb9e5bf6b,0xba0bc79e,0xb9ec1d9c,0xb9c0eafc,0xb99612d7,0xb94a4cf9,0xb8988239,0xb82ff2b7,0x387a05c1,0x37805518,0x37530a98,0x376cd91b,0x37350fdd,0xb702412a,0x371039d9,0xb7a68761,0x371a2951,0xb77f2cdf,0x3889c112,0xb78365be,0xb903a6fb, +0xb90af863,0xb9ef3fa0,0xb95fff43,0xb940d73d,0xb8f4afef,0xb95edc82,0xb970aad6,0x38f4bc9b,0xb9b38edb,0xb9f9c850,0xba534ffd,0xb9b98f60,0xb99b480e,0xb9e310a5,0xb9fd5ae4,0xba199c81,0xba5f9bff,0xba258d5e,0xba0295f1,0xb99db470,0xb7c29691,0x385dbc9b,0xb48c4c60,0xb79c8a5f,0xb76454e6, +0xb78155d6,0xb6f68244,0xb78bf094,0xb6f91087,0xb70dbdb4,0xb6de9d80,0xb6df4226,0xb793a9a4,0xb7ba1799,0xb737ad10,0x38c5b704,0x385f90eb,0xba3a2f96,0xb912d2a6,0xb94c6c0f,0xb8be818d,0xb99a9214,0xb9906f1e,0x39d8aeab,0xb9a8892a,0xba2a327b,0xba9d71a1,0xba245e0c,0xb9b9f101,0xb9ea786a, +0xb9e212ec,0xba24fd74,0xba7af0c7,0xba3daad5,0xb9f1fb83,0xb987034a,0x3869d3c5,0xb8101854,0xb79c475b,0xb5e1d36c,0x3634988e,0x3668b829,0x34712626,0x36bad38e,0x367a6967,0x35cec469,0x35df0968,0x35531e0c,0x33965062,0x3761ab19,0xb83548a7,0xb75ed28c,0x39216ef4,0xba262a63,0xb9684c1f, +0xb894d3cd,0x39039099,0xb93eb091,0xb8b34bab,0x39ccb0bd,0xb9b47c22,0xba45fedd,0xbaa2e2e5,0xb9e28ab5,0xb96a8230,0xba1371b4,0xba3b1ded,0xba81e873,0xbac76c64,0xba8d1614,0xba5a229d,0xb995138f,0x3839909a,0xb7128813,0x37114b6b,0xb46cf094,0xb65a5584,0xb5e9781c,0xb5aabaff,0xb64af8da, +0xb6037d8b,0xb60d91af,0x348e17f9,0xb69a63b6,0x36dd9796,0xb7cfb114,0x384a3874,0xb8caa23a,0x37e4dda5,0x39d79e9b,0xb9a1bc2c,0xb94dbeea,0x39d61adc,0x39eada9c,0x398d3ba7,0xba4135a4,0x3a5ee7f8,0x3a9c7a9f,0x398fad5b,0xb90a084d,0xb933d698,0x39ca83b7,0x3aab7f02,0x3ad0f449,0x3b0356ea, +0x3acce145,0x3a815151,0x3a1016e0,0xb8e646d4,0x372dd043,0xb7441d90,0xb49a7f3a,0xb3b6da8a,0x3570dea5,0x34b55a70,0x358804c8,0x359151fb,0xb51b0638,0x35d35c3c,0xb6505288,0x36cd98b4,0xb72da0d8,0x3798b67f,0xb8667422,0xb90e1b11,0xb8718bef,0x39c2cc11,0x3a7ceb6e,0x3ab33e92,0x3a5c5b41, +0x3a0040b7,0xba282262,0xb97088e7,0x36773330,0x39e33a57,0x3a9e9e6f,0x3a85fc45,0xb8d075f5,0xba879727,0xbacf87cb,0xbb055c78,0xbac69d0d,0xba961628,0xb9e4836c,0x38d4f56c,0xb80245fa,0x3750abd6,0xb6df7cb1,0x35e06619,0xb613d382,0xb42c5525,0xb54744a0,0xb5497dfb,0x331f1e6a,0xb5cb385b, +0x35e73278,0xb6e20d0f,0x3718ba5e,0xb7e393cc,0x38431a5c,0xb882d41c,0x3a5d38bf,0x3a0f97f4,0x390b3890,0xba333545,0xba0d33ae,0xb9fe66c8,0x38f7102d,0x3a04572f,0x3a1d8826,0x372fd258,0xb9d99828,0xba14a8dc,0xb971387a,0x39bbe88c,0x39a7c4ff,0x3a5d07bc,0x39c90fd8,0x39d22f6e,0x3801139f, +0x36588010,0xb7a9dc79,0x37116268,0xb6eba243,0x35eb0d07,0xb58ab7d7,0x35357172,0xb4c7b0b6,0x32f8fab7,0xb455f7f1,0xb523845c,0x3552b0cf,0xb5df6acd,0x363b7fc0,0xb6c0c217,0xb601c5ad,0x38da1fcd,0xba348304,0xba07d3b3,0xb99f6ee0,0xb89836c5,0xba2cef27,0xba059dbf,0x39660b39,0x3834a6d8, +0x38d6ae02,0x39c82655,0xb9c0363a,0xb9dbcfd5,0xb937e2be,0x39d98eef,0x3a6d0630,0x3a79e579,0x3a399d13,0x39e27c2a,0xb8735eb4,0x35e2b042,0xb70ec8dc,0x3657ebf1,0xb646460b,0x35c37116,0xb5728f84,0x328539e1,0xb52800fa,0x35392ae6,0xb5e224db,0x36222373,0xb6cbf503,0x373bc6a0,0xb7a32852, +0x38094e26,0xb848c4a6,0x39f46532,0xba8bf84c,0xba87c91b,0xba2c0d0f,0x3ae27042,0x3a26a643,0x38aabbc7,0xba5bdc45,0xbaaaeed1,0xba4b5d7e,0x3aa8fdba,0x3ab86b02,0x3a8893ba,0x3630c735,0xb9cee489,0xba2aacbd,0xba71ad1f,0xba1d01d4,0xba0a9225,0xb98e86f3,0x38491bff,0xb7977763,0x36078d37, +0xb5ce9538,0xb5cffd9c,0xb4f35792,0xb4b5a15b,0xb591fc77,0x34fcf211,0xb611f1b2,0x3624d9cf,0xb6d92f8a,0x3727a923,0xb7ccd39a,0x388722f9,0xb921370f,0xb6526a16,0xba9b3c0e,0x3b024f0c,0x3b35bb36,0x3b0d644e,0x3b019f1d,0x3ad87ad0,0x3a8dce58,0x39c1ca7b,0xb94f06f5,0xba30ea13,0xba6623de, +0xba5c95b9,0xba2e801a,0xb98a8b8d,0xb8e9f9b4,0x3969f620,0x399b8a12,0x39c5ef8d,0x39f0c24a,0xb91f2719,0x385772ab,0xb7a218b8,0x36dad701,0xb4bd7835,0x35433ed1,0x34f68a1e,0x34a2e6dd,0x35910f41,0xb4ddf92d,0x35c3b510,0xb5ed44c8,0x3681702b,0xb6f6a5fb,0x3676453f,0xb7b8adb7,0x39062c8b, +0x38fa5cd9,0xb9ec80c3,0xba14ffbb,0xb9b87668,0xba0bb6d2,0xba2ea4ac,0xba12b770,0xba077235,0xb9c703b4,0xb9291ae7,0xb97e3fe2,0xb95b2b23,0xb93bc733,0xb78c4036,0x3927960b,0x38ed6fc5,0x39ea19dd,0x39e136c4,0x3a2a1e13,0x38159f7d,0xb85d0db8,0x37d7ce14,0xb74d5ad1,0xb4dc2b50,0xb62854d2, +0xb603d92b,0xb6296aee,0xb602f841,0xb6731a0f,0xb49ea541,0xb6e59cf2,0x35db0a03,0xb71fe04a,0x37bb325b,0xb82edaa3,0x389a3daf,0x3a302f92,0x39582d85,0x38a577fe,0xb97a2596,0xb985b7e4,0xb98270a8,0xb956fb6c,0xb98e5072,0xb9d8dc7b,0xba1e308b,0xba1ad111,0xba1055c6,0xb9cdd09a,0xb978fc87, +0xb8c2950e,0xb83c9b46,0x36d6b7da,0x384aeadd,0x380dedb8,0x3726ab89,0xb713f91e,0xb7c19a0a,0x36e935b7,0x36887e0d,0x35edb243,0x3640f307,0x368e6e6f,0x3658fb69,0x366da749,0x366a7430,0x363e5674,0x3738a36f,0xb78d584d,0x37911562,0xb8f37df5,0x38aa5089,0x39767162,0x395324a3,0x39564165, +0x394daa4d,0x38c828cb,0xb8b75641,0xb98b018e,0xb9afd01d,0xb9b8e408,0xb9c07fcd,0xb9bf6db2,0xb9ce4fd1,0xb9edf3f6,0xb9faa8d4,0xba070202,0xb9e9c7cb,0xb9e66e60,0xba006914,0xb9e71139,0xb8d38c26,0x38bc7819,0xb6c193c8,0xb7429ab4,0xb770d465,0xb6be4424,0xb70a6dbd,0xb727b601,0xb68931e9, +0xb76f3f61,0xb6eb83d4,0xb793dbd2,0xb7973e6a,0xb6423a75,0x366d620a,0x386e7533,0xb9816c74,0xb9696bd1,0xb99f449a,0xb9cd5692,0xb9fce5aa,0xb9ecddde,0xb9d70895,0xb9b33464,0xb9b1ef07,0xb9c0ebc4,0xb9d31582,0xb9e33624,0xb9ddd74f,0xb9dfd3e2,0xb9a87212,0xb989df8c,0xb98e8496,0xb95fae23, +0xb8ff22e9,0xb93cb4bc,0xb9881aaa,0xb91e2030,0xb783def3,0x384a4920,0x369dac1b,0x369962de,0x37f04f79,0x36aadd70,0x37eadd64,0x3801958f,0x3788476c,0x38279de3,0x37cda2fb,0xb469a76f,0xb8716bbd,0xb8ae6ed8,0xb98725fb,0xb964bc78,0xb95e8395,0xb93eea6f,0xb938965a,0xb94041a6,0xb972f883, +0xb991b1a5,0xb998ba2c,0xb995332c,0xb98fdcc5,0xb98f08db,0xb995a3ed,0xb9a41fd2,0xb9ac7182,0xb9b2ced2,0xb9b7306e,0xb9b43691,0xb9b366a6,0xb9a5831f,0xb98f515e,0xb98de42b,0xb996d091,0xb8efae19,0xb8d23061,0xb8bf01cb,0xb8b1d983,0xb8c2f54a,0xb8c5b4df,0xb8be5301,0xb8d50d0f,0xb8ce64c3, +0xb8d032da,0xb8ebb7be,0xb9964499,0xb98fb50e,0xb9ebaacd,0x38501627,0x380e84a6,0x390ac46c,0x38582453,0x3861d7fe,0x384dbf56,0x3879ea60,0x388b9b8d,0x38a4159d,0x3884d76a,0x3872e7e6,0x384bce2a,0x387d9aa6,0x388284a0,0x38741c5e,0x38786f44,0x3875b894,0x384d700d,0x38666714,0x38375997, +0x38b303ec,0xb8393c2e,0xb92bfd4d,0xb99cec12,0x384c2a6a,0xb87352d0,0xb92648ad,0xb921eebc,0xb9208740,0xb9110148,0xb92298c2,0xb91cd322,0xb90c932f,0xb89ce0f8,0x388702a1,0xb98de187,0xb95b7e4e,0xb9c6603d,0x3793b678,0x388996e6,0x386e06ee,0x382aece3,0x388d139f,0x38c96843,0x39219520, +0x38e2e997,0x38b88475,0x384b48fd,0x388bf790,0x38ada449,0x38b6fb83,0x38d6ad36,0x38bd6338,0x387680b4,0x38699738,0x3892fa57,0x38f6d975,0xb920bfe6,0x37335d4b,0xb81b429a,0x358f9f71,0x386d2852,0xb7b988d1,0x37792ee6,0xb6b617e0,0x37758459,0x35acfbfd,0x38627b98,0x36afaff4,0xb7135a66, +0x3757daeb,0xb76e2e96,0xb7408b14,0xb8408283,0x38cf69e1,0x389e459c,0x38592807,0x3823e02b,0x38b0b935,0x38e4b5a6,0x39580677,0x38fec57e,0x38ca9262,0x380fb44c,0x38c5ee83,0x38e7ede3,0x38c1e956,0x38f2aa5f,0x38cbe667,0x385b24b6,0x381b7d65,0x38caac6c,0x36c1e95f,0xb8e7e432,0x37f17359, +0x37f36b6c,0x378a5fd7,0x36f8271a,0x38001131,0x37559238,0x388a2173,0x37bb7b13,0x3813b8e1,0x376e30a8,0x37c890bd,0x3814e5ef,0x3804da38,0xb797dd00,0x38fbebe8,0xb8a40df7,0xb90ecdb7,0x38f43684,0x37b12615,0x3811a4fa,0x387a9bbf,0x390c924a,0x39a80e4c,0x395138db,0x390c127d,0x3749a8c2, +0x38a4d3e9,0x38fd5c76,0x390cb72a,0x394600a7,0x391a4672,0x385d95a6,0x386b1859,0x38e11531,0x38797e0f,0x376275e6,0x3885b3bb,0x35a243df,0x380986f7,0x365060cb,0x3716835c,0xb5cd093e,0xb74f1485,0xb6f526ae,0xb511007a,0xb68fa411,0x3721d95b,0xb71184c3,0x36e15fe1,0x37cd1485,0x37e9866c, +0x38f1f63c,0xb7cedc77,0x38f1d9c9,0x37a2abea,0x380a9f20,0x3889d5c3,0x390aae43,0x399a2075,0x3935cac9,0x38d80979,0x3789081a,0x38f06495,0x392cdc0b,0x38f067c0,0x3925a94a,0x38f222a2,0x3731d0ce,0x364d1b73,0x38353b16,0x38667619,0xb8ee1b2d,0x3828b828,0xb701e89a,0x375a3bd7,0x361e7d9a, +0x36319783,0x36828fd2,0x37025edf,0x36d5929f,0x361b827a,0x36b44bca,0xb6176ccd,0x37323357,0x370051bf,0x37a4a0d9,0x37592294,0xb87ef57e,0x388e1597,0x3974fccd,0x394c5d12,0x399c8062,0x39bb482e,0x39c924cf,0x3956f53d,0x3a1012a9,0x3a153304,0x39bdd513,0x39879152,0x3934aad0,0x39350cac, +0x39a5646d,0x39c451b1,0x3a2a9911,0x3a0e73a8,0x3a01c78c,0x3968f56f,0xb87533f8,0x38b47a24,0xb7b0109e,0x37b9b3fc,0xb6c11f4a,0x36633a74,0xb617a248,0xb5d81969,0xb5e87f78,0x352b79dc,0xb5202136,0x368c3425,0xb62a06aa,0x377e367c,0xb833a3f6,0x38912c96,0xb79f5d47,0x3940925e,0x39919946, +0x398870fe,0x3992036e,0x3985c77b,0x3929001c,0xb91920b9,0xb77e60a7,0x386327a3,0x39052a63,0x397bda02,0x395f3b7b,0x37fcf90f,0xb88e2396,0xb8f35495,0xb8c977db,0xb918ac6f,0xb8950614,0xb8c02555,0xb7abed77,0x36e47fcb,0x35c3dc5c,0x372165d5,0x35e85ccb,0x365cb9cd,0x35b9c4ed,0x3606dca8, +0x355985e5,0x35ed33ed,0x34c8057f,0x368e725d,0xb6f6358e,0x379875fe,0xb581f36b,0x387cfd63,0xb8179149,0x39265ed0,0x391cab86,0x38d23fe2,0x386f1cb8,0x38d877da,0x392294e2,0x39ac2977,0x39ca6ad2,0x39b842e8,0x393e0774,0x3914a83b,0x38f3448d,0x394375b2,0x3992cca2,0x39694d8d,0x3987619f, +0x391bbb68,0x3944acd1,0x3889ee19,0x36a92701,0x37b237ad,0xb6b8dde4,0x37460997,0x35b19d2d,0x355698fe,0xb4e0ac87,0x35d59bee,0x351191d4,0x35cb3bf8,0xb3dd1b1b,0x365279fa,0xb508e97e,0x37479a87,0xb720a805,0x37b45954,0x36fd18df,0xb906aa53,0xb8363020,0x38b9e4db,0x39d479c0,0x3974f364, +0x39a2193f,0x39e21e9b,0x39a0ba4e,0x397c517f,0x396e7ab7,0x394eca29,0x39423f69,0x3972a7f1,0x39973a97,0x39a9c2dd,0x3993d3e5,0x395b83c5,0x39587359,0x38197866,0xb5ae9104,0x37b9f534,0x35d46094,0x36415821,0x35800805,0x338b09db,0x360480b9,0x35125630,0xb59da4d8,0x36242191,0x33913be5, +0x35d63b42,0xb4f643ba,0xb4307fa0,0x36d27cbc,0x369c7703,0x38315f5a,0xb88b15e7,0xb862641b,0x38da3203,0x3a5fb3b6,0x3a06750f,0x39a5a50c,0xb7a3ae2b,0xb978252d,0xb961c4ff,0x3973071a,0x39a001f3,0x399b3f67,0x3887ea11,0x380b3361,0x36a59ceb,0x3731b717,0x37fd2dab,0x36c9b878,0xb725ae95, +0x37c4dd5a,0x3714fa26,0x35ec3c0c,0x36c0f2f0,0x360c2187,0x35ec9e95,0x3581bbda,0x36147f56,0x34efdfe2,0x3513e60e,0x331b3ef3,0x3617471e,0x35151e0c,0x373bfdbe,0xb4bd0fa1,0xb744576d,0xb8dd61ac,0xb8d631b2,0x3a549592,0x3a6e05d3,0x3a597a42,0x3a4842d9,0x3a3d0e7e,0x3a196902,0x39b1361b, +0x393860b0,0x38499f6b,0xb8871aa2,0xb84f33af,0xb82f31eb,0xb7d0bf2d,0xb7f64786,0x383ac3e2,0x3761c7b4,0x38ba9093,0x38e748cc,0xb84f3242,0x37f6db08,0xb610a121,0x3619fe32,0xb6402efb,0x352b9be2,0xb611200b,0xb4c1b29b,0xb5adc483,0xb3c4df52,0xb40abe7b,0x3584a296,0x36368dc0,0xb60ead64, +0xb7a81e96,0x384e3b81,0xb90bd85a,0x38a1928c,0x37ff88a2,0xb81585ca,0x38970fb1,0x3841c5f9,0x38242a65,0x38bf2802,0xb70dd55a,0xb82424e7,0xb6ecdd6a,0x3750afd1,0x37da6529,0x37e9252a,0x3887c2a9,0x38ea9b5e,0x38f60bdd,0x3931f831,0x39159210,0x38cbf2d7,0xb7b4d99f,0x38281239,0xb6b50652, +0x3743b490,0x36a18222,0x3632c455,0x36ee6eb3,0x36b779ea,0x36b50b0f,0x368d041c,0x36889b5b,0x36f8a2f1,0xb66f476f,0x379e26f8,0xb5e4b5b3,0x3867ddd0,0xb8dea4f9,0x3912431d,0x39342b15,0x38d24859,0x38078824,0x38304730,0x3897efbd,0x390ab5c7,0x3882d17d,0x3727be1b,0xb86b578b,0xb85e9752, +0xb84749f3,0xb7b0e1d6,0x3735dc87,0x37f02791,0x38313a42,0x3866113c,0x3875c3fb,0x385954e0,0xb7f2673e,0xb7278d8a,0x3791304a,0xb5466a82,0xb5819080,0xb53075f8,0xb68189af,0xb71e7632,0xb66d083f,0xb5d127a6,0xb603fde6,0x360880cb,0x361579b0,0x376ae2e3,0xb79b2c14,0x380f6d96,0xb8267914, +0x391d38ee,0x38f354f6,0x3903954c,0x391afa27,0x390bac53,0x38c3eb02,0x386d6fb8,0x37eed237,0x3785fd6c,0xb626a9a0,0xb7b215d4,0xb84db8f8,0xb8b2a054,0xb8ab8cf4,0xb8b70d0e,0xb8834e45,0xb897a3e8,0xb821fd31,0xb8b4c40a,0x382e6948,0x375cf83c,0x367f5ea3,0x373be0f9,0x374fe925,0x375b2a1e, +0x36b081cf,0x3807edd6,0x36353d0a,0x37c32d9d,0x371cd7fd,0x37765825,0x37c8736e,0xb68edfc2,0x377b2d94,0x37eb87f2,0xb8fffa63,0x35741485,0xb6df0bbe,0xb75a2219,0xb80fd36e,0xb69db2b2,0x37b3e2f8,0x388729c4,0x38237ab2,0x370ea416,0xb79c9f6d,0xb8314353,0xb8697d65,0xb8a3be54,0xb86e06db, +0xb84b1e0a,0xb85a80bc,0xb843d6fc,0xb80cf5d1,0xb837fbc0,0xb8c3dac7,0x37eaf9fb,0x378e870c,0x37a04336,0xb4f1b444,0x36acfb5e,0xb6f52d88,0x3731811f,0xb7870d7a,0xb6815dd7,0x375193eb,0xb7e1ac60,0x3724c46f,0x36967e09,0xb805eb57,0x385f5624,0xb84b06b6,0x37e6d171,0x37442106,0x37bda14c, +0x37e7a44a,0x37f70b68,0x3782ee9d,0x370c0522,0xb409d384,0x35f10cc9,0x358fe6aa,0xb674b2e6,0xb73eae95,0xb7bcd1f9,0xb7c3e182,0xb7d4b736,0xb7d55fef,0xb7b6a14d,0xb7c8df58,0x35f90a3d,0xb878ca61,0xb90c7077,0xb94653e7,0x3829f394,0xb7c43984,0xb8a0458b,0xb8adaac4,0xb8988bb1,0xb88acac9, +0xb8994ce0,0xb887cfe6,0xb86adbe5,0xb763ed3b,0x382ad059,0xb936931d,0xb906f18d,0xb7a4f48e, +}; + +const uint32_t orange53_rom_AlphaR32[578 * 86] = { +0x3e8ea109,0x3e55ac9d,0x3e8db542,0x3de19678,0xbd1ed16c,0xbdcac0a2,0x3df7b283,0xbad2c51b,0xbe09d494,0xbe10f4f6,0xbe080027,0xbdd3769d,0xbde123d0,0xbe14ab4d,0xbde470d3,0xbc5abf72,0x3dafd495,0xbdf03ce6,0xbcfc625f,0x3d93f399,0x3e786b29,0x3e4cd8b4,0x3e54cca2,0x3e548e04,0x3e5c24e4, +0x3e5da6d7,0x3e5a117b,0x3e5ab53d,0x3e5e3cbe,0x3e5e9d28,0x3e6ceadb,0x3e695073,0x3e76b99f,0x3e6f42bb,0x3e6cd5ad,0x3e63401f,0x3e602f99,0x3e9123b2,0x3e85e3e5,0xbde7a289,0x3e10529e,0xbc0a7ea5,0x3dcdd85d,0x3d97259a,0x3d69256c,0x3e0ee267,0x3d2e18bc,0x3d2d5ffe,0x3d00620c,0x3dbf913e, +0x3d47542f,0xbd861f57,0x3dd8eed6,0x3cd45c1f,0x3da996af,0xbc0cd600,0x3e5a09f3,0x3e759346,0x3e72da2d,0x3e8047f4,0x3e779264,0x3e76bdbc,0x3e894b23,0x3e8d0b1b,0x3e930915,0x3e92beda,0x3ea313b5,0x3e9b4420,0x3ead3f19,0x3eaa8da6,0x3ea7cd33,0x3e992a44,0x3e8be7b2,0x3eab7db9,0x3e7aa3df, +0x3cae8726,0x3e3886d1,0x3d12e3c4,0x3d9c276f,0xbc04591c,0x3de4e28a,0xbb273ca1,0x3e07f937,0xbd1436d6,0x3e229d26,0x3cfea3ad,0x3d6ae979,0x3d114030,0x3da06442,0x3da0308e,0x3d1f3a41,0x3d40432d,0x3e20a61e,0x3e85b976,0x3e6a3746,0x3e8af222,0x3e8713e7,0x3e8e10cb,0x3e92bea7,0x3e934cb8, +0x3e9e0dc5,0x3eabb8e1,0x3ebd6b1d,0x3ed05f33,0x3ee050b1,0x3eda5c7e,0x3ecb5e6c,0x3eac6088,0x3ea3e09d,0x3eb8b873,0x3e60c251,0xbd16d8eb,0x3d868198,0x3cae654d,0x3cf226eb,0x3cbfa2b8,0x3d111f31,0x3d3cd702,0x3d05ccb6,0x3c6c7d4f,0x3d39ad77,0xbc6711bc,0x3d81cba4,0xbc104711,0x3d21b7e0, +0x3d40fa0a,0x3ced65f9,0x3cdd8d04,0x3db08856,0x3e74382b,0x3e507fed,0x3e85e6c1,0x3e843ccc,0x3e8f9572,0x3e95c2d9,0x3e9df475,0x3ea8976f,0x3ebfaf54,0x3ed39604,0x3eeb45bb,0x3f038b7c,0x3f019861,0x3eed6e4d,0x3ec4552b,0x3ea21d37,0x3ec02030,0x3e8890e3,0x3aae4a60,0x3dd51a7f,0x3d77341f, +0x3d5b5c8e,0x3ca6145f,0x3c78190e,0x3baffe62,0x3aefe6c5,0x3d1e6640,0x3c9ac93a,0x3c34fc50,0xbacc7a80,0x3c99b8a3,0x3cd3301b,0x3b1ed80a,0x3dc8b8f2,0xbd4c745b,0x3e03b24e,0x3e5f184f,0x3e67bed4,0x3e8d4216,0x3e8d3b36,0x3e98b936,0x3ea0e2e8,0x3ea70cda,0x3ebc52ce,0x3ed07af7,0x3efce455, +0x3f0dcca4,0x3f1cd097,0x3f1b7bc3,0x3f0c38f8,0x3ed4cf83,0x3ec039c5,0x3edcab5f,0x3ef9aa36,0x3db4845b,0x3d5373e5,0x3da31b58,0x3b5ded85,0x3dce7e68,0x3cab28f3,0x3d457650,0x3cd43193,0x3cacc8f8,0xbbce27b2,0x3c61c5c4,0x3c795ba7,0x3c361ab7,0x3d01856a,0xbc92d66f,0x3d8c278a,0x3d28ca59, +0x3e26ddb6,0x3e7451ea,0x3e84b25c,0x3eac01f0,0x3ebb0982,0x3ed80fd3,0x3ed8a9cb,0x3f01d944,0x3f07582d,0x3f096cd9,0x3f1be64b,0x3f2221a6,0x3f23150c,0x3f179d33,0x3f130ab4,0x3f04670d,0x3f013790,0x3f0ce14e,0x3e1ec18c,0xbe49989e,0x3e558e97,0xbcd028cc,0x3dba9cec,0x3d21a3fb,0xbcce00f2, +0x3d23693f,0x3ae6a5d7,0x3c253bb5,0x3cae8557,0x3c9cf719,0x3c8b8dd8,0x3c4610e0,0x3d862d03,0x3ce77900,0x3d95450e,0xbce56cd2,0x3db1b67b,0x3e947771,0x3e9065dd,0x3ec536d0,0x3eccafe3,0x3ede94c3,0x3ee36905,0x3ee21154,0x3ef024bc,0x3f002b89,0x3f115804,0x3f1cc766,0x3f21ef92,0x3f28821b, +0x3f1b9962,0x3f0e3cc8,0x3ef3efa0,0x3f273fa3,0x3e615f69,0x3e322353,0x3dc639c7,0x3d405368,0x3d979d81,0x3d0ce8b6,0x3cb48028,0x3c16f0c2,0x3c6ecbd1,0x3cd2c258,0x3c7d6a9d,0x3c3ac9a4,0x3d07786d,0x3c533ef7,0x3cf9f9d0,0x3cdca61b,0x3d143ac8,0x3d585cb5,0x3e46cde6,0x3e960227,0x3e9c14e7, +0x3ecd9995,0x3ef1003f,0x3f0bb00e,0x3f214e00,0x3f213791,0x3f17a886,0x3f0caf0e,0x3f0a2811,0x3f11f025,0x3f227d3d,0x3f382291,0x3f420190,0x3f5b8244,0x3f26fd8f,0x3f551734,0x3ed3a718,0xbe139a15,0x3e83e25a,0xbc2fa9e1,0x3cbcad43,0x3b67c9c2,0x3d2a1830,0x3cba62b7,0x3d556ede,0x3ce1ab29, +0x3ca9effb,0x3b76c0a1,0x3cdcc48b,0x3d527e2e,0x3cca3511,0x3d33f806,0x3da78323,0x3c58bd42,0x3d38f622,0x3e9d80f4,0x3e90f193,0x3ec116ae,0x3ef22bd4,0x3f123c37,0x3f255a12,0x3f31bf3b,0x3f314c04,0x3f270525,0x3f175cf5,0x3f184643,0x3f279eb7,0x3f3ca10a,0x3f5020b1,0x3f739ff5,0x3f5d313d, +0x3f67ea87,0x3ed4c761,0x3dfe8ba2,0x3e1d7bea,0xbbd49560,0x3e2512e8,0x3d0128d2,0xbcdf653d,0x3cbdc949,0x3cd4131c,0x3ce6d624,0x3d089bff,0x3c4c96a1,0x3d4032bd,0x3cc8e076,0x3c85d7c5,0x3cf21364,0x3db3b8f0,0x3cc47e7d,0x3e8377eb,0x3e888997,0x3e92ead8,0x3eb46ca9,0x3ec80439,0x3ee8df9c, +0x3f05a1e1,0x3f0fdd32,0x3f19609a,0x3f1d9f93,0x3f21cd3e,0x3f255f2e,0x3f1a3dfa,0x3f2d2eea,0x3f2a7434,0x3f4eed89,0x3f4a1796,0x3f5b4288,0x3ee4a5fb,0xbddf2a2b,0x3e632c1f,0x3da2cb6d,0x3d3edb9a,0x3d6ae07a,0x3e125734,0x3c3c3311,0x3d391430,0xba461930,0x3d06df05,0x3cb10c66,0x3d650960, +0x3c597167,0x3cf732e2,0x3d6645c3,0x3c9f906d,0x3d485e47,0x3d013a74,0x3e93fe29,0x3e63cbe6,0x3e81808a,0x3e9fe593,0x3ec44c53,0x3ef4ad9e,0x3f0bbfee,0x3f162d3c,0x3f246e99,0x3f0b883b,0x3f03612e,0x3f112b43,0x3f0eb6bc,0x3f193239,0x3f39aed5,0x3f2d50e0,0x3f08a61b,0x3eee221b,0x3d994387, +0x3dc63b5c,0x3d44d681,0xbb96540c,0x3d5ccaae,0x3ab85081,0x3d8a321a,0xbd65cbdd,0x3de54ed9,0xbbc3583a,0x3d40846c,0x3ce37307,0x3d0286f7,0x3d27112a,0x3dc4de3b,0x3e0abdc0,0xbd646685,0x3e799fad,0x3e94ef22,0x3e749a3c,0x3e9a54a5,0x3ea3e082,0x3ebbdabf,0x3ec4c640,0x3ec74df8,0x3ec5d8c3, +0x3ec174dd,0x3ec3af29,0x3edddf25,0x3ee8ed48,0x3eea7a76,0x3ee6e78d,0x3ef256b2,0x3efe8d51,0x3effe348,0x3d117eba,0x3e271444,0x3ddb0049,0x3d91d241,0x3e483842,0x3d077763,0x3d80c89c,0x3c3e6ed5,0x3db672e7,0x3baabe2a,0x3da91102,0xbc9fa108,0x3d8b4fe3,0x3d02efc4,0x3d4efa59,0xbc674533, +0x3cff6543,0x3dd55179,0x3c86a11f,0x3e946201,0x3e462537,0x3e76b35d,0x3e826d37,0x3e955c65,0x3e9990db,0x3ea7a29a,0x3eae669b,0x3eb2fa4a,0x3ebc09cc,0x3ec6c15a,0x3ed28dee,0x3ed13ee1,0x3ec3c1b1,0x3eceef69,0x3e9b464b,0x3e9c4fdf,0x3e9dee43,0xbd19c607,0x3e181b44,0x3c77a857,0xbd24b05a, +0x3c43e2fc,0x3dac1b30,0x3d20e495,0x3dbb0d8c,0xbd5ec88b,0x3e238329,0x3d24c441,0x3dc94b48,0xbcdf7fcb,0x3d8f2d1d,0x3dab27be,0x3db95a71,0xbd2722b2,0x3e243b57,0x3e7c7be0,0x3e35b6b4,0x3e565cb1,0x3e43fbeb,0x3e55850d,0x3e620703,0x3e8f504d,0x3ea41741,0x3ebe5d50,0x3ebd302f,0x3ec210d5, +0x3ec32375,0x3ebba78c,0x3eb214ac,0x3eb54cdb,0x3e97d575,0x3e817f88,0x3e9728e9,0xbdcb94f1,0x3e413170,0x3e0abfe4,0x3dfdcd24,0x3e43735c,0x3d148387,0x3e3ca01a,0x3d1e20b4,0x3d49d804,0x3ba2e1e0,0x3dc38c43,0x3d83a68b,0x3daf8cb8,0x3d8e2156,0xbd28c3f7,0x3df8312a,0xbdcd7a05,0x3e6b2a65, +0x3e59a101,0x3e630406,0x3e662b35,0x3e6b1ab3,0x3e691105,0x3e57e803,0x3e735de2,0x3e6c14b6,0x3e78e48c,0x3e8c3fac,0x3e9032d5,0x3ea30b29,0x3ea0fd55,0x3e8a1db5,0x3e8be25a,0x3e949d80,0x3e77ab27,0x3e91d496,0x3da6046e,0xbdaae3d1,0xbe129a95,0x3dd2216f,0xbd02050f,0xbe2e3782,0xbe4c8ac0, +0xbe1bfa45,0xbdf749ee,0xbe0a6596,0xbe2eded5,0xbe318c64,0xbc5fbd0c,0x3e035bfb,0xbdea2abf,0xbd03acb2,0x3dd4a60e,0x3e903222,0x3e69c207,0x3e6ee80a,0x3e6d49b9,0x3e6c4d26,0x3e6b106d,0x3e693d02,0x3e76412e,0x3e7cde15,0x3e841bbe,0x3e873975,0x3e849d89,0x3e8926e2,0x3e86520c,0x3e822e35, +0x3e83438b,0x3e7ff0b4,0x3ea96df9,0x3f177013,0x3ec54e68,0x3eb821a8,0x3ee644f2,0x3edb9c63,0x3ea694c6,0x3ecfee15,0x3ed0a676,0x3eae22b1,0x3ea48b15,0x3e9e9125,0x3e9949a0,0x3e974830,0x3e92fa8d,0x3e99f7bf,0x3ecb883b,0x3ed1bb2d,0x3e93855b,0x3ecba62a,0x3ed1fafe,0x3eaedc62,0x3eb5bbe4, +0x3eba6e80,0x3eb917f4,0x3ec0b965,0x3ec3e9d0,0x3ec25bff,0x3ec44711,0x3ec8237a,0x3ec6e25f,0x3ed17858,0x3ecb7bed,0x3ed77b59,0x3ed12b4c,0x3ed30adc,0x3ed01928,0x3ec8e1a9,0x3ef7eca2,0x3f01d77a,0x3f047cc9,0x3edcd083,0x3eda2841,0x3ed75f21,0x3ee41848,0x3ec88ba0,0x3eb87d36,0x3ed563c9, +0x3ec6fc74,0x3ec9d6a2,0x3ec8c3ea,0x3ec7a2b5,0x3eb0a518,0x3ed74a13,0x3ecbaefc,0x3ecce1ad,0x3ed9ee0c,0x3ee12af7,0x3ed32cff,0x3ee152f0,0x3ee2cbf6,0x3ee1a5c8,0x3ede85f5,0x3ef878d7,0x3f042fad,0x3f086ef6,0x3f03e758,0x3f11aba6,0x3f06fb5e,0x3f185c3c,0x3f16aefd,0x3f170532,0x3f0e61da, +0x3f036a14,0x3f071d09,0x3f0b1cf0,0x3f06edfb,0x3ee7efba,0x3ed34066,0x3ec67bfb,0x3eb3ba00,0x3ea5b507,0x3e9987cc,0x3e93e50c,0x3e9bca9d,0x3e9f174f,0x3e810bf6,0x3e9a6ef3,0x3e91ed78,0x3e99bbc0,0x3eadd811,0x3ea2993e,0x3ec5fdd7,0x3ebeac01,0x3ec4e631,0x3edc7807,0x3ee94aa4,0x3ef55864, +0x3f0134dc,0x3f095422,0x3f0d5e7a,0x3f183219,0x3f2071fc,0x3f27ef2d,0x3f344a82,0x3f430e40,0x3f3e333f,0x3f3a30a1,0x3f2b75f8,0x3f1eb4bc,0x3f02b18c,0x3f08759e,0x3efa14ad,0x3ec7b7f6,0x3eacc5de,0x3e8c3f63,0x3e6ebca1,0x3e7e8ecb,0x3e3f79f4,0x3e2a3eb1,0x3e24a5c2,0x3e208059,0x3e25a4f2, +0x3e2b21ed,0x3e2a4473,0x3e42f8b8,0x3e70b038,0x3e5eda07,0x3e91c313,0x3e9d6c5f,0x3eb1e74b,0x3ebd3c7f,0x3edbe74a,0x3eea8862,0x3efbba9f,0x3f066dce,0x3f1684e1,0x3f1d9945,0x3f29140b,0x3f36b5c4,0x3f44968e,0x3f5e05d9,0x3f5c75c8,0x3f553310,0x3f34f8bb,0x3f2068cc,0x3f1a28dc,0x3f0f504b, +0x3f001332,0x3ec3eaa4,0x3e979bbe,0x3e7ed2ee,0x3e4defe0,0x3e10d86e,0x3dc6d6b0,0x3d9c1e32,0x3d91dce0,0x3d42c82e,0x3d1da532,0x3d32fd02,0x3d8b9b27,0x3db3728b,0x3e05f9f2,0x3e2fb49b,0x3e5029d2,0x3e9155dc,0x3ea11c29,0x3eca0614,0x3ee4e165,0x3ef9ead5,0x3f0dda5c,0x3f19564b,0x3f278eac, +0x3f3a121a,0x3f451bc6,0x3f584acb,0x3f6e86a4,0x3f864952,0x3f857718,0x3f809dae,0x3f5f2f02,0x3f3b8997,0x3f3252bf,0x3f1c84ff,0x3f2b6211,0x3ef2a155,0x3eb8f63c,0x3e95e38e,0x3e774337,0x3e430329,0x3e17fc74,0x3ddf8a4f,0x3df2e002,0x3d6e5f75,0x3dac3e05,0x3d9c3c0e,0x3dd128da,0x3e18fa29, +0x3e19d9e1,0x3e56ea96,0x3e9e8b3d,0x3ebf1d02,0x3f00e6a2,0x3f1b7f8f,0x3f375554,0x3f449e78,0x3f507014,0x3f70d9fa,0x3f757fc0,0x3f7f388d,0x3f83abf1,0x3f992b8e,0x3f9b8ca2,0x3f951c86,0x3f8998b5,0x3f84972f,0x3f8042db,0x3f5f4400,0x3f63482d,0x3f449090,0x3f2976d0,0x3f0a5616,0x3edb5e26, +0x3eb7c0ca,0x3e81280b,0x3e286b39,0x3e1c919d,0x3dd587d0,0x3db9f6c0,0x3dc5664f,0x3d9abdb2,0x3dbe3777,0x3dedb6b7,0x3e24e5f5,0x3e73a77f,0x3e951b5f,0x3eabad6b,0x3edb9d0a,0x3f03f980,0x3f18bce0,0x3f291dc1,0x3f4a26ee,0x3f6131b7,0x3f83168c,0x3f8bc20d,0x3f9b6797,0x3f9c27ad,0x3fac27d2, +0x3fb06f44,0x3faa8914,0x3fa47e6e,0x3f9c6dc1,0x3f99bbe3,0x3f8a0abc,0x3f7e634a,0x3f71b565,0x3f506c31,0x3f1b2b7d,0x3f0eb570,0x3ecca58c,0x3e9883cd,0x3e5c4147,0x3e138560,0x3e07f7c8,0x3e1f0f67,0x3dff8137,0x3dfaf28c,0x3e11942f,0x3e28daba,0x3e50a708,0x3e89db7b,0x3ea58cff,0x3ecb0909, +0x3ee1e05d,0x3ef8865c,0x3f154c5a,0x3f2acaa5,0x3f3920b7,0x3f47f675,0x3f702b7a,0x3f871ed9,0x3f954d10,0x3fa9ab46,0x3fafe03b,0x3fab4f03,0x3f9a45dc,0x3f8f8838,0x3f87d205,0x3f77a4be,0x3f85e42c,0x3f4b1fcd,0x3f7aed48,0x3f5701fc,0x3f1d484e,0x3f05fc69,0x3ec5a959,0x3e98827a,0x3e5f0047, +0x3e3504f5,0x3e4066e6,0x3e8f61c8,0x3e12ec2a,0x3df9decc,0x3e34c4c9,0x3e60ac03,0x3e810e92,0x3eb7262e,0x3e9b8e5f,0x3ebdbe4d,0x3ee63bb1,0x3ed85aec,0x3f01585f,0x3f2108ad,0x3f2a42d2,0x3f403874,0x3f4c3616,0x3f748f9a,0x3f89e007,0x3f9a00f3,0x3fa37c62,0x3f9e5a0e,0x3f9a0ab7,0x3f83cc74, +0x3f6ea55a,0x3f441fa3,0x3f5cd61f,0x3f229f51,0x3f6ac06b,0x3f68e804,0x3f070ebe,0x3f095411,0x3ea965c5,0x3e9ea06c,0x3e23bd2b,0x3e5ef345,0x3e4125fe,0x3ea39acf,0x3e4fa900,0x3e00cdf6,0x3e5bd4a8,0x3e6a68c1,0x3e81b3be,0x3e9b465f,0x3ed29e57,0x3ee183bc,0x3ee4baaf,0x3eeb06f2,0x3f03bde8, +0x3f0d1984,0x3f32b927,0x3f4d97bc,0x3f613f54,0x3f760499,0x3f85a916,0x3f885f5b,0x3f9a19b0,0x3fa4034e,0x3fa65900,0x3f8e41d7,0x3f6b1469,0x3f28196d,0x3f4f169e,0x3f391732,0x3f54d6e9,0x3f73d961,0x3f17dd22,0x3efcd7d7,0x3ebb7037,0x3ecf7a70,0x3eb91415,0x3e8be148,0x3e87eb1d,0x3e68456f, +0x3e5316e9,0x3e43c855,0x3e70e0cf,0x3e8d7aeb,0x3e98d159,0x3ec7902c,0x3ebf11ee,0x3efd0a99,0x3f0878a1,0x3f17de03,0x3f19781d,0x3f0a463b,0x3f202d19,0x3f2ab50c,0x3f4939fb,0x3f5df42f,0x3f75a0a8,0x3f85739b,0x3f9197ca,0x3f953803,0x3f9e6fb3,0x3f94571a,0x3f8d2920,0x3f75d0d3,0x3f78b62b, +0x3f5ea118,0x3f4e3205,0x3f4f7c2d,0x3f27b8a3,0x3f08c423,0x3ee93ebc,0x3ebf3b49,0x3e9b5519,0x3e9f7c75,0x3e384ec3,0x3eb658f1,0x3e41d0a5,0x3e7001c2,0x3e78883e,0x3e8d716b,0x3ec0d4a4,0x3ee2659d,0x3f053c7a,0x3eea57f6,0x3f202db5,0x3f2a4450,0x3f22ebe2,0x3f13f707,0x3f1d1350,0x3f2f81a0, +0x3f47a2d9,0x3f5cfaac,0x3f7ef524,0x3f8d9bdd,0x3f92c7e6,0x3f97b0f5,0x3f94838b,0x3f939ffd,0x3f8bd825,0x3f7b842f,0x3f78d12c,0x3f5f9fe1,0x3f567d8d,0x3f4a7025,0x3f261431,0x3f06ea17,0x3ef9cb95,0x3ed667c6,0x3eac530b,0x3eaca3af,0x3eb569d9,0x3e9d456b,0x3eabb76b,0x3e828798,0x3eb37f9e, +0x3eac939c,0x3eb62292,0x3ed563fa,0x3ef727a3,0x3f1884e3,0x3f0e7814,0x3f2a6459,0x3f1ed60a,0x3f2a79c1,0x3f2c046d,0x3f3517b7,0x3f417d1f,0x3f52fc11,0x3f62c6d4,0x3f756070,0x3f829241,0x3f84dd74,0x3f88c821,0x3f8859f8,0x3f850051,0x3f7d6dcc,0x3f707ad2,0x3f54a23d,0x3f4b95e5,0x3f21c63c, +0x3f28ef57,0x3f127132,0x3ef21e4f,0x3ee189fe,0x3edd847d,0x3ecdbd21,0x3edd48a1,0x3ec33ba6,0x3f0e3433,0x3ebf400c,0x3f0027b7,0x3ebc8535,0x3f0032f6,0x3efabc3d,0x3f08f9ad,0x3ee0bd56,0x3f27c39e,0x3f25d40d,0x3f2c9c49,0x3f307fee,0x3f38570d,0x3f434c6b,0x3f4aff32,0x3f54061c,0x3f5b6c0d, +0x3f60ad6a,0x3f65cb2a,0x3f6f2527,0x3f78de59,0x3f6bd2e3,0x3f6b87d6,0x3f69d2cb,0x3f5bb810,0x3f406aa0,0x3f4d3d00,0x3f1cd032,0x3f31a1e4,0x3f2ded76,0x3f3184d1,0x3f3b8e4f,0x3f0c3fe6,0x3f2ac65e,0x3f19d11a,0x3f16e925,0x3f0ecffa,0x3f1d0dbf,0x3f125d6e,0x3f21a47d,0x3f25ffc0,0x3f07c4c4, +0x3f326d05,0x3ef49697,0x3f37e174,0x3f2f74d3,0x3f3cd0ee,0x3f3cfae1,0x3f428613,0x3f3f250f,0x3f39417b,0x3f4b948c,0x3f46ddcb,0x3f4e378b,0x3f58ca8f,0x3f4e2199,0x3f58c365,0x3f5ae3e5,0x3f410220,0x3f45b841,0x3f4e6218,0x3f1edccf,0x3f24965b,0x3f26c0a6,0x3f07fdf1,0x3eadeef1,0x3f22b3e6, +0x3f0ed0b6,0x3eb5413d,0x3ea41d08,0x3ead0da6,0x3eb37ed6,0x3eaf9eb0,0x3ea476c2,0x3ea5b648,0x3f12285e,0x3f2431ee,0x3ea7e258,0x3f0e01fe,0x3f27efae,0x3f1c315e,0x3f183bb3,0x3f1c5971,0x3f1ca97f,0x3f1f314b,0x3f2017de,0x3f1e2ac9,0x3f22ad9a,0x3f1fad9b,0x3f227998,0x3f242566,0x3f233b19, +0x3f279689,0x3f26a7e9,0x3f21f8fb,0x3f254003,0x3f252aae,0x3f7a646e,0xbcf8234c,0xbd553190,0xbdcbda9c,0xbcbcfa06,0x3e0a8043,0x3e9bd38f,0xbcc94f54,0x3dd034a3,0x3e9c51b1,0x3ea43483,0x3ea83ef5,0x3e9bec42,0x3e9e6dc2,0x3eb5d571,0x3ea136d8,0x3ddbd7b3,0x3b8851e4,0x3eacbbdb,0x3e163560, +0x3cf70e43,0xbd8638d2,0xbd0f90f1,0xbd437293,0xbd530083,0xbd5c910d,0xbd5b3bf5,0xbd4d8c67,0xbd4fb165,0xbd55325e,0xbd5bb9d1,0xbd86a4d9,0xbd9178e5,0xbdb161ea,0xbd9d68b8,0xbd9b51b3,0xbd93878c,0xbd903f8a,0xbd6351db,0xbdbb6310,0x3e8c7756,0x3d38d79e,0x3e3f12ba,0x3d78602d,0x3d938816, +0x3e038e54,0x3cd76927,0x3dcb0ca6,0x3dffc005,0x3dd5555f,0x3d880c3b,0x3e0274d2,0x3e7d6b61,0x3d819125,0x3e165b42,0x3dd4cce0,0x3e2e62f8,0xbd1ccb0c,0xbccb7e65,0xbd181487,0xbd5d4531,0xbd4c9848,0xbd41329e,0xbd3bfd47,0xbd2c2225,0xbd3e4ef9,0xbd680f7b,0xbd9d1c2d,0xbdbef68c,0xbe1aaa7a, +0xbe09a943,0xbdf83176,0xbdaad375,0xbd851764,0xbddcf54f,0xbd1fcff1,0x3df9f168,0xbcbac17a,0x3dd0e664,0x3da3d9a4,0x3e0fae9d,0x3cccddaf,0x3dfdf14a,0x3bad6de2,0x3e081943,0xbceb4d89,0x3e02b98e,0x3d5690f4,0x3deb8fa7,0x3d936c20,0x3d908b4f,0x3e19b5e0,0x3de62cb5,0x3d7848c3,0xbd1747a3, +0xbcccca28,0xbd994abd,0xbd8d221a,0xbd917012,0xbd558cc8,0xbd2f2562,0xbd57b993,0xbd817234,0xbdf74c52,0xbe3bcd42,0xbe901c8f,0xbe75bc30,0xbe62e73f,0xbe1e5393,0xbe02dba4,0xbd6c8363,0x3a980874,0x3e1acd83,0x3da980fd,0x3dcb1f9a,0x3df53bce,0x3e05ffa9,0x3ce2c7cc,0x3d4a03a9,0x3d80a580, +0x3deaa90b,0x3da82fdb,0x3df56ea7,0x3d8562d6,0x3e07d1ce,0x3de1d358,0x3dd48ba3,0x3e1cfd1b,0x3e0c0bb6,0x3dceb243,0x3bb48a7c,0xbb925e33,0xbd6d94ba,0xbd7308f0,0xbd571e3f,0xbc9a29f7,0xbbd9b89e,0xbaac9c80,0xbd4aa3f3,0xbdbac50c,0xbe4dc4c3,0xbebec90d,0xbea30b15,0xbe8e5987,0xbe05b6e6, +0xbd742158,0xbdcb20af,0x3c87dc72,0x3e25c2a3,0x3d85dec7,0x3d974ca0,0x3dc0d9cd,0x3dd553c1,0x3da4428c,0x3d9c3634,0x3d549f2e,0x3d11aa0d,0x3d50f6ef,0x3d66d4d0,0x3d9e8390,0x3d93e9cb,0x3db9aecb,0x3dfe1547,0x3dbffd42,0x3e5840d0,0x3dcbc5c8,0x3cdefe83,0xbc546f5c,0xbd98f635,0xbdb0fc5c, +0xbd89f778,0xbd2deca7,0xbb96f8de,0xbcbd299e,0xbc9741fb,0xbe266c0f,0xbe9957ee,0xbf05b030,0xbee6ce41,0xbed1b482,0xbe75ad33,0xbe1c74eb,0xbe56e3aa,0xbecbedca,0xbdc05191,0x3d8df079,0x3ce9610e,0x3da7a0a3,0xbc6a35a3,0x3d66e9d8,0x3a8a578b,0x3d1e85b5,0x3d70a0c5,0x3dd0352d,0x3dc70acc, +0x3d9e99b2,0x3dcebd94,0x3dc00e98,0x3e2da7bd,0x3e12d283,0x3e2e2cfa,0x3d797a00,0xbceb58e4,0xbdc0ba48,0xbe54f194,0xbe5869a6,0xbe8881aa,0xbe5a2248,0xbe7332a9,0xbe5dcc4d,0xbdf06f50,0xbed89352,0xbeea7a42,0xbedc360b,0xbeb4a1d2,0xbeb045bc,0xbeb4270a,0xbea000a4,0xbf160092,0x3b06b4df, +0x3ee533fe,0x3ce76e17,0x3e8347f2,0x3da06628,0x3e25d202,0x3e468ec4,0x3dd3ad55,0x3ddb05dc,0x3df4caa4,0x3d51009c,0x3ced5266,0x3d1e7b8c,0x3d7761db,0x3d21e9e7,0x3dc33185,0x3de40ffc,0x3e7f6ece,0x3e11ca66,0xbd67d2f5,0xbdb32162,0xbe8872c1,0xbeac8e5d,0xbee5e4c4,0xbefcf257,0xbef3a281, +0xbedae49e,0xbeae7a81,0xbf00e7c1,0xbf0ce04c,0xbf0e39b9,0xbef5e382,0xbeec0eff,0xbf035987,0xbf109fc3,0xbf2ab687,0xbe694f54,0xbdc3eb28,0x3d8fa7cf,0x3d9ef22f,0x3db39d9e,0x3e1cf6f4,0x3e16e34e,0x3e1700a6,0x3df02932,0x3e364b93,0x3e065405,0x3e0ade61,0x3dd2fb7f,0x3dc30557,0x3ddf16ba, +0x3e1055c4,0x3e1b2f54,0x3df5429d,0x3d02873f,0xbd82be2a,0xbe1f6b9c,0xbeb71828,0xbeddcebb,0xbf096f74,0xbf2b7f27,0xbf335421,0xbf2adac4,0xbf1429eb,0xbef4f150,0xbebff456,0xbeb36c53,0xbe4bfa7b,0xbe6adaec,0xbec3727b,0xbf07d8fd,0xbeb9b3f2,0xbee268a7,0x3e62aecd,0xbd9ab924,0x3e048499, +0x3e231f2d,0x3e2063d1,0x3e0620fc,0x3dff840b,0x3df989ff,0x3e8a8f7f,0x3e29d934,0x3e282c68,0x3e17e35c,0x3debe803,0x3e08fde9,0x3e1ce779,0x3e2929ae,0x3e507b90,0x3dd07cfe,0xbd98c699,0xbe214586,0xbea1c8df,0xbed94a7d,0xbf0cf8ea,0xbf1f2c26,0xbf3aced2,0xbf3998b8,0xbf2613ea,0xbeeb07ba, +0xbe895e13,0xbe8903b7,0x3c54fff8,0x3d6a51a2,0x3e09c268,0xbe6a8503,0xbdc46cab,0xbe5f4e1d,0xbdbf8dac,0x3e257829,0x3e1c7211,0x3dd1d7df,0x3e1abe17,0x3e6958d5,0x3e076c02,0x3e2c7713,0x3ea9b1fb,0x3de4affd,0x3de0e045,0x3df87588,0x3e1bfb99,0x3e531c0a,0x3e66e342,0x3e0d2f98,0x3e3f689d, +0xbc57ccdc,0xbd640d6e,0xbdc97243,0xbe487b75,0xbeab2370,0xbee5046d,0xbf0688dd,0xbf129ece,0xbf0e9d07,0xbed7999c,0xbedd31b0,0xbea4cde2,0xbe8a72a2,0x3ca7632f,0x3e7da689,0x3f13ff5d,0x3c8f9134,0xbe30cb18,0xbe4bf78a,0x3d1b3b9c,0x3c1d11ed,0x3e0b94c2,0x3e3d47b8,0x3dbc2fa2,0x3cb7112c, +0x3e3c808c,0x3e2b1da0,0x3e94eafb,0x3e42d3ee,0x3e4e79e4,0x3e1b2c0e,0x3e61ba7a,0x3e6902eb,0x3e30b033,0x3e9b0395,0x3e5d5e39,0x3e661e03,0xbdee199c,0xbdaa94dd,0xbdb63c5e,0xbe1db1fd,0xbe778269,0xbec7d4e4,0xbee0e3fc,0xbefd6306,0xbf042640,0xbecb1995,0xbe803019,0xbe51efac,0x3cfa73bb, +0x3d7504de,0x3d688e5c,0xbd704655,0xbdf796ed,0xbe09f2a0,0x3e0edfdf,0x3e0a824b,0x3e3491d8,0x3e5e0c37,0x3e286dec,0x3e51d64e,0x3e31bdec,0x3ebb63f6,0x3de15305,0x3e8586fb,0x3e38c156,0x3e660eea,0x3e5e928a,0x3e47a1ef,0x3e164239,0x3dbf587b,0x3ede16e8,0xbd283a1a,0xbdbfabbc,0xbbd1f04c, +0xbda1d7cc,0xbdbe9451,0xbe30e6b8,0xbe747dcc,0xbe9c059c,0xbea77703,0xbe97ad6a,0xbe8cbabd,0xbe6d4792,0xbe0c381e,0xbbcf0b7b,0x3d920664,0x3dc8f372,0xbd12ebb3,0xbe1841ce,0x3e870865,0x3dc5a057,0x3e4b4bc4,0x3e81f1f2,0x3d9d94ad,0x3e786c92,0x3e56e391,0x3e8fad24,0x3e2e6374,0x3e8a25c7, +0x3e3ac495,0x3eadc1d3,0x3e2f0b4e,0x3e7c22c2,0x3e76c79d,0x3ea041c9,0x3e7927cf,0x3e0e4c64,0x3e96ddc1,0xbdb1581f,0x3d8f6267,0x3d159ca3,0x3c6d3b79,0xbd196921,0xbd828695,0xbdd79f17,0xbe1582ba,0xbe23e36b,0xbe254500,0xbe19ffff,0xbde938d0,0xbd733249,0xbb40b1f5,0x3d59174b,0x3d9e9595, +0x3c939653,0x3c694acd,0x3f000b37,0x3e44e379,0x3ebf7043,0x3eda3319,0x3eb7a77f,0x3e4d2628,0x3e80d025,0x3e2f942e,0x3eb224e4,0x39164309,0x3e884461,0x3dcb5fb5,0x3ec9888f,0x3e497ed3,0x3e5848e8,0x3e52300d,0x3eea0980,0x3da56b18,0x3d290751,0x3e045cf1,0x3df869cd,0x3dfa0247,0x3dcb0608, +0x3da624e2,0x3beec429,0xbc7fa81b,0xbda70eae,0xbd8af773,0xbd886ec7,0xbd95e872,0xbd2dd634,0x3c506616,0x3d48d87c,0x3d945dfe,0x3d466799,0xbdae15b1,0x3f1aba5b,0x3ddea8a0,0x3df6a4ab,0x3e41f90e,0x3b7927d1,0x3eb4f111,0x3da33c86,0x3e9ac5f1,0x3e96ad34,0x3eb5713e,0x3e481aae,0x3e85984f, +0x3e3cffab,0x3e4de7dc,0x3efd2b8c,0x3e213a6e,0x3f1d7996,0x3d810627,0x3dc01e03,0x3de52b85,0x3df45a7c,0x3e14927f,0x3e209d8d,0x3e2b2ca7,0x3e297a73,0x3e0cfccd,0x3df828a4,0x3dde0d99,0x3d8fa01d,0x3d5110ca,0x3d3fd1b1,0x3cfa4deb,0x3c940d63,0x3c0b5428,0xbd03cadb,0xbdd6fe5f,0x3e1ce8ba, +0x3ee614d1,0x3f2c0912,0x3db49720,0x3ea2366f,0x3f2bd8d6,0x3f393749,0x3f269501,0x3f1a9915,0x3f2086df,0x3f2fd738,0x3f307b46,0x3e8d4573,0x3d1c9e36,0x3f239ac5,0x3ea99855,0x3d8861df,0xbddbad5c,0xbcdc6433,0xbcdf2290,0xbcc6c65d,0xbc9504b4,0xbc766639,0xbc4f54f7,0xbc7e1eb4,0xbd04cb79, +0xbd104380,0xbd3b512c,0xbd56695e,0xbd775819,0xbd692ba2,0xbd54dd21,0xbd3a7367,0xbd2e0cc2,0x3b4b0100,0x3dfeb4e0,0x3dd10390,0x3e11046b,0x3d8fcea2,0xbccfdd77,0xbda9141e,0x3d92c4a6,0xbb3bca77,0xbdbc1db7,0xbdc9668e,0xbdc45439,0xbd9d1e76,0xbda4cfb0,0xbdcddb19,0xbda7dbc8,0xbbced157, +0x3d58374f,0xbdb28e8c,0xbcaa8083,0x3d28d74a,0x3de948bf,0x3dc4da74,0x3dcaaeb7,0x3dc527d5,0x3dc3c3fa,0x3dbb8553,0x3db19ffe,0x3da7cd4b,0x3da127c5,0x3d9d92cc,0x3dad4737,0x3db36983,0x3dc8fd17,0x3dce257b,0x3ddc1a2b,0x3ddd20ab,0x3de1bfdc,0x3e19ca47,0x3e243387,0xbd8f234e,0x3db021a3, +0xbc7c7c77,0x3d582a79,0x3d25dfa7,0x3cd6c76a,0x3d98424e,0x3d0d78ab,0x3d07ad14,0x3d103b1e,0x3d752449,0x3ce37c1c,0xbd00c770,0x3d7eadd6,0x3c9fdf94,0x3d3f9438,0x3c733c72,0x3e009ce0,0x3e047ad0,0x3e02c0f2,0x3df57e28,0x3ddadabe,0x3dc7d624,0x3dc6e41c,0x3d9d82ad,0x3d9603c9,0x3d97604f, +0x3da2e5f3,0x3dacbb6d,0x3df81048,0x3e01b08d,0x3e0594c1,0x3de934ea,0x3e02b49c,0x3e56cd96,0x3e2da5f4,0x3d3a4c2d,0x3e119e86,0x3d54598a,0x3d7b0a33,0x3c1bff49,0x3db9f5f4,0x3cc1668a,0x3dc9c1cf,0x3d149adc,0x3df6e8e1,0x3d4d1208,0x3d701abc,0x3d5ddaea,0x3d91ab31,0x3d8569b3,0x3d3bb575, +0x3d5a639b,0x3dda5c8f,0x3e1d65d1,0x3e077c9e,0x3e072680,0x3de204cf,0x3dafcaee,0x3d8ca74c,0x3d0d8ba6,0x3c8d5366,0x3c55fc7b,0x3d0bcc8e,0x3d90029b,0x3dff09be,0x3e126d3c,0x3e2daef0,0x3e26208f,0x3e427141,0x3e816118,0x3e542b1c,0x3d9cee26,0x3e08e6c8,0x3d70e75e,0x3d471ce7,0x3d1dc0e4, +0x3d9965b4,0x3d900f2f,0x3d8a8f3f,0x3d8f960e,0x3da78510,0x3d6099f0,0x3d8afc3c,0x3d5db091,0x3d8efb72,0x3d81b3cb,0x3d90c444,0x3db26c0c,0x3dec0938,0x3e2492b4,0x3e1c5375,0x3e0527ed,0x3ddb8a6e,0x3dae01dc,0x3d586ecb,0xba2b0d63,0xbc9df954,0xbbcea951,0xbcaaaca6,0x3d2857d9,0x3e06433b, +0x3e165bdc,0x3e250a90,0x3deeb6ca,0x3e322b89,0x3ea4b650,0x3e7834fe,0x3de31edf,0x3e32d8ab,0x3e0e71bd,0x3dbfe5bb,0x3d720376,0x3daf25e2,0x3d5d9925,0x3d870da8,0x3dcba0b7,0x3d955209,0x3d8f782e,0x3d7416de,0x3da39142,0x3da771fc,0x3d8d9b20,0x3db9ae0d,0x3d996ccf,0x3e116ef1,0x3e2a8247, +0x3e22182e,0x3e233909,0x3dfdcae1,0x3d82c79c,0x3d2d402d,0xbceb00b8,0xbd60295c,0xbdc5e0aa,0xbd1619f5,0x3c85c8b1,0x3dfbcfbb,0x3e229f58,0x3e60831e,0x3e5da5b4,0x3e95cf03,0x3f1a6491,0x3f6293c2,0x3ea9c4a1,0x3e841545,0x3e8a714f,0x3e44597d,0x3e8a13c1,0x3dc3d466,0x3e05c4a9,0x3d94c59c, +0x3d8af15a,0x3d85a7e8,0x3d8b307e,0x3d3c683f,0x3d5a59bf,0x3d5cfddd,0x3da1215b,0x3d94b4da,0x3d2c7963,0x3d8d818b,0x3d599e71,0x3cd33387,0xbd8ad75f,0xbe4a0e66,0xbe581c58,0xbecdc3fd,0xbeca5ca2,0xbedf8972,0xbef742ac,0xbe7aa3bc,0xbcc814d9,0x3e937765,0x3ec5b976,0x3efa9355,0x3ef307d1, +0x3f12e505,0x3f75109c,0x3e96bf8f,0xbe6d4034,0x3e8fe4fc,0x3b9fd68e,0x3e2fe8dc,0x3da0f516,0x3daff1c3,0x3ddafdc6,0x3da9df85,0x3de6b2bb,0x3d98b1c5,0x3d776871,0x3d523a94,0x3d7d39ce,0x3db48db9,0x3d1f5138,0x3d345438,0xbc968eea,0x3dbea6c1,0x3e2efb79,0x3e1e49e2,0x3e547c8e,0x3e3238a8, +0x3e135c2a,0x3d20bf57,0xbd96a403,0xbe46605b,0xbe8d958c,0xbe06c03e,0xbd11dfd7,0x3e64db6c,0x3e78f77c,0x3ed2e20f,0x3f255b8a,0x3f4d3638,0x3f784e51,0x3efd9685,0x3e9bfd56,0x3e5fb702,0x3de9b4ba,0x3e031670,0x3d9b7ccd,0x3db3d434,0x3dc0156f,0x3de7bbe7,0x3e12ec53,0x3dade3e0,0x3d90f5b5, +0x3ce096cd,0x3d92138a,0x3d91737f,0x3d630a67,0x3d9540f4,0x3e0202ed,0x3e5cc5d4,0x3e911008,0x3e9a68e4,0x3eb15217,0x3eb2b6ac,0x3eb49d14,0x3e93262c,0x3e614288,0x3dc906de,0xbc811f5b,0xbd1a1c31,0x3d8e49de,0x3ec38099,0x3e84ee30,0x3ec32667,0x3efad51a,0x3f45b25a,0x3f1033b7,0x3f393dca, +0x3dd53c4e,0x3ea0f97d,0x3e032807,0x3dd07f86,0x3db8e397,0x3dd5af2f,0x3dddd6d2,0x3ddbd399,0x3e2dec10,0x3dd2f4de,0x3da2e51d,0x3d69d929,0x3d8af0b7,0x3d9b4063,0x3d57670e,0x3e17bb64,0x3e012f47,0x3e588855,0x3ec9bfc2,0x3ed1663d,0x3ed82bb0,0x3edf4230,0x3ee0666e,0x3ed8b86c,0x3eda2724, +0x3eaad1e6,0x3e777e26,0x3df5c56c,0x3dfa39a9,0x3e49001a,0x3db3345b,0x3d94ed4c,0xbdcf8412,0x3eb3c3b8,0x3dac046e,0x3ec5565f,0x3eafd82e,0x3e36b13c,0x3e15156d,0x3e13d398,0x3e192f67,0x3e02c7ee,0x3e043a85,0x3decc816,0x3e19fa08,0x3dbba932,0x3dc15a86,0x3dbb0140,0x3db51ad2,0x3d975965, +0x3d94a701,0x3dc5db4e,0x3d993b33,0x3e81dba7,0x3ea61d31,0x3eb5e2e8,0x3ec388b2,0x3ea8baa4,0x3eb365e5,0x3eca373b,0x3ebc35a4,0x3e9f3b53,0x3e28e4a6,0x3d6b9954,0xbd8d7d71,0xbdd3c0bf,0xbdf51761,0xbe371141,0xbea54203,0xbd4f60fd,0xbdc7d9fa,0x3e228b50,0x3e574279,0x3e37cadf,0x3e1b4563, +0x3e1d3204,0x3e047fd2,0x3d3948d7,0x3d83dc75,0x3d74365a,0x3d92139b,0x3de42fea,0x3dcf66d4,0x3d21e11a,0x3b49ba2f,0x3bbaf4b5,0x3cb9983d,0xbccaf949,0xbd0498a6,0xbcd3b3a0,0x3e44f9b9,0x3e7c95b1,0x3ed12d3e,0x3ecf6a4a,0x3ed11569,0x3ec25c73,0x3eb5cbca,0x3e89d55b,0x3e40a4b4,0xbd36f974, +0xbe2bc9ce,0xbe8b6234,0xbebb2f27,0xbeaa806b,0xbeaafc51,0xbe620ebb,0xbe4b33fb,0xbd74d329,0xbcc53bfc,0xbc74405a,0x3c1b62fd,0xbbde89cf,0x3c93f590,0x3d92de75,0x3cfa021a,0x3d2a6498,0xbbdd062d,0x3da5a25d,0x3db03457,0x3d6e3cd9,0x3d4ce7ff,0xba2a52d0,0xbd2f4061,0xbc6e635e,0xbddb17be, +0x3bd6ca2f,0x3d84be2c,0x3e04e3be,0x3ea90f7a,0x3eac5455,0x3ebbbd94,0x3e9ec07c,0x3e83214f,0x3e4522d2,0x3d7b28b2,0xbcb8b592,0xbdf31b7b,0xbe82575a,0xbea3ca31,0xbea84c3f,0xbe9f9257,0xbe843c09,0xbe6d7fe5,0xbe35c5c2,0xbdeb7321,0xbda487a2,0xbc84290b,0xbbf53ba1,0x3bef97eb,0x3d5aadcd, +0x3be801e7,0x3bc7426b,0xb94fcfd4,0x3c4ef7fd,0x3d0ec667,0x3cae5839,0x3c62db5b,0x3c2b9f42,0xbd52d6b9,0xbd050f01,0xbd4cce11,0xbdb77c15,0x3daf8638,0x3dc53dfe,0x3e31700a,0x3e65594b,0x3e85f633,0x3e8da4ce,0x3e7cd776,0x3e465730,0x3e0de72e,0x3d25d890,0xbd24f05b,0xbe231379,0xbe712a62, +0xbe9641ab,0xbeb7cee8,0xbe940b25,0xbe789654,0xbe68c534,0xbe45afda,0xbe17f02c,0xbdd37a98,0xbd644db5,0xbd4721f2,0xbd24dce6,0xbcb94b15,0xbcbd4562,0xbd10d343,0xbd6c35ef,0xbd00dcd5,0xbd5cf543,0xbd364eff,0xbd78cc80,0xbd2bdffd,0xbd893792,0xbd5af0ce,0xbd51d522,0xbc3acd9b,0xbd039937, +0xbae1c2c1,0xbaf01bbb,0x3d019cc1,0x3d8a1202,0x3d19085d,0x3cd22fb5,0x3d091636,0xbd501c1a,0xbddb6864,0xbe2ebfc4,0xbe441d53,0xbe7cedb3,0xbea0286a,0xbe8a0027,0xbe71e61f,0xbe78733f,0xbe6732bd,0xbe5b9140,0xbe6c4114,0xbe74ae82,0xbe5ee15e,0xbe2f1d86,0xbe3c5f21,0xbe41012e,0xbe36cf43, +0xbe279a23,0xbe19a4cf,0xbe10b4c2,0xbe1c8675,0xbe331b10,0xbe27600c,0xbe3ca2ea,0xbe2ec9a9,0xbe52765a,0xbe61005b,0xbe6b185e,0xbe7e7346,0xbe870640,0xbe935d97,0xbea1f568,0xbea6a0d8,0xbeb112e5,0xbeb1c05b,0xbeb49641,0xbea7155d,0xbeaa9eba,0xbea198f0,0xbe85b072,0xbe7313e5,0xbe7df368, +0xbe38e41b,0xbe3d1091,0xbe66a8bf,0xbe5dc779,0xbe1c8ea5,0xbe400638,0xbe4f3233,0xbe2f903f,0xbe2832fe,0xbe20e8e9,0xbe1e7280,0xbe22e930,0xbe271e93,0xbe276117,0xbe516380,0xbe3d514f,0xbe0d086a,0xbe4e4482,0xbe45c130,0xbe108c36,0xbe14d74e,0xbe1ba6cc,0xbe1c6e7f,0xbe1d2b69,0xbe199936, +0xbe146ceb,0xbe15169d,0xbe137804,0xbe18d392,0xbe1ce556,0xbe26c4fb,0xbe2e8d95,0xbe319664,0xbe360488,0xbe3ff31d,0xbe427219,0xbe93acdf,0x3e297981,0x3dd9d218,0x3da7741c,0x3de8feb9,0x3e12b883,0x3e0c7d1f,0x3dd9466c,0x3dff2d1d,0x3e0ec2b4,0x3e0d1e5f,0x3e0bbb61,0x3e052648,0x3e02cf7b, +0x3e0505d6,0x3e00c421,0x3dfd8203,0x3de91cb1,0x3dfed854,0x3e043df4,0x3deb434e,0x3db5b55d,0x3dc821b1,0x3dcd5501,0x3dd28987,0x3de0d214,0x3de68b5f,0x3de1cd24,0x3de1e22c,0x3de4569c,0x3ddb3337,0x3dd96736,0x3dc52783,0x3dbc0e4c,0x3dac324e,0x3dace470,0x3dc18776,0x3dc6a119,0x3df1ed6b, +0x3df37021,0x3e6f6fbe,0x3e0e5fc0,0x3e38e0b9,0x3e115d3c,0x3e10801a,0x3e0a6157,0x3dd23dc3,0x3e0b98ec,0x3e0e4057,0x3e0920ba,0x3e03fd59,0x3e0767e1,0x3e0c60cb,0x3e0aa866,0x3e0ca341,0x3e060705,0x3e137aa1,0x3dee0482,0x3dedf89b,0x3e0252d7,0x3e0e1904,0x3e0e0d0d,0x3e0c1c6d,0x3e19da06, +0x3e1db542,0x3e170731,0x3e04cd71,0x3e1247a5,0x3dfb1982,0x3def2e1d,0x3dce7597,0x3de96129,0x3e148884,0x3e076c5a,0x3dcd19ec,0x3e0837a3,0x3e49aca4,0x3e0b6ca0,0x3e2d1752,0x3e09392f,0x3e0c88d9,0x3dc86224,0x3df6d04d,0x3dc59227,0x3e07a97c,0x3de45672,0x3debdb4e,0x3dd81fa9,0x3deb811a, +0x3de6ae6a,0x3e0052ca,0x3df9a87e,0x3e0c4e2e,0x3dd88080,0x3dd88957,0x3e06ce23,0x3e1cf5a5,0x3e2fa58d,0x3e39314d,0x3e362792,0x3e2dca04,0x3e2d206b,0x3e2066ed,0x3e16c41d,0x3e022c6d,0x3dc36d8a,0x3d6110c6,0x3d4343f9,0x3dce7166,0x3dd5bd04,0x3d0e11ea,0x3dc575b9,0x3e79f840,0x3e135c33, +0x3e4efc04,0x3e133a80,0x3de2c10f,0x3dbd03f0,0x3d67252a,0x3da2def8,0x3de0413c,0x3dc2a07e,0x3dcbf106,0x3d9e99e9,0x3dcb8ac3,0x3dd1cb3d,0x3de7fd27,0x3dd5051f,0x3dfc5467,0x3dd0aa75,0x3dd2fa54,0x3e025e5b,0x3e29c880,0x3e3ce3e9,0x3e4331d9,0x3e36e810,0x3e307fc2,0x3e14999e,0x3df4332e, +0x3e1ab3da,0x3e043295,0x3dd25589,0x3d4e2393,0x3d8d5039,0x3e09af95,0x3dce9265,0x3c66a2f6,0x3dddfd98,0x3e75fc14,0x3e13a5a4,0x3e02cb52,0x3df6675d,0x3dee70b1,0x3d981465,0x3d9016de,0x3d61bc1a,0x3dab55d3,0x3d9e8f1c,0x3da02b18,0x3d7e220c,0x3dac1ea0,0x3daf4650,0x3dc10f57,0x3ddcc222, +0x3e001447,0x3db03576,0x3dbe4f15,0x3e067ae9,0x3e3043ff,0x3e4ba822,0x3e63488a,0x3e467646,0x3e3b44f1,0x3e2f1217,0x3e2a097a,0x3e1902bf,0x3e0411a4,0x3dad8b2c,0xbbca923a,0xbd27b155,0x3d54a03f,0x3c40c5d9,0xbdf1c466,0xbe950b55,0x3ec71ac8,0x3e8db7c2,0x3e6234b0,0x3e5f19d8,0x3d9f6aca, +0x3e44d525,0x3de7fa57,0x3ddb8201,0x3df77a39,0x3da7376e,0x3da0a998,0x3d46e1b2,0x3da6cfa0,0x3ddbf3ba,0x3dc61ac0,0x3e019555,0x3e0727a0,0x3e254457,0x3e5f84b9,0x3e87befb,0x3ec5a3eb,0x3ee15830,0x3edc5b45,0x3eed7181,0x3ec4a404,0x3eae1b74,0x3e8f847a,0x3e80c031,0x3d027283,0xbe8c41da, +0xbec8a25e,0xbec7302c,0xbe62db8d,0xbe0c479e,0xbf2147d7,0x3e2b5e46,0x3f404642,0x3c4174f4,0x3e9417ab,0x3db066f0,0x3e1a6964,0x3de1932f,0x3daffbb9,0x3dd27268,0x3db475a4,0x3de54a07,0x3dd90629,0x3d9a68ef,0x3dbcf4ce,0x3db8f04f,0x3e02401b,0x3e0b41d2,0x3e2fe54c,0x3e2a0b1d,0x3e015e25, +0x3e310e54,0x3e694129,0x3e8b66be,0x3ea30950,0x3eb94bd5,0x3ec46185,0x3ec52cc2,0x3ec1f88d,0x3e8d5083,0x3e18c505,0xbdb4eb82,0xbe941755,0xbee92027,0xbf2f26b7,0xbf05e32f,0xbf853582,0xbe41682c,0xbd2bc307,0x3c430102,0x3e1ba3b5,0x3d9dfc5e,0x3e04c29c,0x3dbd4ba3,0x3deee4d2,0x3dd54ca4, +0x3e278beb,0x3d8f9490,0x3d695c58,0x3d766a43,0x3dc2c945,0x3df9d8b8,0x3e1e7ec1,0x3e3ec18b,0x3e51f01b,0x3e191a92,0x3e0fb11f,0x3e263130,0x3e40cc33,0x3e5df7b3,0x3e55ce24,0x3e8354ff,0x3e52b3ea,0x3e543da4,0x3e2d2961,0x3ce2b765,0xbe3c9035,0xbf02fb73,0xbf1c89aa,0xbf4435d4,0xbf75289e, +0xbf6d2096,0xbf845923,0xbf5c52c6,0x3df13023,0xbea83643,0x3da2c7ad,0x3d90c94b,0x3de681ff,0x3d9af35b,0x3dafc4a8,0x3da7a988,0x3dbc726d,0x3daba104,0x3d8afd88,0x3d653e5f,0x3ddfadfc,0x3dfc926f,0x3e0b329c,0x3e0402b6,0x3e5393dd,0x3e473875,0x3ddf61ac,0x3e0b6d16,0x3dfc42f1,0x3debf11e, +0x3d912e9c,0x3b193d8b,0xbdcc0d52,0xbe28c8fa,0xbe654d3a,0xbe99d79e,0xbeef9ec7,0xbf269918,0xbf304028,0xbf3cbd2d,0xbf339b99,0xbf6f1201,0xbf3b2a21,0xbf3e2d30,0xbee2a613,0xbe4fca52,0xbd27d274,0xbd8acb43,0x3c374ab9,0x3d3ac8b0,0x3d4765eb,0x3d8b6d3f,0xbcc31ec3,0x3de09d57,0x3e17233e, +0x3da2fc7d,0x3dd86134,0x3dce878f,0x3dcd15d7,0x3dda2f42,0x3e1f705c,0x3e118940,0x3e211a92,0x3e147f68,0x3d9e97fd,0x3de86605,0x3c80c235,0xbde5fff5,0xbe751b9a,0xbea4d9f2,0xbeb13094,0xbeb7b95a,0xbed06eb7,0xbedb83f9,0xbf1a7cf4,0xbf1762e6,0xbf1f3602,0xbf2c28ca,0xbf07b7a9,0xbf04357e, +0xbeb1a016,0xbe94e281,0xbe428486,0xbdde48cc,0xbdc7fa62,0xbc46b9c5,0x3d08d10e,0x3d44b362,0x3cb0a48c,0x3d6ffb69,0x3d6a66e1,0x3d7c0a3e,0x3da59891,0x3d9dbb84,0x3dfb57ac,0x3ddea14d,0x3e1078eb,0x3e1d3637,0x3e246ace,0x3e1d16e3,0x3cee7e6f,0xbd98f057,0xbe232c81,0xbe1e67ae,0xbe7a6a05, +0xbe654ac5,0xbe7c8a16,0xbd68dc0d,0xbd5de4a9,0xbdc114bb,0xbe4389a9,0xbeae9d73,0xbee02fc4,0xbef307c7,0xbe949e3c,0xbe9adcaf,0xbe62d780,0xbdf9ee1f,0xbd882971,0xbb4d0b33,0x3b6dbc73,0x3d192e64,0x3ce808b2,0x3cfae5cd,0x3c98bccb,0x3d355af7,0x3d1bbbc7,0x3d2d3c14,0x3cb7d87e,0x3d337bca, +0x3d9b28d7,0x3d847f92,0x3daf87b1,0x3de4acf8,0x3dfe1b2a,0x3da3ea27,0xbc2b0fec,0xbcf40991,0xbd3215f7,0xbbf199eb,0xbcd6c431,0xbcb91d99,0x3cb02541,0x3c244a77,0xbd06dc44,0xbc18d20a,0xbdf704c5,0xbe61525b,0xbea48924,0xbea0ba0b,0xbe2a0e34,0xbe4483a7,0xbe404376,0xbe07e6d9,0xbe265d70, +0xbdb054d0,0xbd4f5382,0xbc8679f3,0xbcaaf281,0x37c4ebeb,0x3c39fb70,0xbb6d077c,0x395d6362,0x3c1b0047,0x3c6a3d0d,0x3b20001f,0x3c86c7eb,0x3c2f309a,0x3cb432ea,0x3d1fac1e,0xbdc8631e,0xbdb726cb,0xbe125fbd,0xbe170543,0xbe41687f,0xbe4249be,0xbe52ad46,0xbe3cbd80,0xbe20aed5,0xbe0f0dcf, +0xbe0b74aa,0xbdd551cc,0xbdeb5ad9,0xbe097fb6,0xbe3316db,0xbe3b498a,0xbd9c58bc,0xbdb5d024,0xbe0d6d38,0xbdbeab39,0xbdd7f227,0xbdb24593,0xbd91a277,0xbc63b108,0xbc42f8dc,0xbc3212b2,0xbc6a98f5,0x3c4d9dd3,0x3b3cd621,0x3ab7f332,0xbcb70a2a,0xbc6cc7be,0xbd2902ee,0xbd37b51f,0xbd486956, +0xbdbe8f4d,0xbe16019a,0xbe03e083,0xbe3413bb,0xbe351ed4,0xbe4b77b1,0xbe51f96d,0xbe485f07,0xbe5ee9c0,0xbe6dc106,0xbe406da5,0xbe343a1e,0xbe1e2f46,0xbe17ac69,0xbdf91fdd,0xbdd2b378,0xbdc16691,0xbc762119,0x3cd4a61e,0xbe1cb1ed,0xbc948eaf,0xbc987ebf,0xbcd7bc66,0x3cf11acc,0xbd18fa16, +0x3bb34088,0xbd16b89e,0xbd2c142e,0xbd47eb69,0xbd14b214,0xbd1afd14,0xbd32b547,0xbd6f0574,0xbdb4c33b,0xbd7d857d,0xbdf09ef7,0xbd5aaf61,0xbce08264,0xbd764758,0xbd3b9b1d,0xbd5cadf6,0xbd2df1ca,0xbc4f3705,0xbd3e9737,0xba8f2a78,0xbaba54ce,0xbc8e3209,0xbc0496e1,0xbc62baa2,0xbc6d081c, +0xbc4201a4,0xbcab76e3,0xbc97b06a,0x3b177a21,0x3cc1e4a1,0xbd255b68,0xbdd41f1c,0xbe20c895,0xbc73cfb7,0xbd88da1a,0xbe10ea3d,0xbe19675a,0xbe099b95,0xbe019677,0xbe03d328,0xbe0ca40d,0xbe0eeb79,0xbd70ad5c,0xbc769ac6,0xbe143adb,0xbdab273c,0xbd3031fc,0xbc10f455,0xbccb5347,0xbce90cc7, +0xbd03ee37,0xbd2b7253,0xbd4242c4,0xbd4ede17,0xbd6df04d,0xbd420c55,0xbd50d3d0,0xbd342dba,0xbcde06b6,0xbcd85010,0xbc976264,0xbbfe0ae9,0xbaa7248f,0x3b7c5219,0x3a2aba7b,0x3d505b69,0xbba486a1,0xbc95ac28,0x3c9d4c94,0x3d78b687,0x3dbd0c3f,0x3cf0aaa5,0x3d80a09f,0x3dbcd6c8,0x3dc132d5, +0x3dc62ed4,0x3dc5316b,0x3dc5e862,0x3dd91e6b,0x3dc87e76,0x3d88df18,0x3d436735,0x3dd18860,0x3d982c5f,0x3d56c297,0x3c992bbc,0x3cde4e52,0x3cd9ea0b,0x3ce43095,0x3cf96fbf,0x3d04e5a0,0x3d06c84f,0x3d0c9e43,0x3d149b47,0x3d2554af,0x3d282976,0x3d1e11d6,0x3d11b4dc,0x3cd04ccb,0x3c5d1e90, +0xbb903fdb,0xbbd21c4f,0xbd3c77b6,0xbd0105b0,0x3da1a0f0,0x3cc8f9fa,0x3d995d89,0x3d201b24,0x3d63e39b,0x3d812cb4,0x3d5606c6,0x3d96b8d9,0x3da293b7,0x3da376bf,0x3d88319f,0x3d9bb392,0x3dc5933a,0x3d7b8050,0x3dadab15,0x3d94a859,0x3db1f970,0x3d1f428d,0x3d0b46f6,0x3d12f048,0x3d2dfa0a, +0x3d38ea17,0x3d4bfe1d,0x3d83a0a5,0x3d9dbb79,0x3dc3b32f,0x3de48be4,0x3df114cd,0x3dd58490,0x3d93b241,0x3d1a8603,0x39139aa7,0xbd2a2d25,0xbd46d3cf,0xbe13e08d,0xbde833f9,0xbcccc9de,0xbd0788c8,0x3ca6f948,0x3cc99338,0x3d3366b7,0x3d362cab,0x3d843862,0x3d546c6b,0x3dc11da1,0x3d572095, +0x3da82fa1,0x3d7a1992,0x3d96b7bb,0x3d7ca9a4,0x3d901f28,0x3db190bc,0x3d92b396,0x3d78b972,0x3d0600e6,0x3d3ff6c7,0x3d6007bc,0x3d84fa6a,0x3d9f7e7f,0x3dc74fbe,0x3decfd73,0x3e0be2f7,0x3e2ce629,0x3e29f607,0x3e15a6bd,0x3dd02a96,0x3d328775,0xbcecad3c,0xbe02230f,0xbe0a00a2,0xbe40c90c, +0xbe030a87,0xbd541ca6,0xbd12edbd,0xb97767e5,0x3c8ab00e,0x3d3ba3f7,0x3c9272f4,0x3d6c2ecb,0x3d5ff9e2,0x3db87d11,0x3d9fcc22,0x3db30bd2,0x3d69bdd6,0x3d9b16ed,0x3d8f4236,0x3da458ef,0x3dc59206,0x3da2f998,0x3d89d067,0x3d3cf82f,0x3d23e0a3,0x3d8baf71,0x3d9e96e3,0x3dd49632,0x3e127c6b, +0x3e395161,0x3e749e15,0x3e8fd4c8,0x3e929c7a,0x3e74a488,0x3e14a89e,0x3d62c932,0xbd8aca8f,0xbe36950f,0xbe46b62a,0xbe8c559b,0xbe809f7e,0xbe0f128d,0xbdb44b0b,0xbd0c504d,0xbcbf35b2,0xbb910481,0x3cc7456c,0x3d2b8fed,0x3d5a3594,0x3d9cf583,0x3d9fc4e1,0x3d9d136e,0x3d85867c,0x3d8d6132, +0x3da5a1b2,0x3dc434ae,0x3d9c902b,0x3dd02894,0x3d9c5859,0x3d713693,0x3d72cf50,0x3daab7db,0x3dc18da2,0x3e0c6fde,0x3e2a3ca5,0x3e5776e3,0x3e7b5d93,0x3e98c9ce,0x3e9f83ef,0x3e8a85cb,0x3e25fd02,0x3d94f270,0xbd93c5c0,0xbe84dda8,0xbe8ae570,0xbedb6307,0xbeab30eb,0xbedc4280,0xbe35fd2d, +0xbe220da1,0xbd8b682f,0xbd026da9,0xbb187339,0x3c46d3b0,0x3d552822,0x3d9466f6,0x3dc50827,0x3db899cd,0x3d8378f9,0x3dc3437d,0x3da70881,0x3e00e3c0,0x3ded28ff,0x3e0c5a00,0x3db5d7a6,0x3d269e7c,0x3d24a6e6,0x3d802a82,0x3dd2d74e,0x3e18f2d7,0x3e901476,0x3ec25c1f,0x3ed6c0e0,0x3ee45271, +0x3e32e167,0x3d9c2531,0xbc91e40c,0xbde80234,0xbe85bf98,0xbed1fc03,0xbf045baa,0xbe352082,0xbf08a4df,0xbf1c4d05,0xbe631c58,0xbe2b375e,0xbda1aaa2,0xbcb0a5cb,0x3d6f7a95,0x3d6a96a4,0x3da176e0,0x3dd1f484,0x3da670f8,0x3d9fb6e4,0x3d39ff6a,0x3d981198,0x3da9afc0,0x3da36007,0x3ddc95c9, +0x3e055006,0x3dde1a53,0x3dd95f68,0x3e0568c8,0x3df77496,0x3e226d91,0x3e156926,0x3e0369b7,0x3db79350,0x3cd60ff3,0xbc663ad6,0xbe626453,0xbe9a4d9a,0xbec6e6c6,0xbe305d8a,0xbdb3fcdd,0xbce70149,0xbe442d5c,0x3eb4e836,0xbeb1af9a,0xbeb86344,0xbe72b6ed,0xbe8a459a,0xbdd5dc72,0xbd9178e8, +0x3b661ed2,0x3c7692f5,0x3d126cc4,0x3deb97b4,0x3da52873,0x3dac8942,0x3d9d4a71,0x3dc68c96,0x3dbacad3,0x3ddd3f64,0x3dc06265,0x3db92ed9,0x3da15e93,0x3dbb3c44,0x3d9c4d3e,0x3d25a294,0xbd1a1cb2,0xbdd1117b,0xbdd299db,0xbe2a7705,0xbe6508ff,0xbe9b3458,0xbeb490f4,0xbeda3530,0xbeeb5f90, +0xbe23ab50,0x3ceb52c7,0x3ee3e788,0x3e9f763c,0x3f271094,0x3ea06fe6,0xbeed7902,0x3da87d73,0xbe5d2cca,0xbdd0a61a,0xbd9af4e3,0x3a35b647,0x3cab4df0,0x3d428021,0x3d8a2380,0x3db4bccb,0x3dc34f87,0x3d84f2f3,0x3d928a6e,0x3d92ef3a,0x3db30266,0x3d872cc8,0x3dbbd23e,0x3da95bdb,0x3c7b4253, +0xbbb68c79,0xb9c84e22,0xbdba45ec,0xbdeafb3f,0xbddd21d9,0xbdb4f4a3,0xbd8e1f17,0xbe3aa2d2,0xbe4d68ef,0xbe6b8c1c,0xbdbd51ae,0xba488d2c,0x3e03a4b7,0x3ec29ed6,0x3f03d750,0x3f05bbf7,0x3edf706b,0x3d9c71df,0x3c8bc888,0xbdb3ac44,0x3d7d4a16,0xbc54629d,0xba13a30f,0x3d7ddb0d,0x3dadff21, +0x3cb72962,0x3dcfd8eb,0x3db6f4ae,0x3c1c301f,0x3d20b108,0x3d554f69,0x3d515fdc,0x3d24028a,0x3d7964fd,0xbcd54264,0xbd6513e4,0xbd34a84e,0xbc960720,0xbc93cf1f,0x3c898815,0x3cfe554e,0x3dded2f9,0x3de30f97,0x3d9895f8,0x3de4e007,0x3e1c3eb3,0x3e2e2c11,0x3e4ccece,0x3e17232f,0x3dc37382, +0x3eb0479c,0x3ed93579,0x3ea5a3d0,0x3ce06e2e,0x3e4a2d3c,0x3d72e855,0x3ccc5703,0x3d5f38e4,0x3dcc1d63,0xbafbc35f,0x3c565389,0x3d3afb9a,0x3d59b08f,0x3d6b5f5f,0x3d8d4e4a,0x3da2a01f,0x3d8d7b6f,0x3b06f10a,0x3d954377,0x3d9f46f2,0x3d95af51,0xbd8ba5d4,0xbd8101cb,0xbdc0e81c,0x3cf2620f, +0x3e044f37,0x3e26bfdb,0x3e9091fc,0x3e8eee51,0x3e981164,0x3deea374,0x3cdc00c6,0x3d9573cb,0x3d944965,0x3e136cd4,0x3e74912d,0x3e7204b8,0x3e7013bc,0x3e8aa312,0x3d8310af,0x3cef5d92,0x3c5616c0,0xbc1dce24,0x3d31f72e,0xbbdf9e11,0x3d3d6c65,0x3cbaa01f,0x3d743a55,0x3c7d8270,0x3d230c60, +0x3d3ea3da,0x3d2e377a,0x3d1e3cd6,0x3d433e07,0x3d108c4a,0x3d5b4be5,0xbc8b1471,0xbd221e13,0xbd4b2f09,0xbdd50594,0xbd85d612,0xbd556d82,0x3c4a12f3,0x3d3d4620,0x3d2cf778,0x3c9f9e6f,0x3ca6c160,0x3d24453a,0xbb1393ad,0x3ce396cb,0x3d962ecd,0x3e3ca047,0x3e48f44a,0x3e541e3d,0x3d53aaa6, +0x3e036b08,0x3d9ae0fa,0x3dc18bf4,0x3dd98c53,0x3d0fe153,0x3cb47f90,0x3ce20037,0x3d22f631,0x3cb82157,0x3d2e703f,0x3b811f05,0x3d708e84,0x3c0937bb,0x3c8199ad,0xba8da4da,0xbcb374aa,0xbc08ac79,0xbd33bcc8,0x3d3c7c07,0xbc85fc04,0x3ac7b918,0xbc8ea811,0x3c23bc5b,0x3c9e5220,0x3d19d6e3, +0x3d66325f,0x3d553827,0x3d353633,0x3d29b2dd,0x3cd7e180,0x3d5fc15c,0x3db4f22f,0x3e2983d7,0x3e052528,0x3e0737fa,0x3e111674,0x3ce688f6,0x3dcbbcaa,0x3d798f86,0x3cc786ef,0x3d30d6f8,0x3d4bd8f3,0x3d15f6c8,0x3d78446f,0x3d130fa2,0x3dca534d,0x3d152a4c,0x3da16db8,0x3b7cfdde,0x3ce4fe6e, +0x3c582b63,0x3cca303c,0xbdd5c695,0x3cea1a42,0x3dbc2be7,0x3d2b4b95,0x3d5d4d7d,0x3d093721,0x3c927a6d,0xbc6cb5e4,0x3d0c7086,0x3d86dd68,0x3dd84ba6,0x3dd24393,0x3df35440,0x3e02cb00,0x3e1659da,0x3e14a9d3,0x3e1f8d8b,0x3e095e55,0x3e0c98e6,0x3e1a2759,0x3dbc29bc,0x3e0459c9,0x3e05fcf1, +0x3e0b0366,0x3e0987e6,0x3db78d7a,0x3dfa2b32,0x3dcb8f51,0x3dc53e60,0x3dae5692,0x3de4b728,0x3dcdafad,0x3deee6e2,0x3e03ba12,0x3d5fcba4,0x3e0af223,0x3ce6caf4,0x3e3737fe,0x3e1300c3,0x3e1b396a,0x3e170da0,0x3e1774b0,0x3e193f4c,0x3e0ed4f4,0x3e28456e,0x3e193f70,0x3e166641,0x3e27d04e, +0x3e1f4c0e,0x3e284249,0x3e218ac1,0x3e09f78d,0x3e12846c,0x3e1d83ac,0x3de8fd6a,0x3df894b1,0x3de5b544,0x3d925138,0x3cd0feba,0x3dcebf0e,0x3da62cb5,0x3d13729f,0x3ce2bc11,0x3d034db5,0x3d185476,0x3d07a54d,0x3cb6142b,0x3ca95162,0x3dad5c3c,0x3de85a07,0x3c11846f,0x3d94e281,0x3decdb54, +0x3e06a818,0x3df00fcf,0x3dff1917,0x3dfc9e11,0x3dffab4e,0x3df9f403,0x3df0cae2,0x3dfac3c2,0x3df91f89,0x3e041534,0x3e04e82b,0x3dffb3c5,0x3e064ba0,0x3e04d2fd,0x3dfbea1c,0x3df891b9,0x3df29e68,0x3e36ac1d,0xbd471f41,0xbc7fb397,0xbb83b596,0xbc413e2b,0xbcc4e8ef,0xbb8c8568,0xbcd1d317, +0xbcb9e8f6,0x3be00a31,0x3c2827e1,0x3c714f5c,0x3c5fff1e,0x3c6bc4d6,0x3ca006ab,0x3c4f89c8,0xbc9d0e5e,0xbcfb3adb,0x3c812782,0xbc865c40,0xbcef9a47,0xbd0f7e32,0xbcf9d9c9,0xbd0c380e,0xbd16c07d,0xbd22aa30,0xbd2f6a29,0xbd385b5e,0xbd488943,0xbd6657db,0xbd7f272a,0xbd8a2449,0xbd7f38ba, +0xbd73c4ed,0xbd2ef88c,0xbce595e0,0xbc0b3047,0xbc302ff6,0x3cf404b4,0xbc2d3c04,0xbd94a9e1,0xbbdd4dc7,0xbce6c49c,0xbc8aa0c0,0xbca4d8ee,0x3bc51fa7,0xbabf6196,0x3aa1e00d,0xba9057b5,0xbb552de5,0xbc391263,0xbc261135,0x3b863bd2,0xbccb5446,0xbc3ddd8a,0xbca48f7b,0xbbd0153e,0xbd116df9, +0xbd0a46ad,0xbd1ef400,0xbd4809fb,0xbd44916d,0xbd4d0739,0xbd875e33,0xbd99694e,0xbdb9992f,0xbddef285,0xbe12ee27,0xbe14138c,0xbe02c8f1,0xbda60128,0xbd1b5e99,0x3c42868e,0x3caf4184,0x3deb4b40,0x3d31f33c,0xbbea2d5c,0x3ca30001,0xbc67dd99,0xbc03e578,0xbbf3ed20,0x3c770c5b,0x3cd166cd, +0x3c7c2fa5,0x3cf607e9,0x3b7355d0,0x3cbb4242,0xbb4d1d4d,0x3bbc1085,0xbc0d23fa,0xbc68edbf,0xbafa2699,0xbc0d3cca,0xbca0005f,0xbd212780,0xbd2f0b01,0xbd8b0b9c,0xbd927423,0xbdb2072e,0xbddc1d9c,0xbdee0069,0xbe24403c,0xbe55eb3e,0xbe7bc93c,0xbe79a480,0xbe53492d,0xbde0c016,0xbc97c888, +0x3dd03922,0x3dcaeffc,0x3e5e1056,0x3d5ca513,0xbd36dfc0,0x3d5bcd2f,0x3ac4f431,0x3af6fe27,0x3b37cbd9,0x3d961c66,0x3d5f6fbd,0x3d78ec3c,0x3d5a92b0,0x3d43c1bc,0x3d2f8302,0x3bf74298,0x3cbc1be8,0x3c1d9e2e,0x3ace1dcd,0x3c7c4d39,0x3c87f76a,0x3bb2841f,0xbd1b2222,0xbd03eb58,0xbd92160a, +0xbd91b237,0xbdaae1eb,0xbde5c9e9,0xbdfffbb6,0xbe2f2972,0xbe6d212f,0xbea96837,0xbeb397d0,0xbe9ab126,0xbe248329,0xbc6cd941,0x3e0e767d,0x3e2a5399,0x3e9810e0,0x3e2a1fec,0x3d00b7b5,0x3d9523ab,0x3d194d34,0x3c222850,0x3c0e0051,0x3d9198d1,0x3d5c3f90,0x3d88014a,0x3d99f8f2,0x3d9451b0, +0x3d81fc3b,0x3d32079a,0x3d3fce93,0x3d23f867,0x3d4dff1d,0x3bf6f82f,0x3da28b8c,0x3aa43aba,0xbd2273f1,0xbd41605a,0xbdb383fd,0xbdca86ad,0xbe02205b,0xbe24162f,0xbe2fedbc,0xbe7113bf,0xbeb194e2,0xbedf4442,0xbee9477b,0xbeb4fae8,0xbe3f3d85,0x3c1aa04a,0x3e815a70,0x3e905ce4,0x3e9855ec, +0x3e90ca70,0x3db5913f,0xbcaab78e,0x3de49660,0x3dcf75c7,0x3e108932,0x3d76b13e,0x3dc69b61,0x3d7f51df,0x3d5a2151,0x3d901f9a,0x3d7a4d3c,0x3d42246e,0x3d2a7c28,0x3c2a984f,0x3d1b1807,0xbd01163c,0xbd061308,0xbd26a88a,0xbd3e8907,0xbd837b8b,0xbe1f5599,0xbe2bb8f0,0xbe692d35,0xbe8dc1b6, +0xbed3fa5c,0xbef496e5,0xbf0cfb07,0xbec98166,0xbe80aeaa,0xbe074c21,0x3d1cd7ba,0x3e395221,0x3e9213b0,0x3eb3a928,0x3e3b7268,0x3e5831fe,0x3d4d201f,0x3d3f8482,0xbd7cc2d4,0xbc5519ba,0xbd40a96a,0xbcba5b60,0x3a90d135,0x3cfea7ad,0x3da98434,0x3d95e073,0x3d9aec0e,0x3d66d246,0x3d8b0604, +0x3d12b90d,0x3d577efe,0x3c4bf7c3,0x3d81d34d,0xbcee8897,0xbdef6b54,0xbdffb030,0xbe51a351,0xbe9a5074,0xbec2e652,0xbef8986c,0xbf00a3ea,0xbf0029e9,0xbf179584,0xbe9d7c61,0xbe1e2201,0x3d276dfd,0xbdedd0e1,0xbdf59d97,0x3cb28041,0x3e0b286a,0xbea29ca7,0x3e37e797,0x3e40b9a5,0x3da0c52f, +0x3e0c4d8e,0x3d41e20a,0x3d181148,0x3c3a22a6,0x3d34e6c6,0x3d7269ab,0x3d2e05d2,0x3dbce3cf,0x3dc73fd1,0x3d06d9b7,0x3d73bbfc,0x3cde7e36,0xbbc49982,0xbd0714fa,0xbd84cf61,0xbe05eb63,0xbe3661b0,0xbe18c2f6,0xbe061152,0xbe09d583,0xbe114239,0xbe54d954,0xbdecf773,0xbd9cd208,0xbd2f980c, +0x3e1a10b3,0x3e93289c,0x3ed604b8,0x3da7ec5c,0xbdeb1760,0xbf1389f5,0xbec21125,0xbf2550c3,0xbe8014bf,0x3e95a744,0xbdd58748,0x3e0a85f4,0x3d7ab205,0x3d9fa2cb,0x3c326233,0x3d9fe14c,0x3d8c7622,0x3cb24e37,0x3dbaaa2a,0x3dbb85d5,0xbb80e161,0xbba2a3a1,0xbc87bc73,0xbd84ca7a,0xbdb24b39, +0xbd969050,0xbdf379e1,0xbdda25f9,0xbd38140c,0xbc992898,0x3da4d7ba,0x3e115874,0x3e2fbf8f,0x3e80b0fc,0x3ea13710,0x3eeac790,0x3eed8bc8,0x3f01cc2c,0x3ed2c77a,0x3de6492c,0xbdd17149,0xbf088358,0xbf08125c,0xbee910fb,0xbeb890cb,0xbd218d04,0xbd8b12ab,0x3d5cd38f,0xbd5a8efa,0x3cf1b8b6, +0x3cabbd4c,0x3d845d63,0x3da3f1c3,0x3d4d924e,0x3d94c59d,0x3d54d829,0xbccdfaa8,0xbcd5219a,0xbd55ef6c,0xbd813eef,0xbd957441,0xbdb3948d,0xbde4501c,0xbccbf803,0x3d3241b9,0x3dc627a5,0x3e1cb677,0x3e7dd0b1,0x3eaba4b4,0x3ec1286f,0x3ee886cb,0x3f10c27a,0x3ee127f1,0x3eb46c13,0x3e5bd08a, +0x3d9aaab4,0xbd0dc15f,0xbdc6eda3,0xbe6d0519,0xbe400f91,0xbdcf1108,0x3db81ab2,0xbdb68404,0x3b1a6582,0x3ce3281b,0x3d284fdd,0x3ceb5fe4,0x3dc0e927,0x3dad3b54,0x3dc31e47,0x3d8d792e,0x3d9345fa,0x3d5ac6cf,0x3bdec4cf,0xbc703609,0xbc76a680,0xbdacb851,0xbddac2e0,0xbde6b326,0xbd55e303, +0x3c898c6e,0x3e45a780,0x3e6ed737,0x3e8cf5ef,0x3e8378ef,0x3e99ae92,0x3e895749,0x3e70d8d9,0x3e907cb9,0x3e7c07e2,0x3dea908d,0xbbb3bc72,0xbdadb7cb,0xbe42e753,0xbd80d716,0xbd88916c,0xbe057fd4,0x3d53261c,0x3d807dab,0x3da4d319,0x3dd1d724,0x3d35b130,0x3d4aa654,0x3cc5a3aa,0x3d2db9df, +0x3d6b246f,0x3d93bbeb,0x3d95afe8,0x3d80606a,0x3da4c85b,0x3d7de564,0x3cc864b2,0x3cd0444a,0xbc9416ef,0x3c578539,0x3d061bfd,0x3daa33e1,0x3e41570f,0x3e36ea31,0x3e3e1535,0x3e1f1c9d,0x3df47c07,0x3defb530,0x3df1d60f,0x3d8b87da,0x3cc7173d,0x3c5c5e5e,0xba4ad3dc,0xbca40eaa,0xbdc235fe, +0xbd528b49,0xbd9def8f,0x3d82400c,0xb9418134,0x3d037e2d,0x3cbbd752,0xbc7b2df1,0x3d379eea,0x3d097d7f,0x3d3f92a3,0x3d2467f5,0x3d918d4b,0x3d8f121d,0x3dcef8b2,0x3dabbcb6,0x3df906a6,0x3dfc8757,0x3e1173e9,0x3e179431,0x3e0b33cd,0x3e18c6d9,0x3e24bd1b,0x3e24f236,0x3e292417,0x3e283f76, +0x3e276bba,0x3e2297c0,0x3e093a17,0x3dc8e0e2,0x3d8f4c71,0x3d6a6a5f,0x3d2e2269,0x3d224623,0x3c791e4f,0x3a4d843b,0xbd13950c,0x3a972cff,0xbcb1522f,0xbcda3b54,0x3dba095b,0x3c28b08b,0x3d59ec39,0x3d972799,0x3d5d233e,0x3d0fd312,0x3d4c690e,0x3d16fe4b,0x3d722c2a,0x3cab539e,0x3d8dd79d, +0x3d840193,0x3df505ec,0x3e0694c4,0x3e293f1c,0x3e2ba77e,0x3e7108e6,0x3e51125e,0x3e283272,0x3e2f31f3,0x3e29510e,0x3e2bf6fd,0x3e30b83b,0x3e3ae1be,0x3dfec876,0x3dc20300,0x3d5df80c,0x3d408a5b,0x3d1bda4f,0x3cd0ac48,0x3c34780e,0x3b90815b,0xbc1ebc2d,0xbc2894af,0x3c02b1a1,0xbc9205db, +0x3ddff9d3,0x3ca6ac6d,0x3cbee4f0,0x3cfe2d73,0x3ba7c567,0x3d80a956,0x3c86ffa6,0x3d7d7eda,0x3d8b9988,0x3d9eb204,0x3d464409,0x3d65a9c5,0x3d59b803,0x3d6f482b,0x3dd43861,0x3d798177,0x3e032115,0x3d4eef90,0x3d3bea87,0x3d883377,0x3d6e3e7a,0x3d744831,0x3d408b00,0x3d07c5be,0x3d27c20d, +0x3ce01539,0x3cde9e25,0x3c589519,0xbbc347cc,0xbc855238,0xbc131f36,0xbbf79648,0xbb495b2f,0xbabf162f,0x3b813d20,0xbc27d9ab,0x3d11ec92,0x3db9e52d,0x3e03b5c6,0x3cef9024,0x3d8e02c3,0x3e037c08,0x3e0eba56,0x3e00e0a6,0x3deea413,0x3df957fc,0x3e0ad25f,0x3e0d236b,0x3d9b778f,0x3d251c0b, +0x3e183908,0x3dddc183,0x3d8c08f5,0x3cda64fd,0x3d17ff81,0x3d0700c2,0x3d019fe4,0x3d0ade66,0x3d12d529,0x3d10cb4b,0x3d084153,0x3cb82c1d,0x3c924c41,0x3c7449ad,0x3c41471b,0x3bf74652,0x3be07ced,0x3b9da1e8,0x3b9ecdd0,0x3b570739,0x3cfdbd28,0xbd03b812,0xbca139c9,0xbd0fcac5,0xbc8b13c3, +0x38d96ef0,0xbc4c36e5,0xbc2da434,0xbc09def4,0xbc53a902,0xbc4fab28,0xbc753b36,0xbc897e5f,0xbc8c6218,0xbc99e3dd,0xbca4b3f5,0xbc4408de,0xbc5bc0e6,0xbcc79bbc,0xbc93818a,0xbca03be1,0xbce2ac40,0xbcdee5cf,0xbce01f33,0xbcd28eb0,0xbcdb1101,0xbcd790e3,0xbcbe5554,0xbcb4163b,0xbc9bd720, +0xbc92a1f0,0xbc980f18,0xbcb2b5f2,0xbcd5b964,0xbcfc172d,0xbd09bb73,0xbd03e082,0xbcdf4c5c,0xbc44e62d,0x3c397778,0x3d95b906,0x3bca34a4,0x3cccfee0,0x3c07b889,0x3b467af4,0xbbe8879d,0xbc0c95b1,0xbb10de03,0xbbf6ae6e,0xbb585feb,0xbc02d35f,0xbc7fd727,0xbc895919,0xbcb7710e,0xbcdf845d, +0xbcec9583,0xbce14ce9,0xbd20d7d4,0xbd2fe93f,0xbd2e2670,0xbd26d679,0xbd21005e,0xbd174544,0xbd1c3f6f,0xbd445c8f,0xbd611f01,0xbd6b60f8,0xbd5328aa,0xbd4356b1,0xbd3e686a,0xbd6d7fe0,0xbd447099,0xbc85637e,0xbb37ad05,0xbd485d46,0xbbe55c6c,0x3d7c5006,0x3ce45fdb,0x3d50ddfe,0x3cee8861, +0x3d091588,0x3b29a6fe,0x3ca05ffe,0x3c450be7,0x3c9564ae,0x3c3c2ecb,0x3c02ce93,0x3ac2bdd6,0xbb924728,0xbc74dcb2,0xbcce875d,0xbcfcb7cf,0xbd2d57ca,0xbd6581e2,0xbd812a87,0xbd81d4ab,0xbd65a42c,0xbd6eb975,0xbd757346,0xbd5de18e,0xbd87cad1,0xbd7411fe,0xbd67c341,0xbd3e70f3,0xbd4b6414, +0xbd5cc2bc,0xbdb01887,0xbdbeced4,0xbd8d5c0a,0xbd4f4082,0xbd6048b3,0x3d68c731,0x3e368054,0x3d8b64f6,0x3de4132b,0x3d916b63,0x3d590d62,0x3d07ba8d,0x3d0461af,0x3d174701,0x3d0967da,0x3d01cb85,0x3cef19b6,0x3a83e005,0x3ac479dc,0xbc59cd9b,0xbd145523,0xbd06de94,0xbd2db7e1,0xbd82f6d4, +0xbda4f1a0,0xbd908f06,0xbd931109,0xbd9be40f,0xbda159cf,0xbdab51aa,0xbdf707f8,0xbe12f07a,0xbe15f8b6,0xbdf1cc04,0xbdbf0a2b,0xbd94342c,0xbdf3d7eb,0xbdd9b4bc,0xbc6bc64b,0xbb43b628,0xbe1390f8,0xbd4c236b,0x3e123456,0x3d9f094e,0x3da862b6,0x3db53bf3,0x3da72425,0x3d31ecff,0x3d65719e, +0x3d4b3920,0x3d808052,0x3d854853,0x3d42321a,0x3ca62d90,0x3cbf196d,0x3c405340,0xbc7dce93,0xbd1e2f21,0xbd35a89e,0xbdc03398,0xbdb4e0f4,0xbdc85f25,0xbda31d01,0xbda93832,0xbde08411,0xbdb516b5,0xbe050dec,0xbdfa7dc7,0xbdd2ef83,0xbdb4eb11,0xbd987893,0xbd7d0524,0xbe1ada99,0xbe232bb5, +0xbe08d49d,0xbdedaee9,0xbec7a8f8,0xbee517a8,0xbdc1ee58,0xbd4dc3a9,0xbe005bad,0xbd65347e,0xbdcc64f9,0x3d26772b,0x3ce61b9e,0x3d7a335f,0x3d509c4f,0x3d7381fd,0x3d6396ca,0x3d1b3421,0x3c871b72,0xbc5815d8,0xbc5a0516,0xbd3e88c2,0xbd82115a,0xbdeaa493,0xbe1c2008,0xbe17bb84,0xbe45f304, +0xbe5d6c99,0xbe2f8f88,0xbead1b54,0xbe9246da,0xbe8fc8f3,0xbe344a94,0xbdd421ef,0xbda6cc1b,0x3c952041,0xbe14f4bc,0xbe8bf05a,0xbec080b2,0xbee2c6c4,0xbef306a6,0xbe9765ad,0xbcd14e18,0xbe1c2f56,0x3cef3cbe,0xbca26527,0x3d1477d9,0x3bff7cb3,0x3c3e258e,0x3d285b0a,0x3d3f3d4b,0x3d9cbd59, +0x3d944289,0x3d42ff04,0x3d15d677,0x3b3291a9,0xbcd8d8ad,0xbd6fc9ea,0xbdf81efc,0xbddd9686,0xbda3d15f,0xbda5406e,0xbb2d2327,0x3d804fc1,0x3e29069c,0x3e8aa06e,0x3eba1664,0x3ed41d55,0x3f12bdc9,0x3ece37ff,0x3e8b3e42,0x3dc0fb21,0x3d59e486,0xbd576358,0xbe6177e1,0xbec0bb79,0xbd45221e, +0xbed36fdc,0xbeb03d3a,0xbe3ff9b8,0xbe2ec9ee,0xbd99ba3d,0xbd229718,0xbce84327,0x3d2c885d,0x3d5c6848,0x3c591b28,0x3d9507dc,0x3d66c367,0xbcf36ed5,0xbd4f812d,0xbd62381e,0xbdf4144a,0xbdc4c70f,0xbddd9146,0xbb6fe2dd,0x3d832781,0x3e01c94d,0x3e825c05,0x3ed4c58d,0x3f1040be,0x3f173244, +0x3f1d3903,0x3f13be9e,0x3f205d5a,0x3ec887bd,0x3e90a981,0x3de822ee,0x3e399ea3,0x3e8049b7,0x3efbba54,0x3e17de23,0x3ee4961b,0xbd810b1d,0xbec6da71,0xbd348004,0xbe209e8f,0xbd893896,0xbd44c2f9,0xbcb6c0b8,0x3d20acc4,0x3d779d6d,0xbd2305b3,0x3d8d973a,0x3d458739,0xbcebd1db,0xbcbebcb7, +0xbd52c3c6,0xbdabebed,0xbd09ae23,0xbd9a91d7,0x3cd94f92,0x3e14a24e,0x3e524bc1,0x3e911d55,0x3ec5cdd6,0x3edc2576,0x3ed9a118,0x3ec57316,0x3e8f2745,0x3e759b92,0x3e33702c,0x3dd34d65,0x3c97991d,0x3e17d7ac,0x3e87c759,0x3f179a56,0x3ee0aee8,0x3ec46e68,0x3e132f1c,0xbdacfe31,0x3b8a2ce2, +0xbd9599cb,0x3ca3086a,0xbcabc023,0x3c26802b,0x3c83274e,0x3cdf02e0,0xbcd634ff,0x3d361cb9,0x3d927a49,0x3d616c71,0x3d3e5b86,0x3ca9b4a0,0x3ccc26db,0x3c28f797,0x3b96ccd3,0x3de1a05e,0x3dcff7d9,0x3dcb00f3,0x3e058623,0x3d684774,0x3ce3286d,0x3d8e4120,0xbb89d683,0xbd83ce33,0xbe65ff37, +0xbe2455c5,0xbe44d754,0xbe265fae,0xbd91013d,0x3c8b13c3,0x3e882562,0x3e513800,0x3e0a105e,0x3d3a0ee6,0xbdc5785d,0x3a924ab4,0xbcae8f64,0xbb1afeb8,0x3b38e371,0xbc9e130b,0x3cf4b4d3,0x3d535989,0x3d2ad46a,0x3d0002e9,0x3ca3adb4,0xbb009f97,0x3cb1c3bd,0x3cc7467a,0x3d74494d,0x3d864e81, +0x3d51e78f,0x3d83118d,0x3dd37a9d,0x3d82fd3d,0x3c3d537f,0xbd18038b,0xbdf680d2,0xbe272810,0xbe9711c1,0xbe988a40,0xbea9d7e3,0xbeb5923f,0xbe906dc0,0xbe7417b0,0xbdc988cd,0x3c696276,0x3e4fb416,0x3de36019,0x3d3519e2,0x3da57f1e,0xbc2f2802,0xbc8ae887,0xbcc0cc10,0xbd4bf462,0xbc65f589, +0x3c0ae010,0x3d0e18ad,0x3d75a1bd,0x3c9b2d23,0x3d89f6df,0x3d41e181,0x3d0acd4e,0x3cd1d1c7,0x3d0a35ff,0x3c83b7c3,0x3cf1576c,0x3d9ee340,0x3d0fc83e,0x3c45203c,0xbc805b99,0xbda57c82,0xbdf13771,0xbe13ac1c,0xbe39cd23,0xbe288398,0xbe32e24d,0xbe3bcbf9,0xbe189400,0xbdeb8754,0xbd9633da, +0xbd704b28,0xbd22a1ac,0x3d1324c8,0x3cf3388f,0x3c2665bd,0xbd1cf3ee,0x3a3132ac,0xbb3ff524,0x3c7db1c2,0x3c8ff866,0xbb9e57d4,0x3c207a64,0x3c695346,0x3c9fd122,0x3cb042f9,0x3bfddb65,0x3cef6c66,0xbc42c3aa,0x3c3ac47c,0x3b7c5cd1,0x3c2a4b17,0x3c2957fa,0xbbd9c1ee,0x3b71f9e1,0xbdd89ac6, +0xbd6a41c0,0xbdaa2967,0xbdd3489a,0xbe065422,0xbe238368,0xbe1af7a6,0xbe103bba,0xbe06c061,0xbdf1d1fc,0xbdc99e28,0xbdc54542,0xbd8dc839,0xbd6c71f6,0xbd519ba2,0xbd3d2341,0xbcfbd805,0xbc7a37ec,0xbd652a5e,0xbc874c11,0xbc99aed1,0xbc90ea18,0xbbc13c6a,0xbc481425,0xbbe3b259,0xbba21e36, +0x3c1edd5e,0xbc2fbf0e,0x3c33e8bb,0xbcaacd79,0x3c9fef0d,0xbc93ff68,0xbcd23be7,0xbd15fdf9,0x3cbdc7bf,0xbd90398d,0xbdb71532,0xbd7acfe1,0xbd883363,0xbd7ea377,0xbd901972,0xbd987f25,0xbd700c44,0xbd5588cd,0xbd2a926b,0xbd5c2eb1,0xbd8eb2a6,0xbda85fce,0xbd9e2e5f,0xbd969b4c,0xbd879fe6, +0xbd436762,0xbd0f6e2d,0xbd06588c,0xbd1b698c,0xbd024f48,0xbd114647,0xbd1e7bab,0xbd2347d3,0xbcf83bfb,0xbcd4308a,0xbcc44a77,0xbca9fdf6,0xbc4ace78,0xbc54285d,0x3b1390b7,0xbc47d60d,0xbcc62083,0x3c913ff3,0xbcd993d8,0x3cdb88f1,0xbd5a8437,0xbd0f8f50,0xbd5b1e9d,0xbd633f33,0xbd73b1be, +0xbd639c94,0xbd49c5c2,0xbd83d47a,0xbd7bf5d8,0xbd80babd,0xbd629d39,0xbd12efd4,0xbceca9c7,0xbced8ceb,0xbca0eb21,0xbcd0a00a,0xbd00948f,0xbd0620ed,0xbd037d95,0xbd0553ef,0xbcf6d1ed,0xbc70db39,0xbcfafe82,0xbcdec131,0xbc8b95a9,0xbc7f9d41,0xbc585eb9,0xbc3b052a,0xbc16f9f8,0xbbe10168, +0xbbb19e30,0xbccbcb30,0xbd0e23b6,0xbb9b7f29,0xbd0bbc6d,0xbd598652,0xbd577860,0xbd3d8da5,0xbd40a039,0xbd35f330,0xbd3b9098,0xbd418d40,0xbd3f6e13,0xbd3812e9,0xbd1e74de,0xbd1aa6a2,0xbd2074cf,0xbd287a8d,0xbd3248be,0xbd319e73,0xbd224df1,0xbd20ab85,0xbd165dd3,0xbd531137,0xbbab3ac2, +0xbc3258c1,0xbb68f7f6,0xbd1df7fc,0xbd38306d,0xbd06f5aa,0xbcb1c1f9,0xbd093dc1,0xbd310e23,0xbd212f37,0xbd15fde5,0xbd072f19,0xbd07c2ec,0xbd1baf55,0xbd0d53d3,0xbd084eae,0xbcafa034,0xbd22c4ee,0xbd15b8e3,0xbca91d49,0x3c910bef,0x3c0767b5,0x3c38f246,0x3c63dae0,0x3c8eb266,0x3ca3c0d0, +0x3ca9161a,0x3c959324,0x3c8f474d,0x3c7f6320,0x3c766ca2,0x3c376a94,0x3c233cb0,0x3b7b1670,0x3a1bfa99,0xbc1965cc,0xbc03a72f,0xbd7b4f58,0xbd84d0af,0xbd871fe9,0xbce72baa,0xbd13a0bd,0xbcfc39a5,0xbcd54120,0xbca94f1f,0x3a10582f,0xbc697cd5,0xbc9b3fb5,0xbc98839e,0xbc17552f,0xbc5f2172, +0xbd15a609,0xbc957a50,0xbce39d33,0xbc958dc6,0xbd2e9791,0x3bcce3dc,0x3c4bbd88,0x3c4f0c47,0x3ccbf295,0x3cd166e2,0x3cd7d364,0x3d0db90c,0x3d145255,0x3d04b7c3,0x3cb9d6a4,0x3ccf5955,0x3ca966a2,0x3c9ad725,0xbbbee648,0xbd29f19c,0xbdc6b20b,0xbdaeb84b,0xbdc3d4e1,0xbddb14de,0xbddb93da, +0xbd8ad479,0xbd3be266,0xbd1375ef,0xbd1035da,0xbc50fd1d,0xbac39406,0x3c8e6ffe,0xbc51f426,0x3c7b7110,0x3aef4822,0x3bba6e08,0xbc80133a,0xbc6813b7,0xbc509412,0xbca441e9,0xbcbee726,0x3c89df51,0x3d2f4eee,0x3d295bde,0x3d856326,0x3d9a58fd,0x3dbbe4ea,0x3dcc04fc,0x3db30f78,0x3dadfd97, +0x3d8de778,0x3d8918d9,0x3d5a52be,0x3d411a5f,0x3b459d1f,0xbd029d88,0xbdf9fbcc,0xbddb5ce2,0xbe2f11b7,0xbe3aaf62,0xbe0d9c60,0xbd9d68a3,0xbd9aea59,0xbd059c59,0xbc0b856e,0xbca64093,0x3cc778f8,0x3d022fee,0x3c6e443b,0x3cbea4a9,0x3c58643c,0x3cd0b137,0xbc5e2210,0xbc5dfabb,0xbb7edf58, +0xbc991912,0xbce32d6f,0x3aec3e6a,0x3d52d34f,0x3d180db7,0x3da1200f,0x3db98052,0x3dc79125,0x3de6e2b2,0x3dd8ee99,0x3dc4ba37,0x3d8343ac,0x3d9ea989,0x3d82663a,0x3d98066f,0xbc58c747,0xbdcc4961,0xbe937f39,0xbe7180c1,0xbe220d0e,0xbe4ba9ff,0xbe4c59b6,0xbdf74b60,0xbd53ae9a,0xbd4d306b, +0xbd016080,0x3b55a719,0x3d3dbd5b,0x3d4feb66,0x3d422e91,0x3d665cb1,0x3d3b4714,0x3cd0307b,0x3c27f601,0xbb76beeb,0xbca34712,0x3c749bb3,0xbd76eb90,0x3d3400cf,0x3da7ea44,0x3dba72bb,0x3df93010,0x3e1bd266,0x3e3f9407,0x3e4a57f3,0x3e33cc7b,0x3e109d73,0x3defcc01,0x3de9868a,0x3dd74cd6, +0x3da5c959,0x3c4d67f1,0xbd8be84f,0xbe714703,0xbe5a3eeb,0x3de7a7fc,0x3e57ddd4,0xbe52fcf8,0xbde116eb,0xbda6c795,0xbd90ce92,0xbbdebb36,0xbd98c331,0xbc740c89,0x3cbcf472,0x3cdebdc6,0x3d7e1387,0x3d72fa6f,0x3d4b7bf8,0x3d07f402,0x3ca51c4a,0xbc793bb5,0x3cb82d5a,0xbcc16e7b,0x3cdb6db3, +0x3da58173,0x3dc50e52,0x3e48f2dc,0x3e6a8fa1,0x3e90b513,0x3ed45971,0x3ef14878,0x3f05edd9,0x3efd5e30,0x3eca2268,0x3eb0b134,0x3e8379f1,0x3eabed7c,0x3eb851d7,0x3e97914a,0x3e5b94c5,0x3f011ccb,0x3d62bbf4,0xbe860dfb,0x3d612bff,0xbdc3e3a9,0x3a839f85,0xbd0328dd,0x3b193475,0x3c991d05, +0x3cd7fb87,0x3d44f02c,0x3d75b066,0x3d82bf6b,0x3d0f02f2,0x3cd135f7,0x3cfb2d90,0x3a5849e0,0x3ba3ae72,0xbb75bff1,0x3da17425,0x3e0d309f,0x3e2a2269,0x3e5044da,0x3eab4a2c,0x3ec40082,0x3ef0de43,0x3ecc18d8,0x3eb5eefe,0x3e4d6154,0x3e18fdc9,0x3dccce9c,0x3da189c0,0x3e2f60ac,0x3e7c339e, +0x3ec348e6,0x3ed9e3af,0x3e903fa7,0x3eab83c9,0x3e7bb0f5,0x3def338e,0x3d909fc4,0x3d0b64ac,0x3bf09be0,0x3b06f9e0,0x3d01b27d,0x3d4c36c1,0xbb517d38,0x3d6737b5,0x3d282e0e,0x3b00b0e1,0x3cb40be7,0x3c53ecea,0x3d39a139,0x3d26275f,0x3d90b84f,0x3d7db608,0x3cee81e3,0x3c54db4e,0xbd479c6c, +0xbdabbac3,0xbe12f49a,0xbdcf712a,0xbe4dfc2d,0xbe4a0533,0xbe90708c,0xbe5339c9,0xbe5207ca,0xbd944cdb,0xbe0a2319,0xbe2b6daa,0xbe2bdda8,0x3d3567d2,0xbe5528f7,0x3e6cd929,0x3e94680a,0x3de02d4f,0x3ded48e1,0x3d46bcd8,0x3d3da21e,0x3c6226bf,0x3d72c689,0x3d84c44f,0xbcada448,0x3d4209db, +0x3d1ac9df,0x3ad5f821,0x3c8f844f,0x3c434460,0x3d45af8b,0x3c9dcae4,0x3d878334,0x3ccd13a1,0xbe0961e0,0xbe36fb7c,0xbe704bfc,0xbeb4fbff,0xbedcd1aa,0xbee7a392,0xbf03b762,0xbef04c50,0xbefe9500,0xbebf2192,0xbe9aefe4,0xbe2428ff,0xbe7030ff,0xbe954cc9,0xbedb6c26,0xbe874306,0xbe8700df, +0xbd8f2a01,0x3dd1793d,0x3c8916f7,0x3d357df0,0xb98fc013,0x3d4e49f1,0x3cd7d754,0x3d4a7905,0x3d1d0734,0xbbd1cd03,0x3d06f2c0,0x3d13fc9f,0x3cb6ee6f,0x3c8d5a23,0x3ccc3a2f,0x3cedcba0,0xbb853f6b,0x3c59fb22,0xbddde210,0xbe3edcb8,0xbe6f3bdd,0xbe991451,0xbe93691f,0xbead08b5,0xbecdc998, +0xbebc37fb,0xbeada585,0xbe7c1f51,0xbe6a298c,0xbe38322c,0xbe027c0d,0xbe199f46,0xbe069355,0xbe92fe30,0xbe1ecb71,0xbe26bc81,0xbdc702e4,0x3d01800d,0xbd4c79af,0x3cd14fc3,0x3bacaf97,0x3c128c09,0x3d078d98,0x3cd4d2d8,0x3ccb79ba,0x3c98dceb,0x3bcfb0b5,0xbc1fbde5,0xbc3ccef3,0xbc47e51c, +0xbb8e7a6f,0xbd482351,0x3bf06501,0x3c0a3ec3,0xbc2fbcfc,0xbe15f073,0xbe1e2a70,0xbe6856bf,0xbe7e6394,0xbe7d5b60,0xbe491e11,0xbe2360b5,0xbdd5e406,0xbc4d9014,0x3cf95b8c,0x3c200e23,0x3ccecb26,0xbbcb296c,0xbd4e88fa,0xbe324548,0xbe1cf079,0xbd9c0c1e,0xbdd1b2e4,0xbd0911f0,0xbca64964, +0xbcc408e5,0x3bd17961,0x3a513055,0x3ca3388d,0x3c8b3f6a,0x3ca45e06,0xbbb4ef9b,0xbb00c3e6,0xbbf4e13b,0xbc3b6b57,0xbcfbe5e5,0xbd809987,0xbd650cf6,0xbdc52257,0xbd8785cc,0xbe011a71,0xbe0ea6e6,0xbe001909,0xbdf74e45,0xbd901c88,0xbd64bef3,0xbd34d133,0xbd38a239,0xbccc7669,0xbb94ad41, +0x3a3a9aca,0xbcb8849d,0xbd826186,0xbd6343bd,0xbd114ce6,0xbd490ade,0xbd866a6a,0xbd1da009,0x3c91f2fb,0xbcb535c0,0xbc89257b,0xbcc6be25,0xbc9030c7,0x3c3777c1,0x3c6582d7,0x3ca097f5,0x3c6bfb02,0x3c9c5c63,0xbb2aec93,0xbc9622eb,0xbcbcd5bd,0xbd43dc09,0xbd5de8dd,0xbd97aacf,0xbdc0b882, +0xbdd688fe,0xbdbdbbf8,0xbd91a97e,0xbd8d090d,0xbd56fb59,0xbd0360f7,0xbcad7edf,0xbb75e64f,0xbbf0649f,0xbbf863de,0xba33162d,0xbb9020e7,0xbc7a8e1d,0xbc9113da,0xbd0be0eb,0xbd032212,0xbcbf330b,0xbc57c39a,0xbc4d29b1,0xbc430080,0x3c8bedf6,0xbab2d2aa,0x3b2d218f,0x3c25b466,0x3b43a6a9, +0x3bbcb2f0,0x3bf3526d,0x38864ffd,0x3c5880db,0xbc4ee171,0xbc8bdd69,0xbcf00263,0xbd2a63b8,0xbd64a432,0xbd8102d2,0xbd808f42,0xbdaca4bc,0xbdace8d5,0xbd74494f,0xbd8498e6,0xbd5d4c5f,0xbd540c04,0xbd23c502,0xbd038518,0xbd403369,0xbd53f392,0xbd81da6e,0xbd4bd035,0xbd096730,0xbc4f494f, +0xbc5008e7,0xbc854036,0xbcbf9482,0xbc7d936c,0xbcd50e4c,0xbcf9d629,0xbd06006b,0xbd04f946,0xbcf1a0d2,0xbcee52ab,0xbcb47300,0xbcbf69c4,0xbce254c9,0xbcfa0df6,0xbd16cfa8,0xbd0dc405,0xbd106da5,0xbd1094c5,0xbd17debc,0xbd0ff5d3,0xbd356330,0xbd46e709,0xbd4ccd3f,0xbd42dcd4,0xbd501913, +0xbd42200f,0xbd34a854,0xbd250bf9,0xbd252554,0xbd24b8f2,0xbcdad049,0xbc7a0fab,0xbbe98340,0xbbdd6dfb,0xbc4a43ac,0xbc831109,0xbca852f3,0xbc9264e2,0xbc8c1a1b,0xbcbece4c,0xbca48036,0xbca24500,0xbcb91e3e,0xbcbc89d8,0xbcd7fb60,0xbc94714e,0xbcb9b4a6,0xbcdc5325,0xbcd9d910,0xbccf41c7, +0xbccaf4d2,0xbccada5f,0xbccc285b,0xbcd54f88,0xbd0f498c,0xbd0b8ff6,0xbd1798c8,0xbd1c2cf2,0xbd158af9,0xbcfaec1b,0xbce16b96,0xbcd3710d,0xbccc2c6d,0xbcbfff2d,0xbcaa412b,0xbc9c1086,0xbcabac57,0xbcc816d7,0xbcd49f55,0xbccce5b9,0xbca4b4ac,0xbc838449,0xbc88d357,0xbc99f364,0xbcaa06cc, +0xbca948e0,0xbd267baf,0x3e060a8b,0x3db8661b,0x3ddac554,0x3dd4c547,0x3d70026f,0x3c95f251,0x3db528f0,0x3d877feb,0x3cd510c8,0x3cc3d729,0x3cbb0d1f,0x3cb927bf,0x3cb5fdeb,0x3c79a638,0x3cce1b5e,0x3d86aecc,0x3da92672,0x3c8e1424,0x3d7c5546,0x3da21892,0x3d9d880c,0x3d9ca4cf,0x3d9dcf4a, +0x3d971c74,0x3d9e87dd,0x3d9e8847,0x3d985e7c,0x3d9cba40,0x3da07700,0x3da42a5f,0x3db2d47d,0x3dbba0a0,0x3dd5343d,0x3dcac3eb,0x3dc6ebf8,0x3dc6005a,0x3dc0e78e,0x3e12fced,0x3e00d1d2,0x3b25acf6,0x3d9199b5,0x3d289462,0x3d916d2e,0x3d979bbd,0x3d7489d8,0x3da2592f,0x3da5dc93,0x3d852743, +0x3d92192e,0x3d9f1e7a,0x3d985dff,0x3d1f204d,0x3d9d3db0,0x3d87ee99,0x3d904b6e,0x3d966281,0x3dbf9a2a,0x3db6697e,0x3dc2de4e,0x3db574fc,0x3dba4019,0x3dbaccac,0x3dca5bf7,0x3dd73fd7,0x3df12fa8,0x3e0565f9,0x3e19b493,0x3e22847e,0x3e3e99a6,0x3e36916b,0x3e405df5,0x3e461b2d,0x3e2c59e7, +0x3e45209a,0x3e1dd5ad,0x3d8c72f7,0x3dbbfeae,0x3d380b1e,0x3d724904,0x3d350090,0x3d661086,0x3d70a0d3,0x3d9a81ce,0x3d4a837c,0x3da22db4,0x3d492b6d,0x3d97ae41,0x3d450b1e,0x3d4927d5,0x3d7ce724,0x3d4ee4d9,0x3d9d1a3b,0x3d691c79,0x3d7f0788,0x3d824817,0x3d555ace,0x3d8235fe,0x3d854f2c, +0x3d857078,0x3dab9b48,0x3dcb6515,0x3e06c61b,0x3e22abf5,0x3e4592d0,0x3e71ee97,0x3e632cff,0x3e5ad39a,0x3e6a3e88,0x3e547a08,0x3e899628,0x3e10a7ed,0xbc06a50e,0x3d3708cf,0x3cf8f0a3,0x3c43603c,0x3bfc7582,0x3d08b2a3,0x3d546885,0x3d685c9f,0x3cdb08ef,0x3d1e3e87,0x3d128a65,0x3d57900a, +0x3c910efc,0x3c9a5581,0x3d1c8cd5,0x3d0e4def,0x3d6a843c,0x3d5c110e,0x3d3f14da,0x3d849a7c,0x3d427a44,0x3d8ae621,0x3da6dd1a,0x3db810a0,0x3dfa6c24,0x3e1ffb70,0x3e5791a6,0x3e804442,0x3e9302d2,0x3eaa7d02,0x3ea6c16d,0x3eab3f5a,0x3ebea803,0x3e9a6ba6,0x3e9a6e29,0x3e7e21ad,0x3da0603d, +0x3d9fe9ff,0x3d3fa135,0x3d1bd80c,0x3cfee9df,0x3ca7442b,0x3d1a252a,0x3d50d7c2,0x3cfaa9b0,0x3d288493,0x3d0ca0a6,0x3d0ab684,0x3c47ff74,0xb98dc8f6,0x3ce11982,0x3ca398e4,0x3d8cdd46,0x3ccf1e1c,0xba62f932,0x3c05ce5d,0xbc1b0be8,0x3b222d0a,0x3d03673b,0x3c8cfe97,0x3d87ced6,0x3df9b2f9, +0x3e3e4409,0x3e8008d8,0x3e96a738,0x3eb16794,0x3eaf60d7,0x3e9e54d1,0x3eb7bbe4,0x3ea46e18,0x3e866b85,0x3e316bd1,0x3e9fc6bd,0x3e163c93,0x3e2e6d09,0x3dbdd408,0x3db2432e,0x3d9067b1,0x3d6c1632,0x3cdd3ff4,0x3c6b7a5f,0x3d473c02,0x3d39f25d,0x3d3cc864,0x3d09d1ec,0x3cce7775,0x3d26c387, +0x3cca01dc,0x3d8e03d7,0x3d97606b,0x3db4afae,0x3ddce371,0x3e1af8a5,0x3e45e854,0x3e182d5d,0x3e851761,0x3e8670e0,0x3e74ba68,0x3e0c79cb,0x3e1d0b94,0x3e1b1eac,0x3dc00dc8,0x3e17fd6d,0x3e35eccc,0x3e759789,0x3e9fb8d9,0xbea4acf9,0x3df0fdf1,0x3e91a41c,0x3d758cec,0x3dda43a4,0x3d593dcf, +0x3d6eb6f2,0x3c89c4c6,0x3d10f52a,0x3d02f1ec,0x3d3512c4,0x3d4715d7,0x3d3c5426,0x3d1620d9,0x3cfaf60b,0x3caafc91,0x3d5eb4a3,0x3d80d226,0x3dc6373e,0xba19c25e,0xbdf426ed,0xbe2b2a34,0xbe866b8b,0xbea66935,0xbeb66364,0xbed405cd,0xbed2f657,0xbeb31f84,0xbe7de60c,0xbe24f421,0xbd6a6441, +0x3cb01a17,0xbd930155,0xbe2959df,0xbeb0a857,0xbea868fc,0xbea728ad,0xbe24c36e,0xbd23efe4,0x3bf97538,0x3d87e026,0x3d448a17,0x3d86c337,0x3ce084e3,0x3d9346ae,0x3d94e678,0x3b696455,0x3d934dae,0x3d7b260f,0x3d6a18dc,0x3d49fba8,0x3d1269ea,0x3d51af2a,0x3ce0cc54,0xbbfaee15,0xbdaa8972, +0xbe14cdb8,0xbe408310,0xbe7166f3,0xbe878956,0xbe86707f,0xbe6e6486,0xbe3f8633,0xbe266b8b,0xbdd399f7,0xbdacd945,0xbd5ec096,0xbdfdfa58,0xbd7186ef,0xbd3ab402,0xbc69d741,0xbe2f7b0e,0xbbee5c49,0xbe7c2071,0xbe11962d,0xbd66bad3,0xbc835606,0x3c8c566d,0x3cfe62fb,0x3c8ee0a7,0x3d724a38, +0x3d8582af,0xbc803755,0x3d55c4b6,0x3d245637,0x3d1c1320,0x3c1e00eb,0xbb90a516,0xbc6c9bef,0xbd313c42,0xbda00e2e,0xbe00cd31,0xbdc0a15a,0xbdcbef7d,0xbde0e641,0xbd978dbe,0xbd0160bc,0x3cda6d4e,0x3db4a5f8,0x3df2cb63,0x3e10c0a9,0x3d38aff0,0xbc60020e,0xbe1135ef,0xbcb3f612,0x3d81af8c, +0x3ea15d19,0x3d80703e,0x3de33387,0xbbc434f4,0xbdb9f964,0xbca38b2b,0xbbadf791,0x3ca8cb29,0x3c1636b6,0x3d0fe06b,0x3cdc78e2,0x3cc435f3,0xbc08a56e,0x3b55b7b8,0x3ab86201,0x3b1026ec,0xbd0bcaf6,0xbd7b7fc0,0xbdb546a0,0xbd7aebfc,0xbdb032bb,0xbd55958a,0xbd1955f9,0xbc8da41c,0x3c238873, +0x3cfadcef,0x3d6e466d,0x3d58c8f7,0x3dcbc23e,0x3de286ee,0x3df3540e,0x3dabc377,0x3d8b78bd,0x3c469551,0x3d765f76,0x3d8d5fcf,0x3e7133bf,0x3d8cef85,0x3df6d70e,0xba8882fa,0xbd8af038,0x3c865d7a,0xbc329310,0x3a7f49b7,0x3cb7a37c,0x3d3eff8f,0x3d2d5643,0x3ce4f7e6,0xbc0f4a30,0xbc643121, +0xbb5edbb0,0x3cdd2ae5,0xbaba7346,0xbcbf6c64,0xbcfd6b13,0xbdbaa306,0xbdc5d18c,0xbdd48db5,0xbce8335d,0xbd1ecfd1,0x3caf3d8c,0x3d35fc76,0x3d94d527,0x3d7ceef6,0x3dc387c6,0x3d5c17be,0xbce21e12,0xbd3689c8,0xbd4cb763,0xbd88045d,0xbd4e7fb1,0xbb70e1b8,0x3e0a5330,0x3e031cbc,0x3db05837, +0x3d7d69bd,0xbc174751,0xbcf8c293,0xbc366438,0xbcde9f13,0xbabd6f34,0x3c348654,0x3c38ba9f,0x3c09e54a,0x3c27abf1,0x3c8bd363,0x3c3432a4,0xba92358d,0xbc3032e4,0xbba93ef3,0x3bb22717,0x3b00604b,0xbd9ab014,0x3b0589a2,0x3c096304,0xbcbcd639,0xbcbd5168,0xbd34be63,0xbd180bd6,0x3b71ad5a, +0x3c50b236,0x3a881abd,0xbc75826b,0xbd2684b2,0xbcb8bf57,0x3cada541,0x3bb0f19f,0xbb9a9e61,0x3cb4ee7c,0x3d9032a7,0x3d5f8fcb,0xbc7dd7b2,0x3c075111,0x37839bb3,0x3be3adbc,0x3ca7c078,0x3b0bdfb1,0x3c5d148c,0x3b7debe7,0x3ba5feb0,0xbb012a0f,0x3c2dd634,0x3b11d7be,0x3c9d2634,0x3aeca8c7, +0x3b1f70fa,0x389c8d28,0xbb3028cd,0x3add6fa7,0xbcdff532,0x3af9ab3d,0xbd1e3506,0xbd659883,0xbd47df86,0xbd18c492,0xbcd4cc3c,0xbcf3cc77,0xbcfb034c,0xbd24633d,0xbd295a81,0xbcef8691,0xbc56bf37,0x3a9a43c4,0x3c2bf6c3,0x3cc60369,0x3cf4c597,0xba166242,0x3c005667,0xbcb1911b,0xb9c8cca0, +0xbc06a773,0xbc4368ed,0xbaaab8e5,0x3b8d9b7f,0xbb6f60fb,0x38eb5251,0xbca05e23,0x3c177fd2,0xbbd028e5,0x3c943fe8,0xbc3d45f6,0x3b9e76f1,0xbba313d1,0xbc1c1b8f,0xbd1cb43f,0xbb46736e,0xbc4dc059,0xbd090db7,0xbd41ac5c,0xbd4cd1a6,0xbd696def,0xbd8511a5,0xbd3c154d,0xbd0d4bed,0xbc782eca, +0xbc421b17,0xbc3f7256,0xbc9af83a,0xbbaf54bf,0x3b787783,0x3c4f248e,0xbb37e923,0xbce0b5ad,0xbccdc41f,0xbd02f249,0xbcadf4a9,0xbca23e88,0xbc86c612,0xbc75aec7,0xbc834743,0xbc1bcb6c,0xbc7817ca,0xbc66ad96,0xbc9f098e,0xbc64e25d,0xbcb8785b,0xbc99b4f2,0xbc928bec,0xbd1d70e9,0xbc7ae4df, +0xbd4af05c,0xbc23ff33,0xbc4adc31,0xbc5a984d,0xbc4dbc3f,0xbc95ae38,0xbc9c7b85,0xbc9a5e4b,0xbce3fe4e,0xbd0b9155,0xbd285945,0xbd3b6355,0xbd2a5b2f,0xbd234fed,0xbd221fad,0xbd2adb9a,0xbd1ffc9d,0xbcf42f80,0xbc4313bf,0xbc1dbfc5,0xbc331e4d,0xbc6cf0e3,0xbc890fbf,0xbc25207a,0xbc309780, +0xbc8139cb,0xbca08289,0xbca08820,0xbc9d96c3,0xbcb36a5c,0xbccee5f2,0xbccbc00d,0xbc0c1149,0xbb852f99,0xbcbcf2f4,0xbc356516,0xba8ce057,0x3766fa25,0xbc0b6ac8,0xbc39fd6b,0xbc6d33ef,0xbc898af5,0xbc9c88de,0xbcabb363,0xbca439fc,0xbc810ea1,0xbc5cca55,0xbc3f5e6e,0xbc5d646d,0xbc7a3fab, +0xbc5b80ff,0xbc34253c,0xbc31c894,0xbc494033,0xbca1a3c5,0xbcfb0c6d,0xbcafc916,0xbd418971,0xbb86b5a8,0x3d4e6691,0x3db0e636,0xbc17d141,0x3d0819fd,0x3db81abd,0x3dc5831b,0x3dc71f0b,0x3dae32d2,0x3db3ccd7,0x3dd0efe7,0x3dba2e7b,0x3d089754,0xbb5028f8,0x3dbbf6f8,0x3d258edd,0x3a1d3215, +0xbd34bfe0,0xbd004a4f,0xbd0dae00,0xbd111fb7,0xbd1e8186,0xbd20e5d1,0xbd154bf0,0xbd10688b,0xbd0c4531,0xbd079f8b,0xbd113bd5,0xbd170c04,0xbd1f48ef,0xbd1a2fd5,0xbd07f64a,0xbcb563ed,0xbcd1bae2,0xbbc0266b,0x3adcdf97,0x3e02180a,0x3cad3cbc,0x3d8312ab,0x3cb310e5,0x3caf5453,0x3cc69a8c, +0xba814557,0x3ce5c647,0x3ce21a71,0x3cdcf238,0x3c514a7d,0x3d08ef76,0x3d851652,0x3b30069a,0x3cda9b36,0x3c2e1951,0x3d0b3418,0xbd35f2d2,0xbd1ff8c9,0xbd2c28cf,0xbd53346e,0xbd50417b,0xbd536b3e,0xbd708d7d,0xbd7c875f,0xbd870558,0xbd8ee99b,0xbda6e08b,0xbdaf67ca,0xbda55c0a,0xbd9ab746, +0xbd6d012d,0xbc282c10,0xbbff0b6c,0xbc9a6a08,0x3c38c4cb,0x3dabbcbb,0x3cc721c4,0x3d4bbea1,0x3d0f184b,0x3d57b26b,0xbbe19a25,0x3d3861b6,0x3a571c7c,0x3d179cd7,0xbc5de7f2,0x3d024fff,0x3c9797b3,0x3ca40dae,0x394848d1,0xbbe0ea37,0x3c3bb8bb,0xbbf69b19,0xbd14e480,0xbd70a249,0xbd617ab5, +0xbd956226,0xbda52338,0xbdb5c9f3,0xbdad9be4,0xbdae6195,0xbdafee14,0xbdb50d62,0xbdd4cbd9,0xbde1dcd8,0xbdde207e,0xbdc2df9c,0xbd8b4d47,0x3a88bd1f,0xbc4b8c09,0xbc058f27,0x3dadd693,0x3e2568ba,0x3d96665a,0x3d9cd2e7,0x3d722414,0x3d2e847c,0xbba97698,0x3cb28d84,0x3ce61b32,0x3c9b1993, +0x3cb893ae,0x3d10068d,0x3ca74e71,0x3c935b09,0xba1d2c7a,0xbc3ad8f6,0x3b9f0029,0xbbfac3a5,0xbd1b2d2b,0xbd6ac808,0xbd6bb1f4,0xbdb74a34,0xbdd09be2,0xbde2db0b,0xbdf3522f,0xbe05a0c3,0xbe0df763,0xbe1da300,0xbe3ebba9,0xbe475571,0xbe327505,0xbe2056b2,0xbdda831d,0x3cb625b3,0x3c512eb9, +0xbd84af81,0xbc8203c2,0x3df11845,0x3d7605bb,0x3d40f473,0x3d748176,0x3d41807d,0x3bc7fecd,0x3d28c47c,0x3d2e108e,0x3c295aea,0x3cfc6cd9,0x3cc1ecbc,0x3cccd056,0xbb9901ad,0xbc3e6a89,0xbbaf2be3,0xbcf7c8fb,0xbb002fde,0xbd7fe159,0xbd75c81a,0xbd9aa5a3,0xbdc8439a,0xbdf4331c,0xbe16f643, +0xbe01fcc6,0xbe033eef,0xbe0b091b,0xbe11c028,0xbe42d9f6,0xbe454586,0xbe2e8cd7,0xbe2463c1,0xbdc53f13,0x3c1fae05,0xbd023052,0xbe48a15d,0xbe069776,0xbc23f18c,0x3db9cadc,0xbc9d5a43,0x3c10cc4a,0xbce21b01,0x3c6a35eb,0x3cb02e19,0x3d4ba69d,0x3ce2b929,0x3d165b9d,0x3cc220d9,0x3d39bd1f, +0x3c5fbc98,0xbc62e274,0x3ba8fd6a,0xbcef460b,0xbd0022b8,0xbdc0bc54,0xbe370bde,0xbe614ac4,0xbea7afab,0xbeb063e1,0xbeaf0146,0xbee787f4,0xbee5aa02,0xbec97d6a,0xbe7cbb01,0xbe4fa580,0xbe2c4b49,0xbda801b2,0xbd9679af,0xbdb8a748,0xbdf7d649,0xbe71f2d2,0x3d3cba39,0xbe20e15d,0xbe11261b, +0xbd6c6e7a,0xbc97bfa4,0xbb738073,0x3d1a2076,0x3da609bb,0x3d886075,0x3d837801,0x3d1c88c1,0x3d317e5c,0x3d03ecb0,0x3cc71c0a,0xb9762da7,0xbcbe152e,0xbd133952,0xbd5e71d6,0xbda2e620,0xbdd21917,0xbdec2711,0xbe00c22e,0xbdcaa0b0,0xbe4516e4,0xbe4fe127,0xbe18a78a,0xbd78361a,0xbcd9f2c0, +0xbb1c1ef8,0x3d8ae364,0x3d8402af,0x3c098e53,0x3deae44b,0x3e1eda8f,0x3e73e185,0x3de7875e,0x3e1e9364,0x3b5250b2,0xbdb38d86,0xbd40cc86,0xbd94eedc,0xbccced35,0xbbce4358,0x3c9749e7,0x3d2d1230,0x3d6c582c,0x3c3582ee,0x3d5c7469,0x3d3cadb2,0x3d4d9ed1,0xb9c442e4,0xbc88e2a1,0xbd303eda, +0xbd500381,0xbd6b3e00,0xbd2b2d92,0xbcdff9a3,0xbc6cdbcb,0x3d310280,0x3d008ccb,0x3d6783ba,0x3d15d92d,0x3ded2c58,0x3e1d0a1c,0x3e0b052c,0x3e17304f,0x3e027991,0x3d3d2c2c,0x3e2ebd64,0x3e2478b8,0x3da7e36a,0x3dfc64d1,0x3bcb635a,0x3e249e6c,0x3d329ec0,0x3cf00e98,0x3bf6f5cb,0xbc27dba1, +0x3aa223e9,0x3cb74143,0x3c866a80,0x3ceae4f1,0xbc51e35f,0x3d06a821,0x3d18f70d,0x3d630508,0x3c84fc66,0xbadc5d27,0xbc13ef84,0x3a5a3273,0xbca3e6f4,0x3a09675f,0x3cfff2cb,0x3d1d6920,0x3d79bc38,0x3d974db1,0x3da21385,0x3d453cf1,0x3d110de1,0xbb8cff81,0xbd436761,0xbd12f0d0,0xbd17c226, +0xbc8149c5,0x3d8feb2b,0x3d535f68,0xbe1ce3e9,0xbd011476,0xbdf9a115,0x3c6b3d9f,0x3d3b2095,0x3cd5769d,0x3bf78a96,0x3bceed20,0x3cdaa9a5,0x3d6ccad5,0x3cf73187,0x3c9c1125,0xbc2eac4d,0x3bcd3fb5,0x3c8d0296,0x3d2d45cf,0x3cb9bb20,0x3bc37f0d,0x3c469c08,0xbb81c669,0xbc799782,0x3c2497dd, +0x3c8dfa96,0x3c0b20b1,0x3c72fef8,0xbcaa46d6,0xbd08d2dd,0xbc9c1580,0xbd79c3ba,0xbda4a0a7,0xbdc5e7ed,0xbdd11b32,0xbd9413c8,0xbc93c83a,0x3d0ed178,0x3d4951f8,0xbd8af711,0xbdbbfd96,0xbdca86a5,0x3c1102c7,0x3d6c353f,0x3ce2e9a5,0x3cb697d8,0x3cd49caf,0x3c752b47,0x3ac84aef,0x3bf9376c, +0x3c1690b0,0xbc85bba2,0x3cb9b749,0x3cfecd2c,0x3cf9f420,0x3ca6ddf7,0x3c913b2a,0x3c58602a,0x3d109b16,0x3d1cdbc3,0x3d1d460a,0x3d1c1aee,0x3c8b6f1e,0xbcd1e266,0xbd469e7f,0xbd76da0c,0xbd6ccc40,0xbdd6b1a1,0xbd9a6183,0x3be637de,0xbcc10607,0xbca8cdd4,0xbc3bfa0a,0x3d89a100,0x3d861a81, +0x3c8336bb,0xbda3af54,0xbd49b21c,0xbd825c8e,0xbba627a6,0x3bc0a799,0x3b420aca,0x3cdeb48e,0x3cd7413e,0x3c9ef15c,0x3cba4832,0x3c371cc7,0x3c904801,0x3b138b70,0x3bc4e5e9,0x3c95baee,0x3c8336fa,0x3cb3bf40,0x3c8548ed,0x3d0d030b,0x3d140593,0x3d296ae5,0x3d416c25,0x3d2cf248,0x3cab84d7, +0xbd0cf614,0xbd896210,0xbdd84340,0xbdc090aa,0xbdaffc87,0xbd9423dc,0xbd59a102,0xbd28c104,0xbcffc051,0x3cd122e3,0x3d83b039,0x3d8bcbd9,0x39fb9e1c,0xbbcf0118,0x3d2816e9,0x3c920529,0x3c4023e3,0x3bff475f,0x3c43a423,0x3cb6133a,0x3ca57716,0x3c9f9f92,0x3cd5a4ae,0x3cad3a3e,0x3cc4b885, +0x3cb9582f,0x3cb3cb37,0x3cd2a506,0x3cc3a7cf,0x3c8e9b44,0x3cfbdf32,0x3d15e9b9,0x3d0f6c32,0x3d3bf1f9,0x3d1b6fe1,0x3ce3169f,0xbbacf2b5,0xbcf3f2f8,0xbd63fd20,0xbd3261fb,0xbd22ddb0,0xbd1854c3,0xbcd69573,0xbcd0af9f,0xbcf713cc,0xbb6126f6,0x3c80a819,0x3ce24648,0x3cbb731e,0x3ce71ed7, +0x3d03de88,0x3d1016ad,0x3cf3b22f,0x3c943dd0,0x3cba1653,0x3c963f87,0x3cde689b,0x3cceea98,0x3cd2d48d,0x3cb9c97c,0x3cf94f79,0x3cdc04bb,0x3cabee77,0x3cb44c6d,0x3cd47e3a,0x3cb76f7f,0x3ceff880,0x3ccf768b,0x3d405ee0,0x3d1e3c2c,0x3d0c836b,0x3d163aa9,0x3cf81dd9,0x3cc67c1f,0x3c2c2971, +0x3b21fdad,0xbc4de9ff,0xbcea87d1,0xbce610c9,0xbceaf042,0xbcf58205,0xbcc52787,0xbc7a2ff5,0x3afbebab,0x3c8be06d,0x3cbbeb22,0x3d144276,0xbc1c7728,0x3c8c70dc,0x3c95bbbc,0x3c8e8cbf,0x3cf2fd11,0x3c489779,0x3cb96149,0x3c2c079f,0x3c006fdc,0x3b1d2abf,0x3b5bcf4e,0x3afc8d4b,0x3b85991b, +0x3b98b099,0x3b7c0b33,0x3c5b81bf,0x3a0ef26c,0x3c76506d,0x3c0eb4a1,0x3b75cdaa,0xbbdaa7d1,0xbc5e9145,0xbc930bdc,0xbca606b3,0xbc6ca88c,0xbbbcf386,0x3ad5fd46,0x3a4cd797,0x3ae2e650,0xb976b7c4,0x3c0a644b,0x3c91a432,0x3c97f568,0x3c980147,0x3c9327ee,0x3cd24082,0x3c117970,0xbb9a2b94, +0xbc7c8ec6,0x3c6077fa,0x39cf3917,0xbc6f4334,0xbc90ec98,0xbc69001a,0xbc47d421,0xbc437b15,0xbc5c2823,0xbc72938d,0xba42f8d1,0x3c280c73,0xbc48d4ff,0xbb6f50b5,0x3bfbe250,0x3c96fe8b,0x3c73efbe,0x3c6ed7cb,0x3c81c7a6,0x3c849633,0x3c7011dc,0x3c41aba0,0x3c266af0,0x3c019dd0,0x3ba55905, +0x3b943712,0x3bd8d30c,0x3bb9500c,0x3be38c75,0x3c147033,0x3c3d5f78,0x3c84eaac,0x3cab72f4,0xbd80bd1d,0xbd327896,0xbd37b4ce,0xbd7975a5,0xbd67658b,0xbd414a34,0xbd40d470,0xbd515019,0xbd59b5f3,0xbd4e0e82,0xbd4b5f68,0xbd418dcc,0xbd3dbf9c,0xbd428642,0xbd3c2777,0xbd49cdf3,0xbd35335d, +0xbd48c9b2,0xbd5f9f6e,0xbd44ec5e,0xbcf7c992,0xbd0ee787,0xbd0ce178,0xbd0227e1,0xbd0d60d3,0xbd129a09,0xbd145d62,0xbd11e4ce,0xbd14ebaa,0xbd17155f,0xbd19482c,0xbd10f210,0xbd2263e6,0xbd152c32,0xbd1bca67,0xbd32cf9c,0xbd335062,0xbdba5688,0xbdb08027,0xbd561540,0xbd5e65d8,0xbd6ca60d, +0xbd65e834,0xbd508cff,0xbd4538bf,0xbd0d4a46,0xbd3232a3,0xbd26bfc4,0xbd23c25e,0xbd126138,0xbd174c98,0xbd33f1ce,0xbd2dfe6b,0xbd50a638,0xbd4a92bf,0xbd6d4301,0xbd25d39d,0xbd2c3c26,0xbd364d23,0xbd183085,0xbd2986fe,0xbd2728fa,0xbd39d276,0xbd38fe95,0xbd32a1b2,0xbd1fcb5e,0xbd177639, +0xbd1704ec,0xbd850278,0xbd798f26,0xbd9872b6,0xbdcce5b0,0xbdc979a7,0xbdedc0f4,0xbdd848c8,0xbda8d3e0,0xbda57b2f,0xbd702d4c,0xbd54f726,0xbd33deab,0xbcf629bc,0xbcc6789a,0xbc275923,0xbcceb443,0xbc53a399,0xbc6dc962,0xbc3652bb,0xbca83cae,0xbcc452c9,0xbd1d2dd3,0xbd34b6ad,0xbd661dca, +0xbd15cd82,0xbd0adc06,0xbd1b3427,0xbcb5d703,0xbd0a0000,0xbd1d2ac9,0xbd3be8e0,0xbd32cc14,0xbd33a908,0xbd508ed2,0xbd1adc4a,0xbd32613e,0xbd9c15dd,0xbd84b227,0xbd950a96,0xbdf41f1e,0xbdf4b064,0xbe322280,0xbe19f6ad,0xbd9c660a,0xbd8706c2,0xbdaaccb6,0xbd2da0e1,0xbc98d8b0,0xbd0be654, +0x3a0c6949,0x3beff7cd,0x3aa56a3c,0x3c0726f0,0x3b81ba1c,0x3c8ea5d8,0xbb949bfc,0xbc5686c4,0xbcf06d38,0xbd25184f,0xbd3a78a2,0xbd0d6db1,0xbd0ba6d1,0xbd18d6c6,0xbc920604,0xbd0a3e6a,0xbd1ec6ef,0xbd40b5be,0xbd46e28c,0xbd3dbf25,0xbd1bd0d7,0xbcbcb505,0xbd002b35,0xbde5b45d,0xbdc35811, +0xbdfc7c57,0xbe50293d,0xbe3fa0a1,0xbe28918d,0xbe221875,0xbdff06f2,0xbdde6296,0xbd8fc1e1,0xbd7b05dd,0xbd19bea5,0xbcab5d24,0x3caf38c4,0x3d075465,0x3c983328,0x3ce0f3f9,0x3cc35186,0x3ca7e879,0x3ac28485,0xbc47c076,0xbd0a997b,0xbd18dcad,0xbd812953,0xbd1cfcc8,0xbce52b16,0xbcecd749, +0x3819c878,0xbc74feff,0xbd1e6d48,0xbd5cbb11,0xbd84b923,0xbd75d510,0xbd9c99f5,0xbd07f55f,0xbd3ef249,0xbde0d85e,0xbdbe58d4,0xbdcf466e,0xbe44579a,0xbe40a567,0x3e907a4e,0x3e60df2f,0x3c60b0a7,0x3c650bc9,0x3d32b7b1,0x3d13b1b7,0x3d8ae30d,0x3cc96163,0x3c2c5605,0x3bc08034,0x3d0d0a57, +0x3c863e59,0x3c3e2c7e,0x3d2317cc,0x3b4ba717,0xbbe026c0,0xbcf237c0,0xbcda131c,0xbd8294d4,0xbd643f29,0xbc9e32b7,0xbc669b29,0xbcd23961,0xbd26e68a,0xbb0be26a,0xbd08da6e,0xbcbc26f9,0xbd9337dc,0xbddd8c15,0xbdecee7c,0xbdaf41cf,0xbd9224ac,0x3c22b763,0x3dbbb6e9,0x3da6754c,0x3e962d20, +0x3df22d67,0x3e29a812,0x3c2abeff,0x3d8c5ea6,0x3c0ca50d,0x3d0475a6,0x3c0c1356,0x3c3fa6a3,0x3d7383c1,0x3d55183a,0x3cea4af1,0x3ce03e43,0x3cd9a9dc,0x3d48c4dd,0x3baceaf3,0xbbd89075,0xbd2feead,0xbd79ceac,0xbdb13c61,0xbd3fddfa,0x3bacfd46,0x3cdec763,0x3da4007d,0x3dc013c9,0x3de81ac0, +0x3db166bb,0x3db13415,0x3d82dc7b,0x3daefb1e,0xbd388a4a,0xbd0965d6,0x3d7331b3,0x3ccb2702,0x3ce42daa,0x3cc7caa4,0x3d3437d2,0x3bf9969a,0x3dabd24d,0x3e02de13,0x3da03600,0x3da03b0f,0x3d1d8903,0x3d03c4ae,0x3d549823,0x3d21f29e,0x3d4cead1,0x3b939c39,0x3c548a0c,0x3c59340a,0x3d841814, +0x3b5c2056,0xbb93540f,0xbb37ebbd,0xbbd944a3,0x3c0f831d,0x3c074d4a,0x3d1efd6a,0x3cfe4cfc,0x3b7b64cd,0x3cd70d8f,0x3cf9f8a1,0x3d0ba666,0xbc823bae,0xbd645e63,0xbd58241c,0xbe025c8f,0xbdf43410,0xbc6ba6b0,0xbd8ef164,0xbd85610f,0xbd326bba,0xbce9b11d,0x3d276355,0xbc03d005,0x3c729da1, +0x3d29342c,0x3d096ada,0x3c8247ec,0x3cc818f8,0x3d74e4e7,0x3d0118a9,0x3cc98c1d,0xbb2c7764,0x3ac3dc47,0x3c146b76,0x3da77ea5,0x3ce78469,0x3c9011e0,0x3d19ce45,0x3d03f68a,0x3d1453fe,0x3d05633f,0x3d0e018d,0x3c96f513,0xbc8b2e3f,0xbc601cd7,0xbc9847c6,0x39df94d0,0xbd079786,0xbd2dd1a1, +0x3ca5ede5,0xbc2d9176,0x3cb7abb8,0x3d98d025,0x3d196bb3,0x3c3ad8d3,0xbb0664aa,0x3ce40f5f,0x3de57ae5,0x3d43c003,0x3c0fbca2,0x3c8daf78,0x3c935529,0x3cceba1f,0x3ca593ac,0x3d17ddcd,0x3c86749e,0x3b1b1e1e,0xbb6b7292,0x3ba14a6f,0x3c913525,0x3d98c713,0x3d087470,0x3d13973e,0x3d59f4b8, +0x3d2c5850,0x3cf95f78,0x3ceb32e2,0x3c026932,0xbc0f1f10,0xbb64eb8b,0x3b6ee9bd,0xbb542d22,0xbc8ce69c,0xbd3a8da5,0xbd388c91,0xbc8c2957,0x399f04f6,0x3cffe442,0x3dc209cd,0x3d5722ce,0x3d4541c9,0x3c1e0c69,0x3d715081,0x3c928d77,0x3d1d9825,0xbc7f74bc,0x3bddd0d0,0x3c0ffe75,0x3c5c64bf, +0x3cc28a5d,0x3d0316d6,0x3c8da086,0x3cc1dbdf,0x3ccd4917,0x3d3d5a58,0x3d195bb8,0x3d126a4d,0x3cd8d955,0x3cb0a1cb,0x3ce2f2c2,0x3ca42b5c,0x3d00999a,0x3d1d8ff4,0x3d135b92,0x3d2c093a,0x3cf1e794,0x3b60a4e3,0xbc99b45f,0xbd3e8c9d,0xbcd41cba,0xbd2cc0e5,0xbdae32c2,0xbd912195,0xbd0152b6, +0x3d1256ee,0x3cf1a536,0x3c8a7fec,0xbd22dab3,0xbcb60e46,0xbcddda46,0xbc3e4c32,0xbca7ea5a,0xbb6878eb,0x3c5d78d7,0x3cbe8fdf,0x3d004ea4,0x3c68f7db,0x3cbb44a0,0x3ca672b2,0x3cb63ac3,0x3c5ab46e,0x3c8a202d,0x3c944d1e,0x3cd0aada,0x3cfc1183,0x3d05d590,0x3cda83a0,0x3d056322,0x3c1d9847, +0xbb67c289,0x3b18a9d3,0x3c9fd645,0x3d14e462,0x3d194362,0xb84e5687,0xbcb9f124,0xbd3c1ae9,0xbd78c3f7,0xbd08260c,0x3a9c211b,0x3d0874f8,0x3c2fdbdc,0xbc185e90,0xbcb21479,0xbd0c67b6,0xbcba38b9,0xbd545a85,0xbcc0ac1f,0xbc646ccd,0xbbb45133,0x3b699362,0x3b1ff100,0x3bb33da5,0x3c8f971b, +0x3caee3a3,0x3d0cfa82,0x3cab4bc4,0x3c82cf77,0x3c7cfc89,0x3c879a65,0x3c888505,0x3c6759a5,0x3c94132a,0x3cc1993d,0x3cd42480,0x3c59a972,0x3cd14be6,0x3d118c47,0x3cfd70fe,0x3cca62ea,0x3c2d0c90,0x3c03d29f,0x3b1b6413,0x3a2b3326,0x3b853d88,0x3c5f0bba,0x3cdace93,0x3bfcff16,0xbb3d1d0b, +0xbafd160e,0xbcb1b144,0x38142aa3,0xbbb9646f,0x3bb50abf,0xbbbc4d02,0xba574661,0xbb60fc45,0x3b4eb351,0x3b9b1dd9,0x3c501183,0x3cb812b7,0x3d0bcdbb,0x3d00b180,0x3cd58c32,0x3cf9c12a,0x3c89c010,0x3c569611,0x3c47ac9c,0x3c643b9e,0x3cc61dbb,0x3c73240b,0x3c784ea1,0x3cb85529,0x3cb40570, +0x3c50c104,0x3bfc5b7d,0x3c01b58e,0x3c8ea258,0x3d08a54f,0x3d460895,0x3d30570a,0x3d293e02,0x3d1f5607,0x3d137a92,0x3cf6b89b,0x3c97839d,0x3c4a6607,0x3cef1b3d,0x3cb0844b,0x3d65af76,0x3d23fda3,0x3d377955,0x3d4b55ff,0x3d2426f5,0x3d34a2af,0x3d19c196,0x3d1fb8ff,0x3d137c95,0x3d206395, +0x3d321d3d,0x3d395da2,0x3d438344,0x3d3c150d,0x3d290cc3,0x3d21900b,0x3d0a0608,0x3d00957b,0x3d0f16b5,0x3d1da8a3,0x3d352131,0x3d588f62,0x3d6af0d3,0x3d68f86d,0x3d578a4e,0x3d21016c,0x3cfa75e9,0x3d115ab6,0x3d07df0c,0x3d14da46,0x3d096f10,0x3cdfd2bc,0x3cfa51a5,0x3d005121,0x3c6b0b4f, +0x3c30deb1,0x3cc941a1,0x3cf5c8d9,0x3ce16094,0x3c837328,0x3ccb8cfe,0x3cf589ac,0x3d00a1b7,0x3cfb1edc,0x3cf8bcab,0x3cef3b4d,0x3cda22db,0x3cd68e5b,0x3d0004e4,0x3cd23f39,0x3cc00fab,0x3cf19ed8,0x3ccf5832,0x3c73e362,0x3c8c97e5,0x3c99a3be,0x3c94fae4,0x3c928589,0x3c979120,0x3cab9407, +0x3cc00d02,0x3ccc6238,0x3ce9579a,0x3cdf0ae9,0x3cb73e7c,0x3cb47ff0,0x3cac1281,0x3c96d72c,0x3c8c6945,0x3c7db696,0x3cd4f8a3,0x3b31585e,0x3b6a949e,0x3c978cf3,0x3c1cba17,0xbc7b4d0c,0xbcfe120c,0x3bd2c9c2,0xbc0506ea,0xbcd46a7f,0xbcd50674,0xbccb5cff,0xbcba3ff8,0xbcc40031,0xbce71ba6, +0xbcbeb56f,0xbbadd3a2,0x3b38e2be,0xbcf147de,0xbc2b7b55,0x39e9500d,0x3c290ac2,0x3ba46bb4,0x3bbb84f3,0x3bdb44b7,0x3bbab5e7,0x3b94a1cd,0x3acf9ba3,0x3adb01ea,0x3b1efc1b,0x3b953fae,0x3b92f047,0x3b4b7233,0x3adab0ed,0x3b83a2e3,0x3bbe75c5,0x3bcc030c,0x3bbe2bff,0x3bb90e16,0x3ba4a859, +0xbd925396,0xbc7384ed,0xbd047d91,0xbc0e8e39,0xbc19b738,0xbc1d9a86,0x3b25c5bb,0xba89c09d,0xbb42a58e,0xbb283bf3,0x3b38d30a,0x3b811d50,0xbc405fd2,0x3b6201a8,0xbc0737c8,0xbbafbe93,0xbc7be0c5,0x3c39e151,0x3be8879e,0x3c1ceb58,0x3c86dd0c,0x3c1491bb,0x3b51bff1,0xbb78e20e,0xbb53996e, +0xbb5a057e,0xbb2f61b2,0xbbf4438b,0xbc2546f7,0xbc1ba5f1,0xbb134b00,0xba5baaba,0x3b626240,0x3bbcbaef,0x3d0754fb,0x3caba9a0,0xbcdefa1d,0x3b24a5c5,0xbc979c49,0xbbdc065a,0xbc499882,0x3af772c2,0x3a6e5649,0x3c4446d0,0x3c11fd94,0x3c860989,0x3bad94a3,0x3cbd9e08,0x3bf9aced,0x3c0facb8, +0x3b83df64,0xbbd362d3,0x3a528e7e,0x3c25bf24,0x3c6b6faa,0x3c28a7e5,0x3cb16363,0x3c4cacbb,0x3c0a01fd,0xbbd6d557,0xbba8dd27,0xbb3d6443,0x3c0fd661,0xba5eae52,0xbbe9a72c,0xbc8efdac,0xbbb97a12,0x3bcdf919,0x3cbbe663,0x3cbfb054,0x3d4ae687,0x3c4998ea,0xbdaa3bc8,0xbd0afda6,0xbcb7c35e, +0xbd0b3c83,0xbcc5f084,0x39b73a31,0x3c3f402e,0x3c99f7e6,0x3c47a294,0x3c48c175,0x3c4781cb,0x3d294144,0x3c517972,0x3c139ea5,0x3c00ad54,0xbc396529,0xbc3109fe,0x3bd8fbd8,0x3c821b4e,0x3c882b23,0x3d25e497,0x3cbb3454,0x3c39b0fb,0xbc20a066,0xb9fa9c11,0xbb1b113a,0xba6be32f,0xbcb66893, +0xbcff488a,0xbd177962,0xbca0b8c0,0xbc5d5910,0x3cc20d9f,0x3d0cadca,0x3dd48280,0x3dbc2353,0xbc98585c,0x3c68d615,0xbc1b70b8,0x3af613f6,0xbb8babe4,0xba88a3a3,0x3c2f0f10,0x3d096db7,0x3cd0f4ca,0x3cbaf48f,0x3cc82d87,0x3d0e4dd3,0x3c662bae,0x3b901531,0xbbb8cd31,0x3bdabe9a,0xbcef63a1, +0x3c7a0045,0x3c7a38cc,0x3c3ec42c,0x3d037267,0x3c773005,0x3c982a0f,0xbc1af315,0xbb926d64,0xbac0f105,0x3cde7ad7,0x39d2fce4,0xbc4372b6,0xbd080d07,0xbc2f96f5,0x3cbd76e7,0x3d76b235,0x3db6b768,0xbbaf5467,0x3d81102f,0x3e79e925,0x3e113547,0x3de68a18,0x3d5bcfef,0x3d397137,0x3da737fa, +0x3d7bdbc0,0x3d09df43,0x3cddc59e,0x3c0b71a7,0x3bdee518,0x3d14f92b,0x3c74dd7d,0x3ca226b7,0xbc510917,0x3c6f8781,0x3c6399bc,0x3d03d63c,0x3d755c5b,0x3d8c9f43,0x3e0f86ab,0x3e040cbf,0x3dce4054,0x3e37557b,0x3e30de35,0x3e3089eb,0x3e0bb027,0x3d3590eb,0xbd5fa43f,0xbe064950,0xbe460bac, +0xbe4ad18a,0xbe0d7d5e,0xbd692e06,0xbc8f6421,0x3d01cb5b,0x3e0bca82,0x3d44eafa,0x3dae9b71,0x3d883a84,0x3d96dd56,0x3ce27d5c,0x3d404de4,0x3d3275e8,0x3c893562,0x3d0f5d3c,0x3d0cb73d,0x3d342a8e,0x3cbddb62,0x3ce40454,0x3cc9c89a,0x3d1a2bc9,0x3cff967b,0x3cab6014,0x3c96f51d,0xbc789460, +0xbd9fa6ed,0xbd055d7e,0xbcea04ab,0xbd7d9b3b,0xbd94e56d,0xbd6ea8dd,0xbd967d8c,0x3c8eb226,0x3d3cdd77,0x3d5e735f,0x3dc5cb01,0x3dc49cc3,0xbd7b2f9d,0x3c6c07f4,0x3b235db4,0x3cf21cb0,0x3c2f270d,0x3d39329b,0x3d8d4a74,0x3d3e8f2b,0x3d59dc77,0x3db66f00,0x3d52438e,0x3d2585aa,0x3bca35ce, +0xba074377,0x3bf4642b,0x3dc41c4a,0x3cb6701f,0x3c860d23,0x3cb5a261,0x3ce886d2,0x3ca49478,0x3c225fba,0xbbf7ae55,0xbd03329f,0xbd814e69,0xbdc6da22,0xbdf3e09e,0xbe12f405,0xbdd9976e,0xbda8e668,0xbcf65c75,0x3c5eee97,0x3d80b2ac,0x3e1a5fbe,0x3dc765e7,0x3db6435a,0x3b781a16,0x3d1fd8e8, +0xbd5d3ff6,0x3c25cc69,0x3d5ce7a0,0x3bde8ae5,0x3cde0421,0x3c879317,0x3cc1710f,0x3dbe6ecb,0x3cdc5c32,0x3c66e438,0x3c92f11e,0xbbf74932,0x3bf4b178,0x3dcc2487,0x3cfdae4b,0x3c82a8d8,0x3c65f087,0x3bb710c5,0x3c16ce1e,0xb92f1c37,0xbd091d9c,0xbd1317fd,0xbcf6957e,0xbd5e006a,0xbd803268, +0xbdb4ba22,0xbd3e0c26,0xbd147c10,0xbd403066,0xbaef9c86,0x3cdfc256,0x3d4ae85a,0x3c57b98a,0xbcc2f22d,0xbd98065c,0xbd29478a,0xbd0116e3,0x3b47f136,0x3d038aa0,0x3c78ad50,0x3cf5d8c8,0x3ca59f70,0x3d174f2c,0x3d3e664d,0x3c8132a0,0x3b5be4f7,0x3d05a1f0,0x3c9c0453,0x3cdd70c5,0x3d61c423, +0x3cb90324,0x3c821087,0x3a8cbf61,0x3c6a56ab,0x3cd1639d,0x3bd1aa23,0xbb435919,0x3bd68d16,0x3a9886f2,0x3cac05fb,0x3ca1b325,0xbb1b7d58,0xbc9f2c94,0xbd6f286d,0xbe08075e,0xbdc3bd37,0xbdbb5f5b,0xbdc21eee,0xbd86f06e,0xbd550cde,0xbde9d2a5,0xbbcee84f,0xbc1f7ac9,0xbc9b5953,0x3cdefad2, +0x3ca8ef9d,0x3c144bab,0x3c5ff93c,0x3c183671,0x3cb38b42,0x3ca2afdb,0x3c8dc858,0x3cae930d,0x3c13c46f,0x3c29e2da,0x3c8b4915,0x3c7bccfc,0x3cb80c75,0x3c62f0a8,0x3c98b226,0x3ba680fa,0x3af65d77,0xbc8dcd35,0xbced5285,0xbc9713f2,0x3bd1831f,0x3c48d0ad,0x3cdc515c,0xbcbfa5de,0xbd23dbea, +0xbd277c8a,0xbce38ec5,0xbca567d5,0xbd13363a,0xbcc727b4,0xbd025884,0xbdbb4bfd,0xbbe5afc5,0xbcb9bbf4,0x3ca1bad5,0x3cb31bd6,0x3d096753,0x3d0d4433,0x3d054afb,0x3ce706b7,0x3d21f581,0x3d05c355,0x3d106b7b,0x3c83270a,0x3d00c2bd,0x3cd29b83,0x3cb338f8,0x3c7caa80,0x3c0b7a22,0x3b37f2e3, +0x3b2b6adf,0x3b9aca94,0xbb8190e5,0xbc5fdfa8,0xbc13fdcc,0xbc11b1f4,0x3cd5320f,0x3ce8496a,0x3d05886b,0x3c73ae95,0x3c95ef03,0x3ce46b81,0x3c83083a,0xbc121d9b,0xbd3a66cd,0xbceef645,0xbd049991,0xbd57dde5,0xbd2da148,0xbc03d461,0xbb3f4d11,0x3b706682,0x3c5c9faa,0x3c0724d9,0x3bcdae58, +0x3c4782c2,0x3c656e70,0x3c8c4ab6,0x3c81eb08,0x3c654878,0x3c8f2d82,0x3cc89c23,0x3ccf0ac7,0x3caa1268,0x3ca13f90,0x3cb66cb2,0x3c6095a2,0x3b5494ec,0xba42b6ef,0xbc063908,0xbb2980dd,0xba67dbcb,0x3c76887c,0x3cd66e07,0x3d0bbdd2,0x3cdd91b7,0x3cc48420,0x3cf97e83,0x3ca2b847,0x3bd2e98c, +0xbc685e0a,0xbb8f2f8c,0xbbfcb71f,0xbbe0294c,0xbc7bb54c,0x3bdbf39f,0xbb397a61,0xbbcb9f88,0x3b1dfb1d,0x3bdc4ccf,0x3c21728e,0x3c20a064,0x3c37aebb,0x3c4dd6c7,0x3c270e97,0x3c8dab20,0x3c496fc6,0x3cbf31d1,0x3cb0b2e6,0x3cfd78e3,0x3cce424f,0x3cd71d18,0x3c574eb7,0x3c628b60,0xbbf1031e, +0xba9b37e3,0xb9fe99a9,0x3b0947dc,0x3bc9083f,0x3c2eff8f,0x3c9b207d,0x3c4d74b3,0x3b950f14,0xbc0f7487,0xbc61ee4b,0xbc816033,0xbc9350c9,0xbc08dc5d,0x3b199d60,0x3c6006fb,0x3c123f5e,0x39b1dc24,0x3c26a3c8,0x3b68c0ae,0x3c79727f,0x3c6a0ae5,0x3c80e368,0x3cc14502,0x3cc9cb41,0x3ce00af8, +0x3cbb349e,0x3caf0022,0x3cb5487a,0x3c862eda,0x3c920527,0x3c27ff97,0x3bca4bbd,0x3c7b6c00,0x3b14cd2a,0x3ca55eab,0xbbb79db2,0xbc23aa93,0xbc0ec13f,0xbc33050d,0xbc387c88,0xbc60d6a1,0xbc94e90f,0xbc8f1857,0xbc870c15,0xbc16cc88,0xbc431e9e,0xbc4e8818,0xbc91d3ed,0xbc6cd62f,0xbc88b4ef, +0xbc755192,0xbc0dafae,0x3b8f3f74,0x3b8babc9,0xbb9e0e28,0xbbd8a9c2,0x3a043168,0xbb15e0fd,0xbba2e7e0,0xbab0a71d,0xba24c661,0x3b468792,0x3bb44ccc,0x3bf4613b,0x3c3b81f0,0x3c59f8d0,0xbb0f19e8,0xbb62404b,0x3c4dafce,0xbb03d991,0xbbeb2b81,0xbaa4bd46,0x3b020060,0x3ab7b59f,0x3ab0bfac, +0x3aa6b3d3,0x3ac5463a,0x3af45764,0x3b0bced7,0xb99c893a,0xbb6d9a02,0xbb8b2a38,0xbb2e3ee2,0xbb2b9273,0x39b8e098,0x3b2dc227,0x3bb0b26f,0x3bc1b5c2,0x3b82d5c4,0x3a6332e5,0xbb5b7e3b,0xbc5b79b0,0xbb9e85f3,0x3c15f536,0x3c34c087,0x3a0ac56f,0x3bdf1176,0x3c1cd31c,0x3c1252e9,0x3c175898, +0x3c12b160,0x3c0f9472,0x3c283eb9,0x3c3ad597,0x3be60f20,0x3b7bf147,0x3c1604a9,0x3bebd091,0x3b831371,0xbafb2bf2,0x39e47da2,0x39278b50,0xba1144a3,0xbaa3d24f,0xbae30f32,0xbb200418,0xba567755,0xba10e7c0,0xba257add,0xba921278,0xba07584e,0xbaa187c8,0xba317d8d,0xbb1b71db,0xbb9a7d59, +0xbb95aca3,0xbcc1715c,0xbc41a453,0x3d0df1a6,0x3b119f6c,0x3c9d5f36,0x3c1e5936,0x3c2fa815,0x3bf6974b,0x3b795cc6,0x3bb20a7c,0x3bd3f8e3,0x3be5b6bb,0x3c06aaea,0x3c7c0adf,0x3c6e827a,0x3c0a0ba0,0x3bf0eaf2,0x3be03ebd,0x3c30674d,0x3aad5f51,0x3b0288b4,0x3ad1d7b5,0xbaf9bf80,0xbaf8a541, +0xbb5d7b07,0xbbf78fcc,0xbb2137f4,0x3a8c649b,0x3b8acbda,0x3c078a4f,0x3c0f6cc3,0xbaba088a,0x3a3f9c15,0xbb9e7640,0xbc8d4dbf,0xbca61af1,0xbd4874c5,0xbcfdc8f9,0x3c453a54,0x3bb4b2a3,0x3cad59fc,0x3c55d15f,0x3c9148cc,0x3c42f31a,0x3c42bb7c,0x3ba8c6fb,0x3c3529cd,0x3bfb20b5,0x3c7e726a, +0x3cb35d64,0x3c91453c,0x3c5cbca7,0x3bbd2d35,0x3c54f9cd,0x3c7370d6,0x3ba2de55,0x3b490130,0x3baace09,0xbb16ec79,0xbbb51393,0xbc209167,0xbc89c2da,0xbbdef3b5,0xbb27db02,0xbacc1d9d,0x3b679197,0x3b90b358,0xbba3a7f7,0xbb60acad,0xbc957849,0xbd301512,0xbd318bf9,0xbde18d06,0xbd2e3370, +0x3d6ce394,0x3c3801d2,0x3d22a96d,0x3cf59575,0x3cc13bb5,0x3c60e183,0x3c228459,0x3c25bc16,0x3c2cbc7a,0x3c4d2d9d,0x3ca621ff,0x3d17afad,0x3ccc2ce2,0x3c8db391,0x3c04a67d,0x3c752437,0x3c92eec4,0x3c34c74d,0x3bb5acc8,0x3bd2970b,0xbbd7d922,0xbc094ce7,0xbc657968,0xbcebb7a1,0xbc4d98a4, +0x3a351231,0x3c019a08,0x3cc35645,0x3cc7998d,0xbc224b46,0xb9db868f,0xbcad3bfa,0xbda1966e,0xbda5b360,0xbe203e35,0xbdd22f6c,0x3d0e54b0,0x3cc70d70,0x3d05becd,0x3ce672ea,0x3d0075ad,0x3c55d1d5,0x3cab9f09,0x3caf14fd,0x3c27e680,0x3c826464,0x3cbbd0e4,0x3d2e120f,0x3caa09eb,0x3c7ed60d, +0x3c53cb18,0x3c71f2c3,0x3cef157b,0x3c87013a,0x3be03b1b,0x3c65ce46,0xbb040ed7,0xbc1c4763,0xbcae484c,0xbd0b320d,0xbc3fae69,0xbb3c8ece,0xbb6fa652,0x3c131b89,0x3b254372,0xbcb3b9a7,0xbc80308b,0xbd56c22a,0xbdeb0cde,0xbe119ec8,0xbd8470d1,0xbd82f960,0xbdc4411a,0xbcc22d81,0xbd0fa516, +0xbc11fe04,0xbce47e56,0x3bf2542a,0x3d002d60,0x3d4a500f,0x3d37fb1c,0x3c7bdca1,0x3c60de9e,0x3d1b53ea,0x3cbf966a,0x3cae4f91,0x3c3ae89c,0x3c9d2609,0x3cfe8544,0x3d34f9a7,0xba68ab0c,0xbceba9c9,0xbd84fb5a,0xbd836f9d,0xbd83623d,0xbdb365f0,0xbd879b32,0xbd3a6ed6,0xbc93cee8,0x3c817851, +0x3d913a41,0x3e26f407,0x3da6fea2,0x3d80b33c,0x3dbd7e38,0xbd0ac9d5,0x3db31863,0x3b060432,0x3a52547c,0x3cd2d5c0,0x3cce0757,0x3d2bec84,0x3d6e4cb6,0x3d1c8954,0x3d4b0eb3,0x3d5139fe,0x3c816f27,0x3cd2d5ff,0x3cca05be,0x3d36119a,0x3cb1e40c,0x3c9648e1,0x3c646817,0x3cf2f65d,0x3d076fca, +0x3ca8c692,0x3b83294c,0x3a980478,0x3c355271,0xbd25089a,0xbd92516d,0xbdaf9244,0xbdd0ecbd,0xbddca00f,0xbdb986e8,0xbd3ad282,0xbc400603,0x3d5dcc9b,0x3d8bdf77,0x3dabb8a7,0x3de43171,0x3dcadb87,0x3d8ea8a9,0xbb49565b,0xba83646b,0x38b0dba3,0xbcc07c0f,0x3b56575c,0x3c6ae9e0,0x3d8b4fc5, +0x3ceb9315,0x3cab0d06,0x3b5251da,0x3b0d5a68,0x3c953a86,0x3db5739c,0x3d0286bc,0x3ca913e0,0x3c9ac342,0x3b86ce20,0xbb4ae030,0xbc327241,0xbcbeed11,0xbd167838,0xbd35ca82,0xbd21474d,0xbcf49831,0x3bb6c8f1,0x3c98d223,0x3d0c8769,0x3c113d57,0x3d2513a9,0x3d08815f,0x3cf00c69,0xbca3ceae, +0xbd4ca5ed,0xbd988c4c,0x3ca3f7ff,0x3d1e861a,0xbbb99a52,0xbd0e79a9,0xbc440894,0xbcade5b1,0xbc5d24d5,0xbb80212f,0x3d9658ec,0x3c7b67dd,0x3b13e1b0,0x3c73d6d9,0xbbd14f02,0x3c704d40,0x3daa6611,0x3c703aba,0x3ba05f51,0xba3db72a,0xbc01a14d,0xbc414e6a,0xbc4c7bd6,0x3cce6d4c,0x3c87f267, +0xbc6221e9,0x3d08a500,0x3d802d0d,0x3db12362,0x3da38524,0x3d85a54d,0x3d0a0eae,0xbc808501,0xbd8850dd,0xbda1a92c,0xbe05bb96,0xbde88724,0xbd96ab7f,0xbc785ce1,0x3c3f0596,0x3b2c2621,0xbc122dde,0x3b716559,0xba316e64,0x3c60b4d7,0x3c33a415,0x3cd34309,0x3c34706f,0x3c34183c,0x3d13a5ca, +0x3be6b0f1,0x3c986caf,0x3d4c42b5,0x3cbb57fd,0x3c29714d,0x3c18f533,0x3c35cd07,0x3c45f413,0x3d0063dc,0x3d7c4f23,0x3d85a464,0x3d4637c0,0x3d831229,0x3d9f4ad8,0x3da6ea64,0x3d8f6396,0x3d427939,0x3cec5fea,0xbcd02cdc,0xbd36c510,0xbcd337bf,0xbd51f5d7,0xbd5165b6,0xbc876c19,0xbc305020, +0xbb9a9f34,0x3b52d880,0xbc18d078,0x3bc1ca5b,0x3be30d82,0x3bf1ed52,0x3c38b334,0x3ce7b2ba,0x3c50d7fe,0x3be69ba8,0xbad9ec35,0x3c81c30b,0x3cb36fb4,0x3ca786c8,0x3c6f8c87,0x3c3b4d07,0x3c64855d,0xba43be8c,0xbb74b5ff,0xbaf0c5e5,0x3c801ca5,0x3cea3205,0x3d223d05,0x3d05efe6,0x3cb53936, +0xbb672fb4,0xbb12673b,0x396d8466,0xba0516f2,0x3caa7a2e,0x3c5f723d,0x3c1e8331,0xbd683da5,0xbd95affe,0xbd62f6da,0xbcae3f99,0x3c321d9c,0x3ca3349e,0x3c53b055,0x3c10b943,0x3ca70413,0x3c09c868,0x3c502e07,0x3c4e73d4,0x3c82af0c,0x3cc22c4c,0x3c59231c,0x3c510435,0x3c3016ac,0x3c59dcc9, +0x3c950ff4,0x3c9aab74,0x3c7f12a0,0x3c6280f2,0x3c13fe8f,0x3d0645cb,0x3d02ee7c,0x3ca7c93d,0x3c204d1e,0xbaa11ceb,0xbc3f76cd,0xbc4556cf,0x3c920844,0x3ca2e802,0x3c37546a,0xbc69370d,0xbc735a6b,0x3bc1aa46,0x3c2e5b6b,0x3b942663,0xbd14cf3e,0xbb35d899,0xbc4f7875,0xbc1c4732,0xb9e265f8, +0x3b577a34,0x3c8ccf7a,0x3c3dbc1c,0x3c4239dd,0x3c5eb4c2,0x3c8a4cea,0x3c374f1f,0x3c27726c,0x3c424053,0x3c854a4a,0x3c811b4e,0x3c8e11d9,0x3c6f3ffd,0x3c217739,0x3b3ddd10,0xbb0b4b3f,0xbb3b8468,0xbc09f8e8,0xbc72daea,0xbc7bbddb,0xbc5de09e,0xbc3cc475,0xbc4b62aa,0xbc811110,0xbc97ac07, +0xbcdde47a,0xbc9a6737,0xbba49777,0x3c45d5b6,0x3c12a77a,0x3b0bf46d,0xbcaa63fb,0xbc8e712a,0xbbce8aed,0xbc3b9925,0x3b09494c,0x3bdd51f0,0x3c76ceca,0x3c63e7ff,0x3c9055c2,0x3c8527fe,0x3c39454c,0x3c54ca26,0x3c495164,0x3c6146f1,0x3c791fde,0x3c949c8b,0x3c4a764c,0x3c327419,0x3bba7a18, +0x3bb07f6c,0xbbca30db,0xbbc21778,0xbbd866d4,0xbbbdb1fa,0xbc1570b7,0xba9f7937,0x3ba647a5,0x3c6f6709,0x3b94c85f,0xbb22a8cf,0xbc0f2c4a,0x3bbae9be,0x3c35114f,0x3c967114,0x3b8af8b8,0xbac7bade,0xbb074519,0xbb12b55e,0x3cd0bc02,0x3cebfe44,0x3cffb463,0x3cb3eeb6,0x3ca76cc2,0x3cb62064, +0x3c5644f2,0x3cacdd6f,0x3c66615b,0x3cb15735,0x3ca54a6a,0x3ca0b8dd,0x3c9129b1,0x3c94b3f4,0x3c8b75cf,0x3c75846c,0x3bf2e642,0x3c36df77,0xbb4d7d6c,0x3c6ccec3,0x3c80ae0a,0x3c2f8d5d,0x3c1f8ab7,0x3bbd2434,0x3ac74f7b,0xba7fd48f,0x3b8a6906,0x3c483c1f,0x3c7a5f29,0x3c6435a8,0x3c4fff77, +0x3c8a7b37,0x3cac03ee,0x3cba9ab7,0x3cae58d4,0x3cbad498,0x3c9a554d,0x3c9255c8,0x3cb3af8e,0x3cac6398,0x3c592148,0x3cb3b172,0x3cb2b1e0,0x3ca0b8f3,0x3ca8f83e,0x3c88f6e3,0x3c75573e,0x3c70f9d9,0x3c5fbfd3,0x3c48a8b5,0x3cae35d8,0x3cc95cc7,0x3bebc1c9,0x3c94b2cb,0x3cbd721e,0x3cab8019, +0x3c90f8b1,0x3c965dec,0x3c9740b2,0x3c952113,0x3c9713aa,0x3c8fa5a2,0x3c8ddf5d,0x3c8b034a,0x3c90ce7c,0x3ca2052c,0x3cb0f394,0x3cb57d6e,0x3ca70c82,0x3ca15043,0x3ca89937,0x3ca6bbc5,0x3d214d27,0xbc2a1c74,0xbb9a466c,0xbb4d4877,0xbbc1754c,0xbbfa6191,0xbb1caef4,0xbb9a27aa,0xbb758508, +0x381e2798,0xba1bd835,0xbaa2a307,0xbad57bbf,0xba1f4f8b,0x3a887978,0x3a910b2e,0xbb041a52,0xbb6d6904,0xbaedb48d,0xbb82841c,0xbbb5200f,0xbbdc1c9c,0xbbb92212,0xbbbea0be,0xbbcf5cc2,0xbbc1e7e7,0xbbb44daa,0xbb9eff02,0xbbcc4642,0xbbeefafb,0xbc0c4f71,0xbc0c11ea,0xbc047874,0xbc064cf5, +0xbc0e4951,0xbbd55234,0xbb0fa5a0,0xbb1aadb1,0xbc901b92,0xbcf25de6,0xbd150cec,0xbc9c522e,0xbc811f5c,0xbc0e5a26,0xbb54264b,0x3b06cff7,0xba84c67b,0xba6981a6,0x394ad532,0x3aaeb7c3,0x3a739b76,0x3b482d4a,0x3bc3c352,0x3a924c1b,0xbba853bd,0xbb917c1b,0xbb91d39d,0xbc14b31e,0xbbbd3211, +0xbbde923f,0xbc23d3e5,0xbc192307,0xbc263663,0xbc1f60e3,0xbc580cfe,0xbc8628ac,0xbc95a3a6,0xbc91bb53,0xbc82dc2d,0xbc59d024,0xbc691929,0xbc7ae61b,0xbca5d30d,0xbcbe0999,0xbc38fc1c,0xbd04b644,0xbd380228,0xbd001234,0xbc967256,0xbbe33b79,0xba87fc1c,0x3be7d3bc,0x3b39d750,0x3b921655, +0x3b9799bb,0x3bade330,0x3c2bc7a3,0x3c244eb1,0x3c488c4d,0x3c0bff22,0xbbc5e7e8,0xbb3c20fa,0xbbef8547,0xbbe909cc,0xbb9469c3,0xbb8df9ba,0xbc3a71ae,0xbc036c63,0xbbfcd51b,0xbbcc1ca7,0xbc7cd423,0xbcb00252,0xbcfb2d4f,0xbced9b4e,0xbce23c97,0xbca5fac8,0xbcbd942c,0xbc3e794c,0xbbc60e6d, +0xbc16124f,0xbd11c285,0xbdaf4088,0xbde4617d,0xbd79e80d,0xbd3ba33c,0xbc881e8b,0x3baf71fd,0x3c19d272,0x3c5eea58,0x3c550413,0x3c4bd899,0x3c86ff5e,0x3c9ca658,0x3cb78817,0x3cca9688,0x3c929679,0xbbd7a1f9,0x3a687ae1,0xbb7c57a5,0xbc18d591,0xbb1b3f37,0xbbe3d198,0xbc7f70fd,0xbc900d11, +0xbcb5bf35,0xbc92bc2b,0xbd06f3e1,0xbd2ce5f0,0xbd4b49bb,0xbd475dac,0xbd2dda57,0xbce17213,0xbce45adb,0xbca31feb,0xbd3e9a13,0xbd65d6b3,0xbb938ed8,0xbd886bf7,0xbdfde009,0xbda578e7,0xbd197224,0xbcd39a9b,0xbb8c5a6b,0x3bcf1720,0x3c70ca9a,0x3cb5b433,0x3c87cac0,0x3c858d1e,0x3cc0f1ea, +0x3d0e813c,0x3ce635ad,0x3c868ab2,0xbbf81eb5,0xbb96ddf4,0x3b3debcb,0xbc2bc6ec,0xbb85c33d,0x3a958852,0xbc8fbc28,0xbc283bc1,0xbc6dd2be,0xbc172da5,0xbce84ed3,0xbd35e5fc,0xbd813550,0xbd71c94e,0xbd53993e,0xbcd0d9df,0xbd0d4cc9,0xba9db505,0x3bb4b7fc,0xbb80f3dd,0x3db2fbde,0x3d47241c, +0xbb328031,0xbd6c69a6,0xbcd77607,0xbcdb0a40,0x3b119ab2,0x3c4b70d9,0x3c6f46de,0x3c574b02,0x3cce5295,0x3ca30597,0x3cd5f120,0x3d09484e,0x3c7a6eef,0x3c27bdfa,0x3c89a941,0xbba7146d,0xbbd32ed7,0xbc360e83,0xbd025e40,0xbd32d792,0xbdb51955,0xbd31cebf,0xbd4f2b72,0xbdcca742,0xbe0e3e73, +0xbe298267,0xbe441b6d,0xbe1be6f9,0xbe187a84,0xbdfc949c,0xbe45f05d,0xbe347708,0xbdff0b9d,0x3c4638b1,0x3e1c3f25,0x3deba4a3,0x3d9216c2,0x3db266e3,0x3d79d13e,0x3d27ad1b,0x3ce9f63d,0x3cdc1836,0x3d02e76e,0x3cfe2e38,0x3ca29954,0x3c61cfaa,0x3c42ff06,0x3d244c3a,0x3c831878,0x3bf675b1, +0xbc1815cd,0xbc6020a8,0xbbae616f,0xbbd74a59,0xbcc7b074,0xb9cde1ea,0x3c8cc943,0x3cfcb576,0x3ceca071,0x3d082499,0x3d22d5b2,0x3d0eeeb3,0x3d02bd45,0xbcae0e19,0xbd542ade,0xbcee5347,0xbde771b1,0xbda1156a,0x3d3b7e72,0x3dd8316a,0x3dd0a244,0x3da999b8,0x3da585ba,0x3d660d1d,0x3d428c7b, +0x3d313f9d,0x3d27a9f2,0x3d90d833,0x3cb2e6dc,0x3c649679,0x3c38c946,0x3bc12c99,0x3cb0449f,0x3d7d217f,0x3c94f45e,0x3c3a5875,0x3ba33406,0x3a7f8105,0xbbcc1337,0xbc5c59a3,0xbbf63278,0xbb4f34e4,0xbb722d5a,0x3d193151,0x3d069758,0x3c836dc2,0xbba64494,0xbc37446e,0x3b16ab8b,0x3c5aa853, +0x3c430517,0x3ca9e8ae,0xbd01283e,0x3c3ea168,0x3d7b20b4,0x3db31c39,0x3ca296a0,0x3c2ae20c,0x3cee51fb,0x3c4d613d,0x3c2ad0e5,0x3d0463f6,0x3cfe1037,0x3d84c62d,0x3cabb6dc,0x3b4997fd,0x3c9c7f89,0xb970f9f2,0x3c8bbf28,0x3d7b15d2,0x3cd7f0e3,0x3cd072db,0x3ce1bd68,0x3cc7994c,0x3caa8226, +0x3c745517,0x3b84eae8,0xbc005340,0xbca8975f,0xbcdefb61,0xbd1fa824,0xbd73f563,0xbd717a1e,0xbd49e6e6,0xbd32b4c1,0x3c2f3dfc,0x3d0e0171,0x3d923eb6,0x3c961140,0x3d02af5a,0x3d07c480,0x3d23b690,0x3cb0012b,0x3c66fef6,0x3cdd3ba1,0x3c9aa73d,0x3ccd8486,0x3cad72b3,0x3cdcef65,0x3cb391a4, +0x3c820247,0x3c0df88b,0x3c9f26ad,0xb99c9da3,0x3c27c7ac,0x3d02d79d,0x3d1767bd,0x3d262d2c,0x3cee39ee,0x3ca8d3d9,0x3cbd8442,0x3c49c6ea,0x3c5db7e9,0x3c63881e,0x3c3c7dba,0x3bf0593c,0x3bbfaa53,0xba83f6ef,0x3cbd851f,0x3d1831f3,0x3d4be47a,0x3d32a899,0x3cb6f271,0x3bef33bf,0xbcb58719, +0xbc7dd6e9,0x3d6d2585,0x3d177c58,0xbb04c308,0x3c16e565,0x3b910428,0x3b3a49f5,0x3bf3923c,0x3c72b215,0x3cae5aa6,0x3d0d33de,0x3caf6a6a,0x3c64c300,0x3be1cbd3,0x3c98237d,0x3ccb93f1,0x3cbf2552,0x3c886db1,0x3c3859f8,0xba6f4603,0x3c27a3d4,0x3c48dc88,0x3c24ce5c,0x3bf0138b,0x3c3eb868, +0xbd2497bc,0xbc9f1567,0xbc8c27fe,0xbce740b5,0xbc6d6eca,0x39c7a654,0x3c88a5c9,0x3aa5e123,0x3bb9727a,0x3c7457d1,0x3baae48c,0x3bf6364c,0x3d0f628b,0xbc0109ed,0x3ca28b65,0x3b8fc55d,0x3ca2c024,0x3ca8247c,0x3c7167df,0x3c6b7bb9,0x3bf100dd,0x3c976fba,0x3b5b8441,0x3aa952d5,0x3c52fcab, +0x3c15de9c,0x3bfe15d4,0x3c36959a,0x3c99088a,0x3c88389d,0x3bf635cb,0x3b86771c,0x3c82a936,0x3b0f1268,0x3bd2f278,0x3c2cba34,0xbb1621ad,0xbbcba6c6,0xbab80cda,0x3cc9274f,0x3c81a574,0x3c2ec576,0xbb5edb05,0x3b71933e,0x3a43fb5a,0x3c57a82a,0xbcd50707,0xbcdc9832,0xbb8d0e87,0x3c8017e4, +0x3ca2468b,0x3ca7fda6,0x3ca74844,0x3ccdeab8,0x3cc8582e,0x3ccf5676,0x3ce9aa55,0x3cf67cd1,0x3caddb61,0x3c6f3199,0x3c3423b9,0x3c21dd8b,0x3c605e10,0x3c1ab3aa,0x3c2149c0,0x3c173717,0x3b96cfeb,0x3b84258a,0x3b665ee6,0x3bd05876,0x3bac14a8,0xbab695c8,0xbb29c999,0xbc98c063,0xbc834981, +0xbb00a030,0x3b3a27c9,0x3c4ef734,0x3c65f654,0x3c78270a,0x3c29b17e,0x3c8d2fec,0xbc15fca6,0xbc929ef9,0xbcc0d4ac,0x3adf5e1f,0x3b62daff,0x3c701da8,0x3b251c42,0x3c4f03d5,0x3c8fe3b8,0x3ca134bf,0x3c9f31b7,0x3c95afa1,0x3c78fcc5,0x3c03dfca,0x3ba15f10,0xbb344ffe,0x3bb21449,0x3a6e3c59, +0x3bd2d6b4,0xb9fe574a,0x3ad0a78a,0x3b2b176f,0xb98fcaf9,0x3af9dc66,0x3b483e3d,0x3a1e087f,0xb90e6fc3,0x3aa5a2b5,0xbb2db584,0xbc9073d6,0xbc284e62,0xbb922c52,0x3ba8f07e,0x3ba04159,0x3bf8807a,0x3c3d2c89,0x3bf618f0,0x3ad6e4cc,0xbc46f66d,0xbbdb97ba,0xbb4d7e9d,0xbc6f3ac2,0xbb5373a9, +0xbc5ec4ae,0xbca72a6d,0xbcad10b7,0xbcd0b5b5,0xbc994b21,0xbca24d7f,0xbc213db9,0xbb8ec702,0xba588ce3,0xbb6ae859,0x3a0717d8,0xb9d2a11c,0x3b509767,0x3c1b8314,0x3b6f8315,0x3c9cad0d,0x3bd127ab,0x3b0908fd,0x3b5a8f9d,0x3ace5b14,0xbae87987,0xbac4cb47,0x3a90730d,0x3be25532,0x3bec5dce, +0x3c15b77d,0x3c70f18d,0x3c98e7e3,0x3cc8bf73,0x3c95ffa9,0x3c64e77a,0x3c676fbb,0x3c115a74,0x3ba3728a,0x3b4610b9,0x3ba06ccd,0x3c319caf,0x3ca82d79,0x3bd80184,0x3c2749e8,0x3c998dd5,0x3ca4b8bf,0x3c93beb2,0x3c88cd10,0x3c934490,0x3cab86b1,0x3cb30386,0x3be5c559,0x3addfd97,0x3ca26135, +0x3c134819,0x3b15c755,0x3acb1d02,0x3b916a50,0x3b93761f,0x3bac1600,0x3be9b03d,0x3be5d498,0x3bad9e45,0x3bc783b8,0x3be40edb,0x3c09ab57,0x3c10f502,0x3c07878b,0x3c213eaf,0x3c0dadd4,0x3bdfb67b,0x3b9ce8ad,0x3b5f2a8d,0x3c357c97,0xbc7dffd8,0xbc34b5ba,0xbbbd5c6d,0xbacddbb3,0xbb8c8947, +0xbb967171,0xbb827ae2,0xbb96115f,0xbb5be2f6,0xbb8cbbf8,0xbb867e94,0xbb7e7bfd,0xbb7bf62c,0xbb597a80,0xbb8b0113,0xbba81583,0xbbcbac8d,0xbbb0a8d6,0xbbddd64d,0xbc03b9f3,0xbc1669d7,0xbc1b4e1a,0xbc22989b,0xbc202c04,0xbc377ff1,0xbc425ff7,0xbc416497,0xbc577737,0xbc71a253,0xbc882bea, +0xbc79c2b0,0xbc6ee531,0xbca5bcbc,0xbc8fa245,0xbc8f6818,0xbc8b2594,0xbc5c2344,0xbadc1bf0,0xb90b70d6,0xbc933614,0xbc1ad688,0xbbb19c12,0xbad86e70,0xbb07b713,0xbab7f541,0xbbb388b3,0xbbaa59bf,0xbb3491d3,0xbb30e9b8,0xbb5765de,0xbb551552,0x3adc9116,0xbb0eb691,0xbb9a437f,0xbbfa116b, +0xbc019e08,0xbbea858d,0xbc2c1c0d,0xbc33c476,0xbc1fceca,0xbc569e47,0xbc5e7b1a,0xbc5b0cb7,0xbc8ca73a,0xbc9bfba2,0xbcc140d6,0xbc96e5ef,0xbca80928,0xbd2c0114,0xbd11b70d,0xbcf5985c,0xbc8825ad,0xbb302ac0,0x3bdb7476,0x3c8549dd,0x3c1f9f80,0x3c2d4c30,0x3c3c6dac,0x3c41a590,0x3c36c3b2, +0x3c0c1b28,0x3b25c0b7,0xbad86dd0,0x3bef8d7e,0x3b19a9f7,0x3be4fac7,0x3b653ee4,0x3c0cbb5b,0x3bd5f14c,0x39470dae,0xbb9915b3,0xbbe2e99e,0xbb661ea0,0xbc04ffca,0xbc22728e,0xbc024fa5,0xbc6bca4e,0xbc8d975e,0xbc81e30c,0xbcbf882a,0xbce67ae1,0xbd380af5,0xbcd8c5f7,0xbd177a1f,0xbd9c9da0, +0xbd7db845,0xbd68d3e2,0xbce2fcee,0xbbb5d7d6,0x3d40c222,0x3d211eb7,0xbbc2a5f8,0x3b14a2a1,0x3cb1f84a,0x3c2150a6,0x3c5a70c6,0x3ca9a5c1,0x3beef6c0,0x3c067a7e,0x3c766012,0x3c5b76ab,0x3c860943,0x3c6f19e0,0x3cb54010,0x3c91178d,0x3bd60c03,0xbad21151,0xbb8a6234,0x3b44e4c3,0xbba25427, +0xbbc98190,0x3ae94d73,0xbc511b91,0xbc7d0ff3,0xbbde2e95,0xbc8f77d5,0xbcb1942d,0xbd2bad33,0xbcba5270,0xbd30abf6,0xbdd9f017,0xbdae32a4,0xbd9399d3,0xbaf66960,0x3d144c9a,0x3d8450ef,0x3d99888f,0x3d2722ef,0x3d4221f1,0x3d361c3b,0x3d16acbe,0x3cfd111e,0x3ce833d0,0x3c489b96,0x3c8b9f3a, +0x3cba32b9,0x3c8d8a63,0x3ccc6355,0x3cf5a35d,0x3cef2519,0x3cbfa10d,0x3b4c958d,0xb8108825,0xbc35618e,0x3b2ffac6,0xbaaa10c3,0xbbd4edd2,0x3aea0840,0xbc46c71a,0xbc82966c,0xbc4d6051,0xbcfb6c19,0xbd1d8a1a,0xbd96a901,0xbcfcb974,0xbd73b8bf,0xbe11722a,0xbdfb13f5,0xbddbb70b,0xbcda7a97, +0x3d35c627,0xbd9dbea4,0xbd439e55,0x3c972f89,0xbb4a3d5b,0x39bff9a9,0x3a935e83,0x3b81d2aa,0x3c280470,0x3d289c58,0x3d1e474c,0x3c6b0370,0x3cdd73c1,0x3cf8fed0,0x3ca94cb6,0x3ca4d79b,0x3c9cac17,0x3b4c9b05,0x3a12378e,0xbc5e9046,0xbbc9f1ce,0x3cc7d4b1,0x3ce5d947,0x3cfabee0,0x3c508420, +0x3b1f4317,0x3c6db51e,0xbc35781e,0xbc98e003,0xbce7012e,0xbcd5f67c,0xbce3c73b,0xbc4a2f84,0xbc37e120,0xbd54c202,0xbd5d6671,0xbdbc0671,0x3cdfcbae,0x3d90ca87,0x3e01884e,0x3d8bd56f,0x3d9c6298,0x3cd332d8,0x3ced1d2e,0x3d52cbea,0x3cc46258,0x3c9512a6,0x3ba4601c,0x3c76acfc,0x3c9dafe1, +0x3cf940ba,0x3c58e7cd,0x3c2ff3f2,0xbbc59c27,0xbcb012ed,0xbce92279,0xbd10b865,0xbc55dbd0,0xbc011b0b,0xbcfeb143,0xbc123215,0x3b5f784c,0xbcbe4afc,0xbd0fbc0c,0xbd96c4fa,0xbde6928b,0xbd62a427,0xbd5d9790,0xbdc458f0,0xbdbfedbb,0xbcd5bed3,0x3de17091,0x3d4a95fc,0xbce8719a,0xbb7a5f42, +0xbc95421b,0x3b92ef72,0x3c877352,0x3d18122d,0x3d4a5a0b,0x3d951cc0,0x3ca9b5ce,0x3afc2722,0x3c3a9d98,0x3b51bafc,0x3c77da65,0x3cce4f2d,0x3cdb0230,0x3c95489b,0xbc825f4d,0xbb50d544,0xbc3eff9a,0xbcbe7289,0xbd0cba86,0xbd508221,0xbd76cbdf,0xbdbdab35,0xbdd99fd4,0xbdcee704,0xbdd57b0c, +0xbdbf1f9a,0xbdb02bda,0xbcc98a41,0x3c27bd65,0x3c734246,0x3ba218f0,0x3bcc0c94,0x3d7ad957,0x3ba78ecc,0xbc6a1b9a,0xbd03037b,0xbcf2774c,0xbca4b707,0xbbea7d8b,0x3d195ddb,0x3d2994f0,0x3d3b43e8,0x3c5c7682,0xba63ca6d,0x3cbc7a3d,0x3b5b3fde,0x3cabe250,0x3ca59e14,0x3d152d11,0x3d1a9cef, +0xbb1d5b78,0x3b88c2ca,0x3adf15c7,0xbc2e657e,0xbd3c0f1a,0xbd53eaa4,0xbd24dccd,0xbd78666e,0xbd771917,0xbd02a53e,0xbb8986b8,0x3d1d7d2d,0x3db99dd7,0x3dda2e8c,0x3e00de80,0x3db14106,0x3d94c5c8,0x3ceba03e,0x3c674139,0xbadad6d0,0xbb2e8a23,0x3b82c713,0x3b2e5396,0x3c2368ee,0x3ca7706b, +0x3c8239e3,0x3c1c56d4,0x3c577c26,0x3cac93be,0x3ca67bc3,0x3cb99eb4,0x3c94858e,0x3c99218c,0x3c148bdf,0x3ca48851,0x3cc0ef4e,0x39c49663,0xbbaafe8a,0xbc67e78c,0xbc8d14fa,0xbc87a647,0xbb541596,0x3ba469ce,0x3cfb79f3,0x3d4112dd,0x3d90beef,0x3da1c136,0x3dd3d065,0x3dfcad0c,0x3ddc1980, +0x3d92a672,0x3ce56329,0xba8bd710,0xbd00f0cf,0xbcd10f13,0xbcb3ac95,0x3bbfcf3c,0x3bd79358,0x3b0701c0,0x3ab4434f,0x3b9aab35,0x3c8958eb,0x3cd61b61,0x3d098781,0x3c78a4cf,0x3beed53d,0x3c1fd43d,0x3bf00ca6,0x3c21cc20,0x3ca717f4,0x3bbbc2a0,0xbaa90495,0xbbb75373,0xbc65e44e,0xbc761597, +0xbc7b9f6d,0xbc02c543,0xbb87298a,0x3c93d479,0x3cadd0e8,0x3d085ac7,0x3d73a2b5,0x3da30f53,0x3d83b0da,0x3d3b6114,0x3cd0c8c9,0x3c98c21e,0x3cd75dd3,0xbc96fbd9,0xbcd423a4,0xbca4718f,0x3bdc2161,0xbc7b7797,0xbb09b538,0x3b27f66f,0x3b5cf9d4,0xbb4950e9,0x3b29a454,0x3b8951e1,0x3bbd40f8, +0x3c0c5aa1,0x3c0672a3,0x3c2ad74e,0x3c57dd42,0x3c972a5d,0x3ceba254,0x3c3ace43,0x3b983aca,0x3bdde30c,0x3ba362ea,0xbb024130,0xbc272b25,0x3a17fbd8,0x3c331287,0x3cb58f6f,0x3d2d5646,0x3d4a877d,0x3d0bd11e,0x3ce68275,0x3cfd41b2,0x3d25fad6,0x3d69622f,0x3d45d8df,0x3cc152d2,0xbb0aa248, +0xbc6bc19f,0xbb85cda9,0xbc5c6075,0xbb91c303,0x3c25cd1c,0x3c01d6b6,0x3be12f89,0x3bd51e3e,0x3c1cec73,0x3c452c37,0x3c716426,0x3c2fd7fa,0x3c5a7aec,0x3c33a55f,0x3c4fb49f,0x3be742e8,0x3c2e07cc,0x3c0bac9b,0x3c0f9021,0x3c5e8143,0x3c6d6e4e,0x3c7a1e9f,0x3c523174,0x3c981b71,0x3c7a28e6, +0x3c4e81de,0x3cab7b23,0x3cb4e40b,0x3ca38d7d,0x3c84ab91,0x3c42950f,0x3bdf3a9a,0x3c972d1f,0x3ccb47b8,0x3cd43976,0x3c947a39,0x3c35081a,0x3b1a15fe,0x3afe09eb,0x3c4d8083,0x3c4a36d0,0x3c949380,0x3c0f93c5,0x3c09bf54,0x3c01a3ed,0x3bb96ab2,0x3bd17641,0x3c051f78,0x3c5887ba,0x3c0eb51c, +0x3c6c4909,0x3b3a0816,0x3b60973c,0x3a8dc826,0x3c3adea1,0x3c515fc1,0x3c718754,0x3c4e8087,0x3cb70f46,0x3c9451d0,0x3c07581b,0x3a6bfb21,0xb9ce5c98,0x3b33e33e,0x3c240d29,0x3c49ca42,0x3c899e3c,0x3cb125a5,0x3cc269cb,0x3cc7b7cc,0x3cf98779,0x3cc5e1f4,0x3cacb9f1,0x3c348049,0x3c7fbd60, +0x3c081658,0x3b9445bf,0xbb46b2b2,0xbb05db8e,0xbb670987,0xbbd7b012,0xbba649fe,0xbc2aa4ba,0xbbd7763e,0xbbc9f1c5,0xbb5fbc55,0xba64fa3b,0x3c1ac3b8,0x3c483a68,0x3c2c6ac6,0x3bf300ad,0xba686d64,0x3bea5194,0xbc2b140c,0x3c400af9,0x3c73119a,0x3ca0de98,0x3cc67225,0x3cd16ba2,0x3cbc3996, +0x3c94e339,0x3cce3e03,0x3cdb36eb,0x3ce538f9,0x3cff482c,0x3d01090c,0x3d052d52,0x3ce00d85,0x3cb0a77d,0x3c9fccf0,0x3c67c9e6,0x3c5b7d44,0x3c5f7e4d,0x3c62e38e,0x3c3492b3,0x3bc71b4a,0x3c7bea2e,0x3c483a04,0x3bb29fcc,0x3bae26dd,0x3bb69a94,0x3bbbd673,0x3b8b8d1b,0x39fbc55a,0x398a2ef8, +0x3c5050c7,0x3c9283e7,0x3bbc4995,0x3c6c4e38,0x3ca61615,0x3caa9da6,0x3c87028f,0x3c7e958e,0x3c5fb828,0x3c597db9,0x3c6e2aee,0x3c79bbd2,0x3c79356c,0x3c6b0809,0x3c721b00,0x3c6dadb0,0x3c687288,0x3c7a9ebc,0x3c751820,0x3c633d0a,0x3c633c37,0x3c656d1a,0x3caadfe8,0xbc948b10,0xbc5135e1, +0xbc8a0b7b,0xbc9a015c,0xbc3d5fbe,0xbbff863f,0xbc42dcd7,0xbc25241a,0xbbf1173d,0xbc0f5c9f,0xbc1d1be4,0xbc13b9d2,0xbc117aaa,0xbc0fe4bd,0xbc1561bf,0xbc1f6d61,0xbc26433b,0xbc0fadd1,0xbc364ce7,0xbc3adcec,0xbc20f285,0xbc30ee6a,0xbc3970f9,0xbc3d9e5c,0xbc3cc2c3,0xbc37136f,0xbc24ffa6, +0xbc35c392,0xbc349d36,0xbc362985,0xbc37ee69,0xbc4b2dd9,0xbc92d229,0xbc6d80cd,0xbc6c4b32,0xbc8263fa,0xbc623da1,0xbcba6c0b,0xbc9d701e,0x3ac80de9,0xbc3588f0,0xbadf808b,0xbbb1ae2d,0xbbd0e082,0xbbae7620,0xbc301586,0xbc2dcd23,0xbc0e9873,0xbbe88ee5,0xbbd380b2,0xbc03c424,0xbbb1c2ed, +0xbbff3d2d,0xbc0fc506,0xbc33a342,0xbc4f9cc1,0xbc2dd085,0xbc373c8d,0xbc410578,0xbc4e221d,0xbc3fb037,0xbc40417c,0xbc418fee,0xbc94409f,0xbca9e814,0xbcaaa7b9,0xbc82dec8,0xbc6c7fae,0xbce718e4,0xbc9d3877,0xbcb87906,0xbd02cbc5,0xbccb0edc,0xbd024b92,0xbce56e12,0xbc74689c,0xbc46eb8d, +0x3b94c134,0xba503658,0x3b8419fb,0x3b868185,0xbaec992d,0xbbaed737,0xbb133734,0x39fb8b42,0x3b82d44b,0xb77e5e8b,0x3b752955,0x3ab4e7f7,0xbb4ebdc6,0xbbb06c77,0xbc077038,0xbbb4810e,0xbc135a59,0xbc36f641,0xbc6824a1,0xbc4c1071,0xbc475ed1,0xbc16f386,0xbc91fb9c,0xbc9525ea,0xbc99d2bb, +0xbc6c7f98,0xbcaf03e3,0xbd382acc,0xbcdcc9b1,0xbd009b83,0xbd3f7eac,0xbd0e3a81,0xbd5c0fc4,0xbcd7f042,0x3cd19a3d,0x3a979de9,0x3cb753da,0x3cbc7b69,0x3c8a6a9e,0x3c3ca34f,0xba64cba9,0x3b287e07,0x3c056bef,0x3c403c5f,0x3c778c87,0x3c2ed40e,0x3c57acd5,0x3c2c4ed5,0x3b5f40cb,0xba97380c, +0xbb851d82,0x3ad35a1b,0xbb65cd0c,0xbb519e42,0xbc2166d8,0xbbac65d4,0xbc05e1f1,0xbc02d637,0xbcbc8fe1,0xbcf012ea,0xbd0a5574,0xbc9602b6,0xbcbaf078,0xbd439a01,0xbcd97ee8,0xbd0a8cb3,0xbd98f775,0xbd4a7b94,0xbd81773c,0xbd5fc13b,0x3c47cf48,0x3c258a46,0x3cfda478,0x3cd5d0a4,0x3d003bd5, +0x3cc41a2f,0x3c7430e8,0x3c29fa81,0x3c852aed,0x3c97bf6c,0x3cd7dc70,0x3cfcc4ea,0x3ce63778,0x3cb69b09,0x3c3f5a3a,0x3bfeb883,0x3b03cc25,0x3c39fb52,0xba63e9f3,0xbbec6214,0xbc64f934,0xbc3ab289,0xbbe91cea,0xbba78c29,0xbc81fc1c,0xbcbfd2fb,0xbc80059f,0xbc9b1ac3,0xbcd59186,0xbd9443f8, +0xbce837a2,0xbd4097af,0xbdac98f0,0xbd89f03c,0xbdb93648,0xbd8689f3,0xbdf434ac,0xbda87156,0xbd4322fd,0xbc107e65,0xbc518756,0xbccbdac4,0x3c558802,0x3d11e6dd,0x3c847e05,0x3d03638d,0x3cf6d169,0xba84e369,0x3cb0d7eb,0x3cc3d309,0x3c0ae411,0x3bcbd59a,0x3c0be696,0x3c912cdc,0x3c278a5d, +0x3c6242b1,0x3d2ce76d,0x3cb86ce5,0x3a646138,0x3b99c1da,0x3c32bf0a,0x3c5386e5,0xbb2415df,0xbbdebd83,0xbcd538b1,0xbd7d66a1,0xbd83c7be,0xbd621a08,0x3b2105d7,0xbd923588,0x3d32298d,0x3d490f25,0x3ce7a7fe,0x3d081ec5,0x3cf80ad2,0x3c5634fc,0x3c61e7fe,0x3d455446,0x3cb711c5,0x3c894cd2, +0x3c01cc01,0x3bddde5b,0x3c6895ad,0x3d0a4691,0x3ce51def,0x3ce38e78,0x3c12d29b,0x3b8c42ee,0xbbce42fe,0xbc01bbb1,0x39c333b5,0xbcae3357,0xbd578e04,0xbd52ee5c,0xbd4428dc,0xbc5e1426,0xbcc50556,0x3bda8735,0x3d01a193,0x3c6736b3,0xbd02b566,0xbe1a560d,0xbdb2a880,0xbdeac8c7,0xbdc3fc16, +0xbc0d7a1f,0x3d059643,0x3d05dba3,0x3b8d9f99,0x3c09bd35,0x3a38858c,0x3d0e69f3,0x3d1e4cd1,0x3d366467,0x3c160da3,0xbc2a24e7,0x3b130d2e,0xbbdf97a6,0x3bd80432,0xbbb75a93,0x3d03b5c7,0x3d065521,0xbc0f1427,0xbbf588d2,0xbcc46088,0xbcade844,0xbcfa9808,0xbcf980f1,0xbcfbced0,0xbcdb2413, +0xbcbc3b0f,0xbb1ad877,0x3bd0317d,0x3cb17e6b,0x3d282d62,0x3cb0dc20,0x3c62b21f,0xbce98c33,0x3d23a0b8,0x3d9a73bb,0x3dcf3b1e,0x3cf68647,0x3c398a03,0x3c90058b,0x3982453c,0x3c5deb8e,0x3c02103d,0x3d206c22,0x3d1e3fa1,0x3ccdc69e,0x3c895fd9,0x3a583031,0x3c5a1245,0x3b2f8454,0x3c704d17, +0xbcab976c,0x3cec593e,0x3d03459a,0xbcd376a1,0xbcacec61,0xbd06dcc2,0xbcd94792,0xbccc821d,0xbc6f2eed,0xbbfd3ec7,0xbbd36b86,0xbb88d75c,0x3ba7216f,0x3cb61094,0x3d0fbd14,0x3d1f786c,0x3d713166,0x3d91c022,0x3d9bd3ab,0x3d7b59cb,0x3db74987,0x3e1fe337,0x3d31f678,0x3bcf9259,0x3c1c7bee, +0x3c88925b,0x3c46e7b9,0x3aa7e132,0x3ba1f08b,0x3b7ff01b,0x3c1b9fef,0x3d0845c2,0x3d0ffec6,0x3cb83b5e,0x3c9feb1e,0x3c9feb59,0x3b8419ae,0x3ce5c444,0x3cca1829,0xbc304688,0xbbb11d22,0xbc34f0fe,0xbbf7755f,0xbbcd365e,0xbbc72591,0xbc1267a1,0xbc9cdfaf,0xbbc9ee13,0x3d0020ab,0x3d14130e, +0x3d2176f4,0x3d0791ae,0x3da5f2bb,0x3dadfad9,0x3d097de0,0x3c0f38d5,0xbccc3660,0x3ca7d25e,0xbbc5a84b,0x3d07a497,0x3c015213,0x3b679561,0x3c36c97f,0x3c938950,0x3d050337,0x3d13234a,0x3c8e5da4,0x3c200697,0x3b433bbb,0x3c38f461,0xba68c196,0xb9db96e8,0x3beda529,0x3a7b43b2,0x3b2e4c19, +0x3bdb3ef0,0x3b8be181,0xbaa84ea4,0xbbe1045c,0xbc8e1a1f,0xbc88a033,0x3cb2425c,0x3cc06ed5,0x3cd11ce7,0x3d1180b5,0x3c662a53,0x3c5dbe22,0x3ba64519,0x3d032614,0x3d1558f6,0x3ce9708d,0x3c139638,0x3c0a1279,0x3d1b583a,0x3d296148,0x3cf2300b,0x3cbcd877,0x3c407c41,0x3c177a89,0xba5dd920, +0x3b4813e1,0x3b64ab24,0x3bbb6616,0x3c05025b,0x3be13420,0xbb25b75f,0x3c33604f,0x3c779e0c,0x3c83e0a8,0x3c0b46bc,0x3be783b2,0x3b550a16,0x3b6b9ae2,0x3b5ba439,0x3b1e4421,0x3be8eff6,0x3a4b0ae2,0xbc43b5da,0xbba5be85,0xbb10b111,0x3b937cf7,0xb945ed77,0xbbbe2499,0xbc15d00c,0x3bab266e, +0x3ac8c871,0xbc565132,0xbcdd6129,0xbce93a98,0x3b93ca95,0x3c501494,0x3c4503da,0x3bde1003,0x3c00b81d,0x3c1be41a,0x3c146ad9,0x3c245fbe,0x3bf78e30,0x3bc2408a,0x3c1561ea,0x3c2678fa,0x3c5b8529,0x3c45f9f9,0x3c5921d3,0x3be4e605,0x3b9788fd,0x3b476eea,0x3be08278,0x3c12b104,0x3c294692, +0x3c488ac0,0xbb03c7f8,0x3b49beeb,0xba977f3e,0xbb305171,0xbc214367,0xbce066d7,0xbc8c28bb,0xbc2bb607,0x3a8cb135,0xba95f8bb,0xbbdfec82,0xbca25d63,0xbc84350c,0xbc1a29a5,0x3b36a0ae,0x3aae01f5,0xbb966ef6,0x3a22a925,0xba82fbd5,0x3b615922,0x3bea2a24,0x3b910928,0x3b9d6fad,0x3b3cd272, +0x3c247f79,0x3c221c09,0x3cc65581,0x3bed97bb,0x3c26da56,0x3b637e42,0x3c7d06a0,0x3c4376f0,0x3c5eb118,0x3c78129f,0x3cd8dc2c,0x3cb3310f,0x3c897096,0x3cabada5,0x3cb1d671,0x3c5d4211,0x3b210203,0xbac597e1,0x3c0f0079,0x3c595422,0x3c8f2e0e,0x3ae4d1f4,0xbc09e115,0xbc9c87ab,0xbc56c5af, +0xbc52dd40,0xbc3b66f5,0xbc006bac,0xbba01907,0xbc040261,0x3b8ace95,0xbaec2694,0xba520b9b,0x3a8068d5,0x3b7c8066,0x3b4a3109,0x3b788981,0x3a0d3080,0xba725454,0x3b819c93,0x3b2100b3,0x3ba5db0d,0x3ba549fe,0x3c0c1866,0x3ca17094,0x3c4fff9e,0x3cd369b9,0x3c3c06f3,0x3c6919fa,0x3c818c03, +0x3c8c178f,0x3cc37cc9,0x3d043516,0x3d1e6da2,0x3cab1aef,0x3c2f46cd,0x392215fe,0xb9ca4d5c,0xbad29ffe,0xbbf4b10c,0xbbe50cc0,0xbb8772e7,0xbb809bcc,0xbb9407da,0xbc6324c3,0xbc6bfbae,0xbbbe8514,0x3b3b4119,0x3c404bc6,0xbbd81b8d,0x3a94e9b9,0x3c15328a,0x3c1a4d90,0x3c484643,0x3c5ac01c, +0x3c664792,0x3c85cdc9,0x3c8fcac8,0x3a844789,0xbc0c5cfe,0x3c7ad1fd,0x3b98d628,0xbb8927ca,0xbc4a9aa4,0xbc227761,0xbc1e9786,0xbc205b6b,0xbc45b0c1,0xbc6e044e,0xbc60acd3,0xbc59d388,0xbc30fd97,0xbc2d204f,0xbc5408ef,0xbc78d71c,0xbc8bf0a7,0xbc83f507,0xbc7d0759,0xbc8151cf,0xbc7af070, +0xbcb27294,0x39752aae,0x3b21d989,0x3b9e7c68,0xbb028092,0xbc07ed42,0xbc2171fa,0xb9e8694c,0xbb8c284a,0xbc1f6389,0xbc320845,0xbc397212,0xbc2e840a,0xbc225001,0xbc2ea704,0xbc20cb02,0xbb7087a5,0x39775051,0xbc32dcee,0xbbbb1d58,0xbb07be2c,0x3adff6df,0x3afa46bc,0x3b13252b,0x3a6ee2d6, +0x3b07cf0a,0x3b1d1f86,0x3b49f982,0x3afe9a0b,0x3b0bad9a,0x3b772e52,0x3b2cbda7,0x3ae79f87,0x3ae7d418,0x389bb702,0xb9c38620,0x3a323915,0x3b24053f,0xbbf6cf45,0xbc56cb76,0xbcd6f5b2,0xbc427c9c,0xbc0285e6,0xbb7bc4f9,0xbaf3147c,0xba9c37d6,0xba5e3fc0,0xbb6c3649,0xbb63a14a,0xb7cfafbf, +0x3a9347a5,0xbb21488c,0xbb834f4b,0x3b1ddb69,0xbb338ce5,0xbb30e0b7,0xbb93f890,0x3aba8372,0x3baeff89,0x3ba9c32e,0xba950086,0x3b2605c9,0x3b62ace3,0x3bce3889,0x3970f6c1,0x3a0fd91c,0x3bd28bff,0xb9985907,0xbb21719c,0x3b09a24f,0xba809be3,0xb7d21b61,0xbb96fadc,0xbbd59b06,0xbba4145e, +0xbc3ee8ca,0xbce7e976,0xbca2d99f,0xbbd014dc,0xbb805561,0xbad6b919,0x3bde96cd,0xba82d5ba,0x3b049a8b,0xbb1e21f4,0x3c01ca44,0x3bd25554,0x3b5019c1,0x3bf06651,0x3bff48f2,0x3b871637,0xbaf9699f,0xb9eb7d0a,0xbafada15,0x3c04da3e,0x3bf72d0e,0xbb676e36,0x3b6c4ead,0x3b58cc95,0x3bfef0c3, +0xb9e991d9,0xb8cb510d,0x3c4923dc,0x3a1d2e8c,0xbafcf740,0x3b709797,0xbb9ecdbd,0xbbc62f2e,0xbc2b6b6c,0xbbb6fd39,0xbd028c08,0xbd60178c,0xbd85cf8b,0xbd27f882,0xbc6be7e1,0xbbcb51fe,0x3b8e05ba,0x3bef6d19,0x3b0387bc,0x3b1a8994,0x3ba50026,0x3c54c452,0x3c7f0bab,0x3b9e05cf,0x3c6c0f1b, +0x3c54f5a7,0x3baacb16,0x3ac40032,0x3b29656f,0x3a61b261,0x3c2e3f0b,0x3c49bbed,0xbc41a35d,0x3b134e56,0x3ae8594f,0x3c129850,0xbc065de6,0xbbc6f35f,0x3c52361f,0xbc00f947,0xbc5ada4a,0x3be3d23e,0xbbeea618,0x3ad76221,0xbcc018b8,0xbd053cfb,0xbc1b26bc,0xbcd0c828,0xbd86bc85,0xbd4feeff, +0xbc3bb39a,0xbc1a742f,0x3bde86d6,0x3c3f5daa,0x3c0e4a04,0x3c34d258,0x3c560b98,0x3ca47e73,0x3ce66207,0x3caaf5cc,0x3ce4834f,0x3ca8ab0e,0x3c2bf8a9,0x3bb36571,0x3c377f71,0x3b60355f,0x3c3130c7,0x3c62c939,0xbc43a6c5,0x3afe768a,0xb9c99e21,0x3b9afcab,0xbc0986a5,0xbc0bb243,0x3c854f2a, +0xbba108d4,0xbbf76568,0x3c1998f4,0xbc11b237,0xbc7bb026,0xbcdf9521,0xbca1d0d4,0xbd0f649a,0xbcce89f6,0xbd8e2c0d,0xbd9e8359,0xbd16759f,0xbc70744e,0xbac878f9,0xbc7b21d9,0x3bde8617,0x3ca81dad,0x3b547f2c,0x3ceb688a,0x3cb4ed3a,0xbc0bd671,0x3c6b9d6f,0x3c53d00f,0xbbad4d99,0xbc32dbce, +0xbbb47803,0xbcaacb51,0xbd064d85,0xbcf06f1e,0xbd08f492,0xbd1b9cbc,0xbd192c59,0xbd38dedc,0xbd2c0cac,0xbccaa2f8,0x3c07a2f3,0xbc8c3eff,0xbcbf5e2f,0xbd4a7a1c,0xbc0d39a0,0x3c103412,0x3ce07a80,0xbd271eb3,0xbbf2c53d,0x3d108812,0x3d61ad85,0x3d00fc5f,0xbbf6e218,0xbad13587,0x3ba6532d, +0x3d029ad1,0x3c2a0943,0x3aacd632,0x3bf60996,0xb9e44be8,0x3c2abf16,0x3d11b33c,0x3cd127c1,0x3cafa6ef,0x3c89156f,0x3c44d03a,0x3b8f2659,0x3c12a54d,0xbba357ad,0xbc2921c0,0x3c204e3a,0x3a9963ef,0xbc20d776,0xba7e80be,0xbb8b9f05,0xbc56f973,0xbd28c930,0xbcce7be0,0xbce4d323,0xbda72d77, +0xbd4949d5,0xbd65a3b2,0xbd8e06b7,0xbcdaf0ca,0x3d1b9876,0x3cf03ab6,0x3bcc1e86,0x3bf7b0aa,0x3cd1a0bc,0x3d43e493,0x3d3f41e3,0x3c7ddf9b,0x3bbddfdc,0xbc3c46b2,0x3b9cde59,0xbbd2a1f5,0x3c044e47,0xbc6542b7,0x3d0493d1,0x3d08eafa,0xbbf838df,0xbb216edc,0xbc47e3a4,0xbc137754,0xbc141571, +0x3af03388,0x3c3a3741,0x3c0a03e2,0xbb498ead,0xbc445e6c,0xbd2721c9,0xbd37bbac,0xbd2b9358,0xbc6c6951,0xbc2062a3,0xbd2a35bb,0x3d168363,0x3d9954ce,0x3db2f89f,0x3d85175c,0x3d71250c,0x3c939222,0xbc2a8f84,0x3b9109eb,0x3cdffda9,0x3d4bfe72,0x3d3e79ce,0x3ba654dd,0x3c876d5b,0x3b7fa056, +0x3bc9c350,0x3ba85b3f,0x3c2ff4cb,0xbce24d2b,0x3d090dfd,0x3d1df6c2,0xbc222df5,0xb93a8e86,0xbc46e35d,0xbc65a904,0xbc95871f,0xbca91823,0xbcafb066,0xbcd8c6bd,0xbcf47088,0xbc9a88d2,0xbd384ee1,0xbd228613,0xbd02286e,0xbc9e409d,0xbbc0311e,0xbc6d52e7,0x3d141787,0x3d825c2d,0x3da1a86c, +0x3d88a475,0x3c18dd14,0x3bdb91e5,0x3be044ac,0x3b120fc1,0xbb79a658,0x3c7ce889,0x3c90d9a2,0x3c9076eb,0x3cfba16c,0x3cef9d10,0x3c1ea91f,0x3c67fafd,0x3c89b1d7,0x3c468207,0x3cf4fac7,0x3d006aaa,0x3bfa2fe6,0x3be970d0,0xbb27e920,0xbc2c2944,0xbcec553d,0xbd269da3,0xbd2b8fa4,0xbd7f9c81, +0xbd936f39,0xbda07055,0xbd4bcedf,0xbc961f02,0xbb386bca,0x3d220097,0x3d4ecd4b,0x3c345ffd,0x3bd1e593,0xbcab8c77,0xbd1cbff1,0xbc2a76f8,0x3c100433,0x3c1960ac,0x3c8ddc9c,0x3ca33d07,0x3c804dd1,0x3cb93a07,0x3c9b85e4,0x38f7527f,0x3b74d456,0xba3a386d,0xb9ee3cc0,0xbb634710,0xbb136e08, +0x3c141ccc,0x3c58d570,0x3c64629f,0x3c07d1ff,0x3c69decf,0x3c1d3f93,0x3b479043,0x3bd4d538,0x3c195b0d,0x3c89a1b6,0x3c860ed8,0x3ccb89fe,0x3c9ba97f,0x3cb70a09,0x3c071c57,0xbb841094,0xbb01e3ce,0xbc565fa1,0xbd602044,0x3be39118,0x3d08450e,0x3d296f5d,0x3c474814,0x3ca0c924,0x3c3c775c, +0x3c150bf9,0x3b2df41d,0x3b91556b,0x3c4b472f,0x3c897151,0x3c78ea5a,0x3c7969ce,0x3c3a4ef5,0x3c257a16,0x3ba7b0cb,0x3bba4f43,0x3b5a4631,0x3be4d886,0x3bdce5b0,0x3b2b1ead,0xbb1b2aa5,0xb940a3b1,0x3af7f75a,0xbb4fc1be,0xbc277b5a,0xbc7d603a,0xbca64e60,0xbca71cae,0xbc2be204,0xbc59c5e7, +0xbbfd4cc4,0x3a3c66e7,0xbbdd58eb,0xbc1e0baf,0xbcfce293,0xbbbf54b7,0x3aec1720,0x3c1963be,0x3cab6493,0x3caff491,0x3caf1b18,0x3c60809a,0x3c216b84,0x3c5bdcc7,0x3c4afaba,0x3c36b4da,0x3c1e8c27,0x3c0efb8e,0x3c0244af,0x3c26dc3f,0x3be9933d,0x3baf099a,0x3b567384,0x3bbc840c,0x3baa84f3, +0x3b8e5067,0xbb9e7a08,0xbc159224,0xbc5074dd,0xbc1e8bf7,0xbbc3af33,0xbc062eab,0xbaf5d8bf,0xbabc763e,0x3ac9986d,0xbb3d9d39,0xbbac45d9,0xbbc5a6d8,0xbc85f038,0xbcb71f21,0xbd0c9cab,0xbc481ffe,0x3b846686,0x3c748c1d,0x3cd6065f,0x3c11164e,0x3c730ea1,0x3c3f28f6,0x3c64a17c,0x3c20ea79, +0x3c191013,0x3c009c53,0x3bf13c15,0x3be9e0c2,0x3bcbf8e1,0x3b8b5148,0x3b202c50,0x3b4ff11f,0x3ab0ce05,0x38f391bd,0x3aaf189c,0x3b9001e2,0xba149664,0x399d8bbd,0xbc4e485c,0xbc17a4a3,0xbbabd38f,0xba3556a7,0xbba51b14,0xbbcccb45,0xbbef481f,0xbbde18f0,0xbbe15612,0xbbe4afdf,0xbc4a613a, +0xbc74125e,0xbcba7d4c,0xbc5423ce,0xbc005e32,0x3b45290b,0x3b1186d5,0xbaac7ea8,0x3b16010e,0xbc02995e,0xb8e9b181,0x3a90baae,0x3b8a29a6,0x3bb5ab92,0x3bef6c44,0x3b063fcd,0xbad90689,0xbba8a41a,0xbc0692ba,0xbc2b1ffa,0xbc71e072,0xbc3c40ca,0xbc444215,0xbc23c130,0xbbdf7e5c,0xba94efbb, +0x3b2209de,0x3b3f387f,0xbacb81d2,0xbb549eea,0xbb570e34,0xbb7888ba,0xbba8a2ed,0xbc175449,0xbc4b81b2,0xbc7510c4,0xbc8c294b,0xbc964d0d,0xbca81027,0xbc81b11d,0xbc4089b5,0xbc17c6c0,0xbb9ae1d0,0xbbc6bc59,0xbb48f4ad,0xbc1b7d23,0xbc68e3b2,0xbc885d1c,0xbc11db8e,0xbc5e1138,0xbc6c22ab, +0xbc703044,0xbc76abf9,0xbc8001d4,0xbc88777c,0xbc93a9f1,0xbca08838,0xbc7d44ca,0xbc22374f,0xbc802117,0xbc8279d7,0xbc5efbc7,0xbbc8c9f7,0xbbf19660,0xbbe9aebd,0xbbe238a5,0xbbef21d8,0xbbf09c7b,0xbbdc6211,0xbbdf83f1,0xbbdea67b,0xbbe951bf,0xbbf257e5,0xbc01d798,0xbc13dfcf,0xbc0a31b0, +0xbbf768cc,0xbbee9d8e,0xbbe40d2f,0xbc7d2f94,0x39bbf1df,0xbab651d4,0x39d67f6c,0x3b8d4ccb,0x3b3fec28,0x3b5cfc7f,0x3a910775,0x3b5f03bb,0x3bbeb3da,0x3b9c829e,0x3b93be9b,0x3b757516,0x3b96f7dc,0x3bb0fd9a,0x3b81e11b,0x3b85496d,0x3b38a9e4,0x3ba054e1,0x3b7182d8,0x3a99260b,0xbb2af505, +0xba8336d7,0xba882ffb,0xbae6ae86,0xbaffe07b,0xbb13791a,0xbb31a2bc,0xbac81eb7,0xbaa1079f,0xba55f276,0xbb82ff07,0xbb93d93c,0xbb609dea,0xbb553b9a,0xbb6c6761,0xbb679839,0xbaed7c71,0x3c65433d,0x3bd164f5,0xbc05eee7,0xbb78842c,0x3ae774d0,0x39d107b6,0x3b1f30c7,0x3bcc5b0b,0x3ab5e4a3, +0x3b26b265,0x3b1bb0ff,0x3b91a621,0x3b5c4e69,0x3aeb10b6,0x3bfe9f8f,0x3bc3d30e,0x3bc4b5c7,0x3b0414d9,0x3b009788,0xbb9b1f1d,0xbb3fcf49,0xbb3ddbfe,0xbb977e20,0xbb25311c,0xbaac66f1,0xbb2c31fe,0x3b03eac0,0x3b300927,0x3b8b97ff,0xbb95cf5c,0xbb80340e,0x3b09b8fe,0x3ab98637,0x3bde6286, +0x3c499bf6,0x3c90bb72,0x3c4b9273,0x3c1b3f2a,0x3ae9d877,0xb955fa68,0xb925982b,0x3ab0d313,0x3b7ce691,0x3c29d28d,0x3b932ec0,0x3a51ee3c,0x3b845c34,0x3b67587c,0x3be8701d,0x3a8e8d7a,0x3c13f29b,0x3c13cbca,0x3c0c9fdf,0x3aea3cab,0xba70f0b2,0xbc0e251d,0xbb9f78b7,0xbb8510d6,0xbbfc0a5d, +0xbbd503f5,0xbbda3080,0xbbf11249,0x3afd7ba9,0x39a9ed08,0x3ba665fb,0xbc90ace6,0xbc9b5f89,0xbba2a630,0xbba3b52b,0xbb710ed3,0x3b15782f,0x3c329c8a,0x3d544c6e,0x3cd9bb68,0xbc9862ba,0xbc2426a2,0x3b826b83,0xbb3556f7,0x3ae3e49b,0x3c9180d2,0x3b4f904f,0x3b74e825,0x3b92bcce,0x3c2857fd, +0x3c5f2fbd,0xbaf8a05c,0x3c7997fc,0x3c6e4908,0x3c352d03,0x39a41212,0xbb65ebdd,0xbc564e84,0xbc176cd9,0xbc03c2ce,0xbc3fbfd5,0xbbd17efa,0xbaeb8bd7,0xbadee364,0x3c32239c,0x3c2977bb,0x3c82a60c,0xbc30bf24,0xbc37b867,0x3c305d77,0x3c210ff3,0x3cafbfc0,0x3d2856f4,0x3d4dc203,0x3cfe3316, +0x3d0e4fde,0x3beec615,0x3b85caf9,0x3c33966e,0x3b1b91df,0x3c08bbb8,0x3cc7090a,0x3c073df6,0x3c09a9ef,0x3c2fa099,0x3ca2ba67,0x3cbe53e3,0x3b992827,0x3ca95739,0x3ca0ed1e,0x3c197d69,0xba8b168c,0xbaddd371,0xbc9f3a44,0xbc08a445,0xbbc2b3a2,0xbc3f2c59,0xbc21f9e0,0xbc4362bf,0xbc166f20, +0x3b9d59b2,0x3beb62b6,0x3c81269b,0xbd14e900,0xbd1802be,0xbc0dbee5,0xbbc79cf7,0xbc265065,0x3c01d2ba,0x3cf97e12,0xbd5d7484,0xbd009caa,0xbc7f1cf0,0xbc9183cf,0xbc4ccfe9,0xbaf5d733,0xbb1c60d1,0xbc16d28f,0x3c531c52,0x3cc315a2,0x3bb52aa0,0x3cabf15f,0x3c81c5ce,0x3c26e463,0x3c258422, +0x3ba8cd47,0xbc0d003f,0xbc906f7d,0xbce44d8d,0xbce98b8a,0xbc8ceb22,0xbc880bf3,0xbd09a4bc,0xbc523bef,0x3b7c2006,0x3c420a32,0xbac49dcc,0xbc9ec9a9,0xbcef279e,0xbd1d0baf,0xbd07b9cb,0xbd7d4f4e,0x3c8edc95,0x3d08fe91,0xbc71f977,0xbd12b932,0xbd5a30fc,0xbc387ff2,0xbba7ea34,0xbbd65e5e, +0xbce859bd,0xb9e9ca7e,0x3c220667,0x3d1f93d9,0x3c427259,0xba855b8b,0x3b802484,0x3bb940f3,0x3c531965,0x3c857628,0x3c9793b2,0x3c654009,0x3b72419c,0xbaf4d29c,0xbb33769f,0xba537540,0xbbccd292,0x39a54691,0x3c8e2a20,0xbcf996ce,0xbd3346e2,0xbd0e3f6d,0xbd084883,0xbd3775cb,0xbcd87887, +0xbdd1503c,0xbdcf1942,0xbd85c67f,0xbd87d9d9,0xbda3ce08,0xbdc69d0f,0xbd84982f,0x3d0e4e00,0x3d374fb4,0x3cf350b1,0x3ca9df41,0x3d07527c,0x3d462b1c,0x3d3373f9,0xbb4c7966,0x3c2aa04b,0xbb0e9d89,0x3c115d36,0x3a8bb8e7,0x3c141c2b,0xbc136ba4,0x3ce90835,0x3cf95230,0x3b5597e3,0xbb16691a, +0xbc3b8825,0xbbe0b951,0xbc49f440,0xbc516a39,0xbc0d3afb,0xbcc12651,0xbc9ca4cf,0xbc846b21,0xbc44e156,0xbc6e1bfa,0xbc9448f4,0xbd61941b,0xbd770846,0xbdb911aa,0x3b900f06,0x3cae4f6d,0x3c18b6f1,0x3d0f3fb4,0x3d901745,0x3d6f0b4a,0x3d29b9e0,0x3d3802f7,0x3d3e92cb,0x3d4a35fd,0x3d2ebca1, +0xbb169a96,0x3c806984,0x3beb0794,0x3b9a1703,0x3c0cda71,0x3c648ecd,0xbc7d78cc,0x3cf9d0a8,0x3d1959a5,0x3c0f6fff,0x3ba5dcf0,0xbbfeca69,0xbc58a11a,0xbcb97cf5,0xbca876fe,0xbc6755aa,0xbca3e85f,0xbd08b672,0xbd2a2715,0xbd5d1397,0xbd4e2cdf,0xbd229207,0xbc996f7a,0xbc188b08,0xbd229399, +0x3d626f9b,0x3db3d65d,0x3d8a81bc,0x3d99ae56,0xbbb371c1,0xbb5e6761,0x3b884df2,0x3be75c67,0x3aa97ceb,0x3ca4c1d4,0x3ccada55,0x3ce1a302,0x3ccd411f,0x3c9d225e,0xbb2beb26,0x3c7816ea,0x3c8847d9,0xbc04dc89,0x3ca82d76,0x3cd295a3,0x3b803bec,0x3bf09b4f,0xbb49eef4,0xbc50c495,0xbcc37f68, +0xbd098a18,0xbd2aca9a,0xbd5a761c,0xbd7c860b,0xbd863a4e,0xbd71a095,0xbcf4ba15,0x3cb39581,0x3ced9557,0x3d11c257,0x3c444976,0x3d499e7c,0x3d3edcd7,0x3cf0d490,0x3b86d2fa,0x3d0c7b17,0x3ccbc5d8,0x3c82295d,0x3c5b76a2,0x3cce988a,0x3cc92f2e,0x3c9e8859,0x3b9c1ef6,0x3bd02062,0x3bcbaaf3, +0x3ad70c22,0x3b7d4ae2,0x3befe552,0x3c98cc9e,0x3cd701be,0x3cbf7861,0x3c3c6649,0x3c908225,0x3c992cde,0x3ca3baea,0x3cca6c7e,0x3cb49ba7,0x3c9ed348,0x3c33a3e9,0x3cc4cb03,0x3d108baa,0x3d82ece2,0x3d812d72,0x3d9022e5,0x3cb5d308,0xba20b8ff,0xbd091966,0x3b99b1a7,0x3cbf89aa,0x3d0031b5, +0x3d06e43a,0x3c2d4f71,0x3ba4a058,0x3c0314c4,0x3c36aff7,0x3c1a33e7,0x3c90ce48,0x3cb0efb1,0x3cbfa919,0x3cb1ded5,0x3c6748cc,0x3c841339,0x3c376754,0x3c57989d,0x3c60fabe,0x3c5fef31,0x3c37bc11,0x3b2ea69d,0xbab42954,0xbc077620,0xbb61b2b0,0xbc0306c1,0xbbedf62c,0x3bcf2d27,0xbc8e95ba, +0xbcbee375,0xbce4d3a5,0xbc2d7e70,0x3bd0a8c8,0x3cb1d3b5,0x3c2ad1f3,0x3c14cad0,0xbaa606f8,0x3c929b19,0x3cc71d93,0x3ced7fda,0x3c9fe1f6,0x3ca188b9,0x3c871f56,0x3c64ef50,0x3c5b15c9,0x3c433bbb,0x3c5dabba,0x3c58e20e,0x3c590ede,0x3c327dea,0x3c634550,0x3c526b14,0x3c6ea0ac,0x3c31f2bd, +0x3c6569db,0x3c646ff0,0x3c5dfd3e,0x3c291f29,0x3c20c0b3,0x3bf40107,0x3b8c6c9b,0x3c822b35,0x3bd406d4,0x3c0f17c6,0x3c2314b9,0x3c3eb1f1,0x3c891295,0x3cbf4482,0x3cdacbd7,0x3cf63f42,0x3ca08ff6,0x3c538d6a,0x3be1336a,0x3c6e7361,0x3c981d7b,0x3c9e618f,0x3cb1cc87,0x3c03954f,0x3c5fff21, +0x3c33e00d,0x3bd6f7e7,0x3b4fb79c,0x3b7be4b0,0x3b8bf47e,0x3be36e32,0x3be4fcc4,0x3c26e3a7,0x3bc5d575,0x3c7bd1e3,0x3c29dcc1,0x3c76ba43,0x3c038684,0x3c52f555,0x3c42d4c7,0x3c40c7ee,0x3b35916e,0x3c60946e,0x3c6416ed,0x3c09be56,0x3bb19a4e,0x3c461595,0x3caaf0d5,0x3cd378db,0x3c9af84d, +0x3c78a849,0x3c52f041,0x3c3b1acc,0x3c461c4c,0x3c331463,0x3be758bf,0x3b4ec609,0x3b7e8669,0x3bb83ccd,0xb8deb9f8,0xbad7a33f,0x3b55b53e,0x3ba2b563,0x3be5c427,0x3c0cbc27,0x3c263ed9,0x3c031a98,0x3c2916cc,0x3bd29936,0x3bc8c0c9,0x3b866d50,0x3bd4daa6,0x3b9e1a0d,0x3bf3012c,0x3bf1dfcc, +0x3b47eb52,0x3c171160,0x3b8c1644,0x3c15cc36,0x3bd01073,0x3c1dd5b4,0x3c2b1b89,0x3bfaec48,0x3b0b9952,0xba4f0801,0x3afb72ab,0x3aa86931,0x3ab8c505,0xba0bd601,0xbb5fa7c2,0xbb8718a1,0xbaae3e4f,0x3afcd2c1,0x3b028377,0x3aba236c,0x3ba3fd04,0x3bad4040,0x3ba94d67,0x3b4151a3,0xba967914, +0x3b9cb7a7,0x3b4da72b,0xbb00d01d,0xbb3ebd49,0xbb042bf1,0xbac87253,0xbb1123a3,0xbb776638,0xbb8a15fc,0x3bac1414,0x3bf9cd76,0xbb12cfea,0x3b851bcc,0x3be1742e,0x3bb830fb,0x3bb0fbf1,0x3b983805,0x3b823bed,0x3bab2bda,0x3be4441c,0x3be96312,0x3bde9700,0x3bafc3a4,0x3ba37310,0x3bb0e216, +0x3bbe8b07,0x3bbef5ba,0x3b9bc84a,0x3b801712,0x3b6b4729,0x3b853ef1,0x3c0b549b,0xbba6d94c,0xbbad897b,0xbbe71fd4,0xbc09ba1e,0xbbac532a,0xbb6d3ba1,0xbba05d6a,0xbb6ab19c,0xba80037a,0xbb062475,0xbb1d05ae,0xbb1f0641,0xbb0672ad,0xbb0960ad,0xbb25bf36,0xbb2cfe50,0xbb20bd04,0xba124479, +0xbb2b5c78,0xbb36e0ce,0xbb03843c,0xbb70557d,0xbb7d31d7,0xbb46cf0c,0xbb863612,0xbb8c76fe,0xbb8fc89d,0xbb5e04c7,0xbb677555,0xbb7be67c,0xbb9d2256,0xbba4053a,0xbba399f5,0xbb3ea8d3,0xbb441b7a,0xbb8d8ef2,0xbbb4b396,0xbbabc4aa,0xb915f5ed,0x3bd659a2,0xbb223ee6,0xbb08bd19,0xbb42b534, +0xbaf4f614,0x3b1d5234,0xbb17f5fe,0xbb5a55ca,0xbb393a62,0xbb05195e,0xba8cd23b,0xbb0ec3e5,0x3983e87d,0x39d5fc6d,0x3abfdecd,0xb9c6b32f,0xbb9184b1,0xbb66adfd,0xbb9d041d,0xbba3a94f,0xbaf0023c,0xbbac2027,0xbbba0aa5,0xbc018462,0xba8ba8ea,0xba25d383,0xbba76895,0xbc30af0a,0xbc640f42, +0xbc62c41e,0xbbf4ae0f,0xbb939443,0xbad4c8bd,0xbb6731cd,0xbc807485,0xbc2dd40e,0xbbeb85d1,0xbc2118cc,0xbbdc422f,0xbba7deab,0xba269a8c,0x3bedd64e,0xb818a6ca,0xbaf44dc1,0xbab4844a,0xb9786549,0x3a98f714,0x3a222b2a,0x3b71211e,0x3bae53d6,0x3bf5fd10,0x3b329c7d,0xbaef1cfe,0xbb1d2840, +0xbba71ce9,0xbc0a8fe0,0xba5e3066,0xbc03c34d,0xbbf4c1b1,0xbc25622d,0xb92c6778,0xbac14b15,0xbbf1ca2d,0xbc80dbf1,0xbc98d34b,0xbc8b8c0b,0xbb9a6de9,0xbb0087ff,0xbb822e1d,0xbc3e56bc,0xbc5fc515,0x3bb5c944,0x3cad90bd,0x3b506b71,0x3aa9d794,0x3b348af7,0x3b9642da,0x3c8e59ce,0x3a444ec0, +0x3aaa7466,0x3b386963,0x3bd5557b,0x3c103363,0x3b7dbf72,0x3c074b93,0x3c2f34e4,0x3c59f50d,0x3b8b2075,0xbbb20912,0xbbbd7fc4,0xbba33c6b,0xbc039590,0x3b9be44d,0xbc0eff4a,0xbc09e132,0xbc591ffc,0x3bcc3204,0x3bedd863,0xbbcf664a,0xbcc1d707,0xbcff4945,0xbd02ae2b,0xbc5b2a72,0xbbc8dcf0, +0x3bdd1bb7,0xbb2f2fe4,0xbd16585a,0xbce96384,0xbb0d6bd5,0xbc677c30,0xbbc9af09,0xba347bae,0x3bd1b4af,0x3ca208a7,0x3bdf84df,0x3bab9c0c,0x3bf59f84,0x3c8c784f,0x3c804a31,0x3b0a8801,0x3c57dc25,0x3c90cff1,0x3c6ccaea,0x3bd519dd,0xbc54eee4,0xbb96673a,0xbbe3f436,0xbc8367ae,0x3b2f9ba3, +0xbc342b9d,0xbc05a448,0xbc4c9836,0x3bb56903,0x3bd29024,0xbc04704f,0xbcdce8ae,0xbd0a3728,0xbcc432b7,0xbb5877b9,0x3bccb8e6,0xbaaf7186,0xbc8bd098,0xbd1f2e58,0xbd33fb35,0xbd286767,0xbc6dcdc4,0xbca363e3,0xbc9c11ed,0xbc94f650,0xbc046494,0xbb094a20,0x3c8b78a0,0x3c1af5b1,0x3c850a0d, +0x3c87d120,0x3ce3ecb5,0x3c39d5c0,0x3c0a80f8,0x3bb71281,0x3b84fe99,0xbb5a0ee1,0xbc1c5e58,0x3bd27113,0x3c108a3d,0x3c9c7f1d,0xbc263f93,0xbc83d6ed,0x3b3cdf4b,0x3bb14d3f,0xbc4b5485,0xbcb08150,0xbd10880a,0xbd06b158,0xbcb887b7,0xbca3ede7,0xbd1ec18b,0xbd9fd67e,0xbd67acf5,0xbdb3d1c2, +0xbced826c,0xbcd3da0b,0xbca7264c,0xbcd44a76,0x3c260780,0x3c26c687,0x3c37d332,0x3ba7daf2,0x3976f4c7,0x3bcdca18,0x3b30f4a4,0x3b9ffe17,0xba979e96,0x3c98fa80,0x3cae0d10,0x3c2346c7,0xbb4242f8,0xbc12da8d,0xbbf90a72,0xbbe6b130,0xbc54212b,0xbcd8c1da,0xbca0b3f0,0xbca71cae,0xbd11aadd, +0xbd0559f7,0xbcb3e22c,0x3bd2d54d,0xbd0a9956,0xbd1e0d17,0xbae8fc5c,0xbb4723ce,0xbc83801c,0xbd495a34,0xbda04b65,0x3d08104e,0x3d13af1e,0x3d1668dc,0x3cef33a0,0x3d27986c,0x3d24641d,0x3d08fb4e,0xbc09f9e9,0x3c4586c8,0x3b1fc75c,0x3b6fc00a,0x39f23752,0x3bfb9298,0xbbbb958a,0x3cd39058, +0x3ce1e153,0x3bedc588,0xbae740f0,0xbc5c29d9,0xbc081d64,0xbc6b815e,0xbc8bb30e,0xbc809efc,0xbcdbc100,0xbce72730,0xbcbb3f15,0xbca21a18,0xbcc91afe,0xbc161c30,0xbd621fd9,0xbd4fdbf7,0xbd25b537,0x3bb31551,0x3cce62dd,0x3cd1ee44,0x3d1066c5,0x3d94dfb5,0x3d5d41df,0x3d400901,0x3d334048, +0x3d53c931,0x3d27c216,0x3d15b986,0x3be80155,0x3c95713f,0x3c15d730,0x3b8471a4,0x3bfa5197,0x3c13d29d,0xbb4c1228,0x3c9bc0a7,0x3cbab103,0x3c20eefb,0xbb54b70c,0xbc30d048,0xbc459a32,0xbc852c8e,0xbccb8d5b,0xbce60244,0xbd63fe86,0xbd71dda6,0xbd39d88b,0xbd1053cb,0xbc956237,0x3c76a440, +0xbc8b2757,0xbc529c96,0xbc94d67e,0x3d3276c0,0x3d8180b6,0x3d1c8bce,0x3d965bdf,0xbcc6b33a,0xbc92e0c2,0xbc285f9f,0x3b2f6139,0x3b8c93ae,0x3ccdf648,0x3ced5072,0x3d080fb1,0x3c8b0792,0x3c27bf90,0x3b63eb4e,0x3c2461b3,0x3bd1d254,0xbc141f6a,0x3bc3227c,0x3c0d4308,0x3bdc0158,0x3a8fac02, +0xbbd17f9a,0xbc86d09f,0xbca175f3,0xbcfca80e,0xbd2a4d51,0xbd2a7e83,0xbd1f2139,0xbd10a76d,0xbd0b6259,0xbcf6b6de,0x3b1d18de,0xbc423718,0x3c988006,0x3d0b808c,0x3d97107f,0x3d9994c9,0x3cd0c170,0xbad64e46,0x3c9d5d5f,0x3c81e451,0x3cba413e,0x3c93be03,0x3cd95dfa,0x3cbb5bc1,0x3c8eab41, +0x3c0c81c3,0x3c1a4a6d,0x3c766041,0x3c8339b0,0x3c62d602,0x3c7978a1,0x3c612590,0x3d0711ea,0x3cf1d9fa,0x3c722091,0x3bbd6d8b,0x3be7eca4,0x3c82d788,0x3c402546,0x3c83f136,0x3cadeae6,0x3cc5f01a,0x3c9eccd4,0x3c1a9bc4,0x3cf641b9,0x3d1bb73b,0x3d8a2acf,0x3d037523,0x3c5e701f,0x3aae3fe9, +0x3add363a,0x3bb02063,0x3c190fab,0x3c22a2a3,0xbb35c3d2,0x3ae0f35f,0x3b938cb7,0x3c06eb34,0x3c181312,0x3c906efc,0x3cc0ce98,0x3c97ad62,0x3ce254a6,0x3cb75182,0x3c65177c,0x3c8f39e5,0x3c977599,0x3c518e87,0x3c112921,0x3bf5239d,0x3c671a8b,0x3c316913,0x3b36febd,0x3bd2a2a6,0x3c3f9e18, +0x3c239baf,0x3c069762,0xbc781cda,0xbc23e62d,0x3abfa752,0x3bf63c1d,0x3bc7bc3e,0x3be3b75e,0xbcab9035,0xbc9d2015,0x3c05c043,0x3bf5eb5f,0x3c838b8c,0x3cf0b602,0x3aa7868b,0x3c1a24cb,0x3c695911,0x3c405acb,0x3c0d66fa,0x3bf8a7e5,0x3c16f7e0,0x3c30ebac,0x3c31f888,0x3c72d44b,0x3c8a7178, +0x3c685f4a,0x3c872421,0x3c7e6195,0x3c8994ae,0x3c639b33,0x3c698bc9,0x3c68c960,0x3c8a8614,0x3c9f677f,0x3cbc3fd4,0x3cd14cbf,0x3cdba96a,0x3cf4db9b,0x3c980aa3,0x3c45a88e,0x3c402de0,0x3c20f061,0x3b8f6035,0xbbb7f55c,0xbc571db1,0xbc60df4c,0xbb637607,0xba228ba0,0x3be6c5be,0x3ca372da, +0x3c7239e9,0x3c14e2d2,0x3c04cdfb,0x3c1c6dd0,0x3c097ca9,0x3b9a0a7a,0x3bd7e068,0x3c114704,0x3c57b8d9,0x3c4f95f7,0x3c52deac,0x3c8b3db5,0x3c866580,0x3c83ed80,0x3c89738c,0x3c884a06,0x3c772e12,0x3c54fe40,0x3c569e05,0x3c9f8be8,0x3c6d8005,0x3c3bcdab,0x3c31b306,0x3c3233a4,0x3c41bde6, +0x3c378935,0x3ba712e2,0xba6ca03b,0xbbec181b,0xbc3f42e0,0xbb6f9bc0,0xb8e14708,0xbb4e9165,0x3b8618c2,0x3bf79a1a,0x3c084758,0x3c13a6ad,0x3bc80f71,0x3c240f21,0x3b2a1250,0x3c3b5027,0x3c77fcc2,0x3c8cf6a5,0x3cb37610,0x3c9d7f6f,0x3cb8ffd3,0x3c9725ab,0x3c85d3ce,0x3c880f39,0x3c8daa35, +0x3c8bef22,0x3c50b71f,0x3c0b72ba,0x3c0b02fa,0x3ad78b91,0x397c8cd6,0xbc1d8aa4,0xbc39aabc,0xbc407985,0xbc7707e3,0xbc94bba0,0xbc9dec68,0xbc94cb6e,0xbc5a2f77,0xbc0f3dd2,0xbbb08dde,0xbc0577d4,0xbc01ecea,0xbb87e9da,0xbb5f3be5,0xbb462999,0x3aae501d,0x3b5824fb,0x3bf45c66,0x3c0aaba4, +0x3bc4324b,0x3b887bab,0x3b45cccb,0x3bdd3edc,0x3bb68070,0x3b82e9b0,0x3b498654,0x3ba2b5b7,0x3bce6c73,0x3bcc3257,0x3bbfa3db,0x3bd96a3b,0x3bfef575,0x3bfd7068,0x3bdda979,0x3bc3b2f0,0x3bb8f239,0x3bdc6953,0x3be8d02f,0x3bd1eddc,0x3bdb1ec6,0x3be5ea08,0x3bc8ed8d,0x3b881714,0x3b6ea939, +0x3b54db5b,0x3b5edca4,0x3bb0f29a,0x3bd1c3d3,0x3bd6f05e,0x3beb51b5,0x3bf04495,0x3becf3c6,0x3bf89143,0x3c4ee4b1,0xba042361,0xbb056160,0xbb41abe0,0xbb6c32b0,0xbb765666,0xbb879d3f,0xba4c49f4,0xba9986bd,0xbadbfe31,0xbb39ba3b,0xbb4d0213,0xbb3cc9a8,0xbb35ea82,0xbb4b0b27,0xbb030d80, +0xb9682a60,0x3a254395,0xbaad6489,0xb8a59973,0x3a567d7f,0x3afcc3ee,0x3a01f0ae,0x39df01b5,0x3a4e5ed0,0xb94edc42,0xb9e3b705,0x36083483,0xb9e976bf,0xba8561cd,0xbaa189f8,0xbb3663f5,0xbb2461c9,0xba3a5943,0xba4b3a6d,0xba5b7c86,0xb9e9c18b,0xbab573d7,0xbbca7c8d,0xbbe30fda,0xbbda9a53, +0xbbb72224,0xbbd30e9f,0xbb1bb922,0x39b64afb,0x3b5e80bd,0x3a84a03b,0xba5f4e46,0xbab71a80,0xba2ba7b1,0x3a920b5c,0x3b25430c,0x3a20d629,0x3b52b859,0x3b7e3552,0x3b802ed3,0x3ae07cfa,0x3b96c127,0x3add77da,0x3a2424c3,0x3ae88ebd,0xba852a9b,0xbaeae4d6,0xbacc7d80,0xbaea73ce,0xbb24fa5f, +0xbaa8a157,0xbbccc6ab,0xbb8efa04,0x3b66a335,0x3b2165fa,0x3b14f3f7,0x3b235095,0xbb7caf3a,0xbc6adea0,0xbc94ea1e,0xbc8d5157,0xbc78a739,0xbc3e3e3e,0xbb5947c4,0x3a4cc833,0x3be415cd,0x39520083,0xb9c3a980,0xba24b7bd,0x3a1e3b08,0x3ab2ebfe,0x3c04d2dd,0x3bbb6337,0x3bf90b73,0x3c28e50c, +0x3c0ab58b,0x3bffe0ff,0x3c0824a6,0x3ba91963,0x3b1f5285,0x3ba5e447,0xbadd9f58,0xbb2fa7e0,0xbaff454e,0xbb8db820,0xbbfa689b,0xbc0013a3,0xbc868966,0xbc53e55c,0x3b1ee7c7,0x3ab2fdec,0xba236895,0xbb459599,0xbc32cfc2,0xbcb113bb,0xbcc62297,0xbcceb42b,0xbcaa0b17,0xbc9a91b5,0xbbd017f5, +0x3b231783,0x3c78ebc2,0x3b8b6a29,0x3ac64d60,0x3af12e24,0x3b9308c8,0x3c03c1e6,0x3c6c473f,0x3c02c1c0,0x3c3a9583,0x3c8617c8,0x3c5f4971,0x3c23d082,0x3c405bf5,0x3c01755e,0x3b49f05c,0x3bc34324,0xbb8086a0,0xbbf79fd2,0xbbd90f8f,0xbc176649,0xbc3ef287,0xbc001907,0xbc9d2d61,0xbc453b91, +0x3c4dc9ce,0x3c269308,0x3bb01c35,0x3b385196,0xbc996714,0xbcf77dee,0xbd1bfb2d,0xbd30de27,0xbd2a0e73,0xbcdd2157,0xbc18c885,0x3aea3f5f,0x3c6b1679,0x3b4218d4,0x3b8eba31,0x3b8cf3f9,0x3c61b60f,0x3c523816,0x3c3d31c1,0x3c52b82a,0x3c7d1600,0x3ca6012a,0x3c8f8ca9,0x3c25363a,0x3c9995df, +0x3c3319ec,0x3bd0315d,0x3c0ff4ac,0xbb54fc5c,0xbbc2e774,0xbbc2ea99,0xbc516262,0xbc8d6ec9,0xbcafbfef,0xbd0f6392,0xbce3d160,0x3ba03f7e,0x3b7f1924,0xba30a529,0xbc7a8e54,0xbcd6d594,0xbcd7c8de,0xba05e2b2,0xbbc9e6d3,0xbb4e8610,0xbc0fd39d,0xbca30733,0xbc5bac69,0x3b90f30a,0x39f8a6ca, +0x3bd36494,0x3b9e5328,0x3c31d687,0x3c781bbb,0x3ce91446,0x3c2f9d43,0x3c3be0d7,0x3ca987c0,0x3c3a9c75,0x3bb6e386,0xbbf6ffa1,0xbb652c15,0xbbb4a195,0x3ba9fa42,0xbcb01c30,0xbcffc87a,0xbd0f2d7c,0xbcf3a902,0xbca7c3bf,0xbd34d6b2,0xbc2aa20a,0xbb0ce0c1,0xbc090f66,0xbc8e183c,0xbcc066d8, +0xbcb2a9aa,0xbcf2a0cc,0xbd7256b6,0xbd6ae9c3,0xbd717449,0xbce09087,0xbc9a8a30,0x3c782189,0x3c67a293,0xbbbad7dc,0xbbb475ab,0xbbeaa233,0x3bdaa4c3,0xbb0e70b1,0x39d1c365,0xba8acdf0,0x3cc926bf,0x3cd8db4c,0x3c7b82e0,0x3c2e60c7,0x3b38ffb2,0xbad28140,0xbb63269e,0xbc1aece4,0xbc094390, +0x3acf2ef5,0x3b3cdb06,0xbae86cfd,0x3c042244,0xbc02e12e,0xbd14fa5f,0xbd4d7631,0xbd100b8d,0x3c9a4087,0x3cd7df11,0x3cd23d46,0xbcf14f0a,0xbd3c4f62,0x3d29448a,0x3d7006e8,0x3d3758d6,0x3cceff61,0x3d3a2cec,0x3d0360ec,0x3cbc08c1,0xbc5a07dc,0x3bc7f4ef,0xbb155bcb,0xb6e58641,0xbb454622, +0x3ac52d97,0xbc0bb4d0,0x3c6037b1,0x3c9c3285,0x3c81e600,0x3aaba360,0xbc018d6b,0xbbb251c0,0x3a2707c5,0x397acc85,0xbc1bf11c,0xbcafc56b,0xbcb2635b,0xbd01fbb1,0xbbe9a73e,0xbc72b145,0xbc9c7dd1,0xbd7e6b10,0xbd8848ae,0xbc64dc2e,0xbd659302,0xbd380b15,0x3c021ef4,0x3ca88c19,0x3d5be2bb, +0x3da5fcd4,0x3d7b7730,0x3d75d95a,0x3d6b67a1,0x3d10befa,0x3cd8cb49,0x3c1b7051,0x3c10691e,0x3b0dea1d,0x3b1faa67,0x3b7f7066,0x3b0e69d9,0x3b2e7820,0x3bc728e6,0x3c3baca4,0x3ceef029,0x3b078d6b,0xbbc7df67,0xbc4be206,0xbbcb2bbc,0xbc9c99da,0xbce5bc37,0xbd0cb379,0xbcdba3b8,0xbce02f8b, +0x39d9c5a1,0xbc2d1cf0,0xbc9698c9,0xbd629c86,0xbd558486,0x3c423c11,0xbbfe4022,0xbbeb0901,0x3d03d723,0x3d29d1e7,0xbc77cfe5,0xbc20f67f,0xbc15d7d8,0x3c5b31d7,0x3c80b21f,0x3d08d064,0x3d01498a,0x3d02a1b1,0x3c0e7346,0x3ba16626,0x3c342369,0x3b8b7383,0x3b55f03e,0x3c24d793,0x3c44c859, +0x3c30f7f4,0x3cb083ea,0x3b973bcc,0xbb87ca55,0xbba249d8,0xbc614899,0xbcc0a817,0xbcb32164,0xbc8d1837,0xbc823a02,0xbcf85472,0xbcedd0fd,0xbd3a7ecc,0xbd133bd9,0xbd6a4229,0xbcdeb40f,0x3d20cc87,0x3d81645d,0x3daa1fa9,0x3d459476,0x3c1bff2e,0x3cafd385,0x3cbb37ac,0x3cd34f4a,0x3cb72294, +0x3cc52cfd,0x3c95e139,0x3c4a1856,0x3c1aa1e8,0x3c400195,0x3c8f88b0,0x3cfdaf8b,0x3ca0acc2,0x3c65bbbe,0x3c24553a,0x3ccda3f4,0x3cd332f3,0x3c811985,0x3c378b6d,0x3bf75aa9,0x3bf851f6,0x3ba1eb2f,0x3b9a62d7,0x3b7593a5,0xbc04f290,0xbc0f1cf5,0xbac6b297,0x3cb3e4d0,0x3d06b489,0x3d39bff6, +0x3cb83b4a,0x3c6016d1,0x3d0e6a4a,0x3b98d627,0xbb8c75cd,0xbc96ebce,0x3acc633d,0xbbb540bd,0xbbf49e28,0xba7707a0,0x3c0c217b,0x3c90d057,0x3cb61430,0x3ccd629a,0x3c97d9e9,0x3caa7f15,0x3ca9e268,0x3ca02dfc,0x3c794962,0x3c4d366a,0x3b92c871,0x3bf1b05f,0x3c3d9508,0x3caf1254,0x3c9d5d8d, +0x3c933938,0x3c6ebefa,0x3c3b0da2,0x3c3f776a,0x3c57d088,0x3cf7075f,0x3d211427,0x3d175e7f,0x3ce0ff88,0x3c3c0954,0xbbe1e591,0xbc5cd6ea,0xbc2c6dfd,0x3c031a4d,0x3c95c4be,0x3c9111d5,0xbb473dde,0xbb234a96,0x3bbabd77,0xb9f01046,0x3bab9873,0x3bcb7104,0x3c3a4d2a,0x3c3d79d0,0x3c431d5f, +0x3c417d93,0x3c574052,0x3c48a1a4,0x3c41ca5d,0x3c56647f,0x3c7d613d,0x3c92f6aa,0x3c5d8abd,0x3c51a4af,0x3c147f83,0x3c522725,0x3c7fe7ad,0x3c8cffd7,0x3c85ae75,0x3c8f7ea2,0x3c5b05c4,0x3cb863cf,0x3cbfb7e3,0x3cbc62eb,0x3c7f6692,0x3c0db9e6,0x3a31e5af,0x3a84a976,0x3b6af346,0x3c27619a, +0x3c04af2d,0x3bdc8feb,0x3c20637b,0x3c1018d9,0x3c1b3032,0x3b645ed1,0x3be147e7,0x3c1ad73b,0x3c1c62af,0x3c26c19a,0x3c58e2a3,0x3c7ab8b1,0x3c558d9e,0x3c36b04b,0x3c27ee6f,0x3c604aaf,0x3c90980b,0x3cb57d84,0x3c80255c,0x3c26c17e,0x3ae5e621,0x3bc0c898,0x3bfba607,0x3c1f7019,0x3c0fdeb8, +0x3c0aaf88,0x3c102b86,0x3b6ca688,0x3b1f426a,0x3ba33280,0xba163624,0xbb5be95b,0xbbd3c9ce,0x3af7c1dd,0x3bf9a2fc,0x3c48b423,0x3c74e3f5,0x3c9c4e00,0x3cb7080f,0x3c5a858c,0x3ca7bac1,0x3cc97a0c,0x3ca6830d,0x3cb40f56,0x3cb98171,0x3cc6b117,0x3cb60af0,0x3cbdecb3,0x3cb2aae2,0x3cb7db72, +0x3cae7709,0x3c9eabad,0x3c77e7d0,0x3c6104da,0x3c3c8104,0x3c379089,0x3c290674,0x3bd21423,0xbb23789d,0xba90b2bd,0xb9e0a99e,0xba4a71a6,0xba8983d0,0x3a6765b6,0x3a6b73bd,0xba9e0028,0x3b7c9b9c,0x3bfa2573,0x3c1a86d0,0x3c0b36ce,0x3bd24559,0x3be1968c,0x3c0df4ba,0x3bb9d8e8,0x3c162539, +0x3c834dc3,0x3c291b84,0x3c345aa6,0x3c336747,0x3c276254,0x3c0e7dd5,0x3c27845e,0x3c2d70df,0x3c3aa3ef,0x3c37fdf5,0x3c2eb206,0x3c2d6064,0x3c35319d,0x3c495d98,0x3c5008d8,0x3c36a08c,0x3c269463,0x3bf7cf20,0x3c0d4039,0x3c22fa6d,0x3c212889,0x3c18efd6,0x3c1f0eca,0x3c1da900,0x3c135978, +0x3c1308c6,0x3c165026,0x3c0ea1d0,0x3c02c732,0x3c090a28,0x3c1ad645,0x3c2b7b4d,0x3c386a01,0x3c488294,0x3c4b0235,0x3c55072f,0x3c42b913,0x3c8b53ab,0x3a948038,0xbb190cbe,0xb9db0501,0x398278f2,0xba482bf2,0xbada84b8,0x3a86384c,0x3abef451,0x3abbb3cd,0x39edf519,0x39404dce,0xb8f6f89b, +0x391a25c4,0x3a19a763,0x3afdb35e,0x3b08cc9c,0x3b1a548a,0x3af48fbf,0x3b234a5a,0x3b1fd8d8,0x3afba001,0x3accd556,0x3aa71f44,0x3aa63a4b,0x3a6c4e9f,0x39d9acfc,0xb8ff88ba,0x38de1372,0x392a5e7d,0x3a869397,0x399e7f8b,0x3a357579,0x3b68358b,0x3b308998,0x3b264e88,0x3a0ea126,0xbaa581da, +0xbbb1ab3d,0xba653398,0xbbf0d052,0xbb1eed71,0xbb86427d,0x3aa9fbe2,0x3b659b0f,0x3b9e31b0,0x3b298ce1,0x3a78bfe7,0xb9c5ab33,0x395ba781,0x3ad27d02,0x3bb7f705,0x3b86a6a7,0x3bb272a5,0x3bc75392,0x3bcde5ca,0x3bd8c01c,0x3bb50287,0x3b4fe8b6,0x3b27d4e4,0x3b4bd42e,0x3afa30b8,0x3a993bbd, +0x36822f33,0xbac71e81,0xba9da0fe,0x3b292194,0xbba832d7,0xbbcfe71f,0x3b41bc4e,0xb956a347,0xbb43e66b,0xbbf72f44,0xbbf34291,0xbc6d1f3f,0xbbfc3206,0xbc1c5562,0xbbae33aa,0xbc2fdaef,0x3af886f3,0x3bb541f7,0x3c09ac9c,0x3b5720fb,0x399d8a3c,0xb921e4d0,0xba55cac6,0x3b1f468c,0x3c323c45, +0x3c10cace,0x3c231da6,0x3c387395,0x3c3c06e8,0x3c3e6bec,0x3c0ceb64,0x3ba01c8e,0x3b785b4e,0x3b72a3a5,0x3b0639d5,0x39091c23,0xbafe9554,0xbb1ddf09,0xbb80a140,0x3b87dad4,0xbbce8aad,0xbb1dd79c,0x3c570ad4,0x3bc4783e,0x3bb520e5,0xbbe12c01,0xbc671513,0xbc7a2e9b,0xbb076847,0xbc8fcc08, +0xbc13e8df,0xbc5852d0,0x38ada356,0x3bd4989a,0x3c7ead0e,0x3bb32316,0x3aa44ebf,0xb9db39f0,0x3aa76dd1,0x3bd932d5,0x3c905bb3,0x3c3d227f,0x3c67421d,0x3c856652,0x3c91ceb4,0x3c8b7f0a,0x3c50481e,0x3bcb7f74,0x3ba1731f,0x3ba8bba8,0x3b76707c,0x3b2fa797,0x39acf575,0xbbc5849d,0xbbec264e, +0x3c1fe9a6,0xbc867de1,0xbc57a2b3,0x3c12a0f6,0xbb597ffe,0xbc18ce0b,0xbcc18d5c,0xbcb4fb67,0xbd015d44,0xbc0daac5,0xbca235b8,0xbc4708ba,0xbca45da4,0x3ab5d1a2,0x3c10df51,0x3c933729,0x3b982a33,0x3b609747,0x3ad04191,0x3c204811,0x3c476b32,0x3c9f38c0,0x3c82a340,0x3c8c4e96,0x3ca1e0ed, +0x3c9d02d8,0x3cb9a9a8,0x3c420f9c,0x3be5f800,0x3bc202f5,0x3b9877d3,0x3b2bf8d8,0xba5bf896,0xba4f300e,0xbbb2894d,0xbbd3615f,0x3c02ca64,0xbc478575,0xbb8ff26e,0x3cec9275,0x3c63b495,0x3c83d26e,0xbc225b7b,0xbcea256d,0xbcc93b95,0xbc507937,0x3ca4b63f,0x3c88e98c,0xbbc3b150,0xbc10fd1f, +0xbc054fb4,0x3b898c49,0x3b534ef0,0x3bdd2e89,0x3b41b70f,0x3b8ddf97,0x3c141129,0x3ccfa799,0x3be49d20,0x3bf68c98,0x3c9c3327,0x3bce2aa7,0xbabbc40a,0xbbaa2d4a,0xbc8a04e7,0xbc920a7f,0xbcd47365,0xbb34f6b7,0x3ad4b9d6,0xbd08bf37,0xbd0dea9e,0xbd140293,0xbd2b49fa,0x3bf4f491,0x3c5b0bda, +0xbbed296f,0xbcb0f0a9,0xbd0ed327,0xbd514f2e,0xbd2c110a,0xbd6ee4bd,0xbd62b3e1,0xbd5b81aa,0xbcf446b7,0xbb9a97ac,0x3c52408f,0x3c7762c9,0xbbc48b45,0x3a71e127,0xba978459,0x3b938258,0x3b217bbc,0x3b3491e9,0x3b915289,0x3cceee61,0x3cbe74af,0x3c2ce9cd,0x3c4f45bc,0x3c06fec4,0x3b207dc1, +0x3afe31fe,0x3bb0b48d,0x3c52c2d1,0x3a2a932c,0x3bbd568e,0x3c2dd875,0x3bad8eda,0xbc70e183,0xbd70ab28,0xbd276cf7,0xbcfbda07,0x3c7e47cf,0x3c34124d,0x3c3518c3,0xbc9ecd1a,0xbd050451,0x3cd3df4c,0x3d0497e3,0x3d54d468,0x3cf7a073,0x3d66634f,0x3cb171ef,0x3c3500f7,0xbc395255,0x3b167cd9, +0xbb2f7d19,0x3aa0e6b0,0xba40ee5c,0xbb862bd5,0xbad5acd6,0x39b1365c,0x3bf7bed4,0x3d0698e2,0x3c1dd180,0x3b21739c,0xbb7eda8b,0xb9858bd5,0xbbad1a30,0xbc475c87,0xbc639b05,0xbc629cae,0xbd083a45,0xbc97e9e5,0xbcbf4570,0xbd90f140,0xbd53eeee,0xbd5d3ad4,0x3c0ba258,0xbd6fbe4a,0xbd7b3346, +0xbd07da83,0x3bbb152d,0x3d37e541,0x3d5a5739,0x3d89a34d,0x3d60bb3a,0x3d840a6b,0x3cf2fc2f,0x3c96217b,0x3c1b2690,0x39fd5571,0xbb2dcf00,0x3a935797,0x3b16d8d0,0xbab3dd69,0x3b8df03a,0xbbc5dec6,0xb916e8ce,0x3d2b234d,0x3bfa01df,0xbb035d8b,0xbbedafc3,0xbc2e2b58,0xbc612bfd,0xbc43cbb3, +0xbbeaa2c9,0xbb8494c7,0xbcbc4089,0xbba4f984,0xbcbb6a64,0xbd811d41,0xbd9ab471,0xbd9a44a4,0x3bf34052,0xbd32fe80,0xbd0e42f3,0x3a916442,0x3cafe126,0x3cd7d4d6,0x3cab098a,0x3be9e420,0x3cb486ae,0x3ceb0315,0x3d149280,0x3d04f7ce,0x3cbcfb40,0x3b3169ad,0xba2b5a47,0x3be0d4bb,0x3b1343e4, +0x3bb58744,0x3c3a35f5,0x3c22e969,0x3c4f7373,0x3d02ef6d,0x3b6967a1,0xbb61dc16,0xbbf94eed,0xbc7a94a6,0xbcaa43cf,0xbc8b5e7f,0xbcd248cb,0xbcb4151a,0xbc94c82d,0x398a2dee,0xbc209eb5,0xbd11e0e1,0xbd5a2a0b,0xbd198048,0x3d30d140,0x3d40d2f5,0x3d8fc950,0x3d9e2241,0x3d474bd1,0x3c91b1c6, +0x3cc090ab,0x3cc255bb,0x3ca36ef9,0x3cc953f7,0x3c860823,0x3c41b7b2,0x3c605593,0x3cace435,0x3cd1ca4b,0x3ce91a94,0x3c9ef0ec,0x3c36b6e6,0x3c38f421,0x3c7537bc,0x3c5eea80,0x3c865e1b,0x3c11c95a,0x3b8fe1de,0xb9bbdc8f,0xbc39611b,0xbc651c8c,0xbcc01056,0xbd0c5779,0xbce7f598,0xbcb0a20d, +0xbb9b2419,0x3bbda379,0x3be6d55c,0x3d0b05db,0x3d158e00,0x3d8c8944,0x3cee6284,0x3ba67852,0xbc13a81f,0x3c01a883,0xbbc97e89,0xb988892f,0xb8fc4a89,0x3c088681,0x3c9b6efd,0x3cad47ac,0x3cba2e83,0x3ca61a47,0x3c5da207,0x3c5006ff,0x3c9fa22c,0x3c3aef0e,0x3c03f2be,0x3c074354,0x3c828ec5, +0x3ca1e673,0x3c841116,0x3c85a535,0x3c8ab6f1,0x3c1f1256,0x3c03af2e,0x3c3e28e8,0x3cc6bb9f,0x3d183a5e,0x3d29e390,0x3d368db3,0x3d0cb015,0x3cb0b12d,0xb9d7322d,0x3c6b8a33,0x3c978b23,0x3c77d3e0,0x3cadf2e6,0x3ca48baf,0x3b008318,0xbaeb7c88,0x3b834d2b,0x3b7d1773,0x3be77de9,0x3c2cef5e, +0x3c4ee08b,0x3c5928eb,0x3c685006,0x3c885834,0x3c5345a0,0x3c4128d9,0x3c5da8ae,0x3c339520,0x3c632c39,0x3c8091c4,0x3c6182b6,0x3c28af3f,0x3b31ca35,0x3bbd50c1,0x3bfe2cc4,0x3c04b9e9,0x3b9a1e55,0x3c1b5a53,0x3c2e20f2,0x3c9fd7ed,0x3c9a3f01,0x3c9899a7,0x3c7c63b1,0x3c61fe75,0x3c1e9176, +0x3c876e41,0x3c96afc5,0x3c87aa64,0x3c5b7b34,0x3bd3ef9a,0x3b4f8bf2,0x3adf2858,0x3c5ce34b,0x3c350419,0x3c2729fe,0x3c3c206b,0x3c3f848b,0x3c56de73,0x3c662073,0x3c760bb7,0x3c57dd39,0x3c3d7989,0x3beb75c2,0x3c540466,0x3c838045,0x3c8f4f7d,0x3c333a1c,0x3b9cd2fd,0x39ad3588,0x39c9a1d1, +0x3ac750bb,0xbb32c069,0xbb93893f,0x3a42aede,0x3abfd18b,0xbb78c3cf,0xbbe43e38,0xbbcf0422,0xbab8d2e4,0x3b486a38,0x3c1b7474,0x3c20d9b2,0x3c45a5f4,0x3c8ce828,0x3c7ed3e9,0x3c87ece4,0x3c858731,0x3c6d8f11,0x3c567176,0x3c75eb90,0x3c9cb974,0x3c84a41a,0x3c7989df,0x3c82fd57,0x3c5154b5, +0x3c6f9fab,0x3c54545b,0x3c817fd4,0x3c8ab0a7,0x3c705082,0x3c42f6ee,0x3c4e05aa,0x3c5820f0,0x3c624229,0x3c682b92,0x3c4b8d7f,0x3c2a43ff,0x3c28d45c,0x3c49ae11,0x3c29e98d,0x3c3aae9b,0x3c751bcd,0x3c926689,0x3c9f6b2b,0x3c83404c,0x3c607071,0x3c2ad69a,0x3c328ed8,0x3c209aad,0x3c0574f1, +0x3c1a6a05,0x3bf3a07e,0x3c15efdb,0x3c42852b,0x3c26c904,0x3c1edf59,0x3c1fe81a,0x3c232c10,0x3c2cb620,0x3c06bd16,0x3c12db8a,0x3c35f9b0,0x3c39d0b3,0x3c245a1b,0x3c1a35e3,0x3c253b13,0x3c33e07b,0x3c2d41bb,0x3c0dac03,0x3bfbf279,0x3bef631e,0x3be32051,0x3bde1c7f,0x3bd70443,0x3bd645bc, +0x3beb311e,0x3be664cb,0x3bbc9201,0x3ba3a18a,0x3bad0612,0x3bb98c69,0x3beed53d,0x3c096565,0x3c0e5c7c,0x3c103ad6,0x3c1bc60e,0x3c282627,0x3c254a89,0x3c3249cb,0x3c30b6d0,0x3c6ed4c5,0xb9730bbb,0xbb0a7f4b,0xba57579e,0xbb184031,0xbaecfcaa,0xbadf8356,0xb9900e07,0x3a22ee17,0x3aea2172, +0x3a890984,0x3a0471d6,0xb9905ae8,0x39038db1,0x3a69700f,0x3af6f089,0x3a90feb0,0x3a943a13,0x3b02ecab,0x3ad73e90,0x3a8d3806,0x39e407dc,0xb902b428,0xba105107,0xba19ec1d,0xb9dbb8aa,0xba395e1c,0xbacf969c,0xbaa9f4c3,0xbabdb952,0xba87ef13,0xbaa7b4b3,0xba25523d,0x3a49dd72,0xb9ea8595, +0xba0b867f,0xb93169cb,0xbaeff62a,0xbbc82418,0x3b271a95,0x39e2c290,0xb91a2117,0xbb5dfc01,0x3ac9c88c,0x3b3cb9a8,0x3b864b65,0x3ae02278,0x39a057c6,0xba954bbd,0xba8749d4,0xb8387863,0x3b821f5c,0x3b8fa4a5,0x3b9565d4,0x3ba3c650,0x3bb1d6a5,0x3ba7a5ce,0x3b4fa220,0x3a415293,0xb995319b, +0x39d5d04e,0x3860ab39,0xba55a026,0xbb6c2cac,0xbb685323,0xbb10ea9f,0x3a90bd1f,0xba779a6b,0x386a9883,0x3b7f453c,0xba82893d,0xbb689cc0,0xbb2acd5e,0xbc0c22c2,0xbc52c3ea,0xbac4b561,0xbbd624be,0xbba35bda,0xbc1bb312,0x3ae80cb7,0x3bc0352d,0x3be8e36f,0x3b68166b,0x394355a9,0xbb10e9ed, +0xbb221deb,0x3a9169f9,0x3befe254,0x3c02949a,0x3c167572,0x3c1657ca,0x3c2d3bc4,0x3c1061f1,0x3bbe50c4,0x3a80a541,0xba6e4e80,0xba01a09e,0xb972eb1b,0xbae095b4,0xbbeb2ddb,0xbbbc5263,0xbbbda614,0xbb1e2524,0xbb884333,0xb97fa82f,0x3be9e87e,0xbb05fb72,0xbb5ce915,0xba25e65e,0xbc53b9cf, +0xbc9be08c,0x3be44766,0x3b82c917,0x3b4f8b07,0xbc16eb4f,0x3babbcd2,0x3c0dcab0,0x3c55a16e,0x3bb06b66,0x3a8db355,0xbadd837f,0xba238fd6,0x3b65f094,0x3c6ee7ae,0x3c490081,0x3c6ac1cb,0x3c785928,0x3c924c0a,0x3c6acf3f,0x3c34a28c,0x3b78bd98,0x39cc705b,0x3b3f9390,0x3aeae977,0x3a1aea9a, +0xbc14a25c,0xbc048d97,0xbb9d031d,0x3ba4ab25,0xbaa74ffe,0x3b2fefa2,0x3c4e9e3b,0xbb165179,0xbc1c820c,0xbb8d80e7,0xbcc17085,0xbd0a4c8c,0xbc012c75,0xbc1e124b,0xbc2a8b04,0xbc8d272b,0x3c0d2f59,0x3c53b592,0x3c73efa6,0x3beaf797,0x3add9527,0xb63890bf,0x3bb520a7,0x3c175b25,0x3ca1f904, +0x3c74b5de,0x3c8c970f,0x3c9ac607,0x3cac3fe5,0x3c7d11d9,0x3c2defe7,0x3b8956b1,0xba95d775,0x3aae4708,0x399da094,0xbb1d1374,0xbc303221,0xbc18804c,0xbc0a2732,0xbbb543a3,0xbc1150a6,0x39e63a8a,0x3c6edeaa,0xbb845ee2,0xbbc52bac,0x3bcd2dcd,0xbce0f402,0xbcd6309e,0xbd33cc55,0x3c8b41be, +0x3cc91c28,0xbc5dcef0,0xbc0f6f9d,0xbc145d0d,0x3b5f3127,0xbc079352,0xb9dabfdf,0x3bebbfa6,0xb972bd4f,0x3b87894b,0x3cb57c79,0x3c166004,0x3c0f106a,0x3c43b3ba,0x3bc448b4,0x391f2957,0x3b5795ad,0x3a367fec,0xbac52a18,0xbc30cc07,0x3c407939,0x3c23afa6,0x3afcd974,0xbcd0e387,0xbcbad8a2, +0xbc0e7e68,0x3d0e1d7a,0x3ce9c6f1,0xbce8506e,0xbcb2ec6a,0xbd394beb,0xbd996989,0xbd478438,0xbcae1181,0xbd5c8358,0xbd5117fd,0xbcf7badf,0x3a5e96a1,0x3bac07b0,0x3c0e1d87,0xbb871c08,0x3b1e9f50,0x3a782096,0x3b3efc60,0x3afaa9f5,0x3b1427ac,0x3baf32c3,0x3c5de5f4,0x3c545109,0x3c927868, +0x3c306ab7,0x3bfcc6fc,0xbafb37b0,0xbac99133,0xb9a6b8c0,0xb9abece9,0xbc72f03d,0xbc9e5cbf,0xbc9f89a5,0xbd10a557,0xbd27a908,0xbd44d9a2,0xbce17341,0xbad9bcba,0x3cdc60b4,0x3b6f3c4b,0x3c9bb671,0x3d399309,0x3c1c4ef1,0xbc1a3dbf,0xba760b24,0x3d08ca47,0x3cca2498,0x3d0b3abc,0x3bd1102c, +0xbb432c15,0xbbd86035,0xba9634de,0xbad4ca8a,0x3b4a1708,0x3b459b8a,0xbb3fc506,0x3bf82536,0xbaf629cd,0x3b9deeee,0x3d1f330d,0x3c75896d,0x3bc78ff4,0xbb4f0ee2,0xbba6580d,0xbbe7fa73,0xbb9e3076,0xbb192978,0xba44b213,0xba918821,0xbc92b7bb,0xbcc79b84,0xbd1e480f,0xbca02ec9,0xbcc2e768, +0xbc9123bb,0xbd696493,0xbd9f3abe,0xbdbc175e,0xbd2abd23,0x3c6c51d4,0x3ce5a0c4,0x3d6a3b41,0x3d422561,0x3d4f3370,0x3ca3fe5b,0x3c084433,0x3c0bc01b,0x3a59a89e,0x3a80b98a,0x3b180f35,0x3b5629f4,0xbb6c5a69,0x3be9f7cc,0xbc0da00a,0xbb2f83f3,0x3d130d9a,0x3b9e9e9b,0xbb8ff795,0xbbe8192a, +0xbc388e40,0xbc4e4006,0xbc2aba54,0xbbea8133,0xbbb6c509,0xbc4296d4,0xbc9530c0,0xbcb7a768,0xbd5040be,0xbd08ee7e,0xbd309087,0xbd12e504,0xbd372a00,0xbd4ca01d,0xbd71e126,0xbc2d3640,0x3da247da,0x3d429d54,0x3cda2e4f,0x3cfea1f5,0x3d2d48c3,0x3d0cf8ac,0x3cfbfb9d,0x3c9b24dc,0x3bbe814b, +0x3a18a8cf,0x3b2c2269,0x3b236906,0x3b616114,0x3c1d0aec,0x3b9f9930,0x3baf51fe,0x3ccf0c00,0xbb982ec7,0xbc4b71fe,0xbc6406af,0xbc75af80,0xbc844c00,0xbc6598df,0xbc837ab6,0xbc5aa03a,0x3b3872ee,0x3c8aad73,0x3c466664,0xbccb5f16,0xbce99fca,0xbcdf7366,0x3beaf13d,0x3cd83fb4,0x3d750ecb, +0x3db0ccd7,0x3dbf7dc4,0xbb31b95b,0x3bd653b3,0x3c8a9814,0x3c733025,0x3cb0e9e6,0x3c867364,0x3c88bd3a,0x3cdca275,0x3cbdb9a8,0x3cdb0c26,0x3ca7d74d,0x3cbc9cbf,0x3c80bed5,0x3ba2a578,0x3c09b570,0x3c21ef68,0x3c9c555f,0x3bf42a46,0xba7bb096,0xbc0e1288,0xbc7dcd9e,0xbcb04333,0xbd0ad81b, +0xbcaffbc2,0xbc96fd00,0xbc7fafb1,0xbd0e3eaa,0xbcfef17c,0xbd0965fa,0x3cf7faf0,0x3d505ed7,0x3d9c0894,0x3d5d1e84,0x3ccb50ea,0xbb8da1f4,0xb90e8b3d,0x3c7b6b26,0x3c60abc3,0x3c5334cf,0x3c874553,0x3cca77da,0x3cab282c,0x3c9d06f9,0x3c6928ba,0x3c12352c,0x3c0f3313,0x3c12d7d4,0x3c20bfb4, +0x3c2b526b,0x3c8319c6,0x3c9792a6,0x3c887a0d,0x3c248978,0x3c439573,0x3c37453c,0x3c5125a1,0x3c7dd113,0x3c9e60c7,0x3d03ef4c,0x3cede216,0x3cecc95e,0x3d13d34e,0x3cf13941,0x3d03d1df,0x3d15d917,0x3d071c99,0x3d012f14,0x3d0b1122,0x3c8c650c,0x3c965f01,0x3ca40b86,0x3c88a41d,0x3a8006d4, +0x3a58842c,0x3c1770ac,0x3c403003,0x3c4af67f,0x3c511b4c,0x3c56fef2,0x3c6391fb,0x3c4760a5,0x3c37f2e3,0x3c4ddfcf,0x3c34a8eb,0x3c4954fa,0x3c4a203f,0x3c4df7b7,0x3c31bd2a,0x3bff763c,0x3b8d737c,0x3b6dba62,0x3a70615a,0x3bb65fcd,0x3b70548b,0x3b6e375e,0x3c1fb15c,0x3c0c80c7,0x3c305de5, +0x3bde8856,0x3be4ce27,0x3c5f526f,0x3c8e1ceb,0x3c91196b,0x3c854108,0x3bba2c52,0xba113c3d,0xbabbe26c,0xbbd683cd,0x3bc25065,0x3be0451b,0x3c081346,0x3bedd720,0x3c19f10a,0x3c1af95e,0x3c3844f3,0x3c4c4da0,0x3c549381,0x3c5592dc,0x3c55105f,0x3c3cd14e,0x3c38a7a1,0x3c1f2bfd,0x3c08c13d, +0x3bdb332c,0x3c01bd37,0x3b6a8165,0xbbed4479,0xbbdd5446,0xbbb897d3,0xbb9d7c4b,0xbbf4263a,0xbc15a4e9,0xbc1ad1dc,0xbbe46555,0x3a2f086b,0x3b698e71,0x3b9308a7,0x3b9c7a2c,0x3b8694aa,0x3bb2b460,0x3bfc587f,0x3c11a6cd,0x3baa237a,0x3c0b215b,0x3c5cb779,0x3c6d0c78,0x3c6a88f0,0x3c666de5, +0x3c47b96b,0x3c40f012,0x3c215c35,0x3c17af56,0x3c17f6ad,0x3c2f042c,0x3c3fd84d,0x3c54113f,0x3c60e705,0x3c7f9322,0x3c73071f,0x3c605d90,0x3c37bf14,0x3c48eea8,0x3c6c7498,0x3c66b4b2,0x3c722731,0x3c5dd74e,0x3c877ffc,0x3c90b44b,0x3c9ac39c,0x3ca7201f,0x3c642093,0x3c571146,0x3c4c84f4, +0x3c459805,0x3c48e06a,0x3c318d6a,0x3c243a59,0x3c116aed,0x3c3b3f82,0x3c484dab,0x3c4926ba,0x3c4cd46c,0x3c327cde,0x3c1b1f97,0x3c0a1a5b,0x3c36ce24,0x3c272391,0x3c18be11,0x3c209963,0x3c1d0a2d,0x3c1946f4,0x3c195029,0x3c17ea91,0x3c1479db,0x3c1524a3,0x3c2476e4,0x3c00ef91,0x3c0197bf, +0x3c00ebac,0x3c0098f5,0x3c04d2cf,0x3c04e47e,0x3becec15,0x3bd2fe25,0x3bd13a1d,0x3be9b23a,0x3bfca265,0x3c185602,0x3c15e50f,0x3c17e344,0x3c2093c6,0x3c279edd,0x3c40b907,0x3c42c88f,0x3c4927d0,0x3c4bca8a,0x3cadbb33,0xb9af8632,0xba90fa11,0xb9c7ea2f,0xba155e78,0xba1f9b02,0xbac2d31c, +0x3a3e11a9,0x3a75ff72,0x3a752bfd,0x39b268e9,0xb8f57e92,0xba44e9d8,0xb9e5a253,0xb827785f,0x3a09fb18,0x3a683be3,0x3aa8d3d3,0x3aaa3109,0x3abe4260,0x3a86d1c6,0x39f9b5e7,0xb74adb49,0xb9cd4a07,0xba27d1d0,0xba0335ce,0xba318fef,0xba9ed72d,0xba967223,0xba830968,0xb9feaf98,0xb61dafbf, +0x3847229f,0x398c0ca3,0xba9b36a5,0xba7f4a9e,0x39dc65a3,0xba67177d,0xbb93ba97,0x3a481806,0xba19aa6e,0xbaa7ad0f,0xbb6d5d1c,0x3b263798,0x3b6cd3e6,0x3b4b87b3,0x3b092e64,0x3a0f2b87,0xbaa921e1,0xba9138d8,0xb9bde850,0x3b28cebc,0x3b710d73,0x3b8edaa1,0x3b9e42b9,0x3b9eae42,0x3b9ae37b, +0x3b73c3da,0x39b3580b,0xbaa1e18e,0xbae79755,0xbad6bbd1,0xbb122ccc,0xbb7dca10,0xbb666c85,0xbb3c7ef5,0xbb100b72,0xbad67b4e,0xbab6a85f,0xb89f6dae,0xbbc048fb,0xbbffd955,0xbb3a4da3,0xbbd7f659,0xbc00754d,0xbb43cd97,0xbba2456d,0xbb892a87,0xbbef8d62,0x3b74ac32,0x3be7a754,0x3bc9f153, +0x3b562026,0xb8d98d2f,0xbaf3a137,0xbb31044e,0x3841d9cf,0x3b934b82,0x3bdacae7,0x3c0f4f95,0x3c1eaa53,0x3c23285d,0x3c00128e,0x3bd91a0e,0x39ee23d9,0xbae2f6d9,0xbb3d9842,0xbb3d29c4,0xbb7ff9b8,0xbc085ba1,0xbbf0d7bb,0xbbb5f2ae,0xbb8d9384,0x38d724b7,0xb9b3d803,0xbab4f166,0xbc1ea846, +0xbc2d5f7e,0xbaed8a69,0xbbec875e,0xbc5e1f08,0xba97aba7,0xbc078d8b,0xbc03a230,0xbc4387ae,0x3ba0e014,0x3c25015f,0x3c272dfe,0x3be4f4e4,0x3a9b0302,0xbb195a1b,0xbad2ef6d,0x3ae80c22,0x3c430c0f,0x3c3d77a9,0x3c601e57,0x3c8037ce,0x3c8fd829,0x3c76f89f,0x3c54b4b4,0x3ac2a407,0xbb705221, +0xbb89151e,0xbbb2d095,0xbbfd159b,0xbc710303,0xbc2efef6,0xbc074626,0xbbfcb45a,0xbb8ba631,0xbba5d6c6,0xbaf535f7,0xbc9b1d51,0xbccca6c5,0xbc087832,0xbc967e95,0xbc7191c5,0xbc60d740,0xbca655a0,0xbca489e0,0xbcb92e71,0x3bb20fa5,0x3c2e0d3d,0x3c50bd8a,0x3bca51c5,0x3a0cf97b,0xba02af24, +0x3b317aa1,0x3bf290c6,0x3c8c2c10,0x3c4beba1,0x3c810a7f,0x3cbb0f73,0x3cb5b354,0x3c8faec2,0x3c691c7e,0xb98abb7b,0xbb922b9b,0xbbc874c7,0xbbd0be92,0xbc16d725,0xbc9fa636,0xbc7de8dc,0xbc3c2559,0xbc326c7b,0x37be63c6,0xba8e34ce,0xbb9c29c3,0xbca915c3,0xbcaa0adf,0xbb6283e7,0xbc6f212e, +0xbd06d5c3,0xbd2ffaa4,0x3c90cba8,0x3d034f33,0xbbe8391d,0xbb22c57f,0x3a1c3022,0x3c4c84a3,0xbc05c680,0xbc2c2292,0x3bee2f64,0xbb051cd1,0x3b21cfd2,0x3c82947e,0x3c7ac3be,0x3c8504dc,0x3c091655,0x3c181e88,0x3c261536,0x3c5ee566,0x3c4345e4,0x3ba325b8,0x3b437bb8,0xbbbb1ab2,0xbc931f20, +0xbcd0d2ff,0xbce80a55,0xbc58216b,0xbbff8fc5,0x3cd0aa38,0x3cc0cbcb,0xbc96b0f5,0xbcac4ef6,0xbd317f98,0xbd820ea2,0xbd269e79,0x397764ce,0xbd2221d6,0xbd161977,0xbcb8ea75,0x3c6e431e,0xbb5c3cbd,0xbc1eb519,0xbba5a28f,0xbbf1c2b4,0xbba43d91,0xbaa3ee53,0xba789caa,0xb8722953,0x3b3b2a81, +0x3b7c7c28,0x3bd37991,0x3cd476d5,0x3c539424,0x3b7d8014,0xbbaad24b,0xbb6ea9c3,0xbbc1f570,0xbb86e58d,0xba578524,0xbbbef38f,0xbc8a8f50,0xbcd66695,0xbcde2006,0xbc935c2b,0x399bcc00,0xbb8c9a55,0xbcc466ee,0xbc9ceed2,0x3b900058,0x3cd8c2bf,0x3c2b614f,0xbd665c85,0xbd019b32,0x3c27b709, +0x3c42c180,0x3c622136,0xbbaa269b,0xbc1efb87,0xba38e0bd,0xbb66ce92,0xbb361418,0xbac2f29c,0x3b375aa2,0xbb106635,0x3b8ec567,0xbb9e93f7,0x3b3495b3,0x3cf880c2,0x3c525efa,0x3c08c505,0x3b822db7,0x3bc349e8,0x3c05ff36,0x3bfdbf95,0x3c7f0c96,0x3c5f9142,0x3c4d2b71,0xbcbd362f,0xbcfff16e, +0xbd16a1ba,0xbb30df0e,0xbb3a2191,0xbcda2654,0xbd16a62c,0xbd6ef4f0,0xbdbaa054,0xbd8b41f5,0xbc74a0b6,0xb9444e4b,0x3d09e7d7,0x3ce6a47a,0x3cf3b747,0x3c57bfd1,0x3bbe44e7,0x3c157039,0x3b90a9b1,0x3b90c590,0x3a6ecd08,0x3b321100,0xbb85a40a,0x3bf3a791,0xbb99431b,0x3ae0a7f2,0x3cd84696, +0x3c33ffc8,0x3b53138b,0xbb5cb743,0xbac40573,0xbb91f46b,0xbc0695b8,0xbb838ac0,0xbb59631c,0x3c5261ba,0xbcaa3fc9,0xbce9e39e,0xbd22fa6c,0xbc282425,0xbc184f04,0xbd2aabe7,0xbca7f03c,0xbd16b4d7,0xbd7d543c,0xbcb181c2,0x3deb509c,0x3d98c5c3,0x3d4edfca,0x3d3063c2,0x3d4ab7e0,0x3d0b31ea, +0x3ce2652f,0x3c9639e3,0x3c2f47f0,0x3ba0480d,0x3adf2a8a,0x3aa6e4df,0x3ac5df88,0x3c41514c,0x3be557cb,0x3bb9918c,0x3c95dd85,0x39e99d47,0xbbddd8a6,0xbc168268,0xbc3ecd07,0xbc36f840,0xbc345a2f,0x3b596204,0xb9a4bdd5,0x3af47882,0xbcd5def2,0xbcff0164,0xbd07d3ae,0xbc2d2cc3,0xbbf83b95, +0xbceb2e43,0x3b980a28,0x3d2416ed,0x3da2c6ff,0x3dedf8b2,0xbc9e1c39,0xbb5c986a,0x3b7c2643,0x3c247618,0x3c9f1c8a,0x3c8e9b0a,0x3ca6fef8,0x3d01dc0d,0x3cbe3ee2,0x3cc26d00,0x3c83de8e,0x3cd1cfd5,0x3c8a9f12,0x3a73f91a,0x3b866c69,0x3c0b49da,0x3ca92f32,0x3c1a5f14,0x3b2f17f6,0xbbb4a012, +0xbad139bd,0xbbe0c12f,0xbcbfdbf0,0xbc98454f,0xbd049c54,0xbce8a2d3,0xbd6f34bf,0xbd3cca0b,0xbce80340,0x3c4fefac,0x3d1f3bc7,0x3d800af5,0x3d8bb4fa,0x3d534b00,0x3cc59f5a,0xbb977df4,0x3cfb9ff9,0x3ce00d9b,0x3ce4d6bc,0x3ce13193,0x3ce4d06c,0x3c9e65c2,0x3c6fa42d,0x3c5d15ca,0x3bc67dad, +0x3b6b7c6f,0x3997585f,0x3c1503b8,0x3c7784b3,0x3c95aa53,0x3c8b6f19,0x3c55ac73,0x3c3cef98,0x3c27b8a6,0x3c337eef,0x3c6b39a4,0x3c5d9688,0x3c60e2b1,0x3c5a69ac,0x3c68037a,0x3c8549ed,0x3c35f604,0x3c8f7e0b,0x3cebbf7e,0x3d2f0c0a,0x3d2cc04c,0x3d179906,0x3d11ab79,0x3c98f792,0x3c635af2, +0x3c85e690,0x3cfed972,0x3ba87848,0x3b7f1280,0x3c4896cc,0x3c808257,0x3c87f4dc,0x3c83472a,0x3c7ad4ea,0x3c76e54c,0x3c56e9f0,0x3c3a0082,0x3c20c124,0x3c2bbb7e,0x3c308eb9,0x3c2da2de,0x3c472994,0x3c4fcbde,0x3c7bca13,0x3c5067b1,0x3c391e16,0x3c259751,0x3c5fd0ce,0x3c3592b4,0x3c1bc6b4, +0x3c22c990,0x3c1abdb0,0x3bf6f7fd,0x3c399ec5,0x3c62ff73,0x3cb7b557,0x3cacc6f6,0x3c9526be,0x3c96689c,0x3c0ad5a2,0xb9589efd,0xbb7d2fdd,0xbb80467e,0x3b99033c,0x3bb37e2d,0x3bb9ca92,0x3c1f1b38,0x3c6bafd6,0x3c5c5f94,0x3c708f3f,0x3c7898e0,0x3c772dbd,0x3c60366d,0x3c719686,0x3c1a913a, +0x3bfcc2e9,0x3ba689e6,0x3c0dcce7,0x3c36b3a8,0x3c77bbe3,0x3c5670e2,0x3c0360be,0x3c2ce5ac,0x3c356c13,0x3c0b8f4c,0x3c00512e,0x3bd27da9,0x3bd1aeb6,0x3bd6c73a,0x3bf8106d,0x3bf4bd97,0x3ba107da,0x3ba719ac,0x3b8cf38f,0x3b905848,0x3b8d7c3f,0x3bd79791,0x3b919af1,0x3bb9d318,0x3c713eb2, +0x3c662b4c,0x3c7e8fa7,0x3c52e5e0,0x3c2b01be,0x3c26aa98,0x3c16164f,0x3c08a64e,0x3c0a429b,0x3c161aa5,0x3c1ca7f5,0x3c3e155b,0x3c55219d,0x3c693c3a,0x3c3a7df6,0x3c18ba00,0x3bd8af6c,0x3bd4ec2b,0x3bdb17c5,0x3c062f00,0x3bf94ab4,0x3c121a72,0x3c1e544e,0x3c28138b,0x3c2b4618,0x3c24f0ce, +0x3c32578f,0x3c466a93,0x3c79e392,0x3c8978de,0x3c95dd04,0x3ca1d62c,0x3c94f8f3,0x3c789ade,0x3c796151,0x3c7d04c8,0x3c3086f6,0x3c2cd6cb,0x3c48e910,0x3c55144d,0x3c5c92a2,0x3c540767,0x3c628a7e,0x3c6836be,0x3c6b12aa,0x3c6c7afb,0x3c695a82,0x3c631010,0x3c5ad3bf,0x3c5c71f2,0x3c4a188e, +0x3c487bd1,0x3c676f90,0x3c5f2cd6,0x3c4d11ca,0x3c38c0f0,0x3c34ba07,0x3c31b294,0x3c2951a8,0x3c26e15c,0x3c24f398,0x3c2455a9,0x3c2c291f,0x3c27b1c3,0x3c1cfb22,0x3c183e35,0x3c1ae9e0,0x3c1c793b,0x3c28a099,0x3c304586,0x3c3746ae,0x3c34e93e,0x3ca530d6,0xba80e092,0xbadb1cf3,0xba3f7842, +0xb98337cc,0xb9aa332c,0xba91b437,0x39e64b01,0x3a19ecd4,0x398e82f1,0xb962745e,0xba2a9c5e,0xba901291,0xba38150a,0xb9f5ff6f,0xb9984e75,0x38d55fa2,0x3a139585,0x3a91d0b0,0x39de5952,0xb8d76dc1,0xb9b58be0,0xba06b329,0xba550a31,0xba8a2ea1,0xba832c5d,0xba9fedef,0xbad9e037,0xba8c8a6a, +0xba8a0b68,0xbaa3b16d,0xba83d388,0xba5f39b3,0xba9d6ac4,0xbac2b616,0xbab44351,0xba201bac,0xbaaf8c96,0xbbb20002,0xba8db48b,0xbb1e087e,0xba81bc78,0xbb549920,0x3b4672b9,0x3b815d2e,0x3b1efd59,0x3b262ea1,0x39e52a1a,0xbb0c8de9,0xbb16333c,0xbabcfc61,0x3ab3dbb2,0x3b5a4f47,0x3b822c8a, +0x3b851a19,0x3b4d13ef,0x3b460734,0x3ac922cd,0xba4821a3,0xbb00f9da,0xbb384e23,0xbb04b065,0xbad58afe,0xbb2c1f66,0xba4fdc31,0xb9105b3e,0xbaaa586b,0xba906a0b,0xbaa3a945,0xbb24825c,0xbb3afe81,0xbb83f262,0xbb8de187,0xbbf35f04,0xbbe07818,0xbac7a376,0xba1eb008,0x3aeb6798,0xbba82f73, +0x3bda0938,0x3c0c8f4b,0x3baa62a7,0x3b532742,0xb8b728e6,0xbb3c1df2,0xbb7748a9,0xba86b919,0x3b214fa0,0x3bcebc58,0x3c0f90c0,0x3c0b8deb,0x3bf40395,0x3ba7ea49,0x3b819383,0xba58084f,0xbb0422e2,0xbb74a6c4,0xbb538140,0xbb710c55,0xbbcf34bc,0xbb0b9141,0xbaf53b3a,0xbba0ca40,0xbb0dbfed, +0xbb09eb73,0xbba41666,0xbbbf1479,0xbbb2cf83,0xbb8cf3d5,0xbc053e5f,0xbc42db32,0x3b8943e3,0xbb691bf5,0xbad355cc,0xbbf1d77e,0x3c09bef5,0x3c540457,0x3c2162ff,0x3c17cf04,0x3b1824d3,0xbb734f6b,0xbb86f0b5,0xb9da50e0,0x3c2338aa,0x3c506e35,0x3c6edcf7,0x3c60153f,0x3c6d42eb,0x3c462950, +0x3c12f52a,0xb9d83216,0xbb5b2084,0xbbd34776,0xbb9a55ac,0xbb95a7cc,0xbbd5b220,0xbae99697,0x39f32d4d,0xbb8c6469,0xbb1584c9,0xbb0ed5a9,0xbbfa6af7,0xbbc8ba77,0xbc0c5128,0xbc419690,0xbc8eeb9c,0xbbd06356,0x3bd25d14,0xbad34c99,0x3b8ef3b4,0xbc3073a4,0x3c530675,0x3c574388,0x3c6ce27b, +0x3be24f96,0xb9c3b361,0xbafa7ca3,0xb99388c3,0x3bcc7cd8,0x3c758edd,0x3c6523b3,0x3c85e9cd,0x3ca52363,0x3c958e8c,0x3c8844a6,0x3c376d18,0x3a77c645,0xbb13c5d0,0xbbcc2b92,0xbba5f97b,0xbbe4457f,0xbc4dde68,0xbba803b6,0xbb92b5c6,0xbc5a258b,0xbb6cea40,0xbb66c929,0xbc1e3765,0xbc250004, +0xbbe6c272,0xbba6dd1c,0xbc4e797b,0xbd4d8545,0xbd29db6f,0xb9df0746,0x3c852d30,0xbb46c49f,0x3be6b87d,0x3c1c9e14,0x3c41eb3e,0xbb959b05,0xbc1a4c37,0x3ab43f18,0xbb7abb33,0x3a96dc6c,0x3c2b9eb8,0x3c9a0878,0x3cafd232,0x3c1233bd,0x3c510a0c,0x3c5540bd,0x3b9d57a9,0xbb6ab8f9,0xbbcae688, +0xba9e0682,0xbc45d03a,0xbc62d19c,0xbcdeb04c,0xbb888214,0x3aa80287,0x3c5e6ba0,0x3c57fd6e,0x3b41cb73,0xbbc38330,0xbd00cd76,0xbd400fda,0xbd433ef7,0xbd566786,0x3c47a599,0xbd0021e8,0xbcbc093f,0xbc737bea,0x3cb255a3,0xbba31a23,0xbc669cfa,0xbc7873fb,0xbc1468de,0xbbc6f4db,0xbbbe7a4a, +0x3a3e0e43,0x3a169319,0x3ac9f55a,0x3a3e0382,0x3b836653,0x3cc569a4,0x3c494f25,0x3bad4291,0x3b454cfa,0x3ba80101,0x3b6848b0,0x3b3bad55,0x3c3c35e6,0x3b70f83d,0xbcca8e34,0xbca56e58,0xbc8638f1,0xbc976736,0x3c27fc03,0x3c5425d2,0xbc4c8db0,0xbb1671dd,0x3baf170a,0x3c3782b1,0x3c79cbb6, +0xbd93acfa,0xbd746723,0xbcd7611f,0xbbfc9229,0xbbfa5503,0xbc41697c,0xbc7940cb,0xbb36f3b3,0xbb99ba97,0xbb562d8f,0xbbd23955,0xba42c47b,0xbb9fe13e,0xbaa365ba,0xbbe0544c,0x394aa394,0x3cb6f39d,0x3c567b68,0x3c56f65b,0x3bce632a,0x3be2bd49,0x3c003cea,0x3bbfa129,0x3bfa3485,0x3a473a7c, +0xbc66c365,0xbc9718e2,0xbca94d27,0xbcc27e81,0xbbf75652,0xbb4d9ff8,0xbc95f9e6,0xbca6a824,0xbd189ef3,0xbd6c4235,0xbd9b734f,0xbd0eb47e,0xbbcbdbd2,0x3c5772bb,0x3c8a4e97,0x3c6c3d5a,0x3bec61ce,0x3b8be483,0x3befe46f,0x3ba59bbb,0x3b90ecd3,0xbb0bdb3e,0xb9a6c51b,0xbb637993,0x3b33a5ac, +0xba0f9d0c,0x3b7e911f,0x3c8a33d4,0x3c809686,0x3c2f36fa,0xb941499e,0x3b3e5809,0x3b955100,0xbb38f66e,0x3c2b16ec,0x3bd49256,0xbafd1e5a,0xbcb36775,0xbcf97881,0xbcee663b,0xbbccc784,0xba90517e,0xbcdfe1a8,0xbcdde377,0xbd231b8b,0xbd131ec0,0xbd2b84ee,0x3dde10da,0x3dca79e9,0x3d9d3d1b, +0x3d77c23c,0x3d6865fd,0x3d22b1ed,0x3ce99993,0x3c4780a6,0x3c30eeb9,0x3bb6a6db,0x3aa39042,0x3b163e18,0x3b3d45c9,0x3bb4da6f,0x3bb48704,0x3bd159c0,0x3c71ff6f,0x3c27b029,0x3bc67f6b,0xbb7a3411,0xb8876a2f,0x3b0e74fd,0xbb18b615,0x3beef1af,0xbbd99d3c,0xbcb4cc25,0xbd5f04e9,0xbd5733fb, +0xbd23d706,0xbbb24eee,0xbb5f8608,0xbcef9f84,0xbd04877a,0xbc2e51a8,0x3d487611,0x3db64d94,0xbc41e09d,0x3a648706,0x3b4cb5be,0x3c830754,0x3ca67cbd,0x3c9ccc2a,0x3ca10a30,0x3cc3bc12,0x3caadedc,0x3ca3da48,0x3c5a882d,0x3c99c576,0x3c40a3f2,0x3baa021b,0x3affd998,0x3b9ce6d7,0x3c89e85e, +0x3bfe929b,0x3b68aad9,0xbb157921,0xbbb77c89,0xbc295614,0xbc8feee3,0xbd024c3f,0xbd335e74,0xbd220b9f,0xbd7f87ac,0xbd4ed647,0xbcc44d82,0xbc22ad39,0x3c4dcdf5,0x3d3b8eb9,0x3d844ec2,0x3d800bf7,0x3d5e2490,0x3c57e6c6,0x3cce8632,0x3cda6bff,0x3cf6b946,0x3cdcece6,0x3cd2755b,0x3c8c17cb, +0x3c5fbe14,0x3c66d3cd,0x3bfd9757,0x3b4e5888,0x3b657766,0x3bcc3adb,0x3c3c357d,0x3c420997,0x3c721c51,0x3c4b211f,0x3c6aad7e,0x3bdd903b,0x3c016905,0x3b62ae88,0xbb28dae9,0xbb5f1e90,0xbc4bd483,0x39c77bcc,0x3b8a3c58,0xbb6ac19b,0x3c4e733d,0x3ccc6486,0x3cfd351e,0x3d27f1e2,0x3d1e5619, +0x3cf0492f,0x3c8cee0a,0x3c74b3e3,0x3c5c57b1,0x3cd307ce,0x3bbc0a96,0x3c1614e8,0x3c46b842,0x3c81d9b3,0x3c84d41a,0x3c88581c,0x3c8466f2,0x3c8c02aa,0x3c68d56f,0x3c614c14,0x3c3dba9f,0x3c3e8822,0x3c200f2a,0x3c2ff9a1,0x3c4bc1ce,0x3c6d07a8,0x3c95aaa9,0x3c61f12e,0x3c5269eb,0x3c399f7a, +0x3c331d3c,0x3c476fd1,0x3c37e43e,0x3c20282e,0x3c351c7d,0x3c15051f,0x3c9dd83d,0x3cce80fe,0x3cf190f9,0x3cd092c1,0x3c9e9c8e,0x3c69845c,0x3c3a65dc,0x3bde20e5,0x3a1f795e,0x3a65b76f,0x3c45dfad,0x3c4ad9eb,0x3c380498,0x3c6432ed,0x3c9167c7,0x3c896c61,0x3c863cff,0x3c80e0d5,0x3c6ccea1, +0x3c64cc6f,0x3c37fd04,0x3c420ec3,0x3c1d0839,0x3c0ed57f,0x3c26bb9a,0x3c549789,0x3c75dab2,0x3c83ab0b,0x3c8c12f8,0x3c7bdc2c,0x3c97b1b2,0x3c935ebe,0x3cbb32d9,0x3ca6279f,0x3c984325,0x3c6d62ef,0x3c3fb3e6,0x3c2150a9,0x3c3be9ad,0x3bf37045,0x3b791e93,0x3a5842ac,0x3aa69a21,0x3b8963f7, +0x3bcae1e8,0x3c26784d,0x3bcd404d,0x3bb6a113,0x3c27e4b0,0x3bdb2144,0x3b9d94ed,0x3bc3c6ce,0x3ba0b895,0x3bec3110,0x3bb1b41d,0x3bdc807d,0x3be72604,0x3bd7f6e5,0x3be9f957,0x3beeb840,0x3be67298,0x3be92f13,0x3be20835,0x3bea92d2,0x3b9cc912,0x3c4c8d21,0x3c11273a,0x3be9d80d,0x3b14f834, +0x3a943272,0xb7fa6f41,0xbb12f2d5,0x3bb1852d,0x3bfc92a7,0x3c2628bc,0x3c499292,0x3c821c20,0x3c8fede4,0x3c83d17a,0x3c5748c0,0x3c29fb7e,0x3c08d4d0,0x3bed3bc0,0x3bd2ba4c,0x3c019e20,0x3c1e6730,0x3c40dd92,0x3c08d2b0,0x3c1e90ac,0x3c46c117,0x3c45b055,0x3c39a8f2,0x3c331279,0x3c30a5a3, +0x3c2c0a45,0x3c2851b6,0x3c08697e,0x3c0442e1,0x3c3b19e8,0x3c3058e2,0x3c295c8a,0x3c2feef6,0x3c183238,0x3c234e49,0x3c2c3d4c,0x3c2ae8de,0x3c1bd3ec,0x3c0001ed,0x3be74d2d,0x3bb6ea07,0x3ba3c646,0x3b92351d,0x3b858b7e,0x3b7136f8,0x3b87cc39,0x3ba795ce,0x3bcbffa8,0x3be6d74e,0x3c2b7985, +0x3a97f818,0x39f29bfe,0x3ac87cfa,0x3a0f2cab,0xb83fb2ab,0xba9b01f6,0x3ac20b26,0x3a9d16a8,0xb7e75fab,0xb92e2ac1,0xba2d961d,0xbab3c1a5,0xba7c933c,0xba60aaa5,0xba2346e9,0x3a5399f8,0x3ae2160a,0x3a3b15a4,0x3a3b2d3b,0x39fe3d23,0x39f17e67,0x3a0cf927,0x39ca59cc,0x38012f5c,0x399c5446, +0x39c5eb9a,0x389ec274,0x3a6f796a,0x3a8588b6,0x3a5c4224,0x3a200c10,0x39a9808d,0x3a03fcf4,0x391b984b,0x3967e1dc,0x39cd46a3,0x39201052,0xba176bef,0x3b1fd7e1,0x3a6230e4,0x3add7d92,0xbb168e0d,0x3b85dac1,0x3ba16ffa,0x3b2b39ba,0x3b814564,0x3aeafa8b,0xbad2cbf5,0xbaf4405b,0xba77a1e7, +0x3aa71bc4,0x3b84ccb9,0x3bae6485,0x3b85ecd3,0x3b33472e,0x3b0c66b2,0x3a9c790f,0x3a2574c5,0x38aa6f8e,0xba87f352,0x38e2605f,0x3a04b049,0xba3d7b7d,0x3b6b4474,0x3b81e897,0x3a9ff6c1,0xba530eda,0xbb034d7b,0xb99c5533,0xbadb9855,0xbb003f8c,0xb907a83d,0xba98812b,0x38a723f8,0x3b74561f, +0x3ae38c58,0x3b75c8e0,0xbb70f32a,0x3bf40df8,0x3c15d70f,0x3b8f4f31,0x3b9b862f,0x3b0085f1,0xbb754aca,0xbb3da127,0xba889235,0x3ab6386c,0x3bf3ac35,0x3c235396,0x3c09414e,0x3bbe10ce,0x3b49f10b,0x3a098492,0xb981c563,0xba948e9a,0xbb562b1a,0xbac5e020,0xba336439,0xbb378f9b,0x3b9c21c5, +0x3b9362f9,0x3ad3edbf,0xbab7dd0c,0xbb68bc4b,0xbabebc42,0xbb8b22c5,0xbb5a3488,0x3a2e3181,0xbb03d5f3,0xbb115f1a,0x3bc5a805,0x3c06fe5d,0x3bd796fa,0xbbd795b0,0x3c3b32d2,0x3c69b948,0x3c0ee078,0x3c33a71f,0x3b896056,0xbb9fe623,0xbbaffa6e,0xbaff0699,0x3bcd751b,0x3c768526,0x3c85e472, +0x3c462f9f,0x3c1fd726,0x3bfc29e9,0x3b7b424a,0xb9ac221d,0xba69a208,0xbba9071a,0xba83debf,0x39ab6a30,0xbb7aac1b,0x3c1ecc3f,0x3c1fc36a,0x3b374d07,0xbb88ee00,0xbbf9d078,0xbb3dd1dc,0xbbe9a552,0xbbf9c5fa,0x3ae0aadd,0xbac38573,0x3a1c8c0a,0x3c08401e,0x3c2606da,0x3c12bfcc,0xbb9aeb78, +0x3c80a8f3,0x3c91e80f,0x3c4cbbf1,0x3c2c7031,0x3a54b974,0xbb96d2c6,0xbb5f7008,0x3b70bdba,0x3c3d0775,0x3c9175ab,0x3ca56d37,0x3c85e8e1,0x3c614f95,0x3c45bc86,0x3b424391,0xb9b55e71,0xbb27f054,0xbbe12605,0xbb60384a,0xbb0bf151,0xbbafedea,0x3c19b767,0x3c1d4036,0x3b1f50de,0xbb7c7226, +0xbc0e1e7c,0xbb6e2881,0xbc1022e8,0xbbd32a2d,0x3bca0511,0xbac85255,0xbd068645,0xbd2dfb81,0xbcda43ed,0xbbeecdb3,0xba9bd09a,0x3c31fe90,0x3c15b5d5,0x3b3e05d2,0xbc03b8a7,0xbc2f5400,0xba7d7b5c,0xbbced361,0x39008a19,0x3c0af1a4,0x3c99dc88,0x3cad5e07,0x3ba4fef9,0x3c3c7796,0x3bf4badd, +0x3ba0b3c8,0xb994a12e,0xbaf7c721,0x3a522842,0x3b9faa6a,0x3b63b677,0xbb30d6dd,0x3bc51372,0x3c4a0a24,0x3ccd36d3,0x3bbd72d4,0xbba9082d,0xbba9f600,0xbcb0d6d1,0xbccfbe19,0xbccf12d3,0xbd04d198,0x3c48b488,0xbbd146db,0xbc2a4aef,0xbc05a29e,0x3bb929b3,0xbbab19ec,0xbbb72fbe,0xbc4ff42a, +0xbbdbbe45,0xbbbaa744,0xbc058fd2,0x3b11d2a9,0x3b41d007,0x3af82846,0x39b95092,0x3b1888db,0x3ca1edc0,0x3c4dc053,0x3c3eb801,0x3ba6873b,0x3a904dd5,0xbadf488f,0xbbe012ba,0xbc645f1c,0xbc8f33b8,0xbcc0cd35,0xbc888888,0xbc362b9c,0x3c1f390d,0x3bb0f62d,0x3bca416c,0xbb7e0460,0x39b43d15, +0x3b36cc64,0x3bc205d6,0x3bdf0ceb,0xbd8b6a4f,0xbd6ec07b,0xbd204982,0xbc5a2da9,0xbca5ca35,0xbc3e03e7,0xbc5fb263,0xbbae573b,0xbbd31c9d,0xbb2f4128,0xbbcb67a7,0xba1822b3,0xbb8231cc,0xbac5015b,0xbbaf5671,0xbade9883,0x3c12e66a,0x3c3df923,0x3c499b09,0x3b12cb34,0xbaf5bef1,0xbb92d88b, +0xbb8efab6,0xbb8036f3,0xbc2b0840,0xbcbbfb87,0xbcb813d4,0xbc9242eb,0x3b9bafbc,0x3b028956,0xba8515db,0xbc877245,0xbc4bf8d8,0xbca02b98,0xbcdc02af,0xbd88f4d3,0xbd14a384,0xbc34cd75,0x3b0122b9,0x3bc73835,0x3c81b0a7,0x3b91fa78,0x3b360993,0x3a88eb96,0x3b3f2682,0x3b77ace4,0xbafd63b2, +0xba7fb6cd,0xbb0a8066,0xbafadc1a,0x3705406d,0xba047080,0x3ad54e0a,0x3c355e64,0x3c2ad28c,0x3a7cf773,0x3a8008ee,0x3b188104,0xba3ab9c7,0xba963d2a,0xbc5548fe,0xbce98745,0xbd001571,0xbcec35e0,0xbc1e1b6e,0xbc605579,0xbc9ebf35,0xbcc62ebc,0xbd3d9b01,0xbd3093b8,0xbc160d30,0xbd1fdd57, +0x3d981da1,0x3dc05a20,0x3db9c4a3,0x3d886955,0x3d6c6ec4,0x3d1bb0fe,0x3ce0af87,0x3bdec22a,0x3c0d1c2c,0x3b3a5514,0xba29be81,0x3b5dda94,0x3b3fb0bc,0xba088cbf,0x3a82061b,0x3b899a73,0x3c197af0,0x3c51a5e2,0x3c532d19,0xbbba3a77,0x3b5b462f,0x3b432860,0xbb5e66d3,0xbc3419e6,0xbc99f28b, +0xbcd3f29f,0xbcf53e0c,0xbcdf7730,0xbcbde8a3,0xbca6a938,0xbcbb8698,0xbc64af63,0xbd439629,0xbd217f35,0x3c916d54,0x3d2be09c,0x3cecaf45,0x3caaef48,0x3c399498,0x3cd340cd,0x3cb0c772,0x3cb8a775,0x3ca286f6,0x3cb368f1,0x3c9da6b1,0x3c943f21,0x3c312243,0x3c21b1b1,0x3bedd6dd,0x3c509e84, +0x3ab5f636,0xb92c7336,0x3bb3d5fa,0x3b9f4978,0x3a6001a2,0xbc276a9d,0xbcc1fcea,0xbcdb675a,0xbcb6d663,0xbcd64ee7,0xbce0934f,0xbd194457,0xbd1039ac,0xbd15ea7d,0xbd54d1f5,0xbd2274a1,0xbcbc0b91,0x3bc3cdfc,0x3d1dee53,0x3d7774b0,0x3da5e674,0x3d51b8c2,0x3c9bcb8d,0x3cc57d17,0x3cdbc2df, +0x3cb7aa93,0x3c9d41db,0x3c7def96,0x3c5a2434,0x3c35c1d4,0x3c429623,0x3c0e291a,0x3c176320,0x3bd0de06,0x3bd8c9d1,0x3c0beba0,0x3c5af411,0x3c7f8fbb,0x3c93e80f,0x3bfe415a,0x3b3be00a,0xbb8f1e8b,0xbc2097ce,0xbc3b5f81,0xbc9c698c,0xbc4e29a6,0xbc3a9b65,0xbbf59071,0x3ba8bb1c,0x3c80ace3, +0x3cad9881,0x3d0d63a5,0x3d16093c,0x3d0e5581,0x3cc92864,0x3c910776,0x3c71266d,0x3c969ae1,0x3c185788,0x3c6082eb,0x3c54f818,0x3c848065,0x3c77de7d,0x3c87e8a1,0x3c84bb8c,0x3c80d201,0x3c86a52c,0x3c8d0c12,0x3c8fa00a,0x3c78997d,0x3c52c5c4,0x3c4ce390,0x3c73532a,0x3c83141d,0x3c8c1b25, +0x3c54ad95,0x3c3bf487,0x3c059452,0x3bf3e12a,0x3bc8d004,0x3bd18e59,0x3bc3cfcb,0x3c1a76fd,0x3c6dffbe,0x3cae4d1c,0x3cd5b5cd,0x3cea327f,0x3cd3c9f3,0x3cb02075,0x3c93f311,0x3c9617b3,0x3c828d21,0x3c15a93c,0x3c0188bd,0x3c75a6d5,0x3c8b290f,0x3c8432e5,0x3c85ca18,0x3c9ae14b,0x3c86a709, +0x3c7304e3,0x3c592e86,0x3c5678cd,0x3c6622d5,0x3c64ee4c,0x3c7b03f4,0x3c65f967,0x3c65f8a9,0x3c581c4e,0x3c7859cb,0x3c746933,0x3c8b9ede,0x3c893c6d,0x3c9e7eed,0x3cbb3ba1,0x3cb72d3a,0x3cd37712,0x3cde6f0f,0x3ce36951,0x3ccccda4,0x3cb7a0f6,0x3ca7687b,0x3ca90e53,0x3c778942,0x3c2b8433, +0x3bbd2d60,0x3b8dcba7,0x3bab67ca,0x3bdc9555,0x3c463784,0x3aebc8ff,0x397de709,0x3b5b69ed,0x3a98f27e,0xb9f9c63c,0x3b00641e,0x3b05147f,0x3b89a814,0x3b85d05f,0x3ba57047,0x3baab8d6,0x3ba8e946,0x3bcc16bc,0x3bde83de,0x3c1fe3ff,0x3c453d5d,0x3c63b50c,0x3c8ed55c,0x3c7581e4,0x3cc20fed, +0x3c995bd0,0x3c8cd4d1,0x3c4627ed,0x3c1d211a,0x3bdf1cab,0x3b945c28,0x3c176ae4,0x3c15b08d,0x3c204538,0x3c32c454,0x3c4af92d,0x3c543bbe,0x3c4eb7b3,0x3c369452,0x3c04ad4a,0x3ba0aaf0,0x3bc00331,0x3bb3f8f7,0x3bca5586,0x3be4f9bd,0x3bfefa0c,0x3bcac10d,0x3bcb900b,0x3beb9cd0,0x3be465df, +0x3bd933df,0x3bd7dde4,0x3bd834f4,0x3bcc4f7c,0x3bbdd557,0x3bd8026b,0x3be3f66c,0x3bd8e953,0x3bfe8b43,0x3c10147d,0x3c1f89f6,0x3c0b288d,0x3c186b7b,0x3c2314f2,0x3c2700f0,0x3c1c61a5,0x3c016032,0x3bf008ad,0x3bc0f2bd,0x3bad2cb0,0x3b910d4c,0x3b6679ad,0x3b2b125a,0x3b2433dd,0x3b474ee5, +0x3b83ccdf,0x3bac4ec5,0x3bc6b48a,0x3b604d55,0x3b272d86,0x3b32f462,0x3b37c0bc,0x3b0b0bc2,0x39949cc1,0x3b2a3430,0x3b219bad,0x3ab4b38d,0x3ad11b60,0x3a9189a1,0x37fcb6e0,0x39f35984,0x3a126a99,0x3a1bba4b,0x3b139f4f,0x3b4d9bf5,0x3b0ba3f0,0x3b10f731,0x3b01488a,0x3ad8be08,0x3aed3b8a, +0x3ae8c853,0x3ab5076a,0x3ae8d999,0x3b06113f,0x3b00c29d,0x3b2cfcdb,0x3b2c9690,0x3b0f9e2a,0x3b0f56fb,0x3b005e01,0x3b443421,0x3b0da9f5,0x3b1ef671,0x3b41f672,0x3b206fd4,0x3b2041a1,0x3b2c47be,0x3b6c4709,0x3b425744,0xba880267,0x3bb0457f,0x3bc3d8e2,0x3b569dce,0x3baa4213,0x3b6f9e79, +0xb820d465,0x37f3f4b5,0x3a3b13f8,0x3ad4d38f,0x3bac15cd,0x3bd6c47e,0x3bc07f4b,0x3b8117b0,0x3b2c02cd,0x3ace3c7e,0x3b01176f,0x3ad0f65a,0x39276089,0x3ab3d59c,0x3aff61a4,0x3abcc074,0x3bdb9cdb,0x3bd48418,0x3a9ff3a3,0xba309217,0xbb0d8b90,0x3b178f10,0x3a0bc120,0x3a0aa9f9,0x3b1b0365, +0x3b2110ab,0x3b5072e5,0x3b6bd117,0x3bbc2fbc,0x3b927f55,0xbb5ce497,0x3bd88084,0x3c10ff12,0x3b7f2f32,0x3bca94dc,0x3b7b8c4f,0xbb47dbfc,0xbaa12030,0xb9594d75,0x3a1cd50f,0x3bfd911f,0x3c252714,0x3c2331fa,0x3bbdab71,0x3b3b7785,0xb9fec65e,0x39ed60ab,0xb96e69ef,0xbb1b816a,0xb9d46d24, +0x3aa4a104,0xb9006a1a,0x3bfe4dda,0x3bdbc2da,0x3a51e9d7,0xba87e2a5,0xbb07143d,0x3baf33b3,0x3adb0ec1,0x3b41018f,0x3b9ce164,0x3b4f5c35,0x3931ccdb,0xb9912c11,0x3bad45f8,0x3b77f76d,0xbc124419,0x3c3bb3a2,0x3c64c9af,0x3bbcac8f,0x3c447c20,0x3bbdbd05,0xbbbe5ae0,0xbb8895c8,0xbae3e35a, +0x3b0b40d3,0x3c70317d,0x3c85e6d7,0x3c5e8fe7,0x3c06ace5,0x3b92e78b,0xb9dc44de,0xb994a0a7,0xbab926a8,0xbba95da6,0xbaff148c,0xb8149304,0xbb5e63ad,0x3c5e7978,0x3c4bab54,0xbb38a5d1,0xbbfb7ab1,0xbc2755c2,0x3b181a75,0xbae2be22,0xbae1e199,0x3a948e7b,0x3b297c6c,0x3acf4228,0x3aee9f5e, +0x3bfb156f,0x3b468a94,0xbc2f066c,0x3c1f2d93,0x3c83f37a,0x3c13756d,0x3c4adf68,0x3b2e3090,0xbbdb31ed,0xbb9fb4b3,0x3ab429d7,0x3be19e13,0x3c9366aa,0x3cae4566,0x3c804fce,0x3c386505,0x3b9f52a6,0xbb30e99b,0xbb52300d,0xbb74a3fd,0xbbfd00a9,0xbb700ebc,0xba64d561,0xbbb3bd6b,0x3c4b3be2, +0x3c2dd9b3,0xbb1c3db1,0xbba5d91c,0xbbcbf6c9,0x3c39c698,0x3b9742f7,0x3c120184,0x3bebdbed,0x3b4f16b0,0xbc111cbb,0xbd17ca42,0xbd249038,0xbca16693,0x3c330da6,0x3c2f9993,0x3c076b30,0xb942cf3c,0xbc08f616,0xbc42f5c0,0xbb1e2ee8,0xbbb86223,0x3a87c213,0x3be1639d,0x3c861a85,0x3c988f23, +0x3c28893b,0x3c482bc0,0x3c19b693,0x3c79a3da,0x3bdc58dc,0xba4cc9e4,0xbb3ed5f1,0xbbf27b09,0xbc1d5776,0x3a0cdfcf,0x3c04b51c,0x3c8141ff,0x3cfb01c5,0xbbb87e6b,0xbcdd7898,0xbcd7ca76,0xbd26a432,0xbd11553f,0xbca0578a,0xbbd3f580,0xbbe1f0e3,0x3beef383,0x3c497f34,0xba359042,0xbbcec179, +0xbc76d7ca,0xbc4e8a5a,0xbb79d62e,0xbbfb868f,0xbbd62c9d,0xbc12df28,0x3a8d83d3,0x3b2e4fad,0xba0db70f,0xb981d328,0x3a9b1437,0x3c158bd5,0x3c393d72,0x3c2706af,0x3af053e3,0xbb919e63,0xbc1b1eda,0xbc4a6a3a,0xbc488d15,0xbc64740b,0xbc2fd73c,0xbc51a65a,0xbc35477e,0x3b99949b,0x3ab51485, +0x3bbf1e62,0x3c21db80,0x3c584f51,0x3c2c1ce3,0x3a6440c9,0xbc42c27b,0xbd302e03,0xbd53c591,0xbd321db2,0xbc8e9708,0xbcdccf3b,0xbc481c5c,0xbc1d9f16,0xbb9f4073,0xbbb43729,0xb94d9ec1,0xbbabd894,0x3b196727,0x3a0987b3,0xb9a1a40d,0xba2ba7d7,0xbb3d58ae,0xbb7055da,0x3c1910d4,0x3c56a332, +0x3ab5eab9,0xbb9e71a7,0xbc23100d,0xbc554cb3,0xbc795a6f,0xbc9550af,0xbc9c8b38,0xbc9af502,0xbc1809c1,0x3c12e9f6,0xba96de1e,0xbc034b4a,0xbc7f8e35,0xbbd981f0,0xbb7ec309,0xba69c2f5,0xbcdbb927,0xbc68fb99,0xbcc2b8bd,0xbc321764,0xbba4c716,0x3c4edfe1,0x3b8497d5,0x3b8a3498,0xbb875481, +0x3b01fba4,0x3b51bf62,0xbac841de,0x3917a697,0xba54cc96,0xbb5bb9f0,0x3a782c59,0xbb5b6b28,0xbc275f35,0x3c1af53d,0x3c3c41aa,0xbb1d43d3,0xbb70aa88,0xbc0ae98d,0xbc08b395,0xbc98b4fa,0xbccf8c10,0xbcefdf00,0xbcc0d81b,0xbc90dcdd,0xbc29568f,0xbcb56074,0xbd082d13,0xbd13d904,0xbd33f1fa, +0xbd08b13c,0xbc8bd1e4,0xbc5b5888,0x3cf9e8e9,0x3d6f3c95,0x3da7b028,0x3d75dab7,0x3d517432,0x3ced79a8,0x3c9b93e5,0x3bb4b01f,0x3bdb8d14,0x3a781d25,0xbab3316d,0x3ad057c8,0x3abce105,0xbb18031d,0xba5e20a6,0x3a831fa5,0xbb24f0b9,0x3c421cc7,0x3c5722c5,0xbc13e3c9,0xbb816394,0xbbbe525e, +0xbbe39dce,0xbc64d25e,0xbc845f24,0xbcd712f8,0xbc557a6c,0xbc75e099,0xbce46a6d,0xbceba0e9,0xbcd86667,0xbc46125b,0xbcfac537,0xbd0f9afc,0xbcefdf64,0x38654628,0x3d85d6f8,0x3d4224c0,0x3cd97353,0x3d179940,0x3cbe946c,0x3cda8edc,0x3cbe42aa,0x3cbd2212,0x3c95f61b,0x3c78c7ff,0x3ba33265, +0x3b372c3d,0x3b99acf2,0x3c7070ed,0x3ba9dad8,0x3a96815a,0x383cdbe7,0x3a99dd06,0xbbb024fe,0xbc831c1b,0xbcb8f1cb,0xbcf5d0fb,0xbd0b8290,0xbcc62183,0xbcb1881e,0xbcef76a3,0xbc48ba8a,0xbc46125b,0xbd1abb30,0xbd243a5b,0xbd25ee91,0xbd1a43b0,0x3c0986ba,0x3d365474,0x3d9ec2e7,0x3d95bc27, +0x3cb911d4,0x3cc581e8,0x3ccb128b,0x3ca124bd,0x3c8488db,0x3c788c0d,0x3c748b49,0x3c56655c,0x3c8806ee,0x3c81f370,0x3c3f56d8,0x3c378063,0x3c12fd1d,0x3c200d67,0x3c2f59ae,0x3c547ab3,0x3c445c54,0x3c1b9ffb,0x3b8cf90f,0xbbbdef04,0xbc136d02,0xbc288513,0xbc6300c9,0xbcc38577,0xbce22c0c, +0xbcba3200,0xbc4fd9c1,0xbb58d428,0x3a194d33,0x3c8c8492,0x3ce4d369,0x3d11a798,0x3d1ba165,0x3d06a9de,0x3cca6d0f,0x3cc55639,0x3c8062f6,0x3c6fd1b8,0x3c5bbbb6,0x3c77358b,0x3c797e0c,0x3c8486f0,0x3c6e54d1,0x3c52eda0,0x3c82262b,0x3c87329d,0x3c9556e5,0x3c818c4d,0x3c805110,0x3c478248, +0x3c68c9c9,0x3c6aea36,0x3c687c0b,0x3c5abd7f,0x3c3ba65c,0x3c1b10a0,0x3c286fba,0x3c08f788,0x3c4511c3,0x3baa1ff5,0x3c040d9d,0x3c7811a5,0x3c9a200f,0x3cb3b256,0x3cd8961f,0x3cdc59ab,0x3cda4dcc,0x3ceda740,0x3cec455c,0x3cdf9746,0x3ca68a4e,0x3c9e2b52,0x3c72e4f4,0x3c90127e,0x3c8e95e5, +0x3c8e432b,0x3c997866,0x3c6ce820,0x3c4655f6,0x3c13a16a,0x3c3192a9,0x3c399caf,0x3c711759,0x3c4f3695,0x3c69ce90,0x3c5c9558,0x3c79b2d8,0x3c7dfbd0,0x3c859fed,0x3c958607,0x3caf9d5b,0x3cc942b5,0x3cd192ba,0x3cc489e7,0x3cc9f44c,0x3cfe0884,0x3d0eb0cc,0x3d04baf8,0x3cf45c56,0x3cf366b6, +0x3ce74624,0x3cb56e40,0x3c94e6a8,0x3c61665b,0x3c1e9839,0x3bfbc476,0x3c07d8ca,0x3c45be84,0x3bd0548a,0x3bad9c88,0x3b21ef8f,0x3b60fed7,0x3b01f0e3,0x3b967103,0x3bd5e0f4,0x3bdc75c9,0x3c077891,0x3bf9b406,0x3bf4930f,0x3c13ba75,0x3c1fe50f,0x3c32f0e5,0x3c592e7b,0x3c720986,0x3c99143b, +0x3ca1eeb0,0x3caf7623,0x3ca55e0f,0x3c8ae3fd,0x3c9d3c83,0x3c8797b5,0x3c5d544d,0x3c20ce9a,0x3bfedf3c,0x3c326d8c,0x3beabbc4,0x3bfaabce,0x3c0da16f,0x3c081ea9,0x3c0cb7e1,0x3c2bee95,0x3c41256d,0x3c28765c,0x3c0a7cc7,0x3bd42079,0x3bf01fa0,0x3bc60eca,0x3baa1fd5,0x3b94f1bd,0x3bcdbc23, +0x3b8fc6b0,0x3b4a1fed,0x3b40aec5,0x3b776e09,0x3b8c179b,0x3b8e3546,0x3b8ee504,0x3b8f1904,0x3bb15895,0x3bc88fd6,0x3bbf436d,0x3bc509e4,0x3bdc4b9e,0x3c0433d5,0x3c0c07d3,0x3c0f321b,0x3c1be2d5,0x3c377233,0x3c421fca,0x3c355c84,0x3c38c37a,0x3c1e40b1,0x3c154d25,0x3c012ce6,0x3bd0e4af, +0x3ba9ba92,0x3b93140d,0x3b910a39,0x3b9ef220,0x3bbcddd4,0x3bfdb61c,0x3b60c788,0x3b10ff8e,0x3add5d83,0x3b3b9583,0x3b3d72a0,0x3ac12391,0x3b26c52c,0x3b2ae1ff,0x3b18cc5a,0x3b36be55,0x3b1eb537,0x3ab0ae17,0x3ae6353d,0x3afc4370,0x3ad9a77c,0x3b208198,0x3b41f242,0x3b6c08c7,0x3b3f02c4, +0x3b1fd9b2,0x3b02e869,0x3afd19a6,0x3af2e87c,0x3aca37ac,0x3ad71733,0x3af98804,0x3b20d4e8,0x3b2aa120,0x3b1ec1f5,0x3a9cb2a4,0x3ac69ee2,0x3ac3e3bd,0x3b27e9b7,0x3afddb75,0x3afb9eca,0x3b22e5a2,0x3b12d5fe,0x3af4557a,0x3a0cac55,0x3b614f90,0x3b3de099,0xba7a38fd,0x3bab9f34,0x3bb9738e, +0x3b526d7e,0x3ba0825b,0x3b858df2,0x3aadbfdf,0x3a73db1a,0x3a920346,0x3ae57376,0x3ba517c2,0x3bc4c5f8,0x3be5fc7e,0x3b9ba7a6,0x3b422e1d,0x3ad21a67,0x3b058f35,0x3ae473b9,0x3a3f1417,0x3ac5735f,0x3b2a149a,0x3b815a6e,0x3bc472f8,0x3b7f675d,0xbb3bfbc7,0xbac6da86,0xba7abf85,0x3b5d438e, +0x3b1f2a66,0x3b6bff5e,0x3ba31361,0x3b356ae6,0x3b228104,0x39dd97f8,0x3bc5482c,0x3b9b0409,0xbb1acce0,0x3bb9c4bb,0x3bf7e73a,0x3b3acf2d,0x3bc2f6cb,0x3b8a1231,0xbac4e13e,0xba49fe37,0xb832bd93,0x3a079704,0x3bc5cb32,0x3c0b9a51,0x3c3c11f4,0x3bd3d65c,0x3b7bed41,0x3a86b881,0x3ac01b12, +0x39c96f56,0xba72a96e,0xba342250,0x3a9c89d5,0x3b9f4bcb,0x3be01ac9,0x3b8b73de,0xbb98d04c,0xbb604928,0xbb39d23f,0x3badc5bf,0x3b17ed60,0x3b65936f,0x3b945b0c,0x3b50801e,0x3a83c7e9,0xbb1df7f0,0x3b3c86cf,0x3ba2bf30,0xbc1f0a34,0x3c273ce4,0x3c536311,0x3b8a63df,0x3c332976,0x3bd786ec, +0xbb8c96e6,0xbb4a0b0d,0xbafae185,0x3a8da42f,0x3c3b9878,0x3c6c4cd0,0x3c7c7337,0x3c1972e8,0x3b85f99f,0xba5ba9da,0x3a4d826b,0xba571c8f,0xbb5f9b66,0xbb0ad30d,0x3ab3d9ce,0x3bcfdeb9,0x3c2ddbce,0x3ba41f15,0xbc6dc19e,0xbc159cf3,0xbbeceba1,0x3bab4c61,0x3b60df10,0x3bcf1b8d,0x3c084fa6, +0x3b1a7c21,0x3b99f1d2,0x3b38abf9,0x3c38c2d5,0x3c11595c,0xbc0feb7e,0x3bf08ccd,0x3c597ef2,0x3bf907b1,0x3c4cfcaf,0x3b8484ca,0xbbeec820,0xbbb5b31c,0x38b3f60d,0x3b87ac2e,0x3c76cbdb,0x3c95cb55,0x3c8de2b5,0x3c3bde93,0x3b977ae7,0xb91cfacf,0xba357e0b,0xbb24b8c6,0xbbb07d0f,0xbb985cf5, +0xba6288b7,0x3bb7f27a,0x3c21c39a,0x3b8428f0,0xbc241845,0xbc1ef93f,0xbbf1d331,0x3c2dba73,0x3b64cb7b,0x3c01b8ba,0x3b8a84a8,0x3b8f4441,0xbbca5a3c,0xbcc5c234,0xbd40db21,0xbce7faba,0x3cbc30b4,0x3c301602,0x3c058a96,0x3a096aa5,0xbbf34f5e,0xbc3089b2,0xbb84bd89,0xbb2ea242,0x3b3f29c0, +0x3b545ffc,0x3c48b62d,0x3c78be6f,0x3cafb7a5,0x3c564a0b,0x3c285113,0x3c53e870,0x3bb3b542,0x3a153ec3,0xba974dc7,0xbc691e82,0xbc312b57,0x3b75a935,0x3c12f0bc,0x3c023da7,0x3c3279bc,0xbcbec483,0xbd0edd12,0xbc985ecb,0xbcde1692,0xbca7ce28,0xbc13969e,0x3a2cbae2,0xbc4b21bf,0xbad7b143, +0x3c8854e0,0x3ae4c77f,0xbc6ea20b,0xbcb83335,0xbcb70b43,0xbc0a56e6,0xbc0f441a,0xbbaa69e7,0xbc10565f,0xba3721e7,0x39971b23,0xbb16da0f,0xbac4b4c0,0xb9a8b459,0xb98a0fb8,0x3c162bea,0x3c232d02,0x3b181df1,0xbb329a27,0xbbf0f3ab,0xbc299c89,0xbb96e82e,0xbbc6ca15,0xbc4c01c1,0xbb25df1b, +0x39f6b322,0x3c57d49d,0x3b1f1e1a,0xb9ec4d44,0xbb3a3ca8,0x3bd09b57,0x3b5ffeed,0xbb70f855,0xbc4cdadf,0xbb7e2069,0xbd0050dd,0xbd0dbfde,0xbc8935b5,0xbd0172b4,0xbc782163,0xbc23a655,0xbb8599f4,0xbbc0e0d1,0x39d17e5f,0xbb880fb7,0x3b262424,0x3acc8422,0xb9e59ac7,0x3b6d21f2,0xbae267ac, +0xbc1a5745,0x3c20f0af,0x3c622aec,0xbabc26d3,0xbbc1cba2,0xbc4a05eb,0xbc8df0ee,0xbc9c8d68,0xbc9b6c81,0xbc789e2d,0xbbea96d0,0xbb1d768a,0xbc1b9ddd,0xbc488792,0xbc83410a,0xbcb67e87,0xbc23855f,0xbb92cd39,0x3b657c14,0x3bd81c6f,0xbb08c5a7,0xbc64b4d4,0xbc4d6b59,0xbbd8765e,0x3b8097c0, +0x3a805e56,0x3b9904f5,0xbbaa4299,0xb91c0d21,0x3a812de1,0xbb23bee8,0xba2c4f47,0xba3f4d17,0xbb5877f8,0x3af99a45,0xbb61a958,0xbc540b77,0x3c212f6b,0x3c2f15c1,0xbb9acc84,0xbbc9686a,0xbc497839,0xbc5b0672,0xbc853399,0xbc9003bb,0xbcb4d913,0xbc686b67,0xbc4a0254,0xbcdcbd83,0xbcb1a8f9, +0xbcda8313,0xbd2f02b1,0xbce61289,0xbcb3f4b0,0xbcf33d72,0xbbcd2679,0xbc95ff40,0x3c94620d,0x3d66ef6e,0x3d3c0b89,0x3d1fea98,0x3c979a20,0x3be6a048,0x3b1f8869,0x3b5ef53e,0xba1cf995,0xbb3cbb7a,0xba7c3439,0xb96f4cce,0xbbd11ea6,0xbb813e2d,0xbb20a3dc,0xbbf2480f,0x3c26299f,0x3c33b95a, +0xbbbb4544,0xbc31f6e8,0xbc61c919,0xbc0c99c3,0xbc77b137,0xbc7bf7de,0xbcc75312,0xbc81cc52,0xbc73a285,0xbc3f9852,0xbc40b52c,0xbc8572d5,0xbcf76a5a,0xbc70d476,0xbca28453,0xbd81cd24,0xbd19d018,0x3d9f499f,0x3d92be93,0x3d30ec36,0x3d441c3e,0x3ce38cb1,0x3d03affc,0x3cf232b1,0x3cc2af2d, +0x3c7f75e1,0x3c398b25,0x3a3d0f09,0xba9b5e3d,0x3b7d9609,0x3c4a9da6,0x3bfbfa87,0x3b54b0ad,0xbb83149a,0xbb68ec4e,0xbc0be09b,0xbc570bfc,0xbc4de8cc,0xbca51848,0xbcc6d1f2,0xbcab3d8f,0xbc6eb8a2,0xbb6c851a,0x3ac0e950,0xbb3cfb93,0xbc3ffbf2,0xbcf99251,0xbd1e23e1,0xbd6accf4,0xbcc4f487, +0x3c354b14,0x3d44fae0,0x3d8c8a7e,0x3d056217,0x3cd80a8b,0x3cdd5b07,0x3cbc45e6,0x3ca59b78,0x3c9bfa76,0x3c9d97bc,0x3c91cdae,0x3c9f3f6f,0x3c91a1ae,0x3c67007a,0x3c77328b,0x3c3e1a7c,0x3bba1e06,0x3b868cf0,0x3b858c84,0x3b862550,0x3bd1d523,0x3b694ab0,0xbbc6d968,0xbc1f7c71,0xbc4e42fe, +0xbc858f13,0xbccc6660,0xbcf57727,0xbd104972,0xbd19beb0,0xbcfdf700,0xbc91bc04,0xbb43c54b,0x3c890df6,0x3d068482,0x3d4c094c,0x3d53edc4,0x3d345a86,0x3d138966,0x3cdba3f5,0x3c9608c3,0x3c8c0d43,0x3c8b2892,0x3c85886f,0x3c8b4274,0x3c6cbc18,0x3c593637,0x3c621944,0x3c66a9a8,0x3c6b410c, +0x3c5ffa88,0x3c5ba26c,0x3c16ec61,0x3c241f8f,0x3c2b3efd,0x3c3a589b,0x3c5cb9f3,0x3c4792c2,0x3c37b45e,0x3c2261f0,0x3c0e14b7,0x3c1d22b7,0x3b370a79,0x3ba1784e,0x3ba00d08,0x3c1d4575,0x3c54cf08,0x3ca8d632,0x3cc2f87e,0x3cf29411,0x3d17c4d6,0x3d268eaf,0x3d295fd5,0x3d11ff43,0x3d05bd30, +0x3c8c2136,0x3c9c14cd,0x3c871820,0x3c8dbc48,0x3c8c5b71,0x3c51f797,0x3c2768cd,0x3bef37d0,0x3c0e36ca,0x3c151579,0x3c2bcff3,0x3c25ae9c,0x3c3c54b1,0x3c352dbd,0x3c5e4e5b,0x3c5aeb13,0x3c6d70fe,0x3c7ccffb,0x3cc01fe1,0x3cb12f91,0x3cadb70e,0x3ca69c9e,0x3cae6b3d,0x3cdfe7c1,0x3d01f0d7, +0x3d03ad3d,0x3d0381e9,0x3d1124be,0x3d15c5a3,0x3cff9d80,0x3ceae62a,0x3cd83df4,0x3ca0fe6a,0x3c795361,0x3c70189d,0x3c7cce22,0x3c6d5a02,0x3c4e79b2,0x3c0ff00d,0x3c2fcbf5,0x3c16b791,0x3c43f53a,0x3c6c1c77,0x3c600446,0x3c804ead,0x3c5e5df7,0x3c5c4352,0x3c67546f,0x3c69d415,0x3c6e871f, +0x3c67620a,0x3c58b0dc,0x3c7c6d7c,0x3c5c197c,0x3c522341,0x3c0b5298,0x3c0d60d3,0x3c5af439,0x3c550a3e,0x3c4c4e98,0x3c2e6765,0x3c0afbec,0x3c440f4b,0x3be67ce5,0x3c14f5d9,0x3c47c4c3,0x3c543b80,0x3c83e1f1,0x3c966678,0x3ca52255,0x3c9bc298,0x3c8e98e1,0x3c480193,0x3c586e29,0x3c36b104, +0x3c107b2c,0x3bd1a565,0x3c38e0e9,0x3c04794b,0x3b97801a,0x3b8dc05f,0x3bb3d276,0x3bc4d7a6,0x3bc35473,0x3bc3818e,0x3bcb7dba,0x3c11b94b,0x3c2e37e5,0x3bf5ee05,0x3c109645,0x3c2848c6,0x3c523bc9,0x3c5fbdf2,0x3c615e0a,0x3c6faf25,0x3c872d15,0x3c8fb285,0x3c9164be,0x3c9ce376,0x3c93a50f, +0x3c93d590,0x3c8b8205,0x3c73fd04,0x3c658e3b,0x3c488073,0x3c3a77d4,0x3c35d5bc,0x3c3d1353,0x3c9b8ecd,0x3b4722c8,0x3a9ca18b,0x39bf2b98,0x3ae22283,0x3b1f74a7,0x3ae2c80a,0x3b1304af,0x3b10dd83,0x3b06e580,0x3b261c15,0x3b16bb66,0x3ad60205,0x3ae1f85c,0x3aec46c0,0x3ad729f7,0x3b0d135d, +0x3b2b5345,0x3b72f78c,0x3b45ee28,0x3b2f0037,0x3b145f26,0x3b052016,0x3af5c1bf,0x3acfcdeb,0x3abc4b88,0x3ae05c77,0x3b36f3d1,0x3afb4f43,0x3ab4379e,0x3902761b,0x3a59af84,0x3a97c83a,0x3b072d95,0x3afdc428,0x3ae0f188,0x3ad3ff7e,0x3aa0bfac,0x3abf6e94,0xb961d6af,0x3b3d14f4,0x3b13236e, +0xb8bb105a,0x3b92def7,0x3b945a07,0x3b2b6f7d,0x3b82acb3,0x3b7ad505,0x3b1ee911,0x3a8db72d,0x3a7e66d1,0x3afcad94,0x3b83a755,0x3bab7494,0x3bebc4e3,0x3bae070c,0x3b789e0a,0x3b350b17,0x3b3803e6,0x3b1dec38,0x3add40d2,0x3ac836f2,0x3b1e08ef,0x3bb461de,0x3b610504,0x3a3c0d56,0xbb945e4e, +0xbaf7283f,0xb95f958b,0x3b37275f,0x3b4eefd1,0x3b8b8b6a,0x3bc03479,0x3b6a2ee3,0xb843b5d1,0xbb3718b4,0x3b549ee2,0x3b6f04e0,0x39d7e69d,0x3b96bfc3,0x3bc295a7,0x3af438b3,0x3ba4663f,0x3b854a36,0x39f0a549,0xb930754b,0xb8d10736,0x3a9525a5,0x3b9b7374,0x3bf634f3,0x3c459a4b,0x3c006168, +0x3bbfdedf,0x3b659d7b,0x3b676f1c,0x3b08e815,0x3a710027,0x3860c922,0x3ae2804f,0x3c0dd09f,0x3b5d2755,0xba33fcea,0xbc16341d,0xbba6e2b1,0xbb210b34,0x3b81f38b,0x3b88cf9e,0x3b8b85b1,0x3b8b30ce,0x3aa1175c,0x3a452a38,0xbb2e4c1a,0x3b81204b,0x3b8076ad,0xbbb9d474,0x3c122679,0x3c2a9d9e, +0x3b3d356e,0x3c1258c2,0x3bd639e8,0xba755cf9,0xbb2a2bb4,0xbb1f5382,0x3afa135b,0x3c1006e1,0x3c526ad1,0x3c8569d0,0x3c37485e,0x3bcbe34c,0x3b16949e,0x3b87fb86,0x3af52f00,0x3a02afa2,0xba1d01a2,0x3b03302e,0x3c5e0eb5,0x3ba39e54,0xbb140e3f,0xbc998946,0xbc266c26,0xbb8fae68,0x3b7cb72a, +0x3bde7c04,0x3bf97a5a,0x3c610a43,0x3bc76564,0xbab57c13,0xbb837383,0x3c4062bb,0x3c2377f2,0xbb4c146c,0x3bdc1e83,0x3c391050,0x3bad664b,0x3c3a38c8,0x3baa39b5,0xbbcf1891,0xbbc860ef,0xba926462,0x3b6ad29e,0x3c50505e,0x3c85be47,0x3c9b1a5b,0x3c46be0d,0x3bf840be,0x3b7312ac,0x3b89c96d, +0x3ab31715,0xbaaa86ec,0xbb37932e,0x3b2b5551,0x3c78f0bb,0x3ba6ee2e,0xbbb1d3a1,0xbc9e7ce9,0xbc44ba67,0xbbb6ec9d,0x3bf1a477,0x3c01bc24,0x3c1a5753,0x3b957e2d,0x3b45c68c,0xbae93d5d,0xbc3c05ea,0xbd4a7f6a,0xbd0cbd36,0x3cce2d56,0x3c1a1039,0x3bc6e1a6,0x3a560825,0xbbc6faf3,0xbc1151a3, +0xbba41ab5,0xb98ea5ef,0x3b5e8e45,0x386313a2,0x3c03ce62,0x3c3c67da,0x3cd8144f,0x3c46ff97,0x3c04cb65,0x3ba89dbe,0x3bc3a5b8,0x3bb9b57b,0x3b83c6b1,0xb89a56ab,0xba92b62e,0x3bef0f86,0x3c31c319,0x3c2a17c9,0x3c703f78,0xbd09c01c,0xbd239232,0xbc419fc8,0xbc8dfaf8,0xbc15aaff,0xbba0ecc5, +0x3b218e73,0xbbf01d4b,0xbb8cf182,0x3c80455a,0x3bbcdbed,0xbc98a24b,0xbc994dd9,0xbc95f5e8,0xbc464291,0xbc121d33,0xbb9584ba,0xbbfeca75,0xbb047d8a,0x3a074fe7,0xba2966f4,0xb8a47ebb,0x3891071a,0xbb66b91b,0x3c0be49d,0x3c330d96,0x3b8e43ca,0x3a873630,0xbb77d1c0,0xbbe9bf15,0xbbe37623, +0xbb9e1e16,0xbbfbfd28,0x3b26f6af,0x3b07fccf,0x39ebc4d7,0x3b4b1377,0xba897cf7,0xbc666e87,0x3a9f68b0,0xbbe0fce7,0xbcd08f02,0xbc4d2c82,0x3c53e957,0xbbe51641,0xbc81aa4e,0xbc17b549,0xbcb56ca3,0xbc6e80f2,0xbc235ec5,0xbbae26d0,0xbbeb3733,0xba5f427c,0xbb001e49,0x3a3a1eab,0xb94c1d1a, +0xb9158f4a,0x3b846c15,0xbaa8818e,0xbc281a24,0x3c01d290,0x3c192ee1,0xbb2c4eb3,0xbb999b28,0xbc2ffea7,0xbc2c0298,0xbc5b5999,0xbc6c7e27,0xbc6520ac,0xbb204350,0xbb8625a7,0xbcbe2f27,0xbca49ba0,0xbca44d4a,0xbcd57e0e,0xbb81c517,0x3a9a8940,0x3b6a6efb,0x3c856a30,0xbc88422b,0xbc09f659, +0xbc2545a2,0xbc137cd5,0xbafac33f,0xbb8bb8a0,0x38524908,0xbc014c14,0xbb92a9bc,0xbb06faff,0xbb382d51,0xbaac3dac,0xba860025,0xbb18cc95,0x3ad5466b,0xbb6ee846,0xbc1a0adf,0x3bbd5b28,0x3be3f846,0xbb5be564,0xbbc486c5,0xbc40d339,0xbc58a35a,0xbc636c1a,0xbc4208cc,0xbc625774,0xbba3a341, +0xbb83d859,0xbc555726,0xbc7e04ad,0xbc92e59c,0xbd07cfbc,0xbc549151,0xbc427edf,0xbca31bbe,0xbc85d230,0xbd84f34f,0xbc801574,0x3cb16c22,0x3cc6f982,0x3cb75be8,0x3bd5ea9b,0xbb955722,0xbba4bba2,0xbafa7be8,0xbb552d83,0xbbc6d5a4,0xbace98f7,0xb848b24a,0xbbe72143,0xbbbcf9d0,0xbbb44c1e, +0xbbd48071,0x3b9cbe91,0x3bbc5c27,0x3b025d8d,0xbc07f7ce,0xbc332fa5,0xbbf40fc4,0xbc16fd6a,0xbbf3ac61,0xbc42c43b,0xbc3561df,0xbc5b6c24,0xbc54ecbb,0xbc49f58a,0xbc92eca1,0xbce9ca98,0xbc8359da,0xbcc3ebe2,0xbd87334a,0xbd969ba7,0x3d9d675c,0x3db0d8b3,0x3d72bb53,0x3d72b39d,0x3d0bb333, +0x3d29d5cc,0x3d1e5d5c,0x3ccffa58,0x3c6cb493,0x3c1fa1ed,0x3b24a0e8,0xbabe8e06,0x3b0ae5c4,0x3bd2cf59,0x3bad0603,0x3b0d8688,0xbbb47f16,0xbbb1a164,0xbbe289b8,0xbc182f20,0xbbf0ac95,0xbc11d618,0xbbc78f7d,0xbc046430,0xbae728ef,0x3bb8218a,0xbbc3f337,0xbc607a64,0xbc161d67,0xbcaaaee5, +0xbcdbe157,0xbd454e04,0xbd371240,0xbcac5d79,0x3cd7ef1d,0x3d5a88d8,0x3d148e43,0x3cf2f272,0x3cf930a4,0x3ce9fec2,0x3cd4c485,0x3cd0b544,0x3cc347e3,0x3c916f61,0x3ca3c466,0x3c8f73da,0x3c8a9aef,0x3c88a358,0x3c3f91d8,0x3ad692fc,0xbad129d4,0xbb0a7346,0xb8ec512b,0x3ba48313,0x3b552a0c, +0xbb882e33,0xbc218c73,0xbc7fef9c,0xbcae1d6f,0xbcbb2b48,0xbce58927,0xbd105a89,0xbd361346,0xbd306f45,0xbcfbb06b,0xbcba02df,0xbb4a7709,0x3c8b7396,0x3d27c957,0x3d45b127,0x3d42b802,0x3d1810eb,0x3d19a771,0x3cda9e26,0x3cc8eb36,0x3cacabfe,0x3c8ee31e,0x3c96143a,0x3c825108,0x3c64cddf, +0x3c5f2f8c,0x3c6f0c3f,0x3c5dd540,0x3c5a787d,0x3c3de062,0x3c1f98b2,0x3bf90952,0x3bf41f6c,0x3c0c6d8e,0x3c23755f,0x3c19d2c5,0x3bdcbcfb,0x3a90e12a,0x39fe4c7d,0xbac4396a,0xbb468298,0xba9057d9,0xbb71418c,0x3adff919,0x3baeb951,0x3c6ff060,0x3c9d1be5,0x3cee8b96,0x3d262561,0x3d3b3413, +0x3d47a3b4,0x3d435a13,0x3d34d77a,0x3ccc9387,0x3cc920ae,0x3c983f9d,0x3ca0aeb0,0x3c86135d,0x3c5953e7,0x3c3b24bd,0x3c2d2f7a,0x3c267087,0x3c2e43bd,0x3c18fbf0,0x3c50665d,0x3c448ce8,0x3c5d4eb9,0x3c5c9632,0x3c5d1062,0x3c4b00f6,0x3c2f99d5,0x3c7a91da,0x3c361355,0x3c3267d6,0x3c3e09e9, +0x3c49cf32,0x3c8e8bbd,0x3cb4c1be,0x3cd4f968,0x3cfe9a9d,0x3d1ac08b,0x3d2916d2,0x3d25f43e,0x3d2b9a05,0x3d2e02f4,0x3d0f8b00,0x3cf2abf4,0x3ce6c00c,0x3cce4e66,0x3cc5b56b,0x3cba98da,0x3c86271d,0x3ca904df,0x3ca14997,0x3cb168f5,0x3cc4331b,0x3caf22a7,0x3cbf9bdd,0x3ca4e67f,0x3c9f9316, +0x3c960142,0x3c914a50,0x3c88ce60,0x3c754f26,0x3c62c026,0x3c67ca58,0x3c58d2a9,0x3c1e770d,0x3c205551,0x3c495fe0,0x3c876b0e,0x3c941871,0x3ca2bfd8,0x3ca16ffa,0x3c925c12,0x3ca33cff,0x3c7c0263,0x3c9095ea,0x3cb0871e,0x3cacb73f,0x3cd6bd42,0x3ce4e3df,0x3ce1da5e,0x3ce07f26,0x3cdd9a6f, +0x3c9384b7,0x3c9ad693,0x3c8abaf1,0x3c6ab10b,0x3c43a6f2,0x3c86fd08,0x3c630413,0x3c2e698c,0x3c25115d,0x3c37c01c,0x3c429dda,0x3c436e8e,0x3c46d0b6,0x3c4fab16,0x3c74efc9,0x3c83df03,0x3c5115b1,0x3c690cf3,0x3c7c7fdb,0x3c89f7f4,0x3c8bcb43,0x3c901e0e,0x3c95a901,0x3c9f31eb,0x3ca66ace, +0x3cad1575,0x3cc11a88,0x3cbf67d8,0x3cc70836,0x3cc62b3e,0x3cb8794a,0x3cb9985a,0x3ca7410b,0x3c9a4d47,0x3c964bde,0x3c945e09,0x3cea1cca,0x3b4a847a,0x3aa5c2e8,0x3a6bb40f,0x3ac53a13,0x3aecec67,0x3ad5bcb9,0x3afb4d8e,0x3ade7b91,0x3acd7184,0x3afc2f73,0x3af15b23,0x3ad9546f,0x3ab8afb3, +0x3ab05f3d,0x3ab1a834,0x3af8ba54,0x3b1edf27,0x3b50b4aa,0x3b387030,0x3b34932f,0x3b2d5b30,0x3b1fc007,0x3b1559f7,0x3b0437b4,0x3aecabe7,0x3af973c6,0x3b355ce2,0x3ace601b,0x3a972e31,0x3a1d2d75,0x3a46421f,0x3a836775,0x3acddce8,0x3af9a8ae,0x3ad7b755,0x3a7dd171,0x3a959b67,0x38e3dc79, +0xbaa4baf8,0x3ab529b3,0x3b157d71,0x3abb1d2c,0x3b624ea3,0x3b44374e,0x3b0de771,0x3b4e4c09,0x3b5f472a,0x3b56c0a5,0x3ab56365,0x3aa4e9ab,0x3afdd5a2,0x3b52930b,0x3b9a0f62,0x3bd87ebe,0x3bb9259b,0x3b9a1b7c,0x3b840bd6,0x3b81b848,0x3b65a04c,0x3b39ca38,0x3b092652,0x3b20d4e5,0x3bb182e6, +0x3ab705b0,0xba440602,0xbb1bc037,0xba42c3c2,0x3a920c84,0x3b3a8852,0x3b95c97d,0x3b946fa4,0x3b24a091,0x3aee3887,0xbb0fce1e,0xbb8c873e,0x3a588f77,0x3b201f19,0x3b232ff3,0x3b32de2a,0x3b5a36a6,0x3aef51f5,0x3b78e9bd,0x3b82fc0b,0x3b115cca,0x3aa285cb,0x39c39316,0x3aba2398,0x3b90bad7, +0x3be41744,0x3c34518b,0x3c0e9afa,0x3bf267ce,0x3bb0f86b,0x3bbc1a43,0x3b8ae008,0x3b480cb1,0x3ada4b98,0x3b02c33b,0x3bee1254,0xb9a39d6b,0xbb6af343,0xbbcb6217,0xbba7aaf9,0xbb198da9,0x3ad0a316,0x3b9973b9,0x3b5b19b8,0xba750e22,0xbac12d10,0xbbbab978,0xbc2d35df,0x38a7b47e,0x3b1594bc, +0xba7826fc,0x3bd04e24,0x3bd47fc2,0x3ab52d81,0x3bd6208c,0x3bc015d9,0x3b080cba,0xba99a29b,0xbafc00f3,0x3b098654,0x3beaf045,0x3c398411,0x3c80f1aa,0x3c4b1eec,0x3c163e14,0x3bbb50aa,0x3bf045f0,0x3ba27428,0x3b750d83,0x3a94705e,0x3ae09f27,0x3c3e83ee,0xba9e8204,0xbbdb2198,0xbc5a5066, +0xbbe17d9a,0xbab0eef2,0x3b4a8e77,0x3c274781,0x3c09ac8a,0x3b0affe4,0x392946a8,0xbc1f686a,0xbc44d2d7,0x3ae58ff8,0x3b84bf48,0xba075343,0x3b57949e,0x3bf5d040,0x3b3be28c,0x3c14ba32,0x3bb10b27,0xbb6a6e0a,0xbbac6741,0xbaef69ac,0x3b49ce3e,0x3c33ed09,0x3c7ed408,0x3c9d9c30,0x3c541cb1, +0x3c177986,0x3be43401,0x3c05570f,0x3bb0c1fd,0x3b467382,0x38f3c55e,0x3b3e9648,0x3c290bbb,0xbb3b80ec,0xbc4708ef,0xbc7ad482,0xbc563890,0xbbbd0070,0xb909c343,0x3c04f03b,0x3b91605f,0xbbaaf276,0xbbb1e733,0x3a59aad9,0xbb0f817d,0xbd1b039a,0xbcfb51d1,0x3cabf43d,0x3c2ab3c1,0x3c03d687, +0xb98fcd85,0xbb1c970c,0xbba0410f,0xbba1554e,0x3ab5f2b5,0x3b3ea11f,0xbaa9809f,0x3bc995ad,0x3c1b23ee,0x3cbe9bb1,0x3c641841,0x3c1e5fa7,0x3b816575,0x3c126277,0x3bec764f,0x3bb8c31d,0x3b9dc30d,0x3afe3c1b,0x3bf437b5,0x3c263225,0x3c54e640,0x3ce9afcc,0xbc9d9048,0xbcc87456,0xbb4344bc, +0x3b9534d8,0x3c2a172e,0x3b5f1ccb,0x3b2ac34d,0xbb9fc76a,0xbabba236,0x3c6b769f,0x3bf22a9d,0xbc533520,0xbc77dcd4,0xbc682e99,0xbbe0738c,0xbbf0193c,0xbb881dbd,0xbbbd1dd5,0xbaf76efc,0x3ac8745f,0x3ae485f2,0x3b52460c,0x3b36d703,0xbac5f9ac,0x3bde4d04,0x3c067389,0x3bd96327,0x3b81294f, +0xb9e3d3a5,0xbb578068,0xbbb0f0eb,0xbb18d499,0x3b4ce99f,0xbb733d8c,0xbc002e65,0xbc3c2fc3,0xbc561ab7,0xbc496bd3,0xbc6eaa90,0xbbfcd17a,0xbc7765d0,0xbd05e9a4,0xbc4d4de3,0x3c861d96,0x3be5d658,0xbbc88719,0xbba8315b,0xbc6973e8,0xbc5216df,0xbc0ac6eb,0xbc025b62,0xbbdafd0c,0xba47e9ef, +0xb7cbe3df,0x3936b730,0xb9a3044d,0x3af71784,0x3b5d57e4,0xbaac8e7e,0xbbe139bd,0x3b95cb54,0x3bac47ea,0x3b2b9d8b,0xba8f42be,0xbbc93a4e,0xbb61ff22,0xbc052e1e,0xbc0cc5bb,0xbba9e0ff,0xbbf95f17,0xbbfdeb91,0xbc5a0cbe,0xbca72327,0xbcacfd0e,0xbcc194b1,0x39afea92,0x3bd0114f,0x3b05e8e6, +0x3c88b56c,0xbcdd19d4,0xbc752d6c,0xbc72fb8a,0xbc846ca1,0xbc4890c3,0xbc2ddfd8,0xbc022695,0xbc63f931,0xbc032a99,0xbb7ce619,0xbb323d47,0xb9e3d85a,0xba2419fd,0xba557115,0x3a44ee85,0xbb4b8a7d,0xbb99e650,0x3b08b448,0x3b737830,0x3a838407,0xbb6c468f,0xbbf984a3,0xbba8cfcd,0xbc06f105, +0xbbc4a28a,0x3a26f1c8,0xbb941bf7,0xbbcadb32,0xbc05fe71,0xbc85c3fd,0xbc75da30,0xbc48adde,0xbc0486e2,0xbc077309,0xbc1a925d,0xbccf4cc5,0xbdac86ef,0xbd302dac,0xbc432a48,0xb9f3d435,0x3b443c7f,0xbbcb20d6,0xbc4f3fd8,0xbc324bf7,0xbbd03c3f,0xbbb826ac,0xbbb15bcd,0xba3a1771,0x3a95f221, +0xbb3cb877,0xbb6002b0,0xbb9d14c9,0xbbc2af1f,0xbac00b84,0x3a8489be,0x3c2c625c,0xbaaaf6b4,0xbb8432d4,0xbbbb98fc,0xbc0279f7,0xbbd4fd85,0xbb946a54,0xbbd8175e,0xbc23db02,0xbc15ed38,0xbc7e6c5d,0xbc9ef75e,0xbc602d0b,0xbccc1804,0xbd1083a2,0xbd36c968,0xbdaa8709,0x3d802af0,0x3da2a576, +0x3d89a67f,0x3d842f49,0x3d223772,0x3d48cd68,0x3d34f12e,0x3cb71e66,0x3c5ebe34,0x3c072daf,0x3bbc5837,0xba5b4ca2,0xba108691,0xb980b7fe,0x3abb05c3,0x3aa893b7,0xbbb014e8,0x3b109c17,0x3a952930,0xbbb023be,0xbbb4b8ab,0xbbce6200,0xba8913fe,0x3ad12427,0xba9bf15a,0xbc291b33,0xbca78a3a, +0xbcb3e34d,0xbc8cc36a,0xbc9afc84,0xbc929ea8,0xbcd1b913,0xbd441a8a,0xbd1ec278,0xbb2dcfb2,0x3d07e2d0,0x3d0d833b,0x3cfaefa8,0x3d0345a4,0x3cfff641,0x3ce81e76,0x3ce7c630,0x3cc98270,0x3c990815,0x3ca9ea4a,0x3c989c3e,0x3c998479,0x3c87961b,0x3c37ff79,0x3b9f9222,0xba3a096b,0xbace50a1, +0xbac9265d,0x3b176a63,0x3b0d4d5f,0xbb53253f,0xbc206e1e,0xbc78ab9e,0xbcae4c74,0xbcc4abf4,0xbcebbbcd,0xbce12dd8,0xbd01aab7,0xbd07d9b4,0xbcf0f39b,0xbd04de61,0xbccbf367,0xbc74b23c,0x3c6a5344,0x3ce61cb0,0x3d0aad9b,0x3cfd3b7e,0x3d30ddf1,0x3d08a28e,0x3d0377ce,0x3cde2a10,0x3caec6be, +0x3cae4c66,0x3ca129c2,0x3c8c4edc,0x3c886ba6,0x3c8b3646,0x3c77e53d,0x3c69482c,0x3c54f1cf,0x3c58450b,0x3c1aad05,0x3bf1ab42,0x3be533a9,0x3b95a614,0x3b1e2119,0xbaefa304,0xbbf7074c,0xbbffdee4,0xbc0cf412,0xbc008327,0xbbbbdce3,0xbb983321,0xbb601bf0,0xbb193c60,0x3b4c4eba,0x3c0db585, +0x3ca52120,0x3cfd39ec,0x3d29179b,0x3d4268ec,0x3d5194b5,0x3d455dad,0x3d085417,0x3cf4e1d0,0x3cc35a1f,0x3cc7a647,0x3ca9d581,0x3c92d2f1,0x3c87be95,0x3c82d1d7,0x3c6b1f70,0x3c6a4a23,0x3c43bf37,0x3c872fc3,0x3c77a99b,0x3c861a59,0x3c74d12f,0x3c739e06,0x3c4de96d,0x3c189700,0x3befcc62, +0x3b7f43c8,0x3ba743f9,0x3bbe936e,0x3bb492b2,0x3c20972b,0x3c65746d,0x3c91b9f6,0x3cb95a8c,0x3ce743ed,0x3cf39bc5,0x3d1372cb,0x3d32151c,0x3d4ad626,0x3d39d621,0x3d2dce8d,0x3d32daa2,0x3d1356d3,0x3d06a55e,0x3d0b6f25,0x3ce689ee,0x3cfde4e7,0x3cef66f0,0x3cf95af7,0x3cfa30d8,0x3ce316e5, +0x3ced8dbc,0x3cd44c79,0x3cc9e46a,0x3cb64ec3,0x3cabf46f,0x3c9f1866,0x3c911fc6,0x3c888c28,0x3c8714fb,0x3c8cd9c5,0x3c70ea6e,0x3c8bab6f,0x3c97d115,0x3cad58ce,0x3cbbde66,0x3cc66e57,0x3cc1d60c,0x3cb485b2,0x3cc596dd,0x3cb20f80,0x3cc408fa,0x3cd7ad96,0x3cb6399f,0x3cd34323,0x3cec9339, +0x3cdbb40b,0x3cef1521,0x3d070ca8,0x3cb685d3,0x3cbd4ff8,0x3cb042eb,0x3c9ca215,0x3c8cac57,0x3ca69a34,0x3c97d9b3,0x3c86d1fd,0x3c7f9f4e,0x3c84404f,0x3c87b6e6,0x3c8792e4,0x3c87534b,0x3c88af88,0x3c99695d,0x3ca04f86,0x3c8862b2,0x3c8ebea1,0x3c92c91f,0x3c967808,0x3c9764c2,0x3c9cff88, +0x3c9fd5ba,0x3ca6d3f8,0x3cad859b,0x3cb2d687,0x3cc5c83d,0x3cc5c0f6,0x3cd0d379,0x3cd8a907,0x3cd78a1f,0x3ce3291c,0x3cd5e665,0x3cc67120,0x3cc6169e,0x3cbf5f2f,0x3d0b7f2e,0x3b6d7a1d,0x3affc588,0x3af5797e,0x3b13dc56,0x3b0dcd88,0x3b1b8e28,0x3b17f053,0x3af8c404,0x3af04cd5,0x3b019391, +0x3b072a85,0x3b16e97a,0x3aefd81a,0x3ae195e0,0x3ad761d0,0x3b12094b,0x3b306a37,0x3b4c12c4,0x3b513913,0x3b530f07,0x3b49f194,0x3b3fa719,0x3b3390d9,0x3b23b0f5,0x3b158622,0x3b0ee529,0x3b301e4c,0x3aced9ee,0x3abc4576,0x3aace6a6,0x3abe16a6,0x3acbb670,0x3af536dc,0x3b17909e,0x3b070b3c, +0x3ac6957a,0x3afe39b4,0xb9548407,0xba0324e1,0x3a4f9578,0x3b555858,0x3b77fe22,0x3b4fecd5,0x3b196dc8,0x3b349bb9,0x3b3fbbb7,0x3b66ba40,0x3b9a5f60,0x3b255b16,0x3b05d400,0x3b11ee6b,0x3b5444da,0x3b9a6a20,0x3bcd3ceb,0x3bcc6d7b,0x3bbe4341,0x3ba25a46,0x3ba0eb95,0x3b94bc79,0x3b76660a, +0x3b3ac1c0,0x3b34f201,0x3ba0334c,0xb905d5e5,0xbb07401f,0xbb0d2018,0xb9aaa64e,0x3aafddec,0x3b0ea7ba,0x3b91d869,0x3b9c7d7e,0x3abb1822,0x39ae8a22,0xba8e5a20,0xbb0193e9,0x3a518993,0x3b45776e,0x3bce0930,0x3b18f674,0x3ad029c8,0x3b3973db,0x3b4470f8,0x3b86f15e,0x3b9b47cb,0x3b2d17cd, +0x3aab14ec,0x3acad910,0x3b8f397d,0x3bd8a7c0,0x3c2275f6,0x3c1b325e,0x3c12e8d0,0x3be0a5f9,0x3be508b4,0x3bb25793,0x3b8802e1,0x3b2ab8a8,0x3ae3806b,0x3bb12a9f,0xbb52d776,0xbba64faa,0xbb8980c3,0xbb586851,0xba3bdba7,0x3a52cbc9,0x3b91eb6d,0x3b5db79d,0xbb20ab27,0xba90fbbc,0xbbd8c05f, +0xbc0c06b4,0xbb52fe36,0x3b75289d,0x3bb0d193,0x3b800c4c,0x3b48e2fa,0x3b1eb801,0x3b93a528,0x3bae5322,0x3bc11bf1,0x3a984af7,0xba228f4c,0x3aec9c9b,0x3bc9c537,0x3c24e452,0x3c6c4a4f,0x3c603d9c,0x3c42bc39,0x3c0305fc,0x3c13e5c9,0x3be988b4,0x3ba1f3c0,0x3b18a04f,0x3af7f92c,0x3c1098bf, +0xbbdbc965,0xbc3ce569,0xbc53a759,0xbbc64c46,0xba5ae887,0x39f79222,0x3c002c09,0x3c0c2667,0xbb7d5962,0xbbc94cf7,0xbbaf192f,0xbbbd4529,0xbb2b95a0,0x3b5741a3,0x3ba61810,0x3a918257,0x3b56adfa,0x3b3499df,0x3bdc9f2f,0x3ba908ed,0x39cb4413,0xbb4a6bf1,0xbace5d4a,0x3afbeb53,0x3c0f5d8a, +0x3c5fb51e,0x3c94ef1f,0x3c6c9d5a,0x3c3ddf37,0x3c201cc9,0x3c23a920,0x3be4a3a4,0x3b957054,0x3aace998,0x3a90f604,0x3bc6266a,0xbc20de94,0xbc809ffb,0xbc2a3c0c,0xbc1bdc74,0xbb1d4fdb,0xbb091516,0x3bd285d3,0x3b4da989,0xbc247651,0xbbd20057,0xbbc3331b,0xbba70683,0xbcbb6f9d,0xbca71373, +0x3c89f618,0x3c6221eb,0x3c552b81,0x3a9d11d8,0x3a896f79,0xbabaee99,0xbb3c5117,0x3b51130d,0x3b51bfee,0xbaa29a32,0x3bc7f91e,0x3c19459e,0x3c9ca807,0x3c901c34,0x3c78a831,0x3bfa3bf8,0x3c060df3,0x3ba8fb86,0x3b661664,0x3a84dded,0x3ae3a9f5,0x3c1d84cb,0x3acd8735,0x3b146223,0x3c9c5bef, +0xbc80e86f,0xbc83913a,0x3aae776e,0x3c6a81a9,0x3c8f02fe,0x3bc48539,0x3b340c71,0x3b740e61,0x3bb92e6e,0x3b53bacf,0x3ac4eeda,0xbc147ea4,0xbc528e28,0xbc5304a9,0xbba50887,0xbbb10c06,0xbb205c42,0xbb58148d,0xbb14eca9,0x39d15e9a,0x3aeac8d0,0x3ba76445,0x3b931451,0x3afded96,0x3ba2f977, +0x3bb58920,0x3c26588f,0x3bc38fd5,0x3b1af1c7,0xbb22d1c7,0xbb369d29,0xbad96764,0xb6952579,0xbc1df096,0xbc489fc4,0xbb8c0a4a,0xbc315edb,0xbc4e11ae,0xbbd74c8d,0xbcb422e3,0xbcf31f63,0xbcfb8808,0xbc01f259,0x3c87e3b9,0x3ca499c6,0x3b3a8d43,0xbb2f0481,0xbc725ab4,0xbc425ac7,0xbbf52b97, +0xbc177a24,0xbbccd6a4,0xba6537ef,0x3a266009,0x39b8b105,0x3a93ac32,0x3b53f89a,0x3b78e88f,0x3a1c5453,0xba5c7683,0x3b8b2af9,0x3baf7941,0x3c274a3f,0x3b2bd559,0xbac5ed02,0x39fc8b9c,0xbb3f8b34,0xbb15650f,0xba423c5f,0xbbb2e7b2,0xbbe34f8c,0xbc18b253,0xbc637e15,0xbc6732e3,0xbbfff6e1, +0x3b58f7e2,0x3bdb4cbc,0x3aec59b4,0x3c1de676,0xbcbdcffa,0xbcadbe75,0xbc8457db,0xbc8d8540,0xbcca12f8,0xbc53b1a7,0xbc34e373,0xbc8109fd,0xbc1b0cfe,0xbb9cf1a4,0xbb1b7b92,0x39a2dd42,0x39b963a2,0x3a11ee26,0x3a5d6275,0xb9ac961a,0xba589684,0x3aa33baf,0x3b43c0fa,0x3c0e0056,0x3ad94171, +0xb9d8d03b,0x3a4d74c1,0xba246536,0xba1d297a,0x3a2ea008,0xbb5fe01f,0xbba8a67b,0xbbe1148f,0xbc63ee4c,0xbc4ce9e0,0xbaf32ceb,0xbb3bda8b,0x3915cde4,0xbaeaa7b9,0xbcb391a4,0xbd78cbc7,0xbd686c38,0xbd16ab51,0xbcad9366,0xbc5914c8,0xbc5a36df,0xbc57763c,0xbc2a48cc,0xbbe97667,0xbbc697d6, +0xbaab22db,0xb9b55550,0x3ab9e5cf,0xb9c95b64,0x38670949,0xbb0671dd,0xbba8f980,0xbb7195c3,0xba117c0e,0x3c5a3c94,0x3a96fce9,0xbb044474,0xbc05f944,0xbc069072,0xbc0e4048,0xbc18e5c1,0xbbd071f8,0xbbb62395,0xba74649f,0xbc27c91c,0xbc85b2fa,0xbc458a90,0xbcdd30ef,0xbd0c5ce5,0xbce186e0, +0xbd632db9,0x3cecd3c5,0x3d55100b,0x3d77e776,0x3d6c337d,0x3d2575a8,0x3d3e05cc,0x3d2053f6,0x3c53b6ad,0x3c1f739d,0x3b99dfa6,0x3ba270da,0xba3d06e2,0xba4682e0,0xbb823d6a,0x3a44fca6,0x3af042e3,0xbb448a39,0x3bbc7925,0x3b9ec852,0x3b05df1f,0xb99018a3,0xbb8ca068,0x3a7ad3ed,0xbaf68c3a, +0xbc241694,0xbc996bf3,0xbc75a9be,0xbc80e00a,0xbca7ed0f,0xbca3e39c,0xbc815277,0xbc832237,0xbd0b4c43,0xbd1ce05f,0xbd13c68e,0x3b98d42b,0x3d0e7c5d,0x3d07e3f3,0x3d0a7aa8,0x3d057274,0x3cf166a3,0x3cdb68df,0x3cbf5426,0x3ccb0d8a,0x3cb8e333,0x3ca55ed9,0x3c974473,0x3c7fbcac,0x3c4119e8, +0x3c3f6399,0x3baafb91,0x3b15e36c,0xbb1a56b3,0xbb3c6904,0xbb59114f,0xbbc0b794,0xbc49e004,0xbc83d201,0xbc9e0d99,0xbcc25f1e,0xbcc986d4,0xbc8b9b7b,0xbc9c48b2,0xbcb25b1e,0xbcc58b0a,0xbcfdfe64,0xbd08b2f9,0xbd161ed5,0xbc76947f,0x3b014b80,0x3c9c3c38,0x3cd0ed66,0x3d2d6b0e,0x3d17e451, +0x3d1b0ba1,0x3d092176,0x3ce02ea4,0x3cccd1ed,0x3ccb3765,0x3cc6f8a4,0x3cb1e535,0x3ca3241b,0x3c8a06e6,0x3c70bac4,0x3c67be79,0x3c6a51bd,0x3c32b06b,0x3bf144ea,0x3bb72266,0x3af2fb48,0xbb0efe90,0xbbbf161b,0xbc0e9e2f,0xbc1a6b86,0xbc184f5e,0xbc340a6e,0xbc2ad1c9,0xbc06b65a,0xbc31452b, +0xbc38f63e,0xbc55f1ea,0xbb90e793,0x3bd83b51,0x3c76fb17,0x3ccfb01d,0x3d0c95bf,0x3d37fb1e,0x3d2fb5ce,0x3d0ac3f8,0x3d00430f,0x3ce5d8f0,0x3cdfe670,0x3cd73c93,0x3ccaf7f5,0x3cbf4f60,0x3cb18ab8,0x3c9fb649,0x3c98dca9,0x3c84f77a,0x3c967c43,0x3c876acd,0x3c7a0f16,0x3c72fcd6,0x3c61451b, +0x3c45e062,0x3c1d4b7e,0x3bd448b4,0x3b8a48f3,0x3baa51b8,0x3b93afb4,0x3b6081d3,0x3bb4024a,0x3bd340f7,0x3bd439af,0x3c07f3fe,0x3c308eab,0x3c3248f3,0x3cb66edc,0x3d08a017,0x3d33b16c,0x3d3535b4,0x3d320112,0x3d36cbea,0x3d188b91,0x3d080af7,0x3d0e5245,0x3d11688a,0x3d0c73e1,0x3d02086e, +0x3d05d9b9,0x3d010d36,0x3cfa6be2,0x3cfc7cd3,0x3ceadca7,0x3ce19a9e,0x3cd1b206,0x3cc87b56,0x3cc3cb70,0x3cb2932a,0x3ca4bb4d,0x3ca53e5b,0x3c9c848d,0x3c9a7728,0x3c90779c,0x3c9577bf,0x3cae602b,0x3cbe5045,0x3cc75b05,0x3ccb5a6a,0x3ccd68a8,0x3ce51f13,0x3ce3b7c2,0x3ce81d93,0x3ce7729e, +0x3cb0bcfb,0x3cb25b42,0x3cc6a168,0x3cb06954,0x3cd65438,0x3d01aecb,0x3cbd98d8,0x3cbf1da9,0x3cbd7d30,0x3cb5ece3,0x3cafe84e,0x3cb68818,0x3cb07269,0x3ca7e306,0x3ca1843c,0x3ca34d5e,0x3ca45203,0x3ca3af60,0x3ca1be60,0x3ca0278b,0x3ca55e9f,0x3ca62b6f,0x3ca106cd,0x3c9edd0a,0x3c999eca, +0x3c93077d,0x3c9853b0,0x3c9abd25,0x3c9a7f25,0x3ca024e1,0x3ca3756e,0x3ca3402f,0x3cac5d95,0x3caaf86d,0x3cb77156,0x3cc47405,0x3cced82d,0x3ce21093,0x3cdf66b3,0x3ccfe28d,0x3cd02c85,0x3cc7b69b,0x3d124cc7,0x3b985280,0x3b2165a1,0x3b09cdfb,0x3b2541b5,0x3b2af6eb,0x3b6002e1,0x3b3f0f22, +0x3b1c54a9,0x3b15cec1,0x3b0ab9f7,0x3b18b69c,0x3b475421,0x3b17d806,0x3b07c9b3,0x3afb1d36,0x3b2fe170,0x3b513567,0x3b4e31d0,0x3b6e88d2,0x3b7937c1,0x3b725527,0x3b691c86,0x3b5db202,0x3b4b01a3,0x3b45feaa,0x3b3883d1,0x3b41a977,0x3afbe3d7,0x3ae49f0e,0x3ac634c4,0x3b0846fa,0x3b1d136c, +0x3b29accf,0x3b4346ee,0x3b2ae212,0x3afaddef,0x3b202070,0x3ac144c1,0x3a79f940,0x3b0c7a0a,0x3b99603e,0x3bf03cf4,0x3b71348b,0x3b2b48cc,0x3b865c8d,0x3b5e2138,0x3b85fc88,0x3bcb2ebc,0x3b7159a6,0x3b407664,0x3b355a17,0x3b624231,0x3ba7aba6,0x3bcde94c,0x3be3453a,0x3bde7e55,0x3bc75cf7, +0x3bbe8ef6,0x3baf5096,0x3b977365,0x3b826a38,0x3b6a8b15,0x3b9cce3a,0xba0f7fbd,0xbb18176a,0xbb08bfb4,0x3ababe0d,0x3b5fbfe0,0x3b5625c7,0x3bb44228,0x3bc08357,0x3b3d6869,0x3b1b1da3,0x3a89f21d,0xba203f15,0x3add7f62,0x3b8fbf05,0x3c3ccae9,0x3b469b82,0x3a8fdca0,0x3b988858,0x3b39e9e2, +0x3b91e989,0x3bf38709,0x3b751813,0x3b07d3b5,0x3b0193bf,0x3b93b178,0x3bd8b1fc,0x3c161cfe,0x3c2716cf,0x3c252978,0x3c042746,0x3c02a3b4,0x3bd8072a,0x3ba9c462,0x3b8b0c59,0x3b367b50,0x3b95b00e,0xbb8b2add,0xbbbfabd4,0xbbc17358,0xba9456ce,0x3b16c609,0x3b12d8cd,0x3bb1909b,0x3b771b51, +0xbab51490,0x3a8c31de,0xbae6c34f,0xbb41fd70,0x3ab0b335,0x3bd9587f,0x3c81579e,0x3b71457b,0x3aed3662,0x3bb0b08b,0x3b827cd5,0x3bac6124,0x3c25a676,0x3b4597d8,0x39c13c6a,0x3b1194b5,0x3bba3a93,0x3c1db5c2,0x3c5aa55f,0x3c757d4b,0x3c641bb8,0x3c2c01c3,0x3c2c4432,0x3c0b276e,0x3bd00749, +0x3ba45dd1,0x3b80c5d6,0x3bf4961d,0xbc0e3cbc,0xbc5c1bbb,0xbc666566,0xbb1b8491,0x3b866a79,0x3b083879,0x3c177e9a,0x3c192fa0,0xb92bf8cd,0xb95336f4,0x3aa95cdc,0xba832188,0x3a998eb6,0x3bca0070,0x3c827f41,0x3b0be35e,0x3a261419,0x3b888f44,0x3ba256ca,0x3bacee83,0x3bab6bf9,0xba647e3a, +0xbaafa35e,0x3ae4611e,0x3bf29434,0x3c465caa,0x3c87e0a7,0x3c8677d7,0x3c6ecd02,0x3c4b0942,0x3c492855,0x3c16a8c7,0x3be2d049,0x3b8f8333,0x3b3831a3,0x3baa62b5,0xbc44d9c9,0xbc8bdd34,0xbc6dc7d6,0xbb9f7eec,0x3b421f99,0xb84bf94d,0x3bdfd576,0x3b1d9210,0xbc036c14,0xba84c465,0xbbea5781, +0xbc317861,0xbc6f79a7,0xbc500f37,0x3be27f46,0x3c5399a2,0x3c760c3b,0x3bdb99a3,0x3b72fdef,0xb9fd1d0c,0xbac5efe0,0x3b884531,0x3b8dee77,0xb759d02b,0x3bd7e539,0x3c1a76b2,0x3c84a15a,0x3ca8bdcd,0x3c9f4571,0x3bf915bd,0x3c000702,0x3bb5883c,0x3b15f7f9,0x3a4cff2e,0x3b323388,0x3be00607, +0x3a2eeece,0xba0842fa,0x3b92cc51,0xbc4d469c,0xbc04f588,0x3c418d1c,0x3c883b79,0x3c9f1465,0x3c504598,0x3bbee033,0x3c2df846,0x3cbc1802,0xbba50282,0xbbbbcafe,0xbbd335ba,0xbc00a0e7,0xbc1aee9d,0xbbdafea2,0xbb96f7eb,0xbada59ef,0xbae4e0ce,0xbb49cc95,0xba8064db,0x3aba9c6a,0x3bb2bdb4, +0x3bb03ff0,0x3b9d17b2,0x3b90287d,0x3bab9201,0x3c4b4737,0x3c02951a,0x3baa4abb,0x3b17b401,0xbb37d3b6,0xbb8b8f0e,0xbbb25272,0xbc167e28,0xbc04c9c9,0xbab96edd,0xbab3dcf2,0xbba199af,0x3a809d85,0xbcf31952,0xbd1945ea,0xbcbfd01f,0xbbdf7fff,0x3c1e9da2,0x3cdd167e,0x3c3ec3e9,0x3a5ead0a, +0xbc3f55a3,0xbc28fb6e,0xbbc1e3aa,0xbc0ff69d,0xbbc1f127,0xbab52636,0x3a2d02eb,0xb99dd685,0x3ad232f6,0x3b349a78,0x3b96375c,0x3b394955,0x3b8a3812,0x3b7ee154,0x3badb738,0x3c7a46d4,0x3bc4c160,0x3b62e439,0x3b970a93,0x3b652f3e,0x3b1d4bc3,0xbb82df8f,0xbb88eec3,0xbb9331b4,0xbb946a4b, +0xbbe03a3c,0xbbb2a0eb,0x3b344762,0x3b38e37a,0x3b587598,0xbb1562d4,0x3ac1d6ca,0xbc7b2a07,0xbcd28598,0xbc79ba46,0xbc86a4f3,0xbd00396f,0xbc39b35c,0xbc0d84e4,0xbc595736,0xbc1eeeea,0xbbbb2318,0xbac02ae9,0x39aab1de,0x3a9283cb,0x3a618e7e,0x3acc5b49,0x3b0eb5bb,0x3b2159d0,0x3a80f0dc, +0x3b57ddff,0x3c86f31c,0x3bed0a82,0x3b9e8817,0x3b22c9ad,0x3b55c69c,0xb856f645,0xbbd0b659,0xbbd6cf1c,0xbbff8d19,0xbba9aa0f,0xbba4c13d,0xbb509704,0xbacfa2d1,0x3bca028f,0x3be1c98a,0xbbe3e0cb,0xbc438a66,0xbcbebb6c,0xbd45e73f,0xbd4218aa,0xbd032474,0xbcb45a04,0xbc6131ef,0xbc1519ff, +0xbbffa8d8,0xbbc76ed3,0xbba62fe1,0x3ab86d5e,0xb9e5866a,0x3aafbba6,0x3a9397fe,0x3acffe50,0xb99c335b,0xbb3244f6,0xbb64387b,0xbb039a04,0x3c51d68b,0x3b56eb08,0x39e84fd8,0xbbc2e5d1,0xbc1da681,0xbc6eb3c1,0xbc66c715,0xbc276dce,0xbbc805d5,0xbaa35743,0xbb8c66c7,0xbc3f7456,0xbc9d8d83, +0xbcc61183,0xbceb3eb1,0xbcdb77eb,0xbc9f0500,0xbc8c73ed,0x3c2d28d3,0x3d18fb2d,0x3d154517,0x3d005599,0x3d0107ca,0x3cc3df91,0x3a954253,0x3b570149,0xb995249b,0x3ab39d04,0x38a96a70,0x3a83dc74,0xbbae71f5,0x3b00dda3,0x3b524ea8,0x3af1a138,0x3afe6109,0x3b01bbc7,0x3c0023e7,0x3a884ef9, +0xbb8f6b97,0xbb9a659f,0xbc32cb65,0xbc3ceaba,0xbbf1acb7,0xbbc5f19f,0xbc2901fb,0xbc2e47ca,0xbc8735ac,0xbc5bd254,0xbc56b096,0xbc69af80,0xbccc442e,0xbd4cf218,0xbceb7220,0x3d111fac,0x3d1d9e9a,0x3d1cfdd5,0x3d17331b,0x3d0de7ff,0x3ce1cbf7,0x3ccabf56,0x3cfa86b6,0x3cc857ae,0x3ca99918, +0x3c89f8f5,0x3c69fef5,0x3c5135d2,0x3c786d0b,0x3c13d47a,0x3b593a4b,0xbb8352f8,0xbbdcf736,0xbc0f09c6,0xbbe6ae51,0xbc432305,0xbc656af1,0xbc3f4d6c,0xbc8bc0c8,0xbc88a18a,0xbc53f149,0xbc7643a9,0xbc927716,0xbca36276,0xbcd86aec,0xbd038dd6,0xbd21781a,0xbd0b3ece,0xbca523d1,0x3c0c728e, +0x3caefd5f,0x3d194040,0x3d1a13b3,0x3d239dac,0x3d17c43a,0x3d034837,0x3ce5b43f,0x3ce9a9f9,0x3cf93534,0x3cd57849,0x3cb9b4e2,0x3c96bb9e,0x3c767cbf,0x3c57aafb,0x3c44e148,0x3c1839b0,0x3bba542d,0x3b3c664b,0x3a996dc7,0xbb221afb,0xbb5dc094,0xbbd1b7e1,0xbc0ad619,0xbc183cc4,0xbc4fb88f, +0xbc5b59e1,0xbc655cc0,0xbc83957f,0xbc88f0fd,0xbcb345b1,0xbc663019,0xbbf283c9,0xbb27c53b,0x3b8312f4,0x3c66ea07,0x3cfa4d58,0x3d01d817,0x3ce2eb3a,0x3ce47d39,0x3cd87ffb,0x3ccfaac0,0x3cd52aae,0x3cddd6c1,0x3cdc900f,0x3cd1c4b3,0x3cbd19e5,0x3cb30ad7,0x3ca14a88,0x3c95f7c1,0x3c7c4204, +0x3c3f56a8,0x3c49a425,0x3c205efe,0x3c159f13,0x3befd84f,0x3c045330,0x3b89f9b4,0x3b50c1db,0x3ae79180,0xb92fc91b,0xba6cd3e6,0xbb65540b,0xbbb56f98,0xbba677b6,0xbb946bcf,0xbb758b41,0x3bd8afe7,0x3c829ddf,0x3cc81ed9,0x3cf860cb,0x3d069179,0x3d0b746a,0x3cf57a55,0x3ceb3ea7,0x3cf66baa, +0x3d0dca3d,0x3d04fe27,0x3cf9e040,0x3cfd7d6e,0x3cef9362,0x3cf9dfd3,0x3cee0399,0x3ce3e995,0x3cda60dc,0x3cd027c9,0x3cc8f26f,0x3cc86865,0x3caf18ae,0x3c984aa2,0x3c988047,0x3c6131d4,0x3c6d6fa1,0x3bfdde9d,0x3c125e7d,0x3c4e844c,0x3c765d18,0x3c8b6619,0x3ca044b7,0x3cb1e769,0x3cc30bcf, +0x3cced159,0x3ccb168d,0x3cc55291,0x3c9e8bcd,0x3c9ba712,0x3ca01360,0x3c8415b2,0x3cafce7f,0x3cda37b9,0x3cb499e3,0x3cb2e034,0x3cb6b5bd,0x3cb62940,0x3cb71f64,0x3cb8a431,0x3cb9e6b5,0x3cb9e028,0x3cb593c0,0x3cb453cd,0x3cb25f83,0x3cb058f2,0x3caced2b,0x3ca9ab2d,0x3ca0ae0c,0x3c9b9177, +0x3ca60460,0x3c9c8139,0x3c9210b2,0x3c88eef7,0x3c9123fe,0x3c8e8caa,0x3c8aa40d,0x3c8a6299,0x3c8790af,0x3c84189e,0x3c872588,0x3c89e57c,0x3c96539c,0x3ca4a6e4,0x3cb1fe9d,0x3cc56f68,0x3cccb465,0x3cc34c0c,0x3cc3dc1a,0x3cbc4154,0x3d136f18,0x3bb66d9f,0x3b4ef4d8,0x3b4c3667,0x3b4caedd, +0x3b4f2be6,0x3b96276a,0x3b5e7032,0x3b402e4c,0x3b4a1677,0x3b2e1e4d,0x3b3f545c,0x3b7ff30d,0x3b44e9e9,0x3b2eb412,0x3b24d447,0x3b4fec79,0x3b6c09b5,0x3b660735,0x3b84a606,0x3b8a68af,0x3b8c90cc,0x3b869d64,0x3b80af07,0x3b6f5738,0x3b73717f,0x3b5ee5e8,0x3b446b1b,0x3b1c431d,0x3b19eb18, +0x3b09ecfd,0x3b417ac0,0x3b559498,0x3b46363b,0x3b6bdc30,0x3b56d7bb,0x3b24c0e3,0x3b4686a0,0x3b2e2722,0x3b013a7b,0x3b42764e,0x3bc0940e,0x3c249954,0x3b86d011,0x3b4a6fbc,0x3bb04488,0x3b816c8c,0x3b9c0463,0x3be6ee88,0x3b9147ed,0x3b73a47c,0x3b635f21,0x3b8066d6,0x3bb4ac2d,0x3bced03b, +0x3bf161b4,0x3bf56105,0x3be70779,0x3bd1fe34,0x3bbea4f2,0x3bacc331,0x3b9c757e,0x3b7cfa94,0x3b63db36,0xba164c9a,0xbaf7de69,0xbad02842,0x3b52193e,0x3b9ec64a,0x3b490b9b,0x3bd01da0,0x3bd4717a,0x3b5391de,0x3b5de1c7,0x3b2f1955,0x3a920808,0x3b292590,0x3bba2718,0x3c70a2d8,0x3b814e96, +0x3aa9c3d6,0x3bd1652d,0x3b53e0c5,0x3b9a1b65,0x3c147b20,0x3b918c39,0x3b3844e6,0x3b304457,0x3ba34fd4,0x3bdc4596,0x3c0894ec,0x3c2c700e,0x3c2b339f,0x3c143264,0x3c08fa77,0x3be89cc6,0x3bc1e5fe,0x3bb24a6f,0x3b52599c,0x3abf673a,0xbb9a5ede,0xbbac0a65,0xbbb213af,0x3adc7fc0,0x3b98ac87, +0x3ac6fee4,0x3bc9dd79,0x3b8ef2b8,0x38bd2675,0x3b05bc58,0x3986663f,0xbb4592d4,0x3b4639d6,0x3c066b04,0x3cb1783f,0x3b7cdd2c,0x3aad301e,0x3bfe4790,0x3b88d333,0x3bb3a22c,0x3c501cca,0x3b82d78b,0x3a8c685d,0x3b45c89e,0x3bbe860d,0x3c1b617f,0x3c462ef2,0x3c7a247f,0x3c759508,0x3c48cf6d, +0x3c31f9c1,0x3c0d8e25,0x3beaaee1,0x3bd57f26,0x3b7f4fe0,0x3a9affd9,0xbc2451a9,0xbc63efdc,0xbc6774c3,0x3a9c3bd8,0x3bdc4559,0xb9f4e7b5,0x3c289e28,0x3c1e06c5,0x3901a29b,0x3b150b58,0x3b348096,0x3977215a,0x3b176224,0x3be2723e,0x3cb8c3a1,0x3b3da5b0,0xb9e21eb2,0x3bdcbe7e,0x3b8875fd, +0x3bb1452e,0x3c1f08ec,0x3a7d6092,0xbaa04eba,0x3b4592f0,0x3bf9138f,0x3c407524,0x3c762b70,0x3c8e15dd,0x3c865e41,0x3c5eb88d,0x3c4d2b52,0x3c1e794b,0x3c093d42,0x3bd1d1e7,0x3b157363,0xbadbd388,0xbc61f669,0xbc8919ce,0xbc6c365a,0x395d1ca5,0x3bcde0cc,0xbaf82263,0x3be37a5d,0x3b0f3b43, +0xbb853f6a,0xb9668366,0xba43e2eb,0xbc14e39e,0xbc2e8e00,0xbc2585b9,0xbb89ba14,0x3c2800b0,0x3c7cfc3d,0x3c3f60cc,0x3bba680b,0xb9c54fdb,0xbaa34744,0x3b860da6,0x3bb94779,0x3ad62099,0x3bf900be,0x3c1ead83,0x3c655e0a,0x3cb4d5f0,0x3ca5944d,0x3c16e64a,0x3c29be8c,0x3bcf7f7b,0x3aca121f, +0x3ae6d82e,0x3b63b581,0x3ba208bb,0x3badda40,0x3b7a860f,0xbb86277e,0xbbc12951,0x39942a56,0x3c90242b,0x3c8fd2e4,0x3cacae03,0x3cac87e1,0x3c2c36a9,0x3bd4d915,0x3d13e9f9,0xbbad2100,0xbc171535,0xbb596700,0xbb1b76b4,0xbb50d4a7,0xbbb4c137,0xbaf8f6f5,0xb990ac7f,0xbabcaa4c,0xbb1e5392, +0xba66f8ec,0x3b2e5430,0x3bbad6e5,0x3bcc4a33,0x3bd07f2a,0x3b85ac50,0x3ba5d3db,0x3c3c502c,0x3be70886,0x3b98025f,0x3b4b73ff,0xbb903e39,0xbbd07c75,0xbb8ffd57,0xbbbb1195,0xbaa22764,0x3b71af73,0x3bbf51d6,0x3a6cb148,0x3b8c1404,0xbce51a2c,0xbd0ffc60,0xbc624f74,0xbc21835a,0x3b1d7aa8, +0x3cb14ded,0x3c1c8c58,0xb95da49e,0xbc0e8a1a,0xbc2a1052,0xbbcb8773,0xbbde1cc4,0xbb91b46b,0xbad70888,0x3a16734f,0xba8449b7,0x3ad8a209,0x3b221643,0x3b90be3f,0x3b8f2f4b,0x3c0e9275,0x3b429472,0x3b8fa202,0x3c873268,0x3c01d6b3,0x3ba3e73f,0x3b7fc20d,0xba29c8c6,0xbad3f240,0x3a1cfdbb, +0xbbaf7a41,0xbbbc18a6,0xbb119ff7,0xbb36cbdd,0x3a24af3e,0x3bc61d4a,0x3a9b115a,0x38c06521,0xbbb93933,0xbb3bf74a,0xbbde2ea2,0xbcb6b1db,0xbc8ae4af,0xbc910fdb,0xbd02d47c,0xbc575f15,0xbc1b5e41,0xbc1b11f0,0xbc18575b,0xbbc206f4,0xba52c640,0x3905220f,0x3aad224c,0x3ab69ee9,0x3b0a61a1, +0x3b68e05b,0x3bb1c1b5,0x3a8777e6,0x3ba0595a,0x3ca0c153,0x3c19a27d,0x3bae2cb3,0x3afc6ff8,0xbb5f02dc,0xbbc103ed,0xba48012c,0xbc23a401,0xbc2b9e8e,0xbbb71ba1,0xba45bb0e,0x3b40a0d6,0xbb7846a4,0x3c262012,0x3c1351fa,0xbc190b6e,0xbb1bf4b5,0xbb68d728,0xbcbaaba3,0xbd37b844,0xbd0c93b1, +0xbcc8db79,0xbc5667cb,0xbbbae58f,0xbbc4ce4c,0xbb9104c2,0xbb35cc1b,0x3ac078d9,0xb9f57155,0x3a3feeed,0x3b5fb104,0x3b01384a,0x384b4164,0xba8052a7,0xbb039224,0xba52a873,0x3c287cd9,0x3ba8d6b5,0x3ada5e23,0xbba3efe1,0xbc0e9b16,0xbc57eabe,0xbc016e39,0xbc115c29,0xbbc924ae,0xb9e45dc9, +0xbb339174,0xbc05a717,0xbca38e28,0xbcbb4cd4,0xbcdaf346,0xbcd078d9,0xbb93e996,0xbd64fbcf,0xbd0c5c0d,0x3beda2df,0x3c25893c,0x3c86f4cb,0x3c33dbe8,0x3b897dff,0xbc088423,0xbb861493,0xbbbd81ca,0xb9fed41c,0x3b057d90,0x3b4b6a02,0xbb895dbb,0x3aba21a2,0x3b5e8f8a,0x3bda2655,0xba8ec75b, +0xbaa1d05d,0x3bda9d2b,0x3a778fd4,0xbad40d2d,0xbc066716,0xbc0f9335,0xbbe17205,0xbb9c8813,0xbc3d4087,0xbc444eed,0xbb5efd4f,0xbc0cb9f8,0xbbe0a67c,0xbc0025be,0xbb3b892f,0xbc52cb43,0xbd31440e,0xbd577680,0x3ced640c,0x3d2018d7,0x3d2540ad,0x3d210562,0x3d1bf585,0x3cf74cba,0x3cdb48fc, +0x3cfaec8a,0x3cd53aa7,0x3cb18731,0x3c6b906d,0x3c53981a,0x3c47d5af,0x3c4a515e,0x3c07cd11,0x3b05ef63,0xbb82fbfd,0xbbe3e15a,0xbc0c30cc,0xbb674b8c,0xbbe5552d,0xbc146cc9,0xbbf30e15,0xbc217c6b,0xbc20d9a0,0xbc16c300,0xbc0b2b89,0xbc40fd77,0xbc801576,0xbc96a832,0xbccdb155,0xbd05a3fb, +0xbd176644,0xbcfa446d,0xbbd85f26,0x3c4e6a8b,0x3cf61915,0x3d1866e2,0x3d2026b0,0x3d1cd660,0x3d113691,0x3cf85ede,0x3cfcd5b2,0x3d029380,0x3ce7db61,0x3cc79357,0x3ca0f2ea,0x3c845382,0x3c4d6093,0x3c245ab1,0x3bf86cce,0x3b98e29f,0x3aea9162,0xb8cce722,0xbb1a9a83,0xbb3270d4,0xbc0b9ef4, +0xbc21d4ac,0xbc4430ce,0xbc59b574,0xbc6e4ee4,0xbc82399d,0xbc8fe9ca,0xbc9a533f,0xbccc72ad,0xbca32286,0xbc96ea8d,0xbc9824b6,0xbc44f48f,0xbb038c6f,0x3c5528ee,0x3ca996a5,0x3caf2d79,0x3cc49786,0x3cc4082d,0x3cc17d24,0x3ccf4758,0x3cded686,0x3ce4524b,0x3cdf530f,0x3cc65b41,0x3cb85184, +0x3cad21e1,0x3c8c56c3,0x3c64abf6,0x3c242997,0x3c230171,0x3be39141,0x3bc82195,0x3b65e031,0x3b82dae0,0xbb041cea,0xbb8ff59c,0xbbb47dc8,0xbc09fbc7,0xbc2d490f,0xbc633796,0xbc7b53a5,0xbc721159,0xbc755191,0xbc66a43c,0xbc01ce8a,0xbb28f6ce,0x3afecc7c,0x3c3921da,0x3c934e33,0x3cb5cf39, +0x3cad0b48,0x3cb36a96,0x3cb8a9d9,0x3cf0a148,0x3cd7cc49,0x3cd1f823,0x3cd5a4b5,0x3cc7071f,0x3cdee477,0x3cc4da22,0x3cbf63b8,0x3cb0879c,0x3ca77558,0x3c9999d4,0x3c94882b,0x3c71f2b5,0x3c4b4b2c,0x3c3ebbea,0x3bcefd51,0x3bd87607,0x3b03293a,0x3b6d8736,0x3ba36196,0x3bdebdf6,0x3c0aa66b, +0x3c3036a7,0x3c4c1c07,0x3c695fba,0x3c8be9ab,0x3c918219,0x3c9799da,0x3c91da18,0x3c97b839,0x3c8ff1fb,0x3c57d09b,0x3c86770c,0x3ca66ae0,0x3c8de7eb,0x3c89a70f,0x3c9d9bbf,0x3cab55fd,0x3cb85429,0x3ca01419,0x3cb072d2,0x3cc38612,0x3cc03079,0x3cbbf70f,0x3cb85a4d,0x3cb618e0,0x3cb4be36, +0x3cb22efa,0x3c92c7b5,0x3c814614,0x3ca3853d,0x3c9096a4,0x3c7a1d1c,0x3c53f022,0x3c58cf2a,0x3c5481fb,0x3c4ab031,0x3c3f00ac,0x3c337ba6,0x3c2aa1a6,0x3c2d4e3c,0x3c387ddf,0x3c48a112,0x3c5bd72e,0x3c6f2c23,0x3c856e7d,0x3c914718,0x3c922459,0x3c96cbc0,0x3c92a90a,0x3cf0cbcd,0x3bd628d7, +0x3b82c4a4,0x3b942ee7,0x3b965f4c,0x3b8be154,0x3bb491d9,0x3b852ea3,0x3b74c27e,0x3b82c979,0x3b640b78,0x3b72f88b,0x3b97ee40,0x3b766648,0x3b60dc17,0x3b5aae76,0x3b800326,0x3b8a3197,0x3b8426e4,0x3b9a06d4,0x3ba0e6ac,0x3ba3f589,0x3b9923fd,0x3b912dd5,0x3b890f5c,0x3b8c643e,0x3b7ec41c, +0x3b48b826,0x3b41c6fa,0x3b469c53,0x3b319e8d,0x3b789cf1,0x3b864d61,0x3b6c7f52,0x3b8d09b4,0x3b8536a5,0x3b57eecc,0x3b74dd91,0x3b73eb1f,0x3b7bc6c0,0x3b827f38,0x3be64700,0x3c3c82cd,0x3b9ebb67,0x3b7f2cf1,0x3bcc5b71,0x3b94c450,0x3bb497e6,0x3bf089da,0x3baaca6d,0x3b97ad50,0x3b8e67ac, +0x3b96f5c1,0x3bc24400,0x3bd1d629,0x3bfe623f,0x3c051d71,0x3c0493cb,0x3be9e637,0x3bd6945a,0x3bc3588e,0x3bad57ba,0x3b7a3fe5,0x3b045ce7,0xb9826b55,0xba6daa29,0xba0f013c,0x3ba27267,0x3bc933de,0x3b5a7388,0x3bdfc14b,0x3be3031b,0x3b7bb299,0x3b86e011,0x3b8b4ca8,0x3baa609d,0x3bb92dfd, +0x3c037637,0x3c8246ca,0x3ba7ccab,0x3b0e8278,0x3befe09b,0x3b87ce28,0x3baab157,0x3c1ac14f,0x3ba9d200,0x3b7aedd7,0x3b6e48ee,0x3bb744e6,0x3bdd7ec6,0x3bfc32aa,0x3c2f3d18,0x3c3269f9,0x3c2cf93f,0x3c0f4d47,0x3bf25c89,0x3bcdfad2,0x3bba7396,0x3b3c2808,0xbac96368,0xbb97dac1,0xbb78e681, +0xbb856367,0x3b88b119,0x3bde3649,0x3af2a395,0x3be8046f,0x3bb40499,0x3ac530c9,0x3b4e3376,0x3afbb85e,0x3a29d109,0x3b7737ea,0x3c238c44,0x3cc4029d,0x3b9609c6,0x3ad3c2c4,0x3c0edeb9,0x3b91e323,0x3bb62ea7,0x3c5546a5,0x3b967619,0x3b049257,0x3b6b60c1,0x3bcce3ff,0x3c14dd0c,0x3c28039d, +0x3c75f23b,0x3c7aac9e,0x3c5df143,0x3c3b905f,0x3c16865e,0x3bf57ede,0x3bd48aea,0x3b185a09,0xbbac51c3,0xbc340d66,0xbc504277,0xbc3e0443,0x3b9763ad,0x3c0ebf9b,0xba54288e,0x3c22e581,0x3c1ef064,0x3a09b8da,0x3b541b6d,0x3ba6b450,0x3befb4fd,0x3bba7856,0x3c25c6db,0x3cd11b28,0x3b7e775b, +0xb7c9fafe,0x3c13df69,0x3b9244c0,0x3bb91240,0x3c4a83c3,0x3b1b77f7,0xba2816b1,0x3b909733,0x3c064c7c,0x3c3b1760,0x3c57ff41,0x3c8f9e2e,0x3c8d447b,0x3c7765ac,0x3c47d707,0x3c16caf8,0x3c075546,0x3bc2876b,0xb8f98336,0xbc09d142,0xbc740cd7,0xbc690ade,0xbc428fdf,0x3b819d80,0x3c1c72a2, +0xbabfed7c,0x3c0e3c2e,0x3b748ef1,0xbadd01ce,0x3969e45e,0x3ad3250d,0xbbb46509,0xbc0fa730,0xbc31b99d,0xbc22e589,0x3c1e06bc,0x3c873af0,0x3c6b4f4c,0x3bf2c56c,0xb9d36128,0xbacff2e3,0x3b7b9063,0x3bdbfd6e,0x3b33e59e,0x3c1b9850,0x3c28f224,0x3c52c34f,0x3ca4a3f9,0x3c9cdae9,0x3c7161d5, +0x3c2e72c2,0x3ba4a018,0x3ab27e9c,0x3abb05fc,0x3b4008fd,0x3b96720b,0x3bd64cd4,0x3bcc02a6,0xbb9321f0,0x3ba1ecbe,0x3beaf34a,0x3c328717,0x3c495d8f,0x3ca3a47f,0x3d0027e0,0x3c6f71f4,0x3ac9a9bb,0x3d2b91bc,0xbb9585a5,0xbc2eabbf,0xba91fea9,0xba83de3b,0x3a5855dc,0xbb05ffa5,0x3ab4587f, +0x3b44ba44,0xb93454e4,0xba8d7636,0xba0cd2c8,0x3b9b3a82,0x3bb2e527,0x3be59e95,0x3bfe46dc,0x3ba9ddd2,0x3baf94df,0x3c1ce80e,0x3ba075f3,0x3b206648,0xba9a4d29,0xbb85e09c,0xbb92ce25,0xbae7c4e2,0xb9211d86,0x3bbb6bd2,0x3c099984,0x3bc7a223,0x3ba211d2,0x3c530e31,0xbc900b38,0xbcdea640, +0xbc271e19,0xbc4bdb93,0x392596be,0x3c84d8eb,0x3b83b53b,0xbb460ea0,0xbbe21ae4,0xbc3a8127,0xbc0a98fc,0xbb8a9ddf,0xbb2f3a4b,0xbac352ef,0x3a00b2c3,0xb9d25dd3,0x3b278597,0x3b147216,0x3b8d0ed9,0x3bc2dd24,0x3c2118b5,0x3b377562,0x3b8c0db2,0x3c7a0519,0x3bf95ca9,0x3b980e41,0x3a30c006, +0xba6978dc,0xba91a592,0x3b396f83,0xbaff6afa,0xbabf8494,0x3bb12896,0x3b0a9a31,0x3bbc921b,0x3c131191,0x3ab1c204,0x3a2fe86d,0xbbb66023,0xbb85d84b,0xba2daea5,0xbc359e25,0xbc804d19,0xbc888d44,0xbcdcc90b,0xbc6fee3f,0xbc3c5e48,0xbbb4ea01,0xbc03a603,0xbbab794e,0xb97dc2f3,0x3973310d, +0x3af6306e,0x3af7313d,0x3b5e53a5,0x3ba0ae8d,0x3bd67f0d,0x3af226af,0x3bc210f6,0x3c80e0b9,0x3c00fcc8,0x3babf77c,0x39a7e5e1,0xba631fc5,0xbaf951a3,0x39a2bd87,0xbc032f12,0xbc044dac,0xbb1da700,0xba6693a9,0x3b0aaf8d,0xba76abd8,0x3bdcc4f5,0x3c03dce2,0xbb974fa6,0x3af73bf6,0x3ad82473, +0x380169e7,0xbd05453d,0xbcfaa5ef,0xbcb6b3ae,0xbc5b3ed9,0xbb853530,0xbb728db6,0xbb193372,0x394a5b99,0x3af94f82,0xba266d4b,0x38c72884,0x3baebf2c,0x3b342fd4,0x3ab86029,0x3a5e188c,0x3b0abfa5,0x3b3645c9,0x3bafad00,0x3babc766,0x3b0ee574,0xbb6d5737,0xba5d14d4,0xbb664a8f,0xbb701a69, +0xbc1689fb,0xbc0524ea,0xbae72d01,0xbbc526d4,0xbc099554,0xbc6c6946,0xbcbb13fd,0xbce762ed,0xbca0a18a,0xbbb1e77e,0xbd8cb26f,0xbd84f844,0xbca203b2,0xbc44cd54,0x3b28f55f,0xbbc5241c,0xbc3de618,0xbc536aa2,0xbc240d5a,0xbc2f9f0c,0xbadf12a2,0x3b5753f8,0x3ba227e2,0xba9af31f,0x3a1eba45, +0x3b2bdaa7,0x3c02b8c2,0xbaba5762,0xba88f722,0x3bc059a4,0x3baa4794,0x3b80ca4e,0xbbaf5022,0xbbfd7177,0xbc10e423,0xbc0574d6,0xbc3cee23,0xbc0955e7,0xbbab70ec,0xbb5b7304,0xbb256b29,0xbba0051f,0xbb13fdf1,0xbc1ecd45,0xbce2d520,0xbd612447,0x3c3b7d51,0x3ce71b95,0x3d0938e2,0x3d07bbf3, +0x3d0830ca,0x3ce395ab,0x3cc7df23,0x3ce1fb77,0x3ccc0722,0x3cb756cb,0x3c4cd2c2,0x3c3d7a17,0x3c1b6b06,0x3beaf7ff,0x3bd4de9c,0x3b10d4ed,0xba1d8c28,0xbb6433d1,0xbb95013d,0xba93cba2,0xbb40c53d,0xbba1fd91,0xbbc89343,0xbb7c0eda,0xbba8bddc,0xbb8bee83,0xbb6ec16d,0xbbe956ee,0xbc492089, +0xbc3de351,0xbc909dcf,0xbccd2eb4,0xbd01d0f9,0xbd041d87,0xbcbdbae7,0xbb5e0554,0x3c9698a7,0x3d0938f4,0x3d0a5dd8,0x3d117be1,0x3d15dc4a,0x3cf500d4,0x3cfd1e8c,0x3cf227d9,0x3ce03c55,0x3cbd1f63,0x3c9e6cad,0x3c858d8d,0x3c5952ee,0x3c262e49,0x3c009cba,0x3bb419e8,0x3b16ac99,0xbae675a3, +0xbb978d20,0xbbdfb637,0xbc48fafc,0xbc59afb3,0xbc855582,0xbc73afcf,0xbc866fa7,0xbc83e582,0xbca1684e,0xbcae5885,0xbcd9308b,0xbcc07a11,0xbcc8b022,0xbce44533,0xbcab4b7c,0xbc49844f,0xbb37c6ab,0x3c217cf6,0x3c8c0b31,0x3cabb9ce,0x3cc2ed7e,0x3cc38ae0,0x3cde0c1c,0x3ce496b3,0x3cdfc0b6, +0x3cd21d63,0x3cba8745,0x3ca7dbaf,0x3ca257cc,0x3c71c2a4,0x3c579fc5,0x3c228112,0x3c0ee6e4,0x3bbfefe8,0x3b741061,0x3a0f4a8b,0xbb3b4452,0xbbfd916e,0xbc2a5120,0xbc3c6794,0xbc7d016e,0xbc8df91a,0xbca095d5,0xbca7304f,0xbca6d741,0xbcb195be,0xbcb6f077,0xbc99598e,0xbc8617a1,0xbc66be6d, +0xbb8fd325,0x3b914985,0x3c3cfb7a,0x3c6199eb,0x3c41a0e2,0x3c4c35f3,0x3ca7328d,0x3c81f5eb,0x3c80836b,0x3c8ddb0c,0x3c824e25,0x3cacf83e,0x3c844188,0x3c83d6fa,0x3c5d4a1c,0x3c44dea3,0x3c1181f5,0x3beefac3,0x3bb586aa,0x3ba3e3f7,0x3bae5911,0x3b28394f,0x3b98478c,0x3b5cb68a,0x3b823165, +0x3b2f2faa,0x3b670395,0x3b559cd7,0x3b597dd1,0x3b6914f5,0x3b98505b,0x3c08445a,0x3c1a9e29,0x3c26f296,0x3c38e921,0x3c38e945,0x3c2be065,0x3bdefb0e,0x3bfef345,0x3c2ad5e6,0x3c12f2d9,0x3c09d0b0,0x3c43249b,0x3c7ad6ca,0x3c9733dc,0x3c458331,0x3c76ddbf,0x3ca18084,0x3c9dcdbf,0x3c958c57, +0x3c90121a,0x3c8de3bf,0x3c8eb122,0x3c8b2bd7,0x3c3d3314,0x3c0b0bb3,0x3c7524d2,0x3c37dc7e,0x3c02bb77,0x3ba13669,0x3b954cee,0x3b888505,0x3b5b4707,0x3b234972,0x3b062c10,0x3aca3396,0x3ab1a9f5,0x3af0d60d,0x3b083795,0x3b2adcfa,0x3b7077ec,0x3b956500,0x3bd04248,0x3bf71336,0x3c10a25f, +0x3c148455,0x3c626ca1,0x3be65ebc,0x3b908a8d,0x3b9fabef,0x3ba6900e,0x3b9ee861,0x3bc0adb2,0x3b8b785d,0x3b8546bd,0x3b90408e,0x3b84a776,0x3b8ab6b4,0x3ba011a4,0x3b8ac3ad,0x3b831f11,0x3b801602,0x3b88adb7,0x3b90e086,0x3b8ec427,0x3ba30fbf,0x3bab3318,0x3bb3506d,0x3ba44bee,0x3b9a653c, +0x3b9197e9,0x3b948348,0x3b8741eb,0x3b508d1e,0x3b56ffed,0x3b590d61,0x3b44bb97,0x3b8609f4,0x3b8f21b0,0x3b7c0766,0x3b930d83,0x3b8f284e,0x3b71d8a1,0x3b86e6b3,0x3ba5dc20,0x3bacece1,0x3bc217b8,0x3c00d56b,0x3c3f58f4,0x3ba81194,0x3b8dc20f,0x3bd148f4,0x3ba3ee83,0x3bc31c09,0x3be728fc, +0x3bbc3c92,0x3bade360,0x3b9e88b4,0x3ba08552,0x3bc155c8,0x3bcc0d76,0x3bfddeec,0x3c0834d4,0x3c0f4827,0x3bf785ac,0x3be23539,0x3bc9fd6e,0x3bb0d10d,0x3b70a204,0x3ab8531b,0x398fbd9a,0x391f14bd,0x3a50a57c,0x3bb3b2f4,0x3bd17eba,0x3b85e634,0x3be1d170,0x3be82a59,0x3b93b732,0x3ba89be6, +0x3bc27bba,0x3bef88bc,0x3c07990e,0x3c1d3aca,0x3c7e7559,0x3bb3798b,0x3b277cb4,0x3be80e3f,0x3ba2ef59,0x3bc64daa,0x3c0d22dc,0x3bc47b80,0x3b9e3d77,0x3b85aaf1,0x3bb7670b,0x3bcdca61,0x3be983a2,0x3c290e84,0x3c3401a7,0x3c4670ea,0x3c1718f0,0x3bff4900,0x3bd2af28,0x3bbb62ee,0x3b406189, +0xbb163dbb,0xbb7a8aff,0xbb2c722b,0xbb398b4f,0x3b972ae6,0x3bdfca6e,0x3b132f8b,0x3bdf8984,0x3bc1e212,0x3b1fb88f,0x3b97cc0a,0x3bb9f540,0x3ba3cb7e,0x3c091b09,0x3c4d3cb1,0x3cc2fab2,0x3ba69ca2,0x3b067e4a,0x3c09cfec,0x3ba1fe15,0x3bc046d9,0x3c42431a,0x3baf3728,0x3b510844,0x3b717ad3, +0x3bce3ced,0x3c069abf,0x3c0864e0,0x3c686390,0x3c7609ed,0x3c75c5fb,0x3c45d6c4,0x3c1d1642,0x3bf1a68f,0x3bce8337,0x3ab5634f,0xbbf43ed9,0xbc255c22,0xbc27a4de,0xbbee5ba5,0x3ba21973,0x3c08104c,0x3a95d987,0x3c13d5bf,0x3c1f190d,0x3aea79fc,0x3bbd51b5,0x3c0f0b9b,0x3c4582dd,0x3c39b86a, +0x3c6a20d1,0x3cdddf25,0x3b9767c6,0x38944c39,0x3c1bb33c,0x3bab2b55,0x3bcce435,0x3c59892d,0x3b6473ad,0x39fec894,0x3ba3fb52,0x3c08ae64,0x3c289a27,0x3c33208a,0x3c89f5b0,0x3c905608,0x3c947b75,0x3c57098d,0x3c20b209,0x3c06072e,0x3bbf36b6,0xb9034857,0xbc17fcc9,0xbc5dbc3d,0xbc37c412, +0xbc18f6f0,0x3b8b7250,0x3c10411c,0xbab5d0bb,0x3c05e6fd,0x3b866f76,0xb984536e,0x3b329231,0x3aaa6682,0xbbabd78c,0xbc1bb129,0xbc510f49,0xbc7690a0,0x3c1665b2,0x3c90a8c8,0x3c8625a7,0x3c211ea8,0x3918f8d2,0xbb2e6d3a,0x3b668e54,0x3be5e57b,0x3b59912a,0x3c39c7f8,0x3c30193f,0x3c4cf32b, +0x3c7860d6,0x3c80f1af,0x3c836770,0x3bd991b6,0x3b3e6bf9,0x3b23adf4,0x3a62d4b1,0x3ad663b9,0x3a568cb8,0x3c0bd38c,0x3c07279e,0xbc2d4058,0x3c2d8c7f,0x3c446440,0x3b88e3af,0x3c27f4bc,0x3cab8ddf,0x3d208342,0x3c9bd118,0xb98898a9,0x3d1d1c5a,0x3914ca76,0xbc0b90a8,0x3b2c9997,0xbb706d3a, +0xba9d2dc1,0x3a01379b,0x3b24345e,0x3b9d4174,0x3b134c03,0x39244b80,0xb8228f99,0x3bb97987,0x3b955c11,0x3bed58cf,0x3c146cbc,0x3c0076ee,0x3bf7d681,0x3c19cd8a,0x3bbff05e,0x3b787331,0xb9823316,0xba63b911,0x395e9add,0x3b855c57,0x3b8241a2,0x3c0e1d43,0x3c46c4ba,0x3b859d97,0x3ba29c2e, +0x3c7e0880,0xbc2045d2,0xbc986169,0xbc271c75,0xbc48f51c,0xbb875f62,0x3c3e7a5b,0x3aef22cf,0xbb51346f,0xbb710232,0xbc3c6a59,0xbc35c25d,0xbb2cbf3e,0xbb06e444,0xba84c49a,0x3a878271,0x3a8e6702,0x3b7a6de2,0x3b093570,0x3b9059d8,0x3bfb7785,0x3c0e74d9,0x3b86a402,0x3bb97e4b,0x3c4427e1, +0x3c016e8d,0x3bd8fed4,0x3b03b1f0,0x3b1bf257,0x3aa4530f,0x3b43d898,0xbab16d01,0xba124a47,0x3c13aaaf,0x3bb4cf18,0x3c1974bc,0x3c5630cf,0x3ac81046,0xba9a0f3f,0xbbfc741d,0xbbfdd16f,0xbabe65f9,0xbb87af64,0xbc2708a4,0xbc47b8c2,0xbc9c4e29,0xbc4ebdc2,0xbc2b736a,0xbae1fcfd,0xbbc5553a, +0xbb88a51f,0x394ec9b2,0x3a54dd45,0x3b3ce1be,0x3af4c08b,0x3b9498cd,0x3bce38ec,0x3be2f51a,0x3b6d1195,0x3bcb27d2,0x3c242689,0x3c0f567a,0x3c0ac616,0x3b7fe6d9,0x3b9430bd,0x3b3f8989,0x3aaac99d,0xbbed2ff7,0xbc02aef0,0x3aa75561,0xba9035f4,0x3a527615,0x3b6b6a63,0x3b0d6a78,0x3ba6cf94, +0xb8ea87fa,0x39d710c9,0xb92d9e7b,0x3b259f73,0xbc9ec1a6,0xbcc0eca6,0xbc8eddab,0xbc5da768,0xbb78f1a2,0xb9fa34c7,0xb9d7c23e,0x3b250296,0x3b602816,0xb9a7ce91,0x39edbb4c,0x3bbeb201,0x3b8c8102,0x3b90f1d5,0x3b983fc4,0x3bddc52a,0x3bc98ab8,0x3b6e5f3c,0x3bf41eea,0x3bb43887,0x3acdd734, +0x3b76af36,0x3b3a08b1,0x3ab216b6,0xbbcaacde,0xbbba00d8,0x3a8f648e,0xbbd4678b,0xbc1016fd,0xbc385344,0xbc94c49b,0xbcae5b32,0xbc4158a1,0xbbcffe58,0xbd58a10d,0xbd8cbf83,0xbd106d3c,0xbccdafef,0xbbf930e2,0xbc8e67e3,0xbcaf3866,0xbc6772b9,0xbc59d470,0xbc6499b1,0xbb835598,0x3b23292f, +0x3bbdf319,0x3b0aa8ca,0x3a9f3cdc,0x3b0c164e,0x3bd5b7b2,0x39869a61,0x3adcf57c,0x3bce102d,0x3bd1aae8,0x3b9b3445,0xbb0b6f21,0xbbb50217,0xbbec6e5f,0xbc04eed3,0xbb47751f,0xbb025429,0xbc14b9e7,0xba703c02,0xbb1b66bf,0xbbf01cf8,0xbc2fae88,0xbc7d02d0,0xbcb4bbd7,0xbd2730d4,0xbc2941bc, +0x3be06c00,0x3c8bc2b1,0x3c98b4eb,0x3c9c4e65,0x3c9bff74,0x3c90ca02,0x3cb76036,0x3ca009bc,0x3c9d67e3,0x3c2ccb11,0x3c20bf3e,0x3bd6d758,0x3b9e9483,0x3bc8c114,0x3b90bb1e,0x3b886f25,0x39e18a23,0xbab359a2,0xb9cd44f2,0x39c0edb8,0xba83dc25,0xbaea98a0,0xbac47be3,0xbb7b533d,0xbb73fac2, +0xbb8e4bd4,0xbbec8e1e,0xbc335223,0xbbe9e54c,0xbc269674,0xbc5aa78b,0xbcae4ce3,0xbcd5624e,0xbce5c289,0xbc94bf6a,0x3b855f8d,0x3cc5d0e5,0x3cbf2b62,0x3ce0cbe7,0x3d02a4be,0x3cd3feeb,0x3ce27341,0x3cccef4c,0x3cbee38c,0x3c9de79b,0x3c8bbc22,0x3c7467c2,0x3c5b8d9e,0x3c28c367,0x3c093841, +0x3bc88e4c,0x3b19235f,0xbb02a031,0xbbb728a5,0xbc04c427,0xbc2d5cad,0xbc518f7c,0xbc7f0cbe,0xbc7f179c,0xbc8fd9b1,0xbc90f06e,0xbca7ce6b,0xbcab3016,0xbcc4e2e3,0xbcb73bbb,0xbcc53cbe,0xbce8c713,0xbcbcb0f6,0xbc9147e2,0xbc611f33,0xbac60e7a,0x3c45f9cd,0x3c8a283f,0x3cb925c5,0x3cb56f92, +0x3cdd39b9,0x3cd91815,0x3cc6f956,0x3cb26e61,0x3ca27e92,0x3c904379,0x3c8addb8,0x3c48a98b,0x3c447b70,0x3c19fdc5,0x3bedc1c4,0x3b9366a2,0x3ab1380c,0xba830cd0,0xbbc64786,0xbc04dccf,0xbc33ed7b,0xbc4f81de,0xbc894d1b,0xbc95e5f6,0xbca5c787,0xbcb0bf1a,0xbcb0a243,0xbcbdefc7,0xbcc29ccd, +0xbcbf116b,0xbcc50a33,0xbcc64a13,0xbc81a8ea,0xbbe367d4,0x398559e7,0x3bd43a0c,0x3ad255a3,0x3b1bb41d,0x3c1a8773,0x3b8953ae,0x3b5ca08b,0x3bcef447,0x3bb5f42c,0x3c432927,0x3bdbbf19,0x3bf1f4bd,0x3ba9b65f,0x3b82254e,0x3a8b7972,0xba045483,0xb9b95dab,0x398767e7,0x3aeac787,0x3a83998d, +0x3b8c9a62,0x3b46148b,0x3b0ed281,0xb97c16d5,0xba12fcc4,0xbb292a25,0xbb86ec5b,0xbb9f15cd,0xbb9db9aa,0xbae221f7,0xba84e80e,0xb9d236d8,0x3b0f9d91,0x3aceb54d,0x3ac9eed0,0xb9000297,0xb9adfff2,0x3a21431a,0x3adf10a7,0x3ac3ed7c,0x3b89517d,0x3bf8452a,0x3c2c1789,0x3b9488ed,0x3bd58bd1, +0x3c322deb,0x3c2c97fc,0x3c18d48e,0x3c0b62e5,0x3c05a99a,0x3c03e477,0x3bf23a28,0x3b666d1d,0x3a896ae4,0x3bc0fdf5,0x3b2a86c5,0x38a56a21,0xbb1682d9,0xbb2fce2a,0xbb58168a,0xbb86ac41,0xbb9c2d09,0xbba36627,0xbbb24e5e,0xbbbf11e8,0xbbb146e5,0xbbb8c12e,0xbbbbb8d1,0xbba9f506,0xbbaad90a, +0xbb5bc97f,0xbacfadcc,0x37f53e91,0x3a913454,0xba37ff1f,0x3be0d079,0x3b8f59cb,0x3b907591,0x3b9d3e86,0x3ba2d951,0x3bc0a951,0x3b84dffa,0x3b867630,0x3b955334,0x3b931153,0x3b983dc2,0x3ba17c7e,0x3b96717f,0x3b9303ac,0x3b8b7e21,0x3b8819e1,0x3b8c631d,0x3b970589,0x3ba48b85,0x3ba6f6d0, +0x3bac7594,0x3b9fcea4,0x3b95a35e,0x3b8c4fcc,0x3b8e4905,0x3b82e466,0x3b4f9070,0x3b568353,0x3b53d7c1,0x3b410736,0x3b7f5a38,0x3b876c65,0x3b795548,0x3b8bd95a,0x3b8cb310,0x3b7e1395,0x3b87c9aa,0x3bbddf50,0x3bb5d8cf,0x3bedfc98,0x3bfa5b34,0x3c2db678,0x3b9c8338,0x3b8d4c29,0x3bc342fa, +0x3babaebe,0x3bcd922b,0x3bd90c85,0x3bc765d2,0x3bb7b70e,0x3ba03340,0x3b9f4514,0x3bb4c712,0x3bc9932a,0x3bef6201,0x3c06216b,0x3c0e3b96,0x3beebc8c,0x3bd7c294,0x3bbccff9,0x3ba503a5,0x3b5eff31,0x3ab04fec,0x3a394e4c,0x3a4f78f6,0x3aab3240,0x3ba0e7ab,0x3bb7b4ec,0x3b8ab37d,0x3bc31fef, +0x3bce0dad,0x3ba5f0bf,0x3bbc6b4d,0x3bd7932a,0x3be37eee,0x3c0f88f3,0x3c160156,0x3c5bd61b,0x3ba5a35d,0x3b290711,0x3bc62ebb,0x3bba4083,0x3bde345a,0x3bf9ea9c,0x3bd79126,0x3bb73af9,0x3b7f696a,0x3ba857ae,0x3bb4f3ee,0x3be6a5f5,0x3c1b030b,0x3c2d9f93,0x3c4aae48,0x3c116010,0x3bf85364, +0x3bc44922,0x3bacdb9f,0x3b39d260,0xbafcfa05,0xbb366d8e,0xbaecf3a4,0xbb2332dd,0x3b7efa36,0x3bbc9c8d,0x3b32ab39,0x3bbda8ae,0x3bb73831,0x3b8a8158,0x3bbe435e,0x3bf9afd4,0x3bd380b6,0x3c334870,0x3c49e4f2,0x3ca4ef0d,0x3b92f039,0x3afe254a,0x3be959ed,0x3bbacc3c,0x3bdf3e9d,0x3c2aef41, +0x3bca822f,0x3b8d7e60,0x3b4e204b,0x3bbe9d74,0x3be6d125,0x3bfb5fd9,0x3c502406,0x3c697e21,0x3c82ed14,0x3c3bee86,0x3c13f268,0x3bd62059,0x3bb5b636,0x3a42dd6b,0xbbec5c87,0xbc0ad454,0xbc01e3cd,0xbbb9194f,0x3b585760,0x3bd18108,0x3b130163,0x3bd5b5c3,0x3bf817d4,0x3b957db1,0x3bfcb701, +0x3c17bbc1,0x3c311fae,0x3c5798d5,0x3c6e83d9,0x3cc2a433,0x3b90e29a,0xb932320d,0x3c08ac24,0x3bc5a929,0x3bef66cd,0x3c5343df,0x3b904663,0x3ad40f6e,0x3b964366,0x3c044b91,0x3c12981e,0x3c1f7d89,0x3c76b213,0x3c91455f,0x3ca301c8,0x3c53a77d,0x3c1d625d,0x3bf0d1f4,0x3baa43b0,0xb75f7c24, +0xbc094a73,0xbc364552,0xbc175b74,0xbc1a0609,0x3b5718d7,0x3bda99e2,0x391967a6,0x3bd35e71,0x3b839141,0x3b6fc333,0x3bb141e7,0x3bcd1a29,0xbb27a16f,0xbc0f2d09,0xbc5a229e,0xbca23557,0x3bd116e4,0x3c87daa6,0x3c944623,0x3c4f601b,0x3ae31acc,0xbb6755b1,0x3b4a0b4e,0x3bd3931f,0x3b88d785, +0x3c4688fb,0x3c2b21f5,0x3c3a7b12,0x3c228eed,0x3c2b601b,0x3c3fe5e4,0x3b606d0e,0x3b34efbc,0x3b8eadf6,0x3a949d1f,0x3b13d88f,0x3aaac223,0x3c7bbd8d,0x3c662f97,0xbc4fb01a,0x3c098fb8,0x3c137541,0x3a92b78e,0x3bad513e,0x3c9227ee,0x3d25d01d,0x3cb7027b,0xbbd8196e,0x3cbf6d83,0x3be4e263, +0xbab8c681,0x3bb8f671,0xbb2a47cd,0xbb444a0d,0x39161536,0x3b26e287,0x3bade88b,0x3b8b6112,0x3acdaa65,0x3a6655bb,0x3bb690eb,0x3b843d08,0x3be9dea7,0x3c26cd72,0x3c2372a1,0x3c2a8cc7,0x3c198a35,0x3bef5c2c,0x3bc4f1e2,0x3aa8c8d0,0x3b379d3f,0x3b3c765d,0x3b8a0880,0x3bd10c32,0x3c12b291, +0x3b9cf961,0x3b8a24a5,0x3b924767,0x3c04edca,0xbba55c4b,0xbc4b0854,0xbc424bad,0xbc64b7b3,0xbc294e24,0x3b998ced,0x3aced77c,0xba921def,0xba22cee6,0xbc10a1e2,0xbc36633b,0xbaa452ad,0xbac7add6,0xba260cca,0x3b11c9b3,0x3b0ee6d0,0x3b8b492b,0x3b1d93bb,0x3b88f66a,0x3c0ee310,0x3bf23198, +0x3bb75c8a,0x3bc63423,0x3bf14d32,0x3c1289a3,0x3c12f0dd,0x3b27f6db,0x3b50b814,0x3ac77b46,0x3b1ededd,0x3ae50c6c,0x3a93b271,0x3bbbf9b5,0x3be90f02,0x3c467d8e,0x3c83a02e,0x3b21cf34,0xbb52b92e,0xbc35b2ee,0xbc35b894,0xbb0ce96e,0xbb27a9f7,0xbbb685b6,0xbbe6ef4b,0xbc315b2f,0xbc2b7cb5, +0xbc12159b,0x3b2e0a43,0xbb786fef,0xbb2b2ee8,0x3a5a628a,0x3ac730f2,0x3b5a79fd,0x3b038619,0x3b9d8577,0x3beb7e9b,0x3be235d6,0x3ba02b40,0x3bc788da,0x3bdbbe7e,0x3c2c4a43,0x3c39002d,0x3bca5f81,0x3bfaaa68,0x3bbfb017,0x3a2e1315,0xbb800af2,0xbb864468,0x3b491d17,0x3aade3d6,0x3b30ee61, +0x3b914a4f,0x3b055122,0x3b942399,0x39424767,0x399c21b2,0xbb46abcd,0xbbf299e6,0xbc39d05c,0xbc7b3ec7,0xbc574f1b,0xbc51f715,0xbba27d70,0x3b32de55,0x3a73bd2c,0x3b770a08,0x3b872edc,0x3a14ca84,0x3aa498ee,0x3bbfa9e2,0x3bbbeb6b,0x3be687f1,0x3c02cc09,0x3c1ad7d9,0x3c0e6241,0x3b8a8f4f, +0x3c1236f6,0x3bffff50,0x3b94c5c7,0x3bd02b33,0x3bd864f1,0x3af6a9c3,0x3aa8d4c6,0x39bc0c9a,0xba914261,0xbbeb0a25,0xbc2999b0,0xbc524e5a,0xbc2f27dc,0xbc218527,0xbbfe010d,0xbb4088dc,0xbce036ac,0xbd42d742,0xbd1831b8,0xbcf62f8b,0xbc692383,0xbcb39a3b,0xbcc1ec2b,0xbc6236e6,0xbc63370d, +0xbc706f6a,0xbbc40a98,0xb6359adb,0x3ba5cf91,0x3b85ecd0,0x3b2b86bd,0x3b374e4d,0x3bba74c8,0x3b38617e,0x3b89dc59,0x3bba9f7b,0x3be33479,0x3bd11319,0x3b239a46,0xbab6562f,0xbb6e5c73,0xbbe7966e,0xbb018745,0xba89b861,0xbc002fff,0x3b4ec133,0xba862d97,0xbc62955a,0xbc925970,0xbcaad702, +0xbcbf63c1,0xbcc77b08,0xbcccd802,0xbc54c4f3,0xbaab68b5,0x3b4d48e1,0x3b48bbb1,0x3c17c2cd,0x3c2e2ebc,0x3c637066,0x3c36923c,0x3c430226,0x3bdb7c1b,0x3c03ee1b,0x3bc443f7,0x3bca448b,0x3bcf3916,0x3bbb7870,0x3be726af,0x3adc1286,0xb99bd641,0x3994991b,0x3b58b116,0x3b45f5c7,0x3b759e8f, +0xba9fc69b,0xbb51a735,0xbbb43cf3,0xbb92cb45,0xbbd6a52f,0xbc2a6334,0xbbd2810e,0xbbae20bf,0x3a11124f,0xbc116802,0xbc7b897a,0xbcb1d84a,0xbcc9de07,0xbc0de079,0x3c238a81,0x3c20e30d,0x3c786cf3,0x3cb25a2a,0x3c9b2514,0x3cae41ba,0x3c978083,0x3c8b4a99,0x3c6a6442,0x3c67ca86,0x3c556587, +0x3c4e3b98,0x3c1b760d,0x3bfad1cf,0x3bb007b4,0x3b2011f6,0xba986aae,0xbb8403b5,0xbba2388d,0xbbbb4647,0xbc0afdfa,0xbc35f5b9,0xbc5d361e,0xbc804fd9,0xbc8ff9a8,0xbc8e291f,0xbc89a893,0xbc904cf8,0xbc919a02,0xbca0bca3,0xbcb210b4,0xbca8bb61,0xbc9b0c94,0xbc9a58a0,0xbc336f59,0x3b938be3, +0x3c22397d,0x3c8d60cb,0x3c85365c,0x3cb13f99,0x3caa249d,0x3c97910e,0x3c8ab57b,0x3c8a2c45,0x3c786962,0x3c7ead94,0x3c24bd2e,0x3c248eb3,0x3bf299ea,0x3bb87a8e,0x3b4071f4,0xb70c8bf7,0xbaaad976,0xbb94c4e8,0xbbb9217d,0xbc1356b1,0xbc37192d,0xbc738c6d,0xbc83d719,0xbc9365bd,0xbca24e8d, +0xbc9de2cc,0xbca4d66e,0xbca0bcfd,0xbcb36851,0xbccdbaf5,0xbce746b2,0xbcb70650,0xbc7eab42,0xbc2cf2ab,0xbaccacb5,0xbb8b55b5,0xbb72bc93,0x3a56afdc,0xbb5d4a03,0xbb94010c,0xbaaca778,0xbaa674d4,0x3b673179,0xba12ff29,0x39a0931f,0xba73c89e,0xba427cdd,0xbb095653,0xbb2eac47,0xbb21967d, +0xbb191ab4,0xba681d13,0xbb14b198,0x3a477bb1,0xbb448e31,0xbb7fd2c3,0xbbbc85dc,0xbbd225ff,0xbc0d2230,0xbc254bec,0xbc312a3b,0xbc3f52e0,0xbc239d9a,0xbc1f8a16,0xbc158d78,0xbbac16c0,0xbba80345,0xbb93b061,0xbb70eb54,0xbb8abc1e,0xbba0b7ba,0xbb597ee7,0xbb4240dd,0xbaac21cb,0x3aa39006, +0x3b4bb46e,0xba2681be,0x3949dcd6,0x3b460fdb,0x3b45e94f,0x3b10c156,0x3ac057cf,0x3a84d5be,0x3a24e424,0x38d5d737,0xbb0d7205,0xbb8128e3,0xba86eb0d,0xbb5c8f6c,0xbba7c616,0xbbdfb71d,0xbbe09175,0xbbfa2572,0xbc072ebb,0xbc0e7e0d,0xbc114605,0xbc164be3,0xbc1b36c0,0xbc12a691,0xbc18084b, +0xbc1ebcd0,0xbc2195bd,0xbc2fbaa5,0xbc17d51d,0xbbf3619b,0xbbc5ee19,0xbb92b62e,0xbc1c70a6,0x3bd30322,0x3b8a5cbc,0x3b84b9be,0x3b92a2ff,0x3b9801f8,0x3baaaafe,0x3b74a75c,0x3b7d16b2,0x3b8ac4a3,0x3b920730,0x3b973a52,0x3b96de36,0x3b93072c,0x3b905ba7,0x3b854e4b,0x3b7f6703,0x3b83e8ff, +0x3b93b7d4,0x3b9b1531,0x3b991dba,0x3b992855,0x3b9298d0,0x3b8a870f,0x3b81485d,0x3b84daa5,0x3b7b82f7,0x3b554f39,0x3b586916,0x3b50abfb,0x3b3b6fcd,0x3b6afa4f,0x3b751215,0x3b68488e,0x3b7e2320,0x3b83ec19,0x3b7bef7d,0x3b85e7be,0x3bc59b59,0x3bab01f8,0x3be0586a,0x3bd89941,0x3c10a69b, +0x3b8ede44,0x3b85ea0c,0x3ba7dcb8,0x3ba8b11a,0x3bce99c0,0x3bc7dc22,0x3bcadd8a,0x3bbad636,0x3b9479c2,0x3b8ebf45,0x3ba244d9,0x3bc70d35,0x3bd8117f,0x3bf973c2,0x3c01e8b7,0x3bda7afe,0x3bc589d6,0x3ba91242,0x3b9b109c,0x3b5f6266,0x3af01526,0x3ab2f500,0x3abcd069,0x3ae1eaa2,0x3b8f896b, +0x3ba200f1,0x3b8dea14,0x3bb18c1f,0x3bb92f12,0x3b9ff2d4,0x3bc0ba41,0x3bdb822b,0x3bc8f8b6,0x3c038178,0x3c0071e4,0x3c28c73a,0x3b8d7397,0x3b2bcdb5,0x3b969432,0x3bc6bf86,0x3beb7fb4,0x3bdd96a3,0x3be9bb40,0x3bc5b9c4,0x3b604ec2,0x3b945f18,0x3b9ceb56,0x3bed9a21,0x3c08da3c,0x3c1cbba2, +0x3c31560e,0x3bfff9ea,0x3be0c79e,0x3ba645ca,0x3b9de4ab,0x3b49959c,0xb9ea68f4,0xba85b102,0xb9dc0386,0xbabc8f87,0x3b59a782,0x3b941616,0x3b34f03a,0x3ba235a7,0x3ba83d26,0x3b9eeed0,0x3bd7d39f,0x3c06bb73,0x3bbfbf42,0x3c1ee71a,0x3c22b82c,0x3c80d964,0x3b7b46aa,0x3ae9e0a8,0x3baf12c2, +0x3bc8a7bd,0x3bfbde9a,0x3c137e41,0x3be6912a,0x3badc756,0x3b0df443,0x3ba1df9e,0x3bbba511,0x3c017f31,0x3c341152,0x3c52b9e0,0x3c7718e1,0x3c24cd24,0x3c05a62c,0x3ba691e4,0x3ba6bbea,0x3a975252,0xbbab76f8,0xbbc4852c,0xbba99886,0xbb67494f,0x3b28ad29,0x3ba587f2,0x3b50e29e,0x3bbff9fb, +0x3bd4b5e7,0x3b9a27a3,0x3c0b25d2,0x3c142ae2,0x3c06f84a,0x3c49104d,0x3c53548a,0x3c9250c2,0x3b807bee,0x3980081d,0x3bd14e79,0x3bdbb965,0x3c0d3754,0x3c3f5b28,0x3bb1fa18,0x3b2b7671,0x3b5c4546,0x3bf4fce7,0x3c0119c9,0x3c1fa48e,0x3c548198,0x3c898aa0,0x3c950e0d,0x3c3936f6,0x3c0bd5ed, +0x3bb3361d,0x3b8b5a7e,0x3a190c9a,0xbbb7d0b1,0xbbe53e33,0xbbbf0e3a,0xbbea86e9,0x3b45b5b6,0x3b9157fd,0x398c58c5,0x3ba6f24e,0x3b782a3c,0x3ba69128,0x3bf961c7,0x3c327507,0x3b51b05e,0xbbb74e14,0xbc406df7,0xbca2e352,0x3b23df7b,0x3c52e4a4,0x3c90bf1f,0x3c7ed22f,0x3b898c54,0xbb79d7c3, +0x3b1f02c2,0x3bb131b5,0x3bc4598f,0x3c44407b,0x3c1ff150,0x3c190d4e,0x3bd45f4c,0x3bc6450b,0x3bc8b109,0x3b09b43e,0x3b64b6cf,0x3bb4d253,0x3b6e0498,0x3ba64150,0x3b81eb42,0x3ca86fff,0x3c9500b9,0xbc0a2f86,0x3b613e4b,0x3b7fa373,0x3bb7de9d,0x3bb34871,0x3c827fcf,0x3d14e02e,0x3cb75e98, +0xbc2a166f,0x3b27768e,0x3c64f80c,0x3c10076e,0x3b619b7e,0x3b0f9e47,0xb9a1de8e,0xbadb6487,0x3b1fbaf2,0x3bc730d9,0x3bcba5b3,0x3b39fcce,0x3ac9a47d,0x3bb01303,0x3b99aa11,0x3bfd0e07,0x3c2cd958,0x3c281bb3,0x3c36cae9,0x3bfcd7bd,0x3c0d3822,0x3c027fdc,0x3b1252cb,0x3b19dd7e,0x3b10a7c0, +0x3b8aee75,0x3c10e66e,0x3c2b9274,0xbb83d4ab,0x3b8a5596,0x3b055873,0xbc07837c,0xbbb92b8e,0xbc169ec4,0xbc3d988e,0xbc4c845e,0xbc52b4e2,0xbb924f06,0x3af0e168,0x3ae9d788,0x3ac7a5c6,0xbba0ea26,0xbc1f7309,0xba4d5838,0xb9f511f1,0xb9a96ecc,0x3b5afc2e,0x3b2399c4,0x3b7d49c8,0x3b580bde, +0x3b764ed1,0x3c0f8da1,0x3bb9d23f,0x3bb3a32e,0x3b94e67c,0x3b8122d2,0x3c242be4,0x3c2599d0,0x3b1fe6cf,0x3b968a7b,0x3b3f0125,0x3af97435,0x3badbcd1,0x3ba1274b,0x3b60ea35,0x3c1012ef,0x3c65ab81,0x3c4ae2ed,0x3aec2deb,0xbb9d2aca,0xbc3ffbf2,0xbc3c1bfe,0xba7ea493,0xbafce346,0xbb54e228, +0xbb47cfd7,0xbb3340a2,0xbc0735d5,0xbc05376a,0x3ba1809a,0xbaf48f54,0xba857709,0x3ada29bc,0x3af51abf,0x3b47d06e,0x3b25a3dd,0x3b8fa826,0x3bebf215,0x3bc22ba4,0x3b9e1f89,0x3bb4cdb2,0x3bb7f91c,0x3c2ec4be,0x3c434897,0x3bd729c4,0x3c17a197,0x3bf1baf5,0xbb26f329,0x3a3aba96,0x3aa3e0e6, +0x3b15d165,0x3b71dab0,0x3bb3daf9,0x3b9ee199,0x3b8d442a,0x3ba186e5,0xb94d6354,0x3a1b59b9,0xbb48da6e,0xbc562b1f,0xbbcad4d4,0xbbfb2c40,0xbc2dbea2,0xbc26bdf1,0xbba92af4,0x3b61c602,0x3a7232b7,0x3b7a87cb,0x3b6d4556,0x3a904196,0x3aea2747,0x3bc12bf7,0x3bcd5fb4,0x3c0385df,0x3c18acbb, +0x3c207f30,0x3c1b9003,0x3b893219,0x3c0b4425,0x3c087803,0x3be8f706,0x3beb6966,0x3bdb1dfc,0x39bb07d6,0x3b5178a6,0x39f72ba2,0xbbfa668d,0xbc150b8c,0xbc338678,0xbc565cf3,0xbb82b4f0,0xba5a3678,0xbb885dc2,0x395a69b8,0xbc258f40,0xbca9ca2c,0xbceecc66,0xbce9d67f,0xbc98998d,0xbca91fae, +0xbca4e373,0xbc4d0a39,0xbc472bf3,0xbc590bd0,0xbbdfcd3e,0xbb3ff028,0x3b4e65b4,0x3ba79f2c,0x3b603e88,0x3b7d1349,0x3bb428f9,0x3ba2c944,0x3bc1f402,0x3b867dd3,0x3bfb8db6,0x3c0ca439,0x3b8f1da3,0xb911d6b9,0xbb0beb3a,0xbb35a567,0xbb1a46bc,0xba838df4,0xbb3b7c5d,0x3bb4b0fb,0x3a693198, +0xbc7b6d72,0xbc994a43,0xbca7c26a,0xbcabab10,0xbc4f45bf,0xbcefcd3b,0xbcca16ad,0xbc856292,0xbc1e7f26,0xbc04896a,0x3b19d296,0x3ba36558,0x3b65e6b3,0x3b21a16b,0x3b7a3ae9,0x3af13e38,0x3bd97428,0x3be53ed2,0x3bf13da5,0x3bc1d307,0x3ba3b503,0x3bd9fc41,0x3ac2f337,0x3994ecf0,0x3a957f6a, +0x3bc1feb6,0x3bcf87a0,0x3bc432e5,0x3aaf88ea,0xba277bc5,0xbb554fb6,0xbb6c5caa,0xbbb3de0b,0xbbfb4fa4,0xbc1c4036,0xbbd001ee,0x3bcdfc95,0x3a24f7b0,0xbb9084fb,0xbc59a4d7,0xbcbfaa43,0xbc860c29,0xbb8cd8e8,0xbb628462,0x3b10040b,0x3c256cf8,0x3c26241c,0x3c516aab,0x3c26f3a4,0x3c1f0afb, +0x3c11bfa3,0x3c327c4a,0x3c2cbad8,0x3c3315b1,0x3bfef3f5,0x3bc97d33,0x3b87d190,0x3b335fb8,0x38a43408,0xbad8a7e7,0xbaba51c0,0xbacda20f,0xbb716178,0xbbcef905,0xbc0d88a0,0xbc33816b,0xbc624b96,0xbc558604,0xbc51eb82,0xbc385010,0xbc650ee0,0xbc72ce7d,0xbc556794,0xbc71ea82,0xbc81ca40, +0xbc9b0ddc,0xbc817335,0xbb2dba11,0x3ae143f2,0x3c14464d,0x3c0a0ed1,0x3c53d0bc,0x3c4e9c54,0x3c39a71c,0x3c3beaef,0x3c5ab22e,0x3c494e06,0x3c6e5841,0x3bf78d34,0x3bf48707,0x3b9bb6ac,0x3b7a0eeb,0x3ad826db,0xb9e95f8a,0xbad42688,0xbb2e147b,0xbba064a0,0xbc05610f,0xbc23f9fb,0xbc5075db, +0xbc6844d7,0xbc7ff552,0xbc8e3dc2,0xbc8469ad,0xbc861068,0xbc829c85,0xbc918651,0xbcabd302,0xbcccb07f,0xbcb54c38,0xbc959347,0xbc7e7716,0xbbf35a91,0xbbc0fd6d,0xbbaae5c0,0xbb5184c0,0xbbb7908f,0xbbccd2e1,0xbb6984bb,0xbb47b9d8,0xba21f2fd,0xbb75b6b4,0xbb5cf359,0xbb89da7f,0xbb35744e, +0xbb41039a,0xbb3bdaba,0xbb7862b7,0xbba02daa,0xbb9bdcd0,0xbbe92d90,0xbbc2e853,0xbc2559fd,0xbc2a0d6c,0xbc42bbfb,0xbc4de6ba,0xbc6a2fb9,0xbc7ca97b,0xbc846a23,0xbc8d7f98,0xbc8453dc,0xbc7c517d,0xbc7a28fa,0xbc3ab4bc,0xbc28323d,0xbc0f197c,0xbbc0a686,0xbbc795a7,0xbbe1dee5,0xbbd0577e, +0xbbb6b5bb,0xbb962855,0xbb42db31,0xbb09bd9b,0xbb7fdf1d,0xbb6b962a,0xbaf47b27,0xbad075d9,0xbaf70d95,0xbb227b54,0xbb48feed,0xbb6f1007,0xbb8124ac,0xbbb0ada5,0xbbd39cb4,0xbba1be80,0xbbd11c36,0xbbf4f798,0xbc0bc0c1,0xbc0d094d,0xbc1a2d78,0xbc21f29c,0xbc288a12,0xbc2b3e29,0xbc2d1947, +0xbc2e800b,0xbc267fce,0xbc2d0f3e,0xbc31053f,0xbc36a3e1,0xbc4a57c9,0xbc3cc641,0xbc23ef33,0xbc149971,0xbbf925c3,0xbc61fab6,0x3bc34f7b,0x3b7fe78f,0x3b7356d2,0x3b85faab,0x3b87f896,0x3b8fc484,0x3b5a7466,0x3b6306f9,0x3b708e17,0x3b87bd12,0x3b8ee997,0x3b895f00,0x3b8a2153,0x3b86b573, +0x3b732959,0x3b67e428,0x3b70bdd7,0x3b8beffe,0x3b8b6a02,0x3b85e6b4,0x3b8220e0,0x3b81e479,0x3b7a3707,0x3b6ce505,0x3b7ba565,0x3b76d747,0x3b5d2abe,0x3b5aba64,0x3b5108b3,0x3b452ed6,0x3b5c2220,0x3b5bc845,0x3b55e34f,0x3b62ef02,0x3b6eacb2,0x3b644b0d,0x3b797e6f,0x3bc1406c,0x3b9b7c1d, +0x3bbfd4c9,0x3baf3a54,0x3be33af3,0x3b81542a,0x3b776160,0x3b8a1b7b,0x3b9d8d10,0x3bc3a62f,0x3bb61750,0x3bca8625,0x3bbd939f,0x3b842f65,0x3b74f296,0x3b8eb054,0x3bbe07c9,0x3bbcb720,0x3bd9b692,0x3bd602b5,0x3bbacfed,0x3bad0750,0x3b973b65,0x3b93a237,0x3b6b8d7e,0x3b2f2ccf,0x3b1c5664, +0x3b275d89,0x3b49d597,0x3b878360,0x3b8f7722,0x3b93398b,0x3b9eb086,0x3ba0e287,0x3b854aa0,0x3bb60eb6,0x3bcc7175,0x3baeac4d,0x3be6f429,0x3bd63811,0x3bedef13,0x3b62e583,0x3b23d830,0x3b46c605,0x3bc0bd6e,0x3be8e94d,0x3bc2c505,0x3bfc53df,0x3bd16146,0x3b43f5bc,0x3b825380,0x3b879732, +0x3bed8ffc,0x3be900a9,0x3c0252e1,0x3c04d43e,0x3bcb9bc1,0x3bbd7843,0x3b8dbf66,0x3b9fd228,0x3b84f9b0,0x3ad6ff62,0x3aa7c48c,0x3aba7b33,0x3aafb096,0x3b5b417a,0x3b6b41e4,0x3b3597c8,0x3b80078a,0x3b8a5f7a,0x3b6fd667,0x3bcc7504,0x3c0b5019,0x3ba77e15,0x3bf81739,0x3beab10c,0x3c3bc356, +0x3b509cca,0x3ade934a,0x3b6dec44,0x3bbe56f8,0x3c00e3c8,0x3bf9d5b8,0x3c031bae,0x3bd1a4f1,0x3a927b94,0x3b822379,0x3b93d783,0x3c0389a0,0x3c1560bb,0x3c2ee525,0x3c43820e,0x3bfe756f,0x3bdf9ee4,0x3b842bb7,0x3ba8079f,0x3b21d755,0xbaf2a898,0xbb09bf20,0xba9bfcc8,0x3ace9022,0x3b3a1eb0, +0x3b8b26f3,0x3b8ec7aa,0x3b9d2437,0x3ba4c44e,0x3b38222f,0x3c009cc8,0x3c0abd5b,0x3bce7fd8,0x3c3820f4,0x3c3ad3c2,0x3c48aaaf,0x3b3cf0c3,0x3a169b3a,0x3b8025ac,0x3bdd70c5,0x3c198984,0x3c266847,0x3bda2780,0x3b6a1ba4,0x3ae16faa,0x3bd75620,0x3be00a46,0x3c1fc8a9,0x3c30fc48,0x3c6c8691, +0x3c5e4fd0,0x3c0d7143,0x3be20f8c,0x3b8235a0,0x3b970ba3,0x3b5400a5,0xbaa75d1f,0xbad28228,0xbaa11df3,0xbaa084be,0x3b85bebe,0x3b40a682,0x391ac7a9,0x3b4aee3d,0x3b241996,0x3b35b5c6,0x3bfd0f3b,0x3c5378c0,0x3bca534a,0xbbb387f3,0xbc3fe2d8,0xbc847035,0xb8e60783,0x3c10ca54,0x3c798c7c, +0x3c9273cb,0x3bf11ea0,0xbb611677,0x3abb90aa,0x3b8c3563,0x3c0cc54b,0x3c375d89,0x3c12adc3,0x3c02f3c8,0x3b8d8a73,0x3b35b8ce,0x3b050ed3,0x3b052f59,0x3b9b2c59,0x3bf4d8a4,0x3bc9dd48,0x3bc59eec,0x3b876a24,0x3ca17ca6,0x3c874759,0xbbbb1cb4,0xbb1bad96,0xba7132d9,0x3c2d914b,0x3bfa117a, +0x3c7159cb,0x3cf52f78,0x3cae4447,0xbc0bc277,0xbc7b433c,0x3ca18ccb,0x3c95da02,0xba994e7f,0x3bb0228d,0x3b499331,0xbb36ca35,0x3b1cbd77,0x3bd89261,0x3c082ced,0x3b77c61a,0x3ae52997,0x3ba72f30,0x3bcaab45,0x3c18ee6e,0x3c1f87aa,0x3c151d67,0x3c203ecd,0x3ba604b3,0x3c10b277,0x3c04fa9c, +0x3aee0161,0x3b1c16e5,0x3b7ad471,0x3c0ac68b,0x3c0be4dd,0x3c0d0f4d,0xbbe2a362,0x3baffbda,0x3a296327,0xbcc2d40c,0xbc25c3ef,0xbc09933a,0xbc2a06ce,0xbc0f900f,0xbc4da30f,0xbc427c7c,0x3b0d7899,0x3b9bc9e4,0x3b334f08,0xb895b0e2,0xbbdab17e,0xb9da08e2,0x3a05011a,0xb90dd07b,0x3b9334bb, +0x3b197d33,0x3b64b986,0x3b914001,0x3b540ae0,0x3c044e27,0x3b7596da,0x3b826dc8,0x3b2e1fba,0x3b04e599,0x3c222fe8,0x3c20a92f,0x3b2ddb0e,0x3b9d4464,0x3b49d167,0x3b0f50b9,0x3bb1f999,0x3bc4043d,0x3b3044f9,0x3c2a06b3,0x3c5e3067,0x3b80991d,0xba2b0f99,0xbbba414b,0xbc073c1b,0xbc25b96d, +0xba46debd,0xb964cc34,0xbb2359e1,0xba2e7056,0x3b39cede,0xbb6ff2b7,0xbba4d4a5,0x3bae80ed,0xb93299d9,0xb88bf612,0x3b132dc2,0x3adf42e5,0x3b35eb76,0x3b428575,0x3b6260e0,0x3bc75173,0x3b78650f,0x3b591b45,0x3b9132bd,0x3b853c5f,0x3c089ace,0x3c18f5db,0x3bb3a410,0x3bcb577a,0x3b95aaa7, +0xbac51152,0x3b45724d,0x3b2709da,0x39a16286,0x3b3a7608,0x3ba942c2,0x3bf3489d,0x3b98b3fa,0x3b88bfcf,0x3b6f9b7c,0x3a797ddf,0xbb0209cc,0xbc2fdea9,0xbb12e4c7,0xbb0856fa,0xbc125181,0xbbd5fb02,0xbb8a619a,0x3a954d07,0xb8b41c70,0x3b34875b,0x3b293ebd,0x3a6e8647,0x3af30bb2,0x3ba3431c, +0x3bcc523d,0x3c052a04,0x3c09abf0,0x3c053c06,0x3c07c162,0x3b61c719,0x3bf478be,0x3c00b681,0x3c03343e,0x3bc7e8a1,0x3bad2b64,0x3b144f82,0x3b170f7a,0xbae95bff,0xbc4841a7,0xbc13dc27,0xbc1bb1e8,0xbc3085db,0x38ebddd0,0x3b6f231d,0x3a02bf42,0x39126cb5,0xbb79a96b,0xbbb6f765,0xbca0ee4f, +0xbccd7e46,0xbcb0aa94,0xbc9542c9,0xbc813851,0xbc32330d,0xbc19c0e7,0xbc2d5c44,0xbbd7ee18,0xbb9fbf6c,0x3a98639b,0x3bc3d54c,0x3b586200,0x3b81dea6,0x3b8e92b3,0x3bc3ec33,0x3bcfd169,0x3b0b275c,0x3bcdbd38,0x3c04bb62,0x3bb7638a,0x3b76b5f4,0x3b04d9b0,0x38b78e44,0x3a9b07e1,0xb7f8fcb4, +0xbb44f9ea,0x3a4d0067,0xba85965c,0xbc1e0e80,0xbc73e4ae,0xbc82e249,0xbc653265,0xbbcd6060,0xbcdd8a15,0xbce4ba78,0xbcca0a22,0xbc93cc84,0xbc5be08d,0xbb3e5f82,0xb9dc9738,0xbba1c0fa,0xbb9287dd,0xbb1de7e6,0xbb048fe4,0x3b95018e,0x3bd4ac4f,0x3bd6e3e8,0x3b9af21f,0x3b6de8a2,0x3b8f10c4, +0x3b10014d,0x3b07d29d,0x3b15c227,0x3bf549e9,0x3bffb852,0x3baa68f4,0x3b78304f,0x3a95a801,0xb7c5fd72,0xbb236404,0xbb889cb7,0xbb8e701e,0xbc16d1da,0xbc08fa0c,0xba626f2e,0x3b20e1c7,0x3a019539,0xbc24ccbb,0xbca1d3f0,0xbc994f5f,0xbc65121c,0xbc50eb61,0xbbfb3518,0x394d24ac,0x3aabc896, +0x3b7db44c,0x3ae92ce3,0x3b36c3b4,0x3b7085f7,0x3bef6c22,0x3bec52b9,0x3c078391,0x3bbf8fbf,0x3b8eccc6,0x3b3860b1,0x3afeb7c1,0x3a18d0f5,0xb91566e5,0xb902e62b,0x39ab9d95,0xb9dba7d8,0xbb18859a,0xbb7a0d02,0xbbcd19d4,0xbc0ba1ec,0xbc1221bb,0xbc1667af,0xbbdda5ab,0xbc2253e0,0xbc1cb09a, +0xbbfbf313,0xbc0cd211,0xbc33b006,0xbc7e7820,0xbc855e4a,0xbbe269ad,0xbb9c5d3d,0x3aa22ba7,0x3aa09aca,0x3b8a8b6d,0x3b9f1f31,0x3b970750,0x3bc1aeaf,0x3c12f33f,0x3c0d81ad,0x3c464bd7,0x3ba56f64,0x3ba4d94a,0x3b375640,0x3b00d817,0x39f81a30,0xbaa7237e,0xbb2765d1,0xbb6d9a60,0xbbc16194, +0xbc01524b,0xbc0f3452,0xbc21110a,0xbc3866e9,0xbc46af91,0xbc655b57,0xbc4ba229,0xbc4e40bf,0xbc54678c,0xbc5759b2,0xbc6dc10b,0xbc86be1a,0xbc877be8,0xbc7e1a68,0xbc69e5d7,0xbc1cd97d,0xbbd3c575,0xbbb6703c,0xbb9117eb,0xbbacee40,0xbba4c5ae,0xbb452a42,0xbb1bda31,0xbab179ca,0xbb85059c, +0xbb913ae3,0xbbb12fa2,0xbb74207e,0xbb67af8f,0xbb612d3f,0xbba0d0ad,0xbbd231aa,0xbbf438f4,0xbc155d61,0xbc251412,0xbc3c16a7,0xbc3e3782,0xbc5fdd3e,0xbc71d6bd,0xbc860453,0xbc8e4b4f,0xbc93c201,0xbc9acde0,0xbc925ca1,0xbc883f0c,0xbc8b6f28,0xbc713156,0xbc65f198,0xbc415389,0xbc052751, +0xbc017f51,0xbc02ae8d,0xbc01cf0a,0xbbeaf89e,0xbbd7a2ba,0xbbba4b82,0xbbadfd15,0xbbcbd4ef,0xbbc3595d,0xbb989062,0xbb8c3547,0xbb8a6340,0xbb983828,0xbbacecff,0xbbc2e48a,0xbbc9ee04,0xbbe76035,0xbbf35f81,0xbbe9690a,0xbbff138e,0xbc05f764,0xbc0d5d09,0xbc147a61,0xbc1cc9b7,0xbc203fda, +0xbc252874,0xbc283fe5,0xbc2a323b,0xbc2a4d1f,0xbc24e940,0xbc2c9b9c,0xbc2cd594,0xbc2ce9b7,0xbc3ad997,0xbc36e6db,0xbc28d67b,0xbc20bcc2,0xbc109860,0xbc7f4d45,0x3bb10380,0x3b5b6b5a,0x3b44ecae,0x3b670a49,0x3b761fda,0x3b7aa81a,0x3b45a3a3,0x3b52429d,0x3b59752d,0x3b7f216b,0x3b88c337, +0x3b81a44c,0x3b86719a,0x3b83986d,0x3b68a934,0x3b5c252b,0x3b5d72aa,0x3b870175,0x3b8022b7,0x3b6b17b1,0x3b52dc5f,0x3b5e7941,0x3b5c7808,0x3b589fd6,0x3b6878a8,0x3b68cf40,0x3b590733,0x3b52d12e,0x3b498d81,0x3b4a2140,0x3b4c79df,0x3b436f00,0x3b43776c,0x3b441f0e,0x3b4d5408,0x3b40f707, +0x3b57d3b7,0x3bb1fcbf,0x3b862799,0x3baa24dc,0x3b88bce1,0x3bace152,0x3b67c125,0x3b68578b,0x3b6d158d,0x3b8fd7b5,0x3bb58bb3,0x3ba9640f,0x3bcd0238,0x3bc170fc,0x3b743a8b,0x3b5e419e,0x3b7ef745,0x3bb43f5c,0x3ba38255,0x3bb86081,0x3b9f2bd4,0x3b905acf,0x3b8bf1c6,0x3b87dcea,0x3b89bc6d, +0x3b758b09,0x3b638c22,0x3b5770a5,0x3b69d523,0x3b9036c1,0x3b7f8775,0x3b72b2c1,0x3b9132b2,0x3b8551a3,0x3b80480c,0x3b4b6010,0x3ba31400,0x3ba14d78,0x3b79091a,0x3bb3b960,0x3ba02e07,0x3ba20bf1,0x3b34a692,0x3b1bbfc7,0x3b03ed6c,0x3bb0c26a,0x3bd6c05a,0x3bb2f4e3,0x3c042cdd,0x3bdeec18, +0x3b410cf0,0x3b7152bf,0x3b70bf7e,0x3be7de67,0x3bc3726c,0x3bcc88f6,0x3babf4dc,0x3b8dead2,0x3b94941a,0x3b86894c,0x3ba09f9e,0x3b9bbb77,0x3b5a2fe5,0x3b4bdd81,0x3b3a8fcb,0x3b813691,0x3b611aaf,0x3b4373e3,0x3b412f2a,0x3b3826ec,0x3b3c5020,0x3b04a708,0x3ba5742e,0x3c027fd0,0x3b8c0021, +0x3bb77e31,0x3b9025d4,0x3bf2c205,0x3b1bf3ef,0x3ad4dc09,0x3b2dfe99,0x3ba721ac,0x3bf5bc03,0x3bd62e9e,0x3c12b2cb,0x3bfc05a4,0x3a13bc1c,0x3b54dfac,0x3b725eee,0x3c060d52,0x3beee3d8,0x3c045ea0,0x3bf9d03e,0x3b9c53c0,0x3b999daa,0x3b74ca48,0x3ba79092,0x3b81998a,0x3ad022d1,0x3ad76c19, +0x3b19bfc8,0x3bd2ed53,0x3b487840,0x3b5dcf79,0x3ba7fedf,0x3b612a45,0x3b3a31da,0x3a3dfee1,0x3bd6d678,0x3bbbefba,0x3b5781c2,0x3c08bc14,0x3c0e0690,0x3bf59245,0x3b020a76,0x3a2aca01,0x3ad4db99,0x3bc8e128,0x3c15f1c4,0x3c0aabd9,0x3c012a47,0x3b9924d2,0x39f4a9c9,0x3bb48632,0x3bc54196, +0x3c24e154,0x3c0df2fd,0x3c384c0f,0x3c00cc8a,0x3bad5200,0x3ba20c84,0x3b7d3cb1,0x3baf306f,0x3bb15362,0x3b1b90e8,0x3b257def,0x3b1ed28c,0x3b8945cf,0x3ba2a7a4,0x3b0fab36,0x3a73eba9,0x3a8c58ed,0x39c70e7e,0xb9545509,0x3bbf06a4,0x3c75c015,0x3bf58c01,0xbbf0da27,0xbc672d26,0xbc739037, +0xbb1430ba,0x3bc1c9e0,0x3c438c85,0x3c9b6470,0x3c2c2d7b,0xbaf7e37d,0x39b73b7a,0x3b59a249,0x3c363aef,0x3c219853,0x3bfe2370,0x3bece974,0x3b1f130a,0x3a0d6937,0x38a64312,0x3b3222c7,0x3baff9a2,0x3c0605c6,0x3bcaa3da,0x3bbdc727,0x3bb07105,0x3c7c6b17,0x3c217094,0xbbeeb48b,0xbbe864fa, +0xbb864175,0x3c52e5d8,0x3c13c407,0x3c5a5685,0x3cbe02bf,0x3ca6a970,0xbc0146e1,0xbcd55b51,0x3cc09024,0x3cce5130,0xbb4104cf,0x3bdee100,0x3b8890c4,0xbb457e0c,0x3b291181,0x3bdf8521,0x3c1ff7aa,0x3ba2a087,0x3b1bdc1f,0x3ba15f50,0x3bfd9b95,0x3c3248fa,0x3c075ded,0x3bfee24b,0x3c017e09, +0x3b7947ca,0x3c0e2b75,0x3c050723,0x3b59fcc2,0x3bb613a1,0x3bd9184a,0x3c2c939b,0x3bf0bf01,0x3bc5ea94,0xbbf6b98b,0x3bee7404,0x3abbde45,0xbce3e9dd,0xbc436d75,0xbbf6a77b,0xbc0ac77f,0xbbf3ea4c,0xbc2cdda7,0xbc930f56,0x3a68ba3c,0x3ba84cc2,0x3b114de7,0x3b962fa6,0xbac21b55,0x3a70b67e, +0x3ae95a2e,0x3a06023e,0x3bb3c256,0x3b207034,0x3b6ad560,0x3ba1f012,0x3b3b198b,0x3be72935,0x3ab78d58,0x3b07b6a8,0x3a8e824e,0x3a6b4638,0x3bfd7f0e,0x3c03862d,0x3b5d05ae,0x3b6f0f71,0x3ae5deb5,0x3b0fe97c,0x3bb928e1,0x3bd2790a,0x3ab66c5b,0x3c41fdac,0x3c4a524b,0xbaeca34c,0xbadc11da, +0xbb8c7cb5,0xbb178341,0xbbbf9481,0x3a69cc07,0x3ad7e19b,0xbb3c17b8,0xba2b3e97,0x3b8ccb93,0x3a82b50e,0xba09f424,0x3b941e3c,0x3aa176c4,0x3a1279cc,0x3b2cc25c,0x3ac16fa9,0x3b34f6d1,0x3b43ee73,0x3b27355a,0x3b8c28df,0x3a64660a,0x3a8e0fde,0x3b1e9e6d,0x3ade4866,0x3b9d8146,0x3bb5bff5, +0x3b867411,0x3b2b01e4,0x3abebcf5,0x39ce5182,0x3b7bd4fa,0x3b42a09c,0xba5be0c3,0x3b0d4493,0x3b7029a8,0x3c15fbc0,0x3b2b8cb2,0x3b363a22,0x3c142eb3,0x3b38501e,0xba23215d,0xbb6f7505,0x3ac9c2f2,0x3ac4d6e7,0xbbdd74fb,0xbb6b1f6b,0xbb78bed2,0xbb144d66,0xbab6bbf0,0x3a90340a,0x3ae08261, +0x3a2869dc,0x3acc4565,0x3b71d886,0x3bbf0355,0x3bf59189,0x3bc266b7,0x3bb1d95c,0x3bc0cfc7,0x3b418590,0x3bc0a4a2,0x3bd82c84,0x3bdd11c5,0x3bb47ce9,0x3b975f03,0x3b2fd797,0x3b05ef0d,0xbb323a80,0xbc8476c1,0xbc0c9f42,0xbc0b8e02,0xbc0f9c11,0x3aa20d14,0x3b9d2617,0x3bae8d7e,0xb5dab899, +0xbb107ba8,0xbb719a66,0xbc6893ab,0xbcb5c29a,0xbcbfd505,0xbc90935f,0xbc5e5bce,0xbc1c91be,0xbbd0e709,0xbbea476f,0xbbaba93e,0xbbaf6f04,0xb948a816,0x3bc12ca1,0x3b3dcd66,0x3b6063c2,0x3afe5467,0x3bc88bd8,0x3bc17f46,0x3ac34dc5,0x3b8c81c0,0x3bcd31eb,0x3c0d268b,0x3be55843,0x3ba086e5, +0x3a652e0f,0x3af8ae86,0xba8db870,0xbba5d3f7,0xbba160c0,0xbb6dee1c,0xbb313274,0xbc1dd54d,0xbc307f6e,0xbbe20243,0xbb2a37a8,0xbcb12a98,0xbcce110b,0xbccf542b,0xbca6207c,0xbc5f13b8,0xbbeac2f6,0xbbb1d34d,0xbc1d3f65,0xbc12a1f9,0xbbd62bdc,0xbb8c0ead,0x3a9bad1e,0x3b72505e,0x3baa0ed3, +0x3b583650,0x3b2dcf3a,0x3b2dde19,0x3b6c711c,0x3b87fd2b,0x3b711e35,0x3be552d9,0x3be5d9cd,0x3bae04ef,0x3b812124,0x3addf0bf,0x39b047f2,0xbb055c7f,0xbb3732fd,0xbb2496b4,0xbbaf98d9,0xbc0aed70,0xbc4ae1ad,0xbb89fcd4,0xbb40d55e,0xbc260cd7,0xbc861249,0xbc96f72b,0xbc99b6b0,0xbc8c85d6, +0xbc5895be,0xbbcc27a8,0xbbb42b62,0xbb52ec90,0xbb8e08c0,0xbb18ae6a,0xba1bbc78,0x3b7dfe8e,0x3b6d7058,0x3ba582e0,0x3b933806,0x3b336e27,0x3ae067b8,0x3a02a40e,0x39828b20,0x393dae2d,0xba3bffd9,0x3a9c2417,0x3ae73d28,0x3addd862,0x39d55c9b,0xbacd5ded,0xbb740f1c,0xbb9879b2,0xbbab5c39, +0xbb69df01,0xbba7527e,0xbb90f51a,0xbba746ce,0xbbc00a43,0xbc0eba37,0xbc4ee450,0xbc7b99f3,0xbc241542,0xbc1d7869,0xbb9c5cfe,0xbb9c8a8c,0xbb47c151,0xbaa74724,0xba105a3f,0x3aa528eb,0x3b97651a,0x3ba4cf1b,0x3c0d78e2,0x3b606d73,0x3b6bf588,0x3b1fc969,0x3a5e5c24,0xb94b5a77,0xbb025c2e, +0xbb4f7e82,0xbbadb277,0xbbbe61e6,0xbbb5a19e,0xbbaa4e5d,0xbb8d5dbe,0xbbc020e2,0xbbdd5c74,0xbc0ba585,0xbbf77656,0xbc04828b,0xbc16c7c8,0xbc0df1ed,0xbc079b7b,0xbbf7e0bd,0xbc1b4d1d,0xbc3619ed,0xbc42d302,0xbc2c781d,0xbbd1aed3,0xbbb1fc5d,0xbb9c0bc4,0xbb8c606b,0xbb58a657,0xbb080cb3, +0xbadd16aa,0xba8bcc26,0xbb61581a,0xbb84f985,0xbba703cc,0xbb784246,0xbb5f5c77,0xbb5c384c,0xbb8f3007,0xbbb2edc6,0xbbe0057c,0xbbdf748b,0xbc0d134d,0xbc01ddc6,0xbc0eefa1,0xbc357abe,0xbc4e8bfc,0xbc627d62,0xbc6c0824,0xbc73f477,0xbc8150ab,0xbc7b67cc,0xbc6ea26a,0xbc7ec16c,0xbc7eca5a, +0xbc87fd70,0xbc68adab,0xbc29a7a5,0xbc1605d2,0xbc088ece,0xbbfdd222,0xbbe9c2b4,0xbbecb63a,0xbbe92f4c,0xbbee5a72,0xbbe4f0e6,0xbbe33f2b,0xbbc978b6,0xbbbb6657,0xbbb60fb6,0xbbbe88cc,0xbbd07789,0xbbe843eb,0xbbf1dac8,0xbbeb80a5,0xbbdf0152,0xbc073089,0xbc0434ab,0xbbfc1e5f,0xbbf384a2, +0xbbffadb5,0xbc00c91d,0xbbfea746,0xbc022036,0xbc060f97,0xbc07b4fe,0xbc08d847,0xbc07398a,0xbc0f122d,0xbc0e6d46,0xbc08e189,0xbc0cf695,0xbc0d1dbc,0xbc0c2dbf,0xbc0c8575,0xbc06b512,0xbc66e5c2,0x3b9914af,0x3b32c375,0x3b1a3b2f,0x3b3a0957,0x3b4c08c6,0x3b52562c,0x3b2f5cc9,0x3b39ad7e, +0x3b3cd24d,0x3b5ec944,0x3b720f03,0x3b685ee8,0x3b77e3cf,0x3b73749a,0x3b548586,0x3b460b27,0x3b413a55,0x3b73d59a,0x3b5b26e7,0x3b45d2d4,0x3b2ae574,0x3b38dbc6,0x3b3bfc9e,0x3b40b098,0x3b4c22bd,0x3b4d43fd,0x3b43f688,0x3b3a604b,0x3b32fbef,0x3b3c81e6,0x3b33ef78,0x3b28faf8,0x3b2f7e0f, +0x3b221b17,0x3b25163a,0x3b18fdd7,0x3b32560f,0x3b9485a5,0x3b552ac8,0x3b8483b0,0x3b507c30,0x3b829f73,0x3b534211,0x3b5a8f64,0x3b51f41a,0x3b813489,0x3ba25fa9,0x3b9a4265,0x3bc6fdf4,0x3bbd8ea8,0x3b63808e,0x3b455e0b,0x3b5c3bc7,0x3b9f94f3,0x3b881b2d,0x3b904109,0x3b5e5f94,0x3b517c76, +0x3b5763e0,0x3b739d91,0x3b7648d9,0x3b6a03c2,0x3b702a4a,0x3b58b6cd,0x3b6d0cc2,0x3b9cd2f0,0x3b6afce9,0x3b4e9064,0x3b83ef7c,0x3b485355,0x3b341b38,0x3af78300,0x3b7eeb3d,0x3b620f23,0x3b12f063,0x3b62d66f,0x3b58afbe,0x3b653fd9,0x3b210b6b,0x3b1f54fe,0x3ae13ed2,0x3b9ca413,0x3bbf9ad1, +0x3ba7a3c3,0x3c048108,0x3be5a156,0x3b4f63c3,0x3b664110,0x3b57b6ac,0x3bcf230a,0x3b9ee51f,0x3b92c0eb,0x3b4d3055,0x3b3933b9,0x3b5daf68,0x3b8388f0,0x3b94d4a2,0x3b96cee9,0x3b7dc0e5,0x3b5d155e,0x3b455916,0x3ba91315,0x3b567bbb,0x3b2e0177,0x3b4ea092,0x3ad7cada,0x3aa264a6,0x3997d22c, +0x3b679cfe,0x3bcf4968,0x3b47c9c3,0x3b593778,0x3b16ac08,0x3b9a19f9,0x3b0df2c2,0x3b01d63f,0x3b20e089,0x3b95b54c,0x3be49d40,0x3bbbedef,0x3c1de929,0x3c0dc76c,0x3a5ec410,0x3b3ac1a0,0x3b51e67e,0x3c00d5a5,0x3bba83e5,0x3bb2aa61,0x3b766ff1,0x3b1a1a96,0x3b308b08,0x3b77ea3e,0x3b9dc141, +0x3b97817b,0x3b56903f,0x3b42e6c1,0x3b5ecea9,0x3c0f648a,0x3b583232,0x3b46d414,0x3ba72cda,0x3ad66900,0x3a0c6701,0xbaed46d8,0x3b854218,0x3b3de8ee,0x3a32e9a4,0x3b8c8822,0x3bb50a26,0x3b946e85,0x3aef10d3,0x3a91d3a9,0x3a09af81,0x3bae3e48,0x3c0831fa,0x3bdc8e80,0x3c1151da,0x3bbf28ad, +0x392db0c6,0x3b9559e3,0x3bb9f4a4,0x3c2a93a6,0x3bdcc928,0x3bf76134,0x3b52413c,0x3b2864b3,0x3b4d0bc7,0x3b887ab2,0x3baf9ff0,0x3bb837d0,0x3b734341,0x3b57e764,0x3b65e8dd,0x3bf1444a,0x3ba67bf3,0x3b0b8b15,0x3b10bc82,0xba898366,0xbb1bf285,0xbb4f7fff,0x3b5e02b1,0x3c7953ba,0x3c27b093, +0xbbce6f48,0xbc707d92,0xbc7c1bea,0xbb6702a0,0x3b910018,0x3c045b26,0x3c9c8614,0x3c58b93d,0x3a357a6b,0xb9a8655a,0x3b316363,0x3c519647,0x3c05bc61,0x3bc6c96e,0x3bc8c8c0,0x3abebffd,0xb9aa59d6,0x39a9c49e,0x3b85b927,0x3bba4e2d,0x3c029050,0x3bd3d6c2,0x3be67973,0x3c29fef1,0x3c3334bf, +0x3b2f19b5,0xbc215db9,0xbc1cf9d7,0xbb958583,0x3c5408b1,0x3c43cfc7,0x3c6abdb8,0x3c8d82bf,0x3c8c3d94,0xbbe0ad85,0xbcfd60a8,0x3cbd1c23,0x3ce415a9,0xbb70643f,0x3c01b727,0x3b9f508b,0xbadbfdc5,0x3b2aef0a,0x3bcae471,0x3c2b990e,0x3bd17ee9,0x3b767cbd,0x3b9fd808,0x3c125f3a,0x3c3c4ad1, +0x3bd45cac,0x3bcf6df4,0x3bd464d2,0x3b8635c0,0x3c043a07,0x3c087f5b,0x3bd616c0,0x3bf663b5,0x3bf7db8c,0x3c28773b,0x3bca1a97,0x3ba39676,0xbbc00a41,0x3c19bafb,0x3b81ebe6,0xbca439fb,0xbc2cc624,0xbbf44928,0xbbc78928,0xbbac4b90,0xbbb91435,0xbcb9a38b,0xbb1130a8,0x3b3614ec,0x39dcb52d, +0x3bd9f939,0x3b252093,0x3af62bd5,0x3b3eb29b,0x3ad994e3,0x3bc20e0b,0x3b466e89,0x3b83adf6,0x3ba91d61,0x3b3321cc,0x3bb2b593,0xba82b3e8,0x3a177eb3,0x39844d01,0x398743da,0x3b9f993f,0x3bbd6334,0x3b998304,0x3b13ba6e,0x3a89c61b,0x3a6e919a,0x3bc752cd,0x3bf537ba,0x3abce920,0x3c5407f0, +0x3c3e3c6d,0xbb1c077e,0xba764585,0xbadf792b,0x3b49fe67,0x39325e45,0x3b908169,0x3b53b4f0,0xbb307b19,0xbaa57dd3,0x3b543767,0x3b5f2a69,0x3b229c8b,0x3af24d9a,0x3b0e4218,0x3aba7df9,0x3b389c12,0x3ad44039,0x3b36c4cb,0x3b4b191f,0x3af13ffc,0x3b0bbc27,0xbad3459b,0xba5f6c3d,0x399a2963, +0x381ddbc1,0x3b2464be,0x3b560f18,0x3b9235af,0x39975b6b,0xbab0a8bc,0xbaeb9f83,0x3b62c239,0x3b725235,0xba11627c,0x3b8772d1,0x3b805000,0x3bcf46b7,0x3a96a7c2,0x3b1f720f,0x3c4d4820,0x3bc03c3c,0x3a979691,0x3b326767,0x3b93089f,0x3b4f044f,0xbbaaf141,0xbb15f4d9,0xbb7d5fad,0xbb8b7f2f, +0xbb0feadb,0xb9741d71,0x3a90a651,0x3a56eba0,0x3ab444e9,0x3b2464f9,0x3ba8c117,0x3bd1a2cc,0x3b6da8cd,0x3b526d01,0x3b6b0279,0x3b4502f1,0x3b99ad7d,0x3bbcb78f,0x3bd39bf1,0x3ba10855,0x3b576b97,0x3b2c6193,0x3a1d1f56,0xbb8e8b07,0xbc898e06,0xbbffa5d0,0xbbe2f023,0xbbce3b1d,0x3a7a8a90, +0x3b8e887a,0x3bf470b2,0x3abdc5a9,0xbb2341b3,0xbbf412a7,0xbc48b3b9,0xbca371f1,0xbccaf62d,0xbc9d5348,0xbc68a7c2,0xbc17903e,0xbb92c6ef,0xbb83cbfd,0xbb59dd55,0xbb96b5eb,0xba55ed05,0x3b91aaf9,0x3b1ba36c,0x3b2df0df,0xb9a45fe8,0x3b97f327,0x3b9250e0,0x3b0474c0,0x3af1aafd,0x3b49f3d7, +0x3c037cf5,0x3bc4eaa1,0x3b8ab5f2,0x3a2a4032,0xba808791,0xbb2e4b97,0xbb5dde72,0xbc01090e,0xbbb9388c,0x3a96099b,0xbbb245ef,0xbbcb3e94,0xbb88be7d,0xbaa3d157,0xbc8029f9,0xbc9e5bbf,0xbcac7530,0xbc91a210,0xbc2affeb,0xbc1832a8,0xbc0dd798,0xbc3f6ad2,0xbc378e75,0xbc11cf96,0xbbc104af, +0xbb3953c1,0xb81e5374,0x3b7a38c1,0x3b0ddfd0,0x3b20c9d6,0x3b043d96,0x3b9ab4e3,0x3bafae04,0x3b9e82a3,0x3baaaaa4,0x3bb55e43,0x3be3a157,0x3b6e3a3f,0x3b2296e3,0xba0b20f5,0xbb045dea,0xbb410115,0xbb8ee18f,0xbb817ff8,0xbc06c137,0xbc8b095c,0xbc5472d1,0xbc2fb878,0xbc299c50,0xbc5db702, +0xbc905d29,0xbcabf5b1,0xbc9a1f09,0xbc8280af,0xbc25b84e,0xbc20e40b,0xbbfefb9a,0xbbfcecf0,0xbbb2ccbb,0xbb6b7261,0x3a4d918d,0x39f0b1ee,0x3b148651,0x3b7e3482,0x3aee570b,0x3ab04f36,0xb9befdc2,0x3a31a889,0x3a61569f,0xb93ff15b,0x3b44f130,0x3b80bc1b,0x3bc3d956,0x3b7f3e1b,0x3b26d502, +0xb837e00c,0xba888976,0xbb085f99,0xbb0b34c6,0xbb0a030b,0xbaffc324,0xbb8022cd,0xbbd7ff62,0xbc1d7928,0xbc3d00c4,0xbc78766f,0xbc55a0ca,0xbc66d14c,0xbc26ca9b,0xbc251fd5,0xbc176abc,0xbbccd347,0xbb8ef619,0xbaf478f5,0x3a91b68b,0x3b0643ef,0x3bade545,0x3b2e92c5,0x3b592c03,0x3b5c645d, +0x3a800004,0x38ed6746,0xbad4caea,0xbb23ceaf,0xbb9e3180,0xbb6228ad,0xbac496ea,0xba4c8bdd,0x3ab17c0e,0xb9d269c1,0xbabfe4f2,0xbb36d912,0xbb37bee2,0xbb6bc55b,0xbba0f835,0xbb9c2400,0xbb80671a,0xbb1ad69a,0xbb943eba,0xbbf9c680,0xbc2c8eb4,0xbc3fb805,0xbbb6846c,0xbb9e3501,0xbb9308f3, +0xbb4f9f4c,0xbae68fe9,0xbad1916c,0xbad0f13c,0xbab52b51,0xbb3cc85d,0xbb4f5031,0xbb7ce6c7,0xbb3860d3,0xbb0b1a44,0xbadac880,0xbb0ed1c2,0xbb40d69a,0xbb8caf36,0xbb62cfaa,0xbbaa7f24,0xbb9bf879,0xbbc757d2,0xbbf92993,0xbc134e1b,0xbc19d449,0xbc18322b,0xbc1c5c6a,0xbc2a9d8b,0xbc30d885, +0xbc2ea39a,0xbc424b91,0xbc571962,0xbc780060,0xbc5e9b22,0xbc2d40d5,0xbc0d012d,0xbbf35c42,0xbbbf89a8,0xbbb541f4,0xbbc81f32,0xbbda2c5d,0xbbf069f5,0xbbbbbac6,0xbbbfeeef,0xbbbdf11a,0xbbad4bae,0xbba5fb2d,0xbba71df2,0xbbb16e61,0xbbc649d6,0xbbcfa709,0xbba8cb96,0xbb8d32c4,0xbbea44b5, +0xbbceac94,0xbbb27fbd,0xbb99e193,0xbb97dff9,0xbb90fdc6,0xbb892325,0xbb8ad875,0xbb92d072,0xbb92b2ef,0xbb9653c4,0xbb992692,0xbba6156e,0xbba6a406,0xbb9bff91,0xbb97d784,0xbb98d878,0xbba8c750,0xbbb9e8f7,0xbbc1f2a5,0xbc112fb5,0x3b7a9ea9,0x3b0beb12,0x3b00b029,0x3b14dcf7,0x3b238cba, +0x3b30ffbb,0x3b15fa5b,0x3b2015b2,0x3b22d372,0x3b3e3396,0x3b4f6875,0x3b4b234f,0x3b5d2627,0x3b5aaee0,0x3b3f539a,0x3b2aa67e,0x3b1d43c8,0x3b4f3324,0x3b3093ff,0x3b1fca55,0x3b0b0f40,0x3b168693,0x3b1a90f9,0x3b2295b8,0x3b26ce27,0x3b23d579,0x3b1809ce,0x3b0d9e94,0x3b0c3177,0x3b25fcc9, +0x3b16598d,0x3b0ba34b,0x3b14ca60,0x3afd338a,0x3af8c881,0x3ae2ba09,0x3b0b4b31,0x3b6ad6a5,0x3b36a079,0x3b4344b3,0x3b26261c,0x3b4fc0c2,0x3b4613e2,0x3b500bbc,0x3b3e8dfd,0x3b68feba,0x3b8fd73b,0x3b8c544d,0x3bba28a4,0x3bb3664b,0x3b5a4822,0x3b337729,0x3b325b79,0x3b79891d,0x3b551bc7, +0x3b58ff14,0x3b1ed660,0x3b1c4a41,0x3b287bdc,0x3b50a6c7,0x3b44fa9a,0x3b31e4d1,0x3b316aba,0x3b0a5ce3,0x3b2bcd2a,0x3b96702e,0x3b46f77a,0x3b216397,0x3b4e6055,0x3af25981,0x3ac77fe0,0x3a32f50e,0x3b2f6fd9,0x3b20f413,0x3af498fd,0x3b0d39c6,0x3b24005f,0x3b32f5aa,0x3b2783c8,0x3b306337, +0x3aefa782,0x3b8c5877,0x3bad16ca,0x3b9f761c,0x3c01305c,0x3be6869e,0x3b681399,0x3b5ef44d,0x3b385365,0x3b9abb7b,0x3b757d56,0x3b4a3d45,0x3b09249f,0x3b06d5bb,0x3b2f49cb,0x3b6f9a61,0x3b71ef86,0x3b5e40a1,0x3b25a175,0x3ad271dc,0x3adcf10b,0x3bb4b187,0x3b39f5c5,0x3b18ead1,0x3b3c2e6c, +0x3a03749f,0xb97335c8,0xba99e9a0,0x3b0f57df,0x3ba3c08e,0x3b410449,0x3b03e89d,0x3ac771ac,0x3b585c1c,0x3b25b51f,0x3b382e6f,0x3b2b2264,0x3b945942,0x3bd8fe0c,0x3bb12eed,0x3c260dca,0x3c16a070,0x3afd2c66,0x3b3ab2f8,0x3b352eba,0x3bcd0544,0x3b8ae911,0x3b6415b2,0x3ac9552e,0x3aa352db, +0x3adb7756,0x3b6e16b2,0x3b744d91,0x3b57ec09,0x3aea3d72,0x3a79ec31,0x3ae70dd9,0x3c1923d0,0x3b420805,0x3b1de1bd,0x3b821231,0xba2762cf,0xbad0c601,0xbb88ec7b,0x3af143dd,0x3af35e66,0x39ee876a,0x3aeeb439,0x3b7079e6,0x3b4e10ff,0x3b09afbe,0x3af63e50,0x3a1d06b9,0x3b9f65c5,0x3bf0396d, +0x3bb6d7b3,0x3c1da455,0x3be0d0d4,0x3a6b6c4f,0x3b8380f8,0x3bb293f0,0x3c1b9e42,0x3ba17757,0x3b90e0ae,0x3a41781e,0x3aa7e542,0x3b165589,0x3b822d9f,0x3b90dabd,0x3b6e415b,0x3ad07c0b,0x390a8f49,0x3ac98a7e,0x3c0e9033,0x3b94c930,0x3b136b6c,0x3b3657fa,0xbb36f3ce,0xbb9acdae,0xbbafb307, +0x3ad47d6e,0x3c3809bb,0x3c48106b,0xbaeba9c9,0xbc2ca991,0xbc67df7c,0xbb3edca4,0x3b822007,0x3ba033c9,0x3c949fc6,0x3c7c6e2b,0x3b82a87c,0xb98fe487,0x3b1ec1d2,0x3c5819dd,0x3bd125e6,0x3b8cbb4a,0x3b9a829e,0x3ae718a8,0x3a3696df,0x3b13e603,0x3bbbe7db,0x3bcc902c,0x3c052ef9,0x3c00e580, +0x3c0cf002,0x3c86b56d,0x3bb790b7,0xbb770c73,0xbc2c3811,0xbc23fb67,0xbb64e2ba,0x3c2a68a4,0x3c702789,0x3c80aeb1,0x3c50f091,0x3c391bf5,0xbb32b19b,0xbcf90a9c,0x3c825959,0x3cbfebdc,0xbb799e00,0x3c0374d5,0x3bc1b491,0x3aaf7942,0x3b2c2a4f,0x3b9b4c40,0x3c2dca17,0x3bfef52c,0x3bb0d1ae, +0x3b9bd124,0x3c1b1a3e,0x3c353890,0x3ba3eeaf,0x3b9b3eaa,0x3ba7f5e9,0x3b8c4b0b,0x3bd06717,0x3bf3f2ca,0x3c060402,0x3c14dc05,0x3c0b28b0,0x3c220b74,0x3ba050b9,0x3b7e9ecb,0xbb465a50,0x3c2db0cd,0x3bc7d76d,0xbc4b03de,0xbc03a979,0xbbe4d659,0xbbbfe0bc,0xba824844,0x399a768c,0xbcbb99a2, +0xbba8540f,0xb8cc02fe,0x3a1eef1f,0x3be65c40,0x3b9b242d,0x3b0f6bb6,0x3b53a999,0x3b0feab3,0x3bc3147f,0x3b701357,0x3b948cd9,0x3bb08e33,0x3b41a961,0x3b66db51,0xbb092615,0xb97237b3,0xba08921d,0xb98cdde8,0x3b0f2210,0x3b808766,0x3bdad48f,0x3ae91589,0x3a92e157,0x3adc1aa3,0x3bb0b75d, +0x3bd03bd5,0x3b53b82a,0x3c47933e,0x3c1a5bcb,0xbb446f28,0xba90935d,0xb9475c35,0x3bc08852,0x3bb6cf2e,0x3bfb68b6,0x3ba12173,0xba17914f,0xb98970e9,0x3aea77ca,0x3ba6f152,0x3b96b0ec,0xba6d26a2,0x3b3e61d7,0x3b1d1b79,0x3b34e357,0x3b075df8,0x3b3f41d3,0x3b7794dd,0x3aa218da,0x37fea935, +0xbb2996f2,0xbb0876bc,0xba98cb4e,0xba624434,0x3a98f45a,0x3b082239,0x3bc9163e,0xbb191226,0xbb92c431,0xbb0c8fa1,0x3b20e058,0x3b71e0ca,0x3ad3d66a,0x3baeb7cc,0x3b787029,0x3adf0fbe,0x39e9cd85,0x3b080f94,0x3c387f11,0x3c0d5ad2,0x3b3a2fdd,0x3ba4e3a0,0x3b963904,0x3b2abdf9,0xbbb48e06, +0xbb441280,0xbb9bc8eb,0xbb902d68,0xbb0471fe,0xba0b5b74,0x3a2dba87,0x3ab9bb7c,0x3acb2d5f,0x3ac424e6,0x3b83fb95,0x3ba01fad,0x3b1960b6,0x3ac9dec7,0x3b058a0a,0x3b6edf79,0x3b8fe4e0,0x3baa5463,0x3bbb8ff4,0x3b57c551,0x3adc37db,0x3afc2003,0xbadc864f,0xbbaf3db2,0xbc50da4c,0xbbbf8c3c, +0xbb8c41ea,0xbb1313d0,0x3b21cf87,0x3b8b301f,0x3bb4cdc9,0x3b67149f,0xbba1d12d,0xbc14342a,0xbc47d69b,0xbc9c57ab,0xbcc58ee9,0xbca91bca,0xbc804442,0xbc221bfa,0xbb882b45,0xbb108adf,0xbae59606,0xbb47a6b0,0xba77a927,0x3b059b43,0x3ad1f565,0x3b01ce32,0xba35fc3d,0x3b167168,0x3b0459a1, +0x3afa806b,0xb979664d,0x399eda7c,0x3ba5532c,0x3b97086b,0x3b4df85b,0xb958328d,0xbafa1400,0xbb5a82cf,0xbb12bfe7,0xbc28af51,0xbc1088d8,0xb91e3ee6,0xbb4d0453,0xbb30c1f2,0xbad42c5c,0xbb48e6c4,0xbc3d030b,0xbc64757a,0xbc7ee0ac,0xbc5bbb3a,0xbbe8078f,0xbc259a34,0xbc2fd328,0xbc4ee516, +0xbc470de9,0xbc268b8f,0xbbf8a285,0xbbd6dea4,0xbb65d510,0x3affd840,0x3ac160bb,0x3b28a470,0x3b032444,0x3b97b09d,0x3bab658f,0x3ba454d1,0x3b4ae3f5,0x3b7de458,0x3bdfe3c5,0x3b5da0b8,0x3b232c7b,0xba9b5f5e,0xbb0ba63e,0xbb748a19,0xbbc9cce4,0xbbcdef91,0xbc176985,0xbc69f8b8,0xbc8b7aa9, +0xbc84f2bf,0xbc408e96,0xbc41b85a,0xbc867e90,0xbca81b12,0xbc9551a1,0xbc8600db,0xbc45db15,0xbc413dbc,0xbc24bd79,0xbc15b372,0xbbe4c3d5,0xbbb42766,0xbaf64c34,0xbb0b0b80,0x3968943d,0x3b47dbd8,0x3abdb4e2,0x3ac5474b,0xb8ed4fdc,0x3af00c7a,0x3b1c4f69,0x3b15a8d5,0x3b9b443c,0x3bb122ce, +0x3c075a22,0x3bbf1032,0x3b940f17,0x3afc1a09,0x3a85bf4f,0xb9ea8b6f,0xbb19f4fa,0xbb190dd2,0xbb40057e,0xbb864076,0xbc1044e9,0xbc411692,0xbc4e094d,0xbc7d4692,0xbc6d997d,0xbc864057,0xbc67c5fb,0xbc59635c,0xbc586b0c,0xbc1a7183,0xbbd2f3dd,0xbb523a1b,0xba86cf77,0xb9883672,0x3b324877, +0x3ad2b1d8,0x3b4ef16b,0x3b76113b,0x3ac62f40,0x3a2324d3,0xba454572,0xba67cc00,0xbaf77b63,0xb7750de9,0x3b02d6b1,0x3b16a86c,0x3b8bfe71,0x3b3da54e,0x3b13fc15,0x3abf9db6,0x39d728e7,0xba28ad37,0xbaf39b94,0xbb0b98c1,0xbae5de3e,0xba89d3bd,0xbb43f8e7,0xbbcf9b23,0xbc285bb6,0xbc4dd677, +0xbb9bc329,0xbb8fcada,0xbb87c0be,0xbb1fa547,0xba39c8eb,0xbac618b9,0xbaed2420,0xbb083242,0xbb265957,0xbb0c3002,0xbb1795a5,0xbaa7561d,0xba2ae6c9,0x39eeb32d,0xb82970e8,0xba330ea5,0xbafb14e4,0xbadaccd2,0xbb6fe72e,0xbb6fe0d4,0xbb96fbaf,0xbb9e7640,0xbbb4fa71,0xbbac028f,0xbb9d3ad0, +0xbb9b6a72,0xbba9636e,0xbbc1f95c,0xbbcb29c9,0xbbef095f,0xbc0e1a2f,0xbc27a9c4,0xbc228462,0xbc0871e4,0xbbd79e58,0xbbbe692c,0xbb63e90d,0xbb698eea,0xbb855dfc,0xbb9b958f,0xbbb1c8fb,0xbb68e56b,0xbb5ed026,0xbb676a90,0xbb431c1b,0xbb332f4f,0xbb2951f0,0xbb281b21,0xbb39609c,0xbb41dc45, +0xbb0a08f8,0xbabb3a74,0xbb824e32,0xbb470382,0xbb0d5bfb,0xbab52af4,0xba9a3b5e,0xba80d5c1,0xba519c23,0xba48dfe0,0xba72c3fd,0xba69d180,0xba8850c0,0xbaa3ba11,0xbabfdc21,0xbac2981b,0xbab7f863,0xbaa426cb,0xbab0fa4e,0xbb022e7e,0xbb33d6ef,0xbb587c3e,0xbb45d9e9,0x3b3f418c,0x3ac7f341, +0x3ad2f01d,0x3aee7207,0x3b070ca1,0x3b16cdd2,0x3b004507,0x3b0b175e,0x3b0dd653,0x3b23b650,0x3b318982,0x3b30a91f,0x3b4261b8,0x3b42a4c5,0x3b2caea2,0x3b0f9f40,0x3af0b818,0x3b226e77,0x3b0a8812,0x3afdc901,0x3ad69a3e,0x3aee3c8e,0x3af46df0,0x3b0020db,0x3af0d5ed,0x3adbbbde,0x3ab3f009, +0x3aa93826,0x3ab722e4,0x3b05c817,0x3ae786e0,0x3ad6899b,0x3aea2ac6,0x3ab36123,0x3aa3318b,0x3a8baaff,0x3abbc6d3,0x3b2de9b6,0x3b39fe4b,0x3b2e5b33,0x3b1233fe,0x3b2715a1,0x3b382a4a,0x3b47c779,0x3b2d1f6f,0x3b519834,0x3b813ec2,0x3b814f8d,0x3bacccd5,0x3ba6a6bd,0x3b5865e6,0x3b24fc72, +0x3b02a64f,0x3b249f72,0x3b1c8b12,0x3b27b644,0x3aef036a,0x3afeadc9,0x3b098bd3,0x3b237ed0,0x3afe4b50,0x3aa44d87,0x3a3dc2ad,0x3961331b,0x3a8751f8,0x3b7a138a,0x3b18ede2,0x3af69732,0x3b193010,0x3a4ece9e,0x39e30415,0xb87e995a,0x3acbae8c,0x3ad78322,0x3b198a77,0x3ae7642b,0x3b192893, +0x3b1f7ba6,0x3b40c529,0x3b49c0da,0x3b04300d,0x3b83a246,0x3ba0e635,0x3b9fc8af,0x3bf90258,0x3be52762,0x3b844eec,0x3b504615,0x3b098ede,0x3b2dedc3,0x3b314728,0x3b15fd06,0x3ae25c83,0x3b011983,0x3b22204b,0x3b4dcd89,0x3b16e658,0x3aa59f8d,0xb9aa755c,0xbaa5ba3c,0xb9c8f799,0x3ba2a0c2, +0x3b1237cb,0x3b0a7d3e,0x3b2059dd,0xb9c67303,0xbac4f4ab,0xbb0a30be,0x3a5df60d,0x3b83b9ca,0x3b8dd9f6,0x3b1bf052,0x3aeec40c,0x3b21355d,0x3b413afd,0x3b7494e0,0x3b423de4,0x3b9d5420,0x3bd5c2f7,0x3bb8cd48,0x3c2d0d80,0x3c1dde70,0x3b614a3d,0x3b44d383,0x3b0c35db,0x3b71f6ab,0x3b42f887, +0x3b2481e5,0x3a51eda0,0x3ab3031f,0x3ad01414,0x3b53d59b,0x3af1431d,0x394c3ede,0xbb1dc454,0xbb446d51,0xbaaf10a4,0x3c05f4dd,0x3b1a102e,0x3b0a773a,0x3b4ba316,0xbb15fdb9,0xbb5f49bd,0xbb942939,0x39527cf6,0x3aae8006,0x3aca4c8e,0x3a2f1534,0x3b3f38be,0x3b3b8895,0x3b47ca39,0x3b34105f, +0x3ab2812c,0x3ba0bdb3,0x3bdcf86d,0x3bb6290a,0x3c2acb9c,0x3c02402b,0x3b1a12da,0x3b7dd37d,0x3b9f0284,0x3be6a8bb,0x3b5b4e03,0x3b294c49,0x39957aaf,0x3ac6dcaa,0x3b306e69,0x3b76236f,0x3b2b27cc,0xb81a1fb4,0xbb3a4fd5,0xbba231ba,0xbafcef21,0x3c075b63,0x3b6844f3,0x3b311cc5,0x3b3cf810, +0xbb7978cf,0xbbd9d7aa,0xbbcb470b,0x36809767,0x3bd315fd,0x3c5b0ebe,0x3b85e94c,0xbb73ded8,0xbc4ea0fc,0xbb2336f5,0x3b51d45e,0x3b6e28c5,0x3c81317a,0x3c857b3d,0x3bf94b9d,0x39d5e0b6,0x3b0e569b,0x3c4a7f89,0x3b9b6f06,0x3b47f81f,0x3b8271f9,0x3b5a07c5,0x3b526d01,0x3b90c1ed,0x3bdde6e9, +0x3bd5b0a7,0x3c08a673,0x3c0f787c,0x3c18b1fe,0x3ca01764,0x3a5ff5b7,0xbc0fa378,0xbc302244,0xbc069c3b,0xba5db317,0x3bd2200c,0x3c8d85be,0x3c8eae49,0x3c0d87e4,0x3bbefada,0x3a99bbbb,0xbcd31b93,0x3b30055d,0x3c4e0d86,0x3a24ae24,0x3bda86e1,0x3bbf4635,0x3b9e23ab,0x3b4e5021,0x3b7d6232, +0x3c287cff,0x3c17e2e3,0x3be9cd68,0x3b92c4b4,0x3c16705f,0x3c1fe201,0x3b8795a7,0x3b5bcabb,0x3b729cbf,0x3b89163e,0x3b9ca200,0x3bd76c8f,0x3c1cd1b9,0x3c3655e6,0x3c1d026d,0x3c1b389e,0x3b38d090,0x3b18b0b8,0xb89a06f6,0x3c21addd,0x3bd6d9eb,0xbbf6e80a,0xbb9b920f,0xbba07c07,0xbbdd29f9, +0x3b49448f,0x3b9e9685,0xbc96c0a8,0xbbd2c01d,0xbb3a462c,0x3b5d1947,0x3bdf6167,0x3bc20925,0x3b22ead9,0x3b499899,0x3b147f00,0x3bbb8d64,0x3b8da47e,0x3ba2cf6d,0x3bb19ac3,0x3b56d137,0x3af33893,0xbad817bf,0xb9ff7e86,0xbac7201e,0xb9a6c0d0,0x3987e1db,0x3b28d743,0x3bfa03f6,0x3b0ac867, +0x3af7e0e5,0x3b77af14,0x3ba34ef4,0x3b9f34bc,0x3bb24a74,0x3c139ea1,0x3b943db8,0xbbaa4c55,0xbb1b3b86,0x38eeac7c,0x3bdce802,0x3c1540ee,0x3c270dbb,0x3bf70aea,0x3b43a429,0x3b1d773c,0x3a38baa3,0x3bc73d4f,0x3bb086d8,0xbb0f1339,0x3b5a6916,0x3b535d1f,0x3b2e79fa,0x3b2b0ea5,0x3b5601ec, +0x3b97eaac,0x3a4a3bf3,0xbab469b4,0xbb089a8c,0xbb20988c,0xbaef9370,0xba8db729,0x39804ba3,0x3a8d8ccf,0x3bc1e302,0xbb5c3a7d,0xbb9d56fd,0xbac128c6,0x3ae48097,0x3b36c75e,0x3b87df3f,0x3b47f67b,0x3a461954,0xb9d4932e,0xba60b012,0x3aa4d56b,0x3c16fe44,0x3c22651a,0x3b4d2f22,0x3b7d55f8, +0x3ac7b227,0xb8c41977,0xbbd81fe5,0xbb9a1d1c,0xbbc9ed72,0xbb893cab,0xbaa05f2f,0x39474649,0x39d3ad8e,0x3b1e986c,0x3b0a9aa1,0x3a306f8f,0x3b2a541c,0x3b472665,0x3ad76d58,0x393edeec,0x3a8df909,0x3b82822f,0x3b9571d8,0x3ba29d05,0x3b96cfd4,0x3b236af7,0x3a4343fa,0xba26a530,0xbb5718ec, +0xbbaeac5c,0xbbe2cacb,0xbb4b9147,0xba415279,0x3b6aa0dd,0x3bdcaced,0x3bd8f443,0x3b992a95,0x3ba6fa31,0xbbcc4fa1,0xbbee4e34,0xbc451fbd,0xbc95c616,0xbca34901,0xbca30dc0,0xbc82173c,0xbc2d7005,0xbb9cebf0,0xbaf06ca5,0xba8efc9c,0xbacd6c8e,0xba84dade,0xba1b2d88,0x3a2e66ea,0x3ab7ff64, +0xb92352ef,0x3a324182,0x39dd7d4b,0x3ae86f8a,0xba225154,0xba143d8e,0x3b1da221,0x3b4856b3,0x3b216e51,0x39da5db8,0xba608e57,0xbb6aaf4f,0xbb3912ed,0xbc3c252b,0xbc38eb7d,0xbb926fe6,0xbb57c487,0xba3d257f,0x3ae52420,0xbb906d1a,0xbc1f962e,0xbc31d7b7,0xbc3e46ea,0xbc27ccd3,0xbbc8fd03, +0xbc3a8287,0xbc54375c,0xbc57dc85,0xbc4bd65f,0xbc2f21c5,0xbc1038b9,0xbc1542f6,0xbbcda10b,0xba2b5261,0x3a850d3d,0x3b2c3308,0x3b0d4fbd,0x3b7a944b,0x3b876ad3,0x3b8b248a,0x3ad6c93d,0x3b098f5e,0x3b7a7601,0x3b55bde8,0x3b07bb5b,0xbabb27f1,0xbb3045b6,0xbb85d348,0xbba3253e,0xbbeaa30f, +0xbc11546c,0xbc2d5a19,0xbc64f1ad,0xbc71b831,0xbc58063e,0xbc3374db,0xbc6c0d50,0xbc8ebffa,0xbc7cc2f2,0xbc6d0e49,0xbc435eeb,0xbc40044d,0xbc2b6ac9,0xbc1723c7,0xbbf5d852,0xbbdfa204,0xbb8bda25,0xbb8e30a5,0xbac9ccb6,0x3abea63d,0x3a99aeea,0x3aed4e53,0x3a71b1f6,0x3b2ebd5d,0x3b6c3f28, +0x3b8462d4,0x3b9661de,0x3ba3b40e,0x3bdd4b52,0x3bbaf1d0,0x3b998fe4,0x3b4f8867,0x3b06b392,0x39209482,0xbb37740d,0xbb82f307,0xbbb347e3,0xbbd660a0,0xbc2bf842,0xbc55a9c9,0xbc6d50b9,0xbc76efaa,0xbc64a4f9,0xbc7ec288,0xbc73cfb3,0xbc5a9d6d,0xbc5afa1b,0xbc20a907,0xbbd4a15c,0xbb5aa1f4, +0xbb16c73d,0xbb1e1e2a,0xb90d985b,0xba1daf8b,0x3b01379e,0x3b2f0a63,0x3ab31a2e,0x3a4bfc35,0x399c1d23,0x3a47f786,0x3a81ecdc,0x3b217ac3,0x3b698e99,0x3b5f5426,0x3b90f12a,0x3b813f6d,0x3b880467,0x3b90e104,0x3b1407fa,0x3a44e4c5,0xba58254f,0xbac6aedf,0xbb02b85e,0xbb254c51,0xbb97c776, +0xbbf46a68,0xbc2c85e6,0xbc4d4475,0xbba8dd3e,0xbbb2644b,0xbb8f0fb6,0xbb53bbca,0xbac4cbb2,0xbb2c3e84,0xbb4effe4,0xbb5108d2,0xbb4caaf6,0xbaedb798,0xbac51683,0xba1713e9,0xba0b5fc3,0x3a5d6837,0x3a07616b,0x399f08c1,0xba28cd02,0xba4298a3,0xbb37163c,0xbaeffe25,0xbb078c5c,0xbada31a4, +0xbae6e9ad,0xbaa67c50,0xba87b82b,0xba82a8b8,0xba8b87eb,0xbae6c8dd,0xbb13e603,0xbb50c96c,0xbb8f6ddc,0xbbac6bbf,0xbbbbcd8f,0xbbadee2b,0xbba18dea,0xbba7c6dd,0xbb0ad3c3,0xbb29e12c,0xbb236b47,0xbb30d7e5,0xbb3b882b,0xbb00797c,0xbaa31aed,0xba6d03af,0xb9db3067,0xb9c5b6fd,0xb98203ed, +0x382b91bf,0x397daec3,0x397f5747,0x37e88307,0x3984b562,0xba68623f,0xb9680f1e,0x39ce9be1,0x3a5bd6e8,0x3a53a61b,0x3a788348,0x3a87ff3a,0x3a8cbed1,0x3a89d0ae,0x3a91431b,0x3a6419f5,0x3a02979e,0x39b0acd6,0x397e0bef,0x38ddaa19,0x38687701,0xb9848336,0xba46ccd4,0xbab66a3d,0xbaf95f24, +0x3911c58b,0x3afb1663,0x3a768977,0x3aa55692,0x3aa843cf,0x3ac4d6d0,0x3ae89968,0x3aca59a1,0x3ad5e6bc,0x3ad7c446,0x3b002cb0,0x3b0ba115,0x3b0dfbf6,0x3b1d3296,0x3b1f0e3c,0x3b0fbc0c,0x3acc885a,0x3a950537,0x3ad1704f,0x3ab73f17,0x3aae7fd8,0x3a9509b7,0x3aaccb2a,0x3aae88b4,0x3ab1f890, +0x3a8558ae,0x3a44e75a,0x39c56b0b,0x39d4d0a1,0x3a210c27,0x3ab70ed4,0x3a9493a9,0x3a894092,0x3a9d857c,0x3a468adf,0x3a1adbab,0x39cf047f,0x3a463962,0x3af72b56,0x3b40cb3b,0x3b2351d9,0x3b0905b4,0x3afe0faa,0x3b278853,0x3b37f439,0x3b0d84ee,0x3b35b266,0x3b6090e3,0x3b637057,0x3b991667, +0x3b93172d,0x3b4dfa49,0x3b048731,0x3a8fb77b,0x3a8c8620,0x3ac177ea,0x3af1e5a6,0x3ab076ad,0x3ae41f7f,0x3aeab410,0x3ae1d329,0x3a2d4b09,0xb9f2c9ee,0xbac6679b,0xbad98aa8,0xba20199b,0x3b268c8e,0x3aa81520,0x3a845609,0x3ab7e769,0xb998b1a6,0xba26c5ee,0xba53be0b,0x3a19a537,0x3a930529, +0x3b478a93,0x3adf4891,0x3b1d2593,0x3b198e33,0x3b608fc1,0x3b5f648e,0x3af92384,0x3b7a2520,0x3b981f8a,0x3ba0e0ee,0x3bea88e0,0x3bdc5b6c,0x3b8f3cd6,0x3b2c6194,0x3a93caf0,0x3a0997f7,0x3ad98dd9,0x3addbf6e,0x3acd9a28,0x3b116595,0x3b1c7813,0x3b1f4813,0x39eee3e1,0xbaa8dab1,0xbb5f0ee5, +0xbb817a1b,0xbb15ea54,0x3b6d1e8c,0x3aa0d5a6,0x3ab17193,0x3ad22ae7,0xbaaea6b2,0xbb2534bc,0xbb3ed6c0,0xb9669fc2,0x3b604f8c,0x3bc9f535,0x3b6683a8,0x3b35f6f7,0x3b0dab14,0x3b728e22,0x3b9c40cd,0x3b48f63e,0x3ba8317b,0x3bd7fa7a,0x3bc74e68,0x3c311c48,0x3c21dc4a,0x3ba0e407,0x3b40b25c, +0x3aa061e1,0x3a69e9e2,0x3af0235a,0x3b09193a,0x3a5fa1dc,0x3b14a521,0x3b0baafc,0x3b2db0ba,0xba3d5f5f,0xbb77c06e,0xbbeab57d,0xbbe07f22,0xbb8d12a1,0x3bbd974b,0x3a7910fa,0x3a6cc921,0x3afde5b0,0xbb81ad6c,0xbba1a29c,0xbb9b7f9d,0xba80469e,0x3a97fbb2,0x3b6bf0a4,0x39107241,0x3b305a16, +0x3b60d462,0x3b9f145b,0x3b7cc283,0x3b0a255c,0x3bab5a56,0x3bdac70d,0x3bd59a7d,0x3c3aa685,0x3c16c9ec,0x3b834609,0x3b7e53eb,0x3b77e78a,0x3b77909c,0x3b0ba21e,0x3af62955,0x3a65c165,0x3b231849,0x3b59a54f,0x3b55b19a,0xb9152706,0xbb926467,0xbbf5aa12,0xbc186576,0xbb9accf4,0x3bd925c8, +0x3afc9801,0x3b083360,0x3b053536,0xbb9bf06b,0xbc002ff6,0xbbd92c47,0xbab17943,0x3b748247,0x3c80a40b,0x3c31bb6e,0x3b5fda1b,0xbc3632f0,0xbb66624d,0x3ac77c48,0x3b6eb252,0x3c4f0402,0x3c81e208,0x3c3732dd,0x3ac50ff2,0x3ae3c5e2,0x3c318931,0x3b5fb170,0x3b23ee61,0x3b95dfce,0x3bb315ee, +0x3bbdba97,0x3bc35460,0x3be22409,0x3bd0ee88,0x3c09bd0f,0x3c1a11eb,0x3c1b0466,0x3c9a286d,0xbb7622dc,0xbc5942c6,0xbc5e0b92,0xbbdfe48b,0x3a6b2086,0x3ab5bbcc,0x3c907d9d,0x3c91483b,0x3ba6aead,0x3b1294aa,0x3b368e7e,0xbca79b60,0xbc4edc22,0xba0c5618,0x3c0bab52,0x3bb3695b,0x3b9d149d, +0x3bf75042,0x3b81cc33,0x3b782964,0x3c20c7ed,0x3c2e677e,0x3c0ea938,0x3b81c08c,0x3c02a205,0x3bfbebce,0x3b6b129f,0x3b14d7ed,0x3b2c10ba,0x3b820f2b,0x3b648b35,0x3bbc3880,0x3c260154,0x3c40c983,0x3c1ad5de,0x3bed3701,0x3a2b0c8d,0x3ab1150f,0x3b64ecbe,0x3bdf653a,0x3b9c0475,0xbb83badb, +0xbae4c65e,0xbb07e52c,0xbbf3affe,0x3bb5bcbe,0x3c11017a,0xbc3c3e1a,0xbbbad14d,0xbb98b122,0x3be177ce,0x3bd03e33,0x3bc616e3,0x3b1f707c,0x3b466071,0x3b3613fd,0x3ba81f8c,0x3ba62d82,0x3bae8c58,0x3bac707a,0x3b5cdeaa,0x3a2ebd33,0xba01d775,0xb99c6a55,0xbb060b0a,0x394a9164,0xba7d4cf9, +0x3aad9ee1,0x3bdeb623,0x3b5bed9f,0x3b5e4a6b,0x3b7c1bc6,0x3b97d49b,0x3b5e6e12,0x3bc8b696,0x3b7ae3ac,0xbadb0048,0xbbeb8e5a,0xbb5ecd3d,0x3a7fee22,0x3bfabbca,0x3c3dbd50,0x3c533083,0x3c2f335b,0x3bf15862,0x3bc408e2,0x3a2d8d2a,0x3bc86944,0x3b989ecd,0xbb24b8dd,0x3b62e694,0x3b7e6f56, +0x3b2ab552,0x3b497b56,0x3b6a7ea4,0x3ba3db70,0x3a0091e3,0xbaf76428,0xba6149a4,0xbb0f3d41,0xbaf9fcb7,0xba360495,0xb98840e7,0x3a1ac7d7,0x3b9ae955,0xbae24f6a,0xbb3b39a5,0xbaf020aa,0x3a2c85ea,0x3a9306a9,0x3bb25644,0xba8bbb92,0xbb4c17ab,0x3aa39625,0xbb0596a2,0x3a25ac29,0x3c02ebbb, +0x3c283f1b,0x3aaa905f,0x39f2897d,0xbb517fe9,0xbb79b469,0xbbf2f6c4,0xbbc0dc0a,0xbbdb29c6,0xbb903eed,0xb9e77e87,0x3aa994c9,0x3a1f472c,0x3b660381,0x3b2ed371,0xb986f6e1,0x3a8c78aa,0x3a98c218,0x3aab2bb3,0xb9f2552c,0x3a1f3765,0x3b8c2f34,0x3bacdd19,0x3bb9d4df,0x3b9b0e25,0x3b18be02, +0x3a03a25a,0xbb0d6814,0xbb825e1d,0xbb9bd19f,0xb9fbe8aa,0xba28ffbe,0x3b4c3052,0x3c23f4f5,0x3c363599,0x3c207627,0x3bb7c16d,0x3ba5c525,0xbb9aebbc,0xbba1f6c5,0xbc2be9a4,0xbc846b3e,0xbc6519e2,0xbc8bf0d7,0xbc6da8cf,0xbc296e91,0xbbb67746,0xbb212dee,0xbad09d8d,0xba90ff6c,0xbaaca13e, +0xbb2f2425,0x3832f1f3,0x3a65cb78,0x38fd1d9c,0xb9048727,0xb8cbe39a,0x3acddc77,0xba782fb5,0xbab43842,0x38f1a71e,0x3aa16b5d,0x3ac3e0d0,0x3a997bbb,0xba35db3e,0xbb50d3aa,0xbb5121ea,0xbc33d19d,0xbc4524dd,0xbc2332d0,0xbbb1ffaa,0xba84ded6,0x3b4797cb,0xbb59adf7,0xbc0a9a15,0xbc148652, +0xbc1d3391,0xbc18e217,0xbc0c68fb,0xbc5d2326,0xbc7777bd,0xbc652f6c,0xbc4ded96,0xbc2dad16,0xbc1453f9,0xbc247c4c,0xbc030234,0xbb54a0f2,0x39bc41e7,0x3b1f261c,0x3b0e5743,0x3b55f960,0x3b581d50,0x3b5a0da9,0x3a9c8ef5,0x3a81ed82,0x3a5aead0,0x3b3a0ac7,0x3b064950,0xba4f2c15,0xbb3f0205, +0xbb85bf87,0xbb8593cd,0xbba6ab38,0xbbb4f1ba,0xbc00d990,0xbc0b684d,0xbc230b60,0xbc492f6b,0xbc1b5c3e,0xbc3f0d8c,0xbc5a1979,0xbc404f60,0xbc3bf17f,0xbc2bb15c,0xbc2b5a5e,0xbc21f2d5,0xbc1016b4,0xbc018801,0xbc044fba,0xbbdc597a,0xbbd03471,0xbb588344,0xba543951,0x3a2de387,0x3b069a57, +0x3b1ed870,0x3b49ff41,0x3b7373ef,0x3b754377,0x3b38b260,0x3b431a18,0x3b52bc91,0x3b84117b,0x3b86be7a,0x3b8e98eb,0x3b0f2849,0xb9a399c9,0xbb838261,0xbbacb905,0xbbeb6ff4,0xbc18837b,0xbc3367a1,0xbc4d475d,0xbc6cfdac,0xbc582e6d,0xbc499e81,0xbc590197,0xbc58f494,0xbc3d012d,0xbc3214db, +0xbc08dc14,0xbbb9eda4,0xbb5eedb9,0xbb6b9473,0xbb9a1c87,0xbb72f9a0,0xbb685314,0xb9a05a83,0x39e6c0b9,0x3a235f49,0x3a745c63,0x3af6fb73,0x3b1345eb,0x3b2ccdc8,0x3b6b5c0d,0x3b8073a0,0x3b6a440f,0x3b736a1d,0x3b8465a9,0x3b998ecd,0x3bc5ae83,0x3b4295c2,0x3a9f7e4e,0xba50ddbd,0xbb0ad040, +0xbb5f5282,0xbb92004b,0xbbd4ebd0,0xbc0c0963,0xbc28e78b,0xbc3d4eb4,0xbbdd0815,0xbc00d197,0xbbc9541d,0xbbc0f788,0xbb98de16,0xbbb540dc,0xbbc40317,0xbbaa7d4b,0xbba02857,0xbb3136ec,0xbafbf137,0xbaa1047b,0xbade3862,0xb9f857ab,0xb9879637,0x390b15e4,0xb95bca97,0x39973715,0xba2b0413, +0x3abe44e2,0x3ac58c8b,0x3afc460d,0x3b068d2d,0x3b208d7e,0x3b185abd,0x3b0adf91,0x3b071be2,0x3ab7b56e,0x3a242fb7,0xb7fc0c38,0xba879985,0xbaeee8f8,0xbb424abf,0xbb5d4efe,0xbb92ec80,0xbbbc6c0d,0xbb0baf56,0xbb3ae848,0xbb1ab284,0xbaffeefd,0xbabc5ee9,0xbad61867,0xba306a38,0x393aaa65, +0x39faaa1a,0x393e73e1,0x39211b68,0x3a126b76,0x3a8a80a6,0x3a925108,0x39a13907,0x39ace21f,0x3a0d1de4,0x3a4fe487,0x3a8aa104,0x3aa0d302,0x3a8167a6,0x3a920d07,0x3a967129,0x3a96baee,0x3aa17480,0x3aad2eed,0x3a825fef,0x3a0514dd,0x39a863b5,0x37a629f8,0xb983f9a7,0xb9eaa56d,0xba654118, +0xba9bd3da,0xbad6113e,0xbb01a722,0x38124aee,0x3a6bf5a8,0x39c1d961,0x3a5f01fa,0x3a3d854f,0x3a80647b,0x3aa4e905,0x3a894d44,0x3a93f955,0x3a8e3d80,0x3abd9c6b,0x3ad4019a,0x3adabc0a,0x3af1f966,0x3af8e6b9,0x3ae44722,0x3a6fffb6,0x39eac487,0x3a510921,0x3a40111c,0x3a386c04,0x3a18a6c8, +0x3a4ad37d,0x3a432af5,0x3a388d64,0x3935e804,0xb9210d63,0xba092234,0xb9c62ec2,0xb8f77109,0x3a297253,0x39d5e15d,0x39c424d1,0x3a1900a9,0x38c294fc,0xb88ef0bb,0xb954a63e,0x38f1f77f,0x3a9d8f31,0x3b48c129,0x3b278c3b,0x3b011f52,0x3abd9412,0x3b13c225,0x3b236444,0x3ac3a737,0x3b18fb04, +0x3b3f0d69,0x3b3cae9c,0x3b81cbb3,0x3b735bae,0x3b392cb3,0x3aba05a1,0x39372250,0xb93e3d35,0x3a0976e2,0x3a9697b6,0x3a6b4184,0x3acb1320,0x3ac2153d,0x3a5c8948,0xba2d25c1,0xbb07279d,0xbb5e7793,0xbb430bfb,0xbaf25967,0x3a8e5cbf,0x392a795d,0x391c9370,0x3a3cd9ed,0xbaae775d,0xbada2013, +0xbab673f0,0xb99797e2,0x3a296537,0x3b779d70,0x3afae0ad,0x3b204237,0x3b0bd2f5,0x3b7555fa,0x3b6b8f40,0x3aaf897a,0x3b6ef849,0x3b8db703,0x3b9f7dde,0x3bd237dd,0x3bcad285,0x3b8ede17,0x3af5fd2a,0x38be01ac,0xba98315e,0x3a187b99,0x3a8975f7,0x3ab6676d,0x3b1a55d2,0x3b0f40b5,0x3abb81ca, +0xbabf07bd,0xbb6c54fc,0xbbbf0e0f,0xbbb952fd,0xbb675843,0x3ae05955,0xb7a3eeb0,0x394b131b,0x3a68a738,0xbb1dd9d8,0xbb5fea66,0xbb5c01da,0xba8e236e,0x3b401a82,0x3c08d367,0x3bac2f24,0x3b856a09,0x3b0b6ef5,0x3b94ac6a,0x3bb9d28c,0x3b3194a7,0x3bb205ba,0x3bdc02f0,0x3bcdbc31,0x3c2fa82c, +0x3c1fe498,0x3bbe3708,0x3b29e795,0x38b94db8,0xbac1567a,0x3a07fb90,0x3ad4a90c,0x3a98b167,0x3b52bb52,0x3b375af3,0x3ad7318e,0xbb6296e7,0xbbf69202,0xbc30372d,0xbc15f5e6,0xbbc64e18,0x3b34a227,0xba0adda7,0xb9ea32e5,0x3ac82ef4,0xbbb49066,0xbbcc2190,0xbb976b39,0xbb0019d4,0x3a7f01df, +0x3bc60608,0x3a7bdf6a,0x3b3bb49d,0x3b81713e,0x3bd6162c,0x3b9f67f5,0x3b1d9ea7,0x3bb4dd22,0x3bdd1c05,0x3bf9df40,0x3c49ec8f,0x3c29348e,0x3baecd50,0x3b74caae,0x3b1e0b50,0x3a282aca,0x3a626081,0x3ad1fa9f,0x3ac7f315,0x3b5fb874,0x3b75a22b,0x3b096384,0xbb4ac679,0xbc077df7,0xbc32f3a7, +0xbc3ba154,0xbbc89728,0x3b79a62d,0xb7d5d003,0x3a1224b1,0x3aa460f7,0xbbbfff0e,0xbc0cd681,0xbbd29b59,0xbb224656,0x3b39fe08,0x3c8e19d0,0x3c8eff2d,0x3c283395,0xbc044e45,0xbba1f563,0xba6b5de1,0x3b7e0dbd,0x3c1888d2,0x3c6f00d4,0x3c722fdb,0x3b2b9d4e,0x3a7c2f77,0x3c166aed,0x3b2042a4, +0x3b1bf5d9,0x3bbb815b,0x3be97363,0x3bf71fc8,0x3bccbf1d,0x3bcd945d,0x3bbf8c90,0x3c036425,0x3c19d3c2,0x3c08bbe9,0x3c63f7d9,0xbc0292b9,0xbc868073,0xbc8d9dad,0xbbc7605f,0x3af68a9c,0xbb3fb286,0x3c80b3a8,0x3c7fedbb,0x3a97da08,0x391b9059,0x3aec6547,0xbc838fbb,0xbcd5d541,0xbc4b306e, +0x3c82f769,0x3bbe3bde,0x3b89f6eb,0x3c0b29dd,0x3b931d0b,0x3b7ae79f,0x3c160000,0x3c399d6b,0x3c1db85c,0x3b54e7c6,0x3bc9f247,0x3bae4731,0x3b5178d9,0x3ad11bad,0x3b08fcf4,0x3b6f1cec,0x3b0d0e08,0x3b94ca8e,0x3c1aaacd,0x3c3abf35,0x3c097dda,0x3b7cd0ce,0xba11572e,0x3a5d007b,0x3bd19960, +0x3b1de125,0x39bbc5d6,0xbbaca9e8,0x39cc660e,0x3a898faa,0xbbddc1ec,0x3bc11744,0x3c3eb139,0xbb36db13,0xbb4cc955,0xbb96b142,0x3c2b325d,0x3bd3e474,0x3bc71c8c,0x3b111e58,0x3b57ab27,0x3b6ae6c4,0x3b8a6bd0,0x3bb7f378,0x3bb4fed8,0x3ba36d51,0x3b507988,0xb8a0a2da,0x3a03dd3e,0x39399e24, +0xbad27ed6,0x3a284c94,0xbad24da1,0x39a30fa4,0x3bab9e2b,0x3b7a18ae,0x3b846b02,0x3b890177,0x3b8232b4,0x3afcc11c,0x3bd29d94,0xbabcee86,0xbbe1121e,0xbc141be0,0xbb306603,0x3b4a520d,0x3c1a76a4,0x3c547f68,0x3c71fa3b,0x3c5b2cff,0x3c3ec8e8,0x3c1c4525,0x3ac51dff,0x3bcdff03,0x3b8c737e, +0xbaf35d8e,0x3b735c2e,0x3b8dff3f,0x3b2ae591,0x3b584551,0x3b6c7a4e,0x3b9b0659,0x39e7bf84,0xbae4ef8f,0x3916ae47,0xbad64c3e,0xbac73506,0xb8b13280,0xb9845d9c,0x3a27ef9e,0x3b67196e,0xba1c7af3,0xba87995d,0xba03d50d,0xb882e2c6,0x37ea3144,0x3bcce707,0xbb809270,0xbba1a190,0x3b7c5946, +0xb9b3ecd6,0x3b05070e,0x3bdb204d,0x3c282b0c,0xba9b8d60,0xbb9277bc,0xbbfbdfed,0xbbd9d92f,0xbbec61ab,0xbbb45db6,0xbbbfcb81,0xbb92843b,0xb8454172,0x3b0245ba,0x3a904bfa,0x3b8497bd,0x3b388910,0xbab29b9f,0xb8e0c8e5,0xb8fbb5ce,0x3a88caad,0xb9cf42e4,0x3a38e947,0x3b91a8a7,0x3bb266c2, +0x3bc37807,0x3b99006f,0x3b327f17,0x3a8fa00b,0xbb21e434,0xbba7b919,0xbb958a70,0x3ba628b4,0x3a092f8d,0x3bb8a5e3,0x3c7136a2,0x3c64b72c,0x3c489eb4,0x3bd905b1,0x3b903811,0xbb144c1d,0xbb599d94,0xbbf34586,0xbc4f7bfa,0xbc1a6475,0xbc567d53,0xbc3c64d6,0xbc0d67ca,0xbbb8dca7,0xbb56177c, +0xbb4102b7,0xbaf9304a,0xbb0992fb,0xbb81b417,0xb8a5a618,0x3a125617,0x390b4d8c,0xb9a1cd80,0xb9337893,0x3a81143d,0xba65b319,0xbae02942,0xba9e1263,0xb97db4a6,0x396dae4a,0x3ab9664e,0x391fa30f,0xbab00aa4,0xbb28aace,0xbc13d7d3,0xbc36c47a,0xbc6ded3d,0xbbf20aeb,0xbb19e2b1,0x3aac70e4, +0xbacc6fd3,0xbbdf97af,0xbbf5b9b2,0xbc03fb88,0xbc142556,0xbc4487d4,0xbc757ff3,0xbc8548ab,0xbc79361c,0xbc538d52,0xbc2ab2d2,0xbc11a451,0xbc1fd2dc,0xbc0bf491,0xbba9b453,0xba4d56b4,0x3ad9eebb,0x3b1d3884,0x3b2fbdfb,0x3b300624,0x3b2a42b2,0x3a95367f,0x3a1d4ba5,0xba226db3,0x3adff8ae, +0x3afa8d95,0x3a1bf96c,0xbb091ffe,0xbb5b5832,0xbb692add,0xbb546161,0xbb29198e,0xbb9b6879,0xbb952787,0xbbbc1485,0xbbfd1b6b,0xbbe7fca9,0xbc0fb0c6,0xbc1e2d8a,0xbc0a0555,0xbc111254,0xbc14227f,0xbc17319a,0xbc1bb747,0xbc13eb25,0xbc11afc7,0xbc1aea7a,0xbc161b99,0xbc06d1fb,0xbba9a5de, +0xbb6abdb0,0xb9ed2fc0,0x3aeba961,0x3b7c9fc0,0x3b573022,0x3b47d734,0x3b323df4,0x3aa34e3f,0x3a8ce0e0,0x3a11c5a2,0x3b0927b3,0x3b45f59d,0x3b92b1c8,0x3ac83750,0xba8bdf2b,0xbb9f002f,0xbbb5ae2e,0xbbf2db59,0xbc20819b,0xbc289a38,0xbc30e507,0xbc3e1971,0xbc296914,0xbc27a03d,0xbc32f3a8, +0xbc395dcb,0xbc1e9818,0xbc0a78ba,0xbbed1a78,0xbbb98bd9,0xbb921002,0xbbaf1f0f,0xbbe40e86,0xbbe7b166,0xbbd30547,0xbb4cdacf,0xbb240814,0xba089e82,0x3a3f6dd0,0x3b4da114,0x3b4a6391,0x3b6ae137,0x3b7bd270,0x3b703e4b,0x3b5347ad,0x3b338e4d,0x3b6124ab,0x3b809b5a,0x3bad7c2b,0x3b09d59d, +0x3a0e3527,0xbaa5cda3,0xbb362940,0xbb8e358c,0xbbb29c6a,0xbbddcd73,0xbc05881b,0xbc17d927,0xbc213169,0xbc00b8b8,0xbc16c9b9,0xbc06f4c5,0xbc0862af,0xbc0107d1,0xbc0b8de4,0xbc0db0fb,0xbbf6fe63,0xbbe161aa,0xbb8b45c4,0xbb45f561,0xbb1f96c9,0xbb4208bc,0xbb000cfd,0xbab00b9f,0xba360395, +0xb98d6525,0x3a255f03,0x3acc9364,0x3b4f9a0b,0x3b4c6baf,0x3b63c095,0x3b6ed80f,0x3b7512fe,0x3b5fffd3,0x3b516d18,0x3b441b8f,0x3b1cfc31,0x3ab90b59,0x3a8174d3,0x39ac0035,0xb9caaa8d,0xbb062256,0xbb3b0e66,0xbb94e000,0xbbd2d11e,0xbb269ed9,0xbb56299c,0xbb3fb764,0xbb1810cc,0xbaca6015, +0xbafb4a90,0xba9fbf83,0xb9db3198,0xb98bd35e,0xba498136,0xba73d1cc,0xba09660f,0x3883346b,0x39355c1f,0xb9ffb858,0xb9d5207c,0x39fe0680,0x39f02df4,0x39d8d6dc,0x3a033a11,0x3999f3b0,0x399b4100,0x397ceeb9,0x396eeac7,0x39a8e46c,0x39b9acb8,0x37a7a74b,0xb9c67ba3,0xba05a346,0xba65b92e, +0xba9758b5,0xbab01501,0xbae05c4a,0xbaf72195,0xbb12ed4f,0xbb204ffa,0xbaa17a1b,0x3583dd03,0xb936ce72,0x39bb11f4,0x3931b5b3,0x39f760f0,0x3a27ba54,0x3a0fb821,0x3a279678,0x39e9d3f0,0x3a69ec54,0x3a8d5be8,0x3a9274cf,0x3aa24ee7,0x3aa9c9de,0x3a9e72d7,0x399f8c0f,0xb916c5b3,0x38a9b420, +0x38f674af,0x39064acb,0x3896d2e0,0x398a05e0,0x39514aa2,0x388b9aa6,0xba0df09f,0xba61533f,0xba97aa68,0xba6b9b76,0xba229d6c,0xb670c270,0xb9600ae0,0xb95e41b0,0x388fdfc0,0xba00dd99,0xba2ea110,0xba436be0,0xb9fd77f8,0x3a01fc25,0x3b40cef3,0x3b2ad664,0x3ad6f0e6,0x3a4faf6c,0x3aed69df, +0x3b09a869,0x3a474aab,0x3b009b54,0x3b1eafe5,0x3b0fe7d2,0x3b4e84d9,0x3b3847a5,0x3b1827e3,0x3a305dbf,0xba34f93b,0xba8fa19d,0xb9d071f0,0x39ceb6e5,0x39f607be,0x3aa80ec3,0x3a9032cf,0xb8e357ec,0xbadfed8a,0xbb4c4ced,0xbb91ea43,0xbb5faee2,0xbb1c5911,0xb92ad3dd,0xba31dfa7,0xba00712e, +0x399411a4,0xbb0c844a,0xbb233917,0xbaea2030,0xba84c371,0xb8e1765b,0x3b7cc3c8,0x3b048e01,0x3b0eb935,0x3ab5d8bf,0x3b711d30,0x3b6a79ac,0x3a0fb89f,0x3b602571,0x3b81b789,0x3b97e364,0x3bb11984,0x3bae8e13,0x3b853833,0x3a7f5255,0xba6f4187,0xbb0f2490,0xba041063,0x39aa45d8,0x3a8f9ab5, +0x3b16eb92,0x3af3d950,0x394ffbc4,0xbb411033,0xbba54f29,0xbbe4106f,0xbbc17109,0xbb6fefca,0x39312b4a,0xba73e80f,0xba537e2f,0x3a0a27ff,0xbb556586,0xbb8940a4,0xbb74ef77,0xbaffdb12,0x3b07394d,0x3c1acd0f,0x3bd9d30d,0x3b97a80e,0x3ad81200,0x3b9f3ea2,0x3bc804e1,0x3b143843,0x3bbb73e3, +0x3bdfa7ea,0x3bc529d2,0x3c2624ef,0x3c15393e,0x3bc4b54c,0x3aef9bb7,0xba9a1a6f,0xbb409483,0xba7e0734,0x3a58bc63,0x3aaf3211,0x3b7833f0,0x3b4e5327,0x39295f56,0xbbb3649c,0xbc1faebc,0xbc473b20,0xbc168051,0xbbc6e3d7,0x3913958c,0xbab0cef3,0xbab17154,0x3acf985c,0xbbd43434,0xbbebdb8f, +0xbb89db33,0xbb30509e,0x37cd4ce2,0x3bdad14a,0x3b08d99a,0x3b377916,0x3b61c8cb,0x3bf7f2d0,0x3bba0268,0x3b18d91a,0x3bb8e4f3,0x3bdc7dfa,0x3c084ce6,0x3c532b71,0x3c342afc,0x3bc8e269,0x3b54a327,0x3a5ce08b,0xbadfc8c3,0xba1a224d,0x3a8b48ec,0x3af3b4d9,0x3b831d36,0x3b7f68a7,0x39a81f21, +0xbbae83f0,0xbc28c4bc,0xbc455218,0xbc320d25,0xbbb5848c,0x3adeaaa1,0xbab721bc,0xba674f70,0x3a930b10,0xbbd9c68a,0xbc14d4e7,0xbbd13f43,0xbb66ec54,0x3b55848b,0x3c8f44f5,0x3cb32ae8,0x3c80dbd1,0xbb9e7554,0xbbd99193,0xbb865838,0x3b6eefd6,0x3bc3dc18,0x3c4ddd51,0x3c9317cd,0x3b5dbe43, +0xb8f1f6a9,0x3bf11022,0x3addaf14,0x3b2026ac,0x3bcec71e,0x3c0030e0,0x3c05c0ce,0x3bbcd03c,0x3bc1cae9,0x3bb19ce8,0x3be01c96,0x3c0ddb96,0x3bd67466,0x3be7b5f6,0xbc2ce0f6,0xbc8f2eb3,0xbca17fe6,0xbba70402,0x3b20f953,0xbbcc938c,0x3c5080ef,0x3c47671e,0xbb755b1d,0xba9cc396,0xbb16d63b, +0xbc55991f,0xbd0b44af,0xbca38413,0x3ca37ceb,0x3bdf7845,0x3b90ac90,0x3bf10e6d,0x3b93c42f,0x3b828d0c,0x3c055f5f,0x3c38c315,0x3c236a96,0x3b3b0550,0x3b9419cf,0x3b629dd2,0x3b448fb4,0x3abfaf33,0x3b032bc9,0x3b4d864b,0x3a96529c,0x3b5cd825,0x3c04592a,0x3c2502aa,0x3be1f38a,0x3aed02dd, +0xba69ab9a,0x3a4910cc,0x3c0c227d,0xbb081f5f,0xbb98de94,0xbbec8d0c,0x3b01083c,0x3b52c143,0xbb8e0087,0x3b71d217,0x3c435980,0x3ba3c3e4,0x3a6b34a9,0xbb2e96da,0x3c4a1f6a,0x3be2f70a,0x3bd3e454,0x3b2c347e,0x3b787190,0x3b8abf0e,0x3b5544aa,0x3bbaf08f,0x3bb08888,0x3b9828e7,0x3b453835, +0xb9b562ef,0x3aaf8791,0x3a432d27,0xba4cbcb9,0x3977e6ec,0xbafa8846,0xb9c737d5,0x3b2cbec7,0x3b82c7b1,0x3b9cc707,0x3bbca34a,0x3b4815e0,0x3a301112,0x3bd07846,0xbbbe4327,0xbc285108,0xbc1de5d9,0x39b95967,0x3bd6c0a5,0x3c40218f,0x3c56cf32,0x3c6fe27c,0x3c6e4c63,0x3c697a5e,0x3c42896d, +0x3b3f61fc,0x3bd07123,0x3b9025ec,0x39819891,0x3b8967ce,0x3b920601,0x3b309df3,0x3b4bad85,0x3b527a94,0x3b84be12,0x3a24c447,0xbaac4ecd,0x39b987d6,0xba95afc9,0xba9028d9,0xb86156ab,0xb9f5eb79,0x39ce2714,0x3aa876b6,0x3a9f1b7f,0x3ae8716b,0x3b02007d,0x398cc8d4,0xb875b434,0x3ba73997, +0xbb94da1c,0xbb8f36f2,0x3b70f406,0x3b8a8c95,0x3bc0efc3,0x3bcaa274,0x3c215a50,0xbb6712f1,0xbc0de734,0xbc3b163f,0xbc06c375,0xbbbc15f7,0xbb8141fa,0xbb8d20f4,0xbb8116b0,0xb918b141,0x3af9d78d,0x3ab4f361,0x3b71b48c,0x3b1c1736,0xbb0ed00c,0xba6f3550,0xba79e42f,0x396eed25,0xb8c1675b, +0x3a7b1ba8,0x3b79b904,0x3b85964d,0x3ba199bd,0x3b8eea36,0x3b589005,0x3adc61dc,0xbb25788a,0xbb9f5972,0xbb3e9e42,0x3c0d41a0,0x3b4cf916,0x3c08cabf,0x3c8786f2,0x3c779eaf,0x3c57fe0c,0x3bf46708,0x3b5f9467,0xb91fc2bb,0xbaa92712,0xbb8a353a,0xbc12ac26,0xbbecbe70,0xbc159bce,0xbbfcb0d1, +0xbbc28350,0xbb9e6734,0xbb6cd6cc,0xbb8cbf5a,0xbb5d1663,0xbb5b8b11,0xbb8f5fa0,0xb9c4fe51,0x39576f08,0x3a08a7fb,0xb912ca7c,0xb8017260,0x3a3d4c96,0x39e6c073,0xb9f5dfe8,0xba880172,0xb7f2c2c4,0x39ba2673,0x3ae16f06,0x3af58c94,0x39ab187c,0xbb177a4a,0xbbcee8d7,0xbc0efa94,0xbc80358f, +0xbbf8a282,0xbb4fad56,0xbac0242a,0xba964fd4,0xbb9cb84d,0xbbca2639,0xbbd8999e,0xbc04ebd3,0xbc69c55c,0xbc7e16e2,0xbc888502,0xbc8168bd,0xbc57ae01,0xbc2b3405,0xbc103598,0xbc14518b,0xbc07ec12,0xbbd1c9a6,0xbb150159,0x39b2871e,0x3b2ef409,0x3b052bac,0x3b03e4d9,0x3af5d273,0x3a820b79, +0x39ca5942,0xbabf9f64,0x39dd76fb,0x3a90d4ec,0x3aff3ae7,0xba030e0f,0xbaf28ab4,0xbb129334,0xbb1d430d,0xba9e0230,0xba5e0190,0xbac52379,0xbb1f3263,0xbb164ab2,0xbb8a7afe,0xbbbb327b,0xbbd3665e,0xbbb6b9a1,0xbbdf72b0,0xbc0203b2,0xbc0d73fc,0xbc206747,0xbc2541ae,0xbc273cf2,0xbc2e4b16, +0xbc3476ef,0xbc1f8962,0xbbeafe35,0xbbd60bd3,0xbb119844,0x3a46b87c,0x3b915c0d,0x3b57324d,0x3b265f41,0x3b1a9591,0x3a786ea8,0x39ef33f0,0xb95ed849,0x3a35d1e4,0x3acb695c,0x3b4cffaa,0x3a25e34f,0xba9fc46a,0xbb83d402,0xbba7194d,0xbbe44e21,0xbc0bda54,0xbc0ced63,0xbc05e0f9,0xbbf93882, +0xbbe82024,0xbbfdf08b,0xbc06e216,0xbc1ae81e,0xbc008443,0xbbd8b6b4,0xbbda1e82,0xbbce9025,0xbbcc32ed,0xbbe8cc30,0xbc0cd16d,0xbc16efac,0xbc0b3c65,0xbbc0887d,0xbbb6a188,0xbb0f2684,0xb9b20eac,0x3b4632d9,0x3b2b4eaf,0x3b6f61ed,0x3b52b7b2,0x3b2e2ec5,0x3b0db9d9,0x3abe0b5b,0x3afbf912, +0x3aecce4c,0x3b0af494,0x38a90d20,0xba5d018c,0xbad44bb3,0xbb471b33,0xbb9509e7,0xbbc8cefe,0xbbd05981,0xbbe61fa8,0xbbfa7450,0xbbfb3ec4,0xbbf041e7,0xbc070d03,0xbc10e511,0xbc0f71d4,0xbc143268,0xbc1f8a4c,0xbc196192,0xbc0f3d26,0xbbf814a5,0xbbb0b5e7,0xbb824f34,0xbb5e7bbc,0xbb69bcd6, +0xbb35d079,0xbb15d37e,0xbaf87f04,0xba951a32,0xba032f73,0x3ad24624,0x3adeaf2e,0x3ac89268,0x3af049c7,0x3af86b2a,0x3ae54809,0x3acff207,0x3ade0fd3,0x3aafc501,0x3a777279,0x38953648,0xb8ee1854,0xb89a1995,0xb927e340,0xbaf2d5ef,0xbb2ce22f,0xbb88b940,0xbbc59dab,0xbb34f0d0,0xbb569132, +0xbb5237fc,0xbb34e546,0xbb090f03,0xbb097cb6,0xbaf2909d,0xbad423b7,0xbad15033,0xbb01c6ee,0xbb0bc1eb,0xbaed8709,0xbaabd513,0xba91d6b1,0xbab3e8eb,0xbaa19390,0xb8ef9951,0xb98b25e2,0xba07a1c7,0xb9f7a46e,0xba0a98b7,0xba2f7ed4,0xba4b490c,0xba58152d,0xba5f4853,0xba794ce2,0xba9d3c5a, +0xbaac0070,0xbaae3b3d,0xbacccf08,0xbaf00ff6,0xbb050f64,0xbb16dc08,0xbb188837,0xbb2ba922,0xbb318f33,0xbb17d60d,0xba4a9a8e,0xba309ef4,0xb916b0b9,0xb9c9ce98,0xb8df970b,0xb8b88b55,0x37b753ef,0x38eab7ed,0xb9617524,0x39a0be67,0x3a06800e,0x3a0e8a15,0x3a1d06ae,0x3a28d748,0x3a29a7f0, +0xb99d7510,0xba36565c,0xba088810,0xb9fa8844,0xb9dc0e67,0xb9bd7bae,0xb9642f03,0xb9a64a86,0xba113061,0xba912c77,0xbab13510,0xbac922f1,0xba9a7f5c,0xba6d2915,0xb9ff3b3e,0xba33205d,0xba308abd,0xb9b7bccb,0xba7e34ef,0xba99119a,0xba9bb2c5,0xba82e5f9,0xb92f4345,0x3b198908,0x3b0eba74, +0x3a8daa64,0xb8e1855f,0x3aa45e9c,0x3acfa8a5,0x386942b2,0x3ad5a9e5,0x3af7bde2,0x3ac3c446,0x3b0fc083,0x3aeb77a1,0x3adffbcc,0xb942cf4a,0xbac1c503,0xbae63573,0xba9f9ec5,0xb9ddec59,0xb7c687ad,0x3a5cfa22,0x3a0f8c43,0xba921886,0xbb2123e2,0xbb6d48a4,0xbb9b594e,0xbb4e6908,0xbb1775e7, +0xba819d5d,0xbaa69ffd,0xba8ce5ba,0xb955bcc0,0xbb3789c5,0xbb4a6857,0xbb01efac,0xbac7e697,0xba75dce9,0x3b49fca0,0x3ad6c832,0x3ac32ea4,0x38883365,0x3b523bcc,0x3b5a6052,0xb992ce0d,0x3b4851d0,0x3b698169,0x3b89f5b6,0x3b88a854,0x3b87f212,0x3b6ef307,0xb71b239f,0xbaee1f2a,0xbb342499, +0xbabe7757,0xb9d3169d,0x3a243dab,0x3af984e6,0x3a99858c,0xbaa66728,0xbb82dcae,0xbbb8c2aa,0xbbe4b425,0xbba3ebcb,0xbb3ba248,0xba1b2ede,0xbab91ac1,0xbac77600,0x39545820,0xbb8033db,0xbb9c75fc,0xbb7f76b4,0xbb31bf54,0x3a938040,0x3c0d9f28,0x3bd6a1b4,0x3b8bbac0,0x3a13d2de,0x3b9ae77f, +0x3bc76390,0x3ae67556,0x3bc36708,0x3be03d94,0x3bb3af03,0x3c12ff7e,0x3c009bb9,0x3bbdeca2,0x3a346565,0xbb1d0f4d,0xbb6bd756,0xbb1a496e,0xb95c58de,0x3a95805a,0x3b6ed6e6,0x3b357b04,0xbadf17e0,0xbbdd7c42,0xbc2b1d4e,0xbc4028b7,0xbbf4d7bb,0xbb9851e9,0xba9dc674,0xbad91859,0xbb084d60, +0x3a9d43c4,0xbbea6f50,0xbbfe5a55,0xbb656bef,0xbb4dc672,0xbab8aaf8,0x3bb2aa17,0x3b0aa889,0x3b044f22,0x3ae77089,0x3c02ea7a,0x3bd14514,0x3afdbd46,0x3bb8895f,0x3bd975e7,0x3c0b2215,0x3c5170c2,0x3c354c81,0x3bd1f48c,0x3b1c6b89,0xba4b9323,0xbb49cc10,0xbaf30786,0x393d451c,0x3ae5ad3f, +0x3b7b3271,0x3b4f49f8,0xbb04e9d3,0xbbe1761e,0xbc312243,0xbc3bcaa1,0xbc07c0c2,0xbb551e89,0x3a92e00d,0xbafac2af,0xbaf0f723,0x3a949e01,0xbbece020,0xbc174440,0xbbc898cc,0xbb9123c9,0x3b87fc79,0x3c8c2d2d,0x3cc45c77,0x3c9bbe1f,0xbb038725,0xbc12d337,0xbc025490,0x3b2e8d18,0x3b4405ba, +0x3c26a92d,0x3ca1006f,0x3b71ee1e,0xba961b31,0x3bae352d,0x3a906c55,0x3b271f54,0x3bbd5ca8,0x3bef02ad,0x3bfb8e3e,0x3baf2044,0x3bb978ee,0x3ba299c8,0x3baf4073,0x3bf9d64f,0x3b98b824,0x3a532f06,0xbc46fc7e,0xbc8cdd7e,0xbca0ef37,0xbb813bde,0x3b13dda5,0xbc12fe28,0x3c0e1579,0x3bf7b8d8, +0xbc0c0960,0xbb2fee89,0xbc0b9501,0xbc5410d6,0xbd14202b,0xbcbc2798,0x3c9e3945,0x3bfeae6f,0x3bb2665a,0x3baf1533,0x3b8acfef,0x3b8657a8,0x3be34649,0x3c305fb0,0x3c23f5b2,0x3b4aab2a,0x3b5d2367,0x3b11517a,0x3b470936,0x3b04af18,0x3b1e0572,0x3b1cd9a6,0x39c51b7e,0x3b0629ad,0x3bb247f8, +0x3c02cbd9,0x3bb4dc7c,0x39b8f59e,0xba5b5a25,0x3a370853,0x3c226804,0xbba99e2d,0xbbf6e4aa,0xbbcede08,0x3b25c737,0x3b6da362,0xba4604a8,0x366d32d1,0x3c3552e3,0x3c1d2eb6,0x3b9b1e24,0xb9369015,0x3c350c7e,0x3be45ba8,0x3be08e06,0x3b83865f,0x3b8ce7dc,0x3b972b42,0x3b2081cb,0x3bb1c1a4, +0x3ba355cb,0x3b8cc761,0x3b462f4c,0xb8ca9a7a,0x3b01b909,0x3a9a65a8,0xba023caa,0xba5c78b4,0xbb049783,0xba616e1d,0x3a085dce,0x3ba20ba9,0x3bcb35de,0x3bd1b0a0,0x3b3bc31c,0x3a03bb9b,0x3b978c99,0xbc06d736,0xbc3e9295,0xbc2bb9c7,0x3b9adc48,0x3c3898ed,0x3c48b94c,0x3c506fa7,0x3c53901a, +0x3c6e8a20,0x3c75b2c9,0x3c4e7429,0x3b817bf3,0x3bac43a7,0x3b79f95e,0x3b5ee969,0x3b9825cc,0x3b8b0b0c,0x3b31cf37,0x3b1d6080,0x3b1dec08,0x3b4cf77c,0x3a6bc394,0xba554f15,0xb96da153,0xba806ff4,0xbaa9b997,0xba3b7964,0xba579aaa,0x393f0bff,0xb8acca34,0x3b764343,0x3b9a4896,0x3b86bf92, +0x3af95fd6,0x3a9b8790,0x3ad6d1fd,0xbb685502,0xbb26e327,0xb956ee72,0x3c17b074,0x3c2b0ac7,0x3ba2ab3c,0x3c0edc06,0xbbbe0312,0xbc2dcbaa,0xbc67439b,0xbc18dd4f,0xbb81c4ad,0xbb1c0c19,0xbb3f4da3,0xbb57ca2f,0xba4d194e,0x3a8fef18,0x3a91af32,0x3b251ec7,0x3aaf84cd,0xbb21f4f7,0xbad2820f, +0xbaeb2c9f,0xba678a91,0x38fb5f3e,0x3a918fe6,0x3b31d611,0x3b187f5e,0x3b6c1c55,0x3b8b1c1f,0x3b7a057f,0x3b03c0f7,0xbb0a150f,0xbb3c0c96,0x383fbde2,0x3c1f4e26,0x3becc037,0x3c3bb764,0x3c730f40,0x3c5d61cc,0x3c36bf05,0x3c0147ad,0x3aa9b09f,0x3aa073fa,0x3b1b31ed,0xba5a5a44,0xbb9f2bcf, +0xbb978ad4,0xbbb429c2,0xbb86fa0b,0xbb4527ec,0xbb57e62a,0xbb498d11,0xbb9b9ecf,0xbb96ca52,0xbb9698aa,0xbb8272e1,0xbaac67fb,0xb9fe8f40,0x3aaa37fb,0xb8563099,0xb85481c1,0x3a447d6f,0x3af3f142,0x3abfda9c,0x39982048,0x3a463d97,0x3a916d84,0x3afaf509,0x3b25caa4,0x3a1f2b43,0xbb51d5d9, +0xbb887454,0xbbb2632c,0xbc4702df,0xbbb9aee9,0xbb596ffb,0xbb424a59,0xbafacab2,0xbb4f816e,0xbbabc5d6,0xbbd267ff,0xbc00e020,0xbc77e4f3,0xbc814223,0xbc87d4ce,0xbc7b9208,0xbc554cf0,0xbc2c370c,0xbc0dd5ae,0xbc07c751,0xbbfa3ad4,0xbbe2be2b,0xbb6f97dc,0xba969697,0x3b0ee64b,0x3ae1363b, +0x3afd302d,0x3abd951a,0x3aa04356,0x39fa1c8a,0xbaaf57e1,0xb98321bb,0x38d5d4f4,0x3b331a91,0x3a8c3b7e,0xb91308fa,0xb9d189f4,0xbac18b27,0xba00bd14,0x3ad239c0,0x3975da73,0xb9cbc6c2,0x3a5f7206,0xbb04776a,0xbb4de15f,0xbb788a2b,0xbb6fa55f,0xbbb85a0e,0xbbe7d681,0xbc0c71f5,0xbc2a9ec0, +0xbc3691ed,0xbc37e79a,0xbc391068,0xbc43c262,0xbc2be7ae,0xbc10557f,0xbc0d8cb9,0xbb8711d5,0xba523ccc,0x3b797cb0,0x3b3a5302,0x3b138518,0x3b1a57a1,0x3aa2aece,0x3a21bb5e,0xb8349eea,0xb81cc5b0,0x39a0571e,0x3ad83a2a,0x378ba057,0xba7f40f8,0xbb29f1df,0xbb8cd03b,0xbbc32472,0xbbd35998, +0xbbc89f1f,0xbbaa0491,0xbb8f90bf,0xbb83dc67,0xbbb0cd8a,0xbbb1a586,0xbbe70055,0xbbbadde2,0xbb9dc682,0xbbbe2fef,0xbbd7a8ac,0xbbfd7600,0xbc07929d,0xbc18ac6e,0xbc25373b,0xbc19ed6a,0xbc01d23f,0xbbfe4f1d,0xbb81b7b6,0xbaf6d527,0x3adc6208,0x3a880e2c,0x3b1e35b3,0x3ae4de03,0x3a8a9f12, +0x3a2a22de,0x387be11a,0x38806e71,0xba141cca,0xba9ec5b3,0xbaed9dc6,0xbb0aafc1,0xbb02b0ee,0xbb4033df,0xbb84496b,0xbbc00eae,0xbbb3dbc4,0xbbbbedc5,0xbbc1e4ca,0xbbb86f8b,0xbbbb6094,0xbbc624d9,0xbbfa59b7,0xbbf6df8b,0xbc07171c,0xbc123bef,0xbc04fc94,0xbc02ce79,0xbbd710cf,0xbbb1f854, +0xbb8a7ac3,0xbb789b1d,0xbb6c1557,0xbb5383e4,0xbb50b821,0xbb53fdb4,0xbb3253a9,0xbb200cef,0xb9bdef53,0xba94faf6,0xba8e9399,0xba603b62,0xba4936d0,0xba566c8f,0xba124d7f,0x377c757f,0xba189ce5,0xba5d7d8f,0xbad8999b,0xbafc2f2c,0xbad8a66d,0xbab6ccb2,0xbb21c5d9,0xbb33da97,0xbb73a7dc, +0xbba2715a,0xbb50a38c,0xbb5e1ddb,0xbb5c19bc,0xbb43ebf7,0xbb1e6906,0xbb1e6f13,0xbb203639,0xbb2f79fd,0xbb38e31c,0xbb408e75,0xbb4523fc,0xbb3a1529,0xbb255ef4,0xbb13b93c,0xbb197593,0xbb13be48,0xba75924a,0xbaa2d8f4,0xbad3166b,0xbad8339e,0xbad35cd0,0xbae8b5d3,0xbaf35473,0xbaff8a60, +0xbb091b7a,0xbb124286,0xbb2072eb,0xbb19e872,0xbb1703c7,0xbb1b1f26,0xbb281ea5,0xbb3866e8,0xbb44da60,0xbb408576,0xbb4ec2c3,0xbb50b8d4,0xbb7b9434,0xbaac4510,0xba88f9c7,0xba17006a,0xba49239a,0xba0e35bd,0xba3cb1e4,0xb9cf3508,0xb98a4041,0xba340049,0xb90a04e4,0x38b15a07,0x38fd011c, +0x38af6d31,0x38f32d2d,0x3975c9cd,0xba3712cd,0xba8c094e,0xba73a752,0xba65b063,0xba4f56a5,0xba301520,0xba216ad6,0xba425a3f,0xba86871a,0xbac264de,0xbad649ec,0xbade304a,0xbaa5f639,0xba84949c,0xba4e6bba,0xba8155fa,0xba822268,0xba30fa71,0xbaa99f7c,0xbac3c5b6,0xbabf480d,0xbaaed78f, +0xba42a2a1,0x3ad257be,0x3ad03bea,0x3a0d9cc4,0xba778fbd,0x3a401e3c,0x3a8db30a,0xb9fccf64,0x3ab49aea,0x3ac1580b,0x3a845383,0x3aa77dd2,0x3a5aaaf4,0x3aa0ff40,0xba646cb4,0xbb0480e6,0xbb0d0d2c,0xbae6b693,0xba8987b6,0xb9e5ac63,0x39769bc9,0xb9207496,0xbafde35f,0xbb3ed9f7,0xbb71cb9e, +0xbb92edf5,0xbb1ef32e,0xbaea1f1e,0xbab41cb0,0xbad20b03,0xbac095dc,0xba11234a,0xbb472033,0xbb58735d,0xbb088830,0xbafa83bf,0xbae0da75,0x3b04dba6,0x3a9493a4,0x3a42ea83,0xbab826e3,0x3b25dae4,0x3b430c67,0xba6316c5,0x3b31e7a1,0x3b5259aa,0x3b7d2c53,0x3b3c287c,0x3b3c44f4,0x3b5abdd5, +0xba50512d,0xbb1f3937,0xbb48cf67,0xbb065fc1,0xba746278,0x39696ab6,0x3a956879,0x3948ad29,0xbb22ff6e,0xbb9809fa,0xbbb91dd8,0xbbcfb558,0xbb661b8f,0xbad1b4e9,0xba46bddc,0xbad18bcf,0xbb027152,0xb925f52e,0xbb87e055,0xbba11bb5,0xbb7b7123,0xbb559dfb,0x37baacb9,0x3bebff6e,0x3bba6b3b, +0x3b6de4a2,0xba5d3504,0x3b8c1703,0x3bba7523,0x3a96b91a,0x3bcb3d69,0x3bdf9320,0x3ba5b71b,0x3bf0b22e,0x3bc94bff,0x3bb69b41,0xb9f6eeff,0xbb5732b1,0xbb76b47d,0xbb53c49d,0xba8e2e90,0x3a561acd,0x3b3442c1,0x3aced3af,0xbb5883e8,0xbbf54ff3,0xbc25755e,0xbc277eb5,0xbb9c4cf1,0xbb1912ef, +0xbac297fc,0xbad46b21,0xbb22d65f,0x3a4e83b6,0xbbe2a322,0xbbf5d262,0xbb43e40a,0xbb6f492e,0xbb475f72,0x3b7d801e,0x3ad908f8,0x3a620d56,0xba3d337a,0x3bfabfc4,0x3be17d5d,0x3ac287a0,0x3bbaaebb,0x3bda0367,0x3c075ff3,0x3c4161d7,0x3c29c950,0x3bd29bfe,0x3aac0b5b,0xbb0a70f7,0xbb6da5d5, +0xbb274ef2,0xba20403f,0x3ac96ebd,0x3b3e4041,0x3adb6fe9,0xbb85c0d8,0xbc00f39d,0xbc2aceaf,0xbc24dbda,0xbba0c376,0xb9752dc5,0x3ac53e42,0xbb02a8ca,0xbb238db6,0x3a41071b,0xbbeaedfb,0xbc0f769f,0xbbb65161,0xbbac6e92,0x3b945def,0x3c808117,0x3ccb68b0,0x3cabe701,0x3aad69e1,0xbc33f275, +0xbc3de1fa,0x3a5d3f67,0x3a226d0a,0x3c01406a,0x3c9d9a68,0x3b72eed9,0xbad7a9cc,0x3b562223,0x3a6c8b94,0x3b36dd3f,0x3b8f4992,0x3bc0112b,0x3bd7ed6c,0x3bad79b4,0x3ba5cb78,0x3b88800c,0x3b846e1e,0x3bd06c68,0x3b3c1a88,0xbb7b6d4e,0xbc4f4925,0xbc845e0a,0xbc937770,0xbb190b3c,0x3b307af3, +0xbc159984,0x3bb41808,0x3b4bfdbd,0xbc457536,0xbb8f6e75,0xbc621399,0xbc794298,0xbd0f357c,0xbcbf73ad,0x3c6b91dc,0x3c0ba147,0x3bedaf46,0x3b871f7c,0x3b7c8fb5,0x3b73fc48,0x3bbc92a6,0x3c1fa932,0x3c1c9ead,0x3b78104b,0x3b2bfe99,0x3aaf23eb,0x3b48dd82,0x3b3cf731,0x3b40842d,0x3ac26547, +0x36d41c84,0x3a8ace10,0x3b369d55,0x3bbfff04,0x3b87d4fd,0xba25aedb,0xba8cd164,0x397b8b8f,0x3c36ea9f,0xbbdb96fe,0xbc0e7766,0xbb8c98aa,0x3ac8cdfe,0x3b444884,0x3b83d118,0xbb425c06,0x3c23137c,0x3c369889,0x3bef73ab,0x3ade9c43,0x3bea5af5,0x3bc25777,0x3bde19f9,0x3bc572dd,0x3b9b8d7c, +0x3b9e094b,0x3ae39e19,0x3ba0368c,0x3b92b032,0x3b781087,0x3b54730a,0x3a134c17,0x3b123778,0x3aa66960,0xba3f874a,0xbaccf7fa,0xbace432c,0xba56cfa1,0xb9d118a4,0x3bb757df,0x3be68d38,0x3bd562e0,0x3b5545b7,0x3a8f277a,0x3af87201,0xbc08c3dd,0xbc2da1ac,0xbc318b37,0x3c1538a1,0x3c79ffd7, +0x3c1f2d46,0x3c3eaf73,0x3c216476,0x3c5806b2,0x3c6877dd,0x3c3fc3df,0x3b87a837,0x3b32b450,0x3b0ebfbd,0x3bceecc3,0x3ba188f6,0x3b831aa8,0x3b1bbb75,0x3abadf14,0x3ab4183e,0x3aff2749,0x3a8dba0a,0xb9934bef,0xba7b138c,0xba8633b2,0xbad8cca4,0xba9fe7ff,0xba687eec,0x3907f4ff,0xb9d899b4, +0x3b9fbf82,0x3bc54302,0x3bd1eafa,0x3b8198d8,0x3b4134ae,0xbb007136,0xbaddcaef,0x385fed87,0xbb823da2,0x3c575f61,0x3c5d0934,0x3ae317b0,0x3bda2582,0xbbeeb56f,0xbc2d1e9b,0xbc79d58e,0xbc2503e5,0xbb1425f6,0xbaa97468,0xbaf1e558,0xbb406d50,0xbae31712,0xb95a9b0f,0x39ed81f7,0x3a60783f, +0xb8c409d5,0xbb161718,0xbb1642a8,0xbb334411,0xbaf8ff63,0x3912396a,0x3a9a7759,0x3aab531f,0x3a930ffb,0x3b31e2bb,0x3b83f1cd,0x3b81464b,0x3b01af70,0xb984a220,0xba05eb86,0x3b3c6a67,0x3c25fdcf,0x3c2d610e,0x3c5764e1,0x3c240188,0x3c11d4ce,0x3bd80188,0x3bfdd3dc,0xba86d259,0x3b3f44d1, +0x3bc9221e,0x3b3dda4f,0xb98b8a14,0xba3de33d,0xbaf3b759,0xba6448e0,0xb9cfd219,0xbac4cacb,0xbaf35661,0xbb80f721,0xbba2b71e,0xbbae9e52,0xbb5b96a1,0xbb1870c6,0xba987a81,0x3aed83fa,0xb8cb6a3a,0xb920f8ca,0x3a4e3ed4,0x3b214d03,0x3b2fc0e5,0x3ac190fa,0x3ab7914d,0x3ac93a94,0x3ac194f6, +0x3b0e358f,0x397ae859,0xbb8e9ec4,0xbb4ea253,0xbb2b973c,0xbbaad53d,0xbb111b09,0xbb18f2dc,0xbb50d815,0xbad54d5d,0xbb1b3704,0xbb93e69b,0xbbeea613,0xbc11af31,0xbc77f23b,0xbc801a32,0xbc828ed7,0xbc63958a,0xbc4b70c2,0xbc2836f4,0xbc077df2,0xbbf436d7,0xbbdd16f2,0xbbd9fef7,0xbb955b91, +0xbb226cb5,0x3a329e29,0x3adc9edb,0x3b1d8f5d,0x3abbe91c,0x3ad7dbb4,0x3a71b649,0xb8e55f6a,0xb9ceac7f,0xb9932794,0x3b3ac775,0x3aeb2e07,0x3a74a7cd,0x3a5c2bc3,0xb978d09d,0x39297979,0x3af31c2a,0x3a214e6c,0x3987d07f,0x3a8b2a88,0xba8a9aed,0xbac0ba0d,0xbb04eaf4,0xbb3bd92b,0xbbaaf326, +0xbbdbf94a,0xbc0fd418,0xbc318f41,0xbc3cee9d,0xbc3e8430,0xbc3a8435,0xbc46d05d,0xbc2b7f8f,0xbc1c0dc4,0xbc17ba30,0xbbb10b1b,0xbb110e02,0x3b17dadc,0x3b075333,0x3b00062d,0x3b10646b,0x3aca7e06,0x3a643869,0x39bdf9c9,0xb92dec6a,0xb93fccae,0x3a5f31c9,0xb8f963b0,0xba0c85f0,0xbabbce8d, +0xbb4b9ba6,0xbb892f67,0xbb8bd9e4,0xbb536870,0xbb166d22,0xbb070722,0xbad91108,0xbb700f04,0xbb664a05,0xbb9abb56,0xbb7deef6,0xbb500cdb,0xbb9966ef,0xbbd04896,0xbc0c0da5,0xbc0f7ee1,0xbc18250f,0xbc257339,0xbc176fb1,0xbc0f957e,0xbc09e7c8,0xbba6c012,0xbb45b6de,0x38e9d586,0xba02f034, +0x3a21fe96,0x3a04b76b,0xb7eb278d,0xb99964be,0xba2c7834,0xba6e02b6,0xbae0f004,0xbb34b561,0xbb22df33,0xbb20fd1c,0xbafe5943,0xbb1aec04,0xbb429a7b,0xbb914e8c,0xbb85b468,0xbb884061,0xbb8026b3,0xbb7d2692,0xbb90efd3,0xbb9141f7,0xbbbfbd92,0xbbc5a654,0xbbe1cb0c,0xbbeaccb2,0xbbc607b4, +0xbbbe1b19,0xbb95dd58,0xbb928f41,0xbb733cf8,0xbb6ca7fd,0xbb594b2e,0xbb6366a0,0xbb7669b6,0xbb861fc2,0xbb86599f,0xbb751bf1,0xbb2069a5,0xbb40d88b,0xbb2cd874,0xbb24737e,0xbb15570b,0xbb0e5b3f,0xbacefc02,0xba33a754,0xbace3683,0xbaf1e597,0xbb324abb,0xbb5226ad,0xbb4ea5c8,0xbb47faae, +0xbb5ed701,0xbb53707a,0xbb771047,0xbb8c3f19,0xbb6fcc54,0xbb71ed1a,0xbb6df382,0xbb562737,0xbb37d178,0xbb3e7bae,0xbb50571b,0xbb73012d,0xbb8319a6,0xbb801ec6,0xbb805f1d,0xbb7f8856,0xbb778cd0,0xbb6710f8,0xbb5d5a49,0xbb51bffd,0xbb0d4da0,0xbb1e5483,0xbb2d7413,0xbb2c563d,0xbb2b3709, +0xbb32ab71,0xbb353698,0xbb3b8c8c,0xbb46bf67,0xbb4d0bf5,0xbb5b514e,0xbb4f4995,0xbb4b838c,0xbb49763b,0xbb4f3fa8,0xbb5f1cf0,0xbb68e73b,0xbb636e09,0xbb6c4cd1,0xbb6f9465,0xbbb2eb24,0xbaca551f,0xba9edb45,0xba605743,0xba7cb79c,0xba5c0401,0xbaa1c93f,0xba23e89b,0xba022059,0xba83d8fc, +0xb9ffe1c5,0xb99464fd,0xb9536a93,0xb9be53c5,0xb9bbd447,0xb8b67206,0xba73192b,0xbaa34204,0xbaa5398b,0xba950d3e,0xba7ff46d,0xba497c83,0xba5c2767,0xba7f091c,0xbaa1de65,0xbad4869e,0xbadd9a3b,0xbad60eb9,0xba96acf1,0xba7172e9,0xba61613f,0xba8ca8b5,0xba920bc7,0xba5c15d9,0xbab66b2e, +0xbacaa0bb,0xbac25097,0xbab93af3,0xba8a53c1,0x3a724100,0x3a876358,0x3933eb51,0xbad86859,0x398db4ab,0x3a25b5d3,0xba483c50,0x3aa21c22,0x3a9f2932,0x3a558b63,0x3a09cf86,0x38a2f6e5,0x3a70dff9,0xbab21fc9,0xbb161213,0xbb1d4811,0xbb0488dc,0xbabea215,0xba2809f0,0xb9b579e8,0xba4ecf64, +0xbb193de5,0xbb45d6b8,0xbb5eb68f,0xbb7c7153,0xbaba1b48,0xba738f0b,0xbaadc90e,0xbad0a75b,0xbacdbd2f,0xba3ec748,0xbb408250,0xbb54fc60,0xbb114c6c,0xbb08d453,0xbb0e16a4,0x3a5798bb,0x3a36f7d5,0x395774de,0xbb303568,0x3aec5a23,0x3b271b37,0xba7aca57,0x3b1f388e,0x3b438f8c,0x3b702eec, +0x3aeed4b4,0x3ae10ef5,0x3b4f4319,0xbaa9fac2,0xbb32ee61,0xbb59c90b,0xbb19bdd1,0xbaa49703,0x38437aea,0x399c2376,0xba492638,0xbb4a856d,0xbba026b5,0xbbac46e1,0xbbadae84,0xbae86ab5,0xb8ff4c51,0xba0302d4,0xbabe34f2,0xbb0e499b,0xba09198b,0xbb842fa6,0xbb95c7b0,0xbb6b92d5,0xbb5d1b1e, +0xba488698,0x3bb0793d,0x3b9c68f4,0x3b44141c,0xbb1b0c2c,0x3b62165a,0x3ba28587,0x3a46ce39,0x3bd2a38e,0x3be0c34a,0x3ba3b23f,0x3bb9af2d,0x3b8d338c,0x3bb41ffb,0xbabc1fc7,0xbb755349,0xbb7923a3,0xbb69d00d,0xbad4153e,0x3a1c84f9,0x3ac74088,0x3862a79e,0xbb87597e,0xbbf9e90b,0xbc13bdf6, +0xbc064e91,0xbae571aa,0x39c70613,0xba8bbdf9,0xba9c88a8,0xbb225332,0x39b1e9ac,0xbbcd22ca,0xbbe16075,0xbb51b693,0xbb7e4420,0xbb84055b,0x3ae87a9a,0x3a9f0cea,0xb919e163,0xbb6655f5,0x3bda5644,0x3bea5d76,0x3ab3e532,0x3bc1b4c7,0x3bdfc9bb,0x3c022604,0x3c2609db,0x3c12e020,0x3bd2a003, +0x395a0862,0xbb45c63a,0xbb780ca6,0xbb32a73d,0xba8dde1e,0x3ace614d,0x3ad90eff,0xb75863a7,0xbbab408d,0xbc087530,0xbc1be6ae,0xbc0743a0,0xbabc1d58,0x3b3e3710,0x3b10a001,0xbad1451e,0xbb3bdc50,0xb893f158,0xbbdccf0d,0xbbf7e3e7,0xbb9f6f2d,0xbbaef75e,0x3b8e9fd1,0x3c5a75d0,0x3cc65906, +0x3cb224d4,0x3b9d9f93,0xbc421c85,0xbc687eeb,0xbad88b0e,0xba729b3d,0x3bc4ec72,0x3c89a9df,0x3b71c28c,0xbab78142,0x3a9df73d,0x3a98ddda,0x3b52e2f2,0x3b2dba0f,0x3b87c733,0x3ba98eca,0x3ba6735c,0x3b824780,0x3b4ecfe5,0x3b527206,0x3bae1573,0x3ad55ca4,0xbbcfd0b9,0xbc4ae363,0xbc7314c3, +0xbc798bf8,0xba2a5405,0x3b62ac12,0xbbce7f84,0x3b3f8537,0xba9457e5,0xbc5dc0d2,0xbbbaf70a,0xbc85c491,0xbc8f8d2f,0xbd047b74,0xbcba1a22,0x3bce5d3d,0x3c151d1f,0x3c1cc421,0x3b7f045c,0x3b5351b4,0x3b2ec3a0,0x3b952fea,0x3c069f4a,0x3c0bb29c,0x3b953310,0x3b0b3085,0x3a44d3e4,0x3b3993c3, +0x3b5a627f,0x3b42d18b,0x3a55163b,0x38c8ea25,0x39d9ca2e,0x3a23955c,0x3b5876c1,0x3b13807a,0xba3c7e3a,0xba960b7d,0x3906d2fa,0x3c45bda3,0xbbe95f8e,0xbc15dc4a,0xbb11c450,0x39ab20dd,0x3b4431e3,0x3c1cdeb0,0xbb83ad78,0x3c05b89c,0x3c3dcd0a,0x3bfef2ec,0x3b12b249,0x3b1c7b51,0x3b7f9299, +0x3bc26915,0x3bffb08e,0x3ba361a5,0x3b9c0759,0x3a7e6072,0x3b84f840,0x3b7aef98,0x3b4ab944,0x3b69dc95,0x3ab317a0,0x3b09bfd4,0x3a91ddd6,0xba6f6b08,0xbab0bde0,0xba7e8042,0xba24c3a4,0xba61f20b,0x3bb37fe9,0x3bec12cc,0x3be2a4f7,0x3b81b572,0x3af7f22f,0xb8d50108,0xbbe5e775,0xbbfb5e38, +0xbbfcad96,0x3c2fee6e,0x3c79c8aa,0x3bbc172d,0x3c0dea6e,0x3bca8208,0x3c35a8cd,0x3c4410ef,0x3c1a5272,0x3b608fb8,0xba303561,0xb95b43a8,0x3c0221e9,0x3ba796f7,0x3b816389,0x3ad5a6af,0x3a10b70e,0x39ae8f2d,0x3a4b24ce,0x3a965574,0x393f7f11,0xbabaa9c0,0xba95c543,0xbaf25b30,0xbad3eca9, +0xba95c6d2,0xb978e161,0xba357df2,0x3ba17d25,0x3bcfc0fa,0x3c09cb87,0x3bbb4f20,0x3b927458,0xbb7757fc,0x3a82cafb,0x3b5f54e6,0xbb8bbdfa,0x3c621915,0x3c50b328,0xbb2b41e9,0x3b5cfdd3,0xbbfafa2f,0xbc29175e,0xbc6a3ba3,0xbc1f7cea,0xbab07bd0,0xb8e53674,0xb9d67d5e,0xbb2bd64e,0xbb18e568, +0xbac17600,0xb94dae42,0xba4e0576,0xbac893eb,0xbae92c6a,0xbb4551ab,0xbb71aac1,0xbb361caa,0xb983bc6a,0x3a423347,0xba1081cd,0x39475a9e,0x3aeda8a8,0x3b584574,0x3b6b1293,0x3ae8b5a4,0x3af4781f,0x3aed6900,0x3bad38e3,0x3c268bdd,0x3c4cd24d,0x3c52ad94,0x3b8f3054,0x3b5cd46e,0x3affe902, +0x3bd46cc3,0xbb15020e,0x3bc0e9d4,0x3c0f240a,0x3bb8ad76,0x3b5d6588,0x3b313135,0x3a8b0067,0x3ac0a2ee,0x3ad52396,0xb829e64c,0xba075fcd,0xbb0d8906,0xbb90d439,0xbbb0e4a3,0xbb519980,0xbb38de56,0xbab7e22f,0x3ad9d729,0x37fd8d3e,0x37a967b9,0x3a67d816,0x3b29a8af,0x3b4e71e8,0x3b175fe1, +0x3aee318d,0x3ab3aa55,0x3a7c524e,0x3a91c03d,0xba49a8db,0xbba0c223,0xbb09cdfc,0x38033cb6,0x3b32b596,0x3b12255f,0x39f62146,0xba8f5253,0x3aa3f939,0xbb320aea,0xbb91aad2,0xbc06a6e5,0xbc2748e1,0xbc71d2b1,0xbc7581b0,0xbc7220e7,0xbc4353bb,0xbc3b92e7,0xbc202458,0xbbfa4d17,0xbbd86495, +0xbbbb37dc,0xbbbc4fad,0xbba55714,0xbb6d9add,0xbaa1cc3b,0x3acf400b,0x3b3991ec,0x3ad10f28,0x3afa5015,0x3ac21839,0x3abf0a5e,0xb9636ca7,0x379ffce6,0x3b1ac95a,0x3b04d8b8,0x3ae38c01,0x3ab081c9,0x3a4f9b6f,0x3a3d364f,0x3ab5774b,0x3995f655,0xb910725a,0xb9a06d66,0xbab54ee8,0xba3e74cd, +0xba7f5c06,0xbb3ad4cc,0xbbb2513b,0xbbed04b7,0xbc166d4b,0xbc345edc,0xbc36af2d,0xbc39cff6,0xbc32a93e,0xbc3faf8a,0xbc211e76,0xbc194dc7,0xbc0e104b,0xbbc1dd45,0xbb504d89,0x3a045008,0x3aa89857,0x3ae2a241,0x3b13e376,0x3b09fa0e,0x3abb2ef1,0x3aac5fd3,0x39bd5df2,0x39193959,0x3a06cf34, +0x39b304bb,0x39c94e40,0xb94ca709,0xbab85cd2,0xbafcf34d,0xbb048387,0xba3be199,0xb94da572,0xba0454a1,0xb99a27f9,0xbb17d093,0xbb1cfe9d,0xbb58a3de,0xbb3dbb45,0xbb2485ed,0xbb81f8ea,0xbbc662b0,0xbc0ec720,0xbc0eca5f,0xbc0f76b0,0xbc1da556,0xbc0a29a0,0xbc0c1fa6,0xbc01fcc1,0xbbb13aa9, +0xbb67428e,0xba9586a2,0xbaad12e1,0xba057e95,0x39bf649c,0x38919ba7,0xb8e76c81,0xb9907637,0xba1622e7,0xbab22d0b,0xbb21b279,0xbafef68a,0xbaefaef4,0xba8e6ca6,0xbaa3ec03,0xbac49c95,0xbb1e478a,0xbb15f8f9,0xbb157a6d,0xbaf29176,0xbb1667e9,0xbb6cef20,0xbb61cf6b,0xbb97f38b,0xbb9be86c, +0xbbb68492,0xbbaf6883,0xbb85de54,0xbb610db1,0xbb2c8ae4,0xbb4fbf65,0xbb37e907,0xbb492c4d,0xbb3aa16b,0xbb5f2881,0xbb746f57,0xbb84f7d0,0xbb90a7d1,0xbb755918,0xbb59481e,0xbb4df01a,0xbb3d70b3,0xbb3b3580,0xbb2bd477,0xbb24f483,0xbaf526e2,0xba7a2100,0xbaeecaa8,0xbb0848f6,0xbb426c97, +0xbb6554fe,0xbb6dc7e4,0xbb73ed9d,0xbb71a9c2,0xbb6362f7,0xbb780bc3,0xbb7a0e51,0xbb5f8058,0xbb5d82f7,0xbb67440f,0xbb5ccda1,0xbb51e85f,0xbb413f60,0xbb697faf,0xbb8fa85a,0xbb9ad77d,0xbb950297,0xbb949945,0xbb96a015,0xbb96ddbf,0xbb91569e,0xbb7c3815,0xbb5f1fe8,0xbb51a609,0xbb4b7149, +0xbb428194,0xbb31a81a,0xbb341a1e,0xbb387139,0xbb38f17f,0xbb3d1b63,0xbb4738e4,0xbb4c04e0,0xbb5947d4,0xbb4c8bd7,0xbb4735ff,0xbb4217f4,0xbb431810,0xbb4e18b0,0xbb55f3d3,0xbb51c270,0xbb55f7b1,0xbb5be04b,0xbbbb2328,0xbacb64a6,0xbaa20a81,0xba81c0a9,0xba86d65c,0xba7f0c17,0xbac22780, +0xba39d026,0xba1a8b9d,0xba8bc95d,0xba2b5b03,0xb9f8e6da,0xb9a52d06,0xba1d7b48,0xba222333,0xb9727dfd,0xba832e38,0xbaa90800,0xbababeba,0xbaa3bf27,0xba893efa,0xba49d520,0xba764ef8,0xba8c9ddf,0xbaa8e037,0xbad47de8,0xbad44007,0xbabe8ca1,0xba77300b,0xba43aa0b,0xba4e0bae,0xba8677b3, +0xba918258,0xba7228d2,0xbaaf5ded,0xbab84547,0xbaaa874b,0xbaadecc5,0xba96c581,0x39c86049,0x3a1ff94c,0x382acc95,0xbb04603b,0xb85a6673,0x3991f372,0xba3d5356,0x3a9a77f0,0x3a920b64,0x3a6f3e10,0x382fb6c2,0xb9d6203f,0x3a460e46,0xbacd5bb3,0xbb189e9d,0xbb26771a,0xbb08b0c9,0xbad3cf45, +0xba421fbf,0xba598e70,0xbaaab211,0xbb247691,0xbb4097cb,0xbb42ec7b,0xbb4ddadd,0xb9effdac,0xb7e1a38c,0xba78d20c,0xbab48ccd,0xbace381a,0xba801bff,0xbb31d2f0,0xbb47ff03,0xbb1068c2,0xbb08b243,0xbb147ebe,0xb983e4f0,0x39b0c6a5,0xb8b53ed2,0xbb5ceb94,0x3a9bd44c,0x3b0c0e65,0xba14e86b, +0x3b105dd4,0x3b39bf2b,0x3b70b4ad,0x3a95d86f,0x3a6a3aae,0x3b44a203,0xbac78102,0xbb36866e,0xbb6be9b3,0xbb213ced,0xbabd6ebf,0xb8c196a3,0xba0cd953,0xbad585ba,0xbb5fd64f,0xbba1d4c3,0xbb9b8744,0xbb8a3a93,0xb9471d42,0x3a9b4003,0x38301b30,0xba94db69,0xbb0fed67,0xba8c111b,0xbb7556cb, +0xbb7eecc3,0xbb3fd7ef,0xbb4c1f29,0xba856e8e,0x3b68a668,0x3b7d501f,0x3b2e0573,0xbb5a3449,0x3b29713b,0x3b858da0,0x3a51327d,0x3bd8765d,0x3be4e4c8,0x3bb20f39,0x3b8cf024,0x3b33a228,0x3bb38423,0xbb075d7e,0xbb79e72d,0xbb7fcee0,0xbb6a555c,0xbaeffa90,0x39d861dd,0x3917fa66,0xbac0fd9d, +0xbb9895b4,0xbbf47892,0xbbfd6d55,0xbbcefe62,0x3a6b2533,0x3b3aac3b,0xb7393781,0xba1a98be,0xbb1dd222,0xba1d8d9f,0xbbb6db9d,0xbbc98d75,0xbb5739f4,0xbb73a5df,0xbb8a2e85,0xb9af1ba9,0x3a3295f3,0xba387205,0xbbb77956,0x3bb30623,0x3beb1a89,0x3ade0548,0x3bca45ab,0x3be9adac,0x3c0043df, +0x3c07cc10,0x3bf16bfc,0x3bd2796a,0xba35e08f,0xbb639888,0xbb7f8602,0xbb3062b8,0xba9d3133,0x3aca0292,0x395fbfae,0xbae60360,0xbbc4c0e4,0xbc0b85fa,0xbc0b3a27,0xbbd59ff9,0x3ad3fddd,0x3bb3fed9,0x3b448cf8,0xba75c8f8,0xbb492508,0xbaaa6a1b,0xbbcb5d89,0xbbbf127c,0xbb64bd9e,0xbb98a8b6, +0x3b691dbc,0x3c2efa50,0x3cb4e572,0x3cad57dc,0x3c036d40,0xbc3bbc49,0xbc7c8384,0xbb87cc90,0xbada6ec2,0x3b97609c,0x3c53f525,0x3b7effb1,0xba04762c,0xba6ad80d,0x3ae3c226,0x3b7286ce,0x3a822605,0x3b21b546,0x3b61a917,0x3b836445,0x3b1ea793,0x3b0604ac,0x3b33ed01,0x3b884924,0x3a0c971d, +0xbbe8bcf4,0xbc4925c3,0xbc5edd02,0xbc2e347c,0x3a58ebb1,0x3b82b776,0xbb03d426,0x3a566269,0xbba2155f,0xbc629b62,0xbbd88052,0xbc875aee,0xbc952cef,0xbcf010aa,0xbcb12545,0xbb35fb99,0x3c185236,0x3c46b06d,0x3b8f7efe,0x3b24f8ba,0x3a976fbd,0x3b4c0c87,0x3bd42405,0x3beff2eb,0x3baabeda, +0x3b01936e,0x3a0e0906,0x3b1edb43,0x3b468744,0x3b1d089d,0x3a297cc9,0x395d2933,0xb974bed5,0xbaab0ec4,0x39e805da,0x37ea630e,0xba99a72f,0xba18f667,0x3a0456cc,0x3c369083,0xbbd326eb,0xbc06e6ee,0x396896c4,0x3881eef0,0x3b8edfaf,0x3c7d0aff,0xbb636ba5,0x3bbb799a,0x3c4f9f5e,0x3bdafe4f, +0x3ab1bdba,0xbb11527a,0x3ad2993d,0x3b992038,0x3c0cfbe3,0x3ba18e3a,0x3b8f0530,0x3932b5aa,0x3b43e437,0x3b44d2ad,0x3b22eb40,0x3b7c6611,0x3b09fcbd,0x3ae57d3b,0x3a63854a,0xba3666dc,0xba1993ea,0xba5c3b43,0xba28f22e,0xba69200f,0x3ba0adf2,0x3be34c1b,0x3bd3eb96,0x3b88a26e,0x3b2119a4, +0xba606268,0xbbae1af4,0xbb9052d8,0xbab8b902,0x3c05dd91,0x3c249752,0x3abb3968,0x3b7383c2,0x3b39c99e,0x3c1b43de,0x3c110b05,0x3bc86468,0x3b00ba60,0xbb874617,0xbb333157,0x3c054077,0x3bab4031,0x3b84d296,0x3a4ee218,0xb8c00ad5,0xba140ac0,0xb8d4ff79,0x3a8a960c,0x3a0225e2,0xbadd72c5, +0xbaa2d41e,0xbafd71c5,0xbb0628b8,0xbad563ae,0xba4ac871,0xba090d2a,0x3b966949,0x3bc943af,0x3c1122cd,0x3be499c5,0x3bb51dd4,0xbb845f85,0x3b70c36c,0x3bd00400,0xbaa4476b,0x3c267b8b,0x3beab370,0xbbe9c8bd,0xba2b6a1f,0xbbefe46f,0xbc2d9858,0xbc416c87,0xbc017b7b,0xbaa405f4,0x3ab2889d, +0x3ab9a1be,0xbaf11071,0xbb1449fe,0xbb1684c9,0xba2571c1,0xbb015ec9,0xbb2cf697,0xbaa87eac,0xbb738af6,0xbb93b257,0xbb5b5c75,0xba90ac34,0xb9ad2717,0xbb127ffc,0xba2fac05,0x3a353120,0x3b1b5643,0x3b28ec33,0x3ab8ed7f,0x3b63dd80,0x3b8ef6ce,0x3bed6eec,0x3c1b2be1,0x3c572f7e,0x3c398740, +0x3a10c106,0xba6948c4,0xbaa9a990,0x3b8e78df,0xbb25ca11,0x3c1a86a1,0x3c2a034f,0x3bec670a,0x3bab81f2,0x3b8e18e9,0x3b25f5b0,0x3b1e99d6,0x3b2d57cb,0x3a6c1fe2,0x3a36f7f0,0xb9581dd0,0xbb4e97c9,0xbb9e5ab0,0xbb632f78,0xbb3c987c,0xbab79571,0x3a400b3d,0x39a85899,0x39f7e371,0x3a851dfa, +0x3b2b470e,0x3b52175b,0x3b14e843,0x3aee6a7b,0x3a81e5fd,0x3a095569,0xba692ed5,0xbb140fd3,0xbb9c961e,0xb9faf382,0x3b3d4d46,0x3c1ac06c,0x3bcef1e0,0x3b8bd7c8,0x3b70eb91,0x3bc28e68,0xbb83cd23,0xbbaaa6c7,0xbc14e6b1,0xbc345252,0xbc63d0f8,0xbc60183f,0xbc55ed82,0xbc22dab4,0xbc27c9b6, +0xbc1463c5,0xbbdd6d41,0xbbbf5941,0xbb9c4d10,0xbb9b2860,0xbbaefeb4,0xbb93b6a1,0xbb35396e,0x3a8fa017,0x3b3391bd,0x3ae4f1bf,0x3b080eec,0x3b04424b,0x3b28ecbd,0x39b6013b,0x39e68c13,0x3ad7fe2b,0x3b0fbf56,0x3b2bac90,0x3b1047fc,0x3ae31b7c,0x3aa98cf2,0x3a98d558,0xb927eaf9,0xba65d7a7, +0xbaebd56c,0xbb2f1071,0xba844e3b,0xba465545,0xbb62ff9e,0xbbca8480,0xbc084658,0xbc1d7eec,0xbc34aaab,0xbc29e6d5,0xbc2d3794,0xbc242306,0xbc2f23b8,0xbc0f92d3,0xbc0c1a77,0xbbee1c4e,0xbbc00cae,0xbb785f17,0xbaaa1d8f,0x3a008459,0x3acaac58,0x3b330baa,0x3b3ab59f,0x3b14fe87,0x3b258b5b, +0x3aa04890,0x3a688fa4,0x3a4822d4,0x3aa2c2e0,0x3ace67d9,0x3ab8ac4a,0x3a0e4ef2,0x39a244ac,0x39715cd0,0x3a599836,0x3a2b2838,0x37fa44ac,0xb8cc43b8,0xbab653bf,0xbae2b672,0xbb281025,0xbb2ea9c2,0xbb3c0f95,0xbb82e619,0xbbc3f7a0,0xbc0ce4c0,0xbc0abaa5,0xbc0474bd,0xbc13815a,0xbbf059b9, +0xbbfae960,0xbbdd1381,0xbba8b670,0xbb707e53,0xbb0f82fb,0xbad5f9fc,0xba2afb88,0x3a845c46,0x3a5a3017,0x3a2cd66d,0x3a273248,0x39cad78c,0xb9602bf5,0xbaa08900,0xba4bbb58,0xba35a6a8,0xb6a2a807,0xb8807319,0xb883d762,0xb9f3d571,0xba1a2b61,0xba25d110,0xb9dab064,0xba96a270,0xbb2f85c5, +0xbb1721be,0xbb690aef,0xbb645584,0xbb87e11f,0xbb73e380,0xbb2ed5eb,0xbae8745d,0xbab78ddf,0xbb0c1b8f,0xbb02bb0f,0xbb26e215,0xbb20554c,0xbb4fe80b,0xbb5944a4,0xbb5e83f3,0xbb7494b4,0xbb416f53,0xbb4d7dad,0xbb26af41,0xbb246cee,0xbb22ea79,0xbb1c761e,0xbb1b120c,0xbaf6fd2e,0xba99a131, +0xbaeac2d5,0xbb052ac0,0xbb334739,0xbb54c6ac,0xbb65d648,0xbb77bb71,0xbb66a757,0xbb5a3e2a,0xbb5ac147,0xbb47ce38,0xbb1ba12d,0xbb15b6c9,0xbb306a02,0xbb387627,0xbb450252,0xbb1ad5df,0xbb52bcda,0xbb898895,0xbb924e03,0xbb8c8207,0xbb8bc485,0xbb8d76f1,0xbb8ea076,0xbb8b7c41,0xbb5c28dd, +0xbb3568ec,0xbb587b15,0xbb3b3143,0xbb1d1a31,0xbaf819c5,0xbb015d13,0xbb0430a5,0xbb037682,0xbb04ede5,0xbb0d0e60,0xbb121349,0xbb1c9cc7,0xbb1353e9,0xbb0f186e,0xbb08eae0,0xbb06c22b,0xbb0c2ccc,0xbb0f68d9,0xbb0e086c,0xbb0f3550,0xbb159a46,0xbb8cada9,0xbab95d10,0xba952694,0xba82365d, +0xba773274,0xba6f3ac9,0xbabd703f,0xba2a827f,0xba0af774,0xba69b882,0xba25bdfa,0xba021a89,0xb97ef231,0xba25b74b,0xba2faae2,0xb97d9941,0xba70303c,0xba9d1291,0xbabd5dad,0xbaa013c9,0xba86615d,0xba46c8ed,0xba7b013e,0xba8d7de3,0xbaa4ccdb,0xbac80d40,0xbac00202,0xba9f41a3,0xba3e1aa1, +0xba11aeb2,0xba234e21,0xba692ecb,0xba859b89,0xba7b1060,0xba9cae0f,0xba985fec,0xba854279,0xba948cde,0xba8d0ac0,0x388bc508,0x39cfe90a,0x38b67a0e,0xbafd1ca6,0xb91bb7c3,0x38e7a0d2,0xb9e8702a,0x3a93907e,0x3a94f352,0x3a9f38d4,0xb91f6114,0xba25eb13,0x3a36624f,0xbac7385a,0xbb0f7535, +0xbb28b74f,0xbb064da0,0xbad28f3b,0xba5140d2,0xba9a56c5,0xbad91e6d,0xbb29ad10,0xbb342d02,0xbb24e9c3,0xbb208746,0x398b713b,0x3a347e9c,0xb9e58c3c,0xba852fa5,0xbabd64cd,0xbaa67e8c,0xbb20a5b1,0xbb36f7e3,0xbb07a0d4,0xbafd601b,0xbb05ba9c,0xba5bc31e,0x3949a672,0xb8dcb821,0xbb57a9ea, +0x3a5e65f4,0x3af5660a,0x38eb0b0b,0x3b063645,0x3b2f853d,0x3b801594,0x3a51f91b,0x39e80438,0x3b3724b3,0xbac4aa07,0xbb2d9b09,0xbb7ca0b1,0xbb262019,0xbada2434,0xb9ba11dc,0xbaaa4de5,0xbb1694ff,0xbb6eb247,0xbb9d17e5,0xbb887169,0xbb4eea43,0x3a7e7be4,0x3b0894fc,0x3a3cf610,0xba32ddfe, +0xbb04d632,0xbae02a55,0xbb5d4aa0,0xbb4a89cf,0xbb06ae76,0xbb2a4802,0xba701b59,0x3b1369d0,0x3b512336,0x3b2ce236,0xbb62d87e,0x3b076fa7,0x3b5892a3,0x3a9800e4,0x3bd88d15,0x3be7f6d2,0x3bce2e9e,0x3b5a178a,0x3ad63747,0x3bb21113,0xbb19a5a0,0xbb6d569f,0xbb8631e7,0xbb66a7cb,0xbb0173de, +0x38cda575,0xba9a707e,0xbb3625c6,0xbba8ec52,0xbbe76f88,0xbbd2e16c,0xbb9848f8,0x3b37f7f6,0x3b972a0f,0x3a9f9021,0x39383417,0xbb0be3ce,0xbaecd950,0xbba38d8e,0xbbb49c9c,0xbb4ddac4,0xbb588912,0xbb761c7d,0xbac8080d,0x39e609d5,0xba408b3b,0xbbd2e806,0x3b8cff29,0x3be394cd,0x3b1ab946, +0x3bd07791,0x3bf4cbe9,0x3c0373d0,0x3bd87717,0x3bc1dce0,0x3bd17989,0xbaaaaf43,0xbb681c19,0xbb83e2e4,0xbb3618a7,0xbaad0072,0x3a816aff,0xbaade9a2,0xbb59e4ba,0xbbd95381,0xbc08a99b,0xbbf172bb,0xbb9c6387,0x3b7de65a,0x3be8e24d,0x3b7c6fc7,0xb8e58455,0xbb418077,0xbb32688a,0xbbba16d9, +0xbb833dbd,0xbaee527e,0xbb6c03b8,0x3b1cae1d,0x3c0119e4,0x3c9b0cd1,0x3ca0bf7c,0x3c317495,0xbc209a50,0xbc7768a7,0xbbc60777,0xbafc8969,0x3b701efb,0x3c0b2342,0x3b91f6ed,0x3a689b47,0xbb33a543,0x3b1c7439,0x3b842167,0xb9e9d470,0x3a7f607b,0x3acc5348,0x3b1cdf2f,0x3a877a00,0x3a99a0e0, +0x3b1a6eac,0x3b34852c,0xba1b6876,0xbbdf8ac9,0xbc4b13da,0xbc4dcd9b,0xbba956cf,0x3b10cd32,0x3b974da0,0x3b23aa5f,0xba4c1832,0xbc02a9bb,0xbc597d44,0xbbe5b921,0xbc76f0b3,0xbc897efb,0xbcd04d6d,0xbca30041,0xbc30954d,0x3c09c906,0x3c65bd66,0x3bba750f,0x3b0d91e9,0xb99cdf88,0x3abc2d79, +0x3b9a7ff6,0x3bca4baf,0x3bb5724c,0x3b10d5ab,0x3a238308,0x3b060fc8,0x3b077495,0x3ab0ae39,0x3a2506a6,0x38a9e9ba,0xba323e1d,0xbb147d57,0xbad5b04f,0xbae7d57d,0xbb01ba0c,0x397acc4a,0x3a81480f,0x3c0d72e6,0xbbb6e1a9,0xbbe09502,0x3b2bbcf1,0x3a70f2db,0x3be46acf,0x3ca8da57,0xbb030836, +0x3b5a50dd,0x3c7129ea,0x3b9a468f,0xba24c56a,0xbbc2b777,0xba02de5c,0x3b634733,0x3c057500,0x3b994782,0x3b7d6963,0xba22fd8e,0x3aeed050,0x3b07dc7e,0x3b0b281b,0x3b81614a,0x3b2d7f58,0x3ac5faad,0x3a35e000,0xb8b57c88,0x3914940e,0xba83856f,0xba2674cb,0xb9951624,0x3b86d857,0x3bc7d508, +0x3bafd925,0x3b78fcea,0x3b2962c4,0xba35ac5f,0xbb7d2cd4,0xbae788aa,0x3be3db6f,0x3b489d99,0x3aed6b93,0xbb36a78f,0xbac7031e,0x39a67ed7,0x3c0ad8fc,0x3ba99845,0x3b0f2f60,0x39ed583b,0xbbd8f84a,0xbb96e532,0x3be1c30a,0x3ba6df53,0x3b87a7ff,0x392a39b2,0xba0bea76,0xbaa8638f,0xba198500, +0x3a493abb,0x3a3a6eae,0xbae6715a,0xba91233f,0xbae0ff58,0xbb06c40c,0xbb0172f6,0xba9f7793,0x3887d1d5,0x3b7bfd4f,0x3bb1667b,0x3c05c401,0x3bf585f3,0x3bc7b79d,0xbb32d55d,0x3ba66b1e,0x3c00f531,0x3ba977f9,0x3b79a702,0xbac402a0,0xbc3771ab,0xbb8b2c28,0xbbd7b69c,0xbc2fc0f8,0xbc083e50, +0xbba40fa6,0xbaa6afa5,0x3b3423de,0x3b4716e8,0xba5d63de,0xbae15a06,0xbb29c467,0xba6119f7,0xbb2663a0,0xbb521d50,0xba8f1dd5,0xbb87b8a7,0xbba336cc,0xbb6e9f7c,0xbb10d0c7,0xbadcea76,0xbb58928b,0xbaca7574,0xba1456ca,0x3a9a927c,0x3a915fe0,0x3aab46fd,0x3ba07ed9,0x3be1e360,0x3c11e524, +0x3c121935,0x3c4ce2cc,0x3c17ffea,0xba47daff,0xbb43faa2,0xbb3457d1,0x3b101732,0xbb15e65c,0x3c4c52b6,0x3c366a47,0x3bfc2103,0x3bb5db69,0x3ba4a8c9,0x3b33017c,0x3b10ac6c,0x3b2740ab,0x3aa7471c,0x3ad2c36f,0x3aad25dd,0xbab34e77,0xbb731c31,0xbb73eee1,0xbb38f38a,0xbac9acad,0xba11bf59, +0x39e7e5bc,0x3a6dec73,0x3a9e05e3,0x3b1f5db8,0x3b3f8b53,0x3ae4d908,0x3ad56ca0,0x3a1a8ad7,0xb9942f88,0xbb4423b0,0xbb41c42f,0xbb6c9821,0x3b0aa55b,0x3bbf7528,0x3c5bc0c4,0x3c13eb35,0x3c00fdad,0x3c1e7c9d,0x3c304143,0xbbaa34ad,0xbbbbee08,0xbc1f9534,0xbc3a0217,0xbc51baa2,0xbc3ff5eb, +0xbc2d9681,0xbc030b21,0xbc10132d,0xbc038b7f,0xbbba7c51,0xbba8f7d6,0xbb863602,0xbb84cb80,0xbbaf19f2,0xbb9fff3a,0xbb78a40b,0x3935890a,0x3b061bc3,0x3afd046e,0x3b139f82,0x3b209007,0x3b492d5c,0x3aacaca7,0x3a8942a0,0x3ab10a10,0x3b25d0c4,0x3b59eb2c,0x3b4f6fdb,0x3b2b7e87,0x3b01eada, +0x3aa26eed,0xb8802b10,0xba9c40bf,0xbb3a6f52,0xbb8117e8,0xbae2ff8c,0xba99f902,0xbb91fd2d,0xbbe847bc,0xbc192ee9,0xbc1ec2f1,0xbc30687e,0xbc1c434b,0xbc1e3eaf,0xbc1357ed,0xbc1965c2,0xbbf5fc59,0xbbef9cd8,0xbbb54d08,0xbbae6f47,0xbb84870c,0xbb344015,0xb9b5487e,0x3aaaa221,0x3b52ad21, +0x3b52871c,0x3b3dd6a0,0x3b526f7f,0x3b0894ec,0x3ae3bbf3,0x3ac92b5f,0x3b113e00,0x3b26f802,0x3b40207a,0x3b1b1322,0x3b135675,0x3b0348ad,0x3ac39f09,0x3a10053f,0xb9917cb3,0xba23b5ab,0xba87c353,0xbac98041,0xbb1147bc,0xbb336ba7,0xbb661e59,0xbb933e60,0xbbcace7e,0xbc0bae00,0xbc072c84, +0xbbf50d93,0xbc08c81c,0xbbc8a4a2,0xbbcfde1f,0xbba7a6a8,0xbb92b53a,0xbb6484ed,0xbb3d2179,0xbad80c09,0xb986e1ee,0x3ad850d4,0x3abb6f0a,0x3aaf52aa,0x3aba26ab,0x3aa11d54,0x3a715fa3,0x39557140,0x3a0de6df,0x3a2413cc,0x3a84e4cf,0x3a5890a2,0x3a611e9b,0x3a5735b6,0x3a0ec760,0x39e4bc67, +0x39945bd1,0xba1c092b,0xbad51f38,0xba90cb99,0xbb192e93,0xbb19bd1e,0xbb398d17,0xbb1af5b8,0xbad91f25,0xba627693,0xba376d82,0xbab9a17a,0xbab0e0c7,0xbb074a5e,0xbb086bd5,0xbb352d0f,0xbb2d3054,0xbb1ced70,0xbb263ea8,0xbaf22cc4,0xbb1dfc0d,0xbace7b82,0xbadcefb4,0xbadf47d4,0xbaea637d, +0xbaf060c7,0xbad45992,0xbaa45c0c,0xbad9fb66,0xbb01e1be,0xbb1a3941,0xbb350fe8,0xbb470307,0xbb6326a5,0xbb4b4757,0xbb4170e4,0xbb2cb468,0xbb0a4099,0xba960ee4,0xba85bf45,0xbabd2685,0xbadcb98c,0xbb0b00b7,0xbabef267,0xbb192506,0xbb5a76fa,0xbb641581,0xbb58ace4,0xbb5450b3,0xbb52acc6, +0xbb50f142,0xbb4bdae6,0xbb0d0642,0xbad7e931,0xbb237f51,0xbaf38881,0xbaa786c4,0xba41ab21,0xba6395aa,0xba67ca9d,0xba60bdbf,0xba618eb5,0xba784a96,0xba843a73,0xba8f8f93,0xba8637f1,0xba878472,0xba818298,0xba7bcde4,0xba82021a,0xba752705,0xba76eb53,0xba759eb8,0xba876378,0xbb0c78a6, +0xba9ad771,0xba74861a,0xba5cd137,0xba464283,0xba4a4f6f,0xbaa6503c,0xba046fb9,0xb9e2a877,0xba34d9ee,0xba1a6b15,0xba027d26,0xb91774dd,0xba1ee527,0xba31a50d,0xb98b8b21,0xba51d91d,0xba88a256,0xbabd7280,0xba9bf0c4,0xba81732a,0xba3b93dd,0xba6eae03,0xba83c885,0xba963eb0,0xbaafb109, +0xbaa12fd1,0xba6d8759,0xba00dfb4,0xb9b5a754,0xb9d5f95b,0xba32659c,0xba5ec4fc,0xba721db9,0xba82fbb0,0xba641277,0xba3656c6,0xba619420,0xba56e669,0xb7d77b29,0x397b1557,0x394a92d6,0xbad1c57d,0xb881a2c7,0x38d2e47a,0xb8f029d5,0x3a891a1e,0x3a980778,0x3ac55031,0xb92e7a30,0xba2af5a1, +0x3a24788c,0xbab11047,0xbafc08ab,0xbb2adabc,0xbb03e026,0xbad275b5,0xba5e153b,0xbab53110,0xbaf0958f,0xbb25a465,0xbb1fcc43,0xbb029350,0xbad9e976,0x3a4456b6,0x3a949d6f,0x37fdc8d9,0xba169779,0xba9a041a,0xbac1e2de,0xbb107518,0xbb27271c,0xbafd6c20,0xbad8c044,0xbac44991,0xba72f835, +0x399055a1,0x3932e271,0xbb300d6b,0x3a50cfaa,0x3ae4675f,0x3a5b019c,0x3afbb367,0x3b227b46,0x3b872252,0x3a40358c,0x3992499b,0x3b20ea54,0xbaaa1ce2,0xbb19f5e5,0xbb86af98,0xbb307fe1,0xbb044acf,0xba4e0843,0xbafea577,0xbb346d7c,0xbb71f24e,0xbb90872c,0xbb6263ed,0xbafd447b,0x3ae4d4ba, +0x3b29362e,0x3aa94b3e,0xb91a0cd1,0xbadb9711,0xbb11f1cf,0xbb479917,0xbb1b7454,0xbaa34d18,0xbaf50573,0xb9e3aa0b,0x3ace8bde,0x3b2f4f95,0x3b2b9ddc,0xbb476c03,0x3afb2aef,0x3b3a01db,0x3ad46360,0x3bd11446,0x3be71a16,0x3beca251,0x3b351a40,0x3a86f7e3,0x3bab4b00,0xbb11fdb1,0xbb517e73, +0xbb921723,0xbb6b1150,0xbb1655ca,0xb9e41be3,0xbb18a5d5,0xbb76526b,0xbbb0b89f,0xbbd1106f,0xbba55771,0xbb31845a,0x3b80bc5f,0x3bb2d8dc,0x3b09e68f,0x3a7c18c2,0xbadb261a,0xbb37ddb3,0xbb97e33f,0xbba7d437,0xbb48dff6,0xbb2cfa0c,0xbb29daa0,0xbad8276b,0x3a32bd41,0xb94086ff,0xbbc999c2, +0x3b5ee657,0x3bd6ab33,0x3b50cc5d,0x3bd47857,0x3c0006f9,0x3c09fd09,0x3bacb3ac,0x3b9c0559,0x3bccb73f,0xbac60a55,0xbb58b1d0,0xbb8cb90c,0xbb4d20e9,0xbaf42872,0xb92f5f02,0xbb3d4197,0xbb977836,0xbbe2a172,0xbbfec956,0xbbc49b6e,0xbb2a17b2,0x3bb1453c,0x3bfc9fa2,0x3b8f8d70,0x3a448dbf, +0xbb249c4f,0xbb7da846,0xbbac9512,0xbb23db3b,0xb983f198,0xbb0b52dc,0x3a7f0686,0x3b9c1430,0x3c70105a,0x3c8a52ac,0x3c4df84a,0xbbf29b96,0xbc5d565b,0xbbe9c180,0xbb10dcbb,0x3b3d3ab0,0x3b93eed0,0x3baf6983,0x3b2ead09,0xbb8346ed,0x3b3d85e8,0x3b859b27,0xbab365b1,0xb90bfcd5,0xb89b02c2, +0x3a8619b1,0x39e0c45e,0x3a87d0af,0x3b136b8b,0x3af2b93d,0xbab01da1,0xbbd90bf8,0xbc4d7669,0xbc3c295a,0x38ceeb74,0x3b6b9594,0x3bacfd49,0x3bc28936,0xbb220dfd,0xbc2d4645,0xbc4ca885,0xbbef18c8,0xbc4f0d65,0xbc615799,0xbcaa500b,0xbc8fa00e,0xbc803d94,0x3bccfb76,0x3c640da5,0x3bf0a1c4, +0x3b1124ba,0xbaa4e474,0xb9a25a12,0x3b45f19c,0x3ba4a926,0x3baf950b,0x3b284b78,0x3a432555,0x3ae40200,0x3a33e795,0xb8ccdd3c,0xb78b8dab,0xba1ffdf7,0xba9f3a0a,0xbb22988a,0xbb4e9c57,0xbb4a5189,0xbb2c319e,0x3ada20e1,0x3b0aefb0,0x3bbed3c6,0xbba4708d,0xbbbfc0e3,0x3b802fbd,0x3b2f9cb3, +0x3c2875a3,0x3cc616db,0xb91ae719,0x3aa266a6,0x3c8ca3f3,0x3b20efa9,0xbb45010f,0xbbfd8b09,0xbb022626,0x3b28bc88,0x3bd75552,0x3b888c4c,0x3b5e4356,0xbaabcaa5,0x3a32e4e4,0x3a914f46,0x3afb0b4b,0x3b7123ce,0x3b3af3ad,0x3ad47d45,0x3a1b708b,0x3a16d477,0x3a0c4395,0xba811b9b,0xb9eb44b5, +0x3a373426,0x3b4532ed,0x3b9c5731,0x3b883d76,0x3b604a00,0x3b34929b,0xb6ef1f12,0xbb3bfc08,0x39133478,0x3c723fcd,0xbb122f11,0xbbc9c8cb,0xbbd8942a,0xbbbe3a5d,0xba9fce17,0x3c01c554,0x3ad6cf21,0xbabe9ac4,0xba2e12e4,0xbbf78870,0xbbaddcf1,0x3b908e45,0x3b9177b6,0x3b7edbef,0xb906fdac, +0xba53d1de,0xbae96835,0xba3b5ed6,0x39b561fc,0x3a5a0b80,0xbacece62,0xba390558,0xba9bc876,0xbac8d3ab,0xbb08c1e1,0xbac8310b,0x3a2dfa83,0x3b42898a,0x3b9a2068,0x3bf134d6,0x3be9b70f,0x3bc82880,0x39402e7c,0x3ba7739e,0x3c024573,0x3c534127,0xbb1e5fbb,0xbc1cbabf,0xbc70b74c,0xbbdff7da, +0xbbc63561,0xbc329968,0xbb986bc3,0xbaec8f04,0xba8322ce,0x3b69e706,0x3b7bd453,0xb7c38406,0xba89a61b,0xbb2671e8,0xba89fefa,0xbb27b003,0xbb4f13c4,0xba91dd00,0xbb86d0bd,0xbba2c1d1,0xbb7ca70f,0xbb571ad1,0xbb465f78,0xbb793ff4,0xbb22d627,0xbafdf2d4,0xb9def0c3,0xb9a057ba,0x3ad6f1ee, +0x3bbd4a19,0x3c0e453e,0x3c24d365,0x3c121eee,0x3c339115,0x3be97e19,0xb97dc634,0xbb34d3c6,0xbb177243,0x39ae7832,0xbb059893,0x3c643370,0x3c22d350,0x3bebb1c3,0x3ba1ecc8,0x3badb90b,0x3b299908,0x3ae41f18,0x3ae4dd08,0x3a94890a,0x3b088557,0x3b12a8f1,0x3a27bad5,0xbb122c6c,0xbb74dbfd, +0xbb3d0034,0xbb03ac8b,0xbad7b7e9,0x3988b64a,0x3a92e6d2,0x3aba95d5,0x3b0a8ad8,0x3b27c2de,0x3adffb62,0x3ab9e8fe,0xb888255c,0xbaae0adb,0xbb79f9c9,0xbb13a535,0xba9fac9c,0x3b98cb29,0x3bfe2187,0x3c6e33b3,0x3c2721fa,0x3c287ccd,0x3c672e07,0x3c66de34,0xbbb010db,0xbbc57850,0xbc1fa882, +0xbc36b024,0xbc395d0d,0xbc15ebc5,0xbbf56dc6,0xbbc40bca,0xbbe47bb1,0xbbdb994e,0xbb955af1,0xbb94ca9c,0xbb71d602,0xbb766237,0xbba078d2,0xbb9a9dab,0xbb947457,0xba86f2c7,0x3a818c6a,0x3b0357c7,0x3b14e9e1,0x3b301d95,0x3b53b9c0,0x3b0e1e66,0x3af553bc,0x3ac0dc1e,0x3b3979a6,0x3b681698, +0x3b7389f6,0x3b4636a1,0x3b1932ae,0x3aab6f2b,0x3a0d24fa,0xba2fc52f,0xbb47ead3,0xbb87e141,0xbb160254,0xbaf5c9e0,0xbbaf5916,0xbbff3a87,0xbc25b4b9,0xbc195157,0xbc26398e,0xbc0e1f90,0xbc0da8cd,0xbc00ecb9,0xbc0170ce,0xbbcf2498,0xbbc4514f,0xbb87170a,0xbb9319e2,0xbb813ff1,0xbb7011d0, +0xba9a6bbe,0x3a4f6a36,0x3b460daa,0x3b3cd2f6,0x3b43d12a,0x3b527761,0x3b35f87c,0x3b2447f3,0x3b160996,0x3b3b0b02,0x3b434092,0x3b71c003,0x3b650060,0x3b637e91,0x3b45c9f4,0x3abe3c37,0xb8d972d2,0xba801e75,0xbaa5188a,0xba98b130,0xbad710ec,0xbb160c2c,0xbb47a472,0xbb8bb986,0xbbabdf96, +0xbbd89c3c,0xbc0b034f,0xbc03dd3b,0xbbe2d2a3,0xbbf89718,0xbba37258,0xbba2b394,0xbb6a7a64,0xbb6e58c3,0xbb47df04,0xbb45216c,0xbabd7b5e,0x369e4bf4,0x3ae552be,0x3acd4db3,0x3adf6f0b,0x3afd5b1b,0x3af0ce37,0x3af62dee,0x3ad82bdc,0x3ae0d796,0x3ae430a0,0x3ade30f5,0x3aa66723,0x3a9569fd, +0x3aa665b0,0x3a7c59a0,0x3a5c85c8,0x39b3b6a9,0xba20b770,0xba390f5a,0xb9388bf3,0xbaa34162,0xbaba70a2,0xbae01700,0xbaa6abdd,0xba60b5e9,0xb9d5f3c0,0xb97b4e4e,0xba66c299,0xba5653aa,0xbaccc064,0xbadae014,0xbb0dd0a6,0xbaeb499d,0xbaa911a4,0xbaa132ac,0xba27a54e,0xbaa283fe,0xb973b5ce, +0xb9d92ee2,0xba1e5f71,0xba62c5de,0xba826f57,0xba90fcc6,0xba97c059,0xbabacf07,0xbaefd4d4,0xbaf80ef2,0xbb0cec0f,0xbb18a628,0xbb3a2100,0xbb2428a0,0xbb1e5fbd,0xbaf75415,0xba9f8e67,0xb9b3cf1a,0xb9562926,0xb9f787ae,0xba30917b,0xba95e342,0xba5d03f9,0xbacd5908,0xbb1cd2e2,0xbb1e8c74, +0xbb11b9cb,0xbb08a13a,0xbb006ffd,0xbaef9fb3,0xbae3e62f,0xba80bed4,0xba348a3e,0xbab7c263,0xba56d6d9,0xb9adec5d,0x384c37d1,0xb8f3cf97,0xb8bbf782,0xb839a8f6,0xb7f84b6c,0xb862ef1e,0xb896662b,0xb8b7e2d5,0xb8cbd437,0xb949bb63,0xb97b5b63,0xb98b5275,0xb99916d4,0xb90d55d0,0xb90f07d7, +0xb9088357,0xb976c634,0xba0d4451,0xba7c4511,0xba3ad105,0xba2c071b,0xba0e64fe,0xba11831b,0xba7ad5f6,0xb9babae7,0xb9a1cbb5,0xb9e62296,0xb9f8652e,0xb9dae477,0xb75d2c92,0xb9fea9f2,0xba16b54b,0xb984a7b6,0xba2ad95c,0xba639f25,0xbab33820,0xba9288f2,0xba7a2efe,0xba3a90a8,0xba652242, +0xba7512dd,0xba86af5c,0xba96c329,0xba830d05,0xba1e7f56,0xb99b3f15,0xb93a93e4,0xb97fd7ef,0xba0326d6,0xba343810,0xba623f88,0xba5e6581,0xba2b39cf,0xb9ea3720,0xba21afa7,0xba02f6e3,0xb7932ed5,0x395fde18,0x39a5a442,0xba91c5d3,0x3908bcc2,0x39479933,0x396977aa,0x3a6ec397,0x3a9234ec, +0x3ad83266,0xb8a2ee5f,0xba1073da,0x3a0424cc,0xba858f0a,0xbacc64b8,0xbb2b77b4,0xbb00ec0e,0xbad30e4c,0xba8050eb,0xbacde7e0,0xbb004036,0xbb1c3b1d,0xbb0a3d60,0xbac31453,0xba602339,0x3a82b206,0x3aa7c965,0x399a7425,0xb9553a44,0xba68e537,0xbad055ff,0xbb0903bf,0xbb1efded,0xbaead0ce, +0xbaad82ec,0xba5518be,0xba36014a,0x3a11361f,0x3a1f35e3,0xbae36755,0x3a75160d,0x3ae0c29c,0x3ac10edd,0x3aeb61dd,0x3b0b544a,0x3b865cb2,0x3a40ea97,0x39a6ecae,0x3afe8ec8,0xba76e3e6,0xbafa6b16,0xbb8cb6f4,0xbb3bd360,0xbb1e19b9,0xbab36700,0xbb2797b2,0xbb4c0c6f,0xbb6cb156,0xbb807050, +0xbb326aad,0xba26c9c4,0x3b121b83,0x3b348567,0x3ac7b3ba,0x39971b71,0xbaa75b7e,0xbb23d29e,0xbb3e3d15,0xbb012dc7,0xba256ce9,0xba91cacd,0x398fbe6e,0x3aae16d3,0x3b1aef8c,0x3b28c011,0xbb0b6d6d,0x3b0850d0,0x3b30502a,0x3b100c19,0x3bc23ca3,0x3bde8232,0x3c00540c,0x3b2385c7,0x3a623df5, +0x3b99d4e9,0xbadea4ba,0xbb2531ab,0xbba0f877,0xbb74bafa,0xbb3498bf,0xba9b9429,0xbb5fb51a,0xbb947870,0xbbaeba9c,0xbbb6d171,0xbb71f225,0xba08a154,0x3b908284,0x3bb3c964,0x3b1b3ffd,0x3acfd4d5,0xba9914ce,0xbb5e5553,0xbb975e7d,0xbba625f2,0xbb3c1590,0xbaebe68d,0xba844417,0xba89ca69, +0x3ab1de8c,0x3a56ed3f,0xbba06b94,0x3b4194e5,0x3bc9f3ff,0x3b853f96,0x3bd764db,0x3c03edb1,0x3c105ad8,0x3b8e199c,0x3b8099cc,0x3bc07a5e,0xbaaa998e,0xbb37b0e6,0xbb9b43d0,0xbb70809e,0xbb36d63d,0xbadbcda8,0xbb91d8d4,0xbbbafa08,0xbbe1b9b8,0xbbe4c534,0xbb93ee95,0xb9093581,0x3bd483e9, +0x3bf81d1f,0x3b8b1f2d,0x3ab84491,0xbaf3f16c,0xbb910025,0xbba91389,0xbadc991c,0x3a7f47b8,0xb9f7b663,0xba8091dd,0x3aaf888d,0x3c18fdcf,0x3c501780,0x3c56dda7,0xbb9ba2d7,0xbc35e377,0xbbfa9472,0xbb3ce1b6,0x3b01e24d,0x3ad4ae55,0x3bd2c3f8,0x3b963b4c,0xbb979e30,0x3b4bc075,0x3b76a66e, +0xbabb40d9,0xba3d0cfe,0xba8bc3ab,0x39353926,0x3a1be7da,0x3ac8ccb0,0x3b10b23c,0x3ac7c329,0xbad7eba5,0xbbe23593,0xbc4be3f4,0xbc25bd13,0x3b94d3be,0x3b94ff52,0x3bb35d38,0x3bfa07fa,0xbb86402c,0xbc4dba86,0xbc4ceba5,0xbc0307c2,0xbc1b5621,0xbc2388bc,0xbc7e0eeb,0xbc70d75e,0xbc8e01c9, +0x3b63ce86,0x3c421cd6,0x3c082ebd,0x3b2357c8,0xbacaed0b,0xbaff8a4a,0x3abd950c,0x3b8007f9,0x3b9cdc5d,0x3b3751e0,0x3a4d58c4,0x3ac8bc91,0xba5e3337,0xbaeda923,0xbab3bd53,0xbae03a82,0xbb02d9d6,0xbb3594d3,0xbb8e95ce,0xbb819dbc,0xbb5852e7,0x3b7c25ad,0x3b84c932,0x3b4f3dbe,0xbb8f603f, +0xbb9a2939,0x3b9d4b65,0x3ba0e3bd,0x3c599139,0x3ccfa8c7,0x3af3579a,0xbab4975c,0x3c948e99,0x39e9e62f,0xbbad3246,0xbbf9c667,0xbb2f5e14,0x3b0766e8,0x3b8c8543,0x3b554727,0x3b35b583,0xbadfb4b9,0xb9b924ad,0x39385257,0x3aeab898,0x3b49bc87,0x3b316821,0x3afa2c84,0x39d90116,0x3a71f58b, +0x3a1d0b13,0xba3d54d9,0xb8742383,0x3aced63c,0x3b08fe94,0x3b678db4,0x3b2d9742,0x3b41ee30,0x3b42c360,0x3a817f3a,0xbafff4de,0x3aa677a0,0x3c9c2b66,0xbbcab687,0xbc43c237,0xbc13c514,0xbc15aa6b,0xbb3432c0,0x3bdd1614,0xbaa3e978,0xbb913ba9,0xba543d59,0xbbec3096,0xbba6c691,0x3ab33591, +0x3b4f7a40,0x3b4b7819,0xb8e61974,0xba74d5a9,0xbb01aef1,0xba29c1b9,0xb88102ce,0x3a4d8a47,0xbaac8351,0xb9add1b6,0xba2acd68,0xba5a3e17,0xbb05cde5,0xbad41abd,0x3a8d7434,0x3b22587c,0x3b903aa7,0x3bd90be5,0x3bc55a27,0x3bb6b483,0x3b6fb0d9,0x3ba11e42,0x3bedcac4,0x3c920a67,0xbbdb231b, +0xbc74cd2d,0xbc85637b,0xbc0bbd98,0xbba91bc8,0xbc2a9436,0xbaf30866,0x3a7fd019,0xb8c0f930,0x3b6d974c,0x3b709229,0x3a447022,0xb9edd158,0xbb1a7bd6,0xbab66df7,0xbb100e76,0xbb2975d9,0xbaa54f45,0xbb725730,0xbb9548cd,0xbb848773,0xbb894667,0xbb89e7a3,0xbb81af51,0xbb5c401e,0xbb51a1cd, +0xbb08a4fe,0xbac0ae10,0x3b00c7ef,0x3bc7f132,0x3c1b8bdb,0x3c2c8309,0x3c1c8878,0x3c140ceb,0x3ba5bba1,0x3a8c6729,0xba505608,0xb90fcf33,0xba8e2463,0xbab39566,0x3c4b00d9,0x3bce8a8d,0x3bb2c3c4,0x3b62c5a6,0x3b9d8157,0x3b36c322,0x3aed1263,0x3a79aa48,0x3a509e45,0x3b110dca,0x3b2e065b, +0x3b1dd082,0xba4858ee,0xbb66dccf,0xbb4891a9,0xbb338636,0xbb24032c,0xb8dd4471,0x3a9f5b06,0x3ae28ab4,0x3af56052,0x3b14f67e,0x3b0566a1,0x3ac109ff,0xb9f5586c,0xbae3761e,0xbb500881,0xba38a426,0x3b02ec66,0x3bd56170,0x3c0d66a0,0x3c66eea9,0x3c29fdc9,0x3c3820ea,0x3c7f0cf9,0x3c6e0c50, +0xbb8b0bad,0xbbccf112,0xbc0a2bf7,0xbc1cb55e,0xbc1756a2,0xbbcb15e3,0xbb89cd45,0xbb79b7ed,0xbb9a9b15,0xbba4fb2e,0xbb5f6af6,0xbb839fc3,0xbb6602b4,0xbb73d0a3,0xbb87dfd7,0xbb8a4620,0xbba304e8,0xbb17600f,0xb99fc718,0x3acde82e,0x3af7a08d,0x3b282e0f,0x3b41245d,0x3b212525,0x3b278838, +0x3ae07b6c,0x3b32b54b,0x3b560171,0x3b7a57a8,0x3b456e85,0x3b1cebc5,0x3abcb3c3,0x3abd64c7,0x3a2be393,0xbb013ce9,0xbb390953,0xbb252277,0xbb2a7377,0xbbbaf1ca,0xbc0093eb,0xbc2a5113,0xbc0f01d6,0xbc16a400,0xbbfbfc28,0xbbf379ea,0xbbd7b732,0xbbd03947,0xbbae9d60,0xbba1ec32,0xbb610143, +0xbb72de5d,0xbb6e532e,0xbb8273b6,0xbaf5af08,0x3808db2d,0x3b0c5589,0x3b0be36c,0x3b2fe041,0x3b3bf352,0x3b477a02,0x3b3adbe8,0x3b2779b8,0x3b43b895,0x3b42b099,0x3b789a6c,0x3b78e115,0x3b7a6522,0x3b52bfb5,0x3a85b5be,0xba5efd73,0xbacef400,0xbade964a,0xbac5783d,0xbae7efd5,0xbb30049c, +0xbb6df21d,0xbba83d5d,0xbbc4de79,0xbbe549bb,0xbc084a90,0xbbfe11a4,0xbbd16477,0xbbdc2c8a,0xbb8820e7,0xbb7f37ea,0xbb2dd3c7,0xbb3e3359,0xbb287f42,0xbb2b3c61,0xba8e0a28,0x38d5ace2,0x3abff1d9,0x3abd4de1,0x3af045dc,0x3b128e54,0x3b131c7d,0x3b289943,0x3b346165,0x3b25f794,0x3b237411, +0x3b0cb9af,0x3abb1751,0x3a7b9476,0x3a7d19f7,0x3a37aa44,0x3a2719bb,0xb8801ab9,0xba77515e,0xb8f8decd,0x3964da7a,0xb9ee3a8c,0xba3571fd,0xba47fc1c,0xba004183,0xb9b6a717,0xb999379a,0xb8b37ea8,0xba1daa5c,0xba088bff,0xba9c5bc4,0xbab470f6,0xbad30dce,0xba88f086,0xb9ced3e9,0xb903ec39, +0x39b01ad2,0x38f6f064,0x3a84335c,0x3a4737d1,0x39d15a9c,0x371ad07c,0xb96d0e79,0xba240dfd,0xba878148,0xba97318d,0xbacd7bc0,0xbab8dee7,0xbabbe63b,0xbab1c3ed,0xbae5a8fe,0xbad17921,0xbad36a4e,0xba932d88,0xba066d73,0xb966c615,0xb8dbe7ba,0xb95640a2,0xb9a430de,0xba27e01b,0xba6b9dc0, +0xbaaf84ee,0xbaf05799,0xbae33280,0xbac79446,0xbaad1e44,0xba8f7da0,0xba5c8635,0xba42b3bd,0xb9d56f8a,0xb9b50914,0xba167aa7,0xb97b8d22,0x376bdba8,0x39476c5e,0x384492d9,0x38d37841,0x39255a2b,0x39588228,0x3985e9af,0x3994dc80,0x39a8b06f,0x397e1509,0x38c72d04,0xb8724c4d,0xb93c8cbb, +0xb9824618,0xb8619495,0xb78c9dc8,0xb7df3499,0xb917949d,0xb8eceb8f,0xba377a1b,0xb9ddbd79,0xb9d86e53,0xb9905ebf,0xb99bbcc1,0xba23db34,0xb93d5799,0xb927b39d,0xb944c726,0xb9b93a07,0xb9b39cb9,0x38683abe,0xb9be48f4,0xb9f2baf5,0xb9881989,0xb9f07b3e,0xba24a3cd,0xbaa58bed,0xba804667, +0xba5ec8a6,0xba2f6ea2,0xba4f73b2,0xba551ece,0xba611c0d,0xba6cc7bc,0xba3cbfe6,0xb98b1e08,0xb8a7d0f9,0x36829a6e,0xb8bb2a5c,0xb9a280e7,0xba024b1c,0xba3fe9c4,0xba345141,0xb9ef057f,0xb95e2f68,0xb9b1ee5c,0xb8ea9a3f,0x38660d1d,0x39ab2df5,0x3a064f28,0xba0303ab,0x39bcb91f,0x39ad1c0a, +0x3a160ee6,0x3a3df2ae,0x3a82713b,0x3ad0755a,0x38a1eda6,0xb9b1bd5c,0x39bcc81b,0xba1f8cd0,0xba8e2ddb,0xbb233eb5,0xbaef3af2,0xbacda0a8,0xba8ebd58,0xbada6f4d,0xbb0032ef,0xbb0c6472,0xbadef87b,0xba73b487,0x37b1143a,0x3a9c27f9,0x3aad8055,0x39ebf1bb,0x39292d29,0xba0fb862,0xbacd3de5, +0xbb045125,0xbb16bde8,0xbacd3716,0xba684d67,0x38ad66ad,0xb982bcf9,0x3a80c5ec,0x3a8fb72d,0xba25080e,0x3a94585c,0x3add9348,0x3b048935,0x3ad44b45,0x3ad685fb,0x3b753dd1,0x3a4b459f,0x39f8b69b,0x3ab60e03,0xb9fc4b7d,0xbab00f7e,0xbb896f56,0xbb3da029,0xbb2e1663,0xbafa3ab8,0xbb42b89f, +0xbb5592e6,0xbb5c8abd,0xbb544afa,0xbaf303d7,0x3a48dfc1,0x3b2c98f8,0x3b39b32d,0x3acce4b3,0x3a31801f,0xba5a3782,0xbb23c75e,0xbb372f3e,0xbae13682,0xb90ccfaf,0xb98204c2,0x3a8e17fc,0x3a955c3f,0x3b1ba916,0x3b31d7f4,0xba5efb17,0x3b1ca942,0x3b2d4132,0x3b3ec4ec,0x3bab8000,0x3bcb6bd5, +0x3c00916f,0x3b1cdf7c,0x3a86b6c8,0x3b80d34f,0xba6e079d,0xbad55be5,0xbba78a82,0xbb763ddc,0xbb4e23e1,0xbb03c4dd,0xbb89c0a3,0xbba2c9bc,0xbba5e7f3,0xbb95c9de,0xbb1302df,0x3af4c03f,0x3b98bb5e,0x3baaccba,0x3b146a97,0x3b0ca63c,0xba1da677,0xbb6d4b90,0xbb9b95df,0xbba650b6,0xbb25cc02, +0xba533935,0x3a8a0aed,0xb904f773,0x3b14b19d,0x3afdc128,0xbb4ad59e,0x3b35fe90,0x3bbd24b0,0x3ba1f5c7,0x3bd8a79c,0x3c04655e,0x3c13e7da,0x3b77a7a4,0x3b5def0d,0x3bad72d1,0xba4c3bc9,0xbb09c7bf,0xbba6bf5e,0xbb85ba3f,0xbb73c669,0xbb4b6af2,0xbbb90411,0xbbce9050,0xbbd73164,0xbbbfb960, +0xbb35d00d,0x3b28f88b,0x3bf298ce,0x3beb5d20,0x3b791379,0x3aff07e8,0xba8ff47b,0xbb90a2dd,0xbba5a11d,0xba9ee0f2,0x3af0d787,0x3ab0cf04,0xbb5d5448,0xbb02a5ae,0x3b8abc8c,0x3c05c0e1,0x3c4fa39c,0xbb04cd2b,0xbc098e19,0xbc00127e,0xbb83a986,0x3a5336c7,0xb8f0fdcc,0x3bf62742,0x3bd1829b, +0xbb9cc87f,0x3b4a9966,0x3b53c516,0xba08f99f,0xba32da06,0xbaa594d4,0xb89fcffb,0x3aac4180,0x3b15926e,0x3b0dc856,0x3ac03bb8,0xbae5a9b4,0xbbfd5211,0xbc450371,0xbc085f44,0x3c03bdd9,0x3ba0bab3,0x3bab14f2,0x3c00fa11,0xbbbcf0e7,0xbc64f7b2,0xbc53a00f,0xbc131ed7,0xbbac2711,0xbbbc7901, +0xbc285d60,0xbc44f988,0xbc8f15a0,0x3a01dce5,0x3c10e712,0x3c052edf,0x3b490193,0xba8e4938,0xbb5a67c1,0x37c46a90,0x3b3c4d50,0x3b8532b4,0x3b38e6a2,0x3a4d5c63,0x3aae9674,0xbb077c13,0xbb5678b8,0xbb3c1dd7,0xbb26311a,0xbb2307a9,0xbb373ec2,0xbb9d1758,0xbb85b2fc,0xbb5930cd,0x3bc84885, +0x3bbea65f,0x3a909773,0xbb66c995,0xbb649b97,0x3ba81c73,0x3bf2d447,0x3c80ae35,0x3cc323bf,0x3b883be3,0xbb9f36b5,0x3c778510,0xbaaa3062,0xbbe05a74,0xbbdd89a5,0xbb33e9a9,0x3af4b5e6,0x3ae497a3,0x3b0925c4,0x3b01e2dd,0xbadd6521,0xba9d9955,0xba2a0999,0x3addf32e,0x3b174a59,0x3b188def, +0x3b096213,0x3948a5ef,0x3a86d626,0x39ea0b81,0xb98a306e,0x3a30fac7,0x3b227dc0,0x3aeee254,0x3b32afd4,0x3aa8c7ce,0x3b26998b,0x3b51035f,0x3b0751f4,0xba2a1955,0x3b02711f,0x3c9c64fa,0xbc0f48ad,0xbc7ac4df,0xbc15b5db,0xbc3ea51d,0xbbac7580,0x3b61ae43,0xbb63eaa8,0xbbcd0261,0xb932530e, +0xbbbf7349,0xbb8b5f31,0xbacd9459,0x3ac82cfb,0x3afd6ca4,0x390d3613,0xba69c8d5,0xbaf5f3c5,0xba206216,0xb9c54d65,0x3a178293,0xba8c7c82,0xb941fa93,0xb9afb9d9,0xb991d9db,0xbadcfc06,0xba9b7ec6,0x3abf329e,0x3b2f00cc,0x3b948f2a,0x3bbdeb12,0x3b9e6db3,0x3ba4f71a,0x3bd90418,0x3bb67367, +0x3be0d65b,0x3c97cd4c,0xbc174acf,0xbc90a9e4,0xbc6ea3e5,0xbc2102bc,0xbb377a5d,0xbc000d51,0x3887d2af,0x3b370dda,0x3abc4c8e,0x3b5747b7,0x3b443846,0x3ac40f6a,0x38b3ec67,0xbb04d6d6,0xbaed4acb,0xbad2474e,0xbaddfb64,0xbab77062,0xbb449d49,0xbb7fd804,0xbb8c33ac,0xbb9d0086,0xbba48b1e, +0xbb80a3ca,0xbb824ffb,0xbb841600,0xbb52b092,0xbb064df0,0x3b0aece5,0x3bc86d1f,0x3c1c4025,0x3c2b0bcb,0x3c2c174b,0x3bf01fc9,0x3b6251ed,0x3b078f17,0x3af9d1b2,0x3b5978c9,0xba6e4962,0x3a199088,0x3bfd08d8,0x3ab6c7b5,0x3b1f2395,0x3ac822e7,0x3b68f91f,0x3b4c090d,0x3b14e097,0x3a280271, +0x3a356e29,0x3b1588b5,0x3b323390,0x3b65b3d4,0x39a492de,0xbb498e30,0xbb5768c6,0xbb67bcd5,0xbb5256f6,0xba252908,0x3a972605,0x3b0369c1,0x3ae5d24d,0x3b0c5213,0x3b1d69b6,0x3ad96d46,0xb91f7f9d,0xba8d7f17,0xbab6283e,0x3abe8047,0x3bb0a22f,0x3c069fc1,0x3c1c719f,0x3c610d76,0x3c285fdc, +0x3c2d6b66,0x3c66b8aa,0x3c3bdd06,0xbb012e84,0xbbbcb41f,0xbbca2455,0xbbdc3a26,0xbbcf9d14,0xbb4df394,0xba8f5b01,0xbac66291,0xbb1191dd,0xbb4aff92,0xbb135a37,0xbb640538,0xbb5dfd3a,0xbb726eb9,0xbb62bdf9,0xbb710c25,0xbba1b68f,0xbb6064d0,0xbadcd291,0x3a1c76c9,0x3a9b8bf0,0x3b0b9668, +0x3b1dea9a,0x3b1eb204,0x3b3b90d1,0x3b0254dc,0x3b1b9a38,0x3b3b248e,0x3b72fb15,0x3b42b5d1,0x3b21715a,0x3ae1d6d2,0x3b226f9e,0x3b247d74,0x39e66050,0xb970074b,0xbb29aa70,0xbb5a617f,0xbbb86731,0xbbf00def,0xbc242e70,0xbc00c3c5,0xbc035e30,0xbbd63107,0xbbc616f6,0xbbaace4b,0xbb9e5a38, +0xbb9336de,0xbb8b9b12,0xbb5a70a3,0xbb539e91,0xbb5962c0,0xbb75a978,0xbb185461,0xba49cb6a,0x3a833a4f,0x3aaba272,0x3b1319f5,0x3b253af7,0x3b3c480f,0x3b2d9c0b,0x3b17d184,0x3b2d4551,0x3b2a8356,0x3b634c57,0x3b69b939,0x3b6fec84,0x3b469459,0x3a34282e,0xbaa8225c,0xbaed2fb7,0xbb01f7ab, +0xbafaa0f1,0xbaf97603,0xbb512192,0xbb902c97,0xbbc95c6f,0xbbdb8911,0xbbecabc0,0xbc02b898,0xbbf1ae5c,0xbbc28260,0xbbc1dbfc,0xbb723cac,0xbb59ea06,0xbb1e1ae7,0xbb21610e,0xbb11bb71,0xbb062d54,0xba4bdcd3,0x393286bf,0x3a78c93e,0x3a92f9b1,0x3ae17483,0x3b18a3ae,0x3b1a3465,0x3b375a02, +0x3b4cea37,0x3b3ca838,0x3b3e3f32,0x3b249fc8,0x3aca3fe1,0x3a3632c8,0x39dd4359,0x391d84c0,0x39043685,0xba3ba939,0xbab09d70,0x392ab4ea,0x393eba55,0xb8d9f39d,0xb9418afd,0x37732d32,0xb8d2bb11,0xb98c2d7c,0xba23c10a,0xb9ce8df1,0xba49a7ec,0xba343adc,0xbaa15b11,0xbaba9453,0xbabce1d3, +0xba475074,0xb8b3e0b9,0x39c18383,0x3a2d39f8,0x3a80f2c1,0x3ac694c0,0x3aa71db4,0x3a6444cf,0x39ec9961,0x3966bffb,0xb98578f2,0xba4b44eb,0xba490dd4,0xba930eba,0xba5e5e7a,0xba1ab293,0xb93dad9a,0xb99fa481,0xb9e80a77,0xba14b1b8,0xb9ad8002,0x3496fc1b,0xba1a8456,0xba078652,0xba0e28bb, +0xba2c63fb,0xba612e1b,0xbac49d37,0xbad7b4ef,0xbaf10168,0xbad4fb56,0xbaba4923,0xba9ae70a,0xba69ba8c,0xba1337da,0xb9f2bb47,0xb9f70bf0,0xba10b1bf,0xb9a1e396,0xb958d681,0xb9318839,0xb91076b4,0xb960cf9a,0xb91e21b5,0xb8b12d55,0xb71bea01,0x38aa0b13,0x3911c3ee,0x395fd357,0x38eae297, +0xb81cb398,0xb98e2e61,0xba00be07,0xba214154,0xb9f1b289,0xb9c94b94,0xb9e14710,0xba11e77a,0xba1decec,0xb9e4c187,0xb8e567b8,0xb912a92d,0xb8432ebc,0xb8ce1e3c,0xb9accbd6,0xb8423a86,0xb8825910,0x3788c1f7,0xb98697e7,0xb99b561c,0x38388e64,0xb989d474,0xb9bdf913,0xb98ff6fe,0xb995edde, +0xb9cd06ad,0xba919959,0xba57c837,0xba3e306b,0xba19d75b,0xba308637,0xba2d5fbb,0xba3223e1,0xba2493fb,0xb9d8b4c7,0x38b4e8cc,0x390fc9ba,0x393ab3c1,0x3815b6fc,0xb912ac15,0xb9a0a5ee,0xba112cc2,0xba0ada24,0xb99a8c78,0x3647fabd,0xb8855cf7,0x3981aa19,0x38ec5255,0x39f4b016,0x3a3bb87d, +0x389d163d,0x3a041d11,0x39cfce86,0x3a59fb71,0x39edaf34,0x3a43111d,0x3aa8e358,0x394f2abc,0xb8af9fe6,0x39694f38,0xb947962b,0xba12afa6,0xbb109da0,0xbad1de07,0xbac5283b,0xba9a27fa,0xbad87e74,0xbaf2271b,0xbaf6fe1c,0xbaa297c8,0xb9b0c368,0x3a6dc174,0x3ab0e3e5,0x3aa9b0fd,0x3a02d762, +0x3a00e8fa,0xb951da81,0xbac087a8,0xbb0032e8,0xbb0adfee,0xba9e1d7b,0xb9dd6771,0x3a83a301,0x398b8f2b,0x3ab00bca,0x3abca3af,0x39a900ae,0x3a9f2152,0x3ac7ee49,0x3b18f6a6,0x3aacf052,0x3a878bb6,0x3b43414e,0x3a4ee4f0,0x3a2dac40,0x3a678b67,0x377a6ce4,0xba37db32,0xbb7683bf,0xbb33b31a, +0xbb33803d,0xbb17a6d3,0xbb4d8ae4,0xbb515c19,0xbb4967a1,0xbb1f4bad,0xba684d9e,0x3b0fe9d2,0x3b4160b4,0x3b39ded3,0x3abd03d2,0x3a7ba836,0xb9d59fb9,0xbb14f3a9,0xbb2e30aa,0xbaccc9fd,0x39bf9e74,0x3a19b942,0x3ae22932,0x3a66765a,0x3b20f2b8,0x3b3e36e2,0x39c75cc5,0x3b271f09,0x3b204924, +0x3b63789d,0x3b8a4dc6,0x3bacb76b,0x3be94234,0x3b18e89b,0x3ab4bd26,0x3b4de064,0x3770ec9e,0xba1504ad,0xbb9f27e0,0xbb69cb57,0xbb5d5f67,0xbb35ddbc,0xbb96b803,0xbba5366b,0xbb9cf1f5,0xbb5e8b1e,0xba3aeaa9,0x3b8ad3f6,0x3b9bae96,0x3b9be50e,0x3af5d880,0x3b2c4cfc,0xb7712f42,0xbb700b4d, +0xbb9e767d,0xbba0d04b,0xbaf058b2,0x3938de35,0x3b4eeaa2,0x3a6e7483,0x3b42ee69,0x3b32b476,0xbaac647d,0x3b277e7d,0x3ba97c9c,0x3bb92c3c,0x3bd4670d,0x3bffa34f,0x3c117be1,0x3b63ab2d,0x3b4b4114,0x3b980bfc,0xb806f6bc,0xbaa52a7d,0xbba7300e,0xbb882562,0xbb8ff6d7,0xbb8a86c5,0xbbce6e71, +0xbbd28b4b,0xbbc9eeb2,0xbb93bba8,0xba65ff1f,0x3baed835,0x3c040b25,0x3bda0ab9,0x3b506580,0x3b13e798,0xb9cfa576,0xbb8041da,0xbb9e32ce,0xba856b49,0x3b2dfa0f,0x3b457b20,0xbbc56c71,0xbb9dfb3a,0x39cbbe0f,0x3b96249e,0x3c388287,0x3a01fd7a,0xbbbc586d,0xbc01af89,0xbbb388a9,0xba085644, +0xba7f2b44,0x3c0a0fcc,0x3c0007d3,0xbb9b4f4b,0x3b3f1dca,0x3b2b6933,0x3a862113,0xb8ac8170,0xba584b6f,0x38b41fec,0x3b191a9a,0x3b4be6a8,0x3b1fb261,0x3ab42058,0xbb0485b1,0xbc0eacb7,0xbc3dee1d,0xbbd6634a,0x3c2ac1ad,0x3bab8843,0x3ba8fa41,0x3bee3a32,0xbbe40c14,0xbc6c2fcc,0xbc57655b, +0xbc277711,0xb9ad78c2,0xbac5cb4b,0xbbd22872,0xbc29871a,0xbc878f14,0xbb2fbb52,0x3bb02c38,0x3bec086b,0x3b7e22f4,0x36afb4a9,0xbb8aa641,0xba9bcf12,0x3afbc6f1,0x3b5f7cf5,0x3b2a3a56,0x3a2d8376,0x3a6f0fea,0xbb303b21,0xbb82d32f,0xbb84cc5f,0xbb38bb20,0xbb29feca,0xbb28c4ce,0xbba0ab59, +0xbb7a1104,0xbb0ff5f6,0x3c043a2d,0x3be67cd4,0xb8c5dd94,0xbb41f8dc,0xbb2afbee,0x3bb1527a,0x3c1e1045,0x3c8a753f,0x3ca64c23,0x3bd6a145,0xbc01fc29,0x3c0e54de,0xbb1f137d,0xbbe2b5ea,0xbbcad4d1,0xbb28fc10,0x3adf43f8,0xb9fe1e45,0x3a80aad7,0x3a9e1e02,0xbaaf5978,0xbae5ecab,0xbaa8257d, +0x3ac6582d,0x3ab6118f,0x3ae5751b,0x3b071687,0x37bebb6d,0x3a801b15,0xb8219152,0x3996b382,0x3ac97ac2,0x3b491ba4,0x3ad8945d,0x3b08f399,0x398c9586,0x3b26496e,0x3b754e88,0x3b32567f,0x3aaf79f2,0x3b31c19d,0x3c668dee,0xbc21d7bc,0xbc81a8b7,0xbc021311,0xbc539498,0xbc052476,0xba96e413, +0xbb97cd73,0xbbcaeba2,0x39c836c5,0xbb800d0c,0xbb4bc66c,0xbb7b15bb,0xb92bdd03,0x3a2568fb,0x39d67f27,0xba3c756c,0xbaccbeb1,0xba3ae391,0xba1f048f,0x397c80c8,0xba5d4b67,0xb99a69cf,0xb993d8b5,0xb949e639,0xba927eab,0xb9bba1a0,0x3ae26d9a,0x3b4e3b23,0x3b97f0cd,0x3b9f29db,0x3b7a6f30, +0x3b9911a3,0x3c06f862,0x3be25c2f,0x3bdb4245,0x3c614068,0xbc2b3ded,0xbc90f61e,0xbc322f0b,0xbc3150bb,0x3a1460a5,0xbb5c41c7,0x3ad05ea3,0x3b7a6b1b,0x3b58952d,0x3b40f1ae,0x3b13f640,0x3b0703de,0x3a0ad7af,0xbac8f483,0xbb0a59c3,0xba80b8cc,0xba4cfe38,0xbab6aeeb,0xbb0d0857,0xbb4e7bc5, +0xbb94c261,0xbba52c40,0xbbaf5664,0xbb804a63,0xbb8d1b99,0xbb8fd6d2,0xbb73cbee,0xbb07eee0,0x3b071ff4,0x3bca4fc6,0x3c1408b0,0x3c1f9d43,0x3c29cacf,0x3bafbfbf,0x3b0f934c,0x3b3f3745,0x3b897b50,0x3bcf065b,0x3a2c010e,0x3b448060,0x3a86ce90,0xbb6081a4,0xba5bfe88,0xb940e71f,0x3af7f659, +0x3b4d244b,0x3b30a8ff,0x3a40a5a2,0x3a8168f9,0x3b24496a,0x3b260388,0x3b7db3ba,0x3a73b819,0xbb153f24,0xbb62d288,0xbb8a3e6b,0xbb716705,0xbab85474,0x3a2e6997,0x3afd35a4,0x3ad3328a,0x3b0978ef,0x3b0e09f3,0x3afcbc87,0x3a60a701,0x372c42be,0x3a99588d,0x3b840bcc,0x3c05e723,0x3c212ed6, +0x3c2a06aa,0x3c57a043,0x3c23ae72,0x3c0dbc21,0x3c1f0a1a,0x3bb61a66,0x3a73e680,0xbb7a2485,0xbb6cfdd6,0xbb635650,0xbb252270,0xb7f6bd80,0x3aebcc82,0x3a4765c0,0x3983fe35,0xba8d8ccc,0xba8c2cc2,0xbb343577,0xbb4e66a7,0xbb6b976f,0xbb4add26,0xbb5aa1d4,0xbb92c267,0xbb88fc2d,0xbb3af408, +0xba2acd64,0x39cdd072,0x3acea9e7,0x3ae58020,0x3b1603b9,0x3b386944,0x3b0dc665,0x3b01a3fb,0x3b1a37d3,0x3b5523ad,0x3b33999b,0x3b1d362a,0x3b074a77,0x3b57fb9d,0x3b8dedf3,0x3b5cd4b7,0x3b39485a,0xbb1f1ace,0xbb81218e,0xbbad1367,0xbbd13e67,0xbc10a717,0xbbdb6b51,0xbbdb9581,0xbbad74df, +0xbb99f735,0xbb81c85d,0xbb698427,0xbb7729f2,0xbb78782f,0xbb5d7f1c,0xbb474155,0xbb4bd9cd,0xbb57f5f4,0xbb2c4861,0xbac9a754,0xb946d952,0x39e8a96c,0x3ad976fc,0x3b096b18,0x3b1e35d8,0x3b086dc4,0x3ae36a9b,0x3af2bdad,0x3ae73db1,0x3b27897b,0x3b3c843d,0x3b4cfeec,0x3b31ce4c,0x3a45c270, +0xba8262ac,0xbaad33e7,0xbb01108c,0xbb18da16,0xbb1483b8,0xbb743cdb,0xbba85b29,0xbbe72f79,0xbbed2771,0xbbef0f85,0xbbf8d702,0xbbe71519,0xbbb9858e,0xbbb1e028,0xbb682d9a,0xbb4f39f5,0xbb236362,0xbb15675e,0xbb063f7a,0xbae1dafe,0xba4c3db1,0x36e73d2a,0x393ed83f,0x3a159e07,0x3ab30825, +0x3b126ef1,0x3b0d373f,0x3b262216,0x3b3b66eb,0x3b34371d,0x3b3c2779,0x3b237dfc,0x3aca4295,0x3a0c1953,0x388aabea,0xb99d93c3,0xb9d12e8f,0xbaa16d3d,0xbada4715,0x38c3ba03,0xb9280ae5,0xb9441b61,0xb7d7e425,0x39f118a1,0xb91828f8,0xba15c513,0xbaabc5e0,0xba85725f,0xbaa8168d,0xba9e42ac, +0xbad5d428,0xbae972ef,0xbade7672,0xba847ac3,0xb9c576ea,0x395aa1f6,0x39cbd58d,0x3a8de29f,0x3aad215a,0x3a9d76fc,0x3a6064d2,0x3a061a57,0x39f04b7e,0x3938da59,0xb94349f7,0xb94f3217,0xb9f6d0e6,0xb963c2d6,0x3947da9d,0x3a40d14d,0x3a5ca23f,0x39e85fe3,0x398a5769,0x391af091,0x39011746, +0xba9a2775,0xba99e227,0xba9e8e39,0xbab8400e,0xbac9f851,0xbb192623,0xbb13b742,0xbb147b6d,0xbb021ebf,0xbaebe306,0xbac9b880,0xbaa10db9,0xba653118,0xba48bed6,0xba711fb5,0xba87dd91,0xba0fc693,0xba17f529,0xba29c6b2,0xba2de03c,0xba30770a,0xba1b8811,0xba0617fe,0xb9e90f56,0xb9bfb96c, +0xb9965b79,0xb9527575,0xb993e467,0xb9d1cf69,0xba2c962e,0xba6e69ef,0xba8ac9dd,0xba8467e2,0xba73f53d,0xba85d138,0xba977dc8,0xbac5bd33,0xb9827f46,0x390c39c5,0x3844c017,0x38f3da19,0x389d7d92,0xb85436c4,0x3796d234,0x371d5759,0x395ea637,0xb9065306,0xb95c9fb6,0x37b18bd9,0xb9081bce, +0xb94ff900,0xb9641eb8,0xb8d718e7,0xb93d4f3d,0xba5e74d6,0xba238bf5,0xba1deee7,0xba0f4311,0xba18e19b,0xba0f4347,0xba0fd1ee,0xb9cf209e,0xb9231abc,0x39bfb1bc,0x39938918,0x398fa78d,0x389b47b8,0xb83d35be,0xb9343069,0xb9d1544c,0xb9d7f316,0xb959e7c0,0x3905eff2,0x390636cf,0x3a0032e1, +0x38d3aab6,0x3a26c5af,0x3a5f468e,0x3a15cafb,0x3a1270dc,0x39c1dc6e,0x3a7742b7,0x38c6fb4d,0x39cba3da,0x3a507803,0x398c57d0,0x3928c018,0x3913105b,0x39905dd6,0xb8313c4e,0xbae6e722,0xbaafcd70,0xbab5a0d8,0xbaa49198,0xbad30d0c,0xbae04d77,0xbad90206,0xba533b18,0x3946e630,0x3ad8114c, +0x3ab42849,0x3a92a9be,0x39c63306,0x3a31eacb,0x387642ec,0xbab3ef9d,0xbaf29594,0xbaf33201,0xba4e3f0f,0xb6a21f35,0x3ae205bf,0x3a37d736,0x3acf2990,0x3acc6cf5,0x3a89a0e4,0x3a92e3b3,0x3aa030c9,0x3b180f79,0x3a6fd653,0x39a2535a,0x3afa8c77,0x3a346bba,0x3a6031bd,0x3a014678,0x3a0b7500, +0xb82e1def,0xbb4847d4,0xbb1febdb,0xbb31123d,0xbb2925eb,0xbb503cd1,0xbb45eb07,0xbb3630a2,0xbad14242,0x383a8fc1,0x3b606bbd,0x3b47fd0e,0x3b2de3ca,0x3a906e39,0x3a8ac9f5,0xb88a3713,0xbafc8a2f,0xbb1cb1ce,0xbab7bb3c,0x3a4de8c4,0x3aa25ad3,0x3b08d4ef,0x3a20ddc9,0x3b20f5b2,0x3b4347dd, +0x3ac6a8d2,0x3b24d470,0x3b070665,0x3b6fc7c3,0x3b3ff889,0x3b8418e1,0x3bb91c44,0x3b119097,0x3af10fae,0x3b200e98,0x3a86b580,0x3a15d3d2,0xbb882794,0xbb51bb7f,0xbb61ca07,0xbb59155d,0xbb9bca9c,0xbb9f47b5,0xbb928d9d,0xbb0d8264,0x3a4363f0,0x3bcca1e1,0x3b951b99,0x3b843aa8,0x3a9a2f44, +0x3b3a697c,0x39ff6b7e,0xbb6bc3ec,0xbb967477,0xbb8eb7ad,0xba5d95f6,0x3a8f0b18,0x3b9ffac2,0x3af1b086,0x3b5ec824,0x3b48c24e,0x398baafb,0x3b0ec4f1,0x3b8d7d0d,0x3bc4dbc0,0x3bc72500,0x3bea87f7,0x3c04bbaa,0x3b588ed7,0x3b48885e,0x3b83d476,0x3a67a55f,0xb98886a8,0xbb99dde6,0xbb8126f5, +0xbb9ad8d9,0xbba3ad44,0xbbd71f1e,0xbbcd242e,0xbbb97e49,0xbb483436,0x3a8074a6,0x3bfd195c,0x3c0698c5,0x3bbfdad8,0x3b16592e,0x3b14c024,0x39405030,0xbb4c0ac9,0xbb89e999,0xba529c82,0x3b596526,0x3b8c7daa,0xbc0be123,0xbbe9c96d,0xbb175973,0x3b073796,0x3c18d88c,0x3b26fd4f,0xbb5975dc, +0xbc03dc35,0xbbdeadeb,0xbad4c0a7,0xba996b6e,0x3c1349b0,0x3c0ba777,0xbb91571e,0x3b268e4d,0x3af66b43,0x3b378215,0x3a8681fe,0x39379a6a,0x3a332b9c,0x3b76963a,0x3b86e36f,0x3b441d2f,0x3a85a372,0xbb2b9b43,0xbc1a570a,0xbc33441e,0xbb9da9a4,0x3c407b44,0x3bb9c538,0x3bab5e56,0x3bd535e6, +0xbbfb3b0b,0xbc65f9d5,0xbc51b93e,0xbc3a87ab,0x3b8d17ad,0x3b2676d7,0xbb693dbe,0xbc190eba,0xbc781bb8,0xbbbfacea,0x3ad1c58c,0x3bc0677f,0x3b9348d5,0x3aa0888b,0xbb958bc0,0xbb133034,0x3a7dba13,0x3b3cdde6,0x3b0bbd10,0x39c4d736,0x39634231,0xbb334c35,0xbb7c648f,0xbb974ea0,0xbb328cc4, +0xbb2a8648,0xbb2f9ee3,0xbb9e26fc,0xbb55fb4f,0xb9bf51b3,0x3c1ba13b,0x3bfae6fe,0xb9f8b465,0xbb3b6811,0xbb06de70,0x3bcd3a6a,0x3c360c64,0x3c87273c,0x3c7ca5da,0x3c05aae8,0xbc281e07,0x3a095d4f,0xbb2d9a85,0xbbb2c956,0xbbc7e760,0xbb116830,0x3abeb7a7,0xbb0c5e0e,0x39039562,0x3a248f86, +0xba66c845,0xbafd9882,0xbad958a8,0x3a92ef9f,0x39cbcee1,0x3a87466e,0x3af665c2,0xb80f4b70,0x3a3c42d8,0xba62c99c,0x3a342c6e,0x3b0c3e67,0x3b448c0e,0x3ac0fbbe,0x3ac9f8c4,0xb9caf2e0,0x3b2a8b70,0x3b860245,0x3b19f485,0x3b799145,0x3b784239,0x3bc66f3f,0xbc124fe4,0xbc5b9f7a,0xbbdfae4d, +0xbc53f94d,0xbc2b65cb,0xbbc34f4e,0xbb95da45,0xbb975760,0x3a492f07,0xbaeb4c93,0xbafee57c,0xbbaa175b,0xbad42540,0xba019166,0x3a08367b,0xb9cfbf3c,0xba921482,0xba7b29ef,0xba490572,0xb9200286,0xba1ca214,0xba314fae,0xba166df0,0xba4317e1,0xba37f503,0x39e4fd1e,0x3ae62f46,0x3b5cf090, +0x3b8f1303,0x3b84889f,0x3b3cd0e2,0x3b8a3924,0x3c03f1f7,0x3c074f79,0x3bd40127,0x3bae13ef,0xbc24744b,0xbc788424,0xbbebbedf,0xbc329a5c,0x3b904389,0x3b10abec,0x3b49bf02,0x3b901942,0x3ba7c7cc,0x3b232788,0x3acc6eb7,0x3b256c7a,0x3a608bbf,0xba7863bf,0xbb0b98a9,0xba148f5e,0xb9023a4d, +0xba9d6cba,0xbaaf2caf,0xbb1f9902,0xbb9b2491,0xbba511dc,0xbbade937,0xbb861fc8,0xbb8fa861,0xbb914583,0xbb80717f,0xbade2a8a,0x3b068664,0x3bcf99e1,0x3c0a5ec0,0x3c0f86f5,0x3c137edb,0x3b2c570f,0x3a0b6a9f,0x3b5e93c8,0x3ba7cc97,0x3bf77f4b,0x3b170f33,0x3ba8c1b9,0xbbc458ba,0xbbfbc037, +0xbb6a334e,0xbaaa3ab6,0x39c4f25e,0x3b379798,0x3b368411,0x3a7942cf,0x3ac21da6,0x3b386828,0x3b10ba20,0x3b6de0df,0x3a96f3ad,0xba9c57e7,0xbb64cb5c,0xbb998f88,0xbb809576,0xbb1e1ea8,0xb9a928e2,0x3aa79ef2,0x3a9c4b2b,0x3b038185,0x3ae573ac,0x3b14f023,0x3b02ffd4,0x3abf0ca2,0x3b77fd8a, +0x3bcee435,0x3c26a909,0x3c346ba3,0x3c2e5d74,0x3c3c0af0,0x3c2016db,0x3bd7a900,0x3b6c8da5,0xba9b0336,0x3b7eb980,0xba293ed3,0xba57b80e,0xb9af6f74,0x3ac4e714,0x3b42fcac,0x3b8f5e56,0x3b3c8742,0x3b218c25,0x3a5bd98e,0x38230a42,0xbaeeb68b,0xbb383224,0xbb638513,0xbb45c8dd,0xbb50bf72, +0xbb7d0d77,0xbb92f234,0xbb6960aa,0xbaf166b8,0xb9cf0584,0x3a766e49,0x3a8e159f,0x3b07fa53,0x3b2b8b12,0x3b06d174,0x3acee19f,0x3ae92af4,0x3b1cba27,0x3b0b4834,0x3b0b137a,0x3b22ecf5,0x3b76c423,0x3bb645f0,0x3bbe2938,0x3bb79c0e,0xbb041713,0xbb8754fd,0xbb97b94a,0xbba7816a,0xbbe60c1b, +0xbbad42f6,0xbbab2cc0,0xbb84a26c,0xbb62fb0d,0xbb3efbd5,0xbb2cdc19,0xbb516091,0xbb5e4f72,0xbb6540f5,0xbb48ea25,0xbb4a990d,0xbb462eaa,0xbb406fe1,0xbb16dbbb,0xbab11351,0xba0299ec,0x3a654ae3,0x3ac0a5df,0x3aea2dca,0x3ab83a54,0x3a7b661e,0x3a5fd3ce,0x3a2b963a,0x3aa285e2,0x3aee0fa9, +0x3b10866d,0x3b114766,0x3a9a12a6,0x37d25b6c,0xb8d1a1c2,0xbaca8a87,0xbb2ebcb8,0xbb3c3895,0xbb8a9942,0xbbba8fa6,0xbbf884a4,0xbbf51407,0xbbec702e,0xbbecb7ac,0xbbdfeadf,0xbbb7156e,0xbbacaaa0,0xbb6fd9e8,0xbb54ba21,0xbb336263,0xbb168349,0xbb0d5eb8,0xbaf5ecd2,0xba9f340b,0xba0f4044, +0xba5702fc,0xb974f216,0x3a40b561,0x3aee1765,0x3ad44e8b,0x3af5cccc,0x3b121bd7,0x3b11cd55,0x3b1e0f07,0x3b061483,0x3aaf2b6d,0x39de0570,0xb8ec2b5f,0xba156bd7,0xba491954,0xbab03826,0xbae9aece,0xb9b9d7ca,0xba4a4075,0xba22da73,0xb9a8626c,0x39c161ea,0xba2a497f,0xbaa38d42,0xbb104e33, +0xbaf08238,0xbafef906,0xbaf21327,0xbb0e0853,0xbb16d422,0xbb0d649b,0xbacbd40b,0xba7d698e,0xb9913aa8,0xb945c784,0x3a3dcafb,0x3a2dca61,0x3a3b4645,0x39f5b00c,0x398d9c38,0x39f69fd0,0x39ff8b7f,0x39bfe4f0,0x399c8273,0x3918f4d4,0x39ad737e,0x3a4c6af4,0x3aa90d61,0x3ace452d,0x3a779db2, +0x3a35dbb9,0x392686f5,0xb9666ea0,0xbae8f132,0xbaf75d77,0xbaff8cfd,0xbb0fb075,0xbb15e442,0xbb4bfb97,0xbb3c10a1,0xbb36ac36,0xbb2288e4,0xbb194c40,0xbb089397,0xbae7cf65,0xbab77d60,0xbaa74368,0xbac1085d,0xbad1733c,0xba86a427,0xba933423,0xbaa1a03b,0xbaa57c53,0xba9c531b,0xba8ea5e9, +0xba81866a,0xba779846,0xba693154,0xba4cb990,0xba38183c,0xba463f83,0xba59e486,0xba8bdfa3,0xbaa8e153,0xbabad1fe,0xbac6ce0e,0xbabef302,0xbacf4b64,0xbae1e156,0xbb21b0d6,0xb8d41dc5,0x39a82246,0x393b9ab5,0x39623fd3,0x392b9265,0x38e7e5dc,0x3805c290,0x3776b3f5,0x399ac6b0,0xb8ba2df5, +0xb95aa54f,0xb8df73eb,0xb8ab7381,0xb8e21146,0xb94c7925,0x38070563,0xb6591c28,0xba21d358,0xb9f1997f,0xba0200f0,0xba03378a,0xba00c6cd,0xb9e00515,0xb9d80c62,0xb92f6fd0,0x38b6fd1e,0x3a1ddc0c,0x39ccd8bf,0x39ab60e1,0x38911cf5,0x37c380e1,0xb860807c,0xb98c5dc4,0xb996fb9c,0xb8ff3caa, +0x3968e86b,0x39909479,0x3a2ca615,0x381fa016,0x3a3733b4,0x3a6e3ec4,0x3a78d5df,0x3a0848d3,0x397d339d,0x3a6ead71,0xb9a3c3d6,0xb8765be9,0x392b8076,0x39840ab5,0x39ba0015,0x38c0b196,0x3a2d3236,0x39d7ddb0,0xbaa257f6,0xba8f7154,0xbaa8b339,0xbaa84a7e,0xbac7e1d1,0xbac8cc72,0xbab4d7ed, +0xb9ba501b,0x3a32448b,0x3b136131,0x3ab04379,0x3a71b63e,0x396c595e,0x3a5c419e,0x39ac4f1b,0xbaa62232,0xbad401dd,0xbac05fb1,0xb9b69bb5,0x39cbd49a,0x3b128865,0x3a7bee6b,0x3ad5c881,0x3ac3ccc0,0x3ad0115d,0x3a59e507,0x3a44a36c,0x3b095aff,0x39cd5add,0xb9fc47dc,0x3a270f14,0x3a027377, +0x3a80bd42,0x397d751c,0x3a8131db,0x3a12467d,0xbb0d1ab6,0xbb087cb0,0xbb2b6d92,0xbb32c0a1,0xbb49fc70,0xbb31aa19,0xbb1a68f4,0xba36edca,0x3a7e185f,0x3b910620,0x3b4697b0,0x3b1c507c,0x3a30bfc2,0x3a93e422,0x3997d437,0xbad191f0,0xbafbbebd,0xba8b4cc5,0x3a97b5ef,0x3ae54fb0,0x3b14cb10, +0x397e2c37,0x3b16f1b3,0x3b3f4ef7,0x3b262a05,0x3b15deb1,0x3ac33e22,0x3b6637c8,0x3ac34bc9,0x3b28491f,0x3b6b5701,0x3b02c461,0x3b15b150,0x3af94e4b,0x3b020778,0x3ad6bfdf,0xbb486fef,0xbb34cd9d,0xbb605cc6,0xbb6dba44,0xbb99afd8,0xbb92bf8b,0xbb81efd7,0xba558b2c,0x3b0d5394,0x3bff02c2, +0x3b89f7c1,0x3b59a998,0x3a04312f,0x3b459a93,0x3a8e5225,0xbb651473,0xbb8034dc,0xbb5d2597,0x392a26bd,0x3afeef27,0x3bc7980b,0x3b1e5b31,0x3b675a5a,0x3b4509c2,0x3ad42f00,0x3ace67bb,0x3b5479bb,0x3bc0e459,0x3baffc6c,0x3bc9b355,0x3bd6c105,0x3b50575a,0x3b52c5f7,0x3b6371b4,0x3aef4380, +0x3a4e9222,0xbb7d0ba6,0xbb646be9,0xbb9f5d05,0xbbb35083,0xbbd54026,0xbbbd5e57,0xbb9f619b,0xbaba6778,0x3b389fab,0x3c1dfd4f,0x3c039149,0x3ba1f604,0x3aaa7f08,0x3b14d910,0x3a4d008a,0xbb1d3c85,0xbb4eae92,0xb96e4ace,0x3b7affd3,0x3ba9706a,0xbc2a3b68,0xbc113915,0xbb8ec222,0x38c5c56b, +0x3bf7ac60,0x3b80d270,0xbaa9db8f,0xbc0411a7,0xbbf6d732,0xbb1559d2,0xba6fe772,0x3c13cc20,0x3c08adfd,0xbb7627d9,0x3afc75cb,0x3a89b7af,0x3b9119af,0x3b2383b7,0x3adfd791,0x3b11b312,0x3bbb39cb,0x3baab6eb,0x3b640b5c,0x3994be41,0xbb69000c,0xbc254179,0xbc228d5a,0xbb388190,0x3c4f7f38, +0x3bcb0274,0x3baf84e1,0x3bc8c2f5,0xbbfe01dc,0xbc5590f4,0xbc40fe31,0xbc42f293,0x3c0108d5,0x3bca3bf1,0xba5d23ad,0xbc073a2b,0xbc6421f8,0xbc0bb2c5,0xbafc46b6,0x3b8926a1,0x3b95bce6,0x3b073b53,0xbb91cae1,0xbb4ee8c6,0xb7528d95,0x3b217871,0x3ac1bfb4,0xb72a0935,0xba20f2de,0xbb14db72, +0xbb461acf,0xbb92b8f6,0xbb160171,0xbb23649b,0xbb3173b0,0xbb912127,0xbb1d14d5,0x3b0b112d,0x3c2757d8,0x3bf1c77a,0xba59391a,0xbb4500d5,0xbad73dd6,0x3be688bd,0x3c44d269,0x3c7b56b9,0x3c24abc4,0x3c0c10e4,0xbc45949b,0xbc08dfa4,0xbb25fac7,0xbb489c63,0xbbd99c54,0xbad7307a,0x3aa2ae48, +0xbb538026,0xb9f03f6a,0x3933f9cd,0xba089d2f,0xbaeef1ac,0xbae8834a,0x3a101914,0xba019b15,0x39aba0b0,0x3ada42c2,0x3824d78c,0x39acc561,0xbad73a23,0x3a80d98b,0x3b1e3912,0x3b29dfd6,0x3aa938a5,0x3a8e6fe9,0xb9b6ed46,0x3b2a6845,0x3b80dd1c,0x3a960f88,0x3bcec5ec,0x3bb294ca,0xbaa3152a, +0xbbdba4f2,0xbc223693,0xbbcc67e6,0xbc473b8e,0xbc427d23,0xbc2a6a77,0xbb818875,0xbb271c22,0x3a1f7a3b,0x399ef9c2,0xba3b6fdb,0xbbbc6ec8,0xbb2b50a6,0xbaa7e712,0x39dfb3dd,0x381da29d,0xba20a3bd,0xbaa88974,0xba588133,0xb9ee01c0,0xb9925cbf,0xba9b48a6,0xba9b5c2e,0xbad9740c,0xba075b2e, +0x3a6d4a05,0x3ac7ba29,0x3b5a5091,0x3b820c6c,0x3b5d145b,0x3b11cd38,0x3b6c072d,0x3bd73261,0x3c1b6bcd,0x3bd96463,0xbb2f4d93,0xbc0eef2a,0xbc4001d0,0xbb928419,0xbc238c97,0x3c0d884a,0x3c0ad1b5,0x3ba30728,0x3b9d959e,0x3bd0dad4,0x3af4f475,0x3a7f857e,0x3b420827,0x3a9a809f,0xb99c24c2, +0xbafee3e2,0xb9f5c304,0x3928b56b,0xba53c001,0xba4407f0,0xbafba2f9,0xbb9d0c57,0xbba11588,0xbba74ead,0xbb8e61ea,0xbb8ace0a,0xbb8973e3,0xbb709317,0xba537a0b,0x3b1ae594,0x3bd4c0bc,0x3bfc7563,0x3bf49f06,0x3be5d8c2,0xb9c80f22,0xbacdd9a3,0x3b45aff4,0x3b9a66ef,0x3bf0da3e,0x3b5bda3b, +0x3bea7b83,0xbc3f057c,0xbc330cb4,0xbbc01063,0xbaf50667,0xba271a8d,0x3b18f1da,0x3b25b238,0x3a9f25fb,0x3af5dd94,0x3b43e971,0x3af0c5d2,0x3b4027a4,0x3a87ad7f,0xb8d23c8d,0xbb5db0b3,0xbba0c26b,0xbb842df5,0xbb63974b,0xbad67be8,0x38a281d4,0x3a0654bb,0x3ae58775,0x3ac1155f,0x3b1a0490, +0x3b3e4986,0x3b62ed53,0x3bc0c82c,0x3c0083ea,0x3c39fd74,0x3c3e6f1d,0x3c2d9f24,0x3c1af705,0x3c1c593a,0x3ba48a0d,0xbac1697e,0xbbdc81ee,0x3bd359af,0x3b35a44d,0x3b10f582,0x3b27c405,0x3b9e4095,0x3bb08a4a,0x3bcdc1c6,0x3b9a5f52,0x3b8c95af,0x3b250964,0x3a8a9cb3,0xba556617,0xbb1bd84b, +0xbb5c17f3,0xbb4a8b2b,0xbb4ddf82,0xbb58e5fb,0xbb8e77f0,0xbb765117,0xbb32e5c3,0xba8a78db,0x39a67d8e,0x3a22263c,0x3ae1fb91,0x3b11ac6b,0x3ad01a29,0x3a939121,0x3aaff56f,0x3ad6dbd3,0x3acfdd15,0x3afbb765,0x3b417789,0x3b8271cf,0x3bc82e2f,0x3beeb0c5,0x3bfd85d6,0xbab370ef,0xbb7cefc3, +0xbb6f6e34,0xbb6e7260,0xbba92881,0xbb79f7b4,0xbb702f61,0xbb34f43e,0xbb157cd7,0xbb003982,0xbafecc63,0xbb30e934,0xbb4b49de,0xbb785862,0xbb5a5f41,0xbb58ab68,0xbb4ad138,0xbb5747c0,0xbb4371c0,0xbb1a923b,0xbaac36ef,0x385ff67f,0x3a4b1a65,0x3a855ef0,0x3a38ca26,0x394fad2b,0xb87b6c20, +0xb9c011ad,0xb81c4efd,0x3a41d8f8,0x3aa22458,0x3aded861,0x3ae0001e,0x3ab18d45,0x3aba348b,0xba4ec398,0xbb35a65b,0xbb5c25bb,0xbb982c51,0xbbc52d18,0xbbfcb06b,0xbbf23ee9,0xbbe34ba2,0xbbdbc634,0xbbd75b51,0xbbb5f56a,0xbbada7e2,0xbb80ce50,0xbb68db68,0xbb51771b,0xbb2b720e,0xbb2b94c0, +0xbb212fe8,0xbb0129fb,0xbabe2ce9,0xbaed7171,0xba924dda,0xb8e31b30,0x3a878021,0x3a64d07f,0x3a8e81db,0x3acab38a,0x3ac35e25,0x3ad98be3,0x3aa74b4a,0x3a75177f,0x399bde64,0xb8d62398,0xba228821,0xba7913b7,0xba9a9613,0xbae10354,0xba905037,0xbad1e439,0xbab10803,0xba804c62,0xb9810d0f, +0xbacbfc21,0xbb112692,0xbb5775fb,0xbb36d9a6,0xbb32bf6f,0xbb27d848,0xbb364d1f,0xbb3c8526,0xbb2fea38,0xbb0fc498,0xbad77e80,0xba778dfb,0xba6b8896,0x38887e6a,0xb97c23dc,0xb814f000,0xb92007be,0xb93cba1c,0x3956988d,0x39f05801,0x3a0e133d,0x3a0b7d99,0x3a14c561,0x3a3ae1a4,0x3a940f77, +0x3ac5a3a3,0x3af4a827,0x3a8a800d,0x3a4680cc,0xb928e3f6,0xba611f63,0xbb11b67e,0xbb20392a,0xbb282941,0xbb3a9919,0xbb3f1de1,0xbb6e0688,0xbb5a4d54,0xbb55cf0a,0xbb42bd81,0xbb3d4bac,0xbb2e30a8,0xbb1a23b5,0xbb022138,0xbaf22f8e,0xbb03b8cf,0xbb0a6345,0xbad1790a,0xbade0064,0xbae9794e, +0xbaec35d6,0xbad94c44,0xbac9892f,0xbaba15d1,0xbab4bf62,0xbaada532,0xba9c38d4,0xba96830d,0xba9dbab4,0xbaa36355,0xbabbd1e7,0xbace2e75,0xbad924e0,0xbaf5fe84,0xbaf2f8ca,0xbb0345a8,0xbb0be23e,0xbb541a51,0x3889ede3,0x39fc6f2b,0x39a14f8c,0x3986213c,0x393a43ad,0x396256e4,0x37cf377c, +0xb801509f,0x399ef7db,0xb8f54bc8,0xb98b6a8e,0xb991ab02,0xb8b5f154,0xb885878f,0xb93be2c0,0x38f04cb7,0x391298ee,0xb9d0d5d9,0xb9acf7e9,0xb9cf9340,0xb9d2a9ed,0xb9bdf16a,0xb98c98e3,0xb97073c7,0x38ae7c9e,0x39b3776f,0x3a580889,0x3a071c1e,0x39cec385,0x38a5ce6a,0x38fba78e,0x38be0e62, +0xb90b0820,0xb8fc131f,0x37955adc,0x39b9e8ae,0x39db45e7,0x3a50ade0,0xb7a278ec,0x3a26b4bc,0x3a6d36be,0x3aa2f2f4,0x39d2d17c,0x37d090b1,0x3a534140,0xba3be03c,0xba101d89,0xb9fa660f,0x392e0445,0x39fe6ca4,0x38abf252,0x3a76315c,0x3a50c68f,0xba2b792a,0xba5bd5dd,0xba9e75d1,0xbaa4c260, +0xbab243bc,0xbaa74b4b,0xba845947,0x390b9f8b,0x3a979b87,0x3b323c4e,0x3ab601f3,0x3a600e0e,0x3919cb7a,0x3a8c3053,0x3a2b0d31,0xba9583b4,0xbaa494f8,0xba7de59c,0x392bbffc,0x3a47ec2b,0x3b268c51,0x3a8d57ed,0x3abe01ec,0x3aa5a4c1,0x3b049c0e,0x39d0093e,0x3907e825,0x3ae5bebb,0xb98f9a2b, +0xbaa7c0c8,0xba2fb6c9,0x3981e150,0x3a854f58,0x38ca8ecf,0x3aacf677,0x3a8ae494,0xba8fead2,0xbadcd01f,0xbb21821b,0xbb349d82,0xbb393ffe,0xbb1426c4,0xbae66a0d,0x397885bf,0x3af5c944,0x3ba9b429,0x3b477773,0x3b1094b3,0x399e2738,0x3aa94e87,0x3a3a2561,0xbaac863b,0xbaa553a0,0xba02b2eb, +0x3ad66283,0x3b0b22d6,0x3b17d953,0xb93eff29,0x3af9525e,0x3b2f767c,0x3b5dbac5,0x3aee5991,0x3a38031c,0x3b4a139d,0xb72b3438,0x3a78fe7e,0x3aa548f5,0x3ad8c774,0x3b2a1c7a,0x3ac476b4,0x3b34bffd,0x3b261933,0xbad2d3b7,0xbb13730a,0xbb5a1f2c,0xbb7b20ad,0xbb8f9679,0xbb80379b,0xbb542f38, +0x3a1ac53d,0x3b6563e0,0x3c0f9fa4,0x3b82bb95,0x3b3e7091,0x37e5e964,0x3b5915d2,0x3ae98d6b,0xbb5e016c,0xbb3f4f2c,0xbb0aedaf,0x3aa9383b,0x3b2da987,0x3bd9ecbf,0x3b2c5a3b,0x3b53296b,0x3b2ac49f,0x3b35ff2b,0x3a436a63,0x3b0110b7,0x3bacb387,0x3b8cb197,0x3b9d494b,0x3b9007c1,0x3b47516a, +0x3b63fd40,0x3b439550,0x3b2caf0d,0x3ae76fb2,0xbb26471c,0xbb364bfe,0xbb9f81b8,0xbbbbd7c3,0xbbc96bbe,0xbba3acfc,0xbb76f698,0x399c3766,0x3b953f93,0x3c33ae5e,0x3bfe5d34,0x3b89abf0,0x39da0445,0x3b1f9caa,0x3abf19b8,0xbaefdc72,0xbae97388,0x3a4d4fdb,0x3b927449,0x3bb7dacd,0xbc3bf6a6, +0xbc2169a6,0xbbc12f29,0xbad290b8,0x3bc2aa56,0x3b947db4,0x3911dc1e,0xbbfa1fb0,0xbbf2ea4a,0xbb1e56fa,0xba0c0712,0x3c099a11,0x3befdbe6,0xbb2d342a,0x3a9687a5,0x395073d2,0x3bb64f4d,0x3b81ae56,0x3b6f72a3,0x3b9d9ec2,0x3c0006a9,0x3bc952d5,0x3b7891b7,0xba60252d,0xbb9c9403,0xbc2e99d7, +0xbc0f376d,0xba3bd88e,0x3c5a5cb3,0x3bdd9347,0x3bb0ef63,0x3bb9494f,0xbbeeeda5,0xbc3d854c,0xbc2a4c91,0xbc407a3f,0x3c20a90f,0x3c13dbe5,0x3af12d4c,0xbbd90b49,0xbc506362,0xbc285823,0xbb94d152,0x3b1ca624,0x3b852f00,0x3b1962e9,0xbb815abc,0xbb7557a4,0xba67f21a,0x3b0e9102,0x3a38a1b8, +0xb9e5141a,0xbaba8ffe,0xbab76b81,0xbae26dd4,0xbb74fcec,0xbad57ba9,0xbb12e864,0xbb1ebd63,0xbb7cff7e,0xbab2ce16,0x3ba80e80,0x3c264f3e,0x3bca9898,0xbaf1b35f,0xbb5247ea,0xba8a4c4c,0x3c005c2f,0x3c4fa7cb,0x3c65bd88,0x3bac0acc,0x3bf9a33d,0xbc53e148,0xbc87353a,0xbb3119ab,0xba103dbb, +0xbbfaa933,0xba8d3296,0x3a8cbfee,0xbb72059e,0xba572f1b,0xb98d8226,0xb953a9c8,0xbac4a3c5,0xbadbf049,0xb8b10cc6,0xba9b1000,0xb98c4ff3,0x3abdd99a,0x398c741a,0x39063914,0xbaf98c15,0x3a9ce5c2,0x3b186006,0x3b0668a1,0x3a800fc3,0x3a2ad0cf,0x39373e67,0x3b17fb74,0x3b541df7,0xb9ba0a12, +0x3c04a98d,0x3be1f3bc,0xbbda4989,0xbb92a210,0xbbe60bcd,0xbbc5f02e,0xbc307fcd,0xbc48c822,0xbc66a66a,0xbb603a35,0xba53515e,0xb9684b31,0x3b0a6079,0x3a20e028,0xbbb8ec85,0xbb4a3b2c,0xbada2967,0x395dea89,0x39f49508,0xb9392e22,0xbad1ede0,0xba50d1ca,0xba1c70e1,0x38d9c926,0xbac9f973, +0xbaec1b36,0xbb2001cb,0xba0bd08a,0x3a7cb4e3,0x3aa252f1,0x3b4b1f52,0x3b623956,0x3b28e789,0x3add1ec3,0x3b33f922,0x3b8efb4a,0x3c27ca8e,0x3bde5ec7,0xbc0f5fa9,0xbbfbdb52,0xbc17ab05,0xbb436a40,0xbc0ba6c3,0x3c4ac8a4,0x3c7154ad,0x3bfa36cf,0x3bb1db02,0x3bdbe823,0x3aa33fbb,0x3a216dab, +0x3b5429a8,0x3ac66ec4,0x39c678ce,0xbace7e45,0xba214d28,0x39097993,0xb962158c,0xb9d159a1,0xbacd90d2,0xbb967fd5,0xbb994cdf,0xbb9f1a4b,0xbb939f3a,0xbb805fa8,0xbb73727d,0xbb409c2d,0x3905d40e,0x3b36f281,0x3bdab042,0x3be09979,0x3bc3d63d,0x3b92e9cf,0xbb340030,0xbb4d04a3,0x3b2674fd, +0x3b61af34,0x3bc4f0c2,0x3b66fb8f,0x3c084993,0xbc79b1f8,0xbc51d781,0xbbf938d4,0xbb111bf8,0xba9ba88f,0x3ae22b05,0x3affc326,0x3abb645d,0x3b04015c,0x3b3c5b46,0x3ac010ad,0x3b01ae6e,0x3a2db643,0x3a2785e1,0xbb530f33,0xbba0841b,0xbb8a11bc,0xbb8fcd8f,0xbb423306,0xbab7e2a3,0xb9df827d, +0x3a9a3cc6,0x3a979cb7,0x3b1e98aa,0x3b77ba4f,0x3ba9b5c8,0x3bec0272,0x3c0ca517,0x3c399b12,0x3c40db8a,0x3c291eef,0x3bf41e61,0x3c0a89d9,0x3b5f28ef,0xbb92de50,0xbc28fc65,0x3c03fc66,0x3bb92db7,0x3ba6005b,0x3ba3ff39,0x3be47d59,0x3bdef11e,0x3bec9ab3,0x3bc489d4,0x3bb5e085,0x3b7c4ce9, +0x3b03b6f6,0x393b4065,0xbaede108,0xbb4f8dd3,0xbb50a56e,0xbb4d8b1b,0xbb40bfa9,0xbb7d6d1b,0xbb680d4b,0xbb51d47b,0xbac6bc24,0xb992a138,0x39592c40,0x3a9d7724,0x3ad0ad64,0x3a80d5ad,0x3a31ed6a,0x3a8aa7cd,0x3a9be7ce,0x3abba361,0x3b06dcc0,0x3b63b08a,0x3b8821ed,0x3bc7f52b,0x3bfcaf7e, +0x3c1058ac,0xba46efe6,0xbb594480,0xbb2dbb15,0xbb138bcb,0xbb6e4144,0xbb236219,0xbb110e1f,0xbac44d70,0xba98a86e,0xba8748b2,0xbaadcedf,0xbb0f94f6,0xbb3f05e6,0xbb86e67e,0xbb740d22,0xbb6e1ac2,0xbb5b6098,0xbb681e4f,0xbb5f3543,0xbb448c22,0xbaef498a,0xba2c8cc6,0x38c57584,0x395d7147, +0x361251b5,0xb9f57397,0xba56a3a4,0xba95e406,0xba7ff804,0xb8ab0dcf,0x39fae6ca,0x3a9c1566,0x3b07c22b,0x3b24ebb5,0x3b329159,0x3865852a,0xbb31fbe8,0xbb69cc24,0xbb9c6508,0xbbc661b3,0xbbf5003a,0xbbe4b6dd,0xbbd165af,0xbbc23744,0xbbc8a202,0xbbb099c4,0xbbaf8ea2,0xbb89da6d,0xbb831ffc, +0xbb786064,0xbb4fac2e,0xbb553248,0xbb4fe99b,0xbb35e600,0xbb1b7fc1,0xbb2734f1,0xbaf9052f,0xba8239c0,0x382e2916,0x381a23f4,0x3994c770,0x3a5ee017,0x3a30d592,0x3a448c44,0x39a08f6f,0x39b50327,0x3871822d,0xb7cbf88c,0xba150d1c,0xba8ca4a3,0xba8487b1,0xbad5903e,0xbb079698,0xbb2bbb94, +0xbb168fb5,0xbaf92ed9,0xbaa05e80,0xbb3076f0,0xbb5abfd2,0xbb91a217,0xbb7943ba,0xbb6994dd,0xbb582b6e,0xbb60882f,0xbb6095f4,0xbb530af0,0xbb3a5189,0xbb190692,0xbae2544d,0xbada5a27,0xba4be943,0xba9f7731,0xba687ee1,0xba63488d,0xba410b01,0xb98a8d47,0x3909fca4,0x39c7b6f0,0x39eabe8a, +0x3a32416d,0x3a538708,0x3a91ae00,0x3aa89f47,0x3acbc81d,0x3a2a5d29,0x39ce2140,0xba49de3b,0xbae01d9f,0xbb234518,0xbb368270,0xbb42f416,0xbb568402,0xbb595f81,0xbb7cec96,0xbb69c2e4,0xbb69bc65,0xbb5a043e,0xbb5905be,0xbb4ca1ef,0xbb3aa11f,0xbb248b14,0xbb1a8ee3,0xbb20f32a,0xbb253ca4, +0xbb0aba99,0xbb0faf19,0xbb1227f4,0xbb120f46,0xbb055a0b,0xbafad5f4,0xbae977b0,0xbae281d2,0xbad9753b,0xbac61fc9,0xbac77dd6,0xbad17019,0xbad6a6b1,0xbae7c733,0xbaeb28b0,0xbaec1519,0xbb09d941,0xbb0b8474,0xbb16c0be,0xbb1d41ab,0xbb7525f5,0x399d4f77,0x3a23a00a,0x39df994a,0x39aa8848, +0x39835a06,0x39cb2387,0x38977c31,0xb6be882b,0x39bd89f3,0xb8c99ecc,0xb988f59b,0xb9b8162b,0xb8077765,0x383aadd7,0xb8a54c8d,0x39862757,0x39aa6d78,0xb8d52f40,0xb8fb578c,0xb963391e,0xb981452a,0xb939311f,0xb860de89,0x379041c9,0x39c24c22,0x3a21b84e,0x3a863ca9,0x3a2f5f1b,0x3a02fad2, +0x390e1844,0x398fba7a,0x39961cba,0x3827f33b,0x38d7b54b,0x3968583b,0x3a0e2f58,0x3a138c4b,0x3a73c2a6,0xb743c9f5,0x3a174547,0x3a637b8c,0x3acd9057,0x399be2b0,0xb926b25b,0x3a3c6622,0xba8ac4de,0xba7e0be8,0xba7b718e,0x38d09e02,0x3a17c473,0x391c7bc0,0x3a9c87bb,0x3a97a3d2,0x3800ea0f, +0xba044c14,0xba878bf0,0xba94ebb0,0xba8f1703,0xba6c7c6c,0xba03c3ec,0x3a324f28,0x3ad660c6,0x3b487868,0x3acc273b,0x3a81733a,0x3968679d,0x3ab8a1b4,0x3a88f1d2,0xba75450d,0xba4e6473,0xb9cc47a2,0x3a499d9d,0x3a963364,0x3b2bfc8a,0x3a92e892,0x3a976491,0x3a76d901,0x3b22f114,0xb8384566, +0xba005658,0x3ab62d2f,0xba81c9c1,0xbb06c287,0xbae0fc37,0xb89f0f39,0x3a7bb080,0x3863746e,0x3ace4881,0x3ac395fb,0x3854588e,0xba9b9a4d,0xbb0df12c,0xbb29da21,0xbb1d15d1,0xbad6afe4,0xba7689aa,0x3aa0f12f,0x3b34a6e8,0x3bb85ee6,0x3b4e4fae,0x3b0f0a98,0x38c4be57,0x3ad566e7,0x3aa5a1d5, +0xba7d4d02,0xb9f1448a,0x39767ea4,0x3b13dc5a,0x3b1be7ee,0x3b16370b,0xba042fb5,0x3aa946c9,0x3b11e2ab,0x3b8830f8,0x3a9c8b9c,0xb94a2d6d,0x3b22617b,0xbac5c03d,0xba425513,0xba7dff46,0x3a981772,0x3b309e07,0x3a9929c2,0x3b58cbe0,0x3b537d82,0x3867812b,0xbad32eb8,0xbb4a86e3,0xbb7f5581, +0xbb794f6b,0xbb4b91b2,0xbb0f429a,0x3b079bfa,0x3b9d7b98,0x3c16be32,0x3b83c343,0x3b3ecd4f,0xb8934bc9,0x3b7a1de4,0x3b29c131,0xbb4cfa95,0xbae5346d,0xba46be0d,0x3b2963fa,0x3b576849,0x3bd75553,0x3b2b4aa9,0x3b2a0d55,0x3affe5ff,0x3b80bb2e,0xb95436d4,0x3a106380,0x3b8da0ab,0x3b38727c, +0x3b4b2986,0x3aff98cb,0x3b3641d5,0x3b7041c5,0x3b294a58,0x3b530b1a,0x3b2d2c4b,0xba498faf,0xbafb69da,0xbb97501b,0xbbba1df0,0xbbb20751,0xbb7f0a8a,0xbb151685,0x3b0b8fe1,0x3bcab194,0x3c3dbd82,0x3bf5cd35,0x3b74d00a,0xb961db05,0x3b3dcbff,0x3b1a096b,0xba99eb7c,0xb95b5544,0x3b087b86, +0x3badf257,0x3bbb075b,0xbc40e7db,0xbc266667,0xbbe847e2,0xbb4c759a,0x3b8def4b,0x3b94027d,0x3a955139,0xbbd5f21d,0xbbd34be6,0xbb0bb2d9,0xb9748b3c,0x3be9ddc2,0x3bbb2844,0xba985f09,0x39a98e11,0xba31dced,0x3bc36ed2,0x3ba73e23,0x3bbd90ea,0x3bfbcedb,0x3c1c058a,0x3bdef7a3,0x3b810fb6, +0xbb113797,0xbbc57173,0xbc319a79,0xbbeea286,0x3aba71be,0x3c651a20,0x3bf6348e,0x3bb09a0b,0x3b9b88f5,0xbbdb7bef,0xbc233ffe,0xbc0ce0b2,0xbc34f2a2,0x3c20b5de,0x3c370c24,0x3ba1802e,0xbb849d1c,0xbc3a17d8,0xbc36734d,0xbbce98e2,0x3a4e02b8,0x3b51cbbc,0x3b0d86e3,0xbb55c317,0xbb8139fc, +0xbad22358,0x3aff608c,0xb8b80d26,0xba4a8775,0xbb064554,0xb9a728c6,0xb986555b,0xbb208b44,0xba6f9192,0xbaf96ca5,0xbaefaf4f,0xbb468017,0xb90ee08d,0x3c02584c,0x3c1897bc,0x3b8dd08e,0xbb67ffda,0xbb5bd734,0xb936d1d2,0x3c0cf1cd,0x3c5b3760,0x3c521cd4,0x3a992b02,0x3bb0f50f,0xbc48a26a, +0xbcb716cb,0xbb84ce22,0x3a7549e4,0xbc0bf220,0xba5c4660,0x3a547bb3,0xbb5c9e5d,0xba83cfc6,0xba31cf20,0x38f80f90,0xba899ad9,0xbabacd84,0xba347b26,0xbada3f36,0xba39b3b0,0x3aa16844,0x3a2c2a5e,0x39bd78fb,0xbab8bc27,0x3aacf6e7,0x3b015964,0x3acd56b4,0x3a192e76,0x394e268a,0x3a598191, +0x3ad8c246,0x3b04d1cf,0xbae754f0,0x3c0ec0af,0x3bf43a54,0xbc1eb15a,0xbb3242d5,0xbba20b27,0xbbbe010a,0xbc09293a,0xbc34d976,0xbc85b5a5,0xbb748677,0xb95dbad7,0xbab773ee,0x3b54fd6f,0x3af0945a,0xbb9e23b2,0xbb4e1d4a,0xbaeafb3d,0x38609af2,0x3a453f9c,0x3925c435,0xbaf00b8b,0xba3fba9a, +0xba2394ae,0x3a041377,0xbacc2334,0xbb0860b7,0xbb324ec6,0xba1cecf9,0x3a594c13,0x3a96ac8f,0x3b2d5323,0x3b35dbd0,0x3adabb4e,0x3a9d6ce4,0x3af1f78d,0x3b0b80bc,0x3c25b04f,0x3bce6fd4,0xbc4db963,0xbbf2297b,0xbc0280bf,0xbb0e6aec,0xbbcf1f48,0x3c70b644,0x3ca56690,0x3c33ddea,0x3bd37b88, +0x3bc98e44,0x3a61bf98,0x3a256f2f,0x3b4ed195,0x3ae8e89b,0x3a7b21be,0xba8dedaa,0xba62b1c9,0xb87b1598,0x39ed13fd,0xb94857a7,0xbaa05075,0xbb839599,0xbb8a8e52,0xbb93804d,0xbb90251a,0xbb62f6d6,0xbb48656a,0xbaf3990b,0x3a698597,0x3b5a2d7c,0x3bddce48,0x3bc8623c,0x3b93226a,0x3a9db015, +0xbb881e61,0xbb734766,0x3b18a8f6,0x3af5e363,0x3b7bedaf,0x3b3726a9,0x3c029e02,0xbc85a9a4,0xbc5a3e1a,0xbc0edf4c,0xbb24d31d,0xbac0926a,0x3a7d89bc,0x3a9c38d5,0x3acf56a5,0x3af73f89,0x3b1eb609,0x3a8de444,0x3a844638,0x39520e2e,0x3a694cde,0xbb45c7ff,0xbb99061e,0xbb93c36c,0xbba4f5a0, +0xbb855243,0xbb3f4af0,0xbac4827d,0x39c4bbb4,0x3a539747,0x3b20891d,0x3b8e7438,0x3bc96fa5,0x3bff5d74,0x3c10146f,0x3c30c316,0x3c3a7b05,0x3c1a60a8,0x3bafd759,0x3bd1052e,0x3acb4cd2,0xbbbcea9a,0xbc3f1ec1,0x3c0b8560,0x3bfe6037,0x3bebc502,0x3bd8e0fb,0x3c03704d,0x3bec3666,0x3bed03b2, +0x3bd53e9a,0x3bc900c8,0x3b9ce6af,0x3b3978f2,0x3a98d5c5,0xba8c13ed,0xbb3699e1,0xbb4f80f7,0xbb49602d,0xbb2fced4,0xbb51b322,0xbb4888fd,0xbb50adb8,0xbae79f80,0xba5be374,0xb97abd3c,0x3a2d2b2e,0x3a7b6981,0x3a0c001f,0x39d4b7ce,0x3a6bd3d6,0x3a799118,0x3ac79331,0x3b25024c,0x3b8aca3c, +0x3b92038f,0x3bbd2b41,0x3bed92ef,0x3c0e60bf,0xb9a1fbfd,0xbb31cfc9,0xbafa0c0d,0xba9aea9b,0xbb1dd613,0xbab0bdad,0xba702290,0xb9a178d9,0xb8fb8b5f,0xb91c1818,0xba3b0c46,0xbad13f49,0xbb2f64a2,0xbb8892e7,0xbb824e06,0xbb7de8d4,0xbb6966c1,0xbb6ae494,0xbb640b30,0xbb4e66b4,0xbb063cce, +0xba9d33ac,0xba124b4d,0xb9e3d454,0xba081571,0xba6d9fcf,0xba9d36c5,0xbab63eb1,0xba9ed852,0xb9d3d376,0x38b6974a,0x3a6762bc,0x3b0d69de,0x3b50b03b,0x3b63f938,0x3a4b429a,0xbb313e1a,0xbb6ba65a,0xbb94fe7d,0xbbbc1549,0xbbe16430,0xbbcd17d1,0xbbb5b30f,0xbb9eb995,0xbbb106f8,0xbba344bf, +0xbbacb843,0xbb8c690a,0xbb8e7e83,0xbb88ed16,0xbb70bf62,0xbb7683c5,0xbb767a8b,0xbb60016a,0xbb49c53e,0xbb474fc6,0xbb25b1c4,0xbae8c5b3,0xba78a06e,0xba4ed4f3,0xb9f9d602,0x3938ca28,0xb8ca2530,0xb90c0d4a,0xba1e1887,0xb99fdf8b,0xb994d5d9,0xb8175c89,0xba164bf5,0xbaa6858d,0xba929d27, +0xbae3e5fc,0xbb4b6cd2,0xbb72dfa2,0xbb5be3ca,0xbb44c53f,0xbb1cab16,0xbb7e623d,0xbb93131b,0xbbb5d572,0xbb9c5ba2,0xbb8d9891,0xbb80cced,0xbb819eb5,0xbb79c486,0xbb6d90f6,0xbb5c1909,0xbb3f1937,0xbb21e132,0xbb1b34f4,0xbad772a6,0xbb0a606b,0xbadeb1fd,0xbad16763,0xbab1e153,0xba668105, +0xb9ea35ff,0xb8f73919,0xb80f542d,0x39a5e0d0,0x39ddced2,0x3a13f949,0x3a10150d,0x3a24df76,0xb990723e,0xb9c4f24c,0xbaceb5d0,0xbb2d57fe,0xbb2c0606,0xbb3ff3b2,0xbb4cf826,0xbb5ebf66,0xbb613ef7,0xbb787059,0xbb668da7,0xbb6b7166,0xbb608371,0xbb6519e1,0xbb5c8fa8,0xbb4e2a4d,0xbb3bd51c, +0xbb30a031,0xbb309b8a,0xbb33ff0e,0xbb2337c1,0xbb25ea4c,0xbb262ec3,0xbb26a967,0xbb1870e7,0xbb10e057,0xbb07a73b,0xbb034ac9,0xbafa5cbf,0xbae4c064,0xbaec609e,0xbaf8e7e8,0xbb004056,0xbb05c8a9,0xbb00fb62,0xbafaf06b,0xbb12b85e,0xbb175647,0xbb249db6,0xbb288441,0xbb81b9a6,0x3a138557, +0x3a40ceed,0x3a0ef932,0x39d40f69,0x39a8fa09,0x3a13a4f4,0x3918f524,0x383020b8,0x39d9cec7,0xb8b68f38,0xb98677d9,0xb9bd79a4,0x37cdf9d9,0x3914339a,0x3817cf7f,0x39cd9654,0x3a04cba6,0x395046e2,0x38ba4307,0xb721b15a,0xb82995ad,0x3843b85c,0x394c5b53,0x39a2107d,0x3a2fd387,0x3a67b4cd, +0x3a9a6b3e,0x3a573bd6,0x3a214f23,0x397546ef,0x39f0a9b1,0x3a03c964,0x397553af,0x39b34472,0x39e9ed04,0x3a40be68,0x3a34dd4a,0x3a91984b,0x388cc102,0x39e7232e,0x3a4c4539,0x3af4063e,0x395efb65,0xb99b807b,0x3a29d046,0xbaad3dc4,0xbaad232f,0xbaa7070f,0xb4c68d7f,0x3a1ba120,0x3970f487, +0x3ab1eab8,0x3abc22c5,0x3a310302,0xb92f7484,0xba599a5d,0xba739713,0xba42fbe3,0xb9e6bc4b,0x3901087d,0x3aa189f5,0x3b06d545,0x3b5370a5,0x3ae683cf,0x3aa25338,0x39f7156b,0x3ae75e72,0x3ab965d6,0xba27ef3f,0xb99130e2,0x39499932,0x3ab372e1,0x3acb4aee,0x3b28d431,0x3a9154f7,0x3a4c44cf, +0x3a1b7428,0x3b3cd5c5,0xb9e7ac05,0xba898a48,0x3a8ddf5c,0xbae02ad8,0xbb33f76c,0xbb203872,0xb9f48462,0x3a47cd2d,0x3866384a,0x3ae179b8,0x3aed8fa8,0x3a8ed047,0xba33e234,0xbaebdb40,0xbb11fdb2,0xbaee9325,0xba695f74,0x38a5c8c9,0x3b10d27e,0x3b679b02,0x3bbb5e82,0x3b53b58f,0x3b102f50, +0x38dea485,0x3b0467d8,0x3aeedfbf,0xba0d79eb,0x39b0e8f1,0x3a7ed54e,0x3b3a7e02,0x3b269704,0x3b1e5595,0xba2dea87,0x3a03e543,0x3acbb788,0x3b9cd48c,0x3a094120,0xba8a8e4a,0x3af22e1d,0xbb3e5cab,0xbb1d9ae0,0xbb397068,0x39f8689d,0x3b22854f,0x3a6d2e37,0x3b6ab4e4,0x3b6f07d2,0x3ad31d4f, +0xba807374,0xbb36c4b6,0xbb767027,0xbb457e5c,0xbb0a0bae,0xba4dcb46,0x3b64d469,0x3bc236e1,0x3c147112,0x3b872289,0x3b4e63d4,0x39ba4a5b,0x3b8cfa7e,0x3b57fb54,0xbb2b6828,0xba154237,0x3a088114,0x3b7ac675,0x3b81b77a,0x3bc6b989,0x3b2205b3,0x3aec7f2f,0x3a984fa6,0x3ba30f01,0xba9bd3b8, +0xba6effe8,0x3b540963,0x3a8bfb1f,0x3a968a67,0xb9e862d7,0x3b173269,0x3b6c3e66,0x3b166859,0x3b69a1ad,0x3b5cfd6c,0x3a91da15,0xba8e3b00,0xbb88366a,0xbbab609f,0xbb9074db,0xbb270cc6,0xb9ba48ab,0x3b81e56d,0x3bf7ddf2,0x3c3b8c65,0x3be7309e,0x3b5b6f96,0xba00a935,0x3b627cea,0x3b527869, +0xb9d85b7d,0x3aa93885,0x3b59728a,0x3bc72a48,0x3bb73712,0xbc36f2f2,0xbc216ab1,0xbc04fb0c,0xbb935fb3,0x3b3a270e,0x3b8d2d1a,0x3b06755e,0xbb9d62b7,0xbb9f62d6,0xbacf3eb1,0xb85d83b5,0x3bb000d4,0x3b7db354,0x39dee9cb,0xba14659c,0xbad98372,0x3bb3cf5d,0x3bbd5ea2,0x3bf8b543,0x3c200a03, +0x3c2a63fc,0x3be40c03,0x3b6b5ad4,0xbb6d5a0c,0xbbe0342b,0xbc2762c0,0xbb9c1774,0x3b8a02a0,0x3c708b17,0x3c0b0364,0x3bb098ae,0x3b5d6814,0xbbccaaee,0xbc0a4a0c,0xbbd629a5,0xbc1fc388,0x3c0683ea,0x3c4cf2b2,0x3c06287b,0xba469baf,0xbc21b377,0xbc3a7bbc,0xbbf936eb,0xba1fd0a4,0x3b0cb3ae, +0x3ada3c00,0xbb29b304,0xbb74e27d,0xbb0da900,0x3ad3b732,0xba50ec69,0xba6700b1,0xbb16500c,0x3a3ee556,0x3a8f82b7,0xba486143,0xb99f481b,0xbac80c05,0xba75ef90,0xbaf3cbf1,0x3aa90306,0x3c243a8d,0x3bfdbda7,0x3b05ae2e,0xbbbd6121,0xbb5e0fc3,0x3a5be870,0x3c11fcbd,0x3c62e374,0x3c3d7bea, +0xbb201830,0x3b1c43c8,0xbc24bbcc,0xbccbfb72,0xbbe1c26f,0x39be5c1a,0xbc0d1ce3,0xba9d8c61,0x392659b1,0xbb16aa8c,0xba896783,0xba7526f1,0x39b604c0,0xba0f6069,0xba8e2917,0xbaa2524b,0xbafc4623,0xba807850,0x3a7db07a,0x3a9759bc,0x3a8942c6,0xb99c4bfb,0x3abc7162,0x3ac8c2f7,0x3a973f8b, +0x38f48d77,0xb98b6892,0x3ac2566c,0x3a4f23bc,0x3a14d7e3,0xbb21b25c,0x3c01b79b,0x3bddf915,0xbc1f4ebe,0xbad52b76,0xbb6a94e2,0xbbb62176,0xbba372f3,0xbc0912f9,0xbc89f4f6,0xbba9e3e0,0xbaa3b94c,0xbb08bf6b,0x3b62340e,0x3b2e5210,0xbb5c3bfd,0xbb41ed2d,0xbaee8962,0xb8029a9e,0x3a5e808f, +0x39cde914,0xbaf98bff,0xba2d6309,0xba237ed6,0x3a4fb059,0xbaa00fcc,0xbafa8e12,0xbb202651,0xba01a037,0x3a2f4014,0x3a9423a3,0x3b030e5b,0x3b03d6d3,0x3a3cc811,0x3a42cd70,0x3a813162,0x3a61b3c6,0x3c0e9943,0x3b9818ed,0xbc5ee2f8,0xbbf6bcec,0xbbe9c8f8,0xbad79921,0xbb52e233,0x3c7616cf, +0x3cc2e12b,0x3c6d8695,0x3bfede95,0x3ba95473,0x3a681c23,0x3a959533,0x3b365de3,0x3af647e8,0x3aa7aae4,0xba1b1b21,0xba8cba4f,0xb99bbfb0,0x3a7faf3d,0xb829a649,0xba512893,0xbb4b7564,0xbb680537,0xbb82d219,0xbb82fe4f,0xbb3fa052,0xbb169f72,0xba1dc4ba,0x3ac4c9b4,0x3b7d0ac1,0x3bd642ca, +0x3bae66ae,0x3b4528b8,0xbb0ac86a,0xbb9e2dc1,0xbb76c2a8,0x3af3e7f0,0x39cc8d20,0x3ac5b1f9,0x3aad18a5,0x3bceb803,0xbc74bb4a,0xbc50d98b,0xbc188639,0xbb3febfa,0xbad7f7af,0x38deb45e,0x39b31f5f,0x3adcceae,0x3ac678f8,0x3ad37c16,0x3a17b022,0x38f4d88e,0xb95f4615,0x3a3c0edd,0xbb33e3fd, +0xbb8b5770,0xbb9ec836,0xbbb2252c,0xbba0adab,0xbb8a6ee4,0xbb265584,0xba119a3a,0x39c71f85,0x3b1200c3,0x3b90699a,0x3bd82b5a,0x3c0110a5,0x3c0e1c1f,0x3c26f587,0x3c2decda,0x3c03bfd6,0x3b5f3126,0x3b86001d,0x3863aae9,0xbbc44e5d,0xbc326d9a,0x3c019249,0x3c12a904,0x3c07669f,0x3bea57df, +0x3c03f078,0x3bdeb9a3,0x3bd5e5be,0x3bca04bb,0x3bc46d1f,0x3baa90ea,0x3b5c5b57,0x3b0aa347,0xb93e0895,0xbb102f51,0xbb4241ca,0xbb3f7b44,0xbb23cf32,0xbb270a52,0xbb22921c,0xbb3470f6,0xbaec8a10,0xbaa12729,0xba2fca5c,0x3990dd3a,0x3a12ff06,0x39a7e856,0x3a0964d1,0x3a8f0f2b,0x3a8ea696, +0x3afac4ee,0x3b577c34,0x3bad11f2,0x3ba62c85,0x3bb4b09e,0x3bccacee,0x3bf998cc,0x393f4175,0xbb073bdb,0xbab3a613,0xb9c865e4,0xbaa86aec,0xb97de497,0x3987c7b9,0x3a3fe7dd,0x3a5315d9,0x3a2af947,0xb90d5881,0xba71bc23,0xbb13f94e,0xbb7b606c,0xbb815064,0xbb814c27,0xbb7243d4,0xbb63b5bc, +0xbb58640b,0xbb423771,0xbb0977a1,0xbacf48b2,0xba9a3d31,0xba62c420,0xba3feba3,0xba79abe0,0xba803140,0xba6b1cfc,0xba0da401,0xb8bc5f63,0x393c75fd,0x3a7996f8,0x3b0b8cbe,0x3b5be83a,0x3b6ff63f,0x3ab66b74,0xbb314229,0xbb5fe3ed,0xbb82d740,0xbba1b929,0xbbbcf69e,0xbba9e101,0xbb8f8816, +0xbb636db9,0xbb8f82e7,0xbb8c4fe9,0xbba106c8,0xbb851700,0xbb8ffc97,0xbb892d57,0xbb8017e5,0xbb8245fc,0xbb86a2da,0xbb7830de,0xbb68c3cc,0xbb58dabb,0xbb422ecb,0xbb1c324d,0xbaed6b71,0xbac23a14,0xba8c0e7c,0xb9a7ccf1,0xba332bc1,0xba582796,0xbaa228e7,0xba66e94a,0xba383db8,0xb9971a11, +0xba4be08d,0xbacdbc70,0xbabffe08,0xbb03ec92,0xbb84e7a7,0xbb99ade0,0xbb92ef3b,0xbb8946f5,0xbb7020bb,0xbba4756f,0xbbb4ba11,0xbbd55a91,0xbbb642b7,0xbba1182e,0xbb8fbcd4,0xbb8ca0ac,0xbb82a0c9,0xbb7a61a2,0xbb6f18e6,0xbb565a77,0xbb459b98,0xbb39e604,0xbb194244,0xbb315704,0xbb159a06, +0xbb0f8f5b,0xbafb7317,0xbac95f6b,0xba9cf564,0xba702a5d,0xba606aca,0xb9fde410,0xb9d7e1b0,0xb9ebe343,0xba11ec56,0xba2eeb17,0xbac1c7b2,0xbab4304f,0xbb210eff,0xbb672a36,0xbb2d7f0c,0xbb3d9edd,0xbb4863ee,0xbb57032e,0xbb5a2996,0xbb62b139,0xbb543487,0xbb5efa50,0xbb5a2c61,0xbb63b9d4, +0xbb5f29f6,0xbb5538c6,0xbb4767fb,0xbb3b35a9,0xbb34b2a5,0xbb372dcf,0xbb339b51,0xbb336ad0,0xbb3166e6,0xbb32e45b,0xbb252c42,0xbb1e329b,0xbb14d051,0xbb0f882f,0xbb073537,0xbaf69abd,0xbb019a9d,0xbb08ca6b,0xbb0e87ff,0xbb12116e,0xbb09e43e,0xbb05a9d8,0xbb18b848,0xbb1e215e,0xbb2ceb87, +0xbb2e45e8,0xbb811bcd,0x3a4d09b6,0x3a5142af,0x3a26a3b9,0x39f8d56d,0x39cf2d7c,0x3a42385c,0x3958a3ea,0x38cd5ee0,0x39fd0feb,0xb872ce8c,0xb96a56dc,0xb99d51ab,0x38c7dc84,0x397ea2e4,0x39314e38,0x3a038294,0x3a274f07,0x39fdcf92,0x398f18d7,0x393690c0,0x391cd776,0x3981bc7b,0x39d9b7ee, +0x3a1904e3,0x3a7164d4,0x3a8eb639,0x3aa5a1d1,0x3a72c88d,0x3a36477f,0x39ab3ff2,0x3a1f947d,0x3a306b0c,0x39d0480a,0x3a0af2b9,0x3a2329ac,0x3a65e46c,0x3a4a6e35,0x3aa97b4a,0x39372453,0x39935a9d,0x3a29a134,0x3b072355,0x390dc3c7,0xb9d048f4,0x3a19dd65,0xbac4bd59,0xbacffc74,0xbabae64f, +0xb91741fa,0x3a05ab46,0x3998238c,0x3abd2e35,0x3ad15044,0x3a99bb0d,0x38fce632,0xba217661,0xba39144a,0xb9d5d12f,0x368dc4eb,0x3a47592a,0x3add03a1,0x3b19a8b0,0x3b539634,0x3af609e3,0x3abd6539,0x3a45bf15,0x3b018cf1,0x3ad525d0,0xb9a788c4,0x394925e9,0x3a372613,0x3af3eda9,0x3af82377, +0x3b2026d1,0x3a8c0d33,0x39eea5fc,0x399d62ef,0x3b4bd0ad,0xba4641ba,0xbac26795,0x3a582e01,0xbb197765,0xbb57412a,0xbb3c4a5d,0xba6c335d,0x39eb5604,0x3812fb49,0x3ae6a3f3,0x3b0291df,0x3af2dad0,0xb9824d55,0xbab5a4a0,0xbae9bd2d,0xbaa2b750,0xb92f216a,0x3a953362,0x3b46fd7e,0x3b864fcf, +0x3bb4e6ea,0x3b515f99,0x3b0bd9a1,0x395b20ca,0x3b146772,0x3b0f6622,0xb905aefd,0x3a80b10c,0x3acca65f,0x3b561ed3,0x3b2ad763,0x3b2c045e,0xba311dfd,0xb99c32c6,0x3a47fcbd,0x3ba75fec,0xb90d62f6,0xbaecbeb8,0x3aa324e5,0xbb851f8c,0xbb7f0580,0xbb87ec0d,0xb9b8a94e,0x3b00235d,0x3a3345c3, +0x3b6c112c,0x3b778f00,0x3b36cc9a,0xb9efb959,0xbb1f9ced,0xbb618a57,0xbb116a74,0xba90ad98,0x3a492f8f,0x3b97f3fd,0x3bdaec68,0x3c0b4cd5,0x3b85cedb,0x3b5817ef,0x3a819003,0x3b91bc02,0x3b6ce578,0xbaff8865,0x3a0212c9,0x3ad4419c,0x3b9dc1fd,0x3b93dbcd,0x3bad4a4a,0x3b13dde3,0x3a8e0444, +0x39e8cbc3,0x3bb9a220,0xbb0987a9,0xbb1283a6,0x3b0b502f,0xba37f73b,0xba5c5755,0xbb24873c,0x3ad02eca,0x3b538788,0x3b0bd0d9,0x3b71c02d,0x3b7e75f5,0x3b31ea92,0xb9ca41db,0xbb663194,0xbb940ffb,0xbb5a0993,0xba9cbd70,0x3ae192ac,0x3bb5f9ec,0x3c0ba088,0x3c2fa7f5,0x3bd03197,0x3b3a6f3d, +0xba16fd35,0x3b77fd6f,0x3b7442cc,0x39a36d97,0x3b22ca19,0x3b8b1fb8,0x3bd71cc0,0x3bae5811,0xbc1fede0,0xbc15f574,0xbc11c462,0xbbbb9062,0x3ac0c23f,0x3b86ccd3,0x3b43d8d9,0xbb2cdbb4,0xbb482305,0xba8de689,0xb8ce9a13,0x3b5a9b2f,0x3b09e637,0x3aedccf6,0xbacbf662,0xbb35b19e,0x3b8a6a42, +0x3bbd9589,0x3c0ba8f0,0x3c2d55b3,0x3c258f49,0x3bce3802,0x3b1ec0ac,0xbba070e2,0xbbe45b1b,0xbc11c685,0xba6ad7fa,0x3c00ef93,0x3c76bf0f,0x3c16ac24,0x3ba164a9,0x3aaee19a,0xbbca6788,0xbbee9126,0xbb9b80a8,0xbc041603,0x3bb69fd0,0x3c50e1d5,0x3c3c7b67,0x3b3d8551,0xbc075728,0xbc36bb91, +0xbc0c5c70,0xbaf62b49,0x3a758bd2,0x3a82a23d,0xbb05939e,0xbb535ecb,0xbb243de3,0x3a931b7e,0xbaab28dd,0xba41f0a4,0xbb0ac80d,0x3ace7c72,0x3b0c2127,0x3a7a1ce1,0x385f73aa,0xba96e4c3,0x38de905a,0xb9fc3bd9,0x3b335b4e,0x3c323559,0x3bbd7ac8,0xb94c8cf7,0xbc082282,0xbb53f453,0x3af19872, +0x3c0dcf2c,0x3c5c21e4,0x3c20cff4,0xbbb2ae7b,0xba523353,0xbbec6a74,0xbcccb942,0xbc2d3595,0xbb01fbe6,0xbbf7772a,0xbb14c099,0xba9901d8,0xba81ed3a,0xba7762b9,0xba825bfb,0x39da96a5,0xb907919f,0xba4599a4,0xbae98e89,0xbb0187d1,0xba8d4df6,0x3a2486c9,0x3ad8464a,0x3b016d26,0x3a8564a9, +0x3aca5b75,0x3a8ad6b1,0x3a44538f,0xb9d6440f,0xba4e60e2,0x3ada3c12,0xb981cc70,0xba718828,0xbb14971a,0x3bc1d465,0x3ba238b4,0xbc009f27,0xba4a7acd,0xbb1edcf8,0xbbbdf3a0,0xbab068b2,0xbbb079e2,0xbc8921de,0xbbf8bf84,0xbb68b0d4,0xbae19c14,0x3b34f64d,0x3b3f1335,0xbada5a19,0xbb2a27c5, +0xbaecb55d,0xb8b5bc0a,0x3a40a3ac,0x3a062ea6,0xbaf49b49,0xba228416,0xba29daaf,0x3a6f5ff8,0xba2cb396,0xbab499c8,0xbadfd1fb,0xb93969cc,0x3a087fe4,0x3a904768,0x3a9dcc89,0x3a8dc66c,0xb9cc5f4c,0x38d042c2,0x38e521ff,0x3a7e3e74,0x3bcb6fac,0x3b0024f4,0xbc4df999,0xbbea539e,0xbbc4977c, +0xbac16a39,0x38f889f4,0x3c59f83b,0x3cc92766,0x3c8fbc8d,0x3c17a213,0x3b8bbe97,0x3ab20f5d,0x3b0b44ae,0x3b1c1e14,0x3ae941dc,0x3a9da7a0,0xb989fd96,0xba9c9ba2,0xb9f44a2f,0x3a9edc7f,0x38c9089c,0xb99e1fca,0xbb00863c,0xbb2eba33,0xbb5be180,0xbb5d9ff8,0xbb1df51b,0xbace1383,0x3a290070, +0x3af29fd9,0x3b8738c0,0x3bc0dbd5,0x3b915f7c,0x3ae3c3e3,0xbb8d9adf,0xbb9e6dd9,0xbb63d04e,0x3a990160,0xba819f5d,0xba0e5d3f,0xb9827eb4,0x3b827488,0xbc41fb9f,0xbc3b289c,0xbc1b1a28,0xbb66d4a6,0xbae5d3e5,0xba2ab740,0xb9f1df06,0x3ae08209,0x3a83c983,0x3a1903a2,0xb8bb5f93,0xba2610e3, +0xba09b04c,0x39782563,0xbb1c8394,0xbb735227,0xbba91e0a,0xbbba5d69,0xbbb3ffb0,0xbba86689,0xbb664bf7,0xbacfeaf4,0xb7d6a20d,0x3af01b5a,0x3b873648,0x3bd20164,0x3bf83f1b,0x3c083249,0x3c19dde1,0x3c1d1187,0x3bd47ac5,0x3ae51282,0x3b0baf4e,0xba5fc062,0xbbb4ecfd,0xbc0dcd7d,0x3bd0f3d3, +0x3c1277c5,0x3c080586,0x3bdbbcb3,0x3bea4a7e,0x3bbcdbaa,0x3bae9b29,0x3baa94dc,0x3ba9fa01,0x3ba35770,0x3b66634a,0x3b3c9bd4,0x3a3a991b,0xbabf5ecd,0xbb29099a,0xbb31fa8c,0xbb1f0476,0xbb091929,0xbb0138c8,0xbb0e09ae,0xbae54f90,0xbac007c8,0xba882aff,0x38a70e54,0x39f01064,0x39dc5c9a, +0x3a8ac74f,0x3ada1f56,0x3ad48e51,0x3b31a0d6,0x3b8e0536,0x3bd30cb6,0x3bbd2f5b,0x3bae522a,0x3bab1a99,0x3bc3a834,0x3a4b00e5,0xbaa5cab1,0xba632264,0x39977527,0xb909f414,0x3a699143,0x3ab757cc,0x3adffe27,0x3adc1aa2,0x3ab9c0e8,0x39ee49f0,0xb94e7aa5,0xbadb02eb,0xbb569685,0xbb70ad4f, +0xbb7c564b,0xbb748a4d,0xbb58554c,0xbb47565b,0xbb2d9483,0xbb081aa4,0xbaeee467,0xbadec4d1,0xba925bf7,0xba382ee1,0xba2888fe,0xb9acc36d,0x3896608c,0x3a346607,0x3a3ee6b7,0x3a3c83f6,0x3ab3955e,0x3b0b2b12,0x3b5116cc,0x3b62000f,0x3aff2e6b,0xbb2566ee,0xbb3f07c5,0xbb474214,0xbb6a8654, +0xbb853479,0xbb6ed044,0xbb38b2c6,0xbae95a88,0xbb43e6a4,0xbb53f77d,0xbb87a27b,0xbb68a3fa,0xbb871b46,0xbb81b612,0xbb7c42d0,0xbb802dde,0xbb889835,0xbb7d75fd,0xbb75c042,0xbb5e34db,0xbb525a5a,0xbb376831,0xbb2314fd,0xbb02503b,0xbac19a09,0xba2b8b5b,0xba8bd853,0xbaa5ead3,0xbacaf280, +0xbaaea872,0xba9ad1de,0xba4f102d,0xba99e906,0xbaf5ad25,0xbaf0a643,0xbb10f83d,0xbb9a8472,0xbbae765b,0xbbb2c5e3,0xbbab297e,0xbb9e3079,0xbbc204de,0xbbccdd1b,0xbbea6197,0xbbc6a4da,0xbbad5c16,0xbb9890f2,0xbb915541,0xbb82fb5b,0xbb7b7287,0xbb7535ce,0xbb5fde0f,0xbb58c5a6,0xbb4a2d7e, +0xbb3431d8,0xbb46dc7a,0xbb2c5041,0xbb28d5fc,0xbb17690d,0xbb07c724,0xbaf60cb4,0xbadd756e,0xbadf8641,0xbab8a465,0xbab79c82,0xbad0d4b9,0xbadc3058,0xbaff47b6,0xbb2a943e,0xbb17cc20,0xbb51cc48,0xbb88c1da,0xbb28b596,0xbb318fcf,0xbb37d03e,0xbb40e490,0xbb44038d,0xbb3eaf72,0xbb341d92, +0xbb43957b,0xbb45e2e4,0xbb5316d7,0xbb52a268,0xbb4d9798,0xbb44b0f9,0xbb38e21e,0xbb30591f,0xbb32dbc0,0xbb37f276,0xbb36ca87,0xbb3456a5,0xbb371d46,0xbb2a6619,0xbb246a2a,0xbb1b3a30,0xbb1518c3,0xbb0ad119,0xbafca517,0xbb06c92e,0xbb0e1a0c,0xbb160ef2,0xbb1975db,0xbb11c3d1,0xbb109ee5, +0xbb1e5bc7,0xbb2165e8,0xbb2fcff1,0xbb2e53a3,0xbb77d153,0x3a8155ed,0x3a5ea3f7,0x3a3af1f4,0x3a1a2b83,0x3a057752,0x3a688304,0x39987a88,0x39463ceb,0x3a131666,0x3629c4c0,0xb9248e29,0xb947113a,0x39310cd6,0x39afa76f,0x399a0f42,0x3a2158a8,0x3a48bad0,0x3a3a6833,0x39f14c08,0x39c2409c, +0x39a8aef8,0x39e31a20,0x3a21dc4b,0x3a5d4344,0x3a96204d,0x3aa5977e,0x3aacb95d,0x3a849fbf,0x3a490fe9,0x39e551a2,0x3a412c66,0x3a5446b1,0x3a0ff841,0x3a343532,0x3a498f80,0x3a82a8a0,0x3a5dae9a,0x3abfdc2e,0x39a9c1dd,0x39548e5e,0x3a0f1d8e,0x3b0d5f2d,0x38c67ae2,0xb9e16b31,0x3a0c0127, +0xbad16e18,0xbae23ba5,0xbab7cb4c,0xb98d0076,0x39c3e33f,0x39aa38f7,0x3ac03776,0x3adc7c06,0x3ac6f17a,0x39d43217,0xb9b56001,0xb9f4c2f0,0xb8c00002,0x39de992c,0x3ab5ac96,0x3b07cb3a,0x3b2766e6,0x3b4f039f,0x3b004581,0x3ad5895c,0x3a8fb2e3,0x3b075991,0x3adeed83,0x38701be2,0x3a2efd15, +0x3a9d3f43,0x3b17112c,0x3b0ea123,0x3b166163,0x3a870eb8,0x39a821ad,0x3923d91f,0x3b4df240,0xba79de3c,0xbae4c502,0x3a1b3bde,0xbb37c4e0,0xbb6ddeec,0xbb4398f9,0xbaaaeb46,0x38b62e7a,0xb7f2be84,0x3ae22080,0x3b07a47f,0x3b188aea,0x392dfca1,0xba676051,0xbaadb2d5,0xba366a76,0x3a047c23, +0x3b0e158c,0x3b76a8e3,0x3b94f1b2,0x3baa005f,0x3b4e725f,0x3b072ced,0x39eb8c35,0x3b1a2f96,0x3b1ae244,0x399d77ee,0x3ac80f7d,0x3b06f3e6,0x3b6bc23b,0x3b2e9967,0x3b3a2e3d,0xba1b02a3,0xba66cf5d,0x38865994,0x3ba6d704,0xba3ac186,0xbb1cf591,0x3a36780b,0xbba2ea8e,0xbba7fd2b,0xbb9e83d1, +0xbaa0d598,0x3a9f94b1,0x39daaa03,0x3b5fc172,0x3b702294,0x3b65abc0,0x386376d8,0xbb004540,0xbb44c2d3,0xbac24b30,0xb9214465,0x3b19eeaa,0x3bb6a58f,0x3bebcd83,0x3bff7fd4,0x3b840530,0x3b5fb0d9,0x3af220b5,0x3b8c350d,0x3b69f7f2,0xba8fc1b1,0x3aca843b,0x3b31a84d,0x3bb96d0f,0x3ba1f16d, +0x3b923734,0x3b00d494,0x3a20fed6,0xb83e150b,0x3bc1581e,0xbb38ef8c,0xbb58e2c8,0x3a937e67,0xbb1a407a,0xbb3034db,0xbb836eac,0x3a2dfd74,0x3b29eb83,0x3b04bc29,0x3b6cdf02,0x3b87f5d2,0x3b7cb10f,0x398451da,0xbb2ce296,0xbb71394c,0xbb14a906,0x38dd87c8,0x3b774549,0x3be4aaff,0x3c17770e, +0x3c1f94ff,0x3bbbdb14,0x3b1ff069,0xb9d15305,0x3b7bacc3,0x3b7ebb39,0x3a84b029,0x3b61b1dd,0x3ba1dbf3,0x3be16444,0x3ba6ddf9,0xbbfabc3e,0xbc025880,0xbc14b400,0xbbd49e2a,0x39dae54f,0x3b8269ff,0x3b8053a4,0xb954def5,0xbaa9a1a9,0xba6b3aea,0xb9d537c2,0x3aa9546d,0x3a1d4780,0x3b3e7c77, +0xbb285a7a,0xbb80c336,0x3b1dfd5d,0x3b9f6e23,0x3c06fe3a,0x3c2528fd,0x3c0c8639,0x3b9e1436,0x3a10406e,0xbbc2a64e,0xbbd88c97,0xbbfa2e5d,0x3b5c93c2,0x3c3dd22b,0x3c7402d8,0x3c1ae090,0x3b83999a,0xba929444,0xbbc7d56c,0xbbcb9deb,0xbb66d38c,0xbbc61c69,0x3b343a0f,0x3c403553,0x3c6a9a3d, +0x3bcd84fd,0xbbd7deb1,0xbc2d68d3,0xbc16ccb1,0xbb4a25ac,0xb9b75ec4,0x39a9dcb5,0xbad4b69b,0xbb29ab23,0xbb2e0a1e,0x3a0ec592,0xbac73663,0xb9c3877f,0xbad055a2,0x3b103434,0x3b37a07b,0x3b1fb4a4,0x3987c93e,0xba30d672,0x3a9c3edb,0x3a997a44,0x3b8999bb,0x3c29cdb4,0x3b6feb4f,0xbb0fd567, +0xbc3019cf,0xbb41f7f4,0x3b38361b,0x3c03d9a9,0x3c41c979,0x3becac16,0xbc004da7,0xbb63fd09,0xbb97c995,0xbcc09116,0xbc6a0990,0xbba8895a,0xbbaf7b0f,0xbb79b108,0xbb4da772,0x37a73be1,0xba486898,0xba5c114d,0x39c62a94,0x3914c448,0xba08bc4c,0xbb149e46,0xbaf45c63,0xba89d473,0x394696f1, +0x3b0466b7,0x3b3a3645,0x3b1098bb,0x3ad4bd1e,0x3a1a2921,0x399f6b79,0xba66df0d,0xbaa4ade1,0x3aacd00d,0xbaa782ec,0xbb0bce9c,0xba9ab4d0,0x3b60d577,0x3b220561,0xbbbd86e0,0x39ee31f2,0xba39f229,0xbbd04e50,0x3acbbce1,0xbb4e20a2,0xbc872be4,0xbc27e398,0xbbc42eed,0xb8f4eebe,0x3ac52a6e, +0x3b2c3fa3,0xb89127bb,0xbb0a08af,0xbadef850,0xb926eece,0x3a00bfc8,0x39ffaece,0xbaec38d4,0xba244c83,0xba3b9b66,0x3a63533d,0xb82f4b84,0xba226080,0xba366f03,0x39976a1c,0x39d6653b,0x3a83c430,0x3993ae6c,0x38480876,0xbab6f576,0xba0b709d,0xb9ef35eb,0x3b159d94,0x3b631922,0xba8835a9, +0xbc332b5f,0xbbbc76b6,0xbb806fed,0xba86801a,0x3b33ec2e,0x3c2478ad,0x3cb5a9f1,0x3c9fd69e,0x3c309a8b,0x3b7a7ea1,0x3b0dc010,0x3b58bc1d,0x3b0fc31d,0x3ac46b61,0x3a5ced4a,0xb8f25c6b,0xbaa000d0,0xba08fd9f,0x3a904777,0x3973be51,0x396c1fdf,0xba3bee39,0xbadda7cd,0xbb2a454d,0xbb2bf02c, +0xbafc3304,0xba6265f8,0x3aec8ad5,0x3b0c048e,0x3b88b764,0x3ba3d4e5,0x3b6abcc5,0x3a4e81a7,0xbbb4cbd4,0xbb85af13,0xbb2603ff,0x3a647ad7,0xbb0df879,0xbb112b94,0xba21e02a,0x3ad1bd6e,0xbbfd089c,0xbc1899cc,0xbc173807,0xbb88fac6,0xbaf4a2fc,0xba931bba,0xba84a9da,0x3ae32730,0x3a02a55d, +0xba03ba9b,0xba56dce0,0xbaa1d4b5,0xba428114,0xb9b6e0fd,0xbb018a63,0xbb4d4336,0xbbaff22d,0xbbbe651f,0xbbbf7a5f,0xbbb7ba23,0xbb8c251c,0xbb289597,0xba01bbec,0x3ab74b8c,0x3b74d9ab,0x3bb82d76,0x3be6bb10,0x3c0141f2,0x3c0f8097,0x3c0a3611,0x3ba1b752,0x3a2a94a4,0x3a4ce323,0xba92ccc2, +0xbb947138,0xbbb89aed,0x3b89fdf6,0x3bfb216a,0x3bf30e83,0x3bb6c7e5,0x3bb73f5d,0x3b8ca429,0x3b7cba98,0x3b7ecec4,0x3b81cb8b,0x3b8aeb31,0x3b565cdc,0x3b59bdd0,0x3ac1278c,0xba318cf3,0xbb07a00b,0xbb2235b2,0xbb1f95f8,0xbafaa988,0xbade7549,0xbade2409,0xbadccf48,0xbac9cb07,0xbaa3628e, +0x38e17920,0x3a2ff890,0x3a801d9e,0x3b02d77d,0x3b2742ed,0x3b1d31ed,0x3b7accee,0x3bb5ad22,0x3bf8d685,0x3bcd955c,0x3ba5b33c,0x3b9275a1,0x3b862939,0x3ac01190,0xb9a7e3a2,0xb9947873,0x3a6e897b,0x3a860e2e,0x3b02c40f,0x3b21bb59,0x3b2ff446,0x3b24f6aa,0x3b0eb44e,0x3a90d9cd,0x3a0ddd28, +0xba849a9c,0xbb2a7c5a,0xbb536604,0xbb6ca0d2,0xbb6fcba7,0xbb4cbab4,0xbb387e12,0xbb195010,0xbb0381c5,0xbafa17fa,0xbb04b5dc,0xba9b285b,0xba03f518,0xb8eeb3d8,0x3a06cba3,0x3aa4c229,0x3b0cd17d,0x3afb86ab,0x3adb495f,0x3b1212d2,0x3b1d47f8,0x3b45eb07,0x3b4ced2b,0x3b208002,0xbaff865b, +0xbb025e87,0xbae203ce,0xbaed1fb2,0xbb01862a,0xbae0f75d,0xba737d73,0x3913c0b1,0xbaa75de4,0xbaf577e6,0xbb4121af,0xbb35552f,0xbb6befaf,0xbb6c7284,0xbb6b2f96,0xbb6f52a0,0xbb831699,0xbb745b6d,0xbb71162a,0xbb5a6df1,0xbb57f1f6,0xbb461fc9,0xbb3fe8e7,0xbb1865f4,0xbaea585e,0xba8063d0, +0xbaac0855,0xbac20b81,0xbacac8dd,0xbaca6f96,0xbac478b7,0xbaa230f9,0xbac57028,0xbafe983b,0xbaf9e533,0xbb04a82e,0xbba28546,0xbbb2e470,0xbbc35be5,0xbbbe05fa,0xbbb5d7ad,0xbbcfe52a,0xbbd52842,0xbbef0405,0xbbca7c2f,0xbbb0fa2b,0xbb9bdad2,0xbb91ff65,0xbb811097,0xbb79e59b,0xbb762e8c, +0xbb63e5d8,0xbb62a13c,0xbb556b84,0xbb455ec1,0xbb564840,0xbb3b65e7,0xbb3901d4,0xbb2764f5,0xbb1f16a4,0xbb182ad6,0xbb0ec9bd,0xbb19daf0,0xbb10159e,0xbb16be38,0xbb2a910b,0xbb2acbc9,0xbb429874,0xbb5f9415,0xbb449e65,0xbb70e670,0xbb92b289,0xbb20a2c2,0xbb213b3a,0xbb209cf5,0xbb22bd75, +0xbb24d79a,0xbb1571ed,0xbb0d1a77,0xbb1e8c54,0xbb289b19,0xbb3847cc,0xbb3c2c8f,0xbb3c8b92,0xbb3971f9,0xbb2fffa6,0xbb28c1a1,0xbb2cefb0,0xbb32b174,0xbb322101,0xbb3181ac,0xbb374703,0xbb2beaf9,0xbb279773,0xbb1f6029,0xbb1950ce,0xbb0ea82c,0xbb024961,0xbb0c099e,0xbb11905a,0xbb1aa5c0, +0xbb1edd15,0xbb1a3522,0xbb1e9819,0xbb2595a8,0xbb23c2a5,0xbb2ef3f0,0xbb2a2236,0xbb70c9db,0x3a963887,0x3a691fe4,0x3a4e7614,0x3a37cae2,0x3a1e5b53,0x3a7bdc0b,0x39bbd8b8,0x39886308,0x3a1f1556,0x387c701b,0xb8b314d6,0xb8771590,0x396e246d,0x39cd68fc,0x39c3eabf,0x3a348782,0x3a600908, +0x3a623923,0x3a1ef9c7,0x3a0d3278,0x39f511c6,0x3a1a677a,0x3a4d7f1e,0x3a8b371c,0x3aae4752,0x3ab6eaf5,0x3aad4994,0x3a8b33dc,0x3a56392a,0x3a114689,0x3a5a0ac1,0x3a6be4c2,0x3a2f91c7,0x3a530c54,0x3a663de3,0x3a8f5c97,0x3a6d6839,0x3aced934,0x39f96467,0x393279e4,0x39ff43c8,0x3b09c652, +0x389647e0,0xb9e43ffa,0x39e174aa,0xbad91917,0xbaeab218,0xbaa79eff,0xb9cffdd4,0x394f9261,0x39969292,0x3ab8a9b1,0x3adc74b9,0x3adc660b,0x3a2fc23a,0xb885fc18,0xb9864e47,0x393e818b,0x3a4c0d06,0x3afbdf3b,0x3b1ae5ef,0x3b2edd70,0x3b43268f,0x3b0257e4,0x3ae9d868,0x3ac09ec5,0x3b05721b, +0x3ad7e441,0x39e2ac3b,0x3a914aeb,0x3ada21ea,0x3b31bb7e,0x3b1ad137,0x3b0f0650,0x3a866a22,0x39ab6dc4,0x39092257,0x3b3e4e5a,0xba8d0b50,0xbaf7e774,0x39a01ca8,0xbb4cce1e,0xbb79d682,0xbb3bcb09,0xbad79e94,0xb99f74a3,0xb9509b77,0x3ad3962f,0x3b06a2fc,0x3b240a82,0x3a102737,0xb9bc36f2, +0xba6a7ab0,0xb950e39b,0x3a8df314,0x3b48980d,0x3b8ee3cb,0x3b9f2711,0x3b9995b0,0x3b4a8541,0x3b030503,0x3a57bde9,0x3b16cf41,0x3b1aba7f,0x3a316dbd,0x3b00d04f,0x3b222261,0x3b7f1c94,0x3b326afd,0x3b43de16,0xb9e0319a,0xba9f93e9,0xb9e46f43,0x3b9a3d3c,0xba993ce1,0xbb39610c,0x3901bb0b, +0xbbbb87b1,0xbbc88d82,0xbba312b7,0xbb09476f,0x39ba03fb,0x381198e8,0x3b482b59,0x3b5c7179,0x3b74206b,0x3a1aa33d,0xbab662ac,0xbb25a90a,0xba57939d,0x3a2ecffb,0x3b76610f,0x3bcd3c32,0x3bf41a83,0x3be160e1,0x3b82ef15,0x3b683977,0x3b3c650f,0x3b7ca260,0x3b542280,0xb94aec2b,0x3b249dc7, +0x3b757076,0x3bd42c5d,0x3baa6652,0x3b784485,0x3ae7cfe3,0x39cc2c17,0xb9aab9cf,0x3bb8154a,0xbb5c275a,0xbb87ee40,0x3981eee6,0xbb7afc59,0xbb8e9ae1,0xbb9cf9b0,0xb9ddad23,0x3ae2d184,0x3aefc50e,0x3b5c937f,0x3b893c9f,0x3b92ec27,0x3a636b01,0xbad25d02,0xbb35a9d6,0xbaa0553e,0x3aa88db1, +0x3bb74016,0x3c061c89,0x3c1ee88e,0x3c0bdd33,0x3bad4c98,0x3b142897,0x38bc4cbe,0x3b714875,0x3b750727,0x3acd2bdb,0x3b890ea2,0x3bb308ce,0x3bea6f7b,0x3ba25f3d,0xbba4e3bc,0xbbcfa25c,0xbc0aa31d,0xbbd5bbca,0xb93611db,0x3b84c6a1,0x3b9febf7,0x3b14edca,0x398ed458,0xba86a081,0xba6aa37d, +0xb9e96a16,0xba0cd4f3,0x3b757f20,0xbb64ff85,0xbba45cb0,0x3991b48e,0x3b41ada7,0x3bd7f6a3,0x3c04595d,0x3bc28547,0x3b34b1ae,0xbadc9597,0xbbe0be97,0xbbc9aa6b,0xbbdf1d97,0x3bdc47d0,0x3c67a0c2,0x3c62e332,0x3c1493f2,0x3b3cf2a7,0xbb60c424,0xbbbf5c90,0xbba8f1c6,0xbb39386d,0xbb777496, +0x3a089727,0x3c216772,0x3c831ffa,0x3c108a12,0xbba2283e,0xbc230eef,0xbc1e8e86,0xbb88d2b0,0xbabd8d57,0xb8c46a68,0xbab2107f,0xbaffa4dd,0xbb2d909a,0xb9141f7a,0xbabba194,0x392437a2,0xba5e29a6,0x3b2bf885,0x3b4ca96a,0x3b6ad30c,0x3a03b30d,0xb8177ad0,0x3b0f374b,0x3b4dbcaf,0x3bb8c574, +0x3c0f2953,0x3abfc6e0,0xbb828968,0xbc4ee3ca,0xbb265e9e,0x3b703c36,0x3be43e7d,0x3c189775,0x3b83414c,0xbc1d8dfc,0xbbab7a4d,0xbb55e1e4,0xbcae5e85,0xbc8c560c,0xbc04975f,0xbb20d227,0xbbadc8eb,0xbbaf3353,0x39cb3712,0xba1aceff,0xba11d638,0x399df4a5,0x39861082,0xb9d393bd,0xbb2a6fff, +0xbae04b5f,0xba823b24,0xb9b5730d,0x3b0bf32b,0x3b5b95ff,0x3b45bfec,0x3ad1d7ac,0x39137814,0xb982837e,0xba9db08f,0xbacd6e1d,0x3a2073e8,0xbb0d3588,0xbb41b52e,0x3a164112,0x3a843efe,0xb983a71c,0xbb85397b,0x3ab7d84e,0x3a76d985,0xbbcce119,0x3b363586,0xbb1705c9,0xbc8734fd,0xbc4b8796, +0xbc000e7a,0x3b1e4283,0x39211890,0x3afa7ce2,0x3a9d9188,0xbad35b1d,0xbac268f4,0xb9411aa0,0x39596853,0x39ac94bc,0xbae09a38,0xba38c3c6,0xba585422,0x3a31deb5,0x39ef7c76,0x392f15dd,0x394b1831,0x3a37d1f7,0x398b9bb7,0x3a372cd8,0xba39d5dd,0xba847ae2,0xbb0e73c3,0xba84fa51,0xba181dac, +0x3b8f897e,0x3a6d9a24,0xbb81db20,0xbc18fa28,0xbb88c666,0xbab694c6,0x3a1864fe,0x3b832824,0x3bc7ba70,0x3c8c529a,0x3ca2adf1,0x3c44e601,0x3b87705e,0x3b3f2fd9,0x3b89eb85,0x3b1d01e3,0x3aa18cf9,0x39e31920,0xb88418ea,0xba967363,0xb9f98613,0x3a2afff5,0x39ba673e,0x3a3e62a8,0x39f1666e, +0xba3a7230,0xbae4a35b,0xbaf1ba13,0xbabba98a,0xb923d558,0x3b34d9c4,0x3b26175c,0x3b85dab8,0x3b841833,0x3b3b1013,0x394f590b,0xbbc71787,0xbb3807af,0xba99c266,0x3a7dbbbf,0xbb3ffa20,0xbb58e314,0x39f1f791,0xb9e52c9e,0xbb6c5748,0xbbd833de,0xbc0c6c46,0xbb9a12c4,0xbb0a2ea7,0xbaa5c19d, +0xba9df1e7,0x3ad8772b,0x38b2be71,0xbab2364a,0xbabf036a,0xbad9306c,0xba645447,0xba585c55,0xbacaa999,0xbb279d83,0xbbaf7da2,0xbbbdec7d,0xbbc325c2,0xbbb9a2e2,0xbb9a1830,0xbb5e6aa4,0xba901303,0x3a813b03,0x3b59aa2a,0x3b98fbe7,0x3bd2e94a,0x3bf2edf8,0x3c0a0836,0x3bebbcef,0x3b6304fa, +0x3914c983,0x37d5ed49,0xba8889ba,0xbb636b34,0xbb2bfe0d,0x3ae13702,0x3bb186f0,0x3bbc0df8,0x3b84dbcb,0x3b797477,0x3b31e0ab,0x3b1ef6bd,0x3b229fb0,0x3b2cad60,0x3b505b96,0x3b3046cd,0x3b5dbca5,0x3b038029,0x381aa02c,0xbac334c2,0xbb0f4035,0xbb1ff496,0xbb01c517,0xbae34914,0xbac11fd5, +0xbad3791d,0xbab81757,0xba9defde,0x39caa6f9,0x3a9b8d52,0x3b0090b1,0x3b55c15b,0x3b75046f,0x3b626642,0x3ba64de2,0x3bdbccb6,0x3c0b6ba6,0x3bd89ee1,0x3b9ca759,0x3b7098c2,0x3b0c3059,0x3b0df6ea,0x3a3e302d,0x39c7bafa,0x3ac0c33c,0x3b072f08,0x3b424295,0x3b5aaa2b,0x3b654a78,0x3b52717e, +0x3b3c4a8e,0x3aee1974,0x3aa78014,0xb99f2f4b,0xbaeb8f78,0xbb2b4694,0xbb53223a,0xbb65eb7c,0xbb42ff3d,0xbb2d8516,0xbb0a95b3,0xbaf7aa31,0xbaf39db7,0xbb0a7e35,0xba8def91,0xb9538a03,0x39efe402,0x3ab5765c,0x3b22d360,0x3b70e3b2,0x3b5832fb,0x3b3e3584,0x3b625514,0x3b4bb8bd,0x3b4d7f73, +0x3b417ece,0x3b3df755,0xba5d3fa5,0xba2ce293,0xb93b3153,0x38eebe44,0x391476cb,0x398ddef0,0x3a7b268a,0x3b0064be,0x3a00c644,0xb9c46ecc,0xbac053fe,0xbae84fc3,0xbb3beae6,0xbb4c9423,0xbb518973,0xbb5554eb,0xbb723b29,0xbb61a1e2,0xbb60921a,0xbb4f6fee,0xbb52b92d,0xbb482fc3,0xbb4a680c, +0xbb24393f,0xbb06c31d,0xbab4142b,0xbabe381e,0xbac35072,0xbaa3e736,0xbab90407,0xbabe7704,0xbab2d47c,0xbac65c23,0xbac90848,0xbaaed60e,0xba9ede8a,0xbb9f124e,0xbba89133,0xbbc26f66,0xbbbda7cf,0xbbb92320,0xbbc90b29,0xbbc92eff,0xbbdeb266,0xbbbf6e8e,0xbbab4f61,0xbb9aadfc,0xbb913042, +0xbb807b74,0xbb7ff751,0xbb7a29d9,0xbb694a81,0xbb6b12c3,0xbb5f450a,0xbb55c974,0xbb5f0541,0xbb42d1cd,0xbb40bb69,0xbb2e8b13,0xbb299f85,0xbb226512,0xbb171424,0xbb3059d9,0xbb3105f4,0xbb412d78,0xbb599869,0xbb537584,0xbb6c0002,0xbb7976a7,0xbb5f04a8,0xbb80b738,0xbb93b271,0xbb15048c, +0xbb0f4b38,0xbb0ae074,0xbb0874e7,0xbb096b4e,0xbae657ef,0xbada6806,0xbafb31d3,0xbb0e8e16,0xbb1ed7da,0xbb267aaf,0xbb2c66ad,0xbb2fb6fa,0xbb2abcf5,0xbb25d637,0xbb2a98f8,0xbb2e3196,0xbb2e3050,0xbb2e0af4,0xbb348214,0xbb2c5ce4,0xbb2a2347,0xbb23c12f,0xbb1f8312,0xbb16d3ab,0xbb0b8404, +0xbb1540c6,0xbb1688f1,0xbb1ea86b,0xbb22b325,0xbb21166b,0xbb2ae6f5,0xbb2b5f61,0xbb2341e3,0xbb27bca4,0xbb1f7f3f,0xbb731f1e,0x3a9c58be,0x3a680476,0x3a52f312,0x3a48cff2,0x3a306bb8,0x3a7f8d05,0x39c3a079,0x399ec54c,0x3a2475f6,0x390ea1ab,0x37a15fbe,0x38d48cca,0x399d3cf0,0x39eba6f4, +0x39e0ed9a,0x3a3cd22a,0x3a659b69,0x3a7d8046,0x3a3a3b23,0x3a293351,0x3a0d1505,0x3a30c2a9,0x3a639fed,0x3a9a3261,0x3ab8f2be,0x3abb1448,0x3aa1a3e5,0x3a875009,0x3a523fe8,0x3a232f34,0x3a5ee39d,0x3a6c8a08,0x3a39bb01,0x3a5d6caa,0x3a6f341b,0x3a92d9de,0x3a6f2794,0x3acdbd7a,0x3a189fa8, +0x396bdb5a,0x39e6b899,0x3af7271a,0x3882d52b,0xb9df02b6,0x39699a47,0xbadf823c,0xbaee8e96,0xba98aee7,0xba10334f,0xb7761ea4,0x3929b86f,0x3aab716d,0x3acfbd4e,0x3ad96c28,0x3a63910c,0x3958debe,0xb8e1ffdc,0x39be5879,0x3a82d705,0x3b1398f2,0x3b22fb9d,0x3b2c6cac,0x3b2d5df1,0x3afd42f3, +0x3af32249,0x3ae5c43e,0x3af0a923,0x3ab90cc6,0x3a303b1f,0x3aba44a8,0x3b02df80,0x3b42935f,0x3b1c1057,0x3b0706f2,0x3a8a42ea,0x39e62370,0x3920ae71,0x3b1bd819,0xba946e86,0xbafb564d,0xb909b2f1,0xbb57b8f6,0xbb7d02cc,0xbb2cf0d5,0xbafbd3f8,0xba32fa49,0xba041824,0x3abd49aa,0x3afe92c3, +0x3b1b999f,0x3a62b4e0,0x38f14f5a,0xba044860,0x395a864d,0x3ac5cc46,0x3b700bc7,0x3b99d495,0x3ba13255,0x3b82c1f9,0x3b41a619,0x3af89d67,0x3a9e26b3,0x3b08516a,0x3b0ca5ef,0x3a6881fc,0x3b137c2e,0x3b34a77b,0x3b84c28a,0x3b322e4e,0x3b3f3aee,0xb92b654c,0xbaa3157a,0xba3a790a,0x3b80e637, +0xbabcb56b,0xbb48e430,0xba1eb5e1,0xbbcedc13,0xbbe22106,0xbb9e8499,0xbb40aa1d,0xba086998,0xba0af857,0x3b2ae7ac,0x3b3fb1b0,0x3b62084c,0x3a8b9aac,0xba502e81,0xbb04487d,0xb9954525,0x3aa6ba72,0x3b9bf777,0x3bd7895d,0x3bf0f8fd,0x3bbba59b,0x3b80d3a1,0x3b6e3beb,0x3b79df66,0x3b4df3ed, +0x3b2905ea,0x39fb42e5,0x3b55c087,0x3b9586bf,0x3be74de7,0x3ba9d90e,0x3b536d4c,0x3ade996f,0x39d5c8c4,0xb9ecb76b,0x3b9c5acf,0xbb6fd345,0xbb9bc6bf,0xba1d48fa,0xbba611e9,0xbbbc1975,0xbb9f2256,0xbac6f3a6,0x3a34c01f,0x3abb4312,0x3b448da7,0x3b83d49d,0x3b956935,0x3ab249d2,0xba03514d, +0xbaee2b66,0xb95cd275,0x3b14e7be,0x3be2c522,0x3c129f96,0x3c1ee606,0x3be859e3,0x3ba0bfa3,0x3b124ae0,0x3a45e1ca,0x3b57d5f5,0x3b56c321,0x3af17766,0x3b99183a,0x3bbe2b58,0x3bee1b03,0x3b9d56fe,0xbb0a5a7d,0xbb92cbb8,0xbbe0ae30,0xbbb52829,0xb9ac147a,0x3b90c6d4,0x3bc21d97,0x3b96da6d, +0x3ad4c3dc,0xbaa9dba1,0xbaba63ba,0xbad8e7c3,0xbaaa8dae,0x3b8ef3ee,0xbb8a73af,0xbbc03721,0xbafe82fe,0x39c754cc,0x3b795232,0x3b97cb97,0x3b22e514,0x3986bc00,0xbb87a9da,0xbbfe5c4e,0xbbbf9aa3,0xbbd0c435,0x3c0d7b3d,0x3c752d3d,0x3c43bfc1,0x3c01d403,0x3aca0a5c,0xbbaf6371,0xbbb2f5ed, +0xbb8747e4,0xbb223395,0xbab4c39b,0xba66a9ae,0x3bf71f73,0x3c86d602,0x3c28d13c,0xbb526e71,0xbc1af14b,0xbc278523,0xbba3c9ff,0xbb0ee992,0xb9339865,0xba938cdf,0xbab330c7,0xbb2439cc,0xba6e26c2,0xba903f55,0x3a3e4b71,0xb61cf53d,0x3b38c295,0x3b5239c6,0x3b91ad0b,0x3a716a49,0x3a565914, +0x3b495e08,0x3ba7fc1a,0x3bdbe658,0x3bceeb97,0xba2e41a9,0xbbb2f230,0xbc5e90ef,0xbaf3a0a3,0x3b901a09,0x3bb98a9d,0x3bd313db,0x3a351e91,0xbc2f5724,0xbbc439a4,0xbb5ed800,0xbc992d62,0xbc987107,0xbc24d1a0,0x3919858a,0xbbd1f742,0xbbf08e28,0x364e1ac6,0xb9ef8f9c,0xb94e7539,0x39499eea, +0x39956725,0xb9c29697,0xbb333f0d,0xbacf63bb,0xba7b6b78,0xba6d7232,0x3afc2bd1,0x3b59cf48,0x3b53bb42,0x3ab5bc60,0xb97d9456,0xba640f5e,0xbab41541,0xbae8517b,0xb9dfa926,0xbb3a0da0,0xbb5f0776,0x3b1bd9b0,0xba93d5cd,0xbb3c5ad7,0xbb4068cd,0x3ab5d0ad,0x3ae52661,0xbb9b4e20,0x3b062e7d, +0xbb285cff,0xbc857aa8,0xbc60441f,0xbc0e0de9,0x3b9d5f6c,0xba68d907,0x3a84b778,0x3af84198,0xbaa05d21,0xba9716d2,0xb9358274,0xb7b51e63,0x38c33488,0xbacf60c9,0xba61b249,0xba7d38e0,0x39c8c786,0x3a3df329,0x3a47383f,0x3a199a70,0x3a64f585,0x388cafb7,0x395d05aa,0xbad3e1a0,0xbb02a861, +0xbb3ae501,0xbaae6c44,0xb9cc5631,0x3bd8942c,0xbabe5ecf,0xbbda1966,0xbc04e706,0xbb3b8e32,0x3a8df714,0x3b6128a2,0x3b810945,0x3b30acac,0x3c2b1bf7,0x3c96c89a,0x3c4e5ad5,0x3ba731ed,0x3b5896f9,0x3b937a94,0x3b42c57a,0x3a8f4819,0x394d09f4,0x3791b2ff,0xba7d9cf0,0xb9d2836f,0xb6564b1f, +0x39f48324,0x3a9697a1,0x3abfce86,0x393ce166,0xba60260e,0xba8f9a37,0xba5fbb9b,0x3a122097,0x3b61a547,0x3b48c9f3,0x3b7d5a2c,0x3b41785a,0x3b10d715,0xb8a38a3d,0xbbbf7605,0xbab7b258,0x38f76859,0x3a833887,0xbb31bff4,0xbb4f4b58,0x3b138001,0xbab85f32,0xb9766f97,0xbb65db6c,0xbbf25518, +0xbba0c47e,0xbb1dc01a,0xba91190e,0xba88bcc0,0x3ab18bee,0xb96ea9c9,0xbaee549a,0xbaee4f81,0xbaf95472,0xba713c80,0xba882745,0xba938ebe,0xbb039ba2,0xbba44798,0xbbb7830f,0xbbbf14da,0xbbb2cf96,0xbb9def0b,0xbb80e54f,0xbadb2c78,0x3a0c9bbe,0x3b3a0b50,0x3b800300,0x3bc0a1c2,0x3bdfe138, +0x3c02d6c0,0x3bbeade8,0x3b09b658,0xb933ebae,0xba054fc8,0xba8738b9,0xbb2f20cd,0xb91d6e81,0xba49820a,0x3b29a592,0x3b685049,0x3b1abd4e,0x3b0b4d48,0x3aaa1ca0,0x3aa0ba71,0x3aa42620,0x3ac3c19b,0x3b04db0a,0x3af2ba6e,0x3b4992ae,0x3b13af7b,0x3a200ca9,0xba68a8c3,0xbaee7a72,0xbb19f604, +0xbb0fd172,0xbb034743,0xbac9aab9,0xbac7ea01,0xba8c4a97,0xba7482b8,0x3a78f446,0x3b0240cf,0x3b4cbbb4,0x3b9817c1,0x3ba789e5,0x3b9e4aab,0x3bcef6c1,0x3bf878ca,0x3c1051d5,0x3bdb70f8,0x3b92cffe,0x3b2ba6ed,0x398e1fd5,0x3b2f43bd,0x3ae93b1e,0x3a8fd64a,0x3afeaee1,0x3b3e0332,0x3b70ee2b, +0x3b8034d8,0x3b81632e,0x3b6de313,0x3b5d0963,0x3b21ebca,0x3afd94ea,0x39e49b5f,0xba60c18a,0xbaf0f4c0,0xbb2f3495,0xbb56a84f,0xbb3933bc,0xbb2522e0,0xbb02a05d,0xbaebb202,0xbae2d347,0xbb03be12,0xba5fce14,0x391d474c,0x3a7be31f,0x3b0e4009,0x3b69a891,0x3ba5f8d0,0x3b9695b0,0x3b8697a7, +0x3b97a630,0x3b828e33,0x3b63786c,0x3b40d74a,0x3b51d032,0x3a292894,0x3a5d2adc,0x3aba7013,0x3afa3299,0x3b03d9ef,0x3b02bdfc,0x3b2443e4,0x3b5a782f,0x3b031230,0x3a806129,0x3865b479,0xba43155f,0xbb023483,0xbb2323cd,0xbb306e95,0xbb34913c,0xbb590ce5,0xbb485fca,0xbb47693e,0xbb3dee3f, +0xbb43cb59,0xbb3e877e,0xbb44612c,0xbb25f403,0xbb134dd3,0xbae43cec,0xbabdd4f9,0xbaa9a265,0xba3ee5c1,0xba78ba35,0xba8281a4,0xba86f76c,0xba8c1f16,0xba26184c,0xb903699c,0x391783b2,0xbb921b0c,0xbb93454f,0xbbb09d21,0xbbac139e,0xbba9acfd,0xbbae8ebe,0xbbaad928,0xbbba537c,0xbba710fa, +0xbb9c40fd,0xbb94dc31,0xbb8ed8fb,0xbb82711e,0xbb87ec24,0xbb812540,0xbb6ef9e7,0xbb7036b0,0xbb62f483,0xbb601d1f,0xbb5ad771,0xbb3e2c18,0xbb3cbd3b,0xbb2abb85,0xbb265646,0xbb1b105d,0xbb0ba29c,0xbb3229ec,0xbb390f37,0xbb503501,0xbb68fbd1,0xbb5d707f,0xbb711022,0xbb7181e4,0xbb622ad0, +0xbb803ffe,0xbb8c2320,0xbafffe6f,0xbaf009d7,0xbae8860b,0xbae193f2,0xbae6f9d4,0xbaaead78,0xbaab1d11,0xbac6f67e,0xbaf1680e,0xbb0851de,0xbb12cf35,0xbb1d67ff,0xbb2692dd,0xbb27e63a,0xbb230aeb,0xbb265ba2,0xbb2b9f70,0xbb293071,0xbb26a1d6,0xbb2a602b,0xbb26ecc8,0xbb26cc37,0xbb22bd0e, +0xbb21bda4,0xbb1cb34e,0xbb134353,0xbb1b4c37,0xbb16a511,0xbb1c0d59,0xbb1df827,0xbb1d2963,0xbb29298c,0xbb24e533,0xbb175dec,0xbb12f36f,0xbb07e55c,0xbb7258b6,0x3a975c99,0x3a5e1ba4,0x3a4c4b2d,0x3a4e83af,0x3a35fe6b,0x3a66e4bf,0x39bd43b6,0x39a3b905,0x3a140e5a,0x39390238,0x38d1e06d, +0x395e459b,0x39afae04,0x39eb8466,0x39d3c94d,0x3a390f0f,0x3a5f6216,0x3a7d70cd,0x3a458cdb,0x3a3809ba,0x3a14ac6c,0x3a3b3ca1,0x3a6b5ccc,0x3a9dd881,0x3ab8fc51,0x3ab5b63b,0x3a8fc1f8,0x3a7a27a3,0x3a44b64a,0x3a2da474,0x3a56d84c,0x3a5da9ed,0x3a333044,0x3a5ac6c0,0x3a6ac1b3,0x3a8ec0b1, +0x3a665e94,0x3abcf850,0x3a2a823f,0x39a753a5,0x39cfa961,0x3ac55f23,0x38b10635,0xb9c99f5a,0xb8ccf4b3,0xbae1c816,0xbaef730b,0xba96f888,0xba3eb964,0xb96b6495,0xb84bf891,0x3a972dbb,0x3ab9f2a7,0x3ac12c2b,0x3a8011f1,0x39e0d279,0x3803c43b,0x3a027a9f,0x3a93c967,0x3b1cf358,0x3b22e5e6, +0x3b246208,0x3b161130,0x3af1b8b3,0x3af63f61,0x3b008c1a,0x3ac9ab19,0x3a8b82ad,0x3a4725e5,0x3ad5f277,0x3b11de32,0x3b491ded,0x3b137897,0x3af71ba0,0x3a8da1c3,0x3a17d068,0x3943bbce,0x3ad45f87,0xba91d580,0xbaeec3b4,0xba3e3b8a,0xbb580d0d,0xbb759929,0xbb1f3431,0xbb06dd3d,0xba83d435, +0xba6f2b90,0x3aa22fc9,0x3ae66df3,0x3b040b2b,0x3a8d1189,0x3a046708,0xb9026454,0x3a1a355a,0x3af0d23e,0x3b823357,0x3b9d5952,0x3b9d2c33,0x3b582574,0x3b3760ef,0x3aebcb48,0x3ad22397,0x3ae7c6c6,0x3aec7682,0x3a705f55,0x3b1f5f3d,0x3b404d97,0x3b84497f,0x3b2c080e,0x3b2938dc,0x38f1dc79, +0xba894476,0xba518cfe,0x3b3a244c,0xbac2727d,0xbb47a5ed,0xbac5ab34,0xbbda73ed,0xbbf48bec,0xbb9b2fde,0xbb72bfe7,0xbaa9b653,0xbaa50aaa,0x3b0d27a9,0x3b1e0004,0x3b36e773,0x3ab8619c,0xb972e52e,0xbabd39ce,0x395d0115,0x3ae251c0,0x3bae93f1,0x3bd83835,0x3be707a3,0x3b99c002,0x3b7ff00f, +0x3b745d39,0x3b97425f,0x3b16d916,0x3ae5f995,0x3a53c631,0x3b7b7696,0x3baa565b,0x3befa876,0x3b9fcf8e,0x3b2ee18d,0x3ad3dd3d,0x3a04644e,0xba069803,0x3b621c92,0xbb6f6b92,0xbba6dcca,0xbac35352,0xbbc6e226,0xbbdd6c8e,0xbb91524b,0xbb1e2a97,0xb9d07847,0x3a4164aa,0x3b2b1317,0x3b73430b, +0x3b873326,0x3ade25fd,0x3a0970b3,0xba5b4276,0x3a56d991,0x3b4cb565,0x3bfc99ff,0x3c184ccc,0x3c1971a3,0x3bbc7271,0x3b9639ad,0x3b189544,0x3acc1e9d,0x3b372e63,0x3b2ce6e8,0x3aee27c3,0x3ba2b8d9,0x3bc3ff63,0x3be8ac98,0x3b9478ae,0x3a7e3477,0xbb161b2d,0xbb8f2c1d,0xbb67cd05,0xb89ddd9d, +0x3ba549f8,0x3be7b12f,0x3bd723ac,0x3b3ab5a7,0xbab430d9,0xbaddaec6,0xbb148bf4,0xbae5a21c,0x3b9b354c,0xbb98a936,0xbbcebf0c,0xbb83a8a3,0xbb183857,0x39e86f74,0x39ec1ed4,0xba9b3f29,0xbb1c752a,0xbbdb7d30,0xbc0d0843,0xbbb97ae0,0xbbc430ee,0x3c19e798,0x3c6bdef3,0x3c1c7f05,0x3bcbc2b6, +0x396827b2,0xbbd5e1af,0xbb957a51,0xbb36e0ae,0xbb138f7b,0x3a8ee5de,0xbace0728,0x3ba93579,0x3c7e5f18,0x3c2ddfe2,0xbaa8a565,0xbc14094f,0xbc32b2fe,0xbbb546dd,0xbb2c81a8,0xb8cd060c,0xba59d5e6,0xba64c7f9,0xbb137831,0xbad55b27,0xba3089e9,0x3aa1c2c7,0x3a542b6b,0x3b35f252,0x3b4c957c, +0x3ba67b8d,0x3ad2102e,0x3afad3a4,0x3b7e3f78,0x3bdef54f,0x3beb0d13,0x3b638506,0xbb31be86,0xbbda5e86,0xbc5c05f3,0xba58f36f,0x3ba8d740,0x3b96d03a,0x3b6634f2,0xbb22273e,0xbc36e9dd,0xbbc4151d,0xbb943888,0xbc80d577,0xbc9677de,0xbc2f4d53,0x3ad9de76,0xbbe13af3,0xbc0e877c,0xba7abb6d, +0xb9ccc557,0x39014b18,0x38e9600d,0x39956bf3,0xb9be7d94,0xbb2d0da1,0xbac83983,0xba81ff59,0xbab74ccb,0x3aba501c,0x3b34e668,0x3b3b6f8e,0x3a865b8f,0xba05c299,0xbabad890,0xbab248d2,0xbaf3856b,0xbacbfc87,0xbb4f3fea,0xbb5e580f,0x3b729af0,0xbb2d9f32,0xbba1a890,0xbb2bd921,0x3a7a34ff, +0x3b088038,0xbb09623c,0x390c4825,0xbb4ecba4,0xbc76023e,0xbc5eaeb1,0xbc0a95d8,0x3bc374ff,0xbab60f93,0x39687a36,0x3aebd424,0xba7d2490,0xba4dd831,0xb8bbc92b,0xb906b790,0xb918275c,0xbab5e42a,0xba8d7ab5,0xba95c2d1,0x385d6e53,0x3a40e9f1,0x3a8466f7,0x39e684d9,0x3a565807,0xb8fe169a, +0xb9a3d26b,0xbb14d7df,0xbb324739,0xbb5b137c,0xbaa530a4,0x38a01021,0x3c06b332,0xbb64ea50,0xbc1011e7,0xbbf522a9,0xbaa91d7b,0x3b743fa1,0x3be050e5,0x3b5344e7,0x3a03b871,0x3b6dfbc1,0x3c7cd775,0x3c49c55d,0x3bcc2887,0x3b4a9937,0x3b812c93,0x3b69a06d,0x3a8df31f,0x3926951a,0x3927ed23, +0xba3b4469,0xb9c1e9ff,0xba28ed55,0x3a09d1aa,0x3ac10720,0x3b131841,0x3a70159e,0x34bbc9e1,0xb99d0511,0xb8c40546,0x3aaedc21,0x3b7dcb9f,0x3b71cfd6,0x3b6b1b8f,0x3af15b8e,0x3ac47f0f,0xb9953d1a,0xbba13764,0xb9644ede,0x3a8f5bc5,0x3a4ca8a5,0xbaa97de3,0xbac0eb2c,0x3b898a7f,0xba8fcb38, +0x3b13ff97,0xb9cdf4d2,0xbbbcb781,0xbb98985c,0xbb2ab61e,0xba39c249,0xba2626af,0x3a462056,0xb9e03211,0xbaf28091,0xbaead61d,0xbafbc0f6,0xba679f71,0xba81cbed,0xba3a9f0d,0xbabf0f1b,0xbb8d33e1,0xbba99158,0xbbb482fe,0xbba7eb63,0xbb9930e8,0xbb884030,0xbb0d7d13,0x38b51be3,0x3b1a8724, +0x3b5b655b,0x3bafb25f,0x3bc99aca,0x3beb4d05,0x3b8e2ae2,0x3a69113d,0xba2b3cbf,0xba8af499,0xbaa26a17,0xbb0fdeb0,0x3adc9acc,0xbb41aeeb,0xb9c72805,0x3a99bd59,0x3a3d29e6,0x3a370d5c,0x391a78e7,0x399c9760,0x39b1f381,0x3a25e2dd,0x3a7d05fb,0x3a75979a,0x3b1f0884,0x3b106843,0x3a8924b5, +0xb99c63c1,0xbab38497,0xbb0a3fb9,0xbb200ac3,0xbb1c0663,0xbaf01e42,0xbabcaf7b,0xba24dcef,0xb9f39078,0x3ae5c845,0x3b427cfe,0x3b89aecd,0x3bc03ecb,0x3bd173ed,0x3bcb77b9,0x3bef3478,0x3c0219dd,0x3c07b64c,0x3bcdb1b7,0x3b828598,0x3abdd107,0xbaafd19f,0x3b3b474e,0x3b2bdc9d,0x3ae83add, +0x3b173ce7,0x3b650c49,0x3b86fae0,0x3b8a441e,0x3b8495fc,0x3b77d61f,0x3b6d405b,0x3b40e029,0x3b218256,0x3a978236,0x392807a6,0xba7c13df,0xbb032f89,0xbb4202bf,0xbb2dac6c,0xbb1f4f68,0xbb02ae87,0xbae8aded,0xbad095ed,0xbaebc49e,0xba166123,0x39f8f7a0,0x3aacf6e8,0x3b34bf57,0x3b8d3f1e, +0x3bc5032f,0x3bb4a04c,0x3ba36c72,0x3bb0fe01,0x3b983399,0x3b779d89,0x3b453806,0x3b556aaa,0x3b115f61,0x3b149c34,0x3b399021,0x3b5a3aaa,0x3b606c3c,0x3b549062,0x3b67890c,0x3b86b611,0x3b46d964,0x3b041f36,0x3ab2466b,0x39538076,0xba893a3a,0xbae1cadf,0xbb09e626,0xbb0fe47e,0xbb3d3916, +0xbb2bf9cf,0xbb28b1ea,0xbb26a1b0,0xbb2deb1b,0xbb2d4566,0xbb353940,0xbb208508,0xbb18d5e4,0xbb0216ff,0xbaaf252d,0xba820cef,0xb92b2c3b,0xb9a2e497,0xb9819737,0xb98da618,0xb94fc92b,0x3a1d6164,0x3ab97c30,0x3ae2d47b,0xbb79db32,0xbb6d417e,0xbb92bc73,0xbb8f4877,0xbb8e7d42,0xbb88eb03, +0xbb840fca,0xbb8bf41d,0xbb88bfb5,0xbb87734c,0xbb8b22a5,0xbb8a7807,0xbb8476e5,0xbb903b98,0xbb840768,0xbb703ac2,0xbb6e0bc5,0xbb5e95f4,0xbb5f3d39,0xbb4f8562,0xbb338d3a,0xbb30b46b,0xbb1e4c24,0xbb1885e4,0xbb083b60,0xbae92326,0xbb224a2c,0xbb28c500,0xbb4153b8,0xbb5625c8,0xbb47c1bc, +0xbb5316e0,0xbb4bc567,0xbb4e4e2f,0xbb6aa0e6,0xbb76bb60,0xbac147ce,0xbab3556b,0xbab15f7b,0xbaac581e,0xbab99d64,0xba7725ec,0xba80da60,0xba9498a8,0xbac0f035,0xbadf271c,0xbaf84433,0xbb09fefb,0xbb1857ca,0xbb209a9f,0xbb175c50,0xbb192c4f,0xbb237465,0xbb1c1ba6,0xbb16a23b,0xbb185f3b, +0xbb18ae75,0xbb1abb0f,0xbb1964e8,0xbb1bd546,0xbb1a8d5f,0xbb134503,0xbb18762a,0xbb0de7e3,0xbb0faf64,0xbb0dc1d6,0xbb0aed2c,0xbb146ee3,0xbb0d69a9,0xbafacd0d,0xbae13ad9,0xbac79ed3,0xbb653b3c,0x3a8916bf,0x3a4c5048,0x3a3fac0e,0x3a423f28,0x3a265370,0x3a357b39,0x39a301f2,0x398a6202, +0x39d601cf,0x39312a01,0x39163d5c,0x39801a9a,0x39aa10f3,0x39ce7d7c,0x399f78f3,0x3a22c0c7,0x3a48a3be,0x3a647a0c,0x3a3aaa02,0x3a348850,0x3a16e5a8,0x3a3c906b,0x3a678b3e,0x3a97e9ad,0x3ab06108,0x3aa921a7,0x3a755724,0x3a5d2b55,0x3a3154fd,0x3a3359a2,0x3a45bb45,0x3a42a32e,0x3a1c2046, +0x3a4d174b,0x3a5c2a54,0x3a84a28b,0x3a549b7b,0x3aa072ef,0x3a2dca6f,0x39bd6d5f,0x39ae2ce8,0x3a833536,0x38f290de,0xb9b41ffa,0xba054c87,0xbadfe51f,0xbaf15f89,0xbaa60483,0xba75ae21,0xb9e179c7,0xb9abbc28,0x3a74fed0,0x3a9ae888,0x3a98c0b7,0x3a807047,0x3a129d66,0x3931add8,0x3a1d42de, +0x3a9a980f,0x3b1b5551,0x3b1c5600,0x3b18979b,0x3b0057c1,0x3ae295a7,0x3af330f1,0x3b0a05bf,0x3a9d8526,0x3a320314,0x3a39a6f7,0x3ae47a54,0x3b1992fc,0x3b458ebd,0x3b02e022,0x3adac3ff,0x3a8e3fd0,0x3a26dd5c,0x393c1826,0x3a3f8c15,0xba89a3a1,0xbad94b96,0xbabc28c3,0xbb4e4a6a,0xbb62a379, +0xbb1a9bae,0xbb059ad0,0xbaa26f7b,0xbab46d4b,0x3a80e8f8,0x3ac35fee,0x3ac553dd,0x3a97419b,0x3a49dfb5,0x3986b4e3,0x3a76dd4b,0x3b07c846,0x3b8367f3,0x3b9a8525,0x3b9482fb,0x3b3019e6,0x3b2aebb5,0x3adf1828,0x3b045101,0x3abb288e,0x3ab59d4f,0x3a427ed6,0x3b23ab0d,0x3b451ab2,0x3b7c8527, +0x3b1f80c7,0x3b07dd57,0x39bba7dc,0xba57a1a0,0xba50432a,0x3acc945b,0xbab061f9,0xbb381539,0xbb268e15,0xbbde3cd9,0xbc005364,0xbb9dc27d,0xbb8e9cf5,0xbafe8e59,0xbb088925,0x3adea772,0x3af1404a,0x3af98366,0x3acdf199,0x3973adf4,0xba54def7,0x3a301f4a,0x3b05a6c2,0x3bb36406,0x3bd17089, +0x3bd86c64,0x3b7ecf38,0x3b7d5ef4,0x3b782018,0x3bacd8b6,0x3ac04676,0x3a70605b,0x3a55061e,0x3b89d807,0x3bb7c51c,0x3bec3d9c,0x3b8d9095,0x3b0d3fb3,0x3aca5062,0x3a04b1cb,0xba1c662b,0x3af1b978,0xbb5d54a1,0xbba8227d,0xbb23bf69,0xbbdb5f4c,0xbbeee5ac,0xbb78c702,0xbb42460b,0xbaacc9b4, +0xb9580acc,0x3b12f250,0x3b56e43c,0x3b57f14a,0x3af749dd,0x3ab14ca2,0x391207cc,0x3aed646a,0x3b7a1145,0x3c024fb9,0x3c17de84,0x3c10064a,0x3b98a8cb,0x3b8b008b,0x3b21754c,0x3b232110,0x3b15ea22,0x3af8d70e,0x3ab887dc,0x3ba520c5,0x3bc4d48c,0x3bd95335,0x3b86872c,0x3b7d99d0,0x38c089eb, +0xbab8a455,0xba7efb82,0x3a11dd0b,0x3bbddc9a,0x3c05fced,0x3c03a87a,0x3b83f457,0xba897cc9,0xbacb812a,0xbb16a2cd,0xbaf33266,0x3b9e5647,0xbb9a6749,0xbbcd67b6,0xbbbe6806,0xbb9bd4f0,0xbb410a4c,0xbb6e2dfb,0xbb96cac0,0xbba0f450,0xbc149c9b,0xbc186e4e,0xbbb58179,0xbbb3639a,0x3c177cf7, +0x3c51a7ba,0x3be2e517,0x3b89add7,0xba622cc6,0xbbd87982,0xbb5746f7,0xbab4e4b5,0xbafc4187,0x3b60ef09,0xbadd901f,0x3b46911e,0x3c5b6cc1,0x3c219318,0x3a44a94b,0xbc0cac8e,0xbc3ac600,0xbbbc74f5,0xbb42cfd7,0xb8d032ef,0xb9fb5ffc,0xb9f66f2f,0xbb022b83,0xbb0b96aa,0xb97286a4,0x3acec4bb, +0x3abc24db,0x3b249d1c,0x3b3fa0fa,0x3bb3ab44,0x3b220703,0x3b4d4dfc,0x3b94ffd2,0x3c0281bb,0x3be5b242,0x3a401570,0xbb962994,0xbbf97ceb,0xbc484b07,0x39e92246,0x3bbd1db2,0x3b6b4510,0x3a3e639d,0xbba8976e,0xbc35d0ca,0xbbb3bcdb,0xbbc88a3d,0xbc5043ad,0xbc87de16,0xbc270871,0x3aed2ae0, +0xbbd956df,0xbc127d2d,0xbb11653e,0xb9c8dafc,0x39b59111,0x37ce7dff,0x3993f4ae,0xb99aa993,0xbb1a6716,0xbac5235f,0xba90339f,0xbae92acb,0x3a3ef16f,0x3aeae1db,0x3b086089,0x3a2005b7,0xba2831c8,0xbaeebd2a,0xba9ef7c0,0xbaf3834f,0xbb26f197,0xbb47cae8,0xbb41deca,0x3b8aab0a,0xbb6271ee, +0xbbc52c85,0xbb0b14fa,0x3a12f2a8,0x3b07f413,0x3a81ba01,0xbb0f8eff,0xbb64322d,0xbc4c1c46,0xbc482e2a,0xbbf84319,0x3baf2f6b,0xbab00e96,0xb993f7bb,0x3a7e3f6e,0xba536a91,0xb9eac358,0xb88f06f4,0xb8c2c021,0xb9950ee4,0xba94e9b6,0xbaa538fe,0xbaadc5f6,0xb988e124,0x3a136233,0x3a7157c9, +0xb88bffe3,0x3a1ce4ff,0xb99eb08b,0xba5c83bc,0xbb2dfdce,0xbb4bb311,0xbb6e3445,0xba4d02f7,0x3a32fcc8,0x3c0e44e8,0xbba85570,0xbc22a991,0xbbd1c7e1,0x3a365a6c,0x3bcd62ea,0x3c210a60,0x3b20f642,0x374df1fb,0xbac71001,0x3c37d25c,0x3c302703,0x3be057e7,0x3b115537,0x3b2a340e,0x3b74efdf, +0x3a8df7bb,0x3972eee7,0x399fcfe7,0xb9da1b4f,0xb9d49a68,0xba8f5747,0x3a09f6fa,0x3adbb05e,0x3b35d5d1,0x3ac04597,0x3a4b877b,0x3a099026,0x3a4c308c,0x3b09333a,0x3b823037,0x3b89f2d8,0x3b5a1cee,0x3a73029d,0x3a4ccec2,0xba0a429f,0xbb715cd6,0x3a0c47e8,0x3adb13f2,0x39de69bc,0x3a7bd6c3, +0x3aa962b6,0x3bb60a7c,0x39c202a5,0x3b70c679,0x3b10bb1f,0xbb762d89,0xbb7a94ed,0xbb23ff7c,0xb91b8061,0xb89d1b1d,0xb7f8f94b,0xba0d197c,0xbacc17e8,0xbab444e9,0xbae10f74,0xba50c6c2,0xba4e830d,0xb9a31b0b,0xba6e1698,0xbb59d179,0xbb935213,0xbba3a3df,0xbb9b1230,0xbb8cdfa7,0xbb84b14e, +0xbb1f3f9d,0xb9817480,0x3afa4438,0x3b3dcfd7,0x3b993253,0x3baaf007,0x3bc4debb,0x3b2b605b,0xb9b0431d,0xbab43892,0xbaf154da,0xbae48627,0xbaf77794,0x3b35ccaa,0xbb9666e7,0xbb467302,0xba90dfe2,0xba4db384,0xb9f411a5,0xba483414,0xb9e415bd,0xb985e858,0x384f8030,0x38a558a9,0x38b19fee, +0x3ac73eb4,0x3af65e83,0x3ab0f837,0x395deb8d,0xba6a863e,0xbae58ef5,0xbb2c922b,0xbb355e2b,0xbb11b0b5,0xbabb4e97,0xb98efc3f,0x38c4d19c,0x3b26b2ea,0x3b7df469,0x3ba63520,0x3bdcbc63,0x3bef11ea,0x3becd0f7,0x3bfdec3e,0x3bf91d23,0x3be20606,0x3ba8a04a,0x3b45e43f,0x394c2180,0xbb2a5bd2, +0x3b26a31b,0x3b429371,0x3b0df9b9,0x3b1fb25a,0x3b73bc6c,0x3b8a90ad,0x3b8b3ef5,0x3b7a75f9,0x3b703398,0x3b6de7a9,0x3b5230e2,0x3b3a2902,0x3aea4c93,0x3a933292,0xb8ea8c16,0xbaa9a39a,0xbb2a95e5,0xbb2027c4,0xbb1b20fa,0xbb07653a,0xbaeae163,0xbac33ff4,0xbaca7015,0xb9ad29f9,0x3a348aad, +0x3ac14122,0x3b46bf01,0x3b96c1cf,0x3bcf3543,0x3bbfd380,0x3baf6535,0x3bb7d201,0x3b9baf96,0x3b74e2e5,0x3b40a7d2,0x3b3e6e9b,0x3b6ad249,0x3b6061b0,0x3b7b6d2e,0x3b89534e,0x3b896dd8,0x3b7dab29,0x3b806705,0x3b8b2664,0x3b67ef14,0x3b2f4c43,0x3b1a62d8,0x3a84a071,0xb8fcb60c,0xba635a30, +0xbac2df48,0xbad79e6f,0xbb222486,0xbb105dbd,0xbb08514e,0xbb0ce673,0xbb142bea,0xbb191c06,0xbb231765,0xbb186a95,0xbb1a2011,0xbb0d4540,0xbaa21045,0xba44c84f,0x3987ac3d,0x39a467ca,0x3a1c0a76,0x3a42d59d,0x3a7bd8b5,0x3afeaa71,0x3b3d2fe9,0x3b50d36e,0xbb3d679a,0xbb23a49e,0xbb5a1cfb, +0xbb551e8e,0xbb592df3,0xbb40c74b,0xbb39ed18,0xbb4029a8,0xbb56fdd0,0xbb65463c,0xbb8002b9,0xbb83d97e,0xbb8315cd,0xbb92c51f,0xbb829198,0xbb6b3f8b,0xbb65b38e,0xbb583edd,0xbb5bab8a,0xbb4a8a47,0xbb309070,0xbb29ed55,0xbb161692,0xbb0e239d,0xbaf22fd3,0xbac338cc,0xbb0de976,0xbb0d07f8, +0xbb217c05,0xbb2fbb90,0xbb20fba3,0xbb24368e,0xbb193353,0xbb2c4d70,0xbb40b866,0xbb413849,0xba7d2cf4,0xba653b73,0xba75ad61,0xba75a098,0xba8d4ac9,0xba2b3495,0xba45377e,0xba572bb4,0xba92edf2,0xbaad62cd,0xbac6b889,0xbae5876c,0xbb050f39,0xbb1285e3,0xbb0543a2,0xbb075ea6,0xbb140fcb, +0xbb0a466b,0xbb03bc8d,0xbb050f5c,0xbb076608,0xbb0bc143,0xbb0d6df0,0xbb12c3be,0xbb149d74,0xbb0fa279,0xbb11fe21,0xbb02d529,0xbb00d779,0xbaf404e1,0xbae587fb,0xbaeb64e6,0xbad8d06a,0xbabaad0f,0xba95db6f,0xba76d640,0xbb5485a1,0x3a67db90,0x3a33afaa,0x3a29b563,0x3a2a2102,0x3a10ae9b, +0x3a0180dd,0x39804bdc,0x395b9a74,0x397e03ed,0x39399b4a,0x394e5849,0x3979928e,0x39a78e39,0x39b978e0,0x3952b4d3,0x3a079e1f,0x3a29454f,0x3a45a561,0x3a290494,0x3a26aba8,0x3a0f9fc1,0x3a346fc5,0x3a58acf2,0x3a89d11e,0x3aa0778b,0x3a967ce6,0x3a450b53,0x3a389241,0x3a176c38,0x3a2fe255, +0x3a2ba60b,0x3a1db673,0x39ebed95,0x3a34bb71,0x3a44431d,0x3a6a7b04,0x3a3aaa4c,0x3a7a6509,0x3a258c44,0x39d0198f,0x397e5f45,0x39fe7974,0x39246ebb,0xb9990939,0xba77c405,0xbad97082,0xbaedb680,0xbabdda60,0xba93b669,0xba213d49,0xba206bfd,0x3a38c040,0x3a6b82b6,0x3a59ac3b,0x3a6caaa5, +0x3a277cfd,0x399bb515,0x3a2d2f75,0x3a98d3c7,0x3b1143e4,0x3b11a8a7,0x3b0a9a20,0x3ad6d006,0x3ace66be,0x3ae86e84,0x3b0d6611,0x3a651d88,0x39a8c1a3,0x3a0cf2b1,0x3ae4ee1b,0x3b197179,0x3b391893,0x3adba617,0x3abbb6bc,0x3a8ee1c1,0x3a1f9038,0x38d5fa4a,0xb90189e1,0xba790c0a,0xbabbeb64, +0xbb0e0544,0xbb39c26f,0xbb492d22,0xbb1f6c86,0xbaf9b5d1,0xbab154a0,0xbaeec236,0x3a34afea,0x3a969145,0x3a7c6159,0x3a92369e,0x3a734d9d,0x3a225457,0x3aa0e8bf,0x3b1194e7,0x3b7ae6f7,0x3b9319ec,0x3b887ca0,0x3b0afdd2,0x3b19b638,0x3acda998,0x3b1ac31d,0x3a90c337,0x3a79cb15,0x39ccfcf8, +0x3b2007f4,0x3b42f205,0x3b674732,0x3b0eba8e,0x3ac24252,0x3a1c328f,0xba1b6fc6,0xba495149,0x3991187e,0xba8e4e7d,0xbb1e2dcb,0xbb6e5f08,0xbbdaadbc,0xbc01b890,0xbba7d411,0xbb9de9f4,0xbb201007,0xbb3de5c8,0x3aa2b1f5,0x3a9eea7d,0x3a7d0205,0x3acd9e84,0x3a1cc625,0xb92b13b0,0x3a8acc70, +0x3b129273,0x3bad2d6a,0x3bc712ae,0x3bc82c79,0x3b520f2d,0x3b74365c,0x3b7542d9,0x3bbaadd5,0x3a48f64d,0x3963d707,0x3a0dfa1b,0x3b8e8c78,0x3bbccf53,0x3bde7ac4,0x3b6ecded,0x3ae19942,0x3ac7a896,0x39d3c64d,0xba4256b8,0x393d36bb,0xbb3e48a5,0xbb9fc8a0,0xbb6b6deb,0xbbde175a,0xbbee945e, +0xbb4e57b8,0xbb4b40f7,0xbaff9d47,0xbaa7ced4,0x3af49667,0x3b33c1fa,0x3b133af3,0x3afc3f66,0x3b016baa,0x3a87dbfb,0x3b2e4653,0x3b8e7b76,0x3bfe242b,0x3c12f5a1,0x3c03c7de,0x3b717abf,0x3b74357c,0x3b23d916,0x3b5ca10e,0x3af206cd,0x3a99d58c,0x3a31eabf,0x3ba09bf2,0x3bc0dbb0,0x3bc24efe, +0x3b6a4e5c,0x3bcbf363,0x3b17b1b3,0x3acc939d,0x3ada9a20,0x3abc7419,0x3bd635c4,0x3c1420c1,0x3c10982c,0x3ba58389,0xb9b63437,0xba88794e,0xbaf57d5d,0xbad27745,0x3b971d81,0xbb8d1fcc,0xbbbc07e4,0xbbebdc38,0xbbdb7c84,0xbbc19a6a,0xbbe415b6,0xbbf446a2,0xbbe9b61b,0xbc348b2c,0xbc1fe9da, +0xbbb170ee,0xbb99f1ef,0x3c091991,0x3c2b3350,0x3b8bdb64,0x3b0ba318,0xbad50f01,0xbbb8f1e2,0xbaf889f8,0xb8c83fe3,0xbab029cc,0x3bb17490,0xbabd21a3,0x3ab29f13,0x3c2cd847,0x3c07db08,0x3b3a5c11,0xbc038edb,0xbc3b0261,0xbbb8b22c,0xbb51ef61,0xb98159d1,0xb9593f9b,0xb9345344,0xbae65948, +0xbb1d2f22,0x38fb156a,0x3ae4a140,0x3aebaa89,0x3b0975bb,0x3b30e634,0x3bb78ab2,0x3b5eda5b,0x3b8e8b74,0x3ba6cf59,0x3c08c3d8,0x3bca0491,0xbabeb39c,0xbbc74e2c,0xbc06e2b5,0xbc29ea97,0x3adbbe5c,0x3bc58a15,0x3b244817,0xbadb4368,0xbbe7853b,0xbc2f84fa,0xbb9b6322,0xbc00fbfd,0xbc24def5, +0xbc632eb0,0xbc11f088,0x3a3e8415,0xbbbc5144,0xbc01d15a,0xbb5d0ef8,0xb9b503c7,0x39e21d90,0xb7aff050,0x3990623a,0xb912c47b,0xbafbb35d,0xbac198d8,0xbaa24a70,0xbb0446bc,0xb6da2df7,0x3a2b0b8d,0x3a8f3854,0x3974b19a,0xba296aa4,0xbb073986,0xba90b437,0xbafb833b,0xbb5dd4c4,0xbb29bdd8, +0xbb140198,0x3b800ca0,0xbb789dbc,0xbbc974f0,0xba65ad7a,0x399a4c0f,0x3adc5843,0x3b823c97,0xbb9355a4,0xbb5c98d8,0xbc111384,0xbc250ad4,0xbbd4dcd1,0x3b4852b7,0xba566338,0xb9d6e5aa,0xb95cd00c,0xba34a6db,0xb95fcafd,0xb8fd40aa,0x3770acdb,0xb994458d,0xba553fec,0xbaab9248,0xbabed15c, +0xba00f590,0x39a24391,0x3a217a12,0xba3067bb,0x398dab29,0xba0652fb,0xbab5c365,0xbb378da3,0xbb4fec4b,0xbb7cda03,0xb6d5f892,0x3aacaec5,0x3c02af22,0xbbd18ce7,0xbc23f3fb,0xbb8b4bcc,0x3b37e220,0x3c06c5e2,0x3c42cb6a,0x3af231d2,0x3ac2553f,0xbb6db9fa,0x3bcfd945,0x3bf9c6c6,0x3bd402cc, +0x3a775676,0x3a7287f0,0x3b5c7cb9,0x3a8057ea,0x398d859c,0x399ae5a2,0xb8b3a200,0xb9fe0226,0xbaa33fd5,0x39edd0ee,0x3ae4c293,0x3b4b06f7,0x3af174b8,0x3abd1e17,0x3aaa7db7,0x3ad16ee0,0x3b315502,0x3b77b803,0x3b900daf,0x3b479c80,0x39a9ce2e,0x38f43880,0xba65bcc6,0xbb2dbc00,0x3a43063b, +0x3af40a8f,0x39a86c8e,0x3b60bc98,0x3b886e55,0x3bc2ded5,0x3b37405d,0x3b81821f,0x3b7bee78,0xbad0756f,0xbb1e8620,0xbb001418,0x39e13682,0x39c321f9,0xba45cf1e,0xba0935be,0xba8ee451,0xba3928b7,0xbaaea7a6,0xba284be9,0xba0c0def,0x37a6df49,0xb9cbb594,0xbb10e1c1,0xbb6ac46a,0xbb8c5455, +0xbb8cc58e,0xbb751cf7,0xbb6ff0f6,0xbb1f5b43,0xba0088b2,0x3ab89c43,0x3b229417,0x3b72a30f,0x3b819f31,0x3b924f72,0x3a3c7e44,0xbad1b3df,0xbb15ffa0,0xbb3a7a65,0xbb1b8b75,0xbad3793f,0x3b516e49,0xbbafb347,0xbba11c66,0xbb42c555,0xbb08ef89,0xbab6cedb,0xbabd92be,0xba804c10,0xba21b233, +0xb9a878c8,0xba116fe9,0xba1c58a0,0x3a0fc77a,0x3aadefd8,0x3abf7e47,0x3a222344,0xb9e04ea3,0xbaab9406,0xbb306809,0xbb4849a6,0xbb28de7c,0xbac8d68f,0xb90d7cb0,0x3a0d8034,0x3b47c6be,0x3b9175ae,0x3bb7ba42,0x3be9e0cc,0x3bfb5391,0x3bfa737b,0x3bf6cc98,0x3bd7b233,0x3b9e012e,0x3b5c50b8, +0x3acd7b0c,0xba96b516,0xbb5b003f,0x3ada34a3,0x3b2d4bf1,0x3b0994cd,0x3b11f621,0x3b635039,0x3b7f5fbb,0x3b80b36a,0x3b569766,0x3b55dee7,0x3b5c77bd,0x3b556488,0x3b441403,0x3b150111,0x3afce6a4,0x3a1dde9f,0xba27c1d7,0xbb11c59d,0xbb10666a,0xbb154689,0xbb0a6839,0xbaf0d66f,0xbabe08be, +0xbaaea95a,0xb9519fd0,0x3a44a455,0x3abe4a2a,0x3b45e65e,0x3b937902,0x3bc7c0b3,0x3bb9299c,0x3ba99f87,0x3baab163,0x3b88bca5,0x3b4f0664,0x3b22ae87,0x3b083151,0x3b9192cd,0x3b8759aa,0x3b8edc50,0x3b916128,0x3b8dd495,0x3b7f5c71,0x3b71f2eb,0x3b78dde3,0x3b6af3f3,0x3b44763e,0x3b4bbeb6, +0x3adb2196,0x3a43abd5,0x37bfb8f7,0xba627ab5,0xba94688a,0xbb08f93c,0xbaed981c,0xbad16f53,0xbae8a4fb,0xbaf5f346,0xbb0594c0,0xbb11a376,0xbb0f46d6,0xbb17fd8e,0xbb148ab0,0xba9a17be,0xba1e59c6,0x3a082123,0x3a5af542,0x3ab6b2f8,0x3aeeb55a,0x3b0e9157,0x3b4c016c,0x3b80d228,0x3b88cc28, +0xbade6d83,0xba96e7b1,0xbafcfb36,0xbaf60ca8,0xbb064482,0xbad144bf,0xbac97b84,0xbad9f45c,0xbb177ebf,0xbb37d434,0xbb6175b0,0xbb6d107e,0xbb72112e,0xbb89b0ef,0xbb71b61a,0xbb5aa73e,0xbb55855a,0xbb4f9ca0,0xbb5b047b,0xbb4d4cab,0xbb3667fb,0xbb2c6474,0xbb17d970,0xbb0efbd3,0xbaee49ae, +0xbabaac0f,0xbb00b53d,0xbae7df99,0xbb00bcce,0xbb078a9a,0xbaf4fb90,0xbaf0362c,0xbad37920,0xbb04dbb9,0xbb080509,0xbaf41ef9,0xba12680e,0xb9ee4943,0xba1b0771,0xba29c043,0xba56d05c,0xba013f68,0xba28ca26,0xba304f0d,0xba6aeb5f,0xba845a52,0xba9866eb,0xbab73d9d,0xbae002d5,0xbaff460c, +0xbae1b279,0xbaead613,0xbb02eb5d,0xbaf194c4,0xbae5d7e6,0xbaeb4280,0xbaf22764,0xbafee210,0xbb03c15b,0xbb0b1578,0xbb0f2a04,0xbb0c987e,0xbb0cbd40,0xbaf53c8b,0xbaea8c04,0xbad2928e,0xbab87cea,0xbaacb363,0xba959fa2,0xba7ec8d0,0xba2db78f,0xb9fce074,0xbb47e46d,0x3a46b5d0,0x3a228dd9, +0x3a1e828d,0x3a12db3b,0x39e8ee86,0x3991d840,0x395d9f1a,0x3927dab6,0x38382509,0x39110e0d,0x39412ae2,0x391b0a04,0x398bd164,0x398cc89e,0x388bfaba,0x39d1293a,0x3a0b7953,0x3a1a3367,0x3a0fbecd,0x3a171fac,0x3a0f465a,0x3a30de1a,0x3a4ebd73,0x3a7a5ea2,0x3a923e0c,0x3a868513,0x3a1f6355, +0x3a1c2386,0x3a05ceeb,0x3a326257,0x3a1a9704,0x3a028af2,0x39b0e28e,0x3a23fe1a,0x3a32fc73,0x3a4ed182,0x3a26f230,0x3a3decb7,0x3a24feb5,0x39c30260,0x391f9cc3,0x37ac5144,0x39609b50,0xb96e1061,0xbab0dae9,0xbac65cc0,0xbade3d84,0xbad6daa2,0xbaa38f34,0xba4011e0,0xba627171,0x39e14781, +0x3a1f41db,0x3a09fad7,0x3a4c7eb7,0x3a2c85af,0x39eea438,0x3a43bbe5,0x3a9a0ff2,0x3b06f2da,0x3b08c2a7,0x3aff1ba7,0x3ab85b4f,0x3abea90a,0x3ae0b490,0x3b10fa7a,0x3a2c08ad,0x38a95374,0x39c4d440,0x3ae26264,0x3b1692af,0x3b28b307,0x3ab56a3f,0x3aa3abaf,0x3a9618f6,0x3a034cb2,0xb5f48373, +0xba555c3e,0xba53bb41,0xba9a0069,0xbb350c75,0xbb212d22,0xbb2c279a,0xbb2c24ad,0xbad848b6,0xbab1fa37,0xbb0d21ec,0x39bb577c,0x3a455e51,0x3a02c221,0x3a7f3500,0x3a8050c4,0x3a7d2c1b,0x3ac54a10,0x3b1a8f0c,0x3b6b3c16,0x3b8a7af4,0x3b78a003,0x3adb606f,0x3b07e58e,0x3abf2848,0x3b314f18, +0x3a6e64b3,0x3a29f8bc,0x38ce9382,0x3b1c4e3d,0x3b3e9229,0x3b4d422c,0x3afcab21,0x3a76c258,0x3a599702,0xb9e29c39,0xba495e8c,0xba5e2422,0xba4bb88e,0xbaff368c,0xbb9a9964,0xbbcdc78d,0xbbfa75c8,0xbbb8dc46,0xbba45dd9,0xbb37c25d,0xbb6c6780,0x3a41ca15,0x3a0ea83e,0x390ec256,0x3ab83fb4, +0x3a5a4d47,0x39efa3ed,0x3abd3158,0x3b1f387b,0x3ba350fb,0x3bbd21ce,0x3bba2d18,0x3b2fb404,0x3b68ca39,0x3b7123fa,0x3bc59c4e,0x39ae11de,0xb9634072,0x397e3074,0x3b8fb30f,0x3bbbf294,0x3bc9f629,0x3b4418cd,0x3abc0569,0x3ace3f1b,0x39463de3,0xba70fd28,0xbaaa2ff6,0xbb178e30,0xbb902b7b, +0xbb96243f,0xbbce5bde,0xbbdb61f7,0xbb26a218,0xbb371e9e,0xbb0d5618,0xbb14dae1,0x3ab8ed44,0x3b081a29,0x3a989aed,0x3aed859f,0x3b168610,0x3af06bae,0x3b5d6590,0x3b9cd209,0x3bf1240c,0x3c0b7e5b,0x3bed5075,0x3b3ae9db,0x3b4809ae,0x3b21963b,0x3b8aaf07,0x3ad43afa,0x3a2dc199,0x389f2f14, +0x3b9b5f79,0x3bba8850,0x3ba6bb77,0x3b4701fb,0x3c0204c1,0x3b8c4742,0x3b868fba,0x3b80f75d,0x3b1df74a,0x3be9c226,0x3c1b0bf9,0x3c0fc3fb,0x3bbc4f73,0x39f7258f,0xb9a80e41,0xbaa22a44,0xba90a555,0x3b84d7a1,0xbb5fabf3,0xbb9bb78d,0xbc0536f8,0xbc037f66,0xbc058412,0xbc15d8c7,0xbc1baf68, +0xbc10898a,0xbc4868b4,0xbc208200,0xbba4f119,0xbb53c225,0x3befc5e9,0x3c022c78,0x3afc0973,0x39a7256b,0xbb049b42,0xbb80482b,0xba237cbf,0x3a8c1c73,0xb98a8de6,0x3be5ea3e,0xba67f6e8,0x39aa66cb,0x3bf4dc89,0x3bd17882,0x3b97a59d,0xbbebbe47,0xbc303a72,0xbbaca1bb,0xbb559557,0xb9ff93e1, +0xb8b236c5,0x38ee7656,0xbac1e226,0xbb208b91,0x39a8ecb7,0x3ae15f80,0x3af97721,0x3ad4c0b0,0x3b1e4c8a,0x3bb0fecc,0x3b8cd147,0x3bb1d887,0x3bb36022,0x3c0178a7,0x3b9c5f49,0xbb437f51,0xbbed0438,0xbc0b481d,0xbc052235,0x3b39c007,0x3bc87777,0x3ae94f58,0xbb5a52bc,0xbc05ce21,0xbc26be69, +0xbb8003b5,0xbc169e5b,0xbc006618,0xbc34c3c0,0xbbf230db,0xba9c7e99,0xbb8f060b,0xbbc5da80,0xbb82ae92,0xb8f47c2f,0x3a03183f,0xb8f22f2c,0x398aa731,0x38d08c65,0xbab93a7f,0xbab4dcb9,0xbaadd377,0xbb0f003f,0xba293f35,0xb9e2ac9c,0x392f9353,0xb79f6459,0xba0ea5d2,0xbb070e55,0xba832d7c, +0xbafcf8bd,0xbb79f370,0xbae500ff,0xbaa93ddd,0x3b496f1e,0xbb7863cd,0xbbb8ccd8,0x3a140cbd,0x39b6b04c,0x3aab2ee6,0x3bdc5fb4,0xbbc97aa5,0xbb39b0c0,0xbb94a883,0xbc017beb,0xbbbc13c5,0xb9c1b0b5,0xb8f4a8df,0xb93d4df5,0xbaa9f661,0xb9fc540f,0xb930a6f2,0xb885b7b5,0xb79ce71d,0xb8ca785f, +0xb9f5bce5,0xba999e53,0xbac09d8d,0xba288ac4,0x38f9bbd2,0x3989a78d,0xba92ed87,0xb7f8a309,0xba349f58,0xbae826cc,0xbb2fc055,0xbb3c89a1,0xbb757af3,0x3a989a4b,0x3b08a316,0x3bd68ff6,0xbbebafdb,0xbc188cfa,0xbabacf04,0x3b9dccb3,0x3c1b9681,0x3c545380,0x3ab9a64e,0x3b87e571,0xbb1ec2e2, +0x3acf138f,0x3b5433f8,0x3ba14660,0xb9d5c25c,0xba0184a4,0x3b265c2d,0x3a473897,0x3952d986,0x381926e0,0x390bb4a2,0xb9f182d4,0xba9874e8,0x39bf0654,0x3adbd9c5,0x3b571987,0x3b0a0801,0x3b02bdc0,0x3b055f6b,0x3b184178,0x3b4ee3ce,0x3b5f4090,0x3b88813d,0x3b321dfb,0x38f93e5f,0xb9ff7a35, +0xbaa9fd59,0xbaee8719,0x3a1e8cf8,0x3b00e834,0x3a8304e4,0x3bbcedb4,0x3bd409d5,0x3ba8eb04,0x3bad623f,0x3b6e3a68,0x3b930331,0x3a0059e9,0xb9f64a7b,0xba7d5c65,0x3a67f9fb,0x3a106073,0xbaa224d1,0xb9d9f604,0xba109ed6,0x370eb07d,0xba4f59a6,0xb9ecbd73,0xb993073c,0x398d2e3c,0x38b5e851, +0xba90d57b,0xbb234e54,0xbb5c34fc,0xbb75da8d,0xbb472bcf,0xbb49e3ba,0xbb08f78e,0xba149f1c,0x3a76a314,0x3b0a4cef,0x3b302cd4,0x3b2dabbc,0x3b323c5d,0xba902b65,0xbb35f280,0xbb56a5ea,0xbb7908c5,0xbb349b08,0xba8ecd21,0x3b60384b,0xbba75b1e,0xbbba7fc2,0xbb887c92,0xbb4a0879,0xbb086a32, +0xbafe8b14,0xbab1ff5a,0xba5485c9,0xba02c7f9,0xba6d31c5,0xba854238,0xb992e2ce,0x3a375fca,0x3aae1b6e,0x3a6cd00f,0xb6d6dbff,0xba56bae0,0xbb285d7a,0xbb51505e,0xbb33d651,0xbad5318b,0xb926fd87,0x3a4bfc88,0x3b54bf0f,0x3b984c4d,0x3bbddd56,0x3be73193,0x3bf4d490,0x3bf33752,0x3bdc96a6, +0x3ba8eed3,0x3b27ffd0,0x3ab43fa4,0xb84e2f7f,0xbb1b26da,0xbb62788a,0x39faddd9,0x3adb0b48,0x3acb192f,0x3adc8093,0x3b3679af,0x3b4ef8f8,0x3b53b9bf,0x3b1cc59a,0x3b2960c8,0x3b3955f1,0x3b4977ff,0x3b3c3273,0x3b24d9b3,0x3b23658e,0x3a94fc17,0xb8aba706,0xbaed157a,0xbafc5617,0xbb0af038, +0xbb0b3d1d,0xbaf4e5e2,0xbabd2a0b,0xba9c0bbc,0xb91b5468,0x3a3e8e24,0x3ab41a0d,0x3b3beb41,0x3b8989b8,0x3bb743ed,0x3ba6c846,0x3b95b0d3,0x3b8c6c26,0x3b475910,0x3b0a90bc,0x3ad43a71,0x3a755aa2,0x3b97e124,0x3b8ce65d,0x3b8e6593,0x3b8797a6,0x3b8129b3,0x3b61aa25,0x3b476f85,0x3b45ae1c, +0x3b587a3b,0x3b479b9f,0x3b69b362,0x3b0f39fb,0x3ac626e2,0x3a6cbafb,0xb9855684,0xba221cca,0xbad881c6,0xbab8ad25,0xba98b402,0xbabbf9eb,0xbac64ef5,0xbae49093,0xbafed2b8,0xbb02b119,0xbb0f156c,0xbb12a5df,0xba880234,0xb9d5c758,0x3a4e022b,0x3aa99321,0x3b08a28b,0x3b3524a5,0x3b513fe0, +0x3b7db6a2,0x3b8d9aa8,0x3b92d9b3,0xb9b60929,0x39851314,0xb9d6c985,0xb9a70803,0xba164e53,0xb8bf3584,0xb82d1f3f,0xb9aa30aa,0xba90eb35,0xbaf72b67,0xbb2fc094,0xbb3d3d81,0xbb46a524,0xbb66e995,0xbb49cd07,0xbb3a57fe,0xbb3bc625,0xbb3d5caf,0xbb57a09f,0xbb4b2010,0xbb3844bd,0xbb2ca5b2, +0xbb18e6ad,0xbb106c89,0xbaf06543,0xbabc4d19,0xbaeb9f75,0xbabb8da0,0xbac3ea85,0xbac0f323,0xbaab1347,0xba9de583,0xba7654a4,0xbaaeceab,0xba870ae7,0xba19eed5,0xb98447e4,0xb8e5e452,0xb9a4db15,0xb9f69ea4,0xba3628ce,0xb9d7bd62,0xba23c9cd,0xba3326f6,0xba58bf6e,0xba55a1c8,0xba6b37a2, +0xba922c8c,0xbabb9c35,0xbadab09b,0xbab84d09,0xbac2b4c0,0xbaeb3120,0xbad3d9c0,0xbac662b1,0xbacd73ed,0xbad60f3a,0xbae4f463,0xbaf0dc59,0xbb00b767,0xbb05fb9a,0xbb055d3b,0xbb036d54,0xbadf01f3,0xbaced3b4,0xbaae7233,0xba8a4805,0xba5a4d81,0xba26f05e,0xba12a3c8,0xb9958f21,0xb924326a, +0xbb37fb9a,0x3a1fd4e8,0x3a0b9f3c,0x3a0bb7a4,0x39e970bc,0x39b2dac8,0x3910876d,0x3934831a,0x3902cf1c,0xb8d73cbc,0x3906376b,0x3945b428,0x3875c12b,0x3977804a,0x396fcd63,0xb75d735a,0x39927a40,0x39cfc311,0x39f87e41,0x39ed32d2,0x3a0054d2,0x3a0598a7,0x3a248827,0x3a3c247f,0x3a5a5db1, +0x3a7e9c4e,0x3a64fb88,0x39eeff15,0x39f2701b,0x39daa775,0x3a2d85ec,0x3a048349,0x39c83043,0x39622321,0x3a0c99a9,0x3a1965d1,0x3a292cfa,0x3a0bc767,0x3a0345b3,0x3a161d84,0x39ac2067,0x38296835,0xb9ad1736,0x3980e0a4,0xb939b8ac,0xbad8f0e7,0xbaaaade7,0xbac684eb,0xbae88e65,0xbaa76308, +0xba5210e2,0xba8950a2,0x3924fd76,0x399c16f4,0x399a41f0,0x3a21734e,0x3a25d48c,0x3a14d6db,0x3a4f25c2,0x3a96c6eb,0x3af62a1c,0x3afabab7,0x3ae46528,0x3a99cfc9,0x3aa63dfa,0x3acea6e8,0x3b0fd24e,0x39e8d2bf,0xb918a06a,0x392fa61d,0x3ad37557,0x3b0cfc98,0x3b11d588,0x3a8f80c8,0x3a8a2290, +0x3a97a08e,0x39b15dd2,0xb9232c20,0xbaa817fb,0xba28efea,0xba6af562,0xbb527c5e,0xbb086e92,0xbb0fb97a,0xbb3cc046,0xbab8ecec,0xbaa9edf7,0xbb1b2876,0xb762f6dd,0x399d6bb1,0x392277a0,0x3a4502f5,0x3a7337f7,0x3aa16365,0x3adbf85b,0x3b1d8fc8,0x3b57bdb3,0x3b7c89ba,0x3b5a7d75,0x3aa4927f, +0x3adc63ba,0x3aa3427f,0x3b41aed8,0x3a3b1a65,0x39bb0b71,0xb937cbd6,0x3b122712,0x3b317e16,0x3b2b307d,0x3ad5c2e3,0x39fad644,0x3a799318,0xb9c43f29,0xba57dc26,0xbae1476a,0xba034243,0xbac4e127,0xbbb7ff0f,0xbbb8603c,0xbbe6e308,0xbbc98733,0xbb9ff447,0xbb42c1f5,0xbb8708bb,0x39359f55, +0xb92ad34d,0xb9fdd434,0x3a8f5810,0x3a73d555,0x3a82da63,0x3ae26705,0x3b280f4e,0x3b97b32c,0x3bb0312a,0x3ba9d68a,0x3b0e64d0,0x3b51df5e,0x3b60ffe0,0x3bc9fded,0xb8202597,0xba1a3c2f,0xb90d539a,0x3b89d6e1,0x3bb34272,0x3badfafd,0x3b1ca299,0x3a9fb9f5,0x3ad1cce8,0xb8db6a39,0xba95c282, +0xbb1ff66d,0xbadc6fd1,0xbb75bb69,0xbbad5441,0xbbaff724,0xbbba1a24,0xbaf7af5e,0xbb0e2d14,0xbaffa158,0xbb421fbf,0x3a5cc489,0x3aa92bd0,0x395610cb,0x3ac8aa37,0x3b183fc7,0x3b22b9e2,0x3b7c0545,0x3ba46c00,0x3bdf9636,0x3bffe9a2,0x3bcdf02a,0x3b06acba,0x3b091c97,0x3b0f358f,0x3ba1c6af, +0x3ab4fccd,0x393de0de,0xb9cf09c5,0x3b91555e,0x3bacf4ad,0x3b84fa22,0x3b20743d,0x3c12f80a,0x3bbb1ff9,0x3bc41a92,0x3bb8609a,0x3b5c58d0,0x3bf6c608,0x3c1740c2,0x3c02bc91,0x3bc1b2c9,0x3a945340,0x39ab46ad,0xba0d0afc,0xba0ec167,0x3b55172c,0xbb0d0284,0xbb59a8c5,0xbc0ca3c7,0xbc0e7928, +0xbc1bf50b,0xbc281e72,0xbc3103cb,0xbc22e2d7,0xbc4f4981,0xbc1a3d31,0xbb8e9167,0xba836812,0x3bd3258a,0x3bb92b08,0xb8c34e97,0xba97cea2,0xbb136360,0xbb0841a8,0x391ed3f7,0x3afa35fc,0x3aa44aa4,0x3c064e84,0xb9c45689,0xb8c4169e,0x3b983b3e,0x3b91475b,0x3bc11304,0xbbc5d3b4,0xbc1b6c12, +0xbb9a8090,0xbb493107,0xba346f98,0xb9212460,0x395c211c,0xba84a665,0xbb18400e,0x39b1d514,0x3ac70f2b,0x3aec0dec,0x3a9174e9,0x3b064dd7,0x3ba1458e,0x3ba07607,0x3bc79e6d,0x3bb5aec2,0x3bdbe312,0x3b44d7ed,0xbb83c851,0xbc0747fb,0xbc0ceaac,0xbbbb552f,0x3b75f252,0x3bc4fe04,0x3ac30a59, +0xbb905803,0xbc108839,0xbc1e90e9,0xbb57d1f7,0xbc1f4772,0xbbc7519a,0xbc0f38d0,0xbbc9faec,0xbb50385d,0xbb3df0d1,0xbb81316f,0xbb7cdd99,0x39d5eeb9,0x39faec64,0xb87e4f68,0x38c4690b,0x39a1e98e,0xba63186a,0xba9ef7f3,0xbaaeebe5,0xbb141c87,0xba94c903,0xbaa9cae2,0xba1027a2,0xb972fd19, +0xb9ffcef8,0xbaf954a4,0xba858e2c,0xbb00846d,0xbb7e1f1f,0xba4f16aa,0xb9a84ddf,0x3af89237,0xbb6f6ccd,0xbba31faf,0x3acdff8f,0x39f17954,0x3a872f9a,0x3c110489,0xbbdf4bb9,0xbb0d2888,0x386153d6,0xbbc9ceb4,0xbbb6ada4,0xbb87191d,0x39e9dc6a,0x393f8df6,0xbaf88e0b,0xb942b51b,0xb9637f63, +0x38aa61ac,0xb7b79679,0xb764d685,0xb8b268e4,0xba6f7013,0xbab0cf0e,0xba39ad47,0x385a6afa,0x3811181e,0xbaa70148,0xb9a0f7ff,0xba6bee92,0xbb045136,0xbb257741,0xbb22c7a5,0xbb5de67e,0x3b1d3534,0x3b32aa71,0x3b92be85,0xbbfaa7a3,0xbc07c22d,0x3aae2266,0x3bca4b96,0x3c1f5dc5,0x3c4ed948, +0x3a620a2f,0x3bcf2aee,0x3ab736d2,0xbb2482f6,0xbaef1e3f,0x3b0aeba6,0xbacb7706,0xbaa2b87d,0x3ac5ea27,0x39f50f58,0x37e62c13,0xb907490e,0x38940d25,0xb994457b,0xba7415f5,0x398efb9c,0x3abfe0f3,0x3b5d7ea1,0x3b16903e,0x3b20ad0f,0x3b2f1cb9,0x3b38cf40,0x3b5987ab,0x3b3967c6,0x3b6094bb, +0x3b0e2ced,0x388e3ddd,0xba9bdf52,0xbaf57eeb,0xbaa5e785,0x3988ccff,0x3b0dafab,0x3b2475ef,0x3bf2efe4,0x3bee286a,0x3b269612,0x3bce6498,0x3b446ddf,0x3b8c0085,0x3b26355c,0x3afc8f1a,0x39b4b285,0x3a9b6370,0x39d53146,0xbab69fda,0xb9573dc1,0xb917af3a,0x39dc462a,0xb96c93fa,0xb95e07a8, +0xb88b7856,0x39eb714b,0x3a1019ee,0xb88fa463,0xbaa8dbad,0xbb13d0fe,0xbb47493d,0xbb16f8e3,0xbb1cf1f8,0xbabac527,0xba015d35,0x3a046d49,0x3ad16ab4,0x3ad8d7de,0x3ab04639,0x3a56f366,0xbb37c0af,0xbb80d85a,0xbb918267,0xbb989be0,0xbb362e46,0xb9b056bf,0x3b68fa2e,0xbb88a2b9,0xbbb1ce28, +0xbb96f331,0xbb73e2ed,0xbb2706e2,0xbb12fe75,0xbad35b1d,0xba7eaf82,0xba1b1131,0xba7a583e,0xba905c57,0xba5c7f65,0x38d9f0c2,0x3a80ade3,0x3a887c74,0x39ae80e5,0xb9c1cdb2,0xbb16904c,0xbb4c3c7b,0xbb305d6e,0xbadf6c69,0xb9bd8098,0x3a3199ba,0x3b497663,0x3b924c76,0x3bb628ee,0x3bd1a47b, +0x3bd89c99,0x3bd5026e,0x3bb3103a,0x3b68beaf,0x39ffc01a,0xba073222,0xbad982bd,0xbb5b97c3,0xbb52ac18,0xba5bf3bf,0x39a99552,0x3a2218c1,0x3a6f9c32,0x3af1d56b,0x3b0aee54,0x3b156cf9,0x3aafb730,0x3ae7b760,0x3b08a0a7,0x3b2b50dd,0x3b23a276,0x3b249621,0x3b360458,0x3ac7d6b4,0x39c8216e, +0xbaa86e85,0xbace6e66,0xbaf8b4df,0xbb0a36e5,0xbafaa3a8,0xbabf42c6,0xba938244,0xb90a56dd,0x3a30770b,0x3aab1e5f,0x3b2c3b57,0x3b75d31b,0x3b9f99ab,0x3b8b984a,0x3b6bfa60,0x3b40fb81,0x3ac5d1de,0x3a3f9bc8,0x39e4b803,0xb9a6adff,0x3b8618b9,0x3b7cf60a,0x3b7d4af4,0x3b5f617f,0x3b52847c, +0x3b343d18,0x3b13c4a5,0x3b0f079f,0x3b3b47f0,0x3b404cc9,0x3b78f572,0x3b2707e4,0x3b0d1364,0x3ae014ae,0x39bddcbd,0xb8651b17,0xba8d8d04,0xba7a6aa3,0xba4932fe,0xba9bb88e,0xba9d08ef,0xbabd3a8f,0xbad46f40,0xbae1884b,0xbafacd8f,0xbb044ae5,0xba5020e2,0xb917864d,0x3a89fb7f,0x3ad17c9f, +0x3b2324ef,0x3b579861,0x3b72ff5d,0x3b8255c4,0x3b7e9919,0x3b82d4c4,0x3a68c5d1,0x3ab8b269,0x3a85e726,0x3a948c68,0x3a60d166,0x3ab26f8d,0x3ab5b0c5,0x3a858831,0x393becc5,0xba4ead71,0xbadb62f3,0xbaf5ef9f,0xbb078d66,0xbb23c25d,0xbb1084b0,0xbb0cd140,0xbb17c7c8,0xbb215101,0xbb48e6b3, +0xbb3ef7f8,0xbb308af0,0xbb25b1fa,0xbb142465,0xbb0c6273,0xbaeb5193,0xbabb37a8,0xbad444c5,0xba96f2db,0xba904f93,0xba7a39e9,0xba541d31,0xba2e1524,0xb9c654d4,0xba243a43,0x37ef3b3c,0x3a261f36,0xb88899f5,0x38ebc96d,0xb8e221e9,0xb9ab2ea3,0xba16d7b5,0xb9c1915b,0xba1c349c,0xba2a9236, +0xba3a2c3d,0xba1a4547,0xba1d19c5,0xba4e0e42,0xba8e29dd,0xbaaa9d2a,0xba8990a9,0xba945f21,0xbac95d1b,0xbab22b0c,0xbaa5b524,0xbaae9e1c,0xbab6dd9a,0xbac544fc,0xbad1f35e,0xbae2745c,0xbaed73a3,0xbaee7d03,0xbae6eab2,0xbabe5aea,0xbaaaf903,0xba86b9d3,0xba3b9eaf,0xb9d17cb2,0xb959d14f, +0xb97540b1,0xb8557eb2,0x37226940,0xbb20a512,0x3a004a20,0x39eed6ca,0x39fa5f46,0x39b9984b,0x3982fc9f,0x37e79ffd,0x3927c285,0x38d8855b,0xb97b5be0,0x38c08656,0x3925db65,0xb8724501,0x3931847d,0x39222404,0xb8bf90c2,0x39310b4d,0x3991aa7e,0x39be91f0,0x39bb10ab,0x39d3c319,0x39f5c246, +0x3a16de5f,0x3a29db82,0x3a3f808b,0x3a5a1dc8,0x3a3f0519,0x39aecf56,0x39b1ec21,0x39ad8cfc,0x3a29fe42,0x39e570b6,0x3998337f,0x3906534d,0x39f2cf45,0x3a02b93e,0x3a060977,0x39e7d07d,0x39b2ea4c,0x3a0ba3bd,0x398047fd,0xb8808c11,0xba14264d,0x3987f8cb,0xb9021c72,0xbaee0c0f,0xba86fbc6, +0xbaa8893d,0xbaedefc5,0xba9eb010,0xba4e7ab5,0xba93c2b6,0xb90e3816,0xb648d198,0x3920eea7,0x39e6f231,0x3a16305e,0x3a2e0b66,0x3a551427,0x3a93a04a,0x3ae4ddb4,0x3ae44df7,0x3ac9c54b,0x3a80c269,0x3a889aa5,0x3ab51857,0x3b0c76e1,0x398dbf7c,0xb9a4d6b9,0x36b3960c,0x3ac484b0,0x3b03193c, +0x3af65606,0x3a640d42,0x3a6bf610,0x3a9880c5,0x3937d1b3,0xb990c314,0xbac79d69,0xb9ed04e4,0xba210745,0xbb63144c,0xbae269d6,0xbae661e6,0xbb4ba12a,0xba9d18cd,0xbaa3927e,0xbb1e8e0b,0xb9c4d8c4,0xb92383cb,0xb7dfceb4,0x39ffdf89,0x3a534d85,0x3ab79359,0x3ae67baf,0x3b1c3dc6,0x3b4740ec, +0x3b612df6,0x3b3a2458,0x3a6c23e5,0x3a9eb744,0x3a7b86de,0x3b4dfb68,0x3a0f515f,0x39086e42,0xb9af1458,0x3b08a439,0x3b22f171,0x3b090b06,0x3ab2c455,0x3940e579,0x3a88f72d,0xb9cc6b27,0xba6d4209,0xbb160964,0xb98ad1b5,0xba94f66b,0xbbc8a7e4,0xbb9e77c0,0xbbcbf732,0xbbd43b63,0xbb92ba1c, +0xbb40d51e,0xbb8dc0ba,0xba000134,0xba634087,0xba5617de,0x3a334126,0x3a71377f,0x3abcfc2f,0x3af93d42,0x3b2ebc7d,0x3b8f3cf3,0x3ba1d3a9,0x3b9834d4,0x3adffa96,0x3b30c8ab,0x3b445e71,0x3bc9a6eb,0xb9b0f3b4,0xba5f944c,0xb9d6d434,0x3b833ef4,0x3ba947d8,0x3b91027e,0x3afbc3d9,0x3a8dda9b, +0x3ad588af,0xb9c59e08,0xbaac6b77,0xbb50cb1d,0xba8cb8f7,0xbb44689f,0xbbb4fa52,0xbb8841f1,0xbb8e29a0,0xba91e114,0xbab0d00f,0xbabf3262,0xbb525e02,0x39617d83,0x39debe4d,0xba0612ad,0x3a92107f,0x3b0a3469,0x3b40d298,0x3b84a043,0x3ba60908,0x3bcf641e,0x3be42106,0x3babcbfd,0x3aaa23bb, +0x3a74e5b6,0x3adf5856,0x3bb41459,0x3a9689a4,0xb95deec0,0xba1e8535,0x3b885459,0x3b9da32e,0x3b4617e6,0x3af8d29c,0x3c1d3a66,0x3bdce2c4,0x3be91e6b,0x3bda3a8a,0x3b8d3ceb,0x3bfaa275,0x3c09c381,0x3bd7f498,0x3bb22a0a,0x3ab1346d,0x3a233f00,0xb82f1ed6,0xb8046a62,0x3b178c7e,0xba4608aa, +0xbad3e25c,0xbc0bb729,0xbc0e575e,0xbc23bb31,0xbc2ba871,0xbc3b131d,0xbc2bb3f2,0xbc4972ff,0xbc0be964,0xbb532a76,0x3af709ff,0x3bc94dc8,0x3b82f4c4,0xbada8c36,0xbb09590c,0xbb1128c4,0xb99f2200,0x3a02d121,0x3b2673a1,0x3b56ab7a,0x3c174639,0x3812e156,0xb8977f09,0x3b1528e8,0x3b3257f7, +0x3bd52f50,0xbb9bbecc,0xbbfe7b68,0xbb856928,0xbb284b13,0xba48d854,0xb985daa1,0x38f41412,0xba01f9c7,0xbb04c26d,0x3957e51c,0x3a9dce38,0x3acd3ca3,0x3a17df8f,0x3ac92ab1,0x3b8b021c,0x3ba7be21,0x3bcf3c93,0x3bb2234c,0x3ba84be9,0x3a9f958f,0xbb98f3ac,0xbc136910,0xbc0922fc,0xbb52e892, +0x3b9017bd,0x3bbb5ccf,0x3ad2cc40,0xbba49a22,0xbc15c6a4,0xbc14b98e,0xbb3f807d,0xbc135497,0xbb8ed91c,0xbbe33b67,0xbbab6adb,0xbb9651da,0xbad8481f,0xbb1005dc,0xbb455a85,0x3a937ea0,0x394a88f8,0x3903c059,0xb8bd323f,0x39ab3cc1,0xb9b7a69b,0xba7da5e4,0xba9c5ac0,0xbb11bc8b,0xbab9783d, +0xbae996cf,0xba726ed4,0xb9b4fc80,0xb9e48def,0xbacbde45,0xba8c6473,0xbaf6374f,0xbb623674,0x39aa4f67,0x3a37fccf,0x3a3aac7d,0xbb622ce3,0xbb89dcbd,0x3b263280,0x3a73c6ef,0x3ab04584,0x3c29f03f,0xbbcb89cf,0xba954a43,0x3b9e6fc0,0xbba017db,0xbbba0b97,0xbbf05192,0x3a57687e,0x39f6f29e, +0xbaf08fb3,0x3905ff14,0xb9bdf5b2,0x396f1427,0xb8488d51,0xb78fd749,0x395ce1b2,0xba1bd3bb,0xba8f12e4,0xba37953e,0x3936cc9d,0x3840d358,0xba8c805d,0xb9dfe58c,0xba890e9c,0xbb066787,0xbb16cf95,0xbafff56e,0xbb25ba76,0x3b73f2f9,0x3b5d4237,0x3b0f3d5d,0xbbf956b9,0xbbe262ab,0x3b87c085, +0x3be5f266,0x3c182931,0x3c3b7de1,0x39efd111,0x3beca9c7,0x3bd8b59b,0xbbb2d1b9,0xbbdd5909,0xbad99510,0xbb11ff0a,0xbaa8ae8d,0x3a0ef4df,0x397d3ccc,0xb791087a,0xb98100ca,0xb802c585,0xb8bcd6be,0xba2b18a5,0x39298bf6,0x3a92e30c,0x3b5b5de7,0x3b218a66,0x3b3794a1,0x3b53a38f,0x3b4cb22f, +0x3b577084,0x3b122b34,0x3b20283f,0x3ac3db6f,0x38d8bcdd,0xbae87b97,0xbb178bb2,0xba6576ea,0x3921e77f,0x3b33f2ab,0x3b9dab1a,0x3c01c116,0x3bc98e70,0xba831dcf,0x3bb2dddd,0x3b36aa88,0x3b80a76e,0x3b978e85,0x3b9dde06,0x3aee5bd6,0x3ab419fa,0x38f85ddd,0xba9e40be,0x36147c65,0x38ed2b05, +0x3a07cc0a,0x39700c90,0x380f9b10,0x38a5f9fe,0x3a1c687c,0x3a8080ac,0x3a62107f,0xb7ce1335,0xba834e1a,0xbb0b66df,0xbabf9bfc,0xbad1fe29,0xba1056eb,0xb9357539,0x39a881da,0x3a98340b,0x3a565f80,0x39947253,0xba423a1a,0xbb86b293,0xbb9e5f8e,0xbbb0879e,0xbba2a085,0xbb0c3d82,0x3a50732a, +0x3b7cb767,0xbb31833e,0xbb899178,0xbb8f0247,0xbb833539,0xbb377620,0xbb1f3e5c,0xbae6d881,0xba90d8b0,0xba20e39e,0xba598671,0xba8126cf,0xba8f8e28,0xb9bae548,0x3a09edeb,0x3a810241,0x3a0d648e,0x375016d9,0xbafb4d19,0xbb3c75c9,0xbb1d7b76,0xbade7db5,0xba24bc1d,0x39bdd065,0x3b2cd02c, +0x3b832380,0x3ba2e92a,0x3bafc228,0x3baee10f,0x3ba6bcbf,0x3b849d0b,0x3b0cbbe6,0xba86231c,0xbafc4aed,0xbb3d9ee1,0xbb77751d,0xbb2b7341,0xbaf76d68,0xba8b995e,0xb9d51d80,0x38d80904,0x3a6e36f7,0x3a88b689,0x3aa26a6d,0x39a0d827,0x3a794765,0x3aaa8c06,0x3b03fc3d,0x3affbd0b,0x3b1526b1, +0x3b33cbfd,0x3ae5eba5,0x3a486a0b,0xba3792c6,0xba9938f4,0xbad47c8a,0xbb082bf6,0xbaf56890,0xbab8ac17,0xba838a8b,0xb7a9e9a6,0x3a446ed9,0x3ab6dc83,0x3b230410,0x3b5ca9fa,0x3b869a00,0x3b5fab7c,0x3b295044,0x3ad28ec1,0x38859b9f,0xba14b0b9,0xba43256e,0xbab477a0,0x3b46a228,0x3b441b74, +0x3b443bf8,0x3b203b7c,0x3b14f03c,0x3b00123f,0x3ac7e340,0x3ac41885,0x3b1cdbb5,0x3b33a7c2,0x3b7910c0,0x3b378d46,0x3b2e863a,0x3b1e5d8c,0x3a7ab55f,0x3a0e95a5,0xb9d2768a,0xb9eb87b8,0xb9e497d9,0xba808e6b,0xba5e8fc0,0xba8c072c,0xba990c7e,0xbaa7664b,0xbab96da2,0xbac40cda,0xb9b69d62, +0x3991428f,0x3ababec9,0x3af47b24,0x3b31a5a8,0x3b63db6a,0x3b7519dc,0x3b66638f,0x3b390c3f,0x3b3fcbc2,0x3afdb647,0x3b156433,0x3b093272,0x3b15ba04,0x3b05c8de,0x3b244831,0x3b21f382,0x3b083abc,0x3aa883dc,0x39972dac,0xba177636,0xba44475d,0xba79129e,0xbaa549e3,0xba9695c1,0xbaa9cb4d, +0xbad768a3,0xbaf37f45,0xbb2eac24,0xbb22e9b6,0xbb19c9ff,0xbb10e065,0xbb02bd70,0xbaf76156,0xbad0b132,0xbaaa5ed0,0xbaad3bed,0xba5aab30,0xba37408a,0xb9e39939,0xb997908e,0xb8b04d27,0x39552cdb,0x393c8a80,0x3a8f07af,0x3ae4c381,0x38be1ada,0x399fb515,0x38a06d79,0xb95d28c9,0xb9fce164, +0xb99643aa,0xba0444ca,0xba11e130,0xba0dab49,0xb9b72264,0xb99d7d06,0xb9e7eaa1,0xba37dbc6,0xba67d2b7,0xba2638c0,0xba3083ad,0xbaa03e26,0xba8698a8,0xba705fbe,0xba7dc508,0xba868094,0xba91e92d,0xba9d5e27,0xbaac1bfd,0xbab612d0,0xbab838cc,0xbaad87bf,0xba878b9a,0xba6559af,0xba1e875d, +0xb9a21869,0x38395e41,0x394a0fdf,0x388cb34a,0x39055d79,0x38f6e459,0xbaf2d749,0x39989d03,0x39a6a36d,0x39b6c3f6,0x3969367d,0x39294131,0xb7bb31d1,0x38cf0ba2,0x3886679d,0xb9a568e9,0x38be4944,0x392eb086,0xb90121ec,0x390e0950,0x38fdae28,0xb8f5dd85,0x384592ac,0x38ffaf4b,0x39a11209, +0x39851759,0x398dc4e0,0x39b0efd0,0x39e93cfa,0x3a0403ed,0x3a1669ea,0x3a22cfe3,0x3a06ab0b,0x392beeb3,0x3921e440,0x393bbb61,0x3a132f66,0x399c9c82,0x390f4576,0xb78ad04c,0x39a7fcb4,0x39b25d4a,0x39a32ffc,0x3996fccd,0x391c5025,0x39d936cd,0x3926b4b9,0xb94fc7fe,0xba390ad1,0x3959f36d, +0xb8e53667,0xbaf2886e,0xba576917,0xba909290,0xbaef00fb,0xba9a542f,0xba52a5ce,0xba934f6e,0xb9d6ea55,0xb9ae2e50,0x388f9acc,0x39712e9a,0x39f426c6,0x3a25b26d,0x3a3e3f7e,0x3a846785,0x3acd650d,0x3ac11604,0x3aa2c0a1,0x3a40225f,0x3a35c5f7,0x3a880be6,0x3afffb4a,0x36e3a5f2,0xba0e637d, +0xb96191f8,0x3aa9668d,0x3ae63822,0x3ac01080,0x3a2084b0,0x3a314f70,0x3a8ceb6e,0x37924351,0xb9dcbc8d,0xbad2463d,0xb99eb498,0xb9cb03c6,0xbb6a43e9,0xbab59d21,0xbab6c557,0xbb54b9fa,0xba8dc752,0xbaa35ce8,0xbb1a7037,0xba47905b,0xba21dfe9,0xb8d7dcd6,0x3946bf4f,0x3a1d3e09,0x3ab2d509, +0x3ad80b8c,0x3b10745a,0x3b3353eb,0x3b3c3418,0x3b10dc8e,0x3a020a90,0x3a2028df,0x3a0a63e8,0x3b4d2f05,0x3983ea08,0xb951fe04,0xba1001be,0x3aed4254,0x3b0b2c1e,0x3ac40797,0x3a869662,0xb8a5c343,0x3a879a60,0xb9e68f1d,0xba869fc8,0xbb2a7723,0xb8fc7248,0xba57a286,0xbbcab9b0,0xbb82fc6d, +0xbbaca7d8,0xbbd28f07,0xbb811cfe,0xbb34e824,0xbb8763cd,0xba9c222b,0xbacf8be2,0xba6eb6c3,0x395d0d3a,0x3a4edaf5,0x3adc3aba,0x3af57e1a,0x3b2d706c,0x3b86cd81,0x3b8dc481,0x3b80c676,0x3a9b7b26,0x3b023bbf,0x3b1640df,0x3bbfc5b4,0xba44197e,0xba9ceb2e,0xba3de1af,0x3b70e5dd,0x3b9b4535, +0x3b65475d,0x3ac1bf10,0x3a604e3c,0x3ac9ddad,0xba16010e,0xbabf0471,0xbb6ba49f,0xba10adf6,0xbb128c39,0xbbaadfdd,0xbb391b17,0xbb40b091,0xb93e0698,0xb9d88c37,0xba637591,0xbb4560c2,0xb9c006b3,0xb9dbff37,0xba7b80d2,0x3a17dd9b,0x3adfd7f7,0x3b485d84,0x3b8007e9,0x3b9ea248,0x3bbdb73d, +0x3bc068be,0x3b837235,0x39e6cdb1,0xb9c99879,0x3a81e209,0x3bbb0406,0x3a3ac151,0xba431c92,0xba59b36b,0x3b740868,0x3b8750ae,0x3aff41af,0x3aa7e6f8,0x3c20b845,0x3beb50e6,0x3bf48d14,0x3be41f61,0x3ba8a8b1,0x3bf23806,0x3be90dec,0x3b9e2446,0x3b8f9115,0x3a927490,0x39efa372,0xb7a1549a, +0x39bbc821,0x3ab34ca8,0x39eedc1e,0x38e105af,0xbc02514a,0xbc058a18,0xbc1f688a,0xbc24b1e3,0xbc3bfe15,0xbc2ce1d1,0xbc39c2b6,0xbbf067c5,0xbaecfc68,0x3ba2dae5,0x3bd3c1fa,0x3b47462f,0xbb457304,0xbb36d843,0xbb155941,0x3a682934,0x397eaf16,0x3b3600a9,0x3bb14c19,0x3c2409e7,0x38a1adf4, +0x392a87cd,0x3a22ff82,0x3aa9fc11,0x3bd4a0f8,0xbb670910,0xbbbf9891,0xbb57b37b,0xbad7ab5e,0xba659164,0xb8bb47c2,0xb87bbbd7,0xb8ee33a7,0xbac94106,0xb878b8fe,0x3a58ca95,0x3aab6480,0x36e22ac4,0x3a6aefbf,0x3b59d129,0x3b9d66ec,0x3bc516c7,0x3ba44e36,0x3b59c8da,0xba0e2970,0xbbaf9e4f, +0xbc1d7779,0xbc0271b2,0xba675af9,0x3b93ec15,0x3ba15c85,0x3ad06d31,0xbbbddf9c,0xbc1dd4e9,0xbc0bb794,0xbb42adc8,0xbbf438e8,0xbb1c0e3e,0xbbb0afb3,0xbb952c55,0xbba63372,0xba57be7a,0xba8ed75b,0xbacb7152,0x3aa421b4,0xb7fe45f6,0x3962e06b,0xb8ea10dc,0x39519939,0x379c3831,0xba26d4e9, +0xba7ce7c5,0xbb02f2b3,0xbac2685f,0xbaf386f8,0xba8c2007,0xb9f4bbe4,0xba09b8f9,0xbaa9b0f3,0xbaaab6cb,0xbaf46119,0xbb37f6f2,0x3a980f27,0x3ab651d4,0xb9def343,0xbb5ff298,0xbb67e7cc,0x3b543544,0x3ac0a40a,0x3afd61df,0x3c2d9b27,0xbba1212c,0xba1844b8,0x3c10df75,0xbb68e752,0xbbbfe74e, +0xbc185bac,0x3a7870db,0x3a02d5fe,0xba9f2ed7,0x392c36a6,0xb9b5a3fb,0x396650ff,0xb736df43,0xb7bbf47d,0x399cb1a4,0xb98ab921,0xba4cb92e,0xba222e77,0x39e51d47,0x39ad242f,0xba1628da,0xb9f4a7b6,0xbaa0c5cb,0xbb08e34c,0xbb15118b,0xbad457ff,0xbab9c1fb,0x3b9813d0,0x3b6f93ec,0xb9a77424, +0xbbeb5b7a,0xbbaf81f8,0x3bd96191,0x3be83db2,0x3c03eb3c,0x3c14bfd5,0xb9cb1376,0x3bc00ef0,0x3c3186ec,0xbbea84b6,0xbc328623,0xbbba0afc,0xbb2636cc,0xba7ef159,0xb8b50976,0x394359c5,0xb8079144,0xb94ef03c,0xb8c44961,0xb8ff6544,0xb9b83acc,0x371268fb,0x3a33aa83,0x3b4a0f56,0x3b2870ae, +0x3b462586,0x3b693b33,0x3b4ceddf,0x3b4322b6,0x3ac6a7b4,0x3aa2265a,0x39fef26d,0xb9818dd6,0xbb215360,0xbb3736c9,0xba7c2878,0x39575d76,0x3b5f0863,0x3bec060d,0x3bdbdf5f,0x3b3f7c17,0xbba11ce0,0x3b2a4cb3,0x3b3600ab,0x3b8009a4,0x3be1956f,0x3c015ad5,0x3b53d449,0x3ac51b11,0xb94dbf42, +0xba518eb9,0x391b0259,0x391cd1c0,0x39d32e80,0x39c2e4f6,0x399bfb3a,0x390fd37b,0x3a322eed,0x3aac8f9b,0x3ad4169c,0x3aa1d693,0x39b2beaa,0xba8634af,0xba23c662,0xba5c5595,0x39872e4a,0x39659892,0x39821e80,0x3a4ac3a1,0xb860b123,0xba532e53,0xbb08158b,0xbba8d24b,0xbbb63364,0xbbc947e6, +0xbb9e7e3c,0xbaa78faf,0x3ad79fc4,0x3b78fc82,0xbab105cc,0xbb313569,0xbb6f54d4,0xbb81fd4f,0xbb40ff58,0xbb228372,0xbaefb5eb,0xba9adeca,0xba14a75e,0xba2025fe,0xba4cec6c,0xba899776,0xba29edad,0x38a5c3a5,0x3a49d2cf,0x3a214bde,0x39984063,0xbac7eff3,0xbb223ef1,0xbb05f5dd,0xbadc4881, +0xba764459,0xb93652b1,0x3af5a278,0x3b4d6994,0x3b7fec91,0x3b80778e,0x3b750e80,0x3b5e9fc1,0x3b2c5322,0x3a848933,0xbb00b916,0xbb3bc20f,0xbb76ce91,0xbb77f2e7,0xbb05c97c,0xbb2f28c4,0xbb1006f7,0xbaadd58d,0xba201865,0x38e1c671,0x38023c6c,0x399538f6,0xba0abda0,0x39895c94,0x3a1c50d8, +0x3ab38b06,0x3aa94f74,0x3af4c801,0x3b1b3ca5,0x3aec8fae,0x3a883b6d,0xb8f6968a,0xba435e35,0xbaad8a3c,0xbb00d513,0xbae90560,0xbaa8bc4e,0xba593cfd,0x390bfa53,0x3a6603e9,0x3acb89bb,0x3b1bda3f,0x3b44a17b,0x3b5a46b0,0x3b288f02,0x3acc81f1,0x39c0eb0a,0xba93591e,0xbad354f5,0xbaeee4bb, +0xbb0ee58d,0x3ad76176,0x3aecd146,0x3aff4101,0x3ab785af,0x3aaea042,0x3aa10c35,0x3a774a5b,0x3a7c39e3,0x3b00cde4,0x3b210a51,0x3b6da801,0x3b3abc11,0x3b43f5ec,0x3b3c305c,0x3ac3b490,0x3a8d68f8,0x39915ef7,0x386bd72d,0xb8f117a8,0xba4e2d64,0xba00bf04,0xba28add0,0xba25b438,0xba36c3eb, +0xba409aab,0xba40bc69,0x3959881b,0x3a40d8e6,0x3ae3509d,0x3b018957,0x3b2d7459,0x3b5373dd,0x3b532e9c,0x3b25f142,0x3aaeeaad,0x3ac53386,0x3b300621,0x3b37058c,0x3b394f90,0x3b44c1a4,0x3b381586,0x3b4f8860,0x3b4652a6,0x3b311644,0x3b0321a3,0x3a995109,0x39e4bdd8,0x39b5d2f2,0x392021b3, +0x3821c5ea,0xb84ed0d0,0xb9bf497c,0xba5837c5,0xba933a0d,0xbb040c36,0xbaf46b7a,0xbaed695c,0xbadf9120,0xbaccd7e7,0xbac0d57b,0xbaa471ec,0xba8bf892,0xba715993,0xb9f50586,0xb98d0066,0x38bcca89,0x3981d37f,0x3a0a0964,0x3a5194bf,0x3a867aa2,0x3b051659,0x3b2a9a2a,0x39494867,0x39d943c6, +0x3979a9dc,0xb830e4cb,0xb9970152,0xb92786eb,0xb9a1cc5f,0xb9a1e27d,0xb963263b,0xb701a679,0x3895eab2,0xb716871e,0xb94f137f,0xb9af3694,0xb9253bed,0xb93a1c37,0xba464e76,0xba170f9f,0xba0021e5,0xba0d2d79,0xba172643,0xba2501a9,0xba361cb9,0xba4d039a,0xba5cd3be,0xba628f2b,0xba4a162f, +0xba0bacd0,0xb9c867ed,0xb9200d9e,0x38ada4b9,0x39d73f72,0x39fcadee,0x39945eb3,0x3968bd22,0x3926e6ae,0xba91a374,0x39acfbbb,0x39bac82f,0x39ec3c69,0x39586b13,0x384c08dc,0xb92237e6,0x3910e636,0x37908b92,0xb9fac738,0xb83df983,0x37ce64c8,0xb99bc5cb,0xb82b1ebb,0xb88c5521,0xb970cc3c, +0xb8b23ad6,0x3854c03d,0x391c0805,0x39014ecc,0x39500bdb,0x39c94fbc,0x39f0d545,0x3a0782fc,0x3a1a5eea,0x3a1722eb,0x39f60561,0x393d320e,0x39224a82,0x3960356d,0x3a28f098,0x39b87bf1,0x393c6f7d,0x38622a42,0x39c3bcb4,0x39c45333,0x399e1cf5,0x39a93dcf,0x3983ae3e,0x3a0ae5a4,0xb809ab35, +0xb95623c6,0xba4e3411,0x395dafb5,0xb845579e,0xbae359e1,0xba10090c,0xba6a8a26,0xbadc8e7f,0xba8d5ae9,0xba441101,0xba83d142,0xba3c4d1c,0xba1072d2,0x3836c403,0x38cd35c2,0x39ab1dba,0x3a394bce,0x3a4f1abe,0x3a8a780d,0x3ad05598,0x3ab206a4,0x3a90d581,0x3a38834a,0x3a159b20,0x3a6f2bc3, +0x3aff2546,0x37f7ea65,0xb9f5c779,0xb8b167e9,0x3ab5afe3,0x3aecc817,0x3ab0b7fd,0x3a29df6a,0x3a4b5f82,0x3a98fdb9,0xb88c85e6,0xb9be2002,0xbac9ebb0,0xb90060ef,0xb96444cf,0xbb5cf48b,0xba8d35ff,0xba7f9b53,0xbb5a1358,0xba7a3b0a,0xbaa79aab,0xbb094c60,0xba8f1776,0xba7bea16,0xb78385b0, +0xb88834ac,0x39d4b8aa,0x3aa7dee2,0x3ad67ef4,0x3b0a05af,0x3b2ccb43,0x3b1f68b4,0x3ae46437,0x39b42f8b,0x39969fa2,0x39c86d23,0x3b579173,0x39914d5a,0xb916fd71,0xb99f34d7,0x3afa6ab2,0x3b09c124,0x3aa3a94f,0x3a862eec,0x3906c214,0x3a9b9661,0xba06d705,0xba8cec47,0xbb2e489a,0xb6936a69, +0xba173b05,0xbbbb3b01,0xbb4ef207,0xbb8b182e,0xbbbded5b,0xbb55e3d5,0xbb25d285,0xbb69612f,0xbaf29ba9,0xbb10cdac,0xba4d18d9,0xb968d7f7,0x3a1dd2f5,0x3ae66bff,0x3af83fb6,0x3b300cd3,0x3b8544cb,0x3b769241,0x3b57fb77,0x3a70dcde,0x3ac9c0cc,0x3aefb128,0x3bb9da66,0xba4429d8,0xba88ed37, +0xb9d724f0,0x3b7b871d,0x3b9bdf66,0x3b47d3cf,0x3ac0ad09,0x3a836212,0x3ad3bc2d,0xba2913a7,0xbab88351,0xbb6d888b,0xb90d2f32,0xbac6f089,0xbb8fcf87,0xbacf7996,0xbad40426,0x3a1f8754,0x39975c43,0xb94fbd17,0xbb23aad8,0xba46304d,0xba950102,0xba951a40,0x38bc8c69,0x3a9676ef,0x3b3e735a, +0x3b70a46e,0x3b9595dc,0x3bb1ba98,0x3b9da813,0x3b3e7ec8,0xb9128a76,0xbaa4e47b,0x3a2d1e89,0x3bc51d01,0x3a360cb2,0xba39d02a,0xb9bbcf86,0x3b7c37c3,0x3b801d3c,0x3ab69cca,0x3a92b31c,0x3c27305e,0x3bf98a2b,0x3bf0b40f,0x3be063c7,0x3bbc7f6d,0x3bdbcd32,0x3bb860c9,0x3b46f427,0x3b48bbef, +0x39d516a7,0x395dfd63,0xb9578437,0x39c67479,0x3a288931,0x3aa41af3,0x3ad0055d,0xbbe08bc5,0xbbebdc39,0xbc117f8d,0xbc13871d,0xbc310251,0xbc225aa3,0xbc1c132a,0xbbb361c3,0x395ca3e9,0x3c07bd23,0x3bfb3ddc,0x3b4e5bcd,0xbb6bcf5a,0xbb2d7a1b,0xbae5538b,0x3b0bcaf5,0x39bbcc85,0x3b622aec, +0x3c013394,0x3c364748,0x39e6fc2c,0x3a21bb29,0xba2c29b0,0x39f3aee0,0x3bbc92c1,0xbb185a0a,0xbb8546f2,0xbb10d3db,0xba65166b,0xba36e68c,0x39169e52,0xb8d6850d,0x38b0ad52,0xba71581e,0xb9b1ad54,0x39e436ea,0x3a925393,0xb9f9fe83,0x390372d4,0x3b1450c3,0x3b8d48e5,0x3bb5f627,0x3b9b7f9c, +0x3b045307,0xbacfef1b,0xbbb98639,0xbc1c84e1,0xbbe0be1b,0x3af077d6,0x3b9d3a23,0x3b9002ed,0x3b00af52,0xbbc6d3f7,0xbc1e2bba,0xbbefbb1c,0xbb361149,0xbb97397c,0xb8ba99e4,0xbb73d01d,0xbb7cd3d9,0xbb97e7a9,0xb9e01049,0xba06c61a,0xb90c6e59,0x3a4b814f,0xb7878c00,0x389ef2cd,0xb8acdd50, +0x386096f0,0x391fca6b,0xb995c90b,0xba2d465a,0xbad189a6,0xbaabdaa2,0xbacb6bba,0xba5b1fe8,0xb98bad94,0xb9c4bdcd,0xba30d338,0xba8cc7f2,0xbaa0496c,0xbaa172ec,0x3b1a3d1d,0x3b18e08d,0xba53b1d7,0xbb397770,0xbb17b9a6,0x3b8c030e,0x3b3764ff,0x3b6a6184,0x3c2e4c91,0xbb22e855,0x39c505ed, +0x3c3e2e29,0xbb127eac,0xbbb35986,0xbc20dd96,0x3a431785,0x39befc96,0xba124dc6,0xb8934c1d,0xb91ee629,0x3912cae3,0x381c7051,0x36f574c7,0x393247ff,0xb751b129,0xb9e1096e,0xb9ff314e,0x3a644740,0x3a53c174,0x39572295,0xb8a859af,0xba8e8eda,0xbae07d32,0xbaf7f049,0xba5f56fa,0x3a209368, +0x3bbeb2c9,0x3b8d6123,0xbb0752bf,0xbbb698ba,0xbb3f11dc,0x3c156dc6,0x3bed601d,0x3beb0ae9,0x3be4c679,0xba1e67e5,0x3b685be5,0x3c505c0e,0xbbf73ce4,0xbc5b6770,0xbc14f06b,0xbb1b1ffe,0xba3136da,0xb947b3ad,0x395ef8f8,0xb8a5c3f3,0xb9176a1e,0xb8e31f76,0xb92d1a20,0xb925f6af,0xb8e10e70, +0x397c890c,0x3b26f907,0x3b300676,0x3b4bafa7,0x3b803150,0x3b4f3393,0x3b35eb29,0x3a96f108,0x39e8a6c7,0xb97de4f3,0xb9f04e61,0xbb27ba29,0xbb264ca9,0xba432bd0,0x3aab7839,0x3b9db218,0x3c1c0b5f,0x3b9fcc3c,0xba7613fe,0xbbfa162f,0xba213e05,0x3b8210df,0x3bad3df6,0x3c16340d,0x3c36f5e2, +0x3b8eee97,0x3ae2460d,0xb9a6db0c,0xb9c97399,0x393d47db,0x390800b8,0x399a26ee,0x39aed958,0x39b8e915,0x391f39d8,0x3a300a3d,0x3ac74bb7,0x3b0e19b7,0x3b1f7489,0x3ade2659,0x39644e82,0x3a0344dc,0x38dbf4b0,0x3a989bf6,0x3a78efa5,0x3a3a9a24,0x3a8f7ff3,0xb954497f,0xba96106a,0xbb1cb9d4, +0xbbaddc6d,0xbbb4a58a,0xbbc66deb,0xbb7bd457,0x39050151,0x3b35cf1c,0x3b82b576,0x39698ce4,0xba4d67f0,0xbb28927d,0xbb62066f,0xbb3be840,0xbb1c74a7,0xbadc5684,0xba8e9a34,0xb9cd204d,0xb9d8254c,0xba120cb4,0xba547d8d,0xba2fb733,0xb9600fac,0x3a0ab35b,0x3a1f818d,0x3a1b6875,0xba8472c8, +0xbb074fa9,0xbabd998c,0xbab03899,0xba7f8a86,0xb9f8b1a6,0x3aa4f62f,0x3b19fb75,0x3b3c11f2,0x3b2ad7ff,0x3b1d3b08,0x3b096f2c,0x3ae4f24d,0x3a200c43,0xbaff0b40,0xbb3c6cf6,0xbb765c10,0xbb410001,0xba8df7b7,0xbb27154f,0xbb39f453,0xbae65c8d,0xba840968,0xb9cd3683,0xba167408,0xb9e89290, +0xba85e225,0xb95c3b9c,0x38f98110,0x3a4f4964,0x3a323b40,0x3aa8cef9,0x3aea6c66,0x3adb7e37,0x3aa1b7db,0x39cc1f38,0xb9a5486a,0xba69bfc6,0xbae56113,0xbaaa8bbf,0xba689c15,0xb9b493fb,0x3a17920c,0x3aaebe31,0x3b06a83a,0x3b2b8a6d,0x3b441216,0x3b41fbe6,0x3b0cf5f9,0x3a82c59d,0xb995125a, +0xbac611d9,0xbaf1eed5,0xbb0c4fa1,0xbb170642,0x3a053f77,0x3a55c7ea,0x3a51a04a,0x3a0d662f,0x3a01a16c,0x3a172c8b,0x3a091d53,0x3a2e5b6e,0x3ad25ad1,0x3b0f0837,0x3b537284,0x3b3c2641,0x3b4b293d,0x3b4d6414,0x3af596d0,0x3acc985f,0x3a7a9cde,0x3a1fff3b,0x391a9c0e,0xb9c18ac3,0x391b0bd8, +0x372795a3,0x392eb7b7,0x393d0461,0x399a274a,0x39ddc7be,0x3a921e7a,0x3ac7c169,0x3b18e206,0x3b172e93,0x3b313539,0x3b41837d,0x3b2dad99,0x3ad18fa6,0x390bd639,0x39b32162,0x3b584de5,0x3b538a67,0x3b4be458,0x3b63eec4,0x3b581568,0x3b643b2e,0x3b59d5d6,0x3b3fcb9a,0x3b2783d2,0x3af39a71, +0x3aaefdfd,0x3aad9a23,0x3aa7bbdc,0x3ab08e81,0x3a8e28a0,0x3a28b833,0x37c940f7,0xb9298362,0xbaa919c5,0xba5d1585,0xba69aa5f,0xba4f3308,0xba3e8075,0xba2b964c,0xba0e766e,0xba02864c,0xb93ac21d,0x3937ae6f,0x39da0dd2,0x3a5ecfd5,0x3a85adc9,0x3ab778c3,0x3ad748c3,0x3b057a89,0x3b42165b, +0x3b5cc4e8,0x3a09ca69,0x3a475d49,0x39fdfe64,0x38b616d4,0xb93f4af6,0x391fbc06,0xb8373a98,0xb925ca13,0xb84219a5,0x394d0845,0x39a921e3,0x39966a11,0x39100547,0x38765b2d,0x39af2b8f,0x39faa074,0xb9b02fc1,0xb8a2d396,0x390773fd,0x39790002,0x3932dde8,0x3928447b,0x39008272,0x3892a88a, +0x380688c3,0x36d48000,0x38e6bde1,0x3990081f,0x39d6201f,0x3a176e62,0x3a3b7f97,0x3a7edb0b,0x3a774962,0x3a3750b7,0x3a0f59a1,0x39ec1a66,0x38a24cca,0x3992e3ab,0x399b2fe9,0x39b01dee,0x398d3f4e,0x396d6012,0x383a5949,0x394d2df3,0x394117af,0xb962227e,0x394dffa3,0x3967b91c,0xb92d7537, +0x38983deb,0x38ee1f4d,0x37b72e34,0x37c0822c,0x388a5149,0x39adebcb,0x3985c128,0x3974b3dc,0x397e3767,0x39baf50f,0x39d5dd56,0x39ff43c4,0x39d5eb6a,0x399fc544,0x38bb6204,0x3880063c,0x391fe077,0x3a1e678e,0x39954d71,0x38e171c1,0x36aa0d7a,0x399f4724,0x3999bb38,0x39497f2a,0x3983b778, +0x397658c4,0x3a0b3664,0x39755406,0xb9293f3c,0xba197169,0x3990f3ae,0x38fcc44c,0xbabca5dd,0xb9b5d289,0xba10142c,0xbaa4ec24,0xba4d6df1,0xba31c7f6,0xba408a22,0xba3daf85,0xba293c97,0x395f01b5,0x38afa673,0x39da8ee9,0x3a249e5a,0x3a32f641,0x3a79637c,0x3abe1d82,0x3a8d2ebb,0x3a553ce1, +0x3a09ba81,0x39bcbdea,0x3a325f3a,0x3ae5ee1a,0xb899a8cd,0xba01e06b,0xb8812834,0x3aaf577b,0x3ae0426e,0x3a943846,0x3a1c339c,0x3a35e6d2,0x3a9827bc,0x392155f1,0xb990528a,0xbaa514d2,0x38b78802,0x388ae714,0xbb41ff86,0xba2f54e9,0xba429550,0xbb4cc05d,0xba94fb59,0xbaa8da8a,0xbad3c642, +0xbaadaf1f,0xbaa11faa,0x3952ff97,0xb9287718,0x39ba8305,0x3a86d05d,0x3ab2ce04,0x3aed8c3d,0x3b1917c4,0x3aea2ace,0x3a8efa4d,0x3869ba7c,0xb85602a6,0x39590495,0x3b51c613,0x392076a6,0xb97e2d4e,0xb96057f3,0x3aedc9bb,0x3afaa662,0x3a73717e,0x3a73a55d,0x3945ae6a,0x3aa8836f,0xb96ff626, +0xba7b202d,0xbb1fa822,0x39269fcf,0xb9a0e7bb,0xbb9c09b7,0xbb1becd4,0xbb4ded23,0xbb904d3b,0xbb1d26cf,0xbb104cfd,0xbb37a1f8,0xbb118b13,0xbb2fb9f3,0xba07cfd3,0xb9fee6a9,0x3a03790d,0x3ad64203,0x3ad69751,0x3b23c1a1,0x3b797ea6,0x3b3e4249,0x3b1c0f27,0x3a06264b,0x3a8c97d8,0x3aaddbc5, +0x3ba8f10d,0xba5e5dd1,0xba83dab3,0xb93ba5fa,0x3b79a491,0x3b967768,0x3b265079,0x3abbe850,0x3a763673,0x3acc973b,0xb9aa1d1f,0xbaa2778d,0xbb596219,0x39615fcf,0xba65b792,0xbb53152a,0xba1e65a5,0xba1c6e9a,0x3a3259bb,0x398775e7,0x39d8f0f9,0xbae981d0,0xba74cd76,0xbad45d42,0xba84fc2e, +0xb9ccf393,0x3a474e14,0x3b1d9c16,0x3b4ad98f,0x3b824668,0x3b9d266f,0x3b629c20,0x3acf3eba,0xba595238,0xbaf830fc,0x39e32ae4,0x3bc2fc3b,0x39f9c660,0xba588fb4,0xb8c71695,0x3b731c76,0x3b62d9d7,0x3a5cd791,0x3a6b98b6,0x3c281928,0x3bed9b09,0x3be9312d,0x3bd792ef,0x3bc0fcda,0x3bbbfe87, +0x3b811041,0x3adb1aed,0x3ad60d0b,0xb928c6ea,0x395cb8b1,0xb9a9c46b,0x39865c24,0x38d3c460,0x3ad37182,0x3b258258,0xbba936ac,0xbbc6359a,0xbbfa9d3f,0xbbfde55e,0xbc208e78,0xbc118a4e,0xbbf507c8,0xbb600252,0x3b0c09d6,0x3c3306a7,0x3c0add63,0x3b4b093f,0xbb84bd93,0xbb26c25e,0xbabfffb5, +0x3b2f367d,0x39774103,0x3b7b2ee6,0x3c1f99ce,0x3c4293e2,0x39b649b4,0x3aa7848b,0xba3913e9,0xb76f3a40,0x3b9da9c5,0xbaaa8849,0xbb2443e2,0xba8531fb,0xb9ffcfca,0xb98b4132,0x38cc65d3,0xb76cea35,0x38bbba2f,0xb9bc2bf3,0xba03db63,0x3707c341,0x3a8aef4a,0xba5b0877,0xb9e8fdc9,0x3a9c4327, +0x3b601bb4,0x3b9c9636,0x3b89d352,0x3a72783d,0xbb1d44b9,0xbbc8ea91,0xbc16658d,0xbbb38a0a,0x3b8bf626,0x3b9a52bc,0x3b65d7d3,0x3ae28365,0xbbdbf789,0xbc228e1e,0xbbcb99f5,0xbb38c40a,0xbb02bf3c,0x3b1b0f87,0xbae6407d,0xbb3a3a02,0xbb64bfe0,0xb9d9a303,0xb876d130,0x39b639a3,0x3989308c, +0x3827c389,0xb783717c,0xb82c12ea,0xb80e3dce,0x391209ec,0x35493a86,0xb9b117e8,0xba840e2e,0xba61c7d6,0xba73d341,0xba0a3526,0xb955a4ba,0xb9bf47aa,0xb99c257c,0xba8ae9db,0xba5c5465,0x38e6dd03,0x3b3f31f4,0x3b31b48a,0xba9036ce,0xbb0e48b6,0xba959f0c,0x3b9f3c59,0x3b717667,0x3b9aea6c, +0x3c143faa,0xb9f34434,0xb76b3ff4,0x3c46fe60,0xb8d5a2c2,0xbb945149,0xbc10276e,0x39c36189,0x39889c87,0xb985649a,0xb89f3db5,0xb8246fa8,0x3887911b,0x38432463,0x3864422c,0x3782c383,0x38a6315a,0xb8935af7,0xb9862127,0x3aaf8656,0x3ac9ef33,0x3aa00685,0x391681a3,0xba88cc5f,0xbac80a60, +0xbaf74aa6,0xba1ebea6,0x3b140e02,0x3bc4463e,0x3b88c3b7,0xbb7c1c19,0xbb707528,0xb9ed9a67,0x3c2a58d3,0x3bd2b70b,0x3bb3aa5e,0x3b78c4c8,0xbaecab94,0xba8c9d38,0x3c30e889,0xbbe0e2de,0xbc643aa9,0xbc3006b1,0xbb0abf4a,0xb9e1ba28,0x372a6210,0x383c3209,0xb7f56615,0xb8af94b2,0xb8a853ed, +0xb92c6f8d,0xb875d66b,0xb91757a4,0xb8b25d18,0x3af973c5,0x3b32a694,0x3b550635,0x3b7e7645,0x3b3df215,0x3b1958c6,0x3a1fe4ef,0xb9c75c47,0xbaa5a302,0xbaaf59d5,0xbb439e22,0xbb20fdb9,0xba7a08b6,0x3b2b7cf6,0x3bc4c147,0x3c287297,0x3af065f9,0xbbb44f16,0xbc252eea,0xbb9e2d25,0x3b94123e, +0x3bf3db0e,0x3c44da47,0x3c641cd5,0x3ba4eaeb,0x3b0a46f0,0xb9806f16,0xb85eea84,0x38ecab06,0x3842b2b2,0x393f621b,0x3961b6e4,0x39a317b7,0x38bf794d,0x3a1ce8b5,0x3ad3817d,0x3b2704f2,0x3b6d16ea,0x3b4b9769,0x3ae059dc,0x3ac43cc4,0x3a80caab,0x3ae87020,0x3ac298a6,0x3a887f62,0x3aa5f31e, +0xba0001bd,0xbad57ebe,0xbb36b10f,0xbbaefaa5,0xbbad0b3f,0xbbb9efbc,0xbb39a7a9,0x3a7d3034,0x3b3ab5cd,0x3b5465cb,0x3a8d5a60,0x3a1454d9,0xba94f076,0xbb1b9e73,0xbb16517f,0xbaef92c3,0xbaacc365,0xba4ea775,0xb919eb76,0xb958d095,0xb9b3aa3f,0xba00e7ea,0xba099cb7,0xb9950687,0x39c9d5bd, +0x3a30a84f,0x3a735ae2,0xb9d4a3c9,0xbaa8415e,0xba6e4129,0xba849eee,0xba6e5663,0xba59d6cc,0x39fa6942,0x3aa4d41a,0x3abe65d2,0x3a9150a6,0x3a8cacfd,0x3a85ce39,0x3a92b9d8,0x39ea1905,0xbad503c8,0xbb22e0be,0xbb5bdd6a,0xbb048d4f,0xb9f13202,0xbb13d785,0xbb28479f,0xbad586f2,0xba849d97, +0xba1771b5,0xba7e4399,0xba48dd4c,0xba93b560,0xb9cb0c3f,0xb9029a76,0x39d7b358,0x397a87ca,0x3a595d83,0x3a9b8cbd,0x3ac65c4a,0x3ab92dde,0x3a8b3c55,0x399ded81,0xb9854193,0xba974926,0xba52dea1,0xb9c44a1b,0x393450d4,0x3a826469,0x3adefd59,0x3b212d3a,0x3b34fbb0,0x3b3e5b23,0x3b29d0d3, +0x3ae6cd97,0x3a0d20cb,0xba3c1dbe,0xbac02a98,0xbacea9f2,0xbb040ff1,0xbaff4ba9,0xb9f1054c,0xb91379d8,0x38b950b7,0xb8cbda5e,0x37ca9a0e,0x399df2c3,0x39d188a5,0x3a119a47,0x3abc55b8,0x3afb9f93,0x3b411ae5,0x3b31f2e1,0x3b4afff9,0x3b53a629,0x3b19dd07,0x3b09aeac,0x3adc18bd,0x3aa7ad5a, +0x3a4272e8,0x39887645,0x3a554634,0x3a5169a5,0x3a873d0c,0x3a9ca111,0x3ac00f1d,0x3ae25888,0x3b03a7e6,0x3b109674,0x3b309419,0x3b1e7ef4,0x3b24619e,0x3b1bd0cb,0x3aef1129,0x3a220719,0xba5ade01,0xba16fec1,0x3b687eb2,0x3b589f7c,0x3b68a0cc,0x3b7269a1,0x3b6dca3c,0x3b715e2a,0x3b635ce0, +0x3b4f0b92,0x3b433158,0x3b2cab8d,0x3b19b002,0x3b21e6d6,0x3b22a70d,0x3b3213fd,0x3b178345,0x3aefc3a1,0x3aa3822b,0x3a8882e6,0xb6dd490f,0x39b9044b,0x39724f10,0x39bb48ea,0x39b59a1e,0x39ce4e8a,0x39c647ed,0x3999e417,0x3a4254cb,0x3a78130e,0x3a9a2458,0x3ad044a8,0x3aded786,0x3b0a56ee, +0x3b18a3ab,0x3b38aa90,0x3b66c6ad,0x3b731187,0x3a62811f,0x3a85834a,0x3a79d454,0x3a2f7195,0x39d3ead3,0x3a387af3,0x3a277e5f,0x3a0b495d,0x3a2ec898,0x3a619d4d,0x3a7ea2d7,0x3a81788b,0x3a6ff35e,0x3a6d6a27,0x3a96802a,0x3aa67790,0x3a078971,0x3a55214f,0x3a7f76f8,0x3a7e0705,0x3a76928d, +0x3a7de682,0x3a7ba775,0x3a7a7499,0x3a792590,0x3a719c48,0x3a8469ac,0x3a8bd359,0x3a983bd8,0x3aa474ac,0x3aa8dc59,0x3abc8469,0x3aac76ce,0x3a8b8e89,0x3a631b59,0x3a49943d,0x3ab3efd4,0xb9608214,0xb82108d5,0x37314eea,0xb8ac923d,0xb86a6801,0xb8c1627d,0xb906c62d,0xb8a54934,0xb9a1128e, +0x3851d3f9,0x381cae10,0xb9ab7237,0xb90c0459,0xb81b5765,0xb8062512,0xb99319ad,0xb99cc647,0x396f8c42,0xb7e8e541,0xb8f52147,0xb8f1752c,0xb521c4ba,0x380ea120,0x38f9721e,0xb8229e83,0xb9135d7a,0xb98f5e7b,0xb998c00d,0xb9384849,0x398d7fe3,0xb89b4e63,0xb97b4d24,0xb9ae79a3,0xb85def46, +0xb8a509ac,0xb9552848,0xb8c86c30,0xb8aa9028,0x39289659,0xb868c16a,0xb9ee8f44,0xba4b4e5a,0xb8415253,0xb9225140,0xbabd0999,0xb9da52ff,0xba14ce02,0xba971410,0xba6c7a31,0xba7811bd,0xba4ccd32,0xba89a2b9,0xba8b8b5c,0x379a3e10,0xb9849529,0x38a4daa6,0x3921a2f3,0x398a41ed,0x3a00d6ae, +0x3a76a2eb,0x39de6718,0x393a0bb0,0xb750e6d1,0xb924e1da,0x39015514,0x3a96a72c,0xba1102fb,0xba5f3d3c,0xb9d99a66,0x3a66bcfa,0x3a9c271f,0x3a09ad3a,0x3946f073,0x399c06df,0x3a429922,0xb8ee0c9d,0xba071cdd,0xbab2fbaf,0xb8b6a65a,0xb820602a,0xbb2a69be,0xba2f2ad7,0xba690bd0,0xbb47b5f0, +0xbad4c057,0xbad1f222,0xbaac9bbc,0xbae00a42,0xbadc41ab,0x390f78c1,0xb9f36f6d,0xb83bca4e,0x39df9117,0x3a525ece,0x3a949963,0x3ad5f7d7,0x3a38b56f,0x37a906da,0xba24763a,0xba2c1511,0xb99374d5,0x3b26f877,0xb9d56f27,0xba4fcfb0,0xba222920,0x3a9be924,0x3a9d1439,0x3916d5b5,0x39da561b, +0x382599cf,0x3a84b084,0xb9d74a23,0xba98022a,0xbb1cbc8d,0x38553785,0xb9961a29,0xbb791582,0xbae3ea25,0xbb06f1e9,0xbb3d8ecd,0xbadc9770,0xbaf79e10,0xbb071c3b,0xbb25605b,0xbb49adcb,0xb9cd0213,0xba571059,0x3911f706,0x3a8be8f7,0x3a8f4126,0x3afabf9d,0x3b4c6ffd,0x3ac78c8a,0x3a80422c, +0xb976a189,0x39bd2fd6,0x3a17b4ea,0x3b83fdf2,0xbab0c8c4,0xbab88237,0xb9e47c7d,0x3b50a2f0,0x3b79d8cc,0x3acd4990,0x3a8263e5,0x3a1128c4,0x3a93ca23,0xb9d9a1e4,0xbaa4bc2c,0xbb471ba9,0x3980a4af,0xb9f6f02f,0xbb026592,0x38c0f45c,0xb968c792,0x3a297af6,0x3955abd8,0x3a011a25,0xba794317, +0xba6dcbf5,0xbaf3bae2,0xba59ce26,0xba52888f,0x39670570,0x3ac73cf0,0x3b122695,0x3b417d56,0x3b72067d,0x3acf2e55,0xb97bab5f,0xbafb9d5e,0xbb2ae2a3,0xb841cf26,0x3ba7b150,0xb99121b6,0xbac1aa34,0xba0a307e,0x3b37cdb6,0x3b149496,0xb98c6a60,0x398366c3,0x3c1f356e,0x3bcc4d13,0x3bc5a331, +0x3bb87cce,0x3ba82a7e,0x3b8c5e56,0x3b1517de,0x3a1dcf31,0x39e3cf70,0xb8f7492b,0x383e5d11,0xb98fa3c4,0x3930c93a,0xb938fe32,0x3abee621,0x3b36939f,0xbb5d8b0b,0xbb9f48a2,0xbbd951c9,0xbbdc1a1a,0xbc12a987,0xbc04176b,0xbbc2330e,0xbae452c7,0x3b6000eb,0x3c458930,0x3c054c47,0x3b0e1cb5, +0xbb9cd7a3,0xbb531b93,0xbb05f641,0x3b0ff6cc,0xb9cae928,0x3b697e88,0x3c28d107,0x3c40ae96,0xb982a5c5,0x3aa2050d,0xba8d0361,0xba044352,0x3b5b16ce,0xba30182d,0xba9c4990,0xb991ca26,0xb92df366,0xb7a5d2f5,0x38328752,0x38776761,0x38231772,0xb8e64b25,0xb9f3b879,0xb9d5084f,0x3a5b2eb7, +0xba9d9ae2,0xba9e8da4,0xb92b013b,0x3b0b0d99,0x3b63fd16,0x3b4e094b,0xb9f090db,0xbb718473,0xbbfadb62,0xbc1bbd6c,0xbba58659,0x3badb894,0x3b574f40,0x3ab57d11,0x38dfbaaf,0xbc07e2f4,0xbc33559b,0xbbc41677,0xbb6bb712,0xb92cb79f,0x3b7d6c3d,0xba01639d,0xbb0b6e1c,0xbb383c21,0xba0d6ea9, +0x3916cfa5,0x395a4c9f,0x3812535d,0x378656cb,0xb7eff60f,0xb842e4f0,0xb7f02e1f,0x3899a66f,0x38b3a6da,0xb8deb8f5,0xba1ce53a,0xba1a82eb,0xba171deb,0xb9f32f47,0xb9c090e3,0xba38c7ab,0xb9f5cf58,0xbabda5ae,0xba74afee,0x3a3f1607,0x3b12a0bd,0x3adc59a7,0xbb27f4dd,0xbb2f826f,0xba8abc8d, +0x3b8b09a8,0x3b7b35b7,0x3baa0398,0x3bd4dde8,0x3a1a1f14,0xba4ac082,0x3c2403a9,0x3a8ae149,0xbb5dece3,0xbbf6e39c,0xb85d98da,0x38facb81,0xb9268cf2,0x373ba302,0xb72fad5c,0x380adcee,0x381b79df,0x3830bbe6,0xb6078732,0xb7635489,0x390e8328,0xb99f1775,0x3ac11577,0x3af84012,0x3ae1b9b8, +0x39370555,0xbaa676a2,0xbaeb0176,0xbb145dc0,0xba607f33,0x3b5c9f9d,0x3ba28f54,0x3b3997ca,0xbbcdef2c,0xbb2b3495,0x3a8fd639,0x3c1d78ac,0x3ba4b6c3,0x3b75cb66,0x3a794fa3,0xbb455ead,0xbbb6e561,0x3ba604c0,0xbbdabb26,0xbc5359b4,0xbc34c375,0xbafa13c3,0xb9a03a22,0x39239094,0xb890a219, +0x374619a5,0xb8623ed7,0xb82f09d8,0xb8f2ae7d,0x370ade75,0xb91a68fc,0xb9a841fb,0x3a807ee0,0x3b11ed0f,0x3b3c9261,0x3b58c225,0x3b11631e,0x3ac4adab,0xb980c9c6,0xbaca0675,0xbb3ac8b2,0xbb4b8dcb,0xbb86d46c,0xbb44f132,0xbaedbe64,0x3b5e1028,0x3bc9726b,0x3c0ad1df,0xbb04f1f9,0xbc1e9389, +0xbc330ab6,0xbc080d2d,0x3b9a781d,0x3c1c5686,0x3c5c0a5b,0x3c7abb8f,0x3b979e3d,0x3b1ba5b0,0xb9761050,0x38e6d63a,0x384b34d1,0x3729e243,0x38c08c61,0x38c99139,0x396ae642,0xb6aef9da,0x39ab0320,0x3ab4bfc8,0x3b18e2fa,0x3b898f7e,0x3b7cd147,0x3b2c0c6e,0x3b023ec2,0x3aad4543,0x3af226c3, +0x3ac2ca68,0x3a722ca7,0x3a725905,0xbaa5e93b,0xbb2ffa49,0xbb76fabd,0xbbc96469,0xbbbd8d29,0xbbbfb27e,0xbb30584f,0x3a1401f2,0x3af0e1fc,0x3ab79905,0x3a8e67ff,0x3a8694c2,0xba12409d,0xbacbefde,0xbaf5210d,0xbab7fc4e,0xba846853,0xba04da90,0x34901b30,0xb7953da7,0xb9305395,0xb93f46f6, +0xb9af4503,0xb98597f5,0x39589c68,0x39f7fb6b,0x3a5fe116,0xb9525544,0xba61dab0,0xba6f2c3f,0xba980b22,0xbaa22b48,0xbabcead2,0xba2b1d42,0xb9a3e153,0xba23b9a7,0xba753e93,0xba6564c6,0xba4a4126,0xb9b9cb1e,0xba21413c,0xbb0c72e2,0xbb338627,0xbb5fcc66,0xbad7c3c5,0xba0bcc0c,0xbb141219, +0xbb2e003c,0xbaf56962,0xbab98f74,0xba8d3d37,0xbac8ad38,0xba9fa28a,0xba9fa9d8,0xba172fc8,0xb9cb5037,0x3895af2c,0xb90e959c,0x39ce5e4e,0x39f8282d,0x3a875b3a,0x3a9c70b2,0x3aa4a037,0x39f1f428,0xb90ab78a,0xba7b5475,0xba4a0530,0xb9ab9a33,0x3931dbd7,0x3a5e3179,0x3abdcd7a,0x3b0b9b0a, +0x3b0c94bc,0x3b02b2cc,0x3ab0da64,0x3a0062db,0xba313b69,0xbaeb192e,0xbafaf93b,0xbae40cd0,0xbb0f26ca,0xbb04ca89,0xbaf2ac97,0xbad223fd,0xba8da1e8,0xba9b9e2c,0xba6759d5,0xb9b16002,0xb88a4a02,0x38a6f26a,0x3a625ac1,0x3aa1bc3a,0x3b0f49b1,0x3af4d213,0x3b274044,0x3b2acb97,0x3b1a61d3, +0x3b075de2,0x3af25f98,0x3ab8662f,0x3a80f126,0x39cd6294,0x3a802223,0x3a854ac9,0x3aa91c41,0x3acb1bb5,0x3afa78fc,0x3b13bfe7,0x3b070f91,0x3b042aea,0x3b0df16e,0x3adc8c55,0x3ac0e0c6,0x3a7b8fee,0x3997842d,0xba6fb673,0xbb099448,0xbaf34831,0x3b38edd2,0x3b1d8408,0x3b51b37b,0x3b491c2a, +0x3b4ce943,0x3b4a4621,0x3b374dc5,0x3b3b4431,0x3b307000,0x3b3338c1,0x3b3032b3,0x3b41f2df,0x3b41c16f,0x3b5b6f99,0x3b3757dd,0x3b15cffa,0x3b017118,0x3acf92ae,0x3a7c8bc1,0x3a7b9de5,0x3a53dbfa,0x3a73c45a,0x3a619da5,0x3a63c3c5,0x3a4322bd,0x3a121711,0x3a8769e9,0x3a8c0193,0x3a9df5ad, +0x3ac46e23,0x3ac91001,0x3af818a0,0x3b07e82c,0x3b2ce43a,0x3b46519e,0x3b430462,0x3a33715d,0x3a3900be,0x3a4f5d4a,0x3a4af58d,0x3a4fd334,0x3a2d2c14,0x3a5345ef,0x3a824a70,0x3a9a36d3,0x3aa9cd1c,0x3ab2bdb9,0x3aba8394,0x3abd58c4,0x3ac32011,0x3ab0e5f8,0x3ab53d68,0x3a99d863,0x3a990a39, +0x3a9897ae,0x3a98d696,0x3a9b6aa8,0x3aa11809,0x3aa2f0d3,0x3aa75f55,0x3aaaaed6,0x3aa79282,0x3aadcd94,0x3aa7defa,0x3aae7898,0x3ab0c26f,0x3aa867ad,0x3aabc4ea,0x3a9146dc,0x3a682e23,0x3a2ec675,0x3a16ebf8,0x3ae8a2ba,0xb9ac95ac,0xb8ad99c9,0xb6fc958f,0xb903a5fc,0xb94d61ef,0xb9b11403, +0xb94002d4,0xb941319f,0xb9fcd668,0xb9693451,0xb9966384,0xba1bcbbe,0xb9f36be9,0xb9c3d4fd,0xb964ed09,0xb9d93d0b,0xb9cdb78a,0xb81c1bb4,0xb9533d8a,0xb97ac3fe,0xb9614507,0xb8f9732f,0xb8b5b7e6,0xb56aa0e0,0xb96fc08b,0xb9a93c88,0xb9c2102c,0xb9bcff23,0xb968392c,0x393d60fc,0xb91092f5, +0xb9944d66,0xb9ad508f,0xb8beff14,0xb8ffc1c8,0xb98b5da6,0xb9016ec1,0xb7dd3c2c,0x395ae10d,0xb988d129,0xba048c05,0xba6324ed,0xb93d2454,0xb9824dc5,0xbaa9d620,0xb9aefc70,0xb9fe2e55,0xba77cb0e,0xba7a7339,0xba8eb8d2,0xba3ed46a,0xbab776fa,0xbaa408bc,0xb8b3e5f6,0xb9e5a33e,0xb92fe36b, +0xb86581d2,0x38b078d6,0x399960f9,0x3a3197d3,0x379dcd6d,0xb94fb568,0xb97b9d59,0xb98e5a83,0xb81a308d,0x3a522284,0xba273df8,0xba5081cc,0xb9752525,0x3a6e166e,0x3a95153b,0x39b13c3e,0x3931b86c,0x39cb72fb,0x3a3ed974,0xb8f0fb19,0xb9d8ba64,0xbaab33a7,0xb9318746,0xb9059d9f,0xbaff5e8b, +0xba2098a4,0xba665289,0xbb3623a2,0xbaf39ed5,0xbaf3e627,0xba679c17,0xbafa1e1b,0xbafdc2c8,0x3931b447,0xba33b183,0xb99fcf8a,0xb8161529,0x39f8f410,0x3a328c68,0x3a9a3aa4,0xb901022d,0xba43aad3,0xba789539,0xba4ebb06,0xb99c0506,0x3b09fb3a,0xba008493,0xba401e08,0xb97d8c45,0x3aa483cd, +0x3a9b0f00,0x36089519,0x3a00cb48,0x39af5ced,0x3a9509ce,0xb9a6adff,0xba938627,0xbb0aea0c,0xb8040bb8,0xb98984fe,0xbb2aa547,0xba97a0aa,0xba8f2c9f,0xbab7e19d,0xba868ca5,0xbaca20f7,0xbaacfe1d,0xbb291367,0xbb52ed66,0xb992328a,0xba921771,0xb93bdc83,0x39f9a531,0x3a330c80,0x3abb6a70, +0x3b28b879,0x398ccb39,0xb97b2785,0xba23a186,0x3914ec55,0x39a27740,0x3b459917,0xbab574e9,0xba95cb18,0x399a0090,0x3b5e331f,0x3b79a651,0x3a98fe59,0x3a89eeb8,0x3a4625be,0x3a8ec316,0xb9721235,0xba82a70b,0xbb21e3e2,0x398dea37,0xb96c8a9f,0xba71854d,0x39f4c4e0,0xb863b4be,0x3a31c1cd, +0x398b9c85,0x39b0697d,0xb98f3185,0xba257341,0xbaf05c71,0xba23f053,0xba8e753c,0xb9b19957,0x3a2b2c69,0x3ac13ea3,0x3b0782b5,0x3b339907,0xb8cec037,0xbae747d0,0xbb27b343,0xbb2c6be4,0x38813e11,0x3b8d3a68,0xb9ee157f,0xbaa2747d,0x3984d169,0x3b42454d,0x3b0db42e,0xb9d78a73,0x39d411e2, +0x3c2211c8,0x3bca584f,0x3bba4d41,0x3b9d4ce6,0x3b8c4b98,0x3b3e495c,0x3a904a0a,0x37986376,0x37ec21d8,0xb8c7f6a1,0xb90c38c1,0xb984826f,0x38d3c36d,0xb9713ab7,0x3a71c029,0x3b253e21,0xbaddd465,0xbb6ca103,0xbbb912ee,0xbbb7c4c8,0xbbfda558,0xbbdaf351,0xbb7a36b0,0x3a367b93,0x3baf1c08, +0x3c58772d,0x3c05acae,0x3aee369a,0xbb9849a6,0xbb350114,0xbab8834a,0x3b3dde17,0x39e3c1cf,0x3b947294,0x3c3c026e,0x3c4af0fc,0x3a5642ab,0x3aeb0b5e,0xba8e7a84,0xb999526f,0x3b0b80c6,0xb8ba6637,0xb9da8cad,0xb7b8be90,0xb79468e1,0x38266660,0x38bcdf8a,0x38aa98c9,0x382abcf5,0xb7e86eca, +0xb9a43e5e,0xba1fad5a,0x3a2a0499,0xbaa10a6b,0xbae8bfc1,0xba959728,0x3ab053b2,0x3b3282d6,0x3b35d49f,0xba41de6e,0xbb77a084,0xbc031210,0xbc0a5494,0xbb634d4c,0x3be300cc,0x3b4fe717,0x3a4698c5,0xb9956294,0xbc0a1904,0xbc298957,0xbb87fa2e,0xbb224976,0x3b361d12,0x3bcf76ed,0x3ac608d3, +0xba7e3f81,0xbb09df21,0xb9c19d04,0x3924ed84,0x38355b61,0xb6d147bd,0xb6dc5ae0,0xb820d5c0,0xb8767a5c,0xb7801d8b,0x376f47ad,0x39233daf,0x37ac8da3,0xb95a2c39,0xb9839145,0xb83bf0a4,0xb8d6872b,0xb80e3661,0xb9a88c0b,0x39390a3c,0xba377591,0x391ccda8,0x3b23b8b5,0x3b2b7723,0x3ae6436a, +0xbb2b0816,0xbae9bf1b,0x398b557a,0x3b945656,0x3b9a3a11,0x3bca4954,0x3b8fdacd,0x3b23f6ba,0xba4166da,0x3bfda2c5,0x3b28d9f9,0xbaca6be8,0xbbc23116,0xb8e70648,0x38f0f75b,0xb8d535a4,0x3810267c,0xb775f9ce,0x3782e482,0x37d6f382,0x37b0ce49,0xb5ad11a9,0xb8850786,0x3966acec,0xb990e391, +0x3ab96c99,0x3b0db0b9,0x3b1394e9,0x3a1648ae,0xba5ac048,0xbaa4c226,0xbac9eebb,0x38bbe31e,0x3bb1251b,0x3b9fb8b5,0x3b2bf737,0xbbe0cb8f,0xb9b2a56d,0x3b637dc2,0x3c0fccd9,0x3b8a2050,0x3b2ee8a9,0xbae2e045,0xbb55018a,0xbc12eef2,0xbb09dfc7,0xbbb918b0,0xbc263339,0xbc1bcfb5,0xbac78b06, +0xb824c19c,0x38af23de,0xb811315f,0x37fd6654,0xb6e52c49,0xb72351d1,0xb86241f9,0x371e9675,0xb7a6278a,0xb9c66bcd,0x3929cf9b,0x3ad7734e,0x3b210d7a,0x3b3791df,0x3af0548d,0x3a92ad14,0xb9e817f9,0xbadc0587,0xbb5419ad,0xbb721d59,0xbb7f3160,0xbb0ced87,0xbaac5aa0,0x3bae61c8,0x3be19117, +0x3bc83c5a,0xbba8b5a7,0xbc4c3a0f,0xbc357398,0xbc22b1b7,0x3b9759e3,0x3c454f43,0x3c726bb8,0x3c7c175a,0x3b82cf77,0x3b242d09,0xb9404916,0x3906b366,0xb8ae769c,0xb7bf9733,0xb7359622,0xb589411e,0x38a93d9a,0x381b2163,0x37da9513,0x3a795f01,0x3b007227,0x3b8a5748,0x3b8fec2d,0x3b6030a2, +0x3b3df8a6,0x3b0d3616,0x3b1cbebf,0x3b0374d2,0x3ac007b3,0x3acbbf95,0xba7ce00c,0xbb27772f,0xbb660f4c,0xbbbd43b2,0xbbab3de5,0xbba04ec4,0xbb171d5e,0xb8db9a04,0x39a9f15b,0xba130b16,0x3ab082c5,0x3acce3f9,0x3958c913,0xb9c09077,0xba9074ce,0xba47c293,0xba12a865,0xb8ebb91d,0x39490cb5, +0x38a39228,0x37fe496f,0x36c70e90,0xb8855294,0xb9350c8b,0x38858d07,0x39ba1d8b,0x3a5b1fea,0x3958aa85,0xba1f32b2,0xba0e733b,0xba4b29b9,0xba8a5fc3,0xbab0c28a,0xba8f689d,0xba8bfa2d,0xbae1aff5,0xbae41068,0xbabfb933,0xbaa107aa,0xba366dc9,0xba4969b0,0xbb03a560,0xbb1f0ecb,0xbb3ecdab, +0xba80c44c,0xb921e65a,0xbad488b8,0xbb1372c1,0xbace345c,0xbad0222b,0xbac87904,0xbae57b0b,0xbac1ae74,0xba9da58a,0xba3cd7ae,0xb9f0ac9a,0xb8eeda10,0xb996b3ed,0xb7c6cafb,0x3724ee1b,0x3a0fff3d,0x3a5fa6ae,0x3a99db30,0x3a2043a1,0x3941953d,0xba272ec0,0xb9664751,0x37eb90eb,0x3a054874, +0x3a8798e7,0x3acd4afd,0x3b0e9f9f,0x3b04837d,0x3adafe40,0x3a4ecbc8,0xb7e3d6eb,0xba88a63d,0xbb033cd4,0xbacfcc9e,0xbaa247ba,0xbae88f1b,0xbad47643,0xbb2cdfe1,0xbb28f1fc,0xbb173501,0xbb05d7ee,0xbaea7757,0xba95f8a9,0xba3809fd,0xb9db3aeb,0x39513b82,0x3a061eb1,0x3a9d7df9,0x3a94523c, +0x3ae6800e,0x3afafb98,0x3afc2275,0x3af2f03c,0x3af42e8c,0x3ac3b6a3,0x3a82352c,0x3a593843,0x3ab5f478,0x3ab6cba4,0x3ada92df,0x3b0432f5,0x3b226500,0x3b3ec4bb,0x3b193125,0x3b08fca2,0x3b0307a2,0x3ab6309a,0x3a7e54f2,0x3962c5bd,0xba19d334,0xbae83461,0xbb2d8481,0xbb2599e7,0x3b0b940b, +0x3ae5c089,0x3b184af0,0x3b1ec8b3,0x3b2a394a,0x3b201e09,0x3b16ee5e,0x3b1809ca,0x3b1cef9d,0x3b285922,0x3b31ed4b,0x3b467a0a,0x3b4d0df2,0x3b6877c7,0x3b4bf834,0x3b2cc51a,0x3b1722ef,0x3b0b352f,0x3abf6ddb,0x3adcbb76,0x3ac16e8f,0x3ad33632,0x3ac43a23,0x3abecd59,0x3a9ff85f,0x3a765896, +0x3abbd3be,0x3aadd077,0x3ab2d8b9,0x3ac6c979,0x3abe0313,0x3ae39658,0x3af7e725,0x3b201331,0x3b262d75,0x3b16c731,0x3a48ba51,0x3a3ba227,0x3a3bcb70,0x3a2967a3,0x3a29e25c,0x3a4d4ea8,0x3a67e096,0x3a799bd0,0x3a9298b4,0x3aa08b4b,0x3aa91d28,0x3ab29717,0x3ab99957,0x3ac2d57f,0x3abe28b4, +0x3ad418f2,0x3aa64e38,0x3ab39f5d,0x3ac46137,0x3ad589d9,0x3ad3fab0,0x3adb2e87,0x3adeb2b2,0x3ae71d55,0x3aede262,0x3aeacd13,0x3aeb8fc8,0x3adaf8d1,0x3add2cdb,0x3ad99979,0x3ac8d101,0x3ac0af7b,0x3a9d7d56,0x3a829409,0x3a4b825d,0x3a34fb9a,0x3b1ee6fa,0xba0e1dcb,0xb96d046e,0xb94b0dea, +0xb984f5ff,0xb9814f49,0xb9b1d85b,0xb9ab9cc3,0xb988620a,0xb9deafe4,0xb98a2cd6,0xb9b1f855,0xba138a9f,0xba0d28ec,0xb9f32a32,0xb94f232d,0xba04b7c1,0xba0aabd9,0xb8304711,0xb9936ab1,0xb9c28d58,0xb9db2a95,0xb9a5573c,0xb99b9b71,0xb9679646,0xba04f169,0xba188b34,0xba0becf5,0xb9fa7db8, +0xb9a7ecc6,0x360e8504,0xb992c973,0xb9d4f50c,0xb9e0db3a,0xb97ddd8d,0xb995b74c,0xb9e9082d,0xb98cc7f3,0xb8e1c7be,0x38989ddb,0xb9683a4e,0xba1d0a81,0xba5c07e1,0xb9b35509,0xb9b6a45f,0xba8477c9,0xb9715396,0xb9c6c87a,0xba5fd23c,0xba869f15,0xba974ac1,0xba1c76c0,0xbac3e5a9,0xbabc10a7, +0xb92cc69a,0xba1e9c65,0xb9b9cfa6,0xb9cf30c0,0xb9558e86,0xb7f36d1b,0x398588e3,0xba013e4f,0xba292ca6,0xba080755,0xb9aecb25,0xb92354ca,0x39b95e11,0xba44c7a3,0xba4acf02,0xb9317f98,0x3a45e6c3,0x3a685d13,0x373a2282,0x37b44156,0x396a7a0b,0x3a093291,0xb8d58813,0xb9fea39b,0xba9bc62f, +0xb99400bd,0xb92aa5b1,0xbaae3912,0xba21ebc3,0xba77c56e,0xbb0cc584,0xbb080530,0xbb07568a,0xba13feee,0xbb007719,0xbb063afb,0x391c2d43,0xba5a5cb5,0xba0f91a5,0xba0ae77f,0x37dde5e5,0x38ee7c0e,0x3a07afe6,0xba8b3330,0xbacab3a5,0xbaa20f68,0xba42dcfa,0xb9251bc8,0x3acc1567,0xba0fe538, +0xba3b727e,0xb832eff6,0x3a88795b,0x3a602e85,0xb9ca962e,0x39a9630a,0x39bb48fa,0x3a8c4288,0xb948c93b,0xba919f51,0xbae5931b,0xb8ec9fd4,0xb96c9747,0xbacc5380,0xba08b7f1,0xb97a6dbf,0xba24af79,0xb9b443d8,0xba89ea76,0xba331455,0xbb1bdb42,0xbb4e31e5,0xb954afab,0xbaae5bcb,0xba0f3374, +0xb956879f,0x391e1aa0,0x3a4a7aaf,0x3ae720d6,0xba937149,0xbac4d57e,0xba6a09dd,0x39784473,0x39c1aaa1,0x3af84e32,0xbaa56bcf,0xba5cfcad,0x3a60edfd,0x3b5381c8,0x3b5e6b41,0x3a0ecf52,0x3a6b2feb,0x3a0cc508,0x3a4bf4d7,0xb8a9f9e9,0xba51eab1,0xbafea703,0x39509575,0xb90147e0,0xb8463676, +0x39967431,0x38e1a470,0x39c11809,0x398b89be,0x397b8e0a,0x384ceeab,0xb91d45fe,0xbacf5faa,0xb9ea0932,0xbaa1202c,0xba4db481,0xb98a86a3,0x3a2a6bb5,0x3a86d617,0x3ac1724f,0xbafcc983,0xbb5418c6,0xbb4524db,0xbb0dfbf3,0x3a089fba,0x3b605db6,0xba03fc40,0xba7a0e26,0x3a43180e,0x3b2d380c, +0x3ac6cc78,0xba73f794,0x393269d7,0x3c13255b,0x3b9d7635,0x3ba2f008,0x3b71d151,0x3b42df9b,0x3adb0c67,0x3983d431,0xb8a1b742,0xb82f42da,0xb909a6db,0xb8a576d5,0xb951d641,0x369e89a0,0xb931c62c,0x39a7484e,0x3af34056,0xb9906ef0,0xbb1a8f16,0xbb97a717,0xbb97094c,0xbbd634b2,0xbbad465c, +0xbae3f8cf,0x3b60ea6b,0x3bf345dd,0x3c6ad31d,0x3c0c645b,0x3b0e5891,0xbb624702,0xbb02ec3f,0xba646704,0x3b478907,0x3a5071a3,0x3b987861,0x3c390fe9,0x3c3f4f98,0x39a0351a,0x3ae33e26,0xb959c617,0xb8f28f55,0x3abefbf5,0x39391b9c,0xb96c48dd,0x383b13e5,0x378af385,0x38a4e746,0x3855fce8, +0x3899f4b2,0x3880ce0e,0xb6c6206d,0xb8f85dc3,0xba150577,0x39d7ab57,0xba7944a9,0xbaeab44d,0xbaeaa17e,0x3a2bca15,0x3afccdf3,0x3b0b0221,0xbaa1e814,0xbb872816,0xbc083fc7,0xbbea68b7,0xbae5c3bc,0x3c085867,0x3b4776b5,0x36b8a325,0xbacbdd10,0xbc132ff5,0xbc280df8,0xbb699616,0xbb2857b2, +0x3b5d4cf5,0x3bf85206,0x3b3c19da,0xb982f49b,0xbad9f649,0xb84dd687,0x3818fd91,0x380c89e0,0xb79f15bf,0xb754eb79,0xb7c60490,0xb8538a38,0xb74ad9ed,0xb728b609,0x38c52902,0x38c636d7,0x3891d7a2,0x38a2bf75,0x39cfaf5b,0x3898d271,0x38d93a53,0xb9190294,0x399ff378,0xb9971f54,0x3a3c3042, +0x3b5deff5,0x3b0e0612,0x3a9938e9,0xbb45dff6,0xba97c665,0x3a950692,0x3b7ead60,0x3b9ddbfa,0x3bc3eb03,0x3a9ffb3e,0x3b21b5c4,0xbac12eac,0x3b58f195,0x3b641812,0xb9ce4b0d,0xbb923491,0x3983b923,0x3789111f,0xb8847879,0x377ec994,0xb718ad36,0x354f9493,0x379d2426,0xb5c7fd9b,0x37a6fb5d, +0xb8c9a671,0x39361850,0xb93741ea,0x3a8c935f,0x3b0cde71,0x3b194675,0x39f360a9,0xba5530e5,0xbaae1cae,0xbaa2dd0b,0x39e5adaa,0x3bcc1868,0x3b659f57,0x3aac461e,0xbbfb8e04,0x3a89fd89,0x3ba1c71a,0x3bdcec86,0x3b61094a,0x3aeffafc,0xbb810291,0xbb6e837e,0xbc341195,0xbc327b56,0xbbbdd9c6, +0xbbe321de,0xbbea4e92,0xba6d7b41,0x38945322,0x387f6282,0x37e27791,0x37c4e3d5,0x375c2689,0x35f8609a,0xb61d62c3,0x3731859a,0x37ecaa62,0xb943d2a2,0xb9bba96f,0x3a7540c0,0x3af5e860,0x3af49bb6,0x3a850127,0x399b59ac,0xba91bc85,0xbb16753b,0xbb871362,0xbb9eb7a3,0xbb8fc59a,0xbb022dbd, +0xba67a347,0x3bd4cb39,0x3bdb0c27,0x3b14c770,0xbbf3b818,0xbc584bb7,0xbc1f4c53,0xbc1face6,0x3b7a830c,0x3c5677d3,0x3c6ac747,0x3c5b0e72,0x3b48fc32,0x3b123243,0xb9a55674,0x3795c734,0xb902ccda,0xb82255e9,0xb828dce3,0xb7f12a80,0xb79aa52f,0x381bbfe8,0xb8f935c8,0x3a039290,0x3ac5556d, +0x3b82c282,0x3b9b4f78,0x3b860901,0x3b5eed25,0x3b2ac13f,0x3b1a47fe,0x3ae9c3cc,0x3a9d00ce,0x3ab3dacc,0xbab022c7,0xbb466ae8,0xbb805a38,0xbbb80016,0xbb96676b,0xbb6d2cdf,0xbaf6ec56,0xba7ee007,0xbaa4df6e,0xbb271ae6,0x3ad318e1,0x3ad99371,0x3a38aece,0x3a343410,0xb9b1aec3,0xb7af8179, +0xb8c09338,0x3957cd38,0x39363db4,0x3934eb3a,0x3872a1c6,0x38c9b38d,0x37dacf40,0xb7042f58,0x37504c65,0x39a98267,0x3a661c98,0x3a254851,0x367cce18,0xb97929f8,0xba02413b,0xba808d44,0xbacb2c21,0xbaf0390e,0xbb0d83ba,0xbb45a555,0xbb3122a8,0xbb11b3bf,0xbae2eea7,0xba9fa248,0xba949cd1, +0xbaf66054,0xbafcb792,0xbb05e6c9,0xb8241bde,0x39ee255c,0xba5566e5,0xbac37dfb,0xba910b90,0xbac1bb6e,0xbae4fc29,0xbae6148d,0xbabe98d1,0xba7dbf30,0xba08ba3a,0xb99a3a5d,0xb916c107,0xb965d7f1,0xb8bf5aba,0xb95b9bf7,0x3961ccfa,0x3a13fb56,0x3a8f443b,0x3a5091ca,0x3a0c1abf,0xb872195c, +0x38905ac4,0x392606e6,0x39e3d40c,0x3a3e3f88,0x3a8b530b,0x3ac51392,0x3aa07251,0x3a44b149,0xb9769133,0xba5de09b,0xbac290c5,0xbb068b39,0xba8fb0f7,0xba100076,0xba8466f9,0xba7dbb41,0xbb416572,0xbb4b253c,0xbb418f6e,0xbb25e08e,0xbb12d528,0xbad15d4b,0xba8f8484,0xba52861b,0xb9dc1f37, +0xb9317307,0x39cdbb7c,0x39b0faa2,0x3a7c3b98,0x3a97bd68,0x3ac467f4,0x3ac7d60e,0x3adfc325,0x3ac85aba,0x3a97b262,0x3a9d1642,0x3acf167a,0x3ad1a5a5,0x3ae70463,0x3b0bfcf6,0x3b28283d,0x3b43a8a9,0x3b0d4b37,0x3ae919ba,0x3ac3a08e,0x3a80e21b,0x3a06ebbe,0xb98c9a2a,0xba91e6f2,0xbb0c3746, +0xbb2b96e9,0xbb2f0471,0x3acb6876,0x3a9a49c8,0x3ae2c423,0x3aef9257,0x3b069a2a,0x3af58c63,0x3aea1909,0x3afd60e3,0x3b08f0c1,0x3b1ed35b,0x3b2dd81f,0x3b44fdc0,0x3b4bbb36,0x3b65b60b,0x3b51accc,0x3b3dbd4b,0x3b340c08,0x3b2ac46f,0x3b0e544c,0x3b19c09d,0x3b0de375,0x3b188960,0x3b12cd0d, +0x3b108106,0x3aff9b49,0x3adb8fa1,0x3b0b4dee,0x3afc9ec9,0x3af0e697,0x3af0e149,0x3ad49908,0x3aee8cee,0x3af96ea1,0x3b183aed,0x3b0abac0,0x3ae2e280,0x3a76a4bc,0x3a520502,0x3a5d4ade,0x3a5e7a58,0x3a6aa47d,0x3a898723,0x3a9bac71,0x3aa79081,0x3abbf6ea,0x3ac46ce2,0x3acbaee9,0x3ad70adc, +0x3ae3e87d,0x3af026e5,0x3ae2c406,0x3af4b443,0x3ad57799,0x3ae29da2,0x3af27031,0x3b023b4c,0x3b022d7f,0x3b063533,0x3b0843be,0x3b0d8722,0x3b11d4d9,0x3b105a01,0x3b0e054b,0x3b021a64,0x3b025861,0x3afe564c,0x3aea746e,0x3adb903a,0x3ab332a6,0x3a9baabe,0x3a81d582,0x3a6f145f,0x3b4aead7, +0xba53204f,0xb9d353f6,0xb9c9797f,0xb9dee967,0xb9d48bac,0xb9f8f2f0,0xba01d954,0xb9da03d3,0xba03fffa,0xb9d5beac,0xb9edfbfb,0xba1d0912,0xba325f8f,0xba2d68b5,0xb9af0f29,0xba314a14,0xba36b5b2,0xb93ca857,0xb9e73d54,0xba0da8ff,0xba21df53,0xba090e17,0xba0880ba,0xb9f82df7,0xba51ee21, +0xba5ff12f,0xba3ce902,0xba20b1f6,0xb9ec7e7e,0xb973e6d0,0xb9ebb7b5,0xba0cc998,0xba072cd3,0xb9cada81,0xb9e63462,0xba23edeb,0xb9df9c88,0xb969f05f,0xb8cd35e2,0xb9d20105,0xba453779,0xba7b7573,0xba1c30f0,0xba0b536d,0xba4c1ae3,0xb98e30f5,0xba0d15b8,0xba765354,0xbaaca7f3,0xbaadc67b, +0xba13cc67,0xbad6cdf5,0xbad460ac,0xb9b79d6b,0xba58a81e,0xba24cbdd,0xba452666,0xba0309e1,0xb9c4d2bc,0xb9826654,0xba8622b5,0xba8ffa11,0xba5ab17e,0xb9ccd6ac,0xb98e4dd9,0xb92b9cc0,0xba679605,0xba426ea3,0xb87b9614,0x3a1c9060,0x3a1a34a7,0xb9d84769,0xb94af587,0x38202dd4,0x39710101, +0xb98f51e1,0xba1f1a2f,0xba9a9ea1,0xba049d46,0xb9ae92b8,0xba4eac29,0xba18c539,0xba36b0de,0xbacb339a,0xbaf8e15b,0xbb09b1dc,0xb9e33db3,0xbb0074da,0xbb08f6fb,0x37e4334c,0xba853e1f,0xba54ed50,0xba836dfc,0xb9c9c36e,0xb9ef0663,0xb9833d0e,0xbb02f06f,0xbb1830fe,0xbacb4ff3,0xba2f5604, +0xb836622a,0x3a55a70a,0xba277784,0xba2e6005,0x398faf66,0x3a6c296d,0x3a1ff36e,0xba4b699f,0x391a80cf,0x39e2c494,0x3a7a47d1,0xb98ae4ce,0xba9750d1,0xbacba6eb,0xb997b1c3,0xb96b64b8,0xba23e529,0xb8f185dc,0xb7cd59b5,0xb89d11a1,0x390fbd0e,0xba142cd1,0xb911c298,0xbb01b82a,0xbb3d74d0, +0xb98d8518,0xbac68e35,0xba7be190,0xba676c7e,0xb9b44bd0,0x38bef331,0x3a45cca6,0xbb23b0e5,0xbb3132e0,0xba9aeba0,0x39d3c77d,0x3a076c89,0x3a288e91,0xba962650,0xb9ff03ba,0x3ad1674a,0x3b4a9651,0x3b3fd6f4,0xb9874afb,0x3a2dc37c,0x39d424f1,0x39cb0e50,0xb96c8672,0xba368856,0xbabebd72, +0x3809235f,0xb7b0bde3,0x38f2b023,0x38c099f3,0x387674b3,0x380fa555,0x3864ae22,0x39244d8c,0x39146814,0x39b114ba,0xba8dca9f,0xb9b98317,0xbaa633ad,0xba98915a,0xba8b183b,0xb88d3d5e,0x3777570b,0x381ba556,0xbb721c9d,0xbb966cea,0xbb5e1458,0xbacb9d81,0x3a7db9c3,0x3b0f57ba,0xba18c467, +0xba182c60,0x3abac649,0x3b222e9e,0x3a8eb1d1,0xbab4dd1d,0x38beb613,0x3c069415,0x3b90151e,0x3b80856d,0x3b20c11f,0x3ae1b784,0x3a344515,0xb8cbae9c,0xb7046cf5,0xb878a285,0xb7d27df4,0xb70f4851,0xb85af4c4,0xb808a092,0xb8ececbb,0xb87669cc,0x3a5fbdc9,0x3a4049fd,0xbab65985,0xbb72e49a, +0xbb7e4f65,0xbbb5656e,0xbb86cfeb,0xb9725ac2,0x3bb7c7fe,0x3c104b0b,0x3c690aea,0x3c072401,0x3b0d2a9c,0xbb1bd80a,0xbab4c307,0xb92398d2,0x3b791f13,0x3b0a46d3,0x3bb6024e,0x3c3866ef,0x3c32ed10,0x3aa333b0,0x3aa9ae6a,0xb9c3e7e0,0x39a5f99e,0x3a6c72bf,0x38881fe6,0xb8d6370c,0x38b9f7d5, +0xb76dbbd8,0x38189419,0xb6168f47,0x37ca89f7,0x381349b1,0x3805111b,0x3885de1a,0xb9d32c79,0x39293b66,0xba1eae2c,0xbacb2de9,0xbb0ad115,0x398cdc8b,0x3aa2d4d6,0x3ab64699,0xbaf8e8df,0xbb97bf58,0xbc0b7542,0xbbc2177b,0xb9f9c4b0,0x3c0cee39,0x3b2a954a,0xba43ba0a,0xbb316ad0,0xbc0e8f56, +0xbc122160,0xbad27a12,0xba9c1262,0x3baee723,0x3c1433e9,0x3b89344e,0x39ae60e8,0xbab718e6,0x39452024,0xb8c2c91d,0x38923a93,0xb801a95d,0x376518c7,0xb70ac88d,0xb7657046,0xb4fc637a,0xb8367de2,0x38714e2e,0x38530174,0x3918d305,0x394aee4b,0x3a1d81ac,0x3977c702,0x39af59f2,0x396715ac, +0x3a06cd9d,0x399825be,0x3aaa93db,0x3b767801,0x3abc27da,0x3993f7be,0xbb7213b1,0xba104e47,0x3b0d2b83,0x3b809cc3,0x3bb3bbf2,0x3bd19957,0xb9d01895,0x3b692b0f,0xb9ee45eb,0x3a20e275,0x3b756e24,0x3a368bdf,0xbb4ed2c9,0x3a39f752,0xb9348047,0x37963727,0xb7f2e024,0x36d2128a,0xb73b55d2, +0x370b38f0,0xb74fe5ae,0x37cc73a0,0xb853a9fc,0x385b4371,0xb8cd93d2,0x3a113538,0x3adc1a24,0x3b0960d8,0x39b4ab88,0xba219939,0xba9edcb6,0xba0fab7c,0x3a921448,0x3bdd2404,0x3b159a1b,0x39a83959,0xbbf62675,0x3b240bfb,0x3bd4abb7,0x3baf32cc,0x3b6fcf8f,0x3b0429d1,0xbbaa003f,0xbb21051b, +0xbc305b80,0xbc8f9a81,0xbbb8d410,0xbb78f27b,0xbb9375a9,0xb90d35e7,0x372851c7,0x38fb2ba3,0xb62af761,0x37dd3fd0,0x35d856da,0x3735f30a,0x3765aaad,0x372df65c,0x3781a8af,0x38076062,0xba13e93b,0x395a2801,0x3a8a3ea6,0x3a4eafb1,0x3911b06e,0xba07dc75,0xbad55d6e,0xbb39f428,0xbb9720af, +0xbba9d236,0xbb8883e3,0xba8fc780,0x3a38ade0,0x3bfdf92c,0x3bd1611f,0xbaca00dd,0xbc050822,0xbc4378a9,0xbbfdd7c8,0xbbf8c29d,0x3b3eef85,0x3c5a9520,0x3c511c56,0x3c29fabc,0x3b256516,0x3ab9bb2d,0xb9f4d83d,0x382ea2c6,0xb91083f1,0xb68fe71b,0xb7e9e026,0xb74924f1,0xb855230c,0x37064f61, +0xb8935e73,0x3891e91b,0x3a763b17,0x3b57815f,0x3b94212c,0x3b8e9419,0x3b6d00f1,0x3b41e1dc,0x3b238364,0x3af19d6f,0x3aad00c7,0x3ac4a550,0xba87ff53,0xbb3a07a7,0xbb78fd60,0xbbac5431,0xbb7d1ca6,0xbb12f1fc,0xbadf3d7e,0xbaf85419,0xbb353e74,0xbb7f00fe,0x3b0a9c46,0x3b018958,0x3aab4a67, +0x3ac84811,0x39d0c5ff,0x3a17f0ac,0x39122d3f,0x3988c608,0x38d3b2e0,0x38e930f6,0xb60a7835,0x3894744e,0x38448102,0x389aa012,0xb7e4d452,0x398dbc12,0x3a50b45f,0x3a6e969c,0x39f78732,0xb7ffd020,0xb99b441f,0xba652166,0xbabc67f0,0xbb0ae2e4,0xbb2dd38f,0xbb70b3d1,0xbb481d6f,0xbb233e1b, +0xbafdb051,0xbad62d79,0xbac9c4aa,0xbafc89f6,0xbaccb070,0xba94e1bf,0x3a80fd91,0x3aaf0210,0x38b5b329,0xb9fb6347,0xb9a3db00,0xba87f156,0xbacfdc11,0xbabc31e3,0xba934cff,0xba121393,0xb97ce035,0xb8cd00b0,0xb7453fce,0xb8d7fcfb,0xb8ed9b08,0xb950e7ec,0xb7842516,0x3999036f,0x3a5ae8c3, +0x3a59ff47,0x3a4f0a23,0x39d97d65,0x3a0311bb,0x39c7abde,0x3a071072,0x3a24de56,0x3a56ee17,0x3a8a3b75,0x3a3f1749,0x3919ed00,0xba70337e,0xbab2caa8,0xbad44a41,0xbaf84f98,0xba21b5dd,0x37f1d105,0xb9a7745c,0xb993b535,0xbb448649,0xbb564ae2,0xbb5490b8,0xbb2e782f,0xbb1726b4,0xbae886ec, +0xbaabb68b,0xba899ff5,0xba63e665,0xba207171,0xb991681a,0xb980d25d,0x3981ea4d,0x39e24429,0x3a73cc79,0x3a87cfc1,0x3ab2cf14,0x3ab78f56,0x3a9c9c4a,0x3aca290d,0x3aea85c6,0x3ae89ae0,0x3af4e290,0x3b0ff784,0x3b29128d,0x3b42b004,0x3b04a55c,0x3ad625ec,0x3aaa5a12,0x3a5e69e3,0x39bc7fcd, +0xb9d345af,0xbaa689d0,0xbb0f9103,0xbb1e794b,0xbb29ef6c,0x3a6cf4cd,0x3a06c1e3,0x3a923e50,0x3a8bda8b,0x3aa56ea1,0x3a8f49b4,0x3a898407,0x3aacdf63,0x3ac290b1,0x3af8a994,0x3b0f2a3b,0x3b2559ff,0x3b2eda5d,0x3b47886e,0x3b3efe8b,0x3b39e7bf,0x3b3dde92,0x3b3b0a98,0x3b2dc095,0x3b34fa7f, +0x3b29e079,0x3b373091,0x3b330254,0x3b327e6c,0x3b216dc1,0x3b0ea5a6,0x3b27eff4,0x3b11cd8b,0x3b02f37e,0x3af6e5b8,0x3aca9d84,0x3ad9df53,0x3add0a38,0x3b02568b,0x3ad0e75b,0x3a901ece,0x3a7ffdd2,0x3a45a0c8,0x3a69f3e6,0x3a86a3eb,0x3a99a2e0,0x3a9dd1a5,0x3ab50614,0x3ac83b60,0x3add19fe, +0x3ae23840,0x3ae93d49,0x3af5af73,0x3b023fa1,0x3b084881,0x3af83ad7,0x3b005bc3,0x3afc2a90,0x3aff7aff,0x3b04dbfa,0x3b0ba4f4,0x3b0c94de,0x3b10c8cc,0x3b12ca08,0x3b18b25f,0x3b1dca66,0x3b1d1845,0x3b197116,0x3b0ba57c,0x3b0c424c,0x3b083774,0x3af8b1aa,0x3ae61f0a,0x3aba6cbc,0x3aa39e09, +0x3a8b73f7,0x3a812414,0x3b5ec40b,0xba8786af,0xba06bcba,0xba0564e7,0xba160958,0xba14b2ac,0xba22d7f7,0xba2a8eef,0xba1739b6,0xba0d7d83,0xba053d7b,0xba0dcf17,0xba237b10,0xba4d9a51,0xba5658f2,0xb9fe0c6f,0xba5fb278,0xba620525,0xb9b596dd,0xba205ac9,0xba37f6dd,0xba4a4eb7,0xba373b33, +0xba3bd34d,0xba39df77,0xba88b8d1,0xba8c6647,0xba65066f,0xba3cd516,0xba158812,0xb9fba753,0xba22367c,0xba2d6ae8,0xba1a7489,0xba082c3b,0xba13577d,0xba40aeba,0xba088615,0xb95a8ad1,0xb947505b,0xba119476,0xba5e0b34,0xba86aeae,0xba4f05aa,0xba2f463b,0xba0ea287,0xb9c33104,0xba2b6a83, +0xba8397d7,0xbacbd39a,0xbabda81a,0xba15090c,0xbad87983,0xbadeb791,0xba1350e7,0xba87519d,0xba70b3ac,0xba8d56a5,0xba48119b,0xba368d29,0xba45398e,0xbac0fa20,0xbac04e8e,0xba92cd1f,0xb9e4a1c4,0xb9d9578b,0xba4b6eee,0xba8fdd9d,0xba4f65f3,0x36340561,0x39c9048f,0x399d4da7,0xba336453, +0xb98a64dd,0x38bdf030,0x38e54a4a,0xb9bc93fa,0xba235c60,0xba8c81ea,0xba2afa07,0xb9eb7fa4,0xb9a8330a,0xb9d0483a,0xb9f17b99,0xba7f73ba,0xbac474ea,0xbafe3817,0xb9cf36f8,0xbafafff4,0xbb03e7e7,0xb9051ce9,0xba95d02a,0xba87add8,0xbab9c372,0xba470abc,0xba831946,0xba8a8e64,0xbb36a78a, +0xbb400468,0xbaf0ad0b,0xba210980,0xb84f8f8f,0xb933c9a0,0xba6d31e3,0xba49d755,0x39fc80f5,0x3a2a751a,0x39c1ade1,0xba6d1ec3,0x39488abf,0x3a4eec55,0x3a7f68ce,0xb940a8cd,0xba84550f,0xbaa6a5dc,0xb9d2507f,0xb93dc63a,0xb832297c,0xb89c6728,0x38c069e5,0x39030d0e,0x39d2ed2d,0x383eb373, +0x392c6550,0xbaab5646,0xbb218638,0xb9d4ddd9,0xbad700ab,0xbab0d161,0xbac81e4c,0xba540815,0xba176d1c,0xb9bf2279,0xbb6f2c45,0xbb70b625,0xbac5ad7f,0x39fac55c,0x39e85023,0xba7f6470,0xbab28a0a,0xb9eee7ea,0x3b0aa970,0x3b30a432,0x3b1e5bfc,0xba36a190,0x3a4296a0,0x3a28aff3,0x39a0e8c9, +0xb92a6ce9,0xb9efbb75,0xba83b666,0xb7a01ac4,0x38870a0d,0x38021903,0x37e65ae0,0xb7c9c3c3,0xb85e5181,0xb8ee8105,0xb7aca706,0x38452d52,0x3a090ad9,0xba03878e,0xb9a8cc85,0xba9da4b7,0xbab55115,0xbae6f5a9,0xba42b742,0xba83440f,0xbac80b7c,0xbbaabfb6,0xbbb91e47,0xbb74588a,0xba89c305, +0x3a8bc249,0x39e71523,0xba8e0edb,0xba17a60b,0x3af3a0db,0x3b054080,0x3a26f8d7,0xbab416af,0x39cab0eb,0x3bf521b9,0x3b89956f,0x3b65ed41,0x3ad80ac4,0x3a723ed8,0x391ed6bd,0xb88b78f9,0xb7810e19,0xb7498956,0x36d9f70e,0x37c5b9a6,0x38059fde,0x38181756,0xb8b67f0b,0xb8fc5930,0x391c4daa, +0x3a910af9,0xba2ffbc4,0xbb426b1b,0xbb5d8757,0xbb94609b,0xbb3b7da0,0x3a995ea8,0x3bfac44c,0x3c21284c,0x3c596311,0x3becefd7,0x3adf08d1,0xbad2e4f7,0xba53af98,0x39f1db26,0x3b88ea25,0x3b50268e,0x3bcd395e,0x3c369781,0x3c2529c8,0x3ae4c8c3,0x3aa653f7,0x3a091aa5,0x3a5fffed,0x3a1f3e35, +0xb828da08,0x36e959fc,0x37d15875,0xb671ccd6,0x35da88a0,0xb7452a7d,0xb78031a3,0xb786dacd,0x38150a18,0x38acfbe8,0xb93a4961,0xb81a12b0,0xb9972365,0xba87c9ce,0xbb0a1c4e,0xb8937b3d,0x39e170b7,0x39ae3aec,0xbb3ff50a,0xbbadf2d4,0xbc0a9302,0xbb9877d4,0x3a208832,0x3c07c198,0x3b1f3d2e, +0xba7d2404,0xbb5b8cf8,0xbc0485a7,0xbbf74519,0xb970cbca,0x37d4e024,0x3baea0fc,0x3c24f48a,0x3bae3913,0x3a3d58d8,0xba65d821,0x3909b9c8,0xb8f0c717,0x3892b9fc,0xb7f86160,0x37943cfd,0xb6e09b5d,0x376ddafb,0x3713f5b9,0xb7f04b63,0xb53ff999,0x37b74c9e,0x38f8b876,0x393bb253,0x3a21d4d5, +0x39954a67,0x39fe501b,0x3a1b00fe,0x3a43b0da,0x3a8cafee,0x3b066828,0x3b7c3dda,0x3a6b0dee,0xb971eb04,0xbb7b7767,0x3a067b8a,0x3b6138fa,0x3b85a270,0x3bb8d5f6,0x3bbeabef,0xbb37eb23,0x3b453224,0xba5f2cec,0xbb23707d,0x3b7e5e5b,0x3a4e6b51,0xbad85e4e,0x3a7009a4,0xb9911ed0,0x38a1c73b, +0xb8470d21,0x37d7dce8,0xb72f64f4,0x368ebecc,0xb7517832,0x378b84ea,0xb774b05f,0xb7c25822,0xb6005f16,0x376f7646,0x3a717903,0x3ac3079a,0x39351af6,0xb99ab923,0xba70e248,0x3a1672d7,0x3b0a0bae,0x3be0c32c,0x3a992bcf,0xb9fed781,0xbbd3e0fc,0x3b71b3e2,0x3bf5a451,0x3b7257d7,0x3b705fa8, +0x3aee3027,0xbbd50228,0xbb1875b1,0xbc29b723,0xbcbb7f29,0xbbc8d59f,0xbae8a255,0xbb071d2b,0x39743763,0xb7ef6307,0x38f7f43d,0xb81c3379,0x370f4a71,0xb77c897f,0x3709b7f0,0xb655c16b,0x37d085ac,0xb7fa48da,0x39175505,0xb9e8cbc4,0xb9c8ed07,0x394f2d58,0xb97b0ed0,0xba1829e3,0xba9d7411, +0xbb04f627,0xbb5765ea,0xbba02fd8,0xbba660fb,0xbb817f8d,0xb9c97d6f,0x3b2d33a5,0x3c04a7c0,0x3ba9bf8a,0xbbaf7c48,0xbc0923a2,0xbc22d874,0xbbb7e4b8,0xbbb31069,0x3a86204c,0x3c3216ba,0x3c178103,0x3bcf7cf6,0x3b03cfff,0x396e4c02,0xb9aa7f11,0x37559d79,0xb8173066,0x3800d2bc,0x36e8e3f4, +0x3793c57e,0xb73e5b68,0xb7f74736,0x34918d10,0xb90dc3e6,0x39df6f74,0x3b209c24,0x3b7efd80,0x3b8c12b1,0x3b7635a2,0x3b59ccc0,0x3b349bcf,0x3af09e70,0x3a9b92ab,0x3a9cdaa7,0xba95f0b6,0xbb4409e8,0xbb868dc5,0xbba2193f,0xbb4d30f3,0xba8bad50,0xbaeab26b,0xbb48068e,0xbb95ba75,0xbba4fe0c, +0x3b141468,0x3aeaacc0,0x3ac2cc2a,0x3af941cd,0x3a6538d0,0x3a6e4651,0x38bfce96,0x3960a148,0xb87b71e1,0xb6285696,0xb873e417,0xb7949577,0xb63178f4,0x38832d99,0x37a86582,0x393ece51,0x3a2895a7,0x3a911a62,0x3a68a6e0,0x39b5f8a5,0x38245929,0xba25bcdb,0xba91078a,0xbb09a181,0xbb34c074, +0xbb8224e3,0xbb5203cb,0xbb2f3fcc,0xbb0933e5,0xbb06292e,0xbb04647a,0xbaffd4aa,0xbab32a8b,0xba09ff78,0x3abd6a87,0x3aef2607,0x3a170042,0x39a51154,0x3961bc2f,0xba2a1d9b,0xbab86104,0xba906e26,0xba2c7254,0xb92647c2,0x3862b3dc,0x38d4f503,0x39072a7e,0x38a6b84b,0xb7066345,0xb895d902, +0xb9146648,0x38cd5c43,0x3a167a7b,0x3a57787a,0x3a80160e,0x3a6afd5f,0x3a39286c,0x39f9d8a8,0x39c55a74,0x39cb1b22,0x39b752a8,0x399bf6ae,0xb7df5d2d,0xba2ef21c,0xbadff7c9,0xbafd7ae0,0xbaea2ed4,0xbae4d48d,0xb9bea93f,0x397f7421,0xb89522d2,0x388610c6,0xbb44a39a,0xbb5b127f,0xbb566993, +0xbb2d5f97,0xbb11b751,0xbaeb90d2,0xbabe13b7,0xba94fc04,0xba8a3b58,0xba58a1c7,0xba1c7e88,0xba27b890,0xb98b9b9f,0xb93181f7,0x39d3a724,0x3a0881f3,0x3a768a46,0x3a91ff66,0x3a9edccf,0x3ad6f3cc,0x3ad3d70e,0x3ad7f266,0x3ad34102,0x3af037fd,0x3b0a2f9e,0x3b21a6bd,0x3ac8630d,0x3a9aedf9, +0x3a649d82,0x3a071228,0x37f7a3b9,0xba2c2636,0xbac35d51,0xbb12f137,0xbb15c695,0xbb25b555,0x3955ee85,0xb935208a,0x39bb6215,0x394c7028,0x39b45d05,0x395706b7,0x3984ec10,0x3a0f6d93,0x3a2f61f3,0x3a906c3b,0x3ab690ea,0x3ae32969,0x3afba03a,0x3b153efe,0x3b16b41b,0x3b1c0415,0x3b308766, +0x3b2e72bf,0x3b3af5c1,0x3b34d3ff,0x3b2e6b70,0x3b394339,0x3b376e9b,0x3b38c48c,0x3b292cfe,0x3b182402,0x3b25879c,0x3b09d83a,0x3ae49872,0x3ac86e61,0x3a965dd4,0x3a9b7dc6,0x3a99f9d4,0x3ab65520,0x3a696363,0x39bd4ea7,0x3a4796d9,0x3a038768,0x3a383353,0x3a7f2e05,0x3aa2f266,0x3a889fa4, +0x3aa40836,0x3ac482e2,0x3adb7d46,0x3adf7fcf,0x3ae6e95a,0x3af33bd3,0x3b00e39e,0x3b06731a,0x3ae42383,0x3adecb65,0x3b02f578,0x3af5698b,0x3af15b5a,0x3af79ad0,0x3afbacbc,0x3b010e57,0x3b02463d,0x3b06e3d4,0x3b0be4d7,0x3b0c7f7f,0x3b0826c8,0x3af77a6f,0x3af9f0b4,0x3af1b875,0x3ad93c9b, +0x3ac42b1b,0x3a9a4b98,0x3a87432c,0x3a64b3dd,0x3a50bc74,0x3b4ca4d7,0xba95bf8b,0xba1bee8b,0xba25f77a,0xba2d5f01,0xba25ae13,0xba346fb4,0xba3a9c26,0xba25d825,0xba068fb6,0xba10fc1b,0xba196d2d,0xba18f481,0xba449a10,0xba58c785,0xba13c850,0xba7266da,0xba72a1b5,0xb9fbde87,0xba32bf0d, +0xba460945,0xba5bdc8a,0xba50ae40,0xba595dd4,0xba61ac48,0xba97eac8,0xba97661e,0xba709551,0xba3f3c1c,0xba1c289a,0xba238a0d,0xba2fbff0,0xba3020c8,0xba1093f6,0xba15d822,0xba23e9e0,0xba53699e,0xba1abe3d,0xb98e7dc4,0xb99bfd0b,0xba0f7d9d,0xba67f23d,0xba8369af,0xba6cab7d,0xba423dfc, +0xb9bb3332,0xb9e2eabc,0xba36390b,0xba892ccb,0xbaefe2d8,0xbad27c97,0xba278280,0xbacc1cfa,0xbad193b1,0xba3b5d0a,0xba93f833,0xba8f0d64,0xbaa5ecd1,0xba74ac42,0xba70ded3,0xba948db3,0xbae0e21a,0xbad57efa,0xbaa15454,0xb9c1980f,0xb9e0b680,0xba9b75f7,0xba8e1ec5,0xba272974,0x3969a7b2, +0x39744106,0x3789ed72,0xba7d7978,0xb9cc7eb9,0xb8e7b096,0xb9281011,0xb9de8c1a,0xba2d79b6,0xba6f9887,0xba3f0467,0xb9f5dc03,0x38c89192,0xb97a9e7e,0xb94172e0,0xb9e7a5b2,0xba314b25,0xbab50f12,0xb98b42c7,0xbae6e853,0xbaf37131,0xb97ce9fd,0xba98542b,0xba93abb2,0xbad8e2bd,0xba85be7e, +0xbab7be8b,0xbade3081,0xbb51d68b,0xbb4d79fe,0xbaf14980,0xb9cdf633,0x38d71de1,0xba615cc7,0xba57c03b,0xba0c37d1,0x3a770d58,0x3a026e7b,0x38dd625d,0xba996051,0x375a5e8f,0x3a3110da,0x3a472b74,0xb880869e,0xba6f165b,0xba86b4de,0xb9e0c14c,0xb8918f20,0x38797fc5,0xb7e76d72,0x38c3373c, +0x38c04ca5,0x39cdd716,0x392fccd8,0x3988ebf4,0xb9f7592a,0xbae40ba9,0xba16dcbb,0xbad790c3,0xbad3cb20,0xbb0177a5,0xba9545f9,0xba9267b1,0xbaaee5cb,0xbb8c2bc0,0xbb860e69,0xbacc42bb,0x3a31711e,0x3a07c9dd,0xbb0db514,0xba94aae7,0xb792eaba,0x3b3e1cad,0x3b177f77,0x3ae246d4,0xbab18235, +0x39ec52a2,0x3990f536,0xb94cae10,0xb96948b5,0xb9bb032d,0xba2de3cf,0x38cde552,0x380cadf2,0xb7406e1f,0x373b9594,0xb7db1f16,0xb88e267a,0xb92ce6aa,0xb803a677,0xb91c8ddf,0x39bc87c3,0x36c82c45,0xb984630c,0xba87df92,0xbac6e32e,0xbb10d2b1,0xbaa21ac8,0xbaef7b6c,0xbb39535b,0xbbc65cea, +0xbbc3c7bd,0xbb6a14aa,0xb9b90d21,0x3aa74221,0xba610938,0xba83867c,0x3533a546,0x3b3012b3,0x3ae3233a,0x38f22f74,0xbae24e66,0x39256d81,0x3bbb7668,0x3b68d6ef,0x3b31a3fd,0x3a81c46a,0x39999dc6,0xb867f975,0xb7d070b1,0x35f5fb91,0xb646f0ca,0x3727cd1b,0x380740c7,0x3876cffb,0x38332291, +0x37241939,0xb89cd6ea,0xb939531e,0x3a836eb1,0xb8a26a90,0xbb12d26a,0xbb3d9ab0,0xbb6371f8,0xbad04797,0x3b1de2f1,0x3c16cb9e,0x3c2aeafc,0x3c422ab6,0x3bd0647d,0x3aefc080,0xb8dd485b,0x39bbef0a,0x3ab8b47d,0x3b903485,0x3b7f839e,0x3bcd9b4a,0x3c24210e,0x3c01ad36,0x3af3f815,0x39de614c, +0x3a22002c,0x3a8c2f51,0x3989cc52,0xb8b0a575,0x388ea92c,0xb79a4042,0x372a63e0,0xb71f3593,0xb74e18cc,0xb7ee33d6,0xb7bb4ee2,0xb7230fec,0x38aecd15,0xb8796042,0xb942939e,0xb7b38503,0xba08054e,0xbae16b6a,0xb92a7db7,0xb949f4dd,0xba0b18ce,0xbb6871cf,0xbbab9cc9,0xbbea4884,0xbb289910, +0x3b0cd510,0x3c0516d5,0x3b2712c3,0xba63786b,0xbb74f76c,0xbbe03ca2,0xbbb7f739,0x3aa2d2f9,0x3a8f4998,0x3bb4eb05,0x3c23d362,0x3bb2ccb4,0x3a3fce01,0xba0f3955,0x38fdb9fc,0xb8b8a31b,0x3834a704,0xb7b25f1e,0x371f5d5b,0xb679b01b,0x3795974e,0x3708b17c,0xb68fe7e3,0xb77d7e80,0x37e64b8c, +0x388ef476,0x38f98d72,0x3a13e8e1,0x3a0b2345,0x3a6a5b2b,0x3aa38c47,0x3aa869c0,0x3b0c3611,0x3b44fbb4,0x3b7e9201,0x3a2ff007,0xb9c9b4f0,0xbb68363c,0x3aafe276,0x3b84e93f,0x3b688691,0x3baf4958,0x3ba893d1,0xbb5a757f,0x3b440711,0x38884681,0xbb7b5b55,0x3b3ac39f,0x3a277055,0xba1a43d8, +0x3a01f12e,0xb9280e90,0x388ce5d4,0xb7dd56ca,0x37b6f01b,0x3647b9b6,0x35ab557e,0x350c0870,0xb512c23e,0x37ad5f80,0xb898fdd2,0x38aa4cb8,0xb98574ff,0x39408f3c,0x3a794269,0x39384da0,0x3975f521,0xb9b1ce71,0x3aece515,0x3b43ad92,0x3bccc935,0x3862e1f6,0xbaa5ffaf,0xbbac3182,0x3b7caa0f, +0x3bea4edc,0x3b005a06,0x3b6e2e30,0x3afbf517,0xbbc5c167,0xba90b9d8,0xbc057e15,0xbcc555d7,0xbbd32fd8,0xba187e31,0xba190378,0x385c0443,0x37c721cd,0x36d3ee3f,0xb7bc9ad0,0xb747739a,0xb7d3e4d2,0xb6897efa,0xb788d711,0x36f5f396,0xb7aa1603,0x38f38318,0xb905a034,0xba297257,0xb9d664c8, +0xba8524f4,0xba98b6df,0xbaefbcaa,0xbb1d7fd1,0xbb77db32,0xbba859b1,0xbb9e9ef8,0xbb758343,0xb82bb65e,0x3b86494b,0x3be95a05,0x3b4d1eb4,0xbc044709,0xbbf6bf6a,0xbbe490eb,0xbb44eafa,0xbb2b3d28,0xb982341b,0x3be376ec,0x3b9f24b3,0x3b367793,0x3ab68ca3,0xb9b0689a,0xb7ee5156,0x36303dcf, +0x3827f3fb,0x37edbe4e,0x384d4497,0x3822b01e,0x37ce0ead,0xb6ce0c6a,0x37933e8a,0xb925f879,0x384281ef,0x3ae1c898,0x3b56a388,0x3b865685,0x3b71368c,0x3b615db3,0x3b2ea835,0x3acd861e,0x3a4dfb53,0x3a1aef39,0xbaba0686,0xbb500d27,0xbb8e4ffb,0xbb994788,0xbb2b2a37,0xb9958c1e,0xbaddc55f, +0xbb60d210,0xbbad3253,0xbba058eb,0x3b2c7ae0,0x3afc7c8b,0x3ad1e2d4,0x3af75e47,0x3a925fac,0x3a072d11,0x37eabc7d,0x37ce37a3,0xb8c238ea,0xb892d910,0xb8ddfd34,0xb8c20086,0xb7ffb1b1,0xb7b35d68,0x386bc536,0x38e3824d,0x39f93747,0x3a9cfb02,0x3aa9a7cf,0x3a49bd0d,0x39b00674,0xb9efb739, +0xba7c4614,0xbb07dd76,0xbb34798d,0xbb842828,0xbb50d9bf,0xbb351711,0xbb135de8,0xbb1a0d63,0xbb17ea11,0xbaf14d05,0xba97a718,0x38332e77,0x3afe7239,0x3b1e5dd2,0x3a901ae2,0x3a761505,0x3a3e7d08,0xb99527b8,0xba8ae92a,0xba11bd02,0xb986cdf2,0x38db339a,0x396196d1,0x3925dd81,0x395f626d, +0x39495801,0x38ae0cdc,0x38be78f9,0xb92b7c15,0xb89671f8,0x3969d8e1,0x3a168576,0x3a69bf8c,0x3a86587d,0x3a23b70b,0x39a4677e,0x364e75ed,0xb7dbb032,0xb98a47dc,0xba201c4b,0xba567f1b,0xbab6fe36,0xbb159111,0xbb149745,0xbae86018,0xbac5b844,0xb941b758,0x39b08d3e,0x391e651f,0x39c6cc72, +0xbb2fee37,0xbb464096,0xbb494ca3,0xbb1996bc,0xbb026d52,0xbae64ee3,0xbab92212,0xba827e25,0xba795335,0xba31624e,0xb9f71c8b,0xba23cf4a,0xba04634b,0xb9fea80c,0xb8e898b5,0xb70b1537,0x39cf2cf5,0x3a22c596,0x3a4a7673,0x3aabadb4,0x3a937ad1,0x3a9c3332,0x3a8b6ef2,0x3a9184fc,0x3aa249b8, +0x3ac640c9,0x3a5c6d86,0x3a30ccfa,0x3a1153c4,0x398a34f2,0xb9470eed,0xba46f5ea,0xbabf4bf9,0xbb038553,0xbafcd738,0xbb10cdc3,0xb9773672,0xba09ac78,0xb99f486c,0xb9dbbe54,0xb99aa2c1,0xb9d92782,0xb9a3f3fa,0xb941d36e,0xb85ef6be,0x3986c078,0x39fd913f,0x3a58e8a7,0x3a92bd66,0x3abda7eb, +0x3ad6ad10,0x3af005e8,0x3b12602c,0x3b17cade,0x3b342c1f,0x3b2c5a1c,0x3b27c774,0x3b2ae082,0x3b29d91f,0x3b2bbf6f,0x3b1e65af,0x3b0eb9f5,0x3b0ef5b4,0x3ae12223,0x3aa760f5,0x3a8aef7e,0x3a443093,0x3a48f962,0x3a3d2f39,0x3a603dd5,0x39b6ca1f,0xb9081002,0x3a004bd5,0x398522ce,0x39e773fd, +0x3a3b255b,0x3a80ebcc,0x3a42b530,0x3a733fd7,0x3a979291,0x3aae7d1d,0x3ab6b09f,0x3ac19af2,0x3acb4cd0,0x3ad3d4dc,0x3adbf562,0x3ab5227a,0x3aab34b3,0x3adda2de,0x3ac6fecf,0x3abd5c60,0x3ac11efd,0x3ac48bf2,0x3ac9d4b4,0x3aca4237,0x3acebd81,0x3ad6b71a,0x3ada511e,0x3ad3f7d3,0x3ac40515, +0x3ac984d6,0x3ac206e3,0x3aa997a5,0x3a94fbda,0x3a61f50a,0x3a45cdac,0x3a231ebc,0x3a0f17f5,0x3b2604c9,0xba9a44d5,0xba24c1a8,0xba30c7cd,0xba3f0cbd,0xba3b4446,0xba426841,0xba46722b,0xba350b12,0xba010a6d,0xba18a881,0xba2273e9,0xba1d56c9,0xba477090,0xba50379b,0xba188d67,0xba75e155, +0xba785f4f,0xba19ce09,0xba40defe,0xba4c453b,0xba5843e6,0xba5898e6,0xba655180,0xba775093,0xba99976a,0xba953fd5,0xba6aa9ae,0xba372397,0xba1ce746,0xba4004a6,0xba3708d3,0xba2c457b,0xba006bb6,0xba18350b,0xba2573bc,0xba51107a,0xba1e0b19,0xb9a3a931,0xb9e98903,0xba35c407,0xba6d1402, +0xba824976,0xba799b62,0xba4836f3,0xb9206b22,0xb9d5a38b,0xba2cc070,0xba6d04cc,0xbade9b6b,0xbad81d36,0xba40dd98,0xbabf6de5,0xbabb5250,0xba53845c,0xba950432,0xba9b05a2,0xbaacf14e,0xba830128,0xba8898c9,0xbab51c68,0xbae78e19,0xbad3a88d,0xbaa122f5,0xb99cc2a0,0xb9e7e9f1,0xbac3bbed, +0xba8c40c9,0xba0b873c,0x39c49f1e,0x38a0f44c,0xb96f3c63,0xba95a0b2,0xba003b7b,0xb954a6cd,0xb9e52c3e,0xba1ab23c,0xba370310,0xba58ae00,0xba4d3691,0xb9ede1d4,0x3983f2c5,0xb900e40e,0xb7bedd39,0xb92bcfa0,0xb962afc2,0xba330319,0xb9108cdc,0xbab68aec,0xbad2ef82,0xb9b4fc4c,0xba8b944f, +0xba8f4c78,0xbadc8aa1,0xba94efd8,0xbad6341f,0xbb0bfc67,0xbb553526,0xbb4487b6,0xbadd9e06,0xb94149bb,0x392353db,0xbac233c4,0xba571936,0xb9d653c0,0x3aa2c7e0,0x39b34be6,0xb88833e4,0xba9ee1d6,0xb8ac7ebd,0x3a27810a,0x39b50370,0xb97d6d78,0xba5ef865,0xba6d6147,0xb9ba312d,0x380bed53, +0x377f70e5,0xb79a036d,0x38969e75,0x38b78779,0x396a56c1,0x398c2a52,0x39203805,0x3912678a,0xba7ace97,0xba25c724,0xbac7b197,0xbadba760,0xbb0b45eb,0xbaa6db51,0xbabea949,0xbb07bd9c,0xbb8e60f4,0xbb827a4b,0xbabe4c84,0x3a5741bd,0x3a00b118,0xbb4a03e6,0xba855ed5,0x393a0382,0x3b5a1710, +0x3aed12af,0x3a8d952b,0xbae5ec46,0x3949f43e,0x3937415c,0xba245501,0xb9f559ba,0xb9abaada,0xb9d37aec,0x39435f8c,0xb70da58e,0xb6262e0e,0x373111db,0xb82b9c47,0xb8262e70,0xb9048e6d,0xb88db280,0xb935be06,0x39118d96,0x3950a37a,0xb8e38c3f,0xba496a10,0xbabe3c19,0xbb166fb9,0xbac44db4, +0xbb1c18e1,0xbb771e67,0xbbcb647b,0xbbb8ddf4,0xbb4def81,0x398435b9,0x3aa3bb57,0xbb06b907,0xba8e8c05,0x398ff4fc,0x3b4e2b56,0x3ab849c4,0xb94e3be7,0xbada6f81,0x390a1f3a,0x3b926b36,0x3b6c5c53,0x3b087d3a,0x3a0de2d3,0xb62fb6bf,0x377945a7,0xb83f0160,0x3777421f,0xb74a81d8,0x37abe1f8, +0x3766c944,0x385be170,0x383860f3,0x38435c6a,0xb79b3cd4,0xb978127b,0x3a0a107f,0x39b5389c,0xbac84a5a,0xbb143666,0xbb119088,0xb9784fd5,0x3b68d6ed,0x3c269e74,0x3c2b90c4,0x3c2952dd,0x3bb6baec,0x3b0e7ee3,0x3a9556fb,0x3ac2fd4d,0x3b1171d7,0x3b824b3a,0x3b8f02a7,0x3bce52c0,0x3c167534, +0x3bcd4e00,0x3b1bf089,0xb68b1668,0x3a1cf83f,0x3a8b28ea,0xb8c94c43,0x37e4771f,0x36875d56,0x375b0a69,0xb5ddbdc2,0xb68ba9e3,0xb71b6af1,0xb7a9cfeb,0xb7f99274,0xb78c9952,0x37876fce,0x387cbb30,0xb95f5319,0x38a2f41c,0x383925ce,0xba9231c5,0xb99525e8,0xba5e8148,0xbac94735,0xbb8dbd39, +0xbbad403d,0xbbc13a43,0xba9d9fcb,0x3b31d185,0x3bd8d096,0x3b075693,0xba6f75e1,0xbb725e5c,0xbbb02a06,0xbb6cf313,0x3b2f3d4e,0x3b1b7e5c,0x3ba4f4bf,0x3c20b025,0x3bb5094e,0x3a1e2f41,0xb980546b,0x38b62c7c,0xb8888814,0x37a3630f,0xb78f8464,0x36760ca9,0xb69f28e7,0x3761a4b1,0x36aa12f7, +0x36d93666,0xb750b90e,0xb7663ce6,0x38b1b8cc,0x38055a84,0x3a0cc63f,0x3a2cb4d5,0x3a875c4a,0x3ac9d261,0x3ab790d0,0x3b1fef26,0x3b4318d8,0x3b391b19,0xb987612d,0xba8d1840,0xbb71abc1,0x3acee033,0x3b8422c3,0x3b42aa99,0x3b8f5e8f,0x3b71185e,0xbb8848c0,0x3b18f74e,0xb9486a61,0xbb8ca7f5, +0x3b09df6d,0x39de7138,0xb96f4b26,0x392b80dd,0xb843c686,0x381997f3,0xb5ffe1ea,0x377ec79d,0x37455f8c,0xb5de9067,0x37716918,0xb74a93fb,0x381e915e,0xb8c1982b,0x3909e555,0xb9a0d277,0xb9c55f8f,0x3993a008,0xb81166cf,0x39f1c1c3,0xb8a9f3de,0x3b202423,0x3b4c9734,0x3b98821a,0xba9e482c, +0xbb01ed7a,0xbb7ee775,0x3b607957,0x3bc885ac,0x3a57272d,0x3b4e469d,0x3ab3ec4c,0xbbc51fd3,0xba7fb908,0xbbd348d9,0xbcb9fe48,0xbbcee8cd,0xb78fbaa3,0x38a261d0,0xb88cf1c0,0x381fb737,0xb862dd8a,0xb757988f,0xb7e496d7,0xb7c9dec0,0xb733134d,0xb7ecc9a0,0xb7674d34,0xb44b026b,0x37fdfae2, +0x38ddad1f,0xba27d117,0xba623dcc,0xbae464b6,0xbae40b86,0xbb20cb77,0xbb3bb25a,0xbb8821a6,0xbba7da3b,0xbb8fdce8,0xbb508a80,0x39fecd51,0x3bbbc100,0x3bbbc5c9,0x3a9ca13a,0xbc13dea3,0xbbc50a5c,0xbb85804d,0xba9928e4,0xba4f1c0c,0xba96b668,0x3af30b82,0x3a3f9798,0x38460736,0x3a5d9e90, +0xb9f99e18,0x3913e6d8,0xb7abdc55,0x38b87603,0x380ded7e,0x386ecafb,0x382e22dd,0x3861e66c,0x37f3853a,0xb733063b,0xb85a03ac,0xb9476016,0x3a867e51,0x3b25dc9b,0x3b6906cb,0x3b526648,0x3b517875,0x3b1f00f0,0x3aaddaf6,0x3a0c4447,0x38f46524,0xbaac8712,0xbb3d6479,0xbb8304cc,0xbb7659c5, +0xbae1a54b,0x39c722cb,0xbaaae503,0xbb4d14e3,0xbba9e896,0xbb787791,0x3b2ec4f2,0x3ae2ed8e,0x3ad48797,0x3ae181db,0x3a807e5c,0x38ae7576,0x3853a8b1,0xb8f4e871,0xb8b178dd,0xb9149081,0xb8b96f68,0xb8f45804,0xb8911a95,0xb8aaa98b,0x38404474,0x38b12f80,0x396501ec,0x3a969898,0x3abea8bb, +0x3a913bc2,0x3a16f169,0xb9779294,0xba22f9d5,0xbadc224b,0xbb155bf7,0xbb66635e,0xbb374882,0xbb249de9,0xbb05a1e0,0xbb176ef4,0xbb178ad4,0xbacf1574,0xba719a7b,0x39df8014,0x3b0437c5,0x3b28e863,0x3aaa9ab8,0x3aaf661e,0x3a82b130,0x36301591,0xba21066a,0xb94f0eaf,0x375dad03,0x396e0789, +0x396d5317,0x3966992b,0x3949e1de,0x39560593,0x392e871a,0x393c5ba0,0xb89ea578,0xb8d99ec9,0xb71ba5b7,0x39b7efad,0x3a3e9cd0,0x3a854d0a,0x3a1827c9,0x395a498d,0xb97e60d2,0xb964fd30,0xba19ed06,0xba95ddb4,0xbaa3fc13,0xbae67aa8,0xbb1fb00e,0xbb127ade,0xbac8c7eb,0xba93a55d,0xb845f4ca, +0x39ae1b4a,0x3984408c,0x3a18a7e0,0xbb10d24e,0xbb264a1e,0xbb2875bd,0xbaf72940,0xbad4ed0d,0xbac1575e,0xba95122d,0xba29318f,0xba0d5f21,0xb9dcfcc4,0xb99af4ba,0xb9f1dde4,0xb9e03a69,0xb9faa0d5,0xb9ca717d,0xb9a53ce3,0x37d62b1c,0x397a265b,0x39b1dcb6,0x3a75d082,0x3a2bbe9a,0x3a431140, +0x3a124a3a,0x39e03f71,0x39e2d7e9,0x3a2789c9,0x398bfac7,0x399540a8,0x39ad6dc4,0x38dfbbee,0xb99551d7,0xba3c4bb7,0xbaa46ae2,0xbad27236,0xbac2c9e0,0xbae8930a,0xb9ee839c,0xba2adb1f,0xba2e2d8b,0xba4592f0,0xba28185c,0xba4db58d,0xba351da2,0xba3d418c,0xba28a5f3,0xb9bdc003,0xb9187928, +0x3906b197,0x39bbd977,0x3a2a87d6,0x3a807ba1,0x3aa48c05,0x3ade9212,0x3af6a43a,0x3b23db42,0x3b1cd3af,0x3b183ecb,0x3b13efaa,0x3b12ff04,0x3b14fd7a,0x3b0920b2,0x3af39ca4,0x3addb392,0x3aa10008,0x3a4b3fc2,0x3a1bf7a8,0x39c7b8a2,0x39cfb8bf,0x39aec168,0x39d275fa,0xb81c055a,0xb9d96cbf, +0x394ace13,0xb5c690a1,0x39264050,0x39d93d4c,0x3a2e2f8e,0x39d01d83,0x3a16ed14,0x3a52aa61,0x3a7e7a67,0x3a8550dd,0x3a8d20e3,0x3a96e865,0x3aa16e89,0x3aa6bea8,0x3a7ef015,0x3a630e3e,0x3aaab64e,0x3a8f717f,0x3a80e423,0x3a819e1e,0x3a842fdd,0x3a87ea10,0x3a85d6cc,0x3a857257,0x3a8b6289, +0x3a914f48,0x3a8ec915,0x3a880daa,0x3a8f8d1e,0x3a88e122,0x3a639ba4,0x3a3e4371,0x3a063d58,0x39e7f4b5,0x39b148b1,0x398920d6,0x3ae8a117,0xba8d82bd,0xba18f90d,0xba2a488d,0xba2bda85,0xba2b6b9b,0xba3adbec,0xba33be7a,0xba23ab46,0xb9d1abc5,0xba0c8e53,0xba1b2611,0xba173a66,0xba44f167, +0xba4d82e8,0xba10cf42,0xba4ace8a,0xba5656f3,0xba235f4c,0xba2f175b,0xba332145,0xba45626f,0xba4e1f1b,0xba5e431d,0xba77bcfa,0xba8e8dc3,0xba879120,0xba54fb91,0xba23b97f,0xba11f08d,0xba46b06e,0xba2d2f33,0xba195edd,0xb9c88002,0xba0985dc,0xba1537fb,0xba38dce5,0xba0f3c91,0xb9818b32, +0xb9e99c25,0xba2ba637,0xba557eca,0xba5ffe5b,0xba6047be,0xba33a924,0x380d0999,0xb9a244b3,0xba06f7cd,0xba30e32f,0xbaaa76dc,0xbaaf6aed,0xba41f8b3,0xbab981a6,0xba9e880a,0xba46e1df,0xba84547c,0xba8e35af,0xbaa04f5b,0xba8077ce,0xba8b9f6a,0xbac2a0c9,0xbad81d28,0xbabe8ef3,0xba94b5dc, +0xb9883d28,0xb9f34fb6,0xbad5fc45,0xba81deb2,0xb9d465f0,0x3a07a8c0,0xb60c34f7,0xb9a72485,0xba88beab,0xb9d5f3ae,0xb93887aa,0xba095d24,0xba0f0bb4,0xba187040,0xba2ec0b6,0xba3ac201,0xb992ef23,0x398f154a,0xb84ad0e3,0x38d288b0,0x38afb139,0x391cc108,0xb92c5254,0x388e6bf6,0xba4246de, +0xbaa25115,0xb9eb71e3,0xba5eb955,0xba6ea5c7,0xbaccc8d7,0xba9d2c3b,0xbae65101,0xbb1da4c2,0xbb484d28,0xbb2fc2b3,0xbac70990,0xb8e117f0,0x38a3cdfa,0xbaf8bcd2,0xba50b43e,0xb994549b,0x3abd9398,0x3988b604,0xb8df657d,0xba814158,0xb80090c1,0x3a3a4430,0x3911e831,0xb944fb45,0xba3252f9, +0xba2f990a,0xb8327929,0x388c98ca,0xb8868bc5,0xb7cfdda7,0xb6d4d955,0xb88005d8,0xb7c7b068,0x389b0d48,0x37855886,0x39b8f9fa,0xb95e5453,0xba01615b,0xbaace1aa,0xbac3a4be,0xbb05043e,0xbab0a14e,0xbad99bc7,0xbb2a09a3,0xbb83c73a,0xbb67e847,0xbab0b076,0x3a3c2d35,0x397477f6,0xbb6e4546, +0xba744734,0x39984cab,0x3b660605,0x3ab4ba45,0x3a30af7c,0xbac84a86,0x39859ec9,0x392812ab,0xba502577,0xb9d5bd6f,0xb97909e3,0xb883d51c,0x38c7daa1,0xb8460bb3,0x381248cc,0x3703237c,0x37581ec6,0x37fb9c7c,0xb6a1fa72,0xb677f3fa,0xb8a47014,0xb89f0d7e,0x3839d7b3,0x390d6fe3,0xb9fb419c, +0xba9dbca3,0xbb1059e9,0xbae21ca6,0xbb389891,0xbb90641b,0xbbc1962c,0xbba493f5,0xbb3478e7,0x39f18002,0x3a6e8e55,0xbb3f8a82,0xba984d44,0x39e55d89,0x3b5d3151,0x3a99177e,0xb9894fdc,0xba9d5bab,0x399da38d,0x3b448e35,0x3b52e3c7,0x3adefcc3,0x39b0b96b,0xb80833e4,0xb79239ba,0xb7113d11, +0xb6153746,0xb7657272,0xb6282ec2,0xb754250c,0x35011b4f,0x36a18c74,0x37f31bcb,0x383f4285,0xb8766d60,0x38079fc3,0x39e5cbad,0xba546ad1,0xbacf5cf4,0xba8e55ef,0x3a5a1967,0x3b85b24b,0x3c228333,0x3c1a61a4,0x3c02beb6,0x3b8541c6,0x3ae9563a,0x3abf5719,0x3b09477e,0x3b26272a,0x3b42d038, +0x3b84b2b4,0x3bb2f7d5,0x3bf959e7,0x3b8b2fc6,0x3aeee161,0xba1bd1a5,0x3a338a87,0x3a239fdc,0xb96b7992,0x38a4f582,0xb7ab89f8,0x37da57df,0xb625315d,0x371237c4,0x3648f1da,0x36391d49,0xb68b0284,0xb71e6a82,0xb805285b,0x385571f7,0xb8f89ab0,0x3888df42,0x39aa6e40,0xba35cae5,0xba39f233, +0xbae242a5,0xbb2eb770,0xbbab3206,0xbbb0a507,0xbb9be4d5,0xb99e0a5f,0x3b369453,0x3ba55f97,0x3ad2295e,0xba5398ef,0xbb5c83be,0xbb802085,0xbb028d58,0x3b51bf9b,0x3b298410,0x3b879eaf,0x3c0a72d2,0x3b9b040b,0x3919fcf7,0xb89e4215,0x3805d827,0xb81e3a21,0x370f29d9,0xb75311d5,0x360a2c4f, +0xb6c15cbc,0xb5825aaf,0xb5b2b3de,0x364b5914,0x3740f485,0xb7543f3d,0x38498511,0xb8359f7c,0x39bbfe48,0x3a2f0708,0x3a85ba9b,0x3adbf239,0x3ad3822f,0x3b31468d,0x3b47fdd4,0x3b0714d7,0xba0b2096,0xba8cc2a4,0xbb3f262c,0x3b02f9e5,0x3b81e17b,0x3b22fe70,0x3b5d3d18,0x3b215bda,0xbb7e9575, +0x3af4bf1d,0xb8ad9338,0xbb87080e,0x3a5d467a,0x395ff81a,0xb962a072,0x39063e3a,0xb7d0e4eb,0x37fc253b,0xb62f897d,0x36f85814,0x36464b07,0x350c4ec5,0x37411d92,0xb728d312,0x37d11dea,0xb85cd145,0x386ececa,0xb8eb0fc1,0xba531c7b,0xb978b21a,0x37bc1cd9,0x3a74d9de,0x3a199855,0x3b5a67e5, +0x3b6b4237,0x3b67afdc,0xbaadc624,0xbadc73cf,0xbafe9a91,0x3b4aba44,0x3ba31804,0x39d1a147,0x3b34479c,0x3a9533ef,0xbb97e74d,0xba08bea3,0xbb9affa9,0xbc9ac1aa,0xbbb8fd3a,0x39a8afaf,0x38b1fe6e,0xb86317b5,0x3708fdb6,0xb83c573d,0xb629cce5,0xb73b7c8f,0xb6501bd4,0xb6c5976d,0xb74a5db1, +0xb796811f,0x37013634,0xb77c82eb,0x390ab0c4,0xb9b68c6b,0xba90b307,0xbb00a360,0xbaef68fd,0xbb2679b3,0xbb38228c,0xbb80281e,0xbb921831,0xbb5eecb2,0xbb030537,0x3aa8b73d,0x3bdee7b2,0x3b847148,0xba09936c,0xbc0ba882,0xbb893a01,0xbac71751,0x3a3af35f,0x3928ba26,0xba46e44f,0xbb2d9248, +0xbb19c281,0xbaae0af3,0x3a196ee0,0xb9b2a6bb,0x3928bebd,0xb719082f,0x3850d9c9,0x368accef,0x377d180e,0x36e3cf63,0x37f552dc,0x37f04830,0x34ddbf14,0x36e45198,0xb9622d99,0x39f2e9ce,0x3af7f1fe,0x3b4390d7,0x3b3803fc,0x3b3f3e3d,0x3b11599a,0x3aa4bb8b,0x39fa103e,0xb9610a93,0xbaa064b0, +0xbb29daa1,0xbb6a5b71,0xbb479689,0xba94e19f,0x3a20dd68,0xba2dfef1,0xbb016a37,0xbb6805c4,0xbac0a950,0x3b246e45,0x3ad3b5bd,0x3ad2d4aa,0x3ac104e3,0x39ee6400,0xb8e6a2c0,0x37dda0ae,0xb90e548a,0xb746fa95,0xb877d989,0xb6c33328,0xb7d8f5e1,0xb83d719b,0xb83feb0e,0xb846056b,0x38a1c0d3, +0x373a1918,0x3a88e212,0x3acc8a0e,0x3ac15c2f,0x3a6af98e,0x38ce5905,0xb95aef7a,0xba9f792e,0xbae2a5e9,0xbb3bb712,0xbb19674e,0xbb10cfd8,0xbaec2dbb,0xbb0e4e9a,0xbb0cd772,0xbaa212a1,0xba35f84d,0x3a222395,0x3afa7d7e,0x3b1ecc3d,0x3ab43cd0,0x3ac97862,0x3a96994e,0x39909e1e,0xb8e2dc99, +0xb5e60b7f,0x38ebde6b,0x392ee124,0x38be626e,0x38955e1e,0x37ec9b27,0x380aec62,0x38d7b694,0x38dd38c9,0x385008f7,0xb795ff04,0xb8d2198b,0x395af82b,0x3a15d7b6,0x3a7444d9,0x39fc3231,0x38fe9272,0xb9e15b92,0xb9b9a72c,0xba560649,0xbac54ecc,0xbac9243a,0xbaffa79f,0xbb1e55a5,0xbb0710fc, +0xbaa3a080,0xba49b9c4,0x379a41e9,0x39839f35,0x398996ae,0x3a319e77,0xbad385fb,0xbaf7f64b,0xbb016db7,0xbab25e05,0xba9d8b54,0xba87da6b,0xba27f648,0xb92e1aab,0xb97ef934,0xb8825928,0xb89a2062,0xb81727cf,0xb9623cc2,0xb99e84b7,0xb9b5992d,0xb9e45108,0xb95513e0,0xb898deff,0xb8303daf, +0x3a0322e2,0x3920abce,0x3993b006,0x388393a1,0xb946f259,0xb9902738,0xb906e331,0xb947bf57,0xb7382a17,0x39369316,0xb68a0dcf,0xb9b30b16,0xba2dfc3e,0xba85e060,0xba9c5c8a,0xba8d66b3,0xbaaa06c1,0xba0df016,0xba238e6c,0xba56495e,0xba5f7048,0xba453d5f,0xba80d048,0xba7a8eaa,0xba85e9a8, +0xba5abe6e,0xba2bde63,0xba02be40,0xb9b3483b,0xb920acbb,0x38b56712,0x39b49c6f,0x3a352fe1,0x3a970fbc,0x3ab5d595,0x3b0c5546,0x3b0359ec,0x3afe8918,0x3ae7a5f1,0x3ae50bf4,0x3ae6f764,0x3ad210f0,0x3ab53c36,0x3a8d55cf,0x3a2bc36a,0x398184e1,0x390ec2f4,0x386cc457,0x38c30318,0x37e1e611, +0x38711644,0xb9915c0f,0xba0efdc1,0xb897335a,0xb963c483,0xb8c87528,0x38d65e3d,0x39a28098,0x38b6dccc,0x398a0b36,0x39d24923,0x39fab525,0x3a064905,0x3a189c93,0x3a2bea0e,0x3a423137,0x3a4d953a,0x3a1a5148,0x39f4351b,0x3a63d323,0x3a2bcfa1,0x3a070323,0x39ff53eb,0x3a03f5e6,0x3a07b80d, +0x39ff9277,0x39ee0c5a,0x39fd7895,0x3a0db7e7,0x3a11c769,0x3a16bed4,0x3a27c914,0x3a1badb8,0x39e25535,0x39a0cf7b,0x3928ef10,0x3909c513,0x3870ce0b,0xb7056033,0x3a8307f3,0xba8b065e,0xba1d982a,0xba348471,0xba2e12da,0xba2630cb,0xba2ac9ca,0xba2b8178,0xba18447d,0xb9a56ee7,0xb9fbc8a1, +0xba0ed672,0xba0c73f4,0xba39ce28,0xba45bd76,0xba0df546,0xba30094d,0xba3d0b33,0xba20450a,0xba269318,0xba286abd,0xba3b4dc8,0xba4c6171,0xba5e9138,0xba7a0be0,0xba84e601,0xba793a06,0xba49b495,0xba1f5804,0xba157a07,0xba51684b,0xba316b2c,0xba19cf5d,0xb9c770d8,0xba0eeef2,0xba174a11, +0xba302b0e,0xba129005,0xb9b536b8,0xba191c5b,0xba25276b,0xba4472ba,0xba3dc120,0xba557b69,0xba1e565a,0x38f6d1c1,0xb96094d7,0xb9c7e220,0xb9ea0928,0xba5a9e39,0xba7695f8,0xba2c3f04,0xbaa1bf36,0xba8d994d,0xba3f5bb3,0xba61d9b8,0xba804510,0xba9490bd,0xba818430,0xba91e291,0xbac8e7b9, +0xbac4dce4,0xbaa95271,0xba8dbb51,0xb9bae525,0xba1eb4a2,0xbae40702,0xba87d6d3,0xb9f62d50,0x39cea143,0xb980c092,0xba101bb7,0xba8adbc6,0xba02fbef,0xb9b4cc3d,0xba46bcb3,0xba0dedb4,0xba0905b0,0xba1672b6,0xba01b6a0,0xb8dc5dc8,0x38e8a6dd,0xb7698d51,0x38d3dcd6,0x38ec856b,0x3922da92, +0x390afd54,0x3958a5da,0xb94a3219,0xba3961e8,0xba0ce017,0xba249979,0xba3b87e1,0xbab4fa03,0xbaa233af,0xbaed0e03,0xbb223081,0xbb3015cc,0xbb13ece4,0xbab189af,0xb93861e6,0xb915244d,0xbb0e1618,0xba6f7d1b,0xb9cfcc79,0x3aa3a178,0xb80ad4fa,0xb9a5bcc5,0xba6e5f9b,0xb9585b67,0x39ce28c5, +0xb99c3786,0xb9563b79,0xba1819e6,0xb9b7838f,0x38b92700,0x384ff140,0xb822cfdb,0xb7082de5,0xb7a7084e,0xb83d9bdd,0xb810ca02,0xb86471b0,0xb882e86e,0x39378d96,0x392c5f69,0xb94786d9,0xba88ca8d,0xba9e9c52,0xbae9a7c3,0xbab32947,0xbae945cf,0xbb390850,0xbb60d10f,0xbb3eafc9,0xbaa80c3a, +0x39c4accc,0xb982c0e2,0xbb813ad7,0xba92224f,0xb719b0b1,0x3b47b0c5,0x3a2446e0,0x37898698,0xbac79b5e,0xb856cfcf,0xb955e972,0xba9b8cee,0xb9df2ae7,0xb90d1cec,0x38a98176,0x37598d3c,0xb7f16535,0x379f6582,0x35ff6400,0x37584352,0x37c2ee41,0x37760090,0x37b7a704,0x37a7b93a,0xb8847b7a, +0xb8946bec,0x39458780,0xb8f44fa1,0xba716faf,0xbafdf11f,0xbaed8d82,0xbb451b74,0xbb948047,0xbba80772,0xbb86af78,0xbb168757,0x39dd02c5,0x39c1dc86,0xbb63422a,0xbabe5002,0x39260bb9,0x3b406dd0,0x3a1d16a4,0xba096aab,0xba83dd7e,0x3883d2eb,0x3ad3c388,0x3b2f6818,0x3a93031a,0x38c932b7, +0xb8ba18f5,0x37c08471,0xb6c1330b,0x35d45e04,0xb6f0be99,0xb6730ca3,0xb724a062,0xb6d8b825,0xb73fbbe7,0xb68020ee,0x37aabc1f,0x387d91f8,0xb917a5de,0x39834f8b,0xb9644b24,0xba79bce2,0xb8db5d42,0x3acf4829,0x3b880a23,0x3c0f5396,0x3bfcf76c,0x3bb35220,0x3b17dfb8,0x3a8fd3a5,0x3abac186, +0x3b209296,0x3b2a7d64,0x3add54a0,0x3b5dd87d,0x3b8e89e1,0x3bbe6983,0x3b1a5500,0x3ae1b591,0xba8baf66,0x39d4717e,0x3906ae69,0xb8311397,0x380e7f93,0xb7532bcb,0x36da2e42,0x3468b101,0x368c9677,0x366204ca,0x368c8412,0x36b9fd1d,0x369f78a4,0xb7bca377,0x37227cb6,0x36b9b0f2,0xb82c06ea, +0x39974c76,0xb9f392eb,0xba8d9dfa,0xbb17421f,0xbb56557d,0xbbaef3af,0xbb9c47f9,0xbb4cfb69,0x3a5a5ebb,0x3b474e3f,0x3b782899,0x3aa8ace8,0xba24aefb,0xbb3bd489,0xbb1d4073,0xb9cb18f2,0x3b7dda45,0x3b413007,0x3b676e92,0x3be6dcd9,0x3b74d48f,0xb9e96ded,0x39232a6c,0xb877bd74,0x378845f2, +0xb705763b,0x35e85144,0xb58c240e,0xb5985909,0xb6625bcb,0xb5b43cf8,0xb69c39b3,0x375a6c34,0xb799e8ca,0x38376c97,0xb88f01d9,0x3966f145,0x3a2abc99,0x3a83216d,0x3ae594f5,0x3af4d15a,0x3b3461ae,0x3b3d182c,0x3ab42a8f,0xba3371dd,0xba767133,0xbb07588e,0x3b0afedf,0x3b6530ac,0x3b035aeb, +0x3b10149d,0x3a9a4cee,0xbb6681e0,0x3ac9a5b8,0xb9ba5877,0xbb53e60a,0x39299d4d,0x382c6497,0xb913fe67,0x38cba888,0xb7c7572c,0x3771acc0,0xb6daffc8,0x35a541cc,0xb57403e9,0x351c4543,0x362c6f6c,0xb5bfe430,0x369ca303,0xb65ca6fe,0xb7962a9f,0x3884cd5e,0xba4ed075,0xb9f80cb7,0x39301a0a, +0x3aa6ceaa,0x3a95b780,0x3b6df8b6,0x3b617939,0x3b0cfad7,0xbac85635,0xbacb4a07,0xba49d9a5,0x3b162aa1,0x3b65be28,0x39b69e69,0x3b0096ab,0x39fbfdc5,0xbb6f8372,0xba20b13c,0xbb7d04dc,0xbc679570,0xbb8ed505,0x3a33284c,0x36ea3fc1,0xb88d41c8,0x37766527,0xb7a9ecf2,0x37609871,0xb6230a7e, +0x367e8179,0xb5e8228e,0x3550f64f,0xb6c54325,0x34ede0af,0xb7af95af,0x38933c7b,0xb7c9428b,0xba7e5769,0xbaf8d8d9,0xbae32209,0xbb23900c,0xbb357f20,0xbb6a343c,0xbb789b1a,0xbb300ca3,0xba81a513,0x3add6e23,0x3bdcf9dd,0x3b077d25,0xbb018070,0xbbe76960,0xbb334fff,0x38ccb6ae,0x3afcc63b, +0x370a1cc5,0x3908656e,0xbbbb7549,0xbb755ebb,0xbabf5295,0x3a060ad5,0xb93fbe63,0x38cc4e6d,0xb7fac645,0x3650a93c,0xb707df11,0xb6122ddc,0xb63e9430,0xb5622032,0x373e102e,0x351c000b,0x383026b9,0xb9135fd4,0x37b9ccfa,0x3ac0c7e1,0x3b22d7a9,0x3b16a0df,0x3b1fcc9e,0x3ae09189,0x3a739136, +0x39441ca4,0xba2c907d,0xbab7561f,0xbb1ed1f8,0xbb423237,0xbb176035,0xba24c68b,0x3a5aeb69,0x399c247c,0xb9bdf3ae,0xbab2f629,0x3a6508b8,0x3af6d40d,0x3aa07de0,0x3aca79bc,0x3a8b6b39,0xb8a556b2,0xb7b28be4,0xb7f85670,0xb7834519,0x37cb84dc,0x36b3e67f,0x372a380d,0x372f508e,0xb72127da, +0x3753c4a8,0xb8bfd669,0x38b12541,0xb911b9c5,0x3a4ab91b,0x3aca4501,0x3ad3225b,0x3a88f0e8,0x39baeaea,0x3919cfbd,0xba4508bd,0xba9a6421,0xbb1077f0,0xbaf83ec2,0xbaf2e8b4,0xbac2f359,0xbaf4135e,0xbaf3200d,0xba82a409,0xba225611,0x3a087893,0x3ac02d8e,0x3ae3919d,0x3a9ee32f,0x3ad438c8, +0x3a95aec5,0x3a102e09,0xb6502725,0x3840b4b4,0x38f8c96f,0xb6b85731,0xb82d3931,0xb7a6a8b6,0xb7c3b3ac,0xb7a154a6,0x36097f27,0x36c0fa3e,0x38bbc383,0x38910709,0xb8fcb085,0x38b373a3,0x39b40e36,0x3a3e3135,0x39b3f7ff,0x388c0d09,0xb9fc9c0a,0xb9bf3d39,0xba640f45,0xbad0a3ba,0xbad15715, +0xbafde77a,0xbb11c01e,0xbae63e58,0xba7ce435,0xb9fe36c8,0xb7a865f7,0x38aca682,0x393f868e,0x3a26131b,0xba80dcba,0xba9cf560,0xbaabbf9d,0xba6055c4,0xba2c65be,0xba065a96,0xb93ff580,0x38c253d4,0x38c9d1c0,0x38f533b9,0x388a0b3e,0x38ee18ac,0x37c0221e,0xb53cd317,0xb923dcd3,0xb9b2ad59, +0xb9a364d8,0xb99fd918,0xb9be0298,0x37d2508d,0xb99cc921,0xb90bc3ac,0xb9ab73a8,0xba25afaf,0xba41ba08,0xba2211a4,0xba042ce9,0xb98a1df8,0xb888975b,0xb9396931,0xb9e00f3e,0xba208bef,0xba4f8d52,0xba52c216,0xba3d7e7b,0xba53ea91,0xba159cf8,0xba0f4981,0xba549851,0xba51cac6,0xba4adc74, +0xba85ebc3,0xba734039,0xba741afc,0xba49bdb0,0xba35d866,0xba19b102,0xba03ab21,0xb9cfa8b6,0xb990ebef,0xb91cad62,0x392b359b,0x3a207c03,0x3a6168cb,0x3ad73633,0x3ac0f09e,0x3aba5cb1,0x3a99d47d,0x3a9688c4,0x3a965819,0x3a83c33f,0x3a5330a6,0x39f1ccc3,0x3911f0b3,0xb92776cd,0xb95381a8, +0xb93aaa28,0xb91071e4,0xb9585987,0xb957430d,0xb9de87fb,0xba1ded56,0xb984abe0,0xb9bb1d61,0xb99d05d1,0xb929cfeb,0x36f93eab,0xb907ebb9,0xb828271a,0xb7c6fb04,0x37244c6e,0x388ac2dd,0x3908f248,0x39488585,0x3989063f,0x39aad06e,0x3980dfbc,0x3913e916,0x39ee5a4c,0x3979d9e8,0x38b34d67, +0x38462693,0x388914fd,0x3894f605,0x381aeeec,0xb72a06ac,0x374f6d90,0x38a0b17d,0x38f010cd,0x3934cff1,0x396eda92,0x3942e011,0x386bb06f,0xb82430aa,0xb8f2abb1,0xb8edab5b,0xb9236077,0xb952553d,0x39ad7e0f,0xba6ef4c7,0xba09ddd1,0xba1bfe02,0xba1686a9,0xba1bfd64,0xba2548b1,0xba0b4a24, +0xba04fb51,0xb996d165,0xb9f05c73,0xba10eaec,0xba13b33c,0xba4324f0,0xba537f06,0xba21562d,0xba21680f,0xba1417f8,0xba20a6df,0xba17f62c,0xba0cf066,0xba16b6b6,0xba2fc3d6,0xba410cab,0xba5a1aa2,0xba586902,0xba487f2f,0xba276d60,0xba060ef7,0xba01e294,0xba3a2e9a,0xba19eb2b,0xba01a654, +0xb99d74c7,0xb9f21ec4,0xb9fdbc39,0xba0f6eaf,0xb9fb2e11,0xb9bfdd51,0xba1fc952,0xba329612,0xba2ba49c,0xba241f78,0xba4a0241,0xba0576fe,0x38d04943,0xb9243d54,0xb95002d0,0xb94bab64,0xb9958eeb,0xb9cc3f7f,0xb9ce39e5,0xba64bcc4,0xba75e1c5,0xba3b7a67,0xba29aa76,0xba518585,0xba6b477f, +0xba61c627,0xba8346f0,0xbab1b2e2,0xba9cb1f3,0xba82b38b,0xba69ffae,0xb9bce33a,0xba1e5d23,0xbacbdf09,0xba6ad518,0xb9ce8794,0x39ba6b85,0xb99a2719,0xba134845,0xba6b168d,0xb9fa8d29,0xb9c75d42,0xba59c807,0xba0aba80,0xb9d403f7,0xba02594a,0xb920b891,0x38da0640,0x38512f5e,0x375f3a8f, +0x38b185ba,0x3863aef2,0x38b27f06,0x38ea3eaa,0x391ac6b2,0x3932f057,0xb8b86c0b,0xb9f08373,0xb9e95ba3,0xb9f44a58,0xba8c36dc,0xba923f5e,0xbad710d7,0xbb10f1a0,0xbb09209c,0xbadbd0ac,0xba8e1540,0xb944c305,0xb982fda5,0xbb0487ef,0xba57ee68,0xb9b2f3c4,0x3a90129c,0xb8d17439,0xb99f8e36, +0xba315c66,0xb983d223,0x392cb6ee,0xba2926ee,0xb9b1374c,0xba054325,0x37251b35,0x390b87f2,0xb7d4a8fa,0xb8182ab1,0xb6fcb154,0xb8150a5a,0xb81433f0,0xb8335583,0xb86e45f3,0xb8623fd1,0xb89f71ab,0x38d147e9,0x38f99245,0xba227986,0xba607b1e,0xbaaf417c,0xbaa027c2,0xbad84d50,0xbb2a839c, +0xbb27fdd2,0xbb070866,0xba89700e,0x3918dc4a,0xba035950,0xbb68e801,0xba806427,0xb8489bbf,0x3b2aa75d,0x39883147,0xb97580e1,0xba9f3e26,0xb94ff060,0xb9b064b8,0xbaa94b80,0xb9de61e9,0x388cb415,0x3895cd7b,0xb88fad46,0x374d3777,0x378286d5,0x361936a8,0x37bbb41f,0x3793a6b2,0x37bd5ef0, +0x37a36754,0x3818e384,0x37f89b95,0xb8984c26,0x3828c5c7,0x3889cafa,0xba0f3002,0xbac664f4,0xbae01582,0xbb3af836,0xbb85d66b,0xbb829964,0xbb438832,0xbae6e8ce,0x39aebf55,0x36b78020,0xbb584a6c,0xbab1fbe1,0x38da3e47,0x3b24d373,0x39c9b903,0xb9e7066e,0xba2129df,0xb737f37f,0x3a631d41, +0x3b1476d4,0x3a318e58,0xb626277f,0xb852bc3e,0x37e7fcf4,0xb70e34f1,0xb68f4f70,0xb66602b8,0xb729e316,0xb6b3047c,0xb7441a74,0xb701315c,0xb78e70c3,0xb74e70f0,0x38276894,0xb84954ff,0x3899b484,0x3906c837,0xb96765a1,0x3a592f56,0x3b12f12b,0x3b892e1b,0x3bf0a0a4,0x3bc569b7,0x3b70df0a, +0x3a9fda58,0x3a48fb36,0x3ab12ff5,0x3b30594f,0x3b2a6ea8,0x3a16fc22,0x3b2d133a,0x3b550cda,0x3b88e1cf,0x3aa58839,0x3aac6343,0xba66feac,0x3890b8ac,0xb81a1897,0x381899d9,0xb805795d,0x37aed976,0xb781a5d1,0x371fc150,0x35c311a5,0x369a9e89,0x3680f6b3,0x36d260fc,0x36ddb3bd,0x37052e28, +0xb795fcda,0x37bed40e,0xb8755227,0x39042fb7,0xb9cb4b5f,0xbab42ab6,0xbb2a0d8d,0xbb649e7a,0xbba160b5,0xbb7e7766,0xbaf2ff23,0x3abbcc56,0x3b3cb543,0x3b2a97f4,0x3a5a535e,0xba12d6f6,0xbb140dee,0xbaa301c3,0x3a21c845,0x3b732917,0x3b310dd1,0x3b271bef,0x3bb265ee,0x3b1c95a0,0xba414533, +0x399b4efe,0xb8fce880,0x3872b4cc,0xb7c70c62,0x373a9e69,0xb6c93db5,0x360bce94,0xb6858f9b,0xb441643f,0xb69ad1a5,0x357beda4,0xb58dd92d,0x371e716e,0xb7ae6acb,0x390d44fb,0x3a10df8a,0x3a642a23,0x3acf2a18,0x3aed1b1f,0x3b1a6714,0x3b17e494,0x3a38c708,0xba63357e,0xba6ef83f,0xbaab5c3e, +0x3af3c25a,0x3b326766,0x3ab9a1aa,0x3a833a84,0x386e03a2,0xbb432935,0x3a933fe4,0xba09b7c5,0xbb296c5b,0xb981e3fa,0xb80b6e16,0xb8c7cb15,0x389d85c6,0xb7e79453,0x37096154,0xb6f712d6,0x356e3708,0xb66c4cef,0x35e160aa,0xb677c646,0x36c66368,0xb72cd9f7,0x37d728ae,0xb86d5694,0x38ee67d4, +0xba1174de,0xba0ad398,0x39a92555,0x3ab838f0,0x3abe4974,0x3b5e734b,0x3b3fc2cd,0x3a8dcb4b,0xbab55f2a,0xba98f2fd,0x3906b891,0x3acec7dd,0x3b12aa6d,0x39dcee61,0x3a8f54ac,0xb8a60012,0xbb12d300,0xba1cb2ee,0xbb3da16e,0xbc1b4599,0xbb307d29,0x3a90d9c7,0xb99ac438,0x38d20ad4,0xb814e2e6, +0x37e61b7f,0xb5041aba,0x36ecec8a,0x366d935f,0x3630ae73,0x36857f94,0x365522d3,0xb605d597,0xb4e8f848,0xb7c7b8e4,0x38fcc393,0xba22717b,0xbad3e355,0xbabd88b1,0xbb0fad3a,0xbb21c65d,0xbb3f446f,0xbb3bdfd9,0xbafa8c47,0x38b8cd97,0x3b05950d,0x3bc3930d,0x3a08c681,0xbb304dfe,0xbba60026, +0xbad4c722,0x3a831a7f,0x3b46cdfa,0xb94b49a8,0x3ac2de0e,0xbbd96fb0,0xbb765bae,0xb9d0fe0f,0x3945ae5e,0xb84d9725,0x37b319a5,0xb7d12678,0xb76bdc50,0xb723f25e,0xb71dde4c,0xb701d84d,0xb721fb7f,0xb6557470,0xb61612de,0x373a06c6,0x37b14912,0xb945f940,0x3a805139,0x3b02931e,0x3ae47a75, +0x3af605df,0x3a9c0f9e,0x3a2a04e2,0x372ad8da,0xba61ebb3,0xbab8898e,0xbb0b314e,0xbb17b900,0xbad974f5,0xb976f53f,0x3a8be08b,0x3aa68c84,0x3aa5f2f5,0x3a84c4be,0x3b419644,0x3a9d6cfa,0x3a6b9da3,0x3ab6fc17,0x39e1112d,0xb912a925,0xb6e3f739,0xb6c90121,0x382e87b3,0x37b600de,0x38056d29, +0x3770f79e,0x37cd3233,0x36f70405,0x37bbbefb,0xb7dfa402,0x3808929a,0xb9143759,0x39b933b0,0x3ab151a8,0x3ac9365e,0x3a8831c0,0x3a06034f,0x39cfc1b1,0xb9ad7a65,0xba2b9a51,0xbac2e528,0xbab1b7c4,0xbab43fc7,0xba8fa22a,0xbabcd19f,0xbabf5c72,0xba5050aa,0xba2aa9c8,0x393d5dbf,0x3a5b0150, +0x3a728dc8,0x3a83e6f7,0x3ac6c932,0x3a8cf0ff,0x3a0b8bcd,0xb85e62c6,0x3904a4f1,0xb83cf9f0,0xb867f484,0xb89152a0,0xb82cc199,0xb832850d,0xb8075f12,0xb81a5175,0xb791f285,0xb7a73f49,0x38adfcf5,0x37931990,0x3570a30e,0x39170d82,0x39f11106,0x396818de,0x378723ad,0xb9eff4e4,0xb9a0ec0b, +0xba4ac1b7,0xbaba381d,0xbabe0648,0xbae2aeb3,0xbaf877bc,0xbab5b99b,0xba365ee8,0xb98a5186,0xb8a799d2,0xb8a9ff9d,0x38c8c95d,0x3a0a45a6,0xb9de9ce2,0xba183934,0xba46bef4,0xb9cf9cd4,0xb96f7e28,0xb8f444fd,0x38ea01fd,0x391b6dd2,0x3921f845,0x38b9957d,0x38a4b559,0x38a952b6,0x388f2188, +0x38b80db9,0x380dc7ed,0xb8b21dac,0xb99b9ec8,0xb9dad634,0xba1ab67e,0xb9beb5b8,0xba2356e2,0xb9ef37f7,0xba1f8dab,0xba6dae38,0xba82cdf6,0xba68b4c0,0xba3349fa,0xb9e38cf1,0xb98acf0f,0xb9a1dc96,0xb9f0dc0b,0xba07576d,0xba0a4c54,0xb9d60d63,0xb9bc8353,0xb9bb5589,0xba1a82fa,0xb9fd97ce, +0xba3a6ff1,0xba37fbb8,0xba363ca4,0xba66910b,0xba30e4c0,0xba1c2a5d,0xb9cf4f7d,0xb9e85682,0xb9c47f10,0xb9ac4bb7,0xb98a723e,0xb985d4fd,0xb9b50976,0xb9554d2a,0x38f9cd1b,0x39c4a51d,0x3a8af1b2,0x3a6d6e01,0x3a632954,0x3a1cf008,0x3a1732ea,0x3a13fbe0,0x39e9f48b,0x399189fe,0xb8385ef3, +0xb98794dc,0xb9e50b0f,0xb9dfe2bc,0xb9b1daa2,0xb9a155a4,0xb9ca1138,0xb9e36409,0xba0f2380,0xba26d31e,0xb9afe75e,0xb9d9af8d,0xb9d0872b,0xb9a1b393,0xb94b44fd,0xb98d43f8,0xb990861c,0xb9ba1c1b,0xb9c665f2,0xb9a08be8,0xb986c31d,0xb96bcff2,0xb94445c0,0xb8d8b6df,0xb84f3f00,0xb8a7e5a2, +0x390d804b,0xb8592ab8,0xb94c08df,0xb984ba15,0xb976eccb,0xb976f647,0xb98cfdd2,0xb9a6a0b9,0xb99ce71a,0xb976919a,0xb9421bda,0xb8e6170a,0xb89048f1,0xb8d8e01b,0xb94db876,0xb986536d,0xb98e5a97,0xb98198ed,0xb98908d0,0xb9986c4b,0xb911ed59,0xba470da9,0xb9e9539b,0xba03f457,0xb9f7a70a, +0xb9f95d08,0xb9fd3fca,0xb9e690cb,0xb9d7fc77,0xb9374854,0xb9a657e7,0xb9c9678f,0xb9cb5418,0xba075a79,0xba15d35d,0xba0035c5,0xba035440,0xb9f964f9,0xba036bfa,0xb9df43cd,0xb9ddc00a,0xb9f571e8,0xba13179e,0xba230e18,0xba37179a,0xba2bbde0,0xba1e82b6,0xba09fe9d,0xb9e525e9,0xb9e38408, +0xba1e7ec0,0xba049c17,0xb9df5728,0xb98a2794,0xb9cfe2c7,0xb9d38ea0,0xb9df7824,0xb9d23be2,0xb9b6be82,0xba1be860,0xba1bac50,0xb9fcd9a8,0xba147871,0xb9fa5cf4,0xb9759fe8,0x3879919d,0xb8a292ad,0xb8be1f4d,0xb8b63fe4,0xb8c4ee7c,0xb91dca56,0xb903f385,0xb9b95044,0xba093ea4,0xba2bcf77, +0xb9ecfbb0,0xba0bf26e,0xba34ca7b,0xba3ce728,0xba61da38,0xba947a60,0xba70551f,0xba456efd,0xba40b7b0,0xb9d24713,0xba206fb6,0xbaab96fe,0xba513fc3,0xb9d1bb2d,0x395993bf,0xb9b57142,0xba0c0fc7,0xba304d33,0xb9d8776a,0xb9b37d31,0xba4ce731,0xb9ce878a,0xb9aaf2ca,0xb92bac72,0x38ab3c2f, +0x3879ab5e,0xb70d6109,0x3758bd9e,0x382d67e1,0x3806f85c,0x3865561f,0x3879d737,0x386f612a,0x38480faa,0x393676da,0xb8d2306d,0xb9999b19,0xb9684b41,0xba48a7ac,0xba7e8b9d,0xbab77105,0xbaf21fda,0xbacac32c,0xba9d0899,0xba63b827,0xb98df7a3,0xb9c6d0b0,0xbae1ecef,0xba4c689d,0xb9c9d615, +0x3a4a1b3d,0xb94305c4,0xb9906265,0xb9cb71c7,0xb96e9c74,0x3800d9f4,0xba4a007b,0xb9bbc269,0xb941c83e,0x38ea14ea,0xb82a5c61,0xb76582ed,0xb57b94db,0xb68b0d4f,0xb795d7b7,0xb75d9da0,0xb7c5a489,0xb803f6d3,0xb7d9e328,0xb75ef7d7,0xb8b1f5d3,0x38f9ce66,0xb90883e8,0xba03d65d,0xba652e22, +0xba8875cc,0xbab9c25b,0xbb110c96,0xbaeb4a76,0xbab4457a,0xba651e8f,0xb91773b8,0xba3ee23b,0xbb40cd0f,0xba7c5892,0xb9863348,0x3af6267b,0xb88f5a83,0xb9bbbe6f,0xba425377,0xb94ed990,0xb9ac5c77,0xba9a71cf,0xb94d856e,0x388da52f,0xb8042328,0x363c7e94,0x3768d9ed,0xb611baa8,0x36237613, +0x37179e20,0x370c2a4a,0x3736a7e4,0x3758b232,0x3763ce16,0x3785b0ae,0x37bddd57,0xb80d4a50,0x3818dffc,0xb9162be2,0xba8d9a8d,0xbac7b1c7,0xbb23c8a6,0xbb5ec71d,0xbb3e31e2,0xbb055c6b,0xbaade91c,0x38d4b52e,0xb9b1622b,0xbb38403a,0xbaac166c,0xb9085808,0x3aed90f8,0x391eba94,0xb99d7d66, +0xb9197c98,0x37e1ff79,0x3906a452,0x3acbfac7,0x39beaf66,0xb90b7171,0x3839a82f,0xb7066dc4,0xb69db981,0x356f1176,0xb54c03b2,0xb6b39b48,0xb5e662b2,0xb6d20049,0xb6a5c956,0xb6e1426f,0xb6ed4d0d,0xb78ccb44,0x37fbc847,0xb88420af,0x39727ed8,0x39bf7aa1,0x3aade1b9,0x3b1db688,0x3b778157, +0x3bb581a5,0x3b883758,0x3b0f6637,0x39bda2d0,0x39e69f7a,0x3a8e2132,0x3b25313f,0x3b119db7,0xb9c8e08f,0x3add29a6,0x3b010bdc,0x3b243e51,0x397e7149,0x3a741fd8,0xba34357d,0xb8b7919f,0xb8764ca8,0x3876c0a8,0xb81b5d4d,0x37d6bda3,0xb7af52a8,0x37173161,0xb6115fc5,0x364fb047,0x354360d8, +0x36a98c87,0xb4b432bc,0x372cebee,0xb722b786,0x37bfbafe,0xb813e14a,0x37609139,0xb9f396a1,0xbacedc87,0xbb2d2437,0xbb5f4b1f,0xbb89b034,0xbb442524,0xba822716,0x3acbd45f,0x3b1eb62a,0x3ad0b13b,0x39fffba5,0xb9ed5861,0xbadca591,0xb99fbd90,0x3aa95828,0x3b565e60,0x3b15aa98,0x3addfee8, +0x3b7b4d09,0x3a80b266,0xba0395a4,0x39647645,0xb8b9db82,0x3835265a,0xb78a7c54,0x37177295,0xb69b5d92,0x362bae35,0xb62524a7,0x3506273b,0xb6103bb9,0x3584a47f,0xb6bcd3f0,0x37450a9b,0xb80ba94a,0x38d62f82,0x39bcb442,0x3a2c578f,0x3aa159d5,0x3ac91c59,0x3ade582f,0x3aca4bf6,0x390835e1, +0xba7a0c3b,0xba558460,0xba1fd38e,0x3ac6af7b,0x3aff7a28,0x3a687db0,0x390a58fa,0xba30e9f4,0xbb196457,0x3a463db2,0xba394897,0xbafd81aa,0xb975bf93,0x38badfae,0xb88fe208,0x383c9052,0xb7a6bdd1,0x3641eda9,0xb6aca5d0,0x348f72cf,0xb6733c72,0x35131d8d,0xb67a8d1b,0x365a64f4,0xb70ba8ce, +0x37783090,0xb7d43c5d,0x388d067f,0xb96d0a18,0xb9e85943,0x39e00c82,0x3aae34e2,0x3ac733a6,0x3b32bec6,0x3b0ca6a9,0x39956687,0xba9692e8,0xba585260,0x39efde3f,0x3a687390,0x3a970ed4,0x39ce31dc,0x39855d2c,0xba1bd1d2,0xbaa4ef00,0xba2f6aa4,0xbb14ec65,0xbbc00162,0xba76dc04,0x3a367019, +0xb99bab42,0x3929b8af,0xb85db974,0x382d568d,0xb7349516,0x371faf49,0x3603d6c8,0x366794d4,0x368e9696,0x36561901,0x33b03083,0x36eb501a,0xb816c469,0x3897baf8,0xb957f4fd,0xba9ffc19,0xba8dcc48,0xbae52bd1,0xbb03d530,0xbb0f25bc,0xbafdc4b2,0xba9a0b94,0x3a6c65de,0x3b08cabb,0x3b94b7b4, +0xba16a26b,0xbb3911cd,0xbb5540e0,0xba6c8ad8,0x3aa4753b,0x3b595af9,0xba0d3e8a,0x3b2636a8,0xbbbbcf12,0xbb0f7ac4,0x39e5a972,0xb941109d,0x389c40f6,0xb8424d8b,0x36a57b01,0xb7a2fb14,0xb6934323,0xb7317acc,0xb6f4128d,0xb70b5adc,0xb718fcbf,0x36937128,0xb7ef75c1,0x38e52b72,0xb95440a5, +0x3a03dd0b,0x3ac71c30,0x3a9b842c,0x3aa91bd6,0x3a28d5e2,0x39a7910d,0xb945361c,0xba769800,0xbab8f579,0xbaedce02,0xbadca611,0xba8b6cd3,0x38a271d0,0x3aa47acd,0x3b023aea,0x3b1cadd9,0x3b364372,0x3b80f88a,0x39e7558f,0x3a031cdf,0x3a86f55e,0xb9053ca0,0xb5bc8dec,0x37e84011,0x36f02526, +0x37e8a687,0x377f542a,0x37d61acd,0x3763e718,0x37a72e9e,0x373aa8cc,0x375b017d,0x37079699,0x37a4907f,0xb89ad250,0x3741fe7f,0x3a7fa5d2,0x3aad3c57,0x3a6d43fe,0x3a166a62,0x3a03ab73,0xb87e6216,0xb9a263ba,0xba6eaf4c,0xba6906cf,0xba6f6781,0xba38ec32,0xba86afc1,0xba93de86,0xba4fd2b0, +0xba4ce668,0xb97edf9b,0x39327139,0x38f43a79,0x3a3ceb0d,0x3ab0e0be,0x3a7ca3b8,0x39346ec4,0xb89bf1ac,0x36f4adae,0xb8690a6b,0xb7b6e8fb,0xb86feabf,0xb8013929,0xb81cc5a4,0xb7feb398,0xb802de2c,0xb7abab92,0xb7a75a2b,0xb7a891ba,0x389c5c22,0xb6c4c60a,0x37703d50,0x3981f437,0x391ce7fe, +0x36959d9e,0xb9c12529,0xb973521b,0xba23e07a,0xba95951b,0xba9dedfb,0xbabaf1e0,0xbac4eb2a,0xba8895eb,0xba0afbe6,0xb970669e,0xb9567221,0xb97d50e6,0xb6e11f20,0x39c7199d,0xb641f97f,0xb8f99a5a,0xb9b7ad82,0x37a0d8b6,0x37784111,0x38425b91,0x38c7cddb,0x38797042,0x38ec76ac,0x3884ab20, +0x38b011b8,0x388c9247,0x388bb218,0x385769a7,0x385a998f,0x383d50e0,0xb868f7a6,0xb9b77f4d,0xba21ba48,0xba16ea5b,0xba438576,0xba214ff6,0xba3b1250,0xba7ba0e6,0xba853597,0xba71ee37,0xba3fc892,0xba0fbf86,0xb9f7f864,0xb9f20f8e,0xba085681,0xb9fb6716,0xb9b38342,0xb8fc829c,0xb888df00, +0xb760b252,0xba1a0fac,0xb9d6c1c4,0xba1bddff,0xba1b0116,0xba0b913a,0xba079040,0xb96b83fd,0xb982f998,0xb934c60f,0xb9809c8a,0xb96504f8,0xb94b938f,0xb923409a,0xb90933c8,0xb931c0dc,0xb995c1dc,0xb9733315,0xb805895c,0x39fd998f,0x39bec48a,0x39b59b67,0x38c67310,0x389978a4,0x38499490, +0xb8431af2,0xb938edc5,0xb9df4b97,0xba0a90f2,0xba1a5dfa,0xba12d73f,0xb9ef70ef,0xb9f082d2,0xba0b530b,0xba21bc63,0xba289cc7,0xba2b95b4,0xb9b8a7fe,0xb9d9af15,0xb9dfbd75,0xb9bdc2a9,0xb9a5b305,0xb9c3d38c,0xb9df47e8,0xb9f66f79,0xb9ef7c8b,0xb9d10924,0xb9c1dc7f,0xb9bb180b,0xb9b4f572, +0xb9a7f16c,0xb992f42a,0xb97e0d23,0xb8b27701,0xb9656f2d,0xb9bc8703,0xb9ddf181,0xb9d7fb86,0xb9d954fc,0xb9e6881a,0xb9fb8997,0xb9f3215e,0xb9d64830,0xb9be782d,0xb99b8dc2,0xb9929f7f,0xb9a098a8,0xb9baae07,0xb9c88259,0xb9b6afbb,0xb9a229e9,0xb99c4c78,0xb9a403ee,0xb9ec51e3,0xba12d7a5, +0xb9a63322,0xb9b815ff,0xb9ad9632,0xb9bcaf6a,0xb9e41916,0xb9b42b44,0xb9ab1e0f,0xb92d23ee,0xb9846fa8,0xb995d0ed,0xb9972682,0xb9b84d7d,0xb9c3b80b,0xb9b3ea93,0xb9c51eba,0xb9bbe478,0xba02ba9f,0xb9a99c88,0xb998420a,0xb9a51703,0xb9cee023,0xb9e66b1f,0xba0074d8,0xb9e6486f,0xb9d4550c, +0xb9bf7809,0xb9a3515d,0xb9a4bd6e,0xb9dfe6e3,0xb9bdea5f,0xb99f67d3,0xb945b28b,0xb992d7f7,0xb992e41b,0xb994d6d2,0xb9945563,0xb99a32a7,0xb9f83e30,0xba029ebb,0xb9c2e5a4,0xb9d1df09,0xb8f3b2b7,0xb7e90ac5,0x3866b6a9,0xb475fa3b,0x38079837,0x37d5b981,0x37924cf5,0x371d4683,0x38587e00, +0xb883779c,0xb90cfc5e,0xb9cb002e,0xb9a28ab3,0xb9b20ee5,0xb9e832a0,0xba0496d0,0xba21a1e8,0xba503b29,0xba1c63d4,0xb9fc0ccb,0xba04b3db,0xb9b24800,0xba003fee,0xba6ed04d,0xba17c3bd,0xb9a06c6e,0x38e531c1,0xb997f361,0xb9d68c98,0xb9e87345,0xb9a5160a,0xb99634e6,0xba1dde75,0xb9a1e3b7, +0xb8ee7c88,0x38a4e8e0,0x38aa4aa0,0x37e8dded,0xb4249c36,0x36602854,0x36e5dfd5,0xb653da34,0x3774d610,0xb62f7479,0x374cc4a5,0x37da3398,0x38ba92e4,0x38c533ea,0xb8b9d4a3,0xb8f848de,0xb9ec97b6,0xba36ec7d,0xba824ef5,0xbaa83172,0xba7d989d,0xba3dcc41,0xba191ced,0xb983e85e,0xb9ba57c8, +0xba9e3af0,0xba19697b,0xb9a1ac63,0x39fb98d3,0xb92f6a75,0xb94ce8d4,0xb94f0e47,0xb94ad114,0xb8c724f0,0xba43d44f,0xb9953a25,0x37dc7962,0x37c27de9,0xb85ca5bd,0xb69a8333,0x3303c22d,0xb4c32c3b,0xb65abd2f,0xb5da6667,0xb6cef228,0x348e82af,0xb5caac44,0xb7adb9e0,0xb7e00cec,0xb78f47f9, +0x38737e76,0xb956fa88,0xba0280a7,0xba39f549,0xba83a35e,0xbacc8407,0xba8938b8,0xba438ee3,0xba1af54e,0xb9815949,0xba310c50,0xbb03554e,0xba3c6e40,0xb983221b,0x3a9d37d1,0xb938ca88,0xb9ae7a4a,0xb9d291e8,0xb962f8e8,0xb9ad08cc,0xba782395,0x38242346,0x388620d9,0xb7953e0b,0x37b9f94b, +0x35976f0d,0x361c5581,0xb4b2a719,0x365c4c80,0x35a98caf,0x365fbffc,0xb38cac96,0x369f6afa,0x36d1ae4c,0x37b0c41d,0xb6d7a312,0x37a7e439,0x3803af0a,0xba201954,0xba958caa,0xbaecb381,0xbb1a4a78,0xbae94f4d,0xba981a7b,0xba5c9acc,0xb7ee964d,0xb9d96baf,0xbb0111c4,0xba8201cc,0xb93cdd33, +0x3a9531e6,0x383d0f7e,0xb931c0f1,0x384c0a61,0xb828d26a,0xb8c9394b,0x3a74d11d,0xb76b8d42,0xb69a4563,0xb6864574,0xb6d4ffb8,0xb685b78f,0x35f55c0c,0xb5482f9c,0xb517cf77,0xb52c73fa,0xb598bc0b,0xb3d629a1,0xb5fbca8a,0xb6139a74,0xb76d010d,0x3727e1b1,0xb6dc7b38,0xb640cec0,0x3a36ed51, +0x3abb3f7a,0x3b0bc736,0x3b42fd19,0x3b6a8e5a,0x3b1f9a7d,0x3a90a100,0xb8881690,0x397820bc,0x3a4af377,0x3b050a7a,0x3ae58f08,0xba1e7125,0x3a8efb01,0x3a974ef1,0x3ab14812,0xb8d3bbd3,0x3a35067b,0xb9a35f8f,0xb8b09924,0x3897985c,0xb7bf791f,0x371ebc7a,0xb4c56c95,0xb3e039fb,0x3501c6b9, +0x35410dae,0x34f2f86f,0x3513ddff,0x34f73875,0x35161b54,0x366055b8,0x363fa35e,0x355ba0e4,0x36c671e8,0x37e06a6b,0xba0d4a56,0xbab5e5a7,0xbb0d351a,0xbb2b34ca,0xbb414708,0xbafab851,0xb9c709d5,0x3ab0012a,0x3ae91fc6,0x3a6cd6fd,0x396dcdcf,0xb9b67f1f,0xba93d4f3,0x3982f61f,0x3abaa02d, +0x3b21868a,0x3adc9738,0x3a83b0cf,0x3b1517f7,0x38ffa661,0xb8e36878,0x38354b97,0xb772d741,0x36e10f98,0xb5f668bc,0x3592055b,0xb50162ee,0x34973b86,0xb40882f1,0x343458e1,0xb4269283,0xb5454926,0x3482c3f1,0x34beacd6,0xb72aacdf,0x3810ae03,0x395f7bb4,0x39f54fe0,0x3a5e1674,0x3a94c48c, +0x3a8f647f,0x3a75d42f,0xb8475ae8,0xba3f9dbd,0xba12023e,0xb8b8431d,0x3a8cd392,0x3aa24cfd,0x3a0a11fc,0xb9a1889a,0xba70dbff,0xbac72b4f,0x39d219fe,0xba17f3b6,0xbab28ca4,0xb8aad5ef,0x3869f4f5,0xb739f279,0xb35a6ea9,0xb4ee8353,0xb58b3081,0x351d681b,0x33c9373b,0xb494ddbc,0x35342c6c, +0xb5895541,0x361ecc7d,0xb67205be,0x370a986f,0xb7740716,0x3820da5a,0xb846d24b,0xb95af750,0x39f63cdc,0x3a90dfd1,0x3aab806c,0x3af96711,0x3ab9efc7,0x3809701c,0xba341b61,0xb9d74f10,0x3a10377a,0x39eb19ce,0x3a08613c,0x39e8be21,0xb8f97cfe,0xba26f1e5,0xb9da205c,0xba00a1e0,0xbac5c365, +0xbb51257c,0x398fb472,0xb7e552d2,0xb7769ed1,0x38071367,0xb71d2625,0x3714e222,0xb66f07b7,0x3606a9dc,0xb402ae9d,0x35669e8b,0x344e9039,0x35a9b540,0xb5b81519,0x36d8e17c,0xb7690c7f,0x3734725d,0x3807b503,0xba3d248b,0xba2ccdf3,0xba9526d3,0xbaadc4df,0xbab17a0c,0xba88e444,0xb9feeb1e, +0x3aa75552,0x3af00425,0x3b409046,0xba756725,0xbb132af9,0xbaddf405,0xb981a306,0x3aa9eeeb,0x3b416984,0xba04eee1,0x3b3c1fa6,0xbb69e666,0xb9f08951,0x39917edb,0xb91bd038,0x38487e16,0xb7d10ee3,0x3716aacc,0xb68e83d4,0x35896079,0xb5b39484,0xb56c38c0,0x34fad5b8,0xb68b2eed,0x36ec4b57, +0xb7abd6b7,0x38369217,0xb841fa9a,0x37b1f10f,0x3a8cf56c,0x3a3b0388,0x3a50dd84,0x398b8530,0x38a85e18,0xb990dc22,0xba54944e,0xba983a0f,0xbaac265e,0xba89d75f,0xba0663a4,0x39b2c6ab,0x3ab8babb,0x3b1102be,0x3b315242,0x3b62beb7,0x3b749579,0xb8b94166,0x39a2515a,0x39b7ecba,0xb91f9b13, +0x389feb37,0xb7981a94,0x37b36731,0xb6957ced,0x369f5d02,0x3587aab5,0x36637026,0x352c2912,0x368ad691,0xb65d5379,0x378df646,0xb7baa30e,0x387eff8c,0xb91cece7,0x39eccb46,0x3a874d4c,0x3a2c1a2f,0x3a115034,0x3a000ec2,0x38dcbe43,0xb8a6c056,0xb9f05b0e,0xb9f77f74,0xba0301fd,0xb9ce0f05, +0xba2c812b,0xba4ad8fb,0xba2696d9,0xba3b097d,0xb9e4652a,0xb98044bd,0xb9ab0cc7,0x39dbf0ea,0x3a958ac2,0x3a09dd16,0xb9096416,0x38863c6f,0xb877c318,0x362dfad5,0xb702f7a3,0xb40f47e8,0xb697a4e9,0xb607b40a,0xb67c33d0,0xb5c01d9b,0xb69881d0,0xb665c729,0xb7c2e844,0xb70310f8,0x3814426e, +0xb7c0148c,0x39036b94,0x390299c1,0x38108b69,0xb96504c4,0xb9077f37,0xb9dbff84,0xba4b8cca,0xba5f51b7,0xba843abc,0xba87a54c,0xba350d23,0xb9baeb7b,0xb9254ec1,0xb97554ff,0xb98f6778,0xb86a8aff,0x398d2977,0x3982314a,0x38e7cb29,0x36381d9f,0x38dfa787,0x37a28354,0x389c84d7,0x3710c1d5, +0x3723ea60,0x372533db,0x35f27ab8,0x361fbc4b,0x35f6f223,0x36621709,0x36d9ca13,0x372b8f33,0x3819d3f7,0x38649748,0xb83b9976,0xba065611,0xba0fb524,0xba2897ce,0xba1424f4,0xba22607c,0xba4fefca,0xba56e041,0xba45b5cc,0xba1f5364,0xba007b8a,0xb9f85e44,0xb9e08067,0xb9ded42d,0xb9b258fb, +0xb9149efe,0x38cdf735,0x39197c93,0x394b04e8,0xb9f8a56b,0xb9950c25,0xb9f4378c,0xb9ba6692,0xb95f2d0e,0xb91c383d,0x38275cd4,0xb6f98513,0x3693ad10,0x33d364ae,0x36302e4c,0x36a0bf9e,0x371d9654,0x369ab2e7,0x3809581a,0xb8f15903,0xb986802c,0xb99aea82,0x37edcd73,0x37862513,0x34963b18, +0xb93e1f3b,0xb94cb346,0xb9638f21,0xb991d792,0xb9bc8647,0xba07e152,0xba0e10df,0xba0afe8a,0xba015e6c,0xb9d1d621,0xb9d8d87d,0xb9fc7caa,0xba1a97ea,0xba14a0ba,0xba0ceda9,0xb9902fc7,0xb9a3e6ff,0xb9b5cd6c,0xb9b944aa,0xb9c69b51,0xb9b9ca68,0xb9b914a0,0xb9c00087,0xb9b91add,0xb9b55842, +0xb9b17282,0xb9ae7ccd,0xb9aa8a9b,0xb9a8a683,0xb9a2afd4,0xb9992b45,0xb98e53a4,0xb9864c8c,0xb9aec6b7,0xb9d8648b,0xb9d47855,0xb9d58c6e,0xb9de1294,0xb9ebf3a3,0xb9e53f06,0xb9cfd696,0xb9bdab0f,0xb9a39907,0xb9a16684,0xb9aa0d17,0xb9b42ddf,0xb9b5249e,0xb9992301,0xb984d1d4,0xb972d976, +0xb979df61,0xba0e9487,0xb9d72f43,0xb981d42b,0xb98df69a,0xb9804698,0xb98a99f2,0xb9978860,0xb90267a6,0xb8923a21,0xb605699d,0xb7d26764,0xb7fe1fa5,0xb80ad9ab,0xb853d1aa,0xb8636d45,0xb849ede2,0xb8aaf72f,0xb8da2ac5,0xb9a76c0e,0xb975c501,0xb95ce1b1,0xb98190d2,0xb99ab18c,0xb9aa3616, +0xb9b79ef5,0xb9a58062,0xb99bc069,0xb991b6da,0xb9850da7,0xb98714b4,0xb9a4d0a8,0xb995a8fa,0xb983c112,0xb9453012,0xb975a05b,0xb96dce8d,0xb95dc68b,0xb96bad59,0xb98b2229,0xb9ccad28,0xb9bb44b6,0xb9117f1d,0xb6add341,0x382aec47,0xb60b8bc0,0x37039e54,0xb73629e8,0x3651c28c,0x360a88bf, +0xb6963ce2,0x35546e45,0x37f0d341,0xb76a13ef,0x388442c1,0xb7c89ee7,0xb898abc4,0xb9560db1,0xb9a1426a,0xb9c2fbfc,0xb9e87787,0xba0de23a,0xb9d6e515,0xb9b59453,0xb9ca6d11,0xb9af5854,0xb9dcb20a,0xba209917,0xb9ef59d2,0xb99ee8fb,0xb89e7947,0xb99979c1,0xb9b1b7a6,0xb997755b,0xb9871c00, +0xb95e7a99,0xb9fc3cab,0xb8eebd2e,0x38c7afc5,0xb7699d15,0xb7b5d9ce,0xb7996fa2,0xb725a7b2,0xb68d93c1,0xb735ee9a,0xb6e8e9a1,0xb727e23d,0xb6b0ef5b,0xb7929899,0xb74e0ad2,0xb7d4cb89,0xb6fdfc0e,0x387c61f0,0xb718f7e5,0xb993d104,0xba027d9e,0xba2f7e4c,0xba57b413,0xba1e0ae3,0xb9f42f1d, +0xb9dda5b9,0xb99a6668,0xb9bf2324,0xba4d1ea5,0xb9fa9789,0xb9ab4ef2,0x38d881f9,0xb968db02,0xb946d10f,0xb8ae898b,0xb94025b2,0xb90e05ad,0xba359255,0x382ac89f,0xb799d5b2,0xb8040647,0x3735d8d7,0x363a2039,0xb4cc73b1,0x35b8b75a,0x3633030a,0x368507ff,0x361de7a1,0x35f573a1,0x35981012, +0x3704e2ba,0x36310fa7,0xb7be1a53,0xb7d6b47e,0x37f4d259,0xb98fedea,0xba00bf9e,0xba2f8dfd,0xba8368bb,0xba229a67,0xb9f33820,0xb9efe526,0xb9c53383,0xba23c400,0xbaa1fca9,0xba1f150f,0xb9bc003d,0x39e41109,0xb99fa29d,0xb9a76d6c,0xb922c055,0xb94dbd50,0xb98cf572,0xba180a75,0x3948a277, +0xb8c85953,0x380c104f,0xb785578f,0x364782e0,0xb644da45,0x3511e642,0xb66445b7,0xb60ab2e4,0xb5ef5775,0xb585dc29,0xb63eb3bf,0xb64fa6c4,0xb6a72548,0x3789b677,0xb8033202,0x38a48627,0xb9945e62,0xba55bcd0,0xba9887fc,0xbabe796e,0xba861617,0xba2edcf3,0xba0f5e42,0xb96689dc,0xb9fb2ea5, +0xbaa05686,0xba49ce49,0xb9a73d35,0x39d78bca,0xb90a9793,0xb8f648b3,0x39167b4b,0xb7d7840f,0xb970d565,0x39aa653a,0xb80416b4,0xb77ec1bc,0x36bd38db,0xb6751c7a,0x360c5917,0xb6183f0d,0x34ccc343,0x34a0bf8b,0x3548698c,0x34d1fc32,0x347e3b3c,0x355ab911,0x34df7f45,0x354884c4,0xb77375d0, +0x37b3927b,0xb908481e,0x3a12b7cf,0x3a8761ac,0x3ab71da6,0x3af64e83,0x3af12c2f,0x3a8ca180,0x39e0b6cc,0xb988668e,0x379ae38b,0x39af4de4,0x3a937e7e,0x3a6281c4,0xba51129e,0x39b05ccb,0x39a7ddd8,0x39b9b398,0xb9a15237,0x39c9f444,0xb7fead35,0xb84d666a,0xb6079c67,0xb6a3ea9d,0xb5cf5a91, +0xb629a1ed,0x35d07431,0xb58fb8aa,0xb504f5cd,0xb5158a7a,0xb509c1c6,0x3484f256,0xb5c620e3,0x350b17ec,0xb6ebad74,0x378080c7,0xb82383b2,0x38ee87cd,0xb9e3c4e8,0xba8c5d85,0xbac21d69,0xbae52bad,0xbadf8eee,0xba814538,0xb682ff61,0x3a7e1bdf,0x3a937141,0x39e68f18,0x3883a56b,0xb973101f, +0xba2745f2,0x39d63971,0x3a91bb62,0x3ac158ea,0x3a814de6,0x3a0353ea,0x3a72f084,0xb9115027,0x38289d99,0xb7bcc451,0x371fe029,0xb6651b88,0x349b802c,0xb5407de9,0xb4575a3a,0xb2fd24fa,0xb521534d,0x3367aac6,0xb5938148,0x35cee38d,0xb6a02ff5,0x36b0c3b4,0xb78130e4,0xb6d1f4a9,0x383e9afd, +0x3967b25e,0x39e138d8,0x3a1eb973,0x39edeef6,0x39a16835,0xb971f275,0xba1a81a2,0xb9dd5b3e,0x38b15d4a,0x3a04058f,0x3a00a72c,0x390ada51,0xba0890cb,0xba660d92,0xba610e3d,0x38f9ed8e,0xb9e09585,0xba44fcb4,0x38b2f548,0xb80b3914,0x38071811,0xb7c454c4,0x36e4f1f9,0xb639c77d,0x35b98310, +0xb5895654,0x3509eddb,0xb5268d37,0x350b1546,0xb54718f0,0x358d6396,0xb6889bd7,0x36206dfc,0xb709c060,0x35be70f8,0xb7950766,0x39a4483b,0x3a31c988,0x3a5a364d,0x3a71a2e7,0x3a18fa97,0xb9574ff3,0xba04cf43,0xb99d1996,0x398ee379,0x388656d6,0x382a5822,0x3950eaa9,0xb9dd2cba,0xba361f0d, +0xb985cb9e,0xb9c57845,0xba85e7cd,0xbaa0b2c9,0x3a198535,0xb96d132e,0x38ad7147,0xb82f86a2,0x3768972b,0xb7255457,0x365094a5,0xb609a4c6,0x3380c846,0xb59c65eb,0xb5020071,0xb5d97f94,0x345708a3,0xb6413a93,0x3711eef9,0xb7ca9de5,0x389bf3d7,0xb9a454a4,0xb9c8d1f6,0xba2bfa9c,0xba48905d, +0xba3f6554,0xb9e55b1a,0xb83338bc,0x3a917270,0x3aa19133,0x3ab95a52,0xba528cd3,0xbab5507a,0xba3f4334,0xb874c442,0x3a514b99,0x3ad3d350,0xb9ee42eb,0x3afa4992,0xba8c8bb9,0xb68f586b,0xb73409e8,0x37c364c7,0xb75f937d,0x36d513f7,0xb61be719,0x361bea25,0xb4c8ce7d,0x35a284ab,0x34bd740d, +0x35d3d4dc,0x3298e3e4,0x35adb5e1,0xb53e1938,0xb6dd5d7c,0x374ce7ce,0xb900889c,0x3a0da3e8,0x39ac97ab,0x39c20938,0x37b9a75a,0xb8b1df61,0xb9a009ab,0xba22ab81,0xba6250ba,0xba63cffe,0xba28ff23,0xb956d1bb,0x39aa897c,0x3a908d39,0x3ad66ddd,0x3b0303bf,0x3b2dc305,0x3b21df67,0xb9c183c9, +0x38916e25,0x38c730da,0xb8601ffb,0x3765ee08,0xb6fcac88,0x35a931f2,0xb6c581cb,0xb5d299f2,0xb687b056,0xb6161a99,0xb6736c62,0xb61471e1,0xb64feb60,0xb5aec677,0xb6fe3b75,0x37824db5,0xb7dd844c,0xb71be16f,0x3a25af42,0x39bb8fab,0x39b7583d,0x39a73dff,0x38d22a95,0xb604355a,0xb93f7cfd, +0xb951c473,0xb96914c4,0xb94839b9,0xb9c71cb9,0xba05dfb3,0xba12881f,0xba28a949,0xba0e8fbc,0xb9ffafe6,0xba0d0e25,0x390c701f,0x3a49d7ab,0x376d0886,0xb8941586,0x37b5e085,0xb78e88cc,0x37305fdc,0x35f13dff,0x36bd6199,0x3638b7fe,0x36940074,0x36972ef5,0x36920a41,0x368f24fd,0x35b7a4e3, +0x3703f6af,0xb7d4f76b,0xb68c520f,0x37528c31,0x383f8a09,0x38a01aa3,0x380428f5,0xb8de7a01,0xb891e4e2,0xb97b91d6,0xb9e526f6,0xba03b676,0xba1bfd85,0xba1b9680,0xb9d91679,0xb98c2135,0xb956aa66,0xb992815c,0xb99a8452,0xb905fc1c,0x38df9a1f,0x396ea85b,0x394b3166,0x38d59b92,0x3825a9f5, +0xb786282b,0xb728651d,0xb744767b,0xb78486de,0xb770fc4b,0xb7188b75,0xb709ce79,0xb7577aa4,0xb73d32a7,0xb761f4c9,0xb79dbe29,0xb52c0b4e,0xb7519264,0x38e078b2,0xb92b67de,0xb9e77643,0xb9ddf261,0xb9d493d5,0xb9d8030c,0xba054a9c,0xba05c662,0xb9f78a25,0xb9d4050c,0xb9bd54d0,0xb9cda62e, +0xb9bb7f18,0xb9b03566,0xb98bc00f,0xb8a10042,0x38fb5a6b,0x3922c904,0x3953ba52,0xb9aa2d55,0xb956c243,0xb989924b,0xb8c0b530,0x37c7425e,0x37ff993f,0x36fb0cd9,0x38348b24,0x37d9c66e,0x380eabc6,0x38030b6f,0x37fcf4a8,0x37b00bf0,0x37ffcce6,0x3650cef2,0x38610a54,0xb8049a37,0xb908a9b7, +0xb97f9de4,0xb93d6380,0xb9224fd8,0xb98f8f19,0xb98e90f2,0xb99669fa,0xb9a51678,0xb9b934ee,0xb9e37735,0xb9ded66a,0xb9cd95e6,0xb9c39463,0xb9a8b4f0,0xb9b97f47,0xb9cefd0c,0xb9fa9406,0xb9e37e8d,0xb9ca73fd,0xb95546ca,0xb9676e03,0xb9870d81,0xb98ebcdb,0xb9932431,0xb8eaca93,0xb8d2019c, +0xb8cb91e0,0xb8c7b5e7,0xb8c7598f,0xb8c5b106,0xb8bc3cab,0xb8b3ca7a,0xb8a9717e,0xb8cfb7e8,0xb8f51a82,0xb9952a3e,0xb98d732e,0xb98be65a,0xb9a81089,0xb9ad7abf,0xb9ac1350,0xb9af0fb0,0xb9b53b0f,0xb9affe02,0xb9a29a3e,0xb9999b65,0xb98d0150,0xb9901fbb,0xb9956afc,0xb995f129,0xb99207cf, +0xb96e730c,0xb9501f63,0xb939653a,0xb93d0d58,0xb9eeb9d3,0x38423195,0x383ebb0d,0x38f7a9bf,0xb68aa8cd,0xb9452adb,0xb98e3a8e,0x38805876,0xb87e5dd3,0xb9129560,0xb918d73d,0xb91fd2ba,0xb914edf5,0xb918c987,0xb92c5502,0xb91427c0,0xb8887d5e,0x38302d8d,0xb996b9f4,0xb93c72b8,0xb7d04d05, +0x38d4e101,0x3848a7a3,0x3863181c,0x3853f4c6,0x3883b838,0x38868314,0x387918dd,0x3882c7d4,0x388053f6,0x38549eb3,0x387981b8,0x3885111d,0x38a4f086,0x3889ef03,0x3882113d,0x3855d005,0x387178e2,0x38835414,0x3897b9f7,0xb99da572,0x38190171,0xb8281ccf,0x380eec05,0x37d92d6c,0x33918df1, +0x37b3094d,0x37798378,0xb6272414,0x37bd7e4b,0x37d2e4fa,0xb5a558d2,0xb89e283b,0x3835704b,0xb773f86d,0x376112bf,0xb913d57f,0x38970931,0x388f75aa,0x386d2fd7,0x38721a2b,0x38a70509,0x38bdf2a5,0x38b4eac2,0x38b19415,0x3898193b,0x3842f802,0x38b374ab,0x38e4eb96,0x3921e56a,0x38c54fae, +0x388c9630,0x382b5a55,0x384f06d3,0x38d2cfc2,0x36e9314d,0xb83cf4c8,0x38cc8204,0xb746f47d,0x3803d2f1,0xb4a87918,0x381d9513,0x370e395e,0x3826e6cc,0x37926848,0x386f8edf,0x36847aec,0x382faa1d,0x378635ea,0x382ed10e,0x37c07dae,0x37b78c0f,0xb80b6964,0x3805898c,0x38ca1771,0x3814d58d, +0x3877477c,0x38c6bb35,0x38f605de,0x38cbbcf6,0x38e2444f,0x38bfe16c,0x3816beaf,0x38c7e7ae,0x3906f618,0x395496f4,0x38efe208,0x38af2559,0x38382b2e,0x385d41cf,0x38ccdfa6,0xb836c8fc,0xb8197aa7,0x36282166,0x37bbbf72,0x36c382e4,0xb642eee3,0x37785bb3,0xb68a138a,0xb65415a3,0xb710b807, +0xb6ce2e50,0x34ef96b1,0x370b5c74,0xb6786e95,0x378e7074,0x378d3395,0x381ca234,0xb7e85862,0xb78daef1,0x38fe625d,0x382ef050,0x38590eba,0x3916932c,0x3942ec1b,0x39053c8d,0x39007aec,0x38a226b5,0x37465a78,0x390dfbdc,0x394340d2,0x39ad7b8b,0x39027d6f,0x387c5ef9,0x37e36927,0x3787e1fb, +0x389ed9dd,0x37505304,0x37f22137,0x3835af51,0x37889f3d,0x36fe6fca,0x369a49cd,0xb5333821,0x36022bdd,0x36c2bc5f,0x36f85f78,0x36a1a0d5,0x362627d8,0x36ad6f53,0x368c4e71,0x3774d953,0xb703540c,0x3871c236,0xb8269d3f,0x37c9b0c5,0x38940156,0xb75f8c02,0x38094e15,0x38d4cbec,0x392c082c, +0x390274dd,0x3929c458,0x38e968e3,0x36990ac1,0x38ea25b4,0x3940458e,0x3994a29b,0x39137d85,0x3889670d,0x383afc46,0x38382592,0x392c7d07,0x3984074b,0xb85af5f9,0x37339587,0xb681af49,0x34cb76ff,0x36b24076,0x35d35187,0x361c8689,0xb54e2582,0xb5ce5e2c,0xb5726a08,0xb58ade97,0x35dd2d97, +0xb648fb17,0x376776cd,0xb78d75d5,0x388554dc,0xb8096b3c,0x39842b7d,0x3a067ed1,0x3a04e06e,0x3a23f792,0x39de9abb,0x3996ae32,0x3937aebe,0x39312acf,0x398f8c0b,0x39c84578,0x3a0f343a,0x3a0e95e2,0x396287ed,0x39cd7bbe,0x39b7c010,0x3986a85f,0x394f8a71,0x39930256,0x3910bc84,0xb8e36112, +0x38fc40a4,0xb81ad7ae,0x38031758,0xb7290be8,0x36c96f51,0xb5d098e2,0x365072cc,0x35277b48,0x36034625,0x33ed6c31,0x362b5a18,0x361fb4f2,0x37578220,0x36c3cd73,0x37699fb2,0xb781a4b3,0xb8fda146,0xb86c5496,0xb90debff,0xb85a55b8,0xb911eaf6,0xb8606903,0x3819c3d1,0x39512a50,0x3975660a, +0x38fcf1dd,0x38929a1f,0xb76aa9a1,0xb921b81d,0x391c3332,0x39992e57,0x399efedb,0x398fd7f1,0x392295cd,0x39158284,0xb75df01d,0x383e3532,0xb6c8a226,0x374e73a1,0xb69b73db,0x36a40c11,0xb5948571,0x36146417,0xb4683f7c,0x35ee76d9,0x357df182,0x352c99da,0x362a11f7,0x369fb533,0xb59b9e02, +0x37b7c783,0x3724ad83,0x38c6d63d,0x39205ca9,0x391f8911,0x39652146,0x39829a87,0x398c7256,0x39344fda,0x39076209,0x39020955,0x395e191d,0x39a35ace,0x39c96485,0x39a172e9,0x3920e931,0x38323c2d,0x38121980,0x38a421e9,0xb82fbee0,0xb8d3232f,0xb753beda,0xb5eeda92,0x36edb192,0xb6b4d7ea, +0x36851e65,0x33867923,0x35d82c32,0x35a2e642,0x3525a30e,0x35cc84f3,0xb4192389,0x35d2f7c5,0xb5807ae7,0x3725dca4,0xb3db096e,0x37e0d85a,0xb74368a7,0x3790297f,0x393d6fb5,0x39608939,0x398532df,0x39b1684f,0x39ab2a73,0x395ff7c7,0x39463c8e,0x3938b147,0x398315d3,0x395bfed6,0x3998bbbc, +0x39e5d706,0x39a4f8ab,0x398943f1,0x39b79fa0,0x38ac15d8,0xb83ae2db,0xb91f7e5b,0x38ae1079,0xb7cefade,0x376ca5d2,0x372837d8,0x3512d2f4,0x33434eef,0x35dfea51,0x35734906,0xb4186cf3,0x35f013ca,0x3589ff48,0x365244c7,0x3590227d,0x35a21f4a,0x34238011,0x3742885c,0x36293410,0x377fe522, +0x37fe63e2,0x378a2ac2,0x381d8517,0xb7411df5,0x37417575,0x389e452b,0x39a19dbd,0x399d72c7,0x397559bb,0xb953e075,0xb987968e,0x379cc328,0x399789c9,0x3a0efeaa,0x3a58f2bd,0x392d24d3,0x3a4dc82c,0xb76835a1,0xb9420ee5,0x389b76f2,0xb82848ae,0x374a8064,0xb591b9fc,0x369a34f1,0xb62d3556, +0x35752b04,0xb5811397,0xb49b0756,0xb600ad4a,0x35b5a4fa,0xb573966c,0x36d35e40,0xb68669df,0x37e44345,0xb7870172,0x38480c1e,0x38c738cf,0x37e4ecd7,0x362a9948,0xb7cbe376,0xb8106980,0xb80dcfda,0xb8adbde5,0xb84d2337,0x38439d3e,0x393428b4,0x39a8f8e1,0x3a19ba56,0x3a3a676d,0x3a4c5338, +0x3a7d9942,0x3a56306c,0x38621202,0x38425df2,0xb8161f2a,0x37ada538,0x3436e3a9,0x366f9595,0xb4183fc7,0x368b2e23,0x36a56660,0x36742a3d,0x36d7a25c,0x36d58e5f,0x36b3708b,0x36b9addf,0x3582ed5d,0x37287c7c,0xb606c648,0x380ee3e8,0xb86c3779,0x3914e33e,0x3909e13a,0x391802cd,0x3924a119, +0x38cfb782,0x38929b1e,0x3809fc94,0x37f3d17d,0x378ce302,0xb7567090,0xb7edd26d,0xb71db575,0x38c5d0cd,0x3845ecad,0x382c0ffc,0x37f171c0,0xb7021774,0x393eb7b5,0x38bafebe,0xb892c971,0x3842120a,0xb66178b5,0x381a2c66,0x365858be,0x3693b22f,0xb6050dca,0x351d3317,0xb6c8868d,0xb6be43d6, +0xb6fa092e,0xb598f7e3,0x363eaef1,0x36d4bab5,0x34b15333,0x37214a92,0x3707dccd,0xb775ea6e,0x38a7ab94,0x3860c749,0x380b3cab,0x3816ec50,0x36c941a0,0xb810849c,0xb82567f8,0xb865ab24,0xb864b6fd,0x36a92835,0x3881f5fd,0x390b87b5,0x388b50a9,0x38042a7a,0x389ca25e,0x389f1128,0x38fc1c70, +0x392f85f0,0xb854c128,0x37ef6561,0xb710236e,0xb72ef34a,0x35e6bf3e,0x379c062f,0x377f93a5,0x37664a23,0x371e2a5b,0x38036fd9,0x3712dab3,0x37ec3f96,0xb71a0cda,0x37554197,0xb6352a21,0x37812912,0xb77e7b1d,0xb863e58a,0xb817cf12,0xb8852d50,0xb870c152,0xb8b72a6e,0xb8bac6b0,0xb8bb2ef6, +0xb84b7825,0xb7ac9fc1,0xb6e2d373,0x378a4a10,0x37f99e33,0x38763c20,0x38c66459,0x390fd38e,0x390e21fe,0x3908f27f,0xb7aed24b,0x3581c47e,0xb8ffa804,0x3811b390,0x37364f29,0x37e405c4,0x3804a395,0xb7bd1d08,0x3703f70a,0xb73d8410,0xb788df41,0xb787351f,0x35fa0787,0xb705ce81,0x37aa4c28, +0x380152b4,0xb71c3437,0x38a0e67f,0xb90878d0,0xb83a4334,0xb82f1879,0xb868987c,0xb861146f,0xb8623a54,0xb8641727,0xb88013db,0xb876ec68,0xb8343035,0xb7972e57,0x37033eb3,0x3822b2e0,0x387825dc,0x37f58a8e,0xb795b504,0xb79f7437,0xb71051bb,0x37895fd4,0x37f6fdb6,0xb830d54c,0xb9088e54, +0xb93f76e6,0x383fe253,0xb78c9bbb,0xb8825c0b,0xb891f7ac,0xb88bb4d1,0xb8880768,0xb8979525,0xb8b19537,0xb8bdfb00,0xb78d63da,0x385b731f,0xb94c5547,0xb90477f5,0xb825a0b7,0xb6436ed6,0xb7a008fe,0xb7a3ec30,0xb7b7b10a,0xb7d2e436,0xb7d339fe,0xb7b9a23d,0xb755e39c,0xb634a8c1,0x35956288, +0x361f6ae6,0x35db1191,0x37136eb0,0x37982a30,0x37c777d9,0x37f2c125,0x37c975ca,0xb7b60e85, +}; + +const uint32_t orange53_rom_AlphaL16[578 * 43] = { +0x3f1ed73c,0x3ecd65b6,0x3eee275f,0x3edb0620,0x3edd0b93,0x3ee377eb,0x3ee7eb04,0x3eee4d8f,0x3ef3332b,0x3eead0c5,0x3eea6fbb,0x3ee3a5fd,0x3ede1e74,0x3edc126d,0x3edb84f0,0x3ed51f8a,0x3ed6cd0f,0x3ed07d43,0x3ed0ebb7,0x3ec9707e,0x3ed1ec69,0x3ea54c05,0x3e885534,0x3ddb86df,0x3eb39ec8, +0x3e89113c,0x3de6d8e1,0x3defc4df,0x3e02881a,0x3e0fce40,0x3df0a230,0x3dec3c65,0x3e1c6492,0x3e7df43f,0x3ebcf617,0x3e1e1f1d,0x3e78d4eb,0x3e500046,0x3ef9f501,0x3f0d26fb,0x3f0ee8bb,0x3f18ae39,0x3f23df1c,0x3f2f57b7,0x3f328533,0x3f203122,0x3f272719,0x3f1c6dbb,0x3f12b01c,0x3f10e88e, +0x3f0fe0ab,0x3f008181,0x3f081791,0x3f001701,0x3ef44a51,0x3eeb7f87,0x3ef5ee58,0x3e955f42,0x3ea8b771,0x3e907c1a,0x3e9a8ba3,0x3eb5baf9,0x3e8880b5,0x3ea4a6b5,0x3e897586,0x3e9d4913,0x3e9e4161,0x3ecb1486,0x3e9aa96e,0x3ea0ca14,0x3eb5131e,0x3ea6d503,0x3ebc2030,0x3eb0e51c,0x3f18ff45, +0x3f144f05,0x3f24b159,0x3f33d5a8,0x3f51bbcf,0x3f57598d,0x3f60b3ff,0x3f53d136,0x3f4556d7,0x3f38d32f,0x3f30909a,0x3f23aa78,0x3f178131,0x3f13ee52,0x3f0695cb,0x3f04e452,0x3eeb0600,0x3ee9c4b3,0x3ebdfd68,0x3e63ca5a,0x3e836125,0x3e936129,0x3e54a09d,0x3e58bb72,0x3e7b0595,0x3e553aa1, +0x3eaa99d2,0x3e40db0d,0x3e872c05,0x3e585cdd,0x3e8f02c2,0x3e9b5633,0x3e9baeec,0x3e8958dd,0x3ee1cb67,0x3e6dc61e,0x3ed0226f,0x3f1d264c,0x3f24b3a2,0x3f488dca,0x3f6aefd9,0x3f813cf7,0x3f8043dc,0x3f705645,0x3f617993,0x3f513f7a,0x3f3e0ad3,0x3f2e1d56,0x3f201035,0x3f0fa976,0x3f061bdf, +0x3efd815c,0x3ed84dc9,0x3ec978f2,0x3ea0a55c,0x3e6631b5,0x3e6cb5c4,0x3e1e9e78,0x3e45ffe2,0x3de1ba47,0x3e174731,0x3d941dae,0x3dcc37f5,0x3de8c9f8,0x3e34d822,0x3dff2c08,0x3e3f7b45,0x3e0bf382,0x3e538734,0x3e823d55,0x3e9e4980,0x3ec7f581,0x3f042de1,0x3f2df4a5,0x3f3d2d89,0x3f62ed7f, +0x3f8d5a3d,0x3f9c5a12,0x3f9e79b0,0x3f923584,0x3f82bda8,0x3f6d2763,0x3f59004e,0x3f41e841,0x3f2baf45,0x3f2033a7,0x3f10acd8,0x3f0203c2,0x3edbdea0,0x3ec0b09e,0x3e9213ef,0x3d69fbb3,0x3e0ee76b,0x3d935d8a,0x3d84a645,0x3d43b374,0x3d1620ec,0x3d4f3577,0x3d1cbafc,0x3d4a74db,0x3d2871b6, +0x3dce67c3,0x3dbb0d0b,0x3e0b5d61,0x3e5a90c4,0x3e4cbc4d,0x3e7a7eef,0x3eab4406,0x3f00e22d,0x3f3d84ad,0x3f5c22ca,0x3f822cea,0x3f8a4c19,0x3f953e8d,0x3f9ebcd8,0x3fb359a2,0x3fb67bd7,0x3fa45d66,0x3fa25e6f,0x3f9d6f8a,0x3f8f4969,0x3f82cbb9,0x3f5bafb8,0x3f4c6a70,0x3f259cbe,0x3f06bf78, +0x3ed3f868,0x3e67bbd0,0x3e6f2b26,0x3dd2efe9,0x3e068f72,0x3d634e76,0x3d77a1f6,0x3d2f6fcc,0x3d963feb,0x3dc0e7d9,0x3d947f9f,0x3db90238,0x3dd8a78b,0x3e4315ab,0x3e3906ae,0x3e286ee7,0x3ecfcf49,0x3ef0a9a5,0x3f20d1d9,0x3f50ab70,0x3f7725bf,0x3f90f06f,0x3f9cfd56,0x3fabcd91,0x3fa6c0af, +0x3fb2b985,0x3fa998cc,0x3f9e9577,0x3f9b74c7,0x3f8b7e74,0x3f84fde5,0x3f6994ba,0x3f515c5a,0x3f3d5c3a,0x3f1e3d1a,0x3f114359,0x3ec71e5e,0x3e59d13c,0x3e6e0b11,0x3e3aec05,0x3e07be28,0x3db32453,0x3d94475c,0x3d7fc356,0x3d078725,0x3d56beb6,0x3d8edee0,0x3e002689,0x3e079250,0x3e0878aa, +0x3e6cb30c,0x3eb33392,0x3ead884e,0x3ee5dcbe,0x3f39fd5b,0x3f8a9380,0x3f8fba9d,0x3fa36435,0x3fa63431,0x3fa587fb,0x3f99fa32,0x3fa61df1,0x3fa61cb7,0x3fa45894,0x3f983285,0x3f9289ec,0x3f823616,0x3f5dd262,0x3f47bc54,0x3f307c9b,0x3f15c938,0x3f005f2a,0x3ecac304,0x3e95fc90,0x3e737660, +0x3e2cd649,0x3e4abd40,0x3df8c784,0x3e0f1917,0x3d540180,0x3e0877ca,0x3df48def,0x3da374d4,0x3dc38470,0x3e0d8cbf,0x3e7a69ee,0x3e9aa626,0x3eb956d9,0x3ea2e44d,0x3eed0235,0x3f4dd56d,0x3f95f940,0x3f9ee386,0x3fa98077,0x3fa067d5,0x3f9f5fd9,0x3fa9f2a2,0x3fa0a4c0,0x3fa40984,0x3fa7560b, +0x3f9c6622,0x3f8ec81b,0x3f762f1a,0x3f5f01d6,0x3f36edee,0x3f20484f,0x3ef5f2bc,0x3eede927,0x3ea678ec,0x3e8d608b,0x3e67f0a7,0x3e96143d,0x3e12e75c,0x3e4232c4,0x3db74c47,0x3deee445,0x3d974810,0x3da9be34,0x3e382174,0x3d994e08,0x3e23e012,0x3de16403,0x3ea3fc09,0x3e90bf82,0x3f0cb564, +0x3f0536fe,0x3f87ec62,0x3f96fff3,0x3f9e0fb4,0x3f991f84,0x3fa09dea,0x3faef41e,0x3fb7e99c,0x3fb61f69,0x3fae35ca,0x3f9c69ee,0x3f938c00,0x3f8a6143,0x3f722cd5,0x3f5d53a7,0x3f3ba124,0x3f144e25,0x3f0242bd,0x3ee6d4e5,0x3ec4cda1,0x3ea15148,0x3eb9886e,0x3e29f018,0x3e4945e0,0x3e2cb525, +0x3dfe11ee,0x3dd78762,0x3e20bb84,0x3e7da43c,0x3dd1bcea,0x3dbc8ea0,0x3e17853e,0x3e46a1c0,0x3ea764bf,0x3e518d5b,0x3eeda9c6,0x3f30e315,0x3f54359e,0x3fa430ae,0x3fa7448b,0x3fa6703a,0x3fa613de,0x3fa678c4,0x3fb1cff8,0x3fa27f29,0x3fa389a0,0x3fa3348c,0x3f91c767,0x3f80118d,0x3f670704, +0x3f38a04a,0x3f180ad6,0x3f00e833,0x3f08a83b,0x3f0b40e0,0x3f123a08,0x3ea37d46,0x3e65a6c9,0x3e8e76dd,0x3e3d5b87,0x3e5c2738,0x3e0fc451,0x3d78ae9d,0x3e04a728,0x3e035263,0x3e23a581,0x3e7175f6,0x3e89f4bd,0x3ec0063d,0x3e08be16,0x3ecfb381,0x3f075216,0x3edf1452,0x3f8009e6,0x3f8d3533, +0x3f8ea29f,0x3f92575b,0x3f99e7e5,0x3f9cbf96,0x3f9a64c4,0x3f985f46,0x3f8c4a0b,0x3f85b147,0x3f789284,0x3f63d660,0x3f4ada03,0x3f3049ab,0x3f1f0262,0x3f0ccac4,0x3f1b9938,0x3f2e6b51,0x3ee9ce2a,0x3e9b26a9,0x3f0d004d,0x3e982cc6,0x3ea7b911,0x3e6bf933,0x3d974de4,0x3e92ba4e,0x3e1595fd, +0x3e865adc,0x3df335b4,0x3e5ceddf,0x3e7bc921,0x3e637e16,0x3eca47f4,0x3ed5ef2c,0x3f237da2,0x3f1740fb,0x3f3d6472,0x3f835be4,0x3f815c28,0x3f8864ab,0x3f898835,0x3f8d6dff,0x3f8e7674,0x3f85caf2,0x3f7e816d,0x3f72b430,0x3f5b7a44,0x3f4ac27d,0x3f3634a1,0x3f2bee6a,0x3f1f1cd7,0x3f17c195, +0x3f15e2a5,0x3f23309a,0x3f1f03cf,0x3ea9b850,0x3e844f2f,0x3ed037d0,0x3e68a4c6,0x3e7cb475,0x3e79550b,0x3dc207e9,0x3e332ab4,0x3e82a69a,0x3e7fb4a8,0x3e780b04,0x3e323f11,0x3eb0b5ff,0x3ea2ee5f,0x3eba89e7,0x3ee2ff5a,0x3ed19e7b,0x3f553e04,0x3f5f47f2,0x3f649cb2,0x3f7f394b,0x3f7a98be, +0x3f800322,0x3f81a29e,0x3f77fd12,0x3f6dec89,0x3f608f6d,0x3f579d55,0x3f461e1c,0x3f333028,0x3f32d113,0x3f273801,0x3f24d2bb,0x3f1a0ab7,0x3f28a74e,0x3ef30e6a,0x3eec99c1,0x3ed13df1,0x3edeb16d,0x3eb90918,0x3e9e687c,0x3ebe628d,0x3ea0488b,0x3f156c49,0x3e44d719,0x3eeaf073,0x3e8b27d4, +0x3ec3c48d,0x3ed98740,0x3eb6b9e2,0x3f052a79,0x3f26120d,0x3ea2cfe5,0x3f553e05,0x3f51b55b,0x3f4fe96a,0x3f43c841,0x3f5d7a2a,0x3f5d6892,0x3f6d0fc1,0x3f6442d8,0x3f5f4141,0x3f596079,0x3f542557,0x3f4f550d,0x3f48e664,0x3f425701,0x3f3c6fb5,0x3f443987,0x3f39a807,0x3f38688b,0x3f3b1d22, +0x3ea78582,0x3efde347,0x3ee542ae,0x3f0f2b45,0x3ef77fb5,0x3ee4590f,0x3ef118f7,0x3ee01630,0x3ee88f1f,0x3efd67ac,0x3f26ec92,0x3eb477bd,0x3f10bb7e,0x3ef7d0e0,0x3e8e1291,0x3f45a50f,0x3f0a3ca1,0x3f39339c,0x3f2b64e3,0x3f300deb,0x3f2fc2bd,0x3f3468a3,0x3f325e1d,0x3f36abd9,0x3f321a18, +0x3f31061d,0x3f2f1783,0x3f2c5dee,0x3f29abac,0x3f2846b0,0x3f2736be,0x3f274471,0x3f2721ef,0x3f24bf72,0x3f1eaa30,0x3f344a2c,0x3f06c48d,0x3ec051f3,0x3e05f0f4,0x3f048708,0x3ebb7ea9,0x3e12333f,0x3e00ff8e,0x3e17929c,0x3e26d87e,0x3dd01cc1,0x3dd1435c,0x3e3d5b57,0x3edd7319,0x3f0caaec, +0x3e37042f,0x3eb04ff8,0x3f821f55,0x3ece82fb,0x3e8b0342,0x3e55f174,0x3e81869d,0x3e7c3846,0x3e7cfd77,0x3e766c12,0x3e73298e,0x3e6a22df,0x3e68dae9,0x3e6df289,0x3e6e9c3f,0x3e6d8a30,0x3e6f7e68,0x3e73936b,0x3e6b6d51,0x3e6fbb59,0x3e6c0fe7,0x3e723bac,0x3e773526,0x3e64a59b,0x3e9b67cb, +0x3eb196fe,0x3ee053f6,0x3e8c6214,0x3ead8e0e,0x3edd776a,0x3edbaa11,0x3ed8dffc,0x3ecfcc26,0x3ee0e688,0x3edae19d,0x3ed87b4d,0x3eb5035f,0x3e88f269,0x3edc19df,0x3ec1b067,0x3f0fc3d2,0x3eb81a7a,0x3eb67a72,0x3ead8cd7,0x3eac5ddd,0x3e9fbf6e,0x3e9e1c5d,0x3e90fd05,0x3e8b4a6b,0x3e98c006, +0x3e971e15,0x3e95c53f,0x3e9ab472,0x3e9fe597,0x3e8e6899,0x3e9abadc,0x3e9549a2,0x3e9a1560,0x3e9bb39e,0x3e92000e,0x3ed813fb,0x3ec0f7fd,0x3ec515c7,0x3eb549d5,0x3e938926,0x3ebe3ce4,0x3eb564cc,0x3ec6faf1,0x3eaf7a4a,0x3ebfe023,0x3e6fdf79,0x3eba1a8e,0x3ebc6283,0x3ec136c5,0x3ed34f39, +0x3ec63183,0x3efc041e,0x3ec1a566,0x3ec851f5,0x3ec9b633,0x3ec05839,0x3eadec7e,0x3e9438b3,0x3e780186,0x3e8842d1,0x3e8b9c95,0x3e964f72,0x3e9d1458,0x3e9c16a7,0x3e9a49c3,0x3e941a7c,0x3e8f3aa5,0x3e926b54,0x3e9ecff6,0x3e9790d1,0x3eb05dcf,0x3ecfb382,0x3eb5b670,0x3e9ba798,0x3eabf804, +0x3e9d5568,0x3e8ce658,0x3e9032f4,0x3e67e555,0x3ea3e4ec,0x3e81eca1,0x3e9f88ad,0x3e9752fe,0x3e9f14e9,0x3eb1baa7,0x3ecccbd5,0x3eb38df8,0x3f0b7f4d,0x3f0a90cd,0x3ee05e60,0x3ef0114a,0x3ed52d04,0x3ea8c600,0x3e93106c,0x3e4b6f46,0x3e7944f2,0x3e8ade40,0x3e964ec3,0x3e9db378,0x3e9f4909, +0x3e9fd131,0x3e8d3794,0x3e8d75c5,0x3e8fefb0,0x3e9cac7a,0x3ea00529,0x3ea48222,0x3eaec19f,0x3e8a736e,0x3e92557c,0x3e6c1b85,0x3e81d736,0x3e4536bb,0x3e7d1f0d,0x3e612419,0x3e767d11,0x3e3c67ec,0x3e5a0e8a,0x3e6d37b0,0x3ea0ff33,0x3ea7d026,0x3eaecb5c,0x3eccde05,0x3f041985,0x3f144325, +0x3efa9193,0x3f05c94f,0x3ee92536,0x3eb6f617,0x3e854118,0x3e327cc9,0x3e6d0c5a,0x3e88951e,0x3ea2912b,0x3eade38a,0x3eac7828,0x3ea7bb53,0x3e964fc9,0x3e8d8284,0x3e91e2b8,0x3ea2b2c5,0x3ea88cf3,0x3eac288d,0x3eb89c38,0x3e89314a,0x3e6bb8fa,0x3e457975,0x3e1e7a47,0x3e083cc4,0x3de6c331, +0x3df59dfd,0x3e0f3af6,0x3e11d662,0x3e184dbe,0x3e63b3fb,0x3e860dcc,0x3e9e8c92,0x3eb6256f,0x3ef0a8ae,0x3f244408,0x3f2a5990,0x3f24c99e,0x3f2accca,0x3f24f6d4,0x3f22011d,0x3f16a2d6,0x3ef88ab2,0x3e8d697c,0x3e10dade,0x3de306af,0x3ccb1185,0xba009676,0x3d02fb83,0x3d3e4bcf,0x3dec8ed9, +0x3e33220c,0x3e8999a8,0x3e9df91e,0x3e9adccf,0x3eb77517,0x3e91abf2,0x3e8ccd86,0x3e4a9ea8,0x3e377f85,0x3e162633,0x3e3631bb,0x3e2b4bb5,0x3e2bad10,0x3e15d772,0x3e3982e9,0x3e7780fd,0x3e981e0f,0x3ec6d5a6,0x3ef02b41,0x3f00a02a,0x3f313cb1,0x3f30e2d2,0x3f1c23c8,0x3f267c28,0x3f2acc5a, +0x3f1ea941,0x3f0feffb,0x3f038e73,0x3ed3adbd,0x3eacab7d,0x3ebe4938,0x3e9289fa,0x3e78e7e1,0x3e69977f,0x3e78e9cc,0x3e8f5eac,0x3e917546,0x3ec197b3,0x3ebbf9ec,0x3ed6c53a,0x3ecdd9b3,0x3e9a26c6,0x3e77a82d,0x3e47fde0,0x3e229186,0x3df346a6,0x3de75803,0x3e1a9841,0x3e6c8b46,0x3e5d333f, +0x3e80d055,0x3eaa4ad1,0x3ec6ea44,0x3ee3274a,0x3f026b13,0x3f284d00,0x3f4712b8,0x3f30eebc,0x3f072921,0x3f18ec71,0x3f10433c,0x3f2f56c1,0x3f4371a9,0x3f45bd43,0x3f27afb3,0x3f0600d3,0x3eb7fb01,0x3e96b290,0x3e58ae69,0x3e6cebb1,0x3e97bc06,0x3ea46606,0x3eb27328,0x3ed52f11,0x3ee0e4a1, +0x3ee6cc9d,0x3edaeecb,0x3ebf1d22,0x3ea7eaea,0x3e708090,0x3e56c323,0x3e46c752,0x3e7cf900,0x3e74ae4d,0x3eaeef53,0x3e8dfb2f,0x3e9741ed,0x3eadea1e,0x3ebddd21,0x3edeeffb,0x3f06de3d,0x3f299bc5,0x3f4f0561,0x3f2614c9,0x3ee68f37,0x3f003ad5,0x3f1700fc,0x3f32dea4,0x3f47854a,0x3f2e1ca9, +0x3f2cf6e5,0x3f08a121,0x3e962e6f,0x3e80ba98,0x3e5060e1,0x3e803830,0x3e90f096,0x3eb0af41,0x3eccc431,0x3eec6151,0x3ef42ed0,0x3efb1a7d,0x3ef34f08,0x3ee5951f,0x3ebf4753,0x3eadf6d5,0x3e8ee66e,0x3e93b8c0,0x3e8c3e68,0x3e9ab2f7,0x3f0c3ed4,0x3e982bfb,0x3e990cd6,0x3ea874d7,0x3ee40469, +0x3edfeeb9,0x3f16c808,0x3f0703f2,0x3f4e346d,0x3ec05b3b,0x3eb7ba86,0x3eea44a2,0x3f5068d8,0x3f324d37,0x3f1df1e6,0x3edf1ef6,0x3ecf9d6b,0x3ea357ad,0x3eb49916,0x3e86541b,0x3e8237ba,0x3e8fe868,0x3e98b851,0x3eab0463,0x3eda1940,0x3ef0a2ae,0x3ef067d8,0x3f0200a1,0x3f02d5f6,0x3ee2c020, +0x3ef8fb10,0x3ecbb86e,0x3eac9822,0x3eabe7a2,0x3e6b9caf,0x3e9376de,0x3f1c63ef,0x3eb47a91,0x3eb42a41,0x3ec660ce,0x3edd9eda,0x3ed5efc3,0x3f22e714,0x3f1e377d,0x3f0cf419,0x3efecf36,0x3e38f939,0x3ece44c0,0x3ed53f27,0x3f07b6ed,0x3f079693,0x3eca9381,0x3eb6bae7,0x3e7cbddc,0x3e3a016b, +0x3e4bafe2,0x3e875757,0x3e96f7d2,0x3ed46a1f,0x3ef72b97,0x3f0a77c9,0x3ef19c5f,0x3ee1fd21,0x3ecc39b9,0x3f07bf5a,0x3f0d3b26,0x3eda035f,0x3ee69252,0x3ebb5b8f,0x3eb0aeeb,0x3ecdbb80,0x3ec6c9b7,0x3ef4597f,0x3eca830f,0x3eb689da,0x3ea5054e,0x3eb43bc3,0x3f196d2d,0x3f06c2cd,0x3ef0c01b, +0x3f4ee663,0x3e87583e,0x3e8dc164,0x3eca517a,0x3f0357da,0x3f0ac239,0x3f0488f5,0x3edd4d73,0x3edf4a95,0x3ed5daa1,0x3ed8c686,0x3ec8c97f,0x3ed07562,0x3ee3abb7,0x3efb4ef7,0x3f05e3db,0x3f06039d,0x3ef6d51a,0x3ec07921,0x3f02214a,0x3f251c84,0x3ead3eea,0x3efbae55,0x3ec38f03,0x3ece1be3, +0x3eee4d22,0x3ea2b395,0x3ed67e81,0x3ebe728f,0x3eeeb1ff,0x3ed6f2d0,0x3ed202e2,0x3ef39f8b,0x3ecf9bc8,0x3efe2095,0x3edc22f0,0x3f20217d,0x3f04ecb7,0x3e90db6d,0x3ed80a3c,0x3ed9e8bd,0x3ee3343f,0x3eeaf700,0x3eea50d1,0x3ef71c2c,0x3efef69c,0x3f05e135,0x3f051cdd,0x3f0c14b0,0x3f116562, +0x3f124ea8,0x3f17a01a,0x3f12a6c6,0x3f082cf3,0x3ee1b414,0x3ec4ed76,0x3f1bb835,0x3f129224,0x3edc5d7b,0x3f06c78b,0x3eefb781,0x3ed7edac,0x3f0b0d74,0x3ef111e5,0x3ed20b30,0x3ee3f1bc,0x3eeecdd2,0x3eff636f,0x3eefc559,0x3f07ce60,0x3f1f7318,0x3f1d6163,0x3f46d61c,0x3ec3c93a,0x3ebbffb8, +0x3eda123c,0x3ed15693,0x3eced077,0x3eccde54,0x3ed0e806,0x3edd7185,0x3ee7b87f,0x3efbaca8,0x3f03ae02,0x3f0e7aa5,0x3f1742ef,0x3f1172bf,0x3f14b7c9,0x3f0c4270,0x3f096e3e,0x3ed031f8,0x3f0c762e,0x3f0e44b6,0x3f07eeb2,0x3ef35527,0x3efa7a77,0x3f027d8c,0x3ee7a8c9,0x3ef23982,0x3e85b96a, +0x3f18c7c3,0x3eb1e09f,0x3f099e50,0x3ee53463,0x3ef8fb1c,0x3f209042,0x3f0a4370,0x3ee33943,0x3f4f5f4d,0x3e7d0060,0x3eb2c35e,0x3ea3a55d,0x3e9f2e3f,0x3eb69f19,0x3eb1bd3b,0x3eb4b889,0x3ebc1129,0x3ec37027,0x3ec769e2,0x3ed395c1,0x3eda88ba,0x3ef7301c,0x3ee15f5c,0x3ece197e,0x3ecd33d2, +0x3ec91ac9,0x3ead4737,0x3ebb246a,0x3f39f427,0x3f1284a5,0x3f178126,0x3ef76366,0x3f01228d,0x3ee2217f,0x3f0519e3,0x3f01d199,0x3f0836e7,0x3f080549,0x3ea00e0b,0x3f22d06e,0x3efbac3a,0x3ef2e05e,0x3f44fc5b,0x3eb63167,0x3ecc9dcc,0x3e2a0759,0x3e7a03cf,0x3e661d54,0x3e606a46,0x3e6294a2, +0x3e5fe98f,0x3e65e46b,0x3e6cb6d4,0x3e76e1a3,0x3e808b7d,0x3e844107,0x3e85bd39,0x3e87bf79,0x3e81043b,0x3e82c4e9,0x3e81ed80,0x3e756640,0x3e7b5e2d,0x3e1e499e,0x3ec10b48,0x3f0dbd12,0x3f439407,0x3ebe40f4,0x3f08cb5e,0x3f398258,0x3f43a0b2,0x3f3839f6,0x3f369d31,0x3f474329,0x3f45bfd8, +0x3f351c0a,0x3efac9ff,0x3eab37df,0x3f40da9e,0x3f1d8423,0x3ecb97e9,0x3e37603e,0x3dc2aee8,0x3dcc8981,0x3dd29208,0x3dcd5312,0x3dc4b6ef,0x3dc29418,0x3dcc6fd4,0x3ddc796d,0x3de3eebf,0x3def6483,0x3df204ad,0x3def7f93,0x3df30fb5,0x3dfad3a4,0x3dfa6029,0x3e005d3d,0x3dfa93fc,0x3df7a597, +0x3df1085b,0x3df061cc,0x3ddd377f,0x3dcc617f,0x3db6e6fe,0x3de27b75,0x3dcd8e6e,0x3db1c630,0x3db79670,0x3dbc020b,0x3dbe3bf3,0x3db5384a,0x3da71e4c,0x3daed055,0x3db9898e,0x3dd79462,0x3dc14eb1,0x3dbdf3ed,0x3e08610e,0x3dfd3962,0x3de1ba0b,0x3dcde93f,0x3dcf8529,0x3dd58c71,0x3df49803, +0x3e1d0bf3,0x3e2530d3,0x3e347840,0x3e2b8a95,0x3e2786aa,0x3e2a5445,0x3e340437,0x3e2b5e95,0x3e36189c,0x3e2b6ef3,0x3e21cc00,0x3e1d0bb0,0x3e187313,0x3e0d99cb,0x3e153603,0x3e0cb862,0x3e057028,0x3e040793,0x3e0519e6,0x3e13f476,0x3e151e62,0x3e1073e7,0x3e0897f5,0x3dff7439,0x3dfa4e1d, +0x3df285e8,0x3dfd7f6c,0x3e067a76,0x3df99a25,0x3dca9ca3,0x3d7ccb2b,0x3d88236f,0x3d41ac98,0x3d09b225,0x3d1f29be,0x3d71698f,0x3df78795,0x3e16ff65,0x3e2e7863,0x3e327b84,0x3e2f29c3,0x3e362d93,0x3e3fe8db,0x3e4f87fe,0x3e4d69c5,0x3e4a0d74,0x3e350b3f,0x3e289bfd,0x3e21d80c,0x3e26454d, +0x3e2289f9,0x3e213e63,0x3e16a933,0x3e136798,0x3e055265,0x3e1b694c,0x3e236df9,0x3e25be71,0x3e0cc04d,0x3df6aded,0x3df8cd27,0x3de11ddc,0x3de95b63,0x3e14313d,0x3e0246ba,0x3e1650a2,0x3da090a5,0x3c2145b7,0x3b8d3be3,0xbc118347,0x3ca69bc1,0x3d7c11cf,0x3e27efb3,0x3e5083ff,0x3e672c4e, +0x3e521d3e,0x3e50cafc,0x3e4dbef0,0x3e69808e,0x3e6d4d52,0x3e6edf32,0x3e5c5c55,0x3e4ab123,0x3e3c4d87,0x3e2cde32,0x3e431333,0x3e33d617,0x3e2f1e4d,0x3e204a5b,0x3e1d96a1,0x3e02091a,0x3e220df0,0x3e24d7de,0x3e322cd4,0x3dfa6905,0x3dd422c5,0x3de11a6b,0x3dd253bb,0x3df6a999,0x3e07b7a4, +0x3ddfa81c,0x3d849c19,0x3c9abc4b,0xbd05b520,0xbd634db9,0xbdbf69ac,0xbda1d418,0xbc579cac,0x3ddc0a29,0x3e2475b1,0x3e4918a9,0x3e442256,0x3e3d2db9,0x3e46abba,0x3e60c4b9,0x3e82a563,0x3e84c36d,0x3e78e939,0x3e56bc40,0x3e47fd5a,0x3e460576,0x3e5d8cda,0x3e476039,0x3e43b830,0x3e2aef10, +0x3e26acfb,0x3e06f5f4,0x3e20a058,0x3e1d61b4,0x3e2e943d,0x3deabcdc,0x3dc19de5,0x3dd7f7bb,0x3dd54f74,0x3dc920ea,0x3e1c6c43,0x3e18c645,0x3e876dd6,0x3e14571f,0xbdca1248,0xbe2fba9c,0xbe921a91,0xbec0239f,0xbecdf96d,0xbea52ecc,0xbe17d8d8,0x3b5ec053,0x3dd38b1d,0x3e48be30,0x3e8b3ffb, +0x3e8fc5bb,0x3e94fca0,0x3e8b1fc1,0x3e916de1,0x3e65c488,0x3e56bc40,0x3e5f93b2,0x3e5a37ee,0x3e58b08a,0x3e4b8f37,0x3e32548f,0x3e1d99f1,0x3dc72298,0x3e1e2322,0x3e24936a,0x3e395d29,0x3e1a4d00,0x3e323dc8,0x3e691952,0x3e4d58df,0x3e73e5d5,0x3e9028fd,0x3e44c8d9,0xbb8c5fb9,0xbe0c89f4, +0xbe73ca81,0xbea54421,0xbf08a6cf,0xbf091068,0xbf07f4bb,0xbeef9d00,0xbed3154b,0xbe9474ea,0xbe64f66b,0xbdafba02,0x3cddda45,0x3e1a8bf4,0x3e6975bd,0x3e83beea,0x3e8d6e96,0x3e62b46f,0x3e4c8b2a,0x3e68c3de,0x3e601d9c,0x3e51c9b3,0x3e334602,0x3e2d9a69,0x3e180edc,0x3dee2653,0x3e27138d, +0x3e3f7e20,0x3e475a41,0x3e3efa6a,0x3e201662,0x3e0aaad4,0x3e2565bf,0x3dec3fe3,0x3d3d7ff6,0x3d63ef1b,0xbddd261b,0xbe7fad19,0xbee2e4dd,0xbeff4188,0xbf2faff1,0xbf3e961a,0xbf5686b9,0xbf591777,0xbf3fb427,0xbf1b8fcb,0xbed00ec0,0xbe8c70c1,0xbdc25fae,0x3c8d810d,0x3d811142,0x3e20d138, +0x3e569353,0x3e700a14,0x3e790284,0x3e7e0d1c,0x3e8e9d82,0x3e78ac30,0x3e6b6b82,0x3e4b6aa4,0x3e3d63b7,0x3de39fb0,0x3e0945a3,0x3dfc4c9d,0x3e96e905,0x3e29b744,0x3e151242,0x3dfb100f,0x3d76bc0c,0x3c83a533,0xbcee0804,0xbcb21016,0xbe74f560,0xbeb9475b,0xbf0e5047,0xbf234f1e,0xbf4de2c9, +0xbf5418d0,0xbf69aebd,0xbf5ec276,0xbf53600e,0xbf2f0f49,0xbed733ca,0xbe97e4b2,0xbe0e8a23,0xbd895e04,0x3d4383b3,0x3ddfded9,0x3e3dc793,0x3e71e02c,0x3e73a88b,0x3e82667f,0x3e80d869,0x3e58c0cf,0x3e2191de,0x3e3ee35c,0x3e21f307,0x3dd3179b,0x3e102e65,0x3e2713cf,0x3e7ed6c0,0x3dfab0aa, +0x3e1b825e,0x3dc1e2aa,0x3dde6276,0xbc888c5d,0xbd36a3a1,0xbe5672ca,0xbeb2bccf,0xbeecb387,0xbf0f8794,0xbf3174af,0xbf715b87,0xbf52faa5,0xbf43c7d7,0xbf200372,0xbf11b72c,0xbee64691,0xbec852d7,0xbe6f4a6c,0xbde7d35d,0xbce4684f,0x3d983af2,0x3e228148,0x3e389cec,0x3e541789,0x3e4c042f, +0x3e3d7614,0x3dfbe393,0x3db594b8,0x3de7c160,0x3dd4e1c5,0x3df6d3c6,0x3de5de5b,0x3e57c8cf,0x3e3d1ca9,0x3c0e7d24,0x3e23181d,0x3e170d2b,0x3d65218e,0x3d2aa808,0xbcf32cb1,0xbd4a82c8,0xbe4810a3,0xbebccf5d,0xbec68425,0xbf044b14,0xbf3460fd,0xbf2f2592,0xbf301962,0xbf1b71eb,0xbee43e11, +0xbeaa5a21,0xbe330c45,0xbda73d29,0xb9db1510,0x3bdfebab,0x3daca789,0x3daa0f6d,0x3da2d454,0x3dc058e3,0x3e0a9e40,0x3dc57c51,0x3cffa55d,0x3d8e26db,0x3d34755d,0x3d64c509,0x3d7ad792,0x3d85f0aa,0x3da91080,0x3e11aceb,0x3de70af5,0x3d1ffc22,0x3d24af07,0x3be843b2,0x3ca67e8d,0xbd7896b6, +0xbd0d5edb,0xbe2d0ce0,0xbe27771d,0xbec7bf40,0xbeb48a6a,0xbee5face,0xbf0da7e4,0xbf205713,0xbf1a732c,0xbf071ca2,0xbeca6538,0xbe9be99c,0xbe4d0d15,0xbdf9b31e,0xbd034d10,0x3cbf2f3b,0x3d73d3df,0x3d155a60,0x3d010bd5,0x3cfb3aa7,0xb9c50f75,0xbb1ad997,0xbd02ff13,0xbda4c2db,0xbd11d4f0, +0xbd10e518,0xbc4aefc4,0x3c9fca1c,0x3d92a30f,0x3d033d0e,0x3d29b887,0xbc3fc29d,0x3c9bfbd1,0x3bdf33d3,0x3bb3e397,0xbd1f4d87,0xbdd2b376,0xbe2bebd2,0xbe6d145e,0xbebc3f95,0xbec57253,0xbebf2357,0xbee9d9eb,0xbef725f0,0xbee9eefc,0xbedfa37b,0xbecab0d3,0xbead58c5,0xbe8c01d5,0xbe5cec53, +0xbe37116e,0xbe28e1c0,0xbdf85bae,0xbe0553a5,0xbe262c3a,0xbe25e8ac,0xbe289c14,0xbe0b163b,0xbe0e26b7,0xbe17d665,0xbde98319,0xbdabc670,0xbd98d68c,0xbd33e132,0x3a48537b,0xbc964215,0xbcd04df9,0xbd35493f,0xbd499f4b,0xbd6e0e3c,0xbc6cd8c0,0xbdddc6c2,0xbe037fcb,0xbe60d4fb,0xbe89ee3d, +0xbeb88bfb,0xbea3b60d,0xbe9f8c83,0xbeb3fa67,0xbec4ba4f,0xbeba808a,0xbeb86be2,0xbebd2311,0xbeb43b39,0xbeacc10f,0xbeac8404,0xbea256fc,0xbea3b7d7,0xbe9af3c7,0xbe993c5d,0xbe990491,0xbe8e837b,0xbe86363e,0xbe66010c,0xbe6f2bfd,0xbe6b07df,0xbe37806a,0xbe27c8e9,0xbe061a0e,0xbdd71f2b, +0xbdd3bb83,0xbda6faaf,0xbd99ca4e,0xbddbe79b,0xbd92b1c3,0xbdcddf2c,0xbdd7d1d1,0xbe24022d,0xbe48800f,0xbe6bb613,0xbe7af816,0xbea7ae98,0xbe3d5a05,0xbe719ea4,0xbe6cc486,0xbe667608,0xbe8a1cf4,0xbe8e9fad,0xbe98558a,0xbe97a86e,0xbe9779f0,0xbe953f07,0xbe99cc27,0xbe9b01ef,0xbea6d8ed, +0xbe9479b4,0xbe845625,0xbe850d18,0xbe74bf8b,0xbe4d7d57,0xbe626e7e,0xbe97b9a2,0xbe7b408c,0xbe74da46,0xbe5b0f06,0xbe50ec38,0xbe217465,0xbe459396,0xbe3f84f3,0xbe564951,0xbe536cd4,0xbe1b8d4d,0xbe504e9e,0xbe4dd0d0,0xbe55112c,0xbe90d1df,0xbe625bd0,0xbe782257,0xbe170822,0xbe2eb953, +0xbe2c54bc,0xbe2c9ef9,0xbe30fa98,0xbe3066a6,0xbe39c7bb,0xbe3a1e6b,0xbe3fcf66,0xbe443bc3,0xbe453a80,0xbe427238,0xbe42e2be,0xbe392233,0xbe38b4ba,0xbe3439e6,0xbe2a684d,0xbe249cfe,0xbe0709f1,0xbe624007,0xbe8eae30,0xbe99e779,0xbe511b52,0xbe8203f8,0xbe905a3f,0xbe955b8a,0xbe8da2b9, +0xbe8ac3b4,0xbe921bdb,0xbe94960f,0xbe90f684,0xbe804922,0xbe45decc,0xbe9d98fa,0xbe987f9c,0xbe84f3bf,0xbceab7d8,0xbc20d90b,0xbd4efbe6,0xbcfad5ac,0xbd012d22,0xbcf5a4ec,0xbd1fa77d,0xbd36f937,0xbd5159db,0xbd40f08b,0xbd3a29f0,0xbd238e5f,0xbd132241,0xbd07b400,0xbd0189ed,0xbd0235d8, +0xbd055fbc,0xbd037cd0,0xbd07e9ab,0xbce75111,0xbd18759c,0x3c51888c,0x3d2530a0,0x3de0c92c,0xbab23380,0x3d28b685,0x3ddadf3b,0x3ddb9558,0x3dd55f2a,0x3dc4e34f,0x3de1548a,0x3dd5a662,0x3dbf5429,0x3d44e5f9,0xbbf6689a,0x3daeae10,0x3d51fdf6,0x3dca5b4c,0xbcdca55d,0xbcad929f,0xbcd92f3a, +0xbd050f8b,0xbd96c0d0,0xbdc155e9,0xbdec3e32,0xbdcf06e9,0xbdb3561a,0xbd813bc6,0xbd3c5fb2,0xbd21b094,0xbd241e57,0xbd172df8,0xbd2bc56b,0xbd2c60c7,0xbd2d6db2,0xbd238148,0xbd4138f8,0x3d4107eb,0x3cec6b8b,0x3d35810e,0x3d0f2092,0x3b2395bd,0x3d65e443,0x3d4dd6d5,0x3da84a4e,0x3d5a337f, +0x3d8d131d,0x3c20d0c6,0x3d7b675d,0x3d4814d1,0x3d2539f5,0x3d769203,0x3d31f128,0x3d3815ad,0xbd5dc604,0xbcfb6d0d,0xbd061c51,0xbd04ea05,0xbdcf7c5c,0xbe0a1646,0xbe2f2aff,0xbe236800,0xbe0eecfa,0xbdd0ed3c,0xbd9332a4,0xbd531d6f,0xbd47b07f,0xbd530326,0xbd51041d,0xbd67866f,0xbd47320a, +0xbd71b6ae,0xbc45349e,0x3d772a09,0x3d2f1104,0x3cce5f4e,0x3d7127bf,0x3d640c70,0x3d33d782,0x3d9787e4,0x3cf1e73c,0x3dda1865,0x3d8055d2,0x3db5b929,0x3d6a2c32,0x3d17a293,0x3d08e5e3,0x3d4ed530,0xb9b59b37,0x3d8b3cec,0xbc0365a0,0x3b77f890,0xbb1aab30,0xbcbd094e,0xbe0ed868,0xbe53ef66, +0xbe87fe50,0xbe7d23df,0xbe44d27e,0xbdf934d3,0xbd99ec3e,0xbd43f663,0xbd4b8893,0xbd485992,0xbd6bad64,0xbd61a973,0xbd82e984,0xbd6cc215,0xbca12657,0x3ce39e76,0x3c1e010f,0x3d505681,0x3cdc6f00,0x3d8f7f1e,0x3d2b1249,0x3dffc0d5,0x3e010af5,0x3e044e26,0x3dc315d2,0x3df02265,0x3dd438d6, +0x3dbd48d1,0x3d91c560,0x3da79104,0x3d9f023c,0x3ccbcf19,0xbd552616,0xbcc2144e,0xbc1cfb61,0xbc0dda09,0xbe0eadb5,0xbe65c71b,0xbe91a968,0xbe9332b7,0xbe796b47,0xbe273dbd,0xbdcd34ae,0xbd5e45f5,0xbd63d819,0xbd7c387d,0xbd8af094,0xbd88a17a,0xbd85fdf9,0xbd652e21,0xbc9222c3,0x3dedc512, +0x3d8474de,0x3dd2eb59,0x3db82c12,0x3dc3266b,0x3da37faf,0x3deb201f,0x3e141f82,0x3e205ce5,0x3df2de16,0x3dd1260f,0x3dcfa333,0x3d6e9f7b,0x3d07e5b2,0x3d78954d,0x3d36d01f,0xbe89f458,0xbeb2423b,0xbe9b714d,0xbe9ac63d,0xbe8ed4ee,0xbe305bc5,0xbde09ce5,0xbdb1dab7,0xbe282ed9,0xbe603e39, +0xbe51b985,0xbe5db985,0xbe73160c,0xbe26b3af,0xbe26461f,0xbe0042d5,0xbe243061,0xbdccf3d2,0xbd98cd2e,0xbd85a16b,0x3d0e2a27,0xbb80f0f6,0x3dad97a9,0x3d628fe2,0x3deb3f31,0x3dd10806,0x3e1b1f29,0x3e0de9d3,0x3e02f0bc,0x3e015c0a,0x3ddedd56,0x3da3c668,0x3d023f1c,0xbbca738a,0xbda59091, +0xbe4ebec6,0xbe819cf8,0xbe8d5879,0xbe815404,0xbe4a7b63,0xbd3a044a,0xbdc424aa,0xbdc906a6,0xbd28765b,0xbbabf875,0x3cedf2e8,0x3c9a03a5,0x3ce45452,0x3ccf62a9,0xbca45c3e,0xbcbf7f6c,0xbce05281,0xbd3c63a0,0xbc8f91bd,0xbd439cf6,0xbcb8996c,0x3da72ef1,0x3d82cfd0,0x3da3015e,0x3dd500c6, +0x3defae9d,0x3dec40ee,0x3e1bec92,0x3e26c449,0x3e25ff3e,0x3dbfc8bd,0x3d029de0,0x3b7fa74e,0xbcf4e0a0,0xbdacf7cc,0xbe02db26,0xbe4e956a,0xbe81ba6a,0xbe799b3d,0xbe070e0a,0xbdd173fd,0x3d156ce9,0x3da4a7a1,0x3e388e00,0x3e9d631e,0x3ea8cb95,0x3eb34568,0x3e9fdcbf,0x3e9b89b9,0x3e8519fa, +0x3e5128eb,0x3e652642,0x3e29b64b,0x3e0209a6,0x3cac4c4e,0xbd374f02,0xbd574a92,0xbd4bafe6,0xbc2ff558,0x3cc1e4f4,0x3ce3c832,0x3da89ac9,0x3d8679d0,0x3e32b307,0x3e34fd5e,0x3ddd9986,0x3dc55c3a,0x3d90c8dd,0xbc5d0ecc,0xbc9af7e8,0xbd5e4550,0xbdcebed5,0xbe30faae,0xbe0259c9,0xbde0b6ce, +0x3d34b204,0x3db7d430,0x3e15ee6c,0x3e67c258,0x3eb6884d,0x3efd0746,0x3f0f8817,0x3f1718ff,0x3f04758c,0x3f001b92,0x3ed967e5,0x3ecb8134,0x3ea3352e,0x3e84d1e5,0x3e3c020c,0x3d8fdc2c,0xbc59a3a8,0xbcc061db,0xbd0865bc,0xbd5981bf,0xbcdad1c4,0x3cf7ca3d,0x3cc18648,0x3d2fd16e,0x3e24aae5, +0x3e42cdb0,0x3d26e2a1,0x3e04538d,0x3dd4543f,0x3c2165d6,0x3ac4a44f,0xbc6675dd,0xbd864707,0xbd8bc3fb,0xbc615136,0x3d8be54e,0x3e2afd42,0x3e5ca4a7,0x3e6b062f,0x3e734de0,0x3e988b22,0x3ed21be8,0x3eef80e8,0x3f040a97,0x3f0fc6b2,0x3f0201f2,0x3ee9a8c1,0x3ec5e65d,0x3e96e78b,0x3e4d7fb8, +0x3e09c43d,0x3d8b2949,0x39ddf518,0xbcfaf728,0xbc44a9e5,0x3bc3f3f6,0x3cb77039,0x3caed650,0x3d3b9580,0x3ce355b7,0x3e146856,0x3e2ab4bf,0x3d4cb0fb,0x3e15a028,0x3ddf6bd9,0x3c256712,0x3c93d59d,0x3bbfea20,0xbd11a512,0xbcb24b01,0x3e1b18cf,0x3e37d76c,0x3e8577fc,0x3e9e4d80,0x3e601a81, +0x3e5870f7,0x3e51532d,0x3e6378be,0x3e85c425,0x3e8de39d,0x3e8ecd7c,0x3ea27447,0x3e93b0b6,0x3e8a05dd,0x3e7d2222,0x3e4f33b7,0x3e064ff5,0x3d2fd072,0x3c177d90,0x3cfe9900,0x3d98aa37,0x3d90673d,0x3d8efc5b,0x3db8a1d4,0x3dbae823,0x3df63bb8,0x3e053116,0x3e09e28b,0x3e22ae98,0x3e0b5047, +0x3dfd78c3,0x3de0da26,0x3dc137b9,0x3d0bdf21,0x3d834b23,0x3d3f9bdd,0x3e34e9ea,0x3e44be21,0x3e652cf3,0x3e75ec4d,0x3e61f765,0x3e486ffb,0x3e2df6ff,0x3e1b7034,0x3e0c30f4,0x3e072931,0x3e03efdd,0x3dc66c15,0x3dacb945,0x3d9fbd47,0x3da88f1f,0x3da3e6a1,0x3da07c3f,0x3db5a026,0x3da04375, +0x3de50796,0x3e1769cc,0x3def5baf,0x3e11c4a7,0x3e118fd0,0x3e1c1ecc,0x3e064175,0x3e0b2880,0x3e05b24f,0x3e14dc4c,0x3dde90e5,0x3dd102ec,0x3d9634e6,0x3dd3dd69,0x3e02ad47,0x3e0e64b4,0x3e1f8dcb,0x3e421662,0x3e4134b7,0x3e4baa28,0x3e583bc3,0x3e5a533a,0x3e42c635,0x3e34b7e3,0x3e22135d, +0x3e11b569,0x3dfc9efb,0x3deeaa6e,0x3de09c69,0x3dec33bc,0x3dd2e646,0x3de90f26,0x3e164e02,0x3e29f8a4,0x3e3e152e,0x3e3c01cc,0x3e45c1ac,0x3e63965a,0x3e4f2085,0x3e4a3c7f,0x3e41f6b4,0x3e27491c,0x3e0f1cc1,0x3e11681f,0x3e049d64,0x3e08158b,0x3deec04d,0x3dd5afca,0x3d80c90b,0x3de8f372, +0x3dee8215,0x3e14068b,0x3e2150a9,0x3e40a5e8,0x3e469343,0x3e3c2e80,0x3e4e6690,0x3e5eba7d,0x3e54c943,0x3e538208,0x3e533501,0x3e4ff813,0x3e4c5155,0x3e4be6fc,0x3e4e154d,0x3e548836,0x3e52420a,0x3e6a31e2,0x3e77ea3c,0x3e803a1d,0x3e81963b,0x3e851da2,0x3e871910,0x3e822237,0x3e68ca52, +0x3e6db3b4,0x3e4ba54b,0x3e3bde96,0x3e37d742,0x3e1bdd59,0x3e1ba310,0x3e1e1863,0x3e039608,0x3e045e6e,0x3df77070,0x3e0efdcd,0x3e0dd1c2,0x3e293659,0x3e26cc5c,0x3e787b5a,0x3e483523,0x3e61fa48,0x3e5ca7c2,0x3e5243f0,0x3e6f637f,0x3e6fd9a2,0x3e7d2948,0x3e809612,0x3e82835f,0x3e8430bb, +0x3e877e39,0x3e8958fc,0x3e8f7460,0x3e866ac8,0x3e7f84b3,0x3e865e91,0x3e81f561,0x3e6d3232,0x3e85f5c4,0x3e8922ac,0x3e814ee5,0x3e780c7a,0x3e758481,0x3e648db8,0x3e4ac4f0,0x3e6309a1,0x3e59edbc,0x3e5ef907,0x3e5ffac5,0x3e3978d4,0x3e527c8a,0x3e57714d,0x3e51a0b7,0x3e65d006,0x3e65ff6c, +0x3e559ce9,0x3e24b042,0x3e2de7fa,0x3e2d7330,0x3e2d2f77,0x3e315a22,0x3e305113,0x3e3525ec,0x3e35762d,0x3e3950de,0x3e3c188c,0x3e3d94ac,0x3e3ddae3,0x3e411ef4,0x3e3f3c17,0x3e421820,0x3e42628c,0x3e3edfa5,0x3e3c599d,0x3e366f8e,0x3e5e0c15,0x3e74c821,0x3e64d109,0x3e55b9ab,0x3e66e0e9, +0x3e5d70ce,0x3e619577,0x3e5755b0,0x3e5535eb,0x3e5b5f31,0x3e5ca513,0x3e59ad31,0x3e568e8b,0x3e3c7010,0x3e5ac76c,0x3e669652,0x3e91f529,0x3d07251d,0x3c219d43,0x3d3b7d7c,0x3ceba680,0x3ce74b33,0x3cc3f888,0x3ceb1739,0x3d0640a5,0x3d2d306a,0x3d17dce9,0x3d19ceec,0x3d10b77b,0x3d12a21b, +0x3d125fdf,0x3d178ce0,0x3d0efeee,0x3d0a2535,0x3cf70ef7,0x3cf6f949,0x3cd71ab6,0x3d0f7794,0xbc2f8189,0xbd0e627d,0xbdb154b3,0x3b615f8a,0xbcf4a5eb,0xbd9d944c,0xbd9a767c,0xbd9074bd,0xbd83779b,0xbd96444d,0xbd9498e4,0xbd8e472b,0xbd120aa0,0x3c40301a,0xbd8b059d,0xbd336bf7,0xbd9d7e0a, +0x3c8da883,0x3ce67a7b,0x3cdbb0df,0x3c78adde,0x3d0eb76d,0x3d4a6e9e,0x3da3a944,0x3d53667c,0x3d311835,0x3d04510e,0x3cf38a56,0x3d182871,0x3d3dd2b4,0x3d2a4de4,0x3d312d04,0x3d12b4dc,0x3d02bb62,0x3ce3ea08,0x3d13e05e,0xbd330904,0xbcbf40d7,0xbd158ddb,0xbcd00f05,0x3c078401,0xbc5e5b3d, +0x3b1b3e1a,0xbc531bf0,0xbbc8968f,0x3ae2f865,0x3d385a2a,0xbc639692,0xbc5cfe1c,0xbbf92ffe,0xbc87e237,0xbbf5c9fe,0xbd0cabc2,0x3cab0faf,0x3cc09f1c,0x3c4eda91,0xbbbb5208,0x3d10c01b,0x3d6c04a5,0x3dfb62ec,0x3da72119,0x3d8db99b,0x3d483f76,0x3d5766b3,0x3d50bef4,0x3d8114d9,0x3d79ab41, +0x3d4d90be,0x3d16562e,0x3cd3ce11,0x3cfcf4b8,0xbacdda95,0xbd53c336,0xbcf3bb29,0xbc45f68e,0xbd0d67e3,0xbc467f4f,0x3cedce21,0x3c9f71ef,0x3d625dec,0x3b85520f,0x3d5010ca,0x3cbd93a8,0x3b6a368b,0x3c831329,0x3bf11a7b,0xbb913c97,0x3ca8b877,0xbd19267c,0xbd174d9d,0x3c312ffd,0xbab07ad3, +0xbcfa51b5,0x3d27527c,0x3db634c8,0x3e3eeba3,0x3dd5a1bc,0x3d6225cd,0x3cb2fb0e,0x3cb3dadf,0x3d19a6e0,0x3d837214,0x3d746f6e,0x3d686ab3,0x3d0dc411,0x3ce96361,0x3c90960a,0xbb7f13dd,0xbcd5c4c3,0xbc207823,0xbd0f34da,0xbc17a174,0xbc86a90d,0x3d3dd083,0x3cde871b,0x3d58ecb6,0x3ce914e3, +0x3d9f187a,0x3d794c8c,0x3c67832f,0x3be771cf,0x3c426209,0x3cd8fe4d,0x3ba37b97,0x37ed2942,0xbce15ad6,0x3ba3a661,0xbd1be328,0xbd7d2b79,0x3c719738,0x3dac62b4,0x3e4cf054,0x3e05be00,0x3dc21a6e,0x3d5d3b3c,0x3d5b2408,0x3d610f58,0x3db60fcd,0x3dac22eb,0x3d8a2770,0x3ceeb467,0x3cb6d519, +0x3c446a4c,0xbbd64d15,0xbd84e38c,0xbcda174a,0xbce79c87,0xbc47f420,0x3cc28011,0x3d4fb1cb,0x3da4f996,0x3ddb43c0,0x3dc6f74f,0x3dcc2469,0x3dbb6f47,0x3d3e7833,0x3d41ea05,0x3d2abe30,0x3d13037c,0xbb090760,0xbcc8a57e,0x3d4cce02,0x3de9c5e6,0x3e338d36,0x3e9c1e9d,0x3ea5179c,0x3ea70d84, +0x3e96f6cc,0x3ea8fe9b,0x3ea5b988,0x3e8c0f27,0x3e90aac6,0x3e8b5eff,0x3e3d9f32,0x3e20395c,0x3ddd6753,0x3dbd473b,0x3cc9c6c7,0xbba1c590,0xbc757208,0xbd5e04dc,0xbbb9f072,0xbc382b68,0x3c91eaa8,0x3d290bcb,0x3da836ba,0x3de28a12,0x3dd030a4,0x3d3ff08d,0x3d960fd0,0x3d20d22e,0xbc9a08a7, +0xbc914d2e,0xbcec925b,0xbd57e1e3,0x3c2514e5,0xbc6453b4,0x3c7c98b2,0x3d5774fc,0x3d0046ed,0x3b1afd40,0x3da0b6b1,0x3e1cd649,0x3e2541eb,0x3e4b6bf6,0x3e5085d3,0x3e8d567a,0x3e88c962,0x3e829166,0x3e86d381,0x3e1e3934,0x3da72867,0xbd02731b,0xbd41a070,0xbcfccc26,0xbbf8ab82,0xbd642fe6, +0xbcb3a609,0x3a99e564,0x3cd55ab2,0x3d46a0aa,0x3da3eb75,0x3ddc33aa,0x3dfadcdb,0x3dc5bb37,0x3d3bc8fe,0x3d0fad1c,0x3c9705f9,0x3ca76b21,0x3c807318,0x3c90d6a6,0xbc428847,0x3c816ffe,0x3ca11822,0x3c8bc5fa,0xbc2ea48b,0x3cb5e648,0xbd83d6d6,0xbd87948d,0xbd6d83c6,0xbcd7c3ec,0xbba7c428, +0x3cd1ba71,0x3d6b45ff,0x3d61cbe2,0x3deee91b,0x3d4fbd45,0xbbbe0907,0xbd50f116,0xbd606a04,0xbd5893c2,0xbcaddb0b,0xbce3e116,0xbd27a195,0xbd2d4905,0xbc4e9f1f,0x3b0bf4dc,0xbbdb8866,0x3dcc1467,0x3e01f28b,0xbc73f87d,0x3de2ae92,0x3dbe9017,0xbc3057d6,0x3cb6ffff,0x3c8d6bdf,0x3c96da30, +0xba08319c,0xbb448bac,0xbca2446a,0xbd7980bd,0xbda698cf,0xbc610661,0xbe3924f3,0xbe7e074b,0xbe9bfa4f,0xbe970791,0xbe948d83,0xbe88c2ad,0xbe7a5945,0xbe4754a9,0xbe231928,0xbe168491,0xbe026cd0,0xbdf0f442,0xbdd13fb5,0xbdba6591,0xbd8f603b,0xbd8d5c56,0xbd5024bf,0xbd579dbd,0xbd7f610a, +0xbc65152f,0xbcebcfb0,0x3d8e5559,0x3deef4cb,0xbd6314d4,0x3df2d06d,0x3de9b337,0xba5a47ba,0x3d01d64c,0x3caa156a,0x3c7042dc,0x3ccc3bfd,0xbd3266e4,0xbdc9c1b3,0xbdf80b80,0xbe034a2d,0xbda503ee,0xbe5d451a,0xbe9dc6ca,0xbec9e12b,0xbec8a98f,0xbec761e5,0xbeca31be,0xbebb2736,0xbeb68cfa, +0xbeab8998,0xbe99b842,0xbe7e9fbe,0xbe4c77e4,0xbe247ebf,0xbe0162f9,0xbd94edde,0xbd8ae9b3,0xbd9b867c,0xbd287976,0xbcdaf542,0x3bed38ce,0x3d32a224,0x3d66bdcb,0x3d1d68cf,0xbd462133,0x3d8fa947,0x3d8eb305,0x3d46d662,0x3d200b0e,0xbb909df9,0xb9502ed6,0xbcf7f103,0xbe0976b7,0xbe3d9bdf, +0xbe2034e9,0xbe184ece,0xbde72563,0xbe45b876,0xbe7aac5e,0xbe9efe26,0xbe9ac582,0xbea84b07,0xbea81cf1,0xbec202c6,0xbea43dd7,0xbea721c2,0xbe971adf,0xbe77b286,0xbe3634d5,0xbe1bcbf1,0xbddf2d12,0xbdcf52fe,0xbdad56c3,0xbd5083ab,0xbd586de0,0xbd1ddfa3,0xbd0893d9,0xbcd0c915,0xbb82b70f, +0x3b93ade2,0x3c88a836,0x3d7daa9f,0x3d5b068e,0x3b22c133,0xbbdb6679,0x3a6259b0,0xbd2e62a0,0xbd9e01ae,0xbdd55265,0xbe033799,0xbdf10ccb,0xbe0363a0,0xbe1dab4d,0xbe4323e7,0xbe594430,0xbe5e6a93,0xbe5c70c6,0xbe51914f,0xbe4766df,0xbe3879d7,0xbe3b9b09,0xbe3ad3d9,0xbe3d22a0,0xbe36ebfb, +0xbe36b1fc,0xbe2c8837,0xbe204bf8,0xbe050b81,0xbdf9d07f,0xbe04ef40,0xbdb9b1d5,0xbdae1701,0xbd5ec728,0x3be82ccb,0xbc75da71,0x3cd169f1,0xbbc7b68a,0x3d182d91,0x3cac3619,0x3c46ee63,0xbd22c9eb,0xbda976ac,0xbdb064a9,0xbde89750,0xbdc9a11f,0xbdc7c838,0xbdfb8560,0xbe1717a3,0xbe3d8448, +0xbe3b6a2b,0xbe43b0c1,0xbe474069,0xbe4238a3,0xbe3c5c11,0xbe3a5bdb,0xbe2f9ff7,0xbe29b40d,0xbe1a5604,0xbe1be736,0xbe23f3a1,0xbe2f4a35,0xbe352277,0xbe3a7805,0xbe388baf,0xbe14933e,0xbde649bc,0xbdff6736,0xbda3e813,0xbd8417fc,0xbd1ff414,0xbbe09ce9,0x3a21d320,0xbc4472ce,0x3b5d75cb, +0xb9d90712,0x3ca918c3,0xbd066d53,0xbd281bf1,0xbd6b0f82,0xbd90aa58,0xbdd41e59,0xbe03c18e,0xbe12f0bd,0xbe2e2a99,0xbe45a49d,0xbe41b6da,0xbe459d9b,0xbe4a1dc9,0xbe467b47,0xbe4396ed,0xbe3f7885,0xbe3c9e31,0xbe34eccd,0xbe2a4617,0xbe39b3e6,0xbe3c3325,0xbe46244a,0xbe400d8d,0xbe4ee7b3, +0xbe31f509,0xbe20e8d2,0xbe06bf8e,0xbe0e834f,0xbdd2701f,0xbda2d3f7,0xbdb5fb3d,0xbd7956ee,0xbdc00bb2,0xbd184b43,0xbd78b40f,0xbd26d8be,0xbd411010,0xbd60502f,0xbd54e216,0xbda7ab5b,0xbdc59d64,0xbe1d06c1,0xbe35521a,0xbe3adbf7,0xbe325276,0xbe2753c2,0xbe40861d,0xbe404aac,0xbe4c5117, +0xbe4f8e40,0xbe532ed1,0xbe566cc3,0xbe5baabf,0xbe6147ee,0xbe66957e,0xbe59f267,0xbe4ee50b,0xbe55f001,0xbe4bb6de,0xbe402269,0xbe4fac02,0xbe11f904,0xbe1f319e,0xbe11cfb6,0xbe24a851,0xbe0f863e,0xbdfa475d,0xbe09c86b,0xbe08ce1e,0xbe0ec68e,0xbe15fbde,0xbe0eef5b,0xbe062a5e,0xbe225290, +0xbe1c3af3,0xbe126102,0xbe3f5372,0xbe147cd2,0xbe0e631e,0xbe0faadb,0xbe12a721,0xbe124d16,0xbe15f130,0xbe14a672,0xbe18346c,0xbe17628b,0xbe1944cb,0xbe1a6324,0xbe1a2a18,0xbe193dc9,0xbe1bc0e6,0xbe1a2a80,0xbe1bddda,0xbe1bce62,0xbe19c2a2,0xbe14de00,0xbe1f8398,0xbe1d6446,0xbe154ab1, +0xbdca7e0d,0xbe13db05,0xbe097193,0xbdc8f73f,0xbdc86617,0xbdc633c3,0xbdc7bfa3,0xbdc33e92,0xbdca6dee,0xbdd4ecd7,0xbe04d869,0xbe050743,0xbdd05d6f,0xbe076894,0xbe67fb94,0x3d263ca1,0x3d1b75b1,0x3b94a6a3,0x3ca679c7,0x3cac6dc5,0x3ce6c0a6,0x3cb3759d,0x3caf955b,0x3cacd3b5,0x3c996cfb, +0x3c87a332,0x3c66686b,0x3c381488,0x3c16e32a,0x3bcadf05,0x3bce87b8,0x3bf08948,0x3c14eab3,0x3c23ab18,0x3c555a29,0x3b932976,0x3d4296d3,0x3d8d4089,0x3ddca1a6,0x3d202686,0x3d90037d,0x3de80907,0x3ddfa57d,0x3dd7a429,0x3dc781e0,0x3de987b5,0x3de39e29,0x3dce9012,0x3d9d33cd,0x3d112c62, +0x3dc92c56,0x3da5da5e,0x3defa032,0x3d25c15c,0x3d375b88,0x3d4ca103,0x3d8b11e8,0x3d1a541c,0x3d00dae0,0x3ced4051,0x3cde122a,0x3ceb5361,0x3ccafcdc,0x3ca242cc,0x3c46bc01,0x3bb9e528,0x3ba47a5f,0x3b4a4f32,0x3bb4c602,0x3c18e6c5,0x3c43a690,0x38a21b24,0x3d92aa27,0x3d61c4bb,0x3d849762, +0x3d76cf1b,0x3d2a3d1f,0x3dac9a39,0x3d8c4697,0x3da85ba0,0x3d7163bf,0x3da2e3d1,0x3ccdca18,0x3d52b2ba,0x3d79d2c2,0x3d67c314,0x3d85e353,0x3d6d4585,0x3dafe6eb,0x3d2d44b2,0x3d3d4ff7,0x3d7e55a4,0x3dc6c8ef,0x3d6671f9,0x3d2e14b5,0x3d0326e6,0x3d0a833e,0x3cd311d1,0x3c904e08,0x3986503f, +0xbc4c9705,0xbcf2284d,0xbd0f5b65,0xbce85795,0xbcc3539a,0xbc36a369,0xbc91171b,0x3b8122b0,0x3d67a11a,0x3d2008ed,0x3d03caeb,0x3d4e3be3,0x3d5061e8,0x3d96c5e7,0x3d711075,0x3d05ef78,0x3d844962,0x3d740223,0x3d9d6a76,0x3cfb64a0,0x3d2b3f04,0x3d3fbc54,0x3d48ce6d,0x3cef6bab,0x3d9a967e, +0x3dae628a,0x3da49302,0x3dd4a75f,0x3e1e9f65,0x3d891508,0x3d25ae38,0x3c82ebb0,0x3d088122,0x3d2b9f70,0x3d084ed1,0x3c618199,0xbc50262e,0xbd04ded6,0xbd1b3c6f,0xbd2e6acc,0xbd12a245,0xbccf0d50,0xbca22316,0xbc8b5099,0x3c4f8c14,0xbaece2f0,0x3cbb50e8,0x3b966c2a,0x3d0cfe15,0x3d86e4ac, +0x3d8d08b8,0x3d78c158,0x3d1ddef9,0x3d716d45,0x3d72c865,0xbb919129,0x3d2a6125,0x3d00fb23,0x3ca79ccd,0x3d3e2f35,0x3d61f809,0x3d92c320,0x3d6a9281,0x3dc282b0,0x3e207d9e,0x3dbb14a2,0x3d85d2e0,0x3d052761,0x3d443256,0x3d16c0db,0x3caa60b6,0xbc590009,0xbd36ef8c,0xbdb5827b,0xbdc192d5, +0xbdb7323a,0xbd8c6f16,0xbd6445b9,0xbd4e213e,0xbd36bc40,0x3ce9266d,0xbbc89661,0x3baf6dcb,0xbc478e75,0x3b0e5ade,0x3d5b69fc,0x3d353c63,0x3d81c0e6,0x3d1f15bd,0x3db2875e,0x3d849e3a,0x3ae5895b,0x3caf1710,0x3cc412ab,0x3c778579,0x3cf1709b,0x3e453e62,0x3e16fd7f,0x3e41db61,0x3e2b6c4b, +0x3de4e557,0x3dc448a0,0x3d5683da,0xbd816604,0xbd8d482d,0xbda54a55,0xbd84f45d,0xbdb9691f,0xbde995fa,0xbde37942,0xbdfb8887,0xbe09d4f8,0xbe0d61db,0xbdb854c2,0xbd8eb782,0xbd541356,0x3c0d739d,0xbc6e5b06,0x3cacb9a7,0x3c221c39,0x3d40abbd,0x3dbc696c,0x3d893280,0x3d6e54e9,0x3d61abaa, +0x3d675357,0x3d5755e8,0x3d8f9d9e,0x3da74a55,0x3dd33682,0x3e0019e7,0x3e488e4b,0x3cf13818,0x3d264521,0xbd60349b,0xbd06c836,0x3d97bbf5,0x3d9d46d8,0x3d949b51,0x3c990e9a,0xbc4c0fe5,0xbd98ac58,0xbe10890d,0xbe54fb80,0xbe8760e5,0xbeb2450f,0xbeaafc36,0xbe9873cb,0xbe49df3c,0xbe2d860e, +0xbe18af17,0xbdcecbbf,0xbc8716e9,0xbcb919a6,0xbbd30a51,0xbb8e0e94,0x3c880dcd,0x3d863c37,0x3d74d1fa,0x3dbc8096,0x3d986006,0x3de6f2ef,0x3e02c93f,0x3dd55ad4,0x3d82c6c1,0x3d4035f3,0x3d41ec2b,0x3d197e6a,0x3c217983,0x3c1c2c71,0xbd178f46,0xbbdad284,0x3cc383e6,0x3ddabf15,0x3d90bcb3, +0xbda30258,0xbd2d6896,0xbd6f8e6c,0xbd71eb92,0xbdcff636,0xbe0386c7,0xbe50a13c,0xbe58854f,0xbe49debf,0xbe18598c,0xbdfb4966,0xbdbd1eaf,0xbd999f3a,0xbd0485af,0x3c5736fd,0x3cfb407b,0x3cab7958,0x3d6449d7,0x3dfc10b3,0x3dc26db8,0x3db748bd,0x3cffbda8,0x3df3a85a,0x3dc9dba1,0x3da21b1e, +0x3d805a87,0x3d36067e,0x3d3a2b00,0x3d105dca,0x3cddf273,0x3d0df790,0x3b544166,0x3c070809,0x3d04d3d1,0x3de8b68b,0x3dd98725,0xb90e4558,0xbad8c0ee,0xbbecaa10,0x3ce0c0d1,0x3b976fdc,0xbcbd70c6,0xbd1c7aab,0xbd900168,0xbda30b45,0xbda09087,0xbd81bd33,0xbd51f119,0xbd1911b6,0xbba3fd12, +0x3a2e630c,0x3d353464,0x3d10c410,0x3d571a53,0x3e0964e8,0x3d90cd3e,0x3d72d798,0xbc35e4f3,0x3da1188b,0x3d902e64,0x3d82a7fb,0x3d3803af,0x3cef9f57,0x3d2c8256,0x3d2af5f8,0x3ce71c02,0x3daf9054,0x3cb38d70,0x3cd78d6d,0x3ddf0e4e,0x3e405764,0x3e675c72,0x3e35d357,0x3dfdf299,0x3d8bf4af, +0x3d8c46d0,0x3c4fec67,0x3b7e8180,0xbb4a793e,0x3b8e2e2d,0xbc17e707,0xbca986e4,0xbd3383ce,0xbd2fb062,0xbd4ac210,0xbd01a9e9,0x3b6f2a6c,0xbc0fc2c6,0x3a419c5b,0x3cb42348,0x3d87f9b9,0x3cc99261,0x3cb78c02,0xbc54efe1,0x3d25008c,0x3d841de5,0x3dbe0c3f,0x3d55d795,0x3d14f6ac,0x3ce53b41, +0x3d2cbf38,0x3d8bb320,0x3da82076,0x3d455a60,0x3d73aab6,0x3e05d46c,0x3e303954,0x3e236793,0x3dd88bb7,0x3d5c5b7b,0x3d40ef43,0x3d96779b,0x3d87b60a,0x3d2e92d4,0x3ce7f00e,0x3c377d2c,0xbc312b36,0xbc500226,0x3b8ff965,0x3ca18347,0x3d3f20d0,0x3c66e663,0xbba3e8cc,0x3b070628,0x3cba730b, +0x3d4ef4d9,0x3d997759,0x3d19bff8,0x3d251261,0xbb9750fa,0x3d170d0c,0x3d44d1e5,0x3d9dad1e,0x3d809f62,0x3d071e3f,0x3d605c19,0x3d8509e1,0x3c141b7b,0x3cb9a838,0x3d6e7460,0x3dc52113,0x3e22f250,0x3e0f0c5f,0x3e00c518,0x3dbfd262,0x3d20cac0,0xbbb9cdc8,0xbcfb30cd,0xbd314015,0xbd2cc409, +0xbd3e3b56,0xbcda48ee,0xbc1e772d,0x3cc7ace6,0x3d4bcf3e,0x3d89c8ae,0x3d01eb0a,0x3ccdd8b4,0x3db0b11d,0x3d583bc5,0x3d65c228,0x3d1a963e,0x3c77deb2,0x3d309d9f,0x3cb3f3d4,0x3d30eb41,0x3cf34c01,0x3d4126f8,0x3d330a8f,0x3d6f4005,0x3d7e4558,0x3cfc1de0,0x3d09f2f1,0x3d7f3dac,0x3d817e6b, +0x3db7f2cc,0x3df15059,0x3e14383f,0x3ddeb923,0x3db08332,0x3d838f18,0x3d34c22f,0x3ce3deec,0x3c38171b,0x3c13736f,0x3b8bdba6,0xbc20f679,0x3bc13112,0x3cbd4ab6,0x3d5ba9e5,0x3d92c547,0x3dc6e88c,0x3de1b497,0x3d7745f3,0x3d30bd6b,0x3d98e1d2,0x3d295291,0x3d4c4680,0x3d597788,0x3cf8e5ef, +0x3d2414e2,0x3d78f01a,0x3d4a9ee6,0x3d3ea8a8,0x3d105fa3,0x3d483ec6,0x3d1f82e3,0x3cffac69,0x3d0da744,0x3d9f5722,0x3de0f2c7,0x3dd6d122,0x3ddc3b0c,0x3def4359,0x3dc9cef8,0x3db1c332,0x3d8d53cd,0x3d896c6d,0x3d79f591,0x3d5bc969,0x3d33aec1,0x3d0e5b04,0x3c9bd82a,0x3d3ab38b,0x3d6801cc, +0x3d972d2a,0x3d9f722e,0x3de3d49f,0x3dadaa39,0x3d95d47f,0x3d792293,0x3d8e14f8,0x3d7477d3,0x3d668979,0x3da32bf7,0x3d7bd277,0x3ddc73b1,0x3d44dcbe,0x3d9f737a,0x3d512775,0x3d776b0a,0x3d604a28,0x3d504f49,0x3d770554,0x3dad3d19,0x3d3c45f0,0x3dcb95d5,0x3dc74490,0x3db79725,0x3da2cd63, +0x3daf83f0,0x3daa03d3,0x3daf4180,0x3daee87d,0x3daedbd3,0x3db197c6,0x3db59822,0x3dbbccc8,0x3db6e1d3,0x3db1a901,0x3daf1105,0x3dc198c4,0x3dbb6f46,0x3dba3050,0x3dd1dd52,0x3d150e8e,0x3d84556a,0x3d75045e,0x3daa1eef,0x3d83d8ba,0x3d6699c5,0x3d82204b,0x3d82d345,0x3d8b99ab,0x3da645fe, +0x3dc5a447,0x3d90f294,0x3dccb0e7,0x3da80901,0x3d63ed68,0x3ddfe616,0x3d9e55d0,0x3db485c8,0x3da1bc59,0x3da014b8,0x3d9b43fc,0x3d9c6e09,0x3d96adca,0x3d94bf14,0x3d95b486,0x3d97d008,0x3d97b15d,0x3d95bb0b,0x3d92cf09,0x3d94cb3b,0x3d9941f6,0x3d9d2e20,0x3d9f36cb,0x3da1fa97,0x3d9d10fd, +0x3dbeb83c,0x3d9be003,0x3d70ce5b,0x3c54abc4,0x3d93e90b,0x3d6c03ab,0x3cb1d8a5,0x3c9f5611,0x3cbc987f,0x3cd091e1,0x3c978174,0x3cab33b8,0x3d0041e1,0x3d82386b,0x3d93bd28,0x3cdf2f49,0x3d67a7fe,0x3dee4ec6,0xbd9f2397,0xbd7f3c85,0xbd3aaf27,0xbd5199ac,0xbd53f65f,0xbd5b0123,0xbd44d3e6, +0xbd48dffe,0xbd5a7504,0xbd43e116,0xbd3d8a0f,0xbd36f088,0xbd3aee24,0xbd3bf5f2,0xbd416964,0xbd2ed4cd,0xbd298b7b,0xbd19e2b6,0xbd2397c5,0xbd28fbac,0xbd116e73,0xbd73f791,0xbd8cbc26,0xbda5df3f,0xbd4a29d9,0xbd7d7d35,0xbd955ce2,0xbd98d91e,0xbd96a8db,0xbd8fd72b,0xbd9e133e,0xbd9de323, +0xbda0a2fc,0xbd8e9e0b,0xbd51c956,0xbd9ad543,0xbd9617fa,0xbdc71ed5,0xbdab65c7,0xbdd18805,0xbdd6451e,0xbde3128f,0xbdc27e54,0xbdb9ef8e,0xbdd2ef80,0xbda37290,0xbda13f21,0xbd8fdca1,0xbd91f7ef,0xbd92c8a4,0xbd95dda2,0xbd66b410,0xbd53f18a,0xbd237544,0xbd3c28f7,0xbd3e36c2,0xbd14322b, +0xbd9b40a5,0xbd86d26c,0xbd8423fd,0xbd6202f9,0xbd0e80a7,0xbd235f7d,0xbd457ac1,0xbd6cf2e1,0xbd48be6f,0xbd6e9b63,0xbd0b5ba4,0xbd765d3f,0xbd809810,0xbd907674,0xbda6594a,0xbda351f7,0xbdc12599,0xbdd74e0e,0xbded2f21,0xbe04c376,0xbe102d26,0xbde5001e,0xbdd051db,0xbe03b868,0xbdbc4d20, +0xbdabd22f,0xbd9aed61,0xbda6a7f4,0xbda349c7,0xbd9e8f26,0xbd5f6ab8,0xbd2516b2,0xbca651ec,0xbd145ef1,0xbcf31cba,0xbd1b8bb3,0xbd976358,0xbd579c04,0xbd36ae4b,0xbcfc4584,0xbc7bd8ec,0x3ba2ad09,0xbc3cba34,0xbbdeb04c,0xbcb5fae7,0xbc5ca88e,0xbcf8c7a1,0xbd0d0713,0xbd279cb8,0xbd4845d7, +0xbd61b80f,0xbd837912,0xbdbb0e3a,0xbe092ade,0xbe442c22,0xbe4d7185,0xbe63512d,0xbe350e26,0xbe29fa3c,0xbe48e609,0xbe0747d7,0xbdff0f84,0xbdd0c9a9,0xbddf6448,0xbdd321a3,0xbddbc9b4,0xbd764222,0xbd0ffab5,0xbbf978b8,0xbcc0a2cd,0xbcd3b540,0xbcc5e2fb,0xbd4249a4,0xbcf9a0d7,0xbd07a01f, +0x3b5c8fd1,0x3c68482b,0x3d64cfd7,0x3c495082,0x3c489cad,0x3bdca23e,0x3c9793e0,0x3a5544f5,0xbc9269b8,0xbd043f2c,0xbd402830,0xbd850a91,0xbda8865d,0xbdb0be90,0xbe033c77,0xbe3d51b8,0xbe4b2e45,0xbe6120d0,0xbe22d76b,0xbe17f996,0xbe50a271,0xbe0be4ca,0xbde9bc79,0xbdddcf07,0xbde67e7c, +0xbde0c350,0xbdca4cf7,0xbd59d768,0xbcab7521,0x3c2f21ed,0xbc74dcd5,0xbc86b044,0xbc8cc905,0xbda7d20c,0xbd214672,0xbd1778fd,0xba454ac9,0x3cb85e4f,0x3d858700,0x3d44f735,0x3d341b68,0x3d183e4c,0x3d69477d,0x3d09f8b6,0xbc694fa1,0xbc74cd3a,0xbcbb6579,0xbd1440a0,0xbd606cb0,0x3ddcaf81, +0x3e07fa66,0x3de3457e,0x3d44954b,0xbd7e5dbd,0xbe15c077,0xbe395442,0xbdd1e0d7,0xbe12bfc4,0xbddfef9e,0xbd820860,0xbd667ba4,0xbd3b28e8,0xbd721e2d,0xbd44222e,0xbd1222c5,0xbc41176c,0xbccc8bd6,0xbc76b2a7,0xbc62c752,0xbd4f13b4,0xbba510dd,0xbd1c4772,0x3c516f7c,0x3c3f6f92,0x3d929b22, +0x3bed05d9,0x3c96ed34,0x3d9da04f,0x3d67f3d5,0x3d90ee48,0x3dbefbdc,0x3d4fbea4,0x3d45aa72,0x3d8d0927,0x3ddec1c8,0x3dc24f2d,0x3dcf4d21,0x3e211845,0x3e1088b3,0x3ce1ff58,0x3e2f9890,0x3e480242,0x3e012295,0x3d7106da,0xbc1d0048,0x3c85b14f,0xbbc6b0cc,0x3c6b034c,0x3ccef827,0x3d7a42f7, +0x3d46e7e6,0x3cdc99cb,0x3c2fa218,0x3cc5119a,0xbb91cc9b,0xbd5e723f,0xbc92edc0,0xbc6a232d,0x3c8efe79,0x3d1cf792,0x3db8fb2f,0x3d789f1b,0x3d7dfde9,0x3cf5b4e8,0x3dd801ea,0x3dd30dad,0x3d41fdf6,0x3dbe77c4,0x3dd4b468,0x3da763a4,0x3d8b23e3,0x3da58ffe,0x3dc682f6,0x3dc1772e,0x3d9a662b, +0xbd285bd0,0x3ce894ee,0x3d9e2ac6,0x3e32d5fd,0x3d57bc73,0x3c8b048a,0x3c5f2f7b,0x3c6be8b7,0xb80ce228,0x3bbe09c6,0x3c890830,0x3c70e3ba,0xbc2eefe1,0x3ca8e8bc,0x3d19aa81,0x3c93fee7,0x3c256fea,0xbc438a4b,0xbbe5cbce,0x3bfb4eeb,0x3c8b2c60,0x3e21cf94,0x3c45b149,0xbc116ba2,0x3bde7f1a, +0x3d90fdc6,0x3d9f8e9d,0x3e10f17d,0x3d677014,0x3d44b89e,0x3da710c5,0x3d9133a5,0x3d269d87,0x3d084407,0x3c407709,0xbd06b6d1,0xbe28104f,0xbdbe961b,0xbd9cc756,0x3d6dcb4b,0xbce16396,0xbd2c5651,0xbd8f8bc4,0xbcdf8a96,0xba3a5d82,0x3ca3d186,0x3d117b7c,0x3d106185,0x3c45dbf9,0x3d2b7845, +0x3d590486,0x3ceffc66,0x3cacf51d,0x3cc8f3cf,0x3c9e7c6a,0x3bebc4ea,0x3d22f84d,0x3e3cb88a,0x3be38574,0xbca5f3cb,0x3c959e4c,0x3c973728,0x3d4b8700,0x3e1fe50d,0x3caa39da,0xba85fbab,0x3cf0eb6e,0x3cf6cd4a,0x3d0df502,0x3bc8b319,0x3c8d56fa,0xbcb009d1,0xbe34b0c3,0xbdf522b3,0xbe0a4377, +0xbe11c724,0xbe42bb18,0xbe5b0648,0xbe5e2ffe,0xbe0f784a,0xbd816fde,0x3b64911e,0x3d193cfb,0x3d512014,0x3d2534db,0x3d6d4ded,0x3d86aa1b,0x3d97a189,0x3d866ced,0x3d4c1d7c,0x3d61c472,0x3d5d5a0d,0x3d809eb6,0x3e099d0b,0x3d457d18,0x3c8740f3,0x3d33f6b7,0x3b5bd906,0x3cb7c428,0x3da5babf, +0x3d461391,0x3d1e59aa,0x3ce5def4,0x3cbd05e0,0xbc36ed99,0xbcbf4416,0xbd754089,0xbddaefbc,0xbe439303,0xbded3726,0xbdb5a270,0xbda1d0e1,0xbdcf8f19,0xbe12be08,0xbe370d8e,0xbe3106bd,0xbde973bf,0xbd9bd6c5,0xbd032eb3,0x3c0a7090,0x3ccd2feb,0x3cf7be3c,0x3d05cc5b,0x3cc10340,0x3cde56c7, +0x3d3d2419,0x3d43d272,0x3d26b626,0x3cfba1ff,0x3d2a2a5f,0x3d633606,0x3d3b4e79,0x3d13a59c,0x3cff1333,0x3cc63d27,0x3cdfecb6,0x3c259fd0,0x3cd7812d,0x3c329404,0x3b87d410,0xbbd670fd,0xbcca47ea,0xbdbd7268,0xbe0528cc,0xbe17c528,0xbdb73912,0xbd92206f,0xbdb2e2e2,0xbd98c681,0xbd8df9e4, +0xbd7ab087,0xbd3be060,0xbd0b5dfe,0xbbbd2081,0x3cd0f903,0x3d068abc,0x3c278c19,0xbc1c595c,0xbc57f525,0x3ce04ca8,0x3d1ac847,0x3b9d526d,0x3cbbbe81,0x3ce4cb42,0x3d0e7108,0x3d2714d9,0x3cc00635,0x3d2bbc37,0x3cfa09a5,0x3d67d27d,0x3d47ea74,0x3d45be07,0x3d3651e3,0x3d14a6b0,0x3d146f03, +0x3c776438,0xbd5414ef,0xbd970048,0xbdb1e928,0xbdc51fd5,0xbdae3b61,0xbd82cfb6,0xbd4e1239,0xbd3cf0db,0xbd0619ed,0xbce02321,0xbca5ceb7,0xbca4cdba,0xbc05425e,0x3b2df63b,0x3c5b020a,0x3c724883,0xbb01a1f5,0xbc728e77,0xbcfeeba0,0xbd054d2b,0x3bd070f1,0x3c9fa2fd,0x3baa1b0f,0x3d00ac4f, +0x3d022824,0x3d063b12,0x3d37277a,0x3d0dc72c,0x3cd7a7a4,0x3ced87c9,0x3cc67803,0x3c80a7c8,0x3bfdfa69,0x3b9a0496,0xbb587412,0xbc9b638e,0xbcef7d2a,0xbd8202f4,0xbd3c1c77,0xbd1cdb08,0xbd21a4c3,0xbd2b7105,0xbd2b538b,0xbd1a409f,0xbd07e9f1,0xbcdaa9a1,0xbc8b4a24,0xbbf1f32f,0x3b2806c5, +0x3c6b4ea8,0xbb6c6e33,0xbbf801ad,0xbc368643,0xbc59ceec,0xbd22f31d,0xbcc6be8d,0xbb10dd8b,0x3bdeefe2,0x3c31e5dd,0x3cac5ccb,0x3d038236,0x3cfe3e60,0x3d0c7b18,0x3ba46703,0x3d1adc51,0x3be56121,0x3c8667f3,0x3bd3bba6,0xba422587,0xbc10fc98,0xbc731102,0xbd05eb3a,0x3d195289,0x3b2f72d6, +0xbc133854,0xbc96c51f,0xbcc4172d,0xbcd10d0b,0xbcf7d828,0xbd1bbfbe,0xbd15659e,0xbd0d232f,0xbd0fa5d2,0xbd0fbedd,0xbd105b80,0xbcf089fc,0xbcc63cc7,0xbcb769cc,0xbce26608,0xbcc9e394,0xbca4e0ad,0xbcab9f77,0x3caf8510,0x3c36aa6c,0x3c92faa2,0x3c1b5635,0x3cac669a,0x3cc3cbe6,0x3cdbb412, +0x3ce0dde9,0x3cda9d7e,0x3cf1fa05,0x3ca6787c,0x3d2e09ac,0x3cc1c658,0x3d03d6b1,0x3d2ce01b,0x3bf68f75,0xbc91a38d,0xbc993e8f,0xbc484acb,0xbc3cb684,0xbc4728dc,0xbc62cd5a,0xbc71aaf4,0xbc7f0364,0xbc6a67dd,0xbc6ab554,0xbc56e288,0xbc39c072,0xbc25b1d8,0xbc351369,0xbc612638,0xbc6d4766, +0xbc5a941b,0xbc6b2bff,0xbc678632,0xbccc9ebe,0xbc815537,0xbbc555bc,0x3c91308d,0xbbfaa766,0x3921d07b,0x3c91a38a,0x3ca66869,0x3c830866,0x3c71b6a3,0x3c894b74,0x3c5d05a0,0x3be188f3,0xbc401c24,0xbc7484ad,0x3b9a708a,0xbc096d90,0xbc853461,0x3c9655e6,0x3ca4c2fe,0x3c15506d,0x3c286846, +0x3c21106e,0x3c13d862,0x3bcdc9fc,0x3bb448eb,0x3b9d2f7c,0x3bde2055,0x3bcc4570,0x3b58aec4,0x3bbfe27b,0x3be8f088,0x3c01e50e,0x3c0432d4,0x3c099e9f,0x3c0845ff,0x3c1c2764,0x3c29fe9b,0x3bef8c6f,0x3cac16d5,0x3cd3cdab,0x3ce927c3,0x3caa7abd,0x3ce8d79b,0x3d07f979,0x3cfe294d,0x3ceff30b, +0x3ce1b54f,0x3cf8e5bd,0x3cf5327e,0x3d019c9a,0x3cdfe942,0x3c9fe700,0x3ce1f37e,0x3cccdfa8,0xba76d2d5,0xbbb023ed,0x3bb0f28f,0x3bc7327f,0x3be47760,0x3bffa3c6,0x3bea7d63,0x3b967061,0x3c7204cb,0x3c6c9864,0x3b8807b0,0x3c1e767c,0x3c0c0c6d,0x3be971f5,0x3bbaaad2,0x3c038343,0x3c0a3359, +0x3c4f5762,0x3c627606,0x3c11bf0b,0x3cefe9ff,0x3ccb4db5,0x3cceee76,0x3d06c168,0x3ced24a5,0x3d18a431,0x3cf5edd0,0x3cfa1f0f,0x3cd9e653,0x3cdd84a3,0x3c85d6c8,0x3d0076a0,0x3cf17861,0x3ccc66fd,0x3c9e3f20,0x3bb75e51,0x38fb5a06,0x3b992a02,0x3bcc455f,0x3c344ff0,0x3bdf4337,0xbbc0487e, +0xbc359ae6,0xbc8059ec,0x3a575ed6,0x3b3ea9e6,0xbc72c83b,0xbadd314a,0x3af2acc6,0x3b07c084,0x3b08e241,0x3b54475e,0x3bac211d,0x3c74ecea,0x3c53c96d,0x3c91fd74,0x3d10e952,0x3ce6dc93,0x3cb46df6,0x3d2d0fab,0x3d30bd47,0x3d2bd94a,0x3d13f8b0,0x3cd5e201,0x3d0a5a8e,0x3cb258a2,0x3cf68349, +0x3d1b023e,0x3d095349,0x3cf36a19,0x3ccbd27e,0x3c013b7b,0xbd678264,0xbd3d6337,0xbb3ba3c2,0xbc2be7ae,0xbb967773,0xbbc08d7f,0xbba3aace,0xbcbd92f2,0x3c797a77,0x3ca0916e,0xbc65fdff,0x3baceed6,0x3a74ef90,0xbb922f13,0xbc0268bb,0xbba5f927,0x3b25700b,0x3c3ab4b9,0x3c842e5d,0x3c8d03ce, +0x3cd8972b,0x3cad14a5,0x3cb4f450,0x3d342870,0x3d736674,0x3d6e5cef,0x3d47a1cc,0x3d055c06,0x3d06d978,0x3ceb799e,0x3cf59164,0x3d2e07dd,0x3d13e106,0x3cb34098,0x3bf17d68,0xbcbd2478,0xbd1169dd,0xbd0ca879,0x3aff8737,0x3c573768,0x3c2d78ea,0xbcd44cbb,0xbd361dbb,0xbd365515,0xbc829d5f, +0xbb065a84,0xbd1c20ab,0xbc2329d9,0xbba95e75,0xbb952606,0xbc3618ab,0xbbcc0ec8,0x3a890071,0x3c94cb57,0x3c87214e,0x3c915b76,0x3d26aaf2,0x3cf126a7,0x3c965099,0x3d371240,0x3d645abb,0x3d97eda3,0x3d4739d0,0x3d073264,0x3d06e5c0,0x3d260881,0x3d0d86c1,0x3d112327,0x3d1d039a,0x3d0c1bdc, +0x3cf5da87,0xbc0baa5d,0xbcf253ee,0xbcbb11f7,0xbd01f95f,0xbd9bf675,0xbdd74ad7,0xbe1dda84,0xbdee57db,0x3bcd76ff,0xbd613e68,0xbdac7705,0xbdf636ad,0xbdc45fb6,0xbd8efcfc,0xbd2db718,0xbc3fe9c0,0xbc073961,0xbd637712,0x3b5ea413,0x3cb4c7a3,0x3d5ceda6,0x3d48891e,0x3cb3bea6,0x3d3082ef, +0x3d2ae9af,0x3d4b5baf,0x3d98399f,0x3d4f8cd3,0x3d40ef60,0x3d729f0a,0x3d82f87d,0x3d7804d2,0x3cd99f0e,0xbc781a91,0xbd17759b,0xbcd697cc,0xbd78c405,0x3e1b67a6,0x3e028489,0x3e3c0190,0x3e27a06e,0x3e367b39,0xbd602ce4,0xbe0a19d5,0xbd53b0ab,0xbdceb4fa,0xbd9f130c,0xbe13aa54,0xbe02c6be, +0xbe02170d,0xbdd1126f,0xbd947891,0xbd478241,0xbc9c21ca,0xbc7f0959,0xbcaa99fa,0xbb1164e3,0x3d3952a5,0x3cec79d9,0x3c686234,0x3d09f3b6,0x3d229df7,0x3d82c65f,0x3d2f77f1,0x3d13e25c,0x3ce26258,0x3d93b55d,0x3d87419a,0x3daeda61,0x3da67827,0x3dc6d0e3,0x3e02ec7f,0x3e134fcd,0x3d8f6dde, +0x3d522702,0x3daae2e4,0x3dab46ca,0x3d356da8,0xbd171a82,0xbd36199a,0x3d251a93,0x3d17d749,0x3cad85b9,0xbd865655,0xbdb4d48b,0xbdc27568,0xbdf9b9bc,0xbe029cda,0xbdcd44a5,0xbe06144f,0xbdadb769,0xbda261a4,0xbd0a4845,0xb9e2e918,0x3ccdee02,0x3d1ffafc,0x3d29caaa,0x3d7b95a1,0x3e09ccb2, +0x3d392c49,0x3c9545c8,0x3ca556c1,0x3cf004d5,0x3d45b4ac,0x3e20750d,0x3d9c31a6,0x3d85939f,0x3ce4a965,0x3d537f5f,0xbc6d5991,0xbc8485fb,0x3c6b96af,0x3cf318aa,0x3c49e49b,0xbc5624b3,0xbc0363af,0x3d2e1c94,0x3d949200,0x3da6145f,0x3d5c2d0e,0x3cd84401,0xbc097f35,0xbd64e44b,0xbd80efce, +0xbd9f21ca,0xbdb7703f,0xbd79b983,0xbd334efb,0xbc4d4b0c,0x3bf73e9f,0x3c8f436b,0x3cd4ac2b,0x3d6993b7,0x3d6e5a20,0x3e0622b4,0x3d2920c1,0x3a595edb,0x3d2bf974,0x3bc79ac5,0x3d23a3c7,0x3e00955d,0x3d603500,0x3d273a0c,0xbc8799ff,0xbc82adb6,0x3cae06d5,0x3c8afe88,0x3cb1959f,0x3cd934a3, +0x3d8ffd98,0xbcc09f62,0xbcb60940,0x3d186b7e,0x3d9fba7a,0x3e0a4289,0x3e45796f,0x3e3b1087,0x3e20ae6b,0x3e014aca,0x3dcdf6af,0x3d9cccda,0x3d47fae2,0x3d408917,0x3d0e4819,0x3bb720f1,0x3b4e3469,0x3c65c7c9,0x3c964d90,0x3d2e389a,0x3d23308e,0x3d754f3a,0x3cc76ee8,0x3c80d0aa,0x3d7c3cff, +0x3cc1ca25,0x3d049dcb,0x3d3174cb,0x3d070ae1,0x3d36bf46,0x3d0a11c2,0x3d132578,0x3c6bd543,0x3ce18c4e,0x3d059070,0x3cfefa21,0x3caefe88,0xbcf14a01,0xbc306cf7,0x3da1994f,0x3d9b7d2b,0x3dc758cd,0x3de64a5b,0x3de2a62a,0x3d85c1c9,0x3d4db7ba,0x3d099303,0x3cc357f6,0xbccf6c12,0x3c6223d7, +0x3a20cabc,0xbc8f9944,0x3ad93686,0xbc2d059a,0xbbc844fa,0x3c8d47b0,0x3cfa75fc,0x3d469c4e,0x3d1a16a2,0x3ccc9668,0x3c01b149,0x3cae27f6,0x3d249187,0x3da83f6a,0x3d472c62,0x3cb37889,0x3cb8b7f3,0x3c45c97e,0x3d443cdf,0x3d400f23,0x3d697447,0x3d4a5563,0x3c3a9a72,0x3b96288b,0x3c3ac157, +0x3d894f69,0x3d58fbf3,0x3d81fb96,0x3d968829,0x3da4c30f,0x3d95177e,0x3d6ad919,0x3cd218c2,0x3c6613c9,0x3cd16ba5,0x3d0e0a28,0x3d10b739,0x3ca612a4,0x3bd97507,0x3cbc4ddf,0x3cbeea54,0x3cf75949,0x3d0f9db4,0x3d061cd3,0x3cea8bfe,0x3cc75060,0x3cdc88dd,0x3c9f3773,0x3ca022af,0x3ceb22f3, +0x3ca23369,0x3cd2e19d,0x3d03cc16,0x3d337f35,0x3d4d558f,0x3d4ff2a7,0x3d3e3674,0x3cfcbd58,0x3a87c8ec,0x3cd191e9,0x3d26f7f8,0x3d8fd468,0x3d3fd3c6,0x3d182fa8,0x3cc25333,0x3cdb9dec,0x3cb53d70,0x3c3f5862,0xbbf8440e,0xbc2ba534,0xbc1ae52e,0x3c2eed10,0x3cf0f857,0x3d0e6eb1,0x3c892107, +0x3c90d985,0x3d089c08,0x3cc8396a,0x3ce9842c,0x3cffc34f,0x3ccfd1ac,0x3ccc8f86,0x3cbb58e4,0x3cf695c5,0x3d227baf,0x3d5ce882,0x3d3f24ec,0x3d393ed8,0x3d56b291,0x3d453e32,0x3cf7fe7c,0x3d2dec36,0x3d0b6bff,0x3cf6ff98,0x3ce74280,0x3d3360f3,0x3d5c2caa,0x3d8c4f59,0x3d53166e,0x3d215555, +0x3c9ca214,0x3c8d0375,0x3c3aa06a,0x3c0eb5ab,0x3c88588e,0x3c633f00,0x3be0bac7,0x3c4193ef,0x3cfae8a9,0x3cd4bbe5,0x3c873c9f,0x3cbc360e,0x3cd59a92,0x3cb8f931,0x3ca80d1e,0x3cccc9fe,0x3cab5d4d,0x3ce5c648,0x3c9677e7,0x3d01cf8e,0x3d07b564,0x3d24ee6a,0x3d3ba82c,0x3d3934e5,0x3d4622dd, +0x3d290196,0x3c8bad92,0x3ce43cda,0x3d2cbbad,0x3d50158d,0x3d67df1a,0x3d8894b0,0x3d8fbc4d,0x3da6d4a7,0x3d95b7d7,0x3d8ba690,0x3d834c88,0x3d6342e7,0x3d33da38,0x3cf075cd,0x3ce08959,0x3d050a4f,0x3d2c2807,0x3d28b249,0x3d212aac,0x3d247991,0x3c80f54b,0x3cc9376d,0x3cba6b9b,0x3d003c10, +0x3ce49130,0x3cea45cc,0x3cda166f,0x3ca5b71e,0x3c9f629c,0x3c45df08,0x3b25b7aa,0xbac6af22,0x3a9aab48,0xbb0850fc,0x3b8061a9,0x3c9e3b17,0x3d4a6bc1,0x3d39762d,0x3d3ac6a4,0x3d3e8410,0x3d433d9a,0x3d4e27e7,0x3d531fc3,0x3d605895,0x3d517ccb,0x3d49aced,0x3d3f425f,0x3d3821ef,0x3d3a025e, +0x3d3c2f0c,0x3d467b47,0x3d40bca7,0x3d3b0db3,0x3d3aaccf,0x3d3a2a15,0x3d57ffc2,0x3d4a5c15,0x3d3c03fb,0x3d0b6677,0x3d432e1f,0x3d3579f8,0x3d1879dc,0x3d19122b,0x3d19df2d,0x3d1b4a9b,0x3d2301c7,0x3d26b16a,0x3d2a582b,0x3d499cbe,0x3d48eebd,0x3d2af0b3,0x3d42fbd5,0x3da9dd49,0xbd4a5036, +0xbd12f34e,0xbcea0f51,0xbcf69deb,0xbd04d71e,0xbd1f1166,0xbd1c8a39,0xbd255961,0xbd347185,0xbd0d2a55,0xbd0104e8,0xbd082266,0xbd042914,0xbcfcf019,0xbce10046,0xbce95256,0xbcef7217,0xbcecc060,0xbce5902f,0xbce2c0dc,0xbcd653b1,0xbd0da53a,0xbd161542,0xbd11eb21,0xbcea987e,0xbd0424b7, +0xbd0d5e54,0xbd09e176,0xbd0a0df2,0xbd090edd,0xbd11a15d,0xbd0c0bea,0xbd058cb3,0xbd0698cb,0xbcf2f5c5,0xbd03d544,0xbd1395c3,0xbd3bf116,0xbd2aa012,0xbd43c8c2,0xbd573aab,0xbd8fe796,0xbd876d86,0xbd8cc7c9,0xbda2efe3,0xbd5dd084,0xbd5b2420,0xbd5d4ee7,0xbd51030e,0xbd3e884b,0xbd0b24ee, +0xbd0b1b9d,0xbd12d489,0xbd0c6e8c,0xbcfd31f5,0xbcf1f1e6,0xbcde6823,0xbd2526a5,0xbd151b3f,0xbcf5f371,0xbcdd0e01,0xbcb52037,0xbcdf422b,0xbcc7f9a8,0xbcd2b5e1,0xbcdc5084,0xbd09a498,0xbcdcdd5e,0xbcbaf63b,0xbcca4177,0xbcdcb7e2,0xbcee0ac1,0xbd2ba46e,0xbd294a5e,0xbd321dc1,0xbd2b7877, +0xbd7204ea,0xbdbe13db,0xbdc44f1d,0xbdc97538,0xbdf6a8c2,0xbd927a01,0xbd68df83,0xbd83faa7,0xbd806103,0xbd5a58b9,0xbcdc43d3,0xbd0bafa5,0xbcfab9b0,0xbd071af8,0xbccd9e1d,0xbcaea775,0xbcbd77f4,0xbd14d27e,0xbcdf2991,0xbc884672,0xbbad5132,0x3ade758f,0xbc2ef779,0x3abedabb,0xbb800d77, +0xbc3da8bb,0xbc651030,0xbc5bda05,0x39be06f2,0xbba7af5b,0xbc0ed780,0xbbbc35eb,0xbd022cfe,0xbd266e4a,0xbd355f8f,0xbd7364c0,0xbd965426,0xbe05c299,0xbdf8dd55,0xbdffc2a4,0xbe1a0d75,0xbdc8f824,0xbdaa0e52,0xbdb1f4be,0xbda65d52,0xbd8a0c91,0xbcb847a8,0xbd02c9fc,0xbccb8400,0xbcdeec7b, +0xbc5ceeae,0xbc4e416c,0xbbf5f063,0xbca83ecf,0xbc4f2a45,0xbb801f6e,0x3ca4f627,0x3ccc7a21,0x3c6bde27,0x3cda1615,0x3cba2f19,0x3c85e8ac,0x3af4fee2,0x3a8f72a7,0x3c8d58e1,0x3ca7da34,0x3c6a0867,0x3bfe0456,0xbd12823d,0xbce2e467,0xbcca14f3,0xbd0deb47,0xbd7fe598,0xbe09c2b7,0xbe14f847, +0xbe262ef7,0xbe42db1e,0xbde03288,0xbda0b909,0xbdc0bf19,0xbdbb6e8f,0xbd8cdef0,0xbc9bb345,0xbce0dbb1,0xbcc4c8ec,0xbcea7fe6,0xbc19fdba,0xbb3c92e1,0x39e4ed5d,0xbc948d80,0xbbb7abec,0x3c04306d,0x3d21f6be,0x3d70aef3,0x3d4f58cc,0x3d666f4f,0x3d1bf8b5,0x3d1531c2,0x3cc1bf9b,0x3cae1759, +0x3d355677,0x3d3a153d,0x3ce621a8,0x3d0fe299,0xbba3e3d1,0xbe0dfb15,0xbd8fa0aa,0xbe0bf7e8,0xbe033af2,0xbd705297,0xbddf07f9,0xbddc663d,0xbe1623a0,0xbdde34b8,0xbda501ea,0xbd9420b2,0xbd8b0723,0xbd9c3911,0xbd71d44f,0xbd45b1d9,0xbc81d182,0x3c8f0286,0xbbd9538d,0xbcab128a,0xbcea13a9, +0xbcf5291e,0xbc7e46a0,0xbb52aea0,0x3d063dd3,0x3cfa2bc9,0x3af636fc,0x3d571830,0x3d77ab98,0x3c963def,0x3d78a634,0x3d242d35,0xbd0e914e,0xba4e6d68,0xbc675692,0xbd4fd798,0xbe14f830,0x3e0253de,0x3e01581b,0x3d92953a,0x3ca31774,0xbd5fee85,0xbe0325bb,0xbe4b6e06,0xbe7691c0,0xbda75f81, +0xbbed8cfd,0xbc9aee44,0x3c398ba9,0x3c85273d,0x3d236f24,0x3ab4fe77,0xbc8f849a,0xbd3b053d,0xbccf93a2,0xbc10b908,0xbd1f56c4,0xbd6ed916,0xbce44a19,0xbb8ea34e,0x3d08e2d4,0x3d5a9afe,0x3d7de2e8,0x3d044fae,0x3c66ca16,0x3c3f4d34,0x3cbf4eae,0x3d00fad5,0x3dc3b493,0x3cb06a90,0x3c50d230, +0x3d6aa62a,0x3ddddda9,0x3c15f1bf,0x3d53c5e0,0x3d3cbfa2,0x3d77ce85,0x3e46d47d,0x3d91f0b8,0x3d759b94,0x3ac0183b,0x3c6128ad,0x3b7f208f,0xbccc765b,0xbd213132,0xbd528992,0xbcf98d3b,0xbd1cd5da,0xbcfa03db,0xbcc61271,0xbd001ff4,0xbd29ffca,0xbd0f5d54,0xbd16900f,0xbcec3535,0xbd247b6e, +0x3d4a8191,0x3d34c953,0xbc1ebe07,0x3c81f01f,0xbc72c000,0x3bca0236,0xbc5635c9,0x3c98095a,0x3db6cfc4,0x3db6a73f,0x3dcf49ce,0x3cf26b43,0x3c85ed8e,0xbcc6c17d,0x3bca471e,0x3d0aeec9,0x3d9b0ba7,0x3e3d6e76,0x3e121c8f,0x3e36ecf0,0x3e0dbddd,0x3e23be05,0x3df6227e,0x3d629786,0x3cb40506, +0xbc361475,0xbca768bd,0xbd198166,0xbd129d5a,0xbc876657,0xbd33019f,0xbd47baa4,0xbcecf58c,0xbd0e7953,0xbc19f395,0xbd117134,0x3d95817a,0x3d8e5805,0xbd14a694,0x3cc51b35,0x3bf66db9,0x3cc89faa,0xba660589,0x3d0799c2,0x3d2d1560,0x3dbc1334,0x3dc1bb60,0x3c978e4a,0xbab4d6d6,0x3cd9e03c, +0x3cbf367f,0x3b8d7cbd,0xbc8f298b,0xbd2787d1,0xbd3f2de6,0xbcf8677b,0x3d625888,0x3e013ad3,0x3e170fc1,0x3d975f57,0x3d8f39c2,0x3ceed10a,0x3c15e579,0xbd2fc359,0xbd49b434,0xbce1bad8,0xbd14891d,0xbcf6f987,0xbc81b0f7,0xbc886990,0xbb7b26ed,0x3bc6130c,0x3d633d93,0x3d607433,0x3ca643eb, +0x3d21597f,0x3d0793e5,0x3d1223ea,0x3d680a05,0x3d7a14da,0x3c9aacd6,0x3ca47f33,0x3c82ac4e,0x3c83d4ac,0x3cd09ab0,0x3b1fa69a,0x3c14e16b,0x3cb0e440,0x3cdca057,0x3d19a0ca,0x3af72913,0x3b5de750,0xbc18aed4,0x3bcc96cb,0x3ad102b7,0xbccd862a,0x3cca8ada,0x3d0bbef2,0x3d88a197,0x3d318e4a, +0x3ced57a9,0x3cee1059,0xbc0d085a,0xbc94c179,0xbc1e079e,0xbb623859,0x3c2086d7,0x3c0735e4,0x3bc14c05,0x3bfb9445,0x3cab68d3,0x3bfa3365,0x3b1e3588,0x3caca296,0x3bca988c,0x3c80147e,0x3ce6b130,0x3d5e236d,0x3d6c7f73,0x3c9dddd9,0x3c5a67b4,0x3b17706d,0x3b6a62f1,0x3b4d38db,0xbc0f3518, +0xbc89c850,0xbd5987e2,0xbd69b745,0xbd1dba07,0x3c833cf0,0x3ced8cd4,0xbc3d0405,0xbc951953,0xbbfdbbd4,0x3c38dff4,0x3ccbcd0f,0x3c9f9c78,0xbc027531,0xbbcf7fa7,0xbc15cc94,0xbc12534f,0x3c097f73,0xbb162876,0x3b48a5bf,0x3c217cb3,0x3c760abd,0x3d16ea97,0x3c9c275f,0x3c8e1dff,0x3be7c289, +0x3c3cae9b,0x3c816b5e,0x3c593482,0x3c26f7f8,0x3b78ba30,0xbc0f3044,0x3b7e0435,0x3b91a484,0x3c021b37,0xb9a9b00f,0xbbc6dfc0,0xbc013bce,0xbcd91f8e,0xbcf17637,0xbd21e3e3,0xbc59a7ea,0xbbfdc3dc,0xbb23978e,0xbc3cb638,0xbc962bdd,0xbc5ab55b,0x3b7ef99f,0x3bb416a2,0x3b6ac0a0,0x3b32b36e, +0xbb8ed533,0xbbd5ad71,0x3c5c8d68,0x3c487d59,0x3b9c767c,0x3bf0c091,0x3be7c8fe,0x3c11cca1,0x3c9b1065,0x3cb40f9b,0x3cbf556a,0x3c9f272f,0x3c73f265,0x3c846ae9,0x3c53c113,0x3c70e4f7,0x3c13a9b4,0x3c08fa24,0x3bd159e3,0x3acaef7c,0xbbdfabe6,0xbc5b8546,0xbcb91494,0xbc9f23b9,0xbcb8f574, +0xbcf8d2f6,0xbc83072f,0x3aeaa3e1,0x3ce3c0cf,0x3c682106,0x3bb788c7,0xbb9e89cd,0xbb8a69a8,0xb93b92d5,0x3c87bbfc,0x3c80d048,0x3c2de6ab,0x3cac1826,0x3cb3501e,0x3c7abff1,0x3c49703d,0x3c2bebf4,0x3bdb0cbe,0xbb9c0276,0x3be18f7d,0x3bb922b7,0x3ccbd4b8,0x3c2a43cd,0x3c3c915d,0xb93ea46e, +0xba7ed815,0x3bc0ec82,0x3b9aca14,0x3b5e4416,0xbc529562,0xbcbe2e34,0xbca05eec,0xbc7902ac,0xbc34e2e2,0xbc79e4f2,0xbc6bff8a,0xbc7af204,0xbbd646a1,0xbc01af69,0xbbf6cba6,0x3bac63d7,0x3cbf839e,0x3d193c22,0x3d1c0c80,0x3ce84009,0x3c9cf139,0x3c8c235d,0x3c52db50,0x3c175ff2,0x3c9e3624, +0x3c17a8b6,0x3baccc88,0xbb6bbeda,0xbb79896a,0xbbc12c75,0xbc1e787f,0xbc6d11f6,0xbc97afcb,0xbc94157b,0xbc653f45,0xbc4fc1a2,0xbc2ebf66,0xbc687f8a,0xbc605ec8,0xbcaad6b7,0xbc9e4bbe,0xbcce1469,0xbccdbc15,0xbce08b45,0xbce66484,0xbceb15a0,0xbce85a80,0xbcf91f9a,0xbce52fc4,0xbcbe4a17, +0xbc9d751a,0xbc9d2bb1,0xbcb7ff21,0xbcbdaa70,0xbcd0d63b,0xbcb7cba0,0xbcaa4b65,0xbca78136,0xbca035c2,0xbcb994a3,0xbc85ab36,0xbc1581da,0x3b8f56b9,0xbc9be1eb,0xbc53af25,0xbad1abce,0xba634176,0xb9ac1e9d,0x38b84fc7,0xb9ceca78,0xbb3cd14a,0xbb8ab8fd,0xbc65789d,0xbc9fceaf,0xba8194f4, +0xbc3bbe0a,0xbd3e339e,0x3c63208a,0x3c143f0a,0x3c0410f7,0x3c085ece,0x3c10b348,0x3c0796f4,0x3bee86c0,0x3becc826,0x3bf95017,0x3b97f3f6,0x3bb07280,0x3c412310,0x3c1d4b5f,0x3c05c111,0x3bcecc4f,0x3bd6ed34,0x3bddd327,0x3bc982fb,0x3bf7da86,0x3bfc9cf1,0x3bcb0486,0x3c269c0a,0x3c370364, +0x3c050336,0x3c4a7602,0x3c458f9b,0x3bdb4460,0x3bfb7027,0x3be3963a,0x3bc08154,0x3be35430,0x3befac7b,0x3c2361cd,0x3c1d274e,0x3bfb672b,0x3bac86e6,0x3bc3503d,0xbbf3a805,0x3bcd2dc2,0x3c886f91,0x3cb4af2f,0x3cc6b0dc,0x3cc6c81a,0x3c9790b8,0x3ca38d22,0x3c025e91,0x3c2acaea,0x3cb5b259, +0x3c934b24,0x3c85bfa2,0x3c26c611,0x3c1e4dc4,0x3bfb176d,0x3b8993e3,0x3c0cd5f9,0x3c0d85e6,0x3b223aaa,0x3c0f6b18,0x3c355026,0x3c868b80,0x3c8837e9,0x3c66666e,0x3c098539,0x3c6dd303,0x3c706945,0x3c0d3865,0x3c0f1b78,0x3c0fdd1f,0x3c835e5e,0x3c286aca,0x3bf5289f,0x3c116731,0xbaff8f29, +0xbc3128bc,0x3bb52b35,0x3c4ba7f9,0x3c9d4cf2,0x3ca8c40e,0x3cad347a,0x3c9076a7,0x3ca7b156,0xbc01b034,0xbb43fe36,0x3d04217c,0x3cb802af,0x3c8e7dad,0x3b4ae1df,0x3b2fc601,0x3ae6ed80,0xbb2aa773,0x3bbb5047,0x3bc2673f,0xbacfa4c2,0x3c37315c,0x3c51aaef,0x3cbf5a3a,0x3cb8e587,0x3caa61ad, +0x3c1b84c8,0x3c85e011,0x3c4c60e8,0x3bf942d4,0x3be95254,0x3c284d0d,0x3cc52983,0x3bfaa865,0x39d9b63f,0xbaa5c866,0xbc37bbc7,0xbd119f85,0xbbf621c4,0x3cbb013d,0x3d0fb469,0x3d3b2c30,0x3d60c827,0x3d207d21,0x3d4d7c6b,0xbb333145,0x3bed7bda,0x3d401bff,0x3d08cdbf,0x3cf69850,0x3c07a841, +0x3bdb175d,0xba3616ee,0xbc3175ab,0x3b4dd1d0,0x3b2223e8,0xbc30ea35,0x3b32f31d,0x3c1d9300,0x3cdd5272,0x3cec0ecd,0x3ce455fb,0x3b8a9eb4,0x3cf81774,0x3ccc43c5,0x3c29cac0,0x3bdd647d,0x3bfcb516,0x3cfbef7a,0x3c15ac6f,0x3a48e33a,0x3b639d71,0xbccf5fad,0xbd0af639,0xbc19baa1,0x3c1d94fd, +0x3c806603,0x3ca1c524,0x3ceb6220,0x3cdf0232,0x3d0c78a4,0xbcb91e93,0xbcb4e07a,0x3d710346,0x3d18fe04,0x3cc6c7b2,0xbbddda69,0xbbfbd3fe,0xbc23a633,0xbc63cd81,0xb9910443,0x39884223,0xbc69c971,0x3c5660da,0x3c69f0da,0x3cfde478,0x3d1f86f1,0x3d1efabf,0x3c88e570,0x3d3313d4,0x3d1d72ae, +0x3c9c484b,0x3c7950a2,0x3c7cb96b,0x3d29c841,0x3c5ae1d2,0xbc2c9c20,0xbb6fbdc3,0xbd27110d,0xbda43e6d,0xbd9c5326,0xbded54ad,0xbda81913,0xbcca4756,0x3d10af0c,0x3c8c3fb9,0xbd8c6ecc,0xbd130292,0xbd0fa704,0x3c174703,0xba2a5044,0x3c53d824,0x3c74873c,0xbc61e8e9,0xbd0cc8cc,0xbcfb3aaa, +0xbcb61706,0xbcad1937,0xbccd70d4,0xbc5f8985,0xbc4a593c,0xbb9b2e99,0x3c7637b3,0x3d06b8eb,0x3c7370f3,0x3d18523e,0x3d277e34,0x3c6b6ebf,0x3d3056ce,0x3c4e5deb,0xbce84840,0xbc870b52,0xbc95badc,0xbd0943cb,0xbd9c92c6,0xbb7663eb,0xbca4dc0d,0xbdffe404,0xbe0260f7,0xbe37b65b,0xbdc3364a, +0xbdc1f9b7,0xbdd45082,0xbe08043b,0xbdff2972,0xbd64e97a,0xbdaead5f,0xbdb8faee,0xbdc5bc5c,0xbdbf890e,0xbd754d97,0xbb861cb4,0xbc88205a,0xbc47d2e4,0x3c7d79ee,0x3cab0104,0x3cbbe22e,0x3ce70b00,0x3d298b4d,0x3d328f41,0x3cf2c842,0x3cc1984b,0x3bcf68da,0x3c5dacc3,0xb9f1af23,0x3c822d8e, +0x3d82409c,0x3cb16248,0xbc5b07a3,0xbd8c9758,0xbb8153de,0x3d183ed7,0x3d8784cf,0x3dc21e62,0x3d90eae0,0x3cf9d95a,0x3da746f4,0x3ce6ed64,0xbe171327,0xbdc192ab,0xbdbb26f0,0xbd06349c,0xbd5e2590,0xbd3c1088,0xbd05a395,0xbd424656,0xbd42028f,0xbc3e1f4f,0xbcf1d83f,0xbcfa3b63,0xbc863a47, +0xbcb0e104,0x3bbf9a47,0x3c2b93d2,0x3d9839dc,0x3d84231b,0xbc3c8702,0x3cace3f7,0xbac599db,0x3c31c874,0xbb847bc3,0x3c99d3d2,0xbbbf08f6,0x3dadc27a,0x3dd1e4da,0x3d97be8c,0x3d4513a5,0x3d6560d6,0x3db1916d,0x3e14eb2c,0x3e118e98,0x3dfecb25,0x3e0f763b,0x3da60804,0xbddb8ffc,0xbd34e584, +0xbd69b938,0xbd36d47b,0xbdb83cc0,0xbdcc17bc,0xbd9b2a5c,0xbda4fee8,0xbd914fee,0xbd5741c5,0xbd3e8fb5,0xbd2f5348,0xbd0c650b,0xbcc203dc,0xbaa8bd2d,0x3acd6c46,0x3d989f03,0x3d86185b,0xbd157abb,0x3cc89a7c,0x3c7c8645,0x3c047afb,0x3c88726f,0x3d1cbfcf,0x39dc7ae5,0x3db043ae,0x3dd2dfd4, +0x3dbe3991,0x3d83666c,0x3b170b76,0xbc0b3be4,0xbc25633e,0x3cdb409f,0x3ca1f3d6,0x3db6f1e4,0x3dc35f2c,0x3d219615,0x3d9da148,0x3d640317,0x3c4d6e53,0xbd691284,0xbddd1a04,0xbe0bd927,0xbe05a272,0xbdeaf1a7,0xbdb72a52,0xbd98070e,0xbd526eab,0xbd03ef1c,0xbc28e61e,0x3c29f07a,0x3b836784, +0x3d033bf5,0x3d045e61,0xbb8aa210,0x3cd42755,0x3ce7f95a,0x3c0495e1,0x3d2a89bd,0x3d655328,0x3d572922,0x3d55fd1e,0x3d0ae330,0xbbd2b092,0xba972b63,0x3d1d6f2a,0x3d2b1e82,0x3d3fcafd,0x3d31807c,0x3daa3a1a,0x3d65a625,0x3c35e618,0xbd94863e,0x3c2a89f8,0x3d74a284,0x3df7a310,0x3de11e14, +0x3d9a3b5b,0x3d8af214,0x3d8946e9,0x3d2b1d62,0x3d0a9afc,0x3d341666,0x3d150c04,0x3d1b93dd,0x3cd2919c,0x3cc8eb82,0x3cca60eb,0x3d56062a,0x3d5f27cb,0x3cce8e04,0x3c292ad5,0x3b7354a0,0x3a9466ca,0x3c195c3a,0x3c4e7273,0x3c05eeaa,0x3d288552,0x3d496162,0x3d40cfc4,0x3d30840f,0x3ce53e8c, +0x3ce64cb8,0x3d3c9874,0x3d7dec80,0x3d795bff,0x3d4d1e9d,0x3cee1d0b,0xbc111d96,0xbc73c372,0xbc269584,0x3d1744bc,0x3c019c97,0xbbf4a576,0xbd40b968,0xbd81a468,0xbd4f3974,0xbc20b618,0xbb899962,0x3b9c4533,0x38dace24,0xbc4b60cf,0x3c0dda72,0x3bd91369,0x3c99aec9,0x3cb3da4b,0x3c7447e7, +0x3ceb2cb6,0x3ccb5d6a,0x3cccf291,0x3d0af65f,0x3d39e1a6,0x3d3457b2,0x3d2bd602,0x3d0a4830,0x3ccaa18e,0x3cb0f0bd,0x3d149a1d,0x3d37d33e,0x3d52ccae,0x3d5e2421,0x3d5fc4b4,0x3d055c8f,0x3c338d8a,0xbc56e036,0xbc44c730,0xb9810a2e,0x3cc3126b,0x3cc6a721,0x3cc40fbd,0x3c9a24c2,0x3c23f657, +0x3c25145c,0x3c84ebac,0x3c7a9cb5,0x3cb5f81b,0x3caa8068,0x3bd73b07,0x3c360b92,0x3ce19609,0x3cb6e54b,0x3cccc458,0x3ccbc1cf,0x3ca4f9e4,0x3cb9f1a0,0x3ccdfee0,0x3cd2f4cc,0x3cc2ae01,0x3caa8a7d,0x3cf4114d,0x3ce77c49,0x3cd606fd,0x3ce6f70f,0x3cc2fdb2,0x3d051830,0x3cc2d608,0x3c9034c1, +0x3c80f0fe,0x3bbce6de,0x3b49e9c3,0xbba92531,0x3b952d16,0x3a28bc30,0xbb45f086,0x3b9fb73f,0x3c830fd4,0x3cbd22e0,0x3cc4e7d8,0x3cbb54f3,0x3c4324d6,0x3c5d0665,0x3c9c1779,0x3c4f53c8,0x3c83a2a3,0x3ca1a310,0x3cceebae,0x3cc1e279,0x3cb90072,0x3cd7f7a7,0x3cb22ee3,0x3cf7f10d,0x3c899951, +0x3cc691b8,0x3c9a2b61,0x3cc09e4d,0x3c99cb26,0x3c84a7b9,0x3c93789b,0x3cd1ceeb,0x3b5e3ca8,0x3c568ecf,0x3c124d29,0x3bb7150d,0x3aac7d28,0xbbb2a6aa,0xbc316bdf,0xbc932706,0xbca4d185,0xbc6baf41,0xbc16a932,0xbc2081af,0xbc5f9860,0xbc47af6b,0xbc50452a,0xbbfa8914,0x39d23e44,0x3b15f478, +0x3b62a912,0x3c036f22,0x3b0ea6da,0x3bbc8c31,0x3b5b8b11,0x3bebabf3,0x3be185ff,0x3ba10206,0x3c2cfe26,0x3c5db240,0x3c884065,0x3cc299de,0x3cfc579a,0x3ce5f98d,0x3cf73ac4,0x3ccf8dbe,0x3c79c76e,0x3caa4980,0x3bf5ec83,0x3c67caf0,0x3c299662,0x3c193859,0x3c11b94c,0x3c0e877b,0x3c12b7be, +0x3c16c978,0x3c2d164b,0x3c0868bf,0x3bc962ff,0x3bdd6544,0x3c0dbb5d,0x3c18bba1,0x3c2c3c34,0x3c1f8565,0x3c0c4d99,0x3c104917,0x3c1a50db,0x3c403ede,0x3bd05be0,0x3a5229d3,0xbc06158e,0x3c159b10,0x3b180582,0xbc128cef,0xbc1223b9,0xbbfb3eb7,0xbbd26d5e,0xbc07cdca,0xbc02aa1a,0xbba5ed29, +0x3b47dce9,0x3c088cf5,0xbc07f569,0x3780ea08,0x3c8133de,0xbc5284b8,0xbc7351e3,0xbc682d7d,0xbc63b670,0xbc48aea6,0xbc221e07,0xbc089a92,0xbc0c0b5c,0xbc23cd48,0xbc536438,0xbc614261,0xbc2b2c77,0xbc1b5f0c,0xbc111171,0xbc15b9ec,0xbc118b51,0xbc0a67c2,0xbbc449a4,0xbbf3b25d,0xbbf2711c, +0xbba32d9b,0xbbee7e26,0xbbeb9247,0xbbb0950a,0xbbc64caf,0xbbd83a02,0xbbe0bb74,0xbc039ec7,0xbc099640,0xbc0644e9,0xbc0a5491,0xbc017e0f,0xbbcb7132,0xbc10832c,0xbc20578f,0xbc4856f0,0xbc561165,0xbbfa50ed,0xbc1ae7e8,0xbc912a14,0xbc9034b7,0xbc5834d8,0xbc520fff,0xbc735e97,0xbc9fd5b0, +0xbcdb6680,0xbcd60f60,0xbc74e2f8,0xbc541dd6,0xbc4771bd,0xbc71cb19,0xbc59afec,0xbc3e7ae2,0xbb65f7ba,0xbc115dda,0xbbe323f5,0x3aa39717,0xbb2ea1fe,0x3a1ab299,0x3b579b0d,0xba9690df,0xbaf837ba,0xbae45d9a,0xbbb6a176,0xbbecb0c2,0xbc046a9e,0xbc13e519,0xbb81dcf2,0x3b243f6d,0xbb957c08, +0xbc166aab,0xbc61b649,0xbc3695af,0xbcdb9370,0xbd082402,0xbd16133d,0xbd02de18,0xbc9e8be7,0xbc6c057e,0xbc41258e,0xbcaf4b92,0xbd2ab6e9,0xbd326fcc,0xbcd652c2,0xbc9f39ab,0xbc6dc9f8,0xbc858222,0xbc6e70e2,0xbc4914d6,0x3b44b423,0xbc075d74,0xbb3a70ad,0x3b78cdf7,0xba6ad211,0x3c0fdea7, +0x3c4ae8cf,0x3c25f390,0x3bfabfef,0x3c31ccd3,0xba6c63c2,0xbbc78f1d,0xbb9cbb89,0xbba7ea9f,0xbadc8b9b,0x3c2c6906,0xb91fe42d,0xbc145b58,0xbcd8e883,0xbcd2679b,0xbc0bc85a,0xbc0a969b,0xbd11d9fd,0xbd066aaa,0xbc8db846,0xbca27b65,0xbcc62c22,0xbd00943a,0xbd78856f,0xbd748e91,0xbcde5f77, +0xbccc99e0,0xbc80b2cd,0xbcb89dae,0xbc9446fb,0xbc4c3858,0x3c272820,0xbbbd2de4,0x3a147465,0x3c602fbf,0x3c2bfe6a,0x3cc61a29,0x3cf62f45,0x3cb12a68,0x3c828657,0x3cb33a1c,0x3c4f7943,0x3c20108d,0x3b40c9f6,0x3a0b34ba,0x3be19de1,0x3cfff10a,0x3bffb64b,0xbbbfbad7,0xbc9d22d4,0xbc8e5426, +0xbd4e32e7,0xbd464bc6,0xbd6e00bb,0xbd4c8c8c,0xbcd74a3e,0xbc332661,0xbc2a7c21,0xbcea5b22,0xbd920808,0xbd9f4ded,0xbd368e23,0xbcf398a6,0xbc986102,0xbc8976a6,0xbc85cdc0,0xbc47b24e,0x3c684236,0xbbd9835d,0x3b437214,0x3c7974ce,0xbb4fae56,0x3c8ba72d,0x3d02ad5f,0x3cfedd63,0x3cd2d854, +0x3cb07c1d,0x3cbff635,0x3cdbfd9a,0x3c1bf843,0x3c08d5a0,0x3bf86e4f,0x3d10ef19,0x3c1f7d7d,0xbbda2646,0xbd316964,0xbd3682a0,0x3c7ee442,0xbce1a0f4,0xbd978467,0xbda7b551,0xbe01b1dc,0xbd8c14a2,0xbd56c298,0xbcf881ca,0xbd127323,0xbd5c43e4,0xbdc6d1d3,0xbd77a8c7,0xbd689e84,0xbd57ebc4, +0xbd226c85,0xbccd129f,0x3b8c2c3f,0xbc06268b,0xbc35b437,0xbcc7c5b4,0xbc3611ef,0x3c86de06,0x3d0748d5,0x3c83b3fe,0x3c7ed6ac,0x3d762671,0x3cf3e977,0x3c7fa5db,0x3c30aa7e,0x3ca71985,0x3b2a964e,0x3bd26f84,0xbcf2b06e,0xbcfaa036,0xbc0cf110,0x3c3b4681,0xbdd0dd71,0xbdc93c5b,0xbe13a9e6, +0xbdd2b609,0xbd4296db,0x3c826d28,0x3d215587,0x3d03807b,0xbd835f96,0xbdb01244,0xbd4ba9e6,0xbc0faaf5,0x3cb25798,0x3b183d26,0x3c97a79d,0x39fbd13b,0xbc66bc6b,0xbc162617,0xbbd84dec,0xbc766af7,0xbc939068,0xba28c85b,0x3c6c0fd1,0x3d387c57,0x3d4e739b,0xbbc572a5,0x3b7bc764,0x3b89a6bf, +0x3c40d079,0xbc075b52,0xbaebd916,0xbc14111b,0x3d15c845,0x3ca3b439,0xbd1d2703,0xbd7df63f,0x3da3dc2b,0x3dd032b2,0x3db6250a,0x3d12d71c,0x3c1bda54,0xbd32a372,0xbdad2e6a,0xbca0cce6,0xbe053e88,0xbe03f1b4,0xbd5aafb2,0xbcf0a57e,0xbca6f480,0xbd7a8f1b,0xbd39a5e5,0xbd23450a,0xbcd47be0, +0xbc2db8bf,0xbb1d249d,0xbc4481d6,0xbc477f16,0xbb664e3b,0x3cdb34c2,0x3d04d07e,0x3ca41efc,0xbc63adbf,0x3b5f07de,0xbbb31f72,0x3b5df97f,0xb92366e9,0x3c794247,0xbced9a05,0x3d3ac1fe,0x3d831831,0x3df300cc,0x3d9a0836,0x3e0a7f90,0x3e173804,0x3de00e7f,0x3da49d21,0x3d878e5f,0x3c610aeb, +0xbb742201,0x3d300714,0xbda63aa9,0xbdbdceb3,0xbcf6615d,0xbcd5c664,0xbca16a2d,0xbd95416b,0xbd7448db,0xbd818ecb,0xbd4007c7,0xbd049210,0xbc8e2b5c,0xbca2d279,0xbc338365,0x3c19bf6c,0x3d6e63bc,0x3ca0cbf5,0x3c16090d,0x3c05c4ff,0x3ba7dd0d,0x3c0d0705,0x3bb60188,0x3b485071,0x3c9838a9, +0x3caf261e,0x3d666279,0x3d9f5f22,0x3e066eed,0x3dfcb317,0xbc880cae,0xbc6a0f86,0xbcdb337a,0x3cbe0cb0,0x3dce6676,0x3e126db2,0x3e12bfd9,0x3dad1f7c,0xbd32a3e0,0xbdcab91a,0xbd58e7ee,0xbd821498,0xbd19d55b,0xbd3f57ae,0xbd3d11dd,0xbd53e5e8,0xbd3d8afc,0xbd410d3a,0xbd038107,0xbc2ffdad, +0xbc0a3fb5,0x3c02f521,0x3d34c023,0x3caf31af,0x3ca814af,0x3bb824d5,0x3c02a3bf,0x3c1fa0aa,0x3c8f34b2,0x3b616115,0x3c8c6437,0x3d66f127,0x3d85eba1,0x3d853bcb,0x3d0d13e9,0x3c355967,0x3d62e6a1,0x3d327e62,0x3d1e800e,0x3924662f,0xbcad8af3,0xbbeb7ae6,0x3bed6a41,0x3da60fd2,0x3d10cd35, +0x3d613c61,0x3daeeba7,0x3d7fc572,0x3ced6a29,0xbc226a58,0xbc815338,0xbc811627,0x3b88b17f,0x3bba5bc2,0x3bc2e6e0,0x3c39d739,0x3c7fb6eb,0x3c934de8,0x3ce9e1b3,0x3d4e8052,0x3d45aba1,0x3ce34373,0x3d16abf6,0x3d1839ae,0x3d7262c3,0x3d1ee374,0x3ce4b0c2,0x3c990e40,0x3cede074,0x3d1be0f5, +0x3d46eabd,0x3d453702,0xbba0ea9d,0xbc9f390b,0xbd035337,0xbcb175ed,0x3ba8fe7c,0x3cb4cde8,0x3ce1af38,0x3cbe8c0e,0xbc728e9c,0xbccd0780,0xbc3952d1,0x3cc1c4c3,0x3d5f8ab1,0x3d87130c,0x3d87a56c,0x3d57270b,0x3d03cb63,0x3cd38894,0x3cad10ec,0x3cbee334,0x3ced459b,0x3d06c05a,0x3d31c08b, +0x3ccf1407,0x3cab258a,0x3c958d80,0x3cb3a1f0,0x3d072ae5,0x3d202899,0x3d2d2de5,0x3d31fb8f,0x3d18da8d,0x3d42790a,0x3d274703,0x3cf0d156,0x3bddf163,0x3c27ed18,0x3ac801df,0x3b62d7ee,0x3bf5b11f,0x3c8bd5db,0x3c880092,0x3c86f166,0x3ca5ae15,0x3c152b47,0x3bf1e1f7,0x38ab2d53,0x3cb223b8, +0x3d05d260,0x3d3722b9,0x3d47828a,0x3d3cc44d,0x3d3c2979,0x3d23a4e0,0x3d0a4bf4,0x3d02c126,0x3d1a79b1,0x3ce2b426,0x3c71c0b5,0x3cd6dfe1,0x3ce51282,0x3d1a183f,0x3d0a8512,0x3cf41e72,0x3cdd2c76,0x3ce89734,0x3cdb8f8a,0x3cd44b36,0x3cc87b54,0x3cb65e50,0x3c7fdac4,0x3c72d117,0x3c813725, +0x3c33f1b0,0x3c98ff0c,0x3cd66a4f,0x3d045268,0x3cef32f4,0x3cde2dbe,0x3ccd19b1,0x3c8c60d0,0x3bf431f9,0xbbb2269a,0xbb3a9f62,0xbaa4ddd1,0x3ba86206,0x3bb77a5e,0x3c21bf83,0x3c83a65a,0x3c900fc0,0x3c8670d2,0x3ca80f0d,0x3c989f90,0x3c6ce3c4,0x3bea8703,0x3ca5cd51,0x3d06a5de,0x3d341f28, +0x3d1084e7,0x3cf63647,0x3ccd4cca,0x3cca685c,0x3cd70c71,0x3ce609e5,0x3cabfaeb,0x3c87b2cd,0x3c5908e5,0x3c66e633,0x3cfb9c1c,0x3d0380f0,0x3cdf0235,0x3c9e3733,0x3c434959,0x3c5609b1,0x3c20ac89,0x3c2ad961,0x3c11de5b,0x3c371bb3,0x3c51a68e,0x3c261e14,0x3ba4aba7,0xbb127190,0xbaa7d50a, +0xba338961,0xbb8adbdf,0xbb9a23ac,0xbb974797,0xbb46b112,0x3bbed1f2,0x3c7e37f3,0x3ccd3a8a,0x3cdb08fb,0x3cd60c9a,0x3ce2d1bf,0x3d085b4c,0x3d11b0fe,0x3d1acadb,0x3d233cb0,0x3d15095d,0x3d1ebe7f,0x3d1c2975,0x3d1a7070,0x3d1303b7,0x3d10553a,0x3c8c4c7b,0x3c959f64,0x3c9acc63,0x3ca33ff4, +0x3ca34f2e,0x3ca7eef8,0x3c9f7c26,0x3c9c1487,0x3c90416b,0x3c7c8daa,0x3c581fbd,0x3c4542d1,0x3c4d0d1e,0x3c538aa5,0x3c602e45,0x3c61e7d7,0x3c7fe8c5,0x3c860999,0x3c84c3e8,0x3c72dde2,0x3c824d31,0x3c86a2e3,0x3c8fc53e,0x3c91ac54,0x3cb34d9c,0x3cc7b1da,0x3cc48ec2,0x3cafc3ce,0x3cab528b, +0x3ca7b40f,0x3ca85e93,0x3ca7fa55,0x3c946a75,0x3c8947cf,0x3c954d58,0x3c8f8773,0x3cebba5a,0x3bdd3eee,0x3b396036,0x3b78f57f,0xb90e1af1,0x3a4ac2a6,0x3b8b017f,0x3b8b41d4,0x3bb0cd97,0x3c10e502,0x3b995802,0x3b70e9a8,0x3b97560f,0x3b274134,0x3b11507d,0x3afb2f10,0x3b5b67b0,0x3b80d15a, +0x3b69ec43,0x3b8951a0,0x3ba11617,0x3bbd88d8,0x3bf635de,0x3bf7ef63,0x3bcb0c01,0x3bf45e56,0x3be709d1,0x3bcdcfd4,0x3b7609fb,0x3b26cbb4,0x3b17f950,0x3b5e5f95,0x3b841265,0x3bbd2e92,0x3bc06531,0x3b9d224e,0xbaa7295a,0x39f1491d,0xbba86d59,0x3b1f0fba,0xbbe4c5ee,0xbc1f0864,0xba9adc56, +0xba297f26,0x3ba364e4,0x3c8f1244,0x3ba7274f,0x3b5ba3ab,0x3bf9c354,0x3a32245e,0xbaa523d2,0x39bcac2c,0x3b9f8de9,0x3bcdfa56,0x3ba2e152,0x3bc8ec32,0x3c08e3f7,0x3c4857c8,0x3c87b2d9,0x3c8ae8a6,0x3c707535,0x3c5328bf,0x3c3632c9,0x3c5472f3,0x3b979786,0x3b278134,0x3ab1ad2d,0x3b974281, +0x3c05d991,0x3c3dcebc,0x3c211bf7,0x3be12dd0,0xbb5424af,0x3ac833b4,0xbc89383c,0xbb0dd6a0,0xbcbef78e,0xbcaa1e2a,0xbb05b445,0x3a6a7f68,0x3bf9565d,0x3d00a7d4,0x3c106bde,0x3b38c650,0x3c0c2f21,0xbbc5aef6,0xbbf9ebd7,0xbbc89ff4,0x3ab473ba,0x3ba32e03,0x3b275e71,0x3bdfaf71,0x3c1b2578, +0x3c9d3ff8,0x3cde9799,0x3cd56b29,0x3cbb2934,0x3cb42a28,0x3c94aeae,0x3c9dc7d7,0x3b9dd72b,0xbb01e463,0xba76d4f0,0x3b307b3a,0x3c127d69,0x3c8740ff,0x3c6c036b,0x3be702cf,0xbca1fcd9,0xbc220ca3,0xbc9f0063,0xbbc874e7,0xbd12827f,0xbd3f759e,0xbc8083c7,0xbc2fe916,0x3aca2686,0x3d28dc93, +0x3c26a78b,0xba7e66b1,0x3c81eb6e,0xbc287bc6,0xbc78833a,0xbc2886aa,0x3b722e48,0x3bd8a8eb,0x3b700360,0x3bf1711f,0x3c6e0171,0x3ce7466f,0x3d1d83fd,0x3d25c4af,0x3d10107b,0x3ce793ec,0x3cd4369c,0x3d055028,0x3c2d2a32,0x3ab6a131,0xbb5c67c9,0x3b1839ba,0x3c6209e4,0x3cce17dd,0x3c950c72, +0x3bc530d7,0xbca6b6f2,0xbc1f8ef0,0xbd351620,0xbce316dc,0xbd532a8f,0xbd5501d8,0xbadd82b0,0xbbb54a36,0x3c8c4365,0x3d5b0d9b,0x3c5a7bf3,0x3a7d5c28,0x3c26bda5,0xbc6a331b,0xbca8ae50,0xbc86562c,0xbb5a660b,0x3b1b2131,0xbafedb1f,0x3be9d113,0x3c5a51cf,0x3d042276,0x3d40cef8,0x3d42aba0, +0x3d3d8a9b,0x3d0b4496,0x3cf2f4fa,0x3d295316,0x3c9854d2,0x3c38a788,0xb9d0288d,0x3b69d2ad,0x3c392806,0x3ce5f8b4,0x3cb4e770,0x3c54a5a6,0xbd3c2485,0xbd106f67,0x3d781288,0xbd8e076f,0xbd773b2f,0xbd9fa222,0xbde60512,0xbd762050,0xbd282fca,0xbd0ecadd,0x3d905f27,0x3d8d4006,0xbcf1f1d3, +0xbd542c03,0xbd71dd07,0xbd1158b0,0xb9a4666b,0x3bf9796d,0xbd023cea,0xbc74c1f8,0xbb8ea006,0x3c56b4ca,0x3c4755b9,0x3c805ada,0x3ce36a49,0x3c9d848e,0x3cb3a767,0x3d24dbed,0x3c1e3d23,0xba5c9fd6,0x3c45029f,0xbb0d70b3,0xbc29677c,0x3c8c4ff1,0xbc856537,0xbc852f2b,0xbc9e2586,0x3d6c9adb, +0xbddafc2b,0xbdec3a63,0xbd1e0243,0xbc038c6e,0x3d16e22c,0xbc0f0e9c,0x3c27a707,0x3c5b41cf,0xbcaff9c0,0xbd5e0edf,0xbddd3f19,0xbd91ad43,0xbd6fad22,0xbcdce474,0xbce9ee8f,0xbc8fb5f8,0x3bc890da,0xb94ca141,0xbb7f1560,0x3b9ae491,0x3cd757c1,0x3d093a05,0x3d2e4dbb,0x3d0956cd,0x3cedb460, +0x3c361dbe,0x3b8df99d,0x3a843197,0x3bd2f6a3,0xbb67a4a6,0xba5a3d00,0xbc817e00,0x3c88a730,0x3c2b882c,0x3ab395d4,0xbd807e99,0x3d84f16e,0x3b9d16e3,0xbd077f82,0xbd4ace9d,0xbe1f21c8,0xbde7ff97,0xbde3a9d8,0xbd397fb8,0xbd49e281,0xbd4fdff1,0xbddb4c8a,0xbd8129d3,0xbd1bead4,0xbc4ea8d7, +0x3b061f8b,0xbbb5a5ad,0xbaff88e6,0xbc105a00,0x3aef9564,0xbba304e5,0x3c4b9e04,0x3d049ac7,0x3d98875f,0x3c159fef,0xbb5fe6e4,0x3c2e56ee,0xbc082901,0x3bd4d292,0x3ad8e8c4,0xbba7c455,0xbb05352e,0xbc59bc11,0xbb9f047e,0x3b35f50e,0x3d9ef187,0x3d64fa5e,0x3ddaa53f,0x3d92f919,0x3cd66eb7, +0xbc2bd4f6,0xbd95546f,0xbdc1fd36,0xbde7f4a0,0xbd6daf84,0xbde36600,0xbdcd7acd,0xbdf3a94b,0xbd6613f1,0xbcbe1f53,0xbc1af76d,0xbb22597a,0xbc0022fe,0xbccf2605,0xbcabba78,0xbc879754,0xbc878179,0xbbd337e0,0x3c313c3e,0x3d9981ec,0xbbe741ea,0xbc94c020,0x3c642359,0xbc06554d,0x3c0ebff9, +0x3b114d78,0x3a3e3492,0x3930e431,0x3c9662bf,0x3c9a3fb5,0x3d2d72a5,0x3dd309d5,0x3dce0e20,0x3d434145,0x3db45ff1,0x3e2aa2ba,0x3e2f8fe2,0x3e3141d1,0x3dd6a49d,0x3d89e9f4,0x3b5a7e7f,0xbd5058e3,0xbd7e5e41,0xbd974e3d,0xbb3efbe8,0x3b9287b0,0xbb8bef1d,0xbcbe7b32,0xbce464f0,0xbce52bde, +0xbd086798,0xbd12c5ee,0xbcbbe784,0xbc943fd2,0xbb9588d3,0x3d53c17c,0x3c86d83d,0x3c867570,0x3cce68b2,0x3bb146fb,0x3a8a2246,0x3c165337,0x3b39d2ee,0x3c49b2af,0x3d215810,0x3d6dc385,0x3d8e777d,0x3da15de2,0x3d56b433,0x3d1c8bdc,0x3c65ff2d,0x3a2feda4,0x3a830b9f,0xbbf665c6,0x3d5f7bc8, +0x3dd17820,0x3e18d514,0x3dcb992f,0x3d7f07b2,0xbd324c80,0xbd76c80f,0xbd77f7ef,0xbd357adf,0xbd4cba4d,0xbd5e0de4,0xbd630ed6,0xbd2495c7,0xbcc7190f,0xbc693971,0xba8d48f1,0x3c9a3d4f,0x3d181af4,0x3ca24443,0x3c660c8b,0x3c1e718a,0x3d058420,0x3d272403,0x3d30f1b0,0x3d45732d,0x3d3bdd71, +0x3d4519ce,0x3d0cc0a3,0x3cee4bf8,0x3d37c8e2,0x3d0ca2ce,0x3caec5d5,0x3d075c41,0x3d1aa359,0x3d0fcef3,0x3d091e87,0x3d075f0c,0x3d322017,0x3d656bba,0x3d805056,0x3d81d345,0x3d5ebc78,0x3d74d5d5,0x3d60b283,0x3d87985f,0x3d79a47d,0x3d752bac,0x3d34ef11,0x3d1c7639,0x3d04b627,0x3cd5cb5f, +0x3cccd0dd,0x3cb050ff,0x3cb6ee8e,0x3d081131,0x3d11b97e,0x3cce0d98,0x3ca72161,0x3c92751a,0x3cacc55f,0x3c74def8,0x3c912cf0,0x3d026480,0x3d19edc4,0x3d31add4,0x3d49db0b,0x3d16172b,0x3c92897e,0x3bfd8cdd,0x3bd24b7a,0xb95c4bfe,0xbc1c494f,0x3bcba8ee,0x3c806b50,0x3d07e28d,0x3d1d68fa, +0x3d1d1b46,0x3cf60e1e,0x3cb1a1d2,0x3c80f6a0,0x3cd703ce,0x3cc09983,0x3c79fe57,0x3c260f40,0x3b9fa9bd,0x3c180216,0x3bd0282e,0x3bde8390,0x3c3002b0,0x3c8381db,0x3ca34cf2,0x3ccd83a0,0x3cc1c007,0x3cc0c747,0x3ca278ad,0x3ca1e178,0x3ca2f1ab,0x3cbd88dd,0x3cfa4b96,0x3ce93a6d,0x3ce8f294, +0x3cf3be0d,0x3cc7cc01,0x3c80d014,0x3c60fb7a,0x3c69edf7,0x3c869a04,0x3c93de9b,0x3c9423f7,0x3c8d3882,0x3c7bf578,0x3c03a852,0x3c127e39,0x3bbb0895,0x3c0f0d85,0xbad82ef1,0xbbdf41dd,0xbc1e73da,0xbc6ae91c,0xbc1e5708,0xbbea9b8a,0xbc5e2e3a,0xbc200deb,0xbb2ea4ee,0x3bba9989,0x3c609a0b, +0x3c32ccf9,0x3c617f73,0x3ca46c07,0x3caf6fd0,0x3c9f9201,0x3cb3c5dd,0x3cc66cc6,0x3cdc704f,0x3ce2ed03,0x3cdeb16a,0x3cc0e9d9,0x3cc75c88,0x3c991174,0x3d100d82,0x3d07b8d3,0x3cfe85cc,0x3cddbca3,0x3cb4bc76,0x3cc366f5,0x3cb7171d,0x3cc71e70,0x3ce2b585,0x3ce01a07,0x3cdd7f75,0x3cd6801b, +0x3cfe8c1b,0x3d07f407,0x3d106221,0x3d0b3e96,0x3cf396ec,0x3ce2eab4,0x3cee6fe9,0x3cc38a48,0x3ca3cec6,0x3c9efcbd,0x3c9c7ce7,0x3cc3f1df,0x3cce0aa3,0x3ccb55a2,0x3cc94813,0x3cc16b0c,0x3cc5d1b2,0x3cbc594c,0x3c96fbdb,0x3cb6201f,0x3cb9b0d7,0x3cc657d0,0x3cf0df3e,0x3cfd48ee,0x3cafa890, +0x3cbd60b6,0x3cc25f33,0x3cc314af,0x3cc1338b,0x3cc21b02,0x3cb56383,0x3ca6b09c,0x3c983250,0x3c9582c9,0x3c99746a,0x3c9671b9,0x3c8a4723,0x3c7f7464,0x3c6c7196,0x3c6eeff6,0x3c739dd1,0x3c7dad1e,0x3c7ec45d,0x3c8732af,0x3c88a8f8,0x3c8bd59d,0x3c86381d,0x3c9f2c0c,0x3c95ca8b,0x3c98c39c, +0x3ca46c0d,0x3ca00cc7,0x3ca31914,0x3caef055,0x3cadba9c,0x3caa4452,0x3caf2fc2,0x3cb33e0c,0x3ca0b7b9,0x3caa048d,0x3d23f607,0xbba6136d,0xbb7578ea,0xbb55a94d,0xbbb61472,0xbbb95295,0xbb8a4eb6,0xbbbb21d0,0xbbbe0082,0xbbab7b00,0xbb858a47,0xbb71098d,0xbb906e53,0xbb876ae7,0xbb8d5919, +0xbbb30f18,0xbb8b7cfc,0xbb85950b,0xbb89f4bf,0xbb825796,0xbb5b2c5b,0xbb174b6d,0xbb1b7077,0xbafbd54e,0x3916724c,0xb9e9a9a2,0xbab70400,0xbb15e542,0xbb3cf9da,0xbb5280a9,0xbb67aeb4,0xbb41ad23,0xbb07e864,0xbaa6db99,0xba584e63,0xbaa8aa9c,0xbb8daa76,0xbb658360,0xba6aec3f,0x36e95b30, +0xbc1bff1a,0xbc484035,0xbc0664a2,0xbc6a8807,0xbc5dfaef,0xbc335714,0xbbe89ad8,0xbbd5a253,0xbbe817d2,0xbb4202ca,0xbb92869a,0xbc1ed87f,0xbbd62ea9,0xbbe9fe78,0xbbf316e4,0xbbd34eb7,0xbb890393,0x3a2d086e,0x3b26d3ba,0x3b9b4f4a,0x3bde6776,0x3b9af1f4,0x3b5c90e1,0x3a849663,0xbbafa1b0, +0xbbd5fcd8,0xbbc63423,0xba9db4e3,0x3b722245,0x3b5aecac,0x3bb69b6a,0x3b5a3ae1,0xbbf500ce,0xbae4ba76,0xbb5b2402,0xbaf15437,0xbc71a8e3,0xbc8bbd4e,0xbc23b45b,0xbcb9ccfb,0xbcb899d6,0xbca08725,0xbc2f10ad,0xbbec5c4b,0xbc4b0734,0xbbd89c1d,0xbbfa6cb0,0xbc8985fc,0xbc2bef07,0xbc17f829, +0xbc202964,0xbc04df8a,0xbb99be55,0x3b9d3916,0x3bfa6907,0x3c3fe63e,0x3c6939b3,0x3c85ffc0,0x3c3fdb07,0x3b0e3cf5,0xbb65cb2b,0xbc0df1f4,0xbbe68dee,0xba8f1d2d,0x3bac852e,0x3c103904,0x3c735c43,0x3c3b152d,0xbc3eaa62,0xb6d2b2f4,0x3baeaab6,0x3c3b8aca,0xbc8eea5a,0xbcc583a1,0xbc536e44, +0xbd0f6dd5,0xbd034dab,0xbce69359,0xbc6e4c54,0xbc2cfd09,0xbc8a0e6f,0xba8a201d,0xbbc30096,0xbcbbd734,0xbc52897c,0xbc50f8c1,0xbc3fc2ea,0xbc2ec77b,0xbb62a0e4,0x3c670262,0x3c9c82f1,0x3cd14caa,0x3ce70e10,0x3cdee594,0x3cce7e65,0x3c8ad5af,0xbaa17ed1,0xbc015bb5,0xbc028adf,0x3b707ecf, +0x3c91c17d,0x3c9c9aae,0x3ccf5164,0x3c8700f7,0xbc6a8519,0x3a4a82d7,0xbbb4fc2a,0x3b268577,0xbc7558b0,0xbca70374,0xbc10e38e,0xbd17a8c4,0xbd2903ce,0xbd1821be,0xbca15fed,0xbc3417ec,0xbcd45ac6,0xbc290346,0xbc46c4f1,0xbd02205a,0xbc863557,0xbc531db4,0xbc54cfd5,0xbc449fad,0xbb669ea5, +0x3c99f34d,0x3cc1d5dc,0x3d090c43,0x3d2379d2,0x3d0a817d,0x3ceeabf2,0x3ce1a4a2,0x3c283495,0xba13af29,0xbb7846b3,0x3a2bbdd3,0x3c755428,0x3cd09206,0x3cf00ce3,0x3ced2bd0,0xbcb91b9f,0x3a6e0b62,0x3c0516c6,0xbdc419dc,0xbda2cd56,0xbdba2df3,0xbdd9acd7,0xbdac6e4d,0xbd639b3a,0xbcbfc917, +0x3c130737,0x3ce64a6f,0x3cbcad54,0x3bb583a4,0xbc51e1b5,0xbd1b536c,0xbcb22a35,0xbc0941cc,0x3c3112b1,0x3b89637f,0x3c027216,0x3c38a9d7,0x3c95cbf0,0x3cb73c3a,0x3c3336b3,0x3d24502d,0x3d08cef3,0x3cca2fee,0x3a7cc08e,0xbc219304,0x3ba975b7,0xbcaed219,0xbc6a1dc2,0x3ccb568f,0x3c63f869, +0x3bfc7c92,0xbc34a181,0x3d08ce06,0xbd547216,0xbd5d6fdc,0x3d13e7e2,0x3c8b2f06,0x3cfe8625,0xbb35540e,0xbc769e46,0xbcfa3590,0x3c613f85,0x3c8dd266,0xbbbd8f8c,0xbd15218a,0xbd3ab687,0xbd2f9a36,0xbc01ea74,0x3bc94aa5,0xbbcdee3a,0xbac90201,0x3b2c7b42,0xbade1477,0x3bb6c426,0x3c987394, +0x3d44e8d2,0x3be2e34a,0xbaa22e2e,0x3b63fee8,0x3b5a6570,0x3adcf670,0xbc397790,0xbc59ba56,0xbc892fd7,0xbcdf93e1,0xbcbaec98,0xba02b00f,0x3d1ddf38,0xbce2286e,0xbd184227,0xbdd9b498,0xbe32a94f,0xbe0bb7f5,0xbdd23230,0xbd8dc8c4,0xbd226603,0xbd34604d,0x3b698264,0x3ac986b6,0xbce0621a, +0xbd3eacc3,0xbd3a87de,0xbc072740,0x3c214d66,0x3c9b45e8,0x3c55b0e6,0x3c50ae69,0x3c44279a,0x3c259f72,0x3c9fb7fc,0x3cc3e046,0x3d2a6d07,0xbb22a392,0xbc55a479,0x38a92bbf,0xbc266d7a,0x398f7fe6,0xbc24e1bf,0xbbcc824c,0xbc1796b0,0xbba81a30,0xbcf008e2,0xbd003367,0xbcacbc84,0xbc31a284, +0x3ccc5ec4,0xbc029e68,0xbd8d0a94,0xbd936d4a,0xbd85084b,0xbd8ac80f,0xbd3f19df,0xbd64e021,0x3bf3f3f2,0x3adffd8d,0xbd29c01a,0xbd51909c,0xbd69bb6a,0xbbf7dba3,0xbc4048a0,0x3b92dc1a,0xbb45e2a6,0x3b887817,0x3b918091,0x3b0ce78c,0x3ca81d1a,0x3cc4c427,0x3cfe5456,0x3c018d33,0xbb503673, +0x3c0bcb5d,0xbbd78161,0x3b42f4e6,0xbabb9fcd,0x3c237384,0x3c3a5ef5,0x3c694b95,0x3bf812d7,0x3c75d730,0x3cd8c42f,0x3d28960e,0x3e1ad831,0x3e43b1cd,0x3e5d26f9,0x3e200ea0,0x3de74b3e,0xbc0bc4ec,0xbd77e15a,0xbd57978e,0xbc3ec497,0xbc94da91,0xbd678933,0xbdc77876,0xbdb54c03,0xbce91d95, +0xbb355605,0x3c366d90,0xbc4b8167,0x3b43e417,0xba2f4482,0xbc57fe6d,0x3c5664d5,0x3c832df4,0x3cee2f5b,0x3c369b5e,0x3c1fa3ff,0x3c2840b5,0x3b6f5a93,0x3b69dc6c,0x393da1ae,0x3c259716,0x3cbde4c2,0x3cbc5bc0,0x3d608edb,0x3da24cb2,0x3de50a56,0x3dfae498,0x3bdaeb89,0xbb6cae23,0xbbb26dd2, +0x3d2fc76b,0x3dbbcafd,0x3df768e7,0x3e057f68,0x3db5bdae,0x3cc4f7d9,0xbd06f8e0,0xbd7dfda6,0xbdeff23b,0xbdc47763,0xbdb8ddc9,0xbd9b4d9e,0xbd3ea8f2,0xbce38848,0xbce426db,0xbc86de6a,0xbc16fd21,0x3bd93c62,0x3c8700c6,0x3d0cc7a7,0x3c104fad,0x3b6fbf5e,0x3c098731,0x3d07d5a8,0x3d2047d5, +0x3ce845aa,0x3d26abb9,0x3d28074b,0x3d638122,0x3d27af8c,0x3d1da7aa,0x3d398819,0x3ce88989,0x3d5e5bcb,0x3d682a48,0x3d581507,0x3d20c30d,0x3d21f713,0x3cd9831a,0x3d15df17,0x3d85651b,0x3da66484,0x3dad6886,0x3d911d37,0x3d5ea1b7,0x3cd01a7c,0xb88c538c,0x3b902d84,0xbb4c5660,0xbc7620ee, +0xbb2df255,0x3a666648,0x3c21df88,0x3c789123,0x3c80aed1,0x3cf45083,0x3cd2af96,0x3cfd2abd,0x3cfd535b,0x3ca90dd1,0x3c6602af,0x3b96eb2e,0x3c1b8e97,0x3c847664,0x3cbf2d4d,0x3ce1ec77,0x3d1762ca,0x3d3b0b2e,0x3d6c4fb1,0x3ce76999,0x3c885fe3,0x3c07633d,0x3bd2ad2c,0xbbe0ef23,0x3c0ab311, +0x3c995911,0x3d05b26d,0x3d218001,0x3d495a47,0x3d6d417e,0x3d43db53,0x3d244968,0x3c8528a3,0x3cb3fdcd,0x3cb16923,0x3cb851fa,0x3cd141e0,0x3cbacab4,0x3cc531a8,0x3ce405a0,0x3cf68209,0x3d1b2cea,0x3cff493c,0x3cd03156,0x3cb3ab32,0x3cbdbb65,0x3ccead1d,0x3cdbf56e,0x3ce8445e,0x3cf46b9c, +0x3d042364,0x3cfa4936,0x3d0053b4,0x3d0ed05e,0x3cfd161b,0x3ca96296,0x3cc122eb,0x3cb23bd4,0x3c8901ed,0x3c6c5a95,0x3c46ced2,0x3be85267,0x3aeb9b21,0x3c01d42e,0x3c779bb1,0x3c99686f,0x3cc3df75,0x3cdf2d65,0x3cf3127b,0x3d0befa9,0x3d22b26d,0x3d2d091d,0x3d197213,0x3d339771,0x3d077f39, +0x3d02891b,0x3d03c171,0x3d0b9090,0x3ce4a054,0x3cb8c5ee,0x3c8c29ca,0x3ca8b866,0x3cda994a,0x3ce65334,0x3ced3b1d,0x3cf3e5c1,0x3cf42d60,0x3d0079dc,0x3d004b82,0x3d06fe50,0x3cd2d110,0x3c91352a,0x3c3e24ed,0x3c820bd3,0x3c9548d5,0x3ca43283,0x3ce43199,0x3d09ea98,0x3d214a29,0x3d13ff16, +0x3cf1f175,0x3ccf4961,0x3ca959ee,0x3c59e371,0x3c067c44,0x3c00355a,0x3c136309,0x3c5d6973,0x3c885cc2,0x3ca12d65,0x3ce627d7,0x3ca0074d,0x3ca65941,0x3c910b68,0x3c9f9352,0x3c9d2542,0x3c992809,0x3c96d904,0x3c5ba5d7,0x3c5b983d,0x3c56ccce,0x3c38f1e3,0x3c4a3159,0x3c4ed440,0x3c1ddd08, +0x3c4b333a,0x3c67884c,0x3c9309a5,0x3c6ef57a,0x3c82bec8,0x3c7bd33c,0x3c686e23,0x3c597a9f,0x3c2b0bd9,0x3c182179,0x3c140c86,0x3c312c23,0x3c4446b8,0x3c578ad1,0x3c80ada9,0x3c8b9bad,0x3c9d0dbc,0x3ca73fdf,0x3cb36f48,0x3cb2416b,0x3ca9b47b,0x3cbb6d06,0x3cb2cf54,0x3cc17d9c,0x3cc7bd3c, +0x3c9da630,0x3ca42b44,0x3cb52771,0x3cbb3a4d,0x3cc0d1ca,0x3cc6c9b5,0x3cca95fc,0x3cc6315d,0x3cc9f01e,0x3cb3a00b,0x3c960b08,0x3ccc5cdd,0x3caf7848,0x3ccac3fa,0x3c08219c,0x3bd33ec5,0x3bd60115,0x3bbdce1e,0x3bb3c178,0x3bccdf2a,0x3bb6cca9,0x3bb78a84,0x3be7b4cc,0x3b9d1feb,0x3b98a08a, +0x3bb187f5,0x3bd83935,0x3bd289a3,0x3ba09c63,0x3b9ca35a,0x3b92ddd0,0x3b71570b,0x3b973197,0x3b9eb0d0,0x3b942748,0x3ba79c23,0x3bad9252,0x3b932db8,0x3bf77119,0x3bc048d6,0x3aec81d6,0x3ae2b552,0x3ace98b4,0x3a84a306,0x3b130987,0x3b52d2b0,0x3b51f022,0x3bbfa221,0x3bd191dc,0x3ab67e91, +0x3b9727f3,0x3b9f4fb8,0x3b97d982,0x3bb58e82,0x3bb92a42,0x3be6febe,0x3b96a5c4,0x3b9dd107,0x3c0708ef,0xba75fa32,0x3a6a90e2,0x3b9488b4,0x3c447fe7,0x3c5ee285,0x3bd8fcf0,0x3bce2908,0x3b9722c2,0x3af80f8e,0x3b9704ea,0x3baab5b4,0x3b5f81b3,0x3bbf6ef1,0x3c116ee5,0x3c59f2d4,0x3c45a409, +0x3c224ad8,0x3b9d94c8,0x3acd1e66,0xb7e78535,0x39f3a04f,0x3c095134,0x3c480bee,0x3be7b24d,0x3c4f8a2f,0x3c36c777,0xbaf584a4,0x3bd58651,0x3c26520b,0x3c1176dd,0x3bcfffa6,0x3bcd96a5,0x3c1f3c90,0x3c0a6c38,0x3bd6d52f,0x3c75323a,0xbb09bc74,0xbab83cd6,0x3b81d42a,0x3c8b8755,0x3c91662f, +0x3b627568,0x3b7fec02,0x3a573ebc,0xbb77c619,0x3aeaa0db,0x3b42647f,0x3ab911b4,0x3c0b0135,0x3c4cbb9a,0x3ca5d1e8,0x3ca9861f,0x3c86b3c9,0x3b168a7f,0xb87ce91e,0xba906774,0xbbac3189,0x3bfa3227,0x3c4b0178,0x3c127059,0x3c91e13e,0x3c700caa,0xbba6c1d3,0x3c338613,0x3c0d7414,0x379e63f9, +0x3b2daceb,0x3b7c9f70,0x3c00707d,0x3bc305cd,0x3b1ba1fc,0x3c5c8f2d,0xbc865c24,0xbc44cbcc,0xbb239ef7,0x3cbde7c5,0x3ce81f68,0x3b3cba60,0x3ba27c03,0xba82594e,0xbc1818ba,0x38715174,0x3acee02e,0xba440319,0x3c317ec2,0x3c8e4d7a,0x3ce9e8b5,0x3d01ee02,0x3ce73d46,0x3bd6a6aa,0xbb1f84b6, +0xbc25cc6b,0xbc47f860,0x3c48500e,0x3cc239e9,0x3c488817,0x3cefd8e4,0x3cc49187,0xbc9dacac,0x3c2ea5d2,0x3cc89656,0x3c4fbcdb,0x3bc973c7,0x3bd9028e,0x3c8878e2,0x3c84321a,0x3c8c45fb,0x3cc98ba1,0xbbe3838d,0xbc22704e,0x3b4158bd,0x3cd456df,0x3ce55bca,0xbaea08aa,0xb9cefdb2,0xbbc570a8, +0xbc6670a6,0xbb48a689,0xbab60540,0xba9bbc56,0x3c8d46ab,0x3cca184b,0x3d0ad634,0x3d2486cf,0x3d1854fe,0x3c6e4145,0x3b850d05,0xbc10a5cf,0xbc6ae188,0x3bcc8a80,0x3cc80b40,0x3c97ad3a,0x3d0f6fd8,0x3cc00914,0xbc595539,0x3c8bb204,0xbdbcc38a,0xbd91720d,0xbcd5bbf9,0xbcab7b33,0xbcc9727b, +0xbd5b2b8c,0xbd84bf8a,0xbcfa37ee,0xbd46a84a,0xbc350a72,0x3d3e168b,0x3cd1fd62,0x3c9237fd,0xb90fc331,0xbc1de315,0xbc803173,0xbc356224,0xbbfa0e57,0x3b0b0193,0x3cbf3907,0x3ca83b81,0x3cca5c2d,0x3cbae6c0,0x3d1c08d8,0x3cf943e3,0x3c51ae35,0x3a2e974b,0xbc1c1142,0xbbef71fa,0xbcb69153, +0xbc651016,0x37d5c4a6,0x3ca2efdb,0x3ca97f3c,0x3c8a8576,0xbd48c6b2,0x3c8ee00f,0x3c15816c,0xbbf99d91,0xbc853245,0xbb6282a4,0x3c514157,0x3cc6ca7f,0x3c51af9f,0x3c482fa4,0x3a2b818b,0x3c7f068c,0xbc7d003d,0xbcb64163,0xbd07d5b3,0xbcfd057b,0xbcc0a912,0xbc9538a4,0xbc5a5417,0xbb90fe7a, +0x3c31e2fb,0x3cdb1d32,0x3cd7af62,0x3c9fd66a,0x3ba5f367,0x3815a58c,0x3ae1f273,0x3b9a1c77,0x3a9aa131,0xbc8d47ca,0xbc6477bd,0xbc73a6c0,0xbc90f19a,0xbcc913ef,0xbcbafeee,0xbc1a5a8e,0x3ae19f2b,0xbd9d90df,0xbdcb8005,0xbda58298,0xbd50c751,0xbbb85648,0xbc1e0c39,0xbc8a2bc0,0xbd12b6f2, +0xbc855033,0xbbde22dd,0x3c19f02b,0xbc9ae233,0xbd0076ce,0xbd44e7f6,0xbd164750,0xbcfdb9eb,0xbcf10dc6,0xbca2c75c,0xbc2d0e67,0x3af124f2,0x3cd4c3fa,0x3cb49678,0xba8b08ad,0xbbe8c6ac,0xba040c18,0xbb2893c8,0xbb19ef1e,0x3b444a4a,0xbc3a6eac,0xbb350c34,0xbc524d33,0xbc2299e1,0xbcb41818, +0xbd07a06f,0xbd7de934,0xbd5e3e11,0xbcbd7bb3,0xbd2e88b2,0xbcc08852,0xbcfa0f9c,0xbd0ea14a,0xbd902267,0xbdcc477a,0xbd8b7587,0xbd92e195,0xbd625ab0,0xbd04b33d,0xbd29707f,0xbd37ac07,0xbd834e55,0xbd244000,0xbcc1b68a,0xbc42ac20,0xbc66fe0d,0xbbd004d0,0xbb87e49e,0x3cc5e3fb,0x3ca99a0b, +0xbc936f42,0xbb8dedb1,0x3784c545,0xbc04e864,0xbb07633a,0xbaba714f,0xbb550e5b,0x3b881245,0x3b8c23f8,0xbbd91961,0x3c2fd0d0,0x3c1c9dfb,0x3c5ce5c6,0xbb95d17b,0x3e2abea9,0x3df0692d,0x3d6f6f74,0xbbeeb837,0xbd5adc90,0xbd8e1d9a,0xbd8afcdb,0xbd00ca28,0xbd44d293,0xbd4cd10a,0xbd3ca402, +0xbd14ebf2,0xbd178990,0xbd7fdc94,0xbd1afeef,0xbd0c01eb,0xbc6b07ad,0xbc258200,0xbb4e2631,0xbc84a91c,0x3cf84425,0x3cda8bb2,0xbad03a23,0x3b75ace8,0xbae7c761,0xbb92a89e,0x3b0abf98,0x3b4ffbff,0xbb2fa2e1,0x3b80114b,0x3c66c5f4,0x3c15e4ec,0x3d1967a6,0x3d7083d5,0x3dd6931c,0x3e0bb60c, +0x3d4abfa0,0x3dc5e2a0,0x3e04e928,0x3e262ffc,0x3dffae4b,0x3daecc70,0x3c5d3f2a,0xbd9ea744,0xbda95146,0xbdb0687b,0xbd91c1ff,0xbcf900f1,0xbc5ac28e,0xbd5a95a3,0xbd4fe2ee,0xbd5a5362,0xbd590b8b,0xbd85bfa7,0xbd3f6cf9,0xbd00edbb,0xbc0761f4,0x3b07a3e9,0x3a72c8df,0x3aa63b9b,0x3c1e5034, +0x3ce44a55,0x3c214112,0x3b9c822b,0x3c0bdd4c,0x3ceeacfa,0x3d0eae6b,0x3d2983a1,0x3d3b8776,0x3d563923,0x3d66b2bd,0x3d7f3ada,0x3d334422,0x3d3f7d9d,0x3d3e6d46,0x3d3a9790,0x3d6de4f9,0x3d98f61b,0x3da39e6e,0x3d8e5190,0x3d7691a3,0x3d0b6471,0xbb3c347d,0xbc44bbff,0xbcea9a1d,0xbd2e1e23, +0xbd4f122a,0xbd451ee1,0xbd02079d,0xbcec56e0,0xbcbf74fe,0xbc5e4be4,0x3be9d8b3,0x3c82b6a1,0x3cc9d6e5,0x3cc63cc9,0x3ca85445,0x3c81b0e5,0x3c58bd20,0x3ca8b606,0x3cdb3d4f,0x3cf314b5,0x3d038467,0x3cf01a0f,0x3cf54649,0x3d02307d,0x3cedc5d0,0x3d438bb8,0x3cdd9cc0,0x3d0283c0,0x3d09b88e, +0x3d25107e,0x3d231988,0x3d4b9324,0x3d62a9b0,0x3d5c13d7,0x3d5f2864,0x3d5634cd,0x3d537373,0x3d2a0f2e,0x3d1226bd,0x3cbc5f60,0x3c4e40b3,0x3c7e2164,0x3c9271cd,0x3c889171,0x3c81611b,0x3c9ae431,0x3ca8aa7c,0x3cca8278,0x3cdead44,0x3ce75a0a,0x3cd766b5,0x3cc5d37f,0x3cf088f4,0x3cf4750c, +0x3d0c4592,0x3d047728,0x3cf9200e,0x3ce65556,0x3cee6fad,0x3cfde724,0x3d0b3851,0x3cdfa888,0x3d0d12ab,0x3d1020bc,0x3cf9ba1e,0x3cbeebab,0x3c91d944,0x3c8e5b34,0x3ca44b2b,0x3cd1a745,0x3d0cccd3,0x3d386f97,0x3d7e1294,0x3d5fc3ac,0x3d70125b,0x3d62df18,0x3d73d630,0x3d7c183d,0x3d54c702, +0x3d4e1421,0x3d5b6b15,0x3d3be73d,0x3d25da71,0x3d0ccd00,0x3ce8aa68,0x3ce52afd,0x3cf4edce,0x3ce6bf87,0x3ce09cf8,0x3cd27f39,0x3cd08c62,0x3cb35829,0x3cb2e280,0x3c994a9e,0x3cc2fe38,0x3d015049,0x3d178ec5,0x3d147de2,0x3b5255c8,0x3c02f632,0x3c40bc04,0x3c786997,0x3c9a4d7b,0x3cb13ff0, +0x3cb0d575,0x3c9516fb,0x3c94e860,0x3c8312fe,0x3c519c45,0x3c908ec6,0x3ca2bafb,0x3cd5d707,0x3cb04467,0x3cac519a,0x3cf47c06,0x3cfa7d74,0x3cee00f4,0x3d1938de,0x3d19c1e2,0x3d16970b,0x3d0ccd05,0x3cf135de,0x3cb3c36b,0x3c80fda3,0x3c8ad591,0x3c80c264,0x3c6f93c0,0x3c7e273f,0x3c6a52a5, +0x3c553e53,0x3c51158a,0x3ba34dd1,0x3b60f82e,0x3bd37e38,0x3c42bd1b,0x3c6a917d,0x3c544f1a,0x3c3b6026,0x3c23092b,0x3c14af6a,0x3c14fee4,0x3c24d1e4,0x3c52cefa,0x3c81ff92,0x3c98f3ab,0x3ca3ece0,0x3ca66fbb,0x3caed37a,0x3cb29f94,0x3cb5f653,0x3cae1fbe,0x3c9f10ce,0x3c986272,0x3c90f236, +0x3c5e25f5,0x3c351c1d,0x3c0ccc00,0x3c3985f7,0x3c286eb5,0x3befac98,0x3bfcfd61,0x3be303e4,0x3be39071,0x3bcfbe6e,0x3bbed216,0x3bc2e6ad,0x3c0b6be5,0x3c379e8d,0x3c171b3d,0x3c2fff6a,0x3c7b7ae6,0x3baca45b,0x3b3fcda3,0x3a152566,0x3b1365e4,0x3b25153c,0x3b57b015,0x3b3d6f6b,0x3b41b451, +0x3b4d337d,0x3ad2c66a,0x3a63f241,0xba44b89b,0x3b1584dc,0x3b5b5da4,0x3ba4aa2a,0x3b3f3601,0x3b24b3c7,0x3b3559b4,0x3b5317b1,0x3b6009bf,0x3b6cff19,0x3b8f947d,0x3ba93e04,0x3be531dc,0x3b97900e,0x3b897067,0x3b557e60,0x3b6a1c42,0x3b6d84c9,0x3b5a5396,0x3b9451e6,0x3ba50d42,0x3b835553, +0x3b8b7ba6,0x3b6c203e,0x3b5b3341,0x3b9b7c0d,0x3bd97a4a,0xba3e2214,0x3b1a0a21,0x3b99ae61,0x3c0bd4e9,0x3bdb9248,0x3ba5621f,0x3b83b2b0,0xba98ff5c,0xbb849832,0xbc09228f,0x3a2d3424,0x3bc604cd,0x3c1aed6c,0x3b48a3f5,0x3aebb628,0x3b41359a,0x3b63ff76,0x3b9ce5fa,0x3bb6a5eb,0x3bfb8c68, +0x3c2c44cf,0x3c76d29b,0x3c1e86d3,0x3bbcb030,0x3b613191,0x3aae86d7,0x3aa77785,0x3b87a2ca,0x3bf7e124,0x3be15e3e,0x3b91acff,0x3c0d2836,0x3c0b40ee,0xba1dbee3,0x3b863177,0x3beb4dd5,0xbbd2c562,0xba477069,0x3b34e2a9,0x3bf6884f,0x3bcd278d,0x3bc92f4f,0x3b8280bf,0xbbd4fc79,0xbc39a3d8, +0xbc9c2c0a,0xba98fd77,0x3bc05429,0x3c5b0f90,0x3b2c12bc,0xba64d8db,0x3ad40a33,0x3b393749,0x3bc69787,0x3babe096,0x3c0ec103,0x3c7176ec,0x3cb4e42b,0x3c7375cc,0x3c193524,0x3aa3ba5d,0xba21f3e1,0x3a388036,0x3a41b3de,0x3bfa3080,0x3c1f8ee1,0x3b8b5f34,0x3c2199bb,0x3bf4e63d,0xb9ae2b92, +0x3bf12c66,0x3bb8fa61,0xbc1b644d,0xba1a4003,0x3bd5bfc6,0x3c9214d2,0x3c4cbe4e,0x3c1dba64,0x3ba70d79,0xbc44912a,0xbca72065,0xbd186db1,0xbb9a9669,0x3c13c163,0x3cb3e4fa,0x3a6e72b4,0xbb69a830,0x3964cbd2,0x3ad69990,0x3bcfa946,0x3bb35bb3,0x3c44c56e,0x3cb6b5b6,0x3d100e2d,0x3cc7e3c3, +0x3c8ad982,0x3b2aaa8a,0xbb8a5497,0xbbd97944,0xbb4dce3e,0x3c5485bc,0x3c8c4751,0x3b94aed5,0x3ca881e4,0x3c942092,0xbc5c3e86,0x3ba23467,0x3ca4f7b2,0xbc1fcb35,0xbb858515,0x3ba0424c,0x3bcbae67,0x3c627fe3,0x3c2bf854,0x3bb68333,0xbc467138,0xbce16436,0xbd1e2a18,0xbc270566,0x3be43016, +0x3cb6a4df,0x3a2c2e97,0xbbdb8cee,0xbae11e73,0x3a28b3e1,0x3bc58e3b,0x3ba5751f,0x3c130cd2,0x3cb18b93,0x3d1fcc3b,0x3cfc1d9a,0x3cd33c7e,0x3bb80dc1,0xbb08717b,0xbc351cbc,0xbc61dd56,0x3c3ea55d,0x3cb0d3d1,0x3c12aed6,0x3cc5f3ff,0x3c17e8b7,0xbc040187,0x3c8c0437,0xbdd66cde,0xbca640d6, +0xbb84fae4,0x3b231999,0xbc8bac68,0xbcab9599,0xbd03df2d,0xbcd31593,0xbda37334,0xbd6b4470,0x3d02cc07,0x3ca7d3a0,0x3cc318d4,0x3c6e7911,0xbbb11bd0,0xbc2e56e4,0x3c1d7e20,0x3c80137e,0x3c880e55,0x3c87f12d,0x3c9a5a31,0x3cc082f9,0x3d4ce2b6,0x3cd45244,0x3c7692a8,0x3aeaa5a4,0x3bd09661, +0x39b48963,0xbc1e8cad,0xbc93272f,0xbc3aeb94,0x3b0f99d0,0x3c4fdacb,0x3ca02cdd,0x3d361ff3,0xbd8e07df,0x3d1b7122,0xbb907f8b,0xbcc974ef,0xbca43ec9,0xbd2059f0,0xbaefbbc3,0xbb42768c,0xbcd0d957,0xbc0c0e71,0xbb64a266,0x3b659a8d,0x3a480400,0x3b35e721,0xbc4a71b0,0xbbb4e0f6,0xbc26342c, +0xbc720246,0xbc42a2b6,0x3a508fab,0x3b973207,0x3c847253,0x3c777db5,0xbbcd1789,0xba868c05,0xb8869b88,0xbaadc9c1,0xba4f3aa9,0xbb4b4ec4,0xbc81b289,0xbc2cfd54,0xbc8d3c65,0xbca5435f,0xbd20077f,0xbd20d9d1,0xbce7b20e,0x3c7ce964,0xbcf9064f,0xbcc5d304,0x3d104865,0x3caa06b7,0x3a8da4c0, +0x3a0f5f5c,0xbc248c0f,0xbd5cadfb,0xbd2c22b2,0xbd2bb2e0,0xbd0fc959,0xbc4882de,0xbc01211c,0xbcadda9f,0xbcfa6f06,0xbce148b0,0xbce68b82,0xbc9c3144,0xbc3d3cce,0xbb4b4147,0x3c93ac7a,0x3c72b7f1,0xbcab86c8,0xbb3c95c5,0x3c0acfe0,0x3a4a450f,0x3b2d64af,0x3a0be247,0xbade1391,0xbaeadf9b, +0xbc585520,0xbc18b435,0xbca55adf,0xbcf29138,0xbd51f241,0xbd01b40b,0xbcc20e98,0xbd04f83c,0xbcdc1f55,0xbce3d609,0xbd7cd487,0xbcb0395d,0xbcccdd27,0xbd860db6,0xbd07cb53,0xbcfed174,0xbcce5bab,0xbc86f51d,0xbc1cb225,0xbcab60f2,0xbcd6dc89,0xbd006845,0xbce068ba,0xbcd5f109,0xbc7e0e5b, +0xbb82e2dc,0x3c6d1d90,0x3c56b318,0xbca33925,0xbbd6d61a,0x3b50dd1d,0xbb94bfbc,0xb94b6800,0xbb87cc3f,0xbb1d7215,0xbb76834c,0xbbef6763,0xbc863874,0xba888c4c,0xbc392432,0xbbf6543b,0xbccdbda7,0x3d359746,0xbd11684d,0xbe05551a,0xbe0ee1bc,0xbdfe40c5,0xbd3eedbf,0xbcf84e70,0xbd5f9e78, +0xbcf64e10,0xbcaf8dcb,0xbcc4c34f,0xbca6df5f,0xbcc570f6,0xbc9eec24,0xbc7f6792,0xbc94b98e,0xbc890540,0xbcc1b2b5,0xbc7146c4,0xba6cb945,0x3c346b79,0x3c0ba627,0xbc89d2d3,0xbc250329,0xbc369045,0xbc4506ac,0xbac7957d,0xb9bdc5fa,0xbc5f07a9,0xbb9eaea9,0xbaedb24d,0xbc5eaebb,0xbc036c41, +0x3b8db7eb,0x3d4255f5,0x3d68a777,0x3df4e49c,0x3e338d95,0x3e142e6a,0x3df3f465,0x3d2a21ef,0xbd12d0e5,0xbdb43f60,0xbdc48026,0xbd5a5697,0xbd245f69,0xbc97f6d4,0xbca6d037,0xbc8bd2d8,0x3b94d9f5,0xbc232200,0xbc489b53,0xbc98c0ae,0xbc9226b9,0xbc6c1bb1,0xbc87a634,0xbc39a971,0xbbdc3f65, +0xbc3af641,0x3bd1e28f,0x3c129d40,0x3c796620,0x3b4ecea2,0x39f601f1,0x3b2b8508,0x3ca884a5,0x3ce915df,0x3d5b17fb,0x3da34023,0x3daca637,0x3dab5d21,0x3dce1270,0x3d7da5e8,0x3d629aa3,0x3d8d0bef,0x3da1dc86,0x3db86f3c,0x3dcf132d,0x3da2cfa8,0x3d063d4f,0xbc1703e6,0xbd351b9b,0xbd5bd3a0, +0xbdaf2708,0xbdad02ee,0xbd8c690c,0xbd718e25,0xbd4affb7,0xbd11d2c7,0xbcee53ed,0xbc95f980,0xbbf95e97,0x3c1bdf36,0x3c318294,0xba8c460b,0xbba0dd2f,0xbad3dc9e,0x3c0569ba,0x3cc05624,0x3d0d1be9,0x3d05b0a3,0x3d1b766f,0x3d1f85d9,0x3d15d748,0x3d34b282,0x3d4a2e37,0x3d441bfe,0x3d7d2bcb, +0x3d370087,0x3d641590,0x3d9cc5e3,0x3daf97e7,0x3dccef32,0x3dc12865,0x3dbf5e26,0x3da1a7a4,0x3d6e1489,0x3d12a1c4,0x3ce58044,0x3bd3943b,0x38f708cb,0xbbdbb2e8,0xbbd38dda,0x3acdabd2,0xbb06aee2,0x3b91bb9f,0x3bac248d,0x3c44a594,0x3c9c8d6b,0x3c9be2f6,0x3c960069,0x3c844562,0x3c79bcbc, +0x3cac875c,0x3cc15023,0x3cd8c4c9,0x3cda68b6,0x3ce6d0b0,0x3cdebd27,0x3ccf8404,0x3d0de5a5,0x3d153c36,0x3d171a26,0x3d19b5f4,0x3d1cdc73,0x3d3fa8d7,0x3d48372d,0x3d5744c4,0x3d69b224,0x3d7d1c28,0x3d91ac49,0x3db0791a,0x3dac53cc,0x3da6399a,0x3db1dd73,0x3d8ce9b0,0x3d83743d,0x3d467aed, +0x3d2daf74,0x3d169330,0x3ccdcb8a,0x3cd4f79b,0x3cd97193,0x3cccdcb7,0x3ce5ffc4,0x3cca94d4,0x3cdab415,0x3ce5864e,0x3cf45617,0x3cdf1d6c,0x3cc7a322,0x3ccccd84,0x3cb2cc08,0x3cbf9c3a,0x3caaa217,0x3cb22b0c,0x3cbc6c84,0x3cdc07b1,0x3d0bd7b2,0x3d29d851,0x3d058a9c,0x3d47e382,0x3d53c226, +0x3d5c030a,0x3d5e5285,0x3d66ee69,0x3d56c6b9,0x3d4916a5,0x3d2a7cbd,0x3d213374,0x3d0b1ca2,0x3d133cc4,0x3d18e178,0x3d32f6bb,0x3d208f09,0x3d102aca,0x3d18bdca,0x3cf65bc1,0x3cb5adba,0x3ca6e8a9,0x3cb4e6f2,0x3ce5e870,0x3ce836ed,0x3cf0988e,0x3cf62249,0x3cfaf805,0x3d18acce,0x3d1a61d9, +0x3d1d3d9e,0x3d2930cf,0x3d3d5acd,0x3d25badf,0x3d3e4bc6,0x3d27778e,0x3d0ad046,0x3d3b62c9,0x3d0bec1c,0x3d1d6f3d,0x3d166572,0x3d164214,0x3d17b3f3,0x3d1e2e83,0x3d29b6eb,0x3d3d4284,0x3d441ebb,0x3d47171e,0x3d48e42a,0x3d472780,0x3d3bf540,0x3d325f6d,0x3d24f811,0x3d1e7e0b,0x3d186386, +0x3d116313,0x3d0edd3a,0x3d07c490,0x3cfc89e0,0x3ce9d595,0x3cd4247e,0x3d062ec5,0x3cf82b9d,0x3cd020af,0x3ccaea1f,0x3cc1ee58,0x3cc50ce4,0x3cb6dc32,0x3caffb36,0x3cbdee70,0x3cf00d53,0x3d05630c,0x3ccd0f97,0x3cf3cd00,0x3d6bbada,0x3bfb319f,0x3b8b718d,0x3b69bd78,0x3b7eda5c,0x3b752bf7, +0x3b4e046f,0x3b9764ab,0x3b9ed972,0x3b8a44b4,0x3b58a33b,0x3b3ac1f8,0x3b12b8de,0x3b2e855a,0x3b59b6ba,0x3bc59834,0x3b98efbf,0x3ba00513,0x3badaf70,0x3bc2249d,0x3bca3e03,0x3bcea8e0,0x3bd0b864,0x3bc5edb1,0x3bbc8ccb,0x3bb7f81b,0x3b99486a,0x3b492061,0x3b5740ee,0x3b6738f0,0x3b8c0987, +0x3b78444b,0x3b6d62b4,0x3b674a59,0x3b73e799,0x3b9ac035,0x3b94896d,0x3b835c5f,0x3a94bbd9,0xbadd03ec,0x3a137275,0x3afe6463,0x3b2469ac,0x3c2b9419,0x3c26ecbe,0x3bc69647,0x3b82906a,0x39878743,0xbb344ded,0xbb52f37a,0x3a5a4107,0x3c29f20e,0x3bc0a376,0x3bd4cd85,0x3c045b4e,0x3c168030, +0x3c2a229a,0x3c2e7504,0x3c4970b6,0x3c5d7e0f,0x3c55ef08,0x3c161081,0x3bd7d828,0x3b939e5a,0x3b7d56fa,0x3b8aa954,0x3c1e8931,0x3bebeba9,0x3bc76750,0x3baca8ed,0x3b9bba7a,0x3bdc26a2,0x3c0a1d43,0x3bc6ebe0,0x3a058085,0xbb8d456e,0xbb4dc98a,0xbb0d2f72,0xbb7b9e4d,0x3c0654c8,0x3c39b779, +0x3b646943,0xb9f9747e,0xbbe28048,0xbc15423b,0xbc36bba8,0xbbbb908a,0x3c4bff38,0x3bac41e1,0x3bccf794,0x3c1299ce,0x3c43823f,0x3c749e89,0x3c6484a5,0x3c91cbd2,0x3c9a9ebc,0x3c9d6541,0x3c5e8ad4,0x3c0fae98,0x3b67f5ee,0x3b25f542,0x3bc9e32c,0x3c2427c1,0x3bfe8fcd,0x3bd22310,0x3bc04f9c, +0x3b82ad2d,0x3b9ba0aa,0x3c5359fd,0x3bd3c84a,0xbb7861ef,0xbc973bbc,0xbc36d80e,0xbc08b001,0xbbc65cb7,0x3c8b9f36,0x3c9e5ed7,0x3bcc8496,0x3a97c35e,0xbc3367a1,0xbcb40e8e,0xbcaed1f2,0xbc460f74,0x3cb0b9e6,0x3bacc3db,0x3bda5c01,0x3c2d7e77,0x3c7d3583,0x3c9bbfa0,0x3c916891,0x3ccc9b32, +0x3ceb042d,0x3cfca9c7,0x3ca3c5b9,0x3c52ff44,0x3b83ad57,0xba3a203d,0x37c0ed6c,0x3c4443a0,0x3c3c4f0f,0x3c0c85f8,0x3bb696db,0x3bc2bdfb,0x3c0754fd,0x3c6258c8,0x3be53dc9,0xb9751239,0xbc74a771,0xbc41d9a0,0xbc3e6d00,0xbc96acda,0x3c206fa3,0x3c490229,0x3a643785,0xbb40af16,0xbcaa3171, +0xbcba8f79,0xbd01c617,0xbc9211e0,0x3c8b5a45,0x3baa0fd2,0x3b9fc177,0x3c1f4fc1,0x3c8c613f,0x3cbba48e,0x3ca774e5,0x3ccad673,0x3cddfa6d,0x3d1cf643,0x3cd40c44,0x3c97abdd,0x3b9e9cfe,0xbb1f37c7,0xbbcec1eb,0xb9cc316c,0x3c39498b,0x3c570d36,0x3ba76e14,0x3c0e6d31,0x3b02bd5e,0x3c895c78, +0x3c009abe,0xbd68a562,0xbc0d8de0,0xbc3d4853,0x3b675c2b,0x3c8dc521,0x3d0dc5f4,0x3cef36f5,0x3c29c4db,0xbd05e665,0xbcea5a6b,0x3d1b96c3,0x3c06ec4d,0x3bedc33d,0x3c783cd7,0x3c0bdfbb,0x3bc8172c,0x3bdc18e5,0x3c1c6eee,0x3c4d4c64,0x3c2a2f4a,0x3cf149f3,0x3d058064,0x3d1a9954,0x3cab4b59, +0x3c2df7d7,0xbb5024c9,0x3bcac413,0x3bf463d4,0xbbe3e2ab,0xbb4b11db,0x3b094df1,0x3b231899,0x3cd44b6f,0x3cda600e,0x3ccaf9fb,0xbd39db54,0x3c2251f2,0x3c824ec5,0x3c06678f,0xbc4a4901,0xbd8629ce,0xbd47321e,0xbd36afd4,0xbc534460,0xbcb56c32,0xbcb24965,0xbc816aa0,0xbcbb0ee3,0xbc90a6fe, +0x3b227854,0xbbbcf0c1,0xbbc84965,0xba5bfba0,0x3bfef8b7,0x3c741753,0x3cbc1a61,0x3c608cc3,0x3c4fd556,0x3b9be31b,0x3c092bc3,0x3c3701db,0x3bab78a3,0x3960dffa,0xbb9fc68c,0xbbe3470c,0xbbbc38f8,0xbc393aa5,0xbc4837ea,0xbccf458b,0xbcbb144e,0xbc5fa307,0x3b33cabb,0x3c17e1ef,0x3d2a6f8c, +0x3d0d8b7e,0x3c2c6e2c,0xba81a485,0x3ade720e,0x3b9eb34e,0xbc476e2f,0xbcfa0221,0xbcf7fc51,0xbc8ff1c9,0xbc7633c4,0xbc3aea0e,0xbbf2c135,0xbb546376,0xbb411292,0x3b99fe81,0xbac1285b,0x3b86b47b,0x3c9b6bd3,0x3c2b3e2c,0x3c0792f6,0xbb320b7f,0x3af2533c,0x3bd70eba,0x3bad240e,0x3aaa71e9, +0xba799107,0x3b0cef25,0xbb7b304e,0xbc5a7a24,0xbc918246,0xbc703683,0xbca4f7b4,0xbd018dc3,0xbb1d311e,0xbcedd58c,0xbd363ad5,0xbd5b4cea,0xbd3492d4,0xbc0ad011,0xbb96ee5c,0xbaed8e71,0xbb99cc96,0xbcc9ce62,0xbcec9100,0xbc2a53a0,0xbc66ee17,0xbbe6fdce,0xbab3afd4,0x38b6b08a,0x3ad69deb, +0x3b8c1251,0xba029cc4,0x3b98352b,0x3ca4cf39,0x3b835ef2,0x3b15ea8e,0xba18bd10,0xbb271419,0x3b02ec33,0xb9cb7b25,0x3aa6f720,0xbafee2fd,0xbb5fbaee,0xbc2bb572,0xbca89a72,0xbd008136,0xbca74178,0xbceff941,0xbd2f91be,0xbd1e618f,0xbd90eb83,0xbde3d5e2,0xbdfd9f53,0xbddb20b4,0xbd8099ed, +0xbd8b35ce,0xbd78c4f9,0xbcbf3a77,0xbd15ed2c,0xbcb11d78,0xbc12c8d1,0xbc266fe7,0xbc866be5,0xbc9da5bd,0xbcae5777,0xbc8ff27e,0xbc60758f,0xb9a56039,0x3bc0f120,0x3cdf7b02,0xba58dbba,0xbbff5b4d,0xbbf7e682,0xbb4c98bd,0xba6cf056,0xbac5394c,0x3b668750,0x3b05b5b0,0xbbbdfd08,0xbc27942c, +0xbc809a3e,0xbcbdb644,0xbcc29951,0xbcd52355,0xbcdc7e22,0xbd1d46a3,0x3df37ba1,0x3de369b6,0x3d4c40a6,0x3c0fd705,0xbd634efa,0xbd987c58,0xbd8a1bcb,0xbcf248d7,0xbd046e84,0xbd2136b3,0xbd345fa2,0xbd134b05,0xbcdfe2d7,0xbd0a79f5,0xbc8a077c,0xbbb731ee,0xba5fc527,0xbc10e257,0xbb9d7b28, +0x3bdd93a3,0x3c099bf4,0x3c3507fe,0xbbfddba1,0x3b1db6b8,0x3a9a3cb5,0xbbbdc14f,0xbbcd364e,0x3a112267,0x3c0879a1,0x3c35b9f2,0x3c8ca61c,0x3cf244d0,0x3d955f7b,0x3dcaf91d,0x3dc6e736,0x3dd00c72,0x3d9a2ae8,0x3d82b910,0x3d885461,0x3d606c0e,0x3d029649,0x3b8f9a37,0xbd0e64a5,0xbd90c4e0, +0xbd8dbcd0,0xbd828297,0xbd482326,0xbd415e23,0xbd333a17,0xbd0fee94,0xbd3e64da,0xbd3cdbb0,0xbd132743,0xbd0ccfc5,0xbce03375,0xbc41feba,0xbbd4ae67,0xbbb0e313,0xbb9b3d11,0x3bbd9582,0x3c1b94a0,0x3c9a58de,0x3cc7612d,0x3cf01671,0x3d21b364,0x3d23aafe,0x3d3048b0,0x3d4e4745,0x3d45dadb, +0x3d455b33,0x3d6b56b0,0x3d8543d6,0x3d9073a9,0x3d9ceb66,0x3db1b85e,0x3da96437,0x3dc295de,0x3d8ebb51,0x3d637531,0x3cf2131a,0x3c42c081,0xbbe0cf80,0xbcc8e21f,0xbcae0827,0xbca84341,0xbc8ccece,0xbcbc3ae6,0xbcb3afe2,0xbcb5cb96,0xbca6dc70,0xbc89369c,0xbc3edc01,0xbb8b83ce,0x3b762226, +0x3c0800ff,0x3c670344,0x3cabb056,0x3ce26b25,0x3cd74ddc,0x3ce829b3,0x3d0665a6,0x3d1ec504,0x3d2f2355,0x3d3a0799,0x3d55b1af,0x3d5a7d7a,0x3d666c5e,0x3d83ad1e,0x3d69d8c3,0x3d7df3fc,0x3d8888b4,0x3d9cdeeb,0x3db06532,0x3dad5885,0x3db16d98,0x3db8bd54,0x3d90a0b1,0x3d42417f,0x3ce48888, +0x3cb150ec,0x3c8e5fb8,0x3c43c3ff,0x3c4f68c6,0x3c1f12e0,0x3bd5c4b7,0x3c072324,0x3be8bc74,0x3bd7b946,0x3c4c1eeb,0x3c8d32c1,0x3cb93a89,0x3cd63f58,0x3cec9fe2,0x3d02e15a,0x3d09a172,0x3d194be8,0x3d0a380d,0x3d23b5c6,0x3d21ad5a,0x3d3bd950,0x3d3d51a8,0x3d3d01dc,0x3d497f04,0x3d5bcbb7, +0x3d8b15ed,0x3d8ebabf,0x3d8b2998,0x3d76d265,0x3d4ec17a,0x3d54b80d,0x3d32507e,0x3d312009,0x3d35fa56,0x3d578fc1,0x3d682025,0x3d67955b,0x3d63fa19,0x3d5fae95,0x3d4bf645,0x3d3c5896,0x3d3cf376,0x3d27354f,0x3d139c9c,0x3d0d2851,0x3d130c7a,0x3d1cb013,0x3d1f972c,0x3d277ee1,0x3d2d891a, +0x3d2f2ffa,0x3d45962d,0x3d48e14b,0x3d5ada4e,0x3d6a4d3e,0x3d71a47a,0x3d71431f,0x3d821414,0x3d7fd9d1,0x3d84ccfe,0x3d915a3d,0x3d399486,0x3d41690a,0x3d44676b,0x3d4850bc,0x3d4c6c3e,0x3d579b4d,0x3d5f5b19,0x3d6925fd,0x3d5bb71f,0x3d4992c1,0x3d3a7dae,0x3d31e695,0x3d298f2b,0x3d2546e3, +0x3d22294d,0x3d20c60b,0x3d1dd56d,0x3d1aa7fc,0x3d18f2b6,0x3d14802d,0x3d193765,0x3d1cc8a8,0x3d1b5f01,0x3d26c1da,0x3d24f96d,0x3d1c623d,0x3d219896,0x3d2013d0,0x3d22a766,0x3d22213a,0x3d22e615,0x3d2ac250,0x3d33bf99,0x3d327f04,0x3d2dd27e,0x3d33faa2,0x3d93b6fa,0x3c37f17d,0x3be70a1d, +0x3bd88d38,0x3bda4ff2,0x3bcda24d,0x3bb249cd,0x3bdb9fc7,0x3be4c4f9,0x3bc45176,0x3bdb829f,0x3bca8d3b,0x3b6481a8,0x3b8a5962,0x3b987470,0x3bc0d670,0x3bd2c550,0x3beb29ec,0x3bee5768,0x3c00c108,0x3c03fe8a,0x3c09f82a,0x3c082254,0x3c004fbd,0x3be378d3,0x3bee9cd8,0x3bdc47e3,0x3ba94786, +0x3bbb2ace,0x3bcd4179,0x3bf772ea,0x3bcacce3,0x3bb52d3e,0x3bd6ea9d,0x3bb8b50b,0x3be63948,0x3c1360b2,0x3bd6acde,0x3baedd67,0x3b849bd7,0x3bba0e62,0x3bd7259f,0x3bc4c073,0x3c4ff3ea,0x3c4bb4a1,0x3bcfce6c,0x3c1b35f5,0x3bbb1509,0xbb33ebc2,0xbb5cd135,0xba1a1953,0x3bcc5ba4,0x3c052884, +0x3c28da43,0x3c2a7b0d,0x3c3964d1,0x3c506ab4,0x3c6d9218,0x3c7ca296,0x3c82d25f,0x3c561da5,0x3c2d1d8c,0x3c0777f2,0x3bd4cb66,0x3bf3b4f4,0x3c122d85,0x3c6d4031,0x3c195e39,0x3c024e83,0x3c2d4c66,0x3bbd23b8,0x3c12ba9a,0x3ca935f0,0x3c3dca11,0x3be3518f,0x3b9c3044,0x3bbb53b5,0x3b9b8891, +0x3a9c4b60,0x3c1918a8,0x3c44efd1,0x3b10a5ff,0x3c26c971,0x3b63ba6d,0xbc43d95a,0xbc44c531,0xbc1c31a8,0x3b0d509b,0x3bc17d4f,0x3c274222,0x3c3c99d6,0x3c6102dd,0x3c867da0,0x3c90d32b,0x3ca6d7ec,0x3ca836e9,0x3c825b20,0x3c5d2c54,0x3c1e7f10,0x3baeb71c,0x3bbb51dc,0x3c15d437,0x3c964e67, +0x3c12d63d,0x3bebda21,0x3c4a4353,0x3b97b84a,0x3bfec44c,0x3ce9fd44,0x3c477686,0x3b97e543,0xbb87ecb2,0x3af62824,0x3b79596a,0xb8d675b0,0x3c8c38a5,0x3c9e8357,0xba9b8a0f,0x3c696d47,0x3ac887c6,0xbcdcb130,0xbcd86859,0xbcabb4fc,0x3adb9f00,0x3bdd001c,0x3c4c0c82,0x3c645d18,0x3c8bab55, +0x3caf4cc3,0x3cc98dad,0x3cf689ad,0x3d02bb7a,0x3cd39f7d,0x3c95eb26,0x3c4746cb,0x3ba2c02e,0x3b28aae7,0x3bf91fb1,0x3cd04da8,0x3c3358f8,0x3bfa757c,0x3c82a784,0x3aca9393,0x3bed0f0f,0x3d379958,0x3c8e4658,0x3bf1f31d,0x3b8d0bca,0x3c08b44e,0x3a70ec3b,0xbc15ba93,0x3be94afa,0x3c12e1e3, +0xbb0012eb,0x3c4ceadc,0x3a8a9790,0xbcfa8dc2,0xbd097d2b,0xbced8a5a,0xbbae7b30,0x3b5f19c7,0x3c37daa8,0x3c6a40b0,0x3c960e6b,0x3cc78fc0,0x3cdfbaa9,0x3cf569bb,0x3d042223,0x3d00af1c,0x3cba97a0,0x3c74a076,0x3bcaf233,0xbb0c0d3d,0x3b0c23a9,0x3c9cb8ef,0x3c381fcb,0x3c109fee,0x3c5e5c28, +0xb90eb6c1,0x3b862096,0x3d3d5dee,0x3c4ed855,0xbcb7bfac,0xbcae04be,0xbb37cc15,0x3c9e9e0d,0x3d24c40a,0x3d109ba2,0x3d067c7a,0x3cea18ad,0xb8984add,0xbc2e6dad,0xbc0427fe,0x3b2183ef,0x3c081a37,0x3c54c5f5,0x3b8084c3,0x3a12625e,0x3baeb235,0x3c4f60fc,0x3cb076ad,0x3cb3de5d,0x3d2cd0b2, +0x3d32ce16,0x3cdf44a7,0x3cb39106,0x3c641cb3,0x3b771525,0x3c3cdb0e,0x3c1060a9,0xbb532dee,0xb991a710,0x3c20cc3a,0x3cc11fd5,0x3d0641e9,0x3cae6989,0xbbcfa70a,0xbc8048ab,0xbc1ebce0,0x3d937ac2,0x3c66ca1b,0xbca43857,0xbcc3169f,0xbd804543,0xbd721038,0x3c513d44,0x3a678671,0x3c34ca2a, +0x3c2ee674,0xbb1924d2,0xbc56e0f7,0xbc4129c2,0xbc42d753,0xbbf49531,0x3a4fb637,0x3bfea4ab,0x3c507631,0x3cb1c0bc,0x3c0f9c4d,0x3c028dda,0x3c57ff95,0x3c311165,0x3c3faf70,0x3b964258,0xbb5e5c7a,0xbb973b4a,0xbb11d4f0,0x391d64d8,0xbb3eb4a7,0xbc226424,0xbc117e5d,0xbbd8fb4d,0xbbbd7b4e, +0xbcb41fa3,0x3c9e4cdc,0x3d3c35e3,0x3ba4edc4,0xbb800a70,0xbc2a7a9d,0xbc83831b,0x39e60ce3,0x3c72290b,0x3b01354a,0xbb1d93b1,0xbb0ad1c5,0xbc0856f8,0xbbf9b0b6,0x3add70f1,0xb7cfe51d,0xba1123fa,0x3bfd20e6,0x3c0fdfd1,0x3c8212d8,0x3d09e7eb,0x3c14c50e,0x3bbddf88,0x3c797a99,0x3c2bc610, +0x3c11d9c1,0x3ba84e03,0x3baaf51e,0xbabacf6c,0x3a465ac2,0xbb5d76f0,0xbbfeea65,0xbc54ac99,0xbc539c12,0xbc9b2963,0xbcc56ba3,0x3bab4b7c,0xbd08c4cb,0xbd2ec8e8,0xbc362508,0xbb8778b9,0xbcb9e1be,0x3c9d7700,0x3ce6da29,0xbc322a3f,0x3bd92fa9,0xba34543e,0xbc04f9b3,0xbc9cdea1,0xbc906a50, +0xbbbce9b5,0xbc1009c7,0xbb9e5ce2,0x3b469b9e,0x3c1744d8,0x3c94a461,0x3d19befa,0x3c13dc91,0x3b0131b4,0x3c16ffde,0x3bf38666,0x3bcb5415,0x3b49ae6d,0x3b4795da,0xb9e70025,0xba2c07a6,0xbc2d9693,0xbca1bff4,0xbca03489,0xbc90f369,0xbcf4edc2,0xbd777aef,0xbd1b487d,0xbdb111c1,0xbd2f6fe1, +0xbb8df4b9,0x3b577aba,0xbd699679,0xbd3bbc34,0xbd4a2b88,0xbd22c704,0xbc826998,0xbb623eb2,0xbb12419f,0xbc508a62,0xbca58804,0xbc97dbf7,0xbcc69982,0xbc7aaa61,0xbc408735,0x3ac13e12,0x3bd91604,0x3c9cdb57,0xbac9b98c,0xbb7a56d3,0xbb26dc70,0xba8c4ea6,0x3b46bf7b,0x3bc812fe,0x3a92b21a, +0x3a848249,0x3a7ff531,0xbb6c5df8,0xbc251944,0xbc252c23,0xbc32630e,0xbcc1a1d2,0xbd53180c,0xbd93f8c9,0x3bb8643a,0xbd86becd,0xbded42d1,0xbdf4fb21,0xbd8dddbb,0xbceee4d6,0xbb1b7dcf,0xbc87bb59,0xbc82c953,0xbc8cd0e0,0xbbe5f3a4,0xbc874030,0xbca1afc6,0xbbdf3af8,0xbc933f9c,0xbca39d9f, +0xbc836ba1,0xbae51575,0x3bddc5b2,0x3c555a8b,0xbab05082,0xbb727f11,0x3c4cb4a6,0x3c07501b,0x3b4628cd,0xbbe74979,0x3b3d98b8,0x3bc1c3f7,0xbb31be0f,0xbc12611e,0xbc1bf77d,0xbc423f24,0x3b3d563d,0x3d0572e5,0x3d1987b6,0x3cae7108,0x3db43b22,0x3d9f3ff9,0x3d77d391,0x3ce7252a,0xbc9c712a, +0xbd778bb1,0xbd9c2afa,0xbd8a6abf,0xbd4edf9e,0xbd132746,0xbcef300a,0xbcb44332,0xbca6dfe9,0xbc9cae11,0xbc9a6534,0xbca3c16b,0xbc6f7254,0xbc9892ac,0xbc80098f,0xbbde78c0,0xbc95bb2b,0xbc53e7d8,0xbc02ec2e,0x3b86babf,0x3c8a615f,0x3ce30b15,0x3cca9ce8,0x3cd9bbb4,0x3ceda4e0,0x3d356382, +0x3d51748d,0x3d7fb1fc,0x3d61d67a,0x3d53504b,0x3d9b0af4,0x3d9294a8,0x3d9f413e,0x3d9414b3,0x3d6c4b11,0x3d22fa55,0x3ce6540f,0xbb0de88e,0xbcb2ec8f,0xbd10d037,0xbd201cbe,0xbd284e30,0xbd543ff0,0xbd1c56fb,0xbd0c4ef8,0xbcf38771,0xbce57b81,0xbcf1ecd5,0xbcb5b119,0xbca49f6e,0xbc6c4d76, +0xbc08868c,0xbb6c2e1f,0x3993c77c,0x3b2cfccd,0x3c3abd77,0x3c7b1e33,0x3ca333df,0x3cd27a77,0x3d02d9f8,0x3d1ca411,0x3d469b55,0x3d633164,0x3d84a271,0x3d7a1605,0x3d878f1c,0x3d92ff78,0x3da01f9b,0x3d4a114b,0x3d4767a5,0x3d32495d,0x3d318426,0x3d312881,0x3d0cb016,0x3cbbafea,0x3ba01da6, +0xbbb2c2eb,0xbc93391c,0xbd0f578f,0xbcee77e9,0xbcfff0cc,0xbcdda19b,0xbcbbaea8,0xbca86195,0xbc89c269,0xbc2ce2ed,0xbc01ec84,0xba460aa3,0x3bb406a7,0x3c0f089b,0x3c55102c,0x3c6db16e,0x3c8ca7c2,0x3ca59239,0x3ceb84e5,0x3d09127e,0x3d344c3e,0x3d346142,0x3d4c57f0,0x3d5f51fa,0x3d6060e4, +0x3d566cca,0x3d4eef57,0x3d3e404d,0x3d70262d,0x3d359eb3,0x3d33acda,0x3d19b0b3,0x3cf210c9,0x3cfddd46,0x3cf29e0d,0x3d122780,0x3d11d5f7,0x3d142ad7,0x3d1aea5c,0x3d06ef8d,0x3cea1da0,0x3cb24efa,0x3c9e88f7,0x3c926ba3,0x3c7429d8,0x3c349dfb,0x3be64f5d,0x3b9a307a,0x3c5d7f2f,0x3c8719b6, +0x3ca8a065,0x3cccb9a4,0x3d02e927,0x3d0c9a45,0x3d1e8bdf,0x3d19898a,0x3d2df31b,0x3d3f8921,0x3d3d6d7e,0x3d60ef61,0x3d57d948,0x3d50d8fd,0x3d6ca940,0x3d579f12,0x3d190555,0x3d070c3f,0x3d0ee688,0x3d0eede1,0x3d0fcacd,0x3d13e58a,0x3d0bb8a0,0x3d033c00,0x3ce70f72,0x3cd1f442,0x3cbc205a, +0x3caf36e9,0x3cac6553,0x3cab6909,0x3cb53eb9,0x3cb7d025,0x3cbf857c,0x3cca4808,0x3cd389e6,0x3ccaa3f7,0x3cfaebfa,0x3d0fd38e,0x3d24508c,0x3d061299,0x3d120ed2,0x3d26f140,0x3d31e0a1,0x3d32785d,0x3d363762,0x3d3cbbab,0x3d3ab0bf,0x3d3e37ce,0x3d2da270,0x3d1a7d03,0x3d36bab5,0x3d28fc36, +0x3d6b310a,0x3c662293,0x3c23250e,0x3c210332,0x3c10b191,0x3c03641e,0x3bf3d761,0x3c1086cb,0x3c12930a,0x3bfa8d71,0x3c12549a,0x3c0b84a6,0x3bba1018,0x3bcc7952,0x3bd41a2b,0x3bcd8318,0x3c0162ae,0x3c114887,0x3c1256c2,0x3c1c7ed6,0x3c228d1f,0x3c3061ec,0x3c285589,0x3c1e76f9,0x3c0d1625, +0x3c0f8e0e,0x3c0be50e,0x3bffb5aa,0x3c04554a,0x3c0ba72f,0x3c195f7f,0x3c0b36aa,0x3c017661,0x3c11e40e,0x3c01329e,0x3c0f7c65,0x3c3f84ff,0x3c188750,0x3c339f0c,0x3c1d2fd3,0x3c2b8eaa,0x3c28e202,0x3c07ecd2,0x3c60156b,0x3c655cb0,0x3c09dc58,0x3c4e037e,0x3c25678b,0x3b155379,0x39d8ac93, +0x3a2bbcfe,0x3b3d0a67,0x3c07193a,0x3c455b00,0x3c46be6a,0x3c5c7879,0x3c759332,0x3c92d6d0,0x3c8afd2f,0x3c84a86c,0x3c4a1a47,0x3c39a689,0x3c1f26d2,0x3c18b506,0x3c2ca4fd,0x3c411697,0x3c675fe5,0x3c42874c,0x3c265bb5,0x3c4c9589,0x3c0129a2,0x3c2fc98a,0x3cbdc4a4,0x3c80a7ba,0x3c7cb28b, +0x3c6fee09,0x3c33b679,0x3c0683ce,0x3bb668e8,0x3c4e5132,0x3c66a0e0,0x3b8145cd,0x3c6a818d,0x3c1928e7,0xbbbe6f3b,0xbbd3ea9d,0xbbf307d9,0xbb96b9f3,0x3bb67777,0x3c3a9224,0x3c567fa7,0x3c80f859,0x3c97c0a9,0x3cc288ba,0x3cb51fb1,0x3ca9973c,0x3c651c84,0x3c548f15,0x3c342d07,0x3c08e4f8, +0x3c1dab70,0x3c3f4078,0x3c8d0209,0x3c43765e,0x3c2b8dd0,0x3c62cd99,0x3bdb7a37,0x3c2f1c5c,0x3cfc514c,0x3c94055a,0x3c770916,0x3bfb7a06,0x3c2b6db5,0x3c44de2d,0x3b71aff1,0x3c8e8ef0,0x3c94d047,0x3adaf73d,0x3c8f61c2,0x3c11dc9a,0xbc591ee3,0xbc9f202e,0xbca76a6d,0xbc7a81c6,0x3b59689e, +0x3c591b1c,0x3c70fbd0,0x3c9dd376,0x3cc4fe23,0x3cfb4e92,0x3cfd0a52,0x3ce53013,0x3c90cd12,0x3c8676c0,0x3c53e998,0x3bf5fdd6,0x3bc2f0ee,0x3c2cf140,0x3cc49333,0x3c3ae92b,0x3c22c822,0x3c8d8f95,0x3b3bd9a1,0x3c1baca5,0x3d3f38cc,0x3cd3a7a9,0x3cbd3a1a,0x3ca2363c,0x3c77e4ba,0x3b5c93c4, +0xb9c88f65,0x3c359460,0x3c67fc83,0xba13e450,0x3c885a36,0x3c1d0458,0xbca6202c,0xbcbf4c76,0xbcdd7393,0xbc9f1c38,0x38c4ca30,0x3c46cabc,0x3c7fa19b,0x3ca3b420,0x3cdb2472,0x3d168c42,0x3d0c6896,0x3d097ae6,0x3cbcffe7,0x3ca8b361,0x3c8f24d2,0x3c30c4f6,0x3ac292da,0x3be3f323,0x3cde04e7, +0x3c585b24,0x3c2eb7b2,0x3c9d68fb,0x39ad7b44,0x3c0e1ca4,0x3d59ac1b,0x3ccac1ff,0xbcad2392,0xbbfe5150,0x3c261e59,0x3d16a3a6,0x3dae2d51,0x3d16ad44,0x3cac53e2,0x3c1564cf,0x3cc03b2a,0x3ca5470a,0xbc8fd294,0x3c96b44c,0x3ca5a853,0x3b4643f1,0x3baba01f,0x3b4a4c64,0x3ba504b6,0x3bc4b682, +0x3c5ca5de,0x3cf067f0,0x3d013047,0x3cf5e52a,0x3cc18e28,0x3cc3b917,0x3ca1be15,0x3bf38f23,0x3c577971,0x3beeb403,0xbbf167da,0x3a2caf30,0x3c94bea4,0x3d0c3cfe,0x3d15b9de,0x3c7921b6,0xbce5e7bb,0xbcd99da6,0x3b4cb376,0x3d99792f,0xbba31f9f,0xbce1ee10,0xbcaf18d3,0xbd011896,0xbc96fb90, +0x3ceca3cc,0x3c40b01c,0x3c0efcd2,0x3c957999,0x3c925a96,0x3c31ce4c,0x3be688e3,0xba3fd97e,0xbaadf97f,0xba356dbf,0x3c03191c,0x3c3ad5b9,0x3c9f8347,0x3c7d4e95,0x3c810872,0x3c956802,0x3c645a32,0x3c2cc5b2,0x3c3216bc,0x3a301588,0x398e2a37,0x3b997a90,0x3c157b71,0x3bdae934,0xba937a7a, +0xbaa95573,0xbb827a5e,0x3bb60b41,0xbc79f718,0x3b8d52b4,0x3caa722a,0xbc2a6939,0xbc7dbacb,0xbc92a779,0xbc310e3d,0x3b28b4a8,0x3cea3074,0x3c8b33e5,0x3c4debce,0x3c597fbb,0x3a992746,0xbb7b40a2,0x3bbf9d4c,0x3a0fa246,0x3b12d873,0x3b5c0feb,0x3c50a1ee,0x3c87c015,0x3cbef38d,0x3c3939dd, +0x3bf348c2,0x3c903ff0,0x3c7a8a28,0x3bf4bc45,0x3b9bb130,0x3bdb0ec4,0x3b57f41b,0x3a2971b5,0xbaa137fa,0xbb7461f1,0xbba80214,0xbcad2e57,0xbcb1620e,0xbbf1e813,0xbc0a0956,0xbcb1e863,0xbc0bb845,0xba84a562,0xbb1f33f8,0x39ca9e32,0x3bf7ab70,0x3c0da565,0x3ba5f49c,0x3b7f3b99,0xbb1e73a8, +0x3ae47b1a,0xbc6da98a,0xbc667bd5,0x3b5111a8,0x3ba7d494,0x3c01287c,0x3be3bd0b,0x3c8c32a2,0x3c979024,0x3c9ea22a,0x3c4fb6d8,0x3bf43ade,0x3c6756be,0x3c4e001e,0x3c133e0f,0x3b5da1a6,0x3bb1e4f2,0x3ad0bdcd,0xba916688,0xbbec10e5,0xbc5d8a7e,0xbb5b72d6,0xbcb43cdf,0xbcebd60b,0xbd1c28e9, +0xbcd9dcc3,0xbd11c13b,0x3bc0bff3,0xbb9bc2d0,0xbc254e43,0xbce67d2a,0xbd21c22e,0xbd2a1815,0xbcb68eb0,0xbc9c52b3,0xbc83c4a6,0x39e04487,0xbc2bfd99,0xbc0d0c6d,0x3b1578b9,0x3bc999ab,0x3bf58b92,0x3b391af0,0x3c34729e,0x3c5f9b9e,0x3c10afda,0x3c51600d,0x3c66db98,0x3c1374ef,0x3c09ca5d, +0x3c0579de,0x3c3752e2,0x3a9ea2dc,0x3a8fe64b,0x3b99b310,0x3bb16828,0xbb3f3d8b,0x39b99890,0xbc0fbf8c,0xbcc84cdf,0xbd0e0950,0xbd4abb32,0xbda31ab4,0xbe0b2367,0xbdd1be40,0xbdbeb5fc,0xbd0aadcb,0xbd08ce25,0xbca5accb,0xbc532b4b,0xbb8458cb,0xba674a8d,0xbc90194a,0xbc0e6ff8,0xbc765911, +0xbc92d4e5,0xbc4e13ac,0xbc1ed2a3,0xbb9ca82d,0x3c337cd5,0x3c589a28,0x3c469dfe,0x3ac8971d,0xba33bdf5,0x3c6011d3,0x3b679834,0x3b3ec423,0x3b7c7b01,0x3c1cca7d,0x3bd39247,0xbc000502,0xbccefde0,0xbcd6aacd,0xbce3b7cf,0xbd3cac68,0xbd051d18,0xbcb84627,0xbd2a5079,0x3d278f5b,0x3c85a2d5, +0xbc9276d2,0xbd14fc19,0xbd6a1b69,0xbd54ea4c,0xbd28fe23,0xbcd92390,0xbc98ea38,0xbc55909d,0xbcc4c473,0xbc3a493b,0xbc0f0840,0xbc0f1713,0xbbd2cfc5,0xbb1863f5,0xbb824632,0xbac90b37,0xb9af9272,0xb9a69a17,0xbab01b14,0x3ae38f8e,0x3c047320,0x3c10de69,0x3c3f9ca9,0x3c1280ac,0x3c3c7cae, +0x3c9bc26e,0x3cb5b9d1,0x3d175351,0x3d208747,0x3d2cd358,0x3d272c29,0x3d0f198c,0x3d25e210,0x3cf93055,0x3d58f566,0x3d28178b,0x3c171fb9,0xbba27043,0xbcde8989,0xbd10f8d0,0xbd43fe32,0xbd6343a1,0xbd4474cd,0xbd32eff3,0xbd3bb595,0xbd20439a,0xbd196251,0xbd09fc1b,0xbd07f084,0xbd0a1c53, +0xbd04a368,0xbcdd65bf,0xbca4d943,0xbc860706,0xbc4cd5ee,0xbba5e129,0x3b94817e,0x3c39e60c,0x3c8cab9d,0x3cad2ab4,0x3ce1e08a,0x3d01c355,0x3d0bc3cb,0x3d23bf40,0x3d3b04df,0x3d5f368b,0x3d54735a,0x3d6de987,0x3d82f4a9,0x3d7a0eb6,0x3d308e06,0x3d152835,0x3cc901ca,0x3c4d44a2,0x3a760a63, +0xbc76b554,0xbd017b92,0xbd510c49,0xbd4b6985,0xbd40e24e,0xbd4bf32c,0xbd2dac4f,0xbd31998b,0xbd21530f,0xbd192d85,0xbd1a8fdd,0xbd0c8b7b,0xbce4547b,0xbce2cf4f,0xbc8d5b55,0xbc27b143,0xbb137ee7,0x3b404835,0x3c09a161,0x3c6fc6d3,0x3cb11b5e,0x3cc6cff9,0x3cd09060,0x3d098197,0x3d092cd8, +0x3d262949,0x3d2f0674,0x3d39ad9e,0x3d4d35f8,0x3d506edd,0x3d2772c6,0x3c990609,0x3b902b91,0x3b8c8dec,0x3aaae800,0xbab41f60,0x3b3854ed,0x3ba3d758,0x3bd2ebd9,0x3bd01cea,0x3a697940,0xba95dd5a,0xbbc15124,0xbc12efa6,0xbc77ac1f,0xbc16323a,0xbb6df4c0,0xbac6958d,0x3b2365db,0x3bed50a4, +0x3bd572a1,0x3bc7940e,0x3b1642fa,0x3af5eeca,0x3a92a509,0xb96274e1,0xbb5352b8,0x3b2d2d7b,0x3ba38779,0x3c2d4f92,0x3c718312,0x3c4cef52,0x3cd5065d,0x3c9406ac,0x3c58ce12,0x3c942c43,0x3c1a80d9,0x3c0b6da5,0x3b60df6f,0x3b855c34,0x3b1191a8,0xb94e474f,0xbb3db520,0xbbeb0349,0xbc30bab7, +0xbc417d03,0xbc35d00a,0xbc312281,0xbc31f994,0xbc273113,0xbc2a3eb0,0xbc11c85f,0xbc104868,0xbc092f25,0xbbeddb8b,0xbbc91a2e,0xbb973a56,0x3a934abe,0x3bd33025,0x3c4cf72b,0x3b568109,0x3c0a200b,0x3c78bf22,0x3c8cfa04,0x3c8bd17b,0x3c91afc1,0x3ca4484b,0x3ca784ce,0x3ca65356,0x3c4e287e, +0x3c09b610,0x3cab0ee7,0x3c7454ff,0xba5a199a,0x3c53ffb2,0x3c0d5786,0x3c02de44,0x3c0c25c1,0x3c062acd,0x3bfa8315,0x3c02663b,0x3bfff093,0x3be93810,0x3bfa4b48,0x3bf22d6c,0x3bb9ac32,0x3bcc27ae,0x3bd8a50e,0x3bd5226f,0x3bf3f5f5,0x3c03afcc,0x3c023300,0x3c0c4dab,0x3c127c87,0x3c1c34e1, +0x3c1b8b7a,0x3c18e169,0x3c146d31,0x3c0233e2,0x3c026445,0x3c06b783,0x3c11b8af,0x3c1618cb,0x3c135feb,0x3c185fc6,0x3c101527,0x3c0b2dd1,0x3bfa6804,0x3bfa493d,0x3c2c1c4d,0x3c180bfe,0x3c6ca61b,0x3c3380c7,0x3c4b3968,0x3c437e51,0x3c219f44,0x3c3394e3,0x3c33a4c8,0x3c12dc25,0x3c206440, +0x3c080347,0x3b811e3a,0x3b32cdd9,0x3b2de8f0,0x3b7e013a,0x3bf12ca7,0x3c2b5fdd,0x3c26cf7f,0x3c4125e0,0x3c5837b2,0x3c7f4f28,0x3c75e651,0x3c5fb2d1,0x3c41b11c,0x3c1e205f,0x3c05bc94,0x3c0bdcc3,0x3c42bcab,0x3c55aba8,0x3c43cde7,0x3c5218db,0x3c25ead9,0x3c246235,0x3bfecf4c,0x3c1a15de, +0x3c8eb173,0x3c61cf62,0x3c884e37,0x3c443af4,0x3c66c7e6,0x3c518fc7,0x3c1ad6ff,0x3c2dfa66,0x3c184478,0x3bb21ae0,0x3c17c3f7,0x3bdd4df9,0xbb2a2bff,0xba8cb63b,0xbaec3e5c,0xba5a0180,0x3bc6b06f,0x3c1b7e2f,0x3c26c5d5,0x3c60b12a,0x3c808948,0x3cb24cc1,0x3ca377b4,0x3c8b21c7,0x3c68dbd6, +0x3c22600b,0x3c113b44,0x3bdc7fb5,0x3c4446dd,0x3c6825e3,0x3c5ab6ad,0x3c6d311c,0x3c4a6706,0x3c11ccb1,0x3bc2b898,0x3c058d6c,0x3cab692f,0x3c7d06ff,0x3ca5aebd,0x3c6690ea,0x3c8826c5,0x3c954424,0x3c22eb23,0x3c45645b,0x3c3887b9,0x3bd37f39,0x3c2ab61a,0x3b9bc01a,0xbbc2b0da,0xbc21de66, +0xbc3b96e5,0xbc31e8f8,0x3b318dfd,0x3c27cad3,0x3c260f24,0x3c8462e6,0x3ca4b479,0x3cf17607,0x3cd196ce,0x3cac0daf,0x3c8171ef,0x3c37c740,0x3c226ad3,0x3b83050c,0x3c2ea962,0x3c63aaa3,0x3c93cdd0,0x3c726d39,0x3c451ce7,0x3c370b5a,0x3b4733e1,0x3bff92bc,0x3cfeb853,0x3cacef52,0x3cd51a5f, +0x3c8b8456,0x3c9fa4a2,0x3c6be016,0x3bf2ec8b,0x3c144ebd,0x3bf95898,0x3af23603,0x3c0e3e24,0x3bc90819,0xbc5ade58,0xbc36b221,0xbc5d14d4,0xbc372783,0x3b127bd9,0x3c0ccc42,0x3c28757f,0x3c8be874,0x3cc182a4,0x3d14bd34,0x3d06a15f,0x3cdd5a97,0x3c9ed1a8,0x3c79676e,0x3c7c97ba,0x3bdd2058, +0x3bbd56f2,0x3c3a18ce,0x3cc31355,0x3c9100f9,0x3c5f4c1d,0x3c49fd20,0x395bf156,0x3bd853f9,0x3d0e8af7,0x3cd6aec8,0xbc2e47b9,0x3b950f4b,0x3cad04c7,0x3d342bb1,0x3da1e2dc,0x3ce4f645,0x3c4cc28f,0x3bfe394a,0x3c0b14b1,0x3bb47853,0xbc93d259,0x3d0a7a39,0x3d1f7b87,0x3bd159cb,0x3c052699, +0x3bbd9185,0x3c4cebb1,0x3bd9a86f,0x3b950d94,0x3c5826d6,0x3c5887ee,0x3c58baf5,0x3c96eae5,0x3caf033d,0x3cb15ed7,0x3c49bd82,0x3c2ac85a,0x3b9ee6a6,0xbc102edd,0x3c0c1db4,0x3cf241ad,0x3d1a1528,0x3ce2ed77,0x3ba6548d,0xbd09453b,0xbcc4168b,0x3cd00ba0,0x3b8e6928,0xbc9776be,0xbcbb08e6, +0xbcc628d7,0xbc873b05,0xbc65e4f5,0xbc788d34,0x3b4cd15b,0x3c134683,0xbb9d80e6,0x3c9a0a8f,0x3ca62359,0x3c0fdaf5,0x3beaf91a,0x3bbc4945,0x3b46e7b6,0x3c7f877b,0x3c8b3a0a,0x3c7179a7,0x3caf84bd,0x3ca8ad2a,0x3ca799e8,0x3c7ba407,0x3c255513,0x3c210b1b,0x3b5b7f12,0x3ba90c2c,0x3c617e45, +0x3c3a9b7c,0x3bb7daae,0xbb8fba48,0xbb3b96a8,0x3aba1944,0x3b995e27,0x3c920f21,0x3bcefdfe,0xbc25474f,0xbcc52fea,0xbcce5f53,0xbcceeff7,0xbc3ee266,0x3af1c6bd,0x3cdfa5b2,0x3cdce9f8,0x3cb15b34,0x3b8abd35,0x3c4789df,0x3bf1f730,0x3b853c15,0x3bc10b66,0x3c25c215,0x3bacf131,0x3ca652fc, +0x3ca91dd1,0x3c028561,0x3c382f2f,0x3c2ce543,0x3c4ca453,0x3c89efc4,0x3bf630e7,0x3be78a72,0x3c015dbb,0x3bd38f64,0x3bad6786,0x39f7d1ad,0xba4b959a,0xbb790706,0xbc94f355,0xbc0fbbd9,0x3bc2f177,0xbae3a403,0xbb834f8e,0xbba5be97,0xba4b248b,0xba2b2284,0x3a2bcead,0x3bfdd2bf,0x3c2956c7, +0x3bfcd816,0x3c49fd88,0x3c0b3f75,0x3a47f77e,0x3b010163,0x3a131a69,0xbb258905,0x3c5cfad4,0x3c972b42,0x3c592f94,0x3cc78e2d,0x3cb27b35,0x3c1eda78,0x3c3f748d,0x3c31571c,0x3c36ba26,0x3c79bb55,0x3c0842f7,0x3bb1fd64,0x3bbe4ae1,0x3b90b47e,0x3ae2ff67,0xbab67780,0xbb835104,0x3c3c49c3, +0xbc9311d5,0xbc791b15,0xbc00c07d,0xbbd6d596,0xbc58864a,0xbce4d52d,0xbbabb604,0x3b305745,0xbc22b05c,0x396972c2,0xbbfb0831,0xbcec0448,0xbc9c6d1d,0xbc997ce7,0xbc33d031,0x3ab5852c,0x3bead3ff,0x3ae870c2,0x3c531e4e,0x3c69d5e7,0x3c69ae89,0x3c8547d7,0x3c80f54b,0x3c12d665,0x3c8c65e6, +0x3ca78f22,0x3c91fa26,0x3c87cc0d,0x3c4985f1,0x3c3fd7bc,0x3b7203e2,0x3b23e173,0x3bef41f5,0x3bede15b,0x3ad9f84d,0x3bf039ce,0xbc218583,0xbca31937,0xbc9fcaf6,0xbc8abbec,0xbd6d6dda,0xbd38771d,0xbc839f4d,0xbce5b5c0,0xbd1d36bb,0xbd28430a,0xbd15f7f4,0xbcfe9dc5,0xba3c6a20,0x3c07d099, +0xbbf24092,0x3b279dbd,0xbb810960,0xbb7b2173,0xbb88552a,0x39967dbf,0x3bf21f0b,0x3c835669,0x3c8339c8,0x3c0a9050,0x3c3b980d,0x3c1ac1a4,0x3c389b3a,0x3bffa657,0x3bfadc64,0x3c252155,0x3bab871e,0xbb861577,0xbc62bf90,0xbcd2590a,0xbcc2c6ff,0xbccd0287,0xbd25e60d,0xbd358f4c,0xbd3a1714, +0xbd52a152,0xbd057da4,0xbd46fa84,0xbd743c28,0xbd43d284,0xbcdfca41,0xbc206025,0x3b29b679,0x3c368757,0xbc3f8430,0xbc96fb8c,0xbc7c40d7,0xbc398f23,0xbc02b48a,0xbbe51bfe,0xbb0b23c3,0x3b43dcd9,0x3c3a5123,0x3c5d999e,0x3c4403a9,0x3a7c2ebd,0x3a859785,0x3b801112,0x3c4fa714,0x3c2ac081, +0x3c4199df,0x3c7d205c,0x3c4db34d,0x3c514734,0x3b856905,0x3beb50b3,0x3bcbfa51,0x3bb395eb,0x3c45eadd,0x3b86f4ed,0xbc784cd5,0xbcc12113,0xbb094821,0xbc50f842,0xbcfdc016,0xbd067a25,0xbd166c2b,0xbd03568c,0xbd02d7de,0xbcdb5515,0xbcf034fe,0xbce7d6f5,0xbcbd5226,0xbcd8dafe,0xbcdd68fb, +0xbce95304,0xbcbbe3d1,0xbc959687,0xbc4f25ab,0xbbd73c54,0xbb0a0900,0xbaf47d31,0xbb599ec0,0x3866be99,0x3bb38404,0x3c06125e,0x3c50c705,0x3c8522c0,0x3cb9e8f7,0x3cbbc63d,0x3cb2931b,0x3c988dbf,0x3c9f9c8e,0x3cd1f326,0x3cb17fbb,0x3cb9edcf,0x3ca1ba21,0x3c267624,0x3c90afe3,0x3ba3ee3f, +0xbba41195,0xbc7b2a27,0xbcfb3df9,0xbd150343,0xbd32bd4c,0xbd52c9a5,0xbd31379a,0xbd13d86b,0xbd090c67,0xbd03e5c0,0xbd05bd02,0xbd089522,0xbcf5cd6c,0xbce477ed,0xbcceadf2,0xbcaab634,0xbc8a1025,0xbc075928,0xbbbe05fd,0xbb37f916,0xbab816ad,0x3b4ae4de,0x3c00e38b,0x3c2bd907,0x3c6c0d7b, +0x3c7b7484,0x3cd5ce78,0x3cb4f1a2,0x3ccfaccb,0x3ca99999,0x3ca0da0b,0x3cdba12f,0x3cca6d45,0x3c7c53eb,0xbbce3013,0xbc363c9a,0xbc561c3d,0xbc607e5b,0xbc458b33,0xbc6f5fe4,0xbc80d126,0xbca8a9db,0xbcc5b5eb,0xbcf17d17,0xbd011187,0xbd097e5b,0xbd0da837,0xbd16848b,0xbd0271a4,0xbcdf1b35, +0xbcd1db3a,0xbcb33cee,0xbca34157,0xbca43b07,0xbc586913,0xbc52ab29,0xbc22af82,0xbc1b9d60,0xbc02afab,0xbbd37c51,0xbbc72080,0xbbc54cb5,0xbc004e91,0xbbbb770d,0xbbeb7bf1,0x3a873797,0xbb053d54,0xbc1421d4,0xbbdee66c,0xbc314e9f,0xbc231fd6,0xbc36ed1c,0xbc4cf85b,0xbc7a965d,0xbc94b6d5, +0xbcabdb3c,0xbcbe1107,0xbcd02a6a,0xbcc06a4b,0xbcb4b904,0xbcaf9846,0xbcad7944,0xbcaae3a2,0xbcaef210,0xbca7a2c0,0xbca8aaf9,0xbca776b1,0xbc9dea68,0xbc90585d,0xbc8cee3b,0xbc6d06df,0xbc537b3b,0xbc28de59,0xbc529e9a,0xbc2e00d1,0xbc08d4be,0xbbfb5036,0xbbe5f7df,0xbbbbf31d,0xbb911561, +0xbba36310,0xbbc37a7a,0xbc0c0d09,0xbc1122cb,0xbb9f2ba4,0xbbdc6b02,0xbce49bd4,0x3c3001d2,0x3bdb46aa,0x3bc3799e,0x3bdee45e,0x3bda0136,0x3bbcd2bc,0x3bc97739,0x3bc77c14,0x3bc5e507,0x3bc4f1ce,0x3bc90662,0x3bce195e,0x3bca113b,0x3bd3d2a1,0x3bda7304,0x3be03658,0x3be54c03,0x3bd9c67c, +0x3bdcb439,0x3bdeb21c,0x3bddd874,0x3bf198e5,0x3bf8f8f2,0x3c04a0e6,0x3bd8d40e,0x3bdbbf27,0x3be3b02b,0x3c0137f4,0x3c055a1c,0x3bf927b4,0x3c075e2b,0x3bf8514a,0x3bd3f444,0x3bcd981d,0x3bc78810,0x3bf72849,0x3bef5bd7,0x3c26c77a,0x3c08aeba,0x3c2e86b5,0x3c1ebc48,0x3bc7e743,0x3bfc578f, +0x3c09381d,0x3c0e3f9f,0x3bf7a3ac,0x3c01fc02,0x3c0b81a4,0x3bd713fd,0x3bcfb4cc,0x3beb0ae5,0x3c02f866,0x3c18de95,0x3c06c96b,0x3c0a5122,0x3c0f048c,0x3c144b05,0x3c2d04ab,0x3c293efb,0x3c2ff1cd,0x3bfb1b82,0x3bd79ea1,0x3bdac809,0x3c495ea7,0x3c575b46,0x3c218bbf,0x3c37b13c,0x3c067c92, +0x3be5bb23,0x3be219ab,0x3bf3655b,0x3c2a9a2e,0x3c0a296f,0x3c2d66f3,0x3bd8e3e7,0x3c2a0258,0x3c1de828,0x3b7569be,0x3bc75b2a,0x3bad29fc,0x3bc8f3a2,0x3bbfeb28,0x3bdc5f55,0x3c004b22,0x3bc57b61,0x3bd01d6d,0x3bd89371,0x3c19bdd6,0x3c1ccf2e,0x3c084c01,0x3c133639,0x3c0f2217,0x3c35451b, +0x3c611ea1,0x3c46bfae,0x3c64a6bc,0x3bfee41e,0x3beb7a2f,0x3bc4435b,0x3c5ab8d9,0x3c803b4e,0x3c32418b,0x3c5c3efc,0x3c3260ca,0x3b83fcab,0x3ba6cb90,0x3bac6221,0x3c24135d,0x3c17e786,0x3c2a1774,0x3c138aa9,0x3c6a73e0,0x3c6016a7,0x3abb8bdf,0x3bb0d93c,0x3c008d22,0x3c1bb25f,0x3bdd75ae, +0x3be8cee7,0x3c43816c,0x3b852fb3,0x3b64e6ce,0x3b3a6823,0x3c08ae04,0x3c29e320,0x3bf7c728,0x3c18bd00,0x3c216ff7,0x3c5d4454,0x3c809748,0x3c5de613,0x3c8d0a9c,0x3bef9297,0x3bdf3349,0x3a79898a,0x3c789956,0x3c8ef133,0x3c5c47b2,0x3c6b1650,0x3c2866ee,0x3bb72cc2,0x3b51b051,0x3baaabed, +0x3c6ebe1d,0x3c0fa82e,0x3c74e0fc,0x3bc8e699,0x3c301fc6,0x3c2198c5,0xbb0bb2ef,0x3b040231,0xb838d9ec,0x3b78b7f3,0x3b9c5473,0x3c0fed98,0x3c141827,0x3ba2ad50,0x3bb3af8a,0x3b93d9ea,0x3c2e3752,0x3c2efc62,0x3bfd3311,0x3c1d90cc,0x3c371f66,0x3c840b23,0x3cbbdeae,0x3c990101,0x3ca5bbf5, +0x3c43cd37,0x3c4171d1,0x3ac2d7f1,0x3c213766,0x3c82ac33,0x3c8b97ee,0x3c95df91,0x3c4df649,0x3b297095,0x3b045f73,0x3b6f8df2,0x3c658a6f,0x3c8cf75e,0xbc3ec776,0x3c984e6a,0x3cf819b0,0x3d21e14b,0x3d567630,0x3cd13dee,0x3ca8641d,0x3cb88fce,0xbbdd85de,0xbc7c0616,0xbc40cf54,0x3cb309a0, +0x3d019e99,0x3c3f6f29,0x3c697208,0x3c50a916,0x3c8493d1,0x3c31b6b9,0x3bb9d863,0xba96ac9b,0x3acc4369,0x3ba4308e,0x3c6d001e,0x3c858c0d,0x3c8fbad9,0x3cb64400,0x3bc5aad2,0x3a936005,0xbb87e3b1,0x3cab2f04,0x3d177e8b,0x3ccf41a8,0x3c4b51ea,0xbbb9c544,0xbcd6feb9,0xbcfea047,0x3d30cec4, +0xbd5c4a30,0xbc86db26,0xbc56483e,0xbc9c53dc,0xbc6982f3,0xbcd164f9,0xbd4a80f0,0xb9bdfb5e,0x3c73c812,0xbc779417,0x3c43e203,0x3c9592d8,0x3ca4970a,0x3c4c98b6,0x3c148eb1,0x3bebef63,0x3c8737e0,0x3c942548,0x3bf6ba84,0x3c7a0d72,0x3c81375e,0x3c7b62ca,0x3cb3c616,0x3c859af1,0x3c1e0b2d, +0x3bc4dc71,0x3c16de4e,0x3ca60053,0x3c54691f,0x3bc9eae6,0xbbda9fb6,0x3c129a00,0x3c64af23,0xbc04b8f8,0x3d54f9ba,0x3b29ee32,0xbd1e68f2,0xbc90f3e3,0xbc5a2136,0xbb4f766a,0xbbe0597a,0xbb7b9180,0x3b1a5a7b,0x3cc46e7d,0x3cd80e7c,0x3889b24c,0x3c8a8c39,0x3c1acf22,0x3b4390e7,0x3b29a8dc, +0x3bf910d6,0x3bb8831d,0x3c80879d,0x3c7f10c1,0x3adb4d9a,0x3b85b876,0x3b631278,0x3ba4a42f,0x3c4b2abe,0x3bb2d4bb,0x3c24d50e,0x3bd09866,0x3bcc6ffb,0x3c23533d,0x3b0a7c22,0x3b8211c1,0xba7711de,0xbb01bf7a,0x3c131754,0x3c08550b,0x3beaece9,0xbb80c51e,0x3b390792,0x3af2a0ab,0x3ba16161, +0x3c9b2788,0x3ba0189e,0x3c0c483c,0x3c702710,0x3c200e80,0x3bd9fe9c,0xbbd8c74d,0x3c13a8c4,0x3be4a943,0xb9d4d300,0x3b59efa1,0x3bcb8b1b,0x3bfe5e27,0x3c43670d,0x3c228082,0x3b31eddc,0x3b9f8d2a,0x3b2abcda,0x3b13ef01,0x3c16ae54,0x3b73b560,0x3be373a0,0x3b92156a,0x3b750795,0x3b704111, +0x3ab0b831,0x3b165d2c,0x3c1f0330,0xbb80f66d,0x3a845c64,0x3c0ef946,0xbb57090f,0x3ab0213c,0xbb74d7cc,0xbb398d80,0xbac69e88,0x3c377fbf,0x3be06324,0x3a5a72a6,0xbc91d0f2,0xbc8697fb,0xbcab2eaf,0xbcf94307,0xbc069c2a,0x3b8300a7,0x3bdb662c,0x3c05c525,0x3c3502ed,0x3c760561,0x3c58e001, +0x3c3dd2ad,0x3beb7e7f,0x3c2de5ce,0x3c32ac26,0x3c3ef4fc,0x3c6fae35,0x3c39f6e4,0x3c032b3f,0x3b6ea7fe,0x3a721df8,0x3b81cf20,0x3ab5701a,0xbb3932c5,0xbba768d2,0xbbece14d,0xbbc50b03,0xbc456f11,0x3b66da2d,0xbcdb19f0,0xbc0d329e,0xbb67bb66,0xbba997a5,0xbc5e87db,0xbcabd3be,0xbc942ffb, +0xbb9b1ede,0xbbd7cde0,0xbc0c2a62,0xbbfe4d4a,0xbb5af4ff,0x39230bc7,0x3a89b9e5,0x3c152f58,0x3c4fed0d,0x3c7f5239,0x3c50c635,0x3c018c52,0x3b31f92e,0x3c412c63,0x3c4a155a,0x3bb6d1ca,0x3be78526,0x3bba8c73,0x3c473126,0xbb09a28f,0xbc1729ff,0xbc2010ce,0xbc65d2fe,0xbc4ba489,0xbc9c664a, +0xbcdf14dc,0xbd171da4,0xbd61fba1,0xbd26c916,0xbd5501e9,0xbd4a3629,0xbd310f90,0xbd059e8a,0xbc9d154a,0xbbeefae8,0xbc0d5f3d,0xbcc0683d,0xbc892b6a,0xbc4e6074,0xbbd9a77b,0xbbba00da,0xbb3fa1d0,0x3b0da979,0x3b8376ac,0x3c150094,0x3c2861c2,0x3c74cf05,0x3c70a8dc,0x3bf33bf3,0x3c0ea673, +0x3bee97ea,0x3b8de393,0x3ba85d32,0x3bc3fbde,0x3c3df752,0x3bb39c2c,0x3b07613c,0xbc0f2329,0xbc62220f,0xbc89ba26,0xbcad12ca,0xbc175a63,0xbc41bd44,0xbcd0df51,0xbd1ef906,0xbd0b9d16,0xbd1b6196,0xbd14ad3d,0xbcfc08b9,0xbcceab1f,0xbc860895,0xbc364453,0xbc2858b5,0xbc1932c6,0xbc1fbf4a, +0xbbf5a3ac,0xbc31b5e4,0xbc224128,0xbbe4d4f5,0xbb42d05c,0x3ac91f1c,0x3b5024fb,0x3b6d2e0e,0x3ae8d4f8,0xba9d7482,0xb904422e,0x38c1b034,0x3ae5514c,0x3b45c086,0x3bb484b6,0x3c1cdde2,0x3c3ef815,0x3c1c347b,0x3c090eca,0xb9407632,0xbb83ef79,0xbbe1440e,0xbbf8e215,0xbc1a65e8,0xbc6fff87, +0xbcd3919f,0xbc1d6f2d,0xbca643c1,0xbca7ffe5,0xbcae12b8,0xbcc08ecf,0xbcb499fa,0xbca0f385,0xbc6a173e,0xbc802eeb,0xbc899e1d,0xbc8d2c96,0xbc811993,0xbc716e42,0xbc8b1159,0xbc6e7319,0xbc472c8a,0xbc11bbbd,0xbc36152e,0xbc45e3f9,0xbc4e3ed4,0xbc1efbf0,0xbbd2cd93,0xbb80592a,0xb93b7b22, +0x3b524628,0x3bb1dc60,0x3bdbe78a,0x3bfa88d0,0x3c6e3fd8,0x3c070453,0x3c068412,0x3acaae7d,0xbb411a72,0xbb29d2d5,0xbbde1696,0xbc241e2e,0xbc06d765,0xbc25a33e,0xbc5e2e04,0xbc7e5158,0xbc8a8447,0xbcb4a9d2,0xbcd7fb96,0xbd06feb7,0xbd03880d,0xbcf63251,0xbcf3a554,0xbcfd54e8,0xbd018d10, +0xbd02b734,0xbcec67ad,0xbcd6f8f3,0xbcd36e51,0xbcb3492c,0xbc8c4129,0xbc846262,0xbc8c49a2,0xbc756fde,0xbc544eea,0xbc365cdd,0xbc207714,0xbbdbf1fd,0xbbe85695,0xbbeb8f79,0xbc1d4f24,0xbbda3759,0xbbe36090,0xba07a9f5,0xbaebbeba,0xbb8bcf6b,0xbb97dcd6,0xbc10ac31,0xbc718a3d,0xbc6a78d4, +0xbc78dedc,0xbc84218f,0xbc88a13d,0xbc8ec205,0xbc899cdb,0xbc8a0dee,0xbc84fa98,0xbc8c8696,0xbc8d568b,0xbc885f75,0xbc84a18e,0xbc87466b,0xbc83c71d,0xbc830a09,0xbc7f940c,0xbc7c3a14,0xbc7f4996,0xbc707c5d,0xbc7deded,0xbc831d45,0xbc854206,0xbc609b8d,0xbc62f17f,0xbc629ef1,0xbc5fa1fb, +0xbc50b516,0xbc3dac01,0xbc358c58,0xbc4151ce,0xbc505d24,0xbc697363,0xbc5fe25a,0xbc6c0189,0xbc683955,0xbce2178b,0x3bfbcfb7,0x3b938d0e,0x3b78e780,0x3b8ea893,0x3b8cad28,0x3b5c5307,0x3b7129e6,0x3b80a7c9,0x3b97904b,0x3b8e50eb,0x3b952d41,0x3bb0a1c2,0x3b8cb47e,0x3b8c96ed,0x3b97b840, +0x3b9e0a29,0x3ba51e81,0x3ba45700,0x3b9a09c9,0x3b96109b,0x3b8f977a,0x3ba53cb1,0x3baf348d,0x3bd23488,0x3b9aa779,0x3baed78b,0x3bc191e9,0x3bde40f9,0x3be1bd59,0x3bc8ae68,0x3bd58117,0x3bc0ecdb,0x3ba58009,0x3ba1c070,0x3b981408,0x3bb1f8b5,0x3ba8865e,0x3bcf7c40,0x3bbd520b,0x3be5888e, +0x3bae9369,0x3aeb35aa,0x3b430028,0x3b83d2ff,0x3bd44f4c,0x3ba5dec4,0x3bce240d,0x3c12fcbd,0x3bae8088,0x3b927070,0x3bb3aeed,0x3bbec617,0x3bdb5424,0x3bcd6b1c,0x3baaecdb,0x3b9b62c0,0x3b98489a,0x3bd5a4ec,0x3be50bcd,0x3bf54264,0x3bbb29fd,0x3bafcab2,0x3bc7dc2c,0x3c3fa15c,0x3c49544f, +0x3c083596,0x3c136b24,0x3bda1ec1,0x3bbade7b,0x3bd14bd9,0x3bccaefd,0x3bd71aba,0x3baa360f,0x3b9c2174,0x3b57aa4c,0x3bb04f47,0x3b88d399,0xbb1f9703,0xb9b0c4ab,0x39bc63b2,0x3bce6e91,0x3b9a1a1b,0x3bbc09b3,0x3c38b380,0x3b609c00,0x3b541ee6,0x3ba48b7e,0x3bddd4c9,0x3bed603d,0x3bf43054, +0x3baa0771,0x3b8a4dee,0x3b8d16fc,0x3be4f520,0x3bf6e1e5,0x3c186a46,0x3bcb6f18,0x3bd231ff,0x3bf2a38e,0x3c644b73,0x3c7b8160,0x3c201e78,0x3c2f5ca3,0x3c0f8f90,0x3b758b71,0x3bb488ce,0x3b9e11fc,0x3bae39a0,0x3ba02daa,0x3b89aec1,0x3bdf74ea,0x3c177c65,0x3b930f00,0xbbed8b02,0xbb5fdefd, +0xb988a984,0x3c040f82,0x3b9988b6,0x3bde5440,0x3c95654d,0x3b688c94,0x3b07de59,0x3b737d52,0x3bdd377f,0x3bf89f85,0x3be9cd94,0x3b6c0d4d,0x3b1d27b2,0x3b1b017b,0x3be3a3f0,0x3bfc8c7f,0x3c5e8d45,0x3bab5b39,0x3bcd73d0,0x3b630cf6,0x3c96b583,0x3ca559ac,0x3c3b4313,0x3c5599b1,0x3c122998, +0x3bab9c73,0x3bb306c7,0x3ba947e3,0x3bdabd2a,0x3b5497c1,0x3b5844fd,0x3a6588f0,0x3b71815c,0x3b09b699,0xbc3f27b5,0xbc1a1c2d,0xbbd75af4,0x3be016d9,0x3ba9c8e3,0x3c0da0f4,0x3c901ef4,0x3b2950ec,0x392df159,0x3b531681,0x3be94821,0x3c1b2d47,0x3c089b5a,0x3b897808,0x3b3238b2,0x3b059943, +0x3c10d54b,0x3c2b2720,0x3c996dfe,0x3c2c233f,0x3c0a683b,0x3aed435e,0x3c6a64e5,0x3c9d6063,0x3c324010,0x3c68b8bb,0x3c2cc3d1,0x39a48ee9,0x3b91d7e4,0x3b74b172,0x3bb2fbd2,0x3bf6366e,0xbb16a1b1,0x3cb76a0b,0x3cb3e6f2,0x3cbe1edb,0x3ce99529,0x3cfd400b,0x3cf03cb2,0x3c8ceee1,0xbbad5381, +0xbcadbfdc,0xbca8b0d6,0xbbf27a16,0x3c322899,0x3d046b10,0x3c92d01b,0x3c5c361f,0x3c82c2b3,0x3c4df438,0x3c2f93e5,0x3b8b8c85,0x3b171d7c,0x3b466145,0x3c2817d3,0x3c1348c9,0x3c42ed9c,0x3cd8a756,0x3b7caf56,0x3a7b015a,0x3c0c6eb1,0x3cf784fd,0x3d10dd35,0x3c27047d,0x3c0d3b69,0xbbc4eb84, +0xbcd826e5,0xbcbe8b37,0x3ce4539e,0xbd747387,0xbb95660a,0xbad5dde6,0xbc57eec8,0xbc69b041,0xbc89918f,0xbcab3d49,0x3c224cc4,0x3caf8010,0xbb9ad5db,0x3bc4b883,0x3c215563,0x3ca0e21e,0x3c980214,0x3c9adceb,0x3c8d8cf6,0x3c75491a,0x3c626916,0x3c0f3543,0x3c176b9a,0x3c25d07a,0x3c0bf112, +0x3cbc8bc9,0x3c9c5064,0x3c145c8c,0x3c43c964,0x3c6563dc,0x3cb287f8,0x3c1cb15f,0x3badae23,0x3b7124a6,0x3c2ec599,0x3c61b8ca,0xbbf80fd2,0x3d40ec9b,0xbc3529e6,0xbd38c4bb,0x3adb1e58,0x3c2a4d04,0x3c5f9aae,0x39cdf9b3,0xbb335658,0xbb8d0127,0x3c988cc5,0x3cd4f6f7,0x3ba09918,0x3c6d491b, +0x3c24d518,0x3b78816b,0x3adea472,0x3b8cc1eb,0x3c5bcbc6,0x3c074d4d,0x3b4f8f8a,0xba262049,0x3a47a295,0xba6695be,0xbb116926,0x3bbf876f,0x3bbb136d,0x3c37e866,0x3c066ca5,0x3c0f7b66,0x3c4135c4,0x3b90ebff,0x3be1c613,0x3b3525e2,0x3c266d3e,0x3c845b88,0x3ad2ad11,0x3b5b8585,0xba1ab15d, +0x3c1ecec4,0x3c5e3981,0x3c8e69d5,0x3cbb2538,0x3b873500,0x3b18793c,0x3af4889f,0x3be15b1e,0x3c3597ce,0xba0cdf78,0x3c14fdfc,0x3b8d22f8,0xbb7a6874,0xbbeaa01b,0xbb6416f9,0x3c3611e2,0x3b6b8c50,0x3ae96506,0xbb17951d,0xbb13ccb5,0xbb897666,0xbb897bcd,0x38746289,0x3acc8b80,0x3c06eac5, +0x3bb0d9e7,0x3ba49898,0x3b8e92c9,0x3b9f1467,0x3bb776ba,0xba2ede73,0x3c2457e9,0x3c2dcf86,0x3b89e221,0xbb2e32fd,0x3c10db7c,0x3c1d62de,0x3bedf8ee,0x3be9279d,0x3c546f72,0x3c134afb,0x3bbd7272,0xbb92e3b5,0xbc04875e,0xbc44eca0,0xbcbecd89,0xbc406824,0xbb37ee10,0x3b672791,0x3b3a366e, +0x3bc2595c,0x3c3ed639,0x3c1d7f98,0x3c168b2e,0x3be7d8ab,0x3b5cace1,0x3b354ee5,0x3b6f5420,0x3c21b296,0x3c03e2ae,0x3b3fc474,0x3b80245c,0x3ad3f5b4,0x3b1a6953,0xbad490b9,0xbb6e014c,0xbc0f39bf,0xbc1b8f19,0xbbd31a5d,0xbc129d61,0x3ba031b5,0xbcca95b6,0xbc940bec,0xbc1bd3ce,0xbbad058e, +0xbba0a9ea,0xbbb2ebd5,0xbbb03c61,0xba63584f,0xbc95abba,0xbcac48d6,0xbbb230fb,0xbbf5e5b2,0x392bec57,0xba5570a5,0x3bec7efd,0x3c1f9778,0x3c3cf7aa,0x3a7b0250,0xb9bdd0fe,0x3b859751,0x3babdaf0,0x3ba82584,0xba56a41b,0x3b8c9c52,0x3b3be769,0x3bc74cf5,0xbb4b0834,0xbbc2dfce,0xbb42e2ee, +0xbb967223,0xbc064ff5,0xbca0a6e8,0xbd01634e,0xbd29feb3,0xbd641c1e,0xbd12461d,0xbd05f75e,0xbceb4037,0xbcc1dfc3,0xbcc1b21d,0xbcb971d3,0xbd06204a,0xbd0e6934,0xbcf095b3,0xbc91766e,0xbc3e57ca,0xbc3411d6,0xbbf6453e,0xbb9ff9d6,0xbb25e6db,0x3b81bdb6,0x3bc20abc,0x3c585c86,0x3bebd087, +0x3bdbec0d,0x3c19035b,0x3c19ebe8,0x3c1113b9,0x3b7799b0,0x3bb10305,0x3b55af5d,0x3b9a646e,0xbc0f5c34,0xbc537067,0xbc792161,0xbcad22bc,0xbcc01632,0xbccef6b1,0xbcb519b9,0xbca16bf2,0xbc51bad8,0xbcd10e6b,0xbd16a444,0xbd21a4b7,0xbd08660a,0xbcfa1478,0xbcdacc68,0xbcb5820e,0xbc7feee6, +0xbc17c60b,0xbbc7bcd1,0xbb8c19db,0xbb9d7755,0xbaa827e5,0x3abddf77,0x3b51fa34,0x3c0d428a,0x3c48e245,0x3c8cd429,0x3c34e51d,0x3c038e53,0x3bc907f2,0x3b8f201a,0x3b56fc83,0x3a626a36,0x3b00f643,0x3b4c5176,0x3bcb2474,0x3b0f7ea1,0xbb33b731,0xbb7d3974,0xbc24a0b4,0xbc5eca73,0xbc9379bd, +0xbca5a27a,0xbcbd02cb,0xbcd47dca,0xbd0a2785,0xbcdcfd66,0xbd06c8a2,0xbcec6c4c,0xbccbe0a7,0xbcaa7d89,0xbc5e16fb,0xbbf75bc9,0xba5bd458,0xbb401071,0xbb896055,0xbb29ae98,0xbafa6829,0x3a98a233,0x3b0aacaf,0x3b6bb679,0x3bcf481d,0x3c0f7acb,0x3bb845d3,0x3bba8b81,0xb9e28f83,0xbb1fb12f, +0xbaff1e3a,0xbafd7088,0x3a615fa7,0x3b8062eb,0x3bf5b089,0x3bb1e903,0x3b6b3899,0x3b567120,0xbace961c,0xbb353942,0xbbdf54cf,0xbc4bed33,0xbc98422c,0xbccd8123,0xbcd1fd9f,0xbbe699c1,0xbc0e8ef5,0xbc2b8873,0xbc3bdc20,0xbc502812,0xbc9052ae,0xbca53494,0xbcb2d351,0xbc9acffe,0xbc6f41d4, +0xbc5532cc,0xbc3a3516,0xbc29e9ca,0xbc0b3d3f,0xbc166a9a,0xbc21b84d,0xbc30970c,0xbc2afecc,0xbc19409a,0xbbf20b5c,0xbbd1cef5,0xbb877b3a,0xbb2973be,0xbaa6bb20,0xba9cf1d6,0x399c96d2,0xbacc67f9,0xbb305490,0xbb8dfcd1,0xbb61e1ef,0xbbaac5fc,0xbb560269,0xbb8ca6f9,0xbb1fcafa,0xbb16780c, +0xbbcd592a,0xbc071bdc,0xbbf09f97,0xbbea9a6b,0xbbd77e46,0xbbb134b3,0xbb8c34c0,0xbb32a239,0xbb1c0bae,0xbb1c9747,0xbb50991c,0xbb4d3f3e,0xbb2e2f34,0xbb193d6d,0xbafdf9a9,0xbb07ba2a,0xbafbe618,0xbad2fa2b,0xbad61e1f,0xbb13868b,0xbb2e6291,0xbb9c43a8,0xbbd2ae4f,0xbc08bcc2,0xbb6058f3, +0xbb912713,0xbbc50db7,0xbbbf29d5,0xbbbd8029,0xbbb8d04f,0xbbc159cf,0xbbda98c3,0xbbf3dd16,0xbbee7ee2,0xbbd91b0f,0xbc35c72e,0xbc1bff77,0xbbcbef50,0x3b791a83,0x3b31f0e8,0x3b3177f7,0x3afc522c,0x3ac6b828,0x3a43a3a8,0x3a8ddbea,0x3ac0ef83,0x3b18d790,0x3b09caf7,0x3b15792c,0x3b47bb2e, +0x3a91dcf7,0x3a367c28,0x3a2bcb04,0x3ac52eca,0x3b093221,0x3b342c05,0x3b2f4120,0x3b2b3d49,0x3b15f57a,0x3b2b0572,0x3b2cae34,0x3b58dd72,0x3b08b857,0x3b4cbb65,0x3b8fe8d4,0x3b9d8f1a,0x3b9e3f25,0x3b898aaf,0x3b8d98b0,0x3b7fa748,0x3b579273,0x3b57da04,0x3b43555d,0x3b5d124f,0x3b411a03, +0x3b97603e,0x3bb7e640,0x3b6e3ce4,0x3a980e3f,0xbacf3979,0xbaad5da9,0xb95a946b,0x3b3b981f,0x3b03563d,0x3b263450,0x3b9d44c7,0xba4c77d5,0xbb4817a4,0xbb428fa2,0xba8231e8,0x3abca041,0x3b5bb478,0x3b65e55d,0x3b60f07a,0x3b32428e,0x3b77652c,0x3b5bb1d7,0x3af23867,0x3b304077,0x3b69ce46, +0x3bc5224b,0x3c1b7ce7,0x3c239cf8,0x3bde86df,0x3be7e6bc,0x3ba9c524,0x3b873c5b,0x3bbbaa1c,0x3bb187ac,0x3b910f85,0x3b91c367,0x3b69249c,0x3bda5179,0x3b22d981,0xba13b17f,0xbbbefc7a,0xbba4f084,0xbb5ba836,0x3b559725,0x3b2bb842,0x3b2555c6,0x3bed319d,0xbbaa84c9,0xbc05d5b8,0xbbdaa5d9, +0xbb3c1b81,0x3a3f4c98,0x3ba7a024,0x3b941f3f,0x3b9398c5,0x3b4538d6,0x3b6c2d57,0x3b4fe602,0x3a897b74,0x3b421b1e,0x3b9d792b,0x3c158582,0x3c575d5a,0x3c62e442,0x3c1f8b2d,0x3c158fca,0x3c011bb0,0x3b7f86eb,0x3bdd0a95,0x3bd5e13f,0x3b89aa98,0x3b975fb1,0x3bdd252f,0x3c457317,0x3bc4a13d, +0xbac1a207,0xbc202f3f,0xbc1cad44,0xbbdd58c3,0x3b633184,0x3afc74b6,0x3b07a0bf,0x3c3dcd6a,0xbc08105a,0xbc635044,0xbc6f7d40,0xbbf42feb,0xbac19fb0,0x3b9ef88f,0x3b95bda7,0x3b8b9993,0x3af3ed95,0x3b8ef989,0x3b56b641,0x3b22d908,0x3b178d44,0x3bd41d27,0x3c1b0e33,0x3ca0f708,0x3cafa036, +0x3c535fbd,0x3c59ea7a,0x3c287ee1,0x3bb8af33,0x3c22ca1d,0x3c04b078,0x3baf683f,0x3bc9c254,0x3a472131,0x3beea9d9,0x3b4fb179,0xbb50992a,0xbc63ed0f,0xbc7d5591,0xbc1ddfb6,0x3b800c90,0x3b6f71d5,0x3b92b765,0x3c4217cf,0xbc2cd610,0xbc9b8c4e,0xbc7a7fba,0xbc1db36f,0x39a5db85,0x3bebcc0c, +0x3bc52a02,0x3bac7750,0x3ae4142e,0x3b628ff2,0x3b83a1c9,0x3bf7b97b,0x3bf9edfb,0x3c057641,0x3c022cb0,0x3c9a96ef,0x3cb68270,0x3c4a2813,0x3c560fcd,0x3c365440,0x3b7616c5,0x3c0cf7ac,0x3c1c2bab,0x3bacac39,0x3baacf73,0x3cd385f5,0x3cea4f2a,0x3bfbbd69,0x3b96940c,0x3c4bf471,0x3d117801, +0x3d0ce352,0x3b280934,0x3b4312ec,0xbc77ab9b,0xbcca9d47,0xbcd45304,0xbbe309aa,0x3d1aa321,0x3cb5c5e3,0x3c91711a,0x3c826aee,0x3c5ec517,0x3c508327,0x3c421dc5,0x3c492e4a,0x3c2843cf,0x3c22b768,0x3bb1bc11,0x3bdd5284,0x3cb24da3,0x3b2cd50e,0x3ba01e64,0x3cc0b4fa,0x3cfd22e1,0x3ccf464b, +0x3bd0a693,0x3b64c023,0xbbe8bd8e,0xbc95c657,0x3bf481dc,0xbccbca74,0xbd25ce1b,0x3bf34a25,0x3c3fb160,0xbc80237d,0xbbb38c9b,0xbb65eed0,0xbc0bf097,0x3c04a070,0x3c600e53,0x3be7499a,0x3b09d4c9,0x3adb58ad,0x3c71abbe,0x3c941512,0x3cbc525b,0x3cad0613,0x3c320ea4,0x3bfd0f88,0x3c00e84e, +0x3b8bb32c,0x3ba37200,0x3bbfe759,0x3c8394e7,0x3c7e8279,0x3c04b355,0x3c9533f1,0x3c9f4819,0x3ca36d94,0x3bf95deb,0x3bfbd78a,0x3c87920a,0x3c32da7f,0x3c250cae,0x3c7cc1d0,0xbaa5a7c6,0xbc916ec9,0xbcae5476,0x3c99c73a,0x3cc752cf,0x3c67e88b,0x3bafbfc1,0xbbe885bd,0xbc7b3814,0xbb424e99, +0x3bd928db,0x3c533f0c,0x3beb7638,0x3c043891,0x3c0a1f5f,0x3bd1a55a,0x3bd33378,0x3c6153a3,0x3b6582c4,0xbb7ada87,0x39b6a6fb,0xbb19a076,0xba978ed2,0xb9a76363,0x3a444861,0x3bc6c6db,0x3c33e7f6,0x3c1b900e,0x3c30f85a,0x3c2b3291,0x3bb1df11,0x3bd4252b,0x3b55d084,0x3c431416,0x3c8357f0, +0x3c4361b0,0xbaa23fed,0x3c788e62,0x3cb064aa,0x3cc15b3f,0x3caa000b,0x3c7b9ff8,0x3adeb4ca,0xbb40ab5e,0x3b1b7277,0xbbc9f72f,0xbb044018,0x3c35e43b,0x3b5530a2,0x3aab4042,0xbb75964d,0xbbb73eb6,0xbb8e36e8,0x3c1c14b1,0x39e4572a,0xba4a5875,0xba36258b,0xbb76df08,0xbb948bed,0xba6a540c, +0xbb8b733d,0x3a0f9222,0x3c29d0a0,0x3bd6e01a,0x3be96ebd,0x3b8ffde5,0x3c01d837,0x3bdc68cb,0xbb97c783,0x3c17965e,0x3c4228f9,0x3b81a30e,0x3c3c87f1,0xbbc0c49c,0xb8973a1c,0x3b8dba37,0x3c122631,0x3c3831eb,0x3c905d71,0x3cb857d5,0x3cab2645,0x3babc87d,0xba88741e,0xb9edfdb3,0xbc4149ac, +0xbc163513,0xbb6745f0,0x3a51c3a7,0x3b622f61,0x3c29d439,0x3c329a59,0x3c3fcbfc,0x3c0b9ea5,0x3a8c93d5,0xba79a524,0x3b193014,0x3b262ede,0x3b08f855,0xba078245,0x3bc3fd6a,0x3bb39495,0x3ae96b53,0x3b0551c0,0xb951acec,0xbc17360f,0xbc4dd133,0xbc4fbca6,0xbc670971,0xbc328738,0xbc95f7e7, +0xbc30a792,0xbc2b53f9,0xbbfa468c,0x3b91d9f6,0xbaccf410,0xbc30216b,0xbcac1663,0xbcc02efb,0xbcb37d74,0xbbca70ba,0xbbea18d1,0x39fea5b7,0x3ab014c2,0x3b4d763e,0x3b2dc9c0,0x395b70aa,0xbb3860e3,0xbb26bc4c,0x3b0b96cf,0x394aee4c,0xb9804abd,0x3914ca68,0x3b05d2db,0xb92dafa2,0xbb7bdc17, +0xbb30fb3b,0xbb379fd6,0xbb13a0eb,0xbba9d86f,0xbc2e402f,0xbcafa088,0xbce62906,0xbd13766d,0xbd0c0aa7,0xbce54ead,0xbca57edc,0xbc8c64ee,0xbc8a2991,0xbc97e974,0xbcbe084b,0xbcaeb4e9,0xbc8f0f69,0xbc686a60,0xbc53beec,0xbc3087f9,0xbc03e970,0xbc0855ca,0xbbb7c99b,0xba89df1b,0x3b84e93a, +0x3baa341e,0x3b1685b9,0x3ac4fc98,0x3b13bc13,0x3bf46bcd,0x3bcaf861,0x3bca79e7,0x3b8bdbb7,0x3b9f0f7f,0x3a43953d,0xbbc7c1ce,0xbc8902eb,0xbca0bb50,0xbc9649f6,0xbcb5979f,0xbcc9a778,0xbcea6788,0xbcf2a8fc,0xbccf1a3b,0xbc787b89,0xbc9c39e7,0xbcc8550c,0xbcd4476d,0xbcc452c0,0xbcd35b12, +0xbcf6c090,0xbcc6bdf4,0xbcb2fd06,0xbc9244fe,0xbc70e1ea,0xbc372e2c,0xbc06b55a,0xba818864,0x3b8f6410,0x3c0c4b8f,0x3c0b37d8,0x3c0d1bdb,0x3bd8edb8,0x3bc2917d,0x3bb43193,0x3bf03b12,0x3c008082,0x3bd09858,0x3bbb390b,0x3b4fe7c5,0x3afc0cde,0xba962ca2,0xbba47050,0xbc3a7205,0xbc63b1ea, +0xbc7680c2,0xbc81b7ae,0xbc8e5c80,0xbca82acc,0xbcafc1e4,0xbcb75582,0xbcbd678b,0xbcdc6a8c,0xbcdeebd2,0xbcca0c76,0xbcbd3165,0xbca34cc6,0xbc8a788c,0xbc59263a,0xbc0c48ae,0xbbcdbec3,0xbb7e0632,0xba7064ac,0x3b00136b,0x3bc802c4,0x3c321162,0x3c0bbc5a,0x3c019696,0x3becdd36,0x3bf36908, +0x3c11270f,0x3bddf6bc,0x3baf7d57,0x3b84e4bd,0x3b84ad1b,0x3b06af22,0x3ad57956,0x3afea7d8,0xba8b3615,0xbbe91223,0xbc0296d7,0xbc2abdfb,0xbbf2c2fc,0xbbfdcfb2,0xbc2f31e0,0xbc90966b,0xbcae382f,0xbcc1fbe4,0xbc45efbf,0xbc7b4594,0xbc574fbc,0xbc33bebc,0xbc0b6699,0xbbf0610f,0xbba0fb11, +0xbb6065b5,0xbafc3986,0xb98e282f,0x3a9b41ba,0x3b41405d,0x3b7d296a,0x3bb8968f,0x3b9e958d,0x3b8c1dad,0x3b850278,0x3b3c40f8,0x3b061d29,0x3b19bef0,0xb9bf707d,0x3968db70,0xb9c48cd7,0x38901808,0xba620936,0xbac461b5,0xbb30e002,0xbb44d4c0,0xbb608970,0xbba8ce57,0xbc1afe0b,0xbc1aaca6, +0xbc41765a,0xbc1d21de,0xbc1a57eb,0xbc4eaa5d,0xbb86bdfe,0xbbba9531,0xbb993983,0xbb73de00,0xbb38bac1,0xbb1a0d99,0xbad008a3,0xba47f287,0xb95c051f,0x3996e20c,0x3a4c0057,0x3aa32e9c,0x3aed0051,0x3b26a156,0x3b11ee7e,0x3b148ab8,0x3b1ff932,0x3b21274c,0x3b13fd95,0x3b29ca5d,0x3ae81f71, +0x3acccb8a,0x3aa571e6,0x3a85e93b,0x3a982dae,0x3b0b1f61,0x3b114de2,0x3a9601b9,0x39ecf507,0x3a1f85eb,0x3a081253,0x38f10a62,0xbac542b7,0xbb30709b,0xbb43da34,0xbb774f56,0x39d59a71,0xb7ffb029,0x39ba0bfe,0x3a46bb9b,0xb9ebd82c,0xba797301,0xbab8d18f,0xbab072c4,0xba82188a,0x38a0ff93, +0xb9d6bb84,0xb9c32d91,0x38e2bc5f,0xbaada9a3,0xbaf1c2da,0xbb1b397d,0xbac22630,0xba5cae98,0x393a8d3f,0x3a0bd039,0x3a2412e3,0x3953c753,0x399209d7,0x393dc219,0x39990428,0xba06cf67,0x3a048712,0x3b1dc945,0x3b20c058,0x3b1f87a1,0x3b07a6e7,0x3b0c7d32,0x3ae560db,0x3a515f03,0x3aad0404, +0x3a7d9550,0x3a8c2959,0x3a582355,0x3bab5015,0x3bbc5e03,0x3a741ed6,0xbb008467,0xbb6f74bb,0xbba94870,0xbb85ffdb,0x39f97c2c,0xbaa8ad8a,0xbabdf911,0xb9a3d104,0xbb8b4752,0xbbdf3085,0xbc0d311b,0xbbe20183,0xbb821897,0xb9806366,0x3af227f0,0x3b207f8f,0x3a377ad7,0x3a326411,0xba2f5b00, +0xbb2c45db,0xba40c8f2,0x3a56e093,0x3b972c02,0x3bc9f4a0,0x3be52d05,0x3b8f56de,0x3ba453b8,0x3b742fe9,0x3ac4e14a,0x3b92f2d5,0x3b79f21a,0x3af764ba,0x3b7dd967,0x3b81ed43,0x3bfb66b9,0x34f1624a,0xbb7f7b4d,0xbbe81b2e,0xbc0967f3,0xbbedbdc0,0x3a921147,0xbadfaf46,0xbad305a4,0x392a5ade, +0xbbfbb9dd,0xbc430e89,0xbc5db15f,0xbc29ca99,0xbbc713b1,0x3a500f06,0x3b6a8a5c,0x3b9b2465,0x3b0c1757,0x3a8c6959,0xba77abc3,0xbb87e4c9,0xbac38097,0x3ac5a083,0x3c09b3de,0x3c2900b9,0x3c285fd9,0x3c12b927,0x3c019d0c,0x3bde9186,0x3aa51c36,0x3bd58737,0x3be5f4ee,0x3b1c4b34,0x3b7be135, +0x3c5c35d5,0x3c9939ac,0x3b5fa050,0xbb9e21a3,0xbc180c8d,0xbc67c49b,0xbc48451b,0x3b35630b,0xbb3163b6,0xbb56f5f1,0x3a9f67c0,0xbc3f1df4,0xbc94daea,0xbccb2c23,0xbc9d9bb1,0xbc38bdd0,0xb9876537,0x3bc7554e,0x3bf010b0,0x3b1f5f4b,0x3ad6805f,0xbb1ef992,0xbbc70b0a,0xbb0a3db2,0x3b7f7d00, +0x3c407b16,0x3c982d27,0x3caa74ec,0x3c50c873,0x3c5a9e78,0x3c3f32bb,0x3b877f8a,0x3c56124d,0x3c275ccc,0x3b863467,0x3c20a9e6,0x3b53f922,0x3c5cdffa,0x3a868efd,0xbbd6a71a,0xbc4f6690,0xbc8f59c2,0xbc55bc6a,0x3ae5adae,0xbb18da2a,0xbaa01ee4,0x3acb872d,0xbc3f2e38,0xbcaf0e89,0xbcc3879f, +0xbcac4c0e,0xbc2571bf,0x3af97010,0x3bf5457a,0x3c0fc615,0x3b610a60,0x3b18db12,0xba76c8aa,0xbb7e9ad0,0x3ac8880d,0x3bde1b5b,0x3c45d721,0x3cb3c670,0x3cce4714,0x3c84fbb6,0x3c5b81f1,0x3c39fffe,0x3b826049,0x3c46797a,0x3c765f6b,0x3baa040b,0x3bad9f01,0x3d448780,0x3d027095,0x3bd20611, +0xbafe59fe,0xbc0ae730,0x3cc52290,0x3cbf60da,0xbc5007b7,0x3ba036f7,0xbc49a2d6,0xbd1a5bb5,0xbd10cc3f,0xbcb18b65,0x3c5cd419,0x3c794d69,0x3c8290d0,0x3c40fffe,0x3c4077d5,0x3c2996a0,0x3c3e9e80,0x3c8c7bcb,0x3c709277,0x3c594302,0x3bce53b6,0x3b5cdedc,0x3c6c9868,0xb9ad8c09,0x3bf3ffb8, +0x3d1a1bf5,0x3cc2c635,0x3c4d2f66,0x3be6e827,0xbc078fe0,0xbc62b3cc,0xbbc5747b,0x3d06202f,0xbd829bf6,0xbcce490c,0xbba12dda,0x3c024754,0xbbf7537a,0x3bdd7121,0x3b8773db,0xbc50ae2f,0xbc0760fa,0xbb2ed436,0x3c80f513,0x3ad04d6b,0xbb0d34cc,0x3b85d0f3,0x3c5a656e,0x3ca4aa96,0x3c930342, +0x3bcf400f,0x3b50dd8a,0x3bdaf7fa,0x3b515863,0x3b64de61,0x3ba95d9e,0x3bf54452,0x3c03cdca,0x3bde18ce,0x3ca36f2e,0x3cb272f4,0x3c852f1d,0x3c0c0e94,0x3c0d6e78,0x3c79b10a,0x3c137e67,0x3c3c01ad,0x3d1cd87d,0xbd28b127,0xbbd7c449,0x3c33f3ec,0x3cd2cc22,0x3ccf649e,0x3c9e9329,0x3c853a25, +0xb8c91f0a,0xbc9b555b,0xbcae69a3,0xbc67711f,0x3c643b09,0x3a2618e3,0x3bca30e1,0x3c2ead42,0x3c2df3bd,0x3c0e16fe,0x3b926703,0x384389da,0xbbcd71b3,0x3a201799,0xb9e57a80,0x3a9386af,0x3b2d5947,0xb9fc1083,0x3bc0a319,0x3c17f83b,0x3c28fb61,0x3c372487,0x3be44afe,0x3c05f503,0x3c05c359, +0x3b571a82,0x3c5ce0f8,0x3c8aea78,0x3cb86948,0x3b0256f4,0x3cf48eb0,0x3cf5e556,0x3cde7683,0x3c9958e9,0x3c5fb636,0x3c26f38e,0x3bdd57b2,0x3bf01c9d,0xbc23d906,0xbc274c16,0x3c42445d,0xba921116,0x3a9f1a3a,0x3b118cf4,0x3baa6b2a,0x3b4f62d0,0x3b10f6ba,0x38f73e7f,0xbaaa8198,0xb9517b50, +0xbb171cdc,0xbb09b200,0x3a70ec48,0xbb33217a,0x3a814f79,0x3c0a49dd,0x3bbee685,0x3be60b6b,0x3bac547a,0x3c106d67,0x3c07924a,0x3aab7761,0x3c064d17,0x3c4c470c,0x3c01e840,0x3cd3da38,0xbcc12468,0xbc99eb22,0xbbb28d33,0x3c02c515,0x3c6168be,0x3ccedd98,0x3d01cd9f,0x3d0be230,0x3c84e504, +0x3c18fde2,0x3c7c8aca,0xbba312fc,0xbc17cf13,0xbbb77720,0x3b5f1915,0x3bcb894a,0x3c2797f5,0x3c1e3a11,0x3c15bab5,0x3bf914bb,0x3ab9ed45,0xb9cb282f,0x39c0e8b8,0xbae0cc7d,0xbae95d34,0xbb856d66,0x3b9eaa10,0x3bcbf75d,0x3b52a285,0x3b64eca3,0x39692e75,0xbbf757f6,0xbc058676,0xbc06daeb, +0xbc3b35fd,0xbcb397f0,0xbb8d37ac,0xbb7db585,0x3913b017,0xbb929849,0xb9e231d7,0xbbb9fbc3,0xbc88d3ab,0xbd02ec94,0xbc8a8c14,0xbc530ab3,0xbbc5cfe8,0x3a85bd39,0x3b40f9c8,0x3b922fc0,0x3a33feda,0xb95ff78c,0xbb29b960,0xba852512,0x3a622676,0x3aa45d45,0x39f73238,0x38a7d6df,0x37643f39, +0x3a088fb6,0xba792d84,0xbc0b7595,0xbbb75e0d,0xbbf10179,0xbc012374,0xbbf98b37,0xbc10c6df,0xbc5c5b0c,0xbc6f2dc8,0xbca6026e,0xbc95ec05,0xbc5d4cf8,0xbc76a6e6,0xbc43c642,0xbc28a7dc,0xbc027cee,0xbbafa08a,0xbbc332dc,0xbb385458,0xbacbeecf,0xbb416b11,0xbb398c44,0xbb7c6412,0xbb7b9e0b, +0xba7b01b4,0x3b54a3a7,0x3b0c2691,0x39e04832,0xbad38153,0x36034851,0x3ab00181,0x3b88e78d,0x3b8252d3,0x3b89112f,0x3bc30d33,0x3a313352,0xbb953ac4,0xbc4d52aa,0xbc88e798,0xbc958877,0xbc8f97a8,0xbcb0d24e,0xbcd3ffc5,0xbd01117a,0xbd086f48,0xbcfb5214,0xbcdd7f66,0xbc955e62,0xbc3ec68a, +0xbc431ece,0xbc4465b9,0xbc67546c,0xbc7d024b,0xbc81c62f,0xbc91bfbb,0xbc8aa2d5,0xbc627c87,0xbc303756,0xbc041a1a,0xbb1d0d08,0x3ac83b45,0x3bd44aff,0x3b655531,0x3a8792b7,0xba7f3759,0x3a8aec08,0x3b2407ce,0x3b814362,0x3bae969a,0x3bcb502f,0x3c054729,0x3a8022e3,0xbb87678f,0xbc49b594, +0xbc6729b7,0xbc99d47c,0xbcb5e7b5,0xbca9bc59,0xbca42d6a,0xbc9ff418,0xbcaa7181,0xbc9ab429,0xbc87a564,0xbc445d6a,0xbc98e306,0xbc861adc,0xbc7b23c6,0xbc7d29f1,0xbc7f4df0,0xbc6bbbb0,0xbc546d19,0xbc4e20e2,0xbc1934fd,0xbbc9e44d,0xbb5595b8,0xbaea3911,0x39b9cfdf,0x3b89956e,0x3b6b00e7, +0x3b7fd6d0,0x3b569834,0x3b9102ec,0x3bade1a3,0x3bdd94fd,0x3bc842e0,0x3bac9d9d,0x3bbcbfc0,0xb981eafd,0xbb9ff8e0,0xbc3194d1,0xbc489327,0xbc9087a6,0xbc97b120,0xbc9194c4,0xbc6ae0c4,0xbc59b424,0xbc41a492,0xbc488910,0xbc431e04,0xbc81f8ae,0xbc9312c5,0xbc87c3b8,0xbc6dc017,0xbc409ff6, +0xbc0025f0,0xbbcfea65,0xbb5650fe,0xba592832,0xb965ae5b,0xb9f2baa9,0x3991cbd3,0x3aebd15c,0x3b49de2b,0x3b8a70e8,0x3b7ade41,0x3b660caf,0x3b835085,0x3b84912c,0x3b5b8ee3,0x3b7efe2d,0x3b4de41b,0xb8fc20dd,0xbb2d4422,0xbb8a256d,0xbb97d365,0xbbb05cdb,0xbbdd689d,0xbbd6f020,0xbc00135e, +0xbc337f8b,0xbc709b17,0xbc8aecb7,0xbc99caea,0xbc9cb52e,0xbc9faa96,0xbc92e828,0xbbc204a2,0xbbda9c2b,0xbbce2259,0xbbb7df44,0xbbada464,0xbbaa8798,0xbb9db94a,0xbb925c4b,0xbb85835e,0xbb55d4ef,0xbb3818b4,0xbb314370,0xbb2884e3,0xbb0b91dc,0xbafa5d30,0xbacdff19,0xbaca4c4d,0xbac56f1d, +0xba9e93e5,0xba9c084a,0xba840267,0xba3f85e1,0xb9a8ce2d,0xbb15a402,0xbb2d3f2d,0xbb2e41ad,0xbb4aab49,0xbb793adb,0xbb8fa117,0xbb856796,0xbb68ce24,0xbb6b6ae4,0xbb83fa62,0xbb8af110,0xbb8b34ad,0xbbb49e51,0xbba40312,0xbb2c32a0,0xbace2bac,0xba992b66,0xbb12b869,0xbb28ec6b,0xbb3063f0, +0xbb3b71a5,0xbb272bd9,0xbab78fc8,0xbb02309a,0xbb01fc4c,0xbaceb287,0xbb050df7,0xbb238405,0xbb5cc7ca,0xbb3fa083,0xbb2daa1c,0xbb0364a0,0xbaae0f05,0xba8b3e6b,0xbaa3e257,0xbac15237,0xbad7514d,0xbae5c424,0xbb157015,0xbacc81fc,0x39aff0d7,0x370121fc,0x3717e2ca,0x387b0303,0x3848c8cf, +0xb9a3061d,0xbac6ba88,0xb9f1c464,0xba6796e1,0xbad02464,0xba9c1908,0x3b67491e,0x3b63c9e9,0xbac783f5,0xbb80e0c1,0xbb95e360,0xbbe16375,0xbbc22eec,0xba89827a,0xbb4818f4,0xbb496446,0xbb276750,0xbb5e2756,0xbbaa518d,0xbc0c4f8a,0xbc06f6b6,0xbbd8db2e,0xbb6d685c,0xba22064a,0x39b7efb1, +0xba90ae20,0xbb15320f,0xbb787271,0xbb9d4ba2,0xbb5d1d9b,0xbad9f4ed,0x3b2a1837,0x3b05d6b5,0x3b47bf05,0x3b0e5dc3,0x3b4b7ca7,0x3b378b21,0xba7853cc,0x3b2b5573,0x3ac10041,0xbaed7d6b,0x3adb9925,0x3b06b535,0x3b74f98a,0xbb5a5362,0xbbcfc134,0xbbe83d28,0xbc1e1a17,0xbc10a13a,0xb9583489, +0xbb86f36d,0xbb403070,0xbb082acd,0xbb4fdec7,0xbbe6da16,0xbc497b50,0xbc3af02e,0xbc18a494,0xbb97babf,0x39e17208,0x3b1e1688,0x3a2c7a30,0xbadcc1ea,0xbb7a4970,0xbbbc00c3,0xbb9b3bfe,0xbaf6bd12,0x3bdf2fa8,0x3bb0b4a9,0x3babfc08,0x3bf1029f,0x3bd397b6,0x3baceed1,0xbabf1345,0x3ba30f05, +0x3b9fdc34,0xbb44fba2,0x3a8dae07,0x3c47d171,0x3c74ac38,0xba571cc9,0xbbebd69a,0xbc021261,0xbc74e8cb,0xbc574d6c,0x3afacb49,0xbb97d277,0xbb707a4d,0xbb0fb35d,0xbb942c3a,0xbc1b7ede,0xbcaafa2c,0xbca3cc6a,0xbc7bb744,0xbbd64d62,0x3b329029,0x3bb19d78,0x3aaf6daf,0xbb0e7b87,0xbbe83d60, +0xbc07f04f,0xbbc6274b,0xba4ca425,0x3c376647,0x3c4f5715,0x3c8073a4,0x3c2aa0b6,0x3c5b0184,0x3c4c1082,0x3af2e827,0x3c4fbcce,0x3c0e5c2a,0xbaa92c02,0x3bf208c8,0x3aff127c,0x3c037f24,0xbbab6ebe,0xbc199e90,0xbc285b33,0xbc8469c8,0xbc6497e6,0x3a246df6,0xbbb3bc54,0xbb202e5e,0x3a0fede8, +0xba610ed6,0xbc178b27,0xbca238d9,0xbcac2179,0xbc7d2cc6,0xbbe27547,0x3b6a8887,0x3bd81f77,0x3b3c8dd0,0xba772102,0xbb901ef1,0xbbfe049b,0xbb87f70e,0x3b3843a4,0x3c50acbf,0x3ca254c2,0x3cbc8337,0x3c86cd78,0x3c594707,0x3c3d0751,0x3b1b9018,0x3c670708,0x3c774cbe,0xbb309297,0x3b0fb6b1, +0x3d6034ef,0x3cf3cbf0,0x3bf9bebb,0xbc1035d3,0xbce4913e,0x3bb2c8b3,0x3c1d4ab3,0xbc861531,0x3bb261c9,0xbbc94bc0,0xbd0a7299,0xbd023ada,0xbcd1ab24,0xbc0ae987,0x3bedaaf8,0x3c50c2d7,0x3bd79eb9,0x3c1b3cd5,0x3c18029d,0x3c2bb7bb,0x3c63da17,0x3c369645,0x3c1097a3,0x3bd24128,0x3afe816b, +0x3bd53fa9,0xbb34f8ed,0x3bde0abe,0x3d257faa,0x3c6e915c,0x3b0c10e9,0x3ac2727d,0xbcc576f7,0xbcaffd3d,0x3ba8fe8f,0x3d35d427,0xbd8a776d,0xbcf5f51c,0xbcea65f8,0xbb9283a3,0x3c264245,0x3c1d6935,0x3b2f639a,0xbc24a329,0xbc8b43bb,0xbc3cf1cb,0x3ca3570e,0x3adfc4ec,0xbb31fcc2,0x39eca0fb, +0x3be9edfe,0x3c3ad5ae,0x3bdf561c,0x3aed2d4b,0x39e9c6a7,0x3b49823c,0x3ba6b37c,0x3bc1c690,0x3bbd315b,0x3b47b3e9,0x3b840b1e,0x3c109b54,0x3c950e80,0x3ca024bc,0x3c360ed1,0x3c038bd9,0x3be03383,0x3c1338cb,0x3c78e72d,0x3c850de6,0x3cd3ca5c,0xbd4488f2,0x3c0a58f8,0x3cb74f31,0x3cc36a9c, +0x3c99b690,0x3c9044d9,0x3ce4d2d4,0x3c9094f2,0xbcaaeea3,0xbcad5f8d,0xbc9e6b08,0x3bdcba29,0xb946f547,0x3beb9987,0x3c627fca,0x3c70b413,0x3c31a552,0xbacee30a,0xbaa3b65e,0xbb8ec406,0xbb411fe2,0xba1c523e,0x3b23c439,0x3b77aa6a,0x3ad6e671,0x3bdcd438,0x3be8cefa,0x3c15cc3e,0x3c0a565b, +0x3b86b8ab,0x3c12b376,0x3c225720,0x3c2ab68d,0x3c57864c,0x3c52190d,0x3c76eebe,0x3c19ae3e,0x3cf72c67,0x3cddd347,0x3c93553d,0x3c381342,0x3b724eb1,0x3ccde47c,0x3cd1dbc8,0xbbf687c1,0xb97e4991,0xbb7d0a57,0x396add69,0x3b805b0c,0x3c0efaf7,0x3c4dde31,0x3c4c32d8,0x3c12871f,0xbab08531, +0xb9603e44,0xbaee2519,0xbb2908b4,0xbb4b4ff5,0xbad0a2d4,0xbada8f27,0xb9e28d21,0x3af8e58d,0x3b901249,0x3b134c5d,0x3b553076,0x3bb4b5be,0x3bf42462,0x3c231cf8,0x3c503118,0x3b91ee06,0x3ba9e3aa,0x3c1be72b,0x3cda1937,0xbd02a7ed,0xbcb3309c,0xbc5a8b06,0x3ae9b06b,0x3c466a60,0x3c662e3f, +0x3c91830d,0x3cb002e6,0x3cc64ae3,0x3cbddd31,0x3c93d821,0x3be772a8,0xbace2fce,0xba890c70,0x3b92ed1c,0x3c065d44,0x3c09f9f2,0x3ba943a7,0x3b1d76de,0x3b3356da,0x3ae90d96,0x39303e00,0xbb81b8a2,0xbbaee74d,0xbb8d3095,0xbb9355bc,0xb9b26bb7,0x3a753f35,0x3aa42f7f,0xba232c21,0xbb5038eb, +0xbbabce97,0xbb62c779,0xbb32818e,0xbb8a958c,0xbcc9aade,0x3c1a643a,0x3c3c01cc,0x3b833f4b,0xbbdd0344,0xbb1050b0,0xbb7a5231,0xbbb8a5a5,0xbc282874,0xbba518ec,0xbbc5ff80,0xbc11e77f,0x3a716220,0x3b82e3cc,0x3b74ca0a,0x3b4f254e,0x3b3c7bc6,0x3aeaf658,0x3bba7b93,0x3baad70b,0x3a97509d, +0x38bcb18a,0xb8d307be,0x3b7636d0,0xbb07a4a0,0xbb9ccc2e,0xbbed4863,0xbc1f92d8,0xbc2ac364,0xbbf12c20,0xbb8e6f2f,0xbb2cd796,0xbb02011c,0xba5c1239,0xbb9fda38,0xbb7e8050,0x3b0d4b1f,0xbc6700de,0xbc0d59ae,0xbba5b4ce,0xb9fd6e8c,0x3a27af4e,0x39a2ee93,0x3ae9c583,0x3b9bd0a6,0xba9bb630, +0xba0f5314,0x3aefaf24,0x3af913d6,0x3b6f8888,0x3ba946eb,0xb98b3835,0xba3e00c1,0x3a0a771f,0x3ae88be6,0x3b4658b3,0x3b4ba7db,0x3b95ec95,0x3b37d118,0x3b0860bf,0xbbb47c37,0xbc17e504,0xbc584550,0xbc4c8f04,0xbc7595ef,0xbc8d27ea,0xbcaacc76,0xbcc9ccdb,0xbce3ff06,0xbd012070,0xbcf87158, +0xbce9971d,0xbca17101,0xbbc46ac2,0xbb8459d4,0xbb34553b,0xbb8184ad,0xbb45c120,0xbb92d1c8,0xbbe3b34f,0xbc05acf3,0xbc0c3321,0xbbdd0a71,0xbb416331,0xba4457fb,0x3820a704,0x3b00a8cf,0x388882e7,0xba4419ad,0x3a3abddf,0x3afef879,0x3b5ccf80,0x3b8ab4e4,0x3b8fc01c,0x3b82d622,0x3b5dec72, +0xbb81e58b,0xbc3297e9,0xbc98c21e,0xbca1cfc7,0xbcae08e5,0xbcc4ce4f,0xbcbb154b,0xbcbadf90,0xbcc236ec,0xbcb5e9f8,0xbca0f17a,0xbc64bd62,0xbc10b4b9,0xbc25f4a6,0xbbe3ba67,0xbbeffe86,0xbbf5f808,0xbc05879b,0xbc06f674,0xbc053df9,0xbc1719d0,0xbbbacfa0,0xbb8d5aa3,0xbb75679d,0xbb9e8fdd, +0xbbab52d6,0xbba62b96,0xbb5077a4,0xbb02c81b,0xba9bac5d,0xba28f366,0x38cee030,0x3abcc959,0x3975a3b0,0xb9dd62e9,0xb8b8b0cd,0xbbb40433,0xbc32f794,0xbc909d74,0xbc904bf6,0xbc9bcb9b,0xbca22df7,0xbc960bf2,0xbc912d58,0xbc8ccb44,0xbc493dca,0xbc0ae303,0xbbc4f639,0xbc0b39b8,0xbc4140e4, +0xbc1178e4,0xbc145304,0xbc03c413,0xbbd96858,0xbbe43395,0xbbc34cd6,0xbbb8f236,0xbbcfb6a5,0xbbd7249b,0xbbb7c32b,0xbb934ce7,0xbb55ac5d,0xbb396d92,0xbb785a3b,0xbb939616,0xbba80734,0xbbab9170,0xbbbd2e10,0xbbc8dcf0,0xbbafbba2,0xbbec2ce7,0xbc0909c6,0xbc0e51b4,0xbbdff38b,0xbbb04616, +0xbbd274d3,0xbbc10888,0xbbef220e,0xbc11aba0,0xbc0c7449,0xbc47080b,0xbc4d78a0,0xbc70e322,0xbc7f8333,0xbc3b2687,0xbbe45b15,0xbbe97351,0xbbf1339a,0xbbe7d925,0xbbe322e8,0xbbe5c450,0xbbe05ed9,0xbbdc0a74,0xbbc9b637,0xbbbf74e1,0xbbc5158d,0xbbccfcf1,0xbbd47120,0xbbcd8393,0xbbc0278d, +0xbbb4c7dc,0xbbb1b295,0xbbac5ae1,0xbba42659,0xbba96a79,0xbba1026a,0xbb9ac464,0xbb87f436,0xbbc7e1bf,0xbbdaa434,0xbbe1c313,0xbbfbcea2,0xbbf8beaf,0xbbfcaaa3,0xbc01de96,0xbbf6edcd,0xbbe7379c,0xbbc661c3,0xbbbb4193,0xbbb43bf1,0xbbd7deb2,0xbc2e0224,0xbb4aae5a,0xbb0b440e,0xbb0585c5, +0xbb2b4d46,0xbb2c8e9b,0xbb248f06,0xbb3514bf,0xbb2dc2a5,0xbaf56762,0xbb13f66b,0xbb0d4291,0xbace128d,0xbabd9468,0xbaf14841,0xbb3c836f,0xbb407104,0xbb448762,0xbb2b1f11,0xbb0ac903,0xbaeac252,0xbac7b7be,0xbb031f98,0xbb165375,0xbb32519e,0xbb2e070a,0xbb0d9ed0,0xba1a8480,0xbaac5b6a, +0xbaa6e802,0xba422397,0xba897aaf,0xbaa6b31d,0xbb0bcaa6,0xba97180d,0xbac52ef5,0xbb47fcb4,0xbb083f30,0x3ae358df,0x3a810e28,0xbb1a4566,0xbb88494f,0xbb9309e8,0xbbc9c772,0xbbb1b892,0xbb046afb,0xbb52eb2f,0xbb28198c,0xbad8275f,0xb944b561,0xbabfd93c,0xbbc0416c,0xbbdfb2f8,0xbbdd1ed8, +0xbb9a48d5,0xbb325c7a,0xbae550c0,0xbad5c8f0,0xbb56a124,0xbb93d987,0xbbb3fb2a,0xbb87dea1,0xbb218b3c,0x3ae9a7e4,0xba4a73f5,0x38d0aac2,0x3b0e5209,0x3b190d86,0x3b26e4a4,0xbabddc96,0x3a799c80,0xb90fb12c,0xbb807ee7,0x3a369826,0x393b6309,0xba1f6b5e,0xbb95bda7,0xbbc7b286,0xbbb66d9a, +0xbbff20a0,0xbbfe8431,0xbb035112,0xbb972817,0xbb0e3a24,0xb9ae7e44,0x3b38ca89,0xb9b1f04b,0xbc066e82,0xbc1ba9a5,0xbc217a79,0xbbe13099,0xbb56008f,0xba84d519,0xb8c9249e,0xbb39ce17,0xbb962d84,0xbbdd9e49,0xbbb8e9cb,0xbb566d48,0x3bc6bc7b,0x3ad358e0,0x3b0f9ad2,0x3bea8946,0x3bb349c4, +0x3b8de9ce,0xba5bf73d,0x3b61f855,0x3b17644b,0xbbe0f916,0xb9f8fc38,0x3c128c0a,0x3bf4d9fb,0xbb270a3f,0xbbf67bb2,0xbbee0623,0xbc45ebc7,0xbc2f3670,0xba8a4ea5,0xbb9cc661,0xbab24701,0x3a09431f,0x3bb9d188,0x3aec1039,0xbc53012b,0xbc7e8e57,0xbc7cc7ec,0xbc14a57c,0xbb588c2a,0x39615960, +0x3a17cb88,0xbb66da76,0xbbf84413,0xbc0c9011,0xbbea7475,0xbb832598,0x3c371e2f,0x3bbd34b2,0x3c16eeb7,0x3c30fcfb,0x3c66186c,0x3c502dc5,0x3aafab36,0x3c1aa3df,0x3ba4a482,0xbbc0c72d,0x3bae6028,0xb9a0d4ab,0xb943d1db,0xbbfea024,0xbc0e309a,0xbbc6fe2a,0xbc352837,0xbc4865d8,0xbb44e714, +0xbbd3c4da,0xba780f13,0x3b91ef84,0x3c33d2a4,0x3b80647d,0xbc52ad29,0xbc8c0a6f,0xbc8b9c83,0xbc384246,0xbb5c1c0c,0x3a3b43d2,0x3b3c8759,0xbb0baf81,0xbb95600f,0xbc04b86a,0xbbde53ab,0xbaad9a48,0x3c4cc8f8,0x3c65d516,0x3c868ad9,0x3c81df59,0x3c65ed7a,0x3c515cfd,0x3b500135,0x3c63b228, +0x3c38384f,0xbc36b7f9,0xb9f41369,0x3d46219d,0x3cac3b85,0x3baa2c2e,0xbc496e83,0xbd012cdd,0xbc16d7ab,0x3a72a69d,0xbb5ee012,0x3c04cf7c,0x3a354357,0xbca2dec7,0xbcdcd4b3,0xbccfee21,0xbc740e08,0x3aae9cd5,0x3c023960,0x3b9af232,0x3b94cb94,0x3b8e35b9,0x3c024af3,0x3bee0d97,0x3b9a848e, +0x3afee598,0x3bf80d6f,0x3b5c0cb6,0xbaa9cdd5,0xba366f68,0x3be56b35,0x3cdb6957,0x3c0d9899,0xbb2bee6a,0xbc0eca5a,0xbd0652e2,0xbcb339eb,0x3c72c552,0x3d374966,0xbd6c32fe,0xbd160de6,0xbd0c38f6,0xbbdbb5f7,0x3d02b10b,0x3c2040bc,0x39e71d7c,0xb8c70cfc,0xbc7b5564,0xbc3724f0,0x3ca22c0c, +0x3af3ca0f,0xbb3087e6,0xbabf32cb,0xb9ddbe3f,0x3ac0fdd0,0xbb110a42,0xb9a2c69f,0x3a295a6d,0x3ac66d99,0x3b99e5a2,0x3bc52dd3,0x3ba845b6,0x3aabd6ab,0x3b4ad937,0x3c381604,0x3c6272dc,0x3c5d2096,0x3bc08bb2,0x3b4003c0,0x3b63d548,0x3c350ac0,0x3cc7a3c3,0x3c99b0d3,0xbbe4ac6e,0xbd38b76d, +0x3c203425,0x3cd1cc1f,0x3c712f18,0x3b654f5c,0x3bc69036,0x3c85435e,0x3c868956,0xbb023387,0xbc0e7192,0xbc498ad3,0x3a366276,0x3b0da71f,0x3c1c580f,0x3c53eac3,0x3c7098fd,0x3c1afe1d,0xbaac26b2,0xbab307c4,0xbaf0f8d3,0xba9e9ad2,0xba88b257,0x3b117c65,0x3b275962,0x3ba61107,0x3c04309d, +0x3b947802,0x3bda0b82,0x3b8f4728,0x3aa68a15,0x3bfcc565,0x3c21768e,0x3c8d867e,0x3c00f2fb,0x39b6594e,0xbb010bc9,0x3beba2c9,0x3c9c6b0a,0x3c9b6f46,0x3b89d30c,0xbaf39808,0xbc5c68bc,0x3c633bdc,0x3c9cbc94,0xbb08622f,0x3c413e19,0x3be61b84,0xbba22036,0x3c16dab0,0x3c706a90,0x3c8e3a96, +0x3c419b75,0x3c0908d6,0xb9df9745,0xbaecf48a,0xbb487495,0xbb8bf9b7,0xbb7f368a,0xbb027e35,0xbb622f7c,0x3aa701e1,0x3b0f92fa,0xb7a79283,0xba8dc451,0xb99c45d4,0x3b407326,0x3be9e34d,0x3c2f4f3b,0x3c82600b,0xbb92a5e0,0xbc088461,0x3b53ecc2,0x3c80cd38,0xbcce962a,0xbca9a3d3,0xbc62a796, +0xbb47d2f5,0x3c0283d8,0xbaa3b04a,0xbb1655f8,0x3af81406,0x3cae306c,0x3cde0d39,0x3c90940c,0x3c81a54b,0x3c056579,0x3bda9418,0x3b7c9967,0x3bb8e404,0x3b9fa4a5,0x3ae33f15,0xbaa52814,0xbb84ac1b,0xba79af89,0xbb18e071,0xbbdf698d,0xbc125eb7,0xbbe87114,0xbb44b661,0xbbb16bf6,0xbb8fe9ef, +0xba84a929,0xbb94a430,0xbb96ed66,0xbb4874f5,0x3b0aee42,0x3b4d6aae,0xbac31daf,0xbc9e5d11,0x3c8a8bfc,0x3ca7a07c,0x3c903a35,0x3c3e3f29,0x3bef7f59,0x3bffeef8,0x3c49e40a,0x3ca2150f,0x3bc4109e,0xba8671d9,0xbc1d6ab3,0xbbb88e40,0x39dd7ccd,0x396028bf,0x3b19df98,0x3b63ac16,0x3b87f597, +0x3bc94ffb,0x3bb2cfd0,0x3ae9c38c,0x3aa31371,0x3a47f800,0x3b02478d,0xbb3bead6,0xbbca037e,0xbbdbba17,0xbc183978,0xbbe3bee4,0xb8a8c3c8,0x3a4993af,0x3ad6dd6c,0x3ba101cd,0x3ba7012e,0x3ba67922,0x3c19369a,0x3c3fbde2,0xbc9115f1,0xbc289b71,0xbc116f0f,0xbb8f08d0,0xbb8d1afd,0xba8581be, +0xb9ffb796,0x3af9a591,0x3b31815f,0x3b8db1e5,0x3b9694f8,0x3bb0b91a,0x3b778c1b,0x3b4d739a,0x3a54d134,0x3a695772,0x3badf8b9,0x3b8a709a,0x3b9023aa,0x3b5dfe7e,0x3bb462b4,0x3ac9e0e5,0xbba50cd8,0xbc1ae473,0xbc2cbd36,0xbc20b32e,0xbc095569,0xbc3c55f3,0xbc69b02c,0xbc926ab8,0xbca7305e, +0xbca179b0,0xbcd7666d,0xbcddfc84,0xbce25e41,0xbcc0b5c0,0xbbe747e1,0xbaff2ff9,0xbaae41ed,0xbaa01324,0x396a8106,0x3aa66408,0x3af1df9c,0x39c3bb45,0x3a309bdd,0x3a891e0c,0x3b276533,0x3b53f2fa,0x3b377a86,0x3af8cb6d,0x3af5eea1,0x3b12395a,0x3b9d80a4,0x3b93646c,0x3baba9f5,0x3bb9c3ac, +0x3b478938,0x3a5ea383,0xbb5c9751,0xbbe3c61e,0xbc45115c,0xbc7500c5,0xbc9360e3,0xbc96a527,0xbcac09e9,0xbca73e8e,0xbcaabe94,0xbcb11b2d,0xbcb479ad,0xbcad633e,0xbc803ea9,0xbc38b984,0xbb9cd2fc,0xbb5ba14c,0xbb4b9a5c,0xbb067da4,0xba848f88,0xbaa9e68d,0xbaa06c05,0xba2f552b,0x38b566b4, +0x383d228a,0x38e318f9,0xbaa90299,0xbad9f696,0xbb05c0bf,0xb99e0fd3,0x3a38705b,0x3ab77fe2,0x3aaf5d38,0x3b0067c7,0x3af3d41e,0xbab82d31,0xbb45db2f,0xbb977556,0xbbe8bc9c,0xbc2eace5,0xbc6d3cdd,0xbc78a28d,0xbc74cb5f,0xbc9035d9,0xbc8037f6,0xbc8a4cab,0xbc87e0c0,0xbc3d0583,0xbbd4f495, +0xbbba85ce,0xbbb88174,0xbbe7b4f1,0xbba0240a,0xbbb7738c,0xbbc985f8,0xbbdd6ca2,0xbbea3f65,0xbbedc027,0xbc01fcb5,0xbbf49af2,0xbbd512d6,0xbbb47777,0xbb8d9137,0xbb54d358,0xbb3204a4,0xbb6e521c,0xbb8ba64c,0xbb9aa9c6,0xbb9dc2dd,0xbba1d9c2,0xbba2a17e,0xbbc166ae,0xbbce57f6,0xbbe538e7, +0xbbed957a,0xbbcfbd04,0xbba42025,0xbbab4d17,0xbb854c02,0xbb88a89e,0xbb8ce224,0xbb38dd16,0xbb8a8118,0xbbbe72a1,0xbc0e79b7,0xbc0f8cd7,0xbbd6174f,0xbbb434d4,0xbb988d1f,0xbba2b7a4,0xbb98d972,0xbb90e73f,0xbb91d64f,0xbb8f8dd3,0xbb8ddf17,0xbb86d28c,0xbb8b9582,0xbb928028,0xbb984aba, +0xbb9dab28,0xbb96f13c,0xbb8e2247,0xbb86cf14,0xbb86420c,0xbb83d237,0xbb82d25d,0xbb7cfc2c,0xbba46027,0xbbc234cd,0xbbdb3e7f,0xbbbff61f,0xbbea649f,0xbc0a4428,0xbc1377ce,0xbc0d4d42,0xbc0d51f9,0xbc110957,0xbc0b59ab,0xbc0640c6,0xbbccefc9,0xbba0006f,0xbbc2f76a,0xbbbeb4f5,0xbc10d493, +0xbb1b7e87,0xbaca9696,0xbade7e04,0xbb01cef5,0xbaf0cffb,0xbacec766,0xbaf7c3c7,0xbb036e54,0xbaf13a6d,0xbae51de8,0xbac29a93,0xba471c1e,0xba21a65a,0xba7a49a7,0xbaec28ae,0xbb13e661,0xbb265cc9,0xbb1bd656,0xbb0908c5,0xbaed2d3c,0xbab73835,0xbaf9bdda,0xbb12374e,0xbb359abe,0xbb0afbdd, +0xbae42479,0xba21ceb0,0xbab0be8e,0xbaa07e83,0xb9dc46c7,0xba87d1df,0xba923dd9,0xbaad57c4,0xba6e18fa,0xba91fa5b,0xbb2a75b0,0xbadab4b5,0x3a4d9e22,0xb895bfe9,0xbae1eb88,0xbb4d38ed,0xbb680e46,0xbba150ab,0xbb92d20d,0xbb4b81ab,0xbb1c196b,0xba862869,0x38bf5ff3,0x3afa3964,0x3a782d89, +0xbb4431b0,0xbb9b15c8,0xbbb8a421,0xbb99e2ed,0xbb6e5b30,0xbb3a9639,0xbaf6fd7f,0xbb5c0666,0xbb8db3ac,0xbbb54ea8,0xbb6ddbd3,0xbb01ad76,0x3ac811a8,0xbac5e215,0xba2ae063,0x3b602853,0x3b18752f,0x3b129674,0xb9a8e80c,0x39cb8b0f,0xb9180085,0xbb4c7781,0x3a42f476,0x38a42eb8,0xbada8b1c, +0xbb50d2fd,0xbb7879fc,0xbb40072d,0xbbacca5d,0xbbca8ab6,0xbb886cbf,0xbb687519,0xb9b3a2dc,0x3b1995ed,0x3bbb858e,0x3b65c6f0,0xbb79a4e2,0xbbe18d51,0xbc0fcf48,0xbbf9b5d9,0xbbb63b18,0xbb7fe121,0xbabec8b1,0xbb7792a9,0xbbaca9d6,0xbc0071b2,0xbb9f218e,0xbb2eaa62,0x3b9e10d6,0x3a0df1d1, +0x3ad64083,0x3c043d7d,0x3b98de2b,0x3b80c834,0x3af9b030,0x3b4a592f,0x3ac5f537,0xbbb74a80,0x399ae7a1,0x3bce2a99,0x3b3bf9d1,0xba8141f4,0xbbaabc89,0xbbb2bc0e,0xbc1d140c,0xbc147d7a,0xbbc1fcd2,0xbb586e55,0x3b035975,0x3b818303,0x3c2ccca2,0x3bfee1ec,0xbbb3deb1,0xbc283bb0,0xbc590899, +0xbc27aec3,0xbbfe2894,0xbb984f63,0xba9ef7a4,0xbb9b3517,0xbbf83e75,0xbc1daa4a,0xbbc59b58,0xbb8e20ab,0x3c2e3d76,0x3b0d934d,0x3bb9dce1,0x3c6a2dec,0x3c681aea,0x3c47d129,0x3b48defb,0x3bdc011c,0x3b65b6ff,0xbbad67a9,0x3b9c4341,0x3a0f74a6,0xbb5393fd,0xbb98e0e1,0xbb8ac82d,0xb99865e7, +0xbbcee208,0xbc230302,0xbbf2f6b0,0xbbaaf95d,0x3ae1c980,0x3c02aa95,0x3c7e2ab4,0x3c37727b,0xbba92dca,0xbc47875c,0xbc80f4f7,0xbc5acd7e,0xbc164450,0xbbc3513c,0xb996bd0d,0xbb59de83,0xbbb707fa,0xbc0f6b3d,0xbbd23f17,0xbb40b44e,0x3c44d5ce,0x3c18076a,0x3c2f4961,0x3c898e49,0x3c7ad925, +0x3c5b6a0b,0x3bddcb10,0x3c46d899,0x3bf7a7ee,0xbc3b1a17,0x3a58eca4,0x3cf8c0b8,0x3c218cc1,0xb898621e,0xbc51ff83,0xbce06267,0xbc942a22,0xbbaed631,0x3c3a464a,0x3c2d06af,0x3be9997b,0x3a57273e,0xbcba1ee2,0xbcd130e5,0xbc5a510e,0xbb2cde05,0x3b65570f,0x3b95c319,0x3b1c81d8,0x3a827153, +0x3adaf335,0xb8ba5665,0xb9c1a962,0xbb345e82,0x3c02e8cb,0x3bb0f553,0xbbe71fb9,0x3bab5912,0x3c2ba93f,0x3c141809,0x3bc31ee6,0xbb83230a,0xbc7672a1,0xbcef5139,0xbc5973d5,0x3ca9ca26,0x3d140069,0xbd268743,0xbce3149e,0xbcd506c7,0xbadb2e84,0x3d43de94,0x3c77ed0f,0x3bf89988,0x3be0a922, +0xbc2bbe93,0xbc196896,0x3c293f59,0x3bb6405a,0x3b35a0f9,0xbbbb8e75,0xbbcd4338,0xbbd200fd,0xbbc28022,0xbb23ecee,0xbab66f87,0xb972fa7e,0x39ceca5f,0x3a96a811,0x3b7d6039,0x3ac8b7e0,0x3b9badfd,0x3c2f1e82,0x3c182e71,0x3bd76ecf,0xba5cec19,0xbb2702cc,0x3b2c9ebb,0x3c8c6ca1,0x3ce39072, +0x3c62abaf,0xbcfb797c,0xbd19f035,0x3b77d866,0x3d134a75,0x3b3385cc,0xbc4646d5,0xbbe08375,0xbc30e98b,0xbb4774cf,0x3ced9048,0x3a81ce6a,0xbbd783cd,0x3abaa69c,0x3b7b35c6,0x3bffd6b6,0x3c101cbf,0x3c2480f6,0x3ba87197,0x3b11fc6d,0xbab69663,0xbad26ac6,0x3a8ba5f1,0x391cc6f1,0x3b0580a7, +0x3afc4005,0x3bd91852,0x3bf4208f,0x3b612291,0x3b4af9bb,0xb9e7875d,0xbadb4f32,0x3bbbbb79,0x3bfd6f38,0x3c6f74cc,0x3b6ce46c,0xbc170534,0xbc3b5893,0xbb8e6044,0x3b7a224a,0x3c846dce,0xbb76657a,0xbc3ccd90,0xbce77161,0xbc803c66,0xbbc1ac89,0x3cd831ff,0x3c77b607,0x3c349d01,0x3ade6c60, +0x3c370445,0x3c705851,0x3c73d2c3,0x3c0b2909,0x3bad2d41,0x3aebf5f6,0xbb61d400,0xbb8a505f,0xbb3dbb04,0xbb2d4ad7,0xbac03b25,0xbb52fd03,0x3aee1519,0x3aab9ad0,0xbac99783,0xbb4ef829,0xbb0e94bc,0x3aa6f26f,0x3bd9ed49,0x3c1cc8a9,0x3c03ba80,0xbc140991,0xbc717e4c,0xbb3004fa,0xba145384, +0xbc2b13d5,0xbcb1e444,0xbc3cb6f9,0xbbd101e8,0x3b30632c,0xbbb492ef,0xbb89ace0,0xba8f51e6,0x3c5f8c55,0x3cb16a9d,0x3c8d8ef0,0x3cabd0cb,0x3c856c18,0x3c376a9b,0x3b891fe0,0xb9cbd316,0xbabb548b,0xbb719b14,0xbbab6060,0xbbfdc240,0xbbb94b26,0xbbe07515,0xbbf96c3a,0xbc23557f,0xbc05103e, +0xbb32c6b9,0xbbccd7d8,0xbbb36ad7,0xbb0319ef,0xbb9fd9bf,0xbb09f5b3,0x39764fec,0x3bd76a05,0x3c02adfd,0xba9bd3e2,0xbba49134,0x3c7922c8,0x3c9c8759,0x3ce149e1,0x3d032248,0x3cad9d67,0x3ca348cb,0x3cb11766,0x3ce9dc5b,0x3c842682,0x3c0f5b0a,0xbade91ff,0xbbdd6ff0,0xbb738143,0xbb89d407, +0x38e8f771,0x3b32f58c,0x3b8a7db6,0x3b99d25e,0x3b9aa7ea,0x3b2b0fb8,0x3b0c0202,0x3a7180ea,0xbb43a938,0xbb83e119,0xbbc5ff76,0xbbecbec1,0xbb8c3f55,0x3995fcb9,0x3b9bbc10,0x3b5ef479,0x3ae725fc,0x3b6b7cf8,0x3b8a7d81,0x3baf1754,0x3c37fa2e,0x3c231f89,0xbc99a146,0xbc48d63a,0xbc47b851, +0xbc01cf0d,0xbb9120fe,0xba1ebabb,0x39c6bce6,0x3b4adca7,0x3b8e3d95,0x3bc2d3e8,0x3bf6c632,0x3be96da8,0x3bae0d6f,0x3b4c0d71,0x3b601f61,0x3b9101d3,0x3bbf0ab5,0x3bba8880,0x3b9c5cea,0x3b84d6ed,0x3aee424c,0xbb3987fa,0xbc0e3f20,0xbc1fbbcc,0xbc1d9899,0xbbff599b,0xbbd18b6a,0xbc10586c, +0xbc202aa1,0xbc56844e,0xbc654e09,0xbc40eff2,0xbc81e427,0xbc8e4728,0xbcbc004e,0xbcb36393,0xbc34140e,0xbb7db270,0xbb678f96,0xbb49b207,0xbb53c047,0xb9291411,0x3b5be58f,0x3bbf6167,0x3be0dbd5,0x3be05777,0x3bf3d005,0x3bc424b3,0x3bb66d84,0x3b940d64,0x3ba26b95,0x3bbf2046,0x3bdcc917, +0x3bc88286,0x3bb7b407,0x3bc16aaf,0x3b02c5d8,0xbaf7d1c4,0xbbf7a490,0xbbf63c61,0xbc1700f3,0xbc0e9f64,0xbc4ea9ca,0xbc5c766a,0xbc8015da,0xbc841194,0xbc8cc51f,0xbc9763fa,0xbca05d67,0xbca9baa5,0xbc9d5a21,0xbc7f3cd2,0xbb916591,0xbb5a20e9,0xbb3a580d,0xba8131b8,0x3a996c39,0x3acf199b, +0x3ae0a16d,0x3b2e8b3d,0x3b18aed6,0x3b31335d,0x3b7014a2,0x3b54342f,0x3b5ca92f,0x3b3df64d,0x3b5c70be,0x3b74ea31,0x3b7ba2e5,0x3b66cd3e,0x3b6fd26e,0x3b63da03,0xb8eb8a43,0xbb417917,0xbbc50f67,0xbbc9d1c2,0xbbef6323,0xbc0014be,0xbc208946,0xbc276543,0xbc6b328a,0xbc5924bb,0xbc8038c7, +0xbc843500,0xbc58413f,0xbc1b649f,0xbc15345f,0xbbcc02a9,0xbb3521bd,0xb997fb4e,0xba900e21,0xbb256aaa,0xbb8bb13d,0xbb9a9783,0xbba7fa98,0xbbb64f47,0xbba35485,0xbb898775,0xbb85bbeb,0xbb67c6c7,0xbb4687fd,0xbb189f66,0xbb175787,0xbb098577,0xbaf8b95f,0xbad0ffc5,0xbaa99c14,0xba2b1af8, +0xbafb461a,0xbadd5ea1,0xbb04f929,0xbb31533b,0xbb5e996d,0xbb629736,0xbb60dbf6,0xbb24c27d,0xbae62568,0xbb026a82,0xba2ff61f,0xbabba24d,0xbb1103be,0xbb5c72d4,0xbb5a3bb6,0xbb1f12e2,0xba686201,0xb9c010f4,0xba3cde88,0xb9ca05e2,0xb8c49cc7,0xb637eaa9,0xb95e3c68,0xb9ebafc3,0xb9bf27a1, +0xb9eac253,0xb9ae1979,0xb95c17d5,0xb9553a01,0xb933bd8e,0xb9152768,0xb8e2e350,0xb84e291d,0xb80fd0ea,0xb8b20beb,0x39111e39,0xba64a3ea,0xbae09f0f,0xbb30ef01,0xbacfb2ab,0xbb109aa5,0xbb524861,0xbb6da8fb,0xbb702907,0xbb8457f3,0xbb8fd023,0xbb8b357b,0xbb91eae5,0xbb37d0c8,0xbad0390f, +0xbb0f305d,0xbab51064,0xba831a0c,0xbab38fdf,0xba115829,0xba4dfd05,0xba59effd,0xba48d53a,0xba36bad9,0xba924c5e,0xbaaf09e2,0xbabcb855,0xba80a41a,0xba250138,0xb899dac8,0x38c5b621,0xb8cd163b,0xb9f02c4b,0xbaa88584,0xbadf6ef0,0xbaea3cbe,0xbae09c33,0xbace7049,0xbaa6d0f9,0xbad8efcf, +0xbaf542be,0xbb241f34,0xba9b7b35,0xba7db4a1,0xba16fd82,0xba757398,0xba4cbb87,0xb8ac32a8,0xba3488f8,0xba2d463d,0xb9b5a962,0xb9ca6dc3,0xb9e69c79,0xbaaadb56,0xba35d9ad,0x3a4124f9,0x38409a31,0xb9b4e6ed,0xbacaf3ef,0xbb24a113,0xbb8ea70f,0xbb8429a9,0xbb5534af,0xba98b0d9,0x39c3e528, +0x3a6a971f,0x3b19c2cf,0x3b0607dd,0x396fd07a,0xbb1b3f95,0xbb7f3a78,0xbb81f8a3,0xbb75c5b9,0xbb5aa8ca,0xbb17cf24,0xbb563cb1,0xbb7e170a,0xbba56d8b,0xbb1bc587,0xba5b3050,0x3a73052b,0xba70b1d6,0xb8b01ca4,0x3b6aa4f7,0x3af2d5a5,0x3aba547b,0x3a889625,0x3a34e8d5,0x3a4b6207,0xba757260, +0x3a92b170,0x3ad613aa,0xb9768e50,0x3900e40f,0xba165e7e,0xba80191e,0xbb851284,0xbbb90853,0xbb9aea75,0xbae48451,0x3ab2a9f5,0x3b4fd4db,0x3bc88cb5,0x3bb0671a,0x3ac5ff1e,0xbb6760b2,0xbbd140ab,0xbbe73673,0xbbd519c3,0xbbc2c433,0xbb71a414,0xbba841bf,0xbbbf733a,0xbc0452d9,0xbb437ca1, +0xba55530c,0x3b2dd29b,0x3a87dc27,0x3adaebc1,0x3bebb477,0x3b55f1eb,0x3b5773a3,0x3b8adf2d,0x3b54ec52,0x3b088452,0xbabb1016,0x3b1937c8,0x3bac6356,0x3af9c8d2,0x3b0ff48a,0xbac79f4a,0xbb745c62,0xbc166dd5,0xbc18c83c,0xbc02b4b0,0xba656ed5,0x3b8e62d9,0x3b8e91a7,0x3c26be7d,0x3c1aaaff, +0x3b76ea2b,0xbb97d5d1,0xbc1ba6d6,0xbc1ca3e8,0xbc24b941,0xbc0713d7,0xbb8f063a,0xbbd6fce4,0xbbf4c451,0xbc319b37,0xbb4371c0,0xbb065f20,0x3c047de3,0x3b0378fb,0x3ba35117,0x3c821aa3,0x3c413515,0x3c2864d9,0x3bb68d45,0x3bc171c6,0x3b986494,0xbaa62751,0x3ba0addd,0x3b8dbdf1,0xb8d98474, +0x3b03302e,0x3b124f01,0x3b741ec3,0xbb997651,0xbc0f418a,0xbc0dee53,0xbb1a4033,0x3b7ea44b,0x3bfa31f9,0x3c70fb4c,0x3c7524bd,0x3bb28c76,0xbbbaddd8,0xbc40a6ea,0xbc54e631,0xbc4c1e2a,0xbc3f3892,0xbbc873ff,0xbbe8d75b,0xbc00cbcd,0xbc2a5e6c,0xbb88310a,0xbac39122,0x3c26685e,0x3be2e2ac, +0x3bfea046,0x3c915a26,0x3c833b2a,0x3c580584,0x3c2d0e70,0x3c2eae25,0x3bc55b8e,0xbba52e35,0x3b9baa0d,0x3bf5df04,0xbb31abc6,0xbc02651a,0xbc7f4b21,0xbcddffb0,0xbcc1bd92,0xbc401e18,0x3c748b14,0x3c2d5126,0x3c2d0938,0x3c7b7e22,0xbc8b067d,0xbcc9f688,0xbc7f36a8,0xbb7c3a09,0x3b2e93d8, +0x3b9e418a,0x3b9fbb06,0x3b38cb53,0xb93337e7,0xbb2c2136,0xbaedc252,0xba38d1c3,0x3bd4faed,0x3bb6a50b,0xbc0c2aee,0x3c4d4a1f,0x3c754932,0xba750f3d,0x3b082bf4,0xbbfa39a5,0xbc861c8b,0xbc980436,0xbb2c2fde,0x3ca918f4,0x3c922a0f,0xbca6787c,0xbc47546e,0xbc2977f7,0x3bc02739,0x3d3e8780, +0x3cbbabe6,0x3c9226d8,0x3c141a24,0xbbbee467,0xbbf2d6ac,0x3b0a490c,0x3c4bc1b8,0x3c4a62f9,0xbc024085,0xbbf1ee86,0xbc1da65b,0xbbd3efbc,0xbb9f56c0,0xbbb276d6,0xbbc8f0c9,0xbbb23b95,0xbb883d8c,0x3b428ccb,0x3ad2c3fa,0x3bb96ada,0x3bfca302,0x3ba7d0f2,0x3a5ed5bc,0xbbe0cbd4,0xbb2294ff, +0x3bac1634,0x3c928408,0x3c927774,0x3afaa5cd,0xbd09d5f4,0xbcd2b3ca,0xbb044555,0x3cffd982,0xbc470a0e,0xbca00e54,0xbc51a925,0xbcc42bc1,0xbc7e1aa1,0x3d145933,0x3b9a586a,0xbac06bc4,0x3b850beb,0x3bcf8f6d,0x3bc6d769,0x3b308fcb,0x3bb721a1,0x3b2f151d,0x3bd9a04d,0x3a3abd83,0x3a4ce706, +0x3a80e1b6,0x398c38ba,0x3a9f64bb,0x3b3f68ed,0x3bafd3f4,0x3b91fa27,0x3b4a2be5,0xb9311ea9,0xbb86ebec,0xbb287165,0x3b62641e,0x3b6a6dfb,0x3baf3b12,0x3b4ddb95,0xbc24d7f7,0xbc2a3470,0xbc69393b,0xbbfa7d5a,0x3c18ab48,0xbc42d5e0,0xbc883f52,0xbcddbe20,0xbcfddc38,0xbcaa4f1e,0x3d1eb1ab, +0x3c5132de,0x3c41a2ef,0x3c5be86f,0x3c1d3e96,0x3c22f67f,0x3c446d01,0x3c023d75,0x3ba7ae68,0x3b598c6b,0xbb0acde1,0xbb4bd22b,0xb96a4e0c,0xba8f3f24,0xba742b42,0xbb09cf41,0x3a9dc1c2,0x37af30d6,0xbabe029e,0xbb5a6270,0xbb3284f3,0x3ad804bc,0x3b50e229,0x3b7ec293,0xbb7ffb46,0xbbf07eb3, +0xbc30a379,0xbac54523,0xbc43272e,0x3890b4d7,0xbc84c778,0xbba89f3d,0xbb8f6059,0x3b314148,0x3b3dd9cb,0x3bd2a4fe,0x3b2f2cda,0x3bf86863,0x3c6e0d0e,0x3ca763c3,0x3cb3fd29,0x3c96a59f,0x3c4af4d2,0x3b9c1c75,0xbb707593,0xbbe862eb,0xbbf88f31,0xbc0bafe2,0xbc024007,0xbc136988,0xbc22c93b, +0xbc043d3e,0xbc04e486,0xbbc6f3b3,0xbb54af32,0xbb55b632,0xbb585222,0xbb67f295,0xbb7c956f,0x36c60632,0x3b3511f5,0x3ba8da0a,0x3be5b584,0x3b4ae328,0x3bb9e386,0x3ba2710d,0x3b21121a,0x3c88e570,0x3ce42de1,0x3ca077da,0x3ca8f298,0x3cae355c,0x3cda4903,0x3ca59f5c,0x3c84f233,0x3c326fd8, +0x3b0a91e4,0xba81b893,0xbb76fcc9,0xb841a270,0x3b47e87c,0x3bb81049,0x3b80c281,0x3b7402e1,0x3b81a617,0x3adb8b14,0xba4b67d8,0xbbdfa78a,0xbbeb7e46,0xbbd4dc5b,0xbbd2268f,0x3ab97fd3,0x3bbfb709,0x3bb3e99c,0x3b80b542,0x3aa4e0e3,0x3a8fed1f,0x3bb7bf86,0x3bc93292,0x3c0badef,0x3b37e35e, +0xbc50eac8,0xbc3dc7c1,0xbbad0f12,0xba429f4e,0x3b564be8,0x3ba473b9,0x3b92db9a,0x3b6149f8,0x3ba12b21,0x3bcbfda6,0x3bf5c9d3,0x3bae0acf,0x3ba667bc,0x3b90611a,0x3bae0afc,0x3bac4661,0x3b781ac3,0x3b9e95e7,0x3b3621dd,0x3ac95f34,0xbb605e21,0xbbf133c2,0xbc1aad0c,0xbbf5f1c2,0xbbe0a629, +0xbbfae291,0xbbc61712,0xbbe03956,0xbb95d553,0xbbc24e29,0xbb9a37f4,0xbb212bb4,0xbb7e0a7e,0xbbaf41d6,0xbc5b68a9,0xbc4c55c8,0xbc41e07e,0xbbcbc656,0xbb97f87c,0xbb6add01,0xbbba71b9,0xbb154b7b,0x3ac39c38,0x3bc1ec3e,0x3bf90fd9,0x3be631b9,0x3be2aa1c,0x3ba23d3f,0x3b984ef3,0x3b97e916, +0x3baa359d,0x3bc4a7f6,0x3bac43d6,0x3b900cd0,0x3b29f286,0x3a9c3546,0xba832f18,0xbb8257bb,0xbbf70e6e,0xbbd5fac5,0xbbd21263,0xbbdbca66,0xbc1157c4,0xbc1b0bdb,0xbc21d751,0xbc2fd753,0xbc4855db,0xbc6c949a,0xbc6c087a,0xbc8b6533,0xbc9e2637,0xbc818db6,0xbbc2a150,0xbb87743d,0xbb8c8f7a, +0xbb30d5ab,0xba2a545f,0x395315d9,0x3980ac8b,0x3a5c780c,0x3a961c1c,0x3b495cce,0x3baf2f90,0x3bb2d141,0x3bc4f66e,0x3bba41c3,0x3ba6d803,0x3b9f47c4,0x3b9585bd,0x3b5e201a,0x3b08c8d3,0x3afd8331,0x386d9734,0xbaf6d1a4,0xbb8050c9,0xbb8f0f44,0xbba80733,0xbba0ea42,0xbbd6fbc5,0xbbfd98d0, +0xbc320aa4,0xbc398ed6,0xbc663bc7,0xbc73ed5d,0xbc6e2526,0xbc529298,0xbc4e4d1d,0xbc081284,0xb9351a89,0x39d2d01c,0x397c142a,0xb93f9970,0xbaa8cb95,0xbaaf742d,0xba7eb4df,0xba3ea7e7,0xba034631,0xba8e0bad,0xbaf2b2f7,0xbade51ea,0xbabe5652,0xba231c4c,0x37cb2cd0,0x39f27b8a,0x3a8ce5d4, +0x3afd5da9,0x3b31f5d6,0x3b51a18d,0x3b0f823c,0x3ab23dc2,0x3a2d10e7,0xb96562ce,0xbabead9c,0xbb29c45b,0xbb39a6f6,0xbb136547,0xbac381f4,0xbb043639,0xba8712d3,0xbadf79f8,0xbac0b174,0x38a2042d,0xb812008f,0xba6013ad,0xba9027b0,0xba9aa36b,0xbaa3a34c,0xba8d0b14,0xba4af344,0xba4032ea, +0xba857804,0xbaac0a45,0xba92d54f,0xba2b0c87,0xb8e4b76e,0x393fddb2,0x398651c5,0x3928d4bf,0xb81630c7,0xb8baa502,0xb9434220,0xb9c5a740,0xb9fccb40,0xb9b69ed0,0xba01c987,0xba067721,0xba263046,0xba9f5bc3,0xba8d30ce,0xba80ded8,0xbaaa6d80,0xbadc1169,0xbb1a8923,0xbb3796bd,0xbb3657c8, +0xbb613fac,0xbb4db804,0xbb2fab4d,0xbae27e08,0xbab0da9d,0xbab76283,0xb9fe625d,0x3962a8c6,0x38b34896,0x39b9dcc2,0x396ea074,0x375095aa,0xba19bea2,0xba4857e3,0xba59038b,0xb9a2c5d4,0xb804a20b,0x3934216c,0x3a13b680,0x3a210dca,0x3a5945aa,0xb9851b17,0xba495ea8,0xba990ead,0xba9d019a, +0xba9a7c5b,0xba8b8a15,0xba9dec01,0xba9f3ae7,0xbae738ad,0xb9532487,0xb8fc9e1d,0xb9e7a64a,0xb9de27b7,0xb9c25a91,0xb901d3eb,0xb9b7a957,0xb9546386,0x39db9715,0x378bcfda,0xb7f5a631,0xb939e7f7,0x38f71ef5,0x3aa0a961,0x397f2295,0x3a53dbfa,0x38c9901c,0xba871239,0xbb710387,0xbb6e4605, +0xbb347425,0xb8522529,0x3aa96e03,0x3a433761,0x3b04abed,0x3b289ef1,0x3b526748,0x38b91421,0xbaed68e0,0xbb4741a0,0xbb53bc28,0xbb5359d2,0xbb28a786,0xbb3734c7,0xbb3b2f98,0xbb5b5a0b,0xba23d33c,0x39f8740a,0x39bf692b,0x391fc054,0x3a225bd5,0x3af44fff,0x3a0a524e,0xb807a4ef,0x3aef89b5, +0x3a32b129,0x3aa7fdbd,0x3a9e2d10,0x3add3d89,0x3b4b90f7,0x3ab53a50,0x3b69381d,0x3b21b439,0x3a72343c,0xbb5323af,0xbba1d496,0xbb71ea27,0xb92b225e,0x3b0cc5ca,0x3b1600a1,0x3bb189b4,0x3bcd67ec,0x3bd9f72b,0x39b9ffcb,0xbb4c334d,0xbbc19f83,0xbbc4c5de,0xbbd10d6f,0xbba59b1f,0xbbb28d62, +0xbba64480,0xbbc4c01f,0xb9e2340f,0x3ab9c646,0x3a69a95d,0x3af122b8,0x3a996d00,0x3b5f57b9,0x3a83501a,0x3aee11c5,0x3b9fea79,0x3b20c84d,0x3b032865,0x3afd653d,0x3b59ee26,0x3ba50bff,0x3a8c52fa,0x3b92467e,0x3b138bdf,0xba3e169e,0xbc01ecb0,0xbc14f5be,0xbc03916e,0x3adce484,0x3bb562c2, +0x3b23b8ff,0x3c029602,0x3c177213,0x3c4b91ed,0x3aa7f8fe,0xbb96d071,0xbc068c2f,0xbc20217a,0xbc1a4970,0xbbdbf3a6,0xbbe9e775,0xbbc377a8,0xbc11f6f8,0x3aa9f8dc,0x3ac4c205,0x3ba5e1aa,0x3b60e376,0x3ba750eb,0x3c406898,0x3bdc3314,0x3bce8011,0x3be2e261,0x3b933cab,0x3ba462d4,0x3b674841, +0x3bb285a0,0x3be854bb,0x3b804753,0x3c0d5fc4,0x3c088278,0x3bdfaf1c,0xbb773857,0xbbcfbba2,0xbbd8221a,0x39051a20,0x3b9039cc,0x3b9db160,0x3c4422a0,0x3c85c2fd,0x3c821df6,0x3b0044ca,0xbbc4f796,0xbc3afb5d,0xbc4a92ff,0xbc5e1c34,0xbc217f85,0xbc18da36,0xbc073c6f,0xbc1f7f67,0xba12ff52, +0x3af833aa,0x3bfdb04c,0x3bd0ef3a,0x3bd9f626,0x3c80305d,0x3c6cb75b,0x3c3af8d9,0x3c55b55f,0x3c04dda9,0x3b89d04b,0x3ae094a8,0x3bd9a94c,0xbbdbfb60,0xbc5e8602,0xbc830cef,0xbcab31d1,0xbcdd687c,0xbcc936d6,0xbc7d386f,0x3c510b0b,0x3c29d8d7,0x3c4b7bb0,0x3cb6729c,0xbc1fb450,0xbcb50f89, +0xbc9aadb2,0xbbc966e7,0x3b046fb2,0x3bd37d5a,0x3c12972d,0x3bf5194f,0x3aba3efd,0x3a08c242,0x3ab33641,0x3bc52bc6,0x3b8c6aaf,0x3b88368f,0xbc034fb5,0x3c8aed7c,0x3c8ec9dd,0xbb39e93d,0xbb40e85b,0xbc513219,0xbc8d36bb,0xbbf1149f,0x3bd3cf0a,0x3c79d82a,0x3b9f27d3,0xbbdd4c1c,0x3b91a42f, +0x3c1ee8d9,0x3c5cc5b0,0x3cf4caa1,0x3cd4c94b,0x3cca4e7f,0x3c36562c,0xbb4d6801,0xbbd03284,0xba2796a0,0x3c837a87,0x3ca084d7,0xbb189259,0xbbab41c1,0xbc20c930,0xbbd7e2dd,0xbbad4391,0xbbc5121f,0xbc1a79f6,0xbbe9e9e6,0xbbb1e902,0x3a49c868,0x3a4a8f03,0x3b91d952,0x3ba91567,0x3aaa1efe, +0xbb649bcd,0xbc1c5b63,0x3b06af58,0x3c0e8db4,0x3c4650e8,0x3b6a752e,0xbc3bd252,0xbcf1c44d,0xbc9d6e00,0xbb97b537,0x3b00509e,0xbcd3cacb,0xbca0fd96,0xbc3c5c33,0xbc968484,0xbc8524cb,0x3c1e925b,0x3c0d87e4,0x3c129038,0x3b648f13,0x3c15d761,0x3bb8fb1e,0xba6560ac,0x3b441505,0x3b103c2c, +0x3c0092e2,0x3b681cd1,0x3b4e8c2a,0xbad6eeb3,0xb85d15da,0x393cb7d9,0x3b46383a,0x3b156a72,0x3a1f2c45,0x3b04f3f8,0xbb11bda4,0xbba5fca1,0xbac190c0,0x3ab00816,0xb91197a1,0xbb357307,0x3b4d0bb2,0xbbcee4e0,0xbc2ad258,0xbc4cce63,0xbc2f3ffb,0xbc0a3e7e,0xbcabf67d,0xbc9f7164,0xbc3fe54a, +0xbce1ade4,0xbcbbff14,0x3c530684,0x3c4d704b,0x3c8fa294,0x3c7d94de,0x3c0aea3a,0x3bb947ce,0x3c113d85,0x3c0145c5,0x3bde0821,0x3b790bf8,0x3aaff4c2,0xba8e98cb,0xbae7cf69,0xbacb6d82,0xbaf974ca,0xbaa3fad8,0xb9fc3f8b,0xba79d943,0xbb024e2b,0xbb014aad,0xbadf4961,0x3b008273,0xba7e2638, +0xbb35c93d,0xbc329b1f,0xbb6f4fd2,0xbb29cf1f,0x3a501cee,0xbc17a040,0x3bd4d785,0x3b587426,0x3c17db74,0x3b9b68d6,0x3c02205d,0x3c30380f,0x3c5a5bbd,0x3bb0ccd0,0x3ab989cf,0x3b9ee44c,0x3c923945,0x3c9894ee,0x3c8af91c,0x3c50fe61,0x3b875244,0xbb2cd393,0xbc107b7d,0xbc0a4add,0xbc1d5af9, +0xbc018760,0xbc229396,0xbc2c1c89,0xbc0feb01,0xbbad4c02,0xbb37af2f,0xbb30fdac,0xb99c8788,0xba52bfa7,0xbb907e78,0xbaeb25ce,0x3ab03cd0,0x3ba8d1e4,0x3b2f3ab7,0x3b9e2dbf,0x3c2a524b,0x3c137a40,0xbbe1246d,0xbc841358,0xbc1fda2e,0x3a9e6244,0x3b2e01ec,0x3c6a020f,0x3c9ca4c8,0x3cb97f47, +0x3cb605ed,0x3cb910ca,0x3ca5296e,0x3c5c2118,0x3bc39012,0x3b4b7752,0x3b855c92,0x3b89fe32,0x3b95a38d,0x3b79dd9e,0x3b3493b9,0x3b032aaa,0xba86b005,0xbb8e79f2,0xbc0e955c,0xbc1b435c,0xbbd21a31,0xbb5f38ad,0x3b66a378,0x3bcee68f,0x3b89ff71,0x3bab02d1,0x3b4bf83e,0x3ad6c94a,0x3bd4247f, +0x3bbc85a0,0x3abb6e60,0xbb532b26,0xbb25c8fb,0xbaaf454e,0x3bf93dc1,0x3c25f994,0x3c5f36fd,0x3c278a84,0x3c065da5,0x3ba7b511,0x3b884943,0x3b82226b,0x3ba503ae,0x3b50cba9,0x3b7f9e3e,0x3b8e8534,0x3ba00a62,0x3b93f9bb,0x3a86223e,0x3b1b172f,0xb9ee715f,0xbb4d5c26,0xbbf3f520,0xbc19a047, +0xbbe48ed2,0xbbd70d91,0xbbc867e4,0xbbe74dfe,0xbba6577c,0xbb796e97,0x399eda77,0x3ae6926f,0x3b93e196,0x3bd3bb1b,0x3be51d38,0x3bddc4cd,0x3b22b185,0x3a20cd7e,0xbc19767c,0xbbf974d2,0xbb9046f0,0xbae2e230,0xbabebd7e,0x3897136e,0x3ae1cfff,0x3b9559b4,0x3b98fa35,0x3b71dbdf,0x3b344d41, +0x3aac5307,0x3a96beca,0x3af33062,0x3b305077,0x3b7817b4,0x3b68e64e,0x3ae53c91,0xba6d1a39,0xbb6d68fa,0xbb7a27dd,0xbbabd3e2,0xbbd4ad84,0xbbc93f9e,0xbbc6171a,0xbbe4ac2c,0xbbebe516,0xbbdb1b7d,0xbbb92d2c,0xbbc1ec86,0xbbeab5c6,0xbc19aca0,0xbc0d1edb,0xbc33d2bf,0xbc682f00,0xbc4158e6, +0xbc0acbe4,0xbbc3f529,0xbbad8506,0xbb7f6ef5,0xbb15750e,0xbaadcd6a,0xba81ed64,0xba0aa21a,0x3a2900f1,0x3b2c1e3f,0x3b931f75,0x3b954a3c,0x3b9ab36c,0x3b87e945,0x3b6741d1,0x3b53e087,0x3b65a83f,0x3abef40a,0xba02adc1,0xba9d2d28,0xbae1e0e9,0xbb28543f,0xbb6ed78e,0xbb872156,0xbba4971e, +0xbbb73f71,0xbbd1eabe,0xbc00a4d2,0xbc19072b,0xbc2fbbb5,0xbc528bb8,0xbc5c84bc,0xbc6dbc75,0xbc7a9e12,0xbc7a4685,0xbc3193d5,0xb9fb7621,0xbab321a8,0xba9b3edf,0xb8a36b26,0x3a01a40c,0x3a83ad26,0x3b1ac13c,0x3b58c6da,0x3b3d35f1,0x3ac1b30a,0x3a1b803e,0x39e4204a,0x3a0f6e62,0x3a8d9f57, +0x3a93c675,0x3a34f83e,0x39f59c59,0x3a7e0653,0x3aa83332,0x3aa604f9,0x3aab630f,0xb8a1a97b,0xba5c40f8,0xbb079f03,0xbb3b892f,0xbb7d1033,0xbb92058e,0xbb85c6f6,0xbb756486,0xbb93d6e9,0xbb7db1aa,0xbb98bd29,0xbb7c13df,0x39921462,0x393806c4,0xbad2b9d7,0xbb7e5aee,0xbb794830,0xbb6197f9, +0xbb587f4b,0xbb45308a,0xbb4328f0,0xbb437f16,0xbb3f1ecc,0xbb31c21b,0xbb074450,0xbace85dd,0xbab7d561,0xbabdf47f,0xbad29906,0xbaf1b6a1,0xbaec7892,0xbafa683d,0xbb0dc832,0xbb171757,0xbb246112,0xbb1981df,0xbb12448f,0xbb00dcfc,0xbb490fc0,0xbb3ec6f2,0xbb2b07d0,0xbb40e25f,0xbb5b405b, +0xbb86b06b,0xbb944d6f,0xbb92e7d7,0xbbae320b,0xbbba610b,0xbbb54ec3,0xbb9ba793,0xbb916033,0xbba2152c,0x391833e0,0x3a060eeb,0x3a1581fe,0x3a8e1165,0x3a6705ac,0x3a1aa539,0xb85517e8,0xb9368065,0xb9aba048,0x397890cd,0x39bfe718,0x38d07df0,0x3a482eaa,0x3a8d8093,0x3ae8dad9,0x3a2fc996, +0x39040f5d,0xba0a563d,0xba26e350,0xba3f661d,0xba4f6cd9,0xba4e4403,0xba218982,0xba60d6dd,0x3a03a00a,0x39e8b239,0xb992cb9d,0xb8f11aaf,0xb98b36dc,0xba1190ac,0xb9b0432a,0xb8d601dc,0x3a26d3a0,0x3670cc30,0x36823d61,0x39c7f0cd,0x39d86e3a,0x3a9a56ff,0x39086c74,0x3ab9dc43,0x3abf2985, +0x3a3bd4b6,0xbb06c52c,0xbb1d93ba,0xbb0e452e,0x3a900234,0x3b02b884,0x398e4969,0x3ad62a0c,0x3b36a9c1,0x3ba97124,0x3b14d8e3,0x39c4b323,0xbaf1d43c,0xbb18d7a5,0xbb337c53,0xbb27d73f,0xbb19132d,0xbae6e600,0xba717b11,0x3a79a919,0x3ac2da8d,0x39429248,0x3a785a3e,0x3a3a94c3,0xba5bd3b8, +0xbab8c12c,0xbaed51d0,0x3ad06d20,0xb80e4963,0x3a858bc5,0x3b2a0c38,0x3ae3ce65,0x3b494a50,0x3afdc328,0x3baaa15d,0x3b8d5a91,0x3b4298e4,0xba9475fc,0xbb2d20cd,0xbb2b1a9d,0x3abff553,0x3b2bcf45,0x3a4a2152,0x3b8b96f5,0x3bcee7ae,0x3c25f587,0x3b874b07,0x3a100eeb,0xbb7fcf0f,0xbb932820, +0xbbb92fd1,0xbbb0b485,0xbba6c84c,0xbb6a7280,0xbb10c33c,0x3aed30b3,0x3b485eb0,0x39677d5e,0x3b0ccb85,0x37a99c55,0xbad71236,0xbafa443f,0xba1bab2d,0x3b71f9ef,0x39ca4e03,0x3a1437ad,0x3b7b19da,0x3b319d03,0x3b6d6be1,0xb966a36c,0x3ba40822,0x3ba6d245,0x3b508170,0xbb751c06,0xbbc08f71, +0xbbf69d64,0x3b92d4de,0x3bd34f6c,0x39a0e228,0x3bc196b1,0x3c066808,0x3c8eb6c5,0x3bdd6e48,0x3a7d7767,0xbbbbcd22,0xbbffdaff,0xbc0f7f30,0xbbfd70e8,0xbbdd9182,0xbb77abaa,0xbb6af1ca,0x3ba637fd,0x3b9f946b,0x3b466d1c,0x3ba3789c,0x3b8d8a54,0x3b45b7ef,0x399a682a,0x3a405fad,0x3bb4c15a, +0x3acb9b81,0x3b6a2f2b,0x3bf09728,0x3b9f50a1,0x3bdaebde,0x3bbe17aa,0x3c3a31b0,0x3c38eca1,0x3c1b26fe,0x37d3efa3,0xbab2e2c6,0xbb8b0dec,0x3b2d6389,0x3b936e85,0x3ac0428a,0x3c0c34eb,0x3c7aaa3f,0x3cb8fcdc,0x3c1bef64,0x3a3e6868,0xbc013d29,0xbc2196ae,0xbc4e1afb,0xbc38de3c,0xbc20624c, +0xbbce161e,0xbba58314,0x3b5bebe7,0x3bae340d,0x3bc3c7b4,0x3be58f8a,0x3bc3c46c,0x3c081531,0x3c21cbbd,0x3bf01b0a,0x3c40791c,0x3b733c03,0x3a3429fb,0x3bdd24db,0x3baac4de,0xbc63fd70,0xbc9f214d,0xbca508d6,0xbcbab26a,0xbcb52298,0xbcabfca4,0xbc6c5889,0x3c372cdf,0x3c302f43,0x3c753dd3, +0x3ccc1434,0xbaf63627,0xbc91ecc8,0xbcafc5f0,0xbc3f729f,0xbab605b6,0x3c05770b,0x3c5a4704,0x3c74c266,0x3c1eb904,0x3c0245fc,0x3be3e1bf,0x3c357cf9,0x3acc32c7,0x3ad65a3c,0xbba4e9be,0x3c7689e5,0x3c7d9711,0xba95343b,0xbba07baf,0xbc61515b,0xbc89265a,0x39d47f0e,0x3c26f74e,0x3c14cc80, +0xbb1e5a20,0x3b6e2cb7,0x3c8e4f4d,0x3ca8ddfb,0x3c559532,0x3c24406b,0x3cc49e16,0x3cda97e9,0x3c70f0c9,0xbabc0dbc,0xbbee9703,0xbb4a7694,0x3c547555,0x3ca6405d,0x3c1d08a3,0xba9fa1cf,0xbc024b44,0xbbc325ff,0xbb99edcd,0xbb712a44,0xbbf03830,0xbb7014c6,0xbb281a3e,0xbb19310c,0xba954395, +0x3ac8fe2a,0x3b7c88ac,0xbb0b7a24,0xbbd2d489,0xbc078015,0x3b93dd3c,0x3c047618,0x3ba43d37,0xbc127849,0xbcadd22e,0xbcc52dbc,0xbc5d5cd0,0xbb84d7a0,0xbd033d85,0xbcfc7387,0xbc7b0117,0xbc52dd07,0xbbce3b1f,0xbc004b65,0xbc8d38cf,0x3c72a475,0x3c9bbae5,0xbb400043,0x3c058973,0x3b9e5935, +0xb9214c49,0x3a32fe0a,0x3ac2df1c,0x3bb00553,0x3b874a26,0x3b7cee99,0xbb7f6f4d,0xb98f503b,0x39c16fc9,0x3b259d94,0xba0a314c,0xbb16f19c,0xb9aa1131,0xbb2c3a0c,0xbb562149,0xba29bfd2,0xb7816a65,0xbae54760,0xbbca38cb,0x3b301bad,0xbad12b7e,0xbc7ce706,0xbb5689c6,0xbc0c61b8,0xbcd1f2c8, +0xbcb9a203,0xbc88a6da,0xbb68e27b,0xbc91917f,0xbc9712a2,0xbc85dc46,0x3c5cfdb1,0x3cb078cf,0x3bec7874,0x3bc5ec46,0x3b3c4c4e,0x3bc156dc,0x3bcea026,0x3bcb6243,0x3b37bc71,0x3b1fd760,0xba46c59c,0xbbac7a3f,0xbb7777a8,0xbb4eadaf,0xb8abdbea,0xbaca60bf,0xbaa3a08d,0xbb5a2858,0xb9440a9d, +0x399639e1,0x3a4e0782,0xbb3c4663,0xbbca65c2,0xbc3e54d9,0x3a617345,0x3bb1e690,0xbb0ddd61,0xb92a2133,0x3c80d60b,0x3cee066a,0x3cc52478,0x3c4e2460,0x3c0dd7a3,0x3c0dd00d,0x3c17f835,0x3ba9d741,0xbbbdf5b8,0xbbd6988c,0x3c0f1c6d,0x3c51c9e7,0x3c6bc05c,0x3c6256e4,0x3baad268,0x3a8061cb, +0xbbe13d57,0xbbe60fd3,0xbc0d897e,0xbc0baf59,0xbc1b82c1,0xbc1ededb,0xbc0af425,0xbb616ef9,0xba58855d,0xba0c31eb,0xb8c6a995,0xb9f8e777,0xbb668ec0,0x3a6ee59b,0x3b2d9e00,0x3bd2fd8f,0x3a85ee11,0x3adf17d1,0x3c618f7d,0x3c3612bd,0xbc72139a,0xbcd6a469,0xbce7aa8a,0xbc9edf42,0xbc204c36, +0x3c02f190,0x3c76eefa,0x3c73bc31,0x3ca91fbb,0x3cc98ed6,0x3cb6302d,0x3c9c46ba,0x3c354b9d,0x3c335c95,0x3bf86af7,0x3b99f51f,0x3b41dfa8,0x3b0f02c6,0xba349c0a,0xbb6b603b,0xbbc3a2b3,0xbc0a9211,0xbc1b5255,0xbc248ef1,0xbbbd7f58,0x399b3ec0,0x3b26c594,0x3b6aad2f,0x3b243df4,0x3bbd39f2, +0x3b88f76b,0x3b35a827,0x3b85ae99,0x3b774f16,0xba9e5a4a,0xbbabdf98,0x3c0c0614,0x3c3ed95f,0x3c8d834d,0x3c81960b,0x3c85ea88,0x3c3584cc,0x3c1c6b0b,0x3bd92d59,0x3b8da1d0,0x3b075a7c,0x3b15f3f1,0x3ae23806,0x3b00f78d,0x3b128516,0x3b473922,0x3b32ed11,0xba0225ae,0xb9701ccb,0xbb2eca03, +0xbbc29a88,0xbbf119df,0xbc0336bc,0xbba7c2fd,0xbbd16437,0xbbd80381,0xbbd33cd2,0xbb51b4ea,0x37811bd1,0x3b920d1a,0x3bfd4763,0x3c2e7d21,0x3c4bf80d,0x3c5c30e8,0x3c658cae,0x3c58652a,0x3c348721,0xbba29fc1,0xbbce38b5,0xbb2dbb2f,0x3adc7f9b,0x3bb18077,0x3b98694f,0x3b5a1f8d,0x3b201f15, +0x3a8ef74d,0x39153260,0xbaf66fb3,0xbb1d86ae,0xbb05e369,0xba8c119a,0xb93f49ed,0x3a2c6447,0x3a07e7b9,0xbabff8e4,0xbb7ef037,0xbbd7a6de,0xbbd0dab3,0xbbdc9e0c,0xbbea9bbf,0xbbec8edf,0xbbeced09,0xbc029b00,0xbbd03864,0xbb986982,0xbb431cc2,0xbb114561,0xbb29a042,0xbb76499b,0xbb4947e6, +0xbb94ca90,0xbbeb205d,0xbbca51a2,0xbc2010c1,0xbbef784e,0xbba3ec37,0xbb7bf576,0xbb09b2b9,0xbadc4957,0xba61706f,0xb965b757,0x3729925d,0x39ae26a4,0x3a0cf4a6,0x3ac0a68e,0x3acf1b13,0x3adb47ac,0x3a116d76,0xb8aeb19e,0x37bbabe1,0xbb035351,0xbb80fcd5,0xbb9dd0ae,0xbba91f83,0xbbb14e01, +0xbbcd8b2e,0xbbcaaa78,0xbbde8c5b,0xbbfe421f,0xbc00a890,0xbc13c38a,0xbc1c6e3a,0xbc28d3b6,0xbc3eca7c,0xbc378fbd,0xbc4f1b20,0xbc7176c4,0xbc754eaa,0xbc3cccd7,0xbb6bee61,0xbbaa9a54,0xbb9d2726,0xbb3be398,0xba850dd7,0xb914e03b,0x3ad78de8,0x3b3ff627,0x3b3a4506,0x3b087afb,0x3ae2b068, +0x3a9b3dd7,0x3a72bf76,0x3a84aac9,0x39e4e11e,0xba0bf465,0xbac2d1e9,0xbacf7014,0xbae4dce4,0xbb20a3cf,0xbafd8d87,0xbb5599e3,0xbb74df55,0xbba50fd5,0xbbb1a064,0xbbbb1dc5,0xbbdbceed,0xbbd25edd,0xbbd6de62,0xbc003159,0xbbf45d2a,0xbc126cc2,0xbc03f8e3,0xbb4e23b4,0xbb4b0626,0xbba3efb3, +0xbbc11ec3,0xbbb94733,0xbba4bfec,0xbb9dbd36,0xbb94d8f9,0xbb925bef,0xbb86aa14,0xbb7311c2,0xbb790e05,0xbb66527c,0xbb5774e5,0xbb4dd10f,0xbb49155c,0xbb4b5bf2,0xbb5e45f8,0xbb5fc496,0xbb6a1d19,0xbb7d2041,0xbb856c1c,0xbb92e238,0xbb8c512f,0xbb8d63d0,0xbb85b58c,0xbba10cda,0xbba05850, +0xbb9c830b,0xbbaadefe,0xbbb31ac0,0xbbca0232,0xbbd35881,0xbbcc7851,0xbbe1e690,0xbbec555d,0xbbea490e,0xbbe22553,0xbbd7adec,0xbbf9ac09,0x3a90b25f,0x3a5ba6db,0x3a887035,0x3acf1e73,0x3ac09d18,0x3abe291c,0x3a5c175d,0x3a3f174a,0x39c326b0,0x3a8afab9,0x3a8c92c3,0x39c76f36,0x3a9c7e11, +0x3ad974f6,0x3b21b051,0x3ad9bf7f,0x3aa0e57d,0x3a1358d9,0x399cb128,0x38976482,0xb8deb163,0xb87935b8,0x393ef262,0x39a1eaec,0x3a9c1ab6,0x3a81fb1e,0x3906256e,0x3985dbd4,0xb88310aa,0xba28351d,0xb9989128,0xb86d5a4a,0x3a5cc4a2,0x38c52516,0x398c22da,0x3a8fd040,0x3a403b10,0x3a2140a8, +0x3990e2be,0x3b0acbf0,0x3b3bb4b3,0x3b3cb424,0x390bab64,0xb9edff11,0xba93d4fe,0x3b2b712c,0x3b56f849,0x3a4fb04e,0x3b1d364c,0x3b6ad054,0x3bc80fcf,0x3b8bff3f,0x3b3860a6,0x3995f295,0xba39b98f,0xbac98114,0xbaf2754f,0xbaced984,0xb9e8cf4f,0x3ae15d66,0x3b1382a7,0x3b0f6dc9,0x39d264f6, +0x3aa79572,0x39dd7793,0xbb2cc887,0xbb46a1a1,0xbb48cad5,0x3aaba766,0xba3ffd19,0x3a0f46fa,0x3b75aab3,0x3aaa8712,0x3afd6a7a,0x3afc1405,0x3badc2ce,0x3bad5d27,0x3bb7151b,0x3afb93d7,0x3a1a3978,0xbaa19635,0x3b7291b2,0x3b83d854,0x3a0dabf4,0x3b8787a8,0x3bd91db4,0x3c37bddc,0x3bf35fb2, +0x3b90e161,0xb923eb67,0xbaed1fca,0xbb6d6f35,0xbb911c70,0xbb8019d7,0xbaceee79,0x3b05d5b5,0x3b5e7d21,0x3b748a9b,0x394c7dd5,0x3ac914fe,0xbac5d3c4,0xbba42c2f,0xbb9f3237,0xbb5e4ecb,0x3b1303c0,0xbaf1236b,0xba8217dc,0x3bb80ea6,0x3ab82660,0x3a18ceb6,0xba9c1b57,0x3babb9d5,0x3bf317ed, +0x3bfc488c,0x3aaac202,0xbabbdc1a,0xbbc084b1,0x3bf195a1,0x3c0c2976,0x3a076981,0x3bd0933c,0x3c09146b,0x3c92aef8,0x3c3b96eb,0x3bdf0c53,0xba841dfa,0xbb87ce63,0xbbcb2a18,0xbbf1e236,0xbbb7ffbc,0xbabda608,0x3b4cc0cd,0x3be7faa0,0x3bdb2964,0x3adb6ee4,0x3ba3b537,0x3afdfb30,0xbbb0d855, +0xbbc5fd4d,0xbba5ccb2,0x3b4e643e,0xbb10e579,0x3a616ca2,0x3c21af60,0x3b2d5679,0x3b7a4586,0x3bb498f5,0x3c2b9426,0x3c3e9333,0x3c50b395,0x3bb56fa4,0x3b945d4f,0xbacdd91d,0x3bcb7192,0x3bca7efd,0x39d424b2,0x3bda395d,0x3c5fcf1e,0x3cc0dcb7,0x3c815261,0x3c014eb4,0xba9795bc,0xbba54bcb, +0xbc11a5d2,0xbc2acbb2,0xbc0b5942,0xbb403209,0x3b2fe793,0x3bd37110,0x3be6b4bb,0x3b9e7594,0x3bdec9a7,0x3b91e707,0xba9cdb42,0x3b26d621,0x3a727eec,0x3bf5f8d4,0xbae84988,0xbb59ca08,0x3c34bb32,0x3b061d23,0xbc97f9a6,0xbca1eb02,0xbca185af,0xbca1875d,0xbc6c2029,0xbc8148ae,0xbc4b61b0, +0x3beb3506,0x3c295cbc,0x3c974177,0x3ce14155,0x3c096874,0xbc17fe23,0xbca7bc61,0xbc88fd6a,0xbbd47455,0x3bf43fe5,0x3c722124,0x3ca31e7b,0x3c9fecf9,0x3c840177,0x3c2ed4da,0x3c29e299,0xbafc5489,0xbaa5e6f5,0x3a10bb79,0x3c0914b2,0x3c1591ed,0x3962f68e,0xbb596335,0xbc14624a,0xbc310221, +0x3b95f250,0x3c19e160,0x3b64cd41,0xbc0cebc0,0x3c7c3bcc,0x3ccccfd8,0x3c876b26,0x3b85573d,0xbba6eb83,0x3caefc6b,0x3ce98ea9,0x3c871ed0,0x3b16b15c,0xbbf58822,0xbc2d8189,0x3b8c8fdc,0x3c7117fb,0x3ca83b61,0x3b860ae9,0xbb85441e,0xbb232e9f,0xbb58c805,0xba66218f,0xba8dd6ba,0x3ad4ea3a, +0x3ade2655,0xbb7d6683,0xbb170121,0xbad5a950,0x3b34245c,0xbb8529ea,0xbbddcdb7,0xbbb1c99c,0x3b50e8b7,0x3b906cbe,0xbab2382c,0xbc796651,0xbcbde585,0xbc961df9,0xba8145da,0xbc242860,0xbd4d3e9c,0xbcbb62c3,0xbbe2b80e,0xbc5b398d,0xbad6f543,0xbb321dee,0xbcba4422,0x3c6cff31,0x3c9a259c, +0xbbed3fdc,0x3b49949d,0x3ab586b3,0x3b271fc2,0xbacb8c56,0x399266ab,0x3b2f5119,0x3b41cb4a,0x3b73539b,0xba567a7c,0x3af1891f,0x3b0c15f9,0x3ae0f9b8,0xbaf84408,0xbb64db4d,0xbb26ce3e,0xbb097e70,0xba210c72,0x38d8e505,0xbaa31b6e,0xbb0c5e28,0xbb7683ce,0x3a34142a,0xba9195be,0xbc979515, +0xbb4096ac,0xbc4b247d,0xbd0a3d00,0xbc6bc45c,0xbc02f5be,0xbae9dbe5,0xbc6aa6c3,0xbc904d0b,0xbcd56b99,0x3c1bda9f,0x3c97f530,0xb9e8d4f1,0x3b44f38e,0x3a482385,0x3af09d61,0x3b84e3e0,0x3b8bed35,0x3b163b64,0x3ae513ac,0xba58ca89,0xbba711aa,0xbb753706,0xbb222433,0x3aa47a32,0xbadcb769, +0xba975a9f,0xbb83dae7,0x3a884239,0x3abffb61,0xb9047a3e,0xbb4a8fa2,0xbbcb5c4b,0xbbe96270,0x3ba590f2,0x3c0b76a5,0xbbdb3725,0xba66a6c2,0x3cf12bfc,0x3d44c842,0x3cecdecf,0x3c4cce4f,0x3b25d5ea,0x3ad970cb,0x3b25a621,0x3b86cb55,0xbbf6e1bb,0xbc3719ec,0xbb58d7e3,0x3bc7c521,0x3c3bd67b, +0x3c5e28da,0x3be3aa8c,0x3b656e33,0xbaea9859,0xbb8f4fc2,0xbbd10a0e,0xbc0034c8,0xbc015c17,0xbbf07249,0xbbba8f0f,0xbae05ae7,0xb87ae5b1,0x3affd794,0xba91da6c,0xbaa6dffd,0xbae4b21a,0x3b33285b,0x3b720173,0x3bb9d42a,0x3b146455,0x3a6218c1,0x3c269a8d,0x3c8f5c68,0xbca8060f,0xbccc5be5, +0xbcee8df3,0xbcb856d2,0xbc2d7491,0x3aa5297e,0x3bd3c447,0x3becb4f4,0x3c81f644,0x3cb73b4a,0x3ca325bd,0x3c9dd64f,0x3c469033,0x3c6bd28f,0x3c0cd812,0x3b8dee04,0x3a9167e6,0xba9ef55c,0xbbaac6d6,0xbc0fcec6,0xbc1e5954,0xbc2bebf4,0xbc32601f,0xbc107f9a,0xbba2e8fe,0x3a8167f4,0x392b7be2, +0x39bec593,0x3a239715,0x3b6aff35,0x3b40124d,0x3b6e898b,0x3871ae5e,0x3a65528e,0xbae1b0eb,0xbbe6497f,0x3c7a19eb,0x3c913de4,0x3c92e725,0x3c635f92,0x3c50b844,0x3c28a564,0x3c392fec,0x3c288be3,0x3be7101d,0x3b42d34c,0x3b094d52,0x3b0dec04,0x3abc1a92,0x3a55a1aa,0x3a92894a,0x3a386ecd, +0xbaf1d06a,0xbb0fcdcf,0xbb55027b,0xbbb23547,0xbbab8002,0xbbad616e,0xbb90893c,0xbbbe727a,0xbbc819dd,0xbb9b87fe,0x38a7074f,0x3b7806da,0x3beb1a71,0x3c2af07b,0x3c3f3050,0x3c4b17a0,0x3c55093a,0x3c613d28,0x3c731d82,0x3c7fde5c,0xbaecd784,0xbb854a11,0xba70bc51,0x3b70b6ad,0x3c05c68d, +0x3bc7e8d3,0x3b715e83,0x3ae7f7f1,0x39e69493,0x39930134,0xba55e104,0xbafabe68,0xbb080a7f,0xbb12b71a,0xbaf070dd,0xbabf8e85,0xbb11f9de,0xbb5518c0,0xbb95c29f,0xbbc10b65,0xbbd3240e,0xbbe01b4a,0xbbf7da33,0xbc016e20,0xbbfff437,0xbbfa4805,0xbba9cf65,0xbb16d254,0xb9ac5f7c,0x3a8469d2, +0x3abb787f,0x3abcebf7,0x3a69066c,0x38b081fe,0xbb0bd2ab,0xbb07f9b6,0xbc0c09af,0xbbdd8c50,0xbb978207,0xbb9254ef,0xbb56f02d,0xbb2e1cef,0xbaab2bf5,0xba27b52e,0xbabe1dc5,0xbb0d890a,0xbb39d19b,0xbab7ea11,0xba98e8e7,0xba104a18,0xbb07b6f9,0xbb4959c5,0xbb6e7612,0xbb9ad23c,0xbbc191f7, +0xbbd38015,0xbbe71f0d,0xbbef63e4,0xbc058685,0xbbfd795e,0xbc055d65,0xbc11aa71,0xbc0c82a1,0xbc0db30e,0xbc112b54,0xbc03e61e,0xbc0c5d3c,0xbbe137b8,0xbc072e92,0xbc37cec7,0xbc3d2d35,0xbc18c095,0xbc0a6279,0xbc19a9f5,0xbc0bb14a,0xbbd1505b,0xbb83b57b,0xbb7e05d5,0xbb23e48d,0xbabbfa50, +0xba794252,0xba495997,0xba2d132e,0xbaa729d3,0xbae887b2,0xbaf56cf5,0xbb1c9231,0xbb43afe6,0xbb7e78a8,0xbb8ae80c,0xbb9434ed,0xbbb24f92,0xbba288d8,0xbbc083a1,0xbbc64b09,0xbbe433b3,0xbbe48a20,0xbbdae14f,0xbc023a6d,0xbc03c3b3,0xbc0eca0d,0xbc2d739d,0xbc2c56c6,0xbc55a013,0xbc4774eb, +0xbc028648,0xbc036484,0xbc180b29,0xbbc017db,0xbbbbfc14,0xbbb10518,0xbbadfed1,0xbba7a725,0xbba2fdc2,0xbb90e390,0xbb856beb,0xbb8dbcb6,0xbb90661e,0xbb8e39e3,0xbb873dfc,0xbb7c48f6,0xbb75a30d,0xbb858300,0xbb8c7382,0xbb942b55,0xbb9c3faa,0xbba31294,0xbbb0d51c,0xbbabeabc,0xbbb06a5b, +0xbbae092c,0xbbb5197f,0xbbb7d0b7,0xbbba759b,0xbbcc2156,0xbbcc791d,0xbbdb76c2,0xbbdf0c5a,0xbbd2e112,0xbbd9c9e0,0xbbd6893a,0xbbd7cfb3,0xbbe30781,0xbbd5a104,0xbc01024b,0x3affcd56,0x3aa641bd,0x3ab93491,0x3aec3a52,0x3aeee415,0x3b090b63,0x3aca3039,0x3abad7e4,0x3a85c4bc,0x3ada9906, +0x3ad5b2f2,0x3a64e4c9,0x3acb3e55,0x3b04aaf9,0x3b3187a7,0x3b1b0e97,0x3b0cb9be,0x3adb4948,0x3a9acb77,0x3a5a7b85,0x3a1adeb6,0x3a3ac372,0x3a76479e,0x3ab31c72,0x3ad9711a,0x3ab7ee77,0x3a22f9e2,0x3a236343,0x39879fc8,0xb98b0f89,0xb8b3e9b7,0x38b9f027,0x3a9164b7,0x39bbbeb7,0x3a261add, +0x3aef06b8,0x3a9623ed,0x36ec3d3c,0x3a2a0864,0x3b3c397e,0x3b82824a,0x3b96498b,0x3b0a825d,0x3ab9845c,0x399fcb33,0x3b596773,0x3b7f8f00,0x3af8cb93,0x3b4e305e,0x3b84145d,0x3bc511f9,0x3bb3b6b3,0x3b9ab754,0x3b2f8e73,0x3a812eb3,0xb9439282,0xba5bbaee,0xba1f1866,0x3a327b08,0x3b5a8812, +0x3b3d68bc,0x3b1b75e1,0x3a1ed505,0x3a6729b2,0xb95eb6f3,0xbb43e33c,0xbb7c161e,0xbb6a9e69,0x3a946a0d,0xba86818a,0x394340b1,0x3b89c4d0,0x3a286ecf,0x3a924a49,0x3af72c29,0x3b9bb46b,0x3bb9b16a,0x3bf167c2,0x3b8b88b1,0x3b47575e,0x39d13d60,0x3b9d186c,0x3b9a59c9,0x3ac1e04c,0x3b82fa0f, +0x3bd14014,0x3c278357,0x3c1a194c,0x3bf5bbd4,0x3b89d898,0x3a7efa5e,0xbab37f29,0xbb32beea,0xbb083c1b,0x398f8287,0x3b948570,0x3b861aae,0x3b6ac10a,0x37d1d9ff,0x38f1f7d1,0xbb4a96df,0xbbbebba9,0xbbe082ed,0xbbb2c399,0x3a880141,0xbb4eb449,0xbaeec989,0x3bd03a8d,0x3a150068,0xbb23dd0e, +0xba9de542,0x3bc10f6a,0x3c16e5dd,0x3c354a00,0x3bb47f7c,0x3b2cb65a,0xbb1beb85,0x3bf854d3,0x3c102c3e,0x3b3fd42a,0x3bdcc297,0x3c05c782,0x3c7c6229,0x3c666f6e,0x3c38797a,0x3ba09b2d,0xb8cefa59,0xbb4cf6cb,0xbbb9d1a2,0xbb7c3d37,0x3986c2ff,0x3bedacc9,0x3be4f86f,0x3bd87b46,0x3a28863b, +0x3b307ff9,0xbae7b330,0xbc1db4f9,0xbc320d13,0xbc1adaff,0x3a973ab4,0xbba98afe,0xbae1c024,0x3c2309dc,0xb97199fd,0x3add5016,0x3b907a58,0x3c073c30,0x3c307ca5,0x3c6c8594,0x3c1aa184,0x3c07593c,0x3aa45775,0x3c006a7c,0x3bdedef7,0x3abcae3f,0x3ba1f938,0x3c33e8c5,0x3ca4047d,0x3c9e1eb3, +0x3c635f48,0x3be91355,0x3939fce6,0xbb929900,0xbbf7337d,0xbbae5fa9,0x39800cd3,0x3c0ca5ac,0x3c036a52,0x3be4e647,0x3b8f178d,0x3b933027,0x3a9e4c91,0xbc02d923,0xbbaacac5,0xbbb8d999,0x3b36da53,0xbbd28b49,0xbbcad52a,0x3c4d5931,0xba0b1f9b,0xbcabc484,0xbc804143,0xbc70a5ca,0xbc52a3eb, +0xbc0525bb,0xbc488886,0xbc462d66,0xba70da83,0x3bf7f783,0x3ca7482a,0x3ce53291,0x3cbce7e0,0x3be4191f,0xbc7bb87b,0xbc86e231,0xbc2d2b2e,0x3aadc0b4,0x3c232ac5,0x3c898a35,0x3ca3ecf6,0x3c8d6fa2,0x3c15d9fa,0x3b7b8890,0xbbe182ae,0xbb9165b8,0x3baaae8b,0x3ae8928d,0x3a9feeb2,0xba1411c0, +0xbae869e5,0xbb2b4f84,0xb9dd5116,0x3c0713f5,0x3c023727,0xba080491,0xbc5665a9,0x3cd7cea4,0x3cc71fb8,0x3b9ab3f3,0xbbcb1937,0xbc8252e0,0x3c722837,0x3cc38255,0x3c6d4426,0x3bc7d54f,0xbbd91ccb,0xbca30bcb,0xbba206be,0x3bd4075a,0x3cb17a0c,0x3c2044a5,0x3af96743,0x3b20b8d6,0xbacb4ad5, +0x392a2544,0x3badef89,0x3baf43bd,0x3b97e7f0,0xbb3032eb,0xbaa6179d,0xbb4ef089,0x3a30e816,0xbb94c15b,0xbb9f77e4,0xbb5d6afe,0x3a2ecede,0xb932a262,0xbbe9acf2,0xbc95fcbd,0xbca9c499,0xbc47ae71,0x3c6bda49,0xbcb78ace,0xbd49e352,0xbc078bb3,0x3b1bd053,0xbc71d0d0,0x3a2dd435,0x3ac83a30, +0xbc648bbf,0x3bad03d8,0x3c10f110,0xbb92b1c0,0xbb03a2b7,0xbb4f0969,0x3b1b001e,0xbb727481,0xba9446c4,0x379ba15b,0x3ab574cf,0x3b76d3a2,0x3b8cbeed,0x3ba45a6a,0x3b8644d5,0x39f80f6a,0xbb0c4a18,0xbb5d492d,0xbb8f4541,0xbaccc0ac,0x3a806448,0x399638eb,0xba9f84fc,0xbad1d268,0x3a4b7007, +0xbbc9371e,0xbbfeb2a9,0xbc368a56,0xbc873945,0xbcb807b4,0xbd0c95af,0xbb901b85,0x3b393b00,0xbab57c10,0xbc018b8f,0xbc5228d9,0xbcaec41c,0xbae2d885,0x3bf2b7fd,0x3adaf822,0x3a2a6129,0xbae6a249,0xbb247183,0x3a1f6b83,0x3a8393cc,0x3ad3dfbd,0x3ab537ec,0x3a1c5dd1,0xbaa8de3e,0xba621b75, +0xb9bd79db,0x3ad2cc61,0xbaef3384,0xbaa94fc4,0xbb7bc750,0x3a9fea0b,0x3a8ee221,0xb9d0c02f,0xbb41dd8c,0xbb96b5c5,0xb9d12ad2,0x3ba7a568,0x3ba072a2,0xbb3080ee,0xbc43a009,0x3d21f11c,0x3d378824,0x3c9a81d9,0x3bb57610,0xbb115377,0xbb92c3c2,0xbb7d8c6d,0x3b190a71,0xbba23eb9,0xbc1b2864, +0xbc22be15,0x3a4f7a6c,0x3c05fd17,0x3c2cff65,0x3bf3b76a,0x3b8d7bb0,0x3b6a237a,0xbae19ba0,0xbb83f380,0xbbb145c4,0xbba37929,0xbb63f6a1,0xba97cbb7,0x3a0f3baa,0x39e92d8d,0x3b1f20b6,0xbac6309e,0xbae50ba5,0xba4c9408,0x3af491d7,0x3b41ddf3,0x3b986aee,0x3bd0d0da,0x3b7f8887,0x3bd48e4b, +0x3cd69616,0xbcb9efcb,0xbc86c023,0xbc857640,0xbc559578,0xbbe540cc,0xbaec8684,0x39f9aebf,0x3acf1c05,0x3c192ff5,0x3c8f6a8c,0x3c8f4d6f,0x3c8eda69,0x3c301783,0x3c4ab213,0x3be676e8,0x3b39fc03,0xba89fc2d,0xbba81bc0,0xbc1392ca,0xbc35933f,0xbc3c71bd,0xbc378e29,0xbc42810b,0xbbd7f455, +0xbb6be9d4,0xba36478f,0xbad73c1c,0xbaf55373,0xbb093286,0xba046360,0x3a67bf7a,0x3b72ab0a,0xbb37104d,0xbaea1499,0xbb1e763b,0xbc1dbbe6,0x3c646cd0,0x3c6ee239,0x3c292fbf,0x3bfeda8b,0x3c079f98,0x3c240c31,0x3c5963c3,0x3c73a955,0x3c3e063c,0x3be06057,0x3b8fce34,0x3baafd0f,0x3b8e4b3f, +0x3b0cde1e,0x3ac6bf02,0x3948e54f,0xbb2a448c,0xbb3e258a,0xbb46d43c,0xbb64f4c7,0xbb7053d4,0xbb8124f6,0xbb99170d,0xbb99f573,0xbb8c32fa,0xbae2a964,0x3b5cbb31,0x3bc92032,0x3be51677,0x3c0ca897,0x3c002803,0x3bf39955,0x3c099ea3,0x3c126748,0x3c208e82,0x3c54b15f,0x3946fdab,0xba1be3eb, +0x3b0151a5,0x3b9e186f,0x3bf572f2,0x3bb403f4,0x3b9039b9,0x3b8951af,0x3b662c38,0x3b87960f,0x3b938602,0x3b1ac54b,0x3a8d3827,0xba30602f,0xbaac5e2b,0xbb0b67f4,0xbb8b977d,0xbb81dcd3,0xbb8f078f,0xbb948560,0xbbb34ad5,0xbbc9973a,0xbbee44d4,0xbbed7545,0xbbd3ef44,0xbbab3354,0xbb2d46e9, +0x3a33fb53,0x3b1f30e4,0x3b8047d4,0x3ba227b9,0x3bc096ed,0x3b8baa98,0x3b7bcbee,0x3b31845f,0x3a310792,0xbb86c249,0xbb82c59b,0xbb52df69,0xbb8c4179,0xbb8b7b54,0xbb69a972,0xbb2ddf51,0xbb295501,0xbb4ef45c,0xbb5df485,0xbb6af093,0xbb30dd5e,0xbb2a0a39,0xbaf27665,0xbb6b35b5,0xbb9c0d3a, +0xbbbf955f,0xbbc74540,0xbbdbf157,0xbbdc3bc0,0xbbecb38c,0xbbf1b5db,0xbc02c788,0xbbea7656,0xbbef5655,0xbbfbcf4a,0xbbe3bdd5,0xbbbdee98,0xbbb43082,0xbb5785a9,0xbb3f5582,0xb9917d07,0xba7cd520,0xbb79e955,0xbb788766,0xbb440f6a,0xbc481426,0xbc33bcb7,0xbc24bf59,0xbc0aff4d,0xbbd5f3bc, +0xbbf138ed,0xbbd6a81d,0xbbc85a56,0xbbb309d2,0xbba1cfb9,0xbb98e7a8,0xbb9ac145,0xbb9df642,0xbb98a61c,0xbb9a210c,0xbb998f75,0xbbab59c0,0xbbb3a71f,0xbbb839a5,0xbbd722ee,0xbbcca903,0xbbdf6b06,0xbbe07b10,0xbbf2fc50,0xbbedd60a,0xbbdb82df,0xbc02709f,0xbc0a6248,0xbc1a4995,0xbc3bfa90, +0xbc3aa930,0xbc718b6d,0xbc62f3ec,0xbc3ea876,0xbc474a7f,0xbc4592dd,0xbb95cdf3,0xbba14453,0xbbaab886,0xbbad1de6,0xbbab6a22,0xbba9cf47,0xbb9f4031,0xbba088f9,0xbba068ef,0xbba1be8c,0xbb9d1e64,0xbb9544f1,0xbb8a4032,0xbb837354,0xbb8ec54d,0xbb99a9ed,0xbba26bc1,0xbba862ca,0xbbad62c1, +0xbbb8070d,0xbbb13166,0xbbb2ae80,0xbbaef2e9,0xbbae4254,0xbbaea526,0xbbaeb24e,0xbbbd9845,0xbbb5e140,0xbbb9705c,0xbbb75058,0xbba94e50,0xbb9b68b5,0xbb8ddaa7,0xbb982d8b,0xbba749e2,0xbb9dd3ee,0xbbf3ceaa,0x3b1ce651,0x3ad7b90f,0x3ad75739,0x3af472d5,0x3b011b33,0x3b1eb9c7,0x3af9faed, +0x3ae6bd2f,0x3ab73b61,0x3af0da42,0x3aedd779,0x3ab3f496,0x3adf86c0,0x3b08a9d3,0x3b252fe2,0x3b2efc55,0x3b2f257f,0x3b1c5041,0x3ae14c72,0x3aaa8c5b,0x3a841876,0x3aa889be,0x3ac04bd5,0x3afaa323,0x3af0dcd8,0x3acf6d6a,0x3a6b35bf,0x3a5ebfcb,0x3a14455b,0x3994618c,0x3984a7d9,0x39ab41a3, +0x3aa0b0cb,0x3a2558ad,0x3a6535a6,0x3b06dffe,0x3ac2e79d,0x39048406,0x3a8c813e,0x3b51e7d7,0x3b9145b5,0x3bbc27d0,0x3b75940c,0x3b3c3c48,0x3ac8e912,0x3b40966a,0x3b687471,0x3b4b1381,0x3b6923b4,0x3b83a83d,0x3ba8213a,0x3bbeef0f,0x3bbb58dd,0x3b8d8554,0x3b0bd536,0x3a544d43,0x36b33c20, +0x3a08036f,0x3ad3b1f1,0x3b6686c0,0x3b3bfc5e,0x3b078fc2,0x39b29dbf,0x38c144c9,0xba64856b,0xbb26d949,0xbb80e2c5,0xbb757d38,0x3a186f14,0xba840ecc,0x38592115,0x3b6a96ae,0x39fb2adb,0x3ab0ddf5,0x3b0b3b3d,0x3b89dad8,0x3bbdd671,0x3c0a3365,0x3bbee55e,0x3b964cae,0x3ad4f536,0x3b8db471, +0x3b89d14c,0x3b4a12d6,0x3b813ac8,0x3bc38518,0x3c031042,0x3c245d36,0x3c17fe9f,0x3bf21079,0x3b41cf05,0x39dcaca1,0xba9e6c55,0x36d606b5,0x3aee4979,0x3b98a530,0x3b8353e3,0x3b3ff229,0xba82519b,0xbab6c531,0xbb87c398,0xbba45242,0xbbf4eb11,0xbbcf870d,0xba0feac6,0xbb64b99a,0xbb04076d, +0x3ba3a781,0x3a0d70a7,0xbb556cef,0xba068264,0x3bc4239b,0x3c1f7595,0x3c5e02f6,0x3c13b40e,0x3bc410cb,0x3aab39c0,0x3ba69759,0x3bdde273,0x3bcf3734,0x3be50ad9,0x3c0347b2,0x3c3a8efa,0x3c6e84b0,0x3c5d346e,0x3c19a3c4,0x3b3eb272,0xba2e8bb7,0xbb66acd3,0xbabd546c,0x3af50515,0x3bef2300, +0x3bb49cec,0x3baa48b2,0xba9b5ebc,0xba3b08d7,0xbbb4c5cb,0xbc200178,0xbc646af0,0xbc4728bd,0xba9aadfa,0xbbd997d6,0xbb4f36fc,0x3bed75c4,0xbac9a5af,0x3ae8e1eb,0x3b6781c8,0x3bd5431b,0x3c254aee,0x3c7604cf,0x3c431afe,0x3c222eae,0x3b4c8b84,0x3be0ea4b,0x3bbf06d6,0x3b82eadf,0x3b990f21, +0x3c1b2d04,0x3c701c10,0x3ca52660,0x3c911335,0x3c5d7b0a,0x3b8db8f6,0xb9e811bb,0xbb8244b2,0xba79a4b8,0x3b44ac09,0x3c227878,0x3c004e54,0x3bb7f940,0x3b4e2097,0x3a387a73,0xbb469206,0xbc1d19ca,0xbc382aa4,0xbc30fb55,0xba9fa054,0xbc16eb6a,0xbbec8002,0x3c1d74e9,0xba9de008,0xbc892ffc, +0xbc0cd5c4,0xbba0d67d,0xbb745349,0xbbbcad50,0xbc11f35a,0xbc316557,0xbc141911,0x3b286afc,0x3c89e4be,0x3cb913a5,0x3cf9eec1,0x3c90bed6,0xbc4f9a2c,0xbc6eba72,0xbc5adfd2,0xbc0a886b,0xb8bbd77e,0x3bb68e6f,0x3c1624d5,0x3c02c569,0x3a61bc79,0xbb9a1d74,0xbc3f879d,0xbbe53dd5,0x3bfd9ad6, +0xbb072d68,0xbb889e98,0xbb344615,0xbb1a7490,0x3b2015b9,0x3c2bdac1,0x3c46e5a4,0x3c0609b2,0xba908fec,0xbc3b6710,0x3cf99134,0x3c84a9e0,0xbb263c31,0xbc312f33,0xbcaec500,0x3b71b4a0,0x3c4e63cf,0x3c24f718,0x3c15364f,0xbb85987d,0xbccece3f,0xbc45126f,0xbadcd85e,0x3c5dc72e,0x3c6acc66, +0x3c1a6b5e,0x3bec9cb9,0x3ad41b6a,0x3ac5e926,0x3c14bed4,0x3bd68aba,0x3bbd5cc8,0xb8332543,0x3aa27942,0xbb1b90b6,0xbb03da5e,0xbb8fa198,0xbb2a2155,0xbb19206d,0xb96e5315,0xbb562de1,0xbc44497f,0xbca550ce,0xbc90bad2,0xbbcd674b,0x3cbead22,0xbd004022,0xbd25568f,0xbb94a11c,0x3af73e12, +0xbc306414,0x3b0c9362,0x3b3f453a,0xbbe6b319,0xbbc60b01,0xbacf3ef9,0x3b50634d,0xbb8ebdf5,0xbbd9b988,0xba923dca,0xbb95dfed,0xbac609d9,0xbb4eb13e,0xb85788cc,0x3b40bae5,0x3bd6537a,0x3bc06bec,0x3b832b28,0xbaa1e67e,0xbb0d6dbe,0xbb3ff651,0xbbaa92d6,0xbaaed886,0x3a8af98c,0x391aa42d, +0xb956a0f7,0xba9d0320,0x3a510e5e,0xbc6ed9d4,0xbc6cde42,0x3a76febd,0xbcdf4237,0xbcedc08c,0xbd0cd804,0xbb82c788,0x3bba9aa6,0x3bde8c1b,0x3ad6926f,0xbbb798a7,0xbc84934d,0xbc52c78f,0xbb479f8a,0x3c222cc7,0x3a9c5fc2,0xbb5e620f,0xbbb8660a,0xbb412134,0xbb2a0e2e,0xb9c801fe,0x3a564287, +0x3ac6d198,0x3ab7187d,0x3b018432,0x3a884d99,0x3a66edd5,0xbb0d7075,0xbb01e50d,0xbb58e502,0x39b78495,0xb78d3a11,0xb9aea278,0xbb047945,0xbb312a7b,0x3b7412ab,0x3ad024df,0xb976aac7,0x3c01efc2,0xbc9a90fe,0x3d192a99,0x3cacbea0,0x3b99d4ca,0xb92929c7,0x3b479341,0xbb9fa5f6,0xbbbb73ef, +0x3b23fc85,0x39d90517,0xbb5c041e,0xbc1e49a6,0xbadcb1e0,0x3bb314ba,0x3bcd5541,0x3bde165c,0x3bbc1729,0x3bf6cc04,0x3a6c1975,0xbabfac85,0xbb21363c,0xbae4c43d,0x3a09a92e,0x3b3c0e88,0x3b265687,0x3a62681c,0x39c9d04a,0xba8b2d94,0xbab6b9a9,0xb9f5ac59,0x39e657bd,0x3b08c579,0x3bca42be, +0x3c0ca453,0x3bd46d31,0x3c157dd6,0x3cfa1152,0xbc9b5e1f,0xbba323a8,0xbac1ab42,0xbaa7e832,0xbb472e60,0xbaf6b549,0xbab5f393,0xb8ab9e0e,0x3b836333,0x3c43bc32,0x3c822a4c,0x3c74a359,0x3c14c5b8,0x3c120f7d,0x3bb20e44,0x3aa5c9d5,0xbb7294d0,0xbbfdafa5,0xbc297750,0xbc2b04c0,0xbc3a57ba, +0xbc338f4b,0xbc302399,0xbb8d09e8,0xbb01aee0,0xbb046440,0xbb297daf,0xbb4664ba,0xbb80d70b,0xbb55caea,0xb9bb65e0,0x3b3ab246,0xbb22377c,0xbb10bd90,0xbb92f758,0xbc3441bf,0x3bdf7443,0x3b8d9426,0xb9e4f992,0x3a18f8c2,0x3b90a787,0x3c199c3e,0x3c61df72,0x3c8e5eee,0x3c80a945,0x3c487c64, +0x3c185b0c,0x3c2c72ee,0x3c1dc664,0x3bcbf96c,0x3b8b184f,0x3adec6ff,0xbac9912d,0xbb08b06d,0xbb34f3b7,0xbb5644a1,0xbb87ae8e,0xbb887726,0xbba6644f,0xbb4e5aca,0xbaf2fba5,0x3a7eb62a,0x3b9ac0be,0x3bbbcbb3,0x3b827a67,0x3b8c2aea,0x3b448152,0x3b067369,0x3b5a1af4,0x3b53ea0d,0x3b54899c, +0x3bde3705,0x3b3104ec,0x3b6ddac0,0x3ba7d990,0x3bc007e6,0x3be812e8,0x3bd9909f,0x3bf92ccd,0x3c11eb9a,0x3c0c3234,0x3c19bd6e,0x3c27642c,0x3beafb7e,0x3b944082,0x3adf157f,0x39ae2cf8,0xbae56618,0xbb8af61c,0xbb693e16,0xbb75c1af,0xbb7d46a2,0xbb9cef23,0xbbb3644c,0xbbcebeaa,0xbbb07ecf, +0xbb7833b7,0xbaf9f43a,0x39fffa15,0x3b70b0bc,0x3bb08f84,0x3bcf46ca,0x3beff305,0x3c0e59b2,0x3bd74468,0x3bd5f766,0x3bcf15b4,0x3b52c4f9,0x3b1c182c,0x3ae38d9c,0x3ada2b0f,0x394c8cc3,0xba259224,0xba987a68,0xbad4f4e5,0xbb10a9e8,0xbb108694,0xbb01e7d2,0xbaef69ea,0xbb131757,0xbb432be3, +0xbb45c017,0xbb8c1cc4,0xbba8c1de,0xbbc0e800,0xbbc0f006,0xbbc39a25,0xbbbefd2b,0xbbc70897,0xbbcc17c7,0xbbd7b7a2,0xbbb2db55,0xbbae945b,0xbbaf9da7,0xbb77c7d2,0xbabfc5c3,0xb9310e5e,0x3b0ddbb0,0x3b5cfb1e,0x3bbf2e82,0x3bc1b4e1,0x3b8cb1c5,0x3b90356d,0x3b911eaf,0xbc3cbafd,0xbc13cf54, +0xbc0cdb6c,0xbc06a9c0,0xbbee96b1,0xbbfc75f8,0xbbea8dbd,0xbbedddb5,0xbbe4849f,0xbbd9576e,0xbbd1731c,0xbbc1592f,0xbbafabe1,0xbba299f0,0xbb9d8a92,0xbb9c790c,0xbbadce3f,0xbbb38892,0xbbbad349,0xbbd8e948,0xbbdbfdde,0xbbe55475,0xbbea8308,0xbbfb69db,0xbbfad25f,0xbbf40777,0xbc048a88, +0xbc0a7bab,0xbc10e41a,0xbc2118aa,0xbc16bc69,0xbc3b5447,0xbc2f16a7,0xbc302344,0xbc3cf690,0xbc29e699,0xbb509560,0xbb6a99ed,0xbb8797ab,0xbb8a266f,0xbb901712,0xbb975134,0xbb9dab84,0xbba82ab4,0xbba0c4aa,0xbb9f1af8,0xbb9b4ff7,0xbb993c06,0xbb95f35e,0xbb9196b6,0xbb98a223,0xbb9ead33, +0xbba3a9bb,0xbba536e0,0xbba62344,0xbba972dc,0xbba71521,0xbbaa6984,0xbba7e39e,0xbba4de4e,0xbba6ac5a,0xbba503f1,0xbba7b28a,0xbb977272,0xbb908431,0xbb88db63,0xbb79a1e2,0xbb427dd3,0xbb23ddf2,0xbb3b6680,0xbb5a4826,0xbb4ec474,0xbbef17b7,0x3b05da77,0x3ac5c269,0x3ac07c34,0x3acb54a0, +0x3adb68c5,0x3b0dfff6,0x3ae4b83f,0x3accecfd,0x3a98b7c9,0x3abc3267,0x3ac3d621,0x3ac9a229,0x3abcda7d,0x3ad96d85,0x3af0932c,0x3b1a2d5d,0x3b2452a0,0x3b17d6dd,0x3adf3890,0x3aade6c2,0x3a882790,0x3aaf3e22,0x3abbf3a3,0x3ae870fe,0x3ac7ca11,0x3aac31d6,0x3a31d6fe,0x3a46be13,0x3a2f1b25, +0x3a0dd20c,0x39ed8af3,0x39c2d34b,0x3a4b5f79,0x3a182ed8,0x3a39839c,0x3ac5c373,0x3ab2119e,0x3a051226,0x3a99ac50,0x3b2a58a5,0x3b780050,0x3bbae367,0x3b93a467,0x3b5d5174,0x3ac31567,0x3ad1c1f4,0x3b17a302,0x3b749db1,0x3b641f1e,0x3b67ac42,0x3b75b487,0x3bab2396,0x3bb32fcd,0x3b9272c3, +0x3b21b9b7,0x3aa7321f,0x3a139870,0x3a9c1f0a,0x3af4ba35,0x3b1f23fd,0x3b0cbf96,0x3aa631aa,0xba2181c2,0xba5ae40a,0xbada8e04,0xbb38efbd,0xbb7cd649,0xbb77be9f,0xba6b3e89,0xba5c355a,0x38165660,0x3ae9244d,0x39d5b33b,0x3accb69c,0x3b1416a7,0x3b522587,0x3ba56c71,0x3c03cc3a,0x3bccf28e, +0x3ba6d22b,0x3aaacc02,0x3b3071e6,0x3b3891b2,0x3b9597a8,0x3b6d991c,0x3ba7dd87,0x3bafae43,0x3c14c2da,0x3c172d43,0x3c050302,0x3b812757,0x3aed9e52,0x39600ec7,0x3abca29b,0x3b1fd30d,0x3b405c09,0x3b5230b0,0x3b00653e,0xbb3ab49a,0xbb232acb,0xbb8d0fb9,0xbb941a35,0xbbdcac09,0xbbc8bc7a, +0xbb52968b,0xbb4e81ce,0xbaf12d63,0x3ae25648,0x39ea24d1,0xbb1a8439,0x3a06c168,0x3b910197,0x3c06456f,0x3c622c63,0x3c33b008,0x3bfd471d,0x3b118afa,0x3aa1bb60,0x3b60bc9e,0x3c13a1d8,0x3be838b6,0x3bfc60cf,0x3bf9a75d,0x3c56e970,0x3c57b4f9,0x3c2d7723,0x3b94685d,0x3a9fe899,0xba8ece3f, +0x3a1f52b2,0x3b2fcffb,0x3b8911dc,0x3b5e8647,0x3b5e3ad4,0xbb8846f6,0xbb71a26c,0xbc0e51e3,0xbc1de9db,0xbc7faee7,0xbc5804fa,0xbba3836c,0xbbc8e271,0xbb3bc4a0,0x3b19474c,0xbacfbca0,0x3b085313,0x3b4b7848,0x3b926318,0x3c0ae60a,0x3c5c20ec,0x3c4ce5e3,0x3c1fb6ff,0x3b22493b,0x3b84fcf0, +0x3b841791,0x3be43142,0x3ba3eae5,0x3c05a915,0x3c1b1a40,0x3c950914,0x3c95009b,0x3c80c186,0x3be8076c,0x3b5f004b,0xb85cbcfc,0x3b3a6eea,0x3b901a20,0x3be8b941,0x3bd25dab,0x3b824c32,0xb9004484,0xbb528ffd,0xbbbff976,0xbbf85070,0xbc669f4b,0xbc606b00,0xbbb59738,0xbc200a1e,0xbbcb5373, +0x3b5cd1ae,0xba9dbcb1,0xbbaf40ce,0x388aefda,0x3bef8c21,0x3bb8bd02,0xbb86f334,0xbb7e3d16,0xbbda4de3,0xbc42916e,0xbafda290,0x3c0da688,0x3c5321a3,0x3cd7b75e,0x3c95a255,0xbc31d91a,0xbc637feb,0xbc811e27,0xbc98c4f5,0xbc39f166,0xbc037258,0xbbf47462,0xbbc97e47,0xbc1165ce,0xbc438b38, +0xbc5c2bec,0xbbf985e0,0x3c0b00ea,0xbb4a020a,0xbb9ba407,0xbb4db533,0xbaed1338,0x3bd9af13,0x3c95b057,0x3c888e95,0x3c30d4ea,0x3a76e7fd,0xbb128138,0x3ccc4e5c,0x3be5491d,0xbb6642aa,0xbc2b450a,0xbcb13d75,0xbbffdb85,0x3a4beda8,0x3bcdeedf,0x3c37b49d,0x3a077b6f,0xbcba10f9,0xbc8873a4, +0xbc1be21a,0x3b17e154,0x3c6bd295,0x3c732cf0,0x3c3267ac,0x3bd15dcd,0x3ba04c93,0x3c31e679,0x3bc5c606,0x3ba56f2a,0x3b0dc534,0x3b5c0547,0xba37952e,0xbb86dbf5,0xbb82a6f9,0xba87ac87,0xba86dabe,0x38f3b598,0xbb90ffd0,0xbc62d3bb,0xbcbab537,0xbc82eb62,0x3ab9f208,0x3cb29248,0xbcf58382, +0xbcddc60a,0xbc368bb4,0xbbb11d3a,0x39c1442b,0x3b104b60,0x39e07b26,0xbb88a6a9,0xbc50cf53,0xbbfc8d9c,0x3bfdf062,0xbb8e3483,0xbbe54352,0xbbb27ef9,0xbb9153d0,0xba84c930,0xbbb72750,0xba4f0e12,0x3a190433,0x3b8e941e,0x3b60c2c4,0x3abca60f,0xbb2bd048,0xbb2ec1ae,0xbb3f756d,0xbb91c370, +0xba7aea3d,0x3a7583a2,0xb71c5630,0x3a213fa8,0xba9de37e,0xbb5b0e12,0xbc8e4472,0xbc6d8bab,0x3b65973e,0xbcd0273f,0xbcd1eb73,0xbcdb2b40,0xbbbfec64,0x3b81f43d,0x3c9dea7a,0x3c30e80e,0x3ab8157f,0xbc4cd508,0xbc9fe769,0xbc3801a6,0x3c6c0b47,0x3b4eae81,0xbb1f0979,0xbbf26f8d,0xbba7043a, +0xbba14fb6,0xbb331c67,0xb94322d1,0x3a204f90,0x38f8d5ea,0x3b14d254,0x3a6e5ccc,0xb99974f6,0xbb326fa0,0xbb456e60,0xbb10c7b5,0xba1c7019,0xb92d4732,0xb96c75de,0xba34fc00,0xbad5c203,0x3b0a9383,0xbac55129,0xbb0b961d,0x3c2053e6,0xbc88a9dd,0x3cbaa01a,0xbb039f82,0xba1ce793,0x3abeff2d, +0x3c206ebd,0x3b6a1310,0x3aa4671e,0x3a44c835,0x3b6b6a28,0x3a8a67a1,0xbbb5bf12,0xbb4adf1f,0x3b23ffe9,0x3af0bcb1,0x3bc74f0b,0x3c00c5f9,0x3c126ecf,0x3b7600c8,0x3b126b45,0x3a3cceb5,0x3a847070,0x3b5a8adb,0x3ba77098,0x3b6ff74f,0x3a87ce40,0xbafb41fe,0xba62a27b,0xba0fe0f8,0x39bf05d7, +0x39d2e08b,0x3b192405,0x3be26447,0x3ba495ca,0x3b7e6594,0x3c620192,0x3cccfd08,0xbc1d0adc,0x3b974ed5,0x3beea2a7,0x3bb4ce40,0xbaf9b563,0xbb5b0651,0xbb7bfef9,0xbb2bd265,0xba699e4e,0x3ba3e747,0x3c47284f,0x3c304930,0x3c0248a3,0x3bd87b1d,0x3b746528,0xb9a205fd,0xbbb5437b,0xbc00e8a7, +0xbc19cf22,0xbc12c52b,0xbc1ec90c,0xbc16f044,0xbbdafa9b,0xbb08f25f,0xb9dc85ff,0xbac84046,0xbb1a37ec,0xbb3a607b,0xbb3bcc32,0xbb4036cf,0xba65c91f,0x3934bdf1,0xb90d6bca,0xba1fcd40,0xbbb0a9dd,0xbc0d1afd,0xbb1819bd,0xbbce21fb,0xbc1139f9,0xbbbdf253,0xb9f5c0aa,0x3bc7164d,0x3c270050, +0x3c5e5e9a,0x3c7cc282,0x3c7977d7,0x3c656c8d,0x3c74d2d5,0x3c60aae5,0x3c218cfe,0x3c02527d,0x3b9a2ace,0x3a6b9db1,0xba5a742c,0xbb38db2b,0xbb98317e,0xbbb47ec9,0xbb99a776,0xbb912566,0xbaa0414d,0x39d4c802,0x3b27bfaa,0x3b634813,0x3b431ca3,0x388d4c6e,0x39ec272d,0x3905fe38,0xba734caf, +0xb984b5e6,0xba8c2462,0xbaa82f33,0xb94f64f1,0x3b914441,0x3bb9cc34,0x3baedfce,0x3ba95a5c,0x3bd68ee2,0x3bfb7dd7,0x3c1bae91,0x3c328f80,0x3c34458e,0x3c41eda4,0x3c4c9118,0x3c1ab80b,0x3bce1e47,0x3b42a2a7,0x3ae90212,0xba8da306,0xbb57e6fc,0xbb4bd6a6,0xbb6a860c,0xbb870714,0xbb95cdff, +0xbb9c5aa1,0xbba05810,0xbb319dab,0xb9c4023d,0x3b0cc8d7,0x3b703a4d,0x3bbc0519,0x3be4d999,0x3be57067,0x3bf0df79,0x3c097480,0x3bef5d8a,0x3bfceeec,0x3bf74795,0x3b9b2981,0x3bf3f77e,0x3be28923,0x3be8866c,0x3bcad135,0x3bb26b39,0x3b699301,0x3b0ef104,0x3ab99a64,0x3a81b8b8,0x3a09ea20, +0x38653542,0xba9f1e93,0xbb36f291,0xbb6f775d,0xbb8e4a10,0xbb9da56f,0xbb9ee793,0xbb9e9c8a,0xbb90331a,0xbb907bf7,0xbb91eeb6,0xbb9aebe4,0xbba3305e,0xbb6008d6,0xbb27c315,0xbaf14d31,0xb92aa8f8,0x3b184432,0x3b7f4e63,0x3ba95f6b,0x3bd4aa3d,0x3bfaad0a,0x3c051d2a,0x3c066d1f,0x3c0d8d49, +0x3c0e9d2f,0xbbf693c7,0xbba70eed,0xbba93a90,0xbbc29661,0xbbc536b8,0xbbaa48ee,0xbba1271b,0xbba49180,0xbbab7e16,0xbba7dbce,0xbba65e34,0xbb9c7283,0xbb8c0700,0xbb8afcba,0xbb823bbc,0xbb8723cf,0xbb9e678d,0xbba4fcab,0xbbb38011,0xbbca6aa2,0xbbd5b2e7,0xbbd7c310,0xbbe18d9b,0xbbf6d46e, +0xbc033caf,0xbc09fed5,0xbc070359,0xbc056455,0xbbf77f90,0xbbe703b9,0xbbc433a8,0xbbbe0f6a,0xbbb009dd,0xbbdae46e,0xbbf0e6c7,0xbbc83a4b,0xbae73ab7,0xbae5a551,0xbb0ca2b1,0xbb09d7bc,0xbb210600,0xbb380664,0xbb59343b,0xbb6c510c,0xbb6f4f5d,0xbb7b232e,0xbb82f17c,0xbb8974e0,0xbb8ef1f3, +0xbb91adc3,0xbb92646d,0xbb91eef1,0xbb910cfe,0xbb8ca1b0,0xbb893e9f,0xbb86d108,0xbb88f6af,0xbb90672b,0xbb939375,0xbb88ec43,0xbb8acb76,0xbb8eabf7,0xbb84f29e,0xbb613882,0xbb4a2989,0xbb341a2d,0xbb25921d,0xbaebd044,0xbaccb569,0xbad83a7a,0xbb00e295,0xbae10c56,0xbbd53e1b,0x3ac6fd63, +0x3a966134,0x3aa1b66c,0x3a9d49ce,0x3aa963f3,0x3adf2f1b,0x3abe4dde,0x3aa378dc,0x3a3d04ed,0x3a7c6eab,0x3a95a7ae,0x3ad26d8e,0x3a9459c1,0x3a9b5f0a,0x3a9bd5b1,0x3af5a222,0x3b097e01,0x3afdc01c,0x3ac95b37,0x3aa60f47,0x3a88fd51,0x3a975b75,0x3a9421b3,0x3aa4597b,0x3a88c911,0x3a61e452, +0x3982494e,0x3a0f0776,0x3a1f4580,0x39c748b2,0x39f7ceea,0x39a7002d,0x38b7f985,0x39e3d2cc,0x3a039068,0x3a3900e8,0x3a81abcd,0x3a2d50eb,0x3a9c12a8,0x3ae3227c,0x3b36044d,0x3b9f2642,0x3b97a820,0x3b5be0b9,0x3a541b93,0x3a0b5c0f,0x3aafee01,0x3b85afa8,0x3b5a5551,0x3b495e8f,0x3b334a54, +0x3b92f98c,0x3b9db28c,0x3b800422,0x3b25edf5,0x3ad06dd2,0x3a92c597,0x3ab4586f,0x3aca9352,0x3a8f2729,0x3a9537d0,0x39b136f9,0xbade9c52,0xbab69ee8,0xbb0f7b79,0xbb6b801f,0xbb5a9030,0xbb5796ec,0xbb295a95,0xba01f542,0x395af96d,0xb8caa9d7,0x396c1850,0x3a9e0485,0x3b1c67fb,0x3b121930, +0x3b8009d2,0x3bd70643,0x3bc43720,0x3ba3f2dd,0x392556b2,0x3aa8159b,0x3aecfe3b,0x3bc0717f,0x3b51392a,0x3b860eca,0x3b62694f,0x3bf87b21,0x3c082722,0x3bf00dda,0x3b923b6d,0x3b4311f4,0x3ae01344,0x3b037c6e,0x3b0943d1,0x3a8279a4,0x3aeb27b7,0x3a3d349f,0xbb8f518d,0xbb311613,0xbb5f8533, +0xbba8b387,0xbba49bb2,0xbba0c78a,0xbbbbc8c3,0xbb1bab39,0xbab2e5d5,0xbaad6a13,0x3888dfc7,0xbab5847d,0x3ac74aa3,0x3b1cef2a,0x3bbf4940,0x3c42d8ad,0x3c39e9c4,0x3c069958,0x3a9a4df8,0xba9ba13d,0x3aa06558,0x3c31056c,0x3be6d263,0x3be5626d,0x3bb2866a,0x3c39ecd6,0x3c430740,0x3c1df544, +0x3bb1d29a,0x3b347dcd,0x3ab1f7e0,0x3ae69bc5,0x3b1c7ac1,0x39f07cc8,0x3a7644b0,0x3abad463,0xbbe80d6e,0xbbba53f8,0xbc27ca34,0xbc37de0d,0xbc762ea3,0xbc4944ca,0xbc17dde8,0xbb8b0d1c,0xbac649dd,0xbb221606,0xbac1999d,0x3a9c03ea,0x3b48f972,0x3b31ca24,0x3bcc3dcc,0x3c238218,0x3c42b0ad, +0x3c0d54ad,0x39eef08b,0x3ad159ac,0x3b48a7e5,0x3c20f95f,0x3ba0a89d,0x3bc4eff4,0x3bbc9fe9,0x3c773463,0x3c87c170,0x3c7089a3,0x3c10a1db,0x3bd5f476,0x3b63e8ab,0x3b9a95a3,0x3b8de48a,0x3b21b7d5,0x3b85c977,0x3b167fc5,0xbb88ab18,0xbb97f2f9,0xbbb88366,0xbbb28708,0xbc4be303,0xbc4e2c75, +0xbc240a30,0xbc04c54c,0xbb832402,0xbb330e6c,0xbac50cac,0x3bd29644,0x3c07d7db,0x3c882f40,0x3c50bdc2,0xb875d813,0x3aa16155,0xba88063c,0xbbf3f143,0xbb7b5374,0x39dd9555,0x3b6c0ff3,0x3c8d4d26,0x3c6bc8fb,0xbbc0e528,0xbc4ca70d,0xbc8676e7,0xbccca962,0xbca16181,0xbc8f9e1d,0xbc964792, +0xbc8a6334,0xbc76dd96,0xbc82ee83,0xbc3267b2,0xbbaf4d86,0x3beafde2,0xbaf22623,0xbb0131f0,0xba1f4955,0x3a73fdf0,0x3c23be47,0x3ca15a30,0x3c9f4a11,0x3c61e43b,0x3b8aff94,0x3bfc66d0,0x3c660437,0x3a819c73,0xba92e4a1,0xbc054f77,0xbc9e3561,0xbc71abff,0xbbf2e621,0x3b6cdd13,0x3c41f2ad, +0x3bb55c2b,0xbc7388fe,0xbc9519dd,0xbc785e72,0xbba4d3aa,0x3c1b5a4f,0x3c71c0b7,0x3c54c775,0x3c378f20,0x3c13fcc7,0x3c2c6684,0x3b9fb03c,0x3b509813,0x3b351e36,0x3b7ff14c,0x39fea4a4,0xbb96a488,0xbb5e77c1,0x382541b0,0xb9b23a39,0xb9a5ce1b,0xbbb00647,0xbc477af3,0xbcb60c4c,0xbc5f18d5, +0x3c1c60ab,0x3c6291c7,0xbcafc0f4,0xbc7d72fa,0xbc9d392c,0xbc34d2d6,0x3c380980,0x3aff2caf,0xb7cbf65d,0x3ac1ffea,0xbc438e2d,0xbc160fd1,0x3bdd1ba4,0xbb20d9fc,0xbb7aba42,0xbc015b5b,0xbb87d9b9,0xba3c1f1a,0xbbc31926,0xba2d5c27,0xbab57433,0x3a0c1c3b,0xb9327f2f,0xbac30f89,0xbb58f360, +0xbb51b1d9,0xbb37393d,0xbb2c0bab,0x3807010b,0x3a3ca684,0xb989eca2,0x3a7b685f,0xba4da6bc,0xbbdc35ee,0xbc387d76,0xbc094fde,0xbb997fe9,0xbc8469de,0xbc886928,0xbc283b8a,0xbb8f9791,0x3b4117c0,0x3cce7713,0x3c8a5ee8,0x3c217e4d,0xbb30e3cd,0xbc951f41,0xbc7c2785,0x3c39ee00,0x3bb453db, +0x3ac350ed,0xbbf7cd90,0xbb9e3424,0xbbacd18f,0xbb8f6710,0xbabb3475,0xba6991cb,0xbaf2dc1d,0x3a720965,0x39a70b11,0xba8722ec,0xbb3cefcb,0xbb40c977,0xba4a1d34,0xb9bf92f3,0x386e71bb,0xb9518fa2,0xb932e700,0xba614e61,0xbb374c28,0xba90f1e5,0xb9ff68fc,0xbaa13b01,0xbc470462,0x3b6f3dab, +0xbb65937e,0x3beeaf78,0x3c1c8748,0x3c1d4777,0x3c5ca0e3,0x3c386166,0x3aad16d6,0x3b95659a,0x3adf1270,0xbb018baf,0xbb9e4bad,0xb9b73fd3,0xb900bca5,0x3baf4c90,0x3c0074fa,0x3c027100,0x3bbe3fb4,0x3bbcc634,0x3b7716c1,0x3b4a1ea0,0x3b9cff78,0x3bc29f30,0x3b6fd369,0x3a615896,0xbb1ac81e, +0xba3b7665,0x3950fca5,0x390270ef,0x397f5cec,0x3af0637d,0x3b8fa2a2,0xba4f086e,0xbab01293,0x3c2f5716,0x3c05531a,0x3a4178d0,0x3c014365,0x3c110959,0x3bf100f0,0xba24afcb,0xbbad3304,0xbbf0cc81,0xbbcfa910,0xbbb6dad6,0xbb2c05ea,0x3bc17541,0x3b9913b2,0x3bc3a076,0x3b95e5db,0x3b023c9a, +0xba810492,0xbba7c3a4,0xbbbc4802,0xbbde930d,0xbbe22d31,0xbbd2c785,0xbbb6a768,0xbace82e7,0xb7050d0d,0x3a314401,0xb9e3cee2,0xbac06cd6,0xbaa9c941,0xb7d4afae,0xba8a9b8c,0xba3400fc,0xbb1b3144,0x3aa4cc15,0x3ac56ce1,0xbaf9c78e,0xbb04cf0d,0xbc08f5ad,0xbc35c4cb,0xbc240936,0xbc031a56, +0xbb9deab0,0xba055eb4,0x3b111d6c,0x3ba98db8,0x3c2b686d,0x3c5d03d0,0x3c6de16c,0x3c7c0642,0x3c683bbc,0x3c37d890,0x3c1b7749,0x3bc90b0c,0x3b2c0e97,0xba63368a,0xbb5ef906,0xbbba1469,0xbbc8ad52,0xbb8b4e06,0xbb36b388,0x3a0cf956,0x3afa8ff3,0x3b2e3c47,0x3a4cc921,0xb986fd12,0xbb135083, +0xbace788a,0xba7b9f27,0xbae7d0a4,0xbb23795c,0xbb8130bf,0xbb885e3b,0xbbae66d0,0x3b4eb352,0x3b463359,0x3abfc82e,0x3ae493fe,0x3b589621,0x3ba7d6bd,0x3be166a5,0x3c091b45,0x3c18dc40,0x3c2af4c2,0x3c333f0a,0x3c100737,0x3bc6d2fc,0x3b434cfb,0x3b084ffd,0xba61705b,0xbb22bdfd,0xbb40ed24, +0xbb6a8c3f,0xbb874168,0xbb897fc4,0xbb7923b4,0xbb49e846,0xb9c184fb,0x3b0d1935,0x3ba5b6d0,0x3bb493dc,0x3bc3e740,0x3bd6ca63,0x3bb9ede4,0x3bac3a77,0x3bb170d0,0x3bc134f7,0x3bd1c768,0x3bb45f31,0x3b739ca3,0x3c0f88a0,0x3c10d3e8,0x3c148303,0x3c10f976,0x3c0c4b9c,0x3beb7d48,0x3bcbda5e, +0x3bbe45d3,0x3b8a2cee,0x3b2629b2,0x3a9bafee,0xb9e0f75f,0xbb1b6bb2,0xbb72c3f1,0xbb7ea5d8,0xbb83e72f,0xbb721a44,0xbb676fac,0xbb275dbe,0xbb409436,0xbb30fb2d,0xbb4c3e1a,0xbb55d949,0xbabe7b1e,0x39a83ec9,0x3b0161f8,0x3b3fbb5b,0x3ba1f10f,0x3bc5bd6e,0x3bbde97a,0x3bcb7a86,0x3bb75974, +0x3bc22f3e,0x3bede027,0x3c03004b,0x3c0ad06a,0xbaaa5f2a,0x39d6b4fd,0xb8d3beea,0xbab899c0,0xbb214486,0xbacc932a,0xbb11dfdf,0xbb167212,0xbb31c053,0xbb307373,0xbb407d2b,0xbb541675,0xbb5bc26f,0xbb86966a,0xbb7b98fe,0xbb84448a,0xbb9ce6a7,0xbba86d5e,0xbbbd3a47,0xbbc84ae4,0xbbc9a7f5, +0xbbb80298,0xbbb3d59c,0xbbbc03a5,0xbbd25400,0xbbe37a6a,0xbbccaae1,0xbbc29755,0xbba4ccc7,0xbb62c0ce,0xbaff1d6e,0xba047b0e,0x39e518ce,0xba83176b,0xbabb1123,0xb782c4a8,0xba36377f,0xb91946c1,0xb9c79953,0xb9dc236d,0xba4c2c6c,0xba7a8ef8,0xbaaf16b0,0xbac80cbc,0xbb08776a,0xbb2ccafe, +0xbb4ca8ac,0xbb66223e,0xbb799cf4,0xbb85026a,0xbb802941,0xbb7ac925,0xbb719e09,0xbb5e2767,0xbb52414c,0xbb4b80fe,0xbb4cf275,0xbb5acb88,0xbb68bb24,0xbb43eae7,0xbb3a0bf0,0xbb47e6d0,0xbb2fdd65,0xbb0da41c,0xbaecb4cf,0xbadcd32d,0xbae66844,0xbab72b6f,0xbaa34102,0xba89ca0f,0xba966217, +0xba52b02b,0xbbb35ed2,0x3a630c82,0x3a2db855,0x3a6e65ef,0x3a4b3999,0x3a51f783,0x3a8861a3,0x3a832b66,0x3a56d9de,0x397a3b8d,0x39f4b602,0x3a3dfc85,0x3abfd445,0x3a2d75d7,0x3a175165,0x3a0da718,0x3aa213e8,0x3ac32e2c,0x3abb2fac,0x3a9d9535,0x3a866113,0x3a6525ae,0x3a4737f4,0x3a2fdbdb, +0x3a43b337,0x39dec3ba,0x3991456a,0xb918a49a,0x39916859,0x39d0aed8,0xb80e738b,0x39841b78,0x390a0aa9,0xba07af16,0x398270e4,0x399a316e,0x38fc2b5b,0x3a092b5c,0x39a39ea2,0x3a8091ea,0x3a6af80b,0x3ae396dc,0x3b5ecd3c,0x3b83bae2,0x3b363577,0xb8b29204,0xb9b70ef8,0x3a0381b0,0x3b80b163, +0x3b30e27c,0x3b119749,0x3aeaeaa3,0x3b67f214,0x3b7e6794,0x3b5280ef,0x3b194f05,0x3ad1c323,0x3ab0d488,0x3a8a0f4f,0x3a57231d,0x39534e1f,0xb78991f5,0xba2ff9c8,0xbb1b7754,0xbaca1445,0xbb15e899,0xbb8555e4,0xbb1d87e1,0xbb137e45,0xbb70d0b6,0xb9a5e52c,0x3964b8df,0xbaa81110,0xb982f950, +0x39ec14a5,0x3b177b5a,0x3ab7974d,0x3b291444,0x3b8d417c,0x3ba1cbce,0x3b8d6d7e,0xba549f3b,0x3903d3dc,0x3a6e37ce,0x3bd37dd4,0x3afcc4e8,0x3b108bc0,0x3ae8aec5,0x3bb5cdfb,0x3bdcf929,0x3bca133a,0x3b919b37,0x3b6037ed,0x3b2be5dd,0x3adc871b,0x3a87e10d,0xb8c86802,0xb8bf57d5,0xba5301ef, +0xbb9ff22c,0xbb26e124,0xbb1bbe6b,0xbbc969ec,0xbb657389,0xbb6e21dd,0xbbe5a946,0xbac2d28c,0xba47cf36,0xbb39db5c,0xba0f016d,0xbaa7a5c6,0x3b02bc4b,0x3a63d083,0x3b7504c3,0x3c0a64d3,0x3c251870,0x3bf18af2,0xb9dbaa7e,0xbb2d9b4b,0xb9aca265,0x3c381707,0x3bba964c,0x3ba21869,0x3b688bb2, +0x3c166983,0x3c25ecdc,0x3c08329d,0x3bbe4e41,0x3b69a7da,0x3b49ef37,0x3ae6cbf2,0x3a853a05,0xbad79f3b,0xbaebdb42,0xba901a9c,0xbc0b838c,0xbbcc5c84,0xbc1ba40e,0xbc565717,0xbc417401,0xbc1fec28,0xbc46d1f4,0xbb23c44d,0xb9def3a3,0xbbae9bef,0xbaf3b4fe,0xb95c8089,0x3b5263f6,0x3ac97a4b, +0x3b768a92,0x3bb62b94,0x3c21b947,0x3be8b8c7,0xba59411a,0xb9e10d00,0x3b0a8865,0x3c3b3081,0x3b3fe6e0,0x3adc01fa,0x3b0b415b,0x3c31e6ae,0x3c5b6c10,0x3c4e1f7f,0x3c18e9a6,0x3c01fcff,0x3bb9eefb,0x3b8f99da,0x3b38ba09,0xba9bc7f1,0x3a576004,0x38466225,0xbbc25185,0xbb4c7ef1,0xbb310eea, +0xbb1b26f6,0xbc023e17,0xbc01a130,0xbc43f354,0xbbae7d3d,0xbae3cd65,0xbbcc5783,0xbb131ca0,0x3c4c3860,0x3c575d74,0x3caaa042,0x3c8aaca3,0x3bf65b23,0x3b7f9bf5,0x3ab8c520,0xbaa7f62d,0xbb850d48,0xbba44db1,0xbb57a8d2,0x3c14a007,0x3c3dceb5,0x3b8fc153,0xbc098c55,0xbc70f5db,0xbccce0e0, +0xbcbeee43,0xbcb0e9f8,0xbcac4931,0xbcaaf23e,0xbc866240,0xbc8693a6,0xbb98b8e4,0xba74c90c,0x3b896df0,0x3891765f,0x39c9ab7d,0x3a827e82,0x3b2d12f1,0x3c1e8cde,0x3c6db516,0x3c8e8eff,0x3c78b79f,0x3bf7524a,0x3c57f4db,0x3b986ed4,0xb95e8045,0x3a74bec5,0xbbd4fb5e,0xbc8bfc66,0xbc8d3ca1, +0xbc368474,0x3b61e69b,0x3c2e25f4,0x3c0a103c,0xbbc3f5a8,0xbc918d2c,0xbc9ccd23,0xbc0d331b,0x3aefc7f8,0x3c1a97a8,0x3c4c59b9,0x3c5625cf,0x3c31edb8,0x3c03e609,0x3b4321ac,0x3a744ba0,0x3b055df2,0x3b42480b,0x39ebf167,0xbb773e2f,0xbad34988,0x391a64b3,0xba2c400f,0xba2ab7ba,0xbb8a1671, +0xbc130d31,0xbc860ef2,0xbc1aa11e,0x3c611396,0x3bb41994,0xbc6fb7a0,0xbbf5a271,0xbca26187,0xbc2f4b70,0x3c925e78,0x3b0259ed,0x3a815832,0x3bb66874,0xbc14af4b,0xbc18a4ee,0x3b3dda7c,0xb90d99be,0x3a3371b5,0xbbeaed2b,0xbb808c6e,0xbabc5153,0xbb942a19,0xba3be681,0xbb18d27e,0xbaee53ec, +0xbb25ba8c,0xbb4b8fdb,0xbb6c5977,0xbb3a93c7,0xbb095d77,0xba1487d2,0x3a3a6c64,0x38a2ada1,0x3935cb5a,0x39c78ca0,0x3aef41f5,0xbb9dd173,0xbb758dba,0xbb0d2c1c,0xbc4e36bc,0xbc1a0a4e,0xbc2c5adf,0x3c11a339,0xba8d7718,0x3abbff0f,0x3cae0b83,0x3c87037c,0x3c6b3ba7,0x3c0795d5,0xbc6210a4, +0xbc866368,0x3b77507e,0x3beedbaa,0x3bd46f32,0xbba5ca27,0xbb608c69,0xbb9e6cf6,0xbb99639d,0xbb2ac8f3,0xbae5b65d,0xbae9419e,0x39d0f233,0x3a0433bf,0xbaa25ce1,0xbb080c2b,0xbad95eb3,0x3a1667cf,0xb978d950,0x36a9adc1,0x39627814,0xba09d220,0x3957fa9f,0xbb8a0dab,0x3a740417,0x3aba0a71, +0xbc6f6a20,0xbc4209f0,0xbc27ac37,0x3c698b73,0x3c563e87,0x3c19c561,0xbaf8c2dd,0x3c4b49b7,0x3c778d7e,0x3c10f123,0x3bba0f9d,0x3a523391,0xba8fd98a,0xbbe28b71,0xbb5d16fe,0xba126e09,0x3b4475a8,0x3b8dff5b,0x3bb23e4a,0x3bc49c0f,0x3bf3d3f2,0x3bc559cd,0x3b99dfee,0x3bb14ed1,0x3bc5436c, +0x3b207239,0x3a022b81,0xbabc6332,0x35ea3218,0xb94ac5a0,0xb9921575,0xb990d66b,0x3a33b81b,0x3a860103,0xbb18c73d,0xbb913120,0xbb482b9a,0xbc4f0b8d,0x3c16d54d,0x3bd3c45e,0x3bf6578a,0x3c00bed2,0x3b072c21,0xbb95467e,0xbc1fd13b,0xbc31ec2c,0xbc2303fa,0xbc13b481,0xba86d84e,0xba816535, +0x3b5b70ed,0x3b0f55fe,0x3a38208a,0xb9b24107,0xbb1f6287,0xbb2c432f,0xbb680b1a,0xbb6c14b7,0xbb056bc8,0xba57cced,0x3b3038c4,0x3af22e59,0x3aa2cf46,0x39acdd52,0xb94a978b,0x39e573d7,0x3a908198,0x3990b4ee,0x37ae22f0,0xbb2694ff,0x39cc45db,0x3b207518,0x3ba446cd,0x3bfc6923,0xbc1379f7, +0xbc062e88,0xbbae3ef3,0xbbd3d32e,0xbbf55924,0xbbd3b2af,0xbb9eb4f0,0xbb07a978,0x3b84bf4d,0x3c04c2c0,0x3c1fe5b5,0x3c336a8d,0x3c2d5ffd,0x3c1ae09f,0x3c031300,0x3b9f7d61,0x3aee869b,0xbb061e0a,0xbb7be5db,0xbbaa71f9,0xbbb04545,0xbb4415fd,0xbaa19c44,0x3ab9fde9,0x3b083bd1,0x3a8ac9d7, +0xbabae35f,0xbadd4a6e,0xbb0ed9d1,0xbad22593,0xba97d974,0xbb0bf8f9,0xbb6fb2cd,0xbbb30f68,0xbbbdce0c,0xbbf8925d,0xba9852fa,0xbb218cf1,0xbb71211d,0xbb2deab3,0xbb0e3783,0xb9cddbad,0x3a902e20,0x3b3f3079,0x3ba4d432,0x3be08df8,0x3bffba67,0x3be3a32f,0x3ba98644,0x3b3eb005,0x3b02252e, +0xba32e7d6,0xbb0e50ed,0xbb42697d,0xbb6f2035,0xbb82de57,0xbb6939c4,0xbb253779,0xba5e2782,0x3a9568be,0x3b60210c,0x3bbbec79,0x3ba9f815,0x3b8a8efb,0x3b891420,0x3b37fd6b,0x3af2f321,0x3a577bb3,0x3b1c0e35,0x3b3afeb2,0x3ac4ffb4,0x39d35a45,0x3bc9be5e,0x3bc3356f,0x3bb95ae3,0x3bb7f1df, +0x3bb5e286,0x3bd05303,0x3bdf5244,0x3bedd788,0x3bb31e8a,0x3b6a2adf,0x3b24cc70,0x3a2684d1,0xba934867,0xbb29366e,0xbb2ccd8b,0xbb2da5bb,0xbb16ba55,0xbb10edf1,0xbaaa2b18,0xbb137c50,0xba9f8bb4,0xbaadd499,0xba68fe15,0x3a3ff3e7,0x3b38bf60,0x3ba69e5c,0x3ba4af9f,0x3bc897c5,0x3bd418e1, +0x3ba74190,0x3b931dab,0x3b37a163,0x3b2a322f,0x3b73764d,0x3b8d71c8,0x3b9e3020,0x3b87b348,0x3b8f8dab,0x3b7c7219,0x3b466136,0x3addce61,0x3abcf9f0,0xb8fb123d,0xb9b2d152,0xba5b60fb,0xba8048ad,0xbacc23d8,0xbb0a61d7,0xbb2b5152,0xbb7773e0,0xbb655e5d,0xbb6ef5fa,0xbb8b76fd,0xbb96a5f3, +0xbba41e11,0xbba4db24,0xbba23afc,0xbb7538ac,0xbb4a07fb,0xbb25be17,0xbb3d581d,0xbb499dad,0xbb0e8f27,0xbaee3ff8,0xba897700,0x3a76f77c,0x3b195771,0x3b8863cb,0x3baa75ea,0x3b8efc20,0x3b899979,0x3ba01470,0xb9955de4,0x3a044b14,0x39c40da5,0x38c82541,0xb89114ba,0x38a337a5,0x390d10b0, +0x38cc875c,0xba2b948d,0xbaaa9e9a,0xbaf3b5bf,0xbb16e698,0xbb2dc72d,0xbb42cabf,0xbb36428c,0xbb31741c,0xbb265eca,0xbb12f5c7,0xbb0be9e4,0xbb065898,0xbb0ac437,0xbb15f33e,0xbb288008,0xbad1e7d0,0xbab3e6c9,0xbac9f432,0xbaa3b8d1,0xba84363a,0xba405047,0xba644ab3,0xba9b8efd,0xba9c3ab7, +0xba97ab4a,0xba5943bc,0xba7223b6,0xba0d2431,0xbb7a5282,0x3a237d9e,0x3a074229,0x3a55f23d,0x3a1ea47f,0x3a184967,0x3a2aa92c,0x3a506225,0x3a2cabc6,0x38f41ffb,0x398da25f,0x3a11f764,0x3ac07e26,0x39df1c15,0x396ce0bb,0x398272c6,0x3a4b7182,0x3a87be77,0x3a9b95a7,0x3a8293c7,0x3a5f2839, +0x3a40b8ab,0x3a08c461,0x39e5e41f,0x3a09f6e1,0x3895161b,0xb89e20b7,0xb96d2894,0x38d935a3,0x3936c619,0xb99bc931,0x3921b987,0x38c12b68,0xba3c8ac7,0x39776679,0x39af7e5f,0xb7a20aa6,0x39b82d68,0x383e1b1c,0x3a821574,0x3a37a8c7,0x3aadc235,0x3b1ad2b0,0x3b6fedd9,0x3b299255,0xb96ab2e6, +0xba23568b,0x3904047b,0x3b728eaf,0x3afb0613,0x3ab68172,0x3aab63be,0x3b2a0a9f,0x3b419d94,0x3b3faff2,0x3b0d7200,0x3ac9b7e2,0x3ab26a4a,0x3a38f98f,0x39907306,0x38b543b0,0xba5ac0c3,0xbaa50d7a,0xbb076a3b,0xbaaf9e60,0xbaf824e3,0xbb6638fa,0xbab48cea,0xba86ea5c,0xbb5f4392,0x381193c5, +0x399cb95b,0xbac32af2,0xb9fa0e4e,0x3939883c,0x3b1ad45c,0x3a985c7f,0x3af9a6b0,0x3b2fb211,0x3b8bf9ca,0x3b83c8f7,0xba35d48c,0xb9bab05b,0x39e089d3,0x3bdab2ff,0x3a4a87c8,0x39df1591,0x3a352217,0x3b5cfc87,0x3b9f4e45,0x3bb1ec76,0x3b838d7a,0x3b4fb26c,0x3b2b0837,0x3a8a9b3f,0x37f870cc, +0x381560fc,0xbaded6c1,0xbb0e0d11,0xbb84b42a,0xbb2346ef,0xbaf66c12,0xbbd48e65,0xbb02eee9,0xbb1b7810,0xbbd9ec8b,0xba1907f9,0xb8387c4d,0xbb321fc2,0xba2182bd,0xbaa6ccfa,0x3b160650,0x3a2f95f7,0x3b41190c,0x3bbb7927,0x3c160051,0x3be9fd0f,0xb9d9a209,0xbb3ddaed,0xba923159,0x3c30de6c, +0x3b6cbb67,0x3b2af8e7,0x3b14d22d,0x3bd57c08,0x3bffb57d,0x3bf87f80,0x3bbbfd59,0x3b69c110,0x3b6a1c84,0x3a936d77,0xba0de35d,0xbad070e0,0xbb8d334f,0xbb72101e,0xbbe63fe4,0xbbb50380,0xbbe364df,0xbc3d5b0a,0xbbfb16a4,0xbbd27236,0xbc379035,0xbaa09fdf,0x3985e1e7,0xbbc1d4f1,0xbb0934a3, +0xba133a7b,0x3b51ea84,0x3aa87dff,0x3b0f3fd2,0x3b1afc42,0x3c08d212,0x3bd3bc58,0xb95ba924,0xbab23ef9,0x3ab7561d,0x3c43d3b2,0x3a6bc577,0xbb1f2d4d,0xba818be6,0x3bc31651,0x3c17b4bc,0x3c3015e8,0x3c0c2a83,0x3bf04928,0x3bba0e79,0x3b2ea336,0x3a14c1ae,0xbb2c53a5,0xbb13db9f,0xbadb4a22, +0xbb936fe9,0xb9d2014b,0x39835370,0x3a130c91,0xbb245fa4,0xbb469f4a,0xbc18bc96,0xbb2a5014,0x36ce7f1e,0xbbde9855,0xbb243288,0x3c51eb6c,0x3c753686,0x3cb4b81a,0x3ca87c07,0x3c8b711c,0x3ba9854a,0x3ad0df1a,0x3b516c2b,0xbb37a6af,0xbbc77f15,0xbbd18abb,0x3bf27c8c,0x3c731a3b,0x3c903910, +0xb8da81a2,0xbc20dd84,0xbc9bc57e,0xbcb227b0,0xbca8db8b,0xbc92b810,0xbc97ea24,0xbc5dad30,0xbc5220c1,0x3b1218c1,0x3b1abc6e,0x3aaaa813,0x3a2fa433,0xb8eb276a,0x39b43ff3,0x3a5eff7c,0x3bb53b74,0x3bd9be99,0x3c3f2019,0x3c5ef6f8,0x3c29d61e,0x3c625d9b,0x3986926a,0x3aa1f421,0x3a946135, +0xbbbb835a,0xbc5e6770,0xbc8d25db,0xbc5b329a,0x3b8e60f1,0x3c05a25a,0x3c1daaca,0x3b66eab2,0xbc67fd32,0xbca2b903,0xbc303d7a,0xbb83b28e,0x3b77bd34,0x3c2bdd3a,0x3c3e2e3a,0x3c17464c,0x3b8ae853,0x39f8a6dd,0xba9b8fa3,0x3ab9697d,0x3aa7b144,0xba011e89,0xbae7c312,0xb901fa3b,0xb9127e8c, +0xb8500ec3,0xba13842b,0xbac6c35f,0xbb936f06,0xbc0d9908,0xbba18b11,0x3c4bda9a,0x3a0d6ce4,0xbc0c8210,0x3a790a29,0xbc2903f9,0xbb981785,0x3c984229,0x3b8a1218,0x3b9b867c,0x3c19db8e,0xbba07174,0xbc01ac70,0x3a27dafa,0x3b16649b,0x3ba4a714,0xbb255c3a,0xbb24f0c7,0xbb033b35,0xbb0c9eeb, +0xba52f95b,0xbaff75cc,0xbad9f06d,0xbb11116d,0xbb2f91f0,0xbb2fb09a,0xbac637eb,0xba466e47,0x39e12deb,0x3961ef93,0xb8efccd8,0x393670ac,0xb8592402,0x3ab1caa2,0x39ce1619,0xba3bcbcb,0x3820a9fc,0xbc3b4b31,0xbbca2667,0xbb8d1f34,0x3cb7aa9e,0x3aa8c57b,0xba2487bb,0x3c30cc2b,0x3c52486e, +0x3c80d729,0x3c935d20,0xbbc63003,0xbc447795,0xbb68a640,0x3c0b1fd4,0x3c2f4073,0x3a8f37c3,0xbad62a3e,0xbb8c44f0,0xbb7627be,0xbb3d2eb3,0xba7b245c,0x3a70b7a4,0x3afdc4cc,0x3afeef29,0xba4e06fc,0xba42069a,0xb99061b9,0x39df6d0a,0xb958a0a5,0x396c3b11,0x3921509d,0xb98b3349,0x38df1d1e, +0xbaf0095d,0x3a8e1cde,0x3abf793c,0xbc96f60c,0xbc49183a,0xbc65d406,0x3cceb919,0x3bbac563,0xbb03fa52,0xbc79e24b,0xb9d8fdcd,0x3c0d88a8,0x3c9e440f,0x3c1b8c11,0x3b5f27db,0xbabbb02a,0xbbdf7332,0xbbaac902,0xbafa6254,0xb9eba3b5,0x399fbb8f,0x3b42e93b,0x3ba4f3d2,0x3bef3f8c,0x3bf0e7f0, +0x3bc00c45,0x3bbd9612,0x3b9c6e82,0x3a2b9f23,0xb8923079,0xb9dbacce,0xb8d224b2,0xb9e4cd18,0xb8cf29e4,0xb9a18a4c,0x39c17f62,0xb9123170,0xba8db71a,0xbb933cda,0xbc9e2811,0xbcd1aa07,0x3c98a6b6,0x3c2bfaa8,0x3c0c1feb,0x3c08e3c8,0x3bb649ab,0xb947a5de,0xbbeda48f,0xbc484ad1,0xbc35c608, +0xbc3794b7,0xbb8caf30,0xbb7b3d57,0x3ade0cdb,0x3af77fe5,0x3ad65b0e,0x3af2dfa6,0x3a6fc2da,0x3a80580e,0x3a265b75,0x3abbd7f0,0x3b5551db,0x3b8ddb1c,0x3bb1106f,0x3b4ac3d4,0x3ab949bc,0x3a03c5d7,0x3a13510e,0x3a286f62,0x3a2a3a06,0x3999b712,0x398d7c44,0xba6912e6,0xb9f9bc58,0x3b51e7bd, +0x3c46b71c,0x3c9dab60,0xbb9ff173,0xbad4ac19,0x39f9bc34,0xbb299e1f,0xbbba5279,0xbbec2377,0xbbcd16d8,0xbb6c3a8e,0x3a90d539,0x3b7f392f,0x3b84f8c6,0x3ba45529,0x3ba93669,0x3baff95c,0x3b960f2a,0x3b1221b3,0x3786f2c3,0xbb2b2cdb,0xbb4d93ea,0xbb5b3f5f,0xbb5d7dbb,0xba90594b,0x39813945, +0x3acb20df,0x3a9d7486,0xb9f10a00,0xbaedd335,0xba9fe782,0xba9c75e0,0xba557245,0xba3be6fd,0xbb03641b,0xbb64854f,0xbbaf492e,0xbbc545de,0xbbcf5eab,0xbb831185,0xbba9e9f5,0xbba6924f,0xbb83e7c2,0xbb966fc3,0xbb6458b0,0xbb1117e2,0xba0d5e0c,0x3b03a6c7,0x3b8c7863,0x3bbd2805,0x3bc8e83a, +0x3bb272fc,0x3b8a650d,0x3b498a84,0x3a50f52d,0xba406779,0xbae0bfba,0xbb1fe0af,0xbb381ed0,0xbb1004e5,0xba4e68c2,0x3acf6c09,0x3b0aa3a9,0x3b67fa60,0x3b82a3e4,0x3b4d6073,0x3adee0f3,0x3ad12faf,0x3a070650,0xb9b7e7ac,0xbb05875c,0xba0f8bda,0xb8f76be9,0xba5ecd77,0xbaeabc2c,0x3b178e5e, +0x3ad74442,0x3a701a02,0x3a501b1e,0x39f11642,0x3b543c94,0x3ba2113f,0x3bcda048,0x3bb84b4e,0x3b9a5d1c,0x3b9b7c05,0x3b48795c,0x3b08757f,0x3a84259c,0x3a32f400,0x3a170473,0x3a01af70,0x397b8778,0x3a3b381c,0xba79dea4,0x3a2b5bdd,0x3a892dc6,0x3b0598ac,0x3b4577d4,0x3b9bcde5,0x3bdb8279, +0x3bc77411,0x3bcda046,0x3bc1c912,0x3b8d2c25,0x3b544191,0x3acb3387,0x3a874ca7,0x3a7ff0a8,0x3a866e91,0x3a9ba2fe,0x3bdff8df,0x3bd5c0d2,0x3bd016a0,0x3bd763d6,0x3bc25150,0x3b9cd14d,0x3b509d64,0x3b39e9bf,0x3b0f584b,0x3ae39df1,0x3a7aaff2,0x3a0a0ebe,0xb8b2f898,0xba925f7b,0xba802de9, +0xba9092ff,0xbab1b8ef,0xbad9a851,0xbaeb46ff,0xbacd96db,0xbaf602e6,0xb985718f,0x3a25bce9,0x3aebfb18,0x3ae56b4f,0x3b040f1f,0x3b2a9577,0x3b2b77a8,0x3b3da5d9,0x3b8e221d,0x3b9ffb1e,0x3bc6de94,0x3be0c726,0x3be0ddc5,0x3be6c9e2,0x3bed03d5,0x3a55bd01,0x3aca8f38,0x3abe9a09,0x3a88a082, +0x3a8be747,0x3ab97229,0x3af3e4e3,0x3b06e344,0x3acf5923,0x3aa11634,0x3a67c7d2,0x3a1013df,0x39914326,0x380ce158,0x3920b674,0x393e63f5,0x39a509a3,0x39ef7ef2,0x39d0060e,0x3a04e4c8,0x39719413,0xb79707bb,0xba13359d,0x3a6db177,0x3a78a345,0x3a22cc92,0x3a47c7d3,0x3a39c86c,0x3a5ba475, +0x3a17dd23,0x39567a48,0x37bb01a7,0x391992d2,0x39f37189,0xb8b6d54d,0x39c7ccf9,0x39adce82,0xb95220d1,0x384359d5,0x3965df7f,0x383d7351,0xb6e2d281,0xb8dbd698,0x3927c786,0x384fb826,0xb9d6da32,0xb9b80589,0xb8b25368,0x3a653f69,0xb92bc10b,0xb9f02a6f,0xb9f0312e,0xb9312bce,0x389637a6, +0x39f74bfb,0x398c7b0b,0x39268b98,0x3718c37e,0xb7ba90ef,0x3811b0c6,0x39da332a,0xba0f18e1,0xba12204a,0xb8e2881f,0xb9172a1e,0xb999f2ff,0xba22a397,0xb8c105da,0x38144072,0xba28b25b,0x37bbbaf5,0xb8824602,0xb9105536,0x388f16d2,0xb8c502e1,0x3a1beead,0x39872206,0x3a2d973b,0x3a85de4d, +0x3b3452cf,0x3af6c886,0xba10cc79,0xba9a5a77,0xba3f0927,0x3b206c2a,0x3a1ca284,0x390a6c7b,0x39337d0a,0x3a43bc7a,0x3a85ed52,0x3af822b0,0x3a979f94,0x3a383de9,0x39bc99bd,0x38bf6b21,0xb9ba94e2,0xb803e843,0xbad37570,0xbafea912,0xbad1a195,0xbadfc9d8,0xbae08940,0xbb13562e,0xba5032b9, +0xba35439a,0xbb39ad0a,0xb8ae3f22,0xb89d522b,0xbacdef6c,0xba596414,0x382a215e,0x3ae662a3,0x3a3a0bcc,0x3a8e4b6b,0x3a7149b9,0x3b46090a,0x3b46a533,0xba5aeb29,0xbaa9f96e,0xba2698fc,0x3babf639,0xb9b1e7b7,0xbaa4111e,0xba8a5f4c,0x390dbb79,0x3adff782,0x3b757f72,0x3b1ce5e7,0x3ae4e1ad, +0x3a91fd0a,0x397638f8,0xba5a501b,0x39bbab09,0xbb48caa9,0xbb63a343,0xbb1cbd4c,0xbb4dc9be,0xbb444451,0xbbca0e48,0xbad4e612,0xbacbefde,0xbba20b0e,0xb9af0cf0,0x3840996a,0xbb1aede8,0xba3a17a2,0xba5ec666,0x3b155922,0x3a38a950,0x3b1ea94a,0x3b4ddd56,0x3bf9dd4d,0x3bd36765,0x391385fb, +0xbb4d09d3,0xbb0d85c1,0x3c0467e8,0x3aaebb8f,0x39d82fc3,0x3997256c,0x3b0b0d40,0x3b658492,0x3bbe267c,0x3b885659,0x3b150e05,0x3b02470c,0x38e79af1,0xbae2a212,0xba490622,0xbbc56074,0xbba17b7f,0xbb854d6e,0xbb8c1d4e,0xbb647cfb,0xbbb31f44,0xbb8032c6,0xbb65d147,0xbbf0f23e,0xba10726a, +0x39a482a3,0xbbac11ff,0xbb146581,0xb9731c17,0x3b241930,0x3a89f5ed,0x3a6bb6ff,0xb9c2f546,0x3bc95115,0x3ba018d8,0x3959fded,0xbb207be5,0xb91c3158,0x3c202d64,0xb986c70d,0xbb9db0d3,0xbb953e18,0xba0e83da,0x3b54eb68,0x3bf91d6b,0x3bbe6617,0x3b9a4575,0x3b4593d3,0x3a437c75,0xbab09dae, +0xbb0db64c,0xbb6f10b3,0xbaf73355,0xbac34837,0x3a95ed32,0x398cf9a9,0x3a88f019,0x39bb4c76,0x38d35943,0xbb8997ec,0xba7681e8,0x3a2e12bb,0xbbb0ed06,0xbb0f50b6,0x3c3256c1,0x3c5dec31,0x3cad620e,0x3cb9319c,0x3cbb6625,0x3bb75a6c,0x3a821e61,0x3b86a40c,0xbb33ac1e,0xbbdb98c3,0xbc07a678, +0x3bb06b4e,0x3c840df0,0x3ccf235b,0x3c067d03,0xbb64ce6a,0xbc38d88e,0xbc8d1f0f,0xbc8c1941,0xbc591655,0xbc65b462,0xbc14e3fb,0xbbc86a0f,0x3bab4a54,0x3b247162,0xb8d586a2,0x38bb9a73,0xb9cb7a0d,0xb8d8f117,0xba1c4d5f,0x3a911771,0x3aaad3b4,0x3ba0c61c,0x3c1118ef,0x3c1c5b3c,0x3c3c075a, +0xba434d93,0x3b34514b,0x39f940ac,0xbbb96da0,0xbc27f096,0xbc90f5e4,0xbc8bf2f9,0x3adec3c0,0x3b446a19,0x3bfcc299,0x3c28e1c1,0xbc1ed9c7,0xbc99189b,0xbc6ddfca,0xbc0107bd,0xb9188ddd,0x3beb8b04,0x3bfbba47,0x3ba1494e,0xba0da7e9,0xbb0cd623,0xbb2a0578,0x3a9f39f2,0xba10b66d,0xba6095fb, +0xb96f0628,0x38315905,0x38e40641,0x392caf7c,0x38c86bbe,0xb9a8f486,0xba347f91,0xbb2741b3,0xbac17fe9,0x3beb490b,0xbaa2dde8,0xbada0930,0x3c128615,0x3a5e73e1,0x3a257448,0x3c492100,0x3bb06c72,0x3bf38abf,0x3c2ec2ce,0xbab616ed,0xbbd43dfa,0xbaf2e408,0x3ae87611,0x3bc0ed1f,0x3b3c9ada, +0xba42f0ac,0xbb1be380,0xba10951a,0xba991e95,0xba9affc8,0xba2f3456,0xba4faffa,0xba988332,0xba8229ed,0xb9a35d11,0x394b3289,0x390a87c9,0xb87f74f2,0xb837afbc,0xb9342e93,0x38bb4bd8,0xb9172bb8,0x3a7b725f,0x39cc2c70,0xba29dd35,0xbbca2ced,0xbb38effc,0x3b485961,0x3ca4daae,0xba929f92, +0xbb98d0fd,0xbaba2fa3,0x3be92a90,0x3c502bea,0x3c9c7664,0x3b176f3b,0xbba32834,0xbc281889,0x3bcacf13,0x3c29a3f8,0x3bf56a1b,0xba6a0081,0xbb8df00f,0xbb48d99b,0xbb304350,0x398ce682,0x3b7ff190,0x3b7bdebd,0x3b4df0cb,0xba0854c0,0x39c070b8,0xb8bd9dd4,0x381eb8ef,0x384b4641,0x3899c1a4, +0x38b9d4f2,0x36a6b699,0x37825174,0xba059c6b,0x39bdb02e,0xb98f0a76,0xbc582f6a,0xbc0cc0f0,0xbc46afbe,0x3c13c83f,0xbc321deb,0xbc7d4d54,0xbcb5fe5c,0xbc85a62c,0xbbba8960,0x3c995ac4,0x3c4706e1,0x3c0412d5,0xbb62c904,0xbbcc2d39,0xbbfc9190,0xbbd8de37,0xbb9db8d5,0xbb415711,0x39cc0cb5, +0x3b477ba3,0x3bb05b42,0x3bd86f95,0x3bc0b4ce,0x3b987dea,0x3afc002a,0xba230a74,0xb942026f,0xb8aa9eb8,0xb92cdead,0xb8c84db6,0xb8c5760f,0xb82efe9a,0xb65db28f,0x392300ab,0xb992000c,0xbb867fd4,0xbcc6b29d,0xbcc7f948,0x3cde134a,0x3caca17b,0x3c00e61c,0x3b62b8ac,0x3b78e131,0x3a131235, +0xbb977f6d,0xbc3eccbe,0xbc384b99,0xbc485c38,0xbbd0e372,0xbbc1ec19,0x3806d150,0x3b192a33,0x3b31e332,0x3b573347,0x3b3dfaa6,0x3b725dbe,0x3b903f50,0x3bbe2e09,0x3bf26c3b,0x3c03bd48,0x3bb1de31,0x3b3b6420,0x3a2e42ec,0x39851fa2,0x39a2b0e4,0x393bb4f8,0x393a918b,0x383fe6d6,0x37fe76c4, +0x3980350d,0xb99ab43c,0x3b90a837,0x3c652c8b,0x3cdce301,0x390b36f2,0x3af4e039,0x3b136feb,0xb9dba710,0xbb65367f,0xbbb681f2,0xbbb0d502,0xbb7038c9,0xba65c339,0x39901668,0xba893c5a,0xba98cc6b,0xbaa5e903,0xba865ab9,0xb9c978f9,0xba860356,0xbae88f27,0xbb32fc73,0xbb220554,0xbaed3231, +0xbab0ff28,0x3971a98c,0x3aa5334e,0x3a8dc74d,0x39dc31e1,0xba2128cf,0xba56e5e5,0xb94aade0,0xb9a9352e,0xb81aa79b,0x388bf358,0xba67ccd2,0xbb05cee3,0xbb634343,0xbb8b66ec,0xbb4ff521,0xbb9056e4,0xbba05df1,0xbb8865d7,0xbb725119,0xbb83075e,0xbb834e3f,0xbb5faafc,0xbb4b9bef,0xba7ba251, +0x3a9ab77d,0x3b4e2dee,0x3b90687d,0x3b9dd669,0x3b970a03,0x3b627bf5,0x3af4042a,0x3a0953af,0xb9b645e4,0xba887d7c,0xbac809a3,0xba1ea871,0x3a3b62c4,0x3b35673a,0x3b0bffea,0x3b13afe8,0x3aa63a35,0x3a74e961,0xb7e71ae0,0x38f8e639,0xba1413d4,0xba9fcb64,0xbb293b0a,0xbb11a88a,0xbb01a703, +0xbb09ad2a,0xbb2defc8,0xbad4df67,0xbb51319f,0xbb6c98ee,0xbb5f97c0,0xbb8274f6,0xba951d70,0x3a4234e8,0x3b15a049,0x3b5c9f4c,0x3b7ad828,0x3ba1667e,0x3b85ca44,0x3b8ea29e,0x3b8def84,0x3b71f586,0x3b6511b7,0x3b37b30e,0x3b1b2d5d,0x3b18b4b6,0x3a4a015e,0x3b0a2ec2,0x3b35acb6,0x3b7488d9, +0x3b877e68,0x3ba07861,0x3bb87f1c,0x3ba3a24d,0x3b871c27,0x3b851604,0x3b1c318a,0x3aeed7e0,0x39b4b1df,0xb9becee1,0xba9d5776,0xbb0aff25,0xbb2269b0,0x3bd95167,0x3ba8a682,0x3bae7c97,0x3bc8777b,0x3bd27d28,0x3babf0dd,0x3b8ef780,0x3b7daad9,0x3b5a90cc,0x3b418af1,0x3b23f145,0x3b27412a, +0x3b0e6e51,0x3aec3cfe,0x3ae333b3,0x3adbe8d4,0x3af852d5,0x3ae076ba,0x3add5834,0x3b07127a,0x3b01987f,0x3b530c42,0x3b82cfa8,0x3ba37629,0x3baf2a1b,0x3bc096d0,0x3bc3c9a0,0x3bbaa560,0x3baded79,0x3bbec99f,0x3ba68ff3,0x3bbfa9e1,0x3bc2ac92,0x3bd1b44c,0x3bea6672,0x3bc89664,0x3ac3028d, +0x3ad1d560,0x3ae458db,0x3abd2fd1,0x3ace1e81,0x3af4af92,0x3b1ee578,0x3b376d56,0x3b3b03de,0x3b3de78f,0x3b3b12ae,0x3b346b34,0x3b30da4b,0x3b2f6dc0,0x3b300009,0x3b2ec323,0x3b31b22b,0x3b2ed29e,0x3b25e7bc,0x3b2710dc,0x3b1b343e,0x3b1618ff,0x3b02c65c,0x3b385cd7,0x3b38d240,0x3b335ffd, +0x3b345ace,0x3b2187f9,0x3b21926e,0x3b1725d1,0x3b04754c,0x3addcfa5,0x3ac80528,0x3ac5f475,0x3a9bb522,0x3ab16b97,0x3b78b2f6,0xba99a473,0xba134fd8,0xb9ded972,0xba108196,0xba1a8772,0xba5df4cf,0xb9fd7297,0xba109f66,0xba5dfbe0,0xba6fd1e6,0xba4197d2,0x3800a6cd,0xba33307c,0xba88154d, +0xba9bd992,0xba9c0eb3,0xba84c7a8,0xb9dce6da,0xba1a7a3d,0xba27f904,0xba51ac38,0xba411f15,0xba212528,0xb916be44,0xbaa0761b,0xbaa29bea,0xba035cd1,0xba81d16a,0xba98f4a6,0xba93f985,0xba6073b1,0xba24abeb,0xba779707,0xba131cf4,0xba39325d,0xba39389f,0xba09ad31,0xba16271b,0x38c8d04a, +0xb94827b7,0xb72afb05,0xb9a3e013,0x3aeb5307,0x3aa77ad7,0xb9dc1ce3,0xbab7b08e,0xbab78d2e,0x3a3d9141,0xb9a2c321,0xba29b372,0xba835710,0xbabc4c3f,0xbab70553,0x39b960bf,0xb94c6ddd,0xb9e3a6d8,0xba83a2a7,0xba73e896,0xbaa2fcf8,0xba123c55,0xbb219fbb,0xbb2cf4f0,0xbaa68328,0xbb2243f5, +0xbb1ccd98,0xbad7e5b7,0xba4c9957,0xb9b50579,0xbb0977bc,0xba330972,0xba57ba9e,0xbaf87734,0xbaafed94,0xb9b79b9b,0x3a787ccb,0x39ab1e54,0x39f8adf2,0xba210f04,0x3b0179d4,0x3b14b89f,0xb8f91f4c,0xbacd62b5,0xbaa61d41,0x3b383317,0xb9aa7c3c,0xbadddba6,0xbb2be068,0xbb597b06,0xbb08c2b6, +0x3aa30768,0x394a843d,0xb54479cd,0xba71a9f9,0xba7355a9,0xbada8948,0x398e0d77,0xbb850051,0xbb842caa,0xba94f9ba,0xbb84fc18,0xbb832ed4,0xbb924013,0xbaf9d2b7,0xbac1b4b4,0xbb2a27ce,0xba21fd2e,0xba234822,0xbb156aec,0xba7695d6,0xba08e8db,0x3b0999a8,0x3a5b43a3,0x3afca665,0x3a36f831, +0x3bca7d3c,0x3bcb1149,0x3b109baf,0xbb123c5e,0xbb1e7464,0x3b7cbe38,0x3a37d284,0xb81919e1,0xbaa156a5,0xbb495b2b,0xbb0d8635,0x3b37f59f,0x3ac86d0e,0x39b1ee7f,0xba422e29,0xbaad848a,0xbb332ebb,0xba0eecab,0xbbc858af,0xbb9884c4,0xbab9d0da,0xbb166924,0xba3bb72a,0xba82bae2,0xba248084, +0xba948b53,0xbb46f555,0xb9f79487,0xb9610f25,0xbb83caf1,0xbb1ed356,0xb92c33a1,0x3ab404fc,0x3a738351,0x3938bd9e,0xbb1c6809,0x3b8c5fe8,0x3b79cd7b,0x3b0a0ee0,0xbb00a674,0xba852202,0x3bbf272b,0x3a4b53de,0xbb85eca2,0xbbe85d15,0xbbf0fa02,0xbb7dbdd9,0x3b47526c,0x3b019d3a,0x3ab6b95a, +0xba155d3c,0xbaa39b7e,0xbb1c2945,0xbaa115e4,0xbb54fe08,0xb99861cf,0x395632b3,0x3a424386,0x39d0d4f4,0x3a29a4f1,0x388471ec,0x3a42ca71,0xb9c2df70,0xb9af0846,0x39ae8147,0xbb5aa55a,0xbad807f4,0x3c120d82,0x3c2e6dd1,0x3c995eaf,0x3cb64cdf,0x3cc9dbdf,0x3bef1ddc,0x3b3d92ae,0x3bade60a, +0xbaa537d5,0xbb9f766e,0xbbcac536,0x3b8cbfdc,0x3c880f70,0x3ceb5fd8,0x3c8d09e3,0x3ba3b24f,0xbb63d50b,0xbc3af61f,0xbc52ac54,0xbc161c2b,0xbc231466,0xbb907c3b,0xb9232627,0x3b721ca1,0x3a1fd119,0xb982d879,0xb94adf71,0xb9963404,0xb97cad81,0xb9190ef2,0xb937997b,0xb883c6ca,0x3a1d665d, +0x3b5bb42d,0x3babe9a0,0x3bebd94b,0xb94f9ad2,0x3b4ccffe,0x3aa5594a,0xbb727474,0xbbccce42,0xbc871c9f,0xbc9c2781,0xbb1f8987,0xba70617f,0x3bcebffa,0x3c727f89,0xbb7ae54c,0xbc6ed7b1,0xbc8c7e3e,0xbc22c9a7,0xbb027bcc,0x3b892901,0x3b869e43,0x3ab371c3,0xbb799126,0xbb5abbec,0xbb0a715d, +0x3a0e11fa,0xba87c1d6,0xb9f105eb,0x38d6df94,0x39438661,0x38e9e634,0x39031cb7,0x38713b34,0x387a0730,0x35c5ec58,0xb9eb169b,0x39d22e13,0x3b411002,0xba2d7018,0x3b9de753,0x3c7f331f,0x3c0fa44b,0x3b689f23,0x3b53ba68,0x3bb76eb5,0x3c1550fe,0x3c2319e6,0x3b144dd3,0xbb85ec51,0xbb87679a, +0xb9c0311f,0x3b9cffbd,0x3bf4e8fe,0x3b0bffdc,0xba97ae0c,0x3a6e71b4,0xba1f9fbc,0x390fea63,0x3962ac1f,0x3a075024,0x37db73f9,0x3909df11,0x3882cc5a,0x39aa3f8d,0xb8da110f,0xb83cb7ed,0xb8b74973,0xb84d7d05,0xb80b4a7f,0x376ffd29,0x384c02bf,0x3890ec16,0xb93fb6fc,0xbb6c2bd1,0x399440b1, +0x3c03d7bd,0x3be3d786,0xbb4c2a1f,0xbbc0c222,0xbc2b9ca9,0x3b736369,0x3c1ed055,0x3c50e4b7,0x3c19b75b,0x3ae642fd,0xbc55fcab,0x3afe8f4d,0x3be99955,0x3c494c5d,0x3a50f01f,0xbb44e3b2,0xbb222574,0xbafe7df6,0x3a615430,0x3b99fd0c,0x3b82e8d8,0x3b124dc6,0xb9cd44c9,0x39aae197,0xb9848e62, +0x38bd42f9,0x3728f00a,0x37a6f202,0x37f6943d,0xb7f0022e,0x37b46206,0xb8cbb2e6,0xb84d1517,0x3a319506,0xbc0178dc,0xbb18b2c5,0xbc3883b6,0xbcbba1f0,0xbca9a558,0xbc8eec63,0xbca76491,0xbcba2c86,0xbc8b9202,0x3bc78bf1,0x3c4e76a7,0x3c5fedb1,0xbb1693e2,0xbb743157,0xbc11bf9d,0xbc2fb527, +0xbbf9d084,0xbb9a2bf2,0xbb04a978,0x39f02d30,0x3b0c36c1,0x3b71ac2b,0x3b7e1601,0x3ae8314d,0xba397831,0xb9d28672,0x3885f9a6,0x37302a09,0xb8081734,0x381b2998,0xb7180904,0x38b7cead,0x36b130e2,0x39001506,0x38d8f5dd,0xbafe6d66,0xbc88c26d,0xbc50ac99,0x3ced1b0b,0x3ced904c,0x3b88423d, +0xbb9da952,0xbafbf795,0xbb386b7a,0xbb558647,0xbbfa8f6f,0xbc1c1209,0xbc3eb290,0xbbed27d3,0xbbd4d965,0xba344136,0x3b45be7f,0x3b4e0248,0x3b648931,0x3b814a08,0x3bb94303,0x3be9173d,0x3c05f18a,0x3c1340ae,0x3c013c71,0x3b5b0b34,0x3a8beb61,0xb949e1c3,0x38858ced,0xb7831457,0xb838e3e2, +0xb904477c,0xb6ce429b,0xb9a65095,0x3942cb78,0xba4f3c0c,0x3b8d8afc,0x3c2c05d3,0x3cbf8c94,0x3b51bd41,0x3b356ecf,0x3b34cf9e,0x3af6a0ac,0xba801194,0xbb3b67e7,0xbb84a46f,0xbb7fabf3,0xbb2195b2,0xbb07c9e1,0xbb5fefcb,0xbb957961,0xbbabf86b,0xbbcbab3a,0xbb915c27,0xbb60d796,0xbb2a7b88, +0xbb1652e4,0xbac52656,0xba3d1df6,0x386919d3,0x3aae2f6a,0x3ac6b3ef,0x3a1eb6a4,0xb892abce,0xb81da3c7,0x37b0a519,0x394caa23,0x38f0fa06,0x39890a81,0x39b9b2cc,0x39a8ef05,0xb933e9e6,0xb9f098f3,0xbaae21c6,0x3a2c7814,0xbb541ba6,0xbb29df47,0xbaccdfb7,0xbb0b3b3a,0xbabf5048,0xbb1c872d, +0xbb2bc7b5,0xbb82420e,0xbb4a7491,0xbb021c5a,0xb99c1d73,0x3ad027f7,0x3b3339ba,0x3b4f0633,0x3b1d48d1,0x3acd5723,0x3a612366,0x3a038777,0x39c0be51,0x3902701d,0x3a0f125a,0x3aad170c,0x3b0e8bb3,0x3a83774b,0x3a0d482b,0xb9be2364,0xb99be14e,0xba0a002a,0xb981f839,0xba24b2e0,0xba8fbbd6, +0xbb0901eb,0xbb343f13,0xbb4b10ce,0xbb4736fc,0xbb45f6d6,0xbbaf22e7,0xbbd428dc,0xbbc5ba35,0xbbabb2d2,0xbbb3508b,0xbb721375,0xbb0e27ea,0xba31298a,0x3a943c7a,0x3b0f6941,0x3b5a4f28,0x3b5afcd4,0x3b9137a2,0x3bb161c4,0x3b9c3f4d,0x3b9540d5,0x3b6bb969,0x3b5b3443,0x3b51af7f,0x3b14a435, +0x3b2b39b8,0x3b4bd786,0x3b5c3211,0x3b48a710,0x3b37d180,0x3b26a371,0x3af9e4e2,0x3a43452f,0x3a3e5bed,0xb9e3588a,0xba31051f,0xbac8eebf,0xbb0ecd19,0xbb67587f,0xbb9e068e,0xbbae146a,0x3b6e3567,0x3b16e92a,0x3b2c876c,0x3b643181,0x3b9170fc,0x3b7b9a9d,0x3b7abf66,0x3b5eb29f,0x3b5357cd, +0x3b592912,0x3b679e0f,0x3b85a251,0x3b852ccf,0x3b8caa8e,0x3b8384f4,0x3b82db8b,0x3b93875d,0x3b8e8262,0x3b8c2dce,0x3b95ee8d,0x3b8dcb6c,0x3ba505aa,0x3bb2620d,0x3bc39b9f,0x3bca79b3,0x3bccbc3b,0x3bcab500,0x3bb8f885,0x3ba7a9dc,0x3ba04f5d,0x3b702087,0x3b818665,0x3b5ef8c2,0x3b826f6c, +0x3b94afc0,0x3b544227,0x3ad9a9fb,0x3ac2e37a,0x3ae7f76e,0x3aec8bb0,0x3b044252,0x3b1102a9,0x3b333445,0x3b5381e7,0x3b6d7a48,0x3b7beb93,0x3b8102a7,0x3b82e7f9,0x3b876563,0x3b8e3f9d,0x3b8c1387,0x3b8a6fff,0x3b8902fc,0x3b83fe98,0x3b7f8810,0x3b80ddeb,0x3b6d84c9,0x3b636cc5,0x3b519ded, +0x3b6f94c8,0x3b678ce2,0x3b687373,0x3b689c03,0x3b4fd98e,0x3b4ad163,0x3b472f6f,0x3b38cc22,0x3b25db33,0x3b15f7b3,0x3b0c731a,0x3ad2add8,0x3ad04d38,0x3bc67780,0xbb0437f8,0xba940dc5,0xba8a3362,0xba899b70,0xba895370,0xbabc510d,0xba851443,0xba86ca0c,0xba8eb45f,0xbaad0f20,0xbaaa1b99, +0xba7609d4,0xba8cfbc9,0xbab87c42,0xbae64760,0xbb03734b,0xbafe8c1d,0xbaafd5d9,0xbab29a66,0xbaad3315,0xbac0fdbb,0xbaab44be,0xba95544f,0xba23fb90,0xbae46e75,0xbaf2b921,0xba7ce7eb,0xbace0852,0xbac8a2e4,0xba97812c,0xba92542e,0xba80e5ed,0xba872e55,0xba8fd91d,0xbaa84d71,0xba98463f, +0xba8972d8,0xba6af7a1,0xb9aede7f,0xba035c79,0xba10af19,0xbac82081,0x3a365339,0x3a26ac86,0x37cb41dc,0xbab50f94,0xbaf7b8c2,0xbaa5c426,0xba4cf636,0xba69846a,0xbb001b2a,0xbb535292,0xbb665267,0xbaba6af5,0xbac274b6,0xbac1620d,0xbb152048,0xbafc3b28,0xbb0695ac,0xbaa65e7f,0xbb4170fd, +0xbb2f0a70,0xba85a84c,0xbb4d28f8,0xbb5d46de,0xbafbda89,0xbaa7bfce,0xba04f709,0xba8f5c59,0xba9eca2c,0xbacf9028,0xbb06ec67,0xbae21ef1,0xba43149d,0x383fad26,0x38fec07f,0x38ed055b,0xbaf36217,0x3a7bce24,0x3abf8c3f,0x3a9627b2,0xbabc7212,0xbadbfdfa,0xb9f16643,0x3980a390,0xba9a648d, +0xbb6f9447,0xbbc1dc55,0xbbb09797,0xbaf09ce9,0xbafbf4d8,0xbac5a54d,0xbb2e6826,0xbaf885b4,0xbb10bf7f,0xb92e1a10,0xbb81b07b,0xbb80e167,0xba533903,0xbb6d7970,0xbb366ec4,0xbaf4e383,0xba759a80,0xba706399,0xba0ae837,0xba68c522,0xbaada7cb,0xbb05a837,0xba9ebcb7,0xb9061701,0x3b040634, +0x3a9b7ad8,0x3ad21c8f,0xbad56146,0x3b89d599,0x3bb270c2,0x3b9d30e5,0xba6b5232,0xbb1b31ea,0xbac21d02,0x3a8fea5f,0x3a4c4a21,0xbb14955f,0xbbec7870,0xbbec8b35,0xba952837,0xbaa393ab,0xbac13c17,0xbb5af6bb,0xbb37e00c,0xbb571151,0xba878a05,0xbb9a7b5c,0xbb1b882a,0x39b16597,0xb9338d67, +0x3a3af2f9,0x39145fb9,0x39aad334,0xb8f46184,0xb9201e35,0xb9c5ca59,0xba363d5b,0xbb2d025b,0xbb10a9a6,0xba24a1d2,0x39a6fb07,0x3a7b9b01,0x38cf08e1,0xbb72253a,0x3b177de7,0x3b2edf09,0x3b96519c,0xba553f6d,0xbaea57cb,0x39c381cf,0x3b1ef06e,0xbac76053,0xbc0536fa,0xbc492633,0xbc2647ca, +0xbb308a48,0xbaf17892,0xbabfc5a6,0xbb64df3c,0xbb28da6f,0xbb176cbe,0xba57aef9,0xba83ac09,0x3a842495,0xb873674d,0x38c035e3,0xb92f66a2,0xb9183b27,0xb869ec46,0x384e5c79,0x390067e6,0x38e52db5,0xb89e3c16,0xbae53a1b,0xba661c30,0x3be8eeab,0x3c0b0a6f,0x3c6ee14f,0x3c9b8cc1,0x3cc4678b, +0x3c2a2529,0x3be88f1a,0x3bf93871,0x3ad02023,0xbac66006,0xbb05abc9,0x3b67d61d,0x3c755ba7,0x3cda2504,0x3cc1ad2b,0x3c55517e,0x3b2e1bc6,0xbbbf8436,0xbc1272dd,0xbbd982d2,0xbbd0ec3b,0xba952d04,0x3b1ca3d5,0x39b8d5b5,0xb995ccf2,0xb8c472f6,0xb4dd061f,0x37c67d78,0x38b90c58,0x3618c0cd, +0xb815fcc6,0x37f21ad3,0xb94054ba,0x39b80cb2,0x3ac42a29,0x3b40eaed,0x3a6d7f3f,0x3afbcb28,0x3b580927,0x3a3aeaa6,0xba425fa6,0xbc44c49d,0xbc8b4083,0xbbc0d55f,0xbb20d6ff,0x3bbaf36d,0x3c81b119,0x3b083507,0xbc0a97ba,0xbc8a4616,0xbc432d9f,0xbb96c517,0x39d7b6a7,0x3aa75e47,0xb9571698, +0xbb87fd26,0xbafc8bd9,0xba15ab3a,0xb9388cca,0xb999f143,0x392ece17,0x385d7b67,0xb6025883,0xb7085b6d,0xb8165981,0x3718c314,0xb7ae674c,0x3882651b,0xb7348c83,0xb8bd87c2,0x3aa5714e,0x3ac3ad30,0x3c202661,0x3ca1e9c8,0x3c48b2f2,0x3b8f3eda,0xbb579ef2,0x3bb9c05a,0x3c308382,0x3c25b4c0, +0x3be1b61a,0x383f93c2,0xbbb9f83b,0xbb1f4407,0x3b339ff7,0x3c120691,0x3bb40917,0x3ab4b629,0x3b2bcfc4,0x3a60d6f8,0x3ae0d647,0x3a402618,0x3a75ef4c,0x39c795f9,0x39854cef,0x37f6e2cd,0x37446b88,0xb84a1509,0x3610ae4f,0x3800a84e,0xb79a58bb,0x38518052,0xb8e818d1,0x3967c76b,0xb9c5aaf0, +0x3a21caca,0xbaff0f25,0x3ade4670,0x3c154216,0xbba2f131,0xbb101da1,0xbb606297,0xbc60208b,0x3b80841d,0x3c1ea77d,0x3bc98ef2,0x3c6a3e9d,0x3be2759d,0xbc2b1227,0xbb0f737a,0x3b2d8fda,0x3c5c2f38,0x3b70fbd3,0x39f4858f,0xbab38e1f,0xba337337,0x3a2861c9,0x3b3cfbb0,0x3add2a6b,0x39049bf3, +0x38075f3f,0x36039fab,0xb85dd77c,0x37fda02c,0xb7be8c49,0x3785ebdd,0xb813fbcd,0x38a4d3e0,0xb91b2a2a,0x399520a8,0xba472a47,0x3ac57a56,0xbb455856,0x39ec3cf1,0xbc552cb2,0xbd3c06e3,0xbc9b2e5e,0xbc0d0766,0xbc4579b0,0xbc89b537,0xbc9b1661,0xbc20732b,0x3c1ac256,0x3c851e1f,0x3b80ed5a, +0xb98978f1,0xbc0c9272,0xbc3b3e07,0xbc15d49f,0xbbd1a794,0xbb8b0e6b,0xbb1ae12b,0xbac4a368,0xb923e486,0x3a390cbb,0xba5169b1,0xba5bf8cc,0x399e9568,0xb7f949e0,0x384058c8,0x35feb9d7,0x377e33e3,0xb81c07eb,0x3750f9a8,0xb733c9fd,0x38d3572f,0x3922b982,0x38c76425,0xbbad5911,0xbb3a2c9d, +0x3c9ac9df,0x3cc1f73a,0xba97204e,0xbc278e19,0xbc0083f9,0xbbd7ce1d,0xbb2f6f19,0xbb04e873,0xbbd9a65d,0xbc27e1d2,0xbc05e57c,0xbbcfd11a,0xba98ae69,0x3b1fa929,0x3b355087,0x3b4f2a19,0x3ba0fde8,0x3be0ab5f,0x3c05991f,0x3c095c78,0x3bfc2b44,0x3ba97cba,0x3a845d47,0xb967b24f,0xb81c4332, +0xb8856c24,0xb8543fa1,0x37d3a5e4,0x3796ca6e,0x38bc8714,0xb9198328,0x38aa07eb,0xba2cdc98,0x3a4af4ec,0x3bd039ff,0x3c334aa9,0x3ba0e1b0,0x3b59e981,0x3b84a32a,0x3ba953e9,0x3b0be2d1,0x39463a9c,0xbb2c19da,0xbb8115d2,0xbb80ee5e,0xbb6f92ec,0xbb7f232c,0xbbba2438,0xbbd24e6f,0xbc0896c3, +0xbbc0e6b2,0xbb82a131,0xbb1d1f30,0xbaa6e92a,0xb92fb042,0x3a4ca120,0x3af637cf,0x3b07d875,0x3abefab3,0x39a7c4f2,0x367928d2,0x393f3295,0x38af47ed,0xb82ee926,0xb8cfefb5,0xb8704908,0xb83e03e3,0x39c2d461,0x398edd17,0x3aa531d4,0x3acbb563,0x3b3717f4,0xb96bfe24,0x3a76575f,0x3abf929e, +0xb776b3fb,0x3a4830a7,0xb9bd63b4,0xba859262,0xbb4e3e11,0xbb72cd50,0xbb867134,0xbb5a09c0,0xbaaddb42,0xb797234a,0x3a1e27d7,0x3a34520a,0x3a276efe,0x3a2daaa1,0x3a7e83ea,0x3ac85f86,0x3aed975f,0x3ada5f9e,0x3ac17fef,0x3a87be0d,0x399e05e9,0xb982a221,0xb9677df0,0xb8ae0ff1,0x39327c7f, +0x3968d104,0x398ddc8b,0x39119ec3,0xb9ff3645,0xba89de2b,0xbaf816ff,0xbb169bad,0xbaac27ba,0xbbc92ccc,0xbbda57e9,0xbbc04abc,0xbb9a3553,0xbb96c181,0xbb78a3c3,0xbb31c9fa,0xbaadecdc,0x39964b14,0x3ab16147,0x3b08b1a1,0x3b0bdc06,0x3b4ed5c1,0x3b8e6187,0x3b80c5be,0x3b79b8a4,0x3b5044dd, +0x3b5898c8,0x3b445de5,0x3b5535f6,0x3b29fed8,0x3b2087f5,0x3aebc3cb,0x3a94b5f3,0x39dd5509,0xb8902c65,0xba0b523a,0xba94db16,0xba90bf73,0xbae0a997,0xbaff9c54,0xbb0fb4b3,0xbb39a579,0xbb7f7dd9,0xbb96b5df,0xbbb0c819,0x3a4e4e6b,0xb9197e92,0x39c61c0b,0x3a8c06b8,0x3b12e5d3,0x3b1021fe, +0x3b321817,0x3b21a115,0x3b276ad5,0x3b42d152,0x3b7038e3,0x3b973b61,0x3ba6d438,0x3bbc0e3e,0x3bb20f95,0x3baef1ff,0x3bbd9e83,0x3bb91d43,0x3bb477ed,0x3bb76b66,0x3bb43693,0x3bafcd1b,0x3bab5e5a,0x3ba2df40,0x3b9c140a,0x3b8a16e4,0x3b83e4c0,0x3b4ef5fa,0x3b33497c,0x3b11a464,0x3aaace24, +0x3aa58028,0x3a198ef2,0x3a87e277,0x3a98b55e,0x393e43dc,0x3ae07235,0x3a919627,0x3abdba4e,0x3ae205c0,0x3b01a6d9,0x3b09e3c6,0x3b25fd38,0x3b474a4f,0x3b686e6d,0x3b796043,0x3b801408,0x3b81f78f,0x3b860e34,0x3b8eff6d,0x3b8ac399,0x3b89c2a4,0x3b874288,0x3b8192a1,0x3b7ecb1c,0x3b7d1e3d, +0x3b7b9f76,0x3b7ef70d,0x3b81b811,0x3b6afd52,0x3b6e1d9d,0x3b7e0ad4,0x3b808725,0x3b6ef30c,0x3b68a26f,0x3b643e8f,0x3b53866a,0x3b40cf23,0x3b254168,0x3b12981e,0x3b167740,0x3b0041da,0x3bd04d38,0xbb196d61,0xbabb6bdf,0xbab62bac,0xbaa479ec,0xba9e1937,0xbad35e9a,0xbaa08787,0xba990eb4, +0xba79b21d,0xbab12b00,0xbac3e26d,0xbad228fb,0xba9c9769,0xbab846a9,0xbaf0ef05,0xbb0eab6e,0xbb133c47,0xbaf7d696,0xbae32334,0xbad2e7d2,0xbadba106,0xbac71aec,0xbab3ac1a,0xba980465,0xbaf4f8b0,0xbaff09c5,0xba9dbbd5,0xbada4ed9,0xbaceff82,0xba99ad35,0xbaa4ead3,0xba95fb63,0xba7cb9ad, +0xbab77a3c,0xbacc3689,0xbac15f47,0xbab4508f,0xba9bf225,0xba44e576,0xba3c8037,0xba6bace3,0xbb0f1b00,0xb9b4f485,0x381e4921,0x3a2ee105,0xba901ade,0xbb03819d,0xbb35f1ea,0xba880fd5,0xba5b9208,0xbb12930e,0xbb6e136c,0xbb89643d,0xbb2ed657,0xbb1171aa,0xbb02870d,0xbb312cb0,0xbb1b9c58, +0xbb1f182b,0xbae14ca1,0xbb29311d,0xbb1caf21,0xbabe6570,0xbb552a9f,0xbb631bc5,0xbae89bd9,0xbab24a99,0xba2f47c9,0xb99b74be,0xbaba1d35,0xbaed9429,0xbb01e304,0xbaf64a9c,0xba98fc29,0xba7cef69,0xb91777e9,0xb96dbb65,0xbb1dfc14,0x383b4591,0x3a309f2a,0x3b2776e7,0xba7a47f0,0xbae4df57, +0xbb5a739c,0x39f4f37d,0xb9eef78c,0xbb6a092e,0xbbcb2e85,0xbbd3ba26,0xbb8c03a1,0xbb544874,0xbb196f10,0xbb59b2bd,0xbb1362d0,0xbb0284f1,0xba14bd04,0xbb5e7827,0xbb375577,0xb997eff1,0xbabd1152,0xb9dc8b09,0xb987a11d,0xb72ef5e5,0xb993b548,0x3a01f611,0xba4eb0e0,0xbae14049,0xbacbff94, +0xbaa730e6,0xb8ab098a,0x3a8d3d8c,0x3a88b64c,0x3a7055c1,0xbb4bb13d,0x3aee8c3a,0x3b7a62b9,0x3bdef580,0x399d5bc0,0xbb0ec580,0xbbc3e384,0x3a703f5c,0x3ab2b7a1,0xbb237252,0xbc025c7d,0xbc114309,0xbb90b783,0xbb5066f6,0xbb20e3a3,0xbb914fb7,0xbb53f522,0xbb472362,0xbae4330e,0xbaded153, +0x39a4ae22,0x39e784c3,0x397f4415,0x39c0cb59,0x391337b3,0x3886ed80,0xb8124125,0x36880010,0x382e986b,0xba07146b,0xbaec31ef,0xbae5e0ac,0xbaac6754,0xba94f24b,0x3a0ab7a5,0xb8901768,0xbb7c29ea,0x39bd0dd0,0x3ae1f259,0x3bdc4503,0x39e2cafe,0xbb17ec77,0xbb9aa0d1,0x3b297e85,0x3a3292a7, +0xbbe77898,0xbc4cfc15,0xbc4a5da8,0xbbf77dfa,0xbb9698c5,0xbb553ee8,0xbb963fb6,0xbb3d79eb,0xbacfd8a5,0xb81e1821,0x3964809d,0x395c492d,0xb9b6a345,0xb885673c,0xb979afb5,0xb6897629,0xb896838a,0x38084ca9,0xb8130614,0xb7a3754c,0x39afebd2,0xba445db1,0xb9f40e65,0x3bb38489,0x3bef89e6, +0x3c0bfabd,0x3c4adf5e,0x3ca3c9b4,0x3c38a11d,0x3c12a9c8,0x3bead2f9,0x3b95a681,0x3b3f15c1,0x3b070bad,0x3b524cad,0x3c385167,0x3ca26604,0x3cc9cf78,0x3c90e590,0x3bf153cd,0xb945472f,0xbb971381,0xbb8f70dc,0xbb5e08c0,0x3a3df5a6,0x3a6703fb,0xb9dd5586,0x3783ec40,0x38b6e5c3,0x3899e3ba, +0x38beac90,0x37589496,0x3831aac6,0xb7378ff7,0x363da8ec,0xb76d8301,0xb8bc8085,0x3927563c,0x3a315b07,0x3a8b2378,0xb9b737c1,0x3b8be6c5,0x3b9e6e8c,0x3b8af002,0xbbc31eca,0xbc38bd50,0xbbda72c8,0xbb18a1c6,0x3b903d89,0x3c4b9b4e,0x3bbec140,0xbb0a2784,0xbc4db8e4,0xbc4ab4f7,0xbc01023c, +0xbb900cf1,0xbae50f2d,0xba936408,0xbb130d69,0x38a69977,0x39233ade,0xb9c643ae,0x3909689e,0x37f53090,0xb865d37b,0xb876d533,0xb807556e,0xb77d0545,0xb600e4d4,0x3636180d,0xb70f2bbd,0x3818ba46,0x38205ff7,0xb995e6de,0x3b15652f,0x3c2c7bc4,0x3c9b4fef,0x3c343b45,0x3b5343cd,0xbbbbc308, +0x3b6c83da,0x3c0cf702,0x3bffa7d1,0x3c099646,0x3b467c10,0xbbc17738,0xbb664d69,0x39c261d3,0x3bd8fd4a,0x3bf1c1ad,0x3b721113,0x3b91b465,0x3b1fc103,0x3b4a9187,0x3a9bdcf2,0x3a3b23ec,0x38ec24d3,0x3895f874,0xb3da9dc9,0xb815f594,0x37e944b7,0x37b18276,0x3756f070,0x3661e91a,0xb6db2932, +0xb6ffa0c5,0x3825a8ff,0xb9455c8b,0x39d2d82b,0xba37ee52,0x3abc1f52,0x3bb490f9,0xbc0fc65d,0xbaa661b8,0xbaa93b70,0xbc3deae9,0x3b4c6575,0x3bff060e,0x3a45c987,0x3c47b214,0x3be34ac9,0xbba19f88,0xbb9d20d7,0xbac24480,0x3c1db729,0x3bb92aab,0x3b91f903,0x3a42562a,0x3a8b32b7,0x3a112ed4, +0x3919e675,0xba671799,0xba39af9d,0x39839846,0xb92ca66c,0x38b80e2e,0xb7caa6b3,0x36e55684,0x375a74df,0x37003f8e,0x380a64c7,0xb75166a3,0x38fdfeeb,0xb947cf26,0x38f8642c,0xb98836cf,0x39701f8a,0xbc62aa91,0xbd37eaaf,0xbc4825f2,0xba28726f,0xbb4063f8,0xbbe21bf2,0xbc6005d7,0xbc941a95, +0x3b036265,0x3c3e73af,0x3c2a0f63,0x3b136a38,0xbbdc28be,0xbc19271e,0xbc1942e0,0xbbf9b893,0xbbc70045,0xbb953e1c,0xbb864872,0xbb492d49,0xbace5e2a,0xbab0268b,0x39659237,0x361dd7fc,0x36871dfe,0xb8176704,0xb7b083b1,0xb84d3abe,0xb79e8665,0xb879d3a8,0xb74c7948,0xb8e8bba4,0x38d8ebff, +0xb7a318c4,0x3896540b,0xb8df6473,0x3b1eebb6,0x3b7760b1,0xbb634f1a,0xbc02b131,0xbc18230f,0xbbda4c29,0xbb05a5dc,0x3a7238a7,0xbb7f3035,0xbc02552d,0xbc0ae6f7,0xbbc0efb5,0xbb0abb32,0x39a226cd,0x3ae06c04,0x3b1b61c3,0x3ba4ce45,0x3bd59632,0x3be97e77,0x3bded4f1,0x3b99a60b,0x3b1775db, +0xb9db06f1,0xb892b41b,0xb784db27,0x3893298b,0x38b19d5f,0x3875cb3e,0x390bda1d,0x377d2f82,0x394a0206,0xb8f8af5d,0x39e07042,0xbaa497b8,0x3aeeb91a,0xb761b710,0x3b8c3e89,0x3b61086e,0x3b91fb29,0x3bce31d1,0x3b547b31,0x3ab13873,0xbb00a903,0xbb634e70,0xbb992489,0xbb9128ec,0xbb73a3a1, +0xbbb43457,0xbbb8e7d3,0xbbf2956c,0xbb9dbc97,0xbb3e1e6f,0xbaf027b7,0xb86b5395,0x3a9fea3c,0x3b1d4c43,0x3b3d380b,0x3b048c29,0x3a2ab5e5,0x3885e5a2,0x3865a1b7,0xb91caec4,0xb951fea2,0xb91739f6,0xb940e41a,0xb96663f5,0xb8e70c50,0xb97a18c9,0x36185e3f,0x3902935e,0x3b057766,0x3b2efd02, +0x3ae84421,0x3b3248e1,0x3b2f6bdc,0x3a6f3906,0x3a5d5ef6,0x38e9c19f,0xb9f3c6f0,0xbb0c32f9,0xbb5ce045,0xbb9d403e,0xbba536c9,0xbb684c20,0xbb2e4e8e,0xbb0c0425,0xba978c7d,0xba3afdc1,0xb9be0c24,0x39a47f00,0x3aa8b6c7,0x3afa30b2,0x3ab130b6,0x3a2b8e4d,0xb8111270,0xb944814a,0xb8834f1f, +0x39aa6a71,0x39acfc47,0x39d31925,0x39be1186,0x39d52838,0x39bdd975,0x39d10e08,0x3918e746,0xb9b90a54,0xba7de5f6,0xb91c3e26,0xbba8fe6e,0xbba876dd,0xbb9262f4,0xbb632d04,0xbb508ec1,0xbb445099,0xbb24516d,0xbad66e2e,0xba0a15ca,0x39deec6e,0x3a76658e,0x39a7aeed,0x3a12cb78,0x3a893ba3, +0x3a697fc4,0x3a5f1cad,0x3a7903a2,0x3ab0cd27,0x3a42c108,0x3b000f98,0x3a857935,0x3a40342c,0x37c86934,0xba24b618,0xba77560f,0xba5a42de,0xba6603a8,0xba3e1cb9,0xba3205bd,0xba659c21,0xba9ba818,0xbaad36f2,0xbb0c333a,0xbb520279,0xbb580586,0xbb7e8ce8,0xbab11338,0xbab1666a,0xba8dea8e, +0xba3720a5,0x38e02251,0x39386e63,0x3a4a9d68,0x3a28d821,0x3a30a71c,0x3a683fc0,0x3abf7734,0x3b223809,0x3b590a8f,0x3b82ebb4,0x3b890aed,0x3b8a2f42,0x3b927354,0x3b9731d7,0x3b9dea31,0x3b9b229e,0x3b950049,0x3b706677,0x3b4f16ae,0x3b2a1b10,0x3b048937,0x3a894236,0x3a42062a,0xb92269de, +0xb9a4d0ec,0xba64f73a,0xba9ed54b,0xbabf0b0d,0xbad8e33e,0xba8a40b3,0xbac20026,0xbaeda0a2,0x3a00137a,0xb855c1ed,0x391cc785,0x39fdb825,0x3a3c7ec6,0x3a4a7dc5,0x3a84b766,0x3aafbbec,0x3aea7044,0x3b06b829,0x3b0ca667,0x3b09cf43,0x3b0620dc,0x3b0d7ae9,0x3b04a309,0x3b05c5c8,0x3b03099f, +0x3af8aac1,0x3af95cb5,0x3af993a8,0x3b08a192,0x3b17492a,0x3b2ab879,0x3ae6b300,0x3b017547,0x3b1bc8fd,0x3b213d70,0x3b149876,0x3b0cbc47,0x3b072f84,0x3aed1ab7,0x3ad1946e,0x3a90f342,0x3a50e6a5,0x3a9d43ae,0x3a4b2bdd,0x3b619fcd,0xbb03af06,0xbaa730c7,0xbaae601e,0xba94b768,0xba8afe2b, +0xbaaeae4c,0xba8ee998,0xba847154,0xba30e8ea,0xba92eec5,0xbaaf843d,0xbadd1241,0xba8c2ed8,0xba956c99,0xbac45fef,0xbae5f006,0xbaf87b4a,0xbaf313ea,0xbad3c995,0xbabf6747,0xbab83bbf,0xbaa41e17,0xba9e59ca,0xbaa29821,0xbab87dd6,0xbac23489,0xba9b10cd,0xbace2937,0xbac900f5,0xba90ef75, +0xba979eb0,0xba819a1f,0xba2ae275,0xba9aaa4f,0xbaa63d5e,0xbaae8626,0xbaa6a7c4,0xba9e8bf1,0xba870907,0xba4e3db7,0xba734e3e,0xbafc4004,0xba73f87b,0xb9dec66d,0x3a59a5f8,0xba65b10a,0xbaefd142,0xbb4e26de,0xba9fff3e,0xba52fe0f,0xbaf7dd95,0xbb326033,0xbb5b6dcc,0xbb3a782f,0xbb11a712, +0xbaf608f8,0xbb0c9fad,0xbafa2796,0xbaecd4d6,0xbac4dae9,0xbb05bb1c,0xbaf13329,0xbaa37c76,0xbafb544d,0xbaed1c04,0xba43789f,0xba4a638c,0xb998d701,0x3983c6d6,0xba9b28ad,0xbadaa62c,0xbabf20c8,0xbac86ef2,0xba96facb,0xbad16a8a,0xb9d3c25f,0xb9ddcb26,0xbaf65ce3,0xb9f4bd42,0x36cb929d, +0x3b3220c9,0xba426cf6,0xbadf5ae7,0xbb918301,0x36117dc7,0xb97284d8,0xbb31d14d,0xbb940f01,0xbba956f5,0xbba0b857,0xbb5ed8eb,0xbb1dc07a,0xbb319c5a,0xbad0d633,0xba96e1cc,0xba8ef144,0xbabddb71,0xb9829a76,0x3984318f,0x39b08800,0x39d0f219,0x3977f493,0x3930f100,0x3500969c,0x39500d37, +0xb751e314,0xba801d25,0xba9edecb,0xba81147d,0xb988368e,0xb9bb1aed,0x3a07ca50,0x39711d07,0xbb2ecf27,0x3798ffae,0x3adf78ae,0x3bcd3375,0x39bb5811,0xbb0d4635,0xbbf2ec1a,0xb98ff306,0x3a60bedf,0xbb0b07a7,0xbbb6806c,0xbbe060ff,0xbbb22b17,0xbb73fe70,0xbb23c6e8,0xbb65d71e,0xbb112c5a, +0xbaf67ce8,0xba1ab523,0x39efee92,0x3948da18,0xb8a5ba46,0xb8b3ed57,0xb904bd60,0xb9048cc1,0xb804314a,0xb4e9203c,0xb8be0e18,0x38606072,0x39505948,0xba1a42a9,0xbaab0031,0xbabe41c8,0xbb128ccf,0xb8f6ba52,0xb930251a,0xbb1ab1ba,0xba28b697,0x3a6da423,0x3bcc262d,0x39ee6227,0xbb306aac, +0xbbe3b26c,0x3a9560f8,0x3a99b8f0,0xbb9f7724,0xbc10437a,0xbc235f58,0xbc1487a1,0xbbb4f407,0xbb77202b,0xbb72d00a,0xbb0664ac,0xb9d5bbe7,0x39d84f6b,0xb93f6fe4,0xb901a048,0x37e1a59a,0x384e5159,0x3893e33e,0x37f6fa38,0x382b27d7,0xb71c9a39,0x389b5efe,0xb88bcf12,0x38050908,0x39184b45, +0xb87c20e7,0x3b69a10d,0x3bb77819,0x3b49e603,0x3bb2f346,0x3c541149,0x3c0c9a12,0x3be26bf2,0x3b5398c6,0x3bb319d0,0x3bafd370,0x3b39f5d7,0x3ae190cb,0x3bb4faa0,0x3c3119df,0x3c97495e,0x3c808d05,0x3c13d22e,0x3b7f037e,0xb9ab1e32,0xbae0f75b,0xba049c06,0x3a209c0d,0xb98c42a0,0x38db602d, +0x38a4138c,0xb7515314,0xb7fb36b2,0xb8192a10,0xb774afc3,0xb7bf0fb9,0xb697a2ab,0xb71b65b1,0x3704dc86,0xb7e51728,0x36c05864,0xb9624837,0x39e56ae6,0xbb055676,0x3b510565,0x3bc1cede,0x3bda8b6f,0xba70c86d,0xbba1edf8,0xbbad5487,0xbad59596,0x3b1ebbab,0x3be7f99c,0x3bd23c82,0x3afcc91e, +0xbbe10bdb,0xbc2d40dd,0xbc1e71b9,0xbc0256f4,0xbb92f150,0xbb23c76c,0xba4cdfd8,0x3a1d1e5f,0xb83c61dc,0xb889150f,0x383a4839,0xb8bce235,0x37e4a57c,0x37657a96,0x37b292b0,0x372f440c,0x37059fb6,0xb7173476,0x383be411,0xb88bc8f6,0x3914f7b8,0xb97391fd,0x3a031a49,0x3bf334af,0x3c5d142a, +0x3bfc655c,0x3b0a1f40,0xbba26416,0x3a86ec51,0x3b8efde4,0x3ba332f6,0x3be6310d,0x3b8b83a9,0xbb7b2953,0xbb3dcde1,0xba91e33e,0x3b4b8619,0x3bd50c17,0x3b85e505,0x3baf0f9b,0x3b3ab4c0,0x3b4c9890,0x3a95721d,0x397d63b4,0x37b58255,0x38374e00,0xb6a56eaf,0x380bb535,0xb7004b49,0xb7228339, +0xb6c5505a,0xb747dd0f,0x372dd25f,0xb7baf110,0x377d64ad,0x362adf26,0xb84c4fee,0x391da7c6,0xba108e48,0x3aafa277,0xbbce7b55,0xbabc7de9,0xba3c18fb,0xbbd48be3,0x3aabd1c7,0x3b93342d,0x3986b16e,0x3be80c26,0x3b9a1a9c,0x39a1300f,0xbb7caa89,0xbb272ce3,0x3b925ef6,0x3bb9706e,0x3bd7344e, +0x3b447942,0x3b23114e,0x3a793450,0xbab156fd,0xbabd93d2,0xb83cb7db,0x38562555,0xb8465352,0x3805c1a1,0xb7861926,0x37951719,0xb6e352f3,0x35878160,0x35abfe9b,0xb62d8958,0x36abdc0c,0x3680251a,0x38906777,0xb8abb919,0xb90461eb,0xbc24da68,0xbcdec61d,0xbbf35f8a,0x3972939f,0x3b7d0432, +0x39709c98,0xbbc2e845,0xbc6b3596,0xbb6eeb8d,0x3b919397,0x3c4f56bd,0x3b94eccc,0xbb1abf3e,0xbbbbeb19,0xbbe2d94b,0xbbd1d954,0xbbcd5959,0xbb992992,0xbb8d2132,0xbb6e3aaa,0xbad6b851,0xb962b8dd,0x3940a1f9,0xb8aca9e6,0x37a9a6fc,0xb7c1b8dc,0xb554a12e,0x369113f3,0x36e195ba,0x3614d3a7, +0x366814b6,0xb5ed5390,0xb8152fc8,0x383ee05c,0xb980d58a,0x3aafe63d,0xbbd08fde,0xbc4d870a,0x3a6d10c2,0x3aee9018,0xbb3f01f4,0xba779382,0x3a82ac30,0x3af62c47,0xbaa6dbb1,0xbb9866cc,0xbbcd031b,0xbb94e632,0xbb22f978,0xba98faad,0x3a812d22,0x3ad15b45,0x3b8394d2,0x3b9b0141,0x3ba30936, +0x3b9e418a,0x3b216ba6,0x39cf0161,0xb976a6bb,0x39076522,0xb79bc757,0x383196c0,0xb69d3c23,0xb6a4294b,0xb78befad,0xb7bef89c,0x37620243,0xb803cd23,0x38e5df36,0xb8b3c100,0x39b2f6e5,0xbaf60019,0x3b5f6099,0x3b33ea1e,0x3b4c663b,0x3b8c049b,0x3b392c7a,0x3aaee671,0xba9d6d69,0xbb0674b2, +0xbb6af6d6,0xbb63c7b5,0xbb2168db,0xbb821893,0xbb7197d1,0xbb94ba9d,0xbb227e8c,0xba82b431,0xba3c5504,0x3aa1d4ee,0x3b16c580,0x3b4feab0,0x3b53987a,0x3aa17485,0xb93947f1,0x385fe5e5,0xb8bdfc3e,0xb598bf89,0xb7a8cb63,0x37814058,0x38385103,0x375f9c1d,0x3827bc97,0xb89510cc,0x374ac35f, +0xb946396b,0x3929e6c1,0x3ac60d05,0x3b261103,0x3b4b6253,0x3b2d3a5c,0x3aa47b9b,0x39e54687,0x38cbba83,0xb8ee8db6,0xba4af23c,0xbb02ac15,0xbb6b316a,0xbb934f43,0xbb7421b2,0xbb59a0be,0xbb3774ab,0xbad1f8d2,0xba810042,0xba2b864e,0xb84e325b,0x3a50f6bb,0x3aabdf86,0x3a1f92c4,0x38e3c1b0, +0xb817d6dd,0x3917ea22,0x3907f033,0x3881c969,0x35d27683,0xb80b68ff,0xb8d42796,0xb864d087,0xb8074461,0x37cfd85d,0x39479cfc,0x38f5acd8,0x390ec241,0x3a8a0433,0xbb38ea88,0xbb1729c6,0xbb0266df,0xbac5cd09,0xbab4519e,0xbab9fd97,0xbabf0bf3,0xba9e03ed,0xba3805c2,0xb872aa05,0x39850498, +0xba1c3dd9,0xba7155cb,0xba953414,0xba9bd958,0xbaa5c793,0xba513edb,0xb9d1cab5,0xba9abb31,0x393f93db,0xb9a0e6bc,0xb9e8f7d5,0xba308da4,0xba2b0c9c,0xb95b4334,0xb7324352,0x3891979e,0x391fbe2e,0x3987dfe1,0x39839cb9,0x392ab050,0x3939b159,0xb96d271b,0xba91eced,0xbaa0830b,0xbae270d5, +0xbabd03e7,0xba8bfc83,0xba963887,0xba848cc1,0xba364227,0xba28a894,0xb962db99,0xb954fc5e,0xb9a8dc02,0xb9ed6695,0xb990a25a,0x39be4e3b,0x3a8eb2c8,0x3ac6dff8,0x3b085e44,0x3b15328e,0x3b1c058a,0x3b329481,0x3b514ff3,0x3b47ede5,0x3b379283,0x3ae7728e,0x3a9120de,0x39cfd229,0xb952b0ec, +0xba12c324,0xba2b6764,0xba7c7f3c,0xba8a5c53,0xbabcd820,0xbaa8de5b,0xbafafd67,0xbb04bc60,0xbad988ae,0xbaff8793,0xbad69a29,0xb9e52ac5,0xba2eba34,0xba17215c,0xb9b10ddf,0xb94e9938,0xb94c3031,0xb91d9e3e,0xb8474829,0x39701c14,0x39ee2c65,0x3a0c9ea8,0x39ea1d3a,0x3991564a,0x395869c8, +0x38c71e8d,0x38f29471,0x38cbe5b1,0x388e4913,0x38e18734,0x391483ac,0x39d31550,0x3a2927ea,0x3a7b640c,0x39d43637,0x3a104e73,0x3a1e3279,0x3a03ad34,0x39cff1a4,0x39866a88,0x390a2419,0x38534e33,0x37c8479e,0xb848e895,0xb93650d1,0x36f3387f,0xb9a16b18,0x3a40c77c,0xbaccdcbc,0xba7ef5be, +0xba8ae340,0xba6d71aa,0xba5c5566,0xba74064f,0xba616fae,0xba554110,0xba10d71f,0xba6aafa5,0xba8c67d9,0xbab15991,0xba6a6270,0xba69d2d0,0xba909911,0xba9e03be,0xbaae2be7,0xbabdd7fb,0xbaa62857,0xba9520b6,0xba849676,0xba6d857b,0xba67811a,0xba8f1d8a,0xba7a4cf2,0xba87f276,0xba85f2e9, +0xba99f160,0xba928650,0xba58a920,0xba564181,0xba33e975,0xb9d3972c,0xba68c244,0xba76d6be,0xba850301,0xba803913,0xba959e08,0xba9f5b6a,0xba6280e0,0xba651339,0xbaa76ba8,0xba8d5dcc,0xba467a01,0x39a7d222,0xba67e405,0xbace647d,0xbb26c09d,0xbaaef69d,0xba774091,0xbabd187f,0xbad0880e, +0xbb079ed4,0xbb131652,0xbaec8aef,0xbabf8800,0xbaad963f,0xba883927,0xba7b81a1,0xbaa719ee,0xba879401,0xba0640da,0xb9771f92,0xb9b43fcc,0xb98b0690,0xb89791c3,0xb93f6c99,0xb8dae757,0x39076f43,0xb9eb2086,0xba839892,0xba9278fb,0xba8dcbc7,0xba67d238,0xbad9d5d5,0xba297f6d,0xba129c2e, +0xba806bd6,0xba28bbdf,0xb9f9f209,0x3acd60b3,0xba6ad189,0xbad31dc0,0xbb6f9691,0xba3bd21d,0xba163c3e,0xbaf1eecd,0xbb24e9ec,0xbb48829e,0xbb7d18da,0xbb316e0b,0xbb02e92b,0xbad29166,0xba283af4,0xba0c69cb,0xb9a00e04,0x3955e71c,0x392059df,0x38daa721,0x39046438,0x38e96772,0x3823c66c, +0x3873091f,0x382dd90a,0xb867c8df,0x393e7198,0x38f69fa4,0xb9afb1c1,0xba193a2d,0xba2533ed,0xbacb1b35,0xb97e7023,0xb9c9982a,0xbaade084,0xba505548,0xb80121d7,0x3b6f0433,0xb9ce0062,0xbb0d07ba,0xbbbdf671,0xbac5616e,0xb9a3d5d9,0xbada3edb,0xbb2e858f,0xbb71cd4c,0xbb8d893e,0xbb4b5e76, +0xbb02421b,0xbae135b2,0xba583801,0xb965d8d1,0x395350fb,0xb8411e69,0xb89db8ae,0xb8a4b860,0xb7f9533b,0xb86890e0,0xb75b8501,0xb8120c1e,0xb78ae84a,0x361d3c7d,0xb8867c3c,0x34a225ab,0x393348bb,0xb9d9a0c8,0xba213fde,0xbb2202e4,0xba254545,0xb9a198af,0xba1f39cc,0xba47a8c5,0x39470f6a, +0x3b6a4c4e,0xb9e0cd14,0xbb2f72d0,0xbbbe7406,0xba104c75,0x396a9149,0xbb3c58fe,0xbb92077b,0xbbbb6dd1,0xbbea6433,0xbb990a5d,0xbb591432,0xbb051e12,0xba2d688d,0x38cc4bdc,0xb89185e7,0xb747ebf7,0x3865a6c9,0x37da0354,0x375505d0,0x3787f9ab,0x38002013,0x36cfbe56,0x37aece0e,0xb7bce8be, +0x38601e7a,0xb8563ac6,0xb81b3795,0x3988fdb4,0x3aa04e60,0x3b4f1520,0xb7449928,0x3a86b63a,0x3bb77612,0x3b8ccb1a,0x3b56fd7a,0xba342f24,0x3b93855f,0x3bae9db0,0x3aec2591,0x38c15e0a,0x3a75e340,0x3b832f93,0x3c1ff433,0x3c20eb2a,0x3c051939,0x3bb49af5,0x3b20a27e,0x3a6148ea,0x39d59a2f, +0xb89cda25,0x38368b12,0xb6b5fa1a,0xb802bf87,0xb79548c2,0xb6262603,0xb6d7af48,0xb7385be8,0xb6524736,0x350e4ab0,0xb772b206,0x36d009a1,0xb78af7c3,0x38c61929,0xb9c19e9d,0xb9a347c5,0xbaa5710a,0x3ae85e90,0x3b984905,0x3bc5c30d,0x3af7ca22,0xb9c7b734,0xbb56ce39,0xba885afa,0x3a4e5800, +0x3b4fc65a,0x3bae870b,0x3b65ba6d,0xbb1796bf,0xbbd2c748,0xbbfe2c63,0xbc05739c,0xbbb12187,0xbb67aeaa,0xba807e7a,0x38623080,0xb8d56c97,0x3833b465,0xb7e5a4e1,0x3814ba77,0xb5a5ae89,0x37380d0c,0xb5196e83,0x37159951,0xb6bd8c23,0x3791fc94,0xb7f910f0,0x3882d03a,0xb8b03a09,0x38d6f4dc, +0xb80f2b9a,0x3b07eefb,0x3be98dd3,0x3b7b83b4,0x3a9f0e83,0xbb622dc2,0xba8625d7,0x39965068,0x3b074d46,0x3b81ff1a,0x3b5d7da3,0xbaa64a50,0xbaf389ff,0xbadf45f9,0x3a0af286,0x3b6d121f,0x3b2c8e7f,0x3b91300e,0x3b0d481c,0x3b11e471,0x3a1c584c,0xb6cda753,0x36e6f5ae,0xb79264c9,0xb5675179, +0xb72b89a3,0xb59b7830,0x35f69e22,0xb6f559d0,0x36f3f176,0xb78500da,0x3818ea77,0xb89d2ff3,0x39173770,0xb98c387c,0x3a03749d,0xba8025a8,0x39133972,0xbb68de78,0xbaf1e96f,0xba82df81,0xbaebdf66,0xba8a327c,0x39df4e9b,0x3a361b32,0x3b1930b6,0x3afa094c,0x3ae78786,0xbb06716b,0xbafeb209, +0x3a541465,0x3b6241c0,0x3babc213,0x3b768475,0x3b36ecb2,0x3abffa1a,0xba89ee9e,0xb99f983f,0x38c1eca3,0xb855b5b2,0x380abd64,0xb79a9a68,0x374d3ff9,0xb703e5f2,0x35e8bc95,0x33cca568,0xb68556f0,0x360f70b7,0xb6a24eb0,0xb4d2d06b,0xb72efabd,0x3807117c,0xb94b67a5,0xbb205a34,0xbc35138e, +0xbb97ccb6,0xbaea54c1,0x3be425d1,0x3b063426,0xbad2caab,0xbbe445ad,0xbbb09427,0xba8da4d6,0x3c0b74f4,0x3ba484b4,0x3accdeb3,0xbb1d4708,0xbb665477,0xbb7de044,0xbb9c0ddf,0xbb53bb02,0xbb399cdf,0xbb1920e4,0xb95f07bb,0x391a0ff8,0xb89af31c,0x37ca457f,0xb7294efa,0x374a5366,0x360b3c4e, +0x36ef9d68,0xb666c5ab,0x37a45920,0xb79afb76,0x385303c9,0xb8b8601c,0x392110a4,0xb9e43a92,0x3a998530,0xbb711d82,0xbc49f543,0x3bc2dd49,0x3c0e679e,0x3b91f93c,0x3b9ab04a,0x3b8ad85d,0x3b27a1ea,0x39677672,0xbb116932,0xbb717d7e,0xbb6f9220,0xbb3a040a,0xbb0595fd,0xb8d25b0a,0x39e1a6a5, +0x3b073a36,0x3b1eba32,0x3b2cde7a,0x3b45e226,0x3a268905,0xb9a4649e,0x38d8c2c1,0xb80068f6,0x36beeeca,0xb7b7254d,0xb6efc34d,0xb6b3121d,0xb785e7ac,0x35bc96ba,0xb80cdcb2,0x372d5ae5,0xb883a67c,0x38ce24f5,0xb96889a3,0x3a6a82f5,0x3b08c3fa,0x3aa804a4,0x39926797,0x39931456,0x3a108ce5, +0xb9ee9d4b,0xbadc4283,0xbadcbe6c,0xbb169bbb,0xbb06aa40,0xba9db72a,0xbb064562,0xbaec1b16,0xbafd8a04,0xba3e368a,0x396fef91,0x38b85d07,0x3ad5b3a3,0x3b08198c,0x3b2f7fb8,0x3b02eb38,0xb8d052dc,0xb8696813,0xb7529b16,0x379a3078,0x37962825,0x37f0fa61,0x374b2175,0x378a5c73,0x37f6e65a, +0x3791309e,0x384ada93,0x377de714,0xb7b129ba,0x3876a5f4,0xba0e7b29,0x3b095d02,0x3b24dff6,0x3ad305c9,0x3a3adb4c,0xb9b59408,0xb9fd7343,0xb9ea8c95,0xb9ef539f,0xba968e3a,0xbb0ed28e,0xbb4df505,0xbb3ac637,0xbb2de72e,0xbb0731eb,0xba9e485b,0xba2aaa8a,0xb9ec2be9,0xb91d812f,0x3992fa25, +0x39ce7bc3,0x380c4877,0x370eedf8,0x38cda93c,0x36371ba4,0xb8540cbb,0xb83cde91,0xb85b5358,0xb831e416,0xb82a28c1,0xb8869b0d,0xb89fb7bf,0xb8c1e9b5,0xb8abfa49,0x36b59d46,0xb8d18c08,0x39ecab01,0xba501feb,0xb92668b9,0xb8c3e110,0xb805539c,0xb84a1810,0xb9896c98,0xba3865d9,0xba8400cc, +0xba89512d,0xba5f9f8b,0xba4eaf39,0xba99aee6,0xbabe93b5,0xbae7b285,0xbaf3d083,0xbb021f30,0xbad44835,0xbab85816,0xbb02cf3b,0xba9105a4,0xba82e053,0xba248d45,0xb93bd89e,0x3897bd31,0x38b0a4e1,0x388d0b9c,0x38a646dc,0x38963139,0x388b197c,0x39082f9a,0x38fbe327,0x391efb25,0x39403efa, +0x38d8ccc5,0x382570a1,0xb909937b,0xba8fab74,0xba6958d6,0xba997ba0,0xbaa9eaf2,0xbab5bb95,0xbaad7296,0xba8d731b,0xba708c09,0xba831950,0xba9ac6ff,0xbaa45c4a,0xba923619,0xba55a76b,0xba3507a0,0xb919f691,0x38e737a4,0x38f3c923,0x39e819f5,0x3a687228,0x3a3f7a90,0x3a1ce8f6,0xb8ff9800, +0xb9ead787,0xba106283,0xb9b47abe,0xb92f8e16,0xb999b45e,0xb91ce8c2,0xb9bb24a3,0xb9b854f9,0xb9865645,0xb9f4a34f,0xba3305fe,0xba657932,0xbab2ad62,0xba95361d,0xba5ce455,0xba5dc9e2,0xba4eea2b,0xba28e5ae,0xba1aee6f,0xba206365,0xba3b9c57,0xba50cc56,0xba3f4ba6,0xba23b75a,0xba14a089, +0xba1fbaab,0xba3e2bc4,0xba5e19d2,0xba71dbaf,0xba769985,0xba7b60e9,0xba78a624,0xba6e8e11,0xba674e66,0xba241ce3,0xb9d26bd5,0xb9666715,0xba0f2c5c,0xba168172,0xba1d88e7,0xba3cf1ed,0xba427c7a,0xba4d1283,0xba691ac1,0xba66d8ed,0xba6e746c,0xba62e002,0xba453213,0xba31f543,0xba51c4ad, +0xba7f1088,0xba1f3d6f,0xb9b45696,0xb9ab661d,0xb9b11ce8,0xb9a2fd9c,0xb9a1b36c,0xb9a3da99,0xb99e2b06,0xb9602706,0xb9b39ca5,0xb9d4c834,0xba015c04,0xb9b67038,0xb9b1c62b,0xb9d1542f,0xb9d93ab7,0xb9f0491f,0xba0ac631,0xb9f5499d,0xb9df7e9c,0xb9b123bc,0xb9bee2c6,0xb9ef29bf,0xba429b22, +0xb963bbfc,0xb97e015e,0xb9934522,0xb990488d,0xb987e4b7,0xb9720914,0xb9752c10,0xb96702f2,0xb91fbb4d,0xb987f2a0,0xb96fe025,0xba2c1081,0xba10fc08,0xba56581d,0xba1deeea,0xb9c6c7e3,0xb9b2bb89,0xb9c45eaf,0xb9e8fd8b,0xb9bbaabe,0x383c8984,0xb9c5cd37,0xba22b550,0xba724847,0xba1e5671, +0xb9ed0ca9,0xba0a8d4b,0xb9f20297,0xba26798e,0xba569233,0xba318cd4,0xba0a0c97,0xb9bfc198,0xb9cdea5f,0xb94fe985,0xb964236f,0x3871247c,0x38a18524,0x382dafb0,0x3869db13,0x381a58b1,0x3780156d,0x38665618,0x37f791d6,0x3840746d,0x3645c07c,0x38a253fa,0xb947af92,0xb9a12238,0xb99acc33, +0xba278a25,0xb98f9c2d,0xb96d910f,0xb9253f7d,0xb977e598,0xb972939c,0x39ee3bb4,0xb9d67996,0xba2d2411,0xbaa97c4d,0xb9ea53f0,0xb9b30b4c,0xba224a7e,0xba373726,0xba699ead,0xbab43fb6,0xba82d44d,0xba3fe1b3,0xb9f860e8,0xb9179c45,0x388c482b,0x3922ba46,0xb73c5115,0xb822d76a,0x369c2ca6, +0xb70de16a,0x3807e75a,0x3730965b,0x376a5a56,0x364705a0,0x378c53b0,0xb4fd2aba,0x37fc9496,0x38b4082b,0x392879f4,0xb8f099d0,0xba981077,0xb9076343,0xb986a81d,0xb90c2742,0xb9c58944,0xb982a461,0x3a8ed747,0xb9915312,0xba69c8cc,0xbb01af52,0xba689030,0xb9d00f76,0xba18fcd6,0xba109fe3, +0xba7475a4,0xbacafcb4,0xba959885,0xba2e1611,0xb9c0a00e,0x385d2b2f,0x3895a921,0xb8b00233,0x36794b71,0x37cb61b2,0x3795d852,0xb60e6168,0xb60e0b0a,0xb70a7f77,0x3752679b,0x3707bb2d,0x361cd0b5,0x36fbe894,0xb7c42a42,0xb84b4233,0x38905c9d,0x399a7297,0xba8c25d7,0xb98475fb,0xb8bcba40, +0x39641e51,0xb956b891,0x3847e43e,0x3a876e71,0xb9b17d5b,0xba9098cb,0xbb0583ff,0xba0b2564,0xb91bc520,0xba5ba56b,0xba8dafc5,0xbad0602a,0xbb274f20,0xbae8dd75,0xbaad822f,0xb9ed9891,0xb7e1aae5,0x379e8faa,0x375d0c88,0x37a39225,0xb7bd7f9e,0xb5b380cc,0x36c60edb,0x3744acad,0xb6222f86, +0x371dc375,0x3590842d,0x3711cb35,0x36861a63,0x37d5cab9,0x3811665e,0xb898dd9d,0x36236df3,0x3a522ea2,0xb99a8f4c,0xb8e15ef6,0x3a93890a,0x3a997c17,0x3a6adf7d,0xba71266e,0x3b020027,0x3b267824,0x3a556635,0x388b858a,0xb8251745,0x3a6af831,0x3b2c8265,0x3b4b9532,0x3b7d0900,0x3b47571d, +0x3b01f3d0,0x3a9518d6,0xb91fd5ae,0x38990050,0xb804f104,0x379956cb,0x3718203b,0x361b6dd7,0xb6836ec0,0xb6319ed4,0x36853431,0xb62a93a3,0xb5ac10cd,0xb5205ce3,0xb6c84bb1,0xb78af8be,0x36987dc5,0xb78c3327,0xb98ec61a,0x370f8f1d,0x3a515e43,0x3af0fc83,0x3b25c63f,0x3acb97c1,0x3a60dcf5, +0xba9ceae7,0xb9d41c21,0x38739067,0x3a57529e,0x3b0d5eae,0x3ae8ee0a,0xb98f40c7,0xbafbf80b,0xbb396a25,0xbb640570,0xbb2b8285,0xbaf9a6b2,0xba4b15de,0x38ea5bcc,0xb70efeab,0x36be0ead,0x36d30594,0xb6e548fa,0x36417078,0x3642dc51,0x36779477,0xb50a4cc2,0x364d6685,0xb687ddbb,0x37ab9cf6, +0xb7d700f4,0x388ddf8b,0xb8c4177b,0x3945522c,0xb9462d17,0x3ae5af99,0x3a874c81,0x39b4fdad,0xba92af5e,0xba4641c7,0xba1a40b6,0x3a0a7fcd,0x3aa33a5d,0x3aaef34a,0x38db3d97,0xba1b27fe,0xba5b159b,0xb94ab9bc,0x3a69a9ec,0x3a43b8ba,0x3ad86a02,0x3a4a45e5,0x3a5cb0d6,0x38ffc829,0x37840a32, +0xb55ab5c1,0x37304db4,0x360b6caa,0x3708d5a9,0x357b5c06,0xb57c1900,0x358fb5b7,0xb5f97438,0x369c1f93,0xb71fdb48,0x378526e1,0xb6f37802,0x37d53ab0,0xb7a7c89e,0x381ec2e3,0x3956e49d,0xbaab85d0,0xba653012,0xb9da2a24,0x39831d70,0xba575f83,0xb9fcd0da,0x3a3e7f04,0x39d16b03,0x39e23449, +0x3a665f23,0xb9dc2c5b,0xba06b208,0xb829d1d4,0x3a84c34b,0x3af26571,0x3aede3a0,0x3ab04035,0x3a652e48,0xb8fdf07f,0x3840c2ad,0xb72c7552,0x3770970e,0xb6f405eb,0x36c3e15d,0xb645b2a7,0x3687e40a,0xb581976f,0xb40d2772,0x34e4aaac,0x36719e42,0xb728bc4c,0x37ab52c4,0xb73f414b,0x378554a8, +0xb8148ea9,0x3a631842,0xbb0f5c06,0xbad90547,0xba7edc0e,0x3b743830,0x3ac4f2f1,0x39c36ad3,0xbac2e1da,0xbb1b6a99,0xbab650f3,0x3b25e6fe,0x3b2a5475,0x3af884a0,0xb86f919d,0xba34de8d,0xba917103,0xbace2b5c,0xba82dd91,0xba69e509,0xba0ba80a,0x38bfa9de,0xb78362b3,0x372a96c4,0x36040dfc, +0x363f5d4b,0xb5ddfc3c,0xb3843498,0x35f0ee02,0x354f7a8e,0xb5b4ddd5,0x3547d3de,0xb6858f4e,0x32f9878a,0x353da078,0x3886ce6c,0xb98df507,0xb7677104,0xbb2b4728,0x3b84b18d,0x3bb02c41,0x3b89d75a,0x3b7c7b35,0x3b56ff53,0x3b0f079f,0x3a5f3211,0xb9612948,0xba8b995d,0xbabfe166,0xbab3c1f6, +0xba8cb7a3,0xb9cb691f,0xb9212e66,0x39ec08d4,0x3a1390ad,0x3a3e9c89,0x3a7a2ec2,0xb9818d2c,0x3894e44f,0xb73e86eb,0xb613f643,0x35cf8078,0x36a83269,0x34a2df4d,0x33b437a0,0x33f61b9e,0x35d0b337,0x341429bf,0x3730fcde,0xb77358eb,0x38491aaa,0xb8cca3f7,0x38a7ca8b,0x394d362c,0x39a960d0, +0xba20144a,0xba5ad84c,0xb9d13d71,0xba41cdb5,0xba82d67e,0xba521027,0xba5cea58,0xba2c4f97,0xb98a2486,0xb9db5a96,0xb9b819ff,0xb9a17d91,0x37059da2,0x39b998b0,0x39901c40,0x3a6a7f51,0x3a6067fa,0x3a9aac6a,0x38ff241a,0xb8e2966b,0x38cc8ce5,0xb6a58d25,0x3736e175,0xb7107af9,0x3495d817, +0x359c571c,0x36acdc86,0xb6556eb4,0x369b4aa9,0xb79dd399,0x37c5efcc,0xb7b8c282,0x38e16965,0xb872700a,0x3988a009,0x3a9fba52,0x3a0d4bfd,0x39872f8e,0xb9a3c635,0xb9b03c42,0xb99dd39c,0xb945009b,0xb9c6673f,0xba32ade2,0xba8bf2fa,0xba87e97d,0xba7d6e17,0xba324c80,0xb9ccea8d,0xb911db4a, +0xb853755c,0x3852dfef,0x39149f79,0x38d9dae1,0x379fca55,0x380ba518,0xb7d9e6b9,0xb810fa80,0x37a73681,0x3701b004,0x37213d9c,0xb739f9d0,0xb647ff78,0xb5374355,0x378ef7e6,0x373d27fb,0x37f310df,0xb8722792,0x385bcd08,0xb98ad60a,0x38c32a19,0x39f46a29,0x39e00fd6,0x39e02c39,0x39e912f2, +0x398cb8d0,0xb867f09d,0xb9be883c,0xba033715,0xba0c3814,0xba175063,0xba1e8a06,0xba33fb62,0xba581a44,0xba6186d3,0xba7261db,0xba4e49f0,0xba499c8f,0xba5f8c59,0xba42b28f,0xb9854b57,0x38bd6d17,0x38d450ef,0x37ca781d,0xb5d67667,0x3612d694,0xb6f37669,0x37c27a54,0x35db2fd8,0x35163927, +0xb746b1ec,0xb7b50c43,0xb7747663,0x37dc5efb,0x3814258e,0x39372b5b,0xba04dde1,0xb9b2b99b,0xba00808e,0xba25d7c3,0xba4f62cb,0xba3bcf97,0xba22fa92,0xb9f94047,0xba02be57,0xba16fb6f,0xba2bc933,0xba3ca78b,0xba390fa7,0xba3f0e6f,0xba0a368b,0xb9db4d3d,0xb9e33452,0xb9a8e3db,0xb9281773, +0xb9813e6c,0xb9cfaf65,0xb998ac77,0xb8e9ca35,0x3886f5ed,0x3865def3,0x3817a508,0x3879c1f7,0x37cb5c8f,0x38646f09,0x38966d7d,0x38057461,0x38cb7a1f,0x38c9f23e,0x38141050,0xb94c545a,0xb9330c33,0xb9e07b52,0xb9aa6562,0xb9aa128e,0xb9899772,0xb981e509,0xb9870df4,0xb9b586c4,0xb9de7837, +0xb9ebf02a,0xb9e40b12,0xb9db7d94,0xb9dd69a7,0xb9ed6076,0xba059303,0xba0c86a4,0xba11daff,0xba1530a7,0xba11fe48,0xba10a53b,0xba031caf,0xb9ef0bf4,0xb9fb708d,0xba15f42c,0xb980475c,0xb98b20d0,0xb99482be,0xb98df7e5,0xb992f313,0xb9915c46,0xb98ca2ac,0xb9960db6,0xb991e906,0xb98e2783, +0xb97ac30a,0xba19a203,0xba07514e,0xba3d18c7, +}; + +const uint32_t orange53_rom_AlphaR16[578 * 43] = { +0x3f1e923e,0x3ed6aeaa,0x3ee862da,0x3ec3cfdc,0x3e86282a,0x3e228e80,0x3eb9f0a2,0x3e8d9ec4,0x3e0e7725,0x3dfb02e8,0x3dfc1c20,0x3e0d53be,0x3e05a3b3,0x3dcc44d3,0x3e084a2f,0x3e85b884,0x3eae5e87,0x3df92009,0x3e80779c,0x3eaa4837,0x3ed7059f,0x3ecad511,0x3ed0f992,0x3ed036a6,0x3ed8e1a7, +0x3edc2829,0x3ed9eb5e,0x3edc0b40,0x3ee07f4c,0x3ee040cf,0x3eecd142,0x3ee713ce,0x3ef41055,0x3eebd6ee,0x3eeac350,0x3ee3bbe6,0x3edcfcce,0x3f099376,0x3f075726,0x3e8566ca,0x3ec9ef4f,0x3e91db5b,0x3eb83c3b,0x3eb6c203,0x3ea00aa9,0x3eb4b2f9,0x3ea11487,0x3e983d15,0x3e947858,0x3eac6a9c, +0x3e9c76e1,0x3e43794b,0x3ebbbd27,0x3e967b41,0x3ead263a,0x3e90f05d,0x3eeac0a0,0x3eedb1b3,0x3ef5fd01,0x3efdde2a,0x3efac2d0,0x3ef9757b,0x3f0bc835,0x3f144cf0,0x3f1aa65d,0x3f1826a9,0x3f28390e,0x3f1d452b,0x3f2e49e5,0x3f2ad190,0x3f288da0,0x3f1bdcfb,0x3f0d4218,0x3f17f07a,0x3f07c3a2, +0x3eb3b592,0x3ed91ecb,0x3e95c9db,0x3e9f7222,0x3e6714da,0x3e986ae9,0x3e4af5d5,0x3e9588f8,0x3e2f0c36,0x3ea5df4e,0x3e460dca,0x3e7a169c,0x3e5e2757,0x3e851a24,0x3e940851,0x3e7d348a,0x3e984e9e,0x3ebea39a,0x3eeb3414,0x3eef2ec9,0x3f053053,0x3f091a6a,0x3f1222a6,0x3f1ac1de,0x3f205ffb, +0x3f2daca8,0x3f3a7e38,0x3f45e62c,0x3f546223,0x3f62034e,0x3f59e51e,0x3f4d7180,0x3f340e5d,0x3f257c76,0x3f17fe93,0x3ef95d3d,0x3e8365ac,0x3e8f8c2b,0x3e642a0a,0x3e4685a1,0x3e2baaf0,0x3e378728,0x3e1dfd94,0x3e042f3f,0x3de54d5e,0x3e080ca8,0x3db99324,0x3e224235,0x3dca5a31,0x3e1dbe8c, +0x3e47900b,0x3e2bd997,0x3e538f57,0x3e88b333,0x3ed4d364,0x3ecd2f01,0x3efe53c9,0x3f0521e2,0x3f11bdfa,0x3f1ccc4a,0x3f2fd7e6,0x3f3c70a6,0x3f4f340f,0x3f617794,0x3f708d63,0x3f8399cf,0x3f80cffc,0x3f6f2fc6,0x3f464fb8,0x3f250a15,0x3f268fd9,0x3f098eeb,0x3e92b2bb,0x3e97c7ad,0x3e590cbd, +0x3e3cf8d2,0x3e084baa,0x3db72713,0x3d739f9e,0x3d2afa79,0x3d83e8db,0x3d1c8620,0x3cd9592a,0x3cb50827,0x3d5024b1,0x3d92109e,0x3db15aed,0x3e451d97,0x3dbd7f4b,0x3e91f9c2,0x3ec00a99,0x3edfd9c5,0x3f03a206,0x3f0d04dd,0x3f224808,0x3f2eaebd,0x3f410186,0x3f59221e,0x3f6d326a,0x3f852f6f, +0x3f917d3b,0x3f9e4dcf,0x3f9ba2c2,0x3f8e21be,0x3f64190d,0x3f3dfc61,0x3f31fa91,0x3f247573,0x3ed58955,0x3e95b8c3,0x3e7e2ff2,0x3e1fa95b,0x3e48bc09,0x3dfbfff3,0x3de95489,0x3da82e83,0x3db21d67,0x3cdf981b,0x3d77c68c,0x3d72414d,0x3d9be0c5,0x3e000b6b,0x3daa2075,0x3e4c6cfc,0x3e814003, +0x3eca0c1d,0x3f0bc467,0x3f234470,0x3f4d7a91,0x3f65418d,0x3f7a043b,0x3f90b97d,0x3f9c34ed,0x3fa36bbe,0x3fa72252,0x3fb336e5,0x3fb03c8c,0x3fa1d720,0x3f92e03a,0x3f8a0175,0x3f80af7d,0x3f605e81,0x3f5f6b84,0x3f0b0db6,0x3e82ec0a,0x3eee9898,0x3e762405,0x3e8b7dd8,0x3e398bc1,0x3d979f18, +0x3df31b62,0x3d71effd,0x3d5dd5eb,0x3d92b308,0x3d7278bb,0x3d8a0bde,0x3da4f988,0x3e1e28bc,0x3e3e56eb,0x3e87fd27,0x3e69c210,0x3eb7849e,0x3f116456,0x3f1dff70,0x3f3a2a3e,0x3f53e9d5,0x3f69c495,0x3f83824c,0x3f8a72c0,0x3f99f1f4,0x3f9e5c7f,0x3fac6000,0x3fb23f97,0x3faa77ea,0x3fabb285, +0x3f9e2cfe,0x3f926e06,0x3f7552e1,0x3f877cbf,0x3f329de5,0x3f1ab20c,0x3ed904d3,0x3ebb9c9d,0x3e975b99,0x3e538392,0x3e137a68,0x3dac18ee,0x3da01f49,0x3dd98b8b,0x3dab4c9f,0x3da9bf72,0x3e03a2a9,0x3df6b6e3,0x3e24f0b2,0x3e581c89,0x3e7c4c95,0x3e979181,0x3ed66706,0x3f0383f8,0x3f13a739, +0x3f31c1bc,0x3f44c56c,0x3f5aa37e,0x3f8590e4,0x3f90b3ab,0x3f98f982,0x3fa37378,0x3fa8bb2c,0x3fa62179,0x3f99f14b,0x3fa2db2c,0x3fa0bf04,0x3fa4a2d6,0x3f8eba2d,0x3f94ad55,0x3f636bc2,0x3ec2fb79,0x3f125b43,0x3e9754ea,0x3e7c1ca4,0x3e33b457,0x3e22a3b9,0x3deaaec9,0x3e1960b6,0x3e3984e9, +0x3dc781e8,0x3d99d4b3,0x3e0b66a8,0x3e3bea75,0x3e392044,0x3e8c885b,0x3e7c9dc6,0x3e755d23,0x3e94c67c,0x3ee77cbe,0x3ef39737,0x3f21da4b,0x3f387ac0,0x3f5bbe92,0x3f758107,0x3f8e89f0,0x3f9c64e2,0x3fa3a6bc,0x3fa606a0,0x3fa26a07,0x3fa5f07b,0x3fa32055,0x3fa4a83c,0x3fabcbe4,0x3fa15850, +0x3f99fefa,0x3f6abb08,0x3f256581,0x3ee378fe,0x3e9f2f81,0x3eaa119e,0x3e4cad03,0x3d60a505,0x3e11cecc,0x3e05db4f,0x3e538006,0x3e1a2653,0x3da0fa90,0x3e2190ce,0x3e1b2da1,0x3e290717,0x3e54d072,0x3ea683e3,0x3e974f33,0x3ee763dd,0x3ee80a6b,0x3f00ded5,0x3f148644,0x3f3a35ee,0x3f5b0353, +0x3f741636,0x3f881d64,0x3f952ee5,0x3f9d10cc,0x3fad0708,0x3fb8e92e,0x3fb62e32,0x3fae12a0,0x3f9c3d9f,0x3f96e1b5,0x3f9e3041,0x3fa23d03,0x3f6d8abf,0x3eff7970,0x3f10918b,0x3ebd5706,0x3e80b3d9,0x3e966f42,0x3eba9b59,0x3e326a28,0x3e4b7aba,0x3e08232e,0x3e11708e,0x3e01b7c4,0x3e4ed67d, +0x3e4a32db,0x3e657b22,0x3e95f4d4,0x3e874811,0x3ebe4c77,0x3ec2167c,0x3f15df2a,0x3f06255e,0x3ef6cb69,0x3f1bc5f3,0x3f36e4bd,0x3f6310f2,0x3f83595d,0x3f91b64b,0x3fa13780,0x3fa243cd,0x3fa22079,0x3fb0884b,0x3fa9a6bb,0x3fa899c9,0x3faad1ab,0x3fa45e00,0x3f8c7232,0x3f77733b,0x3f1bbe4f, +0x3f0532a9,0x3ec89117,0x3e9808a9,0x3e95b8cb,0x3e3c65ed,0x3e843832,0x3d6847da,0x3eac6ba3,0x3dc91df3,0x3e352c66,0x3e30330a,0x3e4c0159,0x3e9037da,0x3ec4b5b8,0x3eecc742,0x3e891a03,0x3f1e1efd,0x3f2c5772,0x3f181095,0x3f11488f,0x3f1c2845,0x3f320fe0,0x3f4c1edb,0x3f5f63e8,0x3f78db25, +0x3f87eae5,0x3f8d598c,0x3f987c81,0x3f9b4797,0x3f9cdb80,0x3f977db2,0x3f910b2e,0x3f920b60,0x3f89f1a8,0x3f1ff1b4,0x3f323044,0x3f0aaf45,0x3ed5a26e,0x3f002dda,0x3e9bd13e,0x3e87e4d5,0x3e6b2b9e,0x3e9ef71f,0x3e5181e6,0x3e960af9,0x3e0f6c9b,0x3e9561b9,0x3e7a9539,0x3e8d2c48,0x3e89bc4d, +0x3eb0b9d7,0x3efa66ca,0x3ec75e86,0x3f2f45d7,0x3f0e417f,0x3f1d471f,0x3f1e959e,0x3f2c5259,0x3f369f43,0x3f4a2a13,0x3f5ab460,0x3f6b7fcc,0x3f7e52d1,0x3f84d2d2,0x3f8cbfa3,0x3f8e5de2,0x3f8b1e01,0x3f8c075b,0x3f74c585,0x3f6037f3,0x3f59efe6,0x3ed8ea8e,0x3f1a4e71,0x3ed492e4,0x3e93a9bb, +0x3e9ffe8b,0x3ebd5b98,0x3e9c2009,0x3ebebabb,0x3e56105a,0x3f061059,0x3e9371b0,0x3edde053,0x3e655f4f,0x3ecf28c9,0x3ecf0e82,0x3ee4e43f,0x3e7bfb7a,0x3f15fb0e,0x3f287961,0x3f1c22fe,0x3f24b5cb,0x3f254fbf,0x3f2e6728,0x3f337557,0x3f491a02,0x3f5822a3,0x3f676969,0x3f6ed64f,0x3f7ac2bd, +0x3f82ae99,0x3f7b2140,0x3f798a94,0x3f7d86b9,0x3f6434c2,0x3f46a612,0x3f5960da,0x3ebc8541,0x3f2cfea3,0x3f1f4ccb,0x3f1fd924,0x3f34462e,0x3edec67d,0x3f25deaa,0x3ef32314,0x3ef32314,0x3ed1f587,0x3f0665f3,0x3eeedc2d,0x3f074f84,0x3f084d71,0x3eb07a56,0x3f1caf4c,0x3e82d665,0x3f3c1935, +0x3f323941,0x3f3ddd1c,0x3f3f8120,0x3f44d777,0x3f434bf9,0x3f3cc3c1,0x3f502827,0x3f4c332a,0x3f53d98f,0x3f621975,0x3f5adf77,0x3f6a631e,0x3f69ea44,0x3f4b8457,0x3f4e8f3e,0x3f590fa2,0x3f2afc09,0x3f38c572,0x3f0da4d8,0x3ea6d4cd,0x3e065cb7,0x3f0db688,0x3ec5c253,0x3df8b252,0x3d92169a, +0x3dfcd1c8,0x3e23139b,0x3e119363,0x3dc5eb82,0x3dc41c18,0x3ed289eb,0x3f14a014,0x3e128889,0x3ec45d64,0x3f12868e,0x3f313aab,0x3f221cb2,0x3f26782a,0x3f2646d9,0x3f27d0b6,0x3f27e24e,0x3f25c595,0x3f2ba562,0x3f2ae3ed,0x3f2f9984,0x3f325530,0x3f310ee7,0x3f367b9c,0x3f34ca95,0x3f2fee1a, +0x3f33035e,0x3f318978,0x3f8129cf,0x3ecefbb2,0x3e816713,0x3e5e1860,0x3e9600af,0x3ebc57f9,0x3edb205b,0x3e87ea11,0x3eab8122,0x3edc5a46,0x3edbdc6f,0x3edcb198,0x3ed3e438,0x3ed3c16d,0x3ee05746,0x3ed74fe2,0x3ea94921,0x3e8f1e0f,0x3edc7b9e,0x3eb74373,0x3e97b604,0x3e5d9ab5,0x3e765727, +0x3e718839,0x3e6a7e82,0x3e70790f,0x3e71d437,0x3e707f75,0x3e6ef3bf,0x3e70305b,0x3e6af59a,0x3e70abbc,0x3e657afb,0x3e6adf08,0x3e706be4,0x3e7a5a71,0x3e7e21f1,0x3e795009,0x3eb296de,0x3eab1aee,0x3f09eceb,0x3eba3a3c,0x3ed9c6a2,0x3eb1cbfb,0x3eb92ba0,0x3ebed32f,0x3e927126,0x3eb91841, +0x3ebc6438,0x3eb42a1c,0x3eaa5920,0x3ebbf4e5,0x3ed46204,0x3eb25921,0x3ec3e3fe,0x3eb9afec,0x3ed60a76,0x3e9c28de,0x3e9c2ca1,0x3e9dc820,0x3e93a918,0x3e903724,0x3e8c54d1,0x3e9bc69f,0x3e9f2abb,0x3e9e7da6,0x3e918b45,0x3e9a12a1,0x3e86bbd2,0x3e8d2e25,0x3e989b92,0x3ea4e322,0x3ead1174, +0x3eaf5fea,0x3ec02462,0x3eda80dd,0x3ef8e32d,0x3eb79232,0x3ec7fad5,0x3eb6b244,0x3eb63ff2,0x3e8d488a,0x3e9f0d6c,0x3e750318,0x3ea5e301,0x3e6f3390,0x3e98ca35,0x3e86a83f,0x3e9e8889,0x3e945a1d,0x3e9c2751,0x3eb4c92f,0x3eba159f,0x3eafec80,0x3e9579a5,0x3ea1274f,0x3e90eb14,0x3e927511, +0x3e905577,0x3e9d1508,0x3e9894b7,0x3e997a52,0x3e98f111,0x3e8cbd67,0x3e890345,0x3e7a689e,0x3e9744f8,0x3eab1860,0x3ec1bea9,0x3ecb04e0,0x3ee4726e,0x3efcbe4b,0x3f07e48c,0x3ed8cd5a,0x3eb5cee9,0x3ea6348d,0x3e981e60,0x3e6a668a,0x3e4e0f4c,0x3e4d6182,0x3e7a03bc,0x3e60a4ef,0x3e746db1, +0x3e4d50b9,0x3e8217b5,0x3e840598,0x3e89c882,0x3e9dd51c,0x3eb065d5,0x3eb03557,0x3e9f509b,0x3e9e7fdc,0x3e8e8acd,0x3e8d1712,0x3e913871,0x3e9e8fdf,0x3ea0918f,0x3e9df4a6,0x3e9227e7,0x3e89ff20,0x3e7982a3,0x3e53e9eb,0x3e90322e,0x3eac7370,0x3ece8c5f,0x3ef013fd,0x3f0352f1,0x3f0e8a91, +0x3f145f63,0x3edf9580,0x3eb8398a,0x3ea449b2,0x3e8c7aee,0x3e629bb6,0x3e2b4366,0x3e09301f,0x3e0a5488,0x3df03306,0x3de84e8f,0x3e047483,0x3e1db635,0x3e3b2a03,0x3e66e85a,0x3e750f78,0x3eb37187,0x3eaf9b6d,0x3ea162af,0x3ea2f004,0x3e95bd5e,0x3e8f32ea,0x3e93c5e8,0x3ea6dada,0x3eac160d, +0x3ead0ba3,0x3ea91d59,0x3e8b11af,0x3e6c1753,0x3e2a8319,0x3e88462a,0x3eb3b0b7,0x3eeec1db,0x3f05b7a8,0x3f29abd4,0x3f14935a,0x3f192d83,0x3f0dc021,0x3ee097a9,0x3ec78deb,0x3e9c1f99,0x3e740fff,0x3e33fce7,0x3e179495,0x3e2b77eb,0x3e27ab13,0x3e374c35,0x3e13e50c,0x3e37ab1b,0x3e4f99f2, +0x3e906d95,0x3e957e4c,0x3eb326d3,0x3e9c9b39,0x3e98cd21,0x3e90462b,0x3e2bbbbb,0x3dd0318d,0x3d8d6a31,0x3ce65e08,0x3c0630f5,0x3c98ec0f,0x3df48ead,0x3e074d1a,0x3e8af8e3,0x3eff45ac,0x3f151fb5,0x3f25d68e,0x3f1ea8ee,0x3f299aab,0x3f1a7c5e,0x3f3feebd,0x3f4f989a,0x3f1461d4,0x3f0ed248, +0x3eda90de,0x3ec00d91,0x3ead6e2e,0x3e83d84a,0x3e59c7fb,0x3e6c3d5d,0x3e18a59e,0x3dd759de,0x3dffcd38,0x3e236821,0x3e38ad92,0x3e7b22f6,0x3e93954e,0x3eca80cc,0x3edf7ceb,0x3eba26e4,0x3ebeb0e1,0x3e941ced,0x3e91f733,0x3e6b0b26,0x3e67fff5,0x3e6f7aca,0x3e97e79e,0x3eb61916,0x3ec0499c, +0x3ed024a6,0x3f0832c4,0x3f0c397d,0x3f1c4814,0x3f2c4d3e,0x3f275aa5,0x3f097314,0x3f390b0a,0x3f27fb15,0x3f1f2246,0x3f09341a,0x3eddda0e,0x3ecaee85,0x3eab5848,0x3e975eab,0x3e897b55,0x3eb0ff4a,0x3e80c588,0x3e791c5a,0x3e41a0a6,0x3e5cb22a,0x3e82b4a9,0x3e9cfae8,0x3ebd706e,0x3ed7de81, +0x3ee270e2,0x3edce5ae,0x3ed9d384,0x3ea98ce0,0x3ea98467,0x3e98929b,0x3e672693,0x3e711a13,0x3e868ba8,0x3eca663a,0x3efb5bc1,0x3f24b68c,0x3f489108,0x3f40297f,0x3f3b33c9,0x3f094cdc,0x3f1a1903,0x3ee37e4e,0x3f173e55,0x3f5e0305,0x3f00ad57,0x3f10fefb,0x3ef5a1e4,0x3ed1e54c,0x3eaa67cc, +0x3e9ad2b9,0x3e9b49e9,0x3f09bef7,0x3e9e0242,0x3e8cd69d,0x3e8f19c5,0x3e900919,0x3ea4f742,0x3ec6ea7d,0x3ee167b0,0x3efe5216,0x3f04252b,0x3ef13d37,0x3eeb1fb1,0x3ecba01c,0x3eb35bb0,0x3e93db01,0x3e7136c4,0x3e5d9c07,0x3e6315f6,0x3ead2187,0x3efeee81,0x3f2bb064,0x3f2c6b92,0x3f44df1c, +0x3f39c009,0x3f0ff6fa,0x3f0345c3,0x3ea87a16,0x3f0c49fd,0x3f2e3342,0x3f1c2c40,0x3f178c74,0x3ecb497b,0x3ee21b77,0x3ed0e03b,0x3eadde29,0x3eb0b75b,0x3f1ee517,0x3e90cac6,0x3e74f576,0x3ea4c1a2,0x3eb4f90c,0x3ed1ed2d,0x3eed37fb,0x3eeb21c2,0x3f01a4be,0x3eeab6eb,0x3ef1573d,0x3ef56abe, +0x3ed7c344,0x3eaaf4e4,0x3e94544d,0x3e95ad7f,0x3e81092c,0x3e8e9ba3,0x3ea7d75b,0x3eaddc8d,0x3ed1a836,0x3ee87776,0x3f1f012f,0x3f35c275,0x3f514a7c,0x3ef4fe70,0x3e35d1dd,0x3ec3c46f,0x3f400861,0x3eed5bb0,0x3f08071d,0x3f02334c,0x3ed6a8ff,0x3e84ae8d,0x3ecbe021,0x3ec03300,0x3ef3acd6, +0x3ec62e85,0x3ec1f507,0x3e9f9a5a,0x3ec47bfa,0x3ed24097,0x3ee2a35e,0x3f057ce0,0x3f01641a,0x3f0b80cb,0x3ed52e00,0x3ef5ddbc,0x3f097079,0x3efc60cb,0x3ecee829,0x3e9c0b3b,0x3e8221ae,0x3e52d197,0x3e3c3952,0x3e7b4e21,0x3eb7b32e,0x3ec59074,0x3f07404d,0x3f0a3561,0x3ee29503,0x3eca31af, +0x3e8a4d00,0x3e99e52c,0x3f1edc10,0x3f08ae92,0x3f03c1f5,0x3efe5bab,0x3ece581a,0x3ee28cbb,0x3ec55aea,0x3f016a40,0x3ea5a489,0x3ede7d47,0x3ec32cec,0x3ed22acc,0x3ed6cc30,0x3edc106c,0x3ec9a075,0x3ed35058,0x3f27c29c,0x3ebdded5,0x3ec3f4bf,0x3efc8c34,0x3f04afe9,0x3f05be43,0x3f00c38d, +0x3ee0a7df,0x3ec43bd8,0x3ece2625,0x3ed8cea7,0x3ed976fc,0x3eddf250,0x3ee0ce54,0x3f04f5f2,0x3f0bd2e3,0x3f00500d,0x3ec63170,0x3e67a6c8,0x3f297f69,0x3eff6873,0x3f0ae2d7,0x3f0f1a7d,0x3ebaeb2e,0x3f00e8c2,0x3ee80189,0x3efcb949,0x3ec9f5de,0x3eec99bf,0x3ecace50,0x3f06026c,0x3ec92adf, +0x3eef6a61,0x3ef0bc2b,0x3f0b15ec,0x3f089691,0x3ef97711,0x3f19a76c,0x3ec047d5,0x3f074e37,0x3f11b2ab,0x3f159e73,0x3f11f795,0x3f13d36f,0x3f0eee0d,0x3f05279b,0x3f04fa84,0x3eff4b61,0x3ef21bce,0x3ee9e9f0,0x3ee9a7a6,0x3ee785e8,0x3ed7f4d9,0x3eebfe63,0x3ebbc518,0x3eb34926,0x3f4363a2, +0x3efdc426,0x3f275fce,0x3f2df55a,0x3f18667b,0x3ee0277e,0x3ef77fb6,0x3ed6d934,0x3f0f4037,0x3e989876,0x3ef44a26,0x3ebaa66f,0x3f1916e7,0x3eef6cd2,0x3efb0849,0x3efcf8bd,0x3f399045,0x3ee81f9f,0x3ed867a0,0x3f06cbb9,0x3f0bd05b,0x3f11cc5f,0x3f18f4cb,0x3f20baab,0x3f0d07b6,0x3f08f69a, +0x3ef6a94c,0x3ee7fd93,0x3edf9cf1,0x3ed263a0,0x3ec8ad1e,0x3ed23b29,0x3ecc2353,0x3ed70ba5,0x3eb39190,0x3e78d3e9,0x3f52c449,0x3ec6db7c,0x3ec1c9eb,0x3ee5e1a3,0x3e9b99e8,0x3f1220cc,0x3eb9d1f2,0x3f0a78d3,0x3f087f32,0x3f15c4d2,0x3eef89b1,0x3f041b83,0x3eee7f6b,0x3ef2e930,0x3f37b5fa, +0x3ee91d22,0x3f4e32c3,0x3eb3f318,0x3eb90438,0x3ece781a,0x3eccde00,0x3edc68b5,0x3ed695b4,0x3ecc50db,0x3edccd44,0x3ec36074,0x3ec42e28,0x3ec8c3d0,0x3eb25587,0x3eb3eddc,0x3eba8191,0x3ea536b5,0x3eab3c33,0x3eac4712,0x3e67ad52,0x3e28b707,0x3ecbe040,0x3f207822,0x3f47302b,0x3eb31cb2, +0x3f051d6d,0x3f456f49,0x3f4ed4e8,0x3f40714d,0x3f36f5c2,0x3f3b1d45,0x3f468aa3,0x3f47a118,0x3ef8fcca,0x3e9b4cc8,0x3f40d339,0x3f08bdd1,0x3ea9fdaf,0x3e285155,0x3e7085e0,0x3e74fef3,0x3e78f243,0x3e8256f2,0x3e867cf7,0x3e87870c,0x3e8b690e,0x3e7ff48c,0x3e7fc904,0x3e765276,0x3e6768f7, +0x3e6411a0,0x3e634a81,0x3e5b0745,0x3e63ed0e,0x3e65e1c4,0x3ed0148a,0x3e375354,0x3dd561b4,0x3dd5ff6c,0x3dc75bd4,0x3dbc3d49,0x3db70a9b,0x3dd0aacd,0x3dc158dc,0x3dad3b8e,0x3dab5395,0x3db42395,0x3dc26817,0x3dbb2408,0x3db6241c,0x3db6bdd1,0x3dc62b17,0x3ddfa4c9,0x3db8a692,0x3dcb3710, +0x3ddbbd7a,0x3dee354f,0x3df167c8,0x3df5a1a1,0x3df82397,0x3e021ed4,0x3e025fd2,0x3df9c630,0x3df3fb0f,0x3df0f465,0x3debff03,0x3deddb97,0x3de13b18,0x3ddd4e14,0x3dc9003e,0x3dc2870e,0x3dc35070,0x3dcbd315,0x3dd841d8,0x3de3226b,0x3e04e4bb,0x3e06286a,0x3e0d7130,0x3dffc7e1,0x3dfcbb18, +0x3dfefd66,0x3df8ff8e,0x3e08edcd,0x3e13551b,0x3e0ea48f,0x3e116e1b,0x3e09651c,0x3dfad5ce,0x3e13b242,0x3e0fe3dd,0x3e121a0d,0x3e119fb9,0x3e196b6f,0x3e1e73b1,0x3e250c81,0x3e2d4013,0x3e2796d2,0x3e235c84,0x3e309567,0x3e2c0631,0x3e2e57cd,0x3e2c96ec,0x3e36e1ae,0x3e259b5a,0x3e194dee, +0x3df157a8,0x3ddf300f,0x3dd7ed98,0x3dcc3545,0x3d88cebc,0x3da26c9c,0x3dd7810f,0x3df83a2f,0x3e066481,0x3de9d111,0x3dd2d5bc,0x3dffbfcc,0x3df8ca67,0x3e0dacb5,0x3e22db5c,0x3e277287,0x3e1d52d7,0x3e04b1db,0x3e16415a,0x3e157325,0x3e207baf,0x3e212fff,0x3e23bd9a,0x3e1e98c2,0x3e287726, +0x3e3642f3,0x3e46c1b5,0x3e50377c,0x3e4d80b8,0x3e4457e5,0x3e336c54,0x3e2cbcf4,0x3e2f651e,0x3e2a79f1,0x3e1b349c,0x3dfb7bb0,0x3d84933f,0x3d04f1ca,0x3cf1a8df,0x3d499d44,0x3c509ec6,0x3d3e46e4,0x3e088a8a,0x3dfac03a,0x3e22ec22,0x3df7e8fd,0x3de03f45,0x3dcd1be2,0x3dca4a34,0x3df9793f, +0x3e33084c,0x3e259b46,0x3e1fd273,0x3e02bcd9,0x3e1aece3,0x3e22172c,0x3e2e3273,0x3e3824ef,0x3e431733,0x3e346884,0x3e3cd30c,0x3e490eec,0x3e625077,0x3e6be02e,0x3e6fc87e,0x3e62c36a,0x3e5111a1,0x3e51a724,0x3e585a1f,0x3e64d753,0x3e4c0c67,0x3e20d102,0x3d8712c9,0x3caf2727,0x3aa06bd6, +0xbaa6130c,0xbc91df46,0x3ce298d7,0x3de171c9,0x3df65f45,0x3e026f44,0x3dd6c3df,0x3dce4bc2,0x3de1a334,0x3dd4a0e8,0x3ddfe683,0x3e2d9203,0x3e1cca40,0x3e2037dc,0x3e073513,0x3e2535a9,0x3e2d5234,0x3e39e7e8,0x3e436127,0x3e616caa,0x3e42d39c,0x3e417472,0x3e56e227,0x3e7bf4b1,0x3e815a03, +0x3e859c0a,0x3e6442bb,0x3e4c137e,0x3e3b0f08,0x3e39756d,0x3e470088,0x3e2ab507,0x3dd9a1f6,0xbac8730f,0xbdad388f,0xbda6f574,0xbd82792c,0xbd88b24b,0x3c9ebceb,0x3e7476e7,0x3e82f2a2,0x3e83f2d3,0x3e8365c3,0x3e4f1b5b,0x3e57e3d1,0x3e31a9e2,0x3e1f3752,0x3e346725,0x3e28e1d3,0x3e1e3477, +0x3dc94908,0x3e1f7ca5,0x3e2d4baa,0x3e531620,0x3e5e6db4,0x3e564199,0x3e620745,0x3e5a6a34,0x3e62838c,0x3e92d943,0x3e91b1ad,0x3e89adba,0x3e928180,0x3e840e35,0x3e532c11,0x3dcbbbd1,0x3b8feb2d,0xbe1611a5,0xbea84501,0xbeca7b78,0xbec6e86e,0xbe92791a,0xbe37d7b4,0xbe885f2b,0xbda1ebde, +0x3dfe389f,0xbcf17886,0x3dd991b4,0x3da4754a,0x3e0b9a17,0x3e2d7f25,0x3e21938e,0x3e361686,0x3e4cee9a,0x3e380d7d,0x3e2b9198,0x3de28991,0x3e1b442c,0x3e2c34ed,0x3e2dab03,0x3e4a83d6,0x3e61431e,0x3e6f6593,0x3e496b9f,0x3e66c134,0x3e8786e8,0x3e862621,0x3e70f20f,0x3e16d5f2,0x3d26ca36, +0xbdcd4c24,0xbe55043b,0xbea4e019,0xbed0dc78,0xbef92e87,0xbf073aa1,0xbf02be63,0xbf0933d9,0xbea3890b,0xbedebe90,0xbe670514,0xbe3d7fab,0xbdb5868d,0xbcbb9c8d,0x3cec4008,0x3dafc819,0x3de85597,0x3e1dd3be,0x3e29fcf6,0x3e9612f4,0x3e1157bb,0x3e005e9a,0x3ddd6c00,0x3e3d5df3,0x3e4c83ac, +0x3e70f029,0x3e800458,0x3e910115,0x3e70f0e0,0x3e79533c,0x3e6c8ef0,0x3e5c33f7,0x3e16a578,0x3d6f25b0,0x3cf6586e,0xbdfb1db0,0xbe77fbc3,0xbee07557,0xbf144923,0xbf3d75fe,0xbf5906d4,0xbf533e8d,0xbf49660b,0xbf2d98af,0xbf019c08,0xbf080017,0xbed6e428,0xbe58c82a,0xbe51c094,0xbd562c32, +0x3be372b3,0x3d962662,0x3dd1aeed,0x3e03f3c2,0x3e0a1ed3,0x3e4511cf,0x3e2b3815,0x3e17fec0,0x3dd620ee,0x3e20692f,0x3e328631,0x3e292a2e,0x3e4ebb29,0x3e8c6390,0x3e897c9f,0x3e73e2f5,0x3e6f6137,0x3e429c98,0x3de14cdf,0x3cf98461,0xbd44b1a6,0xbe1bd25c,0xbe876563,0xbef2b3a1,0xbf2677ff, +0xbf5302b2,0xbf5e15f7,0xbf659b28,0xbf5dc077,0xbf497e6f,0xbf290223,0xbf110acd,0xbee496ca,0xbeb50edf,0xbe43cad9,0xbdc96ec6,0xbc1ceeee,0x3d22bcaf,0x3dc28537,0x3dff717e,0x3e1e03df,0x3cdde1f5,0x3e3a3d75,0x3e65162a,0x3db00738,0x3e00f134,0x3def154c,0x3dcc312e,0x3dc9a62f,0x3e116b31, +0x3e281975,0x3e556c77,0x3e5c4ca6,0x3e2ba299,0x3e20ecfc,0x3da7c7f0,0xbd0c135f,0xbdfec0f8,0xbe7cae28,0xbeb91262,0xbeee5dea,0xbf14cc52,0xbf218474,0xbf460463,0xbf4f6452,0xbf71eadf,0xbf341910,0xbf007503,0xbecbaebc,0xbebd495f,0xbe31771a,0xbe1ce364,0xbd8e5988,0xbd80a75a,0x3c4269bd, +0x3c831dba,0x3d009343,0x3d1f554d,0x3de20014,0x3de6e9dc,0x3dab410d,0x3d934544,0x3d651d85,0x3d30d0ca,0x3d258266,0x3d43b077,0x3d4d3937,0x3db87378,0x3e02ad63,0x3debede3,0x3da9f747,0x3d98dc97,0x3d83c824,0x3d3a1133,0xbc46bdfb,0xbdbbe6bc,0xbe34949a,0xbea9bcda,0xbee17694,0xbf1bab35, +0xbf3305d6,0xbf3adc04,0xbf2e4206,0xbee56825,0xbeb18395,0xbeb61216,0xbe7a265e,0xbe1f6f5d,0xbdc87782,0xbd018198,0x3c8d7a00,0x3bdd1e25,0x3cca96e7,0xbcca73e5,0x3d61b0b3,0x3d777f91,0x3d518041,0x3c9217f9,0xbc885c05,0xbc7dd1f2,0xbd115c0a,0xbd82a3ec,0xbcf3c135,0x3b1c5922,0x3a159f81, +0x3cc4cc80,0x3ceba107,0x3d05d761,0x3d8f2074,0x3cb71f2a,0xbd25a201,0xbdeba143,0xbe4cff44,0xbe9d6ff1,0xbecb7392,0xbf081c7a,0xbf196ef5,0xbf1cbc34,0xbf0d5d51,0xbeb8628c,0xbedbd59b,0xbeacd846,0xbe87c9c5,0xbe61e158,0xbe00d87c,0xbdd9e637,0xbd198928,0xbd8e5255,0xbd44172e,0xbd2df9af, +0xbd1dee43,0xbd025da4,0xbbe9826e,0xbd2c2537,0xbd5c9fec,0xbdd1ca91,0xbdfecf24,0xbe0b9551,0xbe26a621,0xbe07f7f7,0xbe257bae,0xbe264979,0xbe12844d,0xbe13024a,0xbe05cd0e,0xbe2e26bf,0xbe3d3ace,0xbe597f26,0xbe8e4d09,0xbeab3024,0xbec938c4,0xbedf1782,0xbeee3974,0xbefae401,0xbeecea16, +0xbe9f9d7f,0xbe9b6554,0xbeb7ebc6,0xbe822d0d,0xbe7890d9,0xbe49d0a9,0xbe24c158,0xbdbd569d,0xbdaa9ea7,0xbd9a1ba0,0xbdc2bc5a,0xbd97a92e,0xbd95ce21,0xbda31660,0xbe01b0b1,0xbe07f9da,0xbe1e7bd1,0xbe32cd8a,0xbe7c8a07,0xbe6aa7a7,0xbe5b71b7,0xbe81cbf0,0xbe8e0c5f,0xbe984d54,0xbea17582, +0xbea6aa6e,0xbea12f35,0xbeaa352c,0xbea594c8,0xbeab5ded,0xbeb44e9c,0xbebdd578,0xbeb5aee3,0xbeba1670,0xbec16846,0xbeb2838f,0xbe6a959f,0xbe468a98,0xbeb648b3,0xbe5888a8,0xbe5e2e50,0xbe69dac0,0xbe2caa40,0xbe4889d5,0xbe2ba331,0xbe591295,0xbe5847ec,0xbe58484d,0xbe3eb88f,0xbe3d0fc7, +0xbe495797,0xbe5f476f,0xbe8b6ccd,0xbe6e2458,0xbea0b443,0xbe566349,0xbe59191f,0xbe81d520,0xbe821426,0xbe8d998f,0xbe8e528d,0xbe89b48b,0xbe9c57d2,0xbe8e8e82,0xbe930a0d,0xbe9d5227,0xbe905723,0xbe98077f,0xbe953726,0xbe7f398f,0xbe763b02,0xbe78701e,0xbe27474a,0xbe143257,0xbe7502f7, +0xbe97e1ab,0xbe9b0192,0xbe469c33,0xbe808079,0xbe968c96,0xbe97d05c,0xbe8ebeaa,0xbe8a1971,0xbe8d57d9,0xbe94512a,0xbe966c19,0xbe7ba505,0xbe3de054,0xbe95ac23,0xbe8ac159,0xbe5cdbbe,0xbe06fa17,0xbe21aa09,0xbe2880c8,0xbe2ea0aa,0xbe39f5a3,0xbe3feac0,0xbe41a776,0xbe4b019c,0xbe3e34a4, +0xbe432e14,0xbe3edddd,0xbe358dc9,0xbe3908ab,0xbe32b74b,0xbe2b4f1c,0xbe2e984f,0xbe2d2d3c,0xbe8670c2,0xbce7aa06,0xbcfbed49,0xbd4c9912,0xbacbbb19,0x3d40aa80,0x3db27785,0xbbb90e3b,0x3d17c070,0x3dcab305,0x3dd49a42,0x3ddafa43,0x3dcd170b,0x3dcf6a0d,0x3debde99,0x3dc9e0ab,0x3d262eae, +0x3b85276c,0x3dd273bd,0x3d4110f8,0x3be58732,0xbd2f4ea7,0xbceb624e,0xbd04ddb7,0xbd02837e,0xbd074dae,0xbd0830ea,0xbd030c43,0xbd08a1dd,0xbd15b85f,0xbd22ea60,0xbd3a0c91,0xbd3e4840,0xbd5090bf,0xbd33cf0c,0xbd20cb1d,0xbd0096e7,0xbd0816e3,0xbc96ddd7,0xbcfd0272,0x3dabe160,0x3cbf1c8d, +0x3d8be45b,0x3ce73140,0x3d171a4f,0x3d7bb494,0x3d0201f0,0x3d825eaa,0x3d7f65be,0x3d7de6e3,0x3d18525a,0x3d391084,0x3dabdbe9,0x3c5cb985,0x3d3781b9,0x3cb66078,0x3d55ddec,0xbd0ce073,0xbd28a9f6,0xbd2fc442,0xbd2fec0e,0xbd1d9467,0xbd0e9cf6,0xbd1d1f00,0xbd20bc15,0xbd434c4f,0xbd7e60fb, +0xbdb37ef9,0xbdd1a936,0xbde91f73,0xbdc412f7,0xbd9685ee,0xbd073702,0xbcabfa20,0xbd151eee,0xbd365d4f,0x3d2b8480,0x3c4d0f22,0x3d4af177,0x3d1e89f9,0x3d81599a,0x3d449ec7,0x3dbb260d,0x3d560125,0x3de88295,0x3d1ae6d9,0x3dae4289,0x3d2650b2,0x3d699747,0x3cdca5a1,0x3cb4c10e,0x3d307545, +0x3c9a21cd,0xbc3f36c2,0xbd7cd85a,0xbd464e1e,0xbd63b040,0xbd51f1d7,0xbd560b51,0xbd4dddd4,0xbd4f1acd,0xbd94a171,0xbdd243e3,0xbe0e4e18,0xbe24f88d,0xbe30c1f2,0xbe0908d4,0xbdc99bb8,0xbd12247a,0xbd19a162,0x3c1357d1,0xbc341fe0,0x3d829489,0x3d989aa4,0x3da4a012,0x3d8e1f2d,0x3da0afd6, +0x3ddc20f1,0x3ddbf842,0x3de696c5,0x3e04e1b4,0x3de3501c,0x3dec3616,0x3d1f30a8,0x3d972709,0x3d3f56a4,0x3d01996b,0x3d587672,0x3d121f4e,0x3b6140cc,0xbd862721,0xbd6dabd8,0xbd77f851,0xbd67ad1a,0xbd466e9e,0xbd3ee2a3,0xbd465306,0xbd956a35,0xbdf220d4,0xbe459aeb,0xbe785a35,0xbe885529, +0xbe57ca3f,0xbe1355af,0xbc83bd63,0x3babfaa7,0xbce6ccc8,0xbd87723d,0x3d181fa0,0x3d438a6a,0x3d639013,0x3d3a4c66,0x3d6710c8,0x3dd94d61,0x3ddf88c0,0x3df3b02d,0x3e172406,0x3e175113,0x3e01f3a1,0x3daafd7a,0x3dc00ef0,0x3db8fcdf,0x3dbb11c4,0x3cc27121,0x3dc8e6de,0xbc8731a1,0xbd7131d3, +0xbd845282,0xbd80f44f,0xbd7ec009,0xbd8cc103,0xbd6f95fb,0xbd78366a,0xbdc2cf01,0xbe284715,0xbe7b51e9,0xbe968dce,0xbe8fd577,0xbe6ce66f,0xbe0f33d1,0xbcd7ce97,0xbc3ba84a,0xbe904e71,0xbea7549e,0xbe943765,0xbe425649,0xbddea285,0x3afb6c5f,0x3cba22f8,0x3d994a54,0x3dd07c37,0x3dff48bc, +0x3e0479f6,0x3e1d4e25,0x3e108330,0x3dd772f4,0x3dd8324d,0x3d5840da,0x3dc78573,0x3c4d3094,0x3c83d1fc,0xbd559f65,0xbdb41bc6,0xbdb35907,0xbe2cf2e2,0xbe18dd70,0xbe058d5e,0xbe305287,0xbe5b5442,0xbe75ac44,0xbe507bfd,0xbe54a3ad,0xbe1fa216,0xbdbea739,0xbdea0ddb,0xbe2dd201,0xbe790af2, +0xbe9b7838,0xbe7da92e,0xbe957fc9,0xbe93ed75,0xbe429092,0xbdfb8e05,0xbda13192,0xbd212390,0x3c869418,0x3d182cbc,0x3dc93029,0x3e21994c,0x3e24cf72,0x3e2383a9,0x3de2555c,0x3e066e1d,0x3dace166,0x3db3533f,0x3d35e5a1,0x3d9b9144,0xbc0b58a7,0xbd52f259,0xbca46adf,0xbd156684,0xbce4b5b7, +0xbcbb054b,0xbcde9eef,0x3ca732aa,0x3d14fe02,0x3c98e2a2,0x3c7e2499,0xbb0ef638,0xbd2bd0b3,0xbdaaa63b,0xbdf82912,0xbd6eb81b,0xbe49a00b,0xbe143945,0xbe82ebc5,0xbe544e10,0xbe23facf,0xbddafdde,0xbd580d47,0xbccbfc78,0xb88d65e9,0x3d8748ba,0x3dc7ecd6,0x3de5584e,0x3e3154f9,0x3e322b74, +0x3d831dc1,0x3da6f540,0x3d4a0688,0xbbe9ddcb,0xbca50a34,0xbd63d05b,0xbd709647,0xbd3f6fe6,0x3cddc398,0x3de3e3a8,0x3e31354d,0x3e6594f1,0x3e4bb40a,0x3e8d9bc8,0x3e90743c,0x3ea78e6a,0x3eac96bb,0x3ea9216e,0x3e90bdc6,0x3e37ff8b,0x3deb6424,0x3d1d6f5b,0xbdbef141,0x3d12ba4c,0xbda16656, +0xbe1759bd,0xbd6ba399,0xbd8019f3,0xbcc5e718,0x3c3c1b09,0x39b526e4,0x3dd690f7,0x3e00cf96,0x3d1e4110,0x3e34588c,0x3e309a93,0x3cc6a6fe,0x3d1a17d1,0x3c48ddf4,0xbcda0be1,0xbd4ad086,0xbce17b1a,0xbc5a4e71,0xbc7aa82e,0x3d9c72ae,0x3e2be70f,0x3e882da2,0x3ead9a92,0x3ebd16b8,0x3ee112c3, +0x3ef39573,0x3f0fcfd3,0x3f10df36,0x3f0f48b3,0x3f02959c,0x3ea97557,0x3e7807a0,0x3e0f8924,0x3dc8aaa4,0x3e304fdc,0x3d249590,0x3bc24561,0xbccfb9e8,0xbc77d248,0x3bb31626,0x3c3fa321,0x3c6681ef,0x3ddd1a4b,0x3e130224,0x3d559420,0x3e2d1768,0x3e18fdfe,0x3cd16a36,0x3d373b7f,0x3cb91c38, +0x3cd9016a,0x3a88dbd0,0x3bc6452b,0xbd3fd90b,0xbb8c2990,0x3d84c11c,0x3e19a551,0x3e3c9162,0x3e91996f,0x3ed0e0b6,0x3ee8edbb,0x3f040785,0x3f09eb52,0x3f066015,0x3ef7c04f,0x3eccb1be,0x3e9e5b21,0x3e56eac6,0x3e70a855,0x3e5f608b,0x3e826579,0x3e4ddb68,0x3df0d487,0x3d84140b,0x3d59754d, +0x3d5760c9,0x3dc12980,0x3dd7e8d8,0x3df9942c,0x3e0f3ded,0x3e2a0dae,0x3e057251,0x3e00a8ce,0x3de57608,0x3dd2e09e,0x3da8e388,0x3d908fbd,0x3d8d0931,0x3d6e145f,0x3d8000c1,0x3bf84221,0x3d3be2e7,0x3defbd4f,0x3e55e975,0x3e847da7,0x3e833efd,0x3e9b0e29,0x3e9a3553,0x3e978b60,0x3e8b3591, +0x3e84333e,0x3e66ae03,0x3e4e1f9d,0x3e5d5471,0x3e77515e,0x3e944c82,0x3e6aa89e,0x3e3b1236,0x3e3619c3,0x3e1aba9f,0x3e07e97b,0x3dfbc150,0x3dd3ca38,0x3d8a3e37,0x3dd3cee1,0x3dd6649d,0x3e17dec0,0x3e01be95,0x3e0c3085,0x3e068cb1,0x3e17a926,0x3e1c485c,0x3dff1581,0x3e04a7a6,0x3e1d5d73, +0x3dbccf3e,0x3d976f3c,0x3dbc6db1,0x3da22a48,0x3da47ed8,0x3da603cd,0x3d9d04aa,0x3db0bb80,0x3dd0808e,0x3dfdad8b,0x3e02ea4f,0x3e11b1bd,0x3e190a4f,0x3e32bf4e,0x3e43a04b,0x3e5d4d6a,0x3e72c837,0x3e47da8a,0x3e4a0507,0x3e4131b8,0x3e288208,0x3e1a9d69,0x3ded1a79,0x3ddceb58,0x3d9f4635, +0x3ddf744c,0x3df00a3e,0x3e0b8fb1,0x3e0bcbb8,0x3e127ee1,0x3e14f41f,0x3e2d1172,0x3e31d7c0,0x3e51f867,0x3e505ce7,0x3e532200,0x3e595d44,0x3e3d0cf8,0x3e35e10e,0x3e2f5689,0x3e09567d,0x3e016f46,0x3ddcdd96,0x3dea17f9,0x3de94895,0x3de17fa5,0x3e036b45,0x3e104e1e,0x3e1ed95b,0x3e335b17, +0x3e47701c,0x3e5ef8e7,0x3e57c82b,0x3e3ebb61,0x3e40c779,0x3e3e513b,0x3e295252,0x3e27ac98,0x3e10c03a,0x3e0a35a6,0x3de93bd7,0x3df3ef0c,0x3e021a9f,0x3e12dd93,0x3e1bd850,0x3e19934b,0x3e2a6b44,0x3e3f23ca,0x3e5295d6,0x3e64104b,0x3e727a2d,0x3e81db8c,0x3e87e994,0x3e7d3a0e,0x3e807718, +0x3e7dd694,0x3e783ef1,0x3e6c30be,0x3e5c15ca,0x3e533e7c,0x3e53c110,0x3e4a70f6,0x3e4b078f,0x3e515cb5,0x3e54963d,0x3e5155e7,0x3e54aaad,0x3e5af8b0,0x3e4b3f32,0x3e59b5c0,0x3e4ee59c,0x3e87ae11,0x3e575197,0x3e5a8a45,0x3e661f02,0x3e4a1ebf,0x3e4dd7cf,0x3e470097,0x3e609c66,0x3e63986c, +0x3e65ef58,0x3e5da908,0x3e6359a7,0x3e6a3727,0x3e755a4a,0x3e80da06,0x3e80d619,0x3e85e506,0x3e838cfb,0x3e773097,0x3e8770d2,0x3e83986f,0x3e87364c,0x3e84c21f,0x3e7bd70d,0x3e8aee08,0x3e80e75e,0x3e8184a7,0x3e864b2f,0x3e754241,0x3e7b5f4e,0x3e7ab091,0x3e5b6d0d,0x3e5ea3ed,0x3e675342, +0x3e2980db,0x3e235b57,0x3e54ccaa,0x3e646c1d,0x3e548c24,0x3e3dd869,0x3e5613b8,0x3e5e52b4,0x3e605a09,0x3e582ebf,0x3e547abc,0x3e58dbcb,0x3e5fba32,0x3e624889,0x3e631c6a,0x3e4eeed1,0x3e61f56c,0x3e746bcf,0x3e63c79c,0x3e3455fd,0x3e3a8326,0x3e3e684d,0x3e3eb720,0x3e42cda5,0x3e424500, +0x3e3e00c0,0x3e42908e,0x3e38c83a,0x3e3bc536,0x3e39596b,0x3e32ec08,0x3e3509f5,0x3e333984,0x3e2d297c,0x3e2f990a,0x3e2e3e9c,0x3e922388,0x3d0562ac,0x3ce286ef,0x3d3040dd,0x3a730a27,0xbd1ff63a,0xbd89c828,0x3c341c2c,0xbcd664f6,0xbd97204a,0xbd927229,0xbd905a21,0xbd87323b,0xbd8926a6, +0xbda431b8,0xbd8cfaf4,0xbceee756,0xb8615710,0xbda7c97c,0xbd26c621,0xbbd98df7,0x3d21304f,0x3cdce638,0x3cf4f5f9,0x3cf94fdc,0x3d0d92c2,0x3d150b55,0x3d1667a7,0x3d115564,0x3d168995,0x3d1423d1,0x3d1f1e5f,0x3d171a9e,0x3d2cb4d1,0x3d03aefc,0x3ced5eb2,0x3cca0a15,0x3cedf9fd,0x3ce8ecc9, +0x3ccd5825,0xbd7c0346,0x3bd0d3d3,0xbcd34b6b,0x3a0d526e,0xbb4cfeb9,0xbc5c5ad9,0x3ccf90ee,0x3bbbf5db,0xbc4c100d,0xbbb7d350,0x3c172af6,0xbbc3fc5c,0xbd6d4799,0xbc1080a4,0xbd0a42b5,0xbc92c774,0xbd3746ba,0x3cc5fbbb,0x3cee7a2e,0x3d00f952,0x3d13303e,0x3d1de950,0x3d20cc4e,0x3d3a8bb8, +0x3d1ce008,0x3d06cb35,0x3ce32c01,0x3d2a1ca3,0x3d51652c,0x3da2ea06,0x3d49d822,0x3d11f38b,0x3c7a9d98,0x3cc48333,0x3cdc704e,0x3bb57aa5,0xbd0cf76d,0x3c622c90,0x3ac162a5,0x3bc382ed,0xbbf38b45,0x3c1e85a2,0x3cc0693a,0x3d63064f,0x39ea43e5,0x3d685364,0x3c68044b,0x3d00cc90,0xbc2d573f, +0xbc42e277,0xbc40d1a3,0xbcff6807,0xbcbcceb9,0xbaa8b281,0x3d06a60b,0x3cceb46d,0x3d1b30eb,0x3d50859d,0x3d788433,0x3d854618,0x3d48b578,0x3d562fda,0x3d5996a9,0x3d91c18f,0x3dab2770,0x3df96689,0x3d73767d,0x3d0810a8,0xbb9289e5,0x3c7efa34,0x3c3cf40e,0xbcd241c7,0xbcd38ce1,0x3b0ac0c7, +0x3c87e18b,0x3c645017,0x3c6f0cde,0x3c862c83,0x3d7b65e3,0x3d99fabc,0x3d004621,0x3d4a02fb,0x3d061dab,0x3d3205e3,0xbc9d3100,0xbcd3ee16,0xbcb2017c,0xbd0c023b,0xbd049d92,0xbc998a92,0x3cb0925f,0x3ccdaa1b,0x3d0f026c,0x3d642042,0x3d750b10,0x3d81cc27,0x3d185c8d,0x3ca2d109,0x3c441872, +0x3d6f718e,0x3dcae555,0x3e4479f7,0x3daf2c4c,0x3d340da8,0xbd053291,0xbc0c4204,0x39c8082d,0xbca981b3,0xbcf3d26d,0x3bfd4d3d,0x3d3c78b5,0x3d257738,0x3d2e6812,0x3d2dff04,0x3dc06c53,0x3dce48b3,0x3dbe9fac,0x3ddd3f5d,0x3dac0a72,0x3d4bc6d6,0x3cc3f5c5,0xbbdcd65b,0xbcca287e,0xbbacf828, +0xbd5778e3,0xbc1f4f99,0x3c856f33,0x3ca635e7,0x3d0629f6,0x3d834e76,0x3dacb65e,0x3db6d350,0x3d664c8d,0x3d41397b,0x3d840f89,0x3dc98239,0x3e0d8bd8,0x3e4a1878,0x3db19d0d,0x3c714969,0xbd55e21a,0xbcf76e9c,0x3d9b184b,0x3de022cc,0xbbf0792c,0xbccd4e29,0xbcf5abb1,0xbd271023,0xbc4c6dc4, +0xbc3ccf5d,0x3d2370ed,0x3d9172ce,0x3d4d5950,0x3de4f248,0x3dd5f5a4,0x3dab2fb8,0x3d3a6620,0x3c1eae1a,0xbc91a059,0xbc6e69f4,0xbd41de97,0xbca4f85c,0x3b0214b5,0x3c9536ba,0x3dbc6d1a,0x3dedb5d2,0x3e181868,0x3e436153,0x3e86bcf5,0x3e9a6f6a,0x3e8cd875,0x3e9c59ab,0x3e9f5232,0x3e9f46a4, +0x3eaad81a,0x3ea66ce6,0x3e8c4e67,0x3e37719f,0x3d8121db,0xbbcb97df,0xbd52daa3,0x3ca42070,0xbc04f0d4,0x3ce6c294,0x3cd95d94,0x3b83a0ce,0x3cf7ee2d,0x3d5829f6,0x3db22b9a,0x3df703a0,0x3df79cad,0x3d955f91,0x3d5ac92f,0x3cfa1924,0x3abefa62,0xbc3dcb50,0xbd3d6356,0xbc866e3b,0xbce1b852, +0xbd418766,0xbccca68c,0x3d9dd59e,0x3e1e7d92,0x3e85e933,0x3e7517f5,0x3e874b8b,0x3e8a543b,0x3e7a3413,0x3e5082c5,0x3e21b57d,0x3e0bafac,0x3db40c01,0x3c58f372,0x3cf03560,0x3c943b99,0x3c7c8f36,0x3ce596e4,0x3c8cf7ab,0x3c76eaa1,0x3c83adfb,0x3c9e559d,0xbc3cb537,0x3dc2d3cc,0x3df0d47d, +0xbc41e007,0x3e04bc7d,0x3dc54d1c,0xbc0b0f00,0xb8b828d1,0xbcadbab6,0xbce75ce7,0xbd0ad152,0xbd11c574,0xbc93fe49,0xbd57df6b,0xbd65cfdb,0xbd6435ea,0x3b3102a3,0x3d42e681,0x3ddffd88,0x3d7dc6e0,0x3d6d2c03,0x3cf6e913,0xbc1c0316,0xbd0d336a,0xbcd34dc4,0xbd871b6a,0xbd8fd2b1,0x3cd1ceff, +0xbc5fda6c,0xbd7e2da6,0xbc5c982e,0xbac097bd,0x3c447a1a,0x3cadb3bd,0x3c89a3e0,0x3d0a8164,0x38d9a605,0x3de4f43b,0x3e03d5f1,0xbd8e741c,0x3dda6fe3,0x3d96a5d5,0xbcae3744,0xbc9b6542,0xbd524a5b,0xbd6def08,0xbd615f15,0xbd8ec601,0xbd8e3bd0,0xbdc05eeb,0xbdcdc5ef,0xbdf3c981,0xbe020e2a, +0xbe175124,0xbe151a7b,0xbe51e1ee,0xbe6e95b1,0xbe9355af,0xbe8f0254,0xbe977a14,0xbea0b5a7,0xbe7dfef9,0xbe408978,0xbc0b3024,0xbdab6f89,0xbdf26069,0xbdd1a9de,0xbd4fd480,0xbc8d600e,0xbc50f5af,0x3a6e7edc,0x3d1ab83d,0x3d5a25f5,0x3d790086,0x3d5c1230,0xbd0cc5a6,0x3d1a9c37,0x3d830417, +0x3d2e20f7,0x3be3cf7e,0xbcdbb9e2,0xbd31abb4,0xbd8ccd26,0xbd9b76c8,0xbd92efd8,0xbe015165,0xbe269511,0xbe4c4106,0xbe766e2b,0xbe9ae87a,0xbeb1154d,0xbeb1f2c5,0xbebb5018,0xbec757dc,0xbec70f69,0xbeceb2c2,0xbec4b97b,0xbe9e0bd7,0xbe573907,0xbda4d4a2,0xbe066663,0xbe222e6e,0xbe3cb4b3, +0xbdebcc6a,0xbdcec53f,0xbcccf817,0xbc38bb7e,0xbb9608d5,0x3b78d556,0x3d6bfade,0x3d660d1d,0x3c8a025f,0xbb796fa1,0xbc9bf9b7,0xbce2e73f,0xbd1befc2,0xbd25f721,0xbd71921d,0xbd5e3fd8,0xbda13ba5,0xbdc6860e,0xbde47959,0xbe157ec7,0xbe3b8c19,0xbe7e97fc,0xbe9ad137,0xbe9b3eb5,0xbebbb2d9, +0xbeb3ddb2,0xbeaf6f4b,0xbea2966b,0xbe9a3f33,0xbe9ee43d,0xbe7ef3be,0xbe4a859a,0xbde53a60,0xbe12e9e0,0xbdf18b54,0xbe01db0c,0xbde43834,0xbdcfaad1,0xbdac412e,0xbd9a79ca,0xbd3d6e27,0x3ca0ba34,0x3c78f7af,0x3d4b12cf,0xbce64537,0x3d2caff1,0x3c333ffb,0xbc70bcc3,0xbd409f1c,0xbda8dd71, +0xbdbdcfff,0xbe00ba75,0xbdfc8576,0xbe0f954a,0xbe1e52eb,0xbe2dc668,0xbe33b0b7,0xbe351008,0xbe396f44,0xbe3c6d17,0xbe375e7b,0xbe3b7ab1,0xbe470048,0xbe5171f7,0xbe604a0a,0xbe5ca81b,0xbe59e5d3,0xbe418705,0xbe1dea65,0xbe07532b,0xbdfd8fa7,0xbdbfde07,0xbdd7c54d,0xbdace4d5,0xbd8362ab, +0xbd4d0d61,0xbccd1c23,0x3bd9b6d7,0x3a8e18c0,0xbbc44584,0xb9657d52,0xbccec57e,0xbc6b66a8,0xbd5ea5f2,0xbd84547c,0xbda1dccc,0xbdd4abd4,0xbe014625,0xbe2389fa,0xbe1d8d66,0xbe4263b5,0xbe2bb35d,0xbe3796e8,0xbe20914f,0xbe229d07,0xbe1c5afb,0xbe28f00f,0xbe3000dd,0xbe33b276,0xbe3e27e9, +0xbe3fd968,0xbe44f6d6,0xbe442bd9,0xbe3da2ec,0xbe3dfb45,0xbe13df67,0xbe14f575,0xbe01e931,0xbdd3509c,0xbdbd5358,0xbd9a061e,0xbd49aa4c,0xbd35a0a7,0xbd30a828,0xbd1d577e,0xbd53be10,0xbd13371b,0xbdad807a,0xbd5e825d,0xbdbc73d7,0xbd8de146,0xbde860f6,0xbe01616f,0xbe1452e8,0xbdeb6af4, +0xbe46bf28,0xbe481633,0xbe425846,0xbe439ab0,0xbe3b6044,0xbe33c0a0,0xbe2a5103,0xbe3653b2,0xbe3e1301,0xbe43cb86,0xbe43bbf7,0xbe48ee34,0xbe4b4ec6,0xbe425d7c,0xbe428161,0xbe4508a6,0xbe2c6a34,0xbe341f07,0xbe3ab78a,0xbe2d0195,0xbe2df851,0xbe2e4a1a,0xbe310cdb,0xbe297d31,0xbe07fb7b, +0xbe170a93,0xbe11f03e,0xbe12efed,0xbe09474e,0xbe1161ef,0xbe075035,0xbe1948e7,0xbe240015,0xbe050137,0xbe368b1c,0xbe01d40c,0xbe4e8f87,0xbe4020aa,0xbe5198c6,0xbe51fda2,0xbe59f5d0,0xbe5b5669,0xbe564aef,0xbe62cc44,0xbe53f8fb,0xbe50f387,0xbe576618,0xbe461a21,0xbe4a8200,0xbe4a97cf, +0xbe2ecfbc,0xbe3115eb,0xbe3a9b6c,0xbe0c778e,0xbe0d88bf,0xbe15edee,0xbe051776,0xbdc308a5,0xbe0664bf,0xbe021cc5,0xbdcf6947,0xbdc7f6b3,0xbdc65cf1,0xbdc6c6ce,0xbdc4c55c,0xbdbde12e,0xbdbdd070,0xbe0f59dc,0xbe1a52e4,0xbdc88ddf,0xbe1630d7,0xbe295c13,0xbe1b9ddc,0xbe168432,0xbe1aa812, +0xbe19b795,0xbe1ba1b5,0xbe1acdff,0xbe1871f3,0xbe1b9645,0xbe177842,0xbe1a9b32,0xbe1a0ff4,0xbe161613,0xbe180854,0xbe170e2c,0xbe126ce0,0xbe155991,0xbe13d543,0xbe66fb5f,0x3d28138b,0x3caea88a,0x3bbfaf89,0x3d36bd9a,0x3d9ce977,0x3dc83dac,0x3d0f7001,0x3d8a5084,0x3dd523bb,0x3de32eb6, +0x3de45b4f,0x3dcbb1ee,0x3dd254fd,0x3de8ef33,0x3ddde9ed,0x3d8e03d7,0x3d2cb57e,0x3dd4df30,0x3d960aa9,0x3d332224,0x3a0511cc,0x3c435fc0,0x3c1c21fb,0x3c0a3356,0x3bdfa39f,0x3bc8c934,0x3bd50590,0x3c1afe2b,0x3c35ce41,0x3c541e61,0x3c812dc1,0x3c937ce6,0x3cb0761c,0x3cac9784,0x3cb942eb, +0x3ce2d96c,0x3caa61ba,0x3d2bc346,0x3d169e7d,0x3de0231c,0x3d3cb331,0x3d93f16a,0x3d40fa4e,0x3d6609fc,0x3d5c95d1,0x3d370aba,0x3d9916a7,0x3d886e34,0x3d8e284e,0x3d7410c4,0x3da4cd20,0x3db84e30,0x3d45036c,0x3d8642c6,0x3d4dc7bb,0x3d9637f3,0x3c3f129a,0x3c380921,0x3c44d205,0x3bb3c004, +0x3ba47a0b,0x3bafc0b4,0x3ba3b996,0x3c3eb3e7,0x3ca35c8e,0x3cd96fe0,0x3cf9e82e,0x3cddefaf,0x3ce1669b,0x3cec87dc,0x3d21d42a,0x3d8a663e,0x3d5087d6,0x3d3549f7,0x3d57d191,0x3da4602e,0x3d0b007a,0x3d37f897,0x3d44ced1,0x3d814a50,0x3ca9f0d8,0x3da27038,0x3d4edbe5,0x3d8beaf7,0x3d145585, +0x3d8737bb,0x3d8ee765,0x3d55eadb,0x3d035325,0x3cf7bb2b,0x3d2017f8,0x3d005477,0x3b341aca,0xbc9e31db,0xbc56965d,0xbccb2335,0xbcefe1b9,0xbd0bf082,0xbcf6ba8e,0xbc3ea6a5,0x36aeaaef,0x3c743a0d,0x3cc86653,0x3d06aa25,0x3d078378,0x3d37cc50,0x3d66942e,0x3dc53a34,0x3d8000e2,0x3d9fe6f9, +0x3da50c4c,0x3d9a60ea,0x3d527da7,0x3cdc33ad,0x3d01c376,0x3d0be963,0xbba4c465,0x3d6958a6,0x3d8cb9ae,0x3d299a6e,0x3d5e1966,0x3d837ed1,0x3d8a3378,0x3d0d08f3,0x3c74c51c,0x3c7f7e6f,0x3ca43c1b,0x3c9acbff,0xbaf204da,0xbcd04ba8,0xbc950f86,0xbd1010f3,0xbd2fa2ed,0xbd1f380f,0xbd0d8750, +0xbc30f8d0,0x3c6c3363,0x3d209c30,0x3d261259,0x3d129b98,0x3c80e20c,0x3d232f07,0x3d83d5be,0x3e1f1931,0x3dd545f1,0x3d856eb0,0x3d7d659d,0x3d776e0b,0x3cc1dc1e,0x3c6eb1ce,0x3ce6afee,0x3ce34443,0x3989b55e,0x3d8da56e,0x3db2dbbe,0x3d09bd14,0x3d84a323,0x3d591890,0x3d5ab44e,0x3af64743, +0xbc841bc4,0x3b318489,0xbcd98fa1,0x3c864829,0xbd32c228,0xbd5a5753,0xbd76ec5f,0xbd89829b,0xbdb0331a,0xbdba3d3a,0xbdad9902,0xbd3c0494,0xbc2847d1,0x3c6084d5,0x3d119608,0x3d3273cc,0x3d154034,0x3d8135c0,0x3db91aa6,0x3e24fef6,0x3dc13055,0x3e351929,0x3e15bc0c,0x3e4b8538,0x3e47eb7f, +0x3e0592c2,0x3dc44231,0x3dae4192,0x3d8bc4f7,0x3d63a4c8,0x3d6a5220,0x3d4b74e8,0x3d959fdc,0x3d6a6325,0x3dc35df7,0x3d2bca17,0x3c1e3e14,0x3ce69704,0xbbdc1968,0x3b72bc2b,0xbd3a5e25,0xbd98202f,0xbdb51710,0xbe1393a4,0xbe02c022,0xbe0654f7,0xbdece46c,0xbde1215a,0xbdcbd030,0xbd80f1c6, +0xbd957f1c,0xbd7a316b,0xbd91f52f,0x3d4983c9,0x3dcdf0fa,0x3dc65ee6,0x3e36320a,0xbd4315be,0x3d29337e,0x3d135d22,0x3d0ef82b,0x3d5179a3,0x3d35fd05,0x3d892807,0x3dd011c9,0x3dfa3fbf,0x3dddb1ec,0x3da2e2a4,0x3da53b69,0x3d8b1d79,0x3d87e8af,0x3ca18087,0xbc00ce80,0xbc33219c,0xbcec99b1, +0xbcf00c28,0xbdc33938,0xbe195869,0xbe2c27c3,0xbe449d8b,0xbe9b45dc,0xbea86ce5,0xbeae18fd,0xbe854624,0xbe534d3c,0xbe0ceb99,0xbdbfaf05,0xbc96a403,0x3cda4412,0x3d9c3c5a,0x3da3dd65,0x3da42b66,0xbd0a6c09,0xbd1afe07,0x3bc4716a,0x3c360033,0x3d002b91,0x3d399383,0x3d324fe7,0x3d838f17, +0x3d925c4a,0x3dd1b21a,0x3dfd0562,0x3cc214c3,0x3dd0d1d0,0x3db7a236,0x3e0713c8,0x3d53b08c,0x3ccd4964,0x3cd82072,0x393f36cc,0xbc875edb,0xbd986356,0xbdbf492b,0xbdfd0002,0xbe116195,0xbe4df097,0xbe55e80e,0xbe538937,0xbe0938a4,0xbdc08b72,0xbd8dadb1,0xbd4ebde1,0xbd14385a,0xbdb753a3, +0x3d95a641,0x3d9969bb,0x3cceb2d4,0xbc240a19,0xba999994,0x3d21508d,0x3cbf9dde,0x3d3818b8,0x3d2ea373,0x3ce08101,0x3d43c983,0x3d8c2e14,0x3d8892b4,0x3da27eb7,0xbc126a18,0x3d823913,0x3d8b9b9c,0x3e0ab123,0x3d6c48b4,0x3d04dc41,0x3d36b144,0x3c5821cc,0xbc304461,0xbd42d012,0xbd4e6d3c, +0xbd8b946f,0xbd9eccee,0xbda846a0,0xbd87a14d,0xbd340670,0xbc85c6c3,0x3a3ddd78,0x3d03d95a,0xbb7d814a,0xb93fb0d7,0xbbaafbfc,0x3e03120d,0x3e0019a3,0x3ccf1d0e,0x3c6067fa,0x3cbe3bee,0x3d9858be,0x3d175f0e,0x3d16e960,0x3d14e130,0x3d2b7c5d,0x3d4b9187,0x3dc3bcff,0x3d78d3eb,0x3d1dee0a, +0xbc47e10a,0x3c8639dd,0x3cacd0e4,0x3d971e38,0x3c8958d5,0xbb84bb24,0xbb83d466,0xbbb2eb32,0xbd0e32b0,0xbd0e3ca3,0xbd2bca4b,0xbd39084e,0xbc90cda1,0xbc143cac,0x3b8cb75d,0x3b2fffc6,0x3aeb0f15,0x3c79d31f,0x3d8bde7c,0x3d80bb28,0x3e007af9,0x3e338949,0x3e5c6858,0x3e4ff582,0x3dd355fd, +0x3cf57c51,0x3d57aa94,0x3db0bfbc,0x3d5fe7ff,0x3d9cbd0a,0x3d2bb30e,0x3d31ca59,0x3d703842,0x3d9fc186,0x3d3a8fba,0x3d24da97,0xbb3bb4d3,0x3d2ddfc3,0x3d5cb002,0x3dabaedb,0x3d4e7fa6,0x3cf3a586,0x3c3ce977,0x3a62461c,0x3c923847,0x3c869168,0x3ccdd389,0x3b720536,0xbc7ae68d,0xbc23c8a5, +0x3c6812fd,0x3ca5dc84,0x3d60409f,0x3d68e486,0x3da2cfe0,0x3d2f5af1,0x3d590d6b,0x3dd5cb2f,0x3e2d5d5b,0x3e2f4e6e,0x3e0cbe91,0x3d666cc9,0x3d605ccc,0x3c9ad0c8,0x3ca479f6,0x3ca24a47,0x3cecc5af,0x3d54f4e3,0x3d85f489,0x3d1e3d4e,0x3d545ba9,0x3ca7ff1f,0x3d627495,0x3c3b1237,0x3cbf3d8a, +0x3d0f018f,0x3cfccead,0x3d463130,0x3d8086e7,0x3d955514,0x3cc40bf1,0x3d7675b1,0x3d82b5e1,0x3d38163a,0x3cedf8f7,0xbc4f778b,0xbcee6802,0xbd37b458,0xbd24b5f8,0xbd2ebcc0,0xbd051eed,0xbbba6670,0x3d2f1168,0x3dbc728e,0x3dfc506f,0x3e113599,0x3e1fd309,0x3dcccef0,0x3dbcd92b,0x3d8025fb, +0x3d86c1aa,0x3d3b7788,0x3d1764ad,0x3d664a4e,0x3d3d6d59,0x3d2d6b67,0x3d3875c9,0x3d6cfdc0,0x3d54d413,0x3d76bed3,0x3d0e7d5b,0x3d853233,0x3d41501e,0x3d4ceb29,0x3d3addc7,0x3d7b8688,0x3db0fe21,0x3d805dff,0x3de57197,0x3d88fb86,0x3d65dc03,0x3cbc427b,0x3c13e715,0xbc361fa7,0x3b48efd1, +0x3c14f874,0x3c27dc1a,0x3ce86f12,0x3d312449,0x3d805f0f,0x3db32ae8,0x3de0e678,0x3e13c129,0x3dee851d,0x3dd7167f,0x3ddab36c,0x3da55f23,0x3da0ec0c,0x3d556137,0x3d273b16,0x3d36f3e3,0x3d7621c3,0x3d5da7cf,0x3d89f61c,0x3d530081,0x3dc74a4b,0x3d69a59b,0x3db33b0a,0x3d1ef17a,0x3d8f22a7, +0x3d70fe1d,0x3d92eb51,0x3cd686cf,0x3de12fcc,0x3dd376c5,0x3da30f07,0x3d9690f2,0x3d66eb3d,0x3d29ec6f,0x3c90ee51,0x3d1273dc,0x3d348b11,0x3d5d88b8,0x3d768485,0x3d8c02ec,0x3d8f50ee,0x3dad8a6a,0x3dcaa796,0x3deecf21,0x3ddb023e,0x3dbd70e1,0x3dd70f39,0x3d70e81f,0x3dbad97e,0x3dc80be4, +0x3dd3ca02,0x3de85539,0x3d9c688b,0x3dca3a75,0x3d9c226e,0x3d914d64,0x3d72dfdc,0x3d9618fb,0x3d7a849a,0x3d99ac3b,0x3da564b2,0x3d28e05a,0x3dbb1749,0x3c9f4c08,0x3dd2f912,0x3db6bec9,0x3dc3857d,0x3dbab516,0x3db7c774,0x3db597f8,0x3dad9a11,0x3dbcc06f,0x3dafdc01,0x3dad54d2,0x3db2d849, +0x3da6db27,0x3daca9b1,0x3db464f8,0x3d9fe3da,0x3dabdad3,0x3dc007ea,0x3d9ee637,0x3db1b168,0x3da115b2,0x3d5fb770,0x3ca9c4d6,0x3d97a044,0x3d74e677,0x3cd2112d,0x3c8f1b7a,0x3cb3c831,0x3ccee3a0,0x3cb4650d,0x3c663026,0x3c504a93,0x3d8595bf,0x3da982b7,0x3c5c31a9,0x3d758710,0x3db36d32, +0x3db715da,0x3da125ed,0x3da2a2bd,0x3d9ec811,0x3d9e251f,0x3d98bf4e,0x3d916041,0x3d949f7d,0x3d936d9d,0x3d980286,0x3d98e1af,0x3d947e3a,0x3d950eba,0x3d9907ef,0x3d98e60b,0x3d9e131b,0x3da243ac,0x3deb5839,0xbd9f6c1f,0xbd4c7306,0xbd370b48,0xbd852aa1,0xbd96ebab,0xbd9e8f2c,0xbd51d08b, +0xbd8595d1,0xbda33337,0xbd9f22f3,0xbd9b2ee0,0xbd923b2a,0xbd93a4f9,0xbd9c426d,0xbd908264,0xbd7b8cc1,0xbd53f8c9,0xbda238ef,0xbd90b399,0xbd69ee47,0xbd05983e,0xbd26753b,0xbd237447,0xbd189644,0xbd29b3fd,0xbd3426c9,0xbd3fb7d9,0xbd3c1652,0xbd3af704,0xbd337fd2,0xbd3f88fa,0xbd41a2a8, +0xbd5b8a29,0xbd44ced4,0xbd41cdb2,0xbd4df4bd,0xbd4abad5,0xbdd03059,0xbdb40fd5,0xbdc73b91,0xbd91009e,0xbda2a5a5,0xbd820241,0xbd81c42b,0xbd7deaab,0xbd307922,0xbd64a40c,0xbd58bd66,0xbd5611c5,0xbd3098a3,0xbd25a79e,0xbd6d0b4b,0xbd46713d,0xbd8a05a0,0xbd7f6a52,0xbda07d29,0xbd35cf55, +0xbd3dcbb4,0xbd435cfb,0xbd1f5c12,0xbd4773be,0xbd626b5a,0xbd928935,0xbd958b7a,0xbd991889,0xbd907a5a,0xbda07b5c,0xbda2668d,0xbdcf5168,0xbdb65003,0xbdcaf174,0xbdefcb97,0xbde054f6,0xbde7975b,0xbdd02f19,0xbdc15158,0xbd8c9047,0xbd718c50,0xbd55f2e3,0xbd46648c,0xbcf62b1b,0xbcea98ba, +0xbc429979,0xbcba2b9d,0xbc0b08ef,0xbc67689d,0x3ba99045,0xbc810520,0xbc9f3d1f,0xbd30782f,0xbd53432d,0xbd6935f0,0xbd1671ba,0xbce79413,0xbd14f65d,0xbca56fe0,0xbd27dfff,0xbd5afbc0,0xbda3172b,0xbda16be0,0xbda171ed,0xbd99a860,0xbda8bd1a,0xbdc30d69,0xbe038520,0xbdde3b87,0xbdd6a81c, +0xbe078c39,0xbe018032,0xbe468168,0xbe1300b1,0xbdb36ae3,0xbd9f4a31,0xbd691708,0xbd3ba4eb,0xbcdca6a5,0xbcc8b2cc,0x3b893f06,0x3c804d18,0x3bffa0bf,0x3c59bbfe,0x3c5f35ac,0x3d6b8ccc,0x3c432519,0xbb481c81,0xbce3e1fd,0xbd401ebe,0xbd54f700,0xbd0bccbf,0xbcc440ca,0xbcdcf5b3,0xbbb5f56c, +0xbd135b4e,0xbd7820a7,0xbdd57425,0xbdd576de,0xbde219f5,0xbdd97a23,0xbdf99b80,0xbe06f7e6,0xbe469872,0xbe27c6ba,0xbe3981c0,0xbe73dd13,0xbe519ee7,0xbe317b4f,0xbe08060d,0xbdb89b24,0xbd6ae7c5,0xbd31e83a,0xbcd8d956,0xbc5f8d6a,0xbc499704,0x3cfedf1f,0x3d6d4125,0x3d1b9304,0x3d3285b1, +0x3d3e739a,0x3d826a34,0x3cb3fbe8,0x39c1e8e7,0xbd0847f7,0xbcb04d5b,0xbd966935,0xbcaa106c,0xbc38e134,0xbc6bc100,0x3c301cfb,0xbcafc709,0xbd67c39c,0xbdce6dee,0xbde13f27,0xbde78337,0xbdcfbc29,0xbdecec31,0xbe0e73a5,0xbe498c7f,0xbe2c7507,0xbe17544c,0xbe5d7b0d,0xbe4a9ea4,0x3db00997, +0x3e066686,0x3e0b4d96,0x3dd512f1,0x3da2f2be,0x3d4e8662,0x3d49874b,0x3db42f42,0x3d95a1d2,0x3d7722c7,0x3d927c5f,0x3c8a271b,0x3c206a37,0x3d8ed855,0x3c880cb2,0x3c46c8d5,0xbd34e87f,0xbc49ffdc,0xbd2b8b18,0xbc8eacac,0xbc4bffcb,0xbcd485ce,0xbc174278,0xbd340ef4,0xbd137983,0xbd7714cd, +0xbd3006ad,0xbd6a5865,0xbd85d5d5,0xbde7049e,0xbe0ea400,0xbde2d739,0xbe3dd1a6,0xbe125f1a,0xbda21ccc,0x3d43c512,0x3e1b1b26,0x3dccdb57,0x3da0ba57,0x3da6f7e3,0x3d96c1bd,0x3dc95b41,0x3dcf393f,0x3d350f4c,0x3dd28333,0x3dca6b46,0x3d13cfcd,0x3d728a6c,0x3d6ce25f,0x3dc3e37d,0x3d050064, +0x3cc9c433,0xbc7dd6fd,0xbc0ec784,0xbd40fcee,0xbc622f4a,0x3ce34142,0x3c2755e2,0x3cc4f9f3,0x3d514665,0x3d71c1f0,0x3cc17997,0x3c234ec5,0x39e60f28,0x3bcfa05c,0x3c8c1f59,0x3d459e52,0x3e11e378,0x3e348364,0x3e3c8fd4,0x3d1cd429,0x3e0e0f89,0x3de376a6,0x3db8e474,0x3da41943,0x3da52b1d, +0x3da0b5b3,0x3d58510e,0x3d6fba1d,0x3e10838a,0x3da324c5,0x3d96a739,0x3b820563,0xbb880c44,0x3c4a0ea0,0x3e2754c2,0x3c8eccf0,0x3b3cbe80,0xba530ef4,0xba51417c,0x3b6de0c3,0x3ca5aa46,0x3d1a0de4,0x3c9a5666,0xbbc69a04,0x3c3ad20b,0x3c968686,0x3b9d62f9,0x3c154405,0x3afb98dc,0x3cd65c8f, +0x3bfa4d2f,0x3d30dddc,0x3e54d0cf,0x3d81b1bc,0x3d26caa3,0xbd6335fd,0x3d93032c,0x3c168a82,0x3d0aef5c,0x3d38d517,0x3cd52f55,0x3cf90c5f,0x3b8df7df,0x3cac82a2,0x3e24c786,0x3d395d36,0x3ca93c33,0x3c7cc45a,0xbca096d2,0x3c1f656d,0x3e37d308,0x3d25db84,0x3c4348af,0x3c8ebea6,0x3c9bf3e9, +0x3ca5eeba,0x3d08d305,0x3d529945,0x3d2de04d,0x3c4245f6,0x3d0f39c6,0x3d17d896,0x3c890585,0x3b4e172c,0xbd1c19ea,0xbd4f264b,0xbd511ba0,0xbcec7d17,0x3d2a4f3f,0xbd88d4ef,0xbde0711f,0xbe2dbd99,0xbd23ca42,0x3c893bcf,0x3c6a40e6,0x3cdbdb09,0x3cc104d7,0x3ce2a65b,0x3d0940c5,0x3d4f4f21, +0x3da287ca,0x3cbb3aaa,0x3b1c93a1,0x3d37c267,0x3ca158b4,0x3d4d6c18,0x3e0c9b3e,0x3d838e5a,0x3d52182b,0x3d5da835,0x3d5b8110,0x3d784c33,0x3d908e41,0x3d875354,0x3d6fb397,0x3d2782d2,0x3d44f8de,0x3d093bf3,0x3b70b4af,0xbd7ebfff,0xbe062e16,0xbe6aab07,0xbe519dce,0xbe49d48f,0xbe03f62b, +0xbe0e959b,0xbde2b0fe,0xbe35050b,0xbc6d8d2a,0xbd88bdfd,0xbcdae01e,0xbb2a2d8e,0x3b959b2d,0x3bf9f148,0x3c9f90e0,0x3c634266,0x3cd5afe0,0x3cd874a3,0x3cf08917,0x3d0c7024,0x3d435963,0x3d2fee88,0x3d0ade0c,0x3cf3d732,0x3d1c74b2,0x3d3622e9,0x3d36402e,0x3cfffa10,0x3d0e5bd1,0x3cf19a25, +0x3ced6c7f,0x3ce2b719,0x3c10eacf,0xbcf280dd,0xbd82b17c,0xbe0c3692,0xbe2315c8,0xbe3aea9a,0xbe0e4dbe,0xbdce387e,0xbda7f9b4,0xbdbc73e8,0xbde815ce,0xbe5525c0,0xbdd1b758,0xbdba9897,0xbcb4f9aa,0xbc277a4b,0x3c9e9871,0x3d28f54f,0x3d2748b1,0x3d2dee24,0x3d4ec05a,0x3d3ffa71,0x3d7ead57, +0x3cbd6519,0x3d3dd5b5,0x3d1508a0,0x3d0362b6,0x3d1bda6f,0x3d01e9ce,0x3c78ecbf,0x3c4583b8,0x3d0f1181,0x3c442b03,0xbc2f6244,0xbb928c08,0x3b8d3087,0x3d19298f,0x3cd6290c,0xbc3f0324,0xbd01b9d9,0xbd40f55f,0xbd74c9b9,0xbd8aabd1,0xbd9c7b04,0xbdaf8bb4,0xbd93b19d,0xbdb1ef1b,0xbe147cc8, +0xbe008079,0xbdb2dfaf,0xbd9ec011,0xbd4ba98f,0xbcab8fcd,0xbbc09f9c,0xbc0e0968,0x3ba96af0,0x3c623ef9,0x3cde22f2,0x3cb9f6ca,0x3d09af28,0x3cba1dee,0x3d2697a5,0x3cca3ce1,0x3d048b6b,0x3cde7ddb,0x3cb2c79b,0x3c33d9f4,0xbbf93dd7,0xbae4e6f8,0xbd2ca8fb,0xbc40a895,0xbb203563,0x3c3e67f6, +0x3c6000da,0x3bcd50bd,0xbbe86a2b,0xbc98606e,0xbc98b0fe,0xbce82bf4,0xbd073a18,0xbd38b64a,0xbd4e9b64,0xbd8911e2,0xbdb2315e,0xbdc80408,0xbd3968d6,0xbd7613ff,0xbd080758,0xbcfc5316,0xbc1c9ee8,0xb9fab7f1,0x3ba439e9,0x3b87e4be,0x3c41ca1c,0x3c4a5596,0x3d0fd470,0x3c1e829b,0x3d185a62, +0x3cc35ed1,0x3d2755cf,0x3c8263b6,0x3c853c3d,0xb98811fa,0x3cca26ea,0xbd1dc342,0xbd0afcc4,0xbc82baad,0xbc3c8644,0xbbe9f5ea,0xba55d88c,0x3c87a408,0x3b05bdab,0xbbbe9ef9,0xbca21255,0xbcdaa41f,0xbd08c41d,0xbd1dfee1,0xbd279ee4,0xbd252f23,0xbd1b3dfb,0xbd19b75c,0xbbd3ee1e,0xbaa90ee1, +0x3ce99dc4,0x3c8f32f0,0x3c91916a,0x3cb63ae0,0x3c8af372,0x3d2077df,0x3cc6a35c,0x3cf8aee4,0x3cd80629,0x3d03b3ff,0x3caddb63,0x3cec4c3c,0x3c90293e,0x3c091a1e,0x3cf3bf16,0xbb8303ec,0x3d067221,0xbcba9d8d,0xbc9e3280,0xbccb8b63,0xbcd495dd,0xbcc38c96,0xbcd332c9,0xbcfa74d2,0xbd11ae7a, +0xbd16e7d4,0xbd096cc1,0xbd11b3d5,0xbd0e0624,0xbd1a9c19,0xbcfe327f,0xbcd6a95d,0xbcc606ac,0xbca04eee,0xbc52c332,0xbc8f492b,0xbc871669,0xbbed15ee,0x3bffda26,0xbc8a65d1,0xbc2511e8,0x3c1c46c7,0x3c70c346,0x3c71f9a7,0x3c78b71f,0x3c900f11,0x3cb5ad0d,0x3cba931d,0xbba21fbe,0xbc5f03bb, +0x3c903fbe,0xbbee3f7d,0xbcba1558,0xbcb6c052,0xbc7906dd,0xbc7278e7,0xbc6225ff,0xbc6b6287,0xbc5984f7,0xbc2fb836,0xbc217a7a,0xbc34f3f6,0xbc580adc,0xbc6a91c6,0xbc6e1bc3,0xbc81de1b,0xbc72c494,0xbc5ea08f,0xbc3f2146,0xbc3ee566,0xbc7e61da,0x3c95f59d,0x3c15f61f,0x3c044548,0x3cad57e5, +0x3ccccd81,0x3ce02d79,0x3c9bf0e4,0x3cd4f78a,0x3d046941,0x3cf58178,0x3cf1411d,0x3ce40194,0x3ce941c3,0x3d028b10,0x3d036774,0x3ce03b2f,0x3cad65b2,0x3ce26211,0x3cda0109,0x3ca382d1,0x3bc37e50,0x3c238c21,0x3c18af97,0x3c013a24,0x3c03f8fe,0x3c06abcf,0x3c02a404,0x3bf16c2e,0x3bc04cdd, +0x3b5ca322,0x3bad6771,0x3bd79477,0x3b9cc4d7,0x3bad342b,0x3bc9b575,0x3c173464,0x3c23b813,0x3ba697d0,0xba418b5c,0x39ce58a5,0x3b4fd088,0x3ca2dabb,0x3cbc0b6e,0x3cf1b038,0x3d0211a2,0x3ca8b464,0x3cdc098e,0x3ce61084,0x3ceff315,0x3ce5c510,0x3d164b57,0x3d2c1f10,0x3d000524,0x3cd8b9fb, +0x3cc3a371,0x3cf4018e,0x3c5eb167,0x3c5f2247,0x3c61ef59,0x3c12de4d,0x3c016d7a,0x3bbcebdf,0x3bce8f4a,0x3c0e380d,0x3c1838f1,0x3bb7d504,0x3c80d796,0x3c829c98,0x3b9278e2,0x3bf8269a,0x3c04e90b,0x3be9f4e6,0x3bb75616,0x3beeee78,0xbac1f13a,0x3a527319,0x3c14fae7,0x3cbd46e4,0x3cf614b1, +0x3d14bcb9,0x3d14a025,0x3cf0000d,0x3ca64322,0x3d0bda4d,0x3ccdfe31,0x3d1ac62e,0x3d2a450f,0x3d335b7b,0x3d17a497,0x3caa2ba4,0x3cdf0f3f,0x3ce6690a,0x3c8eca27,0x3c443e54,0x3c768590,0x3b633373,0x3b74656e,0x3b2d12dc,0x3b20a303,0x3b020624,0xba81531c,0xbc8aae57,0x3ad3f431,0x3a821f1b, +0xbc7cb288,0xbc2451f8,0xbbebf032,0x3be97665,0x3c30fbba,0xbbf70100,0xbd1321c4,0xbd675e87,0xbceb4cdc,0x3c584efe,0x3c9d996d,0x3d0b6551,0x3d2c9260,0x3cff7bcc,0x3cf49570,0x3d079b83,0x3d109177,0x3d3c922c,0x3d73cb6e,0x3d7344ac,0x3d44dfe0,0x3cabfca0,0x3ceefe28,0x3ce0ad4a,0x3ca9f81c, +0x3c8662e0,0x3c55c107,0x3b9b6856,0xbb996439,0xbc18b3b4,0xbb9b7130,0x39b3d425,0x3ba6f133,0xbc27ad72,0x3c976163,0x3c5c00c7,0xbcc3af74,0xbbaa033d,0xbb6b97b6,0xbbccad03,0xbc08a872,0x3b483c92,0xbce00338,0xbd22245e,0xbb78c4f4,0x3cdb9d4c,0x3ce5f9f6,0x3d27f91b,0x3d13af97,0x3d052b94, +0x3d2c326e,0x3d066088,0x3d00e1ec,0x3d414d1a,0x3d9bbd45,0x3d6620ed,0x3d2e2bf6,0x3c8aa4e7,0x3ca47cfa,0x3d1eb852,0x3cb1133f,0x3c38a8ec,0x3ca0028b,0xbb7456c6,0xbbf7bec8,0xbbc8d5d4,0xbbc17783,0xbb10ca85,0xbc140f0a,0xbd36d4cc,0xbb6a9958,0xbc68a145,0xbd46b9ac,0xbd1a986a,0xbcd60f7f, +0x3bea578f,0x3c449532,0xbcbbcf63,0xbd37548e,0xbcacbf43,0xbd4ebfaf,0xbd044c37,0xbcddb2ba,0xbc8335a1,0x3cd968d8,0x3d76d34d,0x3d866d18,0x3d6c76e3,0x3d33d961,0x3d5a93d6,0x3d9286a5,0x3d4282b5,0x3d33265b,0x3d34a675,0x3ce4fb9f,0x3d27e1f0,0x3d59407d,0x3cd0951c,0x3a75136c,0xbd406c58, +0xbaf1bb58,0xbcf1929c,0xbd15fc91,0xbda30b09,0xbdbd15dc,0xbdfae468,0xbd9b73ff,0xbd633f93,0x3c6ed81a,0xbdf77043,0xbe255813,0xbdba0381,0xbda60bab,0x3e3349ab,0x3e0976f1,0x3e259810,0x3e09957a,0x3e07732a,0x3da993e0,0x3daf696a,0x3da57bb6,0x3d8f71e1,0x3d8ad0e9,0x3cfcd43e,0x3d19aa16, +0x3d1232e9,0x3d958408,0x3d16c05a,0x3cf676bc,0x3c8626aa,0x3ca472e2,0x3d3204c3,0x3bf1844f,0xbcf46444,0xbc352920,0xbd0f391c,0xbd39ef0d,0xbd8fecd1,0xbdcc873b,0xbde909d8,0xbe070af8,0xbe0f5cea,0xbdccbbc1,0xbdc5ff76,0xbd6a56d4,0xbe04666d,0xbd4157c5,0x3e2ef50d,0x3e2b5f03,0x3dbf8185, +0x3d5f9eea,0x3d54781c,0x3d5103a4,0x3d170817,0x3d81e9be,0x3d9fb673,0x3e1c42d2,0x3d4fd2b8,0x3cd5dcd4,0x3cb6ab9f,0x3c6ea0a4,0x3d3d83dc,0x3e0c12b5,0x3d85034f,0x3d3cf91f,0x3cf7580c,0x3ca5b3e9,0xbb1ef22d,0xbd201471,0xbd88fd87,0xbdb96831,0xbde79c08,0xbde2b8f1,0xbe035120,0xbde15177, +0xbdda8686,0xbda3a72b,0xbd8ef5f4,0x3cb53374,0x3d25d9cf,0x3cbb488c,0xbd358222,0xbcd0b5f7,0x3d0de289,0x3da43d54,0x3c8e7df0,0xbccdb3e2,0xbc1c912b,0xbc4b2a08,0xbc552aca,0x3d2fda03,0x3d4a6e95,0x3e072e4d,0x3d15440b,0x3ba2e529,0x3d401590,0x3af63951,0x3d2b424b,0x3e01146c,0x3d66b9cb, +0x3d558d57,0x3d027c9c,0x3c8800a5,0x3c42cedc,0xbc71e623,0xbd1566ff,0xbd739861,0xbda7bd4e,0xbda62d62,0xbd90a14b,0xbd54978a,0xbc6a44d3,0x3d05ee23,0x3d40fb8e,0x3da46cb5,0x3d933c14,0x3d5f5a46,0xbcb2a644,0xbc973fa2,0x3c251795,0x3cbe28ed,0x3cac37bd,0x3c9e2f41,0x3cc39787,0x3cd11450, +0x3d234e75,0x3d1cf22b,0x3d174dba,0x3d2670a6,0x3d08fc28,0x3ce57323,0x3d6fa0aa,0x3c7d0622,0x3cd473e1,0x3d46b263,0x3d440fa3,0x3d38584e,0x3c821c48,0x3c521139,0x3c5cf8f3,0x3b1c8e2a,0x3cf5eb0a,0x3d48f24a,0x3d28dfab,0x3da0d077,0x3ddbf560,0x3df4b882,0x3e1f0c9a,0x3e31a414,0x3e4aed9d, +0x3e0a0cc2,0x3da33d3b,0x3d050a7e,0xbc8cfcf5,0xbd0442c6,0x3d90d0d8,0x3d0577fb,0x3d067adc,0x3cdf812e,0x3c2cdbf5,0x3c992240,0x3c98f6ea,0x3ce4f6a9,0x3d3c964d,0x3dac5a4c,0x3d25cc73,0x3cb450f5,0x3beeac79,0x3ccaf1bf,0x3d268772,0x3d4c7944,0x3cfcdfe3,0x3c8b3875,0xbb46fb54,0xbc26558f, +0xbc12045f,0xbc2ad98b,0xbb020659,0x3c41110c,0xbc6a9788,0x3cc321fe,0x3d2dd682,0x3d337e39,0x3db113a4,0x3dcb9a47,0x3deeee32,0x3dbf8af4,0x3d9b9999,0x3da47114,0xbc6f21cd,0xbcf68175,0x3cd8ecae,0x3cd0b71f,0x3d6cb574,0x3d3cc316,0x3d4d2e34,0x3d2483ee,0x3d04a66a,0x3cbbf27a,0x3c96bcc3, +0x3cebc47a,0x3c9aa1db,0x3c8691ac,0x3cf7c367,0x3cb65c15,0x3cce4983,0x3d180aa8,0x3d09368e,0x3cecd78d,0x3cd09bc9,0x3ca8d2a6,0x3c4f61b9,0x3cb974bb,0x3d1bf7fc,0x3d1750e7,0x3c89d469,0x3c744efc,0x3caedd5d,0x3d681490,0x3d96e2a9,0x3da27c74,0x3d94c795,0x3d8245a7,0x3d5612ec,0x3d8909b6, +0x3c5a912d,0x3b4975ed,0x3c2e3dd9,0x3d464fa3,0x3d3ee7ab,0x3d4e321f,0x3d52eb09,0x3d4c08d9,0x3d535f5b,0x3d4ee870,0x3d4ec77a,0x3d52e2b7,0x3d264375,0x3d047bf1,0x3ca8d410,0x3ced022a,0x3cdc2c0b,0x3d0c63e9,0x3ce28b80,0x3cde9605,0x3ccd3a50,0x3cae633f,0x3cb9e626,0x3c9ba9e7,0x3d066b3e, +0x3b9b2337,0xba039ca0,0xbc4aae22,0xbb59f292,0x3c733541,0x3c96f25e,0x3ce09ed9,0x3cacfefc,0x3d18dcdf,0x3d3ffadb,0x3d9200aa,0x3d25c013,0x3cd1fda8,0x3b9aa6c7,0x3cec39c5,0x3d0da203,0x3d2af753,0x3cfb3830,0x3d2bd593,0x3d3ce5e7,0x3d2f0664,0x3d30f798,0x3d300acc,0x3d0933a4,0x3cfccbcd, +0x3c95c779,0x3cd9c14d,0x3c9be92c,0x3cd24daf,0x3c908485,0x3cd05ee2,0x3cbccb1f,0x3ce46b54,0xba0d4622,0x3d04767b,0x3d00130e,0x3c70db19,0x3ba58bcc,0x3c5141c7,0x3c783aac,0x3bffad37,0x3c450300,0x3c790f70,0x3cbec8b0,0x3d251632,0x3d54af37,0x3d8ca431,0x3d58b0f6,0x3d34a7d7,0x3cd81826, +0x3cf5e366,0x3d1bdf44,0x3ceef434,0x3cc3d559,0x3c775075,0x3bcaa204,0x3b911645,0xbb02aa1e,0xbb2e8bba,0x3ad35663,0x3c5c1695,0x3ca43ae3,0x3cb7eabb,0x3ce1044b,0x3cfac294,0x3cf1bf38,0x3d02c174,0x3c906893,0x3cfe47de,0x3c1faa5e,0x3d2e8c72,0x3d16ac4b,0x3d2815f4,0x3d28281d,0x3d0c58fe, +0x3cf02fc3,0x3cdf331c,0x3d3ba8f6,0x3d60d029,0x3d7ef937,0x3d8cd7a2,0x3d90298e,0x3da5e33f,0x3d95aa55,0x3d7c3cf0,0x3d739d9c,0x3d5b94f0,0x3d3c7723,0x3d382d29,0x3d458a56,0x3d3e70d8,0x3d25b17b,0x3d509251,0x3d4917b5,0x3d2fb775,0x3d2f27e3,0x3d2056c5,0x3d19a712,0x3d192b77,0x3d160deb, +0x3d17705e,0x3d3b2ffe,0x3d498563,0x3d0cb263,0x3d3eea52,0x3d59853b,0x3d506a3a,0x3d3ee777,0x3d3e6741,0x3d3afbf6,0x3d42802f,0x3d44051a,0x3d363d37,0x3d38da3d,0x3d368c8d,0x3d3ffec0,0x3d4aee4e,0x3d50fcc1,0x3d5ff0fb,0x3d56b57d,0x3d4a2720,0x3d46423e,0x3d3fd482,0x3da8feb1,0xbd4a44da, +0xbcfa1816,0xbce4f3b1,0xbd165277,0xbd16d241,0xbd056682,0xbcee26c5,0xbd04f4d6,0xbd062d81,0xbd0e3106,0xbd11d04a,0xbd0a6bb2,0xbd079388,0xbd09b8c0,0xbd0c27f7,0xbd040882,0xbcf266b7,0xbd10ccf7,0xbd179759,0xbd0c2623,0xbcd12196,0xbce3a414,0xbce7fa17,0xbcebfe9c,0xbcf12f7f,0xbcf1d9e9, +0xbce20887,0xbcfcc8f3,0xbd02ec76,0xbd044fdc,0xbd064319,0xbd0bb80b,0xbd355558,0xbd22f17f,0xbd216620,0xbd219509,0xbd0823ee,0xbd36d49c,0xbd35eea2,0xbd3e5e5a,0xbd1ec969,0xbce8ad00,0xbcce79a1,0xbcd6312b,0xbcbfd1a0,0xbce734dd,0xbd04f2ac,0xbce6193f,0xbcca3895,0xbcbfe209,0xbcee9061, +0xbcc6de19,0xbcca7338,0xbd036c3e,0xbd0fbe2d,0xbd24ae1c,0xbcf0b9ee,0xbceeb53e,0xbcfdfcda,0xbd0ae5f1,0xbd078437,0xbd056ff6,0xbd0111b8,0xbd4623be,0xbd5f4844,0xbd5c7199,0xbd5574cc,0xbd56f794,0xbd9ff7bc,0xbd895c20,0xbd8849ac,0xbd8f1b8b,0xbd4ec2ad,0xbd37b5e3,0xbd2082a1,0xbd3085e2, +0xbd055435,0xbbe0c45e,0xbc15f905,0xbb793417,0x3a27b113,0xbc560ee9,0xbc67b236,0xbc399bd0,0xbb6051ca,0x3a6209bd,0xbc178dc9,0x3a1e35c1,0xbb2fbae4,0xbc83dbd0,0xbcd7f319,0xbd06ac60,0xbcbbee04,0xbcad22e0,0xbcd71cca,0xbd05f438,0xbd016c7b,0xbd0d249f,0xbce222f9,0xbd58ba76,0xbd71d5c5, +0xbd848790,0xbd6904c4,0xbd9703b2,0xbdf72f8c,0xbdcaa30b,0xbdc59242,0xbdc18ec3,0xbd795c20,0xbd64e1f9,0xbd4f54f0,0xbd1d5fa4,0xbd0ceadd,0x3c19edad,0x3c664e61,0x3ca15be5,0x3c93d81d,0xba880376,0x3b6fac7c,0x3c776e9e,0x3cb44ef5,0x3cd724ac,0x3c4acaa9,0x3cd5fd69,0x3c9f61a1,0xbb5ce870, +0xbc826879,0xbcaa2a72,0xbc1bf6aa,0xbc45d264,0xbc4662a2,0xbce1b0c6,0xbcc7cd83,0xbd001f20,0xbcaa2a39,0xbd8af2dd,0xbdaba1f2,0xbdb8ccb7,0xbda36622,0xbdcbd791,0xbe1a168f,0xbe0292f2,0xbdf1104b,0xbe0232f1,0xbd915d18,0xbcf8c876,0xbce54611,0xbcb97fa2,0xbbc847cc,0x3d1f53d7,0x3d05539b, +0x3d37b921,0x3d2b1f37,0x3cc45fff,0x3cc7ac79,0x3d17c25c,0x3d1bc676,0x3d5e09e9,0x3d61b2df,0x3d6d6314,0x3d2d4772,0x3bdf7bd4,0xbad13d8d,0xbc86d50f,0x3a27ac5b,0xbb41dd9a,0xbc48d929,0xbcdb65ee,0xbcc45057,0xbcfb4583,0xbca9a7f3,0xbd8d8ff7,0xbdb6640b,0xbdbaab6e,0xbda7da5f,0xbdddb2f0, +0xbe486e5a,0xbe1f4286,0xbe20279c,0xbe14bf23,0xbd84cf1d,0xbe064beb,0xbda21efd,0xbe0b84bf,0xbe06f686,0xbd8959c4,0xbc71c938,0xbb222abe,0xbceb473b,0x3d17edeb,0x3d7a5ab5,0x3c9da924,0x3d777d30,0x3d6765a3,0xbb61acdd,0x3d06232e,0x3d05c576,0xbba68695,0xbc7d3a1c,0xbcfab2b2,0xbceff998, +0xbc9cd5c6,0xbbf75a04,0x3c74010c,0xbc9b325a,0xbd1812cc,0xbd76a89f,0xbd94015e,0xbd9218a3,0xbd8f9d29,0xbda2a155,0xbdd50e34,0xbe181d17,0xbddb7b9b,0xbdc84c45,0xbd0c2b4a,0xbe08e872,0x3d9d33eb,0x3e026ec3,0x3e06ba40,0x3dc3ab51,0x3d8c5616,0x3ca6cc8d,0x3cb53bc6,0x3db65985,0x3d173a16, +0x3cb7bf97,0x3c477304,0x3c42f0ae,0x3cea5eee,0x3d9169a8,0x3d38236a,0x3d1b9110,0xbb1ad884,0xbccc5fde,0xbd5d78f2,0xbd2bdb65,0xbc21f385,0xbccfffda,0xbd289804,0xbc991b68,0x3a61ce88,0x3d0c1dd1,0x3c9dcfeb,0x3c337040,0xbc9946bb,0xbc33bf68,0xbd901142,0xbe851eeb,0xbe3aaeed,0xbe2e2320, +0xbd8f52c4,0x3c8901dc,0x3d2289f6,0x3d696b85,0x3b200ba4,0x3c8838e2,0x3cf1f0c1,0x3da61bec,0x3db62f82,0x3db6204c,0x3c9c80ae,0xbc9a207f,0x3c2002c9,0xbc453c9c,0x3c54768f,0xbc8a815e,0x3d4b8350,0x3d43401e,0xbd261151,0xbcb7c27d,0xbd316532,0xbd0eb7f2,0xbd151fd2,0xbd05e256,0xbccf6ea2, +0xbcf5ab94,0xbd12c1b7,0xbd00ebc2,0xbd4f428e,0xbd2d1c72,0xbcaace0d,0xba67df90,0x3c715c2f,0xbcb2c88c,0x3d88e724,0x3e054c63,0x3e5764f5,0x3d993d89,0x3cee8762,0x3c417cf6,0xbcadb234,0x3ba4a29d,0x3cae43b4,0x3db7c9ae,0x3db52883,0x3d3a9a71,0x3cf1a87a,0xb9eed890,0x3ccf4452,0x3bb0b06e, +0x3ce4de25,0xbd20b25d,0x3d83d00b,0x3d926934,0xbd12df94,0xbc5911f3,0xbd07ac9a,0xbcdf822f,0xbd4b81af,0xbd228287,0xbca1f6ba,0xbd094327,0xbd24c31f,0xbca595fa,0xbc2ec52b,0x3ca0cca7,0x3d806da5,0x3de3dfeb,0x3e231620,0x3e214df2,0x3e159c80,0x3e1b9e1f,0x3e57b33d,0x3d9b0f84,0x3c4cd26e, +0x3c8e85e6,0x3ccb8e51,0x3caa0233,0x3c3b1288,0x3c9f55b2,0x3c850154,0x3cae63a9,0x3d72aef7,0x3d73ec59,0x3d08f95a,0x3d132349,0x3d262166,0x3c9f7af0,0x3d794acf,0x3d81902b,0x3b7ad4ad,0xb93bb30f,0xbc8fdce6,0xbc84905a,0xbd096cd9,0xbd1023c7,0xbcea1f07,0xbd404d0f,0xbd1c3ced,0x3c174aed, +0x3cf560c8,0x3d87f0e3,0x3d910fc3,0x3e1862a6,0x3e0a810f,0x3d3ed011,0xbc2011ad,0xbd992d1a,0xbd109ade,0xbd073e5e,0x3caf2ee9,0x3c0ef02d,0x3c048537,0x3c59b986,0x3cbd03b5,0x3d561173,0x3d6a2c1f,0x3cce3ff9,0x3c8f1ebf,0x3bb623e5,0x3ca2b403,0x3b1695a8,0x3a434997,0x3c9aedb0,0x3b772217, +0x3b6adf95,0x3bfa570a,0x3c19dd6f,0x3871300c,0xbc30de26,0xbc82f997,0xbc646fa6,0x3d16afa0,0x3ce8bd23,0x3d163136,0x3d735430,0x3d2a8c97,0x3c9f4a60,0xbc9cbfc1,0x3b14ca4d,0x3c038ee3,0xbc017d86,0xbb8f8f79,0x3bfc7d6a,0x3d0a6fe0,0x3cfffa2b,0x3b2728a6,0x3b9df607,0x3b1d4818,0x3b3db8df, +0xbc188140,0x3be05931,0x3c1f5da7,0x3c630859,0x3c784515,0x3c645541,0x3b98a863,0x3ca00cb5,0x3cd292e9,0x3d02c073,0x3c8e4cdb,0x3c395085,0x3b229542,0xba0ff9b4,0x3bb1d14d,0xbc6215d7,0xbc0a3d6c,0xbbd2e1db,0xbbf06c18,0x3c972eae,0x3cce1503,0x3c75357e,0xbc0c5f15,0xbc7c20ff,0xbc5081f5, +0x3cc7fd7c,0x3c78020c,0xbd194b57,0xbd5ce597,0xbd773e97,0xbc6b5dfc,0xbc3920d8,0xba18c3a3,0x3bf72ba3,0x3b5723dd,0x3be0cbd8,0x3c127b9e,0x3c4b8513,0x3c60430e,0x3c72ad6c,0x3c6cd9d4,0x3c8ebfb8,0x3cc8fb92,0x3c8f891d,0x3c8975e5,0x3bbfce38,0x3bf5a675,0x3ba388f6,0x3c298fac,0x3c165fdc, +0x3be08309,0x3bfea648,0xbc24ae1e,0x3bbbc62b,0xb9d50019,0x3c215385,0x3ac3272f,0xbc9b73bd,0xbc6f0723,0xbc52fd66,0xbb41c787,0xbb9d9f90,0xbc579d46,0xbd25e2bb,0xbcffd527,0xbcb4b48b,0xbc25d952,0xbb87c3e8,0xbbeb2f78,0x3b1c9a25,0x3bce5051,0x3b3814a5,0x3bcda72d,0x3bbe042f,0x3b430a6b, +0x39380287,0x3c41388a,0x3c619163,0x3cdd9f83,0x3bd134bb,0x3c039912,0xbbaa8502,0x3c2c20f1,0x3c0e35c6,0x3c7313b9,0x3c5db097,0x3d12f721,0x3c852503,0x3c24cb06,0x3c7feb1f,0x3c848018,0x3ae4c7c3,0xbc1aa9b3,0xbc0c1ded,0x3baf2094,0x3c800841,0x3cd08cb0,0x3946377e,0xbc7c9a1f,0xbcf30d87, +0xbcb1293e,0xbcb0801c,0xbcb73990,0xbc5d6d8c,0xbc939b21,0xbcc7de77,0xbc61d2f0,0xbc97636b,0xbc92ef6a,0xbc8b24ff,0xbc54e6a0,0xbc430eba,0xbc74f905,0xbc9950d5,0xbca1b9ae,0xbc5ec5e3,0xbc36b94d,0xbbed99f1,0xbbd8ff2e,0xbbb1edbb,0x3c1f19e4,0x3b1e9fc2,0x3ca6a424,0x3bf2ff6b,0x3c75d3d2, +0x3c8437e6,0x3ca5fb90,0x3cf78ec4,0x3d1d193d,0x3d29f149,0x3cad28a7,0x3bd406c9,0xbbf6dfc8,0xbbd29864,0xbbdfd9f2,0xbc7f12e7,0xbc83b5c1,0xbc4bdb2b,0xbc4d83a2,0xbc812fc2,0xbcd011a9,0xbccce5d4,0xbc9f7dad,0xbc3bdf9d,0xba125856,0xbc9cc454,0xbc5fcbe0,0xbb8ac9d9,0xbb449a9a,0xb982b51c, +0x39d6a8a8,0xb7d06e29,0xb89365f4,0x38a3df33,0xbc6e4b28,0xbca9e520,0x3b98b605,0xbc172d22,0xbc929ad8,0xbcadb568,0xbca52551,0xbca6d34c,0xbcae699c,0xbcc7328b,0xbcd2c33a,0xbcbaf4b0,0xbcb769e4,0xbca249c1,0xbca1151c,0xbcc1b715,0xbce11ca1,0xbcf5510c,0xbceb7189,0xbce64a89,0xbceb2ec8, +0xbce44831,0xbd3cb47a,0x3c63fb1f,0x3bf4cf9c,0x3bf9b8e0,0x3c0d0d19,0x3bcd8c7b,0x3bb88174,0x3bfd465c,0x3c1ef049,0x3c22b4a1,0x3bf4c350,0x3bd9dcf0,0x3bbfc1cc,0x3befc1fe,0x3bfdb0b3,0x3bdda8ce,0x3c3a46c3,0x3c46fcac,0x3c08772d,0x3c2ecb7e,0x3c1ed263,0x3bbbc853,0x3bf2bee3,0x3bf7614f, +0x3bc65a91,0x3bdc15e7,0x3be04f14,0x3bd80202,0x3c05ea1d,0x3c137d38,0x3c2e4d3d,0x3bd34c34,0x3ba85025,0x3bfc2e36,0x3be71f8d,0x3bc71ffd,0x3bca727d,0x3bf47b6b,0x3c8f6868,0x3c0b96f2,0xbbb3413f,0xbafdce65,0x3bff60a4,0x3bd24abd,0x3c2efe46,0x3c85c858,0x3c0d02e9,0x3c183b49,0x3c0c5fce, +0x3c5bf94f,0x3c5a52a1,0x3c1c6645,0x3c75163c,0x3c91e6bb,0x3c87e896,0x3c3ef03d,0x3c1d6c87,0x3b915817,0x3c0cac6c,0x3c13f3bb,0x3b8008c3,0x3bf87000,0x3c166318,0x3c14dc35,0x3c89e377,0x3ca1d990,0x3cbe3223,0x3c0d8133,0x3bd660d2,0x3ca04de6,0x3c9b269e,0x3cd3f4eb,0x3ce60e21,0x3ccfc64b, +0x3c3132bb,0x3b500de0,0xbc359ffb,0xbc318bc7,0xb9cb7f6b,0x3ac9c275,0x3c008ac5,0x3cc18869,0x3c284432,0x3bdf4a45,0x3bf808e9,0x3c68274a,0x3c8a7999,0x3c19bd31,0x3ca9497c,0x3cb51f01,0x3cbfb5fc,0x3c43c186,0x3c2594da,0xbb34572d,0x3bc2a87e,0x3bc11d73,0xbb2fdf89,0x3ac750d3,0x3b41b71c, +0x3b6759c1,0x3c945a19,0x3c9bfebb,0x3d048ae1,0xbb61170e,0xbba7d95f,0x3ca872e5,0x3c9aaaf0,0x3c8deb47,0x3c78ba3b,0x3c8723c4,0x3cd147a9,0xbb6fa529,0xbd139133,0xbce3f7b1,0x3b15bf06,0xba71c332,0x3c075a46,0x3d032f1d,0x3bd1d5bb,0x3bf1e862,0x3c19ef7e,0x3cba4295,0x3cef36d3,0x3b8e9ae5, +0x3cebd5f5,0x3cf0ea9a,0x3cdd2b3c,0x3c35837b,0x3b848935,0xbc13207a,0x3b20dfb7,0x3b6f42db,0xbc37935c,0xb949e7fc,0x3bc7d28d,0x3bd700cb,0x3cf38d24,0x3d181b45,0x3d4d5d11,0x3b81e0e3,0xba2703b7,0x3d335731,0x3d2810da,0x3d6ed29f,0x3d674198,0x3d1ecced,0x3a12b023,0xbbd1bdd4,0xbd012573, +0xbd154132,0x3970fd7f,0xbbb351a1,0x3c6e1d55,0x3d1df488,0x3c882864,0x3c856fa1,0x3c9c267d,0x3d204e5f,0x3d3c647d,0x3c7cd5ba,0x3d27e111,0x3d22ffcb,0x3cf09691,0x3c433ab6,0x3c216589,0xbc49221d,0xba909e53,0x39c97e27,0xbc7f4f8d,0xbc14e948,0xbbb78eea,0xbb92701e,0x3cce7f64,0x3d0c7b37, +0x3d6f8281,0xbcac172a,0xbcb6acad,0x3d0c4a58,0x3d111e18,0x3cb31e51,0x3c6dec25,0x3c5fb4a1,0xbdc450ff,0xbda22d3c,0xbdbeb37a,0xbd97c6bb,0xbd3f7c53,0xbcb20967,0xbc8e2451,0xbcc98db0,0x3c2c0ce6,0x3d2fdf32,0x3c636c67,0x3d3ad6ed,0x3d10317f,0x3c92dece,0x3cdb4e19,0x3ca464b7,0xbb8adbe4, +0xbc66cbeb,0xbc5aa6ce,0xbcd44f6a,0xbcb3d5e0,0xbcab5d5a,0xbd00fbec,0xbcef4139,0xbca734d4,0x3c5a4700,0x3c26d31b,0x3a22b0a8,0x3bfbf43d,0xbd102037,0xbd08d4b8,0xbd9c2895,0x3cbaaaa2,0x3d24b538,0xbc462db8,0xbda4c9df,0xbdecd04c,0xbca46d77,0x3b59a029,0xbc058f2f,0xbd6ce0c7,0x3a0ae36b, +0x3c88ff18,0x3d7e0c41,0x3c9eb492,0xb9ce417e,0x3c4bd701,0x3bb1a9e1,0x3ca367c8,0x3d09ebb9,0x3d2eaa73,0x3d2139ff,0x3cfe70d8,0x3cadd337,0x3ca0d3d9,0x3c8e7275,0xbc4be067,0xbc924dec,0xbb139f66,0xbd7c6cec,0xbdc237c8,0xbdb94b13,0xbdb8afc5,0xbdb04e8e,0xbd4bc6e6,0xbe0b3ac9,0xbe08cb4a, +0xbdd8773a,0xbda82cd6,0xbdf57bf5,0xbe3f00f0,0xbe0b38e4,0x3d97d1b8,0x3d9337a5,0x3d3ecebb,0x3d12389e,0x3d719368,0x3dbe4217,0x3dadcc26,0xbb9725df,0x3c9fcea9,0xbbe7e1e9,0x3c53d7ba,0xba89b370,0x3ca83132,0xbc7985fd,0x3d8c2295,0x3d93183e,0x3c4ef3bc,0x3b02e00e,0xbcadc6ca,0xbc826d00, +0xbd01e94c,0xbcdc3d43,0xbc945aa0,0xbd2c0665,0xbd3fad39,0xbd171213,0xbd469a84,0xbd52ff5e,0xbd1fa67f,0xbdacd2f4,0xbdb7f0a6,0xbe22b0bc,0x3d0a7495,0x3da92d84,0x3d6375e6,0x3db6194e,0x3e16fc2e,0x3dc06885,0x3d615de3,0x3d899323,0x3dac16d7,0x3dc04d9b,0x3dabd431,0x3a2e0dcd,0x3d15a32d, +0x3c8ae482,0x3c1d1000,0x3c88f4a3,0x3ccd98bb,0xbd014b7d,0x3d73e3a2,0x3d91ba55,0x3ba0b158,0xbac5f6cc,0xbcce74ce,0xbd0f40de,0xbd2e66b7,0xbd44f543,0xbd4d69f2,0xbd910019,0xbdac5b56,0xbd92e280,0xbdccd264,0xbdaa095b,0xbd6d5fdb,0xbd4fb3c8,0xbd30670a,0xbdd0897c,0x3da859b3,0x3e1fc550, +0x3e07c1df,0x3e211475,0xbc3c8efa,0xbc3a1fc1,0x3a6d72ee,0x3ba5b9e1,0xbba8576f,0x3d1eb39e,0x3d456c2e,0x3d6302d4,0x3d592a18,0x3d311d4a,0x3ba823ef,0x3ce0cdff,0x3cd977d6,0xbc214cdb,0x3d144b13,0x3d27672a,0x3b09a315,0x3c1dd52d,0xbc0d02d0,0xbcf81d40,0xbd4d3182,0xbd95fe43,0xbdbcc6c3, +0xbde7783b,0xbdff6bc8,0xbe0aaba0,0xbde2fc1d,0xbd7e75f6,0x3cb997ab,0x3d46fc24,0x3dabf0c9,0x3ced4abb,0x3dcca6da,0x3da92840,0x3cd00db8,0x3b8ad274,0x3d6979cd,0x3d20b0b1,0x3d2101dc,0x3d1fabb2,0x3d4b33c7,0x3d4653d8,0x3d1d4f3b,0x3c222660,0x3c344510,0x3c28a663,0x3b2349d5,0x3ba6f2f3, +0x3c53f1fe,0x3cf0f277,0x3d5c895d,0x3d4d80ed,0x3cc5c6c0,0x3ce4c147,0x3cde03ae,0x3cf4cb6a,0x3d14af53,0x3d1d74d6,0x3d2e7157,0x3d346a22,0x3d77e4c2,0x3d6ec023,0x3dc9647b,0x3dc5e754,0x3dfab853,0x3d635fa0,0x3c280035,0xbd8e79da,0x3c80935f,0x3d66669b,0x3d9e0a07,0x3d61368d,0x3d36e3a5, +0x3cebfe2f,0x3cd65a94,0x3cb3fa85,0x3caf054f,0x3d0f28b6,0x3d378bae,0x3d2cc2cc,0x3d3eb0c5,0x3d0480ee,0x3ce396f8,0x3cae6994,0x3ccc0301,0x3c9ad431,0x3ca51084,0x3c8da78a,0x3c3d729b,0x3b338dad,0xbc36eec1,0x3c098d0e,0x3b5b87cd,0xbbf1fc99,0xbbcb7e41,0xbd68672f,0xbd7c1df9,0xbd33412f, +0xbc752715,0x3c27eadb,0x3d1612cd,0xbc1a8994,0xbc409ef9,0xbc31ed67,0x3cead9fd,0x3d4564a9,0x3d84721b,0x3d617ef5,0x3d56292d,0x3d3b06f4,0x3d17a170,0x3ceff092,0x3ceedeff,0x3cf1944e,0x3cdb7d44,0x3cc41c12,0x3cc6f2ca,0x3cdbe0e6,0x3cc15ace,0x3ce2728d,0x3cb03c9e,0x3cd76caa,0x3cca8c63, +0x3ccd4406,0x3cb4654b,0x3c7c1ea7,0x3c4410ed,0x3be8ec31,0x3ce00383,0x3c6bf314,0x3c8642c1,0x3c3878dc,0x3c3404fb,0x3ca41293,0x3cc8de84,0x3ccd9e05,0x3cc24b7d,0xb9856354,0xbc350023,0xbc74d6f3,0x3c3e6051,0x3d0a9f7f,0x3d531a7f,0x3d6f12e1,0x3cba35c9,0x3d023a5e,0x3cc8cdb2,0x3ccc9cd9, +0x3c81b774,0x3c7ce719,0x3c8b353f,0x3cb3a514,0x3c9f9307,0x3cb049ca,0x3c937614,0x3cddcda8,0x3cac11f7,0x3ce34075,0x3c9406ac,0x3ccd6fa3,0x3cca26f0,0x3caf9563,0x3c19da74,0x3c847ae2,0x3c95634e,0x3c52049b,0x3c54fad7,0x3ca24e15,0x3ce59a11,0x3cdd2dcd,0x3c7a912f,0x3ba6fba6,0xbb4916bf, +0x38b0411f,0x3b44e9d6,0xbbaa45f8,0x3b2dbe53,0x3baacde7,0x3c8889a4,0x3c81fca6,0x3c16bf19,0x3c68bd9c,0x3b879056,0x3c93a522,0x3cbe5a6e,0x3cebd527,0x3d0c0ecf,0x3cf6a6f4,0x3d0317a5,0x3cb601bd,0x3c8eefa4,0x3c4f9079,0x3c55ee96,0x3bd90def,0x3c169a61,0x3be59a10,0x3a24cabe,0x3c035511, +0x3b314803,0x3c0cc7f0,0x3b3bfb39,0x3b4b8888,0xb99697ee,0xbbdcb96a,0xbc63c85e,0xbc886edb,0xbc4d7415,0xbc320c73,0xbc0ef093,0xbc710151,0xbc9aafb8,0xbc9128c8,0xbc2a8b63,0xbb8459bd,0x3a027e84,0x3bbfd07c,0x3c2ae1d3,0x3c628abf,0x3bff7ea7,0xb93308cd,0xbc18a213,0x3c086b85,0x3b0a1dac, +0xbbe464b7,0xbc16f587,0xbbf39ec7,0xbbd36d39,0xbc01b534,0xbc2b5022,0xbc3a87da,0x3b7dcc04,0x3c312221,0xbc01a543,0x3a737dad,0x3bdba163,0x3c309da5,0x3c1e18e8,0x3c0e8b00,0x3c0b92ad,0x3c25873e,0x3c35540e,0x3c1f7666,0x3c13cfa1,0x3be5f861,0x3bcf4132,0x3c08572c,0x3c1cfc67,0x3c13629c, +0x3c0cf43c,0x3c0d13ce,0x3c0b7185,0x3c17c0dc,0x3c8006c3,0xbc5348b1,0xbc58e04f,0xbc601af4,0xbc7328cd,0xbc509c4c,0xbc3a9ecd,0xbc175ea0,0xbc0b6c3d,0xbbc638f8,0xbc04287b,0xbc0c6ea9,0xbc085a7d,0xbc026c64,0xbc03f935,0xbbe1c9cb,0xbbde4cf1,0xbbca9975,0xbb9fc99d,0xbbd9bf77,0xbbcc0136, +0xbb77c6be,0xbbe538f5,0xbbf2be6e,0xbbc2f565,0xbc0b283d,0xbc18ee0c,0xbc172819,0xbc127683,0xbc223b5f,0xbc2b5782,0xbc55b7bc,0xbc4cdcd0,0xbc25edc8,0xbc05b4c2,0xbc052c62,0xbc26b814,0xbc4d79c6,0xbc8df728,0xbc379638,0xbc1bc888,0xbc47be67,0xbc76e4b4,0xbc1597c6,0xbbaa71aa,0x3af0bfce, +0xbb93f9d9,0xbc07d4e6,0xbc0c4a84,0xbc0064eb,0xbb9e77a8,0xbb053e7e,0xbb1394ec,0xba077025,0x3aa65cf7,0x38acd59c,0xbba82929,0xbadecb32,0xbbf2a1e2,0xbc148b49,0xbb626888,0xbc2d226d,0xbc46d5c2,0xbc72babe,0xbc3ec628,0xbc55c4a8,0xbc6dc704,0xbcdeccaa,0xbce54db4,0xbc996892,0xbc73749a, +0xbc683838,0xbc55d4c2,0xbc864141,0xbd178dd7,0xbcfd3efb,0xbcd66111,0xbcc91acc,0xbcc59c3e,0xbc0c72fe,0xb986b003,0x3c376f2d,0xbb01bdcb,0xbbab5afc,0xbb946e18,0xbb9da688,0xba846158,0x3c1a6c3a,0x3bfd4cba,0x3c3277e6,0x3c6ebe28,0x3c1ecd28,0x3b907e31,0x3bb8ef6c,0xbb250bb0,0xbc0ade66, +0x3b413ec9,0xbc49c973,0xbc6db6f2,0xbc8b983c,0xbc641305,0xbcab699d,0xbcd32e93,0xbd3214ec,0xbd28c4da,0xbcb3f92a,0xbc6219fe,0xbc403dd7,0xbca36024,0xbd0a407c,0xbd05c087,0xbc3c172b,0xbc484d60,0xbc8f342b,0xbcca8036,0xbbc2fe1a,0x3bd5d036,0x3d046a52,0x3bbb6a4c,0x3ad8670d,0x3b238126, +0x3bd255b2,0x3c5a643b,0x3cbdc90e,0x3c801b5b,0x3cb0bc12,0x3ce42d8f,0x3c9b047c,0x3bf83a6c,0x3c0d82c5,0x3a4b64e2,0xbbde9984,0x3c3d3e11,0xbc57162a,0xbc9186ab,0xbcae4a0c,0xbc87f75b,0xbcbd2514,0xbccd9b7d,0xbd788c68,0xbd6d5ad6,0xbd062429,0xbcb5790e,0xbcc5ea85,0xbc7b40bb,0xbcf73b2b, +0xbd884074,0xbd4e4a52,0xbd2a10b4,0xbd366d66,0xbd1692e4,0xbbda9642,0x3c1938a4,0x3d1214af,0x3c079495,0x3c0a3244,0x3c202613,0x3ce1a4e8,0x3ccebe1b,0x3c9b1417,0x3cd4a5bd,0x3d03fe0d,0x3d04dfbf,0x3cca4e34,0x3af8ad8b,0x3c712969,0x3baae3a0,0xbbf5a874,0x3c74d321,0xbc441b61,0xbc89e318, +0xbc958bc6,0xbca8e2ce,0xbcee47f6,0xbd3962d6,0xbd9f95ed,0xbd96eaf0,0xbcdd3e6c,0xbc7998ce,0xbb9bc3a1,0xbcf51a50,0xbd509e40,0xbd63d878,0xbcbb12f6,0xbbdb40b1,0x3bd3e8a8,0xbc90e43a,0xbd0992ca,0xbcdcda7c,0x3b58def2,0x3b3dab6c,0x3ca2e253,0x3c2afe46,0x3ca044d1,0x3ce7133d,0x3d7c27c9, +0x3c8af9ef,0x3c81ceab,0x3cffed77,0x3c62b7b1,0xbc1949ca,0xbcde7dd2,0xbc2919a0,0xbc124aa0,0x3b8619aa,0xbce3ca03,0xbd0e740a,0xbd5cf647,0xbd515c12,0xbd8323c8,0xbdd42273,0xbd46c3f2,0xbd0c6054,0xbd02bc17,0xbd4ef447,0xbd9e0ae9,0xbded7a3f,0xbdac6c81,0xbe102c48,0xbdca987d,0xbdd72cca, +0xbd6023f6,0xbd079713,0x3d01b3ac,0x3cf87fa3,0xbbc4fb4f,0xbaf3e3f6,0xbbf022cd,0x3c3aa178,0x3b092c97,0x3b9315e1,0xbb8ff9f1,0x3d3c4092,0x3d437b67,0x3c79a502,0x3ab81767,0xbc6d6cfa,0xbc825317,0xbbb516bd,0xbc152dfd,0xbc5c44b7,0x3ad38bc2,0x3c7eaf9a,0x3b93f912,0x3c85bf2a,0xbc19c1d2, +0xbd423c90,0xbdb330cb,0xbd952daa,0x3d214685,0x3d0b6963,0x3cf2414d,0xbd542421,0xbdd68d2a,0x3d9ad66d,0x3dd24d18,0x3dc77088,0x3d7a1302,0x3dd26783,0x3d86a350,0x3d3e0d21,0xbccbdc4d,0x3c76f98d,0xb850fec9,0x3b2ca006,0xbb56f2b8,0x3acb14a7,0xbc722657,0x3cb190d0,0x3d006f93,0x3cf60d01, +0x39bd812b,0xbc8ad183,0xbc40c208,0xbb7bb321,0xbc30aa8c,0xbcbed5ea,0xbd30aba0,0xbd292ed2,0xbd7e6ffb,0xbc951ce9,0xbd0505e7,0xbd54ba36,0xbe02e000,0xbe03acfc,0xbc61a8a3,0xbdb12c2c,0xbd88c70f,0x3c7e41df,0x3d33312b,0x3deadfc9,0x3e154923,0x3e051ff4,0x3df01da3,0x3dfb0051,0x3d940d51, +0x3d6222ee,0x3c9c3d0a,0x3c8ea216,0x3b973671,0x3ba0fadc,0x3c0ae682,0x3bc74a8d,0x3bafd293,0x3c36d389,0x3ca994fe,0x3d6f6e8e,0x3bbdfc8c,0xbc19d6ef,0xbc878705,0xbc95ec3d,0xbd15fe8f,0xbd2e341c,0xbd88fa45,0xbd803045,0xbd9458c3,0xbc89d2ae,0xbcd4cf91,0xbcca3e7c,0xbdc1dd14,0xbdac0d38, +0x3d1afcb7,0x3bacb6d9,0x3c53a7bd,0x3d65efa6,0x3db9193e,0xbd0067a8,0xbc764769,0xbc71bc52,0x3cd87f4b,0x3d0b5403,0x3d87d304,0x3d83c26b,0x3d7b53d2,0x3c72122f,0x3ba6b08c,0x3c6f52f9,0x3c30799d,0x3c1cc921,0x3c0dbb1a,0x3c95a73e,0x3cb5008f,0x3d3c6959,0x3c09629a,0xbbf3cfcd,0xbc78df77, +0xbce9b271,0xbd3f1c50,0xbd461260,0xbd474914,0xbd2db63f,0xbd484352,0xbd22b294,0xbd810c26,0xbd4e3584,0xbdcf32ce,0xbd416609,0x3dbe861d,0x3e056f4c,0x3e270185,0x3dd16a77,0x3c9ad30a,0x3d2a10da,0x3d39dc24,0x3d4ebaa2,0x3d203379,0x3d4e666f,0x3d1d16e5,0x3cd6cca0,0x3c99f921,0x3ce38972, +0x3d28c767,0x3d75d242,0x3d226ff4,0x3cf1c601,0x3cce7533,0x3d52d1e6,0x3d452bb7,0x3cff39b8,0x3c92d681,0x3c6e9abc,0x3c9fabe8,0x3b9c6c1d,0x3bc605d0,0x3b9ec072,0xbc87097b,0xbc94bd05,0xbc4f86db,0x3d1a1d9c,0x3d70c079,0x3dafb9f9,0x3d48b453,0x3d053653,0x3da00da0,0x3c35307d,0xbc47a1ea, +0xbd00e17e,0x3bfe27b9,0xbcfe59bd,0xbca2d900,0xbbf5f88c,0x3c5771dd,0x3ce67ad6,0x3d29b37c,0x3d46fb38,0x3d1a4df0,0x3d315d99,0x3d26f9dd,0x3d20371e,0x3d0513bc,0x3ce0c8ce,0x3c8a539e,0x3ca69d1c,0x3cd6e7e8,0x3d1fb4ac,0x3d1001a3,0x3cfb0e4a,0x3c92f261,0x3c954f48,0x3cc4081f,0x3d12569d, +0x3d533ba7,0x3d89e5df,0x3d8ae409,0x3d54d19c,0x3cbca060,0xbc505683,0xbca3899d,0xbc4c58d3,0x3cb064fb,0x3ce87063,0x3cf35b4e,0x3be19136,0xbcb7c917,0x3b0fc709,0x3b52d563,0x3c1576f4,0x3c41ddc9,0x3c868a2c,0x3c9dfa9f,0x3cbbd874,0x3cd01d37,0x3ce13f2c,0x3cea4947,0x3ce7a660,0x3ce84291, +0x3d036be2,0x3d120be3,0x3ce99bcf,0x3cd3cca6,0x3c90d295,0x3ce3655b,0x3d0c677a,0x3d236be5,0x3d0d0328,0x3d2e3de3,0x3d2c5ace,0x3d4a3286,0x3d379134,0x3d2f48de,0x3d03f6dd,0x3ca58385,0x3aea11eb,0x3b894900,0x3c0c50c0,0x3cab802a,0x3c69886d,0x3c27abc2,0x3c89bc07,0x3c13c35c,0x3c9fff79, +0x3c25e4ec,0x3c85f0b5,0x3c7cb95b,0x3c642b64,0x3c90b881,0x3cb73163,0x3ce35368,0x3ccfff7a,0x3cc1e223,0x3cc2faf5,0x3cf97422,0x3d155623,0x3d298bab,0x3d02c585,0x3ca7d196,0x3beadc52,0x3c5115ea,0x3cc2ea16,0x3c993bbf,0x3c5dbc29,0x3c87280d,0x3c87668e,0x3c119bc1,0x3bb542b8,0x3bb1f9ad, +0xba52fbf2,0xbb7f4d2f,0xbb8fa61e,0x3c09cf73,0x3c8c3ce7,0x3cc41f25,0x3ce50966,0x3d079712,0x3d078431,0x3ccdd3df,0x3cd95924,0x3d04f0c4,0x3cf51ba2,0x3d089210,0x3d12fa3a,0x3d1d0146,0x3d1920b9,0x3d1c1f65,0x3d1e1dcc,0x3d20f588,0x3d1dc028,0x3d150c2a,0x3d03223a,0x3d05767e,0x3ce1a615, +0x3ccd1098,0x3cd70781,0x3c731d9b,0x3b91a789,0xbb5fd60a,0xbaf8b8a9,0xbb49f51e,0xbb90e5bb,0xbae669b6,0xba255a5a,0xba999859,0x3bb656b5,0x3c2ff22e,0x3c47da94,0x3c2df784,0x3c0b7033,0x3c28cf71,0x3c416a8d,0x3be9c6ef,0x3c5d99a9,0x3cabda1b,0x3c94ba0d,0x3c95b119,0x3c943ed1,0x3c94e013, +0x3c95b335,0x3c88b216,0x3c949ebe,0x3ca99ab1,0x3ca706ae,0x3ca72cae,0x3cabee3a,0x3cb4fbda,0x3cc30800,0x3ccaffed,0x3cab36c5,0x3c8ff0ac,0x3c912e9c,0x3c870035,0x3c84aef3,0x3c7968cb,0x3c7bb092,0x3c803f7d,0x3c801e04,0x3c6c1aea,0x3c5d48f8,0x3c50dc39,0x3c46109e,0x3c46b939,0x3c5c389b, +0x3c80e789,0x3c8ce131,0x3c98d133,0x3ca60b8f,0x3ca4a931,0x3cabcc76,0x3ca4e960,0x3cea6552,0x3bdb6dac,0x39e58b01,0x3b563629,0x3b23a44c,0x3aa6f60e,0xba176e30,0x3b9ec78d,0x3bc02215,0x3bc0fca7,0x3b8b1efe,0x3b5a64c8,0x3b01316a,0x3b2fae02,0x3b8147b8,0x3bd286d7,0x3bdb7f1e,0x3bee7c43, +0x3bcf66bf,0x3c02b2ff,0x3bf2805f,0x3bb06b5a,0x3ba20c35,0x3b89ea87,0x3b69ef61,0x3b874cb7,0x3b6a0e34,0x3b09997a,0x3b181bc7,0x3b2308c7,0x3b876ad7,0x3b7f5da8,0x3b9e45a4,0x3c122fde,0x3bacf772,0x3ba65476,0x3bb1332e,0x3af99eb7,0xbc075d7d,0x3b85b4f9,0xbb977390,0xb897af84,0xbb9a5598, +0x3be58323,0x3c2af7b3,0x3c399707,0x3bfb3a73,0x3ba12e2d,0x3abd7610,0x3b1cb011,0x3b93f6bc,0x3c51c676,0x3c3c18d9,0x3c6074f4,0x3c71c70c,0x3c824d6b,0x3c8a85ee,0x3c58cd55,0x3c07801d,0x3bca4940,0x3ba9188f,0x3bb4dd2e,0x3b82bd0b,0x3a1b57a6,0xbaf91c75,0x39cd2a8c,0x3c0dbe5d,0x3b4710f1, +0x3b8b708b,0x3c8e71c8,0x3b977545,0xbad17d62,0xbb35866c,0xbc4eb71c,0xbcaa9d1a,0xbbbc8f00,0xbc709aa3,0xbc1348d3,0xbc9148b0,0x3bdef3be,0x3c6b8920,0x3c88e705,0x3c15fc02,0x3b2dbd35,0xba9c0b38,0xbac6e738,0x3ba44034,0x3c9f179e,0x3c98f56e,0x3caef179,0x3cbe6877,0x3cd65c4f,0x3cd1b1ea, +0x3c9864f8,0x3c1ad36a,0x3bdabc14,0x3b33d6e6,0x3b9f143d,0x3ad94b61,0xbbd221f2,0xbbeb529d,0xbbc3bb55,0x3bfc74ab,0x3b0eed45,0x3c29bf3e,0x3cff3117,0x3beff4f1,0x3b501f06,0x3a404d01,0xbc9cd086,0xbd16f399,0xbb3509a0,0xbcb75342,0xbc41685f,0xbcc8dd2a,0x3be2c103,0x3c8d21fc,0x3cd1eeba, +0x3c4e9ea8,0x3b2d60ae,0xbb48673a,0x390ac8a1,0x3c19604b,0x3d06f89b,0x3ccc5260,0x3cf1e52b,0x3d0a7953,0x3d290565,0x3d1df1a3,0x3cf8f916,0x3c617eb6,0x3bf68848,0x3b63ab7e,0x3bcb1a70,0x3b5bfd61,0xbc24c450,0xbc7fe3fa,0xbc2394bd,0x3c93ba90,0xb989e7a3,0x3c0c637b,0x3d2c89b9,0x3afbd261, +0xbc6e43fc,0xbca7f41c,0xbd4836fb,0xbd6da2d8,0xbcb5a25e,0xbd2a6859,0xbd0b0fcf,0xbd34a036,0x3c194158,0x3cb3df57,0x3cec674a,0x3c45b4d5,0x3b77ffb4,0xba06ab93,0x3c3e666f,0x3ca34ed7,0x3d2e49ce,0x3cf4c1e2,0x3d08da21,0x3d34a14b,0x3d40f822,0x3d45a6e6,0x3cfb785e,0x3c51b595,0x3bf82d29, +0xb96c7c78,0x3b22cdca,0xbb687068,0xbc874a71,0xbc98e415,0xbc6cc7c5,0x3c00e42c,0xbaa1bf6e,0x3c88d92e,0x3d6752b5,0x3c2f18cc,0x3b76fcca,0x3b049767,0xbd54c723,0xbd5b33d1,0xbd8dd363,0x3d28dd71,0x3d4d491a,0xbca560b0,0xbc77c78e,0xbc55fbce,0x3c55595c,0xbc2b0afc,0xbb5aeae1,0x3c47204d, +0x3a8c6fa8,0x3c1a6a87,0x3d24b418,0x3ca59838,0x3cad5518,0x3cf78196,0x3c7ac930,0x3c3dc3c3,0x3c76d200,0xbbae3fef,0xbc657be8,0xbd068402,0x3ba2bdc5,0xba670927,0xbd0cd9f6,0xbd827352,0xbd3bea72,0xbcef35c4,0x3d8c23ba,0x3d864690,0xbd10f2f6,0xbd1a11b8,0xbd9bfa2a,0xbdea4d92,0xbdae491c, +0xbd49ab41,0xbde22f03,0xbdcdc3fe,0xbd7265bc,0x3bbaada2,0x3bfe0a3b,0x3c2ad9f7,0xbc218c62,0xbabb415e,0xbb0ebc30,0x3bb9fdce,0x3abea3d0,0x3b384c2c,0x3c474d7c,0x3cfdebf1,0x3cf6543b,0x3d26b188,0x3d098c28,0x3ccf5acf,0x3b834675,0xbb1e7e44,0xbaaed240,0x3c08e764,0xbc90a865,0xbcde79bd, +0xbcdeb820,0xbd5cfd76,0xbd958b7d,0xbde21966,0xbd5c5306,0xbcaad4f5,0x3c98d4b9,0xb9d81dce,0x3cdaffee,0x3d316224,0x3ad68b05,0xbc9c807a,0x3a01d12e,0x3d8cf425,0x3d39d095,0x3d914ba6,0x3c4d6424,0xbb8d4dc7,0xbc515a33,0xbb5d6f20,0xbbca5396,0x3b41805a,0x3b885865,0xbbd0dfc9,0x3c35d547, +0xbb7c97e2,0x3c341fe6,0x3da106c1,0x3cf6fe4e,0x3c704cbb,0xbb609717,0xbb2c03d6,0xbbab6c09,0xbc0f388e,0xba8f0c01,0xba5eb179,0xbc4c7189,0xbd2ece38,0xbd632b86,0xbde6451c,0xbd387d86,0xbd589853,0xbcea89cd,0xbdee28be,0xbe1b95a1,0xbe2eb2d7,0xbd915cb3,0x3d0598b3,0x3d561e55,0x3ddda7c3, +0x3db6def7,0x3dc9e3ac,0x3d268b2a,0x3c96cc36,0x3c92d0bf,0x3a93adb7,0x3917625e,0x3b40873b,0x3bb49e25,0xbbffc09b,0x3c5b7f0a,0xbc8eb5b4,0xbb8d60a6,0x3d9899fe,0x3c6691f1,0xbbc47f5c,0xbc87564e,0xbc97ebf2,0xbcbed928,0xbcc13b8b,0xbbe66555,0x3a55b01b,0xbbefd500,0xbcd7c023,0xbd52311a, +0xbe04cf10,0xbdc2ac9f,0xbddcb7b7,0xbd8e3f5d,0xbdc6ff8b,0xbdd1d023,0xbdcd0974,0xbc4e5a72,0x3e241fc2,0x3dc1953a,0x3d52d038,0x3d7a9b10,0x3da4a1e6,0x3d8d16ba,0x3d7576f7,0x3d20c3ad,0x3c459f6c,0x3b593755,0x3c0e1ce3,0x3b1b6554,0x3bd35dbe,0x3cd3bc52,0x3c76055e,0x3c6ec782,0x3d52b9c4, +0xbb93b6a8,0xbca51b9d,0xbcbc5144,0xbd02a94a,0xbd10c08f,0xbce63712,0xbce66f68,0xbcce07d5,0xbc01c381,0x3be24853,0xbbd94692,0xbd8ab51f,0xbd8234f7,0xbd5dd5db,0x3bf81ea9,0x3d5a0cbc,0x3df63524,0x3e2f0df6,0x3e422889,0xbbb73460,0x3c84ef06,0x3cfb051e,0x3cf9b87a,0x3d2f1575,0x3cfff593, +0x3d007397,0x3d4e01fb,0x3d3d4132,0x3d5127bb,0x3d280c88,0x3d36ba2b,0x3ce715ad,0x3c104b98,0x3c7dec2e,0x3c9ff2ea,0x3d1ccb03,0x3c883bd0,0x39bc1216,0xbc842dd9,0xbcc12b2a,0xbd10a9f9,0xbd862ae8,0xbd61e382,0xbd58e0dd,0xbd22a644,0xbd8e0854,0xbd5c0fb5,0xbd455c08,0x3d80b943,0x3dc8a6ad, +0x3e15b919,0x3ddb84f5,0x3d596f9b,0xbb2957fe,0xbb05912c,0x3d16f869,0x3d01a01c,0x3ce647cf,0x3d0dd2f0,0x3d50de75,0x3d2a0167,0x3d1b6a4c,0x3d052d58,0x3c81cc40,0x3c70f216,0x3c957945,0x3c95dbec,0x3ca3fe4d,0x3ce1995b,0x3d110e21,0x3d09c3d1,0x3caf11bd,0x3cc929b9,0x3cd272ba,0x3ce9a41c, +0x3ceb3e3b,0x3d0736d5,0x3d5aac84,0x3d6f6d58,0x3d770376,0x3d899098,0x3d67f847,0x3d6fb077,0x3d6d9eeb,0x3d823a2c,0x3d7d3d54,0x3d689e1d,0x3d26aeff,0x3d21a6bd,0x3ce3a887,0x3d250398,0x3c160d2a,0x3b8871be,0x3ca2067d,0x3cd4b55d,0x3cf3ca52,0x3cedc734,0x3ce86b8d,0x3cf84dc7,0x3cc37dc7, +0x3ca2df30,0x3cb17c33,0x3c9dc843,0x3cbdca62,0x3cc5a532,0x3cc63156,0x3ca64bec,0x3c5a9167,0x3c156055,0x3c015969,0x3b76a361,0x3c25e9dc,0x3c01c8e3,0x3bda0052,0x3ca78ea4,0x3ca3ce1b,0x3cac8894,0x3c88246c,0x3c937461,0x3cee69e8,0x3d1780c1,0x3d189a3b,0x3d079fa4,0x3c8bf0db,0x3b1dcd58, +0xbb4796c6,0xbbd2de89,0x3c69f95e,0x3c757ddc,0x3c71caef,0x3c9b2374,0x3cc4c875,0x3cc3b63f,0x3cdbac8d,0x3ce5eb8a,0x3cdbb96a,0x3cc71ccb,0x3ca9bf04,0x3ca12e17,0x3cac423f,0x3c9c76ef,0x3c7a9efd,0x3c3b30e8,0x3c53c321,0x3bd80d4f,0xbc161c32,0xbc120ef0,0xbc01cc4d,0xbbac9208,0xbbff3982, +0xbc6160a1,0xbc83d2cd,0xbc470281,0x39a472ea,0x3be26490,0x3c2da1cb,0x3c2a2bfd,0x3c2f0607,0x3c817935,0x3c88df5f,0x3ca14a65,0x3c84efac,0x3c8fb4a1,0x3cf8adb3,0x3d055377,0x3d0f26ea,0x3cfd910d,0x3cd90f2c,0x3cd7d810,0x3cab3edd,0x3cb06e99,0x3c9e8e70,0x3cbe3f52,0x3ccd78fb,0x3cd089fd, +0x3cc6463c,0x3cd789fb,0x3ccd58a2,0x3cc1a743,0x3c9bac05,0x3ca75d1a,0x3cb468a1,0x3cc3abb4,0x3cd68716,0x3cc902f9,0x3cf2a235,0x3d0acb2e,0x3d1a0fdd,0x3d244531,0x3cf4d1e9,0x3cdebfdc,0x3cd18118,0x3cd664fb,0x3cd5c5ef,0x3cc0ea88,0x3cc17e19,0x3ca87017,0x3cc69538,0x3ce5ebf3,0x3cbeabe2, +0x3cbffa61,0x3cb5d8b3,0x3ca8a168,0x3c9e7bd8,0x3cb3b696,0x3cae4bb4,0x3caf800b,0x3cb65163,0x3caa9d54,0x3ca18f8a,0x3ca27ebd,0x3ca4ed00,0x3c9f3b83,0x3c9463ef,0x3c9e5fa6,0x3c866964,0x3c8793d6,0x3c86d708,0x3c862395,0x3c86cdce,0x3c8952bf,0x3c7cec83,0x3c616210,0x3c5af571,0x3c72ae30, +0x3c83e463,0x3c9a1015,0x3c9b2685,0x3c9abd39,0x3ca02fad,0x3ca716e8,0x3cba8768,0x3cbd4fe5,0x3cc5f504,0x3cc40c58,0x3d2325d5,0xbba6e164,0xbb9e77dd,0xbb4aee0a,0xbb7335d2,0xbb53337d,0xbb89c5a8,0xbaa5a31b,0xba824105,0xba94fafc,0xbaff3584,0xbb3c54a3,0xbb80762d,0xbb518f6f,0xbb32d98d, +0xbb22ae1d,0xbaecf339,0xba61caa2,0x39a8de04,0xbaafae2a,0xbb1e6e4b,0xbb235a0d,0xbb53d756,0xbb7cc6d9,0xbb87b336,0xbb870f97,0xbb910792,0xbbaecd2c,0xbb8af87f,0xbb897311,0xbb90b6c6,0xbb81c911,0xbb82a0f7,0xbbacee09,0xbbbec1f8,0xbbb23cb4,0xbb6dd3a3,0xbba2ffe8,0xbc299266,0xba01b72e, +0xbabc1118,0xbb184f07,0xbc0202d6,0x3b844ae4,0x3bb645d1,0x3b4626d3,0x3b455046,0xba8f452b,0xbbc388af,0xbbd53723,0xbba096ab,0x39477e9e,0x3ba7decb,0x3bc2a9c2,0x3bb7ffb0,0x3b7b168a,0x3b380c1a,0x3a3d73d3,0xbb8b1eb1,0xbbde01e1,0xbbf55e32,0xbbdc96d3,0xbbd78626,0xbc1f610b,0xbb92c090, +0xbb578fb2,0xbbd8e79b,0xbbc95f22,0xbbe525ab,0xbc2e3087,0xbc58b4b6,0xbc769ea4,0xbc175a16,0xbc6582ca,0xbc56ca09,0xbaef88a6,0xbb1ceb7d,0x399e18c0,0xbc374a08,0x3c3283a1,0x3c7d0e8d,0x3c1228b9,0x3bb593a2,0xba8d4e07,0xbbe8d6be,0xbc0ea67c,0xbb63aae2,0x3b19bd74,0x3c39f814,0x3c8538cd, +0x3c762e4b,0x3c4ee792,0x3bcfa7fa,0x3b9db0ac,0xbb9c34f0,0xbc05d527,0xbc1adeea,0xbc1af8c7,0xbc24161b,0xbc8d3f84,0xbbf555e0,0xbbcf5ed0,0xbc59911f,0xbbebb7b3,0xbc2d575a,0xbca31800,0xbcb8e81c,0xbcaeec0c,0xbc0df118,0xbc829598,0xbc9d49e6,0x3c33d625,0x3b7fa3a4,0x38434943,0xbc79756c, +0x3c8b7428,0x3ccc7e03,0x3c9bcf45,0x3c8e9be0,0x3b8bffb1,0xbbf0fbdd,0xbc0c7a51,0xbb00a821,0x3c8d5e2f,0x3ccf355d,0x3ceabbd6,0x3cd4872e,0x3cd1430a,0x3ca00064,0x3c75d473,0xbb7cfb29,0xbc2f9dc8,0xbc47a873,0xbc4abfb4,0xbc5c47bd,0xbcbb5fa5,0xbbaeb89e,0xbad24694,0xbc74fc08,0xbc2e45e0, +0xbc7fdc2e,0xbce2192c,0xbd0329f0,0xbd181b2d,0xbc76f811,0xbcd4c1ed,0xbc566473,0x3b3f62e3,0xbb468841,0xba0c9cc2,0xbcbab6b8,0x3ccf0377,0x3ce29730,0x3ce0974e,0x3c773a53,0xb9f34c60,0xbb6c7a80,0xba83267d,0x3c34ca37,0x3ce246ee,0x3ce4a657,0x3d0b51f8,0x3d1d4ec3,0x3d0cd888,0x3cc9c99d, +0x3c8e39ce,0xbb4bf83d,0xbc407e2b,0xbc5c4514,0xbc5c9cd4,0xbc869d91,0xbd02782b,0xbc4bf6bb,0xbc1a1e84,0xbceabe1f,0xbc32dbb9,0xbc9656eb,0xbd1b1e5c,0xbd2c4b84,0xbd11cd44,0xbbb630aa,0xbc9fb506,0xbdb2cb16,0xbdb9b313,0xbb3a53d0,0x3d0dd59e,0xbc21fa44,0x3c37d815,0x3c73a1cc,0x3caa3bba, +0xbc6b55e1,0xbcb1ef97,0x3bc046c1,0xbc1326ff,0x3adf0bc7,0x3cc3df11,0x3d17ce39,0x3d27ab66,0x3c2d77f9,0x3cb7082c,0x3c9ac81f,0x3c3fdd98,0x3c12cb4a,0x3b343b38,0x3c3f18e4,0xbc0e0592,0xbcac0e95,0xbd193c20,0xbc48d3e8,0x3b42f7bf,0x3ccd3da3,0x3cd6d405,0x3c05499f,0xbcb7cf4a,0xbd60eb40, +0xbdb5c51c,0xbddf507a,0xbdc458f3,0x3cd569a9,0xbd4fde3a,0xbd3d22c1,0xbcf215c5,0x3d181b0a,0xbc06ea9e,0xbcbaf07c,0xbcc22814,0xbc890f4c,0xbc436b29,0xbc3b5dd3,0x3ad0c8f1,0x3b0ee522,0x3b2310c4,0xba95710b,0x3bb28ad9,0x3d46164f,0x3c9f1a5e,0x3bac4f6e,0xbb4a9e7e,0x3b526d0d,0xba752fdf, +0xbbde876a,0x3bb433b2,0xbb9d0791,0xbd39a26e,0xbd2eecdb,0xbd08405d,0xbbfe5992,0x3ca794e5,0x3c8b0b7a,0xbd056bf7,0xbc981a45,0x3bf5cddb,0x3d1b8725,0x3cef2364,0xbe1d5fb7,0xbde924f4,0xbd383453,0xbc082b65,0xbc5840b8,0xbcb49ae7,0xbcec08d5,0xbb877e0a,0xbc1b9a6a,0xbbb182d1,0xbc2a69ad, +0x3a13b14f,0xbc066395,0x39a33eef,0xbc6355d2,0xb9ed48b5,0x3d25acad,0x3cc0e83d,0x3cb0cd82,0x3c30a815,0x3c30aa83,0x3c4bc504,0x3c515d3f,0x3c9c2095,0x3bf6c7f9,0xbc3c00de,0xbd2d7136,0xbd445c42,0xbcdf0e61,0xbb3c7f81,0x3b0721a8,0xbd37d20e,0xbd1d0fa2,0xbd95566b,0xbdfcf9a7,0xbe258393, +0xbd9748af,0xbc89b473,0x3cf321c0,0x3d04e6e9,0x3d0ab1aa,0x3c6cc646,0x3bec96f0,0x3c57f7c8,0x3c28bc91,0x3c29ddd9,0xbb18c4a2,0x3a603737,0xbbd554d1,0x3be03bdf,0xbac55661,0x3bce9e8e,0x3cf6c6e1,0x3cdd4f95,0x3c99a7ac,0x3ac07336,0x3b8805fc,0x3bb56f21,0xbba68a6f,0x3baace4f,0xbbe1955c, +0xbbfe1b01,0xbd5c62cb,0xbd750c5a,0xbd118c02,0x3b005664,0x3c01650b,0xbd624998,0xbd388fbe,0xbd941c30,0xbd9a3909,0xbda49ff7,0x3e5e2280,0x3e4744a7,0x3e1cfce6,0x3df25ba0,0x3de92c06,0x3d9c7f50,0x3d68b73c,0x3ccaba57,0x3cb22095,0x3c21c5d6,0xb76db1b6,0x3bba8f54,0x3ba2818e,0x3c25505d, +0x3c102fae,0x3c307f73,0x3ce9c201,0x3c84f4cc,0x3c0971cb,0xbc383633,0xbaf3fcc1,0x3ac1c4e9,0xbc141871,0x3c1d6efb,0xbc374058,0xbcda971d,0xbdb45b90,0xbdb1e3d9,0xbd84d2b0,0xbc64afba,0xbc422860,0xbd5e11ab,0xbd730e30,0xbc5db86b,0x3ddcd540,0x3e37bc8d,0xbc968f42,0x3a3650ec,0x3bb16024, +0x3cf3292b,0x3d245e9f,0x3d2295f7,0x3d29f71c,0x3d5c416d,0x3d2e4a20,0x3d2bcade,0x3ce4de6e,0x3d249375,0x3cd7a97d,0x3c2fc9a4,0x3b7c9bc9,0x3c1653e8,0x3d02b4a0,0x3c84d4de,0x3bf9b6ec,0xbbff98b3,0xbc81301c,0xbcbf959a,0xbd11bc98,0xbd4261fc,0xbd960613,0xbd9dd587,0xbdf887bb,0xbdd197d9, +0xbd8cc1be,0xbce06672,0x3cbeaa80,0x3db7ae80,0x3e02ffa7,0x3e01eb30,0x3de6cfe5,0x3cfadc1e,0x3d4a7513,0x3d5c518d,0x3d788b0c,0x3d61a085,0x3d4c13ed,0x3d0dfb44,0x3cd83804,0x3cc377f9,0x3c844b5d,0x3c02edc4,0x3babb5c3,0x3c667c0f,0x3cc8a481,0x3ce71255,0x3cfa0b89,0x3cd4f663,0x3cfaf584, +0x3c8140cf,0x3c708c19,0x3c0e2978,0x39b8e928,0xba35a39e,0xbc8789bf,0xb9f2ec0f,0x3bc3c8cc,0xbb6eb878,0x3cd5c770,0x3d5793df,0x3d95e314,0x3dae42b4,0x3d9ed36f,0x3d8b8959,0x3d0a3b80,0x3cc8250f,0x3cee9a6e,0x3d492546,0x3c26bdb0,0x3c91d479,0x3ccddcfd,0x3d038cfd,0x3cff2354,0x3d05270a, +0x3d030cea,0x3d032182,0x3cf38de7,0x3cf26183,0x3cd4dc32,0x3cd277ba,0x3cb1f4c0,0x3cbac4df,0x3cda8a36,0x3cf9654c,0x3d1db4c6,0x3cf39644,0x3ce0c3c2,0x3cc249f9,0x3cca4240,0x3cc29ad9,0x3cb43040,0x3c9b79d9,0x3cab50eb,0x3ca72e44,0x3d17e9c0,0x3d3f8e53,0x3d6a56d1,0x3d48f26f,0x3d1bddc3, +0x3d03e896,0x3cb6513a,0x3c3cf303,0x3a685cd7,0xba13f075,0x3cafad8d,0x3cbab581,0x3cb4d82f,0x3cd5409f,0x3d0ab991,0x3d0046c8,0x3cfed16a,0x3cfb48f4,0x3cf2f754,0x3cf1a5a6,0x3cebcc3d,0x3cd4a9cf,0x3ca83171,0x3c91eff9,0x3cb56b4d,0x3cecf8ef,0x3d09926e,0x3d0dbc8c,0x3d02cb4d,0x3d0ab3a4, +0x3d20ef57,0x3d12edc2,0x3d2ab75e,0x3d2181a5,0x3d1d4a25,0x3d056585,0x3ce4fe61,0x3cc13be5,0x3cb5e813,0x3c8969b1,0x3c2aaa71,0x3b905172,0x3ba4dc2c,0x3c284a51,0x3c336867,0x3c9d2123,0x3c6781f6,0x3c41c004,0x3c9a6630,0x3c56b9ed,0x3c1ac915,0x3c384c4e,0x3c29f90f,0x3c4aa62c,0x3c3c3f09, +0x3c579f02,0x3c5f28c8,0x3c766d10,0x3c953059,0x3ca12041,0x3c97b408,0x3c94f7c2,0x3c8ba8e9,0x3c9ce980,0x3c7b750e,0x3cef0ff7,0x3cb34182,0x3ca4336a,0x3c4bc34b,0x3c1bfb0c,0x3bcea9db,0x3b189709,0x3c6dcca2,0x3c9d51a1,0x3ccd3d2d,0x3cead36d,0x3d0c5618,0x3d1b5881,0x3d0bfe21,0x3ce34529, +0x3cbd9ee1,0x3c993178,0x3c822799,0x3c6e0a70,0x3c94aaa8,0x3caf4998,0x3ccabfd8,0x3c9cd0b4,0x3cb1d975,0x3ccddab5,0x3ccc4ce6,0x3cc87382,0x3cc67019,0x3cc29227,0x3cba0adf,0x3cb8d31d,0x3ca54ea7,0x3c9fa387,0x3ccdaa9c,0x3cc7fb27,0x3cbec813,0x3cb8c264,0x3ca4dc37,0x3cac389a,0x3cb04e3c, +0x3cb02ecd,0x3ca4e5b3,0x3c8d065c,0x3c853348,0x3c5db0d8,0x3c457589,0x3c3577ee,0x3c2d15b5,0x3c21563e,0x3c30279a,0x3c4a444d,0x3c688c24,0x3c7ffda7,0x3cc97213,0x3c084400,0x3bbbae2c,0x3bd092e7,0x3bd4f617,0x3b9dc973,0x3a8e56f4,0x3bccfbc1,0x3bbc8f2c,0x3b4c21f6,0x3b63dc9d,0x3b25f433, +0x3a00c052,0x3ab99965,0x3ad3005c,0x3aec4748,0x3bab2a9b,0x3be870c2,0x3b9cc84b,0x3bab75bc,0x3b9f296c,0x3b8a0b8d,0x3b9926ce,0x3b96983e,0x3b715fcd,0x3b9262c4,0x3ba26caf,0x3ba280df,0x3bd04811,0x3bd24057,0x3baeb77b,0x3baab015,0x3b9c3396,0x3be6dbe2,0x3bb117b9,0x3bb8b166,0x3bd0771f, +0x3bb948d8,0x3ba16ab8,0x3baaa86e,0x3bae9b5c,0x3bd45f2b,0xbaebcbd5,0x3c3d51d1,0x3c5544fc,0x3bf10894,0x3c3972c0,0x3c03d569,0x3a2db536,0x3a35f809,0x3b08a16d,0x3b94d25f,0x3c32ae2a,0x3c648fab,0x3c4e6dfd,0x3c10af45,0x3bd7cc23,0x3b8b41d0,0x3bafa714,0x3b9e3956,0x3ad133f3,0x3b938d40, +0x3bc60943,0x3bbae769,0x3c6f51da,0x3c5f9367,0x3b760653,0x39be35ef,0xbadf9def,0x3c057433,0x3b990597,0x3ba78186,0x3be35bf6,0x3bac4a84,0x3bee1be3,0x3bfb1809,0x3c2e4c45,0x3c2d9c26,0xbbc0dca9,0x3c71ef3e,0x3c97a259,0x3c089e29,0x3c4ed92d,0x3c04e8d8,0xbbb9192a,0xbb0e332e,0x3811f782, +0x3b347ee6,0x3c81e5c9,0x3ca98a93,0x3caa2f11,0x3c4d9eaf,0x3bfc304f,0x3a19b57b,0x3b3a8b3f,0x3ae8743c,0xbb6c6538,0x3a3e00d9,0x3b82cb27,0x3b7af37e,0x3c90b620,0x3c778e20,0x3b9554e9,0xba630948,0xbb0476aa,0x3c72c964,0x3bc90f6e,0x3c0a8c0c,0x3c24268f,0x3bd27ff8,0x3a7d6d4c,0x3ab67fdb, +0x3c194317,0x3c2bdcc0,0xbc8d981a,0x3cbe2055,0x3ceb161a,0x3c516fde,0x3cc62627,0x3c40e3c9,0xbc3808db,0xbc0d768c,0xbb5c96b5,0x3bcdc02a,0x3cf026ba,0x3d06c505,0x3cdf71d7,0x3c9334ca,0x3c3d5e40,0x3a8af2ac,0x3abb68d1,0x3a1845ba,0xbc22e3d7,0xba1bc8fd,0x3b9951f8,0x3b00480b,0x3ce9c9d0, +0x3cc8dcc3,0xbaeea42e,0xbc458147,0xbc6eb879,0x3c567a05,0x3b703692,0x3bb87451,0x3beef66b,0x3b839eee,0x3bf4328a,0x3c4fff21,0x3caa9a2d,0x3c80a31c,0xbc8333a4,0x3cb85354,0x3d07624c,0x3c9f80ba,0x3cc94e5f,0x3ba789e3,0xbc5feb81,0xbc20b512,0x3b6c1514,0x3c7e5b3c,0x3d142510,0x3d29c353, +0x3d02fd21,0x3cc3f6c3,0x3c88a18e,0xbad1ffb0,0xbb0f7ed0,0xbb4cdf02,0xbc6ddf63,0xbbb7370a,0x391774c1,0xba841b0e,0x3ce6d7a2,0x3cc28b20,0x3b484c5c,0xbc0d051d,0xbc1fe425,0x3cea7c6b,0x3c3ea6b1,0x3c9ad6a7,0x3c7b2d00,0x3bc86307,0xbcedeaa2,0xbd90de8b,0xbda96d52,0xbd33bbfb,0x3cb3502f, +0x3cc07f88,0x3c951fb7,0xb8071919,0xbc7e5460,0xbcb5ff6a,0xbbd1ba47,0xbc30b231,0x3b18314d,0x3c3dbd3f,0x3d05ce1d,0x3d1b784d,0x3cc50b4f,0x3ccd4b9b,0x3ca110a0,0x3cc8db0a,0x3b288e98,0xbc01dbc3,0xbc319d16,0xbc674abc,0xbc393e01,0xb946e15f,0x3c86afa9,0x3cd88cb0,0x3d4a2cef,0xbc61540b, +0xbd3fa9f7,0xbd0a92f1,0xbd86e377,0xbd5e929f,0xbcc0e016,0xbca08d5c,0xbbe47be0,0x3bd0224d,0x3c895208,0xbb79039a,0xbc55767d,0xbcef368b,0xbccec3f6,0xbc84a485,0xbc769de4,0xbc449590,0xbc93b39b,0x3b14aabf,0x3b9311d8,0xb89b7270,0x3a1a19cb,0x3b4cb4da,0x3c9d031b,0x3cd2e2af,0x3cd94c54, +0x3c2b4513,0xbb8e002e,0xbc54f928,0xbc98cc95,0xbcc66ec0,0xbcf71b6e,0xbd0259ae,0xbcb06110,0xbc7db53c,0x3c6ad655,0x3b9bbab4,0x3c32c923,0x3c6c6387,0x3cbc4f62,0x3c740e4e,0xbb513b92,0xbc820a9a,0xbd9dea07,0xbdcc2011,0xbdb1b3b1,0xbd15462d,0xbd698fcb,0xbcd01009,0xbcaecc80,0xbc32e70b, +0xbc495779,0xbaf84889,0xbc3ec90e,0x3b2deda9,0xba88d13a,0xbb237067,0xbaabf30b,0xbb96d836,0xbb96a7dd,0x3caf5bba,0x3ce8a641,0x3a9f9fdb,0xbc2c1018,0xbcaa25e9,0xbce285c0,0xbcfae4e8,0xbd19c382,0xbd436f69,0xbd0793bc,0xbc817231,0x3bf7cf11,0xbba0ac59,0xbc8b16b0,0xbce94646,0xbc99ad6b, +0xbc6e9a16,0xbb3f6fa1,0xbd5d76ea,0xbcf148ee,0xbd139e1c,0xbc96859a,0xbbbd5cb0,0x3cc4687f,0x3c007598,0x3c189750,0xbbd673be,0x3b4be54e,0x3ba386e4,0xbb8e74fc,0xbabd667a,0xbb0f8e1d,0xbc06a028,0x3ad277aa,0xbbd14e94,0xbc97222f,0x3ca8164f,0x3cba1776,0xbba01651,0xbbb89969,0xbc449c6c, +0xbc6eea35,0xbcc05e28,0xbd1d2ed0,0xbd81b062,0xbd3d88a0,0xbd231615,0xbd1154b2,0xbd50c015,0xbd90f914,0xbd9207ad,0xbdc4f555,0xbd9666ff,0xbce31891,0xbd0e353b,0x3d7a10e7,0x3df6cf06,0x3e28e7b7,0x3dfadd60,0x3dd2079c,0x3d78ceb0,0x3d203193,0x3c2710fd,0x3c5477b2,0x3b10e87e,0xbae1c402, +0x3b2fd813,0x3b4fd130,0xbbd1405a,0xbb05ead5,0x3b44481f,0xbab74baa,0x3cd93e91,0x3ced73c3,0xbc79effb,0xbbd1c81a,0xbc2b1eac,0xbc426789,0xbd06b8c0,0xbd24fd59,0xbd7e6c93,0xbd12c1f4,0xbd0c7ea4,0xbd41e322,0xbd4d29d5,0xbd5642d7,0xbd02754c,0xbd8b6bdd,0xbd96c6b8,0xbd78dd94,0xba4a5ef8, +0x3e0206c3,0x3dc3a872,0x3d56b9a4,0x3d98967f,0x3d409a46,0x3d54910a,0x3d360129,0x3d2c9d32,0x3d1023d5,0x3cee934a,0x3c19408e,0x3b704441,0x3c057cea,0x3cf816b3,0x3c209068,0x3aa983d2,0xbaab5888,0x3a5543f6,0xbc30217d,0xbcf22077,0xbd3d0a12,0xbd763921,0xbd7e4970,0xbd64cbef,0xbd3a404f, +0xbd4ff5ca,0xbca5de6c,0xbcd5bf09,0xbd976c59,0xbda8d738,0xbda8443a,0xbd98f247,0x3c6a6274,0x3daf2aea,0x3e1ac904,0x3e134969,0x3d3d97b8,0x3d433a53,0x3d4a5285,0x3d207984,0x3d099c2e,0x3cf935a3,0x3cfa2250,0x3cea2a30,0x3d057d85,0x3cf2f028,0x3ccf3d06,0x3ca8ac58,0x3c7c6def,0x3c7270c6, +0x3ca64869,0x3ccef1d6,0x3cc88bbf,0x3c84f0ad,0x3bc6f687,0xbc649a4f,0xbcb9d861,0xbcd7b100,0xbd0da80d,0xbd36e8f3,0xbd4e3bc6,0xbd353fe3,0xbcee4898,0xbc4365ce,0xbb15ce1f,0x3d0c6a27,0x3d6ed102,0x3d907537,0x3da00e14,0x3d8e3b65,0x3d54c901,0x3d4ae62f,0x3d063047,0x3cf7bf9c,0x3cdb714a, +0x3cfc6f79,0x3cfde21d,0x3d0750be,0x3cf4bab9,0x3ce6357a,0x3d0003a4,0x3d03936a,0x3d0f56f7,0x3cf6aa44,0x3ced72bb,0x3cba2ac6,0x3cdd5a46,0x3ce2d13c,0x3cdd8315,0x3cd09e7c,0x3cb3d628,0x3c920f48,0x3c90cb9d,0x3c6fa20d,0x3c9e68b3,0x3c151ad9,0x3c80ddf8,0x3cd8c0e9,0x3d138895,0x3d33a402, +0x3d541941,0x3d5922db,0x3d57a47d,0x3d6023f6,0x3d6da0d1,0x3d6606bd,0x3d2ab92f,0x3d20389c,0x3cf9eb2c,0x3d1493fb,0x3d0d49a9,0x3d0e98a6,0x3d1a4730,0x3cf4ccc3,0x3ccb4bbd,0x3c982287,0x3cab7c94,0x3cb5504f,0x3ccfe171,0x3ccbcd2f,0x3ce26d05,0x3cdb8141,0x3ce8463b,0x3ce90064,0x3cee43bf, +0x3d0a1602,0x3d2e7be1,0x3d3bb91d,0x3d477b4c,0x3d41d7a2,0x3d521b90,0x3d7a7200,0x3d88bcd2,0x3d7ed0bd,0x3d6bc006,0x3d6d0c5f,0x3d6ed565,0x3d35b959,0x3d109c32,0x3cd7e9da,0x3c93115d,0x3c64c184,0x3c82caea,0x3cc59e50,0x3c26a13d,0x3beef445,0x3bb03555,0x3bb5f62f,0x3b1abc55,0x3c0778dd, +0x3c372520,0x3c5fc517,0x3c7c28b3,0x3c742892,0x3c75a57d,0x3c8639b2,0x3c8c9f06,0x3c9988cf,0x3cc48837,0x3cdee58a,0x3d0cef2d,0x3d1589f7,0x3d172c76,0x3d1adeaa,0x3d0154a1,0x3d0ee5a1,0x3ce9df38,0x3cc2c194,0x3c91d25d,0x3c60358a,0x3ca85f97,0x3c59df04,0x3c5f792d,0x3c861bb8,0x3c8d5d00, +0x3c95ac62,0x3cb1f91a,0x3cc6ad02,0x3ca4ffd4,0x3c7cd6ae,0x3c5885e2,0x3c6c0847,0x3c428a6c,0x3c260794,0x3c0d8571,0x3c47b4a6,0x3c06e1ac,0x3bbeda24,0x3bb4c153,0x3bd1cf15,0x3be3707a,0x3be8d85e,0x3be87c37,0x3bdb9928,0x3c1fce73,0x3c430c59,0x3c1479be,0x3c3119ea,0x3c5bb814,0x3c8f2a7d, +0x3c9181d4,0x3c97e3aa,0x3ca6651d,0x3cbccefa,0x3cc2525e,0x3cb44d8e,0x3cb66fd9,0x3c9e51e5,0x3c977715,0x3c835165,0x3c4ff856,0x3c27e37c,0x3c0d97e7,0x3c0c5d9e,0x3c1ae241,0x3c3cc27d,0x3c7d2389,0x3babf1eb,0x3b147aef,0x3a430a34,0x3b591777,0x3b95d515,0x3b4fdac4,0x3b788183,0x3b7eb554, +0x3b850760,0x3ba5e6dc,0x3b96570a,0x3b4ebf49,0x3b5bd854,0x3b67217d,0x3b49a7e5,0x3b7d455d,0x3b98e49b,0x3beecee6,0x3bb506e8,0x3b9b1925,0x3b844b8c,0x3b637ecb,0x3b50239b,0x3b31a6af,0x3b1c8b0d,0x3b3c8726,0x3b9d5098,0x3b592c8a,0x3b1bbd84,0xb8281490,0x3a8cd779,0x3acc4ec1,0x3b49e171, +0x3b3f958d,0x3b2bd6d9,0x3b315127,0x3b0f84a3,0x3b06c654,0xba9d33e2,0x3bc3fd73,0x3b8d9a3c,0xba30da72,0x3c093892,0x3c0865e3,0x3b9c659c,0x3bf2a3ae,0x3beabca5,0x3b8e621b,0x3af01ffb,0x3ada12c0,0x3b47951f,0x3c009473,0x3c222c5c,0x3c63c70d,0x3c24d51e,0x3bdc1a6b,0x3b9a60b8,0x3b98f997, +0x3b792ae2,0x3b2ebd15,0x3b0d6ffa,0x3b7a7984,0x3c180fb3,0x3bd2d802,0x3a9f6758,0xbc1b3537,0xbb8bfa81,0xba97bd3d,0x3b855780,0x3ba7fa8f,0x3be7ce9c,0x3c1ca39e,0x3bb8710d,0xba2542b1,0xbbbc7f69,0x3becddf6,0x3bd86a6d,0xba185d1b,0x3c032193,0x3c34d475,0x3b66a6cf,0x3c1fb8e2,0x3c007f82, +0x39f647ac,0xb9e45109,0xb9c8dde5,0x3aa2d856,0x3c16dfdf,0x3c6e2eca,0x3cc05a36,0x3c7492de,0x3c29ceeb,0x3bc94d24,0x3bc2300c,0x3b3aa8f0,0x3abec2ed,0xba62731c,0x3b0e4d99,0x3c6600af,0x3bbb502a,0xbacb5a8b,0xbc94bd12,0xbc334f3d,0xbbe28f03,0x3b8ba570,0x3bb6d035,0x3bc020c3,0x3bc4d47c, +0x3aeec4ef,0xba923da9,0xbc2149fd,0x3bbe0f07,0x3be1a815,0xbc55c999,0x3c8c5cdd,0x3ca5468b,0x3b9d6e9c,0x3c8fc28e,0x3c52db2d,0xbb29249c,0xbb9d66f5,0xbb9b5267,0x3b201dd4,0x3c8e24d4,0x3cceead1,0x3d055b3c,0x3cafeed2,0x3c3309ad,0x3b57177a,0x3bdfc51d,0x3adcc15e,0x3a1d91e8,0xbb578a0f, +0x3ab7ec3e,0x3cae18cc,0x3c13fba5,0xbb9048d1,0xbd1e121d,0xbca3efdc,0xbc30ebc9,0x3b77e623,0x3c34a873,0x3c4f36d8,0x3ca8ea36,0x3c08289f,0xbb8c0172,0xbc3b56ea,0x3c9585ff,0x3c73f288,0xbc2f55de,0x3c309593,0x3caf2a40,0x3c252c6a,0x3cb9769f,0x3c274c71,0xbc4b634e,0xbc44048a,0xbb2e2771, +0x3bc22379,0x3ccd4462,0x3d076725,0x3d1a6bc7,0x3cc1a756,0x3c2f9e95,0x3bbf911b,0x3bc31ab2,0x3892fb6e,0xbb34d130,0xbbe73e30,0x3b0eae19,0x3cb3298f,0x3bef5a88,0xbc3dffe2,0xbd1cbcab,0xbcd3afe4,0xbc758974,0x3bef903c,0x3c26511a,0x3c58e92e,0x3b85606b,0x3b68a448,0x39d5c9f7,0xbcb66e89, +0xbdc0640f,0xbd83c023,0x3d53979b,0x3c994b11,0x3c524807,0x3a92950e,0xbc45b061,0xbc922cc0,0xbc1987fd,0xba3171bb,0x3bdcf4ca,0x3aaf4871,0x3c87320d,0x3cbbfe68,0x3d50d937,0x3cce47d3,0x3c8bf051,0x3c7af3a8,0x3c96a857,0x3c6229ea,0x3c326497,0xbbd3c211,0xbc13cc63,0x3c7bbc13,0x3cb74a07, +0x3cb49fed,0x3d0a0a30,0xbd736708,0xbd9ae58b,0xbcedaee9,0xbd03ceaf,0xbc98fd0e,0xbc63ba8e,0x3beb2340,0xbcaea8f9,0xbbfe6d1c,0x3d1568fc,0x3c4cb5a3,0xbd0d455f,0xbd2573b3,0xbd23b1ae,0xbc94d2fc,0xbc8fe1c2,0xbc197265,0xbc7e6579,0xbb756b47,0x3a87af35,0xbb0d31b3,0xba6feade,0xb7bea966, +0xbbf8285b,0x3c6bd9a8,0x3c8c4bee,0x3b9a3931,0xb9eb2f31,0xbc291759,0xbc8fc942,0xbc2761f0,0xbbc5e6a5,0xbc2b9804,0x3a3117cf,0xb94de762,0x3b6d9444,0xbb16c7e8,0xbc178dc6,0xbce2a5ca,0x3a5b73cd,0xbc226668,0xbd244b18,0xbce2b51c,0x3ccb6868,0xbc9bee57,0xbd146163,0xbca399e6,0xbd3ba081, +0xbcf1be9e,0xbc9c5924,0xbc2118bd,0xbc538b6c,0xb94b6342,0xbb6652f9,0x3b427dbd,0x3aadf636,0x3a9f522f,0x3c0e17c8,0xbb473fd0,0xbcaf998e,0x3c6e8276,0x3c96c9a2,0xbb6f724e,0xbc132ca2,0xbcb042e9,0xbcbd7235,0xbcf54de5,0xbcf4c446,0xbc9de98c,0xbc180bd2,0xbc1e7863,0xbd194244,0xbd233570, +0xbd2904ce,0xbd664fea,0xbc107683,0x3b44671b,0x3bacf055,0x3d13b51e,0xbce678ee,0xbcb70428,0xbcc90230,0xbcafcd9d,0xbbb734bf,0xbc19e68a,0xba9dabb1,0xbc8dafdb,0xbc035078,0xbb44055f,0xbba9133a,0xbaca981a,0xbadf364b,0xbb68db1a,0x3b69df90,0xbbe691d5,0xbca41aff,0x3c4225f6,0x3c6e1da5, +0xbbf49324,0xbc600ebc,0xbcd90005,0xbcda2bbe,0xbd07a7a7,0xbce5b854,0xbca5c489,0xbc575665,0xbc2d3d49,0xbcf6d3de,0xbcf75ba1,0xbd067b52,0xbd86633f,0xbcb7f0db,0xbcb39884,0xbd483b89,0xbce61e4c,0xbe05037e,0xbd0d2c49,0x3d2f6cf7,0x3d412370,0x3d34c9ee,0x3c2ff568,0xbc2900b6,0xbc15afca, +0xbb5f04a8,0xbbd28ce6,0xbc41b37a,0xbb450fa1,0xba06cc23,0xbc52bc61,0xbc33d4bc,0xbc35bb58,0xbc847232,0x3c04023d,0x3c29dfdd,0x3b33a5d5,0xbc94fb97,0xbcc20669,0xbc84e706,0xbc948301,0xbc5de87a,0xbca612cf,0xbcabb44b,0xbcd51513,0xbcac3374,0xbcb56f8a,0xbcfeba71,0xbd5eb4d3,0xbcdf5c1b, +0xbd33051f,0xbe04393b,0xbe14a728,0x3e1e94fd,0x3e2e768d,0x3df287e2,0x3df137b1,0x3d8b606f,0x3dab79d7,0x3da0b151,0x3d56bc81,0x3cf14a44,0x3ca10d69,0x3ba4d871,0xbb06a091,0x3b9d7eb4,0x3c49e710,0x3c33a320,0x3bb6edf3,0xbc2eedbd,0xbbf5a123,0xbc485a85,0xbca3e528,0xbc54a624,0xbc974f76, +0xbc91d7d2,0xbc4e8b15,0xbbc13158,0x3b903636,0xbc761fe6,0xbcc45bdd,0xbc74d9c1,0xbd266b59,0xbd5728cd,0xbdc21aac,0xbdb597f7,0xbd26fcea,0x3d4a30a8,0x3ddc8f1e,0x3d9459c6,0x3d70a241,0x3d788601,0x3d6855ac,0x3d50694d,0x3d4eb663,0x3d3f5f8f,0x3d0f7894,0x3d26b13d,0x3d158b3d,0x3d053aa8, +0x3d0d198d,0x3cce2896,0x3bd49c05,0xbb1a2b0a,0xbb855e25,0xba6273d0,0x3c2bdfe4,0x3c01d10a,0xbbe9e1aa,0xbc8add45,0xbcddeacc,0xbd1e2872,0xbd453d4a,0xbd73fd87,0xbd92cca5,0xbdb014cc,0xbda6d25d,0xbd6683e5,0xbd346c7c,0xbbfe4d97,0x3d009722,0x3da7af5d,0x3dc7910f,0x3dbfdb8d,0x3d991e8e, +0x3d9892f8,0x3d55140e,0x3d47ff60,0x3d2ce12a,0x3d108bd0,0x3d166249,0x3d01d2fc,0x3cdca1bf,0x3ce0f5d5,0x3cef0258,0x3cde95e8,0x3cdef7b4,0x3ccaf17c,0x3ca78bd3,0x3c86e316,0x3c82e1f4,0x3c983438,0x3ca95bbf,0x3c9a32e4,0x3c60b6c2,0x3b931a07,0x3b4ba765,0x3a88c5af,0xbb9087d0,0xba58c394, +0xbb82046a,0x3b92b585,0x3c243c49,0x3ce9c415,0x3d187596,0x3d6affbb,0x3da57381,0x3dbd6a5d,0x3dc97aeb,0x3dc2df96,0x3db47fb9,0x3d4bdcf9,0x3d457d0f,0x3d19b171,0x3d224520,0x3d0a64e0,0x3cd8fb11,0x3cba2f7c,0x3ca72de9,0x3ca6f8ea,0x3cacbc99,0x3ca65a23,0x3ccc956a,0x3cc6c7c8,0x3cd8704f, +0x3ce52115,0x3ce95bbc,0x3ce07857,0x3cc39673,0x3d027225,0x3ccaf1c1,0x3cc6b804,0x3cc77581,0x3cc955dc,0x3d14134f,0x3d3f6192,0x3d5d62d2,0x3d7f1613,0x3d987ae1,0x3da0f66e,0x3da06c1c,0x3da8696b,0x3dad26df,0x3d8fae9b,0x3d7648ce,0x3d6f159f,0x3d50c8e0,0x3d4f06e8,0x3d46e6b4,0x3d0f00b8, +0x3d2fd527,0x3d265d0c,0x3d35ef5d,0x3d482bb5,0x3d306ec3,0x3d4326ad,0x3d27452e,0x3d20ef29,0x3d1a8c5c,0x3d16c172,0x3d0f56d0,0x3cfe1d43,0x3ce68c56,0x3cec07aa,0x3cdbb63e,0x3cafacf6,0x3ca17551,0x3cc3fffe,0x3d06a103,0x3d1376b0,0x3d1caa59,0x3d158357,0x3d03fc32,0x3d18d6d9,0x3ceaff3b, +0x3d0d604f,0x3d2c2ba3,0x3d256dcd,0x3d4df110,0x3d606127,0x3d5ee676,0x3d5ffbcc,0x3d628742,0x3d14f5fa,0x3d1d7419,0x3d0d6768,0x3cee703b,0x3cc4bd16,0x3d09429a,0x3ce61812,0x3cae95cd,0x3ca4940f,0x3cb90e7b,0x3cc47ae9,0x3cc41a8b,0x3cc5d767,0x3cceaefd,0x3cf6d343,0x3d05b5be,0x3cd67905, +0x3ceafc90,0x3cfb9918,0x3d09545c,0x3d0cadb3,0x3d0ff112,0x3d152f93,0x3d20ed70,0x3d2a1ee2,0x3d30d935,0x3d44bfdb,0x3d41503d,0x3d479d78,0x3d46b100,0x3d39f152,0x3d3b39c3,0x3d293a7e,0x3d1c6a12,0x3d18de78,0x3d167f49,0x3d6cbe99,0x3bfa4316,0x3b763b9d,0x3b5c8537,0x3b8584fc,0x3b861017, +0x3b97aece,0x3b9c70e5,0x3b7c4884,0x3b5d814a,0x3b6d5b4f,0x3b78a045,0x3b8fd942,0x3b5e941e,0x3b4c19ca,0x3b4a6bd7,0x3b92a123,0x3bb65fc9,0x3bc4d0b7,0x3bd179eb,0x3bd8497e,0x3bd1d5ca,0x3bca3a9a,0x3bbef3ea,0x3bac430c,0x3ba00b65,0x3b9ae538,0x3bbfa91f,0x3b5f03cc,0x3b403d2f,0x3b2d82c7, +0x3b4065c1,0x3b5a044d,0x3b88b27a,0x3ba3d639,0x3b8f347b,0x3b3a44f9,0x3b72ca50,0x3934de87,0xba90c028,0x3add3728,0x3bd49419,0x3c03741b,0x3bd63591,0x3ba16f10,0x3bb87fbb,0x3bc8a062,0x3beab5bf,0x3c1bbd6a,0x3ba39d48,0x3b86bb10,0x3b9baa0a,0x3bcf6680,0x3c1e11f8,0x3c4f2865,0x3c4f4281, +0x3c43af9d,0x3c2aeb53,0x3c2a0080,0x3c1d069e,0x3c017b34,0x3bce056a,0x3bcb4c13,0x3c330114,0x390a9332,0xbb71dac9,0xbb54ee24,0x392326b8,0x3b7ab4d8,0x3bc5a50d,0x3c282cf2,0x3c2aee96,0x3b672586,0x3b09c5e9,0xbb26d1f8,0xbbb2b116,0x3a1eb203,0x3bc2450c,0x3c5a8c59,0x3ba2fe26,0x3b60b850, +0x3bbcfb7a,0x3bc5e30e,0x3c0956f1,0x3c1cbfd9,0x3baeec85,0x3b2804b7,0x3b6d8c24,0x3c11ac9d,0x3c5da81f,0x3ca419ce,0x3c9db79e,0x3c973e3f,0x3c674cc3,0x3c73791f,0x3c44a899,0x3c10e086,0x3bcec62d,0x3b9cbacd,0x3c518987,0xbbb7c700,0xbc27ac56,0xbc0f3b45,0xbbddb354,0xba1ece78,0x3b800a67, +0x3c2dffd3,0x3bfa604a,0xbb9b5db0,0xbb17f7de,0xbc48693b,0xbc8b5a82,0xbb5c2722,0x3bf87d5e,0x3c537614,0x3c0b3ae4,0x3bda6f71,0x3bab6821,0x3c199b00,0x3c2f8e10,0x3c471d15,0x3afdc4fc,0xbabe443b,0x3b937e6c,0x3c4c9771,0x3ca7fe37,0x3ced1ae4,0x3ce3d716,0x3cc9bcff,0x3c8cadcc,0x3c9dfade, +0x3c7ee5cf,0x3c2eae97,0x3bd88dfb,0x3bc0bc8a,0x3cae5642,0xbc46b558,0xbcb4aaae,0xbcbf14ae,0xbc30239d,0x3aa38407,0x3baff0b2,0x3ca026d3,0x3c98a382,0xbba0bbe7,0xbbf6715e,0xbc4e7261,0xbc6a8095,0xbb33acbc,0x3c05e1d6,0x3c5b504f,0x3b798eda,0x3bec1711,0x3badc99e,0x3c5b5868,0x3c2bf043, +0x3a456ecd,0xbbd47257,0xbb4aa1ed,0x3b9bda63,0x3c9397c6,0x3ce13f74,0x3d1522ab,0x3cef81fd,0x3cd19ba1,0x3ca8f245,0x3cb6a779,0x3c88e7fe,0x3c2c127e,0x3ba19812,0x3bb747ae,0x3c8aca41,0xbc8d46ac,0xbcffc061,0xbcbbe05d,0xbc9ee0e0,0xbb6e7b87,0xb9fc7e61,0x3c851a7f,0x3bf1e504,0xbc985580, +0xbc4847fe,0xbc315753,0xbc1d673a,0xbd4b418b,0xbd35e7d4,0x3cf6ac26,0x3cd677c1,0x3ccaf12a,0x3b45ccda,0x3b183768,0xbb450a28,0xbbdb2080,0x3bc989ee,0x3bccc056,0xbb4b6f0e,0x3c413139,0x3c96b5ec,0x3d1ed73a,0x3d0cafe9,0x3cee51cc,0x3c269db0,0x3c5a02f9,0x3c201998,0x3bbd678b,0x3be9c91b, +0x3bf5982a,0x3c8055dd,0x3bc90c42,0x3c0e02a1,0x3d23d1d1,0xbcfc7a6b,0xbcf9927c,0x3c1bd6e1,0x3cf611d8,0x3d1ca26a,0x3c8f3ba4,0x3ba3c04f,0x3c2571c1,0x3c63cf6e,0x3bcdf98b,0x3b66835c,0xbc945556,0xbcbec473,0xbcc00014,0xbc520b9b,0xbc3d56e6,0xbbbb0da4,0xbbdd2b89,0xbb9b4cd2,0x3a9f086f, +0x3b8f0a7e,0x3c313e86,0x3c19e6ea,0x3b8bf1b5,0x3c3f5328,0x3c654477,0x3cb8bea9,0x3c691731,0x3bf22cd5,0x3a14166d,0xbbe8e421,0xbba25bd9,0x3a9a4f46,0xbc853f05,0xbcb9058a,0xbc88a575,0xbcb1a7d8,0xbcbd631e,0xbc60112e,0xbd291391,0xbd6fb7e3,0xbd8885b3,0xbc8418d2,0x3cfe717c,0x3d2ba1ad, +0x3c10fefe,0xbb674ca9,0xbcd0c576,0xbcb96e17,0xbc6ef2d3,0xbc9ddb23,0xbc5b3051,0xbb2683e0,0x3a9fa0c4,0xb9f5da4a,0x3a55644e,0x3baedac7,0x3be65d0b,0x3a83dafd,0xbae65cc7,0x3c08964f,0x3c249cbf,0x3c9fa828,0x3bb95b66,0xbadac98d,0x3b892939,0xbb16efa9,0xbb5a1af5,0xbbf51dc1,0xbc41c50f, +0xbc611b5a,0xbc9b4408,0xbcea6000,0xbcecbc0f,0xbc83b5b5,0x3bd13d61,0x3c5670bb,0x3b4fc264,0x3c91582b,0xbd51e730,0xbd2b9947,0xbcfa732d,0xbd0ae320,0xbd41fe1d,0xbccac9fa,0xbcaa12aa,0xbcff5e30,0xbca1554d,0xbc2bb8ec,0xbb9e5415,0x37ea38dd,0x39ed9a5d,0x38adbda9,0x3ab18c41,0xbaa44d21, +0xba41974e,0x3af8b804,0x3bac9ff6,0x3c942727,0x3b996d03,0x3a5697d9,0x3b3a6b23,0x3af58dff,0x3a0b1e81,0xbaef1338,0xbc0389f2,0xbc51a6b1,0xbc44448d,0xbce53b9b,0xbcce9e14,0xbb0aff1b,0xbbf4ee81,0xbb3da92a,0xbafafdc3,0xbd41f9f7,0xbdfcb5ba,0xbde49e58,0xbd9579e4,0xbd28566d,0xbcd3977a, +0xbccd82b2,0xbcd3f571,0xbcb4ad53,0xbc754545,0xbc4ccb9e,0xbb4f9142,0xba0c8e77,0x3b663f9d,0xba513e21,0xb9712dce,0xbb81a382,0xbbffc6e4,0xbbe5f416,0xbabad7ad,0x3ceaee53,0x3ba92631,0xba3e4631,0xbc4fb990,0xbc94968c,0xbcab804e,0xbca11984,0xbc5f316b,0xbc4c9e63,0xbbf5e2f7,0xbcc18410, +0xbd13738e,0xbcc2d418,0xbd6b4688,0xbd94e5f0,0xbd6cc2b6,0xbde81752,0x3d6d807b,0x3dd89fcb,0x3df6e492,0x3debbd42,0x3da3f6be,0x3dbc8e5f,0x3d9f081c,0x3ccc7968,0x3c9f1804,0x3c1c9055,0x3c24eec1,0xbaeb10dc,0xbb0eaa47,0xbc049179,0x3a9c0cb7,0x3b49012b,0xbbc4d349,0x3c2276f3,0x3c1507ef, +0x3b93360d,0xbb8e2510,0xbc30cb8b,0x3aa201db,0xbbbda457,0xbc83cac3,0xbd028a10,0xbd0022aa,0xbd13b6ee,0xbd284b2e,0xbd244fbb,0xbd01afa1,0xbcfadf27,0xbd8c2b97,0xbd9d26b1,0xbd8b35f9,0x3c0e70e4,0x3d8dc38e,0x3d88f009,0x3d8b8ef7,0x3d878747,0x3d775460,0x3d5ff903,0x3d44115b,0x3d49f286, +0x3d35fd05,0x3d2030a4,0x3d1b7ddd,0x3cf96b54,0x3cb84ba7,0x3cb16411,0x3c1d686e,0x3b88b86f,0xbb93d0fe,0xbbb73043,0xbbe7931f,0xbc42464e,0xbccf7f55,0xbd07f139,0xbd1bab60,0xbd39a349,0xbd43eb6a,0xbd113abd,0xbd255bff,0xbd3ed69f,0xbd51f33f,0xbd83021f,0xbd89dc72,0xbd938137,0xbcf99fd6, +0x3b3a0982,0x3d2254cc,0x3d4f40df,0x3dae3708,0x3d985694,0x3d9a7964,0x3d87f512,0x3d5c6c30,0x3d4beec8,0x3d49efeb,0x3d479223,0x3d30ea82,0x3d23ce90,0x3d0afb68,0x3cef2a9a,0x3cdec690,0x3ce57dd8,0x3caaf4ec,0x3c630896,0x3c1f7cb4,0x3b47fc1c,0xbb8beaed,0xbc3635be,0xbc99574c,0xbca77853, +0xbcabc7cd,0xbcba681e,0xbcab7291,0xbc91cffb,0xbcaa7a57,0xbcab2893,0xbcbfdaa5,0xbbef3385,0x3c6149e5,0x3cf50b9d,0x3d4c7af2,0x3d8ababe,0x3db7cc6b,0x3daf51ff,0x3d8b148b,0x3d8088ff,0x3d614e6b,0x3d5bab5d,0x3d4f1356,0x3d4628b6,0x3d3d083e,0x3d32cdd8,0x3d1f4d2d,0x3d19b7b6,0x3d015940, +0x3d18d404,0x3d076a84,0x3cfe2577,0x3ced86fc,0x3cd86c6c,0x3cb7808c,0x3c8df206,0x3c48ae60,0x3bd6c80e,0x3c0bfb67,0x3c05fa29,0x3bd853f6,0x3c23642f,0x3c387d58,0x3c47f2d8,0x3c8d9dd7,0x3cbe1acf,0x3cce7454,0x3d3df59c,0x3d8a1dc8,0x3db174e2,0x3db3eec6,0x3db13703,0x3db615c9,0x3d98886b, +0x3d87a9c8,0x3d8e99a1,0x3d8e84de,0x3d8c9752,0x3d82b820,0x3d862cc5,0x3d80c7d1,0x3d7a4861,0x3d7a99d3,0x3d69e37d,0x3d60d55a,0x3d4e72c8,0x3d4507c0,0x3d3ed938,0x3d2f19ac,0x3d22184e,0x3d22b9a6,0x3d199945,0x3d13de44,0x3d0b3baf,0x3d11da90,0x3d293e72,0x3d392e62,0x3d45abac,0x3d4d2830, +0x3d503793,0x3d631f81,0x3d601d83,0x3d6254be,0x3d6395d4,0x3d30b358,0x3d35b8eb,0x3d490cf9,0x3d317802,0x3d5713be,0x3d819668,0x3d3ffaaa,0x3d41e616,0x3d3d1d3a,0x3d3308c2,0x3d2babb9,0x3d36b783,0x3d2f8d7d,0x3d26d86f,0x3d20a287,0x3d214a80,0x3d21d857,0x3d213c33,0x3d1f2862,0x3d1d2b63, +0x3d24198e,0x3d25e8cc,0x3d1c3e08,0x3d1be48f,0x3d18feae,0x3d14fa6e,0x3d19b59e,0x3d1c97ee,0x3d1c60ad,0x3d203a31,0x3d22362d,0x3d225a98,0x3d2c6e0b,0x3d2d0ea6,0x3d3a7a91,0x3d47c6dc,0x3d513782,0x3d641703,0x3d614736,0x3d521921,0x3d5273fc,0x3d4a1f0b,0x3d941e13,0x3c36d986,0x3bd3e1d3, +0x3bd30c72,0x3bdea649,0x3bdcaa1f,0x3c181079,0x3be33fb4,0x3bc629f9,0x3bd227f1,0x3bb6adb8,0x3bc7a1eb,0x3c02e9bd,0x3bcb935f,0x3bb6415f,0x3baa1fd1,0x3bd60595,0x3beff8cb,0x3bec1c5f,0x3c07f27c,0x3c0cf8b2,0x3c0c8614,0x3c057d55,0x3bfe679b,0x3bed6cb0,0x3bf0a77f,0x3bdbdab8,0x3bc10645, +0x3b9baec2,0x3b99fee9,0x3b867e93,0x3bc19b0f,0x3bd61a73,0x3bc69c21,0x3beabf9b,0x3bd5faff,0x3baa2b53,0x3bcba2f2,0x3bb11776,0x3b973572,0x3bcd3cb7,0x3c43eede,0x3ca4b449,0x3c0af697,0x3bcef6db,0x3c315963,0x3c00c477,0x3c1d24d6,0x3c68a717,0x3c150238,0x3bf85d63,0x3be2182f,0x3c039bb6, +0x3c3543b8,0x3c50ab24,0x3c73267e,0x3c7530b0,0x3c655b4f,0x3c507a8b,0x3c3e1587,0x3c2beb68,0x3c19b2d4,0x3bf63437,0x3bd83bd1,0xba9f9574,0xbb7f56b9,0xbb7577d8,0x3bd07ec2,0x3c1e8c01,0x3bc33e40,0x3c483511,0x3c524648,0x3be22e36,0x3bdba9fe,0x3bc0d0ea,0x3b803788,0x3bda3614,0x3c455e95, +0x3cf0cf24,0x3c038efe,0x3b34a029,0x3c517429,0x3bd6e6cb,0x3c1a332c,0x3c95467f,0x3c12a014,0x3bbba860,0x3baa2891,0x3c23056f,0x3c5af85b,0x3c8933e9,0x3caccc90,0x3cab2165,0x3c93f4f3,0x3c8639fe,0x3c608a35,0x3c3cc28a,0x3c283684,0x3bbe8547,0x3b1d5994,0xbc1ef9b1,0xbc2ac257,0xbc3b647f, +0x3b69389a,0x3c1b731a,0x3b42e4d4,0x3c42d42d,0x3c0bf832,0x39cbbe4f,0x3b9d4add,0x3aa03427,0xbb4346b6,0x3bb195ea,0x3c8a2eb3,0x3d319c4a,0x3c0028e9,0x3b302bc9,0x3c7da886,0x3c050421,0x3c312967,0x3ccea385,0x3c071f31,0x3b186439,0x3bb43f20,0x3c3d5893,0x3c99c908,0x3cc5bda0,0x3cfa89b6, +0x3cf26990,0x3cc413a8,0x3cafd42f,0x3c8b2162,0x3c653def,0x3c45adb6,0x3be29c13,0x3aac7892,0xbca9041b,0xbce5dfe3,0xbcf23506,0x3b27d3d9,0x3c5a87d4,0xba9c4d27,0x3c9b5038,0x3c9a63a9,0x3a6c9cb1,0x3b8365a6,0x3c0aa0a6,0x3b9df8fc,0x3bb64e7e,0x3c70800f,0x3d35608f,0x3bb50d85,0xba67a374, +0x3c5f4667,0x3c0a2fbf,0x3c300c3b,0x3c9df3c9,0x3b09a2da,0xbb1f8b6c,0x3baf291b,0x3c71d4ca,0x3cbe8abe,0x3cf62b77,0x3d0eadb2,0x3d01ac4d,0x3cdb8bf6,0x3cc51ce9,0x3c932dac,0x3c8164b5,0x3c3853a9,0x3b42528d,0xbb95cf47,0xbce956ec,0xbd07ba12,0xbceecca6,0x3a4bd572,0x3c5a2f88,0xbb6e7177, +0x3c5957ca,0x3b903331,0xbc14167c,0x3a8c9da1,0xbb9f3bea,0xbca4d623,0xbc9d19fd,0xbc9200eb,0xbba160cc,0x3cb221c1,0x3d011d08,0x3cbc49cd,0x3c366096,0xba653868,0xbaeee473,0x3c0a4df0,0x3c3bdb18,0x3b6ae549,0x3c7f4093,0x3ca0d3a0,0x3ce51d6d,0x3d362bab,0x3d2ba7d9,0x3cb60061,0x3cb30ebe, +0x3c52e14f,0x3b8118e5,0x3a4110c9,0x3b972f40,0x3c426dad,0x3beaf327,0x3b82db03,0xbbfccde6,0xbc33e1a2,0xb9ef12b4,0x3cf863c8,0x3d035494,0x3d1f2694,0x3d22f6dc,0x3ca83afe,0x3c645359,0x3d933fa0,0xbc4e51c8,0xbca28a7f,0xbc024f72,0xbbd67f46,0xbbfefb98,0xbc2233c2,0xbb720e9c,0x39b883bd, +0xbb1f229e,0xbba59edf,0xbb210f64,0x3b9bdcd6,0x3c3223d8,0x3c48ad9c,0x3c50b605,0x3bf575f0,0x3c0d547c,0x3cb238c3,0x3c50e7b3,0x3bf89dc1,0x3b14b80c,0xbc0568e9,0xbc41c5d7,0xbc3802df,0xbc4bc60f,0xbb2dfa8a,0x3c3036f1,0x3c3b5b8b,0x3b092145,0x3c3cad0b,0xbd677a50,0xbd918bf6,0xbcd493e9, +0xbc9a5b0b,0x3bf178bb,0x3d3769df,0x3c9b7317,0xba53eaa2,0xbca0e715,0xbcaea155,0xbc4fac22,0xbc57700d,0xbc0bb91f,0xbb425ec2,0x3a89e6cb,0xbaa177ef,0x3b8c1f6c,0x3baef919,0x3c1bcffc,0x3c145bb9,0x3c8957c9,0x3bc7d137,0x3c174971,0x3d0a7d21,0x3c792bcd,0x3c1876d4,0x3bc71268,0x3a3acc44, +0xb9d1f25a,0x3aa8ebc4,0xbc032617,0xbc05e0d9,0xba8cb7b8,0xbb71fb08,0x3b203bcb,0x3c4c3875,0x3b33a1aa,0x3aa12d8b,0xbc2d3f6e,0xbb937431,0xbc28c4b2,0xbd33a08a,0xbd098a51,0xbd0e6a43,0xbd842d5b,0xbcd36d19,0xbc9afd5b,0xbc9bd8d6,0xbc94114a,0xbc3a03bc,0xbab97fce,0x3a12a62f,0x3b3ecb31, +0x3b541ca0,0x3b9ac11f,0x3bfa1b60,0x3c21588e,0x3b1a36b5,0x3c207051,0x3d1c852e,0x3c8e9838,0x3c22fa7a,0x3b06d4d3,0xbb81f861,0xbc116e3f,0xbba8649d,0xbc927ef1,0xbc94fabd,0xbc2e3276,0xba26e905,0x3bbd9410,0xbc072091,0x3caef556,0x3ca5f405,0xbca5d8e5,0xbb2ca877,0xbb49241b,0xbd3e3a29, +0xbdb70614,0xbd8de1fe,0xbd4a251d,0xbcdba465,0xbc38bd0f,0xbc33524b,0xbc0856ff,0xbbac0048,0x3b6f6fb2,0xbaa6df2d,0x3a8289b7,0x3bd5d6f8,0x3b85d136,0x392b0b0a,0xbb5c13ae,0xbb73ee21,0xbad4c890,0x3c960491,0x3bffc8e0,0x3a9d6eb7,0xbc3a3f5e,0xbc717ae2,0xbcc44a63,0xbc977487,0xbca8bffa, +0xbc653522,0xb9a97e41,0xbb865ff5,0xbc7175b4,0xbd275fa0,0xbd323788,0xbd5397ab,0xbd4fb308,0xbbc4a757,0xbde5e940,0xbd8e66a1,0x3c6b8a30,0x3ca54a21,0x3d093d86,0x3cbb8aec,0x3c18da3e,0xbc82b029,0xbc04f48c,0xbc406b23,0xbacf6491,0x3b86c3b7,0x3bddf5ad,0xbc077f0e,0x3b5fdb8a,0x3bee56c5, +0x3c56177b,0xbb0727cf,0xbb1a5022,0x3c6f632c,0x3bbbde60,0xbab79b61,0xbc830d23,0xbca85efe,0xbc9af7e4,0xbc18e19f,0xbc8c4a10,0xbc952d1d,0xbbcfc89d,0xbc93a5b4,0xbc7080d7,0xbc902020,0xbb92d111,0xbccdbf47,0xbdb375a0,0xbdd5c32a,0x3d6dabe9,0x3d9fc54e,0x3da48b53,0x3d9f470b,0x3d9ab607, +0x3d726fa8,0x3d56f252,0x3d7eced9,0x3d56609e,0x3d355345,0x3ce80c1a,0x3cd821fc,0x3cccd11b,0x3cd2659c,0x3c8e0eb8,0x3b92653d,0xbc04f5c9,0xbc6251da,0xbc8c367f,0xbc045980,0xbc6c5fe8,0xbc94133c,0xbc76f010,0xbca2bbaf,0xbca276b3,0xbc8d3be1,0xbc8f8c09,0xbcc057ab,0xbcf1f1e2,0xbd16d0eb, +0xbd4fb993,0xbd88e754,0xbd991bd1,0xbd7af8b8,0xbc665e0c,0x3ccd3073,0x3d73af4c,0x3d97b5c6,0x3da011b3,0x3d9d29a3,0x3d92e10a,0x3d77d049,0x3d7cf64e,0x3d82c25a,0x3d67f161,0x3d45e040,0x3d1f856e,0x3d0358c8,0x3cd3009e,0x3ca731a7,0x3c81785b,0x3c234169,0x3b8da186,0x39abddb1,0xbba8e243, +0xbbcb22f6,0xbc82b9ed,0xbc9c75bd,0xbcbd96d6,0xbcda5418,0xbcf3231e,0xbd01d148,0xbd1726c3,0xbd22fc04,0xbd55e28b,0xbd29ed61,0xbd19da9d,0xbd16b2eb,0xbcc6adb4,0xbb871a19,0x3cd5615d,0x3d28afec,0x3d2ed2af,0x3d43eb01,0x3d4745ac,0x3d4468ef,0x3d54e286,0x3d6300a6,0x3d661ebe,0x3d5d6e83, +0x3d460cc8,0x3d370e53,0x3d2e6470,0x3d097014,0x3ce3dea4,0x3c9e673d,0x3ca5cd65,0x3c6b91fb,0x3c56b3ea,0x3c051c9c,0x3c106324,0xbb0f09bd,0xbbe863a8,0xbc24fd3b,0xbc862336,0xbca5653f,0xbcd950e8,0xbcf752d5,0xbcf7a7df,0xbd01406a,0xbcff5edb,0xbc8bb19c,0xbbaf7f32,0x3ba4e004,0x3cbfc63b, +0x3d148777,0x3d357583,0x3d2cd6af,0x3d312a84,0x3d3720e2,0x3d71f82c,0x3d56826d,0x3d5007ad,0x3d54a5b5,0x3d470598,0x3d609ed7,0x3d4631d9,0x3d404f62,0x3d30ddbe,0x3d28cbea,0x3d1a47cc,0x3d15a485,0x3cf3aba1,0x3ccbdd9b,0x3cc43930,0x3c573b03,0x3c76bd5e,0x3b8dc5eb,0x3beed661,0x3c2f3800, +0x3c6fa792,0x3c8ed3aa,0x3cb0ddcf,0x3ccdac5e,0x3ced4169,0x3d0f3e22,0x3d14452c,0x3d164456,0x3d0bcebd,0x3d0da76f,0x3d07109e,0x3cca7d0a,0x3d017c31,0x3d22a789,0x3d0b1fc7,0x3d06cc21,0x3d1aabd7,0x3d2959c2,0x3d37512f,0x3d1dceac,0x3d2de294,0x3d4129ab,0x3d3da3ac,0x3d39b887,0x3d361795, +0x3d33aeae,0x3d324172,0x3d2f889a,0x3d0f7453,0x3cfc5a3f,0x3d233602,0x3d0e2d43,0x3cf31f6c,0x3cccc002,0x3cd35b96,0x3ccc6a3e,0x3cc124f5,0x3cb7a886,0x3cae0761,0x3ca4df7a,0x3ca57d2c,0x3cae023f,0x3cbd3576,0x3cd166f4,0x3ce81605,0x3d026a52,0x3d0ed3eb,0x3d0f5ef6,0x3d13f24d,0x3d0fc535, +0x3d6b586b,0x3c654b18,0x3c0ee8ff,0x3c1eca2a,0x3c23da0e,0x3c1d3e0f,0x3c414992,0x3c0b0c71,0x3c055fbd,0x3c10467e,0x3c044c9f,0x3c0a5266,0x3c20281a,0x3c0ac45b,0x3c032743,0x3c005098,0x3c08ba74,0x3c108f9d,0x3c0eab36,0x3c230b88,0x3c2a6eb9,0x3c320acf,0x3c240497,0x3c1a45f0,0x3c118160, +0x3c143b5e,0x3c06d204,0x3bcf993c,0x3bd5d53c,0x3bd8638b,0x3bc53d5a,0x3c05d1f3,0x3c0f0cba,0x3bfd2ad7,0x3c13fa25,0x3c100cdb,0x3bf12043,0x3c0544dd,0x3c21b403,0x3c266e02,0x3c3ba90e,0x3c7dc886,0x3cbe8b81,0x3c2530d2,0x3c0ce3d7,0x3c5111c4,0x3c244b3e,0x3c43d498,0x3c672916,0x3c3ad492, +0x3c2c443f,0x3c1fae65,0x3c205af9,0x3c41a16e,0x3c4ccb13,0x3c7d3076,0x3c88f1db,0x3c8fa51a,0x3c773bbf,0x3c61cce6,0x3c4a73aa,0x3c3112d2,0x3bf16f67,0x3b3b0c75,0x3a00a027,0x39848bad,0x3ad48f9d,0x3c33619c,0x3c4fd595,0x3c029b87,0x3c60bb88,0x3c648675,0x3c108134,0x3c262242,0x3c38f48f, +0x3c632493,0x3c7f85db,0x3c98ddd3,0x3cfd1ec4,0x3c338b6d,0x3ba7dbbd,0x3c68db9e,0x3c235523,0x3c44f2ea,0x3c8dc8ea,0x3c423a4a,0x3c1d6633,0x3c07cce2,0x3c389ef9,0x3c4f59ac,0x3c6aa133,0x3ca923d4,0x3cb481aa,0x3cc600cb,0x3c9729cb,0x3c807d27,0x3c54c3a9,0x3c3d69b8,0x3bc0221a,0xbb9a9505, +0xbbfc2cde,0xbbaf76ad,0xbbb8aa8c,0x3c16bc41,0x3c611a8a,0x3b997f10,0x3c64156b,0x3c43a631,0x3bacc564,0x3c0ee538,0x3c24e74d,0x3c060e61,0x3c81708e,0x3cc5a44c,0x3d3ff53f,0x3c21feb3,0x3b81520d,0x3c89c85f,0x3c24bf44,0x3c430c59,0x3cc39722,0x3c2b720b,0x3bcd2395,0x3bfaa26f,0x3c4fa6a4, +0x3c87d562,0x3c8a9603,0x3ce7bd51,0x3cf802ee,0x3cf875f0,0x3cc509a1,0x3c9d29c6,0x3c7506e1,0x3c519f2f,0x3b3c404f,0xbc74b96d,0xbca5ed0a,0xbca91ad7,0xbc740d49,0x3c20f694,0x3c882981,0x3ae5e9a7,0x3c945edd,0x3c99bb4b,0x3b79cdf7,0x3c388f99,0x3c7230c7,0x3cb19980,0x3cab5ff7,0x3cdf20bb, +0x3d5b563e,0x3c18cc22,0x396be9e8,0x3c9bae3e,0x3c29eda5,0x3c4cd1a6,0x3cd9db70,0x3bdf9eb1,0x3a6d6109,0x3c2ae221,0x3c8b5ece,0x3caacfaf,0x3cb56633,0x3d092c1e,0x3d13504c,0x3d143e2f,0x3cd703ef,0x3ca289f8,0x3c891237,0x3c44747e,0xb9b8592c,0xbc9cfd11,0xbcde8330,0xbcbcd30b,0xbc9ec94a, +0x3c0ae70c,0x3c91ee37,0xbaf7def8,0x3c8b8db7,0x3c0bebcf,0x3a9bf29a,0x3b88ab9c,0x3bceb9aa,0xbc00b677,0xbc9eb731,0xbcdc9717,0xbd04713e,0x3c8e1eb2,0x3d0eba93,0x3d0744e6,0x3ca136fc,0x39c38c6b,0xbbb720be,0x3be11901,0x3c63df71,0x3bd41544,0x3cb754b3,0x3cae388a,0x3ccb7f0a,0x3cf6f58d, +0x3cf8aa39,0x3cf6412a,0x3c5c387c,0x3bc6a40e,0x3b93eac9,0x3b5131ce,0x3ba936f0,0x3b44b661,0x3ca438fa,0x3ca06fce,0xbc988e90,0x3caaed5e,0x3cbc5be9,0x3c1a1344,0x3c9b59e0,0x3d29e7be,0x3da25440,0x3d1c7cb0,0xbb82698d,0x3d9bcb81,0x3a6a1dac,0xbc82fbec,0x3bcf420f,0xbba769f0,0xba747168, +0x3944d9a4,0x3bad48df,0x3c1875e8,0x3b804e83,0x3a2a350f,0x3a00c916,0x3c408e05,0x3c1b8805,0x3c6e3727,0x3c951b0a,0x3c82461a,0x3c82e61e,0x3c9e146d,0x3c3fcae5,0x3bff9f4d,0x38b36b35,0xbaf17c09,0xba02ff10,0x3bdf6bdb,0x3c0e74d5,0x3c90a8dd,0x3c9eadfb,0x3c0c7877,0x3c30e1a7,0x3cfbf49c, +0xbc8fa282,0xbd165d3b,0xbcb4a5d2,0xbcdcf2f0,0xbc1e91b2,0x3cb31226,0x3b3ce00e,0xbbdb1e60,0xbbd8db5d,0xbcb766d0,0xbcb05ecd,0xbba90099,0xbb84b341,0xbb11ac54,0x3b0c89ed,0x3adbe58c,0x3be4488a,0x3b7edc42,0x3c07168f,0x3c7693ca,0x3c92cdc0,0x3c048356,0x3c2feb1c,0x3cbeb887,0x3c81f4a7, +0x3c54bdbc,0x3b59bc34,0x3b1e5b63,0x396e2a36,0x3bb46e66,0xbb097c2f,0xbaabd09b,0x3c800a97,0x3c224e73,0x3c9546ea,0x3cda3ffd,0x3b76be6c,0xbad7d52a,0xbc7a6385,0xbc7dfb33,0xbb628da5,0xbc038fb8,0xbcadd67b,0xbccdd322,0xbd1b5cee,0xbcd91ec3,0xbcb2353c,0xbb47830b,0xbc4b2b31,0xbc0af43a, +0x39ac7654,0x3ac00fc2,0x3bb3a159,0x3b64b17e,0x3c0f6ca9,0x3c48f7e3,0x3c6c6a2d,0x3be302f3,0x3c4b4f86,0x3ca969a2,0x3c903339,0x3c8847d5,0x3bed2dcf,0x3bfed0e5,0x3ba814bc,0x3b5c582f,0xbc672a84,0xbc7967ca,0x3b28c3d7,0xbb173948,0x3aed6a4c,0x3bea7249,0x3b841475,0x3c1f6d85,0x3a79cd47, +0x3a455ad5,0xbb51b654,0x3bd3a6c9,0xbd208f27,0xbd3f1d6e,0xbd0e5f67,0xbcdcb6f9,0xbc0511df,0xbac77cd0,0xba8e2478,0x3ba0cdcd,0x3bc992ff,0xb9b5081a,0x3a8ac4ac,0x3c442ac1,0x3c0a5d36,0x3c0cfd8d,0x3c1f055b,0x3c5977b0,0x3c4ecc25,0x3c063589,0x3c7e7d39,0x3c399a06,0x3b14d4ac,0x3bf8218f, +0x3bc697cb,0x3b1c031b,0xbc2037a0,0xbc2231a9,0xba0c206e,0xbc789616,0xbca03e5e,0xbcb3aec4,0xbd1d6a69,0xbd3857c8,0xbcc68e29,0xbc74e391,0xbdd8e87f,0xbe0b86ad,0xbd906faf,0xbd4e7f83,0xbc7d870f,0xbd0faa37,0xbd300cb2,0xbceaafe4,0xbcda1413,0xbce2c65b,0xbbecda10,0x3ba3e50e,0x3c373ba4, +0x3b8257b4,0x3b0198d0,0x3b843783,0x3c5c4df7,0x3a24d949,0x3b532de7,0x3c3e90fe,0x3c40fec8,0x3c269273,0xbb350e73,0xbc172818,0xbc548b95,0xbc9745c2,0xbc5c2df8,0xbc128a5f,0xbc948a48,0xb949d8e6,0xbb42a9ac,0xbc65d4b1,0xbcaf7280,0xbcfbef77,0xbd2eaff0,0xbda8ce79,0xbca61ee2,0x3c7045ef, +0x3d0f5bf1,0x3d1d63d6,0x3d1f2983,0x3d201e2b,0x3d147fb3,0x3d33afb1,0x3d1f748d,0x3d1b0d51,0x3cad3ae6,0x3c9e2fa0,0x3c53c73b,0x3c17b361,0x3c3e42b5,0x3c09197a,0x3c0ab377,0x3a19879c,0xbb2a66a9,0xb7d50a2e,0x3a4acd1b,0xbb0d1953,0xbb727acb,0xbb493d4b,0xbbed8d5c,0xbc01a73b,0xbbe1748e, +0xbc558987,0xbcbd3048,0xbc674eea,0xbca2e5c7,0xbcd0cf20,0xbd2d27a8,0xbd56d80c,0xbd6582ed,0xbd147910,0x3c0adb7c,0x3d463a00,0x3d3fb8a2,0x3d60689b,0x3d81dc8c,0x3d54efac,0x3d62dd53,0x3d4ca434,0x3d3efe94,0x3d1f4285,0x3d0d86f0,0x3cf770ab,0x3cd9d449,0x3ca8dc5d,0x3c8628ed,0x3c42bd22, +0x3b96158a,0xbb947cb0,0xbc35fa38,0xbc843857,0xbcb85c21,0xbcd777e0,0xbd03790e,0xbcfe4daa,0xbd0d3d85,0xbd0e7378,0xbd21539e,0xbd25074d,0xbd3f1092,0xbd32a2e7,0xbd436a23,0xbd689525,0xbd3d5340,0xbd115fa2,0xbce16220,0xbb34a3f2,0x3cc41ce2,0x3d09c5b2,0x3d373066,0x3d337a57,0x3d59a443, +0x3d563b6d,0x3d45efe4,0x3d33d927,0x3d237d65,0x3d119b18,0x3d0be345,0x3ccd28b9,0x3cc62b30,0x3c9e25dd,0x3c6f0da3,0x3c13a248,0x3b256809,0xbb215ed7,0xbc4eb023,0xbc8f0fce,0xbcbcd2bc,0xbcd49c23,0xbd0b38d3,0xbd18343d,0xbd27fa96,0xbd302716,0xbd2df80f,0xbd38f4b1,0xbd3b3895,0xbd3b6cde, +0xbd4396e3,0xbd483575,0xbd034df6,0xbc69148f,0x39b637b8,0x3c5150fb,0x3b7cc222,0x3baab61d,0x3c9a9827,0x3c106a24,0x3bf37eb9,0x3c56aa66,0x3c3c4e05,0x3cc27b06,0x3c5b065b,0x3c718aba,0x3c29b49f,0x3c00fc86,0x3b087b19,0xba8ed2da,0xba69d250,0x39e64989,0x3b53efbd,0x3addabc5,0x3c016018, +0x3bc8907f,0x3b9b7ae1,0xb9c83eb6,0xba80a025,0xbb95c837,0xbbf054cc,0xbc10a174,0xbc12a0b5,0xbb47bf2d,0xbadb1484,0x3775539e,0x3bb8e8c8,0x3ba14d82,0x3b97f43f,0x3a8a6a45,0x39af4ae6,0x3b056854,0x3b648421,0x3b4a9445,0x3c0ee76f,0x3c7fafb8,0x3cb096cf,0x3c187989,0x3c5ef70a,0x3cb8d0a7, +0x3cb38625,0x3c9fbdfd,0x3c928c48,0x3c8d3d73,0x3c8c3b41,0x3c824780,0x3bfd7723,0x3b2232dc,0x3c4d8315,0x3bc05b22,0x3a1f7bf4,0xbb91829f,0xbbad1ade,0xbbcf3e15,0xbc00e6da,0xbc18eb37,0xbc21ac3e,0xbc2f8a97,0xbc3a274c,0xbc2a2dd6,0xbc30672c,0xbc346590,0xbc25c8d7,0xbc27de2b,0xbbd8e680, +0xbb474714,0x39472905,0x3b18af77,0xba793607,0x3c53c675,0x3c0affd4,0x3c047697,0x3c13422e,0x3c198bad,0x3c2bd68c,0x3bf3f354,0x3bfce743,0x3c0b3029,0x3c130650,0x3c186ef5,0x3c17a7ee,0x3c14126b,0x3c119f6e,0x3c063dd7,0x3bff434f,0x3c039fae,0x3c14ae24,0x3c1b4fa3,0x3c194f50,0x3c1a07a8, +0x3c12f09d,0x3c0aaf7a,0x3c01764f,0x3c05691f,0x3bfcb4a0,0x3bd59b45,0x3bd886ef,0x3bd10a76,0x3bbda997,0x3bec439e,0x3bf5908c,0x3be976fb,0x3bfdea38,0x3c03b0d1,0x3bfc3878,0x3c06529a,0x3c47ec68,0x3c2f0756,0x3c67ba4d,0x3c5b43e1,0x3c912e46,0x3c0fa763,0x3c06201c,0x3c2813bf,0x3c28e77e, +0x3c4e2497,0x3c480bdd,0x3c4bdeba,0x3c3bfa88,0x3c13f28f,0x3c0f802b,0x3c21fb61,0x3c461c2d,0x3c586180,0x3c78ca95,0x3c818bb3,0x3c5a75f5,0x3c459c67,0x3c28a3e0,0x3c1a8886,0x3bddf119,0x3b6e6270,0x3b371064,0x3b4480ee,0x3b6f28e6,0x3c0f20b1,0x3c216d70,0x3c102af7,0x3c2ef80a,0x3c39049c, +0x3c22cebb,0x3c41be6e,0x3c606e86,0x3c4f2e95,0x3c88c84d,0x3c835382,0x3ca98741,0x3c0c6693,0x3ba87420,0x3c150f5f,0x3c45f316,0x3c6c75fd,0x3c5bd30f,0x3c6b2d9f,0x3c469942,0x3bdcb43e,0x3c133d02,0x3c1b5c71,0x3c6bc6cc,0x3c889638,0x3c9c71c8,0x3cb1f26a,0x3c800ea0,0x3c6030e5,0x3c257702, +0x3c1ec256,0x3bce42dc,0xba5bfb61,0xbb040df6,0xba53bcb9,0xbb2b5d38,0x3bdbe0be,0x3c140267,0x3bb82cb1,0x3c1d6074,0x3c25f88e,0x3c1ba559,0x3c5ab648,0x3c8d84c2,0x3c52c8b6,0x3ca728b7,0x3ca80614,0x3d01a291,0x3bfc18c5,0x3b6c9391,0x3c2e515b,0x3c46fe54,0x3c7a107f,0x3c92919f,0x3c6962c6, +0x3c2f379f,0x3b874e33,0x3c20e040,0x3c39d33b,0x3c7e1654,0x3cb4020b,0x3cd18367,0x3cf5c992,0x3ca4dd2c,0x3c857ed4,0x3c256da5,0x3c250034,0x3b0ffb28,0xbc2a2cde,0xbc4111de,0xbc24deb8,0xbbd41c69,0x3ba48d93,0x3c237fa2,0x3bdf24b3,0x3c331b5f,0x3c51c1dd,0x3c1e3035,0x3c8b58bd,0x3ca0ba54, +0x3c918760,0x3cd4d0a3,0x3cdb1469,0x3d13c5b4,0x3bf5cb3f,0x39370e9a,0x3c4f05d3,0x3c5ba5db,0x3c8ca521,0x3cbf61f0,0x3c3352db,0x3babc9ca,0x3bd20c0a,0x3c7173fa,0x3c7d7936,0x3c9c1be9,0x3cd4ea64,0x3d07f932,0x3d15cdf2,0x3cb9c970,0x3c8b6f84,0x3c30c87f,0x3c0e55dd,0x3ae05c4f,0xbc3178d8, +0xbc63a75b,0xbc3bc169,0xbc605210,0x3bcc21e2,0x3c119b94,0x3a27ae56,0x3c1b53b1,0x3bee306e,0x3c180871,0x3c80e56a,0x3ca07f93,0x3b6bd89b,0xbc445d9d,0xbcbc028b,0xbd1c8bff,0x3bc3ac14,0x3cd6f1d3,0x3d10d56e,0x3cfe5aec,0x3c097082,0xbbf6bc26,0x3ba07e50,0x3c31be13,0x3c453e9e,0x3cc58ada, +0x3ca130f9,0x3c9ba84c,0x3c549c1f,0x3c4e97fb,0x3c59477d,0x3b83e005,0x3be866be,0x3c435153,0x3bc9673a,0x3c06216d,0x3bcb83b2,0x3d205243,0x3d0dad69,0xbc9dbed1,0x3bd586ff,0x3c00ca5e,0x3c1b8f4c,0x3c2dc4de,0x3d00ad58,0x3d940eaf,0x3d38bddd,0xbc95503e,0x3bbd1e9a,0x3ce00d2f,0x3c87686b, +0x3bd0eb7c,0x3b15f4db,0xbb0989fa,0xbb383c24,0x3b95fc00,0x3c44893b,0x3c51b32d,0x3bb086b4,0x3b2e0050,0x3c2964a5,0x3c157347,0x3c7da7c7,0x3cac5843,0x3ca77d36,0x3cb3af6b,0x3c779fc3,0x3c8b08da,0x3c7b8fa6,0x3b6ba739,0x3bbcf92d,0x3bc99160,0x3c24b3e5,0x3c85bce2,0x3c9d5399,0xbb9ce906, +0x3c13328d,0x3b8a013e,0xbc88ecca,0xbc528ad6,0xbc9a9f48,0xbcbb8185,0xbcc2bcb0,0xbcd25516,0xbbf08d7c,0x3b934038,0x3b893bc9,0x3b3d420c,0xbc21f082,0xbca19f5a,0xbad4258c,0xbaa3f240,0xba3ba267,0x3bdd61bb,0x3bab7de2,0x3c059d94,0x3bdedc04,0x3bfffa81,0x3c9100e1,0x3c38f511,0x3c3729bf, +0x3c1e3a57,0x3c056f93,0x3ca472e2,0x3ca8cf55,0x3bb1c56d,0x3c228128,0x3bd368db,0x3b98e6ed,0x3c1b2d33,0x3c0e2804,0x3bfc4019,0x3c93144a,0x3ce3c5f6,0x3cc6acd7,0x3b3ae5da,0xbc2ac65f,0xbcc2a335,0xbcc20729,0xbb1f9607,0xbb891aff,0xbbbe03ee,0xbbafff4a,0xbbbc08e2,0xbc76ecea,0xbc757fbc, +0x3c23142b,0xbb611ebc,0xbb064d4d,0x3b561751,0x3b7911bb,0x3bcf8cdb,0x3ba8f880,0x3c10d49e,0x3c6d64cd,0x3c3d5a1f,0x3c2101e2,0x3c368e84,0x3c2e1ef8,0x3cae994f,0x3cc2b1bc,0x3c5a8ab4,0x3c92a979,0x3c654849,0xbb695ab0,0x3a349880,0x3a8056de,0x3b8cd233,0x3bd94898,0x3c254125,0x3c1deeb8, +0x3c0aded2,0x3c222cb5,0xba5bac1d,0x3aae6dc2,0xbb96c068,0xbce471cb,0xbc4c9915,0xbc80cc9e,0xbcaeaa78,0xbca7d797,0xbc24e86b,0x3bee59f0,0x3b09569b,0x3bfc6a65,0x3bfabded,0x3b019e38,0x3b662af4,0x3c39cb2b,0x3c5039f6,0x3c863f11,0x3c97176b,0x3ca13229,0x3c99e766,0x3c03ea1c,0x3c8a4806, +0x3c86fac7,0x3c67014e,0x3c61a52a,0x3c576129,0x3ae604cd,0x3bc44138,0x3aa9ad3e,0xbc51f347,0xbc83255f,0xbca7bddf,0xbcdbf9cb,0xbbd002b3,0x3961c76d,0xbc0a50f6,0x3af26bdf,0xbca3cc20,0xbd2d2939,0xbd6fcb4c,0xbd6afde5,0xbd17aa5e,0xbd298fa2,0xbd258730,0xbccc0b64,0xbcc7f22a,0xbcdad9c8, +0xbc69d480,0xbbbf8d6c,0x3bd6e9b2,0x3c2bcdab,0x3be94c85,0x3bfdc89f,0x3c30cc5e,0x3c2113ee,0x3c402cd6,0x3c0bbe69,0x3c7bcda0,0x3c855a52,0x3c073d1e,0x3a28d66b,0xbb56111c,0xbba9e4d3,0x3a0c3445,0x3a5509b8,0xbbf592de,0x3c0f2573,0xb9c8e0b1,0xbd00470e,0xbd19ba11,0xbd285785,0xbd309af1, +0xbccd7f65,0xbd723287,0xbd4d4a30,0xbd07d0be,0xbca5247e,0xbc8ac9c4,0x3b7117bc,0x3c1590c2,0x3bfe7c41,0x3ba244ac,0x3c01e809,0x3b705c01,0x3c5a3960,0x3c637b51,0x3c74c628,0x3c490d4b,0x3c2acf12,0x3c58946f,0x3b52a545,0x3a120988,0x3aee68d9,0x3c41da0b,0x3c501fdf,0x3c433d09,0x3b096258, +0xbb181eb4,0xbbe661e8,0xbc07a902,0xbc3f147e,0xbc71fa90,0xbc9535e4,0xbc4a498b,0x3c3c4be4,0x3aa8c7e8,0xbc0dc656,0xbcdd3378,0xbd40d840,0xbd067689,0xbc09c19e,0xbbdefe63,0x3b95494d,0x3ca66162,0x3ca4b72e,0x3cd014c7,0x3ca70a2e,0x3c9e8080,0x3c8fe68d,0x3cb00400,0x3caa4521,0x3cb34134, +0x3c7cfd6d,0x3c4b8f20,0x3c08db45,0x3bac7856,0x39d30909,0xbb558728,0xbb2c0387,0xbb152b87,0xbbe15241,0xbc449981,0xbc9132ae,0xbcbaba96,0xbce86f2b,0xbcdcc9ed,0xbcd683c0,0xbcbe1adb,0xbce6dc3a,0xbcf2c07d,0xbcd9af5f,0xbcf1468a,0xbd01803e,0xbd1a1a81,0xbd0205e9,0xbba15117,0x3b7a5868, +0x3c977ebf,0x3c8d0b3b,0x3cd8b5c7,0x3cd268bc,0x3cbb2086,0x3cba38c3,0x3cd98149,0x3cc7be55,0x3cec7938,0x3c718f3e,0x3c71bbde,0x3c1496fd,0x3bf4b772,0x3b48aa51,0xba90337c,0xbb48b4df,0xbba7689b,0xbc125722,0xbc7fc2f6,0xbca10c13,0xbcce4ff8,0xbce3968c,0xbcfb7ea0,0xbd0ebb97,0xbd05baf2, +0xbd088f0c,0xbd058893,0xbd13b6ae,0xbd2d30a3,0xbd4c000f,0xbd35222b,0xbd156ec6,0xbcfe128a,0xbc6f5de2,0xbc4c79ef,0xbc3613b4,0xbbd6e223,0xbc3ec23f,0xbc568d49,0xbbf7cd6f,0xbbd2a1a1,0xbaa91b4a,0xbbf6ab5f,0xbbdf75dc,0xbc0a9320,0xbbb5a2ec,0xbbc12806,0xbbb97012,0xbbf2cb3d,0xbc1ceec3, +0xbc14ac26,0xbc62d740,0xbc39f4de,0xbca3d645,0xbca98280,0xbcc0e11f,0xbcccc1e4,0xbcec0dee,0xbcffb819,0xbd052454,0xbd0d8c53,0xbd040e96,0xbcfc8830,0xbcfb398a,0xbcbd82ff,0xbcadd29e,0xbc944913,0xbc49f579,0xbc51036c,0xbc6c8432,0xbc51ee35,0xbc39721e,0xbc1a7fbb,0xbbcbba6e,0xbb92334e, +0xbc03b790,0xbbf845d8,0xbb8b500c,0xbb738f94,0xbb8beaf8,0xbbb2db74,0xbbd9b1da,0xbc006c81,0xbc0ae05c,0xbc37eb76,0xbc591b21,0xbc28f241,0xbc57c6bf,0xbc79d59b,0xbc8d5ba9,0xbc8e5c56,0xbc9c2a03,0xbca3cec4,0xbca93bd4,0xbcaba642,0xbcae63d8,0xbcb0934e,0xbca8e366,0xbcaf88ad,0xbcb391a3, +0xbcb89429,0xbccbc724,0xbcbe0f13,0xbca57d3e,0xbc960364,0xbc7b3b17,0xbce5c225,0x3c303221,0x3bdb67ea,0x3bc81a81,0x3be59ffb,0x3bf02d57,0x3bf5a023,0x3bc49fa1,0x3bceff79,0x3bd50216,0x3bf9fdf0,0x3c061611,0x3bff1a09,0x3c0406e7,0x3c00c120,0x3be3efe5,0x3bd88f10,0x3bdba0e0,0x3c050544, +0x3bfbf666,0x3be8857d,0x3bd2f7b0,0x3bddddec,0x3bdbeb4d,0x3bd82561,0x3be7f04b,0x3be8854c,0x3bd975ce,0x3bd30233,0x3bc957b8,0x3bc810cb,0x3bcafc3e,0x3bc2b153,0x3bc28e71,0x3bc42cd7,0x3bcd5148,0x3bc03ad3,0x3bd800e9,0x3c2fc02f,0x3c030885,0x3c216b39,0x3c0703d9,0x3c2c0339,0x3be7ac60, +0x3be6f497,0x3beab20f,0x3c0f4edb,0x3c349f7c,0x3c27f793,0x3c4ab957,0x3c3fb74e,0x3bf2905d,0x3bd96e5a,0x3bfd7ebe,0x3c33a48c,0x3c22a1c1,0x3c36ca74,0x3c1f8422,0x3c10bc0f,0x3c0c3a1b,0x3c08825c,0x3c0a45c8,0x3bf6804c,0x3be43083,0x3bd5e31b,0x3be622fd,0x3c0d195a,0x3c007616,0x3bf5e97a, +0x3c1016fa,0x3c06c0da,0x3c007588,0x3bc3b01a,0x3c20a3bd,0x3c1f98e1,0x3bf48395,0x3c2d09ca,0x3c1e0147,0x3c213277,0x3bb6d63c,0x3b9e01ba,0x3b84f12d,0x3c30a99d,0x3c566e35,0x3c32d7df,0x3c83887a,0x3c5d2575,0x3bc18c0c,0x3bf11359,0x3bf213bb,0x3c680d36,0x3c435272,0x3c4b07ca,0x3c2b30e2, +0x3c0e43ec,0x3c14293c,0x3c066fa0,0x3c202c5b,0x3c1b1531,0x3bdb306c,0x3bcbf246,0x3bba6024,0x3bfb91f3,0x3bdf89d3,0x3bc30618,0x3bbe05cc,0x3bbbe4e7,0x3bbdcbc5,0x3b82307f,0x3c2351c8,0x3c7b165e,0x3bfdd961,0x3c2ac986,0x3c0bb8f9,0x3c74f8b1,0x3ba24ea7,0x3b5a35c6,0x3bad7cf3,0x3c28348f, +0x3c76bddd,0x3c566551,0x3c916560,0x3c796c18,0x3aa4510e,0x3bd47da8,0x3bf3d03d,0x3c87591c,0x3c6f7a51,0x3c846d69,0x3c7ad885,0x3c1dd277,0x3c1b0941,0x3bf6e56d,0x3c296a4a,0x3c031910,0x3b4d7432,0x3b4f33a4,0x3b933845,0x3c4c5f1a,0x3bd0c1d3,0x3be6b80d,0x3c23b820,0x3bed5b8a,0x3bc03018, +0x3a690568,0x3c50c6ab,0x3c320065,0x3bc9f1e9,0x3c82f52c,0x3c8b3baf,0x3c75e04b,0x3b8c8d8e,0x3ad77bdd,0x3b5ee429,0x3c494ac8,0x3c96a253,0x3c8a4c4c,0x3c808a95,0x3c18929a,0x3a8fde30,0x3c362d28,0x3c48cf95,0x3ca76b6c,0x3c8e4877,0x3cb8cf30,0x3c7fc956,0x3c2d8585,0x3c2099e2,0x3bfc72ad, +0x3c2c4f7d,0x3c2d70ab,0x3b97c81b,0x3ba67dbb,0x3b9f5cec,0x3c05f161,0x3c215ac3,0x3b8e0fdb,0x3ad35d5a,0x3b1ad315,0x3a53ce60,0xb99917b6,0x3c3a4c95,0x3cfe1b24,0x3c8da521,0xbc602ef0,0xbce6dd2d,0xbcf78d03,0xbba5ec17,0x3c3c16ae,0x3cc19863,0x3d1c00bb,0x3cac0703,0xbb7f2fbb,0x3a2aff9e, +0x3bd8af08,0x3cb66c13,0x3ca0e5af,0x3c7ca6f3,0x3c696659,0x3ba50936,0x3a4840c8,0xb9ae3283,0x3bb9197c,0x3c31134a,0x3c83f5de,0x3c60e714,0x3c583391,0x3c44575c,0x3d03ffa0,0x3cad1816,0xbc54e23e,0xbc65398c,0xbc038ef3,0x3cde80fe,0x3c9c2a91,0x3ce2951b,0x3d3ee3a1,0x3d244698,0xbc876e5a, +0xbd597f1f,0x3d41b2a2,0x3d519fdc,0xbbce8f2b,0x3c7779ec,0x3c1ea098,0xbbcc2347,0x3babbb1b,0x3c6002a7,0x3c9ec960,0x3c250d82,0x3ba4069f,0x3c24d5e1,0x3c7ff0ae,0x3cb1c93d,0x3c86cb26,0x3c7d55f3,0x3c836b0b,0x3bfd14d7,0x3c8f1935,0x3c879bc1,0x3be6b5a2,0x3c18bb2e,0x3c3f44db,0x3ca8959e, +0x3c7b6344,0x3c59fdf5,0xbc830f12,0x3c69c66f,0x3b3a1c81,0xbd60f1b5,0xbcbf09b1,0xbc79ea01,0xbc88d862,0xbc70c7d6,0xbca819de,0xbd183b8d,0x3a95e90e,0x3c21b6db,0x3b8ab498,0x3c0ee7bd,0xbb625e72,0x3ac85e8a,0x3b740733,0x3a9fa0b2,0x3c31aafb,0x3b9cf5a4,0x3be21405,0x3c21f4c4,0x3bb360e5, +0x3c6359e6,0x3b32bf54,0x3b82ff48,0x3b011756,0x3ae9d92e,0x3c8028ae,0x3c81b709,0x3bd13b9b,0x3be15958,0x3b60eba2,0x3b565493,0x3c3eebb6,0x3c61885e,0x3b3a6e23,0x3cc1275b,0x3ccd3c7a,0xbb4e7da3,0xbb3d5e12,0xbc04de10,0xbb944b76,0xbc39f90d,0x3b0444df,0x3b6cc317,0xbbc5a5f9,0xbad9bf31, +0x3c121c2c,0x3a4d8f8c,0xbb17ec9b,0x3c0ba1cd,0x3b113199,0x3a9c18df,0x3bacf9ad,0x3b3fedb7,0x3bae2108,0x3bc3aae8,0x3ba475fa,0x3c0a3ff9,0x3afddb0e,0x3b094c61,0x3ba017bd,0x3b82b29c,0x3c224eba,0x3c3ad46e,0x3c099b79,0x3bb5157d,0x3b40d89a,0xba992798,0x3c005e36,0x3bd91924,0xbad23416, +0x3ba6fd45,0x3c07eab9,0x3c93da49,0x3bba4638,0x3bbc69a2,0x3c97b49b,0x3bafc8bf,0xbb14a10e,0xbbc9d3ae,0x3b580899,0x3b550e88,0xbc5e269d,0xbbe544c2,0xbbf463c6,0xbb9b8139,0xbb444d20,0x3b0b9a61,0x3b4d5957,0x3ab81215,0x3b4e693a,0x3bf895d8,0x3c3ccc9d,0x3c72165d,0x3c45b1b5,0x3c33ee1c, +0x3c43a822,0x3bc5cd4c,0x3c455e84,0x3c5fb115,0x3c6c6150,0x3c37ec5c,0x3c13a6a4,0x3bc38f5f,0x3b68face,0xbbda71d5,0xbd07ee26,0xbc97ab94,0xbc8fd355,0xbc893342,0x3a9a06b8,0x3c061d58,0x3c2ee67d,0xba9ee064,0xbb9a8aad,0xbbe8aadd,0xbce41903,0xbd339e82,0xbd413e1d,0xbd1079eb,0xbcde7f69, +0xbc9d00a3,0xbc517d94,0xbc689649,0xbc258c78,0xbc2fd429,0xba0acf04,0x3c3f1476,0x3bb7a019,0x3bde0f75,0x3b8150c6,0x3c450124,0x3c418bfc,0x3b350d6e,0x3c054092,0x3c4c743e,0x3c84c581,0x3c52e645,0x3c11ee9e,0x3ac317a6,0x3a19409e,0xbb5cf18c,0xbc05c5b6,0xbc0b135b,0xbbc5258a,0xbb97b4ff, +0xbc9e0d56,0xbcaf55dd,0xbc625e36,0xbbabe539,0xbd2f2993,0xbd4b2a09,0xbd4e6174,0xbd24d036,0xbcdaab82,0xbc5bcf37,0xbc257441,0xbca2aab7,0xbc927162,0xbc574beb,0xbc0cb87c,0x3b1fa3ab,0x3bf7a268,0x3c266914,0x3bce4d71,0x3ba5ce1b,0x3bab1bef,0x3bec0823,0x3c0a4a80,0x3bfca5e7,0x3c68401f, +0x3c6a21dc,0x3c30ddd1,0x3c0db72d,0x3b90c02d,0x3ac3c6c1,0xbb5cc080,0xbbb71eae,0xbbc98b93,0xbc406013,0xbc8d91a8,0xbcc10a78,0xbc088cc4,0xbbc6c4a0,0xbca1a32f,0xbd04a131,0xbd16baa6,0xbd1b82ec,0xbd0e227e,0xbcdb3051,0xbc5034da,0xbc340499,0xbbd1f729,0xbc0fb381,0xbb99faea,0xba8d2a6d, +0x3c00bea5,0x3bf3ecab,0x3c26ae4f,0x3c15e985,0x3bb3cd08,0x3b65af82,0x3a9f29c8,0x3a1f80cf,0x39f3e0aa,0xbabaaf86,0x3b06d4da,0x3b584788,0x3b4e8ae4,0x3a933204,0xbb26e680,0xbbddc3b9,0xbc11d5e2,0xbc29e1e4,0xbbe5d587,0xbc2884c4,0xbc132a17,0xbc2103c6,0xbc3d5b2f,0xbc8d2433,0xbcccdc69, +0xbcfaa3d0,0xbca69449,0xbca2a56f,0xbc25e3aa,0xbc240202,0xbbda90ca,0xbb45c85e,0xbab500af,0x3b292447,0x3c175bc4,0x3c25d4fa,0x3c8e2c3a,0x3be8d08b,0x3bf16f3d,0x3bacea4a,0x3afcf9d4,0xb83e3543,0xbb6e0591,0xbbcf77e9,0xbc2ff336,0xbc4783e8,0xbc3d8ec9,0xbc30aa02,0xbc1353af,0xbc490019, +0xbc65176c,0xbc8c430f,0xbc7530b8,0xbc81740f,0xbc934c44,0xbc8b07db,0xbc85c1f9,0xbc792031,0xbc9a63b2,0xbcb3bdf4,0xbcc00abf,0xbcacecbe,0xbc4adf03,0xbc2bed39,0xbc193673,0xbc0818de,0xbbcd426b,0xbb807fc8,0xbb50377b,0xbb0e0052,0xbbe0508d,0xbc047f15,0xbc26c2f8,0xbbf80b1d,0xbbde6810, +0xbbdc5444,0xbc1143ea,0xbc3676b3,0xbc67035a,0xbc65dce8,0xbc910f44,0xbc8435c3,0xbc908441,0xbcb780b2,0xbcd00945,0xbce25c00,0xbceb8425,0xbcf4c2cd,0xbd01bc70,0xbcfc1c26,0xbceda0ed,0xbcfc66ab,0xbcfa3871,0xbd044a5b,0xbce2c8bb,0xbca5d466,0xbc92e58c,0xbc853d69,0xbc7c1b88,0xbc687a04, +0xbc696c0f,0xbc65453c,0xbc6a143d,0xbc61ee73,0xbc5e5932,0xbc4362fd,0xbc35452e,0xbc2fe7ad,0xbc37ff67,0xbc49caf5,0xbc613b95,0xbc69ffb5,0xbc64d64a,0xbc5945e8,0xbc83ad80,0xbc80fa65,0xbc773477,0xbc701149,0xbc7ca7d9,0xbc7dfb30,0xbc7b59e2,0xbc811574,0xbc8516d4,0xbc8636cb,0xbc86aed8, +0xbc84d57b,0xbc8cb1d4,0xbc8c0879,0xbc86eb7e,0xbc8b3791,0xbc8b7b0b,0xbc8a32fa,0xbc8aac58,0xbc8557b1,0xbce33af1,0x3bfc63b6,0x3b8b9c04,0x3b7afa80,0x3b95ddce,0x3ba7d92b,0x3bb3bf06,0x3b98237e,0x3ba2f42d,0x3ba5ba48,0x3bc13cad,0x3bd27fc6,0x3bcd941b,0x3be01927,0x3bde2096,0x3bc22a76, +0x3bada325,0x3b9f7fe1,0x3bd13b26,0x3bb3fe61,0x3ba27fce,0x3b8b1bcc,0x3b977424,0x3b9bb415,0x3ba378e4,0x3ba772d4,0x3ba44b1c,0x3b9833c1,0x3b8e4035,0x3b8d024b,0x3ba6fa3d,0x3b979dcb,0x3b8cdc6f,0x3b969368,0x3b7e4329,0x3b786e79,0x3b62dc41,0x3b8ab457,0x3bebe25a,0x3bba7dc1,0x3bd04055, +0x3ba84086,0x3bcf1c2a,0x3bc59749,0x3bd16444,0x3bc0c52a,0x3bea2f1d,0x3c10e4df,0x3c0d8f00,0x3c3c4076,0x3c34e1f2,0x3bdbde90,0x3bb63e0c,0x3bb3d8d5,0x3bfb8004,0x3bd72ba8,0x3bdbedc6,0x3b9e95df,0x3b9bef40,0x3ba82b43,0x3bd00516,0x3bc54fc8,0x3bb29094,0x3bb1b35b,0x3b8cde64,0x3baeb35d, +0x3c176654,0x3bc8c1fd,0x3ba45b66,0x3bd4b435,0x3b750b41,0x3b4aa188,0x3ad48511,0x3bb1f3b8,0x3b9f034c,0x3b70d050,0x3b93b0ea,0x3ba4ee3f,0x3bb40caa,0x3ba68fb5,0x3baf6dab,0x3b710564,0x3c0cbc9d,0x3c2d79bf,0x3c206bdc,0x3c81c3b4,0x3c67f812,0x3be91724,0x3bdf076f,0x3bb77b9b,0x3c1b87e8, +0x3bf634b0,0x3bcda8f6,0x3b8999c5,0x3b878974,0x3bb181e7,0x3bf19f15,0x3bf2fbae,0x3bdf88d4,0x3ba643f5,0x3b56fefe,0x3b60f022,0x3c3591e3,0x3bbd58a5,0x3b9eb6ec,0x3bc4f0df,0x3a8864dd,0xba090b5d,0xbb1278f7,0x3b8ead13,0x3c26c046,0x3bce2ebf,0x3b937922,0x3b4c220f,0x3bd16cef,0x3b9db302, +0x3bb41da5,0x3bae7ab4,0x3c13cad3,0x3c58b29b,0x3c317c81,0x3ca6edce,0x3c97cfb1,0x3b781248,0x3bba51ba,0x3bb419d0,0x3c4cc5ac,0x3c0afe29,0x3be58f37,0x3b4556ea,0x3b1fe3b4,0x3b5655c8,0x3bed3c98,0x3bf4f630,0x3bda1a46,0x3b6e190f,0x3b083579,0x3b6fc8b4,0x3c997c60,0x3bc49b89,0x3ba5f7fe, +0x3c0ad1c1,0xba9c9b89,0xbb5665ad,0xbbf70e79,0x3b78af12,0x3b724e9d,0x3a3c16ca,0x3b767748,0x3bf2d35c,0x3bcc3b57,0x3b859425,0x3b67958a,0x3a93d13c,0x3c1f1b73,0x3c6fca68,0x3c378a92,0x3c9e1141,0x3c618e1f,0x3adfe15a,0x3c0256c7,0x3c2fe1dd,0x3c9a5ea7,0x3c212572,0x3c10ca5e,0x3acf0367, +0x3b2ced33,0x3b9c1b4a,0x3c0533fa,0x3c13aea0,0x3bf3a8df,0x3b5df811,0x39b1757e,0x3b4c9615,0x3c8ee708,0x3c16dbbc,0x3b9f14ba,0x3bc6b1a1,0xbbb71bbc,0xbc1d7067,0xbc2e940a,0x3b5365c6,0x3cb75261,0x3cbdd7f9,0xbb92d1e7,0xbcaf855c,0xbceaf078,0xbbbd92e6,0x3c040be5,0x3c24f2a6,0x3d13e3d0, +0x3cfb5532,0x3c03e67e,0xba124c16,0x3b9dd856,0x3cd7595e,0x3c51a640,0x3c0e1ef8,0x3c1d0ebe,0x3b61a03c,0x3ad297f5,0x3b99ccd3,0x3c388510,0x3c498591,0x3c8440d5,0x3c6ead36,0x3c85508a,0x3d033265,0x3c328330,0xbc051a15,0xbcb4072a,0xbca174b9,0xbbd8dee6,0x3ca55d06,0x3cefdb5b,0x3d0085d5, +0x3cce3b55,0x3cbecd3a,0xbbb9a43e,0xbd75bd13,0x3d01ed72,0x3d3e3434,0xbbda1243,0x3c75ac0d,0x3c2fc274,0x3b2c9381,0x3bac376e,0x3c1e30d9,0x3cadee52,0x3c7ef2ed,0x3c2fdf8b,0x3c1a8866,0x3c9ab495,0x3cb5c8f3,0x3c251a9b,0x3c1d99a2,0x3c264cda,0x3c0ea1ed,0x3c54ad79,0x3c77c01f,0x3c8a4d79, +0x3c9f38d3,0x3c92498b,0x3ca4fa03,0x3c18d5b5,0x3bea6b3e,0xbbbbdef4,0x3caf60f9,0x3c4b258e,0xbcc6534a,0xbc82cfa0,0xbc60a66a,0xbc3c0990,0xbb1d7ecd,0xb927e4e1,0xbd38e006,0xbc22a749,0xb9520aad,0x3a99d309,0x3c69ec15,0x3c21e160,0x3b9b1bb9,0x3bd1a8f8,0x3b8cd9a4,0x3c448554,0x3bf32ce6, +0x3c16d447,0x3c2fc1ec,0x3bc5bf2f,0x3bebf313,0xbb885b73,0xb9c0e011,0xba72f5a3,0xba01760e,0x3b8c8b6e,0x3c02e229,0x3c5a6cb4,0x3b7579b0,0x3b1e4207,0x3b807871,0x3c34efff,0x3c526d4d,0x3bd2ac5a,0x3cc8b6c2,0x3c981ec1,0xbbbe5b5a,0xbb1953a2,0xba3bed80,0x3c415db2,0x3c311f76,0x3c78102c, +0x3c1e38bf,0xba9ddce1,0xba04f01a,0x3b502890,0x3c2e96e0,0x3c1f9415,0xbab160e4,0x3bc1588e,0x3b9acf28,0x3bb5ce78,0x3b879a86,0x3bc3f40b,0x3bf7359b,0x3b256b57,0x3915c2da,0xbbaf1541,0xbb85c617,0xbb1c8777,0xbb08cba2,0x3b0dd44c,0x3b80888b,0x3c3e1a02,0xbb89078d,0xbc03f614,0xbb804093, +0x3ba7cedb,0x3beb7764,0x3b411dd9,0x3c258e8c,0x3bdb6944,0x3b677c7b,0x39a30f9c,0x3b83428d,0x3cbce051,0x3c8d0106,0x3bcc4fce,0x3c1b2a02,0x3c13b8ea,0x3ba4c3d2,0xbc310a27,0xbbc7839f,0xbc1f0dc1,0xbc0fc315,0xbb81a3d6,0xba88a47c,0x3ac1748c,0x3b371980,0x3b4bc82f,0x3b40b6d6,0x3c05b39a, +0x3c21ea3d,0x3b9184b0,0x3b416469,0x3b809564,0x3be6f3bc,0x3c0a3e8b,0x3c24e55a,0x3c344042,0x3be2bf57,0x3b6864aa,0x3b397024,0xbb31b36d,0xbc216203,0xbcd14350,0xbc30abd5,0xbc068ee4,0xbba2a802,0x3bbf24fc,0x3c1e9782,0x3c421e19,0x3c01d067,0xbc14b5b4,0xbc9499f8,0xbccaa55f,0xbd1d261a, +0xbd442352,0xbd2908c2,0xbd0012b2,0xbca1cd95,0xbc06f21e,0xbb914298,0xbb726d01,0xbbc7e9d9,0xbaf2d443,0x3b8703f6,0x3b54d01b,0x3b8181ba,0xbad1d1fc,0x3ba00d29,0x3b8df7f5,0x3b8d4e5c,0x394d430c,0x3a7e4d86,0x3c325c4f,0x3c199fd0,0x3bd998e4,0x3990cd09,0xbb12b179,0xbbce9bc0,0xbbb6416e, +0xbcabbc87,0xbc92be45,0xb9f72a90,0xbbd01809,0xbbb2a854,0xbb59cca5,0xbbb83d7e,0xbcc02914,0xbce966f7,0xbd005e6f,0xbcdd5f8a,0xbc6c34f6,0xbcab338a,0xbcb4e67e,0xbccaaf27,0xbcc70041,0xbca68142,0xbc7709d2,0xbc5832e8,0xbbec1cd3,0x3b833dc5,0x3b4df992,0x3bae5606,0x3b8724f8,0x3c180734, +0x3c2813c3,0x3c1fcc58,0x3bc61c31,0x3bf3b288,0x3c5b517e,0x3bd0b92b,0x3b90e53f,0xbb4875f8,0xbb9f4585,0xbbf2cc24,0xbc37aff9,0xbc3a08ba,0xbc930288,0xbcf2fecd,0xbd0a0f47,0xbd022866,0xbcc1fa35,0xbcc40320,0xbd0688d4,0xbd26bd90,0xbd13c942,0xbd049da4,0xbcc370b7,0xbcc0e6b8,0xbca48fac, +0xbc94a243,0xbc63a314,0xbc3531c1,0xbb7827ab,0xbb8f9086,0x39aae9e1,0x3bc49f95,0x3b3b164f,0x3b3f555a,0xb9eafdec,0x3b63f609,0x3b97e3d1,0x3b8f0553,0x3c1d71d6,0x3c32c5f4,0x3c874ff6,0x3c3b955e,0x3c0f8b2e,0x3b6531db,0x3b01648d,0xba41a7c7,0xbb8e771f,0xbb904d15,0xbbbb27af,0xbc0deff4, +0xbc90b3b5,0xbcc1cac1,0xbcd09aec,0xbcfe0bb6,0xbcec10a8,0xbd03f91c,0xbce2b3d3,0xbcd5fd2f,0xbcd3c026,0xbc96cd39,0xbc4e44f1,0xbbd2fffc,0xbb0729c8,0xba14d46f,0x3bad1072,0x3b475587,0x3bc9da47,0x3bee3405,0x3b35c19a,0x3a784165,0xbaeb5d29,0xbaf6f0a2,0xbb7f0bc3,0x39625d3a,0x3b8aa88a, +0x3b9e35ac,0x3c108e7e,0x3bc8b842,0x3b9cb67b,0x3b4a06da,0x3a6229df,0xbab7e1a2,0xbb80fc1e,0xbb95380b,0xbb77256a,0xbb12f4d5,0xbbceede7,0xbc56c83c,0xbcaae072,0xbccda028,0xbc1f859f,0xbc139bda,0xbc067b4b,0xbba3f686,0xbad743e0,0xbb4f8dce,0xbb793b75,0xbb875d5e,0xbba8a3ea,0xbb8df98a, +0xbb991e1d,0xbb2ce207,0xbab7d96f,0x3a4dd75b,0xb826c0fc,0xba9da6c2,0xbb686a7f,0xbb4063b6,0xbbdfb07d,0xbbe1eb55,0xbc11b92d,0xbc19a283,0xbc31beb4,0xbc2a27cd,0xbc1bafe3,0xbc195256,0xbc28ac75,0xbc41fda5,0xbc4d332a,0xbc732af3,0xbc91eec2,0xbcadc79d,0xbca6b3a6,0xbc8a9599,0xbc5be8df, +0xbc42c4eb,0xbbe5b45b,0xbbea8a3e,0xbc061e7d,0xbc1ca69d,0xbc33acd5,0xbbeb4fde,0xbbe3c507,0xbbee83ed,0xbbca4ac5,0xbbbb13ef,0xbbb22d7d,0xbbb17781,0xbbc3bfd0,0xbbcde689,0xbb921e11,0xbb483ec4,0xbc07e040,0xbbcfd326,0xbb93780d,0xbb3e960b,0xbb215ec6,0xbb070b50,0xbad985eb,0xbaccfa61, +0xbaf6d7a9,0xbaef14ab,0xbb0e7b51,0xbb2c2d09,0xbb4ab3c3,0xbb4ef77a,0xbb423152,0xbb2edbec,0xbb3c5f82,0xbb889672,0xbbb92680,0xbbdbf38e,0xbbce1869,0x3b7a0c54,0x3af78dad,0x3b28fa05,0x3b2a404a,0x3b457a89,0x3b6a06bb,0x3b493662,0x3b56eda7,0x3b58f1fe,0x3b80dedb,0x3b8c5049,0x3b8ebafa, +0x3b9d87f4,0x3b9f54ec,0x3b901664,0x3b4da90b,0x3b153f06,0x3b52bf9f,0x3b37d849,0x3b2df0a7,0x3b13f3bb,0x3b2b8da9,0x3b2d1980,0x3b31233b,0x3b049680,0x3ac32ce3,0x3a40a689,0x3a4e6e91,0x3a9d9a13,0x3b353d86,0x3b12639b,0x3b075f91,0x3b1b5dc1,0x3ac3fa39,0x3a9a55c8,0x3a525864,0x3ac76cf2, +0x3b75b432,0x3bc1dee5,0x3ba07cca,0x3b88f087,0x3b8219f4,0x3ba893c6,0x3bb8527a,0x3b8ccb20,0x3bb586be,0x3be10eae,0x3be3a055,0x3c18b2f5,0x3c12a117,0x3bce3afe,0x3b856ffa,0x3b1014a3,0x3b0c762f,0x3b400e8a,0x3b7245a3,0x3b321f69,0x3b6398ac,0x3b6a561d,0x3b61f326,0x3aaa22a1,0xba7cc208, +0xbb492264,0xbb5dc7a9,0xbaa8302f,0x3ba5573d,0x3b28c649,0x3b0770c7,0x3b380a8c,0xba140694,0xbaa761c6,0xbadb401a,0x3a924284,0x3b152c19,0x3bcd93fc,0x3b610f80,0x3b9ecd27,0x3b9a31ab,0x3be16e00,0x3be09840,0x3b77860b,0x3bfb100a,0x3c17e2e2,0x3c2142bb,0x3c69c538,0x3c5bec34,0x3c0ef4cc, +0x3bada6d9,0x3b166679,0x3a874262,0x3b5956c2,0x3b5b194f,0x3b4e977f,0x3b8fcc4b,0x3b9b5868,0x3b9e1f14,0x3a69847a,0xbb2bcdd7,0xbbe1cf9e,0xbc0328d7,0xbb9929bb,0x3be924b0,0x3b1ce5bd,0x3b2d9cea,0x3b4dd13e,0xbb2f81d2,0xbba49013,0xbbbcd85a,0xb9e0755e,0x3bdd1b5f,0x3c4b865b,0x3be4e808, +0x3bb909a6,0x3b92a5f8,0x3bf71dfe,0x3c1d5320,0x3bc4f4c2,0x3c28d49e,0x3c587c0e,0x3c4787f9,0x3cb0a9d3,0x3ca133a2,0x3c21237c,0x3bc258f2,0x3b2233e5,0x3ae67908,0x3b6e37a2,0x3b885f02,0x3aea4078,0x3b946fdf,0x3b8c9872,0x3bad6ecd,0xbac58cbf,0xbbfbdf85,0xbc6ca2b1,0xbc631f77,0xbc0f1082, +0x3c3b2608,0x3b012179,0x3afb0346,0x3b7f968c,0xbc006274,0xbc204d43,0xbc1e881d,0xbb061af6,0x3b1b7ad8,0x3bf7c3a4,0x3a164877,0x3bb335ba,0x3be10e2c,0x3c1e0fc4,0x3bfecaad,0x3b8aa8f9,0x3c2bc2c7,0x3c5ae22b,0x3c54bd9b,0x3cba2eff,0x3c9629f0,0x3c03cb1e,0x3bff6768,0x3bfb9699,0x3bf9cf22, +0x3b8a359e,0x3b76a625,0x3adc3d33,0x3ba0d7c2,0x3bd7ae4c,0x3bd1e5ef,0xb9c14f82,0xbc143b06,0xbc79b8b0,0xbc99abc2,0xbc1e5507,0x3c539f92,0x3b765f8d,0x3b8478f9,0x3b7d793c,0xbc1ba945,0xbc8016dc,0xbc55c21a,0xbb307281,0x3beed198,0x3d01b4f6,0x3cb6eecb,0x3bf078a5,0xbcafd7f4,0xbbdddf83, +0x3b487036,0x3be954b4,0x3ccfd23e,0x3d027d24,0x3cb758e8,0x3b45fa8f,0x3b65695d,0x3cb23278,0x3be00d72,0x3ba22cca,0x3c138cd6,0x3c338cd1,0x3c3d1352,0x3c40e165,0x3c6381c2,0x3c52a9d7,0x3c8afc9a,0x3c9ee0f8,0x3c9d7d0a,0x3d1b0f3a,0xbbefb85e,0xbcd4eb02,0xbcd6aad8,0xbc5ff45b,0x3afa5191, +0x3b68107e,0x3d117785,0x3d113148,0x3c29666d,0x3b841924,0x3bc5e8e8,0xbd2902c4,0xbcd05caa,0xba907c1c,0x3c8642f5,0x3c3f5eb6,0x3c29cdad,0x3c7916ec,0x3c0170d1,0x3bf0fa86,0x3ca09e9f,0x3cadc4a6,0x3c8e3a3b,0x3c01c30f,0x3c826fbd,0x3c7a4d5d,0x3be9cd80,0x3b916f42,0x3bacc2e7,0x3bff3869, +0x3bdc6d42,0x3c385e93,0x3ca31a2a,0x3cbd6541,0x3c97eb0c,0x3c6a882c,0x3ad3f57d,0x3b3f3d8e,0x3bda1c71,0x3c5eb372,0x3c155247,0xbc22cee5,0xbb73ea87,0xbb86f076,0xbc74cacd,0x3c3ccb69,0x3c93f547,0xbcbb90f4,0xbc3ee456,0xbc17eef4,0x3c6645b1,0x3c4fad0d,0x3c43d745,0x3b991f4e,0x3bc6ff32, +0x3bb5d167,0x3c27237b,0x3c24cf1c,0x3c2d6c5f,0x3c2cface,0x3bda4ff6,0x3aa025b4,0xba8b3ec2,0xba305135,0xbb874bbf,0x39d47cee,0xbaeaf814,0x3b2f388b,0x3c643b48,0x3bcbd8fb,0x3bcd080a,0x3c05719d,0x3c160163,0x3bdb9913,0x3c4fc0de,0x3c000d24,0xbb431579,0xbc7592d5,0xbbd8b056,0x3b0bb4ca, +0x3c779e25,0x3cbec9ba,0x3cd2b118,0x3cafab42,0x3c722215,0x3c43ee4d,0x3ab8fb31,0x3c46d190,0x3c1792f3,0xbbad8a47,0x3be25e21,0x3c001657,0x3ba97c4c,0x3bc98cc4,0x3be7e145,0x3c243d26,0x3a78c827,0xbb7a7988,0xbad5e520,0xbb9090aa,0xbb71cbd1,0xba8b5eb4,0xb99fe302,0x3ab1f223,0x3c22f6c1, +0xbb9867f3,0xbbdd3c62,0xbb407b6b,0x3aae1fcb,0x3b24d109,0x3c3e6f4b,0xbad70c33,0xbbb3e1e8,0x3b24ad29,0xbb56dd84,0x3ace4e6c,0x3c77f1dd,0x3ca86782,0x3b2205d8,0x3a81b712,0xbbcdc5e4,0xbbf4478b,0xbc76020b,0xbc402b21,0xbc5a6983,0xbc106a7d,0xba76ab71,0x3b270c7f,0x3a903f13,0x3be567d2, +0x3bae5a45,0xba0709ca,0x3b0a9409,0x3b17de37,0x3b34d2b1,0xba635989,0x3ab54cd2,0x3c0ecd8a,0x3c2faf58,0x3c3aa700,0x3c17b7fd,0x3b963b12,0x3a8da439,0xbb7a2a61,0xbc112c5a,0xbc2a42b1,0xba641a53,0xbb12f618,0x3bb75d43,0x3ca42b91,0x3cb18d67,0x3c9a8c2f,0x3c2aef82,0x3c2041e1,0xbc27be43, +0xbc220945,0xbca8c486,0xbd038a85,0xbce70f43,0xbd0b6632,0xbcec6ced,0xbca94444,0xbc36d9b3,0xbba1414b,0xbb4af238,0xbb106b6f,0xbb2e2326,0xbbb217cb,0x38e7b68c,0x3aee9c60,0x39d3aeb8,0xb9d4ff12,0xb9e71632,0x3b30fe64,0xbb0bbc95,0xbb3700ba,0xb8fad5e2,0x3b1c59eb,0x3b2e96c2,0x3b005f89, +0xbae31c78,0xbbcdca89,0xbbba81f9,0xbcb2eb90,0xbcc5699c,0xbca37c0b,0xbc2f0713,0xbaf10add,0x3bc8f092,0xbbe8b54f,0xbc88ab48,0xbc90abe7,0xbc9a8cad,0xbc96fd6d,0xbc899f0e,0xbcd7fc25,0xbcf35be6,0xbce86b13,0xbcce67ef,0xbcadf89f,0xbc9594f3,0xbca4003b,0xbc81a1f1,0xbbd63d78,0x3a1b4eb0, +0x3b999b6d,0x3b8c4491,0x3bd07fab,0x3bd8f364,0x3bdfbed9,0x3b1ef5a5,0x3b0da1a0,0x3aeda8bd,0x3bbe08b8,0x3b8df4e8,0xba9d5ffd,0xbbb4dfe1,0xbc061cba,0xbc0c4ec8,0xbc3ac35c,0xbc43db09,0xbc75ca4a,0xbc8e4430,0xbca6e60f,0xbcc69159,0xbc99f5db,0xbcbf470c,0xbcdc1531,0xbcc26b93,0xbcbe2cf6, +0xbcadce91,0xbcabcdf5,0xbca25040,0xbc916db0,0xbc824d94,0xbc8441a6,0xbc5c9d24,0xbc4f49fa,0xbbd55422,0xbacf7972,0x3ab01f12,0x3b88215f,0x3ba45b77,0x3bcde6f0,0x3bf5c8c4,0x3bfc19f2,0x3bb711b4,0x3bc1d105,0x3bd3f383,0x3c06a0c0,0x3c080d19,0x3c0f83ba,0x3b8e3501,0xba3f0c4b,0xbc061ea6, +0xbc305acb,0xbc6d3dea,0xbc949899,0xbcb33d5c,0xbccd4c7e,0xbceaaa89,0xbcd8046f,0xbcca98a6,0xbcdc972b,0xbcdd77ee,0xbcc02915,0xbcb6897b,0xbc8c868a,0xbc3f01de,0xbbe0c3b8,0xbbec44f1,0xbc19f5fa,0xbbed9b47,0xbbe632ca,0xba059601,0x3a80a8e0,0x3abba0b0,0x3b052cc6,0x3b8089ec,0x3b96eadc, +0x3bb489f3,0x3be91975,0x3bfca116,0x3be4f1d9,0x3bea43d9,0x3c005ac8,0x3c175bc7,0x3c438c00,0x3bbef38f,0x3b1befb8,0xbad0d6c5,0xbb83f4f5,0xbbd6519d,0xbc0e7781,0xbc4fc183,0xbc893c59,0xbca6fd8c,0xbcbd3f4d,0xbc59c8d3,0xbc7d1188,0xbc48e630,0xbc3db999,0xbc143c55,0xbc31c84e,0xbc4082ae, +0xbc2a06f8,0xbc1ef177,0xbbae50b3,0xbb760198,0xbb17785f,0xbb55cd5c,0xba4a446f,0xb9ffbdd0,0x39485fe8,0xba101468,0x3980c822,0xbade61df,0x3b2026fa,0x3b2d6fbf,0x3b67677f,0x3b7ef90b,0x3b995888,0x3b8fe36b,0x3b827a10,0x3b819609,0x3b31bb19,0x3aa54648,0xb73f752c,0xbaf81821,0xbb53a02e, +0xbbb8cfe4,0xbbd881b3,0xbc0ffd99,0xbc39229b,0xbb87dd5c,0xbbb7b93c,0xbb97a560,0xbb7b8a85,0xbb39dfcb,0xbb4fa7b4,0xba9e36db,0x3a06d2e6,0x3a95790a,0x3a132740,0x3a07fc4e,0x3ab08cb1,0x3b1bdf70,0x3b25dc24,0x3a581ead,0x3a5ab2e2,0x3aac40ac,0x3aed4c48,0x3b1657ec,0x3b2ab4bd,0x3b092ea9, +0x3b16c4af,0x3b180ec1,0x3b17f11c,0x3b2377fb,0x3b2e75a1,0x3b061e33,0x3a9047f9,0x3a4900b2,0x3963fc76,0xb9a7ae10,0xba355cb8,0xbaca86b9,0xbb0e01e4,0xbb498626,0xbb78ef88,0x39c1df85,0xb761a5f4,0xb9be21be,0x3a3282cc,0x399afd88,0x3a6fc574,0x3aa7871e,0x3a8d38b8,0x3aa357e4,0x3a69f4bd, +0x3ae9cfb5,0x3b0d714f,0x3b12ac5e,0x3b2305f7,0x3b2ad01c,0x3b1f073c,0x3a174d67,0xb9a8e34e,0x392eeb74,0x39647f96,0x39754eec,0x390dfe92,0x3a081a69,0x39cb7da4,0x38ed32d8,0xba8fdb4d,0xbae2bb67,0xbb17f12d,0xbaebe4cc,0xbaa31243,0xb6e374de,0xb9e03290,0xb9df5d4c,0x390ec7f6,0xba81d2f6, +0xbaaff655,0xbac417f7,0xba804c40,0x3a864381,0x3bbe5f04,0x3baa5ff5,0x3b576ca5,0x3aca5fd7,0x3b6c5280,0x3b88c5ce,0x3ac9301f,0x3b803bc0,0x3b9dd4c3,0x3b8fb133,0x3bce7760,0x3bb850c3,0x3b97b76d,0x3aad0fb6,0xbab85298,0xbb110f39,0xba514bd0,0x3a4a14df,0x3a67add2,0x3b2797d1,0x3b0f714c, +0xb986f275,0xbb613891,0xbbcc93f6,0xbc11ef15,0xbbdf6aee,0xbb9bde8f,0xb99f1e2c,0xbab8835b,0xba8ddd5c,0x39fbc28f,0xbb8f3df3,0xbba434d9,0xbb668a64,0xbb015c7f,0xb9349633,0x3bf85d89,0x3b81fd19,0x3b8cf2d5,0x3b370e74,0x3bf07fb9,0x3be95446,0x3a8f11dc,0x3bdefa27,0x3c01c070,0x3c179f89, +0x3c317176,0x3c2ecd6b,0x3c051d18,0x3af914a2,0xbaf55dc0,0xbb8fb55a,0xba84a7c6,0x3a2d490d,0x3b0c6c9d,0x3b96eb3a,0x3b719e85,0x39afbde2,0xbbc24eb8,0xbc2592ea,0xbc63ce28,0xbc40ce06,0xbbeeac3b,0x39d38282,0xbaf4c7b7,0xbad58dbb,0x3a84a332,0xbbd7d32a,0xbc09c590,0xbbf38d14,0xbb7df354, +0x3b8d99c4,0x3c994318,0x3c5804f8,0x3c17c05b,0x3b57c8e5,0x3c1f12b8,0x3c47c2f4,0x3b962f01,0x3c3aeb3a,0x3c5f5bb3,0x3c458524,0x3ca675b7,0x3c959f7c,0x3c44721e,0x3b6c26ae,0xbb1c625b,0xbbc105c1,0xbafe24a2,0x3ad86ee4,0x3b29122a,0x3bf77e3f,0x3bcd5691,0x397d64fa,0xbc340ae2,0xbc9fb1c3, +0xbcc71433,0xbc961a09,0xbc45fd29,0x39edca6e,0xbb38d868,0xbb3ea0f7,0x3b41bd3b,0xbc5833c4,0xbc6d6206,0xbc066c56,0xbbac6d97,0x390e43f5,0x3c584b1c,0x3b7c2f40,0x3bb5a4bb,0x3be56eae,0x3c79e0ea,0x3c39f32e,0x3b9762af,0x3c3887e2,0x3c5c9a41,0x3c88e2b0,0x3cd3aa81,0x3cb4d916,0x3c4818c0, +0x3bd3ac82,0x3ad09f29,0xbb63f7a8,0xba966a99,0x3b0b976a,0x3b728925,0x3c02d78e,0x3bfc95ae,0x3a150cd0,0xbc2f425f,0xbca8d9e8,0xbcc4c929,0xbcb140a8,0xbc331402,0x3b6b7ccd,0xbb347e38,0xbae41d4a,0x3b14f3e3,0xbc5c443b,0xbc94ecf6,0xbc5057fc,0xbbe54aba,0x3bda01be,0x3d100023,0x3d31b142, +0x3cfd8964,0xbc267edd,0xbc5e2e7b,0xbc073f15,0x3bf23392,0x3c439e4f,0x3ccd6559,0x3d12cc48,0x3bddf09f,0xb97f9b98,0x3c6f86b0,0x3b5c875f,0x3ba0d924,0x3c506834,0x3c7f515c,0x3c857e48,0x3c3e006a,0x3c3eec08,0x3c2f9055,0x3c5f67ad,0x3c8b72cc,0x3c53a434,0x3c66aad1,0xbcb059fd,0xbd11259f, +0xbd2326da,0xbc2ab770,0x3b93b066,0xbc58dd36,0x3ccc61e9,0x3cc5aab9,0xbbf3b885,0xbb0d1127,0xbba3b34c,0xbcd54a62,0xbd8b1376,0xbd236e29,0x3d251b52,0x3c593758,0x3c0a67f6,0x3c700406,0x3c1491bc,0x3c04e05f,0x3c8587b5,0x3cb99099,0x3ca43531,0x3bbbe006,0x3c144eaa,0x3be3d6a6,0x3bc5aa16, +0x3b45fd3a,0x3b852752,0x3bd25932,0x3b1a7639,0x3bdc9d80,0x3c833be1,0x3ca662f8,0x3c661cfc,0x3b56f51c,0xbaf52262,0x3aba3e77,0x3c8c6e65,0xbb82fe48,0xbc0f17f1,0xbc5395ee,0x3b86203a,0x3bd07937,0xbc0fcbe8,0x3be7d8e9,0x3cc3a1e2,0x3c222c6c,0x3aee1962,0xbbb2a220,0x3cc7360d,0x3c63843c, +0x3c54f6d9,0x3baef5ac,0x3bf76c86,0x3c0afcef,0x3bd72959,0x3c3bf484,0x3c31578b,0x3c1871e0,0x3bc6a3b2,0xba1fa153,0x3b2f676a,0x3ac8da64,0xbad00613,0x39ed3a83,0xbb8313e1,0xba6276e1,0x3bae555f,0x3c0b20ee,0x3c2378b5,0x3c2e9aeb,0x3bce4fcc,0x3acac58e,0x3c49440e,0xbc3eebd5,0xbcaa90c6, +0xbc9dc34d,0x39ebd130,0x3c56ec8e,0x3cc12125,0x3cd7335a,0x3cf12de5,0x3cef8d07,0x3ce99d87,0x3cc27615,0x3bb8aecc,0x3c4f80c4,0x3c0ea34a,0x3a28ace5,0x3c090bde,0x3c110f60,0x3bb1b84f,0x3bcace6f,0x3bd43622,0x3c04733c,0x3aa802da,0xbb2a853f,0x3a18bb64,0xbb17481e,0xbb1d775a,0xb9b5210c, +0xba84eaff,0x3a5f726f,0x3b3750f3,0x3b552315,0x3b84d15d,0x3b52c389,0x3a1ee70f,0xb91010b0,0x3c1e89f3,0xbc197999,0xbc1782d3,0x3beaaa9e,0x3bfb9581,0x3c3a932e,0x3c51f0b3,0x3ca0d7f9,0xbbece96f,0xbc8e5d5f,0xbcbc46b1,0xbc88ba3a,0xbc3d9186,0xbc02f258,0xbc0e2993,0xbc020b0c,0xb992e1ed, +0x3b7c1b07,0x3b38ed43,0x3bf2a5c6,0x3b9c0a2b,0xbb8ffbde,0xbaf116fb,0xbafd8af0,0x39dc663d,0xb961a324,0x3aed8f7a,0x3bfbca5f,0x3c07069b,0x3c23f90c,0x3c12df3b,0x3bda161c,0x3b5caa81,0xbbae6e90,0xbc1613b2,0xbbaf660f,0x3c8b62ec,0x3bde0c30,0x3c8c3b9a,0x3d07b075,0x3cf8d87f,0x3cd913b5, +0x3c7a4699,0x3bdaac90,0x3823b609,0xbb1fa648,0xbc0c53df,0xbc930ccd,0xbc662211,0xbc96bf94,0xbc80191f,0xbc436264,0xbc1e05d3,0xbbec3e11,0xbc0dd047,0xbbddea6b,0xbbdb3a0d,0xbc0dc63d,0xba59a8a9,0x399a800d,0x3a6863f2,0xb968dd9a,0x38462987,0x3adb8eec,0x3a5f365c,0xba859ce9,0xbaeff617, +0xb9839b8e,0x3a4238fe,0x3b6ca58b,0x3b6b913f,0x3a045bb6,0xbba7c1f1,0xbc51149d,0xbc8e5173,0xbcfff96b,0xbc7c1c33,0xbbdbf5b2,0xbb35e58c,0xbb089695,0xbc210ac4,0xbc4f77af,0xbc5f170a,0xbc879b72,0xbcebf42f,0xbd012356,0xbd09c9da,0xbd00b567,0xbcd757df,0xbcaac979,0xbc8ee6d7,0xbc9496a8, +0xbc88fb57,0xbc51b1ec,0xbb9361fa,0x3a5039a9,0x3baf3b85,0x3b8a3f64,0x3b871f1d,0x3b7158f8,0x3b079cd4,0x3a398dc2,0xbb3b6797,0x3a5338c5,0x3b056140,0x3b6f9e18,0xba98ae50,0xbb71044e,0xbb8d673a,0xbb80bb5a,0xbae816b2,0xbb205a8c,0xbb4f2001,0xbb9dbe8a,0xbb9edb51,0xbc0e055b,0xbc3cd5aa, +0xbc512747,0xbc35603a,0xbc5dd789,0xbc8055c5,0xbc8d0c9d,0xbca02209,0xbca41796,0xbca6940b,0xbcae3cbe,0xbcb42e56,0xbc9f885d,0xbc6bf02f,0xbc555366,0xbb928be2,0x3abff886,0x3c0f4146,0x3bd2eef0,0x3ba279fb,0x3b930840,0x3aec50f4,0x3a5ca57b,0xba1119eb,0x3aa18c62,0x3b479ddf,0x3bd07c01, +0x3aa599ac,0xbb23314b,0xbc05c0d9,0xbc257b22,0xbc6290f5,0xbc8de33d,0xbc8d8e0f,0xbc867bba,0xbc7d9547,0xbc688e6d,0xbc7d6f2d,0xbc8498af,0xbc96b521,0xbc7c01e7,0xbc526541,0xbc547081,0xbc4a4055,0xbc4af5d3,0xbc686fc4,0xbc8cf116,0xbc983519,0xbc8b8f68,0xbc41a6c7,0xbc36e276,0xbb92c59f, +0xba4b77c1,0x3bc29647,0x3ba7affa,0x3be7acfb,0x3bd0ef98,0x3baea74d,0x3b8f9b40,0x3b475a47,0x3b81f7b7,0x3b7218f6,0x3b908b22,0x396d3936,0xbadd2c51,0xbb5dd5ff,0xbbcd0a1d,0xbc1755d6,0xbc48089e,0xbc517f11,0xbc6922b5,0xbc7e37c6,0xbc7c28d0,0xbc71f770,0xbc886a09,0xbc90b23e,0xbc90b24f, +0xbc95aea1,0xbca0aa33,0xbc9af7b8,0xbc8f5bb8,0xbc798851,0xbc31bee2,0xbc037b30,0xbbe2e2bb,0xbbee43d5,0xbbbc72e4,0xbb98e983,0xbb7899d1,0xbb10d41a,0xba4c83bd,0x3b668718,0x3b7832aa,0x3b614f37,0x3b83f39b,0x3b876464,0x3b7f6948,0x3b6cd496,0x3b7b0e18,0x3b47323b,0x3b0d6a40,0x3990b0d4, +0xb95d3fe4,0xb9c1ee39,0xba6202d6,0xbb86d48a,0xbbb46951,0xbc0b70d7,0xbc47e217,0xbbba8ccb,0xbbdb3bc9,0xbbd60211,0xbbb68766,0xbb88c23f,0xbb8e1ad8,0xbb7a9a3b,0xbb57e7ee,0xbb5666be,0xbb8558d4,0xbb8fe5a2,0xbb76c482,0xbb3692a6,0xbb1e078e,0xbb4012ac,0xbb2e776f,0xb9be8d1b,0xba3c9343, +0xbaa13f51,0xba9576de,0xbaa103f9,0xbac07edb,0xbad81121,0xbae44f45,0xbaeab980,0xbb0098d9,0xbb246727,0xbb366b4f,0xbb3b03f2,0xbb5c74ce,0xbb7e4794,0xbb8c4482,0xbb9d6e07,0xbb9febad,0xbbb30439,0xbbb85c66,0xbba404b6,0xbb2b2a3e,0xbb07cda7,0xba935572,0xbac7db5a,0xba9053e8,0xbac0ca49, +0xba4d72d2,0xba0d2fbb,0xbab9b7f0,0xb9a0726d,0x39047a1c,0x395591f3,0x38ff3048,0x3939a65a,0x39e0034e,0xbab9452a,0xbb0bbd4d,0xbaf89d98,0xbae99110,0xbacfa4b5,0xbaac48b7,0xba9f2a87,0xbabfb188,0xbb04cc50,0xbb40fc67,0xbb550386,0xbb5cffb7,0xbb24c706,0xbb0345d0,0xbaccb655,0xbb004340, +0xbb010205,0xbaae5968,0xbb2876eb,0xbb428241,0xbb3eb873,0xbb2daaa3,0xbac0b51f,0x3b538148,0x3b4e9053,0x3a8ae878,0xbafaebcd,0x3abe3aec,0x3b0d8972,0xba810dd5,0x3b353561,0x3b415249,0x3b03b347,0x3b26a0dd,0x3adac627,0x3b2044f6,0xbae7ab1b,0xbb84818f,0xbb8d87c3,0xbb67a85a,0xbb0b3d9a, +0xba59da72,0x3a02003b,0xb9913e6c,0xbb7a1d2c,0xbbbda09b,0xbbf0d5f8,0xbc12726c,0xbb9eb266,0xbb6a4575,0xbb3565ad,0xbb4ead22,0xbb3b3a97,0xba89c9e5,0xbbc65b38,0xbbd8c990,0xbb8ae92e,0xbb7aa62d,0xbb602523,0x3b84d2ca,0x3b168e26,0x3ac72312,0xbb3b4e3a,0x3ba5a76d,0x3bc30189,0xbae14f0f, +0x3bb22620,0x3bd2dd00,0x3bfcb6b9,0x3bbcadaa,0x3bbbbbb7,0x3bda87a7,0xbacf4668,0xbb9ee8d6,0xbbc925bd,0xbb873496,0xbaf8526f,0x3a013970,0x3b17b57f,0x39e10298,0xbba07053,0xbc1741b0,0xbc388772,0xbc4f224c,0xbbe63601,0xbb5150f4,0xbacc4932,0xbb4e9b11,0xbb8100f5,0xb988e3fa,0xbc079e09, +0xbc211429,0xbbfde78c,0xbbd50210,0x377b4e00,0x3c6b3208,0x3c3b2b58,0x3beab4c9,0xbae5e9b5,0x3c0b1f99,0x3c3a49bd,0x3b161bc2,0x3c4b802c,0x3c5ffda6,0x3c259029,0x3c70ca12,0x3c48cf46,0x3c36bcfc,0xba750e23,0xbbd7208d,0xbbf75419,0xbbd4a2a5,0xbb102365,0x3adf0da9,0x3bb62559,0x3b52b17b, +0xbbd48433,0xbc740390,0xbca4f9c7,0xbca70675,0xbc1cf5c4,0xbb9a9f32,0xbb4da9d6,0xbb4d3469,0xbb9db0e5,0x3add1fc8,0xbc62678d,0xbc769ed6,0xbbccebf2,0xbbee8233,0xbbc51ece,0x3bf89799,0x3b65e7e4,0x3ae7f358,0xbacd78f2,0x3c794c68,0x3c619b24,0x3b46212a,0x3c3b05ba,0x3c5a195f,0x3c8734c3, +0x3cc11efb,0x3ca93213,0x3c5325d9,0x3b2c2e42,0xbb89657a,0xbbed78f3,0xbba8a891,0xbaa7aa1f,0x3b4d6274,0x3bc00b7c,0x3b615307,0xbc03f20f,0xbc808107,0xbcaa7115,0xbca48585,0xbc219183,0xba0a867c,0x3b3ba151,0xbb80c663,0xbba227b0,0x3ac7b24b,0xbc6abee2,0xbc8f9f0c,0xbc38c25a,0xbc2aa2ac, +0x3c14b94a,0x3d0030b5,0x3d4b831f,0x3d2cb6e2,0x3b35310f,0xbcb291c9,0xbcbd9470,0x3ad0263a,0x3aa48daa,0x3c819034,0x3d1de349,0x3bf34645,0xbb55ffea,0x3bd74bbf,0x3aec4a85,0x3bb62b92,0x3c0e9551,0x3c416d81,0x3c58759a,0x3c2d262b,0x3c28e6d4,0x3c0b5192,0x3c05a98f,0x3c55bf83,0x3bc427b9, +0xbbf77320,0xbccce180,0xbd032c88,0xbd12d46c,0xbb962f2c,0x3bb3b23b,0xbc922f89,0x3c34bb99,0x3bcb2cd5,0xbcc4858a,0xbc107cd9,0xbce04dc3,0xbcf86f53,0xbd8f2627,0xbd3f55ca,0x3ce94260,0x3c8d47b5,0x3c6fd5c7,0x3c06bb29,0x3bfa4911,0x3bf1ceca,0x3c3c84b4,0x3c9efeac,0x3c9bc48c,0x3bf6ddc1, +0x3bab3434,0x3b2def14,0x3bc6e866,0x3bb9beb1,0x3bbd7ec6,0x3b3b1aad,0xb7e5845f,0x3b078807,0x3bb6e50a,0x3c3b54be,0x3c040b4f,0xba516526,0xbaffc074,0x3a4a80c9,0x3cb7bcc2,0xbc5ebd4c,0xbc92cf82,0xbc1a6612,0x3b4b2656,0x3bc765e5,0x3c03b417,0xbbbd3b31,0x3ca2b0f4,0x3cb8625f,0x3c6e49ed, +0x3b6486f1,0x3c70051d,0x3c4201fe,0x3c5cdf2d,0x3c449990,0x3c1bae2a,0x3c1dadba,0x3b60d708,0x3c1f4ea2,0x3c121074,0x3bf75dc1,0x3bd3ce35,0x3a8bdc93,0x3b931774,0x3b257b5d,0xbabdc685,0xbb4c0509,0xbb484246,0xbad521c9,0xba84d8bb,0x3c32ada2,0x3c6489e9,0x3c6147f6,0x3bd67714,0x3b0b9f00, +0x3b87cab2,0xbc88e9a1,0xbcabb839,0xbcaea18f,0x3c95ce55,0x3cf97526,0x3ca0080a,0x3cbe5388,0x3ca168e1,0x3cd7bd6b,0x3ce7ed16,0x3cbfdf2c,0x3c09778f,0x3bb44747,0x3b90932d,0x3c4d0889,0x3c219d6d,0x3c037350,0x3b9ac57d,0x3b3d16f0,0x3b32845b,0x3b80e9f6,0x3b0e00f0,0xba1910f9,0xbaf00960, +0xbb05d75b,0xbb5135a6,0xbb1bbdbc,0xbaf252d5,0x38e35048,0xba99f149,0x3c1b86d1,0x3c4490e9,0x3c59acfd,0x3c011daf,0x3bc1bca6,0xbb65c791,0xbb4ab930,0x3a0c62db,0xbbfeb06b,0x3cdb73fc,0x3cdfe253,0x3b530e21,0x3c5ae626,0xbc6ee33f,0xbcaf4734,0xbcf95eec,0xbca41d90,0xbb979018,0xbb24c6b6, +0xbb6d5e0a,0xbbbf46fa,0xbb61aeb0,0xb9dde9df,0x3a671979,0x3addccb0,0xb93edff2,0xbb9435a3,0xbb95dd1d,0xbbb2b475,0xbb7c8323,0x398b159e,0x3b1a3137,0x3b217f8e,0x3b079edb,0x3baa6de9,0x3bffefcf,0x3c015d4f,0x3b836405,0xba16e892,0xbaa7ba2b,0x3bb8493a,0x3ca67c62,0x3cabe9fd,0x3cd5b8c0, +0x3ca3c4c8,0x3c927574,0x3c59776a,0x3c76576f,0xbb01a7d0,0x3bb85b41,0x3c459a60,0x3bb8482d,0xba36bf8a,0xbaf21def,0xbb749784,0xbadc8754,0xba49bf9e,0xbb4a9add,0xbb78d6e4,0xbc007918,0xbc22cd53,0xbc2eeac3,0xbbdf51d9,0xbb966506,0xbb11b477,0x3b77cd13,0xb95a9140,0xb9bb72a5,0x3ac37040, +0x3ba60520,0x3bb617bd,0x3b46da95,0x3b4465d0,0x3b475a3e,0x3b4623ce,0x3b9617f6,0x3a059d6c,0xbc0846bb,0xbbc723aa,0xbbab93df,0xbc2d6de5,0xbb8ab7a8,0xbb8f3d18,0xbbd53945,0xbb612f1c,0xbb979efe,0xbc128de2,0xbc6967c0,0xbc8f77a1,0xbcf6d9db,0xbcfde686,0xbd01d9af,0xbce4667e,0xbccb8070, +0xbca8c585,0xbc888d3a,0xbc7403dc,0xbc5b79db,0xbc59d941,0xbc15ebf0,0xbba5e1d0,0x3aae70f4,0x3b5532ff,0x3b9ab4a4,0x3b3cdf47,0x3b52a02c,0x3af41300,0xb996863b,0xba4d7ec5,0xb9eb4080,0x3bbdd080,0x3b74544c,0x3af7418b,0x3ac357c8,0xba9dcf8d,0xb95e89db,0x3b8ccbc8,0x3ab42c0a,0x3a022081, +0x3b152a55,0xbb01fc46,0xbb396b30,0xbb848ec9,0xbbbb7b6a,0xbc2bdbcb,0xbc5f0887,0xbc90543c,0xbcb1f0a4,0xbcbd9f82,0xbcbed131,0xbcba72c5,0xbcc700e8,0xbcaba712,0xbc9c14b0,0xbc989c47,0xbc31466d,0xbb90aa88,0x3b99ec08,0x3b8abd1c,0x3b835c96,0x3b96b309,0x3b52972b,0x3af3c103,0x3a6cd9fb, +0xb94f3cf5,0xb9b30c3d,0x3ac1d0a8,0xb98aa722,0xba853af1,0xbb36df0b,0xbbcf9a86,0xbc0bfc2e,0xbc09beab,0xbbd46cc3,0xbb96c09e,0xbb8265e5,0xbb57583a,0xbbeecb3a,0xbbe9651b,0xbc216a6d,0xbc02639d,0xbbdaba85,0xbc1d9c45,0xbc535b35,0xbc8c6053,0xbc8f823a,0xbc97ecde,0xbca46a94,0xbc976a3c, +0xbc8f8df0,0xbc8a905a,0xbc2632cc,0xbbc53d0e,0x39906d85,0xba76a25d,0x3ab847d4,0x3a8a1fe1,0xb88e0f39,0xba237f2d,0xbab77a2b,0xbafb6e8c,0xbb6791bd,0xbbbaa29c,0xbba66b55,0xbba331a9,0xbb77d83d,0xbb9772e8,0xbbc091af,0xbc1388e0,0xbc0604b7,0xbc06e990,0xbbfcb744,0xbbfc1a2b,0xbc0f6897, +0xbc0ea454,0xbc41876b,0xbc43aa48,0xbc5f57c7,0xbc6935da,0xbc437b05,0xbc3ddc81,0xbc149b30,0xbc11bed9,0xbbf13792,0xbbe8e7c2,0xbbd51d63,0xbbdd7b36,0xbbf34b6e,0xbc05b426,0xbc068e52,0xbbf9e51f,0xbba67a31,0xbbcab081,0xbbb70931,0xbbae8b7a,0xbb9fdf25,0xbb9a4132,0xbb689a8e,0xbae86a15, +0xbb616c68,0xbb7f0fde,0xbbb5ccad,0xbbd26daf,0xbbc838e1,0xbbb88c99,0xbbd2f29a,0xbbcc2150,0xbbf1224d,0xbc09d40e,0xbbea8336,0xbbeccbb9,0xbbea73c2,0xbbd50444,0xbbb8485d,0xbbb9f974,0xbbcc7bc9,0xbbf11108,0xbc01e1c7,0xbbfcebc3,0xbbfd00e9,0xbbfb6f03,0xbbf2e60d,0xbbe1df10,0xbbd8969a, +0xbbccb62e,0xbb898793,0xbb996115,0xbba8688a,0xbba75ce8,0xbba66ea8,0xbbaeb3b4,0xbbb1c82d,0xbbb845e1,0xbbc3c2e7,0xbbcad813,0xbbd82af1,0xbbcaf316,0xbbc60eec,0xbbc2c558,0xbbc967e9,0xbbd97793,0xbbe3b3ad,0xbbdd6de9,0xbbe647aa,0xbbe9b4fb,0xbc2da185,0xbb4ad6a4,0xbb21872d,0xbb022618, +0xbb05e43d,0xbafc6540,0xbb4149fe,0xbab7ffd4,0xba97f5bc,0xbb0a30fe,0xbaa8f116,0xba75246a,0xba21d2a3,0xba9b6bbc,0xba9fd866,0xb9eb703e,0xbb01a7c2,0xbb27d2bc,0xbb3a4270,0xbb220536,0xbb07dfaf,0xbaca5a86,0xbaf5ecdd,0xbb0c62da,0xbb28e145,0xbb543c89,0xbb53fbf3,0xbb3e7f8d,0xbaf75205, +0xbac3bc6a,0xbacd2eb2,0xbb062438,0xbb114baa,0xbaf22525,0xbb2f2b66,0xbb3825ec,0xbb2a635d,0xbb2d8544,0xbb168f75,0x3a4b97ea,0x3aa4ecaf,0x38dd6157,0xbb82cdff,0xb8b83a98,0x3a15555c,0xbabadde9,0x3b19e382,0x3b129e4d,0x3af1bd1a,0x38dbd11b,0xba536783,0x3ac89f27,0xbb4cea08,0xbb9865f8, +0xbba5b7ba,0xbb880a4a,0xbb52462c,0xbac2b3f5,0xbad97cbe,0xbb2acae3,0xbba52971,0xbbc0c19a,0xbbc30386,0xbbce12c5,0xba6d9e24,0xb8171972,0xbaf51f0a,0xbb342314,0xbb4e199f,0xbb001d5f,0xbbb16a0a,0xbbc746d7,0xbb8f4727,0xbb882d81,0xbb942826,0xb9f20f08,0x3a33863d,0xb93d068a,0xbbdb01e3, +0x3b1c84a3,0x3b8c36e1,0xba93a01b,0x3b905bba,0x3bb99dc8,0x3bf1f6e2,0x3b16198c,0x3aec07ce,0x3bc59c06,0xbb479b92,0xbbb6ab15,0xbbeb136c,0xbba06b08,0xbb3bf2b1,0xb94c27f1,0xba8c963b,0xbb55602d,0xbbe068ff,0xbc21bd54,0xbc1b66b4,0xbc0a58bb,0xb9c4c262,0x3b1bfddb,0x39116c20,0xbb13fdc1, +0xbb8f7f72,0xbb0d56ac,0xbbf4d8e6,0xbbfe6eab,0xbbbf5531,0xbbcc1f4f,0xbb06a3b4,0x3beb2695,0x3bff07f3,0x3bb12527,0xbbd7bf36,0x3bab0510,0x3c0565b4,0x3ad2ee55,0x3c581390,0x3c647c64,0x3c329cbb,0x3c0cd57f,0x3bb45b5b,0x3c33de47,0xbb883a5e,0xbbfa76d1,0xbbfe9619,0xbbe9629d,0xbb6e68a1, +0x3a4edd67,0x3996dc65,0xbb4240ea,0xbc1998c6,0xbc74bff7,0xbc7d96cd,0xbc4f82b0,0x3af15903,0x3bbcd5ff,0x38b2537b,0xba9935c3,0xbb9d9d80,0xbaa03f82,0xbc365638,0xbc48e919,0xbbd4117e,0xbbf4d485,0xbc0b0573,0xba0371fe,0x3aabeda5,0xbabdb607,0xbc35cadf,0x3c334dfe,0x3c6acfeb,0x3b5cbd9f, +0x3c4a03e5,0x3c69b9b7,0x3c80957c,0x3c87f71e,0x3c720eea,0x3c52645d,0xbab964ce,0xbbe4934a,0xbbfe8985,0xbbaf0d14,0xbb1a9f1e,0x3b47f070,0x39dffcc5,0xbb6600fe,0xbc451c86,0xbc8b4904,0xbc8b1431,0xbc55a9c9,0x3b5557ec,0x3c34e6f5,0x3bc99f80,0xbaf34cb9,0xbbc8359e,0xbb2e37e2,0xbc4b0158, +0xbc3eddad,0xbbe48c07,0xbc1a7f55,0x3bea56a1,0x3caf9610,0x3d357a11,0x3d2d65c9,0x3c836aff,0xbcbc1f69,0xbcfc9b4c,0xbc06ca19,0xbb59fc26,0x3c175529,0x3cd35403,0x3bff2b8f,0xba856ed9,0xbaebafd4,0x3b64669d,0x3bf2fa5a,0x3b033ef1,0x3b9fdf25,0x3be14ef3,0x3c0489f5,0x3b9c70ef,0x3b8270df, +0x3bb19c00,0x3c0476fc,0x3a6fc6a4,0xbc69776d,0xbcca0184,0xbce0385b,0xbcb01d65,0x3ad889fb,0x3c048cbe,0xbb865e40,0x3ae58b0f,0xbc1fbf27,0xbce1c0bd,0xbc56656d,0xbd07655f,0xbd155f66,0xbd6fb91b,0xbd310b6c,0xbbb55e53,0x3c973321,0x3cc6e915,0x3c113992,0x3ba89097,0x3b1bd84a,0x3bccdbb6, +0x3c54d8ca,0x3c70f66b,0x3c2b5a38,0x3b82ae55,0x3a91495a,0x3ba07af5,0x3bc93519,0x3b9f602c,0x3ab4c806,0x3a0c63f2,0xb992dedc,0xbb1ad646,0x3aa7de7e,0x39a2dc78,0xbb2082ed,0xbabad739,0x3a33b851,0x3cb669a4,0xbc530ed5,0xbc85b1e0,0x3a63c41e,0x389e6048,0x3c0e8fce,0x3cfcacae,0xbbe4966d, +0x3c3c8a92,0x3ccd2120,0x3c5b8ebb,0x3b2e5e8b,0xbb9a3b40,0x3b50869b,0x3c1a0734,0x3c8d40a1,0x3c22061f,0x3c0f9311,0x39c54151,0x3bc50247,0x3bc5e461,0x3ba3b76d,0x3bfd5e47,0x3b8bea7e,0x3b650d8b,0x3ae4da38,0xbab62753,0xba970482,0xbadb53e8,0xba9e02a8,0xbaccce24,0x3c244f88,0x3c6420bc, +0x3c4fbaec,0x3c08ad81,0x3ba0b476,0xbafa6868,0xbc2cd4d0,0xbc11b93e,0xbb39df2d,0x3c863567,0x3ca4e844,0x3b38877e,0x3bf747e8,0x3bb6176b,0x3c99e732,0x3c90ad45,0x3c4762af,0x3b801fc6,0xbc077086,0xbbb45eb7,0x3c85a578,0x3c2b3759,0x3c04e0c2,0x3ad1be21,0xb954e1e3,0xba92a634,0xb97b348a, +0x3b0a0976,0x3a87202a,0xbb5eb5e4,0xbb2256a4,0xbb7fd395,0xbb848c57,0xbb4dced1,0xbab8a061,0xba5ccafc,0x3c1807bb,0x3c48b016,0x3c8fce29,0x3c654730,0x3c35a5fd,0xbc06bd78,0x3beb3a87,0x3c4d2991,0xbb102b69,0x3ca40e17,0x3c658cd5,0xbc64a275,0xbaace6d6,0xbc6dc7aa,0xbcaa65aa,0xbcc17dfe, +0xbc82b2d8,0xbb1ef9f1,0x3b2e35f2,0x3b362e82,0xbb769520,0xbb951fec,0xbb96117c,0xbaa2b3f4,0xbb80cb40,0xbbacfba4,0xbb2b16e7,0xbbf3043f,0xbc13c788,0xbbda4060,0xbb105253,0xba26e165,0xbb8f2acf,0xba9cd58e,0x3ad01818,0x3ba09909,0x3ba9e2df,0x3b3bd7bd,0x3bec5f5d,0x3c11b2ef,0x3c6f7103, +0x3c9c406c,0x3cd7b99e,0x3cba9fb3,0x3a8d8387,0xbaf8a483,0xbb2cb1b9,0x3c16e702,0xbba47568,0x3c9b0702,0x3caaefa4,0x3c6be2a6,0x3c2c67fa,0x3c1401bc,0x3ba474b1,0x3b9ba522,0x3bac447c,0x3af1361d,0x3abb58d6,0xb9e0c25b,0xbbce8455,0xbc1e3ba0,0xbbe0da05,0xbbbe1495,0xbb3c08a8,0x3ab25b6b, +0x3a2605a1,0x3a80f396,0x3b0a0c76,0x3ba744ee,0x3bcd3c8c,0x3b93fc83,0x3b6bb39c,0x3b081045,0x3a755ed5,0xbafb9115,0xbb903be8,0xbc1f88f1,0xba5eb80d,0x3bc41076,0x3c9c8656,0x3c4d0a0b,0x3c082208,0x3bf4597f,0x3c43066b,0xbc04a6a2,0xbc28caf5,0xbc96de3f,0xbcb674bf,0xbce54b3d,0xbce1c70e, +0xbcd6c0a1,0xbca25be4,0xbca7eac9,0xbc93f739,0xbc5c1ad9,0xbc3f6355,0xbc1d66bc,0xbc1b62ae,0xbc2eb4da,0xbc128926,0xbbb5608d,0x3b148774,0x3bb53598,0x3b670716,0x3b8ae7b7,0x3b84af54,0x3bab1a1d,0x3a491e81,0x3a6b05b4,0x3b5ae9b5,0x3b8ea32a,0x3bab0b78,0x3b90cace,0x3b81e8fc,0x3b431660, +0x3af9c145,0xb9c7081f,0xbae6e226,0xbb76d959,0xbbb28b51,0xbb08a361,0xbaca140b,0xbbe4b8f4,0xbc4a2c77,0xbc8737cd,0xbc9cff17,0xbcb45ab2,0xbca99781,0xbcad4e0a,0xbca46cb0,0xbcaf484f,0xbc8f878a,0xbc8c0147,0xbc6cbd4f,0xbc3fc3ca,0xbbf871a7,0xbb2bac1e,0x3a6ee92a,0x3b469dcf,0x3bae8c4c, +0x3bb6af39,0x3b90f4c0,0x3b9f871f,0x3b19c8ff,0x3ae5b863,0x3adbdb8d,0x3b2277d7,0x3b499cb0,0x3b32cb54,0x3a9b1a4a,0x3a491176,0x39a4a4b2,0x3ade577d,0x3aad98fa,0xb8091aa0,0xb97680d2,0xbb3a2bef,0xbb63ddd7,0xbba07158,0xbbaa0104,0xbbb3cca4,0xbbffeb12,0xbc421b4a,0xbc8ccb6b,0xbc8ad819, +0xbc84b3d6,0xbc944c05,0xbc704447,0xbc7ae3de,0xbc5bc658,0xbc28ff56,0xbbf01f1a,0xbb900745,0xbb584f7d,0xbabb80fc,0x3b00b4f9,0x3ad4a878,0x3aab1c20,0x3aa81caa,0x3a4c1c73,0xb9e55b17,0xbb1db7e6,0xbac5c1b5,0xbaaeff37,0xb8219257,0xb95344bd,0xb95767fb,0xba6587ea,0xba9b631e,0xbaabbe63, +0xba63c5e8,0xbb1883db,0xbbb3f9b9,0xbb9d7d71,0xbbe88d49,0xbbe961aa,0xbc0aae5a,0xbbf7692c,0xbbb278a3,0xbb69f06f,0xbb3abc52,0xbb8d7caa,0xbb848d36,0xbba9e9b0,0xbba3a646,0xbbd4a9b2,0xbbdc05fa,0xbbdfda56,0xbbf6041c,0xbbbf0371,0xbbcb6a8e,0xbba02722,0xbb9d5eb6,0xbb9c77ba,0xbb95ad14, +0xbb9338e7,0xbb659aed,0xbb078fc8,0xbb5ee6eb,0xbb818222,0xbbb17b91,0xbbd40ade,0xbbe85401,0xbbffc77c,0xbbeda1b5,0xbbdfb08b,0xbbe07a10,0xbbcd4f74,0xbb9fd14b,0xbb9a523b,0xbbb38715,0xbbb9de2c,0xbbc5be0c,0xbb9dee61,0xbbd5cba3,0xbc0aef67,0xbc13fc72,0xbc0e6b30,0xbc0dc695,0xbc0f9e53, +0xbc1100d6,0xbc0e032d,0xbbdf89ac,0xbbb879b5,0xbbdc521b,0xbbbeb4fa,0xbba02f26,0xbb7ed814,0xbb84f04c,0xbb872c12,0xbb8625fb,0xbb87c04a,0xbb8fd6b4,0xbb945151,0xbb9f3ead,0xbb964cfa,0xbb92be0d,0xbb8d94a5,0xbb8b17fe,0xbb904323,0xbb93427b,0xbb923f37,0xbb936710,0xbb99e2f4,0xbc1083ff, +0xbb1c96ca,0xbaf81ba9,0xbae03023,0xbac806c4,0xbac8d1fa,0xbb24cd51,0xba8688a0,0xba6147a3,0xbab1fe4d,0xba96cd7c,0xba7c629f,0xb98a1a80,0xba9b2624,0xbaacf2ac,0xba0468c5,0xbad0f65f,0xbb0967e4,0xbb3b9de6,0xbb1b6ed1,0xbb0250ab,0xbabf108e,0xbaf1879f,0xbb0555ec,0xbb1791e1,0xbb314c8d, +0xbb22d4cf,0xbaf0a6e5,0xba83708e,0xba3ac4d3,0xba5c2db1,0xbab582f2,0xbae16a20,0xbaf4004b,0xbb04756d,0xbae778f5,0xbab9767c,0xbae5745a,0xbad9ed5d,0xb88b67e4,0x3a0147a2,0x39c1546e,0xbb521a42,0xb907485c,0x394f503a,0xb96fb38f,0x3b0930e8,0x3b1813ae,0x3b45298e,0xb9ae69d3,0xbaabf3b6, +0x3aa3ae91,0xbb2ef0df,0xbb7c609f,0xbbab23c5,0xbb845b51,0xbb524245,0xbae0d2c3,0xbb375081,0xbb726981,0xbba5fb38,0xbba09bf6,0xbb8381ca,0xbb5c29b1,0x3abfd8bb,0x3b12388a,0x37cb7fd7,0xba9a67d2,0xbb1bb499,0xbb42c287,0xbb918511,0xbba84909,0xbb7e6785,0xbb5a4f71,0xbb47534e,0xbaf6a94e, +0x3a1043fd,0x39ae805f,0xbbb0436a,0x3acff2b1,0x3b64f25a,0x3ada358a,0x3b7c618c,0x3ba1e062,0x3c06f8ba,0x3abd221a,0x3a140454,0x3ba02c8b,0xbb29434d,0xbb99efae,0xbc071e64,0xbbb0ff31,0xbb84cc7a,0xbacfaa67,0xbb80ca70,0xbbb599d4,0xbbf290d7,0xbc11227d,0xbbe3c491,0xbb801c1a,0x3b630e96, +0x3ba83fb6,0x3b257e2b,0xb9ab0d44,0xbb5cd69e,0xbb91775d,0xbbc8cec7,0xbb9d1cec,0xbb246883,0xbb777a55,0xba629115,0x3b4e1638,0x3bae9704,0x3ba9f2eb,0xbbc6b2c0,0x3b7a4a07,0x3bba6f9d,0x3b5554c7,0x3c51530d,0x3c67529b,0x3c6c5f46,0x3bb569d8,0x3b07444a,0x3c2ac460,0xbb90dcc1,0xbbd112bc, +0xbc12d287,0xbbebfd1d,0xbb96e22d,0xba5ecb53,0xbb9a93b8,0xbbf74b8c,0xbc306d41,0xbc519319,0xbc2601a4,0xbbb30805,0x3bff76d1,0x3c31ae92,0x3b876fdd,0x3af8a590,0xbb5c26bf,0xbbb764b8,0xbc1881a8,0xbc28b082,0xbbc85abc,0xbbac5396,0xbbaadcf0,0xbb5dfec3,0x3ab7b1c8,0xb9ae7ec6,0xbc497563, +0x3bdf8da5,0x3c56ee9a,0x3bd15bf4,0x3c54830b,0x3c7fe3b7,0x3c89bf61,0x3c2cb75a,0x3c1bcdba,0x3c4ca7e8,0xbb44b66d,0xbbd7d55c,0xbc0d6da8,0xbbcefaf7,0xbb757474,0xb9aae4d7,0xbbbefddf,0xbc185340,0xbc62f20a,0xbc7f9915,0xbc458b5b,0xbbac8257,0x3c30c416,0x3c7bcadf,0x3c0d5772,0x3ac0b2e1, +0xbba4b1a9,0xbbfb812e,0xbc2d8c8a,0xbba63cb4,0xba05893d,0xbb8ab51a,0x3af42b02,0x3c1af496,0x3ceebf70,0x3d09e77a,0x3ccdee56,0xbc7262e9,0xbcdd20af,0xbc6ac406,0xbb903956,0x3bbe0acc,0x3c14e20b,0x3c2f6188,0x3bae4505,0xbc02fd2d,0x3bbcccea,0x3c04ec98,0xbb345e3d,0xb97813b2,0xb907cdad, +0x3afed002,0x3a694f8e,0x3b0c6116,0x3b934885,0x3b786584,0xbb2b3ed3,0xbc57730b,0xbcccc691,0xbcbb60a3,0x39ab6079,0x3beaf247,0x3c2b6e5b,0x3c4375e2,0xbba04507,0xbcad2f2e,0xbcce3c51,0xbc71359a,0xbccf82bf,0xbce17373,0xbd2a11fa,0xbd0f61b8,0xbd0038e0,0x3c4f619d,0x3ce3eecf,0x3c6ed590, +0x3b8dd3be,0xbb2872d3,0xba23ce39,0x3bc54314,0x3c24304a,0x3c2f5a4c,0x3ba7b235,0x3ac25fa3,0x3b637684,0x3aa95821,0xb98ca337,0xb8804bcb,0xbaac62df,0xbb2a27b3,0xbbac790f,0xbbd6e705,0xbbcf740c,0xbbaff6de,0x3b6918a6,0x3b940301,0x3c3d3287,0xbc232158,0xbc3e2c44,0x3c00e5f2,0x3bafb550, +0x3ca7b8d0,0x3d4628e1,0xb9a5c740,0x3b18fff7,0x3d0dc304,0x3ba29d30,0xbbc53df7,0xbc7a2b67,0xbb8067ac,0x3ba7f2de,0x3c574c65,0x3c08072c,0x3bdd0a2b,0xbb2ce453,0x3ab09af4,0x3b105e82,0x3b7a6b2e,0x3bf09fc1,0x3bb9dff2,0x3b548982,0x3a982d59,0x3a925b8b,0x3a8947a9,0xbb03d85d,0xba7cdccf, +0x3a9d9796,0x3bc343f6,0x3c1cf9cf,0x3c089bec,0x3bdd2fb4,0x3bb2d858,0x38f0bdfb,0xbbbba17f,0x39aa3754,0x3cf18a87,0xbb8ffd72,0xbc498b42,0xbc584074,0xbc4073f1,0xbb1960aa,0x3c831d33,0x3b5b205d,0xbb40f54f,0xba9db676,0xbc784d0a,0xbc2e3819,0x3c10f16f,0x3c116a18,0x3bfe84a4,0xb98d19f5, +0xbad206aa,0xbb68ff93,0xbab72aa1,0x3a385c93,0x3ad6368a,0xbb4f5c06,0xbabde80a,0xbb1c858a,0xbb4d96ba,0xbb8c19ed,0xbb4dee03,0x3a9fb774,0x3bc16f23,0x3c1a883d,0x3c720c75,0x3c68b94c,0x3c471dd2,0x39c9da0d,0x3c29ebf4,0x3c82d3f4,0x3ccf700f,0xbb94bfd0,0xbc9a8bfd,0xbcf1ed45,0xbc5e28f3, +0xbc4591ac,0xbcb49b47,0xbc197eaa,0xbb6423d8,0xbb03eb99,0x3bea3943,0x3bfc6b35,0x38adaefc,0xbb089317,0xbba71f6e,0xbb0abdcb,0xbba83039,0xbbcf1f44,0xbb114340,0xbc070284,0xbc229e67,0xbbfc4d3e,0xbbd7e2ea,0xbbc7a7a3,0xbbfbd757,0xbba58991,0xbb82e552,0xba754625,0xba302f28,0x3b528ace, +0x3c3b1d68,0x3c8de571,0x3ca45f12,0x3c917e4b,0x3cb2d3c1,0x3c66e5a2,0xb9e69772,0xbbb1d151,0xbb95d77a,0x398b3c92,0xbb8313ec,0x3ce2afd6,0x3ca0fff7,0x3c6a5730,0x3c1e8b5f,0x3c27998e,0x3ba934ec,0x3b665ed6,0x3b648e71,0x3b11c142,0x3b875639,0x3b92b7ab,0x3aa6bae6,0xbb923fed,0xbbf65b49, +0xbbbbb00f,0xbb824a65,0xbb556d67,0x3a0ddb59,0x3b130297,0x3b3926bc,0x3b8da2cd,0x3baabcb2,0x3b5cd53a,0x3b3e8d70,0xb9160667,0xbb2298c8,0xbbf8756e,0xbb988d40,0xbb163019,0x3c174225,0x3c7c2a7a,0x3ceccd8e,0x3ca870e6,0x3caad46a,0x3ce699b4,0x3ce68514,0xbc303408,0xbc480815,0xbc9defab, +0xbcb4b649,0xbcb8d5cf,0xbc950a89,0xbc750d0e,0xbc44f917,0xbc649e1e,0xbc5c4608,0xbc168c4c,0xbc1539ec,0xbbf15c71,0xbbf6718a,0xbc208fcd,0xbc1b3412,0xbc143f70,0xbb0ab82b,0x3afccad7,0x3b81b45d,0x3b92c602,0x3bafd07a,0x3bd0f1ca,0x3b8c79dd,0x3b75129c,0x3b3ee8d6,0x3bb9ed9f,0x3be9377d, +0x3bf4bb1e,0x3bbca167,0x3b922b8c,0x3b408dd7,0x3a8fa629,0xbab5f9f9,0xbbc54257,0xbc076381,0xbb965054,0xbb769081,0xbc2ec588,0xbc7f3dbc,0xbca660e8,0xbc99d628,0xbca68fa2,0xbc8e86fe,0xbc8dad94,0xbc80d8f9,0xbc816820,0xbc4f8cba,0xbc44ba0a,0xbc085d33,0xbc13906a,0xbc0187a3,0xbbf08926, +0xbb1859db,0x3ad39b84,0x3bc990dd,0x3bc08758,0x3bc70e86,0x3bd6d813,0x3bb755c0,0x3ba42aeb,0x3b928b02,0x3bbb94b3,0x3bc5e16d,0x3bf579fe,0x3be26eab,0x3bde6cd3,0x3bc670c3,0x3b38bfdd,0xb98c6fa8,0xbafd9875,0xbb26b8f8,0xbb1850ac,0xbb582fa8,0xbb9b9d09,0xbbcb9e5c,0xbc0e5e1f,0xbc2dbed7, +0xbc59daf8,0xbc8b36eb,0xbc83e4c5,0xbc62cede,0xbc77b514,0xbc23f2cd,0xbc22f526,0xbbed156e,0xbbee7961,0xbbc94a1d,0xbbc5d497,0xbb3cdc60,0x38dce2fd,0x3b69c901,0x3b505c47,0x3b601538,0x3b7c6c30,0x3b6fb4c4,0x3b75277d,0x3b537bec,0x3b5c7389,0x3b5fb5ed,0x3b5df390,0x3b26bc8a,0x3b149db0, +0x3b1dbb86,0x3af217bb,0x3ad725d0,0x3a2cb1c0,0xbaa29bb7,0xbab3e42a,0xb993d7e4,0xbb23bdd0,0xbb35f46a,0xbb5b6ad5,0xbb24d8e8,0xbade2e2a,0xba5b7921,0xba02aaf6,0xbae705a7,0xbad4864e,0xbb49ffd2,0xbb585808,0xbb8b2c64,0xbb681c25,0xbb27234a,0xbb1e0cd5,0xbaaf2341,0xbb2400b4,0xba283a9c, +0xba870971,0xbab5a372,0xbafb8916,0xbb10ca4f,0xbb20e4bf,0xbb28906f,0xbb4725c0,0xbb7920df,0xbb7e7ae7,0xbb8f435d,0xbb9839b5,0xbbb5be51,0xbba099f1,0xbb9bc5c1,0xbb72a2b6,0xbb1bcce6,0xba2674f9,0xb9bb6411,0xba6eb4f7,0xbaae934c,0xbb15327c,0xbad8afb0,0xbb4a853b,0xbb9b37da,0xbb9c5955, +0xbb8f5eeb,0xbb863f13,0xbb7b5ad4,0xbb68f811,0xbb5ce844,0xbafb6009,0xbab14370,0xbb332e4b,0xbacf99bd,0xba244cd0,0x391181d7,0xb93ad15e,0xb914e724,0xb879f2db,0xb7d86cbe,0xb89d8655,0xb900151e,0xb919f209,0xb9281745,0xb9b271fb,0xb9daecf9,0xb9fbcd3d,0xba0e6bb6,0xb975accc,0xb96c8e0d, +0xb95ebf4b,0xb9dba9e0,0xba7ed390,0xbab68f9c,0xba5b344b,0xba543a00,0xba1311c8,0xba20c832,0xbaa48d20,0xb9bf8e27,0xb9b01418,0xb9cacb28,0xba3c21f0,0xba36b4ce,0x38d76fcd,0xba4092f5,0xba75a243,0xba0a2935,0xba74d05c,0xbaa5e040,0xbb25ff1c,0xbb0144bf,0xbadfdab2,0xbaae0356,0xbace8b2f, +0xbad433ea,0xbae09e3b,0xbaebb89d,0xbabb7002,0xba0820a5,0xb91e12bd,0x378d83ee,0xb9312ad0,0xba206f13,0xba8170d2,0xbabf5bdd,0xbab3aa24,0xba6d3b96,0xb9d7349f,0xba2f2bda,0xb9670e6a,0x38e95733,0x3a25dc3c,0x3a86316b,0xba85406e,0x3a393231,0x3a2999db,0x3a94e392,0x3abcc8e1,0x3b019773, +0x3b501a23,0x3917cdc5,0xba31d3bf,0x3a3d0e4b,0xbaa234ea,0xbb0e6901,0xbba3590d,0xbb6f38c0,0xbb4ea9a7,0xbb0f46f5,0xbb599d69,0xbb7ff582,0xbb8caded,0xbb5e7eaf,0xbaf206ef,0x387e8ac1,0x3b1d7426,0x3b2ec631,0x3a70a725,0x39b24dda,0xba8e3e49,0xbb4d602c,0xbb845417,0xbb969b22,0xbb4c26d4, +0xbae8abd7,0x3934be25,0xb9fc959a,0x3afe4d96,0x3b0ed2c4,0xbaa82164,0x3b13e531,0x3b5c59cd,0x3b84075c,0x3b533b98,0x3b57119b,0x3bf4f50f,0x3acd032f,0x3a78583b,0x3b36724e,0xba7fb6ef,0xbb306c41,0xbc095be3,0xbbbdb522,0xbbae4e2a,0xbb7af7fd,0xbbc242ec,0xbbd5654b,0xbbdcfb09,0xbbd40c87, +0xbb71c8e7,0x3acd0fc2,0x3bad42a6,0x3bba6d69,0x3b4ee087,0x3ab3594e,0xbad999e3,0xbba43669,0xbbb769e0,0xbb61334e,0xb972115a,0xba017235,0x3b0c635e,0x3b15e172,0x3b9acaad,0x3bb1c2bd,0xbae89821,0x3b9bc30a,0x3bac6807,0x3bbda40d,0x3c2b1505,0x3c4b2b29,0x3c80a08f,0x3b9ceeb2,0x3b06b297, +0x3c013e9e,0xbaf0dba3,0xbb55d185,0xbc272dc8,0xbbf6076d,0xbbce6fc3,0xbb854818,0xbc095dfb,0xbc22c435,0xbc26a471,0xbc15b1d3,0xbb9257bc,0x3b76a4dd,0x3c195917,0x3c2b74bb,0x3b95aed3,0x3b8db6a1,0xba9cb572,0xbbee316c,0xbc1be682,0xbc26582a,0xbba49737,0xbad86e5a,0x3b07f477,0xb9400ce9, +0x3b923261,0x3b7ab242,0xbbcc48a5,0x3bb50b50,0x3c3c9c1e,0x3c21a542,0x3c58743f,0x3c846e47,0x3c94181d,0x3bf7e22a,0x3bde5ece,0x3c2d9a41,0xbace2431,0xbb8ab3ec,0xbc264f26,0xbc052621,0xbbf40f1e,0xbbccddcd,0xbc38d19c,0xbc4e8356,0xbc57c01a,0xbc3fbe90,0xbbb51808,0x3baad5f2,0x3c7310cc, +0x3c6c1c7a,0x3bfba569,0x3b7f513d,0xbb109f97,0xbc11279f,0xbc2615bc,0xbb208394,0x3b76aed3,0x3b2dd349,0xbbdcbb47,0xbb7fda36,0x3c0d568b,0x3c86cc62,0x3cced4ca,0xbb869014,0xbc89ec6a,0xbc7f88ac,0xbc0401b6,0x3ad1600c,0xb9931c6a,0x3c761f8b,0x3c51b7c0,0xbc1d0772,0x3bcb1d6e,0x3bd49292, +0xba8b5d29,0xbaba14cc,0xbb27c14d,0xb89366dd,0x3b294399,0x3b94153f,0x3b8fd835,0x3b3ddb6f,0xbb6a0a7d,0xbc7ea78a,0xbcc65574,0xbc899fdf,0x3c82ae98,0x3c22593f,0x3c2d76a3,0x3c802fd7,0xbc3bccc4,0xbce45c9d,0xbcd33d1f,0xbc933aff,0xbc2c47d2,0xbc3e496f,0xbca9f9fc,0xbcc5f0e6,0xbd0e575a, +0x3a68a8a3,0x3c90ed0b,0x3c863fa6,0x3bcbb41e,0xbb0a8334,0xbbd94230,0x38b837cf,0x3bbd4629,0x3c05970c,0x3bb9212f,0x3acb9500,0x3b2d7baa,0xbb859dd5,0xbbd4ac27,0xbbbcf2ff,0xbba5217a,0xbba08b4c,0xbbb12f36,0xbc1c8501,0xbc056c23,0xbbd43493,0x3c47158f,0x3c3d0074,0x3b1276df,0xbbea50ee, +0xbbe72fdf,0x3c2879aa,0x3c72f9d9,0x3d00d6c0,0x3d439d83,0x3c09197f,0xbc1ac8ea,0x3cf6d14b,0xbb2c65d6,0xbc5f41b0,0xbc5fb691,0xbbb5dfdf,0x3b74c829,0x3b67141c,0x3b8a2ccb,0x3b82b328,0xbb5bd3a0,0xbb1cb4b0,0xbaa90558,0x3b5e8445,0x3b96dc86,0x3b98d551,0x3b895010,0x39cf338d,0x3b082ab3, +0x3a67758e,0xb9fd9a73,0x3ab46b9d,0x3ba4f9ce,0x3b683d26,0x3baf9d22,0x3b25ea97,0x3bab05f1,0x3bd63d81,0x3b8564dc,0xbaa750cb,0x3b80d4dd,0x3d1af74d,0xbc902842,0xbcfa9fd9,0xbc96b099,0xbcbd6dc9,0xbc2bbf96,0x3be3b123,0xbbe32406,0xbc4a8579,0xba020153,0xbc3efa24,0xbc0ac021,0xbb4d9938, +0x3b4892bb,0x3b7db91e,0x3990b585,0xbaec8418,0xbb76c574,0xbaa2180c,0xba487eec,0x3a9910a1,0xbb0bdb12,0xb9ae9dd5,0xba281498,0xba06d4e4,0xbb5976d0,0xbb19687f,0x3b42743b,0x3bae7418,0x3c139cb5,0x3c3d1257,0x3c1e8799,0x3c258555,0x3c5911e0,0x3c348e20,0x3c5ee63a,0x3d1776ff,0xbc994423, +0xbd115330,0xbcef310f,0xbca1e99e,0xbbbc007c,0xbc7e49e4,0x398b703a,0x3bb78f78,0x3b3d765b,0x3bd87d76,0x3bc436d2,0x3b3c6880,0x3922c142,0xbb842780,0xbb6cff89,0xbb517adc,0xbb5de5f0,0xbb36f836,0xbbc432bf,0xbbffc6db,0xbc0c3809,0xbc1cae5e,0xbc240fb8,0xbc002f60,0xbc01c293,0xbc02f678, +0xbbd0ae87,0xbb85cde7,0x3b8b9a93,0x3c4a9971,0x3c9c21d3,0x3caac237,0x3caadfb3,0x3c708efe,0x3be859b8,0x3b8d3f59,0x3b781d81,0x3bd607f1,0xbacb4749,0x3a810fb4,0x3c7e27a0,0x3b3f08dd,0x3ba18e4a,0x3b4c4546,0x3bee5d01,0x3bca1869,0x3b9308da,0x3aa4c0de,0x3ab80cc5,0x3b9654f4,0x3bb1f60a, +0x3be64f90,0x3a271aa4,0xbbc837c8,0xbbd8838f,0xbbe8d402,0xbbd2ad15,0xbaa9ab96,0x3b150267,0x3b8321b5,0x3b619302,0x3b8a44fc,0x3b9a3984,0x3b597cba,0xb9806bdb,0xbb1e8282,0xbb349235,0x3b488c54,0x3c2e2ae1,0x3c86de93,0x3c9c579c,0x3ce171cb,0x3ca6ac65,0x3cab6344,0x3ce691be,0x3cbb873e, +0xbb830c19,0xbc3b7528,0xbc4db0a4,0xbc5fff8e,0xbc4ff6c1,0xbbd0b18d,0xbb11ba80,0xbb473c97,0xbb926f3f,0xbbcb395e,0xbb9240d5,0xbbe3c767,0xbbde5044,0xbbf2cc12,0xbbe32306,0xbbf0fe6a,0xbc22289d,0xbbdf06c1,0xbb596941,0x3aa1e469,0x3b1fb482,0x3b8cd09a,0x3b9f6824,0x3ba00c77,0x3bbc0f50, +0x3b83ac54,0x3b9bb8a3,0x3bb9a706,0x3bf189c4,0x3bc85615,0x3ba54ef7,0x3b5405df,0x3ba18d9e,0x3ba54272,0x3a4b42aa,0xba0be3bf,0xbbaa768b,0xbbdbf5b6,0xbc39c534,0xbc70dd82,0xbca3f40a,0xbc80b022,0xbc8382d3,0xbc563758,0xbc46bc78,0xbc2b64d3,0xbc1ed607,0xbc1321be,0xbc0b8601,0xbbd84017, +0xbbd31efd,0xbbd9198a,0xbbf58a71,0xbb993170,0xbacc596f,0x3afbe065,0x3b267afc,0x3b90c53e,0x3ba20357,0x3bbc173f,0x3bae2797,0x3b9a4533,0x3bac074a,0x3ba78803,0x3bdef01a,0x3bea5c09,0x3bf25e86,0x3bc578bb,0x3ab7fda7,0xbb26738d,0xbb6faa96,0xbb824b76,0xbb7e4a5f,0xbb7ce037,0xbbcf2e28, +0xbc0f7230,0xbc4833fd,0xbc5ae4e9,0xbc6c60fd,0xbc82d51e,0xbc720ede,0xbc42e3fc,0xbc42f423,0xbbf20674,0xbbda1ad9,0xbb9c31d7,0xbba19f01,0xbb90b95c,0xbb860538,0xbacdef5d,0x39800a44,0x3af079a2,0x3b10a2bb,0x3b613bc4,0x3b997ad2,0x3b9af0b1,0x3bb7f244,0x3bcef257,0x3bbdd04c,0x3bbe81d8, +0x3ba24204,0x3b46a1b4,0x3ab261cb,0x3a6d2a02,0x39a58b80,0x396c1087,0xbabe6de1,0xbb3379b8,0x397cf67e,0x398b88d9,0xb97df7a3,0xb9f010c0,0xb8609779,0xb98328f2,0xba147049,0xbaa462eb,0xba4ee8e2,0xbacc3832,0xbab81088,0xbb24b037,0xbb3dc56b,0xbb42735e,0xbad01e8c,0xb9694eaf,0x3a2f06f6, +0x3aafd42a,0x3afed2cf,0x3b4f30b5,0x3b310634,0x3af485a2,0x3a87466e,0x3a1b5236,0xb9afa2da,0xbab20b24,0xbaba0278,0xbb0de197,0xbad9daba,0xba9c4ef4,0xb9f274be,0xba563024,0xba8ab1b5,0xbaa629d3,0xba4e4501,0xb8e082d9,0xbaa3fa52,0xba914e4f,0xba95cbf2,0xbab0ea1f,0xbae34b2e,0xbb487ef5, +0xbb5b9621,0xbb74582c,0xbb594353,0xbb3e945d,0xbb1f16ef,0xbaf32bd6,0xba9df223,0xba840b0c,0xba82b885,0xba965b76,0xba31f5b3,0xb9f99913,0xb9cc128a,0xb9aa722c,0xba01ba67,0xb9b9973d,0xb9619f2c,0xb89502d7,0x38df7df3,0x3971f9d0,0x39c28c78,0x392ad205,0xb9193bd8,0xba238fc0,0xba89a6a0, +0xbaa94fc5,0xba80908b,0xba5b9118,0xba73b76b,0xba9b6372,0xbaaec17a,0xba03acfb,0x398b4709,0x38c199fe,0x3971d2a0,0x390eb2f8,0xb9065c9f,0x3808fea9,0x370f441b,0x39d24cf7,0xb9940fd0,0xb9eaed56,0x3784277e,0xb9959a0a,0xb9df1d98,0xb9f1995e,0xb963aa9d,0xb9bec7c1,0xbae234de,0xbaa5cba5, +0xba9eb8b5,0xba8f0172,0xba98f1c8,0xba8f1831,0xba8f51d7,0xba4ee296,0xb9a34e52,0x3a3f4394,0x3a1310d6,0x3a0ec04a,0x39190751,0xb8c0df5c,0xb9b4cbf5,0xba51d625,0xba58540f,0xb9d9cc72,0x3984714f,0x3986126a,0x3a8172e1,0x395087d7,0x3aa48daa,0x3adef1f1,0x3a948695,0x3a924eb1,0x3a41f0d1, +0x3af6d9e0,0x39493b7c,0x3a49f7d7,0x3ace75dd,0x3a09e3cf,0x39a6778e,0x398bdca3,0x3a0c238e,0xb8c48f73,0xbb683a88,0xbb30d7fd,0xbb36c8ce,0xbb244131,0xbb535a6a,0xbb607aa9,0xbb585eac,0xbad3220d,0x39c5477c,0x3b579ce4,0x3b33b35e,0x3b12ace0,0x3a493ce9,0x3ab251cf,0x390009fc,0xbb33c16a, +0xbb72ef56,0xbb73e887,0xbad110be,0xb58829c8,0x3b631357,0x3ab55062,0x3b4f5107,0x3b4ce7a8,0x3b093570,0x3b127d10,0x3b20112a,0x3b98c794,0x3aefe319,0x3a214485,0x3b79772f,0x3ab46278,0x3adf31b3,0x3a80a9b3,0x3a8ae810,0xb8be0322,0xbbc8d8f0,0xbba09a75,0xbbb1b20d,0xbba91767,0xbbd032af, +0xbbc5bcb3,0xbbb57139,0xbb50c412,0x38be8749,0x3be01d4e,0x3bc7d3de,0x3bada563,0x3b108f55,0x3b0b089e,0xb9081ec9,0xbb7ce1e0,0xbb9d05c7,0xbb37ee95,0x3ac9fd9a,0x3b235e58,0x3b8a5b5f,0x3a9cefc4,0x3ba1c57d,0x3bc390af,0x3b482235,0x3ba577e6,0x3b87b276,0x3bf0f345,0x3bc08eea,0x3c042790, +0x3c38bb84,0x3b91638d,0x3b70db5a,0x3b9fd707,0x3b06a16b,0x3a947a98,0xbc08a339,0xbbd2cb12,0xbbe2871b,0xbbd89c7d,0xbc1bec3b,0xbc1f5005,0xbc1203b1,0xbb8d3a52,0x3ac30549,0x3c4c6996,0x3c14e768,0x3c0460ec,0x3b1d2c74,0x3bbaab42,0x3a82050c,0xbbeb75d4,0xbc16c4db,0xbc0f1ef5,0xbae76e3d, +0x3b11b8c1,0x3c20d359,0x3b6d61a3,0x3be08c65,0x3bc9a066,0x3a0c9084,0x3b8ef3ef,0x3c0dcd8e,0x3c44f9b6,0x3c476165,0x3c6a6e18,0x3c847f4b,0x3bd87e88,0x3bc86665,0x3c03b582,0x3ae7df9e,0xba07be50,0xbc1a84d6,0xbc01c8d2,0xbc1b54d0,0xbc235253,0xbc5716ff,0xbc4cd01b,0xbc38bef4,0xbbc777b4, +0x3b00f385,0x3c7cf619,0x3c8694f7,0x3c3f9cf5,0x3b95e819,0x3b957f4c,0x39c3bee6,0xbbccb2e7,0xbc0a3fc9,0xbad1b0ac,0x3bd72331,0x3c0d6053,0xbc8ba701,0xbc6a7925,0xbb9b2c7c,0x3b8430f9,0x3c99d433,0x3ba87b1b,0xbbd87305,0xbc842017,0xbc5e899a,0xbb53fcf8,0xbb1554d2,0x3c93477c,0x3c8b8b5d, +0xbc112971,0x3ba5a7c5,0x3b7494d1,0x3bb78beb,0x3b08e28c,0x39ba1844,0x3aaca88a,0x3bf82706,0x3c0726ec,0x3bc18a2c,0x3b0687ed,0xbbaa1ef1,0xbc9a5c1f,0xbcb22421,0xbc1ae1d4,0x3cc1ce10,0x3c38f802,0x3c2a69b4,0x3c570ce6,0xbc7bc2b5,0xbce67e5c,0xbcd1f90e,0xbcba1f61,0x3c0dbe61,0x3ba7efd2, +0xbbe3d099,0xbc984f4d,0xbcf9b028,0xbc3ecc83,0x3b5120f6,0x3c3e8d18,0x3c1291c2,0x3b1e1630,0xbc162b8e,0xbb93e038,0x3afb177e,0x3bbbd317,0x3b8b9ac0,0x3a4ae98c,0x39eda4c4,0xbbb43a2c,0xbbfdb914,0xbc16c9e0,0xbbb2336c,0xbbaadcf6,0xbbaf5348,0xbc1d4990,0xbbd4b6d5,0xba451b88,0x3c9be23f, +0x3c7ac854,0xba86a672,0xbbb8abf3,0xbb85f890,0x3c49a096,0x3cb6bd4e,0x3d07acaf,0x3cfbbedc,0x3c85d60f,0xbcaa11c5,0x3a79e5a6,0xbbb0b5eb,0xbc3479b6,0xbc46f4e4,0xbb8f7b34,0x3b401ddf,0xbb8d20f3,0x3972f613,0x3aa22dae,0xbaeb3943,0xbb7e5433,0xbb596a1a,0x3b12f48e,0x3a51d697,0x3b0746ff, +0x3b75a562,0xb8a893ac,0x3ab990e9,0xbae238bb,0x3ab35882,0x3b8cc6c3,0x3bc536b2,0x3b45d185,0x3b4e42e9,0xba2fe56a,0x3ba99735,0x3c04d4e9,0x3b9d2d04,0x3bf9a275,0x3bfb2b80,0x3c4ea3f2,0xbc92f3d3,0xbcdd391a,0xbc5d218a,0xbcd4f692,0xbcab98d9,0xbc4414b6,0xbc170efe,0xbc1980e0,0x3ad45a5f, +0xbb6a3647,0xbb7e45ab,0xbc2a0938,0xbb539326,0xba8281db,0x3a88ce26,0xba4bc8a1,0xbb10e45f,0xbaf9c33a,0xbac78612,0xb9a467f5,0xba9e5aa0,0xbab509c1,0xba9c3a77,0xbac9c824,0xbab92f5e,0x3a62a878,0x3b635c37,0x3bde9d1b,0x3c10b84c,0x3c04c6d3,0x3bbf0fdb,0x3c0a7efb,0x3c84d325,0x3c884d5f, +0x3c569c8c,0x3c342106,0xbca42381,0xbcf863ca,0xbc6955c6,0xbcb1e38b,0x3c13ab55,0x3b90d873,0x3bc8c32e,0x3c102a37,0x3c28314f,0x3ba31dea,0x3b4d99f0,0x3ba8636f,0x3ae4db39,0xbaf91ff5,0xbb8c7ef2,0xba9518b9,0xb9821413,0xbb1ea221,0xbb308475,0xbba017e0,0xbc1b424f,0xbc255df0,0xbc2e5222, +0xbc063100,0xbc0fe8bb,0xbc11a124,0xbbffde1d,0xbb58538e,0x3b87bc68,0x3c4de105,0x3c89feaa,0x3c8f4612,0x3c94e482,0x3bac05ec,0x3a683930,0x3bd5f77c,0x3c296cad,0x3c7bbb11,0x3b93d2f8,0x3c2d6222,0xbc433bd7,0xbc7c360c,0xbbef2240,0xbb2edae4,0x3a23c794,0x3bb8a0d8,0x3bb7a78b,0x3aff3394, +0x3b4119b0,0x3bb7f6c0,0x3b90a2c1,0x3becf0ba,0x3b15c07d,0xbb1db8f2,0xbbe403c6,0xbc193c90,0xbc009442,0xbb9d9083,0xba26a72c,0x3b2703c0,0x3b20431e,0x3b84e752,0x3b69e1b4,0x3b91a52e,0x3b80c931,0x3b52f28f,0x3bf85b6a,0x3c4dac75,0x3ca7ced1,0x3cb47ca0,0x3caf2505,0x3cbd3f9d,0x3ca1a896, +0x3c5b2ec0,0x3bf3928f,0xbb127c99,0x3bffcfec,0xbab900c0,0xbacab8e7,0xba113873,0x3b4228af,0x3bc2d9d2,0x3c0ee21a,0x3bbbcc9e,0x3ba1453c,0x3ad8083d,0x381ae5d5,0xbb706e88,0xbbb873f8,0xbbe3b9e6,0xbbc5dcb2,0xbbd0d0b9,0xbbfc0d36,0xbc134580,0xbbea4a18,0xbb729819,0xba54a515,0x3af7c406, +0x3b0fd96f,0x3b87c956,0x3baafc64,0x3b857189,0x3b4f5191,0x3b6f1f3f,0x3ba106cd,0x3b8ac2b7,0x3b8a856c,0x3ba7f961,0x3bf8d5f6,0x3c3714d5,0x3c3fc787,0x3c38c8c4,0xbb8393c2,0xbc0798cd,0xbc1733f3,0xbc278704,0xbc674668,0xbc2dcf97,0xbc2b900c,0xbc0500d3,0xbbe309d5,0xbbbed7db,0xbbad1309, +0xbbd1faa2,0xbbdf4432,0xbbe76625,0xbbca08b7,0xbbcb58f7,0xbbc69687,0xbbc01f99,0xbb965082,0xbb2db0f2,0xba70971b,0x3aef1bd9,0x3b475e2a,0x3b6a8b4a,0x3b386d24,0x3afb0288,0x3ae9f87d,0x3abae3e4,0x3b2c7cbb,0x3b7152bd,0x3b913df4,0x3b9428ce,0x3b1a296b,0x37b7e8af,0xb951b07f,0xbb4b5806, +0xbbadcbe1,0xbbbafc73,0xbc0bf71a,0xbc3b8040,0xbc79e2f3,0xbc7626b9,0xbc6d2acc,0xbc6cd25e,0xbc600095,0xbc372ebd,0xbc2c74ad,0xbbf07c71,0xbbd57d7a,0xbbb54e97,0xbb975dbe,0xbb8e9d93,0xbb77167e,0xbb1eb096,0xba89afee,0xbacf228d,0xb9db5a93,0x3ac28b34,0x3b6dfa85,0x3b55aa11,0x3b783768, +0x3b926fc3,0x3b924563,0x3b9ef670,0x3b88a3c4,0x3b333850,0x3a67f0ec,0xb978a02f,0xba956bbb,0xbac822e9,0xbb3196cb,0xbb692bbb,0xba3139fb,0xbac515cc,0xbaa6eb7e,0xba20549c,0x3a45a755,0xbaabde69,0xbb245794,0xbb923d3e,0xbb72dbe4,0xbb80adde,0xbb73d7f7,0xbb8e6577,0xbb96bcac,0xbb8c98dd, +0xbb4a53d3,0xbafb374d,0xba0ca3cb,0xb9cef72e,0x3abc2e6c,0x3aa3da88,0x3aaed4ea,0x3a622d8b,0x39f01ff2,0x3a5a93f5,0x3a5dcda8,0x3a1ac055,0x3a0879e3,0x397b1b1e,0x3a27161e,0x3accb548,0x3b2cd43b,0x3b55fc21,0x3b025475,0x3ac101f6,0x39d22814,0xb9c48508,0xbb65f5ca,0xbb73f49f,0xbb7e1f36, +0xbb903517,0xbb9716f5,0xbbcb2418,0xbbbbd711,0xbbb75c2d,0xbba3094b,0xbb999a50,0xbb88c8aa,0xbb6804f0,0xbb3793ac,0xbb275ec7,0xbb40bb4c,0xbb5064e9,0xbb0718b0,0xbb1298df,0xbb2033fc,0xbb230e94,0xbb198708,0xbb0c7225,0xbafef034,0xbaf26de7,0xbae38177,0xbac821ea,0xbab33ef7,0xbac17004, +0xbad45826,0xbb08ae9a,0xbb262deb,0xbb38588d,0xbb4473bf,0xbb3c569a,0xbb4cc900,0xbb5f2a7c,0xbb9f5b46,0x3912141c,0x3a7c88a2,0x3a20145d,0x3a0abd46,0x39c92312,0x39ed0e1b,0x388706f1,0xb81e19d9,0x3a24c64d,0xb95a6e88,0xba04759a,0xba0bcd39,0xb91df30e,0xb8d5c4c7,0xb9b0d495,0x39860c89, +0x399c3927,0xba4b6d46,0xba25c1dc,0xba4a8cff,0xba53e0cf,0xba3d8c41,0xba0c4934,0xb9f08f6e,0x393230ac,0x3a347528,0x3ad84356,0x3a877db5,0x3a4fe199,0x39296720,0x397fd5a0,0x394279fe,0xb9880dee,0xb978790a,0x381ba18f,0x3a3af8c1,0x3a5b574f,0x3acf14f6,0xb8057699,0x3aaa9a54,0x3aed8f9f, +0x3b23cefb,0x3a55ec5d,0x38884651,0x3ad35b1f,0xbabc14d1,0xba8e414b,0xba7593ec,0x39b94d91,0x3a80a2a3,0x393c64b4,0x3af91d51,0x3ad2c979,0xbaa84457,0xbad93406,0xbb1cb052,0xbb24ab89,0xbb3206f6,0xbb26c727,0xbb044d7c,0x39906f6a,0x3b186a54,0x3bb2a8bd,0x3b36dc58,0x3ae1422f,0x399ac6d9, +0x3b0cb78f,0x3aabf5af,0xbb14fb03,0xbb23fb8c,0xbafc37cc,0x39b6eb0e,0x3ac759ed,0x3ba5bb5e,0x3b0e3f14,0x3b3f09f8,0x3b2598b9,0x3b84fada,0x3a53cdfb,0x3990d5f4,0x3b6471ab,0xba0cc979,0xbb280aa9,0xbaab8b55,0x3a016db1,0x3b0606c9,0x3956b5bc,0x3b2de0e5,0x3b0bc212,0xbb0ed8bf,0xbb5b4d7e, +0xbba0c770,0xbbb4a6bc,0xbbb943e3,0xbb93f519,0xbb66b04a,0x3a00c1ff,0x3b76f4dd,0x3c29f2f2,0x3bc80d6c,0x3b91239c,0x3a20a090,0x3b2a307a,0x3abca1b5,0xbb2b18ab,0xbb2449d7,0xba819ea0,0x3b582432,0x3b8ad4f6,0x3b96496e,0xb9af5b28,0x3b78c7ad,0x3baf2ba0,0x3bdd98b6,0x3b6e237c,0x3ab7c6f6, +0x3bc910ea,0xb82f266b,0x3af7eba0,0x3b260b58,0x3b58da33,0x3baa90d6,0x3b444455,0x3bb4f84b,0x3ba66d4b,0xbb5182ba,0xbb925101,0xbbd95e98,0xbbfb7f1b,0xbc0f78bb,0xbbfff14b,0xbbd44196,0x3a9e3122,0x3be698d1,0x3c8ff2e6,0x3c034ffe,0x3bbf120b,0x38548411,0x3bd9cced,0x3b6aca3e,0xbbdd703f, +0xbbbe83e8,0xbb89f42f,0x3b2d3d58,0x3bad0260,0x3c593baa,0x3bad9802,0x3bd28ced,0x3baa1705,0x3bb65e10,0x3ac4ac91,0x3b80d757,0x3c2c9941,0x3c0c52ef,0x3c1d32c2,0x3c103bf4,0x3bc77486,0x3be44d2f,0x3bc3c4ee,0x3bac94a5,0x3b678b09,0xbba55a31,0xbbb5a75c,0xbc1f0437,0xbc3c29c6,0xbc495907, +0xbc23a533,0xbbf72c97,0x3a2436a6,0x3c15eb34,0x3cb3eae0,0x3c7ef8a0,0x3c0a44bb,0x3a5fae14,0x3ba03269,0x3b41ba18,0xbb6cec67,0xbb6752fb,0x3ace769e,0x3c134b40,0x3c377f4f,0xbcbc270e,0xbca10f85,0xbc3f96fe,0xbb4c5e26,0x3c41b37c,0x3c1399cc,0x397ee0e2,0xbc79b925,0xbc731176,0xbb9e7b81, +0xba8ece6b,0x3c899ada,0x3c6fdac1,0xbbace517,0x3b176451,0x39d3d677,0x3c361f9c,0x3c010a17,0x3befae73,0x3c1e12a9,0x3c7fb0bb,0x3c49b7ca,0x3bfb23d3,0xbadfc757,0xbc1d6485,0xbcaf0b56,0xbc907c37,0xbad2edf5,0x3cd9e2c0,0x3c5e4e5c,0x3c319213,0x3c3865ef,0xbc6ea5d2,0xbcbd6172,0xbcaa37bb, +0xbcc0f98b,0x3ca03fcd,0x3c939b65,0x3b6f3999,0xbc593500,0xbccf6b8c,0xbca8a8cf,0xbc150af2,0x3b9f61d9,0x3c05b15d,0x3b9a1b6b,0xbc010fe7,0xbbf55de0,0xbae6d516,0x3b8f617f,0x3ab99ccd,0xba688c36,0xbb3c5294,0xbb369ac9,0xbb617415,0xbbf5629a,0xbb560d86,0xbb92d475,0xbb9f3ac6,0xbbfc58ab, +0xbb318172,0x3c275e47,0x3ca61d31,0x3c4aac37,0xbb6ce8e0,0xbbd49738,0xbb0b6523,0x3c8164bc,0x3ccf6d25,0x3ce52dd9,0x3c2c72c3,0x3c790a8c,0xbcd24c32,0xbd070886,0xbbb0bdf4,0xba85fab3,0xbc7abee7,0xbb0e72a6,0x3b0ce426,0xbbf12dcb,0xbad470fb,0xba09c5c3,0xb9c4c996,0xbb441bc8,0xbb5be337, +0xb92f4b6e,0xbb1c451a,0xba0f3cc9,0x3b3e3645,0x3a0d71be,0x3986448f,0xbb79e599,0x3b1bee0d,0x3b97bc39,0x3b8671d9,0x3afea9d2,0x3aa72470,0x398ed835,0x3b9839b6,0x3bd4eaac,0xba57e268,0x3c84ec52,0x3c616e81,0xbc6084e5,0xbc0f96c6,0xbc611a9d,0xbc46e601,0xbcaf4480,0xbcc7e178,0xbce600a4, +0xbbdf124a,0xbac532a5,0xba0082f9,0x3b8a6985,0x3aa0b57e,0xbc38b311,0xbbca153b,0xbb59f4c8,0x39e3bb4b,0x3a71fe53,0xb9be8e3a,0xbb52c421,0xbad2dc84,0xba9d1a4f,0x39642d55,0xbb4944b9,0xbb6a72cb,0xbb9eed97,0xba8c74f2,0x3afea9ea,0x3b25d096,0x3bc93cd1,0x3bdfe04e,0x3ba9eb11,0x3b5cac67, +0x3bb563cd,0x3c0d44e3,0x3ca76b1b,0x3c5d4768,0xbc91d0da,0xbc7ae6b6,0xbc96a43c,0xbbc449bc,0xbc8b8bce,0x3cc9d6db,0x3cf1a386,0x3c7a9103,0x3c325247,0x3c5b946d,0x3b23cebb,0x3a9f414a,0x3bd18ffc,0x3b44aa69,0x3a46af30,0xbb4d88d1,0xbaa12a84,0x398b24a7,0xb9df1dea,0xba4efa7f,0xbb4cf4bb, +0xbc1651fb,0xbc191ef9,0xbc1ed0f5,0xbc136536,0xbc0030d0,0xbbf2eb4d,0xbbc137aa,0x396f6047,0x3bb7e082,0x3c5bea0a,0x3c61f77e,0x3c448489,0x3c0f855a,0xbbb3e7e3,0xbbc81ba8,0x3bae72f1,0x3be08275,0x3c420e11,0x3beb9436,0x3c86a628,0xbcf9597b,0xbcd138b1,0xbc773496,0xbb8e56cd,0xbb16100a, +0x3b62b39e,0x3b807993,0x3b3aaf3d,0x3b84e073,0x3bbd29a3,0x3b40c20e,0x3b828063,0x3aaeaf47,0x3aa90b11,0xbbd38d10,0xbc20b693,0xbc0a0df2,0xbc100aa6,0xbbc2c5bf,0xbb39773d,0xba6acb0d,0x3b19368a,0x3b16fa12,0x3ba03a9c,0x3bf78a48,0x3c26a3a3,0x3c6bf764,0x3c8d351d,0x3cba1c1a,0x3cc06c03, +0x3ca7eaf8,0x3c71e643,0x3c89b3ea,0x3bdba5dc,0xbc14c4fc,0xbca92343,0x3c84050d,0x3c3aa570,0x3c249389,0x3c2244b5,0x3c64fad3,0x3c5e93a3,0x3c6c849f,0x3c443c2a,0x3c359908,0x3bfc7aec,0x3b83fe45,0x39bdca62,0xbb6e11cb,0xbbcfadc8,0xbbd0cb78,0xbbcd8775,0xbbc14956,0xbbfd2dd9,0xbbe7ab84, +0xbbd154d3,0xbb46c0c3,0xba181797,0x39d373a5,0x3b1eadd0,0x3b533728,0x3b0516f9,0x3ab2b44c,0x3b05d768,0x3b1413d1,0x3b38ea10,0x3b869a61,0x3be1e4c6,0x3c0754b8,0x3c473ce2,0x3c7c2503,0x3c901b03,0xbac951d4,0xbbda20f6,0xbbaf8d5c,0xbb94cc27,0xbbed7bed,0xbba38602,0xbb913304,0xbb4413ef, +0xbb198264,0xbb089d8b,0xbb2ec656,0xbb8fc41f,0xbbbedb64,0xbc064eff,0xbbf36330,0xbbedaf6c,0xbbdaf6a3,0xbbe80e0a,0xbbdf5e62,0xbbc515bc,0xbb7259c1,0xbab17f24,0x390d8723,0x39ebaee0,0x380e453b,0xba7073b0,0xbad9b457,0xbb18c52c,0xbb04972e,0xb9388053,0x3a7afcc3,0x3b1bb7bc,0x3b885169, +0x3ba5d774,0x3bb2f982,0x38e3bd1e,0xbbb36486,0xbbeb9651,0xbc1c0ed5,0xbc464f1e,0xbc74d221,0xbc648b42,0xbc515406,0xbc426ddf,0xbc48e054,0xbc30d22a,0xbc2ff10e,0xbc09c123,0xbc030c76,0xbbf711d6,0xbbcf52f2,0xbbd4890a,0xbbcfce14,0xbbb660ac,0xbb9c42d7,0xbba8fcfd,0xbb7b7a3e,0xbb02aa40, +0x38c3e244,0x387a49e7,0x3a0e2401,0x3addd6fd,0x3ab0459c,0x3ac3e078,0x3a19e608,0x3a31ab9a,0x3902a70f,0xb7147127,0xba91b520,0xbb0c2a66,0xbb046530,0xbb56e27a,0xbb88102c,0xbbac5e63,0xbb95e056,0xbb7a8999,0xbb20cf9a,0xbbb0767f,0xbbdb0d9b,0xbc11635c,0xbbf92245,0xbbe92142,0xbbd7cb34, +0xbbe0610a,0xbbe08963,0xbbd365a7,0xbbbac035,0xbb999f6f,0xbb63cbed,0xbb5b1aa1,0xbace3298,0xbb1ee6ed,0xbae52008,0xbae164e0,0xbabdd61a,0xb9fbad3b,0x39ad52c7,0x3a5b2261,0x3a739f5b,0x3ab3fc77,0x3ad2f9f8,0x3b10926c,0x3b257325,0x3b46c9e0,0x3aa180b8,0x3a3fc625,0xbacff81a,0xbb625d45, +0xbba49193,0xbbb7eee6,0xbbc37421,0xbbd633f3,0xbbd8c26e,0xbbfd9ecf,0xbbe9d0c1,0xbbe92ee2,0xbbd992a3,0xbbd8ce10,0xbbcc84eb,0xbbba9af3,0xbba49b34,0xbb9a9061,0xbba0ca30,0xbba57d4e,0xbb8a83d1,0xbb8fa8ff,0xbb928f53,0xbb9320b0,0xbb867373,0xbb7c9a27,0xbb6b3036,0xbb6497d4,0xbb5bab50, +0xbb47cea6,0xbb49129a,0xbb52ed0f,0xbb583670,0xbb6993b2,0xbb6cdcc8,0xbb6db28d,0xbb8aaaf6,0xbb8c7c41,0xbb97d030,0xbb9e74ab,0xbbf6f16b,0x3a915ef4,0x3abfe721,0x3a8decf1,0x3a508372,0x3a270fc0,0x3a93c39e,0x3992588e,0x38a074cf,0x3a5a0ffa,0xb9365c96,0xba068cbe,0xba3dbaa8,0x384da7b2, +0x39952d0d,0x389c7a2a,0x3a4b39c6,0x3a82e0ef,0x39d0220e,0x393135a5,0xb80cdefb,0xb8bfee23,0x38ad1486,0x39c6aa15,0x3a1f6b39,0x3aade8f4,0x3ae5de73,0x3b19db43,0x3ad5efca,0x3a9fef6d,0x39eeee7b,0x3a6d885a,0x3a8238a3,0x39eef217,0x3a302801,0x3a671824,0x3abf58c9,0x3ab3caad,0x3b1105ad, +0x39024b8c,0x3a66f065,0x3acb6405,0x3b735cba,0x39da6f40,0xba1dfa94,0x3aa9732e,0xbb2d479f,0xbb2d90d4,0xbb27d5b5,0xb759a50a,0x3a9a5edb,0x39ede321,0x3b31ed84,0x3b3b5735,0x3aaebdf3,0xb9b8f867,0xbadb6861,0xbaf54c33,0xbac51510,0xba6bb9df,0x39715cc0,0x3b201742,0x3b862471,0x3bd2f874, +0x3b656f40,0x3b210cad,0x3a6ff3bd,0x3b65dc67,0x3b3806a3,0xbaaadc6a,0xba1713f2,0x39bc5e5c,0x3b31a54a,0x3b4a33a9,0x3ba8d4c3,0x3b111484,0x3acc168a,0x3a9abd83,0x3bbc6e1e,0xba68d6fe,0xbb09a5b6,0x3b0de887,0xbb6077c2,0xbbb41995,0xbba0fb11,0xba770916,0x3ac72ff4,0x38d54923,0x3b60f709, +0x3b6cbbeb,0x3b0d6882,0xbab6b486,0xbb6cca77,0xbb927364,0xbb6fc1a4,0xbaebe602,0x3914eb40,0x3b8f9c86,0x3be67d73,0x3c3b2995,0x3bd312ea,0x3b8f98c8,0x393ec06b,0x3b83aeba,0x3b6d2355,0xba9116e1,0x3a2a677c,0x3afc34f8,0x3bb98f65,0x3ba63223,0x3b9e01ac,0xbaaf0e1f,0x3a85b626,0x3b4bc96f, +0x3c1c64b2,0x3a890e4b,0xbb0a6d18,0x3b71ff9e,0xbbbda463,0xbb9d6237,0xbbba259b,0x3a77e81e,0x3ba237f4,0x3aed8cc9,0x3beaab15,0x3bee9da5,0x3b5164a9,0xbb031aad,0xbbb76b1f,0xbbf686c1,0xbbc6642b,0xbb8b02eb,0xbad0cc53,0x3be33ad9,0x3c4166be,0x3c943a13,0x3c06951d,0x3bcd6303,0x3a2b49d2, +0x3c0c5f61,0x3bd6c6f7,0xbbacd976,0xba99e4ac,0x3a82a5ea,0x3bf8e61c,0x3c0135f3,0x3c46a401,0x3ba1717d,0x3b6d64a9,0x3b18ed37,0x3c225cf1,0xbb1bcd64,0xbaed197f,0x3bd37092,0x3b0d2442,0x3b16f2c1,0xba6d742c,0x3b971915,0x3bec203e,0x3b966988,0x3be97f59,0x3bdc7d7a,0x3b0f3d14,0xbb1074e3, +0xbc08af11,0xbc2b890a,0xbc10ee34,0xbba7aec6,0xba403c3b,0x3c00ea07,0x3c76dae8,0x3cbb4d83,0x3c669589,0x3bda45c6,0xba85ed90,0x3be19e27,0x3bd14700,0xba624b62,0x3b26f8d5,0x3bd9048b,0x3c466e63,0x3c36e936,0xbcb70f25,0xbca1ec40,0xbc851f52,0xbc13e3c2,0x3bbab547,0x3c0d8659,0x3b865553, +0xbc1dd6ca,0xbc1fb936,0xbb4fee7f,0xb8b0d6b3,0x3c3017b1,0x3bfd61ac,0x3a59c0c1,0xba977252,0xbb5a612c,0x3c33d59f,0x3c3db22d,0x3c78919f,0x3c9ff972,0x3caa57c7,0x3c632e0c,0x3be8725e,0xbbedf155,0xbc5fb904,0xbca70164,0xbc1a598c,0x3c0bb7af,0x3cf0748c,0x3c8a4034,0x3c2ec6f1,0x3bdba4eb, +0xbc4e06a6,0xbc8aff51,0xbc579f13,0xbc9fea3c,0x3c866fed,0x3ccd0d82,0x3c86a34c,0xbac43c01,0xbca1fc1b,0xbcba277e,0xbc78e3d4,0xbaa496af,0x3b8be309,0x3b598a94,0xbbaa2289,0xbbf4844f,0xbb8d27cc,0x3b5257e1,0xbad1f492,0xbae7b459,0xbb96049d,0x3abcf2db,0x3b0f0dc6,0xbac8dccd,0xba215d52, +0xbb48479b,0xbaf3ff90,0xbb7652bf,0x3b263bdc,0x3ca45ee4,0x3c7e5fc8,0x3b86dc92,0xbc3df6a8,0xbbdbd8b0,0x3adedaba,0x3c91c603,0x3ce32a39,0x3cbe1cc2,0xbb9e29f8,0x3b9cb01c,0xbca5fd8c,0xbd4c9247,0xbc61589c,0x3a3db828,0xbc8d6fb1,0xbb1d292d,0x39a55dfc,0xbb97a691,0xbb096c44,0xbaf5d563, +0x3a2ed080,0xba90f28d,0xbb0e1397,0xbb235146,0xbb7ba78f,0xbb002998,0x3afd3410,0x3b16e0ae,0x3b08f97a,0xba202a14,0x3b3b68f4,0x3b4865b5,0x3b16eb56,0x3975783a,0xba0c7a76,0x3b40cdf8,0x3ac998f9,0x3a8fd186,0xbba04df3,0x3c812bd7,0x3c5d8767,0xbc9e146b,0xbb5e97af,0xbbf20ca3,0xbc353695, +0xbc2527d3,0xbc89faf2,0xbd0ab52a,0xbc2a90ff,0xbb2910ef,0xbb8914c5,0x3be27afe,0x3baea0c8,0xbbdd9f41,0xbbc1b159,0xbb6e80fb,0xb880708b,0x3add731d,0x3a4f78d7,0xbb797c53,0xbaacd93e,0xbaa37aa0,0x3aced498,0xbb20ccfc,0xbb7c36d4,0xbba11a86,0xba847490,0x3aab6c16,0x3b12b186,0x3b845c38, +0x3b846142,0x3ab275b6,0x3abd58fa,0x3afa13c3,0x3aea359e,0x3c8e9099,0x3c184859,0xbcdd9705,0xbc76c732,0xbc6bac5a,0xbb59619f,0xbbd418c5,0x3cf6e9ec,0x3d42d4e2,0x3ced7553,0x3c7e69b1,0x3c29b8ab,0x3ae8d290,0x3b171290,0x3bb863e9,0x3b777ca7,0x3b2668d5,0xba9df9ac,0xbb0d379f,0xba1aec70, +0x3afecac4,0xb8c4a0ab,0xbad380ca,0xbbcbcc77,0xbbe86352,0xbc033077,0xbc03367b,0xbbc03641,0xbb97640e,0xba9c7b47,0x3b4339fe,0x3bfb5d0c,0x3c556512,0x3c2dc380,0x3bc5b5f4,0xbb81a01a,0xbc1dad07,0xbbf913d2,0x3b6c79b5,0x3a5b02d8,0x3b50ed99,0x3b24d868,0x3c518a09,0xbcf52dce,0xbcd13f1e, +0xbc98d0b6,0xbbc0c1b9,0xbb58de92,0x39783546,0x3a33cb15,0x3b5ce2d6,0x3b46387d,0x3b543652,0x3a97ac0d,0x396ca60c,0xb9e6d9ce,0x3ab8e2a9,0xbbb3be51,0xbc0b4845,0xbc1ef487,0xbc321c41,0xbc208d94,0xbc0a3319,0xbba6a16c,0xba93daff,0x3a508344,0x3b919cc4,0x3c10d187,0x3c596731,0x3c811901, +0x3c8dbd6b,0x3ca5d00f,0x3cae2880,0x3c84a78e,0x3be1a941,0x3c06bdbe,0x39189994,0xbc42759e,0xbcb25a2a,0x3c81b176,0x3c9241d0,0x3c8821e7,0x3c6ba3de,0x3c83b3ba,0x3c5ebd2c,0x3c55ae4f,0x3c4a6a23,0x3c4460a3,0x3c2a30db,0x3bdc1559,0x3b89ff1b,0xb9c4c21a,0xbb906534,0xbbc25dda,0xbbbfabc2, +0xbba3c2a2,0xbba72697,0xbba29e25,0xbbb4f7b1,0xbb6d4ddc,0xbb215b5a,0xbab09c96,0x3a0cb7e8,0x3a900a09,0x3a1fdf1b,0x3a88e6cb,0x3b128aff,0x3b158f55,0x3b7f959d,0x3bd89e7f,0x3c2d474a,0x3c2686d2,0x3c350aca,0x3c4d6ee9,0x3c7a4c28,0x39c48efc,0xbb85d78a,0xbb3065ca,0xba4054f3,0xbb29843b, +0xba020850,0x3a06d169,0x3abe58ee,0x3ad388d5,0x3aab2ad0,0xb98f2cd2,0xbaf37064,0xbb94a325,0xbbfcd6d9,0xbc01b4ec,0xbc0174c7,0xbbf238d9,0xbbe37da4,0xbbd81fb9,0xbbc1bcb2,0xbb88910c,0xbb4d973b,0xbb17b0bb,0xbae4948a,0xbac223f5,0xbaf9e6ea,0xbaff0b02,0xbae92c57,0xba897004,0xb92e554a, +0x39bf9342,0x3af6cd12,0x3b8ad216,0x3bdb774b,0x3bf03f44,0x3b37a998,0xbbb00062,0xbbde85a6,0xbc02a0cd,0xbc21a178,0xbc3ce2bb,0xbc29d5cc,0xbc0f8591,0xbbe35e2c,0xbc0f7f44,0xbc0c5dab,0xbc20e422,0xbc05744d,0xbc104b6b,0xbc09fc40,0xbc0047d4,0xbc027f9e,0xbc0670af,0xbbf78fac,0xbbe7a6bf, +0xbbd74fc6,0xbbc107e3,0xbb9b91b8,0xbb6ce155,0xbb407496,0xbb09e525,0xba21fa9b,0xbaaff660,0xbad47fda,0xbb1fda98,0xbae44474,0xbab7cc30,0xba196619,0xbacb3e9c,0xbb4cb6af,0xbb3eceb3,0xbb82f34a,0xbc0482b7,0xbc194688,0xbc12ef4e,0xbc08ed96,0xbbefb5ba,0xbc243cf0,0xbc347627,0xbc55255c, +0xbc3612a7,0xbc20fe34,0xbc0fadc4,0xbc0c87ca,0xbc02947c,0xbbfa1c88,0xbbeeb822,0xbbd5b9c1,0xbbc4b184,0xbbb9347c,0xbb97e307,0xbbb0f06b,0xbb9573f4,0xbb8ef44e,0xbb7a6e56,0xbb4902b0,0xbb1cf6c2,0xbaefbfaa,0xbadd4b9d,0xba74f486,0xba4c2c0f,0xba5d20ff,0xba887dbb,0xbaa42230,0xbb3d4877, +0xbb30aaa9,0xbb9f7dbb,0xbbe5f2ec,0xbbac1e37,0xbbbc3414,0xbbc78296,0xbbd68a96,0xbbda13a4,0xbbe1a12a,0xbbd387d0,0xbbdec42a,0xbbd9e52b,0xbbe35be7,0xbbdec70d,0xbbd4c545,0xbbc6e4df,0xbbbac8f4,0xbbb44e3b,0xbbb68e30,0xbbb34097,0xbbb2d422,0xbbb0a11d,0xbbb1b218,0xbba3d461,0xbb9cf403, +0xbb938a62,0xbb8e2057,0xbb85c8de,0xbb741740,0xbb80637f,0xbb879a40,0xbb8d5c0e,0xbb90e5ee,0xbb88bf5b,0xbb847748,0xbb977ceb,0xbb9cdbc6,0xbbaba009,0xbbaceac7,0xbc000105,0x3b00bfd5,0x3addaede,0x3abadea0,0x3a989062,0x3a832ccc,0x3ae75d84,0x3a159172,0x39be3e5e,0x3a9180e0,0xb6ca9ede, +0xb9a978a6,0xb9c9d3e6,0x39ad8efe,0x3a2d77b4,0x3a17bc0e,0x3a9f7cfb,0x3ac73c68,0x3ab9e8e0,0x3a6daa34,0x3a3f5ffd,0x3a285ea6,0x3a621759,0x3aa143a1,0x3adcb0d5,0x3b15fb32,0x3b2560b2,0x3b2c2c7e,0x3b042967,0x3ac84623,0x3a64ac81,0x3ac0969e,0x3ad39a59,0x3a8f1b11,0x3ab376d5,0x3ac8d6be, +0x3b0270f1,0x3adcc326,0x3b3f5414,0x3a26c832,0x39c56743,0x3a8dfcdd,0x3b8d0c53,0x393c0e16,0xba64cbee,0x3a8a80d3,0xbb524575,0xbb634b41,0xbb3827b7,0xba10db96,0x3a412fba,0x3a27ad42,0x3b3f5982,0x3b5bd447,0x3b468267,0x3a52ddff,0xba38b4d8,0xba771704,0xb94256ee,0x3a5dc3a9,0x3b355e67, +0x3b87b3d8,0x3ba73420,0x3bce774c,0x3b7fd39c,0x3b552665,0x3b100e11,0x3b874683,0x3b5ed4e8,0x38e54e22,0x3aae12c2,0x3b1cf49d,0x3b97627e,0x3b8e74a9,0x3b963103,0x3b069474,0x3a20e757,0x399c596c,0x3bcd773d,0xbafb9c99,0xbb65e366,0x3a99b217,0xbbb841a4,0xbbee33e8,0xbbc3a995,0xbb2b98df, +0x3926be27,0xb88ad853,0x3b617501,0x3b876cf6,0x3b985b4f,0x39acabfb,0xbae90f7e,0xbb2dad56,0xbab64ff6,0x3a841320,0x3b8dfe1b,0x3bf6dde9,0x3c14f6b0,0x3c299e0b,0x3bcdf4df,0x3b86d55f,0x3a6e6fa4,0x3b9a14f9,0x3b9abea5,0x3a1a14bc,0x3b476a45,0x3b86b6b9,0x3bec3d7d,0x3bae41cc,0x3bba4f9d, +0xba9b96e4,0xbaec735a,0x38ef7cba,0x3c26d6aa,0xbabbe3e7,0xbb9d4963,0x3ab5b8e6,0xbc23700c,0xbc283e36,0xbc1e46b3,0xbb21b003,0x3b1ee5e8,0x3a5bb6bd,0x3bdf4b9a,0x3befff38,0x3be5a8f7,0x38fa795f,0xbb808c5a,0xbbc512d7,0xbb41c3e2,0xb99f721b,0x3b99ed59,0x3c36c262,0x3c6bc754,0x3c7effb4, +0x3c03e320,0x3bdf9ba7,0x3b73fa3d,0x3c0c4223,0x3bea2977,0xbb0fe26e,0x3b49ca7f,0x3bb1936f,0x3c3a394c,0x3c21fd6d,0x3c1258d7,0x3b81c4be,0x3a9c06ca,0xb8fced13,0x3c4174cd,0xbbb96cee,0xbbd95082,0x3b13c49f,0xbb9aad77,0xbbb106e1,0xbc032241,0x3aad3044,0x3ba9a667,0x3b84cb27,0x3beca559, +0x3c07fdc5,0x3bfd18ee,0x3a07b744,0xbbacfa4e,0xbbf0ffef,0xbb94437f,0x3959d569,0x3bf76503,0x3c650128,0x3c978ae4,0x3c9f6ebd,0x3c3ba8dd,0x3b9fef95,0xba4a9806,0x3bfb9c72,0x3bfe8890,0x3b02f41d,0x3be14046,0x3c21b3f5,0x3c61f58e,0x3c26bda9,0xbc7afc3c,0xbc822b76,0xbc94ae1e,0xbc542626, +0x3a6281e9,0x3c027b23,0x3c004f2b,0xb9d65df5,0xbb29cda3,0xbae90d31,0xba560f83,0x3b29ea28,0x3a9f45e3,0x3bbe8d6f,0xbba83132,0xbc00c9b7,0x3b9d333e,0x3c1eef2a,0x3c86d76e,0x3ca4d29f,0x3c8c53f7,0x3c1e5c15,0x3a95c4a5,0xbc431c23,0xbc5968a5,0xbc7ad622,0x3bd82b87,0x3cbcc0d2,0x3cf39321, +0x3c9b334b,0x3c04f23a,0xbb0f3272,0xbc47c6e5,0xbc4bddab,0xbbe62aec,0xbc466713,0x3bb4967d,0x3cc0851e,0x3ce993e9,0x3c4c4415,0xbc57f6c6,0xbcadcb80,0xbc96d4a8,0xbbc99954,0xba2fe947,0x3a2ad2a9,0xbb559503,0xbbaa109c,0xbbae6e3a,0x3a8e99aa,0xbb475fa1,0xba44d97c,0xbb519d0b,0x3b9045d9, +0x3bb77390,0x3b9fa6ce,0x3a04e3b8,0xbab3c6fc,0x3b19cbfa,0x3b1c01e1,0x3c0a3f45,0x3ca9bc47,0x3bedc819,0xbb9230f0,0xbcafde5f,0xbbc42af6,0x3bb66eb7,0x3c8365cd,0x3cc19542,0x3c6bf8e9,0xbc80b92c,0xbbe4b216,0xbc16dfd0,0xbd403765,0xbce9f608,0xbc28ef1e,0xbc2eb252,0xbbf96234,0xbbccd54c, +0x3889bba3,0xbac782d7,0xbade4cc4,0x3a4b1129,0x3994a9c0,0xba88ed1a,0xbb943dba,0xbb7560de,0xbb0ab5e6,0x39c4e013,0x3b844f24,0x3bba12f1,0x3b90e1d5,0x3b54822b,0x3a987b88,0x3a19cf8c,0xbae8417d,0xbb24ae36,0x3b2ec49e,0xbb265bc7,0xbb8bc8b7,0xbb1bce8c,0x3be0e3a2,0x3ba154ce,0xbc3c9e40, +0x3a708a30,0xbab33cfd,0xbc50a012,0x3b4ed1e5,0xbbcd3a92,0xbd06edbc,0xbca78caa,0xbc44117a,0xb9537e89,0x3b447fd5,0x3bab7bdd,0xb8ccabaa,0xbb8a4303,0xbb5f4ba6,0xb9a5b68e,0x3a815aa2,0x3a7d0e56,0xbb6bef35,0xbaa4fe58,0xbabc5a84,0x3ae31c90,0xb8aae06e,0xbaa099ef,0xbab5dd09,0x3a17bcfa, +0x3a557275,0x3b021e83,0x3a07dcf3,0x389571cc,0xbb33f002,0xba899411,0xba694507,0x3b93f90a,0x3be1c03e,0xbb0af877,0xbcb31d80,0xbc3e4a78,0xbc00bac4,0xbb05f79c,0x3bb417f0,0x3ca3959d,0x3d35da42,0x3d1faec4,0x3cb0601f,0x3bfa2d8a,0x3b8cd06a,0x3bd7d803,0x3b8e4ff1,0x3b44c131,0x3addfaeb, +0xb9657a89,0xbb1fb1cb,0xba8a00b5,0x3b100ee4,0x39f09101,0x39eb7612,0xbabd0033,0xbb5db9fa,0xbba9e78b,0xbbac1f3c,0xbb7c78ba,0xbae2869a,0x3b6a7f64,0x3b8c35cb,0x3c0938ca,0x3c2470a8,0x3beb8d4e,0x3acd0744,0xbc3820ad,0xbc064ea8,0xbba5a0da,0x3aea2815,0xbb914be1,0xbb971e13,0xbaa07529, +0x3b452897,0xbc7d48e5,0xbc988626,0xbc96ceaf,0xbc0823da,0xbb735108,0xbb131589,0xbb03df07,0x3b62f92b,0x3a83fcdd,0xba824dfd,0xbad74678,0xbb20f501,0xbac14941,0xba361d76,0xbb81c27f,0xbbcd689e,0xbc2fda86,0xbc3e95f4,0xbc3fc4b2,0xbc37ea2d,0xbc0c0703,0xbba89d75,0xba87e88a,0x3b37b2f5, +0x3bf40c92,0x3c37a85b,0x3c665298,0x3c813901,0x3c9046b7,0x3c89e330,0x3c203696,0x3aa4d00e,0x3acab45a,0xbb14e184,0xbc163406,0xbc39570f,0x3c099b6d,0x3c7bf69a,0x3c71eef9,0x3c35d710,0x3c378f68,0x3c0cb2b5,0x3bfd200b,0x3bfe24d4,0x3c01b8f7,0x3c0b0d9b,0x3bd69523,0x3bd9d429,0x3b412d90, +0xbab20bfd,0xbb87e062,0xbba27d14,0xbb9ffc5c,0xbb7b5c8a,0xbb5f8928,0xbb5ddc7f,0xbb5d4953,0xbb4a6c0d,0xbb234e91,0x395b410b,0x3ab03970,0x3b017f3d,0x3b833c31,0x3ba68ef2,0x3b9b4138,0x3bf8b47c,0x3c35222f,0x3c78c85a,0x3c4da5f8,0x3c2567eb,0x3c110347,0x3c0546cd,0x3b3fbf75,0xba2d1458, +0xba1e4b42,0x3aeb37aa,0x3b061907,0x3b82e97b,0x3ba177a1,0x3bafc12f,0x3ba48f16,0x3b8e8104,0x3b10bbde,0x3a8f1459,0xbb03d24d,0xbba9a903,0xbbd31fb8,0xbbecb3d2,0xbbf04973,0xbbcd39f4,0xbbb8e72a,0xbb99ce63,0xbb841d13,0xbb7bbeaf,0xbb85b2cf,0xbb1b2dcb,0xba836fa0,0xb9768974,0x3a85df5b, +0x3b2497df,0x3b8c60c2,0x3b7aa9bd,0x3b5acf7d,0x3b92d218,0x3b9e0462,0x3bc667f1,0x3bcce3bf,0x3ba04352,0xbb80080e,0xbb82e4f4,0xbb62dcd4,0xbb6d893d,0xbb82174c,0xbb624029,0xbaf66442,0x3985eac8,0xbb28ac2d,0xbb75ecc6,0xbbc18a24,0xbbb502a9,0xbbeba9b0,0xbbeb82ff,0xbbeb215b,0xbbef4f3e, +0xbc036220,0xbbf4fad8,0xbbf20fcf,0xbbdb8da5,0xbbd8a945,0xbbc6ad73,0xbbc0362c,0xbb9923a4,0xbb6c37fa,0xbb020d55,0xbb2dcbb9,0xbb440bfd,0xbb4c9ba5,0xbb4b860f,0xbb4511a1,0xbb22eec5,0xbb45f545,0xbb7eb957,0xbb79936c,0xbb84e471,0xbc22f652,0xbc3332fa,0xbc43bac8,0xbc3e67ef,0xbc36296e, +0xbc504526,0xbc558592,0xbc6f60cc,0xbc4ac763,0xbc3150b8,0xbc1c2022,0xbc1242d2,0xbc013fb3,0xbbfa41df,0xbbf6b9e8,0xbbe4ae3e,0xbbe3a35e,0xbbd66452,0xbbc70086,0xbbd6f603,0xbbbbf338,0xbbb9e3f1,0xbba839c3,0xbb9fbf1e,0xbb98aefc,0xbb8f5559,0xbb9ad0be,0xbb913515,0xbb984228,0xbbac7e8f, +0xbbacf879,0xbbc4f47b,0xbbe1a345,0xbbc68500,0xbbf29ec1,0xbc135b2d,0xbba1d88d,0xbba26af7,0xbba1da79,0xbba3c4b2,0xbba54bfb,0xbb96df3d,0xbb8e5a98,0xbb9f4805,0xbba95053,0xbbb8ebf9,0xbbbcc01c,0xbbbd2232,0xbbba03a3,0xbbb07700,0xbba9b5e4,0xbbae02bd,0xbbb32f1c,0xbbb32a20,0xbbb2a417, +0xbbb85cae,0xbbad2f06,0xbba8d01f,0xbba0a1c4,0xbb9aae0f,0xbb900dd6,0xbb839b66,0xbb8d65c2,0xbb92e824,0xbb9bf3a0,0xbba01d7d,0xbb9b6fdb,0xbb9fe7a7,0xbba6d640,0xbba4f1a4,0xbbb0167c,0xbbab4e74,0xbbf30b76,0x3b1de91c,0x3aea0fc0,0x3ad4d296,0x3acb502b,0x3ab1d14e,0x3afeccec,0x3a48a78e, +0x3a21f80d,0x3aa40564,0x398bbfe4,0x37fd5d05,0x394a3a4d,0x3a1ac499,0x3a68a5ee,0x3a5f08a9,0x3abe218e,0x3ae7ed55,0x3afbef54,0x3abb3106,0x3aab502a,0x3a8f1bb5,0x3ab2ba0c,0x3ae5cd2a,0x3b1b416b,0x3b3a0029,0x3b3c35d2,0x3b2304a9,0x3b089529,0x3ad4b1ef,0x3aa5548a,0x3ae12a71,0x3aeed926, +0x3abc3998,0x3adfcf7c,0x3af16532,0x3b13ce21,0x3af145c3,0x3b4ec1d6,0x3a9b5dcc,0x39f3a941,0x3a6a9157,0x3b776cd1,0x391278e7,0xba5abfb0,0x39ee695e,0xbb5e4e5e,0xbb6d7278,0xbb1874e0,0xba8e810d,0xb78921bd,0x39ad2ef2,0x3b2b7f34,0x3b50ae10,0x3b59bbad,0x3ae4c47b,0x39dcea07,0xb94c4482, +0x3a4357bc,0x3b043dfb,0x3b94517c,0x3ba3ae29,0x3bad410c,0x3baea352,0x3b7f6d06,0x3b7518bf,0x3b673cb8,0x3b725a3b,0x3b3a6191,0x3ab2f37c,0x3b3c097d,0x3b83c454,0x3bc3179f,0x3b9ca613,0x3b875c83,0x3b0ac3f2,0x3a6bd514,0x39aa8b99,0x3b9c3063,0xbb137adb,0xbb7a55af,0xb9814718,0xbbd79302, +0xbbfca7f1,0xbbacd925,0xbb7aeeb4,0xbab2509e,0xba82ec0b,0x3b3dade9,0x3b7f2143,0x3b9bda34,0x3ae2e2de,0x397e0565,0xba835c02,0x39e51efb,0x3b4739b8,0x3bf0c584,0x3c1a28ef,0x3c21a3f6,0x3c039da2,0x3bc30b20,0x3b7b10eb,0x3b1f8db8,0x3b89378c,0x3b8d9e7f,0x3aecbbb6,0x3b94977a,0x3bb5899e, +0x3c04f03c,0x3bb2cbde,0x3bbf4796,0xb9ae623a,0xbb215260,0xbab8706f,0x3c00e33c,0xbb3bf175,0xbbc8669b,0xba9ddb7d,0xbc4e47a1,0xbc61d2b3,0xbc1ed874,0xbbc03bf8,0xba8860f1,0xba8ab087,0x3bab1b59,0x3bbfc278,0x3be20239,0x3b0b21a0,0xbacfddfb,0xbb83fa8b,0xba101b80,0x3b2830e4,0x3c1c60de, +0x3c57ec7f,0x3c7197be,0x3c3ce3fa,0x3c01b010,0x3befc0d3,0x3bfaa424,0x3bcf27ea,0x3ba9f456,0x3a8029fa,0x3bd73785,0x3c16360c,0x3c675a45,0x3c2a1257,0x3bd336af,0x3b5c4738,0x3a59e86d,0xba683b61,0x3c1c3fde,0xbbef34f8,0xbc1b941a,0xba9bd6f1,0xbc264570,0xbc3bc8b8,0xbc1f8755,0xbb472624, +0x3ab66e79,0x3b3ad6d3,0x3bc4b392,0x3c03b5f2,0x3c15230b,0x3b31e4af,0xba84e5d7,0xbb6e4090,0xb9d52a8c,0x3b95c799,0x3c631f5b,0x3c92c413,0x3c9f328e,0x3c6980f6,0x3c21af68,0x3b93c8c0,0x3ac7f787,0x3bd90857,0x3bd81450,0x3b74e67c,0x3c19cd69,0x3c3eb370,0x3c6e29de,0x3c1da301,0xbb891e0b, +0xbc12522b,0xbc6087f5,0xbc35012a,0xba28a2da,0x3c10bb89,0x3c4217a6,0x3c167812,0x3b53c6f6,0xbb2b98e0,0xbb388a8a,0xbb594e1e,0xbb2c4dda,0x3c0ea16b,0xbc0a748f,0xbc4016a8,0xbb7d9855,0x3a4cd0fc,0x3bf9fa21,0x3c18c31b,0x3ba41acc,0x3a070da5,0xbc081b8c,0xbc7de053,0xbc3eb3d9,0xbc4fc47d, +0x3c8eb8af,0x3cf676ef,0x3cc4836b,0x3c820b14,0x3b49869c,0xbc2fa157,0xbc319cea,0xbc05d8d1,0xbba2edee,0xbb32959e,0xbae86b52,0x3c77091a,0x3d06e1e6,0x3ca8e98d,0xbbd2ceb8,0xbc9a875c,0xbca7a18f,0xbc23fc7e,0xbb8ff3a3,0xb9b811cc,0xbb1437c1,0xbb32a2a2,0xbba3ad3e,0xbaed9ec6,0xbb11678d, +0x3abe589d,0x371ef446,0x3bb8d723,0x3bd215d0,0x3c1198cb,0x3af4912c,0x3ada17ef,0x3bca58cd,0x3c278484,0x3c5b7157,0x3c4ea8da,0xbaabe0ff,0xbc32583c,0xbcde7826,0xbb6f8ee0,0x3c119896,0x3c3bf418,0x3c536d59,0x3ab4f6e7,0xbcaf01be,0xbc441d13,0xbbde8678,0xbd190d02,0xbd185238,0xbca4a23f, +0x3987dee1,0xbc51f66b,0xbc7138cd,0x36e2619d,0xba7342e1,0xb9c48b27,0x39c2e43c,0x3a139d27,0xba42e04e,0xbbb37da3,0xbb4f3872,0xbafa8a5c,0xbaec8c28,0x3b7cc544,0x3bda1938,0x3bd3fa03,0x3b36a876,0xb9f908b4,0xbae186b2,0xbb327977,0xbb66be54,0xba5bbb91,0xbbb94f0f,0xbbddda5a,0x3b9d294d, +0xbb114a0b,0xbbbbbfe9,0xbbc63f13,0x3b3d1198,0x3b6bc4b5,0xbc1b84d8,0x3b86fd17,0xbba8fb03,0xbd056c48,0xbce018b4,0xbc8deadb,0x3c1cf1ae,0xbae97c9f,0x3b0588ef,0x3b75fb92,0xbb1fdcb3,0xbb172a0a,0xb9a58ee5,0xb8734c7b,0x39463c99,0xbb4ffd6d,0xbae1e4f4,0xbafcde30,0x3a4b5408,0x3abe9729, +0x3ac67e17,0x3a9bcae8,0x3ae6b5c4,0x391ab449,0x39ed396c,0xbb50f8dc,0xbb816068,0xbbba068e,0xbb2b14b2,0xba432057,0x3c5959d9,0xbb39c147,0xbc596e1d,0xbc85e2d6,0xbbb62ae5,0x3b151d77,0x3be0977f,0x3c010031,0x3bb0d734,0x3caaa965,0x3d170929,0x3cced185,0x3c275ee7,0x3bd981ee,0x3c13abc5, +0x3bc3ea37,0x3b0f3e67,0x39c2e386,0x37921e15,0xbb001cda,0xba501ea8,0xb6a80302,0x3a728780,0x3b1668d5,0x3b404b63,0x39bf9c95,0xbae0fbdd,0xbb0e1787,0xbadd7c71,0x3a948b98,0x3be2de60,0x3bc94375,0x3bfd2bf5,0x3bc13ea3,0x3b9011f0,0xb920c482,0xbc3d345d,0xbb33e94a,0x3997574d,0x3b05767f, +0xbbaec820,0xbbcb0d93,0x3b956b08,0xbb33099b,0xb9c14339,0xbbe44bdd,0xbc7285b1,0xbc20c710,0xbb9d0aec,0xbb0f62c3,0xbb08deaa,0x3b31a215,0xb9ec4a8b,0xbb6e413b,0xbb6ddb1f,0xbb78c00b,0xbaf1c130,0xbb088d9f,0xbb1348f8,0xbb836e5e,0xbc243e06,0xbc3748ba,0xbc3ed371,0xbc32986c,0xbc1ddda6, +0xbc00f0ec,0xbb5ab183,0x3a8cde5b,0x3bbb3019,0x3c003e10,0x3c416282,0x3c60b6d3,0x3c828bed,0x3c4015a4,0x3b8d71fd,0xb99a405f,0xba7a8d91,0xbb027e84,0xbbabcff1,0xb9539845,0xbac49ef4,0x3ba91f98,0x3bea7787,0x3b9cc503,0x3b8ad191,0x3b2a6d6e,0x3b21328b,0x3b25aba6,0x3b443ba2,0x3b8508b1, +0x3b7393c6,0x3bc9958a,0x3b93d848,0x3aa030d9,0xbae7855b,0xbb6dee7e,0xbb999865,0xbb8f82af,0xbb82eaba,0xbb49ab9c,0xbb46aac1,0xbb0ad7ff,0xbaf380b3,0x3afbef1a,0x3b82b39b,0x3bcc9d1a,0x3c1821e3,0x3c27ed63,0x3c1effb9,0x3c500e9c,0x3c79713e,0x3c90b7e2,0x3c5bfdfa,0x3c13b2d6,0x3baf681a, +0x3a1f60c3,0x3bb0e831,0x3b6b9826,0x3b13481b,0x3b80c67a,0x3bbeaac1,0x3bf191b7,0x3c0082fe,0x3c01c770,0x3beea68b,0x3bdd5000,0x3ba1bba4,0x3b7d44bf,0x3a60c551,0xbae2c5d3,0xbb712ce7,0xbbaf19b0,0xbbd62a2c,0xbbb8d616,0xbba4c581,0xbb826f38,0xbb6a9881,0xbb617e57,0xbb831e8a,0xbadf2389, +0x39a0083a,0x3afe824e,0x3b8ef710,0x3bea55f0,0x3c266ec2,0x3c1720cd,0x3c071104,0x3c17d13a,0x3c02e379,0x3be4633f,0x3bc2224a,0x3bd34797,0x3aacdc91,0x3ae23eaf,0x3b3c274d,0x3b7c0381,0x3b851361,0x3b83d817,0x3ba56bee,0x3bdb8eda,0x3b8381ce,0x3b012977,0x38d9016e,0xbac27a2c,0xbb827887, +0xbba39867,0xbbb06e2c,0xbbb44e33,0xbbd84b1c,0xbbc79b5b,0xbbc69120,0xbbbcbc13,0xbbc3047d,0xbbbde0e5,0xbbc3ff7c,0xbba5157c,0xbb922064,0xbb61a54a,0xbb3b3bae,0xbb26d323,0xbab9d03e,0xbaf4bb20,0xbb00cf0f,0xbb05366a,0xbb0a8d78,0xbaa3566b,0xb97241fe,0x39a4f98a,0xbc119b2a,0xbc12f7f3, +0xbc302308,0xbc2b9f8d,0xbc29459c,0xbc2e0346,0xbc2a587e,0xbc39b103,0xbc267a33,0xbc1b9ef9,0xbc144573,0xbc0e693a,0xbc0205e5,0xbc079ac1,0xbc00b69e,0xbbede46c,0xbbef0e67,0xbbe191e0,0xbbde4157,0xbbd9abc8,0xbbbcfff3,0xbbbb1e94,0xbba8ff36,0xbba4a4c7,0xbb99787a,0xbb89ffd1,0xbbb04cce, +0xbbb735ce,0xbbce2176,0xbbe696b3,0xbbdafadb,0xbbee7236,0xbbef2796,0xbbe00e37,0xbbfea165,0xbc0b62bc,0xbb7d3e87,0xbb6d5c8c,0xbb656397,0xbb5eb606,0xbb650399,0xbb2b53c1,0xbb27e83b,0xbb448554,0xbb6f413b,0xbb876d21,0xbb92027e,0xbb9ca451,0xbba5ecd6,0xbba75d05,0xbba1b485,0xbba4e56e, +0xbbaad4fc,0xbba7cf26,0xbba525d1,0xbba92e20,0xbba58db5,0xbba5755d,0xbba1625d,0xbba045d8,0xbb9b294a,0xbb91bcc0,0xbb99b82f,0xbb951841,0xbb9a8464,0xbb9c7ec1,0xbb9bbd39,0xbba7b0f0,0xbba380e6,0xbb9609d2,0xbb91a8d7,0xbb869185,0xbbefdcfd,0x3b06e7c3,0x3ac98459,0x3abc4972,0x3abff73e, +0x3aa5a3f5,0x3ab59085,0x3a1e32a0,0x3a084082,0x3a56ed4c,0x39b3c640,0x39990fce,0x3a014dba,0x3a2b5c27,0x3a501fe8,0x3a1fcaca,0x3aa1f59e,0x3ac6b424,0x3ae51a0c,0x3aba111f,0x3ab293f8,0x3a9379b6,0x3ab99e00,0x3ae476ce,0x3b166582,0x3b2edd67,0x3b278fc0,0x3af1d9d3,0x3ad9e708,0x3aae0373, +0x3aafdb0d,0x3ac24af1,0x3abf51c7,0x3a987869,0x3ac9c65c,0x3ad91886,0x3b034895,0x3ad1c7ff,0x3b1ee370,0x3aaab13a,0x3a3c7d9e,0x3a29067f,0x3b02c53e,0x395fd3e2,0xba38464e,0xba87387a,0xbb61a22d,0xbb7264a5,0xbb269d2c,0xbaf82918,0xba66e0b5,0xba2e6ffe,0x3af4c963,0x3b19b27f,0x3b184314, +0x3afefea0,0x3a91c326,0x39a420a0,0x3a9957c0,0x3b18a284,0x3b9a614a,0x3b9b80f1,0x3b97b74f,0x3b7e17db,0x3b6045cb,0x3b70cd11,0x3b88b665,0x3b1b3ecb,0x3aae4d7c,0x3ab4d79a,0x3b623cee,0x3b9883a1,0x3bc4cb89,0x3b822060,0x3b597995,0x3b0d5518,0x3aa5194f,0x39b0c6ee,0x3abdbd9a,0xbb0a9260, +0xbb5a0337,0xbb3d8b3c,0xbbce3768,0xbbe37aeb,0xbb9ab456,0xbb866e95,0xbb2383f1,0xbb35700d,0x3b004548,0x3b42a881,0x3b4481d2,0x3b16c2bb,0x3ac830fa,0x3a02005e,0x3af281e5,0x3b86d985,0x3c02ec1b,0x3c1a1ef9,0x3c140460,0x3bae5eca,0x3ba98bfa,0x3b5c500b,0x3b82b016,0x3b388c55,0x3b32e6a2, +0x3abb859d,0x3ba24f60,0x3bc4156e,0x3bfbf556,0x3b9ed367,0x3b87439b,0x3a3cd40b,0xbad7e209,0xbad240c7,0x3b4c2703,0xbb311718,0xbbb886f7,0xbba6c6d1,0xbc5ee357,0xbc805e0f,0xbc1d9b66,0xbc0f0697,0xbb7eb80b,0xbb88a499,0x3b5e304b,0x3b7099ef,0x3b7929fb,0x3b4dda8e,0x39f257a7,0xbad69b7f, +0x3aab704a,0x3b84ac24,0x3c32e313,0x3c5123bd,0x3c580180,0x3bfc8c78,0x3bfbc3cd,0x3bf67703,0x3c2bdabe,0x3b3d74ea,0x3aeb9082,0x3acde0c5,0x3c0917d6,0x3c372477,0x3c6c03b9,0x3c0d5649,0x3b8cd90d,0x3b4b2989,0x3a851003,0xba9e70de,0x3b70e34d,0xbbddcf42,0xbc283ac0,0xbba40d71,0xbc5b074d, +0xbc6f4e72,0xbbf7c007,0xbbc23459,0xbb2fd0a0,0xb9d63d3d,0x3b92a608,0x3bd71369,0x3bd80891,0x3b76a2e5,0x3b325739,0x398b17e3,0x3b6b6449,0x3bf91e5c,0x3c82196f,0x3c97bcb9,0x3c8fbe2f,0x3c176ce9,0x3c0a174f,0x3b9fab36,0x3ba1135e,0x3b94271c,0x3b75478b,0x3b331754,0x3c244504,0x3c444d76, +0x3c593483,0x3c063a73,0x3bfc82c7,0x390465d0,0xbb395381,0xbaff0c16,0x3a935a66,0x3c3e1168,0x3c85faf1,0x3c839734,0x3c03ad86,0xbb088766,0xbb4f0e3e,0xbb964c2a,0xbb70dee5,0x3c1e4d78,0xbc1a6986,0xbc4d6f2b,0xbc3e942d,0xbc1c38db,0xbbc20a03,0xbbf07698,0xbc17b45f,0xbc2190b2,0xbc94e8a9, +0xbc98e48e,0xbc36bfa2,0xbc353afa,0x3c962c41,0x3cd063bd,0x3c619523,0x3c090a29,0xbae4a93c,0xbc588f45,0xbbd9eb69,0xbb3a8eaf,0xbb7d3aba,0x3bdfefc8,0xbb5ed779,0x3bc6e0ab,0x3cdb7a85,0x3ca14a0a,0x3ac6805a,0xbc8d32ed,0xbcbac377,0xbc3c8572,0xbbc139b6,0xb9556343,0xba7d2502,0xba8074c7, +0xbb82f287,0xbb8c3d28,0xb9f2331c,0x3b4ef059,0x3b3b361c,0x3ba4301d,0x3bbf7592,0x3c3383d9,0x3ba11e6d,0x3bcc9912,0x3c14cdb5,0x3c8249aa,0x3c652478,0x3abe630d,0xbc163955,0xbc79f45f,0xbcc8cbbb,0x3a4f6e69,0x3c3b199d,0x3be71899,0x3ab8955f,0xbc28bec0,0xbcb60aba,0xbc341b73,0xbc4998ab, +0xbcd0564b,0xbd07e814,0xbca6fc18,0x3b6d459e,0xbc5999ee,0xbc924b68,0xbb9169cf,0xba442667,0x3a280680,0x38b1fbd3,0x3a142459,0xba1f685f,0xbb9a0a9c,0xbb45ea16,0xbb104c51,0xbb68eb1b,0x3abd89de,0x3b6aa2cb,0x3b87afc0,0x3a9dff72,0xbaa99def,0xbb713591,0xbb220f72,0xbb76c84f,0xbba8e9b5, +0xbbc9465c,0xbbc39974,0x3c0970f1,0xbbe53647,0xbc45a637,0xbb8561a8,0x3a830d18,0x3b83b5ef,0x3b007492,0xbb92c8aa,0xbbe4a6de,0xbccc2120,0xbcc864da,0xbc784adc,0x3c2f6f2e,0xbb2ee8ce,0xba181623,0x3b01e19c,0xbad56e75,0xba6c1dcc,0xb92e76fd,0xb9305686,0xba19e663,0xbb1434f8,0xbb2579dd, +0xbb2dc481,0xba0a2738,0x3a920b66,0x3af1ae1c,0xb921c9eb,0x3a9a35af,0xba23f502,0xbae26c7e,0xbbaef9d2,0xbbcc9fe6,0xbbefedce,0xbad41384,0x3aad843a,0x3c8dc672,0xbc2986a5,0xbca2f602,0xbc502969,0x3aa3904e,0x3c4b72d8,0x3ca12b1c,0x3b9fcd33,0x3888744f,0xbb436c05,0x3cb77223,0x3cafa78f, +0x3c60214d,0x3b91435a,0x3baab977,0x3bf48f15,0x3b0e6549,0x39fc00a4,0x3a20f2ca,0xba517dc3,0xba5c4cca,0xbb0eaa38,0x3a88ed80,0x3b5b51b8,0x3bb57517,0x3b3f1794,0x3aca7444,0x3a85315f,0x3ac7dfd3,0x3b883338,0x3c01c48e,0x3c099135,0x3bd97745,0x3af00a1d,0x3acdf722,0xba8c23ae,0xbbf62d3e, +0x3a83515a,0x3b55f259,0x3a4e3b16,0x3aeaa5f0,0x3b1ea8e5,0x3c35c4ce,0x3a3e4ce5,0x3bed80b8,0x3b8f4404,0xbbf5d46e,0xbbfa1ce0,0xbba43755,0xb99da654,0xb91d24e8,0xb827de7d,0xba8b1150,0xbb4c14b0,0xbb348cd9,0xbb61a844,0xbace1e97,0xbacddb6f,0xba271a37,0xbaef9631,0xbbda305e,0xbc138915, +0xbc23e9a3,0xbc1b6c62,0xbc0cf211,0xbc04b09e,0xbb9fd465,0xba08bc3f,0x3b771aca,0x3bbd34e9,0x3c182aa7,0x3c29dd5c,0x3c44c99a,0x3ba99e1e,0xba42c886,0xbb367e13,0xbb74697c,0xbb681e4c,0xbb7e2cf7,0x3bb283fb,0xbc16bb1f,0xbbc67808,0xbb14369a,0xbad48211,0xba7240cc,0xbac72eee,0xba60084b, +0xba08011b,0x38cdb735,0x392f34a5,0x392d4e73,0x3b47ee19,0x3b75d7c2,0x3b30899c,0x39d8c5ce,0xbaec596a,0xbb66e65c,0xbbad5852,0xbbb601f6,0xbb9263b1,0xbb3db0af,0xba1766ef,0x392cf18f,0x3ba5850b,0x3bfce220,0x3c25c7f5,0x3c5c93e8,0x3c6ec0ac,0x3c6c07cb,0x3c7cf3d0,0x3c7823d0,0x3c60f793, +0x3c27c9cb,0x3bc42d1a,0x39994e02,0xbbabc2ce,0x3ba4b1f5,0x3bc153d4,0x3b8c70a0,0x3b9e5326,0x3bf2c7ca,0x3c0a11f7,0x3c0ad7b9,0x3bf9dbb9,0x3bef9419,0x3bed67b8,0x3bd26a9a,0x3bba2490,0x3b6b506e,0x3b13ce34,0xb972371c,0xbb2a9ef3,0xbbab66e6,0xbba0dc02,0xbb9be61f,0xbb87cced,0xbb6cf1f6, +0xbb44f7a5,0xbb4c13a5,0xba31f3f3,0x3ab267c4,0x3b3f8b1d,0x3bc6092a,0x3c166dce,0x3c4ecc7d,0x3c3f5ab5,0x3c2ef876,0x3c379466,0x3c1b4ccb,0x3bf3cf76,0x3bbef141,0x3bbcc2ac,0x3be9792e,0x3bdeea35,0x3bfac81c,0x3c08ce41,0x3c08db1e,0x3bfc8fad,0x3bff8048,0x3c0a5b7d,0x3be7502d,0x3baee2c2, +0x3b9aec3a,0x3b03c49b,0xb97cc74b,0xbae37b99,0xbb4340c5,0xbb58d0f9,0xbba34bcd,0xbb917069,0xbb892e0f,0xbb8e459d,0xbb95583b,0xbb9a181e,0xbba3e10c,0xbb99737f,0xbb9b5b49,0xbb8e93b8,0xbb24d7c3,0xbacabebb,0x39f9f621,0x3a1bab8a,0x3a987c5a,0x3abfbff2,0x3af80414,0x3b7c95bd,0x3bbc3834, +0x3bcfb942,0xbbbe3bbc,0xbba43e72,0xbbda9c72,0xbbd5c95b,0xbbd9abf1,0xbbc17e07,0xbbba676f,0xbbc0e12e,0xbbd7d540,0xbbe66cc7,0xbc009894,0xbc043b95,0xbc037e40,0xbc13150f,0xbc02f77c,0xbbec3be8,0xbbe6a95a,0xbbd997ae,0xbbdd565d,0xbbcbf37d,0xbbb1ff87,0xbbabd734,0xbb983c56,0xbb906b88, +0xbb76db2e,0xbb482633,0xbb906a0e,0xbb8f66ee,0xbba3f247,0xbbb26cc3,0xbba3ab69,0xbba702ab,0xbb9b9771,0xbbae44b9,0xbbc27ed5,0xbbc29f1f,0xbb01813e,0xbaeaec16,0xbafb5052,0xbafa8aa7,0xbb0f5a4d,0xbab15781,0xbacb1494,0xbadc9e56,0xbb154354,0xbb2f2e73,0xbb485eff,0xbb6724ee,0xbb85c324, +0xbb932355,0xbb867ed2,0xbb88d0c5,0xbb94fc8b,0xbb8b8a88,0xbb8528b1,0xbb866272,0xbb88d9c0,0xbb8d327d,0xbb8edda0,0xbb9447e9,0xbb962f91,0xbb9139fd,0xbb93a2ff,0xbb847343,0xbb8274a1,0xbb771b6c,0xbb687574,0xbb6e612d,0xbb5bbd6f,0xbb3d8484,0xbb189e25,0xbafc82a6,0xbbd705ae,0x3ac92a4f, +0x3aa3c50d,0x3a9eab86,0x3a94c7aa,0x3a70c27c,0x3a1c07fc,0x39e3b338,0x39b49d64,0x3904b8ae,0x39a63645,0x39d6ef29,0x39aca2fd,0x3a14d2db,0x3a17e788,0x39353a66,0x3a57996d,0x3a8d43d1,0x3a9f2e29,0x3a938dce,0x3a996204,0x3a8ff87e,0x3ab1f38d,0x3acfc3e1,0x3afb62d0,0x3b12c298,0x3b072186, +0x3aa10451,0x3a9da0d9,0x3a875f14,0x3ab403cc,0x3a9c1acb,0x3a83e28b,0x3a33aa55,0x3aa5429a,0x3ab4338f,0x3acffb71,0x3aa81893,0x3abf833f,0x3aa4f241,0x3a4de3d7,0x39a8a5ca,0x3890c998,0x39eaa302,0xb9e36add,0xbb2f0856,0xbb455300,0xbb5d298c,0xbb554bc2,0xbb21abd0,0xbabe643a,0xbadfd1b8, +0x3a69fcc0,0x3aa204fb,0x3a8cf1b1,0x3acf0027,0x3aafffb6,0x3a711d2e,0x3ac4e5d7,0x3b1aa559,0x3b8739c7,0x3b890716,0x3b7fc95b,0x3b39bca5,0x3b3ffd4a,0x3b6204b9,0x3b919521,0x3aae32e1,0x39363175,0x3a487226,0x3b635c4f,0x3b9716d5,0x3ba9191d,0x3b366739,0x3b2427aa,0x3b15fa99,0x3a86db4d, +0x36ac3b09,0xbad22325,0xbad20f0d,0xbb18c0e2,0xbbb4d738,0xbba0cceb,0xbbabaade,0xbbabd7ae,0xbb58f3fb,0xbb30ad52,0xbb8cf4bc,0x3a3e7de4,0x3ac6b6f6,0x3a84c8b7,0x3b00a44b,0x3b01ad8e,0x3afe694f,0x3b4573e5,0x3b9ab7b7,0x3beb58ee,0x3c0a8b49,0x3bf906d0,0x3b5dc582,0x3b88dbc7,0x3b411b74, +0x3bb247ce,0x3af12976,0x3aac7654,0x39633361,0x3b9cdfc8,0x3bbf136b,0x3bcda3af,0x3b7db22e,0x3af87f10,0x3ad6c607,0xba5f620e,0xbac71078,0xbadcdeef,0xbaca8ba4,0xbb7e976b,0xbc1a4d41,0xbc4d5205,0xbc7a8cda,0xbc388b2d,0xbc23f09a,0xbbb79ba8,0xbbec7554,0x3ac3f375,0x3a8faf54,0x39912b1c, +0x3b389821,0x3adb7800,0x3a729608,0x3b3d31de,0x3b9f3b2c,0x3c235452,0x3c3d1698,0x3c3a4709,0x3bb1602d,0x3bea1782,0x3bf25f6c,0x3c460c41,0x3a343fd2,0xb9da8aed,0x3a038e78,0x3c100aa6,0x3c3c5abf,0x3c4a1230,0x3bc4d4f4,0x3b3ccfda,0x3b4d2adb,0x39ccc3df,0xbaf0b3fc,0xbb2951d5,0xbb9757d5, +0xbc0ffebf,0xbc162013,0xbc4ecacb,0xbc5b3b41,0xbba82a15,0xbbb8b27a,0xbb8c0548,0xbb953709,0x3b3994a9,0x3b881020,0x3b18ae25,0x3b6d885b,0x3b9686b7,0x3b709532,0x3bdd322d,0x3c1cb848,0x3c70ff68,0x3c8b6abb,0x3c6d96c7,0x3bbd2bce,0x3bc9cb8b,0x3ba312e3,0x3c0b5db3,0x3b56076d,0x3ab127e7, +0x393f00de,0x3c1bc063,0x3c3ad8a3,0x3c26e260,0x3bc7b899,0x3c81fd9c,0x3c0b9722,0x3c06a6cb,0x3c0133b9,0x3b9e08d7,0x3c6a1174,0x3c9aebf0,0x3c8ffc5a,0x3c3c4910,0x3a6f4d7b,0xba1c8898,0xbb1fea2d,0xbb136b19,0x3c04e6f6,0xbbdfb902,0xbc1b82ad,0xbc851aac,0xbc837124,0xbc854bda,0xbc9584a3, +0xbc9b72f1,0xbc904dfe,0xbcc8225c,0xbca02e96,0xbc2432e9,0xbbd0dafa,0x3c71cbe1,0x3c833d1f,0x3b80e1db,0x3a336285,0xbb840bd3,0xbc006a0e,0xbaa060ef,0x3b0d3d12,0xba0ce6a6,0x3c65eba3,0xbaeaca9d,0x3a31763e,0x3c760fba,0x3c51b56a,0x3c17734e,0xbc6b0f37,0xbcb07e17,0xbc2c0123,0xbbd7bf81, +0xba77c9e8,0xb95d6937,0x395c0b45,0xbb40147f,0xbb9ffb8d,0x3a26d67d,0x3b6123f1,0x3b7a5334,0x3b5551c8,0x3b9f1b30,0x3c31266c,0x3c0cd1b2,0x3c31d47c,0x3c332192,0x3c8187aa,0x3c1caa2d,0xbbc2c3b0,0xbc6cf8e8,0xbc8b1a4a,0xbc848bc8,0x3bbc6c73,0x3c49f3a1,0x3b6e7fe4,0xbbd9b049,0xbc85dc19, +0xbca67af9,0xbc0005fd,0xbc96a9f1,0xbc80d774,0xbcb4d2ae,0xbc72945a,0xbb1ae7d4,0xbc0f5e14,0xbc461a25,0xbc030a8e,0xb986eb0e,0x3a87e818,0xb966add7,0x39f975f2,0x39597aa1,0xbb39be96,0xbb34fe26,0xbb2e5336,0xbb8e8b63,0xbaa7eb72,0xba5fe308,0x39b3ef89,0xb827bbf8,0xba8f077d,0xbb86ae84, +0xbb02c3f6,0xbb7cd43e,0xbbf994c4,0xbb6543ad,0xbb289230,0x3bca8590,0xbbf55570,0xbc381fd0,0x3a84a024,0x3a3bef0c,0x3b2caff6,0x3c5b9ae2,0xbc48efdd,0xbbbb5a90,0xbc15e964,0xbc814146,0xbc3c70af,0xba43eb1a,0xb98867db,0xb9c031c3,0xbb2d0451,0xba7eabf6,0xb9a1605c,0xb90664b9,0x36c17063, +0xb97735ca,0xba74878f,0xbb1a0b03,0xbb409e3f,0xbaa638a9,0x398066ce,0x3a0cf4fc,0xbb1155a4,0xb88ffdd3,0xbab5d2eb,0xbb67d531,0xbbb04de5,0xbbbd3c16,0xbbf62319,0x3b177fae,0x3b8834ee,0x3c567fbf,0xbc6a926f,0xbc9828fa,0xbb40185f,0x3c1e553b,0x3c9b9a33,0x3cd34c09,0x3b374c67,0x3c066bcf, +0xbba04e93,0x3b51a50f,0x3bd5a393,0x3c216334,0xba519829,0xba82f464,0x3ba77a3f,0x3ac440bd,0x39be0ed8,0x390a1df4,0x395400ce,0xba69290b,0xbb18ac50,0x3a402edd,0x3b5c51d4,0x3bd78bee,0x3b8a8f75,0x3b833f6b,0x3b85abe6,0x3b980f33,0x3bce7c0e,0x3bdebf7e,0x3c0855d7,0x3bb20458,0x397d1735, +0xba80e789,0xbb295721,0xbb68532b,0x3aa55b77,0x3b82ef67,0x3b0436f1,0x3c3ea4b4,0x3c5563f9,0x3c269df1,0x3c2c68b6,0x3bee7bb6,0x3c136b05,0x3a8868b4,0xba76c4d4,0xbaf98301,0x3aeb7ba9,0x3a8fdd74,0xbb22fd8e,0xba571335,0xba92bda8,0xb6369583,0xbace28c2,0xba6eb305,0xba13380b,0x3a0fee29, +0x39455103,0xbb0fb04f,0xbba28d02,0xbbdb552b,0xbbf4bc7d,0xbbc73d12,0xbbc98353,0xbb882ad1,0xba930063,0x3af8f9ca,0x3b89f6c8,0x3bb136ce,0x3baee7ed,0x3bb23908,0xbb0d2092,0xbbb3fe0a,0xbbd5b8e3,0xbbf831a9,0xbbb34db4,0xbb0a45ff,0x3be1a76c,0xbc273bc7,0xbc3a6bf6,0xbc07549c,0xbbc7cdbb, +0xbb8797d3,0xbb7b7b10,0xbb3051fc,0xbad27b05,0xba8231d4,0xbaeabed8,0xbb036c7c,0xba1343d9,0x3ab7f1b6,0x3b2f169c,0x3aeefb8c,0x3712b95f,0xbad46b7f,0xbba7928d,0xbbd015e7,0xbbb32fd4,0xbb53cdac,0xb99eac30,0x3acc4e5a,0x3bd526ac,0x3c1885cd,0x3c3e2c43,0x3c671715,0x3c74ea59,0x3c73eb89, +0x3c5d840c,0x3c29c9ee,0x3ba9d35e,0x3b371d89,0xb86f5fb3,0xbb98af7b,0xbbe19b0e,0x3a82f15d,0x3b5fc415,0x3b4eb86d,0x3b6040f5,0x3bb7f318,0x3bcff553,0x3bd53b63,0x3b9e4e62,0x3baacb00,0x3bba21de,0x3bc92fd1,0x3bbc9aef,0x3ba51b29,0x3ba3bded,0x3b1687a1,0xb915ec10,0xbb6a974e,0xbb7a2b19, +0xbb89deb5,0xbb8a373d,0xbb733a38,0xbb3b5f2a,0xbb1a6c46,0xb9906992,0x3ac0a0d0,0x3b3588fe,0x3bbc57b8,0x3c09baee,0x3c37926c,0x3c2741d1,0x3c1630ab,0x3c0cd07f,0x3bc83458,0x3b8bf224,0x3b58b8db,0x3afdd3a8,0x3c18adf3,0x3c0da6b8,0x3c0f5054,0x3c084876,0x3c020bd3,0x3be389de,0x3bc91edd, +0x3bc74bcb,0x3bd96b42,0x3bc8b9d1,0x3beab3c1,0x3b9043ab,0x3b47390d,0x3aef248a,0xb9fd717c,0xba9dfa80,0xbb55cbcb,0xbb3600c5,0xbb160efd,0xbb3985cc,0xbb440459,0xbb620c18,0xbb7c73bf,0xbb815f75,0xbb8da4ac,0xbb91369c,0xbb052f58,0xba4a8756,0x3ad24c94,0x3b2b6b5a,0x3b89690e,0x3bb5e242, +0x3bd25bd9,0x3bff044f,0x3c0e3e2a,0x3c139574,0xba2de294,0x3a0b96cb,0xba478dd2,0xba1e3fdf,0xba924b56,0xb9170f1e,0xb86d4d2f,0xba1e735e,0xbb0e79af,0xbb740b65,0xbbae53ad,0xbbbbe20b,0xbbc52643,0xbbe57b90,0xbbc872c5,0xbbb8d900,0xbbba278b,0xbbbbe46c,0xbbd59871,0xbbc9c32e,0xbbb6d2ee, +0xbbaadfcf,0xbb96ed0f,0xbb8e446b,0xbb6be754,0xbb379594,0xbb66c4fb,0xbb3706be,0xbb3f3177,0xbb3c0591,0xbb266422,0xbb195d8a,0xbaee8005,0xbb2b8f4a,0xbb03db33,0xba948fbf,0xb9f206e2,0xb93ddf6e,0xba16ccc9,0xba654ecd,0xbaad6fb0,0xba49cc8e,0xba9b61fc,0xbaa99be1,0xbacf652a,0xbacd12ea, +0xbae2dab5,0xbb0e0aeb,0xbb37b483,0xbb56db85,0xbb3462d4,0xbb3f6e6f,0xbb674a5b,0xbb4fe5b7,0xbb43147c,0xbb4b1e0c,0xbb535777,0xbb622b4e,0xbb6e0e02,0xbb7e7962,0xbb847506,0xbb83d0c8,0xbb81db18,0xbb5c0add,0xbb4bf406,0xbb2bbf59,0xbb07b6de,0xbad51ad4,0xbaa18f2f,0xba8d5c98,0xba0b20ce, +0xb98e515f,0xbbb57ff9,0x3a6884db,0x3a5fbdf6,0x3a6b250f,0x3a27f2fd,0x39ea56bf,0x37e1c96a,0x3987dd98,0x39229d91,0xba04df9c,0x39267d92,0x399a8c07,0xb90a7449,0x39ab0184,0x399a2412,0xb95b50ea,0x39965a3c,0x3a023cb7,0x3a39233b,0x3a2e19f6,0x3a43ee30,0x3a6699df,0x3a8f71a3,0x3aa23324, +0x3ab7eae2,0x3ad2463d,0x3ab70079,0x3a1eab02,0x3a219757,0x3a1cc6e1,0x3aa19029,0x3a53bb41,0x3a070f23,0x39449f9d,0x3a61967a,0x3a746c23,0x3a7bbe22,0x3a580a18,0x3a1f09a7,0x3a81d1b4,0x39e52ba3,0xb93ebaae,0xba99ff90,0x39effc1e,0xb9a2cc7c,0xbb717de5,0xbb0b28c9,0xbb2c7f51,0xbb72705e, +0xbb243c1d,0xbad7032d,0xbb170157,0xb9a01b81,0xb88bd04a,0x39877713,0x3a58be2e,0x3a8ee731,0x3aa471ae,0x3acc59e6,0x3b0f0ad0,0x3b603b18,0x3b5fce68,0x3b455379,0x3af72d13,0x3b02f937,0x3b2f28e3,0x3b898727,0x39e78ec8,0xba3d0b32,0xb8bd9b40,0x3b3e3942,0x3b80038b,0x3b70b0fb,0x3ad96fb9, +0x3ae22ed3,0x3b1437d1,0x3996e8c4,0xba21b877,0xbb4ae753,0xba7a55ca,0xbaa74282,0xbbe484b1,0xbb642743,0xbb6a343f,0xbbcca74a,0xbb1ea8ac,0xbb25a16d,0xbba01320,0xba502d43,0xb9b74249,0xb8d52c0c,0x3a751a5d,0x3acbdf6e,0x3b33a147,0x3b623db8,0x3b9a0776,0x3bc4e399,0x3bdecd33,0x3bb78a24, +0x3adfd700,0x3b185b3e,0x3aed7b79,0x3bca3108,0x3a7f5e13,0x390e073d,0xba514bf8,0x3b84a9ba,0x3b9f48c5,0x3b860102,0x3b2ceb7e,0x39926858,0x3b050df8,0xba56da97,0xbaf423ab,0xbb96e663,0xba1621cd,0xbb15efa9,0xbc4974d1,0xbc1f04ef,0xbc4bfd6a,0xbc54b561,0xbc139875,0xbbc10b25,0xbc0dd57d, +0xba81b892,0xbae6b474,0xbad95a97,0x3aaf9344,0x3aec074c,0x3b39849b,0x3b755746,0x3bacd811,0x3c0e1a61,0x3c20bc12,0x3c170053,0x3b597f68,0x3bad23a6,0x3bc0643a,0x3c4789aa,0xba55e07e,0xbaf27df9,0xba801193,0x3c00e68a,0x3c272005,0x3c0f5a39,0x3b758f48,0x3b088cb8,0x3b51ef1c,0xba50dd6f, +0xbb2f1956,0xbbd1ef13,0xbb0e46d9,0xbbc53372,0xbc3521f3,0xbc07a8f6,0xbc0f1d4c,0xbb0ba9df,0xbb2ae873,0xbb44669b,0xbbd20713,0x39d8bad0,0x3a6170b9,0xba88335a,0x3b10c2b0,0x3b897692,0x3bbf281d,0x3c03c53a,0x3c25060d,0x3c4e4b0f,0x3c63000c,0x3c2a57ef,0x3b220435,0x3ae3bf0c,0x3b55db54, +0x3c317d7c,0x3b0bca74,0xba1ce804,0xbab69a70,0x3c05826b,0x3c1b2a04,0x3bc29dd7,0x3b7238cb,0x3c9c6132,0x3c5b6462,0x3c67bc3e,0x3c58b824,0x3c0cd911,0x3c7a7c57,0x3c89cec7,0x3c571a4a,0x3c320295,0x3b35592c,0x3a949648,0xb91b5f62,0x36868378,0x3b9719d3,0xbac79246,0xbb5485a8,0xbc8beb46, +0xbc8e95d7,0xbca43a5d,0xbcac5084,0xbcbbbd67,0xbcac748f,0xbcca5ac3,0xbc8cfc1b,0xbbd7c876,0x3b6af2e6,0x3c460c02,0x3bff0e24,0xbb66d483,0xbb90322d,0xbb97b3a0,0xba492f98,0x3a52cc7e,0x3ba0ef1d,0x3bd367e2,0x3c9645ed,0x3755de75,0xb9342f3a,0x3b9541bb,0x3bb09f88,0x3c54e925,0xbc1cc462, +0xbc7dffc2,0xbc067946,0xbba3cfa7,0xbad76e53,0xb9de5df1,0x395f1515,0xba855518,0xbb856690,0x39d36fe5,0x3b1d5f0c,0x3b4b999c,0x3a926b90,0x3b46b857,0x3c0a218a,0x3c268726,0x3c4dd8ae,0x3c3077ea,0x3c263d2d,0x3b1656ac,0xbc1b9de8,0xbc9492ba,0xbc8a7a73,0xbbd98692,0x3c0ccfa1,0x3c37dafe, +0x3b45bdab,0xbc27ae0d,0xbc9719d0,0xbc961452,0xbbc2886a,0xbc94d960,0xbc0f3ae7,0xbc645d38,0xbc2c2b34,0xbc174386,0xbb5866bd,0xbb90961c,0xbbc326b5,0x3b0df3bc,0x39d378b8,0x3972ff73,0xb90f0a87,0x3a2b866e,0xba36d751,0xbafde0af,0xbb1d8b91,0xbb923e24,0xbb3bde35,0xbb6be2ac,0xbafa9953, +0xba44c64c,0xba773fe7,0xbb52aa6e,0xbb134b6b,0xbb7de452,0xbbe70672,0x39fee574,0x3aa1d4b6,0x3aa56365,0xbbe8c898,0xbc0c951f,0x3ba1eec6,0x3ad782b0,0x3b20985f,0x3ca81ac3,0xbc4f1950,0xbb23f6c9,0x3c1c9ffb,0xbc202c79,0xbc3b8fb2,0xbc707145,0x3ad74d07,0x3a72638e,0xbb6ce6b6,0x395ca393, +0xba3925fe,0x39e279f9,0xb8bef457,0xb7684330,0x39dc86a8,0xba9b2d89,0xbb105145,0xbabaea33,0x39a27e94,0x38893647,0xbb100d77,0xba6d4223,0xbb0cc5ef,0xbb8945ab,0xbb99bae9,0xbb838e7d,0xbba9a26c,0x3beed330,0x3bd7a0f1,0x3b89ddb1,0xbc7c9154,0xbc657a16,0x3c05156b,0x3c622854,0x3c964913, +0x3cb9d8ca,0x3a31a484,0x3c6a0279,0x3c56c751,0xbc341efb,0xbc5e8b56,0xbb59bf89,0xbb94c838,0xbb27fff5,0x3a89f303,0x3a09c6d2,0xb84def31,0xb9f8fcfe,0xb846221c,0xb980a4b9,0xbaa7ab26,0x39a50bae,0x3b11ef54,0x3bda784b,0x3b9fa81f,0x3bb64ea2,0x3bd15517,0x3bcab988,0x3bd526be,0x3b8f66bb, +0x3b9cc7e4,0x3b3bb224,0x38861a83,0xbb726838,0xbb9d728a,0xbb026ff8,0x389c418d,0x3bab8eea,0x3c1ac074,0x3c7eace1,0x3c456b57,0xbb0a7915,0x3c303b7b,0x3bad8722,0x3bfb2f94,0x3c16034d,0x3c1c6fe6,0x3b6ad413,0x3b3164e7,0x395eeac4,0xbb1db9b9,0x374421bf,0x39598b57,0x3a874d11,0x39dd39af, +0x38ef57b9,0x3927a0cd,0x3a98e5dc,0x3afd8100,0x3adbf4b2,0xb8cf292f,0xbb06a728,0xbb8d5770,0xbb4432be,0xbb566295,0xba98bb7f,0xb9e00dcb,0x3a0b47cf,0x3b10fa04,0x3abe65d8,0x39bf5747,0xbada1f4c,0xbc09deac,0xbc2196a0,0xbc33c689,0xbc25eeb8,0xbb9406dd,0x3aa95c15,0x3bf3b894,0xbbb6b4fd, +0xbc0c0534,0xbc10a16b,0xbc049f13,0xbbb91b00,0xbba00b22,0xbb68d636,0xbb117a4f,0xbaa0ab59,0xbad7977b,0xbb00fd86,0xbb0e9aa7,0xba3e0ab4,0x3a8702cb,0x3affb829,0x3a890225,0xb810bdf5,0xbb7fde21,0xbbbdf0f1,0xbba045f4,0xbb64679d,0xbaaefb79,0x3a29d0ff,0x3ba9ed0d,0x3c017b1c,0x3c20f428, +0x3c2e05fe,0x3c2d099f,0x3c248555,0x3c0227c4,0x3b876d87,0xbb113450,0xbb83e804,0xbbc37819,0xbbfe16c3,0xbbb0f7f5,0xbb8184d3,0xbb135371,0xba7552da,0x38e8236d,0x3ae24e33,0x3b0347d8,0x3b1f1ac8,0x3a154c60,0x3af45798,0x3b283b5c,0x3b83d1f8,0x3b7e5521,0x3b9521d1,0x3bb2fffe,0x3b63aa43, +0x3ac24509,0xbabef483,0xbb1d4649,0xbb59b348,0xbb8a0561,0xbb7bca65,0xbb3dd2c4,0xbb092bdf,0xb9047e9a,0x3ab8458a,0x3b301e11,0x3b9fa01b,0x3bd91cef,0x3c04bea3,0x3bdb6c7b,0x3ba4b36b,0x3b48f50a,0xb7bda4f2,0xbaa95a76,0xbadb5164,0xbb3f2410,0x3bc223e2,0x3bbf9380,0x3bc1c3dd,0x3b9cfff7, +0x3b9277c1,0x3b7befbd,0x3b431901,0x3b3e9947,0x3b9b31b0,0x3bb1a6cb,0x3bf8281d,0x3bb4afca,0x3bad48b8,0x3b9c091e,0x3af5ddba,0x3a85e18e,0xba6585ca,0xba802e67,0xba70d77f,0xbb06c214,0xbaeba752,0xbb123e38,0xbb1f4a7f,0xbb2dcd74,0xbb403c36,0xbb4af925,0xba55905e,0x39def627,0x3b31c7aa, +0x3b6b951c,0x3bad25d0,0x3bdf4f5c,0x3bf07619,0x3be1afa1,0x3bb4445b,0x3bbb54fc,0x3b76f6cc,0x3b91c554,0x3b875193,0x3b92b133,0x3b82e568,0x3ba15901,0x3b9eea8b,0x3b8635dc,0x3b222042,0x3a00f509,0xbaa2168e,0xbacd7d22,0xbb027b7f,0xbb2a54ae,0xbb1c2048,0xbb2fa3c5,0xbb5b4773,0xbb79d9e5, +0xbbb04829,0xbba66770,0xbb9d30e4,0xbb94bc81,0xbb86d5a2,0xbb8000de,0xbb5970bd,0xbb331714,0xbb367c18,0xbaebf495,0xbac8b9d5,0xba84459c,0xba3b245d,0xb9a2c1ce,0x398d479e,0x397e2326,0x3b0743e0,0x3b5cef08,0x389a149f,0x3a01e1a3,0x384ed76f,0xba017393,0xba836019,0xba324ecc,0xba8fce13, +0xba97ff8f,0xba922d42,0xba406863,0xba281957,0xba71911c,0xbabb81a6,0xbaeb91cc,0xbab1a184,0xbabed85d,0xbb22809b,0xbb0bbef8,0xbafe3e6e,0xbb05f503,0xbb0d4585,0xbb18d408,0xbb243e01,0xbb332160,0xbb3d2c7b,0xbb3f521a,0xbb34d9ce,0xbb0eccc3,0xbaf43281,0xbaad603f,0xba3f0094,0xb7cc237b, +0x398f2411,0x37d0f856,0x391757d6,0x3903050f,0xbb7df485,0x3a29a71e,0x3a31c174,0x3a52a9e4,0x39f822a5,0x39913aa2,0xb8dcaa31,0x39a44886,0x3936e73a,0xba3e3265,0x3914af64,0x3990d581,0xb9d29aee,0x38ebff74,0x38c456fd,0xb9835057,0xb7a6d0b2,0x392f3b46,0x3a03aa15,0x39d8985d,0x39fb5ee6, +0x3a36ab00,0x3a6825d2,0x3a82bb57,0x3a958696,0x3a92607d,0x3a6cf80b,0x39ac1196,0x3991a87f,0x39cf910a,0x3aa49fa3,0x3a2ea7f3,0x39a7a081,0x38858006,0x3a38b015,0x3a39c150,0x3a1470fc,0x3a1ea061,0x39e6ec25,0x3a84a4c0,0x3954abf6,0xb9c34e84,0xbaba4e46,0x3a01d7ba,0x36597fd5,0xbb5cfe5f, +0xba8d9603,0xbaddc156,0xbb555455,0xbb04dc79,0xbabcafcf,0xbafbebf9,0xbaa5b856,0xba86c96c,0x395aba56,0x398e92fb,0x3a54915f,0x3ab7194e,0x3ac96ab4,0x3b0856bb,0x3b4dc025,0x3b2ffe64,0x3b0ecc60,0x3ab4394b,0x3a920ff9,0x3aeb6536,0x3b7d040f,0x37b2f3f1,0xba80620e,0xb96bac3c,0x3b322a92, +0x3b695395,0x3b2dcd7b,0x3aa44f36,0x3abe2ed5,0x3b170ac1,0x379b1f5f,0xba3d9596,0xbb42365c,0xb943c6e7,0xb9a9203e,0xbbdcc179,0xbb074805,0xbb0068cf,0xbbd6394d,0xbb019e6d,0xbb23474a,0xbb87762e,0xbb0b36eb,0xbaf7e4a6,0x38142efd,0xb8449f8f,0x3a6f62ea,0x3b287ae2,0x3b51f9c3,0x3b892740, +0x3bab2abe,0x3b9e72ca,0x3b629efe,0x3a2f4e03,0x3a13557f,0x3a45166a,0x3bd6f110,0x3a06d3b7,0xb9b5ea1e,0xba3449aa,0x3b758595,0x3b8796b9,0x3b20718e,0x3b0274e2,0x390bc7cb,0x3b19eedc,0xba61d254,0xbb07c369,0xbbabfe8c,0x3874eb8d,0xba8fcc32,0xbc3a4145,0xbbce2410,0xbc0b1340,0xbc3cd0f2, +0xbbd35d3c,0xbba4842a,0xbbe98ff1,0xbb6dcc35,0xbb8fab6e,0xbac849ab,0xb9c837a9,0x3aa830e0,0x3b692440,0x3b743477,0x3baf2434,0x3c048511,0x3bf5c83c,0x3bd72f45,0x3aef1642,0x3b497e6f,0x3b6f6eaa,0x3c398ba2,0xbac7dd15,0xbb0cc34d,0xba6f6b33,0x3bf8a2a5,0x3c1a974c,0x3bc593ee,0x3b3d6fcb, +0x3af6200b,0x3b5060c9,0xba95bce2,0xbb37ca62,0xbbebe2b6,0xb9748f1c,0xbb458bdc,0xbc0fa675,0xbb5340ea,0xbb50e460,0x3a815102,0x39c52ac4,0xb99f0875,0xbba41188,0xbac466ca,0xbb14c599,0xbb11901e,0x392a9aad,0x3b1dc4ec,0x3bbe7c44,0x3beec521,0x3c150834,0x3c30df44,0x3c1d3483,0x3bbe3190, +0xb98f95c4,0xbb2382d4,0x3aaec0f5,0x3c4535fd,0x3aaff320,0xbac3ab0d,0xba5bce8a,0x3bf8b644,0x3bfd2757,0x3b3267be,0x3b0d4d44,0x3ca607e2,0x3c7529ab,0x3c71fb62,0x3c61990a,0x3c3c97c4,0x3c5cf32d,0x3c37933f,0x3bca66c2,0x3bc6cbdb,0x3a56b24b,0x3a10ca74,0xb9c3e16a,0x3a468535,0x3aa48937, +0x3b264b35,0x3b4ebd42,0xbc5f3f35,0xbc6b9ba1,0xbc90b1d5,0xbc9349bd,0xbcb0e2a7,0xbca225e2,0xbc9c1093,0xbc332542,0x39d2d7f0,0x3c8846b3,0x3c7b64f7,0x3bcf1b8a,0xbbea7e6d,0xbbae3c78,0xbb6a4ee9,0x3b872120,0x3a1934fa,0x3bdd6eca,0x3c803ab9,0x3cb5320f,0x3a211fdc,0x3aacd22d,0xba6bfa0d, +0x3a724d18,0x3c3f2d4d,0xbb9884ab,0xbc05d36c,0xbb8ead94,0xbaf193af,0xbaac8d76,0x392b36c1,0xb95797f8,0x392368be,0xbaee18b7,0xba317f24,0x3a63557c,0x3b158f12,0xba70f779,0x39d36370,0x3b96cb44,0x3c0c5f32,0x3c3591ab,0x3c1a2dc8,0x3b826240,0xbb53eb01,0xbc3996c1,0xbc9c4ad8,0xbc5fbb30, +0x3b713f74,0x3c1d2307,0x3c0f673d,0x3b790a43,0xbc48da11,0xbc9f28ff,0xbc71f14f,0xbbbae997,0xbc1b747c,0xb922f004,0xbbf0ca80,0xbbf9a81a,0xbc15e215,0xba658a9a,0xba7c25a5,0xb9dceb2f,0x3ad4eb18,0xb89e0831,0x396478f8,0xb9335e7e,0x38cc4184,0x39a24f37,0xba155b55,0xbaac137b,0xbb4db4fd, +0xbb26ad37,0xbb462d1e,0xbadd072d,0xba25e19e,0xba5a7835,0xbac12f4f,0xbb18ef9d,0xbb2fb8a6,0xbb31c199,0x3b942231,0x3b953b39,0xbad89fce,0xbbb85594,0xbb985637,0x3c0a3253,0x3bb13e32,0x3be2010f,0x3cab118a,0xbbaa155c,0x39a4b7cc,0x3cbd4867,0xbb877218,0xbc336b16,0xbc9fcf0e,0x3aca7df8, +0x3a45ce3d,0xba9b0328,0xb800aae5,0xb9bb0cf9,0x3995a228,0x38937547,0x37233b5a,0x39b6eb05,0xb7fe1df0,0xba5c3a40,0xba6b2d7b,0x3ae8ed57,0x3ae18aba,0x3a04d339,0xb9a226bc,0xbb159610,0xbb699327,0xbb83125c,0xbb0155c6,0x3a6d8360,0x3c39d927,0x3c0961d1,0xbb8c4b15,0xbc37ac32,0xbbc1439b, +0x3c94b60a,0x3c6a083b,0x3c6642ed,0x3c5d91e1,0xbad2f3fd,0x3bd657fe,0x3ccf9d05,0xbc74c26d,0xbcdb042c,0xbc93b221,0xbb9aef84,0xbaafcc85,0xb9b6fe23,0x39af90f1,0xb8dba628,0xb98fbe01,0xb9647ede,0xb9a4615a,0xb9a6e737,0xb95e6590,0x3a08a384,0x3ba96601,0x3bb21904,0x3bcf80b8,0x3bfe1707, +0x3bcc5284,0x3bb30086,0x3b0e331e,0x3a4b15e6,0xba210a4b,0xba8dc334,0xbbad509f,0xbbab45c1,0xbaced221,0x3b25ecca,0x3c1ce2ff,0x3c9b8c9c,0x3c1e9084,0xbb01e2d4,0xbc802559,0xbad2d2d7,0x3bf9ccb6,0x3c2c1957,0x3c9926f3,0x3cb6bc10,0x3c107c5f,0x3b65332f,0xba26ff94,0xba4643b6,0x39b90077, +0x39776544,0x3a14a121,0x3a320407,0x3a3dd39b,0x3994b225,0x3ab6e927,0x3b4a85f2,0x3b90e806,0x3ba34dc0,0x3b668e90,0x3a1ba849,0x3a75c850,0x394b243e,0x3b13cf91,0x3aee2660,0x3aacbad3,0x3b04cf0e,0xba0acf5f,0xbb1d9f3d,0xbba1be3a,0xbc2e09d4,0xbc34035a,0xbc45e323,0xbbfaba20,0x3984caa2, +0x3bb293cc,0x3c012730,0x39bbb89c,0xbad75489,0xbba163d4,0xbbdcf635,0xbbb719aa,0xbb970804,0xbb58bcf7,0xbb0c848b,0xba4b82ba,0xba51dd90,0xba91fe35,0xbad41291,0xbab180ec,0xb9cdfcd1,0x3a8f499e,0x3aab2ff3,0x3aa5d44f,0xbaff2d67,0xbb805327,0xbb3ca989,0xbb30d7e6,0xbafd74f5,0xba85d5bf, +0x3b203ba1,0x3b97159d,0x3bb9dd4a,0x3ba90fb7,0x3b9cec6b,0x3b8b408f,0x3b6a03ac,0x3aa86c22,0xbb7ab40b,0xbbb97504,0xbbf38ac4,0xbbbf8b95,0xbb0ef0bc,0xbba83ffe,0xbbb06461,0xbb5b81c7,0xbaf2f152,0xba2583ab,0xba91e0bc,0xba44b32b,0xbb0007ea,0xb9ab02c2,0x399aaa35,0x3ad58602,0x3ab707b7, +0x3b2e6bd3,0x3b6d772c,0x3b61c2ee,0x3b27bdd8,0x3a788865,0xb9fbdc88,0xbad8d870,0xbb597ebe,0xbb2aeda1,0xbae23d8d,0xba30346c,0x3a982508,0x3b2db263,0x3b867efb,0x3bab3f88,0x3bc42041,0x3bc2a687,0x3b8e615c,0x3b06227e,0xba0464b9,0xbb4133aa,0xbb6b89bc,0xbb895a9e,0xbb926a0e,0x3a90c83e, +0x3adfd105,0x3af6253e,0x3a9f5f73,0x3a9cbd63,0x3ab3107a,0x3a9fa1de,0x3abdb4ff,0x3b5b0240,0x3b91e4e7,0x3bd9079d,0x3bbe685c,0x3bcec207,0x3bd0ec54,0x3b801ad2,0x3b556309,0x3b056eb1,0x3ab24e69,0x3a02087e,0xba252c31,0x39b078a4,0x38fd1d1c,0x39d6d607,0x39f1820c,0x3a341cc3,0x3a76cdb3, +0x3b163f3d,0x3b4ab45f,0x3b993304,0x3b981db7,0x3bb270a0,0x3bc3504c,0x3baf77d5,0x3b569952,0x39b4d5e9,0x3a4dbe6c,0x3bdb1d33,0x3bd5862c,0x3bd5ffb6,0x3be78585,0x3bdcccf2,0x3be9a2b9,0x3bdd66fa,0x3bc596ca,0x3baac50b,0x3b8068b8,0x3b3bceab,0x3b3b8910,0x3b31f3f8,0x3b3b4d50,0x3b18e9ab, +0x3ac1d3a1,0x3999c0b1,0xb923c453,0xbb16e807,0xbad018e3,0xbadb99ad,0xbabeec4c,0xbaad6b27,0xba996d0f,0xba7849e9,0xba5e00a5,0xb954815a,0x3a034685,0x3a8099ca,0x3af14ca9,0x3b0d5bd4,0x3b3e5a2d,0x3b5e1506,0x3b888b63,0x3bc513fc,0x3bdf879a,0x3a918ebf,0x3acba42f,0x3a985e15,0x39f226ff, +0xb8bb0241,0x39f87482,0x39336d88,0xb693b481,0x396ffc36,0x3a31255e,0x3a6d81ce,0x3a5d7b84,0x3a14b981,0x39d8f716,0x3a704d9d,0x3a913ca9,0xb9ded841,0x38ccb588,0x39e1c1fb,0x3a016c00,0x39d04579,0x39c6a07d,0x399f6c63,0x39562020,0x3909fa36,0x38a69130,0x3994b250,0x3a1e1067,0x3a632b1d, +0x3a9d8bf8,0x3ac1dda6,0x3b0291d9,0x3afdef5e,0x3abdfd70,0x3a9670e0,0x3a7bd395,0x39980dd2,0xb93c159f,0x38e4ee2c,0x3967cfb8,0x380d6098,0xb733dad7,0xb968176e,0xb89719d3,0xb8269b82,0xba26e16b,0x388a8127,0x37c15715,0xba398a81,0xb9a48871,0xb91773fe,0xb8eff8fb,0xb9ed138b,0xb9df60ba, +0x39cbb047,0x37c9a6da,0xb8b48c88,0xb8826c68,0x392452be,0x3977bb92,0x39d5a7fa,0x38caf1fa,0xb8decf67,0xb9c4ffde,0xb9d7df3f,0xb93af50f,0x3a3a67a0,0x3822f84c,0xb9999b49,0xb9f1bf3b,0x38c07570,0x383d0c42,0xb9553dc0,0x36eb7434,0x3896c7da,0x3a1ac5b1,0xb823acb6,0xba43e8c5,0xbabfdd49, +0x382efc15,0xb9331ad3,0xbb38265d,0xba417de1,0xba87a6e4,0xbb10003d,0xbae05595,0xbaeb209c,0xbac297b1,0xbb095141,0xbb02b355,0x38fe8476,0xb9cf3dcc,0x397b2b7b,0x3a04cbbe,0x3a3897aa,0x3a9a6948,0x3b08ba02,0x3a88ce8b,0x3a0e4f88,0x393b9421,0xb8e61a52,0x39ed91e0,0x3b23a67c,0xba656120, +0xbac14a7a,0xba0cb3b9,0x3b067fc1,0x3b2f7206,0x3aacff26,0x3a24c36d,0x3a6b60d9,0x3ae678eb,0xb8433844,0xba53eec2,0xbb2b2b6a,0xb857d7b8,0xb70f42cd,0xbba63c4c,0xbaa13fe8,0xbad82bd9,0xbbc75061,0xbb4a0eb7,0xbb4dd06b,0xbb261677,0xbb5c539c,0xbb55e3de,0x39c1a9ea,0xba65ff8e,0x375e28d8, +0x3a7ec5ee,0x3ae951e5,0x3b20c97c,0x3b64a03b,0x3ad52d86,0x39876f2b,0xba886ac9,0xba92171b,0xb9b95300,0x3badebf3,0xba10918e,0xbaa5571c,0xba587e43,0x3b360084,0x3b3781c2,0x3a2cf7b0,0x3a9a9409,0x39b75dc6,0x3b15c7fb,0xba27904e,0xbb0ea990,0xbb98a629,0x3922c7ce,0xba0b97b1,0xbbf6310c, +0xbb65d3ef,0xbb86ea94,0xbbbae645,0xbb5cb786,0xbb785328,0xbb8628ad,0xbba46794,0xbbc8c0bc,0xba413126,0xbad571d6,0x39b1ca54,0x3b1115dd,0x3b1855f7,0x3b8286b1,0x3bd32e0d,0x3b5495eb,0x3b0d129c,0xb9978cac,0x3a69dd7b,0x3aac0af4,0x3c06dffa,0xbb221ab8,0xbb231ce8,0xb9cdb3b5,0x3be037f7, +0x3c04a684,0x3b655531,0x3b1749cf,0x3ac05f72,0x3b264a0c,0xba28a22e,0xbb1a02e4,0xbbc35c8d,0x3a15ce48,0xba751189,0xbb829b98,0x397ad3ca,0xb9ce3308,0x3aba566c,0x39fa603d,0x3a81c77a,0xbafbc28c,0xbaee38b3,0xbb726228,0xbada5b54,0xbacff780,0x39dfe4b1,0x3b4c1441,0x3b960189,0x3bc72351, +0x3bf988b9,0x3b5e41fd,0xb987be37,0xbb6da029,0xbba530aa,0x38ce8a33,0x3c2a89d1,0xb986ea2f,0xbb2603db,0xb9e333b2,0x3bcb8118,0x3ba87a48,0xb757d349,0x3a76d5f9,0x3ca38d37,0x3c56b61f,0x3c4d7d4d,0x3c3c0509,0x3c2bd797,0x3c0de5b3,0x3b991913,0x3a9d3e8c,0x3a8655b5,0xb9cd3420,0x388460ea, +0xba236c20,0x39aa8bd3,0xb9acf2fb,0x3b3d79a2,0x3bb81bbe,0xbbdda103,0xbc1f1181,0xbc58ce0b,0xbc5a86c4,0xbc912bd6,0xbc820336,0xbc3cc395,0xbb4ff037,0x3beb8bfc,0x3cc80973,0x3c87d34b,0x3b976008,0xbc199094,0xbbc1dcfa,0xbb638429,0x3ba5ed60,0xb9195cd3,0x3bff4556,0x3cae6e65,0x3cc5f181, +0x39bbde8c,0x3b40e6e6,0xbb05b076,0xba3ffdf9,0x3bdda973,0xbaa11da5,0xbb1e9aed,0xba1b252d,0xb9b59d05,0xb84fa1d3,0x392810ef,0x3903f568,0x38b42fcd,0xb958a83a,0xba7970e0,0xba4f7336,0x3ae1f6fe,0xbb199c64,0xbb1f64c5,0xb959ed04,0x3b93379f,0x3bedd8fc,0x3bdb976f,0xb9d51338,0xbbddacc1, +0xbc6ff113,0xbc9686af,0xbc1b4cfb,0x3c378083,0x3bf0b09e,0x3b6b9a69,0x3a8e1c21,0xbc81b9b6,0xbcad459d,0xbc3693ce,0xbbcdf4b1,0x39fc4ebe,0x3c093267,0xba0aafb5,0xbb836aea,0xbbb171ed,0xba857bfa,0x39958c80,0x3a05f8bd,0x36cfd262,0x38994bca,0xb8e092b0,0xb8ad9634,0xb888d855,0x3913eda9, +0x396a3b08,0xb95d34ad,0xba96c7a7,0xba9243bc,0xba864a24,0xba3f5aed,0xb9ef3dfd,0xba87791e,0xb9deaa7f,0xbb16bc8f,0xba9c0bee,0x3b13620e,0x3badfd5b,0x3b89e5d6,0xbb8b75a6,0xbb9546a3,0xbab37e0c,0x3c1645e5,0x3c064f01,0x3c328fb5,0x3c5cf556,0x3af9f700,0xba95dc8b,0x3ca993cc,0x3b22cd6c, +0xbbd5ba1d,0xbc73c551,0xb8dec3a1,0x39a52b1f,0xb996b3a1,0xb836392a,0x35cacf1e,0x38796c1b,0x389e8191,0x38de9ed7,0xb83873f1,0x377403f4,0x399809a1,0xba0e1f32,0x3b44dc30,0x3b7e310f,0x3b6dbd7c,0x3a285d1a,0xbb0d93ab,0xbb4a1124,0xbb817c96,0xba895a79,0x3bf37967,0x3c2fd7d9,0x3bd4d652, +0xbc403b9b,0xbb92b287,0x3b37922c,0x3ca1f17a,0x3c2992cc,0x3bfc9175,0x3afabf92,0xbbba9dfe,0xbc34bd81,0x3c2d77ea,0xbc5222de,0xbcd1d228,0xbcb35c62,0xbb7a782b,0xba085712,0x398908f1,0xb8b3820c,0x36c7e3e7,0xb8cf5c37,0xb8a88503,0xb97a7dca,0xb4e348d5,0xb97d63e6,0xba2b6f84,0x3b02bde9, +0x3b956d50,0x3bc02409,0x3be0679d,0x3b9ad4bd,0x3b5ac391,0xb8c327cb,0xbb284e40,0xbba73579,0xbbb61d7f,0xbbf76d09,0xbbaf2d44,0xbb4b77c2,0x3bf10258,0x3c51ddd1,0x3c8f4f0e,0xbb7cbd5e,0xbc9e9844,0xbcb49699,0xbc86a96f,0x3c1c3bf0,0x3c9f095a,0x3cdf35ff,0x3cfc5dea,0x3c19f508,0x3b9ca1ac, +0xb9c337cf,0x3961199b,0x38864732,0x370e8a78,0x3938c923,0x3937f676,0x39dc66cf,0x385afe66,0x3a2785eb,0x3b354fef,0x3b9b2b6c,0x3c092e89,0x3bff9de6,0x3baede9b,0x3b8d81dc,0x3b440f9f,0x3b84df27,0x3b5c748c,0x3b14ba83,0x3b1de9c3,0xbb02fd44,0xbb9d26af,0xbbe26c15,0xbc4006e7,0xbc35b046, +0xbc38a78f,0xbba7d0e6,0x3aabf0bc,0x3b72f5c6,0x3b422e0a,0x3b1f4596,0x3b189c4f,0xba6546c3,0xbb410144,0xbb6c6ba9,0xbb34a0ca,0xbb015c98,0xba7878a4,0x389fbeff,0xb877dc79,0xb998fefa,0xb9c52dc7,0xba1ea863,0xba09e511,0x39e01dee,0x3a828aba,0x3aeb83d7,0xb988e716,0xbae9601f,0xbacd63cb, +0xbb0397f1,0xbb103e8a,0xbb26e720,0xba7b2dd0,0xb95b658d,0xba4b67ad,0xbab04fe9,0xba992c7b,0xba7dc3d0,0xb9132d0f,0xba383b39,0xbb7cd2a9,0xbba95736,0xbbd83fce,0xbb4d77b1,0xba57526c,0xbb8b63d0,0xbba9e00e,0xbb685395,0xbb32d1d3,0xbb0cc234,0xbb40237d,0xbb1d4f2d,0xbb1fe085,0xba9bc256, +0xba4276bb,0x392bf4aa,0xb9794ae4,0x3a3d21eb,0x3a830096,0x3b0831ac,0x3b1dacf7,0x3b23c5fa,0x3a8081cb,0xb8fa30ed,0xbaf38149,0xbaa41f39,0xb9e6d0e5,0x3a1d9feb,0x3b01b7f3,0x3b530dad,0x3b975638,0x3b99a967,0x3b90f1bb,0x3b4f3d45,0x3abd15c5,0xba70cda6,0xbb517ab4,0xbb64b3ee,0xbb51b9da, +0xbb88face,0xbb7d2a3b,0xbb65b426,0xbb462c5f,0xbb11e111,0xbb15674c,0xbae81452,0xba425c8e,0xb939e269,0x3952aae0,0x3ae83e2c,0x3b25db73,0x3b8f1c34,0x3b801ccb,0x3ba7a325,0x3bae95a4,0x3b980c2f,0x3b8960db,0x3b7656be,0x3b3cdcae,0x3af9b40c,0x3a7cfdda,0x3b0c76d3,0x3b1005c8,0x3b348fc7, +0x3b57a3d6,0x3b84a4ed,0x3b9c2f71,0x3b909260,0x3b8df8d8,0x3b98dc41,0x3b7111a5,0x3b553edf,0x3b124fc0,0x3a5deb25,0xbad1b62b,0xbb834897,0xbb67b345,0x3bbe8088,0x3ba5f065,0x3bcd6aeb,0x3bcd780f,0x3bd1072f,0x3bcd588a,0x3bbe490f,0x3bba2ea1,0x3bb494f3,0x3bb34e26,0x3bb02e00,0x3bc10958, +0x3bc3ca40,0x3bdc3891,0x3bba88ee,0x3b988923,0x3b7cade2,0x3b56f3ec,0x3ae5da7d,0x3b07c021,0x3ae43428,0x3b021d39,0x3af09c7e,0x3af12d12,0x3ace2d72,0x3a9ad7e7,0x3b0cfd77,0x3b1235a4,0x3b255fd2,0x3b4ccde0,0x3b522a57,0x3b812b7d,0x3b8d7fcc,0x3bb23f89,0x3bcc436b,0x3bc97bcd,0x3ac91e16, +0x3ad4109b,0x3ada8068,0x3abe9c00,0x3aadc2ce,0x3abcdb1b,0x3ad0d22a,0x3ae2d9db,0x3b075e50,0x3b19d415,0x3b247cc8,0x3b2b661b,0x3b2bee6f,0x3b3188f5,0x3b3159cc,0x3b3e9d2f,0x3b0a0264,0x3b179b17,0x3b21a94d,0x3b264f51,0x3b260e7f,0x3b2bf596,0x3b2dc251,0x3b3224b6,0x3b357442,0x3b32227e, +0x3b38b521,0x3b331551,0x3b39c77d,0x3b3c842b,0x3b345d3a,0x3b383567,0x3b1d8cea,0x3affad7d,0x3ac64ba6,0x3aae3ba2,0x3b780869,0xba9804c2,0xba03db05,0xb9d9d15b,0xba137358,0xba17fbab,0xba4a7189,0xba38feff,0xba1b8e05,0xba79d69c,0xba21d2fd,0xba46629f,0xba9ec263,0xba98249e,0xba84520a, +0xb9f8f724,0xba8cde40,0xba91ece7,0xb931247e,0xba2589ad,0xba513f91,0xba63fc7d,0xba2f7ca8,0xba2626ae,0xb9fe1ac4,0xba8b014e,0xba9f025f,0xba929d6c,0xba842d11,0xba368a20,0xb84d0533,0xba2061f5,0xba607c6a,0xba6ab64a,0xba0783c0,0xba1e0c30,0xba735d25,0xba17b0ce,0xb98fed61,0x38b46a5d, +0xba1fab31,0xbaa62f22,0xbaeb5f88,0xba4316e6,0xba491c6a,0xbb08e019,0xba09e82f,0xba682b7b,0xbae79c0b,0xbb0c435f,0xbb1d3024,0xbaa5d3f5,0xbb4adfaa,0xbb3f10b4,0xb9cad80f,0xbaa673c7,0xba4a1fc4,0xba59f786,0xb9e96ba3,0xb8d72224,0x39ee3e8f,0xba88859d,0xbab0b918,0xba9140bd,0xba436b1c, +0xb9c9db7f,0x3a2a700a,0xbacdfc4f,0xbad2229b,0xb9c79977,0x3ac13def,0x3ae1dc0e,0xb88368b3,0xb80a77d7,0x39d21c2f,0x3a7d6c6a,0xb9b04408,0xba8631e2,0xbb21e5a9,0xba2cfb04,0xb9df5946,0xbb3198b9,0xbaa79972,0xbaeff266,0xbb90158c,0xbb8808ea,0xbb87ee08,0xba9aab16,0xbb816eea,0xbb888e7b, +0x3988ed3c,0xbae05deb,0xba95781b,0xba8edfb2,0x38004abc,0x3945dfb2,0x3a801e16,0xbb0f81c3,0xbb4ffd18,0xbb283675,0xbacf6d22,0xb9dbb819,0x3b45eaeb,0xba9be7e9,0xbac4b41e,0xb8f5a3c7,0x3b080f3b,0x3ae00d67,0xba58be35,0x3a1bcb5b,0x3a3a9df9,0x3b080f46,0xba0f59af,0xbb166f17,0xbb6eb177, +0xb993b2d4,0xba019cce,0xbb4a09e6,0xba8d80b2,0xba2a01a2,0xba9553ba,0xba434265,0xbb0c60a4,0xbab2672a,0xbb9d2c25,0xbbce5be0,0xb9ed06f5,0xbb2f5827,0xba9166c7,0xb9dbe256,0x39986cca,0x3ac79130,0x3b6350de,0xbb1771da,0xbb498be4,0xbaf5fe64,0x39c60250,0x3a2d6ec9,0x3b7544ca,0xbb2b44e5, +0xbae5b9c3,0x3ade1115,0x3bd39c51,0x3bddbf30,0x3a7f597d,0x3ae0ff20,0x3a8f8d14,0x3ac3b6f9,0xb9aa7f0b,0xbadd4d53,0xbb7f7dd6,0x39ac59a0,0xb975c2fc,0xb97cc253,0x3a24bba5,0x38d2debb,0x3a3ed6eb,0x39f3ca57,0x39e9489d,0x3920a219,0xb9952899,0xbb4f473f,0xba6635f0,0xbb225796,0xbacef16b, +0xba06b821,0x3aaa3e95,0x3b05a3a8,0x3b3e2c34,0xbb805f4f,0xbbd725a7,0xbbc89ec3,0xbb919113,0x3a7356f8,0x3bdc4f73,0xba923822,0xbb029ed1,0x3abf9725,0x3bae85ce,0x3b4adc7a,0xbaf88b7a,0x39bb5dbd,0x3c94d84a,0x3c24ecdc,0x3c1f7bc0,0x3bee63be,0x3bc1eae1,0x3b577a2a,0x3a0761ad,0xb92b4dbf, +0xb91d53f9,0xb8fe6261,0xb955d815,0xb9b6e93e,0x37c4c16e,0xb9b9e443,0x3a2a5604,0x3b6c24a3,0xba0fe09b,0xbb9c509e,0xbc18450a,0xbc17cc75,0xbc57f386,0xbc2f9b2d,0xbb748c08,0x3bd6bdaf,0x3c6e0987,0x3ce7c41f,0x3c89b62b,0x3b83ff67,0xbbed4ee0,0xbb8c23e0,0xbaf25f04,0x3bcbc2a8,0x3af58ed0, +0x3c1db7fb,0x3cbac2bb,0x3cc0e434,0x3aaa1c9c,0x3b5b8ad9,0xba8bc96d,0xb95bb5cd,0x3b357390,0x398de52d,0xb9c423c5,0x38d9b092,0x37c6fe0a,0x38fc7f1f,0x38c4e148,0x3907b7b0,0x38e11815,0xb73cf619,0xb963d964,0xba978e58,0x3a53d1a1,0xbb001733,0xbb6eb5b1,0xbb6df8c0,0x3aa8221b,0x3b7908d7, +0x3b88902f,0xbb2aa62e,0xbc0a411d,0xbc8a7a83,0xbc700ef0,0xbb80ac64,0x3c8413ca,0x3bba1224,0xb994663e,0xbb50db21,0xbc926be7,0xbca5b647,0xbbd785fd,0xbb969916,0x3bfd2357,0x3c7c5b2f,0x3bbda070,0xb9edd43c,0xbb61b0fb,0xb8fb6917,0x3879a0b3,0x36b0af06,0x37033829,0xb82fb90b,0xb7c133f4, +0xb8d532ef,0xb77fe612,0xb81d9e45,0x3957093b,0x391a5e00,0x38cdec7f,0x38b129bb,0x3a3f05ec,0x39039b4f,0x3942f805,0xb9a8855f,0x3a146aaf,0xba352500,0x3aa82a64,0x3bd6f78e,0x3b861c45,0x3b053630,0xbbd1cf37,0xbb287b72,0x3b0d8a32,0x3c029fe2,0x3c21db79,0x3c4a90f0,0x3b469ffb,0x3bbaed94, +0xbb124ead,0x3bf29d9f,0x3be05915,0xba0b2db7,0xbc146c8e,0x3a0b78a2,0xb7049b6d,0xb8ede4b4,0x3862cd61,0xb814295b,0x3659f2a9,0x381299cc,0xb7594737,0x3860ef29,0xb944e2bf,0x39ad50ab,0xb9d40d06,0x3b0b6e60,0x3b8a5f4e,0x3b983932,0x3a783328,0xbad32be5,0xbb2d1a64,0xbb23bb85,0x3a640c75, +0x3c4c77b8,0x3be84f81,0x3b327b3c,0xbc7ab5fc,0x3b0d72bb,0x3c23f04d,0x3c61a9af,0x3be88c12,0x3b7f610a,0xbbfe4af1,0xbbdd863d,0xbcb1f016,0xbcadfe3c,0xbc3817c0,0xbc625a86,0xbc6a968d,0xbae2e0f1,0x38d06865,0x391766f8,0x372e6b6f,0x3891022e,0x37e4c0d3,0x3707ad50,0xb627ba28,0x37b97eca, +0x385ef4b7,0xb9cb87ee,0xba459f88,0x3aef89b3,0x3b707dda,0x3b718fd9,0x3b02d243,0x3a18687d,0xbb0f8de6,0xbb9627c7,0xbc05b5fa,0xbc1c0646,0xbc0b927e,0xbb7155f0,0xbac622b3,0x3c584dac,0x3c5e1dcd,0x3b991f9a,0xbc709504,0xbcd7ac0e,0xbca065d5,0xbc9e8635,0x3c00b407,0x3cd9672c,0x3ced275b, +0x3cdc6807,0x3bcc55c4,0x3b913423,0xba34625b,0x38ded9e8,0xb98f37e6,0xb8868a9e,0xb8ce0cda,0xb87c3ee4,0xb801dc2d,0x38847ac1,0xb9632564,0x3a7cb46b,0x3b40e6aa,0x3c010ca6,0x3c18d1aa,0x3c04192a,0x3bdb7da6,0x3ba90794,0x3b9ce1a7,0x3b7548b1,0x3b2df0d7,0x3b423bc6,0xbb1a7df6,0xbbbd4780, +0xbbf8f541,0xbc38199e,0xbc17fee9,0xbbf13cc8,0xbb805197,0xbb022142,0xbb230985,0xbba3aa9f,0x3b52d7a4,0x3b60d2bb,0x3ac004d3,0x3ab5471f,0xba34f617,0xb8722c63,0xb96b39cf,0x39b7038c,0x39c020d7,0x39a2b5de,0x3902e83e,0x394bbbb2,0x388f5d05,0xb7ff174c,0xb78a7d61,0x3a20222d,0x3adb83e5, +0x3a9a7aba,0xb907e024,0xba1b4292,0xba9029d0,0xbb03f668,0xbb4671b1,0xbb69d540,0xbb89764e,0xbbc2844b,0xbbae1a19,0xbb8fbb8c,0xbb648bd9,0xbb240387,0xbb1b3c1f,0xbb819ed5,0xbb83c330,0xbb89ad40,0xb906ffd8,0x3a679f73,0xbadadf18,0xbb431569,0xbb0e562a,0xbb422455,0xbb5fddbe,0xbb668777, +0xbb3e0a3d,0xbafc25c2,0xba8ee039,0xba25c4f3,0xb9934504,0xba006c19,0xb97c3a60,0xb9e366c0,0x39d8f2bc,0x3a8fa114,0x3b0aba23,0x3ac85f25,0x3a82d3e0,0xb96e4430,0x39582b07,0x39bc1d5c,0x3a7edfa4,0x3aceaa14,0x3b168a54,0x3b5130d2,0x3b2c2976,0x3ad7b434,0xb9c34493,0xbad8cabc,0xbb42d4b7, +0xbb891d03,0xbb1670fd,0xba9dae34,0xbb0ab257,0xbb025b29,0xbbc43a11,0xbbcd8175,0xbbc30140,0xbba6c7de,0xbb9392a6,0xbb519a19,0xbb0fe1f3,0xbad45337,0xba610307,0xb9b0e6ac,0x3a38dc87,0x3a2e705b,0x3af95c77,0x3b14b2a5,0x3b40f5a2,0x3b442bae,0x3b5e0653,0x3b463fd9,0x3b13ec79,0x3b1cd736, +0x3b52c614,0x3b5307a0,0x3b6ae8c2,0x3b8dde53,0x3baacf33,0x3bc6ad45,0x3b8fb878,0x3b6e4611,0x3b49916c,0x3b02fc48,0x3a87cd71,0xba145dc5,0xbb144055,0xbb8ec099,0xbbaf6512,0xbbb23c79,0x3b4342a7,0x3b10f5b4,0x3b5fad86,0x3b682d70,0x3b830881,0x3b6e33c0,0x3b60facf,0x3b77255f,0x3b84cb9e, +0x3b9b7ff1,0x3bab7ec0,0x3bc1ecba,0x3bc88460,0x3be3403d,0x3bcf85fc,0x3bbbaeff,0x3bb1fe89,0x3ba8d13a,0x3b8c776c,0x3b978002,0x3b8ad4fa,0x3b95f796,0x3b8fc3b9,0x3b8d5687,0x3b783a3a,0x3b525c9f,0x3b873198,0x3b71fead,0x3b65fdbd,0x3b660d39,0x3b49c247,0x3b6351ac,0x3b6ec77f,0x3b93ce47, +0x3b86e9f6,0x3b5ac2d9,0x3aeae0dd,0x3ac47ba8,0x3ad2eda6,0x3ad9476f,0x3aeb9b68,0x3b04bcdd,0x3b18dd30,0x3b27d7a7,0x3b3cd100,0x3b447ca5,0x3b4b2e4c,0x3b56ddd9,0x3b642e14,0x3b6fd7f1,0x3b5f5ed9,0x3b707ded,0x3b55b4c7,0x3b5fcd3c,0x3b6e968b,0x3b80487d,0x3b8054c4,0x3b845bd9,0x3b86734c, +0x3b8be517,0x3b9057e6,0x3b8ef8d2,0x3b8cb5ac,0x3b809530,0x3b80ce0f,0x3b7ae478,0x3b6621c6,0x3b56ff67,0x3b2e45cc,0x3b162862,0x3af7723b,0x3ae2874d,0x3bc68387,0xbb043c63,0xba85e46c,0xba86ef7f,0xba92c3e6,0xba8dcf39,0xba9c03c2,0xbaa44cef,0xba8fab94,0xba887dd2,0xba813272,0xba89ff3e, +0xba9cbb09,0xbac5556c,0xbad035ce,0xba767595,0xbadac2b9,0xbadb87ee,0xba2aab9e,0xba9a3319,0xbab1fdbe,0xbac6f37d,0xbab39a71,0xbab7be11,0xbab55288,0xbb06559a,0xbb09dbd7,0xbadfbe28,0xbab729a3,0xba8f257a,0xba6d8ebf,0xba9ab7c9,0xbaa6a662,0xba94582c,0xba83d46f,0xba90bc20,0xbac094f5, +0xba883e94,0xb9f0642b,0xb9c69c74,0xba8398e3,0xbadab1f6,0xbb02ff85,0xbacf61db,0xbaad65a9,0xba8e4b6f,0xba3bf69a,0xbaa7a953,0xbb049b99,0xbb4f7e65,0xbb3dfed8,0xba927f7e,0xbb5578d9,0xbb5d8f72,0xba8fb099,0xbb046e28,0xbaeb4679,0xbb0adf21,0xbac447db,0xbab1eb7f,0xbabebc58,0xbb3de2a0, +0xbb3d161b,0xbb0e9d81,0xba51a0b6,0xba427faf,0xbabe10fb,0xbb07a73f,0xbabffd88,0x38caf8b5,0x3a56db6d,0x3a2061a8,0xbab7f6c5,0xba1457db,0x3824da4d,0x391c58f4,0xba34722e,0xbaa64391,0xbb0bde74,0xbaa563e7,0xba5f2c58,0xba1b660f,0xba54c209,0xba68e0f0,0xbaf8264b,0xbb3b4d52,0xbb79fa66, +0xba426a3c,0xbb7a83b5,0xbb827107,0xb9755142,0xbb14b790,0xbb05a9a5,0xbb37a7e2,0xbac291c9,0xbafffc0c,0xbb059163,0xbbb430e9,0xbbbd2c05,0xbb69b745,0xba9233a9,0x384c4144,0xb9236a06,0xbad1deb5,0xbab01609,0x3a91bb65,0x3ab3a300,0x3a3e0e99,0xbafdd89d,0x39874f55,0x3aaf8975,0x3af68aff, +0xb9a5387d,0xbb07e234,0xbb23ba8b,0xba535667,0xb9b2c64a,0xb914d07a,0xb86c7137,0x394538db,0x3950c519,0x3a570693,0xb86cf0ef,0x39b77d83,0xbb29b74b,0xbba08517,0xba4e983e,0xbb55ee55,0xbb30a5bf,0xbb46bbdc,0xbacfd32a,0xba9305a9,0xba291db9,0xbbeca8b7,0xbbedc380,0xbb3dd9d5,0x3a8e954e, +0x3a8af399,0xbae22e02,0xbb1ff6b8,0xba260781,0x3b916858,0x3bb39a6b,0x3b9cc59b,0xbacf5108,0x3aa8b8be,0x3a796ad1,0x39d3a4d6,0xb9c4889a,0xba77c344,0xbb0552ba,0x370d103e,0x38c6dcf3,0x38f6a6f1,0xb630e374,0x370df057,0xb93238bc,0xb969a3c8,0x38567117,0x3800890e,0x3a887482,0xba7c7b69, +0xba2ceaad,0xbb1c1d55,0xbb37b1e5,0xbb65af0d,0xbabbcfa8,0xbafde430,0xbb4040ba,0xbc28d3f8,0xbc36de05,0xbbeeacc5,0xbafc532e,0x3b1a6bcd,0x3a9bb1ac,0xbaec0b31,0xba5065e3,0x3b822155,0x3b88f73c,0x3a9f7346,0xbb4700f3,0x39f621f2,0x3c6e397c,0x3c0391a8,0x3bdd9fc7,0x3b534825,0x3ae43dd2, +0x39a247f0,0xb934da78,0x3803f30f,0xb6fbd26f,0xb80c49b8,0x38acde64,0x383ee82d,0x3792df90,0xb9013cd8,0xb9958b5b,0x399c65bd,0x3b145ee1,0xbaaba558,0xbbc0a135,0xbbdcf6b9,0xbc1444eb,0xbbbb6b87,0x3b1c3682,0x3c7b8420,0x3ca24224,0x3cdb00dd,0x3c72b6a6,0x3b7a4a59,0xbb31e2ba,0xbaa8feed, +0x3a963dca,0x3c0b8adc,0x3bcfc1a6,0x3c4a2983,0x3cb397e0,0x3ca13d86,0x3b59b287,0x3b0ddf13,0x3a3b8603,0x3ad93831,0x3aa2d9cb,0xb8bc3ddd,0xb7df02f6,0x3882b6bf,0xb7bfd50f,0x37839f02,0xb7e49f90,0xb7b1a5f0,0xb77cd950,0x38818781,0x39540fef,0xb9c65c1a,0xb8ae1884,0xba0a4dcd,0xbb09ca3e, +0xbb87f75c,0x36c3416d,0x3a88f18f,0x3a71a223,0xbbb3e506,0xbc26f093,0xbc867478,0xbc1023c5,0x3ae0fe9d,0x3c8c3385,0x3ba86bce,0xbaec9cad,0xbbdd7f31,0xbc83afbf,0xbc7535a0,0xb9c511d2,0xb860a2fd,0x3c350f22,0x3ca2f03f,0x3c2a5fd1,0x3ab05d3e,0xbaec5509,0x39b6d88a,0xb97b6509,0x393a9293, +0xb8be79a6,0x385ca634,0xb7c189be,0x3807be33,0x376e5562,0xb88088fd,0x36ff10e6,0x38825987,0x3982399c,0x39d2cab2,0x3aa75f72,0x3a363ed2,0x3a94aa6d,0x3ab150e2,0x3ad9ec6d,0x3b19bca2,0x3b8d6b4d,0x3c026373,0x3b03d20a,0xb990ae67,0xbbf5b45d,0x3a845594,0x3bdcdc66,0x3c01a005,0x3c399fa2, +0x3c426ede,0xbba18c4b,0x3bd3f7c1,0xba79508c,0xbb977614,0x3bf3d249,0x3ad7481a,0xbb59898b,0x3adc9418,0xba02b96f,0x3917ceac,0xb8dd27c3,0x386ea857,0xb7b07334,0x37010689,0xb7830a8e,0x37b97b0b,0xb78f4141,0xb8651e6a,0x37ab8559,0x3897134e,0x3afabf6a,0x3b4b8c8b,0x39e05fdb,0xba0ab4e1, +0xbae7f38e,0x3a96bbe2,0x3b891c4f,0x3c600199,0x3b14c676,0xba8c45b1,0xbc56d515,0x3beb29b8,0x3c71e03d,0x3bef4a8f,0x3bf3cf14,0x3b801af5,0xbc4b02cb,0xbb8338a7,0xbca488c1,0xbd3958de,0xbc48716d,0xbb5ecf84,0xbb8a354a,0x39c8bdcd,0xb7fc6a59,0x3962c500,0xb848d3c8,0x3724dfff,0xb8098279, +0x376a7ec8,0xb6862df7,0x3819fa34,0xb82cb13f,0x399b814c,0xba5e1f9a,0xba3b64a3,0x3a013941,0xb9d5cb79,0xba96c126,0xbb1e3776,0xbb857d36,0xbbd94515,0xbc21ddac,0xbc28b2e4,0xbc03db73,0xba7d13b7,0x3ba2e5da,0x3c83272a,0x3c282b89,0xbc2e7c39,0xbc87c2f4,0xbca0f7c3,0xbc3311b5,0xbc2b5458, +0x3b17a136,0x3cb4274b,0x3c97433c,0x3c52d5cf,0x3b821740,0x3a258dd8,0xba27e406,0x37c4172f,0xb8c1d641,0x38425ee6,0x37fa1c78,0x3814f290,0xb822b0cb,0xb822352e,0xb63e82ed,0xb98c0286,0x3a68fc0f,0x3ba2cc57,0x3c023525,0x3c0e1548,0x3bf6dfa8,0x3bd8dc75,0x3bafa4a5,0x3b67e7cd,0x3b1345bb, +0x3b189735,0xbb1b24de,0xbbc57790,0xbc0663b1,0xbc23109f,0xbbcf1ea9,0xbb0a621e,0xbb625951,0xbbc15502,0xbc11a9c8,0xbc21e181,0x3b9b9884,0x3b79c4ee,0x3b49f613,0x3b789f81,0x3aed4434,0x3adbbd32,0x3971ab15,0x39d7a269,0xb8b38fe5,0x377d4dbf,0xb9180d6d,0xb8235bc8,0x3716fbdd,0x39038510, +0x385edad6,0x39cc5acd,0x3aafc548,0x3b1337b2,0x3af6073a,0x3a38498f,0x3896e280,0xbaab6fa5,0xbb1aab9d,0xbb8dc514,0xbbb8e1ef,0xbc0362b7,0xbbd2e1af,0xbbaf7195,0xbb894f0d,0xbb847d9d,0xbb8119e2,0xbb78d3eb,0xbb2b1360,0xba6b45cf,0x3b4db586,0x3b7dc2a3,0x3ab10620,0x3a34463b,0x3a0ff634, +0xba9f0a41,0xbb37b4c6,0xbb073c0d,0xbaada722,0xb9a5de79,0x39046101,0x3951d18b,0x3994269d,0x393e91e5,0xb78111d7,0xb8ee3cd8,0xb994f5e8,0x39428849,0x3a94623f,0x3ad10851,0x3afc56da,0x3ae45d2f,0x3ab31b4d,0x3a6a84c7,0x3a378783,0x3a38bff0,0x3a276acd,0x3a0cf889,0xb89ddc90,0xbaac84d6, +0xbb5cb734,0xbb7903c2,0xbb64e0d6,0xbb5f5256,0xba23421f,0x3a20015f,0x3801b646,0x39870aad,0xbbc02c4f,0xbbd621dd,0xbbd5a9ad,0xbbaa9591,0xbb8f938a,0xbb6bf184,0xbb3bbfd3,0xbb13edd0,0xbb08b4fb,0xbad19ba3,0xba908859,0xba9fb0d7,0xba08e0c3,0xb999dc08,0x3a4e58c5,0x3a88cc99,0x3af0451c, +0x3b0f4d80,0x3b177c47,0x3b539ca8,0x3b532cc3,0x3b5674ad,0x3b5276a6,0x3b6efe43,0x3b894478,0x3ba00877,0x3b48dada,0x3b1d8916,0x3aef1a53,0x3a927474,0x39298cd9,0xba9c3218,0xbb3a9e45,0xbb8e5829,0xbb90cfd9,0xbba11378,0x3a0b8517,0xb955d19b,0x3a4a9ee6,0x3a03ed31,0x3a4e2f08,0x3a07163e, +0x3a22b65d,0x3a982437,0x3abd8186,0x3b133635,0x3b378df6,0x3b65368a,0x3b806793,0x3b9726bb,0x3b98d21a,0x3b9e76e2,0x3bb1826e,0x3bb1d346,0x3bbb298a,0x3bb81d43,0x3bb13585,0x3bbbd745,0x3bb9f501,0x3bbb49ba,0x3babeb20,0x3b9af039,0x3ba8e38c,0x3b8d6ba1,0x3b6c3942,0x3b519b89,0x3b202f07, +0x3b266aeb,0x3b243c0b,0x3b3f2c2e,0x3afb0448,0x3a620dd3,0x3ad3ee9d,0x3a91544a,0x3ac3596e,0x3b01b7f0,0x3b214f81,0x3b0e9c09,0x3b2725b1,0x3b42a14d,0x3b590e43,0x3b5ecb5c,0x3b674210,0x3b72dc5b,0x3b7fb359,0x3b8574db,0x3b679386,0x3b64a6fc,0x3b81788f,0x3b7681e0,0x3b7569b3,0x3b7cd306, +0x3b802c28,0x3b839f15,0x3b84e564,0x3b89867a,0x3b8e71a9,0x3b8ef12e,0x3b8ac3ce,0x3b7d0338,0x3b7fe25d,0x3b77d2af,0x3b5f600e,0x3b4acdd6,0x3b20ec0e,0x3b0dbd18,0x3af1bf4e,0x3addab69,0x3bd10168,0xbb1a33b1,0xbaa39de3,0xbab11df6,0xbabada76,0xbab61b73,0xbac1e872,0xbac5a670,0xbab2d9a0, +0xba7e54a3,0xba971ae0,0xbaa0dac4,0xba9b164e,0xbac5ad6b,0xbad153f2,0xba979677,0xbaf10116,0xbaf736c3,0xba9b0b31,0xbabd4104,0xbac9e749,0xbada600d,0xbad9bcd4,0xbae6c93e,0xbaf92295,0xbb1a9088,0xbb164be5,0xbaecb854,0xbab8e379,0xba9e63c4,0xbac146bb,0xbab80ec6,0xbaacfa31,0xba80ab91, +0xba9868f7,0xbaa588c7,0xbad072d9,0xba9d5919,0xba171d68,0xba5a7b1f,0xbaac7cb2,0xbaeaf816,0xbb011b4a,0xbaf10aa7,0xbac48617,0xb9a26695,0xba578419,0xbaac5fe2,0xbaefb4ae,0xbb615e11,0xbb55cd3c,0xbac0ab8a,0xbb4212ba,0xbb38b89f,0xbad06e5e,0xbb156ff6,0xbb192f89,0xbb2d75b9,0xbb04064f, +0xbb0983e3,0xbb36e2da,0xbb691373,0xbb552678,0xbb230b54,0xba25a900,0xba70e89f,0xbb45a5a2,0xbb0ddcc8,0xba8d2d11,0x3a463e67,0x392d1260,0xb9dd121c,0xbb10d3a0,0xba6dca22,0xb9b4b264,0xba4e86e2,0xba902f30,0xbaafb4e1,0xbacf7f09,0xbacfa7f2,0xba6ca814,0x3a085c54,0xb97e6ae1,0xb7f10ca1, +0xb98f10f9,0xb9b226af,0xbab939a9,0xb985c2eb,0xbb351a61,0xbb56e1ad,0xba3366da,0xbb0aef85,0xbb0eea2a,0xbb5e1f19,0xbb17eba2,0xbb5930c0,0xbb8e353c,0xbbd758c0,0xbbc6fc92,0xbb62d86d,0xb9e885bb,0x397d9709,0xbb45e5ff,0xbadcdb95,0xba5cac15,0x3b231162,0x3a35ff75,0xb8d8ba18,0xbb19a727, +0xb8b46e0f,0x3ab70e8a,0x3a5bc6f9,0xb9b2ecaa,0xbad31ed3,0xbaed9bff,0xba28b9e6,0x38703ddf,0x37839bd7,0xb8ab068f,0x38e72b62,0x38db9641,0x39ce23b5,0x39ee74e2,0x39a01d93,0x399a61ec,0xbaf460f3,0xbaaa9e92,0xbb486c50,0xbb5a5e3c,0xbb8c0463,0xbb2a71a7,0xbb415e42,0xbb8a80e4,0xbc0fa34a, +0xbc03cb99,0xbb44a718,0x3ac98fc3,0x3a64ee27,0xbbcce84e,0xbb0a43e7,0x39a84f71,0x3bdaa4c4,0x3b6f4a59,0x3b1317c1,0xbb581edf,0x3a153e3b,0x39e1ee4c,0xba934807,0xba469188,0xba27d091,0xba419ca6,0x39ac911a,0xb7d487c8,0xb7fb4e82,0x383d8fd6,0xb8ad9499,0xb802c65d,0xb9728491,0xb907815e, +0xb9b0df96,0x39618a89,0x39b3c531,0xb92011e7,0xbace6219,0xbb3c4430,0xbb981ad9,0xbb4a534e,0xbb9f4e98,0xbbfb5b0b,0xbc4d833e,0xbc3b5d9c,0xbbd32ac4,0x39b7aa85,0x3b1b628b,0xbb8a0ade,0xbb13e668,0x3a045531,0x3bceabc3,0x3b396920,0xb9b408f2,0xbb511186,0x39d24f2f,0x3c104640,0x3be67155, +0x3b8cf2d1,0x3a981a10,0x38513ce3,0xb86b79fe,0xb80183e0,0x360a119e,0xb7b20b17,0x386b52e3,0x36ba20b9,0x38c046fa,0x38ba813f,0x38ae2855,0x36c0d4a8,0xb9dd5130,0x3a83e0b5,0x3a28167f,0xbb4abe70,0xbb957b2e,0xbb947876,0xba117179,0x3be3dc57,0x3ca53d02,0x3ca9d308,0x3ca6614c,0x3c3060b1, +0x3b810ea6,0x3afb2415,0x3b33ede0,0x3b8bb4b7,0x3c00d499,0x3c0c6927,0x3c4ad725,0x3c94ca3a,0x3c4a1e2d,0x3b8d6899,0xb901c08a,0x3ab6b486,0x3b06ec8c,0xb9398aad,0x38072d7f,0x388110e9,0xb69f5341,0x3719d4a9,0xb7825813,0xb7239965,0xb81e2d0b,0xb84f6872,0xb84688a9,0x37e23aad,0x38b592c3, +0xb9d82a91,0x391c5d16,0x386d1974,0xbb1848de,0xba3e1b1b,0xbaf7a082,0xbb567308,0xbc11eeda,0xbc310e9c,0xbc44df16,0xbb280f7c,0x3bae322a,0x3c59aabb,0x3b88dc4b,0xbae9f76f,0xbbf2f3ea,0xbc311de4,0xbbf1346b,0x3ba5d9c1,0x3b901c32,0x3c2308a4,0x3c9e659b,0x3c31778e,0x3a9d2612,0xba0da51d, +0x3919739e,0xb9078172,0x378cebf5,0xb7438177,0xb651867e,0xb6137941,0x37a70a49,0x373f1962,0x3784f02f,0xb79cc2c9,0xb7174073,0x390141f9,0x38093810,0x3a812567,0x3aa6d39b,0x3b05988b,0x3b4a2cc6,0x3b3d5d1a,0x3ba4f7ae,0x3bcaf887,0x3bc0b220,0xb9748701,0xbaf68d04,0xbbe69016,0x3b5db759, +0x3c074f98,0x3bc58675,0x3c115d64,0x3bf6859b,0xbc040317,0x3b9abed4,0xb9112366,0xbc0ec6e5,0x3b8156a2,0x3a54ab43,0xb9dd91e0,0x39cac26c,0xb8f72d9a,0x38b495e5,0x36817e40,0x37ccb6be,0x37b2fb5a,0xb5f6c2ba,0x37aa4b27,0xb77d9bf2,0x3889acdf,0xb9340d0c,0x39671ed7,0xba19c934,0xba5ecfeb, +0x3a12031c,0x3822acb1,0x3a8f40fe,0x3887f031,0x3baaafb7,0x3bd8e8f6,0x3c1ec240,0xbb038182,0xbb6d8fcd,0xbbf4a7f2,0x3be75f37,0x3c4ab975,0x3ada93d9,0x3bd27d06,0x3b417c53,0xbc3df303,0xbadf279f,0xbc51fffc,0xbd39fb04,0xbc4f28f5,0xb9437748,0x392cb9e2,0xb9205bdb,0x38980b0a,0xb8f0bb25, +0xb804eea8,0xb832e2c4,0xb8256616,0xb79ef483,0xb84978f2,0xb7bbbe41,0xb6cf789f,0x3882a85c,0x394b97f6,0xbaa5e2d4,0xbae7a1ad,0xbb5e3f87,0xbb5bc58b,0xbb9bf328,0xbbb5ca4c,0xbc05bc64,0xbc253ab6,0xbc0c67cc,0xbbcaabf5,0x3a91bbdf,0x3c3c3842,0x3c3bc2b2,0x3b18a6c4,0xbc94d528,0xbc457b0e, +0xbc054e49,0xbb0ccec3,0xbad36900,0xbb0a732b,0x3b769b53,0x3ac6a139,0x37456050,0x3ae57f0d,0xba833a6b,0x399b6ac7,0xb7b8aebd,0x392bede1,0x3860f29a,0x38c8ff74,0x389546a0,0x38d46ba2,0x38363e23,0x350853bd,0xb90466f8,0xb9c83e70,0x3b06f0b1,0x3ba419d9,0x3be9c7ac,0x3bd5f006,0x3bd4d4bd, +0x3ba2df40,0x3b34b271,0x3a94ab4a,0x3974e3ce,0xbb31c632,0xbbc13b44,0xbc060288,0xbbfe2bba,0xbb6e368a,0x3a1f51c2,0xbb30bc27,0xbbcd41bd,0xbc26e580,0xbbf3c918,0x3badbaf3,0x3b666ca4,0x3b4f536c,0x3b61e14d,0x3af6641f,0x3947786e,0x380c2592,0xb980c723,0xb92a7c99,0xb97ff786,0xb91fdb29, +0xb9554486,0xb8fcf375,0xb91c0c36,0x388231a2,0x391d5c7e,0x39e8f13f,0x3b17a4c7,0x3b3ecaa7,0x3b15ee58,0x3a9ea15e,0xb9de1d79,0xba9f86e5,0xbb5d916a,0xbb96b81a,0xbbe8a6db,0xbbb9385a,0xbba74160,0xbb892337,0xbb9b2672,0xbb9af691,0xbb540007,0xbafbd5d2,0x3a4b6017,0x3b82bb7a,0x3ba7ab4f, +0x3b28a6cf,0x3b2e8e32,0x3b01a386,0xb86355b4,0xba976764,0xb9e65763,0x38188c9c,0x39e469e6,0x39de49ba,0x39b90a51,0x39b1d2b8,0x39b67428,0x399c679d,0x39aa4f0d,0xb90a1256,0xb9575770,0xb81686b2,0x3a3cb279,0x3ac0efa5,0x3b068411,0x3a94136c,0x39d28334,0xba094b5f,0xb9fe9e6d,0xbaa2ba71, +0xbb1b796d,0xbb298f69,0xbb6c2756,0xbba2d3bc,0xbb959f51,0xbb4e6a32,0xbb19a44f,0xb93292df,0x3a1a5ae8,0x39db7b27,0x3a913237,0xbb924be2,0xbba7d0e0,0xbba9d889,0xbb7939bd,0xbb58ecb9,0xbb4325c3,0xbb1570f3,0xbaa56d42,0xba9a7a08,0xba504da2,0xba16237a,0xba58f543,0xba6581de,0xba835dea, +0xba47f2da,0xba325a59,0x38619438,0x39f81748,0x3a3446fc,0x3af212c4,0x3aa46b96,0x3abd6bb3,0x3a8b273f,0x3a52ca40,0x3a53d6f6,0x3a9fc1e3,0x39fdc7a2,0x3a088e92,0x3a235b66,0x39263872,0xba28d8c0,0xbac8e137,0xbb2a4ff7,0xbb580643,0xbb482d07,0xbb6cf514,0xba80891a,0xbab2b279,0xbab7134a, +0xbacd2009,0xbaac41ea,0xbad39fa1,0xbabf29eb,0xbac54d65,0xbaa9d2ae,0xba45461f,0xb9b4f2e6,0x394b06e3,0x3a3514b2,0x3aa9d250,0x3afccdd7,0x3b22c5d1,0x3b5ce92e,0x3b71ac8f,0x3ba33f0d,0x3b9a9b81,0x3b966345,0x3b91addc,0x3b90abde,0x3b9270fa,0x3b869252,0x3b6ebccf,0x3b57582f,0x3b1a473c, +0x3abcc253,0x3a8d0836,0x3a2dcb7c,0x3a35bf3f,0x3a16a5fa,0x3a3e2950,0xb91d3552,0xba6d4286,0x39ae07aa,0xb8712604,0x398ca692,0x3a4de7ba,0x3aaa255f,0x3a3fcfa9,0x3a9307c4,0x3acfd081,0x3af8fba3,0x3b025cf6,0x3b0b741d,0x3b153ca9,0x3b1f49f6,0x3b2467d7,0x3af9a05b,0x3adb64c9,0x3b297e97, +0x3b0d8602,0x3afb4fbc,0x3afb4056,0x3b00600c,0x3b03df1a,0x3b01c911,0x3b014366,0x3b071b9e,0x3b0d1155,0x3b0a8e53,0x3b043606,0x3b0bb363,0x3b04f343,0x3adb5289,0x3ab547a6,0x3a7b1a0d,0x3a57cc72,0x3a215ca5,0x39f3d2f6,0x3b62b6e9,0xbb04fae4,0xba95fba6,0xbaaa0e56,0xbaa6735d,0xbaa5e270, +0xbaae6412,0xbaa25bad,0xba94b0fa,0xba2b6b6b,0xba810693,0xba9470e9,0xba939237,0xbac352a6,0xbacf1ae2,0xba9445b9,0xbaaf7938,0xbab4c270,0xbaa1bfe2,0xbaa5fe12,0xbaa2b477,0xbab21471,0xbac418dd,0xbad5b281,0xbaf11a29,0xbb005e0f,0xbaf04729,0xbac14232,0xba96e103,0xba8cf119,0xbac89bc9, +0xbaa82b08,0xba90787b,0xba341185,0xba855bf5,0xba8e44de,0xbaa863ee,0xba8a7d57,0xba2433f1,0xba8f89bd,0xbaabf613,0xbac10588,0xbabcfbf0,0xbadbefea,0xbaa20216,0x397471d2,0xb9e1b046,0xba3f6711,0xba5fc647,0xbacd1378,0xbaebb611,0xbaa80900,0xbb21e05a,0xbb100688,0xbac022c9,0xbadbc82b, +0xbafe792a,0xbb0f208d,0xbaf8b910,0xbb0c40e2,0xbb42a80e,0xbb3f1bbf,0xbb23b265,0xbb07877c,0xba20a845,0xba900b35,0xbb5be994,0xbafe526e,0xba548d5e,0x3a6e9c2a,0xb9c052e5,0xba80fd7a,0xbb058754,0xba732827,0xba1f6884,0xbabe2f8c,0xba8f0581,0xba85eb5c,0xba9f18e0,0xba77dc11,0xb91ac4e6, +0x3990ba32,0xb798e3b7,0x39701fb2,0x397396f6,0x39ac0f38,0x397a846b,0x39c67034,0xb9ac8f50,0xbaad59ea,0xba8d5d00,0xbaa5a26e,0xbab7270d,0xbb311794,0xbb1c5d91,0xbb66e37f,0xbb9e8a68,0xbbacb2c1,0xbb909e66,0xbb2b3449,0xb981175a,0xb930ddcc,0xbb8969ac,0xbadba250,0xba2640a3,0x3b2d5385, +0x38ac2ec5,0xba055f98,0xbae4b918,0xb9aea199,0x3a6585fa,0xba120009,0xb9faa1c3,0xbaa0d6fc,0xba2b2f3e,0x396812f5,0x38abc98d,0xb8ea29b6,0xb670e487,0xb860a8a3,0xb901097b,0xb8f6ef12,0xb8bb6b82,0xb8ff3d43,0x39b0f3f4,0x398c82a8,0xb9ab1948,0xbb06ba0a,0xbb1e2370,0xbb65920f,0xbb2da319, +0xbb62f92a,0xbbb4b4a2,0xbbdcea49,0xbbba9a7f,0xbb1f8701,0x3a6d8371,0xb9a45f04,0xbbfad6d9,0xbb025776,0x3969aeb3,0x3bce3306,0x3ac081a3,0x395e6c9e,0xbb412fc2,0xb797b9f4,0xb9915b26,0xbb145e87,0xba71e2ac,0xb9629f92,0x391b6315,0x36a740f5,0xb863a7b0,0x388b50eb,0xb74ba157,0x3866ebb2, +0x384313d0,0x3858b34f,0x3865792e,0x37c2d293,0xb8f0abe9,0xb914a26d,0x39ac5183,0xb9847617,0xbaef167b,0xbb7a9393,0xbb677a04,0xbbc182b0,0xbc122910,0xbc260ad3,0xbc049868,0xbb931c44,0x3a7d1fa9,0x3a6c9920,0xbbdc587d,0xbb2dc407,0x3a12fded,0x3bc72172,0x3ab9c45c,0xba685bee,0xbafbccbc, +0x3974bdac,0x3b6338c0,0x3bb54e98,0x3b17cafc,0x396fbe7b,0xb9138ab3,0x38535f72,0xb7c906e8,0x376bbae8,0xb70e4b5f,0xb7f99586,0xb76419bd,0xb7f2953e,0xb8079c7e,0xb5cedd81,0x38148b55,0x38cb8228,0xb98d4cb7,0x3a0f7f4e,0xb9d6521e,0xbaf33d55,0xb9086dfe,0x3b554b37,0x3c0a532d,0x3c90c3a5, +0x3c802fdc,0x3c38d14c,0x3ba48025,0x3b255b1d,0x3b477c57,0x3ba4bec8,0x3bae6b86,0x3b659e84,0x3be14b44,0x3c10b4c1,0x3c40eaf4,0x3ba3b615,0x3b593d0f,0xbaff1469,0x3a49a8f3,0x39acccbe,0xb91ab476,0x38b60475,0xb8361502,0x3800062f,0xb6b8e369,0x378c11e8,0x371a94fc,0x37925339,0x376a67ed, +0x3754ac34,0xb832323d,0x3809e25a,0xb7671539,0xb83d2fda,0x3a1c347f,0xba5f8796,0xbb08357b,0xbb93f479,0xbbd3db56,0xbc2df2d2,0xbc1c2a41,0xbbd071c8,0x3ac529f2,0x3bc25f0a,0x3bf4e76c,0x3b228a0a,0xbaaab90d,0xbbbabbb9,0xbba07783,0xba746f44,0x3bf5e8de,0x3bbbd11a,0x3be15a17,0x3c66abac, +0x3bf50840,0xba69a45c,0x39aa0659,0xb8d422c8,0x37f67b20,0xb56a067c,0xb73ec707,0x36ad3f8d,0xb711477e,0xb6d6ed3b,0xb68db325,0xb70d6e01,0x37e6c4d7,0xb7f90507,0x38ac15c1,0xb8d983cf,0x39f6d7fa,0x3aabdc36,0x3b019611,0x3b61fe68,0x3b6d216c,0x3bb09ade,0x3bb8fb1f,0x3b2dfeda,0xbac02b71, +0xbb02c591,0xbb8ae9a3,0x3b873db8,0x3be2c5a7,0x3b820ed9,0x3b8faf27,0x3b1bbb21,0xbbe5503d,0x3b459c30,0xba2762e9,0xbbd70400,0x39895ffa,0x38d578ad,0xb9c08b0d,0x395c1560,0xb84e9954,0x3808e9d3,0xb79c9c71,0x371cf324,0xb69efe65,0x35d3c8fc,0x3714946e,0xb6c0a521,0x375ed20a,0xb725b87d, +0xb7d71cde,0x390086a4,0xbacf758c,0xba7ec83d,0x3996bab9,0x3b21fab0,0x3b0f01e8,0x3beb2a29,0x3bdfa090,0x3b8d4f3c,0xbb44c800,0xbb4601c0,0xbabbbd12,0x3b986606,0x3be82801,0x3a43749f,0x3b836032,0x3a8f31b1,0xbbe79bce,0xba908045,0xbbf3d5ed,0xbce6d834,0xbc101ef1,0x3ad15022,0xb934998e, +0xb77c995f,0xb762dd86,0xb79b03b9,0x378df074,0xb6a46fea,0x36faf9bb,0xb5994ffe,0xb51759b8,0xb7930d15,0x36ee2032,0xb810f082,0x39098329,0xb856bd1c,0xbafee8db,0xbb7999d6,0xbb632c57,0xbba2bb1d,0xbbb4011a,0xbbe810ad,0xbbf67b73,0xbbaef92e,0xbafee7bf,0x3b612ced,0x3c5e83a0,0x3b8ca6c4, +0xbb77efc6,0xbc651fa2,0xbbafda02,0x398f6542,0x3b832988,0x398e847a,0x39a21f07,0xbc3a2225,0xbbfd4b5d,0xbb2c51e8,0x3a6c4648,0xb9a6ba29,0x393ec329,0xb862ebbe,0x37175a74,0xb78beb39,0xb6b70b98,0xb727598d,0x35697c61,0x37f4647b,0xb13b7b48,0x38a5e19b,0xb975b09c,0x387d1833,0x3b40792c, +0x3ba15805,0x3b95cb81,0x3b9ee9c7,0x3b625a91,0x3afbc3e6,0x39f84ca4,0xba9c84ce,0xbb2b5e09,0xbb99deb9,0xbbbfd132,0xbb951068,0xba9e194e,0x3adcf2eb,0x3a1706ec,0xba3fa21e,0xbb330729,0x3aefbfaf,0x3b8048cf,0x3b256754,0x3b500556,0x3b07a9a4,0xb867c664,0xb8fcffc3,0xb634857c,0xb8774777, +0x38415317,0x3688a1a8,0x37df2347,0x37ee38b9,0xb7eba9c3,0x3788c3f7,0xb91e30bd,0x392be943,0xb98abfe7,0x3ac9d4aa,0x3b4b60e1,0x3b51246e,0x3b08d4cf,0x3a362f1a,0x3995ff93,0xbac2404e,0xbb178c95,0xbb8da40d,0xbb72f8f6,0xbb6df57d,0xbb3e9bf2,0xbb6f8ded,0xbb6d4884,0xbaf68a73,0xba96b5a7, +0x3a90ffef,0x3b455443,0x3b6ba0a5,0x3b24473f,0x3b5097ea,0x3b1882de,0x3a92bb28,0x37034c88,0x393fc7ec,0x392b286c,0x38140e73,0xb8830467,0xb79b0c8b,0xb8883cc1,0xb856049f,0x37ed180e,0x382fc2ba,0x39142873,0x391ad99d,0xb9293145,0x393083cf,0x3a38f965,0x3abd73cc,0x3a39f6ed,0x390c3be7, +0xba7a5097,0xba3a17e3,0xbade5fd9,0xbb4c873f,0xbb4d0bbd,0xbb794204,0xbb8f6905,0xbb61c972,0xbaf33e90,0xba6776e4,0x382cf746,0x3978ecb2,0x39e57915,0x3aac0267,0xbaff0558,0xbb1a949d,0xbb2cdc72,0xbadc0a81,0xbaaaee72,0xba854960,0xb9a85292,0x395bb997,0x3927390a,0x396427ed,0x390557bf, +0x397b7766,0x37c70bb4,0xb7f78ff1,0xb9980f64,0xba21f10a,0xba263054,0xba243d92,0xba3c8bba,0x38bda1b1,0xba114a86,0xb9762ab4,0xba243ee4,0xbaa24357,0xbabeda84,0xba9fb56e,0xba7e0fc8,0xb9f56f32,0xb841cc56,0xb98c55bb,0xba486356,0xba949ce2,0xbac4f170,0xbac96484,0xbab4ea25,0xbace968d, +0xba8e3fbc,0xba8999f7,0xbacd3ec5,0xbaccded4,0xbac6c90e,0xbb04a017,0xbaf16118,0xbaf111a2,0xbabd2fa6,0xbaacf00b,0xba8fdfa2,0xba74a0b7,0xba3accba,0xb9fb55f8,0xb995b3f1,0x39b18d01,0x3aa27dcd,0x3aec35fd,0x3b5926ed,0x3b44e69f,0x3b3dea47,0x3b1e1bc9,0x3b1b0c5e,0x3b1b1f54,0x3b08c483, +0x3add2ec7,0x3a8357e0,0x39b6b2a8,0xb9853564,0xb9ae7b70,0xb9968edc,0xb94e1d1b,0xb9b1889c,0xb9b72637,0xba4f12e1,0xba957ebe,0xb9f25b24,0xba2fa609,0xba0f8b20,0xb9927619,0x3842a3fd,0xb9574bf9,0xb82cf444,0xb800c88c,0x3702715b,0x38fba0c6,0x3981253e,0x39bec166,0x3a03fba6,0x3a281202, +0x3a0a5f5a,0x39b51360,0x3a763b80,0x3a07183a,0x396f7c7b,0x391ec2f4,0x39410a97,0x394d6177,0x3903c2fa,0x3801a5d6,0x389bf465,0x39532b95,0x3992f321,0x39d0e9ae,0x3a06b20f,0x39e2698a,0x3931bcdf,0xb7a5ea27,0xb938dfe2,0xb9374a15,0xb9890970,0xb9ba468e,0x3a44fc54,0xbaceb1ca,0xba71087c, +0xba893ccc,0xba7e9443,0xba7e0073,0xba85aedb,0xba730f9d,0xba60b7f4,0xb9ce7e71,0xba315f18,0xba55835f,0xba591132,0xba8e5615,0xba9c19a4,0xba83e2d0,0xba87d9b2,0xba806775,0xba8c458f,0xba68d0a3,0xba63b2a9,0xba7d07bd,0xba96f0ba,0xbaa71f11,0xbabb3348,0xbaafbfab,0xbaa27cce,0xba8de1f0, +0xba6c9b55,0xba6b0ac2,0xbaa28653,0xba88aa1d,0xba66ed23,0xba118487,0xba57919c,0xba5b69e3,0xba67aa1b,0xba5a62ab,0xba458740,0xbaa1fe58,0xba9d4c9d,0xba88ba22,0xba91dc9f,0xba7824bb,0xba03a52a,0x3904bc4f,0xb926d5f8,0xb91e0427,0xb90cad47,0xb91db061,0xb983ab51,0xb9827f1e,0xba4579a7, +0xba8d5273,0xbaa5960b,0xba784d58,0xba906923,0xbab8c248,0xbac2155e,0xbae73e65,0xbb17878d,0xbaf5795c,0xbaca257a,0xbac612ff,0xba5d39e8,0xbaa66634,0xbb2ecc73,0xbad70169,0xba5b05ce,0x39c72497,0xba415508,0xba92db47,0xbab8110e,0xba6698b2,0xba47e42c,0xbad30b39,0xba5d9adb,0xba1eaaa4, +0xb9b9e0d0,0x38f3f96c,0x3929a836,0xb79e554c,0x37d83f10,0x38934459,0x37fc0e92,0x38940f4d,0x38c1cc17,0x38f5a359,0x394faa64,0x39985c2e,0xb9904891,0xba100d55,0xba005d2f,0xbacb3413,0xbb0215f8,0xbb3a7857,0xbb758c43,0xbb4d980e,0xbb1fc022,0xbae97977,0xba18bd97,0xba5276b9,0xbb65efbf, +0xbad2ad50,0xba55470b,0x3ac5aa06,0xb9dc0341,0xba1de8b5,0xba5d8613,0xba089fb0,0xb82173a2,0xbad59676,0xba39d41a,0xb9d715af,0x394e8e34,0xb77e622e,0xb8406e7e,0xb774a0a5,0xb78888cf,0xb812542f,0xb75946ba,0xb7f7fc6f,0xb87cfd44,0xb855bc12,0xb90db0ee,0xb8b50dd0,0x396b3ac2,0xb9b403bc, +0xba8281c9,0xbae9f454,0xbb0aa47d,0xbb3cdc65,0xbb931b8a,0xbb6e20fb,0xbb36d89b,0xbaeb98da,0xb9b4b561,0xbac7c202,0xbbc38577,0xbb01b836,0xba113ab8,0x3b7435bc,0xb9526be9,0xba4fbe7f,0xbad0094f,0xba01e7cc,0xba4d4d87,0xbb21b960,0xb9c861ac,0x39341381,0xb7cbd9d0,0xb8076430,0x381445ec, +0xb73b084b,0x3792d4fe,0x374ba83d,0x37c604e9,0x3767e3d3,0x37283882,0x38113f75,0x386ccc21,0x36128abe,0xb8723c6b,0x38eb1049,0xb9ab748b,0xbb0d9fec,0xbb4bb244,0xbba59eac,0xbbe11ab0,0xbbbfba99,0xbb870cc8,0xbb3162f4,0x391e5e56,0xba419066,0xbbbb601e,0xbb30a5dd,0xb9a5017d,0x3b6afa17, +0x3979de60,0xba319ddd,0xb9d29165,0xb88ae995,0x39a16429,0x3b4ce8ec,0x3a22e563,0xb9230076,0x37addc2e,0x34dd1b7c,0xb6e7a738,0xb734b5a5,0xb6abc7a9,0x35524f4a,0xb6f00262,0xb6cda33f,0x3574ab7a,0xb7cecd6b,0xb7804940,0xb707fa22,0x38556e32,0xb8e8ec34,0x39b40e82,0x3a41c3c1,0x3b2f053f, +0x3b9eed65,0x3bf82c06,0x3c353f73,0x3c079ce6,0x3b8bed6f,0x3a159bd7,0x3a3ebe2c,0x3b0760c4,0x3ba47daa,0x3b929910,0xba444096,0x3b6247fe,0x3b83dcde,0x3ba6211c,0x3a0d8521,0x3afc7c5b,0xbab0fd75,0xb92d6e86,0xb8dcfd1c,0x38f91b16,0xb8a17e59,0x38919258,0xb83b1f46,0x37bcefa8,0xb6e77c5a, +0x36d70b49,0xb44f3d89,0x3711835f,0xb58553c8,0x37d8daf1,0xb80a252a,0x38290fc3,0xb8aeabb8,0x3809d3a9,0xba81eaee,0xbb51af76,0xbbaed2b1,0xbbdfad1e,0xbc09cc6a,0xbbc3051f,0xbafac325,0x3b537cc1,0x3ba23e73,0x3b572e39,0x3a811765,0xba72fd6e,0xbb5e4572,0xba1be57f,0x3b2c25db,0x3bd94330, +0x3b97899b,0x3b614d35,0x3bfbf261,0x3b03f867,0xba85e211,0x39e28426,0xb9442d30,0x38cb3b86,0xb844434e,0x37ec78aa,0xb76db5c3,0x37073d47,0xb6c4b7cf,0x36134e17,0xb5d5a91e,0xb679622e,0xb61b08a4,0x36afc780,0xb8613e11,0x3924cf4b,0x3a3ef7b2,0x3aafc0dc,0x3b2483c2,0x3b4dc878,0x3b643f9d, +0x3b50dc95,0x39b5fc68,0xbaf31a95,0xbad0766d,0xba9b4173,0x3b471d81,0x3b7ede83,0x3ae9235c,0x394a604d,0xbabbf54c,0xbb99c148,0x3ac42a1f,0xbab46297,0xbb7fa49f,0xb9ef601d,0x38a77a7d,0xb8a3c049,0x38910eef,0xb81cb070,0x363db1d5,0xb65d433f,0xb5cd7a1c,0xb68de15f,0x35bad260,0xb7290a79, +0x3758242e,0xb7b070ab,0x382710d5,0xb8a3266d,0x391a6724,0xb9fad4b2,0xba5cbec2,0x3a6c0794,0x3b3319be,0x3b4bb63d,0x3bb57389,0x3b8f0b16,0x3a2598dd,0xbb152605,0xbad73254,0x3a75ce02,0x3ae7cc34,0x3b16d8a7,0x3a558424,0x39fd13fa,0xbaa033d0,0xbb23c064,0xbaaecb7f,0xbb964447,0xbc406159, +0xbaf0cd69,0x3aa9597b,0xba01225f,0x397147ce,0xb8a6c12c,0x388221a7,0xb78f9c6d,0x378a84e4,0x363ecbb5,0x36c6b769,0x36fc93fa,0x371c6618,0xb6b93bb1,0x37549d2c,0xb8a14120,0x392beeea,0xb9dbb929,0xbb1e4cdc,0xbb0d4f43,0xbb6583f0,0xbb8454b4,0xbb8fb4f4,0xbb7e6095,0xbb190fa6,0x3af3604c, +0x3b8a84cb,0x3c15784c,0xba9c2bff,0xbbbaeaa0,0xbbd59d20,0xbaeb4e21,0x3b27357e,0x3bdb25b4,0xba9420cf,0x3ba97b9d,0xbc3b5147,0xbb8bcb1b,0x3a22a9a8,0xb9543531,0x389f5a85,0xb87116ae,0xb6b2bb55,0xb8013242,0xb6f7fc27,0xb780c32b,0xb71515c5,0xb752d805,0xb7a37c61,0x37032513,0xb8359a48, +0x393af140,0xb9c2b5f1,0x3a755846,0x3b4bc6fc,0x3b1d9cac,0x3b2c9c21,0x3aab9e19,0x3a25b878,0xb9d90c9b,0xbb001036,0xbb3e4599,0xbb72ec74,0xbb61995a,0xbb0fb584,0x3908aaca,0x3b286620,0x3b844f02,0x3b9f4448,0x3bbad1db,0x3c02500b,0x3a511c76,0x3a886526,0x3afa6fd3,0xb916b8e3,0xb8714229, +0x3823413f,0xb699a95a,0x388798b4,0x37b5f442,0x383cbb16,0x37881af0,0x37da7ad9,0x37b1ab95,0x37bf1eb6,0x3798ee2d,0x36f0d2ab,0xb8e8f0c1,0x35ce5a04,0x3afa72cb,0x3b307235,0x3aecba2c,0x3a9a0a6a,0x3a86080b,0xb8e81858,0xba2256f7,0xbaf28e9d,0xbaec6014,0xbaf43af3,0xbabf7901,0xbb0a372f, +0xbb1730c2,0xbad41ac6,0xbad41084,0xba0e696b,0x398c5a51,0x39306970,0x3ab4b6d1,0x3b361a59,0x3aed9ea2,0x39b50edc,0xb8ea3b91,0x37a32ee4,0xb8e3b3a2,0xb8aeecbd,0xb8dbcf0d,0xb88f1356,0xb86439de,0xb831e5ad,0xb8890a70,0xb82d2376,0xb8763873,0x36ce6422,0x38caf8bf,0xb69961be,0x37c0f0ef, +0x3a03928e,0x3995b27c,0x37207f40,0xba41f070,0xb9f5863f,0xbaa666b7,0xbb17c397,0xbb207b5b,0xbb3e046b,0xbb488578,0xbb0bb35e,0xba8fdd29,0xb9fd6cfc,0xb9ed9e55,0xba0a67d0,0xb887aa2a,0x3a42ec82,0xb624299e,0xb992b173,0xba255660,0xb860ee20,0xb7183c08,0x38df4289,0x394e990d,0x3900bab3, +0x3955819b,0x38bf2920,0x3902666f,0x389d136b,0x38e5b170,0x38f11f8b,0x38f8974e,0x3892c72c,0xb93286f9,0xba22cd4f,0xbaa6ed85,0xba9ad516,0xbac8ba82,0xbaa4f7f1,0xbabf1da4,0xbb00036c,0xbb075e33,0xbaf5acaf,0xbac37f3b,0xba92eccb,0xba7d979c,0xba776292,0xba8b3c71,0xba808d69,0xba37950e, +0xb9846143,0xb91d91d3,0xb8288f25,0xba9db34d,0xba5c9d17,0xba9f8f1c,0xba9954d0,0xba8630d7,0xba895972,0xba037b23,0xb9fb4b5e,0xb9a13610,0xb9e14c4b,0xb9c4ea7d,0xb9abd585,0xb989ecf9,0xb987dd91,0xb9c4f485,0xba111f8f,0xb9e3935b,0xb9229c9d,0x3a75fc5b,0x3a38d781,0x3a2dc429,0x392684d1, +0x38f57194,0x38906d47,0xb8fbf0aa,0xb9c67699,0xba67e3ad,0xba8edc99,0xba9f0862,0xba974375,0xba76e5be,0xba77c220,0xba8f5ac8,0xbaa5e377,0xbaac2117,0xbaafa90a,0xba3e81dc,0xba5f6b46,0xba650f7c,0xba461feb,0xba2cc045,0xba4caaaa,0xba5d9eb4,0xba7760c1,0xba75a7e8,0xba59ab5c,0xba4ac515, +0xba4386b0,0xba3c20b1,0xba285bf7,0xba141026,0xba0b994e,0xb9600ed3,0xb9ec35cb,0xba3fb078,0xba670d23,0xba5f7d80,0xba60d93e,0xba6e2e40,0xba81a5ee,0xba7a95b2,0xba5d1624,0xba451ef5,0xba2186ed,0xba18449f,0xba265fa3,0xba40c35f,0xba4ea804,0xba3c5c2b,0xba27a1b7,0xba21df63,0xba296436, +0xba7de50f,0xba20ffae,0xb9b690e4,0xb9b1bd31,0xb9c5c494,0xba0a0e2d,0xba2a8684,0xb9773661,0xb981b84f,0xb924f02c,0xb9627e59,0xb972d4a7,0xb96f64a8,0xb98aa3f4,0xb9932476,0xb98944b1,0xb990a375,0xb976b8f2,0xba3fe240,0xb9f736ed,0xb9b1183c,0xb9a2a80c,0xb9dfac70,0xb9f78308,0xba08823a, +0xb9ed5460,0xb9dbb3a6,0xb9cc13bd,0xb9b3c050,0xb9b72456,0xb9efca64,0xb9d03e5d,0xb9b0118f,0xb95fdf15,0xb9a01a0a,0xb99cb496,0xb99766d0,0xb99e77e0,0xb9b86970,0xba10830f,0xba485c8d,0xb98cdf43,0xb959c459,0x38c5291f,0x387df25d,0x38240937,0x37d7caed,0x38556ed4,0x37e93bea,0x37ba9e93, +0x37ed5543,0x38c05803,0xb79f67eb,0x390363bd,0xb93ba1a7,0xb94500c9,0xb9d62234,0xb9e2b281,0xba0c40df,0xba2de761,0xba5a89da,0xba1c1b53,0xb9f9cddb,0xba0cb614,0xb9e29d4a,0xba1a1f19,0xba7a45be,0xba28a142,0xb9be164f,0x388e22b3,0xb9ba17ed,0xb9f304e9,0xb9e0382e,0xb9b928c4,0xb98b890a, +0xba3fbf5b,0xb98c270a,0x39098528,0x38bb47ac,0x381a77ff,0xb7f0777d,0x379ebc22,0x350974cb,0x3780474c,0x37020818,0x3818adeb,0xb6b9c28b,0x36aa8242,0xb807ed21,0x372a1b52,0x3903a4fc,0x388633c0,0xb872dbd5,0xb9de07ec,0xba3fa7c6,0xba8b4667,0xbaad09ed,0xba71a0bc,0xba2f2cb7,0xba1c5153, +0xb9b33c15,0xb9f65877,0xbaa40c21,0xba2e1103,0xb9c4a851,0x39e12db8,0xb95f5a32,0xb953a957,0xb8d07b42,0xb968acd9,0xb8fe59a3,0xba8c453a,0xb8eeb382,0x387ece66,0xb83b38b5,0xb7f2d734,0x375e053f,0x3707c841,0x373758b3,0x37014520,0xb6a6ccbe,0xb70b84fd,0x36ff3925,0x370f94b0,0x3810f26b, +0xb598c79f,0xb894af18,0x38aba2fb,0xb804af6f,0xb9ed685d,0xba387e53,0xba8afdf2,0xbad4f817,0xba712496,0xba1f8580,0xba209618,0xb9e01aa8,0xba67f352,0xbb054ea4,0xba575de4,0xb9b82812,0x3a94a464,0xb9a0ca20,0xb9d87279,0xb98052c8,0xb98d457f,0xb9ba6c44,0xba80610b,0x39955d95,0xb873e919, +0x37db8284,0x37b3e69e,0x3544053b,0x36fae960,0xb61d162a,0x373be71b,0x35d0465f,0x371773ef,0x36cb2f30,0xb5da4ce1,0xb781a265,0x37870f25,0x37b32196,0xb754fa3d,0x38f297a8,0xb9fce0f1,0xbaa606c5,0xbafe5ca7,0xbb1e7252,0xbad8ded6,0xba81e13d,0xba511a68,0xb91af81f,0xba206132,0xbb04597c, +0xba9277b8,0xb995b171,0x3a8a26a8,0xb72ed79e,0xb8ded403,0x398b29eb,0x363b8efb,0xb964c992,0x3a5abe4d,0xb8f101e8,0x3651a533,0x37202fd5,0xb743f214,0xb6a6f51d,0x35d2d550,0x3594e160,0xb6a99651,0x365a3ddb,0xb5ea0e72,0xb68169a3,0x3626e267,0x36700e62,0x36978faa,0xb80a521e,0x38aa0946, +0xb949e363,0x3a959025,0x3b089864,0x3b32fd5c,0x3b6df202,0x3b69f440,0x3b0f9b72,0x3a7ee028,0xb9490711,0x39ad4bd1,0x3a74bc53,0x3b1d9d98,0x3b02c2cc,0xba8339e9,0x3a848596,0x3a7bacc8,0x3a81b38d,0xb99b07c6,0x3a5d4c69,0xb807d967,0xb923a1be,0x390d6080,0xb890d804,0x3851827b,0xb7b2cfea, +0x37ac96ac,0xb6b31275,0x36a36aaa,0x3365626e,0x36565204,0x361a8503,0x36674014,0xb5e7a419,0x373993b2,0x376dedce,0xb74b7973,0x390cc541,0xba4fa297,0xbae79a64,0xbb27673d,0xbb41d5cf,0xbb4892c0,0xbaee074b,0xb8e20300,0x3adbd456,0x3b03b432,0x3a5943d8,0x392cc65c,0xb9d26e26,0xba9db348, +0x3a3c84b1,0x3b048059,0x3b337730,0x3af64f1c,0x3a7cf07b,0x3af7862d,0xb982beeb,0x39136b8f,0xb87f46c6,0x383daa0c,0xb7585cfa,0x37853643,0xb7173ca3,0x36a51b3e,0xb6375eaf,0x359f6338,0xb40f39e8,0x35109f52,0x36dbb1f3,0xb6611f02,0x373b54bf,0xb6fa6673,0x3794b17f,0x3939424f,0x3a0439d6, +0x3a6152d4,0x3a9e3dd9,0x3a83ca21,0x3a4e5fa2,0xb9619f17,0xba62e850,0xba1df29e,0x397d2415,0x3a95fbd8,0x3a9fe922,0x3a085545,0xba290ef1,0xbaafbc93,0xbabd6eab,0x399e7ab6,0xba3dea40,0xbab6761e,0x38c0c7e7,0x37e68474,0x3600688c,0xb7dc067b,0x3761d429,0xb690dcfd,0x35ae1422,0x35e9b296, +0x3499363c,0x35630f24,0x361e4960,0xb530334b,0x36627f75,0x35050b66,0x37037bef,0x379c0145,0x373a9e60,0xb8930622,0x3a2b377d,0x3aaaaa85,0x3acf7469,0x3af9212f,0x3aaf3ec2,0xb8e51ae1,0xba2b5db3,0xb9a8330a,0x3a36f399,0x39b48ca6,0x39c7a9d9,0x3a39d719,0xb9b55904,0xba5f797d,0xb8db7b86, +0xba0d59ff,0xbad8f355,0xbb231d02,0x3a83c76d,0xb9ed1af1,0x3900116e,0xb7fd3232,0x3728325d,0xb7383206,0x365bf2c3,0xb61be58e,0x331fca74,0x35070523,0xb5218373,0xb5a7c49b,0x35e9b6a2,0xb4c08bce,0x373bc62c,0xb81579c4,0x39148521,0xba186e01,0xba23c8b2,0xba914f3f,0xbaa84728,0xbaa5f12c, +0xba4ecef0,0xb8e65742,0x3b043c4f,0x3b16d8f2,0x3b341409,0xbabb25cd,0xbb256742,0xbaa6f515,0x3908f948,0x3aeb6501,0x3b66c8c0,0xba1647ad,0x3b80431f,0xbb1dcf5e,0x3887a0ef,0x392df1d8,0xb8d7f82e,0x382851a1,0xb73d6e39,0x37285df0,0x34d852b5,0x363fd20f,0x36041660,0x3531b8ca,0x36264982, +0x364498a6,0x36da2c50,0xb6ae883d,0x36f5acbb,0x385734c5,0xb9571466,0x3a870892,0x3a2baf33,0x3a35585e,0x38b184fc,0xb8d1b7d8,0xb9f6a5e0,0xba834bc0,0xbabb0fd2,0xbabd42a4,0xba847048,0xb970a5e4,0x3a49442d,0x3b115d88,0x3b546d46,0x3b7fdcb4,0x3ba7c231,0x3b9d2ea8,0xb9ee137d,0x396d95d4, +0x390a596a,0xb9072bc3,0x38c0990c,0xb803f504,0x37ea1e6a,0xb7b8b1a5,0x36af5c57,0xb6ffb96b,0x3691b4f3,0xb5abdb9c,0xb5ee7532,0xb6be3ab9,0x36d3ea11,0xb732337c,0x38a04797,0xb8d4988c,0x38af2252,0x3a9b3d35,0x3a3dc975,0x3a3b04a5,0x3a2b3338,0x397b25cc,0x382046a7,0xb99f2400,0xb9b0564c, +0xb9c566fb,0xb9a97637,0xba2a747d,0xba5abfa8,0xba508618,0xba7a63cc,0xba483f7d,0xba2b09a4,0xba481339,0x39da67f0,0x3ab270c6,0x393abad3,0xb94e1061,0x38c536e3,0xb84dc95a,0x38033270,0x3786382d,0x377f3f27,0x371762ee,0xb5b2290a,0xb674fe61,0x3738d667,0x36f7df6a,0x37ac76f2,0xb725a8b6, +0xb81ef16e,0x381b2490,0x372d8308,0x38b37be2,0x394efb26,0x38c5036a,0xb9293db4,0xb8ba59a5,0xb9d29579,0xba49dbe5,0xba6669ff,0xba894d6c,0xba897447,0xba337c8d,0xb9c25299,0xb9455267,0xb9b8a3d8,0xb9d3f403,0xb8d3181c,0x3993e983,0x39fb042b,0x39d23c76,0x3908b524,0x3918b761,0xb79ad554, +0x373b7cda,0xb82682ca,0xb72f16d8,0xb7c6350c,0xb6039af5,0xb7331203,0x37883f68,0xb73c3073,0xb6fca5b9,0xb8216089,0x37bd7bd9,0x38886ef7,0x392bc621,0xb9d0469d,0xba3e78b8,0xba3f2509,0xba385e48,0xba3e2678,0xba6f8768,0xba726b98,0xba61b976,0xba385fb6,0xba1c8577,0xba239bed,0xba0ee829, +0xba034cda,0xb9be07f3,0xb82270fe,0x39a17a8a,0x39c15dd3,0x39e097fd,0xba0ce7f3,0xb9a006da,0xba0b6145,0xb94bf8dd,0x35ead868,0x389b4050,0x390654cf,0x389e1934,0x38832764,0x389eb7ad,0x388cd159,0x387e63f7,0x38755955,0x38933420,0x38ebf4cf,0x38a07d0c,0xb9280b6d,0xb9882e39,0xb9c8dcb1, +0xb981685e,0xb96f112e,0xb9e257f5,0xb9e3ffd9,0xb9f17f09,0xba06b0a1,0xba1a6507,0xba3ec552,0xba3937fd,0xba273a5e,0xba18e44d,0xb9f6d8ad,0xba02e270,0xba1b295e,0xba48977d,0xba37f6b4,0xba23479d,0xb99f7f03,0xb9ac0be8,0xb9e06969,0xba067144,0xba19bd5c,0xb982e0b2,0xb98a5841,0xb9934a5b, +0xb98da9ab,0xb9919820,0xb9913ff0,0xb98fc1bd,0xb98ef69c,0xb994491b,0xb98966a2,0xb96da517,0xba13727c,0xb9f41cd4,0xb9e4d25c,0xba05d018,0xba0a9ef8,0xba0a23e6,0xba0db302,0xba140786,0xba0ff1f2,0xba044608,0xb9f47989,0xb9d9c637,0xb9dbe8c7,0xb9e40af8,0xb9e6ccf4,0xb9de62b0,0xb9b0d28c, +0xb995f782,0xb9822f9f,0xb986fcbb,0xba4090e7, +}; + +const uint32_t orange53_rom_EL48[HRTF_MODEL_N_SECTIONS * 578] = { +0x3ed13c8b,0x3e795d4b,0x3e9113f2,0x3e4dabdc,0x3e534c23,0x3e5a6c3f,0x3e633a30,0x3e6e5b79,0x3e75e643,0x3e64d3ef,0x3e632d97,0x3e53a199,0x3e4ac079,0x3e48a4a7,0x3e4a994d,0x3e4097af,0x3e45547f,0x3e3b21b7,0x3e3d2895,0x3e2ca5e0,0x3e46551a,0x3e34fe03,0x3e49e02a,0x3ea451fc,0x3e3c0329, +0x3e46c0ab,0x3ea49835,0x3ea12722,0x3e95d1a9,0x3e7f26a1,0x3eb0987f,0x3ea830c3,0x3e9340d1,0x3e61ee32,0x3e4d411e,0x3e916f00,0x3e7f56a2,0x3f16eaed,0x3e97d3c6,0x3eb87774,0x3ec0bd26,0x3ed04427,0x3eee5368,0x3f04faba,0x3f07ecc7,0x3eda8d36,0x3ee77542,0x3ec6553c,0x3eaf5f1b,0x3ead1b80, +0x3eb10685,0x3e8fddb6,0x3ea1999f,0x3e91131e,0x3e84fb60,0x3e75c109,0x3e8999e3,0x3e571804,0x3e24616f,0x3e17f23e,0x3e3463f7,0x3e2c1b00,0x3e08a916,0x3e207d3a,0x3e33e6d5,0x3e15b994,0x3e319abe,0x3e38254a,0x3e10efa7,0x3e277d7c,0x3e3b18bd,0x3e536efd,0x3e3b416c,0x3eb4796f,0x3f0a6aed, +0x3ee2d03f,0x3f0c56da,0x3f176c4a,0x3f4453dc,0x3f4b33d3,0x3f58f68a,0x3f3e0f6e,0x3f22e579,0x3f093530,0x3ef6ac20,0x3ed902ce,0x3ec59eea,0x3ec14bf2,0x3ea693fa,0x3ea6784d,0x3e824cfb,0x3e8691ec,0x3e2e47c4,0x3e60113f,0x3df23b1d,0x3e06e0c7,0x3de87e39,0x3daad691,0x3dcf908c,0x3d940eb5, +0x3e2c4126,0x3e0970db,0x3dc0bcf9,0x3de71452,0x3dd88847,0x3e019b2b,0x3e11de7d,0x3e489e68,0x3e8f7d91,0x3ee84d3c,0x3eaf4131,0x3f3baad3,0x3f291019,0x3f5ed505,0x3f8540f7,0x3f9cc18b,0x3f9abb64,0x3f86b22c,0x3f67822f,0x3f37475b,0x3f17b596,0x3eff1353,0x3ef13107,0x3ec4d032,0x3eb241f6, +0x3ea239f6,0x3e7b2d7f,0x3e597322,0x3e0e5038,0x3dd1a78b,0x3daa37a5,0x3d892104,0x3d711743,0x3d4bd0e5,0x3d292713,0x3d6443e2,0x3d25ad2b,0x3d421448,0x3d43af07,0x3d300046,0x3d70e42c,0x3dc8ab81,0x3dbbdd5d,0x3e13a120,0x3e25ca82,0x3eb3d700,0x3f0612a7,0x3f693169,0x3f6f0533,0x3f8bd516, +0x3fbfdabd,0x3fdfaf3d,0x3fe40f98,0x3fc15e6b,0x3f99224b,0x3f6baec4,0x3f3d356b,0x3f1b42af,0x3f085c2d,0x3efd4a52,0x3edd3142,0x3ebcfb76,0x3e8c7934,0x3e5ffdec,0x3e063244,0x3e338d6d,0x3d6fdafa,0x3d48c645,0x3d02cdde,0x3cd9f38a,0x3cb6a3fa,0x3cdc2664,0x3ce66ded,0x3d05270b,0x3ccc95d7, +0x3ce87b00,0x3d0ca110,0x3d5a9a6c,0x3dba13f0,0x3def03db,0x3e8087d4,0x3f4b245c,0x3fa0396e,0x3fddaab3,0x3fdab318,0x3ff0864f,0x3fe904d2,0x3feab043,0x3ff22dcb,0x40019773,0x40060906,0x3ffd1b7f,0x3ffcf26f,0x40006c8e,0x3fcffa0a,0x3fae1b30,0x3f69eeab,0x3f477de8,0x3ef3cff1,0x3ea25277, +0x3e7089c7,0x3e05cd1d,0x3dbd3ee3,0x3d78f733,0x3d2da426,0x3d0c4b8e,0x3cdc1d30,0x3d160fd3,0x3d0cb359,0x3d19f681,0x3d112553,0x3d4f35c9,0x3da66c5c,0x3e055b6f,0x3e3b305d,0x3e97f342,0x3f0cd189,0x3f1aaa77,0x3f705e4b,0x400df970,0x4019287f,0x4014e0f6,0x4003b0d4,0x40113232,0x400d83ce, +0x400ec086,0x3fff0a5e,0x4001e72f,0x3fff723b,0x3fe4c088,0x3fdf932c,0x3fab897b,0x3f810f00,0x3f5a0e3d,0x3f05af48,0x3ed5816d,0x3e628221,0x3e55f28d,0x3df23fe0,0x3d85cd46,0x3d32c27f,0x3d043be3,0x3ce2c304,0x3d06c6d8,0x3d23deac,0x3d40ca1c,0x3d37cfd7,0x3d4db224,0x3d8cf333,0x3de2d5f5, +0x3e056cf5,0x3e67af90,0x3ecaf713,0x3f9048d0,0x3fa3c1b1,0x406ffbda,0x4030953f,0x406c66b0,0x40278192,0x401d6299,0x4013ac22,0x3ffe8886,0x3fff0af5,0x4007a800,0x4000cd5d,0x4002f85c,0x3ff613f8,0x3fc14f2e,0x3f8fef43,0x3f54feae,0x3f048e1e,0x3ecab158,0x3e72d076,0x3e44e0b7,0x3df1aa4f, +0x3df5729c,0x3d9220fe,0x3d4c2c2b,0x3d4fd921,0x3d45755b,0x3d554b3e,0x3da5e2c9,0x3d5a76bb,0x3d64b3f1,0x3d9ca9c4,0x3dfe0e72,0x3e25c701,0x3ec26c72,0x3e9ea4fb,0x3f974fdd,0x3fb3064d,0x4085dc81,0x406bff87,0x40a142f9,0x4036d27b,0x4022b1d4,0x400ea6d0,0x3ffe03d0,0x4002c524,0x401116a3, +0x4016c2d6,0x400cf594,0x400113f8,0x3fc37e15,0x3f893175,0x3f4e8e8d,0x3efac18c,0x3ee3c2fc,0x3e553fdb,0x3e4fbe0d,0x3e05430c,0x3e074c75,0x3dac8a62,0x3d8a9c22,0x3d8b36ff,0x3d579c0f,0x3d7e4070,0x3e0d38ed,0x3d86f95c,0x3d7052db,0x3d95a514,0x3e24108a,0x3e1b92d0,0x3ed43c9a,0x3ef03d8f, +0x3fbbe432,0x4062eac1,0x406c77b6,0x405f63ae,0x408f5d1a,0x40295d42,0x40139c05,0x3fff5d60,0x400e594d,0x4017a277,0x401136cd,0x4002c839,0x3febb869,0x3fbf2486,0x3f9748ff,0x3f596ede,0x3f18fc68,0x3ef01d5c,0x3eb9843d,0x3e89eca8,0x3e415d5d,0x3e362b91,0x3e09955a,0x3dd41d9f,0x3d91e34f, +0x3d8803d8,0x3d53bfda,0x3d85521b,0x3e2dc535,0x3d8ebfae,0x3d90826a,0x3d9b80cd,0x3dcf125a,0x3e3ead1c,0x3e994fe8,0x3ec84eb7,0x3fd34df6,0x3f9a6ef2,0x4052fabf,0x401bcf61,0x401c2989,0x3fec950b,0x3fdc1b7b,0x3fe34791,0x3fc495a4,0x3fd74b51,0x3ffca964,0x3fe4dceb,0x3fb656ec,0x3f9bc39d, +0x3f5c6176,0x3f1f1228,0x3f00bc95,0x3ee2a73d,0x3ebb7571,0x3eb6bdc4,0x3e88c099,0x3e514961,0x3dfb3bd4,0x3df4be0f,0x3db41ec9,0x3d8cd1c8,0x3da123f7,0x3d96cf95,0x3dd81f17,0x3dab5341,0x3db97d0c,0x3dfe04e8,0x3e3b81b7,0x3e691e94,0x3ed85b87,0x3e9ef6c7,0x3f899412,0x3fb75457,0x3fa2de8f, +0x3f98f354,0x3fa179bd,0x3f9f9a70,0x3f9e6859,0x3f998dc3,0x3f989e57,0x3f8bbf8a,0x3f858ec3,0x3f76bc6a,0x3f632261,0x3f4494f6,0x3f2d78bf,0x3f0fc5fd,0x3ee18cce,0x3ec17957,0x3edd32b2,0x3e89eb90,0x3ea3d985,0x3e8d979f,0x3e644968,0x3e08c523,0x3dced224,0x3dc9c545,0x3dbd3715,0x3da76201, +0x3dcb6909,0x3dd4d5b4,0x3dcf4b16,0x3dd8061e,0x3e25c1ac,0x3e3fb792,0x3e854a5f,0x3ef2ee6f,0x3f0c884b,0x3f150acc,0x3f5ce24b,0x3f5bec73,0x3f6feb9f,0x3f714167,0x3f7d710a,0x3f82fc24,0x3f6f2ebb,0x3f63b0f5,0x3f5da899,0x3f3d9d04,0x3f2d3c5d,0x3f17be35,0x3f086393,0x3eebd34f,0x3ecc310f, +0x3eb97af6,0x3ebc063b,0x3eb99803,0x3e991bf5,0x3e61d40e,0x3e564440,0x3e2de440,0x3e048d5c,0x3dd7e105,0x3e160ade,0x3de1a00d,0x3de16cd3,0x3dec3e15,0x3dfd32ec,0x3deb987c,0x3e280789,0x3e39ced4,0x3e9bf184,0x3ea6d96f,0x3f03e63e,0x3f1772d3,0x3f1aa5f0,0x3f2c8fe6,0x3f53e430,0x3f49f1c2, +0x3f51b47e,0x3f5a4e07,0x3f4c85d0,0x3f423aae,0x3f3ce42f,0x3f233863,0x3f12c918,0x3f03911a,0x3efcbd29,0x3ee9eb38,0x3ed69662,0x3ec43a56,0x3ece0cb6,0x3ea07408,0x3ea59572,0x3e78b241,0x3e81dea6,0x3e4e7729,0x3e41aa10,0x3e55acc0,0x3e208286,0x3e9c8825,0x3e7637a3,0x3e475243,0x3e3df24d, +0x3e34a164,0x3e76290e,0x3e93d93a,0x3eb08995,0x3ecadc7a,0x3f113bc0,0x3f0bdb87,0x3f0ee1d4,0x3f099c03,0x3ef48627,0x3f1ea131,0x3f20c927,0x3f399b74,0x3f2c73b4,0x3f262976,0x3f2121b2,0x3f19e5d9,0x3f14ce1e,0x3f12d7b1,0x3f03c5e7,0x3ef0f4cc,0x3effbd56,0x3ee9b16b,0x3ed78834,0x3eed1cd8, +0x3edc2610,0x3eb7f041,0x3eb57f1b,0x3ebdc528,0x3e9ecbf6,0x3e80082c,0x3ea732af,0x3ea22882,0x3ea99cb1,0x3ebc9096,0x3eb7ce14,0x3ec01445,0x3ece4084,0x3ea0fe82,0x3f01008b,0x3f10221a,0x3ec28e85,0x3ed6b53c,0x3eb7ab93,0x3ec1eb35,0x3ec174a4,0x3ecb916b,0x3ec6c00c,0x3ed14505,0x3ec77437, +0x3ec59ac3,0x3ec10c03,0x3eba3a4e,0x3eb3a237,0x3eb0b86d,0x3eaddfc6,0x3eae11a4,0x3eadbaef,0x3ea91e51,0x3e9d2cd4,0x3ec46610,0x3eaa589f,0x3ebfcdcf,0x3ef9d5f8,0x3ea8e769,0x3eb99bfa,0x3ef7712b,0x3f0afdcf,0x3eef7737,0x3ee4a1c7,0x3f0d1a53,0x3f0c1c9f,0x3ee54d66,0x3eb2a769,0x3ea87026, +0x3efa9ce3,0x3edc59fc,0x3f5b2601,0x3b099120,0x3b094e5e,0x3b171df9,0x3a855517,0x3a870aeb,0x3a74564d,0x3aa373fe,0x3ab45a43,0x3ab2aa89,0x3aad53ff,0x3aac0516,0x3a9e7418,0x3a9ac19f,0x3a9c19a4,0x3aa24200,0x3aa3feb5,0x3ab0e011,0x3aae433c,0x3ab128c5,0x3a8fffe8,0x3ac78f57,0x3aafde90, +0x3acac392,0x3b7c1200,0x3aca39b3,0x3aca9921,0x3b77488d,0x3b74ff3f,0x3b5d1da7,0x3b28bb52,0x3b7db0b7,0x3b6755d8,0x3b31474a,0x3af674e9,0x3ade65ba,0x3b3631f0,0x3b0f7eb6,0x3bb0368d,0x3ac93c48,0x3abc0200,0x3abe03de,0x3a92e288,0x3b330721,0x3b62a003,0x3b59a3f0,0x3b4bfe03,0x3b4ba323, +0x3b2850ec,0x3b1a55b5,0x3b1d3f94,0x3b359581,0x3b2b7527,0x3b37733b,0x3b24dec5,0x3b0dd07b,0x3b0300d3,0x3b283f57,0x3ab8b640,0x3a50a591,0x3a2807b5,0x3aa0156e,0x3a9d90aa,0x39c6d4e6,0x3a362f1a,0x3a889171,0x3a37a9d3,0x3a511dd0,0x3a8f9c73,0x39e2a256,0x3a0ea16c,0x3a24aece,0x3a8e5f53, +0x3a17afc1,0x3b166f92,0x3b600797,0x3a96c9db,0x3aad96a3,0x3a457b29,0x3b637739,0x3b9f4617,0x3b8da6cc,0x3b9122b2,0x3b8002cd,0x3b64ffcf,0x3b46d976,0x3b4b2733,0x3b51ec63,0x3b6b6b0b,0x3b744170,0x3b85d561,0x3b3c6ff8,0x3b56dcb6,0x3abe2900,0x3b2dc8c7,0x3a84176c,0x3ab7bf69,0x3a71dbe8, +0x39ba9596,0x3a2fc662,0x39cf6fa2,0x3b01a56d,0x3ac32a8c,0x3a49a762,0x3a4dcecd,0x39e9ad44,0x3a09d5cc,0x3a14293c,0x3ac2c0a7,0x3b041d7b,0x3b2f402c,0x3a59ef26,0x3b00b8ac,0x3a94dc1e,0x3a4126f3,0x3ba901a2,0x3c14cd86,0x3c00bacb,0x3c088eed,0x3bed3031,0x3bc72687,0x3bb3e1ce,0x3ba3dbc7, +0x3bd6ac19,0x3bcd3819,0x3bc12154,0x3ba7031a,0x3b7f012b,0x3b6336db,0x3b0caa73,0x3ad91a78,0x3afd470b,0x3abac91e,0x3a6b20db,0x39fd17b2,0x39ec6730,0x3a47dd0b,0x3a521446,0x3a8a0661,0x3a5da398,0x3a166a91,0x39cf952f,0x3a21493a,0x39b4a6e5,0x3b0de0ff,0x3a5c9480,0x3b26ea2d,0x3af35e26, +0x3b033569,0x3a7f168b,0x3a04ec31,0x3bc82714,0x3c15a581,0x3c07a177,0x3c125d5e,0x3bf62cd7,0x3bdce1eb,0x3bba2d4e,0x3bbc5394,0x3bb1e5df,0x3bdb37f1,0x3bed5efe,0x3bfb46fc,0x3baf07b9,0x3b8dbe4c,0x3b19d3ed,0x3b880abd,0x3ada494d,0x3b0a73a1,0x3a89c12e,0x3a3a3c49,0x39be9098,0x3a436bd4, +0x3a87b721,0x3ab14206,0x3a74ebb2,0x3a40a02f,0x39c9d4d8,0x3a09cd1e,0x39ee322f,0x3b2026e9,0x3ac3d78c,0x3c0cff96,0x3ba454a7,0x3bffae87,0x3c00fdd1,0x3c563a9b,0x3c23a87d,0x3c3fa4a8,0x3c40b734,0x3c265f60,0x3bf02281,0x3c03490c,0x3be35edd,0x3ba9bdbc,0x3b254a95,0x3aa71e10,0x3a7fd525, +0x3b3aab26,0x3b237d2e,0x3b6fb52a,0x3b48aae0,0x3b13bc0e,0x3b10dc43,0x3b01f65b,0x3a9529ff,0x3a3e15a1,0x3a4d7fc4,0x39b55cfa,0x39b45694,0x3ad0c336,0x3a9923ed,0x3adea902,0x3adc486a,0x3b1f516d,0x3ab4b318,0x3b5fca74,0x3bce4e6d,0x3befe13d,0x3c1dbff6,0x3b7faf65,0x3aadf6ea,0x3ba0c016, +0x3b974ff0,0x3b76af5d,0x3b0b0553,0x3aa4b76c,0x3ac3a487,0x3a955423,0x3a531f48,0x3a66aa1e,0x3a4fe31d,0x3af23bd6,0x3b80ecd5,0x3c25c48a,0x3b9a6de0,0x3b6e9917,0x3a8b74c4,0x3a9ef87d,0x3a2aa2aa,0x3a061248,0x3a40a888,0x3a151e38,0x39ade610,0x3a0a6810,0x3a229cb9,0x3a44e572,0x398c8c8c, +0x398fc054,0x3a375fa0,0x3aac2210,0x3a8bbce7,0x3b1c40d1,0x3bb0c76f,0x3a301c68,0x3b8e4497,0x3b126d79,0x3b30fcc5,0x3be1383c,0x3c4afa70,0x3c679961,0x3c7e191d,0x3c02c692,0x3bab19c8,0x3b1cfa97,0x3b830ac3,0x3baeabe4,0x3bd2d4f1,0x3bace754,0x3b500d60,0x3ab43c80,0x3a8cf10d,0x3aa1241b, +0x3ab6209d,0x3a0b4d64,0x39452744,0x39fd9c38,0x39e45c04,0x398ef0cc,0x396e8c59,0x395ff402,0x395d4008,0x3929d28d,0x39015bfd,0x399259e8,0x39e0eff5,0x3a473e69,0x3a880d9b,0x3ac00a87,0x3a0915a9,0x3b0173b1,0x3b250e0e,0x3b56da88,0x3bd6ba42,0x3ce7330d,0x3cbcd421,0x3cca3aff,0x3c7030a0, +0x3c0fa28e,0x3ba3e3e4,0x3b52a913,0x3bdd11a9,0x3bf796dd,0x3bf7806b,0x3ba61e26,0x3b2f750f,0x3a5c82fd,0x3a56ddea,0x3aa48370,0x3a6c2279,0x3a11f383,0x392217dd,0x39856b86,0x398a9a17,0x38f2219d,0x390b0d0c,0x38ce3e47,0x38996c36,0x38a57f24,0x39739dc1,0x3a090c71,0x3a5ca029,0x3a39db8c, +0x3aaaa431,0x3b23c3e6,0x3b0eb9cf,0x3bb99f8d,0x3bdccbdb,0x3c897aca,0x3cb05d6e,0x3d1982e9,0x3cbc1aa5,0x3c5d7f20,0x3b5779e8,0x3b46b848,0x3b20e68b,0x3b297a59,0x3ae9c17c,0x3ab587d3,0x3a40753a,0x3acd1805,0x3b0babeb,0x3b47be5f,0x3b082572,0x3aa0cdae,0x3a349709,0x39a58dc2,0x39e82f6c, +0x39c16bf6,0x39cde0e2,0x39771906,0x394814cb,0x388d3870,0x38730f61,0x38e83176,0x38dfadda,0x391a8ae7,0x39db19fd,0x39fe4c4e,0x3a903126,0x3b14c828,0x3b8d1838,0x3c873595,0x3cc98687,0x3d0d858a,0x3ced38ab,0x3c929ca3,0x3c8a5695,0x3c8cc138,0x3c4b2941,0x3bea764d,0x3bd45702,0x3c093662, +0x3b9d7b12,0x3b730bc1,0x3b5889eb,0x3a61c4d0,0x39bebf9f,0x39a02a57,0x39a7566c,0x399c3e82,0x3a1a33fb,0x3a11a1f5,0x39a9aa91,0x399c7371,0x390ffc6e,0x38e9b2d5,0x39972c24,0x39375825,0x3938860a,0x397f23d6,0x3a46e1e4,0x3a818b8b,0x3b0ab7ff,0x3bba9ade,0x3c06eebe,0x3c18ca2a,0x3c15eea5, +0x3c2ab8df,0x3c1a0225,0x3c21c4b8,0x3c01ae5c,0x3c04a785,0x3c084420,0x3bfef42d,0x3c0653a2,0x3b803f7e,0x3b3acd26,0x3b146ee8,0x3b3a9b39,0x3b32a1eb,0x3b01d65e,0x3b139c24,0x3b0bda6b,0x3acc808e,0x3aad39e4,0x3a4c50e0,0x3960eaa1,0x3989cb70,0x39a6c82d,0x39f680c1,0x398f3f22,0x39d73d67, +0x3a4f7ea6,0x3a88371b,0x3abcd664,0x3aed8c17,0x3b3d2b09,0x3b69002b,0x3b93e6c9,0x3b944502,0x3b8b2328,0x3bc1633f,0x3be18fe2,0x3be6ccb8,0x3bdfdc59,0x3c05c56d,0x3be5f9f6,0x3c05f750,0x3bce28da,0x3bd5db06,0x3bdb8849,0x3b81001d,0x3b32e032,0x3b2f330f,0x3af8adb5,0x3adb3e75,0x3ab94178, +0x3ab6e362,0x3a9ff563,0x3a8ac8ad,0x3a4fc252,0x3a0fc53a,0x39cf1f2b,0x39b82349,0x3955168b,0x398991de,0x39b8c789,0x3a1c1d2b,0x3a8caa01,0x3ac4a1f1,0x3af26986,0x3b14efb6,0x3b39f749,0x3b5ff9f0,0x3b90d155,0x3b951ba5,0x3ba91201,0x3bc44790,0x3bd11a15,0x3b86efc6,0x3b942a0e,0x3b86878e, +0x3b99b841,0x3bbfe400,0x3bc115e4,0x3bd45c77,0x3c02f645,0x3bd0ef52,0x3ba3a58a,0x3b9bcb7f,0x3b40f03e,0x3b234b5c,0x3aebbd2b,0x3abee27f,0x3aa532ea,0x3a80ff00,0x3a3e61d6,0x3a5f585f,0x39fac940,0x3a091b64,0x39a70c9b,0x3a0db994,0x3a1eb3fe,0x3a66acd5,0x3aa75356,0x3ab59e36,0x3b0cdca7, +0x3b2db81c,0x3b25051e,0x3b3a44dd,0x3b4cf13c,0x3b59d215,0x3b68b82f,0x3b810e1a,0x3b6f5efd,0x3b7cfb29,0x3b657b43,0x3b6d3b19,0x3b55be2c,0x3b312272,0x3b59249e,0x3b5a37de,0x3b8730ea,0x3b557b7c,0x3b479e83,0x3b3fbedc,0x3b36465e,0x3b2da363,0x3b2ac892,0x3b0b2de9,0x3ae45176,0x3adf0fb0, +0x3aa5d05b,0x3a756d6f,0x3a6a7666,0x3a6e19bb,0x3a88e0a3,0x3a9ac8f2,0x3aaccf0f,0x3abaf82c,0x3ac11ff6,0x3b00b545,0x3b09ecf7,0x3b1578f3,0x3b306092,0x3b390e02,0x3b59112f,0x3b5f80d7,0x3b45a18e,0x3b6e7f1e,0x3b82510e,0x3b109888,0x3b0c801c,0x3b044053,0x3b0c61d3,0x3b13dfd8,0x3b230d2c, +0x3b2878d3,0x3b39ff2f,0x3b2ab1d4,0x3b1e7a37,0x3b1076ca,0x3b03535f,0x3ae87ae4,0x3ad65410,0x3acc1e13,0x3ac963a8,0x3ac7cc64,0x3ac51454,0x3ac04b89,0x3ac1d083,0x3ad29c8e,0x3aee8124,0x3b193ba3,0x3af0a4dd,0x3b01ea87,0x3b2c65be,0x3b450de4,0x3b2c32a6,0x3b23e5b1,0x3b3d5b63,0x3b3486d0, +0x3b216be5,0x3b09682a,0x3b024f10,0x3b26de0a,0x3b16b9ac,0x3ba1e4e3,0x38b3abaa,0x38b828ce,0x38e6b01a,0x38415633,0x3840e809,0x383b3141,0x385b10e1,0x386d40c6,0x3867fd5c,0x386d5b4c,0x38710741,0x38686cad,0x385d5eab,0x3869e14a,0x3882c324,0x38848981,0x388b7aa2,0x38816858,0x38745542, +0x383c9b33,0x38844d9a,0x387f0bca,0x38aea43d,0x3933eca6,0x388d2460,0x38b3df25,0x3930f205,0x39312d1b,0x391ed509,0x38f2a018,0x393a6d90,0x392bf861,0x3907c5b6,0x38d61865,0x388fd34c,0x390523c6,0x38fd19ba,0x399309e7,0x3880a274,0x388fab4b,0x38a38d49,0x38b79329,0x39062d80,0x39148296, +0x3908ce05,0x390cd76c,0x3919d392,0x39118148,0x38fa122e,0x3903d981,0x392cada9,0x392fd1b3,0x3933a251,0x39089288,0x38c4acfe,0x38a5c5db,0x38da139e,0x388cfdf6,0x37e3ba82,0x37f41272,0x3893b6ae,0x3874b16b,0x37aba2ab,0x380f6ff0,0x386f274c,0x384c8e72,0x386451cf,0x387cd8d1,0x37fcf349, +0x37cb68b9,0x37d24c68,0x386a9cee,0x37b4e567,0x38f6606c,0x392efe56,0x38b02efc,0x38d52121,0x390468c4,0x393f806d,0x3965acf2,0x3939925a,0x394ebf4b,0x394398ea,0x3961cdc6,0x391e8d6e,0x394b5192,0x399439ed,0x39aee597,0x39a54908,0x398e959b,0x39195321,0x3916bbda,0x38858a40,0x390b9e38, +0x37f1fba8,0x384e9121,0x388c5d0d,0x382cc742,0x38429564,0x37edea5a,0x38c679d3,0x390f4c86,0x38ba0dd5,0x38a71370,0x3894bbbd,0x37fa2a30,0x37c2df78,0x38a9c853,0x389bc258,0x39146731,0x37dcaf8d,0x390d63f1,0x3929a2ad,0x399b06b8,0x39cb6759,0x39f20a87,0x39c0ec01,0x39d05e2e,0x39cbae3c, +0x39eb6b68,0x399f5b5f,0x39a52bb5,0x3a1a5d35,0x3a2a4fd6,0x3a18fb4c,0x39c93dee,0x395d1ad1,0x3926156f,0x38ea025b,0x38673a28,0x3837f47a,0x3861bbe9,0x38e3ff11,0x38a1760e,0x38a9ae2b,0x3895e540,0x3904ecff,0x39870343,0x39b6e417,0x39812ecf,0x392b5ff6,0x38775036,0x37517529,0x391e8882, +0x37f09920,0x38d20714,0x38eeb4de,0x39648515,0x39644cc2,0x39b2c9b9,0x39f75373,0x3a02d281,0x39c0c150,0x39d62456,0x39bb81c0,0x39f12675,0x3988dd09,0x39e8cea4,0x3a5b41b8,0x3a886851,0x3a6fbacd,0x3a3df8c9,0x39ba4722,0x398c69ed,0x392bc6cb,0x397315cf,0x381ad643,0x38c89fee,0x38bf246d, +0x388718cb,0x385157d3,0x386186a3,0x38357ebf,0x38ccecc7,0x395e8852,0x3953278f,0x39394517,0x38ee332e,0x386e9b23,0x39478ec9,0x384c8c68,0x3a494433,0x3a5043dc,0x3aaf2ad4,0x3aac3125,0x3aa7bdd0,0x3a2a2100,0x3a294910,0x3a3c88a0,0x3a103955,0x3a53a6db,0x3aa447ec,0x3a966032,0x3a7878f7, +0x3ac26809,0x3a9284fa,0x3a395b5c,0x3a81a821,0x3a7955f0,0x3a8b4f69,0x3a6cf68b,0x3a40be6f,0x39ced096,0x39c2d9bc,0x3948b61f,0x387bd77c,0x38a9cd15,0x38a05075,0x38c33589,0x36dfaa4f,0x3786e275,0x3929e9bc,0x39f37b8d,0x39ed2d3a,0x39c5a5a1,0x392a827a,0x39d24708,0x3a76bebc,0x3a392362, +0x39cde55e,0x397f61a3,0x3a4ca4cd,0x3a7acffa,0x3a9cd784,0x39a9fe95,0x39681117,0x39482deb,0x3a719ad1,0x3a0f6da7,0x3a46a43f,0x3a52b772,0x39f4c5da,0x39e575aa,0x3a338139,0x39c9a778,0x3980e1f2,0x393dcc2b,0x38bb2f72,0x382b10a2,0x3791a125,0x379d60a6,0x37221328,0x37df4a17,0x37fc626f, +0x3814e27d,0x37fbd217,0x3710d4f0,0x38470dd7,0x3963322e,0x3a5244c3,0x3a3bb20b,0x39f5a633,0x3a0da7f5,0x3a9bb755,0x3b54b0c8,0x3a677cc8,0x3964f618,0x3a47ac8d,0x3a0521f0,0x3a364dcb,0x3a8957ae,0x3a2bfd7b,0x3a14977c,0x393def6e,0x396b12ef,0x399bf588,0x39c218c3,0x3996e9d2,0x391532a6, +0x38ef42ad,0x3841640d,0x388d6b06,0x387a8822,0x382d8499,0x37b3145a,0x37ca87fa,0x37945a3e,0x37b0b4d0,0x37e18c50,0x36b0eab7,0x3670bf82,0x34742404,0x35ea57aa,0x36d3b35e,0x382aba83,0x39763c1e,0x39437d1a,0x39b372e4,0x3a37a1c1,0x3a778874,0x3b032c08,0x398462ac,0x39a013c9,0x3aec5e27, +0x3aaf5318,0x3ac6dbd9,0x3abe7e71,0x3a80a3e0,0x3a48c1f4,0x39dbcfd8,0x39c1c0e9,0x39ddf0cf,0x3a0fa0ec,0x399140d6,0x3949c334,0x38867a4a,0x380a5032,0x382ab8c1,0x382501fa,0x38293078,0x37540335,0x369fece6,0x376e12ee,0x372efe26,0x379e3134,0x35cf30fb,0x35ad273d,0x35815ce1,0x37258525, +0x3807e669,0x387fd1d6,0x37b9b31f,0x38411817,0x39b2c3b0,0x39e4ae57,0x3af4359b,0x3b825b2f,0x3aacfaa7,0x3a78c9c1,0x3afebbb2,0x3ab27534,0x3a735ac6,0x3a14b1b0,0x399b69d0,0x39c0261e,0x398fc198,0x392b4c31,0x398461b1,0x39a02be2,0x3972619e,0x3955caf4,0x397e697e,0x39160c90,0x3912b29b, +0x38f2c9bb,0x38be1730,0x38b04765,0x389a475b,0x37988cc0,0x35be66bd,0x36f9de4c,0x360b22b7,0x3631bdbe,0x367fabf9,0x368f3be0,0x376a3d79,0x3885780c,0x385651ec,0x38588bfe,0x3a28c537,0x3abb6d65,0x3ac92cb3,0x3abe90f3,0x3ab5d0a3,0x3a938b24,0x3a337f08,0x3a24649b,0x3a3cf96d,0x3a2ccc1b, +0x3a2a70f4,0x3a71090e,0x3a6c0a66,0x3a2f0187,0x39a9e784,0x39a811a3,0x38dc2aed,0x38081e61,0x387f07ee,0x38fad051,0x394ca9bc,0x39845f8a,0x3991e9af,0x39803e86,0x3943f535,0x38a3a62a,0x37bcff22,0x366d54e9,0x37035501,0x372c92ea,0x374c4726,0x37a0ed41,0x372a47a5,0x37bbd15a,0x3753794e, +0x3804182c,0x395ec665,0x3a41051b,0x39bc80a2,0x39df0b19,0x39ed2325,0x39b714f7,0x39ba9ad8,0x39ac7072,0x39d2f4d5,0x3a003cea,0x39ad05f3,0x3987482d,0x3970c8ff,0x3999f244,0x39900473,0x3962e56c,0x391a193a,0x38a147a9,0x38255393,0x381308ab,0x3828e32f,0x3890af96,0x389f69aa,0x386b70c0, +0x3857f59b,0x381127a3,0x380b4724,0x37cd25cf,0x37bb4ca8,0x380b3747,0x3850ef58,0x38b24a00,0x38d109dc,0x38eeeba3,0x39127f6d,0x393768e6,0x3951e3f3,0x398bd059,0x38987b74,0x389e515a,0x38de4a48,0x38b6ddb5,0x390be73e,0x39072d6c,0x39234b22,0x39758b5d,0x39375b64,0x394a0325,0x3959a56f, +0x3914e401,0x38b66d8c,0x383e6924,0x37f5eaeb,0x3769e269,0x37f22848,0x38024606,0x383d5d32,0x387bf9a8,0x38935c43,0x389244e7,0x38a6de50,0x3890fb3d,0x3882d9c4,0x389496d0,0x3850187b,0x382f47fb,0x38534593,0x3850920d,0x386ff3bf,0x38a86bae,0x38797848,0x388e481d,0x38b24a80,0x3836708b, +0x39325d13,0x39197315,0x38fd34a9,0x38e40e5e,0x38f012be,0x38d0c042,0x38c16e2c,0x38d507b3,0x38afdd14,0x38961d2f,0x388c1b8e,0x3812c194,0x3811a554,0x382e67b0,0x38452be9,0x386847c9,0x38713c59,0x3877a93c,0x389775a8,0x3890bd26,0x389fc6d3,0x38a0b548,0x38c282a3,0x389be087,0x38b326d2, +0x38ece82f,0x38c442ed,0x38e27cf1,0x39005bc2,0x38bd63d6,0x38de0c9d,0x38bb2904,0x38f53e69,0x3934799a,0x39466906,0x3926929d,0x3957d356,0x39204cc7,0x3913d4c8,0x3906afb1,0x38e206a3,0x38e8d33b,0x38e52c87,0x39060edd,0x38c92c12,0x389ac0bb,0x38864860,0x38821a2e,0x38767fa0,0x3880cc13, +0x387540d2,0x387c22ff,0x38a0e4d1,0x38abecce,0x38bee094,0x38e4632b,0x38dbe318,0x38df5675,0x38ef6793,0x390a7f0c,0x39109a7d,0x3910a7c0,0x39236ae7,0x39254c45,0x39210319,0x39446c55,0x392b5b82,0x3986fb1a,0x396e477c,0x392ef5a7,0x395641a2,0x3946c54c,0x3868e3e5,0x385330a5,0x383d286d, +0x384430de,0x384d76f4,0x385ac053,0x385d2e52,0x38757bbe,0x387c892b,0x38866a0c,0x3885a3af,0x387ff2e4,0x3874dbcc,0x38740a85,0x387d08ac,0x3882bc55,0x3886c235,0x388728dc,0x38865b67,0x38966d6d,0x389281e6,0x38b28d32,0x38d71d3e,0x389b0563,0x38b927a7,0x38f29f98,0x390905ac,0x38e30b89, +0x38d78bfb,0x38f7add4,0x38decf37,0x38b09a2a,0x38850da8,0x386d6cda,0x38b6f619,0x389cf546,0x39219f93, +}; +const uint32_t orange53_rom_ER48[HRTF_MODEL_N_SECTIONS * 578] = { +0x3ecf90de,0x3e43bd0a,0x3e85436f,0x3e6bc502,0x3e717785,0x3e8b2ad7,0x3e40ae0a,0x3e3fe204,0x3ea17f1a,0x3ea626c7,0x3ea5a207,0x3e873a99,0x3e8c4e68,0x3eb3680f,0x3e8dc806,0x3e40e11e,0x3e3b9a91,0x3e95fac6,0x3e51241a,0x3e32d18f,0x3e5102e8,0x3e2e2906,0x3e3d758c,0x3e3ab2a3,0x3e49c6a2, +0x3e4dd51f,0x3e47c56e,0x3e48f870,0x3e4fa69a,0x3e4e6ab0,0x3e67a5b8,0x3e5e0d44,0x3e77bd46,0x3e69c6df,0x3e683d69,0x3e5a37de,0x3e54386f,0x3ead2d5c,0x3ebd5176,0x3ef10573,0x3e36b8bd,0x3e5eccbe,0x3e2cf0d8,0x3e43679b,0x3e171235,0x3e050cc2,0x3e31fe47,0x3e1c1e73,0x3e277db9,0x3e1a5435, +0x3e1b94d3,0x3e5edcb9,0x3e30f45e,0x3e2c81a7,0x3e1e5577,0x3e5ccff6,0x3e85c9f3,0x3e7738c0,0x3e87f072,0x3e8ebd30,0x3e896298,0x3e87102d,0x3ea86d1f,0x3eb44f10,0x3ec1a2b8,0x3ebc9426,0x3eeaad05,0x3ed3ffbb,0x3f01cf66,0x3efe19d1,0x3efbc144,0x3eda0437,0x3ebf20eb,0x3ef6e5ba,0x3ec5837a, +0x3e9dcee3,0x3e7a1c2c,0x3e37066a,0x3e15fd13,0x3e132d81,0x3de26354,0x3ddce7e7,0x3ddc07fe,0x3e0eaac6,0x3e1c755d,0x3d9fea85,0x3dd12c74,0x3dbadb91,0x3dc6dbce,0x3dfa0b1d,0x3de8e877,0x3e23af05,0x3e247465,0x3e89d601,0x3e8675da,0x3ea7372b,0x3eac24d5,0x3ebc4762,0x3ecdd8d3,0x3ed06645, +0x3eefa441,0x3f0b300a,0x3f23329f,0x3f3ef1d8,0x3f5bce8b,0x3f4efb40,0x3f3bb177,0x3f177bf3,0x3f0bd60d,0x3f24309b,0x3ed488a7,0x3ecafc66,0x3e33b4e2,0x3e1f7e3c,0x3dbb28db,0x3d896e7f,0x3d8d31cd,0x3d2b81a2,0x3d22d090,0x3d44134a,0x3d30e96b,0x3d545465,0x3d3668e5,0x3d51d3f5,0x3d5340b8, +0x3d8da900,0x3d964b64,0x3de26873,0x3df16f5a,0x3e79aaab,0x3e60b27f,0x3ea59eaa,0x3eaef5e4,0x3ecb3ec0,0x3ee6aafb,0x3f02f145,0x3f15a1e8,0x3f36493c,0x3f662b04,0x3f8683bb,0x3fa0a9c5,0x3f9cecd3,0x3f8b70b1,0x3f5cd654,0x3f30ba66,0x3f553e31,0x3f0fb4d7,0x3ec51439,0x3e4fe5e8,0x3df06ec9, +0x3dafbc53,0x3d72039e,0x3d112dfd,0x3cd69a4b,0x3cccd67e,0x3d08802d,0x3ce4f245,0x3cd099f8,0x3cb43b7c,0x3cd6e20c,0x3cfa77a9,0x3d37110d,0x3d8cfd90,0x3e01250d,0x3e089ad0,0x3e61e568,0x3e915233,0x3ec2f05a,0x3ed31e49,0x3f012185,0x3f0c1532,0x3f1b26fe,0x3f3c2ae7,0x3f690b9f,0x3f9e17a9, +0x3fbfe968,0x3fe3b182,0x3fe02d0a,0x3fc0ce82,0x3f8d8078,0x3f74dbfa,0x3fad6a2d,0x3fe0acc6,0x3f72f447,0x3ec45c39,0x3e8967dd,0x3e2748a4,0x3e12d6c9,0x3d9dbc1c,0x3d620506,0x3d14dcae,0x3d16a0ce,0x3d16743f,0x3d10b531,0x3cdd4b24,0x3d04167e,0x3d26ff81,0x3d8b2a4e,0x3da4cc05,0x3e0f18c6, +0x3e5438ca,0x3eb319b8,0x3ee9aef0,0x3f4ae9c5,0x3f83334d,0x3f9700b4,0x3fd766ea,0x3ff56a92,0x4003c618,0x4003285f,0x4000ad92,0x3ff7d1be,0x3ffea6e3,0x3fe52d06,0x3feb5a44,0x3fdb3d85,0x3fe92d0c,0x401da0c5,0x3f5b22eb,0x3faf8217,0x3ec2cd65,0x3e964aed,0x3e190fe3,0x3dc5176d,0x3d9b32ad, +0x3d4f2931,0x3d2fbd5b,0x3d42ca36,0x3d22755e,0x3d07bbf0,0x3ce3a23d,0x3d06f00b,0x3d3bf706,0x3d97417e,0x3dd8ee30,0x3e4f3aa7,0x3e58fe11,0x3ed9db8d,0x3f02f28b,0x3f524087,0x3f861b57,0x3fa8ee9c,0x3fd90213,0x3fe3fbc6,0x3ff80237,0x4003f704,0x40063afb,0x400d6cce,0x401529de,0x400f8814, +0x40053cb8,0x401b066f,0x4012bc3a,0x4058a92a,0x3fa8a9fd,0x3f55cb6b,0x3ec9f26a,0x3eb91724,0x3e250052,0x3de3f11c,0x3d9fae82,0x3d64afa4,0x3d5a86c4,0x3da388d0,0x3d53f1b9,0x3d423242,0x3d4ffb8d,0x3d59e64c,0x3d838f99,0x3ddd5662,0x3e095261,0x3e41cfd6,0x3e822ff5,0x3ec6fbbe,0x3f046345, +0x3f4df04f,0x3f8f2be4,0x3fbdad7c,0x3ff8e565,0x400140e1,0x3ffebbd7,0x4009bdd6,0x3ffc31f3,0x3ffd5951,0x4012bee4,0x40187156,0x402a55d2,0x406d06b6,0x403ba4c6,0x407b3686,0x4019e126,0x3fa8907e,0x3f0a617f,0x3eb05f74,0x3e242b16,0x3dea3c7d,0x3d975de0,0x3d6c4a20,0x3d7d0e07,0x3e09479d, +0x3d7fe167,0x3d57c9d5,0x3d8834fa,0x3d823ccc,0x3daa6a23,0x3e107acb,0x3dfda4f4,0x3e46f2ff,0x3e832206,0x3ed08294,0x3efe7ead,0x3f44a056,0x3f9089b6,0x3fc89a62,0x3ff7b232,0x4010cdbf,0x4011edf9,0x40131689,0x40014f05,0x3ffe9e20,0x400d1256,0x40210fce,0x40491269,0x40a3f3f7,0x407bf617, +0x4086779e,0x4001e6c8,0x3f8f4f2e,0x3e9e684b,0x3e9d4668,0x3e183351,0x3de76153,0x3da41641,0x3d90509e,0x3d8d610a,0x3e2977dd,0x3d84dc17,0x3d590a34,0x3d888604,0x3d97e893,0x3dc3c53d,0x3dff5d4e,0x3e25e9b2,0x3e5379f6,0x3e995033,0x3ebb6c1f,0x3eed131d,0x3f1f1878,0x3f4eeaed,0x3f911435, +0x3fc822e3,0x3fe6be97,0x4003a476,0x40145c16,0x40132eeb,0x4013c2a9,0x3ff9a296,0x4013ab87,0x401de606,0x409173c0,0x4059bd58,0x404ac3fa,0x3fafe3a2,0x3fcb9fba,0x3efd2924,0x3e8e99ee,0x3e27d6d4,0x3e3594b1,0x3e0d9ae7,0x3dbd24cf,0x3daa6831,0x3ddbb1b0,0x3d9810de,0x3d902ddb,0x3d8c706e, +0x3dc8420a,0x3dda5b17,0x3e12ef58,0x3e3e9e00,0x3e799ec7,0x3e939427,0x3edbac47,0x3ed3b013,0x3efa075d,0x3f26d443,0x3f5a0c19,0x3f91e525,0x3fc77765,0x3fda28e2,0x3ffcd794,0x3fd1e990,0x3fc254b6,0x3fe07048,0x3fe20d6b,0x3ff51c49,0x40279a15,0x4012e362,0x3fa3b08e,0x3f9169cf,0x3f20d24f, +0x3eba970b,0x3e8165d2,0x3e55dccd,0x3dffb722,0x3ddc19ce,0x3dc7c835,0x3e00b1ca,0x3de517f0,0x3dae1d0c,0x3d9a634f,0x3dae33f4,0x3dc476b4,0x3e0f5539,0x3e3263a7,0x3e65350a,0x3ea54707,0x3eb05bb4,0x3ed48491,0x3ebbf2ce,0x3eeea2c9,0x3f0b87d8,0x3f324ca4,0x3f4886f4,0x3f568c1c,0x3f789a7e, +0x3f8a00f0,0x3f8d96d4,0x3f984386,0x3f9baa64,0x3f9e7e04,0x3f9b6d52,0x3f9b90cd,0x3fa1dbd7,0x3f7d7cc7,0x3f2bd3b7,0x3f0f0d90,0x3ebc2ec3,0x3e951a63,0x3e6fcd1f,0x3e31613a,0x3dee022c,0x3e0c8c3c,0x3debd850,0x3df82f94,0x3ddfe6b6,0x3e09eff8,0x3dee6b16,0x3e0793e5,0x3e0fa414,0x3e5b4417, +0x3e6aa2bf,0x3e94c78f,0x3e9faaca,0x3ed91688,0x3eab6781,0x3ed550bb,0x3ee656be,0x3f08f4d1,0x3f1a03bf,0x3f2f74bd,0x3f3ebce3,0x3f520003,0x3f63c0c2,0x3f6b8842,0x3f800b5c,0x3f804f15,0x3f76d974,0x3f7e79e3,0x3f4a72d0,0x3f1c346d,0x3f18dd7d,0x3f044726,0x3ebf091d,0x3eb7f14e,0x3ea20288, +0x3e71518a,0x3e2a8d01,0x3e24a023,0x3e24ace8,0x3e577991,0x3e85960e,0x3e1ac493,0x3e510fdc,0x3e62cef4,0x3e61d898,0x3e648d4e,0x3e8418da,0x3eae85a5,0x3ebddaea,0x3ec3975f,0x3ec5848a,0x3ed520b0,0x3ee35782,0x3f001ed1,0x3f0adcf9,0x3f152a2f,0x3f26eb6d,0x3f405a08,0x3f40ff49,0x3f4fb3d1, +0x3f5d3ec8,0x3f4a564a,0x3f48f1d8,0x3f4feb68,0x3f2b1b08,0x3f00bbba,0x3f171d90,0x3f25f752,0x3ed578d5,0x3ed052df,0x3edbd8a4,0x3eee80f6,0x3ea9d1c4,0x3ebfe545,0x3eb76c3f,0x3eaf6327,0x3eb23bfd,0x3ea86201,0x3e9e381d,0x3eb46c88,0x3ec258d3,0x3ed4ed2d,0x3ed5538c,0x3efadff4,0x3ee6a018, +0x3ed065dd,0x3ef264e4,0x3ef5c5fe,0x3f043e49,0x3f03b9bf,0x3efd8461,0x3f163b7a,0x3f0fe94b,0x3f18b7ba,0x3f2ae1be,0x3f1de02b,0x3f356c7e,0x3f327984,0x3f061f6c,0x3f0886d7,0x3f169994,0x3eb50d3e,0x3ed49964,0x3ec2e927,0x3edf9d56,0x3f06bf82,0x3eb0abd1,0x3eb7ac2c,0x3f0b6464,0x3f1c572b, +0x3f021b2c,0x3ee56b12,0x3ef609a2,0x3f111d14,0x3f138bfb,0x3eb3221e,0x3eb5e0b4,0x3eee72a6,0x3ebb301d,0x3ebdcd9b,0x3ebc48d6,0x3ea3d197,0x3eac5429,0x3eabab7d,0x3eaf59c5,0x3eafd292,0x3eaba041,0x3eb86216,0x3eb6ddc3,0x3ec22777,0x3ec89d20,0x3ec4b287,0x3ed106e1,0x3ecc8882,0x3ec1b645, +0x3ec8abed,0x3ec585ae,0x3f5782de,0x3b05381a,0x3a76f083,0x3b0824e0,0x3af4dd60,0x3afef09c,0x3b2fa1ed,0x3ac4afb8,0x3aadea11,0x3b49bc9c,0x3b5d8ee9,0x3b6e5c28,0x3b39056b,0x3b497fa0,0x3b8f5419,0x3b420b37,0x3ac9efac,0x3acf6959,0x3b5a8caf,0x3add1b67,0x3ab08df0,0x3ae5aa6d,0x3a945500, +0x3ab1843e,0x3aadfc14,0x3ab9c209,0x3ab39784,0x3aa19a72,0x3a9d8568,0x3a9e44ae,0x3a9b96ea,0x3aae43a2,0x3aa9eb1a,0x3ab37204,0x3ab35e19,0x3aa566eb,0x3a7137fe,0x3a8bde46,0x3aa86573,0x3b28019c,0x3b78f87b,0x3a0fcff2,0x3a9f9f1f,0x3a149cd7,0x3a5e820c,0x39e190c3,0x39c386f7,0x3a698d36, +0x3a2f9e04,0x3a87a25f,0x3a304fe0,0x3a035cb6,0x3af618ec,0x3a571530,0x3a786481,0x3a3d4164,0x3ad2ad1d,0x3b1c72db,0x3afe7ee1,0x3b1142f9,0x3b259b9c,0x3b1b7325,0x3b1a03c2,0x3b344e64,0x3b1f1685,0x3b2583a3,0x3b274856,0x3b4d2b83,0x3b49bea4,0x3b529db1,0x3b5d22ac,0x3b38dff8,0x3aa3ff34, +0x3ab9b1f7,0x3ac1051e,0x3ae3a0ae,0x3ac14a14,0x3abdc0ab,0x3abb94bd,0x3a0e3ecb,0x3a3c048b,0x3a1ec811,0x3a3a2977,0x3a6bb1c6,0x3ad093c4,0x3ae1735c,0x39fc4608,0x3a5f566c,0x3a054ffd,0x3a400e93,0x3a9ea1c0,0x3a7e72bc,0x3ab377c2,0x3ab3c777,0x3b5dffc8,0x3b43b1a9,0x3b855de5,0x3b75a01c, +0x3b64ff48,0x3b5852e8,0x3b4469a6,0x3b41ce46,0x3b614879,0x3b7e3ab8,0x3b935693,0x3b8ff735,0x3b9db68d,0x3b56c791,0x3a3b720c,0x3ab0b856,0x3acfd01d,0x3ae5f222,0x3b21cc50,0x3a8b832e,0x3b05c579,0x39c430b5,0x39b20a60,0x3a0bbb84,0x3a1416a0,0x3a4f5de0,0x3a85c81f,0x3a5cbfab,0x3a3c32dc, +0x39e36ad1,0x3a0394da,0x3a3d6812,0x3ab13569,0x3acbd6dc,0x3af3456d,0x3ad0bfad,0x3b87ed7e,0x3b58ecc2,0x3bb20a2c,0x3bba61c7,0x3bd57777,0x3bcc586d,0x3bae15bb,0x3bb3002b,0x3bd1d106,0x3be3dbb5,0x3c0737aa,0x3c02d782,0x3c1614b7,0x3bb8bbb7,0x3a4631ea,0x3a9e2530,0x3abe663d,0x3afdf9d5, +0x3ad8ae12,0x3a983b54,0x3b275935,0x39f7d836,0x39f5f29b,0x39c88ef7,0x3a383f5b,0x3a756925,0x3ab49379,0x3a8a3ade,0x3a32e4dc,0x39c91dc7,0x3a2d7e92,0x3a937442,0x3af53cf6,0x3b0febce,0x3b3d07a1,0x3b190163,0x3b931356,0x3bb36017,0x3c03c0a6,0x3be64bcd,0x3bdad8ba,0x3bb78756,0x3bb6f03b, +0x3bc1ed6d,0x3bcae80d,0x3c022d99,0x3c12fbdc,0x3bf7263f,0x3c2b7a13,0x3bb5e5a1,0x3a11c45a,0x3a8cd5a2,0x3ba13413,0x3beeec31,0x3c020acc,0x3bb7d2b6,0x3b5f5eb4,0x3aa8d5ce,0x3b155c30,0x3ac4dbc2,0x3aef57ae,0x3aa086ce,0x3abc0a89,0x39bac975,0x39bea84f,0x3a4e119e,0x3a51abb9,0x3a6c3965, +0x3b141608,0x3b0699a1,0x3b1afadf,0x3b226eb8,0x3b8f5239,0x3b189e74,0x3b4111c8,0x3a855470,0x3ab244b7,0x3b216fff,0x3bb507eb,0x3bd393bf,0x3c0d09d8,0x3be86164,0x3c1ecac2,0x3c58f375,0x3c3744f4,0x3c3f6a14,0x3c33e865,0x3c129bf9,0x3b86dd04,0x3c0c0bd6,0x3c24cfdc,0x3bbeb258,0x3b3e7fe6, +0x3ab2546a,0x3aa3e997,0x3a21cd87,0x39933abc,0x398c6971,0x3a3cb4c1,0x3a2f79f9,0x3a099b48,0x39ae2e3e,0x3a09f34e,0x3a52d129,0x3a1c030c,0x3a13f526,0x3a8d26be,0x3a8463d8,0x3b6e69e8,0x3b95524d,0x3c185059,0x3b832c6a,0x3b04f992,0x3a39bc05,0x3a58d48a,0x3a4a38be,0x3aa66e36,0x3ab3791c, +0x3aa9d9a7,0x3b23b7cf,0x3b75cad5,0x3bac6e94,0x3ba3ab72,0x3ac925a4,0x3afa759f,0x3b894417,0x3a6aef07,0x39a8163e,0x3aaf4946,0x3a826e0c,0x3a416509,0x39fa785f,0x398f0d2c,0x391b7fb5,0x392f8229,0x393f5313,0x396a6ade,0x3968e5b8,0x39b54b6e,0x39bf664c,0x39d21c93,0x39a1c295,0x3a152c2a, +0x3ad45b3d,0x3a9e41c4,0x3a91dd8b,0x3ab16c37,0x3b5a4e92,0x3ba3d499,0x3bbfb61f,0x3bb91420,0x3b76089c,0x3b3186d1,0x3b91c9a7,0x3c05f2a4,0x3c55037b,0x3c6d6e8d,0x3c616a28,0x3bf1f346,0x3b3cecda,0x3b541739,0x3b1b3622,0x3b0dd0b9,0x3ae30bb8,0x3b332fec,0x3a8f56e5,0x3a34e47a,0x3a54ea00, +0x39fb3da5,0x3978b799,0x389d507d,0x386faf16,0x38ce1351,0x38f49a81,0x38b2b52d,0x398e8735,0x3995a414,0x3918a4ac,0x39c715b8,0x3a9f174e,0x3a90ffde,0x3a7c6b11,0x3a4b03ef,0x3b4af5cf,0x3baacecc,0x3bedef4b,0x3c07def4,0x3bc405f5,0x3b6f8362,0x3b941a4a,0x3c04d6e6,0x3c809782,0x3cbbf741, +0x3cdcde4e,0x3ce0c1c9,0x3bdf71ed,0x3c88876c,0x3bdbfaeb,0x3bcf3f65,0x3b6eeadf,0x3b13ab60,0x3a935745,0x3a13eee4,0x39cd41a2,0x39158b51,0x390ddd66,0x38e41924,0x38936749,0x38802e00,0x39530d43,0x3984e962,0x39bf36fc,0x39c0df73,0x39d79384,0x39d87c47,0x3a543fca,0x3a9c3969,0x3b06fd71, +0x3b3a2ace,0x3b0909f9,0x3aaed758,0x3a614c5a,0x3aaf87e9,0x3ae15cf6,0x3b4684f8,0x3b114806,0x3b43c960,0x3b64deb1,0x3c5ed0eb,0x3cba1b2d,0x3d19129a,0x3cc45954,0x3d109aaa,0x3cc2c217,0x3c8494ed,0x3c4df9cb,0x3bcc2653,0x3bf1fe4a,0x3bc03a10,0x3b00afdd,0x3a884d50,0x3a5a7dcd,0x398ae873, +0x39442314,0x3934798b,0x399246b0,0x38fd2fe5,0x39114157,0x3994c3e0,0x398a9e63,0x39cea5a2,0x39be545c,0x39b01377,0x39b3eb02,0x39979455,0x39c3bb1a,0x3a5777d1,0x3b4256c0,0x3b7007dd,0x3b9c99da,0x3c04899f,0x3bcee9ac,0x3be0ad02,0x3c48362f,0x3c8aa696,0x3c923e30,0x3cb2c078,0x3cc5291f, +0x3c28e4a7,0x3c14d6cf,0x3c00028e,0x3bd9da37,0x3bc9e97b,0x3ba12f78,0x3b8b6780,0x3b92ced9,0x3b707231,0x3b3e3331,0x3adf61fb,0x3ac7a4b7,0x3a839267,0x3a4715cf,0x39d51586,0x39891fbb,0x39a093d9,0x397c646d,0x3994bb47,0x396958ef,0x3a36872d,0x3aa3035e,0x3ad45095,0x3b084edb,0x3b1b9d71, +0x3b0cc3d5,0x3b286943,0x3b3462a9,0x3b1dc211,0x3b40e1b4,0x3b798727,0x3c09acf9,0x3bfdf610,0x3c0317bd,0x3c03acf4,0x3c0344b8,0x3c0f1846,0x3bea5dd0,0x3bedcbb5,0x3bd0d17c,0x3bbf1aa0,0x3b993244,0x3b99afaf,0x3b89f78c,0x3b693b0c,0x3b3ad153,0x3b196448,0x3aea1f2b,0x3abbf831,0x3a8bbb30, +0x3a207df7,0x39a54d70,0x399e86ea,0x39720bac,0x398489ec,0x39be2e7b,0x3a411b86,0x3a4084a7,0x3a887a91,0x3a978b97,0x3ab1052d,0x3aba9129,0x3aea4052,0x3b005011,0x3b312648,0x3b312c86,0x3b7dd808,0x3bdf0527,0x3bcedd86,0x3bd22250,0x3c014378,0x3be020c2,0x3b87e942,0x3b9a949d,0x3b8412ad, +0x3b702c18,0x3b86d090,0x3b808866,0x3b5fa56f,0x3b4db0be,0x3b340986,0x3b20274e,0x3b2b8490,0x3b06c609,0x3ab51e18,0x3aa2dcf7,0x3a69175d,0x3a2a9342,0x39faf7f5,0x39b06027,0x3a27ec50,0x3a3030c0,0x3a2fb07e,0x3a2dd845,0x3a7bc180,0x3aa1854c,0x3ada2f58,0x3b09cebe,0x3b1eb914,0x3b590253, +0x3b8738b6,0x3b9c2c39,0x3bc71eeb,0x3bfb09f8,0x3bd4847b,0x3bc26b55,0x3bc61bde,0x3b956e69,0x3b5d6345,0x3b6783e5,0x3b86a5a1,0x3b660f03,0x3b597319,0x3b600c9e,0x3b640aa5,0x3b54536a,0x3b457c33,0x3b2e2ad8,0x3b1b2401,0x3b0f92ea,0x3af63906,0x3ae6ba33,0x3ae114f4,0x3abf64d3,0x3ab595ad, +0x3a9b1591,0x3a8981b7,0x3a678081,0x3a72e93a,0x3ab116b8,0x3ad4e88a,0x3afcb610,0x3b098f5c,0x3b0d3788,0x3b2ca675,0x3b29a77f,0x3b36e4a1,0x3b56ba11,0x3b46112b,0x3b85a56a,0x3b7704d2,0x3b314641,0x3b3ebfd9,0x3b6922f6,0x3b01ada2,0x3b0ea291,0x3b103e17,0x3b17aa9d,0x3b32f5d3,0x3b08dd6d, +0x3b0dd737,0x3b341f9a,0x3b4168c8,0x3b307c99,0x3b230c1c,0x3b2e7744,0x3b4c6ad3,0x3b50b0e8,0x3af7488c,0x3af205dd,0x3b18098e,0x3ae94363,0x3ada2b67,0x3abd60ef,0x3ac23a9e,0x3ac5a23a,0x3ac42e9a,0x3acb2ece,0x3ace978a,0x3ad0fbb8,0x3af27b42,0x3afbe30f,0x3b103738,0x3b1dfaa2,0x3b1f724f, +0x3b35f888,0x3b2bea79,0x3b1b126c,0x3b1aa14c,0x3b0ed7eb,0x3ba15b1c,0x38ae4474,0x38312273,0x38cd8d76,0x38a99fa6,0x38df9ff2,0x38ff9bde,0x387c92ef,0x389320e5,0x391aac03,0x3925c524,0x392e4249,0x390442ea,0x39114f68,0x394dff21,0x390b8edd,0x38b216d5,0x38935447,0x391c137c,0x38bf144e, +0x3875b6b6,0x389f31df,0x3845ccea,0x3876683a,0x3881898c,0x38950b39,0x3892bbc2,0x38810bbe,0x386b5f6a,0x3860351f,0x385e2155,0x3871a56c,0x3868c1e9,0x386a0dd0,0x386ae50b,0x385d410c,0x3836d428,0x3845967b,0x3883d568,0x38dd0105,0x39554ca6,0x3798925a,0x3883d1c5,0x37af7309,0x380f9aa9, +0x37f9c2ff,0x37dd37cc,0x3865847b,0x383eff4d,0x3866b688,0x380235e6,0x37db9fab,0x38e56b40,0x385064a0,0x383648b1,0x37c8575a,0x38a398c5,0x38bc6872,0x38a19496,0x38c44c92,0x390cdb96,0x3911dd29,0x3918ac8f,0x3931aa0e,0x3902a04b,0x39053d9d,0x39174d3d,0x391d1a31,0x390c926c,0x39048bc9, +0x3912c0d5,0x390a4366,0x38c96b8b,0x38a53613,0x38d4da77,0x38b1910c,0x389397c8,0x3853bfd3,0x38a46b18,0x37bd35e7,0x38415809,0x38a15f60,0x38a3643d,0x38d5e175,0x391817b8,0x38ac8902,0x3808da78,0x385b6d6a,0x383da7e7,0x38692e95,0x3826f0e0,0x37e18576,0x385adb52,0x387c8b70,0x391c2473, +0x3921ebee,0x398cbb03,0x39a7f588,0x39a8f9c7,0x39979043,0x3944f068,0x391cae5f,0x39571599,0x39421f0e,0x3952062f,0x393ba399,0x39608d6d,0x3933db90,0x38f95e76,0x38cde72a,0x38ed249b,0x388e5cc8,0x39029058,0x3830aa80,0x3912beaa,0x375beea6,0x382c1e9a,0x39387ad5,0x39886820,0x39b67dd3, +0x39873c03,0x39005c46,0x38884945,0x38ac26ea,0x38b055da,0x38db321c,0x384f49a5,0x380beee4,0x38955717,0x38cdff61,0x3944260d,0x393a9c15,0x39d7cb21,0x3a1347e8,0x3a2fee94,0x3a1994e6,0x39ac3886,0x39a03001,0x3a03362f,0x39c3cffc,0x39c74b6e,0x39c112ac,0x39fb86a1,0x39da523f,0x39a5fb25, +0x393b3940,0x395a4ae9,0x38f404ed,0x388ecdcd,0x38050827,0x39407034,0x3873eba1,0x3903305d,0x391a87a3,0x394de442,0x397447a6,0x38d351ee,0x38371585,0x3859bff2,0x385fc8a5,0x3890af76,0x38c9219a,0x389f5c77,0x385b72ad,0x391dafca,0x392d3c06,0x39917f4d,0x39c88b50,0x3a42de00,0x3a734470, +0x3a7d7802,0x3a52018b,0x39ed894e,0x398e7237,0x39d9f1e0,0x39cd4ac5,0x39d76489,0x39aee325,0x3a14262b,0x39e4d23b,0x39a8e5ea,0x395ae6dd,0x3a9e7767,0x3a57b539,0x3a3ffd69,0x39d6d753,0x393478d7,0x39c48c96,0x39e0710f,0x39c1ed3d,0x3952b153,0x3787ba6a,0x36ebdc3e,0x38ee3401,0x3899d30f, +0x38d63791,0x38b2918a,0x393a6089,0x39d22746,0x39e382e4,0x3a31199a,0x3a67acf0,0x3a9b5bc4,0x3a523b3c,0x3a7c4fd4,0x3a757d25,0x3a4ed099,0x3abf319b,0x3a7f20de,0x3a8cf257,0x3ab89232,0x3a3c33d5,0x3a0e954e,0x3a58046a,0x3a222128,0x3a4a7789,0x3a8cacec,0x3abdbc8c,0x39d2a6e6,0x3a2225af, +0x3aa014ea,0x39f3565f,0x3a0c4e0c,0x3a446902,0x3a4d6bdc,0x39286b10,0x388349e7,0x3733b993,0x37e39104,0x38352bdd,0x380bffb0,0x38009e06,0x3705bbfc,0x379707f1,0x37f98529,0x38184d6b,0x38aaff7a,0x3942db7b,0x39737ca3,0x39be42fb,0x3a1765ef,0x3a0097c2,0x39d27236,0x3a4a8bff,0x3a41c6e1, +0x39fd0fcf,0x3a8c8622,0x39342b11,0x396f77c0,0x39c908e5,0x3a928949,0x3a9c1066,0x3a5d929c,0x39906131,0x3a439b04,0x3b4ab0c0,0x3ac91c8c,0x39ea858e,0x3990847c,0x392dd0cd,0x398223d5,0x3878a9a7,0x36ca4718,0x365b24b4,0x34fa5115,0x3624a5d6,0x36a07cc8,0x37f5e18b,0x37cec8ab,0x374fa43f, +0x37e4f697,0x37ca30a0,0x386348b0,0x388f69b7,0x385a8c58,0x3858bb6c,0x38a60988,0x392e6392,0x39860a93,0x39accd29,0x399d290d,0x396c5d49,0x395cb55a,0x39db76e3,0x3a2434b1,0x3a502480,0x3a3e698d,0x3a3f28c1,0x3a5cdfef,0x39a7056d,0x39a36ba8,0x3afec5b6,0x3a55ae3a,0x39c2a04a,0x39c6ace8, +0x3803b1cf,0x37b77b1f,0x386667be,0x37f544de,0x375b0631,0x34b77d25,0x35f1b233,0x3556dbd7,0x378ea430,0x36f042f1,0x37568353,0x36e2e0ba,0x375492b2,0x380e039b,0x385d0319,0x38105752,0x3812b6f0,0x385d94ac,0x3961fdfa,0x39a21927,0x3a0bef07,0x39f5d764,0x39a41b42,0x3a1b57d9,0x3a322f12, +0x3a7fbb22,0x3acc9136,0x3aad94aa,0x3accd5a4,0x3aed32f8,0x39ac7136,0x3ab98d43,0x3b812dc6,0x3aef4e67,0x3aa12c45,0x3a15d103,0x3867837a,0x386c172b,0x388aca2f,0x37757cab,0x3670d4e6,0x3657bb51,0x36bb527c,0x35b4de28,0x36f5f1d1,0x35db10f8,0x3778c945,0x38b29609,0x389e0b40,0x38db45a1, +0x3905c8db,0x38e65a19,0x39205cb5,0x3958d8e1,0x3962ae02,0x3985f41f,0x398efff5,0x396b472e,0x390421a1,0x39b3f1ec,0x39a857c8,0x39a2cd68,0x3a128ed9,0x3a669060,0x3ac20ce0,0x3afe2777,0x3a9145fb,0x3ab7be0c,0x3ab1ba7f,0x3ab7e42f,0x3a73edd8,0x38ec1e12,0x38006872,0x372f9810,0x37a0f63a, +0x37275d72,0x37aa8edc,0x373b9f43,0x377d3b6c,0x3673185f,0x368fc856,0x37e77715,0x38964037,0x39216c45,0x39823ef7,0x3993a0e2,0x3985e3ae,0x393434cb,0x38fceb8a,0x38717e09,0x3816ad9f,0x38d9e818,0x3990214b,0x39dd9d69,0x3a19d47f,0x3a6cdba7,0x3a5fdf46,0x3a277012,0x3a28adff,0x3a41e30b, +0x3a2b8f2e,0x3a51a0f8,0x3a832406,0x39e1e26f,0x39db8ebf,0x39a2b05a,0x3962be2c,0x396beba1,0x392584c8,0x39128511,0x38ebc784,0x38dc7272,0x38b2e480,0x383930e0,0x38291cb6,0x379e1b22,0x37b2fce4,0x3801858d,0x381d95e8,0x382e7212,0x3880d50a,0x38a75847,0x3886d1be,0x38215509,0x3803b29e, +0x38156203,0x38aeef58,0x39154065,0x396aa5c4,0x398bd0b6,0x39913a35,0x39812e97,0x39905e59,0x39a46cd3,0x3a051e02,0x39c523a5,0x39b1ddc3,0x39b39054,0x39c54eb4,0x390c51db,0x38cefdf1,0x388565ac,0x383a3bb1,0x38a94667,0x38b12503,0x38ac026d,0x3888231e,0x3872f391,0x38617412,0x38384686, +0x381f2915,0x38241251,0x3891a2a5,0x388510bf,0x388d79a2,0x38af2d32,0x389694bb,0x388b87ec,0x3889f443,0x3846f6e9,0x37ecfa72,0x37ecdd9c,0x3783794e,0x37c20f5c,0x3834a21e,0x38a890a3,0x390eb67b,0x395dc04d,0x393ffe42,0x392f3438,0x397d24ae,0x392a9097,0x3908763c,0x39059d58,0x389890e3, +0x3905d987,0x391f9288,0x392dee84,0x3925ca38,0x394887b0,0x39289274,0x38fae945,0x38d81631,0x38ecbf83,0x38ccb946,0x391b4690,0x38c3d323,0x38d1df97,0x38d6293d,0x38abba8c,0x38a35750,0x38c103ee,0x38a0dc14,0x38a6e762,0x389d0497,0x389473e1,0x38722673,0x3875b3d3,0x3859f782,0x38631ee6, +0x38602296,0x38101341,0x38224aa2,0x3882e521,0x389025a2,0x38ad24fe,0x38d0e451,0x38cb4a3c,0x38e6a6e1,0x38e7b940,0x38ebb328,0x39141b16,0x391ec363,0x39548df1,0x3934051c,0x392aa999,0x394ccea1,0x395a07b4,0x3980017e,0x394603d8,0x393141c2,0x392627b6,0x3930450a,0x391c02b2,0x3930cfdf, +0x392100bb,0x39074ccc,0x39032d02,0x38eaeb55,0x38f5932a,0x38e88e02,0x38b69186,0x38b31eff,0x389876f4,0x388dae1b,0x3866267a,0x383117bf,0x38795a9f,0x3862af23,0x388267d3,0x38a8cfa2,0x38b95c92,0x39042687,0x38ec0b2c,0x38d0358f,0x38f3c270,0x3912220a,0x3835e91c,0x385acf9e,0x386b87f2, +0x38a36b73,0x38c66a31,0x387b2be4,0x3892426b,0x38d1fec0,0x38f577a0,0x38ea1ad7,0x38d9a648,0x38edd43a,0x390d4e17,0x39122981,0x38a8dcb4,0x389c5d39,0x38d77325,0x38ac30df,0x389622da,0x3892a5b7,0x3888ae75,0x388866d7,0x3883ea72,0x38857add,0x3882d8be,0x38732077,0x38810e72,0x38779343, +0x3884f1d9,0x3885f748,0x3870d1f4,0x38780c39,0x38680752,0x38541922,0x3851c0a9,0x384125c8,0x39208122, +}; +const uint32_t orange53_rom_EL32[HRTF_MODEL_N_SECTIONS * 578] = { +0x3f007415,0x3e8256a5,0x3e8d9d2f,0x3e7215d4,0x3e76fd5f,0x3e81105f,0x3e82e923,0x3e88c9a3,0x3e8efc79,0x3e83c3e3,0x3e82fdb2,0x3e75fae2,0x3e6b652d,0x3e6890bd,0x3e692bcd,0x3e5d15c2,0x3e61ad8a,0x3e553f3c,0x3e561fd9,0x3e48c61a,0x3e549b9b,0x3e4fb8d4,0x3e593a70,0x3e8c7539,0x3e52b3b4, +0x3e548643,0x3e8b1753,0x3e87c269,0x3e816981,0x3e690e8c,0x3e93c547,0x3e8e4c81,0x3e8610f5,0x3e6311d1,0x3e610900,0x3e87aeab,0x3e7d09b7,0x3f0a1b9e,0x3eb9ccf7,0x3ed4f2c1,0x3edcf33d,0x3ef86217,0x3f05784c,0x3f15b5fc,0x3f1eb6ab,0x3ef8ea87,0x3f055553,0x3ee68f9b,0x3eca35a1,0x3ec6f3cf, +0x3ec7b2b2,0x3ea1e0f0,0x3eb82a19,0x3ea3a47d,0x3e96e714,0x3e8b08af,0x3e917e6d,0x3e81f72d,0x3e5f5c4e,0x3e4e7f74,0x3e581e69,0x3e4c351e,0x3e3a0cbb,0x3e541746,0x3e5c2f81,0x3e456a06,0x3e646586,0x3e4fc57b,0x3e469111,0x3e5c3b4d,0x3e77cea3,0x3e870a68,0x3e7e9ea2,0x3ec95f3d,0x3f12c66c, +0x3f0851b9,0x3f269468,0x3f3b9026,0x3f5f4b0a,0x3f625a7a,0x3f80c7ed,0x3f5a2030,0x3f3ca4a6,0x3f225b68,0x3f130996,0x3efdf31c,0x3ee0691b,0x3edae271,0x3eb963c6,0x3eb44eb6,0x3e90fffe,0x3e886856,0x3e59381c,0x3e67dce0,0x3e25c874,0x3e267a4c,0x3e119954,0x3ded38e6,0x3e029106,0x3dd3254b, +0x3e2c23b4,0x3e14e768,0x3df6b94d,0x3e0ce0da,0x3e11cf69,0x3e2a5de8,0x3e40e631,0x3e7c4b85,0x3ea81f67,0x3f020ab8,0x3ef0c6cc,0x3f48d66e,0x3f4789f2,0x3f873b21,0x3f922f04,0x3fa968ed,0x3fb4e449,0x3f97eb1f,0x3f83c172,0x3f561708,0x3f2ea6b9,0x3f125c16,0x3efe0292,0x3ed28af0,0x3ebf46c2, +0x3eaa153f,0x3e825737,0x3e5b0e4a,0x3e237644,0x3e0d921a,0x3dce5ac8,0x3dc4710b,0x3d98cb74,0x3d8c47d5,0x3d5d0d2c,0x3d92c0e9,0x3d7650b9,0x3d8df0ab,0x3d82c8dd,0x3d7460a8,0x3da96d45,0x3df35a6c,0x3e06b50d,0x3e3ff53e,0x3e660b10,0x3ee3783d,0x3f2af0ab,0x3f85c452,0x3f941bdd,0x3fb43104, +0x3fd59a59,0x3ff8135e,0x4007c99f,0x3fdc927c,0x3fb09f68,0x3f8d3d80,0x3f66b2e9,0x3f371f9f,0x3f1af4ae,0x3f0c2640,0x3eecda7c,0x3ec04436,0x3e8b5ae8,0x3e5b550e,0x3e20ab9c,0x3e26dbdf,0x3dae97f2,0x3d8a1b2e,0x3d3fd220,0x3d1a62b3,0x3d085c08,0x3d171d13,0x3d2a9555,0x3d400487,0x3d17a952, +0x3d24fe71,0x3d4d712f,0x3d9e7b1b,0x3dffb571,0x3e2a6423,0x3eaafd14,0x3f84bd7f,0x3fcf0c16,0x4008d71e,0x40100815,0x4022918a,0x4016a991,0x400ffaea,0x400a9e20,0x401f2df8,0x402b4fbb,0x4020b23d,0x40228b06,0x4027bf88,0x400b1918,0x3fdde1e7,0x3f953b0a,0x3f898b74,0x3f26ae2c,0x3ed1a881, +0x3e892d5e,0x3e36bc68,0x3df02dfa,0x3dade427,0x3d6c0711,0x3d467b50,0x3d22d854,0x3d608224,0x3d527f71,0x3d65aba3,0x3d515707,0x3d921555,0x3deb4b22,0x3e3afcca,0x3e750d85,0x3eba9b15,0x3f2fb7ae,0x3f5cc172,0x3fad20f8,0x40482ace,0x4052ac68,0x404c4a3c,0x40238584,0x402abe13,0x40291042, +0x40369f14,0x402cb504,0x40373979,0x4035eed2,0x402293f0,0x401cf8d0,0x3fed4fea,0x3fab55f3,0x3f7968f0,0x3f1e1225,0x3ef097ba,0x3e98b79a,0x3e8777c1,0x3e2cfc94,0x3dc0445b,0x3d813afb,0x3d3d5377,0x3d2729aa,0x3d47fc2a,0x3d72311d,0x3d8ffc4e,0x3d886ca5,0x3d9735f1,0x3dcf6201,0x3e240b14, +0x3e400dc3,0x3ea22dba,0x3f144ac3,0x3fc8a391,0x3fdec30b,0x4098ba57,0x405966ed,0x407bc02a,0x4022cba8,0x40214f45,0x4032307b,0x403090df,0x4036471a,0x403f019b,0x40319843,0x4029036c,0x4015ceaf,0x3fee0e18,0x3fb52001,0x3f89f1f4,0x3f2a8792,0x3f0172f5,0x3ea8985a,0x3e8d0eaf,0x3e332211, +0x3e2cf0ac,0x3dcc13ad,0x3d940b7a,0x3d9b82fd,0x3d930e09,0x3d9dc53f,0x3df75003,0x3da30266,0x3da9aff3,0x3de9a450,0x3e37d312,0x3e7003c1,0x3f091f56,0x3ee04065,0x3fa3bbd1,0x3fe04309,0x4089e3d6,0x4048c52a,0x4041d80a,0x400d07c4,0x4011046d,0x402e8da7,0x4028b86f,0x4033b7ac,0x4036aabd, +0x4039d144,0x40220039,0x400c385d,0x3fe24a02,0x3fa752cf,0x3f8474fa,0x3f225429,0x3f0ef5c8,0x3e97e8b4,0x3e8db754,0x3e44f082,0x3e45b23b,0x3df8b320,0x3dc9c4de,0x3dce1ae5,0x3d9fed84,0x3dbe4829,0x3e4f3fc0,0x3dc53b49,0x3db1b4e2,0x3dd9fb5f,0x3e5ca599,0x3e62e2f0,0x3f07db74,0x3f252390, +0x3fa26058,0x405ef83a,0x40134858,0x40073cda,0x400c3359,0x3ff5dd4b,0x400bc877,0x40212cca,0x401ff7d2,0x40201e50,0x401ae523,0x40100211,0x4009f0d9,0x3fdb389e,0x3fb82bea,0x3f8617fd,0x3f36977d,0x3f1675d5,0x3eebf253,0x3ebd759c,0x3e8a7f29,0x3e804084,0x3e44a53d,0x3e17eb1c,0x3dd5c536, +0x3dc77051,0x3d9ddb24,0x3dc579ed,0x3e806b4e,0x3dd301f1,0x3dce3c8a,0x3de26756,0x3e13cb6c,0x3e70db80,0x3eb08597,0x3eff83d8,0x3fad3771,0x3fa68d8b,0x3feec44c,0x3fef0d98,0x3fef702e,0x3fe83cda,0x3fe57c38,0x4007d211,0x3feff7cb,0x4001a787,0x400ae3ef,0x3ffc2aca,0x3fd0269d,0x3fb5f3a3, +0x3f85193f,0x3f465184,0x3f29675e,0x3f133c98,0x3ef99253,0x3ef4285f,0x3eb9b337,0x3e967e3b,0x3e3a6dec,0x3e321ec3,0x3e0638bd,0x3dd01df9,0x3deb8730,0x3de0f049,0x3e210686,0x3dfccda8,0x3e034cd6,0x3e21e5e5,0x3e67ec6b,0x3e7ef12a,0x3eeaae48,0x3ece0c1b,0x3f687c54,0x3f9e538a,0x3fa4e3e7, +0x3fb0eee4,0x3fbe8592,0x3fcfcc8d,0x3fd66449,0x3fd15c56,0x3fd970ba,0x3fc77ad8,0x3fbc5167,0x3fabd7e4,0x3f96c8ba,0x3f7a6636,0x3f52c2f6,0x3f30d590,0x3f149b43,0x3f07834a,0x3f1a1652,0x3ec8cbac,0x3ee5b3e0,0x3ec21b1d,0x3e97512b,0x3e42b013,0x3e16cb93,0x3e145577,0x3e0421e8,0x3df98286, +0x3e14c1e5,0x3e1dc9d4,0x3e167733,0x3e1b21ae,0x3e55b86c,0x3e85f74b,0x3eb1d995,0x3f178ef6,0x3f37ed41,0x3f50d606,0x3f8b949d,0x3f957838,0x3fa64809,0x3fa6e832,0x3faf6a1d,0x3fb3fc7b,0x3fa8020d,0x3f9ff088,0x3f9a964c,0x3f83d606,0x3f70aa4c,0x3f525608,0x3f3c96ba,0x3f26857a,0x3f12aa78, +0x3f05ea5c,0x3f07915f,0x3f045ca8,0x3ed62bd7,0x3e9e412c,0x3e9b05da,0x3e7b07cb,0x3e45c9c6,0x3e210e8e,0x3e56fe6d,0x3e260363,0x3e27a279,0x3e2f1e11,0x3e3b138e,0x3e2b8054,0x3e755c0d,0x3e8796ef,0x3ece491b,0x3eec4557,0x3f36fa22,0x3f53fa74,0x3f5b4c74,0x3f730b6c,0x3f8f7198,0x3f89c4c0, +0x3f8f215b,0x3f94ddc2,0x3f88945c,0x3f8060fa,0x3f76bd91,0x3f6443b8,0x3f517a94,0x3f3d9ca3,0x3f36ddbe,0x3f296c17,0x3f1cee2d,0x3f0fad66,0x3f14da7f,0x3eeb24a0,0x3eefc43d,0x3eb8568a,0x3ebd7cf9,0x3e981468,0x3e8d43f5,0x3e97dc1e,0x3e6e6921,0x3ed24a07,0x3ea200d4,0x3e8ba9c6,0x3e87a0b9, +0x3e847920,0x3eacecac,0x3eccac0f,0x3ef5a813,0x3f0f51ee,0x3f428f4a,0x3f4437f1,0x3f4947f7,0x3f40c1d4,0x3f2cd6d1,0x3f5ea0ba,0x3f5e1b03,0x3f7cf54a,0x3f73f16d,0x3f708515,0x3f6c3e01,0x3f624173,0x3f5aae92,0x3f59c753,0x3f41d492,0x3f30f260,0x3f3c6a5e,0x3f2cce85,0x3f1f1f20,0x3f2d6b18, +0x3f1ca2bc,0x3f065638,0x3f023a05,0x3f073176,0x3ee4256b,0x3eb6a3f2,0x3eebc205,0x3ee0a68a,0x3ef165de,0x3f05ded9,0x3f03c89a,0x3f03d164,0x3f135917,0x3eed3225,0x3f2caf2d,0x3f495a71,0x3f0462a4,0x3f114b89,0x3f00f4e0,0x3f068c76,0x3f04f893,0x3f0b6f88,0x3f085bb0,0x3f0e8c06,0x3f075bca, +0x3f05984e,0x3f03775d,0x3f00cf18,0x3efcdb95,0x3efb828b,0x3ef7924a,0x3ef7ebcc,0x3ef62659,0x3eed9eeb,0x3edd2e75,0x3f0738f5,0x3eebe9e7,0x3eff33d9,0x3f1ec959,0x3ee7c004,0x3ef37f7f,0x3f1694b1,0x3f26fd18,0x3f13647c,0x3f0f2f53,0x3f2bb88d,0x3f2c0177,0x3f1297b8,0x3ef188bb,0x3ee6203a, +0x3f20b922,0x3f0fd30e,0x3f9ae63e,0x39ce1835,0x392d28ba,0x3914f9c8,0x391d2acc,0x390f0f09,0x38ec77ce,0x39184aac,0x391bde2e,0x39017032,0x390d3dde,0x3902943a,0x38ac3bf9,0x38b5635e,0x38d4239c,0x390ddfad,0x39167b78,0x392cbd3d,0x392c35cc,0x393ce42a,0x3945d8e1,0x3955e0be,0x395d7c76, +0x3957a4e4,0x395b38ea,0x392d965d,0x39236dd8,0x3913c500,0x39316b76,0x393ed46d,0x3941e2b1,0x393dce98,0x3924de8f,0x392030ca,0x3907eb24,0x3918873f,0x3979d0c0,0x39359795,0x399b5112,0x39581fbc,0x39804a76,0x39805499,0x394b5c4f,0x39e0d779,0x39d613d0,0x3952fe71,0x3978ecc1,0x3932f14e, +0x39099c3f,0x38974e61,0x38c5b9a3,0x398d5495,0x39887790,0x39b61a8e,0x39a58b12,0x39b7c608,0x39db52f6,0x3a090955,0x3a189c0c,0x3a1f8105,0x3a1070df,0x39a66819,0x39513e85,0x3949fada,0x39c40948,0x39e950c7,0x39f3c64e,0x39d045ed,0x398735ca,0x3987e4e5,0x394889ae,0x39898ff5,0x3a49eb4f, +0x39c6f1b9,0x39c810d4,0x39a426f4,0x3991d23b,0x397da0cc,0x394721ae,0x39d3a51f,0x39f2885c,0x38f4d901,0x398cd501,0x394d2cba,0x39cc17af,0x3993c963,0x39999350,0x39f054ea,0x39af581a,0x39df5eea,0x39ddd54f,0x3a068497,0x3a2fef20,0x3a66eba3,0x3a841221,0x3a83973f,0x3a7d1922,0x3a026f6d, +0x3996fe96,0x398798c1,0x39fc35aa,0x3a273f39,0x3a48fe9e,0x3a0e01f3,0x39d280ac,0x399303c6,0x394e3cf1,0x398065d4,0x3aab1822,0x39fabc26,0x3a3513d6,0x3a5639c2,0x39eb3d5f,0x3a03a9ae,0x39de6eac,0x3a8a93e6,0x3a89d4ae,0x396e7316,0x39d8efce,0x39b23070,0x3ac31c74,0x3a90f194,0x3a85066a, +0x3abe51c0,0x3a3851de,0x3a488a19,0x3a142201,0x3a4d67e4,0x3a905e09,0x3ac5951d,0x3af2bf03,0x3b01e4ed,0x3b045a53,0x3a6b1424,0x39fd577d,0x39d4fe3d,0x3a5c510d,0x3a9da10a,0x3accf005,0x3a90e8e9,0x3a53223f,0x39ef5921,0x3a03a961,0x39e7e353,0x3b3e915b,0x3a737dc0,0x3a79ac4f,0x3a3ecfef, +0x3a1c5663,0x39c6d809,0x3a1f565f,0x3a590d09,0x3a444e20,0x39364a41,0x39ca5e29,0x3a306ec9,0x3af8517f,0x3affd042,0x3aeda2cf,0x3ac45826,0x3a5a9044,0x3a5712ce,0x3a3f0b27,0x3a778cb1,0x3ac5ebb8,0x3b0bac58,0x3b16e90e,0x3b192deb,0x3b3ca6dc,0x3ac2a071,0x3a7e43fc,0x3a0dfd31,0x3a7ec02b, +0x3ac9bef3,0x3b010286,0x3ab508bd,0x3a8d12be,0x3a134bbd,0x3a3e3c3c,0x3a063544,0x3b66ac5e,0x3a94640b,0x3c342a05,0x3b27dc79,0x3aa80af3,0x3b5d5453,0x3c3c7e0d,0x3b9c7b46,0x3b5297d4,0x3ac9e34f,0x3b5cc12c,0x3b2fe85b,0x3b836c38,0x3b68cc77,0x3b685ed1,0x3b0fbd2e,0x3a48e74c,0x3a216381, +0x3a345ad4,0x3a298d37,0x3a4b446f,0x3a9235f1,0x3b1c60bf,0x3b221c10,0x3b3a0a13,0x3ac7fea0,0x3a79a20c,0x3a984263,0x39f8a134,0x39f8c51e,0x3b1c43a3,0x3ae4beee,0x3b23f503,0x3b1c6edd,0x3b6b753b,0x3ad02c7a,0x3b685678,0x3c013caa,0x3c1d2716,0x3c3cb9ca,0x3b080160,0x3ab17ff9,0x3bf1fa0b, +0x3b9b6232,0x3b80f931,0x3b334280,0x3a5b8514,0x3a8e549f,0x3a919a6a,0x3a6cc726,0x3a8172b4,0x3a4c0773,0x3a3f7efc,0x3a819983,0x3a39ed77,0x3a1a8dd1,0x3a3d5d10,0x3a8033a4,0x3a5c8a24,0x3a51a3a3,0x3a3a6664,0x3a8011e4,0x3a44ec67,0x39f7f267,0x3a4da516,0x3a6fbd68,0x3a9434e4,0x39d29a4e, +0x39cb5191,0x3a8b3674,0x3b04792d,0x3acc3bf4,0x3b4b3d7f,0x3beee015,0x3a573098,0x3bc4fc25,0x3b3d4ffa,0x3b03cf51,0x3aa32a5a,0x3abc8ed9,0x3a1c9a18,0x3b702333,0x3b2eaa6c,0x3b2a6e8a,0x3a8e065b,0x3a23250b,0x39e9de50,0x3a25c3d6,0x3a365cb2,0x3a02802b,0x3a0ac3e0,0x3a224f19,0x3a384062, +0x3a8b90f5,0x39b2256e,0x39712b63,0x3a0c88e7,0x39f4b3ae,0x399d5683,0x39ad6250,0x3998fa27,0x398e0a29,0x397276aa,0x3931a9c3,0x39dbccee,0x3a27cef3,0x3a8e7bc6,0x3ad0c485,0x3b165515,0x3a27f3a1,0x3b31897b,0x3b76a132,0x3b498ae9,0x3b1aa186,0x3b35f9c7,0x3aeeb805,0x3ae0dec3,0x3b31dd51, +0x3aa6989a,0x3a9e670d,0x3a22fd50,0x3a4072d1,0x3a2bd422,0x3a3599ae,0x3a1cef95,0x3a22e314,0x3a014c76,0x3a4c9706,0x3a3fe714,0x3a993083,0x399ad0ca,0x3932b8c1,0x39b37f0f,0x399f9869,0x38ed55f2,0x394c42ea,0x38f34579,0x38da4cd4,0x389a4cf0,0x39a2483b,0x3a49f6d2,0x3aa04ca7,0x3a846a8a, +0x3afb6493,0x3b716a59,0x3b4be283,0x3c0c035e,0x3c19f5d8,0x3c831d1e,0x3c6f1457,0x3c21590c,0x3bbfdfd4,0x3bb142a3,0x3b800914,0x3b253516,0x3b098344,0x3b03f8c7,0x3aac2f00,0x3a960d2e,0x3a504b36,0x3a53cca2,0x3a317a55,0x3a44c0fb,0x3a2add0d,0x3a1e0f5e,0x3a59f0cc,0x39debc2d,0x3a104a2d, +0x3a069308,0x3a0a1587,0x39b6d528,0x39926f6d,0x38caf945,0x3899e42b,0x39301035,0x39218241,0x395dcb65,0x3a1f638a,0x3a3b0663,0x3ab27c2f,0x3b605e9a,0x3bd383c9,0x3c9b2fa4,0x3d004ffc,0x3cb0f8a2,0x3c90e5ca,0x3bd16560,0x3bca4474,0x3bf4b7b3,0x3bc4f858,0x3b33f8fb,0x3b22e680,0x3ada73b8, +0x3aaf7a5b,0x3a744ac0,0x3a5e1016,0x3a0b973c,0x3a03d342,0x39eaa2df,0x39f51181,0x39de1eb1,0x39b32e7b,0x396aa542,0x397008d6,0x39d1d1d3,0x3945da40,0x392cc15c,0x39d2af80,0x395dce99,0x3982c702,0x39a59dd5,0x3a8e6122,0x3aae7707,0x3b43771f,0x3c0b955d,0x3c4995db,0x3c5d4832,0x3c60dac9, +0x3c49bb8c,0x3c1dbaa2,0x3c1858ea,0x3be5f278,0x3bcf2fdf,0x3bf57236,0x3be7b3ca,0x3bca4e01,0x3b91aed8,0x3b881db1,0x3b630e17,0x3b90da8c,0x3b818c61,0x3b270249,0x3b286f66,0x3b148942,0x3ace2207,0x3ab7dc83,0x3a64edf4,0x3982df52,0x39cc120d,0x39a1f990,0x39a65d9c,0x39a74384,0x3a10792e, +0x3a943ce1,0x3abbef5a,0x3b0e0693,0x3b2f1101,0x3b8ccfb9,0x3bac5f18,0x3bdce4e0,0x3bd99d80,0x3bc9ea1d,0x3c09cc9f,0x3c153b72,0x3c1d0ab0,0x3c1f92f7,0x3c233dad,0x3c1546e5,0x3c383bcf,0x3c00a86c,0x3bf19a75,0x3bba58b8,0x3b8239fc,0x3b3e66b7,0x3b5c9561,0x3b0f299b,0x3b0089fd,0x3ae02202, +0x3ad363cc,0x3acca64a,0x3aaf287a,0x3a6da9c7,0x3a09f0ce,0x39b52b5a,0x398bf245,0x394bf24e,0x39a08718,0x39ef3cb2,0x3a690d55,0x3ad3a028,0x3b0f7c4e,0x3b35b44f,0x3b616e38,0x3b8b4fc4,0x3ba7c279,0x3bd6afbb,0x3bdd85b1,0x3bf9f87b,0x3c0a268b,0x3c17d059,0x3bb6ebce,0x3bc4da8b,0x3bb7dd77, +0x3bcc81b4,0x3bf39859,0x3bed2d69,0x3c042875,0x3c258c52,0x3bffabc0,0x3bbfb8fa,0x3bc01824,0x3b82c0a4,0x3b74654a,0x3b37ae1a,0x3b12ddbe,0x3afb10c1,0x3ab77486,0x3a859944,0x3a70e245,0x3a013857,0x39f4e903,0x39e50bf7,0x3a2ee74c,0x3a5fe143,0x3aa1a9ae,0x3ae334d2,0x3b08411b,0x3b2906f3, +0x3b63d48f,0x3b677af2,0x3b862216,0x3b96fc1d,0x3b97ae18,0x3ba4358c,0x3bb14d18,0x3ba6d11e,0x3ba6c303,0x3ba0a966,0x3ba02d15,0x3b888b00,0x3b588794,0x3b7577fc,0x3b56b61e,0x3b705977,0x3b605c85,0x3b75fafc,0x3b7fcee9,0x3b7d5852,0x3b785810,0x3b7fd3da,0x3b4d95fe,0x3b2810dd,0x3b254fab, +0x3af3f115,0x3ab28318,0x3a9f4aba,0x3aa24cc9,0x3abacbcd,0x3ac23f51,0x3adadcec,0x3af863c8,0x3b004145,0x3b2867ce,0x3b292443,0x3b4eb14b,0x3b738caa,0x3b83ed7e,0x3b95733b,0x3b9e7e5c,0x3b93e01d,0x3ba034db,0x3bae0c95,0x3b2428a1,0x3b263587,0x3b2b65cf,0x3b30df44,0x3b380ee0,0x3b4b3ece, +0x3b567b46,0x3b6b62e9,0x3b579d6e,0x3b430896,0x3b3253a3,0x3b27073e,0x3b18759a,0x3b10de6e,0x3b06f305,0x3b03980a,0x3afff974,0x3af52cfb,0x3aeed9f2,0x3ade3832,0x3aee1316,0x3b0141f1,0x3b0c4fcf,0x3b052556,0x3b08b776,0x3b0f1a1b,0x3b1b5e96,0x3b17da38,0x3b1c4c43,0x3b21181b,0x3b2047ce, +0x3b2b7571,0x3b262299,0x3b19468c,0x3b2c02ba,0x3b2648a7,0x3bd4de7a,0x3798b356,0x3705ccd5,0x3713e2a5,0x372a4f9c,0x372b0897,0x377b7c83,0x371a72f1,0x3700f4eb,0x36976613,0x37124340,0x3721b9a0,0x37327e5a,0x3709aedd,0x374b5081,0x37a4cede,0x37b093c7,0x37b37e53,0x378b4f21,0x373a2ad1, +0x37090d6f,0x36ec55b9,0x36e5d3aa,0x36dfac5a,0x370d0525,0x373e8ad7,0x372d3ce4,0x366eeeb6,0x36d05c06,0x36c0f10f,0x368247c0,0x365a0149,0x361c0da6,0x36996d1e,0x366a2182,0x369d89d2,0x371f133e,0x36e42354,0x3688c358,0x36afee53,0x37a04320,0x381f0393,0x389d3d27,0x385eade9,0x37f32cc8, +0x36c73e7c,0x37a4f162,0x3809e805,0x386013bb,0x3813b5f4,0x382fd1ca,0x38ab2129,0x38c72310,0x38c62b41,0x38649da8,0x37d06069,0x377eb37f,0x37903e72,0x3763b4aa,0x376b59af,0x37b3ad9f,0x37f571c2,0x37c79b67,0x373f1b38,0x37b55b17,0x37def3e0,0x3838b004,0x382863c3,0x38164611,0x37d872fc, +0x369b7c75,0x36c203d8,0x381ce4de,0x37149fa4,0x3738969c,0x37c6147e,0x386566a0,0x38a98036,0x3923fd32,0x38c5d108,0x3890adb6,0x37815e37,0x381e1ff3,0x383843b7,0x38f73039,0x383eacc6,0x38d6f180,0x39734e0e,0x3990f4a3,0x39834af1,0x393654d6,0x389102fa,0x3843bdc9,0x384bf8fc,0x380090db, +0x37a82d87,0x37fde040,0x3879809c,0x385ac02e,0x381fff1b,0x381e7368,0x38546c16,0x391051fe,0x38ea8881,0x38afcc44,0x38c14748,0x37bf015a,0x372afaa1,0x389b5a5b,0x36f2ca14,0x37a104e6,0x378e28ec,0x389b0cfd,0x394e0745,0x39dcc55e,0x39b09b27,0x39601116,0x38e508fc,0x38c6b4a5,0x39103919, +0x39b7b82a,0x39243492,0x394e8b27,0x3a0939c4,0x3a19f8a4,0x3a08e8e2,0x39980c61,0x38fd687f,0x38ab2ba5,0x38e71e03,0x38726317,0x38056111,0x389e3c8e,0x3914fb0b,0x38e1b4ae,0x38e58f7a,0x38c85044,0x39486677,0x39caff7d,0x3a07329a,0x39c135aa,0x397c2e1f,0x38939653,0x378e1418,0x395d642a, +0x37fa96ce,0x380502ea,0x389c82b5,0x39396f67,0x399881e4,0x3a062e35,0x39cebcc0,0x39829da4,0x38a4db9e,0x38c377a0,0x38c9562a,0x39b16ee2,0x38e2e12a,0x39be217f,0x3a7a9261,0x3a9538c3,0x3a7352c5,0x3a285fb8,0x398810a4,0x396b9bd5,0x395981f5,0x390401c1,0x386050ca,0x390ba9a3,0x390b98e3, +0x38be9b39,0x38a08bb8,0x389b02ca,0x38888aed,0x3919e65e,0x39a9e72c,0x399e13fa,0x398e6ad8,0x392f42b6,0x38a75d4b,0x39923f64,0x37caadae,0x3a79b066,0x3a7d209a,0x3ad7135e,0x3adf548a,0x3ad9a247,0x3a25d475,0x39d64e64,0x399da666,0x394aac0a,0x3a43dfdf,0x3abcd46e,0x3ab32ddc,0x3aa2bf44, +0x3b0e717e,0x3ad60a04,0x3a8575ff,0x3aa3eeaa,0x3aa43a1d,0x3ab280b6,0x3a9f7a8f,0x3a8b8459,0x3a106b2b,0x3a126955,0x3991d05b,0x38b3c9a0,0x39013e5f,0x39038d2c,0x391d47ff,0x372790e9,0x37d09b49,0x3983a483,0x3a38d446,0x3a31aff0,0x3a114701,0x3943f0f1,0x3a04035a,0x3ab22e8e,0x3a6c92f1, +0x39b5a481,0x39b00a20,0x3a9a7a79,0x3ab4bd5e,0x3ae7c487,0x39fbf44e,0x399cab17,0x39858fee,0x3ab314d4,0x3a583d19,0x3a96f535,0x3a9c1ea5,0x3a23b7d0,0x39f7f27f,0x39e51f3c,0x39a81698,0x39425831,0x3982c11b,0x38b38fde,0x3868c83c,0x37c75297,0x37ca0dd4,0x3734097a,0x38240fde,0x383dcfc5, +0x3866bacd,0x384a1695,0x3760c980,0x3897a436,0x39aad047,0x3a9daf5f,0x3a8f528c,0x3a3d1f10,0x3a4ef481,0x3ae7a179,0x3ba0acca,0x3ab3d177,0x3992e168,0x3a5b9d7a,0x38b48487,0x396192ee,0x3a4d86c2,0x3a0a01e8,0x3a124662,0x3923397d,0x38968445,0x38f4241a,0x393d7eec,0x38fe0368,0x37fb39d6, +0x38d9adf3,0x37c6b9d9,0x383a6f1e,0x38573a8e,0x3839be18,0x37fc5ecb,0x37caf8e8,0x37ac01ed,0x37f3f29e,0x3827ccb2,0x36fed9a6,0x36b696b8,0x3497d46e,0x3619c651,0x371b2d85,0x38839b35,0x39b7389e,0x399220dc,0x3a07df18,0x3a8816d4,0x3ab7fa94,0x3b4674d6,0x39b84595,0x3952fa84,0x3a8a9c19, +0x3a3b39ff,0x3a63f32c,0x3ab53d7c,0x3a715397,0x3a5db651,0x39ee1476,0x3918e043,0x393f0e93,0x39b900b3,0x38dc9e4a,0x390d9f3d,0x387d6aa9,0x37e9ba9e,0x36f13d2e,0x386297ef,0x3820f57e,0x37945f6a,0x3692eb62,0x378ca310,0x3770bd56,0x37edbac8,0x35dcd7b9,0x35f06912,0x34d29269,0x37791a6d, +0x38521705,0x38ce6508,0x380141f5,0x388db840,0x3a052dbf,0x3a29cbe9,0x3b380446,0x3bc38965,0x3ac9bf6e,0x3a134694,0x3a56d0a6,0x3a4d1647,0x3a3ddca2,0x3a4dbac5,0x39bb8c19,0x39fac73a,0x39aef6af,0x394cdce3,0x39b55c54,0x39ec5c8e,0x39929fdc,0x394f08f1,0x39573b22,0x38f8236e,0x39326b9f, +0x393386d5,0x39126613,0x3907ecc3,0x38e685b7,0x37d96dc9,0x35e95bc7,0x3733bc6d,0x36475abb,0x3677cfde,0x36d5589e,0x36d24b88,0x37b01a0c,0x38c8dd5b,0x389ffa6b,0x388f9ec4,0x3a7fd70a,0x3b0cef73,0x3b02d087,0x3afd1322,0x3a8d9f4b,0x3a471502,0x3982d8fb,0x38fe7def,0x398074c3,0x39c0c3f1, +0x3a1d9251,0x3a8b0d9c,0x3a6cf915,0x3a46e229,0x3997052c,0x39a7b9ad,0x3902a660,0x383f7ee6,0x38bca55f,0x393b5ee9,0x3998d1cc,0x39bb58b1,0x39c6eadd,0x39b97616,0x39953cb1,0x38fd2d5d,0x381461a2,0x3692b510,0x3736022d,0x3783210e,0x37902e63,0x37f33361,0x37484e5a,0x37e300dd,0x3769ebf8, +0x3823510b,0x39999a15,0x3a8fbc02,0x39cefa05,0x39f5d81b,0x39f412c1,0x39b24f37,0x399cc34d,0x3992b8ef,0x39d0cb8b,0x39faa13a,0x39e50480,0x39c6903b,0x39b2cc5a,0x39e02592,0x39c816d8,0x39975645,0x3937a822,0x388d95e0,0x37b6896e,0x37cf8a52,0x384cab86,0x38d2962b,0x38f4c23e,0x38b06562, +0x387e85bc,0x385a08f2,0x3854e4f0,0x381746df,0x37f7129e,0x384e0afb,0x3897bca9,0x3906730c,0x391d3925,0x3936e0cf,0x39603ca5,0x3988de26,0x3998ee6b,0x39bbd072,0x3876354c,0x38c65a8a,0x3897cf81,0x389b3964,0x391c3cf6,0x3902bc1d,0x3909faa2,0x3933755d,0x393f4791,0x397d43cb,0x39971e7c, +0x3946112c,0x38e653ee,0x38574af2,0x37d247d2,0x37321704,0x3809e355,0x38184039,0x38753fab,0x38b4967d,0x38c4bf4e,0x38d01158,0x38fac2b0,0x38d51088,0x38c97aba,0x38e570a7,0x38986316,0x3882002f,0x389fe1be,0x389c7c5b,0x38b41456,0x38f78433,0x38b7b27d,0x38cd5247,0x38cd5fe5,0x384ed900, +0x396ab2db,0x39507aa8,0x392b28df,0x390fc16f,0x39010eee,0x38bc14d0,0x389b50d7,0x38a0338f,0x386b91f9,0x383135c4,0x384a41cb,0x380132bb,0x383c5249,0x38807854,0x388ded67,0x38a80f33,0x38a875d7,0x38b37f67,0x38c54949,0x38cd4eea,0x38dc3f0f,0x38f11804,0x391001de,0x38ea6dc9,0x39059ca9, +0x392dc231,0x39152350,0x391c72db,0x3929e836,0x390ef64c,0x3923a5f6,0x3912be80,0x3935316d,0x39817712,0x3990d8ac,0x3975d72f,0x39905f0d,0x39652c58,0x394c2282,0x392e29c2,0x3909b933,0x38f4bad4,0x38c1ee17,0x38b34bfe,0x38a2dccf,0x3893ee65,0x38928214,0x389dc35b,0x38a01b2e,0x38b750a7, +0x38adb5ad,0x38b4e49a,0x38e93e6c,0x38faeb38,0x390b1dd2,0x39250ca6,0x391ee45e,0x39226cd8,0x392718cc,0x3944b65a,0x394eaf40,0x394fb483,0x396552ad,0x396029af,0x3962ec8a,0x398cd9d4,0x397daf8e,0x39bf27db,0x39ae887b,0x3982a435,0x39928db1,0x398adc37,0x385e3053,0x3861cf6d,0x38658364, +0x385ffaac,0x38631eaa,0x386d8fbe,0x3875c3ce,0x38858435,0x388f367f,0x3897eba3,0x389aae87,0x389aff06,0x389b3b89,0x38a0feb4,0x38a5ed3f,0x38ab0fda,0x38af4dc6,0x38ad8c77,0x38add211,0x38b898fd,0x38b004a0,0x38b7ace3,0x38b6ca2b,0x38b31ce7,0x38b43c27,0x38b9b881,0x38c5b9bd,0x38b053d4, +0x38b63462,0x38b31e87,0x389dbcdb,0x3892cb1c,0x388705d7,0x38884065,0x389275d1,0x38811eaf,0x395606b0, +}; +const uint32_t orange53_rom_ER32[HRTF_MODEL_N_SECTIONS * 578] = { +0x3f000530,0x3e699742,0x3e8584f0,0x3e801f34,0x3e76d7fe,0x3e82956e,0x3e560e05,0x3e52eff7,0x3e8e5811,0x3e8ed484,0x3e8c3df2,0x3e732e12,0x3e75dad4,0x3e916fd7,0x3e7dbf36,0x3e4c1267,0x3e50ad6e,0x3e849114,0x3e5b32b6,0x3e4f5663,0x3e598757,0x3e498f5b,0x3e564fb2,0x3e5444bf,0x3e65f1c3, +0x3e6bde74,0x3e6599ca,0x3e689b85,0x3e711806,0x3e6f822a,0x3e85c42a,0x3e7f50df,0x3e8feec8,0x3e85bf62,0x3e866b85,0x3e81f613,0x3e771210,0x3ec8c367,0x3ecef74b,0x3eedc5e0,0x3e7b782d,0x3e89855c,0x3e66f254,0x3e799b17,0x3e50462e,0x3e34d2ed,0x3e617c75,0x3e4f3849,0x3e4d8884,0x3e4c3a96, +0x3e508563,0x3e64ea2a,0x3e68fa91,0x3e5df3fb,0x3e58f937,0x3e810aaa,0x3e92cb3d,0x3e8c7f87,0x3e9a8a6f,0x3ea10f6b,0x3e9c68bf,0x3e9861e2,0x3ebcb73c,0x3ed04f26,0x3ee07ef6,0x3eda2439,0x3f070279,0x3ef0e9fc,0x3f17a276,0x3f0e6639,0x3f0d34f8,0x3f004cd6,0x3eda6812,0x3f0f06b0,0x3eeffbdb, +0x3ebf0368,0x3e9a5b1c,0x3e69bb13,0x3e47c0e4,0x3e320992,0x3e125a08,0x3e071aec,0x3e04a318,0x3e15021e,0x3e23a105,0x3ddd56ec,0x3dfb5222,0x3df99217,0x3e02b66c,0x3e225167,0x3e1fee64,0x3e504856,0x3e5054b1,0x3e8a1a9e,0x3e958258,0x3eb461d1,0x3ec0baa9,0x3ed57248,0x3eea3dbe,0x3ef3baf1, +0x3f0e78e0,0x3f254804,0x3f3d4898,0x3f5b7839,0x3f822c5d,0x3f6777a4,0x3f569ce7,0x3f3d98ca,0x3f2779fe,0x3f33e190,0x3f018947,0x3ee408f9,0x3e717419,0x3e539e11,0x3e03a139,0x3dc377f4,0x3db8270b,0x3d749ee6,0x3d6b5787,0x3d900056,0x3d7f7c7e,0x3d8cca93,0x3d7285fa,0x3d8d11d4,0x3d9829f5, +0x3dc76dff,0x3dd36ba0,0x3e0ec543,0x3e1ac334,0x3e6fb19e,0x3e71eb26,0x3eab6bd9,0x3ebc70e2,0x3ed800c2,0x3ef37a89,0x3f14fe08,0x3f2cb317,0x3f53a918,0x3f837178,0x3f973599,0x3fbd1579,0x3fa87cc1,0x3f9851a1,0x3f839383,0x3f4de32b,0x3f7f5ef4,0x3f3627bc,0x3efa3f4f,0x3e90dbec,0x3e25a518, +0x3df7b942,0x3daec4b8,0x3d54fc5a,0x3d1d57bb,0x3d15257d,0x3d3ca9a7,0x3d2b2aa2,0x3d1957df,0x3d0677e2,0x3d19a2ee,0x3d346dd9,0x3d82cb36,0x3da53771,0x3e13d32c,0x3e2319c6,0x3e554301,0x3e8fadfd,0x3ec4aa72,0x3ee1be12,0x3f0fd482,0x3f1ee507,0x3f37ff06,0x3f6386ec,0x3f8d0e92,0x3fb64cb5, +0x3fdb9020,0x4007e4f0,0x3ff57cb9,0x3fd9151e,0x3fb7d0b0,0x3f96ae47,0x3fe0a2b6,0x400cc745,0x3f94a874,0x3efbbf60,0x3ebd69e0,0x3e5bf9c1,0x3e47f41a,0x3de33501,0x3d9bc71c,0x3d5a2fff,0x3d60c034,0x3d5f27ab,0x3d5847ee,0x3d24db4a,0x3d429dc4,0x3d707681,0x3db73193,0x3de4a7d4,0x3e3b1f28, +0x3e7c80b7,0x3ee2a587,0x3f1f890f,0x3f8c3165,0x3fa93d21,0x3fbe0180,0x40107954,0x401f1d20,0x402a812d,0x4026b4cb,0x40243e32,0x401844ae,0x4012113d,0x400cd4bc,0x4016ec97,0x4012f6eb,0x4017862e,0x405db060,0x3fa000a7,0x3ff2b323,0x3f069d75,0x3ed10320,0x3e4d2942,0x3e118260,0x3ddae50e, +0x3d991f3b,0x3d81edde,0x3d907ced,0x3d72b84f,0x3d4b29de,0x3d27d38c,0x3d4350c8,0x3d7fd87e,0x3dd4ce1b,0x3e1c92bb,0x3e89022a,0x3e9660a3,0x3ef46e91,0x3f1c0163,0x3f720f19,0x3fb25100,0x3fe8f2d5,0x4018d9e9,0x402173bf,0x40310fe8,0x4039bbd4,0x40373075,0x40354619,0x4030f6d9,0x4026a44f, +0x4028ce1d,0x40553b2a,0x404a8a6c,0x408b7cea,0x3fe27817,0x3f97c7a0,0x3f0efd5e,0x3f040a40,0x3e701b3f,0x3e2884a4,0x3deb949e,0x3daab425,0x3da1f6ab,0x3df5478d,0x3d9dc66c,0x3d90bc8f,0x3d9bccbd,0x3d9a6917,0x3dbface0,0x3e220a30,0x3e4775ff,0x3e88e171,0x3eadf860,0x3efe96a3,0x3f297f16, +0x3f85b55d,0x3fb2b86e,0x3feb0b40,0x4018464b,0x40282099,0x402dad3c,0x4042a9ac,0x403423c3,0x402f0718,0x40362d2c,0x4019be26,0x402a65f6,0x407588e6,0x4066701a,0x407d1800,0x403a95e7,0x3fb0b39b,0x3f35605f,0x3edf763a,0x3e672ba5,0x3e271031,0x3de05d46,0x3daf5cde,0x3dbc7674,0x3e4bb29b, +0x3dbf49e1,0x3da15a10,0x3dcb2279,0x3dc13463,0x3df2ae3b,0x3e514fd7,0x3e3b7498,0x3e8b2638,0x3ead3baa,0x3f0375f3,0x3f24075d,0x3f7d2468,0x3fae9bae,0x3fe9441e,0x4004ddf2,0x40289f79,0x402f73ca,0x40400eab,0x40302439,0x40293551,0x402b3e7f,0x400e4e42,0x40147aa0,0x404a1de3,0x40586a21, +0x40235c57,0x400907c0,0x3f9d26b4,0x3ed8f846,0x3ebcd2d7,0x3e435c93,0x3e211604,0x3de5707a,0x3dd0116e,0x3dd24429,0x3e79c6ba,0x3dc3ae28,0x3da1dc49,0x3dc616ec,0x3ddd0fdd,0x3e0ecc87,0x3e3a2890,0x3e6c1e67,0x3e904c62,0x3ec96ae7,0x3ef1dfd7,0x3f151c2a,0x3f3e5766,0x3f800db3,0x3fb03fa5, +0x3fe6a8e2,0x4005d4f1,0x401634d2,0x4015fd26,0x40209d7c,0x4025ea23,0x401dc5b5,0x400b77d5,0x3fe8504f,0x400c06bf,0x400185c0,0x3fef6ab0,0x3fad81fe,0x3f8ef2d6,0x3f12d098,0x3ead6e87,0x3e5b526f,0x3e5b6232,0x3e350a5d,0x3e05eeef,0x3dfaad04,0x3e236739,0x3de22dad,0x3dd77d04,0x3dcdbc50, +0x3e12e473,0x3e21e253,0x3e58129e,0x3e8b53be,0x3eb1d269,0x3ecb8167,0x3f0edc68,0x3f0a93c2,0x3f240aa1,0x3f501b65,0x3f83c1df,0x3fac6945,0x3fe09df7,0x3ff4b6de,0x40095dc7,0x3ffee3e7,0x3fef924f,0x40058eaf,0x3feee39d,0x3fee57ca,0x3ffc9203,0x3fe7be2a,0x3fa19cf1,0x3f8c8af1,0x3f3ea2bd, +0x3ef763cf,0x3eac7118,0x3e8c7eb5,0x3e3881fd,0x3e18b3c4,0x3e126771,0x3e3b3f5c,0x3e2644ea,0x3e009442,0x3de34859,0x3e019dbc,0x3e10c470,0x3e4a98b3,0x3e7988eb,0x3ea2ae8c,0x3ee29cc9,0x3ef918f3,0x3f1507d1,0x3f03d84f,0x3f1cf3ab,0x3f2b3348,0x3f595236,0x3f7d165a,0x3f8edf1b,0x3fac7043, +0x3fc30511,0x3fca5802,0x3fd82bf0,0x3fd45ba9,0x3fd5f20c,0x3fc9fa4e,0x3fbac7ab,0x3fb55d5a,0x3f96132a,0x3f5b3c1a,0x3f3ac13e,0x3f01787c,0x3ec64052,0x3e9c5468,0x3e7ae873,0x3e2e7911,0x3e4d21d5,0x3e2e4336,0x3e362453,0x3e271008,0x3e498b96,0x3e308ef5,0x3e492e65,0x3e55f8df,0x3e9b5e3a, +0x3ea85b8c,0x3ed7b73f,0x3ee31fd9,0x3f19aa19,0x3ef809a4,0x3f18f8f0,0x3f223d6e,0x3f3de007,0x3f56566e,0x3f733435,0x3f843e4a,0x3f92795e,0x3f9feee1,0x3fa5290b,0x3fb08887,0x3fb16846,0x3fac1e93,0x3fabb70b,0x3f8f7e63,0x3f5e91cd,0x3f4fc2c5,0x3f391f58,0x3f09c251,0x3eff57e9,0x3eda9065, +0x3eacf317,0x3e791b2c,0x3e6f8113,0x3e6f1159,0x3e8fa479,0x3eb4597e,0x3e64dc9b,0x3e9404bf,0x3ea0adfc,0x3ea56099,0x3ea90116,0x3ec2b862,0x3ef9c7fa,0x3f0879e5,0x3f0e2dbd,0x3f108527,0x3f1bf2c5,0x3f24c1a7,0x3f3837e0,0x3f47682a,0x3f54cc6c,0x3f68bd89,0x3f7f0a3f,0x3f80fc93,0x3f8b776c, +0x3f96e1ed,0x3f899443,0x3f8956a7,0x3f8d0c2c,0x3f6f146a,0x3f364c55,0x3f53a2a1,0x3f5abb6e,0x3f195488,0x3f12aaa0,0x3f1e0f29,0x3f25b15b,0x3ef39d74,0x3f0a6d78,0x3f02abbd,0x3efac2c7,0x3ef83829,0x3eef8e52,0x3ee13bb5,0x3ef9c4b3,0x3f068f14,0x3f154bba,0x3f17800c,0x3f2faea9,0x3f293420, +0x3f1a51a1,0x3f32c5f9,0x3f354f01,0x3f429d50,0x3f414329,0x3f3a783e,0x3f5d3a3d,0x3f53ce77,0x3f5fd88f,0x3f770854,0x3f5eee60,0x3f77a89c,0x3f76d21b,0x3f3c102e,0x3f41322c,0x3f534cd3,0x3efcd701,0x3f0f08a6,0x3f06431d,0x3f10f4e5,0x3f281905,0x3ef1b0c9,0x3ef22e4f,0x3f2d216e,0x3f3d832f, +0x3f1fe44f,0x3f0f9c9b,0x3f174607,0x3f2c3d74,0x3f2e1f8e,0x3eee0c1b,0x3ef75db0,0x3f1871af,0x3ef9f41e,0x3f026d59,0x3f01d155,0x3ee579b8,0x3ef283fb,0x3ef2c006,0x3ef97a59,0x3efae6ca,0x3ef466e4,0x3f01e718,0x3efcba7b,0x3f044f29,0x3f07a9a5,0x3f061491,0x3f0e3c89,0x3f0c3286,0x3f04bcb7, +0x3f09df7b,0x3f08e4d6,0x3f98a740,0x39cd45eb,0x3917803e,0x39130df8,0x39310a63,0x3939f6e7,0x397da007,0x3914153c,0x390cd551,0x391e0f86,0x39291cee,0x393b5e0f,0x394f9ef8,0x393a7dbe,0x392f639f,0x3913bb84,0x391b4b26,0x39301e7d,0x3961cfe9,0x3966e043,0x3961158e,0x395657a1,0x3948552d, +0x3938ede9,0x3929b598,0x3933b65b,0x39239194,0x390c378d,0x38d69dd2,0x38c299a3,0x38b193cb,0x38fa1fd6,0x39082ef8,0x39016c8c,0x391daf05,0x3916e783,0x38e7a61c,0x390e4b8d,0x3977ad7b,0x395aec05,0x399c083e,0x39c32226,0x3a477370,0x3979034a,0x3952adc9,0x398f91dc,0x398dafec,0x39cbde20, +0x39f4969e,0x39d54cef,0x39b63283,0x395fd9bb,0x396450fa,0x39b2cb5f,0x3a0be638,0x3a0f06d5,0x3a158c4a,0x3a0669c4,0x39dd5bd8,0x39c14d68,0x39ab153d,0x399403ec,0x3968b020,0x3995019b,0x38cb2465,0x38b26927,0x3917c2fe,0x394444a5,0x397ad9d9,0x394b45b1,0x39d18d5f,0x39e6d5c4,0x39625934, +0x3983126b,0x398b66ff,0x39a2afe7,0x39c900fd,0x3a021bb6,0x3aaeac95,0x398bf215,0x394d1984,0x3996f74c,0x39c882c3,0x3a1030e9,0x3a4b4dd2,0x3a2e1e55,0x3a025808,0x398268cc,0x399d9010,0x39f8f978,0x3a887376,0x3a8566ac,0x3a838d3e,0x3a6b8428,0x3a2e2863,0x3a0721cf,0x39d80d00,0x39e3a407, +0x39ad5814,0x39ff3736,0x39986b46,0x39742210,0x39beca4f,0x39497008,0x3983f844,0x3902babe,0x39e5b336,0x39c2e625,0x39493983,0x398795f7,0x3a01e444,0x3a499be1,0x3a32cf30,0x3a64c427,0x3b3b3213,0x39e0d31a,0x39ef27d4,0x39e8869a,0x3a5afec8,0x3a956db7,0x3ac6fe44,0x3a9b307d,0x3a5b552f, +0x39d89bc5,0x39f2522d,0x3a783d64,0x3ae9c016,0x3affa171,0x3aec4efe,0x3ac4e248,0x3a9237b6,0x3a4cf999,0x3a1b4f65,0x3a3d7c3e,0x3a39dff3,0x3ab6f4fb,0x3a843d42,0x3a9eae56,0x3ada7e31,0x39aec790,0x39c67dc0,0x3962cc3e,0x3a8f8f4f,0x3a9b6623,0x39e9cb6b,0x39f4e76f,0x3a244020,0x3a4da08d, +0x3a6bdde2,0x3a9e01d2,0x3b6635bb,0x3a0fd697,0x3a31a9db,0x3a12dc38,0x3a8b2ee3,0x3ab21845,0x3b00932c,0x3aceeef6,0x3a806805,0x3a109e62,0x3a6e5ad4,0x3ad3218f,0x3b30306e,0x3b21674f,0x3b21329e,0x3b0a4140,0x3abab16c,0x3a7647e5,0x3a514f8e,0x3a573062,0x3a56499f,0x3ac2409c,0x3aeb22a1, +0x3af9c26a,0x3af681c6,0x3a21a31f,0x39e3a645,0x39424c5c,0x3a7925e6,0x3a493e46,0x3a20a665,0x39eae390,0x3aa6ffe3,0x3b385424,0x3c135ea0,0x3be81e02,0x3b9b6003,0x3ad8c095,0x3b533d8f,0x3b0ec1a7,0x3b2efd15,0x3af186a6,0x3b0d5f90,0x39f455c9,0x3a04f1f7,0x3a99b579,0x3a9a595c,0x3aa37c69, +0x3b41e7cf,0x3b2c8fd6,0x3b140f17,0x3a94b0f5,0x3a6046ec,0x3a1c86e6,0x3a3e8e31,0x3a3ba61d,0x3a1e3bfa,0x3b0f1d78,0x3b635612,0x3b6e88af,0x3b9309ff,0x3b32d0e4,0x3b49430a,0x3af606f0,0x3b52f605,0x3bb7d042,0x3c1fb1b2,0x3b6f4e88,0x3afd551e,0x3c3e554a,0x3c2ad09f,0x3bde95dc,0x3b696f86, +0x3ad99e24,0x3b000712,0x3a7051d4,0x39d6f239,0x39d21e00,0x3a8d4397,0x3a826eda,0x3a4e9ba8,0x39f75d9d,0x3a3e7c84,0x3a7efe57,0x3a480e12,0x3a466acc,0x3a713c97,0x3a7dc80d,0x3a3158ed,0x3a193972,0x3a28b7e0,0x3a862622,0x3a4037d5,0x3a47327a,0x3a4bb5ce,0x3a6d0e1e,0x3aabad31,0x3a93d435, +0x3a7c32e0,0x3b55ec23,0x3b60ebdd,0x3bd753ef,0x3bf638d0,0x3ad150d8,0x3b172c9b,0x3bbe00ef,0x3a6a38dd,0x39e182eb,0x3b01bd3d,0x3ac703e7,0x3a92f608,0x3a3332e7,0x39d9dc00,0x39453bcc,0x3983abb0,0x3981c79e,0x39a4ae66,0x39a999a5,0x39a896b1,0x39fa740a,0x3a153d16,0x397ad4e8,0x39a92ca8, +0x3a8ddbc8,0x3a2655e1,0x3a2f4616,0x39e10124,0x3a0e74a9,0x3a2b3a35,0x3a19cd43,0x39fcb50b,0x3a016f91,0x3a9d17b7,0x3b0f245a,0x3b2c9b1b,0x3b79bb37,0x3a307f0c,0x3ae977aa,0x3abf8874,0x3b2f8a8c,0x3b4d8050,0x3b640248,0x3b2db2f7,0x3b260436,0x3b85ae55,0x3ad3a509,0x3a849d83,0x3a9cb3b2, +0x3a380a6e,0x39b5dff2,0x38d0cb67,0x3890575e,0x39120ea7,0x39330382,0x38f3bcf9,0x3993440c,0x39bf7efa,0x39174188,0x399df3ad,0x3a9e2c53,0x3a31ba2d,0x3a477f94,0x3a01cace,0x3a2c2f29,0x3a2d30d5,0x3a3952b2,0x3a2f0279,0x3a32a777,0x3a3b2652,0x3a905db4,0x3aa4e072,0x3b2d61da,0x3aba4353, +0x3b11de78,0x3b18b7c3,0x3b2eb576,0x3c82a692,0x3c1c34f3,0x3c12b766,0x3bb747a5,0x3b57a5d1,0x3ac32eb6,0x3a582c9f,0x3a0e1b05,0x3948152f,0x395277c5,0x391d8a73,0x38bea637,0x38b79855,0x3993db67,0x39c0c896,0x3a0ce8ee,0x3a0eae09,0x3a04fb45,0x3a0011db,0x3a5fbee7,0x3a2aac47,0x3a33526a, +0x3a2ed7ca,0x3a345c92,0x3a49c203,0x3a5193b7,0x3a90535d,0x3aa828bc,0x3b143d8e,0x3aff3330,0x3b2e5f9d,0x3b7894d3,0x3b97e279,0x3bdbddcd,0x3c1c427f,0x3c837e69,0x3cbed78c,0x3cf79179,0x3c9751fb,0x3c91a46e,0x3c1899e6,0x3c35f020,0x3c0ecec7,0x3b3aa959,0x3abb53c9,0x3a9ad134,0x39bbf6d4, +0x39877e20,0x39857adc,0x39ceae1f,0x39310d51,0x393b8f89,0x39bf7267,0x3962a139,0x397b561d,0x39cbce34,0x39c169ba,0x3a017d55,0x39dff8c6,0x3a07f281,0x3a058479,0x3a4c2947,0x3a8d71e7,0x3ab31f8f,0x3ac1c98b,0x3b26b15d,0x3b2de356,0x3bc4a2a7,0x3bfa023a,0x3bd10835,0x3c201b4a,0x3c628620, +0x3c1b50ee,0x3c250931,0x3c2f4b47,0x3c1e2032,0x3c107b32,0x3bee498f,0x3bd1067e,0x3bdac888,0x3bb3f595,0x3b89a71e,0x3b26088c,0x3b11fe04,0x3ac16f60,0x3a918181,0x3a1598ea,0x399c06b7,0x39b307e3,0x39a44c03,0x39c1895f,0x398731f7,0x3a48e395,0x3aa82502,0x3ae8c14b,0x3b0e8159,0x3b3189f0, +0x3b2eabfb,0x3b78814b,0x3b8a53a9,0x3b71a95e,0x3b898351,0x3b8e0ae7,0x3bcaddf8,0x3be4851f,0x3bed2efb,0x3bddc86d,0x3bd34d25,0x3c21158f,0x3c2295bf,0x3c20b06b,0x3c13f02e,0x3c05880e,0x3bd63c57,0x3be04dda,0x3bcdb4e2,0x3bacfe80,0x3b8c38f3,0x3b66b5ba,0x3b316522,0x3b0c8c36,0x3ad16c63, +0x3a6798c0,0x39f3056e,0x39aba8bc,0x3962b860,0x39862681,0x39b1e8bd,0x3a2ab86d,0x3a63f797,0x3aa7f622,0x3ab86e7e,0x3ad54924,0x3aebef56,0x3b0b6489,0x3b1604aa,0x3b5fb54f,0x3b40c40e,0x3b7faf52,0x3bc250ae,0x3be22dc8,0x3c0406c9,0x3c281414,0x3c1ce53e,0x3bba1955,0x3bc1e9da,0x3bb4e2bd, +0x3bac6792,0x3bbc8648,0x3bb0ce1c,0x3ba19897,0x3b96549d,0x3b83c1d6,0x3b6a2d08,0x3b65e98d,0x3b24fbd7,0x3b05ccb2,0x3ace32f8,0x3a9ffca9,0x3a6815cf,0x3a2f6afa,0x39def556,0x3a1b5723,0x3a02a3dd,0x3a409d93,0x3a6cb581,0x3ab3a948,0x3af622f6,0x3b293e51,0x3b57d32c,0x3b6af9a2,0x3b952a9a, +0x3ba1eb72,0x3bb605f6,0x3befdbfe,0x3c1b4f09,0x3c0579d1,0x3bf1b939,0x3bffee45,0x3bc31c5d,0x3b98dec5,0x3ba14c21,0x3bae27db,0x3ba437f7,0x3b94aae9,0x3b9f3e41,0x3b9685d4,0x3b9b0801,0x3b8e2ca8,0x3b74248e,0x3b58a94b,0x3b39ccbe,0x3b249b19,0x3b18baf2,0x3af3af4f,0x3ace8cf6,0x3ad2c38b, +0x3aad223e,0x3aa55109,0x3a9a2a3a,0x3ab51629,0x3b01a8c9,0x3b1e0e74,0x3b3ae721,0x3b4a1e82,0x3b4f3027,0x3b77fefe,0x3b6af800,0x3b742d88,0x3b85ef6e,0x3b4fb401,0x3b722b05,0x3b7b9331,0x3b409ff0,0x3b684ad2,0x3b954ca9,0x3b24ec83,0x3b264bfb,0x3b283413,0x3b253f66,0x3b2a4d24,0x3b209292, +0x3b215be0,0x3b2b2844,0x3b213571,0x3b1d6a16,0x3b1b4f3a,0x3b1979bf,0x3b190e00,0x3b168a22,0x3b06956b,0x3b0067f2,0x3b0c75da,0x3aff9585,0x3aeb86c0,0x3ae1375b,0x3aecf972,0x3af69215,0x3af9cc3a,0x3b044fd7,0x3b0963e2,0x3b0cd5a0,0x3b201ec2,0x3b1e728d,0x3b319ecb,0x3b40e049,0x3b467174, +0x3b63e3aa,0x3b59df5c,0x3b412721,0x3b40e383,0x3b334df9,0x3bd5f9eb,0x379aa9ea,0x3721fb74,0x3710cd08,0x36fcccf2,0x36cf7ec9,0x3717e93c,0x368fea47,0x365b1cd8,0x369c189b,0x361bf97a,0x36526360,0x368c8ea9,0x36b6b5a2,0x36d33de1,0x365c3258,0x370f3d74,0x3730838d,0x370bf883,0x36e38137, +0x36ead7ec,0x36f4ac39,0x37149ceb,0x3741c74d,0x3789d80c,0x37c8e9ab,0x37c9829c,0x379cc5b7,0x374a1fc9,0x3703464b,0x370f0a59,0x37124ae5,0x370d5629,0x36a0165e,0x36fb9993,0x371507d7,0x376767cb,0x371dabd3,0x379626f0,0x36c135bb,0x36b1b5ee,0x372003f1,0x381ef550,0x36c293b0,0x3697c8a5, +0x37d8c0a6,0x37f91ada,0x381b0158,0x3824130e,0x37e03e36,0x37aeedae,0x37391bcd,0x38169302,0x38234e0b,0x379c56f5,0x376711ba,0x37630de4,0x378a8e63,0x37792769,0x37c13d7a,0x387df791,0x3895c1fa,0x38a366f5,0x38bd6d40,0x3821e427,0x381a7ca6,0x388349f5,0x381a8351,0x37b09c74,0x36c8d314, +0x38029ed2,0x38635279,0x38aa79b8,0x383168a7,0x3864b6be,0x37c7a744,0x3707c02f,0x36e486f6,0x38a0bbc0,0x37433714,0x37d701b4,0x38be2720,0x38b31d84,0x3901b47e,0x39135cd9,0x38476e94,0x38218d51,0x3820d4d8,0x384a8875,0x387cfb85,0x38050077,0x379f96a9,0x37e9ea8e,0x38522c32,0x3845bebe, +0x389c676b,0x392fc391,0x3986c750,0x398b2e1e,0x39778468,0x38d1f9a3,0x383dd4eb,0x38de223c,0x38365fc5,0x38198f41,0x37808186,0x3884d6f4,0x38b6c5cb,0x391a5798,0x389d12e5,0x388a2163,0x3790953f,0x376131b3,0x38052420,0x39520a80,0x3783f4e8,0x387abd25,0x39845253,0x39cc9d17,0x3a08b241, +0x39cb5200,0x393cf76b,0x38ba9816,0x38ec2027,0x38f453f9,0x391f9da3,0x388da51e,0x381fe4bd,0x38739623,0x38ed22db,0x38ae3f71,0x38e06cab,0x39a4dc97,0x3a034239,0x3a1e6f24,0x3a0cbb44,0x394f5d1f,0x392d5a7d,0x39d9282f,0x390b1ea3,0x38a1bfde,0x38cb74e4,0x397a1b60,0x39bb6c76,0x39ecd07d, +0x396394ad,0x3967f52d,0x388d2d9c,0x37d2d4e8,0x37e5c933,0x39897782,0x38ac5126,0x3944afc7,0x396c97fc,0x399c769c,0x39b92f14,0x391ca86a,0x388c4274,0x38a12389,0x38a9a643,0x38ce793f,0x39136c2a,0x38e8831c,0x382ce1ee,0x38feabd7,0x395cec61,0x396891fe,0x399911a2,0x3a2a2a89,0x3a7c7fc8, +0x3a86f7a1,0x3a68b59c,0x39caeb14,0x38e09308,0x39a22a09,0x38f3767d,0x38c02b85,0x389a3d59,0x3992479d,0x39c24955,0x39fbefee,0x398dc607,0x3ad66a04,0x3a7c4b97,0x3a604fe4,0x3a047cea,0x39855d2c,0x3a1274c3,0x3a26fe0e,0x3a137f7d,0x39a3f4b3,0x37d60a93,0x37322bdb,0x393efd72,0x38f972ff, +0x3922b22d,0x3905cec4,0x39891d34,0x3a1b5f57,0x3a24fb80,0x3a7c970a,0x3aa0455e,0x3ac3e683,0x3a88e6cb,0x3a9dd6eb,0x3ab2b3fa,0x3a9310fe,0x3b0c3b44,0x3aa471c9,0x3aa99351,0x3ad80272,0x3a2713fa,0x395b2562,0x39be03fe,0x39d252d3,0x3a482002,0x3ab7ae9b,0x3af388d8,0x39ae25da,0x3a6442d9, +0x3acef79b,0x3a290b41,0x3a4777f2,0x3a94ba34,0x3a9a745e,0x397cb96f,0x38c88bc1,0x378c9da0,0x38384add,0x388d651a,0x3852be67,0x383e2032,0x37265f4b,0x379b3d11,0x3827a5dd,0x385cb308,0x38b77ac4,0x3985ee25,0x392af99e,0x399b9eba,0x39a869dd,0x3a10139e,0x3a0757f7,0x3a96cf25,0x3a92bb26, +0x3a3ead04,0x3ad10165,0x3972e847,0x39a35863,0x3a1593de,0x3ad549be,0x3ae8fb6c,0x3aa71ee2,0x39c847fb,0x3a964d7d,0x3b99271f,0x3b15a88f,0x3a2f168e,0x39d933bc,0x39821c6d,0x39c33131,0x38befd9b,0x3715bddc,0x368ffca6,0x3541bfa7,0x368c8f88,0x3700835a,0x383754bb,0x380784cb,0x37856de7, +0x381f2caa,0x37eda936,0x387e0190,0x385432dc,0x37bd7563,0x38034d1c,0x38509329,0x386cc19b,0x38b701b2,0x3923d1cb,0x38bff7e5,0x38c8bb10,0x3938c425,0x39c8b12a,0x39f7a19a,0x3a0f668d,0x39821ce1,0x39c596ea,0x3a768afc,0x39f25b8c,0x39ea09f2,0x3b418956,0x3a9cd66e,0x3a117542,0x3a14dffc, +0x3841f342,0x3806a8dd,0x38baae7a,0x384036f7,0x37a96ae4,0x34a5ea51,0x361e9ce7,0x35899f60,0x37d9f848,0x37344acd,0x377ad5a3,0x36c03ab9,0x378ed5e6,0x381f16c5,0x38583ded,0x36b0c4bd,0x37add3fa,0x3849da47,0x39160d71,0x391777e5,0x39b9ee94,0x3950cc7c,0x38f6529e,0x3a31cdc0,0x3a456083, +0x3a7ad81c,0x3ac2780c,0x3a2dabd9,0x3a5a5e2c,0x3a933a83,0x397874f0,0x3ade13e9,0x3bc25fc3,0x3b32d9db,0x3af29db0,0x3a62450a,0x389e0a1c,0x38afb47a,0x38d27fcc,0x37b327fc,0x36b157c3,0x36953976,0x37097951,0x36002e84,0x372c4f20,0x35ddffd9,0x37b5ca46,0x3908f367,0x38f31dfc,0x39216b4b, +0x39418534,0x39050726,0x390edca1,0x392746f2,0x3965b6ba,0x39ad1f29,0x39cca4c6,0x399faecd,0x39105723,0x39dc81a9,0x39dd2579,0x39caeffe,0x3a457275,0x3a21fc18,0x3a8456ac,0x3a52bd2f,0x3a347be0,0x3a9478e6,0x3af082d4,0x3aeb0311,0x3ab1acd6,0x392761d5,0x3831af55,0x37373ecf,0x37cfd8c8, +0x374e93ea,0x37facc6e,0x37871f2b,0x37be54f4,0x36b571e4,0x36bec06e,0x3833ff53,0x38eb46bb,0x39753b97,0x39bfdd6a,0x39d35b18,0x39c2f16d,0x3984177f,0x393cb48b,0x38b30a46,0x38552f43,0x3903d5fd,0x398c5b81,0x39ed6be8,0x3a26618d,0x3a719409,0x3a7f71a8,0x3a1d5e86,0x39bb873c,0x399a4f45, +0x38e51600,0x39a8845d,0x3a3a2afa,0x39d9a46f,0x3a0162e1,0x39de0efb,0x39a54c6f,0x39ad7c7c,0x397d7ad1,0x396243bb,0x3935bdb7,0x3925e672,0x3904578f,0x3883575a,0x3876039c,0x37ed65b9,0x380e328c,0x3846a418,0x38646f93,0x387ce26c,0x38c6cc14,0x38f86623,0x38c996a8,0x3845b50b,0x37a6421e, +0x37a6c19e,0x38a2209a,0x392e1653,0x39994ba0,0x39c351b6,0x39d2254b,0x39c01630,0x39d1d4ad,0x39d96fc4,0x3a01af74,0x39bac16c,0x399ef75b,0x399e26b2,0x39b7f5dc,0x38985d59,0x38d706a1,0x38570e14,0x383bccb7,0x38cc850f,0x38ef6cba,0x38f5c582,0x38cb80ee,0x38b2ed5d,0x38a8bf13,0x388a09a3, +0x38721ce0,0x38750ff6,0x38e184c6,0x38cbcd2d,0x38d867f4,0x38fc66a3,0x38da8537,0x38cf6296,0x38ba88af,0x3868e7e7,0x380efa6a,0x38018c9e,0x3733fe77,0x37a2b883,0x38563fa8,0x38d15c25,0x393d8105,0x399a3ae2,0x3971e9df,0x393448e7,0x3941003b,0x390eced8,0x39048771,0x38fc9140,0x38a933ea, +0x3936e752,0x394a34db,0x3968342b,0x3978637c,0x398d7af0,0x39647635,0x393807c9,0x392865e5,0x39351357,0x391e3c36,0x3958b08c,0x390779be,0x391eb20b,0x391b8f30,0x38f472e1,0x38f4a3b1,0x3911794f,0x38f02d1d,0x38d2f8b8,0x38ce4c47,0x38c6c987,0x38ae25c6,0x38ac3fcb,0x389ddd2f,0x38a47fdb, +0x38a548f2,0x38355d76,0x3816f20f,0x383527a3,0x382446c6,0x385dc50b,0x388ffddd,0x38b02616,0x38e450c7,0x38fc76d3,0x39117b1e,0x39511f31,0x39637218,0x398848f4,0x3982e732,0x3970cd69,0x3995aaba,0x399acc2a,0x39bc31a0,0x39934dab,0x397de27a,0x396c0975,0x39702b3b,0x396015f5,0x397b3a4a, +0x39562cdd,0x393235b7,0x392c13cc,0x392129f3,0x392809a7,0x3925de74,0x3906bdef,0x3902059a,0x38ddc224,0x38cbca4b,0x38a1f8b2,0x3874dd03,0x38a365f5,0x3886a74f,0x388f2051,0x38a6fbac,0x38951081,0x38b53e4b,0x38c50643,0x38d731c3,0x3914d8a5,0x393dd5d4,0x38539d66,0x38634476,0x3872a857, +0x3885ffe7,0x388f9748,0x388ea6c8,0x38858aa6,0x389875ea,0x38a2fb7f,0x38b4e638,0x38b996a0,0x38bcbaf9,0x38bfc6b0,0x38c158cc,0x38ab5e59,0x38b3b822,0x38bc5579,0x38b301f4,0x38af823d,0x38b8a150,0x38ae964c,0x38af95e2,0x38aadb76,0x38ae71d8,0x38aca7fd,0x38a03fdb,0x38a4bfd5,0x3894a48b, +0x38996613,0x3895e03d,0x3885b8ef,0x38859fd9,0x388139bd,0x3867273e,0x3866eb82,0x3858d700,0x39562ba3, +}; +const uint32_t orange53_rom_EL16[HRTF_MODEL_N_SECTIONS * 578] = { +0x3f17b0ab,0x3e80a01f,0x3e8e4bbf,0x3e86ff9f,0x3e86e065,0x3e8c9322,0x3e8ece93,0x3e94df40,0x3e994c6d,0x3e907283,0x3e91a7ef,0x3e8b773c,0x3e86049c,0x3e84bfc5,0x3e85a40d,0x3e7c19c2,0x3e80cdd4,0x3e741816,0x3e779d4c,0x3e6cdb71,0x3e7225ea,0x3e5d2589,0x3e5ce8f8,0x3e80b1a5,0x3e5d2471, +0x3e572419,0x3e7b2793,0x3e788e9f,0x3e744873,0x3e643354,0x3e81b854,0x3e751cb7,0x3e774c1a,0x3e581fdd,0x3e65bacd,0x3e7cb819,0x3e6ae2bc,0x3ed4b460,0x3ec9f9f4,0x3eeb7da9,0x3ee92227,0x3f00d923,0x3f0a5a66,0x3f1ada54,0x3f20f23e,0x3f03fdee,0x3f111ec7,0x3f00bd95,0x3ee797da,0x3ee68a48, +0x3ee8fe2c,0x3ebaf657,0x3ed3b7bc,0x3ebd25e2,0x3eb2f71c,0x3eaac0ac,0x3eae15ea,0x3e99b377,0x3e90e418,0x3e855672,0x3e7a252d,0x3e6bd85d,0x3e7633e3,0x3e85b503,0x3e86c93a,0x3e77e764,0x3e8a6285,0x3e6e6bf1,0x3e803a32,0x3e851d22,0x3e96a371,0x3e9ec253,0x3ea066bf,0x3ec99888,0x3f05f709, +0x3f03a36f,0x3f195448,0x3f2cf627,0x3f535fee,0x3f56e227,0x3f6c2fcb,0x3f537563,0x3f3c1ac4,0x3f29b813,0x3f1e57d2,0x3f0c6e9b,0x3efb3f0b,0x3ef103da,0x3eceaa8d,0x3ecb3c85,0x3eaffb83,0x3ea8c350,0x3e918275,0x3e848cac,0x3e6809ff,0x3e53035c,0x3e416d83,0x3e2ce47e,0x3e275f39,0x3e208994, +0x3e467171,0x3e39ec48,0x3e27ea0b,0x3e30ed7f,0x3e4085e5,0x3e54547b,0x3e6e80a7,0x3e868c69,0x3eae990a,0x3ecc4f1b,0x3efda40b,0x3f1e81b0,0x3f3205d5,0x3f61bd5b,0x3f838bdb,0x3f9a2b2e,0x3f9f3292,0x3f8b130c,0x3f77f214,0x3f559ab3,0x3f36d758,0x3f1ec4a8,0x3f0fae88,0x3eea2847,0x3ed4dfa1, +0x3ec11e36,0x3ea2c536,0x3e9559a7,0x3e6eb447,0x3e575175,0x3e25fc95,0x3e13fe29,0x3df7f5dc,0x3de7d4ed,0x3dbc115f,0x3def5e23,0x3ddf6532,0x3df94520,0x3dcc6a0d,0x3dc0acd1,0x3defa47e,0x3e11b8e7,0x3e323496,0x3e590ef1,0x3e922502,0x3ee23339,0x3f21e3cb,0x3f3f772a,0x3f61d43f,0x3f8c8c20, +0x3fb727cc,0x3fd661de,0x3fe431fa,0x3fc2f86b,0x3f9fcfb7,0x3f86e89f,0x3f67a1f6,0x3f4048c0,0x3f22c7db,0x3f112793,0x3ef6990d,0x3ed1c54e,0x3ead1f7c,0x3e96e437,0x3e72544c,0x3e574893,0x3e0fce11,0x3de8afe8,0x3db0164c,0x3d9633fd,0x3d8292c8,0x3d93f445,0x3da94e1a,0x3db9f939,0x3d946b4a, +0x3d8a8851,0x3db6a311,0x3de0087f,0x3e21f278,0x3e4fe5c0,0x3ea0b693,0x3f3efa87,0x3f6805d9,0x3f964750,0x3fb54f75,0x3fe2f6b8,0x3ff66a68,0x40037cd3,0x4000ff14,0x400fb128,0x400fce2f,0x3fe9eb44,0x3fe73877,0x3fe00255,0x3fb5d63a,0x3f9a1a2a,0x3f5f640d,0x3f4eccaa,0x3f0fb082,0x3edb6125, +0x3ea57510,0x3e7188da,0x3e3ad5c0,0x3e0e2ae2,0x3dc3ec5c,0x3da8d827,0x3d9d98a2,0x3dd688c7,0x3dcd8408,0x3dd00feb,0x3db369bb,0x3dc914a7,0x3e14f46c,0x3e3570ef,0x3e83ae98,0x3eb8d882,0x3f149887,0x3f569457,0x3f84d46a,0x3fa1fa14,0x3fc98c0c,0x4005e4b9,0x40104982,0x4022dcba,0x40130f3d, +0x4017dd8a,0x400225f7,0x3feddc32,0x3fdade81,0x3fb4f78a,0x3faf576a,0x3f8c9b67,0x3f6b21e5,0x3f3fe6cc,0x3f1b4eeb,0x3f06006d,0x3ec88823,0x3e8ca6fc,0x3e485a51,0x3e099dd3,0x3dd3d9a8,0x3da8c546,0x3d9793af,0x3db5cada,0x3dea03f1,0x3e0cbc32,0x3e0213fb,0x3e0dcb0a,0x3e39d6ca,0x3e5fbedf, +0x3e96a334,0x3edfc420,0x3f2355de,0x3f684988,0x3f9590f7,0x3fddc97e,0x3ff5d522,0x401fd5ed,0x4030f31b,0x404218c7,0x403b382a,0x4034586a,0x401ed4d5,0x400433fb,0x3fd9bd3b,0x3fbc1064,0x3f9a6ac0,0x3f765ee0,0x3f517b0a,0x3f334a0c,0x3f1956f1,0x3f07007d,0x3ede0823,0x3eb4cf2b,0x3e852763, +0x3e505ea1,0x3e1595f5,0x3de8a353,0x3e07dd54,0x3e095ddf,0x3e1598b4,0x3e6d0ec4,0x3e1c3713,0x3e19fadf,0x3e56bf85,0x3e6e70a1,0x3ea32c54,0x3ee9a984,0x3f174717,0x3f7a72d3,0x3f9fbad9,0x3ff7153f,0x40103301,0x40372658,0x4039e263,0x4050055d,0x40574820,0x404ab3bd,0x4037d0be,0x4015d6ad, +0x3ffc4566,0x3fc4e141,0x3f9891aa,0x3f7c7afc,0x3f3fca09,0x3f276fc7,0x3f07b696,0x3f054659,0x3ed7e3d4,0x3ebf9156,0x3e9bd4b4,0x3e8945a7,0x3e441bf2,0x3e20aa06,0x3e34e5d6,0x3e16c013,0x3e35d0b1,0x3ec0cf53,0x3e318541,0x3e1d8ace,0x3e427bd9,0x3e7e0f70,0x3ea65cb9,0x3ef29252,0x3f29d8b9, +0x3f893b68,0x3fc65b1b,0x3ffa16b2,0x40156dfe,0x404943bb,0x403bc418,0x4048103b,0x40425826,0x403e0a7b,0x402b9f6b,0x40164840,0x3ff59210,0x3fd0e746,0x3fa313e4,0x3f86a991,0x3f4dc2f5,0x3f1fb21c,0x3f121e39,0x3efc3913,0x3ee98d99,0x3ec5f2a6,0x3eb043d1,0x3e93732a,0x3e5fdc3a,0x3e2daca9, +0x3e2ebdeb,0x3e0dc64a,0x3e322b62,0x3ee4e855,0x3e464982,0x3e3ccc56,0x3e4fe3db,0x3e7e79c1,0x3e9ba3a6,0x3ef26464,0x3f28bc76,0x3f77f556,0x3f94f2b2,0x40031d96,0x40204a6f,0x401db5a5,0x4025657a,0x40203908,0x401fc725,0x400291b9,0x3ff9eabd,0x3ff6f29f,0x3fd4a874,0x3fa5fafc,0x3f8edb6d, +0x3f5d4f86,0x3f334439,0x3f1c7013,0x3f0e77d8,0x3f041715,0x3f00a722,0x3ece1ed6,0x3ebc73df,0x3e8d4302,0x3e84686a,0x3e50bcb9,0x3e308d49,0x3e58fc69,0x3e545118,0x3e8efa51,0x3e5b7b2f,0x3e5776eb,0x3e560116,0x3e957ab6,0x3ec846b7,0x3efa4300,0x3f0bcebd,0x3f859f6e,0x3fa0e43a,0x3fca7cf3, +0x3fe83126,0x4005b4af,0x400da6dd,0x40098cda,0x3ff30587,0x3fe4a2d6,0x3fbf94b6,0x3fadfc2e,0x3f9425c9,0x3f81cca5,0x3f629483,0x3f45a8dc,0x3f359538,0x3f1ec1f4,0x3f24e0f6,0x3f24ca10,0x3f003ad9,0x3f0e1779,0x3eeb4487,0x3ebbd8fd,0x3e93b2ec,0x3e7ef11b,0x3e807866,0x3e55929c,0x3e62efae, +0x3e705a6a,0x3e817540,0x3e794e5b,0x3e7a41f9,0x3e9a7014,0x3ebb74f3,0x3ef872cd,0x3f312560,0x3f6ecb24,0x3f83397c,0x3fac838e,0x3fc03306,0x3fd49aa7,0x3fd303b2,0x3fda0879,0x3fd776fb,0x3fc0a3b6,0x3faefc26,0x3fa2c04a,0x3f8abef2,0x3f7fc532,0x3f618271,0x3f55a5a6,0x3f507f40,0x3f44c5e6, +0x3f3a0236,0x3f331435,0x3f23abcc,0x3f142933,0x3eee77ac,0x3ed7df51,0x3ec3de40,0x3ea3cd9d,0x3e884ecb,0x3ea98936,0x3e8d586a,0x3e85af95,0x3e9151d8,0x3e98714e,0x3e9536e5,0x3ebe9057,0x3ed7b63e,0x3f199453,0x3f2ef2b9,0x3f74cf0b,0x3f82160c,0x3f880dcb,0x3f9805a0,0x3fb4b104,0x3fac90b3, +0x3fb11dce,0x3fb61fd7,0x3fab276c,0x3fa1ee81,0x3f9a1b3b,0x3f937741,0x3f8b364e,0x3f80559a,0x3f7d5f12,0x3f73a3f7,0x3f6688d7,0x3f53a86e,0x3f46a75c,0x3f3102e6,0x3f2c0eb2,0x3f0e6616,0x3f05e02c,0x3ee32b86,0x3ed3b7fb,0x3ecf67b1,0x3eba0d94,0x3eec6deb,0x3edf9d1a,0x3ebb9d12,0x3ecbd211, +0x3ec40310,0x3ef20c66,0x3f167926,0x3f285d91,0x3f39ba4b,0x3f7413f3,0x3f5f4f9b,0x3f71c24c,0x3f6795d9,0x3f4ff349,0x3f86be73,0x3f86883c,0x3f984a72,0x3f91b7a1,0x3f8ee719,0x3f8a96c9,0x3f89e522,0x3f88241c,0x3f8c62cd,0x3f7aeb42,0x3f627c27,0x3f70edc5,0x3f5a783f,0x3f46331c,0x3f572379, +0x3f515a5e,0x3f3a4873,0x3f3150c2,0x3f2f5e7e,0x3f1b3817,0x3ef56a99,0x3f1ab1d8,0x3f0df1b2,0x3f1bcec1,0x3f266568,0x3f1c6571,0x3f23b267,0x3f2f4b78,0x3f14180d,0x3f53d825,0x3f5f5fd4,0x3f15b59b,0x3f214657,0x3f188b0b,0x3f1c85d4,0x3f1b6620,0x3f233455,0x3f1fb2a1,0x3f2800d3,0x3f222fb1, +0x3f22ce4a,0x3f2207fe,0x3f1f6746,0x3f1be0ea,0x3f1b2bac,0x3f170c28,0x3f17f081,0x3f172df7,0x3f110b9d,0x3f08e58c,0x3f1b6536,0x3f0c6e11,0x3f1c49b8,0x3f40f4a4,0x3f057025,0x3f0f44ac,0x3f2f605f,0x3f3f2e28,0x3f2c6da6,0x3f2a5d1a,0x3f41a119,0x3f4058df,0x3f2cd451,0x3f0eff6f,0x3f02df4b, +0x3f410dd6,0x3f2933b0,0x3fb5777b,0x3a4f23e9,0x39ae2b96,0x3994ea1c,0x399dfa98,0x398fee85,0x396ec6f6,0x39986eb2,0x399bb523,0x39816d54,0x398d1b31,0x39829a3d,0x392d943d,0x3936639f,0x39560726,0x398f1261,0x3996f3ac,0x39acdd74,0x39ac0fe5,0x39bce0fe,0x39c5ee9a,0x39d615bf,0x39de27a6, +0x39d97f2d,0x39e0b418,0x39af7a57,0x39a56129,0x39953e3b,0x39b374c9,0x39c0fb75,0x39c38065,0x39c12f15,0x39a92313,0x39a2cc29,0x3989f914,0x3999682f,0x39fb0e9b,0x39b8cc13,0x3a205682,0x39d83773,0x3a0039fe,0x3a006d0e,0x39d06a1a,0x3a5e4432,0x3a52c560,0x39cf5296,0x39f9959f,0x39b68570, +0x39991f19,0x39136243,0x394c9c06,0x3a0db86b,0x3a089225,0x3a356c0a,0x3a23ada3,0x3a35e3e6,0x3a59a719,0x3a88b631,0x3a990998,0x3aa1928e,0x3a96e1c8,0x3a2c4929,0x39d44002,0x39ca928b,0x3a441eb6,0x3a695fbc,0x3a7355b0,0x3a53cb0a,0x3a0a2697,0x3a089d27,0x39d2fdc1,0x3a0e17d4,0x3aca1eb9, +0x3a47db1e,0x3a4db4d2,0x3a21636e,0x3a0f5667,0x39fd95e1,0x39cb6384,0x3a50a41c,0x3a6abd36,0x395d21d0,0x3a11f855,0x39de1b79,0x3a6979a4,0x3a0c56aa,0x3a148b71,0x3a69df2c,0x3a2ed86a,0x3a5e11da,0x3a5680ed,0x3a830ec9,0x3aac119c,0x3ae473c4,0x3b02ecba,0x3b04ad3c,0x3b03e344,0x3a89bddf, +0x3a1ca933,0x3a073128,0x3a7bb653,0x3aa71d21,0x3ac7a566,0x3a8fab80,0x3a58a49e,0x3a0f73ab,0x39d9fbf5,0x3a029265,0x3b2b10c9,0x3a7c32bd,0x3ab12cf3,0x3ad41d12,0x3a62c122,0x3a7f3555,0x3a6232d1,0x3b075e72,0x3b03c287,0x39cc1063,0x3a6b5ee1,0x3a4f1ca5,0x3b626c65,0x3b0d08ae,0x3b02eaf0, +0x3b37686e,0x3ab7af60,0x3ac822be,0x3a8d5a97,0x3ac4db4b,0x3b0bf710,0x3b435041,0x3b714450,0x3b847d68,0x3b8cb672,0x3aff6fec,0x3a898163,0x3a4ede87,0x3adbad9b,0x3b1d3116,0x3b462058,0x3b1135bf,0x3ada786a,0x3a6760f8,0x3a927bd6,0x3a7ae225,0x3bc12d27,0x3af117cb,0x3afe17d7,0x3ab32625, +0x3a8eb181,0x3a3c91b0,0x3a98e2d2,0x3ad51201,0x3abad423,0x39876a92,0x3a5b77ae,0x3ac6e9e6,0x3b89fb28,0x3b767c2b,0x3b5ff830,0x3b35359b,0x3ad93953,0x3ad68970,0x3ab1e243,0x3aea2396,0x3b3ccc4f,0x3b895a01,0x3b949a24,0x3b9a5175,0x3bc58a84,0x3b537f83,0x3b0ac13a,0x3a87be73,0x3afac038, +0x3b4953ec,0x3b791ccc,0x3b2c3722,0x3b0f55fe,0x3a85e2b6,0x3acc1cc0,0x3a855c02,0x3be839ba,0x3b135d20,0x3cca23be,0x3ba81ad3,0x3b1a50f6,0x3bd31877,0x3cba316d,0x3c1b1ba3,0x3be003c8,0x3b5a80b2,0x3c0b0987,0x3bc27cd6,0x3bf6be31,0x3be469e4,0x3bdf29b3,0x3b8866ca,0x3ac9389a,0x3ab10c73, +0x3ab31cd0,0x3aac46ba,0x3ad58092,0x3b1b6f06,0x3b9fd5f9,0x3ba72968,0x3bccaa0c,0x3b542204,0x3b01531b,0x3b154bdb,0x3a430d79,0x3a3cd43e,0x3b9c81fa,0x3b6c11ee,0x3ba1c3f2,0x3b957222,0x3beb1115,0x3b541ca9,0x3bf2759c,0x3c882fbf,0x3ca05cbe,0x3cbc3fba,0x3b8f97b5,0x3b31dfa0,0x3c62d2ac, +0x3c132568,0x3bf1ab15,0x3bb09e83,0x3ad35deb,0x3b05aa4f,0x3b0eeb15,0x3aced874,0x3ad61339,0x3acaadd8,0x3ab86092,0x3af4efe6,0x3ac17ca2,0x3aa4cbe9,0x3aba9098,0x3af9a9e1,0x3ad81457,0x3ad21307,0x3abcb336,0x3b0068c0,0x3ac37457,0x3a739f60,0x3acd66e1,0x3aeef29d,0x3b14af03,0x3a5a8c25, +0x3a526c70,0x3b06baae,0x3b959985,0x3b68ea70,0x3bba8015,0x3c6a7372,0x3b0a9726,0x3c4ca1f6,0x3bb19315,0x3b7bca7e,0x3b1d265c,0x3b29a586,0x3a8811fd,0x3c03c558,0x3bb91182,0x3bb3f2d2,0x3b0f6ae8,0x3a9d87fb,0x3a5fd093,0x3a9e95f6,0x3adfb813,0x3aab35f0,0x3ab5cae1,0x3ab0e828,0x3abc1a09, +0x3b0b5238,0x3a507b16,0x3a085ca2,0x3a9f200c,0x3a737797,0x3a241589,0x3a2b52a3,0x3a194d90,0x3a087650,0x39f178fe,0x39b0126f,0x3a634072,0x3aa92ef6,0x3b13ccd6,0x3b60632b,0x3bb3db44,0x3ac9bc1b,0x3bb3f48b,0x3c00c8cc,0x3bba87a7,0x3b8fc154,0x3bf353ed,0x3b4e47ad,0x3b537931,0x3be6e2c9, +0x3b32d219,0x3b2296b7,0x3aae01e8,0x3aca5967,0x3aadd34b,0x3ab0a1a7,0x3ac7cb75,0x3ade2ded,0x3aaa126d,0x3aefb632,0x3acb73d9,0x3b19b1bd,0x3a33b4d5,0x39d839ca,0x3a616768,0x3a206532,0x39716d25,0x39cc46db,0x396e6b9f,0x39573a50,0x3917d582,0x3a21b261,0x3ac95f36,0x3b1cb0e9,0x3b01dedb, +0x3b77a7fa,0x3bf09950,0x3bcc2a68,0x3c9617ae,0x3c969f5c,0x3d07275b,0x3d003aaa,0x3cc7539a,0x3c40cb82,0x3c30266b,0x3c10e980,0x3ba8385f,0x3b88a2f3,0x3b7bcd85,0x3b1c46f0,0x3b1372bb,0x3ac7c470,0x3ad83a1d,0x3abe692d,0x3ac97a9a,0x3ac84398,0x3aa74377,0x3ad827af,0x3a586689,0x3a88ca21, +0x3a8e4157,0x3a89e6ae,0x3a3dfa52,0x3a18df7d,0x394f94f3,0x391927e2,0x39b70182,0x399f2b1e,0x39dbf891,0x3a98cbe4,0x3ab41ee3,0x3b2ff24e,0x3bff999a,0x3c6ac9bb,0x3d25ccdf,0x3d8e06fb,0x3d49656e,0x3d247132,0x3c5a9aaf,0x3c42b78a,0x3c82463b,0x3c75aea5,0x3bc7f580,0x3ba5eb78,0x3b4eb627, +0x3b146c41,0x3ae0095f,0x3ad3b91d,0x3a88a314,0x3a7f6498,0x3a94dbfb,0x3a8a784d,0x3a644e93,0x3a488e52,0x3a05ab6d,0x39ec9160,0x3a48ba69,0x39b30c9f,0x39b1a950,0x3a6a6bba,0x39e1c8c2,0x39f529bf,0x3a211b97,0x3b14f644,0x3b3c5cc0,0x3bdbc72d,0x3c959a8d,0x3cd45187,0x3ce851d1,0x3cf1003c, +0x3cd037f4,0x3ca3990e,0x3ca24910,0x3c812856,0x3c75c44c,0x3c96342e,0x3c88934e,0x3c57231f,0x3c0f1849,0x3c086e76,0x3befbd60,0x3c2d29eb,0x3c1fc892,0x3bd577db,0x3bc8f7eb,0x3baa0d41,0x3b570f12,0x3b3f0196,0x3aebb85d,0x3a0338eb,0x3a45acbf,0x3a1b17c5,0x3a1bcb48,0x3a206d01,0x3a8ac999, +0x3b135f3a,0x3b458ef3,0x3b9846bc,0x3bb59b41,0x3c12f6ce,0x3c32b877,0x3c61de7e,0x3c5f8a4a,0x3c50e4ac,0x3c8d5474,0x3c9c6051,0x3c9f1bf3,0x3ca343fa,0x3caba060,0x3ca10fab,0x3cc86b2a,0x3c90b244,0x3c89dcf9,0x3c56535e,0x3c121eaa,0x3bcbec80,0x3be68ddd,0x3b8f7cf9,0x3b80210a,0x3b5e6c4e, +0x3b5203e4,0x3b4d19d2,0x3b2d4911,0x3af458b9,0x3a910c38,0x3a55a995,0x3a391cd4,0x3a0a5a46,0x3a37c968,0x3a7edf73,0x3aedc7fa,0x3b57a3de,0x3b937101,0x3bba9169,0x3be60e96,0x3c0ded45,0x3c29c3b9,0x3c579a2f,0x3c60744f,0x3c7cde49,0x3c8b4387,0x3c98e996,0x3c3ad169,0x3c4a44fe,0x3c3d1b06, +0x3c51e685,0x3c78b977,0x3c74e59d,0x3c8a0acc,0x3caf0d4f,0x3c8a1302,0x3c561cd0,0x3c5d703f,0x3c16e1fa,0x3c0e2ca7,0x3bd1390a,0x3ba86c35,0x3b8f7189,0x3b467213,0x3b18325c,0x3b0e8aaa,0x3aab4ca7,0x3aa7cd3f,0x3a9151dc,0x3aca88c7,0x3af956d3,0x3b2e4c62,0x3b69733a,0x3b8b4d71,0x3baac750, +0x3be5e192,0x3be7c0da,0x3c05771d,0x3c15c603,0x3c16a195,0x3c23e2ab,0x3c32df25,0x3c2b270f,0x3c287bf4,0x3c261bbf,0x3c270801,0x3c110eb2,0x3bec16e6,0x3c044014,0x3be6e314,0x3bfcf98f,0x3be8fa21,0x3bfce51a,0x3c01e072,0x3c0139e4,0x3bfdeb59,0x3c04cc55,0x3bd43cb6,0x3bad41a6,0x3bac9a15, +0x3b7c18fb,0x3b346174,0x3b226df2,0x3b298d5b,0x3b46ab11,0x3b4e9c09,0x3b674e6e,0x3b832b78,0x3b87e5f7,0x3bb2ab76,0x3bb3196b,0x3bd72000,0x3bfd1459,0x3c0a14dd,0x3c1950b4,0x3c2408e3,0x3c16fb17,0x3c221015,0x3c32571c,0x3baa8f43,0x3baefc1a,0x3bb2fa97,0x3bb804cc,0x3bbf3d57,0x3bd2fa5e, +0x3bdfaded,0x3bf70e72,0x3be555e8,0x3bd2574d,0x3bc31d82,0x3bb86d02,0x3ba89191,0x3b9fba6d,0x3b9383f1,0x3b8ec8ba,0x3b89c25d,0x3b83731c,0x3b808004,0x3b6ce470,0x3b7a1178,0x3b85c3b7,0x3b8fc1f6,0x3b8b9326,0x3b8d74eb,0x3b914799,0x3b9d4e9f,0x3b9991dc,0x3b9e187e,0x3ba24aed,0x3ba10f0f, +0x3bac509c,0x3ba9c43d,0x3b9f0855,0x3badf13a,0x3baa80bd,0x3c5efe2d,0x38165475,0x378476d0,0x37924f21,0x37aa4f6b,0x37aa77c3,0x37fa3635,0x3798eb40,0x377f2a0c,0x3715c900,0x37905783,0x379f87c7,0x37afa35b,0x3788e4b1,0x37cb64a2,0x38262f58,0x382f8c47,0x38321bb1,0x380a3d6c,0x37b8e022, +0x37887141,0x376c6f08,0x3765dea1,0x375dc867,0x378afadf,0x37bdbb16,0x37ac501a,0x36e9c114,0x374d818b,0x373e74c1,0x3700bbec,0x36d57b04,0x36977bd2,0x37192b37,0x36e57643,0x371b68c3,0x379b954e,0x375f2089,0x37047e6b,0x372772c5,0x38209d6b,0x389f0759,0x391ce95c,0x38e16008,0x387a3f29, +0x375b554e,0x3823d74c,0x388a2192,0x38dddf2a,0x3893f9ca,0x38b2d6dc,0x3930abec,0x39477e1c,0x394576c0,0x38e57088,0x38550c29,0x3806be32,0x38169e13,0x37ee942c,0x37f2fafa,0x38352ab6,0x38752df0,0x3848ea69,0x37bf07fd,0x3835d209,0x385f854c,0x38b8944d,0x38a8c6ca,0x38974e03,0x385b22dc, +0x371aa78b,0x37465aaa,0x389f332b,0x379a13e0,0x37cda477,0x3847239c,0x38f1cf8c,0x392d4d4e,0x39a49d47,0x39466ca2,0x39135973,0x3807de46,0x389d5b6e,0x38b9a5cc,0x397553dc,0x38c82b9d,0x3961031f,0x39fed947,0x3a116505,0x3a02f73d,0x39b7eb0e,0x3916413e,0x38d512e4,0x38dae80d,0x388ec3ef, +0x38389778,0x3883954c,0x38f9fd59,0x38de82f6,0x38a027af,0x38a109bf,0x38d4bc1c,0x399044f4,0x396af5a3,0x392fd644,0x3945794e,0x383fc397,0x37aca73d,0x391dfc8e,0x378b515c,0x38326914,0x380796db,0x39211079,0x39d073a9,0x3a5d0145,0x3a322bb2,0x39e63470,0x39732c07,0x394953e5,0x39944575, +0x3a3688ac,0x39a8a158,0x39d79c4a,0x3a926067,0x3a9adcd3,0x3a88b415,0x3a1a2790,0x3987489f,0x39407b71,0x39762021,0x3905de38,0x388f0d1a,0x39246ab2,0x39972277,0x3965da9d,0x3968c85d,0x394e2585,0x39cb716b,0x3a4caae2,0x3a874eb8,0x3a417cfa,0x3a0072a2,0x3915168b,0x382001a9,0x39e29213, +0x388b4614,0x389f6d37,0x3923ce57,0x39c9716b,0x3a203495,0x3a88a9a6,0x3a4ecccd,0x3a02f5de,0x3928fea3,0x394348ac,0x394c3997,0x3a306255,0x3978a36a,0x3a4e2712,0x3b04d848,0x3b161018,0x3af2da97,0x3aaa1fd2,0x3a0eb04b,0x3a009102,0x39e9b00c,0x399098c6,0x38f9c5a0,0x39910a24,0x398c12f3, +0x3943d462,0x392b2efe,0x392752b4,0x3912aa2f,0x39a82434,0x3a324b66,0x3a22e3f5,0x3a18a64f,0x39b264bd,0x3927ea26,0x3a13f7cb,0x386da846,0x3afe4857,0x3b04214c,0x3b5d65ca,0x3b6821ee,0x3b62f2b4,0x3ab61037,0x3a652224,0x3a25cf6c,0x39d7e3c9,0x3ac9b812,0x3b4663c2,0x3b3369d0,0x3b28e3d6, +0x3b921289,0x3b5747a6,0x3b04d5f6,0x3b23fc28,0x3b261f40,0x3b34ebf6,0x3b1ff9ad,0x3b0bf1dc,0x3a915520,0x3a95db7e,0x3a1216e3,0x39351b74,0x3985ed72,0x39a654ff,0x39c14443,0x37ad1c6b,0x386a7906,0x3a1115d0,0x3ac2b1d1,0x3ab1b4ec,0x3a94a8d4,0x39d1e35e,0x3a838d30,0x3b31fdb3,0x3af39369, +0x3a4e4729,0x3a3c5a96,0x3b1cff7f,0x3b3e77b7,0x3b72fbc1,0x3a844c03,0x3a1cb86e,0x3a08d1a2,0x3b32f56a,0x3ade6d01,0x3b1dd1ea,0x3b1c6c7e,0x3aa32808,0x3a7a31b3,0x3a6451ed,0x3a27bc56,0x39c2c220,0x3a072528,0x39393882,0x38eea2cf,0x38498d92,0x384a14e3,0x37beffd4,0x38acd28e,0x38beb788, +0x38f91842,0x38f4076c,0x3805be57,0x392c1337,0x3a2dae7a,0x3b1e5fe4,0x3b15cc58,0x3ad1ec9c,0x3ad6d5e8,0x3b67cdec,0x3c22b646,0x3b431053,0x3a246d30,0x3ae038f9,0x39424763,0x39ec5346,0x3ad2009b,0x3a8f6e9c,0x3a9b7e81,0x39a239c7,0x392a4ed2,0x3979ae82,0x39bd010e,0x397cdfa7,0x387a2266, +0x396006d9,0x38565e43,0x38c025c6,0x38df4e30,0x38b9add9,0x387c41a7,0x38527abc,0x382bbf2d,0x387739c9,0x38a7cd1b,0x378ea213,0x37744e20,0x353ad13f,0x3697fc44,0x379eb356,0x390ca6fe,0x3a37d2b6,0x3a12a2af,0x3a8e28dc,0x3b0874da,0x3b393d00,0x3bca109b,0x3a5ae68e,0x39fc0447,0x3b0abdb2, +0x3ac6cb8e,0x3aefbbc6,0x3b367ff8,0x3af6b447,0x3aeba0da,0x3a737003,0x399e3678,0x39bfa3b1,0x3a3ba3c4,0x396677d2,0x399112df,0x38facd9b,0x3868361f,0x37650b2a,0x38edc68d,0x38a67087,0x381dd600,0x37129839,0x380edcdf,0x37f45827,0x38776442,0x365eb77d,0x366b206b,0x35902fae,0x38042324, +0x38e3c1e9,0x3974d011,0x38807026,0x391065a3,0x3a852065,0x3aa9d393,0x3bb92d38,0x3c4575ef,0x3b508260,0x3a96fd62,0x3ad806f4,0x3acffb40,0x3ac1a0b3,0x3ace5623,0x3a3aec6c,0x3a7ad513,0x3a34f15c,0x39e45408,0x3a436c73,0x3a7894b3,0x3a13e73f,0x39cdf054,0x39dda253,0x3982c532,0x39bc9552, +0x39bc8e2f,0x399ea908,0x39951914,0x397af2f0,0x38683e46,0x367a876f,0x37b59195,0x36c7f065,0x36f9281a,0x378a6099,0x374fc62c,0x38352871,0x3953378a,0x39207d3f,0x3910ee3d,0x3b0318ec,0x3b8db206,0x3b83fbf4,0x3b835d42,0x3b17119e,0x3acb77b4,0x3a02ebb7,0x3983c3ff,0x3a102511,0x3a51976f, +0x3aac2e38,0x3b14fe3f,0x3afdc89a,0x3ad1ebac,0x3a1d7ed4,0x3a2ca4a7,0x39886c14,0x38ca2843,0x393efd52,0x39bc0a27,0x3a188ba5,0x3a3b349e,0x3a484269,0x3a3d3a65,0x3a1ac3b8,0x398c2ca2,0x38a71f80,0x371021fc,0x37c9a903,0x38171fa2,0x3818ca36,0x388c802d,0x37ee9c96,0x3869e283,0x380e2ff2, +0x38ac9c07,0x3a195fec,0x3b0ff3d3,0x3a50971c,0x3a7ad37a,0x3a8221cc,0x3a417e90,0x3a2e906f,0x3a1adc52,0x3a5629a5,0x3a7cd4f6,0x3a65e54b,0x3a46b625,0x3a3319f5,0x3a6035f2,0x3a484fd9,0x3a17b3d7,0x39b94b16,0x391029cb,0x3835b431,0x384bec8b,0x38cdd4a1,0x395946e0,0x3982407c,0x39440dc8, +0x3906f922,0x38f003e2,0x38eb70ac,0x38aeeb4a,0x38833bbf,0x38cdf585,0x391aa2d8,0x398bcbe2,0x39a930fe,0x39c8289a,0x39f50efd,0x3a1403d9,0x3a21957e,0x3a405b9d,0x39042f3d,0x3950834e,0x3919c6c0,0x391b3b72,0x399e1e4a,0x39847c9f,0x398b3873,0x39b487b7,0x39bf7c98,0x39fcec4a,0x3a16cad5, +0x39c5a978,0x39655e02,0x38d5646a,0x38504d54,0x37b377b2,0x388a1890,0x38984614,0x38fb8946,0x393f5f97,0x394e363c,0x395b24fe,0x3983bf91,0x39617738,0x3955d3d3,0x39750b40,0x3923a7ad,0x39092733,0x392389c4,0x391ef754,0x39376ad1,0x397df9e8,0x393c0774,0x3955e413,0x395fd061,0x38eb03c8, +0x39f6bb8b,0x39d733c7,0x39ae6cb1,0x39916bb1,0x398152f6,0x393c50b7,0x391b338e,0x391fc411,0x38ea6848,0x38b033ee,0x38c96c59,0x38823704,0x38bd5dd3,0x3900d0a4,0x390d2666,0x3926d436,0x3927995d,0x3932cbae,0x3946f329,0x395122a0,0x39610cc2,0x3976b0ae,0x3993ed03,0x39724d56,0x398a9161, +0x39b44f88,0x399c6ac9,0x39a6b273,0x39b6046c,0x399dd83d,0x39b71bd0,0x39a5b29c,0x39cc99ab,0x3a108dc8,0x3a201c69,0x3a039f6b,0x3a108012,0x39e6d6a1,0x39cd7163,0x39ae1741,0x39892000,0x39739bf9,0x394243d1,0x3935b2e4,0x3924f2c6,0x3914931a,0x39128ee6,0x391d64ac,0x391fb532,0x39370e0e, +0x392d64fd,0x39346120,0x3968ccc5,0x397a7e0f,0x398aecd0,0x39a4f1a4,0x399ea9eb,0x39a2e12f,0x39a80454,0x39c6f112,0x39d1976b,0x39d34979,0x39ea2d9f,0x39e46589,0x39e71f7f,0x3a0fd835,0x3a017298,0x3a42e403,0x3a316f26,0x3a02b59b,0x3a1295b9,0x3a0bb10e,0x38ee0e84,0x38f0cc32,0x38f11df1, +0x38ea84b7,0x38ec4659,0x38f66713,0x38fd519f,0x390881d0,0x3912328f,0x391a2b29,0x391c73da,0x391c902b,0x391cc422,0x39229837,0x3927f46c,0x392d06ef,0x393179b4,0x3930470f,0x3930fc22,0x393c9134,0x3933985a,0x393b2fc9,0x3939ac73,0x3938504b,0x39393a44,0x393e494f,0x394b44d1,0x3936b998, +0x393ebca2,0x393ca558,0x3926b537,0x391e4095,0x3913fab1,0x3914fabb,0x391d4983,0x390af83e,0x39dc76ea, +}; +const uint32_t orange53_rom_ER16[HRTF_MODEL_N_SECTIONS * 578] = { +0x3f178b3f,0x3e835078,0x3e8afc3b,0x3e7fe6f4,0x3e6b2b78,0x3e7bec73,0x3e5f5a42,0x3e577b27,0x3e7c5c6b,0x3e78ba06,0x3e7b6d61,0x3e6c490b,0x3e6a74f2,0x3e804d74,0x3e71b42f,0x3e4cc856,0x3e592b77,0x3e7abdf9,0x3e5eae52,0x3e5e28f5,0x3e77c0de,0x3e6ea84a,0x3e771035,0x3e729404,0x3e830041, +0x3e86572f,0x3e8378d0,0x3e84a855,0x3e88d79e,0x3e8732a2,0x3e947d49,0x3e8c0a3e,0x3e9a5b09,0x3e91a147,0x3e9263b0,0x3e8cec80,0x3e860436,0x3ee01548,0x3ed52967,0x3ed1b42a,0x3ea0f9d5,0x3e9962dd,0x3e8c5273,0x3e91501d,0x3e879194,0x3e698179,0x3e864bac,0x3e83dce0,0x3e76448f,0x3e816554, +0x3e84810e,0x3e7e0cde,0x3e91398e,0x3e8893a3,0x3e8d2705,0x3e96ad3c,0x3ea96086,0x3ead59e9,0x3eb7839b,0x3eba3341,0x3eb49cff,0x3eb0bbec,0x3edc7342,0x3ef18d84,0x3f00b23e,0x3ef3ff5b,0x3f131665,0x3efe60aa,0x3f1979e4,0x3f12da9a,0x3f129f1d,0x3f058aca,0x3ee702cb,0x3f04bccb,0x3ef9832a, +0x3ec89334,0x3ea995e8,0x3e87a448,0x3e7b05f5,0x3e4d411e,0x3e3eecb6,0x3e2bd6ab,0x3e2efac6,0x3e37487c,0x3e45e08e,0x3e27bfad,0x3e1f3f74,0x3e31dc82,0x3e361569,0x3e53bf97,0x3e616a26,0x3e8205dd,0x3e911c95,0x3ea90787,0x3eb58cf7,0x3eca58f2,0x3ed68b03,0x3eea44fe,0x3f03026f,0x3f06d64a, +0x3f18de26,0x3f2cc639,0x3f3ce2ba,0x3f555516,0x3f6f01ad,0x3f5cb73a,0x3f4abe02,0x3f2d3130,0x3f1adc94,0x3f1a2e6d,0x3f03da95,0x3ec7c0c6,0x3e94abe7,0x3e5a95f1,0x3e2aab94,0x3e0e8b9a,0x3de5c28d,0x3dc0c789,0x3dc4a271,0x3dfd8736,0x3de5b695,0x3de5b533,0x3dc9bd57,0x3de31fba,0x3dfe197b, +0x3e151887,0x3e2a04fd,0x3e5322c0,0x3e6580f9,0x3e9ed425,0x3e99e6ba,0x3ec2ca5e,0x3ed1d96a,0x3ef1b7d1,0x3f0a37d3,0x3f21f1c6,0x3f34c362,0x3f51f2c7,0x3f774830,0x3f8aa29a,0x3fa6411d,0x3f99181b,0x3f886f70,0x3f5d82f7,0x3f32ecce,0x3f3b138d,0x3f216269,0x3ee6c26e,0x3e9b8552,0x3e50dd55, +0x3e1f98b8,0x3dea2887,0x3db7babc,0x3d91ad56,0x3d8ea056,0x3db252b1,0x3daa3ce8,0x3d98d32c,0x3d81038d,0x3d94f1a8,0x3dac3ccc,0x3ddb38d2,0x3e0c5720,0x3e4f9542,0x3e75a979,0x3e90c75a,0x3eb0fc0b,0x3ed7cf9f,0x3eecbce3,0x3f140005,0x3f26ffaf,0x3f3f9c41,0x3f66c857,0x3f878315,0x3fa5649d, +0x3fc25375,0x3fe3088e,0x3fd5f843,0x3fb852f9,0x3f8ee7f6,0x3f630f71,0x3f8bb33e,0x3f6f7549,0x3f42a00f,0x3f128072,0x3ebae942,0x3e844a52,0x3e3cc0fa,0x3e0c925e,0x3dcc643f,0x3dba8e75,0x3dc802b3,0x3dd636ed,0x3dd0c483,0x3d9ea6c4,0x3dab2f28,0x3dc1096e,0x3e14ffaa,0x3e333294,0x3e734824, +0x3e9e2ee2,0x3ee5411d,0x3f0d66a3,0x3f512fc2,0x3f7309aa,0x3f8bdfe5,0x3fba35fd,0x3fda09e4,0x3fed5e9a,0x3ff17ddd,0x4009ced4,0x4009f6b8,0x4006f832,0x40007592,0x3ffa3b20,0x3fd65870,0x3fb9daf8,0x3fae19ec,0x3f8282bb,0x3f6611a6,0x3f220a99,0x3edcf347,0x3e9472a2,0x3e600026,0x3e38d19b, +0x3e0f61e3,0x3df4dc69,0x3e0d2a92,0x3de4c9d7,0x3dbef031,0x3d99e506,0x3dad8df2,0x3dcdd1ba,0x3e0c3e45,0x3e4b836d,0x3e8c4972,0x3ec57783,0x3f056f36,0x3f1a42b2,0x3f39a6ad,0x3f716904,0x3f8be7d4,0x3fab0483,0x3fb06b85,0x3fd8491c,0x3fea32a4,0x400aadbd,0x40169b1a,0x401b4806,0x401ff01d, +0x40114f56,0x4008a878,0x3fc87d78,0x3fd6d984,0x3f959e6e,0x3f66c171,0x3f1e0b27,0x3eed4080,0x3e9da4e0,0x3e75a09f,0x3e4fa595,0x3e1bc3b9,0x3e1a94c4,0x3e6c6328,0x3e178acd,0x3e0787dd,0x3e06fa47,0x3def437f,0x3e14abaf,0x3e53da59,0x3e87326d,0x3eb504d4,0x3ee0ec43,0x3f080915,0x3f18c8d3, +0x3f303221,0x3f4f4b31,0x3f709757,0x3fa07468,0x3fbbc94e,0x3fd5206a,0x400763f5,0x401d37be,0x40327e8e,0x403c28e3,0x403c1b96,0x40340fb1,0x40200d80,0x3ff6eeba,0x3ff034bb,0x3fadbd66,0x3f7fdaee,0x3f27b2ba,0x3ee7339e,0x3ea2f33f,0x3e6a7a76,0x3e4a28e0,0x3e1ecf50,0x3e305021,0x3ebced51, +0x3e383e3d,0x3e160d72,0x3e36240b,0x3e1f1ea5,0x3e3cac0d,0x3e8b5686,0x3e9b10bf,0x3ec690ad,0x3ede43af,0x3f00f1e0,0x3f060ad2,0x3f278ec8,0x3f4427cb,0x3f7b39cb,0x3f935055,0x3fc7a70b,0x3ff46385,0x4019d8d0,0x4032c811,0x404c48e9,0x4052de4c,0x4050208a,0x40477c13,0x40378005,0x4016851b, +0x3fff7163,0x3fb3f91c,0x3f84d585,0x3f20e649,0x3ef69361,0x3e942032,0x3e842060,0x3e5503cf,0x3e374960,0x3e43f1ba,0x3ee10dd6,0x3e2cdaf1,0x3e158322,0x3e2a4120,0x3e366e92,0x3e62b0c9,0x3e8eefa2,0x3eab51fa,0x3ec060e0,0x3ee9f505,0x3effbc92,0x3f13f92f,0x3f1eec30,0x3f48ad09,0x3f837b6c, +0x3fa8a975,0x3fcb47a5,0x3ffb643c,0x4013228b,0x402c1956,0x404531ad,0x404007f6,0x4047ee24,0x4036312e,0x40473608,0x4018d1bd,0x3fff37e0,0x3fa05781,0x3f7bd13e,0x3f16e7f0,0x3eea0f8b,0x3eaef664,0x3e93e518,0x3e6d2c7a,0x3e5e1a29,0x3e5a6598,0x3e90016d,0x3e561722,0x3e4a1480,0x3e2f1bcb, +0x3e5acf44,0x3e74177e,0x3e98b5b6,0x3eb5adb8,0x3ed0d118,0x3eeb6619,0x3f0a65e5,0x3f0ca448,0x3f174ef2,0x3f3c1102,0x3f5aa41a,0x3f87fd0d,0x3fb42476,0x3fcf0c89,0x3ff552aa,0x3ff4e47b,0x4001f32a,0x401d3677,0x4024b707,0x402aaac1,0x402a8186,0x40191730,0x3fc86194,0x3f99e988,0x3f6f15ea, +0x3f27e5ab,0x3ef45e7b,0x3ec098ce,0x3e8cb0c3,0x3e7aa32b,0x3e71ef68,0x3e8fa31f,0x3e7ea074,0x3e65ee1f,0x3e5194cd,0x3e667170,0x3e7cea3b,0x3e9a6552,0x3eab78bb,0x3eda212d,0x3f0c467b,0x3f0dc731,0x3f22cd5d,0x3f237952,0x3f224d6c,0x3f31ea98,0x3f4ab5ad,0x3f63b860,0x3f769b18,0x3f95c29d, +0x3fb25ddf,0x3fc273b0,0x3fe53387,0x3ff5ebf0,0x400a1974,0x400ab29c,0x40020ec6,0x3feedaf7,0x3fb55de1,0x3f89b15d,0x3f67eb09,0x3f333b0c,0x3f11bbcb,0x3ed9800b,0x3ec166e9,0x3e952448,0x3ea41dbf,0x3e8d5a25,0x3e90f81d,0x3e8af8af,0x3ea4b5aa,0x3e8ba96f,0x3ea3c537,0x3eafa446,0x3edf8c95, +0x3ef750d4,0x3f12cab3,0x3f1d1969,0x3f373803,0x3f2e6516,0x3f4b7f7f,0x3f4ae9a8,0x3f57e086,0x3f65efc9,0x3f81155a,0x3f8a7d8e,0x3f9ad77d,0x3faf6f65,0x3fbcdd5a,0x3fd30d2f,0x3fdbb6a8,0x3fd8c525,0x3fdd3293,0x3fb77d1e,0x3f8907a6,0x3f813b8c,0x3f724947,0x3f386537,0x3f32c862,0x3f1c9f7d, +0x3f012630,0x3eb876fd,0x3eb6614a,0x3eb1ff25,0x3eca26df,0x3ed2e876,0x3eb2b9e7,0x3ec02434,0x3ef03243,0x3eed15fa,0x3efff1b5,0x3f0f3aad,0x3f3a8a6d,0x3f39e49d,0x3f45a2e1,0x3f523fda,0x3f652cb8,0x3f6d7dbd,0x3f812c11,0x3f88b803,0x3f8c5792,0x3f984dc8,0x3f9e0739,0x3fa28f9a,0x3fae9112, +0x3fb8d633,0x3faa9c10,0x3fac3a51,0x3fb10b8c,0x3f968251,0x3f5db4ce,0x3f681b77,0x3f85f23c,0x3f3cafed,0x3f2a3703,0x3f3d1795,0x3f33113a,0x3f1f3da7,0x3f271998,0x3f243702,0x3f222eac,0x3f218b2b,0x3f1ae254,0x3f17b080,0x3f1e5022,0x3f25fc54,0x3f4adfcd,0x3f3dd1f6,0x3f6656ee,0x3f541521, +0x3f43c7f0,0x3f66cbb4,0x3f678d22,0x3f7ae646,0x3f75e4fa,0x3f645cb9,0x3f89cfdc,0x3f7a8fca,0x3f8448a7,0x3f94109b,0x3f855617,0x3f95625e,0x3f957dd3,0x3f62a321,0x3f691819,0x3f7d3964,0x3f149348,0x3f201718,0x3f18d146,0x3f290854,0x3f451c7f,0x3f0727df,0x3f0cc8dd,0x3f41f01c,0x3f4ea9e8, +0x3f373b7e,0x3f2a441d,0x3f303d84,0x3f4133d1,0x3f43c1bd,0x3f0ae32b,0x3f09be54,0x3f3c0a11,0x3f1764b8,0x3f12da1f,0x3f1726dc,0x3f0bbf5e,0x3f131fc3,0x3f13b8cf,0x3f18c5d2,0x3f1a4534,0x3f171529,0x3f217ee1,0x3f1afeb8,0x3f227823,0x3f24928a,0x3f1f6190,0x3f276fe1,0x3f243017,0x3f1aef22, +0x3f20fb02,0x3f1ed4c4,0x3fb48688,0x3a4e4a3c,0x3998480e,0x399311b1,0x39b28b1e,0x39bcfb5a,0x39feed0b,0x39953bb6,0x398e7b2a,0x39a0d8b2,0x39ad6d0f,0x39becea7,0x39d10feb,0x39bc4e7b,0x39b16fcb,0x3994ef47,0x399cdf14,0x39b2242a,0x39e8109b,0x39e96277,0x39e23a49,0x39d6eb91,0x39c87972, +0x39b901c0,0x39a9a0f6,0x39b3c4be,0x39a3fb59,0x398d56d7,0x39587e54,0x3943ba1b,0x39325eab,0x397a3d8b,0x398811f2,0x39816e4f,0x399d7340,0x3996fcbe,0x39693f25,0x398ef9e3,0x39f77941,0x39dad77c,0x3a1fd5c4,0x3a43ff16,0x3ac7ac93,0x3a00ebf9,0x39dbea3f,0x3a106327,0x3a11426a,0x3a4ece80, +0x3a748927,0x3a556d3b,0x3a365036,0x39e0002c,0x39edc6ee,0x3a38dc76,0x3a908b4a,0x3a90d467,0x3a957fed,0x3a85e4f8,0x3a5bad3a,0x3a3f2e12,0x3a28d493,0x3a137a15,0x39e93c33,0x3a14d9eb,0x3953fbc3,0x392e4ccf,0x39aba4cc,0x39c80dc7,0x39fb5863,0x39c78a2f,0x3a4e18a1,0x3a648317,0x39e87151, +0x3a033b1b,0x3a08bf29,0x3a21a721,0x3a4e9e95,0x3a82a0ff,0x3b2eb30d,0x3a0e9043,0x39dc8d18,0x3a1375fb,0x3a4edc96,0x3a91ff8c,0x3ac9ad09,0x3aae0c44,0x3a821c96,0x3a01fa87,0x3a231725,0x3a834af1,0x3b0f1d3a,0x3b06cef8,0x3b02cf1d,0x3ae90ec2,0x3aaa4f28,0x3a83a48d,0x3a51b1d7,0x3a623f66, +0x3a2cd2f5,0x3a78e9ad,0x3a139c90,0x39e60415,0x3a58bfa8,0x39d91471,0x3a09dd29,0x396cf69a,0x3a5e981f,0x3a40028a,0x39caa043,0x3a070725,0x3a7cc978,0x3ac52a0f,0x3aaece6c,0x3ae2a5b9,0x3bbdf239,0x3a70fc5c,0x3a865c82,0x3a5f4262,0x3ae346a2,0x3b14ae95,0x3b4096b8,0x3b1a97f3,0x3adab2cb, +0x3a52d225,0x3a848b5e,0x3b07514a,0x3b7773aa,0x3b81a85f,0x3b6ab90e,0x3b42d2bb,0x3b0dba2c,0x3ac48f25,0x3a9310ec,0x3abd25cb,0x3ab927f0,0x3b2f9c39,0x3b025daa,0x3b1a99a4,0x3b7cbc72,0x3a48ddab,0x3a568230,0x39c63c4a,0x3b091d1d,0x3b17ba38,0x3a712a38,0x3a6d7212,0x3a93fe9e,0x3ac27895, +0x3aec9127,0x3b1c5460,0x3be8a305,0x3a8f5357,0x3ab95840,0x3a893c27,0x3b0d61fa,0x3b2903ad,0x3b76d0bd,0x3b4ef9a5,0x3afd3454,0x3a8a13a7,0x3b0233d7,0x3b66955d,0x3bb8b59c,0x3ba3ec3c,0x3b9eeb1e,0x3b87dda9,0x3b3218ee,0x3ae8d779,0x3ac5531a,0x3ad7335c,0x3ad43321,0x3b33a938,0x3b5db9e9, +0x3b714f5f,0x3b877233,0x3ab6d4a6,0x3a7d03eb,0x39915378,0x3aec8b1a,0x3ac6ed14,0x3a99022d,0x3a5de13f,0x3b173630,0x3bba528a,0x3ca4cd86,0x3c7471c4,0x3c22dab0,0x3b5cfea7,0x3bd3456a,0x3b886e4e,0x3bac7995,0x3b78c8eb,0x3b8da907,0x3a3586bc,0x3a546238,0x3b15e339,0x3b1f51d2,0x3b2d5e8d, +0x3bd4ab90,0x3bb213ab,0x3b96e676,0x3b1c7351,0x3aedbc8c,0x3a9d4ea8,0x3abf4556,0x3ac028a8,0x3aa8527d,0x3b87d5cd,0x3bd9a792,0x3beb4f48,0x3c0a4505,0x3bc8f28f,0x3bfbf007,0x3b85e091,0x3bdf8e9d,0x3c33cd65,0x3c9d3914,0x3be3d3b2,0x3b850bed,0x3cbded9f,0x3cae0798,0x3c5a3973,0x3bda7dc6, +0x3b79d959,0x3b93283e,0x3ae152bc,0x3a5de803,0x3a578309,0x3b0dd438,0x3b01c0a7,0x3acdeb2f,0x3a724be9,0x3abda432,0x3aff3f6b,0x3acb52ea,0x3ac71f25,0x3aec7247,0x3af7215d,0x3aafe9d3,0x3aa091c5,0x3ab88598,0x3afdc81d,0x3ab86387,0x3ac58386,0x3aa4b1ce,0x3ad08db4,0x3b286364,0x3b0b3780, +0x3af2ba4f,0x3bd2deb3,0x3bd3a2cd,0x3c492700,0x3c66c276,0x3b53b17a,0x3b8dce87,0x3c438abb,0x3b1ff54c,0x3a73685e,0x3b986121,0x3b561218,0x3b182e98,0x3ab3c7da,0x3a616913,0x39c43abe,0x3a041bc2,0x3a006492,0x3a227800,0x3a277217,0x3a2f305b,0x3a7976bc,0x3aa885a8,0x3a0d4134,0x3a492fc9, +0x3b0da624,0x3aaa0d35,0x3ac1526c,0x3a904958,0x3abd953b,0x3ad325b8,0x3a91e291,0x3a79331f,0x3a7385ee,0x3b21618c,0x3b9756be,0x3bb76e96,0x3c0797a1,0x3a9524df,0x3b41b75c,0x3b3719cc,0x3ba9e19f,0x3bbf49cb,0x3be66994,0x3bb0a1e6,0x3ba56125,0x3c0512b3,0x3b5094b3,0x3b020bbc,0x3b1a556e, +0x3ab707f4,0x3a358b87,0x39546db9,0x390de5b9,0x398f43e4,0x39b1e48f,0x39776cac,0x3a14d6e7,0x3a6d567f,0x39b8ce4d,0x3a35cc76,0x3b1fba5e,0x3aba74d9,0x3aed022f,0x3aa7469b,0x3aee1f75,0x3add2600,0x3aaef913,0x3ab77301,0x3ab0bf0e,0x3adcddc1,0x3b13a888,0x3b2f9459,0x3be51eab,0x3b30aa4c, +0x3b7b159c,0x3bc4afc3,0x3ba18361,0x3d068729,0x3c98f915,0x3c9c3dd4,0x3c47fa19,0x3bf2eb59,0x3b44ed09,0x3ad04bfc,0x3a888767,0x39c39298,0x39d11d0e,0x399d993d,0x3940646a,0x39398bad,0x3a1ef456,0x3a466e38,0x3a8d28ac,0x3a947b2f,0x3a7bfe65,0x3a740cf8,0x3ada13cb,0x3abc713c,0x3ad061a5, +0x3ab4bb71,0x3ac057de,0x3acd0edf,0x3acdd989,0x3b0a17c9,0x3b231383,0x3b8abf57,0x3b7ecaff,0x3bb1f1fe,0x3c0d30b7,0x3c17856f,0x3c5ad207,0x3cc5df20,0x3d0d0695,0x3d59c98f,0x3d88eed1,0x3d21dd64,0x3d1cfb42,0x3c9ffa4b,0x3cc0894d,0x3c986897,0x3bd2e238,0x3b4a1884,0x3b2069b2,0x3a369b02, +0x39f9a09d,0x3a099af7,0x3a60798e,0x39bda66c,0x39a4b552,0x3a38e051,0x39dfd027,0x3a11a5ca,0x3a6e46e3,0x3a444c36,0x3a914a47,0x3a8fe51c,0x3a833851,0x3a7f9efd,0x3ac8b24c,0x3aea8cde,0x3b1f2d36,0x3b35decb,0x3baa9bc0,0x3bc1023a,0x3c73b258,0x3c84c7e4,0x3c49bbf1,0x3ca6a6eb,0x3d015458, +0x3ca62e33,0x3cab9618,0x3cb62cfe,0x3ca392cc,0x3c948abd,0x3c756c8a,0x3c57753b,0x3c5f661b,0x3c3abab8,0x3c0f836f,0x3bac7a02,0x3b9bf4f8,0x3b4d7c56,0x3b0f196d,0x3a8f9a45,0x3a126f21,0x3a26eee6,0x3a1ec00c,0x3a3c21b4,0x3a066d20,0x3acf0ade,0x3b2e5192,0x3b7399de,0x3ba30089,0x3bd1a12e, +0x3be21a6a,0x3c1d4633,0x3c22e8d5,0x3bffc676,0x3c09efbc,0x3c0bcb01,0x3c572280,0x3c879e42,0x3c902cb5,0x3c835257,0x3c6ce7ff,0x3ca92361,0x3ca57bdd,0x3ca34e84,0x3c95f950,0x3c8678e1,0x3c599fdb,0x3c623f70,0x3c4f3a96,0x3c2f314d,0x3c0ed9e1,0x3bebc003,0x3bb66a79,0x3b911628,0x3b548ee7, +0x3aedfdce,0x3a809b97,0x3a447e7b,0x3a1c7ad3,0x3a2e91aa,0x3a541853,0x3ab0fb0d,0x3ae8dacc,0x3b2843ff,0x3b3745ec,0x3b54be56,0x3b6a3a19,0x3b8badea,0x3b974c38,0x3be96ace,0x3bcfbc01,0x3c0f1ac5,0x3c5fa322,0x3c82626e,0x3c9621e0,0x3cb6e548,0x3ca90adf,0x3c3f7010,0x3c47f978,0x3c388c91, +0x3c2fe797,0x3c3dfabc,0x3c3059e7,0x3c20914e,0x3c149dc4,0x3c02b87a,0x3be9cd92,0x3be7001e,0x3ba70476,0x3b88d1d0,0x3b541f26,0x3b2bcc77,0x3b006b44,0x3acdfbf4,0x3a8ba1f0,0x3ad73b5b,0x3aab4b11,0x3ae49488,0x3b06a25c,0x3b424c28,0x3b8bfa4d,0x3bc50d5a,0x3bf8fe4b,0x3c07de53,0x3c2d051a, +0x3c39c838,0x3c4ab7c1,0x3c81e778,0x3ca4a9de,0x3c8af6f6,0x3c786132,0x3c829511,0x3c484089,0x3c1f82c9,0x3c267e85,0x3c305af5,0x3c27fac1,0x3c17a72a,0x3c23900b,0x3c1cd52c,0x3c1fb0a5,0x3c14c6c6,0x3bfd4be6,0x3be16aef,0x3bc37ce2,0x3bae78be,0x3ba2744d,0x3b814e14,0x3b5a2cfe,0x3b603d9f, +0x3b37244a,0x3b2c6b3b,0x3b1d59c3,0x3b388ca5,0x3b876127,0x3ba4a049,0x3bc16f1d,0x3bcef3a3,0x3bd22c69,0x3bfdea97,0x3bed29cb,0x3bf893b5,0x3c09d992,0x3bd7ddb0,0x3bff6e59,0x3c064491,0x3bd46923,0x3bfb8afb,0x3c1e1a98,0x3bac6bda,0x3baf1b8f,0x3baeb6c0,0x3ba9183c,0x3babef74,0x3ba6ad65, +0x3ba48b97,0x3bab7a99,0x3ba18b7f,0x3b9eaff5,0x3b9d202e,0x3b9b4ba2,0x3b9ae4b0,0x3b98baaa,0x3b8b155c,0x3b867933,0x3b8fe7dd,0x3b843458,0x3b764358,0x3b6ff9ed,0x3b7dffb9,0x3b83bbd8,0x3b8628f0,0x3b901f79,0x3b972870,0x3b9ba4a0,0x3bb21052,0x3baed021,0x3bc230ec,0x3bd03f1e,0x3bd2db2e, +0x3bef773d,0x3be2dad3,0x3bc8d2a1,0x3bc7ec0b,0x3bba6422,0x3c604039,0x3818435d,0x37a18744,0x378f48a8,0x3779ff5f,0x374ad6b7,0x37949dc3,0x370dd630,0x36d6d807,0x371bac7f,0x3697b349,0x36cf2de2,0x370ad62f,0x37342b20,0x3750284a,0x36d808cb,0x378e0401,0x37af61bc,0x3789b953,0x376191ee, +0x376b0e43,0x377535d9,0x3793f50b,0x37c01c6c,0x3808b53d,0x38478553,0x38486cb8,0x381dcf8e,0x37c9fcd2,0x37828536,0x378c87ef,0x37901767,0x378b7b01,0x371e36cc,0x37791027,0x37937ca6,0x37e68e15,0x379d14a5,0x38171bf8,0x37391567,0x372f9f31,0x37a5ea2e,0x38a0fe2c,0x37450a0d,0x3716feff, +0x385b8c19,0x387a4406,0x389b2793,0x38a4085e,0x386068b0,0x382f90e9,0x37b8df95,0x3897bc98,0x38a3bfd4,0x381f247b,0x37ede8c8,0x37ee3a92,0x3810559d,0x3803d9c6,0x3847334f,0x38ff3796,0x39152a5e,0x3923de2a,0x394399ff,0x38a5083c,0x389af4ca,0x39022171,0x389ae7ce,0x382fe810,0x375ec066, +0x38867898,0x38e5a92a,0x392a151e,0x38b16af5,0x38f05938,0x38494d36,0x379b87c2,0x378218ce,0x3923c73b,0x37c62db9,0x38578569,0x3941e0c6,0x393326f7,0x39822702,0x39934749,0x38c7f560,0x38a3de06,0x38a0fc6c,0x38cd2dfd,0x38fdf7ec,0x3889a961,0x382e1aaa,0x3882912e,0x38e1e24c,0x38d70a13, +0x39219290,0x39b0fb48,0x3a066f8d,0x3a0b7f72,0x3a01d713,0x395b62e8,0x38c7d9ca,0x395c4e9f,0x38b7abe1,0x3898daf6,0x38073ef5,0x39073d8a,0x39373edc,0x399b3ecf,0x3920c781,0x390f31b9,0x380a67a6,0x380329d1,0x3895da72,0x39d64536,0x38163758,0x38fd4461,0x3a072dd4,0x3a4cb473,0x3a8918bb, +0x3a4ca636,0x39beee8b,0x394117ab,0x396f3696,0x397a0e00,0x39a1b8bb,0x3912c1ba,0x38acbb36,0x3905e08d,0x397bc1e5,0x3943a696,0x3971ba66,0x3a279776,0x3a830cf6,0x3a9f6902,0x3a9603bc,0x39d8058b,0x39b1b658,0x3a57e4a3,0x398f9876,0x3922e02c,0x39566e86,0x3a001a62,0x3a3d5752,0x3a6cde39, +0x39e6262e,0x39fdb43c,0x39133b25,0x3881c08b,0x3883a788,0x3a0a6ccd,0x392dba10,0x39c82cae,0x39fd556d,0x3a22b5ad,0x3a412eb4,0x39ac60ff,0x3916a90d,0x392cf3cb,0x3934903f,0x39537f32,0x3993f9db,0x397309b9,0x38c199b5,0x398be2ac,0x39eda4b8,0x39fcfb77,0x3a1fb778,0x3aabd253,0x3afc032e, +0x3b07c337,0x3af705fc,0x3a5b67fd,0x39757787,0x3a20fa24,0x3976fad7,0x39405f22,0x391cd7a9,0x3a13c5f2,0x3a424480,0x3a8031d8,0x3a157c8c,0x3b5e81e3,0x3b03e7a1,0x3ae340de,0x3a841b32,0x3a10cf71,0x3a9515f8,0x3aa706ef,0x3a9bca28,0x3a338948,0x386fb432,0x37b6a1cc,0x39e84ae9,0x399e350a, +0x39a7f905,0x3986ff81,0x3a0921c7,0x3a9eb9e1,0x3aa63f06,0x3afd48b9,0x3b20c075,0x3b4682eb,0x3b0a89c5,0x3b1de19c,0x3b31e030,0x3b13e7fb,0x3b8fd445,0x3b2a6fa1,0x3b29c0b5,0x3b62e324,0x3aabd199,0x39e873c4,0x3a46520f,0x3a6154d7,0x3adc22e1,0x3b3ff203,0x3b7d2278,0x3a43c563,0x3aebf189, +0x3b4eb54c,0x3ab0a38d,0x3ade2ba7,0x3b1aebd0,0x3b1b346e,0x3a011fbe,0x395d7324,0x3823e0d0,0x38de39be,0x391a65ba,0x38d2f15c,0x38c94ff5,0x37b00937,0x381b275a,0x38a993ae,0x38e37742,0x393cd463,0x3a0a630a,0x39ab28a2,0x3a1b3b4c,0x3a27a691,0x3a90de42,0x3a87214a,0x3b1759e2,0x3b197834, +0x3ac452af,0x3b50e5ba,0x39f80073,0x3a23a58d,0x3a9cf5b3,0x3b5f3769,0x3b76ab0a,0x3b29d3c5,0x3a59865d,0x3b20984b,0x3c1b64a1,0x3b95d4c9,0x3aaf27f5,0x3a6658fa,0x3a02ad92,0x3a439f5e,0x394cae76,0x37986782,0x370e317a,0x35c86d0a,0x373bb01c,0x379ad329,0x38b76489,0x3889142b,0x38052f15, +0x38a432a0,0x386d792a,0x38fddf13,0x38dc2661,0x3840a7b8,0x388da05f,0x38d7e8a7,0x38ec805e,0x39366ad9,0x39a33faa,0x3944c2a9,0x3955d8c2,0x39b7b2cb,0x3a5633c7,0x3a806136,0x3a9139f9,0x3a08ded9,0x3a54c0e0,0x3afadbb6,0x3a8a4ca1,0x3a88975c,0x3bc63fc8,0x3b1da800,0x3a91ab1b,0x3a94d3a4, +0x38c3d33a,0x388598c0,0x395ebb22,0x38d2851a,0x383365cf,0x353e3ca2,0x369ecc40,0x360f89ed,0x38632602,0x37ba70ef,0x37fd97b3,0x373ee886,0x381743b0,0x38a3aea3,0x38e14386,0x372cb22f,0x382a63a0,0x38c7f798,0x39994ffa,0x399d29c8,0x3a3bf0e9,0x39d1ac47,0x397fd6dd,0x3ab54fb4,0x3ad200c5, +0x3b002960,0x3b446a05,0x3ab5d010,0x3ae6fd20,0x3b13d8f2,0x3a12890e,0x3b650dda,0x3c446e3a,0x3bb3e8da,0x3b741b42,0x3ae84ca7,0x392073ec,0x393064c9,0x395c998d,0x383a4f10,0x372eabee,0x374a1447,0x378bacda,0x3681fc0b,0x37ada0fd,0x366d3439,0x3842036b,0x3994e3e9,0x3985c6ca,0x39ae5bc7, +0x39cbab2e,0x398d7ed6,0x399642a6,0x39ac2cfc,0x39e47814,0x3a2e9048,0x3a583e54,0x3a2ca83c,0x39a52052,0x3a626fdb,0x3a5cd3d0,0x3a4a5b50,0x3ac64193,0x3aa41ccc,0x3b071ab6,0x3ad30a7f,0x3abc73b0,0x3b200f51,0x3b798c84,0x3b6da2d2,0x3b31c498,0x39a754e9,0x38ba0c77,0x37e325af,0x3857b4a9, +0x37f1fe04,0x3890dbec,0x381254bf,0x38576c31,0x37423565,0x373eddfb,0x38cb5db5,0x3982a95a,0x39fdfd61,0x3a43fff3,0x3a549f7f,0x3a429192,0x3a03d838,0x39bd6ccb,0x39347592,0x38e0db18,0x39896657,0x3a10a7de,0x3a789d25,0x3aaf731e,0x3b018b72,0x3b08d51f,0x3aab936b,0x3a4c3f9f,0x3a2de0ab, +0x3967a2d4,0x3a24bd27,0x3ac17bb6,0x3a6846e8,0x3a83bd22,0x3a60e8ef,0x3a288d59,0x3a372771,0x3a08f6e0,0x39fb85e6,0x39c544ae,0x39b30439,0x3989a3fd,0x3905873c,0x38f5940a,0x388048a9,0x38a55cca,0x38dbccfd,0x38f970bf,0x3908a9a9,0x39591069,0x39837c93,0x39520200,0x38c83e03,0x3823b11c, +0x38253877,0x3924330d,0x39aff4c3,0x3a1993b2,0x3a435c52,0x3a525321,0x3a405b0d,0x3a523775,0x3a5a3d73,0x3a82e13b,0x3a3ebd5d,0x3a28cfe1,0x3a2d8364,0x3a4ad5f6,0x39190f0c,0x39628049,0x38ead486,0x38cc3fba,0x395edb90,0x3978fddf,0x397e0e19,0x394fc51a,0x3935ca6e,0x392b0e58,0x390d08be, +0x38ff3382,0x39042729,0x397216a1,0x3958d13f,0x3965065a,0x39839bc2,0x39672618,0x395ab806,0x3942d954,0x38eec939,0x388eea8f,0x38814876,0x37b46c04,0x3821099f,0x38d412bc,0x39504051,0x39bd0f48,0x3a19eec3,0x39f180e7,0x39b46d7d,0x39c2033c,0x3990d82b,0x39868dec,0x3980a4fb,0x39290b06, +0x39baa743,0x39d09f1f,0x39f3e6d2,0x3a05d880,0x3a1cbcbe,0x39ffe28e,0x39cfb9b8,0x39bde5ac,0x39cad88b,0x39ae7ef2,0x39e815db,0x399057dd,0x39a63827,0x39a1d4d6,0x397cf174,0x397d613d,0x3995887f,0x3975e7b7,0x39567b7e,0x395300c0,0x39487615,0x392d887a,0x392b8761,0x391cbd07,0x39238ff0, +0x39259302,0x38b5c5ce,0x38982266,0x38b43d7a,0x38a3af0c,0x38dca73c,0x390f8bce,0x393027f2,0x3964dfa9,0x397d1428,0x3992a4ef,0x39d1cde3,0x39e5368e,0x3a08cd7c,0x3a03356a,0x39f0a664,0x3a169342,0x3a1c89d9,0x3a3fd55c,0x3a15e8bd,0x3a01598a,0x39f03ee1,0x39f50552,0x39e536b5,0x39ffbd51, +0x39d95fbf,0x39b41e1c,0x39acc1b8,0x39a1ba35,0x39a7c040,0x39a5c520,0x3986897a,0x3981cab9,0x395d50a4,0x394b34ba,0x39219cc3,0x38f481fe,0x3922f283,0x39066a80,0x390f20cc,0x3927c976,0x3916a961,0x3937c751,0x3944ebf6,0x395672c8,0x39945c00,0x39be0f80,0x38df6836,0x38f1ecdc,0x390160b6, +0x390fb498,0x39198961,0x391de05b,0x39124c95,0x3924bd9f,0x392d5f78,0x393effe1,0x39425709,0x3943b8d3,0x3944dae1,0x3945bd33,0x393074fa,0x39394416,0x393f7fcb,0x3936a240,0x393370e4,0x393c9597,0x3931d4aa,0x39325033,0x392d1c86,0x3930879b,0x392e9273,0x3921c404,0x392638db,0x39165a25, +0x391b349d,0x391834e1,0x39085dbf,0x3908702a,0x390534e0,0x38ef3c0c,0x38f0758c,0x38e39755,0x39dc6f5f, +}; +const uint32_t orange53_rom_ITD_W[658] = { +0xba773024,0xbc7b8866,0xbf03adc8,0xbe273b5f,0x3dc62328,0x3f0d837b,0xbf4f06f5,0xbed27096,0x392f4622,0x3e5106bb,0xbe265e5d,0xbf24a800,0xbf46a4af,0xbdf86b3a,0xbe495158,0xbf2f31d2,0xbf65ebc3,0x3f07e433,0xbd690db8,0xba960f32,0xbee02a44,0x3b597acc,0x3dc6147f,0x3d00041a,0x3eaac519, +0xbf1362c4,0x3f90caa3,0x3f1f1187,0x3e3a9742,0x3e514cd4,0x3f3fe488,0x3f1f6edb,0x3de2aacf,0xbe8763c5,0x3e0342b4,0x3e5f476c,0x3f537a85,0xbf130440,0xbe20a8c3,0x3ecb279f,0x3e9e5e29,0x3c9a935b,0x3d0a5363,0x3e967285,0x3f8d977a,0xbf0e8537,0xbf3e2882,0xbffe7b8a,0xc0294691,0xc0446af1, +0xc0640893,0xc01e023a,0xbfea7d2f,0xbfa16fcf,0xc027f3eb,0xc04aee78,0xbfa004bb,0xbfff48d6,0xbef33219,0xbe7f4581,0x3f4a6c27,0x3ed36eac,0xbc8519b8,0xbef62d3a,0xbeef37eb,0xbe7913f3,0x3eceb345,0x3f9dce92,0x401d7eb3,0x40250b36,0x402ea009,0x3facb174,0x3fee03bb,0x401c24da,0x407a1364, +0x40419dda,0x401ec47b,0x3ff24165,0x3f82eb79,0x3e103373,0xbf919126,0xbf452650,0x3c8b3180,0xbe0475b0,0x3dea73d7,0xbfc2daad,0xc03db31b,0xc06be3fd,0xc0a4ae22,0xc0b9344b,0xc10535ef,0xc0eb92e2,0xc119050f,0xc11a705b,0xc1309b17,0xc10c9487,0xc10607bb,0xc0e135f0,0xc0b4d8ba,0xc099e16c, +0xc0303310,0xc00f34c1,0x3e4da1aa,0xbb17a107,0xbebc1730,0x3fc5180f,0x404435fa,0x409ff48d,0x40afcb6b,0x40ddc3cb,0x410d7d37,0x410b43eb,0x4130af48,0x411c922f,0x41143b76,0x40f36c18,0x410182e2,0x40ca8e60,0x40a1022c,0x40642b0f,0x40513c86,0x3fa64891,0x3ec91dbf,0x3cd39f0e,0x3e93293e, +0x3d9392bf,0xbf168e96,0xc024a359,0xc0b21cae,0xc0eeb041,0xc121ef93,0xc13d2d84,0xc15c86da,0xc15a31a3,0xc15a4902,0xc14c3311,0xc142297d,0xc15397d4,0xc11c122b,0xc0fe084c,0xc0c5b2ee,0xc003667f,0xbf8d875c,0x3f00f59c,0x3d6f470c,0x3c8959b2,0x3fad965e,0x4037550f,0x409be148,0x410966f0, +0x4118d941,0x414d964b,0x413abc0d,0x41450fd3,0x4156cbd3,0x41676aff,0x41504d5e,0x41446e48,0x411ae998,0x40f95071,0x40b2edd5,0x402178f3,0x3f12936a,0xbf19b0d0,0xbef828f8,0x3f724c7a,0xbfa9c7fc,0xc03cea15,0xc0e03abd,0xc10d8699,0xc14309b0,0xc165d4f6,0xc189b6fe,0xc1957256,0xc1a2127c, +0xc1c5feee,0xc1bf8239,0xc1b28a2c,0xc1805445,0xc1824740,0xc14979f5,0xc1228791,0xc0f08d71,0xc0473a0c,0xbf543e84,0xbe11d561,0x3f58e5e3,0x3ffedc54,0x40e2770d,0x4120716e,0x414df63f,0x417e3fa5,0x418c510e,0x41aed3d9,0x41be4871,0x41c2a473,0x41a73c94,0x41996bbe,0x41892f80,0x41683d7f, +0x41455161,0x410bcf82,0x40d79d07,0x40723948,0x3fa73536,0xbee70b3b,0xbe7571a6,0xbf8e3c7e,0xc03d1702,0xc0b3ad28,0xc10ec650,0xc1391973,0xc173d57c,0xc187983a,0xc19bcda3,0xc1ad02ed,0xc1c4249b,0xc1bead30,0xc1b88209,0xc19515e4,0xc182825e,0xc154e9a0,0xc117f257,0xc0ca7fca,0xc04aedf8, +0xbe9b11d8,0x3ddc5f31,0x3f56f576,0x4042ed65,0x40d86a5d,0x411990d2,0x41571542,0x417c0be2,0x41926180,0x41bb2918,0x41c46d8c,0x41c646ee,0x41a89fc9,0x41985b03,0x41873bde,0x4172c615,0x413d5595,0x41053fb3,0x40c7d17d,0x402809ae,0x3ead4cea,0xbeb3e426,0x3e3a0778,0x3f1b42ee,0xc05872c1, +0xc0ee83f3,0xc12a7df9,0xc16d4185,0xc1916b58,0xc1a299af,0xc1bd98d4,0xc1cbf478,0xc1e9c9bf,0xc1dd5624,0xc1ca1682,0xc19c883c,0xc1914093,0xc1740a03,0xc13f2033,0xc0f4a8ce,0xc072c2d2,0xbd8c3f76,0xbe059be3,0x3e77d68b,0x405bc120,0x40ed91ab,0x413db33c,0x41709d8a,0x4193b753,0x419e29fe, +0x41c33b3f,0x41d77398,0x41eb6aeb,0x41cebbe0,0x41bed916,0x41a8f1e5,0x418d70e2,0x41685a4c,0x41331a85,0x40e1dee4,0x406bbe5d,0x3f7939f1,0xbed872f1,0x3d0a46c4,0xbf396d9a,0xc0884d49,0xc0e2cf6f,0xc13c8de3,0xc178ff3d,0xc19a5f74,0xc1ac7470,0xc1ca6f0d,0xc1e40d54,0xc202a43d,0xc1f43865, +0xc1dbce52,0xc1a7dbbb,0xc19b2f4f,0xc17e3a9e,0xc142f9f2,0xc0eafb6d,0xc0567878,0xbf6b67ed,0xbd9be67d,0x3f78357d,0x405c1bff,0x40eabcd7,0x413c171e,0x4181cd27,0x41999ef0,0x41aa3fa8,0x41db13a8,0x41f85c6d,0x42039827,0x41e2e2da,0x41ca4dc7,0x41acc42a,0x419b89b5,0x417c2629,0x413bdbf7, +0x40d80862,0x4072122f,0x3e0be2ef,0xbc275e94,0xbd1ae5ef,0xbf05b304,0xc02e6f82,0xc0f7bbe3,0xc132b8cc,0xc1725315,0xc197146a,0xc1b08adb,0xc1d1990e,0xc1f13a3f,0xc206eb83,0xc1f7604b,0xc1dbd4f2,0xc1b018e9,0xc1a3d176,0xc1810daf,0xc14a9681,0xc0e6c6c7,0xc04a51bf,0xbee9fe81,0x3e8b7b27, +0x3cd2855d,0x40603b12,0x40e0363a,0x414c1d0c,0x417ed80b,0x41a68b50,0x41a89816,0x41e1344a,0x41f38e1b,0x42063404,0x41f0ef25,0x41cf5472,0x41aef960,0x4194868d,0x417c2b29,0x41322920,0x40f5f841,0x4045ac10,0x3f1e7ada,0xbf20dceb,0x3e712177,0xbf45d5d3,0xc05bffc9,0xc0c929a9,0xc12a06dd, +0xc1663b47,0xc192bca2,0xc1a19c5c,0xc1c8e7df,0xc1d90128,0xc2009f8b,0xc1dc3638,0xc1cac954,0xc1aee238,0xc19aafb9,0xc17bcc6e,0xc13959e0,0xc0eb45e7,0xc03cd9ad,0xbf4a1ee6,0xbe98ebcf,0x3f514073,0x403d3178,0x40f27301,0x4136a40a,0x417a6d67,0x419a482c,0x41aff533,0x41ca538d,0x41df09d3, +0x42003e57,0x41d8cae2,0x41c74507,0x41a80033,0x41912aee,0x4167bf2e,0x411f5fec,0x40d44ce0,0x402bc493,0x3f7e63b2,0x3e0951b2,0x3e1b5bbd,0xbe18339b,0xc028161d,0xc0c5cc29,0xc11c8dab,0xc14bae07,0xc18476ef,0xc1a612e9,0xc1b48609,0xc1cdbf88,0xc1d10346,0xc1cef08c,0xc1b840e0,0xc1a5cfb8, +0xc18cbb4e,0xc15dc9f8,0xc1282c54,0xc0b533ab,0xc025997c,0xbeb2a659,0x3ee1452a,0x3f89cc24,0x40018f80,0x40ac0243,0x4128fa87,0x415be5b7,0x418e8314,0x419e0237,0x41b91f90,0x41cbc585,0x41d24e3d,0x41ca41a6,0x41b889df,0x419efb53,0x4189e639,0x414174c1,0x4123d2b8,0x40b95046,0x405f6297, +0x3dd26065,0xbf19f30d,0x3d4ef167,0xbf2d8a6a,0xbffa18b2,0xc099bc57,0xc1000610,0xc133650f,0xc1651b0f,0xc17fcfe6,0xc1961fb0,0xc194e374,0xc1abedfa,0xc19a7591,0xc197a8d1,0xc1847d70,0xc163fe03,0xc135d908,0xc1080043,0xc094b4a5,0xbfa31b69,0xbbd2ccdf,0xbe56f8aa,0xbf2b2a34,0x3fd25fe2, +0x40a27dbf,0x41008f3d,0x413a2152,0x4165e8a2,0x4182118b,0x419ac58c,0x419def34,0x41a77da9,0x41997504,0x4192b326,0x4184b2a6,0x415cc9ba,0x413ae700,0x410034f9,0x40a92bea,0x3fc40c9b,0x3ea2bda3,0xbb25403d,0x3e266746,0x3f1ac502,0xc01d10da,0xc061625d,0xc0c41f5c,0xc1090843,0xc12466f3, +0xc1488258,0xc15660cd,0xc16e21f9,0xc174346e,0xc1715281,0xc156fe4f,0xc1526913,0xc12d9852,0xc106926d,0xc0c8efb1,0xc059c07a,0xc0117b9b,0x3e7bc677,0x3e305db4,0x3f011454,0x3fc16886,0x4052c76b,0x40d6bdfa,0x4103e547,0x412cf18b,0x414de6e5,0x4152e2b9,0x41660891,0x417a5ef4,0x41672ffb, +0x4157fb01,0x413f87e4,0x412a55c5,0x40fbd24e,0x40bcb9fa,0x404e4c2c,0x3ff4e981,0x3d3ddcdc,0xbed42c82,0xbd9f9f46,0x3dd2b685,0xbf538bc0,0xc015ac3f,0xc054b83d,0xc08a99b3,0xc0ba8710,0xc0fdc791,0xc0f715d7,0xc10bc105,0xc10c7266,0xc116f430,0xc10104cc,0xc10bf16c,0xc0c3f1e6,0xc0b49fa4, +0xc08a023d,0xc03364ce,0xbf821081,0x3e447398,0xbde79a51,0xbf077b66,0x3fed1a48,0x401b9b73,0x408e5126,0x40acead5,0x40cf077d,0x410b0333,0x41046095,0x411d2e30,0x410a6714,0x41123f7a,0x40f1c252,0x41023e20,0x40c2aa21,0x409174cd,0x40702a72,0x401fc634,0x3f5c17ee,0xbe40bd56,0xbc32a4d4, +0x3d68bdf9,0xbd8d516d,0x3f459735,0xbf9c2656,0xbfe68d3e,0xc0130791,0xc0555012,0xc03fc8a0,0xc0715308,0xc0311b01,0xc02a0cb4,0xc01fe8a1,0xc04e3724,0xc042e009,0xc026b4b9,0xbfe7863a,0xbf0cf592,0xbf45a4aa,0x3f512e27,0x3e8cd1df,0x3ceee54d,0xbd944155,0xbf399b37,0x3f0bd5ad,0x3f668ba5, +0x3ff7beaf,0x401e01a9,0x40337b2f,0x4039dc80,0x401b3c64,0x40292f00,0x402e96cd,0x4076f197,0x4028ce75,0x40319657,0x40074345,0x3f068279,0x3fb40d93,0xbf3d4c01,0xbe51e53f,0x3c53c481,0xbcf93022,0xbe8f47cb,0x3d9fecd3,0x3efb08dc,0x3f6ec2a3,0xbf17c776,0xbe5e3617,0x3d998dd2,0x3edef495, +0x3c882a94,0xbe3a3dfa,0xbe009052,0x3e354abd,0x3d5ea5b3,0xbf07c739,0xbf74752e,0x3f0ef7b6,0x3da8196c,0xbe4895ec,0xbdcb28c1,0xbb96b9ca,0x3ea4886d,0xbd99e869,0xbd938929,0xbf2a2e58,0x3f3a93dc,0x3ecc0e98,0x3e373e46,0x3d15762f,0x3e4be118,0x3e4ea28f,0xbdacaf0d,0xbe9b93a2,0x3e57ae73, +0x3ed6d5d3,0x3f19f1a4,0xbf1cf61a,0xbef1a63c,0xbdd51e31,0x3e864d8e,0xb93b94a5,0x3c3c26b9, + }; +const uint32_t orange53_rom_ITD_azimBsShape[84] = { +0x3f800000,0x3f3a9fbe,0x3f03126f,0x3eaf9db2,0x3e5d2f1b,0x3e000000,0x3d83126f,0x3cdd2f1b,0x3c03126f,0x3a83126f,0xa5800000,0x00000000,0x3e8374bc,0x3ede353f,0x3f0ad0e5,0x3f178d50,0x3f180000,0x3f0ed917,0x3efd9168,0x3ed4fdf4,0x3ea95810,0x3e800000,0x3e3a9fbe,0x3e03126f,0x3daf9db2, +0x3d5d2f1b,0x3d000000,0x3c83126f,0x3bdd2f1b,0x3b03126f,0x3983126f,0xa6000000,0x00000000,0x3c66bdc8,0x3d57b901,0x3de1cac1,0x3e39af72,0x3e855555,0x3eaf1aa0,0x3ed756b3,0x3efb38a9,0x3f0bf7cf,0x3f155555,0x3f18aec3,0x3f16872b,0x3f0fc3ed,0x3f054a69,0x3ef00000,0x3ed19423,0x3eb11bfd, +0x3e90624e,0x3e6263ab,0x3e2aaaab,0x3df8d4fe,0x3daec33e,0x3d6a2798,0x3d1374bc,0x3caaaaab,0x3c2ec33e,0x3b9374bc,0x3aaec33e,0x392ec33e,0xa6800000,0x00000000,0x392ec33e,0x3aaec33e,0x3b9374bc,0x3c2ec33e,0x3caaaaab,0x3d1374bc,0x3d6a2798,0x3daec33e,0x3df8d4fe,0x3e2aaaab,0x3e627984, +0x3e90b9af,0x3eb242e7,0x3ed44f30,0x3ef55555,0x3f09e60f,0x3f17152a,0x3f21735f,0x3f283c13,0x3f2aaaab, +}; +const float orange53_rom_ITD_azimKSeq[19] = { + 0.000000f, 10.000000f, 20.000000f, 30.000000f, 40.000000f, 50.000000f, 60.000000f, 70.000000f, 80.000000f, 90.000000f, 100.000000f, 110.000000f, 120.000000f, 130.000000f, 140.000000f, 150.000000f, 160.000000f, 170.000000f, 180.000000f, +}; +const uint32_t orange53_rom_ITD_elevBsShape[28] = { +0x3f800000,0x3e97b426,0x3d17b426,0x00000000,0x00000000,0x3f1097b4,0x3f04bda1,0x3e800000,0x3d97b426,0x3c17b426,0x00000000,0x00000000,0x3e07e6b7,0x3eca4588,0x3f155555,0x3f0ca458,0x3ebc0ca4,0x3e2aaaab,0x3d4a4588,0x3bca4588,0x00000000,0x00000000,0x3bca4588,0x3d4a4588,0x3e2aaaab, +0x3ebda12f,0x3f12f685,0x3f2aaaab, +}; + +/* clang-format on */ diff --git a/lib_dec/ivas_rom_TdBinauralRenderer.h b/lib_dec/ivas_rom_TdBinauralRenderer.h new file mode 100644 index 0000000000..7aeff4f0ff --- /dev/null +++ b/lib_dec/ivas_rom_TdBinauralRenderer.h @@ -0,0 +1,69 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" + +/*------------------------------------------------------------------------- + * TD Binaural rendering related ROM tables + *------------------------------------------------------------------------*/ +/* TD renderer HRTF default model Orange53 */ +extern const int16_t orange53_rom_azimDim2[18]; +extern const int16_t orange53_rom_azimDim3[18]; +extern const int16_t orange53_rom_azim_start_idx[18]; +extern const int16_t orange53_rom_azimSegSamples[1]; +extern const int16_t orange53_rom_azimShapeIdx[18]; +extern const int16_t orange53_rom_azimShapeSampFactor[18]; +extern const float orange53_rom_elevKSeq[16]; +extern const uint32_t orange53_rom_AlphaL48[578 * 128]; +extern const uint32_t orange53_rom_AlphaR48[578 * 128]; +extern const uint32_t orange53_rom_AlphaL32[578 * 86]; +extern const uint32_t orange53_rom_AlphaR32[578 * 86]; +extern const uint32_t orange53_rom_AlphaL16[578 * 43]; +extern const uint32_t orange53_rom_AlphaR16[578 * 43]; +extern const uint32_t orange53_rom_EL48[HRTF_MODEL_N_SECTIONS * 578]; +extern const uint32_t orange53_rom_ER48[HRTF_MODEL_N_SECTIONS * 578]; +extern const uint32_t orange53_rom_EL32[HRTF_MODEL_N_SECTIONS * 578]; +extern const uint32_t orange53_rom_ER32[HRTF_MODEL_N_SECTIONS * 578]; +extern const uint32_t orange53_rom_EL16[HRTF_MODEL_N_SECTIONS * 578]; +extern const uint32_t orange53_rom_ER16[HRTF_MODEL_N_SECTIONS * 578]; +extern const uint32_t orange53_rom_elevBsShape[28]; +extern const uint32_t orange53_rom_azimBsShape[21]; +extern const uint32_t orange53_rom_ITD_W[658]; +extern const uint32_t orange53_rom_ITD_azimBsShape[84]; +extern const float orange53_rom_ITD_azimKSeq[19]; +extern const uint32_t orange53_rom_ITD_elevBsShape[28]; diff --git a/lib_dec/ivas_rom_binauralRenderer.c b/lib_dec/ivas_rom_binauralRenderer.c new file mode 100644 index 0000000000..28c8856012 --- /dev/null +++ b/lib_dec/ivas_rom_binauralRenderer.c @@ -0,0 +1,44077 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include "wmops.h" + +/* clang-format off */ + +/*------------------------------------------------------------------------- + * Binaural rendering related ROM tables + *------------------------------------------------------------------------*/ + +/* Binaural rendering data set based on HRIRs */ +/* Tables generated by the script at "scripts/binauralRenderer_interface/run_generate_IVAS_tables.m */ +/* Can be replaced by your own generated HRIR tables */ +/* + * Generated with Matlab version 9.3.0.713579 (R2017b) by MUXE6256 +*/ +const float FASTCONV_HOA3_latency_s = 0.001979167f; +const float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][16][7]= +{ + { + {-0.004181f, +0.093228f, +0.655506f, +0.048565f, -0.005834f, -0.005472f, -0.000066f}, + {+0.005374f, +0.154923f, -0.116326f, -0.006786f, +0.018305f, +0.006415f, +0.000041f}, + {-0.018684f, -0.029658f, +0.105423f, -0.036469f, +0.025356f, +0.038274f, +0.001267f}, + {-0.008871f, +0.005481f, +0.057893f, -0.019694f, -0.003264f, +0.024498f, +0.000905f}, + {-0.007135f, +0.000238f, -0.011224f, +0.011879f, -0.000153f, +0.021305f, +0.001042f}, + {-0.011073f, -0.016271f, -0.017319f, +0.023598f, +0.000936f, +0.014578f, +0.000910f}, + {-0.015550f, -0.028470f, -0.026848f, +0.035803f, -0.009496f, +0.011103f, +0.001177f}, + {-0.015302f, -0.004218f, +0.013086f, +0.011363f, -0.012451f, +0.030157f, +0.000806f}, + {+0.006118f, -0.009705f, +0.007305f, -0.026069f, -0.010633f, +0.007816f, +0.000054f}, + {-0.000283f, -0.011328f, +0.005244f, +0.003740f, -0.001375f, +0.008133f, +0.000147f}, + {-0.007055f, +0.006562f, -0.019723f, -0.006761f, +0.003557f, +0.002004f, +0.000575f}, + {-0.005753f, -0.006934f, +0.005584f, +0.015274f, +0.002805f, -0.023709f, -0.000371f}, + {+0.001950f, +0.010016f, +0.006074f, +0.008742f, +0.013106f, -0.015378f, -0.000623f}, + {+0.004074f, -0.005302f, -0.028657f, +0.012447f, +0.002805f, -0.010937f, -0.000426f}, + {-0.004197f, -0.012821f, +0.003244f, +0.002529f, +0.002057f, +0.017829f, +0.000124f}, + {-0.000963f, -0.001662f, +0.000380f, -0.001216f, -0.003218f, +0.008842f, +0.000285f} + }, + { + {+0.003556f, -0.239019f, +0.015814f, -0.034927f, +0.000835f, -0.000512f, +0.000096f}, + {-0.005835f, -0.204261f, -0.475712f, +0.024759f, -0.018679f, -0.011234f, +0.000105f}, + {+0.033721f, +0.079282f, +0.110406f, -0.062743f, -0.006587f, -0.011131f, -0.001989f}, + {+0.017838f, +0.044971f, +0.009827f, -0.031696f, +0.008260f, +0.013480f, -0.001373f}, + {+0.013831f, +0.024735f, -0.028944f, -0.000956f, -0.011000f, -0.001960f, -0.001544f}, + {+0.021084f, +0.059877f, +0.043110f, +0.024830f, -0.009611f, -0.004985f, -0.001304f}, + {+0.024367f, +0.081687f, +0.039981f, +0.014737f, -0.015175f, -0.013033f, -0.001675f}, + {+0.029191f, +0.107182f, +0.052422f, -0.056640f, -0.061598f, -0.000773f, -0.001122f}, + {-0.008281f, -0.074836f, -0.054378f, -0.012477f, +0.014774f, +0.013960f, -0.000068f}, + {-0.000247f, -0.007528f, -0.001935f, -0.000487f, -0.009084f, -0.000991f, -0.000245f}, + {+0.009984f, +0.059593f, +0.036553f, -0.008280f, -0.016629f, -0.010745f, -0.000707f}, + {+0.008513f, +0.061561f, +0.054083f, +0.023396f, +0.007761f, -0.009113f, +0.000565f}, + {-0.007663f, -0.005870f, -0.005063f, +0.019587f, +0.022546f, -0.002888f, +0.000939f}, + {-0.008532f, -0.051613f, -0.057984f, +0.002035f, +0.015445f, +0.003259f, +0.000501f}, + {+0.007851f, +0.011553f, +0.020470f, -0.020649f, -0.005084f, +0.010733f, -0.000320f}, + {+0.000570f, -0.000978f, +0.021905f, -0.003402f, -0.018285f, -0.001482f, -0.000408f} + }, + { + {+0.007736f, +0.144660f, -0.537748f, -0.004930f, +0.008226f, +0.004392f, +0.000030f}, + {-0.007349f, -0.151725f, -0.515888f, -0.001929f, -0.062669f, +0.004955f, -0.000372f}, + {-0.012179f, +0.171781f, +0.054918f, -0.071555f, +0.033201f, -0.047777f, +0.000031f}, + {-0.008553f, +0.124306f, +0.013829f, -0.071708f, +0.089422f, -0.036145f, -0.000142f}, + {-0.007018f, +0.059230f, +0.004335f, -0.031204f, +0.019769f, -0.032580f, -0.000209f}, + {-0.008972f, +0.099683f, +0.129678f, -0.054026f, +0.027007f, -0.029783f, -0.000267f}, + {+0.002210f, +0.110557f, +0.095413f, -0.048633f, +0.007172f, -0.025076f, -0.000359f}, + {-0.012999f, +0.162940f, +0.053582f, -0.061108f, -0.031308f, -0.032573f, -0.000315f}, + {-0.004442f, -0.087134f, -0.064380f, +0.020402f, +0.034501f, -0.007477f, +0.000025f}, + {+0.001523f, -0.000248f, -0.027496f, -0.002745f, -0.003190f, -0.007474f, -0.000005f}, + {+0.002997f, +0.089888f, +0.060886f, -0.047296f, -0.022673f, -0.008361f, -0.000391f}, + {+0.000211f, +0.098294f, +0.051481f, -0.008578f, +0.001392f, +0.017489f, +0.000056f}, + {+0.012945f, -0.029045f, -0.019498f, +0.027318f, -0.017298f, +0.022221f, +0.000180f}, + {+0.007159f, -0.062500f, -0.089020f, +0.017716f, -0.003152f, +0.016636f, +0.000389f}, + {-0.001058f, +0.044275f, +0.008121f, -0.027659f, +0.015946f, -0.015722f, +0.000269f}, + {+0.003282f, -0.015996f, +0.030381f, -0.007292f, -0.006963f, -0.008990f, -0.000065f} + }, + { + {-0.011861f, +0.271405f, -0.278430f, +0.025016f, +0.011294f, +0.000635f, -0.000128f}, + {+0.015129f, +0.148744f, -0.117912f, +0.045648f, -0.027880f, +0.014786f, +0.000135f}, + {-0.014271f, +0.053035f, -0.051116f, -0.069585f, +0.052625f, -0.010128f, +0.001602f}, + {-0.010195f, +0.240862f, +0.281626f, -0.015036f, +0.064266f, -0.026405f, +0.001338f}, + {-0.003863f, +0.128285f, +0.125752f, -0.023611f, +0.014719f, -0.008956f, +0.001428f}, + {-0.009981f, +0.104866f, +0.151836f, -0.071803f, +0.037142f, +0.005583f, +0.001248f}, + {-0.029302f, +0.049151f, +0.034147f, -0.080526f, +0.015046f, +0.009918f, +0.001557f}, + {-0.011379f, +0.090502f, -0.003478f, +0.001737f, +0.015717f, -0.005394f, +0.001166f}, + {+0.013601f, +0.081238f, +0.096361f, +0.008808f, +0.002253f, -0.024062f, -0.000103f}, + {-0.000547f, -0.077561f, -0.091202f, +0.015743f, +0.015044f, -0.000452f, +0.000266f}, + {-0.012582f, +0.024498f, -0.001563f, -0.041900f, +0.007496f, +0.015197f, +0.000762f}, + {-0.005409f, +0.069704f, +0.026963f, -0.036542f, +0.004091f, +0.029327f, -0.000573f}, + {-0.010060f, -0.118980f, -0.120352f, +0.001785f, -0.011422f, +0.009820f, -0.001153f}, + {-0.004957f, -0.055368f, -0.084714f, +0.042237f, -0.021229f, -0.008488f, -0.000721f}, + {-0.010961f, +0.026557f, -0.029680f, -0.009625f, +0.016351f, -0.027210f, +0.000149f}, + {-0.006161f, -0.050026f, -0.020995f, -0.004188f, +0.012464f, -0.003841f, +0.000357f} + }, + { + {+0.002854f, -0.199862f, +0.377557f, -0.018029f, -0.002648f, +0.005351f, +0.000048f}, + {-0.007718f, -0.100789f, +0.353419f, -0.007116f, +0.012908f, -0.010862f, +0.000471f}, + {+0.016418f, -0.074324f, +0.003833f, -0.013084f, +0.006916f, +0.022053f, -0.000834f}, + {+0.018457f, +0.117034f, +0.337759f, +0.029601f, -0.001259f, +0.012091f, -0.000541f}, + {+0.007000f, +0.085907f, +0.156550f, -0.033776f, +0.004889f, +0.021889f, -0.000374f}, + {+0.014497f, +0.047168f, +0.105236f, -0.022554f, +0.019941f, +0.024780f, -0.000224f}, + {+0.024730f, +0.024042f, -0.072819f, -0.011540f, -0.016134f, +0.027606f, -0.000150f}, + {+0.015868f, +0.018542f, -0.002232f, +0.039669f, +0.009321f, -0.002315f, -0.000217f}, + {-0.004792f, +0.097726f, +0.134353f, +0.002292f, -0.015559f, -0.007981f, +0.000121f}, + {-0.002961f, -0.078193f, -0.059778f, +0.012020f, +0.013271f, -0.004082f, -0.000112f}, + {+0.006885f, -0.004914f, -0.032684f, -0.024347f, +0.018042f, +0.016734f, +0.000199f}, + {+0.001772f, +0.014925f, +0.028214f, +0.010154f, +0.016195f, +0.004179f, +0.000317f}, + {-0.000537f, -0.110532f, -0.155034f, +0.027494f, -0.005245f, -0.020700f, +0.000591f}, + {+0.004704f, -0.038699f, -0.105421f, +0.070185f, -0.026884f, -0.015695f, -0.000119f}, + {+0.014543f, +0.004277f, -0.088559f, +0.042679f, -0.013529f, -0.007812f, -0.000550f}, + {+0.004113f, -0.037861f, -0.063426f, +0.011996f, -0.002855f, +0.001383f, -0.000115f} + }, + { + {+0.004158f, -0.136179f, +0.471486f, -0.010746f, -0.010150f, -0.000039f, +0.000105f}, + {-0.001616f, -0.103469f, +0.340476f, -0.006395f, +0.017271f, -0.014891f, -0.000499f}, + {-0.002218f, -0.055483f, +0.106726f, +0.030050f, -0.003992f, +0.017802f, -0.000677f}, + {-0.007681f, -0.231402f, -0.096778f, +0.009445f, -0.019641f, +0.009330f, -0.000885f}, + {-0.001659f, -0.038468f, +0.007609f, -0.019464f, +0.012397f, +0.007017f, -0.001037f}, + {-0.002067f, -0.064781f, +0.005724f, -0.006298f, -0.000105f, -0.001293f, -0.000955f}, + {+0.001286f, -0.002826f, -0.003672f, +0.025100f, -0.037327f, +0.015360f, -0.001277f}, + {-0.001989f, -0.020649f, +0.009698f, +0.016654f, -0.003984f, +0.002810f, -0.000842f}, + {-0.009792f, +0.035452f, +0.055742f, -0.018125f, -0.011729f, +0.001735f, +0.000192f}, + {+0.005497f, +0.003715f, +0.049312f, +0.044502f, +0.013554f, -0.000042f, -0.000266f}, + {+0.002308f, +0.000052f, -0.001201f, -0.002945f, +0.024499f, +0.000321f, -0.000757f}, + {-0.000409f, +0.034789f, +0.019482f, +0.002158f, +0.017279f, -0.003930f, +0.000257f}, + {+0.008118f, -0.058308f, -0.099792f, +0.052127f, -0.003244f, -0.003237f, +0.000776f}, + {-0.002482f, +0.018540f, -0.016084f, +0.049919f, +0.004611f, +0.019604f, +0.000812f}, + {-0.004910f, -0.030265f, -0.065174f, +0.035390f, -0.020625f, +0.011275f, +0.000329f}, + {+0.000473f, -0.044402f, -0.047664f, +0.009816f, -0.009466f, +0.005943f, -0.000152f} + }, + { + {-0.000632f, +0.234949f, -0.076449f, +0.029353f, -0.003342f, -0.002513f, -0.000116f}, + {+0.001122f, +0.198229f, -0.135880f, +0.032523f, -0.008400f, -0.002254f, -0.000234f}, + {-0.006474f, +0.012441f, +0.072023f, +0.003003f, -0.002338f, +0.007281f, +0.000731f}, + {-0.007024f, +0.078955f, -0.546900f, +0.031895f, -0.010218f, -0.000083f, +0.000850f}, + {-0.003709f, +0.044602f, -0.152003f, +0.012636f, +0.008659f, -0.000295f, +0.000563f}, + {-0.010219f, -0.027454f, -0.010304f, -0.002910f, -0.025409f, -0.001683f, +0.000451f}, + {-0.018198f, -0.084105f, +0.144050f, -0.000789f, -0.020402f, -0.010649f, +0.000341f}, + {-0.005226f, -0.009181f, +0.017438f, -0.007286f, +0.000747f, +0.000053f, +0.000472f}, + {+0.008675f, -0.020476f, +0.010393f, -0.001184f, +0.001399f, +0.008992f, -0.000466f}, + {-0.004645f, +0.050041f, +0.039208f, +0.025486f, +0.009431f, +0.003611f, +0.000210f}, + {-0.002164f, -0.021185f, +0.049694f, -0.015111f, +0.035540f, -0.011784f, +0.000018f}, + {+0.004950f, +0.038538f, -0.003861f, +0.013197f, +0.010301f, -0.003601f, -0.000426f}, + {-0.006239f, +0.032304f, -0.110293f, +0.018466f, -0.018058f, +0.013502f, -0.001178f}, + {-0.004171f, -0.047776f, +0.083221f, -0.008780f, +0.051549f, +0.010771f, -0.000331f}, + {-0.004816f, -0.038669f, -0.009734f, -0.007649f, -0.014633f, +0.012471f, +0.000408f}, + {-0.001871f, -0.049422f, +0.001620f, -0.014704f, +0.001301f, +0.000266f, +0.000126f} + }, + { + {-0.002392f, -0.036192f, -0.479850f, -0.001486f, +0.001638f, -0.000479f, -0.000028f}, + {+0.001963f, +0.007857f, -0.431508f, +0.005280f, -0.011825f, +0.003300f, +0.000660f}, + {+0.006153f, -0.066414f, -0.082293f, -0.009897f, +0.005003f, +0.001877f, +0.000116f}, + {+0.005774f, +0.224617f, -0.413182f, +0.006791f, -0.006357f, +0.002392f, +0.000339f}, + {+0.002588f, +0.046307f, -0.160934f, +0.021941f, +0.006604f, -0.003152f, +0.000788f}, + {+0.007718f, +0.039716f, +0.042914f, +0.020400f, -0.026544f, -0.007395f, +0.000668f}, + {+0.014838f, -0.078097f, +0.062858f, -0.030152f, -0.017961f, -0.018307f, +0.001193f}, + {-0.004124f, +0.009420f, +0.007060f, -0.006513f, +0.002601f, +0.003839f, +0.000370f}, + {+0.006195f, -0.101198f, -0.077793f, +0.008266f, +0.024484f, +0.019361f, +0.000086f}, + {+0.001527f, +0.002318f, -0.042308f, -0.011672f, -0.015245f, +0.001589f, +0.000306f}, + {-0.001741f, -0.019739f, +0.044832f, -0.016814f, +0.028009f, -0.014184f, +0.000622f}, + {-0.004708f, -0.024409f, -0.050324f, -0.002679f, -0.001951f, -0.009320f, +0.000159f}, + {+0.000144f, +0.069626f, -0.066872f, +0.001826f, -0.017513f, +0.018588f, +0.000180f}, + {+0.009404f, -0.062001f, +0.038164f, -0.022621f, +0.029874f, -0.005701f, -0.000507f}, + {+0.002125f, +0.011473f, +0.018800f, -0.013683f, -0.013917f, +0.006977f, -0.000722f}, + {-0.000868f, -0.014504f, +0.051713f, +0.021653f, +0.012194f, -0.003663f, -0.000082f} + }, + { + {-0.002627f, -0.217647f, -0.199116f, -0.027874f, +0.001338f, -0.001188f, +0.000121f}, + {+0.001456f, -0.227592f, -0.064939f, -0.030479f, -0.008616f, +0.013142f, -0.000112f}, + {-0.005287f, +0.010510f, -0.168053f, -0.000744f, +0.011442f, -0.010874f, -0.000237f}, + {+0.008122f, -0.212557f, +0.200960f, -0.021301f, +0.000743f, +0.003911f, -0.000783f}, + {+0.003321f, -0.083216f, +0.024517f, +0.036704f, -0.003253f, +0.001363f, -0.000669f}, + {+0.004434f, +0.081515f, +0.013504f, +0.001836f, -0.012951f, -0.003306f, -0.000538f}, + {-0.002527f, +0.121402f, -0.181651f, -0.032907f, -0.017697f, +0.004190f, -0.000617f}, + {+0.011938f, -0.009047f, +0.016303f, -0.005344f, -0.002001f, +0.010309f, -0.000307f}, + {-0.011873f, -0.001538f, -0.140792f, +0.010836f, +0.011246f, +0.016002f, +0.000623f}, + {+0.001530f, -0.013180f, -0.072034f, +0.006709f, -0.010792f, +0.004928f, -0.000404f}, + {-0.000018f, -0.021675f, +0.020101f, +0.009023f, -0.002344f, +0.005474f, -0.000170f}, + {-0.002449f, -0.053967f, -0.045424f, +0.000129f, +0.003141f, -0.010272f, +0.000137f}, + {+0.002967f, -0.038307f, +0.054857f, -0.015668f, +0.009116f, -0.003669f, +0.000920f}, + {-0.006187f, +0.037813f, -0.066234f, +0.004495f, +0.007024f, -0.005535f, +0.000559f}, + {+0.005730f, -0.012869f, +0.023624f, +0.001785f, -0.001105f, -0.003414f, +0.000094f}, + {+0.002570f, +0.016715f, -0.004781f, +0.037235f, +0.005228f, +0.002059f, +0.000081f} + }, + { + {+0.005711f, +0.172046f, +0.340244f, -0.003381f, -0.013696f, -0.007435f, -0.000034f}, + {-0.005530f, +0.112515f, +0.499395f, +0.033784f, +0.003636f, +0.015967f, -0.000566f}, + {+0.004504f, +0.107042f, -0.080755f, -0.022698f, -0.020622f, -0.026444f, -0.000180f}, + {-0.012473f, -0.051897f, +0.566323f, +0.031770f, +0.025642f, +0.017873f, +0.000020f}, + {-0.006985f, +0.051564f, +0.236654f, +0.038126f, +0.000171f, +0.001417f, -0.000657f}, + {-0.009348f, -0.016850f, -0.063936f, -0.001037f, -0.006876f, +0.002280f, -0.000410f}, + {-0.005675f, +0.072635f, -0.278726f, -0.059144f, -0.054019f, -0.009162f, -0.001082f}, + {-0.004093f, -0.010670f, +0.111505f, +0.019792f, -0.002096f, +0.012057f, -0.000160f}, + {-0.000257f, +0.106978f, -0.092498f, -0.031885f, -0.036807f, -0.018315f, -0.000585f}, + {-0.002795f, +0.018562f, -0.027422f, +0.012047f, +0.000133f, +0.004062f, -0.000286f}, + {+0.002864f, -0.009258f, +0.044075f, +0.007042f, -0.021077f, +0.002832f, -0.000326f}, + {+0.003557f, +0.013247f, -0.028639f, -0.035330f, -0.018218f, -0.013147f, -0.000247f}, + {-0.002389f, -0.017115f, +0.090839f, -0.019457f, +0.001333f, -0.020188f, -0.000874f}, + {-0.002543f, +0.056049f, -0.050696f, +0.018136f, -0.005719f, -0.016853f, -0.000034f}, + {-0.004821f, -0.020905f, +0.048575f, +0.000031f, +0.002939f, +0.000094f, +0.000672f}, + {+0.000268f, -0.021535f, -0.056314f, +0.016343f, -0.007238f, -0.001215f, +0.000162f} + }, + { + {+0.000497f, +0.199631f, +0.320546f, -0.008423f, -0.016715f, +0.001536f, -0.000099f}, + {+0.002105f, +0.133643f, +0.457823f, +0.039593f, +0.015856f, -0.006780f, +0.000357f}, + {-0.000079f, +0.081396f, -0.030397f, -0.042814f, -0.032019f, -0.004736f, +0.000009f}, + {-0.000752f, +0.001209f, +0.419299f, +0.074040f, +0.032104f, -0.009226f, +0.000573f}, + {+0.003770f, -0.002457f, +0.265036f, +0.035182f, +0.011981f, -0.015263f, +0.000892f}, + {+0.001110f, -0.071616f, -0.034638f, -0.014567f, +0.006196f, -0.004125f, +0.000526f}, + {+0.004522f, -0.068226f, -0.124263f, -0.072379f, -0.044733f, -0.015592f, +0.001006f}, + {-0.006005f, -0.047558f, +0.167542f, +0.027263f, +0.003279f, -0.009908f, +0.000023f}, + {+0.011422f, +0.014023f, -0.007679f, -0.030936f, -0.025432f, -0.026138f, -0.000327f}, + {+0.001555f, -0.042000f, +0.046252f, +0.010681f, +0.012037f, -0.006048f, +0.000727f}, + {+0.000883f, -0.006033f, +0.055431f, -0.001632f, -0.010415f, -0.001443f, +0.000033f}, + {+0.005003f, +0.047366f, -0.077066f, -0.030162f, -0.026926f, +0.011349f, +0.000163f}, + {+0.000276f, +0.023815f, +0.032561f, -0.004664f, -0.004597f, -0.024338f, -0.000084f}, + {+0.006453f, -0.015468f, +0.033735f, +0.002725f, -0.008248f, -0.008173f, -0.000289f}, + {-0.002307f, -0.023691f, +0.044946f, -0.000352f, +0.013672f, -0.001764f, -0.000499f}, + {-0.004157f, -0.047861f, -0.015442f, -0.000019f, -0.001816f, +0.000663f, -0.000406f} + }, + { + {-0.005964f, -0.197350f, -0.225433f, -0.026481f, -0.003950f, +0.006853f, +0.000077f}, + {+0.003793f, -0.264745f, -0.176567f, -0.023196f, -0.000162f, -0.016113f, +0.000334f}, + {-0.004451f, -0.025566f, -0.133088f, -0.012077f, +0.001550f, +0.015523f, +0.000458f}, + {+0.013172f, -0.221258f, -0.036103f, -0.012790f, +0.008449f, -0.019034f, -0.000168f}, + {+0.002864f, -0.153297f, +0.028848f, -0.004146f, +0.011196f, -0.010167f, +0.000393f}, + {+0.007616f, -0.026433f, +0.011621f, +0.001408f, +0.021183f, -0.002104f, +0.000192f}, + {+0.003962f, -0.009740f, +0.082496f, -0.000654f, +0.011697f, +0.005240f, +0.000722f}, + {+0.001790f, -0.065846f, +0.058500f, -0.003294f, -0.001401f, -0.007149f, +0.000264f}, + {-0.005722f, -0.027626f, +0.065396f, +0.027714f, +0.014716f, -0.003255f, +0.000850f}, + {+0.000381f, -0.020278f, +0.070264f, -0.005215f, -0.005661f, -0.015546f, -0.000010f}, + {-0.005566f, -0.043439f, +0.014711f, +0.011508f, +0.008588f, +0.006241f, +0.000138f}, + {-0.008800f, +0.030897f, -0.031074f, -0.010268f, -0.015735f, +0.011437f, +0.000056f}, + {+0.001946f, -0.054037f, -0.040838f, +0.018449f, +0.011271f, -0.005778f, +0.000769f}, + {-0.001760f, -0.030833f, +0.057221f, +0.007865f, +0.005993f, +0.008404f, +0.000331f}, + {+0.003817f, -0.027235f, +0.000283f, -0.007034f, +0.008768f, -0.002842f, -0.000338f}, + {+0.003914f, -0.006906f, +0.031714f, +0.006856f, +0.002150f, +0.003874f, +0.000040f} + }, + { + {+0.001457f, -0.047583f, -0.495325f, +0.001826f, +0.001333f, +0.003088f, +0.000074f}, + {-0.003753f, +0.008510f, -0.563613f, -0.007615f, -0.008082f, -0.006661f, -0.000427f}, + {+0.004161f, -0.022990f, -0.173930f, +0.006816f, +0.008882f, +0.017712f, -0.000179f}, + {-0.008172f, +0.031420f, -0.316800f, -0.012601f, -0.003429f, -0.006815f, -0.000397f}, + {-0.004546f, -0.000876f, -0.169999f, +0.007495f, +0.004006f, +0.011955f, -0.001091f}, + {-0.004040f, +0.019746f, -0.006157f, +0.011071f, +0.015718f, +0.008190f, -0.000403f}, + {-0.009703f, -0.178427f, +0.280306f, +0.028912f, +0.024755f, +0.018971f, -0.001247f}, + {+0.006735f, +0.062902f, -0.130876f, +0.006194f, -0.003662f, -0.002192f, +0.000078f}, + {-0.005369f, -0.054533f, +0.087578f, +0.035337f, +0.013629f, +0.015368f, -0.000193f}, + {+0.000537f, +0.025648f, +0.007994f, -0.001582f, -0.009441f, -0.002933f, -0.000931f}, + {+0.001931f, -0.022911f, -0.052152f, +0.025436f, +0.010985f, +0.006549f, +0.000366f}, + {+0.001104f, -0.133408f, +0.138104f, -0.014911f, +0.009229f, +0.000823f, -0.000186f}, + {-0.001412f, -0.065891f, -0.013259f, +0.004650f, +0.004768f, +0.018314f, -0.000516f}, + {-0.003560f, -0.040100f, +0.045120f, +0.030156f, -0.004957f, +0.021757f, -0.000275f}, + {-0.000713f, -0.011150f, -0.037123f, +0.018480f, -0.010877f, +0.000661f, +0.000571f}, + {-0.000355f, -0.001036f, +0.026826f, +0.021528f, -0.011143f, +0.005414f, +0.000615f} + }, + { + {+0.004917f, +0.226272f, -0.106762f, +0.026044f, -0.000057f, +0.000232f, -0.000133f}, + {+0.000447f, +0.251546f, -0.187348f, +0.019737f, +0.000219f, +0.003742f, -0.000098f}, + {-0.002107f, +0.100586f, +0.032124f, +0.022602f, -0.003273f, +0.008593f, -0.000509f}, + {-0.004410f, +0.146512f, -0.140248f, +0.007418f, -0.004350f, +0.000903f, +0.000226f}, + {-0.001171f, +0.105409f, -0.055027f, +0.007343f, -0.000273f, +0.017251f, +0.000064f}, + {-0.005972f, +0.023304f, +0.000894f, +0.004305f, -0.000775f, +0.004195f, -0.000102f}, + {+0.002711f, -0.077236f, +0.298881f, -0.003126f, +0.015293f, +0.023057f, -0.000231f}, + {-0.000738f, +0.026778f, -0.124956f, +0.013307f, -0.012450f, -0.010200f, -0.000427f}, + {+0.003679f, -0.030698f, +0.031463f, +0.005909f, -0.005917f, +0.008406f, -0.000670f}, + {-0.004324f, +0.028582f, -0.008041f, -0.006647f, +0.008704f, +0.016778f, +0.000567f}, + {+0.005419f, +0.007352f, -0.027129f, +0.011548f, -0.007720f, -0.008818f, -0.000379f}, + {+0.004487f, -0.054705f, +0.207122f, -0.010876f, +0.032187f, +0.013415f, +0.000030f}, + {-0.003490f, +0.034227f, +0.105685f, +0.015759f, +0.020826f, +0.034768f, -0.000215f}, + {+0.001504f, -0.018606f, +0.027693f, +0.016091f, -0.012131f, +0.014826f, -0.000087f}, + {+0.002136f, +0.015991f, +0.009194f, +0.014987f, -0.023762f, -0.008680f, +0.000105f}, + {-0.001298f, -0.030927f, -0.014560f, +0.013518f, -0.037065f, -0.013374f, -0.000457f} + }, + { + {-0.002855f, -0.080709f, +0.404422f, -0.019653f, +0.001624f, -0.002008f, +0.000004f}, + {-0.000474f, -0.138747f, +0.415942f, -0.024357f, +0.006345f, +0.000660f, +0.000332f}, + {+0.002438f, -0.097479f, +0.316719f, -0.005955f, +0.000256f, -0.004044f, +0.000432f}, + {+0.005548f, -0.072168f, +0.145204f, -0.011399f, -0.004729f, +0.006525f, +0.000260f}, + {+0.006232f, -0.036539f, +0.144292f, -0.020222f, +0.000238f, +0.016212f, +0.001053f}, + {+0.006994f, -0.075916f, +0.070194f, +0.012274f, -0.008481f, +0.002291f, +0.000282f}, + {+0.010641f, +0.141691f, +0.043526f, -0.009240f, +0.002948f, +0.019010f, +0.001265f}, + {-0.012596f, -0.072872f, +0.041895f, +0.001937f, -0.005665f, -0.014239f, -0.000047f}, + {+0.005735f, +0.038590f, -0.066170f, +0.003100f, -0.006978f, +0.003386f, +0.000489f}, + {+0.005820f, -0.013019f, +0.027717f, -0.015063f, +0.006044f, +0.020772f, +0.000699f}, + {-0.005317f, -0.024744f, +0.062066f, +0.000569f, -0.004243f, -0.012342f, -0.000609f}, + {+0.000631f, +0.150800f, +0.012382f, -0.009252f, +0.019727f, +0.012303f, +0.000172f}, + {+0.006829f, +0.105930f, +0.072965f, -0.013344f, +0.017414f, +0.026031f, +0.000559f}, + {+0.003943f, +0.012054f, -0.015121f, +0.003687f, +0.000929f, +0.005727f, +0.000623f}, + {-0.005204f, -0.004393f, +0.064977f, +0.004963f, -0.007088f, -0.010326f, -0.000553f}, + {-0.000739f, -0.007033f, -0.060218f, +0.009762f, -0.013292f, -0.018375f, -0.000507f} + }, + { + {-0.002393f, -0.117302f, +0.356998f, -0.023770f, -0.001521f, -0.003691f, +0.000144f}, + {+0.001809f, -0.120704f, +0.409752f, -0.018770f, +0.014706f, +0.003961f, -0.000008f}, + {-0.001960f, -0.141491f, +0.287454f, -0.006342f, -0.006437f, -0.011911f, +0.000284f}, + {+0.002959f, -0.074011f, +0.157490f, +0.001773f, +0.013139f, +0.012386f, -0.000239f}, + {-0.002902f, -0.081203f, +0.112950f, -0.010741f, -0.003024f, -0.019425f, -0.000547f}, + {+0.002050f, -0.066194f, +0.104659f, +0.016714f, -0.002794f, -0.000866f, +0.000119f}, + {-0.011528f, +0.008225f, -0.112939f, -0.015539f, -0.025693f, -0.040924f, -0.000274f}, + {+0.010410f, +0.025230f, +0.102311f, +0.004806f, +0.021267f, +0.023087f, +0.000575f}, + {-0.005473f, -0.011072f, -0.060495f, +0.003663f, -0.005569f, -0.002042f, +0.000316f}, + {-0.001924f, -0.052236f, +0.013653f, -0.000203f, +0.004939f, -0.011491f, -0.000985f}, + {-0.001647f, +0.011326f, +0.097267f, -0.004425f, +0.014111f, +0.016627f, +0.000941f}, + {-0.003668f, +0.062846f, -0.128135f, -0.003669f, -0.008089f, -0.027424f, -0.000024f}, + {-0.001119f, +0.011806f, -0.046422f, -0.026434f, -0.024751f, -0.030626f, -0.000245f}, + {-0.002447f, -0.008624f, -0.064037f, -0.015087f, -0.020497f, -0.036444f, -0.000501f}, + {+0.000478f, +0.008448f, +0.050137f, +0.002484f, +0.018473f, +0.019501f, +0.000029f}, + {+0.002749f, +0.018668f, -0.022800f, +0.004117f, +0.006094f, +0.020072f, +0.000831f} + }, + { + {+0.001300f, +0.203261f, -0.169783f, +0.024359f, -0.005336f, -0.001691f, -0.000112f}, + {+0.000442f, +0.283920f, -0.228721f, +0.050599f, +0.011296f, +0.008092f, -0.000207f}, + {-0.002414f, +0.094299f, -0.032645f, -0.002329f, -0.001882f, -0.013648f, -0.000457f}, + {-0.004227f, +0.101458f, -0.078323f, +0.025650f, +0.023677f, +0.008354f, -0.000149f}, + {-0.004310f, +0.040486f, -0.067656f, +0.002564f, -0.009152f, -0.020113f, -0.000721f}, + {-0.006574f, +0.036030f, +0.031660f, +0.001982f, +0.011839f, -0.005651f, -0.000249f}, + {-0.003724f, -0.096560f, +0.032395f, -0.066533f, -0.059170f, -0.030499f, -0.001058f}, + {+0.006692f, +0.160009f, -0.129379f, +0.052154f, +0.052438f, +0.021767f, -0.000066f}, + {-0.003323f, -0.125272f, +0.095773f, -0.021055f, +0.002751f, -0.004192f, -0.000439f}, + {-0.003058f, -0.040531f, +0.031526f, -0.019596f, -0.001958f, -0.022711f, -0.000117f}, + {+0.006495f, +0.062678f, -0.034315f, +0.006680f, +0.044013f, +0.015039f, +0.000365f}, + {-0.005311f, -0.024302f, -0.038568f, -0.010732f, -0.046246f, -0.018532f, -0.000284f}, + {-0.008861f, -0.084231f, +0.034646f, -0.029324f, -0.051146f, -0.030089f, -0.000240f}, + {-0.007139f, -0.034225f, -0.007526f, -0.011945f, -0.061869f, -0.025586f, -0.000432f}, + {+0.007578f, +0.057792f, -0.063008f, +0.015978f, +0.032751f, +0.013830f, +0.000600f}, + {-0.001234f, -0.011094f, +0.018209f, +0.014340f, +0.006466f, +0.018926f, +0.000111f} + }, + { + {+0.002540f, -0.000338f, -0.479144f, +0.000386f, -0.002502f, +0.001455f, -0.000053f}, + {-0.003492f, +0.047296f, -0.570068f, +0.004548f, -0.004671f, +0.001911f, -0.000027f}, + {+0.005565f, -0.070554f, -0.294440f, +0.005506f, +0.010986f, -0.002858f, -0.000058f}, + {-0.004117f, +0.049455f, -0.195110f, +0.003929f, +0.005332f, -0.003637f, +0.000211f}, + {+0.005239f, -0.039531f, -0.206152f, +0.017684f, +0.012383f, -0.000355f, +0.000834f}, + {+0.000025f, -0.011412f, -0.088156f, -0.002778f, +0.007335f, -0.007815f, -0.000126f}, + {+0.014951f, -0.155014f, +0.017818f, +0.001033f, +0.001113f, +0.012028f, +0.000714f}, + {-0.014703f, +0.108984f, -0.204093f, -0.012043f, +0.008363f, -0.004674f, -0.000739f}, + {+0.004059f, -0.053922f, +0.114961f, -0.028402f, +0.006330f, -0.001994f, -0.000160f}, + {+0.003724f, -0.050906f, -0.007554f, -0.003538f, +0.016118f, -0.006369f, +0.000907f}, + {-0.008048f, -0.007569f, -0.119841f, -0.012922f, +0.012051f, -0.014974f, -0.001375f}, + {+0.013062f, -0.030629f, -0.004117f, +0.003212f, -0.008149f, +0.009890f, +0.000182f}, + {+0.009740f, -0.079383f, +0.082374f, +0.010250f, -0.003944f, -0.004234f, +0.000369f}, + {+0.014330f, +0.009080f, +0.046588f, +0.019107f, -0.009613f, +0.013944f, +0.000930f}, + {-0.006949f, +0.023465f, -0.071807f, -0.001860f, -0.007554f, -0.013510f, -0.000279f}, + {-0.002830f, +0.009786f, +0.032572f, -0.010719f, -0.019826f, -0.001129f, -0.000924f} + }, + { + {-0.000518f, -0.211474f, -0.133935f, -0.032307f, -0.000445f, +0.000582f, +0.000134f}, + {+0.002665f, -0.289252f, -0.086622f, -0.034396f, -0.004915f, -0.001571f, +0.000206f}, + {-0.002402f, -0.054649f, -0.277773f, -0.010873f, +0.005456f, +0.005496f, +0.000270f}, + {+0.006863f, -0.037276f, -0.109263f, -0.002603f, -0.001383f, -0.003887f, +0.000096f}, + {-0.000365f, -0.066656f, -0.133958f, +0.005654f, +0.003515f, +0.012311f, +0.000218f}, + {+0.006007f, +0.060607f, -0.226834f, +0.004299f, -0.005430f, +0.000507f, +0.000245f}, + {-0.007419f, -0.063255f, -0.041223f, +0.013192f, +0.013212f, +0.008787f, +0.000568f}, + {+0.005355f, -0.074959f, -0.017724f, -0.005843f, -0.003299f, -0.007563f, +0.000379f}, + {+0.005191f, +0.144000f, -0.130413f, -0.000127f, +0.002794f, -0.002991f, +0.000328f}, + {-0.001484f, +0.018159f, -0.100829f, +0.018864f, -0.001469f, +0.014392f, -0.000332f}, + {+0.010812f, -0.031458f, -0.085778f, -0.014179f, +0.006433f, -0.023583f, +0.000238f}, + {-0.005771f, -0.068903f, +0.096062f, -0.000252f, +0.011090f, +0.003258f, +0.000270f}, + {-0.000237f, -0.068071f, +0.174038f, -0.003828f, +0.006233f, -0.008771f, -0.000157f}, + {-0.011534f, -0.073815f, +0.180878f, +0.023529f, +0.003450f, +0.017160f, -0.000130f}, + {+0.000533f, -0.029314f, +0.026930f, -0.025304f, -0.011398f, -0.006662f, -0.000498f}, + {+0.005938f, +0.020909f, +0.008329f, -0.013694f, -0.010899f, -0.016792f, +0.000342f} + }, + { + {-0.004563f, +0.124857f, +0.392082f, +0.013563f, +0.002060f, +0.000768f, -0.000051f}, + {-0.000874f, +0.118799f, +0.536475f, +0.027073f, -0.003653f, -0.007953f, +0.000025f}, + {-0.002483f, +0.099121f, -0.035839f, -0.009303f, +0.001911f, +0.011561f, +0.000073f}, + {+0.001566f, +0.007969f, +0.017632f, +0.014602f, -0.004766f, -0.011498f, -0.000206f}, + {-0.000162f, +0.069466f, +0.070394f, -0.010535f, -0.013295f, +0.006761f, -0.000783f}, + {-0.001614f, +0.022761f, -0.217697f, +0.007286f, -0.009756f, +0.000855f, +0.000123f}, + {-0.006230f, +0.043001f, +0.068506f, +0.012269f, -0.001247f, +0.005912f, -0.000829f}, + {+0.003179f, +0.070957f, +0.187234f, +0.028351f, +0.003912f, -0.015536f, +0.000707f}, + {-0.008139f, +0.072807f, -0.193636f, +0.001437f, -0.001644f, -0.004401f, +0.000212f}, + {+0.001051f, +0.001027f, -0.130312f, +0.005052f, -0.009787f, +0.012646f, -0.000484f}, + {-0.011122f, +0.053720f, +0.094386f, +0.024713f, +0.004708f, -0.004962f, +0.001401f}, + {-0.005833f, +0.020123f, +0.198197f, +0.023257f, -0.001066f, -0.005043f, -0.000360f}, + {-0.004564f, -0.002440f, +0.257145f, +0.012398f, -0.014402f, +0.011456f, -0.000090f}, + {+0.003708f, -0.033867f, +0.192105f, -0.009019f, +0.001369f, +0.017649f, -0.000875f}, + {-0.000732f, +0.046885f, +0.134712f, +0.007725f, +0.003664f, +0.006970f, +0.000515f}, + {-0.005583f, -0.032353f, -0.019855f, +0.017107f, -0.001283f, -0.011122f, +0.000713f} + }, + { + {+0.004066f, +0.114050f, +0.374700f, +0.029211f, +0.000581f, -0.000706f, -0.000055f}, + {+0.002409f, +0.197372f, +0.418425f, +0.043739f, -0.001381f, -0.006220f, -0.000261f}, + {+0.001898f, -0.064197f, +0.179119f, -0.008245f, +0.001749f, +0.008116f, -0.000159f}, + {-0.006930f, -0.044567f, +0.116693f, +0.010436f, -0.007263f, -0.009260f, -0.000055f}, + {-0.005436f, -0.030846f, +0.218738f, -0.016032f, -0.014948f, -0.006593f, +0.000194f}, + {-0.005550f, -0.139940f, +0.036170f, -0.010954f, -0.009097f, +0.004539f, -0.000244f}, + {+0.007570f, -0.021370f, +0.201636f, -0.018407f, -0.011309f, +0.008794f, -0.000028f}, + {+0.000471f, +0.110932f, +0.171227f, +0.014736f, -0.001743f, +0.001483f, -0.000770f}, + {-0.001447f, -0.112344f, +0.009378f, -0.014922f, -0.005067f, +0.006639f, -0.000413f}, + {-0.002692f, -0.030681f, -0.061540f, -0.021293f, -0.000512f, +0.001990f, +0.000334f}, + {+0.001796f, +0.003780f, +0.092257f, +0.069391f, -0.029804f, +0.029220f, -0.000867f}, + {+0.005138f, +0.080068f, +0.149507f, +0.001138f, -0.024022f, +0.014589f, -0.000067f}, + {-0.004224f, +0.108920f, +0.013328f, +0.069316f, -0.035946f, +0.025685f, +0.000258f}, + {+0.000658f, +0.090331f, +0.062341f, -0.027002f, +0.011859f, +0.001213f, +0.000603f}, + {+0.005900f, +0.098418f, +0.049627f, +0.003081f, +0.013620f, +0.005035f, +0.000178f}, + {+0.001625f, -0.027640f, -0.069299f, +0.028848f, -0.005261f, +0.005494f, -0.000622f} + }, + { + {+0.000963f, -0.209168f, -0.136783f, -0.021436f, -0.001315f, +0.001715f, +0.000053f}, + {-0.003836f, -0.240060f, -0.249017f, -0.026285f, -0.002356f, +0.002581f, +0.000097f}, + {+0.002543f, -0.056651f, +0.175187f, -0.004318f, +0.000986f, +0.000543f, -0.000230f}, + {-0.000920f, +0.004716f, +0.131627f, +0.000502f, -0.004907f, +0.000275f, +0.000237f}, + {+0.006067f, -0.044059f, +0.163804f, -0.013386f, -0.002210f, +0.001514f, +0.000471f}, + {+0.004568f, +0.030380f, +0.236809f, +0.001626f, +0.004495f, +0.008084f, -0.000145f}, + {-0.000637f, +0.044154f, +0.318363f, +0.001072f, -0.013326f, +0.005888f, +0.000534f}, + {-0.004169f, -0.041204f, +0.007502f, +0.013093f, -0.005489f, +0.005599f, -0.000320f}, + {+0.009667f, -0.026427f, +0.125387f, -0.020909f, -0.002220f, +0.007411f, -0.000193f}, + {+0.003570f, +0.038849f, +0.026343f, -0.010463f, -0.003426f, -0.005718f, +0.000181f}, + {+0.011129f, -0.105682f, -0.071918f, +0.042767f, -0.045744f, +0.019229f, -0.001047f}, + {+0.001721f, +0.011709f, +0.075679f, +0.011170f, -0.018633f, +0.009301f, +0.000298f}, + {+0.014881f, -0.126099f, -0.329945f, +0.029695f, -0.035112f, +0.015020f, -0.000347f}, + {-0.001429f, +0.041747f, -0.036410f, -0.017561f, +0.002266f, -0.010646f, +0.000475f}, + {-0.004566f, -0.060021f, -0.112881f, -0.001467f, +0.001208f, -0.008750f, -0.000458f}, + {+0.003385f, -0.054651f, -0.117931f, -0.004432f, -0.010618f, +0.008056f, -0.000354f} + }, + { + {-0.002636f, +0.021786f, -0.463103f, +0.000210f, -0.002240f, +0.001465f, +0.000004f}, + {+0.000878f, -0.033402f, -0.570083f, -0.011803f, -0.002903f, +0.005358f, +0.000186f}, + {-0.003861f, +0.077704f, -0.003869f, +0.009538f, +0.005934f, -0.007444f, +0.000299f}, + {+0.010766f, +0.071297f, +0.041586f, -0.012126f, -0.005377f, +0.011762f, -0.000054f}, + {+0.003440f, +0.083945f, +0.020595f, -0.010102f, -0.001688f, +0.003568f, -0.000305f}, + {+0.000517f, +0.090621f, +0.157862f, +0.005981f, +0.009055f, +0.001744f, +0.000308f}, + {+0.000182f, +0.151744f, +0.162737f, -0.002607f, +0.004109f, -0.003418f, -0.000159f}, + {-0.001674f, +0.013807f, -0.090106f, +0.002037f, -0.002899f, -0.000327f, +0.000853f}, + {-0.006443f, +0.001872f, +0.099185f, +0.004052f, -0.002515f, -0.000928f, +0.000598f}, + {-0.003444f, +0.003891f, +0.070062f, +0.022333f, -0.021229f, -0.003330f, -0.000068f}, + {-0.012896f, -0.014560f, -0.156269f, +0.016693f, -0.002612f, -0.014390f, +0.001286f}, + {+0.000829f, +0.055243f, -0.003801f, +0.001636f, -0.000490f, -0.001040f, +0.000005f}, + {-0.012356f, -0.110940f, -0.289749f, -0.015445f, +0.011167f, -0.013527f, +0.000160f}, + {+0.002911f, +0.062983f, -0.089502f, +0.007738f, +0.002529f, -0.010796f, -0.000711f}, + {-0.001042f, -0.042600f, -0.131138f, -0.021059f, +0.003745f, -0.005700f, +0.000034f}, + {-0.005370f, -0.110106f, -0.043966f, -0.008083f, +0.000494f, +0.000652f, +0.000654f} + }, + { + {+0.000068f, +0.218352f, -0.157003f, +0.028534f, -0.003926f, -0.000507f, -0.000005f}, + {+0.002073f, +0.275247f, -0.104488f, +0.034616f, -0.005146f, -0.000060f, -0.000164f}, + {+0.000542f, +0.035123f, -0.100984f, -0.012987f, -0.001903f, -0.010200f, +0.000216f}, + {-0.007809f, -0.017882f, -0.016749f, +0.003757f, +0.007758f, +0.013407f, -0.000199f}, + {-0.011198f, +0.012942f, -0.020894f, +0.014537f, +0.001742f, +0.002696f, -0.000187f}, + {+0.000091f, -0.053033f, -0.050071f, -0.012761f, +0.000476f, -0.005826f, +0.000111f}, + {-0.004382f, -0.147911f, -0.200725f, +0.006370f, +0.014963f, -0.002284f, -0.000221f}, + {+0.006114f, +0.016727f, -0.125469f, +0.009898f, +0.002187f, -0.002825f, -0.000120f}, + {+0.000315f, -0.042519f, -0.011423f, -0.012532f, -0.008250f, -0.008414f, -0.000042f}, + {+0.003440f, +0.012295f, +0.068286f, +0.009074f, -0.037833f, -0.006784f, -0.000232f}, + {+0.002138f, +0.083651f, -0.088555f, +0.008486f, +0.011516f, -0.015378f, +0.000453f}, + {-0.008151f, -0.083680f, -0.170893f, +0.004520f, +0.005257f, -0.007598f, -0.000202f}, + {-0.000469f, +0.132201f, -0.018388f, -0.009231f, +0.019167f, -0.012329f, +0.000366f}, + {-0.003734f, +0.034878f, -0.050414f, +0.013477f, +0.006657f, -0.003764f, -0.000102f}, + {-0.000430f, +0.080573f, -0.013035f, -0.016572f, +0.018193f, -0.001715f, +0.000223f}, + {+0.002846f, +0.020446f, +0.092520f, -0.009215f, +0.003194f, -0.000469f, +0.000030f} + }, + { + {+0.000963f, -0.125190f, +0.346445f, -0.013595f, +0.000303f, -0.000978f, -0.000033f}, + {+0.000446f, -0.100728f, +0.488217f, -0.016236f, -0.005710f, +0.001786f, -0.000035f}, + {+0.002743f, -0.014250f, -0.025406f, -0.016135f, -0.007374f, -0.003595f, -0.000484f}, + {-0.003552f, -0.038637f, -0.023362f, +0.006065f, +0.017089f, +0.002181f, +0.000163f}, + {+0.005542f, -0.022598f, -0.016879f, +0.000337f, +0.010965f, -0.004955f, +0.000192f}, + {-0.003897f, -0.006264f, -0.110622f, -0.001101f, -0.004484f, -0.005876f, -0.000391f}, + {+0.001192f, -0.096496f, -0.316300f, -0.005468f, +0.032792f, -0.008475f, +0.000051f}, + {+0.000727f, +0.053728f, -0.131435f, +0.003649f, +0.007573f, +0.001815f, -0.000580f}, + {-0.000863f, +0.008255f, -0.088991f, -0.000632f, -0.015735f, -0.002803f, -0.000629f}, + {-0.002406f, +0.061420f, +0.048885f, -0.025571f, -0.026139f, -0.013054f, -0.000085f}, + {+0.006958f, +0.009989f, +0.015982f, +0.015590f, +0.008811f, -0.003944f, -0.001342f}, + {+0.004616f, -0.048619f, -0.248100f, -0.002887f, +0.015818f, -0.007122f, -0.000127f}, + {+0.009488f, +0.064501f, +0.087537f, +0.011252f, +0.004644f, -0.003762f, -0.000684f}, + {+0.000069f, -0.120500f, +0.126342f, -0.004190f, +0.000200f, -0.001712f, +0.000586f}, + {+0.005149f, -0.007666f, +0.084919f, +0.009632f, +0.003272f, +0.006689f, +0.000055f}, + {+0.000416f, +0.029426f, +0.098519f, +0.008834f, +0.001161f, +0.002526f, -0.000495f} + }, + { + {+0.000886f, -0.148670f, +0.323207f, -0.018371f, -0.002564f, -0.001740f, +0.000012f}, + {-0.003884f, -0.175284f, +0.400890f, -0.026675f, -0.007851f, +0.000737f, +0.000065f}, + {-0.002495f, +0.080937f, +0.147671f, +0.011536f, +0.007971f, +0.006899f, +0.000035f}, + {+0.007961f, -0.084392f, -0.116379f, -0.003191f, +0.002839f, -0.007308f, +0.000062f}, + {+0.006158f, -0.080005f, -0.088685f, -0.003948f, +0.007957f, -0.004571f, +0.000120f}, + {+0.002211f, +0.071563f, -0.001572f, +0.017783f, +0.002945f, +0.001211f, +0.000025f}, + {+0.006354f, +0.043718f, -0.096037f, +0.016202f, +0.015087f, -0.012592f, +0.000187f}, + {-0.008848f, +0.111246f, +0.002666f, -0.000486f, +0.002601f, +0.004659f, +0.000250f}, + {+0.003002f, +0.031933f, -0.067079f, +0.004866f, -0.003717f, +0.006734f, +0.000335f}, + {-0.000242f, +0.057016f, +0.043568f, -0.018255f, +0.005973f, +0.012687f, +0.000474f}, + {-0.006561f, +0.039260f, +0.109217f, +0.013646f, -0.000558f, +0.004597f, +0.000141f}, + {+0.005911f, +0.034849f, -0.122537f, +0.003454f, +0.006816f, -0.008021f, +0.000346f}, + {-0.009125f, +0.032899f, +0.054825f, -0.015163f, +0.007845f, -0.000234f, +0.000195f}, + {+0.004323f, -0.058064f, +0.175096f, -0.013022f, -0.007874f, +0.002160f, -0.000093f}, + {-0.000030f, -0.004530f, +0.139712f, +0.009150f, -0.007095f, +0.003336f, -0.000160f}, + {+0.000090f, +0.003404f, +0.036143f, -0.013076f, -0.011742f, -0.000567f, +0.000145f} + }, + { + {-0.001658f, +0.168998f, -0.158518f, +0.021572f, -0.003793f, -0.001030f, +0.000055f}, + {+0.001127f, +0.205208f, -0.220912f, +0.026048f, -0.002674f, -0.002769f, +0.000023f}, + {-0.000461f, +0.009252f, +0.227604f, +0.010467f, +0.006338f, +0.006074f, +0.000422f}, + {-0.002384f, +0.002851f, -0.212446f, +0.002659f, +0.001628f, -0.007095f, -0.000144f}, + {-0.008381f, -0.010679f, -0.133194f, -0.002584f, +0.005642f, -0.000472f, -0.000122f}, + {+0.002492f, +0.019849f, +0.076078f, -0.001470f, +0.003467f, +0.000327f, +0.000366f}, + {-0.004536f, -0.073352f, +0.163370f, -0.006974f, -0.006111f, +0.002960f, -0.000053f}, + {+0.006503f, -0.143768f, +0.271114f, -0.002346f, -0.005069f, +0.007486f, +0.000318f}, + {+0.000578f, -0.025307f, +0.019989f, +0.002596f, -0.000438f, +0.005960f, +0.000442f}, + {+0.001669f, +0.018575f, +0.086499f, -0.013973f, +0.005522f, +0.018115f, -0.000044f}, + {+0.003923f, -0.045316f, +0.178720f, +0.008368f, -0.009955f, +0.008103f, +0.001025f}, + {-0.005730f, -0.104850f, +0.098014f, -0.001983f, -0.005339f, +0.003699f, +0.000081f}, + {+0.004112f, -0.056472f, +0.078708f, +0.007073f, -0.002789f, +0.002619f, +0.000670f}, + {-0.002113f, +0.147342f, -0.011554f, -0.009749f, -0.006943f, +0.003214f, -0.000444f}, + {-0.009491f, -0.008362f, +0.168137f, -0.007087f, -0.000514f, +0.001707f, -0.000225f}, + {-0.002858f, +0.040341f, -0.044863f, -0.002151f, -0.014669f, -0.003465f, +0.000263f} + }, + { + {+0.000325f, +0.012293f, -0.420365f, -0.001073f, -0.001275f, -0.000190f, -0.000056f}, + {+0.004153f, +0.000289f, -0.552776f, +0.004938f, +0.001551f, -0.000077f, +0.000021f}, + {+0.003179f, -0.114923f, +0.044254f, -0.005107f, +0.002854f, -0.000178f, -0.000238f}, + {-0.002447f, +0.087293f, -0.100868f, -0.001711f, +0.001963f, -0.006609f, +0.000026f}, + {+0.000798f, +0.106727f, +0.010700f, +0.015899f, +0.006953f, -0.001329f, -0.000158f}, + {-0.001202f, -0.077157f, -0.029032f, -0.005126f, -0.002123f, -0.005150f, -0.000138f}, + {-0.005108f, -0.025092f, +0.196748f, -0.011988f, -0.001042f, +0.009182f, -0.000182f}, + {-0.000182f, -0.149947f, +0.283461f, +0.014807f, -0.003734f, -0.001388f, -0.000169f}, + {-0.004916f, +0.034459f, +0.115305f, -0.001284f, +0.001624f, -0.003142f, -0.000476f}, + {-0.000563f, +0.021689f, +0.129439f, +0.009360f, -0.006104f, +0.001314f, -0.000611f}, + {-0.004903f, -0.097921f, +0.109890f, -0.003701f, -0.014923f, -0.001100f, -0.000445f}, + {-0.004445f, -0.041667f, +0.183618f, -0.002519f, -0.000687f, +0.004062f, -0.000508f}, + {+0.001992f, -0.044965f, +0.102788f, -0.009037f, -0.015851f, -0.006745f, -0.000749f}, + {-0.004462f, +0.089632f, -0.099871f, +0.006564f, +0.004290f, +0.010085f, +0.000230f}, + {+0.005311f, -0.026905f, +0.088346f, +0.002622f, +0.012027f, +0.008602f, +0.000330f}, + {+0.002284f, +0.015859f, -0.086945f, -0.006492f, +0.002254f, +0.002859f, -0.000141f} + }, + { + {+0.000326f, -0.185379f, -0.113130f, -0.018251f, -0.002891f, -0.000347f, -0.000024f}, + {-0.003253f, -0.209744f, -0.182927f, -0.020751f, +0.000290f, -0.000620f, -0.000129f}, + {-0.003028f, +0.047265f, -0.166312f, -0.004033f, +0.004095f, -0.000001f, -0.000176f}, + {+0.000316f, -0.113969f, +0.180249f, -0.010833f, -0.002558f, -0.003462f, +0.000061f}, + {+0.003377f, -0.011235f, +0.182709f, +0.007053f, -0.006109f, +0.001285f, +0.000192f}, + {-0.003931f, -0.005368f, -0.113545f, -0.005959f, -0.008563f, +0.003356f, -0.000270f}, + {+0.007132f, +0.113339f, -0.085151f, +0.027048f, +0.006394f, +0.004682f, +0.000174f}, + {+0.000751f, +0.118643f, -0.011839f, -0.007823f, +0.008316f, -0.008033f, -0.000242f}, + {+0.002459f, -0.036301f, +0.193951f, -0.011739f, +0.006099f, -0.008613f, -0.000199f}, + {+0.000406f, +0.016288f, +0.132011f, +0.014654f, -0.002234f, -0.013512f, +0.000336f}, + {+0.004431f, +0.059630f, -0.069866f, -0.034584f, +0.004013f, -0.006714f, -0.000599f}, + {+0.005956f, +0.026912f, +0.080301f, -0.013592f, +0.011263f, -0.002117f, +0.000173f}, + {-0.008209f, -0.004505f, +0.119613f, -0.041351f, -0.013433f, -0.006274f, -0.000170f}, + {+0.005701f, +0.024166f, -0.118285f, +0.031263f, -0.000827f, +0.014446f, +0.000265f}, + {+0.009742f, +0.118573f, -0.137465f, +0.018797f, +0.026066f, +0.001847f, +0.000233f}, + {+0.002341f, -0.050370f, -0.015346f, +0.010898f, +0.021006f, -0.007241f, -0.000088f} + }, + { + {+0.000319f, +0.126694f, +0.366724f, +0.020424f, -0.001419f, +0.002643f, +0.000070f}, + {-0.002315f, +0.189978f, +0.424487f, +0.028121f, +0.003399f, +0.001047f, +0.000054f}, + {+0.000002f, +0.059855f, -0.154980f, +0.000999f, -0.005118f, -0.004107f, +0.000191f}, + {+0.003430f, -0.035271f, +0.310904f, +0.009731f, +0.001220f, +0.005190f, +0.000006f}, + {+0.000597f, -0.036067f, +0.156487f, +0.000121f, -0.001763f, +0.002466f, +0.000103f}, + {+0.002799f, +0.082995f, -0.033871f, -0.002711f, -0.002209f, +0.005746f, +0.000158f}, + {+0.000838f, -0.029571f, -0.293367f, -0.014081f, -0.006415f, +0.002421f, -0.000016f}, + {-0.003985f, -0.053282f, -0.235190f, +0.002717f, +0.007419f, -0.003670f, +0.000132f}, + {+0.003050f, -0.115037f, +0.111070f, +0.001088f, -0.002341f, -0.002756f, +0.000444f}, + {-0.002839f, -0.039655f, +0.056727f, +0.015997f, -0.000834f, -0.008040f, +0.000489f}, + {+0.000660f, -0.016986f, -0.163358f, -0.021748f, +0.011162f, +0.003668f, +0.000413f}, + {+0.004639f, -0.044241f, -0.031884f, -0.021035f, +0.012216f, +0.004499f, +0.000415f}, + {+0.010322f, -0.027147f, +0.049841f, -0.030293f, +0.012802f, +0.010388f, +0.000831f}, + {-0.000435f, -0.007837f, -0.132385f, +0.021562f, -0.024000f, -0.010766f, -0.000329f}, + {-0.013019f, -0.039175f, -0.263229f, +0.021453f, -0.007560f, -0.017185f, -0.000554f}, + {-0.004755f, -0.013959f, +0.075438f, +0.020661f, +0.007559f, -0.002287f, +0.000024f} + }, + { + {-0.000366f, +0.124913f, +0.371948f, +0.012777f, -0.000932f, +0.002982f, -0.000011f}, + {+0.003472f, +0.140915f, +0.467037f, +0.023556f, +0.002486f, +0.001401f, +0.000134f}, + {+0.002379f, -0.064440f, +0.016932f, -0.014417f, -0.008974f, +0.000096f, +0.000033f}, + {-0.003091f, +0.132798f, +0.091856f, +0.016839f, -0.001343f, +0.008140f, -0.000081f}, + {-0.003585f, +0.084471f, -0.026953f, +0.002730f, +0.014878f, +0.007539f, -0.000263f}, + {+0.003779f, +0.001969f, +0.063847f, -0.006087f, +0.005822f, +0.005396f, +0.000227f}, + {-0.004511f, -0.122929f, -0.117186f, -0.033714f, -0.013590f, +0.002377f, -0.000100f}, + {+0.000980f, -0.075927f, -0.209412f, -0.000716f, -0.010339f, -0.005890f, +0.000204f}, + {-0.003810f, +0.057065f, -0.098800f, +0.006671f, -0.016309f, +0.008162f, +0.000049f}, + {+0.003493f, +0.065520f, -0.083489f, +0.006585f, -0.004680f, +0.003998f, -0.000533f}, + {-0.003710f, -0.067626f, -0.100484f, -0.001614f, -0.003921f, +0.004818f, +0.000362f}, + {-0.009313f, -0.006684f, -0.041093f, -0.019272f, -0.001375f, +0.012838f, -0.000308f}, + {-0.005002f, +0.026330f, -0.021257f, -0.018461f, +0.004718f, +0.021321f, -0.000281f}, + {-0.001875f, -0.027307f, -0.031082f, -0.009783f, -0.018159f, -0.018171f, +0.000040f}, + {-0.000166f, -0.115217f, -0.152392f, -0.002694f, -0.019043f, -0.016076f, -0.000053f}, + {+0.000874f, +0.000110f, +0.050226f, +0.023317f, -0.014557f, +0.001480f, +0.000044f} + }, + { + {-0.000264f, -0.194793f, -0.107821f, -0.023201f, -0.001199f, +0.000928f, -0.000060f}, + {+0.000832f, -0.240876f, -0.099242f, -0.022166f, -0.003699f, -0.002772f, -0.000150f}, + {-0.001244f, -0.043315f, +0.069455f, -0.009254f, -0.000121f, +0.002278f, -0.000050f}, + {+0.000506f, -0.065069f, -0.220826f, -0.007722f, -0.000261f, +0.008268f, -0.000002f}, + {+0.000158f, +0.024522f, -0.139604f, -0.008624f, +0.007485f, +0.001513f, +0.000052f}, + {-0.004662f, -0.057647f, +0.024501f, -0.007536f, -0.000268f, -0.003627f, -0.000193f}, + {-0.001281f, +0.103406f, +0.216683f, +0.001410f, -0.010455f, -0.001406f, +0.000159f}, + {+0.003974f, +0.035826f, -0.038344f, +0.009124f, -0.007513f, +0.004170f, -0.000115f}, + {+0.001177f, +0.014518f, -0.176436f, +0.013776f, -0.011126f, +0.004369f, -0.000360f}, + {-0.000200f, +0.028344f, -0.131828f, -0.000160f, -0.010621f, +0.002766f, -0.000196f}, + {+0.000761f, +0.050071f, +0.080542f, +0.016049f, -0.013715f, +0.000842f, -0.000304f}, + {+0.000174f, +0.037897f, +0.027758f, -0.000913f, -0.012246f, +0.000027f, -0.000247f}, + {-0.002523f, +0.017257f, -0.029696f, -0.007251f, -0.004825f, +0.006036f, -0.000646f}, + {-0.002385f, +0.084478f, +0.128806f, +0.008133f, -0.002169f, -0.006954f, +0.000201f}, + {+0.008715f, +0.075360f, +0.074445f, +0.006029f, +0.000811f, +0.006272f, +0.000696f}, + {+0.004537f, -0.062959f, -0.053134f, +0.012141f, -0.007590f, +0.010200f, +0.000089f} + }, + { + {+0.000276f, +0.007743f, -0.416264f, -0.001108f, +0.002588f, -0.002874f, +0.000036f}, + {-0.002808f, +0.022075f, -0.484229f, +0.001735f, -0.003481f, -0.002668f, -0.000022f}, + {-0.001043f, +0.025703f, -0.026181f, +0.003209f, +0.003368f, +0.000139f, -0.000060f}, + {+0.000521f, -0.056071f, -0.241883f, -0.008469f, +0.009541f, -0.000806f, +0.000153f}, + {+0.002825f, -0.022621f, -0.075727f, -0.011466f, +0.000225f, -0.001401f, +0.000211f}, + {-0.001889f, -0.007945f, -0.059481f, +0.000805f, -0.002148f, -0.004609f, -0.000188f}, + {+0.004476f, +0.059212f, +0.261153f, -0.001867f, -0.001737f, -0.006657f, -0.000119f}, + {-0.002093f, -0.007870f, +0.069319f, -0.003999f, +0.002298f, +0.004349f, -0.000164f}, + {-0.001038f, -0.064160f, -0.043605f, -0.010516f, +0.006900f, -0.004421f, -0.000000f}, + {-0.001450f, -0.032984f, -0.037734f, -0.017216f, -0.000676f, -0.001134f, +0.000457f}, + {+0.001626f, +0.021124f, +0.148362f, +0.002128f, -0.002287f, -0.004634f, -0.000290f}, + {+0.007506f, +0.018304f, +0.027687f, -0.007765f, -0.004034f, -0.009905f, +0.000275f}, + {+0.004447f, +0.019127f, -0.031778f, -0.006006f, +0.011798f, -0.014550f, +0.000549f}, + {+0.004784f, +0.020712f, +0.158803f, +0.001960f, -0.000959f, +0.001140f, -0.000291f}, + {-0.001723f, +0.027442f, +0.179042f, +0.004096f, -0.000119f, +0.015809f, -0.000273f}, + {-0.004248f, -0.027902f, -0.065637f, +0.005103f, +0.010905f, +0.003977f, -0.000099f} + }, + { + {-0.000121f, +0.168818f, -0.170063f, +0.020644f, +0.002958f, -0.003463f, +0.000046f}, + {-0.000011f, +0.194924f, -0.223064f, +0.022796f, +0.001087f, +0.000493f, +0.000117f}, + {+0.000547f, +0.029503f, -0.053171f, -0.000739f, -0.000657f, -0.002145f, +0.000015f}, + {-0.000242f, +0.117372f, +0.034986f, +0.015156f, +0.005707f, -0.008083f, -0.000136f}, + {+0.000080f, +0.024155f, +0.034423f, +0.005036f, -0.006191f, -0.007152f, -0.000179f}, + {+0.005094f, +0.032260f, -0.054141f, -0.008306f, -0.004720f, -0.002533f, +0.000274f}, + {+0.001279f, -0.165394f, -0.065559f, -0.023240f, +0.007945f, -0.001409f, -0.000067f}, + {-0.002856f, +0.009409f, +0.091949f, -0.005615f, +0.001544f, +0.004433f, +0.000065f}, + {+0.002405f, +0.052072f, +0.137955f, +0.003382f, +0.011200f, +0.000365f, +0.000319f}, + {-0.002077f, +0.047717f, +0.093664f, -0.010132f, +0.009074f, +0.004134f, +0.000010f}, + {+0.000926f, -0.043776f, +0.057405f, +0.004440f, -0.000684f, -0.002365f, +0.000282f}, + {-0.002540f, -0.085351f, -0.109742f, -0.018492f, +0.001709f, -0.008584f, +0.000206f}, + {-0.001618f, -0.009925f, -0.064822f, -0.004580f, +0.010301f, -0.020636f, +0.000410f}, + {-0.000126f, -0.171921f, -0.079783f, -0.018973f, +0.006091f, +0.015039f, +0.000181f}, + {-0.005881f, -0.031229f, +0.141619f, +0.011585f, -0.000326f, +0.012033f, -0.000629f}, + {-0.001344f, +0.104987f, +0.102295f, +0.010501f, +0.005542f, -0.003423f, -0.000124f} + }, + { + {+0.000665f, -0.123778f, +0.280425f, -0.018756f, -0.000671f, -0.000509f, -0.000067f}, + {+0.001583f, -0.162600f, +0.316923f, -0.023267f, -0.000975f, +0.003785f, -0.000038f}, + {+0.001379f, -0.026831f, +0.023970f, -0.006255f, -0.004902f, +0.000112f, +0.000081f}, + {+0.000562f, -0.030460f, +0.260600f, +0.000624f, -0.000602f, -0.007719f, -0.000080f}, + {-0.002993f, -0.002642f, +0.081219f, +0.000884f, -0.006660f, -0.009580f, -0.000060f}, + {-0.000597f, -0.004283f, +0.008621f, -0.007685f, -0.005971f, +0.001193f, +0.000047f}, + {-0.005508f, +0.031003f, -0.344879f, +0.005634f, +0.007605f, -0.002853f, +0.000190f}, + {+0.001858f, +0.007685f, +0.058337f, +0.000024f, -0.000621f, +0.003685f, +0.000209f}, + {-0.000813f, +0.038640f, +0.157464f, +0.006533f, +0.001576f, +0.003906f, -0.000022f}, + {+0.004224f, -0.021225f, +0.166071f, -0.006069f, +0.003399f, +0.001042f, -0.000214f}, + {-0.002033f, +0.060718f, -0.091992f, +0.004611f, -0.002942f, +0.001595f, +0.000196f}, + {-0.004127f, -0.004531f, -0.205174f, -0.009365f, +0.001070f, -0.003179f, -0.000289f}, + {+0.000150f, -0.029538f, -0.068904f, -0.000402f, -0.005147f, -0.003972f, -0.000769f}, + {-0.004079f, -0.017972f, -0.257424f, -0.008455f, +0.006187f, +0.013312f, +0.000198f}, + {+0.002517f, +0.012776f, +0.062784f, +0.003145f, +0.009655f, -0.004343f, +0.000614f}, + {+0.005049f, +0.022035f, +0.199714f, +0.007109f, +0.003089f, -0.003875f, +0.000168f} + }, + { + {-0.000838f, -0.093482f, +0.340134f, -0.010503f, +0.000289f, +0.001191f, +0.000003f}, + {+0.000716f, -0.099685f, +0.420241f, -0.008436f, +0.000064f, +0.003115f, -0.000044f}, + {-0.000556f, -0.021255f, +0.062613f, -0.000941f, -0.000204f, +0.000715f, -0.000034f}, + {-0.001430f, -0.100524f, +0.149323f, -0.011872f, -0.001590f, -0.004527f, +0.000235f}, + {-0.000230f, -0.032021f, +0.018295f, -0.004614f, +0.002734f, -0.001951f, +0.000193f}, + {-0.002656f, -0.009804f, +0.038729f, -0.000163f, -0.001790f, +0.000822f, -0.000256f}, + {+0.000612f, +0.140653f, -0.197385f, +0.019089f, +0.002585f, -0.003213f, -0.000031f}, + {+0.002670f, -0.040336f, -0.020386f, -0.004271f, -0.002055f, -0.001343f, -0.000109f}, + {-0.001845f, -0.078760f, -0.020200f, -0.013056f, -0.006124f, -0.004360f, -0.000331f}, + {+0.000970f, -0.117325f, +0.055613f, -0.005023f, -0.004912f, -0.004803f, -0.000116f}, + {-0.002683f, +0.035606f, -0.126398f, +0.002472f, +0.000580f, +0.000376f, -0.000241f}, + {+0.000497f, +0.114405f, -0.055418f, +0.003763f, +0.003364f, +0.001371f, -0.000155f}, + {-0.000345f, +0.007312f, +0.001802f, -0.002287f, +0.000791f, +0.008770f, +0.000007f}, + {+0.000789f, +0.144128f, -0.097885f, +0.006241f, +0.005947f, +0.001436f, -0.000489f}, + {+0.001963f, -0.040204f, -0.034424f, +0.000413f, +0.000091f, -0.010270f, +0.000273f}, + {-0.002689f, -0.084084f, +0.069751f, -0.006898f, -0.004644f, -0.006109f, +0.000091f} + }, + { + {-0.000062f, +0.159834f, -0.044876f, +0.021415f, +0.000841f, +0.001074f, +0.000061f}, + {-0.001939f, +0.203019f, -0.024500f, +0.028206f, +0.000129f, +0.000129f, +0.000014f}, + {-0.002057f, +0.017619f, +0.007554f, +0.001544f, +0.005642f, -0.000830f, -0.000029f}, + {+0.001889f, +0.080220f, -0.136610f, +0.012668f, -0.006511f, +0.005422f, -0.000119f}, + {+0.004765f, +0.006329f, -0.052477f, +0.003995f, -0.004263f, +0.009557f, -0.000103f}, + {-0.001047f, -0.021879f, +0.034445f, +0.001105f, +0.002961f, -0.002057f, +0.000104f}, + {+0.004934f, -0.125025f, +0.182894f, -0.007200f, -0.003809f, +0.003213f, -0.000175f}, + {-0.002421f, +0.038737f, -0.100988f, -0.002296f, +0.002905f, -0.006173f, -0.000222f}, + {+0.000637f, -0.009843f, -0.137662f, -0.007085f, -0.001227f, -0.007524f, +0.000084f}, + {-0.007111f, -0.006449f, -0.088114f, +0.008144f, -0.012101f, -0.002453f, +0.000119f}, + {+0.005822f, -0.035186f, -0.014091f, -0.019245f, +0.005040f, -0.002938f, -0.000098f}, + {+0.006158f, -0.034676f, +0.151427f, -0.007632f, -0.002292f, +0.003956f, +0.000311f}, + {-0.001390f, -0.073913f, +0.146335f, -0.009450f, +0.000888f, +0.008018f, +0.000743f}, + {+0.004580f, +0.035022f, +0.074565f, -0.008788f, +0.011150f, -0.012728f, +0.000186f}, + {+0.001196f, +0.053254f, -0.158975f, +0.007007f, +0.001158f, -0.005679f, -0.000680f}, + {-0.002227f, +0.044207f, -0.133488f, +0.008158f, -0.004916f, -0.004020f, -0.000190f} + }, + { + {+0.000424f, -0.032674f, -0.356108f, -0.006297f, +0.001097f, +0.001061f, -0.000058f}, + {-0.000331f, -0.053597f, -0.429631f, -0.007025f, +0.000454f, -0.001923f, +0.000032f}, + {+0.001733f, +0.005170f, -0.045501f, -0.004142f, +0.003057f, -0.000513f, -0.000016f}, + {-0.001720f, +0.029775f, -0.211691f, +0.005967f, -0.004600f, +0.009540f, -0.000129f}, + {-0.003261f, +0.003682f, -0.039174f, +0.006311f, -0.004814f, +0.010936f, -0.000074f}, + {+0.004648f, -0.024711f, -0.003591f, -0.006146f, +0.002500f, +0.000881f, +0.000107f}, + {-0.002617f, -0.049330f, +0.327007f, -0.003104f, +0.001710f, +0.009526f, +0.000033f}, + {-0.001001f, +0.058705f, -0.071001f, -0.004213f, +0.002311f, -0.003340f, +0.000235f}, + {+0.002783f, +0.023155f, -0.088891f, -0.001723f, +0.002778f, +0.002314f, +0.000343f}, + {+0.004839f, +0.023086f, -0.116501f, -0.000949f, +0.001446f, +0.005599f, +0.000354f}, + {-0.001118f, -0.002046f, +0.076766f, -0.001535f, +0.005295f, +0.001162f, +0.000125f}, + {-0.004117f, -0.023659f, +0.189693f, -0.013335f, +0.005698f, +0.006219f, +0.000048f}, + {+0.003062f, -0.013670f, +0.192441f, -0.001116f, +0.004652f, +0.002330f, -0.000476f}, + {-0.004154f, -0.034087f, +0.046539f, -0.008864f, -0.000241f, -0.015872f, +0.000426f}, + {-0.003487f, +0.020767f, -0.154091f, +0.014880f, +0.001191f, +0.001914f, +0.000136f}, + {+0.003932f, -0.000386f, -0.191705f, +0.012921f, -0.005465f, +0.004477f, -0.000047f} + }, + { + {+0.000471f, -0.125486f, -0.221411f, -0.014986f, -0.000180f, +0.001120f, +0.000009f}, + {+0.001600f, -0.154646f, -0.294774f, -0.015891f, -0.000266f, -0.001489f, -0.000008f}, + {+0.001375f, -0.000822f, -0.034636f, -0.001147f, -0.000669f, +0.000303f, +0.000008f}, + {+0.000977f, -0.092422f, -0.024070f, -0.009222f, -0.001056f, +0.003997f, +0.000206f}, + {-0.001682f, -0.020814f, +0.011430f, -0.004002f, +0.001343f, +0.002884f, +0.000166f}, + {-0.001610f, +0.020045f, -0.049480f, +0.001742f, +0.001532f, +0.002781f, -0.000115f}, + {-0.002135f, +0.091172f, +0.125333f, +0.008360f, +0.009208f, +0.002398f, +0.000271f}, + {+0.000371f, -0.059373f, +0.078618f, -0.014453f, -0.004219f, +0.001057f, +0.000062f}, + {-0.002725f, -0.015489f, -0.009239f, -0.003738f, +0.000560f, +0.006181f, -0.000199f}, + {+0.002826f, +0.007173f, -0.085964f, +0.001891f, +0.012728f, +0.005161f, -0.000323f}, + {-0.004495f, +0.013763f, +0.058388f, -0.007410f, +0.005720f, +0.002360f, +0.000110f}, + {-0.002552f, +0.045600f, +0.070285f, +0.007922f, +0.003344f, +0.005570f, -0.000207f}, + {-0.000488f, +0.136917f, -0.026687f, +0.005457f, +0.012392f, -0.001210f, -0.000307f}, + {+0.000451f, +0.008875f, -0.051701f, +0.006069f, -0.021340f, +0.001926f, -0.000475f}, + {-0.001377f, -0.105876f, +0.039317f, -0.008020f, -0.005229f, +0.004339f, +0.000386f}, + {-0.001213f, -0.076122f, -0.061268f, -0.003217f, -0.002369f, +0.004826f, +0.000159f} + }, + { + {-0.000524f, +0.118676f, +0.170583f, +0.019688f, -0.001664f, -0.000923f, +0.000041f}, + {+0.000654f, +0.156016f, +0.194337f, +0.028557f, -0.002840f, -0.004101f, -0.000028f}, + {-0.002302f, +0.008782f, +0.011429f, +0.001323f, +0.000895f, +0.003407f, +0.000105f}, + {+0.000032f, +0.046067f, +0.185629f, +0.008390f, -0.003160f, -0.003746f, -0.000055f}, + {+0.002663f, +0.026672f, +0.064125f, -0.000262f, -0.001472f, -0.005261f, -0.000110f}, + {-0.003119f, +0.016242f, -0.044580f, +0.000850f, +0.000791f, +0.003258f, +0.000018f}, + {+0.002001f, -0.070898f, -0.146048f, -0.006424f, +0.007312f, -0.003256f, -0.000170f}, + {+0.002429f, -0.028724f, +0.132991f, -0.002905f, -0.000259f, +0.001749f, -0.000211f}, + {-0.000713f, +0.004019f, +0.012770f, -0.001359f, -0.002043f, +0.004710f, -0.000292f}, + {-0.005685f, +0.050322f, +0.008163f, +0.004254f, +0.000823f, -0.001200f, -0.000403f}, + {+0.002632f, -0.030192f, -0.022068f, -0.012383f, +0.005270f, +0.001676f, -0.000059f}, + {+0.003305f, -0.018641f, -0.063460f, -0.003826f, +0.000188f, +0.000343f, -0.000082f}, + {-0.002515f, -0.058603f, -0.271848f, -0.008489f, +0.005764f, -0.000219f, +0.000545f}, + {+0.000161f, +0.016378f, -0.070205f, -0.000824f, -0.012915f, +0.010864f, -0.000122f}, + {+0.003698f, +0.037366f, +0.216969f, +0.003644f, -0.004534f, +0.002030f, -0.000224f}, + {-0.002468f, +0.016801f, +0.081543f, +0.007748f, +0.001230f, +0.004507f, +0.000051f} + }, + { + {-0.001145f, +0.003284f, +0.355844f, +0.004455f, -0.002189f, -0.000719f, -0.000061f}, + {-0.002423f, +0.000161f, +0.457860f, +0.005943f, -0.007595f, -0.001864f, +0.000021f}, + {-0.000051f, -0.012564f, +0.029260f, -0.001225f, +0.006975f, +0.002016f, -0.000066f}, + {-0.000428f, +0.050774f, +0.180925f, +0.010634f, -0.004654f, -0.005688f, -0.000097f}, + {-0.000090f, +0.027979f, +0.070853f, +0.000692f, -0.004995f, -0.008846f, -0.000049f}, + {+0.002760f, -0.025210f, -0.010985f, +0.001189f, +0.005880f, +0.001877f, +0.000037f}, + {-0.000244f, -0.010407f, -0.222937f, -0.003909f, +0.000862f, -0.004776f, -0.000303f}, + {-0.000425f, +0.069076f, +0.010384f, +0.006056f, +0.004388f, -0.000601f, +0.000104f}, + {+0.002311f, +0.019613f, -0.027315f, +0.005251f, +0.003443f, -0.001807f, +0.000316f}, + {+0.002211f, -0.010183f, +0.073548f, -0.000883f, +0.001915f, -0.009035f, +0.000618f}, + {+0.002248f, +0.008483f, -0.068380f, -0.004591f, +0.002268f, +0.001620f, -0.000165f}, + {+0.000648f, +0.009242f, -0.099359f, +0.000641f, -0.000197f, -0.006109f, +0.000157f}, + {-0.000774f, -0.111787f, -0.198070f, -0.017791f, -0.003222f, +0.006877f, -0.000137f}, + {+0.001138f, -0.044856f, +0.026044f, -0.009715f, -0.000846f, +0.004152f, +0.000446f}, + {+0.002544f, +0.087438f, +0.155678f, +0.005423f, +0.002722f, -0.003124f, -0.000080f}, + {+0.003560f, +0.014887f, +0.074843f, +0.008219f, +0.006652f, +0.002902f, -0.000131f} + }, + { + {+0.001890f, -0.134764f, +0.131961f, -0.012234f, -0.002738f, +0.000823f, +0.000033f}, + {+0.001070f, -0.173165f, +0.189994f, -0.013988f, -0.004534f, +0.003798f, -0.000004f}, + {+0.001640f, -0.008324f, +0.014514f, -0.002435f, +0.003083f, -0.002251f, -0.000150f}, + {+0.000264f, -0.073721f, -0.011380f, -0.005780f, -0.000967f, -0.002807f, +0.000095f}, + {+0.000194f, -0.034600f, -0.001603f, +0.002002f, -0.001582f, -0.004833f, +0.000182f}, + {+0.000248f, +0.009914f, +0.030975f, +0.000054f, +0.001998f, -0.003302f, -0.000047f}, + {+0.001104f, +0.068456f, -0.089528f, +0.005666f, +0.000783f, -0.000511f, +0.000430f}, + {-0.003829f, -0.022153f, -0.133797f, -0.009639f, +0.004395f, -0.000747f, +0.000011f}, + {-0.000699f, +0.010044f, -0.035723f, +0.000046f, -0.000099f, -0.006045f, +0.000154f}, + {+0.000909f, -0.038046f, +0.036614f, -0.002380f, +0.002487f, -0.007961f, +0.000174f}, + {-0.001908f, +0.026952f, -0.036236f, -0.000119f, -0.002271f, +0.000602f, +0.000080f}, + {-0.001603f, +0.029285f, -0.049821f, +0.000247f, -0.000217f, -0.005046f, +0.000216f}, + {+0.006472f, +0.116293f, +0.099963f, -0.000867f, -0.010550f, +0.001434f, -0.000225f}, + {-0.000453f, -0.006679f, +0.094671f, -0.004526f, -0.002369f, -0.000013f, -0.000073f}, + {-0.005967f, -0.109642f, -0.072567f, +0.006836f, +0.010874f, -0.002506f, +0.000008f}, + {-0.001623f, -0.037979f, -0.009548f, -0.002077f, +0.000249f, -0.003764f, -0.000113f} + }, + { + {-0.000170f, +0.121984f, -0.255345f, +0.010962f, +0.000155f, -0.000211f, +0.000029f}, + {+0.000042f, +0.155814f, -0.316189f, +0.015901f, +0.001529f, +0.002239f, +0.000003f}, + {-0.000912f, +0.011590f, +0.001094f, -0.000549f, +0.000258f, -0.004276f, +0.000153f}, + {-0.001078f, +0.027059f, -0.170587f, +0.004222f, +0.000643f, -0.000450f, -0.000026f}, + {-0.003305f, +0.001532f, -0.066652f, +0.008505f, -0.003277f, +0.000811f, -0.000150f}, + {-0.000389f, +0.020611f, +0.035423f, -0.007402f, +0.004051f, -0.005415f, +0.000014f}, + {-0.000366f, -0.068284f, +0.107122f, +0.001280f, -0.004037f, +0.003881f, +0.000063f}, + {+0.002188f, -0.047371f, -0.125091f, -0.009984f, -0.000445f, +0.000567f, -0.000063f}, + {-0.000440f, -0.020603f, +0.011508f, -0.007936f, -0.000995f, -0.001820f, -0.000353f}, + {-0.001083f, +0.027481f, -0.055464f, +0.007462f, -0.003849f, +0.002769f, -0.000734f}, + {-0.000833f, -0.000243f, -0.003680f, -0.002365f, +0.003551f, -0.005372f, +0.000154f}, + {+0.000131f, -0.044971f, +0.042558f, -0.000985f, -0.001169f, -0.001543f, -0.000319f}, + {-0.004626f, +0.038285f, +0.245476f, +0.003432f, -0.002348f, -0.009039f, +0.000192f}, + {+0.000118f, +0.032215f, +0.016390f, +0.016314f, -0.000536f, +0.000779f, -0.000274f}, + {-0.001673f, -0.067100f, -0.155922f, +0.006074f, +0.005539f, +0.002669f, +0.000075f}, + {-0.001163f, +0.016021f, -0.074264f, -0.004922f, -0.001151f, -0.006794f, +0.000180f} + }, + { + {-0.001297f, +0.019051f, -0.402417f, +0.000141f, +0.000604f, -0.001174f, -0.000063f}, + {+0.001300f, +0.028611f, -0.522073f, -0.003618f, +0.001002f, +0.001630f, +0.000006f}, + {+0.000497f, +0.002152f, +0.001349f, +0.003743f, -0.001574f, -0.003439f, +0.000141f}, + {+0.002920f, +0.034877f, -0.171496f, -0.000170f, -0.001439f, +0.001183f, +0.000002f}, + {+0.003419f, +0.015347f, -0.076929f, -0.000130f, +0.000288f, +0.004503f, -0.000040f}, + {-0.001320f, -0.012141f, +0.002094f, -0.004277f, +0.004118f, -0.002479f, +0.000060f}, + {-0.004180f, -0.013179f, +0.192192f, +0.004645f, -0.001451f, +0.001106f, -0.000485f}, + {+0.003209f, +0.039833f, +0.008962f, -0.002291f, -0.002391f, +0.004465f, +0.000122f}, + {-0.000607f, -0.005611f, +0.042134f, +0.000975f, +0.004638f, +0.004045f, +0.000008f}, + {+0.000627f, +0.026309f, -0.067454f, +0.006167f, -0.000843f, +0.011514f, +0.000137f}, + {-0.001193f, +0.006474f, +0.018477f, -0.002724f, +0.008795f, -0.001731f, -0.000074f}, + {-0.001257f, -0.008752f, +0.087176f, -0.004699f, +0.002039f, +0.003933f, -0.000164f}, + {-0.003124f, -0.033471f, +0.148053f, -0.005001f, +0.001533f, -0.010338f, -0.000015f}, + {-0.002890f, +0.001944f, -0.047134f, +0.004337f, -0.002030f, -0.001172f, +0.000046f}, + {+0.008908f, +0.054837f, -0.040335f, +0.007026f, -0.006365f, -0.001572f, +0.000146f}, + {+0.002478f, +0.029038f, -0.064961f, -0.006465f, -0.005250f, -0.005303f, +0.000152f} + }, + { + {+0.000160f, -0.150600f, -0.167483f, -0.002920f, +0.001475f, -0.001963f, +0.000024f}, + {-0.001668f, -0.172130f, -0.218810f, -0.011191f, -0.002834f, +0.003154f, -0.000022f}, + {-0.000950f, +0.022722f, -0.027772f, +0.005005f, -0.008512f, +0.003955f, -0.000238f}, + {-0.003019f, -0.054068f, -0.033941f, +0.003539f, -0.011136f, +0.005659f, +0.000016f}, + {+0.001078f, -0.021690f, +0.006189f, -0.016829f, +0.000777f, +0.009514f, +0.000199f}, + {+0.001056f, +0.014729f, -0.053067f, +0.011823f, -0.007368f, +0.001542f, -0.000064f}, + {+0.004918f, +0.007213f, +0.138765f, -0.001533f, +0.020500f, -0.011761f, +0.000227f}, + {-0.002554f, +0.001966f, +0.107627f, -0.006775f, -0.003533f, +0.005048f, -0.000080f}, + {+0.001525f, +0.005137f, +0.030090f, +0.004553f, +0.004049f, +0.000454f, +0.000282f}, + {+0.001023f, -0.024143f, +0.037424f, -0.014519f, -0.001289f, +0.011651f, +0.000625f}, + {+0.005161f, -0.022730f, +0.068907f, -0.020272f, +0.012850f, +0.000495f, -0.000137f}, + {+0.002866f, +0.007080f, +0.063234f, -0.003391f, +0.009373f, -0.003426f, +0.000457f}, + {+0.004560f, +0.037001f, -0.014139f, +0.007335f, +0.000343f, -0.005090f, -0.000062f}, + {+0.004001f, -0.046592f, +0.005932f, -0.011122f, +0.012141f, -0.007595f, +0.000216f}, + {-0.003776f, +0.041534f, +0.044983f, +0.002268f, -0.019627f, +0.007804f, -0.000235f}, + {-0.001820f, +0.010184f, -0.049175f, +0.013588f, -0.018697f, +0.002250f, -0.000303f} + }, + { + {+0.001483f, +0.113867f, +0.209976f, +0.008819f, +0.000797f, +0.000400f, +0.000036f}, + {-0.001045f, +0.192142f, +0.298750f, +0.001463f, -0.003654f, -0.001788f, +0.000013f}, + {-0.000040f, +0.023922f, -0.061440f, -0.008880f, -0.004791f, +0.003847f, -0.000085f}, + {+0.000147f, +0.077957f, +0.126838f, -0.004370f, -0.007202f, +0.002392f, -0.000067f}, + {-0.004543f, +0.091348f, +0.161744f, -0.013831f, -0.000476f, -0.002348f, -0.000151f}, + {+0.000341f, +0.019385f, -0.074320f, -0.002090f, -0.004165f, +0.003633f, -0.000059f}, + {+0.002008f, -0.125477f, -0.001322f, +0.010977f, +0.014241f, -0.001824f, +0.000290f}, + {-0.004051f, +0.054488f, +0.153092f, -0.011645f, -0.001154f, -0.003507f, -0.000105f}, + {-0.000902f, +0.009313f, +0.026711f, -0.001561f, +0.002462f, -0.001947f, -0.000100f}, + {-0.005033f, +0.126661f, +0.230194f, -0.017832f, -0.001367f, -0.007110f, -0.000344f}, + {-0.003668f, +0.007071f, +0.130982f, -0.007450f, +0.007821f, -0.001798f, +0.000031f}, + {-0.000349f, -0.045688f, +0.017878f, +0.008768f, +0.007271f, -0.001089f, -0.000044f}, + {+0.002677f, -0.079470f, -0.153864f, +0.014296f, +0.003485f, +0.006916f, +0.000050f}, + {+0.000709f, -0.042448f, +0.071138f, +0.007687f, +0.009513f, -0.002541f, +0.000023f}, + {-0.005626f, +0.054309f, +0.055654f, -0.010333f, -0.012042f, +0.002191f, -0.000096f}, + {+0.000446f, +0.021484f, -0.057903f, -0.001636f, -0.008439f, +0.007563f, -0.000076f} + }, + { + {-0.000930f, -0.020638f, +0.420161f, -0.006289f, +0.001114f, +0.002023f, -0.000034f}, + {+0.002837f, -0.034360f, +0.606921f, -0.008940f, +0.000248f, -0.004013f, +0.000004f}, + {+0.001816f, -0.018994f, -0.028978f, +0.005755f, -0.001492f, +0.000000f, +0.000298f}, + {+0.002308f, -0.019936f, +0.239454f, +0.000948f, +0.000097f, -0.002454f, +0.000065f}, + {+0.003108f, -0.010786f, +0.269338f, -0.002735f, -0.001820f, -0.004439f, -0.000049f}, + {-0.000084f, -0.020355f, -0.030329f, +0.004050f, -0.000527f, +0.001894f, +0.000134f}, + {-0.006890f, +0.046136f, -0.183299f, -0.002301f, +0.001456f, +0.008977f, -0.000300f}, + {+0.005979f, +0.011056f, +0.166257f, -0.005656f, -0.000834f, -0.005892f, +0.000154f}, + {+0.000154f, -0.000560f, +0.037346f, -0.001460f, -0.000032f, +0.000167f, -0.000173f}, + {+0.006662f, +0.002010f, +0.363378f, -0.010169f, -0.000884f, -0.009588f, -0.000407f}, + {-0.001078f, +0.029016f, +0.107209f, -0.006938f, -0.002205f, +0.002827f, +0.000183f}, + {-0.002893f, +0.028022f, -0.051556f, -0.008217f, +0.001222f, +0.004671f, -0.000375f}, + {-0.006494f, +0.014380f, -0.224961f, -0.002217f, +0.001654f, +0.010259f, +0.000017f}, + {-0.005137f, +0.012085f, +0.032649f, +0.001820f, +0.001318f, +0.004157f, -0.000284f}, + {+0.005483f, -0.014476f, +0.074456f, +0.002422f, -0.001376f, -0.006421f, +0.000309f}, + {+0.000296f, -0.028549f, -0.015223f, +0.007439f, +0.000560f, +0.001646f, +0.000380f} + }, + { + {-0.000574f, -0.054293f, +0.393027f, +0.004619f, +0.000499f, +0.001616f, -0.000019f}, + {-0.000630f, -0.085858f, +0.559718f, +0.004183f, +0.003387f, -0.002961f, +0.000006f}, + {-0.001166f, +0.017046f, +0.023078f, -0.007491f, +0.000205f, -0.001361f, -0.000017f}, + {-0.001175f, -0.022635f, +0.244404f, -0.001647f, +0.001066f, -0.003008f, +0.000032f}, + {+0.000156f, -0.031998f, +0.255427f, +0.002202f, +0.001796f, -0.001974f, +0.000172f}, + {-0.000878f, +0.017961f, +0.022887f, -0.005377f, +0.000188f, +0.000893f, -0.000012f}, + {+0.001948f, +0.014963f, -0.247765f, +0.005780f, -0.004433f, +0.007643f, -0.000121f}, + {-0.000159f, -0.041909f, +0.136394f, +0.007153f, +0.001725f, -0.004022f, +0.000071f}, + {-0.000219f, +0.000958f, +0.044869f, -0.002129f, -0.000524f, +0.001494f, +0.000102f}, + {-0.001816f, -0.063742f, +0.323681f, +0.008953f, +0.002758f, -0.004170f, +0.000396f}, + {+0.001419f, -0.031078f, +0.037154f, +0.008056f, +0.000641f, +0.003359f, -0.000045f}, + {+0.001164f, -0.009969f, -0.088648f, +0.011556f, -0.002492f, +0.005256f, +0.000124f}, + {+0.000693f, +0.026444f, -0.217624f, +0.005106f, -0.001448f, +0.007023f, -0.000105f}, + {+0.002214f, +0.001591f, -0.021758f, +0.001337f, -0.002244f, +0.004794f, +0.000016f}, + {+0.001396f, -0.022948f, +0.061227f, -0.000339f, +0.002823f, -0.006287f, +0.000004f}, + {-0.000222f, +0.016030f, +0.027796f, -0.010434f, +0.001167f, -0.001268f, -0.000077f} + }, + { + {+0.000537f, +0.069689f, +0.259996f, -0.015449f, -0.001689f, +0.000567f, +0.000032f}, + {-0.001883f, +0.105131f, +0.355263f, -0.018765f, -0.003133f, -0.000450f, -0.000016f}, + {-0.001138f, -0.018001f, +0.039839f, +0.012701f, +0.001219f, -0.000708f, -0.000287f}, + {-0.001263f, +0.029165f, +0.184940f, -0.003746f, -0.001169f, -0.001726f, -0.000098f}, + {-0.001083f, +0.037001f, +0.183894f, -0.007086f, -0.000486f, +0.000197f, -0.000096f}, + {+0.000342f, -0.013484f, +0.044965f, +0.006682f, +0.000921f, +0.000263f, -0.000136f}, + {+0.004481f, -0.021461f, -0.201741f, -0.003038f, +0.001363f, +0.001843f, +0.000265f}, + {-0.003961f, +0.024164f, +0.091417f, -0.008821f, -0.001712f, +0.000129f, -0.000204f}, + {+0.000207f, -0.002976f, +0.043954f, +0.001501f, +0.000276f, +0.000942f, +0.000107f}, + {-0.003639f, +0.052765f, +0.205252f, -0.011783f, -0.003716f, +0.001190f, +0.000192f}, + {+0.001689f, +0.023190f, -0.011247f, -0.010783f, +0.001786f, +0.002313f, -0.000212f}, + {+0.002372f, +0.004818f, -0.082129f, -0.010451f, -0.000189f, +0.001709f, +0.000272f}, + {+0.004804f, -0.020405f, -0.173555f, +0.002649f, +0.003189f, +0.001117f, +0.000066f}, + {+0.003227f, +0.010050f, -0.037377f, -0.001735f, +0.000749f, +0.001463f, +0.000329f}, + {-0.003142f, +0.023239f, +0.029929f, -0.001310f, -0.001621f, -0.001432f, -0.000309f}, + {-0.000053f, -0.009013f, +0.034476f, +0.011295f, +0.001661f, -0.001432f, -0.000323f} + }, + { + {+0.000467f, -0.049431f, +0.174512f, +0.052213f, -0.000379f, -0.000628f, +0.000018f}, + {+0.000675f, -0.068601f, +0.232702f, +0.078966f, -0.000387f, +0.001035f, -0.000020f}, + {+0.001138f, +0.009378f, +0.010305f, -0.023458f, -0.000156f, +0.000528f, +0.000103f}, + {+0.001051f, -0.021900f, +0.128073f, +0.018761f, +0.000854f, -0.000050f, +0.000029f}, + {+0.000093f, -0.025010f, +0.130739f, +0.024552f, +0.000063f, +0.000892f, -0.000054f}, + {+0.000652f, +0.002376f, +0.032485f, -0.008631f, -0.000330f, -0.000880f, +0.000082f}, + {-0.002083f, +0.015096f, -0.126566f, -0.008147f, -0.000445f, -0.003114f, +0.000045f}, + {+0.000739f, -0.009298f, +0.065194f, +0.025419f, +0.000920f, +0.003361f, -0.000035f}, + {+0.000258f, -0.000954f, +0.037598f, +0.000767f, +0.001217f, -0.000373f, -0.000075f}, + {+0.002042f, -0.033396f, +0.132174f, +0.040199f, -0.000207f, +0.002266f, -0.000307f}, + {-0.001414f, -0.014255f, -0.004390f, +0.026628f, -0.001532f, +0.000025f, +0.000092f}, + {-0.001280f, -0.002059f, -0.050357f, +0.008951f, -0.001342f, -0.002619f, -0.000087f}, + {-0.001481f, +0.009694f, -0.129207f, -0.015305f, -0.002740f, -0.004354f, +0.000130f}, + {-0.002380f, -0.004808f, -0.023046f, -0.002372f, +0.000308f, -0.001841f, -0.000118f}, + {-0.000907f, -0.004256f, +0.006995f, +0.009818f, -0.000916f, +0.002740f, +0.000058f}, + {+0.000120f, +0.004044f, +0.004424f, -0.021221f, +0.000105f, -0.000062f, +0.000164f} + } +}; + +const float leftHRIRImag_HOA3[BINAURAL_CONVBANDS][16][7]= +{ + { + {-0.007849f, -0.189662f, +0.310868f, +0.002657f, -0.000617f, -0.002064f, +0.000079f}, + {+0.006499f, -0.151239f, +0.295372f, -0.093873f, -0.006692f, +0.006119f, +0.000079f}, + {+0.018156f, -0.036738f, -0.002366f, +0.025349f, -0.033780f, +0.029927f, -0.001760f}, + {-0.001185f, -0.014058f, +0.058055f, -0.022315f, +0.001895f, +0.011251f, -0.001195f}, + {+0.007055f, -0.018561f, +0.015516f, +0.000397f, -0.002631f, +0.012108f, -0.001368f}, + {+0.011104f, -0.020008f, +0.011257f, +0.004500f, -0.004699f, +0.010150f, -0.001162f}, + {+0.015585f, -0.011962f, -0.031150f, +0.029687f, -0.015292f, +0.011837f, -0.001505f}, + {+0.017335f, -0.020280f, -0.052951f, +0.022099f, -0.000113f, +0.011817f, -0.000989f}, + {-0.000629f, -0.006228f, +0.019972f, -0.009129f, +0.003758f, -0.000470f, -0.000086f}, + {-0.000511f, +0.004432f, +0.002064f, -0.001344f, -0.004868f, +0.004917f, -0.000206f}, + {+0.002632f, -0.004614f, +0.009077f, +0.002040f, -0.003834f, +0.003681f, -0.000651f}, + {-0.004163f, +0.016169f, +0.009480f, -0.010379f, +0.001561f, -0.007873f, +0.000482f}, + {-0.007762f, +0.010368f, +0.015510f, +0.005022f, -0.004378f, -0.005468f, +0.000778f}, + {+0.000368f, -0.001287f, +0.003269f, -0.005109f, +0.003959f, -0.005552f, +0.000443f}, + {+0.007637f, -0.013100f, -0.008745f, +0.008594f, +0.001266f, +0.005515f, -0.000260f}, + {+0.003252f, -0.007772f, +0.002549f, -0.008685f, -0.000484f, +0.004879f, -0.000366f} + }, + { + {+0.003434f, +0.064136f, +0.596947f, -0.012925f, -0.012105f, -0.006348f, +0.000052f}, + {-0.006872f, -0.208738f, +0.430749f, +0.043085f, -0.005819f, +0.002350f, -0.000212f}, + {+0.005116f, -0.046396f, -0.012121f, +0.006015f, -0.006889f, +0.045123f, -0.000620f}, + {+0.007618f, +0.010992f, +0.040544f, -0.058428f, +0.022475f, +0.032839f, -0.000538f}, + {+0.005563f, -0.030740f, +0.013780f, +0.007345f, +0.017136f, +0.029360f, -0.000627f}, + {+0.007549f, -0.029664f, +0.026873f, +0.020401f, +0.009762f, +0.021968f, -0.000592f}, + {+0.015806f, -0.023439f, -0.030157f, +0.046969f, -0.012661f, +0.017740f, -0.000763f}, + {+0.013074f, -0.053955f, -0.091847f, +0.002101f, +0.025917f, +0.039011f, -0.000578f}, + {-0.007104f, -0.011492f, -0.004920f, -0.020806f, +0.019718f, +0.010737f, -0.000003f}, + {-0.005199f, +0.005331f, +0.027619f, +0.007498f, -0.002840f, +0.009453f, -0.000077f}, + {+0.010618f, +0.009204f, +0.036117f, +0.025558f, +0.004764f, +0.003733f, -0.000485f}, + {+0.004277f, +0.034749f, +0.019826f, -0.021144f, -0.023168f, -0.026165f, +0.000230f}, + {-0.001540f, +0.026510f, +0.043031f, +0.037355f, -0.014051f, -0.021793f, +0.000440f}, + {-0.000688f, +0.004194f, +0.023981f, +0.008644f, -0.009505f, -0.014330f, +0.000422f}, + {+0.007017f, -0.006121f, -0.001366f, +0.017321f, +0.021133f, +0.020778f, +0.000064f}, + {+0.001808f, -0.009372f, -0.001227f, -0.016870f, -0.000030f, +0.010680f, -0.000179f} + }, + { + {-0.000173f, +0.307249f, +0.141892f, +0.046866f, -0.017599f, -0.001859f, -0.000115f}, + {+0.006073f, +0.167540f, -0.082726f, +0.078686f, -0.003574f, -0.012765f, -0.000025f}, + {-0.025314f, -0.107553f, +0.097665f, -0.029881f, +0.045910f, +0.001205f, +0.001921f}, + {-0.017044f, +0.048408f, -0.041355f, -0.070138f, +0.036357f, +0.026423f, +0.001421f}, + {-0.015939f, +0.012147f, -0.007879f, -0.022686f, +0.043895f, +0.005350f, +0.001553f}, + {-0.021597f, -0.029155f, +0.035998f, +0.007977f, +0.049474f, -0.004557f, +0.001326f}, + {-0.036021f, +0.006766f, +0.026953f, +0.016862f, +0.032122f, -0.017257f, +0.001676f}, + {-0.031554f, -0.089831f, +0.085198f, -0.028444f, +0.031117f, +0.004947f, +0.001188f}, + {+0.007547f, +0.066302f, -0.134055f, -0.013452f, +0.011046f, +0.022691f, -0.000004f}, + {+0.006666f, -0.037732f, +0.068344f, +0.001907f, +0.003786f, +0.000807f, +0.000263f}, + {-0.015403f, -0.000610f, +0.082095f, +0.031996f, +0.007132f, -0.014653f, +0.000743f}, + {-0.006863f, -0.004261f, +0.006302f, +0.005244f, -0.004123f, -0.025567f, -0.000603f}, + {+0.009215f, +0.013483f, +0.000507f, +0.063866f, -0.017193f, -0.008910f, -0.001086f}, + {+0.002117f, +0.062124f, -0.009407f, -0.002622f, -0.025731f, +0.002923f, -0.000603f}, + {-0.014505f, +0.023100f, +0.024324f, +0.006534f, +0.006132f, +0.023845f, +0.000284f}, + {-0.002356f, -0.003682f, -0.002242f, +0.014199f, -0.006597f, +0.001081f, +0.000406f} + }, + { + {+0.000058f, -0.136416f, -0.492276f, -0.001401f, -0.011247f, -0.000834f, +0.000005f}, + {-0.003148f, -0.049667f, -0.450793f, +0.030608f, +0.004189f, +0.011365f, +0.000468f}, + {+0.021455f, -0.091938f, +0.007962f, -0.044085f, +0.049069f, -0.040177f, -0.000546f}, + {+0.020716f, +0.044565f, -0.098169f, -0.074157f, +0.023582f, -0.027619f, -0.000233f}, + {+0.013397f, +0.032973f, -0.049759f, -0.059972f, +0.004251f, -0.031825f, -0.000139f}, + {+0.015377f, +0.014548f, -0.037187f, -0.063775f, +0.035613f, -0.031532f, -0.000014f}, + {+0.017321f, +0.106436f, +0.015760f, -0.036442f, +0.043782f, -0.027117f, +0.000046f}, + {+0.018491f, -0.043347f, +0.081495f, -0.029687f, +0.027445f, -0.012467f, +0.000037f}, + {+0.002143f, +0.058964f, -0.151480f, -0.022542f, -0.017894f, -0.000117f, +0.000011f}, + {-0.002501f, -0.051566f, +0.076858f, +0.024061f, +0.010190f, -0.002223f, -0.000059f}, + {+0.004455f, +0.004621f, +0.022586f, -0.008980f, +0.004779f, -0.014720f, +0.000296f}, + {+0.010379f, -0.031260f, -0.084411f, -0.011079f, +0.044526f, +0.004500f, +0.000139f}, + {-0.010110f, -0.002952f, +0.019419f, +0.073054f, +0.016238f, +0.023041f, +0.000177f}, + {-0.005833f, +0.056756f, -0.003891f, +0.011659f, -0.013338f, +0.016593f, -0.000291f}, + {+0.005419f, +0.040607f, +0.004132f, -0.013323f, -0.017875f, -0.003126f, -0.000447f}, + {-0.004253f, +0.020851f, +0.031947f, +0.033527f, +0.001452f, -0.004281f, -0.000039f} + }, + { + {+0.000232f, -0.196424f, -0.385415f, -0.022712f, -0.006855f, +0.000856f, +0.000126f}, + {-0.000418f, -0.175457f, -0.245702f, -0.013319f, +0.015788f, +0.013106f, -0.000327f}, + {-0.001154f, +0.007098f, -0.063563f, -0.017231f, -0.005626f, -0.013559f, -0.001143f}, + {-0.012555f, -0.174488f, +0.237964f, -0.039418f, -0.002349f, -0.016946f, -0.001147f}, + {-0.003784f, -0.065353f, +0.070894f, -0.006390f, -0.057332f, -0.007117f, -0.001233f}, + {+0.000349f, -0.048045f, +0.027724f, -0.012524f, -0.033626f, +0.005520f, -0.001111f}, + {+0.017541f, +0.092792f, +0.030184f, -0.047810f, +0.016410f, -0.003144f, -0.001400f}, + {-0.000437f, -0.002996f, -0.013522f, +0.006474f, +0.030405f, -0.007597f, -0.001046f}, + {-0.007428f, -0.049136f, -0.023268f, -0.015781f, -0.011003f, -0.014398f, +0.000182f}, + {+0.001481f, +0.033593f, +0.004295f, -0.004592f, +0.021205f, +0.000050f, -0.000263f}, + {+0.005354f, +0.018801f, -0.011774f, +0.002287f, -0.027282f, +0.010347f, -0.000769f}, + {-0.009152f, -0.006626f, -0.078942f, -0.000242f, +0.021966f, +0.021963f, +0.000453f}, + {+0.009690f, +0.055165f, +0.045330f, -0.032221f, +0.065784f, +0.004359f, +0.001062f}, + {+0.010862f, +0.081924f, -0.069800f, -0.013181f, +0.045093f, -0.014171f, +0.000806f}, + {+0.005800f, +0.042160f, -0.003294f, -0.036254f, +0.013693f, -0.023545f, +0.000070f}, + {+0.009050f, +0.025948f, +0.028277f, -0.000043f, +0.018071f, -0.006021f, -0.000268f} + }, + { + {-0.001778f, +0.223111f, +0.243284f, +0.023691f, -0.004197f, +0.005091f, -0.000088f}, + {+0.002088f, +0.146779f, +0.282563f, +0.032455f, -0.005584f, -0.004320f, -0.000383f}, + {-0.012406f, +0.076657f, +0.054535f, +0.019126f, -0.004735f, +0.003766f, +0.000879f}, + {-0.000400f, +0.009278f, +0.480121f, +0.005043f, +0.003008f, +0.000400f, +0.000750f}, + {-0.000331f, -0.023120f, +0.141880f, +0.021964f, -0.032304f, +0.009784f, +0.000503f}, + {-0.005941f, -0.021748f, +0.079982f, +0.022467f, -0.025801f, +0.013174f, +0.000364f}, + {-0.027576f, -0.056867f, -0.044804f, -0.025088f, +0.021454f, +0.021391f, +0.000258f}, + {+0.000666f, +0.004812f, -0.031881f, -0.003249f, +0.015597f, -0.005884f, +0.000399f}, + {+0.001918f, -0.036904f, +0.028920f, -0.012401f, -0.003927f, -0.013129f, -0.000289f}, + {-0.004733f, +0.044313f, +0.017544f, -0.019033f, +0.000125f, -0.005854f, +0.000158f}, + {-0.003306f, -0.007736f, -0.036072f, +0.013098f, -0.016743f, +0.014288f, -0.000093f}, + {+0.002198f, +0.032947f, -0.025622f, +0.013714f, -0.002822f, +0.006481f, -0.000426f}, + {-0.010347f, +0.044911f, +0.109159f, -0.005157f, +0.028906f, -0.016894f, -0.000962f}, + {-0.012573f, -0.001057f, -0.086903f, -0.008620f, +0.026300f, -0.014200f, -0.000105f}, + {-0.006637f, +0.003910f, +0.011665f, +0.001170f, +0.021670f, -0.012737f, +0.000541f}, + {-0.006125f, -0.002545f, +0.021834f, -0.006301f, +0.010358f, -0.000879f, +0.000147f} + }, + { + {+0.001661f, +0.044798f, +0.497958f, +0.007682f, +0.001920f, +0.000678f, -0.000069f}, + {-0.001629f, +0.057245f, +0.418929f, +0.026166f, -0.007984f, -0.010658f, +0.000615f}, + {+0.009494f, -0.023460f, +0.158416f, +0.022301f, +0.001622f, +0.009939f, +0.000314f}, + {+0.005164f, +0.249867f, +0.124203f, +0.025636f, +0.005748f, +0.000660f, +0.000601f}, + {-0.003519f, +0.029885f, +0.075655f, +0.003349f, -0.004214f, +0.004704f, +0.000885f}, + {-0.000755f, +0.015219f, +0.048678f, +0.020834f, -0.012934f, +0.003014f, +0.000805f}, + {+0.006115f, -0.134583f, -0.038858f, +0.039498f, -0.010231f, +0.019073f, +0.001215f}, + {-0.006065f, +0.022158f, +0.017704f, -0.018410f, +0.001416f, -0.001222f, +0.000596f}, + {+0.002762f, -0.060790f, +0.053349f, +0.001174f, -0.011245f, -0.011658f, -0.000102f}, + {+0.003442f, -0.021974f, +0.051257f, -0.015449f, +0.006060f, -0.001236f, +0.000282f}, + {-0.000460f, -0.017973f, -0.022112f, -0.000478f, -0.004836f, +0.011224f, +0.000713f}, + {+0.002907f, -0.013619f, +0.015874f, +0.006198f, -0.002588f, +0.007083f, -0.000030f}, + {+0.005990f, +0.054285f, +0.021602f, +0.028748f, +0.000862f, -0.009091f, -0.000327f}, + {+0.007170f, -0.073188f, -0.020928f, -0.013170f, -0.006551f, +0.016420f, -0.000711f}, + {+0.002439f, +0.025659f, -0.013787f, +0.013123f, +0.004380f, -0.000469f, -0.000567f}, + {+0.001480f, +0.021027f, -0.001495f, -0.003191f, -0.008078f, +0.005950f, +0.000028f} + }, + { + {+0.000593f, -0.236478f, +0.062751f, -0.031574f, +0.001932f, +0.000475f, +0.000125f}, + {+0.001112f, -0.219741f, -0.045964f, -0.033082f, -0.012846f, -0.010238f, +0.000058f}, + {-0.000288f, -0.043345f, +0.129386f, +0.006449f, +0.014950f, +0.014326f, -0.000484f}, + {-0.000954f, -0.177421f, -0.465052f, -0.016332f, +0.003856f, -0.000880f, -0.000851f}, + {+0.006500f, -0.076420f, -0.126017f, -0.020000f, +0.005284f, +0.001453f, -0.000605f}, + {+0.005990f, +0.031405f, +0.037913f, -0.013960f, -0.013903f, +0.004807f, -0.000506f}, + {+0.015687f, +0.021104f, +0.113959f, +0.012439f, -0.039996f, +0.000223f, -0.000453f}, + {-0.000473f, +0.041740f, +0.044827f, -0.015459f, -0.002343f, -0.005928f, -0.000432f}, + {+0.001060f, -0.019108f, +0.067790f, +0.019182f, +0.001142f, -0.000990f, +0.000595f}, + {+0.003359f, -0.055575f, +0.011279f, -0.025875f, +0.003999f, -0.001129f, -0.000287f}, + {-0.002395f, +0.004105f, -0.011084f, -0.010291f, -0.008377f, -0.009379f, -0.000116f}, + {-0.000216f, -0.045114f, -0.020852f, -0.005913f, -0.002893f, +0.004932f, +0.000316f}, + {+0.003783f, -0.058127f, -0.116863f, +0.015414f, +0.004459f, +0.012101f, +0.001164f}, + {+0.001940f, -0.000953f, +0.073317f, +0.000380f, -0.013800f, +0.008255f, +0.000500f}, + {-0.001348f, +0.013472f, -0.048338f, -0.016392f, -0.002728f, +0.008729f, -0.000177f}, + {-0.002293f, +0.042225f, +0.020761f, -0.007674f, -0.021144f, -0.001111f, -0.000047f} + }, + { + {-0.001881f, +0.104692f, -0.437628f, +0.010124f, -0.004119f, +0.002798f, -0.000007f}, + {-0.000985f, +0.054923f, -0.473910f, +0.002045f, -0.002078f, -0.007573f, -0.000638f}, + {-0.004261f, +0.068963f, -0.026476f, +0.007698f, +0.005161f, +0.016700f, -0.000087f}, + {-0.000472f, -0.135013f, -0.565164f, -0.012751f, +0.014398f, -0.005967f, -0.000128f}, + {-0.002219f, +0.017222f, -0.277363f, +0.009247f, +0.012340f, +0.001014f, -0.000724f}, + {-0.002529f, -0.014422f, +0.078148f, -0.013292f, -0.001185f, -0.005919f, -0.000538f}, + {-0.012201f, +0.079026f, +0.174608f, -0.053111f, -0.028818f, -0.008327f, -0.001164f}, + {+0.008807f, +0.024623f, -0.021642f, +0.012326f, +0.005481f, -0.005376f, -0.000217f}, + {-0.004625f, +0.095195f, -0.032818f, +0.006017f, -0.007642f, +0.021939f, -0.000335f}, + {-0.005561f, +0.011254f, -0.069687f, -0.007241f, -0.007441f, +0.000401f, -0.000318f}, + {+0.004316f, -0.006517f, -0.015791f, -0.011842f, -0.000856f, -0.009342f, -0.000485f}, + {-0.004504f, +0.028032f, -0.066155f, -0.028674f, +0.003536f, +0.000815f, -0.000257f}, + {-0.007052f, -0.039724f, -0.103443f, -0.003110f, +0.009274f, +0.021142f, -0.000615f}, + {-0.006271f, +0.036829f, +0.058440f, -0.010721f, -0.009936f, +0.008632f, +0.000238f}, + {+0.001946f, -0.003377f, -0.061145f, -0.011028f, -0.000124f, +0.004200f, +0.000756f}, + {+0.005945f, +0.005663f, +0.029383f, -0.007265f, -0.007601f, -0.001858f, +0.000153f} + }, + { + {+0.001608f, +0.200304f, -0.287352f, +0.023568f, -0.012646f, -0.001792f, -0.000110f}, + {-0.000873f, +0.220254f, -0.233692f, +0.013980f, +0.019805f, +0.013042f, +0.000254f}, + {+0.005248f, +0.005267f, -0.097062f, +0.009788f, -0.031921f, -0.004981f, +0.000066f}, + {-0.006026f, +0.165134f, -0.129644f, +0.024946f, +0.039434f, +0.008272f, +0.000680f}, + {-0.004821f, +0.081844f, -0.161841f, +0.022252f, +0.006155f, +0.007528f, +0.000769f}, + {-0.002549f, -0.058108f, +0.046846f, -0.003059f, -0.000697f, -0.000618f, +0.000547f}, + {-0.007110f, -0.091546f, -0.012640f, -0.034041f, -0.004692f, +0.010014f, +0.000815f}, + {-0.004608f, +0.001433f, -0.064603f, -0.001817f, +0.036470f, +0.013459f, +0.000154f}, + {+0.000858f, +0.011046f, -0.117929f, +0.000666f, -0.010929f, +0.023558f, -0.000529f}, + {+0.000262f, -0.000025f, -0.103739f, -0.005447f, -0.009620f, +0.007360f, +0.000558f}, + {-0.000017f, +0.006779f, +0.001324f, -0.018054f, +0.004434f, +0.000980f, +0.000147f}, + {+0.001773f, +0.058408f, -0.050166f, -0.036957f, -0.028180f, -0.014311f, +0.000042f}, + {-0.002142f, +0.052174f, +0.014142f, +0.000352f, +0.005846f, +0.011380f, -0.000521f}, + {+0.002509f, -0.018918f, -0.023498f, -0.007300f, -0.010118f, -0.001050f, -0.000485f}, + {-0.001969f, +0.016255f, -0.030569f, -0.007966f, +0.008209f, +0.001626f, -0.000336f}, + {-0.005908f, -0.042236f, +0.002979f, -0.003313f, -0.002114f, +0.001176f, -0.000242f} + }, + { + {-0.002283f, -0.190264f, +0.317807f, -0.041862f, -0.013710f, -0.009182f, +0.000055f}, + {+0.004396f, -0.188305f, +0.367265f, -0.016356f, +0.017064f, +0.018999f, +0.000459f}, + {-0.006914f, -0.060402f, +0.070487f, -0.038753f, -0.028167f, -0.025907f, +0.000326f}, + {+0.011485f, -0.111924f, +0.257419f, +0.027696f, +0.043074f, +0.023043f, -0.000112f}, + {+0.006481f, -0.106988f, +0.078641f, +0.010369f, +0.020637f, +0.004268f, +0.000552f}, + {+0.002442f, -0.002203f, -0.021242f, +0.008312f, -0.010172f, +0.001226f, +0.000290f}, + {+0.015369f, -0.049094f, -0.176897f, +0.009396f, -0.018227f, -0.013839f, +0.000931f}, + {-0.002747f, -0.037808f, +0.016824f, +0.000881f, +0.041844f, +0.014131f, +0.000188f}, + {+0.002663f, -0.042773f, -0.067404f, -0.021799f, -0.000291f, -0.007144f, +0.000772f}, + {+0.002855f, -0.010467f, -0.079956f, -0.016808f, -0.003165f, +0.008992f, +0.000182f}, + {-0.001899f, -0.008400f, +0.030905f, -0.010609f, +0.001047f, -0.001953f, +0.000193f}, + {+0.005525f, +0.032964f, -0.043242f, -0.021771f, -0.050726f, -0.017866f, +0.000160f}, + {+0.009763f, -0.025562f, +0.101453f, -0.004032f, +0.007303f, -0.009460f, +0.000915f}, + {+0.003132f, -0.026920f, -0.054686f, +0.011398f, +0.001945f, -0.016836f, +0.000242f}, + {+0.003754f, -0.004524f, +0.013916f, -0.011236f, +0.007995f, +0.003567f, -0.000513f}, + {+0.002200f, -0.015957f, -0.044466f, +0.002366f, +0.002169f, -0.002036f, -0.000098f} + }, + { + {+0.003609f, -0.124165f, +0.450240f, -0.011960f, +0.001814f, -0.000226f, +0.000090f}, + {-0.005252f, -0.076277f, +0.547236f, -0.002862f, -0.003045f, +0.000456f, -0.000415f}, + {+0.006808f, -0.053114f, +0.098672f, -0.009249f, +0.001674f, -0.012447f, -0.000058f}, + {-0.008375f, -0.004906f, +0.362870f, -0.014974f, -0.000367f, -0.002802f, -0.000478f}, + {-0.002228f, +0.003473f, +0.205137f, -0.023272f, -0.006215f, -0.017134f, -0.001010f}, + {-0.000571f, +0.025991f, -0.026818f, -0.005091f, -0.013779f, -0.007778f, -0.000473f}, + {-0.003735f, -0.105491f, -0.279191f, -0.027929f, -0.010252f, -0.020097f, -0.001156f}, + {-0.001217f, +0.071835f, +0.154430f, -0.011855f, +0.002667f, -0.002826f, +0.000054f}, + {+0.000480f, -0.020383f, -0.034553f, -0.028592f, -0.016234f, -0.022065f, +0.000065f}, + {+0.000803f, +0.045105f, -0.000768f, -0.011625f, -0.005524f, -0.002577f, -0.000868f}, + {-0.003690f, +0.013195f, +0.053141f, -0.016549f, -0.007503f, -0.003226f, +0.000154f}, + {-0.004956f, -0.069593f, -0.135765f, -0.005671f, -0.003950f, +0.004994f, -0.000202f}, + {-0.001284f, -0.058847f, +0.070425f, -0.007215f, -0.008366f, -0.028907f, -0.000284f}, + {-0.003455f, -0.008730f, -0.036217f, -0.008454f, -0.004655f, -0.017679f, +0.000014f}, + {-0.005924f, -0.006414f, +0.021672f, -0.012342f, -0.002642f, -0.000940f, +0.000569f}, + {+0.000350f, +0.002979f, -0.028344f, +0.001530f, -0.005199f, -0.000823f, +0.000541f} + }, + { + {-0.002595f, +0.231505f, -0.059475f, +0.031323f, +0.000811f, +0.002997f, -0.000105f}, + {+0.000920f, +0.251923f, +0.021212f, +0.041245f, +0.002087f, -0.009892f, -0.000208f}, + {-0.001905f, +0.088975f, -0.095092f, +0.000614f, -0.000732f, +0.001651f, -0.000526f}, + {+0.001829f, +0.162263f, +0.072547f, +0.010691f, -0.006275f, -0.010152f, +0.000202f}, + {-0.001074f, +0.127675f, +0.024806f, -0.004697f, -0.015653f, -0.013365f, -0.000181f}, + {+0.001734f, +0.018512f, -0.027144f, -0.018621f, -0.006091f, -0.003330f, -0.000128f}, + {-0.010389f, -0.084487f, -0.226334f, -0.035829f, -0.004528f, -0.009666f, -0.000481f}, + {+0.009032f, +0.061811f, +0.096836f, +0.009505f, -0.012954f, +0.000064f, -0.000350f}, + {-0.002417f, -0.004918f, -0.012012f, -0.022845f, -0.015983f, -0.009882f, -0.000808f}, + {-0.003024f, +0.039172f, +0.013326f, -0.000801f, -0.001560f, -0.016627f, +0.000275f}, + {+0.007452f, +0.030058f, -0.016768f, +0.006774f, -0.012188f, +0.006626f, -0.000198f}, + {-0.004613f, -0.042919f, -0.140928f, -0.003562f, +0.014757f, -0.000165f, +0.000013f}, + {-0.012233f, +0.049543f, -0.035377f, +0.000625f, -0.000981f, -0.023350f, -0.000508f}, + {-0.000298f, -0.004223f, -0.034114f, -0.011313f, -0.011180f, -0.002456f, -0.000276f}, + {+0.003105f, +0.000900f, -0.043146f, +0.007921f, -0.009306f, +0.001719f, +0.000197f}, + {+0.000056f, -0.017410f, +0.012442f, -0.014149f, -0.007345f, +0.007077f, -0.000235f} + }, + { + {-0.000105f, -0.028242f, -0.490151f, -0.006013f, -0.000405f, +0.003651f, -0.000044f}, + {+0.004273f, -0.091012f, -0.512346f, -0.009209f, +0.006038f, -0.006005f, +0.000395f}, + {-0.003775f, -0.013142f, -0.264416f, -0.018230f, +0.003223f, +0.013630f, +0.000320f}, + {+0.000877f, -0.058724f, -0.212378f, -0.000299f, -0.004217f, -0.010691f, +0.000326f}, + {-0.000849f, -0.003925f, -0.168919f, -0.006611f, -0.017126f, -0.002900f, +0.001110f}, + {-0.003390f, -0.030951f, -0.055595f, -0.010449f, +0.001866f, +0.002874f, +0.000333f}, + {+0.007610f, +0.216878f, +0.101973f, -0.006828f, -0.006093f, +0.002417f, +0.001281f}, + {-0.005247f, -0.092910f, -0.082840f, +0.000173f, -0.000662f, +0.004149f, -0.000070f}, + {-0.003825f, +0.054499f, +0.068119f, -0.004337f, -0.003343f, +0.005033f, +0.000389f}, + {-0.001521f, +0.011283f, -0.019235f, +0.007889f, -0.004145f, -0.013462f, +0.000877f}, + {-0.002597f, -0.017853f, -0.077262f, +0.005729f, -0.000186f, +0.009721f, -0.000537f}, + {+0.007806f, +0.173983f, +0.083663f, +0.017989f, +0.010736f, -0.004214f, +0.000162f}, + {+0.007527f, +0.139189f, +0.016947f, +0.007434f, +0.010151f, -0.003075f, +0.000600f}, + {+0.001257f, +0.034327f, +0.000584f, -0.010653f, -0.017435f, +0.012041f, +0.000506f}, + {+0.003054f, -0.012901f, -0.072559f, -0.003234f, -0.002533f, +0.004886f, -0.000554f}, + {-0.001440f, -0.001177f, +0.041342f, -0.035758f, -0.008227f, +0.013542f, -0.000605f} + }, + { + {+0.000534f, -0.191712f, -0.256462f, -0.027639f, -0.000869f, +0.002740f, +0.000150f}, + {-0.004711f, -0.189644f, -0.323706f, -0.035566f, +0.003931f, -0.001774f, +0.000023f}, + {+0.005338f, -0.132584f, -0.123062f, -0.006922f, +0.001908f, +0.014249f, +0.000418f}, + {-0.001514f, -0.096895f, -0.149462f, -0.012634f, -0.002553f, -0.008145f, -0.000239f}, + {+0.004455f, -0.078939f, -0.109890f, +0.030175f, -0.054100f, +0.020621f, -0.000317f}, + {+0.001954f, -0.037369f, -0.070319f, +0.012542f, -0.001373f, +0.004905f, +0.000105f}, + {+0.009597f, +0.091443f, +0.213955f, +0.082122f, -0.078271f, +0.037887f, -0.000021f}, + {-0.006956f, -0.041842f, -0.097106f, -0.047918f, +0.046573f, -0.019063f, +0.000497f}, + {+0.009351f, +0.017534f, +0.036624f, +0.019555f, -0.006998f, +0.006656f, +0.000487f}, + {+0.006094f, -0.025598f, -0.007412f, +0.043196f, -0.046727f, +0.015901f, -0.000824f}, + {-0.003579f, -0.015919f, -0.063537f, -0.024273f, +0.033493f, -0.010473f, +0.000646f}, + {+0.003786f, +0.079431f, +0.211573f, +0.049145f, -0.046596f, +0.025127f, -0.000019f}, + {+0.013003f, +0.024809f, +0.097034f, +0.057786f, -0.052429f, +0.039258f, -0.000048f}, + {+0.003464f, +0.021931f, -0.011529f, +0.044162f, -0.055245f, +0.027731f, -0.000194f}, + {-0.005197f, -0.016476f, -0.014479f, -0.033521f, +0.033687f, -0.015973f, -0.000043f}, + {+0.001962f, +0.024503f, +0.005662f, -0.050924f, +0.039002f, -0.020531f, +0.000668f} + }, + { + {+0.001553f, +0.146963f, +0.302141f, +0.026379f, +0.000840f, +0.000346f, -0.000061f}, + {+0.001717f, +0.217569f, +0.292571f, +0.015852f, -0.000463f, -0.005375f, -0.000261f}, + {-0.004635f, +0.115185f, +0.259233f, +0.023669f, +0.003813f, +0.006664f, -0.000481f}, + {+0.003717f, +0.087889f, +0.084589f, -0.005335f, -0.001673f, -0.001669f, -0.000199f}, + {-0.004523f, +0.042980f, +0.118037f, +0.067124f, -0.037615f, +0.021729f, -0.000920f}, + {-0.000118f, +0.066640f, +0.036964f, +0.011214f, -0.005413f, +0.005046f, -0.000256f}, + {-0.021275f, -0.088041f, +0.115907f, +0.129339f, -0.055323f, +0.030816f, -0.001195f}, + {+0.013274f, +0.085064f, +0.010644f, -0.082487f, +0.025821f, -0.022331f, +0.000007f}, + {-0.003747f, -0.079218f, -0.067175f, +0.016473f, -0.003161f, +0.005630f, -0.000496f}, + {-0.004932f, -0.009594f, +0.051342f, +0.075947f, -0.023028f, +0.024066f, -0.000426f}, + {+0.004863f, +0.054121f, +0.015535f, -0.051655f, +0.010816f, -0.015566f, +0.000550f}, + {-0.014845f, -0.103176f, +0.080073f, +0.073893f, -0.033782f, +0.019073f, -0.000223f}, + {-0.020172f, -0.123083f, +0.025247f, +0.077152f, -0.044505f, +0.035317f, -0.000427f}, + {-0.009806f, -0.027794f, -0.010006f, +0.092919f, -0.036980f, +0.021231f, -0.000596f}, + {+0.003438f, +0.040179f, +0.056704f, -0.041600f, +0.022592f, -0.014077f, +0.000577f}, + {-0.000596f, -0.015506f, -0.049450f, -0.036447f, +0.050092f, -0.018485f, +0.000333f} + }, + { + {-0.002422f, +0.059309f, +0.454757f, +0.012657f, +0.002371f, -0.003051f, -0.000109f}, + {-0.000972f, +0.089012f, +0.471174f, -0.002615f, -0.003776f, +0.002449f, -0.000000f}, + {+0.004981f, +0.029440f, +0.402898f, +0.009542f, +0.008586f, -0.005243f, -0.000150f}, + {-0.003934f, +0.068475f, +0.154745f, -0.020530f, -0.010063f, +0.011466f, +0.000228f}, + {+0.001934f, +0.008674f, +0.222726f, +0.009188f, +0.005025f, -0.009762f, +0.000728f}, + {+0.001313f, +0.027392f, +0.137224f, -0.014991f, -0.001664f, +0.004118f, -0.000127f}, + {+0.014825f, -0.131128f, +0.122638f, +0.075503f, +0.018816f, -0.031020f, +0.000515f}, + {-0.011235f, +0.084345f, -0.009674f, -0.055727f, -0.015906f, +0.017483f, -0.000662f}, + {-0.005861f, -0.019533f, -0.082227f, +0.006916f, +0.001847f, +0.000758f, -0.000202f}, + {+0.002580f, -0.007477f, +0.078927f, +0.037096f, +0.017242f, -0.002675f, +0.001011f}, + {-0.006105f, +0.029808f, +0.069762f, -0.048809f, -0.026042f, +0.019077f, -0.001200f}, + {+0.007044f, -0.114937f, -0.015102f, +0.066422f, +0.026713f, -0.021148f, +0.000080f}, + {+0.001891f, -0.137403f, -0.008770f, +0.069524f, +0.011781f, -0.014633f, +0.000357f}, + {+0.011650f, -0.048431f, -0.022767f, +0.070071f, +0.022558f, -0.031545f, +0.000766f}, + {-0.004098f, +0.038606f, +0.034870f, -0.023526f, -0.016759f, +0.018251f, -0.000137f}, + {-0.002804f, -0.007684f, -0.077297f, +0.002580f, +0.008066f, +0.011234f, -0.000920f} + }, + { + {+0.001243f, -0.224613f, -0.012233f, -0.028833f, +0.002009f, -0.001573f, +0.000139f}, + {+0.003295f, -0.291789f, -0.088662f, -0.035172f, -0.002488f, +0.006098f, +0.000188f}, + {-0.004422f, -0.109655f, +0.194382f, -0.015495f, -0.002943f, -0.012500f, +0.000375f}, + {-0.000983f, -0.060160f, +0.019095f, +0.002163f, -0.009795f, +0.008264f, +0.000115f}, + {-0.001589f, -0.082539f, +0.072974f, -0.012423f, -0.001200f, -0.017036f, +0.000476f}, + {-0.002963f, +0.004891f, +0.170906f, +0.002191f, -0.010678f, -0.003313f, +0.000249f}, + {+0.000920f, -0.061561f, +0.127515f, -0.015016f, +0.024498f, -0.020689f, +0.000844f}, + {+0.008002f, -0.061962f, -0.190966f, -0.006417f, -0.015050f, +0.014959f, +0.000195f}, + {+0.005173f, +0.156470f, +0.092158f, +0.003397f, +0.001560f, -0.000232f, +0.000368f}, + {-0.003501f, +0.012214f, +0.075482f, -0.005243f, -0.002154f, -0.020806f, -0.000155f}, + {+0.008351f, +0.016040f, +0.026286f, -0.012254f, -0.009563f, +0.018921f, -0.000087f}, + {+0.011531f, -0.098810f, -0.081896f, -0.003554f, +0.022476f, -0.012750f, +0.000309f}, + {+0.015089f, -0.023102f, -0.004189f, -0.005266f, +0.027232f, -0.009300f, +0.000031f}, + {-0.005756f, -0.105164f, -0.121008f, -0.004928f, +0.021585f, -0.023954f, +0.000170f}, + {+0.006045f, -0.003955f, -0.049276f, -0.014402f, -0.022434f, +0.010508f, -0.000583f}, + {+0.004951f, +0.038486f, -0.010450f, +0.009920f, -0.000470f, +0.019584f, +0.000126f} + }, + { + {-0.000785f, +0.071187f, -0.465505f, +0.008818f, +0.000726f, -0.000365f, -0.000008f}, + {-0.003977f, +0.050770f, -0.585842f, +0.009869f, -0.005833f, +0.006502f, +0.000042f}, + {+0.001056f, +0.090926f, -0.134707f, -0.000269f, +0.002753f, -0.009764f, +0.000032f}, + {+0.004617f, -0.003374f, -0.109444f, +0.009037f, -0.005531f, +0.005999f, -0.000201f}, + {+0.003957f, +0.051265f, -0.172281f, +0.013706f, +0.002364f, -0.006848f, -0.000853f}, + {+0.001658f, +0.038903f, +0.082157f, -0.000716f, -0.007295f, -0.006209f, +0.000121f}, + {-0.008525f, +0.078895f, -0.017870f, -0.012860f, +0.021118f, -0.002045f, -0.000829f}, + {-0.004920f, +0.015338f, -0.238590f, -0.001845f, -0.024647f, +0.009983f, +0.000767f}, + {+0.004676f, +0.105685f, +0.151514f, -0.014114f, -0.002475f, +0.001016f, +0.000176f}, + {+0.004034f, +0.022836f, +0.044207f, -0.014588f, -0.008672f, -0.010817f, -0.000710f}, + {-0.002168f, +0.116093f, -0.070756f, -0.031832f, +0.022730f, -0.006607f, +0.001442f}, + {-0.016149f, -0.002381f, -0.087859f, -0.020749f, -0.000196f, +0.003994f, -0.000292f}, + {-0.004050f, +0.044943f, -0.009330f, -0.045828f, +0.060443f, -0.016203f, -0.000276f}, + {-0.005468f, -0.113575f, -0.136984f, +0.012815f, +0.014267f, -0.005446f, -0.000965f}, + {-0.002865f, +0.038861f, -0.055190f, -0.024730f, -0.004192f, -0.008756f, +0.000421f}, + {-0.000981f, +0.013622f, +0.075658f, -0.024512f, +0.006801f, +0.006189f, +0.000849f} + }, + { + {+0.001239f, +0.191379f, -0.284220f, +0.019946f, +0.003893f, +0.000657f, -0.000100f}, + {+0.001075f, +0.276377f, -0.283032f, +0.022859f, -0.009082f, +0.003365f, -0.000240f}, + {+0.001241f, -0.011637f, -0.274203f, +0.004930f, +0.017890f, -0.002705f, -0.000186f}, + {-0.000041f, -0.018968f, -0.133490f, +0.005016f, -0.007152f, +0.003102f, -0.000080f}, + {-0.003640f, +0.003961f, -0.218334f, +0.022294f, +0.024633f, +0.009211f, +0.000017f}, + {+0.000298f, -0.117839f, -0.145841f, -0.001220f, -0.000336f, -0.003714f, -0.000241f}, + {+0.003359f, +0.080035f, -0.097693f, -0.029470f, +0.008235f, -0.002678f, -0.000275f}, + {+0.000294f, +0.114223f, -0.072671f, +0.021916f, -0.033236f, -0.003728f, -0.000589f}, + {-0.009708f, -0.120433f, -0.071254f, -0.014746f, -0.008719f, -0.006424f, -0.000344f}, + {-0.001269f, -0.046754f, -0.003954f, +0.016916f, +0.003171f, +0.006009f, +0.000388f}, + {-0.012341f, +0.075476f, -0.093630f, -0.049195f, +0.003798f, -0.028589f, -0.000568f}, + {+0.002325f, +0.131285f, +0.044269f, -0.020071f, -0.028957f, -0.007233f, -0.000174f}, + {-0.019754f, +0.109314f, +0.101468f, -0.085502f, +0.027617f, -0.021611f, +0.000269f}, + {+0.013359f, +0.074152f, +0.055568f, +0.013092f, +0.010223f, +0.008649f, +0.000405f}, + {-0.002438f, +0.089734f, +0.050761f, -0.012420f, +0.004906f, -0.005249f, +0.000350f}, + {-0.007586f, -0.002478f, +0.072281f, -0.033398f, -0.009508f, -0.010318f, -0.000512f} + }, + { + {+0.000051f, -0.155265f, +0.261455f, -0.025571f, +0.008165f, -0.000717f, +0.000066f}, + {+0.001630f, -0.169186f, +0.393845f, -0.036438f, +0.008078f, -0.006680f, +0.000028f}, + {+0.000337f, -0.079130f, -0.143638f, -0.006564f, +0.000925f, +0.007661f, -0.000153f}, + {-0.007150f, -0.020081f, -0.070013f, -0.006603f, +0.004172f, -0.008362f, +0.000222f}, + {-0.002015f, -0.099180f, -0.044872f, +0.014401f, +0.021736f, +0.002693f, +0.000644f}, + {+0.000309f, -0.013186f, -0.262927f, +0.008874f, -0.004250f, -0.004267f, -0.000133f}, + {+0.004143f, +0.028994f, -0.084453f, +0.022748f, -0.010859f, +0.000658f, +0.000717f}, + {+0.001064f, -0.067881f, +0.148877f, -0.004518f, -0.009488f, -0.012696f, -0.000549f}, + {+0.004788f, -0.075563f, -0.198295f, +0.012604f, -0.014432f, -0.006906f, -0.000228f}, + {-0.000822f, +0.008456f, -0.066147f, +0.014101f, -0.000566f, +0.009494f, +0.000293f}, + {+0.017337f, -0.086056f, +0.025001f, -0.029312f, -0.013841f, -0.014057f, -0.001264f}, + {+0.007897f, +0.009827f, +0.121822f, +0.034941f, -0.036994f, -0.008486f, +0.000358f}, + {+0.020805f, -0.117331f, +0.232026f, -0.011502f, -0.017947f, -0.002610f, -0.000143f}, + {-0.009701f, +0.046825f, +0.183213f, -0.000834f, -0.001503f, +0.018015f, +0.000694f}, + {+0.000783f, -0.037442f, +0.178684f, -0.005879f, -0.013166f, +0.009162f, -0.000528f}, + {+0.011722f, -0.002350f, -0.004545f, -0.002405f, -0.010888f, -0.012285f, -0.000539f} + }, + { + {-0.002527f, -0.041067f, +0.437759f, -0.007129f, +0.005781f, -0.001019f, +0.000019f}, + {-0.001146f, -0.101283f, +0.529356f, -0.017671f, +0.006206f, -0.006544f, +0.000244f}, + {-0.001251f, +0.075658f, +0.077822f, +0.003804f, -0.004672f, +0.009631f, +0.000203f}, + {+0.005863f, +0.094796f, +0.059519f, -0.004478f, -0.006540f, -0.013700f, +0.000009f}, + {+0.007285f, +0.061623f, +0.137831f, +0.001381f, +0.008080f, -0.004592f, -0.000290f}, + {-0.001291f, +0.109556f, -0.079837f, +0.019787f, -0.002279f, +0.002518f, +0.000266f}, + {-0.005084f, +0.124814f, +0.081853f, +0.002734f, -0.001840f, +0.008835f, -0.000121f}, + {+0.004182f, -0.049684f, +0.191667f, -0.005192f, +0.001015f, +0.000119f, +0.000867f}, + {+0.001163f, +0.010105f, -0.120678f, +0.012616f, +0.002928f, +0.005188f, +0.000510f}, + {+0.000188f, -0.004985f, -0.107319f, -0.006725f, -0.000249f, +0.007191f, -0.000210f}, + {-0.003857f, -0.076698f, +0.118389f, +0.002946f, -0.004928f, +0.024526f, +0.001114f}, + {-0.000953f, -0.010379f, +0.119279f, +0.017060f, -0.013659f, +0.010888f, +0.000001f}, + {+0.003450f, -0.223022f, +0.159256f, +0.028244f, -0.004310f, +0.024009f, -0.000105f}, + {-0.001797f, +0.007725f, +0.102409f, -0.028265f, +0.001228f, +0.008448f, -0.000702f}, + {+0.005477f, -0.062622f, +0.122632f, -0.002666f, -0.020475f, +0.004011f, -0.000036f}, + {-0.006490f, -0.074102f, -0.080569f, +0.003599f, -0.001484f, +0.001399f, +0.000668f} + }, + { + {+0.002605f, +0.217915f, +0.017254f, +0.026685f, +0.001074f, +0.001696f, -0.000027f}, + {-0.000507f, +0.280145f, -0.055434f, +0.036463f, -0.007121f, +0.000445f, -0.000151f}, + {-0.002225f, +0.031540f, +0.137049f, +0.003402f, +0.001446f, +0.006851f, +0.000259f}, + {+0.003339f, +0.029607f, +0.111028f, +0.012934f, -0.015664f, -0.008267f, -0.000233f}, + {-0.005138f, +0.044216f, +0.166568f, +0.008876f, -0.001389f, +0.000115f, -0.000307f}, + {-0.000318f, -0.060748f, +0.148723f, +0.005268f, -0.001350f, +0.007903f, +0.000142f}, + {+0.002239f, -0.107172f, +0.365147f, -0.022416f, +0.007887f, +0.007958f, -0.000349f}, + {-0.008240f, +0.029286f, +0.131515f, +0.000924f, +0.001729f, +0.003361f, +0.000076f}, + {-0.001111f, -0.048033f, +0.008200f, -0.002944f, +0.003827f, +0.007343f, +0.000098f}, + {-0.001402f, -0.043485f, -0.056675f, -0.011711f, +0.010410f, -0.001163f, -0.000166f}, + {-0.010717f, +0.047236f, +0.000355f, +0.006515f, +0.009782f, +0.018035f, +0.000768f}, + {-0.007978f, -0.038622f, +0.174602f, -0.002049f, -0.003385f, +0.010858f, -0.000228f}, + {-0.020226f, +0.096237f, -0.148919f, +0.011944f, +0.011821f, +0.016071f, +0.000439f}, + {+0.006621f, +0.001528f, -0.011697f, +0.001299f, +0.008412f, -0.001732f, -0.000267f}, + {-0.004817f, +0.097631f, -0.066498f, +0.021077f, -0.018987f, -0.003674f, +0.000339f}, + {-0.001070f, +0.015835f, -0.169665f, -0.009779f, +0.002793f, +0.003666f, +0.000178f} + }, + { + {-0.000218f, -0.089026f, -0.421023f, -0.012375f, -0.004634f, +0.001798f, -0.000012f}, + {+0.000562f, -0.036209f, -0.550665f, -0.008292f, -0.010922f, +0.001692f, -0.000105f}, + {+0.005142f, -0.043344f, +0.001224f, -0.012674f, +0.003441f, -0.001675f, -0.000409f}, + {-0.008966f, -0.031569f, +0.059797f, +0.001454f, +0.000130f, +0.005702f, +0.000118f}, + {-0.002522f, -0.011413f, +0.087325f, -0.011922f, -0.000022f, +0.005284f, +0.000260f}, + {+0.002181f, -0.052724f, +0.140023f, -0.006731f, +0.003810f, +0.005104f, -0.000356f}, + {-0.001765f, -0.138044f, +0.333274f, -0.033581f, -0.002688f, +0.003200f, +0.000115f}, + {+0.003973f, +0.003541f, +0.046013f, -0.008444f, -0.007414f, -0.002627f, -0.000742f}, + {-0.001162f, -0.005039f, +0.086514f, +0.005749f, +0.000068f, +0.001696f, -0.000644f}, + {+0.005849f, +0.018637f, +0.044453f, +0.010415f, +0.017192f, +0.005809f, -0.000040f}, + {+0.008661f, +0.000783f, -0.119984f, -0.007281f, -0.002656f, -0.002479f, -0.001365f}, + {+0.001526f, -0.035648f, +0.157081f, -0.009488f, -0.019925f, +0.005193f, -0.000063f}, + {+0.011404f, +0.097066f, -0.250275f, +0.008788f, +0.002808f, -0.002067f, -0.000457f}, + {+0.001614f, -0.102998f, -0.128763f, +0.002681f, +0.005070f, -0.005321f, +0.000660f}, + {-0.003298f, +0.036157f, -0.178811f, +0.006825f, -0.008513f, -0.007543f, -0.000020f}, + {+0.001641f, +0.072805f, -0.123235f, -0.015452f, +0.002179f, +0.000264f, -0.000592f} + }, + { + {-0.000975f, -0.195927f, -0.252176f, -0.030354f, -0.003229f, +0.000526f, -0.000001f}, + {+0.000309f, -0.234067f, -0.266019f, -0.031177f, -0.006945f, -0.001049f, +0.000130f}, + {-0.002386f, +0.028204f, -0.131500f, +0.018106f, +0.002251f, -0.009442f, -0.000107f}, + {+0.005664f, -0.042363f, +0.072003f, -0.019768f, +0.004863f, +0.013196f, +0.000136f}, + {+0.006853f, -0.021462f, +0.075786f, -0.014512f, +0.006282f, +0.005188f, +0.000127f}, + {-0.001367f, +0.048666f, -0.006991f, +0.006727f, +0.010622f, -0.002375f, -0.000051f}, + {+0.003019f, +0.102067f, -0.002017f, -0.014826f, -0.006139f, +0.006654f, +0.000175f}, + {+0.001819f, +0.060630f, -0.102441f, +0.007947f, -0.006446f, -0.004503f, +0.000229f}, + {+0.000306f, +0.033150f, +0.030918f, +0.012775f, -0.001709f, -0.007959f, +0.000197f}, + {-0.007447f, +0.004851f, +0.083008f, +0.030885f, +0.022103f, -0.013176f, +0.000348f}, + {+0.000980f, +0.004050f, -0.155101f, -0.009877f, +0.004389f, -0.010605f, -0.000136f}, + {+0.011198f, +0.094889f, -0.026127f, -0.019593f, -0.014251f, +0.000870f, +0.000246f}, + {+0.003826f, +0.006068f, -0.154175f, +0.011531f, -0.003595f, -0.004320f, -0.000133f}, + {-0.010429f, -0.057946f, -0.099086f, -0.007643f, +0.012220f, -0.006023f, -0.000013f}, + {+0.006881f, -0.044670f, -0.130668f, -0.002390f, -0.001337f, -0.004130f, -0.000157f}, + {+0.002955f, -0.008067f, -0.021343f, -0.008702f, -0.004275f, -0.000004f, +0.000081f} + }, + { + {+0.000069f, +0.146635f, +0.261169f, +0.019817f, +0.000075f, +0.000531f, +0.000050f}, + {-0.000305f, +0.167956f, +0.370129f, +0.020672f, +0.001785f, +0.004094f, +0.000005f}, + {-0.001609f, +0.024380f, -0.133534f, +0.009049f, +0.001346f, -0.007049f, +0.000490f}, + {-0.000308f, -0.024516f, +0.102890f, -0.000078f, -0.001148f, +0.006088f, -0.000171f}, + {-0.003839f, -0.022205f, +0.075778f, -0.005346f, +0.001081f, -0.003317f, -0.000138f}, + {+0.000262f, -0.001355f, -0.058890f, +0.010171f, +0.003640f, -0.003881f, +0.000395f}, + {-0.002110f, -0.010551f, -0.210784f, -0.011445f, -0.007396f, -0.008617f, -0.000022f}, + {-0.000164f, -0.077247f, -0.273416f, -0.009245f, -0.003585f, -0.002259f, +0.000426f}, + {+0.001898f, -0.029394f, -0.081419f, +0.001244f, -0.003552f, -0.004044f, +0.000555f}, + {+0.003842f, -0.015743f, -0.003106f, -0.017909f, +0.010335f, -0.016376f, +0.000053f}, + {-0.000773f, +0.009196f, -0.117905f, -0.005612f, -0.002042f, -0.007695f, +0.001220f}, + {-0.010660f, -0.058962f, -0.204008f, -0.008327f, -0.009183f, -0.007026f, +0.000141f}, + {-0.004701f, -0.015995f, -0.106937f, +0.021098f, -0.004298f, -0.004601f, +0.000763f}, + {+0.006433f, +0.158915f, +0.112726f, -0.004279f, +0.017104f, -0.005337f, -0.000512f}, + {-0.001227f, -0.004124f, -0.047424f, -0.003324f, +0.000541f, +0.001090f, -0.000151f}, + {-0.003536f, -0.000793f, +0.041435f, +0.013181f, +0.004530f, +0.004257f, +0.000379f} + }, + { + {+0.000364f, +0.080984f, +0.376956f, +0.011952f, +0.000472f, -0.001518f, -0.000035f}, + {-0.000358f, +0.095210f, +0.504080f, +0.005232f, +0.006697f, +0.000372f, -0.000005f}, + {+0.000714f, -0.120793f, +0.065080f, -0.000397f, -0.002637f, +0.003362f, -0.000163f}, + {-0.000153f, +0.085409f, -0.047521f, +0.008039f, -0.002805f, +0.001302f, -0.000001f}, + {-0.001358f, +0.070095f, -0.050933f, +0.008619f, -0.006272f, -0.002042f, -0.000141f}, + {-0.001606f, -0.076349f, +0.053110f, -0.001126f, -0.005007f, +0.002104f, -0.000094f}, + {+0.000002f, -0.031163f, -0.172766f, -0.008913f, -0.001813f, -0.012478f, -0.000206f}, + {-0.003516f, -0.128750f, -0.154401f, -0.011018f, -0.010691f, +0.005231f, -0.000216f}, + {-0.001149f, +0.000294f, -0.147009f, +0.020344f, -0.008919f, +0.004686f, -0.000431f}, + {-0.001679f, -0.029734f, -0.035947f, +0.006328f, -0.015421f, +0.005286f, -0.000570f}, + {-0.004711f, -0.055321f, +0.011201f, -0.003090f, -0.007013f, +0.002069f, -0.000342f}, + {-0.000641f, -0.063262f, -0.204996f, -0.003457f, -0.008688f, -0.007549f, -0.000450f}, + {-0.000379f, -0.044888f, -0.064556f, +0.012953f, -0.001097f, +0.000928f, -0.000518f}, + {+0.003186f, +0.094917f, +0.184077f, -0.001265f, +0.005182f, -0.004312f, +0.000161f}, + {-0.005195f, -0.055939f, +0.071423f, -0.012305f, +0.003317f, +0.000086f, +0.000225f}, + {-0.001806f, -0.015355f, +0.044186f, +0.012248f, +0.011792f, -0.000869f, -0.000164f} + }, + { + {+0.000195f, -0.185610f, -0.036287f, -0.024075f, +0.002082f, -0.000689f, -0.000044f}, + {+0.000757f, -0.229752f, -0.017681f, -0.031382f, +0.006224f, -0.001307f, -0.000075f}, + {+0.001914f, +0.006500f, +0.229048f, +0.000819f, -0.005861f, +0.003371f, -0.000304f}, + {-0.002186f, -0.056829f, -0.244763f, -0.001140f, -0.001038f, -0.002732f, +0.000098f}, + {+0.002962f, -0.006295f, -0.156039f, +0.011850f, -0.001834f, -0.002488f, +0.000145f}, + {+0.002632f, -0.018280f, +0.116610f, +0.003232f, -0.011774f, -0.002750f, -0.000318f}, + {-0.000368f, +0.118018f, +0.078968f, +0.009095f, +0.007376f, -0.003097f, +0.000120f}, + {-0.000867f, +0.179501f, +0.254048f, +0.024606f, -0.007672f, +0.009218f, -0.000263f}, + {-0.002079f, +0.021491f, -0.107751f, +0.011889f, -0.003752f, +0.008417f, -0.000315f}, + {+0.004687f, +0.011076f, -0.013710f, -0.010901f, -0.002336f, +0.018359f, +0.000185f}, + {+0.000171f, +0.103745f, +0.209256f, +0.011020f, -0.000511f, +0.007430f, -0.000803f}, + {+0.003492f, +0.092594f, +0.015449f, +0.020195f, +0.000503f, +0.000351f, +0.000039f}, + {-0.004172f, +0.029566f, +0.007150f, +0.009351f, +0.000760f, +0.002162f, -0.000446f}, + {-0.001750f, -0.062137f, +0.037050f, -0.023719f, -0.012362f, -0.004177f, +0.000369f}, + {+0.005958f, +0.060184f, +0.203001f, -0.025293f, -0.001997f, +0.001870f, +0.000255f}, + {+0.005258f, -0.060569f, -0.061313f, -0.024494f, +0.010320f, +0.002211f, -0.000161f} + }, + { + {+0.000112f, +0.060658f, -0.417787f, +0.005714f, +0.004379f, -0.002197f, +0.000068f}, + {-0.001102f, +0.095822f, -0.518040f, +0.011832f, +0.002015f, -0.000251f, -0.000000f}, + {-0.000516f, +0.082315f, +0.132261f, +0.005735f, -0.007129f, +0.002706f, +0.000243f}, + {+0.002333f, -0.078203f, -0.213458f, -0.013410f, +0.010117f, -0.008587f, -0.000019f}, + {-0.002081f, -0.076825f, -0.077848f, +0.015310f, +0.000613f, -0.001883f, +0.000148f}, + {-0.000575f, +0.080134f, -0.005198f, +0.013834f, -0.013263f, -0.006006f, +0.000155f}, + {+0.002393f, +0.024462f, +0.208714f, -0.012361f, +0.008510f, +0.002277f, +0.000100f}, + {+0.009163f, +0.075210f, +0.409320f, +0.005280f, +0.007354f, +0.000656f, +0.000140f}, + {+0.004047f, -0.084423f, +0.061196f, -0.021248f, +0.011737f, -0.000848f, +0.000475f}, + {-0.006606f, -0.032804f, +0.077956f, -0.007869f, +0.018631f, +0.005903f, +0.000583f}, + {+0.010179f, +0.078026f, +0.230409f, +0.005878f, +0.003699f, -0.003518f, +0.000459f}, + {+0.005684f, +0.014213f, +0.151112f, +0.001273f, +0.006624f, -0.001254f, +0.000492f}, + {+0.010719f, -0.040781f, +0.075906f, +0.029747f, -0.006338f, -0.010906f, +0.000848f}, + {-0.008963f, -0.034970f, -0.020605f, -0.013122f, -0.028749f, +0.011953f, -0.000294f}, + {-0.003411f, +0.040528f, +0.227979f, -0.043627f, -0.002551f, +0.014298f, -0.000446f}, + {-0.001660f, -0.005966f, -0.105333f, -0.046917f, +0.022085f, +0.000796f, +0.000090f} + }, + { + {-0.000762f, +0.164203f, -0.247474f, +0.021171f, +0.002604f, -0.001593f, +0.000004f}, + {+0.001507f, +0.190154f, -0.345179f, +0.027840f, -0.002873f, -0.000767f, +0.000153f}, + {-0.002025f, -0.067328f, -0.076491f, -0.004353f, -0.007606f, +0.000171f, +0.000078f}, + {-0.000406f, +0.123751f, +0.084938f, +0.003933f, +0.009525f, -0.007896f, -0.000054f}, + {+0.002507f, +0.050784f, +0.079755f, -0.010591f, -0.019603f, -0.004806f, -0.000238f}, + {-0.001211f, -0.003210f, -0.123704f, -0.005078f, -0.012530f, -0.000861f, +0.000240f}, + {-0.002198f, -0.122685f, +0.004525f, -0.009356f, +0.009948f, +0.002933f, -0.000172f}, + {-0.009420f, -0.096936f, +0.211990f, -0.000631f, +0.024610f, +0.000067f, +0.000227f}, + {-0.003401f, +0.043359f, +0.236137f, -0.016754f, +0.003721f, -0.009061f, +0.000108f}, + {+0.002629f, +0.050970f, +0.171015f, -0.010701f, +0.001236f, -0.008654f, -0.000462f}, + {-0.009391f, -0.075614f, +0.036986f, -0.017209f, +0.013531f, -0.004588f, +0.000450f}, + {-0.010190f, -0.026020f, +0.092489f, -0.018996f, +0.007141f, -0.007424f, -0.000270f}, + {-0.003474f, -0.040283f, +0.090442f, +0.009004f, -0.004342f, -0.014442f, -0.000085f}, + {+0.010671f, -0.021234f, -0.041419f, +0.021963f, -0.017488f, +0.020488f, -0.000125f}, + {-0.000297f, -0.084055f, +0.073590f, -0.011210f, +0.003463f, +0.009384f, -0.000164f}, + {-0.004279f, +0.044600f, +0.008641f, +0.002947f, +0.027023f, -0.005455f, +0.000050f} + }, + { + {-0.000283f, -0.176649f, +0.262566f, -0.014478f, -0.000954f, +0.001308f, -0.000065f}, + {-0.001140f, -0.224468f, +0.279707f, -0.024096f, -0.000047f, +0.001875f, -0.000114f}, + {+0.000295f, -0.043283f, -0.120193f, -0.002250f, -0.006566f, -0.003343f, -0.000115f}, + {-0.000666f, -0.031706f, +0.308527f, +0.002946f, +0.000818f, -0.001236f, -0.000021f}, + {-0.003617f, +0.019505f, +0.143563f, -0.020992f, -0.023490f, +0.001424f, -0.000030f}, + {-0.000505f, -0.065371f, -0.050416f, -0.019406f, -0.013739f, +0.004956f, -0.000166f}, + {-0.000079f, +0.061295f, -0.259588f, +0.019944f, -0.005382f, +0.003509f, +0.000117f}, + {+0.002104f, +0.058949f, -0.059993f, +0.018286f, +0.035136f, -0.004869f, -0.000129f}, + {+0.001987f, +0.057127f, +0.194890f, +0.013423f, -0.011511f, -0.004034f, -0.000400f}, + {+0.001749f, +0.059976f, +0.129299f, +0.005890f, -0.011219f, -0.006091f, -0.000349f}, + {-0.001519f, +0.020751f, -0.128431f, -0.012395f, +0.015072f, +0.001704f, -0.000350f}, + {+0.001715f, +0.003520f, -0.009236f, +0.008621f, -0.014036f, +0.004524f, -0.000320f}, + {-0.010397f, -0.014939f, +0.057907f, +0.006560f, -0.017006f, +0.004021f, -0.000748f}, + {+0.001022f, +0.060447f, -0.104723f, +0.013416f, +0.008510f, -0.003268f, +0.000304f}, + {+0.005057f, +0.086252f, -0.154014f, +0.015645f, +0.017376f, -0.013300f, +0.000642f}, + {+0.005479f, -0.023273f, +0.095430f, +0.015576f, +0.022876f, -0.005860f, +0.000040f} + }, + { + {+0.001675f, -0.061396f, +0.429767f, -0.006398f, -0.000228f, +0.003526f, +0.000023f}, + {-0.000038f, -0.062648f, +0.515535f, -0.008029f, -0.001737f, +0.001547f, -0.000082f}, + {+0.002291f, +0.049399f, +0.003192f, +0.012249f, +0.000654f, +0.000678f, -0.000034f}, + {+0.000593f, -0.108396f, +0.186199f, -0.012697f, +0.003336f, +0.005452f, +0.000123f}, + {+0.002390f, -0.058095f, +0.036001f, -0.006041f, -0.003012f, +0.007234f, +0.000254f}, + {+0.001933f, +0.004195f, +0.056774f, +0.003687f, -0.004092f, +0.006881f, -0.000217f}, + {+0.000593f, +0.099058f, -0.194124f, +0.023991f, -0.002165f, +0.006354f, -0.000012f}, + {+0.001696f, +0.017095f, -0.148208f, -0.004048f, +0.013373f, -0.008460f, -0.000177f}, + {-0.001325f, -0.077202f, -0.002682f, -0.007197f, -0.007521f, +0.006474f, -0.000016f}, + {-0.000736f, -0.051938f, -0.026746f, -0.008682f, -0.008806f, +0.002090f, +0.000530f}, + {+0.005409f, +0.046224f, -0.113326f, -0.016402f, +0.008996f, +0.004761f, -0.000319f}, + {+0.007047f, -0.001884f, -0.012136f, +0.013255f, -0.007585f, +0.013566f, +0.000298f}, + {+0.010596f, +0.004092f, +0.006563f, -0.012092f, -0.004082f, +0.021089f, +0.000426f}, + {-0.008695f, +0.032158f, -0.077474f, +0.007159f, +0.002695f, -0.010826f, -0.000194f}, + {-0.006170f, +0.054185f, -0.187606f, +0.009185f, +0.009767f, -0.019049f, -0.000096f}, + {-0.001578f, -0.028257f, +0.067351f, -0.012794f, +0.006489f, -0.002797f, -0.000065f} + }, + { + {-0.000604f, +0.195551f, +0.046469f, +0.024960f, +0.000124f, +0.002789f, +0.000055f}, + {+0.000690f, +0.220876f, +0.080732f, +0.034526f, -0.002081f, -0.002082f, +0.000149f}, + {+0.000246f, +0.043891f, +0.048838f, -0.000487f, -0.000343f, +0.001784f, +0.000016f}, + {-0.000835f, +0.096167f, -0.135430f, +0.014028f, +0.001033f, +0.010401f, -0.000056f}, + {+0.000208f, +0.005067f, -0.068234f, +0.003921f, +0.004117f, +0.005521f, -0.000126f}, + {+0.000916f, +0.048030f, +0.028754f, +0.003326f, +0.001391f, -0.000076f, +0.000235f}, + {+0.001355f, -0.130889f, +0.158329f, -0.015536f, +0.005834f, +0.000347f, -0.000134f}, + {+0.000772f, -0.014933f, -0.083088f, -0.015662f, -0.005534f, -0.000822f, +0.000089f}, + {+0.000775f, +0.009184f, -0.151945f, +0.000406f, +0.003723f, +0.001745f, +0.000332f}, + {-0.001608f, +0.007143f, -0.122931f, +0.000855f, +0.002881f, -0.002170f, +0.000072f}, + {+0.000702f, -0.045072f, +0.040098f, -0.018823f, -0.001317f, +0.002269f, +0.000285f}, + {-0.004532f, -0.032658f, +0.089350f, -0.008837f, +0.001128f, +0.005456f, +0.000214f}, + {+0.002363f, +0.019083f, +0.016835f, -0.018529f, -0.001377f, +0.016870f, +0.000540f}, + {+0.001715f, -0.134043f, +0.119796f, -0.009102f, +0.006833f, -0.014270f, -0.000027f}, + {-0.000241f, -0.081470f, -0.041657f, +0.000811f, -0.002552f, -0.004671f, -0.000698f}, + {-0.002448f, +0.073265f, -0.102780f, +0.006728f, -0.005038f, +0.008304f, -0.000118f} + }, + { + {-0.001452f, -0.069169f, -0.359772f, -0.004528f, -0.001473f, -0.001174f, -0.000052f}, + {-0.000298f, -0.104548f, -0.415506f, -0.005346f, -0.002661f, -0.003417f, -0.000022f}, + {-0.004227f, -0.021575f, -0.027481f, -0.005602f, -0.003477f, -0.000211f, +0.000081f}, + {+0.001287f, +0.013519f, -0.267631f, +0.008302f, -0.001317f, +0.004439f, -0.000141f}, + {-0.000359f, +0.000352f, -0.067106f, +0.012917f, +0.006433f, +0.003644f, -0.000143f}, + {-0.004008f, -0.012160f, -0.057113f, -0.006758f, -0.001210f, -0.002980f, +0.000130f}, + {-0.002266f, -0.023397f, +0.318814f, -0.007434f, +0.005449f, -0.001677f, +0.000180f}, + {-0.001788f, +0.018561f, -0.001859f, -0.003902f, -0.003138f, +0.001594f, +0.000177f}, + {+0.000498f, +0.040998f, -0.104388f, +0.007015f, +0.005666f, -0.003054f, -0.000009f}, + {-0.000750f, +0.015717f, -0.104401f, +0.011167f, +0.018971f, -0.000557f, -0.000338f}, + {-0.002290f, +0.018734f, +0.161180f, +0.000199f, -0.006956f, -0.002383f, +0.000251f}, + {-0.002329f, -0.000388f, +0.118224f, -0.001665f, -0.000288f, -0.002715f, -0.000270f}, + {-0.008356f, -0.024500f, +0.022446f, +0.012317f, -0.008248f, -0.005294f, -0.000668f}, + {+0.006958f, -0.022401f, +0.224422f, +0.002575f, +0.012970f, -0.007896f, +0.000296f}, + {+0.006675f, +0.016668f, +0.092843f, -0.004034f, +0.003197f, +0.011486f, +0.000459f}, + {+0.003001f, +0.042559f, -0.167839f, -0.012591f, -0.010475f, +0.006189f, +0.000137f} + }, + { + {+0.001035f, -0.135712f, -0.265067f, -0.014975f, -0.000173f, -0.002689f, -0.000027f}, + {+0.000022f, -0.153794f, -0.337679f, -0.016131f, -0.002264f, -0.001857f, -0.000076f}, + {+0.002408f, -0.029883f, -0.058542f, +0.003685f, -0.004307f, -0.001136f, -0.000028f}, + {-0.001009f, -0.110854f, -0.066337f, -0.007994f, +0.001871f, -0.001869f, +0.000206f}, + {-0.001958f, -0.038357f, +0.009285f, +0.006704f, +0.004883f, -0.003613f, +0.000203f}, + {+0.002126f, -0.034418f, -0.063655f, -0.004958f, -0.005206f, -0.002377f, -0.000286f}, + {+0.000538f, +0.150140f, +0.064965f, +0.004933f, +0.003963f, -0.000065f, +0.000002f}, + {-0.001160f, -0.027758f, +0.059854f, +0.003349f, -0.002280f, +0.003818f, -0.000068f}, + {-0.001370f, -0.078725f, +0.069559f, +0.006628f, -0.004080f, +0.003499f, -0.000321f}, + {+0.005045f, -0.087250f, +0.030052f, +0.009251f, +0.005200f, +0.005087f, -0.000028f}, + {-0.004623f, +0.037497f, +0.117998f, +0.017368f, -0.005325f, -0.002149f, -0.000273f}, + {+0.002264f, +0.112372f, -0.037646f, -0.000037f, -0.001923f, -0.006678f, -0.000193f}, + {+0.001085f, +0.002533f, -0.050740f, +0.020287f, -0.001175f, -0.016779f, -0.000229f}, + {-0.003630f, +0.183327f, +0.014287f, +0.012823f, -0.005434f, +0.009035f, -0.000371f}, + {-0.003395f, +0.010246f, +0.150859f, -0.008983f, +0.010531f, +0.013647f, +0.000481f}, + {-0.000416f, -0.086769f, +0.004870f, -0.014825f, -0.000882f, +0.001829f, +0.000113f} + }, + { + {+0.000645f, +0.154946f, +0.177668f, +0.017072f, +0.000651f, -0.001522f, +0.000072f}, + {-0.000549f, +0.194573f, +0.188311f, +0.025413f, +0.001784f, +0.002119f, +0.000030f}, + {+0.002387f, +0.018045f, +0.004555f, +0.005425f, -0.001933f, +0.000483f, -0.000060f}, + {+0.000284f, +0.072221f, +0.199350f, +0.001255f, -0.006916f, -0.008191f, -0.000017f}, + {+0.002646f, +0.013121f, +0.061521f, -0.004586f, -0.008749f, -0.011041f, -0.000026f}, + {+0.001392f, -0.014040f, -0.018106f, +0.002009f, -0.001377f, +0.001398f, +0.000040f}, + {+0.001216f, -0.089923f, -0.283202f, -0.010597f, +0.000107f, -0.005548f, -0.000176f}, + {+0.001911f, +0.010949f, +0.090459f, +0.006436f, +0.003223f, +0.005766f, -0.000234f}, + {+0.000186f, -0.021096f, +0.146517f, +0.004613f, -0.006003f, +0.005164f, +0.000046f}, + {-0.004900f, -0.001082f, +0.145303f, +0.003824f, -0.005874f, +0.001264f, +0.000130f}, + {+0.006513f, -0.036434f, -0.017113f, +0.008670f, +0.001776f, +0.001766f, -0.000139f}, + {+0.002383f, -0.011656f, -0.199522f, +0.001517f, +0.000917f, -0.006316f, +0.000312f}, + {+0.004072f, -0.017482f, -0.140043f, -0.005490f, +0.003161f, -0.009171f, +0.000809f}, + {-0.003928f, +0.035690f, -0.165301f, +0.017863f, +0.001525f, +0.015105f, -0.000020f}, + {-0.004490f, +0.026473f, +0.158660f, -0.016182f, +0.002051f, +0.001422f, -0.000697f}, + {-0.002701f, +0.021762f, +0.186409f, +0.002465f, +0.003261f, -0.000400f, -0.000186f} + }, + { + {+0.000099f, +0.036368f, +0.371003f, +0.001629f, +0.000185f, -0.000164f, -0.000035f}, + {+0.001027f, +0.021065f, +0.455523f, +0.007009f, -0.000171f, +0.003644f, +0.000031f}, + {-0.002203f, +0.010908f, +0.054143f, -0.006492f, +0.001603f, -0.000076f, +0.000020f}, + {+0.000202f, +0.081447f, +0.185899f, -0.000039f, -0.002519f, -0.009060f, -0.000207f}, + {-0.000145f, +0.040892f, +0.024916f, -0.002845f, -0.007084f, -0.008654f, -0.000149f}, + {-0.000681f, -0.015374f, +0.019466f, -0.006281f, +0.004147f, -0.001144f, +0.000190f}, + {-0.000720f, -0.090186f, -0.294095f, -0.004346f, +0.001360f, -0.006895f, +0.000032f}, + {+0.001250f, +0.048376f, +0.032072f, +0.005694f, +0.004343f, +0.001826f, +0.000175f}, + {+0.001972f, +0.055906f, +0.051458f, -0.008972f, +0.008989f, -0.004482f, +0.000341f}, + {+0.000721f, +0.053054f, +0.080364f, +0.010933f, +0.000804f, -0.005258f, +0.000240f}, + {+0.001755f, +0.008278f, -0.060930f, -0.007833f, +0.006118f, -0.000505f, +0.000186f}, + {-0.002845f, -0.055065f, -0.155770f, +0.013884f, -0.002897f, -0.003665f, +0.000097f}, + {+0.001472f, -0.015073f, -0.108333f, -0.008884f, -0.002637f, +0.002145f, -0.000265f}, + {+0.002067f, -0.074717f, -0.056765f, -0.010752f, +0.008573f, +0.010308f, +0.000507f}, + {+0.004477f, +0.042604f, +0.079819f, -0.009975f, +0.003623f, -0.005897f, -0.000048f}, + {+0.003540f, +0.034868f, +0.173761f, -0.016563f, +0.013425f, -0.007023f, -0.000066f} + }, + { + {-0.002183f, -0.153188f, +0.087452f, -0.017701f, +0.000455f, -0.000059f, -0.000031f}, + {-0.000837f, -0.194734f, +0.137795f, -0.017874f, -0.004064f, +0.001732f, -0.000005f}, + {-0.001557f, -0.009676f, +0.022334f, -0.008279f, +0.003448f, -0.001046f, +0.000008f}, + {-0.000623f, -0.079188f, -0.056711f, -0.015350f, +0.006488f, +0.001018f, +0.000189f}, + {-0.002293f, +0.003889f, -0.025529f, +0.001638f, +0.006470f, +0.003898f, +0.000154f}, + {-0.001846f, +0.009455f, +0.036884f, -0.009081f, +0.004726f, -0.003122f, -0.000129f}, + {-0.001102f, +0.135342f, +0.027798f, +0.014279f, +0.007762f, +0.000259f, +0.000211f}, + {-0.002017f, -0.058553f, -0.096374f, -0.002043f, +0.001398f, -0.003248f, +0.000161f}, + {-0.001923f, -0.019124f, -0.056759f, -0.013113f, +0.012447f, -0.007132f, -0.000136f}, + {+0.002339f, -0.011508f, -0.033382f, -0.007946f, +0.001297f, -0.003215f, -0.000190f}, + {-0.006828f, +0.026842f, -0.004072f, -0.001985f, +0.003739f, -0.003753f, +0.000089f}, + {-0.000656f, +0.067311f, +0.002677f, +0.013922f, +0.003169f, -0.000952f, -0.000271f}, + {-0.006268f, +0.106955f, +0.113991f, +0.011181f, -0.002632f, +0.003434f, -0.000563f}, + {+0.004974f, -0.010018f, +0.065905f, +0.006508f, -0.004051f, -0.007315f, -0.000366f}, + {+0.002011f, -0.084345f, -0.082409f, -0.005323f, +0.003835f, -0.005258f, +0.000564f}, + {-0.001219f, -0.090067f, -0.002658f, -0.027505f, +0.008564f, -0.005530f, +0.000179f} + }, + { + {+0.001676f, +0.080558f, -0.289199f, +0.010856f, -0.001705f, +0.001083f, +0.000061f}, + {+0.000604f, +0.113797f, -0.341125f, +0.013986f, -0.002559f, +0.000854f, -0.000034f}, + {+0.001412f, +0.004029f, -0.029843f, -0.001918f, +0.004280f, -0.001322f, +0.000062f}, + {+0.001059f, +0.017126f, -0.215757f, +0.009036f, -0.003131f, +0.007262f, +0.000030f}, + {+0.002126f, +0.010907f, -0.045035f, +0.009192f, +0.000070f, +0.009903f, -0.000020f}, + {+0.000402f, +0.017331f, +0.008068f, -0.007097f, +0.000818f, -0.000446f, -0.000032f}, + {+0.002552f, -0.019031f, +0.267246f, +0.002794f, +0.003761f, +0.007416f, -0.000074f}, + {-0.001830f, -0.057617f, -0.100520f, +0.002131f, -0.000594f, -0.002920f, -0.000253f}, + {-0.000762f, -0.011768f, -0.059922f, -0.015063f, +0.002708f, -0.001199f, -0.000329f}, + {-0.002450f, +0.031770f, -0.094689f, -0.023282f, -0.000467f, +0.004312f, -0.000416f}, + {+0.000761f, -0.034628f, +0.069799f, -0.000792f, -0.001198f, +0.000138f, -0.000078f}, + {+0.001806f, -0.008081f, +0.111324f, +0.010794f, -0.000375f, +0.004200f, -0.000039f}, + {+0.001363f, -0.031037f, +0.279729f, -0.006910f, -0.003632f, +0.002136f, +0.000578f}, + {-0.004327f, +0.034468f, +0.049016f, +0.013984f, -0.003393f, -0.015626f, -0.000281f}, + {-0.002852f, +0.006131f, -0.177457f, +0.009111f, +0.001002f, -0.000720f, -0.000233f}, + {-0.001818f, +0.009660f, -0.145990f, -0.004769f, -0.003075f, -0.000340f, +0.000041f} + }, + { + {+0.000552f, +0.069003f, -0.301992f, +0.008999f, -0.002406f, +0.001408f, -0.000044f}, + {-0.000802f, +0.083031f, -0.389256f, +0.010430f, -0.003080f, +0.000170f, +0.000017f}, + {+0.001854f, -0.004303f, -0.039738f, -0.002076f, +0.002884f, -0.001064f, -0.000029f}, + {-0.000928f, +0.080110f, -0.113738f, +0.018229f, -0.004586f, +0.006420f, -0.000168f}, + {-0.001017f, +0.018957f, -0.020512f, +0.009990f, -0.000517f, +0.008319f, -0.000130f}, + {+0.002904f, -0.018312f, -0.036890f, -0.007636f, -0.002542f, +0.000516f, +0.000078f}, + {-0.002954f, -0.060368f, +0.217523f, +0.002451f, +0.005655f, +0.004182f, -0.000317f}, + {+0.003919f, +0.063163f, +0.040871f, +0.006505f, -0.000581f, -0.000746f, +0.000040f}, + {+0.002405f, +0.015869f, -0.003557f, +0.001227f, +0.001181f, +0.003627f, +0.000263f}, + {+0.001198f, +0.012221f, -0.089063f, -0.001056f, +0.001660f, +0.007526f, +0.000479f}, + {+0.005324f, -0.011776f, +0.070950f, -0.005147f, +0.003184f, +0.000378f, -0.000142f}, + {+0.000051f, -0.028299f, +0.085723f, +0.005212f, +0.001858f, +0.007443f, +0.000157f}, + {+0.004306f, -0.142068f, +0.110900f, -0.013176f, -0.003157f, -0.002452f, +0.000049f}, + {-0.002413f, -0.017599f, -0.058088f, -0.006858f, +0.002731f, -0.002117f, +0.000497f}, + {-0.002874f, +0.105920f, -0.045074f, +0.010682f, +0.002132f, +0.002632f, -0.000206f}, + {+0.002079f, +0.058269f, -0.081409f, +0.010848f, -0.004241f, +0.001114f, -0.000140f} + }, + { + {-0.000418f, -0.142873f, +0.039874f, -0.019991f, +0.002205f, -0.000747f, -0.000005f}, + {+0.000936f, -0.189643f, +0.031282f, -0.020851f, +0.005506f, -0.005310f, +0.000013f}, + {-0.001308f, -0.006482f, -0.008509f, -0.006678f, -0.002770f, +0.003622f, -0.000135f}, + {+0.000352f, -0.070885f, +0.103936f, +0.002558f, +0.003246f, -0.000103f, +0.000099f}, + {+0.000887f, -0.045238f, +0.048190f, +0.008634f, +0.007525f, -0.000260f, +0.000172f}, + {-0.002007f, +0.012279f, -0.056322f, -0.008316f, -0.007235f, +0.004635f, -0.000040f}, + {+0.001704f, +0.071575f, -0.010837f, +0.019662f, +0.006908f, +0.000040f, +0.000304f}, + {-0.000579f, +0.012185f, +0.136975f, -0.003098f, -0.002671f, +0.000450f, +0.000120f}, + {-0.000783f, +0.012147f, +0.013944f, -0.004558f, -0.003031f, +0.006334f, +0.000232f}, + {+0.000405f, -0.033333f, -0.004358f, -0.008655f, +0.005913f, +0.003262f, +0.000314f}, + {-0.001823f, +0.042713f, +0.011527f, -0.005063f, +0.002103f, +0.001502f, +0.000065f}, + {-0.000974f, +0.024120f, -0.004097f, +0.007567f, +0.008038f, +0.004120f, +0.000156f}, + {-0.001640f, +0.093084f, -0.198061f, +0.003093f, -0.002683f, +0.001119f, -0.000406f}, + {+0.003567f, -0.007486f, -0.098988f, -0.008744f, +0.000657f, +0.004123f, -0.000005f}, + {+0.004574f, -0.078397f, +0.170549f, +0.002466f, -0.001846f, +0.002619f, +0.000132f}, + {+0.000617f, -0.007229f, +0.037692f, -0.007070f, -0.006347f, +0.005576f, -0.000078f} + }, + { + {-0.001486f, +0.056882f, +0.344270f, +0.002981f, +0.002487f, +0.000072f, +0.000054f}, + {-0.000547f, +0.073464f, +0.437965f, +0.006803f, +0.006483f, -0.002618f, -0.000013f}, + {-0.002208f, +0.014125f, +0.020584f, -0.002492f, -0.000969f, +0.003592f, +0.000109f}, + {-0.000305f, -0.016927f, +0.185175f, -0.003380f, -0.001318f, -0.002537f, +0.000023f}, + {-0.000351f, -0.029189f, +0.073389f, +0.000284f, +0.000493f, -0.005939f, -0.000055f}, + {-0.001499f, +0.034879f, -0.021228f, +0.004371f, -0.002644f, +0.004411f, -0.000007f}, + {+0.000897f, -0.046281f, -0.193165f, -0.000062f, -0.001114f, -0.004264f, +0.000213f}, + {-0.002752f, -0.051084f, +0.069214f, +0.001396f, +0.003500f, -0.000286f, -0.000111f}, + {-0.001121f, -0.015804f, -0.019775f, -0.002359f, -0.004389f, +0.000835f, -0.000349f}, + {-0.001148f, +0.019967f, +0.074378f, -0.001520f, +0.002356f, -0.007542f, -0.000708f}, + {-0.003015f, +0.000567f, -0.032040f, -0.000478f, +0.007053f, +0.003880f, +0.000168f}, + {+0.000599f, -0.031243f, -0.090853f, -0.001066f, +0.003609f, -0.001923f, -0.000219f}, + {-0.002584f, +0.058926f, -0.270418f, -0.007516f, +0.005804f, +0.009528f, +0.000212f}, + {+0.001291f, +0.042693f, -0.027401f, -0.014999f, -0.004171f, +0.003174f, -0.000358f}, + {-0.000365f, -0.070750f, +0.194323f, -0.005364f, -0.011038f, -0.002927f, +0.000039f}, + {-0.002865f, +0.017053f, +0.089613f, +0.000603f, -0.002832f, +0.006954f, +0.000143f} + }, + { + {+0.001162f, +0.086726f, +0.283216f, +0.007174f, +0.000292f, +0.001000f, -0.000057f}, + {-0.000280f, +0.113299f, +0.375196f, +0.009194f, +0.001746f, +0.000631f, +0.000011f}, + {+0.001584f, -0.002657f, +0.025271f, -0.001278f, +0.002584f, +0.000574f, +0.000151f}, + {+0.000612f, +0.053497f, +0.079626f, +0.000480f, +0.000018f, -0.003410f, -0.000053f}, + {-0.002124f, +0.011394f, +0.030926f, +0.002382f, -0.003441f, -0.005642f, -0.000133f}, + {+0.001314f, -0.010118f, +0.036750f, -0.003806f, +0.004747f, -0.000553f, +0.000052f}, + {-0.001831f, -0.043275f, -0.185257f, -0.005098f, -0.001017f, -0.000283f, -0.000498f}, + {+0.000841f, +0.040701f, -0.070294f, +0.003830f, +0.009401f, -0.002752f, +0.000077f}, + {+0.000100f, -0.008475f, -0.031005f, -0.000708f, +0.001122f, -0.005186f, -0.000069f}, + {-0.001130f, +0.030959f, +0.056257f, +0.001556f, +0.000116f, -0.010873f, -0.000014f}, + {-0.000403f, -0.010182f, -0.025332f, -0.003832f, +0.009692f, +0.002446f, -0.000086f}, + {-0.000803f, -0.016374f, -0.101303f, -0.002464f, +0.006149f, -0.004906f, -0.000224f}, + {-0.000197f, -0.109631f, -0.065418f, -0.005555f, +0.002254f, +0.006250f, +0.000073f}, + {-0.002052f, +0.011617f, +0.030519f, -0.011538f, -0.006873f, +0.002073f, +0.000080f}, + {-0.001077f, +0.085345f, +0.002855f, +0.007450f, -0.007853f, -0.001185f, +0.000097f}, + {+0.002250f, +0.036761f, +0.046050f, +0.003265f, +0.006503f, +0.000120f, +0.000142f} + }, + { + {+0.000832f, -0.158853f, -0.072678f, -0.012837f, -0.001243f, +0.000766f, +0.000001f}, + {+0.001371f, -0.196755f, -0.090338f, -0.015963f, -0.002640f, -0.000092f, -0.000018f}, + {+0.002755f, -0.004994f, +0.024145f, +0.002847f, -0.001298f, -0.004721f, -0.000196f}, + {+0.000183f, -0.068683f, -0.100662f, -0.001292f, +0.000276f, -0.003596f, +0.000038f}, + {+0.004483f, -0.020981f, -0.050436f, -0.005530f, -0.012253f, -0.005578f, +0.000204f}, + {+0.001815f, -0.002810f, +0.053671f, +0.002732f, +0.007735f, -0.004239f, -0.000035f}, + {-0.001514f, +0.072829f, -0.017583f, -0.007325f, +0.002548f, +0.007120f, +0.000100f}, + {+0.003140f, +0.020486f, -0.131828f, -0.003411f, +0.006628f, -0.002774f, -0.000011f}, + {+0.001742f, +0.019912f, -0.000260f, +0.004598f, +0.007668f, -0.001955f, +0.000329f}, + {+0.005335f, -0.019705f, -0.047513f, -0.006920f, -0.004015f, -0.005271f, +0.000701f}, + {+0.005474f, +0.005480f, -0.023623f, -0.006954f, +0.001571f, -0.004400f, -0.000139f}, + {+0.000204f, +0.046146f, -0.019690f, -0.000994f, +0.009635f, -0.000428f, +0.000413f}, + {+0.004339f, +0.007559f, +0.127446f, +0.001487f, -0.005782f, -0.002564f, -0.000124f}, + {-0.002984f, -0.018528f, +0.001355f, -0.007831f, -0.002702f, +0.004698f, +0.000223f}, + {-0.001367f, +0.031137f, -0.113810f, +0.002510f, -0.008233f, -0.002569f, -0.000155f}, + {+0.000009f, -0.026245f, -0.034477f, +0.004931f, +0.007176f, -0.005186f, -0.000238f} + }, + { + {-0.000477f, +0.058490f, -0.374545f, -0.004159f, +0.002739f, -0.001094f, +0.000053f}, + {-0.002198f, +0.090787f, -0.515343f, +0.019512f, -0.011118f, +0.002760f, +0.000006f}, + {-0.003536f, +0.014800f, +0.004465f, +0.015900f, -0.007941f, -0.004530f, -0.000120f}, + {-0.002066f, +0.010520f, -0.229451f, +0.023897f, -0.008281f, -0.000987f, -0.000047f}, + {-0.003822f, +0.045322f, -0.163451f, +0.029821f, -0.027772f, +0.003256f, -0.000066f}, + {-0.001898f, +0.027443f, +0.009605f, +0.016147f, +0.003770f, -0.003937f, -0.000066f}, + {+0.006181f, -0.053430f, +0.182900f, -0.048805f, +0.021820f, +0.000734f, +0.000402f}, + {-0.003572f, +0.004723f, -0.113184f, +0.021852f, -0.015940f, +0.005627f, -0.000124f}, + {-0.000782f, +0.015335f, +0.005219f, +0.010880f, +0.004732f, +0.003112f, -0.000067f}, + {-0.006371f, +0.061427f, -0.195453f, +0.054114f, -0.027990f, +0.010717f, -0.000260f}, + {-0.002273f, +0.021317f, -0.031278f, +0.003656f, -0.010351f, +0.000120f, +0.000050f}, + {+0.002561f, -0.012507f, +0.081773f, -0.021758f, +0.012853f, +0.001867f, +0.000061f}, + {-0.001484f, -0.021192f, +0.210492f, -0.022630f, +0.009588f, -0.011400f, +0.000044f}, + {+0.005245f, -0.017676f, -0.015155f, -0.024154f, +0.011647f, +0.000569f, -0.000003f}, + {-0.000187f, -0.011239f, -0.111629f, +0.029530f, -0.019611f, -0.001593f, -0.000139f}, + {-0.001637f, -0.009739f, -0.067653f, +0.013129f, +0.001334f, -0.008061f, -0.000131f} + }, + { + {-0.001659f, +0.077353f, -0.359886f, -0.001342f, +0.003150f, -0.002566f, -0.000035f}, + {+0.001743f, +0.095489f, -0.538290f, +0.007895f, -0.005864f, +0.004758f, +0.000015f}, + {+0.000199f, -0.021824f, -0.059806f, +0.003881f, -0.005303f, +0.002246f, +0.000274f}, + {+0.002843f, +0.025276f, -0.232757f, +0.006919f, -0.005946f, +0.005166f, +0.000025f}, + {+0.001000f, +0.042449f, -0.207087f, +0.002790f, -0.014255f, +0.008316f, -0.000140f}, + {-0.000864f, -0.019677f, -0.065963f, +0.005015f, -0.000565f, -0.000970f, +0.000100f}, + {-0.006272f, +0.011725f, +0.307474f, -0.022937f, +0.016682f, -0.012514f, -0.000292f}, + {+0.000891f, +0.038792f, -0.076724f, +0.005785f, -0.013845f, +0.007378f, +0.000127f}, + {-0.001574f, +0.009977f, -0.015642f, -0.004639f, -0.000740f, -0.000203f, -0.000226f}, + {+0.002378f, +0.068006f, -0.252407f, +0.007752f, -0.019800f, +0.013024f, -0.000522f}, + {-0.004302f, +0.060260f, +0.005996f, -0.003943f, -0.005945f, -0.002528f, +0.000155f}, + {-0.003991f, +0.015204f, +0.149872f, -0.006936f, +0.007406f, -0.005552f, -0.000438f}, + {-0.003479f, -0.031918f, +0.202480f, -0.003236f, +0.010951f, -0.010456f, +0.000030f}, + {-0.001985f, +0.025675f, +0.051263f, -0.016015f, +0.009638f, -0.007087f, -0.000243f}, + {+0.005351f, -0.015965f, -0.094735f, +0.021303f, -0.013086f, +0.009584f, +0.000288f}, + {+0.002121f, -0.032597f, -0.093402f, +0.010396f, -0.001090f, +0.000499f, +0.000356f} + }, + { + {+0.001361f, -0.127216f, -0.096953f, +0.006235f, -0.000180f, -0.000731f, -0.000024f}, + {-0.000077f, -0.185659f, -0.165622f, +0.007882f, +0.002327f, +0.000515f, -0.000009f}, + {+0.000798f, +0.001405f, -0.110977f, +0.003087f, +0.000336f, +0.002285f, +0.000037f}, + {-0.001371f, -0.069821f, -0.106352f, +0.006433f, +0.001232f, +0.002833f, +0.000059f}, + {+0.000676f, -0.076651f, -0.074758f, +0.008439f, +0.001331f, +0.000214f, +0.000188f}, + {+0.001012f, +0.000045f, -0.101569f, -0.000762f, -0.000644f, +0.001165f, +0.000031f}, + {+0.001504f, +0.068991f, +0.219465f, -0.002619f, -0.002215f, -0.004299f, -0.000189f}, + {+0.000708f, -0.054030f, +0.019772f, +0.009350f, +0.001699f, -0.000302f, +0.000084f}, + {+0.001417f, -0.007861f, -0.018247f, +0.005171f, -0.001109f, -0.001575f, +0.000109f}, + {+0.001702f, -0.108115f, -0.056674f, +0.007191f, +0.000679f, -0.001209f, +0.000390f}, + {+0.003820f, -0.028678f, +0.094978f, +0.001056f, -0.001138f, -0.002897f, -0.000028f}, + {+0.001163f, +0.013941f, +0.146232f, -0.003691f, -0.002281f, -0.002873f, +0.000110f}, + {+0.001835f, +0.058948f, +0.092899f, -0.010727f, -0.001995f, -0.000419f, -0.000068f}, + {-0.000383f, +0.011179f, +0.080862f, -0.000626f, -0.001516f, -0.003705f, -0.000018f}, + {-0.004888f, -0.032976f, -0.033844f, +0.002714f, +0.003106f, +0.003558f, +0.000045f}, + {-0.001851f, -0.003757f, -0.114020f, +0.002867f, +0.000714f, +0.003783f, +0.000001f} + }, + { + {+0.000989f, +0.092433f, +0.193494f, -0.016545f, -0.001036f, +0.000893f, +0.000031f}, + {-0.000902f, +0.141939f, +0.265388f, -0.024296f, -0.001144f, -0.001844f, -0.000003f}, + {+0.001383f, -0.000237f, -0.122476f, -0.000540f, +0.001285f, +0.001055f, -0.000304f}, + {-0.000497f, +0.058598f, +0.045853f, -0.014865f, -0.000634f, +0.000463f, -0.000091f}, + {-0.000237f, +0.057564f, +0.087896f, -0.015305f, +0.001272f, -0.001760f, -0.000039f}, + {+0.001374f, +0.003361f, -0.091147f, +0.000960f, -0.000406f, +0.001710f, -0.000148f}, + {+0.001943f, -0.066809f, +0.042081f, +0.008400f, -0.000093f, +0.002768f, +0.000282f}, + {-0.000153f, +0.028003f, +0.111273f, -0.008248f, +0.001235f, -0.003749f, -0.000175f}, + {+0.000675f, +0.002884f, -0.010918f, -0.003694f, -0.000404f, -0.000614f, +0.000132f}, + {-0.001418f, +0.072420f, +0.180948f, -0.017214f, -0.000992f, -0.005319f, +0.000293f}, + {+0.001484f, +0.001291f, +0.146812f, -0.001551f, +0.002710f, +0.000106f, -0.000206f}, + {+0.002004f, -0.023206f, +0.102482f, +0.004154f, -0.000028f, +0.001722f, +0.000309f}, + {+0.002826f, -0.051123f, -0.022162f, +0.015905f, +0.000248f, +0.005517f, +0.000008f}, + {-0.000743f, -0.005847f, +0.051339f, -0.003006f, +0.000343f, +0.000305f, +0.000318f}, + {-0.001312f, +0.033335f, +0.026403f, -0.004254f, +0.000299f, -0.002144f, -0.000310f}, + {+0.000777f, +0.010567f, -0.110591f, +0.000664f, +0.001107f, +0.002352f, -0.000367f} + }, + { + {-0.001081f, -0.033814f, +0.333833f, +0.015580f, -0.000169f, +0.001418f, +0.000020f}, + {+0.000068f, -0.051968f, +0.486920f, +0.018057f, -0.001446f, -0.002909f, -0.000020f}, + {-0.001231f, -0.003720f, -0.105259f, +0.003104f, +0.000408f, -0.000534f, +0.000068f}, + {+0.000669f, -0.025095f, +0.126683f, +0.013011f, +0.000378f, -0.001754f, +0.000001f}, + {-0.000431f, -0.024471f, +0.168776f, +0.013940f, +0.000659f, -0.001756f, -0.000118f}, + {-0.001220f, -0.006562f, -0.066045f, +0.001255f, -0.000672f, +0.001593f, +0.000055f}, + {-0.000638f, +0.032380f, -0.077154f, -0.011244f, -0.002050f, +0.006869f, +0.000080f}, + {-0.000384f, -0.003919f, +0.154252f, +0.002162f, -0.000624f, -0.004539f, -0.000060f}, + {-0.000933f, -0.004213f, -0.005919f, +0.002857f, -0.000013f, +0.001095f, -0.000087f}, + {-0.000897f, -0.024730f, +0.295271f, +0.014868f, -0.000581f, -0.004478f, -0.000366f}, + {-0.002205f, +0.007868f, +0.149414f, -0.001464f, -0.001968f, +0.002619f, +0.000072f}, + {-0.000856f, +0.018526f, +0.060893f, -0.004704f, -0.000041f, +0.005169f, -0.000105f}, + {-0.001868f, +0.025649f, -0.086705f, -0.011873f, -0.000399f, +0.008170f, +0.000137f}, + {+0.000887f, +0.002393f, +0.005593f, +0.004599f, +0.000139f, +0.003740f, -0.000067f}, + {+0.003181f, -0.002560f, +0.063703f, -0.002038f, -0.001140f, -0.005416f, +0.000026f}, + {+0.000621f, -0.004432f, -0.093619f, +0.002450f, +0.000816f, +0.000256f, +0.000136f} + }, + { + {-0.000993f, -0.001761f, +0.290470f, -0.026998f, +0.004346f, +0.001346f, -0.000039f}, + {+0.000907f, -0.008888f, +0.442379f, -0.025931f, +0.005447f, -0.002552f, +0.000039f}, + {-0.001503f, +0.012850f, -0.084634f, -0.005522f, -0.001963f, -0.000167f, +0.000255f}, + {+0.000250f, +0.003902f, +0.108970f, -0.022510f, +0.001247f, -0.002167f, +0.000089f}, + {+0.000174f, +0.001806f, +0.141803f, -0.020639f, +0.002673f, -0.000809f, +0.000112f}, + {-0.001312f, +0.013144f, -0.050638f, -0.007456f, -0.001478f, +0.001569f, +0.000104f}, + {-0.001499f, -0.008388f, -0.082956f, +0.019708f, -0.001680f, +0.005721f, -0.000262f}, + {-0.000041f, -0.001863f, +0.127396f, -0.012108f, +0.001411f, -0.002508f, +0.000239f}, + {-0.000715f, +0.006113f, -0.013908f, -0.011484f, +0.000460f, +0.001411f, -0.000095f}, + {+0.000981f, -0.002577f, +0.248744f, -0.018853f, +0.004160f, -0.002225f, -0.000118f}, + {-0.001352f, -0.005720f, +0.121014f, +0.004489f, -0.000186f, +0.003461f, +0.000201f}, + {-0.001794f, -0.007883f, +0.040311f, +0.006885f, +0.000317f, +0.004274f, -0.000273f}, + {-0.002392f, -0.002476f, -0.074256f, +0.022144f, -0.001551f, +0.006133f, -0.000150f}, + {+0.001088f, -0.008842f, -0.006752f, +0.003464f, -0.000302f, +0.002836f, -0.000315f}, + {+0.001092f, -0.012713f, +0.072873f, +0.008050f, +0.000423f, -0.003892f, +0.000312f}, + {-0.000911f, +0.006864f, -0.069290f, -0.001134f, -0.000822f, +0.000026f, +0.000265f} + } +}; + +const float rightHRIRReal_HOA3[BINAURAL_CONVBANDS][16][7]= +{ + { + {-0.004181f, +0.093228f, +0.655506f, +0.048565f, -0.005834f, -0.005472f, -0.000066f}, + {-0.005374f, -0.154923f, +0.116326f, +0.006786f, -0.018305f, -0.006415f, -0.000041f}, + {-0.018684f, -0.029658f, +0.105423f, -0.036469f, +0.025356f, +0.038274f, +0.001267f}, + {-0.008871f, +0.005481f, +0.057893f, -0.019694f, -0.003264f, +0.024498f, +0.000905f}, + {+0.007135f, -0.000238f, +0.011224f, -0.011879f, +0.000153f, -0.021305f, -0.001042f}, + {+0.011073f, +0.016271f, +0.017319f, -0.023598f, -0.000936f, -0.014578f, -0.000910f}, + {-0.015550f, -0.028470f, -0.026848f, +0.035803f, -0.009496f, +0.011103f, +0.001177f}, + {-0.015302f, -0.004218f, +0.013086f, +0.011363f, -0.012451f, +0.030157f, +0.000806f}, + {+0.006118f, -0.009705f, +0.007305f, -0.026069f, -0.010633f, +0.007816f, +0.000054f}, + {+0.000283f, +0.011328f, -0.005244f, -0.003740f, +0.001375f, -0.008133f, -0.000147f}, + {+0.007055f, -0.006562f, +0.019723f, +0.006761f, -0.003557f, -0.002004f, -0.000575f}, + {+0.005753f, +0.006934f, -0.005584f, -0.015274f, -0.002805f, +0.023709f, +0.000371f}, + {+0.001950f, +0.010016f, +0.006074f, +0.008742f, +0.013106f, -0.015378f, -0.000623f}, + {+0.004074f, -0.005302f, -0.028657f, +0.012447f, +0.002805f, -0.010937f, -0.000426f}, + {-0.004197f, -0.012821f, +0.003244f, +0.002529f, +0.002057f, +0.017829f, +0.000124f}, + {-0.000963f, -0.001662f, +0.000380f, -0.001216f, -0.003218f, +0.008842f, +0.000285f} + }, + { + {+0.003556f, -0.239019f, +0.015814f, -0.034927f, +0.000835f, -0.000512f, +0.000096f}, + {+0.005835f, +0.204261f, +0.475712f, -0.024759f, +0.018679f, +0.011234f, -0.000105f}, + {+0.033721f, +0.079282f, +0.110406f, -0.062743f, -0.006587f, -0.011131f, -0.001989f}, + {+0.017838f, +0.044971f, +0.009827f, -0.031696f, +0.008260f, +0.013480f, -0.001373f}, + {-0.013831f, -0.024735f, +0.028944f, +0.000956f, +0.011000f, +0.001960f, +0.001544f}, + {-0.021084f, -0.059877f, -0.043110f, -0.024830f, +0.009611f, +0.004985f, +0.001304f}, + {+0.024367f, +0.081687f, +0.039981f, +0.014737f, -0.015175f, -0.013033f, -0.001675f}, + {+0.029191f, +0.107182f, +0.052422f, -0.056640f, -0.061598f, -0.000773f, -0.001122f}, + {-0.008281f, -0.074836f, -0.054378f, -0.012477f, +0.014774f, +0.013960f, -0.000068f}, + {+0.000247f, +0.007528f, +0.001935f, +0.000487f, +0.009084f, +0.000991f, +0.000245f}, + {-0.009984f, -0.059593f, -0.036553f, +0.008280f, +0.016629f, +0.010745f, +0.000707f}, + {-0.008513f, -0.061561f, -0.054083f, -0.023396f, -0.007761f, +0.009113f, -0.000565f}, + {-0.007663f, -0.005870f, -0.005063f, +0.019587f, +0.022546f, -0.002888f, +0.000939f}, + {-0.008532f, -0.051613f, -0.057984f, +0.002035f, +0.015445f, +0.003259f, +0.000501f}, + {+0.007851f, +0.011553f, +0.020470f, -0.020649f, -0.005084f, +0.010733f, -0.000320f}, + {+0.000570f, -0.000978f, +0.021905f, -0.003402f, -0.018285f, -0.001482f, -0.000408f} + }, + { + {+0.007736f, +0.144660f, -0.537748f, -0.004930f, +0.008226f, +0.004392f, +0.000030f}, + {+0.007349f, +0.151725f, +0.515888f, +0.001929f, +0.062669f, -0.004955f, +0.000372f}, + {-0.012179f, +0.171781f, +0.054918f, -0.071555f, +0.033201f, -0.047777f, +0.000031f}, + {-0.008553f, +0.124306f, +0.013829f, -0.071708f, +0.089422f, -0.036145f, -0.000142f}, + {+0.007018f, -0.059230f, -0.004335f, +0.031204f, -0.019769f, +0.032580f, +0.000209f}, + {+0.008972f, -0.099683f, -0.129678f, +0.054026f, -0.027007f, +0.029783f, +0.000267f}, + {+0.002210f, +0.110557f, +0.095413f, -0.048633f, +0.007172f, -0.025076f, -0.000359f}, + {-0.012999f, +0.162940f, +0.053582f, -0.061108f, -0.031308f, -0.032573f, -0.000315f}, + {-0.004442f, -0.087134f, -0.064380f, +0.020402f, +0.034501f, -0.007477f, +0.000025f}, + {-0.001523f, +0.000248f, +0.027496f, +0.002745f, +0.003190f, +0.007474f, +0.000005f}, + {-0.002997f, -0.089888f, -0.060886f, +0.047296f, +0.022673f, +0.008361f, +0.000391f}, + {-0.000211f, -0.098294f, -0.051481f, +0.008578f, -0.001392f, -0.017489f, -0.000056f}, + {+0.012945f, -0.029045f, -0.019498f, +0.027318f, -0.017298f, +0.022221f, +0.000180f}, + {+0.007159f, -0.062500f, -0.089020f, +0.017716f, -0.003152f, +0.016636f, +0.000389f}, + {-0.001058f, +0.044275f, +0.008121f, -0.027659f, +0.015946f, -0.015722f, +0.000269f}, + {+0.003282f, -0.015996f, +0.030381f, -0.007292f, -0.006963f, -0.008990f, -0.000065f} + }, + { + {-0.011861f, +0.271405f, -0.278430f, +0.025016f, +0.011294f, +0.000635f, -0.000128f}, + {-0.015129f, -0.148744f, +0.117912f, -0.045648f, +0.027880f, -0.014786f, -0.000135f}, + {-0.014271f, +0.053035f, -0.051116f, -0.069585f, +0.052625f, -0.010128f, +0.001602f}, + {-0.010195f, +0.240862f, +0.281626f, -0.015036f, +0.064266f, -0.026405f, +0.001338f}, + {+0.003863f, -0.128285f, -0.125752f, +0.023611f, -0.014719f, +0.008956f, -0.001428f}, + {+0.009981f, -0.104866f, -0.151836f, +0.071803f, -0.037142f, -0.005583f, -0.001248f}, + {-0.029302f, +0.049151f, +0.034147f, -0.080526f, +0.015046f, +0.009918f, +0.001557f}, + {-0.011379f, +0.090502f, -0.003478f, +0.001737f, +0.015717f, -0.005394f, +0.001166f}, + {+0.013601f, +0.081238f, +0.096361f, +0.008808f, +0.002253f, -0.024062f, -0.000103f}, + {+0.000547f, +0.077561f, +0.091202f, -0.015743f, -0.015044f, +0.000452f, -0.000266f}, + {+0.012582f, -0.024498f, +0.001563f, +0.041900f, -0.007496f, -0.015197f, -0.000762f}, + {+0.005409f, -0.069704f, -0.026963f, +0.036542f, -0.004091f, -0.029327f, +0.000573f}, + {-0.010060f, -0.118980f, -0.120352f, +0.001785f, -0.011422f, +0.009820f, -0.001153f}, + {-0.004957f, -0.055368f, -0.084714f, +0.042237f, -0.021229f, -0.008488f, -0.000721f}, + {-0.010961f, +0.026557f, -0.029680f, -0.009625f, +0.016351f, -0.027210f, +0.000149f}, + {-0.006161f, -0.050026f, -0.020995f, -0.004188f, +0.012464f, -0.003841f, +0.000357f} + }, + { + {+0.002854f, -0.199862f, +0.377557f, -0.018029f, -0.002648f, +0.005351f, +0.000048f}, + {+0.007718f, +0.100789f, -0.353419f, +0.007116f, -0.012908f, +0.010862f, -0.000471f}, + {+0.016418f, -0.074324f, +0.003833f, -0.013084f, +0.006916f, +0.022053f, -0.000834f}, + {+0.018457f, +0.117034f, +0.337759f, +0.029601f, -0.001259f, +0.012091f, -0.000541f}, + {-0.007000f, -0.085907f, -0.156550f, +0.033776f, -0.004889f, -0.021889f, +0.000374f}, + {-0.014497f, -0.047168f, -0.105236f, +0.022554f, -0.019941f, -0.024780f, +0.000224f}, + {+0.024730f, +0.024042f, -0.072819f, -0.011540f, -0.016134f, +0.027606f, -0.000150f}, + {+0.015868f, +0.018542f, -0.002232f, +0.039669f, +0.009321f, -0.002315f, -0.000217f}, + {-0.004792f, +0.097726f, +0.134353f, +0.002292f, -0.015559f, -0.007981f, +0.000121f}, + {+0.002961f, +0.078193f, +0.059778f, -0.012020f, -0.013271f, +0.004082f, +0.000112f}, + {-0.006885f, +0.004914f, +0.032684f, +0.024347f, -0.018042f, -0.016734f, -0.000199f}, + {-0.001772f, -0.014925f, -0.028214f, -0.010154f, -0.016195f, -0.004179f, -0.000317f}, + {-0.000537f, -0.110532f, -0.155034f, +0.027494f, -0.005245f, -0.020700f, +0.000591f}, + {+0.004704f, -0.038699f, -0.105421f, +0.070185f, -0.026884f, -0.015695f, -0.000119f}, + {+0.014543f, +0.004277f, -0.088559f, +0.042679f, -0.013529f, -0.007812f, -0.000550f}, + {+0.004113f, -0.037861f, -0.063426f, +0.011996f, -0.002855f, +0.001383f, -0.000115f} + }, + { + {+0.004158f, -0.136179f, +0.471486f, -0.010746f, -0.010150f, -0.000039f, +0.000105f}, + {+0.001616f, +0.103469f, -0.340476f, +0.006395f, -0.017271f, +0.014891f, +0.000499f}, + {-0.002218f, -0.055483f, +0.106726f, +0.030050f, -0.003992f, +0.017802f, -0.000677f}, + {-0.007681f, -0.231402f, -0.096778f, +0.009445f, -0.019641f, +0.009330f, -0.000885f}, + {+0.001659f, +0.038468f, -0.007609f, +0.019464f, -0.012397f, -0.007017f, +0.001037f}, + {+0.002067f, +0.064781f, -0.005724f, +0.006298f, +0.000105f, +0.001293f, +0.000955f}, + {+0.001286f, -0.002826f, -0.003672f, +0.025100f, -0.037327f, +0.015360f, -0.001277f}, + {-0.001989f, -0.020649f, +0.009698f, +0.016654f, -0.003984f, +0.002810f, -0.000842f}, + {-0.009792f, +0.035452f, +0.055742f, -0.018125f, -0.011729f, +0.001735f, +0.000192f}, + {-0.005497f, -0.003715f, -0.049312f, -0.044502f, -0.013554f, +0.000042f, +0.000266f}, + {-0.002308f, -0.000052f, +0.001201f, +0.002945f, -0.024499f, -0.000321f, +0.000757f}, + {+0.000409f, -0.034789f, -0.019482f, -0.002158f, -0.017279f, +0.003930f, -0.000257f}, + {+0.008118f, -0.058308f, -0.099792f, +0.052127f, -0.003244f, -0.003237f, +0.000776f}, + {-0.002482f, +0.018540f, -0.016084f, +0.049919f, +0.004611f, +0.019604f, +0.000812f}, + {-0.004910f, -0.030265f, -0.065174f, +0.035390f, -0.020625f, +0.011275f, +0.000329f}, + {+0.000473f, -0.044402f, -0.047664f, +0.009816f, -0.009466f, +0.005943f, -0.000152f} + }, + { + {-0.000632f, +0.234949f, -0.076449f, +0.029353f, -0.003342f, -0.002513f, -0.000116f}, + {-0.001122f, -0.198229f, +0.135880f, -0.032523f, +0.008400f, +0.002254f, +0.000234f}, + {-0.006474f, +0.012441f, +0.072023f, +0.003003f, -0.002338f, +0.007281f, +0.000731f}, + {-0.007024f, +0.078955f, -0.546900f, +0.031895f, -0.010218f, -0.000083f, +0.000850f}, + {+0.003709f, -0.044602f, +0.152003f, -0.012636f, -0.008659f, +0.000295f, -0.000563f}, + {+0.010219f, +0.027454f, +0.010304f, +0.002910f, +0.025409f, +0.001683f, -0.000451f}, + {-0.018198f, -0.084105f, +0.144050f, -0.000789f, -0.020402f, -0.010649f, +0.000341f}, + {-0.005226f, -0.009181f, +0.017438f, -0.007286f, +0.000747f, +0.000053f, +0.000472f}, + {+0.008675f, -0.020476f, +0.010393f, -0.001184f, +0.001399f, +0.008992f, -0.000466f}, + {+0.004645f, -0.050041f, -0.039208f, -0.025486f, -0.009431f, -0.003611f, -0.000210f}, + {+0.002164f, +0.021185f, -0.049694f, +0.015111f, -0.035540f, +0.011784f, -0.000018f}, + {-0.004950f, -0.038538f, +0.003861f, -0.013197f, -0.010301f, +0.003601f, +0.000426f}, + {-0.006239f, +0.032304f, -0.110293f, +0.018466f, -0.018058f, +0.013502f, -0.001178f}, + {-0.004171f, -0.047776f, +0.083221f, -0.008780f, +0.051549f, +0.010771f, -0.000331f}, + {-0.004816f, -0.038669f, -0.009734f, -0.007649f, -0.014633f, +0.012471f, +0.000408f}, + {-0.001871f, -0.049422f, +0.001620f, -0.014704f, +0.001301f, +0.000266f, +0.000126f} + }, + { + {-0.002392f, -0.036192f, -0.479850f, -0.001486f, +0.001638f, -0.000479f, -0.000028f}, + {-0.001963f, -0.007857f, +0.431508f, -0.005280f, +0.011825f, -0.003300f, -0.000660f}, + {+0.006153f, -0.066414f, -0.082293f, -0.009897f, +0.005003f, +0.001877f, +0.000116f}, + {+0.005774f, +0.224617f, -0.413182f, +0.006791f, -0.006357f, +0.002392f, +0.000339f}, + {-0.002588f, -0.046307f, +0.160934f, -0.021941f, -0.006604f, +0.003152f, -0.000788f}, + {-0.007718f, -0.039716f, -0.042914f, -0.020400f, +0.026544f, +0.007395f, -0.000668f}, + {+0.014838f, -0.078097f, +0.062858f, -0.030152f, -0.017961f, -0.018307f, +0.001193f}, + {-0.004124f, +0.009420f, +0.007060f, -0.006513f, +0.002601f, +0.003839f, +0.000370f}, + {+0.006195f, -0.101198f, -0.077793f, +0.008266f, +0.024484f, +0.019361f, +0.000086f}, + {-0.001527f, -0.002318f, +0.042308f, +0.011672f, +0.015245f, -0.001589f, -0.000306f}, + {+0.001741f, +0.019739f, -0.044832f, +0.016814f, -0.028009f, +0.014184f, -0.000622f}, + {+0.004708f, +0.024409f, +0.050324f, +0.002679f, +0.001951f, +0.009320f, -0.000159f}, + {+0.000144f, +0.069626f, -0.066872f, +0.001826f, -0.017513f, +0.018588f, +0.000180f}, + {+0.009404f, -0.062001f, +0.038164f, -0.022621f, +0.029874f, -0.005701f, -0.000507f}, + {+0.002125f, +0.011473f, +0.018800f, -0.013683f, -0.013917f, +0.006977f, -0.000722f}, + {-0.000868f, -0.014504f, +0.051713f, +0.021653f, +0.012194f, -0.003663f, -0.000082f} + }, + { + {-0.002627f, -0.217647f, -0.199116f, -0.027874f, +0.001338f, -0.001188f, +0.000121f}, + {-0.001456f, +0.227592f, +0.064939f, +0.030479f, +0.008616f, -0.013142f, +0.000112f}, + {-0.005287f, +0.010510f, -0.168053f, -0.000744f, +0.011442f, -0.010874f, -0.000237f}, + {+0.008122f, -0.212557f, +0.200960f, -0.021301f, +0.000743f, +0.003911f, -0.000783f}, + {-0.003321f, +0.083216f, -0.024517f, -0.036704f, +0.003253f, -0.001363f, +0.000669f}, + {-0.004434f, -0.081515f, -0.013504f, -0.001836f, +0.012951f, +0.003306f, +0.000538f}, + {-0.002527f, +0.121402f, -0.181651f, -0.032907f, -0.017697f, +0.004190f, -0.000617f}, + {+0.011938f, -0.009047f, +0.016303f, -0.005344f, -0.002001f, +0.010309f, -0.000307f}, + {-0.011873f, -0.001538f, -0.140792f, +0.010836f, +0.011246f, +0.016002f, +0.000623f}, + {-0.001530f, +0.013180f, +0.072034f, -0.006709f, +0.010792f, -0.004928f, +0.000404f}, + {+0.000018f, +0.021675f, -0.020101f, -0.009023f, +0.002344f, -0.005474f, +0.000170f}, + {+0.002449f, +0.053967f, +0.045424f, -0.000129f, -0.003141f, +0.010272f, -0.000137f}, + {+0.002967f, -0.038307f, +0.054857f, -0.015668f, +0.009116f, -0.003669f, +0.000920f}, + {-0.006187f, +0.037813f, -0.066234f, +0.004495f, +0.007024f, -0.005535f, +0.000559f}, + {+0.005730f, -0.012869f, +0.023624f, +0.001785f, -0.001105f, -0.003414f, +0.000094f}, + {+0.002570f, +0.016715f, -0.004781f, +0.037235f, +0.005228f, +0.002059f, +0.000081f} + }, + { + {+0.005711f, +0.172046f, +0.340244f, -0.003381f, -0.013696f, -0.007435f, -0.000034f}, + {+0.005530f, -0.112515f, -0.499395f, -0.033784f, -0.003636f, -0.015967f, +0.000566f}, + {+0.004504f, +0.107042f, -0.080755f, -0.022698f, -0.020622f, -0.026444f, -0.000180f}, + {-0.012473f, -0.051897f, +0.566323f, +0.031770f, +0.025642f, +0.017873f, +0.000020f}, + {+0.006985f, -0.051564f, -0.236654f, -0.038126f, -0.000171f, -0.001417f, +0.000657f}, + {+0.009348f, +0.016850f, +0.063936f, +0.001037f, +0.006876f, -0.002280f, +0.000410f}, + {-0.005675f, +0.072635f, -0.278726f, -0.059144f, -0.054019f, -0.009162f, -0.001082f}, + {-0.004093f, -0.010670f, +0.111505f, +0.019792f, -0.002096f, +0.012057f, -0.000160f}, + {-0.000257f, +0.106978f, -0.092498f, -0.031885f, -0.036807f, -0.018315f, -0.000585f}, + {+0.002795f, -0.018562f, +0.027422f, -0.012047f, -0.000133f, -0.004062f, +0.000286f}, + {-0.002864f, +0.009258f, -0.044075f, -0.007042f, +0.021077f, -0.002832f, +0.000326f}, + {-0.003557f, -0.013247f, +0.028639f, +0.035330f, +0.018218f, +0.013147f, +0.000247f}, + {-0.002389f, -0.017115f, +0.090839f, -0.019457f, +0.001333f, -0.020188f, -0.000874f}, + {-0.002543f, +0.056049f, -0.050696f, +0.018136f, -0.005719f, -0.016853f, -0.000034f}, + {-0.004821f, -0.020905f, +0.048575f, +0.000031f, +0.002939f, +0.000094f, +0.000672f}, + {+0.000268f, -0.021535f, -0.056314f, +0.016343f, -0.007238f, -0.001215f, +0.000162f} + }, + { + {+0.000497f, +0.199631f, +0.320546f, -0.008423f, -0.016715f, +0.001536f, -0.000099f}, + {-0.002105f, -0.133643f, -0.457823f, -0.039593f, -0.015856f, +0.006780f, -0.000357f}, + {-0.000079f, +0.081396f, -0.030397f, -0.042814f, -0.032019f, -0.004736f, +0.000009f}, + {-0.000752f, +0.001209f, +0.419299f, +0.074040f, +0.032104f, -0.009226f, +0.000573f}, + {-0.003770f, +0.002457f, -0.265036f, -0.035182f, -0.011981f, +0.015263f, -0.000892f}, + {-0.001110f, +0.071616f, +0.034638f, +0.014567f, -0.006196f, +0.004125f, -0.000526f}, + {+0.004522f, -0.068226f, -0.124263f, -0.072379f, -0.044733f, -0.015592f, +0.001006f}, + {-0.006005f, -0.047558f, +0.167542f, +0.027263f, +0.003279f, -0.009908f, +0.000023f}, + {+0.011422f, +0.014023f, -0.007679f, -0.030936f, -0.025432f, -0.026138f, -0.000327f}, + {-0.001555f, +0.042000f, -0.046252f, -0.010681f, -0.012037f, +0.006048f, -0.000727f}, + {-0.000883f, +0.006033f, -0.055431f, +0.001632f, +0.010415f, +0.001443f, -0.000033f}, + {-0.005003f, -0.047366f, +0.077066f, +0.030162f, +0.026926f, -0.011349f, -0.000163f}, + {+0.000276f, +0.023815f, +0.032561f, -0.004664f, -0.004597f, -0.024338f, -0.000084f}, + {+0.006453f, -0.015468f, +0.033735f, +0.002725f, -0.008248f, -0.008173f, -0.000289f}, + {-0.002307f, -0.023691f, +0.044946f, -0.000352f, +0.013672f, -0.001764f, -0.000499f}, + {-0.004157f, -0.047861f, -0.015442f, -0.000019f, -0.001816f, +0.000663f, -0.000406f} + }, + { + {-0.005964f, -0.197350f, -0.225433f, -0.026481f, -0.003950f, +0.006853f, +0.000077f}, + {-0.003793f, +0.264745f, +0.176567f, +0.023196f, +0.000162f, +0.016113f, -0.000334f}, + {-0.004451f, -0.025566f, -0.133088f, -0.012077f, +0.001550f, +0.015523f, +0.000458f}, + {+0.013172f, -0.221258f, -0.036103f, -0.012790f, +0.008449f, -0.019034f, -0.000168f}, + {-0.002864f, +0.153297f, -0.028848f, +0.004146f, -0.011196f, +0.010167f, -0.000393f}, + {-0.007616f, +0.026433f, -0.011621f, -0.001408f, -0.021183f, +0.002104f, -0.000192f}, + {+0.003962f, -0.009740f, +0.082496f, -0.000654f, +0.011697f, +0.005240f, +0.000722f}, + {+0.001790f, -0.065846f, +0.058500f, -0.003294f, -0.001401f, -0.007149f, +0.000264f}, + {-0.005722f, -0.027626f, +0.065396f, +0.027714f, +0.014716f, -0.003255f, +0.000850f}, + {-0.000381f, +0.020278f, -0.070264f, +0.005215f, +0.005661f, +0.015546f, +0.000010f}, + {+0.005566f, +0.043439f, -0.014711f, -0.011508f, -0.008588f, -0.006241f, -0.000138f}, + {+0.008800f, -0.030897f, +0.031074f, +0.010268f, +0.015735f, -0.011437f, -0.000056f}, + {+0.001946f, -0.054037f, -0.040838f, +0.018449f, +0.011271f, -0.005778f, +0.000769f}, + {-0.001760f, -0.030833f, +0.057221f, +0.007865f, +0.005993f, +0.008404f, +0.000331f}, + {+0.003817f, -0.027235f, +0.000283f, -0.007034f, +0.008768f, -0.002842f, -0.000338f}, + {+0.003914f, -0.006906f, +0.031714f, +0.006856f, +0.002150f, +0.003874f, +0.000040f} + }, + { + {+0.001457f, -0.047583f, -0.495325f, +0.001826f, +0.001333f, +0.003088f, +0.000074f}, + {+0.003753f, -0.008510f, +0.563613f, +0.007615f, +0.008082f, +0.006661f, +0.000427f}, + {+0.004161f, -0.022990f, -0.173930f, +0.006816f, +0.008882f, +0.017712f, -0.000179f}, + {-0.008172f, +0.031420f, -0.316800f, -0.012601f, -0.003429f, -0.006815f, -0.000397f}, + {+0.004546f, +0.000876f, +0.169999f, -0.007495f, -0.004006f, -0.011955f, +0.001091f}, + {+0.004040f, -0.019746f, +0.006157f, -0.011071f, -0.015718f, -0.008190f, +0.000403f}, + {-0.009703f, -0.178427f, +0.280306f, +0.028912f, +0.024755f, +0.018971f, -0.001247f}, + {+0.006735f, +0.062902f, -0.130876f, +0.006194f, -0.003662f, -0.002192f, +0.000078f}, + {-0.005369f, -0.054533f, +0.087578f, +0.035337f, +0.013629f, +0.015368f, -0.000193f}, + {-0.000537f, -0.025648f, -0.007994f, +0.001582f, +0.009441f, +0.002933f, +0.000931f}, + {-0.001931f, +0.022911f, +0.052152f, -0.025436f, -0.010985f, -0.006549f, -0.000366f}, + {-0.001104f, +0.133408f, -0.138104f, +0.014911f, -0.009229f, -0.000823f, +0.000186f}, + {-0.001412f, -0.065891f, -0.013259f, +0.004650f, +0.004768f, +0.018314f, -0.000516f}, + {-0.003560f, -0.040100f, +0.045120f, +0.030156f, -0.004957f, +0.021757f, -0.000275f}, + {-0.000713f, -0.011150f, -0.037123f, +0.018480f, -0.010877f, +0.000661f, +0.000571f}, + {-0.000355f, -0.001036f, +0.026826f, +0.021528f, -0.011143f, +0.005414f, +0.000615f} + }, + { + {+0.004917f, +0.226272f, -0.106762f, +0.026044f, -0.000057f, +0.000232f, -0.000133f}, + {-0.000447f, -0.251546f, +0.187348f, -0.019737f, -0.000219f, -0.003742f, +0.000098f}, + {-0.002107f, +0.100586f, +0.032124f, +0.022602f, -0.003273f, +0.008593f, -0.000509f}, + {-0.004410f, +0.146512f, -0.140248f, +0.007418f, -0.004350f, +0.000903f, +0.000226f}, + {+0.001171f, -0.105409f, +0.055027f, -0.007343f, +0.000273f, -0.017251f, -0.000064f}, + {+0.005972f, -0.023304f, -0.000894f, -0.004305f, +0.000775f, -0.004195f, +0.000102f}, + {+0.002711f, -0.077236f, +0.298881f, -0.003126f, +0.015293f, +0.023057f, -0.000231f}, + {-0.000738f, +0.026778f, -0.124956f, +0.013307f, -0.012450f, -0.010200f, -0.000427f}, + {+0.003679f, -0.030698f, +0.031463f, +0.005909f, -0.005917f, +0.008406f, -0.000670f}, + {+0.004324f, -0.028582f, +0.008041f, +0.006647f, -0.008704f, -0.016778f, -0.000567f}, + {-0.005419f, -0.007352f, +0.027129f, -0.011548f, +0.007720f, +0.008818f, +0.000379f}, + {-0.004487f, +0.054705f, -0.207122f, +0.010876f, -0.032187f, -0.013415f, -0.000030f}, + {-0.003490f, +0.034227f, +0.105685f, +0.015759f, +0.020826f, +0.034768f, -0.000215f}, + {+0.001504f, -0.018606f, +0.027693f, +0.016091f, -0.012131f, +0.014826f, -0.000087f}, + {+0.002136f, +0.015991f, +0.009194f, +0.014987f, -0.023762f, -0.008680f, +0.000105f}, + {-0.001298f, -0.030927f, -0.014560f, +0.013518f, -0.037065f, -0.013374f, -0.000457f} + }, + { + {-0.002855f, -0.080709f, +0.404422f, -0.019653f, +0.001624f, -0.002008f, +0.000004f}, + {+0.000474f, +0.138747f, -0.415942f, +0.024357f, -0.006345f, -0.000660f, -0.000332f}, + {+0.002438f, -0.097479f, +0.316719f, -0.005955f, +0.000256f, -0.004044f, +0.000432f}, + {+0.005548f, -0.072168f, +0.145204f, -0.011399f, -0.004729f, +0.006525f, +0.000260f}, + {-0.006232f, +0.036539f, -0.144292f, +0.020222f, -0.000238f, -0.016212f, -0.001053f}, + {-0.006994f, +0.075916f, -0.070194f, -0.012274f, +0.008481f, -0.002291f, -0.000282f}, + {+0.010641f, +0.141691f, +0.043526f, -0.009240f, +0.002948f, +0.019010f, +0.001265f}, + {-0.012596f, -0.072872f, +0.041895f, +0.001937f, -0.005665f, -0.014239f, -0.000047f}, + {+0.005735f, +0.038590f, -0.066170f, +0.003100f, -0.006978f, +0.003386f, +0.000489f}, + {-0.005820f, +0.013019f, -0.027717f, +0.015063f, -0.006044f, -0.020772f, -0.000699f}, + {+0.005317f, +0.024744f, -0.062066f, -0.000569f, +0.004243f, +0.012342f, +0.000609f}, + {-0.000631f, -0.150800f, -0.012382f, +0.009252f, -0.019727f, -0.012303f, -0.000172f}, + {+0.006829f, +0.105930f, +0.072965f, -0.013344f, +0.017414f, +0.026031f, +0.000559f}, + {+0.003943f, +0.012054f, -0.015121f, +0.003687f, +0.000929f, +0.005727f, +0.000623f}, + {-0.005204f, -0.004393f, +0.064977f, +0.004963f, -0.007088f, -0.010326f, -0.000553f}, + {-0.000739f, -0.007033f, -0.060218f, +0.009762f, -0.013292f, -0.018375f, -0.000507f} + }, + { + {-0.002393f, -0.117302f, +0.356998f, -0.023770f, -0.001521f, -0.003691f, +0.000144f}, + {-0.001809f, +0.120704f, -0.409752f, +0.018770f, -0.014706f, -0.003961f, +0.000008f}, + {-0.001960f, -0.141491f, +0.287454f, -0.006342f, -0.006437f, -0.011911f, +0.000284f}, + {+0.002959f, -0.074011f, +0.157490f, +0.001773f, +0.013139f, +0.012386f, -0.000239f}, + {+0.002902f, +0.081203f, -0.112950f, +0.010741f, +0.003024f, +0.019425f, +0.000547f}, + {-0.002050f, +0.066194f, -0.104659f, -0.016714f, +0.002794f, +0.000866f, -0.000119f}, + {-0.011528f, +0.008225f, -0.112939f, -0.015539f, -0.025693f, -0.040924f, -0.000274f}, + {+0.010410f, +0.025230f, +0.102311f, +0.004806f, +0.021267f, +0.023087f, +0.000575f}, + {-0.005473f, -0.011072f, -0.060495f, +0.003663f, -0.005569f, -0.002042f, +0.000316f}, + {+0.001924f, +0.052236f, -0.013653f, +0.000203f, -0.004939f, +0.011491f, +0.000985f}, + {+0.001647f, -0.011326f, -0.097267f, +0.004425f, -0.014111f, -0.016627f, -0.000941f}, + {+0.003668f, -0.062846f, +0.128135f, +0.003669f, +0.008089f, +0.027424f, +0.000024f}, + {-0.001119f, +0.011806f, -0.046422f, -0.026434f, -0.024751f, -0.030626f, -0.000245f}, + {-0.002447f, -0.008624f, -0.064037f, -0.015087f, -0.020497f, -0.036444f, -0.000501f}, + {+0.000478f, +0.008448f, +0.050137f, +0.002484f, +0.018473f, +0.019501f, +0.000029f}, + {+0.002749f, +0.018668f, -0.022800f, +0.004117f, +0.006094f, +0.020072f, +0.000831f} + }, + { + {+0.001300f, +0.203261f, -0.169783f, +0.024359f, -0.005336f, -0.001691f, -0.000112f}, + {-0.000442f, -0.283920f, +0.228721f, -0.050599f, -0.011296f, -0.008092f, +0.000207f}, + {-0.002414f, +0.094299f, -0.032645f, -0.002329f, -0.001882f, -0.013648f, -0.000457f}, + {-0.004227f, +0.101458f, -0.078323f, +0.025650f, +0.023677f, +0.008354f, -0.000149f}, + {+0.004310f, -0.040486f, +0.067656f, -0.002564f, +0.009152f, +0.020113f, +0.000721f}, + {+0.006574f, -0.036030f, -0.031660f, -0.001982f, -0.011839f, +0.005651f, +0.000249f}, + {-0.003724f, -0.096560f, +0.032395f, -0.066533f, -0.059170f, -0.030499f, -0.001058f}, + {+0.006692f, +0.160009f, -0.129379f, +0.052154f, +0.052438f, +0.021767f, -0.000066f}, + {-0.003323f, -0.125272f, +0.095773f, -0.021055f, +0.002751f, -0.004192f, -0.000439f}, + {+0.003058f, +0.040531f, -0.031526f, +0.019596f, +0.001958f, +0.022711f, +0.000117f}, + {-0.006495f, -0.062678f, +0.034315f, -0.006680f, -0.044013f, -0.015039f, -0.000365f}, + {+0.005311f, +0.024302f, +0.038568f, +0.010732f, +0.046246f, +0.018532f, +0.000284f}, + {-0.008861f, -0.084231f, +0.034646f, -0.029324f, -0.051146f, -0.030089f, -0.000240f}, + {-0.007139f, -0.034225f, -0.007526f, -0.011945f, -0.061869f, -0.025586f, -0.000432f}, + {+0.007578f, +0.057792f, -0.063008f, +0.015978f, +0.032751f, +0.013830f, +0.000600f}, + {-0.001234f, -0.011094f, +0.018209f, +0.014340f, +0.006466f, +0.018926f, +0.000111f} + }, + { + {+0.002540f, -0.000338f, -0.479144f, +0.000386f, -0.002502f, +0.001455f, -0.000053f}, + {+0.003492f, -0.047296f, +0.570068f, -0.004548f, +0.004671f, -0.001911f, +0.000027f}, + {+0.005565f, -0.070554f, -0.294440f, +0.005506f, +0.010986f, -0.002858f, -0.000058f}, + {-0.004117f, +0.049455f, -0.195110f, +0.003929f, +0.005332f, -0.003637f, +0.000211f}, + {-0.005239f, +0.039531f, +0.206152f, -0.017684f, -0.012383f, +0.000355f, -0.000834f}, + {-0.000025f, +0.011412f, +0.088156f, +0.002778f, -0.007335f, +0.007815f, +0.000126f}, + {+0.014951f, -0.155014f, +0.017818f, +0.001033f, +0.001113f, +0.012028f, +0.000714f}, + {-0.014703f, +0.108984f, -0.204093f, -0.012043f, +0.008363f, -0.004674f, -0.000739f}, + {+0.004059f, -0.053922f, +0.114961f, -0.028402f, +0.006330f, -0.001994f, -0.000160f}, + {-0.003724f, +0.050906f, +0.007554f, +0.003538f, -0.016118f, +0.006369f, -0.000907f}, + {+0.008048f, +0.007569f, +0.119841f, +0.012922f, -0.012051f, +0.014974f, +0.001375f}, + {-0.013062f, +0.030629f, +0.004117f, -0.003212f, +0.008149f, -0.009890f, -0.000182f}, + {+0.009740f, -0.079383f, +0.082374f, +0.010250f, -0.003944f, -0.004234f, +0.000369f}, + {+0.014330f, +0.009080f, +0.046588f, +0.019107f, -0.009613f, +0.013944f, +0.000930f}, + {-0.006949f, +0.023465f, -0.071807f, -0.001860f, -0.007554f, -0.013510f, -0.000279f}, + {-0.002830f, +0.009786f, +0.032572f, -0.010719f, -0.019826f, -0.001129f, -0.000924f} + }, + { + {-0.000518f, -0.211474f, -0.133935f, -0.032307f, -0.000445f, +0.000582f, +0.000134f}, + {-0.002665f, +0.289252f, +0.086622f, +0.034396f, +0.004915f, +0.001571f, -0.000206f}, + {-0.002402f, -0.054649f, -0.277773f, -0.010873f, +0.005456f, +0.005496f, +0.000270f}, + {+0.006863f, -0.037276f, -0.109263f, -0.002603f, -0.001383f, -0.003887f, +0.000096f}, + {+0.000365f, +0.066656f, +0.133958f, -0.005654f, -0.003515f, -0.012311f, -0.000218f}, + {-0.006007f, -0.060607f, +0.226834f, -0.004299f, +0.005430f, -0.000507f, -0.000245f}, + {-0.007419f, -0.063255f, -0.041223f, +0.013192f, +0.013212f, +0.008787f, +0.000568f}, + {+0.005355f, -0.074959f, -0.017724f, -0.005843f, -0.003299f, -0.007563f, +0.000379f}, + {+0.005191f, +0.144000f, -0.130413f, -0.000127f, +0.002794f, -0.002991f, +0.000328f}, + {+0.001484f, -0.018159f, +0.100829f, -0.018864f, +0.001469f, -0.014392f, +0.000332f}, + {-0.010812f, +0.031458f, +0.085778f, +0.014179f, -0.006433f, +0.023583f, -0.000238f}, + {+0.005771f, +0.068903f, -0.096062f, +0.000252f, -0.011090f, -0.003258f, -0.000270f}, + {-0.000237f, -0.068071f, +0.174038f, -0.003828f, +0.006233f, -0.008771f, -0.000157f}, + {-0.011534f, -0.073815f, +0.180878f, +0.023529f, +0.003450f, +0.017160f, -0.000130f}, + {+0.000533f, -0.029314f, +0.026930f, -0.025304f, -0.011398f, -0.006662f, -0.000498f}, + {+0.005938f, +0.020909f, +0.008329f, -0.013694f, -0.010899f, -0.016792f, +0.000342f} + }, + { + {-0.004563f, +0.124857f, +0.392082f, +0.013563f, +0.002060f, +0.000768f, -0.000051f}, + {+0.000874f, -0.118799f, -0.536475f, -0.027073f, +0.003653f, +0.007953f, -0.000025f}, + {-0.002483f, +0.099121f, -0.035839f, -0.009303f, +0.001911f, +0.011561f, +0.000073f}, + {+0.001566f, +0.007969f, +0.017632f, +0.014602f, -0.004766f, -0.011498f, -0.000206f}, + {+0.000162f, -0.069466f, -0.070394f, +0.010535f, +0.013295f, -0.006761f, +0.000783f}, + {+0.001614f, -0.022761f, +0.217697f, -0.007286f, +0.009756f, -0.000855f, -0.000123f}, + {-0.006230f, +0.043001f, +0.068506f, +0.012269f, -0.001247f, +0.005912f, -0.000829f}, + {+0.003179f, +0.070957f, +0.187234f, +0.028351f, +0.003912f, -0.015536f, +0.000707f}, + {-0.008139f, +0.072807f, -0.193636f, +0.001437f, -0.001644f, -0.004401f, +0.000212f}, + {-0.001051f, -0.001027f, +0.130312f, -0.005052f, +0.009787f, -0.012646f, +0.000484f}, + {+0.011122f, -0.053720f, -0.094386f, -0.024713f, -0.004708f, +0.004962f, -0.001401f}, + {+0.005833f, -0.020123f, -0.198197f, -0.023257f, +0.001066f, +0.005043f, +0.000360f}, + {-0.004564f, -0.002440f, +0.257145f, +0.012398f, -0.014402f, +0.011456f, -0.000090f}, + {+0.003708f, -0.033867f, +0.192105f, -0.009019f, +0.001369f, +0.017649f, -0.000875f}, + {-0.000732f, +0.046885f, +0.134712f, +0.007725f, +0.003664f, +0.006970f, +0.000515f}, + {-0.005583f, -0.032353f, -0.019855f, +0.017107f, -0.001283f, -0.011122f, +0.000713f} + }, + { + {+0.004066f, +0.114050f, +0.374700f, +0.029211f, +0.000581f, -0.000706f, -0.000055f}, + {-0.002409f, -0.197372f, -0.418425f, -0.043739f, +0.001381f, +0.006220f, +0.000261f}, + {+0.001898f, -0.064197f, +0.179119f, -0.008245f, +0.001749f, +0.008116f, -0.000159f}, + {-0.006930f, -0.044567f, +0.116693f, +0.010436f, -0.007263f, -0.009260f, -0.000055f}, + {+0.005436f, +0.030846f, -0.218738f, +0.016032f, +0.014948f, +0.006593f, -0.000194f}, + {+0.005550f, +0.139940f, -0.036170f, +0.010954f, +0.009097f, -0.004539f, +0.000244f}, + {+0.007570f, -0.021370f, +0.201636f, -0.018407f, -0.011309f, +0.008794f, -0.000028f}, + {+0.000471f, +0.110932f, +0.171227f, +0.014736f, -0.001743f, +0.001483f, -0.000770f}, + {-0.001447f, -0.112344f, +0.009378f, -0.014922f, -0.005067f, +0.006639f, -0.000413f}, + {+0.002692f, +0.030681f, +0.061540f, +0.021293f, +0.000512f, -0.001990f, -0.000334f}, + {-0.001796f, -0.003780f, -0.092257f, -0.069391f, +0.029804f, -0.029220f, +0.000867f}, + {-0.005138f, -0.080068f, -0.149507f, -0.001138f, +0.024022f, -0.014589f, +0.000067f}, + {-0.004224f, +0.108920f, +0.013328f, +0.069316f, -0.035946f, +0.025685f, +0.000258f}, + {+0.000658f, +0.090331f, +0.062341f, -0.027002f, +0.011859f, +0.001213f, +0.000603f}, + {+0.005900f, +0.098418f, +0.049627f, +0.003081f, +0.013620f, +0.005035f, +0.000178f}, + {+0.001625f, -0.027640f, -0.069299f, +0.028848f, -0.005261f, +0.005494f, -0.000622f} + }, + { + {+0.000963f, -0.209168f, -0.136783f, -0.021436f, -0.001315f, +0.001715f, +0.000053f}, + {+0.003836f, +0.240060f, +0.249017f, +0.026285f, +0.002356f, -0.002581f, -0.000097f}, + {+0.002543f, -0.056651f, +0.175187f, -0.004318f, +0.000986f, +0.000543f, -0.000230f}, + {-0.000920f, +0.004716f, +0.131627f, +0.000502f, -0.004907f, +0.000275f, +0.000237f}, + {-0.006067f, +0.044059f, -0.163804f, +0.013386f, +0.002210f, -0.001514f, -0.000471f}, + {-0.004568f, -0.030380f, -0.236809f, -0.001626f, -0.004495f, -0.008084f, +0.000145f}, + {-0.000637f, +0.044154f, +0.318363f, +0.001072f, -0.013326f, +0.005888f, +0.000534f}, + {-0.004169f, -0.041204f, +0.007502f, +0.013093f, -0.005489f, +0.005599f, -0.000320f}, + {+0.009667f, -0.026427f, +0.125387f, -0.020909f, -0.002220f, +0.007411f, -0.000193f}, + {-0.003570f, -0.038849f, -0.026343f, +0.010463f, +0.003426f, +0.005718f, -0.000181f}, + {-0.011129f, +0.105682f, +0.071918f, -0.042767f, +0.045744f, -0.019229f, +0.001047f}, + {-0.001721f, -0.011709f, -0.075679f, -0.011170f, +0.018633f, -0.009301f, -0.000298f}, + {+0.014881f, -0.126099f, -0.329945f, +0.029695f, -0.035112f, +0.015020f, -0.000347f}, + {-0.001429f, +0.041747f, -0.036410f, -0.017561f, +0.002266f, -0.010646f, +0.000475f}, + {-0.004566f, -0.060021f, -0.112881f, -0.001467f, +0.001208f, -0.008750f, -0.000458f}, + {+0.003385f, -0.054651f, -0.117931f, -0.004432f, -0.010618f, +0.008056f, -0.000354f} + }, + { + {-0.002636f, +0.021786f, -0.463103f, +0.000210f, -0.002240f, +0.001465f, +0.000004f}, + {-0.000878f, +0.033402f, +0.570083f, +0.011803f, +0.002903f, -0.005358f, -0.000186f}, + {-0.003861f, +0.077704f, -0.003869f, +0.009538f, +0.005934f, -0.007444f, +0.000299f}, + {+0.010766f, +0.071297f, +0.041586f, -0.012126f, -0.005377f, +0.011762f, -0.000054f}, + {-0.003440f, -0.083945f, -0.020595f, +0.010102f, +0.001688f, -0.003568f, +0.000305f}, + {-0.000517f, -0.090621f, -0.157862f, -0.005981f, -0.009055f, -0.001744f, -0.000308f}, + {+0.000182f, +0.151744f, +0.162737f, -0.002607f, +0.004109f, -0.003418f, -0.000159f}, + {-0.001674f, +0.013807f, -0.090106f, +0.002037f, -0.002899f, -0.000327f, +0.000853f}, + {-0.006443f, +0.001872f, +0.099185f, +0.004052f, -0.002515f, -0.000928f, +0.000598f}, + {+0.003444f, -0.003891f, -0.070062f, -0.022333f, +0.021229f, +0.003330f, +0.000068f}, + {+0.012896f, +0.014560f, +0.156269f, -0.016693f, +0.002612f, +0.014390f, -0.001286f}, + {-0.000829f, -0.055243f, +0.003801f, -0.001636f, +0.000490f, +0.001040f, -0.000005f}, + {-0.012356f, -0.110940f, -0.289749f, -0.015445f, +0.011167f, -0.013527f, +0.000160f}, + {+0.002911f, +0.062983f, -0.089502f, +0.007738f, +0.002529f, -0.010796f, -0.000711f}, + {-0.001042f, -0.042600f, -0.131138f, -0.021059f, +0.003745f, -0.005700f, +0.000034f}, + {-0.005370f, -0.110106f, -0.043966f, -0.008083f, +0.000494f, +0.000652f, +0.000654f} + }, + { + {+0.000068f, +0.218352f, -0.157003f, +0.028534f, -0.003926f, -0.000507f, -0.000005f}, + {-0.002073f, -0.275247f, +0.104488f, -0.034616f, +0.005146f, +0.000060f, +0.000164f}, + {+0.000542f, +0.035123f, -0.100984f, -0.012987f, -0.001903f, -0.010200f, +0.000216f}, + {-0.007809f, -0.017882f, -0.016749f, +0.003757f, +0.007758f, +0.013407f, -0.000199f}, + {+0.011198f, -0.012942f, +0.020894f, -0.014537f, -0.001742f, -0.002696f, +0.000187f}, + {-0.000091f, +0.053033f, +0.050071f, +0.012761f, -0.000476f, +0.005826f, -0.000111f}, + {-0.004382f, -0.147911f, -0.200725f, +0.006370f, +0.014963f, -0.002284f, -0.000221f}, + {+0.006114f, +0.016727f, -0.125469f, +0.009898f, +0.002187f, -0.002825f, -0.000120f}, + {+0.000315f, -0.042519f, -0.011423f, -0.012532f, -0.008250f, -0.008414f, -0.000042f}, + {-0.003440f, -0.012295f, -0.068286f, -0.009074f, +0.037833f, +0.006784f, +0.000232f}, + {-0.002138f, -0.083651f, +0.088555f, -0.008486f, -0.011516f, +0.015378f, -0.000453f}, + {+0.008151f, +0.083680f, +0.170893f, -0.004520f, -0.005257f, +0.007598f, +0.000202f}, + {-0.000469f, +0.132201f, -0.018388f, -0.009231f, +0.019167f, -0.012329f, +0.000366f}, + {-0.003734f, +0.034878f, -0.050414f, +0.013477f, +0.006657f, -0.003764f, -0.000102f}, + {-0.000430f, +0.080573f, -0.013035f, -0.016572f, +0.018193f, -0.001715f, +0.000223f}, + {+0.002846f, +0.020446f, +0.092520f, -0.009215f, +0.003194f, -0.000469f, +0.000030f} + }, + { + {+0.000963f, -0.125190f, +0.346445f, -0.013595f, +0.000303f, -0.000978f, -0.000033f}, + {-0.000446f, +0.100728f, -0.488217f, +0.016236f, +0.005710f, -0.001786f, +0.000035f}, + {+0.002743f, -0.014250f, -0.025406f, -0.016135f, -0.007374f, -0.003595f, -0.000484f}, + {-0.003552f, -0.038637f, -0.023362f, +0.006065f, +0.017089f, +0.002181f, +0.000163f}, + {-0.005542f, +0.022598f, +0.016879f, -0.000337f, -0.010965f, +0.004955f, -0.000192f}, + {+0.003897f, +0.006264f, +0.110622f, +0.001101f, +0.004484f, +0.005876f, +0.000391f}, + {+0.001192f, -0.096496f, -0.316300f, -0.005468f, +0.032792f, -0.008475f, +0.000051f}, + {+0.000727f, +0.053728f, -0.131435f, +0.003649f, +0.007573f, +0.001815f, -0.000580f}, + {-0.000863f, +0.008255f, -0.088991f, -0.000632f, -0.015735f, -0.002803f, -0.000629f}, + {+0.002406f, -0.061420f, -0.048885f, +0.025571f, +0.026139f, +0.013054f, +0.000085f}, + {-0.006958f, -0.009989f, -0.015982f, -0.015590f, -0.008811f, +0.003944f, +0.001342f}, + {-0.004616f, +0.048619f, +0.248100f, +0.002887f, -0.015818f, +0.007122f, +0.000127f}, + {+0.009488f, +0.064501f, +0.087537f, +0.011252f, +0.004644f, -0.003762f, -0.000684f}, + {+0.000069f, -0.120500f, +0.126342f, -0.004190f, +0.000200f, -0.001712f, +0.000586f}, + {+0.005149f, -0.007666f, +0.084919f, +0.009632f, +0.003272f, +0.006689f, +0.000055f}, + {+0.000416f, +0.029426f, +0.098519f, +0.008834f, +0.001161f, +0.002526f, -0.000495f} + }, + { + {+0.000886f, -0.148670f, +0.323207f, -0.018371f, -0.002564f, -0.001740f, +0.000012f}, + {+0.003884f, +0.175284f, -0.400890f, +0.026675f, +0.007851f, -0.000737f, -0.000065f}, + {-0.002495f, +0.080937f, +0.147671f, +0.011536f, +0.007971f, +0.006899f, +0.000035f}, + {+0.007961f, -0.084392f, -0.116379f, -0.003191f, +0.002839f, -0.007308f, +0.000062f}, + {-0.006158f, +0.080005f, +0.088685f, +0.003948f, -0.007957f, +0.004571f, -0.000120f}, + {-0.002211f, -0.071563f, +0.001572f, -0.017783f, -0.002945f, -0.001211f, -0.000025f}, + {+0.006354f, +0.043718f, -0.096037f, +0.016202f, +0.015087f, -0.012592f, +0.000187f}, + {-0.008848f, +0.111246f, +0.002666f, -0.000486f, +0.002601f, +0.004659f, +0.000250f}, + {+0.003002f, +0.031933f, -0.067079f, +0.004866f, -0.003717f, +0.006734f, +0.000335f}, + {+0.000242f, -0.057016f, -0.043568f, +0.018255f, -0.005973f, -0.012687f, -0.000474f}, + {+0.006561f, -0.039260f, -0.109217f, -0.013646f, +0.000558f, -0.004597f, -0.000141f}, + {-0.005911f, -0.034849f, +0.122537f, -0.003454f, -0.006816f, +0.008021f, -0.000346f}, + {-0.009125f, +0.032899f, +0.054825f, -0.015163f, +0.007845f, -0.000234f, +0.000195f}, + {+0.004323f, -0.058064f, +0.175096f, -0.013022f, -0.007874f, +0.002160f, -0.000093f}, + {-0.000030f, -0.004530f, +0.139712f, +0.009150f, -0.007095f, +0.003336f, -0.000160f}, + {+0.000090f, +0.003404f, +0.036143f, -0.013076f, -0.011742f, -0.000567f, +0.000145f} + }, + { + {-0.001658f, +0.168998f, -0.158518f, +0.021572f, -0.003793f, -0.001030f, +0.000055f}, + {-0.001127f, -0.205208f, +0.220912f, -0.026048f, +0.002674f, +0.002769f, -0.000023f}, + {-0.000461f, +0.009252f, +0.227604f, +0.010467f, +0.006338f, +0.006074f, +0.000422f}, + {-0.002384f, +0.002851f, -0.212446f, +0.002659f, +0.001628f, -0.007095f, -0.000144f}, + {+0.008381f, +0.010679f, +0.133194f, +0.002584f, -0.005642f, +0.000472f, +0.000122f}, + {-0.002492f, -0.019849f, -0.076078f, +0.001470f, -0.003467f, -0.000327f, -0.000366f}, + {-0.004536f, -0.073352f, +0.163370f, -0.006974f, -0.006111f, +0.002960f, -0.000053f}, + {+0.006503f, -0.143768f, +0.271114f, -0.002346f, -0.005069f, +0.007486f, +0.000318f}, + {+0.000578f, -0.025307f, +0.019989f, +0.002596f, -0.000438f, +0.005960f, +0.000442f}, + {-0.001669f, -0.018575f, -0.086499f, +0.013973f, -0.005522f, -0.018115f, +0.000044f}, + {-0.003923f, +0.045316f, -0.178720f, -0.008368f, +0.009955f, -0.008103f, -0.001025f}, + {+0.005730f, +0.104850f, -0.098014f, +0.001983f, +0.005339f, -0.003699f, -0.000081f}, + {+0.004112f, -0.056472f, +0.078708f, +0.007073f, -0.002789f, +0.002619f, +0.000670f}, + {-0.002113f, +0.147342f, -0.011554f, -0.009749f, -0.006943f, +0.003214f, -0.000444f}, + {-0.009491f, -0.008362f, +0.168137f, -0.007087f, -0.000514f, +0.001707f, -0.000225f}, + {-0.002858f, +0.040341f, -0.044863f, -0.002151f, -0.014669f, -0.003465f, +0.000263f} + }, + { + {+0.000325f, +0.012293f, -0.420365f, -0.001073f, -0.001275f, -0.000190f, -0.000056f}, + {-0.004153f, -0.000289f, +0.552776f, -0.004938f, -0.001551f, +0.000077f, -0.000021f}, + {+0.003179f, -0.114923f, +0.044254f, -0.005107f, +0.002854f, -0.000178f, -0.000238f}, + {-0.002447f, +0.087293f, -0.100868f, -0.001711f, +0.001963f, -0.006609f, +0.000026f}, + {-0.000798f, -0.106727f, -0.010700f, -0.015899f, -0.006953f, +0.001329f, +0.000158f}, + {+0.001202f, +0.077157f, +0.029032f, +0.005126f, +0.002123f, +0.005150f, +0.000138f}, + {-0.005108f, -0.025092f, +0.196748f, -0.011988f, -0.001042f, +0.009182f, -0.000182f}, + {-0.000182f, -0.149947f, +0.283461f, +0.014807f, -0.003734f, -0.001388f, -0.000169f}, + {-0.004916f, +0.034459f, +0.115305f, -0.001284f, +0.001624f, -0.003142f, -0.000476f}, + {+0.000563f, -0.021689f, -0.129439f, -0.009360f, +0.006104f, -0.001314f, +0.000611f}, + {+0.004903f, +0.097921f, -0.109890f, +0.003701f, +0.014923f, +0.001100f, +0.000445f}, + {+0.004445f, +0.041667f, -0.183618f, +0.002519f, +0.000687f, -0.004062f, +0.000508f}, + {+0.001992f, -0.044965f, +0.102788f, -0.009037f, -0.015851f, -0.006745f, -0.000749f}, + {-0.004462f, +0.089632f, -0.099871f, +0.006564f, +0.004290f, +0.010085f, +0.000230f}, + {+0.005311f, -0.026905f, +0.088346f, +0.002622f, +0.012027f, +0.008602f, +0.000330f}, + {+0.002284f, +0.015859f, -0.086945f, -0.006492f, +0.002254f, +0.002859f, -0.000141f} + }, + { + {+0.000326f, -0.185379f, -0.113130f, -0.018251f, -0.002891f, -0.000347f, -0.000024f}, + {+0.003253f, +0.209744f, +0.182927f, +0.020751f, -0.000290f, +0.000620f, +0.000129f}, + {-0.003028f, +0.047265f, -0.166312f, -0.004033f, +0.004095f, -0.000001f, -0.000176f}, + {+0.000316f, -0.113969f, +0.180249f, -0.010833f, -0.002558f, -0.003462f, +0.000061f}, + {-0.003377f, +0.011235f, -0.182709f, -0.007053f, +0.006109f, -0.001285f, -0.000192f}, + {+0.003931f, +0.005368f, +0.113545f, +0.005959f, +0.008563f, -0.003356f, +0.000270f}, + {+0.007132f, +0.113339f, -0.085151f, +0.027048f, +0.006394f, +0.004682f, +0.000174f}, + {+0.000751f, +0.118643f, -0.011839f, -0.007823f, +0.008316f, -0.008033f, -0.000242f}, + {+0.002459f, -0.036301f, +0.193951f, -0.011739f, +0.006099f, -0.008613f, -0.000199f}, + {-0.000406f, -0.016288f, -0.132011f, -0.014654f, +0.002234f, +0.013512f, -0.000336f}, + {-0.004431f, -0.059630f, +0.069866f, +0.034584f, -0.004013f, +0.006714f, +0.000599f}, + {-0.005956f, -0.026912f, -0.080301f, +0.013592f, -0.011263f, +0.002117f, -0.000173f}, + {-0.008209f, -0.004505f, +0.119613f, -0.041351f, -0.013433f, -0.006274f, -0.000170f}, + {+0.005701f, +0.024166f, -0.118285f, +0.031263f, -0.000827f, +0.014446f, +0.000265f}, + {+0.009742f, +0.118573f, -0.137465f, +0.018797f, +0.026066f, +0.001847f, +0.000233f}, + {+0.002341f, -0.050370f, -0.015346f, +0.010898f, +0.021006f, -0.007241f, -0.000088f} + }, + { + {+0.000319f, +0.126694f, +0.366724f, +0.020424f, -0.001419f, +0.002643f, +0.000070f}, + {+0.002315f, -0.189978f, -0.424487f, -0.028121f, -0.003399f, -0.001047f, -0.000054f}, + {+0.000002f, +0.059855f, -0.154980f, +0.000999f, -0.005118f, -0.004107f, +0.000191f}, + {+0.003430f, -0.035271f, +0.310904f, +0.009731f, +0.001220f, +0.005190f, +0.000006f}, + {-0.000597f, +0.036067f, -0.156487f, -0.000121f, +0.001763f, -0.002466f, -0.000103f}, + {-0.002799f, -0.082995f, +0.033871f, +0.002711f, +0.002209f, -0.005746f, -0.000158f}, + {+0.000838f, -0.029571f, -0.293367f, -0.014081f, -0.006415f, +0.002421f, -0.000016f}, + {-0.003985f, -0.053282f, -0.235190f, +0.002717f, +0.007419f, -0.003670f, +0.000132f}, + {+0.003050f, -0.115037f, +0.111070f, +0.001088f, -0.002341f, -0.002756f, +0.000444f}, + {+0.002839f, +0.039655f, -0.056727f, -0.015997f, +0.000834f, +0.008040f, -0.000489f}, + {-0.000660f, +0.016986f, +0.163358f, +0.021748f, -0.011162f, -0.003668f, -0.000413f}, + {-0.004639f, +0.044241f, +0.031884f, +0.021035f, -0.012216f, -0.004499f, -0.000415f}, + {+0.010322f, -0.027147f, +0.049841f, -0.030293f, +0.012802f, +0.010388f, +0.000831f}, + {-0.000435f, -0.007837f, -0.132385f, +0.021562f, -0.024000f, -0.010766f, -0.000329f}, + {-0.013019f, -0.039175f, -0.263229f, +0.021453f, -0.007560f, -0.017185f, -0.000554f}, + {-0.004755f, -0.013959f, +0.075438f, +0.020661f, +0.007559f, -0.002287f, +0.000024f} + }, + { + {-0.000366f, +0.124913f, +0.371948f, +0.012777f, -0.000932f, +0.002982f, -0.000011f}, + {-0.003472f, -0.140915f, -0.467037f, -0.023556f, -0.002486f, -0.001401f, -0.000134f}, + {+0.002379f, -0.064440f, +0.016932f, -0.014417f, -0.008974f, +0.000096f, +0.000033f}, + {-0.003091f, +0.132798f, +0.091856f, +0.016839f, -0.001343f, +0.008140f, -0.000081f}, + {+0.003585f, -0.084471f, +0.026953f, -0.002730f, -0.014878f, -0.007539f, +0.000263f}, + {-0.003779f, -0.001969f, -0.063847f, +0.006087f, -0.005822f, -0.005396f, -0.000227f}, + {-0.004511f, -0.122929f, -0.117186f, -0.033714f, -0.013590f, +0.002377f, -0.000100f}, + {+0.000980f, -0.075927f, -0.209412f, -0.000716f, -0.010339f, -0.005890f, +0.000204f}, + {-0.003810f, +0.057065f, -0.098800f, +0.006671f, -0.016309f, +0.008162f, +0.000049f}, + {-0.003493f, -0.065520f, +0.083489f, -0.006585f, +0.004680f, -0.003998f, +0.000533f}, + {+0.003710f, +0.067626f, +0.100484f, +0.001614f, +0.003921f, -0.004818f, -0.000362f}, + {+0.009313f, +0.006684f, +0.041093f, +0.019272f, +0.001375f, -0.012838f, +0.000308f}, + {-0.005002f, +0.026330f, -0.021257f, -0.018461f, +0.004718f, +0.021321f, -0.000281f}, + {-0.001875f, -0.027307f, -0.031082f, -0.009783f, -0.018159f, -0.018171f, +0.000040f}, + {-0.000166f, -0.115217f, -0.152392f, -0.002694f, -0.019043f, -0.016076f, -0.000053f}, + {+0.000874f, +0.000110f, +0.050226f, +0.023317f, -0.014557f, +0.001480f, +0.000044f} + }, + { + {-0.000264f, -0.194793f, -0.107821f, -0.023201f, -0.001199f, +0.000928f, -0.000060f}, + {-0.000832f, +0.240876f, +0.099242f, +0.022166f, +0.003699f, +0.002772f, +0.000150f}, + {-0.001244f, -0.043315f, +0.069455f, -0.009254f, -0.000121f, +0.002278f, -0.000050f}, + {+0.000506f, -0.065069f, -0.220826f, -0.007722f, -0.000261f, +0.008268f, -0.000002f}, + {-0.000158f, -0.024522f, +0.139604f, +0.008624f, -0.007485f, -0.001513f, -0.000052f}, + {+0.004662f, +0.057647f, -0.024501f, +0.007536f, +0.000268f, +0.003627f, +0.000193f}, + {-0.001281f, +0.103406f, +0.216683f, +0.001410f, -0.010455f, -0.001406f, +0.000159f}, + {+0.003974f, +0.035826f, -0.038344f, +0.009124f, -0.007513f, +0.004170f, -0.000115f}, + {+0.001177f, +0.014518f, -0.176436f, +0.013776f, -0.011126f, +0.004369f, -0.000360f}, + {+0.000200f, -0.028344f, +0.131828f, +0.000160f, +0.010621f, -0.002766f, +0.000196f}, + {-0.000761f, -0.050071f, -0.080542f, -0.016049f, +0.013715f, -0.000842f, +0.000304f}, + {-0.000174f, -0.037897f, -0.027758f, +0.000913f, +0.012246f, -0.000027f, +0.000247f}, + {-0.002523f, +0.017257f, -0.029696f, -0.007251f, -0.004825f, +0.006036f, -0.000646f}, + {-0.002385f, +0.084478f, +0.128806f, +0.008133f, -0.002169f, -0.006954f, +0.000201f}, + {+0.008715f, +0.075360f, +0.074445f, +0.006029f, +0.000811f, +0.006272f, +0.000696f}, + {+0.004537f, -0.062959f, -0.053134f, +0.012141f, -0.007590f, +0.010200f, +0.000089f} + }, + { + {+0.000276f, +0.007743f, -0.416264f, -0.001108f, +0.002588f, -0.002874f, +0.000036f}, + {+0.002808f, -0.022075f, +0.484229f, -0.001735f, +0.003481f, +0.002668f, +0.000022f}, + {-0.001043f, +0.025703f, -0.026181f, +0.003209f, +0.003368f, +0.000139f, -0.000060f}, + {+0.000521f, -0.056071f, -0.241883f, -0.008469f, +0.009541f, -0.000806f, +0.000153f}, + {-0.002825f, +0.022621f, +0.075727f, +0.011466f, -0.000225f, +0.001401f, -0.000211f}, + {+0.001889f, +0.007945f, +0.059481f, -0.000805f, +0.002148f, +0.004609f, +0.000188f}, + {+0.004476f, +0.059212f, +0.261153f, -0.001867f, -0.001737f, -0.006657f, -0.000119f}, + {-0.002093f, -0.007870f, +0.069319f, -0.003999f, +0.002298f, +0.004349f, -0.000164f}, + {-0.001038f, -0.064160f, -0.043605f, -0.010516f, +0.006900f, -0.004421f, -0.000000f}, + {+0.001450f, +0.032984f, +0.037734f, +0.017216f, +0.000676f, +0.001134f, -0.000457f}, + {-0.001626f, -0.021124f, -0.148362f, -0.002128f, +0.002287f, +0.004634f, +0.000290f}, + {-0.007506f, -0.018304f, -0.027687f, +0.007765f, +0.004034f, +0.009905f, -0.000275f}, + {+0.004447f, +0.019127f, -0.031778f, -0.006006f, +0.011798f, -0.014550f, +0.000549f}, + {+0.004784f, +0.020712f, +0.158803f, +0.001960f, -0.000959f, +0.001140f, -0.000291f}, + {-0.001723f, +0.027442f, +0.179042f, +0.004096f, -0.000119f, +0.015809f, -0.000273f}, + {-0.004248f, -0.027902f, -0.065637f, +0.005103f, +0.010905f, +0.003977f, -0.000099f} + }, + { + {-0.000121f, +0.168818f, -0.170063f, +0.020644f, +0.002958f, -0.003463f, +0.000046f}, + {+0.000011f, -0.194924f, +0.223064f, -0.022796f, -0.001087f, -0.000493f, -0.000117f}, + {+0.000547f, +0.029503f, -0.053171f, -0.000739f, -0.000657f, -0.002145f, +0.000015f}, + {-0.000242f, +0.117372f, +0.034986f, +0.015156f, +0.005707f, -0.008083f, -0.000136f}, + {-0.000080f, -0.024155f, -0.034423f, -0.005036f, +0.006191f, +0.007152f, +0.000179f}, + {-0.005094f, -0.032260f, +0.054141f, +0.008306f, +0.004720f, +0.002533f, -0.000274f}, + {+0.001279f, -0.165394f, -0.065559f, -0.023240f, +0.007945f, -0.001409f, -0.000067f}, + {-0.002856f, +0.009409f, +0.091949f, -0.005615f, +0.001544f, +0.004433f, +0.000065f}, + {+0.002405f, +0.052072f, +0.137955f, +0.003382f, +0.011200f, +0.000365f, +0.000319f}, + {+0.002077f, -0.047717f, -0.093664f, +0.010132f, -0.009074f, -0.004134f, -0.000010f}, + {-0.000926f, +0.043776f, -0.057405f, -0.004440f, +0.000684f, +0.002365f, -0.000282f}, + {+0.002540f, +0.085351f, +0.109742f, +0.018492f, -0.001709f, +0.008584f, -0.000206f}, + {-0.001618f, -0.009925f, -0.064822f, -0.004580f, +0.010301f, -0.020636f, +0.000410f}, + {-0.000126f, -0.171921f, -0.079783f, -0.018973f, +0.006091f, +0.015039f, +0.000181f}, + {-0.005881f, -0.031229f, +0.141619f, +0.011585f, -0.000326f, +0.012033f, -0.000629f}, + {-0.001344f, +0.104987f, +0.102295f, +0.010501f, +0.005542f, -0.003423f, -0.000124f} + }, + { + {+0.000665f, -0.123778f, +0.280425f, -0.018756f, -0.000671f, -0.000509f, -0.000067f}, + {-0.001583f, +0.162600f, -0.316923f, +0.023267f, +0.000975f, -0.003785f, +0.000038f}, + {+0.001379f, -0.026831f, +0.023970f, -0.006255f, -0.004902f, +0.000112f, +0.000081f}, + {+0.000562f, -0.030460f, +0.260600f, +0.000624f, -0.000602f, -0.007719f, -0.000080f}, + {+0.002993f, +0.002642f, -0.081219f, -0.000884f, +0.006660f, +0.009580f, +0.000060f}, + {+0.000597f, +0.004283f, -0.008621f, +0.007685f, +0.005971f, -0.001193f, -0.000047f}, + {-0.005508f, +0.031003f, -0.344879f, +0.005634f, +0.007605f, -0.002853f, +0.000190f}, + {+0.001858f, +0.007685f, +0.058337f, +0.000024f, -0.000621f, +0.003685f, +0.000209f}, + {-0.000813f, +0.038640f, +0.157464f, +0.006533f, +0.001576f, +0.003906f, -0.000022f}, + {-0.004224f, +0.021225f, -0.166071f, +0.006069f, -0.003399f, -0.001042f, +0.000214f}, + {+0.002033f, -0.060718f, +0.091992f, -0.004611f, +0.002942f, -0.001595f, -0.000196f}, + {+0.004127f, +0.004531f, +0.205174f, +0.009365f, -0.001070f, +0.003179f, +0.000289f}, + {+0.000150f, -0.029538f, -0.068904f, -0.000402f, -0.005147f, -0.003972f, -0.000769f}, + {-0.004079f, -0.017972f, -0.257424f, -0.008455f, +0.006187f, +0.013312f, +0.000198f}, + {+0.002517f, +0.012776f, +0.062784f, +0.003145f, +0.009655f, -0.004343f, +0.000614f}, + {+0.005049f, +0.022035f, +0.199714f, +0.007109f, +0.003089f, -0.003875f, +0.000168f} + }, + { + {-0.000838f, -0.093482f, +0.340134f, -0.010503f, +0.000289f, +0.001191f, +0.000003f}, + {-0.000716f, +0.099685f, -0.420241f, +0.008436f, -0.000064f, -0.003115f, +0.000044f}, + {-0.000556f, -0.021255f, +0.062613f, -0.000941f, -0.000204f, +0.000715f, -0.000034f}, + {-0.001430f, -0.100524f, +0.149323f, -0.011872f, -0.001590f, -0.004527f, +0.000235f}, + {+0.000230f, +0.032021f, -0.018295f, +0.004614f, -0.002734f, +0.001951f, -0.000193f}, + {+0.002656f, +0.009804f, -0.038729f, +0.000163f, +0.001790f, -0.000822f, +0.000256f}, + {+0.000612f, +0.140653f, -0.197385f, +0.019089f, +0.002585f, -0.003213f, -0.000031f}, + {+0.002670f, -0.040336f, -0.020386f, -0.004271f, -0.002055f, -0.001343f, -0.000109f}, + {-0.001845f, -0.078760f, -0.020200f, -0.013056f, -0.006124f, -0.004360f, -0.000331f}, + {-0.000970f, +0.117325f, -0.055613f, +0.005023f, +0.004912f, +0.004803f, +0.000116f}, + {+0.002683f, -0.035606f, +0.126398f, -0.002472f, -0.000580f, -0.000376f, +0.000241f}, + {-0.000497f, -0.114405f, +0.055418f, -0.003763f, -0.003364f, -0.001371f, +0.000155f}, + {-0.000345f, +0.007312f, +0.001802f, -0.002287f, +0.000791f, +0.008770f, +0.000007f}, + {+0.000789f, +0.144128f, -0.097885f, +0.006241f, +0.005947f, +0.001436f, -0.000489f}, + {+0.001963f, -0.040204f, -0.034424f, +0.000413f, +0.000091f, -0.010270f, +0.000273f}, + {-0.002689f, -0.084084f, +0.069751f, -0.006898f, -0.004644f, -0.006109f, +0.000091f} + }, + { + {-0.000062f, +0.159834f, -0.044876f, +0.021415f, +0.000841f, +0.001074f, +0.000061f}, + {+0.001939f, -0.203019f, +0.024500f, -0.028206f, -0.000129f, -0.000129f, -0.000014f}, + {-0.002057f, +0.017619f, +0.007554f, +0.001544f, +0.005642f, -0.000830f, -0.000029f}, + {+0.001889f, +0.080220f, -0.136610f, +0.012668f, -0.006511f, +0.005422f, -0.000119f}, + {-0.004765f, -0.006329f, +0.052477f, -0.003995f, +0.004263f, -0.009557f, +0.000103f}, + {+0.001047f, +0.021879f, -0.034445f, -0.001105f, -0.002961f, +0.002057f, -0.000104f}, + {+0.004934f, -0.125025f, +0.182894f, -0.007200f, -0.003809f, +0.003213f, -0.000175f}, + {-0.002421f, +0.038737f, -0.100988f, -0.002296f, +0.002905f, -0.006173f, -0.000222f}, + {+0.000637f, -0.009843f, -0.137662f, -0.007085f, -0.001227f, -0.007524f, +0.000084f}, + {+0.007111f, +0.006449f, +0.088114f, -0.008144f, +0.012101f, +0.002453f, -0.000119f}, + {-0.005822f, +0.035186f, +0.014091f, +0.019245f, -0.005040f, +0.002938f, +0.000098f}, + {-0.006158f, +0.034676f, -0.151427f, +0.007632f, +0.002292f, -0.003956f, -0.000311f}, + {-0.001390f, -0.073913f, +0.146335f, -0.009450f, +0.000888f, +0.008018f, +0.000743f}, + {+0.004580f, +0.035022f, +0.074565f, -0.008788f, +0.011150f, -0.012728f, +0.000186f}, + {+0.001196f, +0.053254f, -0.158975f, +0.007007f, +0.001158f, -0.005679f, -0.000680f}, + {-0.002227f, +0.044207f, -0.133488f, +0.008158f, -0.004916f, -0.004020f, -0.000190f} + }, + { + {+0.000424f, -0.032674f, -0.356108f, -0.006297f, +0.001097f, +0.001061f, -0.000058f}, + {+0.000331f, +0.053597f, +0.429631f, +0.007025f, -0.000454f, +0.001923f, -0.000032f}, + {+0.001733f, +0.005170f, -0.045501f, -0.004142f, +0.003057f, -0.000513f, -0.000016f}, + {-0.001720f, +0.029775f, -0.211691f, +0.005967f, -0.004600f, +0.009540f, -0.000129f}, + {+0.003261f, -0.003682f, +0.039174f, -0.006311f, +0.004814f, -0.010936f, +0.000074f}, + {-0.004648f, +0.024711f, +0.003591f, +0.006146f, -0.002500f, -0.000881f, -0.000107f}, + {-0.002617f, -0.049330f, +0.327007f, -0.003104f, +0.001710f, +0.009526f, +0.000033f}, + {-0.001001f, +0.058705f, -0.071001f, -0.004213f, +0.002311f, -0.003340f, +0.000235f}, + {+0.002783f, +0.023155f, -0.088891f, -0.001723f, +0.002778f, +0.002314f, +0.000343f}, + {-0.004839f, -0.023086f, +0.116501f, +0.000949f, -0.001446f, -0.005599f, -0.000354f}, + {+0.001118f, +0.002046f, -0.076766f, +0.001535f, -0.005295f, -0.001162f, -0.000125f}, + {+0.004117f, +0.023659f, -0.189693f, +0.013335f, -0.005698f, -0.006219f, -0.000048f}, + {+0.003062f, -0.013670f, +0.192441f, -0.001116f, +0.004652f, +0.002330f, -0.000476f}, + {-0.004154f, -0.034087f, +0.046539f, -0.008864f, -0.000241f, -0.015872f, +0.000426f}, + {-0.003487f, +0.020767f, -0.154091f, +0.014880f, +0.001191f, +0.001914f, +0.000136f}, + {+0.003932f, -0.000386f, -0.191705f, +0.012921f, -0.005465f, +0.004477f, -0.000047f} + }, + { + {+0.000471f, -0.125486f, -0.221411f, -0.014986f, -0.000180f, +0.001120f, +0.000009f}, + {-0.001600f, +0.154646f, +0.294774f, +0.015891f, +0.000266f, +0.001489f, +0.000008f}, + {+0.001375f, -0.000822f, -0.034636f, -0.001147f, -0.000669f, +0.000303f, +0.000008f}, + {+0.000977f, -0.092422f, -0.024070f, -0.009222f, -0.001056f, +0.003997f, +0.000206f}, + {+0.001682f, +0.020814f, -0.011430f, +0.004002f, -0.001343f, -0.002884f, -0.000166f}, + {+0.001610f, -0.020045f, +0.049480f, -0.001742f, -0.001532f, -0.002781f, +0.000115f}, + {-0.002135f, +0.091172f, +0.125333f, +0.008360f, +0.009208f, +0.002398f, +0.000271f}, + {+0.000371f, -0.059373f, +0.078618f, -0.014453f, -0.004219f, +0.001057f, +0.000062f}, + {-0.002725f, -0.015489f, -0.009239f, -0.003738f, +0.000560f, +0.006181f, -0.000199f}, + {-0.002826f, -0.007173f, +0.085964f, -0.001891f, -0.012728f, -0.005161f, +0.000323f}, + {+0.004495f, -0.013763f, -0.058388f, +0.007410f, -0.005720f, -0.002360f, -0.000110f}, + {+0.002552f, -0.045600f, -0.070285f, -0.007922f, -0.003344f, -0.005570f, +0.000207f}, + {-0.000488f, +0.136917f, -0.026687f, +0.005457f, +0.012392f, -0.001210f, -0.000307f}, + {+0.000451f, +0.008875f, -0.051701f, +0.006069f, -0.021340f, +0.001926f, -0.000475f}, + {-0.001377f, -0.105876f, +0.039317f, -0.008020f, -0.005229f, +0.004339f, +0.000386f}, + {-0.001213f, -0.076122f, -0.061268f, -0.003217f, -0.002369f, +0.004826f, +0.000159f} + }, + { + {-0.000524f, +0.118676f, +0.170583f, +0.019688f, -0.001664f, -0.000923f, +0.000041f}, + {-0.000654f, -0.156016f, -0.194337f, -0.028557f, +0.002840f, +0.004101f, +0.000028f}, + {-0.002302f, +0.008782f, +0.011429f, +0.001323f, +0.000895f, +0.003407f, +0.000105f}, + {+0.000032f, +0.046067f, +0.185629f, +0.008390f, -0.003160f, -0.003746f, -0.000055f}, + {-0.002663f, -0.026672f, -0.064125f, +0.000262f, +0.001472f, +0.005261f, +0.000110f}, + {+0.003119f, -0.016242f, +0.044580f, -0.000850f, -0.000791f, -0.003258f, -0.000018f}, + {+0.002001f, -0.070898f, -0.146048f, -0.006424f, +0.007312f, -0.003256f, -0.000170f}, + {+0.002429f, -0.028724f, +0.132991f, -0.002905f, -0.000259f, +0.001749f, -0.000211f}, + {-0.000713f, +0.004019f, +0.012770f, -0.001359f, -0.002043f, +0.004710f, -0.000292f}, + {+0.005685f, -0.050322f, -0.008163f, -0.004254f, -0.000823f, +0.001200f, +0.000403f}, + {-0.002632f, +0.030192f, +0.022068f, +0.012383f, -0.005270f, -0.001676f, +0.000059f}, + {-0.003305f, +0.018641f, +0.063460f, +0.003826f, -0.000188f, -0.000343f, +0.000082f}, + {-0.002515f, -0.058603f, -0.271848f, -0.008489f, +0.005764f, -0.000219f, +0.000545f}, + {+0.000161f, +0.016378f, -0.070205f, -0.000824f, -0.012915f, +0.010864f, -0.000122f}, + {+0.003698f, +0.037366f, +0.216969f, +0.003644f, -0.004534f, +0.002030f, -0.000224f}, + {-0.002468f, +0.016801f, +0.081543f, +0.007748f, +0.001230f, +0.004507f, +0.000051f} + }, + { + {-0.001145f, +0.003284f, +0.355844f, +0.004455f, -0.002189f, -0.000719f, -0.000061f}, + {+0.002423f, -0.000161f, -0.457860f, -0.005943f, +0.007595f, +0.001864f, -0.000021f}, + {-0.000051f, -0.012564f, +0.029260f, -0.001225f, +0.006975f, +0.002016f, -0.000066f}, + {-0.000428f, +0.050774f, +0.180925f, +0.010634f, -0.004654f, -0.005688f, -0.000097f}, + {+0.000090f, -0.027979f, -0.070853f, -0.000692f, +0.004995f, +0.008846f, +0.000049f}, + {-0.002760f, +0.025210f, +0.010985f, -0.001189f, -0.005880f, -0.001877f, -0.000037f}, + {-0.000244f, -0.010407f, -0.222937f, -0.003909f, +0.000862f, -0.004776f, -0.000303f}, + {-0.000425f, +0.069076f, +0.010384f, +0.006056f, +0.004388f, -0.000601f, +0.000104f}, + {+0.002311f, +0.019613f, -0.027315f, +0.005251f, +0.003443f, -0.001807f, +0.000316f}, + {-0.002211f, +0.010183f, -0.073548f, +0.000883f, -0.001915f, +0.009035f, -0.000618f}, + {-0.002248f, -0.008483f, +0.068380f, +0.004591f, -0.002268f, -0.001620f, +0.000165f}, + {-0.000648f, -0.009242f, +0.099359f, -0.000641f, +0.000197f, +0.006109f, -0.000157f}, + {-0.000774f, -0.111787f, -0.198070f, -0.017791f, -0.003222f, +0.006877f, -0.000137f}, + {+0.001138f, -0.044856f, +0.026044f, -0.009715f, -0.000846f, +0.004152f, +0.000446f}, + {+0.002544f, +0.087438f, +0.155678f, +0.005423f, +0.002722f, -0.003124f, -0.000080f}, + {+0.003560f, +0.014887f, +0.074843f, +0.008219f, +0.006652f, +0.002902f, -0.000131f} + }, + { + {+0.001890f, -0.134764f, +0.131961f, -0.012234f, -0.002738f, +0.000823f, +0.000033f}, + {-0.001070f, +0.173165f, -0.189994f, +0.013988f, +0.004534f, -0.003798f, +0.000004f}, + {+0.001640f, -0.008324f, +0.014514f, -0.002435f, +0.003083f, -0.002251f, -0.000150f}, + {+0.000264f, -0.073721f, -0.011380f, -0.005780f, -0.000967f, -0.002807f, +0.000095f}, + {-0.000194f, +0.034600f, +0.001603f, -0.002002f, +0.001582f, +0.004833f, -0.000182f}, + {-0.000248f, -0.009914f, -0.030975f, -0.000054f, -0.001998f, +0.003302f, +0.000047f}, + {+0.001104f, +0.068456f, -0.089528f, +0.005666f, +0.000783f, -0.000511f, +0.000430f}, + {-0.003829f, -0.022153f, -0.133797f, -0.009639f, +0.004395f, -0.000747f, +0.000011f}, + {-0.000699f, +0.010044f, -0.035723f, +0.000046f, -0.000099f, -0.006045f, +0.000154f}, + {-0.000909f, +0.038046f, -0.036614f, +0.002380f, -0.002487f, +0.007961f, -0.000174f}, + {+0.001908f, -0.026952f, +0.036236f, +0.000119f, +0.002271f, -0.000602f, -0.000080f}, + {+0.001603f, -0.029285f, +0.049821f, -0.000247f, +0.000217f, +0.005046f, -0.000216f}, + {+0.006472f, +0.116293f, +0.099963f, -0.000867f, -0.010550f, +0.001434f, -0.000225f}, + {-0.000453f, -0.006679f, +0.094671f, -0.004526f, -0.002369f, -0.000013f, -0.000073f}, + {-0.005967f, -0.109642f, -0.072567f, +0.006836f, +0.010874f, -0.002506f, +0.000008f}, + {-0.001623f, -0.037979f, -0.009548f, -0.002077f, +0.000249f, -0.003764f, -0.000113f} + }, + { + {-0.000170f, +0.121984f, -0.255345f, +0.010962f, +0.000155f, -0.000211f, +0.000029f}, + {-0.000042f, -0.155814f, +0.316189f, -0.015901f, -0.001529f, -0.002239f, -0.000003f}, + {-0.000912f, +0.011590f, +0.001094f, -0.000549f, +0.000258f, -0.004276f, +0.000153f}, + {-0.001078f, +0.027059f, -0.170587f, +0.004222f, +0.000643f, -0.000450f, -0.000026f}, + {+0.003305f, -0.001532f, +0.066652f, -0.008505f, +0.003277f, -0.000811f, +0.000150f}, + {+0.000389f, -0.020611f, -0.035423f, +0.007402f, -0.004051f, +0.005415f, -0.000014f}, + {-0.000366f, -0.068284f, +0.107122f, +0.001280f, -0.004037f, +0.003881f, +0.000063f}, + {+0.002188f, -0.047371f, -0.125091f, -0.009984f, -0.000445f, +0.000567f, -0.000063f}, + {-0.000440f, -0.020603f, +0.011508f, -0.007936f, -0.000995f, -0.001820f, -0.000353f}, + {+0.001083f, -0.027481f, +0.055464f, -0.007462f, +0.003849f, -0.002769f, +0.000734f}, + {+0.000833f, +0.000243f, +0.003680f, +0.002365f, -0.003551f, +0.005372f, -0.000154f}, + {-0.000131f, +0.044971f, -0.042558f, +0.000985f, +0.001169f, +0.001543f, +0.000319f}, + {-0.004626f, +0.038285f, +0.245476f, +0.003432f, -0.002348f, -0.009039f, +0.000192f}, + {+0.000118f, +0.032215f, +0.016390f, +0.016314f, -0.000536f, +0.000779f, -0.000274f}, + {-0.001673f, -0.067100f, -0.155922f, +0.006074f, +0.005539f, +0.002669f, +0.000075f}, + {-0.001163f, +0.016021f, -0.074264f, -0.004922f, -0.001151f, -0.006794f, +0.000180f} + }, + { + {-0.001297f, +0.019051f, -0.402417f, +0.000141f, +0.000604f, -0.001174f, -0.000063f}, + {-0.001300f, -0.028611f, +0.522073f, +0.003618f, -0.001002f, -0.001630f, -0.000006f}, + {+0.000497f, +0.002152f, +0.001349f, +0.003743f, -0.001574f, -0.003439f, +0.000141f}, + {+0.002920f, +0.034877f, -0.171496f, -0.000170f, -0.001439f, +0.001183f, +0.000002f}, + {-0.003419f, -0.015347f, +0.076929f, +0.000130f, -0.000288f, -0.004503f, +0.000040f}, + {+0.001320f, +0.012141f, -0.002094f, +0.004277f, -0.004118f, +0.002479f, -0.000060f}, + {-0.004180f, -0.013179f, +0.192192f, +0.004645f, -0.001451f, +0.001106f, -0.000485f}, + {+0.003209f, +0.039833f, +0.008962f, -0.002291f, -0.002391f, +0.004465f, +0.000122f}, + {-0.000607f, -0.005611f, +0.042134f, +0.000975f, +0.004638f, +0.004045f, +0.000008f}, + {-0.000627f, -0.026309f, +0.067454f, -0.006167f, +0.000843f, -0.011514f, -0.000137f}, + {+0.001193f, -0.006474f, -0.018477f, +0.002724f, -0.008795f, +0.001731f, +0.000074f}, + {+0.001257f, +0.008752f, -0.087176f, +0.004699f, -0.002039f, -0.003933f, +0.000164f}, + {-0.003124f, -0.033471f, +0.148053f, -0.005001f, +0.001533f, -0.010338f, -0.000015f}, + {-0.002890f, +0.001944f, -0.047134f, +0.004337f, -0.002030f, -0.001172f, +0.000046f}, + {+0.008908f, +0.054837f, -0.040335f, +0.007026f, -0.006365f, -0.001572f, +0.000146f}, + {+0.002478f, +0.029038f, -0.064961f, -0.006465f, -0.005250f, -0.005303f, +0.000152f} + }, + { + {+0.000160f, -0.150600f, -0.167483f, -0.002920f, +0.001475f, -0.001963f, +0.000024f}, + {+0.001668f, +0.172130f, +0.218810f, +0.011191f, +0.002834f, -0.003154f, +0.000022f}, + {-0.000950f, +0.022722f, -0.027772f, +0.005005f, -0.008512f, +0.003955f, -0.000238f}, + {-0.003019f, -0.054068f, -0.033941f, +0.003539f, -0.011136f, +0.005659f, +0.000016f}, + {-0.001078f, +0.021690f, -0.006189f, +0.016829f, -0.000777f, -0.009514f, -0.000199f}, + {-0.001056f, -0.014729f, +0.053067f, -0.011823f, +0.007368f, -0.001542f, +0.000064f}, + {+0.004918f, +0.007213f, +0.138765f, -0.001533f, +0.020500f, -0.011761f, +0.000227f}, + {-0.002554f, +0.001966f, +0.107627f, -0.006775f, -0.003533f, +0.005048f, -0.000080f}, + {+0.001525f, +0.005137f, +0.030090f, +0.004553f, +0.004049f, +0.000454f, +0.000282f}, + {-0.001023f, +0.024143f, -0.037424f, +0.014519f, +0.001289f, -0.011651f, -0.000625f}, + {-0.005161f, +0.022730f, -0.068907f, +0.020272f, -0.012850f, -0.000495f, +0.000137f}, + {-0.002866f, -0.007080f, -0.063234f, +0.003391f, -0.009373f, +0.003426f, -0.000457f}, + {+0.004560f, +0.037001f, -0.014139f, +0.007335f, +0.000343f, -0.005090f, -0.000062f}, + {+0.004001f, -0.046592f, +0.005932f, -0.011122f, +0.012141f, -0.007595f, +0.000216f}, + {-0.003776f, +0.041534f, +0.044983f, +0.002268f, -0.019627f, +0.007804f, -0.000235f}, + {-0.001820f, +0.010184f, -0.049175f, +0.013588f, -0.018697f, +0.002250f, -0.000303f} + }, + { + {+0.001483f, +0.113867f, +0.209976f, +0.008819f, +0.000797f, +0.000400f, +0.000036f}, + {+0.001045f, -0.192142f, -0.298750f, -0.001463f, +0.003654f, +0.001788f, -0.000013f}, + {-0.000040f, +0.023922f, -0.061440f, -0.008880f, -0.004791f, +0.003847f, -0.000085f}, + {+0.000147f, +0.077957f, +0.126838f, -0.004370f, -0.007202f, +0.002392f, -0.000067f}, + {+0.004543f, -0.091348f, -0.161744f, +0.013831f, +0.000476f, +0.002348f, +0.000151f}, + {-0.000341f, -0.019385f, +0.074320f, +0.002090f, +0.004165f, -0.003633f, +0.000059f}, + {+0.002008f, -0.125477f, -0.001322f, +0.010977f, +0.014241f, -0.001824f, +0.000290f}, + {-0.004051f, +0.054488f, +0.153092f, -0.011645f, -0.001154f, -0.003507f, -0.000105f}, + {-0.000902f, +0.009313f, +0.026711f, -0.001561f, +0.002462f, -0.001947f, -0.000100f}, + {+0.005033f, -0.126661f, -0.230194f, +0.017832f, +0.001367f, +0.007110f, +0.000344f}, + {+0.003668f, -0.007071f, -0.130982f, +0.007450f, -0.007821f, +0.001798f, -0.000031f}, + {+0.000349f, +0.045688f, -0.017878f, -0.008768f, -0.007271f, +0.001089f, +0.000044f}, + {+0.002677f, -0.079470f, -0.153864f, +0.014296f, +0.003485f, +0.006916f, +0.000050f}, + {+0.000709f, -0.042448f, +0.071138f, +0.007687f, +0.009513f, -0.002541f, +0.000023f}, + {-0.005626f, +0.054309f, +0.055654f, -0.010333f, -0.012042f, +0.002191f, -0.000096f}, + {+0.000446f, +0.021484f, -0.057903f, -0.001636f, -0.008439f, +0.007563f, -0.000076f} + }, + { + {-0.000930f, -0.020638f, +0.420161f, -0.006289f, +0.001114f, +0.002023f, -0.000034f}, + {-0.002837f, +0.034360f, -0.606921f, +0.008940f, -0.000248f, +0.004013f, -0.000004f}, + {+0.001816f, -0.018994f, -0.028978f, +0.005755f, -0.001492f, +0.000000f, +0.000298f}, + {+0.002308f, -0.019936f, +0.239454f, +0.000948f, +0.000097f, -0.002454f, +0.000065f}, + {-0.003108f, +0.010786f, -0.269338f, +0.002735f, +0.001820f, +0.004439f, +0.000049f}, + {+0.000084f, +0.020355f, +0.030329f, -0.004050f, +0.000527f, -0.001894f, -0.000134f}, + {-0.006890f, +0.046136f, -0.183299f, -0.002301f, +0.001456f, +0.008977f, -0.000300f}, + {+0.005979f, +0.011056f, +0.166257f, -0.005656f, -0.000834f, -0.005892f, +0.000154f}, + {+0.000154f, -0.000560f, +0.037346f, -0.001460f, -0.000032f, +0.000167f, -0.000173f}, + {-0.006662f, -0.002010f, -0.363378f, +0.010169f, +0.000884f, +0.009588f, +0.000407f}, + {+0.001078f, -0.029016f, -0.107209f, +0.006938f, +0.002205f, -0.002827f, -0.000183f}, + {+0.002893f, -0.028022f, +0.051556f, +0.008217f, -0.001222f, -0.004671f, +0.000375f}, + {-0.006494f, +0.014380f, -0.224961f, -0.002217f, +0.001654f, +0.010259f, +0.000017f}, + {-0.005137f, +0.012085f, +0.032649f, +0.001820f, +0.001318f, +0.004157f, -0.000284f}, + {+0.005483f, -0.014476f, +0.074456f, +0.002422f, -0.001376f, -0.006421f, +0.000309f}, + {+0.000296f, -0.028549f, -0.015223f, +0.007439f, +0.000560f, +0.001646f, +0.000380f} + }, + { + {-0.000574f, -0.054293f, +0.393027f, +0.004619f, +0.000499f, +0.001616f, -0.000019f}, + {+0.000630f, +0.085858f, -0.559718f, -0.004183f, -0.003387f, +0.002961f, -0.000006f}, + {-0.001166f, +0.017046f, +0.023078f, -0.007491f, +0.000205f, -0.001361f, -0.000017f}, + {-0.001175f, -0.022635f, +0.244404f, -0.001647f, +0.001066f, -0.003008f, +0.000032f}, + {-0.000156f, +0.031998f, -0.255427f, -0.002202f, -0.001796f, +0.001974f, -0.000172f}, + {+0.000878f, -0.017961f, -0.022887f, +0.005377f, -0.000188f, -0.000893f, +0.000012f}, + {+0.001948f, +0.014963f, -0.247765f, +0.005780f, -0.004433f, +0.007643f, -0.000121f}, + {-0.000159f, -0.041909f, +0.136394f, +0.007153f, +0.001725f, -0.004022f, +0.000071f}, + {-0.000219f, +0.000958f, +0.044869f, -0.002129f, -0.000524f, +0.001494f, +0.000102f}, + {+0.001816f, +0.063742f, -0.323681f, -0.008953f, -0.002758f, +0.004170f, -0.000396f}, + {-0.001419f, +0.031078f, -0.037154f, -0.008056f, -0.000641f, -0.003359f, +0.000045f}, + {-0.001164f, +0.009969f, +0.088648f, -0.011556f, +0.002492f, -0.005256f, -0.000124f}, + {+0.000693f, +0.026444f, -0.217624f, +0.005106f, -0.001448f, +0.007023f, -0.000105f}, + {+0.002214f, +0.001591f, -0.021758f, +0.001337f, -0.002244f, +0.004794f, +0.000016f}, + {+0.001396f, -0.022948f, +0.061227f, -0.000339f, +0.002823f, -0.006287f, +0.000004f}, + {-0.000222f, +0.016030f, +0.027796f, -0.010434f, +0.001167f, -0.001268f, -0.000077f} + }, + { + {+0.000537f, +0.069689f, +0.259996f, -0.015449f, -0.001689f, +0.000567f, +0.000032f}, + {+0.001883f, -0.105131f, -0.355263f, +0.018765f, +0.003133f, +0.000450f, +0.000016f}, + {-0.001138f, -0.018001f, +0.039839f, +0.012701f, +0.001219f, -0.000708f, -0.000287f}, + {-0.001263f, +0.029165f, +0.184940f, -0.003746f, -0.001169f, -0.001726f, -0.000098f}, + {+0.001083f, -0.037001f, -0.183894f, +0.007086f, +0.000486f, -0.000197f, +0.000096f}, + {-0.000342f, +0.013484f, -0.044965f, -0.006682f, -0.000921f, -0.000263f, +0.000136f}, + {+0.004481f, -0.021461f, -0.201741f, -0.003038f, +0.001363f, +0.001843f, +0.000265f}, + {-0.003961f, +0.024164f, +0.091417f, -0.008821f, -0.001712f, +0.000129f, -0.000204f}, + {+0.000207f, -0.002976f, +0.043954f, +0.001501f, +0.000276f, +0.000942f, +0.000107f}, + {+0.003639f, -0.052765f, -0.205252f, +0.011783f, +0.003716f, -0.001190f, -0.000192f}, + {-0.001689f, -0.023190f, +0.011247f, +0.010783f, -0.001786f, -0.002313f, +0.000212f}, + {-0.002372f, -0.004818f, +0.082129f, +0.010451f, +0.000189f, -0.001709f, -0.000272f}, + {+0.004804f, -0.020405f, -0.173555f, +0.002649f, +0.003189f, +0.001117f, +0.000066f}, + {+0.003227f, +0.010050f, -0.037377f, -0.001735f, +0.000749f, +0.001463f, +0.000329f}, + {-0.003142f, +0.023239f, +0.029929f, -0.001310f, -0.001621f, -0.001432f, -0.000309f}, + {-0.000053f, -0.009013f, +0.034476f, +0.011295f, +0.001661f, -0.001432f, -0.000323f} + }, + { + {+0.000467f, -0.049431f, +0.174512f, +0.052213f, -0.000379f, -0.000628f, +0.000018f}, + {-0.000675f, +0.068601f, -0.232702f, -0.078966f, +0.000387f, -0.001035f, +0.000020f}, + {+0.001138f, +0.009378f, +0.010305f, -0.023458f, -0.000156f, +0.000528f, +0.000103f}, + {+0.001051f, -0.021900f, +0.128073f, +0.018761f, +0.000854f, -0.000050f, +0.000029f}, + {-0.000093f, +0.025010f, -0.130739f, -0.024552f, -0.000063f, -0.000892f, +0.000054f}, + {-0.000652f, -0.002376f, -0.032485f, +0.008631f, +0.000330f, +0.000880f, -0.000082f}, + {-0.002083f, +0.015096f, -0.126566f, -0.008147f, -0.000445f, -0.003114f, +0.000045f}, + {+0.000739f, -0.009298f, +0.065194f, +0.025419f, +0.000920f, +0.003361f, -0.000035f}, + {+0.000258f, -0.000954f, +0.037598f, +0.000767f, +0.001217f, -0.000373f, -0.000075f}, + {-0.002042f, +0.033396f, -0.132174f, -0.040199f, +0.000207f, -0.002266f, +0.000307f}, + {+0.001414f, +0.014255f, +0.004390f, -0.026628f, +0.001532f, -0.000025f, -0.000092f}, + {+0.001280f, +0.002059f, +0.050357f, -0.008951f, +0.001342f, +0.002619f, +0.000087f}, + {-0.001481f, +0.009694f, -0.129207f, -0.015305f, -0.002740f, -0.004354f, +0.000130f}, + {-0.002380f, -0.004808f, -0.023046f, -0.002372f, +0.000308f, -0.001841f, -0.000118f}, + {-0.000907f, -0.004256f, +0.006995f, +0.009818f, -0.000916f, +0.002740f, +0.000058f}, + {+0.000120f, +0.004044f, +0.004424f, -0.021221f, +0.000105f, -0.000062f, +0.000164f} + } +}; + +const float rightHRIRImag_HOA3[BINAURAL_CONVBANDS][16][7]= +{ + { + {-0.007849f, -0.189662f, +0.310868f, +0.002657f, -0.000617f, -0.002064f, +0.000079f}, + {-0.006499f, +0.151239f, -0.295372f, +0.093873f, +0.006692f, -0.006119f, -0.000079f}, + {+0.018156f, -0.036738f, -0.002366f, +0.025349f, -0.033780f, +0.029927f, -0.001760f}, + {-0.001185f, -0.014058f, +0.058055f, -0.022315f, +0.001895f, +0.011251f, -0.001195f}, + {-0.007055f, +0.018561f, -0.015516f, -0.000397f, +0.002631f, -0.012108f, +0.001368f}, + {-0.011104f, +0.020008f, -0.011257f, -0.004500f, +0.004699f, -0.010150f, +0.001162f}, + {+0.015585f, -0.011962f, -0.031150f, +0.029687f, -0.015292f, +0.011837f, -0.001505f}, + {+0.017335f, -0.020280f, -0.052951f, +0.022099f, -0.000113f, +0.011817f, -0.000989f}, + {-0.000629f, -0.006228f, +0.019972f, -0.009129f, +0.003758f, -0.000470f, -0.000086f}, + {+0.000511f, -0.004432f, -0.002064f, +0.001344f, +0.004868f, -0.004917f, +0.000206f}, + {-0.002632f, +0.004614f, -0.009077f, -0.002040f, +0.003834f, -0.003681f, +0.000651f}, + {+0.004163f, -0.016169f, -0.009480f, +0.010379f, -0.001561f, +0.007873f, -0.000482f}, + {-0.007762f, +0.010368f, +0.015510f, +0.005022f, -0.004378f, -0.005468f, +0.000778f}, + {+0.000368f, -0.001287f, +0.003269f, -0.005109f, +0.003959f, -0.005552f, +0.000443f}, + {+0.007637f, -0.013100f, -0.008745f, +0.008594f, +0.001266f, +0.005515f, -0.000260f}, + {+0.003252f, -0.007772f, +0.002549f, -0.008685f, -0.000484f, +0.004879f, -0.000366f} + }, + { + {+0.003434f, +0.064136f, +0.596947f, -0.012925f, -0.012105f, -0.006348f, +0.000052f}, + {+0.006872f, +0.208738f, -0.430749f, -0.043085f, +0.005819f, -0.002350f, +0.000212f}, + {+0.005116f, -0.046396f, -0.012121f, +0.006015f, -0.006889f, +0.045123f, -0.000620f}, + {+0.007618f, +0.010992f, +0.040544f, -0.058428f, +0.022475f, +0.032839f, -0.000538f}, + {-0.005563f, +0.030740f, -0.013780f, -0.007345f, -0.017136f, -0.029360f, +0.000627f}, + {-0.007549f, +0.029664f, -0.026873f, -0.020401f, -0.009762f, -0.021968f, +0.000592f}, + {+0.015806f, -0.023439f, -0.030157f, +0.046969f, -0.012661f, +0.017740f, -0.000763f}, + {+0.013074f, -0.053955f, -0.091847f, +0.002101f, +0.025917f, +0.039011f, -0.000578f}, + {-0.007104f, -0.011492f, -0.004920f, -0.020806f, +0.019718f, +0.010737f, -0.000003f}, + {+0.005199f, -0.005331f, -0.027619f, -0.007498f, +0.002840f, -0.009453f, +0.000077f}, + {-0.010618f, -0.009204f, -0.036117f, -0.025558f, -0.004764f, -0.003733f, +0.000485f}, + {-0.004277f, -0.034749f, -0.019826f, +0.021144f, +0.023168f, +0.026165f, -0.000230f}, + {-0.001540f, +0.026510f, +0.043031f, +0.037355f, -0.014051f, -0.021793f, +0.000440f}, + {-0.000688f, +0.004194f, +0.023981f, +0.008644f, -0.009505f, -0.014330f, +0.000422f}, + {+0.007017f, -0.006121f, -0.001366f, +0.017321f, +0.021133f, +0.020778f, +0.000064f}, + {+0.001808f, -0.009372f, -0.001227f, -0.016870f, -0.000030f, +0.010680f, -0.000179f} + }, + { + {-0.000173f, +0.307249f, +0.141892f, +0.046866f, -0.017599f, -0.001859f, -0.000115f}, + {-0.006073f, -0.167540f, +0.082726f, -0.078686f, +0.003574f, +0.012765f, +0.000025f}, + {-0.025314f, -0.107553f, +0.097665f, -0.029881f, +0.045910f, +0.001205f, +0.001921f}, + {-0.017044f, +0.048408f, -0.041355f, -0.070138f, +0.036357f, +0.026423f, +0.001421f}, + {+0.015939f, -0.012147f, +0.007879f, +0.022686f, -0.043895f, -0.005350f, -0.001553f}, + {+0.021597f, +0.029155f, -0.035998f, -0.007977f, -0.049474f, +0.004557f, -0.001326f}, + {-0.036021f, +0.006766f, +0.026953f, +0.016862f, +0.032122f, -0.017257f, +0.001676f}, + {-0.031554f, -0.089831f, +0.085198f, -0.028444f, +0.031117f, +0.004947f, +0.001188f}, + {+0.007547f, +0.066302f, -0.134055f, -0.013452f, +0.011046f, +0.022691f, -0.000004f}, + {-0.006666f, +0.037732f, -0.068344f, -0.001907f, -0.003786f, -0.000807f, -0.000263f}, + {+0.015403f, +0.000610f, -0.082095f, -0.031996f, -0.007132f, +0.014653f, -0.000743f}, + {+0.006863f, +0.004261f, -0.006302f, -0.005244f, +0.004123f, +0.025567f, +0.000603f}, + {+0.009215f, +0.013483f, +0.000507f, +0.063866f, -0.017193f, -0.008910f, -0.001086f}, + {+0.002117f, +0.062124f, -0.009407f, -0.002622f, -0.025731f, +0.002923f, -0.000603f}, + {-0.014505f, +0.023100f, +0.024324f, +0.006534f, +0.006132f, +0.023845f, +0.000284f}, + {-0.002356f, -0.003682f, -0.002242f, +0.014199f, -0.006597f, +0.001081f, +0.000406f} + }, + { + {+0.000058f, -0.136416f, -0.492276f, -0.001401f, -0.011247f, -0.000834f, +0.000005f}, + {+0.003148f, +0.049667f, +0.450793f, -0.030608f, -0.004189f, -0.011365f, -0.000468f}, + {+0.021455f, -0.091938f, +0.007962f, -0.044085f, +0.049069f, -0.040177f, -0.000546f}, + {+0.020716f, +0.044565f, -0.098169f, -0.074157f, +0.023582f, -0.027619f, -0.000233f}, + {-0.013397f, -0.032973f, +0.049759f, +0.059972f, -0.004251f, +0.031825f, +0.000139f}, + {-0.015377f, -0.014548f, +0.037187f, +0.063775f, -0.035613f, +0.031532f, +0.000014f}, + {+0.017321f, +0.106436f, +0.015760f, -0.036442f, +0.043782f, -0.027117f, +0.000046f}, + {+0.018491f, -0.043347f, +0.081495f, -0.029687f, +0.027445f, -0.012467f, +0.000037f}, + {+0.002143f, +0.058964f, -0.151480f, -0.022542f, -0.017894f, -0.000117f, +0.000011f}, + {+0.002501f, +0.051566f, -0.076858f, -0.024061f, -0.010190f, +0.002223f, +0.000059f}, + {-0.004455f, -0.004621f, -0.022586f, +0.008980f, -0.004779f, +0.014720f, -0.000296f}, + {-0.010379f, +0.031260f, +0.084411f, +0.011079f, -0.044526f, -0.004500f, -0.000139f}, + {-0.010110f, -0.002952f, +0.019419f, +0.073054f, +0.016238f, +0.023041f, +0.000177f}, + {-0.005833f, +0.056756f, -0.003891f, +0.011659f, -0.013338f, +0.016593f, -0.000291f}, + {+0.005419f, +0.040607f, +0.004132f, -0.013323f, -0.017875f, -0.003126f, -0.000447f}, + {-0.004253f, +0.020851f, +0.031947f, +0.033527f, +0.001452f, -0.004281f, -0.000039f} + }, + { + {+0.000232f, -0.196424f, -0.385415f, -0.022712f, -0.006855f, +0.000856f, +0.000126f}, + {+0.000418f, +0.175457f, +0.245702f, +0.013319f, -0.015788f, -0.013106f, +0.000327f}, + {-0.001154f, +0.007098f, -0.063563f, -0.017231f, -0.005626f, -0.013559f, -0.001143f}, + {-0.012555f, -0.174488f, +0.237964f, -0.039418f, -0.002349f, -0.016946f, -0.001147f}, + {+0.003784f, +0.065353f, -0.070894f, +0.006390f, +0.057332f, +0.007117f, +0.001233f}, + {-0.000349f, +0.048045f, -0.027724f, +0.012524f, +0.033626f, -0.005520f, +0.001111f}, + {+0.017541f, +0.092792f, +0.030184f, -0.047810f, +0.016410f, -0.003144f, -0.001400f}, + {-0.000437f, -0.002996f, -0.013522f, +0.006474f, +0.030405f, -0.007597f, -0.001046f}, + {-0.007428f, -0.049136f, -0.023268f, -0.015781f, -0.011003f, -0.014398f, +0.000182f}, + {-0.001481f, -0.033593f, -0.004295f, +0.004592f, -0.021205f, -0.000050f, +0.000263f}, + {-0.005354f, -0.018801f, +0.011774f, -0.002287f, +0.027282f, -0.010347f, +0.000769f}, + {+0.009152f, +0.006626f, +0.078942f, +0.000242f, -0.021966f, -0.021963f, -0.000453f}, + {+0.009690f, +0.055165f, +0.045330f, -0.032221f, +0.065784f, +0.004359f, +0.001062f}, + {+0.010862f, +0.081924f, -0.069800f, -0.013181f, +0.045093f, -0.014171f, +0.000806f}, + {+0.005800f, +0.042160f, -0.003294f, -0.036254f, +0.013693f, -0.023545f, +0.000070f}, + {+0.009050f, +0.025948f, +0.028277f, -0.000043f, +0.018071f, -0.006021f, -0.000268f} + }, + { + {-0.001778f, +0.223111f, +0.243284f, +0.023691f, -0.004197f, +0.005091f, -0.000088f}, + {-0.002088f, -0.146779f, -0.282563f, -0.032455f, +0.005584f, +0.004320f, +0.000383f}, + {-0.012406f, +0.076657f, +0.054535f, +0.019126f, -0.004735f, +0.003766f, +0.000879f}, + {-0.000400f, +0.009278f, +0.480121f, +0.005043f, +0.003008f, +0.000400f, +0.000750f}, + {+0.000331f, +0.023120f, -0.141880f, -0.021964f, +0.032304f, -0.009784f, -0.000503f}, + {+0.005941f, +0.021748f, -0.079982f, -0.022467f, +0.025801f, -0.013174f, -0.000364f}, + {-0.027576f, -0.056867f, -0.044804f, -0.025088f, +0.021454f, +0.021391f, +0.000258f}, + {+0.000666f, +0.004812f, -0.031881f, -0.003249f, +0.015597f, -0.005884f, +0.000399f}, + {+0.001918f, -0.036904f, +0.028920f, -0.012401f, -0.003927f, -0.013129f, -0.000289f}, + {+0.004733f, -0.044313f, -0.017544f, +0.019033f, -0.000125f, +0.005854f, -0.000158f}, + {+0.003306f, +0.007736f, +0.036072f, -0.013098f, +0.016743f, -0.014288f, +0.000093f}, + {-0.002198f, -0.032947f, +0.025622f, -0.013714f, +0.002822f, -0.006481f, +0.000426f}, + {-0.010347f, +0.044911f, +0.109159f, -0.005157f, +0.028906f, -0.016894f, -0.000962f}, + {-0.012573f, -0.001057f, -0.086903f, -0.008620f, +0.026300f, -0.014200f, -0.000105f}, + {-0.006637f, +0.003910f, +0.011665f, +0.001170f, +0.021670f, -0.012737f, +0.000541f}, + {-0.006125f, -0.002545f, +0.021834f, -0.006301f, +0.010358f, -0.000879f, +0.000147f} + }, + { + {+0.001661f, +0.044798f, +0.497958f, +0.007682f, +0.001920f, +0.000678f, -0.000069f}, + {+0.001629f, -0.057245f, -0.418929f, -0.026166f, +0.007984f, +0.010658f, -0.000615f}, + {+0.009494f, -0.023460f, +0.158416f, +0.022301f, +0.001622f, +0.009939f, +0.000314f}, + {+0.005164f, +0.249867f, +0.124203f, +0.025636f, +0.005748f, +0.000660f, +0.000601f}, + {+0.003519f, -0.029885f, -0.075655f, -0.003349f, +0.004214f, -0.004704f, -0.000885f}, + {+0.000755f, -0.015219f, -0.048678f, -0.020834f, +0.012934f, -0.003014f, -0.000805f}, + {+0.006115f, -0.134583f, -0.038858f, +0.039498f, -0.010231f, +0.019073f, +0.001215f}, + {-0.006065f, +0.022158f, +0.017704f, -0.018410f, +0.001416f, -0.001222f, +0.000596f}, + {+0.002762f, -0.060790f, +0.053349f, +0.001174f, -0.011245f, -0.011658f, -0.000102f}, + {-0.003442f, +0.021974f, -0.051257f, +0.015449f, -0.006060f, +0.001236f, -0.000282f}, + {+0.000460f, +0.017973f, +0.022112f, +0.000478f, +0.004836f, -0.011224f, -0.000713f}, + {-0.002907f, +0.013619f, -0.015874f, -0.006198f, +0.002588f, -0.007083f, +0.000030f}, + {+0.005990f, +0.054285f, +0.021602f, +0.028748f, +0.000862f, -0.009091f, -0.000327f}, + {+0.007170f, -0.073188f, -0.020928f, -0.013170f, -0.006551f, +0.016420f, -0.000711f}, + {+0.002439f, +0.025659f, -0.013787f, +0.013123f, +0.004380f, -0.000469f, -0.000567f}, + {+0.001480f, +0.021027f, -0.001495f, -0.003191f, -0.008078f, +0.005950f, +0.000028f} + }, + { + {+0.000593f, -0.236478f, +0.062751f, -0.031574f, +0.001932f, +0.000475f, +0.000125f}, + {-0.001112f, +0.219741f, +0.045964f, +0.033082f, +0.012846f, +0.010238f, -0.000058f}, + {-0.000288f, -0.043345f, +0.129386f, +0.006449f, +0.014950f, +0.014326f, -0.000484f}, + {-0.000954f, -0.177421f, -0.465052f, -0.016332f, +0.003856f, -0.000880f, -0.000851f}, + {-0.006500f, +0.076420f, +0.126017f, +0.020000f, -0.005284f, -0.001453f, +0.000605f}, + {-0.005990f, -0.031405f, -0.037913f, +0.013960f, +0.013903f, -0.004807f, +0.000506f}, + {+0.015687f, +0.021104f, +0.113959f, +0.012439f, -0.039996f, +0.000223f, -0.000453f}, + {-0.000473f, +0.041740f, +0.044827f, -0.015459f, -0.002343f, -0.005928f, -0.000432f}, + {+0.001060f, -0.019108f, +0.067790f, +0.019182f, +0.001142f, -0.000990f, +0.000595f}, + {-0.003359f, +0.055575f, -0.011279f, +0.025875f, -0.003999f, +0.001129f, +0.000287f}, + {+0.002395f, -0.004105f, +0.011084f, +0.010291f, +0.008377f, +0.009379f, +0.000116f}, + {+0.000216f, +0.045114f, +0.020852f, +0.005913f, +0.002893f, -0.004932f, -0.000316f}, + {+0.003783f, -0.058127f, -0.116863f, +0.015414f, +0.004459f, +0.012101f, +0.001164f}, + {+0.001940f, -0.000953f, +0.073317f, +0.000380f, -0.013800f, +0.008255f, +0.000500f}, + {-0.001348f, +0.013472f, -0.048338f, -0.016392f, -0.002728f, +0.008729f, -0.000177f}, + {-0.002293f, +0.042225f, +0.020761f, -0.007674f, -0.021144f, -0.001111f, -0.000047f} + }, + { + {-0.001881f, +0.104692f, -0.437628f, +0.010124f, -0.004119f, +0.002798f, -0.000007f}, + {+0.000985f, -0.054923f, +0.473910f, -0.002045f, +0.002078f, +0.007573f, +0.000638f}, + {-0.004261f, +0.068963f, -0.026476f, +0.007698f, +0.005161f, +0.016700f, -0.000087f}, + {-0.000472f, -0.135013f, -0.565164f, -0.012751f, +0.014398f, -0.005967f, -0.000128f}, + {+0.002219f, -0.017222f, +0.277363f, -0.009247f, -0.012340f, -0.001014f, +0.000724f}, + {+0.002529f, +0.014422f, -0.078148f, +0.013292f, +0.001185f, +0.005919f, +0.000538f}, + {-0.012201f, +0.079026f, +0.174608f, -0.053111f, -0.028818f, -0.008327f, -0.001164f}, + {+0.008807f, +0.024623f, -0.021642f, +0.012326f, +0.005481f, -0.005376f, -0.000217f}, + {-0.004625f, +0.095195f, -0.032818f, +0.006017f, -0.007642f, +0.021939f, -0.000335f}, + {+0.005561f, -0.011254f, +0.069687f, +0.007241f, +0.007441f, -0.000401f, +0.000318f}, + {-0.004316f, +0.006517f, +0.015791f, +0.011842f, +0.000856f, +0.009342f, +0.000485f}, + {+0.004504f, -0.028032f, +0.066155f, +0.028674f, -0.003536f, -0.000815f, +0.000257f}, + {-0.007052f, -0.039724f, -0.103443f, -0.003110f, +0.009274f, +0.021142f, -0.000615f}, + {-0.006271f, +0.036829f, +0.058440f, -0.010721f, -0.009936f, +0.008632f, +0.000238f}, + {+0.001946f, -0.003377f, -0.061145f, -0.011028f, -0.000124f, +0.004200f, +0.000756f}, + {+0.005945f, +0.005663f, +0.029383f, -0.007265f, -0.007601f, -0.001858f, +0.000153f} + }, + { + {+0.001608f, +0.200304f, -0.287352f, +0.023568f, -0.012646f, -0.001792f, -0.000110f}, + {+0.000873f, -0.220254f, +0.233692f, -0.013980f, -0.019805f, -0.013042f, -0.000254f}, + {+0.005248f, +0.005267f, -0.097062f, +0.009788f, -0.031921f, -0.004981f, +0.000066f}, + {-0.006026f, +0.165134f, -0.129644f, +0.024946f, +0.039434f, +0.008272f, +0.000680f}, + {+0.004821f, -0.081844f, +0.161841f, -0.022252f, -0.006155f, -0.007528f, -0.000769f}, + {+0.002549f, +0.058108f, -0.046846f, +0.003059f, +0.000697f, +0.000618f, -0.000547f}, + {-0.007110f, -0.091546f, -0.012640f, -0.034041f, -0.004692f, +0.010014f, +0.000815f}, + {-0.004608f, +0.001433f, -0.064603f, -0.001817f, +0.036470f, +0.013459f, +0.000154f}, + {+0.000858f, +0.011046f, -0.117929f, +0.000666f, -0.010929f, +0.023558f, -0.000529f}, + {-0.000262f, +0.000025f, +0.103739f, +0.005447f, +0.009620f, -0.007360f, -0.000558f}, + {+0.000017f, -0.006779f, -0.001324f, +0.018054f, -0.004434f, -0.000980f, -0.000147f}, + {-0.001773f, -0.058408f, +0.050166f, +0.036957f, +0.028180f, +0.014311f, -0.000042f}, + {-0.002142f, +0.052174f, +0.014142f, +0.000352f, +0.005846f, +0.011380f, -0.000521f}, + {+0.002509f, -0.018918f, -0.023498f, -0.007300f, -0.010118f, -0.001050f, -0.000485f}, + {-0.001969f, +0.016255f, -0.030569f, -0.007966f, +0.008209f, +0.001626f, -0.000336f}, + {-0.005908f, -0.042236f, +0.002979f, -0.003313f, -0.002114f, +0.001176f, -0.000242f} + }, + { + {-0.002283f, -0.190264f, +0.317807f, -0.041862f, -0.013710f, -0.009182f, +0.000055f}, + {-0.004396f, +0.188305f, -0.367265f, +0.016356f, -0.017064f, -0.018999f, -0.000459f}, + {-0.006914f, -0.060402f, +0.070487f, -0.038753f, -0.028167f, -0.025907f, +0.000326f}, + {+0.011485f, -0.111924f, +0.257419f, +0.027696f, +0.043074f, +0.023043f, -0.000112f}, + {-0.006481f, +0.106988f, -0.078641f, -0.010369f, -0.020637f, -0.004268f, -0.000552f}, + {-0.002442f, +0.002203f, +0.021242f, -0.008312f, +0.010172f, -0.001226f, -0.000290f}, + {+0.015369f, -0.049094f, -0.176897f, +0.009396f, -0.018227f, -0.013839f, +0.000931f}, + {-0.002747f, -0.037808f, +0.016824f, +0.000881f, +0.041844f, +0.014131f, +0.000188f}, + {+0.002663f, -0.042773f, -0.067404f, -0.021799f, -0.000291f, -0.007144f, +0.000772f}, + {-0.002855f, +0.010467f, +0.079956f, +0.016808f, +0.003165f, -0.008992f, -0.000182f}, + {+0.001899f, +0.008400f, -0.030905f, +0.010609f, -0.001047f, +0.001953f, -0.000193f}, + {-0.005525f, -0.032964f, +0.043242f, +0.021771f, +0.050726f, +0.017866f, -0.000160f}, + {+0.009763f, -0.025562f, +0.101453f, -0.004032f, +0.007303f, -0.009460f, +0.000915f}, + {+0.003132f, -0.026920f, -0.054686f, +0.011398f, +0.001945f, -0.016836f, +0.000242f}, + {+0.003754f, -0.004524f, +0.013916f, -0.011236f, +0.007995f, +0.003567f, -0.000513f}, + {+0.002200f, -0.015957f, -0.044466f, +0.002366f, +0.002169f, -0.002036f, -0.000098f} + }, + { + {+0.003609f, -0.124165f, +0.450240f, -0.011960f, +0.001814f, -0.000226f, +0.000090f}, + {+0.005252f, +0.076277f, -0.547236f, +0.002862f, +0.003045f, -0.000456f, +0.000415f}, + {+0.006808f, -0.053114f, +0.098672f, -0.009249f, +0.001674f, -0.012447f, -0.000058f}, + {-0.008375f, -0.004906f, +0.362870f, -0.014974f, -0.000367f, -0.002802f, -0.000478f}, + {+0.002228f, -0.003473f, -0.205137f, +0.023272f, +0.006215f, +0.017134f, +0.001010f}, + {+0.000571f, -0.025991f, +0.026818f, +0.005091f, +0.013779f, +0.007778f, +0.000473f}, + {-0.003735f, -0.105491f, -0.279191f, -0.027929f, -0.010252f, -0.020097f, -0.001156f}, + {-0.001217f, +0.071835f, +0.154430f, -0.011855f, +0.002667f, -0.002826f, +0.000054f}, + {+0.000480f, -0.020383f, -0.034553f, -0.028592f, -0.016234f, -0.022065f, +0.000065f}, + {-0.000803f, -0.045105f, +0.000768f, +0.011625f, +0.005524f, +0.002577f, +0.000868f}, + {+0.003690f, -0.013195f, -0.053141f, +0.016549f, +0.007503f, +0.003226f, -0.000154f}, + {+0.004956f, +0.069593f, +0.135765f, +0.005671f, +0.003950f, -0.004994f, +0.000202f}, + {-0.001284f, -0.058847f, +0.070425f, -0.007215f, -0.008366f, -0.028907f, -0.000284f}, + {-0.003455f, -0.008730f, -0.036217f, -0.008454f, -0.004655f, -0.017679f, +0.000014f}, + {-0.005924f, -0.006414f, +0.021672f, -0.012342f, -0.002642f, -0.000940f, +0.000569f}, + {+0.000350f, +0.002979f, -0.028344f, +0.001530f, -0.005199f, -0.000823f, +0.000541f} + }, + { + {-0.002595f, +0.231505f, -0.059475f, +0.031323f, +0.000811f, +0.002997f, -0.000105f}, + {-0.000920f, -0.251923f, -0.021212f, -0.041245f, -0.002087f, +0.009892f, +0.000208f}, + {-0.001905f, +0.088975f, -0.095092f, +0.000614f, -0.000732f, +0.001651f, -0.000526f}, + {+0.001829f, +0.162263f, +0.072547f, +0.010691f, -0.006275f, -0.010152f, +0.000202f}, + {+0.001074f, -0.127675f, -0.024806f, +0.004697f, +0.015653f, +0.013365f, +0.000181f}, + {-0.001734f, -0.018512f, +0.027144f, +0.018621f, +0.006091f, +0.003330f, +0.000128f}, + {-0.010389f, -0.084487f, -0.226334f, -0.035829f, -0.004528f, -0.009666f, -0.000481f}, + {+0.009032f, +0.061811f, +0.096836f, +0.009505f, -0.012954f, +0.000064f, -0.000350f}, + {-0.002417f, -0.004918f, -0.012012f, -0.022845f, -0.015983f, -0.009882f, -0.000808f}, + {+0.003024f, -0.039172f, -0.013326f, +0.000801f, +0.001560f, +0.016627f, -0.000275f}, + {-0.007452f, -0.030058f, +0.016768f, -0.006774f, +0.012188f, -0.006626f, +0.000198f}, + {+0.004613f, +0.042919f, +0.140928f, +0.003562f, -0.014757f, +0.000165f, -0.000013f}, + {-0.012233f, +0.049543f, -0.035377f, +0.000625f, -0.000981f, -0.023350f, -0.000508f}, + {-0.000298f, -0.004223f, -0.034114f, -0.011313f, -0.011180f, -0.002456f, -0.000276f}, + {+0.003105f, +0.000900f, -0.043146f, +0.007921f, -0.009306f, +0.001719f, +0.000197f}, + {+0.000056f, -0.017410f, +0.012442f, -0.014149f, -0.007345f, +0.007077f, -0.000235f} + }, + { + {-0.000105f, -0.028242f, -0.490151f, -0.006013f, -0.000405f, +0.003651f, -0.000044f}, + {-0.004273f, +0.091012f, +0.512346f, +0.009209f, -0.006038f, +0.006005f, -0.000395f}, + {-0.003775f, -0.013142f, -0.264416f, -0.018230f, +0.003223f, +0.013630f, +0.000320f}, + {+0.000877f, -0.058724f, -0.212378f, -0.000299f, -0.004217f, -0.010691f, +0.000326f}, + {+0.000849f, +0.003925f, +0.168919f, +0.006611f, +0.017126f, +0.002900f, -0.001110f}, + {+0.003390f, +0.030951f, +0.055595f, +0.010449f, -0.001866f, -0.002874f, -0.000333f}, + {+0.007610f, +0.216878f, +0.101973f, -0.006828f, -0.006093f, +0.002417f, +0.001281f}, + {-0.005247f, -0.092910f, -0.082840f, +0.000173f, -0.000662f, +0.004149f, -0.000070f}, + {-0.003825f, +0.054499f, +0.068119f, -0.004337f, -0.003343f, +0.005033f, +0.000389f}, + {+0.001521f, -0.011283f, +0.019235f, -0.007889f, +0.004145f, +0.013462f, -0.000877f}, + {+0.002597f, +0.017853f, +0.077262f, -0.005729f, +0.000186f, -0.009721f, +0.000537f}, + {-0.007806f, -0.173983f, -0.083663f, -0.017989f, -0.010736f, +0.004214f, -0.000162f}, + {+0.007527f, +0.139189f, +0.016947f, +0.007434f, +0.010151f, -0.003075f, +0.000600f}, + {+0.001257f, +0.034327f, +0.000584f, -0.010653f, -0.017435f, +0.012041f, +0.000506f}, + {+0.003054f, -0.012901f, -0.072559f, -0.003234f, -0.002533f, +0.004886f, -0.000554f}, + {-0.001440f, -0.001177f, +0.041342f, -0.035758f, -0.008227f, +0.013542f, -0.000605f} + }, + { + {+0.000534f, -0.191712f, -0.256462f, -0.027639f, -0.000869f, +0.002740f, +0.000150f}, + {+0.004711f, +0.189644f, +0.323706f, +0.035566f, -0.003931f, +0.001774f, -0.000023f}, + {+0.005338f, -0.132584f, -0.123062f, -0.006922f, +0.001908f, +0.014249f, +0.000418f}, + {-0.001514f, -0.096895f, -0.149462f, -0.012634f, -0.002553f, -0.008145f, -0.000239f}, + {-0.004455f, +0.078939f, +0.109890f, -0.030175f, +0.054100f, -0.020621f, +0.000317f}, + {-0.001954f, +0.037369f, +0.070319f, -0.012542f, +0.001373f, -0.004905f, -0.000105f}, + {+0.009597f, +0.091443f, +0.213955f, +0.082122f, -0.078271f, +0.037887f, -0.000021f}, + {-0.006956f, -0.041842f, -0.097106f, -0.047918f, +0.046573f, -0.019063f, +0.000497f}, + {+0.009351f, +0.017534f, +0.036624f, +0.019555f, -0.006998f, +0.006656f, +0.000487f}, + {-0.006094f, +0.025598f, +0.007412f, -0.043196f, +0.046727f, -0.015901f, +0.000824f}, + {+0.003579f, +0.015919f, +0.063537f, +0.024273f, -0.033493f, +0.010473f, -0.000646f}, + {-0.003786f, -0.079431f, -0.211573f, -0.049145f, +0.046596f, -0.025127f, +0.000019f}, + {+0.013003f, +0.024809f, +0.097034f, +0.057786f, -0.052429f, +0.039258f, -0.000048f}, + {+0.003464f, +0.021931f, -0.011529f, +0.044162f, -0.055245f, +0.027731f, -0.000194f}, + {-0.005197f, -0.016476f, -0.014479f, -0.033521f, +0.033687f, -0.015973f, -0.000043f}, + {+0.001962f, +0.024503f, +0.005662f, -0.050924f, +0.039002f, -0.020531f, +0.000668f} + }, + { + {+0.001553f, +0.146963f, +0.302141f, +0.026379f, +0.000840f, +0.000346f, -0.000061f}, + {-0.001717f, -0.217569f, -0.292571f, -0.015852f, +0.000463f, +0.005375f, +0.000261f}, + {-0.004635f, +0.115185f, +0.259233f, +0.023669f, +0.003813f, +0.006664f, -0.000481f}, + {+0.003717f, +0.087889f, +0.084589f, -0.005335f, -0.001673f, -0.001669f, -0.000199f}, + {+0.004523f, -0.042980f, -0.118037f, -0.067124f, +0.037615f, -0.021729f, +0.000920f}, + {+0.000118f, -0.066640f, -0.036964f, -0.011214f, +0.005413f, -0.005046f, +0.000256f}, + {-0.021275f, -0.088041f, +0.115907f, +0.129339f, -0.055323f, +0.030816f, -0.001195f}, + {+0.013274f, +0.085064f, +0.010644f, -0.082487f, +0.025821f, -0.022331f, +0.000007f}, + {-0.003747f, -0.079218f, -0.067175f, +0.016473f, -0.003161f, +0.005630f, -0.000496f}, + {+0.004932f, +0.009594f, -0.051342f, -0.075947f, +0.023028f, -0.024066f, +0.000426f}, + {-0.004863f, -0.054121f, -0.015535f, +0.051655f, -0.010816f, +0.015566f, -0.000550f}, + {+0.014845f, +0.103176f, -0.080073f, -0.073893f, +0.033782f, -0.019073f, +0.000223f}, + {-0.020172f, -0.123083f, +0.025247f, +0.077152f, -0.044505f, +0.035317f, -0.000427f}, + {-0.009806f, -0.027794f, -0.010006f, +0.092919f, -0.036980f, +0.021231f, -0.000596f}, + {+0.003438f, +0.040179f, +0.056704f, -0.041600f, +0.022592f, -0.014077f, +0.000577f}, + {-0.000596f, -0.015506f, -0.049450f, -0.036447f, +0.050092f, -0.018485f, +0.000333f} + }, + { + {-0.002422f, +0.059309f, +0.454757f, +0.012657f, +0.002371f, -0.003051f, -0.000109f}, + {+0.000972f, -0.089012f, -0.471174f, +0.002615f, +0.003776f, -0.002449f, +0.000000f}, + {+0.004981f, +0.029440f, +0.402898f, +0.009542f, +0.008586f, -0.005243f, -0.000150f}, + {-0.003934f, +0.068475f, +0.154745f, -0.020530f, -0.010063f, +0.011466f, +0.000228f}, + {-0.001934f, -0.008674f, -0.222726f, -0.009188f, -0.005025f, +0.009762f, -0.000728f}, + {-0.001313f, -0.027392f, -0.137224f, +0.014991f, +0.001664f, -0.004118f, +0.000127f}, + {+0.014825f, -0.131128f, +0.122638f, +0.075503f, +0.018816f, -0.031020f, +0.000515f}, + {-0.011235f, +0.084345f, -0.009674f, -0.055727f, -0.015906f, +0.017483f, -0.000662f}, + {-0.005861f, -0.019533f, -0.082227f, +0.006916f, +0.001847f, +0.000758f, -0.000202f}, + {-0.002580f, +0.007477f, -0.078927f, -0.037096f, -0.017242f, +0.002675f, -0.001011f}, + {+0.006105f, -0.029808f, -0.069762f, +0.048809f, +0.026042f, -0.019077f, +0.001200f}, + {-0.007044f, +0.114937f, +0.015102f, -0.066422f, -0.026713f, +0.021148f, -0.000080f}, + {+0.001891f, -0.137403f, -0.008770f, +0.069524f, +0.011781f, -0.014633f, +0.000357f}, + {+0.011650f, -0.048431f, -0.022767f, +0.070071f, +0.022558f, -0.031545f, +0.000766f}, + {-0.004098f, +0.038606f, +0.034870f, -0.023526f, -0.016759f, +0.018251f, -0.000137f}, + {-0.002804f, -0.007684f, -0.077297f, +0.002580f, +0.008066f, +0.011234f, -0.000920f} + }, + { + {+0.001243f, -0.224613f, -0.012233f, -0.028833f, +0.002009f, -0.001573f, +0.000139f}, + {-0.003295f, +0.291789f, +0.088662f, +0.035172f, +0.002488f, -0.006098f, -0.000188f}, + {-0.004422f, -0.109655f, +0.194382f, -0.015495f, -0.002943f, -0.012500f, +0.000375f}, + {-0.000983f, -0.060160f, +0.019095f, +0.002163f, -0.009795f, +0.008264f, +0.000115f}, + {+0.001589f, +0.082539f, -0.072974f, +0.012423f, +0.001200f, +0.017036f, -0.000476f}, + {+0.002963f, -0.004891f, -0.170906f, -0.002191f, +0.010678f, +0.003313f, -0.000249f}, + {+0.000920f, -0.061561f, +0.127515f, -0.015016f, +0.024498f, -0.020689f, +0.000844f}, + {+0.008002f, -0.061962f, -0.190966f, -0.006417f, -0.015050f, +0.014959f, +0.000195f}, + {+0.005173f, +0.156470f, +0.092158f, +0.003397f, +0.001560f, -0.000232f, +0.000368f}, + {+0.003501f, -0.012214f, -0.075482f, +0.005243f, +0.002154f, +0.020806f, +0.000155f}, + {-0.008351f, -0.016040f, -0.026286f, +0.012254f, +0.009563f, -0.018921f, +0.000087f}, + {-0.011531f, +0.098810f, +0.081896f, +0.003554f, -0.022476f, +0.012750f, -0.000309f}, + {+0.015089f, -0.023102f, -0.004189f, -0.005266f, +0.027232f, -0.009300f, +0.000031f}, + {-0.005756f, -0.105164f, -0.121008f, -0.004928f, +0.021585f, -0.023954f, +0.000170f}, + {+0.006045f, -0.003955f, -0.049276f, -0.014402f, -0.022434f, +0.010508f, -0.000583f}, + {+0.004951f, +0.038486f, -0.010450f, +0.009920f, -0.000470f, +0.019584f, +0.000126f} + }, + { + {-0.000785f, +0.071187f, -0.465505f, +0.008818f, +0.000726f, -0.000365f, -0.000008f}, + {+0.003977f, -0.050770f, +0.585842f, -0.009869f, +0.005833f, -0.006502f, -0.000042f}, + {+0.001056f, +0.090926f, -0.134707f, -0.000269f, +0.002753f, -0.009764f, +0.000032f}, + {+0.004617f, -0.003374f, -0.109444f, +0.009037f, -0.005531f, +0.005999f, -0.000201f}, + {-0.003957f, -0.051265f, +0.172281f, -0.013706f, -0.002364f, +0.006848f, +0.000853f}, + {-0.001658f, -0.038903f, -0.082157f, +0.000716f, +0.007295f, +0.006209f, -0.000121f}, + {-0.008525f, +0.078895f, -0.017870f, -0.012860f, +0.021118f, -0.002045f, -0.000829f}, + {-0.004920f, +0.015338f, -0.238590f, -0.001845f, -0.024647f, +0.009983f, +0.000767f}, + {+0.004676f, +0.105685f, +0.151514f, -0.014114f, -0.002475f, +0.001016f, +0.000176f}, + {-0.004034f, -0.022836f, -0.044207f, +0.014588f, +0.008672f, +0.010817f, +0.000710f}, + {+0.002168f, -0.116093f, +0.070756f, +0.031832f, -0.022730f, +0.006607f, -0.001442f}, + {+0.016149f, +0.002381f, +0.087859f, +0.020749f, +0.000196f, -0.003994f, +0.000292f}, + {-0.004050f, +0.044943f, -0.009330f, -0.045828f, +0.060443f, -0.016203f, -0.000276f}, + {-0.005468f, -0.113575f, -0.136984f, +0.012815f, +0.014267f, -0.005446f, -0.000965f}, + {-0.002865f, +0.038861f, -0.055190f, -0.024730f, -0.004192f, -0.008756f, +0.000421f}, + {-0.000981f, +0.013622f, +0.075658f, -0.024512f, +0.006801f, +0.006189f, +0.000849f} + }, + { + {+0.001239f, +0.191379f, -0.284220f, +0.019946f, +0.003893f, +0.000657f, -0.000100f}, + {-0.001075f, -0.276377f, +0.283032f, -0.022859f, +0.009082f, -0.003365f, +0.000240f}, + {+0.001241f, -0.011637f, -0.274203f, +0.004930f, +0.017890f, -0.002705f, -0.000186f}, + {-0.000041f, -0.018968f, -0.133490f, +0.005016f, -0.007152f, +0.003102f, -0.000080f}, + {+0.003640f, -0.003961f, +0.218334f, -0.022294f, -0.024633f, -0.009211f, -0.000017f}, + {-0.000298f, +0.117839f, +0.145841f, +0.001220f, +0.000336f, +0.003714f, +0.000241f}, + {+0.003359f, +0.080035f, -0.097693f, -0.029470f, +0.008235f, -0.002678f, -0.000275f}, + {+0.000294f, +0.114223f, -0.072671f, +0.021916f, -0.033236f, -0.003728f, -0.000589f}, + {-0.009708f, -0.120433f, -0.071254f, -0.014746f, -0.008719f, -0.006424f, -0.000344f}, + {+0.001269f, +0.046754f, +0.003954f, -0.016916f, -0.003171f, -0.006009f, -0.000388f}, + {+0.012341f, -0.075476f, +0.093630f, +0.049195f, -0.003798f, +0.028589f, +0.000568f}, + {-0.002325f, -0.131285f, -0.044269f, +0.020071f, +0.028957f, +0.007233f, +0.000174f}, + {-0.019754f, +0.109314f, +0.101468f, -0.085502f, +0.027617f, -0.021611f, +0.000269f}, + {+0.013359f, +0.074152f, +0.055568f, +0.013092f, +0.010223f, +0.008649f, +0.000405f}, + {-0.002438f, +0.089734f, +0.050761f, -0.012420f, +0.004906f, -0.005249f, +0.000350f}, + {-0.007586f, -0.002478f, +0.072281f, -0.033398f, -0.009508f, -0.010318f, -0.000512f} + }, + { + {+0.000051f, -0.155265f, +0.261455f, -0.025571f, +0.008165f, -0.000717f, +0.000066f}, + {-0.001630f, +0.169186f, -0.393845f, +0.036438f, -0.008078f, +0.006680f, -0.000028f}, + {+0.000337f, -0.079130f, -0.143638f, -0.006564f, +0.000925f, +0.007661f, -0.000153f}, + {-0.007150f, -0.020081f, -0.070013f, -0.006603f, +0.004172f, -0.008362f, +0.000222f}, + {+0.002015f, +0.099180f, +0.044872f, -0.014401f, -0.021736f, -0.002693f, -0.000644f}, + {-0.000309f, +0.013186f, +0.262927f, -0.008874f, +0.004250f, +0.004267f, +0.000133f}, + {+0.004143f, +0.028994f, -0.084453f, +0.022748f, -0.010859f, +0.000658f, +0.000717f}, + {+0.001064f, -0.067881f, +0.148877f, -0.004518f, -0.009488f, -0.012696f, -0.000549f}, + {+0.004788f, -0.075563f, -0.198295f, +0.012604f, -0.014432f, -0.006906f, -0.000228f}, + {+0.000822f, -0.008456f, +0.066147f, -0.014101f, +0.000566f, -0.009494f, -0.000293f}, + {-0.017337f, +0.086056f, -0.025001f, +0.029312f, +0.013841f, +0.014057f, +0.001264f}, + {-0.007897f, -0.009827f, -0.121822f, -0.034941f, +0.036994f, +0.008486f, -0.000358f}, + {+0.020805f, -0.117331f, +0.232026f, -0.011502f, -0.017947f, -0.002610f, -0.000143f}, + {-0.009701f, +0.046825f, +0.183213f, -0.000834f, -0.001503f, +0.018015f, +0.000694f}, + {+0.000783f, -0.037442f, +0.178684f, -0.005879f, -0.013166f, +0.009162f, -0.000528f}, + {+0.011722f, -0.002350f, -0.004545f, -0.002405f, -0.010888f, -0.012285f, -0.000539f} + }, + { + {-0.002527f, -0.041067f, +0.437759f, -0.007129f, +0.005781f, -0.001019f, +0.000019f}, + {+0.001146f, +0.101283f, -0.529356f, +0.017671f, -0.006206f, +0.006544f, -0.000244f}, + {-0.001251f, +0.075658f, +0.077822f, +0.003804f, -0.004672f, +0.009631f, +0.000203f}, + {+0.005863f, +0.094796f, +0.059519f, -0.004478f, -0.006540f, -0.013700f, +0.000009f}, + {-0.007285f, -0.061623f, -0.137831f, -0.001381f, -0.008080f, +0.004592f, +0.000290f}, + {+0.001291f, -0.109556f, +0.079837f, -0.019787f, +0.002279f, -0.002518f, -0.000266f}, + {-0.005084f, +0.124814f, +0.081853f, +0.002734f, -0.001840f, +0.008835f, -0.000121f}, + {+0.004182f, -0.049684f, +0.191667f, -0.005192f, +0.001015f, +0.000119f, +0.000867f}, + {+0.001163f, +0.010105f, -0.120678f, +0.012616f, +0.002928f, +0.005188f, +0.000510f}, + {-0.000188f, +0.004985f, +0.107319f, +0.006725f, +0.000249f, -0.007191f, +0.000210f}, + {+0.003857f, +0.076698f, -0.118389f, -0.002946f, +0.004928f, -0.024526f, -0.001114f}, + {+0.000953f, +0.010379f, -0.119279f, -0.017060f, +0.013659f, -0.010888f, -0.000001f}, + {+0.003450f, -0.223022f, +0.159256f, +0.028244f, -0.004310f, +0.024009f, -0.000105f}, + {-0.001797f, +0.007725f, +0.102409f, -0.028265f, +0.001228f, +0.008448f, -0.000702f}, + {+0.005477f, -0.062622f, +0.122632f, -0.002666f, -0.020475f, +0.004011f, -0.000036f}, + {-0.006490f, -0.074102f, -0.080569f, +0.003599f, -0.001484f, +0.001399f, +0.000668f} + }, + { + {+0.002605f, +0.217915f, +0.017254f, +0.026685f, +0.001074f, +0.001696f, -0.000027f}, + {+0.000507f, -0.280145f, +0.055434f, -0.036463f, +0.007121f, -0.000445f, +0.000151f}, + {-0.002225f, +0.031540f, +0.137049f, +0.003402f, +0.001446f, +0.006851f, +0.000259f}, + {+0.003339f, +0.029607f, +0.111028f, +0.012934f, -0.015664f, -0.008267f, -0.000233f}, + {+0.005138f, -0.044216f, -0.166568f, -0.008876f, +0.001389f, -0.000115f, +0.000307f}, + {+0.000318f, +0.060748f, -0.148723f, -0.005268f, +0.001350f, -0.007903f, -0.000142f}, + {+0.002239f, -0.107172f, +0.365147f, -0.022416f, +0.007887f, +0.007958f, -0.000349f}, + {-0.008240f, +0.029286f, +0.131515f, +0.000924f, +0.001729f, +0.003361f, +0.000076f}, + {-0.001111f, -0.048033f, +0.008200f, -0.002944f, +0.003827f, +0.007343f, +0.000098f}, + {+0.001402f, +0.043485f, +0.056675f, +0.011711f, -0.010410f, +0.001163f, +0.000166f}, + {+0.010717f, -0.047236f, -0.000355f, -0.006515f, -0.009782f, -0.018035f, -0.000768f}, + {+0.007978f, +0.038622f, -0.174602f, +0.002049f, +0.003385f, -0.010858f, +0.000228f}, + {-0.020226f, +0.096237f, -0.148919f, +0.011944f, +0.011821f, +0.016071f, +0.000439f}, + {+0.006621f, +0.001528f, -0.011697f, +0.001299f, +0.008412f, -0.001732f, -0.000267f}, + {-0.004817f, +0.097631f, -0.066498f, +0.021077f, -0.018987f, -0.003674f, +0.000339f}, + {-0.001070f, +0.015835f, -0.169665f, -0.009779f, +0.002793f, +0.003666f, +0.000178f} + }, + { + {-0.000218f, -0.089026f, -0.421023f, -0.012375f, -0.004634f, +0.001798f, -0.000012f}, + {-0.000562f, +0.036209f, +0.550665f, +0.008292f, +0.010922f, -0.001692f, +0.000105f}, + {+0.005142f, -0.043344f, +0.001224f, -0.012674f, +0.003441f, -0.001675f, -0.000409f}, + {-0.008966f, -0.031569f, +0.059797f, +0.001454f, +0.000130f, +0.005702f, +0.000118f}, + {+0.002522f, +0.011413f, -0.087325f, +0.011922f, +0.000022f, -0.005284f, -0.000260f}, + {-0.002181f, +0.052724f, -0.140023f, +0.006731f, -0.003810f, -0.005104f, +0.000356f}, + {-0.001765f, -0.138044f, +0.333274f, -0.033581f, -0.002688f, +0.003200f, +0.000115f}, + {+0.003973f, +0.003541f, +0.046013f, -0.008444f, -0.007414f, -0.002627f, -0.000742f}, + {-0.001162f, -0.005039f, +0.086514f, +0.005749f, +0.000068f, +0.001696f, -0.000644f}, + {-0.005849f, -0.018637f, -0.044453f, -0.010415f, -0.017192f, -0.005809f, +0.000040f}, + {-0.008661f, -0.000783f, +0.119984f, +0.007281f, +0.002656f, +0.002479f, +0.001365f}, + {-0.001526f, +0.035648f, -0.157081f, +0.009488f, +0.019925f, -0.005193f, +0.000063f}, + {+0.011404f, +0.097066f, -0.250275f, +0.008788f, +0.002808f, -0.002067f, -0.000457f}, + {+0.001614f, -0.102998f, -0.128763f, +0.002681f, +0.005070f, -0.005321f, +0.000660f}, + {-0.003298f, +0.036157f, -0.178811f, +0.006825f, -0.008513f, -0.007543f, -0.000020f}, + {+0.001641f, +0.072805f, -0.123235f, -0.015452f, +0.002179f, +0.000264f, -0.000592f} + }, + { + {-0.000975f, -0.195927f, -0.252176f, -0.030354f, -0.003229f, +0.000526f, -0.000001f}, + {-0.000309f, +0.234067f, +0.266019f, +0.031177f, +0.006945f, +0.001049f, -0.000130f}, + {-0.002386f, +0.028204f, -0.131500f, +0.018106f, +0.002251f, -0.009442f, -0.000107f}, + {+0.005664f, -0.042363f, +0.072003f, -0.019768f, +0.004863f, +0.013196f, +0.000136f}, + {-0.006853f, +0.021462f, -0.075786f, +0.014512f, -0.006282f, -0.005188f, -0.000127f}, + {+0.001367f, -0.048666f, +0.006991f, -0.006727f, -0.010622f, +0.002375f, +0.000051f}, + {+0.003019f, +0.102067f, -0.002017f, -0.014826f, -0.006139f, +0.006654f, +0.000175f}, + {+0.001819f, +0.060630f, -0.102441f, +0.007947f, -0.006446f, -0.004503f, +0.000229f}, + {+0.000306f, +0.033150f, +0.030918f, +0.012775f, -0.001709f, -0.007959f, +0.000197f}, + {+0.007447f, -0.004851f, -0.083008f, -0.030885f, -0.022103f, +0.013176f, -0.000348f}, + {-0.000980f, -0.004050f, +0.155101f, +0.009877f, -0.004389f, +0.010605f, +0.000136f}, + {-0.011198f, -0.094889f, +0.026127f, +0.019593f, +0.014251f, -0.000870f, -0.000246f}, + {+0.003826f, +0.006068f, -0.154175f, +0.011531f, -0.003595f, -0.004320f, -0.000133f}, + {-0.010429f, -0.057946f, -0.099086f, -0.007643f, +0.012220f, -0.006023f, -0.000013f}, + {+0.006881f, -0.044670f, -0.130668f, -0.002390f, -0.001337f, -0.004130f, -0.000157f}, + {+0.002955f, -0.008067f, -0.021343f, -0.008702f, -0.004275f, -0.000004f, +0.000081f} + }, + { + {+0.000069f, +0.146635f, +0.261169f, +0.019817f, +0.000075f, +0.000531f, +0.000050f}, + {+0.000305f, -0.167956f, -0.370129f, -0.020672f, -0.001785f, -0.004094f, -0.000005f}, + {-0.001609f, +0.024380f, -0.133534f, +0.009049f, +0.001346f, -0.007049f, +0.000490f}, + {-0.000308f, -0.024516f, +0.102890f, -0.000078f, -0.001148f, +0.006088f, -0.000171f}, + {+0.003839f, +0.022205f, -0.075778f, +0.005346f, -0.001081f, +0.003317f, +0.000138f}, + {-0.000262f, +0.001355f, +0.058890f, -0.010171f, -0.003640f, +0.003881f, -0.000395f}, + {-0.002110f, -0.010551f, -0.210784f, -0.011445f, -0.007396f, -0.008617f, -0.000022f}, + {-0.000164f, -0.077247f, -0.273416f, -0.009245f, -0.003585f, -0.002259f, +0.000426f}, + {+0.001898f, -0.029394f, -0.081419f, +0.001244f, -0.003552f, -0.004044f, +0.000555f}, + {-0.003842f, +0.015743f, +0.003106f, +0.017909f, -0.010335f, +0.016376f, -0.000053f}, + {+0.000773f, -0.009196f, +0.117905f, +0.005612f, +0.002042f, +0.007695f, -0.001220f}, + {+0.010660f, +0.058962f, +0.204008f, +0.008327f, +0.009183f, +0.007026f, -0.000141f}, + {-0.004701f, -0.015995f, -0.106937f, +0.021098f, -0.004298f, -0.004601f, +0.000763f}, + {+0.006433f, +0.158915f, +0.112726f, -0.004279f, +0.017104f, -0.005337f, -0.000512f}, + {-0.001227f, -0.004124f, -0.047424f, -0.003324f, +0.000541f, +0.001090f, -0.000151f}, + {-0.003536f, -0.000793f, +0.041435f, +0.013181f, +0.004530f, +0.004257f, +0.000379f} + }, + { + {+0.000364f, +0.080984f, +0.376956f, +0.011952f, +0.000472f, -0.001518f, -0.000035f}, + {+0.000358f, -0.095210f, -0.504080f, -0.005232f, -0.006697f, -0.000372f, +0.000005f}, + {+0.000714f, -0.120793f, +0.065080f, -0.000397f, -0.002637f, +0.003362f, -0.000163f}, + {-0.000153f, +0.085409f, -0.047521f, +0.008039f, -0.002805f, +0.001302f, -0.000001f}, + {+0.001358f, -0.070095f, +0.050933f, -0.008619f, +0.006272f, +0.002042f, +0.000141f}, + {+0.001606f, +0.076349f, -0.053110f, +0.001126f, +0.005007f, -0.002104f, +0.000094f}, + {+0.000002f, -0.031163f, -0.172766f, -0.008913f, -0.001813f, -0.012478f, -0.000206f}, + {-0.003516f, -0.128750f, -0.154401f, -0.011018f, -0.010691f, +0.005231f, -0.000216f}, + {-0.001149f, +0.000294f, -0.147009f, +0.020344f, -0.008919f, +0.004686f, -0.000431f}, + {+0.001679f, +0.029734f, +0.035947f, -0.006328f, +0.015421f, -0.005286f, +0.000570f}, + {+0.004711f, +0.055321f, -0.011201f, +0.003090f, +0.007013f, -0.002069f, +0.000342f}, + {+0.000641f, +0.063262f, +0.204996f, +0.003457f, +0.008688f, +0.007549f, +0.000450f}, + {-0.000379f, -0.044888f, -0.064556f, +0.012953f, -0.001097f, +0.000928f, -0.000518f}, + {+0.003186f, +0.094917f, +0.184077f, -0.001265f, +0.005182f, -0.004312f, +0.000161f}, + {-0.005195f, -0.055939f, +0.071423f, -0.012305f, +0.003317f, +0.000086f, +0.000225f}, + {-0.001806f, -0.015355f, +0.044186f, +0.012248f, +0.011792f, -0.000869f, -0.000164f} + }, + { + {+0.000195f, -0.185610f, -0.036287f, -0.024075f, +0.002082f, -0.000689f, -0.000044f}, + {-0.000757f, +0.229752f, +0.017681f, +0.031382f, -0.006224f, +0.001307f, +0.000075f}, + {+0.001914f, +0.006500f, +0.229048f, +0.000819f, -0.005861f, +0.003371f, -0.000304f}, + {-0.002186f, -0.056829f, -0.244763f, -0.001140f, -0.001038f, -0.002732f, +0.000098f}, + {-0.002962f, +0.006295f, +0.156039f, -0.011850f, +0.001834f, +0.002488f, -0.000145f}, + {-0.002632f, +0.018280f, -0.116610f, -0.003232f, +0.011774f, +0.002750f, +0.000318f}, + {-0.000368f, +0.118018f, +0.078968f, +0.009095f, +0.007376f, -0.003097f, +0.000120f}, + {-0.000867f, +0.179501f, +0.254048f, +0.024606f, -0.007672f, +0.009218f, -0.000263f}, + {-0.002079f, +0.021491f, -0.107751f, +0.011889f, -0.003752f, +0.008417f, -0.000315f}, + {-0.004687f, -0.011076f, +0.013710f, +0.010901f, +0.002336f, -0.018359f, -0.000185f}, + {-0.000171f, -0.103745f, -0.209256f, -0.011020f, +0.000511f, -0.007430f, +0.000803f}, + {-0.003492f, -0.092594f, -0.015449f, -0.020195f, -0.000503f, -0.000351f, -0.000039f}, + {-0.004172f, +0.029566f, +0.007150f, +0.009351f, +0.000760f, +0.002162f, -0.000446f}, + {-0.001750f, -0.062137f, +0.037050f, -0.023719f, -0.012362f, -0.004177f, +0.000369f}, + {+0.005958f, +0.060184f, +0.203001f, -0.025293f, -0.001997f, +0.001870f, +0.000255f}, + {+0.005258f, -0.060569f, -0.061313f, -0.024494f, +0.010320f, +0.002211f, -0.000161f} + }, + { + {+0.000112f, +0.060658f, -0.417787f, +0.005714f, +0.004379f, -0.002197f, +0.000068f}, + {+0.001102f, -0.095822f, +0.518040f, -0.011832f, -0.002015f, +0.000251f, +0.000000f}, + {-0.000516f, +0.082315f, +0.132261f, +0.005735f, -0.007129f, +0.002706f, +0.000243f}, + {+0.002333f, -0.078203f, -0.213458f, -0.013410f, +0.010117f, -0.008587f, -0.000019f}, + {+0.002081f, +0.076825f, +0.077848f, -0.015310f, -0.000613f, +0.001883f, -0.000148f}, + {+0.000575f, -0.080134f, +0.005198f, -0.013834f, +0.013263f, +0.006006f, -0.000155f}, + {+0.002393f, +0.024462f, +0.208714f, -0.012361f, +0.008510f, +0.002277f, +0.000100f}, + {+0.009163f, +0.075210f, +0.409320f, +0.005280f, +0.007354f, +0.000656f, +0.000140f}, + {+0.004047f, -0.084423f, +0.061196f, -0.021248f, +0.011737f, -0.000848f, +0.000475f}, + {+0.006606f, +0.032804f, -0.077956f, +0.007869f, -0.018631f, -0.005903f, -0.000583f}, + {-0.010179f, -0.078026f, -0.230409f, -0.005878f, -0.003699f, +0.003518f, -0.000459f}, + {-0.005684f, -0.014213f, -0.151112f, -0.001273f, -0.006624f, +0.001254f, -0.000492f}, + {+0.010719f, -0.040781f, +0.075906f, +0.029747f, -0.006338f, -0.010906f, +0.000848f}, + {-0.008963f, -0.034970f, -0.020605f, -0.013122f, -0.028749f, +0.011953f, -0.000294f}, + {-0.003411f, +0.040528f, +0.227979f, -0.043627f, -0.002551f, +0.014298f, -0.000446f}, + {-0.001660f, -0.005966f, -0.105333f, -0.046917f, +0.022085f, +0.000796f, +0.000090f} + }, + { + {-0.000762f, +0.164203f, -0.247474f, +0.021171f, +0.002604f, -0.001593f, +0.000004f}, + {-0.001507f, -0.190154f, +0.345179f, -0.027840f, +0.002873f, +0.000767f, -0.000153f}, + {-0.002025f, -0.067328f, -0.076491f, -0.004353f, -0.007606f, +0.000171f, +0.000078f}, + {-0.000406f, +0.123751f, +0.084938f, +0.003933f, +0.009525f, -0.007896f, -0.000054f}, + {-0.002507f, -0.050784f, -0.079755f, +0.010591f, +0.019603f, +0.004806f, +0.000238f}, + {+0.001211f, +0.003210f, +0.123704f, +0.005078f, +0.012530f, +0.000861f, -0.000240f}, + {-0.002198f, -0.122685f, +0.004525f, -0.009356f, +0.009948f, +0.002933f, -0.000172f}, + {-0.009420f, -0.096936f, +0.211990f, -0.000631f, +0.024610f, +0.000067f, +0.000227f}, + {-0.003401f, +0.043359f, +0.236137f, -0.016754f, +0.003721f, -0.009061f, +0.000108f}, + {-0.002629f, -0.050970f, -0.171015f, +0.010701f, -0.001236f, +0.008654f, +0.000462f}, + {+0.009391f, +0.075614f, -0.036986f, +0.017209f, -0.013531f, +0.004588f, -0.000450f}, + {+0.010190f, +0.026020f, -0.092489f, +0.018996f, -0.007141f, +0.007424f, +0.000270f}, + {-0.003474f, -0.040283f, +0.090442f, +0.009004f, -0.004342f, -0.014442f, -0.000085f}, + {+0.010671f, -0.021234f, -0.041419f, +0.021963f, -0.017488f, +0.020488f, -0.000125f}, + {-0.000297f, -0.084055f, +0.073590f, -0.011210f, +0.003463f, +0.009384f, -0.000164f}, + {-0.004279f, +0.044600f, +0.008641f, +0.002947f, +0.027023f, -0.005455f, +0.000050f} + }, + { + {-0.000283f, -0.176649f, +0.262566f, -0.014478f, -0.000954f, +0.001308f, -0.000065f}, + {+0.001140f, +0.224468f, -0.279707f, +0.024096f, +0.000047f, -0.001875f, +0.000114f}, + {+0.000295f, -0.043283f, -0.120193f, -0.002250f, -0.006566f, -0.003343f, -0.000115f}, + {-0.000666f, -0.031706f, +0.308527f, +0.002946f, +0.000818f, -0.001236f, -0.000021f}, + {+0.003617f, -0.019505f, -0.143563f, +0.020992f, +0.023490f, -0.001424f, +0.000030f}, + {+0.000505f, +0.065371f, +0.050416f, +0.019406f, +0.013739f, -0.004956f, +0.000166f}, + {-0.000079f, +0.061295f, -0.259588f, +0.019944f, -0.005382f, +0.003509f, +0.000117f}, + {+0.002104f, +0.058949f, -0.059993f, +0.018286f, +0.035136f, -0.004869f, -0.000129f}, + {+0.001987f, +0.057127f, +0.194890f, +0.013423f, -0.011511f, -0.004034f, -0.000400f}, + {-0.001749f, -0.059976f, -0.129299f, -0.005890f, +0.011219f, +0.006091f, +0.000349f}, + {+0.001519f, -0.020751f, +0.128431f, +0.012395f, -0.015072f, -0.001704f, +0.000350f}, + {-0.001715f, -0.003520f, +0.009236f, -0.008621f, +0.014036f, -0.004524f, +0.000320f}, + {-0.010397f, -0.014939f, +0.057907f, +0.006560f, -0.017006f, +0.004021f, -0.000748f}, + {+0.001022f, +0.060447f, -0.104723f, +0.013416f, +0.008510f, -0.003268f, +0.000304f}, + {+0.005057f, +0.086252f, -0.154014f, +0.015645f, +0.017376f, -0.013300f, +0.000642f}, + {+0.005479f, -0.023273f, +0.095430f, +0.015576f, +0.022876f, -0.005860f, +0.000040f} + }, + { + {+0.001675f, -0.061396f, +0.429767f, -0.006398f, -0.000228f, +0.003526f, +0.000023f}, + {+0.000038f, +0.062648f, -0.515535f, +0.008029f, +0.001737f, -0.001547f, +0.000082f}, + {+0.002291f, +0.049399f, +0.003192f, +0.012249f, +0.000654f, +0.000678f, -0.000034f}, + {+0.000593f, -0.108396f, +0.186199f, -0.012697f, +0.003336f, +0.005452f, +0.000123f}, + {-0.002390f, +0.058095f, -0.036001f, +0.006041f, +0.003012f, -0.007234f, -0.000254f}, + {-0.001933f, -0.004195f, -0.056774f, -0.003687f, +0.004092f, -0.006881f, +0.000217f}, + {+0.000593f, +0.099058f, -0.194124f, +0.023991f, -0.002165f, +0.006354f, -0.000012f}, + {+0.001696f, +0.017095f, -0.148208f, -0.004048f, +0.013373f, -0.008460f, -0.000177f}, + {-0.001325f, -0.077202f, -0.002682f, -0.007197f, -0.007521f, +0.006474f, -0.000016f}, + {+0.000736f, +0.051938f, +0.026746f, +0.008682f, +0.008806f, -0.002090f, -0.000530f}, + {-0.005409f, -0.046224f, +0.113326f, +0.016402f, -0.008996f, -0.004761f, +0.000319f}, + {-0.007047f, +0.001884f, +0.012136f, -0.013255f, +0.007585f, -0.013566f, -0.000298f}, + {+0.010596f, +0.004092f, +0.006563f, -0.012092f, -0.004082f, +0.021089f, +0.000426f}, + {-0.008695f, +0.032158f, -0.077474f, +0.007159f, +0.002695f, -0.010826f, -0.000194f}, + {-0.006170f, +0.054185f, -0.187606f, +0.009185f, +0.009767f, -0.019049f, -0.000096f}, + {-0.001578f, -0.028257f, +0.067351f, -0.012794f, +0.006489f, -0.002797f, -0.000065f} + }, + { + {-0.000604f, +0.195551f, +0.046469f, +0.024960f, +0.000124f, +0.002789f, +0.000055f}, + {-0.000690f, -0.220876f, -0.080732f, -0.034526f, +0.002081f, +0.002082f, -0.000149f}, + {+0.000246f, +0.043891f, +0.048838f, -0.000487f, -0.000343f, +0.001784f, +0.000016f}, + {-0.000835f, +0.096167f, -0.135430f, +0.014028f, +0.001033f, +0.010401f, -0.000056f}, + {-0.000208f, -0.005067f, +0.068234f, -0.003921f, -0.004117f, -0.005521f, +0.000126f}, + {-0.000916f, -0.048030f, -0.028754f, -0.003326f, -0.001391f, +0.000076f, -0.000235f}, + {+0.001355f, -0.130889f, +0.158329f, -0.015536f, +0.005834f, +0.000347f, -0.000134f}, + {+0.000772f, -0.014933f, -0.083088f, -0.015662f, -0.005534f, -0.000822f, +0.000089f}, + {+0.000775f, +0.009184f, -0.151945f, +0.000406f, +0.003723f, +0.001745f, +0.000332f}, + {+0.001608f, -0.007143f, +0.122931f, -0.000855f, -0.002881f, +0.002170f, -0.000072f}, + {-0.000702f, +0.045072f, -0.040098f, +0.018823f, +0.001317f, -0.002269f, -0.000285f}, + {+0.004532f, +0.032658f, -0.089350f, +0.008837f, -0.001128f, -0.005456f, -0.000214f}, + {+0.002363f, +0.019083f, +0.016835f, -0.018529f, -0.001377f, +0.016870f, +0.000540f}, + {+0.001715f, -0.134043f, +0.119796f, -0.009102f, +0.006833f, -0.014270f, -0.000027f}, + {-0.000241f, -0.081470f, -0.041657f, +0.000811f, -0.002552f, -0.004671f, -0.000698f}, + {-0.002448f, +0.073265f, -0.102780f, +0.006728f, -0.005038f, +0.008304f, -0.000118f} + }, + { + {-0.001452f, -0.069169f, -0.359772f, -0.004528f, -0.001473f, -0.001174f, -0.000052f}, + {+0.000298f, +0.104548f, +0.415506f, +0.005346f, +0.002661f, +0.003417f, +0.000022f}, + {-0.004227f, -0.021575f, -0.027481f, -0.005602f, -0.003477f, -0.000211f, +0.000081f}, + {+0.001287f, +0.013519f, -0.267631f, +0.008302f, -0.001317f, +0.004439f, -0.000141f}, + {+0.000359f, -0.000352f, +0.067106f, -0.012917f, -0.006433f, -0.003644f, +0.000143f}, + {+0.004008f, +0.012160f, +0.057113f, +0.006758f, +0.001210f, +0.002980f, -0.000130f}, + {-0.002266f, -0.023397f, +0.318814f, -0.007434f, +0.005449f, -0.001677f, +0.000180f}, + {-0.001788f, +0.018561f, -0.001859f, -0.003902f, -0.003138f, +0.001594f, +0.000177f}, + {+0.000498f, +0.040998f, -0.104388f, +0.007015f, +0.005666f, -0.003054f, -0.000009f}, + {+0.000750f, -0.015717f, +0.104401f, -0.011167f, -0.018971f, +0.000557f, +0.000338f}, + {+0.002290f, -0.018734f, -0.161180f, -0.000199f, +0.006956f, +0.002383f, -0.000251f}, + {+0.002329f, +0.000388f, -0.118224f, +0.001665f, +0.000288f, +0.002715f, +0.000270f}, + {-0.008356f, -0.024500f, +0.022446f, +0.012317f, -0.008248f, -0.005294f, -0.000668f}, + {+0.006958f, -0.022401f, +0.224422f, +0.002575f, +0.012970f, -0.007896f, +0.000296f}, + {+0.006675f, +0.016668f, +0.092843f, -0.004034f, +0.003197f, +0.011486f, +0.000459f}, + {+0.003001f, +0.042559f, -0.167839f, -0.012591f, -0.010475f, +0.006189f, +0.000137f} + }, + { + {+0.001035f, -0.135712f, -0.265067f, -0.014975f, -0.000173f, -0.002689f, -0.000027f}, + {-0.000022f, +0.153794f, +0.337679f, +0.016131f, +0.002264f, +0.001857f, +0.000076f}, + {+0.002408f, -0.029883f, -0.058542f, +0.003685f, -0.004307f, -0.001136f, -0.000028f}, + {-0.001009f, -0.110854f, -0.066337f, -0.007994f, +0.001871f, -0.001869f, +0.000206f}, + {+0.001958f, +0.038357f, -0.009285f, -0.006704f, -0.004883f, +0.003613f, -0.000203f}, + {-0.002126f, +0.034418f, +0.063655f, +0.004958f, +0.005206f, +0.002377f, +0.000286f}, + {+0.000538f, +0.150140f, +0.064965f, +0.004933f, +0.003963f, -0.000065f, +0.000002f}, + {-0.001160f, -0.027758f, +0.059854f, +0.003349f, -0.002280f, +0.003818f, -0.000068f}, + {-0.001370f, -0.078725f, +0.069559f, +0.006628f, -0.004080f, +0.003499f, -0.000321f}, + {-0.005045f, +0.087250f, -0.030052f, -0.009251f, -0.005200f, -0.005087f, +0.000028f}, + {+0.004623f, -0.037497f, -0.117998f, -0.017368f, +0.005325f, +0.002149f, +0.000273f}, + {-0.002264f, -0.112372f, +0.037646f, +0.000037f, +0.001923f, +0.006678f, +0.000193f}, + {+0.001085f, +0.002533f, -0.050740f, +0.020287f, -0.001175f, -0.016779f, -0.000229f}, + {-0.003630f, +0.183327f, +0.014287f, +0.012823f, -0.005434f, +0.009035f, -0.000371f}, + {-0.003395f, +0.010246f, +0.150859f, -0.008983f, +0.010531f, +0.013647f, +0.000481f}, + {-0.000416f, -0.086769f, +0.004870f, -0.014825f, -0.000882f, +0.001829f, +0.000113f} + }, + { + {+0.000645f, +0.154946f, +0.177668f, +0.017072f, +0.000651f, -0.001522f, +0.000072f}, + {+0.000549f, -0.194573f, -0.188311f, -0.025413f, -0.001784f, -0.002119f, -0.000030f}, + {+0.002387f, +0.018045f, +0.004555f, +0.005425f, -0.001933f, +0.000483f, -0.000060f}, + {+0.000284f, +0.072221f, +0.199350f, +0.001255f, -0.006916f, -0.008191f, -0.000017f}, + {-0.002646f, -0.013121f, -0.061521f, +0.004586f, +0.008749f, +0.011041f, +0.000026f}, + {-0.001392f, +0.014040f, +0.018106f, -0.002009f, +0.001377f, -0.001398f, -0.000040f}, + {+0.001216f, -0.089923f, -0.283202f, -0.010597f, +0.000107f, -0.005548f, -0.000176f}, + {+0.001911f, +0.010949f, +0.090459f, +0.006436f, +0.003223f, +0.005766f, -0.000234f}, + {+0.000186f, -0.021096f, +0.146517f, +0.004613f, -0.006003f, +0.005164f, +0.000046f}, + {+0.004900f, +0.001082f, -0.145303f, -0.003824f, +0.005874f, -0.001264f, -0.000130f}, + {-0.006513f, +0.036434f, +0.017113f, -0.008670f, -0.001776f, -0.001766f, +0.000139f}, + {-0.002383f, +0.011656f, +0.199522f, -0.001517f, -0.000917f, +0.006316f, -0.000312f}, + {+0.004072f, -0.017482f, -0.140043f, -0.005490f, +0.003161f, -0.009171f, +0.000809f}, + {-0.003928f, +0.035690f, -0.165301f, +0.017863f, +0.001525f, +0.015105f, -0.000020f}, + {-0.004490f, +0.026473f, +0.158660f, -0.016182f, +0.002051f, +0.001422f, -0.000697f}, + {-0.002701f, +0.021762f, +0.186409f, +0.002465f, +0.003261f, -0.000400f, -0.000186f} + }, + { + {+0.000099f, +0.036368f, +0.371003f, +0.001629f, +0.000185f, -0.000164f, -0.000035f}, + {-0.001027f, -0.021065f, -0.455523f, -0.007009f, +0.000171f, -0.003644f, -0.000031f}, + {-0.002203f, +0.010908f, +0.054143f, -0.006492f, +0.001603f, -0.000076f, +0.000020f}, + {+0.000202f, +0.081447f, +0.185899f, -0.000039f, -0.002519f, -0.009060f, -0.000207f}, + {+0.000145f, -0.040892f, -0.024916f, +0.002845f, +0.007084f, +0.008654f, +0.000149f}, + {+0.000681f, +0.015374f, -0.019466f, +0.006281f, -0.004147f, +0.001144f, -0.000190f}, + {-0.000720f, -0.090186f, -0.294095f, -0.004346f, +0.001360f, -0.006895f, +0.000032f}, + {+0.001250f, +0.048376f, +0.032072f, +0.005694f, +0.004343f, +0.001826f, +0.000175f}, + {+0.001972f, +0.055906f, +0.051458f, -0.008972f, +0.008989f, -0.004482f, +0.000341f}, + {-0.000721f, -0.053054f, -0.080364f, -0.010933f, -0.000804f, +0.005258f, -0.000240f}, + {-0.001755f, -0.008278f, +0.060930f, +0.007833f, -0.006118f, +0.000505f, -0.000186f}, + {+0.002845f, +0.055065f, +0.155770f, -0.013884f, +0.002897f, +0.003665f, -0.000097f}, + {+0.001472f, -0.015073f, -0.108333f, -0.008884f, -0.002637f, +0.002145f, -0.000265f}, + {+0.002067f, -0.074717f, -0.056765f, -0.010752f, +0.008573f, +0.010308f, +0.000507f}, + {+0.004477f, +0.042604f, +0.079819f, -0.009975f, +0.003623f, -0.005897f, -0.000048f}, + {+0.003540f, +0.034868f, +0.173761f, -0.016563f, +0.013425f, -0.007023f, -0.000066f} + }, + { + {-0.002183f, -0.153188f, +0.087452f, -0.017701f, +0.000455f, -0.000059f, -0.000031f}, + {+0.000837f, +0.194734f, -0.137795f, +0.017874f, +0.004064f, -0.001732f, +0.000005f}, + {-0.001557f, -0.009676f, +0.022334f, -0.008279f, +0.003448f, -0.001046f, +0.000008f}, + {-0.000623f, -0.079188f, -0.056711f, -0.015350f, +0.006488f, +0.001018f, +0.000189f}, + {+0.002293f, -0.003889f, +0.025529f, -0.001638f, -0.006470f, -0.003898f, -0.000154f}, + {+0.001846f, -0.009455f, -0.036884f, +0.009081f, -0.004726f, +0.003122f, +0.000129f}, + {-0.001102f, +0.135342f, +0.027798f, +0.014279f, +0.007762f, +0.000259f, +0.000211f}, + {-0.002017f, -0.058553f, -0.096374f, -0.002043f, +0.001398f, -0.003248f, +0.000161f}, + {-0.001923f, -0.019124f, -0.056759f, -0.013113f, +0.012447f, -0.007132f, -0.000136f}, + {-0.002339f, +0.011508f, +0.033382f, +0.007946f, -0.001297f, +0.003215f, +0.000190f}, + {+0.006828f, -0.026842f, +0.004072f, +0.001985f, -0.003739f, +0.003753f, -0.000089f}, + {+0.000656f, -0.067311f, -0.002677f, -0.013922f, -0.003169f, +0.000952f, +0.000271f}, + {-0.006268f, +0.106955f, +0.113991f, +0.011181f, -0.002632f, +0.003434f, -0.000563f}, + {+0.004974f, -0.010018f, +0.065905f, +0.006508f, -0.004051f, -0.007315f, -0.000366f}, + {+0.002011f, -0.084345f, -0.082409f, -0.005323f, +0.003835f, -0.005258f, +0.000564f}, + {-0.001219f, -0.090067f, -0.002658f, -0.027505f, +0.008564f, -0.005530f, +0.000179f} + }, + { + {+0.001676f, +0.080558f, -0.289199f, +0.010856f, -0.001705f, +0.001083f, +0.000061f}, + {-0.000604f, -0.113797f, +0.341125f, -0.013986f, +0.002559f, -0.000854f, +0.000034f}, + {+0.001412f, +0.004029f, -0.029843f, -0.001918f, +0.004280f, -0.001322f, +0.000062f}, + {+0.001059f, +0.017126f, -0.215757f, +0.009036f, -0.003131f, +0.007262f, +0.000030f}, + {-0.002126f, -0.010907f, +0.045035f, -0.009192f, -0.000070f, -0.009903f, +0.000020f}, + {-0.000402f, -0.017331f, -0.008068f, +0.007097f, -0.000818f, +0.000446f, +0.000032f}, + {+0.002552f, -0.019031f, +0.267246f, +0.002794f, +0.003761f, +0.007416f, -0.000074f}, + {-0.001830f, -0.057617f, -0.100520f, +0.002131f, -0.000594f, -0.002920f, -0.000253f}, + {-0.000762f, -0.011768f, -0.059922f, -0.015063f, +0.002708f, -0.001199f, -0.000329f}, + {+0.002450f, -0.031770f, +0.094689f, +0.023282f, +0.000467f, -0.004312f, +0.000416f}, + {-0.000761f, +0.034628f, -0.069799f, +0.000792f, +0.001198f, -0.000138f, +0.000078f}, + {-0.001806f, +0.008081f, -0.111324f, -0.010794f, +0.000375f, -0.004200f, +0.000039f}, + {+0.001363f, -0.031037f, +0.279729f, -0.006910f, -0.003632f, +0.002136f, +0.000578f}, + {-0.004327f, +0.034468f, +0.049016f, +0.013984f, -0.003393f, -0.015626f, -0.000281f}, + {-0.002852f, +0.006131f, -0.177457f, +0.009111f, +0.001002f, -0.000720f, -0.000233f}, + {-0.001818f, +0.009660f, -0.145990f, -0.004769f, -0.003075f, -0.000340f, +0.000041f} + }, + { + {+0.000552f, +0.069003f, -0.301992f, +0.008999f, -0.002406f, +0.001408f, -0.000044f}, + {+0.000802f, -0.083031f, +0.389256f, -0.010430f, +0.003080f, -0.000170f, -0.000017f}, + {+0.001854f, -0.004303f, -0.039738f, -0.002076f, +0.002884f, -0.001064f, -0.000029f}, + {-0.000928f, +0.080110f, -0.113738f, +0.018229f, -0.004586f, +0.006420f, -0.000168f}, + {+0.001017f, -0.018957f, +0.020512f, -0.009990f, +0.000517f, -0.008319f, +0.000130f}, + {-0.002904f, +0.018312f, +0.036890f, +0.007636f, +0.002542f, -0.000516f, -0.000078f}, + {-0.002954f, -0.060368f, +0.217523f, +0.002451f, +0.005655f, +0.004182f, -0.000317f}, + {+0.003919f, +0.063163f, +0.040871f, +0.006505f, -0.000581f, -0.000746f, +0.000040f}, + {+0.002405f, +0.015869f, -0.003557f, +0.001227f, +0.001181f, +0.003627f, +0.000263f}, + {-0.001198f, -0.012221f, +0.089063f, +0.001056f, -0.001660f, -0.007526f, -0.000479f}, + {-0.005324f, +0.011776f, -0.070950f, +0.005147f, -0.003184f, -0.000378f, +0.000142f}, + {-0.000051f, +0.028299f, -0.085723f, -0.005212f, -0.001858f, -0.007443f, -0.000157f}, + {+0.004306f, -0.142068f, +0.110900f, -0.013176f, -0.003157f, -0.002452f, +0.000049f}, + {-0.002413f, -0.017599f, -0.058088f, -0.006858f, +0.002731f, -0.002117f, +0.000497f}, + {-0.002874f, +0.105920f, -0.045074f, +0.010682f, +0.002132f, +0.002632f, -0.000206f}, + {+0.002079f, +0.058269f, -0.081409f, +0.010848f, -0.004241f, +0.001114f, -0.000140f} + }, + { + {-0.000418f, -0.142873f, +0.039874f, -0.019991f, +0.002205f, -0.000747f, -0.000005f}, + {-0.000936f, +0.189643f, -0.031282f, +0.020851f, -0.005506f, +0.005310f, -0.000013f}, + {-0.001308f, -0.006482f, -0.008509f, -0.006678f, -0.002770f, +0.003622f, -0.000135f}, + {+0.000352f, -0.070885f, +0.103936f, +0.002558f, +0.003246f, -0.000103f, +0.000099f}, + {-0.000887f, +0.045238f, -0.048190f, -0.008634f, -0.007525f, +0.000260f, -0.000172f}, + {+0.002007f, -0.012279f, +0.056322f, +0.008316f, +0.007235f, -0.004635f, +0.000040f}, + {+0.001704f, +0.071575f, -0.010837f, +0.019662f, +0.006908f, +0.000040f, +0.000304f}, + {-0.000579f, +0.012185f, +0.136975f, -0.003098f, -0.002671f, +0.000450f, +0.000120f}, + {-0.000783f, +0.012147f, +0.013944f, -0.004558f, -0.003031f, +0.006334f, +0.000232f}, + {-0.000405f, +0.033333f, +0.004358f, +0.008655f, -0.005913f, -0.003262f, -0.000314f}, + {+0.001823f, -0.042713f, -0.011527f, +0.005063f, -0.002103f, -0.001502f, -0.000065f}, + {+0.000974f, -0.024120f, +0.004097f, -0.007567f, -0.008038f, -0.004120f, -0.000156f}, + {-0.001640f, +0.093084f, -0.198061f, +0.003093f, -0.002683f, +0.001119f, -0.000406f}, + {+0.003567f, -0.007486f, -0.098988f, -0.008744f, +0.000657f, +0.004123f, -0.000005f}, + {+0.004574f, -0.078397f, +0.170549f, +0.002466f, -0.001846f, +0.002619f, +0.000132f}, + {+0.000617f, -0.007229f, +0.037692f, -0.007070f, -0.006347f, +0.005576f, -0.000078f} + }, + { + {-0.001486f, +0.056882f, +0.344270f, +0.002981f, +0.002487f, +0.000072f, +0.000054f}, + {+0.000547f, -0.073464f, -0.437965f, -0.006803f, -0.006483f, +0.002618f, +0.000013f}, + {-0.002208f, +0.014125f, +0.020584f, -0.002492f, -0.000969f, +0.003592f, +0.000109f}, + {-0.000305f, -0.016927f, +0.185175f, -0.003380f, -0.001318f, -0.002537f, +0.000023f}, + {+0.000351f, +0.029189f, -0.073389f, -0.000284f, -0.000493f, +0.005939f, +0.000055f}, + {+0.001499f, -0.034879f, +0.021228f, -0.004371f, +0.002644f, -0.004411f, +0.000007f}, + {+0.000897f, -0.046281f, -0.193165f, -0.000062f, -0.001114f, -0.004264f, +0.000213f}, + {-0.002752f, -0.051084f, +0.069214f, +0.001396f, +0.003500f, -0.000286f, -0.000111f}, + {-0.001121f, -0.015804f, -0.019775f, -0.002359f, -0.004389f, +0.000835f, -0.000349f}, + {+0.001148f, -0.019967f, -0.074378f, +0.001520f, -0.002356f, +0.007542f, +0.000708f}, + {+0.003015f, -0.000567f, +0.032040f, +0.000478f, -0.007053f, -0.003880f, -0.000168f}, + {-0.000599f, +0.031243f, +0.090853f, +0.001066f, -0.003609f, +0.001923f, +0.000219f}, + {-0.002584f, +0.058926f, -0.270418f, -0.007516f, +0.005804f, +0.009528f, +0.000212f}, + {+0.001291f, +0.042693f, -0.027401f, -0.014999f, -0.004171f, +0.003174f, -0.000358f}, + {-0.000365f, -0.070750f, +0.194323f, -0.005364f, -0.011038f, -0.002927f, +0.000039f}, + {-0.002865f, +0.017053f, +0.089613f, +0.000603f, -0.002832f, +0.006954f, +0.000143f} + }, + { + {+0.001162f, +0.086726f, +0.283216f, +0.007174f, +0.000292f, +0.001000f, -0.000057f}, + {+0.000280f, -0.113299f, -0.375196f, -0.009194f, -0.001746f, -0.000631f, -0.000011f}, + {+0.001584f, -0.002657f, +0.025271f, -0.001278f, +0.002584f, +0.000574f, +0.000151f}, + {+0.000612f, +0.053497f, +0.079626f, +0.000480f, +0.000018f, -0.003410f, -0.000053f}, + {+0.002124f, -0.011394f, -0.030926f, -0.002382f, +0.003441f, +0.005642f, +0.000133f}, + {-0.001314f, +0.010118f, -0.036750f, +0.003806f, -0.004747f, +0.000553f, -0.000052f}, + {-0.001831f, -0.043275f, -0.185257f, -0.005098f, -0.001017f, -0.000283f, -0.000498f}, + {+0.000841f, +0.040701f, -0.070294f, +0.003830f, +0.009401f, -0.002752f, +0.000077f}, + {+0.000100f, -0.008475f, -0.031005f, -0.000708f, +0.001122f, -0.005186f, -0.000069f}, + {+0.001130f, -0.030959f, -0.056257f, -0.001556f, -0.000116f, +0.010873f, +0.000014f}, + {+0.000403f, +0.010182f, +0.025332f, +0.003832f, -0.009692f, -0.002446f, +0.000086f}, + {+0.000803f, +0.016374f, +0.101303f, +0.002464f, -0.006149f, +0.004906f, +0.000224f}, + {-0.000197f, -0.109631f, -0.065418f, -0.005555f, +0.002254f, +0.006250f, +0.000073f}, + {-0.002052f, +0.011617f, +0.030519f, -0.011538f, -0.006873f, +0.002073f, +0.000080f}, + {-0.001077f, +0.085345f, +0.002855f, +0.007450f, -0.007853f, -0.001185f, +0.000097f}, + {+0.002250f, +0.036761f, +0.046050f, +0.003265f, +0.006503f, +0.000120f, +0.000142f} + }, + { + {+0.000832f, -0.158853f, -0.072678f, -0.012837f, -0.001243f, +0.000766f, +0.000001f}, + {-0.001371f, +0.196755f, +0.090338f, +0.015963f, +0.002640f, +0.000092f, +0.000018f}, + {+0.002755f, -0.004994f, +0.024145f, +0.002847f, -0.001298f, -0.004721f, -0.000196f}, + {+0.000183f, -0.068683f, -0.100662f, -0.001292f, +0.000276f, -0.003596f, +0.000038f}, + {-0.004483f, +0.020981f, +0.050436f, +0.005530f, +0.012253f, +0.005578f, -0.000204f}, + {-0.001815f, +0.002810f, -0.053671f, -0.002732f, -0.007735f, +0.004239f, +0.000035f}, + {-0.001514f, +0.072829f, -0.017583f, -0.007325f, +0.002548f, +0.007120f, +0.000100f}, + {+0.003140f, +0.020486f, -0.131828f, -0.003411f, +0.006628f, -0.002774f, -0.000011f}, + {+0.001742f, +0.019912f, -0.000260f, +0.004598f, +0.007668f, -0.001955f, +0.000329f}, + {-0.005335f, +0.019705f, +0.047513f, +0.006920f, +0.004015f, +0.005271f, -0.000701f}, + {-0.005474f, -0.005480f, +0.023623f, +0.006954f, -0.001571f, +0.004400f, +0.000139f}, + {-0.000204f, -0.046146f, +0.019690f, +0.000994f, -0.009635f, +0.000428f, -0.000413f}, + {+0.004339f, +0.007559f, +0.127446f, +0.001487f, -0.005782f, -0.002564f, -0.000124f}, + {-0.002984f, -0.018528f, +0.001355f, -0.007831f, -0.002702f, +0.004698f, +0.000223f}, + {-0.001367f, +0.031137f, -0.113810f, +0.002510f, -0.008233f, -0.002569f, -0.000155f}, + {+0.000009f, -0.026245f, -0.034477f, +0.004931f, +0.007176f, -0.005186f, -0.000238f} + }, + { + {-0.000477f, +0.058490f, -0.374545f, -0.004159f, +0.002739f, -0.001094f, +0.000053f}, + {+0.002198f, -0.090787f, +0.515343f, -0.019512f, +0.011118f, -0.002760f, -0.000006f}, + {-0.003536f, +0.014800f, +0.004465f, +0.015900f, -0.007941f, -0.004530f, -0.000120f}, + {-0.002066f, +0.010520f, -0.229451f, +0.023897f, -0.008281f, -0.000987f, -0.000047f}, + {+0.003822f, -0.045322f, +0.163451f, -0.029821f, +0.027772f, -0.003256f, +0.000066f}, + {+0.001898f, -0.027443f, -0.009605f, -0.016147f, -0.003770f, +0.003937f, +0.000066f}, + {+0.006181f, -0.053430f, +0.182900f, -0.048805f, +0.021820f, +0.000734f, +0.000402f}, + {-0.003572f, +0.004723f, -0.113184f, +0.021852f, -0.015940f, +0.005627f, -0.000124f}, + {-0.000782f, +0.015335f, +0.005219f, +0.010880f, +0.004732f, +0.003112f, -0.000067f}, + {+0.006371f, -0.061427f, +0.195453f, -0.054114f, +0.027990f, -0.010717f, +0.000260f}, + {+0.002273f, -0.021317f, +0.031278f, -0.003656f, +0.010351f, -0.000120f, -0.000050f}, + {-0.002561f, +0.012507f, -0.081773f, +0.021758f, -0.012853f, -0.001867f, -0.000061f}, + {-0.001484f, -0.021192f, +0.210492f, -0.022630f, +0.009588f, -0.011400f, +0.000044f}, + {+0.005245f, -0.017676f, -0.015155f, -0.024154f, +0.011647f, +0.000569f, -0.000003f}, + {-0.000187f, -0.011239f, -0.111629f, +0.029530f, -0.019611f, -0.001593f, -0.000139f}, + {-0.001637f, -0.009739f, -0.067653f, +0.013129f, +0.001334f, -0.008061f, -0.000131f} + }, + { + {-0.001659f, +0.077353f, -0.359886f, -0.001342f, +0.003150f, -0.002566f, -0.000035f}, + {-0.001743f, -0.095489f, +0.538290f, -0.007895f, +0.005864f, -0.004758f, -0.000015f}, + {+0.000199f, -0.021824f, -0.059806f, +0.003881f, -0.005303f, +0.002246f, +0.000274f}, + {+0.002843f, +0.025276f, -0.232757f, +0.006919f, -0.005946f, +0.005166f, +0.000025f}, + {-0.001000f, -0.042449f, +0.207087f, -0.002790f, +0.014255f, -0.008316f, +0.000140f}, + {+0.000864f, +0.019677f, +0.065963f, -0.005015f, +0.000565f, +0.000970f, -0.000100f}, + {-0.006272f, +0.011725f, +0.307474f, -0.022937f, +0.016682f, -0.012514f, -0.000292f}, + {+0.000891f, +0.038792f, -0.076724f, +0.005785f, -0.013845f, +0.007378f, +0.000127f}, + {-0.001574f, +0.009977f, -0.015642f, -0.004639f, -0.000740f, -0.000203f, -0.000226f}, + {-0.002378f, -0.068006f, +0.252407f, -0.007752f, +0.019800f, -0.013024f, +0.000522f}, + {+0.004302f, -0.060260f, -0.005996f, +0.003943f, +0.005945f, +0.002528f, -0.000155f}, + {+0.003991f, -0.015204f, -0.149872f, +0.006936f, -0.007406f, +0.005552f, +0.000438f}, + {-0.003479f, -0.031918f, +0.202480f, -0.003236f, +0.010951f, -0.010456f, +0.000030f}, + {-0.001985f, +0.025675f, +0.051263f, -0.016015f, +0.009638f, -0.007087f, -0.000243f}, + {+0.005351f, -0.015965f, -0.094735f, +0.021303f, -0.013086f, +0.009584f, +0.000288f}, + {+0.002121f, -0.032597f, -0.093402f, +0.010396f, -0.001090f, +0.000499f, +0.000356f} + }, + { + {+0.001361f, -0.127216f, -0.096953f, +0.006235f, -0.000180f, -0.000731f, -0.000024f}, + {+0.000077f, +0.185659f, +0.165622f, -0.007882f, -0.002327f, -0.000515f, +0.000009f}, + {+0.000798f, +0.001405f, -0.110977f, +0.003087f, +0.000336f, +0.002285f, +0.000037f}, + {-0.001371f, -0.069821f, -0.106352f, +0.006433f, +0.001232f, +0.002833f, +0.000059f}, + {-0.000676f, +0.076651f, +0.074758f, -0.008439f, -0.001331f, -0.000214f, -0.000188f}, + {-0.001012f, -0.000045f, +0.101569f, +0.000762f, +0.000644f, -0.001165f, -0.000031f}, + {+0.001504f, +0.068991f, +0.219465f, -0.002619f, -0.002215f, -0.004299f, -0.000189f}, + {+0.000708f, -0.054030f, +0.019772f, +0.009350f, +0.001699f, -0.000302f, +0.000084f}, + {+0.001417f, -0.007861f, -0.018247f, +0.005171f, -0.001109f, -0.001575f, +0.000109f}, + {-0.001702f, +0.108115f, +0.056674f, -0.007191f, -0.000679f, +0.001209f, -0.000390f}, + {-0.003820f, +0.028678f, -0.094978f, -0.001056f, +0.001138f, +0.002897f, +0.000028f}, + {-0.001163f, -0.013941f, -0.146232f, +0.003691f, +0.002281f, +0.002873f, -0.000110f}, + {+0.001835f, +0.058948f, +0.092899f, -0.010727f, -0.001995f, -0.000419f, -0.000068f}, + {-0.000383f, +0.011179f, +0.080862f, -0.000626f, -0.001516f, -0.003705f, -0.000018f}, + {-0.004888f, -0.032976f, -0.033844f, +0.002714f, +0.003106f, +0.003558f, +0.000045f}, + {-0.001851f, -0.003757f, -0.114020f, +0.002867f, +0.000714f, +0.003783f, +0.000001f} + }, + { + {+0.000989f, +0.092433f, +0.193494f, -0.016545f, -0.001036f, +0.000893f, +0.000031f}, + {+0.000902f, -0.141939f, -0.265388f, +0.024296f, +0.001144f, +0.001844f, +0.000003f}, + {+0.001383f, -0.000237f, -0.122476f, -0.000540f, +0.001285f, +0.001055f, -0.000304f}, + {-0.000497f, +0.058598f, +0.045853f, -0.014865f, -0.000634f, +0.000463f, -0.000091f}, + {+0.000237f, -0.057564f, -0.087896f, +0.015305f, -0.001272f, +0.001760f, +0.000039f}, + {-0.001374f, -0.003361f, +0.091147f, -0.000960f, +0.000406f, -0.001710f, +0.000148f}, + {+0.001943f, -0.066809f, +0.042081f, +0.008400f, -0.000093f, +0.002768f, +0.000282f}, + {-0.000153f, +0.028003f, +0.111273f, -0.008248f, +0.001235f, -0.003749f, -0.000175f}, + {+0.000675f, +0.002884f, -0.010918f, -0.003694f, -0.000404f, -0.000614f, +0.000132f}, + {+0.001418f, -0.072420f, -0.180948f, +0.017214f, +0.000992f, +0.005319f, -0.000293f}, + {-0.001484f, -0.001291f, -0.146812f, +0.001551f, -0.002710f, -0.000106f, +0.000206f}, + {-0.002004f, +0.023206f, -0.102482f, -0.004154f, +0.000028f, -0.001722f, -0.000309f}, + {+0.002826f, -0.051123f, -0.022162f, +0.015905f, +0.000248f, +0.005517f, +0.000008f}, + {-0.000743f, -0.005847f, +0.051339f, -0.003006f, +0.000343f, +0.000305f, +0.000318f}, + {-0.001312f, +0.033335f, +0.026403f, -0.004254f, +0.000299f, -0.002144f, -0.000310f}, + {+0.000777f, +0.010567f, -0.110591f, +0.000664f, +0.001107f, +0.002352f, -0.000367f} + }, + { + {-0.001081f, -0.033814f, +0.333833f, +0.015580f, -0.000169f, +0.001418f, +0.000020f}, + {-0.000068f, +0.051968f, -0.486920f, -0.018057f, +0.001446f, +0.002909f, +0.000020f}, + {-0.001231f, -0.003720f, -0.105259f, +0.003104f, +0.000408f, -0.000534f, +0.000068f}, + {+0.000669f, -0.025095f, +0.126683f, +0.013011f, +0.000378f, -0.001754f, +0.000001f}, + {+0.000431f, +0.024471f, -0.168776f, -0.013940f, -0.000659f, +0.001756f, +0.000118f}, + {+0.001220f, +0.006562f, +0.066045f, -0.001255f, +0.000672f, -0.001593f, -0.000055f}, + {-0.000638f, +0.032380f, -0.077154f, -0.011244f, -0.002050f, +0.006869f, +0.000080f}, + {-0.000384f, -0.003919f, +0.154252f, +0.002162f, -0.000624f, -0.004539f, -0.000060f}, + {-0.000933f, -0.004213f, -0.005919f, +0.002857f, -0.000013f, +0.001095f, -0.000087f}, + {+0.000897f, +0.024730f, -0.295271f, -0.014868f, +0.000581f, +0.004478f, +0.000366f}, + {+0.002205f, -0.007868f, -0.149414f, +0.001464f, +0.001968f, -0.002619f, -0.000072f}, + {+0.000856f, -0.018526f, -0.060893f, +0.004704f, +0.000041f, -0.005169f, +0.000105f}, + {-0.001868f, +0.025649f, -0.086705f, -0.011873f, -0.000399f, +0.008170f, +0.000137f}, + {+0.000887f, +0.002393f, +0.005593f, +0.004599f, +0.000139f, +0.003740f, -0.000067f}, + {+0.003181f, -0.002560f, +0.063703f, -0.002038f, -0.001140f, -0.005416f, +0.000026f}, + {+0.000621f, -0.004432f, -0.093619f, +0.002450f, +0.000816f, +0.000256f, +0.000136f} + }, + { + {-0.000993f, -0.001761f, +0.290470f, -0.026998f, +0.004346f, +0.001346f, -0.000039f}, + {-0.000907f, +0.008888f, -0.442379f, +0.025931f, -0.005447f, +0.002552f, -0.000039f}, + {-0.001503f, +0.012850f, -0.084634f, -0.005522f, -0.001963f, -0.000167f, +0.000255f}, + {+0.000250f, +0.003902f, +0.108970f, -0.022510f, +0.001247f, -0.002167f, +0.000089f}, + {-0.000174f, -0.001806f, -0.141803f, +0.020639f, -0.002673f, +0.000809f, -0.000112f}, + {+0.001312f, -0.013144f, +0.050638f, +0.007456f, +0.001478f, -0.001569f, -0.000104f}, + {-0.001499f, -0.008388f, -0.082956f, +0.019708f, -0.001680f, +0.005721f, -0.000262f}, + {-0.000041f, -0.001863f, +0.127396f, -0.012108f, +0.001411f, -0.002508f, +0.000239f}, + {-0.000715f, +0.006113f, -0.013908f, -0.011484f, +0.000460f, +0.001411f, -0.000095f}, + {-0.000981f, +0.002577f, -0.248744f, +0.018853f, -0.004160f, +0.002225f, +0.000118f}, + {+0.001352f, +0.005720f, -0.121014f, -0.004489f, +0.000186f, -0.003461f, -0.000201f}, + {+0.001794f, +0.007883f, -0.040311f, -0.006885f, -0.000317f, -0.004274f, +0.000273f}, + {-0.002392f, -0.002476f, -0.074256f, +0.022144f, -0.001551f, +0.006133f, -0.000150f}, + {+0.001088f, -0.008842f, -0.006752f, +0.003464f, -0.000302f, +0.002836f, -0.000315f}, + {+0.001092f, -0.012713f, +0.072873f, +0.008050f, +0.000423f, -0.003892f, +0.000312f}, + {-0.000911f, +0.006864f, -0.069290f, -0.001134f, -0.000822f, +0.000026f, +0.000265f} + } +}; + +const float FASTCONV_HRIR_latency_s = 0.000666667f; +const float leftHRIRReal[BINAURAL_CONVBANDS][15][7]= +{ + { + {+0.331798f, +0.500334f, +0.042057f, -0.000623f, -0.000260f}, + {+0.065097f, +0.755993f, -0.042308f, -0.016140f, -0.000353f}, + {+0.268829f, +0.563281f, -0.027980f, +0.012635f, +0.000264f}, + {+0.308263f, +0.392544f, +0.075435f, +0.008861f, +0.000454f}, + {+0.017153f, +0.659896f, +0.043215f, -0.004248f, -0.000129f}, + {+0.340040f, +0.406891f, +0.099327f, +0.003281f, -0.000099f}, + {-0.002799f, +0.683738f, +0.064228f, -0.001971f, -0.000057f}, + {+0.359042f, +0.428800f, +0.081790f, -0.007190f, -0.000119f}, + {-0.005600f, +0.687288f, +0.073367f, +0.002388f, +0.000003f}, + {+0.292356f, +0.555445f, +0.036102f, -0.000529f, +0.000197f}, + {+0.099474f, +0.796217f, -0.032809f, +0.002997f, +0.000211f}, + {+0.307282f, +0.477407f, +0.075166f, -0.004779f, -0.000155f}, + {+0.013605f, +0.738918f, +0.023012f, +0.000843f, -0.000001f}, + {+0.281091f, +0.465219f, +0.066896f, -0.000299f, -0.000035f}, + {+0.042794f, +0.706213f, -0.002995f, +0.001494f, +0.000098f} + }, + { + {-0.353458f, -0.509988f, -0.056420f, -0.009429f, +0.000346f}, + {-0.155972f, +0.435567f, +0.001696f, +0.019851f, +0.000455f}, + {-0.299702f, -0.296454f, -0.171587f, -0.015118f, -0.000334f}, + {-0.384303f, -0.695188f, -0.062512f, -0.004920f, -0.000588f}, + {-0.049007f, +0.499063f, -0.006955f, +0.004572f, +0.000162f}, + {-0.410084f, -0.744388f, -0.042671f, -0.008434f, +0.000144f}, + {+0.009096f, +0.553377f, -0.035706f, +0.002161f, +0.000077f}, + {-0.422846f, -0.754362f, -0.007868f, +0.009061f, +0.000145f}, + {+0.017509f, +0.502285f, -0.095304f, -0.005007f, -0.000002f}, + {-0.305138f, -0.315719f, -0.007297f, +0.004583f, -0.000275f}, + {-0.207618f, +0.197622f, -0.120143f, -0.001519f, -0.000281f}, + {-0.364761f, -0.491207f, +0.031861f, +0.003380f, +0.000205f}, + {-0.036080f, +0.561553f, -0.077514f, -0.000495f, +0.000002f}, + {-0.350716f, -0.469227f, -0.004416f, -0.001014f, +0.000046f}, + {-0.110284f, +0.421449f, -0.065919f, +0.000908f, -0.000125f} + }, + { + {-0.323485f, -0.469909f, -0.145194f, +0.023185f, +0.000138f}, + {+0.148398f, -0.113536f, +0.104268f, +0.006075f, +0.000209f}, + {-0.242438f, -0.242764f, -0.307269f, -0.009509f, -0.000170f}, + {-0.215862f, -0.934866f, -0.055111f, -0.015314f, -0.000266f}, + {+0.072808f, +0.267881f, +0.028250f, +0.003545f, +0.000085f}, + {-0.250359f, -0.928708f, -0.097139f, +0.005263f, +0.000033f}, + {-0.016120f, +0.376941f, +0.115286f, +0.001385f, +0.000029f}, + {-0.277575f, -0.914671f, -0.028803f, +0.004826f, +0.000085f}, + {-0.028977f, +0.238147f, +0.130431f, +0.004028f, -0.000005f}, + {-0.313614f, -0.321544f, +0.015716f, -0.005124f, -0.000079f}, + {+0.128859f, -0.535717f, +0.113963f, -0.002797f, -0.000111f}, + {-0.248008f, -0.585440f, -0.019103f, +0.008130f, +0.000084f}, + {+0.050277f, +0.414961f, -0.069970f, -0.002463f, +0.000000f}, + {-0.194842f, -0.628903f, -0.049513f, +0.003377f, +0.000018f}, + {+0.132428f, +0.044930f, -0.036543f, -0.007329f, -0.000060f} + }, + { + {+0.383274f, +0.793256f, +0.075436f, -0.013955f, -0.000379f}, + {-0.039647f, -0.639517f, -0.130290f, -0.009887f, -0.000496f}, + {+0.330408f, +0.714152f, -0.130886f, +0.021668f, +0.000367f}, + {+0.464728f, +0.102297f, +0.053807f, +0.010396f, +0.000640f}, + {-0.083197f, +0.001747f, -0.017367f, -0.005258f, -0.000178f}, + {+0.461299f, +0.192640f, +0.026229f, +0.006396f, -0.000154f}, + {+0.021609f, +0.233041f, -0.037014f, -0.002411f, -0.000083f}, + {+0.456328f, +0.291948f, +0.120073f, -0.012388f, -0.000162f}, + {+0.035294f, +0.008603f, -0.100657f, -0.002303f, +0.000002f}, + {+0.395862f, +0.602011f, -0.015020f, -0.003248f, +0.000289f}, + {+0.061165f, -0.619283f, +0.120603f, -0.004430f, +0.000304f}, + {+0.438346f, +0.519275f, +0.088976f, -0.009090f, -0.000223f}, + {-0.060920f, +0.315700f, -0.014158f, +0.003953f, -0.000002f}, + {+0.405649f, +0.361696f, +0.077054f, -0.002517f, -0.000051f}, + {-0.102961f, -0.285909f, -0.017675f, +0.006341f, +0.000137f} + }, + { + {+0.380999f, +0.888812f, +0.016047f, -0.004923f, -0.000008f}, + {-0.103544f, -0.672790f, -0.058481f, -0.009739f, -0.000056f}, + {+0.258235f, +0.863786f, -0.100813f, -0.011244f, +0.000068f}, + {+0.019551f, +0.781090f, +0.010851f, +0.006905f, +0.000066f}, + {+0.078534f, -0.201752f, -0.033568f, +0.000310f, -0.000037f}, + {+0.115177f, +0.728991f, +0.003059f, -0.010749f, +0.000036f}, + {-0.023252f, +0.186630f, +0.029405f, +0.001392f, +0.000002f}, + {+0.205096f, +0.734110f, +0.017299f, +0.005567f, -0.000046f}, + {-0.033291f, -0.182857f, +0.100533f, +0.002041f, +0.000007f}, + {+0.269261f, +0.640318f, +0.057505f, +0.004206f, -0.000042f}, + {-0.192377f, -0.113959f, -0.034054f, +0.010827f, +0.000006f}, + {+0.140055f, +1.004074f, +0.009885f, +0.000675f, -0.000009f}, + {+0.070707f, +0.204232f, -0.045556f, -0.001847f, +0.000001f}, + {+0.081001f, +0.887772f, +0.009312f, -0.000279f, -0.000000f}, + {+0.036780f, -0.464778f, -0.011711f, +0.000291f, +0.000019f} + }, + { + {-0.586697f, -0.437179f, +0.015096f, +0.006145f, +0.000356f}, + {+0.184187f, -0.212362f, +0.027765f, +0.012735f, +0.000474f}, + {-0.472411f, -0.144599f, -0.068968f, +0.002017f, -0.000362f}, + {-0.365063f, +0.172041f, -0.065739f, -0.002884f, -0.000609f}, + {-0.061936f, -0.266099f, +0.068035f, +0.000129f, +0.000177f}, + {-0.405004f, -0.069937f, -0.057400f, +0.002695f, +0.000130f}, + {+0.021286f, +0.180378f, -0.022901f, -0.001701f, +0.000075f}, + {-0.478583f, -0.301757f, -0.092010f, +0.001413f, +0.000167f}, + {+0.025202f, -0.335796f, -0.076528f, -0.001726f, -0.000004f}, + {-0.470949f, -0.570889f, -0.098235f, +0.004844f, -0.000242f}, + {+0.154976f, +0.395476f, -0.044824f, -0.003029f, -0.000279f}, + {-0.483040f, +0.055164f, -0.071462f, +0.001762f, +0.000209f}, + {-0.074843f, +0.078065f, +0.015553f, -0.000685f, +0.000001f}, + {-0.431734f, +0.088265f, -0.072329f, +0.001071f, +0.000047f}, + {+0.038335f, -0.431382f, +0.011494f, -0.002348f, -0.000133f} + }, + { + {-0.214101f, -0.825087f, -0.066185f, +0.000965f, -0.000103f}, + {-0.146929f, +0.356773f, -0.016581f, +0.002055f, -0.000075f}, + {-0.135459f, -0.651791f, -0.013581f, -0.000703f, +0.000025f}, + {+0.038847f, -0.495569f, +0.025924f, -0.006854f, +0.000105f}, + {+0.038384f, -0.268419f, -0.031251f, +0.002959f, -0.000008f}, + {-0.079337f, -0.571205f, -0.006246f, +0.002621f, -0.000089f}, + {-0.018154f, +0.169210f, +0.024504f, +0.001571f, -0.000026f}, + {-0.136812f, -0.797142f, -0.065244f, -0.001101f, +0.000008f}, + {-0.015818f, -0.422015f, +0.021653f, -0.000024f, -0.000008f}, + {-0.217890f, -0.933082f, -0.059297f, -0.003993f, +0.000128f}, + {+0.012901f, +0.539621f, +0.002585f, -0.004212f, +0.000080f}, + {+0.031699f, -0.731627f, -0.000062f, +0.000473f, -0.000054f}, + {+0.068586f, -0.064970f, -0.028107f, +0.000485f, -0.000001f}, + {+0.082460f, -0.712005f, +0.004234f, -0.000440f, -0.000015f}, + {-0.092772f, -0.245311f, +0.002243f, +0.000286f, +0.000016f} + }, + { + {+0.611398f, +0.574488f, +0.132577f, +0.000536f, -0.000291f}, + {+0.018314f, +0.680755f, +0.032297f, -0.008490f, -0.000404f}, + {+0.551444f, +0.367923f, +0.049629f, -0.001834f, +0.000325f}, + {+0.277871f, -0.172746f, +0.040523f, +0.001132f, +0.000515f}, + {-0.012260f, -0.250758f, +0.023488f, -0.002058f, -0.000162f}, + {+0.376639f, +0.138309f, +0.069777f, +0.000055f, -0.000084f}, + {+0.015823f, +0.153476f, -0.022578f, -0.000055f, -0.000058f}, + {+0.477350f, +0.181888f, +0.060356f, -0.000003f, -0.000162f}, + {+0.007347f, -0.417292f, +0.006805f, +0.001245f, +0.000007f}, + {+0.573429f, +0.375283f, +0.120296f, -0.004646f, +0.000154f}, + {-0.167122f, +0.285438f, +0.017341f, +0.000307f, +0.000221f}, + {+0.377311f, -0.195661f, +0.058278f, +0.000257f, -0.000171f}, + {-0.054353f, -0.159170f, +0.029544f, +0.000892f, -0.000001f}, + {+0.331013f, -0.331514f, +0.046435f, +0.000351f, -0.000038f}, + {+0.106092f, +0.006237f, -0.017713f, -0.000001f, +0.000116f} + }, + { + {+0.170984f, +1.384757f, -0.039040f, -0.003010f, +0.000176f}, + {+0.118777f, +0.611157f, -0.050030f, +0.004000f, +0.000163f}, + {-0.052818f, +1.228959f, +0.011251f, +0.003260f, -0.000096f}, + {-0.019562f, +0.268846f, +0.002354f, +0.004033f, -0.000219f}, + {-0.012139f, -0.228439f, +0.001096f, -0.000637f, +0.000043f}, + {+0.090017f, +0.579117f, +0.021719f, -0.000837f, +0.000114f}, + {-0.014320f, +0.138566f, +0.015571f, -0.000211f, +0.000040f}, + {+0.130034f, +0.743858f, -0.008222f, -0.000663f, +0.000027f}, + {+0.000904f, -0.338203f, -0.037342f, -0.000311f, +0.000008f}, + {+0.115928f, +1.162104f, -0.019791f, +0.003082f, -0.000161f}, + {+0.179739f, -0.173374f, -0.001534f, +0.002899f, -0.000131f}, + {-0.060744f, +0.482829f, -0.012712f, -0.001111f, +0.000094f}, + {+0.037526f, -0.203676f, -0.025646f, -0.000674f, +0.000002f}, + {-0.143971f, +0.383732f, -0.006910f, -0.000214f, +0.000024f}, + {-0.075410f, +0.218852f, +0.013990f, +0.000730f, -0.000042f} + }, + { + {-0.807490f, -0.026691f, -0.098734f, +0.000219f, +0.000207f}, + {-0.184514f, +0.232965f, -0.017518f, +0.000152f, +0.000312f}, + {-0.515784f, +0.462974f, -0.088801f, -0.000046f, -0.000270f}, + {-0.254902f, -0.110250f, -0.053712f, +0.000918f, -0.000391f}, + {+0.029973f, -0.203154f, -0.022236f, +0.000420f, +0.000136f}, + {-0.418541f, -0.227202f, -0.074914f, -0.001208f, +0.000031f}, + {+0.012955f, +0.126129f, -0.020807f, -0.000502f, +0.000036f}, + {-0.572387f, -0.290118f, -0.071671f, -0.000020f, +0.000146f}, + {-0.008802f, -0.217584f, +0.058477f, -0.000886f, -0.000010f}, + {-0.695626f, -0.022757f, -0.084193f, +0.002681f, -0.000062f}, + {-0.042507f, -0.481981f, -0.015185f, +0.000016f, -0.000151f}, + {-0.317770f, +0.077733f, -0.061976f, -0.000151f, +0.000123f}, + {-0.019680f, -0.222079f, +0.017585f, -0.000416f, -0.000000f}, + {-0.217143f, +0.238281f, -0.049335f, -0.000227f, +0.000026f}, + {+0.016830f, +0.312605f, -0.010472f, -0.000204f, -0.000092f} + }, + { + {+0.154237f, -1.440153f, -0.007422f, +0.000459f, -0.000205f}, + {+0.146529f, -0.243723f, +0.016669f, -0.001428f, -0.000203f}, + {+0.206031f, -0.717998f, +0.067591f, -0.001193f, +0.000139f}, + {-0.018748f, -0.492688f, +0.002827f, -0.002315f, +0.000269f}, + {-0.037526f, -0.156993f, +0.015703f, +0.000451f, -0.000066f}, + {-0.076621f, -0.780750f, -0.001540f, +0.000308f, -0.000111f}, + {-0.011713f, +0.116894f, +0.013063f, +0.000119f, -0.000042f}, + {-0.039488f, -1.081391f, -0.009791f, +0.000804f, -0.000055f}, + {+0.014151f, -0.108817f, -0.045635f, +0.000506f, -0.000006f}, + {+0.124238f, -1.252180f, +0.016770f, -0.000493f, +0.000142f}, + {-0.126416f, -0.368535f, -0.013805f, -0.001337f, +0.000144f}, + {+0.031025f, -0.478719f, +0.013134f, +0.000211f, -0.000110f}, + {+0.000166f, -0.219151f, -0.008353f, +0.000282f, -0.000001f}, + {+0.092682f, -0.271438f, +0.022299f, +0.000036f, -0.000027f}, + {+0.042047f, +0.246034f, +0.010276f, -0.000124f, +0.000055f} + }, + { + {+0.717306f, -0.527984f, +0.109622f, +0.001464f, -0.000127f}, + {-0.032423f, -0.508411f, +0.010417f, +0.000540f, -0.000224f}, + {+0.415779f, -0.456457f, +0.054009f, -0.001183f, +0.000210f}, + {+0.323289f, +0.032788f, +0.054080f, -0.001475f, +0.000272f}, + {+0.034110f, -0.082630f, -0.002051f, +0.000151f, -0.000108f}, + {+0.525226f, +0.122988f, +0.067403f, +0.001113f, +0.000012f}, + {+0.010730f, +0.122479f, -0.003677f, +0.000287f, -0.000017f}, + {+0.675564f, +0.033502f, +0.097895f, +0.000381f, -0.000124f}, + {-0.015643f, -0.027790f, +0.041837f, +0.000236f, +0.000012f}, + {+0.654469f, -0.420272f, +0.101476f, -0.002012f, -0.000006f}, + {+0.181211f, +0.085734f, +0.016481f, -0.000081f, +0.000088f}, + {+0.363263f, +0.017311f, +0.051906f, +0.000569f, -0.000078f}, + {+0.018856f, -0.189020f, -0.004446f, +0.000550f, +0.000001f}, + {+0.225816f, -0.087066f, +0.029119f, +0.000432f, -0.000016f}, + {-0.074928f, +0.058140f, -0.007738f, -0.000250f, +0.000068f} + }, + { + {-0.362061f, +1.135109f, -0.040501f, -0.000664f, +0.000201f}, + {-0.086782f, -0.430290f, -0.006001f, +0.001071f, +0.000205f}, + {-0.302951f, +0.619319f, -0.033166f, +0.001127f, -0.000157f}, + {-0.037250f, +0.616935f, -0.022944f, +0.001028f, -0.000268f}, + {-0.021980f, -0.003541f, -0.004845f, -0.000274f, +0.000076f}, + {-0.056679f, +1.012051f, -0.011665f, -0.000109f, +0.000089f}, + {-0.009472f, +0.129217f, +0.010016f, +0.000286f, +0.000036f}, + {-0.163814f, +1.340003f, -0.033016f, -0.000957f, +0.000075f}, + {+0.014795f, +0.031579f, -0.030556f, -0.000016f, +0.000003f}, + {-0.307638f, +1.069995f, -0.048840f, -0.000531f, -0.000092f}, + {-0.074949f, +0.473861f, -0.003401f, +0.000369f, -0.000131f}, + {-0.079753f, +0.685928f, -0.009577f, -0.000077f, +0.000106f}, + {-0.033464f, -0.135518f, +0.013606f, -0.000372f, +0.000000f}, + {-0.099452f, +0.406945f, -0.015669f, -0.000283f, +0.000026f}, + {+0.068420f, -0.159620f, +0.007095f, +0.000110f, -0.000058f} + }, + { + {-0.557376f, +0.814078f, -0.086410f, -0.000931f, +0.000066f}, + {+0.138906f, -0.104979f, -0.002563f, -0.000358f, +0.000157f}, + {-0.280492f, +0.639239f, -0.047732f, +0.001095f, -0.000156f}, + {-0.371195f, +0.156517f, -0.031145f, +0.001354f, -0.000181f}, + {+0.005260f, +0.043405f, +0.000609f, -0.000311f, +0.000081f}, + {-0.561542f, +0.249151f, -0.070323f, -0.000414f, -0.000036f}, + {+0.007629f, +0.121467f, -0.014824f, -0.000379f, +0.000005f}, + {-0.678654f, +0.566827f, -0.087903f, -0.000251f, +0.000099f}, + {-0.013733f, +0.062362f, +0.017595f, -0.000262f, -0.000012f}, + {-0.568064f, +0.667487f, -0.086425f, +0.001295f, +0.000036f}, + {-0.098300f, +0.453623f, +0.000019f, -0.000161f, -0.000046f}, + {-0.402190f, +0.172791f, -0.066290f, -0.000281f, +0.000045f}, + {+0.042361f, -0.071284f, -0.017036f, -0.000408f, -0.000002f}, + {-0.257104f, +0.165575f, -0.034835f, -0.000136f, +0.000009f}, + {-0.027311f, -0.301640f, +0.000667f, +0.000173f, -0.000049f} + }, + { + {+0.476921f, -0.802345f, +0.077189f, +0.000344f, -0.000179f}, + {-0.098992f, +0.234471f, +0.000967f, -0.001112f, -0.000187f}, + {+0.323707f, -0.292306f, +0.044893f, -0.000717f, +0.000157f}, + {+0.179294f, -0.643565f, +0.012366f, -0.000379f, +0.000239f}, + {+0.010870f, +0.036847f, +0.001479f, +0.000007f, -0.000078f}, + {+0.249036f, -0.981186f, +0.030586f, -0.000163f, -0.000062f}, + {-0.006232f, +0.105431f, +0.010918f, -0.000223f, -0.000026f}, + {+0.416847f, -1.110949f, +0.058552f, +0.000570f, -0.000085f}, + {+0.012514f, +0.068559f, -0.014306f, -0.000207f, -0.000000f}, + {+0.467287f, -0.932191f, +0.070050f, +0.000351f, +0.000038f}, + {+0.188152f, +0.044185f, +0.004896f, +0.000176f, +0.000105f}, + {+0.179916f, -0.746327f, +0.038444f, -0.000179f, -0.000093f}, + {-0.046644f, -0.000064f, +0.016904f, +0.000318f, +0.000001f}, + {+0.178760f, -0.505255f, +0.027471f, +0.000200f, -0.000023f}, + {-0.028475f, -0.305656f, +0.002048f, +0.000046f, +0.000055f} + }, + { + {+0.384211f, -0.978413f, +0.043445f, +0.000530f, -0.000029f}, + {+0.005481f, +0.368975f, -0.002721f, +0.000254f, -0.000115f}, + {+0.154591f, -0.550579f, +0.029567f, -0.001141f, +0.000115f}, + {+0.266428f, -0.493827f, +0.040804f, -0.001001f, +0.000125f}, + {-0.021434f, -0.017235f, -0.003173f, +0.000460f, -0.000060f}, + {+0.451732f, -0.667864f, +0.062771f, +0.000016f, +0.000041f}, + {+0.006496f, +0.103409f, -0.001694f, +0.000280f, +0.000000f}, + {+0.506838f, -0.990193f, +0.061492f, +0.000371f, -0.000076f}, + {-0.010071f, +0.065620f, +0.009733f, +0.000546f, +0.000011f}, + {+0.435632f, -0.982401f, +0.064723f, -0.000420f, -0.000031f}, + {-0.121392f, -0.400529f, -0.003585f, +0.000276f, +0.000026f}, + {+0.407029f, -0.424143f, +0.048193f, +0.000134f, -0.000026f}, + {+0.046420f, +0.075076f, -0.022164f, +0.000390f, +0.000001f}, + {+0.224681f, -0.441124f, +0.027691f, +0.000016f, -0.000005f}, + {+0.073686f, -0.182458f, -0.012175f, -0.000094f, +0.000035f} + }, + { + {-0.537444f, +0.391511f, -0.053573f, -0.000309f, +0.000155f}, + {+0.072256f, +0.247522f, +0.011047f, +0.000898f, +0.000166f}, + {-0.268495f, +0.099855f, -0.038956f, +0.000890f, -0.000148f}, + {-0.195179f, +0.204502f, -0.019530f, +0.000276f, -0.000203f}, + {+0.023536f, -0.095547f, +0.007158f, +0.000060f, +0.000074f}, + {-0.345472f, +0.542489f, -0.039670f, +0.000199f, +0.000041f}, + {-0.007874f, +0.129654f, -0.005374f, +0.000048f, +0.000017f}, + {-0.560568f, +0.609885f, -0.057263f, -0.000322f, +0.000088f}, + {+0.006721f, +0.070928f, -0.007401f, -0.000049f, -0.000002f}, + {-0.610684f, +0.636416f, -0.091664f, +0.000136f, +0.000001f}, + {-0.039227f, -0.513525f, -0.001068f, -0.000231f, -0.000082f}, + {-0.333249f, +0.693829f, -0.042608f, +0.000238f, +0.000079f}, + {-0.040836f, +0.145282f, +0.019055f, -0.000387f, -0.000002f}, + {-0.263338f, +0.298008f, -0.031541f, -0.000114f, +0.000020f}, + {-0.089206f, +0.013435f, +0.012733f, -0.000199f, -0.000050f} + }, + { + {-0.160066f, +0.918225f, -0.045394f, -0.000293f, +0.000011f}, + {-0.085209f, +0.001303f, -0.012125f, -0.000292f, +0.000093f}, + {-0.102157f, +0.356092f, -0.019747f, +0.000505f, -0.000086f}, + {-0.174693f, +0.217382f, -0.037036f, +0.000630f, -0.000096f}, + {-0.017226f, -0.166626f, -0.005117f, -0.000479f, +0.000045f}, + {-0.288147f, +0.609002f, -0.054190f, -0.000017f, -0.000036f}, + {+0.008665f, +0.171697f, +0.007680f, -0.000098f, -0.000000f}, + {-0.229723f, +1.072643f, -0.054307f, -0.000488f, +0.000056f}, + {-0.003968f, +0.096005f, +0.018153f, -0.000493f, -0.000010f}, + {-0.212710f, +1.267628f, -0.026077f, -0.000164f, +0.000007f}, + {+0.157771f, -0.227591f, +0.005941f, -0.000300f, -0.000020f}, + {-0.296558f, +0.745264f, -0.041636f, -0.000185f, +0.000018f}, + {+0.030782f, +0.196705f, -0.014807f, -0.000278f, -0.000001f}, + {-0.103485f, +0.531731f, -0.020590f, -0.000071f, +0.000003f}, + {+0.069593f, +0.208136f, -0.005292f, +0.000148f, -0.000027f} + }, + { + {+0.426995f, -0.026160f, +0.075584f, +0.000384f, -0.000138f}, + {+0.033117f, -0.182372f, +0.007361f, -0.000407f, -0.000152f}, + {+0.205232f, -0.119429f, +0.035586f, -0.000437f, +0.000136f}, + {+0.090872f, -0.196225f, +0.015881f, -0.000291f, +0.000176f}, + {+0.004684f, -0.206673f, +0.001813f, -0.000058f, -0.000068f}, + {+0.266047f, -0.253711f, +0.042204f, +0.000078f, -0.000031f}, + {-0.008516f, +0.193605f, +0.007387f, +0.000064f, -0.000011f}, + {+0.445166f, +0.009848f, +0.068320f, +0.000242f, -0.000086f}, + {+0.002194f, +0.127519f, -0.015841f, +0.000173f, +0.000003f}, + {+0.653853f, -0.044366f, +0.083241f, -0.000449f, -0.000016f}, + {-0.143733f, +0.204102f, -0.007498f, +0.000099f, +0.000068f}, + {+0.420542f, -0.349056f, +0.054233f, -0.000061f, -0.000070f}, + {-0.018863f, +0.213641f, +0.019293f, +0.000408f, +0.000002f}, + {+0.232709f, +0.005344f, +0.036305f, +0.000167f, -0.000019f}, + {-0.024286f, +0.323130f, +0.003874f, +0.000198f, +0.000045f} + }, + { + {+0.089909f, -0.571072f, +0.008880f, +0.000372f, -0.000000f}, + {+0.042197f, -0.181663f, +0.000704f, +0.000165f, -0.000080f}, + {+0.122444f, -0.252602f, +0.019305f, -0.000516f, +0.000067f}, + {+0.260724f, +0.080462f, +0.049056f, -0.000542f, +0.000082f}, + {+0.010922f, -0.213934f, -0.007537f, +0.000454f, -0.000035f}, + {+0.297505f, -0.194867f, +0.053446f, +0.000084f, +0.000029f}, + {+0.008776f, +0.169245f, -0.028486f, -0.000010f, -0.000002f}, + {+0.159504f, -0.423362f, +0.035243f, +0.000592f, -0.000041f}, + {-0.000225f, +0.131429f, -0.009064f, +0.000495f, +0.000008f}, + {-0.055924f, -1.120425f, +0.002613f, +0.000280f, +0.000017f}, + {+0.021636f, +0.436573f, -0.003498f, +0.000232f, +0.000020f}, + {+0.129375f, -0.785134f, +0.025534f, +0.000269f, -0.000013f}, + {+0.006982f, +0.197623f, -0.019428f, +0.000152f, -0.000000f}, + {+0.038219f, -0.300110f, +0.006087f, +0.000100f, -0.000002f}, + {-0.026817f, +0.307487f, -0.006434f, -0.000185f, +0.000021f} + }, + { + {-0.339312f, +0.074962f, -0.051465f, -0.000668f, +0.000130f}, + {-0.085777f, +0.000630f, -0.007870f, +0.000280f, +0.000146f}, + {-0.200338f, +0.240178f, -0.031754f, +0.000345f, -0.000127f}, + {-0.072064f, +0.618750f, -0.029586f, +0.000304f, -0.000160f}, + {-0.026013f, -0.198501f, +0.018543f, +0.000031f, +0.000062f}, + {-0.221101f, +0.623925f, -0.048561f, -0.000345f, +0.000030f}, + {-0.010082f, +0.121187f, +0.026049f, -0.000154f, +0.000009f}, + {-0.325381f, +0.349589f, -0.066982f, -0.000444f, +0.000083f}, + {-0.002595f, +0.108691f, +0.015618f, -0.000378f, -0.000004f}, + {-0.514573f, -0.402861f, -0.079237f, +0.000423f, +0.000014f}, + {+0.099695f, +0.316098f, +0.009372f, -0.000014f, -0.000062f}, + {-0.384492f, +0.011534f, -0.056805f, -0.000185f, +0.000066f}, + {+0.004094f, +0.165937f, +0.008745f, -0.000341f, -0.000002f}, + {-0.164069f, +0.005476f, -0.024648f, -0.000226f, +0.000020f}, + {+0.061892f, +0.175063f, +0.001504f, -0.000187f, -0.000042f} + }, + { + {-0.098656f, +0.437384f, -0.016382f, -0.000247f, -0.000011f}, + {+0.065059f, +0.235026f, +0.008783f, -0.000266f, +0.000068f}, + {-0.150935f, +0.318418f, -0.020125f, +0.000567f, -0.000053f}, + {-0.479166f, +0.005919f, -0.062327f, +0.000735f, -0.000072f}, + {+0.037203f, -0.163560f, -0.021631f, -0.000436f, +0.000028f}, + {-0.472890f, +0.243160f, -0.064367f, +0.000012f, -0.000028f}, + {+0.011144f, +0.082078f, -0.020960f, +0.000115f, +0.000004f}, + {-0.303139f, +0.407030f, -0.033834f, -0.000330f, +0.000029f}, + {+0.005275f, +0.088802f, -0.005814f, -0.000347f, -0.000006f}, + {+0.180901f, +0.678258f, +0.023830f, -0.000002f, -0.000032f}, + {-0.124040f, -0.011330f, -0.004638f, -0.000115f, -0.000018f}, + {-0.025939f, +0.562001f, -0.008804f, -0.000193f, +0.000008f}, + {-0.013327f, +0.130330f, +0.001759f, -0.000128f, +0.000001f}, + {-0.054906f, +0.166617f, -0.011465f, -0.000062f, -0.000000f}, + {-0.067066f, -0.006134f, +0.002098f, +0.000244f, -0.000017f} + }, + { + {+0.320866f, -0.218530f, +0.058362f, +0.000559f, -0.000126f}, + {+0.006166f, +0.343773f, -0.005499f, -0.000294f, -0.000144f}, + {+0.255028f, -0.301056f, +0.038086f, -0.000395f, +0.000120f}, + {+0.361545f, -1.309013f, +0.070307f, -0.000422f, +0.000152f}, + {-0.042070f, -0.106963f, +0.016516f, -0.000008f, -0.000058f}, + {+0.455727f, -1.211865f, +0.087077f, +0.000179f, -0.000032f}, + {-0.010654f, +0.051598f, +0.023066f, +0.000137f, -0.000008f}, + {+0.477408f, -0.797872f, +0.082786f, +0.000369f, -0.000079f}, + {-0.006671f, +0.068373f, +0.015541f, +0.000442f, +0.000003f}, + {+0.362855f, +0.403212f, +0.056493f, -0.000231f, -0.000005f}, + {+0.046569f, -0.253576f, -0.003537f, +0.000061f, +0.000060f}, + {+0.290094f, +0.073135f, +0.047603f, +0.000171f, -0.000065f}, + {+0.019451f, +0.092196f, -0.005980f, +0.000308f, +0.000002f}, + {+0.131628f, -0.125669f, +0.025251f, +0.000176f, -0.000020f}, + {+0.042598f, -0.156557f, -0.000577f, +0.000163f, +0.000040f} + }, + { + {+0.115417f, -0.555843f, +0.004505f, +0.000201f, +0.000026f}, + {-0.075253f, +0.241790f, +0.004245f, +0.000388f, -0.000054f}, + {+0.118398f, -0.515206f, +0.013944f, -0.000514f, +0.000042f}, + {+0.462279f, -1.209973f, +0.032503f, -0.000851f, +0.000062f}, + {+0.039535f, -0.038091f, -0.014039f, +0.000458f, -0.000023f}, + {+0.492506f, -1.210168f, +0.036127f, -0.000015f, +0.000032f}, + {+0.009084f, +0.026049f, -0.016775f, -0.000189f, -0.000005f}, + {+0.335910f, -1.043865f, +0.025309f, +0.000109f, -0.000019f}, + {+0.007053f, +0.028506f, -0.029001f, +0.000197f, +0.000006f}, + {-0.209396f, -0.481664f, -0.029573f, -0.000397f, +0.000036f}, + {+0.051079f, -0.232226f, +0.008818f, -0.000021f, +0.000013f}, + {+0.049189f, -0.291808f, +0.012095f, +0.000124f, -0.000000f}, + {-0.022163f, +0.049801f, +0.004489f, +0.000120f, -0.000002f}, + {+0.129999f, -0.125792f, +0.018671f, +0.000033f, +0.000004f}, + {-0.001464f, -0.219720f, -0.003238f, -0.000281f, +0.000013f} + }, + { + {-0.374092f, +0.167831f, -0.047437f, -0.000248f, +0.000121f}, + {+0.089265f, +0.008101f, +0.003220f, +0.000420f, +0.000142f}, + {-0.277419f, +0.075693f, -0.034361f, +0.000382f, -0.000114f}, + {-0.753816f, +0.593618f, -0.075656f, +0.000583f, -0.000146f}, + {-0.030038f, +0.022987f, +0.012744f, -0.000055f, +0.000055f}, + {-0.872319f, +0.834025f, -0.101372f, +0.000238f, +0.000033f}, + {-0.007625f, +0.012494f, +0.008216f, -0.000012f, +0.000009f}, + {-0.818122f, +0.708126f, -0.108543f, -0.000003f, +0.000077f}, + {-0.007349f, -0.013392f, +0.018697f, -0.000404f, -0.000002f}, + {-0.256898f, -0.416364f, -0.039682f, +0.000207f, -0.000001f}, + {-0.080964f, -0.024571f, -0.007134f, -0.000112f, -0.000058f}, + {-0.278977f, +0.233656f, -0.056880f, +0.000052f, +0.000063f}, + {+0.021854f, +0.003552f, -0.004353f, -0.000284f, -0.000001f}, + {-0.208673f, +0.408473f, -0.040386f, -0.000034f, +0.000020f}, + {-0.037961f, -0.179808f, +0.005183f, -0.000145f, -0.000038f} + }, + { + {-0.042237f, +0.656912f, -0.009701f, -0.000238f, -0.000044f}, + {-0.034338f, -0.173588f, -0.006688f, -0.000500f, +0.000038f}, + {-0.090138f, +0.334092f, -0.026473f, +0.000394f, -0.000031f}, + {-0.008439f, +1.693558f, -0.014027f, +0.000600f, -0.000050f}, + {+0.015852f, +0.059753f, -0.008148f, -0.000431f, +0.000019f}, + {-0.054347f, +2.067775f, -0.007313f, -0.000217f, -0.000039f}, + {+0.006434f, +0.012796f, -0.004682f, +0.000161f, +0.000005f}, + {+0.015520f, +1.997278f, +0.014755f, -0.000307f, +0.000011f}, + {+0.007506f, -0.034599f, -0.009095f, -0.000072f, -0.000006f}, + {+0.214043f, +0.306979f, +0.029626f, +0.000432f, -0.000035f}, + {+0.028007f, +0.138657f, +0.001260f, +0.000016f, -0.000007f}, + {-0.117787f, +0.510563f, -0.001680f, -0.000212f, -0.000008f}, + {-0.018621f, -0.040993f, +0.005040f, -0.000117f, +0.000002f}, + {-0.157100f, +0.507113f, -0.009834f, -0.000125f, -0.000007f}, + {+0.059932f, -0.061203f, -0.006185f, +0.000277f, -0.000010f} + }, + { + {+0.350728f, +0.053490f, +0.051079f, +0.000061f, -0.000112f}, + {-0.055343f, -0.147303f, -0.000195f, -0.000468f, -0.000137f}, + {+0.264173f, -0.242538f, +0.053572f, -0.000237f, +0.000109f}, + {+0.698387f, +0.600659f, +0.086640f, -0.000476f, +0.000138f}, + {-0.000679f, +0.065959f, +0.002851f, +0.000063f, -0.000053f}, + {+0.914982f, +0.594809f, +0.107925f, -0.000398f, -0.000028f}, + {-0.005046f, +0.021011f, +0.002443f, -0.000074f, -0.000009f}, + {+0.908394f, +0.659090f, +0.104076f, -0.000152f, -0.000074f}, + {-0.006616f, -0.041999f, +0.008530f, +0.000270f, +0.000002f}, + {+0.160270f, +0.395898f, +0.025961f, -0.000172f, +0.000001f}, + {+0.044182f, +0.106382f, +0.006281f, +0.000190f, +0.000054f}, + {+0.442662f, -0.331872f, +0.060257f, -0.000149f, -0.000059f}, + {+0.012773f, -0.075787f, -0.003315f, +0.000265f, +0.000000f}, + {+0.379945f, -0.304856f, +0.049455f, +0.000017f, -0.000018f}, + {-0.056862f, +0.082167f, +0.007314f, +0.000153f, +0.000036f} + }, + { + {+0.012153f, -0.450064f, +0.007566f, +0.000184f, +0.000059f}, + {+0.121111f, +0.105739f, +0.007673f, +0.000471f, -0.000024f}, + {+0.184762f, -0.381675f, +0.018118f, -0.000313f, +0.000022f}, + {-0.329773f, -0.952298f, -0.024562f, -0.000268f, +0.000039f}, + {-0.011948f, +0.043954f, -0.000567f, +0.000421f, -0.000015f}, + {-0.420755f, -1.412733f, -0.032280f, +0.000429f, +0.000045f}, + {+0.003684f, +0.030620f, +0.000252f, -0.000116f, -0.000005f}, + {-0.511638f, -1.483614f, -0.052171f, +0.000647f, -0.000004f}, + {+0.004497f, -0.053106f, -0.011474f, +0.000072f, +0.000006f}, + {-0.173759f, -0.112610f, -0.023303f, -0.000248f, +0.000035f}, + {-0.060146f, -0.060453f, -0.010041f, +0.000057f, +0.000002f}, + {-0.012206f, -1.032650f, -0.010110f, +0.000297f, +0.000015f}, + {-0.005701f, -0.095076f, +0.000618f, +0.000109f, -0.000002f}, + {-0.000197f, -0.889296f, -0.006036f, +0.000199f, +0.000010f}, + {+0.031812f, +0.189096f, -0.005956f, -0.000264f, +0.000006f} + }, + { + {-0.308921f, +0.056304f, -0.054693f, -0.000123f, +0.000099f}, + {-0.115841f, +0.454362f, -0.009607f, +0.000493f, +0.000130f}, + {-0.468248f, +0.632981f, -0.076258f, -0.000010f, -0.000104f}, + {-0.400691f, -0.806429f, -0.070547f, +0.000137f, -0.000130f}, + {+0.019902f, +0.002281f, -0.001334f, -0.000072f, +0.000051f}, + {-0.561484f, -1.148223f, -0.095621f, +0.000111f, +0.000021f}, + {-0.002929f, +0.038041f, +0.000093f, +0.000104f, +0.000008f}, + {-0.562963f, -1.379756f, -0.082927f, -0.000084f, +0.000071f}, + {-0.002238f, -0.072975f, +0.011177f, -0.000205f, -0.000002f}, + {-0.102439f, -0.221815f, -0.020196f, +0.000101f, +0.000002f}, + {+0.004354f, -0.167075f, +0.005365f, -0.000234f, -0.000047f}, + {-0.540858f, -0.235487f, -0.066321f, -0.000007f, +0.000053f}, + {-0.001012f, -0.099078f, +0.000515f, -0.000243f, +0.000000f}, + {-0.439169f, -0.226555f, -0.052369f, -0.000162f, +0.000015f}, + {+0.003001f, +0.218213f, +0.002283f, -0.000153f, -0.000034f} + }, + { + {-0.081188f, +0.400832f, -0.010403f, +0.000124f, -0.000070f}, + {+0.032349f, +0.694662f, +0.012758f, -0.000446f, +0.000014f}, + {-0.102023f, +1.229099f, +0.009207f, +0.000429f, -0.000013f}, + {+0.347929f, +0.367903f, +0.051025f, +0.000195f, -0.000031f}, + {-0.022184f, -0.047173f, +0.004443f, -0.000402f, +0.000012f}, + {+0.510442f, +0.525808f, +0.072327f, -0.000281f, -0.000047f}, + {+0.002610f, +0.041165f, -0.003133f, +0.000103f, +0.000004f}, + {+0.669928f, +0.515263f, +0.083893f, -0.000680f, -0.000003f}, + {+0.000849f, -0.085438f, -0.000581f, -0.000088f, -0.000006f}, + {+0.101744f, +0.091783f, +0.017192f, +0.000137f, -0.000040f}, + {+0.067239f, -0.080999f, +0.004236f, -0.000134f, +0.000001f}, + {+0.274659f, +1.003091f, +0.034427f, -0.000152f, -0.000020f}, + {+0.006834f, -0.091129f, -0.000945f, -0.000105f, +0.000002f}, + {+0.228304f, +0.784175f, +0.026351f, -0.000099f, -0.000012f}, + {-0.032253f, +0.165928f, +0.001139f, +0.000244f, -0.000004f} + }, + { + {+0.396918f, -0.353503f, +0.073018f, +0.000145f, -0.000087f}, + {+0.089764f, +0.665763f, -0.020998f, -0.000429f, -0.000123f}, + {+0.745929f, -0.045441f, +0.089693f, +0.000119f, +0.000098f}, + {+0.234618f, +0.545507f, +0.039468f, +0.000111f, +0.000121f}, + {+0.018527f, -0.092896f, -0.004776f, +0.000076f, -0.000050f}, + {+0.294897f, +0.855450f, +0.052819f, +0.000226f, -0.000015f}, + {-0.002166f, +0.038716f, +0.004774f, -0.000126f, -0.000007f}, + {+0.194521f, +1.226314f, +0.042565f, +0.000368f, -0.000068f}, + {-0.000019f, -0.074618f, -0.009489f, +0.000190f, +0.000003f}, + {+0.118924f, +0.067017f, +0.021010f, -0.000093f, -0.000004f}, + {-0.081034f, +0.139024f, -0.009034f, +0.000234f, +0.000041f}, + {+0.432071f, +0.753555f, +0.060819f, +0.000167f, -0.000047f}, + {-0.011664f, -0.073753f, +0.003424f, +0.000235f, -0.000000f}, + {+0.318718f, +0.633800f, +0.046975f, +0.000280f, -0.000013f}, + {+0.045018f, +0.063998f, -0.003105f, +0.000140f, +0.000031f} + }, + { + {+0.127577f, -0.781157f, +0.003436f, -0.000401f, +0.000077f}, + {-0.185438f, +0.347292f, +0.027738f, +0.000431f, -0.000007f}, + {-0.338528f, -1.710682f, -0.053558f, -0.000664f, +0.000007f}, + {-0.290346f, -0.267538f, -0.045568f, -0.000347f, +0.000027f}, + {-0.010081f, -0.125578f, +0.001189f, +0.000386f, -0.000010f}, + {-0.437981f, -0.284534f, -0.069222f, -0.000040f, +0.000045f}, + {+0.001693f, +0.032268f, -0.003639f, -0.000084f, -0.000005f}, + {-0.562551f, +0.041789f, -0.085721f, +0.000415f, +0.000009f}, + {-0.001220f, -0.049868f, +0.009105f, +0.000117f, +0.000006f}, + {-0.056836f, -0.200124f, -0.011607f, -0.000196f, +0.000048f}, + {+0.014212f, +0.289512f, +0.004929f, +0.000179f, -0.000001f}, + {-0.459556f, -0.619782f, -0.062717f, -0.000131f, +0.000023f}, + {+0.014738f, -0.050287f, -0.006832f, +0.000096f, -0.000002f}, + {-0.352434f, -0.403959f, -0.049061f, -0.000107f, +0.000013f}, + {-0.038854f, -0.040374f, +0.004775f, -0.000223f, +0.000003f} + }, + { + {-0.672441f, +0.461693f, -0.106438f, +0.000019f, +0.000079f}, + {+0.203018f, -0.123894f, -0.025192f, +0.000369f, +0.000119f}, + {-0.670572f, -1.221467f, -0.075011f, +0.000089f, -0.000092f}, + {-0.198726f, -0.405927f, -0.034209f, -0.000080f, -0.000113f}, + {-0.000441f, -0.139722f, +0.002901f, -0.000086f, +0.000048f}, + {-0.200203f, -0.651588f, -0.036520f, -0.000303f, +0.000014f}, + {-0.001617f, +0.026895f, +0.002212f, +0.000129f, +0.000007f}, + {-0.025090f, -0.786071f, -0.013678f, -0.000386f, +0.000067f}, + {+0.002914f, -0.030011f, -0.007149f, -0.000236f, -0.000003f}, + {-0.196100f, +0.020016f, -0.033192f, +0.000220f, +0.000004f}, + {+0.081825f, +0.202685f, +0.002109f, -0.000238f, -0.000037f}, + {-0.214693f, -0.997978f, -0.031905f, -0.000100f, +0.000043f}, + {-0.015355f, -0.026466f, +0.007870f, -0.000233f, +0.000001f}, + {-0.141519f, -0.731019f, -0.021460f, -0.000220f, +0.000012f}, + {+0.019088f, -0.106339f, -0.005835f, -0.000125f, -0.000029f} + }, + { + {+0.105382f, +1.702756f, +0.047818f, +0.000264f, -0.000085f}, + {-0.134009f, -0.533107f, +0.016049f, -0.000482f, -0.000001f}, + {+0.795676f, +1.009808f, +0.094796f, +0.000697f, -0.000001f}, + {+0.291563f, +0.365793f, +0.053919f, +0.000403f, -0.000024f}, + {+0.010291f, -0.134575f, -0.004870f, -0.000384f, +0.000008f}, + {+0.400074f, +0.287614f, +0.070328f, +0.000125f, -0.000045f}, + {+0.001678f, +0.025875f, -0.002022f, +0.000076f, +0.000005f}, + {+0.436959f, -0.055640f, +0.076689f, -0.000219f, -0.000014f}, + {-0.004034f, -0.020135f, +0.007508f, -0.000103f, -0.000006f}, + {+0.093729f, +0.477248f, +0.023614f, +0.000233f, -0.000058f}, + {-0.123422f, -0.092919f, -0.005704f, -0.000171f, +0.000000f}, + {+0.504759f, +0.104762f, +0.066789f, +0.000245f, -0.000026f}, + {+0.014009f, -0.006141f, -0.006302f, -0.000091f, +0.000003f}, + {+0.360431f, +0.037695f, +0.048325f, +0.000203f, -0.000015f}, + {+0.004409f, -0.113595f, +0.004778f, +0.000217f, -0.000002f} + }, + { + {+0.897677f, +0.542816f, +0.095891f, -0.000106f, -0.000075f}, + {+0.014228f, -0.705402f, -0.006226f, -0.000344f, -0.000118f}, + {+0.201507f, +1.914333f, +0.026943f, -0.000420f, +0.000087f}, + {+0.205433f, +0.518777f, +0.021102f, -0.000023f, +0.000107f}, + {-0.017877f, -0.110691f, +0.004923f, +0.000104f, -0.000048f}, + {+0.192842f, +0.621869f, +0.023865f, +0.000199f, -0.000017f}, + {-0.001311f, +0.026946f, +0.001477f, -0.000136f, -0.000006f}, + {+0.005079f, +0.629152f, -0.003461f, +0.000195f, -0.000066f}, + {+0.003980f, -0.012991f, -0.007557f, +0.000253f, +0.000002f}, + {+0.280541f, +0.203930f, +0.033339f, -0.000296f, +0.000000f}, + {+0.066835f, -0.377419f, +0.006744f, +0.000264f, +0.000034f}, + {-0.001257f, +0.874207f, +0.008809f, -0.000099f, -0.000041f}, + {-0.011635f, +0.011453f, +0.005109f, +0.000244f, -0.000001f}, + {-0.005808f, +0.593723f, +0.006335f, +0.000064f, -0.000011f}, + {-0.021261f, -0.067946f, -0.002331f, +0.000104f, +0.000028f} + }, + { + {-0.705111f, -1.883202f, -0.090489f, +0.000148f, +0.000099f}, + {+0.099272f, -0.587041f, -0.004009f, +0.000546f, +0.000010f}, + {-0.905675f, +0.215060f, -0.111626f, -0.000378f, -0.000003f}, + {-0.414526f, -0.430242f, -0.061687f, -0.000257f, +0.000024f}, + {+0.022063f, -0.069401f, -0.004697f, +0.000403f, -0.000006f}, + {-0.499028f, -0.450610f, -0.082204f, +0.000154f, +0.000051f}, + {+0.000716f, +0.026002f, -0.000841f, -0.000065f, -0.000006f}, + {-0.458293f, -0.088827f, -0.075576f, +0.000356f, +0.000021f}, + {-0.003426f, -0.001895f, +0.007004f, +0.000107f, +0.000006f}, + {-0.252984f, -0.608102f, -0.036518f, -0.000188f, +0.000068f}, + {+0.052102f, -0.415182f, -0.006314f, +0.000148f, +0.000000f}, + {-0.431283f, +0.197715f, -0.066801f, -0.000088f, +0.000031f}, + {+0.008362f, +0.027128f, -0.004367f, +0.000092f, -0.000003f}, + {-0.295561f, +0.135592f, -0.047920f, -0.000105f, +0.000017f}, + {+0.025006f, +0.002651f, +0.001056f, -0.000216f, +0.000002f} + }, + { + {-0.593176f, -2.052339f, -0.070910f, -0.000100f, +0.000069f}, + {-0.157990f, -0.259660f, +0.015873f, +0.000403f, +0.000116f}, + {+0.360307f, -1.730109f, +0.043471f, +0.000479f, -0.000082f}, + {-0.076242f, -0.966223f, +0.000113f, -0.000062f, -0.000102f}, + {-0.021706f, -0.018877f, +0.004343f, -0.000127f, +0.000049f}, + {-0.080677f, -1.130360f, +0.008510f, -0.000220f, +0.000021f}, + {-0.000507f, +0.022696f, +0.001489f, +0.000143f, +0.000006f}, + {+0.099684f, -0.985662f, +0.034584f, -0.000145f, +0.000067f}, + {+0.003213f, +0.012234f, -0.007801f, -0.000257f, -0.000001f}, + {-0.237563f, -0.630642f, -0.030427f, +0.000172f, -0.000006f}, + {-0.145731f, -0.149448f, +0.002813f, -0.000324f, -0.000031f}, + {+0.125430f, -0.673094f, +0.018386f, +0.000174f, +0.000039f}, + {-0.004114f, +0.037800f, +0.002121f, -0.000258f, +0.000002f}, + {+0.073050f, -0.443161f, +0.011565f, -0.000018f, +0.000010f}, + {-0.015922f, +0.063018f, -0.001463f, -0.000086f, -0.000027f} + }, + { + {+1.124912f, +0.573960f, +0.142323f, -0.000259f, -0.000120f}, + {+0.144225f, +0.109446f, -0.023450f, -0.000603f, -0.000021f}, + {+0.594373f, -1.383061f, +0.069196f, +0.000008f, +0.000005f}, + {+0.499674f, -0.102263f, +0.061030f, +0.000126f, -0.000027f}, + {+0.016961f, +0.026260f, -0.002769f, -0.000445f, +0.000004f}, + {+0.632944f, -0.076074f, +0.072814f, -0.000407f, -0.000065f}, + {+0.000550f, +0.019959f, -0.002036f, +0.000057f, +0.000008f}, + {+0.501452f, -0.419657f, +0.050434f, -0.000591f, -0.000031f}, + {-0.003094f, +0.024467f, +0.008111f, -0.000124f, -0.000008f}, + {+0.415870f, +0.376102f, +0.059743f, +0.000227f, -0.000079f}, + {+0.144474f, +0.249397f, +0.000459f, -0.000132f, -0.000001f}, + {+0.358497f, -0.316925f, +0.053082f, -0.000084f, -0.000038f}, + {-0.000238f, +0.040068f, +0.000597f, -0.000101f, +0.000003f}, + {+0.258227f, -0.159273f, +0.039800f, -0.000005f, -0.000020f}, + {-0.000093f, +0.088439f, +0.001940f, +0.000226f, -0.000002f} + }, + { + {-0.070876f, +2.403851f, -0.004503f, +0.000397f, -0.000055f}, + {-0.076840f, +0.356484f, +0.022459f, -0.000471f, -0.000111f}, + {-0.673641f, +0.535940f, -0.067858f, -0.000222f, +0.000078f}, + {-0.180405f, +0.930833f, -0.021154f, +0.000296f, +0.000100f}, + {-0.009898f, +0.055154f, +0.001657f, +0.000144f, -0.000051f}, + {-0.259236f, +1.270489f, -0.028633f, +0.000371f, -0.000020f}, + {-0.000259f, +0.018770f, +0.000911f, -0.000150f, -0.000006f}, + {-0.386838f, +0.910045f, -0.041711f, +0.000301f, -0.000066f}, + {+0.002354f, +0.032108f, -0.004808f, +0.000253f, +0.000001f}, + {+0.070467f, +0.913930f, +0.006193f, +0.000040f, +0.000015f}, + {-0.048842f, +0.514452f, +0.000408f, +0.000377f, +0.000028f}, + {-0.230743f, +0.601122f, -0.035699f, -0.000081f, -0.000033f}, + {+0.003564f, +0.035201f, -0.001400f, +0.000267f, -0.000004f}, + {-0.142446f, +0.469049f, -0.024919f, +0.000100f, -0.000007f}, + {+0.015479f, +0.072891f, -0.002187f, +0.000069f, +0.000027f} + }, + { + {-1.060593f, +0.881637f, -0.141237f, -0.000301f, +0.000146f}, + {-0.002985f, +0.403323f, -0.016301f, +0.000548f, +0.000034f}, + {-0.052335f, +1.451862f, -0.028199f, +0.000089f, -0.000007f}, + {-0.384736f, +0.613709f, -0.054310f, -0.000237f, +0.000033f}, + {+0.002631f, +0.066036f, -0.002339f, +0.000502f, +0.000000f}, + {-0.476794f, +0.933190f, -0.065473f, +0.000248f, +0.000085f}, + {-0.000206f, +0.017762f, +0.000777f, -0.000039f, -0.000010f}, + {-0.253198f, +1.107323f, -0.036585f, +0.000594f, +0.000045f}, + {-0.001180f, +0.036159f, +0.000746f, +0.000135f, +0.000010f}, + {-0.505571f, +0.029600f, -0.070178f, -0.000529f, +0.000092f}, + {-0.075354f, +0.475320f, -0.002352f, +0.000131f, +0.000004f}, + {-0.271199f, +0.550703f, -0.035860f, -0.000004f, +0.000047f}, + {-0.005826f, +0.026803f, +0.001217f, +0.000121f, -0.000003f}, + {-0.221873f, +0.360216f, -0.027778f, -0.000058f, +0.000024f}, + {-0.024301f, +0.026331f, +0.003135f, -0.000244f, +0.000001f} + }, + { + {+0.690525f, -1.818917f, +0.085039f, -0.000450f, +0.000027f}, + {+0.057225f, +0.281207f, +0.009710f, +0.000560f, +0.000102f}, + {+0.506459f, +0.564152f, +0.071684f, -0.000050f, -0.000076f}, + {+0.353869f, -0.522523f, +0.045019f, -0.000449f, -0.000102f}, + {+0.004101f, +0.060649f, +0.002162f, -0.000150f, +0.000054f}, + {+0.492437f, -0.548497f, +0.057096f, -0.000443f, +0.000009f}, + {+0.000233f, +0.017558f, -0.000876f, +0.000157f, +0.000008f}, + {+0.476366f, -0.001171f, +0.053042f, -0.000446f, +0.000061f}, + {+0.000353f, +0.037418f, +0.000476f, -0.000253f, -0.000002f}, + {+0.196744f, -1.065124f, +0.031949f, -0.000103f, -0.000031f}, + {+0.147811f, +0.165824f, +0.000026f, -0.000398f, -0.000026f}, + {+0.346848f, -0.402208f, +0.047664f, -0.000015f, +0.000024f}, + {+0.007566f, +0.015715f, -0.002480f, -0.000269f, +0.000006f}, + {+0.252888f, -0.368770f, +0.034342f, -0.000180f, +0.000002f}, + {+0.023692f, -0.031259f, -0.003931f, -0.000059f, -0.000028f} + }, + { + {+0.578183f, -2.011593f, +0.073992f, +0.001371f, -0.000167f}, + {-0.069594f, +0.088175f, -0.003810f, -0.000440f, -0.000044f}, + {-0.227220f, -0.564080f, -0.015629f, +0.000042f, +0.000009f}, + {+0.169941f, -0.804452f, +0.028988f, +0.000605f, -0.000042f}, + {-0.009645f, +0.039649f, +0.000144f, -0.000553f, -0.000006f}, + {+0.153964f, -1.056091f, +0.034451f, +0.000335f, -0.000105f}, + {-0.000025f, +0.019813f, +0.000132f, +0.000002f, +0.000012f}, + {-0.062017f, -0.804384f, +0.011398f, -0.000308f, -0.000061f}, + {+0.000169f, +0.034911f, -0.000187f, -0.000117f, -0.000013f}, + {+0.440119f, -0.713992f, +0.050615f, +0.001076f, -0.000106f}, + {-0.128669f, -0.214233f, +0.004497f, -0.000103f, -0.000009f}, + {+0.098097f, -0.798361f, +0.010013f, +0.000351f, -0.000053f}, + {-0.008550f, +0.001254f, +0.004092f, -0.000138f, +0.000001f}, + {+0.091804f, -0.627104f, +0.009244f, +0.000286f, -0.000027f}, + {-0.014593f, -0.076768f, +0.002819f, +0.000279f, -0.000001f} + }, + { + {-0.993435f, +0.387528f, -0.110131f, +0.000307f, +0.000016f}, + {+0.047060f, -0.075626f, -0.001334f, -0.000567f, -0.000091f}, + {-0.206920f, -0.568534f, -0.044219f, +0.000186f, +0.000075f}, + {-0.392576f, +0.068469f, -0.053890f, +0.000450f, +0.000112f}, + {+0.012528f, +0.006883f, -0.001083f, +0.000138f, -0.000055f}, + {-0.480261f, -0.062036f, -0.067996f, +0.000424f, +0.000016f}, + {+0.000253f, +0.022782f, -0.000795f, -0.000185f, -0.000011f}, + {-0.301958f, -0.406273f, -0.051656f, +0.000467f, -0.000050f}, + {-0.001093f, +0.029167f, +0.002690f, +0.000282f, +0.000004f}, + {-0.502714f, +0.728345f, -0.060195f, +0.000029f, +0.000056f}, + {+0.039980f, -0.441106f, -0.004231f, +0.000399f, +0.000027f}, + {-0.391476f, -0.055144f, -0.045924f, +0.000025f, -0.000010f}, + {+0.008205f, -0.014371f, -0.003360f, +0.000261f, -0.000007f}, + {-0.304247f, -0.028652f, -0.034061f, +0.000183f, +0.000005f}, + {+0.001458f, -0.093974f, -0.000369f, +0.000055f, +0.000030f} + }, + { + {+0.137392f, +2.124261f, +0.005795f, -0.002596f, +0.000175f}, + {-0.009666f, -0.150052f, +0.003550f, +0.000266f, +0.000050f}, + {+0.216972f, +0.115692f, +0.034463f, -0.000271f, -0.000010f}, + {+0.047257f, +0.759362f, +0.004842f, -0.001129f, +0.000048f}, + {-0.012419f, -0.029126f, -0.001282f, +0.000578f, +0.000014f}, + {+0.096507f, +0.846049f, +0.009402f, -0.001164f, +0.000120f}, + {-0.000562f, +0.023531f, +0.001850f, +0.000083f, -0.000013f}, + {+0.156525f, +0.322121f, +0.018342f, -0.000159f, +0.000076f}, + {+0.002214f, +0.022078f, -0.006975f, +0.000051f, +0.000016f}, + {-0.091678f, +1.383538f, -0.002909f, -0.001805f, +0.000114f}, + {+0.056928f, -0.411079f, -0.001046f, -0.000022f, +0.000016f}, + {+0.149824f, +0.781150f, +0.018621f, -0.000777f, +0.000055f}, + {-0.007030f, -0.027663f, +0.001499f, +0.000143f, +0.000002f}, + {+0.113175f, +0.611704f, +0.011855f, -0.000554f, +0.000028f}, + {+0.010304f, -0.081328f, -0.001299f, -0.000326f, -0.000001f} + }, + { + {+0.761103f, +1.176434f, +0.079034f, -0.000465f, -0.000067f}, + {-0.021766f, -0.129069f, -0.001291f, +0.000514f, +0.000079f}, + {+0.052656f, +0.385158f, +0.008581f, -0.000181f, -0.000075f}, + {+0.327757f, +0.336935f, +0.039056f, -0.000551f, -0.000130f}, + {+0.011309f, -0.064037f, +0.003059f, -0.000137f, +0.000054f}, + {+0.369260f, +0.434054f, +0.045988f, -0.000624f, -0.000050f}, + {-0.000062f, +0.024514f, -0.000971f, +0.000266f, +0.000015f}, + {+0.163578f, +0.313585f, +0.027154f, -0.000540f, +0.000031f}, + {-0.002357f, +0.012860f, +0.007199f, -0.000382f, -0.000009f}, + {+0.567188f, +0.412930f, +0.045658f, -0.000151f, -0.000091f}, + {-0.107899f, -0.186387f, +0.005135f, -0.000449f, -0.000033f}, + {+0.250112f, +0.642586f, +0.021784f, -0.000061f, -0.000006f}, + {+0.006206f, -0.039247f, -0.001365f, -0.000263f, +0.000007f}, + {+0.188631f, +0.504176f, +0.017497f, -0.000181f, -0.000014f}, + {-0.017502f, -0.048887f, +0.002416f, -0.000067f, -0.000031f} + }, + { + {-0.684327f, -1.035275f, -0.063848f, +0.004018f, -0.000163f}, + {+0.035309f, -0.050812f, -0.002847f, -0.000101f, -0.000052f}, + {-0.168514f, +0.043177f, -0.023043f, +0.000441f, +0.000012f}, + {-0.257450f, -0.574283f, -0.031229f, +0.001901f, -0.000048f}, + {-0.010780f, -0.100434f, -0.001201f, -0.000537f, -0.000023f}, + {-0.310049f, -0.632628f, -0.040097f, +0.002280f, -0.000122f}, + {+0.001324f, +0.031148f, +0.000200f, -0.000256f, +0.000013f}, + {-0.184754f, -0.248324f, -0.030006f, +0.000823f, -0.000085f}, + {+0.001325f, -0.002753f, -0.005413f, +0.000102f, -0.000017f}, + {-0.399370f, -1.041121f, -0.030330f, +0.002858f, -0.000110f}, + {+0.099582f, +0.080360f, -0.007610f, +0.000330f, -0.000021f}, + {-0.313992f, -0.204082f, -0.025743f, +0.001207f, -0.000051f}, + {-0.005880f, -0.052171f, +0.002547f, -0.000108f, -0.000006f}, + {-0.235288f, -0.132120f, -0.018189f, +0.000805f, -0.000025f}, + {+0.019747f, -0.009044f, -0.004930f, +0.000386f, +0.000004f} + }, + { + {-0.036061f, -2.049852f, +0.017873f, +0.001326f, +0.000118f}, + {-0.031730f, +0.032618f, +0.005980f, -0.000345f, -0.000069f}, + {+0.048189f, -0.299501f, +0.006649f, +0.000278f, +0.000077f}, + {-0.088981f, -0.872832f, +0.010243f, +0.001133f, +0.000155f}, + {+0.009640f, -0.132629f, -0.002725f, +0.000234f, -0.000050f}, + {-0.100800f, -1.010534f, +0.017085f, +0.001478f, +0.000090f}, + {-0.001689f, +0.039941f, -0.001439f, -0.000417f, -0.000020f}, + {-0.052179f, -0.499015f, +0.012647f, +0.001020f, -0.000006f}, + {-0.000517f, -0.025997f, +0.009380f, +0.000610f, +0.000015f}, + {-0.109675f, -1.498579f, +0.008016f, +0.000837f, +0.000130f}, + {-0.056765f, +0.265453f, +0.012695f, +0.000691f, +0.000043f}, + {+0.061872f, -0.766380f, +0.004838f, +0.000273f, +0.000020f}, + {+0.005074f, -0.063245f, -0.003014f, +0.000316f, -0.000006f}, + {+0.048699f, -0.553249f, +0.001253f, +0.000294f, +0.000022f}, + {-0.017826f, +0.027182f, +0.007983f, +0.000078f, +0.000032f} + }, + { + {+0.512499f, -1.305378f, -0.011560f, -0.006425f, +0.000131f}, + {+0.019903f, +0.086704f, -0.007458f, -0.000169f, +0.000051f}, + {+0.082209f, -0.257165f, +0.004920f, -0.000746f, -0.000015f}, + {+0.284718f, -0.371880f, -0.012409f, -0.003530f, +0.000037f}, + {-0.006519f, -0.136496f, +0.009729f, +0.000296f, +0.000032f}, + {+0.344532f, -0.419919f, -0.018217f, -0.004473f, +0.000109f}, + {+0.000829f, +0.034413f, -0.003856f, +0.000595f, -0.000011f}, + {+0.207286f, -0.157646f, -0.009524f, -0.002206f, +0.000086f}, + {+0.000833f, -0.043443f, -0.009009f, -0.000486f, +0.000016f}, + {+0.394886f, -0.811218f, -0.014885f, -0.004885f, +0.000089f}, + {+0.013557f, +0.334502f, -0.014936f, -0.001054f, +0.000022f}, + {+0.157375f, -0.628940f, +0.005538f, -0.001860f, +0.000041f}, + {-0.003445f, -0.061047f, +0.005289f, -0.000034f, +0.000009f}, + {+0.111074f, -0.457260f, +0.006419f, -0.001195f, +0.000019f}, + {+0.012960f, +0.048297f, -0.009228f, -0.000446f, -0.000009f} + }, + { + {-0.448213f, -0.073435f, +0.043831f, -0.002036f, -0.000157f}, + {-0.008325f, +0.101463f, +0.007806f, +0.000222f, +0.000061f}, + {-0.086362f, -0.015184f, -0.001043f, -0.000590f, -0.000080f}, + {-0.212313f, +0.269444f, +0.022491f, -0.002262f, -0.000181f}, + {+0.003180f, -0.089659f, -0.026528f, -0.000770f, +0.000042f}, + {-0.262296f, +0.359676f, +0.026182f, -0.002987f, -0.000127f}, + {-0.000312f, +0.003749f, +0.018127f, +0.000631f, +0.000025f}, + {-0.154000f, +0.321358f, +0.010574f, -0.002216f, -0.000021f}, + {-0.001244f, -0.030938f, -0.011803f, -0.000968f, -0.000021f}, + {-0.314308f, +0.084402f, +0.038420f, -0.001607f, -0.000165f}, + {+0.011203f, +0.317368f, +0.004001f, -0.001332f, -0.000057f}, + {-0.169552f, -0.187140f, +0.006401f, -0.000360f, -0.000031f}, + {+0.001968f, -0.036558f, -0.013885f, -0.000585f, +0.000002f}, + {-0.118799f, -0.138798f, +0.002492f, -0.000352f, -0.000027f}, + {-0.007358f, +0.044960f, +0.010830f, +0.000051f, -0.000032f} + }, + { + {+0.176211f, +0.439467f, -0.166626f, +0.010372f, -0.000084f}, + {+0.001030f, +0.076361f, -0.016676f, +0.000614f, -0.000050f}, + {+0.027648f, +0.122383f, -0.009981f, +0.002109f, +0.000021f}, + {+0.060301f, +0.483123f, -0.062250f, +0.008767f, -0.000014f}, + {-0.002391f, -0.004071f, +0.048751f, +0.001909f, -0.000038f}, + {+0.076855f, +0.618372f, -0.079089f, +0.011397f, -0.000082f}, + {+0.001055f, -0.029752f, -0.015441f, -0.001494f, +0.000006f}, + {+0.034038f, +0.480307f, -0.030604f, +0.007648f, -0.000077f}, + {+0.000511f, +0.008400f, +0.025063f, +0.001785f, -0.000012f}, + {+0.114855f, +0.409675f, -0.120781f, +0.008892f, -0.000052f}, + {-0.017129f, +0.247573f, -0.000419f, +0.003919f, -0.000016f}, + {+0.076406f, +0.059144f, -0.051248f, +0.002627f, -0.000028f}, + {-0.001510f, +0.003557f, +0.023985f, +0.001157f, -0.000011f}, + {+0.051697f, +0.041218f, -0.031203f, +0.001716f, -0.000011f}, + {+0.003490f, +0.017100f, -0.019703f, -0.000030f, +0.000013f} + } +}; + +const float leftHRIRImag[BINAURAL_CONVBANDS][15][7]= +{ + { + {-0.346479f, +0.553523f, -0.074098f, +0.001288f, +0.000309f}, + {-0.179291f, +0.196331f, +0.055128f, -0.017382f, +0.000411f}, + {-0.308239f, +0.469545f, -0.021575f, -0.009209f, -0.000303f}, + {-0.319940f, +0.524241f, -0.066771f, +0.005442f, -0.000530f}, + {-0.099071f, +0.016070f, +0.100474f, -0.004226f, +0.000147f}, + {-0.351211f, +0.583972f, -0.084062f, +0.005229f, +0.000125f}, + {-0.051710f, -0.119065f, +0.135568f, +0.002775f, +0.000069f}, + {-0.368726f, +0.609447f, -0.071839f, -0.005499f, +0.000133f}, + {-0.033639f, -0.174352f, +0.152669f, +0.005945f, -0.000002f}, + {-0.315952f, +0.475453f, -0.040412f, +0.000509f, -0.000243f}, + {-0.182972f, +0.167861f, +0.028830f, +0.007677f, -0.000251f}, + {-0.338545f, +0.555030f, -0.075577f, +0.002211f, +0.000183f}, + {-0.097863f, -0.017152f, +0.129397f, -0.007411f, +0.000002f}, + {-0.316247f, +0.514944f, -0.065273f, +0.002541f, +0.000041f}, + {-0.140354f, +0.105800f, +0.079004f, -0.006610f, -0.000113f} + }, + { + {-0.313913f, +0.623520f, -0.085495f, -0.012758f, +0.000202f}, + {+0.066726f, +0.399622f, -0.022457f, -0.006137f, +0.000284f}, + {-0.230132f, +0.565523f, +0.020706f, +0.030274f, -0.000219f}, + {-0.292072f, +0.667164f, +0.030070f, +0.013037f, -0.000365f}, + {+0.082351f, +0.095375f, -0.017487f, -0.006093f, +0.000108f}, + {-0.322802f, +0.748814f, +0.008866f, -0.001584f, +0.000068f}, + {+0.051057f, -0.282404f, -0.087651f, -0.005022f, +0.000044f}, + {-0.340687f, +0.775811f, +0.021863f, -0.011738f, +0.000102f}, + {+0.030674f, -0.445214f, -0.118754f, -0.004069f, -0.000004f}, + {-0.292932f, +0.449609f, -0.071120f, +0.002682f, -0.000141f}, + {+0.036892f, +0.307700f, -0.120513f, +0.004660f, -0.000164f}, + {-0.276687f, +0.712282f, -0.031372f, -0.011376f, +0.000121f}, + {+0.094247f, +0.038851f, -0.003446f, +0.004678f, +0.000001f}, + {-0.239959f, +0.695822f, -0.012889f, -0.004808f, +0.000027f}, + {+0.091193f, +0.305836f, +0.011105f, +0.007857f, -0.000080f} + }, + { + {+0.345193f, -0.332259f, -0.065579f, +0.004201f, -0.000370f}, + {+0.079556f, +0.212459f, +0.100114f, +0.008980f, -0.000484f}, + {+0.284314f, -0.233038f, +0.152863f, -0.033143f, +0.000355f}, + {+0.451352f, -0.399491f, +0.098548f, -0.007150f, +0.000625f}, + {-0.053656f, +0.193617f, +0.026103f, +0.008373f, -0.000172f}, + {+0.462996f, -0.367670f, +0.059995f, -0.007104f, -0.000153f}, + {-0.047980f, -0.347394f, +0.054169f, +0.004712f, -0.000082f}, + {+0.460543f, -0.352575f, +0.025131f, +0.016685f, -0.000155f}, + {-0.022116f, -0.563476f, +0.009055f, +0.001133f, +0.000002f}, + {+0.343716f, -0.687345f, +0.149443f, +0.002569f, +0.000291f}, + {+0.134535f, +0.214472f, -0.123198f, -0.004683f, +0.000298f}, + {+0.395678f, -0.353387f, +0.071605f, +0.009820f, -0.000218f}, + {-0.080865f, +0.213671f, +0.036393f, -0.002576f, -0.000002f}, + {+0.378160f, -0.247310f, +0.059701f, +0.003289f, -0.000050f}, + {-0.011178f, +0.435220f, +0.022000f, -0.003546f, +0.000133f} + }, + { + {+0.375535f, -0.323173f, -0.095592f, +0.016350f, -0.000072f}, + {-0.164514f, -0.148051f, +0.076663f, +0.007666f, -0.000132f}, + {+0.284282f, -0.406641f, +0.032308f, +0.013962f, +0.000119f}, + {+0.105923f, -0.905160f, +0.058855f, -0.012639f, +0.000165f}, + {+0.019004f, +0.294886f, +0.002183f, -0.000727f, -0.000061f}, + {+0.165541f, -0.804111f, +0.046702f, +0.009739f, +0.000003f}, + {+0.041573f, -0.292137f, -0.001643f, -0.002823f, -0.000013f}, + {+0.224451f, -0.660961f, +0.005300f, -0.001820f, -0.000066f}, + {+0.007903f, -0.553598f, -0.011295f, +0.001114f, +0.000006f}, + {+0.301096f, -0.858369f, +0.054950f, -0.005764f, +0.000016f}, + {-0.185058f, -0.068726f, +0.031108f, -0.004814f, +0.000057f}, + {+0.211913f, -0.708511f, -0.018970f, +0.000869f, -0.000046f}, + {+0.056632f, +0.323528f, -0.035298f, +0.002677f, +0.000000f}, + {+0.146364f, -0.655800f, -0.014996f, +0.001286f, -0.000009f}, + {-0.068438f, +0.370728f, +0.021857f, -0.002414f, +0.000040f} + }, + { + {-0.501452f, +0.957815f, -0.118949f, -0.016074f, +0.000374f}, + {+0.140573f, -0.389546f, -0.063161f, -0.008116f, +0.000493f}, + {-0.428055f, +0.655187f, -0.059033f, -0.003664f, -0.000369f}, + {-0.420740f, -0.088485f, -0.055413f, +0.007312f, -0.000635f}, + {+0.016162f, +0.401403f, -0.075825f, -0.002475f, +0.000180f}, + {-0.431842f, +0.120945f, -0.041884f, -0.000821f, +0.000146f}, + {-0.033630f, -0.215580f, +0.008255f, +0.002345f, +0.000081f}, + {-0.456816f, +0.379069f, -0.075615f, -0.009372f, +0.000166f}, + {+0.007127f, -0.487963f, -0.047197f, -0.001590f, -0.000003f}, + {-0.442776f, +0.317039f, -0.091288f, -0.002255f, -0.000272f}, + {+0.067359f, -0.452943f, +0.061128f, +0.004058f, -0.000297f}, + {-0.485489f, +0.275866f, -0.050681f, -0.003739f, +0.000220f}, + {-0.029340f, +0.381803f, +0.012060f, -0.003022f, +0.000002f}, + {-0.433227f, +0.159115f, -0.034801f, -0.002670f, +0.000050f}, + {+0.115592f, +0.171299f, -0.027425f, +0.001757f, -0.000137f} + }, + { + {-0.284469f, +1.284573f, -0.032011f, +0.001084f, -0.000052f}, + {-0.026859f, -0.481645f, +0.031329f, -0.003806f, -0.000014f}, + {-0.181950f, +0.902398f, -0.114462f, +0.006410f, -0.000019f}, + {+0.021997f, +0.558819f, -0.027875f, +0.007660f, +0.000026f}, + {-0.045901f, +0.421890f, +0.009606f, -0.000493f, +0.000014f}, + {-0.087312f, +0.637991f, -0.008565f, -0.005467f, -0.000065f}, + {+0.027202f, -0.176156f, -0.031817f, -0.000966f, -0.000015f}, + {-0.174838f, +0.815827f, -0.004047f, +0.005296f, +0.000027f}, + {-0.017589f, -0.361264f, +0.074423f, +0.001029f, -0.000008f}, + {-0.239564f, +0.721503f, +0.005066f, +0.004992f, +0.000091f}, + {+0.117370f, -0.475324f, -0.026060f, +0.002096f, +0.000041f}, + {-0.037676f, +0.907270f, -0.023327f, +0.000382f, -0.000025f}, + {+0.006224f, +0.373402f, -0.019625f, +0.001954f, -0.000001f}, + {+0.009142f, +0.797778f, +0.001456f, +0.000541f, -0.000008f}, + {-0.112449f, -0.106272f, +0.002858f, +0.001574f, -0.000001f} + }, + { + {+0.580646f, -0.125470f, +0.165931f, +0.003927f, -0.000327f}, + {-0.108873f, -0.326101f, +0.000791f, +0.004385f, -0.000443f}, + {+0.496298f, -0.294341f, +0.110947f, -0.003960f, +0.000347f}, + {+0.317324f, +0.084393f, +0.052686f, -0.002910f, +0.000568f}, + {+0.064021f, +0.305884f, -0.009984f, +0.000720f, -0.000171f}, + {+0.381756f, -0.083321f, +0.056496f, +0.001922f, -0.000109f}, + {-0.023665f, -0.162046f, +0.011591f, -0.001760f, -0.000067f}, + {+0.478358f, -0.157333f, +0.072547f, +0.000538f, -0.000166f}, + {+0.022505f, -0.184316f, -0.094023f, -0.000535f, +0.000005f}, + {+0.519003f, -0.345400f, +0.046524f, +0.002002f, +0.000201f}, + {-0.203282f, -0.003518f, -0.055916f, -0.001798f, +0.000253f}, + {+0.431496f, +0.164286f, +0.068299f, -0.000598f, -0.000192f}, + {+0.013005f, +0.354615f, -0.009640f, -0.000556f, -0.000001f}, + {+0.388320f, +0.218505f, +0.052578f, +0.000717f, -0.000043f}, + {+0.064065f, -0.335687f, -0.005413f, -0.000806f, +0.000126f} + }, + { + {+0.216647f, -0.769850f, +0.030547f, -0.001237f, +0.000145f}, + {+0.185578f, +0.048454f, -0.025037f, +0.000839f, +0.000125f}, + {+0.072152f, -1.087589f, -0.044540f, -0.002159f, -0.000064f}, + {-0.039230f, -0.436180f, +0.027982f, -0.005578f, -0.000170f}, + {-0.067226f, +0.128292f, -0.003394f, +0.001259f, +0.000027f}, + {+0.082931f, -0.543672f, +0.006471f, +0.000953f, +0.000105f}, + {+0.021967f, -0.147869f, -0.016949f, +0.001711f, +0.000034f}, + {+0.128785f, -0.676661f, +0.016555f, +0.000836f, +0.000011f}, + {-0.024250f, -0.000088f, +0.082224f, +0.000232f, +0.000008f}, + {+0.175186f, -0.840571f, +0.013734f, -0.002329f, -0.000152f}, + {+0.111738f, +0.509167f, +0.011773f, +0.000668f, -0.000110f}, + {-0.059856f, -0.586995f, +0.004766f, +0.001337f, +0.000077f}, + {-0.030736f, +0.323572f, +0.010841f, +0.000266f, +0.000002f}, + {-0.130055f, -0.569153f, -0.015286f, -0.000126f, +0.000020f}, + {+0.005153f, -0.413324f, -0.002875f, -0.000804f, -0.000030f} + }, + { + {-0.725838f, +0.613051f, -0.068139f, +0.001012f, +0.000250f}, + {-0.154342f, +0.462365f, +0.008918f, -0.000748f, +0.000359f}, + {-0.574125f, -0.202838f, -0.063484f, +0.001137f, -0.000299f}, + {-0.248430f, -0.076290f, -0.045952f, +0.001044f, -0.000454f}, + {+0.057184f, -0.048810f, -0.000147f, -0.000421f, +0.000150f}, + {-0.385646f, +0.160251f, -0.051383f, +0.000597f, +0.000057f}, + {-0.020627f, -0.132133f, +0.015873f, +0.000547f, +0.000047f}, + {-0.510211f, +0.346437f, -0.108605f, -0.002970f, +0.000155f}, + {+0.024004f, +0.146367f, -0.069359f, +0.000113f, -0.000008f}, + {-0.640923f, +0.399438f, -0.091106f, -0.002796f, -0.000106f}, + {+0.074260f, +0.560217f, +0.027236f, -0.002049f, -0.000186f}, + {-0.335263f, -0.156297f, -0.049323f, +0.000645f, +0.000147f}, + {+0.044642f, +0.248879f, -0.008677f, -0.000509f, +0.000000f}, + {-0.262625f, -0.364710f, -0.040769f, -0.000478f, +0.000032f}, + {-0.063966f, -0.317445f, -0.003743f, -0.000353f, -0.000104f} + }, + { + {-0.013628f, +1.647816f, -0.010906f, -0.000105f, -0.000196f}, + {+0.034174f, +0.634603f, -0.061570f, +0.001602f, -0.000188f}, + {+0.159259f, +0.839126f, -0.028715f, +0.002082f, +0.000121f}, + {-0.012978f, +0.315172f, +0.007498f, +0.002515f, +0.000252f}, + {-0.038877f, -0.161887f, +0.013994f, -0.000806f, -0.000056f}, + {-0.094327f, +0.601401f, -0.004764f, -0.000515f, -0.000115f}, + {+0.019363f, -0.116326f, -0.016454f, -0.000653f, -0.000042f}, + {-0.103308f, +0.996284f, -0.012091f, +0.001669f, -0.000042f}, + {-0.020768f, +0.223263f, +0.032482f, -0.000406f, -0.000007f}, + {-0.002933f, +1.351350f, -0.016706f, +0.001459f, +0.000157f}, + {-0.188420f, +0.132863f, -0.019901f, +0.000373f, +0.000142f}, + {+0.044496f, +0.422612f, +0.003243f, -0.000732f, -0.000105f}, + {-0.050602f, +0.139166f, +0.011699f, +0.000107f, -0.000001f}, + {+0.121488f, +0.224605f, +0.019225f, +0.000384f, -0.000026f}, + {+0.088139f, -0.113041f, -0.007062f, +0.000964f, +0.000050f} + }, + { + {+0.784649f, +0.402307f, +0.111953f, -0.001767f, -0.000165f}, + {+0.096822f, +0.476180f, +0.001375f, -0.004303f, -0.000266f}, + {+0.455351f, +0.319212f, +0.073899f, -0.000685f, +0.000240f}, + {+0.289202f, -0.112057f, +0.026763f, +0.000919f, +0.000329f}, + {+0.017834f, -0.185600f, -0.026574f, -0.000319f, -0.000122f}, + {+0.470118f, -0.258982f, +0.068848f, -0.000550f, -0.000008f}, + {-0.018413f, -0.094635f, +0.004745f, -0.000689f, -0.000026f}, + {+0.630013f, -0.134362f, +0.098657f, -0.000312f, -0.000136f}, + {+0.014543f, +0.234428f, -0.011333f, +0.000353f, +0.000011f}, + {+0.691576f, +0.262485f, +0.098749f, +0.001088f, +0.000023f}, + {+0.133981f, -0.356598f, +0.000886f, +0.001721f, +0.000118f}, + {+0.331076f, -0.023745f, +0.052104f, -0.001010f, -0.000099f}, + {+0.048698f, +0.024439f, -0.007108f, +0.000514f, +0.000001f}, + {+0.208364f, +0.091797f, +0.036409f, +0.000063f, -0.000021f}, + {-0.069842f, +0.096568f, +0.001861f, +0.000341f, +0.000080f} + }, + { + {-0.275485f, -1.249177f, -0.051619f, +0.000413f, +0.000207f}, + {-0.157471f, +0.109039f, +0.009535f, +0.001756f, +0.000208f}, + {-0.251132f, -0.782342f, -0.026586f, -0.001157f, -0.000151f}, + {+0.001377f, -0.518955f, +0.008364f, -0.001070f, -0.000274f}, + {+0.000952f, -0.142768f, +0.022685f, +0.000903f, +0.000072f}, + {+0.024915f, -0.938659f, -0.001094f, -0.000206f, +0.000101f}, + {+0.017479f, -0.075912f, -0.014473f, +0.000492f, +0.000040f}, + {-0.047015f, -1.194136f, -0.019166f, +0.000263f, +0.000066f}, + {-0.007828f, +0.216324f, -0.002450f, +0.000122f, +0.000005f}, + {-0.225369f, -1.146623f, -0.025041f, +0.000712f, -0.000119f}, + {+0.035179f, -0.495586f, -0.002434f, +0.000356f, -0.000140f}, + {-0.042950f, -0.611443f, -0.015577f, +0.000564f, +0.000110f}, + {-0.041993f, -0.079290f, +0.005374f, -0.000241f, +0.000001f}, + {-0.084537f, -0.361650f, -0.016659f, -0.000278f, +0.000027f}, + {+0.019868f, +0.221770f, +0.001086f, -0.000552f, -0.000058f} + }, + { + {-0.638841f, -0.716808f, -0.087844f, +0.000999f, +0.000093f}, + {+0.119463f, -0.260644f, +0.000730f, +0.002454f, +0.000187f}, + {-0.358444f, -0.623901f, -0.042829f, +0.000564f, -0.000182f}, + {-0.356273f, +0.051713f, -0.055059f, -0.001405f, -0.000222f}, + {-0.013400f, -0.075190f, -0.009967f, +0.000251f, +0.000094f}, + {-0.558219f, -0.041438f, -0.081336f, +0.000205f, -0.000026f}, + {-0.016391f, -0.073933f, +0.020325f, +0.000320f, +0.000010f}, + {-0.700096f, -0.217086f, -0.089015f, -0.000055f, +0.000112f}, + {+0.002911f, +0.179435f, +0.015582f, -0.000426f, -0.000012f}, + {-0.613387f, -0.542946f, -0.085584f, -0.000623f, +0.000026f}, + {-0.170406f, -0.188028f, -0.011393f, -0.001711f, -0.000064f}, + {-0.388203f, -0.100241f, -0.048703f, +0.000607f, +0.000060f}, + {+0.031711f, -0.166672f, -0.004751f, -0.000501f, -0.000001f}, + {-0.243489f, -0.119652f, -0.037808f, -0.000041f, +0.000012f}, + {+0.037926f, +0.212515f, -0.009955f, -0.000474f, -0.000058f} + }, + { + {+0.428480f, +0.916268f, +0.061127f, +0.000167f, -0.000191f}, + {-0.018243f, -0.427994f, +0.007742f, -0.001543f, -0.000197f}, + {+0.328028f, +0.427987f, +0.043949f, -0.000347f, +0.000159f}, + {+0.103644f, +0.768055f, +0.017035f, +0.000309f, +0.000256f}, + {+0.017299f, -0.013770f, +0.002341f, -0.000570f, -0.000078f}, + {+0.152316f, +1.054485f, +0.026241f, +0.000619f, -0.000075f}, + {+0.015958f, -0.076522f, -0.015048f, -0.000200f, -0.000031f}, + {+0.296986f, +1.289182f, +0.034915f, -0.000175f, -0.000081f}, + {+0.000543f, +0.133568f, -0.013971f, -0.000050f, -0.000002f}, + {+0.387624f, +1.005937f, +0.059332f, -0.001214f, +0.000064f}, + {+0.158818f, +0.295857f, +0.012511f, -0.000363f, +0.000119f}, + {+0.124621f, +0.674220f, +0.018405f, -0.000154f, -0.000100f}, + {-0.017600f, -0.228196f, +0.004584f, +0.000391f, +0.000000f}, + {+0.130947f, +0.464380f, +0.027044f, +0.000227f, -0.000024f}, + {-0.077494f, +0.080369f, +0.012731f, +0.000384f, +0.000057f} + }, + { + {+0.474270f, +0.848355f, +0.072295f, -0.000352f, -0.000045f}, + {-0.078278f, -0.330646f, -0.006905f, -0.001256f, -0.000133f}, + {+0.210978f, +0.611947f, +0.028321f, +0.000762f, +0.000134f}, + {+0.339239f, +0.417518f, +0.042058f, +0.001229f, +0.000149f}, + {-0.012805f, +0.031238f, -0.001412f, -0.000282f, -0.000070f}, + {+0.525031f, +0.496181f, +0.068966f, +0.000154f, +0.000041f}, + {-0.016853f, -0.064800f, +0.007621f, -0.000050f, -0.000001f}, + {+0.610173f, +0.790742f, +0.091162f, +0.000033f, -0.000087f}, + {-0.003936f, +0.097134f, +0.013071f, +0.000574f, +0.000012f}, + {+0.511076f, +0.828412f, +0.066510f, +0.000121f, -0.000037f}, + {-0.014322f, +0.547795f, -0.000233f, +0.001234f, +0.000033f}, + {+0.412615f, +0.228133f, +0.058325f, -0.000274f, -0.000034f}, + {+0.001487f, -0.254447f, +0.003704f, +0.000354f, +0.000001f}, + {+0.253975f, +0.294824f, +0.029043f, +0.000151f, -0.000007f}, + {+0.081818f, -0.118377f, -0.003734f, +0.000481f, +0.000041f} + }, + { + {-0.522564f, -0.689848f, -0.077661f, -0.000834f, +0.000166f}, + {+0.112532f, -0.069243f, -0.003530f, +0.000958f, +0.000176f}, + {-0.302251f, -0.172630f, -0.042769f, -0.000157f, -0.000153f}, + {-0.214362f, -0.409809f, -0.017566f, -0.000172f, -0.000221f}, + {+0.001708f, +0.057201f, +0.003140f, +0.000396f, +0.000076f}, + {-0.320094f, -0.781338f, -0.036876f, -0.000754f, +0.000050f}, + {+0.018111f, -0.036447f, -0.007132f, -0.000014f, +0.000022f}, + {-0.510842f, -0.943853f, -0.074947f, -0.000045f, +0.000087f}, + {+0.007080f, +0.079137f, -0.013350f, -0.000072f, -0.000001f}, + {-0.543962f, -0.791940f, -0.077879f, +0.000741f, -0.000016f}, + {-0.139752f, +0.365032f, -0.009628f, +0.000228f, -0.000093f}, + {-0.254482f, -0.797757f, -0.038335f, -0.000175f, +0.000085f}, + {+0.013164f, -0.250065f, -0.009012f, -0.000362f, -0.000001f}, + {-0.229974f, -0.433573f, -0.029915f, -0.000329f, +0.000021f}, + {-0.049796f, -0.291278f, +0.001346f, -0.000394f, -0.000053f} + }, + { + {-0.265772f, -1.102965f, -0.038204f, +0.000514f, +0.000019f}, + {-0.069628f, +0.172555f, +0.007715f, +0.000961f, +0.000103f}, + {-0.117719f, -0.454174f, -0.022429f, -0.000476f, -0.000099f}, + {-0.201529f, -0.405038f, -0.040488f, -0.000745f, -0.000107f}, + {+0.013244f, +0.062592f, -0.010308f, +0.000225f, +0.000052f}, + {-0.361155f, -0.708560f, -0.057133f, -0.000206f, -0.000040f}, + {-0.018100f, -0.013096f, +0.013467f, -0.000067f, -0.000001f}, + {-0.368660f, -1.181142f, -0.048879f, +0.000032f, +0.000065f}, + {-0.008695f, +0.076549f, +0.007847f, -0.000668f, -0.000011f}, + {-0.337856f, -1.120965f, -0.041209f, +0.000362f, +0.000020f}, + {+0.176656f, -0.096997f, +0.010473f, -0.000832f, -0.000022f}, + {-0.366798f, -0.628661f, -0.050159f, +0.000274f, +0.000021f}, + {-0.024579f, -0.224963f, +0.010283f, -0.000321f, -0.000001f}, + {-0.167111f, -0.533443f, -0.021361f, -0.000057f, +0.000004f}, + {-0.003667f, -0.351759f, -0.002318f, -0.000327f, -0.000030f} + }, + { + {+0.496756f, +0.057133f, +0.069911f, +0.000582f, -0.000145f}, + {-0.013799f, +0.233209f, -0.009213f, -0.000993f, -0.000158f}, + {+0.232556f, +0.085603f, +0.033781f, +0.000044f, +0.000142f}, + {+0.144537f, +0.136639f, +0.022436f, +0.000164f, +0.000188f}, + {-0.028336f, +0.044645f, +0.018511f, -0.000332f, -0.000071f}, + {+0.320451f, +0.325110f, +0.037509f, +0.000534f, -0.000034f}, + {+0.016829f, -0.022096f, -0.026397f, +0.000125f, -0.000014f}, + {+0.533956f, +0.174039f, +0.062174f, +0.000242f, -0.000087f}, + {+0.008799f, +0.071779f, -0.008463f, +0.000227f, +0.000003f}, + {+0.654744f, +0.389244f, +0.083646f, -0.000024f, -0.000011f}, + {-0.072117f, -0.457416f, +0.001824f, -0.000008f, +0.000074f}, + {+0.392163f, +0.534188f, +0.053345f, +0.000158f, -0.000074f}, + {+0.032888f, -0.190496f, -0.018766f, +0.000377f, +0.000002f}, + {+0.262065f, +0.107178f, +0.028017f, +0.000293f, -0.000020f}, + {+0.054650f, -0.275758f, -0.003951f, +0.000369f, +0.000048f} + }, + { + {+0.102800f, +0.661769f, +0.024778f, -0.000437f, -0.000005f}, + {+0.074284f, +0.084134f, +0.007785f, -0.000781f, -0.000086f}, + {+0.107119f, +0.278685f, +0.016547f, +0.000374f, +0.000075f}, + {+0.195513f, +0.053148f, +0.036408f, +0.000495f, +0.000088f}, + {+0.039407f, -0.003431f, -0.017016f, -0.000081f, -0.000039f}, + {+0.262170f, +0.386464f, +0.055981f, +0.000107f, +0.000032f}, + {-0.015811f, -0.069404f, +0.040379f, +0.000018f, -0.000001f}, + {+0.150457f, +0.722389f, +0.047459f, -0.000189f, -0.000048f}, + {-0.008796f, +0.039878f, +0.029331f, +0.000673f, +0.000009f}, + {+0.071443f, +1.277356f, +0.015093f, -0.000771f, +0.000006f}, + {-0.079622f, -0.437077f, -0.008280f, +0.000635f, +0.000020f}, + {+0.212102f, +0.813239f, +0.030110f, -0.000386f, -0.000015f}, + {-0.037714f, -0.147621f, +0.022372f, +0.000244f, +0.000000f}, + {+0.056613f, +0.402997f, +0.018809f, -0.000058f, -0.000003f}, + {-0.081528f, -0.108982f, +0.013906f, +0.000206f, +0.000024f} + }, + { + {-0.373541f, -0.070450f, -0.057055f, -0.000471f, +0.000133f}, + {-0.068348f, -0.137916f, -0.005467f, +0.001073f, +0.000148f}, + {-0.194055f, -0.183976f, -0.031319f, +0.000021f, -0.000131f}, + {-0.058021f, -0.340872f, -0.015175f, -0.000168f, -0.000167f}, + {-0.043324f, -0.079398f, +0.010729f, +0.000250f, +0.000065f}, + {-0.219601f, -0.375357f, -0.043726f, -0.000182f, +0.000029f}, + {+0.015544f, -0.120833f, -0.029676f, -0.000101f, +0.000010f}, + {-0.356500f, -0.091308f, -0.067895f, -0.000171f, +0.000085f}, + {+0.009251f, -0.012039f, -0.031983f, -0.000425f, -0.000004f}, + {-0.600122f, +0.246169f, -0.079809f, -0.000134f, +0.000016f}, + {+0.152562f, -0.092567f, +0.005582f, -0.000147f, -0.000064f}, + {-0.416114f, -0.143031f, -0.053447f, +0.000035f, +0.000068f}, + {+0.037990f, -0.088681f, -0.014096f, -0.000339f, -0.000002f}, + {-0.194989f, +0.005961f, -0.031053f, -0.000187f, +0.000019f}, + {+0.074697f, +0.073729f, -0.012828f, -0.000314f, -0.000044f} + }, + { + {-0.087659f, -0.512695f, -0.018072f, +0.000628f, -0.000005f}, + {+0.004230f, -0.247400f, +0.003124f, +0.000774f, +0.000074f}, + {-0.140227f, -0.269891f, -0.017446f, -0.000365f, -0.000059f}, + {-0.364382f, +0.144921f, -0.059984f, -0.000608f, -0.000077f}, + {+0.039115f, -0.159891f, -0.011788f, -0.000015f, +0.000031f}, + {-0.377988f, -0.130201f, -0.060381f, -0.000116f, -0.000028f}, + {-0.014698f, -0.139313f, +0.012041f, +0.000055f, +0.000003f}, + {-0.226054f, -0.302457f, -0.037146f, +0.000151f, +0.000034f}, + {-0.009092f, -0.048503f, +0.012832f, -0.000508f, -0.000007f}, + {+0.139489f, -0.879999f, +0.008732f, +0.000589f, -0.000026f}, + {-0.098171f, +0.266370f, -0.001070f, -0.000683f, -0.000019f}, + {-0.064067f, -0.676039f, -0.014733f, +0.000450f, +0.000011f}, + {-0.033828f, -0.018438f, +0.006260f, -0.000203f, +0.000001f}, + {-0.039081f, -0.235768f, -0.009467f, +0.000096f, +0.000001f}, + {-0.039508f, +0.203205f, +0.006838f, -0.000188f, -0.000019f} + }, + { + {+0.318402f, +0.113290f, +0.052715f, +0.000298f, -0.000128f}, + {+0.068235f, -0.162863f, -0.004225f, -0.001090f, -0.000145f}, + {+0.222259f, +0.286163f, +0.036304f, -0.000074f, +0.000123f}, + {+0.168949f, +1.006240f, +0.051466f, +0.000233f, +0.000155f}, + {-0.028003f, -0.213729f, +0.017741f, -0.000168f, -0.000060f}, + {+0.295804f, +0.931852f, +0.065440f, +0.000118f, -0.000031f}, + {+0.012329f, -0.133114f, -0.010035f, +0.000080f, -0.000008f}, + {+0.367568f, +0.620904f, +0.068733f, +0.000078f, -0.000081f}, + {+0.007439f, -0.068218f, -0.011914f, +0.000536f, +0.000003f}, + {+0.430741f, -0.415072f, +0.068905f, +0.000095f, -0.000010f}, + {-0.021528f, +0.360393f, -0.007525f, +0.000307f, +0.000061f}, + {+0.337971f, -0.061032f, +0.046616f, -0.000184f, -0.000066f}, + {+0.026607f, +0.045352f, -0.006073f, +0.000328f, +0.000002f}, + {+0.140962f, +0.039662f, +0.023194f, +0.000152f, -0.000020f}, + {-0.007696f, +0.230864f, -0.004179f, +0.000321f, +0.000041f} + }, + { + {+0.114366f, +0.439023f, +0.013577f, -0.000632f, +0.000018f}, + {-0.096632f, +0.049253f, +0.005518f, -0.000776f, -0.000061f}, + {+0.146025f, +0.413262f, +0.013620f, +0.000490f, +0.000047f}, + {+0.535433f, +0.502251f, +0.042436f, +0.000856f, +0.000067f}, + {+0.012919f, -0.226782f, -0.015875f, +0.000030f, -0.000025f}, + {+0.531267f, +0.602899f, +0.057270f, +0.000190f, +0.000029f}, + {-0.009438f, -0.120072f, +0.004422f, -0.000186f, -0.000005f}, + {+0.350940f, +0.655711f, +0.044044f, +0.000096f, -0.000024f}, + {-0.004993f, -0.093043f, +0.020060f, +0.000234f, +0.000006f}, + {-0.198525f, +0.570779f, -0.031605f, -0.000217f, +0.000035f}, + {+0.099390f, +0.167283f, +0.010833f, +0.000671f, +0.000016f}, + {+0.020489f, +0.410883f, +0.013705f, -0.000359f, -0.000004f}, + {-0.017518f, +0.088396f, +0.008215f, +0.000121f, -0.000002f}, + {+0.086552f, +0.116817f, +0.017093f, -0.000096f, +0.000002f}, + {+0.046927f, +0.149468f, +0.001282f, +0.000116f, +0.000015f} + }, + { + {-0.348389f, -0.260238f, -0.050528f, -0.000503f, +0.000124f}, + {+0.060863f, +0.238331f, -0.011460f, +0.000913f, +0.000143f}, + {-0.279661f, -0.215310f, -0.029652f, -0.000025f, -0.000117f}, + {-0.590548f, -1.177681f, -0.067007f, -0.000422f, -0.000149f}, + {+0.002338f, -0.204608f, +0.009349f, +0.000140f, +0.000057f}, + {-0.673358f, -1.238148f, -0.098880f, -0.000483f, +0.000033f}, + {+0.007460f, -0.098657f, +0.003842f, +0.000003f, +0.000008f}, + {-0.639886f, -0.885842f, -0.107555f, -0.000336f, +0.000078f}, + {+0.002912f, -0.110891f, -0.004777f, -0.000426f, -0.000003f}, + {-0.308064f, +0.413337f, -0.045363f, -0.000012f, +0.000001f}, + {-0.079159f, -0.098142f, -0.005001f, -0.000304f, -0.000060f}, + {-0.261775f, -0.043581f, -0.050039f, +0.000020f, +0.000065f}, + {+0.007477f, +0.105861f, -0.006424f, -0.000253f, -0.000001f}, + {-0.150809f, -0.261923f, -0.032650f, -0.000224f, +0.000020f}, + {-0.062463f, -0.000784f, +0.002260f, -0.000235f, -0.000039f} + }, + { + {-0.084802f, -0.667993f, -0.010575f, +0.000724f, -0.000035f}, + {+0.015472f, +0.264305f, +0.017737f, +0.000856f, +0.000046f}, + {-0.089394f, -0.474721f, -0.024189f, -0.000463f, -0.000036f}, + {-0.260757f, -1.668672f, -0.030273f, -0.000841f, -0.000056f}, + {-0.014406f, -0.156721f, -0.006466f, -0.000058f, +0.000021f}, + {-0.321247f, -1.806107f, -0.023973f, -0.000065f, -0.000036f}, + {-0.006401f, -0.070186f, -0.003971f, +0.000249f, +0.000005f}, + {-0.215765f, -1.592243f, +0.000805f, -0.000059f, +0.000015f}, + {-0.001179f, -0.100912f, -0.010248f, -0.000161f, -0.000006f}, + {+0.215203f, -0.393691f, +0.031962f, -0.000030f, -0.000036f}, + {-0.003715f, -0.201207f, -0.005927f, -0.000616f, -0.000010f}, + {-0.094885f, -0.311374f, -0.010396f, +0.000395f, -0.000004f}, + {+0.002052f, +0.101907f, +0.001064f, -0.000125f, +0.000002f}, + {-0.162343f, -0.260689f, -0.014631f, +0.000139f, -0.000005f}, + {+0.049378f, -0.150147f, -0.003824f, -0.000109f, -0.000012f} + }, + { + {+0.375523f, +0.023640f, +0.048685f, +0.000757f, -0.000117f}, + {-0.079129f, +0.089447f, -0.017358f, -0.000833f, -0.000140f}, + {+0.258582f, +0.079328f, +0.043901f, +0.000050f, +0.000112f}, + {+0.786144f, -0.080409f, +0.090050f, +0.000512f, +0.000142f}, + {+0.021223f, -0.092022f, +0.005689f, -0.000083f, -0.000054f}, + {+0.965102f, +0.119837f, +0.107386f, +0.000882f, -0.000031f}, + {+0.005503f, -0.044093f, +0.001337f, -0.000087f, -0.000009f}, + {+0.930096f, +0.098134f, +0.098802f, +0.000616f, -0.000075f}, + {-0.000981f, -0.077878f, +0.008428f, +0.000405f, +0.000002f}, + {+0.207826f, -0.415264f, +0.029295f, +0.000038f, +0.000002f}, + {+0.064026f, -0.088096f, +0.011146f, +0.000233f, +0.000056f}, + {+0.348493f, +0.377419f, +0.058713f, +0.000176f, -0.000061f}, + {-0.009657f, +0.084358f, +0.002160f, +0.000249f, +0.000001f}, + {+0.294795f, +0.433182f, +0.041685f, +0.000320f, -0.000019f}, + {-0.015606f, -0.234362f, +0.001126f, +0.000178f, +0.000037f} + }, + { + {+0.011617f, +0.566329f, +0.010818f, -0.000813f, +0.000052f}, + {+0.080505f, -0.187637f, +0.019358f, -0.000727f, -0.000031f}, + {+0.132841f, +0.262806f, +0.024438f, +0.000308f, +0.000026f}, + {-0.205095f, +1.404475f, -0.007402f, +0.000565f, +0.000044f}, + {-0.021831f, -0.022144f, -0.002755f, +0.000059f, -0.000017f}, + {-0.222202f, +1.897742f, -0.010669f, -0.000249f, +0.000043f}, + {-0.004774f, -0.026838f, -0.000147f, -0.000221f, -0.000005f}, + {-0.290105f, +1.917533f, -0.020963f, -0.000272f, -0.000007f}, + {+0.003482f, -0.062741f, -0.005241f, +0.000061f, +0.000006f}, + {-0.201041f, +0.205200f, -0.025538f, -0.000061f, +0.000035f}, + {-0.047371f, +0.088805f, -0.005938f, +0.000518f, +0.000004f}, + {+0.083840f, +0.806848f, -0.003013f, -0.000531f, +0.000012f}, + {+0.015038f, +0.059421f, -0.003892f, +0.000105f, -0.000002f}, + {+0.099553f, +0.738308f, +0.006449f, -0.000279f, +0.000009f}, + {-0.022639f, -0.224357f, +0.002261f, +0.000083f, +0.000008f} + }, + { + {-0.321962f, +0.045967f, -0.050855f, -0.000806f, +0.000106f}, + {-0.008676f, -0.381006f, -0.027530f, +0.000698f, +0.000133f}, + {-0.333039f, -0.490802f, -0.069288f, +0.000184f, -0.000106f}, + {-0.548412f, +0.842992f, -0.085952f, -0.000354f, -0.000134f}, + {+0.016172f, +0.039278f, +0.001628f, +0.000029f, +0.000052f}, + {-0.754935f, +1.057276f, -0.105512f, -0.000835f, +0.000025f}, + {+0.004662f, -0.018565f, -0.002225f, +0.000116f, +0.000008f}, + {-0.764167f, +1.164667f, -0.105780f, -0.000566f, +0.000072f}, + {-0.005191f, -0.055847f, +0.006776f, -0.000297f, -0.000002f}, + {-0.122642f, +0.322608f, -0.022110f, -0.000056f, +0.000000f}, + {-0.022628f, +0.130641f, -0.002714f, -0.000204f, -0.000050f}, + {-0.518100f, -0.094410f, -0.062463f, -0.000139f, +0.000056f}, + {-0.018356f, +0.029667f, +0.006419f, -0.000243f, -0.000000f}, + {-0.434073f, -0.068727f, -0.052169f, -0.000227f, +0.000017f}, + {+0.049287f, -0.133318f, -0.004421f, -0.000132f, -0.000035f} + }, + { + {-0.038137f, -0.385406f, -0.010409f, +0.000707f, -0.000065f}, + {-0.097840f, -0.332634f, +0.030265f, +0.000594f, +0.000019f}, + {-0.190441f, -0.753884f, -0.002223f, -0.000383f, -0.000017f}, + {+0.365869f, -0.574688f, +0.044782f, -0.000359f, -0.000035f}, + {-0.005702f, +0.080693f, -0.004935f, -0.000052f, +0.000014f}, + {+0.509461f, -0.878965f, +0.054906f, +0.000325f, -0.000047f}, + {-0.004896f, -0.016910f, +0.005971f, +0.000183f, +0.000004f}, + {+0.637245f, -0.985968f, +0.074777f, +0.000503f, +0.000000f}, + {+0.005446f, -0.041391f, -0.014691f, -0.000099f, -0.000006f}, + {+0.137132f, -0.078455f, +0.021394f, +0.000266f, -0.000037f}, + {+0.070412f, -0.012539f, +0.007876f, -0.000375f, -0.000000f}, + {+0.143668f, -1.098716f, +0.019876f, +0.000534f, -0.000018f}, + {+0.019181f, -0.003090f, -0.008425f, -0.000093f, +0.000002f}, + {+0.119466f, -0.909317f, +0.014091f, +0.000299f, -0.000011f}, + {-0.055115f, -0.004451f, +0.006264f, -0.000044f, -0.000005f} + }, + { + {+0.331132f, +0.194225f, +0.057578f, +0.000747f, -0.000093f}, + {+0.175273f, -0.023562f, -0.023746f, -0.000630f, -0.000126f}, + {+0.627504f, +0.480941f, +0.082337f, -0.000333f, +0.000101f}, + {+0.295039f, -0.672027f, +0.054372f, +0.000122f, +0.000125f}, + {-0.006544f, +0.094670f, +0.007541f, +0.000004f, -0.000050f}, + {+0.400343f, -1.020229f, +0.073414f, +0.000516f, -0.000018f}, + {+0.004837f, -0.019428f, -0.006928f, -0.000132f, -0.000008f}, + {+0.360870f, -1.393762f, +0.062226f, +0.000263f, -0.000070f}, + {-0.004969f, -0.009476f, +0.020427f, +0.000267f, +0.000003f}, + {+0.102962f, -0.133692f, +0.017046f, +0.000058f, -0.000004f}, + {-0.042458f, -0.192483f, -0.007499f, +0.000213f, +0.000044f}, + {+0.507541f, -0.537711f, +0.066509f, -0.000058f, -0.000050f}, + {-0.017204f, -0.034316f, +0.007328f, +0.000233f, -0.000000f}, + {+0.395091f, -0.483632f, +0.051459f, +0.000055f, -0.000014f}, + {+0.040095f, +0.110095f, -0.006831f, +0.000094f, +0.000032f} + }, + { + {+0.118595f, +0.523257f, +0.014397f, -0.000463f, +0.000073f}, + {-0.174931f, +0.405419f, +0.015309f, -0.000501f, -0.000010f}, + {-0.085629f, +1.588035f, -0.029002f, +0.000587f, +0.000010f}, + {-0.316752f, +0.288723f, -0.050699f, +0.000422f, +0.000029f}, + {+0.017435f, +0.079802f, -0.006823f, +0.000058f, -0.000011f}, + {-0.476204f, +0.355299f, -0.072463f, -0.000079f, +0.000046f}, + {-0.004561f, -0.022768f, +0.004869f, -0.000147f, -0.000004f}, + {-0.635138f, +0.151731f, -0.087481f, -0.000351f, +0.000006f}, + {+0.004815f, +0.024980f, -0.013792f, +0.000134f, +0.000006f}, + {-0.073883f, +0.134688f, -0.012750f, -0.000315f, +0.000044f}, + {-0.040376f, -0.208056f, +0.002374f, +0.000265f, -0.000001f}, + {-0.382443f, +0.828469f, -0.051294f, -0.000303f, +0.000022f}, + {+0.013304f, -0.059405f, -0.004532f, +0.000098f, -0.000002f}, + {-0.307076f, +0.591577f, -0.037893f, -0.000141f, +0.000013f}, + {-0.012384f, +0.169012f, +0.004629f, +0.000016f, +0.000003f} + }, + { + {-0.514918f, -0.473428f, -0.087995f, -0.000860f, +0.000083f}, + {+0.090958f, +0.736090f, -0.010403f, +0.000616f, +0.000121f}, + {-0.768360f, +0.569571f, -0.085193f, +0.000271f, -0.000095f}, + {-0.205286f, +0.468697f, -0.034216f, -0.000126f, -0.000117f}, + {-0.024982f, +0.041935f, +0.006845f, -0.000024f, +0.000049f}, + {-0.232457f, +0.742372f, -0.038652f, -0.000352f, +0.000014f}, + {+0.004522f, -0.022618f, -0.002848f, +0.000146f, +0.000007f}, + {-0.082110f, +0.999819f, -0.024102f, -0.000126f, +0.000067f}, + {-0.004903f, +0.042022f, +0.006039f, -0.000260f, -0.000003f}, + {-0.150602f, +0.011535f, -0.025408f, -0.000192f, +0.000005f}, + {+0.101242f, -0.005388f, +0.004804f, -0.000253f, -0.000039f}, + {-0.331406f, +0.906789f, -0.045131f, +0.000102f, +0.000045f}, + {-0.008744f, -0.076724f, +0.003425f, -0.000233f, +0.000000f}, + {-0.231030f, +0.702736f, -0.034462f, -0.000025f, +0.000012f}, + {-0.015290f, +0.157067f, -0.000981f, -0.000080f, -0.000030f} + }, + { + {-0.064600f, -1.204603f, +0.013970f, +0.000498f, -0.000080f}, + {+0.037936f, +0.793387f, +0.004314f, +0.000485f, +0.000003f}, + {+0.595520f, -1.501640f, +0.073453f, -0.000796f, -0.000004f}, + {+0.278663f, -0.282968f, +0.046268f, -0.000521f, -0.000025f}, + {+0.027976f, -0.007913f, -0.009415f, -0.000065f, +0.000009f}, + {+0.409986f, -0.249242f, +0.062201f, -0.000134f, -0.000045f}, + {-0.004530f, -0.017687f, +0.002804f, +0.000122f, +0.000005f}, + {+0.488486f, +0.105010f, +0.077657f, +0.000063f, -0.000011f}, + {+0.004262f, +0.042796f, -0.004138f, -0.000154f, -0.000006f}, + {+0.059362f, -0.318787f, +0.016238f, +0.000296f, -0.000053f}, + {-0.077961f, +0.260388f, -0.008472f, -0.000205f, +0.000001f}, + {+0.502012f, -0.371002f, +0.065309f, +0.000097f, -0.000025f}, + {+0.003914f, -0.085047f, -0.003947f, -0.000097f, +0.000002f}, + {+0.370084f, -0.223772f, +0.048680f, -0.000002f, -0.000014f}, + {+0.031462f, +0.090310f, -0.000921f, +0.000011f, -0.000002f} + }, + { + {+0.827722f, +0.144595f, +0.104500f, +0.001071f, -0.000077f}, + {-0.149636f, +0.538052f, +0.006084f, -0.000611f, -0.000118f}, + {+0.467195f, -1.692609f, +0.058903f, +0.000104f, +0.000089f}, + {+0.205441f, -0.402400f, +0.029844f, +0.000329f, +0.000110f}, + {-0.025636f, -0.055618f, +0.011600f, +0.000028f, -0.000048f}, + {+0.191709f, -0.584087f, +0.033433f, +0.000494f, -0.000015f}, + {+0.004098f, -0.011944f, -0.002929f, -0.000161f, -0.000006f}, + {+0.007387f, -0.645944f, +0.005672f, +0.000317f, -0.000066f}, + {-0.002619f, +0.040624f, +0.003157f, +0.000276f, +0.000002f}, + {+0.247232f, -0.035269f, +0.031769f, +0.000397f, -0.000002f}, + {-0.020149f, +0.355606f, +0.004860f, +0.000282f, +0.000036f}, + {+0.097784f, -0.984307f, +0.019871f, +0.000081f, -0.000042f}, + {+0.001071f, -0.081553f, +0.003085f, +0.000224f, -0.000001f}, + {+0.058999f, -0.697197f, +0.013908f, +0.000158f, -0.000011f}, + {-0.031261f, +0.005952f, +0.001021f, +0.000072f, +0.000028f} + }, + { + {-0.385403f, +2.025003f, -0.067170f, -0.000984f, +0.000091f}, + {+0.191950f, +0.087119f, -0.014576f, -0.000500f, +0.000005f}, + {-0.901808f, +0.409162f, -0.113518f, +0.000622f, -0.000001f}, + {-0.340540f, +0.449344f, -0.057337f, +0.000418f, +0.000024f}, + {+0.018604f, -0.087716f, -0.010677f, +0.000076f, -0.000007f}, + {-0.428687f, +0.393778f, -0.074774f, -0.000048f, +0.000047f}, + {-0.003480f, -0.009550f, +0.002629f, -0.000103f, -0.000006f}, + {-0.427440f, +0.038949f, -0.073317f, -0.000052f, +0.000018f}, + {+0.000921f, +0.042725f, -0.001194f, +0.000126f, +0.000006f}, + {-0.163420f, +0.598589f, -0.028490f, -0.000385f, +0.000063f}, + {+0.118426f, +0.167571f, +0.002305f, +0.000179f, -0.000000f}, + {-0.474783f, -0.093712f, -0.068247f, -0.000172f, +0.000028f}, + {-0.005293f, -0.066220f, -0.000854f, +0.000098f, -0.000003f}, + {-0.330717f, -0.088966f, -0.048155f, -0.000042f, +0.000016f}, + {+0.017599f, -0.057663f, -0.001087f, -0.000028f, +0.000002f} + }, + { + {-0.820967f, +1.396060f, -0.082591f, -0.001080f, +0.000073f}, + {-0.150777f, -0.352435f, +0.014939f, +0.000525f, +0.000117f}, + {+0.085997f, +1.932699f, +0.012400f, -0.000333f, -0.000084f}, + {-0.167433f, +0.744157f, -0.009296f, -0.000465f, -0.000105f}, + {-0.009271f, -0.099001f, +0.007488f, -0.000034f, +0.000049f}, + {-0.168349f, +0.830150f, -0.008407f, -0.000668f, +0.000020f}, + {+0.003289f, -0.009763f, -0.003111f, +0.000178f, +0.000006f}, + {+0.019397f, +0.761830f, +0.016865f, -0.000546f, +0.000066f}, + {-0.000000f, +0.045818f, +0.000068f, -0.000275f, -0.000002f}, + {-0.278983f, +0.428651f, -0.030784f, -0.000466f, -0.000003f}, + {-0.137355f, -0.195198f, -0.005364f, -0.000280f, -0.000033f}, + {+0.072264f, +0.751091f, +0.007010f, -0.000263f, +0.000040f}, + {+0.007779f, -0.044555f, -0.000090f, -0.000218f, +0.000002f}, + {+0.046426f, +0.493923f, +0.003695f, -0.000284f, +0.000010f}, + {+0.001751f, -0.077278f, +0.001048f, -0.000070f, -0.000027f} + }, + { + {+0.973999f, -1.326967f, +0.113765f, +0.001528f, -0.000109f}, + {+0.054928f, -0.599328f, -0.011137f, +0.000543f, -0.000015f}, + {+0.802011f, +0.850769f, +0.092957f, -0.000268f, +0.000004f}, + {+0.480304f, -0.226458f, +0.056755f, -0.000175f, -0.000025f}, + {+0.000070f, -0.093592f, -0.004683f, -0.000080f, +0.000005f}, + {+0.586783f, -0.312533f, +0.076617f, +0.000454f, -0.000057f}, + {-0.003370f, -0.008879f, +0.003376f, +0.000086f, +0.000007f}, + {+0.502607f, +0.042700f, +0.063103f, +0.000302f, -0.000026f}, + {-0.000529f, +0.044011f, +0.001089f, -0.000099f, -0.000007f}, + {+0.341832f, -0.520706f, +0.046329f, +0.000527f, -0.000073f}, + {+0.055993f, -0.478277f, +0.004329f, -0.000157f, -0.000001f}, + {+0.391916f, +0.250262f, +0.060370f, +0.000436f, -0.000035f}, + {-0.008726f, -0.022784f, +0.000128f, -0.000090f, +0.000003f}, + {+0.271217f, +0.138661f, +0.043494f, +0.000221f, -0.000019f}, + {-0.018050f, -0.050444f, +0.000411f, +0.000043f, -0.000002f} + }, + { + {+0.276224f, -2.380785f, +0.034378f, +0.000866f, -0.000064f}, + {+0.044873f, -0.585962f, +0.006926f, -0.000401f, -0.000114f}, + {-0.574027f, -1.239612f, -0.059121f, +0.000267f, +0.000080f}, + {-0.051565f, -1.034040f, -0.006426f, +0.000409f, +0.000100f}, + {+0.007798f, -0.076508f, +0.001694f, +0.000056f, -0.000050f}, + {-0.075554f, -1.342643f, -0.020635f, +0.000711f, -0.000022f}, + {+0.003128f, -0.005933f, -0.002193f, -0.000201f, -0.000006f}, + {-0.238736f, -1.105056f, -0.040104f, +0.000589f, -0.000067f}, + {+0.001410f, +0.036177f, -0.004574f, +0.000285f, +0.000001f}, + {+0.166940f, -0.787265f, +0.018834f, +0.000377f, +0.000010f}, + {+0.071149f, -0.471140f, -0.003694f, +0.000274f, +0.000030f}, + {-0.174730f, -0.637003f, -0.029684f, +0.000268f, -0.000036f}, + {+0.008828f, -0.002646f, -0.001328f, +0.000217f, -0.000003f}, + {-0.100930f, -0.449452f, -0.020006f, +0.000267f, -0.000009f}, + {+0.024692f, +0.006183f, -0.002075f, +0.000066f, +0.000027f} + }, + { + {-1.151547f, -0.177019f, -0.147650f, -0.001592f, +0.000133f}, + {-0.105333f, -0.370152f, -0.000654f, -0.000526f, +0.000028f}, + {-0.320006f, -1.612536f, -0.049464f, +0.000016f, -0.000007f}, + {-0.464082f, -0.398816f, -0.059983f, +0.000056f, +0.000030f}, + {-0.013351f, -0.049795f, +0.002652f, +0.000078f, -0.000002f}, + {-0.597404f, -0.567240f, -0.065924f, -0.000645f, +0.000074f}, + {-0.002706f, -0.003059f, +0.001010f, -0.000072f, -0.000009f}, + {-0.415527f, -0.863967f, -0.040017f, -0.000487f, +0.000038f}, + {-0.002412f, +0.025484f, +0.007743f, +0.000094f, +0.000009f}, + {-0.472799f, +0.203811f, -0.066731f, -0.000530f, +0.000086f}, + {-0.155531f, -0.165362f, +0.003964f, +0.000115f, +0.000002f}, + {-0.322387f, -0.417885f, -0.044341f, -0.000578f, +0.000043f}, + {-0.007973f, +0.016214f, +0.002714f, +0.000076f, -0.000003f}, + {-0.247379f, -0.232595f, -0.032902f, -0.000318f, +0.000022f}, + {-0.019699f, +0.064382f, +0.001702f, -0.000054f, +0.000002f} + }, + { + {+0.400658f, +2.216876f, +0.055668f, -0.000786f, +0.000043f}, + {+0.109194f, -0.083429f, -0.007573f, +0.000253f, +0.000107f}, + {+0.639706f, -0.140902f, +0.072396f, -0.000014f, -0.000077f}, + {+0.284163f, +0.751145f, +0.036029f, -0.000355f, -0.000100f}, + {+0.015129f, -0.017585f, -0.004936f, -0.000112f, +0.000052f}, + {+0.410114f, +0.956869f, +0.044194f, -0.000792f, +0.000016f}, + {+0.002697f, -0.000614f, -0.001413f, +0.000236f, +0.000007f}, + {+0.477635f, +0.474194f, +0.047166f, -0.000567f, +0.000064f}, + {+0.002771f, +0.014429f, -0.007336f, -0.000334f, -0.000001f}, + {+0.049727f, +1.021215f, +0.015862f, -0.000365f, -0.000022f}, + {+0.141060f, +0.239229f, -0.003525f, -0.000303f, -0.000027f}, + {+0.290338f, +0.530583f, +0.044252f, -0.000186f, +0.000029f}, + {+0.005773f, +0.031476f, -0.001860f, -0.000232f, +0.000005f}, + {+0.196262f, +0.454853f, +0.031214f, -0.000182f, +0.000005f}, + {+0.006527f, +0.097970f, +0.000079f, -0.000058f, -0.000028f} + }, + { + {+0.868093f, +1.506363f, +0.106932f, +0.001127f, -0.000158f}, + {-0.067664f, +0.140222f, +0.011371f, +0.000441f, -0.000039f}, + {-0.138699f, +1.024949f, +0.006458f, -0.000057f, +0.000008f}, + {+0.283018f, +0.749840f, +0.039299f, -0.000170f, -0.000037f}, + {-0.012779f, +0.011725f, +0.003006f, -0.000081f, -0.000003f}, + {+0.316157f, +1.081824f, +0.047726f, +0.000449f, -0.000095f}, + {-0.002926f, +0.002650f, +0.002597f, +0.000070f, +0.000011f}, + {+0.076037f, +1.061627f, +0.021993f, +0.000408f, -0.000053f}, + {-0.002571f, +0.002805f, +0.005457f, -0.000106f, -0.000012f}, + {+0.502391f, +0.334226f, +0.062590f, +0.000351f, -0.000099f}, + {-0.042799f, +0.484671f, +0.002594f, -0.000076f, -0.000006f}, + {+0.197709f, +0.684398f, +0.023525f, +0.000465f, -0.000051f}, + {-0.002836f, +0.040016f, -0.000130f, -0.000063f, +0.000002f}, + {+0.171518f, +0.504587f, +0.018187f, +0.000242f, -0.000026f}, + {+0.008301f, +0.095457f, -0.001040f, +0.000064f, -0.000001f} + }, + { + {-0.898846f, -1.202312f, -0.111127f, +0.001054f, -0.000007f}, + {+0.010196f, +0.223325f, -0.008752f, -0.000136f, -0.000097f}, + {-0.343277f, +0.666136f, -0.062566f, -0.000124f, +0.000075f}, + {-0.388314f, -0.288336f, -0.051984f, +0.000529f, +0.000106f}, + {+0.007972f, +0.031942f, -0.000691f, +0.000217f, -0.000054f}, + {-0.507471f, -0.197123f, -0.067791f, +0.001087f, +0.000002f}, + {+0.002760f, +0.005282f, -0.002549f, -0.000290f, -0.000009f}, + {-0.402253f, +0.307883f, -0.055228f, +0.000714f, -0.000056f}, + {+0.002531f, -0.008752f, -0.005660f, +0.000405f, +0.000003f}, + {-0.355768f, -0.993327f, -0.054010f, +0.000596f, +0.000042f}, + {-0.070650f, +0.437311f, -0.001748f, +0.000403f, +0.000026f}, + {-0.384987f, -0.208099f, -0.051771f, +0.000179f, -0.000017f}, + {+0.000216f, +0.042554f, +0.000495f, +0.000270f, -0.000007f}, + {-0.294088f, -0.204484f, -0.037474f, +0.000164f, +0.000001f}, + {-0.019085f, +0.061907f, +0.001579f, +0.000039f, +0.000029f} + }, + { + {-0.228146f, -2.230393f, -0.030166f, -0.000587f, +0.000173f}, + {+0.033052f, +0.171093f, +0.003980f, -0.000320f, +0.000047f}, + {+0.238184f, -0.258410f, +0.031322f, +0.000240f, -0.000009f}, + {-0.060595f, -0.793993f, -0.008858f, +0.000376f, +0.000046f}, + {-0.002377f, +0.043131f, +0.000706f, +0.000112f, +0.000010f}, + {-0.019463f, -0.946515f, -0.006128f, -0.000060f, +0.000114f}, + {-0.002466f, +0.004796f, +0.002037f, -0.000078f, -0.000013f}, + {+0.132522f, -0.511850f, +0.009797f, -0.000155f, +0.000069f}, + {-0.002532f, -0.018222f, +0.007151f, +0.000156f, +0.000015f}, + {-0.304768f, -1.096493f, -0.025525f, -0.000145f, +0.000111f}, + {+0.131055f, +0.158121f, -0.000712f, +0.000078f, +0.000013f}, + {+0.021990f, -0.842357f, +0.005944f, -0.000249f, +0.000055f}, + {+0.002020f, +0.042106f, -0.000158f, +0.000068f, +0.000001f}, + {+0.008259f, -0.672729f, +0.003280f, -0.000105f, +0.000028f}, + {+0.022964f, +0.011433f, -0.003037f, -0.000076f, -0.000000f} + }, + { + {+0.943378f, -0.436639f, +0.116310f, -0.001367f, -0.000041f}, + {-0.046962f, +0.050077f, -0.001588f, +0.000089f, +0.000085f}, + {+0.115227f, -0.449376f, +0.023077f, +0.000072f, -0.000075f}, + {+0.372567f, -0.120225f, +0.052721f, -0.000876f, -0.000120f}, + {-0.003813f, +0.046155f, +0.001083f, -0.000386f, +0.000055f}, + {+0.431974f, -0.236971f, +0.064468f, -0.001509f, -0.000032f}, + {+0.002831f, +0.003049f, -0.003032f, +0.000347f, +0.000013f}, + {+0.218317f, -0.357086f, +0.041148f, -0.001062f, +0.000041f}, + {+0.001694f, -0.025754f, -0.005209f, -0.000509f, -0.000007f}, + {+0.587905f, +0.248972f, +0.065981f, -0.000907f, -0.000072f}, + {-0.114286f, -0.170813f, +0.005662f, -0.000568f, -0.000029f}, + {+0.348249f, -0.355643f, +0.039940f, -0.000232f, +0.000002f}, + {-0.004398f, +0.039085f, +0.001995f, -0.000345f, +0.000007f}, + {+0.269139f, -0.282868f, +0.029869f, -0.000211f, -0.000009f}, + {-0.019684f, -0.039612f, +0.003962f, +0.000005f, -0.000030f} + }, + { + {-0.455566f, +1.708875f, -0.054162f, +0.000452f, -0.000172f}, + {+0.035262f, -0.064121f, +0.000062f, +0.000231f, -0.000051f}, + {-0.192219f, +0.039136f, -0.030233f, -0.000391f, +0.000011f}, + {-0.151787f, +0.702282f, -0.027744f, -0.000493f, -0.000050f}, + {+0.009960f, +0.040659f, -0.007882f, -0.000214f, -0.000019f}, + {-0.200317f, +0.758329f, -0.036988f, -0.000194f, -0.000123f}, + {-0.003459f, +0.003635f, +0.004308f, +0.000084f, +0.000014f}, + {-0.162215f, +0.255755f, -0.032320f, -0.000076f, -0.000082f}, + {-0.000135f, -0.033298f, +0.000587f, -0.000205f, -0.000017f}, + {-0.163597f, +1.399723f, -0.024713f, +0.000130f, -0.000114f}, + {+0.045175f, -0.377794f, -0.007841f, -0.000148f, -0.000019f}, + {-0.257894f, +0.565628f, -0.027666f, +0.000174f, -0.000054f}, + {+0.006504f, +0.032761f, -0.005276f, -0.000103f, -0.000004f}, + {-0.196880f, +0.422739f, -0.020026f, +0.000069f, -0.000027f}, + {+0.011291f, -0.076665f, -0.001833f, +0.000107f, +0.000003f} + }, + { + {-0.444057f, +1.759202f, -0.044910f, +0.001154f, +0.000093f}, + {-0.012127f, -0.127298f, +0.000833f, -0.000130f, -0.000074f}, + {-0.000736f, +0.347729f, +0.000522f, +0.000086f, +0.000076f}, + {-0.239560f, +0.592487f, -0.021732f, +0.001117f, +0.000142f}, + {-0.013551f, +0.034533f, +0.015459f, +0.000651f, -0.000052f}, + {-0.268864f, +0.681606f, -0.026063f, +0.001734f, +0.000070f}, + {+0.003047f, +0.002921f, -0.004247f, -0.000377f, -0.000018f}, + {-0.120721f, +0.337691f, -0.012906f, +0.001430f, -0.000019f}, + {-0.000753f, -0.039259f, +0.000292f, +0.000617f, +0.000012f}, + {-0.399844f, +1.078267f, -0.029979f, +0.000861f, +0.000110f}, + {+0.028936f, -0.393495f, +0.000834f, +0.000759f, +0.000038f}, + {-0.100654f, +0.814206f, -0.010958f, +0.000157f, +0.000013f}, + {-0.007180f, +0.027581f, +0.007224f, +0.000461f, -0.000007f}, + {-0.071714f, +0.616249f, -0.009039f, +0.000190f, +0.000018f}, + {-0.001782f, -0.092803f, -0.001649f, -0.000099f, +0.000032f} + }, + { + {+0.728813f, +0.047272f, +0.045531f, -0.001250f, +0.000150f}, + {-0.008466f, -0.134677f, +0.000839f, -0.000257f, +0.000052f}, + {+0.134468f, +0.147689f, +0.015667f, +0.000389f, -0.000013f}, + {+0.321579f, -0.236917f, +0.029762f, +0.000320f, +0.000044f}, + {+0.013016f, +0.046042f, -0.019821f, +0.000430f, +0.000028f}, + {+0.381969f, -0.286254f, +0.040372f, -0.000025f, +0.000117f}, + {-0.001621f, -0.009205f, +0.006632f, -0.000044f, -0.000012f}, + {+0.213097f, -0.171134f, +0.032810f, +0.000096f, +0.000087f}, + {+0.000378f, -0.034238f, -0.001813f, +0.000202f, +0.000016f}, + {+0.504933f, -0.224919f, +0.022626f, -0.000611f, +0.000102f}, + {-0.070649f, -0.265425f, +0.011686f, +0.000225f, +0.000022f}, + {+0.281733f, +0.259419f, +0.016821f, -0.000441f, +0.000047f}, + {+0.006280f, +0.031928f, -0.008216f, +0.000194f, +0.000007f}, + {+0.204994f, +0.212232f, +0.013279f, -0.000247f, +0.000023f}, + {-0.004934f, -0.092931f, +0.003049f, -0.000200f, -0.000006f} + }, + { + {-0.353923f, -1.504513f, +0.026198f, +0.000545f, -0.000139f}, + {+0.018527f, -0.109078f, -0.005489f, +0.000329f, +0.000065f}, + {-0.084133f, -0.180735f, -0.004411f, -0.000172f, -0.000078f}, + {-0.104183f, -0.869931f, +0.000308f, -0.000867f, -0.000168f}, + {-0.010424f, +0.082861f, +0.023474f, -0.001146f, +0.000046f}, + {-0.127493f, -1.057421f, -0.005120f, -0.001301f, -0.000109f}, + {+0.000803f, -0.033408f, -0.011897f, +0.000322f, +0.000023f}, + {-0.062108f, -0.611802f, -0.014295f, -0.001580f, -0.000008f}, + {+0.000030f, -0.008195f, +0.013279f, -0.000688f, -0.000018f}, + {-0.204127f, -1.223298f, +0.023938f, +0.000236f, -0.000149f}, + {+0.071132f, -0.106572f, -0.019660f, -0.000889f, -0.000050f}, + {-0.178390f, -0.395869f, +0.009715f, +0.000384f, -0.000026f}, + {-0.005016f, +0.047389f, +0.010625f, -0.000684f, +0.000004f}, + {-0.128575f, -0.262828f, +0.007081f, +0.000112f, -0.000025f}, + {+0.007626f, -0.088100f, -0.003566f, +0.000334f, -0.000032f} + }, + { + {-0.075338f, -1.875564f, -0.028130f, +0.004946f, -0.000109f}, + {-0.017699f, -0.082875f, +0.011891f, +0.000578f, -0.000051f}, + {-0.014569f, -0.282345f, -0.006765f, -0.000076f, +0.000018f}, + {-0.098275f, -0.910450f, -0.000658f, +0.001363f, -0.000027f}, + {+0.008768f, +0.121239f, -0.024347f, -0.000668f, -0.000035f}, + {-0.119123f, -1.128831f, +0.005878f, +0.002349f, -0.000097f}, + {-0.001248f, -0.047660f, +0.005049f, -0.000271f, +0.000009f}, + {-0.091052f, -0.631081f, +0.008868f, +0.001055f, -0.000083f}, + {+0.000623f, +0.026673f, -0.017741f, +0.000098f, -0.000014f}, + {-0.085761f, -1.374119f, -0.016598f, +0.003245f, -0.000072f}, + {-0.047507f, -0.016577f, +0.027027f, +0.000146f, -0.000020f}, + {+0.006812f, -0.632429f, -0.018052f, +0.001598f, -0.000035f}, + {+0.004269f, +0.061685f, -0.010970f, -0.000271f, -0.000010f}, + {+0.004270f, -0.429230f, -0.015157f, +0.000963f, -0.000015f}, + {-0.007650f, -0.083453f, +0.006678f, +0.000424f, +0.000011f} + }, + { + {+0.203973f, -1.473074f, -0.075689f, -0.015004f, +0.000170f}, + {+0.011626f, -0.074867f, -0.018739f, -0.001759f, -0.000058f}, + {+0.044772f, -0.201047f, -0.007619f, -0.000789f, +0.000081f}, + {+0.130690f, -0.666998f, -0.072078f, -0.005629f, +0.000191f}, + {-0.007757f, +0.115969f, +0.000011f, +0.002169f, -0.000037f}, + {+0.162096f, -0.852420f, -0.101067f, -0.007596f, +0.000143f}, + {+0.001511f, -0.025585f, +0.020575f, +0.000815f, -0.000027f}, + {+0.110171f, -0.452560f, -0.069373f, -0.002637f, +0.000034f}, + {-0.001484f, +0.030725f, -0.011317f, -0.000203f, +0.000023f}, + {+0.156053f, -1.053067f, -0.069492f, -0.011059f, +0.000178f}, + {+0.023832f, -0.027507f, -0.053270f, -0.000794f, +0.000063f}, + {+0.062334f, -0.517524f, -0.008781f, -0.004770f, +0.000034f}, + {-0.003568f, +0.054558f, -0.002654f, +0.001067f, -0.000000f}, + {+0.044193f, -0.342467f, -0.002536f, -0.002717f, +0.000029f}, + {+0.006460f, -0.072498f, -0.005914f, -0.001329f, +0.000031f} + } +}; + +const float rightHRIRReal[BINAURAL_CONVBANDS][15][7]= +{ + { + {+0.065097f, +0.755993f, -0.042308f, -0.016140f, -0.000353f}, + {+0.331798f, +0.500334f, +0.042057f, -0.000623f, -0.000260f}, + {+0.268829f, +0.563281f, -0.027980f, +0.012635f, +0.000264f}, + {+0.017153f, +0.659896f, +0.043215f, -0.004248f, -0.000129f}, + {+0.308263f, +0.392544f, +0.075435f, +0.008861f, +0.000454f}, + {-0.002799f, +0.683738f, +0.064228f, -0.001971f, -0.000057f}, + {+0.340040f, +0.406891f, +0.099327f, +0.003281f, -0.000099f}, + {-0.005600f, +0.687288f, +0.073367f, +0.002388f, +0.000003f}, + {+0.359042f, +0.428800f, +0.081790f, -0.007190f, -0.000119f}, + {+0.099474f, +0.796217f, -0.032809f, +0.002997f, +0.000211f}, + {+0.292356f, +0.555445f, +0.036102f, -0.000529f, +0.000197f}, + {+0.013605f, +0.738918f, +0.023012f, +0.000843f, -0.000001f}, + {+0.307282f, +0.477407f, +0.075166f, -0.004779f, -0.000155f}, + {+0.042794f, +0.706213f, -0.002995f, +0.001494f, +0.000098f}, + {+0.281091f, +0.465219f, +0.066896f, -0.000299f, -0.000035f} + }, + { + {-0.155972f, +0.435567f, +0.001696f, +0.019851f, +0.000455f}, + {-0.353458f, -0.509988f, -0.056420f, -0.009429f, +0.000346f}, + {-0.299702f, -0.296454f, -0.171587f, -0.015118f, -0.000334f}, + {-0.049007f, +0.499063f, -0.006955f, +0.004572f, +0.000162f}, + {-0.384303f, -0.695188f, -0.062512f, -0.004920f, -0.000588f}, + {+0.009096f, +0.553377f, -0.035706f, +0.002161f, +0.000077f}, + {-0.410084f, -0.744388f, -0.042671f, -0.008434f, +0.000144f}, + {+0.017509f, +0.502285f, -0.095304f, -0.005007f, -0.000002f}, + {-0.422846f, -0.754362f, -0.007868f, +0.009061f, +0.000145f}, + {-0.207618f, +0.197622f, -0.120143f, -0.001519f, -0.000281f}, + {-0.305138f, -0.315719f, -0.007297f, +0.004583f, -0.000275f}, + {-0.036080f, +0.561553f, -0.077514f, -0.000495f, +0.000002f}, + {-0.364761f, -0.491207f, +0.031861f, +0.003380f, +0.000205f}, + {-0.110284f, +0.421449f, -0.065919f, +0.000908f, -0.000125f}, + {-0.350716f, -0.469227f, -0.004416f, -0.001014f, +0.000046f} + }, + { + {+0.148398f, -0.113536f, +0.104268f, +0.006075f, +0.000209f}, + {-0.323485f, -0.469909f, -0.145194f, +0.023185f, +0.000138f}, + {-0.242438f, -0.242764f, -0.307269f, -0.009509f, -0.000170f}, + {+0.072808f, +0.267881f, +0.028250f, +0.003545f, +0.000085f}, + {-0.215862f, -0.934866f, -0.055111f, -0.015314f, -0.000266f}, + {-0.016120f, +0.376941f, +0.115286f, +0.001385f, +0.000029f}, + {-0.250359f, -0.928708f, -0.097139f, +0.005263f, +0.000033f}, + {-0.028977f, +0.238147f, +0.130431f, +0.004028f, -0.000005f}, + {-0.277575f, -0.914671f, -0.028803f, +0.004826f, +0.000085f}, + {+0.128859f, -0.535717f, +0.113963f, -0.002797f, -0.000111f}, + {-0.313614f, -0.321544f, +0.015716f, -0.005124f, -0.000079f}, + {+0.050277f, +0.414961f, -0.069970f, -0.002463f, +0.000000f}, + {-0.248008f, -0.585440f, -0.019103f, +0.008130f, +0.000084f}, + {+0.132428f, +0.044930f, -0.036543f, -0.007329f, -0.000060f}, + {-0.194842f, -0.628903f, -0.049513f, +0.003377f, +0.000018f} + }, + { + {-0.039647f, -0.639517f, -0.130290f, -0.009887f, -0.000496f}, + {+0.383274f, +0.793256f, +0.075436f, -0.013955f, -0.000379f}, + {+0.330408f, +0.714152f, -0.130886f, +0.021668f, +0.000367f}, + {-0.083197f, +0.001747f, -0.017367f, -0.005258f, -0.000178f}, + {+0.464728f, +0.102297f, +0.053807f, +0.010396f, +0.000640f}, + {+0.021609f, +0.233041f, -0.037014f, -0.002411f, -0.000083f}, + {+0.461299f, +0.192640f, +0.026229f, +0.006396f, -0.000154f}, + {+0.035294f, +0.008603f, -0.100657f, -0.002303f, +0.000002f}, + {+0.456328f, +0.291948f, +0.120073f, -0.012388f, -0.000162f}, + {+0.061165f, -0.619283f, +0.120603f, -0.004430f, +0.000304f}, + {+0.395862f, +0.602011f, -0.015020f, -0.003248f, +0.000289f}, + {-0.060920f, +0.315700f, -0.014158f, +0.003953f, -0.000002f}, + {+0.438346f, +0.519275f, +0.088976f, -0.009090f, -0.000223f}, + {-0.102961f, -0.285909f, -0.017675f, +0.006341f, +0.000137f}, + {+0.405649f, +0.361696f, +0.077054f, -0.002517f, -0.000051f} + }, + { + {-0.103544f, -0.672790f, -0.058481f, -0.009739f, -0.000056f}, + {+0.380999f, +0.888812f, +0.016047f, -0.004923f, -0.000008f}, + {+0.258235f, +0.863786f, -0.100813f, -0.011244f, +0.000068f}, + {+0.078534f, -0.201752f, -0.033568f, +0.000310f, -0.000037f}, + {+0.019551f, +0.781090f, +0.010851f, +0.006905f, +0.000066f}, + {-0.023252f, +0.186630f, +0.029405f, +0.001392f, +0.000002f}, + {+0.115177f, +0.728991f, +0.003059f, -0.010749f, +0.000036f}, + {-0.033291f, -0.182857f, +0.100533f, +0.002041f, +0.000007f}, + {+0.205096f, +0.734110f, +0.017299f, +0.005567f, -0.000046f}, + {-0.192377f, -0.113959f, -0.034054f, +0.010827f, +0.000006f}, + {+0.269261f, +0.640318f, +0.057505f, +0.004206f, -0.000042f}, + {+0.070707f, +0.204232f, -0.045556f, -0.001847f, +0.000001f}, + {+0.140055f, +1.004074f, +0.009885f, +0.000675f, -0.000009f}, + {+0.036780f, -0.464778f, -0.011711f, +0.000291f, +0.000019f}, + {+0.081001f, +0.887772f, +0.009312f, -0.000279f, -0.000000f} + }, + { + {+0.184187f, -0.212362f, +0.027765f, +0.012735f, +0.000474f}, + {-0.586697f, -0.437179f, +0.015096f, +0.006145f, +0.000356f}, + {-0.472411f, -0.144599f, -0.068968f, +0.002017f, -0.000362f}, + {-0.061936f, -0.266099f, +0.068035f, +0.000129f, +0.000177f}, + {-0.365063f, +0.172041f, -0.065739f, -0.002884f, -0.000609f}, + {+0.021286f, +0.180378f, -0.022901f, -0.001701f, +0.000075f}, + {-0.405004f, -0.069937f, -0.057400f, +0.002695f, +0.000130f}, + {+0.025202f, -0.335796f, -0.076528f, -0.001726f, -0.000004f}, + {-0.478583f, -0.301757f, -0.092010f, +0.001413f, +0.000167f}, + {+0.154976f, +0.395476f, -0.044824f, -0.003029f, -0.000279f}, + {-0.470949f, -0.570889f, -0.098235f, +0.004844f, -0.000242f}, + {-0.074843f, +0.078065f, +0.015553f, -0.000685f, +0.000001f}, + {-0.483040f, +0.055164f, -0.071462f, +0.001762f, +0.000209f}, + {+0.038335f, -0.431382f, +0.011494f, -0.002348f, -0.000133f}, + {-0.431734f, +0.088265f, -0.072329f, +0.001071f, +0.000047f} + }, + { + {-0.146929f, +0.356773f, -0.016581f, +0.002055f, -0.000075f}, + {-0.214101f, -0.825087f, -0.066185f, +0.000965f, -0.000103f}, + {-0.135459f, -0.651791f, -0.013581f, -0.000703f, +0.000025f}, + {+0.038384f, -0.268419f, -0.031251f, +0.002959f, -0.000008f}, + {+0.038847f, -0.495569f, +0.025924f, -0.006854f, +0.000105f}, + {-0.018154f, +0.169210f, +0.024504f, +0.001571f, -0.000026f}, + {-0.079337f, -0.571205f, -0.006246f, +0.002621f, -0.000089f}, + {-0.015818f, -0.422015f, +0.021653f, -0.000024f, -0.000008f}, + {-0.136812f, -0.797142f, -0.065244f, -0.001101f, +0.000008f}, + {+0.012901f, +0.539621f, +0.002585f, -0.004212f, +0.000080f}, + {-0.217890f, -0.933082f, -0.059297f, -0.003993f, +0.000128f}, + {+0.068586f, -0.064970f, -0.028107f, +0.000485f, -0.000001f}, + {+0.031699f, -0.731627f, -0.000062f, +0.000473f, -0.000054f}, + {-0.092772f, -0.245311f, +0.002243f, +0.000286f, +0.000016f}, + {+0.082460f, -0.712005f, +0.004234f, -0.000440f, -0.000015f} + }, + { + {+0.018314f, +0.680755f, +0.032297f, -0.008490f, -0.000404f}, + {+0.611398f, +0.574488f, +0.132577f, +0.000536f, -0.000291f}, + {+0.551444f, +0.367923f, +0.049629f, -0.001834f, +0.000325f}, + {-0.012260f, -0.250758f, +0.023488f, -0.002058f, -0.000162f}, + {+0.277871f, -0.172746f, +0.040523f, +0.001132f, +0.000515f}, + {+0.015823f, +0.153476f, -0.022578f, -0.000055f, -0.000058f}, + {+0.376639f, +0.138309f, +0.069777f, +0.000055f, -0.000084f}, + {+0.007347f, -0.417292f, +0.006805f, +0.001245f, +0.000007f}, + {+0.477350f, +0.181888f, +0.060356f, -0.000003f, -0.000162f}, + {-0.167122f, +0.285438f, +0.017341f, +0.000307f, +0.000221f}, + {+0.573429f, +0.375283f, +0.120296f, -0.004646f, +0.000154f}, + {-0.054353f, -0.159170f, +0.029544f, +0.000892f, -0.000001f}, + {+0.377311f, -0.195661f, +0.058278f, +0.000257f, -0.000171f}, + {+0.106092f, +0.006237f, -0.017713f, -0.000001f, +0.000116f}, + {+0.331013f, -0.331514f, +0.046435f, +0.000351f, -0.000038f} + }, + { + {+0.118777f, +0.611157f, -0.050030f, +0.004000f, +0.000163f}, + {+0.170984f, +1.384757f, -0.039040f, -0.003010f, +0.000176f}, + {-0.052818f, +1.228959f, +0.011251f, +0.003260f, -0.000096f}, + {-0.012139f, -0.228439f, +0.001096f, -0.000637f, +0.000043f}, + {-0.019562f, +0.268846f, +0.002354f, +0.004033f, -0.000219f}, + {-0.014320f, +0.138566f, +0.015571f, -0.000211f, +0.000040f}, + {+0.090017f, +0.579117f, +0.021719f, -0.000837f, +0.000114f}, + {+0.000904f, -0.338203f, -0.037342f, -0.000311f, +0.000008f}, + {+0.130034f, +0.743858f, -0.008222f, -0.000663f, +0.000027f}, + {+0.179739f, -0.173374f, -0.001534f, +0.002899f, -0.000131f}, + {+0.115928f, +1.162104f, -0.019791f, +0.003082f, -0.000161f}, + {+0.037526f, -0.203676f, -0.025646f, -0.000674f, +0.000002f}, + {-0.060744f, +0.482829f, -0.012712f, -0.001111f, +0.000094f}, + {-0.075410f, +0.218852f, +0.013990f, +0.000730f, -0.000042f}, + {-0.143971f, +0.383732f, -0.006910f, -0.000214f, +0.000024f} + }, + { + {-0.184514f, +0.232965f, -0.017518f, +0.000152f, +0.000312f}, + {-0.807490f, -0.026691f, -0.098734f, +0.000219f, +0.000207f}, + {-0.515784f, +0.462974f, -0.088801f, -0.000046f, -0.000270f}, + {+0.029973f, -0.203154f, -0.022236f, +0.000420f, +0.000136f}, + {-0.254902f, -0.110250f, -0.053712f, +0.000918f, -0.000391f}, + {+0.012955f, +0.126129f, -0.020807f, -0.000502f, +0.000036f}, + {-0.418541f, -0.227202f, -0.074914f, -0.001208f, +0.000031f}, + {-0.008802f, -0.217584f, +0.058477f, -0.000886f, -0.000010f}, + {-0.572387f, -0.290118f, -0.071671f, -0.000020f, +0.000146f}, + {-0.042507f, -0.481981f, -0.015185f, +0.000016f, -0.000151f}, + {-0.695626f, -0.022757f, -0.084193f, +0.002681f, -0.000062f}, + {-0.019680f, -0.222079f, +0.017585f, -0.000416f, -0.000000f}, + {-0.317770f, +0.077733f, -0.061976f, -0.000151f, +0.000123f}, + {+0.016830f, +0.312605f, -0.010472f, -0.000204f, -0.000092f}, + {-0.217143f, +0.238281f, -0.049335f, -0.000227f, +0.000026f} + }, + { + {+0.146529f, -0.243723f, +0.016669f, -0.001428f, -0.000203f}, + {+0.154237f, -1.440153f, -0.007422f, +0.000459f, -0.000205f}, + {+0.206031f, -0.717998f, +0.067591f, -0.001193f, +0.000139f}, + {-0.037526f, -0.156993f, +0.015703f, +0.000451f, -0.000066f}, + {-0.018748f, -0.492688f, +0.002827f, -0.002315f, +0.000269f}, + {-0.011713f, +0.116894f, +0.013063f, +0.000119f, -0.000042f}, + {-0.076621f, -0.780750f, -0.001540f, +0.000308f, -0.000111f}, + {+0.014151f, -0.108817f, -0.045635f, +0.000506f, -0.000006f}, + {-0.039488f, -1.081391f, -0.009791f, +0.000804f, -0.000055f}, + {-0.126416f, -0.368535f, -0.013805f, -0.001337f, +0.000144f}, + {+0.124238f, -1.252180f, +0.016770f, -0.000493f, +0.000142f}, + {+0.000166f, -0.219151f, -0.008353f, +0.000282f, -0.000001f}, + {+0.031025f, -0.478719f, +0.013134f, +0.000211f, -0.000110f}, + {+0.042047f, +0.246034f, +0.010276f, -0.000124f, +0.000055f}, + {+0.092682f, -0.271438f, +0.022299f, +0.000036f, -0.000027f} + }, + { + {-0.032423f, -0.508411f, +0.010417f, +0.000540f, -0.000224f}, + {+0.717306f, -0.527984f, +0.109622f, +0.001464f, -0.000127f}, + {+0.415779f, -0.456457f, +0.054009f, -0.001183f, +0.000210f}, + {+0.034110f, -0.082630f, -0.002051f, +0.000151f, -0.000108f}, + {+0.323289f, +0.032788f, +0.054080f, -0.001475f, +0.000272f}, + {+0.010730f, +0.122479f, -0.003677f, +0.000287f, -0.000017f}, + {+0.525226f, +0.122988f, +0.067403f, +0.001113f, +0.000012f}, + {-0.015643f, -0.027790f, +0.041837f, +0.000236f, +0.000012f}, + {+0.675564f, +0.033502f, +0.097895f, +0.000381f, -0.000124f}, + {+0.181211f, +0.085734f, +0.016481f, -0.000081f, +0.000088f}, + {+0.654469f, -0.420272f, +0.101476f, -0.002012f, -0.000006f}, + {+0.018856f, -0.189020f, -0.004446f, +0.000550f, +0.000001f}, + {+0.363263f, +0.017311f, +0.051906f, +0.000569f, -0.000078f}, + {-0.074928f, +0.058140f, -0.007738f, -0.000250f, +0.000068f}, + {+0.225816f, -0.087066f, +0.029119f, +0.000432f, -0.000016f} + }, + { + {-0.086782f, -0.430290f, -0.006001f, +0.001071f, +0.000205f}, + {-0.362061f, +1.135109f, -0.040501f, -0.000664f, +0.000201f}, + {-0.302951f, +0.619319f, -0.033166f, +0.001127f, -0.000157f}, + {-0.021980f, -0.003541f, -0.004845f, -0.000274f, +0.000076f}, + {-0.037250f, +0.616935f, -0.022944f, +0.001028f, -0.000268f}, + {-0.009472f, +0.129217f, +0.010016f, +0.000286f, +0.000036f}, + {-0.056679f, +1.012051f, -0.011665f, -0.000109f, +0.000089f}, + {+0.014795f, +0.031579f, -0.030556f, -0.000016f, +0.000003f}, + {-0.163814f, +1.340003f, -0.033016f, -0.000957f, +0.000075f}, + {-0.074949f, +0.473861f, -0.003401f, +0.000369f, -0.000131f}, + {-0.307638f, +1.069995f, -0.048840f, -0.000531f, -0.000092f}, + {-0.033464f, -0.135518f, +0.013606f, -0.000372f, +0.000000f}, + {-0.079753f, +0.685928f, -0.009577f, -0.000077f, +0.000106f}, + {+0.068420f, -0.159620f, +0.007095f, +0.000110f, -0.000058f}, + {-0.099452f, +0.406945f, -0.015669f, -0.000283f, +0.000026f} + }, + { + {+0.138906f, -0.104979f, -0.002563f, -0.000358f, +0.000157f}, + {-0.557376f, +0.814078f, -0.086410f, -0.000931f, +0.000066f}, + {-0.280492f, +0.639239f, -0.047732f, +0.001095f, -0.000156f}, + {+0.005260f, +0.043405f, +0.000609f, -0.000311f, +0.000081f}, + {-0.371195f, +0.156517f, -0.031145f, +0.001354f, -0.000181f}, + {+0.007629f, +0.121467f, -0.014824f, -0.000379f, +0.000005f}, + {-0.561542f, +0.249151f, -0.070323f, -0.000414f, -0.000036f}, + {-0.013733f, +0.062362f, +0.017595f, -0.000262f, -0.000012f}, + {-0.678654f, +0.566827f, -0.087903f, -0.000251f, +0.000099f}, + {-0.098300f, +0.453623f, +0.000019f, -0.000161f, -0.000046f}, + {-0.568064f, +0.667487f, -0.086425f, +0.001295f, +0.000036f}, + {+0.042361f, -0.071284f, -0.017036f, -0.000408f, -0.000002f}, + {-0.402190f, +0.172791f, -0.066290f, -0.000281f, +0.000045f}, + {-0.027311f, -0.301640f, +0.000667f, +0.000173f, -0.000049f}, + {-0.257104f, +0.165575f, -0.034835f, -0.000136f, +0.000009f} + }, + { + {-0.098992f, +0.234471f, +0.000967f, -0.001112f, -0.000187f}, + {+0.476921f, -0.802345f, +0.077189f, +0.000344f, -0.000179f}, + {+0.323707f, -0.292306f, +0.044893f, -0.000717f, +0.000157f}, + {+0.010870f, +0.036847f, +0.001479f, +0.000007f, -0.000078f}, + {+0.179294f, -0.643565f, +0.012366f, -0.000379f, +0.000239f}, + {-0.006232f, +0.105431f, +0.010918f, -0.000223f, -0.000026f}, + {+0.249036f, -0.981186f, +0.030586f, -0.000163f, -0.000062f}, + {+0.012514f, +0.068559f, -0.014306f, -0.000207f, -0.000000f}, + {+0.416847f, -1.110949f, +0.058552f, +0.000570f, -0.000085f}, + {+0.188152f, +0.044185f, +0.004896f, +0.000176f, +0.000105f}, + {+0.467287f, -0.932191f, +0.070050f, +0.000351f, +0.000038f}, + {-0.046644f, -0.000064f, +0.016904f, +0.000318f, +0.000001f}, + {+0.179916f, -0.746327f, +0.038444f, -0.000179f, -0.000093f}, + {-0.028475f, -0.305656f, +0.002048f, +0.000046f, +0.000055f}, + {+0.178760f, -0.505255f, +0.027471f, +0.000200f, -0.000023f} + }, + { + {+0.005481f, +0.368975f, -0.002721f, +0.000254f, -0.000115f}, + {+0.384211f, -0.978413f, +0.043445f, +0.000530f, -0.000029f}, + {+0.154591f, -0.550579f, +0.029567f, -0.001141f, +0.000115f}, + {-0.021434f, -0.017235f, -0.003173f, +0.000460f, -0.000060f}, + {+0.266428f, -0.493827f, +0.040804f, -0.001001f, +0.000125f}, + {+0.006496f, +0.103409f, -0.001694f, +0.000280f, +0.000000f}, + {+0.451732f, -0.667864f, +0.062771f, +0.000016f, +0.000041f}, + {-0.010071f, +0.065620f, +0.009733f, +0.000546f, +0.000011f}, + {+0.506838f, -0.990193f, +0.061492f, +0.000371f, -0.000076f}, + {-0.121392f, -0.400529f, -0.003585f, +0.000276f, +0.000026f}, + {+0.435632f, -0.982401f, +0.064723f, -0.000420f, -0.000031f}, + {+0.046420f, +0.075076f, -0.022164f, +0.000390f, +0.000001f}, + {+0.407029f, -0.424143f, +0.048193f, +0.000134f, -0.000026f}, + {+0.073686f, -0.182458f, -0.012175f, -0.000094f, +0.000035f}, + {+0.224681f, -0.441124f, +0.027691f, +0.000016f, -0.000005f} + }, + { + {+0.072256f, +0.247522f, +0.011047f, +0.000898f, +0.000166f}, + {-0.537444f, +0.391511f, -0.053573f, -0.000309f, +0.000155f}, + {-0.268495f, +0.099855f, -0.038956f, +0.000890f, -0.000148f}, + {+0.023536f, -0.095547f, +0.007158f, +0.000060f, +0.000074f}, + {-0.195179f, +0.204502f, -0.019530f, +0.000276f, -0.000203f}, + {-0.007874f, +0.129654f, -0.005374f, +0.000048f, +0.000017f}, + {-0.345472f, +0.542489f, -0.039670f, +0.000199f, +0.000041f}, + {+0.006721f, +0.070928f, -0.007401f, -0.000049f, -0.000002f}, + {-0.560568f, +0.609885f, -0.057263f, -0.000322f, +0.000088f}, + {-0.039227f, -0.513525f, -0.001068f, -0.000231f, -0.000082f}, + {-0.610684f, +0.636416f, -0.091664f, +0.000136f, +0.000001f}, + {-0.040836f, +0.145282f, +0.019055f, -0.000387f, -0.000002f}, + {-0.333249f, +0.693829f, -0.042608f, +0.000238f, +0.000079f}, + {-0.089206f, +0.013435f, +0.012733f, -0.000199f, -0.000050f}, + {-0.263338f, +0.298008f, -0.031541f, -0.000114f, +0.000020f} + }, + { + {-0.085209f, +0.001303f, -0.012125f, -0.000292f, +0.000093f}, + {-0.160066f, +0.918225f, -0.045394f, -0.000293f, +0.000011f}, + {-0.102157f, +0.356092f, -0.019747f, +0.000505f, -0.000086f}, + {-0.017226f, -0.166626f, -0.005117f, -0.000479f, +0.000045f}, + {-0.174693f, +0.217382f, -0.037036f, +0.000630f, -0.000096f}, + {+0.008665f, +0.171697f, +0.007680f, -0.000098f, -0.000000f}, + {-0.288147f, +0.609002f, -0.054190f, -0.000017f, -0.000036f}, + {-0.003968f, +0.096005f, +0.018153f, -0.000493f, -0.000010f}, + {-0.229723f, +1.072643f, -0.054307f, -0.000488f, +0.000056f}, + {+0.157771f, -0.227591f, +0.005941f, -0.000300f, -0.000020f}, + {-0.212710f, +1.267628f, -0.026077f, -0.000164f, +0.000007f}, + {+0.030782f, +0.196705f, -0.014807f, -0.000278f, -0.000001f}, + {-0.296558f, +0.745264f, -0.041636f, -0.000185f, +0.000018f}, + {+0.069593f, +0.208136f, -0.005292f, +0.000148f, -0.000027f}, + {-0.103485f, +0.531731f, -0.020590f, -0.000071f, +0.000003f} + }, + { + {+0.033117f, -0.182372f, +0.007361f, -0.000407f, -0.000152f}, + {+0.426995f, -0.026160f, +0.075584f, +0.000384f, -0.000138f}, + {+0.205232f, -0.119429f, +0.035586f, -0.000437f, +0.000136f}, + {+0.004684f, -0.206673f, +0.001813f, -0.000058f, -0.000068f}, + {+0.090872f, -0.196225f, +0.015881f, -0.000291f, +0.000176f}, + {-0.008516f, +0.193605f, +0.007387f, +0.000064f, -0.000011f}, + {+0.266047f, -0.253711f, +0.042204f, +0.000078f, -0.000031f}, + {+0.002194f, +0.127519f, -0.015841f, +0.000173f, +0.000003f}, + {+0.445166f, +0.009848f, +0.068320f, +0.000242f, -0.000086f}, + {-0.143733f, +0.204102f, -0.007498f, +0.000099f, +0.000068f}, + {+0.653853f, -0.044366f, +0.083241f, -0.000449f, -0.000016f}, + {-0.018863f, +0.213641f, +0.019293f, +0.000408f, +0.000002f}, + {+0.420542f, -0.349056f, +0.054233f, -0.000061f, -0.000070f}, + {-0.024286f, +0.323130f, +0.003874f, +0.000198f, +0.000045f}, + {+0.232709f, +0.005344f, +0.036305f, +0.000167f, -0.000019f} + }, + { + {+0.042197f, -0.181663f, +0.000704f, +0.000165f, -0.000080f}, + {+0.089909f, -0.571072f, +0.008880f, +0.000372f, -0.000000f}, + {+0.122444f, -0.252602f, +0.019305f, -0.000516f, +0.000067f}, + {+0.010922f, -0.213934f, -0.007537f, +0.000454f, -0.000035f}, + {+0.260724f, +0.080462f, +0.049056f, -0.000542f, +0.000082f}, + {+0.008776f, +0.169245f, -0.028486f, -0.000010f, -0.000002f}, + {+0.297505f, -0.194867f, +0.053446f, +0.000084f, +0.000029f}, + {-0.000225f, +0.131429f, -0.009064f, +0.000495f, +0.000008f}, + {+0.159504f, -0.423362f, +0.035243f, +0.000592f, -0.000041f}, + {+0.021636f, +0.436573f, -0.003498f, +0.000232f, +0.000020f}, + {-0.055924f, -1.120425f, +0.002613f, +0.000280f, +0.000017f}, + {+0.006982f, +0.197623f, -0.019428f, +0.000152f, -0.000000f}, + {+0.129375f, -0.785134f, +0.025534f, +0.000269f, -0.000013f}, + {-0.026817f, +0.307487f, -0.006434f, -0.000185f, +0.000021f}, + {+0.038219f, -0.300110f, +0.006087f, +0.000100f, -0.000002f} + }, + { + {-0.085777f, +0.000630f, -0.007870f, +0.000280f, +0.000146f}, + {-0.339312f, +0.074962f, -0.051465f, -0.000668f, +0.000130f}, + {-0.200338f, +0.240178f, -0.031754f, +0.000345f, -0.000127f}, + {-0.026013f, -0.198501f, +0.018543f, +0.000031f, +0.000062f}, + {-0.072064f, +0.618750f, -0.029586f, +0.000304f, -0.000160f}, + {-0.010082f, +0.121187f, +0.026049f, -0.000154f, +0.000009f}, + {-0.221101f, +0.623925f, -0.048561f, -0.000345f, +0.000030f}, + {-0.002595f, +0.108691f, +0.015618f, -0.000378f, -0.000004f}, + {-0.325381f, +0.349589f, -0.066982f, -0.000444f, +0.000083f}, + {+0.099695f, +0.316098f, +0.009372f, -0.000014f, -0.000062f}, + {-0.514573f, -0.402861f, -0.079237f, +0.000423f, +0.000014f}, + {+0.004094f, +0.165937f, +0.008745f, -0.000341f, -0.000002f}, + {-0.384492f, +0.011534f, -0.056805f, -0.000185f, +0.000066f}, + {+0.061892f, +0.175063f, +0.001504f, -0.000187f, -0.000042f}, + {-0.164069f, +0.005476f, -0.024648f, -0.000226f, +0.000020f} + }, + { + {+0.065059f, +0.235026f, +0.008783f, -0.000266f, +0.000068f}, + {-0.098656f, +0.437384f, -0.016382f, -0.000247f, -0.000011f}, + {-0.150935f, +0.318418f, -0.020125f, +0.000567f, -0.000053f}, + {+0.037203f, -0.163560f, -0.021631f, -0.000436f, +0.000028f}, + {-0.479166f, +0.005919f, -0.062327f, +0.000735f, -0.000072f}, + {+0.011144f, +0.082078f, -0.020960f, +0.000115f, +0.000004f}, + {-0.472890f, +0.243160f, -0.064367f, +0.000012f, -0.000028f}, + {+0.005275f, +0.088802f, -0.005814f, -0.000347f, -0.000006f}, + {-0.303139f, +0.407030f, -0.033834f, -0.000330f, +0.000029f}, + {-0.124040f, -0.011330f, -0.004638f, -0.000115f, -0.000018f}, + {+0.180901f, +0.678258f, +0.023830f, -0.000002f, -0.000032f}, + {-0.013327f, +0.130330f, +0.001759f, -0.000128f, +0.000001f}, + {-0.025939f, +0.562001f, -0.008804f, -0.000193f, +0.000008f}, + {-0.067066f, -0.006134f, +0.002098f, +0.000244f, -0.000017f}, + {-0.054906f, +0.166617f, -0.011465f, -0.000062f, -0.000000f} + }, + { + {+0.006166f, +0.343773f, -0.005499f, -0.000294f, -0.000144f}, + {+0.320866f, -0.218530f, +0.058362f, +0.000559f, -0.000126f}, + {+0.255028f, -0.301056f, +0.038086f, -0.000395f, +0.000120f}, + {-0.042070f, -0.106963f, +0.016516f, -0.000008f, -0.000058f}, + {+0.361545f, -1.309013f, +0.070307f, -0.000422f, +0.000152f}, + {-0.010654f, +0.051598f, +0.023066f, +0.000137f, -0.000008f}, + {+0.455727f, -1.211865f, +0.087077f, +0.000179f, -0.000032f}, + {-0.006671f, +0.068373f, +0.015541f, +0.000442f, +0.000003f}, + {+0.477408f, -0.797872f, +0.082786f, +0.000369f, -0.000079f}, + {+0.046569f, -0.253576f, -0.003537f, +0.000061f, +0.000060f}, + {+0.362855f, +0.403212f, +0.056493f, -0.000231f, -0.000005f}, + {+0.019451f, +0.092196f, -0.005980f, +0.000308f, +0.000002f}, + {+0.290094f, +0.073135f, +0.047603f, +0.000171f, -0.000065f}, + {+0.042598f, -0.156557f, -0.000577f, +0.000163f, +0.000040f}, + {+0.131628f, -0.125669f, +0.025251f, +0.000176f, -0.000020f} + }, + { + {-0.075253f, +0.241790f, +0.004245f, +0.000388f, -0.000054f}, + {+0.115417f, -0.555843f, +0.004505f, +0.000201f, +0.000026f}, + {+0.118398f, -0.515206f, +0.013944f, -0.000514f, +0.000042f}, + {+0.039535f, -0.038091f, -0.014039f, +0.000458f, -0.000023f}, + {+0.462279f, -1.209973f, +0.032503f, -0.000851f, +0.000062f}, + {+0.009084f, +0.026049f, -0.016775f, -0.000189f, -0.000005f}, + {+0.492506f, -1.210168f, +0.036127f, -0.000015f, +0.000032f}, + {+0.007053f, +0.028506f, -0.029001f, +0.000197f, +0.000006f}, + {+0.335910f, -1.043865f, +0.025309f, +0.000109f, -0.000019f}, + {+0.051079f, -0.232226f, +0.008818f, -0.000021f, +0.000013f}, + {-0.209396f, -0.481664f, -0.029573f, -0.000397f, +0.000036f}, + {-0.022163f, +0.049801f, +0.004489f, +0.000120f, -0.000002f}, + {+0.049189f, -0.291808f, +0.012095f, +0.000124f, -0.000000f}, + {-0.001464f, -0.219720f, -0.003238f, -0.000281f, +0.000013f}, + {+0.129999f, -0.125792f, +0.018671f, +0.000033f, +0.000004f} + }, + { + {+0.089265f, +0.008101f, +0.003220f, +0.000420f, +0.000142f}, + {-0.374092f, +0.167831f, -0.047437f, -0.000248f, +0.000121f}, + {-0.277419f, +0.075693f, -0.034361f, +0.000382f, -0.000114f}, + {-0.030038f, +0.022987f, +0.012744f, -0.000055f, +0.000055f}, + {-0.753816f, +0.593618f, -0.075656f, +0.000583f, -0.000146f}, + {-0.007625f, +0.012494f, +0.008216f, -0.000012f, +0.000009f}, + {-0.872319f, +0.834025f, -0.101372f, +0.000238f, +0.000033f}, + {-0.007349f, -0.013392f, +0.018697f, -0.000404f, -0.000002f}, + {-0.818122f, +0.708126f, -0.108543f, -0.000003f, +0.000077f}, + {-0.080964f, -0.024571f, -0.007134f, -0.000112f, -0.000058f}, + {-0.256898f, -0.416364f, -0.039682f, +0.000207f, -0.000001f}, + {+0.021854f, +0.003552f, -0.004353f, -0.000284f, -0.000001f}, + {-0.278977f, +0.233656f, -0.056880f, +0.000052f, +0.000063f}, + {-0.037961f, -0.179808f, +0.005183f, -0.000145f, -0.000038f}, + {-0.208673f, +0.408473f, -0.040386f, -0.000034f, +0.000020f} + }, + { + {-0.034338f, -0.173588f, -0.006688f, -0.000500f, +0.000038f}, + {-0.042237f, +0.656912f, -0.009701f, -0.000238f, -0.000044f}, + {-0.090138f, +0.334092f, -0.026473f, +0.000394f, -0.000031f}, + {+0.015852f, +0.059753f, -0.008148f, -0.000431f, +0.000019f}, + {-0.008439f, +1.693558f, -0.014027f, +0.000600f, -0.000050f}, + {+0.006434f, +0.012796f, -0.004682f, +0.000161f, +0.000005f}, + {-0.054347f, +2.067775f, -0.007313f, -0.000217f, -0.000039f}, + {+0.007506f, -0.034599f, -0.009095f, -0.000072f, -0.000006f}, + {+0.015520f, +1.997278f, +0.014755f, -0.000307f, +0.000011f}, + {+0.028007f, +0.138657f, +0.001260f, +0.000016f, -0.000007f}, + {+0.214043f, +0.306979f, +0.029626f, +0.000432f, -0.000035f}, + {-0.018621f, -0.040993f, +0.005040f, -0.000117f, +0.000002f}, + {-0.117787f, +0.510563f, -0.001680f, -0.000212f, -0.000008f}, + {+0.059932f, -0.061203f, -0.006185f, +0.000277f, -0.000010f}, + {-0.157100f, +0.507113f, -0.009834f, -0.000125f, -0.000007f} + }, + { + {-0.055343f, -0.147303f, -0.000195f, -0.000468f, -0.000137f}, + {+0.350728f, +0.053490f, +0.051079f, +0.000061f, -0.000112f}, + {+0.264173f, -0.242538f, +0.053572f, -0.000237f, +0.000109f}, + {-0.000679f, +0.065959f, +0.002851f, +0.000063f, -0.000053f}, + {+0.698387f, +0.600659f, +0.086640f, -0.000476f, +0.000138f}, + {-0.005046f, +0.021011f, +0.002443f, -0.000074f, -0.000009f}, + {+0.914982f, +0.594809f, +0.107925f, -0.000398f, -0.000028f}, + {-0.006616f, -0.041999f, +0.008530f, +0.000270f, +0.000002f}, + {+0.908394f, +0.659090f, +0.104076f, -0.000152f, -0.000074f}, + {+0.044182f, +0.106382f, +0.006281f, +0.000190f, +0.000054f}, + {+0.160270f, +0.395898f, +0.025961f, -0.000172f, +0.000001f}, + {+0.012773f, -0.075787f, -0.003315f, +0.000265f, +0.000000f}, + {+0.442662f, -0.331872f, +0.060257f, -0.000149f, -0.000059f}, + {-0.056862f, +0.082167f, +0.007314f, +0.000153f, +0.000036f}, + {+0.379945f, -0.304856f, +0.049455f, +0.000017f, -0.000018f} + }, + { + {+0.121111f, +0.105739f, +0.007673f, +0.000471f, -0.000024f}, + {+0.012153f, -0.450064f, +0.007566f, +0.000184f, +0.000059f}, + {+0.184762f, -0.381675f, +0.018118f, -0.000313f, +0.000022f}, + {-0.011948f, +0.043954f, -0.000567f, +0.000421f, -0.000015f}, + {-0.329773f, -0.952298f, -0.024562f, -0.000268f, +0.000039f}, + {+0.003684f, +0.030620f, +0.000252f, -0.000116f, -0.000005f}, + {-0.420755f, -1.412733f, -0.032280f, +0.000429f, +0.000045f}, + {+0.004497f, -0.053106f, -0.011474f, +0.000072f, +0.000006f}, + {-0.511638f, -1.483614f, -0.052171f, +0.000647f, -0.000004f}, + {-0.060146f, -0.060453f, -0.010041f, +0.000057f, +0.000002f}, + {-0.173759f, -0.112610f, -0.023303f, -0.000248f, +0.000035f}, + {-0.005701f, -0.095076f, +0.000618f, +0.000109f, -0.000002f}, + {-0.012206f, -1.032650f, -0.010110f, +0.000297f, +0.000015f}, + {+0.031812f, +0.189096f, -0.005956f, -0.000264f, +0.000006f}, + {-0.000197f, -0.889296f, -0.006036f, +0.000199f, +0.000010f} + }, + { + {-0.115841f, +0.454362f, -0.009607f, +0.000493f, +0.000130f}, + {-0.308921f, +0.056304f, -0.054693f, -0.000123f, +0.000099f}, + {-0.468248f, +0.632981f, -0.076258f, -0.000010f, -0.000104f}, + {+0.019902f, +0.002281f, -0.001334f, -0.000072f, +0.000051f}, + {-0.400691f, -0.806429f, -0.070547f, +0.000137f, -0.000130f}, + {-0.002929f, +0.038041f, +0.000093f, +0.000104f, +0.000008f}, + {-0.561484f, -1.148223f, -0.095621f, +0.000111f, +0.000021f}, + {-0.002238f, -0.072975f, +0.011177f, -0.000205f, -0.000002f}, + {-0.562963f, -1.379756f, -0.082927f, -0.000084f, +0.000071f}, + {+0.004354f, -0.167075f, +0.005365f, -0.000234f, -0.000047f}, + {-0.102439f, -0.221815f, -0.020196f, +0.000101f, +0.000002f}, + {-0.001012f, -0.099078f, +0.000515f, -0.000243f, +0.000000f}, + {-0.540858f, -0.235487f, -0.066321f, -0.000007f, +0.000053f}, + {+0.003001f, +0.218213f, +0.002283f, -0.000153f, -0.000034f}, + {-0.439169f, -0.226555f, -0.052369f, -0.000162f, +0.000015f} + }, + { + {+0.032349f, +0.694662f, +0.012758f, -0.000446f, +0.000014f}, + {-0.081188f, +0.400832f, -0.010403f, +0.000124f, -0.000070f}, + {-0.102023f, +1.229099f, +0.009207f, +0.000429f, -0.000013f}, + {-0.022184f, -0.047173f, +0.004443f, -0.000402f, +0.000012f}, + {+0.347929f, +0.367903f, +0.051025f, +0.000195f, -0.000031f}, + {+0.002610f, +0.041165f, -0.003133f, +0.000103f, +0.000004f}, + {+0.510442f, +0.525808f, +0.072327f, -0.000281f, -0.000047f}, + {+0.000849f, -0.085438f, -0.000581f, -0.000088f, -0.000006f}, + {+0.669928f, +0.515263f, +0.083893f, -0.000680f, -0.000003f}, + {+0.067239f, -0.080999f, +0.004236f, -0.000134f, +0.000001f}, + {+0.101744f, +0.091783f, +0.017192f, +0.000137f, -0.000040f}, + {+0.006834f, -0.091129f, -0.000945f, -0.000105f, +0.000002f}, + {+0.274659f, +1.003091f, +0.034427f, -0.000152f, -0.000020f}, + {-0.032253f, +0.165928f, +0.001139f, +0.000244f, -0.000004f}, + {+0.228304f, +0.784175f, +0.026351f, -0.000099f, -0.000012f} + }, + { + {+0.089764f, +0.665763f, -0.020998f, -0.000429f, -0.000123f}, + {+0.396918f, -0.353503f, +0.073018f, +0.000145f, -0.000087f}, + {+0.745929f, -0.045441f, +0.089693f, +0.000119f, +0.000098f}, + {+0.018527f, -0.092896f, -0.004776f, +0.000076f, -0.000050f}, + {+0.234618f, +0.545507f, +0.039468f, +0.000111f, +0.000121f}, + {-0.002166f, +0.038716f, +0.004774f, -0.000126f, -0.000007f}, + {+0.294897f, +0.855450f, +0.052819f, +0.000226f, -0.000015f}, + {-0.000019f, -0.074618f, -0.009489f, +0.000190f, +0.000003f}, + {+0.194521f, +1.226314f, +0.042565f, +0.000368f, -0.000068f}, + {-0.081034f, +0.139024f, -0.009034f, +0.000234f, +0.000041f}, + {+0.118924f, +0.067017f, +0.021010f, -0.000093f, -0.000004f}, + {-0.011664f, -0.073753f, +0.003424f, +0.000235f, -0.000000f}, + {+0.432071f, +0.753555f, +0.060819f, +0.000167f, -0.000047f}, + {+0.045018f, +0.063998f, -0.003105f, +0.000140f, +0.000031f}, + {+0.318718f, +0.633800f, +0.046975f, +0.000280f, -0.000013f} + }, + { + {-0.185438f, +0.347292f, +0.027738f, +0.000431f, -0.000007f}, + {+0.127577f, -0.781157f, +0.003436f, -0.000401f, +0.000077f}, + {-0.338528f, -1.710682f, -0.053558f, -0.000664f, +0.000007f}, + {-0.010081f, -0.125578f, +0.001189f, +0.000386f, -0.000010f}, + {-0.290346f, -0.267538f, -0.045568f, -0.000347f, +0.000027f}, + {+0.001693f, +0.032268f, -0.003639f, -0.000084f, -0.000005f}, + {-0.437981f, -0.284534f, -0.069222f, -0.000040f, +0.000045f}, + {-0.001220f, -0.049868f, +0.009105f, +0.000117f, +0.000006f}, + {-0.562551f, +0.041789f, -0.085721f, +0.000415f, +0.000009f}, + {+0.014212f, +0.289512f, +0.004929f, +0.000179f, -0.000001f}, + {-0.056836f, -0.200124f, -0.011607f, -0.000196f, +0.000048f}, + {+0.014738f, -0.050287f, -0.006832f, +0.000096f, -0.000002f}, + {-0.459556f, -0.619782f, -0.062717f, -0.000131f, +0.000023f}, + {-0.038854f, -0.040374f, +0.004775f, -0.000223f, +0.000003f}, + {-0.352434f, -0.403959f, -0.049061f, -0.000107f, +0.000013f} + }, + { + {+0.203018f, -0.123894f, -0.025192f, +0.000369f, +0.000119f}, + {-0.672441f, +0.461693f, -0.106438f, +0.000019f, +0.000079f}, + {-0.670572f, -1.221467f, -0.075011f, +0.000089f, -0.000092f}, + {-0.000441f, -0.139722f, +0.002901f, -0.000086f, +0.000048f}, + {-0.198726f, -0.405927f, -0.034209f, -0.000080f, -0.000113f}, + {-0.001617f, +0.026895f, +0.002212f, +0.000129f, +0.000007f}, + {-0.200203f, -0.651588f, -0.036520f, -0.000303f, +0.000014f}, + {+0.002914f, -0.030011f, -0.007149f, -0.000236f, -0.000003f}, + {-0.025090f, -0.786071f, -0.013678f, -0.000386f, +0.000067f}, + {+0.081825f, +0.202685f, +0.002109f, -0.000238f, -0.000037f}, + {-0.196100f, +0.020016f, -0.033192f, +0.000220f, +0.000004f}, + {-0.015355f, -0.026466f, +0.007870f, -0.000233f, +0.000001f}, + {-0.214693f, -0.997978f, -0.031905f, -0.000100f, +0.000043f}, + {+0.019088f, -0.106339f, -0.005835f, -0.000125f, -0.000029f}, + {-0.141519f, -0.731019f, -0.021460f, -0.000220f, +0.000012f} + }, + { + {-0.134009f, -0.533107f, +0.016049f, -0.000482f, -0.000001f}, + {+0.105382f, +1.702756f, +0.047818f, +0.000264f, -0.000085f}, + {+0.795676f, +1.009808f, +0.094796f, +0.000697f, -0.000001f}, + {+0.010291f, -0.134575f, -0.004870f, -0.000384f, +0.000008f}, + {+0.291563f, +0.365793f, +0.053919f, +0.000403f, -0.000024f}, + {+0.001678f, +0.025875f, -0.002022f, +0.000076f, +0.000005f}, + {+0.400074f, +0.287614f, +0.070328f, +0.000125f, -0.000045f}, + {-0.004034f, -0.020135f, +0.007508f, -0.000103f, -0.000006f}, + {+0.436959f, -0.055640f, +0.076689f, -0.000219f, -0.000014f}, + {-0.123422f, -0.092919f, -0.005704f, -0.000171f, +0.000000f}, + {+0.093729f, +0.477248f, +0.023614f, +0.000233f, -0.000058f}, + {+0.014009f, -0.006141f, -0.006302f, -0.000091f, +0.000003f}, + {+0.504759f, +0.104762f, +0.066789f, +0.000245f, -0.000026f}, + {+0.004409f, -0.113595f, +0.004778f, +0.000217f, -0.000002f}, + {+0.360431f, +0.037695f, +0.048325f, +0.000203f, -0.000015f} + }, + { + {+0.014228f, -0.705402f, -0.006226f, -0.000344f, -0.000118f}, + {+0.897677f, +0.542816f, +0.095891f, -0.000106f, -0.000075f}, + {+0.201507f, +1.914333f, +0.026943f, -0.000420f, +0.000087f}, + {-0.017877f, -0.110691f, +0.004923f, +0.000104f, -0.000048f}, + {+0.205433f, +0.518777f, +0.021102f, -0.000023f, +0.000107f}, + {-0.001311f, +0.026946f, +0.001477f, -0.000136f, -0.000006f}, + {+0.192842f, +0.621869f, +0.023865f, +0.000199f, -0.000017f}, + {+0.003980f, -0.012991f, -0.007557f, +0.000253f, +0.000002f}, + {+0.005079f, +0.629152f, -0.003461f, +0.000195f, -0.000066f}, + {+0.066835f, -0.377419f, +0.006744f, +0.000264f, +0.000034f}, + {+0.280541f, +0.203930f, +0.033339f, -0.000296f, +0.000000f}, + {-0.011635f, +0.011453f, +0.005109f, +0.000244f, -0.000001f}, + {-0.001257f, +0.874207f, +0.008809f, -0.000099f, -0.000041f}, + {-0.021261f, -0.067946f, -0.002331f, +0.000104f, +0.000028f}, + {-0.005808f, +0.593723f, +0.006335f, +0.000064f, -0.000011f} + }, + { + {+0.099272f, -0.587041f, -0.004009f, +0.000546f, +0.000010f}, + {-0.705111f, -1.883202f, -0.090489f, +0.000148f, +0.000099f}, + {-0.905675f, +0.215060f, -0.111626f, -0.000378f, -0.000003f}, + {+0.022063f, -0.069401f, -0.004697f, +0.000403f, -0.000006f}, + {-0.414526f, -0.430242f, -0.061687f, -0.000257f, +0.000024f}, + {+0.000716f, +0.026002f, -0.000841f, -0.000065f, -0.000006f}, + {-0.499028f, -0.450610f, -0.082204f, +0.000154f, +0.000051f}, + {-0.003426f, -0.001895f, +0.007004f, +0.000107f, +0.000006f}, + {-0.458293f, -0.088827f, -0.075576f, +0.000356f, +0.000021f}, + {+0.052102f, -0.415182f, -0.006314f, +0.000148f, +0.000000f}, + {-0.252984f, -0.608102f, -0.036518f, -0.000188f, +0.000068f}, + {+0.008362f, +0.027128f, -0.004367f, +0.000092f, -0.000003f}, + {-0.431283f, +0.197715f, -0.066801f, -0.000088f, +0.000031f}, + {+0.025006f, +0.002651f, +0.001056f, -0.000216f, +0.000002f}, + {-0.295561f, +0.135592f, -0.047920f, -0.000105f, +0.000017f} + }, + { + {-0.157990f, -0.259660f, +0.015873f, +0.000403f, +0.000116f}, + {-0.593176f, -2.052339f, -0.070910f, -0.000100f, +0.000069f}, + {+0.360307f, -1.730109f, +0.043471f, +0.000479f, -0.000082f}, + {-0.021706f, -0.018877f, +0.004343f, -0.000127f, +0.000049f}, + {-0.076242f, -0.966223f, +0.000113f, -0.000062f, -0.000102f}, + {-0.000507f, +0.022696f, +0.001489f, +0.000143f, +0.000006f}, + {-0.080677f, -1.130360f, +0.008510f, -0.000220f, +0.000021f}, + {+0.003213f, +0.012234f, -0.007801f, -0.000257f, -0.000001f}, + {+0.099684f, -0.985662f, +0.034584f, -0.000145f, +0.000067f}, + {-0.145731f, -0.149448f, +0.002813f, -0.000324f, -0.000031f}, + {-0.237563f, -0.630642f, -0.030427f, +0.000172f, -0.000006f}, + {-0.004114f, +0.037800f, +0.002121f, -0.000258f, +0.000002f}, + {+0.125430f, -0.673094f, +0.018386f, +0.000174f, +0.000039f}, + {-0.015922f, +0.063018f, -0.001463f, -0.000086f, -0.000027f}, + {+0.073050f, -0.443161f, +0.011565f, -0.000018f, +0.000010f} + }, + { + {+0.144225f, +0.109446f, -0.023450f, -0.000603f, -0.000021f}, + {+1.124912f, +0.573960f, +0.142323f, -0.000259f, -0.000120f}, + {+0.594373f, -1.383061f, +0.069196f, +0.000008f, +0.000005f}, + {+0.016961f, +0.026260f, -0.002769f, -0.000445f, +0.000004f}, + {+0.499674f, -0.102263f, +0.061030f, +0.000126f, -0.000027f}, + {+0.000550f, +0.019959f, -0.002036f, +0.000057f, +0.000008f}, + {+0.632944f, -0.076074f, +0.072814f, -0.000407f, -0.000065f}, + {-0.003094f, +0.024467f, +0.008111f, -0.000124f, -0.000008f}, + {+0.501452f, -0.419657f, +0.050434f, -0.000591f, -0.000031f}, + {+0.144474f, +0.249397f, +0.000459f, -0.000132f, -0.000001f}, + {+0.415870f, +0.376102f, +0.059743f, +0.000227f, -0.000079f}, + {-0.000238f, +0.040068f, +0.000597f, -0.000101f, +0.000003f}, + {+0.358497f, -0.316925f, +0.053082f, -0.000084f, -0.000038f}, + {-0.000093f, +0.088439f, +0.001940f, +0.000226f, -0.000002f}, + {+0.258227f, -0.159273f, +0.039800f, -0.000005f, -0.000020f} + }, + { + {-0.076840f, +0.356484f, +0.022459f, -0.000471f, -0.000111f}, + {-0.070876f, +2.403851f, -0.004503f, +0.000397f, -0.000055f}, + {-0.673641f, +0.535940f, -0.067858f, -0.000222f, +0.000078f}, + {-0.009898f, +0.055154f, +0.001657f, +0.000144f, -0.000051f}, + {-0.180405f, +0.930833f, -0.021154f, +0.000296f, +0.000100f}, + {-0.000259f, +0.018770f, +0.000911f, -0.000150f, -0.000006f}, + {-0.259236f, +1.270489f, -0.028633f, +0.000371f, -0.000020f}, + {+0.002354f, +0.032108f, -0.004808f, +0.000253f, +0.000001f}, + {-0.386838f, +0.910045f, -0.041711f, +0.000301f, -0.000066f}, + {-0.048842f, +0.514452f, +0.000408f, +0.000377f, +0.000028f}, + {+0.070467f, +0.913930f, +0.006193f, +0.000040f, +0.000015f}, + {+0.003564f, +0.035201f, -0.001400f, +0.000267f, -0.000004f}, + {-0.230743f, +0.601122f, -0.035699f, -0.000081f, -0.000033f}, + {+0.015479f, +0.072891f, -0.002187f, +0.000069f, +0.000027f}, + {-0.142446f, +0.469049f, -0.024919f, +0.000100f, -0.000007f} + }, + { + {-0.002985f, +0.403323f, -0.016301f, +0.000548f, +0.000034f}, + {-1.060593f, +0.881637f, -0.141237f, -0.000301f, +0.000146f}, + {-0.052335f, +1.451862f, -0.028199f, +0.000089f, -0.000007f}, + {+0.002631f, +0.066036f, -0.002339f, +0.000502f, +0.000000f}, + {-0.384736f, +0.613709f, -0.054310f, -0.000237f, +0.000033f}, + {-0.000206f, +0.017762f, +0.000777f, -0.000039f, -0.000010f}, + {-0.476794f, +0.933190f, -0.065473f, +0.000248f, +0.000085f}, + {-0.001180f, +0.036159f, +0.000746f, +0.000135f, +0.000010f}, + {-0.253198f, +1.107323f, -0.036585f, +0.000594f, +0.000045f}, + {-0.075354f, +0.475320f, -0.002352f, +0.000131f, +0.000004f}, + {-0.505571f, +0.029600f, -0.070178f, -0.000529f, +0.000092f}, + {-0.005826f, +0.026803f, +0.001217f, +0.000121f, -0.000003f}, + {-0.271199f, +0.550703f, -0.035860f, -0.000004f, +0.000047f}, + {-0.024301f, +0.026331f, +0.003135f, -0.000244f, +0.000001f}, + {-0.221873f, +0.360216f, -0.027778f, -0.000058f, +0.000024f} + }, + { + {+0.057225f, +0.281207f, +0.009710f, +0.000560f, +0.000102f}, + {+0.690525f, -1.818917f, +0.085039f, -0.000450f, +0.000027f}, + {+0.506459f, +0.564152f, +0.071684f, -0.000050f, -0.000076f}, + {+0.004101f, +0.060649f, +0.002162f, -0.000150f, +0.000054f}, + {+0.353869f, -0.522523f, +0.045019f, -0.000449f, -0.000102f}, + {+0.000233f, +0.017558f, -0.000876f, +0.000157f, +0.000008f}, + {+0.492437f, -0.548497f, +0.057096f, -0.000443f, +0.000009f}, + {+0.000353f, +0.037418f, +0.000476f, -0.000253f, -0.000002f}, + {+0.476366f, -0.001171f, +0.053042f, -0.000446f, +0.000061f}, + {+0.147811f, +0.165824f, +0.000026f, -0.000398f, -0.000026f}, + {+0.196744f, -1.065124f, +0.031949f, -0.000103f, -0.000031f}, + {+0.007566f, +0.015715f, -0.002480f, -0.000269f, +0.000006f}, + {+0.346848f, -0.402208f, +0.047664f, -0.000015f, +0.000024f}, + {+0.023692f, -0.031259f, -0.003931f, -0.000059f, -0.000028f}, + {+0.252888f, -0.368770f, +0.034342f, -0.000180f, +0.000002f} + }, + { + {-0.069594f, +0.088175f, -0.003810f, -0.000440f, -0.000044f}, + {+0.578183f, -2.011593f, +0.073992f, +0.001371f, -0.000167f}, + {-0.227220f, -0.564080f, -0.015629f, +0.000042f, +0.000009f}, + {-0.009645f, +0.039649f, +0.000144f, -0.000553f, -0.000006f}, + {+0.169941f, -0.804452f, +0.028988f, +0.000605f, -0.000042f}, + {-0.000025f, +0.019813f, +0.000132f, +0.000002f, +0.000012f}, + {+0.153964f, -1.056091f, +0.034451f, +0.000335f, -0.000105f}, + {+0.000169f, +0.034911f, -0.000187f, -0.000117f, -0.000013f}, + {-0.062017f, -0.804384f, +0.011398f, -0.000308f, -0.000061f}, + {-0.128669f, -0.214233f, +0.004497f, -0.000103f, -0.000009f}, + {+0.440119f, -0.713992f, +0.050615f, +0.001076f, -0.000106f}, + {-0.008550f, +0.001254f, +0.004092f, -0.000138f, +0.000001f}, + {+0.098097f, -0.798361f, +0.010013f, +0.000351f, -0.000053f}, + {-0.014593f, -0.076768f, +0.002819f, +0.000279f, -0.000001f}, + {+0.091804f, -0.627104f, +0.009244f, +0.000286f, -0.000027f} + }, + { + {+0.047060f, -0.075626f, -0.001334f, -0.000567f, -0.000091f}, + {-0.993435f, +0.387528f, -0.110131f, +0.000307f, +0.000016f}, + {-0.206920f, -0.568534f, -0.044219f, +0.000186f, +0.000075f}, + {+0.012528f, +0.006883f, -0.001083f, +0.000138f, -0.000055f}, + {-0.392576f, +0.068469f, -0.053890f, +0.000450f, +0.000112f}, + {+0.000253f, +0.022782f, -0.000795f, -0.000185f, -0.000011f}, + {-0.480261f, -0.062036f, -0.067996f, +0.000424f, +0.000016f}, + {-0.001093f, +0.029167f, +0.002690f, +0.000282f, +0.000004f}, + {-0.301958f, -0.406273f, -0.051656f, +0.000467f, -0.000050f}, + {+0.039980f, -0.441106f, -0.004231f, +0.000399f, +0.000027f}, + {-0.502714f, +0.728345f, -0.060195f, +0.000029f, +0.000056f}, + {+0.008205f, -0.014371f, -0.003360f, +0.000261f, -0.000007f}, + {-0.391476f, -0.055144f, -0.045924f, +0.000025f, -0.000010f}, + {+0.001458f, -0.093974f, -0.000369f, +0.000055f, +0.000030f}, + {-0.304247f, -0.028652f, -0.034061f, +0.000183f, +0.000005f} + }, + { + {-0.009666f, -0.150052f, +0.003550f, +0.000266f, +0.000050f}, + {+0.137392f, +2.124261f, +0.005795f, -0.002596f, +0.000175f}, + {+0.216972f, +0.115692f, +0.034463f, -0.000271f, -0.000010f}, + {-0.012419f, -0.029126f, -0.001282f, +0.000578f, +0.000014f}, + {+0.047257f, +0.759362f, +0.004842f, -0.001129f, +0.000048f}, + {-0.000562f, +0.023531f, +0.001850f, +0.000083f, -0.000013f}, + {+0.096507f, +0.846049f, +0.009402f, -0.001164f, +0.000120f}, + {+0.002214f, +0.022078f, -0.006975f, +0.000051f, +0.000016f}, + {+0.156525f, +0.322121f, +0.018342f, -0.000159f, +0.000076f}, + {+0.056928f, -0.411079f, -0.001046f, -0.000022f, +0.000016f}, + {-0.091678f, +1.383538f, -0.002909f, -0.001805f, +0.000114f}, + {-0.007030f, -0.027663f, +0.001499f, +0.000143f, +0.000002f}, + {+0.149824f, +0.781150f, +0.018621f, -0.000777f, +0.000055f}, + {+0.010304f, -0.081328f, -0.001299f, -0.000326f, -0.000001f}, + {+0.113175f, +0.611704f, +0.011855f, -0.000554f, +0.000028f} + }, + { + {-0.021766f, -0.129069f, -0.001291f, +0.000514f, +0.000079f}, + {+0.761103f, +1.176434f, +0.079034f, -0.000465f, -0.000067f}, + {+0.052656f, +0.385158f, +0.008581f, -0.000181f, -0.000075f}, + {+0.011309f, -0.064037f, +0.003059f, -0.000137f, +0.000054f}, + {+0.327757f, +0.336935f, +0.039056f, -0.000551f, -0.000130f}, + {-0.000062f, +0.024514f, -0.000971f, +0.000266f, +0.000015f}, + {+0.369260f, +0.434054f, +0.045988f, -0.000624f, -0.000050f}, + {-0.002357f, +0.012860f, +0.007199f, -0.000382f, -0.000009f}, + {+0.163578f, +0.313585f, +0.027154f, -0.000540f, +0.000031f}, + {-0.107899f, -0.186387f, +0.005135f, -0.000449f, -0.000033f}, + {+0.567188f, +0.412930f, +0.045658f, -0.000151f, -0.000091f}, + {+0.006206f, -0.039247f, -0.001365f, -0.000263f, +0.000007f}, + {+0.250112f, +0.642586f, +0.021784f, -0.000061f, -0.000006f}, + {-0.017502f, -0.048887f, +0.002416f, -0.000067f, -0.000031f}, + {+0.188631f, +0.504176f, +0.017497f, -0.000181f, -0.000014f} + }, + { + {+0.035309f, -0.050812f, -0.002847f, -0.000101f, -0.000052f}, + {-0.684327f, -1.035275f, -0.063848f, +0.004018f, -0.000163f}, + {-0.168514f, +0.043177f, -0.023043f, +0.000441f, +0.000012f}, + {-0.010780f, -0.100434f, -0.001201f, -0.000537f, -0.000023f}, + {-0.257450f, -0.574283f, -0.031229f, +0.001901f, -0.000048f}, + {+0.001324f, +0.031148f, +0.000200f, -0.000256f, +0.000013f}, + {-0.310049f, -0.632628f, -0.040097f, +0.002280f, -0.000122f}, + {+0.001325f, -0.002753f, -0.005413f, +0.000102f, -0.000017f}, + {-0.184754f, -0.248324f, -0.030006f, +0.000823f, -0.000085f}, + {+0.099582f, +0.080360f, -0.007610f, +0.000330f, -0.000021f}, + {-0.399370f, -1.041121f, -0.030330f, +0.002858f, -0.000110f}, + {-0.005880f, -0.052171f, +0.002547f, -0.000108f, -0.000006f}, + {-0.313992f, -0.204082f, -0.025743f, +0.001207f, -0.000051f}, + {+0.019747f, -0.009044f, -0.004930f, +0.000386f, +0.000004f}, + {-0.235288f, -0.132120f, -0.018189f, +0.000805f, -0.000025f} + }, + { + {-0.031730f, +0.032618f, +0.005980f, -0.000345f, -0.000069f}, + {-0.036061f, -2.049852f, +0.017873f, +0.001326f, +0.000118f}, + {+0.048189f, -0.299501f, +0.006649f, +0.000278f, +0.000077f}, + {+0.009640f, -0.132629f, -0.002725f, +0.000234f, -0.000050f}, + {-0.088981f, -0.872832f, +0.010243f, +0.001133f, +0.000155f}, + {-0.001689f, +0.039941f, -0.001439f, -0.000417f, -0.000020f}, + {-0.100800f, -1.010534f, +0.017085f, +0.001478f, +0.000090f}, + {-0.000517f, -0.025997f, +0.009380f, +0.000610f, +0.000015f}, + {-0.052179f, -0.499015f, +0.012647f, +0.001020f, -0.000006f}, + {-0.056765f, +0.265453f, +0.012695f, +0.000691f, +0.000043f}, + {-0.109675f, -1.498579f, +0.008016f, +0.000837f, +0.000130f}, + {+0.005074f, -0.063245f, -0.003014f, +0.000316f, -0.000006f}, + {+0.061872f, -0.766380f, +0.004838f, +0.000273f, +0.000020f}, + {-0.017826f, +0.027182f, +0.007983f, +0.000078f, +0.000032f}, + {+0.048699f, -0.553249f, +0.001253f, +0.000294f, +0.000022f} + }, + { + {+0.019903f, +0.086704f, -0.007458f, -0.000169f, +0.000051f}, + {+0.512499f, -1.305378f, -0.011560f, -0.006425f, +0.000131f}, + {+0.082209f, -0.257165f, +0.004920f, -0.000746f, -0.000015f}, + {-0.006519f, -0.136496f, +0.009729f, +0.000296f, +0.000032f}, + {+0.284718f, -0.371880f, -0.012409f, -0.003530f, +0.000037f}, + {+0.000829f, +0.034413f, -0.003856f, +0.000595f, -0.000011f}, + {+0.344532f, -0.419919f, -0.018217f, -0.004473f, +0.000109f}, + {+0.000833f, -0.043443f, -0.009009f, -0.000486f, +0.000016f}, + {+0.207286f, -0.157646f, -0.009524f, -0.002206f, +0.000086f}, + {+0.013557f, +0.334502f, -0.014936f, -0.001054f, +0.000022f}, + {+0.394886f, -0.811218f, -0.014885f, -0.004885f, +0.000089f}, + {-0.003445f, -0.061047f, +0.005289f, -0.000034f, +0.000009f}, + {+0.157375f, -0.628940f, +0.005538f, -0.001860f, +0.000041f}, + {+0.012960f, +0.048297f, -0.009228f, -0.000446f, -0.000009f}, + {+0.111074f, -0.457260f, +0.006419f, -0.001195f, +0.000019f} + }, + { + {-0.008325f, +0.101463f, +0.007806f, +0.000222f, +0.000061f}, + {-0.448213f, -0.073435f, +0.043831f, -0.002036f, -0.000157f}, + {-0.086362f, -0.015184f, -0.001043f, -0.000590f, -0.000080f}, + {+0.003180f, -0.089659f, -0.026528f, -0.000770f, +0.000042f}, + {-0.212313f, +0.269444f, +0.022491f, -0.002262f, -0.000181f}, + {-0.000312f, +0.003749f, +0.018127f, +0.000631f, +0.000025f}, + {-0.262296f, +0.359676f, +0.026182f, -0.002987f, -0.000127f}, + {-0.001244f, -0.030938f, -0.011803f, -0.000968f, -0.000021f}, + {-0.154000f, +0.321358f, +0.010574f, -0.002216f, -0.000021f}, + {+0.011203f, +0.317368f, +0.004001f, -0.001332f, -0.000057f}, + {-0.314308f, +0.084402f, +0.038420f, -0.001607f, -0.000165f}, + {+0.001968f, -0.036558f, -0.013885f, -0.000585f, +0.000002f}, + {-0.169552f, -0.187140f, +0.006401f, -0.000360f, -0.000031f}, + {-0.007358f, +0.044960f, +0.010830f, +0.000051f, -0.000032f}, + {-0.118799f, -0.138798f, +0.002492f, -0.000352f, -0.000027f} + }, + { + {+0.001030f, +0.076361f, -0.016676f, +0.000614f, -0.000050f}, + {+0.176211f, +0.439467f, -0.166626f, +0.010372f, -0.000084f}, + {+0.027648f, +0.122383f, -0.009981f, +0.002109f, +0.000021f}, + {-0.002391f, -0.004071f, +0.048751f, +0.001909f, -0.000038f}, + {+0.060301f, +0.483123f, -0.062250f, +0.008767f, -0.000014f}, + {+0.001055f, -0.029752f, -0.015441f, -0.001494f, +0.000006f}, + {+0.076855f, +0.618372f, -0.079089f, +0.011397f, -0.000082f}, + {+0.000511f, +0.008400f, +0.025063f, +0.001785f, -0.000012f}, + {+0.034038f, +0.480307f, -0.030604f, +0.007648f, -0.000077f}, + {-0.017129f, +0.247573f, -0.000419f, +0.003919f, -0.000016f}, + {+0.114855f, +0.409675f, -0.120781f, +0.008892f, -0.000052f}, + {-0.001510f, +0.003557f, +0.023985f, +0.001157f, -0.000011f}, + {+0.076406f, +0.059144f, -0.051248f, +0.002627f, -0.000028f}, + {+0.003490f, +0.017100f, -0.019703f, -0.000030f, +0.000013f}, + {+0.051697f, +0.041218f, -0.031203f, +0.001716f, -0.000011f} + } +}; + +const float rightHRIRImag[BINAURAL_CONVBANDS][15][7]= +{ + { + {-0.179291f, +0.196331f, +0.055128f, -0.017382f, +0.000411f}, + {-0.346479f, +0.553523f, -0.074098f, +0.001288f, +0.000309f}, + {-0.308239f, +0.469545f, -0.021575f, -0.009209f, -0.000303f}, + {-0.099071f, +0.016070f, +0.100474f, -0.004226f, +0.000147f}, + {-0.319940f, +0.524241f, -0.066771f, +0.005442f, -0.000530f}, + {-0.051710f, -0.119065f, +0.135568f, +0.002775f, +0.000069f}, + {-0.351211f, +0.583972f, -0.084062f, +0.005229f, +0.000125f}, + {-0.033639f, -0.174352f, +0.152669f, +0.005945f, -0.000002f}, + {-0.368726f, +0.609447f, -0.071839f, -0.005499f, +0.000133f}, + {-0.182972f, +0.167861f, +0.028830f, +0.007677f, -0.000251f}, + {-0.315952f, +0.475453f, -0.040412f, +0.000509f, -0.000243f}, + {-0.097863f, -0.017152f, +0.129397f, -0.007411f, +0.000002f}, + {-0.338545f, +0.555030f, -0.075577f, +0.002211f, +0.000183f}, + {-0.140354f, +0.105800f, +0.079004f, -0.006610f, -0.000113f}, + {-0.316247f, +0.514944f, -0.065273f, +0.002541f, +0.000041f} + }, + { + {+0.066726f, +0.399622f, -0.022457f, -0.006137f, +0.000284f}, + {-0.313913f, +0.623520f, -0.085495f, -0.012758f, +0.000202f}, + {-0.230132f, +0.565523f, +0.020706f, +0.030274f, -0.000219f}, + {+0.082351f, +0.095375f, -0.017487f, -0.006093f, +0.000108f}, + {-0.292072f, +0.667164f, +0.030070f, +0.013037f, -0.000365f}, + {+0.051057f, -0.282404f, -0.087651f, -0.005022f, +0.000044f}, + {-0.322802f, +0.748814f, +0.008866f, -0.001584f, +0.000068f}, + {+0.030674f, -0.445214f, -0.118754f, -0.004069f, -0.000004f}, + {-0.340687f, +0.775811f, +0.021863f, -0.011738f, +0.000102f}, + {+0.036892f, +0.307700f, -0.120513f, +0.004660f, -0.000164f}, + {-0.292932f, +0.449609f, -0.071120f, +0.002682f, -0.000141f}, + {+0.094247f, +0.038851f, -0.003446f, +0.004678f, +0.000001f}, + {-0.276687f, +0.712282f, -0.031372f, -0.011376f, +0.000121f}, + {+0.091193f, +0.305836f, +0.011105f, +0.007857f, -0.000080f}, + {-0.239959f, +0.695822f, -0.012889f, -0.004808f, +0.000027f} + }, + { + {+0.079556f, +0.212459f, +0.100114f, +0.008980f, -0.000484f}, + {+0.345193f, -0.332259f, -0.065579f, +0.004201f, -0.000370f}, + {+0.284314f, -0.233038f, +0.152863f, -0.033143f, +0.000355f}, + {-0.053656f, +0.193617f, +0.026103f, +0.008373f, -0.000172f}, + {+0.451352f, -0.399491f, +0.098548f, -0.007150f, +0.000625f}, + {-0.047980f, -0.347394f, +0.054169f, +0.004712f, -0.000082f}, + {+0.462996f, -0.367670f, +0.059995f, -0.007104f, -0.000153f}, + {-0.022116f, -0.563476f, +0.009055f, +0.001133f, +0.000002f}, + {+0.460543f, -0.352575f, +0.025131f, +0.016685f, -0.000155f}, + {+0.134535f, +0.214472f, -0.123198f, -0.004683f, +0.000298f}, + {+0.343716f, -0.687345f, +0.149443f, +0.002569f, +0.000291f}, + {-0.080865f, +0.213671f, +0.036393f, -0.002576f, -0.000002f}, + {+0.395678f, -0.353387f, +0.071605f, +0.009820f, -0.000218f}, + {-0.011178f, +0.435220f, +0.022000f, -0.003546f, +0.000133f}, + {+0.378160f, -0.247310f, +0.059701f, +0.003289f, -0.000050f} + }, + { + {-0.164514f, -0.148051f, +0.076663f, +0.007666f, -0.000132f}, + {+0.375535f, -0.323173f, -0.095592f, +0.016350f, -0.000072f}, + {+0.284282f, -0.406641f, +0.032308f, +0.013962f, +0.000119f}, + {+0.019004f, +0.294886f, +0.002183f, -0.000727f, -0.000061f}, + {+0.105923f, -0.905160f, +0.058855f, -0.012639f, +0.000165f}, + {+0.041573f, -0.292137f, -0.001643f, -0.002823f, -0.000013f}, + {+0.165541f, -0.804111f, +0.046702f, +0.009739f, +0.000003f}, + {+0.007903f, -0.553598f, -0.011295f, +0.001114f, +0.000006f}, + {+0.224451f, -0.660961f, +0.005300f, -0.001820f, -0.000066f}, + {-0.185058f, -0.068726f, +0.031108f, -0.004814f, +0.000057f}, + {+0.301096f, -0.858369f, +0.054950f, -0.005764f, +0.000016f}, + {+0.056632f, +0.323528f, -0.035298f, +0.002677f, +0.000000f}, + {+0.211913f, -0.708511f, -0.018970f, +0.000869f, -0.000046f}, + {-0.068438f, +0.370728f, +0.021857f, -0.002414f, +0.000040f}, + {+0.146364f, -0.655800f, -0.014996f, +0.001286f, -0.000009f} + }, + { + {+0.140573f, -0.389546f, -0.063161f, -0.008116f, +0.000493f}, + {-0.501452f, +0.957815f, -0.118949f, -0.016074f, +0.000374f}, + {-0.428055f, +0.655187f, -0.059033f, -0.003664f, -0.000369f}, + {+0.016162f, +0.401403f, -0.075825f, -0.002475f, +0.000180f}, + {-0.420740f, -0.088485f, -0.055413f, +0.007312f, -0.000635f}, + {-0.033630f, -0.215580f, +0.008255f, +0.002345f, +0.000081f}, + {-0.431842f, +0.120945f, -0.041884f, -0.000821f, +0.000146f}, + {+0.007127f, -0.487963f, -0.047197f, -0.001590f, -0.000003f}, + {-0.456816f, +0.379069f, -0.075615f, -0.009372f, +0.000166f}, + {+0.067359f, -0.452943f, +0.061128f, +0.004058f, -0.000297f}, + {-0.442776f, +0.317039f, -0.091288f, -0.002255f, -0.000272f}, + {-0.029340f, +0.381803f, +0.012060f, -0.003022f, +0.000002f}, + {-0.485489f, +0.275866f, -0.050681f, -0.003739f, +0.000220f}, + {+0.115592f, +0.171299f, -0.027425f, +0.001757f, -0.000137f}, + {-0.433227f, +0.159115f, -0.034801f, -0.002670f, +0.000050f} + }, + { + {-0.026859f, -0.481645f, +0.031329f, -0.003806f, -0.000014f}, + {-0.284469f, +1.284573f, -0.032011f, +0.001084f, -0.000052f}, + {-0.181950f, +0.902398f, -0.114462f, +0.006410f, -0.000019f}, + {-0.045901f, +0.421890f, +0.009606f, -0.000493f, +0.000014f}, + {+0.021997f, +0.558819f, -0.027875f, +0.007660f, +0.000026f}, + {+0.027202f, -0.176156f, -0.031817f, -0.000966f, -0.000015f}, + {-0.087312f, +0.637991f, -0.008565f, -0.005467f, -0.000065f}, + {-0.017589f, -0.361264f, +0.074423f, +0.001029f, -0.000008f}, + {-0.174838f, +0.815827f, -0.004047f, +0.005296f, +0.000027f}, + {+0.117370f, -0.475324f, -0.026060f, +0.002096f, +0.000041f}, + {-0.239564f, +0.721503f, +0.005066f, +0.004992f, +0.000091f}, + {+0.006224f, +0.373402f, -0.019625f, +0.001954f, -0.000001f}, + {-0.037676f, +0.907270f, -0.023327f, +0.000382f, -0.000025f}, + {-0.112449f, -0.106272f, +0.002858f, +0.001574f, -0.000001f}, + {+0.009142f, +0.797778f, +0.001456f, +0.000541f, -0.000008f} + }, + { + {-0.108873f, -0.326101f, +0.000791f, +0.004385f, -0.000443f}, + {+0.580646f, -0.125470f, +0.165931f, +0.003927f, -0.000327f}, + {+0.496298f, -0.294341f, +0.110947f, -0.003960f, +0.000347f}, + {+0.064021f, +0.305884f, -0.009984f, +0.000720f, -0.000171f}, + {+0.317324f, +0.084393f, +0.052686f, -0.002910f, +0.000568f}, + {-0.023665f, -0.162046f, +0.011591f, -0.001760f, -0.000067f}, + {+0.381756f, -0.083321f, +0.056496f, +0.001922f, -0.000109f}, + {+0.022505f, -0.184316f, -0.094023f, -0.000535f, +0.000005f}, + {+0.478358f, -0.157333f, +0.072547f, +0.000538f, -0.000166f}, + {-0.203282f, -0.003518f, -0.055916f, -0.001798f, +0.000253f}, + {+0.519003f, -0.345400f, +0.046524f, +0.002002f, +0.000201f}, + {+0.013005f, +0.354615f, -0.009640f, -0.000556f, -0.000001f}, + {+0.431496f, +0.164286f, +0.068299f, -0.000598f, -0.000192f}, + {+0.064065f, -0.335687f, -0.005413f, -0.000806f, +0.000126f}, + {+0.388320f, +0.218505f, +0.052578f, +0.000717f, -0.000043f} + }, + { + {+0.185578f, +0.048454f, -0.025037f, +0.000839f, +0.000125f}, + {+0.216647f, -0.769850f, +0.030547f, -0.001237f, +0.000145f}, + {+0.072152f, -1.087589f, -0.044540f, -0.002159f, -0.000064f}, + {-0.067226f, +0.128292f, -0.003394f, +0.001259f, +0.000027f}, + {-0.039230f, -0.436180f, +0.027982f, -0.005578f, -0.000170f}, + {+0.021967f, -0.147869f, -0.016949f, +0.001711f, +0.000034f}, + {+0.082931f, -0.543672f, +0.006471f, +0.000953f, +0.000105f}, + {-0.024250f, -0.000088f, +0.082224f, +0.000232f, +0.000008f}, + {+0.128785f, -0.676661f, +0.016555f, +0.000836f, +0.000011f}, + {+0.111738f, +0.509167f, +0.011773f, +0.000668f, -0.000110f}, + {+0.175186f, -0.840571f, +0.013734f, -0.002329f, -0.000152f}, + {-0.030736f, +0.323572f, +0.010841f, +0.000266f, +0.000002f}, + {-0.059856f, -0.586995f, +0.004766f, +0.001337f, +0.000077f}, + {+0.005153f, -0.413324f, -0.002875f, -0.000804f, -0.000030f}, + {-0.130055f, -0.569153f, -0.015286f, -0.000126f, +0.000020f} + }, + { + {-0.154342f, +0.462365f, +0.008918f, -0.000748f, +0.000359f}, + {-0.725838f, +0.613051f, -0.068139f, +0.001012f, +0.000250f}, + {-0.574125f, -0.202838f, -0.063484f, +0.001137f, -0.000299f}, + {+0.057184f, -0.048810f, -0.000147f, -0.000421f, +0.000150f}, + {-0.248430f, -0.076290f, -0.045952f, +0.001044f, -0.000454f}, + {-0.020627f, -0.132133f, +0.015873f, +0.000547f, +0.000047f}, + {-0.385646f, +0.160251f, -0.051383f, +0.000597f, +0.000057f}, + {+0.024004f, +0.146367f, -0.069359f, +0.000113f, -0.000008f}, + {-0.510211f, +0.346437f, -0.108605f, -0.002970f, +0.000155f}, + {+0.074260f, +0.560217f, +0.027236f, -0.002049f, -0.000186f}, + {-0.640923f, +0.399438f, -0.091106f, -0.002796f, -0.000106f}, + {+0.044642f, +0.248879f, -0.008677f, -0.000509f, +0.000000f}, + {-0.335263f, -0.156297f, -0.049323f, +0.000645f, +0.000147f}, + {-0.063966f, -0.317445f, -0.003743f, -0.000353f, -0.000104f}, + {-0.262625f, -0.364710f, -0.040769f, -0.000478f, +0.000032f} + }, + { + {+0.034174f, +0.634603f, -0.061570f, +0.001602f, -0.000188f}, + {-0.013628f, +1.647816f, -0.010906f, -0.000105f, -0.000196f}, + {+0.159259f, +0.839126f, -0.028715f, +0.002082f, +0.000121f}, + {-0.038877f, -0.161887f, +0.013994f, -0.000806f, -0.000056f}, + {-0.012978f, +0.315172f, +0.007498f, +0.002515f, +0.000252f}, + {+0.019363f, -0.116326f, -0.016454f, -0.000653f, -0.000042f}, + {-0.094327f, +0.601401f, -0.004764f, -0.000515f, -0.000115f}, + {-0.020768f, +0.223263f, +0.032482f, -0.000406f, -0.000007f}, + {-0.103308f, +0.996284f, -0.012091f, +0.001669f, -0.000042f}, + {-0.188420f, +0.132863f, -0.019901f, +0.000373f, +0.000142f}, + {-0.002933f, +1.351350f, -0.016706f, +0.001459f, +0.000157f}, + {-0.050602f, +0.139166f, +0.011699f, +0.000107f, -0.000001f}, + {+0.044496f, +0.422612f, +0.003243f, -0.000732f, -0.000105f}, + {+0.088139f, -0.113041f, -0.007062f, +0.000964f, +0.000050f}, + {+0.121488f, +0.224605f, +0.019225f, +0.000384f, -0.000026f} + }, + { + {+0.096822f, +0.476180f, +0.001375f, -0.004303f, -0.000266f}, + {+0.784649f, +0.402307f, +0.111953f, -0.001767f, -0.000165f}, + {+0.455351f, +0.319212f, +0.073899f, -0.000685f, +0.000240f}, + {+0.017834f, -0.185600f, -0.026574f, -0.000319f, -0.000122f}, + {+0.289202f, -0.112057f, +0.026763f, +0.000919f, +0.000329f}, + {-0.018413f, -0.094635f, +0.004745f, -0.000689f, -0.000026f}, + {+0.470118f, -0.258982f, +0.068848f, -0.000550f, -0.000008f}, + {+0.014543f, +0.234428f, -0.011333f, +0.000353f, +0.000011f}, + {+0.630013f, -0.134362f, +0.098657f, -0.000312f, -0.000136f}, + {+0.133981f, -0.356598f, +0.000886f, +0.001721f, +0.000118f}, + {+0.691576f, +0.262485f, +0.098749f, +0.001088f, +0.000023f}, + {+0.048698f, +0.024439f, -0.007108f, +0.000514f, +0.000001f}, + {+0.331076f, -0.023745f, +0.052104f, -0.001010f, -0.000099f}, + {-0.069842f, +0.096568f, +0.001861f, +0.000341f, +0.000080f}, + {+0.208364f, +0.091797f, +0.036409f, +0.000063f, -0.000021f} + }, + { + {-0.157471f, +0.109039f, +0.009535f, +0.001756f, +0.000208f}, + {-0.275485f, -1.249177f, -0.051619f, +0.000413f, +0.000207f}, + {-0.251132f, -0.782342f, -0.026586f, -0.001157f, -0.000151f}, + {+0.000952f, -0.142768f, +0.022685f, +0.000903f, +0.000072f}, + {+0.001377f, -0.518955f, +0.008364f, -0.001070f, -0.000274f}, + {+0.017479f, -0.075912f, -0.014473f, +0.000492f, +0.000040f}, + {+0.024915f, -0.938659f, -0.001094f, -0.000206f, +0.000101f}, + {-0.007828f, +0.216324f, -0.002450f, +0.000122f, +0.000005f}, + {-0.047015f, -1.194136f, -0.019166f, +0.000263f, +0.000066f}, + {+0.035179f, -0.495586f, -0.002434f, +0.000356f, -0.000140f}, + {-0.225369f, -1.146623f, -0.025041f, +0.000712f, -0.000119f}, + {-0.041993f, -0.079290f, +0.005374f, -0.000241f, +0.000001f}, + {-0.042950f, -0.611443f, -0.015577f, +0.000564f, +0.000110f}, + {+0.019868f, +0.221770f, +0.001086f, -0.000552f, -0.000058f}, + {-0.084537f, -0.361650f, -0.016659f, -0.000278f, +0.000027f} + }, + { + {+0.119463f, -0.260644f, +0.000730f, +0.002454f, +0.000187f}, + {-0.638841f, -0.716808f, -0.087844f, +0.000999f, +0.000093f}, + {-0.358444f, -0.623901f, -0.042829f, +0.000564f, -0.000182f}, + {-0.013400f, -0.075190f, -0.009967f, +0.000251f, +0.000094f}, + {-0.356273f, +0.051713f, -0.055059f, -0.001405f, -0.000222f}, + {-0.016391f, -0.073933f, +0.020325f, +0.000320f, +0.000010f}, + {-0.558219f, -0.041438f, -0.081336f, +0.000205f, -0.000026f}, + {+0.002911f, +0.179435f, +0.015582f, -0.000426f, -0.000012f}, + {-0.700096f, -0.217086f, -0.089015f, -0.000055f, +0.000112f}, + {-0.170406f, -0.188028f, -0.011393f, -0.001711f, -0.000064f}, + {-0.613387f, -0.542946f, -0.085584f, -0.000623f, +0.000026f}, + {+0.031711f, -0.166672f, -0.004751f, -0.000501f, -0.000001f}, + {-0.388203f, -0.100241f, -0.048703f, +0.000607f, +0.000060f}, + {+0.037926f, +0.212515f, -0.009955f, -0.000474f, -0.000058f}, + {-0.243489f, -0.119652f, -0.037808f, -0.000041f, +0.000012f} + }, + { + {-0.018243f, -0.427994f, +0.007742f, -0.001543f, -0.000197f}, + {+0.428480f, +0.916268f, +0.061127f, +0.000167f, -0.000191f}, + {+0.328028f, +0.427987f, +0.043949f, -0.000347f, +0.000159f}, + {+0.017299f, -0.013770f, +0.002341f, -0.000570f, -0.000078f}, + {+0.103644f, +0.768055f, +0.017035f, +0.000309f, +0.000256f}, + {+0.015958f, -0.076522f, -0.015048f, -0.000200f, -0.000031f}, + {+0.152316f, +1.054485f, +0.026241f, +0.000619f, -0.000075f}, + {+0.000543f, +0.133568f, -0.013971f, -0.000050f, -0.000002f}, + {+0.296986f, +1.289182f, +0.034915f, -0.000175f, -0.000081f}, + {+0.158818f, +0.295857f, +0.012511f, -0.000363f, +0.000119f}, + {+0.387624f, +1.005937f, +0.059332f, -0.001214f, +0.000064f}, + {-0.017600f, -0.228196f, +0.004584f, +0.000391f, +0.000000f}, + {+0.124621f, +0.674220f, +0.018405f, -0.000154f, -0.000100f}, + {-0.077494f, +0.080369f, +0.012731f, +0.000384f, +0.000057f}, + {+0.130947f, +0.464380f, +0.027044f, +0.000227f, -0.000024f} + }, + { + {-0.078278f, -0.330646f, -0.006905f, -0.001256f, -0.000133f}, + {+0.474270f, +0.848355f, +0.072295f, -0.000352f, -0.000045f}, + {+0.210978f, +0.611947f, +0.028321f, +0.000762f, +0.000134f}, + {-0.012805f, +0.031238f, -0.001412f, -0.000282f, -0.000070f}, + {+0.339239f, +0.417518f, +0.042058f, +0.001229f, +0.000149f}, + {-0.016853f, -0.064800f, +0.007621f, -0.000050f, -0.000001f}, + {+0.525031f, +0.496181f, +0.068966f, +0.000154f, +0.000041f}, + {-0.003936f, +0.097134f, +0.013071f, +0.000574f, +0.000012f}, + {+0.610173f, +0.790742f, +0.091162f, +0.000033f, -0.000087f}, + {-0.014322f, +0.547795f, -0.000233f, +0.001234f, +0.000033f}, + {+0.511076f, +0.828412f, +0.066510f, +0.000121f, -0.000037f}, + {+0.001487f, -0.254447f, +0.003704f, +0.000354f, +0.000001f}, + {+0.412615f, +0.228133f, +0.058325f, -0.000274f, -0.000034f}, + {+0.081818f, -0.118377f, -0.003734f, +0.000481f, +0.000041f}, + {+0.253975f, +0.294824f, +0.029043f, +0.000151f, -0.000007f} + }, + { + {+0.112532f, -0.069243f, -0.003530f, +0.000958f, +0.000176f}, + {-0.522564f, -0.689848f, -0.077661f, -0.000834f, +0.000166f}, + {-0.302251f, -0.172630f, -0.042769f, -0.000157f, -0.000153f}, + {+0.001708f, +0.057201f, +0.003140f, +0.000396f, +0.000076f}, + {-0.214362f, -0.409809f, -0.017566f, -0.000172f, -0.000221f}, + {+0.018111f, -0.036447f, -0.007132f, -0.000014f, +0.000022f}, + {-0.320094f, -0.781338f, -0.036876f, -0.000754f, +0.000050f}, + {+0.007080f, +0.079137f, -0.013350f, -0.000072f, -0.000001f}, + {-0.510842f, -0.943853f, -0.074947f, -0.000045f, +0.000087f}, + {-0.139752f, +0.365032f, -0.009628f, +0.000228f, -0.000093f}, + {-0.543962f, -0.791940f, -0.077879f, +0.000741f, -0.000016f}, + {+0.013164f, -0.250065f, -0.009012f, -0.000362f, -0.000001f}, + {-0.254482f, -0.797757f, -0.038335f, -0.000175f, +0.000085f}, + {-0.049796f, -0.291278f, +0.001346f, -0.000394f, -0.000053f}, + {-0.229974f, -0.433573f, -0.029915f, -0.000329f, +0.000021f} + }, + { + {-0.069628f, +0.172555f, +0.007715f, +0.000961f, +0.000103f}, + {-0.265772f, -1.102965f, -0.038204f, +0.000514f, +0.000019f}, + {-0.117719f, -0.454174f, -0.022429f, -0.000476f, -0.000099f}, + {+0.013244f, +0.062592f, -0.010308f, +0.000225f, +0.000052f}, + {-0.201529f, -0.405038f, -0.040488f, -0.000745f, -0.000107f}, + {-0.018100f, -0.013096f, +0.013467f, -0.000067f, -0.000001f}, + {-0.361155f, -0.708560f, -0.057133f, -0.000206f, -0.000040f}, + {-0.008695f, +0.076549f, +0.007847f, -0.000668f, -0.000011f}, + {-0.368660f, -1.181142f, -0.048879f, +0.000032f, +0.000065f}, + {+0.176656f, -0.096997f, +0.010473f, -0.000832f, -0.000022f}, + {-0.337856f, -1.120965f, -0.041209f, +0.000362f, +0.000020f}, + {-0.024579f, -0.224963f, +0.010283f, -0.000321f, -0.000001f}, + {-0.366798f, -0.628661f, -0.050159f, +0.000274f, +0.000021f}, + {-0.003667f, -0.351759f, -0.002318f, -0.000327f, -0.000030f}, + {-0.167111f, -0.533443f, -0.021361f, -0.000057f, +0.000004f} + }, + { + {-0.013799f, +0.233209f, -0.009213f, -0.000993f, -0.000158f}, + {+0.496756f, +0.057133f, +0.069911f, +0.000582f, -0.000145f}, + {+0.232556f, +0.085603f, +0.033781f, +0.000044f, +0.000142f}, + {-0.028336f, +0.044645f, +0.018511f, -0.000332f, -0.000071f}, + {+0.144537f, +0.136639f, +0.022436f, +0.000164f, +0.000188f}, + {+0.016829f, -0.022096f, -0.026397f, +0.000125f, -0.000014f}, + {+0.320451f, +0.325110f, +0.037509f, +0.000534f, -0.000034f}, + {+0.008799f, +0.071779f, -0.008463f, +0.000227f, +0.000003f}, + {+0.533956f, +0.174039f, +0.062174f, +0.000242f, -0.000087f}, + {-0.072117f, -0.457416f, +0.001824f, -0.000008f, +0.000074f}, + {+0.654744f, +0.389244f, +0.083646f, -0.000024f, -0.000011f}, + {+0.032888f, -0.190496f, -0.018766f, +0.000377f, +0.000002f}, + {+0.392163f, +0.534188f, +0.053345f, +0.000158f, -0.000074f}, + {+0.054650f, -0.275758f, -0.003951f, +0.000369f, +0.000048f}, + {+0.262065f, +0.107178f, +0.028017f, +0.000293f, -0.000020f} + }, + { + {+0.074284f, +0.084134f, +0.007785f, -0.000781f, -0.000086f}, + {+0.102800f, +0.661769f, +0.024778f, -0.000437f, -0.000005f}, + {+0.107119f, +0.278685f, +0.016547f, +0.000374f, +0.000075f}, + {+0.039407f, -0.003431f, -0.017016f, -0.000081f, -0.000039f}, + {+0.195513f, +0.053148f, +0.036408f, +0.000495f, +0.000088f}, + {-0.015811f, -0.069404f, +0.040379f, +0.000018f, -0.000001f}, + {+0.262170f, +0.386464f, +0.055981f, +0.000107f, +0.000032f}, + {-0.008796f, +0.039878f, +0.029331f, +0.000673f, +0.000009f}, + {+0.150457f, +0.722389f, +0.047459f, -0.000189f, -0.000048f}, + {-0.079622f, -0.437077f, -0.008280f, +0.000635f, +0.000020f}, + {+0.071443f, +1.277356f, +0.015093f, -0.000771f, +0.000006f}, + {-0.037714f, -0.147621f, +0.022372f, +0.000244f, +0.000000f}, + {+0.212102f, +0.813239f, +0.030110f, -0.000386f, -0.000015f}, + {-0.081528f, -0.108982f, +0.013906f, +0.000206f, +0.000024f}, + {+0.056613f, +0.402997f, +0.018809f, -0.000058f, -0.000003f} + }, + { + {-0.068348f, -0.137916f, -0.005467f, +0.001073f, +0.000148f}, + {-0.373541f, -0.070450f, -0.057055f, -0.000471f, +0.000133f}, + {-0.194055f, -0.183976f, -0.031319f, +0.000021f, -0.000131f}, + {-0.043324f, -0.079398f, +0.010729f, +0.000250f, +0.000065f}, + {-0.058021f, -0.340872f, -0.015175f, -0.000168f, -0.000167f}, + {+0.015544f, -0.120833f, -0.029676f, -0.000101f, +0.000010f}, + {-0.219601f, -0.375357f, -0.043726f, -0.000182f, +0.000029f}, + {+0.009251f, -0.012039f, -0.031983f, -0.000425f, -0.000004f}, + {-0.356500f, -0.091308f, -0.067895f, -0.000171f, +0.000085f}, + {+0.152562f, -0.092567f, +0.005582f, -0.000147f, -0.000064f}, + {-0.600122f, +0.246169f, -0.079809f, -0.000134f, +0.000016f}, + {+0.037990f, -0.088681f, -0.014096f, -0.000339f, -0.000002f}, + {-0.416114f, -0.143031f, -0.053447f, +0.000035f, +0.000068f}, + {+0.074697f, +0.073729f, -0.012828f, -0.000314f, -0.000044f}, + {-0.194989f, +0.005961f, -0.031053f, -0.000187f, +0.000019f} + }, + { + {+0.004230f, -0.247400f, +0.003124f, +0.000774f, +0.000074f}, + {-0.087659f, -0.512695f, -0.018072f, +0.000628f, -0.000005f}, + {-0.140227f, -0.269891f, -0.017446f, -0.000365f, -0.000059f}, + {+0.039115f, -0.159891f, -0.011788f, -0.000015f, +0.000031f}, + {-0.364382f, +0.144921f, -0.059984f, -0.000608f, -0.000077f}, + {-0.014698f, -0.139313f, +0.012041f, +0.000055f, +0.000003f}, + {-0.377988f, -0.130201f, -0.060381f, -0.000116f, -0.000028f}, + {-0.009092f, -0.048503f, +0.012832f, -0.000508f, -0.000007f}, + {-0.226054f, -0.302457f, -0.037146f, +0.000151f, +0.000034f}, + {-0.098171f, +0.266370f, -0.001070f, -0.000683f, -0.000019f}, + {+0.139489f, -0.879999f, +0.008732f, +0.000589f, -0.000026f}, + {-0.033828f, -0.018438f, +0.006260f, -0.000203f, +0.000001f}, + {-0.064067f, -0.676039f, -0.014733f, +0.000450f, +0.000011f}, + {-0.039508f, +0.203205f, +0.006838f, -0.000188f, -0.000019f}, + {-0.039081f, -0.235768f, -0.009467f, +0.000096f, +0.000001f} + }, + { + {+0.068235f, -0.162863f, -0.004225f, -0.001090f, -0.000145f}, + {+0.318402f, +0.113290f, +0.052715f, +0.000298f, -0.000128f}, + {+0.222259f, +0.286163f, +0.036304f, -0.000074f, +0.000123f}, + {-0.028003f, -0.213729f, +0.017741f, -0.000168f, -0.000060f}, + {+0.168949f, +1.006240f, +0.051466f, +0.000233f, +0.000155f}, + {+0.012329f, -0.133114f, -0.010035f, +0.000080f, -0.000008f}, + {+0.295804f, +0.931852f, +0.065440f, +0.000118f, -0.000031f}, + {+0.007439f, -0.068218f, -0.011914f, +0.000536f, +0.000003f}, + {+0.367568f, +0.620904f, +0.068733f, +0.000078f, -0.000081f}, + {-0.021528f, +0.360393f, -0.007525f, +0.000307f, +0.000061f}, + {+0.430741f, -0.415072f, +0.068905f, +0.000095f, -0.000010f}, + {+0.026607f, +0.045352f, -0.006073f, +0.000328f, +0.000002f}, + {+0.337971f, -0.061032f, +0.046616f, -0.000184f, -0.000066f}, + {-0.007696f, +0.230864f, -0.004179f, +0.000321f, +0.000041f}, + {+0.140962f, +0.039662f, +0.023194f, +0.000152f, -0.000020f} + }, + { + {-0.096632f, +0.049253f, +0.005518f, -0.000776f, -0.000061f}, + {+0.114366f, +0.439023f, +0.013577f, -0.000632f, +0.000018f}, + {+0.146025f, +0.413262f, +0.013620f, +0.000490f, +0.000047f}, + {+0.012919f, -0.226782f, -0.015875f, +0.000030f, -0.000025f}, + {+0.535433f, +0.502251f, +0.042436f, +0.000856f, +0.000067f}, + {-0.009438f, -0.120072f, +0.004422f, -0.000186f, -0.000005f}, + {+0.531267f, +0.602899f, +0.057270f, +0.000190f, +0.000029f}, + {-0.004993f, -0.093043f, +0.020060f, +0.000234f, +0.000006f}, + {+0.350940f, +0.655711f, +0.044044f, +0.000096f, -0.000024f}, + {+0.099390f, +0.167283f, +0.010833f, +0.000671f, +0.000016f}, + {-0.198525f, +0.570779f, -0.031605f, -0.000217f, +0.000035f}, + {-0.017518f, +0.088396f, +0.008215f, +0.000121f, -0.000002f}, + {+0.020489f, +0.410883f, +0.013705f, -0.000359f, -0.000004f}, + {+0.046927f, +0.149468f, +0.001282f, +0.000116f, +0.000015f}, + {+0.086552f, +0.116817f, +0.017093f, -0.000096f, +0.000002f} + }, + { + {+0.060863f, +0.238331f, -0.011460f, +0.000913f, +0.000143f}, + {-0.348389f, -0.260238f, -0.050528f, -0.000503f, +0.000124f}, + {-0.279661f, -0.215310f, -0.029652f, -0.000025f, -0.000117f}, + {+0.002338f, -0.204608f, +0.009349f, +0.000140f, +0.000057f}, + {-0.590548f, -1.177681f, -0.067007f, -0.000422f, -0.000149f}, + {+0.007460f, -0.098657f, +0.003842f, +0.000003f, +0.000008f}, + {-0.673358f, -1.238148f, -0.098880f, -0.000483f, +0.000033f}, + {+0.002912f, -0.110891f, -0.004777f, -0.000426f, -0.000003f}, + {-0.639886f, -0.885842f, -0.107555f, -0.000336f, +0.000078f}, + {-0.079159f, -0.098142f, -0.005001f, -0.000304f, -0.000060f}, + {-0.308064f, +0.413337f, -0.045363f, -0.000012f, +0.000001f}, + {+0.007477f, +0.105861f, -0.006424f, -0.000253f, -0.000001f}, + {-0.261775f, -0.043581f, -0.050039f, +0.000020f, +0.000065f}, + {-0.062463f, -0.000784f, +0.002260f, -0.000235f, -0.000039f}, + {-0.150809f, -0.261923f, -0.032650f, -0.000224f, +0.000020f} + }, + { + {+0.015472f, +0.264305f, +0.017737f, +0.000856f, +0.000046f}, + {-0.084802f, -0.667993f, -0.010575f, +0.000724f, -0.000035f}, + {-0.089394f, -0.474721f, -0.024189f, -0.000463f, -0.000036f}, + {-0.014406f, -0.156721f, -0.006466f, -0.000058f, +0.000021f}, + {-0.260757f, -1.668672f, -0.030273f, -0.000841f, -0.000056f}, + {-0.006401f, -0.070186f, -0.003971f, +0.000249f, +0.000005f}, + {-0.321247f, -1.806107f, -0.023973f, -0.000065f, -0.000036f}, + {-0.001179f, -0.100912f, -0.010248f, -0.000161f, -0.000006f}, + {-0.215765f, -1.592243f, +0.000805f, -0.000059f, +0.000015f}, + {-0.003715f, -0.201207f, -0.005927f, -0.000616f, -0.000010f}, + {+0.215203f, -0.393691f, +0.031962f, -0.000030f, -0.000036f}, + {+0.002052f, +0.101907f, +0.001064f, -0.000125f, +0.000002f}, + {-0.094885f, -0.311374f, -0.010396f, +0.000395f, -0.000004f}, + {+0.049378f, -0.150147f, -0.003824f, -0.000109f, -0.000012f}, + {-0.162343f, -0.260689f, -0.014631f, +0.000139f, -0.000005f} + }, + { + {-0.079129f, +0.089447f, -0.017358f, -0.000833f, -0.000140f}, + {+0.375523f, +0.023640f, +0.048685f, +0.000757f, -0.000117f}, + {+0.258582f, +0.079328f, +0.043901f, +0.000050f, +0.000112f}, + {+0.021223f, -0.092022f, +0.005689f, -0.000083f, -0.000054f}, + {+0.786144f, -0.080409f, +0.090050f, +0.000512f, +0.000142f}, + {+0.005503f, -0.044093f, +0.001337f, -0.000087f, -0.000009f}, + {+0.965102f, +0.119837f, +0.107386f, +0.000882f, -0.000031f}, + {-0.000981f, -0.077878f, +0.008428f, +0.000405f, +0.000002f}, + {+0.930096f, +0.098134f, +0.098802f, +0.000616f, -0.000075f}, + {+0.064026f, -0.088096f, +0.011146f, +0.000233f, +0.000056f}, + {+0.207826f, -0.415264f, +0.029295f, +0.000038f, +0.000002f}, + {-0.009657f, +0.084358f, +0.002160f, +0.000249f, +0.000001f}, + {+0.348493f, +0.377419f, +0.058713f, +0.000176f, -0.000061f}, + {-0.015606f, -0.234362f, +0.001126f, +0.000178f, +0.000037f}, + {+0.294795f, +0.433182f, +0.041685f, +0.000320f, -0.000019f} + }, + { + {+0.080505f, -0.187637f, +0.019358f, -0.000727f, -0.000031f}, + {+0.011617f, +0.566329f, +0.010818f, -0.000813f, +0.000052f}, + {+0.132841f, +0.262806f, +0.024438f, +0.000308f, +0.000026f}, + {-0.021831f, -0.022144f, -0.002755f, +0.000059f, -0.000017f}, + {-0.205095f, +1.404475f, -0.007402f, +0.000565f, +0.000044f}, + {-0.004774f, -0.026838f, -0.000147f, -0.000221f, -0.000005f}, + {-0.222202f, +1.897742f, -0.010669f, -0.000249f, +0.000043f}, + {+0.003482f, -0.062741f, -0.005241f, +0.000061f, +0.000006f}, + {-0.290105f, +1.917533f, -0.020963f, -0.000272f, -0.000007f}, + {-0.047371f, +0.088805f, -0.005938f, +0.000518f, +0.000004f}, + {-0.201041f, +0.205200f, -0.025538f, -0.000061f, +0.000035f}, + {+0.015038f, +0.059421f, -0.003892f, +0.000105f, -0.000002f}, + {+0.083840f, +0.806848f, -0.003013f, -0.000531f, +0.000012f}, + {-0.022639f, -0.224357f, +0.002261f, +0.000083f, +0.000008f}, + {+0.099553f, +0.738308f, +0.006449f, -0.000279f, +0.000009f} + }, + { + {-0.008676f, -0.381006f, -0.027530f, +0.000698f, +0.000133f}, + {-0.321962f, +0.045967f, -0.050855f, -0.000806f, +0.000106f}, + {-0.333039f, -0.490802f, -0.069288f, +0.000184f, -0.000106f}, + {+0.016172f, +0.039278f, +0.001628f, +0.000029f, +0.000052f}, + {-0.548412f, +0.842992f, -0.085952f, -0.000354f, -0.000134f}, + {+0.004662f, -0.018565f, -0.002225f, +0.000116f, +0.000008f}, + {-0.754935f, +1.057276f, -0.105512f, -0.000835f, +0.000025f}, + {-0.005191f, -0.055847f, +0.006776f, -0.000297f, -0.000002f}, + {-0.764167f, +1.164667f, -0.105780f, -0.000566f, +0.000072f}, + {-0.022628f, +0.130641f, -0.002714f, -0.000204f, -0.000050f}, + {-0.122642f, +0.322608f, -0.022110f, -0.000056f, +0.000000f}, + {-0.018356f, +0.029667f, +0.006419f, -0.000243f, -0.000000f}, + {-0.518100f, -0.094410f, -0.062463f, -0.000139f, +0.000056f}, + {+0.049287f, -0.133318f, -0.004421f, -0.000132f, -0.000035f}, + {-0.434073f, -0.068727f, -0.052169f, -0.000227f, +0.000017f} + }, + { + {-0.097840f, -0.332634f, +0.030265f, +0.000594f, +0.000019f}, + {-0.038137f, -0.385406f, -0.010409f, +0.000707f, -0.000065f}, + {-0.190441f, -0.753884f, -0.002223f, -0.000383f, -0.000017f}, + {-0.005702f, +0.080693f, -0.004935f, -0.000052f, +0.000014f}, + {+0.365869f, -0.574688f, +0.044782f, -0.000359f, -0.000035f}, + {-0.004896f, -0.016910f, +0.005971f, +0.000183f, +0.000004f}, + {+0.509461f, -0.878965f, +0.054906f, +0.000325f, -0.000047f}, + {+0.005446f, -0.041391f, -0.014691f, -0.000099f, -0.000006f}, + {+0.637245f, -0.985968f, +0.074777f, +0.000503f, +0.000000f}, + {+0.070412f, -0.012539f, +0.007876f, -0.000375f, -0.000000f}, + {+0.137132f, -0.078455f, +0.021394f, +0.000266f, -0.000037f}, + {+0.019181f, -0.003090f, -0.008425f, -0.000093f, +0.000002f}, + {+0.143668f, -1.098716f, +0.019876f, +0.000534f, -0.000018f}, + {-0.055115f, -0.004451f, +0.006264f, -0.000044f, -0.000005f}, + {+0.119466f, -0.909317f, +0.014091f, +0.000299f, -0.000011f} + }, + { + {+0.175273f, -0.023562f, -0.023746f, -0.000630f, -0.000126f}, + {+0.331132f, +0.194225f, +0.057578f, +0.000747f, -0.000093f}, + {+0.627504f, +0.480941f, +0.082337f, -0.000333f, +0.000101f}, + {-0.006544f, +0.094670f, +0.007541f, +0.000004f, -0.000050f}, + {+0.295039f, -0.672027f, +0.054372f, +0.000122f, +0.000125f}, + {+0.004837f, -0.019428f, -0.006928f, -0.000132f, -0.000008f}, + {+0.400343f, -1.020229f, +0.073414f, +0.000516f, -0.000018f}, + {-0.004969f, -0.009476f, +0.020427f, +0.000267f, +0.000003f}, + {+0.360870f, -1.393762f, +0.062226f, +0.000263f, -0.000070f}, + {-0.042458f, -0.192483f, -0.007499f, +0.000213f, +0.000044f}, + {+0.102962f, -0.133692f, +0.017046f, +0.000058f, -0.000004f}, + {-0.017204f, -0.034316f, +0.007328f, +0.000233f, -0.000000f}, + {+0.507541f, -0.537711f, +0.066509f, -0.000058f, -0.000050f}, + {+0.040095f, +0.110095f, -0.006831f, +0.000094f, +0.000032f}, + {+0.395091f, -0.483632f, +0.051459f, +0.000055f, -0.000014f} + }, + { + {-0.174931f, +0.405419f, +0.015309f, -0.000501f, -0.000010f}, + {+0.118595f, +0.523257f, +0.014397f, -0.000463f, +0.000073f}, + {-0.085629f, +1.588035f, -0.029002f, +0.000587f, +0.000010f}, + {+0.017435f, +0.079802f, -0.006823f, +0.000058f, -0.000011f}, + {-0.316752f, +0.288723f, -0.050699f, +0.000422f, +0.000029f}, + {-0.004561f, -0.022768f, +0.004869f, -0.000147f, -0.000004f}, + {-0.476204f, +0.355299f, -0.072463f, -0.000079f, +0.000046f}, + {+0.004815f, +0.024980f, -0.013792f, +0.000134f, +0.000006f}, + {-0.635138f, +0.151731f, -0.087481f, -0.000351f, +0.000006f}, + {-0.040376f, -0.208056f, +0.002374f, +0.000265f, -0.000001f}, + {-0.073883f, +0.134688f, -0.012750f, -0.000315f, +0.000044f}, + {+0.013304f, -0.059405f, -0.004532f, +0.000098f, -0.000002f}, + {-0.382443f, +0.828469f, -0.051294f, -0.000303f, +0.000022f}, + {-0.012384f, +0.169012f, +0.004629f, +0.000016f, +0.000003f}, + {-0.307076f, +0.591577f, -0.037893f, -0.000141f, +0.000013f} + }, + { + {+0.090958f, +0.736090f, -0.010403f, +0.000616f, +0.000121f}, + {-0.514918f, -0.473428f, -0.087995f, -0.000860f, +0.000083f}, + {-0.768360f, +0.569571f, -0.085193f, +0.000271f, -0.000095f}, + {-0.024982f, +0.041935f, +0.006845f, -0.000024f, +0.000049f}, + {-0.205286f, +0.468697f, -0.034216f, -0.000126f, -0.000117f}, + {+0.004522f, -0.022618f, -0.002848f, +0.000146f, +0.000007f}, + {-0.232457f, +0.742372f, -0.038652f, -0.000352f, +0.000014f}, + {-0.004903f, +0.042022f, +0.006039f, -0.000260f, -0.000003f}, + {-0.082110f, +0.999819f, -0.024102f, -0.000126f, +0.000067f}, + {+0.101242f, -0.005388f, +0.004804f, -0.000253f, -0.000039f}, + {-0.150602f, +0.011535f, -0.025408f, -0.000192f, +0.000005f}, + {-0.008744f, -0.076724f, +0.003425f, -0.000233f, +0.000000f}, + {-0.331406f, +0.906789f, -0.045131f, +0.000102f, +0.000045f}, + {-0.015290f, +0.157067f, -0.000981f, -0.000080f, -0.000030f}, + {-0.231030f, +0.702736f, -0.034462f, -0.000025f, +0.000012f} + }, + { + {+0.037936f, +0.793387f, +0.004314f, +0.000485f, +0.000003f}, + {-0.064600f, -1.204603f, +0.013970f, +0.000498f, -0.000080f}, + {+0.595520f, -1.501640f, +0.073453f, -0.000796f, -0.000004f}, + {+0.027976f, -0.007913f, -0.009415f, -0.000065f, +0.000009f}, + {+0.278663f, -0.282968f, +0.046268f, -0.000521f, -0.000025f}, + {-0.004530f, -0.017687f, +0.002804f, +0.000122f, +0.000005f}, + {+0.409986f, -0.249242f, +0.062201f, -0.000134f, -0.000045f}, + {+0.004262f, +0.042796f, -0.004138f, -0.000154f, -0.000006f}, + {+0.488486f, +0.105010f, +0.077657f, +0.000063f, -0.000011f}, + {-0.077961f, +0.260388f, -0.008472f, -0.000205f, +0.000001f}, + {+0.059362f, -0.318787f, +0.016238f, +0.000296f, -0.000053f}, + {+0.003914f, -0.085047f, -0.003947f, -0.000097f, +0.000002f}, + {+0.502012f, -0.371002f, +0.065309f, +0.000097f, -0.000025f}, + {+0.031462f, +0.090310f, -0.000921f, +0.000011f, -0.000002f}, + {+0.370084f, -0.223772f, +0.048680f, -0.000002f, -0.000014f} + }, + { + {-0.149636f, +0.538052f, +0.006084f, -0.000611f, -0.000118f}, + {+0.827722f, +0.144595f, +0.104500f, +0.001071f, -0.000077f}, + {+0.467195f, -1.692609f, +0.058903f, +0.000104f, +0.000089f}, + {-0.025636f, -0.055618f, +0.011600f, +0.000028f, -0.000048f}, + {+0.205441f, -0.402400f, +0.029844f, +0.000329f, +0.000110f}, + {+0.004098f, -0.011944f, -0.002929f, -0.000161f, -0.000006f}, + {+0.191709f, -0.584087f, +0.033433f, +0.000494f, -0.000015f}, + {-0.002619f, +0.040624f, +0.003157f, +0.000276f, +0.000002f}, + {+0.007387f, -0.645944f, +0.005672f, +0.000317f, -0.000066f}, + {-0.020149f, +0.355606f, +0.004860f, +0.000282f, +0.000036f}, + {+0.247232f, -0.035269f, +0.031769f, +0.000397f, -0.000002f}, + {+0.001071f, -0.081553f, +0.003085f, +0.000224f, -0.000001f}, + {+0.097784f, -0.984307f, +0.019871f, +0.000081f, -0.000042f}, + {-0.031261f, +0.005952f, +0.001021f, +0.000072f, +0.000028f}, + {+0.058999f, -0.697197f, +0.013908f, +0.000158f, -0.000011f} + }, + { + {+0.191950f, +0.087119f, -0.014576f, -0.000500f, +0.000005f}, + {-0.385403f, +2.025003f, -0.067170f, -0.000984f, +0.000091f}, + {-0.901808f, +0.409162f, -0.113518f, +0.000622f, -0.000001f}, + {+0.018604f, -0.087716f, -0.010677f, +0.000076f, -0.000007f}, + {-0.340540f, +0.449344f, -0.057337f, +0.000418f, +0.000024f}, + {-0.003480f, -0.009550f, +0.002629f, -0.000103f, -0.000006f}, + {-0.428687f, +0.393778f, -0.074774f, -0.000048f, +0.000047f}, + {+0.000921f, +0.042725f, -0.001194f, +0.000126f, +0.000006f}, + {-0.427440f, +0.038949f, -0.073317f, -0.000052f, +0.000018f}, + {+0.118426f, +0.167571f, +0.002305f, +0.000179f, -0.000000f}, + {-0.163420f, +0.598589f, -0.028490f, -0.000385f, +0.000063f}, + {-0.005293f, -0.066220f, -0.000854f, +0.000098f, -0.000003f}, + {-0.474783f, -0.093712f, -0.068247f, -0.000172f, +0.000028f}, + {+0.017599f, -0.057663f, -0.001087f, -0.000028f, +0.000002f}, + {-0.330717f, -0.088966f, -0.048155f, -0.000042f, +0.000016f} + }, + { + {-0.150777f, -0.352435f, +0.014939f, +0.000525f, +0.000117f}, + {-0.820967f, +1.396060f, -0.082591f, -0.001080f, +0.000073f}, + {+0.085997f, +1.932699f, +0.012400f, -0.000333f, -0.000084f}, + {-0.009271f, -0.099001f, +0.007488f, -0.000034f, +0.000049f}, + {-0.167433f, +0.744157f, -0.009296f, -0.000465f, -0.000105f}, + {+0.003289f, -0.009763f, -0.003111f, +0.000178f, +0.000006f}, + {-0.168349f, +0.830150f, -0.008407f, -0.000668f, +0.000020f}, + {-0.000000f, +0.045818f, +0.000068f, -0.000275f, -0.000002f}, + {+0.019397f, +0.761830f, +0.016865f, -0.000546f, +0.000066f}, + {-0.137355f, -0.195198f, -0.005364f, -0.000280f, -0.000033f}, + {-0.278983f, +0.428651f, -0.030784f, -0.000466f, -0.000003f}, + {+0.007779f, -0.044555f, -0.000090f, -0.000218f, +0.000002f}, + {+0.072264f, +0.751091f, +0.007010f, -0.000263f, +0.000040f}, + {+0.001751f, -0.077278f, +0.001048f, -0.000070f, -0.000027f}, + {+0.046426f, +0.493923f, +0.003695f, -0.000284f, +0.000010f} + }, + { + {+0.054928f, -0.599328f, -0.011137f, +0.000543f, -0.000015f}, + {+0.973999f, -1.326967f, +0.113765f, +0.001528f, -0.000109f}, + {+0.802011f, +0.850769f, +0.092957f, -0.000268f, +0.000004f}, + {+0.000070f, -0.093592f, -0.004683f, -0.000080f, +0.000005f}, + {+0.480304f, -0.226458f, +0.056755f, -0.000175f, -0.000025f}, + {-0.003370f, -0.008879f, +0.003376f, +0.000086f, +0.000007f}, + {+0.586783f, -0.312533f, +0.076617f, +0.000454f, -0.000057f}, + {-0.000529f, +0.044011f, +0.001089f, -0.000099f, -0.000007f}, + {+0.502607f, +0.042700f, +0.063103f, +0.000302f, -0.000026f}, + {+0.055993f, -0.478277f, +0.004329f, -0.000157f, -0.000001f}, + {+0.341832f, -0.520706f, +0.046329f, +0.000527f, -0.000073f}, + {-0.008726f, -0.022784f, +0.000128f, -0.000090f, +0.000003f}, + {+0.391916f, +0.250262f, +0.060370f, +0.000436f, -0.000035f}, + {-0.018050f, -0.050444f, +0.000411f, +0.000043f, -0.000002f}, + {+0.271217f, +0.138661f, +0.043494f, +0.000221f, -0.000019f} + }, + { + {+0.044873f, -0.585962f, +0.006926f, -0.000401f, -0.000114f}, + {+0.276224f, -2.380785f, +0.034378f, +0.000866f, -0.000064f}, + {-0.574027f, -1.239612f, -0.059121f, +0.000267f, +0.000080f}, + {+0.007798f, -0.076508f, +0.001694f, +0.000056f, -0.000050f}, + {-0.051565f, -1.034040f, -0.006426f, +0.000409f, +0.000100f}, + {+0.003128f, -0.005933f, -0.002193f, -0.000201f, -0.000006f}, + {-0.075554f, -1.342643f, -0.020635f, +0.000711f, -0.000022f}, + {+0.001410f, +0.036177f, -0.004574f, +0.000285f, +0.000001f}, + {-0.238736f, -1.105056f, -0.040104f, +0.000589f, -0.000067f}, + {+0.071149f, -0.471140f, -0.003694f, +0.000274f, +0.000030f}, + {+0.166940f, -0.787265f, +0.018834f, +0.000377f, +0.000010f}, + {+0.008828f, -0.002646f, -0.001328f, +0.000217f, -0.000003f}, + {-0.174730f, -0.637003f, -0.029684f, +0.000268f, -0.000036f}, + {+0.024692f, +0.006183f, -0.002075f, +0.000066f, +0.000027f}, + {-0.100930f, -0.449452f, -0.020006f, +0.000267f, -0.000009f} + }, + { + {-0.105333f, -0.370152f, -0.000654f, -0.000526f, +0.000028f}, + {-1.151547f, -0.177019f, -0.147650f, -0.001592f, +0.000133f}, + {-0.320006f, -1.612536f, -0.049464f, +0.000016f, -0.000007f}, + {-0.013351f, -0.049795f, +0.002652f, +0.000078f, -0.000002f}, + {-0.464082f, -0.398816f, -0.059983f, +0.000056f, +0.000030f}, + {-0.002706f, -0.003059f, +0.001010f, -0.000072f, -0.000009f}, + {-0.597404f, -0.567240f, -0.065924f, -0.000645f, +0.000074f}, + {-0.002412f, +0.025484f, +0.007743f, +0.000094f, +0.000009f}, + {-0.415527f, -0.863967f, -0.040017f, -0.000487f, +0.000038f}, + {-0.155531f, -0.165362f, +0.003964f, +0.000115f, +0.000002f}, + {-0.472799f, +0.203811f, -0.066731f, -0.000530f, +0.000086f}, + {-0.007973f, +0.016214f, +0.002714f, +0.000076f, -0.000003f}, + {-0.322387f, -0.417885f, -0.044341f, -0.000578f, +0.000043f}, + {-0.019699f, +0.064382f, +0.001702f, -0.000054f, +0.000002f}, + {-0.247379f, -0.232595f, -0.032902f, -0.000318f, +0.000022f} + }, + { + {+0.109194f, -0.083429f, -0.007573f, +0.000253f, +0.000107f}, + {+0.400658f, +2.216876f, +0.055668f, -0.000786f, +0.000043f}, + {+0.639706f, -0.140902f, +0.072396f, -0.000014f, -0.000077f}, + {+0.015129f, -0.017585f, -0.004936f, -0.000112f, +0.000052f}, + {+0.284163f, +0.751145f, +0.036029f, -0.000355f, -0.000100f}, + {+0.002697f, -0.000614f, -0.001413f, +0.000236f, +0.000007f}, + {+0.410114f, +0.956869f, +0.044194f, -0.000792f, +0.000016f}, + {+0.002771f, +0.014429f, -0.007336f, -0.000334f, -0.000001f}, + {+0.477635f, +0.474194f, +0.047166f, -0.000567f, +0.000064f}, + {+0.141060f, +0.239229f, -0.003525f, -0.000303f, -0.000027f}, + {+0.049727f, +1.021215f, +0.015862f, -0.000365f, -0.000022f}, + {+0.005773f, +0.031476f, -0.001860f, -0.000232f, +0.000005f}, + {+0.290338f, +0.530583f, +0.044252f, -0.000186f, +0.000029f}, + {+0.006527f, +0.097970f, +0.000079f, -0.000058f, -0.000028f}, + {+0.196262f, +0.454853f, +0.031214f, -0.000182f, +0.000005f} + }, + { + {-0.067664f, +0.140222f, +0.011371f, +0.000441f, -0.000039f}, + {+0.868093f, +1.506363f, +0.106932f, +0.001127f, -0.000158f}, + {-0.138699f, +1.024949f, +0.006458f, -0.000057f, +0.000008f}, + {-0.012779f, +0.011725f, +0.003006f, -0.000081f, -0.000003f}, + {+0.283018f, +0.749840f, +0.039299f, -0.000170f, -0.000037f}, + {-0.002926f, +0.002650f, +0.002597f, +0.000070f, +0.000011f}, + {+0.316157f, +1.081824f, +0.047726f, +0.000449f, -0.000095f}, + {-0.002571f, +0.002805f, +0.005457f, -0.000106f, -0.000012f}, + {+0.076037f, +1.061627f, +0.021993f, +0.000408f, -0.000053f}, + {-0.042799f, +0.484671f, +0.002594f, -0.000076f, -0.000006f}, + {+0.502391f, +0.334226f, +0.062590f, +0.000351f, -0.000099f}, + {-0.002836f, +0.040016f, -0.000130f, -0.000063f, +0.000002f}, + {+0.197709f, +0.684398f, +0.023525f, +0.000465f, -0.000051f}, + {+0.008301f, +0.095457f, -0.001040f, +0.000064f, -0.000001f}, + {+0.171518f, +0.504587f, +0.018187f, +0.000242f, -0.000026f} + }, + { + {+0.010196f, +0.223325f, -0.008752f, -0.000136f, -0.000097f}, + {-0.898846f, -1.202312f, -0.111127f, +0.001054f, -0.000007f}, + {-0.343277f, +0.666136f, -0.062566f, -0.000124f, +0.000075f}, + {+0.007972f, +0.031942f, -0.000691f, +0.000217f, -0.000054f}, + {-0.388314f, -0.288336f, -0.051984f, +0.000529f, +0.000106f}, + {+0.002760f, +0.005282f, -0.002549f, -0.000290f, -0.000009f}, + {-0.507471f, -0.197123f, -0.067791f, +0.001087f, +0.000002f}, + {+0.002531f, -0.008752f, -0.005660f, +0.000405f, +0.000003f}, + {-0.402253f, +0.307883f, -0.055228f, +0.000714f, -0.000056f}, + {-0.070650f, +0.437311f, -0.001748f, +0.000403f, +0.000026f}, + {-0.355768f, -0.993327f, -0.054010f, +0.000596f, +0.000042f}, + {+0.000216f, +0.042554f, +0.000495f, +0.000270f, -0.000007f}, + {-0.384987f, -0.208099f, -0.051771f, +0.000179f, -0.000017f}, + {-0.019085f, +0.061907f, +0.001579f, +0.000039f, +0.000029f}, + {-0.294088f, -0.204484f, -0.037474f, +0.000164f, +0.000001f} + }, + { + {+0.033052f, +0.171093f, +0.003980f, -0.000320f, +0.000047f}, + {-0.228146f, -2.230393f, -0.030166f, -0.000587f, +0.000173f}, + {+0.238184f, -0.258410f, +0.031322f, +0.000240f, -0.000009f}, + {-0.002377f, +0.043131f, +0.000706f, +0.000112f, +0.000010f}, + {-0.060595f, -0.793993f, -0.008858f, +0.000376f, +0.000046f}, + {-0.002466f, +0.004796f, +0.002037f, -0.000078f, -0.000013f}, + {-0.019463f, -0.946515f, -0.006128f, -0.000060f, +0.000114f}, + {-0.002532f, -0.018222f, +0.007151f, +0.000156f, +0.000015f}, + {+0.132522f, -0.511850f, +0.009797f, -0.000155f, +0.000069f}, + {+0.131055f, +0.158121f, -0.000712f, +0.000078f, +0.000013f}, + {-0.304768f, -1.096493f, -0.025525f, -0.000145f, +0.000111f}, + {+0.002020f, +0.042106f, -0.000158f, +0.000068f, +0.000001f}, + {+0.021990f, -0.842357f, +0.005944f, -0.000249f, +0.000055f}, + {+0.022964f, +0.011433f, -0.003037f, -0.000076f, -0.000000f}, + {+0.008259f, -0.672729f, +0.003280f, -0.000105f, +0.000028f} + }, + { + {-0.046962f, +0.050077f, -0.001588f, +0.000089f, +0.000085f}, + {+0.943378f, -0.436639f, +0.116310f, -0.001367f, -0.000041f}, + {+0.115227f, -0.449376f, +0.023077f, +0.000072f, -0.000075f}, + {-0.003813f, +0.046155f, +0.001083f, -0.000386f, +0.000055f}, + {+0.372567f, -0.120225f, +0.052721f, -0.000876f, -0.000120f}, + {+0.002831f, +0.003049f, -0.003032f, +0.000347f, +0.000013f}, + {+0.431974f, -0.236971f, +0.064468f, -0.001509f, -0.000032f}, + {+0.001694f, -0.025754f, -0.005209f, -0.000509f, -0.000007f}, + {+0.218317f, -0.357086f, +0.041148f, -0.001062f, +0.000041f}, + {-0.114286f, -0.170813f, +0.005662f, -0.000568f, -0.000029f}, + {+0.587905f, +0.248972f, +0.065981f, -0.000907f, -0.000072f}, + {-0.004398f, +0.039085f, +0.001995f, -0.000345f, +0.000007f}, + {+0.348249f, -0.355643f, +0.039940f, -0.000232f, +0.000002f}, + {-0.019684f, -0.039612f, +0.003962f, +0.000005f, -0.000030f}, + {+0.269139f, -0.282868f, +0.029869f, -0.000211f, -0.000009f} + }, + { + {+0.035262f, -0.064121f, +0.000062f, +0.000231f, -0.000051f}, + {-0.455566f, +1.708875f, -0.054162f, +0.000452f, -0.000172f}, + {-0.192219f, +0.039136f, -0.030233f, -0.000391f, +0.000011f}, + {+0.009960f, +0.040659f, -0.007882f, -0.000214f, -0.000019f}, + {-0.151787f, +0.702282f, -0.027744f, -0.000493f, -0.000050f}, + {-0.003459f, +0.003635f, +0.004308f, +0.000084f, +0.000014f}, + {-0.200317f, +0.758329f, -0.036988f, -0.000194f, -0.000123f}, + {-0.000135f, -0.033298f, +0.000587f, -0.000205f, -0.000017f}, + {-0.162215f, +0.255755f, -0.032320f, -0.000076f, -0.000082f}, + {+0.045175f, -0.377794f, -0.007841f, -0.000148f, -0.000019f}, + {-0.163597f, +1.399723f, -0.024713f, +0.000130f, -0.000114f}, + {+0.006504f, +0.032761f, -0.005276f, -0.000103f, -0.000004f}, + {-0.257894f, +0.565628f, -0.027666f, +0.000174f, -0.000054f}, + {+0.011291f, -0.076665f, -0.001833f, +0.000107f, +0.000003f}, + {-0.196880f, +0.422739f, -0.020026f, +0.000069f, -0.000027f} + }, + { + {-0.012127f, -0.127298f, +0.000833f, -0.000130f, -0.000074f}, + {-0.444057f, +1.759202f, -0.044910f, +0.001154f, +0.000093f}, + {-0.000736f, +0.347729f, +0.000522f, +0.000086f, +0.000076f}, + {-0.013551f, +0.034533f, +0.015459f, +0.000651f, -0.000052f}, + {-0.239560f, +0.592487f, -0.021732f, +0.001117f, +0.000142f}, + {+0.003047f, +0.002921f, -0.004247f, -0.000377f, -0.000018f}, + {-0.268864f, +0.681606f, -0.026063f, +0.001734f, +0.000070f}, + {-0.000753f, -0.039259f, +0.000292f, +0.000617f, +0.000012f}, + {-0.120721f, +0.337691f, -0.012906f, +0.001430f, -0.000019f}, + {+0.028936f, -0.393495f, +0.000834f, +0.000759f, +0.000038f}, + {-0.399844f, +1.078267f, -0.029979f, +0.000861f, +0.000110f}, + {-0.007180f, +0.027581f, +0.007224f, +0.000461f, -0.000007f}, + {-0.100654f, +0.814206f, -0.010958f, +0.000157f, +0.000013f}, + {-0.001782f, -0.092803f, -0.001649f, -0.000099f, +0.000032f}, + {-0.071714f, +0.616249f, -0.009039f, +0.000190f, +0.000018f} + }, + { + {-0.008466f, -0.134677f, +0.000839f, -0.000257f, +0.000052f}, + {+0.728813f, +0.047272f, +0.045531f, -0.001250f, +0.000150f}, + {+0.134468f, +0.147689f, +0.015667f, +0.000389f, -0.000013f}, + {+0.013016f, +0.046042f, -0.019821f, +0.000430f, +0.000028f}, + {+0.321579f, -0.236917f, +0.029762f, +0.000320f, +0.000044f}, + {-0.001621f, -0.009205f, +0.006632f, -0.000044f, -0.000012f}, + {+0.381969f, -0.286254f, +0.040372f, -0.000025f, +0.000117f}, + {+0.000378f, -0.034238f, -0.001813f, +0.000202f, +0.000016f}, + {+0.213097f, -0.171134f, +0.032810f, +0.000096f, +0.000087f}, + {-0.070649f, -0.265425f, +0.011686f, +0.000225f, +0.000022f}, + {+0.504933f, -0.224919f, +0.022626f, -0.000611f, +0.000102f}, + {+0.006280f, +0.031928f, -0.008216f, +0.000194f, +0.000007f}, + {+0.281733f, +0.259419f, +0.016821f, -0.000441f, +0.000047f}, + {-0.004934f, -0.092931f, +0.003049f, -0.000200f, -0.000006f}, + {+0.204994f, +0.212232f, +0.013279f, -0.000247f, +0.000023f} + }, + { + {+0.018527f, -0.109078f, -0.005489f, +0.000329f, +0.000065f}, + {-0.353923f, -1.504513f, +0.026198f, +0.000545f, -0.000139f}, + {-0.084133f, -0.180735f, -0.004411f, -0.000172f, -0.000078f}, + {-0.010424f, +0.082861f, +0.023474f, -0.001146f, +0.000046f}, + {-0.104183f, -0.869931f, +0.000308f, -0.000867f, -0.000168f}, + {+0.000803f, -0.033408f, -0.011897f, +0.000322f, +0.000023f}, + {-0.127493f, -1.057421f, -0.005120f, -0.001301f, -0.000109f}, + {+0.000030f, -0.008195f, +0.013279f, -0.000688f, -0.000018f}, + {-0.062108f, -0.611802f, -0.014295f, -0.001580f, -0.000008f}, + {+0.071132f, -0.106572f, -0.019660f, -0.000889f, -0.000050f}, + {-0.204127f, -1.223298f, +0.023938f, +0.000236f, -0.000149f}, + {-0.005016f, +0.047389f, +0.010625f, -0.000684f, +0.000004f}, + {-0.178390f, -0.395869f, +0.009715f, +0.000384f, -0.000026f}, + {+0.007626f, -0.088100f, -0.003566f, +0.000334f, -0.000032f}, + {-0.128575f, -0.262828f, +0.007081f, +0.000112f, -0.000025f} + }, + { + {-0.017699f, -0.082875f, +0.011891f, +0.000578f, -0.000051f}, + {-0.075338f, -1.875564f, -0.028130f, +0.004946f, -0.000109f}, + {-0.014569f, -0.282345f, -0.006765f, -0.000076f, +0.000018f}, + {+0.008768f, +0.121239f, -0.024347f, -0.000668f, -0.000035f}, + {-0.098275f, -0.910450f, -0.000658f, +0.001363f, -0.000027f}, + {-0.001248f, -0.047660f, +0.005049f, -0.000271f, +0.000009f}, + {-0.119123f, -1.128831f, +0.005878f, +0.002349f, -0.000097f}, + {+0.000623f, +0.026673f, -0.017741f, +0.000098f, -0.000014f}, + {-0.091052f, -0.631081f, +0.008868f, +0.001055f, -0.000083f}, + {-0.047507f, -0.016577f, +0.027027f, +0.000146f, -0.000020f}, + {-0.085761f, -1.374119f, -0.016598f, +0.003245f, -0.000072f}, + {+0.004269f, +0.061685f, -0.010970f, -0.000271f, -0.000010f}, + {+0.006812f, -0.632429f, -0.018052f, +0.001598f, -0.000035f}, + {-0.007650f, -0.083453f, +0.006678f, +0.000424f, +0.000011f}, + {+0.004270f, -0.429230f, -0.015157f, +0.000963f, -0.000015f} + }, + { + {+0.011626f, -0.074867f, -0.018739f, -0.001759f, -0.000058f}, + {+0.203973f, -1.473074f, -0.075689f, -0.015004f, +0.000170f}, + {+0.044772f, -0.201047f, -0.007619f, -0.000789f, +0.000081f}, + {-0.007757f, +0.115969f, +0.000011f, +0.002169f, -0.000037f}, + {+0.130690f, -0.666998f, -0.072078f, -0.005629f, +0.000191f}, + {+0.001511f, -0.025585f, +0.020575f, +0.000815f, -0.000027f}, + {+0.162096f, -0.852420f, -0.101067f, -0.007596f, +0.000143f}, + {-0.001484f, +0.030725f, -0.011317f, -0.000203f, +0.000023f}, + {+0.110171f, -0.452560f, -0.069373f, -0.002637f, +0.000034f}, + {+0.023832f, -0.027507f, -0.053270f, -0.000794f, +0.000063f}, + {+0.156053f, -1.053067f, -0.069492f, -0.011059f, +0.000178f}, + {-0.003568f, +0.054558f, -0.002654f, +0.001067f, -0.000000f}, + {+0.062334f, -0.517524f, -0.008781f, -0.004770f, +0.000034f}, + {+0.006460f, -0.072498f, -0.005914f, -0.001329f, +0.000031f}, + {+0.044193f, -0.342467f, -0.002536f, -0.002717f, +0.000029f} + } +}; + +const float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]= +{ + { + { + +0.931560f, +0.589490f, +0.238115f, -0.086594f, -0.378914f, +0.918065f, +0.908308f, +0.894808f, +0.866987f, +0.836386f, + +0.819051f, +0.808457f, +0.799283f, +0.784996f, +0.763671f, +0.758873f, +0.777150f, +0.798487f, +0.807411f, +0.799756f, + +0.784730f, +0.773583f, +0.765115f, +0.756028f, +0.747349f, +0.741855f, +0.746047f, +0.758681f, +0.767696f, +0.767210f, + +0.759324f, +0.746787f, +0.732363f, +0.718682f, +0.707117f, +0.697608f, +0.691290f, +0.690306f, +0.693724f, +0.697313f, + +0.698110f, +0.697117f, +0.698173f, +0.704038f, +0.714303f, +0.727029f, +0.740252f, +0.751165f, +0.758564f, +0.763392f, + +0.766644f, +0.476275f, +0.021569f, +0.014234f, +0.011348f, +0.009708f, +0.008627f, +0.007880f, +0.007331f, +0.006984f + }, + { + +0.153364f, +0.431722f, +0.223627f, -0.301076f, -0.722224f, +0.556999f, +0.565103f, +0.549432f, +0.582858f, +0.652605f, + +0.725752f, +0.768989f, +0.787009f, +0.795460f, +0.799903f, +0.802273f, +0.810592f, +0.819734f, +0.819713f, +0.811440f, + +0.810218f, +0.823687f, +0.847812f, +0.882959f, +0.916331f, +0.923092f, +0.897135f, +0.852425f, +0.807571f, +0.778572f, + +0.764796f, +0.754260f, +0.742158f, +0.732054f, +0.724750f, +0.718657f, +0.717707f, +0.728664f, +0.752080f, +0.779872f, + +0.802697f, +0.816824f, +0.824778f, +0.830921f, +0.836340f, +0.839993f, +0.842458f, +0.844537f, +0.846022f, +0.846444f, + +0.845634f, +0.519355f, +0.013685f, +0.004231f, +0.000639f, -0.001743f, -0.003484f, -0.004764f, -0.005716f, -0.006342f + }, + { + +0.116550f, +0.029982f, -0.090957f, -0.110646f, -0.118380f, +0.164545f, +0.157003f, +0.141182f, +0.129273f, +0.111996f, + +0.147830f, +0.204091f, +0.287029f, +0.400304f, +0.498327f, +0.520367f, +0.451929f, +0.319838f, +0.163989f, +0.032354f, + -0.042553f, -0.060144f, -0.040752f, -0.013808f, +0.000138f, -0.005386f, -0.028033f, -0.056626f, -0.076148f, -0.071775f, + -0.036161f, +0.022235f, +0.079923f, +0.117243f, +0.132960f, +0.137374f, +0.136857f, +0.131489f, +0.122150f, +0.112795f, + +0.106854f, +0.101987f, +0.090861f, +0.069094f, +0.037690f, -0.001570f, -0.046208f, -0.089113f, -0.124780f, -0.152938f, + -0.172930f, -0.116660f, -0.004115f, -0.001599f, -0.000541f, +0.000076f, +0.000490f, +0.000781f, +0.000995f, +0.001134f + }, + { + +0.082564f, +0.045748f, -0.100405f, -0.164616f, -0.222135f, +0.214978f, +0.289164f, +0.366751f, +0.467015f, +0.536298f, + +0.539710f, +0.520805f, +0.484049f, +0.427086f, +0.396728f, +0.377012f, +0.337930f, +0.285243f, +0.217171f, +0.132009f, + +0.046348f, -0.022295f, -0.070187f, -0.092267f, -0.077417f, -0.017841f, +0.082276f, +0.200597f, +0.305996f, +0.384055f, + +0.437163f, +0.477207f, +0.515520f, +0.552589f, +0.576862f, +0.576107f, +0.552740f, +0.521313f, +0.495097f, +0.480391f, + +0.476238f, +0.478234f, +0.481677f, +0.482298f, +0.476112f, +0.459832f, +0.433225f, +0.402349f, +0.373577f, +0.349500f, + +0.331993f, +0.196598f, +0.008828f, +0.006124f, +0.005015f, +0.004377f, +0.003953f, +0.003666f, +0.003455f, +0.003322f + }, + { + +0.003514f, -0.046208f, -0.169189f, -0.246290f, -0.258608f, +0.123594f, +0.193752f, +0.277639f, +0.358490f, +0.412970f, + +0.375502f, +0.335121f, +0.313658f, +0.292262f, +0.289663f, +0.299499f, +0.304389f, +0.287189f, +0.236107f, +0.144024f, + +0.032821f, -0.070365f, -0.149507f, -0.187444f, -0.180044f, -0.144272f, -0.102205f, -0.062405f, -0.023790f, +0.014970f, + +0.051711f, +0.089890f, +0.137092f, +0.185775f, +0.210322f, +0.196357f, +0.159984f, +0.132056f, +0.131975f, +0.158785f, + +0.198654f, +0.237349f, +0.267138f, +0.288631f, +0.306064f, +0.320945f, +0.330270f, +0.332422f, +0.328795f, +0.320830f, + +0.310872f, +0.187382f, +0.005468f, +0.001915f, +0.000434f, -0.000505f, -0.001165f, -0.001641f, -0.001991f, -0.002211f + }, + { + -0.013914f, +0.020481f, -0.177151f, -0.153853f, -0.123281f, +0.036226f, +0.012165f, -0.059498f, -0.118703f, -0.132408f, + -0.083769f, -0.028816f, +0.010439f, +0.073641f, +0.151111f, +0.179257f, +0.122167f, -0.005411f, -0.171409f, -0.319887f, + -0.406332f, -0.430666f, -0.412015f, -0.355554f, -0.251589f, -0.114356f, +0.007079f, +0.075058f, +0.090668f, +0.081196f, + +0.074468f, +0.080971f, +0.090434f, +0.084438f, +0.060093f, +0.030473f, +0.006048f, -0.011097f, -0.020590f, -0.019141f, + -0.003724f, +0.020621f, +0.041568f, +0.049068f, +0.040365f, +0.016570f, -0.017826f, -0.053778f, -0.084772f, -0.109921f, + -0.128269f, -0.087720f, -0.005379f, -0.003683f, -0.002987f, -0.002556f, -0.002255f, -0.002029f, -0.001849f, -0.001721f + }, + { + -0.011077f, +0.068268f, +0.172045f, +0.224907f, +0.203958f, -0.141636f, -0.177909f, -0.173456f, -0.154997f, -0.177581f, + -0.193129f, -0.200675f, -0.206181f, -0.214819f, -0.189032f, -0.095163f, +0.041087f, +0.161032f, +0.223656f, +0.217536f, + +0.144366f, +0.019748f, -0.128357f, -0.264169f, -0.342543f, -0.342225f, -0.294756f, -0.250400f, -0.244775f, -0.284375f, + -0.346925f, -0.405676f, -0.451837f, -0.491950f, -0.524795f, -0.539708f, -0.531569f, -0.507105f, -0.477798f, -0.451524f, + -0.430027f, -0.409991f, -0.385628f, -0.353400f, -0.313904f, -0.270406f, -0.228673f, -0.195310f, -0.172245f, -0.157165f, + -0.147622f, -0.088637f, -0.002701f, -0.000757f, -0.000102f, +0.000326f, +0.000623f, +0.000845f, +0.001012f, +0.001117f + }, + { + +0.012737f, -0.122413f, -0.162191f, -0.048954f, -0.011887f, -0.006284f, -0.059137f, -0.075306f, -0.039450f, -0.013641f, + +0.045456f, +0.080111f, +0.103447f, +0.126400f, +0.143692f, +0.144628f, +0.151274f, +0.185913f, +0.238389f, +0.293656f, + +0.325256f, +0.310455f, +0.248320f, +0.125814f, -0.065585f, -0.279482f, -0.445586f, -0.528904f, -0.532954f, -0.480876f, + -0.402256f, -0.318153f, -0.233483f, -0.146163f, -0.062900f, +0.003457f, +0.047237f, +0.075491f, +0.099694f, +0.124312f, + +0.146112f, +0.160783f, +0.167687f, +0.170589f, +0.175305f, +0.185793f, +0.200659f, +0.215074f, +0.226218f, +0.233509f, + +0.236369f, +0.146507f, +0.006425f, +0.003570f, +0.002320f, +0.001557f, +0.001038f, +0.000666f, +0.000389f, +0.000202f + }, + { + +0.029441f, +0.255135f, +0.388005f, +0.324509f, +0.179661f, +0.170310f, +0.199090f, +0.247152f, +0.215232f, +0.107372f, + +0.008342f, -0.045561f, -0.073414f, -0.101929f, -0.145853f, -0.188184f, -0.218566f, -0.229908f, -0.227139f, -0.213922f, + -0.197983f, -0.187165f, -0.178153f, -0.183267f, -0.213808f, -0.243068f, -0.221134f, -0.135714f, -0.022342f, +0.076608f, + +0.151824f, +0.214097f, +0.269402f, +0.314773f, +0.344233f, +0.355048f, +0.346502f, +0.321399f, +0.286050f, +0.247674f, + +0.212622f, +0.185179f, +0.166697f, +0.155655f, +0.148981f, +0.143401f, +0.135815f, +0.125610f, +0.114535f, +0.104436f, + +0.097691f, +0.053982f, +0.004390f, +0.004991f, +0.005112f, +0.005266f, +0.005387f, +0.005507f, +0.005600f, +0.005657f + }, + { + -0.041114f, -0.246567f, -0.453640f, -0.578453f, -0.486412f, +0.085090f, +0.077743f, +0.105123f, +0.097004f, +0.045376f, + +0.020819f, +0.016253f, +0.032947f, +0.042605f, +0.033758f, +0.016413f, -0.007617f, -0.029954f, -0.049569f, -0.072006f, + -0.091910f, -0.092490f, -0.068505f, -0.047173f, -0.058854f, -0.098422f, -0.131962f, -0.131305f, -0.096674f, -0.045232f, + +0.016136f, +0.088833f, +0.169184f, +0.242523f, +0.287880f, +0.297628f, +0.284744f, +0.271800f, +0.274450f, +0.292315f, + +0.315219f, +0.333992f, +0.345833f, +0.354700f, +0.364920f, +0.377015f, +0.386323f, +0.388549f, +0.384259f, +0.374493f, + +0.360625f, +0.216189f, +0.003741f, -0.001455f, -0.003488f, -0.004851f, -0.005842f, -0.006588f, -0.007154f, -0.007521f + }, + { + -0.001575f, +0.034404f, -0.099063f, -0.057191f, +0.005967f, +0.008737f, +0.002839f, -0.023739f, +0.002327f, +0.047119f, + +0.071338f, +0.062023f, +0.056518f, +0.075939f, +0.095829f, +0.111755f, +0.130192f, +0.158682f, +0.192417f, +0.228710f, + +0.262770f, +0.285090f, +0.275706f, +0.204512f, +0.075591f, -0.061762f, -0.166412f, -0.231582f, -0.264188f, -0.274397f, + -0.272990f, -0.267274f, -0.254902f, -0.232321f, -0.205252f, -0.184838f, -0.177638f, -0.176928f, -0.167497f, -0.139224f, + -0.092627f, -0.036902f, +0.016017f, +0.057208f, +0.085094f, +0.105460f, +0.126261f, +0.149970f, +0.174030f, +0.196813f, + +0.215950f, +0.143890f, +0.006512f, +0.003675f, +0.002495f, +0.001778f, +0.001286f, +0.000926f, +0.000653f, +0.000468f + }, + { + -0.028351f, -0.158366f, -0.387375f, -0.209323f, -0.138479f, +0.024944f, +0.076050f, +0.068784f, +0.086894f, +0.022640f, + -0.046924f, -0.098681f, -0.157850f, -0.216715f, -0.230469f, -0.177937f, -0.056736f, +0.099412f, +0.230053f, +0.293062f, + +0.274665f, +0.188848f, +0.054201f, -0.120177f, -0.294891f, -0.394157f, -0.378101f, -0.280693f, -0.170935f, -0.092689f, + -0.049777f, -0.036466f, -0.052499f, -0.093934f, -0.142595f, -0.175682f, -0.184503f, -0.177658f, -0.170605f, -0.173641f, + -0.186618f, -0.200281f, -0.202941f, -0.188511f, -0.159081f, -0.120865f, -0.081855f, -0.050347f, -0.028940f, -0.016023f, + -0.010660f, -0.004676f, -0.001512f, -0.002489f, -0.002909f, -0.003234f, -0.003490f, -0.003708f, -0.003879f, -0.003976f + }, + { + -0.012536f, -0.024508f, +0.026715f, +0.100256f, +0.030165f, -0.019036f, -0.001980f, +0.053411f, +0.062729f, +0.042787f, + +0.037541f, +0.042995f, +0.032630f, -0.006363f, -0.069971f, -0.130620f, -0.144750f, -0.095861f, +0.019571f, +0.165595f, + +0.287776f, +0.359211f, +0.370344f, +0.312965f, +0.207299f, +0.103383f, +0.034254f, +0.002634f, +0.000632f, +0.017232f, + +0.044292f, +0.070055f, +0.076868f, +0.050271f, -0.014441f, -0.103260f, -0.190056f, -0.255807f, -0.297413f, -0.321963f, + -0.337614f, -0.347902f, -0.352331f, -0.349280f, -0.338882f, -0.321988f, -0.297068f, -0.266207f, -0.234929f, -0.205756f, + -0.181333f, -0.099905f, -0.004409f, -0.003069f, -0.002383f, -0.001976f, -0.001706f, -0.001520f, -0.001384f, -0.001294f + }, + { + -0.035759f, -0.028302f, +0.056431f, +0.144293f, +0.088149f, -0.053194f, -0.088872f, -0.078778f, -0.083787f, -0.070879f, + -0.044081f, -0.064468f, -0.084007f, -0.069723f, -0.065974f, -0.065725f, -0.028666f, +0.041152f, +0.101149f, +0.149485f, + +0.178233f, +0.189381f, +0.210408f, +0.258912f, +0.327924f, +0.370146f, +0.333626f, +0.220608f, +0.075539f, -0.065890f, + -0.187899f, -0.284687f, -0.349780f, -0.377256f, -0.364619f, -0.319560f, -0.262043f, -0.211477f, -0.176684f, -0.155472f, + -0.138294f, -0.114703f, -0.080295f, -0.040726f, -0.007428f, +0.011160f, +0.014827f, +0.010699f, +0.005174f, +0.001704f, + +0.001420f, +0.001014f, -0.000876f, -0.000438f, -0.000227f, -0.000068f, +0.000051f, +0.000148f, +0.000219f, +0.000266f + }, + { + +0.006625f, -0.028791f, -0.110750f, +0.054204f, +0.049674f, -0.081883f, -0.031641f, +0.002710f, +0.078824f, +0.101542f, + +0.075137f, +0.045466f, +0.054841f, +0.071727f, +0.069146f, +0.060555f, +0.070378f, +0.108883f, +0.172304f, +0.238963f, + +0.284300f, +0.307237f, +0.320185f, +0.308402f, +0.229243f, +0.069136f, -0.124082f, -0.287351f, -0.389327f, -0.427896f, + -0.417142f, -0.373698f, -0.302766f, -0.196446f, -0.061231f, +0.073312f, +0.179141f, +0.248754f, +0.289902f, +0.309552f, + +0.307579f, +0.283972f, +0.243621f, +0.194795f, +0.147699f, +0.110790f, +0.086424f, +0.072421f, +0.065314f, +0.061874f, + +0.059680f, +0.034356f, +0.001808f, +0.001292f, +0.001117f, +0.000966f, +0.000841f, +0.000731f, +0.000643f, +0.000577f + }, + { + +0.000088f, +0.014221f, -0.031471f, -0.012506f, +0.016816f, -0.022850f, -0.080939f, -0.132222f, -0.131943f, -0.137399f, + -0.094433f, -0.042539f, -0.032957f, -0.046202f, -0.048525f, -0.059770f, -0.084778f, -0.088776f, -0.061042f, -0.014146f, + +0.040389f, +0.099574f, +0.156222f, +0.193208f, +0.193160f, +0.165499f, +0.148012f, +0.164330f, +0.198656f, +0.229866f, + +0.254546f, +0.275046f, +0.287016f, +0.293580f, +0.312690f, +0.352380f, +0.396514f, +0.417891f, +0.401549f, +0.353465f, + +0.291737f, +0.233593f, +0.189322f, +0.157681f, +0.127979f, +0.091171f, +0.047074f, +0.003648f, -0.032270f, -0.058776f, + -0.074801f, -0.053275f, -0.002235f, -0.000782f, -0.000024f, +0.000460f, +0.000788f, +0.001026f, +0.001200f, +0.001310f + } + }, + { + { + +0.931560f, +0.589490f, +0.238115f, -0.086594f, -0.378914f, +0.918065f, +0.908308f, +0.894808f, +0.866987f, +0.836386f, + +0.819051f, +0.808457f, +0.799283f, +0.784996f, +0.763671f, +0.758873f, +0.777150f, +0.798487f, +0.807411f, +0.799756f, + +0.784730f, +0.773583f, +0.765115f, +0.756028f, +0.747349f, +0.741855f, +0.746047f, +0.758681f, +0.767696f, +0.767210f, + +0.759324f, +0.746787f, +0.732363f, +0.718682f, +0.707117f, +0.697608f, +0.691290f, +0.690306f, +0.693724f, +0.697313f, + +0.698110f, +0.697117f, +0.698173f, +0.704038f, +0.714303f, +0.727029f, +0.740252f, +0.751165f, +0.758564f, +0.763392f, + +0.766644f, +0.476275f, +0.021569f, +0.014234f, +0.011348f, +0.009708f, +0.008627f, +0.007880f, +0.007331f, +0.006984f + }, + { + -0.153364f, -0.431722f, -0.223627f, +0.301076f, +0.722224f, -0.556999f, -0.565103f, -0.549432f, -0.582858f, -0.652605f, + -0.725752f, -0.768989f, -0.787009f, -0.795460f, -0.799903f, -0.802273f, -0.810592f, -0.819734f, -0.819713f, -0.811440f, + -0.810218f, -0.823687f, -0.847812f, -0.882959f, -0.916331f, -0.923092f, -0.897135f, -0.852425f, -0.807571f, -0.778572f, + -0.764796f, -0.754260f, -0.742158f, -0.732054f, -0.724750f, -0.718657f, -0.717707f, -0.728664f, -0.752080f, -0.779872f, + -0.802697f, -0.816824f, -0.824778f, -0.830921f, -0.836340f, -0.839993f, -0.842458f, -0.844537f, -0.846022f, -0.846444f, + -0.845634f, -0.519355f, -0.013685f, -0.004231f, -0.000639f, +0.001743f, +0.003484f, +0.004764f, +0.005716f, +0.006342f + }, + { + +0.116550f, +0.029982f, -0.090957f, -0.110646f, -0.118380f, +0.164545f, +0.157003f, +0.141182f, +0.129273f, +0.111996f, + +0.147830f, +0.204091f, +0.287029f, +0.400304f, +0.498327f, +0.520367f, +0.451929f, +0.319838f, +0.163989f, +0.032354f, + -0.042553f, -0.060144f, -0.040752f, -0.013808f, +0.000138f, -0.005386f, -0.028033f, -0.056626f, -0.076148f, -0.071775f, + -0.036161f, +0.022235f, +0.079923f, +0.117243f, +0.132960f, +0.137374f, +0.136857f, +0.131489f, +0.122150f, +0.112795f, + +0.106854f, +0.101987f, +0.090861f, +0.069094f, +0.037690f, -0.001570f, -0.046208f, -0.089113f, -0.124780f, -0.152938f, + -0.172930f, -0.116660f, -0.004115f, -0.001599f, -0.000541f, +0.000076f, +0.000490f, +0.000781f, +0.000995f, +0.001134f + }, + { + +0.082564f, +0.045748f, -0.100405f, -0.164616f, -0.222135f, +0.214978f, +0.289164f, +0.366751f, +0.467015f, +0.536298f, + +0.539710f, +0.520805f, +0.484049f, +0.427086f, +0.396728f, +0.377012f, +0.337930f, +0.285243f, +0.217171f, +0.132009f, + +0.046348f, -0.022295f, -0.070187f, -0.092267f, -0.077417f, -0.017841f, +0.082276f, +0.200597f, +0.305996f, +0.384055f, + +0.437163f, +0.477207f, +0.515520f, +0.552589f, +0.576862f, +0.576107f, +0.552740f, +0.521313f, +0.495097f, +0.480391f, + +0.476238f, +0.478234f, +0.481677f, +0.482298f, +0.476112f, +0.459832f, +0.433225f, +0.402349f, +0.373577f, +0.349500f, + +0.331993f, +0.196598f, +0.008828f, +0.006124f, +0.005015f, +0.004377f, +0.003953f, +0.003666f, +0.003455f, +0.003322f + }, + { + -0.003514f, +0.046208f, +0.169189f, +0.246290f, +0.258608f, -0.123594f, -0.193752f, -0.277639f, -0.358490f, -0.412970f, + -0.375502f, -0.335121f, -0.313658f, -0.292262f, -0.289663f, -0.299499f, -0.304389f, -0.287189f, -0.236107f, -0.144024f, + -0.032821f, +0.070365f, +0.149507f, +0.187444f, +0.180044f, +0.144272f, +0.102205f, +0.062405f, +0.023790f, -0.014970f, + -0.051711f, -0.089890f, -0.137092f, -0.185775f, -0.210322f, -0.196357f, -0.159984f, -0.132056f, -0.131975f, -0.158785f, + -0.198654f, -0.237349f, -0.267138f, -0.288631f, -0.306064f, -0.320945f, -0.330270f, -0.332422f, -0.328795f, -0.320830f, + -0.310872f, -0.187382f, -0.005468f, -0.001915f, -0.000434f, +0.000505f, +0.001165f, +0.001641f, +0.001991f, +0.002211f + }, + { + +0.013914f, -0.020481f, +0.177151f, +0.153853f, +0.123281f, -0.036226f, -0.012165f, +0.059498f, +0.118703f, +0.132408f, + +0.083769f, +0.028816f, -0.010439f, -0.073641f, -0.151111f, -0.179257f, -0.122167f, +0.005411f, +0.171409f, +0.319887f, + +0.406332f, +0.430666f, +0.412015f, +0.355554f, +0.251589f, +0.114356f, -0.007079f, -0.075058f, -0.090668f, -0.081196f, + -0.074468f, -0.080971f, -0.090434f, -0.084438f, -0.060093f, -0.030473f, -0.006048f, +0.011097f, +0.020590f, +0.019141f, + +0.003724f, -0.020621f, -0.041568f, -0.049068f, -0.040365f, -0.016570f, +0.017826f, +0.053778f, +0.084772f, +0.109921f, + +0.128269f, +0.087720f, +0.005379f, +0.003683f, +0.002987f, +0.002556f, +0.002255f, +0.002029f, +0.001849f, +0.001721f + }, + { + -0.011077f, +0.068268f, +0.172045f, +0.224907f, +0.203958f, -0.141636f, -0.177909f, -0.173456f, -0.154997f, -0.177581f, + -0.193129f, -0.200675f, -0.206181f, -0.214819f, -0.189032f, -0.095163f, +0.041087f, +0.161032f, +0.223656f, +0.217536f, + +0.144366f, +0.019748f, -0.128357f, -0.264169f, -0.342543f, -0.342225f, -0.294756f, -0.250400f, -0.244775f, -0.284375f, + -0.346925f, -0.405676f, -0.451837f, -0.491950f, -0.524795f, -0.539708f, -0.531569f, -0.507105f, -0.477798f, -0.451524f, + -0.430027f, -0.409991f, -0.385628f, -0.353400f, -0.313904f, -0.270406f, -0.228673f, -0.195310f, -0.172245f, -0.157165f, + -0.147622f, -0.088637f, -0.002701f, -0.000757f, -0.000102f, +0.000326f, +0.000623f, +0.000845f, +0.001012f, +0.001117f + }, + { + +0.012737f, -0.122413f, -0.162191f, -0.048954f, -0.011887f, -0.006284f, -0.059137f, -0.075306f, -0.039450f, -0.013641f, + +0.045456f, +0.080111f, +0.103447f, +0.126400f, +0.143692f, +0.144628f, +0.151274f, +0.185913f, +0.238389f, +0.293656f, + +0.325256f, +0.310455f, +0.248320f, +0.125814f, -0.065585f, -0.279482f, -0.445586f, -0.528904f, -0.532954f, -0.480876f, + -0.402256f, -0.318153f, -0.233483f, -0.146163f, -0.062900f, +0.003457f, +0.047237f, +0.075491f, +0.099694f, +0.124312f, + +0.146112f, +0.160783f, +0.167687f, +0.170589f, +0.175305f, +0.185793f, +0.200659f, +0.215074f, +0.226218f, +0.233509f, + +0.236369f, +0.146507f, +0.006425f, +0.003570f, +0.002320f, +0.001557f, +0.001038f, +0.000666f, +0.000389f, +0.000202f + }, + { + +0.029441f, +0.255135f, +0.388005f, +0.324509f, +0.179661f, +0.170310f, +0.199090f, +0.247152f, +0.215232f, +0.107372f, + +0.008342f, -0.045561f, -0.073414f, -0.101929f, -0.145853f, -0.188184f, -0.218566f, -0.229908f, -0.227139f, -0.213922f, + -0.197983f, -0.187165f, -0.178153f, -0.183267f, -0.213809f, -0.243068f, -0.221134f, -0.135714f, -0.022342f, +0.076608f, + +0.151824f, +0.214097f, +0.269402f, +0.314773f, +0.344233f, +0.355048f, +0.346502f, +0.321399f, +0.286050f, +0.247674f, + +0.212622f, +0.185179f, +0.166697f, +0.155655f, +0.148981f, +0.143401f, +0.135815f, +0.125610f, +0.114535f, +0.104436f, + +0.097691f, +0.053982f, +0.004390f, +0.004991f, +0.005112f, +0.005266f, +0.005387f, +0.005507f, +0.005600f, +0.005657f + }, + { + +0.041114f, +0.246567f, +0.453640f, +0.578453f, +0.486412f, -0.085090f, -0.077743f, -0.105123f, -0.097004f, -0.045376f, + -0.020819f, -0.016253f, -0.032947f, -0.042605f, -0.033758f, -0.016413f, +0.007617f, +0.029954f, +0.049569f, +0.072006f, + +0.091910f, +0.092490f, +0.068505f, +0.047173f, +0.058854f, +0.098422f, +0.131962f, +0.131305f, +0.096674f, +0.045232f, + -0.016136f, -0.088833f, -0.169184f, -0.242523f, -0.287880f, -0.297628f, -0.284744f, -0.271800f, -0.274450f, -0.292315f, + -0.315219f, -0.333992f, -0.345833f, -0.354700f, -0.364920f, -0.377015f, -0.386323f, -0.388549f, -0.384259f, -0.374493f, + -0.360625f, -0.216189f, -0.003741f, +0.001455f, +0.003488f, +0.004851f, +0.005842f, +0.006588f, +0.007154f, +0.007521f + }, + { + +0.001575f, -0.034404f, +0.099063f, +0.057191f, -0.005967f, -0.008737f, -0.002839f, +0.023739f, -0.002327f, -0.047119f, + -0.071338f, -0.062023f, -0.056518f, -0.075939f, -0.095829f, -0.111755f, -0.130192f, -0.158682f, -0.192417f, -0.228710f, + -0.262770f, -0.285090f, -0.275706f, -0.204512f, -0.075591f, +0.061762f, +0.166412f, +0.231582f, +0.264188f, +0.274397f, + +0.272990f, +0.267274f, +0.254902f, +0.232321f, +0.205252f, +0.184838f, +0.177638f, +0.176928f, +0.167497f, +0.139224f, + +0.092627f, +0.036902f, -0.016017f, -0.057208f, -0.085094f, -0.105460f, -0.126261f, -0.149970f, -0.174030f, -0.196813f, + -0.215950f, -0.143890f, -0.006512f, -0.003675f, -0.002495f, -0.001778f, -0.001286f, -0.000926f, -0.000653f, -0.000468f + }, + { + +0.028351f, +0.158366f, +0.387375f, +0.209323f, +0.138479f, -0.024944f, -0.076050f, -0.068784f, -0.086894f, -0.022640f, + +0.046924f, +0.098681f, +0.157850f, +0.216715f, +0.230469f, +0.177937f, +0.056736f, -0.099412f, -0.230053f, -0.293062f, + -0.274665f, -0.188848f, -0.054201f, +0.120177f, +0.294891f, +0.394157f, +0.378101f, +0.280693f, +0.170935f, +0.092689f, + +0.049777f, +0.036466f, +0.052499f, +0.093934f, +0.142595f, +0.175682f, +0.184503f, +0.177658f, +0.170605f, +0.173641f, + +0.186618f, +0.200281f, +0.202941f, +0.188511f, +0.159081f, +0.120865f, +0.081855f, +0.050347f, +0.028940f, +0.016023f, + +0.010660f, +0.004676f, +0.001512f, +0.002489f, +0.002909f, +0.003234f, +0.003490f, +0.003708f, +0.003879f, +0.003976f + }, + { + -0.012536f, -0.024508f, +0.026715f, +0.100256f, +0.030165f, -0.019036f, -0.001980f, +0.053411f, +0.062729f, +0.042787f, + +0.037541f, +0.042995f, +0.032630f, -0.006363f, -0.069971f, -0.130620f, -0.144750f, -0.095861f, +0.019571f, +0.165595f, + +0.287776f, +0.359211f, +0.370344f, +0.312965f, +0.207299f, +0.103383f, +0.034254f, +0.002634f, +0.000632f, +0.017232f, + +0.044292f, +0.070055f, +0.076868f, +0.050271f, -0.014441f, -0.103260f, -0.190056f, -0.255807f, -0.297413f, -0.321963f, + -0.337614f, -0.347902f, -0.352331f, -0.349280f, -0.338882f, -0.321988f, -0.297068f, -0.266207f, -0.234929f, -0.205756f, + -0.181333f, -0.099905f, -0.004409f, -0.003069f, -0.002383f, -0.001976f, -0.001706f, -0.001520f, -0.001384f, -0.001294f + }, + { + -0.035759f, -0.028302f, +0.056431f, +0.144293f, +0.088149f, -0.053194f, -0.088872f, -0.078778f, -0.083787f, -0.070879f, + -0.044081f, -0.064468f, -0.084007f, -0.069723f, -0.065974f, -0.065725f, -0.028666f, +0.041152f, +0.101149f, +0.149485f, + +0.178233f, +0.189381f, +0.210408f, +0.258912f, +0.327924f, +0.370146f, +0.333626f, +0.220608f, +0.075539f, -0.065890f, + -0.187899f, -0.284687f, -0.349780f, -0.377256f, -0.364619f, -0.319560f, -0.262043f, -0.211477f, -0.176684f, -0.155472f, + -0.138294f, -0.114703f, -0.080295f, -0.040726f, -0.007428f, +0.011160f, +0.014827f, +0.010699f, +0.005174f, +0.001704f, + +0.001420f, +0.001014f, -0.000876f, -0.000438f, -0.000227f, -0.000068f, +0.000051f, +0.000148f, +0.000219f, +0.000266f + }, + { + +0.006625f, -0.028791f, -0.110750f, +0.054204f, +0.049674f, -0.081883f, -0.031641f, +0.002710f, +0.078824f, +0.101542f, + +0.075137f, +0.045466f, +0.054841f, +0.071727f, +0.069146f, +0.060555f, +0.070378f, +0.108883f, +0.172304f, +0.238963f, + +0.284300f, +0.307237f, +0.320185f, +0.308402f, +0.229243f, +0.069136f, -0.124082f, -0.287351f, -0.389327f, -0.427896f, + -0.417142f, -0.373698f, -0.302766f, -0.196446f, -0.061231f, +0.073312f, +0.179141f, +0.248754f, +0.289902f, +0.309552f, + +0.307579f, +0.283972f, +0.243621f, +0.194795f, +0.147699f, +0.110790f, +0.086424f, +0.072421f, +0.065314f, +0.061874f, + +0.059680f, +0.034356f, +0.001808f, +0.001292f, +0.001117f, +0.000966f, +0.000841f, +0.000731f, +0.000643f, +0.000577f + }, + { + +0.000088f, +0.014221f, -0.031471f, -0.012506f, +0.016816f, -0.022850f, -0.080939f, -0.132222f, -0.131943f, -0.137399f, + -0.094433f, -0.042539f, -0.032957f, -0.046202f, -0.048525f, -0.059770f, -0.084778f, -0.088776f, -0.061042f, -0.014146f, + +0.040389f, +0.099574f, +0.156222f, +0.193208f, +0.193160f, +0.165499f, +0.148012f, +0.164330f, +0.198656f, +0.229866f, + +0.254546f, +0.275046f, +0.287016f, +0.293580f, +0.312690f, +0.352380f, +0.396514f, +0.417891f, +0.401549f, +0.353465f, + +0.291737f, +0.233593f, +0.189322f, +0.157681f, +0.127979f, +0.091171f, +0.047074f, +0.003648f, -0.032270f, -0.058776f, + -0.074801f, -0.053275f, -0.002235f, -0.000782f, -0.000024f, +0.000460f, +0.000788f, +0.001026f, +0.001200f, +0.001310f + } + } +}; + +const float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]= +{ + { + { + +0.059427f, +0.323489f, +0.582074f, +0.628019f, +0.485149f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.558569f, +1.123301f, +1.071392f, +0.922801f, +0.655805f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.026222f, -0.091698f, -0.022334f, +0.030939f, +0.002089f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.038487f, +0.008114f, +0.051584f, +0.033837f, -0.057739f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.008714f, +0.037748f, +0.010900f, +0.009237f, -0.119056f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.008836f, -0.057513f, -0.080701f, +0.035007f, +0.008665f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.024377f, +0.057800f, +0.058232f, +0.019393f, +0.043727f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.084907f, -0.120786f, +0.030218f, +0.022916f, -0.018816f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.158353f, +0.267853f, +0.188581f, +0.098698f, +0.081781f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.007347f, +0.125090f, +0.290579f, +0.433270f, +0.391769f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.004972f, -0.058443f, -0.096170f, +0.015200f, -0.015504f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.010548f, -0.009294f, +0.259682f, +0.401123f, +0.254463f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.006518f, +0.054591f, +0.083263f, +0.019926f, -0.072338f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.016992f, +0.103452f, +0.153728f, +0.074125f, +0.031700f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.000799f, -0.008968f, +0.119989f, +0.127988f, +0.010981f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.002551f, +0.001879f, +0.006379f, +0.079606f, +0.073878f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + } + }, + { + { + +0.059427f, +0.323489f, +0.582074f, +0.628019f, +0.485149f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.558569f, -1.123301f, -1.071392f, -0.922801f, -0.655805f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.026222f, -0.091698f, -0.022334f, +0.030939f, +0.002089f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.038487f, +0.008114f, +0.051584f, +0.033837f, -0.057739f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.008714f, -0.037748f, -0.010900f, -0.009237f, +0.119056f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.008836f, +0.057513f, +0.080701f, -0.035007f, -0.008665f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.024377f, +0.057800f, +0.058232f, +0.019393f, +0.043727f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.084907f, -0.120786f, +0.030218f, +0.022916f, -0.018816f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.158353f, +0.267853f, +0.188581f, +0.098698f, +0.081781f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.007347f, -0.125090f, -0.290579f, -0.433270f, -0.391769f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.004972f, +0.058443f, +0.096170f, -0.015200f, +0.015504f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + -0.010548f, +0.009294f, -0.259682f, -0.401123f, -0.254463f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.006518f, +0.054591f, +0.083263f, +0.019926f, -0.072338f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.016992f, +0.103452f, +0.153728f, +0.074125f, +0.031700f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.000799f, -0.008968f, +0.119989f, +0.127988f, +0.010981f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + }, + { + +0.002551f, +0.001879f, +0.006379f, +0.079606f, +0.073878f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, + +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f + } + } +}; + + +/* Binaural rendering data set based on BRIRs */ +/* Tables derived from Mozart IIS BRIRs.*/ +const float FASTCONV_BRIR_latency_s = 0.000937500f; +const float leftBRIRReal[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]= +{ + { + { + +0.001780f, -0.105056f, +0.133278f, -0.013415f, +0.027669f, -0.000540f, -0.047934f, -0.044980f, -0.017889f, +0.014321f, + +0.007348f, +0.030484f, +0.044975f, +0.005666f, -0.034603f, +0.018843f, +0.002080f, +0.033565f, -0.016623f, -0.033123f, + +0.004545f, -0.007249f, -0.020493f, -0.012461f, -0.003474f, -0.006890f, +0.003323f, +0.027582f, -0.003920f, +0.017221f, + +0.007285f, -0.008685f, -0.016040f, +0.012562f, +0.015499f, +0.001625f, -0.025322f, -0.007796f, +0.026150f, +0.021802f, + +0.017631f, -0.035176f, -0.023797f, -0.005155f, +0.007249f, +0.007251f, +0.002385f, -0.006721f, -0.001230f, -0.014337f, + -0.009093f, -0.002049f, +0.011497f, +0.006946f, -0.004541f, +0.008374f, +0.021898f, +0.011743f, +0.001865f, +0.006238f, + -0.002008f, -0.005675f, -0.003277f, -0.006934f, -0.007010f, -0.008036f, -0.018176f, -0.020279f, -0.007475f, +0.009061f, + +0.006923f, +0.007912f, +0.013080f, +0.001609f, +0.013686f, +0.009018f, +0.006450f, +0.002098f, +0.000388f, -0.005499f, + -0.000841f, -0.002854f, -0.004612f, -0.008123f, -0.007147f, -0.001362f, -0.002523f, -0.004943f, -0.002941f, +0.003854f, + +0.005553f, +0.002213f, -0.001155f, -0.001829f, -0.001203f, +0.005271f + }, + { + -0.002443f, -0.083508f, +0.098365f, +0.037484f, -0.013594f, +0.013837f, -0.037463f, -0.048465f, -0.029325f, +0.013451f, + +0.007052f, +0.018278f, +0.042952f, +0.015453f, -0.008889f, -0.017385f, -0.006510f, +0.042423f, +0.012017f, -0.029035f, + -0.007193f, -0.006032f, -0.027138f, +0.008138f, -0.035149f, +0.002167f, -0.008454f, +0.009206f, +0.013636f, +0.030767f, + +0.013182f, -0.018053f, -0.004793f, +0.012041f, +0.029395f, -0.014100f, -0.017378f, -0.003281f, +0.002494f, +0.015977f, + +0.007597f, -0.024681f, -0.009020f, +0.002628f, -0.008376f, -0.011389f, +0.020276f, +0.005431f, -0.006750f, -0.016869f, + -0.002214f, +0.001715f, -0.001174f, +0.001433f, +0.006966f, +0.005911f, +0.014916f, +0.007008f, +0.011727f, +0.003817f, + +0.005292f, -0.007060f, -0.007694f, +0.000872f, -0.006877f, -0.017034f, -0.013400f, -0.017798f, -0.003941f, -0.003404f, + +0.002214f, +0.010770f, +0.007439f, +0.008531f, +0.012195f, +0.013261f, +0.008042f, +0.011889f, -0.000017f, -0.007584f, + -0.002593f, -0.007918f, -0.006925f, -0.009156f, -0.008523f, -0.000877f, -0.003705f, -0.005308f, -0.000536f, +0.004641f, + +0.005402f, +0.003731f, -0.001368f, +0.006712f, -0.001331f, -0.000001f + }, + { + +0.001577f, -0.096038f, +0.122150f, -0.006459f, +0.022325f, -0.000027f, -0.063687f, -0.019774f, +0.012474f, -0.031234f, + +0.007405f, +0.023691f, +0.032421f, +0.000786f, +0.013763f, +0.015733f, -0.022351f, +0.009390f, +0.010844f, -0.008986f, + +0.008484f, +0.013513f, -0.031290f, -0.022773f, -0.032612f, -0.023880f, -0.034376f, +0.023566f, +0.032996f, +0.059130f, + -0.002185f, +0.005337f, +0.015561f, -0.011976f, -0.009297f, -0.004752f, +0.007349f, -0.012610f, -0.006750f, -0.004614f, + +0.032358f, -0.001975f, -0.018009f, -0.012045f, +0.000424f, +0.009609f, +0.000663f, -0.018039f, -0.026347f, -0.005883f, + +0.004527f, +0.008915f, +0.009293f, +0.007857f, +0.013424f, -0.000926f, -0.008812f, +0.015440f, +0.030651f, +0.016814f, + -0.000177f, -0.008382f, -0.014175f, -0.002190f, -0.004912f, -0.023064f, -0.010710f, -0.019619f, -0.012580f, -0.015451f, + -0.002372f, +0.011022f, +0.013997f, +0.015155f, +0.015427f, +0.013021f, +0.020266f, +0.007943f, +0.006371f, -0.001363f, + -0.006379f, -0.010479f, -0.010549f, -0.004959f, -0.006581f, -0.012106f, -0.007281f, +0.001245f, +0.008303f, +0.004275f, + -0.003274f, +0.001709f, -0.003329f, -0.002696f, -0.005984f, -0.001909f + }, + { + -0.000006f, -0.027733f, +0.077114f, -0.045558f, +0.032248f, -0.008910f, -0.028200f, -0.023058f, -0.027634f, -0.027966f, + +0.041227f, +0.023834f, +0.055456f, +0.001453f, -0.003409f, -0.014351f, -0.029300f, +0.013819f, +0.000893f, +0.004000f, + +0.011259f, -0.029018f, -0.038584f, +0.040377f, +0.019731f, -0.035978f, -0.033986f, +0.033845f, +0.026782f, -0.001195f, + -0.014325f, +0.009074f, +0.007425f, -0.012637f, -0.001940f, +0.012452f, +0.003636f, -0.003399f, +0.005103f, -0.007745f, + +0.007052f, +0.004339f, -0.020016f, +0.005955f, -0.004311f, -0.011313f, -0.000423f, +0.011277f, +0.005730f, -0.012033f, + +0.003900f, +0.008340f, -0.013208f, +0.000785f, +0.006125f, -0.002905f, +0.011174f, +0.003535f, +0.001676f, +0.002337f, + -0.004942f, -0.003383f, +0.001012f, -0.002100f, -0.002251f, -0.006365f, -0.002787f, -0.005174f, -0.002163f, -0.004373f, + +0.007444f, +0.005800f, +0.009259f, +0.006157f, +0.000809f, +0.001778f, -0.004892f, +0.001752f, -0.004150f, -0.000093f, + -0.003724f, -0.001166f, +0.001070f, -0.002430f, +0.002087f, -0.003672f, -0.003190f, -0.000369f, +0.000661f, +0.002168f, + -0.001203f, -0.002130f, +0.003159f, +0.003661f, +0.002821f, +0.002384f + }, + { + -0.000155f, -0.070297f, +0.090942f, +0.032775f, -0.030590f, +0.020839f, -0.028817f, -0.031540f, -0.037455f, -0.026895f, + +0.037476f, +0.023355f, +0.051293f, +0.002998f, -0.003591f, -0.003463f, -0.027614f, +0.014649f, +0.026560f, -0.031369f, + +0.004580f, -0.026953f, -0.017939f, +0.021436f, +0.019104f, -0.050621f, +0.008635f, +0.028462f, +0.021525f, +0.007132f, + -0.028329f, +0.000568f, +0.004626f, -0.006606f, +0.004686f, -0.003323f, -0.008343f, +0.032718f, -0.001701f, -0.002728f, + +0.000858f, -0.009525f, -0.014432f, +0.008645f, +0.001756f, -0.003465f, -0.026906f, +0.004475f, +0.017767f, +0.008392f, + -0.001726f, -0.004896f, -0.002156f, +0.007339f, -0.005441f, +0.002248f, -0.000207f, +0.008442f, +0.006580f, -0.005199f, + -0.006372f, -0.003816f, +0.007245f, +0.005972f, -0.007165f, -0.005749f, -0.012003f, -0.000457f, -0.002340f, -0.002471f, + +0.000461f, +0.008416f, +0.008916f, +0.005921f, +0.006911f, -0.000370f, +0.004467f, -0.002533f, +0.001052f, -0.011242f, + -0.002003f, -0.001220f, +0.001437f, -0.003593f, -0.001228f, -0.000730f, -0.000770f, -0.005429f, +0.000421f, +0.002452f, + +0.000428f, -0.000531f, -0.000274f, +0.003451f, +0.005594f, +0.004053f + }, + { + +0.000800f, -0.033956f, +0.096219f, -0.067463f, +0.046275f, -0.012351f, -0.046768f, -0.021553f, -0.021902f, +0.012533f, + -0.019886f, +0.029501f, +0.070154f, +0.037900f, +0.008096f, +0.004763f, -0.075825f, -0.023722f, +0.016504f, +0.024437f, + -0.041516f, -0.036483f, +0.008372f, +0.040486f, -0.003436f, +0.032667f, -0.014789f, -0.025890f, -0.002803f, +0.002064f, + -0.002002f, +0.038451f, +0.017317f, -0.004823f, -0.043550f, +0.005577f, +0.006684f, +0.010622f, -0.000703f, -0.011381f, + -0.035794f, +0.022476f, +0.009651f, -0.000938f, -0.014561f, +0.007324f, +0.006178f, +0.002615f, +0.005966f, +0.013155f, + +0.001282f, +0.003489f, +0.005929f, +0.002159f, -0.007136f, -0.015265f, -0.023167f, -0.005425f, +0.001409f, +0.001941f, + -0.006284f, +0.000605f, -0.001727f, +0.012362f, +0.006507f, +0.008265f, -0.006072f, +0.003099f, +0.004819f, +0.009585f, + +0.004864f, +0.010256f, -0.005566f, -0.003569f, -0.003788f, -0.005704f, -0.007576f, -0.008894f, -0.008872f, -0.004225f, + -0.003661f, +0.005713f, +0.009059f, +0.008078f, +0.006576f, -0.001274f, -0.009685f, -0.004260f, +0.002181f, +0.003188f, + +0.004020f, +0.005583f, +0.004355f, -0.000489f, -0.000835f, -0.001246f + }, + { + -0.002844f, -0.061783f, +0.080736f, +0.040823f, -0.034502f, +0.022417f, -0.024560f, -0.037465f, -0.031654f, -0.018206f, + +0.010177f, +0.001407f, +0.053067f, +0.067818f, +0.011425f, -0.011778f, -0.045344f, -0.030490f, +0.009070f, +0.028980f, + -0.018736f, -0.048804f, -0.020026f, +0.036874f, +0.033017f, +0.001971f, -0.021184f, +0.009031f, +0.006532f, -0.021663f, + +0.001286f, +0.045564f, +0.008266f, -0.023886f, -0.027272f, +0.004240f, +0.005342f, +0.009160f, -0.001125f, -0.023213f, + -0.009656f, +0.021053f, +0.008688f, -0.018673f, -0.001519f, +0.011276f, +0.002100f, +0.000683f, -0.003039f, +0.007212f, + +0.020184f, -0.002268f, +0.013630f, -0.004957f, -0.012582f, -0.015763f, -0.006411f, -0.011298f, +0.001018f, -0.013212f, + -0.001371f, -0.001140f, +0.016689f, +0.008741f, +0.009361f, +0.001340f, -0.000071f, -0.007274f, +0.004598f, +0.004748f, + +0.006591f, +0.007692f, +0.001270f, +0.000981f, -0.010502f, -0.007709f, -0.000831f, -0.007484f, -0.005798f, -0.004753f, + -0.000837f, +0.003626f, +0.006201f, +0.002420f, +0.003722f, -0.000848f, -0.004391f, -0.002901f, +0.000815f, +0.006234f, + +0.002688f, +0.004208f, +0.001469f, -0.003937f, -0.000713f, -0.000590f + }, + { + +0.001397f, -0.044931f, +0.106881f, -0.065295f, +0.037582f, -0.009714f, -0.029617f, -0.022868f, -0.036764f, -0.003042f, + -0.007543f, +0.067886f, +0.054171f, +0.007553f, -0.012587f, -0.003955f, -0.030537f, +0.049202f, -0.020496f, -0.044438f, + -0.025477f, -0.008835f, -0.014131f, -0.011211f, +0.070560f, +0.030047f, -0.022921f, -0.030642f, +0.010266f, +0.001875f, + +0.010865f, +0.011582f, +0.004137f, +0.022171f, -0.012454f, -0.025236f, +0.004164f, +0.002137f, -0.013264f, -0.013226f, + -0.010521f, -0.013069f, +0.008617f, +0.028980f, -0.010261f, -0.001009f, +0.000247f, +0.026507f, -0.001257f, +0.004824f, + +0.002996f, +0.014687f, +0.009434f, +0.000540f, -0.016357f, -0.017992f, -0.019507f, -0.026850f, -0.004739f, +0.001919f, + -0.002560f, +0.010097f, +0.005306f, +0.003550f, +0.008613f, +0.019336f, +0.012898f, -0.008761f, +0.000247f, +0.007737f, + +0.009944f, +0.007053f, -0.001037f, -0.013757f, -0.008129f, -0.005901f, -0.014511f, -0.013583f, -0.003636f, -0.002940f, + +0.002245f, +0.006942f, +0.010401f, +0.007518f, +0.002463f, -0.000690f, -0.003441f, -0.004050f, +0.001999f, +0.008040f, + +0.006590f, +0.006623f, +0.001194f, -0.004732f, -0.005128f, -0.003193f + }, + { + -0.003491f, -0.055068f, +0.075403f, +0.036387f, -0.031969f, +0.032935f, -0.035550f, -0.040031f, -0.031977f, -0.008594f, + -0.004489f, +0.021357f, +0.055537f, +0.044003f, -0.013832f, +0.018439f, -0.027798f, -0.004389f, +0.007048f, -0.025695f, + -0.033714f, -0.007068f, -0.018817f, -0.024474f, +0.066384f, +0.050050f, -0.018485f, -0.059738f, +0.016542f, +0.007444f, + +0.035855f, +0.006314f, -0.000150f, +0.008931f, -0.034498f, -0.004228f, +0.014899f, -0.011896f, -0.010966f, -0.017035f, + -0.002763f, +0.008600f, -0.001116f, +0.012527f, +0.000041f, +0.000889f, +0.002927f, +0.004041f, +0.017895f, +0.003405f, + -0.014609f, +0.025790f, +0.017162f, -0.003732f, -0.013785f, -0.019631f, -0.015073f, -0.033264f, -0.005627f, +0.004109f, + -0.005004f, +0.009220f, +0.008039f, +0.012799f, +0.012341f, +0.008463f, +0.007764f, -0.006365f, -0.003097f, +0.006646f, + +0.012937f, +0.002987f, +0.003139f, -0.009051f, -0.013210f, -0.006648f, -0.007433f, -0.013067f, -0.005048f, +0.002249f, + +0.004435f, +0.006359f, -0.000017f, +0.009265f, +0.000656f, -0.004174f, -0.005051f, -0.000609f, +0.006460f, +0.013274f, + +0.003051f, +0.002515f, +0.001932f, -0.007212f, -0.008371f, +0.000020f + }, + { + +0.002968f, -0.064432f, +0.099653f, +0.007174f, -0.008869f, -0.076264f, +0.038628f, -0.007275f, -0.000647f, -0.013151f, + -0.028723f, +0.044166f, +0.008430f, -0.021996f, +0.017017f, -0.008895f, +0.029199f, -0.000200f, +0.011688f, -0.006480f, + +0.034465f, -0.027810f, -0.009181f, -0.005764f, -0.063289f, +0.003656f, -0.003588f, +0.018596f, +0.000062f, +0.029992f, + -0.030123f, +0.011396f, +0.004694f, -0.003103f, +0.026063f, +0.010371f, -0.007765f, +0.001378f, +0.021547f, +0.018262f, + -0.011875f, -0.035277f, -0.022400f, -0.021618f, +0.020884f, -0.004577f, +0.029384f, +0.008225f, -0.004140f, -0.022432f, + -0.010595f, -0.005064f, +0.005326f, +0.008508f, +0.005198f, +0.010207f, +0.002794f, -0.003341f, -0.003764f, -0.008384f, + +0.007389f, +0.009792f, +0.009073f, +0.004916f, +0.002041f, -0.006698f, -0.013975f, -0.003656f, -0.011627f, -0.004623f, + -0.005693f, -0.002611f, -0.002039f, +0.005283f, +0.007884f, +0.007073f, +0.009721f, +0.006131f, +0.005824f, +0.000309f, + +0.003633f, -0.004059f, -0.007429f, +0.002557f, -0.000355f, -0.006351f, -0.002259f, -0.006191f, -0.008852f, -0.001260f, + +0.002260f, -0.003137f, +0.004009f, +0.002753f, +0.001728f, -0.001795f + }, + { + +0.001582f, -0.076087f, +0.114790f, +0.008157f, -0.022689f, -0.065271f, +0.012270f, +0.016733f, +0.017345f, -0.038816f, + -0.008836f, +0.047811f, +0.004162f, -0.009451f, -0.002982f, +0.019482f, +0.000345f, -0.013854f, +0.026023f, -0.019584f, + +0.028659f, -0.017255f, -0.047984f, +0.000668f, -0.044521f, +0.011902f, +0.020798f, +0.018136f, +0.022706f, +0.026560f, + -0.002643f, -0.000444f, -0.010503f, -0.015590f, +0.012635f, -0.006915f, -0.005263f, +0.001753f, -0.004134f, -0.017390f, + +0.000296f, -0.015714f, -0.003627f, +0.015783f, +0.023735f, +0.010417f, +0.027313f, -0.007957f, -0.024025f, -0.009751f, + -0.036618f, -0.004836f, +0.014820f, +0.025369f, +0.016613f, +0.012563f, -0.010054f, +0.004303f, -0.022828f, -0.001583f, + -0.012202f, +0.016692f, +0.006990f, +0.003749f, -0.008324f, -0.015467f, -0.001351f, +0.001100f, +0.001390f, +0.003415f, + +0.000207f, +0.001701f, -0.007172f, +0.001835f, +0.009987f, +0.010152f, +0.002697f, -0.003803f, +0.005576f, -0.001027f, + +0.001078f, -0.008071f, -0.010642f, -0.005218f, -0.001116f, -0.004592f, -0.003723f, +0.005121f, +0.000223f, +0.007137f, + +0.006263f, +0.004037f, +0.004948f, -0.001406f, -0.004720f, -0.001700f + }, + { + -0.006330f, -0.020580f, +0.077779f, -0.013719f, -0.030242f, -0.057276f, +0.057816f, -0.009160f, -0.009857f, -0.006091f, + -0.052385f, +0.044101f, +0.003721f, +0.055403f, +0.030899f, -0.018711f, -0.035138f, +0.004102f, -0.023760f, -0.019338f, + +0.012140f, +0.010926f, -0.007476f, +0.018223f, -0.031708f, +0.039575f, -0.005727f, +0.022962f, -0.051828f, -0.001783f, + +0.014227f, +0.016613f, -0.000557f, +0.007682f, -0.013406f, -0.023205f, -0.011369f, -0.003889f, +0.026163f, -0.012449f, + -0.003863f, +0.029878f, +0.018495f, -0.007492f, +0.018962f, +0.005624f, +0.002246f, -0.007185f, -0.006773f, +0.000162f, + -0.021570f, -0.015306f, -0.011349f, -0.010894f, -0.007432f, -0.015819f, +0.004930f, +0.014517f, +0.014621f, +0.030143f, + +0.008687f, -0.003543f, -0.007137f, -0.003100f, -0.001076f, -0.003635f, +0.000873f, +0.013783f, +0.005992f, -0.000720f, + +0.001065f, -0.004785f, +0.002953f, -0.006228f, -0.012510f, -0.009145f, -0.011929f, -0.007362f, -0.003181f, +0.004152f, + +0.000675f, +0.005080f, +0.005384f, +0.011913f, +0.004869f, +0.008934f, +0.010560f, +0.006496f, -0.003904f, +0.001073f, + -0.004060f, -0.009736f, -0.010637f, -0.008732f, -0.008133f, -0.002577f + }, + { + +0.000055f, -0.083722f, +0.115327f, +0.022567f, -0.023523f, -0.038584f, -0.012388f, +0.035963f, -0.024768f, -0.002975f, + -0.083703f, +0.060947f, +0.022094f, +0.012220f, +0.059660f, +0.008166f, -0.032339f, -0.040698f, +0.017533f, -0.035490f, + +0.016990f, -0.002864f, +0.009671f, +0.001761f, -0.023183f, +0.011312f, +0.015084f, +0.000563f, -0.008235f, -0.021829f, + +0.020006f, +0.016385f, +0.022850f, -0.001098f, -0.032036f, -0.028675f, -0.013756f, +0.006712f, -0.001884f, -0.003222f, + +0.025192f, +0.028876f, +0.010962f, -0.017270f, +0.013588f, +0.005872f, +0.009215f, +0.003730f, -0.003056f, -0.000282f, + -0.019167f, -0.022626f, -0.027344f, -0.007572f, -0.006715f, -0.007519f, +0.018272f, +0.004604f, +0.011848f, +0.016471f, + +0.007891f, +0.004882f, -0.006395f, +0.001647f, +0.005036f, -0.006339f, +0.001662f, +0.009612f, +0.012456f, -0.008887f, + -0.002886f, +0.001354f, -0.002310f, -0.005746f, -0.016835f, -0.008759f, -0.007850f, -0.008829f, -0.000705f, +0.002081f, + +0.005950f, +0.006146f, +0.009087f, +0.005151f, +0.010791f, +0.007485f, +0.006196f, +0.002594f, +0.000848f, -0.001423f, + -0.004635f, -0.002230f, -0.010068f, -0.009447f, -0.007686f, -0.006129f + }, + { + -0.005141f, -0.027090f, +0.081784f, -0.010992f, -0.014484f, -0.071481f, +0.060187f, -0.025369f, -0.002494f, +0.002610f, + -0.042832f, +0.031224f, +0.042003f, +0.014291f, -0.026074f, +0.022631f, -0.014552f, -0.024727f, +0.003073f, +0.022431f, + -0.006480f, +0.024913f, -0.020662f, -0.009964f, -0.003311f, +0.002616f, -0.013979f, -0.013731f, +0.006906f, -0.000841f, + -0.013843f, +0.003501f, +0.005987f, +0.006258f, -0.005205f, +0.037526f, -0.005378f, +0.009547f, +0.019302f, +0.007878f, + -0.007848f, -0.032401f, -0.026833f, +0.015068f, -0.018119f, +0.006020f, +0.021361f, +0.009108f, -0.000740f, +0.005879f, + -0.022386f, -0.003800f, -0.019203f, -0.016539f, +0.013023f, +0.016421f, +0.009349f, +0.005914f, +0.000621f, +0.003786f, + -0.007694f, +0.003491f, +0.008512f, +0.011237f, -0.002476f, -0.006068f, -0.007649f, -0.011950f, -0.005357f, +0.003088f, + -0.000198f, +0.008268f, -0.003557f, -0.001498f, -0.003475f, -0.000534f, -0.001887f, -0.002040f, +0.007740f, +0.007491f, + +0.002533f, +0.003789f, +0.002547f, -0.000993f, -0.003490f, +0.000973f, -0.003978f, -0.003297f, -0.003486f, -0.004802f, + +0.000830f, -0.003049f, -0.000051f, +0.001319f, +0.000063f, +0.000529f + }, + { + +0.002559f, -0.070860f, +0.104918f, +0.002991f, -0.000881f, -0.051974f, +0.004078f, +0.013027f, -0.035230f, +0.020739f, + -0.033293f, +0.016090f, +0.019119f, +0.035098f, -0.029638f, +0.029909f, -0.006914f, -0.014717f, -0.010149f, +0.001565f, + +0.025526f, +0.011769f, -0.023744f, -0.018370f, -0.025818f, +0.007069f, +0.004997f, +0.006663f, +0.007200f, +0.002825f, + -0.017857f, +0.025081f, -0.004610f, -0.018816f, -0.003151f, +0.025261f, -0.000283f, +0.010441f, +0.008027f, +0.009178f, + -0.015449f, -0.016491f, -0.013771f, -0.000520f, +0.005799f, +0.001762f, +0.018543f, +0.005938f, +0.008607f, -0.015120f, + -0.030235f, -0.004867f, +0.007859f, -0.007462f, +0.007461f, +0.007478f, +0.005775f, +0.007349f, +0.002580f, -0.008623f, + -0.001683f, +0.004874f, +0.002547f, +0.001348f, +0.006263f, -0.006872f, +0.005685f, +0.002123f, -0.015232f, +0.000366f, + -0.000634f, -0.001449f, -0.004601f, +0.000150f, +0.001846f, -0.001502f, -0.003900f, +0.000969f, +0.007545f, +0.005025f, + +0.004521f, +0.000302f, -0.000475f, +0.004420f, +0.003055f, -0.002795f, -0.005130f, -0.009211f, -0.005913f, +0.002978f, + -0.000296f, +0.001544f, +0.002092f, -0.000932f, -0.001400f, +0.000548f + } + }, + { + { + -0.006722f, -0.192285f, -0.014559f, +0.041823f, +0.056535f, -0.009441f, -0.010336f, +0.002807f, -0.009719f, -0.000669f, + +0.008311f, +0.005610f, +0.001904f, +0.005739f, +0.001244f, +0.028209f, -0.010093f, +0.013937f, -0.013863f, -0.009242f, + +0.010987f, +0.001599f, -0.012937f, +0.003370f, +0.025681f, +0.020593f, +0.000615f, +0.021987f, +0.002660f, +0.015343f, + +0.007454f, +0.001189f, -0.016601f, +0.007666f, +0.007385f, +0.010431f, +0.001165f, -0.004408f, +0.012048f, +0.008069f, + +0.021684f, +0.005584f, +0.005149f, -0.008217f, +0.000637f, +0.010560f, +0.006164f, -0.003905f, +0.000554f, -0.004473f, + +0.001412f, +0.000232f, +0.003896f, +0.001451f, -0.004756f, -0.007102f, +0.000613f, -0.002473f, -0.005883f, +0.001152f, + -0.004355f, -0.001912f, +0.001708f, -0.003451f, +0.003028f, +0.001218f, -0.001789f, -0.002809f, -0.001906f, +0.006695f, + -0.001800f, -0.002564f, +0.005990f, -0.003080f, +0.000770f, +0.000519f, +0.006414f, +0.000623f, +0.003496f, +0.000962f, + +0.000851f, +0.001219f, +0.001296f, +0.000056f, -0.001216f, +0.002481f, +0.000127f, -0.001033f, +0.000048f, +0.002701f, + +0.005123f, +0.003037f, -0.001806f, -0.002656f, -0.002447f, +0.003956f + }, + { + +0.004493f, -0.010715f, +0.100012f, +0.044007f, +0.011364f, +0.006108f, -0.016848f, -0.002367f, +0.000875f, +0.015558f, + +0.006696f, -0.007534f, +0.007588f, +0.005533f, +0.000580f, -0.030901f, -0.029105f, +0.011884f, -0.006451f, -0.014879f, + +0.006009f, -0.011482f, -0.023734f, +0.032884f, -0.014268f, -0.009702f, -0.013558f, +0.012886f, +0.008905f, +0.004105f, + +0.004276f, -0.002715f, +0.013650f, -0.008545f, +0.013323f, -0.011598f, -0.008895f, +0.006223f, -0.007751f, -0.008138f, + -0.001803f, -0.002690f, +0.007510f, +0.006470f, -0.005122f, -0.005691f, +0.013806f, -0.001171f, -0.005329f, -0.001409f, + +0.012952f, +0.000748f, -0.006603f, -0.002782f, -0.006848f, -0.005634f, +0.009205f, -0.002702f, +0.003581f, +0.000958f, + +0.009731f, +0.000702f, -0.004320f, -0.001962f, -0.000270f, -0.006943f, -0.004278f, -0.006499f, +0.000389f, -0.005745f, + -0.002657f, +0.004151f, -0.001940f, -0.002051f, +0.002526f, +0.001200f, -0.005633f, +0.002857f, +0.002031f, +0.000296f, + +0.001476f, -0.005017f, +0.001545f, +0.002940f, -0.001080f, -0.000098f, -0.001801f, +0.001399f, +0.001863f, -0.002076f, + -0.000783f, +0.003671f, -0.001507f, +0.003840f, -0.002063f, +0.000542f + }, + { + -0.002386f, -0.104233f, +0.066480f, +0.037099f, +0.053332f, +0.000176f, -0.023939f, -0.006680f, +0.004383f, +0.000029f, + +0.024982f, -0.002763f, +0.001892f, -0.006009f, +0.006317f, -0.005905f, -0.014384f, +0.023963f, +0.024021f, +0.003734f, + -0.001461f, +0.006433f, -0.014595f, -0.001537f, -0.004014f, +0.010714f, -0.010464f, +0.005989f, -0.014396f, +0.011322f, + -0.017456f, +0.001720f, +0.004778f, -0.004472f, -0.006527f, -0.011270f, -0.002549f, -0.007073f, +0.005916f, -0.010866f, + +0.016291f, -0.004606f, -0.008346f, -0.003022f, +0.002823f, +0.003146f, -0.009924f, -0.003248f, +0.004771f, +0.004770f, + +0.004676f, +0.005127f, +0.001819f, -0.001813f, +0.013598f, +0.002212f, -0.011235f, +0.002094f, +0.007245f, +0.002555f, + -0.000326f, +0.000781f, -0.001186f, +0.009557f, +0.008073f, -0.008815f, -0.000323f, -0.002472f, +0.005376f, -0.006897f, + -0.007056f, -0.001879f, +0.002348f, +0.005965f, +0.004742f, -0.002788f, +0.004148f, -0.000056f, +0.004876f, -0.000828f, + -0.002601f, -0.001894f, -0.001284f, -0.000480f, +0.000531f, +0.000704f, +0.000126f, -0.000813f, +0.002096f, +0.001395f, + -0.003620f, +0.000290f, -0.002635f, +0.000219f, +0.001152f, +0.003183f + }, + { + +0.001774f, -0.149780f, -0.039555f, -0.032353f, +0.053505f, +0.007878f, -0.001180f, +0.008355f, -0.008668f, -0.055517f, + -0.000227f, -0.000997f, +0.018903f, -0.010254f, -0.020653f, -0.016191f, +0.004122f, +0.021347f, -0.003520f, -0.006321f, + +0.004585f, -0.019486f, -0.018908f, +0.021234f, +0.008103f, -0.012402f, -0.016875f, +0.001335f, -0.004577f, +0.003219f, + -0.006463f, -0.003177f, +0.006303f, -0.007674f, -0.006143f, +0.011743f, +0.009920f, +0.005388f, +0.008020f, -0.008821f, + -0.000903f, -0.006542f, -0.016475f, +0.009992f, +0.005146f, +0.006883f, +0.004559f, +0.004162f, +0.006470f, -0.000289f, + +0.012722f, +0.016965f, -0.001615f, +0.007086f, +0.008019f, -0.003837f, +0.001810f, +0.000400f, +0.000640f, +0.000073f, + -0.006301f, +0.000641f, +0.009285f, +0.001082f, +0.001051f, -0.005895f, -0.003156f, -0.001159f, +0.006313f, +0.000608f, + +0.007281f, +0.001070f, +0.002108f, +0.001208f, -0.001958f, +0.003354f, -0.000033f, +0.004525f, -0.002993f, +0.002011f, + +0.001575f, +0.002281f, +0.000837f, -0.002108f, +0.001518f, -0.002069f, +0.002280f, +0.001916f, -0.003212f, -0.003524f, + -0.003166f, -0.003150f, -0.000366f, -0.000666f, +0.000295f, +0.002914f + }, + { + +0.000742f, -0.032548f, +0.072297f, +0.025196f, -0.023127f, -0.003851f, -0.006854f, -0.001607f, -0.014142f, -0.004070f, + +0.039117f, -0.000271f, +0.024719f, +0.009512f, -0.016309f, -0.027219f, -0.016901f, +0.002767f, +0.005464f, -0.022698f, + -0.005774f, -0.017459f, +0.018885f, +0.008785f, -0.005720f, -0.026932f, +0.020819f, +0.009823f, +0.013148f, +0.008061f, + -0.017607f, +0.001369f, +0.006354f, -0.011455f, -0.008969f, -0.001620f, +0.007523f, +0.019569f, -0.012483f, -0.004084f, + +0.009727f, +0.008803f, +0.002034f, -0.000984f, -0.010809f, +0.006116f, -0.018293f, -0.005184f, +0.002659f, +0.005479f, + +0.007241f, +0.001013f, +0.007707f, +0.013660f, -0.000212f, -0.001741f, -0.007703f, +0.002934f, +0.001202f, +0.001513f, + +0.005900f, -0.002588f, +0.002097f, +0.004906f, -0.000756f, +0.004936f, -0.003604f, +0.002731f, -0.002406f, -0.005884f, + -0.005161f, -0.001648f, -0.002680f, -0.003584f, +0.003347f, -0.000716f, +0.005217f, -0.000896f, +0.003743f, -0.004178f, + -0.000912f, -0.001183f, +0.002659f, -0.000004f, +0.000735f, -0.001681f, +0.001917f, -0.002915f, -0.000927f, +0.002278f, + +0.000862f, +0.001197f, -0.000988f, -0.000731f, +0.000933f, +0.000127f + }, + { + +0.001780f, -0.205879f, -0.061367f, -0.040650f, +0.075695f, +0.009293f, -0.010527f, +0.009515f, -0.014313f, +0.007836f, + +0.008562f, +0.011243f, -0.024033f, -0.012612f, -0.004494f, +0.004105f, -0.020738f, +0.014841f, +0.017579f, +0.005342f, + -0.024707f, -0.007543f, -0.022849f, -0.001791f, -0.013118f, +0.020088f, -0.012651f, -0.028223f, -0.003853f, +0.013017f, + -0.006841f, +0.013471f, -0.006426f, +0.006645f, -0.012528f, +0.018572f, +0.017589f, +0.001112f, -0.006238f, -0.006945f, + -0.023687f, +0.017990f, +0.003406f, +0.002838f, -0.002502f, +0.005343f, -0.007252f, -0.007670f, +0.000791f, +0.008331f, + -0.007603f, -0.000686f, +0.013930f, +0.011134f, +0.002706f, +0.003334f, +0.004258f, +0.007500f, +0.002726f, -0.002358f, + -0.008720f, +0.005739f, -0.002550f, +0.008016f, +0.002237f, -0.002495f, -0.007150f, +0.005065f, +0.002091f, +0.002505f, + +0.000299f, +0.000054f, -0.008364f, +0.001455f, -0.000604f, -0.001088f, +0.001565f, -0.002383f, -0.004898f, +0.000487f, + -0.000213f, +0.000035f, -0.000197f, -0.000594f, +0.000931f, -0.000013f, -0.005294f, +0.001548f, +0.001514f, -0.000980f, + +0.001413f, +0.003626f, +0.003651f, -0.000292f, +0.000885f, +0.003319f + }, + { + +0.003967f, +0.029498f, +0.112054f, +0.018636f, -0.027647f, -0.002307f, -0.010366f, -0.002137f, -0.001637f, -0.005855f, + +0.012259f, +0.007423f, +0.016308f, +0.007104f, -0.027394f, -0.016286f, -0.024480f, -0.028838f, -0.009201f, +0.012039f, + -0.002266f, -0.009521f, -0.012419f, +0.009438f, -0.011272f, -0.025389f, +0.003662f, +0.027221f, -0.012023f, -0.016386f, + -0.004027f, +0.015863f, -0.009527f, -0.007009f, +0.004869f, +0.008356f, -0.009167f, -0.001074f, +0.001888f, -0.005381f, + -0.000419f, +0.006708f, -0.006662f, -0.018084f, +0.002947f, +0.012606f, +0.008781f, +0.002627f, -0.011802f, -0.002689f, + +0.011612f, -0.004519f, +0.013554f, +0.002773f, +0.000678f, -0.000215f, +0.002178f, -0.012103f, +0.004145f, -0.005860f, + -0.000819f, -0.004017f, +0.001910f, -0.002704f, +0.007657f, +0.003152f, +0.004524f, -0.005162f, -0.000003f, +0.003825f, + +0.001444f, +0.003352f, +0.003699f, +0.006602f, -0.001080f, +0.004200f, +0.005015f, -0.000677f, +0.001009f, -0.004334f, + -0.000208f, +0.004568f, +0.003020f, -0.000403f, +0.001497f, -0.002704f, -0.003113f, -0.003017f, -0.002280f, +0.000510f, + -0.002035f, +0.000245f, +0.000484f, -0.001712f, -0.000836f, +0.001112f + }, + { + -0.000904f, -0.210882f, -0.057473f, -0.036729f, +0.056501f, -0.004830f, -0.004785f, -0.003620f, -0.016106f, +0.011030f, + +0.000245f, +0.021177f, -0.004642f, +0.013365f, -0.021943f, -0.017225f, -0.018861f, +0.024010f, -0.016405f, -0.012948f, + -0.009815f, -0.015049f, +0.007741f, +0.007291f, +0.017727f, -0.005447f, -0.013238f, -0.018650f, +0.000536f, -0.005907f, + +0.006988f, -0.001644f, -0.002679f, +0.008868f, -0.008891f, -0.004969f, +0.002970f, +0.003955f, -0.010952f, -0.014842f, + -0.011746f, -0.014590f, -0.009947f, +0.005549f, -0.015983f, +0.002228f, +0.001276f, +0.012201f, -0.017381f, +0.000000f, + +0.005998f, -0.004132f, -0.009883f, -0.001493f, -0.009533f, -0.004573f, +0.003337f, +0.002549f, +0.007635f, -0.003021f, + -0.002080f, +0.005188f, -0.005772f, -0.001736f, -0.000917f, +0.000940f, +0.005014f, -0.003448f, -0.000899f, -0.003284f, + +0.001474f, +0.006767f, +0.001604f, -0.002899f, +0.002582f, -0.001233f, +0.000430f, +0.001286f, +0.001397f, +0.002346f, + +0.001769f, -0.001604f, -0.001182f, -0.001522f, -0.001010f, +0.001172f, +0.000590f, +0.000579f, +0.001253f, +0.001895f, + +0.000610f, +0.003424f, +0.003705f, +0.001453f, +0.000113f, -0.000901f + }, + { + +0.003902f, +0.046761f, +0.122644f, +0.017834f, -0.025174f, +0.003626f, -0.026314f, -0.005741f, -0.003219f, -0.002456f, + +0.000294f, +0.006059f, +0.007058f, +0.010950f, -0.012527f, -0.003525f, -0.026084f, -0.016009f, +0.012407f, +0.014459f, + -0.005317f, +0.015030f, +0.005833f, -0.049372f, -0.002207f, +0.011724f, +0.006192f, -0.023131f, +0.020416f, +0.006706f, + +0.006686f, +0.002295f, -0.004056f, -0.003493f, -0.010729f, +0.000619f, +0.015152f, -0.001229f, -0.005575f, -0.006576f, + -0.002423f, +0.002401f, -0.000551f, +0.003646f, -0.007264f, +0.006623f, +0.010048f, +0.000521f, +0.003674f, -0.001973f, + -0.010306f, +0.014396f, +0.000448f, -0.000939f, +0.000882f, -0.006294f, +0.004952f, -0.002308f, +0.002110f, +0.001780f, + -0.003814f, +0.002397f, -0.005723f, +0.000389f, +0.001699f, -0.003006f, +0.003153f, +0.000288f, +0.002103f, +0.000641f, + +0.003617f, -0.005893f, -0.000343f, +0.003413f, +0.003107f, +0.004410f, -0.000006f, -0.003644f, +0.001594f, +0.000464f, + +0.000811f, +0.000892f, -0.005128f, +0.005065f, -0.001994f, +0.001023f, +0.003798f, +0.002329f, +0.001438f, +0.003904f, + -0.001980f, +0.001503f, +0.002469f, -0.003480f, -0.001095f, +0.005247f + }, + { + -0.006079f, -0.175471f, -0.007039f, +0.008165f, +0.046542f, +0.008599f, +0.085164f, -0.029872f, -0.002635f, +0.005348f, + -0.014300f, +0.028414f, +0.005925f, -0.022888f, -0.027533f, -0.021342f, +0.016512f, +0.006376f, +0.005254f, -0.025568f, + +0.023222f, -0.018403f, +0.007805f, +0.031757f, -0.006773f, +0.012585f, -0.008137f, +0.017523f, +0.002884f, +0.033209f, + -0.015813f, +0.007737f, +0.016751f, +0.015011f, +0.007533f, -0.006605f, -0.009006f, +0.000129f, +0.000690f, -0.002270f, + -0.020139f, -0.031061f, -0.007994f, -0.015891f, +0.005293f, +0.000618f, +0.019329f, -0.004834f, -0.001119f, -0.005527f, + +0.010980f, +0.000279f, +0.016238f, +0.005488f, -0.014989f, -0.001866f, -0.001803f, -0.002238f, +0.004670f, +0.000338f, + +0.010698f, +0.010205f, +0.006184f, +0.000839f, -0.001122f, +0.001829f, -0.006878f, -0.004134f, -0.003845f, +0.001536f, + -0.000762f, +0.003875f, +0.005232f, +0.000876f, +0.001291f, -0.001376f, +0.000895f, +0.000800f, +0.002635f, -0.001916f, + +0.000817f, +0.003451f, +0.001169f, +0.006396f, +0.005634f, +0.002885f, +0.003322f, +0.003714f, -0.001295f, +0.001808f, + +0.002666f, -0.003609f, -0.001232f, -0.001944f, +0.002819f, +0.003047f + }, + { + -0.002430f, -0.081806f, +0.082631f, +0.009014f, +0.001395f, -0.013157f, +0.024183f, -0.033288f, +0.012203f, +0.000523f, + -0.004553f, +0.021865f, +0.000039f, +0.013264f, +0.005511f, +0.004983f, -0.003670f, -0.021038f, +0.022545f, +0.001669f, + +0.040136f, -0.005799f, -0.009676f, +0.034707f, -0.012981f, +0.011085f, +0.007441f, +0.003867f, -0.016463f, -0.010512f, + -0.017154f, -0.005276f, -0.012215f, -0.005935f, +0.025018f, +0.006300f, -0.013496f, -0.009077f, -0.007092f, -0.001107f, + +0.018939f, -0.012406f, -0.007535f, +0.008133f, +0.022775f, +0.001451f, +0.005830f, -0.010496f, -0.011313f, +0.002760f, + -0.010707f, +0.000334f, -0.002416f, +0.008874f, +0.005740f, +0.001420f, -0.018911f, +0.004924f, -0.008418f, +0.005859f, + -0.008551f, +0.006184f, -0.002957f, +0.000577f, -0.004876f, -0.007604f, +0.002266f, +0.007489f, +0.003735f, +0.001648f, + -0.003822f, -0.004266f, -0.005173f, +0.002958f, -0.002342f, -0.001292f, -0.001633f, -0.008499f, +0.003110f, +0.001454f, + +0.001803f, -0.002661f, +0.001310f, +0.002865f, +0.000774f, -0.005278f, -0.007071f, +0.002205f, -0.002833f, +0.000603f, + +0.002696f, +0.001476f, +0.005372f, +0.001720f, -0.000597f, +0.001583f + }, + { + +0.019502f, -0.096784f, -0.044033f, -0.026250f, +0.023217f, +0.015460f, +0.044228f, -0.013565f, +0.014535f, +0.028458f, + -0.067458f, -0.015785f, +0.003736f, +0.014394f, -0.035519f, -0.001848f, +0.018384f, +0.044104f, +0.008961f, -0.000926f, + +0.021140f, +0.017556f, -0.010790f, +0.017548f, -0.024512f, +0.026039f, -0.016549f, +0.021179f, -0.015716f, +0.020600f, + -0.007089f, -0.012355f, -0.011794f, +0.024775f, +0.010511f, -0.006373f, +0.013288f, -0.000692f, +0.005762f, -0.015294f, + -0.009313f, +0.009189f, +0.008484f, -0.015567f, +0.001306f, +0.003578f, +0.008332f, -0.006863f, -0.005333f, +0.009259f, + +0.002469f, +0.000138f, -0.002845f, +0.000826f, +0.006299f, +0.000064f, +0.003366f, -0.001167f, +0.002418f, +0.013274f, + -0.000298f, -0.010989f, -0.008283f, +0.002602f, +0.005275f, +0.001291f, -0.004774f, +0.003674f, +0.000758f, +0.000306f, + +0.002186f, -0.005256f, +0.001251f, -0.002832f, -0.003162f, -0.001887f, -0.002822f, -0.000396f, -0.001881f, +0.002610f, + -0.000450f, +0.004576f, +0.001805f, +0.002918f, -0.004220f, -0.000271f, +0.001194f, +0.001554f, -0.001421f, +0.002964f, + -0.002633f, -0.002994f, -0.000058f, +0.001104f, -0.001486f, +0.001435f + }, + { + +0.000144f, -0.061118f, +0.086971f, +0.022437f, +0.009630f, -0.020679f, -0.040856f, -0.018022f, -0.027750f, +0.017671f, + -0.030817f, +0.034328f, -0.013020f, +0.022485f, +0.028300f, -0.005637f, -0.012430f, -0.015330f, +0.011967f, -0.012787f, + +0.018168f, -0.006574f, +0.023495f, -0.006018f, -0.007449f, +0.021450f, +0.020347f, +0.029918f, +0.012228f, -0.016987f, + +0.000863f, -0.018754f, -0.000427f, -0.018954f, -0.016583f, -0.006485f, -0.001137f, +0.009774f, -0.009715f, -0.016801f, + -0.002999f, +0.015466f, +0.014708f, -0.001544f, +0.008328f, +0.006714f, +0.010577f, +0.005669f, +0.000726f, +0.001351f, + +0.002297f, +0.002786f, -0.018892f, -0.007564f, -0.004752f, -0.002879f, +0.001116f, -0.010716f, -0.000568f, +0.003847f, + -0.002088f, +0.000575f, -0.003423f, +0.004086f, +0.007794f, -0.001086f, +0.005101f, -0.001805f, -0.000029f, -0.006550f, + +0.000975f, -0.001247f, -0.000019f, +0.005249f, -0.008070f, -0.007742f, -0.002680f, -0.003696f, -0.000737f, -0.001729f, + +0.003347f, +0.002864f, +0.001326f, -0.007065f, -0.002997f, -0.004053f, -0.001983f, -0.001615f, -0.000561f, -0.001178f, + -0.002940f, +0.005082f, -0.001143f, -0.001745f, +0.001711f, +0.000815f + }, + { + +0.015595f, -0.110844f, -0.039129f, -0.018750f, +0.039811f, +0.008046f, +0.052601f, -0.019808f, +0.057009f, +0.047780f, + -0.025631f, +0.028917f, +0.002360f, +0.008812f, +0.015699f, +0.044197f, +0.001354f, -0.006284f, +0.006791f, +0.008041f, + -0.015066f, +0.011521f, -0.016060f, +0.010927f, +0.004451f, -0.013968f, -0.010335f, +0.007074f, +0.011600f, +0.002523f, + -0.008483f, -0.002947f, -0.012827f, -0.003075f, -0.017088f, +0.016842f, -0.012728f, +0.006654f, +0.013154f, -0.013711f, + -0.011676f, -0.008771f, -0.007478f, +0.015728f, -0.002209f, +0.006262f, -0.000028f, +0.000632f, +0.002360f, +0.005822f, + -0.004648f, +0.016876f, -0.005791f, -0.015160f, -0.005376f, +0.006422f, +0.008275f, +0.003102f, -0.000532f, -0.001227f, + -0.005869f, +0.002389f, +0.000236f, +0.000899f, -0.009400f, -0.004505f, +0.000855f, +0.004075f, +0.007946f, +0.002363f, + -0.001173f, +0.011799f, -0.002403f, +0.001716f, -0.002689f, -0.003380f, -0.000938f, -0.003601f, +0.001160f, -0.001654f, + -0.004772f, -0.002410f, -0.002892f, -0.007791f, -0.004767f, +0.003488f, -0.001878f, +0.001361f, +0.000716f, -0.003000f, + +0.000398f, -0.002889f, -0.001178f, +0.002236f, +0.001728f, -0.000535f + }, + { + -0.004485f, -0.110626f, +0.051685f, -0.000519f, +0.018532f, -0.018108f, -0.008138f, -0.017398f, -0.027189f, +0.028689f, + -0.009625f, +0.006497f, -0.016224f, +0.035144f, +0.035134f, +0.025000f, -0.031089f, -0.008967f, -0.009535f, -0.011082f, + +0.023758f, +0.029200f, -0.013708f, +0.010316f, -0.003517f, +0.005325f, +0.005909f, +0.002856f, +0.005127f, +0.001701f, + -0.044658f, +0.009569f, +0.001139f, +0.005852f, +0.007024f, +0.011168f, +0.008814f, +0.005422f, -0.013078f, +0.000616f, + -0.003820f, +0.000548f, +0.001736f, -0.003107f, +0.002131f, +0.000620f, +0.006188f, -0.009038f, +0.005841f, +0.005212f, + -0.007008f, +0.004593f, +0.012587f, -0.000419f, +0.011015f, +0.008134f, +0.005048f, +0.011587f, +0.010883f, +0.000339f, + -0.001766f, -0.005563f, -0.000588f, +0.004625f, +0.011818f, -0.004228f, +0.001445f, +0.002646f, -0.005631f, +0.001946f, + -0.000818f, +0.000879f, +0.002840f, +0.001375f, +0.000365f, -0.007071f, -0.010011f, +0.001711f, +0.004790f, -0.000088f, + +0.004108f, +0.002364f, -0.002821f, +0.004637f, +0.005849f, +0.004919f, +0.005963f, -0.000529f, -0.004197f, +0.002619f, + -0.000325f, -0.000132f, +0.001050f, +0.000208f, -0.001035f, +0.003352f + } + }, + { + { + +0.011256f, -0.119408f, -0.131867f, +0.130006f, -0.009043f, -0.016121f, +0.000091f, +0.013302f, -0.017335f, -0.008362f, + +0.007097f, +0.005467f, -0.012605f, +0.013616f, +0.020155f, +0.005289f, +0.003202f, -0.001442f, +0.005709f, -0.000083f, + -0.004633f, +0.003544f, -0.011470f, +0.014637f, +0.033504f, +0.014848f, -0.009005f, +0.023116f, +0.014411f, -0.001353f, + +0.006169f, +0.018472f, -0.010222f, -0.005830f, +0.013464f, +0.003936f, +0.003404f, -0.002654f, +0.004585f, +0.010755f, + +0.011257f, +0.018859f, +0.003736f, -0.002233f, +0.000309f, +0.007579f, +0.001546f, -0.000753f, -0.004137f, +0.004729f, + +0.007619f, -0.001231f, -0.001224f, -0.004935f, +0.001262f, -0.008449f, -0.008042f, -0.001506f, -0.002780f, -0.003959f, + -0.004569f, +0.003226f, +0.001931f, -0.007053f, +0.006675f, -0.002104f, +0.001969f, +0.004079f, -0.001709f, +0.005807f, + -0.001657f, -0.006991f, +0.003931f, +0.000994f, -0.005524f, +0.005168f, +0.002721f, -0.000692f, +0.001917f, -0.000126f, + -0.000083f, +0.004290f, +0.003506f, +0.002913f, -0.000680f, +0.002678f, +0.000681f, -0.003028f, +0.001870f, +0.003836f, + +0.002399f, +0.003078f, -0.002536f, -0.002695f, -0.000147f, +0.001374f + }, + { + -0.001538f, +0.107274f, -0.006290f, +0.033191f, +0.021130f, -0.003273f, -0.009323f, +0.016652f, -0.000216f, +0.011925f, + +0.009236f, -0.014825f, -0.008742f, +0.010421f, +0.001339f, -0.033013f, -0.001413f, -0.012598f, -0.016333f, +0.001359f, + +0.012229f, -0.001012f, -0.022017f, +0.008272f, +0.013957f, -0.024288f, +0.001413f, +0.006378f, +0.019249f, -0.025945f, + +0.011652f, -0.017305f, +0.035746f, -0.019615f, -0.000204f, +0.001485f, -0.011556f, +0.002244f, -0.004920f, -0.005130f, + -0.004162f, +0.006753f, -0.005929f, +0.022730f, -0.007100f, -0.000879f, +0.004603f, -0.003407f, -0.001236f, +0.007212f, + +0.005860f, -0.001233f, -0.000944f, +0.000366f, -0.008312f, -0.011228f, +0.009050f, -0.006364f, -0.001002f, +0.007026f, + +0.004558f, +0.002386f, -0.004280f, -0.000896f, -0.003347f, +0.002541f, -0.001247f, -0.002141f, -0.002689f, -0.006253f, + -0.000261f, -0.002351f, -0.000873f, -0.004343f, -0.000289f, -0.001724f, -0.002896f, -0.001215f, +0.000657f, +0.004067f, + -0.000107f, -0.004589f, +0.005379f, +0.003289f, -0.000407f, +0.000410f, +0.000613f, +0.002964f, +0.000827f, -0.004463f, + -0.001820f, +0.003078f, +0.000943f, +0.000201f, +0.001736f, -0.000449f + }, + { + -0.000086f, +0.037094f, -0.078838f, +0.083464f, +0.025409f, -0.013685f, -0.003556f, -0.006975f, -0.019722f, +0.033910f, + -0.000841f, -0.000730f, +0.001079f, -0.001438f, -0.011671f, -0.010254f, +0.018978f, +0.008105f, +0.022537f, +0.012673f, + -0.000685f, -0.016581f, +0.000541f, -0.001037f, +0.013610f, -0.002171f, -0.017002f, +0.007803f, -0.016285f, -0.000107f, + +0.000643f, -0.010791f, +0.003851f, +0.009130f, -0.024950f, -0.006778f, +0.005614f, -0.013719f, +0.005323f, -0.004708f, + +0.000442f, +0.008177f, +0.000583f, -0.000501f, -0.014176f, +0.001564f, -0.002928f, -0.005278f, +0.014342f, +0.005319f, + +0.007293f, -0.010462f, +0.007124f, +0.004425f, +0.005214f, +0.000475f, -0.004083f, +0.001397f, -0.000267f, -0.000262f, + -0.000208f, +0.004631f, +0.002694f, +0.009887f, +0.005077f, +0.001874f, -0.004261f, +0.003832f, +0.002374f, -0.004128f, + -0.003131f, -0.004574f, -0.003320f, +0.006453f, +0.001872f, -0.006756f, +0.003738f, -0.000976f, +0.003721f, +0.001287f, + -0.002154f, -0.002062f, +0.003425f, -0.003507f, +0.002359f, +0.005401f, -0.001757f, -0.000345f, -0.000132f, +0.002799f, + -0.004923f, -0.002273f, +0.001995f, -0.001528f, +0.003407f, +0.002591f + }, + { + -0.006036f, -0.257411f, +0.040305f, +0.028187f, +0.000174f, +0.000480f, +0.004011f, +0.012467f, -0.000983f, -0.024493f, + -0.034526f, +0.010056f, -0.016794f, +0.005358f, -0.009205f, -0.032645f, +0.024734f, -0.004850f, +0.016507f, -0.019654f, + -0.001478f, -0.005780f, -0.003919f, +0.010306f, +0.001912f, -0.005182f, +0.001204f, -0.011287f, -0.006117f, -0.003118f, + -0.001071f, -0.010687f, -0.003646f, +0.000891f, +0.001166f, +0.001859f, +0.005186f, +0.011561f, +0.010123f, -0.006278f, + +0.002972f, -0.018664f, +0.001488f, +0.000162f, +0.012061f, +0.007451f, +0.004534f, +0.000525f, -0.002092f, +0.007431f, + +0.018326f, +0.009689f, -0.000867f, +0.005858f, +0.006065f, +0.001550f, -0.002692f, -0.004949f, +0.007264f, +0.002268f, + -0.008559f, +0.000649f, +0.009100f, -0.002169f, +0.006146f, -0.005439f, -0.002458f, -0.005507f, +0.008237f, +0.003569f, + +0.004695f, +0.003110f, +0.000517f, -0.001198f, +0.000705f, +0.003225f, +0.002499f, +0.001725f, -0.001584f, +0.000063f, + +0.003409f, +0.001983f, -0.000872f, +0.001084f, -0.001679f, +0.000541f, +0.002625f, +0.000259f, -0.001476f, -0.004165f, + -0.002270f, -0.003844f, +0.000874f, -0.001272f, -0.003136f, +0.003870f + }, + { + -0.001184f, +0.052210f, -0.008917f, +0.000514f, +0.005233f, -0.007317f, +0.004062f, +0.001787f, -0.007623f, +0.014043f, + +0.008413f, +0.005346f, +0.012245f, +0.011171f, -0.010208f, -0.009425f, -0.015807f, -0.017698f, -0.010252f, -0.006024f, + -0.010802f, -0.007354f, +0.027520f, +0.002327f, -0.022819f, -0.008191f, +0.005061f, +0.004008f, +0.019523f, -0.002494f, + +0.012891f, -0.018477f, +0.018078f, -0.026403f, +0.002573f, -0.006739f, +0.020399f, +0.003709f, -0.006126f, -0.003779f, + +0.005788f, +0.012415f, +0.010435f, -0.011141f, -0.010110f, +0.004542f, -0.011777f, -0.004882f, +0.005179f, +0.000269f, + -0.000222f, +0.001117f, +0.020436f, +0.007643f, +0.001753f, -0.001564f, -0.010540f, +0.000135f, +0.001182f, +0.005642f, + +0.004918f, -0.002327f, +0.000841f, +0.002562f, +0.006079f, -0.004435f, +0.000271f, +0.001614f, +0.000470f, -0.001716f, + -0.007035f, -0.006006f, -0.003620f, -0.002638f, -0.000456f, +0.002968f, +0.001854f, +0.003211f, +0.001300f, +0.000339f, + -0.003915f, -0.000019f, +0.000237f, +0.000572f, +0.000672f, +0.001718f, -0.001244f, +0.000093f, -0.001324f, +0.002579f, + -0.000431f, +0.001792f, -0.001835f, -0.000495f, -0.000009f, -0.001074f + }, + { + -0.009969f, -0.332186f, +0.034558f, +0.067463f, -0.018244f, +0.005600f, +0.002221f, +0.012806f, -0.003443f, -0.005553f, + +0.017047f, +0.002938f, -0.039281f, -0.027373f, +0.004336f, -0.017648f, -0.002701f, +0.032161f, +0.010920f, +0.001691f, + -0.015852f, +0.001135f, -0.025476f, -0.005860f, -0.003628f, +0.001777f, -0.010154f, -0.014160f, -0.005462f, -0.000727f, + +0.005097f, +0.009039f, -0.003561f, -0.006670f, +0.006804f, +0.000605f, +0.025144f, -0.006707f, +0.000414f, -0.011802f, + -0.001202f, -0.008502f, +0.013918f, -0.003708f, +0.002028f, +0.004600f, -0.005467f, -0.000898f, +0.002142f, +0.002676f, + -0.012110f, +0.001963f, +0.015497f, +0.005252f, +0.004045f, +0.002329f, +0.013321f, +0.005660f, +0.003619f, -0.003340f, + -0.004399f, +0.001774f, -0.000881f, +0.007768f, +0.000397f, -0.006398f, +0.000866f, -0.003254f, +0.005037f, -0.003359f, + +0.003992f, -0.007528f, -0.001999f, +0.001397f, -0.003262f, -0.000157f, +0.003153f, -0.001909f, -0.002075f, -0.002082f, + +0.003710f, +0.000048f, -0.000904f, -0.003756f, -0.001139f, +0.001301f, -0.005104f, +0.006370f, -0.001487f, -0.000303f, + +0.000527f, +0.001878f, +0.003707f, -0.000356f, +0.001395f, +0.004720f + }, + { + +0.000942f, +0.081085f, +0.058507f, -0.026453f, +0.017471f, -0.004764f, -0.010986f, +0.004882f, +0.010200f, -0.004698f, + -0.003443f, +0.012355f, +0.013460f, -0.012935f, -0.014330f, -0.016493f, -0.033509f, -0.013576f, -0.015337f, +0.009716f, + +0.010082f, -0.001748f, -0.017295f, +0.027909f, -0.033941f, -0.021110f, +0.014138f, +0.005427f, -0.009722f, -0.012158f, + -0.010327f, +0.023424f, -0.011587f, -0.008186f, +0.016081f, +0.005385f, -0.006343f, -0.006549f, -0.003037f, +0.011115f, + -0.003252f, -0.004585f, -0.005445f, -0.005123f, +0.002343f, +0.002302f, +0.013814f, +0.002106f, -0.015085f, +0.003008f, + +0.001985f, +0.008261f, +0.001257f, +0.006186f, +0.001501f, +0.001998f, +0.002102f, -0.010763f, +0.000232f, -0.002245f, + +0.002558f, -0.003164f, -0.008187f, +0.001818f, +0.002720f, +0.004137f, +0.004643f, +0.001990f, -0.002641f, +0.007437f, + -0.001260f, -0.002689f, +0.005829f, +0.005801f, -0.000911f, +0.009778f, -0.001855f, +0.000475f, +0.004709f, -0.002641f, + -0.000028f, +0.003066f, +0.003949f, -0.001643f, +0.001320f, -0.004129f, -0.002056f, -0.002409f, +0.000319f, -0.001031f, + -0.002951f, -0.001298f, -0.001724f, +0.000966f, -0.001031f, +0.002904f + }, + { + -0.004492f, -0.311824f, +0.002026f, +0.071285f, -0.020585f, -0.024073f, -0.006780f, +0.003146f, +0.005189f, +0.009069f, + -0.003959f, -0.007957f, +0.012327f, +0.012780f, -0.030786f, -0.017054f, +0.013177f, -0.005520f, +0.008556f, -0.008506f, + -0.016771f, -0.009864f, +0.012803f, +0.004427f, -0.006240f, -0.007126f, +0.000442f, -0.014505f, -0.010115f, -0.001137f, + +0.000477f, -0.009285f, +0.009569f, +0.005218f, -0.009542f, -0.003063f, -0.006109f, +0.012235f, -0.009130f, -0.011140f, + -0.022868f, -0.003313f, -0.004051f, -0.012342f, -0.008467f, +0.000119f, +0.008432f, +0.001598f, -0.014724f, -0.006674f, + +0.005770f, -0.010953f, +0.005268f, -0.012787f, -0.003371f, +0.000789f, -0.000956f, +0.014395f, +0.007813f, -0.003242f, + -0.005006f, -0.001570f, -0.002871f, -0.008459f, +0.004325f, -0.002342f, -0.002268f, +0.003070f, -0.001185f, -0.005693f, + -0.002861f, +0.004094f, +0.002557f, +0.002791f, +0.002078f, +0.003300f, +0.001241f, +0.001568f, +0.001836f, +0.003994f, + -0.000609f, -0.002479f, -0.002282f, -0.000954f, -0.000399f, -0.000460f, +0.001921f, +0.001662f, -0.000117f, +0.000248f, + +0.000745f, +0.002081f, +0.004675f, +0.000466f, +0.001613f, +0.001024f + }, + { + +0.003032f, +0.066925f, +0.088698f, -0.017650f, +0.013385f, -0.005210f, -0.011496f, -0.002450f, -0.000886f, -0.005505f, + +0.008612f, -0.007729f, +0.006560f, -0.005249f, +0.008691f, -0.028775f, -0.003077f, -0.019148f, +0.015061f, +0.014309f, + +0.004415f, +0.015461f, +0.014200f, -0.041011f, -0.022540f, -0.002923f, +0.002437f, +0.002763f, +0.012197f, +0.002362f, + -0.003092f, -0.008867f, +0.008761f, -0.023703f, +0.014315f, +0.010272f, +0.006933f, -0.001034f, -0.007039f, +0.000036f, + -0.007987f, +0.000461f, -0.002233f, -0.001279f, +0.001582f, +0.006605f, +0.004300f, +0.000749f, +0.003887f, -0.007305f, + -0.003037f, +0.006567f, +0.000025f, +0.001512f, +0.000690f, -0.004150f, +0.003073f, +0.010693f, -0.001667f, -0.000724f, + +0.002913f, -0.002875f, -0.008462f, +0.000660f, +0.000486f, -0.002558f, +0.003298f, +0.002379f, +0.000227f, +0.001112f, + +0.000921f, -0.005383f, -0.003558f, +0.005701f, +0.002831f, +0.008089f, +0.001556f, -0.001196f, +0.002376f, -0.004166f, + +0.002291f, +0.000046f, -0.003918f, +0.002457f, -0.000637f, +0.000892f, +0.003740f, +0.003978f, -0.000710f, +0.000782f, + -0.000906f, +0.001071f, +0.000906f, -0.002825f, +0.001259f, +0.005937f + }, + { + +0.004935f, -0.217971f, +0.010566f, +0.001346f, +0.030966f, +0.050239f, +0.065677f, -0.042929f, +0.000075f, -0.008113f, + +0.009489f, +0.008986f, +0.000679f, +0.002404f, -0.036648f, -0.000837f, -0.011228f, +0.019854f, -0.007713f, -0.012234f, + +0.004664f, -0.009930f, -0.002486f, +0.017741f, +0.034027f, +0.006965f, -0.012723f, +0.023629f, +0.024837f, -0.005170f, + +0.003445f, -0.005437f, +0.012859f, +0.032217f, -0.016782f, -0.009763f, -0.000714f, +0.008696f, -0.015625f, +0.000389f, + -0.030820f, -0.021196f, -0.011039f, +0.003003f, -0.008636f, +0.006415f, +0.005351f, +0.000328f, -0.000205f, -0.004125f, + +0.021251f, -0.004126f, +0.017806f, +0.001647f, -0.018692f, -0.004140f, -0.005076f, -0.002947f, +0.016714f, +0.001658f, + +0.003236f, +0.013209f, +0.002160f, +0.002855f, -0.005508f, +0.005552f, -0.001964f, -0.005087f, +0.001464f, -0.004929f, + +0.003031f, -0.000963f, +0.010453f, -0.003709f, +0.003708f, -0.002402f, -0.003527f, +0.003791f, -0.000259f, +0.001729f, + -0.003669f, +0.008374f, -0.003546f, +0.010266f, +0.006050f, +0.003956f, +0.001633f, +0.006472f, -0.001342f, +0.003021f, + +0.002106f, -0.002976f, -0.002360f, -0.002015f, +0.003524f, +0.002737f + }, + { + +0.000340f, +0.002579f, +0.000999f, +0.007242f, -0.016747f, +0.007236f, +0.040910f, -0.027985f, -0.022425f, +0.032085f, + -0.001253f, -0.022861f, +0.014105f, +0.015351f, +0.012464f, -0.025763f, +0.001878f, +0.027877f, -0.014704f, +0.011964f, + +0.034418f, -0.008374f, +0.013735f, +0.016669f, +0.004010f, +0.001346f, +0.008931f, -0.006664f, -0.002206f, -0.005722f, + -0.033084f, +0.000963f, -0.028400f, +0.005827f, +0.019246f, +0.018127f, -0.014861f, -0.017253f, -0.006760f, +0.008133f, + +0.013705f, -0.011386f, -0.010227f, +0.009870f, +0.016582f, +0.004106f, +0.001065f, -0.015420f, -0.002362f, -0.007218f, + +0.007305f, +0.000222f, -0.010192f, +0.008397f, +0.001293f, -0.000052f, -0.011457f, -0.009294f, +0.002534f, +0.001525f, + +0.005404f, -0.008360f, -0.001660f, +0.000922f, -0.011764f, +0.007476f, +0.001092f, +0.004268f, +0.003179f, +0.001323f, + -0.004194f, -0.007695f, -0.000954f, +0.007367f, -0.008712f, -0.004682f, -0.000393f, -0.002101f, -0.002243f, +0.001256f, + +0.000770f, -0.000871f, +0.007248f, +0.003688f, -0.004796f, -0.001672f, -0.003409f, -0.000540f, +0.000962f, -0.001623f, + -0.001285f, +0.002622f, +0.004746f, +0.000920f, +0.000324f, +0.000582f + }, + { + -0.030672f, -0.103326f, +0.010640f, -0.023231f, +0.018641f, +0.072611f, -0.026982f, -0.008605f, +0.012208f, -0.001738f, + -0.017784f, -0.023660f, +0.017313f, -0.008932f, -0.060202f, +0.019687f, +0.044032f, +0.028726f, +0.014628f, +0.010571f, + +0.016295f, +0.005062f, -0.011090f, +0.008120f, +0.012379f, -0.008216f, -0.002725f, +0.009090f, -0.004862f, +0.015156f, + -0.002330f, -0.016207f, -0.003305f, +0.021964f, +0.004520f, +0.012016f, +0.013241f, -0.002677f, -0.000497f, -0.014794f, + -0.006616f, +0.003197f, +0.001521f, -0.004593f, -0.008571f, +0.004373f, +0.010069f, -0.005577f, +0.000010f, -0.000164f, + +0.003991f, +0.004927f, +0.000367f, +0.003201f, +0.003953f, +0.002115f, +0.013600f, -0.005750f, +0.002082f, +0.004066f, + -0.002283f, -0.014808f, -0.002113f, +0.005140f, +0.001946f, +0.004829f, -0.007151f, +0.002035f, -0.002325f, +0.001926f, + +0.000387f, -0.001198f, -0.004384f, -0.001096f, +0.004639f, -0.005358f, -0.000607f, +0.000501f, -0.001096f, +0.000932f, + +0.005794f, +0.002575f, -0.003372f, +0.001924f, -0.003836f, -0.002705f, +0.000426f, +0.000188f, +0.001860f, +0.000795f, + -0.003122f, +0.000264f, +0.002722f, +0.000355f, +0.001407f, -0.000081f + }, + { + -0.000292f, +0.045813f, -0.027426f, +0.023937f, +0.013236f, -0.023654f, -0.019026f, -0.030879f, -0.013647f, -0.001243f, + +0.006026f, +0.009518f, -0.024462f, +0.041974f, -0.009884f, -0.009945f, -0.005696f, +0.039739f, -0.028907f, -0.006701f, + +0.014526f, -0.012072f, +0.049539f, -0.019781f, +0.007762f, +0.009956f, +0.004250f, +0.042154f, +0.017895f, -0.009360f, + -0.009704f, -0.035757f, +0.000379f, -0.012567f, -0.013538f, +0.001904f, -0.008791f, +0.006200f, -0.006549f, -0.001555f, + -0.016914f, +0.010976f, +0.001691f, +0.019805f, -0.000880f, +0.012322f, +0.004197f, +0.009170f, +0.001661f, -0.002652f, + -0.002766f, +0.007139f, -0.006645f, -0.008150f, -0.010691f, +0.002825f, -0.008978f, -0.007460f, -0.001194f, -0.001047f, + -0.004465f, +0.002731f, -0.001346f, +0.005964f, +0.006599f, +0.000813f, +0.003638f, -0.001720f, -0.008341f, -0.001109f, + +0.001207f, -0.000299f, -0.004838f, +0.008108f, -0.003626f, -0.009282f, -0.000209f, -0.006926f, +0.002427f, -0.000334f, + +0.001477f, +0.001444f, +0.001045f, -0.004720f, -0.006507f, -0.007144f, -0.004142f, -0.001276f, -0.000952f, +0.002558f, + -0.002568f, +0.005110f, -0.001201f, -0.000612f, +0.002498f, +0.000578f + }, + { + -0.024105f, -0.137203f, +0.010973f, -0.015308f, +0.025466f, +0.065357f, -0.009399f, +0.002382f, +0.044540f, +0.031244f, + -0.002562f, +0.024364f, -0.018343f, +0.018353f, +0.043637f, +0.040549f, -0.003950f, -0.013274f, +0.029446f, -0.002059f, + +0.001127f, -0.026097f, -0.004026f, +0.018116f, +0.001859f, -0.001413f, -0.000533f, +0.010501f, -0.007652f, -0.004281f, + +0.004047f, +0.003513f, -0.018948f, +0.001010f, -0.016655f, -0.003030f, +0.005809f, +0.006194f, +0.003043f, -0.015047f, + -0.015145f, -0.008123f, +0.005350f, +0.003629f, +0.009596f, +0.004762f, -0.003486f, +0.004742f, +0.010106f, -0.011423f, + +0.012553f, +0.004019f, +0.001857f, -0.001756f, -0.011325f, -0.000648f, +0.012020f, -0.004381f, +0.008129f, -0.002506f, + -0.004640f, +0.001033f, -0.008228f, +0.000857f, -0.006266f, -0.006133f, +0.007153f, +0.007356f, +0.010736f, -0.003607f, + -0.003680f, +0.011121f, -0.001529f, +0.000938f, -0.000049f, -0.003812f, -0.001038f, -0.002385f, -0.000238f, -0.002834f, + -0.005174f, -0.001030f, -0.002665f, -0.009526f, -0.003778f, +0.001003f, +0.001947f, +0.001383f, -0.001828f, -0.001620f, + -0.000650f, +0.004030f, -0.003916f, +0.001296f, +0.001439f, +0.000349f + }, + { + +0.002057f, -0.051094f, -0.032740f, +0.013500f, -0.007149f, -0.011159f, +0.017025f, -0.014348f, -0.010655f, -0.002051f, + +0.008366f, -0.003646f, -0.001821f, -0.019191f, +0.116969f, -0.020863f, -0.007412f, -0.010879f, -0.007494f, +0.001913f, + -0.008340f, +0.055903f, -0.012694f, +0.014017f, -0.007378f, +0.010871f, -0.008975f, +0.010167f, +0.013185f, -0.001991f, + -0.045194f, +0.009569f, -0.008252f, +0.011966f, +0.022143f, -0.008358f, +0.026214f, -0.015732f, -0.016553f, +0.002636f, + +0.002587f, +0.000924f, +0.013845f, -0.000574f, +0.000200f, -0.003037f, +0.001734f, -0.002112f, -0.006658f, +0.012864f, + -0.002736f, -0.003053f, +0.007196f, +0.009895f, +0.006202f, +0.008100f, +0.008789f, +0.004108f, +0.008828f, +0.011035f, + -0.002792f, -0.015813f, +0.002575f, +0.005290f, +0.007307f, +0.003501f, -0.000436f, -0.006752f, +0.007349f, -0.001456f, + -0.005962f, +0.003149f, +0.007881f, -0.003885f, +0.003054f, -0.003801f, -0.016169f, -0.001679f, +0.003918f, +0.006598f, + -0.002929f, +0.008456f, -0.003514f, +0.001390f, +0.005887f, +0.006557f, +0.003320f, +0.005374f, -0.003734f, +0.001770f, + +0.000701f, +0.000168f, -0.002744f, +0.003159f, -0.001246f, +0.001894f + } + }, + { + { + -0.010394f, -0.002092f, +0.014685f, +0.090592f, -0.039118f, -0.001616f, +0.011465f, +0.000433f, -0.017349f, +0.004366f, + +0.008254f, +0.007351f, -0.010307f, -0.005193f, +0.008519f, -0.000123f, -0.015778f, +0.004291f, +0.035991f, -0.011386f, + -0.007520f, +0.008577f, -0.002885f, +0.019850f, +0.013065f, -0.000239f, -0.013133f, +0.007685f, -0.001405f, +0.000803f, + +0.003089f, +0.008168f, -0.005827f, -0.007352f, +0.012115f, -0.004539f, -0.010407f, -0.004286f, +0.004002f, +0.007088f, + +0.004006f, +0.006467f, -0.004205f, -0.001847f, -0.007637f, +0.000070f, +0.002755f, +0.000563f, -0.000715f, +0.006763f, + +0.008490f, -0.005025f, -0.003870f, +0.000826f, +0.002344f, -0.006625f, -0.003159f, +0.003365f, +0.000175f, -0.001452f, + -0.000786f, +0.003728f, +0.001179f, -0.002474f, +0.006638f, -0.000303f, -0.002095f, -0.000686f, -0.002793f, +0.002316f, + +0.000741f, -0.004538f, +0.003523f, +0.001277f, -0.003541f, +0.003901f, -0.006159f, -0.004939f, +0.003142f, -0.000845f, + -0.002250f, -0.001011f, +0.001303f, +0.003084f, +0.002414f, +0.001727f, -0.000857f, -0.002804f, +0.000733f, +0.000454f, + -0.002921f, -0.001224f, -0.002510f, +0.000564f, +0.001000f, -0.001499f + }, + { + -0.002622f, +0.083941f, -0.030991f, -0.025403f, -0.026578f, +0.003222f, -0.004264f, +0.006492f, -0.002626f, +0.017516f, + +0.001196f, -0.014660f, -0.011133f, -0.001331f, +0.007999f, -0.000065f, +0.027228f, +0.002748f, -0.000775f, +0.016712f, + +0.027244f, +0.020213f, -0.003080f, +0.003978f, +0.021441f, -0.006141f, -0.011422f, -0.019401f, +0.015707f, -0.024964f, + +0.001756f, -0.029023f, +0.016485f, -0.031129f, -0.010555f, +0.004211f, +0.000868f, +0.006347f, -0.004147f, -0.000612f, + -0.006009f, +0.012384f, -0.002550f, +0.018426f, +0.003834f, +0.003813f, -0.004953f, -0.001824f, -0.003554f, +0.003054f, + +0.004288f, -0.001257f, +0.002736f, +0.001608f, +0.001237f, -0.004476f, +0.003763f, -0.003839f, +0.005222f, +0.004572f, + -0.003353f, -0.000888f, -0.004924f, +0.004433f, -0.000135f, +0.003887f, +0.001571f, -0.000010f, +0.000692f, -0.001885f, + +0.001959f, +0.000888f, -0.001117f, -0.004549f, -0.001709f, -0.002799f, +0.001014f, +0.002634f, -0.002090f, -0.003552f, + +0.001062f, +0.002498f, +0.003731f, +0.001088f, +0.001462f, +0.000635f, +0.001886f, +0.002727f, +0.000703f, -0.001868f, + -0.000506f, -0.000408f, -0.002007f, -0.002085f, +0.001534f, +0.000912f + }, + { + +0.001908f, +0.140841f, -0.022395f, -0.004273f, -0.034367f, -0.004109f, +0.009622f, +0.010332f, -0.015403f, +0.019920f, + -0.008883f, -0.009154f, -0.013823f, -0.000297f, -0.006113f, +0.004708f, +0.021541f, -0.004115f, +0.000722f, +0.002608f, + +0.009418f, -0.003327f, -0.003526f, -0.014008f, +0.010916f, -0.014374f, -0.021637f, +0.004375f, -0.018312f, -0.007387f, + +0.001861f, -0.007201f, -0.009239f, -0.000429f, -0.019515f, -0.001532f, +0.013964f, -0.002833f, +0.005818f, +0.000600f, + +0.000087f, +0.006759f, +0.004729f, -0.004728f, -0.018892f, -0.000509f, +0.007499f, +0.001442f, +0.007681f, +0.001789f, + +0.004532f, -0.010509f, +0.007051f, +0.003543f, +0.000319f, -0.002517f, -0.000776f, +0.002393f, +0.003043f, +0.004951f, + -0.000592f, +0.005844f, +0.003745f, +0.006152f, +0.001695f, +0.000742f, -0.002101f, +0.007115f, +0.001934f, -0.002534f, + +0.002287f, -0.001225f, -0.004654f, +0.004689f, +0.001484f, -0.002609f, +0.004612f, -0.003018f, +0.002528f, +0.004485f, + -0.003644f, -0.001966f, +0.003252f, -0.004249f, -0.001106f, +0.001877f, -0.002513f, -0.000717f, -0.000381f, +0.003352f, + -0.001076f, +0.000530f, +0.002636f, -0.001203f, +0.001927f, -0.000078f + }, + { + +0.009850f, -0.287640f, -0.003614f, +0.057733f, +0.009184f, -0.009172f, +0.006855f, +0.006160f, +0.004050f, +0.009036f, + -0.018228f, +0.003672f, -0.016374f, +0.008261f, -0.000378f, -0.024162f, +0.012506f, -0.002961f, +0.021562f, -0.022658f, + +0.002035f, +0.002655f, +0.008969f, +0.018899f, -0.000846f, +0.006687f, +0.018162f, +0.010302f, +0.009814f, +0.002079f, + +0.001935f, -0.008387f, +0.001077f, +0.006733f, -0.002973f, -0.011041f, -0.004697f, +0.007187f, +0.012390f, -0.002386f, + +0.014593f, -0.007290f, +0.009331f, -0.004059f, +0.004967f, -0.003280f, -0.006452f, -0.005122f, -0.002851f, -0.000206f, + +0.003477f, +0.000976f, -0.005863f, -0.002783f, -0.004715f, -0.001286f, +0.002311f, -0.004062f, +0.004548f, +0.004312f, + +0.001190f, -0.007906f, -0.003241f, -0.005365f, +0.005754f, +0.000216f, +0.003742f, -0.002399f, +0.001988f, -0.001334f, + +0.002914f, +0.003672f, +0.005308f, +0.000866f, -0.000137f, +0.001611f, +0.000036f, -0.003553f, -0.002757f, -0.000442f, + +0.000586f, +0.000087f, -0.001110f, +0.001010f, -0.001857f, +0.001091f, +0.002982f, +0.000619f, +0.002111f, +0.000846f, + +0.000648f, -0.002507f, +0.001347f, -0.000341f, -0.004285f, +0.001711f + }, + { + +0.000483f, +0.089116f, +0.015895f, -0.008326f, +0.003051f, -0.004753f, +0.002128f, +0.009260f, -0.003095f, +0.007477f, + -0.009551f, -0.008648f, +0.001091f, +0.005974f, -0.008371f, -0.001008f, -0.008247f, -0.015783f, +0.008327f, +0.008204f, + +0.006628f, -0.008102f, +0.007549f, +0.003880f, -0.011619f, +0.006536f, +0.004445f, -0.007495f, +0.005797f, -0.021939f, + +0.006753f, -0.008064f, +0.026650f, -0.011503f, +0.006571f, -0.019652f, -0.000310f, -0.007395f, -0.000196f, +0.000852f, + -0.004659f, +0.011020f, +0.008352f, -0.013166f, -0.013977f, +0.006065f, +0.000359f, -0.000782f, -0.000937f, -0.006431f, + -0.000418f, -0.007252f, +0.000692f, -0.003222f, +0.002000f, +0.005743f, -0.001507f, +0.005614f, +0.000738f, -0.000166f, + -0.000750f, -0.007291f, -0.005119f, -0.003306f, +0.003468f, -0.007836f, -0.000578f, +0.002914f, +0.006902f, +0.005162f, + -0.003592f, +0.002795f, +0.003158f, -0.000627f, +0.001251f, +0.000423f, -0.004414f, +0.000494f, -0.001984f, -0.001636f, + -0.003977f, +0.003387f, +0.000882f, -0.001456f, -0.001770f, +0.001797f, -0.001470f, +0.001088f, +0.000612f, +0.000190f, + -0.002622f, +0.002562f, -0.000606f, -0.000203f, -0.001770f, -0.002585f + }, + { + +0.016465f, -0.314510f, +0.026380f, +0.118595f, +0.002758f, -0.013442f, +0.005082f, +0.029235f, +0.001966f, -0.010841f, + -0.003216f, +0.008232f, +0.000429f, -0.013569f, -0.006457f, -0.018458f, -0.020368f, -0.005779f, +0.007171f, +0.027700f, + +0.008406f, +0.013971f, -0.007347f, +0.011506f, -0.005363f, -0.004083f, +0.005544f, +0.003282f, +0.001155f, +0.006487f, + -0.000185f, -0.008857f, -0.011658f, -0.009793f, +0.002007f, -0.005710f, +0.014659f, -0.007242f, +0.001192f, -0.009745f, + +0.009279f, -0.003625f, +0.012476f, +0.001411f, +0.002898f, -0.004812f, +0.001355f, +0.014623f, +0.010641f, +0.011098f, + -0.006106f, -0.002996f, -0.001157f, -0.011079f, +0.002389f, -0.000094f, -0.005499f, -0.010088f, -0.000375f, +0.003146f, + +0.002022f, -0.000315f, -0.002870f, +0.008147f, +0.000668f, -0.008260f, +0.002584f, -0.004048f, +0.004509f, +0.000406f, + -0.000399f, -0.010502f, -0.002150f, -0.001106f, -0.003138f, -0.004001f, -0.000187f, -0.001549f, +0.000086f, +0.001153f, + +0.003557f, +0.003764f, +0.005630f, -0.002596f, -0.000269f, +0.001169f, -0.005668f, +0.002306f, -0.004458f, +0.000773f, + +0.000017f, +0.000402f, +0.001759f, -0.001568f, -0.000119f, +0.002320f + }, + { + -0.003729f, -0.017406f, -0.032684f, -0.019163f, +0.014209f, -0.004825f, -0.005193f, -0.003139f, +0.000903f, +0.004428f, + +0.003786f, +0.006563f, +0.012654f, -0.019306f, -0.009839f, +0.001464f, -0.008066f, +0.018878f, +0.014081f, +0.028687f, + +0.020318f, +0.009801f, +0.000874f, +0.041014f, -0.019278f, -0.008199f, +0.012416f, -0.001357f, -0.004432f, +0.005776f, + +0.007555f, +0.013171f, -0.011762f, +0.001127f, +0.003203f, -0.000816f, -0.001113f, -0.006167f, -0.001700f, +0.005492f, + -0.011352f, +0.001107f, +0.000471f, +0.009733f, +0.009014f, -0.006159f, +0.003315f, +0.001485f, -0.005724f, +0.013029f, + +0.004030f, +0.002056f, -0.010716f, -0.005107f, -0.004969f, -0.000647f, +0.005060f, -0.003860f, +0.003124f, +0.001450f, + +0.004597f, -0.004897f, -0.011643f, +0.000753f, +0.001556f, +0.001591f, +0.003632f, +0.003983f, -0.000871f, +0.008171f, + -0.002394f, -0.008819f, -0.000846f, +0.000956f, -0.000601f, +0.007310f, -0.005795f, -0.001321f, +0.002444f, +0.000361f, + +0.003980f, +0.002019f, -0.000487f, -0.002908f, -0.000683f, -0.004223f, +0.003911f, +0.002129f, +0.001132f, +0.000979f, + +0.000824f, -0.001184f, -0.000546f, +0.002872f, +0.000406f, +0.002538f + }, + { + +0.009512f, -0.289348f, +0.026840f, +0.108329f, -0.003061f, -0.018179f, -0.001701f, +0.008726f, +0.015717f, +0.009857f, + -0.018530f, -0.007057f, +0.019208f, +0.006444f, +0.005569f, +0.023656f, +0.007180f, -0.010221f, +0.026895f, +0.009673f, + +0.000909f, -0.004342f, +0.006610f, -0.009092f, -0.006244f, -0.001535f, +0.007540f, -0.006324f, -0.006521f, +0.004955f, + -0.005561f, -0.010774f, +0.011320f, -0.000952f, -0.012084f, -0.001813f, -0.012052f, +0.002320f, -0.006841f, +0.001832f, + -0.006349f, +0.003503f, +0.000241f, -0.001582f, +0.003392f, +0.000711f, +0.004257f, -0.000848f, -0.006371f, -0.003774f, + +0.005992f, -0.008920f, +0.014833f, -0.003635f, -0.004748f, +0.000455f, +0.000302f, +0.011121f, +0.000884f, -0.004848f, + -0.001627f, -0.000147f, +0.000611f, -0.008156f, -0.003282f, -0.006087f, -0.004077f, -0.001318f, +0.000377f, -0.004705f, + -0.003918f, +0.000388f, -0.000753f, +0.000694f, +0.000565f, +0.000379f, -0.000796f, +0.001974f, +0.001021f, +0.004674f, + -0.000579f, +0.001092f, +0.000334f, +0.000165f, +0.001575f, +0.001099f, +0.003207f, -0.000482f, -0.000825f, +0.000403f, + +0.000814f, +0.000398f, +0.000777f, -0.002511f, -0.001929f, +0.000879f + }, + { + -0.004280f, -0.066159f, -0.035272f, -0.015068f, +0.016132f, +0.001191f, -0.004233f, +0.003818f, +0.004500f, -0.001989f, + +0.007467f, -0.017603f, +0.005693f, +0.001497f, +0.011480f, -0.011923f, +0.009080f, -0.012733f, +0.002648f, +0.017919f, + +0.007838f, +0.005412f, +0.010712f, -0.032708f, +0.007221f, -0.005990f, -0.003863f, -0.001249f, +0.000948f, -0.016743f, + -0.007014f, +0.007896f, +0.007928f, -0.020899f, +0.006536f, -0.006933f, -0.000464f, +0.004923f, -0.001198f, -0.004709f, + -0.012254f, -0.007958f, -0.001000f, +0.001971f, +0.003025f, +0.006628f, -0.002202f, -0.002509f, +0.004248f, -0.003733f, + +0.000722f, +0.002325f, -0.001128f, -0.000927f, +0.000562f, -0.007313f, -0.004633f, +0.007934f, -0.000247f, -0.000708f, + +0.004858f, -0.000923f, -0.004577f, +0.002195f, +0.001714f, +0.000370f, +0.004488f, +0.000558f, -0.005031f, +0.000278f, + +0.001941f, -0.000730f, +0.000426f, +0.000449f, -0.002950f, +0.004327f, -0.000030f, +0.000985f, +0.004656f, -0.003452f, + +0.003056f, +0.005105f, +0.001477f, +0.000943f, -0.002290f, -0.000879f, -0.001266f, +0.002084f, +0.000664f, -0.000614f, + -0.002067f, +0.000869f, -0.001423f, -0.001711f, +0.000722f, +0.001384f + }, + { + -0.004340f, -0.202335f, +0.021244f, -0.003717f, +0.013086f, -0.012061f, +0.010610f, -0.027748f, -0.001784f, -0.023157f, + -0.015462f, -0.004040f, +0.002747f, +0.031552f, +0.005121f, +0.005393f, -0.006106f, +0.003601f, -0.023878f, -0.011857f, + +0.000523f, -0.005182f, -0.010823f, +0.004274f, +0.012613f, +0.000699f, -0.011983f, +0.008306f, +0.006668f, -0.030498f, + -0.000829f, +0.001951f, -0.009957f, -0.001532f, -0.021101f, -0.004053f, +0.006376f, -0.003131f, -0.027582f, +0.009213f, + -0.007375f, -0.003570f, +0.000405f, +0.022312f, -0.011575f, -0.007237f, -0.001272f, -0.005501f, -0.009616f, -0.010181f, + +0.008269f, -0.010273f, +0.007113f, -0.003144f, -0.006133f, -0.004000f, -0.003211f, -0.000226f, +0.011819f, +0.001636f, + +0.003682f, +0.009624f, -0.001048f, +0.003820f, -0.001445f, -0.000070f, -0.003368f, +0.001881f, +0.005104f, -0.000707f, + +0.002649f, -0.002805f, +0.004144f, -0.007948f, +0.003799f, -0.002015f, -0.002431f, +0.009498f, +0.004301f, +0.002758f, + -0.001909f, +0.006090f, -0.010853f, +0.006928f, +0.004946f, +0.001170f, -0.001652f, +0.000451f, -0.004545f, -0.001054f, + -0.001203f, +0.000774f, +0.002615f, -0.001578f, -0.000844f, -0.002698f + }, + { + +0.000563f, +0.088630f, +0.043369f, -0.022853f, -0.026759f, -0.009043f, +0.032181f, -0.008189f, -0.023970f, -0.001919f, + -0.012884f, -0.008643f, +0.024476f, +0.011137f, -0.031494f, -0.040832f, +0.013469f, +0.032270f, -0.015995f, -0.002003f, + +0.021488f, -0.007803f, -0.005755f, -0.013125f, -0.006499f, -0.008001f, -0.013702f, -0.005932f, +0.015447f, +0.003086f, + -0.020658f, +0.002352f, -0.035327f, +0.010515f, -0.003657f, -0.002651f, -0.000829f, -0.005698f, -0.000843f, -0.002866f, + +0.004559f, -0.001490f, -0.003209f, +0.007779f, +0.006698f, -0.002968f, +0.004920f, -0.011597f, -0.004716f, -0.006573f, + +0.009926f, +0.001981f, -0.007883f, +0.006002f, -0.002604f, +0.005244f, -0.005863f, -0.012828f, -0.002475f, -0.004123f, + +0.003564f, -0.005100f, +0.003486f, +0.005631f, -0.003657f, +0.008758f, +0.001549f, -0.002103f, -0.005688f, -0.000977f, + +0.001539f, +0.000974f, +0.001015f, +0.005107f, -0.007817f, +0.000633f, +0.005195f, +0.009164f, +0.001562f, -0.000662f, + +0.001010f, -0.002373f, +0.002362f, +0.006257f, +0.004305f, +0.004514f, -0.002589f, +0.000471f, +0.004316f, +0.003265f, + +0.000308f, +0.000772f, -0.000885f, -0.002443f, +0.000472f, +0.000375f + }, + { + +0.034737f, -0.067106f, -0.021198f, -0.018581f, +0.002964f, +0.010530f, -0.061587f, -0.006990f, +0.008396f, +0.007216f, + +0.019212f, -0.001079f, +0.026311f, +0.013598f, -0.020592f, +0.028956f, +0.012907f, -0.004386f, +0.010121f, +0.003616f, + -0.004462f, -0.005177f, +0.000981f, +0.022133f, +0.020369f, +0.000401f, -0.001407f, -0.005237f, -0.002854f, +0.010207f, + +0.007825f, +0.006263f, +0.006584f, +0.006699f, -0.010288f, +0.010622f, +0.005245f, +0.003453f, +0.008221f, -0.003584f, + -0.006184f, +0.001683f, -0.003585f, -0.011724f, -0.007556f, +0.005130f, +0.004566f, -0.002681f, +0.008538f, +0.002430f, + -0.007868f, -0.008310f, -0.001076f, +0.002830f, +0.011648f, +0.007316f, +0.007028f, -0.007806f, +0.006437f, +0.006147f, + -0.000504f, -0.006803f, +0.003196f, +0.006640f, +0.000523f, +0.007618f, -0.004345f, +0.005194f, +0.004824f, -0.000229f, + -0.001514f, +0.003107f, -0.005085f, -0.001825f, +0.004982f, -0.002469f, +0.001657f, +0.003029f, +0.001427f, -0.000292f, + +0.003998f, -0.000360f, -0.007776f, -0.001723f, -0.002390f, +0.001195f, +0.001126f, -0.002559f, +0.002202f, +0.000283f, + -0.002239f, +0.001916f, +0.000330f, +0.000603f, +0.004911f, -0.002515f + }, + { + -0.000577f, +0.095942f, -0.005818f, +0.011106f, +0.006199f, -0.007066f, +0.002047f, -0.012396f, +0.001069f, -0.005302f, + +0.005044f, -0.002350f, -0.009193f, +0.059418f, -0.037327f, -0.034915f, -0.009528f, +0.036894f, -0.021158f, +0.004640f, + +0.017351f, -0.019146f, +0.029160f, -0.032707f, +0.004557f, +0.002085f, -0.022078f, +0.000143f, +0.000953f, -0.001188f, + -0.000447f, -0.015471f, +0.016892f, +0.022451f, +0.012329f, +0.013719f, -0.012077f, -0.014568f, -0.024514f, -0.000737f, + -0.003911f, +0.001270f, -0.008997f, +0.018689f, -0.008214f, +0.001261f, -0.006860f, +0.001039f, +0.001121f, +0.001052f, + -0.005593f, +0.003598f, -0.002413f, -0.001769f, -0.002144f, +0.005721f, -0.003523f, -0.005240f, -0.006194f, +0.000596f, + -0.006740f, -0.000333f, -0.002942f, -0.002943f, +0.001294f, +0.004331f, +0.002470f, -0.001923f, -0.006080f, -0.001790f, + -0.000068f, +0.002135f, -0.007361f, +0.007055f, -0.000038f, -0.008493f, +0.002427f, -0.002379f, +0.003097f, +0.000157f, + +0.004587f, +0.004762f, +0.002076f, +0.000353f, -0.000411f, -0.001041f, -0.002813f, +0.002264f, +0.001429f, +0.002835f, + -0.001797f, -0.000980f, -0.007218f, -0.003082f, +0.001779f, -0.000505f + }, + { + +0.026988f, -0.117020f, -0.022642f, -0.023239f, +0.003526f, -0.000468f, -0.050612f, -0.001201f, +0.002173f, +0.002815f, + -0.010410f, +0.027774f, -0.023714f, -0.000501f, +0.020315f, +0.010904f, +0.016418f, +0.010466f, +0.018043f, -0.015843f, + +0.003686f, -0.020582f, +0.001316f, +0.020144f, +0.009191f, +0.003441f, -0.004515f, +0.016919f, +0.003412f, -0.000556f, + -0.002027f, +0.008306f, +0.003515f, +0.021313f, -0.009977f, -0.014258f, +0.001180f, +0.001577f, -0.001933f, -0.009941f, + -0.011428f, +0.004717f, +0.002886f, -0.001236f, +0.012548f, +0.009406f, +0.012212f, +0.006545f, +0.001760f, -0.010315f, + +0.021959f, +0.005656f, +0.007761f, +0.010022f, +0.004777f, +0.004927f, +0.011260f, -0.009950f, +0.007775f, +0.001491f, + -0.008213f, -0.003491f, -0.004302f, +0.001068f, -0.002259f, -0.001183f, +0.003034f, -0.001053f, +0.003182f, -0.003184f, + -0.004563f, +0.010797f, -0.003612f, -0.001761f, +0.000720f, +0.000094f, +0.001775f, -0.001854f, +0.002004f, +0.001511f, + -0.003501f, -0.001796f, +0.001610f, -0.001656f, -0.000555f, +0.001020f, -0.000150f, -0.002016f, +0.000151f, +0.001391f, + -0.000510f, +0.005267f, -0.001357f, +0.002574f, +0.000617f, -0.001532f + }, + { + -0.000639f, +0.031559f, +0.018303f, +0.013030f, -0.006577f, +0.004265f, +0.025033f, -0.007664f, +0.007632f, +0.005967f, + +0.011457f, -0.009046f, -0.001470f, -0.035848f, +0.089214f, +0.000780f, +0.048302f, +0.023972f, +0.014944f, +0.016927f, + -0.033924f, +0.026486f, -0.013123f, +0.006530f, -0.013155f, +0.019441f, +0.002268f, +0.020217f, -0.004292f, -0.006306f, + -0.033795f, +0.002787f, -0.000010f, +0.015484f, +0.013586f, -0.003115f, +0.019821f, -0.020716f, -0.006211f, +0.001524f, + -0.009405f, -0.004171f, +0.020641f, +0.011655f, +0.006567f, +0.001051f, +0.001540f, -0.002108f, -0.005869f, -0.000392f, + -0.008487f, -0.002448f, -0.006623f, +0.001616f, -0.000641f, -0.001235f, +0.000251f, -0.007495f, +0.001607f, +0.002808f, + -0.002214f, -0.011874f, -0.006247f, -0.002857f, +0.003579f, +0.004388f, +0.004301f, -0.002807f, +0.007201f, -0.003037f, + -0.008435f, +0.003420f, +0.004835f, -0.007025f, -0.004156f, -0.002036f, -0.009507f, -0.004467f, -0.003161f, +0.004861f, + -0.003003f, +0.009002f, +0.000512f, -0.000567f, -0.000182f, +0.002360f, -0.001945f, +0.003342f, -0.001005f, +0.001071f, + -0.000475f, +0.000344f, -0.002446f, +0.005321f, +0.001059f, +0.004118f + } + }, + { + { + +0.006256f, +0.077198f, +0.001388f, -0.027580f, +0.039752f, +0.012062f, +0.002395f, -0.008980f, -0.016078f, +0.004213f, + +0.009863f, +0.003410f, -0.002793f, -0.004258f, -0.007459f, +0.016436f, -0.020977f, +0.010021f, +0.008523f, -0.025822f, + +0.018856f, +0.002421f, +0.012078f, +0.018060f, +0.006704f, -0.011193f, -0.006291f, -0.004367f, -0.005784f, +0.005453f, + +0.019756f, -0.003239f, -0.010137f, +0.000101f, +0.008380f, +0.004413f, -0.020878f, +0.004801f, +0.001284f, +0.000581f, + +0.001382f, +0.001289f, -0.002226f, +0.002436f, -0.006825f, -0.008336f, +0.005489f, -0.004473f, +0.011358f, -0.001712f, + +0.003862f, +0.003626f, -0.005089f, +0.001128f, +0.001885f, -0.002276f, -0.003488f, +0.006294f, -0.001379f, +0.003081f, + -0.000569f, +0.004487f, -0.000358f, +0.000748f, -0.000479f, +0.003874f, -0.009772f, -0.003596f, -0.000189f, +0.001366f, + +0.003714f, -0.003415f, +0.000380f, +0.002646f, +0.001900f, +0.001167f, -0.005924f, -0.002763f, +0.001245f, -0.003767f, + +0.000320f, -0.004341f, +0.004913f, +0.000208f, +0.002397f, -0.000749f, -0.000413f, -0.001791f, +0.000666f, -0.001379f, + -0.001900f, -0.002815f, -0.001677f, +0.000923f, +0.000806f, -0.003007f + }, + { + +0.003319f, -0.023953f, +0.054181f, -0.048387f, -0.021781f, +0.000625f, +0.003753f, -0.000379f, -0.005010f, +0.013887f, + -0.001945f, -0.008002f, +0.007843f, -0.024206f, +0.008734f, +0.010268f, +0.007864f, +0.004711f, +0.028108f, +0.013015f, + +0.008487f, +0.025687f, +0.008998f, +0.001248f, -0.000608f, +0.009781f, -0.011568f, -0.015617f, +0.004374f, -0.007223f, + -0.014856f, -0.017814f, -0.006654f, -0.011902f, -0.004126f, +0.006134f, -0.004859f, +0.003281f, -0.000988f, +0.001858f, + -0.011206f, +0.009168f, +0.012178f, +0.000316f, +0.010913f, +0.005834f, -0.003165f, -0.006158f, -0.002301f, +0.000421f, + -0.003917f, +0.007037f, +0.002543f, +0.006195f, +0.000471f, -0.001775f, -0.003157f, +0.003069f, +0.005181f, -0.000427f, + -0.001612f, +0.004088f, -0.007450f, +0.002326f, +0.002260f, -0.001891f, +0.003618f, +0.002444f, -0.002218f, +0.000907f, + +0.004417f, -0.000701f, -0.003393f, -0.000718f, -0.001552f, -0.002725f, +0.000054f, +0.005006f, +0.000317f, -0.007311f, + +0.003087f, +0.005381f, -0.000363f, -0.000052f, +0.000623f, -0.000641f, +0.002895f, +0.002104f, +0.001490f, -0.001494f, + -0.000839f, -0.001244f, -0.001058f, -0.000316f, -0.002058f, +0.000224f + }, + { + -0.001233f, +0.155753f, -0.021313f, -0.073044f, +0.023049f, -0.004183f, +0.010129f, +0.008187f, -0.010413f, +0.004393f, + -0.006906f, -0.018171f, -0.004208f, -0.003558f, -0.004083f, +0.014572f, +0.010771f, +0.014574f, -0.010836f, -0.003027f, + +0.004673f, +0.013422f, -0.022481f, -0.009892f, +0.005250f, -0.018355f, -0.009583f, -0.007639f, -0.000430f, -0.003731f, + -0.012849f, +0.002969f, -0.008224f, -0.017143f, -0.005552f, +0.001470f, +0.016467f, -0.000596f, -0.000728f, +0.002496f, + +0.004478f, +0.000888f, +0.003327f, -0.005923f, -0.004696f, -0.005218f, +0.006783f, -0.003650f, -0.000810f, +0.006125f, + +0.001686f, +0.000002f, -0.003481f, +0.006913f, -0.000907f, -0.002469f, +0.006445f, -0.003072f, +0.004591f, +0.006148f, + +0.001764f, +0.007632f, +0.000832f, -0.001764f, +0.008451f, -0.003243f, +0.001595f, +0.005665f, -0.003271f, -0.001402f, + +0.002791f, +0.004684f, -0.009527f, +0.004008f, -0.002305f, +0.005343f, +0.001235f, +0.002784f, -0.001930f, +0.006880f, + -0.004939f, +0.001257f, -0.000978f, -0.002759f, -0.002490f, -0.000447f, -0.001041f, -0.001919f, +0.001431f, +0.000919f, + +0.002012f, +0.001320f, -0.000775f, +0.002187f, -0.001379f, +0.001085f + }, + { + -0.011693f, -0.246293f, -0.006749f, +0.081454f, -0.006698f, -0.009087f, -0.000984f, -0.002373f, -0.001392f, +0.025583f, + -0.011449f, -0.011998f, +0.001604f, -0.005464f, -0.003081f, +0.002763f, -0.002619f, +0.005244f, +0.010076f, -0.002694f, + -0.008182f, -0.000838f, +0.011232f, +0.023329f, -0.011203f, +0.011474f, +0.014733f, +0.019992f, +0.013727f, +0.003469f, + -0.005336f, +0.009799f, -0.008411f, -0.004421f, -0.002037f, -0.016436f, +0.013578f, -0.001642f, +0.009279f, +0.003302f, + +0.006662f, +0.009248f, +0.001024f, +0.002301f, -0.002257f, -0.019510f, +0.006770f, -0.006607f, +0.002622f, +0.000370f, + -0.003875f, -0.000374f, -0.004006f, -0.006301f, -0.008001f, +0.001824f, -0.001793f, -0.000140f, +0.002729f, -0.001784f, + +0.012655f, -0.008214f, -0.012505f, +0.000306f, -0.000829f, +0.004884f, +0.007115f, -0.003261f, -0.002293f, -0.000258f, + -0.001995f, +0.006280f, +0.007258f, -0.000946f, +0.001826f, +0.000582f, -0.001588f, -0.003189f, -0.003123f, +0.001492f, + -0.001540f, +0.001176f, +0.000694f, -0.002831f, -0.000800f, +0.001803f, -0.000994f, +0.001022f, +0.002761f, +0.005372f, + -0.001684f, -0.001128f, +0.002156f, -0.001992f, -0.001860f, +0.000401f + }, + { + +0.000524f, +0.069668f, +0.033309f, -0.010034f, -0.003989f, -0.000344f, -0.000743f, +0.007839f, -0.001635f, +0.005128f, + -0.005524f, -0.010351f, -0.007716f, -0.004903f, -0.012004f, +0.000381f, +0.014555f, -0.023261f, +0.009530f, +0.016451f, + +0.004000f, +0.001192f, -0.009181f, -0.010539f, +0.017264f, +0.001508f, -0.005299f, -0.003625f, +0.001134f, -0.029670f, + +0.004689f, +0.013371f, +0.006445f, +0.008371f, +0.008029f, -0.025362f, -0.005985f, -0.010914f, -0.003663f, +0.018908f, + -0.017906f, +0.013303f, -0.001186f, -0.006881f, -0.011270f, +0.005772f, +0.003567f, -0.006104f, +0.001151f, -0.002192f, + -0.005651f, -0.009359f, -0.001489f, -0.003276f, -0.000422f, +0.010227f, -0.001117f, +0.002751f, +0.004892f, -0.002784f, + -0.002832f, -0.007162f, -0.004506f, -0.000182f, -0.000552f, -0.007607f, -0.005286f, +0.007437f, +0.003928f, +0.003271f, + -0.000892f, +0.004582f, +0.004841f, -0.000457f, +0.001851f, -0.000636f, -0.003581f, -0.000011f, -0.003216f, -0.002381f, + -0.001138f, +0.003049f, -0.002714f, +0.002143f, -0.002847f, +0.000600f, -0.000634f, +0.000576f, +0.000522f, +0.000630f, + -0.000940f, +0.000638f, +0.000693f, -0.000802f, +0.000629f, -0.003299f + }, + { + -0.018102f, -0.230323f, +0.005182f, +0.116812f, +0.003739f, -0.006685f, -0.005607f, +0.020757f, +0.003378f, +0.002655f, + -0.013295f, +0.006317f, +0.017552f, -0.005982f, -0.019105f, -0.003539f, -0.025128f, -0.020072f, +0.005204f, +0.044402f, + +0.004548f, +0.001140f, +0.007079f, +0.014694f, +0.010494f, -0.012544f, +0.001709f, +0.009877f, +0.006763f, -0.004783f, + +0.007112f, -0.009547f, -0.018616f, -0.003794f, -0.008219f, +0.003862f, +0.000355f, +0.002082f, +0.000789f, -0.006130f, + +0.008091f, -0.000435f, +0.001006f, +0.005855f, -0.001185f, +0.005303f, +0.003629f, +0.014546f, +0.009876f, +0.007587f, + +0.004388f, -0.006651f, -0.010535f, -0.006317f, +0.003139f, -0.001719f, -0.011143f, -0.011368f, -0.004962f, +0.007935f, + +0.003379f, +0.002005f, -0.000979f, +0.001527f, +0.002222f, -0.005916f, +0.000935f, +0.000256f, +0.001346f, +0.004083f, + -0.002708f, -0.007583f, -0.005084f, -0.000259f, +0.000275f, -0.005810f, -0.004076f, -0.001391f, +0.000578f, +0.001983f, + +0.002351f, +0.003000f, +0.004593f, +0.001516f, +0.000499f, +0.000877f, -0.002515f, -0.004721f, -0.000500f, -0.000190f, + +0.001255f, +0.000845f, -0.002231f, +0.000576f, -0.001667f, +0.001334f + }, + { + +0.000758f, -0.047897f, -0.033227f, +0.004389f, -0.008007f, +0.003714f, -0.003760f, -0.002252f, -0.007646f, -0.001042f, + +0.015035f, -0.006727f, +0.010297f, -0.008086f, -0.010951f, -0.016053f, +0.003467f, +0.030158f, +0.020960f, +0.024064f, + +0.010772f, +0.017014f, +0.023651f, +0.005861f, +0.012876f, -0.009736f, -0.000858f, -0.007481f, +0.019489f, +0.009463f, + -0.002988f, +0.003297f, -0.000182f, +0.013706f, -0.017850f, +0.006180f, -0.005721f, -0.002386f, +0.011136f, -0.011889f, + -0.011318f, -0.001010f, +0.010679f, +0.010593f, -0.004355f, +0.002910f, +0.000344f, -0.004375f, +0.005416f, +0.012480f, + +0.000266f, -0.006424f, -0.004107f, -0.000778f, -0.010428f, -0.002618f, +0.005840f, +0.003042f, -0.003302f, +0.002549f, + +0.003359f, -0.007155f, -0.003515f, -0.002541f, +0.003695f, -0.000212f, +0.005604f, +0.001275f, +0.003023f, +0.001426f, + +0.002650f, -0.006779f, -0.004873f, -0.002176f, +0.003828f, +0.000962f, -0.002324f, +0.000077f, -0.001547f, +0.000734f, + +0.003537f, +0.005244f, -0.005172f, -0.000527f, -0.004622f, +0.000283f, +0.002925f, +0.001758f, +0.001809f, +0.001102f, + +0.001468f, -0.001212f, +0.001050f, -0.000262f, +0.001948f, +0.000740f + }, + { + -0.010889f, -0.232735f, +0.025470f, +0.085821f, +0.010601f, +0.002384f, -0.019284f, +0.009221f, +0.018817f, +0.007756f, + -0.020120f, -0.007707f, +0.022610f, -0.000349f, +0.027438f, +0.018402f, -0.025359f, +0.022027f, +0.013484f, +0.017592f, + -0.007433f, +0.001618f, -0.006568f, -0.005805f, -0.004449f, +0.004829f, +0.006059f, -0.000610f, -0.001088f, -0.005893f, + -0.006474f, -0.000087f, +0.009353f, -0.004314f, -0.011801f, +0.002021f, -0.001146f, -0.016631f, +0.001929f, -0.001760f, + +0.001521f, -0.008154f, +0.000565f, +0.008119f, +0.009193f, -0.001790f, -0.006471f, -0.002514f, +0.004975f, -0.005426f, + +0.000461f, +0.002414f, +0.003085f, +0.003028f, -0.000646f, +0.001020f, +0.000781f, +0.000949f, -0.001417f, -0.001218f, + +0.002754f, -0.006164f, +0.000460f, +0.002212f, -0.008747f, -0.001600f, -0.003727f, -0.006853f, +0.002628f, -0.004366f, + -0.001457f, -0.003698f, +0.002262f, +0.000334f, -0.001464f, -0.000514f, +0.000243f, +0.002636f, -0.000464f, +0.001996f, + +0.000585f, +0.002870f, +0.001653f, +0.001643f, +0.000504f, -0.001730f, +0.005667f, -0.001140f, -0.000687f, -0.001170f, + +0.002111f, +0.001202f, +0.000681f, -0.003435f, -0.004192f, +0.001123f + }, + { + -0.002533f, -0.046958f, -0.079200f, +0.009216f, +0.000660f, +0.004587f, -0.005340f, +0.005046f, +0.001238f, +0.001329f, + +0.005690f, -0.013838f, -0.010930f, +0.013434f, +0.008342f, +0.029951f, -0.025906f, -0.007554f, +0.005155f, +0.012395f, + +0.009711f, -0.008833f, -0.001230f, -0.018139f, +0.028475f, -0.018606f, -0.004345f, +0.004725f, -0.004404f, -0.022673f, + -0.001347f, +0.007134f, -0.005185f, +0.002015f, -0.012003f, +0.003863f, -0.005385f, -0.007855f, +0.007259f, -0.008420f, + -0.002786f, -0.015194f, +0.003075f, +0.003983f, +0.004614f, +0.001565f, +0.003356f, +0.000830f, -0.001810f, +0.002563f, + +0.000778f, -0.004723f, +0.005427f, -0.002389f, +0.001552f, -0.009787f, -0.000616f, -0.001389f, -0.001525f, +0.002557f, + +0.003571f, -0.001229f, +0.004235f, -0.004949f, +0.003217f, +0.006277f, +0.000085f, +0.000998f, -0.008010f, +0.001201f, + +0.001815f, +0.000994f, +0.002109f, -0.001051f, -0.004367f, +0.001139f, -0.001195f, +0.001901f, +0.002766f, +0.001127f, + +0.003348f, +0.003032f, +0.002186f, +0.001447f, +0.001071f, -0.003920f, -0.001094f, +0.002402f, +0.002059f, -0.000584f, + -0.003159f, +0.001974f, -0.003183f, -0.000544f, +0.001619f, +0.000290f + }, + { + +0.008149f, -0.099342f, -0.072183f, -0.005268f, +0.000521f, +0.005071f, -0.034893f, -0.015360f, -0.010323f, -0.008215f, + -0.022564f, +0.007874f, +0.006373f, +0.017630f, +0.019901f, -0.027824f, +0.014133f, -0.008965f, -0.002671f, +0.001110f, + -0.020366f, +0.011844f, -0.005757f, +0.005209f, +0.003928f, -0.017211f, -0.000433f, +0.003638f, -0.007582f, -0.022035f, + -0.005370f, +0.010909f, -0.015731f, -0.007613f, -0.015281f, -0.005466f, +0.009921f, -0.015915f, -0.004925f, +0.001486f, + -0.006423f, -0.003488f, +0.003958f, +0.014715f, -0.002622f, -0.004167f, -0.005048f, -0.007272f, -0.014874f, -0.001641f, + -0.001947f, +0.003521f, -0.003958f, -0.019421f, +0.014109f, -0.006806f, +0.002313f, -0.004159f, +0.010945f, +0.003060f, + +0.000060f, +0.012444f, -0.005990f, +0.005488f, +0.000292f, -0.006962f, +0.003961f, +0.007621f, -0.005075f, +0.005089f, + +0.002916f, -0.005667f, +0.001013f, -0.001404f, +0.000246f, +0.001507f, -0.002002f, +0.003512f, +0.005291f, +0.005835f, + +0.003371f, -0.003185f, -0.007025f, +0.006692f, +0.004128f, -0.000740f, +0.003744f, -0.008759f, -0.001676f, -0.001504f, + -0.002302f, +0.000367f, +0.005297f, -0.000467f, -0.003222f, -0.002916f + }, + { + +0.000829f, +0.117247f, +0.013096f, -0.027607f, -0.004058f, -0.011310f, +0.008457f, +0.004602f, -0.013964f, -0.010123f, + -0.007767f, +0.003242f, +0.013747f, +0.000931f, -0.047082f, +0.003526f, +0.003914f, +0.008979f, -0.005181f, -0.000738f, + +0.000062f, +0.018877f, -0.026604f, -0.018265f, +0.003145f, -0.019526f, -0.010432f, +0.003119f, +0.011958f, -0.008365f, + -0.008904f, -0.008558f, -0.016886f, +0.000902f, -0.012382f, -0.008651f, +0.007076f, -0.003107f, +0.003089f, -0.000663f, + -0.011818f, +0.004994f, +0.010019f, +0.003176f, -0.005960f, +0.007772f, +0.003403f, -0.012916f, -0.002692f, -0.004957f, + +0.010179f, -0.004043f, -0.005407f, +0.000584f, +0.005711f, -0.001325f, -0.003141f, -0.006845f, -0.002058f, -0.007566f, + -0.001652f, +0.003173f, +0.007889f, -0.003466f, +0.004285f, +0.000677f, +0.001277f, -0.002051f, -0.001068f, -0.005247f, + +0.001065f, +0.003616f, -0.001238f, +0.000839f, -0.002879f, +0.007666f, +0.003159f, +0.005150f, +0.003474f, +0.001336f, + -0.001931f, -0.000648f, -0.001853f, +0.005082f, +0.006427f, +0.008207f, -0.002875f, +0.000103f, +0.001763f, +0.003304f, + +0.002295f, -0.000940f, -0.001907f, -0.001635f, +0.001682f, -0.002622f + }, + { + -0.032777f, -0.059406f, +0.038046f, +0.007193f, -0.004344f, -0.035221f, -0.022813f, -0.004795f, -0.007569f, +0.010934f, + +0.041941f, -0.010611f, +0.014075f, +0.006969f, +0.032393f, +0.017189f, -0.002883f, -0.009531f, +0.015817f, +0.006336f, + -0.021049f, -0.004214f, +0.022216f, +0.006765f, +0.013145f, +0.016558f, -0.006503f, -0.013468f, +0.003944f, +0.002345f, + +0.003677f, +0.022932f, +0.006672f, -0.000228f, -0.019687f, +0.023006f, -0.001787f, +0.005445f, +0.004810f, -0.001894f, + -0.007478f, -0.004084f, +0.003439f, -0.011481f, -0.010777f, +0.013968f, -0.009685f, +0.005090f, +0.009152f, +0.000756f, + -0.009105f, -0.005183f, +0.000669f, -0.005093f, +0.015353f, +0.000036f, +0.003187f, -0.005717f, +0.010261f, +0.007746f, + -0.002645f, +0.001256f, +0.007353f, +0.001421f, -0.004521f, +0.010172f, -0.004591f, +0.009071f, +0.005823f, -0.006682f, + +0.002791f, +0.003432f, -0.002980f, +0.000643f, -0.001566f, -0.000649f, +0.004963f, +0.002907f, -0.002752f, +0.001119f, + +0.004839f, -0.005564f, -0.000355f, -0.005275f, -0.000241f, +0.001408f, +0.002458f, -0.000219f, +0.002384f, -0.002471f, + -0.001026f, +0.001077f, +0.000893f, -0.000678f, +0.003775f, -0.002149f + }, + { + +0.001594f, +0.065265f, +0.020441f, +0.011365f, -0.005657f, -0.001152f, +0.003747f, +0.004565f, -0.002368f, -0.010902f, + +0.001862f, -0.001233f, +0.014993f, +0.025837f, -0.017836f, -0.025151f, -0.007599f, +0.019412f, -0.020944f, -0.006106f, + +0.034295f, +0.000828f, -0.008820f, -0.022446f, +0.008306f, +0.005975f, -0.024504f, -0.021234f, +0.000467f, +0.020524f, + -0.023450f, +0.012426f, +0.005038f, +0.033059f, +0.015043f, +0.002142f, -0.011707f, -0.019537f, -0.006072f, +0.002500f, + +0.000023f, -0.012929f, +0.001414f, -0.002961f, +0.005705f, -0.000353f, -0.008245f, +0.001444f, -0.003587f, +0.004598f, + -0.012699f, +0.001990f, +0.001036f, +0.001248f, +0.005831f, -0.008582f, +0.010071f, -0.010235f, -0.002026f, +0.003588f, + -0.006903f, -0.008051f, -0.002886f, +0.003180f, -0.003529f, -0.000031f, +0.008648f, -0.004105f, -0.004040f, +0.000726f, + -0.002904f, +0.001234f, -0.000767f, +0.001515f, -0.001135f, -0.008827f, +0.008338f, -0.001961f, +0.000327f, +0.001842f, + +0.001495f, +0.006855f, -0.000550f, +0.005865f, +0.000523f, -0.001367f, -0.003999f, +0.007388f, -0.002047f, -0.000434f, + +0.003108f, -0.003095f, -0.006506f, -0.007108f, +0.001650f, -0.001108f + }, + { + -0.025492f, -0.110514f, +0.041502f, -0.010461f, -0.019934f, -0.015551f, -0.026283f, -0.012381f, -0.015998f, -0.000057f, + -0.016594f, +0.024067f, -0.011818f, -0.014326f, +0.019844f, +0.000624f, +0.024467f, +0.008948f, +0.008271f, -0.005919f, + +0.002173f, -0.013029f, -0.015232f, +0.030498f, +0.005408f, +0.003363f, +0.006920f, +0.004045f, -0.000463f, +0.002218f, + -0.003453f, +0.010081f, +0.006864f, +0.013824f, +0.009870f, -0.010878f, -0.008912f, +0.001688f, -0.001704f, -0.008176f, + -0.007891f, +0.012318f, +0.003768f, -0.010047f, +0.008782f, +0.009995f, +0.016793f, +0.010736f, -0.012648f, +0.010017f, + +0.010365f, -0.000367f, +0.012600f, -0.001746f, +0.017070f, +0.008049f, +0.005452f, -0.001743f, +0.001255f, +0.000538f, + -0.006185f, -0.009350f, -0.000938f, -0.001359f, +0.004353f, -0.002454f, -0.000093f, -0.001762f, -0.002666f, +0.003853f, + -0.002664f, +0.001902f, -0.002394f, +0.003706f, -0.002803f, +0.003893f, -0.004107f, +0.003963f, +0.000776f, +0.003830f, + -0.002787f, -0.002520f, -0.001462f, +0.004132f, -0.001102f, -0.000886f, +0.001786f, -0.003837f, +0.000939f, +0.001016f, + +0.000081f, +0.000428f, +0.003526f, +0.002487f, -0.000063f, -0.003530f + }, + { + +0.002367f, +0.090599f, -0.032942f, +0.016838f, +0.008861f, -0.004674f, +0.005662f, +0.015055f, +0.004876f, +0.008590f, + +0.007725f, -0.007844f, -0.010983f, +0.045567f, -0.014001f, +0.034742f, +0.028121f, +0.040349f, +0.000857f, -0.002127f, + -0.000837f, -0.003761f, +0.000493f, +0.010559f, -0.020622f, +0.020793f, +0.010749f, +0.007205f, +0.008230f, -0.006070f, + -0.035895f, +0.005777f, -0.000591f, +0.019513f, -0.000953f, +0.009556f, +0.004579f, -0.021008f, +0.002518f, +0.005357f, + -0.013892f, -0.001430f, +0.019081f, +0.006408f, +0.009760f, +0.010491f, -0.010153f, +0.004368f, +0.003371f, -0.006214f, + -0.011471f, +0.001369f, -0.012433f, -0.004027f, +0.000505f, -0.000437f, +0.004447f, -0.009912f, +0.001341f, -0.006444f, + +0.003335f, -0.007383f, -0.010388f, -0.001120f, +0.002558f, +0.007992f, +0.000550f, +0.005634f, -0.004456f, +0.003031f, + -0.008152f, +0.000434f, +0.001369f, +0.001719f, -0.010217f, -0.001152f, -0.001084f, -0.007857f, -0.004160f, +0.002698f, + +0.001577f, +0.002487f, +0.003018f, +0.001626f, -0.000998f, -0.001306f, -0.000662f, +0.000044f, +0.000419f, +0.001159f, + -0.002429f, +0.001773f, +0.001588f, +0.001296f, +0.002147f, +0.002835f + } + }, + { + { + -0.005433f, +0.200795f, +0.095500f, -0.077629f, -0.001608f, +0.000551f, +0.000483f, -0.018733f, -0.018253f, +0.001493f, + +0.007382f, +0.013021f, +0.003522f, -0.002858f, -0.016651f, +0.015391f, -0.030034f, +0.003988f, +0.006196f, -0.024716f, + +0.010764f, -0.005391f, +0.000914f, +0.015435f, +0.007851f, -0.017097f, -0.011794f, -0.006846f, +0.002140f, +0.016529f, + +0.013820f, -0.007209f, +0.002645f, +0.014618f, +0.004268f, +0.008660f, -0.002901f, +0.010762f, -0.008215f, -0.005581f, + -0.000587f, +0.002890f, -0.000305f, -0.000150f, -0.005444f, -0.003208f, +0.008971f, -0.005507f, +0.011522f, -0.004176f, + +0.000450f, +0.008396f, +0.002254f, +0.005612f, +0.002742f, -0.000800f, +0.000790f, +0.004602f, -0.006284f, +0.001796f, + -0.006439f, +0.001692f, -0.003418f, -0.005639f, -0.001145f, +0.006403f, -0.003543f, -0.000722f, +0.001117f, +0.002037f, + +0.002600f, -0.001505f, -0.001911f, -0.000053f, +0.002880f, +0.000798f, -0.003061f, -0.001276f, +0.000219f, -0.001792f, + +0.001601f, -0.004873f, +0.002965f, +0.000139f, +0.000891f, -0.001166f, +0.000578f, -0.001417f, -0.000662f, -0.003678f, + -0.000436f, -0.001687f, -0.001515f, -0.000769f, -0.001041f, +0.000069f + }, + { + -0.000777f, -0.102999f, +0.007945f, -0.003625f, +0.017664f, -0.006555f, -0.007145f, -0.000951f, -0.004118f, -0.003521f, + -0.009608f, -0.011399f, +0.009567f, -0.018221f, +0.011597f, -0.000934f, -0.011215f, -0.016410f, +0.005018f, +0.005492f, + +0.006204f, +0.007885f, -0.011945f, +0.000562f, +0.004180f, +0.011516f, -0.001906f, -0.000204f, +0.003177f, -0.004955f, + -0.004735f, -0.001597f, -0.000046f, -0.007549f, +0.005080f, +0.010250f, -0.005910f, +0.010811f, +0.000750f, -0.003038f, + -0.006705f, +0.004465f, +0.007742f, -0.011890f, +0.005107f, +0.002271f, -0.002352f, -0.003417f, -0.008560f, -0.007253f, + -0.005553f, +0.008140f, +0.005556f, +0.009611f, -0.001995f, -0.006851f, -0.005520f, +0.004490f, +0.005110f, -0.004965f, + -0.004492f, +0.008743f, -0.005230f, -0.001260f, -0.000251f, -0.005682f, +0.000790f, +0.002164f, +0.002908f, +0.004082f, + +0.003067f, -0.001861f, -0.002048f, +0.001826f, +0.002224f, -0.000616f, -0.001681f, +0.001668f, +0.000646f, -0.005334f, + +0.001046f, -0.000006f, -0.004466f, -0.000309f, +0.002200f, +0.001189f, +0.002550f, +0.001357f, -0.000183f, -0.001663f, + -0.001398f, -0.000653f, +0.000735f, -0.000269f, -0.001300f, +0.000993f + }, + { + +0.001207f, +0.101807f, -0.051421f, -0.075883f, +0.035374f, -0.002030f, +0.006768f, +0.009894f, -0.009285f, -0.008806f, + -0.003525f, -0.014984f, -0.003850f, -0.010537f, -0.012795f, +0.008389f, +0.021143f, +0.032226f, -0.017770f, -0.012883f, + -0.012159f, +0.004435f, -0.015288f, -0.010287f, +0.013282f, +0.013644f, +0.012959f, -0.001814f, +0.004456f, +0.004293f, + -0.005837f, +0.011247f, -0.007044f, -0.012471f, -0.001224f, -0.000729f, +0.008418f, -0.002966f, -0.000280f, -0.000840f, + +0.002985f, -0.005028f, +0.008223f, +0.004073f, -0.003262f, -0.011216f, +0.000249f, -0.007512f, -0.001341f, -0.001084f, + -0.003499f, +0.010535f, +0.000920f, +0.002112f, +0.007360f, +0.001687f, +0.004058f, -0.003475f, +0.006528f, +0.009517f, + +0.001812f, +0.003618f, -0.000494f, -0.000100f, +0.008507f, -0.001809f, -0.002263f, -0.001798f, -0.005227f, -0.002587f, + -0.003740f, +0.002073f, -0.006477f, +0.003049f, -0.006044f, -0.000638f, -0.003926f, +0.006552f, -0.001481f, +0.002818f, + -0.004057f, +0.005326f, -0.000050f, -0.001829f, -0.000574f, -0.001803f, -0.002633f, -0.001842f, +0.002347f, +0.000147f, + +0.002524f, +0.002231f, -0.000529f, +0.002858f, -0.000847f, +0.001690f + }, + { + +0.013809f, -0.154491f, +0.031301f, +0.071866f, -0.004310f, -0.003058f, +0.000003f, -0.003727f, -0.010220f, +0.011892f, + -0.012808f, -0.002976f, +0.005142f, -0.008228f, -0.005804f, +0.007510f, +0.009341f, +0.001933f, +0.000279f, +0.009064f, + +0.000236f, +0.000296f, +0.006110f, +0.002700f, -0.014615f, +0.011250f, +0.008429f, +0.015532f, +0.015291f, +0.009882f, + +0.000066f, +0.011536f, -0.007779f, -0.001166f, -0.002781f, -0.013293f, +0.016946f, -0.005084f, -0.004208f, -0.010302f, + -0.002962f, +0.005441f, +0.000273f, +0.006536f, +0.000542f, -0.010830f, +0.014633f, +0.003763f, +0.005148f, +0.003860f, + +0.002201f, +0.000354f, -0.002508f, -0.002844f, -0.006878f, -0.001210f, -0.005020f, +0.002245f, +0.000339f, -0.010673f, + +0.006725f, -0.002549f, -0.006259f, +0.002725f, -0.005833f, -0.000083f, +0.004079f, -0.001866f, +0.000521f, +0.000538f, + -0.003658f, +0.001312f, +0.001482f, -0.001260f, +0.001056f, +0.002755f, +0.000705f, +0.001131f, -0.000231f, +0.001843f, + -0.002613f, -0.000725f, -0.001997f, -0.003359f, +0.000626f, +0.001136f, -0.003737f, -0.003196f, -0.001323f, +0.002602f, + -0.000227f, +0.000727f, +0.001698f, -0.002259f, -0.001416f, +0.001114f + }, + { + +0.000076f, -0.015682f, -0.033795f, +0.001947f, +0.000916f, -0.002549f, -0.001632f, +0.009132f, -0.003025f, -0.003772f, + -0.007642f, -0.005041f, +0.007640f, +0.001706f, -0.019109f, -0.003727f, +0.012687f, -0.025435f, -0.004125f, -0.002909f, + +0.000173f, +0.002288f, -0.023381f, -0.025015f, +0.017272f, -0.006080f, -0.011165f, +0.004428f, +0.010276f, -0.011992f, + +0.013073f, +0.008717f, +0.001832f, +0.000012f, +0.000316f, -0.022190f, +0.000712f, -0.002192f, -0.002908f, +0.006460f, + -0.012897f, +0.013793f, -0.006831f, +0.000395f, -0.001555f, +0.001973f, -0.000781f, -0.003979f, +0.002019f, -0.000561f, + +0.000247f, +0.002605f, +0.000836f, -0.010385f, -0.008989f, +0.005225f, +0.000542f, -0.001172f, +0.003063f, -0.006622f, + -0.005120f, -0.006160f, -0.001696f, +0.003898f, +0.001219f, -0.000901f, -0.002029f, +0.000628f, -0.005687f, -0.000505f, + -0.001835f, +0.001248f, +0.003399f, -0.003424f, -0.002813f, -0.002558f, +0.000464f, +0.005645f, +0.002073f, +0.003252f, + +0.002372f, +0.001802f, -0.004584f, +0.006424f, -0.001297f, -0.002749f, -0.000889f, +0.000479f, +0.001363f, +0.002494f, + +0.002069f, +0.002121f, +0.001440f, -0.001663f, +0.002591f, +0.001156f + }, + { + +0.020349f, -0.150396f, -0.001595f, +0.086438f, -0.000489f, -0.000017f, -0.012116f, +0.004609f, +0.012757f, +0.011244f, + +0.001186f, +0.014814f, +0.014833f, +0.016797f, +0.004756f, +0.003465f, -0.019681f, -0.011083f, -0.003497f, +0.018493f, + -0.007029f, -0.010088f, +0.007314f, +0.008220f, +0.006998f, +0.007632f, +0.007551f, +0.003278f, -0.001261f, -0.012488f, + +0.011687f, +0.007269f, -0.006883f, +0.000087f, +0.003792f, +0.014307f, +0.001833f, -0.000403f, +0.004792f, -0.003892f, + +0.001238f, +0.001397f, -0.000683f, +0.000444f, +0.001151f, +0.006159f, +0.007005f, +0.012058f, +0.002210f, +0.005823f, + -0.001001f, -0.009513f, -0.003207f, +0.004942f, +0.003889f, -0.001580f, -0.002982f, -0.003995f, -0.005775f, +0.001855f, + +0.003643f, +0.005401f, +0.004123f, +0.001033f, +0.000125f, -0.004822f, +0.000593f, +0.000936f, -0.000685f, +0.002190f, + -0.000584f, +0.001421f, +0.003087f, +0.000133f, +0.000818f, -0.002314f, -0.001438f, +0.000241f, -0.000280f, +0.000935f, + -0.002162f, -0.002237f, +0.002048f, +0.000813f, +0.001528f, +0.003875f, -0.000170f, -0.003523f, -0.000808f, -0.003286f, + +0.000845f, +0.002607f, -0.000879f, +0.001791f, -0.001242f, -0.000309f + }, + { + +0.002081f, -0.014863f, +0.004699f, +0.012039f, -0.007761f, +0.005407f, +0.000592f, +0.006112f, -0.003441f, -0.006250f, + +0.003740f, -0.013334f, +0.009751f, +0.004458f, -0.007733f, -0.012700f, +0.003630f, +0.000134f, -0.004808f, +0.008192f, + -0.009721f, -0.009317f, +0.004645f, -0.000311f, +0.021368f, -0.011523f, +0.002428f, -0.001807f, +0.004495f, +0.008555f, + +0.000944f, +0.004891f, +0.004399f, +0.024376f, +0.003952f, +0.001156f, -0.010398f, -0.000036f, +0.006464f, -0.010633f, + -0.002555f, -0.003991f, -0.005873f, -0.003431f, -0.010199f, +0.005861f, +0.000843f, -0.003902f, +0.002235f, +0.001957f, + +0.000269f, -0.006732f, +0.000359f, +0.003998f, -0.003493f, -0.001430f, +0.003808f, +0.004699f, -0.007467f, +0.002136f, + +0.005755f, -0.003674f, +0.002475f, -0.001597f, -0.000619f, -0.006347f, +0.001020f, -0.003078f, -0.000936f, -0.005187f, + +0.001259f, -0.000314f, -0.000207f, -0.000211f, +0.002821f, +0.000400f, +0.001554f, +0.000837f, +0.000341f, +0.000257f, + +0.001191f, +0.005223f, -0.004642f, +0.001452f, -0.004646f, -0.001445f, -0.000357f, +0.001024f, +0.000531f, -0.001277f, + -0.001429f, -0.001860f, +0.001247f, -0.002152f, -0.001492f, -0.000209f + }, + { + +0.012737f, -0.182491f, +0.025002f, +0.058346f, -0.000282f, +0.008621f, -0.019629f, -0.000449f, -0.000546f, -0.007655f, + +0.001526f, +0.005149f, -0.000918f, -0.014143f, +0.004520f, -0.002801f, -0.039779f, +0.008759f, -0.002495f, +0.011636f, + -0.012985f, -0.013978f, -0.002523f, +0.008250f, -0.006118f, +0.000364f, +0.001293f, +0.008983f, +0.010032f, -0.001016f, + -0.002711f, +0.006782f, +0.009652f, +0.001084f, -0.000281f, +0.006571f, +0.006490f, -0.007883f, +0.002554f, -0.012288f, + -0.007956f, -0.013076f, -0.004755f, -0.001085f, +0.000630f, -0.007104f, -0.010751f, -0.008050f, +0.001963f, +0.000280f, + -0.001105f, -0.002252f, -0.004575f, +0.000768f, -0.001215f, -0.001699f, -0.003845f, -0.001411f, +0.001766f, -0.001909f, + +0.009309f, -0.000484f, +0.001884f, +0.006811f, -0.005525f, +0.003814f, -0.000972f, -0.003037f, +0.005122f, -0.005472f, + +0.003820f, -0.000330f, +0.002114f, +0.003360f, -0.000440f, -0.002310f, +0.002573f, +0.005684f, -0.003450f, -0.003693f, + -0.001235f, +0.003110f, +0.002313f, +0.001221f, +0.001025f, -0.002212f, +0.002909f, -0.001026f, +0.001159f, -0.001414f, + +0.001671f, +0.001054f, +0.000768f, -0.001525f, -0.002022f, +0.000223f + }, + { + +0.004803f, +0.056489f, -0.001766f, +0.012516f, +0.002119f, +0.002441f, -0.005361f, +0.006321f, +0.007567f, +0.003169f, + -0.002416f, -0.019105f, -0.008000f, +0.014130f, +0.000841f, +0.014920f, -0.035865f, -0.011253f, -0.002315f, +0.009571f, + +0.013615f, -0.007980f, +0.007278f, -0.010611f, +0.022235f, -0.030296f, -0.007723f, +0.011169f, -0.012471f, -0.017576f, + +0.005292f, +0.009244f, -0.010393f, -0.001565f, -0.011359f, +0.003035f, -0.009380f, -0.003126f, +0.004788f, -0.011105f, + +0.007725f, -0.005856f, +0.011628f, -0.002082f, -0.001800f, +0.010358f, +0.009959f, +0.010571f, +0.002827f, +0.002300f, + +0.000724f, -0.001547f, +0.008841f, -0.002381f, +0.001753f, -0.009446f, -0.002203f, -0.000236f, -0.000363f, +0.004010f, + +0.001437f, -0.002852f, +0.004422f, -0.006676f, +0.002120f, +0.004249f, -0.003020f, -0.000116f, -0.007919f, -0.000528f, + +0.000241f, -0.000778f, +0.000222f, +0.001739f, -0.000056f, +0.001679f, -0.000852f, +0.004148f, +0.003180f, +0.000645f, + +0.001205f, +0.001084f, +0.000218f, +0.000786f, +0.002520f, -0.001521f, +0.000372f, +0.002520f, +0.002629f, +0.001122f, + -0.002698f, +0.002938f, +0.000605f, +0.000285f, +0.002573f, +0.002023f + }, + { + -0.014128f, -0.023560f, +0.005724f, -0.002317f, -0.017320f, -0.019258f, -0.021624f, +0.018525f, +0.016797f, +0.010377f, + -0.012090f, +0.004725f, -0.011271f, -0.027684f, -0.017489f, -0.018645f, +0.023257f, -0.003487f, +0.033657f, +0.020467f, + -0.007652f, +0.020951f, -0.007029f, +0.009201f, -0.004497f, -0.011332f, +0.007956f, -0.009349f, -0.008259f, -0.005921f, + -0.005548f, +0.005953f, -0.011613f, +0.006806f, +0.005236f, -0.007915f, +0.008562f, -0.005799f, +0.001027f, -0.002484f, + -0.009849f, +0.007736f, +0.003859f, -0.007107f, +0.002256f, +0.003870f, -0.008730f, -0.001101f, -0.004059f, +0.005236f, + +0.000734f, +0.001324f, +0.003388f, -0.006690f, +0.017243f, -0.000148f, +0.008654f, -0.007532f, +0.004995f, -0.002495f, + -0.009360f, +0.007955f, -0.005600f, -0.000257f, -0.003238f, +0.000229f, +0.008347f, +0.007170f, -0.003176f, +0.001604f, + -0.000370f, -0.003574f, +0.004450f, +0.003652f, +0.002002f, +0.002433f, -0.001492f, -0.001098f, +0.002124f, +0.005545f, + +0.002083f, -0.002969f, -0.004684f, +0.001846f, -0.000170f, -0.003809f, +0.005627f, -0.005025f, +0.002387f, +0.001156f, + -0.001636f, +0.001233f, +0.004563f, +0.000670f, -0.000452f, -0.002078f + }, + { + -0.000563f, +0.060549f, -0.024337f, -0.004257f, +0.022476f, -0.012107f, -0.005613f, +0.039525f, +0.026969f, +0.011681f, + +0.001215f, +0.001627f, +0.006121f, +0.003978f, -0.027822f, +0.009129f, -0.001496f, -0.014928f, -0.005431f, -0.004408f, + -0.030855f, +0.006289f, -0.000235f, -0.004653f, -0.008818f, -0.006574f, +0.001195f, -0.008047f, +0.007058f, -0.010142f, + -0.009102f, +0.000639f, -0.007255f, +0.009700f, -0.001548f, -0.013103f, -0.002373f, -0.005765f, +0.002744f, +0.010156f, + -0.012074f, -0.007334f, +0.005339f, -0.004515f, -0.011054f, +0.014886f, +0.010886f, -0.009000f, +0.004818f, +0.005777f, + +0.010093f, -0.006982f, -0.002469f, -0.008151f, -0.003157f, -0.005902f, +0.004022f, -0.002597f, -0.001746f, -0.003521f, + +0.002788f, -0.000296f, -0.002183f, -0.009742f, +0.001257f, -0.000831f, +0.001258f, +0.001193f, -0.000899f, -0.002872f, + +0.005182f, -0.001003f, -0.006986f, +0.001022f, -0.001588f, +0.002035f, -0.002368f, -0.001798f, +0.000782f, +0.000332f, + -0.002275f, +0.000221f, -0.004390f, -0.002316f, +0.000616f, +0.003932f, -0.004575f, -0.000180f, -0.001743f, -0.000143f, + +0.003509f, -0.002035f, -0.001926f, -0.000366f, -0.000772f, -0.004899f + }, + { + +0.031150f, -0.058280f, -0.025107f, +0.021556f, +0.009903f, +0.007589f, +0.012574f, -0.008821f, -0.007482f, +0.020207f, + +0.023500f, -0.031996f, -0.000339f, +0.001889f, +0.032941f, -0.002896f, +0.004193f, -0.009522f, +0.011891f, +0.029523f, + -0.009336f, -0.001750f, +0.019441f, -0.003759f, -0.005752f, +0.008800f, +0.003429f, -0.002328f, -0.001991f, +0.000266f, + +0.005943f, +0.014297f, -0.000756f, +0.000568f, -0.010450f, +0.022490f, -0.013445f, -0.002159f, -0.006719f, -0.012485f, + -0.002532f, -0.001502f, +0.000068f, -0.009346f, -0.008347f, +0.012638f, -0.007802f, -0.007435f, -0.003222f, -0.001216f, + -0.000494f, +0.004809f, -0.003194f, -0.004789f, +0.016226f, -0.008134f, -0.002681f, -0.004878f, +0.009136f, +0.003495f, + +0.003437f, +0.008006f, +0.011358f, +0.002616f, -0.010649f, +0.005200f, -0.005724f, +0.000981f, -0.001890f, -0.003200f, + +0.008599f, +0.002024f, -0.002406f, +0.006384f, +0.000314f, -0.000836f, +0.002807f, -0.005677f, -0.004269f, +0.001619f, + +0.003881f, -0.002707f, +0.005525f, +0.000203f, +0.005035f, +0.001886f, +0.003632f, +0.002042f, +0.000210f, -0.002776f, + +0.001491f, +0.001298f, +0.001461f, +0.000347f, +0.000982f, -0.001883f + }, + { + -0.000692f, -0.001159f, -0.033922f, -0.000355f, +0.001734f, +0.013426f, +0.009784f, -0.002731f, -0.002100f, -0.002221f, + +0.001985f, +0.001014f, +0.001429f, +0.005428f, +0.001254f, +0.003677f, -0.009363f, -0.001786f, -0.012418f, -0.003152f, + +0.050224f, +0.002667f, -0.009457f, +0.011526f, +0.016994f, +0.012559f, -0.013537f, -0.023626f, -0.003411f, +0.023627f, + -0.005561f, +0.008294f, -0.016268f, +0.017536f, +0.010544f, +0.007733f, -0.003450f, -0.003694f, +0.009320f, +0.010083f, + -0.003117f, -0.017169f, -0.003698f, -0.013632f, +0.003798f, -0.002100f, +0.001876f, +0.007586f, -0.010240f, +0.006657f, + -0.005703f, +0.001644f, -0.002223f, -0.005348f, +0.003469f, -0.002185f, +0.013010f, -0.005809f, +0.002182f, +0.002616f, + -0.004703f, -0.002871f, +0.002442f, +0.007647f, +0.001487f, -0.000634f, +0.006865f, -0.004787f, -0.000486f, +0.001231f, + -0.001882f, +0.002910f, +0.004185f, -0.002332f, -0.002500f, -0.004835f, +0.009633f, -0.002424f, -0.002591f, -0.000198f, + -0.003494f, -0.003620f, +0.000165f, +0.005288f, -0.004966f, -0.001791f, +0.001618f, +0.011247f, -0.001881f, -0.003664f, + -0.000460f, -0.001820f, -0.000861f, -0.003775f, +0.001589f, +0.001544f + }, + { + +0.025053f, -0.086480f, -0.000352f, -0.002583f, -0.004184f, +0.017957f, +0.002825f, -0.006109f, -0.017901f, -0.010646f, + -0.018085f, +0.035289f, +0.000937f, -0.018432f, +0.007013f, -0.003456f, +0.023096f, -0.021893f, -0.012393f, +0.003506f, + +0.007006f, -0.005468f, -0.022622f, +0.007004f, +0.005559f, +0.012396f, +0.011564f, -0.003587f, -0.006207f, +0.000524f, + -0.020512f, -0.013594f, -0.002641f, +0.006023f, +0.015788f, +0.001222f, -0.000216f, +0.001823f, -0.002380f, +0.004288f, + +0.007544f, +0.010863f, +0.001723f, +0.000034f, +0.006828f, -0.002779f, +0.005336f, +0.004367f, -0.009755f, +0.017607f, + +0.009202f, -0.008681f, -0.004725f, -0.013830f, +0.009637f, +0.004974f, -0.001400f, -0.007217f, +0.000625f, -0.004396f, + -0.005889f, -0.004711f, -0.002666f, -0.005712f, +0.002465f, -0.005140f, -0.000949f, +0.000212f, -0.000400f, +0.008973f, + -0.002335f, -0.002101f, -0.000765f, +0.005692f, -0.003817f, +0.003842f, -0.002394f, +0.005943f, -0.001058f, +0.002314f, + -0.004620f, -0.001918f, -0.000481f, +0.003090f, -0.003423f, -0.004408f, +0.003006f, +0.000377f, -0.000487f, -0.001892f, + -0.003226f, -0.002205f, +0.001733f, +0.000807f, +0.001827f, +0.000040f + }, + { + -0.002835f, +0.082760f, -0.025660f, +0.010817f, +0.011971f, +0.003346f, -0.002826f, +0.003702f, -0.007297f, -0.002898f, + +0.000302f, +0.007442f, +0.002315f, +0.010453f, -0.098324f, +0.009456f, -0.007568f, +0.010535f, -0.007974f, +0.002702f, + +0.016341f, -0.004086f, +0.006259f, +0.014146f, -0.008075f, +0.018301f, -0.001731f, -0.004774f, +0.021153f, +0.016491f, + -0.015600f, +0.006723f, -0.003591f, +0.015741f, -0.015002f, +0.008626f, +0.010508f, -0.008996f, -0.000920f, +0.007694f, + +0.002977f, +0.006105f, +0.003043f, -0.014271f, +0.001014f, +0.011586f, -0.015484f, +0.000213f, +0.007825f, +0.001029f, + -0.003569f, +0.010545f, -0.006258f, +0.000088f, +0.001827f, -0.003988f, +0.010147f, -0.002831f, +0.006664f, -0.003202f, + +0.007386f, +0.002191f, +0.001044f, +0.009451f, +0.002714f, +0.004347f, -0.002650f, +0.007122f, +0.001269f, +0.007257f, + -0.003867f, +0.001374f, +0.002244f, +0.007917f, -0.003349f, +0.003012f, +0.001668f, -0.005200f, -0.002216f, -0.000623f, + -0.000440f, -0.000642f, +0.000751f, +0.003773f, +0.004180f, -0.002019f, -0.000706f, -0.000387f, -0.004923f, -0.004635f, + -0.002362f, +0.002819f, +0.002666f, +0.001889f, +0.000201f, -0.002266f + } + }, + { + { + +0.006939f, +0.282848f, -0.013813f, -0.092022f, +0.023223f, -0.015559f, +0.009910f, -0.013066f, -0.010746f, -0.018928f, + +0.000926f, +0.015813f, +0.014001f, +0.001655f, -0.018616f, +0.008942f, -0.009397f, -0.001516f, -0.015417f, +0.021989f, + -0.012077f, -0.018335f, -0.003291f, +0.009630f, +0.012220f, -0.009964f, -0.013960f, +0.005317f, +0.000950f, +0.022376f, + -0.004565f, +0.006354f, +0.000492f, +0.006723f, +0.004631f, +0.010702f, +0.008960f, -0.002003f, -0.004520f, -0.008953f, + -0.005356f, +0.010607f, +0.003426f, -0.004550f, -0.002924f, +0.001206f, +0.005912f, +0.001740f, +0.000081f, -0.001450f, + +0.000393f, +0.008742f, +0.000759f, +0.001770f, +0.001505f, +0.001300f, +0.002320f, -0.003152f, -0.001198f, -0.001113f, + -0.006484f, -0.000337f, -0.000053f, -0.005480f, -0.001594f, +0.003607f, +0.002188f, +0.000555f, +0.001440f, +0.001453f, + +0.001184f, +0.000523f, -0.001159f, -0.002865f, +0.001041f, -0.000479f, -0.000131f, +0.000316f, -0.000495f, -0.001517f, + -0.001188f, -0.000278f, -0.000651f, +0.003323f, -0.001059f, -0.000264f, +0.000507f, -0.000863f, -0.000233f, -0.003103f, + -0.000701f, -0.001497f, -0.000099f, -0.001158f, -0.003584f, +0.002393f + }, + { + -0.000955f, -0.076843f, -0.021086f, +0.027055f, +0.006681f, -0.005798f, -0.000610f, +0.001842f, -0.004759f, -0.011075f, + -0.014204f, -0.004113f, +0.006321f, -0.013163f, +0.007234f, -0.000410f, -0.003567f, -0.013379f, -0.009189f, +0.015829f, + +0.002645f, -0.015601f, -0.002976f, -0.003580f, +0.015899f, +0.003387f, +0.007064f, -0.000903f, -0.003682f, -0.001953f, + +0.002843f, -0.001835f, -0.002155f, -0.000912f, -0.001486f, +0.013930f, -0.004855f, +0.006257f, +0.002998f, -0.013347f, + +0.007158f, +0.003601f, +0.000207f, -0.004728f, +0.001895f, -0.002100f, -0.007537f, -0.003132f, -0.003461f, -0.004678f, + -0.000083f, +0.002096f, +0.003329f, +0.003654f, -0.000849f, -0.006492f, -0.001004f, +0.002227f, -0.001856f, -0.000685f, + +0.001984f, +0.002611f, -0.002734f, -0.005660f, +0.000839f, -0.000853f, -0.000047f, +0.001091f, +0.004126f, -0.000959f, + +0.004475f, -0.003145f, +0.000649f, +0.000144f, +0.001243f, +0.000355f, -0.001208f, -0.000064f, -0.000220f, -0.001712f, + -0.000138f, -0.002509f, -0.005230f, +0.001322f, +0.002439f, +0.002427f, -0.000111f, +0.003476f, -0.001838f, +0.000314f, + -0.001013f, -0.001811f, +0.001209f, -0.003049f, +0.000125f, +0.000712f + }, + { + -0.004022f, -0.034279f, +0.053997f, -0.037087f, +0.010868f, +0.001919f, +0.008956f, -0.006480f, -0.003247f, +0.005819f, + -0.014706f, -0.013321f, +0.007735f, -0.016122f, +0.005566f, -0.017190f, +0.022096f, +0.025006f, -0.003848f, -0.007072f, + -0.013824f, -0.008653f, -0.002474f, -0.005080f, +0.000556f, +0.019834f, +0.014395f, +0.009781f, -0.005365f, +0.007438f, + +0.000469f, +0.005627f, -0.017498f, +0.004222f, -0.004175f, +0.001096f, -0.004435f, -0.009352f, +0.013734f, +0.000276f, + +0.007035f, -0.012203f, +0.012448f, -0.002520f, +0.002489f, -0.003213f, -0.013210f, -0.004880f, +0.005941f, -0.004736f, + +0.002995f, +0.003574f, +0.007581f, -0.003886f, +0.006641f, +0.008444f, -0.002446f, -0.000515f, +0.001950f, +0.007063f, + +0.000869f, +0.002938f, +0.001684f, +0.002432f, +0.002107f, +0.005451f, -0.005250f, -0.002543f, -0.002798f, -0.003157f, + -0.003734f, -0.001404f, +0.000411f, -0.004146f, -0.005137f, +0.001418f, -0.004866f, +0.003712f, -0.000088f, -0.001273f, + -0.000755f, +0.002942f, +0.003166f, -0.002802f, -0.001462f, +0.000074f, -0.001098f, -0.001917f, +0.001920f, -0.000055f, + -0.000597f, +0.003254f, +0.000598f, +0.000765f, +0.001676f, +0.001719f + }, + { + -0.018066f, -0.080740f, +0.022962f, +0.055695f, -0.004085f, +0.003907f, -0.012589f, +0.002016f, -0.011546f, +0.007042f, + -0.018254f, +0.013370f, +0.002874f, -0.009481f, -0.008842f, +0.001013f, +0.034729f, -0.008855f, +0.003750f, +0.006699f, + +0.000215f, -0.007437f, +0.014883f, -0.006934f, +0.002430f, -0.004388f, +0.006781f, +0.021137f, +0.001293f, +0.014000f, + +0.012196f, -0.001210f, -0.008668f, +0.003216f, -0.003240f, -0.001327f, +0.005544f, +0.002087f, -0.010177f, -0.003603f, + -0.001494f, -0.007644f, +0.006971f, +0.000636f, -0.005472f, +0.005534f, +0.006682f, +0.008181f, +0.000955f, +0.006340f, + +0.003410f, +0.004727f, -0.004049f, -0.001817f, -0.005146f, -0.000200f, -0.004831f, +0.001568f, -0.006137f, -0.001323f, + -0.005054f, +0.003302f, +0.001335f, -0.004191f, -0.004822f, +0.001979f, -0.001485f, +0.001716f, -0.001038f, -0.001458f, + +0.000378f, +0.001116f, -0.000710f, +0.001165f, -0.003238f, +0.005482f, -0.002457f, +0.004518f, -0.000641f, +0.001123f, + -0.001255f, -0.000885f, -0.002809f, -0.001926f, +0.000468f, +0.001060f, -0.003441f, -0.003138f, -0.002076f, +0.000408f, + -0.001250f, +0.002348f, +0.001878f, -0.004379f, -0.000307f, +0.001625f + }, + { + -0.001830f, -0.063330f, +0.002034f, +0.004573f, -0.004606f, -0.002234f, +0.002659f, +0.008317f, -0.003179f, -0.008724f, + +0.001522f, -0.014514f, +0.005097f, -0.002150f, +0.011275f, -0.026785f, +0.007250f, -0.011244f, -0.022888f, +0.001003f, + -0.000729f, -0.001989f, -0.019754f, +0.004207f, -0.007704f, -0.003929f, -0.004640f, +0.007906f, +0.001162f, +0.007964f, + +0.005489f, +0.000925f, +0.007666f, -0.008334f, -0.006769f, -0.008085f, +0.006645f, -0.005105f, -0.006102f, -0.003740f, + +0.004985f, -0.005461f, +0.001259f, -0.002629f, +0.001616f, +0.003475f, -0.004383f, -0.004932f, +0.000637f, +0.001560f, + +0.003144f, +0.006913f, +0.004259f, -0.015139f, -0.005306f, -0.000849f, +0.004504f, -0.006922f, +0.004221f, -0.008005f, + -0.001972f, -0.000223f, -0.005980f, +0.003581f, -0.000286f, -0.000853f, +0.005025f, -0.004337f, -0.005721f, +0.000432f, + -0.001868f, -0.002098f, +0.000494f, -0.001041f, -0.001191f, -0.003119f, +0.000806f, +0.003818f, +0.002732f, +0.004175f, + +0.005882f, -0.001937f, -0.002485f, +0.004826f, +0.000975f, -0.005059f, +0.000739f, -0.000634f, +0.001219f, +0.001642f, + +0.004676f, +0.000689f, +0.002715f, -0.002560f, +0.001250f, +0.001581f + }, + { + -0.026191f, -0.056894f, -0.037481f, +0.084611f, -0.005801f, +0.006477f, -0.000772f, +0.000631f, +0.011080f, -0.003787f, + +0.010367f, +0.021637f, +0.013814f, -0.001706f, +0.017493f, -0.007920f, -0.006346f, -0.000726f, -0.005226f, +0.006187f, + -0.009751f, -0.008798f, +0.003996f, +0.008080f, +0.010333f, +0.011317f, -0.002046f, -0.000432f, +0.000721f, -0.009860f, + +0.009135f, +0.006592f, +0.002547f, -0.008805f, +0.015833f, +0.001958f, +0.006863f, -0.002284f, +0.008052f, -0.004335f, + -0.000171f, -0.000551f, -0.000546f, +0.005828f, +0.001534f, +0.005719f, +0.008031f, +0.002125f, +0.006335f, +0.002375f, + -0.003314f, -0.001768f, +0.000032f, +0.007764f, -0.004739f, +0.002402f, +0.000226f, -0.001591f, -0.007545f, -0.001308f, + +0.006035f, +0.004997f, +0.001168f, +0.004756f, -0.002424f, -0.003796f, -0.000696f, +0.000452f, +0.002310f, -0.003591f, + +0.000700f, +0.002809f, +0.003063f, -0.000518f, +0.002207f, -0.000553f, +0.000779f, -0.001091f, -0.000453f, +0.002959f, + -0.002525f, -0.004266f, +0.000931f, +0.000883f, +0.001442f, +0.003631f, +0.000667f, -0.001906f, -0.001756f, -0.004081f, + +0.002078f, +0.000954f, +0.000660f, +0.001662f, -0.000590f, -0.000823f + }, + { + -0.000709f, +0.003443f, +0.013575f, -0.001741f, +0.001584f, +0.002299f, +0.003529f, +0.002324f, +0.001688f, +0.000324f, + -0.004475f, -0.002977f, -0.003477f, +0.022158f, -0.027720f, +0.004137f, +0.003118f, -0.009128f, -0.001057f, -0.017083f, + -0.004396f, +0.000716f, -0.002952f, +0.007279f, +0.004526f, +0.001128f, -0.000902f, +0.010690f, -0.004629f, +0.001308f, + +0.002913f, -0.000855f, +0.015736f, +0.014869f, +0.015069f, -0.009264f, -0.003853f, -0.005528f, -0.000361f, -0.005530f, + +0.006172f, -0.003533f, -0.012371f, -0.004905f, -0.011717f, +0.005091f, +0.002470f, -0.000497f, +0.000904f, -0.006979f, + -0.002150f, +0.001656f, -0.004137f, +0.001634f, +0.001564f, +0.001410f, +0.004932f, +0.001041f, -0.002927f, -0.001007f, + +0.001916f, -0.000778f, -0.001135f, +0.001709f, -0.001501f, -0.000691f, -0.002890f, -0.005099f, -0.002809f, -0.000350f, + -0.004858f, +0.003385f, +0.000867f, +0.000600f, +0.001485f, -0.000948f, +0.002331f, +0.001702f, +0.003002f, -0.003660f, + +0.002105f, +0.001664f, -0.000059f, -0.002059f, -0.000028f, -0.002806f, -0.002018f, +0.001231f, -0.000419f, -0.000246f, + -0.004920f, +0.001550f, -0.000628f, -0.000998f, -0.003024f, +0.000914f + }, + { + -0.020253f, -0.125650f, -0.009259f, +0.053983f, +0.011909f, +0.007760f, -0.006381f, -0.010792f, -0.005289f, -0.001680f, + +0.018443f, -0.007485f, -0.004733f, -0.004983f, -0.002191f, -0.027091f, -0.021172f, +0.002599f, -0.008531f, +0.003907f, + +0.001041f, -0.017534f, +0.004606f, +0.003720f, -0.008401f, -0.001436f, -0.003092f, +0.011471f, +0.013403f, +0.004000f, + +0.001974f, -0.001750f, -0.004717f, +0.004208f, +0.012176f, +0.007056f, +0.006276f, -0.004888f, -0.003654f, -0.010420f, + -0.008572f, -0.006201f, -0.007163f, -0.002913f, -0.006832f, -0.005020f, -0.002886f, -0.006492f, -0.005881f, -0.002734f, + +0.002386f, -0.008397f, +0.000815f, -0.002169f, -0.003504f, +0.000308f, -0.002510f, -0.004204f, +0.004738f, -0.003603f, + +0.007628f, +0.005225f, -0.000775f, +0.000694f, +0.003364f, +0.002641f, -0.004431f, +0.003790f, +0.002462f, -0.006910f, + +0.000268f, +0.000355f, +0.004708f, +0.003413f, -0.002139f, -0.003377f, +0.007181f, +0.004489f, -0.003817f, -0.004099f, + +0.000573f, +0.002321f, -0.001829f, +0.001941f, +0.001243f, +0.001277f, -0.002104f, +0.000860f, +0.001517f, -0.001396f, + -0.000719f, +0.001267f, +0.001664f, -0.001499f, +0.000957f, -0.001238f + }, + { + +0.001522f, +0.044472f, +0.032726f, +0.007441f, +0.006612f, -0.000704f, -0.004535f, +0.007000f, +0.012651f, -0.004452f, + -0.004519f, -0.009092f, +0.001818f, +0.001809f, -0.007473f, -0.005603f, -0.013101f, -0.002397f, -0.004592f, +0.001529f, + +0.016207f, +0.001843f, +0.004152f, +0.007102f, -0.012204f, -0.021666f, -0.006518f, +0.004857f, -0.006481f, -0.016454f, + +0.000444f, +0.012447f, -0.012536f, -0.005797f, +0.003989f, -0.000458f, -0.012260f, -0.000581f, -0.004874f, +0.006653f, + -0.005881f, -0.004427f, +0.015297f, -0.008182f, -0.004953f, +0.015067f, +0.002973f, +0.017475f, +0.004157f, -0.002934f, + +0.001814f, +0.006085f, +0.001564f, -0.001032f, -0.000990f, -0.003208f, -0.000899f, +0.000120f, -0.002559f, +0.006613f, + +0.000637f, -0.001797f, -0.003137f, -0.001805f, +0.004327f, +0.000127f, -0.001728f, -0.000062f, -0.005413f, -0.003102f, + +0.001286f, -0.001474f, -0.000605f, +0.004926f, +0.000483f, +0.003124f, -0.001088f, +0.004825f, +0.001602f, -0.000517f, + +0.000973f, +0.000324f, -0.000714f, +0.001670f, -0.000032f, -0.000281f, +0.002047f, +0.001732f, +0.002514f, +0.000054f, + -0.002397f, +0.000405f, +0.004145f, +0.000849f, +0.001911f, +0.000419f + }, + { + +0.018008f, -0.034952f, -0.011544f, +0.009084f, -0.022611f, -0.017197f, +0.022598f, -0.005751f, +0.022125f, -0.009450f, + -0.000984f, +0.014985f, -0.019356f, -0.031544f, -0.034530f, +0.014130f, -0.001806f, -0.012538f, +0.037564f, +0.006419f, + +0.025325f, +0.006232f, +0.008973f, +0.003910f, -0.000697f, -0.002863f, -0.003586f, -0.005675f, -0.018137f, +0.013005f, + -0.007933f, -0.006909f, +0.004587f, +0.007492f, +0.004142f, -0.013662f, +0.004777f, -0.001449f, +0.004795f, -0.000125f, + -0.012944f, +0.004806f, +0.009199f, -0.016373f, +0.003238f, +0.001050f, -0.001615f, +0.002320f, -0.004434f, +0.003400f, + +0.001216f, +0.010379f, +0.001143f, -0.001164f, +0.006360f, +0.001443f, +0.006240f, -0.002759f, -0.002102f, -0.001287f, + -0.001063f, +0.003946f, -0.004378f, -0.008376f, +0.000054f, +0.003662f, +0.007204f, +0.001981f, +0.002452f, +0.001047f, + -0.003955f, -0.000389f, +0.004562f, +0.000008f, +0.004367f, +0.001467f, +0.003312f, -0.005066f, -0.000315f, +0.004787f, + +0.001828f, -0.002627f, -0.002052f, +0.000446f, -0.001371f, -0.002426f, +0.003266f, +0.001122f, -0.000176f, +0.001575f, + -0.000820f, +0.001693f, -0.000883f, +0.001723f, +0.002213f, -0.003063f + }, + { + -0.003051f, +0.003982f, +0.009980f, +0.011629f, +0.012990f, +0.000596f, -0.012847f, +0.038018f, +0.019493f, +0.015173f, + +0.010561f, -0.005107f, +0.004964f, -0.002180f, -0.006157f, +0.000972f, -0.003914f, -0.027599f, +0.007501f, -0.021474f, + -0.008318f, -0.007330f, -0.001375f, +0.016765f, -0.014035f, +0.003309f, +0.005559f, -0.010414f, -0.008797f, -0.006269f, + +0.008427f, -0.007906f, -0.003726f, +0.002391f, +0.000881f, -0.009518f, -0.007151f, +0.001132f, +0.003543f, +0.011580f, + -0.008895f, -0.009140f, +0.001392f, -0.005814f, -0.000153f, +0.011655f, -0.003800f, +0.001634f, +0.010273f, +0.001973f, + +0.007169f, -0.005544f, +0.000304f, -0.005542f, -0.001757f, -0.008704f, +0.000894f, -0.003905f, +0.010596f, -0.007369f, + +0.004164f, -0.008562f, -0.006160f, +0.001699f, -0.009993f, +0.001609f, +0.000449f, -0.000019f, +0.003644f, -0.001821f, + +0.003179f, -0.002179f, -0.008686f, +0.000946f, +0.000390f, -0.002793f, +0.002784f, -0.004099f, -0.005871f, +0.002770f, + -0.000750f, -0.002532f, +0.001922f, -0.002489f, -0.001562f, -0.001414f, +0.000094f, -0.002218f, -0.000718f, -0.002931f, + +0.003179f, -0.002327f, -0.000735f, -0.001443f, -0.000841f, -0.002112f + }, + { + -0.029653f, +0.001849f, +0.002883f, +0.003130f, -0.015137f, +0.030470f, +0.006161f, -0.000903f, +0.005897f, -0.002880f, + +0.005504f, +0.000210f, +0.005283f, -0.018635f, -0.000792f, +0.004422f, +0.015747f, +0.008872f, +0.007387f, +0.025505f, + -0.004907f, -0.001784f, +0.002166f, +0.005416f, -0.010105f, -0.000273f, +0.003211f, +0.006701f, +0.002360f, -0.001260f, + +0.005333f, +0.004495f, -0.004093f, -0.001720f, +0.015494f, +0.006895f, -0.007383f, -0.010627f, -0.003269f, -0.007780f, + +0.004981f, -0.011169f, -0.005345f, -0.005542f, +0.001515f, -0.009393f, +0.010454f, -0.015265f, -0.008106f, +0.002564f, + +0.001377f, +0.001512f, -0.004046f, +0.004902f, +0.010566f, -0.006533f, -0.002208f, -0.001579f, +0.002527f, -0.003759f, + +0.007510f, +0.007347f, +0.008794f, +0.004817f, -0.006586f, +0.001342f, +0.001952f, -0.005048f, -0.001947f, -0.003224f, + +0.006344f, +0.002571f, -0.000736f, +0.001513f, +0.001042f, +0.000958f, +0.002582f, -0.007854f, -0.000722f, +0.000415f, + +0.003501f, -0.001357f, +0.005415f, -0.000501f, +0.003555f, +0.001187f, +0.001701f, +0.004113f, +0.000221f, -0.000886f, + -0.000647f, +0.001372f, +0.000577f, +0.002626f, -0.001157f, +0.001161f + }, + { + -0.001764f, -0.041925f, -0.003697f, -0.013104f, +0.018769f, +0.003733f, +0.006347f, -0.006191f, -0.003089f, +0.003616f, + +0.006441f, +0.007689f, +0.007599f, -0.026995f, +0.020382f, -0.003747f, -0.005731f, -0.007091f, -0.003088f, +0.002421f, + +0.024744f, -0.001369f, -0.005386f, +0.025151f, +0.005748f, +0.007653f, -0.009888f, -0.000441f, -0.000876f, +0.010644f, + +0.018116f, -0.020007f, -0.008235f, +0.009323f, +0.005463f, +0.000388f, +0.012192f, +0.000905f, +0.009729f, -0.000120f, + -0.015955f, -0.014779f, +0.002811f, -0.007567f, +0.000283f, -0.007523f, +0.009720f, +0.006445f, -0.008093f, -0.005375f, + +0.007195f, +0.003970f, -0.001466f, -0.005350f, -0.006749f, +0.012171f, +0.000536f, -0.001125f, +0.000879f, +0.002813f, + +0.001369f, -0.007867f, +0.007350f, +0.002822f, +0.005347f, -0.003162f, +0.004141f, +0.002180f, -0.002307f, -0.004018f, + +0.001962f, +0.002771f, +0.004874f, -0.002663f, -0.001131f, -0.004352f, +0.004736f, -0.002735f, +0.000305f, -0.003391f, + -0.000007f, -0.006420f, -0.001780f, +0.005154f, -0.002495f, -0.004967f, +0.004507f, +0.006920f, -0.000920f, -0.001435f, + -0.001893f, -0.000873f, -0.001394f, -0.000776f, -0.000157f, +0.003226f + }, + { + -0.026332f, -0.021706f, -0.019515f, +0.026576f, -0.004285f, +0.011261f, +0.022880f, -0.018186f, +0.000740f, -0.005673f, + -0.003763f, -0.001018f, +0.016410f, +0.009262f, -0.004452f, -0.003106f, +0.016316f, -0.027213f, -0.010690f, +0.001652f, + +0.005236f, -0.001220f, -0.004042f, -0.012961f, +0.012032f, +0.009000f, +0.014401f, -0.016288f, -0.002696f, -0.009538f, + -0.022789f, -0.013056f, +0.013829f, -0.003227f, +0.000365f, -0.003540f, +0.008137f, +0.005162f, -0.001327f, +0.004516f, + +0.004876f, -0.003362f, +0.011241f, +0.008315f, +0.002596f, +0.001208f, +0.001924f, +0.004669f, +0.003855f, +0.003593f, + +0.003524f, +0.000337f, -0.016078f, -0.005726f, +0.003597f, +0.001291f, -0.003376f, -0.002205f, +0.002242f, -0.011969f, + -0.001931f, -0.004248f, -0.001302f, -0.003135f, -0.005845f, +0.000315f, -0.001348f, +0.003217f, +0.001906f, +0.008033f, + -0.000765f, -0.002311f, -0.001712f, +0.004815f, -0.002629f, -0.001962f, +0.003796f, +0.004766f, -0.003171f, +0.002100f, + -0.003194f, +0.000011f, +0.000364f, -0.002055f, -0.003387f, -0.001776f, +0.001323f, +0.002555f, -0.002648f, -0.000900f, + -0.003681f, -0.000985f, -0.000582f, +0.000619f, +0.000728f, +0.005170f + }, + { + -0.000601f, +0.041507f, +0.009234f, -0.005540f, +0.017263f, -0.002623f, +0.011472f, -0.003985f, -0.011697f, +0.008424f, + -0.022511f, +0.020322f, +0.006820f, -0.005083f, -0.054367f, -0.022007f, -0.004315f, +0.000864f, +0.005461f, -0.010040f, + +0.014490f, -0.005775f, +0.013494f, +0.002543f, +0.017372f, -0.001921f, +0.007027f, -0.007348f, +0.025634f, +0.007138f, + -0.006588f, +0.006844f, -0.002205f, +0.001729f, +0.007222f, -0.000467f, -0.002723f, +0.009334f, -0.004206f, +0.003801f, + +0.003782f, +0.009712f, -0.004237f, -0.007310f, -0.000917f, -0.002282f, -0.007524f, +0.002088f, +0.002754f, +0.001750f, + +0.003993f, +0.004781f, -0.004840f, +0.001387f, +0.004535f, -0.001529f, +0.008815f, +0.002433f, +0.002320f, +0.000956f, + +0.000039f, +0.007126f, +0.005034f, +0.006605f, +0.003858f, +0.001590f, +0.000111f, +0.003822f, +0.001745f, +0.005980f, + -0.002929f, +0.003122f, +0.005227f, +0.001911f, -0.000451f, +0.001883f, +0.002065f, -0.003529f, -0.001943f, -0.001557f, + +0.001523f, -0.003169f, +0.001278f, +0.001368f, +0.006512f, -0.003496f, +0.003359f, -0.002315f, -0.006408f, -0.005035f, + +0.001209f, +0.003168f, +0.002158f, +0.001887f, +0.000602f, -0.003746f + } + }, + { + { + -0.004403f, +0.237756f, -0.040309f, -0.109983f, +0.019580f, -0.012615f, +0.007124f, -0.012636f, -0.007877f, -0.007181f, + +0.024723f, +0.023468f, +0.016339f, +0.007688f, -0.014298f, +0.008232f, +0.013020f, +0.013670f, -0.003069f, +0.014881f, + -0.011673f, -0.012050f, -0.014740f, -0.008353f, -0.000133f, -0.001862f, -0.004537f, +0.000775f, -0.012431f, +0.005041f, + -0.013137f, +0.009888f, -0.003482f, -0.005750f, -0.011804f, -0.006409f, +0.007447f, +0.000292f, -0.001931f, -0.004935f, + +0.003380f, +0.013291f, +0.007870f, +0.000982f, -0.001866f, -0.003127f, +0.001376f, +0.007216f, -0.001832f, -0.003936f, + +0.002456f, +0.005146f, -0.008987f, -0.008687f, -0.006128f, -0.002088f, -0.003088f, -0.009879f, -0.004923f, -0.003701f, + -0.006442f, -0.002983f, +0.002013f, -0.000733f, -0.000517f, +0.002972f, +0.005871f, +0.002877f, +0.000277f, -0.000461f, + -0.000998f, -0.001913f, -0.001674f, -0.002304f, -0.000706f, +0.000098f, +0.001134f, +0.000242f, +0.000262f, -0.000429f, + +0.000357f, -0.000999f, -0.003601f, +0.003145f, +0.000316f, -0.000695f, -0.000243f, +0.000077f, +0.001446f, -0.001009f, + +0.001279f, +0.000694f, +0.000180f, -0.000982f, -0.002926f, +0.000767f + }, + { + -0.000173f, -0.017774f, +0.020449f, +0.053781f, +0.018598f, +0.003354f, +0.001169f, -0.000085f, +0.001257f, +0.003538f, + -0.000591f, -0.007957f, -0.002347f, -0.011122f, +0.005671f, +0.006129f, +0.003378f, +0.004398f, +0.011024f, +0.019290f, + +0.002680f, -0.006726f, +0.013328f, -0.003366f, +0.015351f, +0.002594f, -0.001272f, -0.009378f, -0.011013f, -0.004217f, + +0.010882f, +0.019471f, +0.000138f, -0.008340f, -0.015053f, +0.007363f, -0.012406f, -0.007560f, +0.005604f, -0.004155f, + +0.015613f, -0.001769f, -0.007374f, -0.001316f, +0.001958f, -0.004403f, -0.004917f, +0.007654f, -0.001283f, -0.002109f, + +0.002908f, -0.003289f, -0.005121f, -0.003973f, +0.003871f, -0.002137f, +0.003074f, +0.002032f, -0.003753f, +0.001408f, + +0.000546f, +0.000869f, -0.000999f, -0.005800f, -0.000201f, +0.000868f, +0.001805f, -0.000413f, +0.000964f, -0.004265f, + +0.001899f, -0.001329f, +0.000629f, -0.003676f, -0.003352f, -0.002399f, -0.002466f, +0.000376f, -0.000392f, -0.000923f, + +0.002024f, +0.000054f, -0.002080f, +0.001920f, +0.000600f, -0.001151f, -0.002723f, +0.001423f, -0.002174f, +0.000390f, + +0.001331f, +0.000843f, +0.001224f, -0.002159f, +0.001553f, +0.000154f + }, + { + +0.006511f, -0.113038f, -0.016234f, +0.001250f, +0.029597f, -0.008955f, +0.002131f, -0.005096f, +0.002985f, +0.013568f, + +0.001118f, -0.001393f, +0.009672f, +0.000081f, +0.012126f, -0.013428f, +0.025735f, +0.025562f, +0.007285f, -0.001673f, + -0.012679f, -0.013163f, +0.000834f, +0.001424f, +0.000576f, +0.002492f, -0.002616f, +0.008702f, -0.003837f, +0.010682f, + +0.007007f, +0.005249f, -0.017043f, +0.003949f, -0.007233f, +0.001133f, -0.006160f, -0.017788f, +0.011940f, -0.000471f, + +0.004949f, -0.008930f, +0.016877f, -0.000805f, +0.001421f, +0.002565f, -0.008668f, -0.003851f, +0.005756f, +0.003861f, + +0.010681f, -0.004162f, +0.001914f, -0.002860f, -0.000613f, +0.000486f, -0.007521f, -0.000034f, -0.001212f, +0.000947f, + -0.005783f, -0.002602f, +0.001534f, +0.003163f, -0.000288f, +0.003663f, -0.005151f, -0.000177f, +0.001935f, +0.003420f, + -0.000200f, -0.002718f, +0.002128f, -0.001778f, -0.001238f, +0.002381f, -0.006173f, -0.002590f, -0.002211f, -0.001879f, + -0.004040f, -0.000894f, +0.002322f, -0.002258f, -0.000307f, +0.000922f, -0.001932f, -0.002723f, +0.000614f, -0.000854f, + -0.001998f, +0.002284f, -0.000326f, +0.000527f, +0.004140f, +0.002534f + }, + { + +0.022071f, -0.013554f, +0.017790f, +0.041085f, -0.005061f, -0.002675f, -0.010077f, +0.011826f, -0.007804f, +0.002587f, + -0.018734f, +0.021321f, +0.010482f, +0.012824f, +0.001343f, -0.008369f, +0.032899f, +0.006262f, +0.005145f, -0.014670f, + +0.000165f, -0.007286f, +0.006949f, -0.001527f, +0.011020f, -0.000293f, -0.005497f, +0.010759f, -0.001373f, -0.003075f, + +0.007302f, +0.002171f, +0.001544f, +0.003739f, +0.000983f, +0.007169f, +0.006508f, +0.013094f, +0.000857f, -0.002211f, + -0.008302f, -0.012040f, +0.003344f, -0.010547f, -0.006501f, +0.012016f, +0.001109f, +0.001970f, +0.001462f, -0.002322f, + -0.002209f, +0.005296f, -0.003746f, +0.001869f, +0.005792f, +0.008985f, -0.000581f, -0.001125f, -0.001774f, +0.004886f, + -0.008689f, +0.000065f, +0.001946f, -0.003786f, -0.006874f, -0.002328f, -0.001363f, +0.003633f, +0.001014f, -0.000006f, + +0.002865f, +0.002302f, -0.000766f, +0.002141f, -0.002082f, +0.002721f, -0.005519f, +0.003670f, +0.000502f, -0.000903f, + -0.000775f, +0.000595f, -0.002001f, +0.002184f, +0.001332f, +0.000601f, -0.001306f, -0.000475f, -0.001067f, -0.000759f, + -0.001822f, +0.001415f, +0.001466f, -0.003597f, +0.000438f, +0.002676f + }, + { + +0.002012f, -0.066554f, -0.000416f, +0.012997f, +0.004291f, -0.002261f, -0.000773f, -0.007110f, -0.014406f, -0.013393f, + +0.003120f, -0.015660f, -0.001190f, +0.012605f, +0.040200f, -0.027979f, +0.008803f, +0.012705f, -0.019021f, -0.002031f, + -0.000485f, +0.005844f, -0.008208f, +0.016954f, -0.006439f, +0.008826f, +0.007120f, +0.005033f, -0.005475f, -0.003017f, + -0.006594f, -0.001575f, +0.006369f, -0.005916f, -0.000873f, -0.002777f, +0.004487f, +0.006023f, -0.002980f, -0.008766f, + +0.002506f, -0.005556f, -0.004248f, -0.009894f, -0.002962f, +0.003926f, +0.002063f, +0.000524f, -0.001181f, -0.002419f, + +0.002349f, +0.009183f, +0.008482f, -0.009876f, +0.000793f, +0.004352f, +0.007272f, -0.006440f, +0.007000f, -0.001942f, + +0.002947f, +0.003508f, -0.005005f, -0.005004f, -0.005384f, -0.001708f, +0.005582f, -0.001795f, -0.002436f, -0.002689f, + -0.005228f, -0.001585f, +0.003124f, +0.003887f, +0.003605f, -0.001921f, -0.001258f, +0.001509f, +0.002130f, +0.003879f, + +0.003832f, -0.002191f, -0.000901f, +0.002817f, +0.000868f, -0.005609f, -0.000632f, -0.000383f, +0.001262f, +0.000151f, + +0.002109f, -0.002560f, +0.001840f, -0.001150f, -0.000770f, -0.000105f + }, + { + +0.029254f, +0.027754f, -0.019425f, +0.090676f, -0.016893f, +0.004289f, -0.002162f, +0.001295f, +0.001118f, -0.022019f, + -0.005323f, +0.018262f, +0.006971f, -0.009922f, +0.007874f, -0.015579f, +0.009070f, +0.009566f, -0.016742f, -0.008167f, + -0.012317f, -0.004177f, +0.006937f, +0.008326f, +0.009389f, -0.000619f, -0.012250f, +0.005541f, +0.003389f, -0.011298f, + -0.002895f, +0.002140f, +0.005007f, -0.014155f, +0.021114f, -0.001559f, +0.001066f, +0.001708f, +0.000311f, -0.008054f, + -0.000817f, -0.001135f, +0.004125f, +0.004693f, -0.000061f, +0.005646f, +0.010938f, +0.003195f, +0.001872f, -0.001154f, + +0.000069f, +0.001478f, -0.003549f, +0.003361f, -0.008772f, +0.001726f, -0.002147f, -0.002537f, -0.005283f, -0.005209f, + -0.002722f, +0.002964f, -0.001730f, +0.001606f, -0.001821f, -0.000199f, +0.000134f, -0.002877f, +0.002615f, -0.003824f, + -0.001819f, +0.000780f, -0.001901f, -0.002508f, +0.001993f, +0.001275f, +0.005737f, +0.001444f, +0.002990f, +0.004217f, + +0.001429f, +0.000629f, +0.001279f, -0.001468f, -0.000810f, +0.000137f, +0.001027f, +0.000908f, -0.000838f, -0.002485f, + +0.000479f, -0.000608f, +0.001066f, +0.001583f, +0.001239f, +0.001557f + }, + { + -0.001057f, +0.012739f, +0.012847f, -0.009585f, +0.000534f, +0.001536f, +0.001386f, +0.000229f, +0.000438f, -0.001475f, + -0.000573f, -0.006885f, -0.004846f, +0.040264f, -0.013611f, +0.011559f, +0.010240f, +0.002689f, +0.003357f, +0.000378f, + +0.019056f, +0.007945f, -0.014312f, -0.001653f, -0.010858f, -0.004070f, +0.011619f, +0.020308f, -0.001043f, -0.008969f, + -0.012519f, -0.010554f, +0.013465f, +0.000239f, +0.002565f, -0.006217f, +0.002049f, -0.009030f, -0.003176f, -0.000218f, + +0.004769f, +0.003319f, -0.000780f, +0.004142f, -0.008472f, -0.000943f, -0.004149f, -0.007434f, -0.001905f, -0.004891f, + +0.001092f, +0.008297f, -0.006413f, -0.001652f, -0.001455f, -0.003968f, -0.000896f, -0.003368f, -0.002667f, -0.002238f, + +0.000220f, -0.002806f, -0.005646f, +0.000275f, -0.000196f, +0.002407f, -0.002820f, -0.004014f, -0.001238f, +0.005053f, + -0.004090f, +0.002588f, +0.002056f, -0.000137f, -0.000422f, -0.001896f, +0.000387f, -0.004347f, -0.000082f, -0.003075f, + +0.001363f, +0.000786f, +0.001807f, -0.001481f, +0.001642f, -0.001717f, -0.001109f, +0.001897f, +0.000238f, +0.001084f, + -0.002623f, +0.002052f, -0.001405f, +0.001672f, -0.001442f, -0.000209f + }, + { + +0.031517f, -0.066266f, +0.009004f, +0.074749f, -0.004149f, -0.010391f, -0.005662f, +0.000541f, +0.000283f, +0.001396f, + -0.000015f, +0.001442f, +0.024575f, +0.008574f, +0.013527f, -0.024713f, -0.012402f, +0.003264f, -0.002772f, -0.002607f, + +0.006839f, +0.000396f, +0.002930f, -0.011122f, -0.007856f, +0.002920f, +0.003633f, +0.010701f, +0.013052f, +0.006234f, + -0.002552f, -0.012004f, -0.013645f, -0.005459f, +0.013389f, +0.007066f, -0.000166f, -0.003217f, -0.000758f, -0.002296f, + -0.000435f, -0.001152f, +0.000567f, +0.005421f, -0.005520f, -0.003232f, +0.002061f, -0.000833f, -0.000908f, -0.004282f, + +0.003300f, -0.006276f, +0.007871f, -0.002367f, -0.003158f, +0.001754f, -0.000399f, -0.002848f, +0.002251f, -0.005568f, + +0.003249f, +0.002236f, -0.004383f, -0.005316f, +0.002486f, -0.000727f, -0.000661f, +0.005314f, -0.000349f, -0.004118f, + -0.003059f, -0.004398f, -0.000741f, -0.001231f, +0.000498f, +0.001867f, +0.005927f, +0.000773f, -0.002367f, -0.002512f, + -0.000388f, +0.001450f, -0.004728f, -0.002332f, -0.001339f, +0.001907f, -0.001702f, +0.000911f, -0.000112f, -0.002166f, + -0.000688f, -0.000371f, -0.000790f, -0.002302f, +0.001783f, +0.000625f + }, + { + -0.004811f, -0.028878f, -0.013352f, -0.007311f, -0.002477f, -0.003553f, -0.006322f, +0.002931f, +0.001117f, -0.006923f, + +0.006692f, -0.000445f, +0.003873f, +0.018782f, -0.000745f, +0.002482f, +0.017683f, +0.023678f, +0.003196f, +0.000774f, + +0.014807f, +0.007046f, +0.004179f, +0.009513f, -0.008739f, -0.019643f, -0.016304f, -0.004075f, +0.002347f, -0.006494f, + +0.006151f, +0.011320f, -0.017281f, -0.011833f, +0.001583f, +0.001082f, -0.009324f, +0.003694f, -0.002460f, +0.008131f, + -0.004304f, -0.012440f, +0.002548f, -0.010729f, -0.013306f, +0.005648f, +0.001250f, +0.010046f, -0.003116f, -0.002496f, + +0.004564f, +0.003181f, -0.000337f, -0.004276f, -0.003062f, +0.005197f, +0.004536f, -0.001203f, -0.006561f, +0.003940f, + +0.001554f, -0.003994f, -0.003376f, +0.004525f, +0.007231f, +0.000924f, +0.000485f, +0.002585f, -0.002452f, -0.001396f, + -0.000204f, -0.002965f, +0.001843f, +0.004955f, -0.001257f, +0.002185f, -0.002145f, +0.002850f, -0.002286f, -0.004383f, + -0.000836f, -0.000828f, -0.000394f, +0.001007f, -0.004196f, -0.004149f, -0.001489f, -0.000990f, +0.000397f, -0.002266f, + -0.003633f, -0.000565f, +0.002182f, -0.001502f, -0.001229f, -0.001373f + }, + { + -0.019425f, -0.049526f, +0.024869f, +0.016044f, -0.006975f, +0.022894f, +0.054270f, -0.016857f, +0.005388f, -0.019052f, + -0.006461f, +0.001722f, -0.011218f, -0.005266f, -0.021379f, +0.005739f, -0.008059f, -0.017088f, +0.007141f, -0.000470f, + +0.027607f, -0.004919f, +0.008044f, -0.006040f, -0.003929f, -0.013962f, -0.014932f, -0.004262f, -0.003848f, +0.020753f, + -0.011753f, -0.005597f, -0.001292f, -0.000290f, +0.004218f, -0.001673f, +0.011814f, +0.004566f, +0.011011f, +0.013098f, + -0.011973f, -0.011204f, +0.004734f, -0.013739f, -0.007857f, -0.012814f, +0.002381f, +0.009728f, -0.001120f, -0.000643f, + +0.004191f, +0.019372f, -0.001403f, -0.004854f, +0.002146f, +0.000477f, +0.005671f, +0.003456f, +0.001530f, -0.000627f, + +0.000014f, -0.000011f, -0.007059f, -0.004992f, +0.002462f, -0.001421f, +0.000678f, -0.004058f, -0.002133f, -0.002380f, + -0.004527f, +0.001144f, +0.002415f, -0.003125f, +0.001171f, -0.001879f, +0.000915f, -0.004660f, -0.000743f, +0.003399f, + +0.000747f, -0.000940f, -0.001655f, +0.001130f, -0.001344f, -0.007147f, +0.000253f, +0.003369f, -0.002056f, -0.001295f, + -0.000476f, +0.001797f, -0.003101f, -0.001260f, +0.001557f, -0.002545f + }, + { + +0.006025f, -0.016496f, -0.017939f, +0.001678f, -0.005938f, -0.006168f, +0.004737f, +0.012501f, -0.027812f, -0.014675f, + -0.004921f, -0.008746f, +0.012903f, +0.005677f, -0.012658f, -0.001594f, +0.003915f, -0.017736f, +0.004734f, -0.004359f, + +0.031019f, +0.016053f, -0.001124f, +0.016129f, +0.002957f, +0.015494f, +0.008494f, -0.005324f, -0.004135f, -0.006645f, + +0.012361f, -0.003754f, -0.005025f, -0.001115f, +0.005787f, +0.004741f, +0.012811f, +0.009897f, -0.003750f, +0.001644f, + -0.004807f, -0.006442f, -0.002465f, -0.001162f, +0.006001f, +0.006943f, -0.008253f, +0.010436f, -0.000003f, -0.015620f, + +0.003217f, +0.004248f, +0.007600f, +0.003528f, +0.008976f, +0.004825f, +0.007726f, -0.002627f, +0.012034f, -0.005390f, + +0.003664f, -0.008593f, -0.002717f, +0.002631f, -0.010105f, +0.003159f, -0.005899f, -0.008392f, +0.001063f, -0.000855f, + +0.001616f, +0.000686f, -0.005322f, +0.001149f, -0.000194f, -0.003475f, +0.002112f, -0.000821f, -0.005999f, +0.001072f, + -0.000155f, -0.003390f, +0.002691f, -0.000807f, -0.002710f, -0.001841f, +0.001159f, -0.002740f, -0.001185f, -0.003349f, + +0.002826f, -0.001400f, +0.000274f, -0.000338f, +0.000412f, +0.001490f + }, + { + +0.019211f, +0.084069f, -0.006735f, -0.005734f, -0.024671f, -0.032492f, -0.026804f, +0.008141f, +0.009352f, -0.015678f, + -0.006599f, +0.005711f, +0.000970f, -0.051198f, -0.026564f, +0.000554f, +0.001789f, +0.000474f, -0.013598f, +0.002307f, + -0.016039f, -0.002888f, -0.001781f, -0.001142f, -0.015985f, -0.020282f, -0.015811f, -0.000810f, +0.007444f, -0.003814f, + +0.004130f, +0.005655f, +0.006153f, +0.005350f, +0.012289f, +0.008017f, +0.007048f, -0.000722f, -0.005801f, -0.011877f, + +0.010039f, -0.015615f, -0.004120f, +0.001802f, +0.003245f, -0.006868f, +0.019094f, -0.008437f, +0.000015f, +0.001836f, + -0.016565f, -0.006298f, +0.002279f, +0.006945f, +0.003213f, -0.010037f, +0.000635f, -0.001443f, -0.003504f, -0.005638f, + -0.000389f, -0.000494f, +0.002298f, +0.000716f, -0.001694f, +0.006623f, +0.003183f, -0.007431f, -0.000857f, -0.005501f, + +0.001240f, +0.001283f, -0.004440f, -0.004249f, -0.004023f, +0.001390f, +0.004043f, -0.006389f, +0.002538f, +0.002340f, + +0.000657f, -0.006705f, -0.001157f, -0.001432f, +0.000126f, -0.002367f, -0.000225f, +0.001443f, -0.000012f, +0.000356f, + -0.000515f, +0.000545f, -0.000625f, +0.002451f, -0.001742f, +0.001969f + }, + { + +0.002684f, -0.044492f, -0.013073f, -0.013448f, +0.020506f, -0.006198f, -0.001675f, +0.001292f, +0.003137f, -0.002599f, + -0.003819f, +0.012999f, -0.001772f, -0.059264f, +0.009404f, +0.006536f, +0.013927f, +0.003557f, -0.009716f, -0.005443f, + +0.000637f, -0.009607f, -0.018140f, +0.000935f, -0.002439f, -0.016272f, -0.020725f, +0.008314f, +0.004088f, +0.015881f, + +0.027051f, -0.016780f, -0.000362f, +0.000684f, +0.003829f, +0.001947f, +0.002178f, -0.006523f, -0.003722f, -0.019222f, + -0.012120f, -0.003638f, +0.007116f, -0.003385f, -0.000173f, -0.010708f, -0.001351f, -0.005691f, -0.004914f, -0.003345f, + +0.007057f, +0.003217f, +0.001399f, +0.003503f, +0.000350f, +0.008436f, -0.003464f, -0.003822f, -0.003120f, +0.007150f, + +0.006458f, -0.004792f, +0.005209f, -0.000635f, +0.007452f, -0.001117f, -0.001936f, -0.000101f, -0.000599f, -0.004463f, + -0.005566f, -0.000559f, +0.002686f, -0.001151f, +0.001494f, -0.002699f, +0.002970f, -0.002662f, -0.001342f, -0.002924f, + +0.003291f, -0.001037f, +0.000825f, +0.005143f, -0.002940f, -0.004097f, +0.003078f, +0.002360f, -0.000718f, +0.001655f, + +0.002729f, +0.001937f, -0.002363f, +0.000325f, -0.001258f, +0.001168f + }, + { + +0.022649f, +0.060535f, +0.002563f, +0.032887f, +0.001988f, +0.002006f, +0.013454f, +0.005954f, +0.025963f, -0.009951f, + -0.004288f, -0.018354f, +0.010590f, -0.002384f, -0.029033f, +0.011650f, +0.017969f, -0.025966f, +0.000469f, -0.005497f, + -0.011542f, -0.006075f, +0.006162f, -0.004998f, +0.018169f, -0.002113f, +0.005785f, -0.005067f, -0.004936f, -0.019666f, + -0.009704f, -0.004044f, +0.007802f, -0.002093f, -0.001006f, -0.009362f, -0.003963f, -0.008973f, -0.007093f, +0.000052f, + -0.006606f, -0.005851f, +0.012223f, +0.010460f, +0.002965f, -0.000093f, +0.001988f, -0.000141f, -0.008832f, -0.010001f, + +0.002964f, +0.009269f, -0.004976f, -0.002410f, -0.005836f, -0.000386f, +0.001219f, -0.001753f, +0.007480f, -0.004408f, + +0.008107f, +0.000894f, +0.002472f, +0.005032f, -0.002809f, +0.004550f, +0.002265f, +0.003004f, -0.001494f, +0.002452f, + -0.002528f, -0.001662f, -0.002045f, +0.002014f, -0.000635f, +0.001521f, +0.005693f, +0.003147f, -0.000643f, +0.005051f, + -0.003573f, -0.002082f, -0.001486f, -0.001376f, -0.001246f, +0.000414f, -0.000413f, +0.001030f, -0.002069f, +0.000549f, + -0.002246f, -0.001950f, -0.001475f, +0.001395f, -0.001952f, +0.002570f + }, + { + +0.004287f, +0.033056f, +0.000503f, -0.007984f, +0.001062f, -0.012019f, +0.019860f, -0.004835f, -0.015414f, +0.004100f, + -0.015729f, +0.024177f, +0.003092f, +0.044102f, +0.070753f, -0.005545f, -0.001934f, -0.010120f, -0.005591f, -0.003013f, + -0.003202f, -0.014623f, +0.006046f, +0.006905f, +0.027342f, -0.000016f, +0.018143f, -0.004190f, -0.003492f, -0.001131f, + +0.002999f, +0.005040f, +0.005195f, +0.006260f, +0.023593f, -0.009516f, -0.010427f, +0.018135f, -0.005575f, -0.000041f, + -0.001416f, +0.006472f, -0.000227f, -0.001587f, +0.003534f, -0.006867f, -0.003988f, -0.001766f, -0.012790f, -0.004834f, + +0.002702f, -0.008991f, -0.010109f, +0.003948f, +0.002456f, +0.000374f, +0.006136f, +0.003665f, +0.006020f, +0.002265f, + -0.006005f, +0.001093f, +0.000722f, -0.000266f, +0.000006f, -0.000964f, -0.006267f, -0.003256f, -0.002812f, +0.004199f, + -0.001486f, +0.002052f, -0.005312f, -0.006683f, +0.000545f, +0.002611f, +0.004069f, +0.000236f, -0.001169f, -0.003694f, + +0.001558f, +0.002369f, +0.002872f, -0.003230f, +0.000992f, -0.003140f, +0.002719f, -0.004135f, -0.002821f, +0.000208f, + +0.002351f, +0.001835f, +0.000983f, -0.000187f, +0.001164f, -0.001568f + } + }, + { + { + -0.001621f, +0.162450f, +0.028996f, -0.090243f, +0.005191f, +0.004161f, -0.007803f, -0.012649f, -0.007057f, -0.002580f, + +0.014142f, +0.023411f, +0.025799f, -0.009290f, +0.004931f, -0.003875f, +0.013635f, +0.012515f, +0.016922f, -0.009455f, + +0.001493f, -0.011978f, -0.016486f, -0.005781f, -0.009286f, +0.002990f, +0.008105f, -0.014386f, -0.008623f, +0.000575f, + -0.002386f, +0.000481f, -0.008313f, -0.006266f, -0.011420f, -0.006351f, +0.005713f, +0.003270f, +0.000754f, -0.011419f, + +0.008157f, -0.002142f, +0.011422f, +0.002615f, +0.009611f, -0.004270f, -0.003619f, +0.006091f, +0.001137f, -0.000595f, + -0.005620f, +0.008532f, -0.006573f, -0.013592f, -0.004132f, +0.000673f, -0.007700f, -0.007618f, -0.006919f, -0.006641f, + +0.000092f, -0.002107f, -0.002568f, -0.000735f, -0.002367f, +0.003029f, +0.006994f, -0.001706f, +0.000196f, +0.000430f, + +0.000087f, -0.003211f, -0.001689f, +0.000425f, -0.003587f, -0.000132f, +0.001970f, +0.002031f, -0.002262f, +0.000411f, + +0.001190f, -0.001251f, -0.001577f, +0.000649f, +0.000300f, +0.001274f, -0.003039f, -0.001789f, +0.004444f, -0.001721f, + +0.001763f, +0.001306f, -0.000122f, +0.000111f, -0.001626f, -0.002100f + }, + { + +0.001858f, +0.040910f, -0.019556f, +0.046627f, +0.011471f, +0.001195f, +0.006331f, -0.005091f, -0.001287f, +0.003231f, + -0.006750f, +0.000672f, +0.007549f, -0.007788f, +0.002257f, -0.005366f, -0.004943f, +0.010986f, +0.031569f, +0.004845f, + +0.007506f, +0.011965f, +0.008469f, -0.010505f, +0.004505f, +0.010210f, -0.011481f, -0.000887f, -0.006920f, +0.001852f, + -0.003660f, +0.024476f, -0.002130f, -0.010068f, -0.012293f, +0.003149f, +0.003444f, -0.012266f, -0.003592f, +0.008629f, + +0.007118f, -0.002910f, -0.008584f, +0.007658f, -0.007817f, -0.000561f, -0.003691f, +0.010903f, -0.003776f, -0.003763f, + +0.001124f, -0.003391f, +0.002008f, -0.011939f, +0.008661f, -0.001268f, +0.006402f, +0.001335f, -0.007301f, +0.006260f, + +0.000939f, +0.000580f, -0.006612f, -0.002135f, +0.000998f, -0.000274f, +0.001247f, +0.000337f, -0.005004f, +0.000918f, + +0.000346f, -0.000149f, +0.000701f, -0.002183f, -0.005434f, -0.001552f, -0.002093f, -0.001450f, +0.003526f, -0.001900f, + -0.000141f, +0.002061f, +0.000887f, -0.001659f, -0.000988f, -0.000638f, -0.001433f, -0.002584f, +0.001110f, -0.000431f, + +0.002029f, +0.000654f, +0.000956f, +0.000719f, +0.000520f, -0.002948f + }, + { + -0.004606f, -0.127193f, +0.015164f, +0.048330f, -0.024529f, -0.001171f, -0.011758f, -0.002759f, +0.011970f, -0.005986f, + -0.002891f, +0.024913f, -0.000429f, +0.019879f, -0.000583f, -0.008816f, +0.027743f, +0.007488f, +0.023981f, -0.005982f, + -0.014562f, -0.012290f, +0.009059f, -0.004673f, +0.004064f, +0.003247f, -0.008960f, -0.002115f, +0.004136f, +0.013891f, + -0.006258f, +0.015269f, -0.015098f, -0.005101f, -0.004736f, -0.007788f, +0.005705f, -0.012975f, +0.001088f, +0.005137f, + -0.002278f, +0.003791f, +0.006579f, +0.003441f, +0.000300f, -0.000265f, -0.002221f, -0.000819f, -0.001960f, +0.004859f, + +0.001475f, +0.002495f, -0.003986f, +0.002736f, -0.004288f, -0.001012f, -0.002514f, -0.003523f, +0.002629f, -0.005030f, + -0.001054f, -0.003730f, +0.006059f, -0.001043f, +0.000192f, +0.001258f, -0.002805f, +0.000813f, +0.000012f, +0.004834f, + -0.000053f, -0.001112f, +0.002758f, -0.003668f, +0.001156f, +0.001743f, -0.001488f, -0.005227f, -0.002616f, +0.001119f, + -0.005276f, -0.001756f, +0.001395f, +0.000171f, -0.001104f, -0.001182f, -0.002298f, -0.002268f, -0.000720f, +0.001919f, + -0.001409f, +0.000393f, +0.000684f, -0.001746f, +0.004507f, +0.000752f + }, + { + -0.021047f, +0.041384f, +0.022096f, +0.048088f, -0.013144f, -0.007120f, -0.002838f, +0.003044f, +0.006914f, -0.010367f, + -0.016118f, +0.029632f, -0.000598f, +0.007762f, +0.018480f, -0.014557f, +0.027325f, -0.002143f, -0.003382f, -0.012292f, + +0.005358f, +0.006267f, -0.004487f, +0.006951f, +0.002603f, -0.002852f, +0.003391f, +0.002627f, +0.011246f, -0.014410f, + +0.007358f, -0.003799f, +0.020005f, -0.000871f, -0.004145f, +0.011702f, +0.003054f, +0.006337f, +0.005146f, +0.002787f, + -0.012077f, -0.008382f, -0.002999f, -0.009514f, +0.002879f, +0.002991f, +0.004029f, -0.002125f, +0.004015f, -0.007369f, + -0.002704f, +0.000379f, +0.002212f, -0.002605f, +0.006048f, +0.009521f, +0.008423f, -0.009119f, +0.004854f, +0.001635f, + -0.001697f, -0.005699f, +0.000438f, -0.002054f, -0.005838f, -0.003835f, +0.001929f, +0.001724f, +0.005049f, -0.003731f, + +0.004624f, +0.000603f, +0.001304f, +0.002272f, +0.000511f, -0.000487f, -0.005702f, +0.001603f, +0.002111f, -0.002600f, + +0.002011f, -0.000240f, -0.003758f, +0.003419f, +0.001911f, +0.002004f, -0.000479f, -0.001472f, -0.000686f, -0.001369f, + -0.000815f, +0.000732f, +0.001108f, -0.000706f, -0.002293f, +0.004735f + }, + { + +0.000306f, -0.054106f, -0.003868f, +0.011829f, +0.005727f, -0.000920f, -0.002953f, -0.020696f, -0.004865f, -0.008471f, + -0.000788f, -0.017894f, -0.002526f, +0.012968f, +0.040273f, -0.018605f, -0.010956f, +0.033390f, -0.018302f, -0.009278f, + +0.005725f, +0.009359f, -0.009001f, +0.009644f, +0.013024f, -0.002897f, -0.010338f, +0.014901f, -0.004920f, -0.015973f, + +0.001764f, +0.010024f, -0.014464f, +0.009193f, -0.000504f, +0.006608f, -0.010730f, +0.015249f, -0.003892f, -0.000305f, + -0.007774f, +0.005523f, -0.014466f, -0.010981f, -0.000138f, +0.006059f, +0.006382f, -0.002716f, -0.002771f, +0.000909f, + +0.002466f, +0.006469f, +0.000404f, +0.002389f, -0.002131f, +0.007201f, +0.006052f, -0.003516f, +0.001912f, +0.001579f, + +0.002367f, +0.001842f, +0.000464f, -0.011127f, -0.002975f, -0.005407f, +0.009591f, -0.006086f, +0.003118f, -0.004451f, + -0.004950f, -0.000022f, +0.002878f, +0.005304f, +0.001622f, +0.000097f, -0.002369f, +0.002026f, +0.003045f, +0.000540f, + +0.002720f, -0.000595f, -0.001878f, +0.001602f, +0.000702f, -0.002078f, -0.003721f, -0.000037f, +0.003006f, -0.000770f, + +0.000230f, -0.001993f, +0.001116f, +0.001174f, -0.002755f, +0.001009f + }, + { + -0.021906f, +0.094301f, -0.005458f, +0.076830f, -0.001020f, -0.004624f, -0.000701f, +0.008542f, -0.020559f, -0.002195f, + -0.018626f, +0.021726f, +0.002362f, -0.007564f, -0.000195f, -0.006985f, +0.008168f, -0.005179f, -0.011438f, -0.009888f, + -0.007496f, +0.002738f, +0.008796f, +0.007983f, +0.004239f, -0.000172f, -0.007541f, +0.006918f, -0.009197f, +0.002646f, + -0.006816f, -0.002000f, +0.012588f, -0.016677f, +0.012304f, +0.006361f, -0.007053f, +0.007054f, -0.007339f, -0.002175f, + +0.003822f, -0.005010f, +0.006334f, +0.004141f, -0.002504f, +0.007449f, +0.011754f, +0.003098f, -0.003339f, -0.000927f, + +0.003415f, -0.002531f, -0.003913f, -0.001573f, -0.000888f, -0.000283f, -0.004785f, -0.003051f, -0.005807f, -0.001318f, + -0.007198f, +0.004020f, +0.001647f, -0.003364f, -0.000902f, -0.000917f, +0.002951f, -0.000024f, -0.001218f, -0.000384f, + -0.005415f, +0.001427f, -0.003921f, -0.001599f, +0.001153f, -0.000373f, +0.008749f, +0.000506f, +0.003928f, +0.001515f, + +0.002723f, +0.002518f, +0.000796f, -0.001398f, +0.000196f, -0.002326f, +0.001220f, +0.003358f, -0.001724f, -0.001721f, + +0.000911f, -0.001316f, +0.001261f, +0.001461f, +0.001506f, +0.001817f + }, + { + +0.000003f, +0.028762f, -0.017531f, -0.005844f, +0.001511f, +0.002496f, -0.001700f, +0.001469f, -0.001724f, -0.006864f, + +0.011502f, -0.019671f, +0.010710f, +0.006905f, +0.001331f, +0.013907f, -0.010835f, +0.031312f, +0.000115f, +0.012111f, + +0.020738f, +0.003579f, -0.010754f, -0.001759f, -0.016929f, +0.005090f, +0.010106f, +0.004537f, +0.005645f, -0.008013f, + -0.002622f, -0.010221f, +0.005147f, +0.003231f, -0.006105f, -0.006957f, +0.001406f, -0.006669f, +0.001835f, -0.001431f, + -0.008044f, +0.012875f, +0.006271f, -0.001864f, +0.000415f, -0.005046f, -0.009569f, -0.002449f, -0.003182f, +0.000971f, + -0.000501f, +0.006185f, -0.006479f, -0.002544f, -0.005946f, -0.003995f, +0.003199f, -0.004108f, -0.002498f, -0.006864f, + +0.004065f, -0.002749f, -0.004579f, -0.001927f, -0.000125f, +0.004682f, -0.004931f, +0.001272f, -0.005079f, +0.006162f, + -0.000759f, +0.000159f, +0.003710f, -0.003640f, -0.001222f, -0.000678f, -0.001706f, -0.003634f, -0.000072f, -0.001853f, + +0.003958f, -0.003209f, +0.003638f, +0.000118f, -0.001530f, +0.000406f, +0.000634f, +0.000484f, +0.001050f, -0.000241f, + +0.000278f, +0.000418f, -0.000832f, +0.000458f, -0.000721f, +0.000426f + }, + { + -0.038241f, +0.023335f, +0.013957f, +0.078170f, -0.001584f, -0.002832f, -0.023875f, +0.014592f, +0.002867f, -0.002355f, + -0.029893f, +0.014064f, +0.042947f, -0.009201f, +0.021317f, -0.012671f, -0.003244f, -0.003857f, +0.007424f, +0.002280f, + +0.001054f, +0.003227f, -0.001594f, -0.017380f, +0.001175f, -0.007889f, +0.019295f, +0.007923f, -0.002697f, +0.014597f, + -0.002016f, -0.016169f, +0.003056f, -0.011062f, +0.006081f, +0.004990f, -0.006346f, -0.000415f, +0.001743f, +0.001580f, + +0.000185f, -0.004685f, +0.006027f, +0.004305f, -0.002596f, -0.008729f, +0.003174f, -0.002039f, +0.006159f, -0.007321f, + +0.002987f, -0.002579f, +0.008194f, -0.002012f, -0.001447f, +0.003152f, +0.004456f, -0.009710f, +0.002848f, -0.001965f, + +0.001060f, -0.004324f, +0.000771f, -0.008409f, +0.001787f, -0.002841f, +0.007498f, +0.001801f, -0.006441f, +0.002273f, + -0.002232f, -0.004086f, -0.006516f, +0.000127f, +0.002570f, +0.002394f, +0.001524f, +0.000567f, -0.001149f, -0.000839f, + -0.001063f, +0.001157f, -0.004854f, -0.002485f, -0.001583f, +0.000050f, +0.002078f, -0.001387f, -0.001049f, +0.000842f, + -0.001328f, -0.000498f, -0.001315f, -0.003729f, +0.001604f, +0.001349f + }, + { + -0.000483f, -0.049049f, -0.016110f, -0.016029f, +0.002074f, -0.000608f, -0.004523f, +0.004898f, -0.014702f, +0.000755f, + +0.006074f, +0.007967f, +0.003313f, +0.007255f, +0.014061f, +0.041282f, -0.002343f, +0.004550f, +0.010695f, +0.013755f, + +0.005674f, +0.007490f, +0.000421f, +0.004896f, -0.003561f, -0.001867f, -0.016986f, -0.011417f, +0.010606f, -0.003018f, + -0.005705f, +0.011909f, -0.004467f, -0.005269f, -0.010904f, -0.011293f, +0.004105f, +0.004008f, -0.004578f, +0.005166f, + -0.010524f, -0.005475f, +0.000431f, -0.004428f, -0.008531f, -0.009600f, +0.010778f, +0.004900f, -0.003138f, -0.000689f, + +0.007179f, -0.000629f, +0.000159f, -0.007543f, -0.004425f, +0.007375f, +0.002069f, -0.003727f, -0.003288f, +0.008196f, + -0.001489f, -0.004835f, -0.001397f, +0.005099f, +0.006103f, -0.002048f, -0.000073f, +0.008412f, -0.004274f, -0.004309f, + -0.002119f, -0.001783f, +0.006140f, +0.000859f, -0.002273f, +0.000820f, +0.001235f, -0.001723f, -0.001226f, -0.003647f, + -0.001507f, +0.000061f, -0.001365f, +0.000377f, -0.003618f, -0.002339f, -0.002823f, -0.000672f, -0.001136f, -0.002436f, + -0.003792f, +0.002276f, -0.001780f, -0.000328f, -0.003237f, +0.000267f + }, + { + +0.020920f, -0.074749f, -0.007097f, +0.018191f, +0.029417f, +0.013617f, +0.016006f, -0.006613f, -0.002546f, -0.008558f, + -0.010498f, -0.028356f, -0.003329f, +0.010230f, +0.006304f, -0.016102f, -0.012195f, +0.006215f, -0.009212f, -0.004544f, + +0.018141f, -0.005036f, +0.012289f, -0.006236f, -0.016705f, -0.005941f, -0.018894f, +0.000331f, +0.005914f, +0.002424f, + -0.003932f, +0.006067f, -0.010682f, +0.000207f, -0.001171f, +0.014492f, -0.000430f, +0.008312f, +0.013374f, +0.006002f, + +0.002271f, -0.015080f, -0.010329f, +0.003716f, -0.006021f, -0.022352f, +0.001235f, +0.003315f, +0.004042f, +0.009310f, + -0.004549f, +0.019887f, -0.001728f, -0.006238f, -0.001060f, +0.003816f, +0.004354f, +0.003574f, +0.000027f, +0.002502f, + -0.003834f, +0.005972f, -0.004528f, -0.005048f, +0.003187f, -0.002653f, -0.003260f, -0.002294f, -0.003851f, -0.002818f, + -0.005291f, +0.004223f, -0.005453f, -0.000298f, +0.002084f, +0.002921f, -0.005337f, -0.002459f, +0.001789f, +0.002670f, + +0.003873f, -0.004092f, -0.005311f, +0.005447f, -0.001259f, -0.006960f, +0.003392f, -0.001279f, -0.002953f, -0.001321f, + -0.000426f, +0.000082f, -0.000130f, -0.002188f, -0.000356f, +0.001041f + }, + { + -0.005147f, -0.032039f, +0.023787f, -0.008159f, -0.010446f, -0.021481f, +0.026818f, +0.006348f, -0.033649f, -0.020470f, + -0.006680f, -0.003155f, +0.003621f, +0.012403f, -0.019582f, +0.012372f, +0.003384f, -0.002090f, -0.009784f, +0.003972f, + +0.017965f, +0.011870f, +0.012008f, +0.008724f, +0.016495f, +0.007898f, -0.003709f, -0.002140f, +0.003611f, -0.000421f, + -0.004194f, +0.011210f, -0.002611f, -0.022819f, +0.006721f, +0.009721f, +0.014885f, +0.014055f, -0.000017f, -0.006989f, + +0.002630f, -0.009417f, -0.010409f, +0.011187f, -0.004226f, +0.007505f, -0.007362f, +0.012559f, -0.001325f, -0.007369f, + -0.004675f, +0.006821f, +0.004922f, +0.010628f, +0.005518f, +0.012626f, +0.000101f, +0.002933f, +0.005375f, -0.001112f, + +0.003366f, -0.009651f, -0.001808f, +0.001825f, -0.003609f, +0.000408f, -0.003120f, -0.010173f, -0.001503f, +0.003304f, + -0.003187f, +0.003584f, -0.002457f, -0.001527f, -0.000821f, +0.002328f, -0.002038f, +0.001963f, -0.005180f, -0.002266f, + +0.000963f, +0.001713f, -0.004242f, -0.000224f, +0.000082f, +0.000115f, -0.001681f, -0.000542f, -0.003491f, -0.000579f, + +0.000118f, -0.000581f, +0.000155f, -0.001226f, +0.000071f, +0.001191f + }, + { + +0.004090f, +0.117100f, -0.025138f, +0.013266f, -0.009806f, -0.091481f, +0.000407f, +0.001142f, +0.011373f, -0.006010f, + -0.036822f, +0.027909f, +0.006463f, -0.049729f, -0.035198f, +0.007954f, -0.021840f, +0.000480f, +0.006007f, -0.017120f, + -0.017616f, -0.007132f, +0.000465f, +0.002442f, -0.003161f, -0.018012f, -0.011255f, -0.020407f, +0.013172f, +0.000480f, + -0.008811f, +0.008372f, +0.014993f, +0.006106f, +0.005620f, +0.011160f, -0.000371f, -0.004391f, -0.001500f, -0.006555f, + -0.000855f, -0.002426f, -0.000108f, +0.001040f, -0.004850f, +0.007955f, +0.008765f, -0.007036f, +0.007185f, -0.002483f, + -0.015284f, -0.011692f, +0.002566f, +0.008785f, -0.001464f, -0.008572f, -0.000835f, +0.006979f, -0.008589f, +0.000644f, + -0.006582f, -0.000757f, +0.002034f, +0.000890f, -0.001492f, +0.007069f, -0.003392f, -0.005753f, +0.002399f, -0.001209f, + -0.001892f, +0.000411f, -0.003200f, -0.003867f, -0.009269f, +0.004117f, +0.002030f, -0.001394f, -0.001314f, +0.004987f, + -0.003144f, -0.006037f, -0.003099f, +0.000106f, +0.000167f, -0.001754f, -0.000374f, +0.000190f, -0.000691f, +0.001757f, + -0.001178f, +0.000850f, -0.000043f, -0.001517f, +0.000715f, +0.000884f + }, + { + -0.000565f, -0.041689f, +0.000072f, -0.010948f, -0.001879f, +0.008924f, -0.012324f, +0.014806f, -0.004112f, +0.006572f, + -0.013544f, +0.013212f, -0.023682f, -0.047764f, +0.024429f, +0.013046f, +0.008095f, +0.000536f, -0.011824f, +0.012852f, + -0.018943f, -0.021696f, +0.003793f, -0.009530f, -0.015625f, -0.005097f, -0.016416f, -0.011153f, +0.029557f, +0.000602f, + +0.027165f, -0.008488f, +0.004369f, +0.000802f, +0.001768f, +0.003363f, +0.003272f, -0.008148f, -0.014852f, -0.013938f, + -0.006811f, +0.001816f, -0.003223f, +0.001791f, -0.003954f, -0.005184f, -0.003894f, -0.011624f, +0.007516f, -0.003475f, + +0.002294f, -0.005168f, +0.005528f, +0.003656f, +0.009215f, -0.006525f, +0.004552f, -0.001191f, -0.004257f, +0.013439f, + -0.000668f, -0.007171f, +0.004803f, +0.003209f, -0.001226f, +0.002343f, -0.001241f, -0.004652f, -0.000191f, +0.004549f, + -0.010408f, +0.000735f, -0.001158f, +0.002779f, +0.000102f, +0.001583f, -0.002272f, -0.000771f, -0.006067f, +0.004317f, + +0.000533f, +0.002268f, +0.000479f, +0.005197f, -0.004285f, +0.001417f, +0.000463f, +0.002020f, +0.000898f, +0.000356f, + +0.004270f, +0.000641f, -0.003937f, -0.000686f, -0.000466f, +0.001618f + }, + { + -0.008910f, +0.099587f, +0.018486f, +0.019028f, +0.003271f, -0.003537f, -0.004153f, +0.025097f, +0.015079f, -0.011875f, + -0.002078f, -0.033255f, +0.006082f, +0.016722f, -0.037524f, -0.007047f, +0.009570f, -0.000054f, +0.000374f, -0.011537f, + -0.021525f, +0.001345f, +0.006109f, -0.002605f, +0.013987f, +0.009516f, -0.005896f, +0.010131f, -0.000089f, -0.027367f, + -0.010956f, +0.002366f, -0.001656f, +0.009392f, -0.000016f, -0.005706f, -0.018971f, -0.010727f, -0.005845f, -0.001585f, + -0.011143f, +0.010652f, +0.002918f, +0.013719f, -0.004221f, +0.002704f, +0.007184f, -0.004405f, -0.014135f, -0.006688f, + -0.000134f, +0.005717f, +0.008035f, -0.005812f, -0.003383f, -0.007909f, +0.007283f, -0.002647f, +0.007446f, +0.001090f, + +0.004928f, +0.000598f, +0.001124f, +0.006181f, +0.001838f, +0.004773f, -0.002516f, +0.002519f, -0.000277f, +0.001812f, + -0.004982f, +0.000986f, +0.000535f, -0.004310f, +0.000948f, +0.003928f, +0.006035f, -0.001543f, +0.002262f, +0.004172f, + -0.001299f, -0.005299f, -0.005001f, +0.003259f, +0.000103f, +0.002190f, -0.003338f, +0.001477f, -0.000115f, +0.001512f, + -0.001053f, -0.003492f, -0.003001f, +0.002133f, -0.001201f, -0.001087f + }, + { + -0.004929f, +0.040850f, -0.000082f, -0.002953f, -0.006763f, -0.003329f, +0.012839f, -0.006356f, -0.006758f, -0.012913f, + +0.013223f, +0.005991f, +0.008074f, -0.043037f, +0.156555f, +0.014112f, -0.011740f, +0.014746f, -0.032663f, +0.003652f, + -0.016383f, -0.006249f, -0.014139f, +0.026930f, +0.004132f, +0.018202f, +0.007335f, +0.013274f, -0.009118f, +0.000851f, + +0.000270f, -0.006284f, +0.015330f, -0.002666f, +0.026809f, -0.017302f, +0.009097f, +0.011136f, -0.005310f, -0.002656f, + +0.002577f, -0.000586f, +0.008462f, -0.005829f, +0.004369f, -0.002402f, -0.002979f, +0.004326f, -0.017447f, -0.011717f, + +0.008047f, -0.012975f, -0.010795f, +0.006210f, -0.001150f, +0.000578f, +0.000736f, +0.006486f, +0.007169f, +0.003612f, + -0.005671f, +0.001394f, -0.006471f, -0.000717f, -0.001233f, -0.000180f, -0.007601f, -0.000039f, -0.003625f, +0.002820f, + +0.002017f, -0.002177f, -0.003690f, -0.005185f, -0.001395f, +0.003948f, +0.002457f, -0.000667f, -0.000241f, -0.001830f, + +0.001932f, -0.000221f, -0.001871f, +0.000247f, -0.002626f, -0.001033f, +0.001075f, -0.002900f, -0.003567f, +0.005026f, + -0.000253f, -0.000365f, +0.002186f, +0.000119f, +0.000152f, +0.000436f + } + }, + { + { + +0.005653f, +0.153462f, +0.005445f, -0.014559f, +0.054489f, +0.000535f, -0.006816f, -0.007606f, -0.007148f, -0.004984f, + +0.009748f, +0.013807f, +0.003977f, -0.011780f, +0.002605f, -0.009571f, -0.009102f, -0.001408f, +0.012386f, -0.009138f, + +0.010262f, -0.002631f, -0.000408f, +0.015094f, +0.005019f, -0.000909f, +0.006590f, -0.007783f, +0.005414f, +0.002397f, + -0.005091f, -0.007737f, -0.009141f, -0.005206f, -0.014623f, -0.006077f, +0.000122f, +0.006998f, +0.004739f, -0.009774f, + +0.003832f, -0.012913f, +0.010838f, +0.010133f, +0.015557f, +0.001512f, -0.003274f, +0.002818f, +0.005746f, +0.006170f, + -0.000370f, +0.006959f, +0.002380f, -0.001846f, -0.002372f, -0.001676f, -0.006862f, -0.000778f, -0.003389f, -0.002111f, + -0.003418f, -0.005794f, -0.005482f, -0.004965f, -0.007994f, -0.007479f, +0.002073f, -0.004261f, -0.002137f, -0.001897f, + -0.001333f, +0.000539f, -0.000824f, -0.001762f, -0.004200f, -0.001719f, -0.000042f, +0.002773f, +0.000619f, +0.004144f, + +0.003425f, +0.001472f, -0.001188f, +0.001041f, -0.000904f, +0.001538f, -0.000938f, -0.001348f, +0.004747f, -0.000710f, + +0.001388f, +0.000515f, +0.000482f, +0.001274f, -0.000882f, -0.002718f + }, + { + -0.001262f, +0.076704f, +0.016627f, -0.022326f, -0.039105f, +0.004309f, +0.004739f, -0.010929f, -0.005448f, +0.002785f, + +0.006188f, +0.006318f, +0.001228f, -0.010361f, -0.002294f, -0.010491f, -0.009862f, -0.006380f, +0.003659f, -0.018023f, + +0.018515f, +0.014889f, -0.003154f, +0.003010f, +0.018520f, +0.012623f, -0.014698f, +0.005297f, -0.000861f, +0.002597f, + -0.011067f, +0.023101f, +0.004272f, -0.005669f, +0.003270f, +0.009844f, +0.009198f, -0.003005f, -0.002548f, +0.003593f, + +0.002691f, +0.003144f, -0.006536f, -0.000275f, -0.018422f, -0.001825f, +0.003389f, +0.008190f, -0.009154f, -0.004726f, + +0.005436f, -0.000016f, +0.013869f, -0.000816f, +0.006180f, -0.004311f, +0.004769f, -0.000019f, -0.012727f, +0.001644f, + +0.007693f, +0.004945f, -0.004502f, -0.004165f, -0.003991f, +0.000554f, -0.000175f, +0.001422f, -0.006013f, -0.000134f, + +0.000433f, -0.001270f, +0.001114f, +0.001632f, -0.002225f, +0.000543f, -0.001379f, -0.001756f, +0.007380f, +0.000992f, + -0.002341f, -0.000364f, +0.000614f, -0.003385f, -0.001706f, -0.000070f, -0.001236f, -0.001014f, +0.002792f, -0.002709f, + -0.001218f, -0.000165f, +0.001645f, +0.001518f, -0.000162f, -0.003413f + }, + { + -0.000925f, -0.146347f, -0.002557f, +0.100149f, +0.010575f, -0.003899f, -0.015615f, -0.013539f, +0.001051f, -0.012088f, + +0.007966f, +0.035458f, +0.002626f, +0.012530f, -0.012340f, -0.006006f, +0.027348f, +0.007150f, +0.027288f, -0.001965f, + -0.010001f, -0.013271f, -0.000383f, -0.007471f, +0.013038f, +0.002743f, -0.015311f, -0.002737f, +0.007117f, +0.006048f, + -0.018594f, +0.022165f, -0.000631f, -0.004179f, -0.008836f, -0.002253f, +0.010740f, -0.020569f, -0.012192f, +0.004341f, + -0.000084f, -0.000345f, -0.006706f, -0.003658f, -0.005713f, +0.000542f, +0.004447f, -0.008821f, -0.015324f, -0.002988f, + -0.008121f, +0.000432f, +0.000775f, +0.001826f, -0.005396f, +0.000707f, +0.001175f, +0.002814f, +0.012252f, -0.002455f, + +0.005173f, +0.007915f, +0.008784f, -0.002898f, +0.002108f, -0.001726f, -0.002764f, +0.004567f, -0.000783f, +0.001515f, + -0.002739f, +0.000228f, +0.005084f, -0.001297f, +0.000880f, +0.001773f, +0.003341f, +0.002245f, +0.002227f, +0.004112f, + -0.001868f, -0.000261f, -0.002027f, -0.001315f, +0.000517f, +0.001050f, -0.000267f, -0.001456f, +0.000694f, +0.003508f, + +0.000332f, -0.001758f, +0.000328f, -0.001519f, +0.003808f, +0.001333f + }, + { + +0.012154f, +0.078034f, +0.009776f, +0.067721f, +0.000330f, -0.005726f, +0.003920f, +0.000745f, +0.003326f, -0.011435f, + -0.022404f, +0.006688f, -0.006452f, +0.002540f, -0.005674f, -0.034621f, +0.006252f, -0.025562f, -0.013516f, -0.008843f, + +0.014443f, +0.009118f, -0.005041f, +0.000922f, +0.009802f, -0.002692f, -0.004337f, -0.010970f, +0.010564f, +0.001111f, + +0.000722f, -0.009411f, +0.021742f, -0.005186f, -0.000565f, +0.010167f, -0.005663f, -0.005854f, -0.006848f, +0.006403f, + -0.001347f, -0.005046f, -0.005092f, -0.004177f, +0.004041f, -0.004297f, +0.004090f, +0.002400f, -0.000794f, -0.008834f, + -0.001707f, -0.002972f, +0.004279f, -0.001977f, +0.002368f, +0.003728f, +0.006503f, -0.001167f, -0.000230f, -0.003118f, + +0.008179f, +0.002669f, +0.002595f, -0.000083f, +0.003505f, +0.001542f, +0.004027f, -0.002097f, +0.003054f, -0.000769f, + +0.001134f, -0.003128f, -0.000107f, -0.001823f, -0.001492f, +0.002141f, -0.001200f, +0.000406f, -0.000748f, -0.001194f, + +0.005076f, +0.001418f, -0.003637f, +0.000654f, +0.000248f, +0.000054f, +0.000490f, +0.000802f, +0.000356f, +0.001677f, + +0.001723f, +0.001728f, +0.001541f, +0.001910f, -0.000782f, +0.002083f + }, + { + -0.002889f, -0.047213f, +0.000608f, -0.002955f, -0.003729f, +0.000024f, -0.003107f, -0.014540f, +0.003109f, +0.002920f, + +0.009519f, -0.014976f, -0.007608f, -0.002031f, +0.040465f, +0.003131f, -0.021449f, +0.014547f, -0.008148f, -0.022061f, + -0.015848f, +0.009590f, -0.018875f, -0.009090f, +0.002078f, -0.024446f, -0.006843f, +0.029895f, +0.001262f, -0.014871f, + +0.007529f, +0.018150f, -0.015666f, +0.013387f, +0.007148f, +0.004654f, -0.012512f, +0.008808f, +0.008252f, +0.016905f, + -0.012218f, -0.003775f, -0.006243f, +0.000134f, +0.002311f, +0.005078f, +0.009159f, +0.003553f, +0.004751f, +0.005618f, + -0.002844f, -0.002794f, -0.001420f, +0.011197f, -0.000715f, +0.003463f, +0.003807f, -0.001136f, +0.002755f, +0.003912f, + +0.003839f, -0.001832f, +0.003741f, -0.000058f, +0.005672f, -0.003269f, +0.003295f, -0.011519f, +0.001049f, -0.001381f, + -0.002270f, -0.003737f, +0.000492f, +0.002340f, -0.002813f, -0.001214f, -0.003598f, -0.000148f, +0.004631f, +0.000366f, + -0.000472f, -0.002001f, -0.002374f, +0.001737f, +0.000104f, -0.000514f, -0.001740f, -0.000616f, +0.002796f, +0.000018f, + -0.000270f, +0.000743f, +0.003264f, +0.001739f, -0.001727f, +0.001386f + }, + { + +0.003816f, +0.119311f, +0.002632f, +0.079758f, -0.000205f, -0.007099f, -0.001147f, +0.021231f, -0.021363f, -0.001133f, + -0.029143f, +0.005419f, +0.001641f, +0.005372f, +0.008519f, -0.014832f, +0.002788f, +0.000273f, -0.000433f, -0.008177f, + -0.007278f, +0.013145f, +0.015124f, -0.003397f, +0.003061f, +0.003063f, -0.003831f, +0.005433f, -0.010468f, +0.007584f, + +0.002874f, -0.000057f, +0.010140f, -0.006415f, +0.007883f, +0.004868f, -0.011161f, +0.000494f, -0.000723f, +0.006171f, + +0.010121f, +0.000620f, +0.003711f, -0.002697f, -0.007728f, +0.004405f, +0.005799f, +0.002857f, +0.001618f, +0.004191f, + +0.003733f, -0.012164f, -0.007855f, -0.003871f, -0.001183f, +0.000276f, +0.002634f, +0.001505f, -0.003770f, +0.004546f, + -0.001583f, +0.001377f, +0.003648f, +0.001265f, -0.003210f, -0.004101f, +0.006086f, +0.004298f, +0.000038f, +0.002013f, + -0.001267f, +0.004935f, -0.003372f, -0.003808f, +0.000286f, -0.000910f, +0.004687f, +0.000942f, +0.004540f, +0.000541f, + -0.000283f, -0.001326f, -0.002246f, -0.001348f, +0.000521f, -0.002706f, +0.001233f, +0.003575f, -0.000863f, -0.000638f, + +0.003582f, -0.001096f, +0.002026f, +0.002569f, -0.000567f, +0.000109f + }, + { + +0.001030f, +0.031687f, -0.012887f, -0.006480f, -0.002387f, +0.003060f, -0.001722f, +0.003193f, -0.000645f, -0.005701f, + +0.008041f, -0.020583f, -0.001121f, -0.012022f, -0.010891f, -0.004673f, -0.028739f, +0.025360f, +0.008115f, +0.012048f, + +0.006026f, -0.012211f, -0.006737f, -0.006194f, -0.018536f, +0.004651f, +0.012458f, -0.003334f, +0.006641f, +0.003978f, + -0.009327f, -0.008693f, -0.015136f, -0.011259f, +0.001238f, -0.005838f, +0.001711f, -0.006266f, +0.007314f, +0.003743f, + -0.001823f, +0.010774f, +0.000648f, -0.006342f, -0.003752f, +0.000655f, +0.003505f, +0.009829f, -0.000619f, -0.004019f, + -0.006629f, -0.001413f, -0.002661f, +0.002812f, -0.000227f, -0.003800f, +0.007631f, +0.002710f, -0.005680f, -0.006020f, + +0.006939f, +0.000843f, -0.001459f, -0.002817f, -0.003425f, +0.001544f, +0.000636f, +0.004886f, -0.004040f, +0.003843f, + -0.002395f, +0.002086f, +0.003044f, -0.004334f, +0.002495f, +0.001282f, +0.001748f, +0.002155f, +0.004605f, +0.001014f, + +0.005634f, -0.000603f, +0.002256f, -0.001587f, +0.000237f, +0.002887f, +0.001489f, -0.003105f, -0.003020f, -0.001054f, + -0.001031f, -0.000597f, -0.001735f, -0.000411f, -0.000368f, +0.001093f + }, + { + +0.032675f, +0.114242f, +0.020206f, +0.056081f, -0.042079f, +0.004487f, -0.053562f, -0.006712f, +0.003882f, -0.010608f, + -0.013878f, +0.008371f, +0.025684f, -0.010610f, +0.020161f, +0.004364f, +0.000477f, -0.013090f, +0.008576f, +0.015935f, + +0.000457f, -0.002417f, +0.009510f, -0.006636f, -0.009810f, -0.013072f, +0.005933f, +0.004350f, -0.002184f, +0.009994f, + -0.006157f, -0.014190f, +0.015391f, -0.008050f, +0.003314f, +0.006162f, -0.007971f, -0.004632f, +0.004856f, -0.000684f, + -0.006005f, -0.007275f, +0.005912f, +0.005591f, -0.006985f, -0.013245f, -0.002024f, -0.004784f, +0.009853f, -0.009370f, + -0.000895f, +0.002268f, +0.007376f, +0.007852f, +0.005423f, +0.001093f, +0.009038f, -0.006872f, +0.004930f, +0.003121f, + +0.003448f, -0.004114f, +0.005327f, -0.006354f, -0.000077f, -0.004231f, +0.000629f, -0.001019f, -0.006015f, +0.000913f, + +0.003283f, +0.001925f, -0.002598f, +0.002604f, +0.003980f, +0.001426f, -0.003113f, -0.003573f, -0.001477f, +0.002710f, + -0.000399f, +0.000334f, -0.000788f, +0.001370f, -0.000795f, -0.000890f, -0.000456f, -0.003142f, +0.000574f, +0.004479f, + +0.001597f, -0.001559f, -0.001497f, -0.002370f, +0.000681f, -0.002327f + }, + { + +0.004315f, -0.003593f, +0.007086f, -0.004139f, +0.012875f, +0.001260f, -0.000384f, +0.006860f, -0.010194f, +0.003364f, + -0.003895f, -0.003753f, -0.016232f, -0.000209f, +0.029327f, +0.045639f, +0.020035f, +0.017104f, +0.007118f, +0.017873f, + +0.007094f, +0.010789f, +0.004296f, +0.005124f, +0.004778f, +0.023662f, +0.002094f, -0.001531f, +0.017594f, +0.004456f, + +0.003972f, +0.020889f, -0.007905f, -0.016448f, -0.019681f, -0.020432f, +0.004758f, +0.015187f, -0.002332f, +0.006942f, + +0.006983f, +0.003503f, -0.005987f, +0.004188f, +0.004378f, -0.012779f, +0.000154f, +0.000177f, -0.000175f, +0.004118f, + +0.006302f, -0.003440f, -0.002750f, -0.002841f, -0.004144f, -0.001670f, -0.001105f, -0.002227f, +0.003331f, +0.009704f, + -0.003906f, -0.002603f, -0.002223f, -0.004050f, -0.005236f, -0.008242f, -0.005941f, +0.004382f, -0.003673f, -0.003817f, + -0.003528f, -0.000893f, +0.005665f, -0.001945f, -0.000817f, +0.000619f, +0.001282f, -0.002809f, -0.001372f, -0.002300f, + +0.000228f, -0.000038f, -0.000543f, +0.001682f, -0.002020f, +0.000123f, -0.000730f, +0.002271f, +0.002489f, +0.000829f, + -0.002130f, +0.002242f, -0.003362f, +0.000797f, -0.001294f, +0.002319f + }, + { + -0.023060f, -0.122778f, -0.003658f, +0.004043f, +0.021641f, -0.021714f, -0.019827f, +0.003033f, -0.002853f, -0.011243f, + -0.004837f, -0.017218f, +0.005583f, +0.015588f, +0.012849f, -0.008587f, -0.002332f, +0.010585f, -0.021995f, -0.027485f, + +0.007490f, -0.000436f, +0.009306f, +0.010474f, -0.013108f, +0.003756f, -0.008722f, +0.004481f, +0.008492f, -0.001517f, + +0.005542f, +0.005258f, -0.011578f, +0.001564f, -0.003766f, +0.008997f, -0.009797f, +0.001366f, +0.000628f, +0.001215f, + +0.016146f, -0.002440f, -0.004230f, +0.009696f, +0.001427f, -0.010620f, +0.001210f, -0.002314f, +0.011901f, +0.013289f, + -0.011163f, +0.006613f, -0.004424f, -0.002653f, -0.003532f, -0.001195f, +0.003034f, +0.001091f, -0.000704f, +0.003586f, + -0.010644f, +0.004895f, -0.002328f, +0.003200f, +0.007617f, +0.003630f, +0.000569f, -0.003093f, -0.003847f, +0.000506f, + -0.000118f, +0.006462f, -0.003574f, +0.001957f, -0.000100f, +0.002388f, -0.003617f, -0.000125f, +0.000766f, +0.002502f, + +0.005492f, -0.002777f, -0.002179f, +0.007059f, +0.003771f, +0.000533f, +0.007002f, -0.001210f, -0.001277f, -0.001585f, + +0.000185f, +0.000482f, +0.000812f, +0.000760f, +0.000574f, +0.002492f + }, + { + +0.002730f, -0.045426f, +0.027223f, +0.000625f, -0.004263f, +0.000508f, +0.028685f, +0.010857f, -0.013706f, -0.003346f, + +0.013627f, -0.002506f, -0.014609f, +0.002832f, -0.014285f, +0.017416f, +0.009857f, +0.017946f, +0.003487f, +0.012109f, + -0.002910f, -0.003429f, +0.024092f, +0.009379f, +0.007098f, +0.003853f, -0.012713f, -0.004723f, +0.011585f, -0.012166f, + -0.021146f, +0.005960f, -0.002649f, -0.016218f, +0.008693f, +0.010637f, +0.010509f, +0.002188f, -0.011234f, -0.016261f, + +0.003073f, -0.006297f, -0.010503f, +0.013137f, -0.006218f, +0.009727f, -0.007467f, +0.000209f, +0.002858f, +0.006740f, + +0.000533f, +0.001080f, -0.002074f, +0.006010f, -0.000940f, +0.002156f, -0.005897f, +0.001508f, +0.002453f, +0.000030f, + +0.009826f, +0.001668f, +0.001051f, +0.005327f, +0.004656f, -0.000337f, -0.001164f, -0.000823f, +0.001685f, +0.000811f, + -0.002969f, +0.006136f, -0.001094f, -0.002878f, -0.001098f, +0.000569f, -0.002404f, +0.002521f, -0.003519f, +0.002052f, + +0.001786f, +0.000943f, -0.003972f, -0.001608f, -0.001398f, +0.000349f, -0.002756f, -0.000936f, -0.002258f, +0.000808f, + -0.000417f, -0.001639f, -0.002751f, -0.003322f, +0.000064f, -0.000342f + }, + { + -0.028984f, +0.067279f, -0.018550f, +0.011753f, -0.012647f, -0.070863f, +0.026448f, -0.009335f, +0.003459f, +0.023024f, + -0.030539f, +0.020289f, +0.005708f, -0.025197f, -0.014608f, +0.027326f, -0.017609f, -0.012807f, +0.004069f, -0.010551f, + +0.001230f, +0.005984f, +0.013208f, +0.009698f, +0.008716f, -0.001283f, +0.009299f, -0.014048f, +0.010480f, -0.001200f, + -0.010134f, +0.014473f, +0.000957f, -0.004057f, -0.007459f, -0.006380f, -0.015099f, -0.006952f, +0.004939f, -0.003102f, + +0.003155f, +0.008280f, +0.003322f, -0.000443f, -0.007872f, +0.000099f, -0.003257f, -0.006883f, +0.012705f, +0.008112f, + +0.002308f, -0.009768f, -0.004696f, +0.009371f, -0.004035f, -0.006826f, +0.003575f, +0.006441f, -0.008684f, +0.010180f, + -0.002904f, -0.003257f, -0.003290f, +0.000617f, +0.000857f, +0.001668f, -0.011810f, -0.004884f, +0.007974f, +0.005519f, + +0.000077f, -0.001580f, +0.002813f, +0.002054f, -0.009061f, +0.002312f, -0.003514f, -0.001937f, -0.000729f, +0.002301f, + -0.004338f, -0.001202f, +0.001349f, -0.001803f, +0.001711f, +0.002364f, -0.002039f, -0.002263f, -0.000164f, +0.001506f, + -0.000959f, +0.002780f, -0.000220f, -0.005298f, -0.000515f, +0.000422f + }, + { + -0.002348f, -0.038040f, +0.010007f, -0.006831f, -0.008456f, +0.004252f, -0.017809f, +0.001755f, +0.001207f, +0.016872f, + -0.012807f, +0.011479f, +0.015970f, -0.011429f, +0.005246f, +0.003601f, -0.011513f, -0.012206f, -0.011608f, +0.022473f, + -0.012761f, -0.018647f, +0.024576f, +0.008120f, +0.004606f, +0.019392f, -0.004615f, -0.012596f, +0.029425f, -0.007305f, + +0.008583f, -0.003155f, +0.017512f, +0.003335f, -0.000399f, +0.008729f, +0.002932f, -0.000747f, -0.012051f, -0.000798f, + -0.001144f, -0.000147f, +0.003093f, +0.008505f, -0.000923f, -0.003930f, -0.001932f, -0.010408f, -0.003310f, -0.006850f, + +0.002799f, -0.008170f, +0.003644f, +0.002045f, +0.011519f, -0.002112f, +0.010150f, -0.003876f, -0.004903f, +0.003084f, + -0.006756f, -0.001677f, +0.002063f, -0.002886f, -0.007429f, -0.000763f, +0.000195f, -0.001130f, +0.001515f, +0.003789f, + -0.005527f, +0.002104f, -0.003298f, +0.000656f, +0.000112f, +0.004441f, -0.000792f, -0.000121f, -0.002701f, +0.006384f, + -0.000860f, +0.001684f, +0.000664f, +0.004437f, -0.006384f, -0.000649f, -0.002074f, -0.000400f, +0.000095f, -0.001416f, + +0.000417f, -0.001370f, -0.003041f, +0.000686f, +0.000582f, +0.001959f + }, + { + -0.011120f, +0.068627f, -0.030774f, -0.003368f, -0.004594f, -0.008242f, -0.007113f, +0.007600f, -0.015450f, -0.010494f, + +0.013357f, +0.011958f, +0.018773f, +0.017009f, -0.027191f, -0.028492f, -0.001016f, -0.010909f, -0.017545f, -0.010879f, + -0.020150f, -0.002297f, +0.003542f, +0.006065f, +0.019569f, -0.009175f, -0.007221f, +0.032944f, +0.014189f, -0.008399f, + +0.006518f, -0.001154f, -0.014233f, +0.007792f, +0.010755f, +0.000962f, -0.018775f, -0.003900f, +0.001197f, +0.006332f, + -0.002707f, +0.012947f, -0.003634f, +0.014192f, -0.003059f, -0.003220f, -0.002200f, -0.005430f, -0.002115f, +0.005143f, + -0.009987f, -0.008735f, +0.013475f, -0.001586f, +0.003407f, +0.000495f, +0.007326f, -0.004444f, +0.002514f, +0.003257f, + +0.002211f, -0.004678f, +0.000874f, +0.001272f, -0.002588f, +0.000988f, -0.007867f, -0.002242f, -0.001323f, -0.000273f, + -0.005731f, -0.001439f, +0.000952f, -0.001769f, -0.000971f, -0.000617f, +0.002839f, -0.000955f, -0.001680f, -0.000825f, + -0.001094f, -0.004999f, -0.004169f, +0.006547f, +0.002455f, +0.003436f, -0.003374f, +0.002175f, +0.000066f, +0.000696f, + +0.000606f, -0.002774f, -0.003461f, +0.000275f, -0.001258f, -0.000460f + }, + { + +0.004722f, +0.029270f, -0.030274f, -0.011903f, +0.003145f, -0.005419f, +0.003038f, -0.002193f, +0.001786f, -0.004300f, + +0.009378f, -0.010483f, +0.004964f, -0.069765f, +0.058587f, -0.006573f, -0.007965f, +0.030001f, -0.045509f, -0.041033f, + -0.035611f, -0.001246f, -0.018635f, +0.010593f, +0.000435f, +0.007431f, -0.022454f, +0.013552f, +0.010501f, +0.011055f, + +0.000343f, +0.003378f, +0.019417f, -0.002569f, +0.007413f, -0.015618f, +0.031248f, +0.007625f, -0.004496f, -0.000849f, + -0.012340f, -0.008407f, +0.013103f, -0.007545f, +0.001730f, +0.006124f, +0.004827f, +0.016152f, -0.000981f, -0.013672f, + -0.003546f, -0.010616f, -0.006712f, +0.006994f, +0.002103f, -0.002356f, -0.004062f, +0.001408f, +0.006259f, +0.005692f, + -0.005273f, -0.002990f, -0.002638f, +0.007750f, -0.001984f, +0.004830f, -0.006326f, -0.000801f, -0.000590f, +0.003536f, + +0.002237f, -0.002212f, +0.003854f, -0.000090f, -0.002970f, +0.000071f, +0.000469f, +0.000647f, +0.000341f, -0.002387f, + +0.000346f, -0.003777f, -0.004358f, +0.000775f, -0.002356f, -0.001466f, +0.000237f, +0.001251f, -0.001240f, +0.003571f, + -0.002567f, -0.001409f, +0.000444f, +0.001462f, +0.000098f, -0.000106f + } + }, + { + { + -0.008865f, +0.244899f, -0.049692f, +0.063579f, -0.021602f, +0.005206f, -0.005581f, +0.004943f, -0.009407f, +0.013695f, + -0.019494f, +0.019068f, -0.003066f, -0.001770f, -0.008482f, +0.001646f, -0.010412f, -0.000840f, -0.006303f, -0.000474f, + +0.014068f, -0.002836f, +0.011600f, +0.003532f, +0.014892f, -0.006046f, +0.006510f, +0.001781f, +0.008245f, -0.004423f, + -0.008851f, -0.008824f, -0.011789f, +0.005488f, -0.013723f, +0.000496f, -0.006795f, +0.008000f, -0.004666f, -0.004498f, + +0.003652f, -0.004304f, +0.011119f, +0.008931f, +0.001523f, +0.009153f, +0.000446f, -0.000283f, +0.005607f, +0.005499f, + +0.004102f, -0.000115f, +0.005183f, -0.001881f, +0.001227f, -0.000301f, -0.001283f, -0.001591f, -0.004304f, +0.001925f, + -0.010903f, -0.001239f, -0.006346f, -0.005045f, -0.006542f, -0.007484f, -0.000270f, -0.004208f, +0.000406f, -0.001883f, + -0.002823f, +0.000144f, -0.001918f, -0.001493f, -0.004867f, +0.000094f, -0.003253f, +0.003030f, +0.001255f, +0.005033f, + +0.002272f, +0.002050f, -0.001012f, +0.001884f, -0.001992f, +0.001599f, +0.000318f, -0.000604f, +0.002673f, +0.001972f, + +0.000708f, -0.000077f, +0.000746f, +0.000334f, -0.001878f, -0.000704f + }, + { + -0.001106f, +0.087551f, +0.003829f, -0.074947f, +0.011659f, +0.004618f, -0.002588f, +0.000145f, -0.003179f, -0.006758f, + +0.002509f, +0.005781f, +0.004720f, -0.005636f, -0.002458f, -0.016903f, -0.002182f, -0.001731f, -0.013437f, -0.011109f, + +0.031999f, -0.002659f, -0.006964f, +0.026276f, +0.008665f, -0.001056f, -0.015372f, +0.005982f, +0.013728f, -0.012226f, + +0.000852f, +0.010863f, +0.006341f, +0.005264f, +0.012765f, +0.009651f, +0.001230f, +0.000169f, -0.004759f, +0.000929f, + +0.002384f, +0.004459f, -0.011531f, -0.009044f, -0.000931f, -0.005794f, +0.012075f, -0.010092f, -0.003961f, -0.006621f, + +0.004589f, +0.003402f, +0.011721f, +0.000521f, +0.006640f, -0.004517f, +0.000127f, -0.000159f, -0.006880f, -0.005945f, + +0.008743f, +0.004776f, -0.000935f, -0.007182f, -0.005141f, +0.007473f, -0.007041f, +0.002194f, -0.000143f, -0.004845f, + -0.000337f, -0.002156f, +0.003467f, +0.001737f, -0.001743f, -0.001353f, +0.001386f, -0.002201f, +0.003474f, +0.003263f, + -0.000675f, -0.000726f, -0.001392f, -0.003288f, +0.000199f, -0.000801f, -0.000169f, +0.001653f, -0.000004f, -0.001159f, + -0.003600f, +0.000571f, +0.000659f, +0.000083f, -0.000612f, -0.001577f + }, + { + +0.006197f, -0.165415f, +0.002718f, +0.085092f, +0.024886f, -0.004878f, -0.007454f, -0.012407f, -0.001721f, -0.012592f, + -0.008015f, +0.054494f, +0.000671f, -0.002485f, +0.010648f, -0.022391f, +0.025278f, +0.005082f, +0.037713f, +0.000016f, + -0.016064f, -0.015281f, -0.003606f, -0.003958f, +0.008740f, +0.009906f, -0.004453f, -0.000692f, -0.001504f, -0.009441f, + -0.002377f, +0.024917f, +0.000180f, -0.003269f, -0.012833f, +0.009794f, -0.010830f, -0.008409f, -0.017082f, +0.003227f, + +0.000740f, -0.004092f, -0.002443f, -0.002532f, -0.008332f, -0.003007f, +0.006182f, -0.012636f, -0.008044f, -0.005170f, + -0.006134f, -0.005220f, +0.009289f, -0.005176f, -0.000384f, -0.008561f, +0.006623f, +0.003085f, +0.009579f, +0.002205f, + +0.008114f, +0.010874f, +0.004108f, -0.001319f, +0.003684f, -0.000938f, -0.003568f, +0.004956f, +0.000874f, -0.000697f, + -0.003511f, +0.001775f, +0.001331f, +0.000998f, -0.002515f, +0.006535f, +0.000528f, +0.001465f, +0.001744f, +0.002095f, + -0.000615f, +0.002703f, -0.003963f, +0.000602f, +0.003509f, -0.001162f, +0.001057f, -0.001586f, +0.004668f, -0.000515f, + +0.001438f, -0.002254f, +0.000696f, +0.000302f, +0.001971f, +0.001911f + }, + { + +0.003307f, +0.091974f, +0.005310f, +0.084834f, -0.013994f, -0.004085f, +0.003099f, +0.004515f, +0.004707f, -0.020335f, + -0.011926f, -0.005130f, +0.010310f, -0.007455f, -0.026487f, -0.011139f, -0.003482f, -0.028047f, -0.016050f, +0.008699f, + +0.007348f, -0.007920f, +0.003105f, +0.004544f, +0.003503f, -0.002642f, +0.015765f, -0.024041f, +0.003263f, +0.012005f, + -0.006514f, -0.001546f, +0.011662f, +0.002426f, +0.002620f, +0.001153f, -0.001246f, -0.008901f, -0.001026f, -0.001534f, + +0.003480f, -0.005630f, -0.008538f, +0.007345f, -0.003573f, +0.001604f, -0.004722f, +0.005932f, -0.001338f, +0.000325f, + -0.005158f, -0.004355f, +0.000972f, +0.004379f, -0.003047f, +0.005112f, +0.003120f, +0.010335f, -0.012325f, -0.000622f, + +0.007778f, +0.001362f, -0.000802f, +0.002910f, +0.007039f, +0.003039f, -0.001105f, +0.002060f, -0.000936f, +0.000270f, + -0.000558f, -0.000617f, -0.002073f, -0.005086f, -0.000156f, +0.001523f, +0.000331f, +0.003570f, -0.004207f, +0.000575f, + +0.005247f, -0.001240f, +0.000098f, -0.002549f, +0.000932f, -0.001355f, +0.002312f, +0.002913f, -0.001368f, +0.000288f, + +0.001959f, +0.003401f, -0.001795f, +0.002474f, +0.001246f, -0.000440f + }, + { + +0.003789f, -0.035437f, -0.019203f, -0.013534f, +0.005066f, +0.000669f, -0.006915f, -0.002408f, -0.000772f, +0.007220f, + -0.001209f, -0.007082f, -0.001016f, -0.003520f, +0.056862f, -0.012211f, +0.008183f, -0.044019f, +0.008243f, -0.007892f, + -0.025029f, -0.012673f, -0.002626f, -0.005314f, -0.000739f, -0.025014f, +0.010264f, +0.019172f, +0.001059f, -0.002670f, + +0.012408f, +0.005353f, -0.010267f, +0.008886f, +0.004427f, -0.007622f, +0.007833f, -0.013455f, +0.012212f, +0.013549f, + -0.000229f, -0.013135f, -0.000258f, +0.002437f, -0.004123f, +0.006607f, +0.014103f, +0.002103f, +0.005428f, +0.005525f, + -0.008513f, +0.006894f, -0.003209f, +0.008126f, +0.000191f, -0.001196f, +0.003661f, +0.002632f, +0.002375f, +0.003846f, + +0.002206f, +0.000878f, +0.000394f, +0.004622f, +0.001164f, +0.000692f, -0.002202f, -0.007933f, +0.001625f, -0.004341f, + +0.002487f, -0.001490f, -0.004351f, -0.000730f, -0.001262f, -0.001424f, -0.002033f, -0.002331f, +0.001618f, +0.004347f, + -0.001511f, -0.002787f, -0.000372f, -0.001555f, +0.001249f, -0.001753f, +0.001421f, +0.001365f, -0.000665f, +0.000936f, + +0.000149f, +0.001690f, +0.003668f, -0.000193f, -0.000008f, -0.000511f + }, + { + +0.019858f, +0.091926f, -0.005284f, +0.082758f, +0.009552f, -0.002537f, -0.000778f, -0.002917f, +0.012909f, -0.007059f, + -0.003082f, -0.010489f, -0.014375f, +0.019932f, +0.003281f, -0.028909f, +0.002277f, +0.025518f, -0.000370f, -0.015436f, + -0.010048f, +0.010356f, +0.009106f, +0.008862f, +0.005763f, -0.004186f, +0.002444f, -0.015932f, +0.004681f, +0.008729f, + +0.006489f, +0.008900f, +0.000502f, +0.002478f, +0.000183f, +0.004957f, -0.000628f, -0.016111f, +0.004548f, +0.013094f, + +0.003629f, +0.004718f, +0.001801f, -0.006680f, -0.003544f, +0.009603f, +0.002570f, +0.003251f, +0.002338f, +0.000103f, + +0.002317f, -0.010657f, -0.005100f, -0.006316f, +0.002028f, -0.002586f, +0.005801f, -0.000382f, +0.000840f, +0.001100f, + +0.005505f, -0.005072f, +0.002421f, +0.005348f, -0.004847f, -0.001428f, +0.003883f, +0.005009f, -0.000687f, +0.000640f, + -0.002056f, +0.005057f, -0.001337f, -0.000715f, -0.001719f, +0.002132f, +0.000411f, +0.004103f, +0.002668f, +0.000125f, + -0.000600f, -0.000654f, -0.002446f, -0.002167f, -0.000992f, +0.000166f, -0.000468f, +0.001744f, +0.000933f, -0.001562f, + +0.004214f, +0.000302f, +0.001868f, +0.001599f, -0.000842f, -0.000874f + }, + { + +0.000109f, -0.002787f, +0.025230f, -0.003427f, -0.002603f, -0.003585f, +0.000083f, +0.003304f, +0.000460f, +0.005438f, + -0.011956f, -0.007893f, +0.003379f, -0.017615f, -0.009242f, -0.019339f, -0.026486f, +0.026168f, +0.010055f, +0.014283f, + +0.004983f, -0.029664f, -0.004925f, -0.027827f, +0.008058f, -0.002886f, +0.013562f, +0.018320f, -0.013486f, +0.015072f, + -0.016495f, -0.006916f, -0.014437f, -0.007531f, +0.008405f, -0.015034f, -0.004415f, +0.001263f, +0.005408f, +0.005333f, + +0.004801f, -0.004123f, -0.008403f, +0.010167f, -0.007135f, -0.003539f, +0.011190f, +0.002460f, +0.003047f, -0.001752f, + -0.003545f, -0.008665f, +0.005303f, +0.001840f, +0.001868f, -0.004981f, +0.004576f, +0.004096f, -0.007649f, +0.000434f, + +0.001350f, +0.007781f, +0.000941f, -0.003946f, -0.002507f, -0.002038f, +0.003860f, -0.001888f, +0.006016f, -0.002171f, + -0.001456f, +0.003671f, -0.003960f, -0.000406f, +0.004617f, -0.000556f, +0.005394f, +0.001616f, +0.002873f, +0.000282f, + +0.006268f, +0.002382f, -0.002052f, +0.000467f, +0.002628f, +0.001044f, -0.000498f, -0.000942f, -0.002908f, +0.000364f, + -0.004350f, -0.000110f, -0.002289f, +0.001289f, -0.001284f, +0.002269f + }, + { + -0.012075f, +0.192729f, -0.023901f, +0.026001f, -0.004646f, +0.007798f, -0.033365f, -0.021575f, -0.007075f, -0.023370f, + +0.035131f, +0.001586f, -0.012406f, +0.018810f, -0.004223f, -0.006290f, +0.003913f, +0.013464f, +0.003199f, +0.008669f, + +0.000498f, -0.011095f, +0.004614f, +0.009688f, -0.024086f, +0.009082f, -0.001264f, +0.002237f, +0.003846f, -0.001399f, + -0.008761f, -0.006105f, +0.009267f, -0.004811f, +0.004487f, +0.000093f, +0.002675f, -0.010049f, +0.006671f, -0.000924f, + -0.007286f, -0.008058f, -0.001703f, +0.008989f, -0.012628f, -0.000800f, -0.006824f, -0.003042f, -0.002315f, -0.003174f, + +0.000963f, +0.006328f, -0.003256f, +0.009399f, +0.009720f, -0.001889f, +0.008336f, +0.000987f, +0.002650f, +0.003297f, + +0.003253f, +0.000294f, -0.001697f, +0.001679f, -0.001338f, -0.005180f, -0.000451f, -0.002366f, -0.002421f, -0.005635f, + +0.005721f, +0.002655f, -0.000721f, +0.001454f, +0.002343f, +0.001357f, -0.000806f, -0.004363f, -0.000136f, +0.000720f, + +0.002858f, -0.000652f, +0.000542f, -0.000836f, -0.000268f, -0.000411f, -0.003076f, -0.001532f, +0.001641f, +0.003897f, + +0.001984f, -0.004935f, +0.000879f, -0.000486f, +0.001885f, -0.002308f + }, + { + -0.000265f, +0.039532f, -0.011796f, +0.010556f, +0.003545f, -0.003101f, +0.003601f, -0.000330f, +0.000520f, -0.000812f, + +0.001486f, -0.006583f, -0.018269f, -0.004382f, +0.032286f, +0.023785f, +0.029827f, +0.012079f, +0.004676f, +0.027088f, + +0.005794f, +0.000686f, +0.012758f, -0.001932f, +0.011212f, +0.018291f, +0.013470f, +0.000099f, +0.006168f, -0.010356f, + +0.008492f, +0.028967f, -0.008957f, -0.017425f, -0.005007f, -0.030775f, +0.005451f, +0.010819f, -0.003174f, +0.003459f, + +0.014413f, +0.011624f, -0.011293f, +0.004579f, -0.007122f, +0.007124f, -0.009636f, -0.003912f, +0.000820f, +0.010331f, + +0.004382f, -0.001024f, -0.009366f, +0.004989f, -0.004629f, -0.001661f, -0.000370f, -0.001108f, +0.008373f, -0.002829f, + -0.000183f, +0.002740f, -0.004814f, -0.006145f, -0.006070f, -0.009796f, -0.004581f, -0.000752f, -0.003268f, +0.000701f, + -0.002682f, -0.003321f, +0.006676f, -0.002979f, +0.002870f, +0.001967f, -0.000426f, -0.002695f, +0.001046f, -0.002416f, + -0.000191f, +0.001817f, -0.001853f, -0.000013f, +0.000297f, +0.001190f, -0.001356f, +0.003648f, +0.002210f, -0.001912f, + -0.000423f, +0.001554f, -0.002173f, -0.000330f, +0.000575f, +0.001359f + }, + { + +0.023857f, -0.180512f, +0.000256f, -0.007051f, -0.000617f, -0.017720f, -0.019749f, +0.051436f, -0.011394f, -0.039261f, + -0.002179f, +0.000279f, +0.010477f, +0.009571f, -0.003508f, +0.005095f, +0.004465f, -0.011720f, -0.021614f, -0.008442f, + +0.005973f, -0.008118f, +0.001638f, +0.029966f, -0.012736f, +0.001097f, -0.004343f, -0.001022f, +0.015524f, -0.008603f, + +0.010884f, -0.002403f, -0.010258f, -0.003245f, +0.008104f, -0.003299f, -0.002228f, -0.004221f, +0.003214f, -0.001816f, + +0.008003f, -0.001289f, -0.003672f, +0.006911f, +0.002215f, -0.005583f, +0.001850f, +0.001220f, +0.009943f, +0.001541f, + +0.005325f, -0.011947f, +0.002017f, +0.006056f, -0.000741f, -0.012998f, +0.006635f, +0.005812f, -0.008424f, +0.006699f, + -0.013674f, +0.009469f, -0.001270f, +0.004617f, -0.002210f, +0.014024f, +0.000210f, -0.000289f, -0.006225f, +0.000793f, + +0.001411f, +0.004865f, +0.001951f, +0.000602f, -0.004403f, +0.001820f, +0.000433f, -0.000761f, -0.000393f, -0.000268f, + +0.006433f, +0.000297f, -0.000510f, +0.003577f, +0.004039f, +0.004676f, +0.003916f, -0.001480f, +0.001036f, -0.002755f, + +0.000705f, +0.002082f, -0.000226f, +0.000542f, +0.001476f, -0.000402f + }, + { + -0.001917f, -0.068708f, +0.040468f, +0.003785f, -0.000774f, +0.044150f, -0.019992f, +0.000948f, +0.021056f, -0.002084f, + +0.008594f, +0.002914f, -0.037995f, -0.003190f, +0.016850f, +0.006472f, +0.008886f, +0.024521f, +0.011492f, +0.005631f, + -0.013594f, +0.003359f, +0.012222f, +0.014012f, +0.018104f, -0.008760f, -0.011398f, +0.001807f, +0.006258f, -0.009670f, + -0.012935f, -0.000140f, -0.004488f, -0.009087f, +0.020937f, -0.002432f, +0.011314f, -0.000942f, -0.008743f, -0.009447f, + +0.001926f, -0.006111f, -0.007633f, +0.002260f, +0.003407f, -0.002878f, +0.004892f, -0.012475f, +0.004789f, +0.010283f, + +0.002042f, -0.005016f, +0.001511f, +0.002049f, +0.001697f, -0.008166f, +0.005742f, +0.000360f, -0.003351f, +0.001366f, + +0.000687f, +0.009339f, +0.004099f, +0.004330f, +0.004824f, -0.003457f, -0.003627f, +0.006056f, -0.000121f, -0.001152f, + +0.001187f, +0.001362f, -0.000797f, -0.003367f, -0.000719f, -0.000997f, -0.000773f, +0.000313f, -0.004088f, +0.004140f, + +0.001524f, -0.000450f, -0.000040f, -0.003010f, -0.000235f, -0.000549f, -0.003799f, -0.003270f, +0.000732f, +0.001370f, + -0.002255f, +0.001367f, -0.006053f, -0.000135f, -0.000784f, -0.000350f + }, + { + +0.038038f, -0.067275f, +0.051336f, -0.006194f, -0.033705f, +0.017388f, -0.032276f, -0.010037f, +0.000148f, +0.045453f, + -0.022368f, +0.003181f, -0.015614f, +0.013562f, -0.018059f, +0.010653f, +0.018542f, -0.030003f, +0.000670f, -0.013268f, + +0.024996f, -0.006258f, +0.019409f, +0.006954f, +0.001548f, +0.007442f, +0.008393f, -0.006646f, -0.001693f, +0.023356f, + -0.019733f, -0.003479f, +0.008659f, +0.003415f, -0.017589f, -0.003705f, -0.014364f, -0.001107f, +0.001614f, -0.009960f, + +0.006705f, +0.012908f, -0.001562f, -0.002870f, -0.002384f, -0.006597f, -0.013329f, -0.000572f, +0.012533f, +0.001885f, + +0.010778f, +0.001273f, -0.016598f, +0.007118f, -0.002158f, +0.000013f, +0.000833f, +0.006420f, -0.003219f, +0.002590f, + +0.001973f, -0.001210f, -0.009562f, +0.000871f, +0.007102f, +0.000711f, -0.011504f, -0.002109f, +0.003693f, +0.005579f, + +0.002803f, -0.002850f, +0.000587f, +0.001846f, -0.004101f, -0.001678f, -0.000375f, -0.001395f, -0.003619f, +0.002510f, + -0.002687f, -0.000307f, +0.005036f, -0.004068f, +0.000937f, +0.005238f, -0.004839f, -0.003296f, +0.001980f, +0.000379f, + +0.001717f, -0.000740f, +0.000772f, -0.003397f, -0.002599f, +0.000360f + }, + { + +0.003528f, -0.050568f, +0.019947f, -0.012200f, -0.005321f, -0.000349f, -0.017194f, -0.002359f, +0.001321f, +0.014310f, + +0.007980f, -0.002926f, -0.016663f, +0.026225f, -0.020883f, +0.012060f, -0.010325f, -0.016600f, -0.010244f, +0.019686f, + +0.002480f, +0.000860f, -0.012499f, +0.019190f, +0.012112f, +0.017277f, +0.010981f, -0.013304f, +0.018391f, +0.011562f, + -0.013036f, +0.010915f, -0.001502f, +0.005236f, +0.001283f, +0.007319f, +0.007134f, +0.009545f, -0.018123f, -0.000899f, + +0.001102f, +0.001349f, +0.001702f, +0.004662f, +0.002278f, -0.005797f, -0.007353f, +0.003054f, -0.013967f, -0.004637f, + -0.001672f, -0.000086f, +0.002187f, +0.002024f, +0.006128f, +0.001534f, +0.003833f, -0.002967f, -0.001860f, -0.002699f, + -0.000535f, -0.001635f, -0.005545f, +0.001465f, -0.000493f, -0.007513f, +0.002455f, +0.002466f, +0.003332f, -0.005722f, + -0.000424f, +0.000386f, +0.001730f, -0.004167f, +0.001051f, +0.002397f, +0.000243f, -0.000461f, +0.000933f, +0.003881f, + +0.000119f, -0.002221f, +0.003136f, +0.000697f, -0.005555f, -0.002414f, -0.000258f, -0.003060f, -0.000085f, +0.000081f, + -0.004142f, +0.001024f, -0.001024f, +0.001342f, +0.002303f, -0.002600f + }, + { + +0.028306f, +0.013410f, -0.036467f, -0.008319f, +0.003617f, +0.014364f, -0.017728f, +0.002467f, -0.024988f, +0.012224f, + -0.001979f, +0.011134f, +0.022657f, -0.010126f, +0.024401f, -0.010342f, -0.018144f, -0.013122f, -0.004863f, -0.004053f, + -0.013385f, -0.012939f, -0.001323f, +0.014760f, -0.004124f, -0.008877f, +0.012700f, +0.011135f, +0.016208f, +0.014697f, + +0.000529f, -0.012094f, -0.014772f, +0.011717f, +0.023587f, -0.021398f, -0.010980f, +0.009519f, +0.004818f, -0.005373f, + +0.011356f, +0.003029f, +0.004574f, +0.001435f, +0.008686f, +0.001948f, -0.009390f, -0.015808f, +0.008467f, +0.001362f, + -0.000972f, -0.017454f, +0.005226f, +0.003403f, +0.005760f, +0.008533f, -0.006279f, +0.005042f, -0.007032f, +0.005808f, + -0.001360f, -0.000852f, +0.000732f, -0.000751f, +0.001596f, -0.004574f, -0.003915f, -0.003725f, +0.002811f, -0.002870f, + -0.004284f, -0.004885f, +0.001225f, +0.003766f, -0.002185f, -0.002742f, -0.001212f, +0.000128f, -0.001557f, -0.001107f, + +0.000895f, -0.003693f, -0.002333f, -0.000183f, +0.004300f, +0.003026f, -0.001576f, +0.001217f, -0.000473f, +0.002275f, + -0.002210f, -0.000627f, -0.002175f, -0.001232f, +0.000236f, +0.001091f + }, + { + -0.006488f, +0.022740f, -0.011415f, -0.020696f, +0.015480f, -0.002989f, -0.005051f, +0.003084f, -0.005158f, +0.006667f, + -0.011805f, +0.001328f, +0.000553f, +0.023417f, -0.093959f, +0.025472f, -0.011846f, +0.016372f, -0.040513f, -0.042545f, + -0.015631f, -0.019237f, -0.005051f, +0.000013f, +0.006025f, +0.006128f, -0.024206f, +0.013118f, +0.009600f, +0.022241f, + -0.010659f, +0.016112f, +0.009911f, +0.007385f, -0.007568f, -0.014220f, +0.027811f, +0.008324f, -0.007397f, -0.001148f, + -0.010347f, -0.002848f, +0.001598f, -0.003155f, +0.003260f, +0.003706f, +0.000150f, +0.017229f, +0.000183f, -0.003196f, + -0.016902f, -0.006696f, +0.005595f, +0.002864f, -0.000676f, -0.007327f, +0.003432f, +0.001445f, +0.001510f, +0.004755f, + -0.001156f, -0.009162f, +0.001593f, +0.009489f, -0.000205f, +0.003962f, -0.004737f, +0.000656f, -0.004796f, +0.001674f, + +0.003265f, -0.000854f, +0.005685f, +0.001415f, -0.003385f, -0.002631f, -0.000386f, +0.001789f, -0.000629f, -0.001714f, + +0.001629f, -0.004177f, -0.003444f, +0.000228f, -0.000692f, +0.000057f, -0.003676f, +0.004628f, -0.001492f, +0.000228f, + -0.000573f, -0.000791f, -0.000214f, +0.003196f, -0.002381f, -0.001146f + } + }, + { + { + +0.015788f, +0.362477f, +0.033647f, +0.125250f, +0.017881f, +0.016180f, +0.001045f, +0.005997f, -0.014545f, +0.012537f, + -0.012789f, +0.030971f, +0.010732f, +0.010172f, -0.004875f, +0.006045f, +0.011707f, +0.008767f, -0.009154f, -0.007478f, + +0.008401f, +0.002425f, +0.018254f, -0.000391f, +0.017201f, -0.011760f, +0.006390f, +0.016664f, +0.013061f, -0.020738f, + -0.016699f, -0.003474f, -0.010001f, +0.011949f, -0.004507f, +0.004162f, -0.017997f, -0.003002f, -0.002556f, -0.004363f, + +0.013470f, +0.012003f, +0.005157f, -0.009290f, -0.008675f, +0.010960f, +0.001566f, +0.001177f, +0.005210f, +0.000910f, + +0.001217f, +0.000373f, +0.002918f, -0.004318f, +0.006066f, +0.005351f, +0.002930f, +0.004472f, +0.001240f, +0.001172f, + -0.012413f, +0.003706f, -0.000794f, +0.000843f, -0.001280f, -0.002985f, +0.002193f, -0.001528f, -0.001391f, -0.002786f, + -0.005978f, -0.005303f, -0.002510f, -0.002089f, -0.003943f, +0.000805f, -0.006156f, +0.000531f, -0.000805f, +0.000346f, + -0.001525f, +0.000884f, -0.000566f, +0.001214f, -0.000863f, +0.001651f, +0.000266f, +0.000209f, +0.000105f, -0.000123f, + -0.000258f, -0.000229f, +0.001372f, -0.000037f, -0.000789f, +0.001763f + }, + { + +0.002643f, +0.062929f, -0.019797f, -0.041152f, +0.037950f, +0.002824f, -0.006194f, +0.009986f, -0.000916f, -0.007269f, + -0.000531f, +0.003651f, +0.008367f, +0.007140f, +0.000587f, +0.005287f, +0.024009f, -0.007669f, -0.006982f, -0.000447f, + +0.008338f, -0.012895f, +0.011504f, +0.028998f, +0.007893f, +0.001099f, -0.015766f, -0.006728f, +0.003068f, +0.001468f, + +0.014143f, +0.008405f, -0.008205f, +0.004460f, +0.021210f, -0.001656f, -0.010949f, -0.003229f, -0.006679f, +0.006038f, + +0.000391f, -0.003012f, -0.007873f, -0.004454f, -0.003049f, -0.008713f, +0.014735f, -0.003928f, +0.002135f, -0.011164f, + -0.000876f, -0.001071f, -0.001355f, -0.009998f, +0.008347f, -0.006680f, -0.003496f, +0.000222f, -0.002499f, -0.010356f, + -0.001395f, +0.001653f, +0.001388f, -0.002135f, -0.000208f, +0.009092f, -0.005528f, +0.003240f, +0.005784f, -0.002832f, + -0.004297f, -0.004756f, +0.003095f, -0.000513f, -0.004776f, -0.000770f, +0.001795f, -0.005437f, -0.000640f, +0.000849f, + -0.001534f, -0.000786f, +0.000635f, -0.001110f, +0.001493f, -0.001488f, +0.001027f, +0.005935f, -0.001469f, -0.002309f, + -0.001870f, +0.000219f, -0.000227f, -0.002006f, -0.001298f, -0.000812f + }, + { + -0.009370f, -0.149478f, +0.029580f, +0.005053f, -0.031783f, +0.000764f, +0.005599f, -0.003482f, +0.010977f, -0.001488f, + -0.003597f, +0.061107f, -0.023270f, -0.016975f, +0.007054f, -0.029208f, +0.021053f, -0.002311f, +0.024663f, -0.005724f, + +0.000521f, -0.002674f, -0.003166f, -0.013705f, -0.001959f, +0.010725f, +0.003336f, +0.010916f, +0.004822f, -0.002670f, + -0.003198f, +0.006359f, -0.003468f, -0.009318f, -0.004115f, +0.017528f, -0.016077f, -0.001128f, -0.015018f, +0.004417f, + +0.006845f, -0.004447f, -0.001782f, +0.005332f, -0.005617f, -0.002385f, +0.010193f, -0.000847f, +0.006911f, +0.006732f, + +0.003131f, -0.004557f, +0.009294f, -0.008235f, -0.000032f, -0.007574f, +0.005156f, -0.000570f, +0.005652f, +0.001061f, + +0.006178f, +0.002956f, -0.003756f, +0.003936f, +0.009819f, -0.001421f, -0.005742f, +0.004283f, +0.001722f, +0.001292f, + -0.002658f, -0.002176f, -0.001853f, +0.004417f, +0.000305f, +0.003821f, -0.004175f, -0.001381f, -0.000841f, -0.001062f, + -0.002489f, +0.002844f, +0.000627f, +0.002576f, +0.002861f, -0.000472f, +0.000844f, -0.002831f, +0.001553f, -0.004171f, + +0.000881f, -0.000878f, +0.000065f, +0.000354f, +0.001483f, +0.002051f + }, + { + -0.019603f, +0.046388f, -0.016120f, +0.099811f, +0.007511f, -0.005312f, +0.002207f, +0.004687f, +0.013456f, +0.000941f, + -0.027718f, -0.019717f, +0.014011f, -0.003833f, -0.011282f, +0.025359f, +0.022935f, +0.003020f, +0.022965f, +0.015184f, + +0.006282f, +0.009028f, +0.004023f, +0.003474f, +0.017437f, -0.006042f, -0.004570f, -0.024191f, -0.001516f, +0.000607f, + -0.003311f, +0.005048f, +0.001291f, -0.002324f, +0.015572f, +0.009521f, +0.003614f, +0.003296f, +0.015481f, +0.009278f, + +0.009728f, +0.001449f, -0.007151f, +0.002132f, -0.003088f, +0.000640f, -0.013886f, -0.003164f, -0.004725f, +0.001211f, + -0.004394f, -0.000363f, +0.000246f, +0.006634f, -0.000428f, +0.003589f, +0.001632f, +0.006495f, -0.012906f, -0.001892f, + +0.000948f, -0.001994f, -0.006097f, -0.003529f, +0.001270f, +0.004732f, -0.005055f, +0.000062f, +0.000250f, -0.000120f, + -0.002703f, +0.001329f, +0.000994f, -0.004958f, +0.001383f, +0.000487f, -0.002802f, +0.003568f, -0.001857f, +0.001964f, + +0.000337f, -0.004264f, +0.001783f, -0.002558f, -0.000195f, -0.002721f, -0.000679f, +0.000856f, -0.001535f, -0.001766f, + +0.000081f, +0.003185f, -0.002580f, -0.002261f, -0.002599f, -0.001382f + }, + { + -0.003641f, -0.005784f, +0.016461f, -0.016614f, +0.001901f, +0.001870f, -0.003531f, +0.004507f, -0.000669f, +0.004173f, + +0.003935f, +0.009435f, +0.001751f, -0.011363f, +0.085084f, -0.004414f, +0.000636f, -0.059453f, -0.014961f, -0.000999f, + -0.008466f, -0.002509f, +0.002563f, +0.004196f, +0.007894f, -0.012201f, +0.027518f, +0.017545f, +0.013210f, +0.020577f, + +0.013451f, -0.003514f, -0.008650f, +0.002787f, -0.009457f, -0.017786f, +0.007915f, -0.013340f, +0.006278f, -0.001210f, + -0.006138f, -0.012162f, +0.000285f, +0.003664f, -0.009574f, -0.001457f, +0.010472f, -0.002847f, -0.003777f, -0.001124f, + -0.005473f, +0.012584f, -0.001864f, +0.004481f, -0.001290f, -0.000574f, +0.000798f, +0.007218f, +0.009241f, +0.003753f, + +0.000889f, +0.002803f, -0.001397f, -0.002240f, -0.004627f, +0.000722f, -0.002446f, -0.008184f, +0.000886f, -0.003347f, + +0.006489f, +0.005254f, -0.002379f, -0.001564f, +0.000450f, +0.000547f, +0.001303f, -0.002555f, -0.002817f, -0.001013f, + -0.003162f, -0.002667f, +0.000595f, -0.000167f, +0.002915f, -0.002163f, +0.000541f, +0.001779f, -0.000668f, +0.001119f, + +0.001388f, +0.000431f, +0.000865f, -0.000416f, +0.001746f, -0.000832f + }, + { + -0.041554f, +0.018631f, +0.016345f, +0.089053f, -0.002506f, +0.000403f, +0.019938f, +0.016218f, +0.032021f, -0.010967f, + -0.005318f, -0.001056f, -0.017984f, +0.000679f, +0.005731f, -0.007857f, +0.004730f, +0.018059f, -0.004415f, -0.013813f, + -0.007463f, +0.000693f, -0.006153f, -0.002955f, +0.003423f, +0.006060f, +0.003301f, -0.011530f, +0.019281f, +0.013509f, + +0.004713f, +0.008855f, +0.000144f, -0.001560f, -0.007709f, +0.001748f, +0.012463f, -0.007447f, -0.001801f, +0.001763f, + -0.007514f, -0.001526f, +0.004466f, +0.000196f, +0.005250f, +0.016162f, +0.000656f, +0.005379f, +0.008163f, -0.004754f, + +0.000063f, -0.000608f, +0.000527f, -0.008512f, -0.002040f, -0.000531f, +0.007657f, +0.001081f, -0.000919f, +0.000517f, + +0.002901f, -0.007666f, -0.001685f, -0.000422f, -0.003174f, -0.002776f, -0.005826f, -0.000552f, -0.003140f, -0.000362f, + -0.002686f, +0.002863f, -0.000519f, +0.002046f, -0.000334f, +0.002247f, -0.002850f, +0.000683f, +0.002034f, +0.001154f, + +0.001053f, +0.001723f, +0.000124f, -0.000771f, -0.002150f, -0.000490f, -0.001023f, +0.000262f, +0.001964f, -0.000137f, + +0.002064f, -0.001439f, +0.001401f, +0.000660f, -0.000919f, -0.000942f + }, + { + -0.000665f, -0.033220f, +0.004995f, -0.000343f, +0.000824f, -0.005825f, +0.001932f, +0.010091f, +0.007603f, +0.004018f, + -0.012219f, +0.003882f, +0.011526f, -0.001234f, +0.010898f, -0.014338f, -0.030235f, +0.007512f, -0.012059f, -0.002315f, + +0.011281f, -0.027528f, -0.017940f, -0.016482f, +0.037514f, +0.005215f, +0.003308f, +0.015405f, -0.000523f, +0.015246f, + -0.015064f, +0.004602f, +0.002206f, +0.005482f, +0.013720f, -0.001163f, -0.002232f, +0.003672f, +0.008480f, +0.002966f, + -0.004844f, -0.004694f, -0.008751f, +0.008911f, -0.003663f, -0.003301f, +0.001690f, +0.002862f, +0.004721f, +0.001937f, + +0.008226f, -0.008592f, +0.003709f, +0.009044f, +0.007057f, -0.004488f, -0.001290f, +0.004353f, -0.004144f, +0.002130f, + +0.002667f, +0.007407f, +0.002674f, +0.003820f, +0.004512f, +0.000719f, +0.003021f, -0.002314f, +0.008706f, -0.000741f, + -0.000881f, -0.000241f, -0.007904f, -0.003633f, +0.001126f, -0.003022f, +0.001991f, -0.002279f, +0.000899f, +0.000025f, + +0.002132f, -0.000922f, -0.002087f, +0.000720f, -0.000608f, -0.000380f, -0.000123f, +0.001180f, +0.000721f, +0.001017f, + -0.002891f, +0.002776f, -0.002727f, +0.001400f, -0.001051f, +0.000857f + }, + { + -0.021237f, +0.189472f, +0.009839f, -0.001508f, -0.037097f, +0.018405f, -0.021426f, -0.015395f, +0.001836f, -0.013287f, + +0.052592f, +0.015325f, -0.007563f, +0.021238f, -0.002190f, +0.013929f, +0.015741f, +0.013041f, +0.003897f, +0.003595f, + -0.005530f, -0.026733f, -0.003575f, +0.022183f, -0.007370f, +0.013992f, +0.004695f, +0.003070f, +0.002543f, +0.003974f, + -0.006770f, -0.008230f, -0.000629f, -0.006382f, +0.012092f, -0.007338f, +0.004708f, -0.009804f, +0.005314f, +0.005157f, + +0.001915f, +0.001862f, -0.002040f, +0.003641f, -0.010287f, +0.000691f, -0.001495f, +0.000494f, -0.012753f, -0.002441f, + +0.004879f, +0.007503f, -0.007317f, -0.001288f, +0.006067f, -0.003744f, +0.004802f, -0.001646f, +0.000569f, +0.006245f, + +0.010997f, +0.004300f, -0.007015f, +0.002621f, +0.003078f, -0.004301f, -0.003017f, -0.002702f, -0.001545f, -0.005939f, + +0.000881f, -0.000514f, -0.001065f, -0.002669f, +0.000062f, +0.003912f, +0.001183f, -0.006348f, +0.000277f, +0.001457f, + +0.001543f, -0.000986f, +0.002947f, +0.001191f, -0.001431f, -0.003074f, -0.003932f, +0.000681f, +0.003182f, +0.000538f, + -0.000288f, -0.002175f, +0.004203f, +0.002131f, +0.002418f, -0.003067f + }, + { + -0.003498f, +0.015264f, -0.019916f, +0.012872f, +0.000284f, -0.005275f, +0.004532f, +0.007028f, +0.008458f, -0.005796f, + +0.009890f, +0.003841f, -0.014300f, -0.020864f, -0.011557f, -0.011913f, -0.003861f, +0.007796f, +0.013178f, +0.010769f, + -0.000437f, +0.013623f, -0.000399f, -0.015496f, +0.009233f, -0.008492f, -0.008324f, -0.003213f, +0.001300f, -0.032070f, + +0.008609f, +0.004362f, -0.031975f, -0.000599f, +0.019182f, -0.016592f, +0.005920f, +0.005591f, +0.003670f, +0.004128f, + +0.001397f, +0.002906f, -0.018359f, +0.002151f, -0.007344f, +0.003364f, -0.008559f, -0.002398f, +0.001209f, +0.009287f, + +0.005392f, +0.003287f, -0.008119f, +0.006062f, -0.003000f, +0.004786f, +0.005598f, -0.001965f, +0.004891f, -0.004947f, + +0.004173f, +0.001545f, -0.005020f, -0.001823f, +0.001297f, -0.002685f, -0.001607f, +0.001526f, -0.004900f, +0.000558f, + +0.000491f, -0.001829f, +0.006466f, -0.002998f, +0.006458f, +0.005609f, +0.002603f, +0.001529f, +0.003005f, +0.001125f, + +0.000410f, +0.000699f, -0.001184f, -0.001252f, -0.000078f, +0.000427f, -0.004338f, +0.001130f, +0.001160f, -0.001561f, + -0.000439f, +0.000339f, -0.000544f, +0.002320f, +0.002825f, +0.000911f + }, + { + -0.022271f, -0.227167f, +0.022093f, -0.002490f, -0.035133f, +0.006775f, +0.041374f, +0.070814f, -0.013203f, -0.066874f, + +0.004643f, +0.014847f, +0.006007f, +0.019511f, -0.006957f, -0.002036f, -0.004224f, -0.017389f, -0.016500f, -0.001581f, + +0.012662f, +0.005984f, +0.010292f, +0.026930f, -0.014424f, -0.017920f, -0.011844f, -0.016513f, -0.000712f, -0.015405f, + +0.004120f, -0.009363f, -0.008534f, -0.012963f, -0.002917f, -0.012651f, -0.002921f, -0.006134f, -0.000161f, -0.003998f, + -0.005826f, -0.013243f, -0.007333f, +0.006830f, +0.006715f, -0.004539f, +0.003845f, +0.003790f, +0.003006f, -0.014263f, + +0.002049f, -0.008284f, +0.000993f, -0.001161f, +0.002471f, -0.000755f, +0.012687f, +0.000727f, -0.007535f, +0.014558f, + -0.009533f, +0.003299f, -0.003570f, -0.000074f, -0.004309f, +0.015446f, +0.002800f, +0.005412f, -0.002937f, +0.004622f, + +0.003835f, +0.006106f, +0.002906f, -0.004685f, -0.009329f, -0.000706f, -0.000044f, -0.002350f, -0.002735f, -0.002826f, + +0.004024f, +0.003202f, -0.001858f, -0.004144f, -0.000142f, +0.000780f, +0.000257f, +0.000151f, -0.000807f, -0.004811f, + +0.000527f, -0.000122f, -0.000671f, +0.000455f, +0.001426f, -0.001722f + }, + { + +0.001579f, -0.086316f, +0.016375f, +0.003078f, -0.012702f, +0.022367f, -0.035211f, +0.005767f, +0.019461f, -0.011175f, + +0.004602f, +0.022319f, -0.019470f, -0.017268f, +0.007473f, -0.002310f, -0.003830f, +0.020017f, +0.006879f, +0.022534f, + +0.009412f, +0.005607f, -0.001046f, -0.006356f, +0.008032f, -0.005021f, +0.000669f, +0.021516f, +0.011152f, -0.009263f, + +0.008718f, -0.003343f, +0.004207f, +0.003872f, +0.021145f, -0.007482f, +0.003388f, +0.006917f, +0.009119f, +0.002849f, + +0.008262f, +0.005696f, +0.001396f, -0.005510f, -0.007171f, -0.012222f, +0.003498f, -0.004378f, +0.009273f, -0.002962f, + -0.009419f, -0.007897f, +0.002372f, +0.000052f, +0.000561f, -0.000954f, +0.007269f, -0.005746f, -0.003650f, +0.000275f, + -0.004995f, +0.000785f, -0.001508f, -0.000657f, -0.001745f, -0.005000f, -0.006104f, +0.001150f, -0.005568f, -0.002971f, + +0.006101f, +0.002415f, -0.001097f, -0.002827f, -0.004567f, -0.001298f, +0.005660f, +0.004282f, -0.004526f, +0.003444f, + -0.000968f, -0.003514f, +0.000278f, -0.000439f, +0.000512f, +0.000645f, +0.000912f, +0.001604f, +0.004663f, +0.003431f, + -0.001697f, +0.002127f, -0.004592f, +0.001397f, -0.001195f, +0.000490f + }, + { + -0.023096f, -0.146563f, +0.063091f, +0.001790f, -0.026357f, +0.073703f, +0.008709f, -0.003218f, +0.000538f, +0.025387f, + -0.007609f, +0.022346f, +0.006749f, +0.021212f, -0.025727f, +0.015181f, +0.021513f, -0.030564f, +0.024620f, -0.009756f, + +0.016774f, -0.009139f, +0.009533f, -0.007774f, -0.020144f, +0.007128f, +0.016423f, +0.005791f, +0.000463f, +0.017129f, + -0.012257f, -0.008389f, +0.002242f, +0.009580f, -0.010940f, +0.000836f, +0.001079f, +0.008290f, -0.010207f, -0.014556f, + +0.004774f, -0.001216f, -0.009410f, -0.002309f, +0.003459f, -0.002323f, -0.009805f, -0.008846f, +0.001174f, -0.002718f, + +0.009883f, +0.004534f, -0.018236f, +0.005434f, +0.003565f, +0.007540f, +0.000887f, +0.003951f, -0.000819f, +0.001845f, + +0.006976f, +0.008140f, -0.001932f, +0.002125f, +0.003884f, +0.001586f, -0.002254f, +0.004067f, +0.003897f, +0.001441f, + +0.001960f, -0.006183f, -0.003775f, +0.001944f, -0.002520f, -0.001375f, +0.003388f, +0.003776f, -0.002846f, +0.002289f, + -0.000869f, +0.002327f, +0.006236f, -0.002659f, +0.000073f, +0.003823f, -0.001964f, +0.000926f, +0.001115f, -0.001041f, + +0.002268f, -0.002214f, +0.000788f, -0.000940f, -0.002525f, -0.002843f + }, + { + -0.003534f, -0.050458f, +0.023287f, -0.007620f, +0.008842f, +0.007911f, -0.019019f, -0.011786f, -0.008942f, +0.013440f, + +0.007920f, -0.013876f, -0.038290f, +0.000769f, -0.035745f, +0.002042f, -0.007168f, -0.016541f, -0.035389f, +0.019008f, + +0.019125f, +0.005892f, -0.052891f, +0.006157f, +0.019071f, +0.024503f, +0.022360f, -0.017099f, +0.016959f, +0.010693f, + -0.013758f, +0.010477f, -0.017472f, -0.004230f, -0.003990f, +0.011564f, +0.012596f, +0.006080f, -0.008400f, +0.000453f, + +0.000822f, -0.005288f, -0.006471f, -0.004108f, -0.002699f, -0.006992f, -0.009371f, +0.001108f, -0.012385f, +0.000807f, + -0.000629f, -0.004528f, -0.010901f, -0.006428f, +0.004335f, -0.003780f, -0.000635f, +0.005743f, +0.002571f, -0.001102f, + +0.005414f, +0.006815f, -0.001318f, +0.002815f, +0.005811f, -0.006619f, -0.004182f, -0.000518f, -0.004911f, -0.007419f, + +0.005027f, +0.001443f, +0.004786f, -0.002839f, -0.002121f, -0.002224f, -0.004205f, -0.000327f, +0.000215f, -0.002215f, + +0.002143f, +0.000111f, +0.000530f, -0.003980f, -0.007171f, -0.004369f, -0.003252f, -0.004942f, -0.001773f, -0.001133f, + -0.004797f, -0.000644f, -0.000686f, +0.003577f, +0.001638f, -0.002419f + }, + { + -0.034670f, -0.051502f, +0.001925f, +0.025550f, +0.022154f, +0.033281f, +0.004676f, +0.015064f, -0.014768f, +0.016221f, + +0.018187f, +0.003006f, +0.013222f, +0.020668f, +0.083602f, +0.023443f, -0.003919f, +0.008500f, +0.024902f, +0.012746f, + +0.020091f, -0.003076f, -0.023919f, -0.006743f, -0.004203f, -0.002684f, -0.000981f, -0.013039f, -0.002779f, +0.018821f, + -0.009489f, -0.025578f, -0.003158f, +0.016799f, +0.023877f, -0.015447f, -0.005792f, +0.002325f, +0.009619f, +0.002686f, + +0.006782f, -0.011538f, -0.010209f, -0.004340f, +0.011623f, +0.003711f, +0.000514f, -0.007125f, +0.009826f, -0.008048f, + +0.003705f, -0.011133f, -0.003914f, +0.001743f, +0.002362f, +0.008987f, -0.008878f, -0.003840f, -0.007609f, +0.004384f, + -0.002787f, +0.001762f, +0.004565f, +0.005716f, +0.006801f, +0.001843f, +0.003580f, +0.001011f, +0.004601f, -0.002008f, + -0.003792f, -0.009238f, -0.000525f, +0.004149f, -0.002167f, -0.002459f, -0.002643f, -0.000070f, +0.001555f, +0.003127f, + +0.002999f, -0.002371f, -0.000757f, -0.005149f, +0.000473f, +0.001321f, -0.002622f, -0.000918f, -0.000926f, +0.003309f, + -0.003004f, +0.000347f, +0.000334f, +0.000646f, +0.001566f, +0.001635f + }, + { + +0.008771f, +0.044326f, -0.005755f, -0.022582f, +0.017829f, +0.014536f, +0.001556f, -0.005426f, -0.007282f, +0.011685f, + -0.013638f, +0.010240f, +0.010744f, +0.025981f, -0.078981f, +0.002966f, -0.034083f, +0.015655f, -0.000801f, +0.002844f, + +0.018451f, +0.003084f, -0.000927f, +0.001394f, -0.002059f, +0.014711f, +0.003069f, +0.021660f, -0.014215f, -0.012159f, + -0.026347f, +0.006099f, +0.010175f, +0.002838f, -0.003225f, -0.008008f, +0.010099f, -0.005917f, -0.014361f, -0.005720f, + -0.024105f, -0.012706f, +0.000362f, +0.001248f, +0.000871f, -0.004943f, +0.003313f, +0.007548f, -0.009672f, -0.000397f, + -0.014058f, +0.001481f, +0.005163f, +0.001743f, +0.003649f, -0.008261f, -0.000360f, -0.002282f, -0.003871f, -0.004124f, + -0.002753f, -0.003657f, +0.002484f, +0.009657f, -0.003651f, -0.002887f, -0.001413f, +0.001494f, -0.009892f, +0.000219f, + +0.003040f, -0.001460f, +0.000950f, +0.000295f, -0.002264f, -0.004407f, -0.002780f, +0.000755f, -0.001513f, -0.001763f, + +0.003163f, +0.002106f, +0.001733f, -0.000535f, -0.002639f, +0.003276f, -0.000505f, +0.004291f, -0.003926f, -0.002201f, + -0.000084f, -0.000543f, -0.001727f, +0.001736f, -0.001717f, -0.001887f + } + }, + { + { + -0.022886f, +0.452799f, +0.041493f, +0.133435f, -0.004227f, +0.010638f, +0.016374f, -0.005034f, -0.022903f, +0.021684f, + +0.008448f, +0.028219f, +0.006425f, +0.004027f, +0.004384f, +0.000523f, +0.020492f, -0.006947f, +0.016331f, -0.012103f, + +0.000877f, +0.000711f, +0.021154f, -0.006496f, +0.007308f, -0.013135f, +0.009427f, +0.014658f, +0.015375f, -0.024662f, + -0.009075f, -0.001636f, -0.007549f, +0.009080f, +0.002303f, -0.005833f, -0.011447f, -0.009430f, +0.005967f, -0.010283f, + +0.007982f, +0.024313f, -0.004489f, -0.016944f, -0.003382f, +0.007795f, -0.002497f, +0.001995f, +0.012647f, -0.005027f, + +0.002268f, +0.006865f, -0.007917f, -0.006817f, +0.009282f, +0.001725f, +0.004895f, +0.004910f, +0.000088f, +0.000707f, + -0.006240f, -0.002481f, +0.000426f, +0.004192f, -0.001124f, +0.001475f, -0.005372f, +0.002584f, -0.003234f, +0.001265f, + -0.007389f, -0.006831f, -0.002143f, -0.002703f, -0.003782f, -0.000657f, -0.003666f, -0.000658f, +0.001224f, -0.003974f, + +0.002388f, -0.001694f, +0.001479f, -0.000305f, -0.001099f, +0.001176f, -0.000965f, +0.001604f, +0.001584f, -0.000336f, + -0.001724f, -0.000389f, +0.001842f, +0.000539f, +0.001273f, -0.001006f + }, + { + -0.002282f, +0.016295f, +0.020960f, +0.018467f, -0.018094f, +0.008306f, -0.003486f, +0.011859f, -0.004393f, -0.012904f, + -0.025220f, +0.040325f, -0.009870f, +0.009851f, +0.010194f, -0.001844f, +0.022102f, +0.002120f, -0.000778f, -0.014011f, + +0.016910f, -0.026015f, +0.021617f, +0.030922f, +0.001922f, +0.016889f, -0.024879f, -0.014215f, -0.009070f, +0.027928f, + +0.003637f, +0.017110f, -0.018872f, +0.001555f, +0.022044f, -0.007313f, -0.007725f, -0.007781f, -0.003811f, +0.014688f, + -0.002240f, -0.003931f, -0.002721f, -0.009893f, +0.003570f, -0.003351f, -0.001465f, +0.003476f, +0.002643f, -0.008329f, + -0.002327f, -0.006735f, -0.003198f, -0.006036f, +0.006486f, -0.009855f, -0.002653f, -0.001834f, +0.002980f, -0.006343f, + -0.006184f, +0.001499f, +0.001021f, +0.000713f, +0.004378f, -0.000597f, +0.004347f, +0.000702f, +0.005377f, -0.004215f, + -0.003203f, -0.002068f, +0.000415f, -0.001856f, -0.003612f, -0.002720f, +0.001650f, -0.000872f, -0.003250f, +0.000559f, + -0.001389f, -0.000367f, +0.001355f, -0.003242f, +0.001631f, -0.002124f, +0.002568f, +0.003762f, +0.000174f, -0.001878f, + -0.000600f, -0.000256f, -0.001321f, -0.000963f, -0.001865f, -0.001384f + }, + { + +0.011108f, -0.097375f, -0.033262f, -0.059349f, +0.014096f, +0.002394f, -0.000058f, +0.002354f, +0.014168f, -0.010145f, + +0.022348f, +0.035062f, -0.031914f, +0.015285f, -0.024835f, +0.000308f, +0.005812f, -0.009452f, +0.004981f, -0.002131f, + +0.016926f, +0.008269f, -0.011713f, -0.002493f, -0.003654f, +0.003206f, -0.000201f, +0.013831f, -0.002369f, +0.007851f, + +0.002729f, -0.014851f, +0.001193f, -0.014738f, +0.012967f, +0.006833f, -0.016144f, +0.001465f, -0.009202f, -0.000049f, + +0.013462f, -0.010589f, -0.000071f, +0.005736f, -0.001001f, -0.008296f, +0.012065f, +0.011616f, +0.008076f, -0.000970f, + +0.011187f, -0.000133f, -0.005382f, +0.000604f, +0.001392f, -0.002391f, -0.000344f, -0.005553f, +0.003296f, +0.006542f, + +0.000173f, -0.001120f, -0.001289f, +0.002859f, +0.004697f, +0.005734f, -0.004966f, -0.002063f, +0.006591f, -0.000421f, + -0.001203f, -0.002423f, -0.001694f, +0.004541f, +0.004774f, -0.000621f, -0.002777f, -0.002002f, +0.000697f, -0.000598f, + -0.003494f, +0.002749f, +0.001164f, +0.000138f, +0.000516f, +0.002824f, -0.001527f, -0.001296f, -0.002584f, -0.002793f, + -0.000758f, +0.000601f, -0.001043f, +0.000962f, +0.001764f, +0.002420f + }, + { + +0.027634f, -0.044428f, +0.011899f, +0.110258f, -0.005078f, -0.009628f, -0.007045f, +0.010271f, -0.002111f, +0.022397f, + -0.035128f, -0.017057f, +0.010456f, -0.003606f, -0.000601f, +0.025262f, +0.031559f, +0.015158f, +0.015088f, +0.008361f, + +0.005932f, +0.021706f, +0.004779f, +0.007435f, +0.003083f, +0.012975f, -0.019458f, +0.001977f, -0.001167f, -0.021988f, + +0.010918f, +0.006003f, +0.001635f, -0.000132f, +0.013040f, +0.004171f, +0.006305f, +0.006194f, +0.012293f, +0.019610f, + +0.008137f, -0.001198f, -0.003189f, -0.013756f, +0.004404f, -0.006701f, -0.011415f, +0.001845f, -0.003317f, -0.007013f, + -0.002923f, +0.002703f, -0.001977f, +0.002057f, +0.002495f, +0.008211f, +0.003980f, -0.004055f, -0.006694f, +0.004064f, + -0.005948f, -0.001248f, -0.003681f, -0.006177f, -0.000030f, +0.006928f, -0.002163f, -0.003067f, -0.002183f, +0.001835f, + -0.002492f, +0.003830f, +0.001092f, -0.003308f, -0.000468f, -0.000486f, -0.002612f, +0.000536f, +0.000880f, +0.002658f, + -0.001675f, -0.003896f, -0.002225f, +0.001477f, -0.001166f, -0.001601f, -0.000939f, -0.000281f, +0.000411f, -0.002104f, + +0.000450f, +0.002458f, -0.000043f, -0.004829f, -0.003506f, -0.001839f + }, + { + +0.003644f, +0.017208f, +0.000328f, -0.010306f, -0.003528f, -0.000676f, -0.001292f, +0.008010f, -0.000985f, -0.001939f, + -0.003643f, +0.020964f, -0.001871f, +0.010188f, +0.093531f, -0.029244f, -0.031920f, -0.011417f, -0.025520f, -0.010049f, + +0.012567f, -0.015044f, -0.008245f, +0.011734f, +0.015813f, +0.002513f, +0.015166f, +0.011385f, +0.015845f, +0.011911f, + +0.013754f, -0.010135f, +0.011555f, -0.010705f, -0.013047f, +0.004096f, -0.008619f, +0.000505f, -0.003072f, -0.002363f, + -0.002702f, -0.006612f, +0.002729f, +0.000436f, -0.016807f, +0.003952f, +0.008725f, -0.004243f, -0.001752f, -0.004768f, + +0.001297f, +0.002151f, -0.002036f, +0.005255f, -0.001372f, +0.005770f, +0.003652f, +0.004676f, +0.009529f, -0.001626f, + +0.008732f, +0.001673f, -0.005369f, -0.001337f, -0.002618f, -0.002584f, -0.002335f, -0.004930f, +0.001101f, -0.001129f, + +0.001236f, +0.009441f, -0.001666f, -0.003873f, +0.003127f, +0.003166f, -0.001347f, -0.000771f, +0.001359f, -0.006239f, + +0.000096f, -0.003306f, -0.001167f, -0.000180f, +0.001231f, -0.001258f, +0.002693f, -0.000630f, -0.000319f, +0.001611f, + +0.001231f, -0.000121f, -0.000080f, -0.001280f, +0.002099f, +0.001684f + }, + { + +0.049723f, -0.136896f, +0.017458f, +0.104217f, -0.001483f, +0.002584f, +0.021100f, +0.022500f, +0.028943f, +0.003144f, + -0.011588f, -0.019459f, +0.023179f, -0.036649f, +0.005139f, -0.000198f, -0.015976f, +0.017899f, -0.007492f, +0.000218f, + +0.003127f, -0.008912f, -0.009751f, -0.007889f, +0.007761f, +0.002135f, +0.002164f, +0.002236f, +0.015346f, +0.010905f, + -0.005624f, +0.003929f, +0.010325f, -0.006041f, -0.001677f, -0.002374f, +0.004564f, -0.002994f, -0.006231f, +0.001979f, + +0.001936f, -0.005188f, -0.006227f, +0.009987f, +0.005140f, +0.010478f, +0.006460f, +0.005375f, +0.006420f, -0.007526f, + +0.002400f, +0.004645f, -0.001626f, -0.005105f, -0.006603f, +0.003365f, +0.002066f, +0.004096f, -0.001950f, -0.002016f, + +0.002077f, -0.003828f, -0.007657f, +0.000745f, +0.001143f, -0.004407f, -0.009803f, -0.001890f, -0.001247f, +0.002015f, + -0.005033f, +0.004406f, +0.001569f, -0.001826f, -0.000483f, +0.000157f, +0.001649f, -0.001909f, -0.000013f, -0.000030f, + +0.003329f, +0.001523f, +0.003096f, -0.001829f, -0.001968f, -0.001828f, +0.000231f, +0.000110f, +0.000470f, +0.002928f, + -0.000258f, -0.000653f, +0.001206f, -0.000662f, +0.000966f, -0.001116f + }, + { + -0.000803f, -0.028796f, -0.008033f, +0.001799f, -0.000403f, -0.003043f, +0.000290f, +0.008587f, +0.007046f, +0.004638f, + -0.012003f, -0.000719f, +0.015560f, -0.019922f, +0.044486f, -0.025854f, +0.006139f, -0.018802f, -0.012342f, -0.010467f, + +0.000583f, +0.001076f, -0.011029f, -0.006935f, +0.017335f, +0.001008f, +0.004580f, +0.001656f, +0.019916f, +0.009808f, + -0.002874f, +0.003147f, +0.002426f, +0.021469f, -0.007838f, +0.015997f, -0.007708f, +0.018039f, -0.012197f, +0.011217f, + -0.011599f, -0.007278f, +0.004836f, +0.008389f, -0.006845f, +0.000747f, -0.007358f, +0.004997f, +0.007977f, +0.005030f, + +0.004480f, +0.002341f, -0.003730f, +0.005995f, +0.005726f, -0.000738f, +0.000653f, -0.003519f, +0.000370f, +0.006890f, + +0.000714f, +0.004790f, +0.002645f, +0.004033f, +0.000627f, +0.005176f, +0.001897f, -0.000070f, +0.002746f, +0.001698f, + +0.001699f, -0.005293f, -0.003463f, -0.002841f, -0.004552f, -0.000624f, +0.002028f, -0.003732f, -0.000616f, +0.003311f, + -0.000310f, -0.004390f, +0.000031f, +0.003086f, -0.003857f, +0.001039f, +0.001384f, -0.001378f, +0.000474f, +0.000475f, + +0.001191f, +0.000344f, -0.001528f, +0.000389f, -0.001359f, -0.000911f + }, + { + +0.061152f, +0.101351f, -0.028245f, -0.019333f, +0.019817f, +0.007318f, -0.019286f, -0.014544f, +0.006081f, +0.012788f, + +0.014590f, +0.035654f, +0.013061f, -0.003507f, -0.002568f, +0.027378f, +0.009646f, +0.022551f, +0.004746f, +0.000680f, + -0.012543f, -0.027086f, +0.000469f, -0.005686f, +0.030617f, -0.000421f, +0.011891f, -0.000263f, -0.014100f, +0.018822f, + +0.000845f, -0.010135f, +0.004531f, -0.014033f, +0.017084f, -0.021801f, +0.009179f, -0.008172f, -0.001551f, +0.011623f, + +0.004757f, +0.001046f, +0.005310f, -0.007664f, +0.012617f, -0.008614f, -0.003438f, +0.007296f, -0.020084f, -0.001003f, + +0.006000f, -0.000103f, -0.001641f, -0.003598f, +0.002565f, -0.000568f, +0.002487f, -0.001687f, +0.003770f, +0.006608f, + +0.007105f, +0.003396f, -0.006651f, +0.003153f, +0.001502f, -0.004222f, +0.001627f, -0.005804f, -0.004759f, -0.000286f, + -0.000634f, -0.001999f, -0.000992f, -0.002715f, +0.000312f, -0.001726f, +0.004643f, -0.005053f, +0.001027f, +0.002370f, + -0.002742f, +0.002822f, +0.001824f, -0.000912f, +0.000147f, -0.002569f, -0.004229f, +0.002170f, +0.003758f, -0.001719f, + -0.001851f, +0.002045f, +0.002932f, +0.002167f, -0.001340f, +0.001831f + }, + { + +0.000500f, -0.018568f, -0.000134f, -0.000766f, +0.003688f, +0.000665f, +0.003679f, +0.002238f, +0.009794f, +0.007327f, + -0.000102f, -0.000213f, -0.006791f, +0.008719f, -0.043236f, -0.010708f, -0.023095f, +0.026554f, +0.027509f, -0.015116f, + -0.009067f, +0.022045f, +0.003177f, -0.022041f, +0.019984f, -0.014536f, -0.007197f, -0.017633f, +0.020597f, -0.045137f, + +0.000392f, -0.012400f, -0.012989f, +0.010819f, -0.001659f, +0.005185f, +0.003603f, -0.016013f, +0.021361f, -0.004102f, + +0.008594f, -0.006141f, -0.015629f, +0.003701f, +0.004253f, -0.006172f, -0.005962f, -0.008694f, +0.010757f, +0.003644f, + +0.003085f, +0.002651f, -0.003862f, +0.004866f, -0.002291f, +0.008173f, +0.002128f, -0.001916f, +0.004735f, -0.003453f, + +0.002782f, -0.002870f, +0.001659f, -0.002993f, -0.000657f, +0.004409f, -0.003816f, +0.003738f, -0.004479f, +0.000993f, + -0.000574f, -0.002059f, +0.004089f, +0.001186f, +0.001382f, +0.004882f, +0.002382f, +0.003234f, +0.002281f, +0.001377f, + +0.002788f, -0.002849f, +0.001504f, -0.000312f, -0.001747f, -0.002118f, -0.001258f, -0.000113f, -0.001017f, +0.000700f, + -0.001595f, -0.002100f, +0.002289f, +0.000707f, +0.001507f, +0.002436f + }, + { + +0.019370f, -0.223191f, -0.029132f, -0.031682f, -0.006160f, +0.032150f, +0.037316f, +0.022393f, -0.028502f, -0.019779f, + -0.008682f, +0.035067f, -0.000341f, -0.022864f, +0.035223f, -0.006578f, -0.016076f, -0.009738f, -0.016787f, -0.006954f, + +0.007619f, +0.013328f, +0.019191f, +0.002027f, +0.002262f, -0.030336f, -0.004361f, -0.012899f, -0.012350f, -0.012762f, + +0.010617f, -0.017780f, -0.020663f, -0.003109f, -0.007427f, -0.008749f, +0.001651f, -0.008023f, -0.000680f, -0.005877f, + -0.009949f, -0.012036f, +0.001281f, +0.002530f, +0.013271f, -0.010139f, +0.002995f, -0.000264f, +0.002762f, -0.006779f, + -0.000871f, -0.006480f, -0.000048f, -0.012442f, +0.009115f, +0.007543f, +0.008268f, -0.004057f, +0.000157f, +0.003467f, + +0.004753f, -0.004326f, +0.000576f, -0.007213f, +0.008792f, +0.001309f, +0.001567f, +0.008346f, -0.001473f, +0.007740f, + +0.003179f, +0.000546f, +0.005315f, -0.009265f, -0.004369f, -0.003368f, -0.001104f, +0.000263f, -0.002720f, +0.000179f, + +0.001460f, +0.002687f, -0.001478f, -0.006732f, -0.000635f, +0.001486f, -0.002341f, -0.000315f, -0.000230f, -0.004379f, + +0.000940f, -0.001440f, -0.001988f, +0.001397f, +0.001017f, -0.003305f + }, + { + +0.000711f, -0.076692f, +0.001122f, +0.002156f, -0.016862f, +0.001087f, -0.005543f, +0.004971f, +0.007952f, -0.000036f, + -0.017742f, +0.014383f, +0.028065f, -0.026640f, -0.002322f, +0.004169f, -0.023490f, +0.021488f, +0.017243f, +0.020160f, + -0.002892f, +0.006196f, -0.004109f, -0.003598f, +0.015154f, +0.001728f, +0.005977f, +0.002185f, +0.023185f, -0.014355f, + +0.014341f, -0.009961f, +0.000849f, +0.008084f, +0.009491f, -0.008875f, +0.007876f, +0.008216f, +0.012373f, +0.001481f, + +0.002531f, +0.014261f, +0.004496f, -0.007984f, -0.009032f, -0.011906f, +0.003874f, +0.007890f, -0.004533f, -0.007761f, + +0.001597f, -0.012292f, +0.001746f, -0.001612f, +0.001180f, +0.007743f, +0.003110f, -0.004955f, -0.003899f, -0.001303f, + -0.002960f, -0.003252f, -0.000997f, -0.002498f, +0.002447f, -0.002238f, -0.006702f, -0.000794f, -0.008060f, +0.000850f, + +0.002692f, +0.001607f, -0.002841f, +0.002380f, -0.005968f, +0.000212f, +0.004148f, +0.006107f, -0.002594f, -0.000027f, + +0.000386f, -0.002939f, -0.001439f, +0.000317f, -0.000907f, +0.000936f, +0.003845f, +0.003684f, +0.003034f, +0.001186f, + -0.001238f, +0.000651f, +0.000268f, -0.001081f, -0.000688f, +0.001100f + }, + { + -0.010063f, -0.156395f, +0.055297f, +0.019137f, -0.003262f, +0.045697f, -0.017506f, +0.014804f, +0.011148f, -0.027055f, + +0.033128f, +0.004749f, +0.030590f, +0.003488f, +0.010000f, -0.025167f, +0.001320f, -0.003083f, +0.024762f, -0.003406f, + +0.016352f, -0.007505f, -0.006524f, -0.000158f, -0.017453f, +0.003558f, +0.007952f, +0.004604f, +0.002435f, +0.000092f, + +0.004973f, -0.006168f, +0.003064f, +0.003721f, -0.010279f, +0.000862f, -0.003917f, +0.006479f, -0.004779f, -0.009467f, + -0.002137f, -0.003907f, -0.001523f, -0.012298f, +0.005036f, +0.000592f, -0.001989f, -0.007242f, +0.000180f, -0.000469f, + -0.000443f, +0.005928f, -0.008875f, -0.001869f, +0.010286f, -0.000918f, +0.001032f, +0.005765f, +0.001002f, +0.001427f, + +0.007913f, +0.006463f, +0.001326f, -0.000041f, +0.004570f, -0.001749f, +0.009589f, -0.000484f, +0.006140f, +0.000030f, + -0.000758f, -0.003975f, -0.003285f, -0.002391f, -0.001807f, +0.002741f, +0.000727f, +0.007237f, -0.000584f, +0.000433f, + -0.001767f, +0.002561f, +0.000027f, +0.003331f, -0.000088f, -0.000296f, +0.001361f, +0.003361f, -0.001157f, -0.000738f, + +0.000141f, +0.001338f, -0.002603f, -0.000663f, -0.002361f, -0.000846f + }, + { + +0.004200f, -0.018179f, -0.022552f, +0.000100f, +0.015690f, +0.005643f, -0.028426f, +0.003755f, -0.008464f, +0.005526f, + +0.002285f, -0.010035f, +0.003589f, -0.055507f, -0.029253f, +0.024598f, -0.033992f, +0.000399f, -0.049835f, +0.033640f, + -0.004288f, +0.020019f, -0.059373f, +0.009611f, +0.010886f, +0.024005f, +0.011711f, +0.002516f, +0.016768f, -0.010468f, + +0.005018f, -0.014687f, +0.012868f, -0.017691f, +0.013143f, +0.003718f, +0.010959f, -0.004238f, +0.007634f, -0.013177f, + +0.008613f, -0.013025f, +0.006671f, -0.011808f, -0.008553f, -0.006556f, -0.003993f, -0.005186f, -0.001209f, +0.003606f, + -0.002967f, -0.003462f, -0.016957f, -0.002936f, +0.003156f, -0.000966f, -0.002966f, +0.004963f, -0.001586f, +0.009991f, + -0.000318f, +0.008547f, +0.001706f, -0.000777f, +0.005698f, +0.000117f, -0.009996f, -0.004981f, -0.004977f, -0.004826f, + +0.004236f, +0.005271f, +0.002224f, +0.000471f, -0.004754f, -0.002209f, -0.006259f, +0.001026f, -0.003136f, -0.000928f, + +0.002876f, +0.002230f, -0.000930f, -0.002174f, -0.004889f, -0.003739f, -0.002717f, -0.003157f, -0.006012f, -0.002198f, + -0.000997f, -0.001969f, -0.000731f, +0.001363f, +0.002496f, -0.001172f + }, + { + +0.025343f, -0.132665f, +0.025115f, +0.039170f, +0.003958f, -0.013782f, +0.048220f, +0.006914f, -0.013240f, +0.029247f, + +0.019751f, -0.008451f, -0.002249f, +0.016497f, +0.089927f, +0.034769f, +0.002694f, +0.007188f, +0.018407f, -0.001400f, + +0.013114f, +0.006065f, -0.009653f, -0.019875f, -0.007549f, +0.013715f, -0.011958f, -0.010275f, -0.002879f, +0.003979f, + -0.000280f, -0.014667f, -0.000245f, +0.011800f, +0.002934f, +0.001010f, +0.001737f, -0.003385f, +0.005031f, +0.009149f, + +0.002782f, -0.015902f, -0.016075f, -0.006275f, +0.003994f, -0.004181f, +0.014067f, +0.008900f, -0.006812f, -0.010724f, + +0.005450f, -0.001925f, -0.007961f, +0.001647f, -0.002118f, +0.006085f, -0.000623f, -0.007977f, -0.006236f, +0.002239f, + +0.004495f, -0.000969f, +0.005575f, +0.009849f, +0.006767f, +0.003484f, +0.000596f, +0.001469f, +0.003021f, -0.001264f, + -0.003560f, -0.004480f, -0.002105f, -0.002431f, +0.001879f, -0.001919f, -0.001312f, -0.004428f, +0.003680f, +0.003565f, + +0.000777f, +0.001842f, -0.002680f, -0.006163f, +0.000668f, -0.000406f, -0.000863f, -0.001644f, +0.001074f, +0.001615f, + -0.001236f, -0.001237f, +0.001782f, +0.001152f, +0.000136f, -0.000265f + }, + { + -0.009343f, +0.049114f, +0.023097f, -0.004810f, -0.020565f, +0.032781f, -0.000499f, -0.004388f, -0.002595f, +0.007070f, + -0.009291f, +0.003565f, +0.017280f, -0.079245f, +0.095134f, -0.030052f, -0.016773f, -0.019180f, +0.020753f, +0.024711f, + -0.010515f, +0.022023f, -0.008434f, +0.005904f, +0.008669f, +0.005518f, +0.021209f, +0.003666f, -0.015389f, -0.038888f, + -0.006124f, -0.002618f, +0.014131f, -0.006892f, +0.020960f, -0.002165f, -0.004367f, -0.006814f, -0.016178f, -0.002542f, + -0.026422f, -0.018176f, +0.012497f, -0.002380f, +0.005616f, -0.017866f, +0.016216f, +0.008479f, -0.023618f, +0.002895f, + -0.004927f, +0.000030f, -0.002638f, +0.002301f, -0.001498f, -0.001808f, -0.000317f, -0.003725f, -0.000963f, -0.003041f, + -0.003750f, +0.001256f, +0.000068f, +0.001155f, -0.006220f, -0.001052f, -0.001222f, +0.001386f, -0.007259f, +0.000334f, + -0.002711f, +0.004207f, -0.001255f, -0.004302f, -0.000801f, -0.004016f, -0.002614f, -0.000807f, -0.003781f, +0.007315f, + +0.000334f, +0.002846f, +0.001371f, -0.000552f, -0.003400f, +0.004041f, +0.001071f, -0.002930f, +0.000554f, -0.002042f, + -0.002137f, -0.000842f, +0.001966f, -0.003118f, +0.000764f, -0.001231f + } + }, + { + { + +0.024388f, +0.461918f, -0.026691f, +0.087771f, -0.023299f, -0.000462f, +0.010723f, +0.013946f, -0.016193f, +0.044639f, + +0.028664f, +0.013891f, -0.012490f, -0.013323f, +0.012673f, +0.001484f, +0.000003f, -0.032234f, +0.006619f, +0.000175f, + +0.006828f, +0.001763f, +0.008184f, -0.010505f, +0.002371f, -0.015743f, -0.007365f, -0.003604f, +0.020722f, -0.013628f, + +0.002931f, +0.015930f, -0.002402f, -0.005884f, -0.004421f, -0.007166f, +0.002393f, +0.001421f, +0.012010f, -0.004895f, + -0.008290f, -0.000021f, -0.011507f, -0.017706f, -0.002362f, +0.001833f, -0.009430f, -0.007970f, +0.010476f, +0.004523f, + +0.004673f, +0.002549f, -0.011483f, -0.009133f, +0.005244f, -0.006544f, +0.004486f, +0.005106f, -0.005011f, +0.003477f, + +0.001605f, -0.005912f, -0.004657f, +0.000379f, -0.001417f, +0.004653f, -0.005297f, +0.003117f, -0.002402f, +0.004493f, + -0.004498f, -0.004946f, -0.000101f, -0.002579f, -0.008384f, -0.001808f, +0.001642f, -0.000287f, +0.000892f, +0.000793f, + +0.005807f, -0.002066f, -0.001176f, -0.003893f, -0.002803f, -0.000134f, +0.000556f, +0.001456f, +0.002246f, +0.002612f, + +0.000368f, -0.000651f, -0.001301f, -0.000032f, +0.001182f, -0.001757f + }, + { + +0.001178f, -0.047768f, -0.028113f, +0.041792f, -0.003743f, +0.002357f, -0.007697f, +0.000412f, -0.015376f, -0.003239f, + -0.007813f, +0.038910f, -0.028072f, +0.002087f, +0.014839f, -0.017308f, +0.000350f, -0.004208f, +0.005375f, -0.028214f, + +0.013452f, -0.002174f, +0.007117f, -0.016280f, -0.017420f, +0.022277f, -0.033255f, -0.010599f, -0.002989f, +0.035645f, + +0.002836f, +0.015125f, -0.015033f, -0.004474f, +0.008485f, -0.009325f, -0.006028f, +0.000043f, -0.000023f, +0.007833f, + +0.004614f, +0.011473f, +0.007454f, -0.005841f, +0.009969f, -0.003474f, -0.015589f, +0.002006f, +0.003275f, -0.001643f, + +0.002364f, -0.006515f, -0.003220f, -0.004710f, -0.000281f, -0.011656f, +0.006046f, +0.000688f, +0.002552f, +0.000565f, + -0.001573f, +0.000144f, -0.000051f, +0.003142f, +0.004470f, -0.003221f, +0.009672f, +0.001723f, +0.001724f, -0.000398f, + +0.002795f, -0.001697f, +0.001506f, +0.001244f, +0.001654f, -0.000822f, -0.000988f, -0.000698f, -0.003510f, +0.001287f, + -0.003399f, -0.001683f, +0.001679f, -0.005456f, +0.000424f, +0.000091f, +0.002015f, -0.000291f, +0.000148f, +0.001283f, + -0.000054f, -0.000926f, -0.000247f, +0.002395f, +0.000834f, -0.001469f + }, + { + -0.011539f, -0.012582f, +0.046984f, -0.072582f, -0.000078f, +0.001885f, +0.000931f, -0.010161f, -0.004120f, -0.005022f, + +0.030920f, +0.030592f, -0.030862f, +0.010601f, -0.021916f, +0.019487f, +0.011159f, -0.008270f, -0.002999f, -0.012923f, + -0.002867f, -0.007427f, -0.010617f, +0.009114f, +0.011311f, +0.000735f, +0.001502f, +0.020947f, +0.002437f, +0.012475f, + +0.004745f, -0.009252f, +0.010695f, -0.012641f, -0.001924f, +0.005113f, -0.011782f, +0.004879f, -0.007771f, -0.010810f, + +0.006136f, -0.023730f, -0.009515f, +0.006502f, +0.010506f, +0.010543f, +0.024577f, +0.016604f, +0.009829f, -0.011626f, + +0.005714f, +0.009027f, -0.009503f, -0.001000f, +0.008508f, +0.000323f, -0.002925f, -0.008837f, -0.002014f, +0.003343f, + +0.000782f, +0.000820f, -0.003382f, -0.007078f, -0.004835f, +0.007319f, -0.000355f, -0.002248f, +0.003537f, -0.000041f, + +0.003196f, +0.001667f, +0.001202f, +0.001399f, +0.001632f, +0.001423f, +0.005253f, +0.001484f, +0.001687f, +0.001308f, + -0.002634f, +0.001952f, -0.000898f, -0.001767f, -0.002207f, +0.000819f, -0.002082f, -0.001112f, -0.002949f, -0.001122f, + -0.001369f, -0.001464f, -0.001293f, +0.000035f, -0.000279f, +0.002306f + }, + { + -0.019032f, -0.157158f, -0.029448f, +0.112409f, +0.005764f, -0.006882f, -0.007671f, -0.006267f, -0.009730f, +0.025069f, + -0.033859f, -0.012649f, +0.007857f, +0.000509f, -0.002399f, +0.000122f, +0.029382f, +0.010464f, -0.005715f, -0.000592f, + -0.001504f, +0.008935f, +0.023458f, +0.031484f, +0.013039f, +0.018212f, -0.020331f, +0.017788f, +0.025776f, -0.012245f, + +0.008094f, +0.020110f, +0.011721f, -0.002490f, +0.005077f, +0.008180f, +0.008820f, +0.000812f, -0.001181f, +0.007079f, + -0.007555f, -0.018006f, -0.006576f, -0.012297f, +0.002348f, -0.005759f, -0.004822f, +0.005705f, -0.000637f, -0.010575f, + -0.001285f, +0.007278f, +0.003055f, +0.004684f, -0.000266f, +0.001749f, +0.005547f, +0.002475f, -0.004439f, +0.006492f, + +0.001995f, -0.000612f, -0.002089f, -0.000109f, +0.005487f, +0.007070f, +0.004134f, +0.003036f, -0.003524f, +0.002818f, + +0.004166f, +0.002176f, -0.001688f, -0.000431f, +0.000135f, -0.001681f, -0.005365f, +0.001488f, +0.002964f, +0.002142f, + +0.000253f, -0.000145f, -0.001288f, +0.000842f, -0.002043f, -0.002376f, -0.001678f, -0.000806f, +0.001966f, +0.001225f, + +0.000220f, +0.000353f, +0.001372f, -0.000578f, -0.000112f, -0.000693f + }, + { + -0.003529f, +0.035507f, +0.016835f, -0.001032f, +0.002741f, -0.000166f, +0.000227f, +0.001333f, -0.001890f, -0.002990f, + -0.003319f, +0.021813f, +0.003110f, -0.011061f, +0.035524f, -0.039987f, -0.019966f, +0.044759f, +0.012716f, -0.020417f, + +0.003760f, -0.024502f, -0.026365f, -0.007168f, +0.012257f, +0.022734f, +0.022509f, +0.007574f, +0.011891f, -0.011727f, + -0.003442f, +0.001951f, +0.034463f, +0.012249f, -0.004428f, +0.007484f, -0.002238f, +0.005386f, +0.005663f, +0.005277f, + +0.000402f, +0.001166f, +0.003575f, -0.001381f, -0.004570f, +0.004163f, +0.003899f, +0.000892f, +0.002619f, -0.001075f, + +0.004340f, -0.004608f, -0.005182f, +0.008960f, +0.000951f, +0.002343f, +0.007843f, +0.006882f, +0.003477f, -0.001093f, + +0.013842f, +0.005844f, -0.003742f, -0.001870f, -0.002758f, +0.000796f, +0.008032f, -0.000745f, +0.002312f, +0.000627f, + -0.003493f, +0.010484f, +0.002440f, -0.003982f, +0.003497f, +0.002565f, -0.002140f, +0.003355f, +0.005185f, -0.005311f, + +0.005013f, -0.000663f, -0.004261f, -0.001314f, +0.000185f, -0.003017f, +0.001147f, -0.001378f, -0.001519f, -0.000668f, + -0.000882f, -0.000435f, +0.000795f, +0.000099f, +0.002543f, +0.001010f + }, + { + -0.032059f, -0.326218f, -0.020159f, +0.101768f, -0.023864f, -0.000338f, +0.015181f, -0.008159f, +0.000881f, +0.003526f, + -0.008312f, -0.026310f, +0.003376f, -0.050267f, -0.001140f, -0.008312f, -0.027425f, +0.003570f, -0.019296f, -0.015322f, + -0.000744f, +0.008863f, -0.008851f, -0.004415f, +0.021982f, -0.005032f, -0.011268f, -0.011029f, +0.004981f, +0.010838f, + -0.002615f, -0.004669f, +0.010219f, -0.000807f, -0.000554f, -0.005990f, -0.001059f, -0.007793f, -0.011082f, +0.004544f, + +0.016905f, +0.006959f, -0.001176f, +0.001562f, -0.008774f, +0.001041f, +0.000542f, -0.002778f, -0.002254f, -0.006937f, + +0.004104f, +0.005537f, +0.002653f, -0.000513f, +0.000087f, +0.003943f, -0.001000f, +0.002403f, +0.000814f, -0.002974f, + -0.001131f, +0.001868f, -0.003709f, +0.000315f, +0.000607f, -0.002715f, -0.003695f, +0.000545f, -0.001071f, +0.001640f, + -0.005476f, +0.003753f, +0.001430f, -0.004005f, -0.001611f, +0.000470f, +0.005728f, +0.000459f, -0.001365f, -0.001700f, + +0.001489f, -0.000937f, +0.001782f, -0.000473f, +0.001070f, -0.001627f, +0.000439f, +0.001448f, +0.000507f, -0.000388f, + -0.001767f, +0.000964f, +0.001226f, -0.001869f, +0.000786f, -0.000726f + }, + { + +0.001139f, -0.006642f, +0.003279f, +0.002394f, -0.002198f, -0.001538f, +0.002437f, +0.006338f, -0.005175f, +0.001004f, + -0.001529f, -0.001072f, +0.012548f, +0.006648f, +0.081343f, -0.026702f, +0.011884f, +0.005279f, +0.017165f, -0.005058f, + -0.008558f, +0.009323f, +0.006224f, -0.021479f, +0.005953f, +0.014378f, -0.012372f, -0.017375f, +0.034126f, +0.041928f, + +0.028931f, +0.003430f, -0.011254f, +0.024238f, -0.003439f, +0.014980f, -0.010372f, +0.019733f, -0.012506f, +0.010511f, + +0.001299f, -0.001751f, -0.004176f, -0.000056f, -0.002379f, +0.005391f, -0.008918f, -0.005325f, +0.004375f, +0.005198f, + -0.002415f, +0.005502f, -0.010111f, -0.006603f, +0.003560f, +0.002446f, +0.002985f, -0.007681f, -0.005417f, +0.007532f, + +0.003066f, +0.001721f, -0.003743f, +0.001590f, +0.000600f, +0.000635f, -0.000407f, +0.002184f, +0.000302f, -0.001289f, + +0.000473f, -0.003601f, +0.000351f, -0.000421f, -0.003401f, -0.001768f, +0.000385f, -0.001396f, -0.000313f, +0.000617f, + -0.000433f, -0.000723f, +0.002467f, +0.003877f, -0.003238f, +0.000010f, -0.000806f, -0.004712f, -0.001047f, -0.001987f, + -0.001779f, -0.001421f, -0.002912f, -0.000300f, -0.000353f, -0.002214f + }, + { + -0.098732f, -0.035705f, +0.053940f, -0.027913f, +0.009098f, +0.010353f, -0.036908f, +0.006867f, +0.034255f, +0.018799f, + -0.001665f, -0.003784f, -0.020817f, -0.018475f, +0.001115f, +0.029316f, -0.009580f, +0.013186f, -0.005465f, +0.011025f, + -0.007390f, -0.025982f, +0.015383f, +0.011414f, +0.037625f, +0.001005f, +0.004790f, -0.009890f, -0.003734f, +0.022283f, + +0.004159f, -0.002421f, +0.005386f, -0.009808f, +0.015102f, -0.034673f, -0.006170f, -0.016986f, -0.004479f, +0.005165f, + +0.002848f, -0.000496f, +0.013291f, -0.002229f, +0.018780f, -0.001049f, -0.004784f, +0.003978f, -0.010035f, +0.004272f, + -0.000856f, -0.000601f, -0.004869f, -0.014519f, -0.000264f, +0.005038f, +0.001096f, -0.000745f, +0.005643f, -0.000189f, + -0.000473f, +0.001799f, +0.001250f, +0.007442f, -0.002380f, -0.007674f, +0.002381f, -0.003885f, +0.000571f, +0.006111f, + +0.002632f, -0.003649f, -0.001256f, +0.002099f, +0.003651f, -0.004749f, +0.005650f, +0.000529f, -0.001390f, +0.003048f, + -0.001248f, -0.001148f, -0.001543f, -0.002130f, -0.001195f, +0.001764f, +0.000558f, +0.000524f, +0.004050f, +0.000327f, + -0.001654f, -0.000089f, +0.000666f, +0.000518f, -0.002199f, +0.002436f + }, + { + +0.002743f, -0.004066f, +0.010247f, -0.006802f, -0.002429f, +0.001665f, -0.001439f, +0.000157f, +0.013141f, +0.003400f, + -0.012782f, +0.004721f, +0.005828f, +0.016615f, -0.020553f, +0.027163f, +0.004796f, +0.020327f, +0.013361f, -0.033662f, + -0.028077f, -0.004778f, -0.007874f, -0.024082f, +0.023715f, -0.022618f, -0.010293f, -0.013923f, +0.029197f, -0.012876f, + +0.002390f, -0.003194f, +0.004983f, +0.009134f, -0.006056f, +0.006724f, -0.000994f, -0.009375f, +0.024075f, -0.015703f, + +0.004454f, -0.004963f, -0.009628f, +0.010016f, +0.012899f, -0.005539f, -0.003642f, -0.001624f, +0.011460f, -0.007720f, + -0.006220f, +0.005134f, +0.006173f, +0.010424f, -0.006262f, +0.002915f, +0.001219f, +0.002751f, +0.004833f, +0.001019f, + +0.000187f, -0.006909f, +0.001635f, -0.003190f, +0.000912f, +0.004298f, -0.004917f, +0.006484f, -0.000089f, +0.001214f, + +0.000195f, -0.001019f, -0.001816f, -0.001844f, +0.001265f, +0.000355f, -0.002297f, +0.001639f, +0.002171f, -0.001784f, + +0.000241f, -0.001533f, +0.002350f, -0.002969f, -0.001473f, +0.001258f, +0.001974f, +0.001148f, -0.002002f, -0.000370f, + -0.001488f, -0.002231f, +0.000630f, +0.000201f, -0.000943f, +0.000111f + }, + { + -0.015904f, -0.289872f, -0.048400f, -0.019899f, -0.004479f, -0.012396f, -0.021709f, +0.004481f, -0.006257f, +0.015638f, + +0.004125f, +0.032632f, +0.000879f, -0.029447f, +0.033257f, -0.026184f, -0.031238f, +0.009136f, +0.005917f, +0.001030f, + -0.002161f, +0.010813f, +0.008391f, -0.013518f, -0.002181f, -0.020856f, -0.003839f, -0.011582f, -0.006733f, -0.014907f, + +0.004685f, -0.005571f, -0.013705f, +0.005793f, +0.002242f, -0.010289f, -0.000321f, -0.001693f, +0.007144f, +0.006485f, + +0.002237f, +0.000619f, +0.008008f, -0.003513f, +0.018194f, +0.001153f, -0.002184f, -0.004794f, +0.009078f, -0.001535f, + -0.000314f, +0.000302f, +0.004752f, -0.013754f, +0.003171f, +0.000201f, +0.002574f, -0.007910f, -0.001243f, +0.004162f, + +0.008218f, -0.005565f, +0.001430f, -0.003686f, +0.006403f, -0.003128f, +0.001752f, +0.001242f, -0.001972f, +0.010634f, + +0.000407f, -0.003552f, +0.004799f, -0.005879f, +0.001205f, +0.001123f, +0.001155f, +0.000645f, -0.000402f, +0.000137f, + -0.003765f, -0.002434f, -0.001167f, -0.003094f, +0.002240f, +0.000891f, -0.001378f, +0.000709f, +0.000890f, -0.001043f, + +0.001095f, -0.001140f, -0.002018f, -0.000150f, +0.001853f, -0.000265f + }, + { + -0.004059f, -0.087096f, +0.002600f, +0.008847f, -0.001268f, +0.017610f, +0.018885f, +0.009742f, -0.008732f, +0.004172f, + +0.000222f, +0.012247f, +0.033020f, -0.022683f, +0.010303f, +0.030044f, -0.008920f, +0.019966f, -0.004143f, -0.017811f, + -0.016254f, +0.001176f, -0.011581f, -0.005623f, -0.003210f, -0.010695f, +0.003425f, -0.010598f, +0.011084f, -0.017245f, + +0.010661f, -0.012940f, -0.013959f, -0.011677f, -0.005813f, -0.010321f, +0.003312f, -0.001622f, -0.001171f, -0.006105f, + -0.003412f, +0.013183f, +0.009973f, -0.006536f, -0.004970f, +0.001618f, +0.008438f, +0.002424f, -0.008530f, -0.003067f, + +0.009266f, -0.007284f, -0.002875f, -0.007085f, +0.003818f, +0.007235f, +0.004630f, +0.000831f, -0.003030f, +0.001080f, + +0.002979f, -0.001395f, -0.002291f, +0.001208f, +0.009367f, +0.004143f, +0.000055f, +0.005603f, -0.003405f, -0.000174f, + -0.000516f, +0.000528f, -0.003876f, +0.002284f, -0.000760f, +0.001867f, +0.001438f, +0.003878f, -0.001638f, -0.000014f, + -0.001659f, -0.001820f, -0.001875f, -0.001436f, -0.002071f, +0.001408f, +0.004912f, +0.001087f, -0.001033f, -0.000873f, + +0.000423f, +0.002109f, -0.000350f, -0.000190f, +0.002223f, -0.000069f + }, + { + +0.045782f, -0.083777f, +0.025583f, -0.012092f, +0.005782f, +0.018898f, -0.032969f, +0.020783f, -0.009304f, -0.033519f, + +0.031924f, -0.025135f, +0.005953f, -0.007057f, +0.011132f, -0.027714f, +0.020235f, +0.010224f, +0.018762f, -0.006845f, + +0.005594f, +0.003541f, +0.018208f, +0.017541f, -0.013772f, -0.005081f, -0.005982f, -0.009680f, -0.008133f, -0.009463f, + -0.007764f, -0.002498f, +0.001381f, -0.005953f, -0.006239f, -0.001660f, -0.023969f, -0.016402f, +0.000805f, +0.005802f, + +0.000754f, -0.003092f, +0.015716f, +0.009579f, +0.008215f, +0.002496f, -0.000652f, -0.000925f, +0.013803f, +0.007148f, + -0.007592f, +0.004381f, +0.000838f, -0.001916f, -0.000493f, -0.008722f, +0.001983f, +0.005266f, -0.001860f, -0.001387f, + +0.008213f, +0.004822f, +0.003287f, +0.001910f, +0.003655f, -0.001880f, +0.010703f, +0.000706f, +0.004334f, -0.001340f, + -0.001901f, +0.000100f, +0.002674f, -0.001637f, -0.000472f, +0.002851f, +0.000680f, +0.004324f, -0.003774f, +0.001496f, + +0.000126f, +0.003279f, -0.002611f, +0.003150f, +0.000759f, -0.002927f, -0.000687f, +0.001811f, -0.001560f, +0.001085f, + +0.002548f, +0.003669f, -0.002700f, +0.000897f, +0.000121f, +0.000164f + }, + { + -0.005271f, +0.010612f, +0.000500f, +0.001638f, +0.017222f, +0.005432f, -0.021582f, +0.005851f, -0.009514f, -0.001757f, + +0.005687f, +0.006570f, -0.006385f, -0.052441f, -0.012063f, +0.028973f, -0.032413f, +0.014437f, -0.029485f, +0.013280f, + -0.045503f, -0.007668f, -0.017518f, +0.023851f, +0.011987f, +0.025760f, +0.001580f, -0.000609f, +0.009890f, +0.000260f, + +0.021564f, -0.011683f, +0.031892f, -0.010746f, +0.015488f, +0.002583f, +0.011986f, -0.006782f, +0.008732f, +0.003741f, + +0.020082f, -0.009385f, +0.005552f, -0.007858f, +0.002390f, +0.004143f, -0.001429f, -0.003510f, +0.003369f, +0.007137f, + -0.001629f, +0.003852f, -0.004091f, -0.004937f, -0.004408f, +0.002275f, +0.002617f, +0.005656f, +0.001988f, +0.007026f, + -0.016353f, +0.000749f, +0.006698f, -0.003234f, -0.001312f, +0.000108f, -0.005789f, -0.002862f, +0.007371f, +0.002212f, + -0.001315f, +0.000044f, -0.002078f, +0.001979f, +0.002055f, +0.004028f, -0.004255f, +0.002443f, -0.002595f, -0.000412f, + +0.002499f, +0.001249f, -0.001382f, -0.000490f, +0.000231f, +0.001654f, +0.000026f, +0.001688f, -0.003067f, +0.000851f, + +0.002085f, -0.002749f, +0.000260f, -0.001688f, +0.000153f, +0.001158f + }, + { + -0.000364f, -0.154633f, +0.032738f, +0.013306f, -0.008519f, -0.052068f, +0.000343f, -0.005461f, -0.015451f, +0.017063f, + +0.005652f, +0.012507f, -0.006724f, -0.017802f, +0.043037f, -0.005717f, -0.036925f, -0.013866f, +0.003111f, -0.009143f, + -0.015755f, -0.001183f, -0.003376f, -0.008928f, +0.015852f, +0.015469f, +0.002363f, +0.018320f, +0.003976f, +0.000017f, + +0.004552f, -0.000770f, -0.010707f, -0.004838f, -0.011711f, +0.002316f, +0.003459f, -0.014055f, -0.008443f, -0.005616f, + +0.002071f, -0.009451f, -0.007603f, -0.012607f, -0.015200f, -0.009025f, +0.005538f, +0.003922f, -0.018644f, -0.006706f, + +0.009858f, -0.004474f, -0.003046f, +0.004401f, -0.003429f, -0.003083f, -0.005597f, +0.000199f, +0.003390f, +0.006267f, + +0.004274f, -0.004867f, +0.005964f, +0.007345f, +0.003223f, -0.000361f, -0.001666f, +0.001669f, -0.000597f, +0.003846f, + +0.002750f, -0.000811f, -0.001674f, -0.004373f, +0.003502f, -0.000110f, +0.002821f, +0.001118f, +0.001435f, -0.001273f, + -0.002739f, +0.001721f, -0.003297f, -0.005674f, +0.001359f, +0.000364f, +0.001611f, +0.000293f, -0.000377f, +0.000369f, + -0.002060f, -0.002184f, +0.000144f, -0.001658f, -0.002024f, -0.001759f + }, + { + +0.009395f, +0.041615f, -0.005477f, +0.006373f, -0.014745f, +0.025850f, +0.000502f, -0.000494f, +0.012825f, +0.014884f, + -0.012775f, -0.005187f, +0.016725f, -0.002720f, +0.189555f, -0.014722f, -0.018908f, -0.038058f, +0.021790f, +0.031759f, + -0.018280f, +0.012086f, -0.006535f, +0.004992f, -0.003207f, -0.013388f, -0.001578f, -0.008446f, -0.009886f, -0.038312f, + -0.001116f, -0.007531f, -0.000914f, -0.016175f, +0.015467f, -0.004468f, +0.000463f, +0.006876f, -0.004907f, -0.003288f, + -0.019530f, -0.004711f, +0.024234f, -0.002242f, +0.011746f, -0.004528f, +0.020105f, +0.010051f, -0.026903f, +0.002075f, + +0.001777f, -0.001730f, -0.006870f, -0.001196f, -0.006246f, +0.002410f, +0.008594f, +0.002773f, +0.009464f, +0.013194f, + +0.001723f, +0.000694f, -0.000095f, -0.008267f, -0.006714f, -0.004928f, -0.009559f, +0.001154f, -0.002086f, +0.002346f, + -0.006295f, +0.002711f, -0.000158f, -0.006450f, -0.001832f, -0.004362f, -0.004065f, -0.000028f, +0.002553f, +0.009603f, + -0.004523f, +0.001354f, +0.002932f, -0.001708f, -0.004621f, +0.002827f, +0.000771f, -0.004993f, -0.000656f, +0.000035f, + +0.000255f, -0.003013f, -0.001865f, -0.001073f, +0.004357f, +0.000497f + } + }, + { + { + -0.025647f, +0.366263f, +0.067842f, +0.018345f, +0.033540f, +0.006520f, -0.002893f, +0.035712f, -0.023831f, +0.033741f, + +0.030535f, -0.007944f, +0.004321f, -0.028394f, +0.003904f, +0.011715f, -0.026351f, -0.004698f, -0.005017f, +0.020818f, + -0.004029f, +0.006565f, +0.000906f, -0.000082f, -0.002631f, -0.013653f, -0.016457f, -0.000462f, +0.006188f, +0.000967f, + +0.004252f, +0.007638f, +0.004967f, -0.007537f, -0.013907f, -0.003245f, +0.008632f, +0.004045f, +0.007104f, -0.000714f, + -0.005114f, -0.014762f, +0.001370f, -0.017522f, -0.000237f, -0.014202f, +0.002951f, -0.004495f, +0.003054f, +0.014026f, + -0.008295f, +0.001745f, -0.002400f, -0.009594f, +0.002246f, -0.003758f, +0.004892f, +0.001646f, -0.000511f, -0.000698f, + -0.001232f, +0.000246f, -0.000870f, -0.008328f, -0.000152f, +0.002515f, -0.001970f, +0.001047f, -0.001295f, +0.003276f, + -0.004751f, -0.002636f, -0.002564f, -0.002624f, -0.002069f, -0.005562f, +0.005729f, -0.002969f, +0.000757f, +0.004506f, + +0.003709f, -0.001525f, -0.001347f, -0.002583f, -0.003223f, -0.000893f, +0.001045f, +0.000175f, +0.003303f, +0.002926f, + +0.000758f, -0.001667f, -0.001715f, +0.001195f, -0.001936f, +0.000780f + }, + { + -0.000543f, -0.101052f, +0.016387f, +0.032669f, +0.004216f, -0.007478f, +0.001648f, -0.017773f, -0.004980f, -0.014426f, + +0.030744f, +0.015200f, -0.019008f, +0.022828f, -0.016707f, +0.008172f, -0.018256f, -0.014951f, +0.002346f, -0.017695f, + +0.008971f, +0.003941f, -0.031902f, -0.002903f, -0.000575f, -0.005841f, -0.035887f, -0.004293f, +0.011420f, +0.040936f, + -0.007276f, +0.015022f, -0.000569f, -0.005889f, -0.004094f, -0.005518f, -0.016306f, +0.014068f, +0.000798f, -0.003058f, + +0.004724f, +0.015791f, +0.003735f, +0.003529f, +0.003398f, +0.001663f, -0.018264f, -0.002465f, -0.005837f, +0.010207f, + +0.007254f, -0.008774f, -0.004980f, +0.000199f, -0.013591f, +0.003538f, +0.004721f, -0.002009f, -0.001400f, -0.001237f, + +0.010640f, -0.006077f, -0.002670f, -0.000518f, +0.008684f, +0.003099f, +0.002956f, +0.000718f, +0.002477f, +0.001197f, + +0.002913f, -0.002485f, +0.004565f, -0.000416f, +0.000449f, +0.001731f, -0.004273f, +0.002789f, -0.001751f, +0.000712f, + -0.002851f, -0.001649f, -0.000168f, -0.001526f, -0.003938f, +0.002275f, +0.000746f, -0.000876f, -0.000956f, +0.000807f, + -0.000603f, +0.000767f, -0.000655f, +0.002718f, +0.000681f, -0.000560f + }, + { + +0.009906f, +0.100229f, -0.064466f, -0.047832f, -0.019256f, +0.014852f, -0.001239f, -0.013597f, -0.021065f, +0.004012f, + +0.055803f, +0.007402f, -0.008859f, -0.012608f, -0.004144f, +0.015054f, -0.014688f, +0.011662f, +0.004577f, -0.006306f, + -0.016538f, -0.012735f, -0.005619f, +0.023006f, +0.007098f, -0.007941f, +0.012483f, +0.009002f, +0.017084f, +0.003922f, + +0.000353f, -0.000366f, +0.003689f, +0.005180f, -0.015234f, +0.006024f, -0.008689f, +0.013658f, -0.011325f, -0.018645f, + -0.002469f, -0.010069f, -0.011037f, -0.005965f, +0.018173f, +0.021376f, +0.020372f, +0.004706f, +0.015567f, -0.007456f, + -0.004939f, +0.009775f, -0.007806f, -0.003639f, +0.009774f, +0.005837f, -0.006858f, -0.009220f, -0.005883f, +0.005757f, + +0.003670f, +0.001388f, -0.003481f, -0.006796f, -0.003728f, +0.004040f, +0.002947f, +0.001210f, -0.001768f, +0.003065f, + +0.000672f, +0.000558f, +0.004123f, +0.001069f, +0.000643f, -0.000293f, +0.006997f, +0.002460f, +0.002124f, +0.000947f, + +0.000795f, +0.001840f, -0.002087f, -0.002123f, -0.002400f, +0.000913f, -0.000636f, -0.001917f, -0.002078f, +0.000134f, + +0.000737f, -0.004514f, +0.000253f, -0.000327f, +0.001491f, +0.000813f + }, + { + -0.008120f, -0.227064f, +0.021198f, +0.112222f, -0.009170f, -0.012254f, +0.007459f, -0.011228f, -0.006581f, -0.005898f, + -0.012115f, -0.002394f, -0.005866f, -0.002674f, +0.019528f, -0.016884f, +0.018703f, +0.011547f, -0.002335f, -0.014016f, + +0.012251f, +0.000701f, +0.018886f, +0.023301f, +0.016637f, +0.014709f, -0.004432f, +0.000890f, +0.024248f, -0.009691f, + +0.010895f, +0.021926f, +0.005861f, +0.009087f, -0.001335f, +0.008556f, -0.003152f, +0.006639f, -0.005550f, -0.003457f, + -0.005431f, -0.010405f, -0.011975f, -0.007254f, -0.005447f, +0.001892f, -0.002477f, +0.006774f, -0.005676f, +0.003231f, + +0.002226f, -0.007278f, +0.008297f, +0.007594f, -0.003142f, -0.000800f, +0.004831f, +0.004034f, +0.004354f, +0.000047f, + +0.002021f, -0.001105f, +0.003935f, -0.002009f, +0.003311f, +0.005097f, +0.006280f, +0.003334f, -0.002389f, +0.001613f, + +0.002153f, +0.003859f, -0.004116f, +0.000163f, +0.002603f, -0.002285f, -0.003892f, +0.001451f, +0.002289f, +0.001566f, + +0.001126f, +0.001811f, -0.001791f, -0.002499f, -0.001470f, +0.000542f, -0.001662f, -0.000119f, +0.000230f, +0.000267f, + +0.000806f, +0.000003f, +0.000907f, +0.001609f, +0.000166f, +0.000247f + }, + { + +0.002693f, +0.054382f, -0.008615f, +0.006393f, -0.003572f, +0.001591f, +0.004992f, -0.007401f, -0.000983f, +0.001613f, + -0.003651f, +0.018568f, +0.003458f, +0.015158f, -0.011986f, -0.016915f, -0.023840f, +0.027819f, +0.043330f, -0.031962f, + -0.012797f, -0.014354f, -0.012446f, -0.007604f, +0.001089f, +0.032814f, -0.003248f, +0.017535f, +0.011570f, -0.000677f, + +0.004050f, +0.010350f, +0.009851f, +0.003504f, +0.005346f, -0.004242f, +0.017058f, -0.004545f, +0.014312f, -0.004028f, + +0.001538f, -0.003477f, +0.001681f, +0.001984f, +0.002159f, -0.000732f, +0.001772f, +0.004445f, +0.004057f, +0.004594f, + -0.006129f, -0.002600f, -0.000842f, +0.012244f, +0.006255f, -0.012907f, +0.014009f, +0.002869f, -0.003336f, +0.012034f, + +0.006458f, +0.005374f, +0.001342f, -0.003271f, +0.001390f, +0.002309f, +0.000048f, -0.000004f, +0.004905f, +0.000052f, + +0.000730f, +0.004160f, +0.002521f, +0.001928f, -0.004171f, +0.000872f, +0.002263f, +0.001950f, +0.003073f, -0.001024f, + +0.002492f, -0.001033f, -0.001315f, -0.002195f, -0.000769f, -0.001165f, +0.000343f, -0.000883f, -0.003035f, +0.000276f, + -0.003377f, +0.002175f, +0.000824f, +0.000895f, +0.001987f, -0.000885f + }, + { + -0.013429f, -0.422868f, +0.010710f, +0.080244f, +0.010914f, +0.001576f, +0.019343f, -0.008527f, -0.018994f, -0.019781f, + -0.000918f, +0.010869f, -0.025070f, -0.030498f, -0.009683f, -0.017911f, -0.011267f, -0.015120f, -0.016208f, -0.012935f, + -0.011027f, +0.014988f, -0.006261f, +0.003879f, +0.014977f, -0.012675f, +0.006454f, -0.020541f, +0.002392f, +0.005549f, + -0.002442f, -0.000360f, +0.016166f, -0.008518f, +0.009052f, -0.001073f, -0.009916f, -0.004416f, -0.009225f, -0.002692f, + +0.014169f, +0.018121f, -0.000295f, -0.001929f, -0.002237f, -0.005487f, +0.005644f, -0.014529f, +0.001591f, -0.000107f, + +0.003264f, -0.002954f, +0.003397f, -0.004348f, +0.007442f, +0.005153f, -0.005554f, +0.001980f, +0.006724f, -0.010061f, + +0.000647f, +0.007181f, -0.006475f, -0.000930f, +0.000906f, -0.003042f, +0.001451f, -0.000099f, -0.001594f, -0.001225f, + +0.002981f, -0.002089f, +0.001651f, -0.003423f, +0.000782f, +0.000890f, +0.002733f, +0.004185f, -0.004431f, +0.000100f, + +0.000731f, +0.000185f, -0.000322f, +0.001371f, -0.001841f, -0.000352f, +0.000884f, +0.000115f, +0.002534f, -0.003411f, + +0.000893f, +0.001488f, -0.000977f, +0.000387f, +0.000389f, -0.000825f + }, + { + +0.000998f, +0.002749f, +0.002208f, +0.001410f, -0.002022f, +0.000768f, +0.001002f, +0.006076f, -0.008424f, +0.000744f, + +0.000536f, +0.010068f, -0.003694f, +0.011839f, +0.078404f, +0.001993f, -0.000279f, +0.007055f, +0.012862f, +0.000192f, + +0.000174f, +0.004667f, +0.029667f, -0.039310f, -0.007205f, +0.010213f, -0.003898f, +0.004904f, +0.006619f, +0.066304f, + +0.029115f, -0.026066f, +0.010105f, +0.001606f, +0.013636f, +0.006013f, -0.005040f, +0.003946f, -0.005725f, +0.004515f, + +0.008531f, -0.004006f, -0.000095f, -0.011667f, +0.000610f, +0.001030f, +0.001511f, -0.008665f, -0.000064f, +0.002372f, + -0.007009f, +0.007578f, -0.003983f, -0.014825f, +0.005084f, +0.003376f, -0.003679f, -0.000023f, -0.008990f, +0.010180f, + +0.000638f, +0.002707f, -0.000913f, -0.000040f, -0.001609f, +0.000760f, +0.002177f, -0.001817f, +0.000305f, +0.000703f, + -0.005926f, +0.001310f, -0.000281f, +0.001498f, -0.000550f, -0.004457f, -0.002276f, +0.004033f, +0.000188f, -0.002342f, + +0.001320f, +0.002160f, +0.002330f, +0.000610f, -0.001355f, -0.000116f, -0.000812f, -0.005183f, -0.002027f, -0.001643f, + -0.001982f, -0.000335f, -0.003389f, -0.000954f, -0.000910f, -0.001610f + }, + { + +0.123324f, -0.210513f, -0.076212f, -0.052175f, +0.042631f, -0.011477f, -0.020639f, +0.016242f, +0.033074f, +0.006729f, + +0.006122f, -0.000108f, -0.030211f, -0.008452f, -0.014403f, +0.028409f, -0.006584f, +0.008410f, +0.003770f, -0.002484f, + -0.012089f, -0.010916f, +0.018916f, +0.019316f, +0.021207f, +0.004597f, -0.002572f, -0.006358f, +0.010527f, +0.001309f, + -0.000512f, +0.015548f, -0.001372f, +0.000259f, -0.004866f, -0.026292f, -0.009118f, -0.027783f, +0.012553f, -0.005310f, + +0.009769f, -0.001807f, +0.005738f, +0.005121f, +0.008051f, +0.013962f, -0.013225f, -0.002811f, +0.001005f, -0.002755f, + -0.004992f, +0.004983f, -0.005643f, -0.007221f, -0.003701f, +0.005658f, +0.001361f, -0.001442f, +0.001194f, +0.003957f, + +0.000527f, -0.006452f, +0.011174f, +0.002760f, -0.000921f, -0.003384f, -0.004459f, -0.001779f, +0.006198f, +0.003760f, + +0.001314f, -0.002667f, -0.000267f, -0.000207f, +0.004028f, +0.001708f, +0.000126f, +0.003616f, -0.002960f, +0.000714f, + +0.002966f, -0.002561f, -0.004155f, -0.001329f, -0.001301f, +0.003748f, +0.000687f, -0.001027f, +0.002666f, +0.000428f, + +0.000017f, -0.001198f, +0.001037f, -0.000502f, +0.000074f, -0.001370f + }, + { + -0.000322f, +0.011957f, +0.003842f, -0.001728f, -0.004438f, +0.001158f, -0.000238f, -0.001481f, +0.010860f, +0.004349f, + -0.016968f, +0.006677f, +0.022088f, -0.031658f, +0.022326f, +0.030822f, +0.014106f, +0.014208f, -0.017331f, -0.031254f, + +0.008199f, -0.036111f, +0.020272f, -0.048952f, -0.000973f, +0.003203f, -0.013508f, +0.002936f, +0.001588f, +0.014909f, + -0.008746f, -0.001711f, +0.005169f, +0.013123f, -0.010099f, +0.006739f, +0.001951f, -0.000034f, +0.015070f, -0.009921f, + -0.002817f, -0.002645f, +0.001713f, +0.003864f, +0.003842f, +0.005209f, -0.008929f, +0.004030f, +0.008044f, -0.003059f, + -0.011568f, +0.009424f, +0.003396f, +0.013125f, -0.008277f, +0.000484f, -0.000648f, +0.006007f, +0.001453f, +0.005623f, + -0.004409f, +0.001813f, -0.003637f, -0.002909f, +0.003562f, -0.005861f, +0.000234f, +0.002627f, +0.004047f, +0.001886f, + -0.004956f, +0.001877f, -0.001820f, -0.001977f, +0.000522f, +0.002058f, -0.000793f, -0.002223f, +0.004495f, -0.003104f, + -0.000395f, -0.000158f, +0.000015f, -0.000782f, -0.002666f, +0.002244f, +0.002510f, -0.000184f, +0.000061f, -0.000130f, + -0.000779f, -0.002544f, -0.000742f, -0.000109f, +0.000380f, -0.001032f + }, + { + +0.011240f, -0.341420f, -0.030824f, -0.034759f, +0.023643f, -0.037394f, -0.037886f, -0.001822f, +0.028006f, +0.020793f, + +0.002947f, +0.006104f, +0.007667f, -0.015367f, -0.008460f, -0.007980f, -0.021425f, +0.014715f, +0.008409f, -0.000886f, + +0.006027f, +0.014074f, -0.016531f, -0.001158f, -0.009306f, -0.000443f, -0.017661f, -0.008964f, +0.000528f, -0.005933f, + -0.018560f, +0.010162f, -0.015330f, +0.010353f, +0.003750f, -0.005953f, -0.011839f, +0.005387f, +0.011858f, +0.007452f, + +0.001492f, +0.003545f, +0.006844f, -0.004077f, +0.004275f, +0.017543f, -0.011478f, +0.000735f, +0.004842f, +0.006343f, + -0.002527f, -0.004275f, +0.000998f, -0.000168f, -0.001651f, -0.004794f, +0.001664f, -0.002238f, -0.002747f, +0.002908f, + +0.004162f, +0.000116f, -0.001231f, +0.001352f, +0.003993f, -0.000445f, -0.000733f, -0.000841f, +0.001041f, +0.001092f, + +0.002765f, +0.001266f, +0.001822f, +0.000680f, +0.002003f, +0.001775f, -0.001838f, -0.001866f, +0.002980f, +0.000608f, + -0.003155f, -0.001671f, -0.000034f, -0.004920f, +0.000539f, +0.003230f, +0.001972f, -0.002547f, +0.000044f, +0.002627f, + -0.002298f, +0.002179f, -0.000664f, -0.001140f, +0.000243f, +0.003176f + }, + { + +0.006043f, -0.095977f, +0.009845f, -0.002797f, +0.003173f, +0.023242f, +0.022813f, -0.006944f, +0.008377f, -0.004302f, + +0.009714f, +0.002245f, +0.022282f, +0.012242f, +0.007597f, +0.005213f, +0.024180f, +0.003662f, -0.007640f, -0.022468f, + +0.002449f, -0.015311f, -0.005121f, -0.003462f, -0.014400f, -0.013775f, +0.006820f, -0.007602f, -0.003759f, +0.007113f, + -0.002329f, -0.009480f, -0.021727f, -0.013964f, -0.006704f, +0.000009f, -0.000149f, -0.006206f, -0.012867f, +0.001264f, + -0.003342f, +0.013347f, +0.004539f, -0.002659f, -0.002153f, +0.002404f, +0.003318f, -0.006026f, +0.002295f, -0.002406f, + +0.003454f, -0.004795f, -0.004030f, -0.007712f, +0.005390f, +0.002636f, +0.007247f, -0.000199f, +0.000478f, -0.002280f, + +0.003911f, +0.002971f, -0.007057f, +0.006773f, +0.005444f, +0.004890f, +0.006040f, +0.003217f, -0.000298f, -0.003207f, + -0.003073f, -0.001316f, -0.000778f, -0.000170f, +0.003680f, +0.000055f, -0.000328f, +0.003341f, +0.002787f, -0.003453f, + -0.001392f, -0.003577f, +0.000627f, +0.000492f, -0.004085f, +0.001720f, +0.003989f, +0.000314f, -0.001355f, -0.001227f, + +0.001968f, +0.000121f, -0.000753f, +0.001708f, +0.001861f, -0.001420f + }, + { + -0.063224f, +0.064837f, +0.023609f, -0.000171f, +0.016411f, -0.047169f, -0.002791f, +0.037731f, -0.015979f, -0.016445f, + -0.002680f, -0.010972f, +0.008192f, -0.002001f, -0.007220f, -0.016947f, +0.030219f, +0.004503f, +0.001987f, +0.004883f, + +0.002452f, -0.001614f, +0.024467f, +0.010316f, +0.008288f, -0.008854f, -0.004478f, -0.012389f, -0.010618f, -0.000898f, + -0.014923f, +0.003913f, -0.004616f, -0.014281f, -0.003939f, -0.013706f, -0.002334f, -0.029333f, +0.003380f, +0.011665f, + -0.005729f, +0.012190f, +0.011836f, +0.007715f, -0.001727f, +0.015876f, -0.006488f, -0.002426f, +0.016958f, +0.012508f, + -0.004674f, -0.004641f, +0.007211f, -0.001023f, -0.011067f, +0.001174f, -0.001937f, +0.000562f, +0.003650f, +0.001428f, + +0.003520f, -0.001934f, +0.006563f, -0.002113f, +0.007984f, +0.002068f, +0.001349f, +0.005313f, +0.002249f, -0.000515f, + -0.005078f, +0.003585f, +0.004568f, -0.001353f, +0.002438f, -0.000941f, +0.001451f, -0.000948f, +0.001353f, -0.000688f, + -0.000723f, +0.003947f, +0.000408f, +0.001941f, -0.002078f, -0.001768f, +0.000599f, -0.002086f, +0.001449f, -0.000557f, + +0.002429f, +0.003463f, -0.002046f, +0.004322f, -0.002713f, +0.001468f + }, + { + +0.004978f, +0.034531f, -0.018087f, -0.001310f, +0.000123f, +0.005080f, -0.002888f, -0.009890f, +0.007968f, -0.005254f, + +0.005946f, +0.006976f, -0.020453f, -0.024136f, -0.025260f, +0.029320f, -0.033664f, -0.005376f, +0.001750f, +0.011479f, + -0.021483f, -0.079590f, +0.066407f, -0.026254f, +0.034477f, +0.037865f, +0.002474f, -0.029726f, +0.021907f, -0.001464f, + +0.013002f, +0.018877f, -0.000964f, +0.008805f, -0.001919f, +0.011404f, +0.008972f, -0.002562f, +0.009804f, +0.008660f, + +0.011744f, +0.005605f, -0.004231f, +0.000641f, -0.000008f, +0.007274f, -0.000755f, -0.001799f, +0.003220f, +0.003122f, + +0.000080f, +0.001350f, +0.000212f, +0.000073f, -0.011167f, +0.009476f, -0.001458f, +0.002135f, +0.004677f, +0.001268f, + -0.010574f, -0.006792f, +0.006871f, -0.001021f, -0.003355f, -0.000263f, -0.000138f, -0.010015f, +0.013223f, -0.001824f, + +0.001734f, -0.002756f, -0.001939f, +0.003547f, +0.000993f, +0.003727f, +0.001098f, -0.001689f, +0.000664f, +0.002336f, + -0.003869f, -0.001200f, +0.001603f, +0.001419f, +0.000659f, +0.001323f, -0.000018f, +0.004606f, -0.004053f, +0.000076f, + +0.001661f, -0.002673f, +0.000093f, -0.001080f, +0.001177f, +0.002269f + }, + { + -0.030834f, -0.099807f, +0.013495f, -0.001258f, -0.000529f, -0.034558f, -0.023609f, -0.012537f, +0.006390f, +0.017900f, + -0.030546f, +0.049529f, -0.026754f, +0.046094f, -0.031629f, -0.010045f, -0.021577f, -0.012201f, -0.016653f, -0.015666f, + -0.016036f, -0.001090f, +0.008552f, -0.001223f, +0.000013f, +0.018654f, +0.009466f, +0.014859f, -0.001340f, -0.002171f, + +0.006597f, +0.006805f, -0.001189f, -0.013280f, -0.010690f, -0.006430f, -0.004836f, -0.002810f, -0.003851f, -0.015068f, + +0.005780f, -0.018019f, +0.006208f, -0.011338f, -0.020808f, +0.006928f, -0.006529f, +0.004219f, -0.016183f, +0.000863f, + -0.002522f, -0.006202f, -0.000021f, +0.002203f, -0.002431f, +0.000500f, -0.006359f, -0.001112f, -0.000739f, +0.012999f, + +0.002467f, -0.000133f, +0.003345f, +0.001129f, +0.004425f, +0.002089f, -0.006151f, +0.003538f, -0.000386f, +0.007600f, + +0.000200f, -0.001669f, -0.000039f, +0.001842f, +0.001172f, -0.003726f, +0.000571f, +0.003921f, +0.001024f, -0.001872f, + -0.001670f, +0.002019f, -0.003073f, -0.002498f, -0.001527f, +0.002294f, +0.000994f, +0.001518f, -0.001858f, +0.000642f, + -0.002728f, +0.000533f, -0.002988f, -0.001133f, -0.000223f, -0.001157f + }, + { + -0.010783f, +0.015512f, +0.027078f, +0.015237f, -0.004103f, +0.000291f, +0.005702f, +0.008483f, +0.008576f, +0.013969f, + +0.000636f, -0.005189f, -0.001510f, +0.079230f, +0.074696f, +0.003793f, -0.014813f, -0.024812f, +0.019045f, +0.014813f, + -0.016534f, +0.010695f, -0.007381f, -0.005237f, +0.005363f, -0.022487f, -0.024811f, -0.010040f, -0.000700f, +0.006187f, + -0.019869f, -0.008013f, -0.012912f, -0.007732f, +0.010125f, -0.017984f, +0.004684f, +0.014727f, -0.003657f, -0.014718f, + -0.003375f, +0.003463f, +0.012643f, -0.006104f, +0.002347f, +0.021497f, +0.007404f, -0.001824f, -0.004573f, -0.004336f, + -0.002028f, +0.001795f, -0.007454f, -0.004588f, +0.000395f, +0.005469f, +0.009232f, +0.003695f, +0.007759f, +0.010109f, + +0.004204f, -0.003080f, +0.004347f, -0.008688f, -0.004101f, -0.011213f, -0.004097f, -0.004230f, +0.004009f, +0.000025f, + -0.005092f, +0.000009f, -0.001628f, -0.003084f, -0.004898f, -0.001307f, -0.002787f, -0.000599f, +0.000690f, +0.003721f, + +0.003452f, -0.006265f, +0.005242f, +0.000190f, -0.000964f, -0.002400f, +0.001859f, -0.001816f, -0.000559f, -0.000114f, + -0.001896f, -0.002300f, -0.002821f, +0.001382f, +0.003279f, +0.000829f + } + }, + { + { + +0.035018f, +0.239980f, -0.052332f, -0.017259f, -0.002825f, +0.004293f, -0.010266f, +0.040083f, -0.023747f, -0.027593f, + -0.037268f, -0.043601f, +0.000181f, -0.032665f, +0.001047f, +0.014380f, -0.010490f, +0.014891f, +0.002250f, +0.030241f, + +0.002972f, -0.008825f, -0.012835f, -0.007138f, -0.004193f, +0.000374f, -0.008281f, -0.011061f, -0.013503f, -0.013633f, + -0.017722f, -0.011060f, +0.005005f, +0.001768f, -0.003834f, +0.008803f, +0.004757f, -0.006199f, -0.001923f, +0.007813f, + +0.004090f, -0.005585f, +0.017244f, -0.010475f, -0.003834f, -0.017579f, +0.004693f, +0.004518f, +0.001574f, +0.007927f, + -0.010073f, +0.006150f, -0.001787f, -0.003885f, +0.005797f, -0.004974f, +0.008216f, +0.012277f, +0.008733f, +0.000552f, + +0.003406f, +0.000005f, -0.004020f, -0.006317f, -0.000016f, +0.002275f, +0.001073f, +0.001951f, +0.000966f, +0.001415f, + -0.001351f, +0.001112f, -0.003103f, -0.001747f, +0.004523f, -0.000015f, +0.005875f, -0.004967f, -0.001199f, +0.001981f, + +0.000336f, -0.001559f, +0.001570f, +0.001262f, +0.000587f, -0.001269f, +0.000777f, +0.000549f, -0.000935f, -0.001220f, + +0.001753f, -0.000169f, -0.000435f, +0.002369f, -0.001959f, +0.000722f + }, + { + +0.000365f, -0.099400f, +0.014483f, +0.015351f, -0.003123f, -0.004192f, +0.007008f, -0.009654f, +0.006366f, -0.002153f, + +0.024672f, -0.000855f, -0.010632f, +0.008443f, -0.047698f, +0.034834f, -0.014817f, -0.025206f, +0.028645f, +0.009071f, + -0.005117f, -0.016398f, -0.039187f, -0.005352f, -0.025319f, -0.013321f, -0.006416f, +0.011524f, +0.015492f, +0.023544f, + -0.003597f, +0.021817f, +0.007375f, -0.001167f, -0.017965f, -0.012008f, -0.018483f, +0.005851f, -0.006743f, -0.000327f, + +0.005841f, +0.001805f, -0.014359f, -0.002385f, -0.000913f, +0.006786f, -0.014632f, -0.003071f, -0.006269f, +0.008195f, + +0.012860f, -0.005622f, -0.003246f, +0.002470f, -0.010087f, +0.003525f, +0.001827f, -0.001383f, -0.004211f, -0.004547f, + +0.010103f, -0.006676f, -0.002433f, +0.001452f, +0.006859f, +0.005875f, +0.002958f, -0.005064f, -0.000656f, -0.000454f, + -0.000689f, -0.003685f, +0.004217f, +0.002504f, +0.003857f, +0.004886f, -0.001463f, +0.002242f, -0.001382f, +0.001723f, + -0.001457f, -0.000090f, +0.000084f, -0.000517f, -0.003766f, +0.000093f, +0.000345f, -0.000340f, -0.004239f, -0.004280f, + -0.001859f, +0.002209f, -0.000643f, +0.000561f, -0.002667f, -0.000719f + }, + { + -0.006696f, +0.194139f, +0.022079f, -0.024609f, -0.004437f, +0.006175f, -0.007977f, -0.011567f, -0.007784f, +0.018027f, + +0.031257f, -0.005999f, +0.020528f, -0.010865f, -0.016475f, +0.011831f, -0.006261f, +0.031288f, +0.008004f, +0.017871f, + +0.005727f, -0.016748f, -0.008405f, +0.019282f, +0.007966f, -0.007739f, +0.002196f, -0.000223f, +0.014674f, +0.001202f, + +0.011388f, +0.002841f, -0.003457f, +0.015418f, -0.004180f, +0.000584f, -0.016162f, +0.016387f, +0.000884f, +0.000519f, + +0.008153f, -0.003427f, -0.010757f, -0.008535f, +0.007246f, +0.008842f, +0.004652f, -0.005335f, +0.017064f, -0.000975f, + -0.005322f, +0.005031f, -0.003625f, -0.007790f, -0.000385f, +0.003647f, -0.005166f, -0.000898f, +0.001686f, +0.006563f, + +0.003834f, +0.004404f, +0.001088f, +0.001418f, +0.000611f, +0.001143f, +0.001350f, +0.001731f, -0.002511f, +0.002557f, + -0.000672f, +0.001190f, +0.001424f, -0.003318f, -0.001894f, -0.000077f, +0.005293f, +0.001683f, +0.006198f, +0.004071f, + +0.001799f, +0.002548f, -0.001564f, +0.000782f, +0.000982f, +0.001065f, +0.000424f, -0.000734f, +0.002686f, +0.002454f, + +0.002495f, -0.000241f, +0.001566f, -0.000797f, +0.001081f, +0.000627f + }, + { + +0.047025f, -0.205989f, -0.030643f, +0.093775f, -0.007141f, -0.008026f, +0.006317f, -0.004423f, -0.011461f, -0.014440f, + +0.008250f, +0.017380f, +0.010228f, +0.008608f, +0.014309f, -0.023587f, -0.009834f, -0.017353f, -0.000983f, -0.007972f, + +0.005621f, -0.020368f, -0.001327f, +0.007010f, -0.003043f, +0.005612f, -0.003355f, -0.023581f, -0.002531f, -0.011954f, + +0.003800f, -0.001789f, -0.012892f, +0.005870f, -0.000867f, +0.008136f, -0.000346f, +0.003362f, -0.008821f, -0.008378f, + +0.011075f, +0.009336f, -0.004330f, +0.006987f, +0.004319f, +0.003239f, -0.005402f, +0.006504f, -0.010290f, +0.001062f, + +0.002412f, -0.006645f, +0.009404f, +0.008892f, -0.003011f, -0.000243f, +0.006967f, +0.006138f, +0.000481f, -0.006925f, + -0.001525f, -0.001872f, +0.001407f, -0.004262f, -0.002599f, -0.002692f, -0.002003f, +0.001550f, -0.002035f, -0.003401f, + -0.003356f, +0.002343f, -0.000955f, +0.002499f, +0.002407f, -0.001074f, -0.000063f, +0.000105f, -0.003476f, -0.001796f, + +0.001063f, +0.001813f, -0.000449f, -0.000746f, +0.000569f, +0.002220f, -0.002320f, -0.000647f, +0.000820f, -0.001348f, + -0.002198f, -0.001130f, +0.001384f, +0.002178f, +0.000295f, +0.001666f + }, + { + -0.001471f, +0.055197f, -0.004441f, +0.011250f, -0.000018f, +0.000919f, +0.002135f, -0.006670f, -0.000126f, -0.001432f, + -0.008694f, +0.010190f, -0.006588f, +0.014465f, +0.001716f, +0.022362f, +0.012385f, -0.042754f, -0.019381f, -0.019512f, + -0.009468f, +0.002851f, +0.005957f, +0.016197f, +0.003984f, +0.039273f, +0.023654f, +0.017415f, -0.012030f, -0.014820f, + -0.012175f, -0.007648f, -0.010673f, -0.014457f, +0.000569f, -0.022079f, +0.007922f, -0.004659f, +0.001329f, -0.017026f, + -0.004962f, -0.007940f, -0.001307f, +0.009916f, -0.002714f, -0.006125f, -0.003270f, -0.002851f, +0.007413f, +0.010667f, + -0.006953f, +0.001891f, +0.001532f, +0.010089f, +0.004842f, -0.018087f, +0.007659f, -0.001868f, -0.006920f, +0.007341f, + -0.000742f, +0.000544f, +0.001979f, -0.001690f, -0.002628f, +0.000314f, +0.002150f, +0.003488f, +0.001346f, -0.004765f, + +0.001016f, +0.001031f, -0.000141f, +0.000361f, -0.006199f, -0.002092f, +0.000140f, +0.000745f, -0.001485f, -0.003892f, + +0.001188f, -0.000078f, +0.003337f, +0.000437f, -0.002066f, -0.000992f, +0.001013f, +0.001687f, -0.000620f, +0.002537f, + -0.002288f, +0.001089f, +0.000037f, +0.001238f, +0.000903f, -0.002175f + }, + { + +0.073306f, -0.373314f, -0.023867f, +0.051845f, -0.020349f, +0.004839f, +0.011388f, -0.020634f, -0.009290f, -0.018196f, + -0.007426f, +0.013830f, -0.020476f, -0.003306f, -0.017745f, -0.013139f, -0.000262f, -0.020590f, -0.000882f, -0.013368f, + -0.030928f, +0.019107f, +0.009684f, +0.007098f, +0.008253f, -0.005313f, +0.005035f, -0.015572f, +0.018321f, +0.018458f, + +0.013154f, +0.007112f, +0.003609f, -0.018790f, +0.007977f, +0.001743f, +0.003671f, +0.004863f, -0.000968f, -0.003480f, + +0.000888f, +0.017325f, +0.010186f, -0.001986f, -0.006519f, -0.004323f, +0.011873f, -0.006416f, +0.004079f, +0.003454f, + -0.001258f, -0.013901f, -0.000065f, -0.004231f, -0.000614f, +0.002261f, -0.006165f, +0.002731f, +0.006909f, -0.008715f, + +0.004624f, +0.005618f, -0.010165f, -0.006614f, +0.000679f, +0.000926f, +0.001595f, +0.000855f, -0.001206f, -0.004518f, + +0.002851f, -0.000257f, +0.004772f, +0.001654f, +0.002692f, +0.001338f, +0.000312f, +0.005259f, -0.002285f, +0.000753f, + +0.000253f, +0.001706f, +0.001090f, +0.002641f, -0.002520f, -0.001458f, -0.000801f, -0.001181f, +0.002508f, -0.002476f, + +0.001660f, +0.000335f, -0.002540f, +0.001907f, +0.001679f, -0.000719f + }, + { + -0.002053f, -0.003406f, +0.003269f, +0.002216f, +0.001699f, +0.001001f, -0.000915f, +0.004086f, -0.006630f, +0.002610f, + +0.000754f, +0.012978f, -0.005312f, -0.002806f, +0.057792f, +0.026635f, -0.001731f, -0.001228f, +0.031739f, +0.019965f, + +0.005247f, -0.000428f, +0.041121f, -0.046964f, -0.029072f, +0.017264f, +0.005996f, +0.005209f, -0.019472f, +0.032127f, + +0.007217f, -0.037032f, +0.008944f, -0.001916f, +0.009761f, -0.004590f, -0.013012f, -0.004067f, -0.016873f, -0.008472f, + +0.005126f, -0.002470f, +0.001699f, -0.012251f, -0.001924f, -0.005666f, +0.004236f, -0.012253f, -0.007232f, -0.001671f, + -0.012427f, +0.006962f, +0.000056f, -0.016807f, +0.001318f, +0.005664f, -0.004188f, +0.001116f, -0.005026f, +0.010483f, + -0.000409f, +0.008547f, +0.006345f, +0.000602f, -0.000312f, +0.000843f, -0.003089f, -0.004161f, +0.001725f, +0.000910f, + -0.005563f, +0.001402f, -0.000881f, +0.001208f, -0.002168f, -0.004621f, -0.002026f, +0.005778f, +0.003658f, +0.000755f, + +0.003364f, +0.000599f, -0.001445f, -0.000655f, +0.000061f, -0.000146f, +0.001530f, +0.000415f, +0.000815f, +0.001365f, + +0.002498f, +0.001675f, -0.002965f, +0.000873f, -0.000025f, -0.000686f + }, + { + -0.124916f, -0.437420f, +0.029593f, -0.081998f, -0.017356f, -0.013766f, -0.007561f, -0.002320f, +0.004512f, -0.007746f, + +0.006776f, +0.011944f, +0.009649f, +0.000513f, -0.020294f, +0.030960f, -0.010475f, +0.008772f, +0.012471f, -0.023974f, + -0.003620f, +0.013402f, +0.032676f, +0.019215f, -0.006231f, -0.011012f, -0.014165f, -0.008966f, +0.015307f, -0.005996f, + -0.011511f, +0.010134f, -0.000676f, -0.003337f, -0.018200f, -0.034314f, -0.001520f, -0.013443f, +0.009047f, -0.007332f, + +0.005054f, -0.007566f, +0.004223f, +0.009292f, -0.000002f, +0.007526f, -0.006278f, -0.000437f, +0.000480f, -0.007247f, + -0.010002f, +0.006558f, +0.009307f, +0.007478f, +0.005606f, +0.006677f, -0.006354f, -0.000936f, +0.002010f, +0.001409f, + +0.001815f, -0.005347f, +0.009461f, -0.001578f, +0.000197f, +0.002238f, -0.000888f, +0.001012f, +0.004071f, +0.000922f, + +0.000760f, -0.003248f, +0.000837f, -0.001768f, -0.000473f, +0.001821f, -0.000952f, +0.003321f, -0.000053f, +0.000258f, + +0.000810f, -0.002578f, -0.002599f, -0.001004f, -0.001730f, +0.003493f, +0.000990f, -0.000358f, +0.000154f, -0.002019f, + +0.000419f, -0.001663f, +0.002024f, +0.000977f, +0.000062f, -0.001800f + }, + { + -0.002348f, -0.008445f, -0.011715f, +0.003498f, +0.001477f, -0.000330f, +0.001405f, -0.005667f, -0.003296f, +0.007592f, + -0.007698f, +0.005468f, +0.013149f, -0.063174f, -0.005255f, +0.006484f, -0.013725f, +0.004175f, -0.020132f, -0.025271f, + +0.019812f, -0.023294f, +0.001798f, -0.075489f, -0.013069f, +0.001401f, -0.001788f, +0.012177f, +0.014503f, +0.012943f, + +0.002081f, +0.015193f, -0.005937f, +0.008876f, -0.005962f, +0.008924f, +0.013734f, +0.002106f, +0.012313f, -0.002932f, + -0.010650f, -0.004425f, +0.002941f, +0.002688f, -0.008402f, -0.000849f, -0.012433f, +0.004471f, +0.005971f, -0.001647f, + -0.003372f, +0.008310f, -0.011425f, +0.004431f, -0.005495f, -0.001074f, -0.003752f, +0.004340f, +0.001136f, +0.002540f, + -0.006948f, +0.006615f, -0.002794f, -0.002279f, +0.003647f, -0.003622f, +0.002729f, -0.001899f, +0.000517f, +0.002233f, + -0.002018f, +0.004242f, +0.000800f, -0.000725f, -0.000351f, +0.004299f, +0.001500f, -0.002920f, +0.003031f, -0.006048f, + -0.000902f, +0.003430f, -0.000665f, -0.001015f, +0.000857f, +0.002415f, -0.000402f, -0.002069f, +0.000088f, -0.000402f, + -0.000228f, -0.000070f, +0.001361f, -0.000979f, -0.000142f, +0.000291f + }, + { + -0.005340f, -0.382441f, +0.000295f, -0.012328f, +0.013760f, +0.001686f, +0.006215f, +0.000576f, +0.020831f, +0.001545f, + -0.021263f, -0.019745f, +0.000707f, +0.004414f, -0.008500f, +0.003360f, +0.006182f, +0.018968f, -0.004263f, -0.010817f, + +0.012975f, +0.012942f, -0.012362f, +0.004067f, -0.001124f, +0.015050f, +0.011745f, +0.008268f, +0.000924f, +0.011268f, + -0.018992f, +0.003533f, -0.012861f, +0.005315f, -0.003576f, +0.001242f, -0.005674f, -0.001675f, +0.001740f, -0.003358f, + -0.014018f, +0.000872f, +0.014414f, +0.002237f, -0.002256f, +0.014120f, -0.014460f, -0.003428f, +0.002022f, +0.007780f, + -0.001585f, -0.009394f, -0.004211f, +0.011527f, +0.004747f, -0.004027f, +0.003935f, -0.002919f, +0.001165f, +0.005529f, + +0.003579f, +0.004794f, -0.000675f, +0.000027f, +0.004468f, +0.007197f, +0.003424f, -0.001946f, -0.002680f, -0.003757f, + +0.002199f, +0.003219f, +0.003468f, +0.003175f, +0.001243f, +0.000253f, -0.006191f, -0.002232f, +0.002888f, +0.001696f, + +0.001742f, +0.002272f, +0.002090f, -0.003577f, -0.002042f, +0.000168f, +0.002625f, -0.000595f, +0.000115f, +0.001041f, + -0.001860f, +0.003056f, -0.000301f, -0.001736f, -0.000566f, +0.002715f + }, + { + -0.006592f, -0.075827f, +0.034423f, +0.010324f, +0.011657f, +0.002482f, +0.003982f, -0.006563f, +0.023342f, -0.010172f, + -0.002260f, -0.021451f, -0.008108f, +0.012030f, +0.015012f, -0.024287f, +0.030345f, +0.003487f, -0.025655f, +0.009306f, + +0.048511f, -0.010520f, +0.001620f, +0.009071f, -0.016210f, -0.013209f, +0.007526f, -0.008702f, -0.009566f, +0.022095f, + +0.009143f, -0.006658f, -0.009474f, -0.004675f, +0.000168f, +0.004862f, +0.003548f, -0.004570f, -0.017273f, -0.008159f, + -0.005379f, +0.015042f, -0.003807f, -0.002752f, -0.002240f, -0.010243f, -0.005797f, -0.013653f, -0.004326f, -0.007992f, + +0.000510f, -0.003015f, -0.003425f, -0.004713f, +0.006956f, -0.000907f, +0.004379f, -0.005592f, -0.004017f, +0.001148f, + +0.003504f, +0.001359f, -0.003654f, +0.005394f, +0.000267f, +0.004761f, +0.004131f, -0.003210f, -0.000994f, -0.006795f, + -0.005229f, -0.000347f, -0.002947f, -0.004001f, +0.000923f, -0.001457f, -0.001466f, +0.003038f, +0.003741f, -0.001224f, + +0.001623f, -0.002103f, +0.002887f, +0.003535f, -0.000853f, +0.002530f, +0.001803f, -0.000742f, -0.000680f, -0.002022f, + +0.000739f, -0.001484f, -0.002400f, +0.002471f, +0.000855f, -0.001636f + }, + { + +0.045068f, +0.219313f, +0.013851f, -0.004823f, -0.003134f, -0.042599f, +0.029310f, +0.025488f, -0.007911f, +0.000171f, + +0.010583f, +0.004260f, +0.015689f, +0.010222f, -0.012646f, -0.005163f, +0.024096f, +0.011210f, +0.001528f, -0.028515f, + -0.008374f, -0.005693f, +0.014204f, +0.003428f, +0.020679f, +0.009232f, -0.004248f, -0.015623f, +0.005926f, +0.007807f, + -0.018930f, +0.007553f, +0.006186f, -0.007572f, -0.004851f, +0.000798f, +0.023461f, -0.002522f, +0.021974f, +0.006615f, + -0.002807f, +0.022250f, -0.002444f, -0.014124f, -0.008855f, +0.010330f, +0.003019f, +0.002512f, +0.005910f, +0.002572f, + -0.005733f, -0.005979f, -0.003948f, -0.002523f, -0.008180f, -0.001448f, -0.003716f, -0.003513f, +0.000241f, -0.001548f, + -0.003867f, -0.005231f, +0.006988f, -0.003154f, +0.002353f, +0.000453f, -0.004745f, -0.000817f, -0.000713f, -0.003414f, + -0.005231f, +0.004248f, +0.004071f, +0.000198f, +0.002888f, -0.001143f, +0.003175f, +0.000231f, +0.003395f, +0.000269f, + -0.000601f, +0.001926f, -0.002234f, -0.001083f, -0.003680f, -0.002878f, -0.001352f, -0.004171f, +0.002454f, -0.000485f, + -0.000378f, +0.002976f, -0.001427f, +0.005088f, -0.000648f, +0.003456f + }, + { + -0.002948f, +0.063847f, +0.016003f, +0.007389f, +0.000463f, +0.003202f, +0.000967f, -0.014590f, +0.002247f, -0.004702f, + +0.002037f, +0.008678f, +0.008856f, +0.030812f, -0.051906f, -0.010807f, +0.008502f, +0.028856f, +0.020909f, +0.020592f, + +0.011353f, -0.047491f, +0.055941f, -0.017581f, +0.038878f, -0.010297f, +0.001253f, -0.010482f, +0.010425f, -0.017226f, + -0.004322f, +0.009515f, -0.019122f, +0.002391f, -0.009043f, +0.010320f, +0.003377f, +0.001042f, +0.017787f, -0.003566f, + -0.002306f, +0.001683f, +0.008552f, +0.010106f, -0.005059f, +0.009778f, +0.001648f, -0.008277f, -0.001759f, +0.007906f, + +0.006653f, +0.002112f, -0.006070f, -0.001265f, -0.012963f, +0.006098f, -0.007071f, +0.000122f, +0.004471f, +0.004944f, + -0.001959f, -0.004499f, +0.003052f, -0.003616f, -0.001945f, +0.002282f, +0.001983f, -0.007175f, +0.007356f, -0.005880f, + +0.004693f, +0.001111f, +0.001280f, +0.004211f, -0.000653f, -0.002213f, -0.000891f, -0.000223f, +0.002191f, +0.001000f, + -0.005245f, -0.001783f, +0.004378f, +0.002328f, -0.002093f, +0.000537f, -0.001441f, +0.003005f, -0.002130f, +0.000088f, + +0.000708f, -0.000845f, -0.001510f, -0.000735f, +0.000542f, +0.000522f + }, + { + +0.050682f, +0.006669f, +0.010230f, +0.005480f, -0.007760f, -0.013160f, +0.002654f, -0.014646f, -0.007164f, +0.013954f, + -0.030797f, +0.023518f, -0.021654f, +0.055475f, -0.051056f, +0.003631f, +0.030652f, +0.013143f, -0.018100f, -0.006077f, + +0.002033f, +0.003070f, -0.007625f, -0.018642f, -0.012370f, +0.013504f, +0.008478f, +0.003409f, -0.013554f, -0.009952f, + +0.006216f, +0.004850f, -0.000220f, -0.011801f, -0.008647f, -0.004792f, +0.005841f, +0.008963f, +0.008442f, -0.010182f, + -0.002063f, -0.012524f, +0.019177f, +0.006523f, -0.005612f, +0.016762f, -0.007546f, +0.002818f, -0.001699f, -0.000793f, + -0.013658f, -0.000699f, +0.004205f, +0.000990f, -0.000454f, +0.005486f, -0.000554f, -0.003152f, -0.003840f, +0.008181f, + -0.000881f, +0.004677f, +0.000357f, -0.007390f, +0.002499f, +0.004266f, -0.002317f, +0.004184f, -0.000513f, +0.005452f, + -0.003813f, -0.002397f, +0.001617f, +0.007040f, +0.004957f, -0.002924f, -0.000345f, +0.003845f, +0.003691f, +0.000185f, + -0.000485f, +0.005194f, +0.002964f, +0.001086f, +0.000571f, +0.005637f, +0.000458f, -0.003351f, -0.001642f, +0.002321f, + -0.001999f, +0.002499f, -0.000038f, -0.001037f, -0.000809f, -0.000305f + }, + { + +0.012427f, -0.001131f, -0.014686f, +0.013572f, +0.002325f, -0.005339f, +0.002757f, +0.013296f, +0.001141f, +0.010699f, + -0.004921f, -0.015143f, -0.004613f, -0.003544f, -0.054753f, +0.004476f, +0.034113f, -0.000322f, +0.004185f, +0.012886f, + -0.021103f, -0.019076f, -0.021063f, -0.002348f, +0.008128f, -0.007062f, -0.003301f, +0.020517f, +0.009895f, +0.019443f, + -0.025989f, -0.021410f, -0.004021f, +0.004959f, +0.007878f, -0.025243f, -0.010717f, +0.000714f, -0.010238f, -0.006563f, + +0.009287f, -0.004131f, -0.009883f, -0.006765f, -0.007782f, +0.004872f, -0.003272f, -0.004622f, -0.000366f, -0.000561f, + +0.002150f, -0.000877f, -0.009043f, +0.002455f, +0.005708f, +0.003132f, +0.005717f, -0.001090f, -0.006183f, -0.006860f, + -0.001922f, -0.002924f, +0.004203f, -0.008181f, +0.000115f, -0.001638f, +0.005293f, -0.004995f, -0.003085f, -0.003100f, + -0.001197f, -0.005558f, -0.005299f, -0.001547f, -0.007043f, +0.002064f, +0.000955f, -0.000751f, -0.003802f, +0.000628f, + +0.005531f, -0.007039f, +0.003971f, +0.000844f, -0.000530f, -0.001723f, +0.003402f, +0.001329f, +0.000808f, -0.000842f, + -0.001351f, +0.000202f, -0.001345f, +0.000905f, +0.001291f, +0.001898f + } + }, + { + { + -0.045963f, +0.163833f, +0.111563f, -0.032052f, +0.002102f, +0.003805f, +0.016171f, +0.001521f, -0.010484f, -0.039157f, + -0.018949f, -0.060641f, +0.009196f, -0.037046f, +0.003152f, +0.015591f, -0.002655f, +0.014579f, +0.015162f, +0.001955f, + +0.013456f, -0.003680f, -0.011640f, -0.007548f, -0.017575f, -0.008351f, +0.013449f, -0.012200f, -0.029508f, -0.005837f, + -0.030484f, -0.006107f, +0.000894f, +0.003227f, +0.002074f, +0.024992f, -0.013166f, -0.002138f, -0.002693f, +0.007367f, + +0.007301f, -0.000473f, +0.008619f, -0.004097f, -0.011429f, -0.003891f, -0.006642f, +0.017553f, -0.004184f, +0.002913f, + -0.011257f, +0.006939f, -0.001983f, -0.002006f, +0.010277f, -0.004923f, +0.003815f, +0.008698f, +0.023590f, -0.009292f, + +0.006388f, -0.001108f, -0.010179f, +0.001125f, +0.000566f, +0.002547f, +0.004008f, -0.003626f, +0.001614f, -0.003030f, + +0.004298f, +0.000031f, -0.000233f, -0.002753f, +0.005005f, +0.001091f, +0.001082f, -0.002335f, +0.001840f, -0.001998f, + +0.000387f, -0.000543f, +0.001875f, +0.002094f, -0.000098f, -0.001560f, +0.000299f, +0.004463f, -0.002923f, -0.001433f, + +0.000028f, -0.002405f, +0.002453f, +0.001532f, -0.000111f, -0.001364f + }, + { + -0.000018f, -0.043804f, -0.018253f, -0.007911f, +0.005997f, +0.002049f, -0.000697f, +0.010571f, -0.008157f, +0.007604f, + +0.018115f, -0.009747f, -0.016065f, +0.019654f, -0.048277f, +0.014491f, -0.002251f, -0.001937f, -0.013652f, +0.051239f, + -0.005932f, -0.050120f, -0.001849f, -0.019261f, -0.032129f, +0.002288f, +0.010234f, -0.018424f, +0.037635f, -0.000863f, + +0.009351f, +0.018293f, -0.000571f, +0.008392f, -0.021181f, -0.015491f, -0.006385f, -0.008746f, -0.007154f, +0.010438f, + +0.003060f, -0.005973f, -0.008408f, -0.005034f, -0.000173f, +0.005938f, -0.007734f, -0.003745f, -0.003261f, -0.000468f, + +0.008928f, +0.004188f, +0.001073f, -0.007889f, +0.001000f, -0.004315f, -0.001584f, +0.005202f, -0.010014f, -0.000268f, + +0.007988f, -0.004119f, -0.001025f, +0.002947f, +0.005665f, +0.000158f, +0.001033f, -0.001418f, +0.001710f, +0.000883f, + -0.002538f, -0.002236f, -0.003151f, +0.004678f, +0.001980f, +0.005595f, +0.001642f, +0.001484f, -0.001445f, -0.002911f, + +0.001378f, +0.000829f, +0.000362f, -0.002298f, -0.000861f, -0.000712f, +0.000135f, -0.000466f, -0.004225f, -0.003304f, + -0.001913f, +0.001069f, +0.002507f, -0.000834f, -0.003093f, -0.001304f + }, + { + +0.003609f, +0.221546f, +0.001904f, -0.021689f, -0.004448f, -0.005890f, -0.007477f, +0.000999f, -0.006279f, +0.013641f, + +0.023906f, -0.010522f, -0.008157f, +0.019922f, -0.001508f, +0.013058f, -0.025473f, +0.057604f, -0.021762f, +0.025913f, + +0.019303f, -0.017510f, +0.000498f, +0.006260f, +0.004658f, +0.000071f, +0.001931f, -0.013514f, +0.007881f, +0.012588f, + +0.011685f, +0.008850f, -0.013156f, -0.001599f, +0.011001f, -0.001556f, -0.008964f, +0.004728f, -0.001101f, +0.025099f, + -0.008289f, -0.003499f, -0.002638f, +0.003383f, +0.000904f, +0.002823f, -0.000731f, +0.002410f, -0.001513f, +0.015442f, + -0.003407f, -0.008171f, +0.005145f, -0.000653f, -0.009953f, +0.001864f, -0.011049f, +0.004772f, +0.001448f, +0.005642f, + +0.005874f, -0.000097f, +0.003040f, +0.000421f, +0.005580f, -0.001499f, -0.003654f, +0.006605f, -0.001139f, +0.006198f, + -0.004022f, -0.000131f, -0.000419f, -0.003547f, +0.001842f, +0.001545f, +0.001399f, +0.001768f, +0.007610f, +0.003508f, + +0.000236f, +0.001224f, -0.000168f, +0.000528f, +0.002811f, -0.002220f, +0.001981f, -0.000046f, +0.003797f, +0.000537f, + +0.000292f, +0.003637f, -0.002021f, +0.002270f, -0.000390f, +0.000912f + }, + { + -0.085083f, -0.082196f, +0.019797f, +0.064092f, +0.010870f, -0.001388f, -0.017058f, +0.009004f, -0.002385f, +0.006260f, + -0.001734f, +0.005537f, +0.008962f, +0.030006f, -0.002865f, -0.014876f, -0.001358f, -0.010242f, -0.023418f, -0.007732f, + +0.018260f, -0.013879f, -0.021274f, +0.003716f, +0.013157f, -0.021764f, +0.004040f, -0.015757f, -0.014266f, -0.004172f, + -0.000037f, -0.006205f, -0.016597f, -0.003515f, +0.015118f, +0.003595f, +0.003781f, -0.009862f, +0.003532f, +0.007068f, + +0.008919f, +0.011279f, -0.009272f, +0.003952f, +0.006096f, +0.013141f, -0.007669f, -0.005518f, +0.001817f, -0.009944f, + +0.004346f, -0.004584f, +0.002529f, +0.011038f, -0.002581f, +0.004740f, +0.006041f, +0.001765f, +0.001058f, -0.002683f, + -0.007008f, +0.002344f, -0.008859f, +0.003881f, -0.004854f, -0.004425f, -0.000221f, -0.000473f, -0.002610f, -0.000949f, + -0.007686f, -0.000078f, +0.003789f, +0.001758f, +0.001536f, -0.002695f, +0.001657f, -0.001575f, -0.000742f, -0.002468f, + -0.001699f, +0.001598f, +0.000863f, -0.000293f, +0.000844f, +0.000672f, -0.001474f, -0.001321f, +0.003208f, -0.002964f, + -0.001025f, -0.000379f, -0.001152f, +0.001261f, -0.001124f, +0.002944f + }, + { + +0.000227f, +0.047349f, +0.003151f, +0.011168f, -0.000679f, +0.000208f, -0.000775f, -0.003328f, +0.000655f, -0.003736f, + -0.003329f, +0.017517f, -0.000519f, -0.010408f, -0.009311f, +0.007005f, +0.025441f, +0.033475f, -0.078973f, -0.049654f, + +0.006841f, +0.021762f, +0.000959f, +0.018808f, +0.012613f, +0.017702f, +0.046538f, -0.014079f, +0.010471f, -0.018128f, + -0.018613f, +0.001535f, -0.024125f, -0.022473f, +0.004138f, -0.020647f, +0.005879f, -0.005565f, -0.008623f, -0.003724f, + -0.017910f, +0.002769f, -0.010829f, +0.009193f, -0.009809f, +0.020316f, -0.019874f, -0.006902f, +0.013499f, +0.002265f, + -0.005334f, +0.003311f, +0.005053f, +0.000611f, -0.000226f, -0.003755f, +0.001054f, +0.003231f, -0.002343f, +0.003996f, + -0.008172f, -0.000038f, +0.000128f, -0.001141f, +0.000418f, -0.001811f, +0.004170f, +0.004544f, -0.003896f, +0.000975f, + +0.001374f, -0.001146f, +0.000374f, -0.000456f, -0.008860f, +0.001402f, +0.002629f, -0.001783f, -0.001780f, -0.002000f, + -0.000064f, -0.001268f, +0.001177f, +0.000223f, -0.001861f, +0.003361f, +0.000446f, -0.000443f, +0.000323f, +0.000443f, + +0.001410f, +0.000100f, -0.001803f, +0.000717f, +0.000732f, -0.000640f + }, + { + -0.126852f, -0.192473f, +0.050064f, +0.009752f, +0.010968f, +0.002194f, -0.001301f, +0.004779f, -0.018250f, +0.000446f, + -0.019317f, +0.004933f, -0.012386f, +0.014275f, -0.020382f, -0.009313f, -0.014012f, -0.017991f, +0.001029f, -0.013576f, + -0.009145f, +0.009236f, +0.003642f, +0.012804f, -0.002835f, +0.014125f, -0.015377f, -0.003380f, +0.020453f, +0.016407f, + +0.002936f, +0.002833f, +0.006808f, -0.015759f, -0.001064f, +0.009563f, +0.016649f, +0.001750f, -0.010714f, +0.000685f, + +0.001275f, +0.002065f, +0.016131f, -0.002477f, -0.008509f, +0.003511f, +0.005414f, +0.003071f, -0.005369f, +0.012922f, + -0.004474f, -0.007222f, -0.005711f, -0.000292f, -0.010204f, +0.005726f, -0.006168f, +0.002978f, +0.000808f, +0.000015f, + +0.004635f, -0.001171f, -0.005216f, -0.009248f, +0.000455f, +0.005905f, -0.003142f, -0.001153f, -0.000116f, -0.001518f, + -0.001239f, +0.004955f, -0.000999f, +0.004998f, +0.001224f, -0.000002f, +0.001611f, +0.002568f, -0.000814f, +0.001475f, + -0.001477f, +0.006181f, -0.002046f, +0.004287f, -0.002895f, -0.000449f, -0.001480f, +0.000738f, -0.000388f, -0.000748f, + +0.000209f, -0.000852f, -0.001986f, +0.001954f, +0.001194f, -0.000917f + }, + { + +0.000171f, +0.000602f, -0.003044f, -0.005589f, +0.004975f, +0.001510f, +0.000684f, -0.002614f, +0.000084f, +0.003070f, + -0.004760f, +0.016277f, -0.004581f, +0.007084f, +0.020902f, +0.024051f, -0.009552f, -0.002096f, +0.018566f, +0.037398f, + +0.013425f, -0.007472f, +0.041476f, -0.051645f, -0.029741f, +0.028875f, -0.021505f, +0.009454f, -0.005665f, +0.006540f, + -0.002105f, -0.008516f, +0.021904f, -0.007685f, -0.018398f, +0.005548f, -0.009325f, -0.009047f, -0.013617f, +0.005106f, + -0.009071f, -0.000050f, +0.005703f, -0.012585f, +0.001729f, -0.003165f, -0.001269f, -0.011703f, -0.000218f, -0.004795f, + -0.003517f, +0.001625f, -0.002859f, -0.006312f, -0.005744f, +0.005731f, +0.000267f, -0.005553f, +0.000491f, +0.004445f, + +0.005854f, +0.003792f, +0.004033f, +0.002690f, +0.004737f, +0.001330f, -0.006942f, -0.001095f, +0.000987f, +0.001349f, + -0.004201f, +0.000400f, -0.002261f, +0.001459f, -0.002671f, -0.003832f, -0.000943f, +0.003986f, +0.002887f, +0.003737f, + +0.000430f, -0.002755f, +0.001126f, -0.001121f, +0.001599f, -0.000407f, -0.000228f, +0.004819f, -0.000078f, -0.000023f, + +0.004132f, -0.000055f, -0.000596f, +0.001928f, -0.000275f, +0.000876f + }, + { + +0.098615f, -0.674445f, -0.035183f, -0.044492f, -0.039930f, -0.016907f, +0.006153f, -0.012127f, +0.014818f, -0.008116f, + -0.005860f, +0.011796f, +0.032417f, -0.027883f, +0.035302f, +0.003680f, +0.002582f, -0.008921f, -0.005676f, -0.010612f, + -0.005658f, +0.027648f, +0.036950f, +0.015018f, -0.023359f, -0.001192f, -0.010617f, -0.011353f, +0.020236f, -0.002998f, + -0.016289f, -0.004301f, +0.005231f, -0.001384f, -0.012398f, -0.027629f, -0.021544f, +0.004012f, +0.000043f, +0.003213f, + -0.000889f, -0.005001f, +0.007436f, +0.013174f, +0.001519f, -0.003212f, -0.000064f, -0.009013f, +0.002014f, -0.001954f, + -0.007525f, +0.007378f, +0.000107f, +0.003928f, +0.019849f, -0.000908f, -0.001545f, -0.000026f, -0.005319f, +0.003769f, + +0.000370f, -0.000646f, +0.004360f, -0.000452f, -0.002494f, +0.003703f, +0.002149f, +0.000685f, +0.002142f, +0.001650f, + -0.002965f, +0.000354f, -0.002770f, +0.001534f, -0.001571f, -0.000662f, +0.003060f, -0.000822f, +0.002799f, -0.001610f, + -0.001228f, -0.000173f, -0.001578f, -0.000705f, -0.002624f, +0.001529f, +0.004385f, +0.000607f, -0.002890f, -0.002550f, + +0.002298f, -0.000645f, +0.000362f, +0.002710f, -0.001341f, -0.001282f + }, + { + +0.000094f, -0.023787f, -0.007783f, +0.005627f, +0.003905f, -0.000250f, -0.002942f, +0.005423f, -0.014911f, +0.002960f, + +0.007738f, -0.000761f, +0.001250f, -0.006325f, -0.093919f, -0.006651f, -0.019299f, +0.020324f, -0.025312f, -0.010148f, + +0.002383f, -0.014464f, -0.001734f, -0.029212f, -0.005131f, -0.028618f, +0.010695f, -0.001907f, +0.028586f, +0.009819f, + -0.015385f, +0.010631f, -0.003688f, +0.018621f, -0.003602f, +0.007534f, +0.006699f, +0.010043f, +0.007596f, -0.007841f, + -0.010215f, +0.002168f, -0.008939f, +0.014530f, -0.017131f, +0.000320f, -0.009491f, +0.010236f, +0.004360f, -0.011584f, + +0.004070f, +0.007770f, -0.012207f, +0.005695f, -0.002401f, -0.003807f, -0.005979f, +0.004533f, +0.000815f, -0.001976f, + -0.003550f, -0.000094f, -0.000968f, +0.005957f, +0.000708f, -0.000147f, +0.000508f, -0.004161f, +0.000140f, +0.002005f, + +0.001900f, -0.003578f, +0.007225f, +0.002255f, -0.003956f, +0.003475f, -0.000556f, +0.000707f, -0.003938f, -0.001416f, + -0.000408f, +0.002217f, +0.000021f, -0.001924f, +0.004517f, -0.000712f, +0.000161f, -0.002772f, -0.000561f, -0.001142f, + +0.000931f, +0.000468f, +0.001217f, +0.000055f, -0.002363f, +0.001824f + }, + { + -0.000237f, -0.441584f, +0.031917f, +0.002057f, +0.009029f, +0.033917f, -0.027739f, +0.017940f, +0.016134f, +0.015696f, + -0.029620f, -0.014945f, +0.012061f, +0.018278f, -0.008437f, -0.002018f, +0.034353f, +0.004695f, -0.008564f, -0.022991f, + +0.021595f, -0.006388f, -0.002349f, -0.005764f, +0.016377f, -0.000013f, +0.015855f, +0.006694f, -0.008803f, +0.017749f, + -0.017592f, +0.006616f, -0.014911f, -0.003699f, +0.007601f, -0.001757f, +0.008258f, +0.001119f, -0.015621f, -0.002831f, + -0.005597f, -0.008019f, +0.014615f, +0.004953f, -0.006446f, +0.007400f, -0.003340f, -0.004836f, -0.002252f, +0.006163f, + -0.003685f, -0.000285f, -0.006213f, +0.008139f, +0.007007f, -0.002785f, +0.000304f, +0.000950f, +0.001011f, +0.008154f, + +0.007382f, +0.003314f, -0.005061f, -0.002803f, +0.007960f, +0.006661f, +0.000859f, +0.004475f, -0.010933f, +0.003064f, + -0.000514f, -0.000342f, +0.006189f, +0.003056f, +0.003775f, -0.003175f, -0.009812f, +0.004903f, -0.001533f, +0.001041f, + +0.003162f, +0.005692f, -0.001815f, -0.003446f, -0.002118f, -0.000814f, +0.001210f, +0.002638f, -0.001032f, -0.003437f, + +0.003442f, -0.001324f, +0.001597f, -0.003293f, +0.000805f, -0.001215f + }, + { + +0.007007f, -0.036455f, -0.021655f, +0.013806f, +0.023305f, -0.019139f, +0.009065f, +0.001101f, +0.016280f, -0.016056f, + -0.000436f, -0.031659f, +0.011232f, +0.003832f, +0.003116f, -0.023188f, +0.033987f, -0.000260f, +0.000492f, +0.010263f, + +0.013486f, +0.013981f, +0.003048f, -0.009710f, +0.005825f, -0.012038f, -0.005872f, +0.004892f, -0.005246f, +0.009320f, + +0.015525f, -0.012734f, +0.008333f, -0.002809f, +0.009150f, -0.007772f, -0.007866f, -0.000244f, -0.010090f, -0.009298f, + -0.001041f, +0.016917f, -0.005489f, -0.004275f, -0.003370f, -0.007230f, -0.009725f, -0.005129f, -0.006862f, -0.011050f, + -0.008157f, -0.003480f, +0.004534f, +0.000466f, +0.002413f, +0.004001f, -0.002914f, -0.004520f, -0.000723f, -0.000476f, + +0.000701f, -0.004604f, +0.006078f, -0.003074f, +0.001177f, +0.005718f, +0.000838f, -0.005493f, +0.002572f, -0.006353f, + -0.004591f, +0.000362f, -0.003942f, -0.002729f, -0.001608f, +0.000777f, -0.000849f, +0.000571f, +0.004948f, -0.003480f, + +0.002796f, +0.000418f, +0.000144f, +0.003731f, +0.002573f, +0.000781f, +0.001608f, -0.001248f, +0.001211f, -0.002815f, + -0.000929f, -0.001532f, -0.000356f, +0.001060f, -0.000959f, +0.001901f + }, + { + +0.007824f, +0.287800f, -0.010922f, +0.012412f, -0.005784f, -0.018990f, +0.011667f, -0.008078f, +0.023714f, +0.022911f, + -0.000978f, +0.015369f, +0.006829f, -0.006075f, -0.021295f, +0.016768f, +0.017599f, +0.008064f, +0.001081f, -0.050076f, + +0.010113f, +0.001785f, +0.002463f, -0.017057f, +0.036886f, +0.018037f, -0.012962f, -0.009697f, +0.004399f, -0.006357f, + +0.009991f, +0.009114f, -0.009769f, +0.002043f, -0.000210f, -0.001967f, +0.015647f, +0.017929f, +0.004705f, +0.005690f, + +0.003422f, +0.015441f, +0.004367f, -0.021256f, +0.001916f, +0.000586f, +0.012147f, -0.000124f, +0.004261f, -0.000643f, + -0.006119f, -0.006256f, -0.010680f, -0.000282f, -0.001216f, -0.005697f, -0.006633f, +0.002179f, -0.005373f, +0.001146f, + -0.010483f, +0.003363f, +0.001720f, +0.004943f, -0.003882f, +0.000653f, -0.003144f, -0.002361f, +0.007058f, -0.009142f, + -0.005960f, +0.006597f, -0.001280f, +0.001988f, -0.000276f, +0.000083f, +0.003071f, +0.000036f, +0.003046f, +0.003731f, + +0.000765f, -0.003872f, -0.001116f, +0.000456f, -0.004275f, -0.002321f, -0.002934f, -0.002266f, +0.001484f, +0.001334f, + -0.000326f, +0.001018f, +0.001066f, +0.001341f, +0.002470f, +0.000509f + }, + { + +0.000546f, +0.095320f, -0.011316f, +0.010856f, -0.000354f, -0.001227f, -0.000081f, -0.006834f, -0.006442f, +0.001094f, + -0.000933f, +0.004384f, +0.000727f, +0.034487f, -0.048314f, -0.004628f, +0.026882f, +0.054809f, -0.010256f, +0.034055f, + +0.013704f, +0.014932f, -0.020825f, +0.006065f, +0.031106f, -0.034004f, +0.012893f, -0.006141f, -0.020049f, +0.032240f, + -0.022224f, +0.000336f, -0.016096f, -0.000609f, -0.006162f, -0.008017f, +0.015415f, +0.003165f, +0.027330f, -0.012525f, + +0.006022f, -0.009605f, +0.007716f, +0.001329f, +0.000460f, +0.010109f, +0.000556f, -0.009110f, +0.001107f, +0.015329f, + +0.004525f, -0.005482f, -0.008527f, +0.000844f, -0.003996f, +0.004540f, -0.009539f, +0.006518f, -0.003031f, +0.004627f, + +0.004931f, +0.005780f, -0.007573f, -0.000653f, -0.002614f, +0.003042f, -0.005337f, +0.004202f, -0.001381f, -0.003623f, + +0.000530f, +0.006084f, -0.000070f, +0.003047f, +0.002841f, -0.003165f, -0.001276f, -0.000593f, +0.004765f, -0.004310f, + -0.003081f, -0.000816f, +0.003403f, +0.001043f, -0.000097f, -0.000404f, +0.001099f, -0.001510f, -0.000129f, +0.000558f, + -0.001083f, +0.000370f, -0.005513f, +0.002068f, -0.000732f, -0.000694f + }, + { + -0.045109f, +0.150568f, +0.003273f, +0.002362f, -0.011242f, -0.008465f, +0.006066f, -0.012633f, -0.005102f, -0.003444f, + +0.006614f, -0.026617f, +0.004190f, +0.034993f, -0.029287f, -0.015106f, +0.054234f, +0.003437f, +0.007366f, -0.012172f, + +0.012603f, +0.002087f, -0.021541f, -0.011636f, -0.011413f, +0.017284f, -0.003841f, -0.009906f, +0.012834f, -0.024249f, + +0.005499f, -0.005724f, +0.002313f, +0.000986f, +0.005057f, -0.012992f, -0.011478f, +0.022025f, +0.003252f, +0.008117f, + -0.006407f, -0.005819f, -0.001958f, +0.010893f, -0.000577f, +0.013332f, +0.007579f, -0.013137f, +0.002587f, -0.003881f, + -0.011586f, +0.005255f, +0.002709f, -0.000671f, +0.003493f, +0.003579f, +0.003644f, -0.000226f, -0.010613f, +0.001694f, + +0.006066f, +0.003249f, -0.000867f, -0.006120f, +0.002816f, -0.000595f, +0.005628f, -0.003056f, +0.004020f, +0.007034f, + -0.006340f, -0.002521f, -0.002680f, +0.003873f, +0.006916f, -0.001223f, +0.004285f, +0.002217f, +0.001667f, +0.002864f, + +0.001723f, +0.001660f, +0.004598f, +0.000529f, +0.002493f, +0.000562f, +0.002592f, -0.004435f, -0.000629f, +0.002123f, + +0.001206f, -0.001127f, +0.002577f, -0.002415f, -0.000649f, +0.000669f + }, + { + -0.012570f, -0.011872f, +0.018445f, +0.001862f, +0.007362f, -0.003769f, +0.000584f, +0.016298f, +0.001847f, +0.006385f, + -0.004315f, -0.004977f, +0.000742f, -0.019816f, -0.030189f, -0.021438f, +0.015981f, +0.024803f, +0.006739f, +0.025689f, + -0.043885f, -0.014500f, -0.031935f, +0.016155f, +0.001947f, -0.006594f, -0.002032f, +0.050689f, -0.018698f, +0.019761f, + -0.008689f, -0.028362f, +0.020425f, -0.015496f, +0.022259f, -0.020096f, -0.023589f, -0.006730f, -0.002007f, +0.014483f, + -0.023518f, +0.015476f, -0.017767f, -0.002791f, -0.012033f, -0.009985f, -0.001146f, -0.000651f, +0.007895f, -0.007480f, + -0.001068f, -0.000637f, -0.004932f, +0.006500f, +0.001610f, +0.002510f, -0.004461f, +0.001515f, -0.006902f, -0.006378f, + +0.002935f, -0.007088f, -0.004911f, -0.001260f, +0.002842f, -0.000370f, +0.004663f, -0.002535f, -0.006788f, -0.000905f, + -0.001123f, -0.008629f, -0.005974f, -0.000054f, -0.002634f, +0.001275f, +0.000116f, -0.000011f, -0.005077f, +0.003819f, + -0.001518f, -0.001696f, +0.001192f, +0.001485f, -0.002539f, +0.000113f, +0.003948f, -0.000912f, +0.001741f, -0.000021f, + -0.000401f, -0.000491f, -0.000892f, -0.000878f, +0.000531f, +0.003208f + } + }, + { + { + +0.044511f, +0.150812f, -0.000863f, -0.017263f, -0.000976f, +0.000479f, +0.012309f, -0.025211f, -0.010262f, -0.000592f, + +0.007180f, -0.055193f, +0.005657f, -0.017072f, +0.013435f, -0.002911f, -0.009941f, +0.011438f, +0.007771f, -0.010100f, + +0.002913f, +0.002606f, -0.012422f, -0.029952f, -0.035092f, -0.012112f, +0.015980f, +0.004196f, -0.008586f, +0.002354f, + -0.021314f, +0.003192f, +0.006711f, +0.009919f, -0.002898f, +0.026099f, -0.007825f, +0.001165f, +0.009657f, +0.001685f, + +0.002244f, +0.000629f, +0.003443f, -0.000628f, -0.003540f, +0.001858f, -0.009166f, +0.015234f, -0.002629f, +0.010471f, + -0.007585f, +0.000706f, -0.001347f, -0.006614f, +0.002642f, -0.004021f, -0.010981f, -0.014123f, +0.015882f, -0.006216f, + +0.004157f, -0.002033f, -0.006656f, +0.006430f, -0.000043f, -0.002712f, +0.005536f, -0.004517f, -0.000327f, -0.004796f, + +0.003681f, +0.002890f, +0.001521f, -0.003879f, +0.001857f, -0.000269f, +0.001118f, -0.002138f, +0.002118f, -0.001748f, + +0.002208f, +0.002760f, +0.002287f, +0.002744f, -0.001333f, -0.002444f, +0.001070f, +0.004224f, -0.002141f, +0.000891f, + -0.002013f, -0.003546f, +0.003807f, -0.000444f, +0.000122f, -0.001180f + }, + { + -0.000934f, +0.029024f, +0.046258f, -0.021433f, -0.010824f, -0.000354f, -0.001483f, +0.018022f, -0.015981f, -0.010767f, + +0.001238f, -0.018674f, -0.010069f, +0.049093f, -0.022272f, -0.010900f, -0.023816f, +0.003587f, -0.010251f, +0.024882f, + -0.006934f, -0.011868f, +0.015718f, -0.034185f, -0.019181f, +0.027538f, +0.022552f, -0.031457f, +0.011669f, -0.011161f, + +0.010560f, +0.019430f, +0.004499f, +0.006163f, -0.014405f, +0.001179f, +0.015328f, +0.003376f, -0.012529f, -0.001709f, + +0.003920f, +0.001685f, +0.008336f, -0.001363f, -0.002852f, +0.003315f, -0.000954f, +0.000676f, -0.000698f, -0.000781f, + -0.000689f, +0.005614f, +0.015195f, +0.000655f, +0.003756f, -0.006915f, -0.007149f, +0.000865f, -0.010891f, +0.000712f, + +0.011078f, +0.002013f, +0.001989f, +0.002728f, +0.004858f, -0.003936f, +0.002897f, +0.005541f, +0.002028f, -0.002585f, + -0.002263f, -0.002814f, -0.009217f, +0.000433f, -0.003104f, +0.001570f, +0.000636f, -0.000386f, -0.002268f, -0.003682f, + +0.002342f, +0.001513f, +0.001358f, -0.001284f, +0.000894f, -0.000328f, +0.000680f, +0.002201f, -0.000395f, +0.000961f, + -0.000097f, +0.002515f, +0.003434f, +0.001239f, -0.001445f, -0.002246f + }, + { + -0.001372f, +0.168042f, -0.036140f, -0.011294f, +0.010460f, +0.003704f, -0.008460f, +0.009757f, -0.007564f, +0.007795f, + +0.020254f, -0.013344f, -0.007686f, +0.019512f, +0.012269f, +0.022694f, -0.026681f, +0.047691f, -0.043378f, +0.009536f, + +0.019535f, -0.020957f, -0.001731f, -0.003543f, +0.007238f, +0.013354f, +0.005515f, -0.003960f, -0.000832f, -0.001459f, + -0.006969f, -0.010009f, -0.020769f, +0.001066f, +0.004860f, -0.005271f, -0.001821f, +0.006856f, -0.006259f, +0.016638f, + -0.018307f, -0.010095f, +0.008093f, +0.015164f, -0.004507f, -0.004841f, -0.001729f, +0.005673f, -0.007396f, +0.018957f, + +0.002386f, -0.008320f, +0.007081f, -0.000341f, -0.013125f, -0.002717f, -0.012703f, +0.006287f, +0.000909f, +0.002594f, + +0.000108f, -0.006297f, -0.001008f, -0.002877f, +0.003965f, -0.000110f, -0.003005f, +0.006154f, -0.000682f, +0.004497f, + -0.006042f, +0.000758f, +0.005074f, +0.000528f, +0.002887f, -0.001974f, -0.003419f, -0.001317f, +0.002799f, +0.000218f, + -0.002813f, -0.000531f, +0.000862f, -0.001564f, -0.000196f, -0.001700f, +0.003342f, -0.001652f, +0.001038f, +0.000206f, + -0.002161f, +0.001341f, -0.001167f, +0.003088f, -0.001767f, +0.000558f + }, + { + +0.108590f, +0.106534f, -0.045156f, +0.041173f, +0.007920f, +0.001055f, -0.019428f, +0.023168f, +0.006765f, +0.022402f, + -0.010076f, -0.008992f, +0.012696f, +0.028842f, +0.003969f, +0.013214f, +0.020229f, +0.012098f, -0.010695f, -0.025365f, + +0.016106f, +0.004167f, -0.012628f, -0.006526f, +0.001420f, -0.030492f, +0.002512f, -0.008696f, -0.005910f, +0.003285f, + -0.000575f, +0.003805f, -0.005897f, -0.007472f, +0.016190f, +0.005026f, +0.012737f, +0.004412f, +0.015458f, +0.017604f, + +0.002569f, +0.004242f, -0.007271f, -0.003462f, -0.006111f, +0.015655f, +0.002142f, -0.002646f, -0.000076f, -0.016610f, + +0.005138f, -0.005759f, -0.000004f, +0.012788f, -0.001923f, -0.001703f, +0.002537f, +0.002730f, +0.001343f, +0.001032f, + -0.001951f, +0.006117f, -0.008220f, +0.005877f, -0.000919f, -0.001939f, +0.001008f, -0.004413f, -0.005091f, +0.002696f, + -0.004504f, -0.001875f, +0.000759f, +0.002093f, +0.001394f, -0.004209f, -0.000026f, -0.003374f, -0.000204f, -0.000057f, + -0.000041f, +0.001614f, +0.001428f, +0.001177f, +0.001546f, +0.000094f, -0.000228f, -0.002765f, +0.000777f, -0.002348f, + +0.000252f, -0.000336f, -0.002819f, -0.001081f, -0.001394f, +0.002774f + }, + { + +0.001274f, +0.046045f, +0.001090f, +0.002252f, -0.006788f, -0.002870f, -0.000017f, +0.006692f, +0.004538f, -0.001802f, + -0.002441f, +0.007211f, -0.016478f, -0.019944f, -0.043071f, -0.068301f, -0.020043f, +0.090120f, +0.003543f, -0.014349f, + +0.003998f, -0.014836f, -0.018318f, +0.022840f, +0.018210f, -0.020179f, +0.012659f, -0.015473f, +0.015467f, -0.023949f, + -0.011433f, -0.002549f, -0.027278f, -0.014508f, +0.018402f, -0.017248f, -0.003842f, +0.005258f, -0.005161f, +0.004953f, + -0.011977f, +0.002560f, -0.005117f, +0.001885f, -0.020043f, +0.023465f, -0.011383f, -0.007450f, +0.006112f, +0.001859f, + -0.003044f, -0.004636f, +0.002466f, +0.001555f, +0.000113f, -0.000774f, +0.004600f, +0.005813f, -0.006766f, +0.004077f, + -0.007339f, -0.003003f, +0.002729f, +0.003771f, +0.001950f, -0.000809f, +0.006769f, +0.004542f, -0.002970f, +0.003013f, + -0.004756f, -0.004638f, +0.003606f, +0.002429f, -0.006951f, +0.001609f, +0.006026f, +0.000723f, +0.000297f, +0.000476f, + +0.001662f, -0.001805f, -0.003488f, +0.000659f, -0.000260f, +0.003616f, +0.001290f, -0.000714f, +0.001052f, +0.000015f, + +0.001622f, -0.000573f, -0.002913f, -0.000176f, +0.000269f, +0.000441f + }, + { + +0.156162f, +0.059148f, -0.061189f, -0.006243f, +0.000012f, -0.007901f, +0.011933f, +0.022525f, -0.037669f, +0.004175f, + -0.003733f, +0.023916f, +0.007283f, -0.007481f, -0.020024f, -0.005354f, -0.016675f, -0.001274f, +0.021797f, +0.007274f, + +0.018271f, +0.009520f, -0.005237f, +0.015848f, -0.011642f, +0.011437f, -0.006256f, -0.006384f, +0.000060f, +0.004331f, + -0.018703f, -0.018879f, +0.004273f, -0.015344f, -0.004874f, +0.007741f, +0.008242f, +0.003189f, -0.005858f, +0.003476f, + +0.004199f, -0.007640f, +0.005908f, -0.005590f, -0.008215f, +0.002723f, +0.002584f, +0.002722f, -0.009466f, +0.006836f, + -0.005306f, +0.002707f, +0.004666f, +0.001791f, -0.010064f, +0.005182f, -0.004609f, +0.004648f, +0.000146f, -0.001513f, + +0.000145f, -0.000791f, +0.004578f, -0.000561f, +0.000991f, +0.002738f, -0.006423f, -0.004864f, +0.000216f, +0.003058f, + -0.000604f, +0.004422f, -0.001941f, +0.004860f, -0.000761f, -0.002798f, -0.001585f, -0.002366f, -0.000417f, +0.003507f, + -0.002348f, +0.004618f, -0.005454f, +0.000979f, +0.000614f, +0.002219f, -0.001812f, +0.001058f, +0.001066f, +0.001457f, + -0.000981f, -0.000972f, -0.001650f, -0.001231f, -0.000480f, -0.000513f + }, + { + +0.001356f, +0.025442f, +0.013954f, -0.010968f, -0.003180f, -0.000183f, -0.000347f, -0.002988f, +0.001303f, -0.008658f, + -0.014773f, +0.005262f, -0.019425f, -0.027250f, -0.010387f, -0.024852f, -0.068497f, -0.027094f, +0.002725f, +0.010588f, + +0.015374f, -0.002346f, +0.034829f, -0.048758f, -0.047243f, -0.000572f, -0.042891f, -0.002378f, -0.004864f, +0.038872f, + +0.035669f, +0.012375f, +0.014885f, +0.006528f, -0.003147f, +0.014657f, +0.002072f, +0.000995f, -0.004977f, +0.016298f, + -0.001755f, +0.000198f, +0.007155f, -0.008328f, +0.006801f, +0.000290f, +0.004713f, -0.002738f, +0.005141f, +0.003557f, + +0.004950f, +0.006998f, +0.006927f, +0.005113f, -0.002043f, +0.003886f, -0.000673f, +0.001982f, +0.005983f, -0.003420f, + -0.002316f, -0.006603f, +0.001292f, +0.005012f, +0.001484f, -0.000144f, -0.003125f, +0.005223f, +0.006081f, +0.000782f, + -0.008500f, -0.000716f, -0.003140f, +0.001518f, +0.003276f, -0.001777f, -0.000691f, +0.001912f, +0.000190f, +0.000934f, + -0.003362f, -0.003454f, +0.003535f, +0.000445f, +0.001218f, +0.000225f, +0.000663f, +0.004768f, +0.001343f, +0.001148f, + +0.001241f, -0.001131f, +0.001642f, +0.003468f, +0.001146f, +0.000353f + }, + { + -0.049063f, -0.828289f, +0.018788f, +0.011699f, -0.013121f, -0.004698f, -0.005874f, -0.017817f, +0.009450f, -0.004303f, + +0.014367f, -0.003837f, +0.011020f, +0.000743f, +0.042964f, -0.012301f, -0.000948f, -0.024925f, -0.016726f, +0.006031f, + -0.002560f, +0.017389f, +0.016280f, +0.001055f, -0.023797f, +0.006065f, +0.005305f, -0.009726f, +0.005983f, +0.001739f, + -0.007614f, -0.008831f, +0.002412f, +0.005962f, +0.002110f, -0.001192f, +0.004889f, +0.020367f, +0.008204f, -0.000720f, + +0.000157f, +0.006063f, +0.008643f, +0.002338f, +0.002548f, +0.002575f, +0.009210f, -0.003809f, +0.001401f, +0.001623f, + -0.009084f, +0.007981f, -0.009519f, -0.009305f, +0.011585f, -0.007855f, +0.000318f, +0.003847f, -0.002526f, +0.002610f, + -0.004432f, -0.006812f, -0.000492f, -0.001413f, -0.002533f, +0.003852f, +0.005372f, +0.000764f, +0.000225f, +0.003013f, + -0.004483f, -0.000644f, -0.003028f, +0.004800f, +0.000887f, -0.001782f, +0.003116f, -0.001201f, +0.002433f, -0.000756f, + -0.002500f, +0.000539f, +0.001049f, +0.002020f, +0.000542f, +0.001772f, +0.005185f, +0.002472f, -0.002202f, -0.002305f, + +0.001811f, +0.000809f, +0.001606f, +0.001226f, -0.003331f, -0.001010f + }, + { + +0.002249f, +0.009040f, +0.010887f, +0.002738f, +0.008278f, -0.000694f, -0.004581f, +0.006794f, -0.014822f, +0.002712f, + +0.000435f, -0.005813f, +0.008614f, -0.017642f, -0.148158f, -0.052470f, -0.041056f, +0.018464f, -0.029714f, +0.022358f, + +0.019226f, -0.024393f, +0.002011f, +0.025039f, +0.041103f, -0.037509f, +0.010502f, +0.009827f, +0.007964f, +0.015274f, + -0.016399f, +0.003385f, -0.006820f, +0.005477f, +0.001513f, +0.004317f, -0.012540f, -0.001370f, -0.002188f, -0.005680f, + +0.000984f, +0.006974f, -0.005292f, +0.016088f, -0.009164f, +0.013161f, -0.002268f, +0.007406f, +0.001973f, -0.004436f, + +0.007651f, +0.004934f, -0.009367f, +0.008864f, +0.002432f, +0.000176f, -0.003463f, +0.005425f, -0.002129f, -0.008368f, + -0.009816f, +0.000116f, +0.001889f, +0.003742f, -0.000591f, +0.003639f, +0.000741f, -0.002529f, -0.001184f, -0.001688f, + -0.000266f, -0.004506f, +0.006632f, +0.001142f, -0.005474f, +0.000069f, -0.001568f, -0.001398f, -0.006659f, +0.001440f, + +0.001254f, -0.000142f, +0.000335f, -0.000619f, +0.003292f, -0.003950f, +0.000657f, +0.000319f, -0.000396f, -0.002052f, + -0.000121f, -0.000866f, -0.000136f, -0.000759f, -0.002762f, +0.002603f + }, + { + +0.004352f, -0.526146f, -0.044168f, +0.018075f, -0.011681f, +0.047678f, +0.024940f, +0.041152f, +0.028246f, +0.034964f, + -0.016392f, +0.007847f, +0.034165f, +0.037688f, +0.009070f, +0.002388f, +0.039529f, +0.003174f, -0.003470f, -0.007725f, + +0.018420f, -0.000417f, +0.011416f, -0.022803f, -0.010933f, -0.004431f, -0.006443f, -0.016947f, -0.022238f, +0.008030f, + -0.003840f, +0.014160f, -0.016557f, -0.002086f, +0.017557f, +0.000339f, +0.009103f, +0.008701f, -0.015310f, -0.000385f, + +0.016349f, +0.000079f, +0.002854f, -0.004636f, -0.007938f, -0.006491f, +0.000507f, -0.000342f, -0.000402f, +0.009395f, + +0.005723f, +0.012090f, -0.004930f, -0.008876f, -0.002731f, +0.002021f, +0.002520f, +0.004794f, +0.002755f, -0.000187f, + +0.000260f, -0.000530f, -0.005293f, +0.003441f, +0.004446f, -0.002633f, -0.000881f, +0.005201f, -0.006353f, +0.004913f, + -0.002010f, -0.000864f, +0.004566f, +0.000415f, -0.000125f, -0.002557f, -0.005421f, +0.003591f, -0.002703f, +0.002577f, + +0.000286f, +0.000749f, -0.005039f, -0.002932f, -0.000017f, +0.000786f, +0.002960f, +0.002202f, -0.004135f, -0.006730f, + +0.001880f, -0.003311f, -0.001812f, -0.003870f, +0.001002f, -0.001864f + }, + { + -0.007100f, +0.027951f, +0.024608f, -0.012841f, +0.006737f, -0.017778f, +0.020422f, +0.000476f, -0.003621f, -0.025326f, + +0.009175f, +0.000681f, +0.040062f, -0.001078f, +0.018079f, -0.011726f, +0.003971f, -0.023336f, +0.019999f, +0.001236f, + -0.023440f, +0.023124f, +0.023671f, -0.001451f, +0.010208f, +0.002252f, -0.003542f, -0.001086f, -0.013122f, -0.003633f, + +0.017437f, +0.002777f, +0.022042f, -0.003632f, -0.006912f, -0.012841f, -0.006977f, -0.002454f, -0.001205f, -0.002289f, + +0.004812f, +0.031627f, +0.005797f, -0.001121f, -0.006589f, -0.015655f, -0.014024f, +0.001352f, +0.007043f, -0.001035f, + -0.002947f, -0.001923f, +0.005044f, -0.000786f, +0.001744f, +0.006485f, -0.002361f, +0.000359f, +0.005430f, -0.002480f, + -0.000939f, -0.008471f, +0.000320f, -0.008186f, -0.000559f, +0.003522f, -0.003522f, -0.006807f, +0.005619f, +0.000824f, + +0.000151f, +0.001706f, +0.001146f, +0.001864f, -0.000668f, +0.001353f, -0.003037f, -0.002043f, +0.002009f, -0.004810f, + +0.004200f, +0.000355f, -0.001717f, +0.000164f, +0.001312f, -0.002581f, -0.002350f, -0.001804f, +0.003251f, -0.000585f, + +0.000949f, +0.000037f, -0.000488f, -0.001520f, -0.000393f, +0.004070f + }, + { + -0.069863f, +0.196467f, -0.013577f, -0.016244f, +0.031974f, +0.042689f, -0.001628f, -0.004264f, +0.020997f, +0.002158f, + +0.003931f, +0.024444f, +0.005465f, -0.003838f, -0.030084f, +0.001668f, +0.002495f, -0.003971f, +0.023968f, -0.044031f, + -0.011601f, +0.002467f, +0.016703f, -0.004074f, +0.034191f, +0.014014f, -0.014298f, -0.009275f, +0.012932f, -0.007116f, + -0.000052f, -0.000655f, -0.014875f, +0.005348f, -0.000245f, +0.002491f, -0.005908f, -0.006560f, -0.006666f, +0.008661f, + +0.009089f, +0.012395f, +0.001077f, -0.003605f, +0.014625f, +0.001684f, +0.013909f, -0.006050f, +0.001968f, -0.001716f, + -0.010659f, -0.004840f, -0.006601f, -0.005573f, +0.001332f, +0.000638f, -0.005431f, +0.006333f, -0.000686f, +0.005645f, + -0.003131f, +0.004762f, -0.002436f, +0.006486f, -0.001833f, -0.000023f, +0.002518f, +0.002329f, +0.005725f, -0.005221f, + -0.000705f, +0.005406f, -0.006431f, -0.003839f, -0.003816f, +0.000427f, +0.003621f, +0.000288f, +0.001248f, +0.001299f, + +0.000236f, -0.002818f, +0.000857f, +0.003468f, -0.002576f, -0.001918f, -0.001580f, -0.000419f, +0.001065f, +0.001282f, + -0.000365f, +0.001421f, +0.001144f, -0.000971f, +0.001277f, -0.001581f + }, + { + +0.001232f, +0.110947f, -0.009346f, +0.006384f, -0.000224f, -0.013003f, -0.006541f, -0.002306f, -0.000154f, +0.005028f, + +0.000825f, +0.001908f, -0.021816f, +0.073584f, +0.025694f, +0.045114f, +0.024520f, +0.022276f, -0.023356f, +0.026956f, + -0.024123f, +0.018906f, +0.020981f, +0.006027f, +0.001292f, -0.021529f, +0.018546f, -0.002730f, -0.008997f, +0.050422f, + -0.019752f, -0.007168f, +0.001519f, +0.011728f, +0.000493f, -0.002304f, +0.022853f, -0.006618f, +0.021231f, -0.004386f, + +0.008139f, -0.012040f, -0.000546f, -0.006932f, -0.003544f, -0.004186f, -0.002704f, -0.008401f, +0.005004f, +0.016799f, + +0.004835f, +0.008363f, +0.004449f, +0.004966f, +0.002525f, +0.010222f, +0.002364f, +0.013131f, -0.003199f, +0.004663f, + +0.001528f, +0.012865f, -0.001294f, -0.003806f, -0.002880f, +0.003368f, -0.003153f, -0.000009f, -0.007182f, -0.004338f, + -0.007568f, +0.006160f, -0.001431f, -0.002063f, +0.005571f, +0.002121f, +0.000571f, -0.000996f, +0.002266f, -0.004447f, + -0.001207f, -0.001416f, +0.000894f, -0.001068f, +0.001512f, +0.001795f, -0.000264f, -0.005509f, -0.001824f, +0.002358f, + -0.001211f, +0.000163f, -0.002758f, +0.001664f, -0.002229f, -0.000291f + }, + { + +0.014867f, +0.246385f, +0.013591f, -0.015118f, -0.026986f, +0.000270f, +0.000978f, -0.016722f, +0.009192f, -0.007138f, + -0.015361f, -0.058546f, -0.027799f, +0.020836f, +0.008049f, -0.018903f, +0.036318f, +0.002749f, -0.008945f, -0.019950f, + +0.022847f, +0.017106f, +0.003039f, +0.014481f, +0.011745f, +0.020228f, -0.005908f, +0.000308f, +0.047877f, -0.017614f, + -0.010950f, -0.019000f, -0.002021f, +0.002128f, +0.000485f, -0.023384f, -0.031076f, +0.013304f, +0.012112f, +0.025097f, + -0.001130f, -0.003133f, -0.009125f, +0.002882f, -0.012014f, +0.001798f, +0.011860f, -0.012488f, -0.004717f, -0.001269f, + -0.005155f, +0.006080f, +0.005845f, +0.002753f, -0.001886f, +0.000639f, +0.004372f, +0.002434f, -0.011090f, -0.002825f, + +0.004057f, -0.000435f, -0.000239f, -0.002773f, +0.005104f, -0.002154f, +0.004228f, -0.003277f, -0.000375f, -0.003384f, + -0.005210f, -0.001868f, -0.006840f, +0.001961f, +0.003346f, -0.002752f, +0.004324f, -0.001578f, -0.003170f, +0.001593f, + +0.003100f, +0.000706f, +0.000107f, -0.003481f, +0.000136f, -0.003670f, +0.001037f, -0.003369f, +0.001068f, +0.005040f, + +0.003231f, -0.002524f, +0.001160f, -0.002013f, -0.000036f, +0.002096f + }, + { + +0.011819f, -0.040065f, -0.028784f, -0.001354f, -0.005622f, -0.013133f, -0.001521f, +0.020817f, +0.005558f, -0.007493f, + +0.000346f, +0.003755f, -0.003736f, +0.057306f, +0.077992f, -0.012902f, -0.027138f, -0.001116f, +0.001785f, -0.039291f, + -0.056951f, +0.046459f, +0.000759f, +0.019062f, +0.001717f, +0.000926f, -0.000349f, +0.033604f, -0.020770f, +0.024268f, + +0.036560f, +0.012854f, +0.024712f, -0.021171f, +0.011521f, -0.007637f, +0.001815f, -0.013943f, -0.011201f, +0.027515f, + -0.013279f, +0.022155f, -0.009651f, -0.007248f, -0.016823f, -0.012579f, -0.004401f, -0.009426f, -0.004783f, -0.009585f, + +0.001123f, +0.007376f, +0.007510f, +0.001256f, -0.014865f, -0.004905f, -0.007340f, +0.003618f, +0.004964f, +0.009415f, + +0.007629f, -0.003488f, -0.005296f, +0.000410f, +0.006815f, -0.000811f, -0.000112f, -0.005322f, -0.001853f, +0.002833f, + +0.000743f, -0.001971f, +0.000630f, +0.002103f, +0.000186f, +0.000596f, +0.000366f, +0.001085f, -0.003642f, +0.003565f, + -0.006413f, -0.002731f, -0.000409f, -0.001496f, -0.002078f, +0.000361f, +0.000627f, -0.003267f, +0.002544f, -0.000281f, + -0.000810f, +0.000294f, +0.000226f, +0.000965f, +0.001206f, +0.000745f + } + }, + { + { + -0.032269f, +0.104405f, +0.022530f, +0.008044f, +0.011306f, -0.000375f, -0.010130f, -0.019267f, -0.011419f, -0.011872f, + +0.014434f, -0.022196f, -0.018729f, +0.007795f, +0.015199f, -0.015232f, -0.019108f, +0.007023f, -0.002046f, +0.014678f, + -0.022604f, +0.011788f, -0.018563f, -0.018934f, -0.023456f, -0.005785f, -0.002669f, +0.000069f, +0.014512f, -0.004330f, + -0.008189f, -0.006147f, +0.004089f, +0.021101f, +0.001369f, +0.009178f, +0.002684f, -0.007097f, +0.012907f, +0.004967f, + -0.005244f, +0.009940f, +0.000239f, -0.009168f, +0.004290f, -0.002958f, -0.007176f, +0.006680f, +0.002708f, +0.011328f, + -0.003061f, -0.005263f, +0.001900f, -0.004358f, -0.001678f, -0.006132f, -0.011482f, -0.012017f, +0.007842f, -0.004518f, + -0.001463f, +0.002413f, +0.000577f, +0.002387f, -0.000584f, -0.005845f, +0.002010f, -0.001048f, +0.002461f, -0.003093f, + -0.000920f, +0.005924f, -0.003100f, -0.001995f, -0.000959f, +0.001025f, +0.000394f, +0.000446f, -0.001821f, +0.000457f, + -0.000709f, +0.006410f, +0.002250f, +0.001222f, -0.001690f, +0.000401f, +0.001589f, +0.000313f, -0.001310f, +0.002052f, + -0.001867f, -0.003268f, +0.003340f, -0.001413f, +0.000982f, -0.001696f + }, + { + +0.002289f, +0.064216f, +0.017226f, -0.031216f, +0.003617f, -0.002556f, +0.001989f, +0.006231f, +0.002235f, -0.025313f, + -0.007080f, -0.013675f, -0.006432f, +0.022182f, +0.012383f, -0.014578f, -0.023900f, -0.015816f, +0.041787f, -0.025229f, + +0.000432f, +0.019717f, -0.008513f, -0.011639f, -0.016640f, +0.003007f, +0.016192f, -0.019141f, +0.002847f, -0.010874f, + +0.017484f, +0.002140f, +0.022426f, -0.004511f, +0.004302f, +0.001159f, +0.011068f, +0.011815f, -0.013902f, -0.005333f, + +0.012098f, -0.002706f, +0.010910f, -0.013514f, -0.003173f, +0.006506f, +0.014444f, -0.002403f, -0.005552f, +0.000450f, + +0.000748f, +0.004205f, +0.014531f, +0.005254f, +0.001508f, -0.001521f, -0.009161f, -0.011067f, -0.002805f, +0.001804f, + +0.009882f, +0.005166f, +0.000707f, +0.002149f, +0.004961f, -0.004844f, +0.003188f, +0.007751f, +0.002173f, -0.003263f, + -0.004243f, -0.002873f, -0.005541f, -0.003768f, -0.001516f, -0.001592f, -0.001302f, -0.000143f, -0.000422f, -0.001991f, + +0.002947f, -0.000562f, +0.000985f, +0.000915f, -0.000457f, +0.000614f, +0.000214f, +0.002558f, -0.001079f, +0.002400f, + -0.000323f, +0.002326f, +0.001576f, +0.002253f, +0.000393f, -0.001854f + }, + { + -0.000653f, +0.070744f, +0.031557f, +0.021325f, -0.018352f, +0.004939f, -0.001763f, +0.008357f, -0.001595f, -0.013438f, + +0.035653f, +0.001891f, -0.021623f, +0.008806f, +0.024870f, +0.008862f, +0.012072f, +0.014947f, -0.028245f, -0.005372f, + +0.008521f, -0.019753f, +0.017280f, -0.006984f, -0.009209f, +0.018965f, +0.003286f, +0.012677f, -0.020496f, +0.001112f, + +0.010750f, -0.029301f, -0.017196f, +0.011661f, -0.016279f, +0.007343f, -0.007060f, +0.008260f, +0.000187f, +0.000435f, + -0.014143f, -0.010175f, +0.004774f, +0.016186f, -0.003297f, -0.004315f, -0.003572f, +0.011955f, -0.009673f, +0.004514f, + +0.004214f, +0.004849f, -0.002975f, -0.002698f, -0.004340f, -0.007714f, -0.008192f, +0.004905f, +0.000678f, +0.006781f, + -0.004894f, -0.005403f, -0.003254f, -0.002229f, +0.004355f, +0.000764f, +0.000988f, -0.001346f, +0.001809f, +0.002247f, + -0.002200f, -0.002740f, +0.005682f, +0.000792f, -0.000310f, +0.000258f, -0.001689f, -0.002312f, +0.001646f, +0.000274f, + -0.002069f, -0.000577f, +0.001542f, -0.001456f, -0.003119f, +0.001996f, +0.002380f, +0.000829f, -0.004404f, +0.001643f, + -0.001052f, -0.000444f, +0.001448f, -0.000033f, +0.000379f, -0.000420f + }, + { + -0.107232f, +0.300186f, +0.046764f, +0.004821f, +0.019408f, +0.007064f, -0.006547f, +0.003352f, +0.008722f, +0.040906f, + -0.009086f, -0.019766f, +0.015787f, +0.005859f, +0.022613f, -0.000442f, +0.030117f, +0.021257f, -0.014369f, -0.008023f, + -0.006072f, -0.009086f, +0.006667f, -0.012886f, -0.000898f, -0.008908f, -0.029388f, +0.002455f, -0.005396f, +0.008092f, + +0.005485f, +0.011255f, -0.001613f, -0.000409f, +0.002796f, +0.011466f, -0.000607f, +0.012520f, +0.002604f, +0.029840f, + +0.006151f, -0.008123f, -0.001867f, -0.014082f, +0.000978f, +0.004741f, +0.017673f, -0.004543f, +0.002791f, -0.011057f, + -0.004620f, +0.000757f, -0.000257f, +0.005384f, +0.000452f, -0.004000f, +0.001717f, +0.008026f, -0.001626f, +0.000261f, + -0.001068f, +0.006009f, -0.001637f, -0.000959f, +0.005130f, -0.004566f, +0.003509f, -0.004599f, -0.004310f, +0.003919f, + -0.000779f, +0.000679f, -0.003171f, -0.000945f, +0.000919f, -0.000714f, -0.001125f, -0.001599f, -0.000878f, +0.000462f, + -0.001167f, +0.000727f, +0.002703f, +0.001363f, +0.000450f, -0.000518f, +0.000958f, -0.003382f, -0.001763f, -0.000180f, + +0.001357f, -0.001376f, -0.001768f, -0.001960f, -0.000518f, +0.002499f + }, + { + -0.002826f, +0.045317f, +0.003255f, -0.008339f, +0.004355f, -0.002694f, -0.000410f, -0.000375f, +0.006863f, -0.005021f, + +0.009752f, -0.006752f, -0.004118f, -0.036032f, -0.051368f, -0.041867f, -0.020114f, +0.011298f, +0.060598f, +0.004450f, + +0.011519f, -0.029563f, -0.030037f, +0.030554f, +0.000764f, -0.025396f, +0.028137f, -0.009130f, +0.024724f, -0.039969f, + +0.005602f, -0.005394f, -0.044581f, +0.014922f, +0.012549f, -0.013661f, -0.004873f, -0.000864f, +0.003665f, -0.001648f, + -0.000933f, +0.001210f, -0.001271f, -0.011148f, -0.005606f, +0.000036f, +0.003227f, -0.008036f, +0.003251f, +0.002527f, + +0.000498f, -0.002912f, -0.002893f, +0.004828f, -0.001933f, +0.005559f, +0.004344f, -0.000687f, -0.009432f, +0.003058f, + -0.000768f, -0.003524f, +0.004842f, +0.006499f, -0.000958f, +0.001664f, +0.004949f, +0.003705f, -0.000470f, +0.002158f, + -0.006306f, -0.003395f, +0.002610f, -0.000217f, -0.002173f, -0.000007f, +0.003887f, +0.001989f, +0.003017f, +0.002073f, + -0.003238f, +0.000055f, -0.003134f, -0.000315f, +0.001653f, +0.003509f, +0.001618f, -0.001023f, +0.000344f, +0.000478f, + +0.001100f, -0.000406f, -0.000891f, -0.001591f, -0.000919f, +0.000176f + }, + { + -0.149720f, +0.344919f, +0.024061f, +0.019526f, -0.004457f, -0.007037f, +0.007817f, +0.012318f, -0.028966f, -0.006953f, + +0.016565f, -0.015264f, +0.038406f, -0.033493f, -0.003854f, +0.003074f, -0.029457f, +0.002750f, +0.014296f, +0.024260f, + +0.019249f, +0.011363f, -0.009225f, +0.008686f, -0.002278f, +0.007155f, -0.001900f, -0.002007f, -0.011441f, -0.008878f, + -0.010353f, -0.024610f, -0.001325f, +0.006471f, -0.010160f, +0.009612f, -0.006107f, +0.002625f, +0.003181f, +0.007706f, + +0.001963f, -0.005901f, -0.000329f, -0.003325f, -0.010763f, +0.001089f, +0.004851f, +0.000722f, -0.012347f, +0.003469f, + +0.004790f, +0.000149f, +0.010229f, -0.003938f, +0.003232f, -0.003687f, +0.002071f, +0.000666f, -0.002780f, -0.001278f, + +0.000541f, -0.002383f, +0.005388f, +0.006128f, +0.001584f, -0.004620f, -0.000800f, -0.001976f, -0.002872f, +0.002040f, + +0.001715f, -0.000303f, +0.005289f, -0.000941f, +0.000205f, -0.001659f, +0.000171f, +0.000243f, -0.002869f, +0.001889f, + -0.001888f, +0.002213f, -0.002461f, -0.003157f, +0.003283f, +0.001198f, +0.000268f, -0.000882f, +0.002375f, -0.001132f, + -0.002154f, +0.002498f, -0.000905f, -0.001716f, -0.001784f, +0.001649f + }, + { + -0.000334f, +0.030699f, +0.012403f, -0.000689f, -0.007177f, +0.000098f, +0.000978f, -0.004760f, +0.005556f, -0.019492f, + -0.006364f, -0.009521f, -0.005955f, -0.029562f, +0.019385f, -0.018792f, -0.087509f, -0.011053f, +0.016657f, -0.019652f, + -0.006524f, +0.030774f, +0.003670f, -0.051190f, -0.024332f, -0.018493f, -0.007756f, -0.026524f, -0.003782f, +0.049144f, + +0.039313f, +0.013067f, -0.000264f, +0.006707f, -0.000374f, +0.014830f, +0.000969f, +0.007421f, +0.001156f, +0.010136f, + +0.001594f, +0.002013f, -0.009171f, +0.001719f, +0.011848f, +0.001043f, +0.001303f, -0.001643f, +0.007180f, +0.006284f, + +0.004779f, +0.003879f, +0.007735f, +0.004129f, +0.000199f, +0.001603f, +0.000595f, +0.001696f, +0.012614f, -0.001832f, + -0.004131f, -0.008174f, -0.005019f, +0.005807f, +0.000052f, +0.000826f, -0.002463f, +0.004776f, +0.006710f, +0.000322f, + -0.009661f, -0.004574f, +0.001768f, +0.000663f, +0.003844f, +0.000002f, +0.001669f, -0.002246f, -0.000143f, -0.000113f, + -0.000723f, -0.001578f, +0.001310f, +0.002951f, -0.002524f, -0.000403f, +0.005596f, -0.001126f, +0.001711f, +0.004477f, + -0.001790f, +0.000420f, +0.001136f, +0.001524f, +0.002482f, -0.000990f + }, + { + -0.010294f, -0.848040f, -0.020418f, +0.009994f, +0.000874f, +0.010033f, -0.028628f, +0.003051f, +0.000271f, -0.004697f, + +0.012756f, +0.000041f, -0.017948f, +0.020925f, +0.017296f, +0.010712f, -0.024774f, +0.009425f, -0.028069f, +0.006006f, + +0.004684f, +0.006867f, +0.012471f, -0.002503f, -0.013283f, -0.007221f, +0.010435f, -0.000613f, -0.009936f, -0.004521f, + +0.006906f, -0.002817f, +0.003158f, +0.006747f, +0.005421f, +0.014597f, -0.001400f, +0.016041f, +0.004277f, +0.000557f, + -0.006236f, +0.010106f, +0.007277f, -0.000261f, +0.003131f, +0.008841f, +0.014270f, -0.009741f, -0.006740f, +0.011133f, + -0.012986f, +0.007922f, -0.008933f, -0.006032f, +0.004367f, -0.008208f, +0.002081f, +0.000912f, +0.004241f, -0.000748f, + -0.003709f, -0.009932f, +0.002393f, -0.002930f, -0.002457f, +0.006826f, +0.004835f, +0.001479f, -0.001606f, +0.005222f, + -0.007206f, -0.000935f, -0.000744f, +0.004561f, +0.001757f, +0.000003f, -0.000399f, +0.001024f, +0.000863f, -0.000173f, + -0.002655f, -0.001359f, +0.001920f, +0.001986f, +0.003654f, +0.003187f, +0.000709f, +0.001863f, +0.000069f, -0.001120f, + +0.001453f, +0.000069f, +0.001363f, -0.000610f, -0.002207f, -0.001230f + }, + { + -0.000084f, +0.026092f, +0.001789f, +0.003279f, +0.010974f, -0.002440f, -0.000990f, -0.004519f, -0.003326f, +0.002210f, + -0.006430f, +0.002374f, +0.003611f, -0.033866f, -0.135139f, -0.039859f, -0.026439f, +0.012672f, -0.035322f, +0.037344f, + +0.018341f, -0.028373f, -0.020759f, +0.050668f, +0.000572f, -0.007225f, +0.007893f, +0.013750f, -0.003466f, +0.034443f, + -0.032117f, +0.007431f, +0.008403f, -0.004885f, -0.004769f, +0.012983f, -0.007317f, -0.009924f, +0.000303f, -0.002104f, + -0.006344f, +0.011098f, -0.000801f, -0.002598f, +0.011946f, +0.005295f, +0.002094f, +0.002058f, +0.003574f, +0.007477f, + -0.000038f, +0.002452f, -0.003311f, +0.003503f, +0.002958f, +0.004634f, -0.008296f, +0.007633f, -0.004217f, -0.000524f, + -0.013909f, +0.002018f, -0.002447f, +0.008221f, -0.000232f, +0.001209f, +0.000511f, -0.002943f, -0.000049f, -0.005618f, + +0.000641f, -0.000251f, +0.000468f, +0.003085f, -0.001384f, -0.005597f, +0.002362f, -0.003651f, -0.003296f, +0.001833f, + +0.001750f, -0.002582f, -0.001140f, +0.000930f, -0.000545f, -0.000056f, +0.001175f, +0.000843f, -0.002307f, +0.000484f, + -0.002092f, -0.000759f, +0.001055f, -0.003180f, -0.000593f, +0.002492f + }, + { + -0.007776f, -0.550591f, -0.026647f, +0.038045f, -0.020741f, +0.004140f, +0.037182f, +0.040720f, +0.044450f, +0.024638f, + -0.001865f, +0.007608f, +0.032013f, +0.015276f, +0.002316f, +0.037026f, +0.029545f, +0.017835f, +0.007225f, +0.002286f, + -0.017079f, +0.001573f, +0.006691f, -0.017421f, -0.019752f, +0.024366f, -0.027371f, -0.027249f, -0.024814f, +0.011515f, + +0.004582f, +0.005758f, -0.009739f, +0.005041f, +0.009573f, +0.006187f, +0.024219f, -0.008967f, -0.013499f, -0.014021f, + +0.033172f, -0.001065f, +0.007801f, -0.018569f, +0.010497f, -0.011797f, -0.001491f, +0.001453f, +0.000209f, +0.002341f, + +0.018771f, +0.004673f, -0.005667f, -0.009837f, -0.003112f, +0.002223f, -0.001078f, +0.009363f, +0.002063f, +0.002210f, + -0.000398f, -0.010838f, -0.001846f, +0.005887f, -0.000875f, -0.003198f, +0.005907f, +0.000513f, -0.004006f, +0.003149f, + +0.003934f, -0.002747f, -0.001155f, +0.003751f, -0.003162f, -0.000426f, -0.002153f, -0.001938f, -0.001011f, +0.004310f, + +0.000343f, -0.002081f, -0.002353f, -0.001218f, -0.001644f, -0.002355f, +0.002424f, +0.001805f, -0.003065f, -0.000320f, + -0.003770f, -0.001466f, -0.003582f, -0.000777f, -0.002802f, +0.001758f + }, + { + +0.006023f, +0.071414f, -0.014593f, -0.008342f, -0.011628f, +0.010673f, +0.005228f, -0.001796f, -0.007171f, +0.002395f, + -0.005064f, +0.015038f, +0.013899f, -0.001575f, +0.038228f, -0.011919f, +0.018808f, -0.042507f, +0.014080f, +0.008009f, + -0.022159f, +0.011546f, +0.035743f, -0.008529f, +0.018416f, +0.001675f, -0.005048f, -0.012402f, -0.006255f, +0.010366f, + -0.001087f, +0.004916f, +0.024147f, -0.001377f, -0.026508f, -0.000140f, -0.001162f, -0.007219f, +0.013216f, +0.001410f, + -0.001932f, +0.017890f, +0.007550f, -0.001328f, -0.002003f, -0.008621f, -0.012947f, -0.006197f, +0.007118f, +0.006263f, + -0.005160f, +0.001000f, +0.007770f, -0.005330f, -0.000880f, -0.000022f, +0.007330f, -0.001163f, +0.010069f, -0.007093f, + -0.002678f, +0.003037f, -0.006167f, -0.006745f, -0.003202f, -0.003675f, +0.000343f, +0.001477f, +0.001138f, +0.001134f, + +0.001265f, -0.000467f, +0.004608f, +0.002328f, -0.000726f, +0.000666f, -0.001306f, -0.001741f, -0.000469f, -0.001804f, + +0.002864f, -0.001915f, +0.000378f, -0.002507f, +0.002209f, -0.004878f, -0.000909f, -0.001857f, +0.004003f, -0.000167f, + -0.000899f, +0.001661f, -0.001351f, -0.002554f, +0.001988f, +0.002865f + }, + { + +0.105081f, -0.007642f, -0.032765f, -0.037362f, +0.037648f, +0.082644f, -0.042364f, +0.011706f, +0.014198f, +0.001124f, + +0.021490f, +0.001855f, -0.007682f, -0.012611f, -0.016416f, +0.003189f, +0.012016f, -0.019772f, +0.019043f, -0.017453f, + -0.021339f, +0.006629f, +0.022633f, +0.009757f, -0.009378f, +0.015523f, -0.003972f, +0.004792f, +0.004642f, -0.005619f, + -0.001343f, -0.002150f, -0.004474f, -0.005002f, -0.007177f, +0.033349f, -0.023057f, -0.014983f, -0.008335f, +0.014492f, + -0.002003f, +0.026813f, -0.015841f, +0.005837f, +0.012461f, +0.005771f, +0.002434f, +0.004384f, -0.002122f, -0.002663f, + -0.002391f, -0.006111f, -0.012517f, -0.002237f, +0.002446f, -0.005146f, +0.007272f, +0.001927f, +0.004586f, +0.000508f, + +0.005119f, +0.000303f, -0.002209f, +0.001409f, +0.001649f, +0.003772f, -0.000645f, +0.004115f, -0.001165f, +0.002790f, + +0.000258f, +0.000998f, -0.000572f, -0.005009f, -0.004388f, +0.001983f, +0.001789f, +0.000841f, +0.001147f, -0.002590f, + +0.000523f, +0.000329f, +0.001328f, +0.002086f, -0.002864f, -0.000629f, -0.002633f, +0.000786f, -0.000707f, -0.000106f, + +0.001519f, -0.000748f, +0.002269f, -0.001507f, +0.000907f, +0.000140f + }, + { + -0.002626f, +0.093380f, +0.002120f, -0.004326f, +0.016049f, -0.024272f, +0.005191f, -0.001939f, -0.001061f, -0.005256f, + +0.002585f, +0.004167f, -0.024444f, +0.044458f, +0.006098f, +0.084248f, +0.006357f, +0.028703f, -0.006642f, +0.008129f, + -0.037116f, +0.011692f, +0.070742f, +0.005385f, -0.038732f, +0.034078f, +0.020753f, -0.028655f, -0.003641f, +0.025939f, + -0.001009f, -0.005129f, +0.023503f, -0.008333f, +0.010349f, +0.006036f, +0.003021f, +0.007573f, +0.007790f, +0.013615f, + -0.005829f, -0.000242f, -0.012789f, +0.003578f, -0.006346f, -0.014761f, +0.008222f, -0.006698f, +0.010594f, +0.000835f, + +0.007069f, +0.013815f, +0.011128f, -0.007257f, +0.010951f, +0.007143f, +0.012140f, +0.004084f, +0.000700f, +0.002626f, + -0.003998f, +0.011526f, -0.001402f, -0.007194f, +0.002442f, -0.000621f, +0.004100f, -0.004550f, -0.005480f, -0.004882f, + -0.008514f, +0.007866f, -0.003965f, +0.000613f, +0.003744f, +0.000024f, +0.002673f, -0.002356f, -0.000442f, -0.001237f, + +0.001873f, -0.001097f, -0.001885f, -0.000529f, +0.000085f, +0.003286f, -0.003026f, -0.002429f, -0.001062f, -0.000704f, + -0.000495f, -0.000738f, -0.000175f, -0.000235f, -0.000103f, -0.000792f + }, + { + +0.025207f, +0.234514f, -0.001956f, -0.020248f, -0.009028f, +0.006522f, -0.000408f, -0.017540f, +0.005520f, -0.008652f, + -0.025992f, -0.058633f, -0.026345f, -0.019107f, +0.056958f, +0.007543f, -0.007314f, +0.002693f, -0.019291f, +0.002099f, + +0.014705f, +0.009852f, +0.016810f, +0.007383f, +0.032208f, -0.015904f, +0.018812f, +0.008732f, +0.035426f, -0.003762f, + -0.021750f, -0.016707f, -0.000199f, +0.000237f, -0.003159f, -0.008980f, -0.022018f, -0.003625f, +0.008386f, +0.014896f, + +0.020902f, -0.007882f, -0.013037f, +0.006872f, -0.019243f, +0.003667f, -0.002431f, -0.013277f, -0.008812f, +0.004048f, + +0.003957f, +0.009129f, -0.000732f, -0.002050f, +0.003641f, +0.000042f, +0.000442f, +0.003256f, -0.009473f, +0.003747f, + +0.002028f, -0.004344f, -0.000308f, +0.000584f, +0.007095f, -0.001180f, -0.001411f, +0.001428f, -0.002416f, -0.011092f, + +0.002248f, -0.004894f, -0.005248f, +0.001811f, -0.000513f, -0.000462f, +0.002435f, -0.000860f, -0.001449f, +0.001474f, + +0.000696f, +0.001159f, -0.001954f, -0.003443f, -0.001387f, -0.002397f, +0.000021f, -0.000819f, +0.001392f, +0.003167f, + +0.001431f, +0.000248f, +0.000045f, -0.002206f, +0.001075f, +0.001073f + }, + { + -0.011323f, -0.053212f, +0.005739f, -0.004834f, -0.004629f, -0.010345f, -0.013685f, +0.006931f, +0.010598f, +0.002902f, + +0.001555f, +0.001974f, -0.023273f, +0.002587f, +0.112378f, +0.051719f, -0.021285f, -0.018419f, +0.006370f, -0.082440f, + -0.013845f, +0.051838f, -0.007677f, -0.008002f, -0.002531f, -0.003879f, -0.002609f, +0.005778f, +0.035190f, -0.012277f, + +0.039671f, +0.032611f, +0.002826f, -0.008166f, +0.012179f, -0.011204f, +0.005038f, -0.001567f, -0.008713f, +0.006224f, + +0.005195f, -0.000772f, +0.011915f, -0.025127f, -0.010147f, +0.000109f, -0.009342f, -0.002570f, -0.018227f, +0.003054f, + +0.003554f, +0.004090f, +0.010688f, -0.001503f, -0.014051f, -0.005272f, -0.012400f, +0.006527f, +0.010152f, +0.006758f, + +0.007191f, +0.001336f, -0.005387f, -0.001318f, +0.002112f, -0.000028f, +0.005267f, -0.014847f, +0.005562f, +0.004033f, + -0.001652f, +0.001298f, +0.003633f, -0.001605f, -0.000355f, +0.003471f, -0.000015f, -0.006111f, +0.001866f, +0.001688f, + -0.004697f, -0.002901f, +0.000194f, -0.003293f, +0.002147f, -0.001010f, -0.000229f, -0.000250f, -0.000453f, -0.000071f, + +0.000323f, -0.000145f, -0.000030f, +0.002498f, +0.000789f, -0.000582f + } + }, + { + { + +0.024004f, -0.135928f, -0.224855f, -0.041956f, -0.008227f, +0.000042f, -0.005493f, -0.007654f, -0.007453f, -0.032411f, + -0.008290f, -0.013212f, -0.019392f, +0.010401f, +0.022960f, -0.008271f, -0.024896f, -0.005002f, -0.016089f, -0.000033f, + -0.029907f, +0.015917f, -0.010181f, +0.001140f, +0.012372f, +0.018126f, +0.004033f, -0.009575f, +0.017461f, +0.003211f, + -0.012420f, -0.007860f, +0.003852f, +0.009736f, -0.004311f, +0.009708f, +0.005727f, -0.004252f, +0.012033f, +0.012728f, + -0.002600f, +0.005440f, -0.001372f, -0.005735f, -0.004084f, -0.011708f, -0.001536f, +0.002432f, -0.001235f, +0.004076f, + -0.013213f, -0.008099f, +0.003472f, -0.000988f, +0.006530f, +0.000964f, -0.007506f, -0.010260f, +0.002028f, -0.011859f, + -0.006957f, +0.005898f, +0.005330f, -0.002000f, -0.007341f, -0.011007f, -0.000837f, -0.001588f, +0.001629f, +0.001020f, + -0.000661f, +0.002574f, -0.003416f, -0.000838f, -0.001418f, -0.000429f, -0.001772f, -0.000187f, -0.002684f, +0.000605f, + -0.002832f, +0.001151f, +0.000294f, +0.003540f, -0.000907f, -0.000807f, +0.000879f, +0.000342f, -0.001205f, +0.001413f, + -0.000139f, -0.001737f, +0.001873f, -0.001533f, +0.000897f, -0.001444f + }, + { + -0.002949f, +0.042710f, -0.006219f, -0.011311f, +0.026281f, -0.004313f, -0.005717f, -0.007546f, +0.002997f, -0.024242f, + -0.002916f, -0.012703f, +0.000662f, +0.030769f, +0.029151f, +0.025035f, +0.003671f, -0.021259f, +0.034848f, -0.020815f, + +0.011864f, +0.033050f, -0.014385f, +0.004583f, -0.016309f, -0.027525f, -0.002302f, -0.018653f, +0.018852f, +0.006548f, + +0.015972f, -0.007676f, +0.030630f, -0.006773f, +0.001301f, -0.009562f, -0.003044f, +0.020754f, +0.004542f, +0.000211f, + +0.007907f, -0.005348f, +0.009220f, -0.008879f, +0.001264f, +0.001259f, +0.010984f, +0.007105f, +0.002104f, -0.001158f, + +0.002187f, +0.001252f, +0.005513f, +0.001370f, +0.009253f, +0.010746f, -0.004277f, -0.011109f, -0.004230f, -0.000355f, + +0.003240f, +0.003413f, +0.002407f, -0.000014f, +0.003077f, -0.005730f, -0.002332f, +0.001609f, -0.000453f, -0.004675f, + -0.002051f, +0.004114f, +0.003007f, -0.003455f, -0.002834f, -0.001340f, -0.000986f, -0.000067f, +0.001089f, -0.000194f, + +0.001549f, -0.000649f, +0.000695f, +0.001085f, -0.000880f, -0.000886f, -0.000845f, +0.002076f, -0.002164f, +0.001240f, + +0.000075f, +0.000697f, -0.001933f, +0.000477f, +0.001534f, -0.000172f + }, + { + +0.002693f, -0.017521f, -0.026084f, +0.047922f, -0.001562f, +0.007194f, +0.005644f, -0.003202f, -0.013146f, -0.002241f, + +0.030086f, +0.012654f, -0.011846f, -0.020343f, +0.016033f, +0.016590f, -0.000241f, +0.004671f, +0.001928f, -0.003193f, + +0.012196f, -0.013796f, +0.021190f, -0.001588f, -0.033019f, +0.010399f, +0.009758f, +0.005908f, -0.024004f, -0.007137f, + +0.008286f, -0.018899f, -0.008439f, +0.013956f, -0.007443f, +0.012944f, -0.004631f, +0.001742f, -0.008320f, -0.002858f, + +0.001724f, +0.000053f, -0.005501f, +0.004961f, -0.003759f, -0.003900f, -0.010037f, +0.006052f, -0.006753f, -0.001642f, + -0.004733f, +0.002083f, -0.005989f, -0.001181f, +0.003337f, -0.000963f, -0.004075f, +0.003822f, +0.002265f, +0.006865f, + -0.003132f, -0.004861f, -0.002501f, -0.001751f, +0.000165f, -0.002398f, +0.001462f, +0.000611f, +0.002035f, +0.001341f, + +0.000773f, -0.004562f, +0.001022f, -0.000451f, -0.000338f, +0.000859f, -0.000280f, -0.002746f, +0.000285f, +0.003415f, + +0.003252f, +0.001609f, -0.000325f, -0.000801f, -0.000965f, +0.002516f, -0.000153f, +0.001005f, -0.002692f, +0.002984f, + -0.000714f, -0.002417f, +0.001362f, +0.000949f, +0.001527f, -0.001083f + }, + { + +0.079098f, +0.434690f, -0.050173f, -0.026413f, +0.000453f, +0.012156f, +0.010185f, +0.000098f, -0.014123f, +0.023288f, + +0.010926f, -0.021071f, -0.008579f, +0.000183f, +0.026530f, -0.015500f, +0.017843f, +0.029573f, -0.014376f, -0.009043f, + -0.009542f, -0.021215f, +0.010716f, -0.007014f, +0.001088f, +0.025557f, -0.005257f, +0.012852f, -0.002399f, +0.004443f, + +0.008440f, +0.009755f, +0.002669f, +0.002477f, -0.007511f, +0.011105f, -0.009511f, -0.000100f, -0.007548f, +0.007775f, + -0.001703f, -0.004200f, -0.000661f, -0.002891f, +0.005854f, -0.007612f, +0.017424f, -0.002114f, +0.007278f, -0.001000f, + -0.005177f, +0.005891f, +0.001355f, +0.000328f, -0.003778f, -0.009263f, -0.000089f, +0.002648f, -0.004323f, +0.001223f, + -0.003468f, +0.007331f, +0.000875f, -0.003413f, +0.005167f, -0.002950f, +0.003231f, -0.001555f, +0.000765f, +0.005734f, + +0.002371f, +0.005616f, -0.000116f, -0.002151f, +0.000619f, +0.001677f, +0.001050f, +0.001078f, -0.000370f, +0.000722f, + -0.000261f, -0.001029f, -0.001007f, +0.000548f, +0.000706f, +0.000769f, +0.001416f, -0.002621f, -0.001460f, -0.000604f, + +0.000258f, -0.001225f, +0.000417f, -0.001024f, -0.000600f, +0.001705f + }, + { + +0.003604f, +0.047317f, +0.000776f, -0.014562f, +0.002359f, +0.001574f, -0.002221f, -0.006064f, +0.005475f, -0.001998f, + +0.009007f, -0.012147f, -0.005171f, -0.029446f, -0.045673f, -0.011553f, +0.031658f, -0.044866f, +0.020684f, +0.028113f, + +0.001911f, -0.012464f, -0.019808f, +0.000528f, +0.007300f, +0.004327f, +0.039562f, -0.007297f, +0.019612f, -0.027003f, + +0.008650f, +0.007861f, -0.010534f, +0.019084f, -0.005764f, -0.012463f, -0.005039f, -0.008434f, +0.005673f, -0.003831f, + +0.006747f, +0.004172f, -0.010027f, -0.014149f, +0.004541f, +0.005266f, +0.003515f, -0.011649f, +0.005449f, +0.003154f, + -0.000505f, +0.000145f, -0.004051f, +0.003071f, -0.000140f, +0.005957f, +0.001401f, -0.000509f, -0.005829f, +0.005695f, + -0.000438f, -0.002540f, +0.004696f, +0.004684f, -0.005838f, -0.001961f, +0.003385f, +0.003363f, +0.000573f, +0.001305f, + -0.004047f, -0.002397f, +0.000847f, +0.000209f, -0.001769f, -0.003238f, -0.000718f, +0.000533f, +0.000524f, +0.001421f, + -0.001494f, +0.002634f, -0.001472f, +0.000810f, +0.001163f, +0.001513f, +0.000985f, -0.000285f, -0.001097f, -0.001305f, + +0.000579f, +0.001378f, +0.001572f, -0.001459f, -0.001649f, -0.000809f + }, + { + +0.105851f, +0.553182f, -0.067249f, +0.076441f, +0.030519f, +0.007088f, -0.014107f, -0.010999f, -0.008591f, -0.018046f, + -0.005664f, -0.018492f, +0.042930f, -0.045356f, -0.015344f, +0.021848f, +0.006516f, +0.013229f, -0.001188f, -0.010437f, + -0.014034f, +0.009201f, -0.003655f, +0.004450f, -0.012727f, +0.006854f, +0.005408f, +0.010820f, +0.003982f, -0.010310f, + -0.004726f, -0.001605f, +0.003631f, +0.002186f, -0.003019f, +0.012012f, -0.015757f, -0.010864f, +0.001443f, +0.006712f, + +0.005660f, +0.011010f, -0.001337f, -0.007436f, -0.004769f, +0.016186f, +0.011500f, -0.002440f, -0.006618f, +0.002171f, + +0.006808f, +0.003225f, +0.011153f, -0.003600f, +0.003904f, +0.001857f, -0.000109f, -0.004955f, -0.006091f, -0.003896f, + -0.001533f, -0.004825f, +0.006558f, +0.003801f, +0.002160f, +0.001860f, +0.004505f, +0.002740f, -0.002837f, +0.000136f, + +0.002203f, -0.001966f, +0.006399f, +0.002301f, +0.003347f, +0.000938f, +0.000292f, -0.000044f, +0.000170f, +0.002975f, + -0.002281f, +0.002028f, -0.002661f, -0.004112f, +0.000938f, -0.000693f, +0.000704f, -0.000873f, +0.003252f, -0.000425f, + -0.001078f, +0.004188f, +0.000291f, -0.000015f, -0.000667f, +0.000739f + }, + { + -0.000596f, +0.009413f, -0.002134f, +0.011363f, +0.003506f, +0.001025f, -0.000396f, -0.005040f, +0.011276f, -0.002185f, + +0.008842f, +0.001498f, +0.004817f, +0.018144f, +0.090057f, +0.078232f, +0.003815f, +0.019145f, +0.013854f, -0.028747f, + -0.008892f, +0.024213f, +0.041314f, -0.022205f, -0.022430f, -0.014612f, -0.004938f, -0.009917f, +0.021837f, +0.018946f, + -0.007361f, -0.008890f, +0.003897f, +0.011342f, -0.011749f, -0.000912f, -0.005019f, -0.000276f, -0.004215f, +0.000159f, + -0.000017f, +0.003073f, -0.011149f, +0.003551f, +0.005894f, -0.008082f, +0.003009f, +0.004280f, +0.002527f, -0.002404f, + -0.003658f, -0.004643f, -0.000129f, +0.004427f, +0.000887f, -0.000477f, +0.001808f, +0.004701f, +0.011884f, -0.001407f, + -0.000160f, -0.001579f, -0.001910f, +0.003879f, -0.002734f, -0.001228f, -0.005643f, -0.001184f, +0.001637f, +0.003070f, + -0.004628f, -0.002757f, +0.001746f, -0.000936f, +0.001620f, -0.000483f, +0.003043f, -0.003209f, -0.000535f, -0.001603f, + +0.000390f, +0.001991f, +0.000535f, +0.001991f, -0.002345f, -0.002456f, +0.003586f, -0.002797f, +0.001425f, +0.005212f, + -0.001565f, +0.001168f, -0.000479f, -0.001421f, +0.001586f, -0.001590f + }, + { + +0.063748f, -0.749600f, -0.014101f, -0.041032f, -0.036701f, +0.010296f, -0.010853f, +0.016003f, -0.000115f, -0.011367f, + -0.017052f, -0.011507f, -0.018627f, +0.035732f, +0.008054f, -0.021848f, -0.012531f, +0.044475f, -0.011433f, -0.003910f, + -0.003367f, -0.009729f, -0.006135f, -0.005427f, +0.004058f, -0.003365f, +0.000549f, +0.000153f, +0.003895f, +0.008307f, + +0.010781f, -0.006352f, +0.006165f, +0.010866f, +0.006353f, +0.018930f, -0.011046f, +0.006756f, +0.001490f, -0.001563f, + -0.001602f, +0.007695f, -0.000176f, -0.004762f, +0.003968f, +0.012210f, +0.009811f, -0.004328f, -0.001597f, +0.001781f, + -0.017392f, +0.012706f, -0.000382f, -0.006170f, -0.005332f, -0.014701f, +0.001535f, +0.002820f, +0.009193f, +0.009976f, + +0.007206f, -0.005997f, +0.000242f, -0.005506f, -0.002737f, +0.001792f, -0.003378f, +0.001350f, +0.002549f, +0.004346f, + -0.005854f, +0.003184f, -0.002413f, +0.000938f, +0.002223f, +0.000088f, -0.000878f, -0.000905f, -0.000226f, +0.002328f, + -0.001639f, -0.001878f, +0.001623f, +0.000535f, +0.002439f, +0.001743f, -0.002534f, +0.000696f, +0.001696f, -0.000677f, + -0.000204f, -0.002594f, -0.001563f, -0.001602f, -0.000815f, +0.000623f + }, + { + -0.002118f, +0.000862f, -0.015436f, -0.004164f, +0.002023f, -0.001379f, +0.000855f, -0.003584f, +0.000224f, +0.002354f, + -0.006676f, +0.002241f, +0.010408f, +0.028213f, -0.069155f, -0.000738f, +0.020385f, +0.035196f, -0.045898f, +0.000522f, + +0.002739f, -0.022814f, -0.005043f, +0.014078f, -0.061012f, -0.011321f, -0.015479f, -0.008756f, -0.006965f, +0.031887f, + -0.010220f, +0.022457f, +0.013050f, -0.009452f, -0.012729f, +0.019545f, +0.008345f, -0.009344f, +0.004047f, +0.011303f, + -0.010722f, +0.000308f, +0.005017f, -0.006301f, +0.006056f, -0.000105f, -0.000187f, +0.006040f, +0.009258f, +0.007874f, + -0.002304f, +0.006757f, -0.003328f, +0.004295f, +0.006541f, +0.006723f, -0.008934f, +0.001572f, -0.005021f, +0.008540f, + -0.004369f, +0.007836f, -0.005169f, +0.003762f, +0.001024f, -0.000660f, +0.001921f, +0.001511f, +0.002864f, -0.005022f, + +0.002142f, +0.003147f, -0.002140f, +0.002196f, +0.000754f, -0.003264f, +0.004091f, -0.003609f, -0.001164f, +0.001040f, + -0.000818f, +0.001828f, +0.002462f, -0.001454f, -0.002846f, +0.001169f, +0.001285f, -0.000062f, -0.000682f, +0.002542f, + -0.003319f, -0.000881f, +0.002475f, -0.001386f, +0.000966f, +0.000347f + }, + { + +0.011510f, -0.484437f, +0.031484f, +0.005459f, -0.047075f, -0.036062f, -0.001781f, +0.009953f, +0.011225f, -0.009761f, + -0.014435f, -0.009941f, -0.009558f, -0.011529f, +0.011200f, +0.056589f, +0.031496f, +0.003872f, +0.013105f, +0.014010f, + -0.028568f, -0.009578f, +0.009169f, -0.003746f, -0.019662f, +0.018601f, -0.020173f, -0.012781f, -0.029396f, -0.000580f, + +0.011957f, +0.008264f, -0.006875f, +0.021871f, -0.004917f, -0.009831f, +0.019138f, -0.009982f, -0.005202f, -0.005379f, + +0.026754f, -0.010008f, +0.015853f, -0.006957f, +0.013081f, -0.018794f, -0.002796f, +0.005492f, +0.003089f, +0.000484f, + +0.004862f, -0.004497f, -0.004026f, -0.009271f, -0.001776f, +0.002022f, -0.007732f, +0.005444f, +0.003681f, +0.003017f, + +0.000176f, -0.010365f, -0.000283f, +0.004283f, -0.000127f, +0.000180f, +0.000361f, -0.001718f, -0.003033f, +0.000030f, + +0.002497f, -0.003217f, -0.000667f, +0.004733f, -0.003566f, +0.000254f, -0.002852f, -0.003377f, -0.001747f, +0.002717f, + -0.001083f, -0.000827f, -0.001085f, -0.002838f, -0.003769f, -0.003940f, +0.001049f, +0.002376f, -0.000184f, +0.002759f, + -0.002428f, +0.001388f, -0.001150f, +0.000416f, -0.001308f, +0.003120f + }, + { + -0.004353f, +0.100194f, +0.021190f, +0.002946f, -0.005322f, -0.001476f, -0.015824f, -0.002815f, +0.013421f, +0.019323f, + -0.020208f, -0.001750f, +0.020035f, +0.017609f, +0.051765f, +0.005724f, +0.041853f, -0.009157f, -0.012162f, -0.016413f, + +0.009455f, -0.002282f, +0.017464f, -0.002584f, +0.024941f, -0.003175f, -0.009353f, -0.020654f, +0.003416f, +0.018365f, + -0.002503f, -0.007639f, +0.001530f, +0.001241f, -0.024832f, +0.002222f, +0.009733f, -0.008910f, +0.005502f, -0.001619f, + -0.001269f, +0.004244f, -0.009490f, -0.011526f, -0.002044f, +0.006491f, -0.009778f, -0.010815f, +0.013508f, +0.017828f, + +0.001355f, -0.003702f, +0.008865f, +0.002327f, +0.000147f, -0.006285f, +0.003660f, -0.003219f, +0.006145f, -0.001997f, + +0.005207f, +0.001234f, -0.009832f, -0.002446f, -0.002225f, -0.000729f, +0.003682f, +0.001125f, +0.000946f, +0.003153f, + +0.002315f, -0.000326f, +0.006427f, +0.002803f, -0.001521f, +0.002110f, +0.002521f, -0.000125f, +0.001286f, -0.002308f, + -0.000667f, +0.001219f, +0.001460f, -0.004042f, +0.001555f, -0.004397f, +0.001359f, -0.000072f, +0.003548f, -0.000835f, + -0.002027f, +0.000931f, +0.000280f, -0.000368f, +0.000622f, -0.000274f + }, + { + -0.091905f, -0.244867f, -0.006086f, -0.033465f, -0.000923f, +0.030995f, -0.036135f, +0.030985f, +0.006538f, -0.000197f, + +0.022982f, -0.014894f, -0.010960f, +0.021304f, +0.005301f, -0.003175f, +0.012491f, -0.017396f, +0.017198f, -0.003028f, + -0.015605f, +0.005599f, +0.023430f, +0.002065f, -0.032369f, -0.003559f, -0.000604f, +0.004077f, +0.005058f, +0.007703f, + -0.001800f, -0.005751f, +0.011234f, +0.001077f, +0.001683f, +0.053737f, -0.010320f, -0.011697f, -0.005152f, +0.003653f, + -0.011937f, +0.013527f, -0.023203f, +0.005111f, -0.001705f, -0.001284f, -0.003171f, -0.010736f, -0.001413f, +0.011287f, + +0.004028f, +0.000340f, -0.009093f, +0.005039f, +0.010481f, -0.005375f, +0.007535f, +0.004199f, +0.009182f, -0.002734f, + -0.003928f, -0.002190f, -0.000491f, -0.000590f, +0.001753f, +0.004258f, -0.005401f, +0.002048f, +0.001193f, +0.005873f, + +0.002176f, -0.000486f, +0.001087f, -0.001205f, -0.001530f, +0.001787f, +0.001202f, +0.000633f, +0.000463f, -0.002638f, + +0.001537f, +0.000204f, +0.000405f, +0.001394f, -0.004083f, -0.000718f, -0.003862f, -0.001315f, -0.002284f, -0.002288f, + +0.000910f, -0.002548f, +0.001121f, -0.000082f, +0.001044f, +0.000560f + }, + { + +0.004017f, +0.058171f, -0.024441f, -0.008710f, +0.023144f, -0.020185f, -0.003318f, +0.000386f, +0.007360f, -0.009727f, + -0.002117f, +0.004970f, -0.031794f, +0.004172f, -0.103648f, -0.034967f, -0.024074f, +0.013395f, +0.015527f, +0.027088f, + +0.001930f, +0.046485f, +0.050386f, -0.004864f, -0.041870f, +0.022748f, +0.022595f, -0.006698f, +0.011857f, +0.010396f, + -0.003261f, +0.006278f, +0.046399f, -0.005989f, -0.006728f, +0.009006f, +0.003979f, +0.006678f, -0.011226f, +0.001770f, + -0.010958f, +0.008624f, -0.000305f, +0.012044f, -0.004967f, -0.013623f, +0.010656f, -0.006494f, +0.000503f, -0.011654f, + +0.002614f, +0.005604f, +0.002298f, -0.014053f, -0.001719f, -0.003757f, +0.008508f, +0.000184f, -0.001858f, +0.003303f, + -0.005746f, -0.001792f, -0.005633f, -0.002572f, +0.002957f, +0.000189f, +0.010573f, -0.001351f, -0.004215f, -0.003924f, + -0.008900f, +0.004278f, -0.002610f, -0.000186f, -0.002275f, -0.003226f, +0.002647f, -0.003682f, -0.000109f, +0.000747f, + +0.002054f, -0.001259f, +0.001044f, +0.001102f, -0.002851f, +0.001444f, -0.003995f, -0.000738f, +0.000303f, +0.000293f, + +0.000653f, +0.000075f, +0.000967f, +0.000041f, +0.001567f, +0.000178f + }, + { + -0.055998f, +0.130502f, +0.016540f, -0.027216f, -0.003366f, +0.020977f, +0.005846f, -0.013839f, -0.005005f, -0.009163f, + +0.012917f, -0.017841f, -0.013470f, -0.025309f, +0.027575f, -0.003974f, +0.011133f, +0.034599f, -0.014180f, -0.000432f, + +0.003535f, -0.007751f, +0.014503f, +0.011731f, +0.024455f, -0.027956f, +0.014631f, -0.000566f, +0.011392f, -0.001317f, + +0.005557f, +0.002042f, +0.009342f, +0.004206f, -0.002626f, +0.005343f, -0.010794f, -0.005244f, -0.003456f, -0.016485f, + +0.021294f, -0.007694f, -0.021765f, +0.006528f, -0.005842f, +0.012261f, -0.010250f, -0.019057f, -0.011464f, +0.004060f, + +0.011413f, +0.007275f, -0.015413f, -0.014766f, +0.004312f, +0.005016f, +0.004269f, +0.007210f, -0.004358f, +0.003658f, + -0.003490f, -0.005235f, +0.001557f, +0.003445f, +0.006599f, -0.002478f, -0.003612f, +0.003299f, +0.000975f, -0.002323f, + +0.006381f, -0.003322f, -0.001822f, +0.000116f, -0.002687f, -0.001002f, +0.003570f, +0.001057f, -0.000641f, +0.000424f, + -0.002321f, -0.001699f, -0.001534f, -0.001000f, +0.000313f, +0.001540f, +0.003719f, -0.000123f, +0.000117f, +0.001353f, + +0.000703f, +0.001911f, +0.000351f, -0.001793f, +0.001233f, -0.000492f + }, + { + +0.010494f, -0.073975f, -0.024258f, -0.003216f, -0.006154f, -0.012662f, -0.030791f, -0.010134f, -0.002563f, +0.010902f, + +0.012916f, -0.013192f, -0.023051f, -0.015806f, +0.061459f, +0.016027f, -0.031530f, -0.009715f, +0.010228f, -0.064391f, + -0.020744f, +0.031326f, -0.029117f, -0.031400f, -0.023129f, -0.023928f, -0.022871f, -0.023634f, +0.054863f, -0.004109f, + +0.003801f, +0.011533f, -0.007155f, -0.005778f, +0.016663f, -0.010877f, +0.006562f, +0.018735f, -0.004082f, -0.009768f, + -0.000098f, -0.021578f, +0.001767f, -0.013568f, +0.004167f, +0.002569f, -0.002660f, +0.011405f, -0.005967f, +0.009777f, + +0.007883f, +0.004440f, +0.006779f, -0.004447f, -0.007635f, +0.002822f, -0.011192f, -0.000499f, +0.003047f, -0.001437f, + -0.003871f, -0.001968f, -0.001252f, -0.002192f, -0.001715f, -0.002366f, +0.006753f, -0.008829f, +0.010789f, +0.002805f, + -0.004873f, +0.001698f, +0.004218f, -0.001121f, -0.003647f, +0.000825f, -0.000937f, -0.007800f, +0.002122f, +0.003257f, + +0.000378f, +0.000619f, +0.001854f, -0.002103f, +0.003952f, -0.000707f, +0.000771f, +0.002210f, +0.001275f, +0.001144f, + +0.000734f, -0.000077f, -0.000099f, +0.001974f, +0.000166f, +0.000744f + } + }, + { + { + -0.023382f, -0.388903f, +0.069809f, -0.065486f, -0.004781f, +0.008430f, +0.001897f, -0.022310f, +0.002128f, -0.023692f, + -0.044787f, -0.006163f, +0.010006f, +0.017110f, +0.009771f, -0.029339f, +0.007916f, -0.015758f, -0.009957f, -0.018754f, + +0.004222f, -0.005160f, -0.005879f, +0.004042f, +0.021718f, +0.012055f, +0.019552f, -0.017701f, -0.011367f, +0.014568f, + -0.014434f, +0.006592f, +0.008908f, -0.004396f, +0.000704f, +0.003411f, +0.004393f, +0.008005f, +0.003479f, +0.007708f, + -0.000809f, -0.000704f, +0.001112f, +0.000353f, -0.015208f, -0.004970f, -0.001769f, -0.000657f, +0.000614f, -0.003081f, + -0.008408f, -0.003603f, -0.000252f, +0.003452f, +0.003181f, +0.002526f, -0.005101f, -0.002747f, -0.003882f, -0.007356f, + -0.004259f, +0.000298f, +0.003483f, +0.000099f, -0.008652f, -0.004806f, -0.004932f, -0.003213f, +0.002330f, +0.000623f, + -0.000061f, +0.000679f, -0.000612f, -0.001934f, -0.000350f, +0.001773f, -0.002603f, -0.001416f, -0.000021f, -0.001505f, + -0.001226f, -0.001670f, -0.000496f, +0.002204f, +0.001518f, -0.001040f, +0.000585f, +0.001087f, -0.001070f, +0.000413f, + -0.000376f, -0.000067f, +0.000356f, -0.000084f, -0.000009f, +0.000375f + }, + { + +0.001849f, +0.000112f, +0.007959f, +0.022002f, +0.001802f, +0.000032f, -0.006453f, -0.013999f, +0.002138f, -0.023793f, + -0.000016f, +0.005491f, +0.003980f, +0.014595f, +0.031620f, +0.043740f, -0.005849f, -0.017410f, -0.004182f, +0.029604f, + -0.014154f, +0.030841f, +0.006976f, -0.022751f, -0.000042f, -0.018977f, +0.001096f, -0.018209f, +0.012559f, +0.006272f, + +0.008962f, +0.003816f, +0.019385f, +0.001911f, -0.006196f, -0.009087f, +0.000051f, +0.011409f, +0.006674f, +0.006834f, + +0.002276f, +0.003506f, -0.005446f, +0.001594f, -0.003670f, +0.002920f, +0.005071f, +0.008271f, +0.002927f, -0.005538f, + +0.006838f, +0.005292f, +0.003308f, -0.004206f, +0.010930f, +0.008970f, -0.000961f, -0.003947f, -0.005067f, -0.002868f, + -0.001888f, +0.002697f, +0.005641f, +0.000174f, -0.002235f, -0.000374f, -0.000488f, -0.002691f, -0.000691f, -0.006984f, + +0.003285f, -0.000075f, +0.000644f, +0.000123f, -0.000150f, -0.002862f, +0.000530f, -0.000019f, +0.000082f, +0.000862f, + -0.000350f, +0.000195f, +0.002050f, +0.001541f, -0.001390f, -0.002484f, -0.000548f, +0.000929f, -0.000387f, -0.001428f, + +0.000741f, +0.000577f, -0.001088f, -0.001061f, +0.001006f, +0.000765f + }, + { + -0.003850f, -0.067071f, +0.016525f, +0.024295f, +0.020902f, +0.004580f, +0.002951f, -0.001458f, -0.007822f, +0.004924f, + +0.014612f, +0.012995f, -0.015670f, -0.000743f, +0.016692f, +0.021761f, +0.001403f, -0.021157f, +0.011981f, +0.005427f, + +0.008754f, -0.004968f, +0.001130f, +0.005159f, -0.008409f, -0.025327f, +0.014619f, -0.002084f, -0.006410f, -0.011600f, + -0.002405f, -0.011699f, +0.001516f, -0.003023f, +0.012109f, +0.009319f, +0.004606f, -0.011062f, -0.003595f, -0.002362f, + +0.006898f, +0.003908f, -0.005214f, -0.004219f, -0.001846f, +0.000751f, -0.004389f, -0.005451f, -0.004066f, +0.000615f, + -0.002080f, -0.004845f, -0.003089f, +0.000961f, +0.003107f, -0.001222f, +0.003529f, -0.003108f, +0.003256f, +0.005525f, + -0.000981f, -0.003548f, -0.003884f, -0.002723f, +0.002380f, -0.001372f, -0.001266f, +0.000019f, +0.002265f, +0.000750f, + -0.000212f, +0.000406f, -0.002677f, +0.000852f, +0.000225f, -0.001891f, -0.002372f, +0.002408f, +0.000867f, +0.003633f, + +0.001237f, +0.000548f, -0.000791f, +0.000235f, +0.001683f, -0.000405f, +0.000178f, +0.000346f, +0.001099f, -0.000489f, + -0.000337f, -0.002036f, +0.000037f, +0.002432f, +0.001234f, +0.000209f + }, + { + -0.033783f, +0.444164f, +0.070661f, -0.019759f, -0.028179f, +0.006106f, +0.014202f, +0.005077f, -0.005969f, -0.006371f, + +0.031035f, -0.024179f, -0.005848f, -0.013143f, +0.016469f, -0.006185f, -0.000489f, +0.049940f, -0.017660f, +0.000094f, + -0.009416f, -0.006655f, -0.015350f, +0.001031f, +0.004242f, +0.018368f, +0.002803f, +0.014910f, -0.001867f, +0.003572f, + +0.005376f, +0.002985f, +0.005655f, +0.000700f, -0.000215f, +0.001180f, -0.004690f, -0.010590f, +0.007086f, -0.003585f, + -0.000956f, +0.005180f, -0.005257f, -0.004923f, +0.005771f, -0.007346f, +0.004453f, +0.006637f, +0.005993f, +0.008294f, + -0.003548f, -0.001125f, -0.003511f, +0.005098f, -0.000591f, -0.007796f, -0.001244f, -0.006880f, +0.001872f, -0.000721f, + +0.002637f, +0.000841f, -0.006017f, +0.002012f, +0.003006f, +0.002826f, +0.000579f, -0.004028f, +0.002254f, +0.005058f, + -0.000282f, +0.005689f, +0.002051f, -0.003077f, +0.000855f, +0.001825f, +0.002418f, -0.000149f, -0.000714f, +0.000228f, + -0.000287f, -0.001079f, -0.001839f, +0.000915f, +0.001080f, +0.001055f, -0.000141f, -0.000679f, -0.001221f, +0.000651f, + -0.000332f, -0.001710f, +0.000934f, -0.000023f, -0.000372f, +0.000250f + }, + { + -0.003613f, +0.026269f, +0.027684f, -0.009503f, -0.003305f, +0.002266f, +0.000879f, -0.003571f, -0.000025f, -0.004284f, + +0.009137f, -0.019283f, -0.009028f, -0.030316f, -0.042506f, -0.019040f, +0.065071f, +0.012699f, -0.051751f, +0.026039f, + +0.011922f, -0.016378f, -0.011889f, -0.006028f, +0.004764f, +0.018461f, +0.033577f, -0.005839f, +0.003657f, +0.005417f, + -0.009324f, +0.003263f, +0.002662f, +0.004238f, -0.012140f, -0.004504f, -0.006424f, +0.000454f, +0.002599f, -0.009018f, + -0.000591f, +0.008558f, -0.007526f, -0.009776f, +0.004125f, -0.002519f, +0.000487f, +0.000273f, +0.000299f, +0.004430f, + -0.004038f, -0.002434f, -0.001986f, -0.001207f, +0.002351f, +0.005476f, -0.000518f, +0.000871f, -0.003817f, +0.008360f, + -0.006546f, +0.001421f, +0.004510f, -0.001437f, -0.003192f, -0.003124f, +0.004196f, +0.003048f, -0.001931f, +0.001498f, + -0.001678f, -0.001640f, +0.000999f, -0.000413f, -0.003429f, +0.001525f, -0.004401f, +0.000720f, -0.002726f, +0.002222f, + -0.000200f, +0.001236f, -0.000294f, -0.000035f, +0.001430f, +0.001701f, -0.000100f, +0.000975f, -0.000649f, -0.001251f, + +0.000475f, +0.000505f, +0.000957f, -0.000077f, -0.001616f, -0.001041f + }, + { + -0.038443f, +0.584663f, +0.063228f, +0.118620f, -0.004533f, +0.011621f, +0.010116f, -0.051419f, +0.006198f, -0.000288f, + -0.029814f, -0.003843f, +0.023641f, -0.026226f, -0.017062f, +0.017224f, +0.006153f, +0.014328f, +0.002419f, -0.006213f, + -0.024287f, +0.011435f, -0.008339f, +0.002107f, -0.009881f, +0.012484f, +0.007906f, +0.004775f, +0.016801f, -0.015397f, + -0.015726f, +0.002132f, +0.001561f, +0.000174f, +0.003844f, +0.004193f, -0.003014f, -0.009844f, -0.005325f, +0.011124f, + +0.007890f, +0.015558f, -0.007311f, -0.000296f, -0.000387f, +0.005474f, +0.012698f, -0.002503f, +0.001951f, +0.000644f, + +0.004102f, +0.002891f, +0.006655f, +0.005247f, -0.008020f, +0.007060f, -0.006163f, -0.002608f, -0.007280f, -0.001045f, + -0.003113f, -0.001424f, +0.004314f, -0.001679f, +0.002239f, +0.005754f, +0.002774f, +0.002466f, -0.000506f, -0.001293f, + +0.000401f, +0.001048f, -0.000363f, +0.007127f, +0.001545f, +0.001596f, +0.000796f, +0.000175f, +0.001858f, +0.001008f, + +0.000019f, -0.000557f, -0.002473f, -0.000876f, -0.000765f, +0.000325f, -0.000680f, -0.000322f, +0.002690f, +0.000819f, + -0.001164f, +0.002728f, +0.000905f, -0.000049f, +0.000412f, +0.000221f + }, + { + -0.000498f, -0.005473f, +0.004532f, +0.010430f, +0.001887f, +0.000617f, -0.000464f, -0.000129f, +0.004533f, +0.005175f, + +0.010319f, -0.001994f, +0.010949f, +0.034729f, +0.082938f, +0.056425f, +0.030729f, +0.023256f, +0.006592f, -0.001676f, + -0.014976f, +0.018894f, +0.056879f, -0.066372f, +0.000591f, -0.022097f, +0.013268f, +0.004323f, +0.017663f, -0.010945f, + +0.000530f, -0.016081f, +0.016201f, +0.014453f, -0.020823f, -0.002293f, +0.002910f, -0.008715f, -0.001069f, -0.002392f, + +0.000753f, +0.001407f, -0.006492f, +0.004354f, +0.002758f, -0.002518f, +0.000843f, +0.007464f, -0.005307f, -0.005002f, + -0.000940f, -0.002889f, -0.007487f, +0.004460f, +0.001029f, +0.001852f, -0.000695f, +0.005029f, +0.006794f, +0.001046f, + -0.001640f, +0.002008f, -0.001003f, +0.002684f, -0.000692f, +0.000817f, -0.005439f, -0.000031f, -0.001165f, -0.000536f, + -0.001380f, -0.001573f, +0.001495f, -0.003479f, +0.002015f, +0.000357f, +0.003097f, -0.003253f, -0.001840f, -0.000472f, + +0.000417f, +0.003032f, +0.000888f, -0.000673f, -0.001112f, -0.001021f, +0.000530f, -0.000938f, +0.002923f, +0.001635f, + +0.000302f, +0.000980f, -0.000068f, -0.001299f, -0.000056f, -0.000527f + }, + { + -0.099209f, -0.593855f, +0.049621f, -0.093972f, +0.012958f, +0.000636f, +0.008745f, +0.000844f, +0.001112f, -0.004928f, + -0.037389f, -0.015626f, +0.025983f, +0.016260f, +0.006850f, -0.030554f, +0.022360f, -0.001515f, +0.008205f, +0.002302f, + -0.004768f, -0.007505f, -0.008332f, -0.012769f, +0.007907f, +0.000467f, +0.000001f, -0.011718f, +0.007803f, +0.007981f, + +0.009326f, +0.000065f, +0.005213f, +0.008219f, +0.004218f, +0.008159f, -0.001272f, -0.000943f, +0.000902f, +0.001959f, + +0.000222f, +0.000190f, +0.000909f, +0.005497f, +0.000933f, +0.003781f, +0.010516f, +0.003638f, +0.000114f, -0.003565f, + -0.006669f, -0.000731f, +0.002171f, -0.003458f, -0.004886f, -0.007658f, -0.007735f, +0.002442f, +0.006314f, +0.012836f, + +0.006775f, -0.002418f, +0.000464f, -0.005677f, +0.001180f, +0.000594f, -0.005863f, +0.002869f, +0.001576f, +0.000043f, + -0.000764f, -0.000762f, +0.000190f, -0.001798f, +0.002217f, -0.000506f, +0.000792f, -0.003183f, +0.001047f, +0.003163f, + -0.000721f, +0.000094f, -0.000111f, +0.000029f, +0.002233f, +0.000271f, -0.001563f, +0.001285f, -0.000836f, -0.000374f, + -0.001139f, -0.000929f, -0.001749f, -0.001739f, +0.000737f, +0.000894f + }, + { + +0.000146f, -0.017303f, -0.006033f, +0.001638f, -0.009599f, +0.001985f, +0.000105f, -0.001175f, -0.002970f, -0.000194f, + +0.002433f, -0.001443f, -0.001449f, -0.006356f, -0.029494f, +0.017070f, +0.012203f, +0.043242f, -0.035341f, +0.030520f, + -0.058382f, +0.002855f, +0.015400f, -0.053940f, -0.032761f, -0.006918f, -0.009182f, -0.006026f, +0.001939f, -0.006738f, + +0.015948f, +0.018992f, +0.000831f, -0.002204f, +0.004792f, -0.001346f, +0.016289f, -0.005257f, +0.012825f, +0.000737f, + -0.010305f, -0.002340f, +0.008882f, -0.008023f, -0.003833f, +0.003470f, +0.000688f, +0.009558f, +0.007607f, +0.006634f, + -0.004778f, +0.005132f, +0.003076f, +0.004638f, +0.002897f, +0.006956f, -0.003448f, -0.006907f, +0.000343f, +0.003042f, + +0.000801f, +0.003089f, -0.002263f, +0.002535f, +0.003530f, -0.003122f, +0.004713f, +0.001813f, +0.000350f, -0.001402f, + -0.000394f, +0.004284f, -0.000202f, +0.000548f, +0.000580f, +0.000991f, +0.000488f, -0.002657f, +0.000126f, -0.000525f, + -0.002557f, +0.003193f, +0.002495f, -0.000171f, -0.003749f, +0.001227f, -0.001033f, +0.001566f, -0.000424f, +0.000438f, + -0.000308f, -0.001111f, +0.000927f, +0.000893f, +0.000238f, -0.000476f + }, + { + -0.014865f, -0.464291f, +0.098358f, -0.027968f, -0.031837f, -0.003379f, -0.024784f, -0.022533f, +0.021491f, -0.013896f, + -0.011607f, -0.023347f, -0.034336f, -0.004428f, +0.041071f, +0.028088f, +0.044293f, -0.005260f, +0.005307f, +0.013954f, + -0.007546f, -0.020523f, +0.006933f, +0.001555f, -0.004171f, -0.004519f, -0.015106f, -0.002258f, -0.025075f, -0.010413f, + +0.008656f, +0.013067f, +0.000228f, +0.014632f, -0.019551f, -0.001252f, +0.004834f, +0.004136f, -0.001573f, +0.006459f, + +0.002278f, -0.004862f, +0.015822f, +0.003950f, -0.004361f, -0.013121f, +0.004543f, +0.001389f, -0.000788f, +0.009406f, + -0.008344f, -0.000817f, -0.002816f, -0.005939f, +0.000582f, -0.004958f, +0.000273f, +0.001681f, +0.003459f, +0.002291f, + +0.000225f, -0.008933f, +0.002952f, +0.000202f, -0.000575f, +0.003373f, -0.002158f, +0.002193f, -0.004422f, -0.001178f, + +0.000931f, -0.002057f, -0.001698f, +0.004414f, -0.000956f, -0.002251f, -0.000190f, -0.003231f, -0.001499f, +0.001517f, + -0.000761f, +0.000011f, -0.002730f, -0.000602f, -0.005614f, -0.001671f, -0.001927f, +0.001537f, +0.001049f, -0.000231f, + +0.000096f, +0.000090f, +0.000565f, +0.001660f, +0.000289f, +0.000325f + }, + { + +0.003018f, +0.093084f, +0.020589f, +0.000810f, -0.003815f, -0.010398f, -0.019892f, +0.000970f, +0.026532f, -0.002408f, + -0.005564f, -0.012420f, +0.012840f, +0.031136f, +0.033587f, +0.010858f, +0.027415f, +0.014357f, -0.024172f, -0.017909f, + +0.028160f, +0.001182f, +0.006960f, +0.001563f, +0.015466f, -0.021311f, +0.003914f, -0.009117f, +0.013881f, -0.001908f, + +0.008462f, -0.012977f, -0.001695f, +0.004670f, -0.016473f, -0.011810f, +0.012190f, +0.002328f, +0.001229f, -0.007310f, + +0.006246f, -0.006987f, -0.007398f, -0.010806f, +0.000733f, +0.006106f, -0.010050f, -0.005521f, +0.005040f, +0.011608f, + +0.006346f, +0.002576f, +0.002079f, +0.008120f, -0.007460f, -0.003772f, +0.007335f, -0.001613f, +0.001977f, +0.003181f, + +0.002429f, -0.002828f, -0.005082f, +0.000476f, -0.003448f, +0.000299f, +0.000810f, -0.000362f, +0.001558f, +0.002356f, + +0.003079f, +0.001911f, +0.000874f, +0.003203f, -0.001431f, +0.003787f, +0.001117f, +0.001248f, +0.001285f, -0.000784f, + -0.003139f, +0.003562f, -0.000491f, -0.001615f, -0.000627f, -0.000142f, -0.000791f, +0.002195f, -0.000007f, +0.000136f, + -0.001015f, +0.002355f, -0.001343f, +0.000048f, +0.000484f, -0.001771f + }, + { + +0.036203f, -0.355163f, -0.060964f, -0.023301f, -0.003036f, -0.031981f, +0.018397f, +0.010991f, -0.006352f, +0.024735f, + +0.014245f, -0.012759f, -0.012090f, +0.013120f, +0.007781f, +0.001868f, +0.014529f, -0.018185f, +0.004526f, +0.002173f, + +0.002947f, -0.004220f, +0.007147f, +0.004536f, -0.011978f, -0.013745f, +0.005723f, -0.008443f, +0.002611f, +0.012609f, + +0.001898f, -0.003027f, +0.011079f, -0.001855f, +0.020757f, +0.018977f, +0.005263f, -0.011913f, +0.008053f, -0.010442f, + +0.002939f, -0.000024f, -0.011302f, -0.005915f, -0.002983f, -0.013665f, +0.005630f, +0.000836f, -0.004263f, +0.002288f, + -0.002795f, +0.004711f, -0.002487f, +0.004266f, +0.008945f, -0.005204f, +0.005172f, +0.007489f, +0.001437f, +0.005955f, + -0.002856f, -0.003112f, -0.001734f, -0.001216f, +0.000945f, +0.001221f, -0.001330f, +0.000262f, +0.002457f, +0.001494f, + +0.002681f, +0.000638f, +0.003067f, +0.000165f, +0.000447f, -0.000081f, +0.001238f, +0.001577f, -0.001880f, -0.002016f, + +0.000293f, +0.001938f, +0.000771f, -0.001780f, -0.002091f, -0.002016f, -0.001713f, -0.003815f, -0.002138f, +0.000787f, + -0.002321f, -0.001770f, +0.000884f, +0.000688f, -0.000211f, -0.000335f + }, + { + -0.005166f, -0.000222f, +0.042524f, -0.005311f, +0.006565f, -0.003471f, -0.013003f, +0.004526f, -0.004546f, -0.008895f, + +0.002291f, +0.003928f, +0.004864f, -0.030537f, -0.101101f, -0.079732f, +0.025647f, -0.017500f, +0.008485f, +0.028496f, + +0.033734f, +0.049000f, -0.020971f, -0.007018f, +0.001047f, -0.000257f, +0.014806f, +0.011347f, +0.021071f, +0.011082f, + -0.024890f, +0.032885f, +0.018974f, +0.000530f, -0.006207f, -0.003538f, +0.017391f, +0.003764f, -0.018481f, -0.004309f, + +0.002427f, +0.009885f, +0.007702f, +0.004489f, -0.007950f, +0.000492f, -0.001203f, -0.004868f, -0.006416f, -0.000651f, + +0.000556f, -0.004731f, -0.003760f, -0.005291f, -0.004218f, -0.003389f, -0.000431f, +0.002088f, +0.001760f, -0.002211f, + +0.000817f, -0.002530f, -0.003467f, -0.004130f, +0.000261f, +0.002920f, +0.002630f, +0.002975f, -0.000006f, -0.009983f, + -0.000086f, -0.001658f, +0.000771f, -0.002455f, -0.001943f, -0.001193f, -0.001979f, -0.001889f, -0.000039f, +0.000913f, + +0.000466f, -0.000244f, +0.002520f, +0.001058f, -0.002407f, -0.000941f, -0.001435f, -0.000192f, -0.001592f, +0.001874f, + +0.000591f, +0.001475f, -0.000092f, +0.000314f, +0.001232f, -0.000675f + }, + { + +0.063219f, -0.001901f, -0.007729f, -0.034237f, +0.000061f, -0.014527f, +0.039422f, -0.007132f, +0.001154f, -0.008622f, + +0.011712f, -0.016450f, -0.006433f, +0.007499f, +0.004080f, -0.003436f, +0.023320f, +0.014580f, -0.004538f, +0.015831f, + -0.005685f, -0.007368f, -0.000313f, +0.024129f, -0.004486f, -0.008000f, +0.003657f, +0.006628f, +0.001290f, -0.009811f, + +0.014708f, +0.007620f, +0.002810f, +0.003340f, +0.006980f, +0.000340f, -0.009139f, -0.005941f, +0.002205f, -0.010134f, + +0.016561f, -0.023330f, -0.010877f, +0.004584f, -0.001968f, +0.008401f, -0.003115f, -0.016857f, -0.002441f, +0.001798f, + +0.011227f, -0.004705f, -0.010276f, -0.009701f, +0.000607f, +0.002764f, +0.003860f, +0.003105f, +0.003099f, +0.002289f, + -0.008494f, -0.000981f, -0.000810f, +0.004648f, +0.002650f, +0.000645f, -0.002466f, +0.003736f, -0.002340f, +0.003147f, + +0.003587f, -0.003404f, +0.001770f, -0.002648f, -0.002845f, -0.001466f, +0.005436f, +0.000551f, +0.002801f, -0.001630f, + -0.003437f, -0.002330f, +0.002087f, -0.000355f, -0.000295f, +0.001776f, +0.002088f, +0.000388f, -0.000335f, +0.000303f, + +0.002148f, +0.001753f, +0.000078f, -0.000378f, +0.000276f, -0.000118f + }, + { + -0.008790f, -0.088375f, +0.015489f, -0.000457f, -0.021883f, -0.004794f, -0.023166f, -0.016045f, -0.006373f, +0.012426f, + +0.013038f, -0.021530f, -0.017265f, +0.037828f, +0.005531f, -0.021329f, +0.006993f, -0.012134f, -0.008661f, -0.012897f, + -0.055319f, +0.008371f, -0.018027f, -0.012374f, -0.024761f, -0.035843f, -0.023600f, -0.018080f, +0.038847f, +0.030860f, + -0.012656f, -0.003488f, -0.003345f, -0.001457f, +0.012168f, +0.004039f, +0.000395f, +0.008209f, +0.003425f, -0.012857f, + -0.008815f, -0.015774f, -0.001448f, -0.013006f, +0.006917f, -0.006282f, +0.011879f, +0.006433f, +0.002169f, +0.001588f, + +0.011651f, +0.006666f, +0.001575f, +0.001640f, -0.006226f, -0.001011f, -0.008329f, -0.005591f, +0.002339f, -0.005574f, + -0.004308f, +0.001313f, -0.000679f, -0.004133f, -0.003320f, -0.000096f, +0.000208f, +0.001935f, +0.001646f, +0.005247f, + -0.002297f, +0.001703f, +0.000005f, +0.002010f, -0.003491f, +0.000582f, -0.002711f, -0.004724f, +0.000476f, +0.002013f, + +0.000945f, +0.000709f, +0.004003f, +0.000295f, +0.001199f, -0.002609f, +0.002025f, +0.000193f, +0.001660f, +0.001700f, + +0.001102f, +0.000042f, +0.001082f, -0.000033f, +0.000957f, +0.001992f + } + }, + { + { + +0.019642f, -0.290539f, +0.140655f, -0.023024f, +0.013282f, -0.001146f, -0.002039f, -0.019729f, +0.019627f, -0.000541f, + -0.022822f, +0.016873f, +0.012618f, -0.020062f, -0.000272f, -0.009437f, +0.025126f, +0.003342f, +0.014482f, -0.009313f, + +0.001024f, -0.009357f, -0.003023f, -0.002496f, -0.002255f, -0.002506f, +0.020054f, -0.015781f, -0.015072f, +0.020028f, + -0.009420f, -0.002722f, +0.005429f, -0.000241f, +0.002905f, +0.000063f, -0.001363f, +0.006463f, +0.003313f, -0.002904f, + -0.005329f, +0.003069f, -0.003458f, -0.003673f, -0.009181f, -0.001832f, -0.002515f, +0.001663f, +0.000267f, -0.002877f, + +0.000028f, +0.002294f, -0.000944f, +0.001748f, -0.001085f, +0.004617f, +0.002314f, +0.004558f, -0.001352f, -0.001817f, + +0.003539f, +0.000025f, -0.000904f, +0.002618f, -0.003160f, -0.000264f, -0.000029f, -0.002296f, -0.000703f, -0.002082f, + -0.000729f, +0.000315f, +0.003483f, +0.002607f, +0.001103f, +0.001527f, -0.003056f, -0.001830f, +0.000429f, +0.000056f, + +0.001782f, -0.001804f, -0.002026f, +0.000215f, +0.000650f, +0.000473f, +0.001198f, +0.002422f, +0.000306f, +0.000025f, + -0.000071f, +0.000914f, +0.000716f, -0.000221f, +0.000051f, +0.000342f + }, + { + +0.000220f, -0.015363f, -0.002268f, +0.004434f, -0.011945f, +0.004197f, -0.002367f, -0.005499f, +0.011044f, -0.000466f, + +0.014224f, -0.000695f, -0.001650f, +0.008755f, +0.011251f, +0.017060f, -0.008982f, -0.007484f, -0.032741f, +0.012909f, + -0.020009f, +0.006564f, +0.007558f, +0.007537f, +0.020700f, -0.019747f, +0.015849f, -0.006889f, +0.007794f, -0.008673f, + +0.006564f, +0.005348f, +0.001373f, -0.005788f, -0.005988f, +0.003428f, +0.005120f, +0.007305f, +0.003826f, +0.005505f, + -0.004591f, +0.001250f, +0.000206f, +0.003211f, -0.006793f, +0.003439f, +0.000433f, +0.001823f, -0.000619f, -0.003281f, + +0.005607f, +0.002475f, +0.003803f, -0.004128f, +0.005410f, -0.001290f, -0.000615f, +0.000160f, -0.003608f, +0.001702f, + -0.001107f, -0.000106f, +0.000117f, -0.001243f, -0.001524f, +0.002308f, +0.003204f, -0.004273f, -0.000066f, -0.004448f, + +0.003347f, -0.000972f, -0.001115f, -0.001228f, +0.000171f, -0.001648f, +0.000829f, +0.000644f, -0.000284f, -0.001278f, + +0.000311f, +0.001612f, +0.001708f, +0.000685f, -0.000713f, -0.000973f, -0.000601f, -0.000610f, -0.000587f, -0.001082f, + +0.001500f, +0.000280f, -0.000292f, -0.000184f, -0.000170f, +0.000096f + }, + { + +0.003314f, -0.048819f, +0.008333f, -0.020274f, +0.004216f, +0.003591f, -0.001831f, +0.002061f, -0.005922f, -0.006180f, + +0.008188f, +0.008825f, -0.016750f, +0.002317f, +0.010995f, +0.026257f, -0.005629f, -0.015485f, +0.008888f, -0.013519f, + +0.007276f, +0.002363f, +0.004126f, +0.006033f, +0.001503f, -0.021391f, +0.016649f, -0.001717f, +0.004358f, +0.000795f, + -0.000884f, -0.004851f, +0.012143f, -0.007823f, +0.001765f, +0.004038f, +0.011291f, -0.005672f, +0.005314f, +0.006157f, + +0.003875f, -0.000940f, -0.000969f, -0.000943f, +0.003146f, +0.007499f, -0.000274f, +0.001694f, +0.001288f, +0.001358f, + +0.002563f, -0.001226f, +0.000655f, +0.001800f, +0.001409f, -0.000873f, +0.002960f, -0.005312f, -0.001459f, +0.000900f, + +0.000961f, +0.000042f, -0.001478f, -0.001181f, +0.001195f, -0.001079f, -0.000422f, -0.001631f, -0.000551f, +0.001324f, + +0.001071f, +0.000938f, -0.002812f, +0.000505f, +0.000054f, +0.000581f, -0.000049f, +0.002897f, -0.000457f, -0.000507f, + -0.002146f, +0.000554f, -0.000876f, -0.000852f, +0.001493f, -0.001083f, -0.000095f, -0.000328f, +0.001151f, -0.001035f, + +0.000008f, -0.001564f, -0.000766f, +0.000657f, -0.000770f, +0.001145f + }, + { + -0.011273f, +0.316421f, -0.072520f, +0.010586f, +0.008515f, -0.005530f, +0.011268f, +0.006049f, -0.004449f, -0.021245f, + +0.015315f, -0.011667f, +0.008463f, -0.009718f, -0.004600f, -0.013697f, -0.007942f, +0.025246f, -0.028919f, +0.000950f, + -0.002837f, +0.002864f, -0.007801f, +0.005251f, -0.011052f, +0.001351f, +0.000312f, +0.013357f, +0.000172f, -0.005451f, + +0.000568f, -0.000216f, -0.001315f, +0.001633f, +0.003369f, +0.000655f, +0.000087f, -0.005032f, +0.009573f, -0.007776f, + -0.001807f, +0.007005f, -0.001645f, -0.007210f, +0.001576f, -0.001796f, +0.001813f, +0.001207f, -0.003613f, +0.004532f, + -0.004493f, -0.006121f, -0.001207f, +0.005486f, +0.001194f, -0.003069f, +0.000140f, -0.005167f, +0.002922f, -0.003794f, + +0.002253f, -0.000789f, -0.005915f, +0.004677f, +0.001096f, +0.001133f, -0.000106f, -0.006894f, -0.001891f, +0.000745f, + -0.004357f, +0.001096f, +0.001348f, -0.002423f, +0.000150f, -0.000249f, +0.000502f, -0.000311f, +0.000440f, +0.001449f, + +0.000917f, +0.000664f, -0.000995f, -0.000194f, -0.000379f, +0.000370f, +0.001030f, +0.000466f, -0.000565f, +0.001464f, + +0.000398f, -0.001327f, +0.001098f, +0.000875f, +0.000161f, +0.000650f + }, + { + +0.003841f, -0.005101f, -0.005522f, -0.001097f, +0.001492f, +0.000785f, +0.002195f, +0.000512f, +0.002702f, +0.000452f, + +0.008061f, -0.014956f, +0.010938f, -0.003139f, -0.028570f, -0.039719f, +0.024913f, +0.042989f, -0.042031f, -0.004449f, + +0.007846f, +0.001260f, +0.014891f, -0.001875f, -0.007052f, -0.035648f, +0.002061f, +0.002071f, -0.001987f, +0.000607f, + -0.020252f, -0.008147f, -0.004826f, -0.004282f, -0.009415f, +0.000442f, -0.003861f, +0.009277f, +0.006427f, -0.010631f, + -0.002034f, +0.009155f, -0.003350f, +0.000093f, +0.002849f, -0.007146f, +0.000129f, +0.001256f, -0.005733f, +0.003485f, + +0.000953f, -0.000484f, -0.002885f, -0.003070f, +0.003536f, +0.004876f, -0.000279f, +0.003281f, -0.006455f, +0.001398f, + -0.008091f, -0.000166f, +0.000826f, -0.003802f, -0.001526f, -0.002712f, -0.000730f, +0.000340f, -0.000779f, +0.005513f, + +0.000086f, -0.001730f, +0.001122f, +0.000703f, -0.000512f, +0.003389f, -0.003853f, +0.001383f, -0.002040f, +0.000859f, + -0.001173f, +0.000734f, -0.000623f, -0.000211f, +0.000585f, +0.001005f, -0.000534f, +0.000686f, +0.000406f, -0.000860f, + +0.000241f, +0.000458f, +0.000096f, -0.000546f, -0.000449f, +0.000381f + }, + { + -0.026128f, +0.449611f, -0.041292f, +0.119838f, -0.014160f, +0.000931f, +0.018046f, -0.035401f, +0.005026f, +0.012460f, + -0.010153f, -0.012853f, +0.012208f, -0.001157f, -0.007265f, +0.015789f, +0.000643f, +0.003641f, -0.002709f, +0.004620f, + -0.003269f, +0.012550f, -0.005316f, +0.011101f, -0.007922f, +0.000757f, -0.004810f, -0.008155f, +0.014102f, -0.000841f, + -0.004973f, +0.005087f, -0.000703f, -0.008172f, -0.004876f, -0.001429f, +0.004589f, +0.002819f, -0.000105f, +0.008964f, + +0.002115f, +0.006599f, -0.005242f, +0.000163f, -0.004288f, +0.006012f, +0.008753f, -0.010706f, -0.001635f, +0.002336f, + -0.000505f, -0.001174f, +0.003433f, +0.004382f, -0.008150f, +0.007511f, -0.001544f, +0.002641f, -0.005743f, -0.004132f, + -0.004443f, -0.001926f, -0.001933f, -0.004660f, +0.001707f, +0.001915f, -0.000296f, +0.001660f, +0.000469f, -0.001181f, + -0.001950f, +0.001166f, -0.003991f, +0.003308f, -0.001026f, +0.001111f, +0.001201f, -0.000875f, +0.000648f, -0.000866f, + -0.001002f, +0.000378f, +0.000563f, +0.001272f, +0.000324f, +0.001548f, -0.000156f, -0.000416f, +0.000525f, +0.000717f, + -0.001284f, +0.000921f, +0.000352f, -0.001021f, +0.000150f, +0.000558f + }, + { + +0.001255f, -0.018119f, -0.012260f, -0.000965f, -0.005624f, +0.001042f, -0.001810f, -0.000166f, +0.002680f, -0.000284f, + +0.000566f, -0.004833f, +0.006194f, +0.017032f, +0.047899f, -0.022439f, -0.023704f, +0.008044f, +0.012889f, +0.011077f, + -0.023961f, +0.001684f, +0.051960f, -0.055444f, +0.006368f, +0.001301f, +0.023993f, -0.004956f, +0.000940f, -0.019195f, + +0.011702f, -0.011803f, +0.016432f, +0.027473f, -0.003303f, +0.006612f, +0.004497f, -0.000896f, +0.009333f, +0.002276f, + +0.001733f, +0.003063f, -0.001003f, +0.004991f, +0.000077f, +0.002877f, +0.001840f, +0.005533f, -0.004208f, -0.004840f, + -0.001443f, -0.003392f, -0.007648f, +0.002155f, -0.002133f, -0.001082f, -0.001716f, -0.002643f, +0.001200f, +0.002166f, + -0.004961f, -0.000359f, -0.000706f, +0.003041f, +0.002180f, +0.003251f, -0.002666f, +0.001166f, -0.000424f, -0.000639f, + -0.000245f, +0.001560f, +0.002221f, -0.003514f, +0.002930f, +0.001201f, +0.003102f, -0.000961f, -0.000296f, +0.000859f, + -0.000025f, +0.000689f, -0.000341f, -0.000153f, +0.000036f, -0.000996f, -0.000473f, +0.000009f, +0.000852f, -0.001606f, + +0.000384f, +0.000579f, +0.000166f, +0.000226f, +0.000332f, -0.000174f + }, + { + +0.109343f, -0.336816f, +0.050701f, -0.084834f, -0.001035f, +0.004339f, +0.003369f, -0.013205f, -0.004162f, +0.006455f, + -0.015824f, -0.004587f, +0.028132f, -0.003126f, +0.015671f, -0.019091f, +0.000991f, -0.026354f, +0.004183f, +0.010356f, + +0.003213f, -0.000156f, -0.003162f, -0.013471f, +0.004411f, +0.000989f, +0.001930f, -0.009241f, +0.005522f, +0.002014f, + +0.001520f, -0.005756f, -0.004216f, +0.000211f, -0.003494f, +0.000749f, -0.006329f, -0.005310f, +0.001337f, +0.004626f, + -0.002874f, -0.007489f, +0.002636f, +0.003115f, +0.001155f, +0.001446f, -0.000052f, +0.001423f, +0.005773f, +0.002279f, + +0.006150f, -0.001383f, -0.002908f, +0.001134f, +0.004738f, +0.002780f, -0.000606f, +0.000500f, -0.000766f, +0.008273f, + +0.000670f, -0.002439f, +0.004590f, -0.002321f, +0.001505f, +0.001908f, -0.001828f, +0.000422f, -0.002217f, +0.000326f, + -0.000730f, -0.001482f, +0.002558f, -0.000005f, +0.001571f, -0.001210f, +0.001533f, -0.002127f, +0.001478f, +0.001916f, + -0.000358f, +0.001796f, -0.000087f, -0.001188f, -0.001176f, -0.001580f, +0.000755f, +0.001253f, -0.001109f, +0.000868f, + -0.000934f, +0.000427f, +0.000012f, +0.000273f, +0.000824f, -0.000284f + }, + { + +0.001901f, +0.000480f, +0.003304f, +0.003876f, -0.003919f, +0.001773f, -0.001117f, -0.000761f, -0.004190f, +0.001527f, + -0.000459f, -0.008739f, -0.003854f, +0.033734f, +0.013444f, -0.015897f, -0.038886f, +0.025175f, -0.030883f, +0.043130f, + -0.023436f, +0.021610f, +0.014042f, -0.037423f, +0.000226f, +0.003221f, +0.013376f, -0.000541f, -0.005375f, -0.012578f, + -0.002939f, +0.005055f, -0.003411f, -0.009552f, +0.004276f, -0.006445f, -0.000964f, -0.010564f, +0.007338f, -0.004422f, + -0.002392f, -0.001889f, +0.010975f, +0.004727f, +0.002681f, +0.005807f, +0.000051f, +0.004454f, +0.001843f, +0.001969f, + -0.003732f, +0.003927f, +0.001139f, +0.001519f, -0.001021f, +0.003081f, -0.001160f, -0.003774f, -0.000235f, -0.004046f, + -0.002196f, +0.001491f, -0.001696f, +0.001458f, +0.002061f, -0.001924f, +0.003862f, -0.001017f, +0.000195f, +0.000293f, + -0.003185f, +0.000311f, -0.002993f, -0.000343f, +0.002321f, +0.002340f, +0.000073f, -0.001647f, -0.000028f, +0.000797f, + -0.002006f, -0.000012f, +0.000318f, +0.001257f, -0.002772f, +0.001251f, -0.001363f, +0.000446f, -0.001044f, -0.000304f, + +0.001133f, +0.000072f, -0.000001f, +0.000323f, +0.000005f, -0.000211f + }, + { + +0.016687f, -0.364645f, +0.125245f, -0.013326f, +0.016549f, +0.017728f, -0.024699f, -0.010478f, +0.026406f, -0.004850f, + -0.005825f, -0.008472f, -0.011623f, +0.003571f, +0.020181f, -0.012455f, +0.022138f, -0.005223f, -0.005076f, -0.001715f, + +0.004138f, -0.011500f, +0.012718f, -0.008253f, -0.013459f, +0.003632f, +0.003336f, +0.007501f, -0.013769f, -0.000061f, + +0.001990f, +0.003552f, -0.003474f, +0.012218f, -0.013694f, -0.004755f, -0.001708f, +0.003723f, -0.004258f, +0.008336f, + -0.005069f, -0.011358f, +0.007849f, -0.004044f, -0.001407f, +0.003367f, +0.007770f, -0.002575f, -0.001032f, +0.006770f, + -0.005572f, +0.007530f, +0.000262f, -0.003003f, +0.003275f, +0.000971f, +0.003227f, -0.001253f, +0.003110f, +0.001458f, + +0.005161f, -0.001917f, +0.001688f, -0.002788f, -0.001102f, +0.000579f, -0.002528f, +0.003219f, -0.004412f, -0.001304f, + -0.000783f, -0.001348f, -0.000555f, +0.002651f, +0.000697f, -0.000368f, +0.001940f, -0.000664f, -0.001923f, -0.000317f, + -0.001324f, +0.001246f, -0.002077f, +0.000848f, -0.002259f, +0.000737f, -0.001887f, +0.001071f, +0.000077f, -0.001604f, + +0.000498f, -0.000433f, +0.001336f, +0.001606f, -0.000108f, -0.000380f + }, + { + -0.001538f, +0.055199f, -0.004105f, -0.003316f, -0.005083f, -0.005113f, -0.013680f, -0.007624f, +0.010458f, -0.007905f, + +0.013187f, -0.006449f, +0.005273f, +0.007367f, -0.012540f, -0.021509f, -0.006881f, +0.016947f, +0.002815f, -0.012713f, + +0.015317f, +0.004673f, -0.002238f, -0.013290f, +0.007968f, -0.013234f, +0.016283f, +0.000625f, +0.002935f, -0.020387f, + +0.015020f, -0.003262f, +0.002589f, +0.005135f, -0.005517f, -0.011481f, +0.005390f, +0.005284f, -0.000748f, -0.004363f, + -0.001909f, -0.007666f, +0.003227f, -0.009857f, +0.004038f, +0.005730f, -0.005753f, +0.001496f, -0.002401f, +0.000685f, + +0.000425f, +0.000359f, -0.004628f, +0.003571f, -0.003170f, -0.001340f, +0.003616f, -0.001912f, -0.002124f, +0.000755f, + +0.005212f, +0.000283f, -0.002325f, +0.001268f, +0.002201f, +0.003356f, -0.003545f, -0.004240f, -0.000570f, -0.000982f, + -0.001132f, -0.001250f, -0.001916f, +0.001961f, -0.002389f, +0.002159f, +0.000224f, +0.001849f, +0.002133f, +0.001423f, + -0.001940f, +0.003333f, -0.000500f, -0.001414f, -0.000686f, +0.000753f, -0.000674f, +0.001152f, -0.001506f, +0.000682f, + -0.000298f, +0.002039f, -0.000666f, +0.000470f, +0.000421f, -0.001282f + }, + { + +0.034501f, -0.321543f, -0.041242f, -0.025437f, -0.004926f, -0.052668f, +0.002376f, -0.001995f, -0.013743f, +0.010341f, + +0.006893f, -0.004001f, -0.008840f, +0.000801f, +0.004251f, +0.005863f, +0.019031f, -0.008572f, -0.007408f, -0.012971f, + +0.009651f, -0.000740f, -0.002438f, -0.004137f, +0.005574f, +0.000319f, +0.010187f, -0.003136f, -0.000294f, +0.005897f, + +0.002788f, +0.007160f, +0.010554f, -0.011504f, +0.003121f, +0.000158f, +0.002819f, -0.005497f, +0.010730f, -0.008464f, + +0.003714f, -0.002276f, -0.005201f, -0.008184f, +0.006061f, -0.006323f, +0.002984f, +0.002072f, -0.002492f, -0.005234f, + -0.005192f, +0.004143f, -0.000713f, +0.001553f, +0.005504f, -0.005027f, +0.001813f, +0.004197f, -0.003694f, +0.002568f, + -0.000455f, +0.001554f, +0.000525f, +0.000937f, -0.000248f, +0.000721f, -0.001527f, -0.003985f, +0.001772f, -0.001165f, + -0.000855f, -0.000428f, +0.003755f, +0.001393f, +0.000920f, -0.001510f, -0.000269f, +0.000560f, -0.001073f, -0.000529f, + -0.000140f, +0.001950f, +0.000125f, +0.000548f, +0.000719f, -0.001898f, +0.000677f, -0.001360f, -0.001683f, +0.002119f, + +0.000482f, -0.000196f, -0.000060f, +0.000204f, -0.000172f, -0.000681f + }, + { + +0.005595f, -0.033071f, +0.013400f, +0.001567f, +0.005009f, -0.000683f, -0.012091f, +0.002453f, -0.006269f, -0.008618f, + +0.003048f, +0.007605f, +0.004594f, -0.006511f, -0.027387f, -0.042674f, +0.032046f, -0.019480f, -0.020119f, +0.015247f, + -0.011647f, -0.004913f, -0.036276f, -0.002242f, +0.003076f, -0.023655f, -0.002396f, -0.001667f, +0.009832f, +0.019474f, + -0.008525f, +0.032374f, -0.000297f, -0.002894f, -0.008182f, -0.022096f, +0.003509f, -0.006369f, -0.015215f, -0.000664f, + +0.007339f, +0.005578f, +0.002940f, +0.005961f, -0.000238f, +0.006880f, -0.001939f, -0.005791f, -0.003999f, +0.003243f, + +0.000585f, -0.007274f, -0.007654f, -0.000868f, +0.002730f, -0.000099f, -0.002758f, +0.000737f, +0.001106f, -0.002824f, + +0.003705f, +0.002621f, +0.003197f, -0.000152f, -0.002374f, -0.000854f, +0.000412f, +0.003414f, +0.002693f, -0.004446f, + +0.003888f, -0.000602f, +0.002699f, -0.001458f, -0.000181f, +0.000565f, +0.000360f, +0.000062f, -0.002023f, -0.000447f, + +0.000579f, -0.001326f, -0.000610f, -0.001124f, -0.000851f, +0.000638f, -0.000238f, +0.000029f, -0.001661f, +0.001143f, + -0.000185f, +0.001585f, -0.000060f, -0.000971f, -0.000175f, +0.000275f + }, + { + -0.042995f, -0.124065f, -0.006361f, -0.038923f, +0.013092f, -0.011955f, +0.045331f, +0.007223f, +0.014257f, -0.010879f, + +0.026554f, +0.006773f, -0.004439f, +0.008961f, -0.001249f, -0.012291f, +0.005736f, +0.012104f, +0.003079f, +0.016419f, + -0.006599f, -0.000623f, -0.000425f, +0.016041f, -0.008381f, +0.006377f, +0.006039f, +0.004377f, +0.004004f, -0.016131f, + -0.001717f, -0.000419f, +0.001001f, +0.002011f, +0.005846f, -0.000576f, -0.007470f, -0.003853f, +0.008248f, -0.001821f, + +0.005088f, -0.021183f, -0.001113f, +0.005608f, -0.001945f, +0.005982f, +0.004069f, -0.001802f, +0.003344f, -0.001263f, + +0.003696f, -0.002911f, +0.001050f, -0.005720f, +0.000849f, +0.000027f, -0.002290f, +0.000093f, -0.000120f, +0.002478f, + -0.004744f, +0.000454f, -0.002314f, -0.001274f, -0.002346f, +0.000160f, -0.002128f, +0.001242f, -0.000843f, +0.000945f, + -0.000142f, +0.000888f, +0.003491f, -0.003514f, -0.000673f, -0.000708f, +0.003000f, -0.002498f, +0.001778f, +0.000142f, + +0.000189f, -0.000636f, +0.001913f, +0.000777f, +0.000976f, -0.000972f, -0.001301f, -0.000508f, +0.000304f, -0.000199f, + +0.000088f, +0.000048f, +0.000479f, +0.000481f, -0.000331f, -0.000268f + }, + { + +0.007311f, -0.098957f, -0.004154f, +0.012070f, -0.011108f, +0.016210f, -0.000544f, -0.007658f, -0.004493f, +0.000962f, + +0.006507f, -0.012135f, +0.006048f, +0.021925f, -0.015442f, -0.015248f, -0.004697f, -0.010357f, +0.003777f, +0.032567f, + -0.029876f, +0.003101f, -0.008857f, +0.003368f, +0.010819f, +0.002860f, +0.007645f, -0.015896f, +0.003777f, +0.020328f, + -0.011762f, -0.006698f, +0.002717f, -0.003305f, +0.004276f, +0.007157f, -0.002328f, +0.001451f, +0.010035f, -0.004708f, + +0.001133f, +0.002828f, +0.012057f, -0.003404f, +0.000578f, -0.009403f, +0.011953f, +0.001324f, +0.002533f, -0.001899f, + +0.007066f, +0.005462f, -0.003965f, +0.001102f, -0.003090f, +0.002374f, -0.002333f, -0.003509f, +0.000978f, -0.004184f, + +0.000058f, +0.000440f, -0.000322f, +0.002069f, +0.001350f, -0.001483f, -0.003323f, +0.003140f, -0.002627f, +0.002292f, + -0.001672f, +0.002277f, -0.000389f, +0.002457f, -0.002061f, +0.000390f, -0.000068f, -0.000817f, -0.000678f, +0.000344f, + +0.000020f, -0.001977f, -0.000518f, -0.001557f, +0.000146f, -0.001866f, +0.001987f, -0.000861f, +0.000517f, +0.000464f, + -0.000384f, -0.001308f, +0.000855f, -0.001429f, -0.000169f, +0.001901f + } + }, + { + { + -0.008791f, -0.101522f, -0.013470f, +0.020763f, -0.006601f, -0.001551f, -0.007570f, -0.006268f, +0.006654f, -0.005470f, + +0.006005f, +0.013988f, -0.008146f, -0.010330f, -0.010854f, +0.002675f, +0.015615f, +0.014788f, +0.007957f, +0.001972f, + -0.003177f, +0.002350f, -0.008514f, -0.002273f, -0.009780f, -0.001303f, +0.009043f, -0.005547f, -0.005948f, +0.005152f, + +0.005436f, -0.006365f, +0.001967f, +0.002965f, +0.002031f, +0.001473f, -0.000570f, -0.000337f, +0.007290f, -0.001498f, + -0.009557f, +0.002861f, -0.005403f, -0.006533f, -0.002356f, +0.001325f, -0.005560f, -0.000031f, -0.000068f, -0.002734f, + +0.002716f, +0.002076f, +0.000681f, -0.000376f, +0.001326f, +0.001051f, +0.003546f, +0.002363f, +0.000453f, -0.000654f, + +0.003447f, +0.000643f, -0.000043f, -0.000374f, +0.000967f, -0.000088f, +0.001382f, -0.001551f, -0.002424f, -0.001819f, + +0.000469f, +0.000448f, +0.002859f, +0.002408f, -0.000131f, +0.001014f, -0.001024f, -0.000971f, +0.000018f, +0.000437f, + +0.001278f, -0.001599f, -0.001727f, +0.000042f, +0.000606f, +0.000285f, +0.001601f, +0.001390f, +0.001352f, +0.000533f, + +0.000094f, +0.000249f, +0.000715f, -0.000049f, +0.000000f, -0.000126f + }, + { + -0.001008f, -0.003383f, -0.007528f, -0.015679f, +0.003801f, -0.001329f, -0.000786f, +0.007087f, -0.001502f, +0.003240f, + +0.011821f, +0.002412f, -0.002327f, +0.005398f, +0.013395f, -0.010217f, +0.014955f, +0.001458f, -0.026277f, -0.024351f, + +0.004068f, -0.006941f, +0.012861f, +0.008023f, +0.012299f, -0.002306f, +0.006145f, +0.004134f, -0.001063f, +0.000699f, + -0.005273f, +0.009305f, -0.004853f, -0.010558f, -0.001451f, +0.006801f, +0.004660f, +0.011581f, +0.000683f, -0.000959f, + +0.000425f, +0.000032f, +0.004094f, -0.002387f, -0.005927f, +0.007009f, -0.003180f, +0.000139f, +0.000013f, -0.000571f, + +0.001289f, +0.002204f, +0.003717f, -0.000211f, +0.002333f, -0.003937f, +0.000466f, +0.000279f, -0.001309f, -0.001460f, + +0.001164f, +0.001050f, -0.002265f, +0.000150f, -0.000941f, +0.000825f, +0.003043f, -0.001783f, -0.001836f, +0.000223f, + +0.000359f, -0.000736f, -0.001184f, -0.001542f, -0.000551f, +0.000088f, +0.000244f, +0.000662f, -0.001216f, -0.002400f, + +0.002152f, +0.001217f, +0.000768f, -0.000156f, +0.000769f, -0.000820f, -0.000502f, -0.000104f, -0.000667f, +0.000055f, + +0.000152f, -0.000427f, +0.001078f, +0.000078f, -0.000261f, -0.000452f + }, + { + -0.001343f, +0.005425f, -0.026875f, -0.026897f, +0.002643f, +0.005220f, +0.000323f, -0.005051f, -0.000717f, -0.003206f, + -0.003292f, +0.001258f, +0.003109f, +0.000551f, +0.012219f, +0.004045f, +0.005984f, -0.011439f, +0.000364f, -0.004359f, + -0.001160f, -0.006428f, +0.017748f, -0.002875f, +0.009762f, -0.009202f, +0.005083f, +0.006011f, +0.001923f, -0.005615f, + +0.004982f, +0.000543f, +0.001241f, -0.005000f, -0.004354f, +0.007427f, +0.010766f, -0.003100f, +0.007749f, +0.006203f, + -0.000959f, -0.002864f, -0.000789f, +0.001976f, +0.002709f, +0.003824f, +0.002367f, +0.002970f, -0.000627f, +0.001761f, + +0.004117f, +0.000434f, -0.000810f, +0.003038f, -0.000307f, +0.002709f, -0.001721f, -0.004319f, +0.000486f, -0.001785f, + -0.000329f, +0.002054f, -0.001478f, -0.000150f, -0.000456f, +0.001126f, -0.001142f, -0.000176f, -0.000974f, +0.000419f, + +0.000565f, -0.001464f, -0.000537f, -0.000079f, +0.000505f, +0.000835f, +0.000649f, +0.001579f, -0.000180f, -0.002519f, + +0.000399f, -0.000173f, -0.000211f, -0.000969f, -0.000272f, -0.000814f, +0.000457f, -0.000484f, +0.000094f, -0.000004f, + -0.000674f, -0.000988f, -0.000522f, +0.000040f, -0.000763f, +0.000562f + }, + { + +0.039857f, +0.166991f, -0.001179f, +0.011514f, -0.008020f, -0.002206f, +0.003745f, +0.002227f, +0.002116f, -0.015015f, + -0.003354f, +0.002814f, +0.000027f, -0.002356f, -0.005136f, -0.011327f, -0.008591f, +0.001698f, -0.014948f, +0.005766f, + -0.005234f, -0.002652f, +0.003888f, +0.004900f, -0.010660f, -0.000964f, +0.000875f, +0.004245f, +0.004601f, +0.001149f, + -0.007391f, -0.001554f, -0.003334f, +0.003372f, +0.003260f, +0.001763f, +0.002121f, -0.002499f, +0.005576f, -0.009904f, + +0.000786f, +0.005913f, -0.002233f, -0.002377f, +0.000073f, +0.004405f, -0.004712f, -0.000341f, -0.005589f, +0.000653f, + +0.003892f, -0.005995f, -0.002277f, +0.001602f, +0.001686f, -0.002992f, -0.000496f, -0.001856f, +0.002329f, -0.002484f, + +0.002049f, -0.003016f, +0.000809f, +0.001164f, +0.000784f, +0.000292f, -0.000496f, -0.004917f, -0.001382f, -0.001253f, + -0.001170f, -0.002077f, -0.000720f, -0.000062f, -0.000842f, -0.000246f, +0.000287f, -0.000244f, +0.000493f, +0.001034f, + +0.001633f, +0.000107f, -0.000193f, -0.000659f, +0.000837f, -0.000180f, +0.000346f, +0.000740f, -0.000562f, +0.000568f, + +0.000649f, +0.000075f, +0.000191f, +0.000428f, +0.000738f, +0.000555f + }, + { + -0.004454f, -0.017519f, +0.004875f, +0.004076f, -0.000718f, -0.000654f, +0.000137f, +0.004410f, +0.003224f, -0.001552f, + +0.003450f, -0.008033f, +0.003112f, +0.003273f, -0.018726f, -0.015409f, -0.015583f, +0.006359f, +0.024946f, -0.020502f, + +0.005220f, +0.003952f, +0.012369f, -0.007106f, +0.010503f, -0.046984f, -0.015475f, +0.005706f, +0.016339f, -0.023539f, + -0.003123f, -0.012337f, -0.007553f, -0.001248f, -0.006132f, +0.000836f, +0.001549f, +0.005022f, +0.001201f, +0.000077f, + -0.001244f, +0.001353f, +0.002504f, +0.003067f, +0.001078f, -0.004905f, -0.001851f, +0.001245f, -0.004778f, +0.002770f, + +0.002212f, -0.002058f, -0.002400f, -0.000964f, +0.002258f, +0.002337f, +0.002282f, +0.001275f, -0.000518f, -0.004880f, + -0.006088f, -0.000730f, +0.000266f, -0.002480f, -0.000331f, -0.002873f, -0.000648f, -0.001343f, +0.002011f, +0.004173f, + -0.001812f, -0.000866f, +0.002258f, -0.000661f, +0.001095f, +0.001140f, +0.000029f, -0.001584f, -0.000007f, -0.000066f, + +0.000058f, +0.000356f, -0.000572f, +0.000029f, -0.000421f, -0.000042f, +0.000914f, -0.000574f, +0.001083f, -0.000137f, + +0.000290f, +0.000442f, -0.000760f, -0.000659f, +0.000140f, +0.000060f + }, + { + +0.064138f, +0.240501f, +0.004092f, +0.086189f, +0.018258f, -0.002978f, +0.003141f, -0.001661f, -0.008317f, +0.007684f, + +0.003439f, -0.011429f, -0.004913f, +0.019231f, +0.003930f, -0.000498f, +0.001783f, -0.004973f, +0.006232f, -0.003747f, + +0.007054f, -0.000528f, +0.005788f, +0.004139f, -0.000662f, -0.002298f, -0.006160f, -0.006609f, +0.003888f, +0.004342f, + +0.002465f, -0.000745f, -0.004386f, -0.005726f, -0.005591f, -0.003199f, +0.004465f, +0.009705f, -0.003454f, +0.000682f, + +0.004894f, -0.000454f, +0.001329f, -0.001936f, +0.002641f, +0.002195f, -0.000734f, -0.002882f, -0.007275f, +0.000049f, + +0.003417f, -0.001531f, +0.006056f, +0.000765f, -0.000681f, +0.000899f, +0.004659f, +0.000167f, -0.004053f, -0.006256f, + -0.003586f, -0.001017f, -0.004504f, -0.000309f, -0.001262f, +0.001261f, -0.000062f, +0.000362f, +0.002474f, -0.000755f, + -0.001736f, -0.000007f, -0.001610f, +0.000315f, -0.000717f, +0.000559f, +0.001948f, -0.001552f, -0.000930f, -0.000349f, + +0.000527f, -0.000699f, +0.001002f, +0.000559f, +0.001641f, +0.000743f, -0.000534f, +0.001021f, -0.000458f, -0.000506f, + -0.000182f, +0.000384f, +0.000451f, -0.000465f, -0.000739f, +0.000176f + }, + { + -0.000004f, -0.021810f, -0.004890f, -0.005699f, -0.003080f, -0.001151f, +0.000150f, +0.003072f, -0.001270f, +0.000194f, + -0.002536f, -0.000178f, -0.000109f, +0.013389f, +0.036625f, -0.039126f, -0.013789f, -0.007552f, +0.008784f, +0.002836f, + -0.009129f, +0.005033f, +0.014630f, -0.010262f, -0.003984f, +0.007881f, -0.007429f, +0.001835f, +0.001336f, +0.005274f, + -0.005605f, -0.002772f, +0.016058f, +0.026297f, +0.004995f, +0.005707f, +0.001852f, +0.003391f, +0.008506f, -0.000042f, + +0.003054f, -0.000064f, +0.003812f, +0.006688f, -0.001078f, +0.003626f, +0.001751f, +0.003996f, -0.003891f, -0.004963f, + -0.004001f, +0.000514f, -0.002893f, -0.004100f, +0.002747f, -0.003654f, -0.001551f, -0.003634f, +0.000290f, +0.000735f, + -0.001872f, -0.001263f, -0.001114f, +0.000374f, +0.003144f, +0.001253f, -0.000488f, -0.000765f, +0.000283f, +0.000565f, + -0.000318f, +0.002310f, -0.000007f, -0.000017f, +0.001614f, +0.001822f, +0.000997f, +0.001980f, -0.000681f, +0.000047f, + +0.000397f, +0.000575f, -0.000706f, -0.000773f, +0.000514f, +0.000166f, -0.001839f, +0.000534f, -0.000133f, -0.000940f, + -0.000502f, +0.000540f, +0.000785f, +0.000347f, +0.000286f, -0.000307f + }, + { + -0.092194f, -0.032422f, -0.014542f, -0.050885f, +0.008756f, +0.002892f, -0.006658f, +0.003179f, -0.004368f, -0.005859f, + -0.000435f, +0.001135f, +0.009873f, +0.002493f, +0.004004f, -0.006647f, -0.005890f, -0.013395f, -0.006810f, +0.013643f, + -0.005318f, -0.005216f, +0.003240f, -0.002363f, -0.005618f, +0.004944f, -0.006180f, -0.000902f, +0.005527f, -0.001162f, + +0.000150f, -0.000646f, -0.003594f, -0.000637f, -0.006885f, -0.003012f, -0.004295f, -0.001377f, +0.003154f, -0.001098f, + -0.000894f, -0.005376f, +0.001465f, -0.001262f, +0.003967f, +0.000425f, +0.002198f, +0.001495f, +0.002677f, +0.001782f, + +0.006459f, -0.001059f, -0.001131f, +0.000332f, +0.005634f, +0.003603f, +0.002094f, +0.000222f, +0.000469f, +0.001596f, + +0.001730f, -0.000128f, +0.000943f, +0.002886f, +0.000319f, +0.000375f, -0.000219f, -0.001540f, -0.001652f, -0.000421f, + +0.000021f, -0.000301f, +0.000540f, +0.001355f, -0.000125f, -0.000247f, +0.002022f, -0.000106f, +0.000634f, +0.000570f, + +0.001004f, +0.000992f, -0.000451f, -0.000513f, -0.001009f, -0.001479f, +0.000987f, +0.000498f, +0.000180f, +0.000083f, + -0.000386f, +0.000087f, +0.000456f, +0.001165f, +0.000078f, -0.000202f + }, + { + -0.000187f, +0.006861f, +0.007626f, +0.000832f, +0.001193f, -0.000362f, -0.000762f, -0.000480f, -0.002255f, +0.001445f, + -0.004025f, -0.007200f, +0.002658f, +0.012488f, +0.022770f, -0.035443f, -0.006078f, -0.004115f, -0.002855f, +0.024256f, + +0.017085f, +0.000502f, -0.002093f, -0.005484f, -0.002461f, +0.014301f, +0.017839f, -0.006847f, -0.016035f, +0.012108f, + -0.009582f, -0.009270f, -0.007163f, -0.000177f, -0.002064f, -0.008062f, -0.007790f, -0.004256f, +0.002166f, -0.003871f, + +0.003961f, -0.002701f, +0.002556f, +0.006929f, +0.006941f, +0.007552f, +0.001466f, +0.000703f, +0.000400f, -0.000040f, + +0.003798f, -0.002722f, +0.002171f, +0.001027f, +0.000503f, -0.000260f, -0.001386f, +0.001109f, -0.000322f, -0.004110f, + -0.002927f, +0.000152f, -0.000841f, +0.000445f, +0.000392f, +0.000674f, -0.000100f, -0.000368f, -0.000194f, +0.000570f, + -0.002553f, -0.000297f, -0.002858f, -0.000629f, +0.003066f, +0.001368f, -0.000200f, -0.000529f, -0.000301f, +0.001069f, + -0.000625f, -0.000838f, -0.000629f, +0.001889f, -0.001825f, +0.000116f, +0.000123f, -0.000372f, -0.001105f, -0.000630f, + +0.000561f, +0.000328f, -0.000180f, +0.000312f, +0.000099f, -0.000108f + }, + { + -0.017611f, -0.230938f, +0.005654f, +0.016319f, +0.028726f, -0.005549f, +0.003760f, +0.000454f, +0.005544f, +0.004358f, + -0.004165f, +0.005483f, -0.005723f, +0.007716f, -0.003247f, -0.005262f, +0.006043f, +0.006802f, -0.004232f, +0.002769f, + -0.000988f, -0.006790f, +0.006442f, -0.004370f, -0.017967f, +0.004370f, +0.006296f, +0.000899f, +0.002567f, -0.004301f, + +0.000369f, +0.002737f, +0.000076f, -0.001927f, -0.001414f, -0.003101f, -0.004045f, +0.007698f, -0.004903f, +0.000608f, + -0.005160f, +0.000500f, -0.003904f, -0.009109f, +0.007557f, +0.005902f, +0.001723f, +0.000695f, +0.002013f, +0.000024f, + +0.003008f, +0.002915f, +0.000627f, -0.002223f, +0.001698f, +0.003136f, +0.001829f, +0.000819f, -0.000134f, +0.001352f, + +0.002773f, +0.002048f, +0.000070f, -0.001361f, +0.000049f, -0.002785f, +0.000633f, +0.001734f, -0.003007f, -0.002027f, + -0.000834f, -0.000695f, -0.000085f, +0.000740f, +0.002224f, -0.000704f, +0.000792f, +0.000631f, -0.001375f, +0.000461f, + -0.000916f, -0.001366f, -0.001286f, +0.000404f, +0.000493f, +0.000168f, +0.000050f, -0.000498f, -0.000426f, -0.001704f, + +0.001127f, -0.000849f, +0.001261f, +0.001157f, -0.000355f, +0.000216f + }, + { + -0.000693f, +0.029076f, +0.010744f, -0.006686f, -0.003356f, -0.004498f, -0.003147f, -0.007202f, -0.000504f, +0.002721f, + +0.004315f, +0.008197f, +0.002950f, +0.002392f, -0.031196f, -0.011031f, -0.011220f, +0.014814f, +0.004728f, +0.007115f, + -0.017866f, +0.012457f, -0.003356f, -0.002161f, -0.003083f, -0.006965f, +0.004551f, +0.011892f, -0.001751f, +0.000650f, + -0.008158f, +0.000929f, +0.004476f, -0.002974f, -0.003940f, -0.001840f, +0.001973f, +0.006723f, -0.004632f, -0.000667f, + -0.008084f, -0.002559f, +0.004146f, -0.003329f, +0.004220f, -0.001643f, -0.000125f, +0.003717f, -0.002861f, -0.000481f, + -0.003779f, +0.000929f, -0.002153f, -0.000137f, -0.000661f, -0.003772f, -0.000093f, +0.001950f, -0.000779f, +0.000440f, + +0.002677f, -0.000023f, +0.002154f, -0.001601f, +0.002952f, +0.001075f, -0.003260f, -0.002071f, -0.000654f, -0.002189f, + -0.000693f, -0.001396f, -0.000135f, -0.000421f, -0.001382f, +0.000772f, +0.000663f, +0.001418f, +0.000906f, +0.001813f, + +0.000379f, +0.000483f, +0.000224f, -0.001188f, -0.000508f, -0.000246f, +0.000627f, -0.000154f, -0.000632f, -0.000546f, + +0.001039f, +0.000809f, +0.000357f, -0.000036f, +0.000297f, -0.000204f + }, + { + -0.086144f, -0.178491f, -0.017368f, -0.022656f, -0.009700f, +0.003794f, -0.036096f, -0.017871f, +0.010795f, -0.002451f, + +0.010987f, -0.005824f, -0.009634f, -0.005493f, +0.007577f, +0.004016f, +0.010258f, -0.007240f, -0.004732f, +0.005339f, + -0.003761f, +0.006455f, -0.002885f, +0.000692f, +0.004614f, +0.005448f, +0.003695f, -0.002964f, -0.003144f, -0.000972f, + +0.005849f, +0.007049f, +0.003638f, -0.003604f, -0.001904f, -0.006664f, +0.001418f, +0.006525f, -0.001819f, +0.003089f, + -0.004142f, -0.004146f, -0.004368f, +0.001614f, +0.003026f, -0.003236f, +0.001538f, +0.004031f, -0.000709f, -0.006871f, + -0.000064f, -0.001983f, +0.004625f, -0.002667f, +0.000949f, +0.002521f, +0.000609f, +0.002797f, -0.002104f, -0.001696f, + +0.003166f, +0.000790f, +0.000088f, +0.001545f, +0.001386f, +0.000051f, -0.002778f, -0.003115f, +0.001404f, -0.001649f, + +0.001043f, -0.001642f, +0.002266f, +0.000336f, +0.002024f, -0.001065f, -0.000872f, -0.000445f, -0.000547f, +0.000417f, + -0.000034f, +0.001412f, -0.000198f, +0.001500f, +0.000325f, -0.000901f, +0.000368f, -0.001183f, +0.000038f, +0.000870f, + +0.001233f, +0.000230f, +0.000131f, -0.000294f, -0.000107f, -0.000191f + }, + { + -0.004987f, -0.043527f, +0.018082f, +0.013462f, -0.000321f, -0.004551f, -0.004292f, -0.001216f, -0.006290f, -0.003655f, + +0.001693f, +0.002865f, -0.003834f, +0.007651f, -0.025418f, +0.001806f, +0.005395f, -0.011021f, -0.010518f, -0.003974f, + -0.028577f, -0.016595f, -0.005517f, -0.003213f, -0.002325f, -0.020216f, -0.010768f, +0.004372f, +0.011438f, +0.004547f, + +0.013884f, +0.022066f, -0.002635f, -0.011000f, +0.003343f, -0.019710f, -0.003257f, -0.011225f, -0.008270f, -0.001318f, + +0.009725f, +0.004993f, -0.004587f, +0.004787f, +0.003546f, -0.002033f, +0.001847f, -0.004772f, -0.001129f, +0.003771f, + +0.000515f, -0.004075f, -0.006197f, -0.004006f, +0.005080f, +0.000539f, -0.001483f, +0.003260f, -0.002201f, -0.001481f, + +0.002707f, +0.002681f, +0.004911f, -0.000489f, -0.003077f, -0.002051f, +0.002084f, +0.001105f, +0.003525f, -0.000406f, + +0.001948f, +0.000466f, +0.002498f, -0.002233f, +0.001703f, -0.000120f, +0.000396f, +0.000214f, -0.000829f, -0.000434f, + +0.000924f, -0.001801f, -0.002182f, -0.000876f, -0.000626f, -0.000278f, +0.000687f, -0.000803f, -0.000395f, +0.000764f, + -0.000339f, +0.000122f, +0.000749f, -0.000320f, -0.000697f, +0.000596f + }, + { + +0.004731f, -0.188167f, -0.010994f, -0.016123f, +0.001062f, +0.020229f, +0.000099f, +0.024148f, -0.000383f, -0.000583f, + +0.007165f, +0.020591f, -0.005720f, +0.008734f, -0.003224f, -0.005606f, -0.007703f, +0.001556f, +0.012257f, +0.010612f, + -0.003457f, +0.001768f, +0.004934f, +0.006600f, -0.003682f, +0.004523f, +0.003782f, +0.011088f, +0.002356f, -0.005793f, + -0.008832f, -0.005411f, +0.002278f, +0.000074f, +0.000734f, +0.003770f, -0.006838f, -0.000942f, -0.000936f, +0.002929f, + -0.002915f, -0.006686f, -0.002472f, +0.004958f, +0.004476f, -0.000271f, -0.001531f, +0.007457f, -0.001668f, +0.001277f, + +0.003570f, -0.000251f, -0.000993f, -0.001275f, +0.000142f, -0.001125f, -0.005323f, +0.000564f, -0.002407f, +0.003135f, + +0.000391f, -0.001811f, -0.000866f, -0.003323f, -0.003339f, -0.000546f, -0.001462f, -0.000495f, +0.001373f, -0.000757f, + +0.000582f, +0.002337f, +0.000105f, -0.002302f, +0.000207f, -0.001459f, +0.001839f, +0.000101f, -0.000285f, +0.000991f, + -0.000300f, +0.000214f, +0.000385f, +0.000961f, +0.000796f, -0.002255f, -0.001004f, +0.000401f, -0.000330f, +0.000260f, + +0.000070f, -0.000501f, +0.000205f, +0.000304f, +0.000369f, -0.000401f + }, + { + -0.006611f, -0.084802f, -0.003836f, +0.006043f, +0.001988f, +0.006150f, +0.007658f, -0.002611f, -0.001365f, -0.003607f, + -0.002824f, +0.000011f, +0.015325f, +0.028620f, -0.018201f, -0.019304f, -0.018892f, -0.011108f, +0.007525f, +0.022069f, + -0.001170f, -0.014695f, +0.009460f, -0.007401f, +0.022316f, +0.004667f, +0.016178f, -0.013732f, +0.002770f, -0.000162f, + +0.001497f, +0.001680f, -0.005143f, -0.001154f, +0.008868f, +0.003132f, -0.003652f, +0.006387f, +0.001241f, +0.002162f, + +0.003895f, +0.010003f, +0.010467f, -0.002928f, -0.007986f, +0.001902f, +0.003344f, +0.002050f, +0.000564f, -0.001533f, + +0.003266f, +0.007788f, -0.003807f, +0.000102f, -0.002000f, +0.000599f, -0.001262f, +0.000007f, +0.001501f, -0.002577f, + +0.001062f, +0.001854f, -0.000946f, +0.000493f, +0.001825f, -0.000139f, -0.003241f, +0.002112f, -0.000927f, -0.000805f, + +0.001701f, -0.000143f, +0.001763f, +0.000898f, -0.000366f, -0.000568f, -0.000821f, +0.000745f, -0.001366f, -0.001431f, + +0.000755f, -0.000974f, -0.002027f, -0.001306f, -0.000499f, -0.000372f, +0.001133f, +0.000120f, -0.000721f, -0.000078f, + -0.000196f, -0.000532f, -0.000670f, -0.000711f, -0.000171f, +0.000716f + } + }, + { + { + -0.000553f, -0.052841f, -0.035509f, +0.011825f, -0.006581f, -0.002084f, -0.000401f, +0.004720f, -0.000400f, -0.008684f, + +0.009966f, +0.006269f, -0.008389f, -0.000381f, +0.001452f, +0.006400f, -0.004493f, +0.003660f, -0.003405f, -0.002824f, + -0.005682f, +0.004023f, -0.000449f, +0.010234f, +0.001044f, -0.002229f, -0.002987f, -0.003646f, +0.001787f, +0.002331f, + +0.006855f, -0.002522f, +0.002213f, +0.001582f, +0.002504f, +0.000810f, +0.004726f, +0.004565f, +0.006449f, -0.000863f, + -0.008213f, +0.001171f, -0.006331f, -0.003867f, -0.000692f, +0.001315f, -0.004468f, -0.000046f, -0.000366f, -0.001987f, + +0.003033f, +0.000104f, +0.000024f, -0.000360f, +0.002143f, -0.000926f, +0.002587f, +0.001796f, +0.001477f, +0.001673f, + +0.001998f, +0.001199f, +0.001808f, -0.001407f, +0.001288f, -0.000698f, +0.002210f, +0.000966f, -0.000310f, +0.001172f, + +0.001605f, -0.000141f, +0.000262f, +0.000106f, -0.001634f, -0.000583f, -0.000220f, +0.000049f, -0.000277f, +0.000075f, + +0.000144f, -0.000290f, +0.000479f, +0.000233f, +0.000103f, +0.000010f, +0.000418f, -0.000168f, +0.000881f, +0.000533f, + +0.000552f, -0.000027f, -0.000022f, -0.000533f, -0.000029f, +0.000017f + }, + { + +0.000044f, +0.012566f, -0.002401f, -0.009640f, +0.009614f, -0.000876f, +0.002355f, +0.005454f, -0.003942f, -0.001189f, + +0.005273f, -0.005222f, -0.005931f, -0.000451f, +0.010755f, -0.003150f, +0.019153f, +0.006746f, -0.001091f, -0.012520f, + +0.010914f, -0.001280f, +0.004352f, -0.008504f, +0.000886f, +0.002696f, +0.003548f, -0.004716f, -0.004955f, +0.005795f, + -0.003293f, +0.005051f, -0.009250f, -0.006448f, +0.004821f, +0.005778f, +0.003499f, +0.005179f, -0.003009f, -0.000479f, + +0.000629f, -0.004138f, -0.000145f, -0.001383f, -0.003235f, +0.003268f, -0.005663f, -0.001795f, -0.003352f, -0.001316f, + +0.001259f, -0.001648f, +0.000364f, -0.001070f, -0.000003f, -0.003659f, +0.000868f, -0.000408f, +0.000041f, -0.001224f, + +0.001327f, +0.000814f, -0.002055f, +0.001781f, +0.001157f, -0.000017f, +0.000594f, +0.000058f, -0.000187f, +0.000173f, + -0.000495f, -0.000404f, +0.000398f, -0.000017f, +0.000133f, +0.001525f, -0.000106f, +0.000689f, +0.000003f, -0.001640f, + +0.000999f, +0.000172f, +0.000865f, +0.000177f, +0.000813f, -0.000443f, -0.000575f, +0.000092f, -0.000778f, +0.000254f, + +0.000164f, -0.000438f, +0.000900f, -0.000235f, -0.000253f, -0.000098f + }, + { + -0.000982f, +0.037216f, +0.008107f, +0.011727f, +0.013488f, +0.001214f, -0.001246f, -0.003946f, +0.004309f, +0.000632f, + -0.001157f, +0.003393f, +0.003700f, +0.000334f, +0.001802f, -0.015151f, +0.004378f, -0.011618f, +0.006864f, -0.000964f, + -0.001703f, -0.016229f, +0.015442f, +0.002675f, +0.015166f, -0.000974f, +0.001792f, +0.004875f, +0.001991f, -0.001149f, + +0.008964f, +0.000975f, -0.004113f, -0.008287f, -0.007628f, +0.003662f, +0.005836f, -0.003078f, +0.003121f, -0.000179f, + -0.002498f, -0.001103f, +0.000525f, +0.001174f, -0.001327f, -0.001806f, +0.002548f, +0.002737f, -0.002785f, -0.001450f, + -0.000787f, -0.000658f, -0.000981f, +0.000369f, -0.000136f, +0.004328f, -0.003056f, -0.000971f, +0.004526f, +0.000777f, + -0.001930f, -0.000589f, -0.002287f, +0.000829f, -0.001236f, +0.000947f, +0.000303f, +0.001007f, -0.001418f, -0.002408f, + -0.000971f, -0.001125f, +0.000782f, +0.000347f, +0.000038f, -0.000099f, +0.000211f, +0.000831f, -0.000465f, -0.001922f, + +0.000949f, -0.000373f, +0.000292f, -0.000294f, -0.000089f, +0.000001f, +0.000923f, -0.000588f, -0.000198f, +0.000492f, + -0.000292f, -0.000118f, -0.000157f, -0.000080f, -0.000791f, -0.000068f + }, + { + -0.043897f, +0.034553f, -0.032708f, -0.001468f, +0.010242f, -0.002455f, -0.003725f, -0.001981f, +0.009214f, +0.001034f, + +0.002712f, -0.001449f, -0.002433f, +0.004346f, +0.014077f, +0.002997f, -0.006294f, -0.004513f, -0.014725f, +0.006555f, + -0.000591f, +0.000337f, +0.007671f, +0.005275f, -0.010313f, +0.004424f, -0.003446f, -0.004331f, +0.002310f, -0.001008f, + -0.006259f, +0.002106f, -0.004013f, +0.002663f, +0.002934f, +0.004989f, +0.003238f, -0.002677f, +0.000851f, -0.006615f, + +0.001609f, +0.002131f, +0.001394f, -0.004063f, -0.000455f, +0.008638f, -0.004273f, -0.000459f, -0.004083f, -0.001241f, + +0.002259f, -0.002362f, -0.000310f, -0.001316f, -0.000742f, -0.002225f, +0.002292f, -0.000875f, +0.000753f, -0.001339f, + +0.003139f, -0.001715f, +0.001707f, +0.000427f, +0.001814f, -0.000275f, +0.000677f, -0.001806f, +0.000474f, +0.001690f, + +0.002567f, -0.000907f, -0.001316f, -0.000174f, -0.001014f, -0.000835f, -0.000003f, -0.000016f, -0.000812f, -0.000825f, + +0.000701f, +0.000297f, +0.000491f, -0.000957f, +0.000328f, +0.000136f, +0.000013f, +0.000514f, -0.000704f, -0.000056f, + +0.000153f, +0.000546f, -0.000263f, -0.000775f, +0.000196f, -0.000179f + }, + { + +0.004355f, -0.024782f, -0.008472f, +0.004204f, -0.000300f, -0.000910f, -0.000539f, +0.002401f, +0.000759f, +0.000054f, + +0.007086f, -0.001578f, -0.000215f, +0.002843f, -0.005498f, +0.017947f, +0.009500f, -0.020958f, +0.015432f, -0.018796f, + +0.010161f, +0.010604f, +0.017669f, +0.000055f, +0.016069f, -0.017380f, +0.003302f, +0.004075f, +0.015419f, -0.024340f, + +0.009880f, +0.001387f, -0.001950f, +0.005046f, +0.003661f, +0.005749f, -0.000973f, -0.002331f, +0.000420f, +0.006153f, + +0.005136f, +0.000593f, +0.001823f, +0.003178f, +0.003032f, -0.001668f, +0.000283f, +0.001568f, -0.002800f, +0.002883f, + +0.003537f, -0.000041f, -0.001456f, -0.000014f, +0.001062f, -0.000496f, +0.002435f, -0.001730f, -0.002198f, -0.001373f, + -0.000985f, +0.000159f, +0.000865f, -0.000931f, -0.000322f, -0.001390f, -0.000208f, -0.002430f, +0.000574f, +0.000910f, + -0.002137f, -0.001049f, +0.001581f, -0.001079f, +0.001038f, +0.000401f, +0.000976f, -0.001157f, +0.000145f, +0.000460f, + +0.000507f, +0.000828f, +0.000586f, +0.000475f, -0.000255f, -0.000777f, +0.000529f, -0.001213f, +0.000508f, +0.000253f, + +0.000693f, +0.000657f, -0.000051f, +0.000394f, +0.000173f, -0.000545f + }, + { + -0.066807f, +0.032821f, -0.014649f, +0.068059f, +0.006690f, -0.003688f, +0.003180f, +0.014159f, +0.005140f, +0.004991f, + +0.001648f, -0.005313f, -0.006169f, +0.010129f, -0.003501f, -0.007500f, +0.001615f, -0.008839f, +0.005040f, -0.004089f, + -0.002565f, -0.010484f, +0.007824f, +0.000857f, -0.002493f, -0.000021f, -0.000534f, -0.001593f, +0.002360f, +0.002649f, + -0.001024f, -0.001788f, -0.004136f, -0.004487f, -0.006676f, -0.005149f, +0.000029f, +0.003842f, -0.006034f, -0.001210f, + +0.003323f, -0.002391f, +0.001310f, +0.002635f, +0.005127f, -0.001087f, -0.004847f, +0.000049f, -0.004824f, -0.000962f, + +0.005991f, -0.001521f, +0.001224f, -0.000594f, +0.003267f, -0.001389f, +0.000726f, -0.000279f, -0.000729f, -0.001544f, + +0.003446f, +0.001909f, -0.004689f, +0.001006f, -0.001398f, +0.001015f, +0.000291f, +0.000626f, +0.002742f, +0.000705f, + +0.000051f, +0.000343f, +0.000172f, -0.000528f, -0.000752f, +0.000150f, +0.000103f, -0.001756f, -0.000368f, +0.000391f, + +0.000864f, -0.000817f, +0.001057f, -0.000731f, -0.000038f, -0.000183f, -0.000300f, +0.000709f, +0.000314f, -0.001073f, + -0.001273f, +0.000008f, +0.000157f, +0.000307f, -0.000438f, -0.000460f + }, + { + -0.001003f, -0.024307f, -0.002687f, -0.002025f, -0.000068f, +0.000235f, +0.000720f, +0.002587f, -0.002756f, -0.000358f, + -0.002196f, -0.001815f, -0.007652f, -0.001300f, +0.012743f, -0.025236f, +0.008221f, -0.004125f, +0.001919f, -0.004883f, + -0.008087f, -0.009523f, +0.010706f, +0.021597f, +0.014223f, +0.011643f, -0.024163f, -0.005147f, +0.004002f, +0.016022f, + +0.007117f, +0.004736f, +0.013469f, +0.010437f, +0.001465f, +0.000984f, -0.001985f, +0.000816f, +0.004602f, -0.005989f, + -0.003123f, -0.003198f, +0.000230f, +0.004657f, -0.003375f, +0.001731f, -0.000042f, +0.003276f, +0.000109f, -0.000561f, + -0.002415f, -0.001087f, -0.000039f, -0.000676f, +0.005226f, -0.003705f, -0.004476f, -0.002707f, +0.001842f, -0.000615f, + -0.002044f, -0.000327f, -0.002566f, -0.002868f, +0.000033f, -0.000106f, +0.000305f, -0.001025f, -0.000940f, +0.000689f, + -0.000155f, +0.001251f, -0.000189f, +0.001329f, +0.001286f, +0.000301f, -0.000935f, +0.001384f, -0.000825f, -0.000802f, + +0.000302f, -0.000062f, -0.000703f, -0.000313f, +0.000349f, +0.000056f, -0.000978f, +0.000726f, +0.000082f, +0.000608f, + -0.000651f, +0.000159f, +0.000462f, +0.000229f, +0.000544f, -0.000326f + }, + { + +0.054226f, +0.178389f, -0.006729f, -0.047015f, -0.001143f, +0.006636f, -0.001382f, +0.003014f, -0.007256f, -0.007923f, + +0.007328f, +0.002852f, -0.002081f, -0.002179f, +0.001929f, +0.004082f, +0.002541f, +0.006640f, -0.004772f, +0.005901f, + -0.005111f, -0.005983f, +0.005699f, +0.000033f, -0.007099f, +0.005848f, +0.001542f, +0.008146f, +0.003909f, -0.007263f, + +0.003186f, +0.005763f, +0.001123f, -0.000190f, -0.000866f, +0.001023f, -0.001823f, +0.002350f, -0.002057f, -0.007471f, + +0.001237f, -0.004738f, -0.002483f, -0.002070f, +0.002078f, +0.000652f, +0.003444f, +0.001340f, +0.001079f, +0.000544f, + +0.002527f, +0.002379f, +0.003165f, -0.000678f, +0.002198f, +0.001764f, +0.003541f, +0.000585f, -0.000951f, -0.002506f, + +0.002163f, -0.002057f, -0.002541f, +0.001899f, -0.001578f, -0.000590f, +0.000703f, -0.000981f, -0.000829f, -0.001020f, + -0.000002f, +0.000051f, -0.000411f, +0.001784f, +0.000685f, +0.000921f, +0.001680f, +0.000214f, +0.000082f, +0.000102f, + +0.000787f, +0.000499f, -0.000280f, -0.000422f, +0.000181f, -0.000188f, +0.000186f, -0.000092f, +0.000581f, -0.000412f, + -0.000614f, -0.000323f, +0.000211f, +0.000332f, -0.000716f, +0.000166f + }, + { + -0.001563f, -0.005918f, +0.000792f, -0.001245f, -0.000374f, -0.000641f, +0.001242f, +0.000914f, -0.001005f, +0.000384f, + -0.002514f, -0.000501f, +0.001723f, -0.002569f, +0.019563f, -0.027109f, +0.018416f, +0.013429f, +0.004060f, +0.016906f, + +0.016291f, -0.010910f, +0.003426f, +0.007053f, -0.013065f, +0.016034f, +0.023285f, -0.000116f, -0.009269f, +0.017136f, + -0.004450f, -0.008324f, -0.001907f, +0.004774f, -0.007219f, -0.008691f, -0.008030f, -0.005580f, +0.002038f, -0.005667f, + -0.000204f, -0.000153f, +0.000008f, -0.002668f, -0.000504f, +0.003251f, +0.002108f, +0.003028f, +0.000842f, -0.000672f, + +0.001358f, -0.001590f, +0.001494f, -0.000404f, +0.002008f, +0.000232f, -0.000235f, +0.002650f, -0.001766f, -0.003219f, + -0.000554f, +0.002020f, +0.000429f, +0.001167f, +0.000768f, +0.000947f, -0.000153f, +0.000736f, +0.000702f, +0.001394f, + -0.000939f, +0.000594f, -0.002234f, -0.000105f, +0.002854f, -0.000206f, +0.000287f, -0.000168f, -0.000729f, +0.000930f, + -0.000017f, +0.000170f, -0.000936f, +0.001931f, -0.001483f, +0.000035f, +0.000109f, -0.000471f, -0.000244f, -0.000757f, + -0.000506f, +0.000122f, -0.000171f, -0.000099f, -0.000242f, -0.000071f + }, + { + +0.019262f, -0.211948f, -0.043446f, +0.011927f, +0.023590f, -0.009662f, +0.015457f, +0.004202f, -0.001327f, +0.000287f, + -0.001735f, +0.006010f, +0.005147f, +0.015923f, -0.002456f, +0.000901f, -0.002839f, +0.009670f, -0.006836f, -0.000846f, + -0.001357f, -0.007446f, +0.001839f, +0.002217f, -0.008652f, +0.011941f, -0.001412f, -0.008751f, +0.008185f, +0.008065f, + +0.001603f, -0.007140f, -0.006134f, -0.004218f, +0.008227f, +0.001522f, -0.004109f, +0.008016f, -0.000614f, +0.002575f, + -0.005082f, -0.000465f, -0.002280f, -0.006734f, +0.005187f, -0.000141f, -0.004953f, -0.001096f, +0.001513f, -0.005708f, + -0.000641f, -0.001280f, -0.000397f, -0.001502f, +0.000146f, +0.000071f, -0.001405f, -0.001462f, -0.001442f, +0.000324f, + -0.000765f, +0.000540f, -0.000754f, -0.001300f, +0.000767f, -0.001014f, +0.000869f, -0.000554f, -0.001566f, +0.000842f, + +0.001283f, -0.000372f, -0.000557f, +0.000713f, +0.001213f, -0.000758f, -0.000483f, +0.000661f, -0.000268f, +0.001622f, + +0.000330f, -0.000448f, -0.000687f, -0.000674f, +0.000005f, -0.000629f, +0.000198f, -0.000112f, -0.000538f, -0.001373f, + +0.000763f, -0.000788f, +0.000328f, -0.000116f, -0.000402f, +0.000744f + }, + { + +0.002673f, +0.016180f, -0.000869f, +0.006897f, +0.003500f, +0.003882f, +0.007581f, -0.005702f, -0.005042f, -0.000160f, + -0.000642f, +0.017443f, +0.002238f, -0.002298f, -0.024010f, +0.003143f, +0.000882f, +0.003585f, +0.002688f, +0.023440f, + -0.013754f, +0.005478f, -0.001006f, -0.002976f, +0.002895f, +0.006144f, -0.000247f, +0.004870f, -0.007599f, +0.004605f, + -0.006049f, +0.002065f, -0.000304f, -0.000587f, -0.001701f, +0.000733f, -0.000390f, +0.002963f, +0.001382f, +0.007075f, + -0.002374f, +0.004928f, +0.005542f, -0.001066f, +0.004138f, -0.001353f, -0.001311f, +0.001651f, -0.002175f, -0.001279f, + -0.003454f, +0.001629f, +0.000478f, -0.000082f, -0.000032f, -0.003659f, -0.002333f, +0.000924f, -0.000813f, -0.002235f, + +0.000665f, -0.000952f, +0.000138f, -0.002616f, +0.000961f, +0.000016f, -0.001814f, -0.001068f, +0.000415f, -0.000001f, + +0.001889f, +0.000647f, +0.001249f, -0.000372f, -0.000360f, +0.000469f, -0.000487f, -0.000463f, -0.001752f, +0.000820f, + +0.000375f, -0.000234f, +0.000710f, -0.000376f, -0.000039f, -0.001008f, +0.000288f, +0.000070f, +0.000793f, +0.000004f, + +0.000594f, +0.000545f, +0.000522f, -0.000134f, -0.000051f, -0.000181f + }, + { + +0.093902f, +0.065675f, +0.001308f, -0.013505f, -0.011884f, +0.054746f, +0.009778f, -0.009262f, +0.005108f, -0.013781f, + +0.013334f, +0.000558f, -0.002315f, -0.004097f, -0.008359f, -0.006740f, +0.013720f, +0.005324f, -0.002291f, +0.008455f, + -0.001243f, +0.005654f, +0.000622f, +0.003148f, -0.000645f, -0.002680f, +0.002699f, -0.001949f, -0.003494f, -0.004007f, + -0.000032f, +0.000861f, +0.001178f, +0.003883f, +0.004992f, -0.002759f, -0.000582f, +0.008881f, -0.002512f, +0.004725f, + -0.005034f, -0.002569f, +0.002289f, +0.007802f, +0.001365f, -0.001545f, +0.002041f, +0.005973f, +0.001658f, -0.001036f, + +0.003630f, -0.000536f, +0.001720f, -0.005835f, -0.000112f, +0.003251f, -0.001471f, +0.001379f, +0.001821f, -0.001000f, + +0.001379f, +0.001202f, +0.001081f, -0.000767f, +0.000511f, -0.000384f, -0.000951f, -0.000582f, +0.000230f, -0.002404f, + +0.002399f, -0.001237f, +0.001070f, -0.000463f, +0.001396f, -0.001256f, -0.001558f, -0.000878f, -0.000412f, +0.000534f, + -0.000120f, +0.000482f, -0.000037f, +0.001102f, +0.000626f, +0.000301f, +0.000116f, -0.000586f, +0.000122f, -0.001061f, + +0.000502f, -0.000070f, +0.000284f, +0.000121f, -0.000004f, +0.000085f + }, + { + +0.003341f, -0.053369f, -0.002505f, +0.010849f, -0.002406f, -0.008834f, +0.001308f, +0.005737f, +0.000299f, +0.001122f, + -0.000717f, -0.001571f, -0.005548f, +0.016522f, -0.025905f, +0.005249f, +0.012255f, +0.003391f, +0.003171f, -0.005495f, + -0.002447f, +0.003621f, +0.008412f, -0.005660f, -0.016176f, -0.006868f, -0.006057f, -0.012494f, -0.010504f, -0.011030f, + +0.005915f, +0.010013f, -0.008142f, -0.010310f, +0.009806f, -0.007774f, +0.000223f, -0.005700f, +0.000564f, +0.002786f, + +0.004291f, -0.002903f, -0.012557f, -0.001422f, -0.002446f, -0.002717f, +0.002217f, -0.005029f, +0.000441f, -0.000332f, + -0.000491f, +0.001216f, -0.000280f, +0.000413f, +0.004301f, -0.001034f, -0.000516f, +0.002569f, -0.002156f, +0.001006f, + -0.000153f, -0.001870f, +0.001618f, -0.000362f, +0.000064f, -0.001450f, +0.002273f, +0.001822f, +0.004228f, +0.000065f, + +0.001214f, +0.000729f, +0.001758f, -0.002314f, +0.000538f, -0.001403f, +0.000779f, +0.000664f, +0.000369f, +0.000142f, + +0.001025f, -0.000542f, -0.001399f, -0.000592f, -0.000893f, -0.001114f, +0.000156f, -0.000161f, +0.000472f, +0.000066f, + -0.000985f, +0.000004f, +0.001030f, +0.000769f, +0.000124f, +0.000166f + }, + { + +0.032128f, -0.156395f, -0.006017f, -0.001335f, +0.000672f, +0.030482f, -0.013382f, +0.007049f, -0.008638f, -0.004255f, + -0.007495f, +0.008042f, -0.003254f, -0.001644f, -0.018961f, +0.005024f, -0.001836f, -0.001172f, +0.004484f, +0.001009f, + -0.010124f, -0.008746f, -0.000651f, -0.003812f, -0.006710f, +0.002766f, -0.000633f, +0.002321f, +0.005573f, +0.006307f, + -0.000635f, -0.005752f, -0.001053f, -0.001083f, -0.001002f, -0.001964f, -0.003521f, +0.005652f, -0.001845f, -0.001801f, + +0.002970f, +0.002129f, -0.005452f, +0.000809f, -0.000416f, -0.000838f, +0.003012f, +0.008792f, -0.000410f, +0.002311f, + +0.002272f, +0.001270f, +0.001180f, +0.001835f, +0.003005f, +0.001011f, -0.004854f, +0.003073f, -0.001756f, +0.001877f, + +0.002356f, -0.000481f, -0.000584f, -0.001202f, -0.000841f, +0.000762f, -0.000633f, -0.000415f, +0.000688f, -0.001805f, + +0.000845f, +0.001332f, -0.000197f, +0.000965f, +0.001898f, -0.001038f, +0.000942f, -0.000117f, +0.000012f, +0.001224f, + -0.000116f, +0.000442f, -0.000215f, -0.000486f, +0.000415f, -0.001157f, -0.000902f, +0.000366f, -0.000476f, +0.000491f, + +0.000501f, -0.000237f, -0.000027f, +0.000752f, +0.000837f, -0.000057f + }, + { + +0.005358f, -0.069323f, -0.007970f, +0.002211f, -0.000514f, -0.000022f, +0.006260f, +0.002076f, +0.003971f, +0.000611f, + +0.002262f, +0.008952f, +0.009022f, +0.015505f, +0.001028f, +0.003483f, -0.009834f, -0.007061f, +0.003137f, +0.000064f, + +0.006811f, +0.001314f, +0.009748f, -0.021387f, +0.009588f, +0.002409f, +0.014205f, -0.013284f, +0.011869f, +0.002754f, + +0.010308f, +0.009321f, -0.002022f, +0.001963f, +0.007517f, -0.000161f, -0.000616f, +0.003954f, -0.005396f, +0.002236f, + +0.003684f, +0.001801f, +0.002954f, -0.002953f, -0.005282f, +0.002816f, -0.001399f, -0.000978f, -0.001258f, -0.001459f, + -0.000488f, +0.005061f, -0.002808f, +0.002085f, +0.001886f, +0.001369f, -0.002519f, +0.001565f, +0.004198f, -0.000373f, + -0.000107f, -0.000478f, -0.002315f, -0.000896f, +0.000418f, -0.000450f, -0.001704f, +0.001939f, -0.000149f, -0.001301f, + +0.001422f, -0.000727f, +0.001142f, -0.000989f, -0.001958f, -0.001381f, -0.001372f, -0.000200f, -0.001260f, -0.000819f, + +0.001064f, -0.000566f, -0.000640f, +0.000130f, +0.001055f, -0.000001f, +0.000452f, +0.000526f, -0.000770f, -0.000216f, + +0.000142f, -0.000084f, -0.001012f, -0.000437f, -0.000027f, -0.000146f + } + }, + { + { + +0.004532f, -0.024388f, -0.034052f, -0.025947f, +0.012969f, -0.003678f, +0.002419f, +0.003564f, +0.003506f, -0.000776f, + +0.002931f, -0.009335f, -0.002382f, +0.005692f, -0.000285f, +0.006613f, -0.005152f, +0.000511f, -0.003536f, -0.011528f, + +0.002928f, -0.001939f, +0.005146f, +0.001796f, +0.007851f, -0.000462f, -0.006621f, +0.001577f, +0.003772f, -0.000206f, + +0.004582f, +0.003631f, -0.003100f, -0.001222f, +0.003827f, +0.001729f, +0.008268f, +0.004012f, +0.000918f, +0.002132f, + -0.003807f, -0.000653f, -0.004462f, -0.004840f, +0.000492f, -0.000374f, -0.004708f, +0.001537f, -0.000678f, -0.001906f, + +0.000733f, -0.000548f, +0.001066f, +0.001670f, -0.001337f, -0.000588f, +0.001986f, +0.000934f, +0.004628f, +0.001366f, + +0.000403f, +0.002072f, +0.000655f, -0.000394f, +0.000065f, -0.001009f, +0.001052f, +0.001869f, -0.000431f, +0.002427f, + +0.000709f, -0.000347f, +0.001301f, -0.001429f, -0.001393f, -0.000658f, +0.000221f, -0.000553f, +0.000146f, +0.000065f, + -0.000699f, -0.000210f, +0.001133f, -0.000029f, +0.000464f, +0.000325f, -0.000589f, +0.000175f, +0.000510f, +0.000248f, + +0.000596f, -0.000139f, -0.000365f, +0.000050f, -0.000504f, +0.000321f + }, + { + +0.000187f, +0.019495f, -0.011470f, +0.023340f, -0.018435f, +0.001857f, +0.003971f, -0.002540f, +0.005086f, -0.004176f, + +0.004582f, -0.004698f, -0.005169f, +0.005548f, -0.007129f, +0.017327f, +0.010324f, -0.004170f, +0.001268f, +0.009082f, + +0.002396f, +0.008488f, -0.005593f, -0.011616f, -0.009035f, +0.008787f, +0.003193f, -0.001527f, -0.003147f, +0.004405f, + +0.002396f, -0.008597f, +0.005289f, -0.011204f, +0.001397f, +0.008905f, -0.000038f, -0.000903f, +0.002051f, +0.000359f, + +0.001157f, -0.004763f, -0.001727f, +0.002920f, -0.004286f, -0.004390f, -0.000077f, -0.000222f, -0.004293f, -0.002790f, + +0.000061f, -0.000857f, +0.000246f, -0.000496f, -0.002333f, -0.000196f, +0.001416f, -0.000776f, +0.000695f, -0.002311f, + +0.001193f, -0.001172f, -0.000717f, +0.003187f, +0.000916f, -0.000176f, +0.000067f, +0.000296f, -0.000550f, -0.000064f, + -0.000868f, +0.000591f, +0.001126f, +0.000240f, -0.000333f, +0.001289f, -0.000171f, +0.000041f, +0.000329f, +0.000493f, + -0.001268f, +0.001394f, +0.000172f, +0.000654f, +0.000168f, -0.000073f, -0.000194f, -0.001000f, -0.000277f, -0.000233f, + +0.000641f, +0.000132f, +0.000230f, -0.000636f, -0.000412f, -0.000029f + }, + { + +0.002222f, +0.025827f, +0.012668f, +0.061723f, -0.020337f, +0.001981f, -0.000258f, -0.001368f, -0.000412f, +0.002478f, + +0.002593f, +0.004350f, +0.000498f, +0.007439f, -0.001849f, -0.014517f, -0.001622f, -0.003900f, +0.004391f, -0.005886f, + +0.004258f, -0.017117f, +0.010644f, +0.005900f, +0.006418f, +0.010167f, -0.003325f, -0.001559f, +0.002897f, +0.009135f, + +0.000780f, +0.005763f, -0.003377f, -0.011016f, -0.002106f, +0.003794f, -0.000739f, +0.000229f, -0.001564f, -0.000298f, + +0.000509f, +0.004207f, +0.000882f, -0.002458f, -0.000647f, -0.004141f, +0.002144f, +0.000786f, -0.000512f, -0.000137f, + -0.002827f, +0.001040f, -0.000669f, +0.000373f, -0.000674f, +0.002646f, -0.002328f, +0.001842f, +0.001912f, +0.002166f, + -0.001941f, -0.001363f, -0.002964f, +0.001989f, -0.001543f, +0.000199f, +0.000489f, +0.001189f, -0.000301f, -0.002973f, + -0.000651f, +0.000068f, -0.000250f, +0.000539f, -0.000026f, -0.000374f, +0.000651f, -0.000246f, -0.000533f, +0.000190f, + -0.000217f, -0.000526f, +0.000021f, +0.000622f, +0.000081f, -0.000051f, -0.000242f, -0.000396f, +0.000500f, +0.000136f, + -0.000280f, +0.000935f, -0.000278f, -0.000467f, +0.000012f, -0.000855f + }, + { + +0.024619f, -0.058431f, -0.003858f, -0.007664f, -0.008863f, -0.000240f, -0.001740f, +0.000721f, +0.002766f, +0.001686f, + +0.012835f, -0.006807f, +0.003842f, +0.002168f, +0.013678f, +0.001551f, -0.003339f, -0.006345f, -0.002060f, -0.000966f, + +0.003122f, -0.005077f, +0.008100f, +0.001104f, -0.004936f, +0.003815f, -0.004791f, -0.003450f, -0.002462f, -0.001452f, + +0.000607f, -0.000631f, -0.000522f, -0.000023f, +0.004062f, +0.002603f, +0.002864f, -0.000628f, -0.003158f, +0.000236f, + +0.002224f, -0.000634f, +0.001807f, -0.006057f, +0.002537f, +0.006518f, -0.002934f, -0.003379f, +0.000190f, -0.003597f, + -0.000555f, +0.001316f, +0.001163f, -0.003025f, -0.002539f, +0.001222f, +0.000317f, -0.001770f, +0.000285f, +0.000190f, + +0.000088f, +0.000886f, -0.000648f, +0.002245f, +0.000309f, -0.000935f, +0.000792f, +0.000243f, +0.000685f, +0.002036f, + +0.001884f, -0.000023f, -0.000519f, -0.000705f, -0.000660f, -0.000869f, -0.000715f, +0.000206f, -0.000202f, -0.000325f, + -0.000305f, -0.000138f, +0.000430f, -0.000328f, -0.000300f, +0.000747f, -0.000184f, +0.000035f, -0.000322f, +0.000260f, + -0.000504f, +0.000484f, -0.000173f, -0.000739f, -0.000183f, +0.000004f + }, + { + -0.003012f, -0.037874f, +0.013204f, +0.004246f, -0.000871f, +0.000009f, +0.000215f, -0.002260f, +0.001564f, +0.002004f, + -0.001514f, +0.010176f, -0.007255f, -0.001129f, +0.004918f, +0.009185f, +0.015281f, +0.008751f, -0.014205f, -0.008334f, + +0.001460f, +0.008650f, +0.018403f, +0.006750f, -0.002951f, +0.017835f, +0.003979f, -0.004264f, +0.007300f, -0.008418f, + -0.000139f, +0.004093f, -0.002318f, +0.001530f, +0.010714f, +0.000847f, -0.002133f, -0.004340f, +0.000677f, +0.007034f, + +0.001341f, +0.003880f, +0.002411f, +0.000827f, +0.001778f, -0.002189f, +0.001703f, +0.001345f, +0.000505f, +0.001113f, + +0.002981f, -0.000462f, -0.000503f, -0.001485f, +0.000579f, +0.000553f, +0.001705f, -0.001618f, -0.002497f, -0.001179f, + +0.001867f, -0.002355f, +0.000181f, +0.000668f, -0.000836f, -0.001831f, -0.001025f, -0.000477f, -0.001272f, -0.000068f, + -0.000091f, -0.001371f, +0.000824f, +0.000351f, +0.000698f, +0.000198f, -0.000104f, -0.000739f, -0.000073f, -0.000420f, + +0.000919f, +0.000367f, +0.001753f, +0.000387f, +0.000319f, -0.000604f, -0.000916f, -0.000231f, +0.000353f, -0.000277f, + +0.000785f, +0.000962f, +0.000409f, +0.000015f, +0.000129f, -0.000473f + }, + { + +0.039289f, -0.124408f, -0.005885f, +0.076218f, +0.003203f, -0.002752f, +0.008655f, -0.000206f, +0.010722f, +0.008622f, + -0.004959f, -0.001218f, +0.001206f, -0.000017f, -0.006845f, -0.003874f, +0.001379f, -0.005596f, +0.004367f, -0.008536f, + -0.005610f, -0.002430f, +0.003856f, -0.001593f, -0.001648f, -0.003079f, +0.005016f, +0.002550f, +0.004254f, -0.003040f, + -0.002115f, -0.000404f, -0.006735f, +0.000516f, -0.004498f, -0.003105f, -0.004550f, +0.001177f, -0.003687f, -0.001559f, + +0.000975f, +0.000277f, -0.000395f, +0.007220f, +0.001280f, +0.000682f, -0.001355f, -0.002985f, -0.003144f, +0.001403f, + -0.000116f, +0.005977f, -0.003202f, +0.004465f, -0.001315f, -0.000945f, -0.002782f, -0.001009f, +0.000010f, +0.000652f, + +0.002630f, +0.001546f, -0.001489f, -0.001161f, -0.000160f, +0.001146f, -0.000354f, +0.000912f, +0.000730f, +0.002521f, + +0.000019f, -0.001399f, +0.000477f, +0.000490f, -0.000184f, +0.000185f, -0.000433f, -0.000799f, +0.000073f, -0.000371f, + +0.001053f, -0.000128f, +0.000678f, -0.000122f, -0.000870f, -0.000260f, -0.000276f, -0.000007f, +0.000690f, -0.000585f, + -0.001112f, -0.000023f, -0.000172f, +0.000431f, +0.000040f, -0.000585f + }, + { + +0.000220f, -0.009689f, -0.019100f, -0.000425f, +0.002152f, -0.000485f, -0.000207f, +0.002287f, -0.002570f, -0.003753f, + +0.004998f, -0.004263f, -0.010376f, +0.010728f, -0.002201f, +0.013085f, -0.018670f, +0.014974f, +0.009734f, -0.027433f, + +0.002185f, -0.012060f, +0.011562f, +0.023090f, +0.017063f, -0.010763f, -0.017709f, +0.008834f, +0.007932f, +0.005548f, + +0.017093f, -0.002763f, +0.011719f, +0.007083f, +0.006036f, -0.008416f, +0.002160f, +0.003194f, -0.001263f, -0.008253f, + -0.004229f, +0.000337f, +0.000100f, +0.000313f, +0.000874f, +0.000119f, -0.000530f, +0.001139f, +0.002453f, -0.001711f, + -0.000964f, -0.001956f, +0.001536f, -0.000423f, +0.000599f, -0.000207f, -0.005217f, +0.000447f, -0.000319f, -0.000806f, + -0.000384f, -0.000332f, -0.002372f, -0.001141f, -0.001770f, -0.000566f, -0.000816f, +0.000789f, -0.001901f, +0.000771f, + +0.000778f, -0.000341f, +0.000528f, +0.001288f, -0.000163f, +0.000260f, -0.000213f, -0.000681f, -0.000251f, -0.001236f, + +0.001073f, -0.000377f, -0.000133f, -0.000719f, +0.000342f, -0.000241f, -0.000268f, +0.000536f, +0.000552f, +0.000502f, + +0.000044f, +0.000256f, +0.000098f, +0.000496f, +0.000031f, -0.000149f + }, + { + -0.010046f, +0.245658f, +0.015848f, -0.065593f, +0.012863f, +0.003768f, +0.007119f, -0.006490f, -0.003440f, -0.004759f, + -0.000593f, +0.009227f, -0.001087f, -0.001073f, -0.004427f, +0.006491f, +0.003118f, +0.005318f, +0.011004f, -0.003394f, + -0.001698f, -0.006673f, +0.000020f, -0.002885f, +0.001044f, +0.002901f, +0.004333f, +0.009137f, +0.004962f, -0.005832f, + +0.000211f, +0.001529f, +0.007188f, -0.004679f, +0.003596f, +0.002570f, -0.000126f, -0.000945f, -0.004402f, -0.005342f, + +0.000216f, -0.002659f, -0.002809f, -0.001483f, -0.000485f, +0.000470f, +0.001634f, +0.003047f, +0.002319f, -0.000391f, + +0.001423f, +0.001311f, +0.006344f, -0.000850f, +0.001036f, +0.001277f, +0.001614f, -0.000340f, -0.000385f, -0.003709f, + +0.002958f, -0.000712f, -0.001356f, -0.001524f, -0.000563f, -0.000847f, -0.000576f, +0.000123f, -0.001228f, -0.000908f, + +0.000660f, +0.000042f, -0.000001f, +0.000624f, -0.000010f, +0.001691f, +0.000483f, +0.000490f, +0.000768f, +0.000382f, + -0.000492f, +0.000388f, +0.000032f, -0.000864f, +0.000760f, +0.000351f, -0.000344f, -0.000203f, +0.000619f, -0.000155f, + -0.000854f, -0.000647f, +0.000540f, -0.000674f, -0.000724f, +0.000836f + }, + { + +0.000003f, -0.005310f, -0.009469f, -0.001228f, +0.000185f, -0.000721f, +0.001029f, +0.002385f, -0.000714f, -0.001650f, + +0.000724f, -0.001552f, +0.002887f, +0.002124f, +0.011266f, -0.005131f, -0.002224f, +0.018440f, +0.009977f, +0.003225f, + +0.006560f, -0.005380f, +0.004281f, -0.001252f, -0.006675f, +0.007197f, +0.019581f, -0.003185f, -0.001186f, +0.003377f, + -0.002625f, +0.003656f, -0.000970f, +0.000459f, -0.007065f, -0.004836f, -0.008100f, +0.000023f, +0.000572f, -0.002270f, + -0.004552f, +0.000473f, +0.001379f, -0.004975f, -0.001510f, -0.001218f, +0.003698f, +0.005160f, +0.000306f, -0.000935f, + -0.001598f, +0.002917f, -0.001666f, +0.001616f, +0.000719f, -0.000219f, +0.001659f, +0.001345f, -0.003049f, -0.000760f, + -0.000102f, +0.000250f, +0.001927f, +0.001341f, +0.000432f, +0.000226f, +0.001460f, +0.000494f, +0.000843f, -0.000176f, + +0.001478f, -0.000033f, -0.001212f, +0.000997f, +0.001136f, -0.000468f, +0.000172f, +0.000159f, -0.000446f, +0.000636f, + -0.000685f, +0.001683f, -0.000620f, +0.000046f, -0.000390f, +0.000053f, -0.000204f, -0.000798f, +0.000316f, -0.000708f, + -0.000472f, -0.000292f, +0.000225f, -0.000361f, -0.000048f, -0.000228f + }, + { + -0.021440f, -0.187661f, -0.003975f, +0.005253f, +0.007036f, -0.009081f, +0.009510f, +0.002919f, -0.006896f, -0.000792f, + +0.005804f, -0.003168f, +0.004736f, +0.007620f, +0.004249f, +0.007741f, +0.001038f, -0.005755f, -0.003390f, +0.003052f, + -0.008442f, -0.001851f, -0.005407f, +0.003438f, +0.002907f, +0.001638f, +0.002681f, -0.002322f, +0.002675f, +0.001777f, + +0.005416f, -0.005694f, -0.005754f, -0.000966f, +0.002207f, -0.001104f, +0.000929f, +0.004681f, +0.004139f, +0.000224f, + -0.004264f, -0.001996f, -0.000893f, -0.003292f, +0.002459f, +0.000671f, -0.004660f, -0.000499f, -0.001075f, -0.004264f, + -0.004057f, +0.000271f, -0.002477f, +0.001105f, -0.001214f, -0.000558f, -0.001287f, -0.003612f, +0.002463f, -0.000015f, + -0.002827f, -0.000112f, -0.001536f, -0.000733f, +0.001608f, -0.000143f, -0.000204f, -0.001518f, +0.000299f, +0.002102f, + -0.000983f, +0.000498f, -0.000988f, +0.001094f, -0.000364f, -0.000500f, +0.000151f, -0.000301f, +0.000629f, +0.000205f, + +0.000917f, +0.000829f, -0.001257f, -0.001055f, -0.000493f, -0.000403f, -0.000841f, +0.000176f, -0.000889f, -0.000311f, + -0.000100f, +0.000261f, -0.000577f, -0.000062f, +0.000277f, +0.000321f + }, + { + -0.003127f, +0.016299f, +0.001266f, +0.020219f, -0.001658f, +0.001006f, +0.008952f, -0.004361f, -0.002967f, -0.003562f, + +0.000006f, +0.013999f, +0.003365f, -0.001932f, -0.015596f, -0.004755f, +0.011581f, -0.002636f, +0.012098f, +0.005894f, + +0.016015f, -0.006008f, -0.000148f, -0.004494f, -0.005984f, +0.013398f, -0.002740f, +0.003557f, -0.003721f, +0.004769f, + +0.000209f, -0.003843f, -0.008000f, +0.002730f, +0.002401f, -0.000579f, +0.001266f, +0.002287f, +0.002701f, +0.004213f, + +0.001356f, +0.006972f, -0.002031f, +0.004122f, -0.001959f, +0.002877f, -0.000439f, -0.001654f, +0.000080f, -0.005038f, + +0.001158f, +0.001222f, +0.001886f, -0.002332f, +0.001342f, -0.001206f, -0.002379f, -0.000430f, +0.000455f, -0.001703f, + -0.001289f, -0.001494f, -0.000259f, -0.001311f, -0.000039f, -0.001276f, -0.000627f, -0.000542f, -0.000972f, +0.000066f, + +0.001788f, +0.001927f, +0.001171f, -0.000209f, -0.000870f, +0.001014f, -0.000854f, -0.000526f, -0.000982f, +0.000053f, + +0.000119f, -0.000222f, +0.000633f, +0.000057f, +0.000279f, -0.001173f, -0.000251f, +0.000968f, +0.000502f, +0.001028f, + +0.000143f, +0.000520f, +0.000243f, +0.000238f, -0.000711f, -0.000144f + }, + { + -0.054846f, +0.261844f, +0.010285f, -0.005467f, -0.023799f, +0.042705f, +0.032403f, -0.006098f, +0.003855f, -0.007207f, + +0.002346f, +0.003350f, +0.003652f, +0.002562f, -0.010125f, +0.000305f, -0.003081f, +0.005609f, +0.001004f, +0.000329f, + +0.016856f, -0.002799f, +0.002297f, -0.002685f, -0.004049f, -0.005610f, +0.010176f, -0.003495f, -0.002537f, -0.005735f, + +0.000234f, +0.000923f, +0.000159f, +0.007096f, +0.000729f, +0.006854f, -0.003741f, +0.004862f, +0.006286f, -0.001961f, + -0.002768f, +0.001620f, +0.000512f, +0.004532f, +0.001301f, +0.003007f, -0.001712f, +0.005235f, +0.002010f, +0.002168f, + -0.001107f, +0.000770f, +0.000065f, -0.004932f, +0.000702f, +0.000920f, -0.001636f, +0.000912f, +0.001987f, +0.002502f, + -0.002443f, +0.002656f, +0.000734f, -0.001795f, -0.000024f, -0.000155f, -0.000707f, +0.000306f, -0.000369f, -0.001003f, + +0.000790f, -0.000561f, +0.000778f, +0.000337f, -0.000074f, -0.000401f, -0.001199f, -0.000383f, -0.000165f, +0.000131f, + +0.000518f, -0.000846f, +0.000725f, +0.000016f, +0.000579f, +0.000012f, -0.000300f, -0.000187f, -0.000342f, -0.000713f, + +0.000434f, -0.000306f, +0.000160f, +0.000291f, +0.000056f, +0.000120f + }, + { + -0.001218f, -0.061391f, +0.013208f, +0.007741f, -0.000758f, -0.006311f, -0.003028f, +0.002970f, +0.005752f, -0.001516f, + +0.006256f, -0.004353f, -0.002468f, -0.009740f, -0.012181f, +0.000539f, +0.007690f, +0.005542f, +0.002289f, -0.004760f, + +0.024822f, +0.002316f, -0.008916f, -0.008895f, -0.026823f, +0.017551f, -0.014829f, -0.012417f, -0.009577f, -0.004894f, + -0.002109f, +0.006063f, -0.004302f, -0.005549f, +0.000205f, +0.004847f, -0.007415f, -0.001906f, +0.003362f, +0.001086f, + -0.002882f, -0.005069f, -0.004736f, -0.004069f, -0.000147f, -0.001028f, -0.003847f, +0.000259f, -0.001409f, -0.001991f, + +0.000095f, +0.002009f, -0.000901f, +0.002818f, +0.000524f, -0.000847f, -0.000685f, -0.000476f, -0.001368f, +0.004671f, + -0.002855f, +0.000211f, -0.001946f, +0.001258f, +0.000314f, -0.000128f, +0.000091f, +0.004565f, +0.000732f, +0.001793f, + +0.000448f, +0.001219f, +0.000233f, -0.000655f, -0.000924f, -0.001187f, +0.000708f, -0.000268f, +0.000686f, +0.000481f, + -0.000193f, +0.000991f, -0.000396f, -0.000577f, -0.000712f, -0.001694f, -0.000167f, +0.000797f, +0.000038f, -0.000176f, + -0.000555f, +0.000491f, +0.000055f, +0.000533f, +0.000894f, -0.000440f + }, + { + -0.049074f, -0.047338f, -0.000247f, -0.003890f, -0.007763f, +0.016108f, +0.001659f, +0.002867f, -0.008073f, -0.004452f, + -0.005465f, -0.001020f, +0.006763f, +0.007007f, -0.029564f, +0.004271f, +0.003139f, -0.000373f, -0.003756f, -0.005714f, + -0.001628f, -0.005605f, -0.003806f, -0.006891f, -0.001295f, -0.005962f, +0.007455f, -0.004969f, +0.004540f, +0.006837f, + +0.005111f, -0.007012f, +0.000796f, -0.002387f, +0.001274f, -0.008341f, -0.000339f, +0.004690f, -0.001340f, +0.000303f, + +0.001337f, +0.001739f, -0.005018f, -0.000957f, -0.003362f, +0.004487f, +0.004242f, +0.002724f, +0.004823f, -0.000842f, + +0.002889f, -0.000025f, +0.001990f, +0.001944f, +0.001169f, +0.003237f, -0.002904f, +0.000561f, -0.000439f, +0.002647f, + +0.000326f, -0.000044f, +0.000373f, -0.001766f, +0.000481f, +0.001394f, +0.000227f, -0.001250f, +0.001022f, -0.001548f, + +0.001774f, -0.000195f, +0.000559f, +0.000868f, +0.001704f, +0.000476f, -0.000126f, -0.000049f, +0.000710f, +0.001039f, + +0.000016f, +0.000314f, -0.000373f, -0.000475f, +0.000640f, -0.000144f, -0.000221f, -0.001060f, +0.000206f, +0.000644f, + +0.000380f, +0.000261f, -0.000174f, +0.000822f, +0.000337f, +0.000227f + }, + { + -0.002996f, -0.063796f, +0.002684f, -0.003696f, -0.001543f, -0.000072f, +0.001169f, +0.005259f, -0.002247f, +0.007628f, + +0.002119f, +0.006310f, +0.009528f, -0.006885f, +0.037661f, -0.009698f, -0.002049f, -0.007829f, -0.002594f, -0.003695f, + +0.005857f, +0.000829f, +0.006073f, -0.010680f, -0.007677f, +0.007739f, +0.005677f, -0.007629f, +0.009370f, +0.011932f, + +0.007086f, +0.004156f, +0.005622f, -0.002691f, +0.007488f, +0.002019f, +0.001401f, -0.003344f, -0.001126f, -0.000647f, + +0.008371f, -0.006043f, -0.001695f, -0.000721f, +0.001381f, -0.001203f, -0.000300f, -0.002077f, -0.002346f, +0.001379f, + +0.001376f, -0.000268f, -0.001371f, +0.001718f, +0.003182f, +0.001845f, -0.002664f, +0.000033f, +0.001517f, -0.000572f, + +0.000692f, -0.001235f, -0.001403f, -0.001178f, -0.000860f, +0.000418f, -0.000275f, +0.001264f, -0.001400f, +0.000019f, + -0.000596f, +0.001047f, -0.001049f, -0.001722f, -0.002133f, -0.000825f, -0.000337f, -0.000868f, -0.001234f, -0.000887f, + +0.000872f, -0.000309f, +0.000176f, +0.001150f, +0.000183f, +0.000123f, +0.000032f, +0.000499f, +0.000048f, -0.000076f, + -0.000106f, -0.000275f, -0.000586f, -0.000593f, +0.000198f, -0.000447f + } + }, + { + { + -0.009573f, +0.028138f, +0.051364f, -0.046470f, -0.000473f, +0.000654f, -0.000862f, +0.001582f, +0.013750f, -0.000407f, + -0.009431f, -0.010719f, +0.000294f, -0.005653f, -0.009834f, +0.003757f, -0.004463f, +0.000358f, -0.000313f, -0.012984f, + +0.005238f, +0.001221f, +0.006144f, -0.002993f, +0.003566f, +0.002176f, -0.003935f, +0.003621f, +0.007648f, +0.000570f, + -0.001606f, +0.003687f, -0.001250f, -0.001617f, +0.005090f, -0.001822f, +0.002507f, +0.000651f, -0.003067f, +0.001444f, + -0.000288f, +0.001601f, -0.001711f, -0.000720f, +0.001032f, -0.001836f, -0.001329f, +0.003805f, +0.000228f, +0.001465f, + +0.000942f, -0.003347f, -0.001523f, +0.000398f, -0.003059f, -0.002672f, -0.000602f, -0.000554f, +0.003078f, +0.000135f, + -0.000472f, -0.000236f, -0.000136f, +0.000827f, -0.000018f, -0.001026f, -0.000654f, +0.000497f, -0.001591f, +0.001389f, + +0.000305f, -0.000410f, +0.001922f, -0.000540f, -0.000519f, +0.000275f, +0.001038f, -0.000737f, +0.000104f, -0.000211f, + -0.000117f, -0.000308f, +0.000728f, +0.000155f, +0.000129f, +0.000274f, -0.000147f, +0.000377f, +0.000021f, -0.000137f, + +0.000343f, +0.000345f, -0.000298f, -0.000029f, -0.000560f, +0.000049f + }, + { + +0.001919f, +0.030601f, +0.000142f, +0.032251f, -0.017484f, -0.001358f, +0.001246f, -0.002405f, +0.006843f, -0.002874f, + +0.003367f, -0.004479f, -0.006901f, +0.001394f, -0.013899f, +0.007489f, -0.003637f, -0.009211f, -0.007560f, +0.011231f, + -0.001909f, +0.002579f, -0.000672f, -0.001070f, -0.009313f, +0.006225f, +0.001231f, -0.000914f, -0.000589f, +0.003070f, + +0.001493f, -0.004799f, +0.011842f, -0.010142f, -0.003406f, +0.005111f, -0.000815f, -0.001772f, +0.004383f, +0.001658f, + +0.001776f, -0.000281f, +0.000704f, +0.004875f, -0.004778f, -0.005998f, +0.000820f, -0.001219f, -0.002908f, -0.000724f, + +0.002286f, +0.002212f, +0.002503f, -0.000532f, -0.001692f, +0.000028f, +0.000887f, -0.000004f, +0.000664f, -0.001002f, + +0.000358f, -0.001445f, +0.000572f, +0.002104f, +0.000153f, +0.000307f, +0.000322f, -0.000503f, -0.000716f, -0.000022f, + -0.001836f, -0.001097f, +0.000667f, +0.000187f, -0.000861f, -0.000059f, -0.001190f, -0.000168f, +0.000280f, +0.000555f, + -0.001726f, +0.000909f, -0.000082f, +0.000224f, +0.000116f, +0.000130f, +0.000093f, -0.001145f, -0.000001f, -0.000538f, + +0.000529f, -0.000010f, +0.000057f, +0.000090f, -0.000074f, +0.000251f + }, + { + -0.001016f, +0.024859f, +0.003012f, +0.040370f, -0.021431f, +0.008603f, +0.005065f, +0.002775f, -0.003053f, -0.002578f, + +0.001498f, +0.005082f, +0.002727f, +0.000946f, -0.002464f, +0.000587f, +0.008113f, +0.004196f, -0.004540f, -0.012774f, + +0.011390f, -0.005528f, +0.003596f, -0.003021f, -0.002336f, +0.005191f, -0.005472f, -0.002333f, -0.000101f, +0.007335f, + -0.005830f, -0.001367f, +0.000993f, -0.003726f, +0.000842f, +0.002579f, -0.000862f, -0.002002f, -0.001913f, +0.002156f, + +0.003561f, +0.007085f, +0.001549f, -0.001457f, +0.003580f, +0.001224f, +0.003639f, +0.001377f, +0.000659f, -0.000847f, + -0.001369f, +0.001384f, -0.001242f, +0.002463f, -0.000071f, +0.000027f, -0.003432f, +0.000969f, -0.000031f, +0.002718f, + -0.000448f, +0.000492f, -0.000785f, +0.003313f, -0.001249f, -0.001157f, -0.000603f, +0.000462f, -0.000602f, -0.001861f, + +0.001069f, +0.001333f, +0.000325f, +0.000897f, -0.000057f, -0.000342f, +0.000677f, +0.000481f, -0.000018f, +0.000569f, + -0.000645f, -0.000346f, -0.000389f, -0.000222f, +0.000031f, +0.000147f, -0.000468f, -0.000181f, +0.000581f, -0.000317f, + -0.000218f, +0.000986f, -0.000082f, -0.000180f, +0.000186f, -0.000775f + }, + { + +0.008734f, -0.045785f, +0.008836f, +0.004006f, +0.017489f, -0.000662f, -0.002292f, +0.004882f, +0.004536f, +0.000817f, + +0.005437f, -0.014735f, +0.013181f, +0.008251f, +0.010148f, -0.002869f, -0.006767f, -0.009407f, +0.000991f, +0.002349f, + +0.003112f, -0.006030f, +0.003623f, +0.002116f, -0.004338f, -0.000713f, -0.000128f, -0.001531f, -0.002056f, -0.000171f, + +0.005246f, +0.003393f, +0.001694f, -0.002345f, +0.004034f, +0.004711f, +0.005267f, +0.000149f, +0.000798f, -0.000226f, + +0.000637f, -0.000034f, -0.002356f, -0.005769f, +0.003812f, +0.002737f, -0.004610f, -0.002490f, +0.004238f, -0.000862f, + -0.000595f, +0.000357f, +0.001022f, -0.001725f, +0.000256f, +0.001995f, -0.000497f, -0.002165f, -0.000332f, +0.000104f, + -0.001515f, -0.000727f, -0.001526f, +0.003190f, +0.000272f, -0.000340f, +0.000576f, +0.000729f, +0.000872f, +0.001421f, + +0.000243f, -0.000378f, +0.001073f, +0.000677f, -0.000492f, -0.000364f, -0.000273f, -0.000604f, +0.000109f, +0.000875f, + +0.000193f, -0.000162f, +0.000078f, -0.000347f, -0.000368f, +0.000241f, -0.000430f, -0.000304f, -0.000440f, +0.000731f, + -0.000656f, -0.000233f, -0.000424f, -0.000315f, -0.000285f, -0.000336f + }, + { + +0.001257f, -0.051896f, +0.000252f, +0.003433f, -0.002364f, +0.000524f, -0.002126f, -0.005228f, +0.001205f, -0.000344f, + -0.002301f, +0.007207f, -0.015070f, -0.001446f, +0.007645f, -0.003301f, -0.011744f, +0.019360f, -0.012049f, -0.014045f, + -0.006932f, -0.005385f, -0.000330f, +0.001841f, -0.001890f, +0.018520f, -0.001808f, -0.007999f, -0.002060f, -0.006315f, + -0.004521f, -0.005804f, -0.006016f, +0.000659f, +0.002733f, -0.010308f, -0.008308f, -0.000799f, -0.001772f, +0.001757f, + -0.000683f, +0.001678f, +0.000170f, -0.001766f, -0.002018f, -0.003492f, -0.001255f, -0.000772f, +0.000254f, +0.000483f, + +0.002651f, -0.001075f, -0.000102f, -0.002602f, -0.000562f, -0.000156f, +0.001605f, -0.000002f, -0.001961f, -0.000309f, + +0.001280f, -0.002871f, +0.000228f, -0.000170f, +0.001168f, -0.001040f, -0.001191f, -0.000823f, -0.001938f, +0.000375f, + +0.000530f, +0.000510f, +0.001038f, +0.000412f, +0.000361f, +0.000095f, -0.000767f, -0.000399f, +0.000147f, -0.000474f, + +0.000583f, -0.000696f, +0.000586f, +0.000112f, +0.000358f, +0.000041f, -0.000733f, -0.000050f, +0.000177f, -0.000401f, + +0.001036f, +0.000746f, +0.000230f, +0.000314f, +0.000327f, +0.000363f + }, + { + +0.004928f, -0.161832f, +0.012771f, +0.072672f, -0.011893f, -0.005378f, -0.000189f, -0.016882f, +0.001418f, +0.008276f, + -0.004747f, -0.003194f, +0.000634f, -0.006601f, -0.009260f, +0.001385f, +0.007707f, -0.001985f, +0.003083f, -0.003182f, + +0.004108f, +0.005462f, +0.004200f, -0.005070f, -0.004490f, -0.003042f, +0.005045f, -0.002232f, +0.000968f, +0.002503f, + +0.004153f, +0.001982f, -0.006522f, +0.002433f, +0.000762f, +0.000461f, -0.004069f, -0.001753f, +0.000554f, +0.002713f, + -0.003728f, -0.002238f, -0.000805f, +0.003801f, -0.000285f, +0.001167f, +0.002303f, +0.001619f, +0.001350f, +0.003871f, + -0.005928f, +0.000816f, -0.003675f, +0.004354f, -0.003610f, +0.001297f, -0.001837f, -0.000411f, +0.000666f, +0.000413f, + +0.000513f, +0.000261f, -0.000498f, -0.000091f, +0.000826f, +0.001811f, -0.000414f, +0.000123f, +0.000025f, +0.001059f, + -0.000256f, -0.000565f, -0.000780f, +0.000875f, -0.000108f, +0.000541f, -0.000045f, -0.000547f, +0.000607f, -0.000513f, + +0.000190f, -0.000737f, +0.000440f, +0.000558f, -0.000188f, +0.000207f, -0.000213f, +0.000094f, +0.000432f, +0.000149f, + -0.000480f, +0.000085f, -0.000104f, +0.000266f, +0.000298f, -0.000054f + }, + { + +0.000310f, +0.013849f, -0.002207f, -0.001768f, -0.000169f, +0.000081f, -0.000324f, +0.000644f, -0.004359f, -0.003742f, + +0.003998f, -0.003316f, -0.005953f, +0.006460f, -0.001141f, +0.022848f, -0.020011f, +0.003581f, -0.001817f, -0.025509f, + +0.014513f, +0.001588f, +0.027027f, +0.009754f, -0.012046f, -0.022966f, -0.009184f, +0.008424f, -0.000963f, -0.002606f, + +0.009857f, -0.008111f, +0.003979f, -0.001261f, +0.006138f, -0.001678f, +0.000262f, -0.002906f, -0.003390f, -0.003076f, + -0.000954f, -0.002824f, -0.002239f, +0.001858f, +0.002292f, +0.002523f, +0.000540f, -0.001839f, -0.000769f, -0.001680f, + +0.001877f, -0.000974f, +0.001166f, -0.000442f, -0.000058f, +0.002618f, -0.001220f, +0.001933f, +0.001365f, +0.000711f, + +0.000183f, -0.000263f, -0.000063f, +0.001666f, -0.001902f, -0.001649f, +0.000254f, +0.003750f, -0.001517f, -0.001179f, + -0.000905f, -0.000604f, +0.000777f, +0.000012f, -0.000184f, +0.000644f, +0.000274f, +0.000006f, +0.000087f, -0.000992f, + +0.000719f, -0.000864f, -0.000035f, -0.000389f, +0.000586f, +0.000114f, -0.000038f, +0.000545f, +0.000153f, -0.000242f, + +0.000336f, +0.000403f, +0.000023f, +0.000210f, -0.000400f, -0.000147f + }, + { + -0.024867f, +0.183848f, +0.000171f, -0.076135f, -0.007211f, -0.003480f, +0.000953f, -0.005109f, -0.000948f, -0.003842f, + -0.006056f, +0.009641f, +0.007566f, -0.006801f, -0.003274f, +0.002643f, -0.001605f, -0.004400f, +0.007852f, +0.001588f, + +0.001157f, -0.003222f, -0.001146f, -0.006017f, -0.005547f, -0.000112f, +0.001167f, +0.003442f, +0.003413f, -0.004382f, + -0.004539f, -0.003672f, +0.005261f, -0.004727f, +0.005165f, -0.002091f, -0.002644f, -0.001325f, -0.005373f, -0.004618f, + -0.000876f, +0.000396f, -0.001658f, -0.003202f, +0.000156f, -0.001198f, -0.002024f, -0.003215f, +0.000611f, -0.000135f, + +0.000874f, -0.003143f, +0.001414f, -0.001483f, +0.001341f, +0.001356f, -0.000618f, -0.002891f, -0.000167f, -0.002649f, + +0.002264f, +0.000113f, +0.000540f, -0.000385f, +0.000139f, -0.000632f, -0.000684f, -0.000207f, -0.000258f, +0.000861f, + +0.001033f, -0.000163f, -0.000039f, +0.000371f, -0.000744f, +0.000364f, -0.000003f, +0.000099f, +0.000569f, +0.000153f, + -0.000889f, -0.000004f, -0.000154f, -0.000442f, +0.000658f, +0.000010f, +0.000771f, +0.000385f, -0.000307f, -0.000398f, + -0.000668f, -0.000248f, +0.000601f, -0.000262f, -0.000196f, +0.000497f + }, + { + +0.001366f, +0.005065f, -0.002965f, +0.004115f, +0.001690f, +0.000112f, -0.001091f, +0.002391f, +0.002190f, -0.002005f, + -0.001930f, +0.000727f, +0.001682f, +0.001792f, -0.004813f, +0.005795f, -0.009607f, -0.009328f, -0.000282f, -0.007274f, + -0.005470f, -0.003472f, -0.006496f, -0.016983f, -0.004468f, -0.009141f, -0.004092f, -0.006930f, +0.002602f, -0.002906f, + -0.010094f, +0.000584f, +0.000155f, +0.001820f, -0.001866f, +0.005457f, +0.002708f, +0.005819f, +0.000633f, -0.000286f, + -0.002120f, +0.004005f, +0.004372f, -0.002791f, -0.000239f, -0.001629f, +0.002917f, +0.000358f, -0.000564f, +0.000530f, + -0.002468f, +0.002228f, -0.001075f, +0.000941f, +0.001050f, +0.002018f, +0.000620f, +0.000445f, -0.000153f, +0.002012f, + +0.000878f, -0.000910f, +0.000923f, -0.000983f, -0.000776f, -0.000573f, +0.000058f, -0.001015f, -0.000469f, -0.000904f, + +0.000879f, -0.000496f, +0.000421f, +0.002537f, +0.000626f, -0.000700f, -0.000536f, -0.000431f, -0.000004f, +0.001240f, + -0.000732f, +0.001066f, -0.000969f, -0.000018f, -0.000267f, +0.000093f, +0.000270f, -0.000632f, +0.000253f, -0.000030f, + +0.000103f, -0.000502f, +0.000082f, -0.000267f, +0.000172f, -0.000142f + }, + { + +0.022031f, -0.179811f, -0.039095f, +0.001843f, +0.000474f, -0.020823f, -0.014768f, -0.004390f, -0.011037f, -0.000646f, + +0.005243f, -0.001362f, -0.002356f, -0.006143f, +0.002789f, +0.005941f, -0.004916f, -0.006518f, +0.001626f, -0.010205f, + -0.014408f, +0.001764f, -0.000756f, -0.002606f, -0.000502f, -0.001759f, +0.004525f, +0.002057f, +0.003954f, -0.000706f, + +0.007217f, -0.000014f, -0.001314f, +0.004278f, +0.002338f, -0.005075f, +0.002680f, +0.001805f, +0.000973f, +0.005818f, + -0.002296f, +0.000205f, +0.005795f, -0.002446f, +0.002181f, +0.004507f, -0.003043f, -0.000144f, -0.001185f, -0.001808f, + -0.005905f, +0.000547f, +0.001898f, +0.004381f, -0.002466f, +0.000341f, +0.002413f, -0.001133f, +0.004638f, -0.000460f, + -0.003330f, +0.000777f, -0.000677f, -0.001739f, +0.000257f, -0.001162f, +0.000286f, +0.000181f, +0.000660f, +0.002234f, + -0.001144f, +0.000865f, -0.000058f, +0.000253f, -0.000913f, -0.001037f, +0.000556f, -0.000122f, +0.000273f, -0.001346f, + -0.000761f, +0.000416f, -0.001147f, -0.000940f, -0.000833f, +0.000090f, -0.001087f, -0.000300f, -0.000153f, +0.000648f, + +0.000375f, +0.000261f, -0.000223f, +0.000504f, +0.000443f, +0.000035f + }, + { + +0.002413f, +0.018045f, +0.001427f, +0.015938f, -0.005440f, -0.002082f, +0.005203f, -0.004871f, +0.003859f, -0.002329f, + +0.002083f, +0.003483f, +0.000946f, +0.002815f, -0.011543f, -0.011734f, -0.001806f, -0.004532f, +0.022089f, +0.008097f, + +0.016899f, -0.008197f, -0.000795f, +0.004731f, +0.000228f, +0.008897f, -0.007639f, -0.003345f, -0.007769f, -0.001571f, + -0.000780f, -0.005269f, -0.006158f, +0.005104f, +0.002133f, -0.003522f, +0.001551f, +0.000641f, -0.003858f, +0.000459f, + -0.002764f, +0.001949f, -0.004838f, +0.004745f, -0.002714f, +0.000584f, +0.001135f, +0.002465f, +0.002170f, -0.003273f, + +0.004792f, +0.000733f, +0.000346f, -0.001448f, +0.003237f, +0.000926f, +0.000687f, +0.001093f, -0.000579f, -0.002880f, + -0.001348f, -0.001218f, +0.001684f, -0.000478f, -0.000064f, -0.001889f, -0.000527f, +0.000117f, -0.001185f, -0.000699f, + +0.000040f, +0.000182f, -0.000457f, -0.000012f, -0.000457f, +0.001008f, -0.000679f, +0.000014f, -0.000067f, -0.000336f, + -0.000672f, -0.000675f, -0.000483f, -0.000561f, +0.000591f, +0.000400f, -0.000005f, +0.000400f, -0.000358f, +0.001001f, + -0.000087f, +0.000086f, +0.000070f, +0.000385f, -0.000366f, -0.000135f + }, + { + -0.009116f, +0.326240f, +0.005703f, +0.006837f, -0.022479f, -0.000990f, +0.002488f, -0.000464f, +0.013064f, +0.005807f, + +0.004117f, +0.004726f, +0.000368f, +0.004259f, +0.005548f, +0.007740f, -0.007036f, +0.001550f, -0.000167f, -0.010780f, + +0.009040f, -0.002682f, +0.004038f, -0.000200f, +0.004596f, -0.003061f, +0.005467f, -0.009329f, +0.000794f, +0.000956f, + +0.006891f, +0.002089f, -0.003945f, +0.009113f, +0.002120f, +0.005660f, -0.006168f, +0.001519f, +0.005201f, -0.006124f, + +0.001940f, +0.002149f, -0.002108f, +0.004153f, +0.003524f, +0.002417f, -0.004641f, +0.001510f, +0.001296f, +0.000347f, + -0.004363f, -0.000689f, +0.000055f, -0.006175f, -0.001169f, -0.002582f, -0.002139f, +0.000304f, +0.000195f, +0.003142f, + -0.001333f, +0.002295f, +0.000442f, -0.000759f, -0.001384f, -0.000683f, +0.000036f, +0.000264f, +0.000988f, -0.000130f, + +0.000158f, -0.000221f, +0.000307f, -0.000201f, +0.000376f, +0.000428f, -0.000587f, +0.000315f, -0.000449f, -0.000663f, + +0.000302f, -0.000488f, +0.000046f, -0.000772f, +0.000376f, -0.000720f, -0.000109f, -0.000018f, -0.000399f, +0.000024f, + +0.000753f, -0.000071f, -0.000048f, +0.000012f, -0.000056f, +0.000270f + }, + { + -0.000452f, -0.060967f, +0.013349f, -0.001775f, -0.002517f, -0.002187f, -0.002424f, -0.000244f, +0.002783f, -0.001303f, + +0.005036f, -0.004672f, -0.002606f, -0.016425f, -0.019856f, -0.018637f, -0.001934f, -0.004732f, -0.004991f, +0.000440f, + +0.007926f, -0.013845f, -0.008431f, +0.018263f, +0.004869f, +0.020316f, -0.013141f, +0.008266f, +0.002116f, +0.007102f, + +0.003847f, +0.006206f, -0.001463f, -0.005263f, -0.002439f, +0.004648f, -0.002897f, +0.002013f, +0.002496f, -0.004283f, + -0.002831f, -0.003225f, +0.002359f, +0.002888f, +0.002339f, +0.000191f, -0.002392f, +0.002773f, +0.000166f, -0.000165f, + +0.000928f, +0.002521f, -0.001714f, -0.000776f, -0.000519f, +0.001221f, -0.000513f, -0.001305f, -0.000662f, +0.005649f, + -0.001321f, +0.002748f, -0.000345f, +0.000878f, -0.000705f, -0.000380f, -0.002700f, +0.002553f, -0.000298f, +0.001100f, + -0.000969f, -0.000095f, +0.000271f, +0.000631f, +0.000254f, -0.000596f, +0.000339f, -0.000301f, +0.000530f, -0.000170f, + -0.001004f, +0.001159f, -0.000126f, +0.000171f, +0.000318f, -0.000826f, +0.000381f, +0.000338f, -0.000021f, +0.000433f, + -0.000150f, +0.000333f, -0.000669f, -0.000251f, +0.000634f, -0.000502f + }, + { + +0.039654f, +0.070903f, -0.008036f, -0.032754f, -0.028159f, +0.001114f, -0.004841f, +0.010379f, +0.002703f, +0.000558f, + -0.000183f, -0.001069f, +0.001827f, +0.021602f, -0.012199f, -0.003102f, -0.008348f, +0.000930f, -0.000906f, -0.008215f, + +0.007977f, +0.002923f, -0.003384f, -0.005150f, -0.001677f, -0.010652f, +0.003331f, -0.007575f, +0.002122f, +0.006100f, + +0.007032f, -0.002217f, +0.007577f, +0.002167f, +0.002932f, -0.008049f, -0.004290f, -0.002102f, -0.003524f, +0.004155f, + -0.000382f, +0.006135f, +0.000776f, -0.005217f, -0.006096f, +0.003771f, -0.000482f, -0.002925f, +0.002720f, -0.003277f, + -0.003085f, -0.002126f, +0.002994f, -0.000658f, -0.001082f, +0.000296f, -0.003059f, +0.001127f, -0.000585f, +0.001872f, + -0.001102f, -0.000177f, +0.000985f, -0.000870f, +0.002262f, +0.001779f, +0.000686f, -0.001427f, +0.000241f, -0.001097f, + +0.002216f, -0.000977f, +0.001222f, +0.000683f, +0.000806f, +0.000213f, +0.000174f, -0.000920f, +0.000259f, +0.001482f, + +0.000526f, +0.000214f, -0.000004f, -0.000374f, +0.000079f, -0.000019f, +0.000233f, -0.000911f, +0.000825f, +0.000687f, + -0.000023f, -0.000063f, -0.000030f, +0.000133f, -0.000500f, +0.000020f + }, + { + +0.001253f, -0.070687f, -0.006014f, +0.000428f, +0.000040f, -0.003613f, -0.000065f, +0.005369f, -0.003070f, +0.002699f, + -0.005098f, -0.005807f, -0.004179f, -0.007920f, +0.041137f, -0.017611f, -0.002911f, -0.004910f, -0.010480f, -0.016346f, + -0.014580f, -0.016043f, -0.000744f, -0.000978f, -0.007835f, +0.002143f, +0.001994f, +0.006197f, +0.011552f, +0.003741f, + +0.001683f, -0.000555f, +0.009304f, -0.001611f, +0.002321f, -0.000962f, -0.001676f, -0.005454f, +0.001926f, -0.003388f, + +0.002611f, -0.003050f, +0.001191f, +0.001397f, +0.001331f, -0.003511f, +0.002267f, +0.000031f, -0.000657f, +0.000753f, + -0.000692f, -0.001158f, -0.000325f, +0.000715f, -0.000967f, -0.001246f, -0.001350f, -0.002261f, -0.000960f, +0.001702f, + +0.001845f, -0.000721f, +0.000419f, +0.000752f, +0.000494f, +0.002880f, +0.000482f, +0.000476f, -0.003017f, -0.001094f, + -0.001167f, +0.001187f, -0.000619f, -0.000340f, -0.000249f, -0.000210f, +0.000396f, +0.000382f, -0.001055f, -0.000802f, + +0.000470f, -0.000409f, -0.000525f, +0.000231f, -0.000821f, -0.000009f, -0.000125f, -0.000197f, +0.000089f, +0.000016f, + -0.000472f, -0.000185f, +0.000266f, -0.000098f, +0.000525f, -0.000282f + } + }, + { + { + +0.017463f, -0.014348f, +0.031398f, -0.027708f, -0.010654f, -0.001278f, +0.000475f, +0.002164f, +0.004872f, +0.008846f, + -0.012291f, -0.003305f, -0.008646f, -0.000298f, -0.015591f, -0.004771f, +0.005796f, +0.000521f, -0.003363f, -0.004529f, + +0.001807f, +0.010275f, -0.002403f, -0.000143f, +0.002478f, -0.001261f, +0.001030f, +0.000421f, +0.009173f, -0.000352f, + -0.000092f, -0.005292f, +0.003582f, -0.000418f, +0.000962f, +0.005065f, -0.004301f, +0.005664f, -0.002135f, -0.005344f, + +0.000491f, -0.000304f, -0.001978f, +0.001615f, +0.001271f, -0.002321f, +0.000999f, -0.000754f, +0.000405f, +0.003900f, + +0.001030f, -0.002895f, -0.001178f, +0.000125f, -0.002637f, -0.002584f, -0.002723f, -0.001011f, +0.002339f, +0.000517f, + +0.000765f, -0.001328f, -0.000685f, +0.001117f, +0.001925f, -0.000818f, -0.001103f, +0.000561f, -0.001852f, +0.000118f, + -0.000086f, +0.000177f, +0.000609f, +0.001132f, -0.000404f, +0.000225f, +0.000507f, -0.000161f, -0.000557f, +0.000400f, + +0.001018f, -0.000494f, +0.000109f, +0.000187f, -0.000026f, +0.000023f, +0.000292f, +0.000191f, +0.000394f, +0.000151f, + +0.000194f, +0.000270f, -0.000150f, -0.000258f, -0.000355f, +0.000040f + }, + { + -0.003853f, +0.048255f, -0.002837f, -0.004921f, +0.012314f, -0.000273f, +0.001806f, +0.003209f, -0.000497f, -0.011847f, + +0.008428f, -0.000946f, -0.004467f, -0.003110f, -0.005643f, -0.003510f, -0.014269f, +0.005561f, -0.011643f, +0.011656f, + -0.006749f, -0.001784f, -0.000513f, +0.004253f, -0.010845f, +0.001098f, -0.001487f, +0.011574f, +0.000334f, -0.000082f, + -0.000998f, +0.003582f, -0.000774f, +0.003742f, -0.005732f, +0.001612f, +0.006570f, -0.002181f, -0.001911f, +0.003444f, + -0.000256f, +0.001784f, +0.001329f, +0.002349f, -0.004260f, -0.005394f, +0.002556f, -0.003488f, +0.001154f, -0.001244f, + +0.001277f, +0.002340f, +0.004679f, -0.001060f, -0.001288f, -0.001017f, -0.000485f, +0.000604f, +0.000578f, -0.000531f, + +0.000198f, -0.001701f, +0.002516f, -0.000759f, -0.000009f, +0.000450f, +0.000492f, -0.000350f, -0.000856f, +0.000752f, + -0.002351f, -0.001525f, +0.000077f, +0.000096f, -0.001007f, +0.000371f, -0.001215f, -0.000051f, +0.000287f, -0.000542f, + -0.000654f, +0.000057f, +0.000439f, -0.000651f, +0.000447f, +0.000293f, -0.000337f, -0.000863f, +0.000026f, +0.000031f, + +0.000161f, -0.000011f, -0.000224f, +0.000863f, -0.000077f, -0.000129f + }, + { + -0.002840f, +0.059850f, -0.035887f, -0.025705f, +0.041715f, +0.005360f, +0.004650f, +0.003043f, +0.000578f, -0.004123f, + +0.005923f, -0.005221f, +0.007274f, -0.010547f, -0.006204f, +0.015987f, -0.004570f, +0.008025f, -0.009222f, -0.001023f, + +0.004403f, +0.000027f, -0.003263f, -0.000097f, -0.002667f, +0.001261f, +0.000558f, -0.006090f, -0.002444f, +0.002178f, + +0.000122f, -0.005417f, +0.004575f, -0.004353f, -0.000888f, -0.002710f, +0.003216f, -0.002291f, +0.000330f, +0.003467f, + +0.004010f, +0.002210f, -0.000923f, +0.003000f, +0.002532f, +0.003381f, +0.003052f, +0.001648f, +0.000232f, -0.001145f, + +0.000929f, -0.000752f, -0.000265f, +0.002641f, -0.000757f, -0.000728f, -0.002305f, -0.000057f, -0.001473f, +0.000249f, + +0.000554f, +0.002978f, -0.000031f, +0.002884f, -0.000449f, -0.003180f, +0.000309f, +0.000920f, -0.002415f, +0.001037f, + -0.000022f, +0.001402f, +0.000226f, +0.000144f, +0.000095f, +0.000814f, -0.000697f, +0.000870f, +0.000494f, -0.000046f, + -0.000300f, -0.000185f, -0.000312f, -0.000439f, -0.000567f, +0.000489f, -0.000229f, +0.000208f, -0.000237f, -0.000277f, + +0.000451f, -0.000237f, +0.000381f, +0.000069f, -0.000203f, -0.000455f + }, + { + -0.040958f, +0.033836f, +0.021062f, +0.021487f, -0.012166f, -0.001387f, +0.000993f, +0.001211f, +0.005902f, +0.001488f, + -0.000796f, -0.011555f, +0.008031f, +0.010951f, +0.000678f, +0.001642f, -0.001627f, -0.011619f, +0.002748f, -0.000233f, + +0.000219f, -0.002395f, +0.005517f, +0.000194f, -0.004701f, +0.001755f, -0.000298f, -0.006736f, +0.002349f, -0.004042f, + +0.010350f, -0.000368f, +0.000022f, +0.001981f, +0.001612f, +0.006391f, +0.005816f, -0.002091f, +0.002666f, +0.001737f, + -0.002634f, -0.001954f, -0.004095f, -0.001489f, +0.001281f, +0.002835f, -0.002716f, -0.000933f, +0.003003f, -0.000359f, + +0.000583f, -0.003482f, -0.000056f, +0.001821f, +0.000790f, +0.000929f, -0.000468f, +0.000138f, -0.001737f, +0.000504f, + -0.001589f, +0.000645f, -0.001173f, +0.001717f, +0.000260f, +0.001410f, -0.000236f, +0.000378f, +0.000297f, +0.000617f, + +0.000163f, +0.000459f, +0.000038f, +0.000966f, -0.000404f, +0.000512f, -0.000664f, -0.000887f, +0.000526f, +0.000451f, + +0.000206f, +0.000371f, +0.000114f, -0.000400f, -0.000279f, -0.000013f, -0.000310f, -0.000551f, -0.000415f, +0.000450f, + -0.000247f, -0.000128f, -0.000774f, +0.000094f, -0.000169f, -0.000290f + }, + { + +0.000167f, -0.061168f, +0.001673f, +0.000618f, +0.001071f, -0.001166f, +0.000272f, -0.002756f, +0.000378f, -0.005015f, + +0.003521f, +0.005345f, -0.010744f, +0.007784f, +0.000008f, +0.002272f, -0.020650f, -0.001761f, -0.019407f, +0.001713f, + -0.017919f, -0.010097f, -0.002323f, +0.009181f, -0.008687f, +0.015213f, -0.007991f, +0.006158f, -0.008486f, +0.000656f, + -0.007546f, -0.015606f, -0.003640f, -0.003512f, -0.004783f, +0.000000f, -0.007608f, -0.002138f, +0.001006f, -0.000707f, + -0.001213f, +0.002359f, -0.000681f, -0.000310f, -0.003892f, -0.002645f, +0.001075f, -0.001537f, -0.000871f, -0.000156f, + +0.001901f, +0.000022f, -0.001123f, -0.002141f, +0.000857f, -0.001808f, +0.001640f, +0.001178f, -0.001610f, -0.001081f, + +0.000605f, -0.001315f, -0.000248f, -0.000752f, +0.002382f, -0.000925f, +0.000108f, -0.001646f, -0.001692f, +0.000605f, + -0.000168f, +0.001752f, -0.000626f, +0.000580f, -0.000289f, +0.000022f, -0.000437f, -0.000240f, +0.000536f, +0.000686f, + -0.000465f, -0.000112f, -0.000610f, +0.000542f, +0.000252f, -0.000399f, +0.000463f, -0.000138f, -0.000518f, +0.000336f, + +0.000532f, +0.001137f, -0.000187f, +0.000402f, +0.000315f, +0.000783f + }, + { + -0.045799f, -0.057158f, -0.028560f, +0.061583f, +0.007686f, -0.004667f, -0.004534f, -0.013909f, -0.002267f, -0.002862f, + +0.005960f, -0.003282f, -0.007512f, -0.006755f, -0.005077f, +0.006513f, +0.004843f, +0.002888f, -0.001513f, -0.000629f, + +0.010203f, -0.001509f, +0.002210f, -0.003048f, -0.004943f, -0.001925f, +0.001874f, -0.003374f, -0.001457f, +0.003542f, + +0.006378f, +0.000260f, -0.001011f, -0.004127f, +0.002230f, +0.002920f, -0.003300f, -0.001122f, +0.002647f, -0.001549f, + -0.004224f, -0.000193f, +0.001902f, +0.000154f, +0.001120f, -0.002215f, +0.001561f, +0.003583f, +0.002879f, +0.000513f, + -0.003081f, -0.001010f, -0.003101f, +0.001058f, +0.001703f, -0.000735f, -0.000380f, +0.000310f, -0.000450f, +0.000991f, + -0.000679f, -0.001245f, +0.000504f, +0.001423f, +0.000858f, -0.000551f, +0.000011f, +0.000541f, +0.001034f, +0.000225f, + +0.000679f, -0.000649f, -0.001046f, +0.000841f, -0.000726f, +0.000418f, +0.000609f, +0.000465f, -0.000146f, -0.000508f, + +0.000164f, -0.000895f, -0.000200f, +0.000711f, +0.000180f, -0.000021f, +0.000249f, +0.000013f, -0.000092f, +0.000586f, + -0.000357f, -0.000088f, -0.000179f, +0.000155f, +0.000400f, +0.000057f + }, + { + +0.000621f, +0.020566f, -0.000072f, -0.002823f, -0.001742f, -0.000881f, +0.000409f, +0.000379f, -0.003191f, +0.000395f, + -0.004092f, -0.002343f, +0.000806f, -0.006528f, +0.004890f, -0.004801f, -0.002503f, +0.003098f, -0.003233f, -0.014415f, + +0.005379f, +0.001917f, +0.017043f, +0.010686f, -0.017909f, -0.009064f, -0.012691f, +0.002391f, +0.003020f, +0.000034f, + +0.006396f, -0.005203f, +0.001575f, -0.003028f, -0.001765f, +0.009370f, -0.004695f, -0.002623f, -0.005675f, +0.000472f, + +0.001644f, -0.005086f, -0.001851f, +0.003337f, +0.000998f, +0.003572f, +0.000275f, -0.002039f, -0.000807f, -0.000804f, + +0.000325f, +0.000032f, +0.000633f, +0.001233f, +0.001049f, +0.000085f, +0.002270f, +0.000085f, +0.000924f, +0.001858f, + -0.000755f, +0.000154f, -0.000391f, +0.000910f, -0.001412f, -0.000232f, +0.000907f, +0.001661f, +0.000520f, -0.001106f, + -0.002110f, -0.000482f, +0.001037f, +0.000173f, +0.000346f, +0.000476f, +0.000080f, +0.000561f, -0.000604f, +0.001131f, + -0.000754f, -0.000670f, +0.000003f, +0.000247f, +0.000162f, +0.000242f, +0.000273f, +0.000125f, +0.000070f, -0.000558f, + -0.000010f, +0.000179f, +0.000375f, +0.000127f, -0.000466f, -0.000146f + }, + { + +0.041240f, +0.027615f, +0.024358f, -0.062134f, -0.002298f, -0.004761f, -0.000396f, -0.001417f, -0.000907f, -0.000763f, + -0.003676f, -0.002750f, +0.009527f, -0.002112f, -0.007952f, +0.004323f, -0.006016f, -0.001395f, -0.003573f, +0.001943f, + -0.001245f, +0.004272f, -0.009385f, +0.001297f, -0.012401f, +0.003869f, +0.001785f, -0.004104f, +0.003683f, +0.000403f, + -0.002752f, -0.004027f, -0.000430f, -0.002056f, -0.000899f, -0.003290f, -0.004927f, +0.000428f, -0.005118f, -0.005710f, + -0.001816f, +0.002143f, +0.001187f, -0.004180f, +0.001098f, -0.003334f, +0.000813f, -0.008821f, +0.001550f, +0.001855f, + +0.000944f, -0.003084f, -0.002357f, -0.000029f, +0.001781f, +0.001791f, +0.000505f, -0.003229f, -0.000525f, -0.000706f, + -0.001064f, +0.001147f, +0.001876f, +0.000449f, -0.000468f, -0.000570f, +0.000312f, -0.000185f, -0.000990f, +0.002499f, + +0.000498f, +0.000072f, +0.000599f, +0.000172f, -0.000317f, -0.001074f, +0.000630f, +0.001037f, -0.000306f, -0.000194f, + -0.000343f, -0.000080f, -0.000239f, +0.000045f, +0.000160f, -0.000043f, +0.001184f, +0.000243f, -0.000864f, +0.000019f, + -0.000369f, -0.000115f, +0.000220f, +0.000196f, -0.000005f, +0.000020f + }, + { + +0.000257f, +0.009417f, +0.004673f, +0.002240f, -0.001245f, +0.001061f, -0.002319f, +0.002360f, +0.001760f, -0.001871f, + -0.006082f, +0.008301f, -0.004013f, +0.010051f, -0.007468f, +0.005619f, -0.007909f, -0.014311f, -0.005265f, -0.007938f, + -0.003061f, +0.004854f, -0.018927f, -0.009827f, -0.002315f, +0.000098f, -0.008229f, -0.001224f, +0.000070f, -0.008544f, + -0.005309f, -0.000774f, -0.002382f, +0.002241f, -0.001999f, +0.000707f, +0.004077f, +0.005844f, -0.002291f, -0.002280f, + -0.000059f, +0.008412f, +0.002577f, -0.002639f, -0.000394f, +0.002643f, +0.002316f, -0.003309f, +0.000800f, +0.000373f, + +0.000763f, +0.000261f, +0.000076f, +0.001236f, +0.000476f, +0.001401f, -0.000669f, +0.001435f, +0.001443f, +0.001038f, + -0.000536f, -0.000258f, +0.000965f, -0.000350f, -0.001654f, -0.000635f, +0.000031f, -0.001009f, -0.001218f, -0.001248f, + +0.000661f, -0.001454f, +0.002177f, +0.001425f, +0.000744f, +0.000381f, -0.001346f, -0.000507f, +0.001028f, +0.000682f, + +0.000302f, -0.000138f, -0.000853f, -0.000037f, -0.000143f, -0.000082f, +0.000244f, +0.000180f, -0.000632f, +0.000706f, + +0.000065f, -0.000616f, -0.000349f, -0.000401f, +0.000688f, +0.000436f + }, + { + -0.020120f, -0.208618f, +0.031411f, -0.008990f, +0.005472f, +0.004261f, -0.048804f, +0.003627f, -0.007078f, +0.007890f, + -0.008028f, +0.003382f, -0.000302f, +0.001352f, -0.001126f, -0.003579f, -0.001472f, -0.006529f, +0.004267f, -0.010981f, + -0.007806f, -0.003103f, +0.000820f, -0.004259f, -0.001781f, +0.000327f, +0.008068f, -0.003908f, +0.005974f, -0.003728f, + +0.007804f, -0.003203f, +0.004746f, +0.004626f, +0.002816f, -0.000463f, +0.001817f, +0.000104f, +0.003062f, -0.000509f, + +0.000690f, +0.003534f, +0.004665f, -0.002234f, -0.000925f, +0.005850f, -0.002567f, +0.002016f, -0.002694f, -0.000378f, + -0.001602f, -0.002816f, +0.004316f, +0.004403f, -0.003950f, +0.000916f, +0.002690f, +0.002473f, +0.001150f, +0.000532f, + -0.002601f, -0.001529f, +0.002556f, -0.003535f, -0.000685f, -0.000301f, +0.000151f, -0.000757f, +0.000489f, +0.002036f, + +0.000472f, +0.000031f, +0.000347f, +0.000101f, +0.000154f, -0.001238f, +0.000459f, -0.000018f, +0.000004f, -0.000880f, + -0.001010f, -0.000548f, -0.000855f, -0.000147f, -0.000426f, -0.000392f, -0.000174f, -0.000339f, -0.000012f, +0.000743f, + +0.000332f, -0.000102f, +0.000012f, +0.000518f, +0.000324f, +0.000270f + }, + { + -0.001612f, -0.003285f, +0.027556f, -0.003266f, +0.005144f, +0.002600f, -0.001952f, -0.007837f, +0.006806f, -0.003918f, + +0.006674f, -0.004873f, +0.005878f, -0.003846f, -0.002953f, -0.010825f, -0.017646f, +0.002518f, +0.012358f, +0.019002f, + +0.008451f, -0.008766f, +0.004889f, +0.001095f, +0.009123f, -0.010388f, +0.007311f, -0.005484f, -0.007209f, -0.007835f, + +0.000852f, -0.005246f, -0.003112f, +0.004604f, -0.001209f, +0.001807f, -0.002926f, +0.000557f, -0.003913f, +0.000178f, + -0.005606f, -0.000995f, +0.001761f, +0.000636f, -0.000375f, -0.000295f, -0.000034f, +0.001312f, +0.002568f, -0.001547f, + +0.004044f, +0.000657f, +0.000533f, -0.000238f, +0.001463f, -0.000843f, +0.002278f, +0.002034f, -0.001422f, -0.001780f, + -0.000027f, -0.001777f, +0.001592f, -0.002170f, +0.000284f, -0.001074f, -0.000833f, +0.000623f, -0.000762f, -0.000013f, + -0.000337f, -0.000790f, -0.000216f, +0.000236f, -0.000707f, -0.000124f, -0.000025f, -0.000274f, +0.000095f, +0.000191f, + -0.001514f, -0.000460f, -0.000248f, -0.000527f, +0.000362f, +0.000291f, -0.000034f, -0.000238f, -0.000211f, +0.000315f, + +0.000317f, +0.000612f, -0.000192f, -0.000047f, +0.000366f, -0.000197f + }, + { + +0.063720f, +0.238149f, -0.018788f, +0.005597f, -0.018019f, +0.001959f, -0.004484f, +0.001809f, +0.010440f, +0.014861f, + +0.002516f, +0.000768f, -0.001775f, -0.005302f, +0.019007f, +0.001041f, +0.003950f, -0.001188f, -0.004517f, +0.008349f, + -0.007328f, +0.001123f, +0.002283f, +0.005848f, +0.002017f, +0.001669f, -0.001630f, -0.006280f, +0.000222f, +0.001657f, + +0.007003f, +0.001169f, -0.001546f, +0.001423f, +0.009426f, +0.005418f, -0.007560f, -0.000438f, -0.000944f, -0.000817f, + -0.000169f, +0.003871f, +0.001817f, +0.004534f, +0.005548f, -0.002372f, +0.000234f, -0.001646f, +0.002300f, -0.003097f, + -0.002397f, -0.004088f, +0.003402f, -0.005603f, -0.001228f, -0.003193f, +0.000635f, -0.001382f, -0.000594f, +0.001431f, + +0.002492f, +0.001330f, +0.001063f, -0.000337f, -0.000402f, -0.002409f, +0.000354f, -0.000122f, +0.001089f, +0.000696f, + -0.000505f, +0.000241f, +0.000501f, -0.000903f, +0.000151f, +0.001225f, -0.000332f, -0.000342f, -0.000140f, -0.001049f, + -0.000008f, +0.000217f, -0.000703f, -0.000012f, +0.000330f, -0.000738f, +0.000200f, -0.000039f, -0.000010f, +0.000020f, + +0.000205f, +0.000762f, -0.000003f, -0.000222f, -0.000207f, +0.000663f + }, + { + +0.001268f, -0.047203f, +0.003464f, -0.016132f, +0.002308f, -0.000611f, -0.000060f, -0.009053f, +0.004349f, +0.003778f, + -0.002622f, -0.002204f, +0.002764f, -0.021384f, -0.018032f, -0.002161f, -0.017672f, -0.004951f, +0.000422f, -0.002185f, + -0.005795f, -0.005708f, -0.001374f, +0.017889f, +0.012423f, +0.003497f, -0.001034f, +0.008586f, +0.004050f, +0.005790f, + +0.011557f, -0.000320f, +0.003427f, -0.004478f, -0.001720f, -0.001622f, +0.000832f, +0.001525f, +0.002903f, -0.004458f, + +0.000451f, -0.004445f, +0.001780f, +0.006355f, +0.001016f, +0.001577f, -0.002523f, -0.000945f, +0.004310f, -0.000135f, + +0.002608f, +0.000557f, +0.000935f, -0.003422f, +0.000113f, +0.001100f, +0.001553f, -0.001325f, +0.000283f, +0.002913f, + -0.000027f, +0.002072f, +0.002389f, -0.002057f, -0.000511f, -0.000271f, -0.001541f, +0.001171f, +0.000482f, -0.000851f, + +0.000819f, -0.000962f, +0.000871f, +0.000772f, +0.000950f, -0.000065f, -0.000455f, +0.001047f, -0.000442f, -0.000253f, + -0.000395f, +0.000456f, -0.000464f, -0.000691f, +0.000975f, -0.000448f, +0.000375f, -0.000081f, +0.000034f, +0.000314f, + +0.000046f, +0.000046f, -0.000058f, -0.000221f, -0.000425f, +0.000059f + }, + { + -0.011664f, +0.129830f, +0.007215f, -0.040555f, -0.009190f, -0.002613f, -0.012946f, +0.008649f, +0.003096f, +0.009472f, + -0.010302f, -0.000086f, +0.005451f, -0.008212f, +0.033517f, -0.005592f, -0.010998f, -0.004304f, -0.006168f, +0.003109f, + +0.004992f, -0.001134f, +0.003070f, -0.003771f, -0.006775f, -0.001425f, -0.005381f, -0.002753f, +0.000258f, +0.005606f, + -0.000306f, +0.003506f, +0.007470f, +0.003612f, +0.001003f, -0.001202f, -0.004928f, -0.006875f, -0.003972f, +0.005690f, + -0.004248f, +0.006816f, +0.003139f, -0.003475f, -0.004341f, +0.000737f, -0.003226f, -0.000256f, +0.000214f, -0.001453f, + -0.004239f, -0.000973f, +0.002278f, -0.001931f, -0.001134f, +0.000156f, -0.001259f, -0.000677f, -0.000355f, +0.000104f, + +0.000811f, -0.001697f, +0.001023f, -0.000084f, +0.001604f, +0.000462f, +0.000655f, -0.000445f, +0.000322f, -0.000737f, + +0.000649f, +0.000210f, +0.001797f, -0.000415f, +0.000694f, -0.000261f, +0.000401f, -0.001260f, +0.000487f, +0.000889f, + +0.000946f, -0.000226f, -0.000441f, +0.000083f, -0.000530f, -0.000254f, -0.000185f, +0.000462f, +0.000677f, +0.000385f, + -0.000160f, -0.000741f, +0.000380f, -0.000270f, -0.000487f, +0.000071f + }, + { + -0.001245f, -0.072908f, -0.000174f, +0.005583f, -0.005574f, -0.002496f, +0.004181f, -0.002415f, +0.004693f, -0.001959f, + -0.008459f, -0.003697f, -0.006386f, +0.025992f, -0.023277f, -0.006657f, +0.001192f, -0.003997f, -0.013250f, -0.007266f, + -0.012969f, -0.021900f, +0.001687f, +0.002234f, -0.008404f, +0.000454f, +0.000624f, +0.010887f, +0.008460f, -0.004169f, + +0.004324f, +0.001242f, +0.005741f, +0.001038f, +0.002984f, -0.001087f, -0.006339f, -0.001078f, +0.001712f, -0.001387f, + -0.004876f, +0.004291f, +0.001293f, +0.001076f, -0.003074f, -0.002475f, +0.004013f, -0.001672f, +0.001180f, +0.000249f, + -0.000071f, +0.000278f, -0.001683f, +0.001798f, -0.002012f, -0.002051f, -0.000229f, -0.002528f, -0.000675f, +0.001333f, + +0.003147f, +0.000659f, +0.001023f, -0.000317f, +0.000659f, +0.002698f, +0.000407f, -0.000630f, -0.001239f, -0.000613f, + -0.000895f, -0.000549f, +0.000553f, -0.000021f, +0.000778f, -0.000483f, +0.000299f, +0.000293f, -0.000322f, -0.000843f, + +0.000120f, -0.000358f, -0.001123f, -0.000031f, -0.000241f, -0.000330f, +0.000025f, -0.000037f, -0.000221f, -0.000491f, + -0.000496f, +0.000052f, +0.000559f, +0.000017f, +0.000254f, +0.000294f + } + }, + { + { + -0.021341f, -0.167605f, -0.093733f, -0.006160f, +0.010182f, -0.000377f, -0.001228f, +0.001212f, -0.000514f, +0.010322f, + -0.005346f, +0.005615f, -0.010013f, -0.005850f, -0.017554f, -0.001990f, +0.015548f, +0.006509f, +0.008591f, +0.013261f, + +0.003940f, +0.006227f, -0.001555f, -0.001290f, +0.002256f, +0.003233f, -0.000828f, -0.005371f, +0.000918f, -0.005402f, + -0.000150f, -0.000760f, +0.010795f, +0.001257f, -0.002630f, +0.001479f, -0.008370f, +0.005163f, -0.004678f, -0.009677f, + -0.005498f, +0.001305f, -0.001688f, -0.003427f, -0.000094f, -0.003071f, -0.001856f, -0.004669f, -0.001686f, +0.000776f, + -0.001474f, -0.003366f, +0.002689f, +0.003590f, -0.000901f, +0.000491f, -0.000221f, +0.000362f, +0.001387f, -0.000293f, + +0.002543f, +0.000197f, -0.000197f, +0.000821f, +0.002689f, +0.000590f, -0.000735f, -0.000168f, -0.000771f, +0.001296f, + -0.000216f, -0.001275f, -0.001189f, +0.001404f, +0.000749f, -0.000101f, +0.000236f, +0.000381f, -0.000274f, +0.000656f, + +0.000746f, -0.000587f, -0.000436f, -0.000048f, -0.000423f, -0.000430f, +0.000362f, -0.000020f, +0.000695f, +0.000470f, + +0.000097f, +0.000059f, +0.000093f, -0.000078f, -0.000093f, +0.000505f + }, + { + +0.002374f, +0.032533f, -0.022488f, -0.022874f, +0.003515f, +0.000047f, +0.002560f, +0.000441f, -0.006523f, -0.011660f, + +0.010051f, -0.001266f, -0.005430f, -0.001195f, +0.001493f, +0.012001f, -0.002702f, +0.005405f, -0.008326f, +0.005181f, + -0.004809f, -0.009423f, -0.004894f, +0.002678f, -0.015420f, +0.001457f, -0.004600f, +0.012311f, +0.002596f, -0.002228f, + +0.002477f, +0.009478f, +0.000923f, +0.007382f, -0.002379f, +0.005005f, +0.006305f, -0.005225f, -0.006450f, +0.002698f, + +0.000956f, +0.001932f, +0.001443f, +0.000171f, -0.002736f, -0.000037f, +0.004345f, -0.003017f, +0.001043f, -0.002022f, + -0.000025f, -0.001264f, +0.002834f, -0.000945f, +0.000043f, -0.001337f, -0.001928f, +0.000039f, +0.001038f, +0.001004f, + +0.001619f, -0.001626f, +0.001170f, -0.002105f, -0.000339f, -0.002132f, -0.003412f, -0.001243f, -0.000013f, +0.001027f, + -0.001309f, -0.000370f, +0.000177f, +0.000179f, -0.001283f, +0.000827f, +0.000421f, +0.000612f, -0.000728f, -0.000835f, + -0.000090f, -0.000257f, -0.000021f, -0.000911f, -0.000413f, -0.000260f, -0.000716f, -0.000628f, -0.000091f, +0.000125f, + +0.000161f, +0.000032f, -0.000289f, +0.000732f, +0.000085f, +0.000072f + }, + { + +0.007516f, +0.127961f, -0.005230f, -0.085433f, +0.004760f, +0.005807f, +0.001625f, +0.003764f, +0.009448f, -0.006803f, + -0.022857f, -0.022184f, +0.005022f, -0.019874f, -0.007699f, +0.011032f, -0.015377f, +0.001528f, -0.005629f, +0.001250f, + -0.005651f, -0.008087f, -0.004522f, -0.000529f, +0.009832f, -0.002260f, -0.005267f, -0.006001f, -0.005864f, -0.002332f, + +0.001086f, -0.009327f, +0.003078f, +0.001535f, +0.001928f, -0.004089f, +0.001994f, -0.000878f, +0.000506f, +0.004390f, + +0.001938f, -0.005856f, -0.000103f, +0.005356f, -0.000027f, -0.001907f, -0.000132f, +0.000924f, +0.000323f, +0.000151f, + +0.003663f, +0.001105f, -0.001771f, -0.001757f, -0.002819f, +0.001375f, -0.001521f, -0.001990f, -0.003815f, -0.001253f, + -0.000077f, +0.002923f, +0.000954f, +0.002244f, -0.000526f, -0.002324f, +0.000369f, +0.001832f, -0.001613f, +0.000815f, + -0.000275f, -0.000619f, -0.001509f, -0.000526f, +0.000218f, +0.000725f, -0.001713f, -0.000249f, +0.000617f, +0.000260f, + +0.000245f, +0.000421f, +0.000147f, -0.000037f, -0.000656f, +0.000295f, -0.000157f, +0.000412f, -0.000180f, -0.000431f, + +0.000231f, -0.000771f, -0.000056f, -0.000244f, -0.000220f, -0.000249f + }, + { + +0.056569f, +0.163443f, -0.004858f, +0.028302f, +0.014477f, -0.003763f, +0.001683f, -0.004161f, -0.001116f, +0.000072f, + +0.004004f, -0.011082f, -0.008823f, +0.001013f, +0.004319f, +0.004678f, +0.006051f, -0.008476f, -0.001149f, -0.002309f, + -0.001996f, +0.001355f, +0.008639f, +0.002309f, -0.004043f, +0.003959f, -0.003878f, -0.007483f, +0.005036f, -0.003786f, + +0.003808f, -0.006051f, -0.005333f, +0.000804f, -0.000186f, +0.001886f, +0.002846f, -0.002426f, +0.000780f, -0.001066f, + -0.001255f, -0.001029f, -0.002919f, +0.000708f, -0.000316f, +0.000658f, -0.000154f, +0.002937f, +0.001471f, -0.002207f, + +0.000787f, -0.000679f, +0.000822f, +0.002758f, +0.000022f, -0.000791f, -0.000341f, +0.001438f, +0.000134f, +0.001697f, + -0.001204f, +0.001166f, -0.000003f, +0.000062f, -0.000776f, +0.001937f, +0.000195f, -0.000436f, -0.001191f, -0.000288f, + -0.000079f, +0.000263f, -0.000746f, +0.000770f, +0.000044f, +0.000202f, -0.000760f, +0.000077f, +0.000952f, -0.000149f, + -0.000790f, -0.000144f, +0.000183f, -0.000311f, +0.000004f, +0.000069f, -0.000155f, -0.000150f, -0.000411f, +0.000137f, + -0.000262f, +0.000050f, -0.000624f, +0.000446f, +0.000344f, -0.000054f + }, + { + -0.001410f, -0.071574f, -0.007657f, -0.003193f, -0.000929f, -0.002285f, +0.000146f, -0.002944f, +0.002249f, +0.001242f, + +0.007492f, +0.009537f, -0.000242f, +0.005519f, -0.004898f, +0.019431f, -0.016537f, -0.041271f, -0.025418f, +0.012488f, + -0.019673f, -0.002578f, +0.000141f, +0.008768f, -0.000480f, +0.011791f, -0.006930f, +0.010823f, -0.003842f, +0.005103f, + -0.002395f, -0.016393f, -0.007533f, -0.005814f, -0.006183f, +0.003680f, -0.002061f, +0.000024f, +0.005641f, +0.003583f, + +0.000194f, -0.000999f, -0.002053f, +0.002022f, -0.000243f, +0.000438f, +0.000983f, -0.005029f, -0.003126f, +0.000836f, + +0.003064f, +0.000910f, -0.001022f, +0.000186f, +0.001839f, -0.001862f, +0.000747f, -0.000784f, -0.001812f, -0.001108f, + +0.001721f, +0.000441f, +0.000334f, +0.000055f, +0.001545f, -0.000743f, +0.001131f, -0.000304f, -0.000738f, -0.000018f, + -0.000726f, +0.000382f, -0.001098f, -0.000171f, -0.001035f, -0.000337f, -0.000167f, -0.000168f, +0.000864f, +0.000343f, + -0.000938f, +0.000587f, -0.000455f, +0.000142f, +0.000282f, -0.000701f, +0.000968f, +0.000425f, -0.000160f, +0.000371f, + -0.000243f, +0.000803f, -0.000333f, +0.000156f, -0.000132f, -0.000091f + }, + { + +0.061643f, +0.147112f, +0.015885f, +0.036251f, -0.017875f, -0.001309f, +0.000446f, -0.007270f, -0.009377f, -0.022079f, + -0.006866f, -0.006477f, -0.005565f, +0.000247f, -0.001129f, +0.010759f, +0.006221f, +0.000749f, -0.001789f, -0.005672f, + +0.001859f, -0.000591f, +0.001713f, -0.006776f, -0.005271f, -0.004637f, -0.001104f, +0.000079f, -0.001152f, -0.002215f, + +0.000709f, +0.001716f, +0.006871f, +0.000487f, +0.000575f, +0.001461f, -0.001753f, -0.000252f, +0.005613f, +0.002619f, + -0.001549f, +0.001492f, +0.001809f, -0.001797f, -0.000254f, -0.000768f, +0.001739f, +0.001877f, +0.002757f, +0.000109f, + -0.001543f, -0.001693f, -0.003927f, -0.002824f, +0.002881f, -0.000191f, -0.000091f, -0.001206f, -0.001934f, +0.000904f, + +0.000531f, -0.000891f, +0.002076f, +0.003415f, +0.000172f, -0.001451f, +0.000070f, +0.000431f, +0.002351f, +0.000849f, + +0.000867f, +0.001292f, +0.000503f, -0.000175f, -0.000032f, +0.000372f, -0.000561f, -0.000026f, +0.000260f, +0.000623f, + +0.000825f, -0.000554f, -0.000472f, -0.000112f, +0.000081f, -0.000226f, -0.000373f, -0.000532f, -0.000497f, -0.000129f, + -0.000202f, -0.000077f, +0.000042f, +0.000421f, +0.000167f, -0.000090f + }, + { + -0.000908f, +0.016560f, +0.004510f, +0.002369f, -0.000033f, -0.002290f, -0.000289f, +0.002754f, +0.000907f, +0.000289f, + -0.006526f, -0.001224f, +0.003548f, -0.009642f, -0.002522f, -0.004577f, +0.013625f, +0.006259f, +0.005015f, -0.011289f, + -0.002876f, -0.010219f, -0.012563f, +0.006048f, -0.005254f, +0.007514f, -0.010723f, -0.003443f, +0.002440f, +0.003462f, + +0.002690f, -0.012775f, +0.001525f, -0.003556f, -0.001657f, +0.006586f, -0.009452f, -0.002538f, -0.004375f, -0.000494f, + +0.000285f, -0.001092f, +0.001619f, +0.002609f, -0.003300f, +0.000512f, -0.000214f, -0.001267f, -0.001603f, +0.000498f, + +0.002789f, +0.001389f, -0.000275f, +0.001063f, +0.003071f, +0.000171f, +0.003296f, +0.000282f, -0.001767f, -0.000447f, + -0.000478f, +0.001430f, -0.000911f, +0.000035f, -0.001487f, +0.000544f, +0.000297f, +0.000177f, +0.000779f, +0.000354f, + -0.000906f, -0.000547f, +0.000994f, +0.001305f, +0.000396f, +0.000065f, -0.000533f, +0.000362f, -0.000057f, +0.001748f, + -0.001348f, -0.001023f, +0.000709f, +0.000854f, +0.000323f, +0.000384f, +0.000567f, +0.000035f, +0.000179f, +0.000255f, + -0.000151f, -0.000415f, -0.000117f, +0.000163f, -0.000385f, -0.000232f + }, + { + -0.036264f, -0.185852f, -0.058484f, -0.040240f, +0.013811f, -0.001399f, +0.011861f, +0.011682f, +0.010153f, +0.004602f, + -0.001890f, -0.006307f, +0.005150f, -0.008545f, -0.017932f, -0.000040f, -0.010784f, +0.002316f, -0.012405f, -0.002578f, + -0.006737f, -0.005025f, -0.013135f, -0.001865f, -0.014548f, +0.002116f, -0.000257f, -0.007202f, +0.000266f, +0.000981f, + +0.005700f, -0.000797f, -0.004887f, -0.009047f, -0.005846f, -0.008627f, -0.011799f, -0.000574f, -0.004766f, -0.005330f, + -0.000539f, -0.000293f, +0.001750f, -0.000059f, +0.002959f, +0.000003f, +0.003448f, -0.005911f, +0.003664f, +0.001440f, + -0.000951f, -0.001759f, -0.002723f, -0.001622f, +0.000083f, +0.001918f, +0.001721f, -0.000751f, +0.002760f, +0.001309f, + +0.000129f, +0.001022f, +0.000999f, +0.001025f, +0.000694f, +0.001037f, +0.000627f, +0.000845f, +0.000722f, +0.002085f, + -0.000393f, +0.000449f, -0.000047f, -0.000344f, +0.000983f, +0.000012f, +0.000075f, +0.000417f, -0.000019f, +0.000136f, + -0.000146f, -0.000378f, -0.000854f, -0.000142f, +0.000701f, -0.000117f, -0.000054f, +0.000139f, -0.000249f, +0.000385f, + +0.000163f, -0.000080f, -0.000063f, +0.000317f, -0.000035f, -0.000358f + }, + { + -0.001348f, -0.005745f, -0.002407f, +0.000162f, -0.003119f, +0.002406f, -0.001081f, -0.002166f, -0.003395f, +0.003118f, + +0.002175f, +0.014127f, -0.005765f, -0.002779f, -0.013165f, +0.006426f, +0.022208f, +0.007585f, +0.004912f, +0.004754f, + -0.000177f, +0.007099f, -0.009230f, +0.001403f, +0.003741f, +0.023916f, +0.009174f, -0.002936f, -0.006770f, -0.005155f, + -0.007093f, -0.004034f, -0.000830f, -0.006643f, -0.004263f, -0.001182f, -0.003633f, -0.000921f, -0.002099f, -0.001604f, + -0.002151f, +0.006450f, -0.001478f, -0.002362f, -0.000005f, +0.002022f, +0.002714f, -0.000273f, +0.002074f, +0.002436f, + +0.003179f, +0.000003f, +0.000707f, +0.002431f, -0.001119f, +0.000306f, -0.000976f, -0.000833f, -0.001183f, +0.000894f, + +0.000414f, -0.000179f, +0.001013f, +0.001575f, -0.000158f, -0.000471f, -0.000144f, +0.000303f, +0.000164f, -0.000941f, + +0.001729f, +0.000055f, +0.002082f, +0.000863f, +0.000066f, +0.000262f, -0.000421f, -0.000052f, +0.001008f, +0.000329f, + +0.000484f, -0.000357f, -0.000637f, +0.000167f, -0.000319f, -0.000176f, +0.000352f, +0.000481f, -0.000898f, +0.000243f, + -0.000207f, -0.000521f, -0.000646f, -0.000409f, +0.000520f, +0.000221f + }, + { + +0.017350f, -0.249873f, -0.024989f, +0.018001f, +0.021131f, -0.016266f, -0.048101f, +0.009305f, +0.010654f, +0.012515f, + -0.010847f, +0.012492f, +0.013222f, +0.003287f, -0.002853f, -0.001242f, -0.006953f, -0.003905f, +0.007367f, -0.003372f, + -0.006372f, -0.003362f, +0.003453f, -0.007613f, -0.012476f, -0.000605f, +0.007863f, -0.004163f, +0.006357f, -0.005117f, + +0.009186f, -0.002696f, +0.000917f, +0.002786f, +0.006340f, +0.007898f, +0.009303f, +0.003289f, +0.001506f, -0.006191f, + -0.000181f, +0.006053f, +0.002827f, -0.001185f, +0.003149f, +0.005314f, -0.003817f, -0.000645f, -0.004057f, +0.003164f, + +0.004023f, -0.004302f, +0.001006f, +0.002247f, -0.004700f, -0.000327f, +0.000582f, +0.001545f, +0.000100f, +0.001452f, + -0.002285f, -0.002879f, +0.002353f, -0.002625f, -0.002511f, -0.001917f, +0.001142f, -0.001353f, -0.000280f, +0.001697f, + +0.000226f, +0.000256f, +0.000627f, +0.000252f, +0.000788f, +0.000243f, +0.000357f, +0.000027f, +0.001043f, +0.000396f, + +0.000271f, -0.000382f, -0.000555f, +0.000662f, +0.000490f, +0.000235f, +0.000219f, -0.000460f, +0.000013f, +0.000327f, + -0.000154f, +0.000298f, +0.000185f, +0.000126f, +0.000282f, +0.000656f + }, + { + +0.000870f, -0.036645f, -0.019564f, -0.015485f, +0.011152f, -0.003920f, -0.010144f, -0.007884f, +0.005477f, -0.005584f, + +0.005551f, -0.002638f, -0.000961f, -0.003876f, +0.000539f, -0.009435f, -0.007234f, -0.000550f, -0.005680f, +0.010668f, + +0.004241f, -0.011471f, +0.008627f, -0.008224f, -0.000428f, -0.016339f, +0.002669f, -0.001969f, +0.002162f, -0.001589f, + +0.000310f, -0.001194f, -0.002937f, -0.002439f, -0.003082f, +0.004705f, -0.003372f, -0.000875f, -0.005539f, +0.001493f, + -0.000989f, +0.000571f, +0.002413f, -0.001447f, -0.000871f, -0.000664f, -0.001615f, -0.001935f, +0.000180f, -0.002409f, + +0.001245f, -0.000320f, +0.000043f, -0.000021f, -0.000157f, -0.002751f, +0.000505f, +0.000774f, -0.001393f, -0.000604f, + +0.001562f, -0.001864f, -0.000576f, -0.003573f, -0.001401f, -0.000250f, +0.000354f, +0.000976f, -0.000153f, +0.001059f, + +0.000819f, -0.000124f, +0.000114f, +0.000076f, -0.000788f, -0.000333f, +0.000489f, -0.000424f, -0.000840f, +0.000356f, + -0.000612f, +0.000116f, +0.000538f, -0.000043f, +0.000226f, -0.000103f, +0.000289f, -0.000162f, -0.000107f, +0.000072f, + -0.000011f, +0.000416f, -0.000039f, -0.000031f, +0.000149f, -0.000336f + }, + { + -0.083362f, +0.043637f, -0.018467f, -0.009161f, -0.022148f, +0.007931f, +0.003342f, +0.000910f, +0.000084f, +0.018042f, + +0.013733f, +0.001401f, +0.006145f, +0.003783f, +0.023774f, +0.002593f, +0.016299f, +0.006408f, -0.009364f, +0.005815f, + -0.008191f, +0.002199f, +0.001256f, +0.005603f, +0.003222f, +0.011233f, -0.003325f, -0.002041f, +0.000868f, -0.000578f, + +0.004259f, -0.005329f, +0.000187f, -0.000712f, +0.005353f, +0.005347f, -0.001930f, +0.002463f, -0.001720f, +0.003194f, + -0.001689f, +0.004198f, +0.008630f, +0.008300f, +0.002033f, -0.000943f, +0.004661f, -0.001181f, +0.002222f, -0.001587f, + -0.001485f, -0.002265f, +0.004487f, -0.003135f, +0.002036f, +0.000578f, -0.000121f, -0.001779f, +0.000894f, -0.000244f, + +0.003159f, +0.000578f, +0.000630f, +0.000035f, +0.001397f, -0.001053f, +0.001063f, -0.000029f, +0.000620f, +0.001584f, + +0.000220f, +0.000138f, +0.000544f, -0.000717f, -0.000390f, +0.000927f, +0.000119f, -0.000072f, +0.000229f, -0.000619f, + +0.000317f, +0.000197f, -0.000268f, +0.000498f, +0.000716f, -0.000326f, +0.000052f, -0.000226f, +0.000263f, +0.000286f, + +0.000036f, +0.000571f, +0.000116f, -0.000319f, -0.000510f, +0.000697f + }, + { + -0.001696f, -0.032545f, +0.006216f, -0.027445f, -0.003979f, -0.003500f, +0.005731f, -0.007024f, -0.004910f, -0.000346f, + -0.012483f, -0.006013f, +0.004401f, -0.008692f, -0.002306f, +0.009717f, -0.012764f, +0.003017f, +0.009414f, -0.008279f, + -0.006860f, +0.008722f, +0.011090f, +0.008388f, +0.008029f, +0.007261f, +0.008308f, +0.005507f, +0.004430f, -0.001995f, + +0.009520f, +0.001124f, +0.004129f, -0.003503f, -0.002170f, +0.000075f, -0.000125f, -0.002919f, +0.003396f, +0.002500f, + +0.001299f, -0.005651f, +0.000650f, +0.007256f, -0.001723f, -0.003547f, -0.003578f, -0.002854f, +0.003174f, +0.002214f, + +0.006691f, +0.000402f, +0.000147f, -0.004452f, -0.002115f, +0.000108f, +0.002189f, -0.000840f, +0.000131f, +0.001020f, + -0.001143f, +0.000321f, +0.000524f, -0.002224f, +0.000874f, +0.000410f, -0.000026f, +0.000922f, +0.000379f, -0.000917f, + +0.000916f, -0.000603f, +0.001979f, +0.000733f, +0.001407f, +0.000051f, -0.001150f, +0.000313f, -0.000567f, -0.000246f, + -0.000504f, -0.000176f, -0.000949f, -0.000990f, +0.000674f, -0.000236f, +0.000365f, -0.000428f, -0.000473f, -0.000357f, + -0.000302f, -0.000109f, +0.000094f, +0.000098f, -0.000391f, -0.000130f + }, + { + -0.019260f, +0.124040f, +0.014691f, -0.011150f, +0.025640f, +0.008017f, -0.011971f, +0.009548f, +0.007372f, +0.010337f, + -0.011874f, +0.002994f, +0.007555f, +0.002198f, +0.063780f, -0.002487f, -0.010435f, +0.000972f, +0.000908f, +0.007726f, + +0.006275f, -0.008526f, +0.003294f, +0.000004f, -0.010583f, -0.002319f, -0.001845f, -0.003425f, -0.004228f, +0.000967f, + -0.007593f, +0.001966f, +0.006715f, +0.005528f, +0.003664f, +0.002383f, -0.000030f, -0.003943f, -0.002365f, +0.004131f, + -0.004697f, -0.000322f, -0.000333f, +0.002361f, -0.000355f, -0.000882f, -0.001631f, +0.004050f, +0.000926f, +0.000500f, + -0.000846f, -0.000560f, -0.002496f, -0.004846f, -0.000517f, +0.000001f, -0.001380f, +0.000842f, +0.001967f, -0.000007f, + +0.000982f, -0.001004f, +0.000625f, +0.000540f, +0.002094f, +0.000129f, -0.000146f, -0.000374f, +0.000370f, -0.001021f, + +0.000655f, +0.001279f, +0.000744f, -0.001548f, -0.000318f, -0.000473f, +0.000155f, -0.000678f, +0.000189f, -0.000110f, + -0.000122f, -0.000353f, +0.000437f, +0.000110f, -0.000272f, +0.000057f, -0.000561f, +0.000414f, +0.000148f, +0.000219f, + -0.000023f, -0.000570f, +0.000054f, -0.000439f, -0.000421f, -0.000124f + }, + { + +0.001498f, -0.051369f, +0.010920f, +0.004971f, +0.001146f, -0.001532f, +0.003597f, -0.002138f, +0.003470f, -0.001692f, + -0.004278f, +0.007423f, -0.005753f, +0.003450f, -0.047275f, +0.008094f, +0.009856f, -0.002939f, -0.004537f, +0.003171f, + +0.001630f, -0.015466f, +0.004127f, +0.003184f, -0.005796f, +0.005011f, -0.003395f, +0.002938f, -0.000976f, -0.018399f, + +0.000675f, +0.005843f, +0.002746f, -0.004984f, -0.000806f, -0.002439f, -0.004557f, +0.000480f, +0.001108f, +0.000956f, + -0.003510f, +0.001098f, -0.003112f, -0.000364f, -0.004055f, -0.001894f, +0.003450f, -0.003717f, +0.001666f, +0.002342f, + +0.000087f, +0.000513f, -0.002927f, +0.000371f, -0.002598f, -0.001124f, +0.001083f, -0.000431f, +0.001384f, -0.000238f, + +0.001008f, +0.000120f, +0.000442f, -0.001208f, +0.000700f, +0.001017f, -0.001609f, -0.001996f, -0.000297f, +0.000972f, + +0.001089f, -0.000867f, -0.000651f, -0.000834f, +0.000439f, -0.000230f, +0.000234f, +0.000802f, +0.000685f, -0.000403f, + +0.000564f, -0.000151f, -0.000608f, +0.000424f, +0.000612f, +0.000176f, +0.000943f, +0.000623f, -0.000379f, -0.000349f, + -0.000253f, +0.000027f, +0.000077f, -0.000206f, -0.000187f, +0.000269f + } + }, + { + { + +0.019890f, -0.153495f, -0.131572f, +0.024692f, -0.020244f, -0.000132f, +0.006078f, +0.002384f, -0.008589f, +0.009114f, + -0.002302f, -0.007606f, +0.007449f, -0.009059f, -0.013949f, +0.009652f, +0.001304f, +0.003339f, +0.015640f, +0.009980f, + +0.002868f, +0.006939f, +0.001672f, -0.003170f, +0.001625f, +0.002673f, +0.001602f, -0.003560f, -0.006435f, +0.000814f, + -0.005064f, +0.006339f, +0.008803f, +0.000624f, -0.005418f, +0.005700f, -0.007519f, +0.007420f, -0.011065f, -0.002919f, + -0.005377f, +0.000774f, -0.002012f, -0.003395f, +0.002014f, -0.003498f, -0.005015f, -0.003993f, -0.000914f, -0.002628f, + -0.001634f, -0.002747f, +0.002915f, +0.002211f, +0.002623f, +0.000010f, -0.000436f, +0.002275f, +0.001037f, -0.000161f, + +0.001452f, +0.001423f, -0.000335f, +0.000231f, +0.000484f, +0.001649f, +0.001112f, -0.001804f, +0.000340f, +0.000702f, + +0.000268f, -0.001300f, -0.001416f, +0.000281f, +0.001550f, +0.000289f, +0.000175f, -0.000545f, +0.000439f, +0.000600f, + -0.000154f, -0.000546f, -0.000167f, +0.000499f, -0.000212f, -0.000404f, -0.000200f, +0.000137f, +0.000425f, +0.000558f, + +0.000448f, -0.000233f, -0.000077f, +0.000568f, -0.000405f, +0.000577f + }, + { + +0.001131f, -0.027832f, +0.024018f, -0.013475f, -0.007772f, -0.000843f, +0.000504f, -0.001446f, -0.008625f, -0.002099f, + +0.005687f, -0.001650f, -0.003105f, -0.006790f, -0.003363f, +0.013017f, +0.006387f, -0.002581f, +0.013116f, -0.009223f, + +0.003491f, -0.023358f, -0.000693f, +0.001102f, -0.007673f, -0.003325f, +0.001255f, -0.000487f, +0.010497f, +0.002159f, + -0.004376f, +0.009453f, +0.003089f, +0.004659f, +0.004758f, +0.001943f, +0.002233f, -0.002679f, -0.006241f, +0.005130f, + +0.002422f, -0.002942f, +0.001399f, -0.000764f, +0.001306f, +0.002761f, -0.000603f, +0.000840f, -0.000403f, -0.004560f, + +0.000421f, -0.000555f, -0.000109f, -0.000720f, +0.000870f, -0.000619f, +0.000187f, -0.002179f, +0.002446f, -0.000321f, + +0.000894f, +0.000129f, -0.001267f, -0.001370f, -0.000681f, -0.000962f, -0.003135f, -0.002032f, +0.000878f, -0.000296f, + -0.000706f, +0.000429f, +0.000364f, +0.000252f, -0.001022f, +0.000296f, +0.001088f, -0.000012f, -0.001248f, +0.000567f, + -0.000411f, +0.000057f, -0.000614f, +0.000018f, -0.001201f, -0.000422f, -0.000496f, -0.000447f, +0.000148f, +0.000089f, + +0.000119f, -0.000028f, -0.000128f, +0.000151f, +0.000045f, +0.000202f + }, + { + -0.010215f, +0.169952f, -0.006547f, -0.059360f, -0.025826f, +0.005054f, +0.008308f, -0.001673f, +0.003610f, +0.001171f, + -0.030687f, -0.008186f, -0.004930f, -0.018484f, -0.005481f, -0.005088f, +0.004059f, -0.016958f, -0.000510f, -0.000790f, + +0.002789f, -0.014209f, +0.003169f, -0.004936f, +0.011201f, -0.000260f, -0.003797f, -0.011643f, -0.000714f, -0.004112f, + -0.000423f, -0.004217f, +0.002501f, -0.004287f, +0.003193f, +0.002821f, -0.005051f, +0.002069f, -0.002460f, +0.003161f, + +0.006656f, -0.008870f, +0.005588f, -0.000055f, +0.002119f, -0.005105f, +0.001324f, +0.000873f, +0.001703f, -0.000328f, + +0.002501f, +0.001345f, -0.000791f, -0.002498f, -0.003154f, +0.001017f, -0.000203f, -0.002531f, -0.002189f, -0.001221f, + +0.000178f, -0.000946f, +0.003030f, +0.000489f, +0.000108f, -0.000629f, -0.000300f, +0.000871f, +0.001148f, -0.000938f, + +0.000051f, -0.001114f, -0.001650f, +0.000043f, +0.000381f, -0.000587f, -0.000966f, -0.000791f, +0.000211f, +0.000557f, + +0.000998f, -0.000273f, +0.000829f, +0.000059f, -0.000179f, -0.000534f, -0.000113f, +0.000145f, +0.000555f, -0.000455f, + -0.000353f, -0.000010f, -0.000373f, -0.000255f, -0.000248f, -0.000145f + }, + { + -0.048207f, +0.279719f, +0.033050f, +0.019059f, +0.002595f, -0.004238f, +0.004165f, -0.007889f, +0.000398f, -0.002946f, + +0.007524f, -0.004989f, -0.020033f, +0.005432f, +0.018393f, -0.006187f, +0.002407f, -0.008283f, -0.006199f, +0.006134f, + -0.006289f, +0.004034f, +0.002673f, +0.007221f, -0.009622f, +0.003963f, +0.001141f, -0.005985f, +0.002524f, +0.001150f, + -0.001674f, +0.002801f, -0.009607f, -0.000535f, +0.002392f, -0.006465f, +0.001343f, -0.000429f, +0.002282f, -0.003277f, + +0.001178f, -0.001349f, +0.002571f, -0.004495f, +0.001527f, +0.001198f, +0.000837f, +0.001676f, -0.002982f, +0.001607f, + -0.001564f, +0.001628f, -0.001739f, +0.004474f, -0.001281f, +0.001671f, -0.000722f, -0.001410f, +0.002646f, +0.000040f, + -0.000550f, -0.000772f, +0.001674f, -0.001039f, -0.000094f, +0.000779f, +0.001056f, -0.000414f, -0.001239f, -0.000542f, + +0.000317f, -0.000345f, +0.000227f, -0.000870f, +0.001021f, +0.000191f, -0.000688f, +0.001143f, -0.000361f, +0.000302f, + -0.000810f, -0.000602f, +0.000090f, +0.000117f, -0.000190f, -0.000025f, +0.000080f, -0.000517f, +0.000530f, -0.000534f, + -0.000202f, -0.000012f, -0.000309f, +0.000329f, +0.000161f, +0.000051f + }, + { + +0.002497f, -0.064104f, -0.013645f, -0.003427f, -0.001180f, +0.000173f, -0.002521f, -0.005470f, +0.004389f, +0.000417f, + +0.005581f, +0.017056f, +0.001470f, -0.004699f, -0.022171f, +0.023864f, -0.010528f, -0.036282f, -0.005032f, +0.019366f, + -0.012232f, -0.007472f, +0.012392f, -0.002247f, +0.005325f, +0.006425f, +0.013093f, -0.006133f, +0.002015f, -0.003205f, + +0.005426f, -0.008275f, -0.011415f, -0.002235f, -0.005610f, -0.001759f, +0.008616f, -0.006583f, -0.000791f, +0.007553f, + +0.001406f, -0.000635f, -0.000818f, -0.000762f, +0.002335f, +0.002387f, -0.002705f, -0.001124f, -0.003518f, +0.000287f, + -0.000604f, +0.003793f, -0.000947f, +0.000906f, -0.000886f, -0.000228f, +0.000180f, -0.001686f, +0.000059f, -0.002995f, + +0.000527f, +0.002869f, -0.000872f, +0.001150f, +0.000882f, -0.000541f, -0.000537f, -0.000120f, +0.001041f, -0.001682f, + +0.000844f, -0.000709f, -0.000442f, -0.000520f, -0.000896f, +0.000080f, -0.000166f, -0.000557f, +0.001082f, -0.000237f, + +0.000081f, -0.000672f, +0.000335f, -0.000174f, +0.000409f, -0.000890f, +0.000902f, +0.000588f, -0.000190f, +0.000588f, + -0.000405f, +0.000336f, +0.000075f, -0.000312f, +0.000035f, -0.000523f + }, + { + -0.042007f, +0.349854f, -0.025528f, +0.008216f, +0.002721f, +0.001695f, -0.000794f, -0.002855f, -0.007302f, -0.008924f, + -0.024583f, -0.000421f, -0.014237f, +0.003244f, +0.003044f, +0.005155f, +0.010314f, +0.002952f, -0.005781f, -0.000718f, + +0.001350f, -0.006988f, -0.001704f, -0.008534f, +0.001333f, -0.006347f, -0.001723f, +0.004406f, -0.001491f, -0.002020f, + +0.000900f, -0.000655f, +0.011600f, +0.004309f, -0.005825f, +0.000385f, -0.004291f, +0.001602f, +0.008634f, +0.000901f, + +0.001712f, +0.000705f, +0.000300f, -0.000869f, -0.002703f, +0.004167f, +0.000535f, +0.000918f, +0.004712f, -0.000660f, + -0.000053f, -0.004227f, +0.000775f, -0.004998f, +0.002930f, -0.000650f, -0.001990f, -0.002586f, -0.002476f, +0.001421f, + +0.003149f, -0.001350f, +0.002220f, +0.002160f, +0.000939f, -0.001479f, -0.000002f, +0.000712f, +0.001891f, +0.001049f, + +0.001408f, +0.000201f, +0.001211f, +0.000540f, -0.000139f, -0.000500f, -0.000997f, -0.000245f, +0.000942f, +0.000624f, + +0.000804f, +0.000369f, -0.000504f, +0.000222f, -0.000405f, -0.000224f, -0.000536f, -0.000739f, -0.000395f, -0.000557f, + +0.000176f, -0.000376f, +0.000193f, +0.000646f, +0.000130f, -0.000296f + }, + { + -0.000465f, +0.010023f, +0.005075f, +0.003550f, +0.000852f, -0.001345f, -0.001364f, +0.002342f, -0.000246f, -0.000452f, + -0.001518f, -0.004659f, -0.002353f, +0.003874f, -0.016011f, +0.006221f, +0.018391f, +0.006300f, +0.014450f, -0.014233f, + -0.001231f, -0.010807f, -0.014693f, +0.002709f, -0.001792f, +0.005864f, -0.005703f, -0.003509f, +0.004682f, +0.001936f, + -0.003229f, -0.008845f, +0.006368f, -0.011039f, +0.002346f, +0.001616f, -0.007933f, -0.003356f, -0.004071f, -0.001094f, + -0.001532f, +0.002918f, +0.001100f, +0.000827f, -0.001712f, -0.001848f, -0.002527f, +0.000468f, -0.002019f, +0.000556f, + +0.002262f, +0.001705f, +0.002737f, -0.000606f, +0.001662f, +0.001369f, +0.002298f, -0.001499f, -0.001230f, +0.000495f, + -0.001632f, +0.001817f, -0.000457f, -0.000152f, -0.001111f, +0.002370f, -0.001881f, -0.000202f, +0.000359f, +0.001041f, + +0.001033f, -0.000696f, -0.000294f, +0.000828f, +0.000841f, +0.000184f, -0.001092f, +0.000333f, +0.000321f, +0.000608f, + -0.000253f, -0.000968f, +0.000369f, +0.000475f, +0.000603f, +0.000516f, +0.000398f, +0.000223f, -0.000004f, +0.000664f, + -0.000056f, -0.000579f, -0.000125f, +0.000382f, -0.000512f, -0.000292f + }, + { + +0.011989f, -0.361140f, +0.028996f, -0.027567f, +0.000099f, +0.000548f, +0.012707f, +0.004088f, +0.018234f, +0.007843f, + -0.003417f, +0.001990f, -0.002703f, -0.005127f, -0.015473f, -0.002378f, -0.007082f, +0.004310f, -0.014292f, -0.008572f, + -0.002711f, -0.003655f, -0.011003f, -0.007084f, -0.005928f, -0.003338f, +0.003719f, -0.006085f, +0.001017f, -0.003128f, + +0.008222f, -0.003040f, -0.003061f, -0.007725f, -0.006134f, -0.010153f, -0.011427f, +0.000879f, -0.003081f, -0.006313f, + +0.003202f, -0.002522f, +0.003231f, -0.000522f, +0.001575f, +0.002447f, -0.000709f, -0.000960f, +0.003002f, -0.002460f, + -0.000704f, -0.000681f, -0.003443f, +0.002232f, -0.001863f, +0.002829f, -0.000033f, +0.000937f, +0.002996f, -0.000572f, + +0.001592f, +0.001883f, -0.000037f, +0.000048f, +0.000255f, +0.002830f, -0.000444f, +0.001070f, +0.001223f, +0.001455f, + -0.000995f, +0.000047f, +0.000306f, -0.000725f, +0.000335f, +0.000915f, -0.000010f, +0.000020f, -0.000052f, +0.000267f, + -0.000030f, -0.000250f, -0.001425f, +0.000140f, +0.001169f, -0.000250f, -0.000184f, +0.000179f, -0.000105f, -0.000153f, + +0.000404f, -0.000020f, -0.000030f, -0.000014f, -0.000009f, -0.000039f + }, + { + -0.000472f, -0.006253f, -0.007169f, -0.002107f, -0.002462f, +0.003239f, +0.000852f, -0.000620f, -0.007788f, -0.000917f, + +0.007929f, +0.007531f, +0.010089f, -0.014739f, -0.012205f, +0.015578f, +0.023368f, +0.002731f, +0.005027f, +0.001022f, + -0.005337f, +0.011002f, -0.008717f, +0.007872f, +0.003893f, +0.017224f, +0.018911f, -0.010942f, -0.012575f, -0.001808f, + -0.002158f, -0.009187f, +0.002603f, -0.007209f, -0.000220f, -0.001890f, -0.005600f, -0.004379f, +0.000599f, +0.002615f, + -0.005019f, +0.000436f, +0.000886f, +0.000797f, -0.002084f, +0.004263f, +0.000577f, +0.003574f, -0.002803f, +0.004217f, + +0.001572f, +0.001429f, +0.001371f, +0.002367f, -0.004170f, +0.000832f, +0.002084f, -0.004017f, +0.000024f, +0.001031f, + +0.000993f, -0.000178f, +0.000319f, +0.000806f, -0.000479f, +0.000696f, +0.000390f, +0.000496f, +0.000182f, -0.000592f, + +0.001069f, +0.001100f, +0.001572f, +0.000196f, -0.000139f, +0.000369f, -0.000224f, +0.000313f, +0.000209f, +0.000528f, + +0.000515f, -0.000707f, -0.000030f, +0.000580f, -0.000517f, -0.000417f, +0.000092f, +0.000391f, -0.000665f, -0.000170f, + -0.000117f, -0.000481f, -0.000501f, -0.000026f, -0.000091f, +0.000155f + }, + { + -0.015271f, -0.326931f, +0.079821f, +0.030574f, +0.019425f, -0.063354f, -0.008609f, +0.005508f, +0.017993f, -0.003790f, + -0.001358f, +0.018913f, +0.013488f, -0.001080f, +0.001778f, -0.014184f, -0.002603f, +0.004115f, -0.010347f, +0.006643f, + +0.000627f, -0.005546f, -0.005746f, -0.003556f, -0.015233f, +0.001477f, +0.004922f, +0.003690f, -0.003119f, +0.000588f, + +0.010735f, -0.002994f, +0.001049f, +0.003548f, +0.001587f, +0.011258f, +0.004948f, +0.007414f, -0.003284f, -0.000913f, + -0.002209f, +0.004420f, +0.002227f, -0.000810f, +0.006806f, -0.002360f, +0.001010f, -0.003319f, -0.002116f, +0.001625f, + +0.003006f, -0.000978f, -0.002755f, +0.000282f, +0.000656f, -0.001061f, -0.001561f, +0.000553f, +0.001258f, -0.001983f, + +0.000090f, -0.001413f, -0.001827f, +0.000260f, -0.002095f, -0.002676f, +0.000591f, -0.000438f, -0.001451f, +0.001629f, + +0.000519f, +0.000730f, +0.000463f, +0.000395f, -0.000985f, +0.000702f, +0.000360f, +0.000120f, +0.001348f, -0.000116f, + +0.001373f, -0.000181f, +0.000112f, -0.000530f, +0.000139f, -0.000021f, +0.000602f, -0.000126f, +0.000023f, -0.000039f, + -0.000032f, +0.000411f, +0.000174f, -0.000356f, +0.000261f, +0.000472f + }, + { + +0.000047f, -0.059247f, -0.015463f, +0.003578f, +0.000723f, -0.005664f, -0.010852f, -0.001554f, +0.003944f, -0.002401f, + -0.004526f, +0.000942f, +0.003007f, -0.007197f, +0.006890f, -0.013324f, +0.015213f, -0.012114f, -0.004905f, -0.017188f, + +0.019146f, +0.000195f, -0.002907f, -0.010116f, +0.001859f, -0.008537f, -0.006965f, +0.002688f, -0.002929f, +0.009636f, + -0.003462f, -0.005807f, +0.000886f, -0.007120f, +0.000167f, +0.001496f, +0.001025f, -0.000147f, -0.005108f, +0.000652f, + +0.004207f, +0.001129f, +0.001288f, -0.001462f, -0.001865f, +0.000295f, -0.001882f, -0.002263f, -0.002698f, +0.000293f, + -0.002239f, +0.002542f, -0.000500f, -0.001120f, -0.001656f, +0.001533f, -0.002593f, -0.000234f, -0.001099f, +0.000229f, + +0.000551f, -0.000745f, -0.001324f, -0.001209f, -0.002553f, -0.000332f, +0.000405f, +0.000859f, -0.001016f, +0.000722f, + +0.001867f, +0.000156f, +0.000602f, -0.000427f, -0.000404f, -0.000464f, +0.000009f, +0.000635f, -0.001213f, +0.000250f, + +0.000087f, -0.000017f, +0.000306f, +0.000211f, +0.000153f, -0.000027f, +0.000354f, +0.000339f, +0.000026f, +0.000059f, + -0.000321f, +0.000066f, +0.000067f, +0.000036f, -0.000008f, -0.000409f + }, + { + +0.064690f, -0.147166f, -0.010311f, -0.021747f, -0.012138f, -0.001647f, +0.011045f, -0.002640f, -0.005698f, +0.015832f, + +0.010916f, +0.000548f, +0.008575f, +0.007484f, +0.031562f, +0.000656f, +0.014495f, +0.000198f, +0.001918f, -0.006098f, + -0.007082f, +0.007987f, +0.002533f, -0.000668f, +0.000480f, +0.012445f, -0.005314f, +0.003244f, +0.002604f, -0.003249f, + -0.000305f, -0.003997f, +0.000173f, +0.000852f, +0.001840f, +0.005272f, +0.005711f, +0.002378f, -0.002842f, +0.004596f, + -0.002346f, +0.004315f, +0.005022f, +0.006650f, +0.002761f, +0.001076f, +0.003658f, -0.000740f, +0.001104f, -0.001979f, + -0.000723f, +0.001107f, +0.000034f, -0.001171f, +0.001747f, +0.003397f, -0.002693f, -0.000291f, +0.000435f, -0.000750f, + +0.000918f, +0.000905f, +0.000191f, -0.000150f, +0.002400f, +0.000386f, +0.000629f, -0.000344f, +0.000987f, +0.001301f, + +0.000486f, +0.000673f, -0.000925f, -0.000804f, +0.001269f, +0.000809f, -0.000360f, -0.000513f, +0.000087f, -0.000379f, + +0.000485f, +0.000582f, +0.000231f, -0.000123f, +0.000061f, +0.000331f, -0.000070f, +0.000066f, -0.000282f, +0.000547f, + +0.000220f, +0.000002f, -0.000132f, +0.000139f, -0.000088f, +0.000215f + }, + { + +0.002160f, +0.001244f, -0.030686f, -0.013435f, -0.012040f, +0.002206f, +0.000173f, -0.004756f, -0.008096f, +0.002150f, + -0.010318f, -0.008344f, -0.022092f, +0.006419f, +0.018433f, -0.002037f, -0.004103f, +0.003713f, +0.010009f, -0.001730f, + -0.007558f, +0.026362f, +0.027689f, -0.029541f, +0.011342f, +0.001996f, +0.014570f, -0.000824f, +0.008369f, -0.002941f, + -0.001152f, +0.005523f, -0.003525f, +0.001297f, +0.001621f, -0.004933f, +0.002233f, -0.000255f, -0.000268f, +0.001132f, + +0.002350f, -0.001116f, -0.002031f, +0.002344f, +0.000049f, -0.001142f, -0.003429f, -0.004697f, +0.002226f, +0.004034f, + +0.005358f, +0.001303f, -0.002302f, -0.001624f, -0.003655f, -0.002247f, -0.000626f, +0.001285f, +0.000870f, -0.000946f, + +0.001928f, -0.001137f, -0.001204f, -0.000575f, +0.000886f, +0.000002f, -0.000137f, +0.000735f, +0.000604f, -0.001097f, + +0.001757f, -0.000374f, +0.001116f, +0.000328f, +0.000831f, -0.000244f, -0.000329f, +0.000084f, +0.000307f, -0.001038f, + -0.000137f, -0.001019f, -0.000648f, -0.000005f, +0.000344f, +0.000062f, +0.000028f, -0.000168f, -0.000686f, -0.000712f, + -0.000104f, +0.000243f, -0.000135f, +0.000174f, -0.000055f, -0.000458f + }, + { + +0.038098f, +0.063004f, -0.002468f, -0.004044f, +0.022866f, +0.002589f, -0.002429f, -0.002001f, +0.024931f, -0.001785f, + -0.000557f, -0.004866f, +0.014629f, +0.000667f, +0.065596f, -0.011837f, -0.001580f, +0.002695f, +0.009147f, -0.001914f, + +0.004595f, -0.007541f, -0.000754f, +0.004635f, -0.009518f, -0.005937f, +0.000773f, -0.010773f, +0.001532f, -0.001009f, + -0.005404f, +0.000760f, +0.004486f, +0.003673f, +0.004832f, +0.000651f, +0.000190f, -0.001189f, -0.000461f, +0.000603f, + -0.000808f, -0.007540f, +0.002229f, +0.003832f, -0.000396f, -0.001750f, -0.002036f, +0.005939f, +0.000394f, -0.000641f, + +0.002309f, -0.000803f, -0.005884f, -0.002773f, -0.000722f, -0.000258f, +0.000068f, +0.000820f, +0.001540f, -0.000570f, + +0.001124f, +0.001186f, -0.000127f, +0.000548f, +0.001380f, +0.000273f, +0.000248f, -0.000248f, -0.000345f, -0.000198f, + -0.000595f, +0.002431f, -0.000886f, +0.000511f, -0.001202f, -0.000028f, -0.000400f, +0.000633f, -0.000100f, +0.000291f, + -0.000118f, -0.000399f, +0.000601f, -0.000127f, +0.000090f, -0.000143f, -0.000316f, +0.000303f, -0.000034f, +0.000262f, + -0.000160f, -0.000311f, -0.000223f, +0.000109f, -0.000268f, -0.000437f + }, + { + -0.000640f, -0.024295f, -0.005966f, +0.001442f, +0.005415f, +0.001017f, +0.001651f, -0.004018f, -0.004853f, +0.004069f, + -0.003498f, +0.008558f, -0.002070f, -0.035399f, +0.017298f, +0.009488f, +0.013035f, -0.004802f, +0.003512f, +0.004093f, + +0.002884f, -0.008647f, -0.012158f, +0.007339f, -0.009989f, +0.013208f, -0.005406f, -0.010082f, +0.000123f, -0.006214f, + -0.004545f, +0.007000f, +0.003407f, -0.007538f, +0.000999f, -0.005057f, +0.000390f, -0.003246f, -0.003446f, +0.000519f, + +0.001138f, -0.004819f, -0.003008f, -0.000159f, -0.000182f, -0.003409f, +0.002962f, -0.000009f, -0.001140f, +0.002178f, + +0.001049f, +0.000697f, -0.002385f, -0.000911f, -0.002822f, -0.000319f, -0.000014f, -0.001383f, +0.002488f, +0.000372f, + -0.000630f, -0.002285f, +0.000751f, -0.000375f, +0.000717f, -0.000347f, -0.001423f, -0.001211f, -0.000480f, -0.000662f, + +0.001892f, -0.000057f, -0.002305f, -0.000480f, -0.000284f, +0.000149f, -0.000011f, +0.000861f, +0.000537f, +0.000131f, + +0.000828f, -0.000085f, -0.000076f, +0.000019f, +0.000324f, +0.000778f, +0.000881f, +0.000720f, -0.000149f, -0.000335f, + -0.000007f, +0.000044f, -0.000211f, +0.000242f, -0.000581f, +0.000051f + } + }, + { + { + -0.020210f, +0.080710f, +0.134047f, +0.042944f, -0.005861f, +0.005076f, +0.008487f, +0.009746f, -0.008073f, +0.000270f, + -0.005781f, -0.012800f, +0.010368f, -0.008105f, -0.003132f, +0.018077f, -0.005972f, +0.008415f, +0.012013f, -0.001455f, + -0.008855f, -0.001253f, -0.002143f, -0.006189f, +0.007174f, +0.002003f, +0.002937f, +0.003062f, -0.003528f, +0.006475f, + -0.006107f, +0.005001f, +0.010767f, +0.005428f, +0.003348f, +0.007694f, -0.004558f, +0.016461f, -0.003450f, +0.003863f, + +0.000225f, -0.000875f, -0.002660f, +0.000332f, +0.004881f, -0.000158f, -0.001825f, +0.000694f, -0.000466f, -0.002390f, + +0.000163f, -0.002260f, -0.000384f, -0.000243f, +0.003968f, +0.001047f, +0.000421f, +0.002172f, +0.001218f, -0.000191f, + -0.000015f, +0.000067f, -0.000690f, -0.001301f, -0.002244f, +0.000866f, +0.000935f, -0.000963f, -0.000018f, -0.000893f, + +0.000625f, +0.000159f, -0.000374f, +0.000179f, +0.001454f, +0.000052f, +0.000194f, -0.000482f, +0.000344f, +0.000327f, + -0.000199f, -0.000134f, +0.000491f, +0.000929f, +0.000035f, +0.000484f, +0.000426f, -0.000006f, -0.000130f, +0.000201f, + +0.000111f, +0.000145f, +0.000194f, +0.000354f, -0.000346f, +0.000377f + }, + { + -0.002230f, -0.108491f, -0.023372f, +0.008367f, +0.000269f, +0.000926f, +0.001220f, +0.001483f, +0.003157f, +0.004469f, + +0.000983f, -0.000637f, -0.003169f, -0.010789f, -0.009507f, -0.006429f, -0.000773f, +0.000899f, +0.006105f, -0.009446f, + +0.009185f, -0.030058f, +0.000860f, +0.008413f, +0.010776f, +0.008838f, -0.010527f, -0.020148f, -0.001504f, -0.001544f, + -0.005903f, +0.005534f, +0.002258f, -0.000510f, +0.003219f, +0.006235f, +0.008568f, +0.003558f, -0.000403f, +0.004200f, + -0.001441f, -0.001111f, +0.005856f, -0.001213f, -0.001590f, +0.002859f, +0.000605f, -0.000337f, -0.001686f, -0.002315f, + +0.000845f, -0.000522f, +0.000091f, -0.001173f, +0.001287f, -0.000980f, +0.001736f, -0.001441f, -0.000280f, -0.002167f, + -0.000328f, -0.000358f, -0.000733f, +0.000165f, +0.000121f, +0.001132f, +0.000515f, +0.000172f, +0.000619f, -0.000095f, + +0.000127f, +0.000010f, +0.000235f, +0.000682f, -0.000061f, +0.000430f, -0.000065f, -0.000249f, -0.000175f, +0.001054f, + +0.000030f, +0.000404f, -0.000347f, +0.000591f, -0.000378f, -0.000103f, +0.000024f, +0.000438f, +0.000806f, -0.000021f, + +0.000366f, +0.000141f, -0.000297f, -0.000227f, -0.000125f, +0.000116f + }, + { + +0.009798f, +0.143870f, -0.032784f, -0.003824f, +0.003458f, -0.000192f, +0.008552f, -0.002575f, -0.001332f, +0.009559f, + -0.024206f, -0.003519f, +0.009327f, -0.000108f, -0.007036f, -0.017881f, +0.004922f, -0.013729f, -0.001329f, -0.005379f, + +0.001410f, -0.013391f, +0.011156f, +0.003402f, +0.000986f, +0.001814f, +0.014238f, -0.001861f, +0.002145f, -0.003692f, + +0.004246f, -0.001590f, +0.006202f, +0.000426f, +0.002091f, +0.002308f, -0.003907f, -0.001956f, -0.008051f, +0.001643f, + +0.008494f, -0.003960f, +0.007187f, -0.002767f, +0.003854f, -0.000413f, +0.003108f, +0.001045f, +0.003438f, -0.000435f, + -0.000565f, +0.002276f, +0.001499f, -0.000500f, -0.001570f, -0.000240f, -0.000745f, -0.000548f, +0.001508f, -0.000034f, + -0.000679f, -0.001579f, +0.002479f, -0.001017f, +0.000804f, -0.000331f, -0.001096f, +0.000125f, +0.000471f, -0.001404f, + +0.000405f, +0.000724f, -0.000142f, -0.000580f, -0.000500f, -0.001048f, -0.000120f, +0.000116f, +0.000092f, -0.000044f, + +0.000511f, -0.000229f, +0.000358f, -0.000135f, +0.000239f, -0.000909f, -0.000370f, +0.000251f, +0.001139f, +0.000111f, + -0.000199f, +0.000286f, -0.000117f, -0.000336f, -0.000383f, +0.000176f + }, + { + +0.020528f, +0.320851f, -0.024521f, +0.008314f, +0.005406f, -0.000887f, +0.006708f, -0.007301f, -0.003299f, -0.007550f, + +0.005926f, +0.000075f, -0.004312f, +0.005164f, +0.008420f, -0.005087f, +0.001820f, -0.012940f, -0.011335f, +0.003429f, + -0.006818f, +0.002538f, -0.007026f, -0.000249f, -0.007633f, +0.002752f, +0.002066f, -0.004456f, +0.004071f, +0.004070f, + +0.002348f, +0.008173f, -0.003134f, +0.000360f, -0.000433f, -0.008746f, +0.003215f, -0.000912f, +0.002685f, -0.001933f, + +0.001696f, -0.000668f, +0.004449f, -0.001954f, +0.003534f, +0.001444f, -0.000272f, +0.000254f, -0.002777f, +0.002728f, + -0.001328f, -0.000616f, -0.004096f, +0.002980f, -0.002329f, +0.001313f, +0.000520f, -0.003812f, +0.000957f, -0.000460f, + -0.001778f, -0.000762f, +0.001567f, -0.000280f, +0.000394f, +0.000004f, +0.000688f, -0.000400f, -0.000967f, -0.000820f, + -0.000501f, -0.001520f, +0.000401f, -0.000896f, +0.000428f, +0.000007f, -0.000056f, +0.001018f, -0.000161f, +0.001194f, + -0.000049f, -0.000003f, +0.000316f, +0.000441f, -0.000011f, +0.000228f, +0.000166f, -0.000483f, +0.000823f, -0.000303f, + -0.000222f, -0.000092f, +0.000093f, +0.000165f, -0.000171f, -0.000014f + }, + { + -0.002977f, -0.028497f, +0.020841f, -0.002274f, -0.000703f, +0.000346f, -0.000691f, -0.004266f, +0.001973f, -0.003060f, + -0.001907f, +0.007021f, -0.000514f, +0.001910f, -0.050393f, +0.006162f, +0.031389f, +0.055329f, +0.031721f, +0.009338f, + -0.008808f, -0.010934f, +0.013663f, -0.002039f, +0.000657f, -0.004009f, +0.010910f, -0.009194f, +0.006852f, -0.004977f, + +0.004623f, +0.003861f, +0.003003f, +0.009095f, +0.002517f, +0.002195f, +0.007429f, -0.010791f, -0.004793f, +0.006143f, + -0.000303f, +0.000690f, +0.001449f, +0.000727f, +0.003714f, +0.000458f, -0.002610f, +0.003168f, -0.001498f, +0.003801f, + -0.001491f, -0.002360f, -0.003704f, +0.000035f, -0.002032f, -0.000414f, -0.001091f, -0.002052f, +0.002502f, +0.000312f, + -0.001709f, +0.000133f, -0.002009f, -0.001236f, +0.000305f, -0.000063f, -0.001156f, +0.000042f, +0.001862f, -0.000995f, + +0.000605f, -0.000724f, -0.000226f, +0.000499f, -0.000015f, +0.000164f, -0.000403f, -0.000220f, +0.001190f, -0.000278f, + +0.000121f, -0.001052f, +0.000916f, +0.000229f, +0.000137f, -0.000858f, +0.000352f, -0.000131f, -0.000168f, +0.000433f, + -0.000203f, +0.000173f, -0.000007f, -0.000377f, -0.000166f, -0.000202f + }, + { + -0.003806f, +0.432293f, +0.004027f, -0.002722f, -0.009735f, +0.001964f, +0.007868f, +0.005030f, +0.000705f, +0.007285f, + -0.021715f, -0.000640f, -0.007498f, +0.005838f, -0.000474f, +0.002938f, +0.000901f, -0.001982f, +0.000069f, +0.002631f, + +0.010278f, +0.000644f, -0.001084f, -0.009843f, +0.000210f, -0.002200f, +0.002333f, +0.006316f, +0.002373f, +0.001364f, + +0.001384f, -0.004770f, +0.006443f, +0.003430f, -0.005812f, +0.001527f, +0.000043f, +0.003016f, +0.003983f, -0.000728f, + +0.004421f, -0.000538f, -0.005307f, -0.000110f, -0.001889f, +0.000244f, +0.000890f, +0.001910f, +0.005226f, +0.003224f, + +0.002817f, -0.003939f, +0.001955f, -0.002162f, -0.000278f, -0.002222f, -0.000795f, -0.000907f, -0.000432f, +0.000839f, + +0.002132f, -0.001403f, +0.000774f, -0.001014f, -0.000512f, +0.000020f, +0.001111f, -0.000712f, -0.000248f, -0.000174f, + +0.000284f, -0.001154f, +0.000250f, +0.000903f, -0.000074f, -0.000031f, -0.000886f, +0.000070f, +0.001509f, -0.000651f, + -0.000829f, +0.000434f, +0.000034f, +0.000975f, +0.000072f, +0.000318f, -0.000306f, -0.000027f, +0.000406f, -0.000210f, + +0.000368f, -0.000218f, -0.000295f, -0.000079f, +0.000073f, -0.000018f + }, + { + +0.001179f, +0.005066f, -0.004542f, +0.001185f, +0.000441f, -0.000504f, -0.000466f, +0.001405f, -0.003142f, +0.001430f, + +0.006045f, +0.000395f, -0.003869f, +0.003626f, -0.010518f, +0.008071f, +0.005706f, -0.003236f, +0.007381f, -0.008783f, + +0.015617f, -0.003777f, -0.029420f, -0.006750f, +0.002920f, +0.000867f, +0.009832f, +0.005392f, +0.003743f, +0.004026f, + +0.003477f, +0.003986f, +0.003664f, -0.009189f, +0.008957f, +0.001076f, -0.006584f, -0.003750f, -0.003713f, +0.001422f, + -0.002656f, +0.001676f, +0.000173f, -0.001137f, -0.000122f, -0.001459f, -0.004929f, -0.001460f, -0.003282f, -0.000284f, + +0.000249f, -0.000797f, +0.003123f, -0.001830f, -0.000687f, -0.000224f, +0.001274f, -0.002542f, -0.000094f, +0.001922f, + -0.001663f, +0.002205f, -0.000206f, +0.000193f, -0.000822f, +0.001977f, -0.000539f, +0.001650f, -0.000135f, -0.000362f, + +0.001386f, +0.000400f, -0.000711f, -0.000263f, +0.000598f, +0.000767f, -0.000519f, +0.000504f, +0.000120f, -0.000267f, + +0.000286f, +0.000011f, -0.000062f, -0.000514f, -0.000139f, +0.000108f, +0.000108f, +0.000250f, -0.000078f, +0.000106f, + -0.000079f, -0.000196f, -0.000005f, +0.000052f, -0.000599f, -0.000278f + }, + { + +0.022905f, -0.411784f, -0.009458f, -0.015829f, +0.003434f, -0.001995f, +0.002427f, -0.006243f, +0.007922f, +0.003004f, + +0.004650f, +0.005162f, -0.003032f, +0.029972f, +0.021684f, +0.000900f, -0.003488f, +0.002642f, -0.003662f, +0.005165f, + +0.007588f, +0.001101f, -0.008567f, -0.004417f, -0.000589f, -0.002652f, +0.004509f, -0.002139f, +0.006858f, +0.001714f, + +0.000900f, -0.003861f, +0.003970f, +0.000835f, +0.000201f, -0.006022f, -0.007035f, +0.004738f, +0.003047f, -0.002396f, + +0.001920f, -0.003822f, +0.006876f, +0.002227f, +0.000129f, -0.004447f, -0.002779f, -0.002884f, -0.000336f, +0.000545f, + +0.002079f, -0.001567f, -0.003830f, +0.003687f, -0.000888f, +0.002897f, +0.000823f, +0.000094f, +0.000106f, -0.002268f, + +0.000460f, +0.000529f, -0.000380f, -0.001299f, -0.001978f, +0.001531f, -0.000322f, +0.000683f, +0.000052f, +0.000649f, + -0.001025f, -0.000779f, +0.000039f, -0.000127f, +0.000308f, +0.000440f, +0.000038f, -0.000067f, -0.000215f, +0.000578f, + +0.000364f, +0.000214f, -0.000856f, +0.000026f, +0.000577f, +0.000077f, -0.000052f, +0.000148f, +0.000165f, -0.000239f, + +0.000444f, +0.000164f, -0.000540f, -0.000272f, +0.000139f, -0.000097f + }, + { + +0.001471f, +0.008540f, +0.001637f, +0.000145f, -0.001429f, +0.002493f, +0.001617f, +0.000589f, -0.006637f, +0.000347f, + +0.004825f, -0.002816f, +0.005657f, +0.002139f, -0.010831f, -0.004407f, -0.011000f, -0.019888f, +0.007505f, -0.007143f, + -0.016991f, +0.009874f, -0.006498f, +0.009180f, -0.005848f, -0.012969f, +0.006596f, -0.006208f, -0.008722f, -0.007658f, + +0.005772f, -0.003021f, -0.001254f, +0.003683f, +0.008040f, -0.000430f, -0.001257f, +0.002485f, +0.003949f, +0.007250f, + -0.002182f, -0.004972f, -0.003298f, +0.002563f, +0.000081f, +0.004184f, +0.002295f, +0.001736f, -0.006055f, +0.003480f, + +0.000258f, +0.000026f, +0.000806f, +0.002915f, -0.003490f, +0.001021f, +0.001968f, -0.003621f, +0.000107f, +0.000659f, + -0.000406f, -0.002289f, -0.000336f, -0.000577f, -0.002179f, +0.000103f, +0.000185f, +0.000182f, -0.000518f, -0.001510f, + +0.000399f, -0.000782f, -0.000187f, -0.000454f, -0.000825f, -0.000211f, -0.000495f, -0.000027f, -0.001049f, +0.000148f, + +0.000405f, -0.000220f, +0.000301f, +0.000409f, -0.000517f, -0.000048f, -0.000035f, +0.000201f, -0.000621f, -0.000125f, + +0.000346f, +0.000004f, +0.000072f, +0.000386f, -0.000221f, -0.000006f + }, + { + +0.013075f, -0.318201f, +0.038165f, -0.013414f, +0.004767f, -0.029025f, +0.015791f, -0.003999f, +0.006311f, -0.011282f, + -0.006004f, +0.010671f, +0.006676f, -0.004888f, +0.004275f, -0.014106f, -0.007590f, -0.005524f, -0.017842f, +0.002592f, + +0.003785f, -0.005465f, -0.010547f, -0.002593f, -0.004543f, -0.001907f, -0.000273f, +0.003802f, -0.003599f, +0.002721f, + +0.011757f, +0.006107f, -0.001004f, -0.000320f, -0.000873f, +0.000871f, -0.003056f, +0.004132f, -0.004163f, +0.009367f, + -0.001193f, -0.002059f, +0.001634f, -0.000416f, +0.006692f, -0.003102f, -0.000055f, -0.002298f, +0.000146f, +0.000632f, + +0.000111f, -0.000456f, -0.000886f, +0.000963f, +0.001796f, -0.000869f, -0.002921f, -0.000903f, +0.001641f, -0.003675f, + +0.000743f, -0.001268f, -0.003086f, +0.002101f, +0.000082f, -0.001943f, -0.000114f, +0.000564f, -0.001535f, +0.000344f, + -0.001138f, +0.000698f, +0.000681f, -0.000760f, -0.001602f, +0.000124f, -0.000039f, -0.000194f, +0.000954f, -0.000319f, + +0.001244f, -0.000093f, +0.000174f, -0.000581f, +0.000065f, -0.000195f, +0.000500f, +0.000240f, +0.000007f, -0.000220f, + +0.000036f, -0.000073f, +0.000459f, -0.000213f, -0.000071f, +0.000131f + }, + { + -0.000761f, -0.055112f, -0.008907f, +0.006234f, -0.001005f, -0.003364f, -0.003220f, +0.003969f, +0.005714f, -0.001000f, + -0.003231f, +0.003752f, +0.012067f, +0.005108f, +0.013890f, -0.011480f, +0.012319f, -0.015337f, +0.001120f, -0.021046f, + +0.016491f, -0.001544f, -0.000276f, -0.002602f, +0.003855f, +0.009148f, -0.001953f, +0.000691f, -0.001725f, +0.001463f, + -0.006847f, -0.007109f, +0.004080f, -0.003979f, -0.001092f, -0.002151f, +0.002577f, +0.005598f, +0.001330f, +0.003101f, + +0.003520f, +0.002087f, +0.002588f, +0.000438f, -0.000037f, +0.000886f, -0.001378f, -0.000401f, -0.001780f, +0.001656f, + -0.003352f, +0.001569f, -0.000623f, -0.001104f, -0.001446f, +0.003286f, -0.002153f, -0.002092f, -0.001442f, -0.000699f, + +0.001095f, +0.000474f, -0.001171f, +0.001101f, +0.000245f, +0.000048f, +0.000296f, +0.000578f, -0.001354f, -0.000205f, + +0.000881f, -0.000261f, -0.000312f, -0.000471f, -0.000002f, -0.000162f, -0.000321f, +0.000663f, -0.000509f, +0.000205f, + +0.000137f, +0.000419f, -0.000033f, -0.000146f, +0.000002f, +0.000199f, +0.000333f, +0.000309f, -0.000249f, +0.000030f, + -0.000559f, -0.000326f, -0.000264f, -0.000192f, +0.000006f, -0.000547f + }, + { + -0.024163f, -0.216371f, +0.044814f, -0.008236f, -0.007880f, -0.008576f, +0.002167f, -0.010117f, -0.007201f, +0.005088f, + -0.007423f, -0.009104f, +0.013586f, +0.012252f, +0.022825f, -0.009884f, +0.006878f, -0.000006f, +0.008192f, -0.007756f, + -0.006218f, +0.007658f, -0.005867f, -0.005288f, -0.002782f, +0.004625f, -0.002919f, +0.000383f, -0.001691f, -0.001967f, + +0.004405f, +0.001680f, -0.001651f, +0.002129f, -0.000329f, -0.005498f, +0.000022f, +0.002384f, -0.000427f, +0.003729f, + -0.000915f, +0.002156f, -0.006886f, -0.002761f, +0.001349f, -0.000263f, +0.001141f, -0.004112f, +0.000880f, -0.000383f, + +0.000838f, +0.000594f, +0.000046f, +0.000481f, +0.000003f, +0.000749f, -0.003839f, +0.000245f, +0.000856f, -0.001172f, + -0.003182f, -0.001467f, +0.000049f, -0.000932f, +0.001404f, +0.000501f, +0.000897f, +0.000262f, +0.001408f, +0.001315f, + +0.000308f, +0.000049f, -0.000915f, -0.000426f, +0.000813f, +0.000633f, +0.000236f, -0.000147f, -0.000477f, +0.000239f, + +0.001053f, +0.000983f, +0.000407f, -0.000428f, -0.000480f, -0.000044f, -0.000276f, -0.000029f, +0.000095f, +0.001024f, + +0.000389f, +0.000015f, -0.000020f, +0.000322f, -0.000151f, +0.000030f + }, + { + -0.002341f, +0.022747f, -0.000169f, +0.003809f, -0.011431f, -0.000359f, -0.001136f, +0.001091f, +0.001140f, +0.006697f, + -0.001938f, -0.004524f, +0.020791f, +0.051624f, +0.003124f, -0.009457f, +0.002729f, +0.012685f, +0.014904f, +0.005657f, + -0.010721f, +0.024581f, +0.041126f, -0.031822f, -0.005018f, -0.004889f, +0.013663f, -0.007902f, -0.008398f, -0.006439f, + -0.001424f, +0.003525f, -0.006221f, -0.001703f, +0.004404f, -0.007110f, +0.002832f, +0.001078f, -0.005485f, -0.001050f, + +0.001438f, +0.001483f, +0.003222f, +0.000815f, -0.001731f, -0.001204f, -0.003184f, -0.000779f, +0.002018f, +0.000190f, + +0.001859f, +0.001936f, -0.001480f, -0.001270f, -0.002493f, -0.002154f, -0.002190f, +0.001238f, +0.001389f, -0.001199f, + +0.001605f, -0.000177f, +0.000289f, -0.000959f, +0.000090f, +0.000334f, -0.000340f, +0.000043f, -0.000310f, -0.000500f, + +0.001373f, -0.000968f, +0.000145f, +0.000312f, +0.000688f, -0.000185f, +0.000155f, -0.000367f, +0.000317f, -0.000746f, + -0.000161f, -0.000065f, +0.000178f, +0.000255f, +0.000331f, -0.000011f, +0.000387f, +0.000044f, -0.000617f, -0.000608f, + +0.000158f, +0.000565f, -0.000033f, +0.000244f, +0.000287f, +0.000092f + }, + { + -0.037066f, -0.039013f, -0.003781f, -0.009670f, -0.000597f, -0.001216f, +0.003402f, -0.008995f, +0.025002f, -0.001416f, + +0.009693f, -0.000527f, +0.009757f, -0.043675f, +0.013758f, +0.000815f, +0.012772f, +0.002921f, +0.003496f, -0.004792f, + +0.005641f, -0.004531f, -0.002073f, +0.000615f, -0.007136f, -0.000301f, +0.002112f, -0.012820f, +0.002209f, +0.000940f, + +0.001376f, +0.001123f, +0.004419f, +0.004377f, -0.000232f, -0.002119f, +0.001744f, +0.000321f, -0.000804f, -0.001566f, + -0.001142f, -0.006323f, -0.003596f, -0.004211f, -0.002556f, +0.000264f, -0.000434f, +0.002500f, -0.003645f, -0.000008f, + +0.001748f, -0.001717f, -0.003143f, +0.001353f, +0.001876f, -0.001510f, -0.001119f, -0.000059f, -0.000864f, -0.001800f, + +0.000056f, +0.001352f, +0.000247f, -0.001216f, +0.000173f, +0.000537f, +0.000498f, -0.000202f, +0.000565f, +0.000257f, + -0.000546f, +0.002088f, -0.000781f, +0.001319f, -0.000888f, +0.000480f, -0.000244f, +0.000385f, +0.000196f, +0.001020f, + +0.000429f, -0.000342f, -0.000164f, -0.000499f, +0.000094f, -0.000374f, +0.000034f, +0.000350f, +0.000051f, +0.000455f, + +0.000060f, +0.000001f, +0.000128f, +0.000364f, -0.000194f, -0.000605f + }, + { + -0.000288f, -0.007050f, +0.005584f, -0.002820f, +0.001621f, -0.001506f, -0.000837f, -0.002630f, -0.004291f, +0.004076f, + -0.005596f, +0.006482f, +0.007268f, +0.035590f, +0.125959f, +0.026976f, +0.007435f, -0.002172f, +0.011383f, +0.015124f, + +0.003199f, -0.010258f, -0.015519f, +0.000723f, -0.010724f, +0.012935f, -0.006019f, -0.007918f, +0.002140f, -0.000119f, + -0.005045f, +0.003406f, +0.006192f, +0.000012f, +0.003911f, -0.003270f, +0.002041f, -0.007839f, -0.005556f, -0.000581f, + +0.001407f, -0.002243f, +0.001391f, +0.003149f, +0.002004f, -0.003722f, +0.002955f, +0.000202f, -0.000944f, +0.001524f, + -0.001213f, -0.001605f, -0.001509f, +0.001908f, +0.000529f, +0.001327f, +0.000932f, -0.002728f, +0.000914f, +0.000559f, + -0.000756f, -0.002711f, +0.001060f, -0.000414f, -0.001070f, -0.002391f, -0.001809f, +0.000356f, -0.000080f, -0.001200f, + +0.000273f, +0.000683f, -0.001680f, -0.000844f, -0.000260f, +0.000267f, -0.000038f, +0.000760f, +0.000235f, -0.000073f, + +0.000612f, -0.000165f, -0.000368f, -0.000130f, -0.000395f, +0.000323f, +0.000287f, +0.000214f, +0.000236f, +0.000262f, + +0.000459f, +0.000033f, -0.000279f, +0.000508f, -0.000295f, +0.000018f + } + }, + { + { + +0.023591f, +0.228810f, -0.004306f, +0.028723f, +0.007933f, +0.005487f, +0.005442f, +0.003351f, +0.004493f, -0.003746f, + -0.007234f, -0.003040f, -0.002289f, +0.002202f, -0.003271f, +0.017921f, -0.007510f, +0.008438f, -0.007806f, +0.011571f, + -0.007174f, -0.002774f, -0.009632f, +0.000021f, +0.003274f, +0.005498f, -0.001006f, +0.001924f, -0.000252f, +0.010370f, + -0.005089f, -0.001034f, +0.009967f, +0.003679f, +0.013264f, -0.000711f, +0.002874f, +0.007269f, +0.003514f, +0.002116f, + +0.001885f, -0.004226f, -0.003281f, +0.003373f, +0.003837f, +0.002274f, -0.000174f, -0.000784f, -0.001186f, +0.000158f, + -0.000263f, -0.000274f, +0.000715f, -0.000940f, +0.001716f, +0.000963f, +0.002585f, +0.000286f, +0.001432f, -0.000419f, + -0.000302f, +0.000644f, -0.001626f, -0.001545f, -0.001198f, -0.000160f, +0.000423f, -0.000033f, -0.000926f, +0.000035f, + -0.000911f, +0.001384f, -0.000368f, +0.000092f, +0.001252f, +0.001048f, +0.000451f, -0.000796f, -0.000674f, +0.000659f, + +0.000180f, +0.000661f, +0.000127f, +0.000183f, +0.000586f, +0.000271f, +0.000722f, +0.000209f, -0.000081f, -0.000002f, + -0.000560f, +0.000313f, +0.000456f, -0.000284f, +0.000386f, -0.000015f + }, + { + +0.000154f, -0.125189f, -0.007962f, +0.011190f, -0.000076f, -0.001134f, +0.006797f, -0.000920f, +0.005174f, +0.006322f, + -0.000387f, -0.004106f, -0.003096f, -0.011969f, +0.004687f, -0.023264f, -0.003014f, +0.010552f, -0.009918f, +0.003531f, + +0.011842f, -0.024620f, -0.006863f, +0.003586f, +0.013809f, -0.000194f, -0.003199f, -0.016796f, -0.009194f, +0.001511f, + +0.002251f, -0.001186f, -0.001411f, +0.001722f, +0.000661f, +0.009524f, +0.007208f, +0.002094f, +0.004516f, -0.002066f, + -0.000093f, +0.006293f, +0.002230f, +0.000057f, -0.007388f, +0.006013f, +0.000327f, -0.000805f, -0.003494f, -0.000781f, + +0.002171f, -0.001375f, +0.001757f, -0.002995f, +0.002869f, -0.002129f, +0.001775f, +0.000916f, -0.003438f, -0.001397f, + -0.000175f, +0.000062f, -0.000014f, -0.000362f, -0.000050f, +0.001866f, +0.001128f, +0.000304f, -0.000849f, +0.000770f, + -0.000571f, +0.000560f, +0.000053f, -0.000061f, +0.000752f, +0.000745f, -0.000497f, -0.000586f, +0.000791f, -0.000037f, + +0.000767f, -0.000197f, +0.000190f, +0.000353f, +0.000171f, -0.000528f, -0.000044f, +0.000966f, +0.000500f, +0.000361f, + -0.000112f, -0.000053f, +0.000027f, +0.000111f, -0.000155f, -0.000063f + }, + { + -0.008018f, +0.013408f, +0.068933f, +0.023311f, +0.000546f, -0.004715f, +0.004234f, +0.002848f, -0.002970f, -0.003451f, + -0.005758f, -0.004451f, +0.006001f, +0.004367f, -0.004990f, -0.024828f, +0.012956f, -0.017090f, -0.004392f, +0.007960f, + -0.009693f, -0.008064f, +0.007167f, +0.008849f, -0.000595f, +0.000445f, +0.011778f, +0.002274f, +0.002324f, +0.002417f, + +0.000158f, +0.002051f, -0.003215f, +0.004151f, +0.005697f, -0.003503f, -0.000857f, -0.005231f, -0.002516f, -0.000808f, + +0.002886f, +0.002093f, -0.000474f, +0.001628f, -0.001735f, +0.007459f, +0.000834f, +0.001329f, +0.001862f, +0.000887f, + -0.000170f, +0.000622f, +0.001965f, -0.000527f, +0.000590f, -0.001961f, -0.001130f, +0.001847f, +0.001113f, -0.001314f, + -0.000132f, +0.001043f, -0.000571f, -0.001299f, +0.001293f, -0.000082f, -0.000988f, -0.000279f, +0.000263f, -0.000628f, + -0.000215f, +0.001554f, +0.000672f, -0.000923f, -0.000910f, -0.001269f, +0.000518f, -0.000008f, -0.000224f, +0.000363f, + +0.000658f, -0.000542f, +0.000027f, +0.000115f, +0.000133f, -0.000873f, -0.000024f, +0.000353f, +0.000574f, +0.000482f, + -0.000065f, +0.000266f, -0.000398f, -0.000507f, -0.000153f, +0.000056f + }, + { + +0.014129f, +0.310063f, -0.006973f, +0.009096f, -0.007591f, +0.003474f, +0.001705f, -0.000891f, -0.008516f, -0.006094f, + -0.000865f, +0.004147f, +0.005121f, +0.008266f, -0.003646f, -0.001832f, +0.003625f, -0.025872f, -0.000000f, -0.004497f, + -0.000293f, +0.002285f, -0.006226f, -0.005441f, +0.000488f, -0.004931f, +0.001645f, -0.004057f, +0.003802f, +0.001495f, + +0.005813f, +0.008101f, -0.001385f, -0.002033f, -0.003167f, -0.005259f, +0.003092f, +0.000064f, +0.001870f, +0.000817f, + +0.002221f, -0.001620f, +0.000314f, +0.000898f, +0.003325f, -0.000789f, +0.004079f, -0.001281f, -0.001222f, +0.001581f, + -0.000581f, -0.002073f, -0.002896f, +0.001704f, +0.000330f, -0.000756f, -0.000563f, -0.002138f, +0.000331f, -0.000876f, + -0.000934f, -0.000171f, +0.001935f, -0.000248f, -0.000127f, +0.000701f, -0.000555f, +0.000648f, -0.000397f, -0.001055f, + -0.000692f, -0.001282f, +0.000185f, -0.001368f, -0.000013f, +0.000502f, +0.000431f, +0.000339f, +0.000280f, +0.000585f, + +0.000677f, +0.000047f, +0.000479f, -0.000126f, +0.000167f, +0.000441f, -0.000105f, +0.000089f, -0.000017f, +0.000132f, + +0.000160f, -0.000418f, +0.000022f, +0.000033f, +0.000103f, +0.000053f + }, + { + +0.002949f, +0.009898f, -0.015371f, +0.000958f, -0.000633f, +0.000156f, -0.001974f, -0.002007f, +0.000313f, -0.000809f, + +0.001802f, +0.002746f, -0.007868f, -0.003190f, -0.037331f, +0.004021f, +0.021735f, +0.078819f, +0.019358f, -0.004299f, + +0.004825f, -0.033705f, +0.020718f, -0.001348f, -0.003002f, -0.008132f, -0.000761f, -0.000088f, +0.004458f, -0.001785f, + +0.003276f, +0.005657f, +0.003525f, +0.008084f, +0.004187f, +0.003147f, +0.000580f, -0.007191f, -0.002737f, +0.002645f, + -0.001234f, +0.000895f, +0.002551f, -0.000077f, +0.003871f, -0.001245f, +0.001692f, +0.001198f, -0.002873f, +0.004967f, + -0.001462f, -0.003450f, -0.003574f, -0.000707f, -0.000568f, -0.001076f, -0.002797f, +0.000257f, +0.002316f, +0.001183f, + -0.002758f, -0.000869f, -0.000669f, -0.001574f, +0.000392f, +0.001266f, -0.001214f, +0.000456f, -0.000348f, +0.000659f, + -0.000495f, +0.000736f, -0.000681f, +0.000045f, -0.000616f, +0.000486f, +0.000181f, +0.000108f, +0.000632f, -0.000050f, + +0.000361f, -0.000918f, +0.000416f, +0.000428f, +0.000064f, -0.000136f, -0.000018f, -0.000294f, +0.000133f, +0.000007f, + -0.000026f, +0.000094f, +0.000263f, -0.000416f, -0.000454f, +0.000359f + }, + { + +0.054074f, +0.369927f, -0.016836f, +0.000244f, -0.005532f, +0.002072f, +0.000894f, +0.010284f, +0.002457f, +0.000363f, + -0.006014f, -0.009492f, +0.002190f, +0.005916f, -0.000356f, +0.000389f, +0.000253f, -0.000896f, -0.000670f, +0.001279f, + +0.012847f, +0.005104f, -0.005051f, -0.004987f, -0.002688f, -0.000295f, +0.003280f, -0.002694f, +0.000480f, +0.003711f, + +0.008929f, -0.003014f, +0.001384f, +0.000004f, -0.002196f, +0.001814f, -0.000921f, +0.001721f, +0.003425f, +0.003104f, + -0.000066f, -0.000537f, -0.006230f, -0.002777f, +0.001975f, -0.001480f, +0.003550f, -0.000939f, +0.003250f, +0.004097f, + +0.000250f, -0.001575f, +0.000547f, +0.001204f, -0.002966f, -0.001302f, +0.001519f, -0.000360f, +0.001677f, -0.001052f, + -0.000262f, -0.000183f, +0.001125f, -0.001574f, -0.000490f, +0.000630f, +0.000303f, +0.000072f, -0.001304f, -0.000458f, + +0.000343f, -0.000581f, +0.000044f, +0.000580f, -0.000899f, +0.000186f, -0.000109f, +0.000558f, +0.000468f, -0.000776f, + -0.001115f, +0.000077f, +0.000577f, +0.000663f, +0.000355f, +0.000168f, -0.000110f, +0.000114f, +0.000402f, +0.000322f, + -0.000014f, -0.000184f, -0.000238f, -0.000204f, +0.000012f, -0.000101f + }, + { + -0.000085f, -0.004074f, +0.006675f, -0.002459f, +0.000607f, +0.000567f, -0.001972f, +0.001596f, -0.001821f, +0.000181f, + +0.003990f, -0.002064f, +0.014129f, -0.014129f, +0.001359f, +0.008383f, -0.012206f, +0.000396f, +0.003694f, +0.000613f, + +0.010120f, +0.000027f, -0.029260f, -0.008603f, -0.005362f, +0.002676f, +0.004352f, +0.014492f, +0.001844f, +0.002267f, + +0.003073f, +0.012625f, -0.009008f, -0.000898f, +0.004031f, +0.005775f, -0.004863f, -0.001536f, -0.001768f, -0.001846f, + +0.001406f, -0.001469f, -0.000420f, -0.001087f, -0.000640f, -0.001184f, -0.003339f, -0.001892f, -0.002689f, -0.001466f, + -0.000057f, -0.000938f, +0.003455f, -0.001373f, -0.000158f, +0.000591f, -0.000958f, -0.000737f, +0.001884f, +0.000776f, + -0.000924f, +0.000560f, -0.000584f, -0.000648f, +0.000957f, -0.000659f, +0.000586f, +0.001188f, +0.000429f, +0.000072f, + +0.000415f, +0.000381f, +0.000457f, -0.000013f, -0.000213f, +0.000729f, -0.000440f, +0.000608f, +0.000170f, +0.000127f, + -0.000206f, +0.000604f, -0.000293f, -0.000260f, -0.000461f, -0.000170f, +0.000372f, +0.000029f, -0.000269f, -0.000152f, + -0.000141f, -0.000071f, -0.000249f, -0.000003f, -0.000320f, -0.000243f + }, + { + -0.054152f, -0.350359f, +0.018922f, -0.005012f, -0.003744f, -0.001240f, -0.004088f, +0.002172f, -0.007133f, +0.008238f, + +0.007132f, +0.001682f, +0.003391f, +0.011946f, +0.038365f, -0.001582f, +0.000658f, +0.003481f, -0.004140f, +0.012574f, + +0.003489f, -0.003385f, -0.003481f, +0.003005f, -0.005345f, -0.003096f, +0.000839f, +0.007637f, +0.001726f, +0.004613f, + -0.004602f, +0.006788f, -0.006792f, +0.001441f, +0.006420f, -0.014723f, +0.005108f, -0.002942f, +0.001635f, +0.005839f, + -0.002221f, -0.001863f, +0.005197f, +0.002513f, +0.003330f, -0.007510f, -0.004190f, +0.001190f, -0.002118f, +0.001281f, + +0.000404f, -0.002575f, -0.002988f, +0.002144f, +0.003399f, +0.000993f, +0.000580f, -0.000613f, -0.000176f, -0.002204f, + -0.000590f, -0.000142f, +0.000446f, -0.000630f, -0.001701f, +0.000717f, +0.000506f, +0.000482f, +0.000103f, -0.000385f, + -0.000323f, -0.000469f, +0.000045f, +0.000341f, +0.000401f, -0.000336f, +0.000303f, +0.000359f, +0.000026f, +0.000250f, + +0.000538f, -0.000220f, -0.000521f, -0.000330f, -0.000018f, +0.000826f, -0.000312f, +0.000389f, +0.000012f, +0.000075f, + -0.000181f, +0.000475f, -0.000371f, -0.000279f, +0.000183f, -0.000239f + }, + { + +0.000548f, +0.006137f, +0.009450f, -0.001450f, +0.001754f, +0.000813f, +0.000212f, -0.002358f, +0.000511f, +0.000780f, + -0.000462f, +0.000970f, +0.002235f, -0.001525f, -0.007862f, -0.002333f, -0.024877f, -0.005406f, -0.005569f, -0.008434f, + -0.007468f, +0.004537f, +0.008427f, -0.013682f, +0.010037f, -0.017569f, -0.012176f, +0.011566f, -0.011741f, -0.010629f, + +0.008508f, -0.001730f, -0.002325f, +0.004269f, +0.005283f, +0.005019f, -0.003092f, +0.003917f, +0.002030f, +0.005165f, + +0.000185f, -0.005279f, -0.001862f, +0.001910f, +0.003035f, +0.001577f, +0.003029f, -0.001382f, -0.001019f, +0.000542f, + -0.000509f, +0.000075f, +0.000572f, +0.001377f, -0.000695f, +0.000702f, +0.000358f, -0.000305f, -0.002648f, -0.000301f, + +0.000149f, -0.000705f, -0.000750f, -0.001133f, -0.002502f, +0.000179f, -0.000155f, +0.000360f, +0.000342f, -0.002756f, + +0.000296f, -0.001830f, -0.000192f, +0.000064f, -0.001142f, -0.000217f, -0.000799f, +0.000277f, -0.000953f, +0.000259f, + +0.000139f, -0.000090f, +0.000166f, +0.000177f, -0.000697f, +0.000165f, +0.000123f, +0.000263f, -0.000492f, +0.000003f, + +0.000249f, +0.000276f, +0.000074f, +0.000503f, -0.000184f, -0.000055f + }, + { + -0.009560f, -0.267454f, -0.006743f, -0.003973f, -0.007910f, +0.000202f, -0.001483f, +0.006833f, -0.011083f, -0.000192f, + -0.002682f, +0.002472f, +0.007210f, +0.000144f, -0.010385f, +0.000614f, -0.013306f, -0.013515f, +0.008423f, -0.020252f, + +0.003756f, +0.000316f, -0.007767f, -0.005668f, +0.005810f, -0.007014f, -0.002647f, +0.002047f, -0.005650f, +0.006244f, + +0.009683f, +0.010647f, -0.004215f, -0.003460f, +0.004441f, -0.008740f, +0.001031f, +0.004321f, -0.000081f, +0.008903f, + -0.002221f, -0.001227f, +0.001179f, -0.001459f, +0.001545f, +0.001057f, +0.001982f, -0.002309f, -0.001668f, +0.001776f, + -0.000431f, -0.000130f, +0.001702f, +0.003069f, -0.001344f, -0.001371f, -0.001527f, -0.000010f, -0.000061f, -0.002389f, + -0.000077f, -0.001295f, -0.001574f, -0.000086f, +0.000780f, +0.000244f, -0.001188f, +0.000191f, -0.000473f, -0.000600f, + -0.000797f, +0.001267f, -0.000156f, -0.001293f, -0.000652f, +0.000359f, -0.000169f, -0.000436f, +0.000165f, +0.000389f, + +0.000360f, +0.000527f, -0.000380f, +0.000142f, -0.000262f, -0.000137f, +0.000845f, +0.000376f, +0.000082f, +0.000195f, + -0.000368f, -0.000335f, +0.000156f, +0.000434f, -0.000216f, +0.000055f + }, + { + +0.001055f, -0.036664f, -0.018671f, +0.006772f, -0.003874f, -0.001674f, +0.000248f, +0.003109f, +0.003606f, +0.000129f, + -0.000668f, +0.002924f, +0.011966f, +0.003228f, +0.013059f, -0.006079f, -0.002845f, -0.001926f, -0.001254f, -0.007463f, + +0.007140f, -0.000289f, +0.002906f, +0.001764f, -0.004861f, +0.011093f, +0.005931f, -0.002740f, -0.001383f, -0.007998f, + -0.005015f, -0.002294f, +0.001869f, -0.000500f, -0.005150f, +0.001371f, +0.000892f, +0.004843f, +0.001458f, +0.005110f, + -0.003335f, +0.003690f, +0.003828f, -0.000465f, +0.002979f, -0.000722f, +0.000026f, -0.001370f, -0.000470f, +0.000286f, + -0.001810f, +0.000536f, +0.000835f, -0.001234f, -0.000475f, -0.000011f, -0.000635f, -0.001361f, -0.000247f, -0.001665f, + +0.000747f, +0.000124f, +0.000050f, +0.000144f, +0.001568f, -0.000538f, +0.000542f, +0.000524f, -0.000958f, -0.000027f, + -0.000452f, -0.000127f, -0.001071f, +0.000225f, +0.000106f, -0.000050f, -0.000615f, +0.000520f, +0.000090f, -0.000080f, + -0.000074f, +0.000335f, +0.000361f, -0.000284f, -0.000230f, +0.000351f, -0.000052f, +0.000220f, -0.000324f, -0.000293f, + -0.000171f, -0.000378f, -0.000249f, -0.000273f, +0.000153f, -0.000428f + }, + { + -0.015037f, -0.191090f, +0.011149f, -0.000383f, -0.003729f, -0.002769f, -0.009076f, -0.004991f, +0.000151f, -0.000696f, + -0.011122f, -0.010903f, +0.023013f, +0.005789f, +0.005696f, +0.004750f, -0.002593f, +0.003982f, +0.003935f, -0.000520f, + -0.005870f, -0.000751f, +0.000433f, -0.004078f, -0.005632f, -0.002034f, +0.000103f, +0.000525f, -0.003238f, +0.002608f, + -0.000811f, +0.009519f, -0.006967f, +0.004658f, -0.001622f, -0.008747f, -0.000008f, -0.001361f, +0.001478f, +0.000698f, + +0.003631f, +0.002668f, -0.006353f, -0.007944f, +0.002914f, -0.000784f, -0.000551f, -0.003256f, +0.002201f, -0.002601f, + +0.000319f, +0.001331f, +0.000162f, +0.002491f, -0.000101f, -0.001589f, -0.001846f, -0.000664f, -0.000591f, -0.000507f, + -0.001276f, -0.002598f, -0.000488f, +0.000678f, +0.000092f, +0.000703f, +0.000874f, +0.000448f, +0.001058f, +0.000931f, + +0.000212f, +0.000597f, -0.001123f, -0.000065f, -0.000169f, +0.001383f, +0.000179f, -0.000292f, -0.000257f, +0.000545f, + +0.000615f, +0.000709f, +0.000591f, +0.000037f, -0.000966f, -0.000239f, -0.000077f, +0.000264f, +0.000390f, +0.000417f, + +0.000598f, +0.000186f, +0.000331f, +0.000131f, -0.000208f, -0.000070f + }, + { + +0.001844f, +0.027565f, -0.000837f, +0.002817f, -0.008504f, -0.004556f, -0.002210f, +0.002755f, +0.004349f, +0.005507f, + +0.001397f, -0.006419f, +0.002531f, +0.088887f, -0.011654f, +0.005313f, -0.005529f, +0.013557f, +0.004988f, +0.001208f, + +0.016278f, +0.002943f, +0.032431f, -0.019741f, -0.006200f, -0.002814f, +0.010030f, -0.000971f, -0.018793f, +0.000432f, + +0.000688f, +0.002247f, -0.004711f, -0.004649f, +0.006043f, -0.009039f, +0.001976f, +0.004489f, -0.010796f, +0.004611f, + -0.000676f, +0.003538f, +0.004141f, -0.001026f, -0.000724f, +0.000980f, -0.004176f, +0.001978f, -0.003049f, +0.003062f, + +0.002450f, +0.000468f, +0.002659f, -0.003929f, -0.001350f, -0.001675f, +0.000026f, -0.001271f, +0.002919f, -0.002224f, + +0.001249f, +0.000468f, +0.000979f, -0.001350f, -0.000581f, +0.000824f, +0.000202f, +0.000424f, -0.000421f, -0.000386f, + +0.000239f, -0.000315f, -0.000061f, +0.000497f, +0.000318f, +0.000313f, +0.001038f, -0.000287f, -0.000476f, +0.000020f, + -0.000510f, -0.000045f, -0.000014f, +0.000007f, +0.000221f, +0.000108f, +0.000068f, -0.000062f, -0.000038f, -0.000643f, + +0.000378f, +0.000278f, +0.000323f, +0.000084f, +0.000291f, +0.000392f + }, + { + +0.019001f, -0.116802f, -0.005707f, -0.006226f, -0.005539f, +0.005922f, -0.007607f, +0.002610f, +0.013067f, +0.001258f, + +0.009853f, +0.003850f, -0.008674f, +0.012058f, -0.046026f, -0.003739f, +0.014562f, +0.005259f, -0.003400f, +0.003663f, + +0.001983f, -0.003325f, +0.005740f, -0.007331f, +0.000005f, -0.002399f, +0.000854f, -0.004496f, -0.005976f, +0.005659f, + +0.002200f, +0.001389f, +0.002429f, +0.006241f, -0.005314f, -0.000996f, -0.000751f, +0.003847f, -0.001617f, -0.002794f, + -0.001083f, -0.002183f, -0.008816f, -0.002689f, -0.000385f, -0.001716f, +0.000286f, -0.001829f, -0.000944f, +0.000972f, + +0.000723f, -0.001908f, +0.000326f, +0.001961f, -0.001313f, -0.001546f, -0.000703f, -0.000662f, -0.001173f, -0.002270f, + -0.000272f, +0.001031f, +0.000149f, -0.000839f, -0.000207f, +0.000045f, +0.000354f, +0.000333f, +0.000317f, +0.000175f, + +0.000082f, +0.000459f, -0.000056f, +0.001443f, -0.000447f, +0.000989f, -0.000513f, -0.000009f, -0.000064f, +0.000600f, + +0.000489f, +0.000221f, -0.000907f, +0.000024f, -0.000245f, -0.000560f, +0.000197f, +0.000196f, +0.000222f, +0.000276f, + -0.000045f, +0.000179f, -0.000118f, +0.000404f, -0.000025f, -0.000146f + }, + { + -0.000004f, -0.003026f, -0.001512f, -0.002758f, +0.003724f, -0.000095f, -0.002707f, +0.000086f, -0.002512f, -0.003134f, + +0.002498f, -0.001710f, +0.012133f, +0.037835f, +0.108205f, +0.028430f, +0.001943f, +0.000568f, +0.013595f, +0.014229f, + -0.000244f, -0.012215f, -0.006854f, -0.002020f, -0.005505f, +0.003766f, -0.004566f, -0.001338f, +0.004391f, +0.000271f, + -0.004949f, +0.000102f, +0.002793f, +0.005331f, +0.002008f, -0.003908f, +0.002714f, -0.007341f, -0.001878f, +0.000932f, + -0.003933f, +0.004900f, +0.001237f, +0.001868f, +0.003055f, -0.002232f, +0.001411f, -0.001147f, -0.000216f, +0.000832f, + +0.000534f, -0.003620f, +0.000144f, +0.001463f, +0.000603f, +0.000423f, +0.002986f, -0.002647f, -0.000159f, +0.001253f, + +0.000898f, -0.001902f, -0.001004f, +0.000654f, -0.001675f, -0.001258f, -0.001179f, +0.000102f, -0.000492f, -0.000250f, + -0.000288f, -0.000319f, +0.000079f, -0.000561f, -0.000049f, -0.000316f, -0.000289f, +0.000561f, +0.000424f, +0.000123f, + -0.000101f, -0.000125f, -0.000559f, -0.000159f, -0.000291f, -0.000253f, +0.000422f, +0.000144f, +0.000185f, +0.000370f, + +0.000376f, -0.000013f, -0.000132f, +0.000043f, +0.000262f, -0.000152f + } + }, + { + { + -0.023114f, +0.254956f, -0.003339f, +0.000399f, +0.001715f, +0.000726f, -0.004521f, -0.006301f, -0.002792f, -0.003237f, + +0.005278f, +0.006484f, -0.004502f, +0.006152f, -0.015556f, +0.012724f, -0.004615f, -0.008058f, -0.009170f, +0.017400f, + -0.008021f, -0.001999f, -0.003682f, +0.000806f, -0.007064f, +0.002707f, -0.003624f, -0.000881f, +0.001356f, +0.008714f, + -0.003833f, +0.000759f, +0.004117f, -0.006274f, +0.007871f, -0.005175f, +0.000319f, +0.003769f, +0.001343f, -0.005269f, + -0.004330f, -0.003219f, -0.005141f, +0.000607f, +0.005060f, +0.003169f, +0.001681f, +0.000868f, +0.001525f, +0.002762f, + +0.001316f, +0.000175f, +0.001615f, -0.001060f, +0.001641f, +0.001193f, +0.000464f, -0.002239f, +0.002394f, +0.000506f, + -0.000196f, +0.002430f, +0.000114f, -0.001493f, -0.000043f, +0.000107f, +0.000267f, +0.000697f, -0.000194f, +0.000260f, + -0.001566f, +0.001358f, -0.000816f, +0.000334f, +0.001318f, +0.001026f, +0.000987f, -0.000010f, -0.000795f, +0.000368f, + -0.000288f, -0.000168f, -0.000444f, +0.000099f, +0.000562f, -0.000318f, +0.000269f, -0.000189f, -0.000245f, -0.000131f, + -0.000558f, +0.000019f, +0.000236f, -0.000370f, +0.000379f, -0.000165f + }, + { + +0.001021f, -0.045658f, +0.044494f, +0.008986f, +0.004163f, +0.000017f, +0.006121f, -0.003014f, +0.000885f, -0.001218f, + -0.000429f, +0.001191f, +0.001356f, +0.002174f, +0.024906f, -0.017541f, -0.001483f, -0.002327f, -0.020328f, +0.011349f, + +0.012430f, -0.013638f, -0.001779f, -0.003994f, +0.000881f, -0.004114f, +0.001548f, -0.006227f, -0.001732f, +0.000393f, + -0.001479f, +0.001030f, +0.002990f, +0.004933f, -0.003021f, +0.001672f, +0.001438f, +0.000700f, +0.000759f, -0.006768f, + -0.001365f, +0.006344f, +0.001369f, +0.001757f, -0.004557f, +0.004031f, -0.002992f, -0.001410f, -0.002483f, +0.000426f, + +0.002200f, -0.002934f, +0.001196f, -0.002233f, +0.002564f, -0.002418f, +0.000449f, -0.000046f, -0.001648f, +0.000562f, + -0.000842f, -0.001083f, +0.000236f, -0.000469f, -0.000041f, +0.001047f, -0.000398f, -0.000338f, -0.000320f, +0.001525f, + -0.000718f, +0.000340f, -0.000451f, -0.000350f, +0.000510f, +0.000395f, -0.000310f, -0.000665f, +0.000207f, -0.000268f, + +0.001013f, -0.000439f, +0.000329f, +0.000539f, -0.000121f, -0.000670f, -0.001021f, -0.000337f, -0.000413f, +0.000123f, + -0.000042f, +0.000221f, +0.000075f, +0.000259f, -0.000039f, -0.000097f + }, + { + +0.007386f, -0.152201f, -0.072098f, +0.018256f, +0.004925f, -0.002088f, +0.003246f, +0.004226f, -0.001142f, -0.001741f, + +0.001817f, -0.008494f, +0.002002f, +0.005027f, +0.002412f, -0.014106f, +0.010262f, -0.018408f, -0.002275f, +0.009736f, + -0.003519f, +0.001407f, +0.010120f, +0.006601f, -0.010424f, -0.005971f, +0.007951f, -0.004226f, -0.003031f, -0.000053f, + -0.004580f, -0.002276f, -0.006436f, -0.003415f, -0.000041f, -0.000484f, +0.002878f, -0.001941f, -0.002114f, -0.003220f, + +0.001057f, -0.002296f, -0.008920f, +0.001252f, -0.000133f, +0.007652f, -0.001925f, -0.001098f, -0.000339f, +0.000343f, + +0.000978f, -0.000034f, +0.000526f, -0.000809f, +0.001239f, -0.000009f, +0.000482f, +0.001152f, -0.000716f, -0.001892f, + +0.000178f, +0.001996f, -0.000706f, -0.001407f, +0.000635f, -0.001143f, -0.000460f, +0.000272f, -0.000340f, +0.000246f, + +0.000121f, +0.000877f, -0.000058f, -0.000950f, -0.000028f, +0.000182f, +0.000274f, -0.000363f, +0.000415f, -0.000046f, + +0.000582f, -0.000089f, +0.000394f, +0.000252f, +0.000337f, -0.000176f, +0.000102f, +0.000083f, -0.000229f, +0.000273f, + +0.000007f, +0.000123f, -0.000230f, -0.000195f, +0.000250f, +0.000130f + }, + { + -0.043024f, +0.254803f, +0.001396f, +0.006462f, -0.001530f, -0.001117f, -0.005166f, +0.000403f, -0.001305f, -0.000790f, + -0.002059f, +0.002719f, +0.006224f, -0.000434f, -0.015642f, +0.004857f, +0.004740f, -0.030007f, +0.004178f, -0.004250f, + +0.001842f, +0.003098f, -0.002881f, -0.005361f, +0.003207f, -0.002197f, -0.002598f, -0.008420f, -0.001366f, -0.006881f, + -0.001116f, +0.007195f, +0.001398f, +0.001890f, -0.001542f, -0.002825f, +0.003414f, +0.002078f, +0.000140f, -0.000514f, + +0.002046f, -0.003085f, -0.000419f, +0.001923f, -0.000877f, -0.005526f, +0.004312f, +0.001256f, +0.000198f, +0.000978f, + -0.000505f, +0.000619f, -0.000434f, +0.002738f, +0.002367f, -0.001098f, -0.001018f, -0.000125f, +0.000450f, +0.000511f, + +0.000565f, -0.000534f, +0.001081f, -0.000322f, +0.000691f, +0.000757f, -0.000919f, +0.001110f, +0.000089f, -0.000048f, + +0.000933f, -0.000124f, -0.000005f, -0.000736f, +0.000324f, +0.000352f, -0.000210f, -0.000656f, -0.000262f, -0.000096f, + +0.000547f, -0.000409f, +0.000001f, -0.000442f, +0.000006f, +0.000167f, -0.000219f, +0.000193f, -0.000440f, +0.000084f, + +0.000393f, -0.000275f, -0.000286f, -0.000136f, +0.000171f, +0.000073f + }, + { + -0.003034f, +0.037223f, +0.006753f, +0.000976f, +0.000507f, -0.000345f, -0.000570f, -0.000363f, +0.000324f, +0.001805f, + +0.001188f, -0.004062f, -0.012680f, +0.009918f, -0.016130f, -0.004221f, -0.024544f, -0.021729f, -0.019646f, +0.003134f, + +0.009065f, -0.036331f, +0.003375f, -0.005813f, +0.004737f, -0.003816f, +0.000055f, +0.005352f, +0.002352f, -0.005683f, + -0.004023f, +0.000158f, -0.005690f, +0.004019f, +0.007984f, +0.000899f, -0.002783f, -0.007276f, -0.005306f, -0.002923f, + -0.005799f, -0.003568f, +0.000419f, +0.000319f, +0.004107f, -0.000145f, +0.003050f, -0.001334f, -0.004971f, +0.003133f, + -0.001850f, -0.000548f, -0.001074f, +0.001207f, +0.001518f, +0.000736f, -0.001325f, -0.000897f, +0.001448f, +0.001693f, + -0.001547f, +0.000021f, +0.001074f, -0.000534f, +0.001097f, +0.001923f, -0.001813f, -0.000395f, -0.001195f, -0.000072f, + -0.000407f, +0.001465f, -0.000955f, -0.000484f, -0.000414f, -0.000187f, -0.000451f, +0.000222f, +0.000659f, -0.000452f, + -0.000096f, -0.000381f, +0.000556f, +0.000249f, +0.000362f, +0.000519f, +0.000529f, -0.000059f, -0.000069f, -0.000020f, + +0.000135f, -0.000062f, +0.000271f, +0.000119f, -0.000402f, +0.000162f + }, + { + -0.089444f, +0.234866f, +0.026615f, +0.012122f, +0.003324f, +0.000150f, -0.004568f, +0.008075f, +0.003767f, +0.002121f, + +0.006899f, +0.001137f, +0.009904f, +0.002863f, +0.000899f, -0.001587f, -0.004676f, -0.002180f, -0.001209f, -0.000483f, + +0.006068f, +0.005278f, -0.001020f, -0.002165f, -0.001780f, +0.000498f, -0.000018f, -0.004877f, +0.000922f, +0.003881f, + +0.009563f, -0.003236f, +0.001845f, -0.001436f, -0.000430f, +0.004030f, +0.000551f, -0.000034f, -0.002332f, -0.001846f, + -0.008480f, -0.002541f, -0.004445f, -0.005490f, +0.000690f, -0.001200f, +0.003356f, -0.003086f, -0.002775f, -0.000870f, + +0.001009f, -0.000408f, -0.001600f, +0.001891f, +0.001619f, +0.001981f, +0.003508f, +0.000747f, +0.002103f, -0.001589f, + -0.000751f, +0.000060f, +0.001238f, -0.000914f, +0.000835f, +0.000781f, +0.000190f, +0.000721f, -0.001061f, -0.000332f, + +0.000144f, -0.000344f, +0.000423f, -0.000778f, -0.001078f, +0.000198f, -0.000460f, +0.000457f, +0.000333f, -0.000495f, + -0.000964f, -0.000125f, +0.000182f, +0.000055f, -0.000088f, -0.000330f, +0.000019f, +0.000118f, +0.000180f, +0.000182f, + +0.000028f, -0.000037f, -0.000240f, -0.000077f, +0.000040f, -0.000216f + }, + { + -0.000586f, -0.018670f, +0.000209f, -0.000768f, -0.000041f, +0.000122f, -0.001653f, +0.002729f, +0.000134f, +0.000137f, + +0.002262f, +0.001992f, +0.013507f, -0.010982f, +0.017313f, +0.004963f, -0.021601f, -0.002864f, +0.016498f, +0.010889f, + +0.001935f, -0.006547f, -0.043242f, -0.007376f, -0.000773f, -0.001623f, -0.008202f, +0.008833f, -0.000230f, +0.000606f, + +0.000355f, +0.011508f, -0.007703f, -0.002584f, +0.003315f, +0.008029f, -0.001175f, +0.001846f, +0.001731f, +0.000515f, + +0.003153f, -0.000675f, -0.001264f, -0.002356f, -0.002492f, +0.000851f, +0.000265f, -0.001874f, -0.001827f, +0.000667f, + +0.000599f, -0.001724f, +0.002546f, +0.000576f, +0.002709f, +0.001459f, -0.000392f, +0.000190f, +0.001410f, -0.000873f, + -0.001693f, +0.000002f, -0.001203f, -0.001333f, -0.000143f, -0.001785f, +0.000208f, +0.000834f, +0.000432f, -0.000329f, + -0.000781f, -0.000329f, +0.001129f, +0.000247f, -0.000856f, +0.000702f, -0.000196f, +0.000565f, -0.000304f, +0.000232f, + -0.000420f, +0.000431f, +0.000192f, +0.000437f, -0.000093f, +0.000067f, +0.000386f, -0.000411f, -0.000138f, +0.000115f, + -0.000019f, +0.000341f, -0.000238f, +0.000023f, +0.000068f, +0.000033f + }, + { + +0.070691f, -0.255507f, -0.047525f, -0.001498f, +0.009793f, +0.000665f, -0.001643f, +0.001350f, -0.014363f, +0.003437f, + +0.001162f, -0.000275f, +0.000684f, +0.003499f, +0.027044f, -0.005523f, +0.002612f, +0.008015f, -0.002509f, +0.010793f, + +0.003281f, -0.001220f, -0.002429f, +0.004959f, -0.000236f, -0.003670f, -0.000324f, +0.009820f, +0.000042f, +0.001483f, + -0.005176f, +0.009302f, -0.009182f, -0.000353f, +0.003275f, -0.017043f, +0.007762f, -0.002042f, +0.001099f, +0.004714f, + -0.001840f, -0.000452f, +0.002953f, +0.001909f, +0.004585f, -0.000680f, -0.000754f, +0.002811f, -0.000170f, +0.000893f, + -0.000552f, -0.000509f, -0.002960f, +0.000885f, +0.002282f, -0.000572f, +0.000079f, -0.001312f, +0.002376f, -0.000353f, + -0.001379f, -0.001018f, +0.000519f, +0.001699f, -0.000131f, +0.001125f, +0.001663f, +0.000951f, +0.000119f, -0.000108f, + +0.000413f, +0.000562f, +0.000072f, -0.000023f, +0.000609f, -0.000057f, +0.000068f, +0.000008f, -0.000007f, -0.000266f, + -0.000314f, -0.000300f, +0.000283f, -0.000189f, -0.000350f, +0.000426f, -0.000734f, +0.000058f, -0.000063f, +0.000008f, + -0.000386f, +0.000363f, -0.000019f, -0.000052f, +0.000443f, +0.000126f + }, + { + -0.001625f, -0.013311f, -0.003499f, -0.003166f, +0.002674f, +0.000165f, +0.000826f, +0.001249f, +0.004114f, +0.001879f, + +0.001665f, +0.003246f, -0.001611f, -0.000706f, -0.014628f, +0.001444f, +0.006742f, +0.005744f, -0.007705f, +0.004335f, + +0.006778f, +0.003050f, +0.010031f, -0.023180f, -0.004170f, -0.004197f, -0.009683f, +0.007369f, -0.001083f, +0.000255f, + +0.008191f, -0.000957f, +0.002417f, -0.001670f, -0.005339f, +0.002174f, -0.005086f, -0.000406f, -0.002717f, +0.003552f, + -0.000654f, -0.002124f, +0.000645f, -0.001490f, -0.000228f, -0.002520f, -0.000666f, -0.000419f, +0.001501f, +0.000500f, + -0.002041f, -0.001706f, +0.000352f, +0.000608f, +0.000411f, +0.000064f, -0.001410f, -0.000502f, -0.000943f, +0.001197f, + -0.000483f, +0.000513f, +0.000748f, +0.000448f, -0.001401f, -0.000041f, -0.000232f, +0.001181f, +0.002279f, -0.001690f, + +0.000469f, -0.000969f, -0.000100f, +0.000018f, -0.000729f, +0.000446f, +0.000131f, +0.000250f, -0.000594f, +0.000371f, + -0.000116f, -0.000157f, -0.000078f, +0.000140f, +0.000157f, +0.000194f, -0.000355f, +0.000489f, +0.000025f, +0.000113f, + -0.000159f, +0.000156f, -0.000100f, +0.000370f, +0.000032f, +0.000220f + }, + { + +0.005961f, -0.249561f, -0.021787f, -0.000175f, -0.000566f, -0.003038f, -0.010397f, +0.011957f, -0.007040f, +0.007122f, + -0.002408f, -0.003003f, +0.006314f, +0.004454f, -0.009268f, +0.005771f, -0.004503f, -0.005932f, +0.016346f, -0.014970f, + +0.003907f, -0.000690f, -0.002228f, +0.000396f, +0.004242f, -0.007341f, -0.003364f, +0.000527f, -0.005767f, +0.005042f, + -0.001295f, -0.001899f, -0.003617f, -0.000354f, +0.009265f, -0.002575f, +0.003375f, +0.000338f, -0.002739f, +0.006173f, + -0.001354f, +0.000130f, +0.003401f, +0.000650f, +0.000353f, +0.000916f, +0.001218f, -0.001931f, +0.000235f, +0.001757f, + -0.000405f, -0.000733f, +0.000417f, +0.000628f, -0.002134f, +0.000066f, -0.001289f, +0.000854f, +0.000791f, -0.000513f, + +0.000489f, -0.000852f, -0.001340f, -0.000077f, +0.000742f, +0.000270f, +0.000284f, +0.000393f, -0.000036f, +0.000424f, + -0.000425f, +0.000659f, -0.000454f, -0.000530f, +0.000091f, +0.000344f, -0.000476f, -0.000126f, +0.000003f, +0.000309f, + -0.000080f, -0.000080f, -0.000263f, +0.000986f, +0.000127f, -0.000160f, +0.000266f, -0.000013f, +0.000045f, +0.000329f, + -0.000463f, -0.000091f, -0.000160f, +0.000060f, -0.000247f, +0.000195f + }, + { + -0.001496f, +0.001060f, +0.015560f, +0.004495f, -0.005865f, -0.001124f, -0.000647f, +0.000949f, +0.001695f, -0.000544f, + -0.000161f, -0.002323f, +0.002502f, -0.003873f, +0.001800f, -0.011846f, -0.009829f, +0.003191f, +0.000062f, +0.006715f, + +0.013993f, +0.000488f, +0.013163f, +0.005185f, -0.007679f, +0.003293f, +0.002209f, +0.000871f, +0.001011f, -0.004260f, + -0.000293f, +0.001982f, +0.005211f, -0.000263f, -0.003638f, +0.005459f, -0.001252f, -0.001066f, -0.003423f, +0.001470f, + -0.005183f, +0.002785f, +0.000946f, -0.001594f, +0.004438f, -0.001530f, -0.000533f, -0.001719f, -0.001549f, -0.000630f, + +0.000557f, +0.002422f, +0.001243f, -0.000539f, -0.000432f, -0.001874f, +0.000330f, +0.000137f, +0.001409f, -0.001243f, + -0.000433f, -0.000139f, +0.000727f, +0.000111f, +0.001403f, +0.000095f, +0.000268f, +0.000194f, +0.000370f, +0.000499f, + -0.001493f, -0.000954f, -0.001058f, +0.000678f, +0.000114f, -0.000010f, -0.000186f, +0.000683f, +0.000028f, -0.000006f, + -0.000078f, +0.000152f, +0.000013f, -0.000441f, -0.000045f, +0.000194f, -0.000140f, +0.000269f, -0.000229f, -0.000093f, + +0.000442f, +0.000194f, +0.000179f, -0.000131f, +0.000089f, -0.000118f + }, + { + +0.036224f, -0.120342f, +0.010869f, +0.003758f, -0.001028f, +0.012736f, +0.001018f, +0.003429f, +0.002253f, +0.000829f, + -0.000822f, -0.006035f, +0.009505f, -0.022264f, -0.005411f, +0.012607f, -0.001375f, +0.000425f, +0.002523f, +0.004430f, + -0.006497f, -0.000958f, +0.001136f, -0.002491f, -0.002244f, -0.001322f, -0.004081f, +0.001711f, -0.001767f, +0.000131f, + -0.005771f, +0.006042f, -0.005817f, +0.000919f, -0.001352f, -0.003484f, +0.000450f, +0.001397f, +0.001010f, -0.002751f, + +0.003115f, +0.001171f, -0.003892f, -0.004310f, +0.000855f, -0.001486f, +0.000755f, -0.000543f, +0.002300f, -0.003008f, + -0.000712f, +0.002150f, +0.000888f, +0.002441f, +0.000524f, +0.000437f, +0.001093f, -0.000629f, -0.000143f, +0.001860f, + +0.001102f, -0.001548f, +0.000171f, +0.000459f, -0.000670f, -0.000032f, +0.000863f, +0.000157f, +0.000378f, +0.000674f, + -0.000485f, +0.000381f, -0.000928f, -0.000249f, -0.000306f, +0.001186f, -0.000134f, -0.000038f, +0.000182f, +0.000320f, + -0.000141f, -0.000118f, +0.000342f, +0.000208f, -0.000626f, +0.000081f, +0.000132f, +0.000528f, +0.000162f, -0.000380f, + +0.000426f, +0.000188f, +0.000315f, +0.000042f, -0.000293f, -0.000238f + }, + { + -0.000988f, +0.023882f, +0.001789f, +0.005196f, -0.000761f, +0.002730f, -0.001750f, +0.002446f, +0.001592f, -0.001933f, + -0.006972f, -0.005972f, -0.008305f, +0.065234f, -0.015363f, +0.014410f, -0.005206f, +0.001612f, -0.002997f, -0.004195f, + +0.011984f, -0.016339f, -0.001864f, -0.021895f, +0.012830f, +0.006145f, +0.003046f, -0.002593f, -0.011464f, +0.005698f, + +0.007814f, +0.006110f, +0.002785f, +0.000200f, +0.009796f, -0.002484f, -0.001016f, +0.006261f, -0.006539f, +0.004877f, + -0.002794f, -0.000726f, +0.001603f, +0.002474f, +0.002777f, +0.002598f, -0.002190f, +0.005471f, -0.001787f, +0.001799f, + +0.001986f, +0.000401f, +0.004478f, -0.003812f, -0.001480f, +0.000016f, +0.003169f, -0.001336f, +0.003019f, -0.000633f, + +0.001101f, +0.000796f, +0.001604f, -0.001278f, +0.000336f, +0.000997f, +0.000660f, +0.000279f, -0.000046f, +0.000363f, + +0.000940f, +0.000982f, +0.000432f, -0.000297f, -0.000054f, +0.000485f, +0.001383f, +0.000045f, +0.000287f, +0.000861f, + -0.000032f, -0.000479f, -0.000708f, -0.000376f, -0.000072f, +0.000617f, -0.000074f, -0.000111f, +0.000153f, -0.000517f, + +0.000113f, -0.000706f, +0.000240f, +0.000177f, -0.000184f, +0.000273f + }, + { + +0.004804f, -0.137653f, +0.007321f, +0.010404f, +0.004517f, +0.009360f, -0.009766f, -0.003234f, +0.000198f, -0.001428f, + -0.003744f, -0.010706f, -0.014385f, +0.014989f, -0.057875f, -0.000925f, +0.014999f, +0.003370f, -0.004061f, +0.004900f, + +0.004206f, -0.001201f, +0.006192f, -0.004905f, +0.007033f, -0.000456f, +0.001200f, +0.002181f, -0.007657f, +0.000745f, + +0.000583f, +0.001270f, +0.001944f, +0.001631f, -0.004175f, +0.004255f, -0.004643f, -0.001407f, -0.000349f, -0.000255f, + +0.003167f, +0.003568f, -0.005933f, -0.001521f, -0.000500f, -0.000274f, -0.000862f, -0.003577f, +0.001861f, +0.002967f, + +0.000906f, -0.002687f, +0.000683f, +0.002995f, +0.000028f, +0.000505f, +0.001151f, -0.001608f, -0.001124f, -0.000986f, + +0.000614f, +0.000355f, -0.000934f, -0.000733f, -0.000486f, -0.000316f, +0.000183f, +0.000742f, +0.000308f, +0.000121f, + -0.000256f, +0.000517f, -0.000163f, +0.000821f, -0.000241f, +0.001150f, -0.000887f, -0.000176f, -0.000333f, -0.000121f, + +0.000515f, +0.000644f, -0.000360f, +0.000499f, +0.000072f, -0.000077f, -0.000117f, -0.000171f, -0.000163f, -0.000041f, + -0.000586f, -0.000063f, -0.000201f, +0.000269f, -0.000142f, -0.000081f + }, + { + +0.000759f, -0.004422f, -0.002732f, -0.003040f, +0.001307f, +0.002165f, +0.001700f, -0.000763f, -0.002300f, -0.000862f, + +0.006441f, -0.008096f, -0.008093f, -0.069575f, -0.049775f, +0.005937f, -0.004676f, -0.012122f, +0.009347f, +0.014872f, + +0.006527f, -0.008715f, -0.002214f, -0.005335f, -0.002479f, +0.011804f, +0.006000f, +0.001445f, -0.001671f, -0.006482f, + -0.003109f, +0.003166f, -0.003010f, -0.001602f, +0.001893f, -0.004630f, +0.004620f, +0.005358f, +0.006233f, +0.001621f, + -0.004741f, +0.003798f, +0.001555f, +0.001009f, +0.001566f, -0.000046f, +0.000651f, -0.003146f, -0.002898f, -0.000176f, + +0.003334f, -0.001105f, +0.000318f, +0.000716f, +0.000250f, +0.000049f, +0.003843f, -0.001483f, -0.000919f, +0.000630f, + +0.001154f, -0.002683f, -0.001544f, +0.000892f, -0.000996f, +0.001797f, +0.000790f, -0.001546f, -0.000101f, +0.000521f, + +0.000150f, -0.000156f, +0.001004f, -0.000184f, -0.000544f, +0.000053f, -0.000800f, -0.000391f, +0.000347f, -0.000355f, + -0.000282f, +0.000106f, -0.000579f, -0.000566f, -0.000112f, -0.000298f, +0.000280f, +0.000159f, -0.000048f, +0.000048f, + +0.000305f, +0.000046f, -0.000117f, +0.000038f, +0.000402f, -0.000163f + } + }, + { + { + +0.017886f, +0.327081f, -0.142623f, +0.003856f, +0.008472f, -0.001280f, -0.003536f, -0.005976f, -0.009513f, -0.002177f, + +0.002531f, +0.012629f, -0.002629f, +0.002679f, -0.007276f, +0.000653f, +0.001628f, -0.010677f, +0.003116f, +0.003435f, + -0.005088f, -0.005395f, +0.000799f, +0.003730f, -0.004338f, -0.004833f, -0.002222f, -0.006367f, +0.009774f, +0.001468f, + +0.000206f, +0.004597f, -0.003646f, -0.000281f, -0.000213f, -0.001981f, +0.000813f, +0.001693f, +0.001399f, -0.005981f, + -0.003322f, -0.002572f, -0.004510f, -0.001138f, +0.003559f, +0.001403f, +0.001764f, -0.000395f, +0.002091f, +0.004203f, + +0.002112f, -0.002876f, +0.001472f, +0.001209f, +0.002211f, -0.000623f, +0.000173f, -0.000542f, +0.001049f, +0.001086f, + +0.001272f, -0.000012f, +0.001783f, -0.001317f, -0.000049f, +0.000288f, +0.000198f, +0.000370f, +0.000119f, +0.000447f, + -0.000160f, -0.000129f, -0.000584f, +0.000857f, +0.001037f, +0.000767f, +0.000575f, +0.000224f, -0.000178f, -0.000127f, + -0.000911f, -0.000290f, -0.000055f, +0.000011f, +0.000444f, -0.000439f, -0.000151f, -0.000152f, -0.000285f, +0.000041f, + -0.000341f, -0.000197f, +0.000148f, +0.000019f, +0.000119f, -0.000003f + }, + { + +0.001169f, +0.065454f, -0.042661f, +0.002397f, +0.003923f, +0.003916f, +0.001236f, +0.003896f, -0.001984f, -0.006250f, + +0.000128f, +0.003283f, -0.000109f, -0.004490f, +0.027486f, +0.007099f, -0.009540f, -0.002818f, -0.020240f, +0.003903f, + -0.000445f, +0.007214f, -0.004498f, -0.005324f, -0.001591f, -0.005221f, +0.002982f, -0.003645f, -0.001973f, +0.001216f, + -0.000552f, +0.006081f, -0.001347f, +0.002227f, +0.000024f, -0.002342f, +0.000538f, +0.002641f, -0.002541f, -0.003236f, + +0.000843f, +0.001525f, -0.002721f, +0.001722f, +0.002507f, -0.001010f, -0.000019f, -0.001626f, -0.001575f, +0.000965f, + +0.000666f, -0.002343f, -0.001744f, -0.000148f, -0.000647f, +0.000636f, -0.000154f, -0.000516f, +0.000773f, -0.000208f, + -0.001194f, -0.001656f, +0.000502f, -0.000563f, +0.000671f, -0.000323f, -0.000143f, -0.000643f, -0.000186f, +0.001112f, + -0.000704f, +0.000302f, -0.000209f, +0.000089f, +0.000123f, +0.000356f, -0.000192f, +0.000002f, -0.000202f, -0.000394f, + +0.000455f, +0.000191f, -0.000128f, +0.000523f, -0.000199f, -0.000302f, -0.001090f, -0.000574f, -0.000474f, -0.000441f, + +0.000527f, +0.000084f, +0.000344f, -0.000021f, -0.000281f, +0.000185f + }, + { + -0.007822f, -0.246335f, +0.026943f, +0.017421f, -0.004247f, -0.001263f, -0.002958f, +0.002852f, +0.001671f, +0.001214f, + +0.000539f, -0.003369f, -0.005235f, +0.009342f, -0.005666f, -0.005410f, -0.008718f, -0.008374f, +0.001697f, +0.004339f, + -0.000765f, -0.000559f, +0.014192f, +0.002232f, -0.008883f, -0.007141f, +0.001126f, -0.001252f, +0.004258f, -0.002172f, + -0.004477f, -0.002534f, -0.007487f, -0.000618f, -0.009068f, +0.008408f, -0.001978f, -0.000246f, -0.001297f, -0.003209f, + -0.002659f, +0.000529f, -0.006118f, -0.000371f, +0.002490f, +0.000705f, -0.001273f, +0.001284f, -0.001986f, +0.000532f, + +0.002096f, -0.000370f, -0.001266f, +0.000172f, +0.001043f, +0.000357f, -0.000087f, +0.000922f, -0.000256f, -0.001582f, + +0.000512f, +0.001659f, -0.000612f, -0.001694f, +0.000695f, -0.001562f, -0.000106f, +0.000894f, -0.000039f, +0.000114f, + -0.000099f, -0.000074f, -0.000532f, +0.000314f, -0.000210f, +0.000098f, -0.000016f, -0.000425f, +0.000723f, -0.000326f, + +0.000607f, +0.000441f, -0.000094f, +0.000567f, +0.000411f, -0.000104f, -0.000047f, -0.000070f, -0.000313f, +0.000318f, + +0.000151f, -0.000215f, -0.000057f, +0.000050f, +0.000277f, +0.000202f + }, + { + +0.057238f, +0.165187f, -0.020874f, +0.006651f, -0.009546f, -0.001512f, -0.005374f, -0.000645f, -0.000371f, +0.000637f, + -0.002012f, +0.004073f, -0.000011f, +0.000327f, -0.018790f, +0.008759f, +0.006156f, -0.025713f, +0.001595f, -0.006858f, + +0.001315f, -0.003263f, +0.005162f, -0.002628f, -0.000832f, +0.000592f, -0.003831f, -0.003192f, -0.004456f, -0.003691f, + -0.005685f, +0.003865f, +0.002947f, +0.003575f, -0.002794f, -0.001028f, -0.000413f, +0.004691f, -0.000365f, -0.002056f, + +0.001106f, -0.000938f, +0.000407f, +0.000672f, -0.001910f, -0.003279f, +0.000420f, +0.003263f, -0.000537f, +0.001075f, + +0.000318f, +0.000197f, +0.000411f, +0.003136f, +0.001426f, +0.000259f, -0.001757f, +0.000162f, +0.000376f, +0.002070f, + -0.001258f, +0.000660f, -0.000328f, +0.000191f, +0.000119f, +0.000287f, +0.000027f, +0.000689f, +0.000043f, -0.000175f, + +0.001065f, +0.000006f, -0.000112f, +0.000516f, +0.000387f, -0.000420f, -0.000370f, -0.000786f, -0.000012f, -0.000264f, + -0.000204f, -0.000311f, +0.000167f, +0.000035f, -0.000387f, -0.000095f, +0.000075f, -0.000075f, -0.000240f, +0.000280f, + +0.000071f, -0.000114f, -0.000311f, -0.000029f, -0.000116f, +0.000149f + }, + { + +0.003066f, +0.040804f, -0.001400f, +0.002254f, -0.000679f, -0.000072f, +0.000314f, -0.000487f, +0.000705f, -0.001304f, + +0.002850f, -0.001933f, -0.008080f, -0.001694f, +0.004132f, -0.013381f, -0.000297f, -0.069027f, -0.010299f, +0.020068f, + -0.012311f, -0.011895f, -0.011820f, -0.007368f, +0.007474f, +0.001615f, +0.002844f, +0.003634f, +0.002907f, -0.003692f, + -0.005831f, -0.001320f, -0.001552f, +0.001587f, +0.002907f, -0.000998f, -0.000472f, -0.004781f, -0.004923f, -0.005486f, + -0.003859f, -0.002794f, -0.002407f, +0.003746f, +0.002665f, +0.000283f, +0.001588f, -0.002414f, -0.001184f, -0.001171f, + -0.000901f, +0.001538f, -0.001776f, -0.000080f, +0.003796f, +0.000024f, +0.000146f, -0.003025f, +0.001464f, +0.000569f, + +0.000645f, +0.000427f, +0.000690f, +0.000980f, +0.000166f, +0.000560f, -0.001363f, -0.000279f, -0.000439f, -0.001535f, + +0.000576f, +0.000867f, -0.000558f, -0.000464f, +0.000227f, -0.001153f, -0.000187f, +0.000235f, -0.000097f, -0.000229f, + -0.000203f, +0.000060f, +0.000690f, +0.000073f, -0.000015f, +0.000728f, +0.000405f, +0.000191f, -0.000084f, +0.000217f, + -0.000008f, +0.000123f, -0.000258f, +0.000397f, -0.000241f, -0.000007f + }, + { + +0.100237f, +0.095145f, -0.062109f, +0.016462f, +0.005952f, -0.001185f, +0.001749f, +0.000260f, +0.004780f, +0.004648f, + +0.001223f, +0.001187f, +0.014683f, -0.005107f, +0.006022f, -0.004348f, -0.006877f, +0.003146f, -0.002839f, +0.002309f, + -0.001635f, +0.006647f, +0.000926f, -0.002411f, +0.000728f, +0.001056f, -0.000702f, -0.001419f, -0.001562f, +0.000267f, + +0.011196f, -0.000422f, -0.003167f, +0.000477f, +0.003117f, +0.002182f, +0.002704f, -0.002696f, -0.001716f, -0.001877f, + -0.009072f, -0.000543f, -0.003476f, -0.006116f, -0.002548f, +0.001005f, -0.000245f, +0.000546f, -0.002549f, -0.003460f, + +0.002267f, +0.000195f, -0.001162f, -0.000768f, +0.002516f, +0.002623f, +0.001678f, +0.002438f, +0.000644f, -0.000509f, + -0.000580f, -0.000134f, +0.001258f, -0.000529f, +0.001316f, +0.000066f, +0.000523f, +0.000171f, +0.000063f, -0.000141f, + -0.000085f, -0.000144f, +0.000156f, -0.001120f, -0.000534f, +0.000353f, -0.000661f, +0.000185f, +0.000241f, +0.000299f, + -0.000604f, -0.000344f, -0.000352f, +0.000355f, -0.000137f, -0.000446f, -0.000247f, +0.000204f, +0.000064f, +0.000113f, + -0.000042f, +0.000052f, -0.000003f, -0.000238f, +0.000235f, -0.000434f + }, + { + -0.000338f, -0.017583f, -0.005933f, +0.003987f, -0.001357f, -0.000293f, -0.001422f, +0.002419f, +0.001480f, +0.001026f, + +0.000773f, +0.004206f, +0.009144f, -0.013337f, +0.024726f, +0.005128f, -0.010786f, -0.004433f, +0.003685f, +0.020305f, + +0.000572f, -0.005643f, -0.036296f, -0.012432f, -0.000450f, +0.003077f, -0.005264f, +0.001836f, -0.001568f, -0.000681f, + +0.000196f, +0.003128f, +0.000589f, -0.003874f, +0.000543f, +0.005897f, +0.002217f, -0.000269f, +0.004222f, +0.000987f, + -0.001675f, +0.001451f, +0.002244f, -0.004791f, -0.001106f, +0.000122f, -0.000294f, -0.001750f, -0.000520f, +0.000188f, + -0.000016f, -0.000356f, +0.002202f, +0.000780f, +0.001952f, +0.000327f, +0.000478f, +0.001591f, -0.000921f, -0.001020f, + +0.000077f, -0.000728f, -0.001120f, +0.000011f, -0.001152f, -0.002070f, +0.000304f, +0.000604f, +0.000439f, -0.000108f, + -0.000616f, -0.000642f, +0.000581f, +0.000842f, -0.000444f, -0.000069f, -0.000119f, -0.000073f, -0.000099f, +0.000394f, + -0.000060f, -0.000187f, +0.000380f, +0.000192f, +0.000031f, +0.000196f, +0.000171f, -0.000125f, +0.000161f, +0.000555f, + -0.000106f, +0.000149f, -0.000161f, -0.000014f, +0.000170f, -0.000117f + }, + { + -0.071605f, -0.197385f, +0.060421f, -0.000386f, +0.006761f, +0.000737f, +0.004802f, -0.004142f, -0.008373f, -0.000190f, + -0.000891f, +0.005430f, -0.003432f, +0.009157f, +0.011726f, +0.002554f, -0.000042f, +0.008369f, +0.000091f, +0.002175f, + +0.004527f, -0.001302f, +0.002129f, -0.000684f, -0.000511f, -0.001704f, +0.002855f, +0.006674f, +0.000730f, -0.001326f, + -0.001277f, +0.003447f, -0.003557f, -0.002728f, +0.003830f, -0.007641f, -0.002364f, -0.001837f, +0.000688f, +0.002312f, + -0.001115f, -0.000201f, +0.002357f, +0.004010f, +0.001526f, +0.003646f, -0.002932f, +0.004429f, +0.001767f, +0.000778f, + -0.002485f, -0.000426f, -0.001829f, +0.000938f, +0.001245f, -0.000687f, +0.000887f, -0.001497f, +0.001114f, +0.000650f, + -0.000743f, -0.000445f, -0.000686f, +0.001469f, +0.001970f, +0.000621f, +0.000031f, +0.001870f, -0.000273f, +0.000583f, + -0.000414f, +0.000824f, +0.000479f, -0.000647f, +0.000594f, +0.000576f, -0.000014f, -0.000624f, +0.000307f, -0.000229f, + +0.000015f, -0.000616f, +0.000217f, -0.000117f, +0.000428f, -0.000330f, -0.000155f, -0.000400f, +0.000008f, -0.000080f, + -0.000200f, -0.000054f, +0.000146f, -0.000014f, +0.000101f, +0.000495f + }, + { + -0.000514f, -0.012916f, -0.013889f, +0.003050f, -0.000969f, +0.000884f, -0.000546f, +0.003121f, +0.002267f, +0.001004f, + +0.004679f, +0.001476f, -0.001769f, -0.008640f, -0.009674f, +0.010575f, +0.017602f, -0.000023f, -0.010384f, +0.000560f, + +0.009646f, +0.010081f, -0.007907f, +0.005007f, -0.018546f, +0.005010f, -0.003932f, -0.008823f, +0.008395f, +0.001921f, + +0.004712f, -0.001053f, +0.000791f, -0.000829f, -0.001742f, -0.001612f, -0.004981f, +0.001253f, -0.001245f, +0.000421f, + -0.002988f, -0.000991f, +0.001285f, +0.000310f, -0.004348f, -0.001755f, -0.000503f, -0.001900f, +0.003255f, -0.002109f, + +0.001352f, -0.001239f, -0.001620f, +0.001273f, +0.001165f, -0.001359f, +0.000108f, -0.001601f, -0.000592f, -0.000236f, + +0.000107f, +0.001572f, -0.000226f, +0.001601f, -0.001104f, -0.000189f, +0.000622f, +0.000777f, +0.001367f, +0.000338f, + +0.000079f, -0.000633f, -0.000091f, -0.000165f, +0.000291f, -0.000158f, +0.000340f, +0.000111f, +0.000088f, -0.000053f, + -0.000330f, +0.000227f, +0.000051f, -0.000262f, +0.000557f, -0.000231f, +0.000089f, -0.000176f, +0.000559f, -0.000033f, + -0.000497f, +0.000162f, -0.000039f, +0.000433f, +0.000013f, +0.000024f + }, + { + -0.004625f, -0.226470f, -0.021225f, +0.000694f, +0.007278f, -0.010416f, -0.001951f, +0.001725f, +0.002376f, +0.000942f, + +0.000655f, -0.002375f, +0.001123f, +0.007508f, +0.001487f, -0.002989f, +0.005917f, -0.005909f, -0.003469f, +0.004362f, + +0.000022f, -0.004877f, +0.004197f, +0.004336f, -0.003200f, -0.003944f, -0.003493f, -0.000408f, -0.003270f, +0.001768f, + -0.004890f, -0.003207f, -0.000617f, +0.002462f, +0.004588f, +0.003094f, +0.002306f, -0.004720f, +0.002669f, +0.002187f, + +0.002302f, -0.002425f, +0.004629f, +0.000783f, +0.001791f, +0.000383f, -0.001805f, -0.001063f, +0.000745f, +0.000433f, + -0.001788f, -0.000809f, +0.000032f, -0.000762f, +0.000371f, -0.000546f, -0.000669f, +0.000549f, +0.000713f, +0.000235f, + -0.000456f, -0.001207f, +0.000162f, -0.000011f, -0.000361f, +0.000151f, +0.001091f, +0.000112f, +0.000268f, +0.000301f, + +0.000345f, -0.000806f, -0.000268f, +0.000447f, -0.000187f, +0.000427f, -0.000717f, +0.000267f, -0.000229f, -0.000084f, + +0.000100f, +0.000075f, +0.000080f, +0.000381f, +0.000054f, +0.000112f, -0.000151f, +0.000143f, +0.000048f, -0.000118f, + -0.000156f, -0.000039f, -0.000014f, -0.000261f, +0.000003f, +0.000003f + }, + { + +0.002243f, +0.027955f, +0.002785f, -0.010311f, +0.000395f, -0.004818f, -0.001538f, +0.006241f, -0.003533f, -0.002108f, + +0.000732f, -0.004062f, +0.000005f, -0.006274f, -0.000907f, -0.003479f, -0.015286f, +0.015894f, -0.005806f, +0.001016f, + +0.025532f, -0.009178f, +0.007886f, +0.003150f, +0.003814f, +0.003062f, -0.004113f, +0.009717f, -0.008078f, +0.002030f, + -0.006058f, +0.005779f, +0.009417f, -0.005847f, +0.000021f, +0.001414f, +0.001177f, -0.002861f, -0.004214f, -0.000855f, + -0.000744f, +0.002221f, -0.000127f, -0.000626f, +0.001692f, -0.001335f, +0.001216f, -0.002595f, -0.002110f, -0.001010f, + +0.001968f, +0.000997f, +0.001393f, -0.000023f, +0.000841f, -0.002659f, +0.000151f, +0.000625f, +0.001036f, -0.000165f, + -0.000960f, -0.000396f, +0.000504f, +0.000748f, +0.000238f, +0.000767f, +0.000095f, -0.000646f, +0.000438f, -0.000280f, + -0.000473f, -0.000546f, -0.000866f, +0.000645f, -0.000441f, +0.000201f, +0.000024f, +0.000688f, +0.000081f, +0.000079f, + -0.000235f, +0.000180f, -0.000407f, -0.000037f, +0.000177f, +0.000201f, +0.000129f, +0.000165f, -0.000183f, +0.000107f, + +0.000204f, +0.000391f, +0.000113f, +0.000290f, -0.000391f, +0.000014f + }, + { + -0.035780f, -0.031402f, +0.020568f, -0.008190f, +0.002696f, +0.012815f, +0.007951f, +0.001908f, -0.002451f, +0.001621f, + +0.005765f, -0.003536f, -0.000076f, -0.009994f, -0.011479f, +0.006268f, +0.001465f, -0.001203f, +0.003514f, +0.004583f, + -0.003860f, -0.000425f, -0.001143f, -0.002683f, +0.000064f, -0.002060f, -0.002160f, -0.004313f, +0.000562f, -0.003923f, + +0.000838f, -0.001842f, +0.001832f, -0.004549f, -0.004477f, +0.001168f, +0.003051f, +0.001919f, +0.000988f, -0.002974f, + +0.003539f, +0.002983f, -0.006162f, -0.002970f, +0.000344f, -0.000647f, +0.000524f, +0.003448f, -0.004223f, +0.000037f, + -0.000877f, +0.002458f, +0.000595f, +0.002401f, +0.000555f, +0.000934f, +0.001625f, -0.000246f, -0.000675f, +0.001117f, + +0.000850f, +0.000031f, +0.000210f, +0.000143f, -0.000799f, +0.000416f, +0.000007f, +0.000533f, +0.000366f, +0.000318f, + -0.000401f, +0.000460f, -0.000977f, -0.000358f, -0.000065f, +0.000335f, +0.000277f, +0.000233f, +0.000192f, +0.000015f, + +0.000195f, -0.000385f, +0.000486f, +0.000024f, -0.000197f, -0.000142f, +0.000049f, +0.000356f, +0.000372f, -0.000516f, + +0.000152f, -0.000105f, +0.000328f, -0.000031f, +0.000060f, -0.000176f + }, + { + +0.000341f, +0.021034f, -0.002155f, +0.007638f, +0.001184f, +0.003780f, -0.004366f, +0.004316f, +0.000650f, -0.004145f, + -0.005854f, -0.003851f, +0.027681f, +0.006819f, +0.004108f, -0.005950f, -0.004810f, -0.000293f, -0.006363f, +0.000333f, + -0.013834f, +0.005172f, -0.014050f, -0.001765f, +0.005443f, +0.006864f, +0.001521f, -0.008928f, -0.003681f, -0.005175f, + +0.011718f, +0.008480f, +0.001963f, +0.002486f, +0.003486f, +0.003596f, -0.002625f, +0.004260f, +0.000555f, +0.000876f, + -0.001779f, -0.000620f, -0.001008f, +0.002002f, +0.002298f, +0.004106f, -0.000728f, +0.000308f, +0.000595f, -0.000754f, + +0.002760f, +0.001796f, +0.003481f, -0.002848f, -0.000991f, -0.000569f, +0.002250f, +0.000031f, +0.000385f, +0.001675f, + +0.000100f, +0.001477f, +0.000601f, -0.000858f, +0.000598f, +0.000981f, +0.001052f, -0.000928f, +0.000547f, +0.000046f, + +0.001592f, +0.001240f, +0.000662f, -0.001031f, -0.000061f, +0.000752f, +0.000931f, -0.000520f, +0.000784f, +0.000361f, + +0.000465f, -0.000509f, -0.000665f, +0.000110f, -0.000289f, +0.000836f, -0.000001f, -0.000182f, -0.000257f, -0.000269f, + +0.000330f, -0.000835f, -0.000331f, +0.000317f, +0.000081f, -0.000234f + }, + { + -0.022024f, -0.113415f, +0.016381f, +0.017916f, +0.003064f, +0.005969f, -0.001349f, -0.003438f, -0.004045f, -0.000279f, + -0.007469f, -0.007921f, -0.009380f, -0.011950f, -0.030396f, +0.005643f, +0.006340f, +0.001981f, +0.000730f, +0.004442f, + +0.002785f, +0.004087f, +0.001100f, +0.002042f, +0.001408f, +0.000440f, +0.000151f, +0.001885f, -0.005574f, -0.002382f, + +0.003027f, -0.002667f, +0.003782f, -0.001736f, +0.002161f, +0.001065f, -0.004478f, -0.000483f, -0.003188f, +0.001614f, + +0.005987f, -0.000921f, -0.003986f, -0.000204f, -0.000347f, +0.000614f, -0.003419f, -0.000322f, +0.002156f, +0.000560f, + +0.001858f, -0.000827f, -0.001116f, +0.001592f, +0.001654f, +0.000375f, +0.001836f, -0.001593f, +0.000193f, -0.000860f, + -0.000280f, +0.000554f, -0.001327f, +0.000260f, -0.000744f, -0.000542f, +0.000930f, +0.001348f, +0.000039f, -0.000622f, + -0.000129f, +0.000001f, +0.000328f, +0.000753f, +0.000397f, +0.000390f, -0.000634f, -0.000058f, -0.000036f, -0.000443f, + +0.000321f, +0.000596f, -0.000057f, +0.000253f, +0.000613f, +0.000270f, -0.000524f, -0.000073f, -0.000445f, -0.000157f, + -0.000056f, -0.000163f, -0.000096f, +0.000105f, +0.000041f, -0.000397f + }, + { + -0.000836f, -0.002935f, -0.001301f, -0.002446f, -0.000003f, -0.000227f, +0.001095f, -0.000367f, +0.001945f, +0.002927f, + -0.001005f, -0.005534f, -0.016803f, -0.005478f, -0.153628f, +0.022279f, -0.001070f, -0.006066f, +0.003771f, -0.003875f, + +0.022895f, -0.006942f, -0.012971f, -0.009001f, +0.012119f, +0.005419f, +0.005375f, +0.002278f, -0.001086f, -0.007950f, + -0.001183f, -0.003064f, +0.002448f, +0.000415f, +0.001191f, -0.007387f, +0.002394f, +0.010150f, +0.002139f, +0.002031f, + -0.000212f, -0.001349f, +0.002405f, -0.000123f, -0.000149f, +0.000994f, -0.001360f, -0.001108f, -0.001295f, -0.000411f, + +0.002227f, -0.000746f, -0.000990f, +0.000550f, +0.000179f, +0.001054f, +0.002923f, -0.001310f, -0.000628f, -0.000752f, + -0.000184f, -0.001863f, -0.000714f, -0.000514f, -0.000257f, +0.000941f, +0.001011f, -0.001577f, -0.000033f, +0.000577f, + +0.000246f, +0.000311f, +0.000154f, +0.000039f, -0.000489f, -0.000078f, -0.000534f, -0.000752f, +0.000272f, -0.000335f, + -0.000230f, +0.000419f, -0.000402f, -0.000768f, +0.000085f, -0.000152f, -0.000029f, +0.000518f, -0.000110f, +0.000020f, + +0.000195f, +0.000132f, -0.000001f, -0.000068f, +0.000269f, -0.000229f + } + }, + { + { + -0.014986f, +0.317761f, -0.071860f, +0.016828f, -0.002995f, -0.001141f, -0.000458f, -0.003720f, -0.004255f, +0.004767f, + +0.002878f, +0.005523f, -0.003210f, -0.002013f, -0.004112f, +0.003965f, +0.003587f, -0.000246f, +0.006658f, -0.003789f, + -0.001667f, -0.003656f, -0.000194f, +0.003720f, -0.000927f, -0.001925f, +0.003126f, -0.005430f, +0.006855f, +0.002151f, + +0.004385f, +0.005984f, -0.003483f, -0.000618f, -0.000726f, +0.001379f, +0.000735f, +0.001098f, +0.000792f, -0.006230f, + -0.002189f, +0.000700f, -0.002070f, -0.001191f, +0.000461f, -0.002109f, -0.000165f, -0.001079f, +0.000306f, +0.000567f, + +0.000264f, -0.001927f, +0.000321f, -0.000483f, +0.001038f, -0.001053f, +0.000968f, +0.000331f, +0.000353f, +0.000347f, + +0.001066f, -0.000881f, +0.000873f, -0.000516f, +0.000400f, +0.000495f, +0.000108f, -0.000240f, +0.000033f, +0.000529f, + +0.000446f, +0.000035f, -0.000311f, +0.000063f, +0.000204f, +0.000042f, -0.000034f, -0.000058f, +0.000455f, +0.000391f, + -0.000449f, -0.000298f, +0.000266f, +0.000332f, +0.000302f, -0.000109f, -0.000261f, +0.000048f, -0.000225f, +0.000006f, + -0.000098f, +0.000064f, +0.000196f, +0.000147f, +0.000179f, +0.000101f + }, + { + -0.003691f, +0.094266f, -0.020326f, -0.007418f, -0.008323f, +0.000235f, -0.002594f, +0.002193f, -0.002482f, -0.001568f, + +0.001898f, +0.001031f, -0.003317f, -0.007965f, +0.013886f, +0.008979f, -0.003298f, -0.001673f, -0.017640f, -0.000781f, + -0.006916f, +0.005031f, -0.002046f, -0.002849f, +0.006345f, +0.001782f, -0.001106f, -0.006090f, -0.002819f, -0.000417f, + -0.003615f, +0.006808f, +0.005343f, +0.002094f, +0.003113f, -0.004571f, -0.004357f, +0.001754f, -0.001451f, +0.000387f, + +0.001575f, +0.000978f, -0.002796f, +0.001070f, +0.004087f, -0.001987f, +0.000464f, -0.000217f, -0.000301f, -0.000261f, + -0.000437f, -0.000560f, +0.000039f, +0.000901f, -0.000993f, +0.000949f, -0.000980f, -0.000925f, +0.000837f, -0.000028f, + +0.000337f, -0.000180f, +0.000656f, -0.000740f, +0.000489f, +0.000071f, +0.000422f, -0.000493f, -0.000340f, +0.000187f, + -0.000435f, +0.000585f, -0.000302f, +0.000249f, +0.000276f, +0.000090f, -0.000263f, +0.000432f, +0.000169f, -0.000349f, + -0.000087f, +0.000212f, -0.000103f, +0.000283f, -0.000086f, +0.000230f, -0.000237f, -0.000048f, -0.000119f, -0.000504f, + +0.000505f, -0.000071f, +0.000175f, -0.000229f, -0.000352f, +0.000235f + }, + { + +0.006448f, -0.206543f, +0.047020f, +0.021010f, -0.007880f, -0.000256f, +0.000131f, -0.000704f, +0.000349f, -0.000337f, + -0.000331f, +0.002412f, -0.007389f, +0.005955f, -0.004928f, +0.002328f, +0.001726f, -0.001363f, -0.008505f, -0.002123f, + -0.002204f, -0.003271f, +0.005161f, -0.003269f, -0.002633f, -0.004878f, -0.001231f, -0.000907f, +0.004953f, -0.004523f, + -0.003571f, +0.004884f, +0.000337f, +0.002630f, -0.010185f, +0.007788f, +0.001775f, +0.002501f, -0.001706f, -0.000488f, + -0.001017f, +0.004877f, -0.000583f, -0.001034f, +0.000838f, -0.000907f, +0.000086f, +0.000865f, -0.002370f, -0.000014f, + +0.001440f, +0.000125f, -0.000837f, +0.001891f, +0.001515f, +0.000169f, +0.000130f, -0.000000f, -0.000458f, -0.001051f, + -0.000719f, +0.000541f, +0.000777f, -0.000561f, +0.001281f, -0.000450f, +0.000037f, +0.000467f, +0.000422f, -0.000067f, + -0.000483f, -0.000385f, -0.000200f, +0.000924f, -0.000321f, -0.000501f, +0.000074f, +0.000063f, +0.000586f, -0.000481f, + +0.000036f, -0.000047f, -0.000316f, +0.000234f, +0.000313f, -0.000373f, -0.000157f, -0.000139f, -0.000201f, +0.000291f, + -0.000110f, -0.000072f, +0.000209f, -0.000081f, +0.000042f, +0.000318f + }, + { + -0.053352f, +0.075052f, +0.022592f, +0.007095f, -0.000440f, +0.000168f, -0.003358f, +0.000326f, -0.001844f, +0.000265f, + -0.003133f, +0.002648f, -0.000396f, +0.001140f, -0.019899f, +0.001624f, +0.002809f, -0.020512f, +0.004727f, -0.004447f, + +0.001598f, -0.001913f, +0.006869f, -0.000120f, -0.000914f, +0.002667f, +0.000990f, +0.001662f, -0.000560f, +0.000000f, + -0.003340f, +0.000339f, -0.002061f, +0.000882f, -0.001569f, -0.002358f, -0.002728f, +0.003274f, -0.002253f, -0.001191f, + +0.002492f, +0.000274f, +0.000064f, -0.002106f, +0.000194f, +0.000521f, -0.000616f, +0.001196f, -0.001551f, +0.000402f, + +0.000138f, +0.000563f, -0.000453f, +0.000955f, +0.000940f, +0.001931f, -0.000796f, +0.000370f, -0.000305f, +0.001038f, + -0.001067f, +0.000863f, -0.001079f, +0.000207f, -0.000355f, +0.000160f, +0.000191f, -0.000093f, +0.000119f, -0.000044f, + +0.000795f, -0.000403f, -0.000216f, -0.000053f, -0.000086f, -0.000440f, -0.000318f, -0.000199f, +0.000400f, -0.000049f, + -0.000355f, -0.000307f, +0.000210f, +0.000330f, -0.000224f, -0.000151f, +0.000077f, -0.000136f, -0.000089f, +0.000195f, + -0.000028f, -0.000036f, +0.000043f, +0.000050f, -0.000218f, +0.000177f + }, + { + -0.002262f, +0.028607f, -0.002843f, +0.002682f, -0.001946f, -0.000274f, +0.000330f, -0.000751f, +0.001001f, -0.000961f, + +0.002141f, -0.001000f, -0.003468f, -0.001246f, +0.017519f, -0.000369f, +0.004656f, -0.011216f, +0.028724f, +0.011711f, + -0.006990f, +0.006823f, -0.000626f, -0.002716f, +0.004933f, -0.001930f, +0.000314f, -0.000614f, +0.002865f, +0.002702f, + +0.001550f, +0.000112f, -0.002783f, -0.002651f, +0.003863f, +0.000582f, +0.000892f, -0.002195f, -0.000990f, +0.001537f, + +0.001483f, +0.001323f, -0.001369f, -0.000004f, -0.000718f, +0.000563f, +0.000276f, -0.001039f, +0.001181f, +0.000181f, + -0.000050f, -0.000036f, -0.001479f, -0.001269f, +0.001127f, -0.001075f, +0.000530f, -0.002161f, +0.001270f, +0.000507f, + +0.001760f, +0.000391f, -0.001071f, +0.000124f, +0.000119f, +0.000357f, -0.000765f, +0.000211f, +0.000482f, -0.001063f, + +0.000184f, +0.000626f, -0.000233f, -0.000179f, +0.000982f, -0.000015f, +0.000193f, +0.000213f, +0.000397f, +0.000096f, + +0.000038f, -0.000055f, +0.000334f, -0.000037f, -0.000280f, +0.000183f, -0.000137f, +0.000127f, -0.000112f, +0.000373f, + +0.000044f, +0.000002f, -0.000354f, +0.000484f, +0.000052f, -0.000075f + }, + { + -0.085559f, -0.004003f, +0.060858f, +0.006198f, -0.002017f, +0.001047f, +0.001407f, -0.006750f, +0.002652f, +0.003932f, + -0.004535f, -0.003304f, +0.006577f, -0.009109f, +0.004970f, +0.001308f, -0.004280f, +0.000361f, -0.001476f, +0.004062f, + -0.002555f, +0.003516f, -0.000126f, -0.001718f, +0.002219f, +0.002335f, +0.001046f, +0.002069f, +0.001246f, -0.001794f, + +0.007760f, +0.000515f, -0.001215f, +0.001696f, +0.001783f, -0.000824f, +0.001206f, -0.003419f, -0.000629f, +0.000271f, + -0.003192f, +0.003017f, +0.000256f, +0.001398f, -0.001290f, -0.000014f, -0.002543f, +0.000490f, +0.001782f, -0.002495f, + +0.001598f, +0.000609f, -0.000193f, -0.000633f, +0.000544f, +0.001335f, -0.000048f, +0.000841f, -0.000328f, +0.000543f, + -0.000519f, -0.000599f, +0.001406f, -0.000532f, +0.000839f, -0.000087f, +0.000822f, +0.000099f, +0.000436f, -0.000165f, + -0.000229f, -0.000181f, -0.000011f, +0.000251f, +0.000280f, +0.000585f, -0.000385f, +0.000022f, -0.000020f, +0.000712f, + +0.000046f, +0.000027f, -0.000254f, +0.000566f, +0.000024f, -0.000034f, +0.000047f, +0.000020f, -0.000401f, +0.000170f, + +0.000107f, -0.000010f, +0.000037f, -0.000250f, +0.000304f, -0.000163f + }, + { + +0.000742f, -0.004361f, -0.000911f, +0.003732f, -0.000841f, +0.000536f, -0.000721f, +0.001967f, -0.000040f, -0.000304f, + -0.000391f, -0.001262f, +0.003792f, -0.011989f, +0.017713f, +0.011113f, +0.008238f, +0.001477f, -0.001758f, +0.013498f, + -0.000541f, -0.001755f, -0.024932f, -0.007213f, +0.001473f, +0.003063f, -0.002247f, +0.001264f, -0.002820f, -0.003844f, + -0.004243f, -0.002118f, +0.005446f, +0.001945f, -0.000804f, -0.001181f, -0.000689f, -0.000613f, +0.002575f, +0.002010f, + -0.001206f, -0.000621f, +0.002290f, -0.000539f, +0.002666f, -0.000041f, -0.000250f, -0.000873f, +0.000557f, -0.000491f, + -0.000591f, +0.000088f, +0.001002f, -0.000123f, +0.000352f, +0.000375f, +0.001111f, -0.000156f, -0.000826f, -0.000017f, + +0.000619f, +0.000037f, -0.000576f, +0.000412f, +0.000227f, -0.000842f, -0.000278f, +0.000170f, -0.000326f, -0.000179f, + +0.000248f, -0.000687f, -0.000409f, +0.000592f, +0.000298f, +0.000339f, +0.000228f, -0.000199f, -0.000570f, +0.000249f, + +0.000259f, -0.000487f, +0.000238f, +0.000015f, -0.000130f, +0.000077f, +0.000044f, +0.000163f, +0.000144f, +0.000388f, + -0.000151f, -0.000039f, -0.000072f, -0.000116f, +0.000070f, -0.000039f + }, + { + +0.061689f, -0.131908f, -0.025487f, -0.006480f, +0.000639f, +0.000162f, +0.004245f, -0.001574f, -0.000040f, +0.001695f, + -0.000698f, +0.005499f, -0.002615f, +0.000735f, -0.003350f, +0.000515f, -0.004088f, +0.000077f, +0.000644f, +0.001990f, + +0.000239f, -0.004474f, +0.000979f, -0.002219f, +0.001806f, +0.000484f, +0.002064f, +0.003093f, -0.001112f, +0.001052f, + +0.000751f, -0.001443f, -0.001838f, -0.003630f, +0.000630f, +0.000767f, +0.001121f, -0.000583f, -0.002316f, -0.000332f, + +0.002208f, +0.001511f, +0.001478f, -0.000271f, -0.001252f, +0.002703f, -0.001813f, +0.003538f, -0.000132f, +0.000777f, + -0.001471f, -0.000980f, -0.000177f, +0.001544f, -0.000281f, +0.001132f, +0.002185f, -0.000975f, -0.000202f, +0.000413f, + +0.000568f, +0.000008f, -0.000770f, -0.000315f, +0.000557f, +0.000429f, -0.000795f, +0.000979f, -0.000243f, +0.000786f, + -0.001107f, -0.000792f, +0.000178f, +0.000139f, +0.000592f, +0.000466f, +0.000468f, -0.000272f, +0.000922f, +0.000102f, + +0.000235f, -0.000117f, +0.000365f, +0.000078f, +0.000366f, -0.000391f, +0.000119f, -0.000243f, +0.000075f, -0.000003f, + +0.000165f, +0.000209f, +0.000004f, -0.000174f, -0.000087f, +0.000231f + }, + { + +0.001810f, +0.012293f, +0.001838f, +0.003888f, -0.003284f, +0.000262f, -0.000950f, +0.002541f, -0.000628f, -0.000716f, + +0.004427f, +0.000261f, +0.004517f, +0.004598f, -0.004562f, +0.008003f, +0.004434f, -0.000305f, +0.003133f, -0.005101f, + -0.003005f, +0.005772f, -0.005512f, +0.014090f, -0.017553f, +0.003682f, +0.003664f, -0.008504f, +0.003785f, -0.003254f, + +0.002560f, +0.001116f, +0.002954f, +0.002594f, +0.000036f, +0.000198f, -0.001632f, +0.001113f, -0.001895f, +0.001629f, + -0.000628f, -0.000911f, +0.000575f, +0.002686f, -0.000780f, -0.000010f, +0.000380f, -0.002884f, +0.002635f, -0.001738f, + +0.001143f, -0.000272f, -0.001500f, +0.000057f, -0.000324f, -0.001399f, +0.000364f, -0.001521f, +0.001184f, +0.000159f, + +0.000299f, +0.001171f, -0.001174f, +0.000710f, -0.000451f, -0.000041f, +0.000148f, -0.000128f, -0.000356f, +0.000487f, + +0.000656f, -0.000164f, +0.000564f, -0.000066f, +0.000181f, -0.000283f, +0.000004f, +0.000283f, +0.000218f, +0.000137f, + -0.000078f, +0.000052f, -0.000078f, -0.000442f, +0.000318f, -0.000354f, +0.000158f, -0.000228f, +0.000403f, +0.000017f, + -0.000083f, +0.000040f, -0.000263f, +0.000185f, -0.000149f, +0.000151f + }, + { + +0.005499f, -0.149517f, +0.039529f, -0.001598f, +0.006454f, -0.007507f, -0.002259f, -0.003668f, -0.000728f, -0.002314f, + +0.003432f, -0.000421f, -0.005646f, +0.000038f, +0.006535f, -0.005455f, +0.011117f, +0.003957f, -0.003423f, +0.010497f, + +0.005274f, -0.005698f, +0.002061f, +0.003975f, -0.003710f, +0.000167f, +0.002816f, +0.001219f, -0.003920f, +0.001774f, + -0.004376f, -0.003815f, +0.000438f, +0.000055f, -0.003403f, +0.002308f, +0.002929f, -0.004792f, +0.002766f, +0.001548f, + +0.002425f, -0.002311f, +0.003051f, +0.001271f, +0.001825f, -0.001267f, -0.001807f, +0.000618f, -0.000166f, +0.000032f, + -0.001085f, -0.000448f, +0.000208f, -0.001212f, +0.000990f, +0.000691f, -0.000127f, -0.000548f, -0.000203f, -0.000782f, + +0.000312f, -0.000520f, -0.000104f, +0.000328f, -0.000588f, +0.000142f, +0.000932f, -0.000348f, +0.000003f, -0.000100f, + +0.000253f, -0.000529f, +0.000096f, +0.000351f, -0.000180f, +0.000176f, -0.000514f, +0.000155f, -0.000114f, -0.000063f, + -0.000074f, -0.000010f, +0.000032f, -0.000072f, -0.000028f, +0.000129f, -0.000140f, +0.000226f, +0.000028f, -0.000100f, + +0.000222f, -0.000095f, +0.000158f, -0.000100f, +0.000222f, +0.000016f + }, + { + -0.002400f, +0.027601f, +0.008795f, -0.008021f, +0.002298f, -0.003636f, -0.001722f, +0.007454f, -0.000343f, -0.001206f, + +0.001704f, -0.001979f, -0.006783f, -0.005448f, +0.005918f, -0.003738f, -0.008574f, +0.015533f, -0.003608f, -0.010742f, + +0.012014f, -0.012019f, +0.004095f, +0.001932f, +0.004141f, +0.001175f, -0.008331f, +0.008968f, -0.003861f, +0.008261f, + +0.000424f, +0.000920f, +0.002933f, -0.004344f, +0.001465f, -0.001299f, -0.002473f, -0.002856f, -0.000874f, +0.000825f, + -0.000049f, -0.000599f, -0.000514f, +0.000863f, +0.000404f, +0.000469f, +0.001519f, -0.002258f, +0.000637f, +0.001040f, + +0.001829f, -0.000460f, +0.000291f, -0.000602f, +0.001745f, -0.000194f, +0.000597f, -0.000184f, -0.000360f, -0.000509f, + -0.000039f, -0.000151f, -0.000253f, +0.000574f, -0.000082f, -0.000290f, -0.000050f, -0.000222f, -0.000087f, -0.000117f, + +0.000541f, +0.000141f, -0.000393f, +0.000718f, -0.000419f, +0.000242f, -0.000233f, +0.000273f, +0.000016f, +0.000044f, + -0.000016f, +0.000249f, -0.000565f, -0.000050f, +0.000065f, +0.000252f, -0.000001f, +0.000154f, -0.000238f, +0.000042f, + -0.000065f, +0.000216f, +0.000022f, +0.000217f, -0.000256f, +0.000113f + }, + { + +0.021416f, +0.023611f, +0.000564f, -0.007739f, +0.002781f, -0.007020f, -0.003917f, +0.000622f, -0.003679f, +0.003996f, + +0.002645f, -0.002016f, +0.007377f, -0.001978f, -0.011449f, -0.001515f, -0.003989f, -0.003523f, +0.002926f, +0.000322f, + -0.000870f, +0.000308f, -0.003976f, -0.002778f, +0.000249f, -0.001907f, +0.001647f, -0.002831f, +0.001102f, -0.004964f, + -0.000247f, -0.006210f, +0.001561f, -0.001481f, -0.001378f, +0.001027f, +0.001562f, +0.001478f, +0.001235f, -0.003643f, + +0.000874f, +0.001455f, -0.002158f, -0.000272f, +0.001218f, +0.000761f, -0.000331f, +0.001750f, -0.003842f, +0.002869f, + +0.000259f, +0.000855f, -0.001870f, +0.000505f, -0.000659f, +0.000044f, +0.001468f, +0.000335f, -0.000706f, +0.000749f, + -0.000298f, -0.000451f, +0.000190f, +0.000067f, -0.000980f, +0.000607f, +0.000288f, +0.000099f, +0.000002f, +0.000419f, + -0.000566f, +0.000392f, -0.000547f, +0.000218f, +0.000216f, -0.000004f, +0.000127f, +0.000390f, -0.000046f, -0.000046f, + +0.000607f, -0.000122f, +0.000202f, +0.000030f, +0.000129f, -0.000217f, +0.000042f, -0.000247f, +0.000176f, -0.000045f, + +0.000105f, -0.000170f, +0.000163f, -0.000077f, +0.000172f, +0.000010f + }, + { + +0.000063f, +0.011793f, -0.013201f, +0.003806f, -0.001364f, +0.002328f, -0.005024f, +0.002680f, +0.000215f, -0.001369f, + -0.003675f, -0.001214f, -0.011717f, -0.036980f, +0.015594f, -0.017734f, -0.009342f, +0.000354f, -0.007794f, +0.001141f, + -0.010910f, +0.012174f, -0.007017f, +0.005515f, -0.006254f, -0.006233f, +0.001514f, -0.005500f, -0.002425f, -0.004541f, + +0.002415f, +0.001523f, +0.000154f, +0.002120f, -0.000974f, -0.000563f, -0.004428f, +0.000406f, +0.001214f, -0.002529f, + -0.003191f, +0.001791f, -0.001117f, -0.000710f, -0.001344f, -0.000225f, -0.001213f, +0.000286f, +0.001798f, -0.001609f, + +0.000217f, -0.000525f, +0.001154f, -0.001782f, +0.000724f, -0.001037f, -0.000364f, -0.000504f, -0.000355f, +0.001217f, + -0.000066f, +0.001373f, -0.000478f, -0.000447f, +0.000317f, -0.000032f, +0.000305f, -0.000448f, +0.000721f, -0.000677f, + +0.000777f, +0.000164f, +0.000522f, -0.000187f, +0.000448f, +0.000167f, +0.000049f, -0.000686f, +0.000387f, -0.000347f, + +0.000312f, +0.000004f, -0.000232f, +0.000229f, -0.000394f, +0.000475f, +0.000255f, -0.000203f, -0.000235f, -0.000099f, + +0.000329f, -0.000173f, -0.000241f, +0.000039f, +0.000332f, -0.000253f + }, + { + +0.026334f, -0.057030f, -0.001710f, +0.001390f, -0.010380f, +0.007952f, +0.012598f, -0.001161f, -0.000167f, -0.000266f, + -0.000716f, +0.002209f, -0.001465f, +0.012368f, +0.003318f, -0.006999f, -0.006615f, +0.003900f, +0.000930f, -0.000125f, + +0.002213f, +0.003724f, -0.003097f, +0.000501f, -0.000720f, -0.000193f, -0.001316f, +0.000715f, -0.001925f, -0.003588f, + +0.002285f, -0.003011f, +0.002348f, -0.001146f, +0.003727f, +0.000912f, -0.003473f, +0.000887f, -0.002655f, -0.000164f, + +0.000755f, -0.003094f, -0.002884f, -0.000616f, -0.001666f, +0.000012f, -0.001720f, +0.000762f, +0.001173f, -0.000366f, + +0.001290f, -0.000497f, -0.000824f, +0.001375f, +0.000807f, -0.000287f, +0.001147f, -0.001070f, +0.000743f, +0.000076f, + +0.000082f, +0.000669f, -0.000219f, +0.000492f, -0.000609f, -0.000438f, +0.000871f, +0.000338f, -0.000339f, +0.000013f, + +0.000068f, -0.000240f, +0.000380f, -0.000219f, -0.000170f, +0.000303f, -0.000074f, +0.000039f, -0.000055f, -0.000303f, + -0.000131f, +0.000120f, -0.000251f, -0.000105f, +0.000062f, -0.000141f, +0.000168f, +0.000399f, -0.000414f, +0.000052f, + +0.000187f, -0.000365f, +0.000028f, +0.000081f, +0.000179f, -0.000281f + }, + { + +0.000696f, -0.007471f, -0.003985f, -0.000763f, -0.001042f, -0.000923f, +0.000141f, +0.000382f, +0.001945f, +0.001046f, + -0.003430f, -0.004151f, -0.008851f, +0.053530f, -0.095672f, +0.008332f, -0.004444f, -0.005246f, -0.004454f, -0.012815f, + +0.007333f, -0.013923f, -0.005805f, -0.000109f, +0.005236f, -0.000441f, +0.001683f, -0.002736f, -0.001264f, -0.003050f, + +0.000500f, -0.003227f, +0.002848f, +0.000047f, +0.002730f, -0.003426f, +0.001818f, +0.003091f, -0.002118f, -0.000016f, + +0.001134f, -0.001774f, +0.000997f, -0.000781f, -0.000017f, +0.000116f, -0.001018f, -0.000249f, -0.001383f, +0.000406f, + +0.001928f, -0.001137f, +0.000231f, -0.001313f, -0.002696f, -0.000602f, +0.001326f, -0.000765f, +0.000100f, -0.000917f, + -0.000312f, -0.000958f, -0.000211f, -0.000687f, -0.000418f, -0.000573f, +0.000309f, -0.000396f, -0.000014f, +0.000568f, + +0.000207f, +0.000839f, -0.000298f, +0.000020f, -0.000120f, -0.000013f, +0.000217f, -0.000230f, +0.000182f, -0.000234f, + -0.000435f, +0.000053f, -0.000085f, -0.000082f, -0.000121f, -0.000082f, -0.000062f, +0.000113f, -0.000040f, +0.000157f, + -0.000113f, -0.000061f, +0.000078f, -0.000063f, +0.000151f, -0.000259f + } + }, + { + { + +0.015168f, +0.151232f, +0.076229f, -0.008087f, +0.002014f, -0.000174f, -0.000486f, -0.002577f, +0.002093f, +0.000357f, + +0.002247f, +0.003008f, +0.000506f, -0.004324f, -0.000145f, +0.004750f, -0.000125f, +0.006220f, -0.003619f, -0.002279f, + +0.001784f, -0.001179f, -0.001201f, +0.000457f, +0.000528f, +0.000157f, +0.003244f, -0.001887f, +0.001887f, +0.002201f, + +0.006753f, +0.002111f, -0.000339f, +0.000302f, -0.000800f, +0.003530f, -0.001595f, +0.002397f, +0.000009f, -0.003811f, + -0.001345f, -0.000435f, -0.000033f, -0.000151f, -0.000958f, -0.000347f, -0.000324f, -0.002979f, -0.000006f, +0.000017f, + +0.000013f, -0.000049f, -0.000457f, -0.000149f, -0.000086f, -0.000534f, +0.000562f, +0.000722f, -0.000575f, +0.000304f, + +0.000598f, -0.000169f, -0.000155f, -0.000083f, -0.000031f, +0.000448f, +0.000141f, +0.000047f, -0.000057f, +0.000090f, + +0.000642f, -0.000209f, +0.000420f, +0.000031f, -0.000361f, -0.000200f, +0.000135f, +0.000211f, +0.000155f, +0.000192f, + +0.000190f, -0.000009f, +0.000159f, +0.000242f, +0.000200f, +0.000066f, -0.000032f, -0.000061f, -0.000055f, -0.000113f, + +0.000121f, +0.000047f, +0.000128f, +0.000196f, +0.000096f, +0.000117f + }, + { + +0.002752f, +0.048993f, +0.012198f, -0.009312f, -0.005428f, -0.001528f, -0.001577f, -0.000221f, +0.000309f, +0.000413f, + +0.000890f, -0.001720f, -0.002116f, -0.000453f, +0.004191f, +0.006210f, -0.007460f, -0.002457f, -0.010159f, -0.004551f, + -0.003890f, -0.001692f, +0.000696f, -0.000988f, +0.008640f, +0.002059f, -0.002621f, -0.006979f, -0.002343f, -0.002204f, + -0.000206f, +0.003790f, +0.005699f, +0.002024f, +0.003316f, -0.002290f, -0.001037f, -0.001379f, +0.000025f, +0.001152f, + -0.001757f, +0.002202f, +0.000168f, +0.000260f, +0.001960f, -0.001095f, +0.000091f, -0.000541f, +0.000328f, -0.000484f, + -0.000219f, +0.000325f, +0.000772f, +0.000170f, -0.000191f, -0.000165f, -0.000902f, -0.000425f, +0.000141f, +0.000238f, + +0.000097f, +0.000762f, +0.000183f, -0.000300f, +0.000089f, +0.000428f, +0.000539f, +0.000212f, -0.000458f, -0.000237f, + +0.000164f, -0.000191f, -0.000153f, +0.000057f, +0.000345f, +0.000070f, -0.000232f, +0.000095f, +0.000277f, +0.000016f, + -0.000050f, +0.000051f, +0.000021f, -0.000073f, +0.000170f, +0.000217f, +0.000068f, -0.000012f, -0.000064f, -0.000006f, + -0.000020f, +0.000080f, +0.000066f, -0.000141f, -0.000124f, +0.000020f + }, + { + -0.001463f, -0.106686f, -0.031695f, +0.012274f, +0.009037f, +0.000586f, +0.000607f, -0.000171f, +0.000066f, +0.000235f, + -0.003783f, -0.000085f, +0.003424f, -0.000121f, -0.005329f, +0.003374f, +0.000336f, -0.000581f, -0.007086f, -0.004622f, + -0.004658f, +0.006389f, -0.001389f, -0.001728f, -0.001900f, -0.002222f, -0.002271f, +0.000551f, +0.000673f, -0.000788f, + -0.001092f, +0.001618f, +0.005153f, -0.001502f, -0.002435f, +0.001244f, +0.002406f, +0.002501f, -0.002175f, +0.000397f, + +0.000755f, +0.002654f, +0.002454f, -0.001047f, -0.000491f, -0.000050f, +0.000406f, +0.000647f, -0.000649f, -0.000003f, + -0.001244f, +0.000922f, +0.000291f, +0.002128f, +0.001889f, -0.000293f, -0.000202f, -0.000204f, -0.000625f, -0.000540f, + -0.000657f, +0.000359f, +0.000230f, +0.000361f, +0.000324f, +0.000598f, -0.000339f, +0.000318f, +0.000418f, +0.000028f, + -0.000742f, -0.000305f, +0.000403f, +0.000542f, -0.000221f, -0.000298f, +0.000004f, +0.000261f, -0.000047f, +0.000115f, + -0.000310f, -0.000270f, -0.000114f, -0.000015f, +0.000104f, -0.000147f, -0.000106f, -0.000179f, +0.000046f, +0.000112f, + -0.000092f, -0.000030f, +0.000112f, -0.000062f, -0.000007f, +0.000205f + }, + { + +0.034720f, -0.006430f, -0.004111f, +0.004588f, -0.001600f, -0.001547f, -0.001468f, -0.000099f, -0.000434f, -0.001573f, + -0.001425f, -0.000280f, -0.002060f, -0.000949f, -0.009971f, -0.002142f, +0.001519f, -0.010974f, -0.005030f, -0.001807f, + +0.001148f, +0.001529f, +0.001748f, +0.001923f, +0.000593f, -0.000045f, +0.001254f, +0.000792f, +0.000812f, +0.001150f, + -0.000087f, -0.001855f, -0.001898f, -0.000640f, -0.000494f, -0.001752f, -0.001876f, +0.000562f, -0.000461f, -0.000173f, + +0.000621f, -0.000588f, -0.000699f, -0.000272f, -0.000472f, +0.001463f, +0.000003f, +0.000511f, -0.000669f, -0.000645f, + +0.000406f, -0.000348f, +0.000339f, +0.000363f, +0.000895f, +0.001499f, +0.000199f, +0.000160f, -0.000023f, -0.000036f, + -0.000289f, +0.000134f, -0.000231f, +0.000251f, -0.000284f, +0.000210f, +0.000407f, -0.000402f, +0.000171f, +0.000280f, + -0.000140f, -0.000228f, -0.000273f, -0.000085f, -0.000584f, -0.000112f, -0.000158f, +0.000125f, +0.000152f, +0.000204f, + -0.000127f, -0.000040f, -0.000033f, +0.000092f, -0.000021f, -0.000105f, -0.000028f, -0.000157f, +0.000016f, +0.000103f, + -0.000003f, -0.000015f, +0.000085f, +0.000023f, -0.000030f, +0.000036f + }, + { + +0.000838f, +0.016475f, +0.002269f, +0.000706f, -0.000224f, +0.000258f, -0.000325f, -0.000063f, +0.000388f, +0.000037f, + +0.000225f, -0.001227f, -0.000959f, +0.001712f, +0.009257f, +0.000709f, -0.004931f, +0.019921f, +0.024283f, +0.005008f, + -0.001002f, +0.000283f, +0.004166f, +0.003600f, -0.000175f, -0.000925f, -0.002792f, -0.000126f, +0.000836f, +0.002339f, + +0.005459f, -0.001794f, -0.001663f, -0.002560f, +0.002272f, +0.001564f, -0.000462f, +0.001863f, -0.000824f, +0.000344f, + +0.000778f, +0.001764f, +0.000444f, -0.000656f, -0.001595f, +0.000183f, -0.000514f, +0.000974f, +0.000847f, +0.000875f, + -0.000232f, -0.000834f, -0.000955f, -0.000490f, -0.000808f, -0.000366f, +0.000052f, -0.001016f, +0.000385f, +0.001160f, + +0.001135f, -0.000312f, -0.000635f, -0.000215f, +0.000257f, +0.000088f, +0.000353f, -0.000101f, +0.000121f, -0.000301f, + -0.000055f, +0.000322f, -0.000032f, +0.000103f, +0.000428f, +0.000399f, +0.000334f, +0.000238f, +0.000292f, +0.000350f, + +0.000195f, +0.000019f, -0.000293f, +0.000012f, -0.000038f, -0.000081f, -0.000032f, -0.000039f, +0.000154f, +0.000176f, + +0.000057f, -0.000001f, -0.000143f, +0.000095f, +0.000163f, +0.000101f + }, + { + +0.052143f, -0.085666f, -0.018463f, -0.000186f, +0.000814f, +0.000640f, +0.000331f, -0.002669f, -0.001100f, +0.001561f, + -0.001312f, -0.000620f, -0.004909f, +0.000678f, +0.000657f, -0.001264f, -0.001140f, -0.000164f, +0.001599f, +0.001615f, + +0.001726f, +0.000869f, -0.000225f, -0.001604f, +0.001872f, +0.001186f, +0.002778f, +0.000358f, +0.000939f, +0.001096f, + +0.003696f, -0.001435f, +0.002319f, +0.001513f, +0.002056f, -0.001420f, -0.001262f, -0.001410f, +0.000133f, +0.000073f, + +0.000477f, -0.001082f, -0.000097f, +0.001448f, +0.000492f, -0.000815f, -0.001284f, -0.000232f, +0.001532f, +0.000294f, + -0.000878f, +0.000754f, +0.000705f, -0.000063f, -0.000158f, +0.000068f, +0.000737f, +0.000757f, +0.000430f, -0.000485f, + -0.000152f, +0.000133f, +0.000523f, -0.000125f, +0.000111f, +0.000353f, +0.000479f, +0.000346f, +0.000000f, -0.000274f, + -0.000082f, +0.000087f, -0.000355f, +0.000492f, +0.000188f, +0.000228f, +0.000238f, +0.000013f, +0.000036f, +0.000392f, + +0.000083f, -0.000062f, -0.000078f, +0.000052f, +0.000325f, +0.000205f, +0.000062f, -0.000027f, -0.000253f, -0.000033f, + +0.000102f, +0.000119f, -0.000011f, -0.000123f, +0.000002f, +0.000202f + }, + { + +0.000455f, +0.006888f, -0.001990f, -0.002220f, +0.000032f, +0.000499f, +0.000460f, +0.000037f, +0.000218f, -0.000664f, + -0.000143f, -0.000094f, -0.002748f, +0.011194f, -0.000519f, +0.007027f, +0.006389f, +0.000995f, +0.006703f, +0.002668f, + -0.002601f, -0.003417f, -0.007464f, -0.016643f, -0.000619f, +0.003069f, -0.000458f, -0.002243f, -0.001746f, -0.002731f, + -0.000319f, -0.002086f, +0.002694f, +0.002443f, +0.000732f, -0.001901f, -0.001353f, +0.000829f, +0.000683f, +0.001395f, + +0.001067f, -0.000897f, +0.000282f, +0.000544f, +0.002527f, +0.000373f, +0.000298f, -0.000273f, -0.000368f, -0.000874f, + -0.000349f, +0.000689f, +0.000250f, +0.000204f, +0.000214f, +0.000352f, +0.000864f, -0.000507f, -0.000223f, +0.000400f, + -0.000114f, +0.000009f, +0.000013f, +0.000244f, -0.000019f, -0.000274f, -0.000436f, +0.000442f, -0.000245f, -0.000038f, + -0.000460f, -0.000193f, -0.000328f, +0.000156f, +0.000510f, +0.000447f, +0.000494f, -0.000031f, -0.000393f, -0.000224f, + +0.000108f, +0.000143f, -0.000037f, -0.000008f, -0.000135f, +0.000095f, -0.000034f, +0.000102f, +0.000071f, -0.000130f, + -0.000022f, -0.000169f, -0.000006f, -0.000009f, -0.000035f, +0.000024f + }, + { + -0.043950f, -0.021860f, -0.006546f, -0.004499f, -0.003146f, +0.000058f, +0.000649f, +0.000087f, +0.001100f, +0.001178f, + +0.002566f, +0.000361f, -0.000624f, -0.001500f, -0.001530f, +0.000242f, -0.004533f, -0.003282f, +0.002636f, +0.000587f, + -0.000088f, -0.001442f, -0.000187f, +0.000666f, -0.001668f, +0.001551f, +0.002223f, +0.000162f, -0.000434f, +0.002635f, + -0.000476f, -0.002006f, -0.001919f, -0.002546f, +0.000206f, +0.004154f, +0.000493f, +0.000665f, -0.002789f, -0.002099f, + +0.000695f, +0.002336f, +0.001884f, -0.000158f, -0.000789f, -0.000763f, +0.000376f, +0.001857f, -0.000594f, +0.000859f, + +0.000031f, -0.001605f, -0.000034f, +0.000325f, +0.000228f, +0.001586f, +0.000987f, +0.000511f, -0.000424f, -0.000556f, + +0.000914f, -0.000338f, +0.000009f, -0.000420f, +0.000321f, -0.000279f, -0.000119f, +0.000115f, +0.000214f, +0.000154f, + -0.000460f, -0.000799f, +0.000024f, +0.000416f, +0.000269f, +0.000350f, +0.000617f, +0.000270f, +0.000519f, +0.000163f, + +0.000282f, +0.000167f, -0.000052f, +0.000234f, +0.000037f, -0.000088f, +0.000051f, -0.000087f, -0.000074f, +0.000325f, + +0.000140f, +0.000105f, +0.000049f, -0.000141f, -0.000052f, -0.000034f + }, + { + +0.000257f, +0.016239f, +0.008321f, +0.001370f, -0.000412f, -0.000494f, +0.000375f, +0.000543f, -0.000484f, -0.000296f, + +0.002550f, +0.000114f, +0.003728f, -0.000383f, +0.004054f, +0.005484f, +0.002340f, -0.003043f, +0.005462f, -0.007895f, + -0.000925f, +0.002111f, -0.001328f, +0.007236f, -0.006343f, -0.003076f, +0.000345f, -0.000028f, -0.002682f, -0.003150f, + +0.000714f, +0.002846f, +0.002792f, +0.001582f, +0.000759f, +0.000670f, -0.000129f, -0.000448f, +0.001066f, -0.000272f, + +0.000270f, +0.000658f, -0.000459f, +0.001260f, +0.001572f, +0.000825f, -0.000154f, -0.000968f, +0.000064f, +0.000041f, + -0.000142f, +0.000249f, -0.001001f, -0.001072f, -0.000397f, -0.000420f, -0.000020f, -0.000061f, +0.000737f, -0.000009f, + +0.000229f, -0.000185f, +0.000220f, -0.000476f, +0.000069f, -0.000655f, -0.000323f, -0.000130f, -0.000218f, +0.000579f, + +0.000222f, -0.000368f, +0.000296f, -0.000102f, +0.000089f, +0.000049f, -0.000225f, +0.000288f, +0.000143f, +0.000112f, + -0.000062f, -0.000046f, -0.000237f, -0.000198f, -0.000087f, -0.000001f, +0.000099f, +0.000064f, +0.000161f, -0.000004f, + +0.000152f, -0.000042f, -0.000158f, +0.000008f, -0.000018f, +0.000175f + }, + { + -0.006324f, -0.089693f, +0.002743f, +0.002274f, +0.003309f, +0.007966f, -0.012737f, -0.004371f, -0.001997f, -0.000686f, + +0.000482f, +0.000679f, -0.002051f, -0.004511f, +0.005264f, +0.000091f, +0.010663f, -0.000189f, -0.001188f, +0.007015f, + +0.003492f, +0.001718f, -0.000687f, +0.001231f, -0.002030f, +0.000337f, +0.002480f, -0.000327f, -0.000543f, +0.000394f, + -0.001504f, -0.002497f, -0.003273f, -0.001351f, -0.001390f, -0.000027f, +0.000920f, +0.000290f, +0.000572f, +0.001374f, + +0.000835f, +0.000707f, +0.000493f, +0.001021f, +0.001146f, +0.000277f, -0.001285f, +0.000078f, -0.000660f, +0.000717f, + +0.000250f, -0.000366f, +0.000023f, -0.000038f, +0.000302f, +0.000788f, -0.000149f, -0.000564f, -0.000492f, -0.000383f, + -0.000068f, -0.000105f, -0.000436f, +0.000079f, -0.000150f, +0.000194f, +0.000165f, +0.000425f, -0.000443f, +0.000022f, + +0.000071f, -0.000056f, +0.000102f, -0.000121f, +0.000137f, -0.000213f, +0.000077f, -0.000166f, -0.000125f, +0.000004f, + -0.000382f, +0.000039f, +0.000144f, -0.000241f, +0.000185f, +0.000147f, +0.000103f, +0.000169f, +0.000082f, +0.000040f, + +0.000109f, -0.000058f, +0.000001f, +0.000148f, +0.000092f, +0.000145f + }, + { + +0.001527f, +0.018775f, +0.004715f, -0.000591f, -0.001775f, +0.000786f, +0.001032f, +0.001653f, +0.000728f, +0.001354f, + +0.001006f, -0.000962f, -0.003030f, -0.006799f, +0.008449f, -0.007599f, +0.002895f, +0.002446f, +0.002067f, -0.005687f, + -0.002258f, -0.002811f, +0.000359f, +0.001083f, +0.003143f, +0.000851f, -0.001107f, -0.000011f, +0.002368f, +0.000793f, + +0.002453f, +0.002549f, -0.000616f, -0.002278f, -0.001756f, +0.000068f, -0.002664f, -0.000526f, -0.000690f, +0.001153f, + -0.000470f, -0.000656f, +0.000692f, +0.000509f, -0.000129f, +0.001099f, +0.000573f, -0.001021f, +0.001741f, +0.001398f, + +0.000866f, +0.000283f, -0.000330f, +0.000236f, +0.000310f, +0.000144f, +0.000096f, +0.000027f, -0.000513f, +0.000369f, + -0.000289f, -0.000300f, +0.000021f, +0.000164f, +0.000285f, -0.000333f, -0.000284f, +0.000417f, -0.000203f, +0.000098f, + +0.000146f, -0.000275f, +0.000248f, +0.000172f, -0.000164f, +0.000183f, -0.000074f, -0.000186f, +0.000011f, +0.000064f, + +0.000095f, +0.000051f, -0.000187f, -0.000276f, -0.000011f, +0.000089f, -0.000026f, +0.000051f, -0.000116f, -0.000173f, + +0.000021f, -0.000024f, +0.000020f, +0.000065f, +0.000122f, +0.000075f + }, + { + -0.004786f, +0.045268f, +0.003347f, -0.000645f, +0.003697f, -0.007600f, -0.007744f, -0.001645f, +0.001197f, +0.003449f, + -0.001973f, -0.001369f, +0.002477f, +0.003202f, -0.003432f, -0.008257f, -0.003042f, -0.000849f, +0.000108f, -0.001802f, + +0.000460f, -0.000226f, -0.002683f, -0.000547f, -0.000807f, -0.000502f, +0.000109f, -0.001423f, -0.001268f, +0.000221f, + -0.004354f, -0.003744f, -0.000793f, -0.000534f, +0.000698f, -0.000427f, +0.000653f, +0.000872f, -0.000668f, -0.002159f, + +0.000553f, -0.001037f, -0.000391f, +0.001672f, +0.001221f, +0.000136f, +0.000037f, -0.000924f, -0.000133f, +0.000004f, + +0.001865f, -0.000339f, -0.000746f, -0.000157f, -0.000218f, -0.000272f, +0.000144f, +0.000704f, -0.000178f, -0.000033f, + -0.000604f, -0.000214f, -0.000060f, +0.000120f, -0.000556f, +0.000126f, +0.000490f, -0.000132f, +0.000051f, +0.000243f, + +0.000082f, -0.000222f, +0.000115f, +0.000046f, +0.000197f, +0.000179f, +0.000072f, +0.000245f, -0.000277f, +0.000097f, + +0.000314f, +0.000292f, +0.000054f, +0.000154f, +0.000012f, -0.000061f, -0.000159f, -0.000202f, +0.000022f, +0.000231f, + +0.000168f, +0.000065f, +0.000002f, -0.000010f, +0.000082f, +0.000145f + }, + { + -0.000469f, +0.000754f, -0.003374f, +0.001740f, +0.000131f, -0.000020f, -0.000906f, -0.000812f, +0.000951f, +0.000402f, + -0.001048f, -0.002104f, -0.008358f, -0.031682f, -0.001001f, -0.005760f, -0.007497f, -0.003008f, -0.003956f, -0.002050f, + -0.001266f, +0.000663f, +0.008090f, -0.000945f, -0.006870f, -0.008624f, +0.001136f, -0.004991f, -0.002857f, +0.000176f, + -0.000284f, +0.000509f, -0.001597f, +0.002668f, -0.000564f, -0.002837f, -0.001738f, -0.001146f, +0.000485f, -0.001478f, + -0.002036f, -0.000405f, -0.000267f, -0.001950f, -0.000864f, -0.000749f, +0.000078f, +0.000276f, +0.000530f, -0.000149f, + -0.001415f, -0.000214f, +0.000381f, -0.000309f, +0.000880f, -0.000461f, -0.001271f, +0.000058f, -0.000068f, +0.000227f, + +0.000118f, +0.000136f, +0.000265f, +0.000077f, +0.000057f, -0.000078f, -0.000160f, -0.000247f, +0.000563f, +0.000030f, + +0.000194f, +0.000163f, +0.000061f, +0.000317f, +0.000330f, +0.000157f, -0.000151f, +0.000022f, -0.000182f, -0.000051f, + -0.000133f, +0.000032f, +0.000030f, -0.000029f, -0.000220f, +0.000166f, +0.000218f, +0.000032f, -0.000108f, -0.000056f, + -0.000021f, +0.000157f, +0.000017f, -0.000096f, +0.000216f, +0.000005f + }, + { + -0.018998f, +0.000195f, +0.001565f, -0.007510f, -0.005117f, +0.002266f, +0.010728f, +0.001125f, +0.001896f, +0.000073f, + +0.002665f, +0.000203f, +0.002110f, -0.005240f, +0.021070f, -0.003832f, -0.007314f, +0.001199f, +0.000460f, -0.001751f, + +0.002167f, +0.003228f, -0.001969f, -0.001740f, +0.000027f, +0.001347f, -0.000413f, -0.000201f, -0.002448f, -0.000676f, + -0.001455f, -0.000062f, +0.000123f, +0.001391f, +0.000548f, +0.000193f, -0.000515f, -0.000599f, -0.001746f, -0.000214f, + -0.001224f, -0.001612f, -0.002379f, -0.002214f, -0.001392f, -0.001100f, -0.000767f, +0.000640f, +0.000775f, +0.000440f, + -0.000022f, -0.000512f, +0.001207f, +0.000244f, +0.000659f, -0.000614f, -0.000594f, +0.000395f, +0.000012f, +0.000405f, + +0.000043f, -0.000178f, +0.000701f, -0.000317f, -0.000173f, -0.000324f, +0.000387f, +0.000114f, -0.000012f, +0.000137f, + -0.000208f, -0.000132f, +0.000180f, -0.000030f, -0.000205f, -0.000115f, +0.000310f, +0.000051f, -0.000316f, -0.000127f, + -0.000206f, -0.000162f, -0.000187f, -0.000181f, -0.000107f, -0.000289f, +0.000322f, +0.000194f, -0.000048f, -0.000003f, + +0.000169f, -0.000250f, -0.000095f, +0.000034f, +0.000011f, -0.000036f + }, + { + -0.001061f, -0.010061f, -0.001316f, -0.000843f, -0.000651f, -0.000017f, -0.001021f, +0.000220f, +0.001632f, -0.000791f, + -0.003424f, -0.002438f, -0.000969f, -0.017850f, +0.015972f, -0.007899f, -0.007231f, -0.005216f, -0.003007f, -0.003191f, + -0.009679f, -0.010878f, -0.002948f, +0.002933f, +0.002814f, -0.002210f, -0.000938f, -0.000739f, +0.000597f, -0.000973f, + -0.002419f, +0.000598f, +0.000964f, +0.000651f, +0.000852f, -0.000273f, +0.002023f, +0.000185f, -0.000840f, -0.000677f, + +0.000320f, +0.001160f, +0.000401f, -0.001692f, +0.000500f, -0.000546f, -0.000362f, -0.001288f, -0.000118f, +0.000897f, + -0.000032f, +0.000058f, +0.000096f, -0.001203f, -0.001854f, -0.000882f, +0.000043f, +0.000028f, +0.000239f, +0.000110f, + -0.000459f, -0.000419f, +0.000216f, -0.000731f, +0.000059f, -0.001051f, -0.000443f, +0.000589f, -0.000026f, +0.000280f, + +0.000062f, +0.000843f, +0.000144f, +0.000147f, +0.000042f, -0.000202f, +0.000065f, +0.000176f, +0.000186f, -0.000088f, + -0.000493f, -0.000289f, -0.000165f, +0.000089f, -0.000135f, -0.000171f, +0.000025f, -0.000042f, +0.000019f, +0.000011f, + -0.000020f, -0.000127f, +0.000025f, +0.000011f, -0.000008f, -0.000054f + } + }, + { + { + -0.011632f, +0.036114f, +0.026156f, -0.010866f, +0.002030f, +0.000580f, -0.000296f, -0.001546f, +0.001579f, -0.002814f, + +0.000155f, +0.002407f, +0.001163f, -0.001321f, -0.001896f, +0.003237f, -0.001433f, +0.001460f, -0.006882f, +0.002081f, + +0.000772f, -0.000626f, -0.002176f, -0.001138f, +0.001319f, +0.000582f, +0.002220f, -0.000448f, -0.000530f, -0.001205f, + +0.003632f, -0.000871f, +0.001383f, +0.002733f, +0.001366f, +0.002350f, -0.002434f, +0.002352f, +0.001339f, -0.000755f, + +0.000766f, -0.000204f, +0.000569f, +0.000834f, -0.001081f, +0.000340f, +0.001008f, -0.002540f, +0.000450f, +0.000803f, + +0.000718f, +0.000543f, -0.000435f, -0.000135f, -0.000062f, +0.000024f, -0.000171f, -0.000245f, -0.000526f, -0.000013f, + +0.000436f, +0.000040f, -0.000353f, -0.000271f, -0.000467f, -0.000023f, -0.000127f, +0.000072f, +0.000046f, +0.000003f, + +0.000333f, -0.000075f, +0.000506f, +0.000327f, -0.000087f, -0.000226f, +0.000163f, +0.000467f, -0.000158f, +0.000063f, + +0.000132f, -0.000013f, +0.000047f, +0.000120f, +0.000071f, -0.000185f, +0.000249f, -0.000093f, -0.000044f, -0.000097f, + +0.000127f, -0.000061f, +0.000017f, -0.000024f, -0.000006f, +0.000082f + }, + { + +0.000584f, +0.019836f, -0.000098f, -0.003903f, +0.002792f, +0.000141f, -0.000775f, -0.001714f, +0.001261f, -0.000095f, + -0.000814f, -0.001340f, +0.001033f, -0.001500f, -0.001702f, -0.000380f, -0.010171f, +0.001025f, +0.001840f, +0.002803f, + +0.001049f, -0.001484f, -0.000609f, -0.002998f, +0.003805f, +0.001247f, -0.001476f, -0.003296f, +0.001259f, -0.000952f, + -0.000862f, -0.000830f, +0.001735f, -0.000011f, +0.000917f, +0.000385f, +0.003446f, +0.001517f, +0.001322f, +0.001416f, + -0.002034f, +0.002498f, +0.000940f, -0.000600f, -0.000219f, -0.000259f, +0.000423f, -0.000697f, -0.000089f, -0.000664f, + +0.000034f, +0.000044f, +0.000644f, +0.000333f, +0.000267f, -0.000781f, -0.000608f, +0.000225f, -0.000115f, -0.000342f, + +0.000166f, +0.000657f, +0.000161f, +0.000088f, -0.000063f, +0.000007f, -0.000169f, +0.000394f, -0.000088f, -0.000015f, + +0.000129f, -0.000169f, -0.000076f, +0.000021f, +0.000180f, +0.000041f, -0.000179f, -0.000040f, +0.000142f, +0.000020f, + +0.000088f, -0.000095f, +0.000014f, +0.000023f, +0.000130f, +0.000070f, +0.000004f, +0.000023f, -0.000127f, +0.000228f, + -0.000148f, -0.000038f, -0.000010f, +0.000009f, +0.000078f, -0.000008f + }, + { + -0.004701f, -0.052188f, +0.000005f, -0.009808f, -0.001025f, +0.000501f, +0.000132f, -0.000372f, -0.000488f, +0.000728f, + +0.000364f, +0.000845f, +0.003927f, -0.003305f, -0.004772f, +0.001477f, -0.001462f, +0.004012f, -0.001612f, -0.000141f, + -0.002881f, +0.005468f, -0.000722f, -0.000246f, +0.001229f, +0.001639f, -0.000347f, +0.001381f, -0.001632f, -0.000404f, + +0.000465f, -0.000326f, +0.003530f, -0.001452f, +0.000194f, -0.002049f, -0.000294f, +0.001080f, -0.001085f, +0.000771f, + -0.000747f, -0.000783f, +0.000852f, -0.000318f, +0.000160f, +0.001262f, +0.000160f, +0.000324f, -0.000543f, +0.000011f, + -0.001762f, +0.000809f, +0.000364f, +0.000435f, +0.000148f, -0.000424f, -0.000065f, +0.000220f, -0.000267f, +0.000080f, + +0.000087f, +0.000108f, -0.000552f, +0.000382f, -0.000224f, +0.000439f, -0.000522f, -0.000224f, -0.000194f, +0.000400f, + -0.000237f, -0.000131f, +0.000240f, -0.000022f, -0.000039f, +0.000306f, +0.000019f, -0.000005f, -0.000270f, +0.000243f, + -0.000039f, -0.000174f, +0.000168f, -0.000064f, -0.000088f, -0.000020f, -0.000000f, +0.000046f, +0.000039f, +0.000067f, + +0.000010f, -0.000037f, -0.000023f, -0.000030f, -0.000009f, -0.000020f + }, + { + -0.010541f, -0.061025f, -0.006930f, +0.002036f, +0.002057f, -0.000398f, +0.000047f, -0.000426f, -0.000420f, -0.000565f, + +0.000487f, +0.000478f, -0.000827f, +0.002641f, -0.002349f, -0.000629f, +0.000549f, -0.004949f, +0.000585f, +0.000328f, + +0.000824f, +0.000402f, +0.000108f, +0.000726f, +0.000940f, +0.000028f, -0.001842f, -0.000906f, +0.000721f, +0.000977f, + +0.000979f, -0.000977f, -0.000975f, -0.000223f, +0.000225f, +0.000824f, -0.000952f, +0.000250f, -0.000804f, +0.000122f, + +0.000789f, -0.000822f, -0.000314f, +0.000942f, -0.000667f, +0.000199f, +0.000530f, +0.000346f, -0.000387f, +0.000109f, + +0.000669f, -0.000574f, +0.000135f, +0.000106f, -0.000367f, +0.000159f, +0.000074f, +0.000625f, +0.000350f, -0.000063f, + +0.000161f, +0.000079f, +0.000226f, +0.000197f, +0.000058f, +0.000267f, +0.000058f, -0.000045f, -0.000075f, +0.000104f, + +0.000105f, +0.000335f, -0.000293f, +0.000047f, -0.000252f, +0.000162f, -0.000036f, +0.000035f, -0.000001f, +0.000098f, + +0.000028f, +0.000136f, +0.000016f, -0.000098f, +0.000054f, -0.000023f, -0.000090f, +0.000005f, -0.000088f, -0.000025f, + +0.000034f, +0.000034f, -0.000029f, -0.000015f, +0.000058f, +0.000025f + }, + { + +0.000020f, +0.012405f, -0.002267f, -0.001644f, +0.000743f, +0.000108f, -0.000553f, +0.000244f, -0.000384f, +0.000355f, + +0.000280f, -0.000288f, -0.000486f, -0.004972f, -0.001025f, +0.001043f, -0.004637f, +0.000147f, +0.003087f, -0.002714f, + +0.000903f, +0.000037f, +0.001802f, +0.002295f, -0.000087f, +0.000674f, -0.003444f, -0.000040f, -0.000771f, -0.000276f, + +0.002495f, -0.001935f, -0.000041f, -0.000990f, +0.000277f, -0.001012f, -0.003058f, +0.001579f, -0.000276f, -0.000922f, + +0.000139f, +0.000677f, +0.000031f, +0.000114f, -0.000997f, +0.000512f, +0.000091f, +0.000118f, -0.000303f, -0.000035f, + -0.000097f, +0.000077f, -0.000539f, +0.000376f, -0.000592f, -0.000401f, +0.000242f, -0.000100f, -0.000218f, -0.000014f, + -0.000088f, -0.000680f, -0.000284f, -0.000102f, +0.000373f, -0.000018f, +0.000412f, +0.000130f, +0.000103f, +0.000044f, + +0.000150f, +0.000183f, -0.000002f, +0.000027f, -0.000203f, -0.000260f, +0.000086f, -0.000019f, -0.000002f, +0.000263f, + +0.000072f, +0.000214f, -0.000299f, -0.000181f, +0.000124f, -0.000026f, +0.000089f, +0.000006f, +0.000043f, -0.000060f, + -0.000005f, +0.000099f, +0.000013f, -0.000042f, -0.000100f, +0.000111f + }, + { + -0.013246f, -0.134816f, +0.006328f, -0.001832f, -0.000894f, +0.000619f, -0.000215f, +0.001290f, -0.001715f, -0.001787f, + +0.001945f, +0.001161f, -0.004674f, +0.003042f, +0.000426f, -0.000582f, -0.000365f, -0.000856f, +0.001668f, -0.000838f, + +0.000539f, -0.000240f, +0.000469f, -0.000661f, +0.000406f, -0.000371f, +0.000458f, -0.001014f, -0.001146f, -0.001596f, + +0.000976f, -0.002296f, +0.001969f, -0.001792f, -0.000247f, -0.001280f, -0.001224f, -0.000119f, +0.000700f, +0.000617f, + +0.000082f, -0.002127f, -0.000419f, +0.000935f, +0.000763f, -0.000627f, +0.000080f, +0.000049f, -0.000146f, -0.000109f, + -0.000615f, -0.000008f, +0.000287f, +0.000101f, +0.000679f, -0.000223f, +0.000667f, +0.000184f, -0.000042f, -0.000495f, + -0.000032f, +0.000056f, +0.000235f, -0.000152f, -0.000089f, +0.000035f, +0.000052f, +0.000190f, -0.000138f, -0.000254f, + +0.000009f, +0.000248f, -0.000097f, +0.000018f, -0.000046f, -0.000058f, +0.000110f, +0.000065f, -0.000122f, +0.000119f, + -0.000015f, +0.000007f, -0.000011f, -0.000370f, +0.000162f, +0.000085f, +0.000077f, -0.000074f, +0.000123f, -0.000002f, + +0.000058f, +0.000037f, -0.000073f, -0.000018f, -0.000089f, +0.000119f + }, + { + -0.001113f, +0.005702f, +0.003147f, -0.001366f, +0.000449f, +0.000017f, -0.000031f, -0.000518f, +0.000439f, -0.000032f, + -0.000282f, +0.000340f, -0.002267f, +0.009668f, -0.003993f, +0.003301f, -0.001067f, -0.002646f, +0.001192f, -0.004156f, + -0.001441f, -0.000027f, -0.001338f, -0.006866f, +0.001995f, +0.000773f, -0.001941f, +0.001073f, +0.000270f, -0.001707f, + +0.002023f, +0.000310f, -0.000494f, -0.001746f, +0.000633f, -0.000168f, -0.001073f, +0.000427f, -0.000191f, -0.000354f, + +0.001479f, -0.000655f, -0.000474f, +0.000316f, +0.000270f, -0.000729f, +0.000571f, -0.000193f, -0.000439f, -0.000805f, + -0.000644f, +0.000191f, -0.000389f, +0.000003f, +0.000369f, -0.000065f, +0.000140f, +0.000262f, +0.000141f, +0.000321f, + -0.000250f, +0.000283f, +0.000225f, +0.000044f, +0.000018f, -0.000054f, -0.000236f, +0.000364f, -0.000056f, +0.000074f, + -0.000574f, +0.000069f, -0.000110f, -0.000139f, +0.000054f, +0.000018f, +0.000192f, +0.000086f, -0.000142f, -0.000177f, + -0.000146f, +0.000126f, -0.000090f, +0.000104f, -0.000132f, -0.000010f, -0.000024f, -0.000076f, +0.000031f, -0.000100f, + -0.000025f, -0.000026f, -0.000013f, +0.000058f, -0.000010f, +0.000005f + }, + { + +0.021176f, +0.065842f, -0.015716f, -0.002654f, -0.000558f, -0.000332f, -0.000400f, -0.000640f, -0.000434f, +0.000140f, + +0.002468f, +0.000147f, -0.000702f, -0.001893f, -0.000536f, +0.002016f, -0.001022f, +0.000430f, +0.000381f, -0.000899f, + +0.001725f, +0.000115f, -0.000404f, +0.001981f, -0.000400f, +0.000623f, +0.000103f, -0.000351f, -0.000558f, +0.000916f, + -0.001270f, +0.000034f, +0.000223f, +0.000130f, +0.000334f, +0.001551f, -0.001078f, -0.000433f, -0.001717f, -0.000846f, + -0.000698f, +0.000485f, -0.000188f, -0.000028f, +0.000260f, -0.000567f, -0.000660f, +0.001267f, -0.000715f, +0.000220f, + +0.000286f, -0.000200f, -0.000134f, -0.000521f, -0.000100f, +0.000234f, +0.000019f, +0.000374f, +0.000322f, -0.000222f, + +0.000520f, -0.000461f, -0.000070f, -0.000455f, +0.000596f, -0.000044f, -0.000010f, -0.000139f, +0.000105f, -0.000184f, + -0.000118f, -0.000344f, -0.000127f, +0.000113f, +0.000106f, +0.000017f, -0.000009f, +0.000172f, +0.000061f, -0.000193f, + +0.000254f, +0.000137f, -0.000178f, +0.000073f, -0.000021f, +0.000019f, -0.000066f, +0.000011f, -0.000146f, +0.000195f, + +0.000009f, -0.000025f, +0.000082f, +0.000014f, +0.000086f, -0.000094f + }, + { + -0.001792f, +0.000358f, +0.001417f, -0.001977f, +0.000543f, -0.000280f, +0.000205f, -0.000459f, +0.000598f, -0.000027f, + -0.000711f, -0.001683f, +0.001679f, +0.000786f, +0.008009f, +0.000443f, +0.003395f, -0.001919f, -0.000390f, -0.005662f, + +0.005569f, -0.000546f, -0.004691f, +0.001514f, -0.002359f, -0.001197f, -0.003993f, +0.000813f, -0.000888f, +0.000473f, + +0.001128f, -0.002361f, -0.000346f, -0.000994f, +0.000035f, +0.001398f, +0.000168f, -0.000456f, +0.000905f, -0.000596f, + +0.000637f, +0.001144f, -0.001050f, -0.000523f, -0.000232f, -0.000218f, -0.000429f, -0.000153f, -0.000572f, -0.000210f, + +0.000123f, +0.000089f, -0.000493f, -0.000159f, +0.000765f, +0.000265f, -0.000320f, -0.000071f, -0.000029f, -0.000442f, + -0.000063f, +0.000095f, +0.000488f, -0.000609f, +0.000022f, -0.000297f, -0.000171f, -0.000255f, +0.000027f, +0.000197f, + -0.000144f, -0.000327f, -0.000049f, -0.000461f, +0.000044f, +0.000147f, -0.000182f, -0.000019f, +0.000003f, -0.000065f, + +0.000011f, +0.000069f, -0.000287f, +0.000021f, -0.000108f, +0.000053f, +0.000069f, +0.000202f, +0.000117f, -0.000103f, + +0.000038f, +0.000067f, -0.000065f, -0.000027f, +0.000016f, +0.000074f + }, + { + +0.006204f, -0.049649f, +0.007013f, -0.007321f, -0.003095f, +0.005835f, -0.012518f, +0.001117f, -0.000875f, -0.001185f, + +0.001390f, +0.000345f, +0.000797f, -0.002152f, -0.000326f, -0.000015f, +0.004997f, -0.002984f, +0.001222f, +0.002904f, + -0.001170f, +0.001120f, -0.002100f, -0.000277f, -0.001552f, +0.000140f, +0.000661f, -0.001607f, +0.000158f, +0.000561f, + -0.000799f, -0.001188f, -0.002395f, -0.000605f, +0.000021f, -0.000665f, -0.000131f, -0.000009f, +0.000719f, +0.000210f, + +0.000159f, +0.000379f, -0.000307f, -0.000057f, -0.000074f, +0.001208f, +0.000007f, +0.000534f, -0.000496f, +0.000294f, + +0.000544f, -0.000168f, +0.000144f, +0.000558f, -0.000281f, +0.000052f, -0.000027f, +0.000249f, -0.000217f, +0.000311f, + -0.000319f, -0.000003f, -0.000255f, -0.000076f, +0.000124f, -0.000054f, -0.000235f, +0.000258f, -0.000507f, +0.000162f, + +0.000185f, +0.000043f, -0.000165f, -0.000184f, +0.000221f, -0.000149f, -0.000064f, -0.000152f, -0.000246f, +0.000270f, + -0.000201f, -0.000013f, +0.000111f, -0.000094f, +0.000006f, -0.000056f, +0.000080f, +0.000078f, -0.000019f, +0.000090f, + -0.000095f, +0.000022f, -0.000047f, +0.000081f, -0.000089f, +0.000110f + }, + { + -0.000578f, +0.009211f, -0.006299f, -0.002674f, -0.000466f, +0.001388f, -0.000186f, -0.001789f, +0.000053f, +0.000397f, + -0.000528f, +0.001644f, +0.000310f, -0.001791f, +0.007998f, -0.005554f, +0.009835f, -0.000976f, -0.001414f, +0.001085f, + -0.002365f, -0.001998f, +0.001251f, +0.001999f, +0.000527f, -0.000328f, +0.002414f, -0.001833f, +0.001208f, -0.001596f, + +0.000033f, +0.001338f, -0.000542f, +0.000443f, -0.000963f, +0.001667f, -0.000853f, +0.001290f, +0.000024f, +0.001668f, + -0.000352f, -0.000459f, +0.001497f, +0.000255f, -0.000346f, -0.000299f, -0.000310f, -0.000416f, +0.001166f, -0.000091f, + +0.000134f, +0.000642f, -0.000019f, +0.000118f, -0.000031f, -0.000069f, -0.000360f, -0.000122f, -0.000125f, +0.000431f, + -0.000385f, -0.000099f, +0.000053f, -0.000186f, +0.000128f, +0.000244f, -0.000152f, +0.000434f, +0.000153f, +0.000200f, + -0.000052f, -0.000444f, +0.000002f, -0.000139f, -0.000101f, +0.000025f, +0.000089f, -0.000011f, -0.000058f, +0.000207f, + +0.000048f, -0.000075f, +0.000198f, -0.000141f, -0.000140f, -0.000058f, -0.000061f, -0.000095f, +0.000107f, -0.000164f, + +0.000059f, -0.000020f, -0.000048f, +0.000038f, +0.000094f, +0.000073f + }, + { + -0.005858f, +0.034639f, -0.004594f, +0.002655f, +0.002973f, +0.000140f, -0.002077f, +0.000078f, +0.001252f, -0.000461f, + -0.001485f, -0.000818f, +0.001443f, +0.004966f, +0.002890f, -0.004644f, +0.000084f, +0.001690f, -0.000647f, +0.000391f, + +0.000522f, +0.000702f, +0.000230f, +0.001014f, -0.001411f, +0.001185f, -0.000027f, +0.000623f, -0.001131f, +0.002017f, + -0.002088f, +0.000364f, +0.000090f, -0.001070f, +0.001364f, -0.000334f, +0.000040f, +0.000182f, -0.000878f, -0.000655f, + +0.000335f, +0.000105f, +0.000051f, +0.000809f, +0.000790f, -0.000420f, -0.000281f, -0.000915f, +0.000937f, -0.000517f, + +0.000863f, -0.000169f, +0.000193f, +0.000351f, -0.000198f, -0.000354f, -0.000046f, +0.000189f, -0.000178f, -0.000577f, + -0.000498f, +0.000034f, -0.000042f, -0.000011f, -0.000048f, -0.000067f, +0.000070f, -0.000092f, +0.000146f, +0.000047f, + +0.000211f, -0.000214f, +0.000327f, -0.000042f, -0.000098f, +0.000199f, -0.000042f, +0.000089f, -0.000155f, -0.000044f, + -0.000034f, +0.000109f, +0.000030f, +0.000049f, -0.000196f, +0.000135f, -0.000116f, -0.000004f, +0.000011f, -0.000034f, + +0.000118f, -0.000008f, +0.000008f, +0.000063f, -0.000026f, +0.000058f + }, + { + +0.000759f, -0.000572f, -0.001308f, +0.002906f, -0.001036f, -0.000863f, +0.001611f, -0.002042f, -0.000318f, +0.001500f, + +0.000737f, +0.000208f, +0.014092f, +0.000459f, -0.001569f, +0.004615f, +0.000017f, +0.001204f, +0.000998f, +0.000555f, + +0.010468f, -0.005704f, +0.001294f, +0.000254f, -0.000670f, -0.002342f, +0.003062f, -0.002332f, -0.000763f, +0.000047f, + +0.001852f, +0.000212f, -0.001726f, +0.000524f, -0.001301f, -0.000944f, -0.000082f, +0.000256f, -0.000760f, -0.000081f, + -0.000536f, -0.000116f, -0.000638f, -0.000908f, +0.000492f, -0.000305f, +0.000225f, -0.000154f, -0.000257f, +0.000911f, + -0.000804f, -0.000386f, +0.000617f, -0.000516f, +0.000467f, +0.000370f, -0.000211f, -0.000078f, -0.000027f, -0.000563f, + -0.000525f, -0.000173f, +0.000621f, -0.000039f, +0.000071f, -0.000333f, +0.000140f, +0.000135f, -0.000003f, -0.000147f, + -0.000014f, +0.000100f, -0.000167f, -0.000049f, +0.000002f, +0.000081f, -0.000006f, +0.000189f, -0.000063f, +0.000250f, + -0.000007f, -0.000032f, -0.000156f, -0.000020f, -0.000190f, +0.000044f, -0.000062f, +0.000200f, +0.000133f, +0.000025f, + -0.000047f, +0.000075f, +0.000172f, +0.000025f, -0.000017f, +0.000004f + }, + { + +0.006114f, +0.034223f, -0.000252f, -0.006863f, +0.000694f, +0.000586f, +0.001478f, -0.003757f, -0.001154f, +0.000899f, + +0.001774f, -0.000470f, +0.004567f, -0.007878f, +0.010415f, +0.001650f, -0.000399f, -0.000518f, +0.000832f, +0.000945f, + +0.000619f, +0.000965f, +0.000959f, -0.002412f, -0.000401f, +0.000584f, -0.001421f, -0.000995f, -0.002313f, +0.001881f, + -0.001591f, +0.001508f, -0.000283f, +0.001903f, -0.001532f, -0.000280f, +0.000835f, -0.000518f, -0.000735f, -0.000355f, + -0.000610f, +0.001232f, +0.000179f, -0.000673f, +0.000691f, -0.000130f, -0.000590f, -0.000245f, +0.000230f, +0.000162f, + +0.000636f, -0.000217f, +0.000465f, -0.000464f, +0.000490f, -0.000337f, -0.000685f, +0.000347f, +0.000119f, -0.000202f, + +0.000011f, -0.000023f, +0.000439f, -0.000380f, +0.000157f, -0.000249f, -0.000113f, +0.000220f, +0.000011f, +0.000020f, + -0.000291f, +0.000061f, +0.000121f, +0.000119f, -0.000386f, -0.000359f, +0.000059f, +0.000103f, -0.000119f, +0.000048f, + -0.000068f, +0.000019f, +0.000088f, -0.000034f, -0.000107f, -0.000162f, +0.000084f, +0.000039f, +0.000134f, -0.000069f, + +0.000013f, +0.000035f, -0.000067f, -0.000035f, -0.000002f, +0.000125f + }, + { + +0.001338f, -0.006025f, -0.000979f, -0.000266f, +0.000507f, +0.000121f, +0.000359f, +0.000386f, +0.000794f, +0.000078f, + -0.000080f, +0.000644f, -0.000719f, -0.021707f, +0.030001f, -0.001970f, -0.002156f, -0.001172f, +0.000945f, +0.005361f, + -0.000252f, -0.002529f, +0.002925f, +0.000649f, +0.000353f, -0.001253f, -0.001303f, -0.000481f, +0.001006f, +0.000316f, + -0.000459f, +0.002027f, +0.000682f, +0.001355f, +0.001842f, -0.001369f, +0.001374f, +0.001288f, -0.000387f, +0.000086f, + +0.000208f, +0.001056f, +0.000349f, -0.001163f, -0.000441f, -0.000085f, -0.000291f, -0.001166f, +0.000551f, +0.000179f, + -0.000807f, +0.000160f, +0.000265f, +0.000044f, -0.000179f, -0.000267f, +0.000241f, +0.000295f, -0.000428f, -0.000017f, + +0.000454f, +0.000205f, +0.000353f, -0.000199f, +0.000395f, -0.000241f, +0.000154f, +0.000049f, +0.000134f, +0.000198f, + -0.000066f, +0.000198f, +0.000103f, +0.000173f, -0.000017f, +0.000039f, -0.000176f, -0.000127f, -0.000017f, +0.000020f, + -0.000037f, -0.000157f, -0.000046f, +0.000002f, +0.000109f, -0.000102f, +0.000106f, +0.000060f, +0.000023f, -0.000048f, + +0.000050f, -0.000033f, +0.000004f, +0.000003f, +0.000022f, +0.000002f + } + }, + { + { + +0.005146f, +0.058872f, -0.037618f, -0.006437f, +0.005244f, +0.000719f, -0.000911f, -0.000707f, -0.000939f, -0.001951f, + -0.000757f, +0.002587f, +0.000108f, +0.001812f, -0.004295f, +0.001132f, +0.001572f, -0.002915f, -0.002205f, +0.000565f, + +0.000142f, -0.000081f, -0.001773f, -0.002122f, +0.001945f, +0.001383f, +0.001010f, -0.000745f, -0.000734f, -0.001483f, + +0.001264f, -0.000312f, +0.002215f, +0.001365f, +0.001752f, +0.001155f, -0.001499f, +0.001153f, +0.001210f, +0.000485f, + +0.000170f, -0.000585f, +0.000758f, +0.000008f, -0.000008f, +0.000126f, +0.000199f, -0.000680f, -0.000343f, +0.000680f, + +0.000333f, +0.000391f, -0.000009f, -0.000039f, -0.000084f, +0.000588f, -0.000437f, -0.000449f, +0.000228f, -0.000247f, + +0.000006f, +0.000371f, -0.000027f, -0.000319f, -0.000301f, +0.000024f, -0.000444f, +0.000105f, +0.000047f, +0.000278f, + -0.000004f, +0.000192f, +0.000106f, +0.000309f, +0.000164f, +0.000145f, +0.000060f, +0.000251f, -0.000040f, -0.000076f, + -0.000093f, -0.000127f, +0.000066f, +0.000079f, +0.000045f, -0.000132f, +0.000107f, -0.000084f, -0.000133f, -0.000071f, + +0.000041f, -0.000055f, +0.000000f, +0.000020f, -0.000007f, +0.000037f + }, + { + -0.002409f, +0.010960f, +0.006585f, +0.000388f, +0.001072f, +0.000282f, -0.000619f, -0.001710f, +0.000540f, -0.000164f, + -0.002207f, -0.000956f, +0.000950f, +0.000869f, -0.002999f, -0.003365f, -0.002044f, -0.000780f, +0.009155f, +0.000311f, + -0.000451f, -0.001887f, +0.000273f, -0.002089f, -0.000923f, +0.000785f, +0.000808f, -0.002855f, +0.000592f, +0.000086f, + +0.000305f, +0.000716f, -0.001781f, +0.002011f, -0.001222f, +0.000862f, +0.002284f, +0.001677f, +0.000931f, +0.001128f, + -0.000484f, +0.001129f, +0.000563f, -0.000314f, -0.000784f, +0.000913f, -0.000283f, -0.000293f, -0.000352f, -0.000725f, + +0.000027f, -0.000118f, -0.000118f, +0.000265f, -0.000034f, +0.000136f, -0.000543f, -0.000043f, +0.000080f, -0.000352f, + -0.000000f, +0.000232f, +0.000141f, +0.000323f, -0.000175f, -0.000126f, -0.000294f, -0.000049f, +0.000034f, -0.000012f, + +0.000201f, -0.000068f, +0.000119f, +0.000034f, -0.000067f, -0.000000f, +0.000133f, -0.000103f, -0.000023f, +0.000006f, + +0.000110f, -0.000032f, +0.000025f, +0.000080f, +0.000005f, -0.000076f, +0.000014f, -0.000073f, -0.000107f, +0.000023f, + +0.000046f, -0.000063f, -0.000085f, -0.000042f, +0.000077f, +0.000036f + }, + { + +0.007718f, -0.051553f, -0.008034f, -0.015984f, -0.001051f, +0.000504f, -0.000937f, -0.000714f, +0.000439f, -0.000406f, + +0.001559f, +0.000943f, +0.001405f, -0.000314f, -0.005086f, -0.000279f, -0.003179f, +0.003913f, +0.001937f, -0.000044f, + +0.000597f, +0.000914f, -0.000016f, +0.000319f, -0.000056f, +0.001643f, +0.000095f, +0.000852f, -0.001508f, -0.000376f, + +0.000517f, +0.000645f, +0.000523f, -0.002000f, +0.001488f, -0.001524f, -0.001756f, -0.000829f, +0.001201f, -0.000136f, + +0.000068f, -0.001231f, -0.000230f, -0.000809f, +0.000649f, +0.000866f, -0.000363f, -0.000089f, +0.000130f, -0.000401f, + -0.000381f, -0.000046f, +0.000104f, +0.000245f, -0.000634f, -0.000223f, +0.000154f, +0.000393f, -0.000176f, +0.000187f, + +0.000283f, -0.000108f, -0.000260f, -0.000048f, -0.000078f, -0.000242f, -0.000177f, -0.000005f, -0.000267f, +0.000149f, + +0.000037f, -0.000086f, -0.000036f, -0.000138f, +0.000243f, +0.000520f, -0.000167f, -0.000148f, -0.000092f, +0.000169f, + +0.000077f, -0.000121f, +0.000065f, +0.000023f, +0.000020f, -0.000016f, -0.000116f, +0.000147f, +0.000045f, +0.000032f, + +0.000043f, +0.000006f, -0.000069f, +0.000004f, +0.000088f, -0.000127f + }, + { + -0.008873f, -0.059380f, -0.005721f, -0.001376f, -0.000382f, -0.000023f, -0.000103f, -0.001319f, +0.000107f, +0.000844f, + +0.000483f, +0.000114f, -0.000289f, +0.000454f, +0.001432f, +0.000060f, -0.000387f, -0.004428f, +0.000955f, +0.000714f, + +0.000895f, +0.000139f, +0.000131f, +0.000190f, +0.000055f, +0.000632f, -0.001885f, +0.000116f, +0.000016f, -0.000569f, + +0.000379f, -0.000724f, -0.000183f, -0.000329f, +0.000226f, +0.001559f, -0.001054f, -0.000162f, +0.000053f, -0.000075f, + +0.000692f, -0.000601f, +0.000262f, +0.000329f, -0.000031f, -0.000407f, +0.000565f, +0.000120f, -0.000020f, -0.000309f, + +0.000440f, -0.000070f, +0.000005f, -0.000043f, -0.000350f, -0.000045f, +0.000124f, +0.000482f, +0.000294f, +0.000235f, + +0.000055f, -0.000170f, +0.000250f, -0.000077f, +0.000138f, +0.000110f, -0.000082f, +0.000115f, +0.000096f, -0.000163f, + +0.000235f, +0.000519f, +0.000007f, -0.000061f, +0.000016f, +0.000073f, -0.000001f, -0.000114f, -0.000026f, -0.000063f, + -0.000067f, +0.000033f, -0.000009f, -0.000069f, +0.000061f, +0.000073f, -0.000063f, -0.000012f, -0.000039f, -0.000067f, + +0.000018f, +0.000039f, -0.000015f, -0.000034f, +0.000029f, +0.000004f + }, + { + -0.000031f, +0.011787f, -0.000894f, -0.001154f, +0.000209f, +0.000124f, -0.000072f, -0.000132f, -0.000929f, +0.001236f, + +0.000335f, -0.001424f, +0.000693f, -0.000629f, -0.011129f, +0.005161f, +0.000734f, -0.012256f, -0.004127f, +0.000122f, + +0.002117f, +0.001852f, -0.001240f, -0.000990f, +0.002481f, +0.001107f, +0.001773f, -0.000917f, -0.001324f, +0.000166f, + -0.000065f, -0.000588f, -0.000720f, -0.000021f, -0.001561f, -0.000858f, -0.001661f, +0.000199f, +0.000044f, -0.000808f, + -0.000849f, +0.000405f, -0.000326f, -0.000060f, -0.000321f, -0.000120f, +0.000784f, -0.000237f, -0.000094f, -0.000377f, + -0.000262f, +0.000079f, +0.000096f, +0.000104f, -0.000549f, -0.000025f, +0.000136f, +0.000018f, -0.000088f, -0.000262f, + -0.000735f, +0.000061f, -0.000145f, +0.000152f, -0.000104f, -0.000098f, +0.000038f, +0.000202f, +0.000295f, -0.000114f, + +0.000289f, +0.000152f, -0.000098f, +0.000028f, -0.000138f, -0.000239f, -0.000119f, -0.000099f, -0.000101f, -0.000084f, + -0.000006f, +0.000178f, +0.000022f, -0.000148f, +0.000031f, +0.000064f, +0.000057f, +0.000050f, +0.000072f, -0.000115f, + -0.000044f, +0.000037f, +0.000108f, -0.000003f, -0.000135f, -0.000030f + }, + { + -0.016775f, -0.120231f, -0.002474f, -0.001162f, +0.000730f, +0.000646f, -0.000460f, +0.000934f, +0.000182f, -0.001979f, + +0.000755f, +0.000716f, +0.000138f, +0.000368f, -0.000640f, +0.001474f, -0.001155f, -0.001016f, +0.001193f, -0.001212f, + -0.000934f, -0.000242f, +0.000927f, +0.000030f, -0.000128f, -0.000553f, -0.000920f, +0.000624f, -0.001747f, +0.000126f, + -0.001373f, -0.000635f, +0.000556f, -0.002202f, -0.000255f, -0.000198f, -0.000238f, -0.000417f, +0.000028f, +0.000235f, + -0.001293f, -0.001400f, +0.000196f, +0.000912f, +0.000626f, -0.000234f, -0.000033f, +0.000197f, -0.000432f, -0.000959f, + +0.000330f, +0.000124f, -0.000515f, +0.000338f, +0.000800f, -0.000024f, -0.000010f, -0.000027f, -0.000302f, -0.000312f, + +0.000119f, +0.000152f, +0.000010f, -0.000203f, -0.000035f, +0.000082f, +0.000040f, +0.000140f, -0.000015f, -0.000102f, + +0.000007f, +0.000023f, +0.000130f, -0.000152f, +0.000005f, +0.000058f, -0.000073f, -0.000052f, +0.000027f, -0.000022f, + +0.000116f, +0.000091f, +0.000014f, -0.000171f, -0.000047f, -0.000137f, +0.000111f, -0.000196f, +0.000169f, +0.000058f, + +0.000019f, +0.000047f, -0.000089f, +0.000009f, -0.000002f, -0.000038f + }, + { + +0.000068f, +0.003403f, +0.000665f, +0.000522f, +0.000457f, +0.000090f, -0.000444f, -0.000215f, -0.000029f, +0.000381f, + -0.000077f, +0.000927f, +0.000633f, +0.000394f, +0.004893f, +0.004204f, -0.004514f, -0.000787f, -0.001844f, -0.002573f, + -0.001077f, +0.000168f, -0.003258f, +0.000132f, +0.001961f, -0.000561f, -0.002926f, +0.001858f, +0.000639f, -0.000313f, + +0.000218f, +0.000242f, +0.000301f, -0.002546f, -0.001095f, +0.000469f, -0.001298f, +0.000071f, +0.000285f, -0.000922f, + +0.000572f, -0.000043f, -0.000182f, -0.000012f, +0.000078f, -0.000545f, +0.000028f, -0.000085f, -0.000562f, -0.000434f, + -0.000295f, -0.000191f, -0.000485f, -0.000135f, +0.000189f, +0.000212f, -0.000414f, +0.000406f, +0.000408f, +0.000075f, + +0.000085f, +0.000145f, +0.000305f, -0.000086f, +0.000064f, +0.000005f, -0.000175f, -0.000167f, +0.000135f, +0.000098f, + -0.000116f, -0.000246f, +0.000099f, -0.000205f, -0.000216f, -0.000059f, -0.000027f, -0.000155f, -0.000103f, -0.000018f, + -0.000083f, -0.000077f, -0.000034f, +0.000045f, -0.000023f, -0.000043f, +0.000046f, -0.000044f, +0.000070f, +0.000069f, + +0.000034f, +0.000128f, -0.000037f, +0.000011f, +0.000025f, +0.000001f + }, + { + -0.000852f, +0.091777f, -0.001449f, -0.005873f, +0.000143f, -0.000703f, +0.000217f, -0.000507f, -0.000253f, +0.000215f, + +0.000104f, +0.000504f, +0.001071f, -0.000330f, -0.001171f, +0.001407f, +0.000053f, +0.003005f, -0.000223f, -0.001506f, + +0.000398f, +0.000857f, +0.000348f, +0.000358f, +0.001892f, +0.000102f, -0.000881f, +0.000638f, -0.001210f, -0.000669f, + -0.000182f, +0.001089f, +0.000210f, +0.000605f, +0.000556f, -0.001403f, -0.000096f, -0.001080f, -0.001056f, +0.000346f, + -0.001067f, +0.000092f, -0.000474f, +0.000521f, +0.000555f, +0.000015f, -0.001201f, +0.000930f, -0.000002f, -0.000017f, + -0.000158f, +0.000667f, +0.000255f, -0.000508f, -0.000200f, -0.000335f, -0.000195f, +0.000162f, +0.000522f, +0.000182f, + -0.000006f, +0.000033f, -0.000549f, +0.000085f, +0.000256f, +0.000256f, -0.000065f, -0.000011f, +0.000270f, -0.000374f, + -0.000126f, -0.000033f, -0.000142f, -0.000359f, +0.000013f, +0.000183f, -0.000100f, -0.000014f, -0.000086f, -0.000031f, + +0.000095f, -0.000016f, +0.000024f, +0.000038f, +0.000039f, +0.000004f, -0.000145f, -0.000042f, -0.000085f, -0.000028f, + +0.000042f, -0.000042f, +0.000048f, +0.000085f, -0.000031f, +0.000005f + }, + { + +0.000038f, -0.013412f, +0.001725f, +0.000073f, +0.000190f, +0.000146f, +0.000320f, -0.000205f, +0.000315f, -0.000110f, + -0.000594f, -0.000018f, +0.000862f, +0.001694f, +0.006237f, -0.000746f, +0.006477f, -0.001755f, -0.002366f, -0.002120f, + +0.002760f, +0.000574f, -0.000402f, -0.004073f, -0.002911f, +0.000321f, -0.001340f, -0.004055f, +0.003010f, -0.000041f, + +0.001908f, -0.002034f, -0.000866f, -0.001032f, -0.000280f, +0.000314f, -0.000437f, -0.000570f, +0.000842f, +0.000325f, + +0.000123f, +0.000451f, -0.000334f, -0.000919f, -0.001342f, -0.000528f, -0.000524f, +0.000102f, -0.000436f, -0.000402f, + +0.000320f, -0.000221f, +0.000348f, -0.000225f, +0.000786f, +0.000288f, -0.000454f, -0.000212f, -0.000659f, -0.000223f, + +0.000175f, +0.000463f, +0.000012f, +0.000134f, -0.000070f, +0.000069f, -0.000064f, -0.000115f, +0.000229f, +0.000024f, + -0.000233f, +0.000069f, -0.000167f, -0.000186f, -0.000169f, +0.000127f, +0.000100f, -0.000164f, -0.000062f, -0.000067f, + -0.000057f, +0.000152f, -0.000118f, +0.000060f, -0.000012f, -0.000017f, -0.000159f, +0.000159f, +0.000051f, -0.000014f, + -0.000031f, +0.000034f, +0.000022f, -0.000031f, -0.000010f, -0.000010f + }, + { + -0.006518f, -0.029080f, +0.007514f, -0.007881f, -0.002695f, -0.006571f, +0.000734f, +0.000259f, -0.001612f, -0.000168f, + +0.000909f, -0.001202f, +0.000396f, +0.000891f, -0.000743f, +0.000212f, +0.002030f, -0.000632f, +0.000172f, +0.001972f, + -0.000117f, +0.000106f, -0.001086f, -0.001143f, -0.000582f, -0.000045f, -0.000741f, -0.000879f, +0.000234f, -0.000258f, + -0.000699f, -0.001642f, -0.000266f, -0.001018f, +0.000135f, -0.000217f, +0.000460f, -0.000765f, +0.000710f, -0.000504f, + -0.000087f, +0.000695f, -0.000466f, +0.000081f, +0.000026f, +0.000365f, +0.000343f, +0.000425f, -0.000013f, -0.000247f, + +0.000055f, -0.000043f, -0.000278f, +0.000091f, +0.000553f, -0.000220f, -0.000230f, +0.000288f, -0.000246f, +0.000160f, + +0.000094f, -0.000106f, +0.000091f, -0.000265f, -0.000133f, +0.000007f, -0.000062f, -0.000118f, -0.000034f, +0.000026f, + +0.000187f, -0.000069f, -0.000187f, -0.000007f, -0.000043f, -0.000000f, -0.000224f, -0.000095f, -0.000046f, +0.000066f, + +0.000105f, +0.000026f, -0.000094f, -0.000010f, -0.000108f, -0.000129f, -0.000068f, +0.000000f, -0.000071f, +0.000016f, + -0.000080f, +0.000028f, +0.000061f, -0.000070f, -0.000035f, +0.000004f + }, + { + +0.000412f, +0.004200f, +0.001043f, -0.005142f, -0.001829f, +0.000184f, -0.002605f, -0.000265f, +0.000129f, -0.000920f, + -0.000156f, +0.000271f, -0.001230f, +0.001877f, +0.002563f, -0.000570f, +0.004774f, -0.000104f, +0.000730f, +0.000504f, + -0.001867f, +0.000917f, +0.000730f, +0.000391f, +0.000878f, -0.000715f, +0.001684f, -0.000459f, -0.000329f, +0.000193f, + -0.000926f, +0.000726f, -0.000159f, +0.001057f, +0.000290f, +0.000323f, +0.001014f, +0.000410f, +0.000411f, +0.000325f, + +0.000068f, +0.000539f, +0.000798f, -0.000047f, -0.000199f, -0.000653f, -0.000410f, +0.000061f, -0.000132f, -0.000229f, + +0.000052f, +0.000285f, +0.000614f, +0.000421f, -0.000166f, -0.000343f, -0.000302f, -0.000258f, +0.000052f, +0.000127f, + -0.000320f, -0.000040f, +0.000082f, -0.000064f, -0.000208f, +0.000255f, +0.000112f, -0.000038f, +0.000195f, +0.000122f, + -0.000077f, -0.000114f, -0.000095f, -0.000197f, +0.000001f, -0.000059f, +0.000235f, +0.000202f, +0.000024f, +0.000097f, + -0.000042f, -0.000075f, +0.000119f, +0.000077f, -0.000088f, -0.000025f, +0.000056f, -0.000087f, +0.000108f, +0.000073f, + -0.000012f, -0.000007f, -0.000029f, +0.000103f, -0.000037f, +0.000028f + }, + { + +0.008518f, +0.011228f, -0.001311f, +0.001294f, +0.000654f, +0.001744f, +0.002432f, +0.001194f, +0.000319f, -0.001244f, + -0.002193f, +0.001814f, +0.003307f, -0.000924f, +0.005284f, -0.002427f, -0.000426f, +0.001780f, +0.000160f, +0.000080f, + +0.000195f, +0.000831f, +0.000521f, +0.000927f, -0.001428f, +0.001223f, +0.000048f, +0.000113f, -0.000270f, +0.000255f, + -0.000182f, +0.000299f, +0.000068f, -0.000152f, +0.000920f, -0.000094f, +0.000922f, +0.000202f, -0.000079f, -0.000111f, + -0.000710f, +0.000827f, +0.001042f, -0.000070f, -0.000771f, +0.000288f, -0.000341f, -0.000199f, +0.000156f, +0.000159f, + +0.000020f, +0.000022f, +0.000486f, -0.000123f, +0.000350f, -0.000349f, +0.000002f, -0.000036f, -0.000016f, -0.000489f, + -0.000267f, +0.000047f, +0.000130f, -0.000362f, +0.000095f, -0.000095f, -0.000013f, +0.000147f, +0.000163f, -0.000092f, + +0.000106f, -0.000010f, +0.000095f, -0.000081f, -0.000116f, +0.000136f, -0.000062f, +0.000064f, +0.000023f, -0.000022f, + -0.000057f, -0.000066f, -0.000010f, -0.000104f, -0.000108f, +0.000129f, -0.000068f, +0.000066f, +0.000007f, -0.000146f, + +0.000013f, -0.000059f, -0.000052f, +0.000050f, +0.000006f, +0.000006f + }, + { + -0.000668f, -0.000447f, +0.000076f, +0.003667f, -0.002148f, +0.000402f, +0.000974f, -0.000594f, -0.000674f, +0.000670f, + +0.000710f, +0.001269f, -0.000027f, +0.017923f, -0.002895f, +0.002427f, +0.002335f, +0.001436f, +0.001190f, -0.000422f, + +0.007225f, +0.002683f, -0.006785f, +0.000737f, +0.000937f, -0.001338f, +0.001332f, -0.001260f, +0.000710f, -0.002048f, + +0.003015f, +0.000297f, -0.000794f, -0.000306f, -0.001413f, +0.000907f, -0.000414f, +0.000202f, -0.000312f, -0.000247f, + -0.000039f, -0.000251f, -0.001322f, +0.000192f, -0.000408f, +0.000625f, -0.000129f, -0.000977f, -0.000586f, +0.000937f, + +0.000143f, -0.000119f, -0.000319f, +0.000382f, -0.000271f, -0.000159f, +0.000373f, -0.000105f, -0.000448f, -0.000108f, + -0.000473f, -0.000006f, +0.000026f, -0.000070f, +0.000239f, +0.000067f, -0.000109f, +0.000409f, -0.000304f, -0.000194f, + +0.000152f, +0.000054f, -0.000007f, -0.000086f, -0.000310f, -0.000081f, -0.000032f, +0.000174f, +0.000272f, +0.000075f, + +0.000108f, +0.000035f, -0.000153f, -0.000011f, -0.000101f, +0.000091f, -0.000134f, +0.000115f, +0.000157f, +0.000058f, + +0.000040f, +0.000018f, -0.000004f, +0.000123f, -0.000111f, -0.000106f + }, + { + +0.005014f, +0.032349f, -0.000150f, +0.002289f, +0.001931f, -0.000187f, -0.002081f, -0.000623f, -0.002386f, +0.001227f, + +0.000660f, -0.002144f, +0.003632f, +0.006566f, -0.009459f, +0.002418f, +0.005506f, -0.001546f, +0.001143f, +0.001860f, + +0.001038f, +0.000184f, +0.000731f, -0.000546f, -0.002244f, +0.000047f, -0.001315f, -0.001357f, -0.001906f, +0.000241f, + +0.000504f, +0.000834f, +0.000122f, +0.001029f, -0.000855f, +0.000267f, +0.000451f, -0.000199f, -0.000315f, +0.000161f, + -0.000569f, +0.001164f, -0.000319f, +0.000240f, +0.000961f, +0.000333f, -0.000379f, -0.000096f, +0.000856f, -0.000368f, + +0.000784f, +0.000339f, -0.000748f, -0.000437f, +0.000463f, +0.000257f, +0.000008f, -0.000403f, +0.000305f, -0.000184f, + +0.000055f, +0.000381f, +0.000013f, -0.000181f, +0.000402f, -0.000037f, +0.000001f, +0.000188f, -0.000012f, -0.000086f, + -0.000033f, -0.000136f, +0.000122f, -0.000019f, -0.000258f, -0.000173f, -0.000074f, -0.000040f, +0.000188f, +0.000058f, + -0.000004f, +0.000025f, +0.000213f, +0.000097f, -0.000110f, +0.000055f, +0.000019f, -0.000120f, +0.000025f, +0.000016f, + -0.000009f, +0.000098f, -0.000011f, +0.000016f, -0.000018f, +0.000053f + }, + { + -0.000946f, -0.003806f, +0.002273f, -0.001003f, +0.000257f, -0.000139f, +0.000468f, +0.001163f, +0.000189f, +0.000407f, + +0.001473f, +0.001119f, -0.003320f, +0.007020f, -0.016537f, +0.004917f, +0.001111f, -0.000452f, +0.002894f, +0.004349f, + +0.000386f, +0.002718f, +0.001071f, -0.002871f, +0.002093f, +0.000046f, -0.001219f, +0.000321f, -0.000269f, -0.000424f, + +0.000338f, +0.000887f, +0.000869f, +0.001002f, +0.001481f, -0.000944f, +0.000164f, +0.001705f, +0.000860f, -0.000174f, + +0.000079f, +0.000158f, -0.000986f, +0.000327f, -0.000080f, -0.000580f, -0.000555f, -0.000373f, +0.000307f, -0.000379f, + -0.000188f, -0.000004f, -0.000330f, +0.000032f, +0.000549f, +0.000022f, -0.000198f, +0.000344f, -0.000590f, -0.000433f, + +0.000005f, +0.000311f, -0.000132f, +0.000214f, -0.000002f, +0.000135f, +0.000420f, -0.000329f, +0.000223f, +0.000048f, + +0.000135f, -0.000112f, -0.000158f, -0.000017f, -0.000074f, +0.000118f, -0.000169f, -0.000308f, -0.000112f, +0.000004f, + +0.000143f, +0.000005f, +0.000050f, +0.000004f, +0.000060f, -0.000018f, +0.000052f, +0.000085f, +0.000077f, +0.000025f, + +0.000038f, +0.000038f, -0.000008f, -0.000032f, -0.000033f, +0.000080f + } + }, + { + { + -0.004858f, +0.135080f, +0.017363f, -0.013049f, +0.002014f, +0.001390f, -0.000906f, -0.000631f, -0.000523f, -0.000483f, + -0.000878f, +0.001230f, +0.000128f, +0.000800f, -0.003970f, -0.000307f, +0.001292f, -0.001156f, +0.002703f, -0.000066f, + -0.000835f, -0.000613f, -0.000540f, -0.001665f, +0.001262f, -0.000467f, +0.000390f, -0.000745f, -0.000688f, -0.000988f, + +0.001540f, -0.000114f, -0.000232f, -0.000631f, +0.000469f, +0.001608f, -0.000942f, +0.000332f, -0.000375f, -0.000144f, + +0.000425f, -0.000440f, +0.000720f, -0.000297f, -0.000050f, -0.000635f, -0.000695f, +0.000731f, +0.000357f, -0.000124f, + -0.000536f, +0.000073f, -0.000071f, -0.000301f, -0.000514f, +0.000225f, -0.000194f, -0.000051f, +0.000732f, +0.000047f, + -0.000313f, +0.000070f, -0.000034f, +0.000044f, -0.000147f, +0.000291f, -0.000185f, -0.000079f, -0.000037f, +0.000170f, + +0.000058f, +0.000091f, -0.000155f, +0.000018f, +0.000054f, +0.000289f, +0.000011f, +0.000022f, +0.000297f, -0.000000f, + -0.000050f, -0.000173f, +0.000010f, +0.000013f, -0.000037f, +0.000066f, -0.000016f, +0.000058f, -0.000052f, +0.000013f, + +0.000032f, +0.000023f, -0.000000f, +0.000063f, -0.000011f, +0.000002f + }, + { + +0.001657f, -0.001890f, -0.011167f, +0.001438f, -0.000477f, +0.000777f, -0.000606f, -0.000374f, +0.000425f, +0.000599f, + -0.001376f, -0.000371f, +0.001119f, +0.001568f, -0.003700f, -0.002406f, +0.004107f, +0.000239f, +0.005061f, +0.001144f, + -0.000010f, -0.002882f, +0.001804f, -0.000331f, -0.002698f, -0.000506f, +0.001843f, -0.002279f, +0.001088f, -0.000073f, + +0.000568f, +0.001209f, -0.003125f, +0.001531f, -0.000218f, +0.000404f, +0.000070f, -0.000856f, -0.001024f, +0.000714f, + +0.000070f, +0.000166f, +0.000034f, -0.000224f, +0.000072f, +0.000837f, -0.000310f, -0.000095f, -0.000096f, -0.000756f, + -0.000212f, -0.000051f, -0.000470f, -0.000159f, -0.000503f, +0.000895f, -0.000107f, -0.000457f, -0.000291f, -0.000188f, + -0.000266f, -0.000236f, -0.000290f, +0.000123f, -0.000210f, -0.000139f, -0.000020f, -0.000323f, -0.000088f, -0.000106f, + +0.000184f, -0.000230f, +0.000090f, +0.000056f, -0.000203f, -0.000226f, +0.000180f, -0.000007f, +0.000142f, -0.000033f, + -0.000164f, +0.000092f, +0.000157f, -0.000027f, -0.000080f, -0.000069f, +0.000072f, -0.000011f, +0.000094f, -0.000177f, + +0.000080f, +0.000050f, +0.000000f, -0.000091f, -0.000023f, -0.000005f + }, + { + -0.006589f, -0.043146f, +0.021173f, -0.008076f, -0.002620f, -0.001517f, -0.001024f, -0.002456f, -0.001244f, +0.000497f, + +0.000945f, -0.001266f, -0.002464f, -0.000639f, -0.003216f, +0.002120f, -0.003348f, +0.001428f, +0.002769f, +0.002674f, + +0.000332f, -0.000052f, -0.001200f, -0.002410f, -0.000567f, +0.001647f, -0.001309f, -0.000242f, -0.000778f, +0.000186f, + +0.001145f, +0.000245f, -0.002172f, -0.002900f, +0.000258f, -0.000819f, -0.001926f, -0.000593f, +0.001485f, -0.000703f, + +0.000006f, +0.000137f, -0.000082f, -0.001807f, +0.000397f, -0.000895f, -0.001062f, -0.000015f, +0.000431f, +0.000198f, + +0.000575f, +0.000191f, -0.000414f, -0.000067f, -0.000653f, -0.000422f, +0.000381f, +0.000748f, +0.000338f, +0.000302f, + +0.000181f, -0.000243f, +0.000029f, -0.000118f, +0.000340f, -0.000165f, +0.000047f, +0.000375f, +0.000064f, -0.000279f, + -0.000106f, +0.000245f, -0.000050f, -0.000147f, +0.000151f, +0.000150f, -0.000053f, +0.000085f, -0.000093f, +0.000152f, + +0.000027f, +0.000040f, +0.000035f, +0.000024f, +0.000197f, -0.000038f, -0.000165f, +0.000023f, +0.000048f, +0.000028f, + -0.000022f, -0.000011f, -0.000007f, +0.000033f, +0.000087f, -0.000057f + }, + { + +0.017469f, -0.023914f, -0.005628f, -0.001286f, +0.000125f, -0.000062f, +0.000272f, -0.000661f, -0.000492f, +0.000288f, + +0.000227f, -0.001029f, +0.000136f, -0.000039f, -0.001260f, -0.000108f, -0.000175f, -0.005446f, +0.000368f, +0.000922f, + +0.000695f, +0.000174f, +0.000052f, -0.000286f, -0.001039f, -0.000065f, -0.000100f, +0.001110f, -0.000283f, -0.001461f, + +0.000609f, -0.000186f, +0.000135f, -0.000218f, +0.000358f, +0.001537f, -0.000262f, -0.000195f, +0.000967f, +0.000050f, + +0.000442f, +0.000395f, +0.001323f, +0.000018f, -0.000208f, -0.000290f, +0.000114f, -0.000087f, +0.000029f, -0.000442f, + +0.000015f, -0.000189f, +0.000183f, -0.000422f, -0.000355f, -0.000165f, -0.000247f, +0.000059f, -0.000027f, +0.000015f, + -0.000250f, -0.000341f, -0.000227f, +0.000002f, -0.000033f, -0.000058f, -0.000033f, -0.000113f, +0.000258f, -0.000179f, + +0.000010f, +0.000078f, +0.000280f, +0.000148f, +0.000140f, +0.000077f, -0.000055f, -0.000077f, -0.000003f, -0.000010f, + -0.000104f, -0.000047f, -0.000077f, +0.000120f, +0.000056f, +0.000091f, +0.000074f, -0.000089f, +0.000116f, +0.000046f, + -0.000017f, -0.000034f, -0.000007f, -0.000022f, -0.000055f, -0.000021f + }, + { + +0.000106f, +0.012576f, +0.001270f, +0.000041f, -0.000403f, -0.000010f, -0.000276f, +0.000371f, +0.000019f, +0.000233f, + +0.000313f, -0.000202f, +0.001865f, -0.002108f, -0.014637f, +0.004643f, +0.000490f, -0.002708f, +0.000187f, +0.001913f, + +0.003318f, +0.004155f, -0.000617f, -0.001604f, +0.001292f, -0.001747f, +0.003800f, +0.001043f, -0.000095f, +0.000111f, + +0.001047f, +0.001734f, +0.000821f, +0.000026f, -0.000600f, +0.000618f, +0.000602f, +0.000218f, -0.000539f, -0.000384f, + -0.001031f, +0.000604f, -0.000690f, -0.000159f, +0.000413f, -0.000191f, +0.000290f, -0.000041f, +0.000169f, +0.000325f, + -0.000204f, -0.000159f, +0.000132f, -0.000544f, -0.000254f, +0.000343f, +0.000290f, -0.000260f, -0.000126f, +0.000115f, + -0.000168f, +0.000366f, -0.000362f, +0.000005f, -0.000083f, -0.000155f, -0.000187f, -0.000172f, +0.000142f, -0.000135f, + -0.000071f, +0.000055f, +0.000021f, -0.000021f, +0.000147f, +0.000130f, -0.000296f, -0.000098f, -0.000021f, -0.000285f, + -0.000132f, -0.000107f, +0.000070f, +0.000075f, -0.000114f, +0.000081f, -0.000032f, -0.000018f, +0.000082f, -0.000096f, + +0.000015f, +0.000020f, -0.000041f, -0.000002f, +0.000049f, -0.000007f + }, + { + +0.029729f, -0.063954f, -0.002976f, -0.000452f, -0.000843f, +0.000371f, +0.000726f, -0.000733f, +0.002021f, +0.001162f, + -0.001768f, -0.000299f, +0.001768f, -0.000131f, -0.001887f, +0.001253f, -0.000566f, -0.000492f, -0.000387f, -0.001300f, + +0.000418f, -0.000169f, +0.000589f, +0.000888f, +0.000762f, -0.000025f, -0.000790f, +0.001120f, +0.000113f, +0.000971f, + -0.001145f, -0.000157f, +0.000946f, -0.000742f, -0.000051f, +0.000165f, +0.000929f, +0.000121f, -0.000014f, +0.000015f, + -0.000537f, -0.000446f, +0.000284f, +0.000211f, -0.000167f, +0.000050f, -0.000310f, +0.000025f, -0.000037f, -0.000479f, + +0.000620f, +0.000604f, -0.000051f, +0.000194f, -0.000223f, -0.000273f, -0.000473f, -0.000134f, -0.000302f, -0.000069f, + +0.000086f, -0.000009f, -0.000136f, -0.000403f, -0.000044f, +0.000139f, +0.000061f, +0.000088f, +0.000225f, +0.000154f, + -0.000026f, -0.000071f, +0.000029f, +0.000028f, +0.000071f, +0.000173f, -0.000124f, -0.000082f, +0.000101f, +0.000032f, + -0.000016f, -0.000046f, -0.000004f, +0.000075f, -0.000045f, -0.000173f, +0.000014f, -0.000090f, -0.000071f, +0.000053f, + -0.000004f, +0.000028f, -0.000037f, -0.000047f, +0.000103f, -0.000036f + }, + { + +0.000677f, +0.006252f, -0.000796f, +0.000852f, +0.000005f, -0.000084f, -0.000372f, +0.000082f, -0.000629f, -0.000038f, + +0.000084f, -0.000273f, -0.001422f, -0.003151f, +0.004428f, +0.004778f, -0.005173f, -0.002455f, -0.000622f, +0.001436f, + +0.001736f, +0.002350f, -0.002003f, -0.000199f, +0.002239f, +0.001212f, -0.000166f, +0.000772f, +0.000988f, -0.000511f, + -0.000576f, -0.000613f, -0.000613f, -0.001617f, -0.001538f, -0.000382f, -0.000529f, +0.000217f, -0.000064f, -0.000260f, + +0.000329f, -0.000215f, +0.000364f, -0.000231f, +0.000744f, -0.000155f, -0.000264f, +0.000125f, -0.000209f, -0.000013f, + +0.000366f, +0.000158f, +0.000064f, -0.000265f, -0.000377f, +0.000280f, -0.000262f, -0.000353f, -0.000205f, -0.000046f, + +0.000088f, +0.000103f, +0.000381f, -0.000216f, -0.000114f, +0.000111f, +0.000153f, -0.000019f, -0.000095f, -0.000062f, + +0.000395f, +0.000016f, +0.000104f, -0.000002f, +0.000005f, -0.000014f, -0.000035f, -0.000265f, -0.000136f, -0.000024f, + +0.000064f, -0.000114f, -0.000000f, -0.000048f, +0.000057f, +0.000044f, -0.000014f, +0.000026f, +0.000023f, +0.000004f, + +0.000052f, +0.000115f, +0.000034f, -0.000058f, +0.000038f, +0.000020f + }, + { + -0.009042f, +0.079622f, +0.010906f, -0.000086f, +0.001856f, -0.000535f, -0.000190f, +0.000158f, +0.000588f, +0.000276f, + -0.001449f, -0.001729f, +0.001481f, +0.002773f, +0.000537f, +0.002211f, +0.000153f, +0.000486f, +0.001468f, +0.000181f, + -0.000590f, +0.001044f, +0.000485f, -0.001276f, +0.000882f, -0.000022f, -0.000048f, +0.001262f, -0.000756f, -0.000016f, + +0.000595f, +0.001135f, +0.000860f, +0.000397f, +0.000735f, -0.000912f, -0.000250f, +0.000370f, +0.000523f, +0.000875f, + -0.000202f, +0.000647f, +0.000034f, -0.000203f, -0.000167f, +0.000192f, -0.000273f, +0.000850f, +0.000308f, -0.000570f, + -0.000655f, +0.000225f, +0.000529f, +0.000223f, -0.000078f, +0.000243f, -0.000045f, -0.000193f, -0.000007f, +0.000031f, + -0.000051f, +0.000298f, -0.000377f, +0.000055f, -0.000213f, +0.000119f, +0.000050f, +0.000117f, +0.000169f, -0.000125f, + +0.000022f, +0.000058f, +0.000197f, -0.000129f, -0.000158f, +0.000011f, +0.000144f, -0.000098f, -0.000023f, +0.000183f, + -0.000032f, -0.000080f, +0.000138f, +0.000108f, +0.000064f, -0.000013f, +0.000036f, -0.000032f, -0.000057f, -0.000121f, + +0.000055f, +0.000085f, +0.000002f, +0.000042f, -0.000052f, +0.000061f + }, + { + +0.001545f, -0.008225f, -0.001400f, +0.001336f, -0.000540f, +0.000271f, +0.000315f, +0.000231f, +0.000106f, +0.000086f, + +0.000368f, -0.000085f, -0.000498f, -0.004707f, +0.003646f, +0.001203f, -0.000065f, -0.003480f, +0.000640f, -0.002073f, + +0.000434f, +0.002282f, +0.000997f, -0.000555f, +0.000508f, +0.002842f, +0.002096f, -0.004502f, +0.003928f, -0.000022f, + +0.001013f, -0.000444f, -0.000116f, -0.000027f, +0.000074f, -0.001330f, -0.000830f, -0.000106f, +0.000595f, +0.000854f, + +0.000256f, +0.000006f, +0.000317f, +0.000305f, -0.000683f, -0.000389f, -0.000012f, +0.000252f, -0.000169f, -0.000179f, + +0.000607f, +0.000001f, +0.000761f, -0.000075f, +0.000248f, -0.000168f, -0.000188f, -0.000184f, -0.000518f, -0.000077f, + +0.000050f, +0.000044f, -0.000012f, +0.000392f, +0.000082f, +0.000406f, +0.000241f, +0.000073f, -0.000004f, -0.000113f, + -0.000258f, -0.000091f, -0.000030f, +0.000272f, -0.000144f, +0.000050f, +0.000135f, +0.000047f, -0.000125f, +0.000012f, + -0.000172f, +0.000028f, +0.000100f, +0.000090f, +0.000071f, +0.000004f, -0.000159f, -0.000033f, -0.000001f, -0.000014f, + -0.000003f, -0.000043f, +0.000047f, +0.000045f, -0.000046f, +0.000004f + }, + { + +0.007854f, -0.017586f, +0.009854f, +0.003098f, +0.001439f, -0.002998f, +0.007002f, -0.001200f, -0.000885f, +0.000197f, + +0.000672f, -0.001364f, -0.001581f, +0.001262f, +0.002201f, -0.002416f, +0.001626f, +0.000014f, -0.000686f, +0.001965f, + +0.000356f, -0.000642f, +0.000653f, +0.000586f, +0.000830f, +0.000310f, -0.000324f, +0.000516f, +0.000506f, +0.000022f, + +0.000205f, +0.000169f, +0.001776f, +0.000550f, +0.000549f, -0.000066f, +0.000890f, -0.001022f, -0.000538f, -0.000204f, + -0.000199f, -0.000007f, -0.000958f, +0.000209f, +0.000323f, -0.000246f, -0.000176f, +0.000319f, +0.000264f, -0.000058f, + -0.000330f, +0.000216f, -0.000063f, -0.000616f, +0.000482f, -0.000082f, -0.000354f, +0.000005f, -0.000045f, -0.000183f, + +0.000458f, -0.000175f, -0.000079f, -0.000173f, -0.000252f, +0.000143f, -0.000044f, -0.000054f, +0.000264f, +0.000050f, + +0.000165f, -0.000043f, -0.000075f, -0.000079f, -0.000111f, -0.000120f, -0.000063f, -0.000163f, +0.000167f, -0.000027f, + +0.000080f, +0.000133f, +0.000032f, +0.000004f, +0.000079f, -0.000002f, -0.000128f, -0.000013f, -0.000024f, -0.000102f, + +0.000009f, -0.000095f, +0.000126f, -0.000033f, +0.000029f, -0.000087f + }, + { + -0.000561f, +0.000542f, +0.004643f, -0.000510f, -0.000378f, -0.000325f, -0.003673f, -0.000417f, -0.000716f, -0.000293f, + +0.000846f, -0.001915f, -0.002108f, +0.000062f, +0.000659f, -0.002754f, -0.001529f, -0.002732f, +0.000871f, -0.003246f, + +0.000682f, +0.002240f, +0.000157f, -0.001123f, +0.000261f, -0.001293f, -0.000749f, -0.000464f, -0.000704f, +0.000787f, + -0.000485f, +0.000278f, -0.000703f, -0.000321f, +0.000192f, -0.000814f, +0.000241f, -0.000617f, -0.000092f, -0.000046f, + +0.000165f, +0.000368f, -0.000145f, -0.000215f, -0.000158f, -0.000648f, -0.000324f, +0.000312f, -0.000408f, +0.000021f, + -0.000129f, -0.000508f, +0.000010f, +0.000109f, -0.000110f, -0.000163f, -0.000059f, -0.000130f, -0.000096f, +0.000273f, + -0.000045f, -0.000265f, +0.000064f, +0.000212f, -0.000080f, -0.000091f, +0.000198f, -0.000143f, -0.000125f, -0.000032f, + -0.000047f, +0.000136f, -0.000018f, -0.000089f, -0.000021f, -0.000023f, +0.000065f, +0.000051f, +0.000175f, -0.000064f, + -0.000100f, +0.000077f, -0.000077f, -0.000002f, +0.000077f, +0.000083f, -0.000023f, +0.000037f, +0.000009f, +0.000143f, + -0.000006f, +0.000021f, +0.000017f, +0.000028f, -0.000062f, -0.000082f + }, + { + -0.005926f, -0.007860f, -0.002570f, -0.004213f, -0.000010f, -0.002145f, +0.003882f, +0.002588f, +0.000041f, -0.000067f, + -0.004260f, +0.001385f, +0.000548f, -0.003898f, +0.005074f, +0.000428f, +0.001350f, +0.000390f, +0.000389f, -0.001266f, + +0.001153f, +0.000960f, -0.000400f, +0.000528f, -0.001021f, -0.000613f, -0.000659f, -0.001600f, +0.000121f, -0.000846f, + +0.000924f, +0.000260f, +0.000171f, +0.000534f, -0.000238f, -0.001028f, +0.000860f, +0.000683f, +0.000676f, -0.000342f, + +0.000019f, +0.000356f, +0.000441f, -0.000650f, -0.000747f, +0.000305f, -0.000260f, +0.000183f, -0.000627f, -0.000078f, + +0.000244f, +0.000089f, +0.000297f, -0.000719f, +0.000433f, -0.000226f, +0.000162f, -0.000126f, -0.000376f, +0.000022f, + -0.000150f, +0.000064f, +0.000189f, -0.000141f, -0.000057f, +0.000048f, -0.000020f, -0.000014f, +0.000219f, +0.000029f, + -0.000131f, +0.000116f, -0.000026f, -0.000107f, -0.000090f, -0.000032f, -0.000096f, +0.000106f, +0.000050f, +0.000012f, + -0.000017f, +0.000042f, -0.000088f, -0.000181f, -0.000031f, -0.000086f, +0.000105f, +0.000084f, +0.000022f, +0.000023f, + -0.000034f, +0.000003f, -0.000071f, -0.000012f, +0.000024f, -0.000013f + }, + { + +0.000340f, -0.003084f, -0.002355f, +0.004994f, -0.002974f, +0.000880f, -0.000189f, +0.000374f, +0.000125f, +0.000084f, + -0.001372f, -0.000217f, -0.008220f, +0.004037f, -0.003945f, -0.004340f, -0.004082f, -0.001444f, +0.001179f, +0.000284f, + -0.003164f, +0.001094f, -0.007331f, -0.002433f, +0.000177f, +0.001816f, +0.000300f, -0.001105f, +0.001532f, -0.001305f, + +0.000780f, +0.000173f, +0.000634f, +0.000006f, -0.000626f, +0.000913f, +0.000163f, +0.000473f, +0.001059f, -0.000496f, + +0.000117f, +0.000567f, -0.000806f, +0.000210f, -0.000411f, +0.000100f, -0.000582f, -0.000933f, -0.000265f, +0.000985f, + +0.000705f, +0.000095f, -0.000956f, +0.000387f, -0.000043f, -0.000333f, -0.000332f, +0.000100f, -0.000254f, +0.000108f, + -0.000070f, +0.000528f, -0.000450f, -0.000296f, -0.000019f, +0.000337f, -0.000382f, +0.000118f, -0.000144f, -0.000102f, + +0.000274f, +0.000017f, +0.000097f, -0.000032f, -0.000048f, +0.000014f, -0.000085f, +0.000145f, +0.000123f, -0.000162f, + +0.000022f, +0.000099f, -0.000058f, +0.000028f, -0.000076f, +0.000044f, +0.000010f, -0.000078f, +0.000001f, +0.000096f, + +0.000071f, +0.000099f, -0.000106f, -0.000006f, +0.000030f, -0.000128f + }, + { + -0.009375f, +0.006908f, +0.000901f, +0.008619f, +0.000120f, +0.000096f, -0.000717f, +0.000867f, -0.000325f, -0.000371f, + +0.000871f, -0.002335f, +0.002363f, +0.002671f, -0.015713f, -0.001107f, +0.004333f, -0.001122f, +0.002645f, +0.000695f, + +0.000172f, +0.000873f, +0.000264f, +0.001817f, -0.001299f, -0.000015f, -0.001389f, +0.000511f, +0.000093f, -0.001609f, + +0.000225f, -0.000456f, -0.000517f, -0.000180f, -0.000045f, +0.000542f, +0.000021f, +0.000259f, -0.000284f, +0.000456f, + -0.000649f, +0.001104f, -0.000037f, +0.000134f, +0.000520f, +0.000536f, +0.000033f, +0.000866f, +0.000854f, -0.001045f, + -0.000097f, +0.000775f, -0.000327f, -0.000558f, +0.000292f, +0.000360f, +0.000332f, -0.000419f, -0.000048f, +0.000065f, + +0.000097f, +0.000412f, +0.000084f, -0.000148f, +0.000285f, -0.000063f, +0.000450f, +0.000145f, +0.000040f, -0.000067f, + +0.000182f, -0.000229f, +0.000006f, -0.000133f, -0.000028f, +0.000018f, +0.000095f, -0.000245f, +0.000040f, +0.000077f, + +0.000059f, -0.000156f, +0.000021f, +0.000119f, -0.000046f, -0.000016f, +0.000147f, -0.000083f, -0.000075f, +0.000052f, + +0.000011f, -0.000050f, +0.000060f, +0.000051f, +0.000018f, -0.000030f + }, + { + +0.000583f, -0.004900f, +0.000243f, -0.000114f, +0.000676f, -0.000319f, -0.000315f, +0.001319f, -0.000183f, +0.000389f, + +0.002132f, +0.000784f, -0.001434f, +0.016420f, -0.023556f, +0.000481f, +0.003182f, +0.001605f, +0.001913f, +0.003461f, + +0.000335f, +0.004325f, +0.001888f, -0.001470f, +0.001990f, +0.000379f, -0.001074f, -0.000578f, -0.000591f, +0.000356f, + -0.000512f, -0.001630f, +0.000050f, -0.000616f, +0.000444f, +0.000700f, -0.000192f, -0.000389f, +0.000493f, -0.000669f, + +0.000302f, +0.000323f, -0.000732f, +0.000263f, +0.000886f, -0.000405f, +0.000160f, +0.000218f, +0.000179f, -0.000364f, + +0.000178f, +0.000023f, -0.000217f, -0.000397f, -0.000082f, +0.000129f, -0.000166f, +0.000030f, -0.000137f, -0.000158f, + -0.000372f, +0.000136f, -0.000218f, -0.000146f, -0.000243f, -0.000150f, -0.000029f, +0.000054f, -0.000072f, -0.000153f, + -0.000056f, +0.000068f, -0.000296f, -0.000134f, -0.000085f, -0.000114f, +0.000170f, -0.000022f, -0.000100f, -0.000049f, + -0.000035f, -0.000015f, +0.000004f, +0.000128f, -0.000049f, +0.000050f, +0.000004f, -0.000074f, +0.000011f, +0.000125f, + -0.000004f, -0.000010f, +0.000094f, +0.000001f, -0.000062f, +0.000045f + } + }, + { + { + +0.011209f, +0.137801f, +0.009834f, -0.006959f, -0.000509f, -0.000966f, -0.000111f, +0.000524f, -0.000865f, -0.000333f, + +0.001200f, -0.000248f, +0.000881f, -0.003223f, -0.002339f, +0.001794f, -0.000167f, +0.001799f, +0.001600f, -0.000594f, + -0.001170f, -0.001276f, +0.000513f, -0.000273f, -0.000782f, +0.000486f, +0.000089f, -0.000697f, -0.000441f, +0.000542f, + +0.000494f, +0.001466f, -0.001213f, -0.000328f, +0.000032f, +0.001231f, +0.000776f, -0.000236f, -0.000202f, +0.000012f, + +0.000235f, -0.000051f, +0.000190f, -0.000462f, -0.000143f, +0.000093f, -0.000910f, -0.000136f, +0.001207f, -0.000226f, + -0.000363f, -0.000002f, -0.000214f, -0.000350f, -0.000549f, -0.000136f, -0.000084f, -0.000131f, +0.000221f, +0.000470f, + -0.000199f, -0.000251f, -0.000088f, -0.000004f, +0.000040f, +0.000064f, +0.000140f, -0.000080f, -0.000132f, +0.000114f, + +0.000145f, -0.000086f, -0.000039f, -0.000100f, -0.000072f, +0.000176f, +0.000079f, +0.000108f, +0.000194f, +0.000203f, + +0.000026f, -0.000012f, +0.000010f, -0.000003f, -0.000070f, +0.000075f, -0.000006f, +0.000157f, +0.000043f, +0.000060f, + -0.000041f, +0.000041f, +0.000042f, -0.000013f, +0.000001f, +0.000012f + }, + { + -0.000632f, -0.018336f, +0.003480f, +0.001240f, -0.001002f, -0.000487f, +0.000181f, +0.001055f, +0.000066f, +0.000024f, + +0.001032f, -0.001390f, -0.000464f, +0.000490f, -0.001181f, -0.001074f, +0.002689f, -0.000922f, -0.000650f, +0.002008f, + +0.001269f, -0.002039f, +0.000873f, -0.000035f, +0.000170f, +0.001139f, -0.001911f, -0.000085f, +0.000559f, -0.001415f, + +0.000180f, +0.001511f, -0.001045f, +0.000138f, +0.001127f, +0.001014f, -0.000634f, -0.000633f, -0.000989f, -0.000290f, + +0.000010f, +0.000096f, +0.000503f, +0.000458f, +0.000080f, +0.000023f, -0.000048f, -0.000025f, -0.000056f, -0.000626f, + -0.000010f, -0.000205f, +0.000037f, -0.000099f, -0.000450f, +0.000195f, +0.000169f, -0.000270f, -0.000642f, -0.000066f, + -0.000167f, +0.000052f, -0.000374f, -0.000147f, -0.000191f, +0.000060f, +0.000196f, +0.000022f, -0.000267f, -0.000096f, + +0.000180f, -0.000271f, -0.000124f, +0.000028f, -0.000054f, -0.000140f, -0.000111f, -0.000026f, +0.000162f, -0.000016f, + -0.000088f, +0.000041f, +0.000091f, -0.000038f, -0.000023f, -0.000005f, +0.000119f, +0.000043f, +0.000162f, -0.000104f, + -0.000039f, +0.000059f, +0.000046f, -0.000005f, +0.000016f, -0.000068f + }, + { + +0.004555f, -0.008386f, -0.014887f, -0.003223f, -0.004232f, -0.001324f, +0.000035f, -0.002674f, -0.002103f, +0.001170f, + +0.000346f, -0.000774f, -0.002956f, -0.004034f, +0.001872f, +0.001172f, +0.000879f, -0.000686f, +0.002769f, +0.000745f, + +0.000405f, -0.001042f, -0.000794f, -0.002031f, -0.000945f, +0.000539f, +0.000792f, +0.000108f, -0.000576f, -0.000074f, + +0.000565f, +0.000777f, -0.001651f, -0.001243f, -0.001747f, -0.001250f, -0.000332f, -0.000153f, -0.000456f, +0.000213f, + +0.000089f, +0.000557f, -0.000494f, -0.000675f, +0.000065f, -0.001498f, -0.000335f, -0.000063f, +0.000784f, -0.000121f, + +0.000142f, +0.000933f, -0.000376f, -0.000143f, -0.000373f, -0.000293f, +0.000445f, +0.000354f, +0.000176f, +0.000312f, + +0.000029f, +0.000257f, -0.000260f, -0.000006f, +0.000438f, +0.000156f, +0.000064f, +0.000038f, +0.000238f, -0.000216f, + -0.000196f, +0.000298f, +0.000099f, -0.000062f, -0.000027f, -0.000044f, +0.000103f, -0.000005f, +0.000049f, +0.000041f, + -0.000109f, +0.000172f, +0.000083f, -0.000090f, +0.000113f, +0.000024f, -0.000077f, +0.000033f, -0.000074f, +0.000068f, + -0.000040f, -0.000042f, +0.000034f, +0.000008f, -0.000011f, +0.000056f + }, + { + -0.015328f, +0.010902f, +0.002699f, +0.000878f, -0.002720f, +0.001100f, -0.000379f, +0.000466f, -0.000753f, -0.000874f, + -0.000593f, -0.000777f, +0.002411f, -0.001061f, -0.002744f, -0.001027f, +0.000334f, -0.005665f, -0.000030f, +0.000637f, + +0.000774f, +0.000346f, -0.000112f, -0.000234f, -0.000899f, -0.000802f, +0.000759f, +0.001520f, -0.001344f, -0.000224f, + +0.001019f, -0.000174f, +0.000426f, -0.000086f, +0.000031f, +0.000772f, +0.000508f, -0.000133f, +0.000743f, +0.000039f, + +0.000446f, +0.000649f, +0.000784f, -0.000379f, -0.000017f, +0.000599f, -0.000062f, -0.000206f, +0.000336f, -0.000788f, + +0.000241f, -0.000166f, -0.000059f, -0.000178f, -0.000081f, -0.000506f, -0.000266f, -0.000062f, +0.000257f, -0.000349f, + -0.000164f, -0.000106f, -0.000157f, +0.000070f, +0.000058f, -0.000159f, +0.000031f, -0.000061f, +0.000127f, -0.000004f, + -0.000084f, -0.000178f, +0.000144f, +0.000170f, +0.000016f, +0.000051f, -0.000031f, +0.000034f, +0.000037f, +0.000049f, + +0.000072f, -0.000062f, -0.000004f, +0.000106f, -0.000031f, +0.000104f, +0.000039f, -0.000006f, +0.000058f, +0.000072f, + +0.000026f, -0.000071f, -0.000018f, +0.000007f, -0.000023f, -0.000021f + }, + { + -0.000604f, +0.013100f, +0.001103f, -0.000024f, -0.000262f, +0.000011f, -0.000304f, +0.000146f, +0.000484f, +0.000424f, + -0.000009f, +0.000999f, +0.000323f, -0.000409f, -0.014133f, -0.001975f, +0.000997f, +0.006604f, +0.005421f, +0.000662f, + +0.000757f, +0.002687f, +0.001122f, -0.001296f, +0.001562f, -0.003213f, +0.000949f, +0.001330f, +0.000444f, +0.000194f, + +0.002889f, +0.000871f, +0.000341f, +0.000919f, +0.000195f, +0.000217f, +0.000868f, +0.000373f, -0.000492f, +0.000116f, + -0.000658f, +0.000140f, -0.000041f, -0.000494f, +0.000230f, +0.000198f, -0.000633f, +0.000582f, +0.000564f, +0.000346f, + +0.000049f, -0.000393f, -0.000190f, -0.000337f, +0.000075f, -0.000283f, +0.000115f, -0.000108f, -0.000106f, +0.000071f, + +0.000015f, +0.000183f, -0.000449f, +0.000076f, -0.000033f, +0.000069f, -0.000152f, -0.000158f, +0.000042f, +0.000034f, + -0.000180f, -0.000089f, +0.000141f, -0.000056f, +0.000019f, +0.000248f, -0.000144f, -0.000097f, +0.000074f, -0.000158f, + -0.000070f, -0.000129f, -0.000047f, +0.000037f, -0.000050f, +0.000011f, -0.000041f, +0.000025f, +0.000020f, -0.000012f, + +0.000009f, +0.000036f, -0.000065f, -0.000053f, +0.000054f, +0.000054f + }, + { + -0.026350f, -0.005447f, +0.011120f, -0.001981f, -0.000810f, +0.000252f, +0.000897f, -0.000930f, +0.001449f, +0.001426f, + -0.000761f, -0.000548f, -0.000385f, -0.000075f, -0.000337f, +0.000254f, +0.000683f, -0.000552f, -0.000511f, -0.000475f, + +0.000469f, +0.000186f, +0.000009f, +0.000863f, +0.000923f, +0.000342f, -0.000227f, -0.000650f, +0.000368f, +0.000026f, + +0.000691f, -0.000218f, +0.000451f, +0.000343f, +0.000056f, +0.000450f, +0.000163f, +0.000889f, -0.000464f, +0.000262f, + -0.000052f, +0.000289f, -0.000851f, +0.000204f, -0.000138f, +0.000038f, -0.000360f, -0.000709f, +0.000523f, -0.000042f, + +0.000279f, +0.000002f, +0.000861f, +0.000223f, -0.000752f, -0.000434f, +0.000136f, +0.000034f, +0.000036f, -0.000224f, + -0.000254f, +0.000002f, +0.000052f, -0.000234f, -0.000174f, -0.000114f, +0.000236f, +0.000123f, +0.000140f, +0.000104f, + -0.000067f, +0.000020f, -0.000046f, +0.000057f, +0.000039f, +0.000129f, +0.000006f, -0.000060f, +0.000143f, -0.000053f, + -0.000142f, -0.000137f, -0.000032f, +0.000036f, -0.000008f, +0.000011f, -0.000051f, +0.000034f, -0.000125f, -0.000020f, + +0.000067f, -0.000010f, +0.000025f, -0.000051f, +0.000037f, +0.000022f + }, + { + +0.000065f, +0.005358f, +0.002736f, -0.000145f, -0.000027f, +0.000162f, +0.000226f, -0.000208f, -0.000966f, -0.000334f, + +0.000045f, +0.000076f, -0.002607f, -0.001154f, -0.001582f, +0.002685f, -0.002643f, -0.002024f, -0.001958f, +0.002998f, + +0.001497f, +0.000822f, +0.000260f, -0.000185f, -0.000568f, +0.000261f, +0.002612f, +0.000110f, -0.000977f, +0.000922f, + +0.000489f, -0.000166f, -0.001510f, -0.000057f, -0.001159f, -0.000213f, -0.000535f, +0.000321f, -0.000648f, +0.000651f, + +0.000456f, -0.000376f, +0.000671f, -0.000242f, +0.000227f, +0.000209f, +0.000378f, -0.000173f, -0.000433f, +0.000116f, + +0.000256f, +0.000018f, +0.000211f, -0.000112f, -0.000256f, +0.000251f, +0.000007f, -0.000417f, -0.000394f, +0.000410f, + -0.000134f, -0.000119f, +0.000120f, +0.000048f, -0.000127f, +0.000062f, +0.000298f, +0.000288f, -0.000336f, -0.000143f, + +0.000138f, +0.000241f, +0.000073f, +0.000116f, +0.000138f, +0.000087f, -0.000018f, -0.000066f, -0.000130f, -0.000036f, + +0.000021f, +0.000028f, -0.000092f, -0.000049f, +0.000049f, +0.000024f, +0.000015f, -0.000022f, -0.000056f, -0.000092f, + -0.000012f, -0.000059f, +0.000074f, -0.000029f, +0.000017f, +0.000016f + }, + { + +0.008556f, +0.058073f, +0.004482f, +0.005709f, -0.000723f, +0.000092f, -0.001862f, +0.000926f, +0.000391f, -0.000285f, + -0.000355f, -0.001289f, -0.000887f, +0.001436f, +0.003318f, +0.001376f, -0.000471f, -0.001490f, +0.001107f, +0.001788f, + -0.000074f, +0.000054f, +0.000915f, -0.000720f, -0.000587f, +0.000482f, +0.000211f, +0.000009f, +0.000446f, +0.000423f, + +0.000856f, +0.000322f, +0.001134f, +0.000421f, -0.000087f, +0.000747f, +0.000094f, +0.000315f, +0.000153f, +0.000407f, + +0.000539f, +0.000687f, -0.000166f, -0.000867f, -0.000125f, -0.000065f, +0.000223f, +0.000246f, +0.000311f, -0.000198f, + -0.000448f, -0.000285f, +0.000248f, +0.000364f, -0.000047f, +0.000432f, +0.000130f, +0.000044f, -0.000158f, +0.000054f, + -0.000275f, +0.000215f, -0.000005f, -0.000201f, -0.000283f, +0.000001f, +0.000103f, +0.000195f, -0.000009f, +0.000124f, + +0.000022f, -0.000123f, +0.000223f, +0.000187f, -0.000070f, -0.000117f, +0.000120f, +0.000174f, -0.000045f, +0.000153f, + +0.000022f, +0.000016f, +0.000061f, +0.000120f, -0.000030f, +0.000039f, +0.000112f, -0.000036f, -0.000031f, -0.000019f, + -0.000002f, +0.000137f, +0.000010f, +0.000002f, +0.000012f, +0.000002f + }, + { + -0.000178f, +0.005458f, -0.004329f, -0.000133f, -0.000066f, -0.000147f, +0.000193f, -0.000011f, +0.000485f, -0.000008f, + +0.001029f, -0.001348f, -0.000583f, -0.004325f, +0.003312f, -0.001127f, -0.001117f, -0.002188f, +0.002538f, -0.002454f, + -0.001719f, +0.002709f, +0.001007f, -0.000206f, +0.002004f, +0.002328f, +0.001448f, -0.001521f, +0.000318f, +0.001277f, + -0.000294f, +0.002061f, -0.000375f, -0.000005f, -0.000527f, -0.001782f, +0.000549f, +0.000321f, -0.000122f, +0.000317f, + +0.000549f, +0.000329f, +0.000537f, +0.000261f, +0.000207f, +0.000406f, -0.000226f, -0.000368f, +0.000200f, -0.000133f, + +0.000149f, +0.000343f, +0.000149f, +0.000314f, +0.000018f, -0.000128f, -0.000157f, +0.000055f, -0.000187f, -0.000076f, + +0.000033f, -0.000109f, -0.000130f, +0.000026f, +0.000133f, +0.000217f, +0.000015f, +0.000083f, -0.000160f, -0.000199f, + -0.000200f, -0.000298f, -0.000098f, +0.000336f, -0.000017f, -0.000108f, +0.000061f, +0.000206f, -0.000110f, -0.000036f, + -0.000020f, -0.000126f, +0.000091f, -0.000059f, +0.000083f, -0.000016f, +0.000078f, -0.000003f, -0.000023f, -0.000065f, + +0.000069f, -0.000051f, -0.000009f, +0.000051f, -0.000007f, +0.000051f + }, + { + -0.008545f, +0.007600f, -0.000803f, +0.006172f, +0.001065f, +0.004718f, +0.000003f, -0.001966f, +0.000223f, +0.000942f, + +0.000619f, -0.000781f, -0.001123f, +0.000072f, +0.003067f, -0.005102f, +0.003400f, +0.000590f, -0.001607f, +0.001630f, + +0.000394f, -0.000539f, +0.000607f, +0.001231f, +0.000685f, -0.000095f, +0.000345f, +0.000883f, -0.000090f, +0.000409f, + +0.000751f, +0.000507f, +0.000747f, +0.001372f, +0.001220f, -0.000986f, +0.000597f, -0.000109f, -0.000790f, +0.000091f, + +0.000191f, -0.000553f, -0.000284f, -0.000628f, +0.000153f, +0.000596f, -0.000128f, -0.000296f, +0.000433f, -0.000019f, + +0.000046f, +0.000127f, +0.000367f, -0.000244f, -0.000109f, +0.000164f, -0.000167f, -0.000179f, -0.000035f, -0.000195f, + -0.000006f, +0.000161f, -0.000167f, +0.000021f, -0.000278f, -0.000007f, +0.000048f, +0.000076f, +0.000174f, +0.000132f, + +0.000011f, +0.000053f, -0.000015f, -0.000112f, -0.000091f, -0.000165f, +0.000116f, -0.000118f, +0.000077f, +0.000021f, + -0.000112f, +0.000101f, +0.000098f, +0.000046f, +0.000152f, +0.000069f, +0.000039f, -0.000015f, +0.000047f, -0.000028f, + +0.000033f, -0.000095f, -0.000005f, +0.000038f, +0.000027f, -0.000017f + }, + { + +0.000366f, -0.000974f, +0.001765f, +0.002184f, +0.000805f, -0.000234f, -0.002461f, -0.000401f, -0.001686f, +0.001165f, + +0.000806f, -0.000987f, -0.001857f, +0.000682f, -0.000247f, -0.002674f, -0.002714f, -0.004439f, +0.004392f, -0.004849f, + +0.000869f, +0.000382f, -0.000237f, +0.000085f, +0.001045f, -0.001742f, -0.000962f, -0.000914f, -0.000101f, -0.000889f, + -0.000546f, +0.000607f, -0.001246f, +0.000052f, +0.000308f, -0.001110f, -0.000648f, -0.000221f, -0.000303f, -0.000026f, + +0.000155f, +0.000537f, -0.000332f, -0.000356f, -0.000205f, -0.000339f, -0.000289f, +0.000224f, -0.000103f, +0.000918f, + -0.000552f, -0.000311f, -0.000460f, -0.000337f, +0.000257f, -0.000138f, -0.000188f, +0.000130f, -0.000126f, +0.000212f, + +0.000194f, -0.000087f, -0.000028f, +0.000051f, +0.000185f, -0.000187f, +0.000129f, +0.000121f, -0.000099f, -0.000069f, + +0.000028f, -0.000019f, -0.000135f, -0.000024f, +0.000034f, -0.000047f, -0.000094f, -0.000118f, +0.000185f, -0.000077f, + -0.000103f, +0.000131f, +0.000002f, -0.000146f, +0.000016f, +0.000078f, -0.000073f, +0.000013f, -0.000056f, +0.000012f, + +0.000064f, -0.000011f, -0.000003f, -0.000028f, +0.000030f, -0.000042f + }, + { + +0.002284f, -0.014335f, -0.005790f, -0.006130f, +0.000576f, -0.001063f, +0.002381f, +0.001071f, +0.000048f, -0.000019f, + -0.003800f, -0.000428f, +0.000033f, -0.001081f, +0.000882f, +0.002334f, +0.000561f, +0.000278f, +0.000484f, -0.000990f, + +0.000943f, +0.000968f, +0.000028f, -0.000121f, +0.000151f, -0.001294f, -0.000705f, -0.000932f, -0.000697f, -0.000783f, + +0.001511f, -0.000223f, -0.000338f, +0.000331f, -0.000213f, -0.001116f, -0.000463f, +0.000272f, +0.000918f, -0.000317f, + +0.000869f, -0.000331f, -0.000793f, -0.000019f, +0.000084f, +0.000026f, -0.000187f, -0.000382f, -0.000133f, -0.000286f, + +0.000484f, +0.000211f, -0.000202f, -0.000305f, -0.000065f, -0.000013f, -0.000010f, +0.000043f, -0.000556f, -0.000018f, + +0.000072f, -0.000183f, +0.000007f, +0.000223f, -0.000102f, +0.000087f, -0.000012f, -0.000087f, -0.000023f, +0.000256f, + -0.000099f, -0.000009f, +0.000029f, -0.000080f, +0.000020f, -0.000065f, -0.000017f, +0.000023f, -0.000049f, -0.000032f, + +0.000044f, +0.000178f, -0.000008f, -0.000169f, +0.000033f, -0.000156f, +0.000137f, +0.000034f, +0.000016f, +0.000110f, + +0.000004f, +0.000050f, +0.000051f, -0.000026f, +0.000017f, -0.000021f + }, + { + -0.000138f, -0.006472f, +0.001038f, +0.002120f, -0.000299f, +0.000146f, -0.000216f, +0.000146f, -0.000190f, +0.000551f, + -0.000202f, +0.001001f, +0.004880f, -0.016154f, -0.005171f, -0.001111f, -0.005665f, -0.002355f, +0.000565f, +0.001768f, + -0.005003f, -0.001172f, -0.001765f, -0.002493f, +0.000131f, +0.001569f, -0.000711f, -0.000384f, +0.001130f, -0.000263f, + -0.000443f, -0.000067f, +0.000343f, -0.000078f, +0.001182f, -0.000273f, -0.000312f, +0.000882f, +0.000433f, -0.000116f, + +0.000440f, +0.000465f, -0.000406f, -0.000149f, -0.000028f, -0.000374f, -0.000724f, -0.000240f, +0.000394f, +0.000068f, + +0.000652f, +0.000262f, -0.000143f, -0.000208f, +0.000461f, -0.000318f, -0.000295f, -0.000181f, -0.000089f, +0.000059f, + -0.000000f, +0.000408f, -0.000421f, -0.000052f, -0.000126f, +0.000038f, -0.000137f, -0.000170f, -0.000027f, +0.000139f, + -0.000016f, +0.000030f, +0.000049f, -0.000057f, +0.000313f, +0.000033f, +0.000055f, +0.000158f, -0.000102f, -0.000135f, + -0.000033f, +0.000024f, -0.000055f, -0.000085f, -0.000026f, -0.000027f, +0.000100f, -0.000066f, -0.000140f, +0.000145f, + +0.000023f, +0.000092f, +0.000081f, -0.000055f, +0.000021f, +0.000016f + }, + { + +0.006876f, -0.016096f, +0.000979f, +0.003580f, -0.000165f, -0.001597f, +0.001481f, +0.001914f, +0.000285f, -0.000709f, + -0.000736f, +0.001730f, +0.000724f, -0.004474f, -0.004717f, -0.000500f, -0.002141f, -0.000472f, +0.002240f, +0.000283f, + -0.000417f, +0.001260f, +0.001316f, +0.001496f, +0.000502f, -0.001062f, -0.001419f, +0.001284f, +0.000211f, -0.001034f, + -0.000269f, -0.000917f, -0.000268f, -0.000741f, -0.000041f, +0.000174f, +0.000366f, -0.000350f, -0.000119f, -0.000002f, + +0.000545f, +0.000160f, +0.000792f, -0.000114f, -0.000187f, -0.000009f, +0.000133f, +0.000736f, +0.000353f, -0.000366f, + -0.000482f, +0.000211f, +0.000365f, -0.000182f, -0.000064f, +0.000320f, -0.000201f, -0.000054f, -0.000441f, +0.000485f, + -0.000064f, +0.000040f, +0.000089f, -0.000039f, -0.000157f, +0.000091f, +0.000155f, +0.000113f, +0.000175f, -0.000072f, + +0.000064f, -0.000156f, +0.000011f, -0.000056f, -0.000018f, -0.000033f, +0.000040f, -0.000109f, -0.000152f, -0.000079f, + +0.000058f, -0.000102f, -0.000120f, +0.000007f, -0.000016f, -0.000125f, +0.000097f, +0.000124f, -0.000072f, +0.000019f, + -0.000004f, -0.000076f, -0.000009f, +0.000015f, +0.000066f, -0.000020f + }, + { + -0.000834f, -0.004248f, -0.000613f, +0.001066f, +0.000016f, -0.000361f, -0.000287f, +0.000093f, +0.001734f, -0.000879f, + +0.001436f, +0.000362f, -0.000335f, -0.006014f, +0.008801f, +0.003236f, -0.001124f, +0.002972f, +0.000053f, +0.002268f, + +0.000906f, +0.000808f, +0.002349f, +0.001305f, +0.001290f, -0.001736f, -0.000902f, -0.000777f, +0.000523f, +0.000863f, + -0.000632f, -0.000361f, -0.000706f, -0.001495f, +0.000474f, +0.000808f, +0.000285f, -0.000939f, -0.000167f, +0.000030f, + +0.000728f, +0.000274f, +0.000950f, -0.000485f, +0.000343f, -0.000298f, +0.000647f, +0.000076f, +0.000031f, -0.000349f, + +0.000361f, +0.000166f, +0.000231f, -0.000694f, -0.000387f, -0.000127f, +0.000032f, +0.000142f, +0.000146f, +0.000534f, + -0.000155f, -0.000107f, +0.000023f, -0.000121f, -0.000078f, -0.000257f, -0.000335f, +0.000194f, -0.000042f, -0.000127f, + -0.000246f, +0.000135f, +0.000125f, -0.000096f, +0.000029f, -0.000088f, +0.000096f, +0.000091f, +0.000010f, -0.000114f, + -0.000182f, -0.000119f, -0.000032f, +0.000033f, -0.000050f, +0.000093f, +0.000013f, -0.000093f, +0.000006f, +0.000062f, + -0.000021f, -0.000045f, +0.000034f, +0.000087f, -0.000009f, -0.000041f + } + }, + { + { + -0.013545f, +0.062910f, -0.015756f, -0.002327f, +0.002316f, -0.001235f, -0.000298f, +0.001845f, -0.000126f, -0.001110f, + +0.001239f, -0.000578f, +0.000688f, +0.000611f, +0.000386f, +0.002471f, +0.000226f, +0.002357f, -0.002401f, -0.000690f, + +0.001007f, -0.000127f, +0.001092f, +0.000594f, -0.000855f, +0.000724f, -0.000196f, +0.000593f, +0.000021f, +0.000280f, + -0.000093f, +0.001166f, -0.000858f, -0.000136f, +0.000366f, +0.000732f, +0.000460f, -0.000885f, -0.000306f, -0.000138f, + +0.000260f, +0.000430f, +0.000007f, -0.001237f, -0.000578f, +0.000487f, +0.000065f, -0.000493f, +0.000919f, +0.000342f, + +0.000122f, -0.000028f, -0.000085f, +0.000210f, +0.000111f, +0.000091f, -0.000078f, -0.000158f, -0.000306f, +0.000186f, + +0.000130f, -0.000120f, -0.000071f, -0.000338f, -0.000050f, +0.000053f, +0.000225f, +0.000112f, -0.000240f, -0.000082f, + +0.000001f, -0.000133f, +0.000003f, +0.000114f, -0.000030f, -0.000103f, -0.000173f, +0.000109f, -0.000140f, +0.000129f, + +0.000009f, +0.000209f, +0.000062f, -0.000074f, -0.000025f, -0.000109f, +0.000079f, +0.000012f, +0.000005f, +0.000025f, + -0.000042f, -0.000026f, +0.000060f, -0.000049f, -0.000004f, +0.000013f + }, + { + +0.000766f, -0.026141f, +0.000597f, +0.001968f, +0.000266f, +0.000384f, +0.001374f, -0.000162f, +0.000122f, +0.000450f, + +0.002597f, -0.000597f, +0.000168f, +0.001551f, +0.001382f, -0.000923f, +0.000747f, -0.000646f, -0.000920f, -0.000545f, + +0.001394f, -0.002200f, -0.000280f, +0.001060f, +0.002225f, +0.001661f, -0.002423f, +0.001988f, +0.000731f, -0.000999f, + +0.000302f, +0.000242f, -0.000296f, +0.000417f, +0.000545f, +0.001383f, +0.000200f, +0.000416f, +0.000296f, -0.000340f, + -0.000530f, +0.000614f, +0.001000f, +0.000483f, -0.000927f, -0.000186f, +0.000081f, +0.000015f, +0.000078f, +0.000280f, + +0.000617f, -0.000397f, +0.000026f, +0.000278f, +0.000361f, -0.000197f, +0.000041f, -0.000088f, -0.000282f, +0.000085f, + -0.000088f, +0.000027f, -0.000142f, +0.000048f, -0.000114f, +0.000360f, +0.000164f, +0.000320f, +0.000012f, +0.000041f, + +0.000153f, +0.000007f, -0.000119f, -0.000146f, -0.000025f, +0.000156f, -0.000095f, -0.000081f, +0.000042f, -0.000088f, + +0.000120f, -0.000036f, -0.000123f, -0.000034f, -0.000053f, -0.000022f, +0.000108f, +0.000024f, -0.000007f, +0.000075f, + -0.000100f, -0.000070f, +0.000026f, +0.000072f, +0.000063f, -0.000072f + }, + { + -0.004374f, +0.028774f, +0.015640f, -0.000731f, +0.001943f, -0.000227f, +0.000700f, -0.000722f, -0.000160f, +0.000604f, + -0.000768f, -0.000329f, +0.001135f, -0.002206f, +0.003393f, +0.001597f, +0.001736f, -0.000364f, +0.005024f, -0.000338f, + -0.000673f, -0.000760f, +0.000238f, -0.000045f, -0.000078f, -0.000458f, +0.000505f, +0.001240f, +0.000073f, -0.000324f, + +0.000904f, +0.001890f, +0.000266f, +0.000623f, -0.000806f, -0.001595f, +0.000412f, +0.000077f, -0.000062f, +0.000595f, + +0.000360f, +0.000500f, -0.000223f, +0.000047f, +0.000193f, -0.000524f, -0.000312f, -0.000332f, +0.000445f, -0.000006f, + -0.000647f, +0.000578f, -0.000185f, -0.000089f, +0.000322f, +0.000024f, +0.000031f, -0.000036f, +0.000068f, +0.000309f, + -0.000218f, +0.000353f, -0.000280f, +0.000292f, +0.000025f, +0.000131f, +0.000040f, -0.000271f, -0.000040f, +0.000141f, + +0.000057f, -0.000024f, +0.000054f, +0.000075f, -0.000035f, +0.000002f, -0.000019f, -0.000133f, +0.000121f, +0.000061f, + -0.000006f, +0.000090f, +0.000078f, -0.000114f, -0.000050f, +0.000094f, +0.000038f, +0.000135f, -0.000160f, +0.000089f, + +0.000056f, -0.000054f, -0.000037f, -0.000033f, -0.000052f, -0.000017f + }, + { + +0.007096f, +0.023476f, -0.015111f, +0.000872f, -0.000601f, +0.000548f, -0.000452f, +0.000125f, -0.000376f, -0.000406f, + -0.000112f, -0.000281f, +0.002422f, -0.000857f, -0.001054f, -0.001038f, +0.001032f, -0.003552f, +0.000130f, -0.000123f, + +0.000585f, -0.000441f, -0.000194f, +0.000345f, +0.000161f, +0.000246f, -0.000330f, +0.001495f, -0.001471f, +0.000444f, + +0.001749f, -0.000134f, +0.000732f, -0.000030f, -0.000611f, +0.000367f, -0.000667f, -0.000051f, +0.000275f, +0.000033f, + +0.000828f, +0.000220f, +0.000291f, +0.000036f, +0.000008f, +0.000373f, -0.000150f, -0.000399f, +0.000708f, -0.000667f, + +0.000220f, +0.000120f, +0.000012f, +0.000447f, +0.000147f, -0.000321f, +0.000160f, +0.000090f, +0.000302f, -0.000356f, + -0.000069f, +0.000187f, +0.000292f, -0.000046f, +0.000138f, -0.000072f, -0.000052f, +0.000112f, -0.000005f, +0.000052f, + +0.000030f, -0.000039f, -0.000255f, -0.000112f, -0.000067f, +0.000066f, +0.000037f, +0.000071f, +0.000000f, -0.000001f, + +0.000135f, +0.000059f, +0.000109f, -0.000038f, -0.000066f, +0.000028f, -0.000103f, +0.000109f, -0.000036f, -0.000000f, + +0.000047f, +0.000004f, -0.000031f, -0.000028f, +0.000065f, +0.000029f + }, + { + +0.000856f, +0.012754f, -0.001544f, -0.000638f, +0.000330f, -0.000016f, -0.000463f, +0.000342f, +0.000043f, -0.000382f, + -0.000409f, +0.000434f, -0.000905f, +0.002921f, -0.008732f, -0.002112f, -0.001756f, -0.000444f, +0.005424f, -0.000629f, + -0.001385f, +0.000106f, +0.002168f, +0.000310f, -0.000650f, -0.004593f, -0.001775f, -0.000241f, +0.000571f, +0.001214f, + +0.002185f, -0.000394f, -0.000308f, +0.000418f, -0.000731f, -0.001085f, -0.000337f, +0.000411f, -0.001017f, +0.000169f, + +0.000205f, +0.000019f, +0.000471f, +0.000031f, +0.000206f, +0.000049f, -0.000555f, +0.000218f, +0.000293f, -0.000128f, + +0.000232f, -0.000127f, -0.000355f, +0.000347f, +0.000336f, -0.000506f, -0.000060f, +0.000241f, -0.000207f, -0.000309f, + +0.000061f, +0.000075f, -0.000588f, +0.000020f, -0.000133f, +0.000121f, -0.000022f, +0.000029f, +0.000009f, -0.000007f, + +0.000082f, -0.000060f, +0.000095f, +0.000022f, -0.000079f, -0.000086f, -0.000081f, -0.000027f, +0.000061f, +0.000070f, + +0.000015f, +0.000105f, -0.000030f, -0.000130f, +0.000046f, -0.000106f, +0.000026f, +0.000059f, -0.000080f, -0.000041f, + -0.000052f, +0.000037f, +0.000006f, -0.000043f, -0.000070f, +0.000035f + }, + { + +0.013853f, +0.019865f, -0.014012f, +0.000902f, +0.000308f, -0.000297f, -0.001086f, -0.000084f, -0.000020f, -0.001373f, + +0.001226f, +0.000366f, -0.000612f, +0.000458f, -0.000167f, +0.000151f, +0.000861f, -0.000815f, +0.000448f, -0.000492f, + +0.000024f, +0.000398f, +0.000195f, +0.000541f, -0.000416f, +0.000034f, -0.000392f, -0.001203f, -0.001204f, -0.000563f, + +0.001464f, +0.000270f, +0.000014f, -0.000088f, +0.000657f, +0.000111f, -0.001343f, +0.000205f, -0.000636f, +0.000331f, + -0.000150f, +0.000943f, -0.000862f, -0.000271f, -0.000018f, +0.000082f, +0.000130f, -0.000375f, +0.000122f, -0.000101f, + +0.000871f, -0.000421f, +0.000307f, +0.000159f, +0.000181f, -0.000473f, +0.000368f, +0.000196f, +0.000136f, -0.000213f, + -0.000323f, -0.000078f, +0.000195f, +0.000118f, +0.000045f, -0.000215f, +0.000112f, +0.000133f, -0.000111f, -0.000175f, + -0.000132f, +0.000077f, +0.000141f, -0.000042f, -0.000013f, -0.000139f, -0.000034f, -0.000018f, +0.000089f, -0.000056f, + -0.000061f, +0.000005f, +0.000009f, -0.000196f, -0.000060f, +0.000041f, +0.000051f, -0.000037f, +0.000080f, -0.000104f, + +0.000039f, +0.000023f, +0.000027f, +0.000029f, -0.000011f, +0.000019f + }, + { + -0.000528f, -0.001467f, +0.001687f, -0.000433f, -0.000129f, +0.000066f, -0.000401f, -0.000344f, -0.000056f, -0.000084f, + -0.000022f, +0.000357f, -0.000443f, +0.003041f, -0.003876f, -0.003176f, -0.002775f, +0.000244f, -0.000904f, +0.004106f, + -0.000116f, -0.000769f, -0.000452f, -0.000903f, -0.001225f, -0.000607f, +0.001136f, +0.001193f, -0.002701f, +0.001563f, + +0.001678f, +0.001465f, +0.000131f, -0.000498f, -0.000394f, +0.000498f, -0.001147f, -0.000104f, -0.000613f, +0.000132f, + +0.000785f, -0.000205f, +0.000118f, -0.000236f, -0.000602f, -0.000404f, +0.000239f, -0.000137f, -0.000401f, +0.000264f, + +0.000068f, -0.000242f, +0.000145f, +0.000351f, +0.000228f, +0.000163f, -0.000083f, +0.000390f, -0.000086f, +0.000335f, + -0.000064f, -0.000119f, -0.000263f, -0.000128f, -0.000124f, -0.000060f, +0.000035f, +0.000314f, -0.000047f, +0.000011f, + -0.000251f, +0.000032f, +0.000027f, -0.000041f, -0.000083f, +0.000129f, +0.000042f, +0.000032f, +0.000017f, +0.000100f, + -0.000066f, +0.000062f, -0.000081f, +0.000081f, +0.000006f, -0.000024f, +0.000114f, -0.000101f, -0.000041f, -0.000014f, + -0.000041f, -0.000093f, -0.000006f, +0.000015f, -0.000024f, -0.000047f + }, + { + -0.004578f, +0.050719f, +0.002927f, +0.004997f, -0.000713f, -0.000112f, -0.001395f, -0.000144f, -0.000663f, -0.000361f, + +0.000687f, +0.000737f, -0.001730f, -0.001638f, +0.000111f, -0.001334f, -0.001592f, -0.000743f, -0.001049f, +0.000508f, + +0.000870f, -0.000350f, -0.000104f, -0.000085f, -0.000045f, -0.000064f, +0.000096f, -0.000297f, +0.000925f, +0.000068f, + +0.000071f, -0.000185f, +0.000062f, +0.000488f, -0.000037f, +0.000678f, +0.000513f, -0.000250f, -0.000712f, +0.000320f, + +0.000070f, +0.000112f, -0.000178f, +0.000325f, -0.000645f, -0.000051f, +0.000272f, -0.000064f, -0.000332f, -0.000113f, + -0.000049f, +0.000611f, +0.000500f, -0.000153f, -0.000156f, +0.000264f, +0.000236f, +0.000142f, +0.000297f, +0.000340f, + -0.000327f, -0.000035f, +0.000094f, +0.000305f, +0.000097f, -0.000029f, -0.000049f, +0.000051f, +0.000168f, +0.000008f, + -0.000021f, -0.000020f, +0.000026f, +0.000098f, +0.000192f, -0.000002f, -0.000253f, +0.000238f, +0.000009f, -0.000007f, + +0.000028f, +0.000071f, -0.000018f, +0.000002f, -0.000059f, +0.000031f, -0.000039f, +0.000066f, +0.000016f, +0.000061f, + -0.000017f, -0.000000f, -0.000053f, -0.000024f, +0.000050f, -0.000057f + }, + { + -0.001209f, +0.005451f, +0.002834f, +0.000094f, +0.000494f, -0.000236f, -0.000489f, -0.001215f, +0.000466f, -0.000015f, + +0.000663f, -0.000902f, +0.000624f, -0.003586f, +0.005456f, +0.001687f, +0.003067f, +0.000267f, +0.003042f, -0.001241f, + +0.000312f, +0.000283f, -0.000179f, -0.001440f, +0.001865f, +0.001778f, -0.001756f, +0.000477f, -0.001100f, +0.000127f, + +0.001414f, +0.001492f, -0.001233f, -0.000132f, -0.000709f, -0.000736f, +0.000443f, -0.000814f, +0.000150f, -0.000199f, + -0.000390f, +0.000482f, -0.000183f, -0.000537f, +0.000026f, +0.000507f, -0.000387f, -0.000258f, +0.000370f, +0.000119f, + -0.000100f, -0.000149f, -0.000433f, -0.000038f, -0.000098f, -0.000002f, -0.000309f, +0.000302f, -0.000068f, -0.000103f, + +0.000118f, +0.000064f, -0.000158f, -0.000150f, -0.000289f, -0.000132f, -0.000047f, -0.000043f, -0.000033f, -0.000013f, + +0.000081f, -0.000024f, -0.000193f, -0.000015f, +0.000068f, +0.000004f, +0.000022f, +0.000030f, -0.000084f, -0.000154f, + +0.000100f, -0.000051f, -0.000135f, -0.000146f, +0.000008f, -0.000046f, +0.000029f, +0.000082f, +0.000032f, -0.000038f, + +0.000013f, -0.000007f, -0.000031f, -0.000019f, -0.000002f, -0.000001f + }, + { + +0.007346f, +0.019813f, -0.022685f, -0.006808f, -0.001453f, +0.001333f, -0.006211f, +0.000085f, -0.000324f, +0.000047f, + +0.001064f, +0.000129f, +0.000309f, +0.000911f, +0.000979f, -0.003440f, +0.001573f, -0.000550f, -0.000474f, +0.000399f, + -0.001039f, -0.000398f, -0.000368f, -0.000071f, -0.000036f, +0.000115f, +0.000786f, +0.000213f, -0.000450f, -0.000065f, + -0.000337f, -0.000260f, -0.000247f, -0.000332f, +0.000970f, -0.000303f, +0.000284f, -0.000081f, +0.000266f, +0.000056f, + +0.000383f, -0.000641f, -0.000039f, -0.000240f, -0.000206f, +0.000636f, +0.000394f, -0.000435f, -0.000409f, -0.000434f, + +0.000488f, -0.000386f, +0.000232f, +0.000680f, -0.000314f, -0.000137f, +0.000109f, +0.000229f, +0.000063f, +0.000253f, + -0.000404f, +0.000213f, -0.000023f, +0.000057f, -0.000111f, -0.000207f, +0.000029f, +0.000066f, -0.000072f, +0.000042f, + +0.000002f, +0.000104f, -0.000080f, +0.000092f, +0.000031f, -0.000005f, +0.000121f, +0.000104f, -0.000048f, +0.000115f, + -0.000156f, -0.000037f, -0.000011f, +0.000061f, -0.000031f, +0.000018f, +0.000141f, +0.000003f, +0.000002f, +0.000076f, + +0.000003f, +0.000070f, -0.000075f, -0.000023f, -0.000058f, +0.000047f + }, + { + -0.000145f, +0.002533f, -0.000283f, -0.000806f, +0.000438f, +0.000357f, -0.000319f, +0.000599f, -0.001825f, -0.000113f, + +0.000028f, +0.001674f, -0.000227f, +0.000598f, +0.000256f, +0.001144f, +0.000051f, -0.004168f, +0.003589f, -0.000354f, + -0.000254f, -0.001797f, -0.000652f, -0.000081f, +0.001036f, -0.001980f, +0.000666f, -0.001303f, -0.000194f, -0.000112f, + -0.000266f, +0.000614f, -0.000731f, +0.000329f, -0.000532f, +0.000482f, -0.000015f, +0.000548f, +0.000052f, -0.000002f, + -0.000142f, -0.000341f, -0.000086f, +0.000174f, -0.000184f, -0.000028f, +0.000188f, +0.000112f, +0.000156f, +0.000833f, + -0.000572f, +0.000164f, -0.000163f, -0.000355f, +0.000215f, -0.000040f, -0.000104f, +0.000199f, +0.000038f, +0.000094f, + +0.000083f, +0.000217f, -0.000017f, -0.000112f, +0.000012f, +0.000012f, -0.000058f, +0.000170f, +0.000207f, -0.000086f, + +0.000059f, -0.000130f, -0.000202f, +0.000016f, +0.000195f, -0.000008f, +0.000017f, -0.000104f, -0.000099f, +0.000042f, + -0.000049f, +0.000034f, +0.000193f, -0.000053f, -0.000044f, -0.000039f, -0.000035f, -0.000042f, +0.000054f, -0.000118f, + +0.000007f, -0.000023f, -0.000056f, +0.000007f, +0.000036f, +0.000078f + }, + { + -0.000221f, -0.013539f, +0.000208f, -0.001975f, +0.000186f, +0.002626f, +0.000917f, -0.000420f, +0.000149f, -0.000095f, + -0.000794f, -0.001354f, +0.001110f, +0.000742f, -0.001280f, +0.000491f, -0.000710f, +0.001053f, +0.000172f, +0.000064f, + -0.000826f, -0.000410f, -0.000142f, +0.000365f, +0.000373f, +0.000129f, -0.000934f, -0.000321f, -0.000887f, +0.000054f, + +0.000640f, -0.000374f, -0.000182f, -0.000568f, +0.000224f, -0.000788f, -0.000942f, -0.000165f, +0.000410f, -0.000102f, + +0.000311f, -0.000394f, -0.000771f, +0.000564f, +0.000370f, +0.000296f, -0.000169f, -0.000367f, +0.000468f, -0.000196f, + +0.000004f, -0.000094f, -0.000369f, +0.000034f, -0.000182f, +0.000074f, -0.000102f, +0.000137f, -0.000037f, -0.000263f, + +0.000118f, -0.000191f, -0.000120f, +0.000141f, +0.000121f, -0.000019f, -0.000058f, +0.000012f, -0.000196f, +0.000011f, + +0.000037f, -0.000149f, +0.000050f, +0.000000f, +0.000042f, +0.000060f, +0.000083f, +0.000027f, +0.000007f, -0.000027f, + -0.000021f, +0.000015f, +0.000104f, +0.000033f, +0.000085f, +0.000096f, +0.000048f, +0.000005f, +0.000013f, -0.000022f, + +0.000032f, -0.000023f, +0.000117f, +0.000058f, -0.000015f, -0.000004f + }, + { + +0.000102f, -0.008310f, -0.000298f, +0.000513f, +0.000387f, -0.000308f, +0.000921f, -0.000818f, -0.000799f, +0.000558f, + -0.000412f, +0.001604f, +0.002718f, -0.013500f, -0.004331f, +0.002408f, -0.000771f, -0.000234f, +0.001909f, +0.001640f, + +0.001860f, +0.000214f, +0.002152f, +0.001357f, +0.001465f, +0.000459f, -0.000887f, -0.001132f, +0.001180f, +0.000448f, + +0.001959f, -0.000353f, -0.000157f, -0.000612f, +0.001261f, +0.000350f, -0.000986f, +0.000297f, -0.000674f, +0.000743f, + +0.000540f, +0.000160f, +0.000130f, -0.000027f, -0.000078f, +0.000351f, -0.000561f, -0.000031f, +0.000147f, -0.000581f, + +0.000326f, -0.000012f, +0.000404f, -0.000154f, +0.000202f, -0.000025f, +0.000426f, -0.000340f, +0.000058f, +0.000133f, + -0.000192f, -0.000078f, +0.000038f, +0.000229f, +0.000068f, -0.000119f, +0.000126f, -0.000072f, -0.000125f, +0.000150f, + -0.000133f, +0.000060f, +0.000047f, -0.000170f, +0.000040f, -0.000024f, +0.000100f, +0.000093f, -0.000130f, -0.000008f, + +0.000077f, -0.000034f, -0.000046f, -0.000008f, -0.000018f, +0.000006f, -0.000057f, +0.000095f, -0.000107f, +0.000059f, + -0.000009f, -0.000114f, +0.000084f, +0.000080f, -0.000093f, +0.000065f + }, + { + -0.001640f, -0.021354f, +0.000699f, -0.005958f, -0.001151f, +0.000300f, +0.000838f, +0.000740f, -0.000379f, +0.000414f, + +0.000161f, +0.002506f, -0.000429f, +0.001463f, +0.004854f, -0.000494f, -0.004472f, -0.000174f, +0.000023f, -0.000544f, + -0.000886f, +0.000007f, +0.001708f, -0.000030f, +0.001959f, +0.000499f, -0.000665f, +0.001986f, +0.000134f, +0.000340f, + -0.000830f, -0.000731f, +0.000107f, -0.000310f, -0.001339f, -0.000546f, +0.000777f, -0.000290f, +0.000013f, -0.000434f, + +0.001371f, -0.000272f, +0.000599f, -0.000044f, +0.000018f, +0.000310f, -0.000305f, -0.000352f, +0.000069f, -0.000019f, + +0.000189f, -0.000141f, +0.000334f, +0.000279f, +0.000044f, -0.000010f, -0.000666f, -0.000109f, -0.000121f, +0.000268f, + -0.000372f, -0.000119f, -0.000040f, -0.000088f, -0.000368f, -0.000001f, -0.000397f, -0.000038f, +0.000090f, -0.000093f, + -0.000026f, +0.000041f, -0.000066f, +0.000087f, -0.000037f, -0.000148f, -0.000175f, +0.000099f, -0.000015f, -0.000150f, + +0.000028f, +0.000053f, +0.000003f, -0.000076f, -0.000014f, +0.000023f, -0.000108f, +0.000117f, +0.000058f, -0.000012f, + -0.000041f, +0.000048f, -0.000071f, -0.000024f, +0.000002f, +0.000042f + }, + { + +0.001033f, -0.001382f, -0.001209f, +0.000457f, -0.000284f, -0.000186f, -0.000082f, -0.002307f, +0.000075f, -0.001596f, + +0.000530f, +0.001858f, -0.000764f, -0.005167f, +0.021334f, +0.002388f, -0.004123f, -0.000995f, -0.000336f, +0.000719f, + -0.002941f, -0.002192f, +0.000956f, -0.001894f, -0.000906f, -0.001124f, +0.001245f, +0.000477f, +0.001045f, +0.000724f, + -0.000007f, +0.001469f, -0.000281f, -0.000908f, +0.000580f, -0.000819f, +0.000554f, +0.000035f, -0.000371f, +0.000114f, + +0.000310f, +0.000849f, +0.001389f, -0.000731f, -0.000500f, +0.000083f, +0.000327f, -0.000391f, +0.000068f, -0.000212f, + +0.000063f, +0.000123f, +0.000402f, -0.000220f, +0.000113f, +0.000070f, +0.000157f, +0.000265f, +0.000050f, +0.000591f, + +0.000314f, +0.000059f, -0.000221f, -0.000083f, +0.000199f, +0.000046f, -0.000071f, -0.000225f, +0.000303f, +0.000168f, + +0.000030f, -0.000045f, +0.000284f, +0.000118f, -0.000012f, +0.000127f, -0.000151f, -0.000122f, +0.000084f, -0.000016f, + -0.000042f, -0.000102f, +0.000017f, -0.000208f, +0.000029f, +0.000045f, +0.000026f, +0.000025f, +0.000015f, -0.000068f, + -0.000015f, -0.000017f, -0.000066f, +0.000083f, +0.000050f, -0.000048f + } + }, + { + { + +0.008357f, +0.023519f, -0.017625f, -0.001137f, +0.000417f, -0.000649f, -0.000029f, +0.001204f, -0.000449f, -0.001154f, + +0.000144f, +0.000064f, +0.000292f, +0.001539f, +0.001927f, +0.001476f, +0.000418f, +0.000810f, -0.000981f, -0.001225f, + +0.000149f, +0.000951f, +0.001006f, -0.000040f, +0.000024f, +0.001098f, -0.000620f, +0.000683f, -0.000291f, -0.000068f, + -0.000353f, +0.000287f, -0.000189f, +0.000433f, -0.000288f, +0.000635f, -0.000448f, -0.000263f, -0.001079f, +0.000517f, + +0.000038f, +0.000024f, +0.000133f, -0.000846f, -0.000553f, -0.000056f, +0.000241f, -0.000147f, +0.000445f, +0.000225f, + +0.000185f, +0.000076f, +0.000105f, +0.000229f, +0.000317f, +0.000151f, -0.000117f, +0.000147f, -0.000196f, -0.000163f, + +0.000152f, +0.000115f, +0.000049f, -0.000304f, -0.000125f, +0.000136f, +0.000061f, +0.000001f, -0.000052f, -0.000051f, + -0.000080f, -0.000053f, -0.000068f, +0.000075f, +0.000084f, -0.000037f, -0.000154f, +0.000021f, -0.000107f, -0.000059f, + -0.000024f, +0.000065f, +0.000026f, -0.000046f, +0.000027f, -0.000100f, -0.000022f, -0.000047f, -0.000017f, -0.000054f, + +0.000026f, -0.000048f, +0.000018f, +0.000007f, +0.000002f, +0.000010f + }, + { + -0.000953f, -0.018630f, -0.000726f, -0.000176f, +0.000408f, -0.000236f, +0.002000f, -0.000566f, +0.000075f, +0.000510f, + +0.001106f, +0.000911f, +0.000054f, +0.000670f, +0.001745f, -0.001067f, +0.001871f, +0.000719f, +0.000695f, -0.000826f, + -0.000669f, -0.001677f, +0.000083f, +0.001949f, +0.001405f, +0.000223f, -0.001284f, +0.001883f, +0.000950f, -0.000199f, + +0.000456f, -0.000615f, +0.000380f, -0.000219f, +0.000446f, +0.000357f, +0.000877f, +0.000321f, +0.001003f, -0.000445f, + -0.000147f, +0.000322f, +0.000609f, -0.000086f, -0.000581f, -0.000105f, +0.000094f, +0.000151f, -0.000065f, +0.000444f, + +0.000312f, -0.000181f, -0.000348f, +0.000159f, +0.000503f, -0.000108f, -0.000076f, +0.000012f, +0.000214f, -0.000123f, + -0.000243f, -0.000174f, +0.000026f, +0.000269f, -0.000130f, +0.000306f, +0.000033f, +0.000004f, +0.000209f, +0.000041f, + -0.000003f, +0.000163f, +0.000038f, -0.000139f, -0.000023f, +0.000087f, +0.000063f, -0.000012f, -0.000092f, -0.000060f, + +0.000130f, -0.000005f, -0.000098f, -0.000068f, -0.000060f, -0.000042f, -0.000046f, +0.000022f, -0.000073f, +0.000029f, + -0.000017f, -0.000050f, -0.000054f, +0.000024f, +0.000036f, -0.000022f + }, + { + +0.004994f, +0.048446f, -0.007700f, -0.000783f, -0.000467f, -0.000142f, +0.000223f, -0.000305f, +0.000759f, -0.000182f, + -0.000818f, -0.000476f, +0.001552f, -0.000553f, +0.001972f, +0.001060f, +0.000735f, +0.000788f, +0.002974f, +0.000995f, + +0.000236f, -0.000242f, -0.000388f, +0.000745f, -0.001068f, -0.000545f, +0.000262f, +0.000893f, +0.000038f, -0.000671f, + +0.001734f, +0.001554f, +0.000417f, +0.000087f, -0.000095f, -0.000646f, -0.000000f, -0.000503f, +0.000453f, +0.000737f, + +0.000634f, -0.000076f, -0.000084f, +0.000242f, -0.000432f, -0.000191f, -0.000519f, -0.000042f, -0.000205f, +0.000300f, + -0.000364f, -0.000190f, +0.000029f, -0.000035f, +0.000016f, +0.000119f, -0.000047f, +0.000037f, +0.000133f, +0.000212f, + -0.000073f, +0.000076f, -0.000337f, +0.000414f, +0.000006f, -0.000127f, -0.000028f, -0.000160f, -0.000146f, +0.000174f, + +0.000149f, -0.000097f, -0.000056f, +0.000077f, +0.000074f, +0.000141f, -0.000097f, -0.000150f, +0.000034f, +0.000089f, + +0.000140f, -0.000007f, +0.000059f, +0.000055f, -0.000095f, +0.000001f, +0.000052f, +0.000087f, -0.000029f, +0.000013f, + +0.000045f, +0.000017f, -0.000040f, -0.000048f, -0.000004f, -0.000040f + }, + { + +0.000874f, +0.011179f, +0.001291f, -0.000247f, -0.000310f, -0.000210f, -0.000111f, -0.000673f, -0.000276f, -0.000233f, + +0.001138f, +0.000458f, +0.000564f, -0.000339f, +0.001430f, -0.001118f, -0.000686f, -0.000956f, -0.000285f, -0.000310f, + +0.000069f, -0.000103f, -0.000574f, +0.000291f, +0.000265f, +0.000814f, -0.000392f, +0.000682f, -0.000579f, +0.000311f, + +0.000108f, +0.000458f, +0.000298f, -0.000328f, +0.000499f, -0.000786f, -0.000068f, +0.000209f, -0.000171f, +0.000238f, + +0.000786f, +0.000180f, -0.000111f, +0.000290f, +0.000473f, -0.000124f, -0.000240f, +0.000072f, +0.000062f, -0.000039f, + -0.000336f, +0.000308f, +0.000130f, +0.000226f, +0.000080f, +0.000023f, +0.000039f, +0.000276f, -0.000096f, +0.000013f, + -0.000077f, +0.000230f, +0.000102f, -0.000055f, -0.000060f, +0.000021f, -0.000055f, +0.000112f, -0.000018f, -0.000033f, + +0.000097f, +0.000188f, -0.000184f, -0.000151f, +0.000029f, +0.000056f, -0.000011f, +0.000014f, +0.000034f, -0.000018f, + -0.000023f, +0.000041f, +0.000021f, -0.000056f, -0.000004f, +0.000019f, -0.000088f, +0.000063f, +0.000029f, -0.000029f, + +0.000021f, +0.000034f, -0.000046f, -0.000031f, +0.000036f, +0.000039f + }, + { + -0.000669f, +0.009371f, +0.003333f, -0.000917f, +0.000266f, -0.000052f, -0.000286f, +0.000313f, -0.000241f, -0.000332f, + -0.000403f, +0.000086f, -0.000527f, +0.002539f, -0.007171f, -0.001318f, -0.001604f, -0.003381f, -0.001743f, +0.001483f, + -0.000185f, -0.000449f, +0.001267f, +0.000527f, -0.001868f, -0.002470f, +0.000152f, -0.000691f, +0.000428f, +0.002009f, + +0.000363f, -0.000565f, -0.000987f, +0.000519f, -0.001089f, -0.001194f, -0.000837f, +0.000213f, -0.000153f, -0.000549f, + +0.000298f, -0.000518f, +0.000215f, +0.000406f, +0.000125f, -0.000074f, +0.000144f, -0.000154f, +0.000208f, -0.000325f, + +0.000102f, +0.000208f, -0.000337f, +0.000466f, +0.000023f, -0.000039f, -0.000294f, +0.000162f, -0.000015f, -0.000343f, + -0.000006f, -0.000074f, -0.000236f, -0.000266f, -0.000226f, +0.000011f, +0.000029f, +0.000137f, +0.000051f, -0.000166f, + +0.000171f, +0.000146f, -0.000046f, +0.000021f, -0.000031f, -0.000180f, -0.000042f, -0.000105f, -0.000100f, -0.000002f, + -0.000001f, +0.000139f, +0.000081f, -0.000131f, +0.000031f, -0.000064f, +0.000016f, +0.000066f, -0.000048f, -0.000089f, + -0.000065f, +0.000010f, +0.000012f, +0.000009f, -0.000086f, -0.000021f + }, + { + -0.001637f, +0.016069f, +0.002868f, +0.002171f, +0.000788f, -0.000044f, -0.001394f, +0.000598f, -0.000108f, -0.001979f, + +0.000418f, +0.000732f, +0.000461f, -0.000477f, +0.001590f, +0.000361f, -0.000655f, -0.001158f, +0.000241f, -0.000263f, + -0.000743f, -0.000246f, +0.000035f, +0.001097f, -0.000102f, -0.000161f, -0.001154f, +0.000007f, -0.000871f, -0.000841f, + +0.000171f, +0.001089f, -0.000324f, -0.000067f, +0.000874f, -0.000279f, -0.001689f, +0.000247f, -0.000033f, +0.000052f, + -0.000573f, +0.000159f, -0.000020f, -0.000161f, +0.000046f, +0.000138f, +0.000108f, +0.000325f, -0.000116f, -0.000087f, + +0.000540f, +0.000028f, -0.000118f, +0.000017f, +0.000459f, -0.000149f, -0.000200f, +0.000033f, -0.000035f, -0.000042f, + +0.000002f, -0.000218f, +0.000052f, +0.000199f, +0.000107f, -0.000134f, -0.000053f, +0.000091f, -0.000045f, -0.000106f, + -0.000049f, +0.000009f, +0.000146f, -0.000004f, -0.000009f, -0.000141f, -0.000170f, +0.000015f, +0.000021f, +0.000016f, + +0.000030f, +0.000076f, +0.000051f, -0.000110f, -0.000145f, -0.000037f, +0.000040f, -0.000105f, +0.000072f, +0.000003f, + -0.000014f, +0.000017f, +0.000013f, +0.000055f, +0.000017f, -0.000009f + }, + { + -0.000304f, -0.005008f, +0.001466f, +0.000328f, +0.000084f, -0.000084f, -0.000419f, -0.000221f, -0.000113f, +0.000151f, + +0.000317f, -0.000152f, +0.000260f, +0.000569f, -0.001042f, -0.001998f, -0.000115f, -0.000642f, +0.000794f, +0.002775f, + -0.000251f, -0.000571f, -0.002822f, +0.000862f, -0.000318f, -0.000189f, +0.000440f, -0.000816f, -0.000846f, +0.000846f, + +0.001489f, +0.000961f, +0.000643f, -0.000718f, -0.001202f, +0.000498f, -0.000465f, -0.000690f, -0.000385f, -0.000242f, + +0.000477f, +0.000112f, +0.000226f, -0.000255f, -0.001006f, -0.000437f, -0.000343f, -0.000172f, +0.000131f, +0.000085f, + -0.000029f, -0.000049f, -0.000152f, +0.000304f, +0.000387f, +0.000024f, -0.000117f, +0.000469f, +0.000035f, +0.000112f, + +0.000037f, -0.000029f, -0.000141f, -0.000207f, -0.000133f, +0.000057f, -0.000166f, +0.000032f, +0.000173f, +0.000185f, + -0.000246f, -0.000077f, +0.000039f, -0.000099f, -0.000220f, -0.000047f, +0.000042f, -0.000033f, -0.000023f, +0.000113f, + +0.000000f, -0.000039f, -0.000052f, +0.000092f, +0.000020f, -0.000028f, +0.000068f, -0.000017f, +0.000028f, +0.000054f, + +0.000051f, +0.000028f, -0.000028f, -0.000028f, -0.000000f, -0.000051f + }, + { + +0.001974f, +0.057382f, -0.006471f, +0.000559f, +0.000752f, -0.000416f, -0.000512f, -0.000646f, -0.000590f, +0.000038f, + -0.000058f, +0.000662f, +0.000039f, -0.001126f, -0.002684f, -0.001088f, -0.000529f, +0.000631f, -0.000774f, -0.000857f, + +0.000973f, +0.000155f, -0.001144f, +0.000093f, +0.000419f, -0.000196f, -0.000048f, -0.000314f, +0.000868f, -0.000164f, + +0.000061f, +0.000325f, +0.000057f, -0.000088f, +0.000602f, +0.000007f, +0.000156f, -0.000161f, -0.001300f, +0.000699f, + -0.000230f, -0.000041f, -0.000339f, +0.000902f, -0.000381f, +0.000439f, -0.000522f, +0.000285f, -0.000072f, -0.000336f, + -0.000381f, +0.000902f, +0.000734f, -0.000044f, -0.000036f, -0.000139f, +0.000091f, +0.000103f, +0.000340f, +0.000325f, + +0.000031f, -0.000132f, -0.000086f, +0.000359f, +0.000247f, +0.000080f, -0.000127f, +0.000055f, +0.000178f, -0.000037f, + -0.000011f, +0.000003f, -0.000048f, -0.000107f, +0.000078f, +0.000147f, -0.000249f, -0.000045f, +0.000031f, -0.000020f, + -0.000017f, +0.000079f, +0.000049f, -0.000061f, -0.000017f, +0.000033f, -0.000105f, +0.000054f, -0.000001f, +0.000049f, + -0.000017f, -0.000040f, -0.000045f, -0.000068f, +0.000009f, -0.000007f + }, + { + +0.000111f, -0.000270f, +0.002141f, +0.000161f, -0.000000f, +0.000065f, -0.000910f, -0.000434f, -0.000029f, +0.000093f, + +0.000451f, -0.000005f, -0.000021f, +0.000557f, +0.001190f, +0.000933f, +0.007823f, +0.000799f, +0.002650f, -0.000611f, + -0.001242f, +0.000949f, -0.000026f, -0.000730f, -0.000249f, +0.000946f, -0.001231f, -0.000751f, -0.000286f, +0.000362f, + +0.001857f, +0.000527f, -0.001155f, -0.000825f, +0.000101f, -0.000366f, -0.000739f, -0.000444f, +0.000121f, +0.000073f, + -0.001214f, +0.000209f, -0.000070f, -0.000460f, -0.000540f, -0.000167f, -0.000122f, +0.000018f, +0.000257f, +0.000102f, + -0.000173f, -0.000366f, -0.000288f, -0.000208f, +0.000099f, +0.000022f, -0.000202f, -0.000026f, -0.000098f, -0.000128f, + +0.000072f, +0.000132f, -0.000008f, +0.000089f, -0.000234f, -0.000144f, +0.000247f, -0.000120f, +0.000118f, -0.000056f, + +0.000137f, +0.000111f, -0.000031f, -0.000122f, -0.000005f, +0.000010f, +0.000112f, -0.000084f, -0.000038f, -0.000132f, + -0.000006f, +0.000094f, -0.000080f, -0.000083f, -0.000102f, +0.000007f, -0.000096f, -0.000018f, +0.000070f, +0.000027f, + -0.000066f, -0.000005f, -0.000013f, -0.000050f, +0.000017f, -0.000030f + }, + { + -0.005420f, +0.018177f, -0.003663f, -0.008976f, +0.000071f, -0.003731f, -0.003986f, +0.001696f, -0.000822f, -0.000581f, + +0.000247f, +0.000362f, +0.000056f, +0.001164f, +0.000286f, -0.000076f, -0.000044f, -0.000395f, -0.000773f, +0.000195f, + -0.000865f, -0.000572f, -0.000534f, +0.000165f, -0.000510f, +0.000152f, +0.000760f, -0.000376f, -0.000046f, -0.000006f, + -0.000750f, -0.000468f, -0.000317f, -0.000930f, +0.000504f, +0.000782f, -0.000119f, -0.000279f, +0.000526f, +0.000013f, + -0.000145f, -0.000434f, -0.000107f, +0.000180f, -0.000019f, -0.000057f, +0.000272f, -0.000067f, -0.000599f, -0.000543f, + +0.000210f, -0.000308f, -0.000315f, +0.000388f, +0.000106f, +0.000046f, +0.000023f, +0.000129f, +0.000130f, +0.000347f, + -0.000205f, +0.000150f, -0.000011f, -0.000104f, +0.000025f, -0.000154f, -0.000021f, +0.000011f, -0.000070f, -0.000053f, + +0.000072f, +0.000009f, -0.000088f, +0.000094f, +0.000048f, +0.000075f, -0.000018f, +0.000091f, +0.000035f, +0.000070f, + +0.000009f, -0.000034f, -0.000085f, +0.000047f, -0.000122f, -0.000077f, +0.000025f, +0.000014f, -0.000048f, +0.000034f, + -0.000034f, +0.000090f, -0.000006f, -0.000064f, -0.000063f, +0.000006f + }, + { + +0.000320f, +0.007325f, -0.003166f, -0.001701f, -0.000517f, -0.000334f, -0.001538f, +0.000945f, -0.000161f, -0.000997f, + -0.000954f, +0.001381f, +0.000195f, -0.000678f, +0.000817f, +0.001660f, -0.001115f, +0.000343f, -0.001587f, +0.002977f, + -0.000063f, -0.001291f, -0.000175f, -0.001077f, -0.000118f, -0.000679f, -0.000091f, -0.000712f, +0.000011f, +0.000621f, + -0.000072f, +0.000072f, +0.000076f, +0.000113f, -0.000708f, +0.000989f, +0.000346f, +0.000670f, -0.000275f, -0.000008f, + -0.000077f, +0.000063f, -0.000140f, +0.000114f, -0.000178f, -0.000115f, +0.000150f, -0.000004f, +0.000368f, -0.000186f, + -0.000226f, +0.000156f, +0.000154f, -0.000165f, +0.000248f, +0.000009f, -0.000021f, -0.000051f, +0.000074f, +0.000092f, + -0.000058f, +0.000145f, +0.000064f, -0.000068f, -0.000131f, +0.000078f, -0.000047f, -0.000014f, +0.000146f, -0.000015f, + +0.000081f, -0.000086f, -0.000119f, -0.000024f, +0.000105f, +0.000078f, +0.000072f, +0.000068f, -0.000116f, -0.000025f, + +0.000008f, +0.000010f, +0.000111f, +0.000073f, +0.000003f, -0.000040f, +0.000049f, +0.000001f, +0.000069f, -0.000029f, + -0.000029f, +0.000013f, -0.000034f, +0.000024f, -0.000021f, +0.000033f + }, + { + -0.000500f, -0.015482f, +0.001822f, +0.001892f, -0.001537f, +0.003260f, +0.002197f, -0.000456f, +0.000079f, -0.000731f, + +0.000322f, -0.000090f, +0.000200f, +0.001137f, -0.000812f, +0.000163f, -0.000612f, +0.000570f, -0.000084f, +0.000157f, + -0.000552f, -0.001120f, +0.000525f, -0.000483f, +0.000201f, +0.000692f, -0.000746f, -0.000827f, -0.000363f, -0.000085f, + +0.000086f, +0.000016f, +0.000463f, -0.000863f, -0.000203f, +0.000339f, -0.000248f, +0.000099f, +0.000000f, +0.000025f, + -0.000207f, -0.000205f, -0.000139f, +0.000306f, +0.000188f, -0.000054f, +0.000184f, -0.000083f, +0.000419f, +0.000006f, + -0.000451f, -0.000306f, -0.000067f, -0.000055f, +0.000005f, +0.000101f, -0.000143f, +0.000140f, +0.000172f, -0.000296f, + +0.000024f, -0.000000f, -0.000013f, -0.000103f, +0.000147f, -0.000011f, +0.000015f, -0.000024f, -0.000005f, -0.000195f, + +0.000016f, -0.000081f, -0.000002f, -0.000024f, -0.000019f, +0.000050f, +0.000083f, +0.000088f, +0.000094f, -0.000011f, + -0.000042f, -0.000094f, +0.000017f, +0.000103f, +0.000019f, +0.000133f, +0.000029f, +0.000019f, +0.000014f, -0.000096f, + -0.000004f, -0.000065f, +0.000036f, +0.000058f, +0.000017f, -0.000017f + }, + { + -0.000014f, -0.007140f, -0.001277f, +0.000089f, +0.000980f, -0.000059f, +0.000468f, -0.000072f, -0.000573f, -0.000690f, + +0.000128f, +0.000470f, -0.003230f, -0.001664f, -0.004505f, -0.000054f, +0.002577f, -0.000171f, +0.001057f, +0.000802f, + +0.003660f, +0.000884f, +0.000736f, +0.001135f, +0.002498f, -0.000050f, -0.000835f, -0.001062f, +0.002006f, -0.000117f, + +0.001562f, -0.000331f, -0.000792f, +0.000786f, +0.000799f, +0.000615f, -0.000813f, +0.000001f, -0.000353f, +0.000271f, + +0.000597f, -0.000520f, +0.000408f, -0.000089f, +0.000243f, +0.000359f, -0.000347f, -0.000254f, -0.000162f, +0.000081f, + -0.000211f, -0.000203f, +0.000340f, +0.000004f, -0.000178f, -0.000029f, +0.000342f, -0.000149f, +0.000020f, +0.000097f, + +0.000126f, -0.000329f, +0.000022f, +0.000133f, +0.000157f, +0.000032f, +0.000055f, +0.000043f, -0.000065f, -0.000018f, + -0.000067f, +0.000084f, +0.000026f, -0.000124f, -0.000138f, -0.000104f, -0.000001f, +0.000024f, -0.000008f, +0.000023f, + +0.000081f, +0.000019f, +0.000016f, +0.000075f, -0.000002f, +0.000030f, -0.000092f, +0.000050f, +0.000032f, -0.000044f, + +0.000018f, -0.000084f, -0.000045f, +0.000063f, -0.000056f, -0.000020f + }, + { + -0.002022f, -0.013450f, -0.002255f, -0.007557f, +0.000849f, +0.002127f, -0.000441f, -0.000208f, -0.000901f, +0.000476f, + -0.000055f, +0.001554f, -0.000556f, +0.001477f, +0.005296f, +0.000492f, -0.002273f, -0.000368f, -0.000698f, -0.000354f, + +0.000042f, -0.000618f, +0.000816f, +0.000858f, +0.000934f, +0.001241f, +0.000140f, +0.000540f, -0.000378f, +0.000448f, + -0.000691f, +0.000550f, -0.000449f, -0.000408f, -0.000962f, -0.000263f, +0.000491f, -0.000198f, +0.000106f, -0.000443f, + +0.000792f, +0.000131f, +0.000272f, +0.000176f, +0.000268f, +0.000328f, +0.000025f, -0.000631f, +0.000341f, +0.000176f, + +0.000047f, +0.000166f, -0.000010f, +0.000221f, +0.000051f, +0.000074f, -0.000251f, -0.000367f, +0.000191f, +0.000062f, + -0.000250f, +0.000051f, -0.000144f, +0.000022f, -0.000140f, -0.000001f, -0.000289f, -0.000128f, -0.000060f, +0.000039f, + -0.000090f, +0.000074f, -0.000066f, -0.000044f, -0.000012f, -0.000040f, -0.000174f, +0.000070f, +0.000077f, +0.000002f, + -0.000017f, +0.000033f, +0.000150f, -0.000004f, -0.000019f, +0.000120f, -0.000049f, -0.000061f, +0.000034f, -0.000002f, + -0.000027f, +0.000091f, -0.000014f, +0.000003f, -0.000020f, +0.000029f + }, + { + -0.000655f, -0.000848f, +0.002192f, +0.000043f, -0.000529f, -0.000164f, +0.000187f, -0.001634f, -0.001212f, -0.000784f, + +0.000274f, +0.001277f, +0.000666f, +0.006730f, -0.000860f, +0.001389f, +0.000904f, -0.002206f, +0.000893f, -0.001763f, + -0.000776f, -0.000747f, -0.000082f, -0.003583f, -0.000928f, +0.000128f, +0.001449f, +0.000868f, -0.000764f, +0.000978f, + +0.001363f, +0.000593f, -0.000421f, +0.000086f, +0.000537f, -0.001455f, +0.000393f, +0.000690f, -0.000590f, +0.000465f, + +0.000117f, +0.000403f, +0.000433f, -0.000401f, -0.000210f, +0.000084f, -0.000101f, +0.000035f, -0.000158f, -0.000223f, + +0.000076f, +0.000198f, -0.000049f, -0.000118f, +0.000292f, +0.000087f, +0.000119f, +0.000051f, +0.000118f, +0.000141f, + +0.000112f, +0.000155f, -0.000382f, -0.000085f, +0.000061f, +0.000147f, +0.000119f, -0.000149f, +0.000140f, +0.000082f, + +0.000214f, -0.000087f, +0.000002f, +0.000110f, -0.000112f, +0.000119f, -0.000101f, -0.000204f, -0.000001f, +0.000009f, + +0.000067f, +0.000015f, +0.000111f, -0.000166f, +0.000003f, +0.000000f, -0.000013f, +0.000075f, +0.000027f, -0.000050f, + +0.000030f, +0.000010f, -0.000016f, -0.000016f, +0.000013f, +0.000015f + } + }, + { + { + -0.004707f, +0.058937f, +0.022511f, +0.000669f, -0.000764f, -0.000110f, +0.000627f, -0.000254f, -0.000865f, -0.000053f, + -0.000523f, -0.000227f, +0.000719f, +0.000867f, +0.000874f, -0.000867f, -0.000538f, +0.000072f, +0.000420f, -0.001897f, + -0.000173f, +0.000090f, +0.000611f, +0.000111f, +0.000321f, +0.000518f, -0.000259f, +0.000946f, +0.000564f, +0.000220f, + -0.000670f, -0.000139f, -0.000937f, +0.000306f, -0.000438f, +0.000743f, -0.000684f, +0.000386f, -0.001135f, -0.000009f, + -0.000124f, -0.000051f, +0.000179f, -0.000205f, +0.000051f, -0.000048f, -0.000057f, +0.000006f, +0.000330f, +0.000002f, + -0.000012f, -0.000092f, -0.000030f, +0.000130f, +0.000080f, +0.000057f, -0.000041f, +0.000207f, +0.000034f, +0.000098f, + +0.000013f, +0.000091f, +0.000095f, +0.000151f, +0.000004f, +0.000198f, +0.000101f, -0.000224f, +0.000047f, +0.000002f, + +0.000014f, +0.000102f, -0.000024f, -0.000081f, +0.000022f, +0.000189f, +0.000011f, -0.000181f, +0.000104f, -0.000062f, + -0.000054f, -0.000094f, -0.000022f, -0.000002f, -0.000008f, +0.000104f, -0.000115f, +0.000023f, +0.000002f, -0.000054f, + -0.000037f, -0.000006f, -0.000027f, +0.000028f, +0.000022f, +0.000018f + }, + { + +0.000175f, -0.007841f, +0.004510f, +0.000042f, -0.001267f, -0.000848f, +0.000881f, -0.000519f, -0.000652f, -0.000622f, + -0.001328f, -0.000048f, -0.000881f, -0.000216f, -0.000902f, -0.002376f, +0.002738f, -0.000972f, -0.001564f, +0.000335f, + -0.000591f, -0.000890f, +0.000358f, +0.000810f, +0.000854f, +0.000305f, +0.000188f, +0.000685f, +0.000160f, +0.000857f, + +0.001259f, -0.000324f, -0.000293f, -0.001119f, +0.000486f, -0.000687f, +0.000431f, -0.000027f, +0.000436f, -0.000096f, + +0.000507f, +0.000013f, +0.000410f, -0.000272f, +0.000250f, +0.000028f, +0.000036f, -0.000133f, -0.000121f, +0.000106f, + -0.000014f, +0.000209f, -0.000353f, -0.000084f, -0.000105f, +0.000256f, +0.000115f, +0.000000f, +0.000073f, +0.000059f, + -0.000065f, -0.000058f, -0.000094f, +0.000175f, -0.000133f, -0.000020f, +0.000089f, -0.000202f, +0.000033f, -0.000088f, + +0.000019f, -0.000039f, +0.000067f, +0.000084f, +0.000029f, -0.000151f, +0.000020f, +0.000048f, +0.000065f, -0.000013f, + -0.000038f, +0.000074f, +0.000065f, -0.000037f, +0.000025f, -0.000021f, -0.000070f, +0.000023f, +0.000046f, -0.000123f, + +0.000047f, +0.000039f, -0.000015f, -0.000056f, -0.000059f, -0.000013f + }, + { + -0.004174f, +0.040176f, -0.000935f, +0.003513f, -0.000235f, +0.000460f, +0.000317f, -0.000354f, +0.000387f, +0.000137f, + -0.000082f, -0.000748f, -0.000206f, -0.000484f, -0.000180f, -0.000469f, -0.001413f, -0.000497f, -0.000407f, -0.000008f, + +0.000173f, -0.000033f, -0.001120f, +0.000680f, -0.000483f, -0.000600f, -0.000280f, -0.000013f, +0.000105f, -0.000301f, + +0.000927f, +0.001023f, -0.000331f, -0.000588f, -0.000155f, +0.000666f, +0.000540f, -0.000335f, -0.000009f, +0.000227f, + +0.000298f, -0.000106f, +0.000267f, +0.000039f, -0.000184f, -0.000196f, -0.000473f, +0.000024f, -0.000255f, +0.000175f, + +0.000120f, -0.000284f, -0.000299f, +0.000105f, -0.000269f, -0.000066f, +0.000023f, -0.000097f, +0.000018f, +0.000127f, + +0.000018f, -0.000202f, -0.000271f, +0.000138f, +0.000135f, -0.000108f, -0.000092f, -0.000133f, -0.000008f, -0.000051f, + +0.000061f, +0.000091f, -0.000135f, +0.000007f, +0.000031f, -0.000041f, +0.000074f, +0.000085f, -0.000087f, +0.000021f, + +0.000117f, -0.000018f, -0.000058f, +0.000122f, +0.000056f, -0.000069f, -0.000029f, -0.000058f, +0.000044f, -0.000003f, + -0.000039f, +0.000031f, +0.000034f, -0.000017f, +0.000026f, +0.000021f + }, + { + -0.003704f, -0.009407f, -0.006874f, -0.000463f, +0.000710f, +0.000011f, -0.000096f, -0.000023f, -0.000225f, -0.000405f, + +0.000804f, +0.000366f, -0.000761f, -0.001341f, +0.001635f, +0.000684f, -0.000155f, -0.001145f, -0.000077f, -0.000060f, + -0.000058f, +0.000217f, -0.000441f, +0.000316f, -0.000309f, +0.000270f, +0.000561f, +0.000410f, +0.000026f, -0.000514f, + -0.000733f, +0.000583f, +0.000357f, -0.000187f, +0.000945f, -0.001002f, +0.000279f, -0.000492f, -0.000099f, -0.000136f, + -0.000066f, +0.000186f, +0.000128f, -0.000033f, +0.000274f, +0.000102f, -0.000076f, +0.000160f, -0.000031f, +0.000570f, + -0.000331f, -0.000128f, +0.000169f, -0.000300f, -0.000186f, +0.000076f, +0.000014f, +0.000141f, -0.000422f, +0.000138f, + +0.000042f, +0.000137f, -0.000179f, +0.000176f, -0.000169f, -0.000053f, +0.000074f, -0.000189f, +0.000081f, +0.000005f, + -0.000027f, -0.000001f, +0.000121f, +0.000054f, +0.000096f, +0.000087f, -0.000042f, -0.000050f, +0.000032f, +0.000040f, + -0.000115f, -0.000060f, -0.000109f, +0.000055f, +0.000018f, -0.000003f, +0.000009f, -0.000072f, +0.000089f, +0.000034f, + -0.000011f, -0.000025f, -0.000004f, +0.000009f, -0.000040f, -0.000008f + }, + { + +0.000721f, +0.003737f, -0.000268f, +0.000557f, -0.000364f, +0.000020f, +0.000495f, +0.000498f, -0.000364f, -0.000289f, + +0.000004f, +0.000099f, -0.000326f, +0.000106f, -0.008274f, +0.000707f, -0.000319f, +0.001167f, -0.006965f, -0.000807f, + +0.000265f, +0.001910f, -0.000130f, -0.001585f, -0.001092f, -0.001420f, +0.002151f, -0.001024f, -0.000329f, +0.000541f, + -0.000635f, -0.000529f, -0.000421f, +0.000594f, -0.000704f, -0.000899f, -0.000721f, +0.000227f, +0.000615f, -0.000329f, + -0.000219f, -0.000158f, +0.000200f, +0.000060f, +0.000125f, +0.000060f, -0.000014f, -0.000096f, +0.000045f, -0.000458f, + -0.000263f, +0.000066f, +0.000084f, +0.000117f, -0.000098f, +0.000292f, -0.000097f, -0.000049f, +0.000075f, +0.000005f, + +0.000176f, +0.000040f, -0.000019f, +0.000008f, -0.000082f, -0.000086f, -0.000012f, +0.000106f, +0.000130f, -0.000132f, + -0.000053f, +0.000154f, -0.000013f, -0.000022f, +0.000033f, +0.000005f, -0.000040f, -0.000014f, -0.000030f, -0.000127f, + -0.000019f, -0.000078f, +0.000077f, +0.000091f, -0.000043f, +0.000042f, -0.000034f, -0.000007f, +0.000030f, -0.000041f, + -0.000030f, -0.000013f, -0.000042f, +0.000025f, +0.000040f, -0.000020f + }, + { + -0.003327f, -0.005603f, -0.007827f, +0.001445f, -0.000128f, -0.000097f, +0.000582f, -0.000464f, -0.000001f, +0.000601f, + -0.000960f, -0.000252f, +0.000377f, -0.000871f, +0.000557f, -0.000606f, -0.000193f, -0.001055f, -0.000748f, +0.000379f, + +0.000265f, -0.000870f, -0.000964f, +0.000469f, +0.000043f, +0.000100f, -0.000637f, +0.000302f, +0.000712f, +0.000079f, + -0.001167f, +0.000058f, +0.000200f, +0.000249f, +0.000314f, -0.000208f, -0.001007f, +0.000611f, +0.000202f, +0.000380f, + -0.000004f, +0.000136f, +0.000291f, -0.000435f, -0.000091f, +0.000520f, +0.000355f, +0.000744f, +0.000344f, -0.000041f, + -0.000124f, +0.000291f, +0.000038f, +0.000075f, +0.000019f, +0.000245f, -0.000162f, -0.000165f, -0.000163f, +0.000127f, + +0.000134f, -0.000035f, -0.000085f, -0.000154f, +0.000044f, +0.000024f, +0.000007f, +0.000020f, +0.000128f, +0.000087f, + +0.000029f, -0.000031f, -0.000103f, +0.000106f, -0.000002f, +0.000083f, -0.000073f, -0.000038f, -0.000049f, +0.000012f, + -0.000005f, -0.000009f, +0.000059f, +0.000160f, -0.000025f, -0.000013f, -0.000020f, +0.000006f, -0.000109f, +0.000113f, + -0.000001f, -0.000039f, -0.000032f, -0.000025f, +0.000088f, -0.000003f + }, + { + +0.000740f, -0.002593f, -0.001796f, +0.000324f, +0.000153f, +0.000047f, -0.000171f, +0.000295f, -0.000193f, -0.000055f, + +0.000212f, -0.000489f, -0.000817f, -0.002399f, -0.001053f, +0.001626f, +0.005019f, +0.000430f, -0.001328f, +0.000448f, + +0.000466f, +0.000087f, -0.003075f, -0.001164f, -0.000978f, +0.000123f, +0.001185f, -0.001889f, -0.000479f, -0.000147f, + -0.000014f, -0.000797f, +0.000303f, +0.000601f, -0.001347f, -0.000015f, -0.000264f, -0.000475f, +0.000260f, +0.000677f, + -0.000267f, -0.000355f, +0.000690f, -0.000231f, -0.000365f, -0.000045f, -0.000366f, -0.000178f, +0.000217f, +0.000062f, + +0.000099f, +0.000042f, -0.000110f, -0.000122f, -0.000036f, -0.000066f, -0.000131f, -0.000060f, -0.000144f, -0.000020f, + +0.000050f, +0.000031f, +0.000152f, -0.000090f, -0.000051f, +0.000201f, +0.000045f, -0.000048f, -0.000175f, +0.000015f, + +0.000057f, +0.000046f, -0.000093f, -0.000047f, -0.000046f, -0.000068f, +0.000073f, -0.000071f, -0.000075f, -0.000010f, + +0.000101f, -0.000042f, +0.000007f, +0.000025f, +0.000020f, +0.000006f, -0.000031f, +0.000041f, +0.000006f, -0.000023f, + +0.000072f, +0.000068f, +0.000068f, -0.000075f, +0.000041f, +0.000028f + }, + { + -0.001037f, +0.058817f, +0.003137f, -0.001640f, -0.000767f, -0.000215f, -0.000389f, -0.000010f, +0.000088f, +0.000629f, + -0.000408f, -0.000629f, +0.001288f, +0.000973f, -0.001299f, +0.000374f, +0.001175f, +0.000447f, +0.000818f, -0.000054f, + -0.000226f, +0.000473f, -0.000564f, -0.000582f, -0.000088f, +0.000135f, +0.000355f, -0.000500f, -0.000541f, -0.000248f, + +0.000013f, +0.000086f, +0.000676f, -0.000377f, +0.000675f, +0.000176f, -0.000372f, +0.000488f, -0.000650f, +0.000125f, + -0.000194f, -0.000160f, -0.000218f, +0.000693f, -0.000087f, +0.000160f, -0.000527f, +0.000090f, +0.000064f, -0.000311f, + -0.000621f, -0.000214f, -0.000023f, +0.000083f, -0.000012f, -0.000016f, -0.000023f, -0.000215f, -0.000182f, +0.000130f, + +0.000196f, +0.000088f, -0.000078f, +0.000077f, -0.000065f, +0.000076f, -0.000139f, +0.000056f, -0.000002f, +0.000028f, + +0.000052f, -0.000087f, +0.000063f, -0.000074f, -0.000194f, +0.000048f, +0.000111f, -0.000253f, -0.000093f, +0.000091f, + -0.000100f, -0.000033f, +0.000010f, -0.000041f, +0.000002f, +0.000018f, -0.000013f, +0.000018f, +0.000011f, -0.000014f, + -0.000047f, +0.000043f, +0.000021f, -0.000034f, -0.000042f, -0.000013f + }, + { + +0.000953f, -0.000575f, -0.004693f, +0.000408f, -0.000717f, +0.000129f, +0.000162f, +0.000981f, -0.000192f, -0.000125f, + +0.000099f, +0.000120f, +0.000329f, +0.002134f, +0.000708f, -0.001871f, +0.003676f, -0.000643f, +0.001230f, -0.001640f, + -0.001989f, +0.001839f, -0.000735f, +0.000176f, -0.001277f, -0.000765f, +0.000899f, -0.002506f, +0.000282f, -0.000682f, + -0.000382f, +0.000573f, -0.000824f, -0.000320f, +0.000241f, -0.001155f, -0.000605f, +0.000454f, -0.000110f, +0.000665f, + -0.000436f, -0.000236f, -0.000061f, -0.000096f, -0.000413f, -0.000463f, -0.000090f, -0.000002f, -0.000018f, -0.000265f, + -0.000083f, -0.000104f, +0.000166f, +0.000039f, -0.000071f, -0.000044f, +0.000240f, -0.000136f, -0.000220f, -0.000267f, + -0.000046f, -0.000049f, -0.000006f, +0.000087f, +0.000026f, +0.000068f, +0.000302f, -0.000001f, +0.000026f, -0.000190f, + -0.000019f, -0.000019f, +0.000087f, +0.000165f, -0.000027f, -0.000086f, +0.000080f, +0.000000f, -0.000017f, +0.000045f, + -0.000079f, -0.000001f, +0.000063f, +0.000042f, -0.000001f, +0.000061f, -0.000038f, -0.000135f, -0.000006f, +0.000021f, + -0.000035f, -0.000066f, +0.000036f, +0.000018f, -0.000018f, -0.000002f + }, + { + +0.004197f, +0.029251f, +0.009512f, -0.001307f, +0.001805f, +0.000137f, +0.001139f, +0.000699f, -0.000134f, -0.000427f, + -0.000536f, +0.000233f, -0.000857f, -0.000056f, +0.001656f, -0.000158f, +0.001234f, +0.000380f, -0.001879f, +0.000230f, + +0.000799f, -0.000384f, +0.000014f, +0.000690f, +0.000350f, -0.000133f, -0.000322f, -0.000600f, -0.000155f, +0.000272f, + -0.000057f, -0.000233f, +0.000477f, -0.000492f, -0.000352f, +0.000256f, -0.000479f, -0.000101f, -0.000187f, -0.000071f, + -0.000478f, -0.000111f, -0.000039f, +0.000276f, +0.000416f, -0.000368f, -0.000493f, +0.000023f, +0.000051f, -0.000197f, + -0.000204f, +0.000199f, -0.000060f, -0.000298f, +0.000294f, +0.000407f, -0.000001f, -0.000294f, +0.000066f, +0.000055f, + +0.000224f, +0.000186f, -0.000009f, +0.000048f, +0.000013f, +0.000068f, -0.000037f, -0.000037f, +0.000060f, -0.000144f, + -0.000055f, -0.000048f, +0.000045f, -0.000032f, +0.000041f, -0.000023f, -0.000001f, -0.000089f, +0.000123f, -0.000113f, + +0.000033f, +0.000114f, +0.000012f, -0.000035f, +0.000023f, +0.000002f, -0.000077f, -0.000003f, -0.000018f, -0.000086f, + +0.000000f, -0.000055f, +0.000063f, -0.000007f, +0.000024f, -0.000056f + }, + { + -0.000496f, +0.008855f, +0.001152f, -0.001237f, -0.000204f, -0.000110f, -0.000701f, +0.001240f, -0.000223f, -0.000635f, + -0.001561f, -0.000526f, +0.000062f, -0.001353f, +0.000661f, -0.001457f, -0.002901f, +0.002521f, -0.002721f, -0.001698f, + +0.000409f, -0.000366f, +0.001020f, -0.000132f, +0.000363f, +0.000755f, -0.000716f, -0.000320f, -0.000066f, +0.000452f, + +0.000067f, +0.000149f, +0.000211f, -0.000119f, +0.000119f, -0.000155f, -0.000262f, +0.000610f, -0.000170f, +0.000417f, + -0.000057f, +0.000437f, +0.000188f, -0.000002f, -0.000050f, +0.000198f, -0.000022f, +0.000031f, +0.000059f, -0.000319f, + +0.000070f, +0.000047f, +0.000015f, -0.000178f, +0.000256f, +0.000078f, +0.000169f, -0.000057f, -0.000065f, +0.000115f, + -0.000072f, -0.000302f, +0.000023f, +0.000142f, +0.000048f, -0.000127f, +0.000058f, +0.000007f, -0.000069f, -0.000060f, + +0.000031f, -0.000007f, -0.000022f, +0.000023f, -0.000051f, -0.000002f, -0.000040f, +0.000090f, +0.000147f, -0.000079f, + +0.000008f, +0.000100f, -0.000090f, -0.000031f, +0.000083f, +0.000066f, +0.000029f, +0.000076f, -0.000056f, +0.000084f, + +0.000002f, +0.000012f, +0.000034f, +0.000008f, -0.000003f, -0.000078f + }, + { + +0.001465f, -0.014193f, +0.000742f, +0.000715f, -0.000039f, -0.000133f, +0.000975f, -0.000605f, +0.000250f, +0.000389f, + -0.000424f, +0.001184f, -0.000152f, -0.000342f, -0.000972f, +0.000041f, -0.000577f, -0.000368f, +0.000237f, -0.000286f, + +0.000946f, -0.000679f, +0.000633f, -0.000590f, +0.000515f, -0.000383f, +0.000037f, -0.000850f, +0.000702f, -0.000690f, + -0.000249f, -0.000358f, +0.000197f, -0.000155f, -0.000968f, +0.000046f, +0.000062f, +0.000052f, +0.000298f, -0.000192f, + +0.000192f, +0.000083f, +0.000322f, -0.000188f, -0.000260f, -0.000230f, +0.000323f, +0.000045f, +0.000306f, +0.000187f, + -0.000202f, -0.000416f, +0.000200f, -0.000084f, +0.000122f, -0.000063f, -0.000139f, +0.000054f, -0.000127f, +0.000142f, + +0.000058f, -0.000016f, +0.000078f, -0.000024f, -0.000148f, -0.000035f, +0.000021f, -0.000126f, +0.000204f, +0.000029f, + -0.000069f, +0.000066f, +0.000010f, +0.000012f, -0.000030f, -0.000067f, -0.000015f, +0.000006f, +0.000058f, +0.000040f, + -0.000025f, -0.000017f, -0.000098f, +0.000000f, +0.000000f, -0.000087f, +0.000087f, -0.000004f, +0.000017f, +0.000028f, + -0.000035f, -0.000003f, -0.000062f, -0.000041f, +0.000047f, -0.000021f + }, + { + -0.000167f, -0.003570f, +0.001010f, -0.000461f, -0.000397f, +0.000199f, -0.000607f, +0.000060f, -0.000587f, -0.000622f, + -0.000005f, -0.001225f, +0.003481f, +0.009182f, -0.000596f, -0.002417f, +0.001316f, -0.000443f, -0.000403f, +0.000190f, + -0.000874f, +0.002345f, -0.000153f, -0.002049f, +0.000319f, +0.000299f, +0.001022f, +0.000679f, +0.001407f, -0.000402f, + -0.001543f, +0.000043f, -0.000306f, +0.000490f, +0.000110f, +0.000112f, +0.000434f, -0.000315f, +0.000253f, -0.000499f, + +0.000161f, -0.000286f, +0.000592f, -0.000423f, +0.000506f, +0.000512f, +0.000142f, -0.000086f, -0.000177f, +0.000132f, + -0.000218f, -0.000118f, -0.000209f, +0.000032f, -0.000062f, -0.000233f, -0.000324f, +0.000017f, -0.000082f, -0.000105f, + +0.000290f, +0.000220f, -0.000095f, -0.000114f, -0.000087f, +0.000346f, -0.000096f, -0.000024f, +0.000074f, -0.000088f, + -0.000027f, +0.000057f, +0.000107f, -0.000034f, -0.000002f, -0.000057f, -0.000116f, -0.000057f, +0.000066f, -0.000002f, + -0.000075f, +0.000064f, +0.000105f, +0.000026f, +0.000027f, +0.000026f, +0.000063f, -0.000079f, +0.000005f, -0.000006f, + +0.000064f, +0.000107f, -0.000097f, -0.000100f, +0.000074f, -0.000030f + }, + { + +0.002737f, -0.003649f, +0.003181f, -0.001882f, +0.001220f, +0.001662f, -0.000176f, +0.000082f, +0.000417f, -0.000551f, + -0.000922f, +0.000321f, +0.000175f, +0.000113f, +0.001001f, -0.000947f, +0.000498f, +0.000030f, -0.000314f, -0.000651f, + +0.000552f, +0.000578f, -0.000577f, +0.000708f, -0.001005f, +0.000370f, +0.000225f, +0.000649f, -0.000031f, -0.000575f, + +0.000369f, +0.000614f, -0.000430f, -0.000034f, +0.000117f, -0.000349f, -0.000080f, -0.000107f, +0.000293f, +0.000411f, + -0.000127f, -0.000319f, -0.000193f, -0.000263f, +0.000013f, +0.000167f, +0.000219f, -0.000121f, +0.000330f, +0.000286f, + -0.000527f, +0.000182f, -0.000309f, -0.000318f, -0.000229f, +0.000134f, +0.000275f, +0.000077f, +0.000106f, +0.000021f, + -0.000217f, +0.000170f, -0.000030f, +0.000078f, +0.000127f, -0.000001f, +0.000158f, -0.000037f, -0.000090f, -0.000019f, + +0.000068f, +0.000000f, +0.000022f, -0.000156f, -0.000018f, +0.000019f, +0.000041f, -0.000062f, -0.000023f, +0.000074f, + +0.000028f, -0.000071f, +0.000021f, +0.000058f, +0.000020f, +0.000027f, +0.000138f, -0.000062f, -0.000080f, +0.000015f, + +0.000003f, -0.000037f, +0.000029f, +0.000004f, +0.000033f, -0.000036f + }, + { + +0.000357f, -0.002055f, +0.001412f, +0.000539f, -0.000177f, -0.000124f, +0.000014f, -0.000186f, -0.000838f, -0.000213f, + +0.000185f, -0.000558f, +0.000239f, +0.005144f, -0.009880f, +0.002062f, +0.003274f, -0.000044f, +0.001272f, +0.000436f, + +0.002802f, +0.001433f, -0.000349f, -0.000841f, +0.001228f, +0.000275f, +0.001224f, +0.000821f, -0.001555f, +0.001320f, + +0.000970f, -0.000273f, -0.000091f, -0.000063f, +0.000367f, -0.000437f, +0.000195f, -0.000415f, +0.000139f, +0.001076f, + +0.000140f, -0.000574f, -0.000247f, -0.000293f, +0.000659f, +0.000020f, -0.000081f, +0.000182f, -0.000044f, -0.000211f, + +0.000124f, +0.000132f, -0.000215f, -0.000384f, +0.000010f, +0.000039f, +0.000086f, -0.000178f, +0.000279f, +0.000012f, + -0.000493f, -0.000072f, -0.000090f, +0.000061f, -0.000096f, +0.000006f, -0.000109f, +0.000272f, -0.000132f, -0.000032f, + +0.000119f, +0.000082f, -0.000155f, +0.000017f, -0.000007f, -0.000088f, +0.000111f, -0.000020f, -0.000024f, -0.000034f, + +0.000008f, +0.000073f, +0.000077f, +0.000115f, -0.000071f, -0.000003f, -0.000015f, -0.000030f, -0.000003f, +0.000057f, + +0.000029f, -0.000045f, +0.000061f, -0.000004f, -0.000028f, +0.000036f + } + }, + { + { + +0.007374f, +0.086748f, +0.000977f, +0.001042f, -0.001523f, +0.000011f, +0.000223f, -0.001085f, -0.000142f, +0.000474f, + -0.000186f, -0.000027f, +0.000691f, +0.001356f, -0.001532f, -0.000216f, -0.000568f, -0.000295f, +0.000056f, -0.000386f, + +0.000402f, -0.000840f, +0.000202f, +0.000053f, +0.000346f, +0.000182f, +0.000130f, +0.000236f, +0.001021f, +0.000581f, + +0.000296f, -0.000648f, -0.000562f, -0.000073f, +0.000292f, +0.000094f, +0.000151f, +0.000225f, -0.000583f, -0.000496f, + -0.000134f, -0.000087f, -0.000014f, +0.000164f, +0.000403f, -0.000073f, -0.000377f, +0.000155f, +0.000046f, +0.000228f, + +0.000140f, -0.000101f, +0.000040f, +0.000085f, -0.000196f, +0.000026f, +0.000105f, -0.000077f, -0.000119f, +0.000299f, + -0.000092f, -0.000024f, -0.000021f, +0.000210f, +0.000073f, +0.000134f, +0.000127f, -0.000139f, +0.000008f, -0.000069f, + +0.000105f, +0.000070f, +0.000037f, -0.000077f, -0.000068f, +0.000030f, +0.000089f, -0.000118f, +0.000089f, +0.000043f, + +0.000043f, -0.000022f, -0.000045f, +0.000033f, -0.000052f, +0.000095f, +0.000007f, +0.000006f, +0.000031f, +0.000010f, + -0.000068f, +0.000021f, -0.000002f, -0.000002f, -0.000003f, +0.000012f + }, + { + +0.000758f, -0.002948f, +0.000053f, -0.001165f, -0.000427f, -0.000474f, +0.000052f, -0.000082f, -0.000308f, -0.000384f, + -0.001632f, -0.000501f, -0.001162f, -0.000449f, -0.001895f, -0.001092f, -0.000262f, +0.000568f, -0.002340f, -0.000226f, + -0.000415f, -0.000180f, +0.000194f, -0.000348f, +0.001871f, +0.000971f, +0.000559f, +0.000247f, -0.000179f, +0.000283f, + +0.000781f, +0.000244f, -0.000483f, -0.000898f, +0.000266f, -0.000260f, +0.000167f, +0.000127f, -0.000032f, +0.000078f, + +0.000280f, +0.000211f, +0.000577f, +0.000127f, +0.000161f, -0.000088f, +0.000043f, -0.000552f, +0.000179f, +0.000051f, + +0.000000f, +0.000297f, +0.000073f, -0.000057f, -0.000315f, +0.000112f, +0.000058f, +0.000115f, -0.000154f, +0.000050f, + +0.000078f, +0.000163f, -0.000107f, -0.000102f, +0.000026f, -0.000079f, +0.000164f, +0.000030f, -0.000123f, -0.000066f, + +0.000084f, -0.000171f, +0.000009f, +0.000046f, +0.000064f, -0.000163f, -0.000131f, -0.000018f, +0.000132f, +0.000072f, + -0.000057f, +0.000022f, +0.000064f, +0.000011f, +0.000024f, +0.000058f, -0.000010f, +0.000006f, +0.000108f, -0.000078f, + +0.000009f, +0.000027f, +0.000039f, -0.000004f, -0.000061f, -0.000025f + }, + { + +0.002253f, +0.024286f, +0.006361f, +0.005886f, -0.001223f, +0.000713f, +0.000992f, -0.000253f, -0.000712f, +0.000067f, + -0.000288f, +0.000110f, -0.001301f, +0.000416f, -0.000516f, -0.000571f, +0.000023f, -0.001670f, -0.000454f, -0.000275f, + -0.000431f, -0.000453f, -0.001077f, -0.000240f, +0.000745f, -0.000326f, -0.000087f, -0.000366f, +0.000259f, +0.000268f, + +0.000961f, -0.000269f, -0.000222f, -0.000020f, -0.000332f, +0.000953f, +0.000303f, +0.000104f, -0.000535f, -0.000193f, + +0.000189f, -0.000081f, +0.000239f, -0.000005f, +0.000030f, -0.000095f, -0.000243f, +0.000060f, -0.000052f, -0.000074f, + +0.000049f, -0.000058f, -0.000308f, +0.000276f, -0.000098f, -0.000190f, -0.000129f, -0.000026f, -0.000137f, +0.000119f, + +0.000084f, -0.000089f, -0.000037f, -0.000103f, +0.000093f, +0.000030f, -0.000041f, -0.000110f, +0.000040f, -0.000079f, + -0.000056f, +0.000113f, -0.000063f, +0.000064f, -0.000058f, -0.000186f, +0.000097f, +0.000182f, -0.000041f, -0.000066f, + +0.000016f, +0.000066f, -0.000021f, +0.000009f, +0.000039f, -0.000013f, -0.000022f, -0.000056f, +0.000035f, -0.000009f, + -0.000038f, -0.000036f, +0.000046f, +0.000014f, -0.000015f, +0.000027f + }, + { + +0.000493f, -0.029912f, +0.005601f, -0.000080f, +0.000405f, +0.000173f, +0.000240f, +0.000398f, -0.000355f, -0.000283f, + -0.000354f, +0.000132f, -0.000533f, +0.000570f, -0.001088f, +0.000625f, +0.000501f, -0.001488f, -0.000505f, +0.000248f, + -0.000245f, -0.000230f, +0.000504f, +0.000016f, -0.000475f, -0.000046f, +0.000976f, +0.000587f, -0.000072f, -0.000536f, + -0.000310f, +0.000612f, +0.000360f, +0.000015f, +0.000573f, -0.000716f, +0.000226f, -0.000390f, +0.000047f, -0.000160f, + -0.000437f, +0.000189f, +0.000116f, -0.000115f, -0.000060f, +0.000357f, +0.000363f, +0.000020f, -0.000033f, +0.000456f, + +0.000100f, -0.000447f, +0.000132f, -0.000342f, -0.000040f, +0.000049f, -0.000140f, -0.000021f, -0.000268f, +0.000013f, + +0.000137f, +0.000112f, -0.000043f, +0.000196f, -0.000023f, +0.000012f, +0.000055f, -0.000232f, -0.000002f, +0.000118f, + -0.000022f, -0.000161f, +0.000024f, +0.000087f, +0.000042f, +0.000016f, +0.000035f, +0.000018f, +0.000018f, +0.000098f, + -0.000027f, -0.000045f, -0.000052f, +0.000040f, -0.000005f, -0.000033f, +0.000053f, -0.000048f, +0.000004f, +0.000043f, + +0.000021f, -0.000023f, -0.000017f, +0.000024f, -0.000015f, -0.000010f + }, + { + -0.001132f, -0.000180f, +0.003575f, +0.000976f, -0.000378f, +0.000008f, +0.000587f, +0.000280f, +0.000016f, +0.000014f, + +0.000000f, -0.000176f, +0.000423f, +0.000077f, -0.007746f, -0.000986f, -0.000917f, +0.002430f, -0.000568f, -0.002531f, + +0.000446f, +0.001196f, -0.001039f, -0.000942f, -0.001163f, +0.000073f, -0.001281f, -0.000734f, +0.000072f, +0.000188f, + -0.000442f, +0.000078f, -0.000325f, +0.000186f, -0.000510f, +0.000223f, -0.000881f, -0.000305f, +0.000772f, +0.000343f, + -0.000443f, +0.000025f, +0.000561f, -0.000122f, -0.000109f, +0.000080f, -0.000019f, -0.000051f, -0.000100f, -0.000001f, + -0.000017f, -0.000561f, +0.000285f, -0.000059f, -0.000152f, +0.000160f, +0.000110f, +0.000035f, -0.000046f, +0.000106f, + +0.000216f, +0.000069f, -0.000078f, +0.000053f, +0.000054f, -0.000026f, +0.000047f, -0.000038f, +0.000118f, +0.000088f, + -0.000166f, -0.000002f, +0.000066f, -0.000032f, +0.000011f, +0.000033f, -0.000043f, +0.000053f, +0.000063f, -0.000017f, + +0.000011f, -0.000105f, +0.000008f, +0.000058f, -0.000036f, +0.000031f, -0.000040f, -0.000009f, +0.000011f, +0.000004f, + -0.000011f, -0.000006f, -0.000017f, -0.000029f, +0.000070f, +0.000017f + }, + { + +0.000061f, -0.026286f, +0.005291f, +0.000694f, -0.000865f, -0.000012f, +0.000840f, -0.000587f, -0.000361f, +0.001409f, + -0.000350f, -0.000578f, -0.000342f, -0.000547f, +0.000467f, -0.001259f, -0.000282f, -0.000558f, -0.000265f, +0.000049f, + +0.000814f, -0.000277f, -0.000901f, -0.000343f, +0.000279f, +0.000155f, -0.000009f, -0.000436f, +0.000501f, -0.000040f, + -0.000414f, -0.000320f, +0.000602f, +0.000372f, -0.000417f, -0.000095f, +0.000138f, -0.000012f, +0.000262f, +0.000634f, + +0.000837f, -0.000300f, -0.000224f, -0.000325f, +0.000136f, +0.000361f, +0.000252f, +0.000340f, +0.000390f, +0.000298f, + -0.000367f, +0.000011f, +0.000323f, +0.000345f, -0.000155f, +0.000139f, +0.000222f, -0.000122f, -0.000123f, +0.000089f, + -0.000051f, +0.000055f, -0.000010f, -0.000080f, -0.000048f, -0.000012f, +0.000052f, -0.000016f, +0.000142f, +0.000088f, + +0.000004f, +0.000002f, -0.000100f, +0.000035f, -0.000016f, +0.000103f, +0.000067f, -0.000029f, -0.000075f, -0.000060f, + -0.000011f, -0.000073f, -0.000036f, +0.000129f, +0.000045f, +0.000053f, +0.000001f, +0.000085f, -0.000097f, +0.000023f, + +0.000002f, -0.000016f, -0.000015f, -0.000018f, +0.000015f, +0.000022f + }, + { + +0.000113f, +0.000461f, -0.001642f, -0.000285f, +0.000046f, +0.000072f, -0.000514f, +0.000398f, +0.000154f, -0.000155f, + -0.000125f, -0.000610f, -0.000848f, -0.004511f, -0.001407f, +0.005164f, +0.001794f, +0.000338f, -0.000750f, +0.000055f, + -0.000179f, +0.001197f, -0.002237f, -0.003686f, -0.000772f, +0.000598f, -0.000315f, +0.000175f, -0.001086f, +0.000224f, + +0.000332f, -0.000249f, -0.000679f, +0.000565f, -0.000255f, -0.000333f, -0.000456f, -0.000065f, +0.000533f, +0.000735f, + -0.000347f, +0.000018f, +0.000353f, -0.000510f, -0.000008f, +0.000233f, -0.000186f, -0.000074f, -0.000040f, +0.000002f, + +0.000172f, -0.000026f, +0.000059f, -0.000113f, -0.000118f, -0.000076f, +0.000050f, -0.000241f, -0.000106f, -0.000135f, + +0.000137f, -0.000061f, +0.000055f, +0.000029f, -0.000075f, +0.000064f, +0.000184f, +0.000081f, -0.000211f, -0.000125f, + +0.000026f, +0.000116f, -0.000042f, -0.000011f, +0.000078f, +0.000034f, +0.000069f, +0.000040f, -0.000013f, -0.000062f, + +0.000072f, -0.000008f, +0.000067f, -0.000060f, +0.000035f, +0.000019f, -0.000053f, -0.000010f, -0.000049f, -0.000080f, + -0.000024f, +0.000018f, +0.000068f, -0.000034f, +0.000013f, +0.000051f + }, + { + +0.002241f, +0.059691f, -0.001893f, -0.002116f, -0.000124f, -0.000058f, -0.000931f, -0.000339f, +0.000765f, +0.000231f, + +0.000509f, -0.000824f, +0.000426f, +0.000106f, +0.000771f, +0.000423f, +0.001068f, -0.000439f, +0.000379f, +0.001116f, + -0.000538f, +0.000082f, +0.000052f, -0.000530f, -0.000295f, +0.000158f, +0.000442f, -0.000352f, -0.001306f, -0.000048f, + +0.000122f, -0.000348f, +0.001209f, -0.000526f, +0.000285f, +0.000958f, -0.000414f, +0.000209f, +0.000691f, -0.000588f, + +0.000110f, -0.000671f, +0.000294f, -0.000114f, +0.000059f, +0.000118f, -0.000432f, -0.000320f, +0.000034f, +0.000041f, + -0.000427f, -0.000530f, -0.000457f, +0.000026f, +0.000214f, +0.000142f, +0.000079f, -0.000159f, -0.000336f, -0.000003f, + +0.000098f, +0.000048f, +0.000063f, -0.000004f, -0.000089f, -0.000052f, -0.000098f, +0.000083f, -0.000038f, +0.000030f, + +0.000038f, -0.000084f, +0.000106f, +0.000037f, -0.000075f, -0.000111f, +0.000181f, -0.000063f, -0.000109f, +0.000057f, + -0.000078f, -0.000007f, -0.000057f, -0.000001f, -0.000032f, +0.000003f, +0.000090f, +0.000030f, +0.000001f, +0.000005f, + -0.000014f, +0.000040f, +0.000034f, +0.000013f, -0.000047f, -0.000041f + }, + { + +0.000078f, +0.002073f, -0.001965f, -0.000727f, -0.000338f, -0.000088f, +0.000222f, +0.000868f, +0.000547f, -0.000384f, + -0.000413f, +0.000160f, +0.000780f, +0.001861f, +0.002226f, -0.005390f, +0.002308f, -0.000280f, -0.000007f, -0.001035f, + -0.001112f, +0.000772f, +0.001469f, -0.001091f, +0.000041f, -0.001864f, -0.000306f, -0.001484f, +0.001136f, -0.001405f, + -0.000654f, -0.000001f, -0.000094f, +0.000159f, -0.000496f, -0.000621f, -0.000024f, +0.000154f, -0.000029f, -0.000058f, + +0.000826f, -0.000328f, -0.000155f, +0.000085f, -0.000198f, +0.000108f, -0.000067f, -0.000049f, -0.000187f, -0.000270f, + -0.000159f, +0.000172f, +0.000027f, +0.000053f, -0.000118f, +0.000018f, +0.000261f, -0.000072f, +0.000005f, -0.000196f, + -0.000077f, -0.000220f, -0.000023f, -0.000091f, -0.000035f, -0.000009f, +0.000076f, -0.000044f, +0.000037f, -0.000173f, + -0.000087f, -0.000158f, -0.000060f, +0.000239f, +0.000050f, -0.000082f, -0.000025f, +0.000104f, -0.000009f, +0.000039f, + -0.000020f, -0.000112f, +0.000017f, +0.000035f, +0.000040f, +0.000033f, +0.000095f, -0.000025f, -0.000065f, -0.000022f, + +0.000022f, -0.000062f, +0.000003f, +0.000040f, -0.000022f, +0.000028f + }, + { + -0.003123f, +0.035421f, +0.010608f, +0.002619f, +0.000438f, +0.002151f, +0.002221f, -0.000790f, +0.000604f, +0.000139f, + -0.000293f, +0.000077f, -0.000140f, -0.001078f, +0.000728f, +0.000347f, +0.001343f, +0.000252f, -0.001282f, -0.000242f, + +0.000957f, -0.000286f, +0.000429f, +0.000325f, +0.000690f, -0.000186f, -0.000414f, -0.000116f, -0.000321f, -0.000009f, + +0.000258f, +0.000480f, +0.000179f, +0.000351f, -0.000118f, -0.000498f, -0.000460f, +0.000126f, -0.000629f, +0.000030f, + -0.000172f, +0.000189f, -0.000400f, +0.000150f, +0.000297f, +0.000090f, -0.000501f, -0.000138f, +0.000054f, +0.000134f, + -0.000130f, +0.000272f, +0.000215f, -0.000192f, +0.000119f, +0.000266f, +0.000229f, -0.000350f, +0.000066f, -0.000177f, + +0.000225f, +0.000214f, +0.000010f, +0.000111f, -0.000068f, +0.000134f, -0.000034f, -0.000018f, +0.000047f, -0.000081f, + -0.000117f, +0.000021f, +0.000094f, -0.000020f, +0.000026f, -0.000053f, +0.000075f, -0.000084f, +0.000021f, -0.000069f, + -0.000056f, +0.000057f, +0.000066f, -0.000016f, +0.000106f, +0.000113f, -0.000006f, +0.000004f, +0.000017f, -0.000046f, + +0.000041f, -0.000112f, +0.000019f, +0.000024f, +0.000049f, -0.000018f + }, + { + +0.000280f, +0.006318f, +0.002729f, -0.001026f, -0.000421f, -0.000002f, +0.000407f, +0.000517f, +0.000301f, -0.000067f, + -0.000913f, -0.000221f, -0.000911f, -0.001912f, -0.000348f, -0.000541f, -0.001471f, -0.000603f, -0.000690f, -0.002688f, + -0.000547f, +0.000074f, +0.001499f, +0.000138f, +0.000846f, +0.000332f, -0.000411f, +0.000491f, -0.000584f, -0.000406f, + -0.000299f, +0.000038f, +0.000273f, -0.000219f, +0.000337f, -0.000312f, -0.000625f, +0.000247f, +0.000074f, +0.000449f, + -0.000026f, +0.000016f, +0.000599f, -0.000072f, +0.000041f, +0.000240f, +0.000012f, +0.000223f, +0.000054f, +0.000005f, + +0.000179f, -0.000005f, -0.000197f, -0.000254f, -0.000028f, +0.000281f, -0.000005f, +0.000062f, +0.000011f, +0.000014f, + +0.000067f, -0.000201f, -0.000062f, +0.000113f, +0.000113f, -0.000075f, -0.000002f, +0.000146f, -0.000089f, -0.000004f, + -0.000003f, -0.000068f, -0.000043f, +0.000027f, -0.000045f, -0.000042f, -0.000127f, -0.000002f, +0.000109f, -0.000032f, + -0.000004f, +0.000121f, -0.000036f, -0.000099f, +0.000004f, +0.000057f, -0.000016f, +0.000016f, -0.000076f, +0.000011f, + +0.000033f, +0.000021f, +0.000016f, -0.000013f, +0.000035f, -0.000057f + }, + { + -0.002891f, -0.009531f, -0.000132f, +0.000287f, +0.001198f, -0.002568f, +0.001297f, +0.000220f, -0.000274f, +0.001190f, + -0.001429f, +0.000375f, +0.000202f, -0.000735f, -0.000901f, -0.000688f, +0.000270f, -0.000683f, +0.000080f, +0.000167f, + +0.000316f, +0.000270f, +0.000037f, -0.000155f, +0.000459f, -0.000380f, +0.000206f, -0.000796f, +0.000341f, -0.000064f, + -0.000412f, -0.000369f, -0.000727f, +0.000318f, -0.000358f, -0.001018f, -0.000197f, -0.000370f, +0.000314f, -0.000018f, + +0.000083f, +0.000320f, +0.000206f, -0.000110f, -0.000285f, -0.000078f, -0.000070f, +0.000347f, +0.000037f, +0.000010f, + +0.000247f, -0.000172f, -0.000082f, +0.000004f, -0.000117f, -0.000029f, -0.000139f, +0.000011f, -0.000227f, +0.000178f, + +0.000096f, +0.000017f, -0.000038f, +0.000070f, -0.000153f, -0.000001f, -0.000041f, -0.000111f, +0.000056f, +0.000164f, + +0.000003f, +0.000019f, +0.000022f, +0.000019f, +0.000039f, -0.000021f, -0.000068f, -0.000029f, -0.000029f, -0.000004f, + -0.000001f, +0.000080f, -0.000029f, -0.000027f, +0.000010f, -0.000095f, +0.000053f, -0.000004f, +0.000029f, +0.000066f, + +0.000000f, +0.000053f, -0.000020f, -0.000037f, +0.000019f, -0.000002f + }, + { + +0.000300f, -0.001079f, -0.000801f, -0.001604f, +0.000349f, -0.000059f, -0.000505f, -0.000315f, -0.000739f, +0.000107f, + +0.000085f, -0.000414f, +0.001035f, +0.008852f, +0.001271f, -0.000799f, -0.000846f, -0.000211f, -0.001105f, +0.001515f, + -0.003036f, +0.000167f, +0.001835f, -0.001989f, +0.000359f, +0.000369f, +0.000444f, +0.001838f, +0.000341f, +0.000874f, + -0.001979f, -0.000584f, +0.000099f, +0.000219f, -0.000122f, -0.000560f, +0.000574f, +0.000204f, +0.000510f, -0.000307f, + -0.000469f, +0.000306f, +0.000330f, -0.000221f, +0.000605f, +0.000192f, +0.000332f, +0.000047f, +0.000102f, -0.000208f, + -0.000148f, +0.000079f, -0.000126f, +0.000051f, -0.000109f, -0.000024f, -0.000383f, -0.000003f, +0.000119f, -0.000254f, + -0.000007f, +0.000350f, +0.000067f, -0.000044f, -0.000226f, +0.000210f, -0.000024f, -0.000077f, +0.000107f, -0.000005f, + -0.000032f, -0.000008f, +0.000026f, +0.000034f, +0.000078f, +0.000029f, -0.000020f, -0.000004f, +0.000015f, -0.000015f, + -0.000087f, -0.000033f, +0.000057f, -0.000026f, +0.000023f, +0.000006f, +0.000074f, -0.000060f, -0.000015f, +0.000031f, + -0.000004f, +0.000119f, +0.000015f, -0.000087f, +0.000042f, +0.000051f + }, + { + -0.001516f, +0.004067f, -0.002951f, +0.002225f, -0.000185f, -0.002137f, +0.002533f, +0.001017f, +0.000854f, -0.000673f, + +0.001073f, -0.001131f, +0.000961f, -0.000092f, -0.001171f, -0.000749f, +0.000291f, -0.000554f, -0.000086f, -0.000920f, + +0.000261f, +0.001089f, -0.000446f, +0.000381f, -0.000653f, +0.000084f, +0.000203f, +0.000692f, +0.000346f, -0.000323f, + +0.000681f, -0.000419f, -0.000172f, -0.000320f, +0.000310f, -0.000319f, -0.000305f, +0.000148f, -0.000064f, +0.000317f, + -0.000307f, +0.000018f, +0.000008f, -0.000352f, -0.000300f, +0.000033f, -0.000222f, +0.000056f, +0.000152f, +0.000099f, + -0.000337f, -0.000100f, -0.000127f, -0.000173f, -0.000342f, +0.000060f, +0.000115f, +0.000231f, -0.000119f, +0.000005f, + +0.000026f, -0.000086f, +0.000121f, -0.000126f, +0.000111f, -0.000134f, +0.000146f, -0.000033f, -0.000005f, -0.000051f, + +0.000097f, -0.000004f, +0.000017f, -0.000060f, -0.000066f, -0.000049f, +0.000069f, -0.000058f, -0.000117f, +0.000000f, + +0.000014f, -0.000051f, -0.000094f, -0.000019f, +0.000038f, -0.000087f, +0.000117f, +0.000072f, -0.000048f, -0.000019f, + +0.000001f, -0.000090f, +0.000000f, -0.000009f, +0.000032f, -0.000004f + }, + { + -0.000601f, -0.001611f, +0.000185f, +0.000274f, +0.000495f, -0.000016f, -0.000615f, +0.001486f, -0.001774f, -0.000465f, + +0.000315f, -0.000492f, +0.000802f, -0.000810f, +0.002875f, +0.002765f, +0.000566f, +0.000443f, -0.000717f, +0.001720f, + +0.002230f, +0.001412f, -0.000530f, +0.001163f, +0.001484f, -0.000239f, -0.000336f, +0.000398f, +0.000898f, +0.000389f, + +0.000837f, +0.000102f, +0.000092f, -0.000313f, -0.000188f, +0.000082f, +0.000157f, -0.000591f, +0.000469f, +0.000611f, + +0.000616f, -0.000335f, +0.000182f, -0.000291f, +0.000211f, +0.000188f, +0.000039f, +0.000020f, +0.000065f, -0.000201f, + +0.000138f, +0.000074f, +0.000025f, -0.000294f, -0.000332f, -0.000009f, +0.000061f, +0.000096f, +0.000107f, +0.000441f, + -0.000217f, -0.000185f, +0.000021f, +0.000131f, -0.000007f, -0.000063f, -0.000221f, +0.000225f, -0.000017f, +0.000039f, + -0.000105f, +0.000169f, +0.000080f, +0.000013f, +0.000059f, -0.000082f, +0.000044f, +0.000133f, +0.000005f, -0.000011f, + -0.000076f, +0.000004f, -0.000078f, +0.000131f, -0.000022f, -0.000012f, +0.000011f, -0.000055f, -0.000023f, +0.000029f, + -0.000005f, -0.000059f, +0.000051f, +0.000037f, -0.000004f, +0.000009f + } + }, + { + { + -0.009381f, +0.072871f, +0.004295f, -0.002960f, +0.001696f, -0.000062f, -0.000938f, -0.000492f, +0.000186f, -0.000233f, + +0.000948f, +0.000963f, -0.000502f, +0.000338f, -0.002183f, +0.001348f, +0.000255f, -0.000207f, -0.000343f, +0.001662f, + +0.001458f, -0.000133f, -0.000376f, -0.000342f, +0.000171f, +0.000138f, -0.000624f, -0.000230f, +0.000105f, -0.000068f, + +0.000796f, -0.000366f, +0.000254f, +0.000103f, +0.000626f, -0.000592f, +0.000122f, +0.000221f, +0.000408f, +0.000435f, + +0.000312f, -0.000115f, -0.000057f, +0.000081f, +0.000122f, +0.000017f, -0.000121f, +0.000018f, -0.000012f, +0.000254f, + +0.000287f, -0.000089f, -0.000067f, +0.000025f, -0.000175f, +0.000123f, +0.000137f, -0.000169f, -0.000381f, +0.000012f, + +0.000093f, +0.000040f, -0.000073f, -0.000090f, -0.000011f, -0.000060f, -0.000037f, +0.000086f, +0.000050f, -0.000010f, + +0.000053f, -0.000060f, +0.000028f, +0.000103f, -0.000002f, -0.000177f, -0.000030f, +0.000050f, -0.000086f, +0.000087f, + +0.000020f, +0.000074f, +0.000022f, +0.000021f, +0.000033f, -0.000085f, +0.000110f, -0.000071f, +0.000001f, +0.000033f, + +0.000009f, -0.000016f, +0.000033f, -0.000017f, -0.000022f, -0.000015f + }, + { + -0.000829f, -0.003039f, +0.002879f, -0.002347f, +0.000339f, +0.000169f, +0.000412f, -0.000497f, +0.000531f, +0.000029f, + -0.000461f, -0.000113f, -0.000759f, +0.001194f, +0.001116f, +0.000167f, -0.001667f, +0.001480f, +0.000666f, -0.000071f, + -0.000074f, +0.000244f, -0.000581f, -0.001394f, +0.000469f, +0.000765f, +0.000079f, +0.000540f, -0.000092f, -0.001091f, + -0.000307f, -0.000396f, -0.000391f, -0.000240f, -0.000423f, +0.000244f, +0.000076f, -0.000003f, +0.000170f, +0.000292f, + -0.000132f, -0.000125f, +0.000320f, +0.000255f, -0.000329f, +0.000063f, +0.000058f, -0.000332f, +0.000206f, +0.000096f, + +0.000282f, +0.000036f, +0.000152f, +0.000129f, +0.000244f, -0.000294f, -0.000363f, +0.000074f, -0.000049f, -0.000101f, + +0.000038f, +0.000170f, +0.000017f, -0.000116f, +0.000027f, +0.000102f, -0.000081f, +0.000178f, -0.000022f, -0.000077f, + +0.000022f, +0.000003f, -0.000050f, -0.000154f, +0.000024f, +0.000094f, -0.000091f, -0.000102f, -0.000012f, +0.000071f, + +0.000099f, -0.000054f, -0.000069f, +0.000040f, -0.000036f, +0.000057f, +0.000047f, -0.000005f, -0.000010f, +0.000099f, + -0.000017f, -0.000060f, -0.000007f, +0.000064f, +0.000045f, +0.000004f + }, + { + -0.001149f, +0.019233f, +0.004840f, +0.004907f, +0.001955f, +0.000761f, +0.000588f, +0.000539f, +0.000169f, -0.000336f, + -0.000019f, +0.001206f, -0.000893f, -0.000409f, +0.000381f, -0.000265f, +0.000883f, -0.000725f, +0.001715f, -0.000227f, + +0.000290f, -0.000185f, -0.000526f, -0.000373f, +0.000395f, -0.000319f, +0.000559f, +0.000420f, +0.000443f, +0.000284f, + +0.000697f, -0.001710f, -0.000474f, +0.000223f, -0.000291f, -0.000246f, +0.000056f, +0.000052f, -0.000393f, -0.000239f, + -0.000119f, -0.000698f, -0.000354f, -0.000038f, -0.000359f, +0.000199f, -0.000195f, -0.000029f, +0.000033f, -0.000124f, + -0.000478f, +0.000005f, +0.000236f, +0.000250f, +0.000079f, +0.000142f, -0.000056f, +0.000123f, -0.000127f, +0.000064f, + -0.000144f, +0.000123f, +0.000163f, +0.000137f, -0.000174f, +0.000027f, +0.000089f, -0.000007f, -0.000067f, +0.000052f, + -0.000001f, -0.000111f, -0.000066f, +0.000151f, -0.000031f, -0.000062f, -0.000060f, -0.000023f, +0.000066f, -0.000046f, + -0.000035f, +0.000008f, +0.000075f, -0.000040f, -0.000116f, +0.000054f, +0.000051f, +0.000047f, -0.000050f, -0.000005f, + +0.000033f, -0.000033f, -0.000011f, +0.000005f, -0.000039f, -0.000038f + }, + { + +0.005783f, -0.026549f, +0.001782f, -0.002483f, -0.000526f, +0.000215f, +0.000361f, +0.000149f, -0.000102f, +0.000570f, + -0.000338f, -0.000455f, -0.000650f, +0.001013f, -0.000394f, +0.000099f, +0.000486f, -0.000338f, +0.000044f, -0.000084f, + -0.000307f, -0.000503f, +0.000765f, +0.000259f, -0.000152f, +0.000069f, -0.000407f, +0.000943f, -0.000628f, -0.000212f, + +0.000286f, +0.000338f, +0.000116f, +0.000198f, +0.000066f, -0.000131f, +0.000306f, -0.000020f, -0.000209f, -0.000018f, + -0.000062f, -0.000037f, -0.000209f, +0.000162f, -0.000449f, -0.000268f, +0.000439f, -0.000096f, +0.000051f, -0.000026f, + +0.000178f, +0.000056f, -0.000125f, -0.000023f, -0.000025f, +0.000021f, -0.000064f, +0.000025f, +0.000178f, -0.000092f, + -0.000103f, +0.000069f, +0.000097f, -0.000078f, +0.000117f, +0.000097f, -0.000005f, +0.000125f, -0.000123f, +0.000104f, + +0.000131f, +0.000043f, -0.000205f, -0.000036f, -0.000012f, -0.000090f, +0.000013f, +0.000048f, +0.000008f, +0.000034f, + +0.000055f, +0.000059f, +0.000091f, -0.000042f, -0.000009f, -0.000004f, -0.000038f, +0.000063f, -0.000088f, -0.000044f, + +0.000034f, +0.000051f, -0.000029f, -0.000000f, +0.000038f, +0.000008f + }, + { + +0.001167f, -0.001789f, -0.001817f, -0.000169f, +0.000433f, +0.000048f, -0.000074f, +0.000260f, +0.000326f, +0.000237f, + +0.000163f, -0.000158f, -0.000315f, +0.000309f, -0.004396f, +0.001091f, -0.001495f, -0.000743f, +0.006333f, -0.000701f, + +0.000919f, -0.000904f, -0.000734f, +0.001141f, -0.001160f, +0.000954f, -0.002466f, -0.000631f, -0.000591f, +0.000516f, + +0.001135f, +0.001092f, -0.000526f, +0.000334f, -0.000022f, +0.000636f, -0.001285f, -0.000272f, +0.000054f, -0.000201f, + -0.000111f, -0.000307f, +0.000356f, -0.000129f, -0.000392f, +0.000025f, +0.000147f, -0.000058f, +0.000248f, -0.000044f, + +0.000284f, -0.000312f, -0.000080f, +0.000203f, -0.000006f, -0.000020f, -0.000112f, +0.000233f, +0.000116f, -0.000055f, + +0.000056f, +0.000091f, -0.000095f, -0.000106f, +0.000004f, +0.000055f, +0.000039f, +0.000111f, +0.000049f, +0.000011f, + +0.000090f, -0.000063f, -0.000071f, -0.000011f, -0.000019f, -0.000054f, +0.000035f, -0.000033f, -0.000013f, +0.000110f, + +0.000034f, +0.000081f, -0.000027f, -0.000151f, +0.000062f, -0.000034f, +0.000025f, +0.000023f, -0.000051f, +0.000021f, + -0.000040f, +0.000010f, +0.000068f, -0.000043f, -0.000054f, +0.000004f + }, + { + +0.006935f, -0.023188f, -0.001288f, +0.000502f, -0.000648f, +0.000024f, -0.000532f, +0.000842f, -0.000526f, -0.000860f, + +0.000906f, -0.000045f, -0.000508f, -0.000225f, +0.000993f, +0.000118f, +0.000466f, +0.000038f, +0.001002f, -0.000279f, + -0.000037f, +0.000245f, +0.000301f, -0.000176f, -0.000384f, -0.000150f, -0.000381f, -0.000158f, +0.000062f, -0.000187f, + +0.000698f, +0.000345f, +0.000330f, -0.000237f, -0.000429f, +0.000115f, +0.000638f, +0.000256f, -0.000060f, +0.000328f, + +0.000384f, -0.000433f, -0.000305f, +0.000192f, +0.000079f, -0.000219f, -0.000207f, -0.000206f, -0.000053f, +0.000173f, + +0.000141f, -0.000393f, +0.000009f, +0.000033f, +0.000224f, -0.000225f, +0.000111f, +0.000151f, +0.000185f, +0.000017f, + -0.000247f, -0.000043f, +0.000078f, +0.000166f, +0.000109f, -0.000080f, -0.000026f, +0.000072f, +0.000037f, +0.000015f, + -0.000013f, -0.000022f, +0.000063f, -0.000080f, +0.000002f, -0.000038f, +0.000106f, +0.000059f, -0.000023f, -0.000046f, + +0.000047f, -0.000009f, -0.000056f, -0.000123f, -0.000042f, +0.000034f, +0.000037f, -0.000017f, +0.000098f, -0.000060f, + -0.000007f, +0.000013f, -0.000005f, +0.000039f, -0.000060f, +0.000001f + }, + { + -0.000597f, -0.001250f, +0.001555f, -0.000064f, +0.000098f, -0.000165f, -0.000531f, +0.000193f, +0.000332f, +0.000009f, + -0.000237f, -0.000012f, +0.000562f, +0.002917f, +0.001994f, +0.002474f, -0.000865f, +0.000143f, -0.001310f, -0.001623f, + -0.000519f, +0.000822f, -0.001706f, -0.000742f, +0.000554f, +0.001236f, -0.000978f, +0.002141f, -0.000157f, +0.000732f, + -0.000128f, +0.000348f, -0.000608f, -0.000797f, +0.000239f, +0.000625f, -0.000394f, -0.000242f, -0.000165f, -0.000289f, + +0.000142f, +0.000301f, -0.000166f, -0.000303f, -0.000395f, +0.000107f, +0.000199f, +0.000078f, -0.000056f, +0.000046f, + -0.000136f, -0.000192f, +0.000083f, +0.000085f, +0.000005f, -0.000084f, -0.000020f, +0.000081f, -0.000096f, -0.000146f, + +0.000120f, -0.000054f, -0.000152f, -0.000039f, -0.000110f, -0.000033f, -0.000064f, +0.000082f, +0.000070f, +0.000018f, + -0.000258f, +0.000002f, +0.000097f, +0.000010f, +0.000018f, +0.000083f, -0.000016f, +0.000071f, +0.000069f, +0.000014f, + +0.000007f, +0.000023f, +0.000029f, -0.000046f, -0.000019f, -0.000001f, +0.000058f, -0.000064f, -0.000027f, +0.000007f, + -0.000067f, -0.000045f, -0.000024f, +0.000045f, -0.000009f, -0.000009f + }, + { + -0.006945f, +0.057290f, +0.000050f, -0.001801f, +0.000431f, -0.000097f, +0.000277f, -0.000269f, +0.000405f, -0.000347f, + +0.000832f, +0.000651f, -0.000584f, -0.000772f, +0.001735f, +0.000517f, +0.000112f, -0.000050f, -0.001463f, +0.000238f, + +0.000548f, -0.000561f, -0.000548f, +0.000144f, +0.000087f, -0.000151f, +0.000594f, +0.000232f, -0.000451f, -0.000175f, + +0.000047f, -0.000616f, +0.000188f, -0.000862f, -0.000502f, +0.000679f, +0.000493f, +0.000450f, +0.000869f, -0.000197f, + +0.000161f, -0.000381f, +0.000355f, -0.000017f, -0.000480f, +0.000119f, -0.000051f, +0.000070f, -0.000231f, +0.000291f, + +0.000126f, +0.000275f, -0.000146f, -0.000317f, +0.000045f, -0.000082f, +0.000120f, +0.000022f, -0.000024f, +0.000026f, + -0.000161f, -0.000150f, +0.000017f, +0.000070f, +0.000082f, -0.000071f, -0.000053f, +0.000029f, +0.000011f, -0.000068f, + -0.000003f, +0.000026f, -0.000021f, -0.000041f, +0.000167f, -0.000034f, -0.000139f, +0.000135f, +0.000002f, -0.000016f, + +0.000047f, +0.000076f, -0.000076f, -0.000001f, -0.000022f, -0.000011f, -0.000038f, +0.000054f, -0.000016f, +0.000022f, + +0.000009f, -0.000035f, -0.000010f, +0.000025f, +0.000022f, -0.000012f + }, + { + -0.000870f, -0.001384f, +0.002678f, -0.000398f, +0.000431f, -0.000030f, -0.000044f, -0.000501f, +0.000510f, +0.000220f, + -0.000188f, +0.000003f, -0.000159f, -0.000714f, +0.003208f, -0.001665f, +0.003284f, -0.001927f, -0.000399f, +0.000147f, + -0.000345f, -0.000390f, +0.003154f, -0.000250f, +0.002088f, -0.000486f, -0.001411f, +0.000626f, +0.000363f, -0.000887f, + +0.000984f, -0.000701f, +0.000111f, +0.000005f, -0.001073f, +0.000359f, +0.000442f, -0.000257f, +0.000485f, -0.000488f, + +0.000296f, +0.000035f, -0.000207f, +0.000117f, +0.000106f, +0.000363f, -0.000289f, -0.000040f, -0.000159f, +0.000058f, + +0.000017f, +0.000155f, -0.000252f, -0.000024f, +0.000143f, +0.000142f, -0.000174f, +0.000067f, +0.000211f, -0.000092f, + +0.000178f, -0.000025f, -0.000082f, -0.000002f, -0.000083f, -0.000132f, -0.000136f, -0.000286f, +0.000097f, +0.000021f, + +0.000043f, -0.000049f, -0.000158f, -0.000077f, +0.000029f, -0.000012f, -0.000020f, +0.000060f, +0.000086f, -0.000016f, + +0.000101f, -0.000014f, -0.000126f, -0.000030f, -0.000024f, -0.000050f, +0.000046f, +0.000112f, +0.000013f, -0.000022f, + -0.000021f, +0.000004f, -0.000023f, -0.000006f, -0.000005f, -0.000014f + }, + { + +0.001217f, +0.032183f, -0.005631f, -0.000307f, -0.000025f, +0.002067f, +0.000259f, -0.000906f, -0.000056f, +0.000102f, + +0.000032f, -0.000567f, +0.000561f, -0.000326f, -0.001829f, -0.000132f, +0.000226f, +0.000064f, +0.000288f, +0.000133f, + -0.000065f, +0.000016f, -0.000091f, -0.000393f, +0.000090f, +0.000563f, +0.000197f, -0.000503f, -0.000226f, +0.000069f, + +0.000115f, +0.000541f, -0.000539f, +0.000159f, +0.000832f, +0.000114f, +0.000004f, +0.000227f, +0.000157f, -0.000313f, + -0.000305f, -0.000010f, -0.000227f, -0.000172f, -0.000610f, +0.000405f, +0.000181f, -0.000232f, -0.000271f, +0.000013f, + +0.000306f, -0.000062f, +0.000066f, +0.000412f, -0.000093f, -0.000203f, +0.000363f, +0.000118f, -0.000036f, +0.000012f, + -0.000129f, +0.000091f, -0.000098f, -0.000016f, +0.000043f, -0.000014f, +0.000041f, +0.000029f, -0.000142f, +0.000004f, + +0.000008f, +0.000073f, -0.000061f, +0.000041f, +0.000005f, +0.000040f, -0.000010f, +0.000068f, -0.000074f, +0.000090f, + -0.000061f, -0.000057f, -0.000041f, +0.000039f, -0.000039f, +0.000044f, +0.000071f, +0.000014f, -0.000013f, +0.000055f, + +0.000001f, +0.000024f, -0.000025f, -0.000023f, -0.000024f, +0.000052f + }, + { + -0.000060f, +0.004045f, -0.000825f, -0.001096f, -0.000480f, -0.000049f, +0.000305f, -0.000739f, -0.000463f, +0.000278f, + +0.000485f, +0.001180f, -0.001105f, -0.001128f, -0.001501f, +0.000539f, +0.000424f, -0.001753f, -0.000511f, +0.001760f, + -0.000759f, -0.001388f, +0.000886f, +0.000261f, +0.000921f, -0.000096f, +0.000565f, +0.000399f, -0.000298f, +0.000001f, + -0.000293f, -0.000156f, -0.000151f, -0.000065f, -0.000249f, +0.000413f, -0.000304f, +0.000056f, -0.000131f, -0.000051f, + -0.000194f, -0.000392f, +0.000331f, +0.000047f, +0.000163f, -0.000032f, -0.000012f, +0.000069f, +0.000080f, +0.000107f, + +0.000067f, +0.000098f, +0.000027f, -0.000099f, -0.000189f, +0.000097f, -0.000249f, +0.000020f, +0.000235f, +0.000029f, + -0.000021f, +0.000158f, -0.000033f, -0.000065f, -0.000119f, +0.000137f, -0.000113f, +0.000029f, +0.000074f, +0.000033f, + +0.000061f, -0.000056f, -0.000077f, -0.000033f, +0.000058f, +0.000020f, -0.000002f, -0.000027f, -0.000173f, +0.000042f, + -0.000002f, -0.000023f, +0.000109f, +0.000018f, -0.000069f, -0.000054f, +0.000003f, -0.000060f, +0.000045f, -0.000093f, + -0.000016f, +0.000022f, -0.000023f, +0.000017f, +0.000007f, +0.000055f + }, + { + +0.003205f, -0.000185f, -0.002073f, -0.002160f, -0.000654f, -0.001197f, -0.000730f, -0.000381f, -0.000224f, +0.000614f, + +0.000290f, -0.000578f, -0.000241f, +0.000135f, -0.000338f, -0.000526f, +0.000494f, +0.000000f, -0.000652f, +0.000605f, + -0.000782f, +0.000385f, +0.000395f, +0.000252f, -0.000456f, -0.000176f, -0.000540f, +0.000209f, +0.000184f, +0.000688f, + -0.000379f, -0.000073f, -0.000449f, -0.000225f, +0.000498f, -0.000237f, +0.000050f, -0.000173f, -0.000078f, -0.000078f, + -0.000458f, +0.000294f, -0.000248f, -0.000128f, -0.000130f, +0.000181f, -0.000124f, +0.000098f, -0.000205f, -0.000308f, + +0.000138f, +0.000183f, -0.000269f, +0.000209f, -0.000312f, +0.000120f, +0.000065f, +0.000094f, +0.000071f, -0.000172f, + +0.000133f, +0.000137f, -0.000147f, -0.000008f, +0.000167f, +0.000056f, -0.000083f, +0.000010f, -0.000086f, -0.000058f, + +0.000140f, -0.000064f, -0.000010f, +0.000006f, +0.000052f, +0.000052f, -0.000026f, +0.000005f, -0.000053f, -0.000098f, + -0.000035f, -0.000005f, +0.000058f, +0.000029f, -0.000012f, +0.000086f, -0.000048f, -0.000000f, +0.000038f, -0.000046f, + +0.000034f, -0.000003f, +0.000072f, +0.000029f, -0.000042f, -0.000002f + }, + { + -0.000338f, +0.000301f, +0.002746f, -0.000913f, +0.000695f, -0.000251f, +0.000971f, -0.000585f, -0.000732f, +0.000185f, + -0.000231f, +0.000595f, -0.003781f, +0.001332f, -0.002138f, +0.001578f, -0.000768f, +0.000174f, -0.000174f, +0.000904f, + +0.000765f, -0.001749f, +0.002880f, +0.000460f, +0.000380f, -0.000362f, +0.000054f, +0.000861f, -0.000210f, +0.000649f, + +0.000723f, +0.000008f, +0.000349f, -0.000360f, +0.000116f, +0.000017f, -0.000682f, +0.000348f, -0.000245f, -0.000150f, + -0.000554f, +0.000319f, +0.000364f, +0.000032f, -0.000008f, -0.000266f, +0.000046f, +0.000155f, +0.000298f, -0.000200f, + -0.000025f, +0.000081f, +0.000257f, -0.000027f, -0.000172f, +0.000144f, +0.000221f, -0.000066f, +0.000143f, -0.000045f, + -0.000190f, -0.000230f, +0.000078f, +0.000038f, +0.000027f, -0.000030f, +0.000062f, -0.000045f, -0.000046f, +0.000090f, + -0.000008f, -0.000013f, -0.000072f, +0.000032f, -0.000049f, +0.000050f, +0.000152f, +0.000105f, +0.000035f, +0.000014f, + +0.000060f, -0.000066f, -0.000055f, -0.000024f, -0.000019f, +0.000013f, -0.000072f, +0.000052f, +0.000007f, +0.000027f, + -0.000032f, -0.000065f, +0.000054f, +0.000082f, -0.000082f, +0.000053f + }, + { + -0.000203f, +0.007356f, -0.003067f, +0.001122f, -0.000615f, -0.003504f, +0.000254f, +0.000148f, -0.000053f, +0.000317f, + +0.000413f, -0.001042f, +0.001441f, +0.000090f, +0.000626f, +0.001240f, -0.000284f, -0.000229f, -0.000267f, -0.000681f, + -0.000224f, -0.000059f, +0.000058f, -0.000564f, -0.000257f, -0.000700f, -0.000794f, +0.000478f, +0.000001f, +0.000782f, + +0.000477f, -0.000083f, +0.000303f, -0.000227f, -0.000143f, -0.000065f, -0.000234f, -0.000161f, -0.000103f, -0.000078f, + +0.000265f, +0.000100f, +0.000281f, -0.000050f, -0.000076f, -0.000004f, -0.000637f, -0.000571f, -0.000144f, -0.000295f, + +0.000293f, -0.000108f, -0.000013f, +0.000279f, -0.000103f, +0.000056f, -0.000144f, -0.000082f, -0.000095f, -0.000027f, + +0.000196f, -0.000217f, +0.000037f, -0.000060f, -0.000013f, -0.000077f, -0.000116f, +0.000055f, +0.000015f, +0.000042f, + -0.000052f, +0.000056f, -0.000020f, +0.000105f, -0.000014f, -0.000050f, -0.000080f, +0.000093f, +0.000015f, -0.000053f, + -0.000056f, +0.000054f, -0.000009f, -0.000119f, -0.000017f, -0.000038f, -0.000093f, +0.000061f, +0.000087f, -0.000018f, + -0.000037f, +0.000028f, -0.000031f, -0.000004f, -0.000027f, +0.000052f + }, + { + +0.000738f, -0.001069f, -0.003048f, -0.000773f, +0.000267f, -0.000130f, -0.000102f, +0.001234f, -0.001221f, +0.000243f, + +0.000144f, +0.000080f, -0.000922f, -0.001544f, +0.013176f, +0.004819f, -0.000785f, +0.000603f, -0.001476f, +0.000153f, + +0.000542f, -0.000059f, +0.000234f, +0.000560f, +0.000722f, -0.000284f, -0.000884f, -0.000641f, +0.000934f, -0.000430f, + +0.000188f, +0.000604f, +0.000192f, -0.000381f, +0.000005f, -0.000609f, -0.000177f, +0.000083f, +0.000246f, +0.000461f, + +0.000220f, -0.000087f, +0.000634f, -0.000023f, -0.000598f, -0.000033f, -0.000268f, -0.000278f, -0.000016f, -0.000001f, + +0.000057f, -0.000057f, +0.000156f, +0.000063f, -0.000059f, -0.000093f, -0.000054f, +0.000347f, -0.000275f, +0.000249f, + +0.000287f, +0.000049f, -0.000113f, +0.000001f, -0.000021f, +0.000071f, +0.000107f, -0.000244f, +0.000098f, +0.000048f, + -0.000102f, -0.000101f, +0.000107f, +0.000054f, -0.000006f, +0.000220f, -0.000100f, +0.000043f, +0.000052f, +0.000037f, + +0.000040f, -0.000044f, -0.000082f, -0.000115f, +0.000060f, -0.000035f, +0.000001f, +0.000031f, +0.000010f, -0.000056f, + +0.000012f, -0.000006f, -0.000042f, +0.000015f, +0.000034f, -0.000005f + } + }, + { + { + +0.006261f, +0.052209f, -0.010612f, +0.002465f, +0.001238f, -0.000259f, -0.000985f, +0.000108f, -0.000343f, -0.000532f, + +0.000646f, +0.000663f, +0.000103f, -0.000731f, -0.000003f, +0.000271f, +0.001633f, -0.000729f, +0.000012f, +0.000828f, + +0.001320f, +0.000518f, -0.000369f, -0.000259f, +0.000048f, +0.000099f, -0.000173f, -0.000828f, +0.000252f, -0.000594f, + +0.000228f, +0.000206f, +0.000290f, -0.000106f, +0.000277f, -0.000214f, -0.000118f, -0.000407f, +0.000623f, +0.000460f, + +0.000475f, +0.000108f, -0.000429f, +0.000075f, -0.000047f, -0.000171f, +0.000043f, +0.000108f, -0.000050f, +0.000093f, + +0.000291f, +0.000092f, -0.000118f, -0.000045f, -0.000042f, +0.000254f, +0.000049f, -0.000012f, -0.000137f, -0.000158f, + +0.000122f, +0.000012f, +0.000141f, -0.000142f, -0.000044f, -0.000060f, -0.000057f, +0.000053f, +0.000066f, +0.000042f, + +0.000049f, -0.000106f, -0.000026f, +0.000120f, +0.000043f, -0.000057f, -0.000095f, +0.000038f, -0.000053f, -0.000025f, + -0.000037f, +0.000024f, +0.000034f, -0.000040f, +0.000097f, -0.000096f, +0.000001f, -0.000041f, -0.000022f, -0.000021f, + +0.000020f, -0.000012f, +0.000026f, -0.000008f, -0.000002f, -0.000014f + }, + { + +0.000386f, -0.001968f, -0.000102f, -0.000366f, +0.000013f, +0.000217f, +0.000532f, -0.000666f, +0.000019f, +0.000024f, + +0.000081f, +0.000106f, -0.000523f, -0.000056f, +0.003224f, +0.000916f, -0.000441f, +0.000152f, +0.001287f, +0.000494f, + +0.000089f, -0.000562f, +0.000155f, -0.000660f, -0.001021f, +0.000391f, +0.000498f, -0.000400f, +0.000058f, -0.000490f, + -0.000589f, -0.000091f, -0.000171f, -0.000129f, -0.000538f, +0.000195f, +0.000015f, -0.000666f, +0.000170f, +0.000822f, + -0.000188f, -0.000305f, -0.000316f, +0.000521f, -0.000356f, +0.000129f, +0.000009f, -0.000128f, +0.000156f, +0.000114f, + +0.000309f, -0.000167f, -0.000008f, +0.000002f, +0.000301f, -0.000150f, -0.000162f, -0.000092f, +0.000072f, -0.000052f, + -0.000100f, -0.000024f, +0.000082f, +0.000005f, +0.000046f, +0.000124f, -0.000172f, +0.000015f, +0.000003f, -0.000027f, + -0.000039f, +0.000122f, -0.000040f, -0.000068f, -0.000057f, +0.000107f, +0.000049f, -0.000038f, -0.000083f, -0.000000f, + +0.000099f, -0.000019f, -0.000070f, +0.000030f, -0.000015f, -0.000041f, +0.000024f, -0.000002f, -0.000079f, +0.000081f, + +0.000010f, -0.000038f, -0.000037f, +0.000014f, +0.000041f, +0.000027f + }, + { + +0.001068f, +0.016376f, +0.004992f, +0.002037f, +0.002393f, +0.000746f, +0.000258f, +0.000594f, +0.000778f, -0.000310f, + -0.000484f, +0.000669f, +0.000402f, -0.000797f, +0.000201f, +0.000612f, +0.000345f, -0.000282f, +0.000947f, +0.001628f, + -0.000356f, +0.000262f, +0.000340f, -0.000250f, -0.000296f, -0.000876f, +0.000987f, -0.000252f, +0.000489f, +0.000740f, + -0.000133f, -0.000860f, -0.001130f, +0.000176f, +0.000103f, -0.000254f, -0.000136f, -0.000257f, +0.000294f, -0.000521f, + -0.000086f, -0.000920f, -0.000184f, -0.000404f, -0.000060f, -0.000110f, -0.000066f, -0.000118f, +0.000009f, -0.000260f, + -0.000321f, -0.000053f, +0.000255f, -0.000011f, +0.000167f, +0.000103f, +0.000056f, +0.000102f, -0.000007f, -0.000016f, + -0.000048f, -0.000031f, +0.000058f, +0.000255f, -0.000165f, -0.000059f, +0.000016f, -0.000003f, -0.000038f, +0.000035f, + +0.000061f, -0.000132f, -0.000043f, +0.000055f, +0.000053f, +0.000077f, -0.000096f, -0.000138f, +0.000066f, +0.000034f, + -0.000025f, -0.000018f, +0.000055f, +0.000045f, -0.000124f, +0.000010f, +0.000036f, +0.000031f, -0.000017f, -0.000010f, + +0.000045f, +0.000022f, -0.000040f, -0.000001f, -0.000013f, -0.000045f + }, + { + -0.010920f, -0.006257f, +0.002848f, -0.003931f, +0.000432f, +0.000359f, -0.000203f, +0.000164f, -0.000007f, +0.000599f, + +0.000407f, -0.000202f, -0.000937f, +0.000586f, +0.000286f, +0.000047f, +0.000175f, -0.000071f, +0.000521f, -0.000017f, + -0.000115f, -0.000403f, +0.000150f, +0.000431f, +0.000001f, +0.000733f, -0.000565f, +0.000776f, -0.001089f, -0.000151f, + +0.000423f, +0.000031f, -0.000214f, +0.000462f, -0.000161f, +0.000352f, -0.000145f, -0.000037f, -0.000116f, -0.000263f, + +0.000064f, +0.000104f, -0.000290f, +0.000321f, -0.000202f, -0.000610f, +0.000014f, +0.000144f, +0.000038f, -0.000000f, + -0.000091f, +0.000301f, -0.000238f, +0.000204f, -0.000174f, +0.000003f, +0.000046f, -0.000028f, +0.000188f, +0.000063f, + -0.000109f, +0.000031f, -0.000018f, -0.000183f, +0.000004f, +0.000060f, +0.000031f, +0.000168f, -0.000052f, +0.000001f, + +0.000142f, +0.000164f, -0.000089f, -0.000082f, -0.000010f, -0.000031f, -0.000041f, +0.000030f, -0.000026f, -0.000011f, + -0.000021f, +0.000047f, +0.000083f, -0.000043f, -0.000029f, +0.000034f, -0.000062f, +0.000052f, -0.000022f, -0.000065f, + +0.000004f, +0.000046f, +0.000008f, -0.000035f, +0.000036f, +0.000003f + }, + { + -0.000684f, -0.003542f, +0.001499f, -0.000327f, +0.000245f, +0.000177f, +0.000233f, -0.000006f, +0.000016f, +0.000484f, + -0.000003f, -0.000108f, -0.000124f, -0.001779f, +0.000151f, +0.002139f, -0.002261f, -0.002030f, +0.002552f, +0.000982f, + +0.000134f, -0.001336f, -0.000411f, +0.000680f, +0.000157f, -0.000136f, -0.000615f, +0.000717f, -0.000537f, -0.000104f, + +0.001028f, +0.000415f, -0.000214f, +0.000157f, -0.000452f, +0.000141f, -0.000934f, +0.000070f, -0.000462f, -0.000238f, + -0.000145f, +0.000049f, -0.000461f, -0.000105f, +0.000030f, -0.000121f, +0.000254f, +0.000008f, -0.000112f, +0.000093f, + -0.000049f, +0.000222f, -0.000141f, +0.000119f, +0.000119f, +0.000067f, -0.000120f, +0.000192f, +0.000198f, -0.000075f, + -0.000100f, +0.000111f, -0.000004f, -0.000217f, -0.000138f, -0.000019f, +0.000051f, +0.000138f, +0.000015f, -0.000080f, + +0.000195f, +0.000048f, -0.000153f, +0.000032f, -0.000033f, -0.000054f, +0.000009f, -0.000114f, -0.000101f, +0.000042f, + +0.000010f, +0.000123f, +0.000051f, -0.000158f, +0.000018f, -0.000022f, +0.000035f, +0.000029f, -0.000027f, +0.000001f, + -0.000042f, -0.000013f, +0.000055f, +0.000004f, -0.000073f, -0.000037f + }, + { + -0.012023f, -0.000595f, +0.001161f, +0.001961f, -0.000649f, +0.000030f, -0.000443f, -0.000085f, +0.000422f, -0.001219f, + +0.000216f, +0.000119f, +0.000062f, +0.000080f, +0.000259f, +0.001227f, +0.000258f, +0.000272f, +0.000490f, +0.000054f, + -0.000758f, -0.000126f, +0.000548f, +0.000136f, -0.000422f, -0.000520f, -0.000066f, -0.000102f, +0.000082f, -0.000200f, + +0.000723f, +0.000792f, +0.000148f, -0.000419f, -0.000398f, +0.000191f, +0.000385f, +0.000333f, -0.000015f, -0.000038f, + -0.000446f, +0.000007f, +0.000121f, +0.000325f, -0.000277f, -0.000448f, -0.000074f, +0.000122f, -0.000054f, -0.000058f, + +0.000230f, -0.000270f, -0.000159f, -0.000220f, +0.000232f, -0.000085f, -0.000037f, +0.000065f, +0.000089f, +0.000029f, + -0.000123f, -0.000095f, +0.000056f, +0.000137f, +0.000038f, +0.000056f, -0.000057f, +0.000092f, -0.000009f, -0.000011f, + +0.000024f, -0.000015f, +0.000104f, -0.000103f, +0.000042f, -0.000027f, -0.000009f, +0.000021f, +0.000035f, +0.000019f, + +0.000031f, +0.000084f, +0.000005f, -0.000140f, -0.000063f, -0.000043f, +0.000012f, -0.000075f, +0.000102f, -0.000013f, + -0.000022f, +0.000002f, -0.000005f, +0.000046f, -0.000016f, -0.000039f + }, + { + -0.000121f, -0.002740f, +0.000476f, +0.000809f, +0.000186f, -0.000051f, -0.000287f, -0.000091f, +0.000169f, +0.000215f, + -0.000168f, +0.000164f, +0.000511f, +0.002431f, +0.003589f, +0.001588f, +0.000592f, -0.000253f, -0.000001f, -0.000996f, + -0.000323f, -0.000447f, -0.002265f, +0.002281f, -0.000115f, +0.000645f, +0.000053f, +0.001052f, +0.000507f, +0.000052f, + -0.000159f, +0.000347f, -0.000087f, -0.000731f, -0.000238f, +0.000622f, -0.000549f, -0.000257f, -0.000375f, -0.000724f, + +0.000277f, +0.000186f, -0.000113f, -0.000093f, -0.000404f, -0.000155f, +0.000083f, +0.000036f, -0.000099f, +0.000085f, + -0.000121f, -0.000019f, -0.000118f, +0.000078f, +0.000082f, -0.000114f, -0.000182f, +0.000193f, -0.000040f, -0.000100f, + +0.000061f, +0.000079f, -0.000160f, -0.000087f, -0.000052f, -0.000038f, -0.000133f, -0.000019f, +0.000078f, +0.000115f, + -0.000168f, -0.000062f, +0.000080f, -0.000030f, -0.000060f, -0.000042f, -0.000027f, -0.000025f, +0.000027f, +0.000078f, + -0.000005f, +0.000015f, -0.000034f, +0.000015f, -0.000037f, -0.000004f, +0.000057f, +0.000005f, +0.000005f, +0.000073f, + +0.000011f, +0.000001f, -0.000050f, +0.000049f, +0.000011f, -0.000040f + }, + { + +0.013064f, +0.036636f, -0.003761f, -0.000440f, -0.000674f, +0.000011f, +0.000263f, +0.000372f, -0.000201f, -0.000114f, + -0.000027f, +0.001009f, -0.000278f, +0.000008f, +0.000502f, +0.000686f, -0.000274f, +0.000792f, -0.000866f, -0.000681f, + +0.000408f, +0.000057f, -0.000730f, +0.000042f, +0.000264f, -0.000126f, +0.000315f, +0.000095f, -0.000206f, -0.000013f, + +0.000138f, -0.000232f, -0.000568f, -0.000399f, -0.000704f, +0.000079f, +0.000728f, +0.000567f, +0.000219f, +0.000354f, + -0.000208f, +0.000068f, -0.000033f, +0.000046f, -0.000054f, +0.000040f, -0.000019f, +0.000268f, +0.000063f, -0.000134f, + +0.000114f, +0.000515f, +0.000211f, -0.000234f, -0.000103f, -0.000169f, -0.000065f, -0.000035f, +0.000090f, +0.000152f, + -0.000206f, -0.000051f, -0.000000f, -0.000009f, +0.000183f, -0.000019f, -0.000023f, -0.000046f, +0.000039f, -0.000044f, + -0.000010f, +0.000060f, -0.000083f, -0.000130f, +0.000081f, +0.000049f, -0.000187f, +0.000008f, +0.000046f, -0.000032f, + +0.000045f, +0.000052f, -0.000010f, -0.000014f, -0.000010f, -0.000006f, -0.000093f, +0.000002f, +0.000019f, -0.000029f, + +0.000021f, -0.000039f, -0.000041f, -0.000007f, +0.000017f, +0.000017f + }, + { + -0.000210f, -0.003664f, +0.001362f, -0.000631f, +0.000213f, +0.000088f, -0.000257f, -0.000435f, +0.000326f, +0.000211f, + +0.000205f, +0.000219f, -0.000089f, +0.001102f, -0.000340f, +0.004237f, +0.000886f, -0.000781f, -0.001832f, +0.000314f, + +0.000352f, +0.000111f, +0.000811f, +0.001725f, +0.000416f, +0.001220f, -0.001499f, +0.000517f, -0.000705f, +0.000187f, + +0.001034f, -0.000396f, -0.000417f, -0.000004f, -0.000920f, +0.000208f, +0.000541f, -0.000207f, +0.000249f, +0.000043f, + -0.000662f, -0.000053f, +0.000117f, -0.000214f, -0.000109f, +0.000007f, -0.000312f, +0.000148f, +0.000050f, -0.000153f, + +0.000093f, -0.000031f, -0.000108f, -0.000121f, +0.000250f, +0.000110f, -0.000300f, +0.000087f, +0.000023f, +0.000107f, + +0.000087f, +0.000090f, -0.000047f, +0.000113f, -0.000006f, +0.000045f, -0.000124f, -0.000129f, -0.000017f, +0.000078f, + +0.000187f, +0.000008f, -0.000063f, -0.000142f, -0.000084f, +0.000028f, +0.000003f, +0.000058f, +0.000094f, -0.000028f, + +0.000024f, +0.000093f, -0.000037f, -0.000057f, -0.000026f, -0.000048f, -0.000083f, +0.000064f, +0.000055f, -0.000008f, + -0.000064f, +0.000026f, -0.000012f, -0.000026f, -0.000008f, -0.000030f + }, + { + +0.000731f, +0.027691f, -0.003097f, -0.001589f, -0.000252f, -0.000188f, +0.000057f, +0.000508f, -0.000684f, -0.000167f, + -0.000106f, -0.000839f, +0.000177f, +0.001033f, -0.002242f, -0.000259f, +0.000309f, -0.000023f, +0.000356f, +0.000358f, + -0.000284f, +0.000084f, -0.000324f, -0.000184f, -0.000294f, +0.000065f, +0.000581f, -0.000472f, -0.000261f, +0.000092f, + -0.000031f, +0.000049f, -0.000422f, -0.000141f, +0.000547f, +0.000447f, +0.000369f, -0.000073f, +0.000512f, -0.000452f, + -0.000184f, -0.000417f, +0.000044f, -0.000190f, -0.000318f, -0.000288f, +0.000397f, -0.000120f, -0.000348f, -0.000274f, + +0.000205f, -0.000212f, -0.000215f, +0.000456f, +0.000150f, -0.000251f, +0.000137f, +0.000266f, -0.000100f, +0.000133f, + -0.000043f, -0.000033f, -0.000093f, -0.000078f, +0.000125f, -0.000073f, -0.000023f, +0.000067f, -0.000131f, -0.000042f, + +0.000069f, +0.000020f, -0.000106f, +0.000034f, -0.000000f, +0.000062f, -0.000064f, +0.000064f, -0.000026f, +0.000087f, + +0.000017f, -0.000032f, -0.000050f, -0.000004f, -0.000096f, -0.000056f, +0.000006f, -0.000003f, -0.000038f, +0.000017f, + -0.000032f, +0.000081f, -0.000010f, -0.000023f, -0.000049f, +0.000009f + }, + { + +0.000203f, +0.002152f, -0.002453f, +0.000397f, +0.000223f, +0.000169f, -0.001044f, -0.000600f, -0.000609f, +0.000028f, + +0.000665f, -0.000010f, +0.000092f, +0.000169f, -0.002884f, -0.000029f, +0.000452f, -0.000206f, -0.001070f, +0.002592f, + -0.000354f, -0.000586f, -0.000452f, -0.000034f, +0.000408f, +0.000299f, +0.000305f, +0.000067f, +0.000008f, +0.000646f, + +0.000230f, -0.000272f, -0.000240f, +0.000085f, -0.000184f, +0.000374f, +0.000219f, -0.000030f, -0.000176f, -0.000198f, + +0.000117f, -0.000197f, -0.000193f, +0.000056f, +0.000137f, -0.000082f, -0.000008f, +0.000010f, +0.000048f, -0.000108f, + -0.000064f, +0.000034f, +0.000117f, +0.000188f, -0.000055f, -0.000067f, -0.000118f, -0.000091f, +0.000193f, +0.000096f, + -0.000096f, +0.000057f, +0.000043f, -0.000016f, -0.000238f, +0.000120f, -0.000026f, -0.000122f, +0.000041f, +0.000046f, + +0.000039f, +0.000032f, -0.000023f, -0.000066f, +0.000040f, +0.000036f, +0.000109f, +0.000038f, -0.000139f, -0.000023f, + +0.000025f, -0.000053f, +0.000079f, +0.000069f, -0.000005f, -0.000055f, +0.000033f, -0.000023f, +0.000091f, -0.000040f, + -0.000039f, +0.000006f, -0.000003f, +0.000036f, -0.000026f, +0.000035f + }, + { + -0.001380f, +0.004450f, -0.000370f, +0.000019f, -0.002586f, +0.000635f, -0.001213f, -0.000066f, +0.000135f, -0.000818f, + +0.001326f, +0.000064f, -0.000656f, +0.000741f, +0.000196f, -0.000674f, +0.000130f, +0.000401f, -0.000777f, +0.000228f, + -0.000590f, +0.000042f, +0.000484f, +0.000119f, -0.000698f, +0.000156f, -0.000621f, +0.000415f, +0.000112f, +0.000197f, + +0.000086f, -0.000146f, +0.000082f, -0.000365f, +0.000171f, +0.000667f, -0.000160f, +0.000237f, +0.000135f, -0.000336f, + -0.000354f, +0.000138f, -0.000083f, -0.000263f, +0.000011f, +0.000084f, -0.000011f, +0.000113f, -0.000140f, -0.000356f, + -0.000116f, +0.000168f, -0.000123f, +0.000133f, -0.000221f, +0.000139f, +0.000175f, +0.000032f, +0.000191f, -0.000123f, + -0.000012f, +0.000154f, +0.000000f, -0.000118f, +0.000117f, +0.000072f, -0.000006f, +0.000046f, -0.000018f, -0.000152f, + +0.000078f, -0.000031f, -0.000049f, -0.000003f, +0.000005f, +0.000024f, +0.000000f, +0.000026f, +0.000019f, -0.000079f, + -0.000011f, -0.000061f, -0.000024f, +0.000034f, -0.000028f, +0.000098f, -0.000010f, -0.000001f, +0.000029f, -0.000092f, + +0.000018f, -0.000057f, +0.000022f, +0.000029f, -0.000021f, +0.000000f + }, + { + +0.000325f, +0.001204f, +0.001461f, -0.000069f, +0.000134f, -0.000067f, +0.000813f, -0.000141f, -0.000605f, -0.000251f, + -0.000226f, -0.000005f, +0.000736f, -0.001747f, -0.005191f, +0.001253f, +0.001973f, -0.000121f, +0.000106f, -0.000103f, + +0.002371f, -0.000778f, -0.000481f, +0.000901f, +0.001790f, -0.000196f, -0.000468f, +0.001039f, +0.000113f, -0.000396f, + +0.001735f, +0.000813f, -0.000119f, -0.000157f, -0.000028f, +0.000550f, -0.000859f, -0.000193f, -0.000240f, -0.000142f, + -0.000160f, +0.000093f, +0.000302f, +0.000241f, -0.000236f, -0.000258f, -0.000171f, -0.000013f, +0.000203f, -0.000058f, + +0.000050f, -0.000090f, +0.000210f, -0.000094f, -0.000123f, +0.000020f, +0.000132f, +0.000111f, -0.000066f, +0.000190f, + -0.000036f, -0.000387f, -0.000066f, -0.000009f, +0.000111f, +0.000025f, +0.000008f, +0.000033f, -0.000051f, +0.000016f, + +0.000023f, +0.000025f, -0.000056f, +0.000004f, -0.000070f, -0.000075f, +0.000097f, +0.000076f, +0.000046f, +0.000034f, + +0.000102f, +0.000029f, -0.000057f, +0.000056f, -0.000022f, +0.000012f, -0.000096f, +0.000032f, +0.000061f, +0.000002f, + +0.000005f, -0.000093f, -0.000034f, +0.000091f, -0.000060f, -0.000025f + }, + { + +0.001269f, +0.006000f, -0.003538f, +0.002120f, +0.000152f, +0.000600f, -0.003698f, +0.000228f, -0.000452f, +0.000619f, + -0.001165f, +0.000212f, +0.000219f, -0.000367f, +0.002735f, +0.001101f, +0.000143f, +0.000781f, -0.000493f, -0.000041f, + -0.000259f, -0.000638f, -0.000181f, -0.000440f, -0.000295f, -0.000684f, -0.000566f, +0.000356f, -0.000864f, +0.001070f, + +0.000143f, +0.000151f, +0.000481f, +0.000356f, -0.000600f, +0.000109f, +0.000271f, -0.000352f, -0.000129f, -0.000290f, + +0.000347f, +0.000060f, +0.000154f, +0.000076f, +0.000195f, +0.000027f, -0.000204f, -0.000616f, -0.000078f, -0.000440f, + +0.000332f, +0.000031f, -0.000113f, +0.000180f, +0.000130f, +0.000065f, +0.000012f, -0.000157f, +0.000038f, -0.000016f, + +0.000127f, -0.000089f, -0.000111f, +0.000091f, +0.000009f, +0.000029f, -0.000092f, +0.000038f, -0.000028f, +0.000038f, + -0.000070f, +0.000078f, -0.000053f, +0.000071f, +0.000023f, +0.000026f, -0.000090f, +0.000052f, +0.000124f, -0.000004f, + -0.000033f, +0.000048f, +0.000084f, -0.000045f, -0.000055f, +0.000075f, -0.000092f, -0.000042f, +0.000053f, -0.000000f, + -0.000022f, +0.000071f, -0.000016f, +0.000023f, -0.000027f, +0.000027f + }, + { + -0.000358f, -0.000361f, -0.000938f, -0.000554f, -0.000527f, +0.000010f, +0.000019f, -0.000220f, -0.000424f, +0.000608f, + +0.000004f, +0.000546f, -0.000098f, +0.003024f, +0.002213f, +0.005272f, +0.000258f, +0.000007f, -0.001856f, +0.000444f, + +0.000964f, -0.001581f, +0.000913f, +0.001051f, -0.000563f, -0.000342f, -0.000899f, -0.000075f, +0.000447f, -0.000148f, + -0.000105f, +0.000632f, +0.000182f, -0.000761f, +0.000077f, -0.000080f, -0.000759f, +0.000484f, -0.000210f, +0.000446f, + +0.000082f, -0.000078f, -0.000077f, +0.000117f, -0.000377f, -0.000268f, -0.000250f, +0.000018f, -0.000107f, -0.000136f, + -0.000068f, -0.000000f, -0.000058f, +0.000100f, +0.000101f, +0.000021f, -0.000048f, +0.000128f, -0.000214f, -0.000238f, + +0.000250f, +0.000057f, -0.000111f, -0.000195f, -0.000037f, +0.000056f, +0.000284f, -0.000197f, -0.000032f, +0.000029f, + -0.000014f, -0.000144f, -0.000051f, -0.000018f, -0.000034f, +0.000178f, -0.000017f, -0.000027f, +0.000005f, +0.000019f, + +0.000118f, +0.000003f, +0.000030f, -0.000128f, +0.000001f, -0.000013f, -0.000008f, +0.000039f, +0.000023f, -0.000024f, + +0.000008f, +0.000041f, -0.000032f, -0.000035f, +0.000017f, +0.000028f + } + }, + { + { + -0.003717f, +0.047142f, -0.009451f, +0.002361f, +0.000315f, -0.000013f, +0.000289f, +0.000250f, -0.000069f, +0.000028f, + -0.000511f, -0.000675f, +0.000167f, -0.000077f, +0.002446f, -0.001118f, +0.000246f, -0.000753f, +0.000466f, -0.000620f, + +0.000242f, -0.000102f, -0.000141f, -0.000352f, +0.000243f, +0.000055f, +0.000528f, -0.000679f, +0.000267f, -0.000710f, + -0.000128f, +0.000587f, +0.000078f, -0.000143f, -0.000328f, +0.000162f, -0.000178f, -0.000676f, -0.000152f, -0.000054f, + +0.000563f, +0.000594f, -0.000152f, +0.000054f, -0.000086f, -0.000314f, -0.000158f, +0.000415f, +0.000237f, +0.000186f, + +0.000049f, +0.000031f, -0.000053f, -0.000018f, -0.000028f, +0.000021f, -0.000109f, +0.000106f, +0.000139f, +0.000079f, + -0.000059f, -0.000123f, +0.000031f, +0.000063f, +0.000047f, +0.000079f, +0.000116f, -0.000084f, +0.000038f, -0.000005f, + +0.000077f, -0.000004f, -0.000004f, -0.000014f, -0.000025f, +0.000164f, +0.000035f, -0.000100f, +0.000166f, -0.000044f, + -0.000025f, -0.000056f, -0.000023f, -0.000065f, +0.000006f, +0.000081f, -0.000113f, +0.000061f, +0.000014f, -0.000028f, + -0.000016f, +0.000023f, -0.000027f, +0.000012f, +0.000029f, +0.000005f + }, + { + -0.000237f, +0.002758f, +0.001784f, +0.000656f, -0.000158f, -0.000131f, +0.000091f, -0.000138f, -0.000509f, +0.000361f, + +0.000132f, +0.000456f, -0.000627f, -0.000468f, +0.002679f, +0.000174f, +0.000573f, -0.000954f, -0.002319f, -0.000165f, + -0.000329f, -0.000878f, +0.001613f, +0.000196f, -0.001559f, -0.001073f, +0.000504f, -0.001058f, +0.000267f, +0.000369f, + +0.000357f, +0.001349f, -0.000218f, -0.000450f, +0.000226f, -0.000026f, +0.000244f, -0.000888f, -0.000299f, +0.000613f, + +0.000233f, +0.000166f, -0.000407f, -0.000197f, -0.000154f, +0.000051f, -0.000003f, -0.000024f, +0.000343f, -0.000103f, + -0.000145f, -0.000034f, -0.000066f, -0.000216f, -0.000317f, +0.000129f, +0.000271f, +0.000028f, +0.000061f, +0.000162f, + -0.000141f, -0.000170f, -0.000047f, +0.000050f, +0.000117f, +0.000035f, +0.000102f, -0.000093f, -0.000116f, +0.000009f, + +0.000028f, -0.000068f, +0.000008f, +0.000109f, +0.000011f, -0.000060f, +0.000058f, +0.000049f, +0.000035f, -0.000041f, + -0.000083f, +0.000055f, +0.000068f, -0.000005f, +0.000044f, -0.000035f, -0.000036f, -0.000007f, +0.000027f, -0.000097f, + +0.000038f, +0.000067f, +0.000014f, -0.000049f, -0.000053f, +0.000001f + }, + { + -0.000680f, +0.014540f, +0.006353f, -0.000501f, -0.003072f, -0.000795f, -0.000700f, -0.000132f, +0.000115f, +0.000322f, + +0.000075f, +0.000052f, +0.000083f, +0.000151f, -0.000623f, +0.000774f, +0.000247f, -0.000161f, -0.001306f, +0.001589f, + +0.000225f, +0.001639f, +0.000426f, +0.000102f, +0.000222f, -0.000506f, +0.000405f, -0.001026f, +0.000687f, +0.000224f, + -0.000553f, +0.000774f, -0.000637f, +0.000037f, -0.000096f, +0.000360f, -0.000187f, -0.000332f, +0.000200f, -0.000496f, + +0.000020f, -0.000266f, +0.000607f, -0.000353f, +0.000324f, -0.000312f, +0.000236f, +0.000070f, +0.000035f, -0.000289f, + +0.000007f, +0.000083f, -0.000038f, -0.000010f, -0.000029f, -0.000143f, +0.000140f, -0.000127f, -0.000134f, +0.000011f, + +0.000119f, -0.000207f, -0.000030f, -0.000027f, +0.000136f, -0.000078f, -0.000137f, -0.000029f, +0.000109f, -0.000043f, + +0.000046f, +0.000080f, -0.000026f, -0.000048f, -0.000021f, +0.000002f, +0.000062f, -0.000029f, -0.000053f, +0.000041f, + +0.000002f, +0.000023f, -0.000056f, +0.000089f, +0.000039f, -0.000036f, -0.000021f, -0.000065f, +0.000046f, -0.000033f, + -0.000022f, +0.000022f, +0.000018f, +0.000002f, +0.000027f, +0.000041f + }, + { + +0.011951f, +0.020388f, -0.001477f, -0.004940f, -0.000325f, +0.000101f, -0.000930f, +0.000260f, -0.000369f, +0.000019f, + +0.000701f, +0.000217f, -0.000992f, -0.000466f, -0.000724f, +0.000077f, +0.000220f, -0.000694f, +0.000018f, +0.000420f, + +0.000043f, -0.000023f, -0.000243f, -0.000059f, +0.000045f, +0.000583f, +0.000602f, +0.000762f, -0.000029f, -0.000111f, + -0.000354f, +0.000059f, -0.000320f, -0.000183f, -0.000345f, +0.000116f, +0.000242f, -0.000666f, -0.000085f, -0.000506f, + -0.000176f, +0.000290f, -0.000241f, +0.000068f, +0.000224f, -0.000104f, -0.000331f, +0.000110f, -0.000000f, +0.000323f, + -0.000124f, +0.000093f, +0.000028f, +0.000108f, -0.000074f, -0.000013f, +0.000079f, +0.000057f, -0.000100f, +0.000103f, + +0.000023f, +0.000040f, -0.000159f, +0.000054f, -0.000187f, -0.000110f, +0.000065f, -0.000151f, +0.000093f, -0.000036f, + -0.000057f, -0.000029f, +0.000127f, +0.000024f, +0.000029f, +0.000059f, -0.000057f, -0.000012f, -0.000029f, +0.000028f, + -0.000068f, -0.000028f, -0.000068f, +0.000013f, -0.000030f, +0.000026f, +0.000008f, -0.000068f, +0.000072f, +0.000022f, + -0.000011f, -0.000039f, +0.000031f, +0.000008f, -0.000021f, -0.000032f + }, + { + +0.000425f, -0.007702f, -0.001434f, +0.000520f, -0.000486f, +0.000080f, +0.000326f, -0.000065f, +0.000072f, +0.000481f, + +0.000012f, +0.000192f, +0.000408f, -0.000138f, +0.003633f, +0.002754f, +0.000216f, +0.001197f, -0.006819f, -0.000710f, + -0.000197f, -0.000307f, -0.000382f, -0.001105f, +0.000491f, +0.000551f, +0.002979f, +0.000803f, -0.001410f, -0.001446f, + -0.000421f, -0.000236f, +0.000263f, +0.000092f, -0.000078f, -0.000230f, -0.000263f, +0.000610f, -0.000068f, +0.000408f, + -0.000260f, +0.000370f, -0.000316f, -0.000156f, +0.000331f, +0.000121f, +0.000109f, +0.000328f, -0.000192f, -0.000065f, + -0.000347f, +0.000215f, +0.000302f, -0.000139f, -0.000067f, +0.000060f, -0.000038f, -0.000013f, +0.000088f, +0.000110f, + -0.000066f, +0.000040f, +0.000065f, -0.000043f, +0.000047f, -0.000123f, -0.000082f, -0.000019f, +0.000017f, -0.000032f, + -0.000073f, +0.000039f, -0.000065f, +0.000009f, -0.000028f, +0.000063f, -0.000022f, +0.000012f, +0.000010f, -0.000101f, + -0.000019f, -0.000062f, +0.000068f, +0.000062f, -0.000097f, +0.000034f, -0.000035f, -0.000016f, +0.000050f, +0.000001f, + +0.000003f, -0.000013f, -0.000043f, -0.000003f, +0.000049f, -0.000014f + }, + { + +0.011848f, +0.029435f, +0.000201f, +0.004532f, +0.001753f, +0.000053f, +0.000820f, -0.001480f, +0.000896f, +0.001176f, + -0.000966f, -0.000592f, +0.000112f, +0.000491f, +0.000734f, +0.000782f, -0.000069f, +0.000469f, -0.000163f, +0.000573f, + -0.000036f, -0.000836f, -0.000379f, -0.000103f, +0.000079f, -0.000394f, +0.000305f, +0.000068f, +0.000623f, -0.000203f, + -0.000294f, +0.000130f, +0.000481f, +0.000144f, -0.000385f, +0.000295f, -0.000034f, -0.000164f, -0.000097f, -0.000242f, + -0.000483f, -0.000282f, +0.000181f, -0.000064f, -0.000390f, -0.000240f, -0.000217f, +0.000122f, +0.000032f, -0.000058f, + -0.000152f, +0.000318f, +0.000160f, -0.000160f, -0.000248f, +0.000230f, +0.000122f, -0.000150f, -0.000200f, +0.000045f, + +0.000043f, +0.000070f, -0.000019f, -0.000137f, -0.000146f, +0.000126f, +0.000003f, -0.000027f, +0.000050f, +0.000020f, + -0.000015f, -0.000020f, -0.000014f, +0.000038f, -0.000015f, +0.000075f, -0.000046f, -0.000081f, -0.000004f, +0.000033f, + -0.000037f, +0.000026f, +0.000046f, +0.000074f, +0.000001f, -0.000044f, -0.000047f, +0.000019f, -0.000090f, +0.000047f, + -0.000011f, -0.000011f, -0.000016f, -0.000026f, +0.000058f, -0.000013f + }, + { + +0.000470f, +0.000777f, -0.000947f, +0.000382f, -0.000072f, +0.000051f, +0.000131f, +0.000302f, -0.000126f, +0.000214f, + +0.000116f, -0.000011f, -0.000459f, +0.000765f, +0.002678f, -0.003080f, -0.001062f, +0.000787f, +0.001059f, -0.000255f, + +0.000570f, -0.000791f, -0.002324f, +0.001952f, +0.000061f, +0.000625f, +0.000747f, -0.000636f, +0.000472f, -0.000229f, + -0.000072f, +0.000562f, +0.000192f, +0.000451f, -0.000458f, +0.000060f, -0.000269f, +0.000244f, -0.000126f, -0.000201f, + -0.000233f, -0.000421f, +0.000286f, -0.000049f, +0.000240f, -0.000057f, -0.000286f, -0.000023f, -0.000024f, +0.000022f, + +0.000079f, +0.000069f, -0.000182f, -0.000138f, -0.000009f, -0.000008f, -0.000004f, -0.000087f, +0.000039f, +0.000039f, + +0.000038f, -0.000021f, +0.000054f, +0.000108f, -0.000005f, +0.000006f, +0.000029f, -0.000055f, -0.000109f, +0.000017f, + +0.000123f, +0.000086f, -0.000031f, -0.000043f, +0.000017f, -0.000105f, +0.000025f, -0.000043f, -0.000050f, -0.000037f, + +0.000063f, -0.000009f, -0.000018f, +0.000015f, +0.000006f, +0.000002f, -0.000055f, +0.000071f, -0.000020f, -0.000017f, + +0.000046f, +0.000059f, +0.000029f, -0.000034f, +0.000010f, +0.000004f + }, + { + -0.015654f, +0.000634f, +0.004944f, +0.000631f, -0.000494f, +0.000055f, -0.000547f, +0.000822f, +0.000031f, +0.000104f, + -0.000811f, -0.000768f, +0.000644f, +0.000962f, -0.000292f, +0.000530f, -0.000595f, -0.000131f, +0.001320f, +0.000189f, + -0.000662f, +0.000890f, +0.000393f, -0.000141f, -0.000214f, +0.000355f, -0.000048f, -0.000098f, -0.000516f, +0.000190f, + +0.000501f, -0.000024f, +0.000106f, +0.000156f, -0.000184f, -0.000195f, -0.000364f, +0.000072f, -0.000343f, -0.000132f, + -0.000178f, +0.000182f, -0.000025f, -0.000369f, +0.000438f, -0.000389f, -0.000510f, -0.000030f, +0.000299f, -0.000193f, + -0.000061f, -0.000242f, +0.000070f, +0.000372f, -0.000071f, +0.000032f, -0.000043f, -0.000062f, -0.000089f, +0.000057f, + -0.000059f, +0.000170f, +0.000107f, -0.000136f, -0.000014f, +0.000067f, +0.000035f, +0.000007f, -0.000025f, +0.000062f, + +0.000071f, -0.000006f, +0.000022f, -0.000010f, -0.000146f, -0.000059f, +0.000154f, -0.000168f, -0.000067f, +0.000036f, + -0.000069f, -0.000029f, +0.000030f, -0.000012f, -0.000012f, +0.000029f, +0.000035f, -0.000046f, +0.000020f, -0.000050f, + +0.000004f, +0.000022f, -0.000017f, -0.000006f, -0.000033f, +0.000000f + }, + { + +0.000846f, -0.000180f, -0.003113f, -0.000386f, -0.000407f, +0.000096f, +0.000101f, +0.000129f, -0.000295f, -0.000232f, + +0.000004f, -0.000010f, -0.000746f, -0.000531f, -0.001535f, +0.003699f, -0.003808f, -0.000405f, +0.000613f, +0.000404f, + -0.000750f, +0.001164f, -0.001805f, +0.001223f, -0.001006f, +0.000948f, +0.001393f, -0.000824f, +0.000366f, +0.000728f, + -0.000618f, +0.000360f, -0.000648f, +0.000772f, +0.000485f, -0.000212f, +0.000461f, +0.000182f, -0.000417f, +0.000388f, + -0.000423f, -0.000502f, +0.000314f, -0.000081f, -0.000381f, -0.000332f, -0.000035f, -0.000033f, -0.000025f, -0.000309f, + -0.000007f, -0.000069f, +0.000199f, -0.000092f, -0.000080f, +0.000056f, +0.000180f, +0.000064f, -0.000121f, +0.000080f, + -0.000113f, -0.000009f, +0.000081f, -0.000041f, +0.000049f, +0.000237f, +0.000075f, +0.000159f, +0.000000f, -0.000028f, + +0.000043f, -0.000029f, +0.000128f, +0.000166f, -0.000107f, -0.000025f, +0.000015f, +0.000079f, -0.000042f, -0.000006f, + -0.000108f, +0.000004f, +0.000120f, +0.000025f, +0.000045f, +0.000019f, -0.000026f, -0.000068f, -0.000034f, +0.000016f, + +0.000005f, -0.000022f, +0.000004f, +0.000011f, +0.000002f, +0.000015f + }, + { + -0.001423f, +0.019211f, -0.001628f, -0.000111f, +0.000324f, -0.001206f, +0.000445f, +0.000345f, -0.000160f, +0.000188f, + -0.000444f, -0.000512f, -0.000529f, -0.000034f, +0.000235f, +0.000174f, +0.000487f, -0.000321f, -0.000612f, +0.000252f, + +0.000682f, -0.000246f, -0.000148f, +0.000151f, +0.000179f, -0.000126f, +0.000218f, -0.000321f, -0.000314f, -0.000073f, + +0.000296f, -0.000005f, -0.000056f, +0.000124f, -0.000146f, +0.000045f, +0.000248f, -0.000115f, -0.000038f, -0.000079f, + +0.000035f, -0.000110f, -0.000213f, -0.000049f, +0.000383f, -0.000485f, +0.000012f, -0.000059f, -0.000037f, -0.000198f, + -0.000303f, -0.000045f, -0.000167f, -0.000281f, +0.000142f, +0.000028f, -0.000034f, -0.000064f, -0.000040f, -0.000129f, + +0.000238f, -0.000035f, -0.000064f, -0.000014f, -0.000029f, +0.000071f, -0.000071f, +0.000040f, +0.000063f, -0.000081f, + -0.000017f, -0.000034f, +0.000042f, -0.000080f, +0.000009f, -0.000002f, +0.000042f, -0.000088f, +0.000090f, -0.000052f, + +0.000012f, +0.000075f, +0.000058f, -0.000066f, +0.000038f, -0.000011f, -0.000097f, -0.000029f, -0.000002f, -0.000081f, + +0.000007f, -0.000040f, +0.000034f, +0.000030f, +0.000036f, -0.000035f + }, + { + -0.000376f, -0.000266f, -0.002118f, +0.000100f, -0.000051f, -0.000209f, -0.002019f, -0.000252f, +0.000146f, +0.000152f, + -0.000054f, -0.001118f, +0.001265f, +0.000575f, -0.000923f, +0.000013f, -0.000491f, +0.001195f, -0.000361f, -0.001223f, + -0.000404f, +0.000841f, -0.000778f, -0.001420f, -0.001034f, +0.001167f, -0.000474f, -0.000688f, -0.000704f, +0.000093f, + +0.000527f, +0.000280f, +0.000178f, +0.000095f, +0.000435f, -0.000557f, +0.000088f, +0.000160f, +0.000066f, +0.000142f, + +0.000202f, +0.000226f, -0.000205f, -0.000154f, -0.000062f, +0.000020f, -0.000024f, +0.000143f, +0.000051f, -0.000133f, + -0.000104f, -0.000276f, -0.000145f, +0.000182f, +0.000232f, +0.000010f, +0.000051f, -0.000032f, -0.000025f, +0.000045f, + +0.000053f, -0.000163f, +0.000010f, +0.000131f, +0.000047f, -0.000032f, +0.000138f, -0.000011f, -0.000115f, +0.000009f, + -0.000065f, +0.000050f, +0.000059f, +0.000005f, -0.000065f, -0.000043f, -0.000009f, +0.000024f, +0.000129f, -0.000069f, + +0.000020f, +0.000043f, -0.000082f, -0.000050f, +0.000047f, +0.000020f, +0.000000f, +0.000025f, -0.000035f, +0.000081f, + +0.000002f, -0.000021f, +0.000029f, +0.000002f, +0.000009f, -0.000066f + }, + { + -0.001438f, +0.003654f, +0.000945f, +0.001123f, -0.000561f, +0.000295f, +0.001202f, +0.000403f, -0.000335f, -0.000418f, + -0.000006f, +0.000947f, -0.000334f, +0.000724f, +0.000706f, -0.000198f, +0.000339f, +0.000040f, -0.000018f, -0.000635f, + +0.000354f, -0.000263f, -0.000204f, -0.000316f, +0.000139f, +0.000180f, -0.000013f, -0.000421f, +0.000272f, -0.000850f, + +0.000212f, -0.000012f, -0.000040f, +0.000125f, -0.000636f, +0.000165f, -0.000396f, +0.000315f, +0.000915f, -0.000066f, + +0.000013f, -0.000142f, +0.000125f, -0.000248f, +0.000298f, -0.000138f, +0.000021f, +0.000385f, -0.000014f, -0.000057f, + +0.000134f, -0.000062f, +0.000216f, -0.000031f, -0.000075f, -0.000037f, +0.000065f, +0.000028f, -0.000015f, +0.000178f, + -0.000087f, -0.000000f, +0.000123f, +0.000041f, -0.000192f, -0.000017f, +0.000038f, -0.000020f, +0.000141f, +0.000026f, + -0.000132f, +0.000053f, +0.000010f, -0.000004f, -0.000034f, -0.000062f, -0.000011f, -0.000003f, +0.000037f, +0.000035f, + +0.000046f, +0.000028f, -0.000120f, -0.000007f, +0.000009f, -0.000094f, +0.000076f, -0.000001f, +0.000032f, +0.000023f, + -0.000020f, +0.000010f, -0.000062f, -0.000047f, +0.000027f, -0.000007f + }, + { + -0.000261f, +0.001421f, +0.000808f, +0.000386f, +0.000281f, +0.000260f, -0.000450f, +0.000449f, +0.000248f, +0.000473f, + -0.000051f, -0.000941f, +0.001930f, +0.000763f, +0.000842f, -0.000239f, +0.001135f, +0.000699f, -0.000553f, +0.001103f, + -0.001158f, +0.001858f, +0.001144f, -0.000287f, +0.000812f, -0.000161f, -0.000351f, +0.001624f, -0.000356f, +0.000814f, + +0.000363f, +0.000609f, -0.000372f, +0.000163f, -0.000098f, +0.000219f, +0.000305f, -0.000585f, +0.000360f, -0.000187f, + +0.000086f, +0.000085f, +0.000111f, -0.000030f, +0.000255f, +0.000051f, -0.000115f, -0.000181f, +0.000160f, +0.000063f, + -0.000018f, -0.000084f, -0.000170f, +0.000034f, +0.000211f, +0.000054f, -0.000380f, +0.000151f, -0.000272f, -0.000040f, + +0.000222f, +0.000159f, -0.000221f, -0.000180f, -0.000134f, +0.000240f, -0.000121f, -0.000071f, +0.000113f, -0.000044f, + -0.000019f, +0.000031f, +0.000007f, -0.000024f, +0.000090f, -0.000056f, -0.000045f, -0.000048f, -0.000019f, -0.000022f, + -0.000032f, +0.000080f, +0.000018f, +0.000039f, +0.000010f, -0.000011f, +0.000061f, -0.000079f, +0.000022f, -0.000023f, + +0.000027f, +0.000084f, -0.000078f, -0.000065f, +0.000068f, -0.000032f + }, + { + -0.001051f, +0.002857f, -0.002667f, +0.002397f, -0.000169f, +0.003193f, -0.001491f, +0.000683f, +0.000532f, -0.000251f, + -0.000509f, +0.000238f, -0.001040f, -0.000189f, +0.001767f, -0.000969f, +0.000291f, +0.000652f, +0.000351f, -0.000150f, + -0.000151f, +0.000300f, -0.000545f, +0.000566f, -0.000344f, +0.000257f, -0.000098f, +0.000633f, -0.000259f, -0.000265f, + +0.000116f, -0.000316f, -0.000149f, +0.000316f, -0.000135f, -0.000147f, +0.000145f, +0.000039f, -0.000131f, -0.000014f, + -0.000065f, +0.000211f, +0.000037f, -0.000076f, +0.000098f, +0.000113f, +0.000487f, +0.000153f, +0.000022f, -0.000052f, + -0.000133f, +0.000192f, +0.000026f, -0.000097f, -0.000041f, +0.000030f, +0.000216f, +0.000071f, -0.000036f, +0.000040f, + +0.000012f, +0.000011f, -0.000091f, -0.000004f, +0.000151f, +0.000036f, +0.000168f, -0.000011f, +0.000023f, -0.000034f, + +0.000046f, -0.000011f, -0.000011f, -0.000064f, +0.000006f, +0.000043f, +0.000107f, -0.000080f, -0.000038f, +0.000046f, + +0.000066f, -0.000020f, +0.000028f, +0.000082f, -0.000006f, +0.000020f, +0.000100f, -0.000047f, -0.000076f, +0.000017f, + +0.000040f, -0.000025f, +0.000022f, +0.000023f, +0.000028f, -0.000035f + }, + { + +0.000101f, +0.000203f, +0.001408f, +0.000789f, -0.000315f, -0.000151f, -0.000450f, -0.000298f, -0.000463f, -0.000106f, + -0.000320f, +0.000149f, +0.000776f, +0.007279f, -0.008401f, -0.003403f, +0.000067f, +0.000070f, -0.001919f, -0.000055f, + +0.000609f, -0.001569f, +0.000168f, +0.001428f, -0.001103f, +0.000378f, -0.000052f, -0.000217f, -0.000100f, -0.000211f, + +0.000121f, +0.000340f, +0.000418f, -0.000349f, -0.000291f, +0.000516f, -0.000492f, -0.000343f, -0.000232f, +0.000251f, + +0.000285f, -0.000080f, -0.000643f, -0.000348f, +0.000415f, -0.000121f, -0.000083f, +0.000442f, +0.000152f, -0.000277f, + -0.000119f, +0.000014f, -0.000116f, -0.000139f, +0.000039f, +0.000259f, -0.000001f, -0.000160f, +0.000152f, -0.000124f, + -0.000272f, -0.000151f, +0.000100f, -0.000088f, -0.000007f, -0.000167f, -0.000001f, +0.000337f, -0.000180f, +0.000027f, + -0.000002f, +0.000113f, -0.000069f, -0.000093f, +0.000020f, -0.000132f, +0.000105f, +0.000049f, -0.000043f, -0.000062f, + -0.000039f, +0.000055f, +0.000049f, +0.000128f, -0.000082f, +0.000018f, +0.000019f, -0.000048f, -0.000006f, +0.000061f, + -0.000008f, +0.000004f, +0.000051f, -0.000022f, -0.000042f, +0.000020f + } + }, + { + { + +0.005523f, +0.027615f, +0.004667f, +0.002945f, -0.001128f, -0.000136f, +0.000660f, -0.000326f, +0.000100f, +0.000462f, + -0.000164f, -0.000549f, -0.000072f, +0.000148f, +0.001214f, -0.000179f, -0.001053f, -0.000177f, -0.000214f, -0.000171f, + -0.000084f, +0.000173f, -0.000473f, -0.000138f, +0.000190f, +0.000111f, +0.000397f, -0.000250f, +0.000115f, +0.000271f, + -0.000384f, +0.000522f, -0.000267f, +0.000003f, -0.000452f, +0.000348f, -0.000254f, -0.000411f, -0.000103f, -0.000223f, + +0.000202f, +0.000636f, +0.000146f, -0.000028f, -0.000091f, +0.000020f, -0.000211f, +0.000316f, +0.000116f, +0.000292f, + +0.000034f, +0.000135f, +0.000050f, -0.000097f, -0.000108f, -0.000090f, -0.000127f, +0.000024f, -0.000029f, +0.000211f, + -0.000059f, -0.000174f, -0.000112f, +0.000161f, +0.000091f, +0.000045f, +0.000117f, -0.000020f, -0.000004f, +0.000023f, + -0.000047f, +0.000081f, +0.000029f, -0.000047f, -0.000057f, +0.000082f, +0.000088f, -0.000061f, +0.000118f, +0.000066f, + +0.000018f, +0.000026f, -0.000058f, -0.000017f, -0.000063f, +0.000092f, -0.000023f, +0.000048f, +0.000034f, +0.000015f, + -0.000019f, +0.000027f, -0.000021f, -0.000010f, +0.000020f, +0.000008f + }, + { + +0.000351f, +0.007300f, -0.002718f, +0.001046f, -0.000302f, +0.000070f, -0.000730f, +0.000467f, -0.000166f, +0.000033f, + +0.000217f, +0.000338f, -0.001076f, +0.000593f, +0.001894f, -0.000450f, -0.000607f, +0.000112f, -0.003742f, -0.001100f, + +0.000417f, -0.001283f, +0.001375f, +0.000964f, -0.000968f, -0.001164f, +0.000811f, -0.000954f, +0.000122f, -0.000137f, + +0.000688f, +0.001476f, -0.000401f, -0.000025f, +0.000140f, -0.000055f, +0.000260f, -0.000365f, -0.000319f, -0.000033f, + +0.000459f, +0.000466f, -0.000088f, -0.000321f, -0.000174f, -0.000077f, +0.000113f, -0.000009f, +0.000005f, +0.000135f, + -0.000206f, +0.000062f, +0.000077f, -0.000077f, -0.000438f, -0.000090f, +0.000274f, +0.000060f, +0.000018f, +0.000010f, + +0.000013f, -0.000005f, -0.000066f, +0.000012f, +0.000081f, -0.000037f, +0.000223f, +0.000014f, -0.000094f, -0.000016f, + +0.000044f, -0.000131f, -0.000021f, +0.000042f, +0.000073f, -0.000072f, -0.000046f, +0.000044f, +0.000039f, +0.000019f, + -0.000081f, +0.000029f, +0.000067f, -0.000014f, +0.000055f, +0.000030f, -0.000022f, +0.000009f, +0.000075f, -0.000072f, + -0.000001f, +0.000050f, +0.000039f, -0.000015f, -0.000030f, -0.000022f + }, + { + -0.000193f, +0.019414f, +0.000747f, -0.001527f, -0.001421f, -0.001006f, -0.000394f, -0.000225f, -0.000199f, -0.000040f, + +0.000527f, -0.000118f, +0.000217f, +0.000888f, -0.000744f, -0.000094f, +0.000491f, -0.000021f, -0.001420f, +0.000723f, + +0.000393f, +0.001124f, +0.000110f, +0.000219f, +0.000282f, -0.000022f, +0.000281f, -0.000296f, +0.000391f, -0.000338f, + -0.000059f, +0.000436f, +0.000001f, -0.000115f, +0.000021f, +0.000275f, -0.000055f, -0.000250f, -0.000037f, -0.000285f, + -0.000321f, +0.000168f, +0.000269f, -0.000010f, +0.000278f, -0.000008f, +0.000195f, +0.000147f, +0.000036f, -0.000086f, + -0.000180f, +0.000153f, -0.000010f, +0.000059f, -0.000075f, -0.000143f, +0.000046f, -0.000093f, -0.000115f, -0.000060f, + +0.000070f, -0.000036f, +0.000004f, -0.000116f, +0.000077f, +0.000066f, -0.000129f, +0.000043f, +0.000066f, -0.000031f, + -0.000038f, +0.000102f, +0.000065f, -0.000030f, -0.000071f, -0.000095f, +0.000055f, +0.000082f, -0.000058f, -0.000015f, + -0.000005f, +0.000029f, -0.000030f, -0.000003f, +0.000084f, -0.000019f, -0.000027f, -0.000039f, -0.000002f, -0.000016f, + -0.000025f, -0.000016f, +0.000029f, +0.000011f, +0.000004f, +0.000054f + }, + { + -0.007920f, +0.047353f, -0.002115f, -0.004443f, +0.000023f, -0.000010f, -0.000495f, +0.000124f, -0.000130f, +0.000287f, + -0.000450f, +0.000047f, +0.000058f, -0.001561f, -0.000299f, -0.000858f, +0.000446f, -0.000903f, -0.000296f, +0.000347f, + +0.000109f, +0.000024f, +0.000071f, -0.000167f, -0.000004f, +0.000089f, +0.000843f, +0.000507f, +0.000379f, +0.000060f, + -0.000234f, +0.000046f, +0.000012f, -0.000372f, -0.000481f, +0.000271f, +0.000295f, -0.000481f, -0.000044f, -0.000695f, + -0.000081f, -0.000188f, +0.000241f, -0.000109f, +0.000114f, +0.000058f, -0.000163f, +0.000167f, -0.000139f, +0.000315f, + +0.000132f, -0.000153f, +0.000171f, +0.000043f, -0.000076f, -0.000028f, +0.000009f, +0.000121f, -0.000096f, -0.000028f, + +0.000063f, +0.000105f, -0.000111f, +0.000182f, -0.000113f, -0.000111f, +0.000042f, -0.000147f, +0.000032f, +0.000005f, + -0.000043f, -0.000131f, +0.000032f, +0.000077f, -0.000012f, +0.000040f, +0.000008f, -0.000027f, +0.000002f, +0.000034f, + +0.000012f, -0.000026f, -0.000062f, +0.000020f, -0.000033f, -0.000011f, +0.000042f, -0.000049f, +0.000014f, +0.000044f, + +0.000010f, -0.000036f, +0.000004f, +0.000025f, -0.000023f, -0.000015f + }, + { + -0.000582f, -0.009416f, +0.000687f, +0.000202f, -0.000285f, +0.000014f, +0.000294f, +0.000337f, -0.000293f, +0.000362f, + +0.000317f, -0.000141f, +0.000512f, -0.000964f, +0.006953f, -0.001141f, +0.001107f, +0.001283f, -0.002118f, -0.002495f, + -0.000651f, -0.000434f, +0.000175f, -0.001655f, +0.001271f, -0.000220f, +0.001207f, +0.000307f, -0.000232f, -0.001637f, + -0.000474f, -0.000046f, +0.000107f, +0.000210f, +0.000147f, -0.000065f, -0.000144f, +0.000416f, +0.000032f, +0.000648f, + -0.000061f, +0.000090f, +0.000005f, -0.000082f, +0.000301f, +0.000143f, +0.000131f, +0.000158f, -0.000087f, -0.000127f, + -0.000023f, -0.000079f, +0.000293f, -0.000170f, -0.000082f, -0.000041f, +0.000014f, +0.000060f, -0.000099f, +0.000071f, + +0.000093f, +0.000005f, +0.000006f, +0.000055f, +0.000133f, -0.000068f, -0.000019f, -0.000056f, +0.000015f, +0.000036f, + -0.000148f, -0.000063f, +0.000040f, -0.000022f, -0.000057f, +0.000079f, +0.000006f, +0.000066f, +0.000078f, -0.000051f, + +0.000025f, -0.000091f, -0.000048f, +0.000123f, -0.000065f, +0.000012f, -0.000034f, -0.000035f, +0.000041f, +0.000018f, + +0.000014f, +0.000005f, -0.000050f, -0.000023f, +0.000058f, +0.000013f + }, + { + -0.005710f, +0.056455f, -0.001240f, +0.005024f, +0.000027f, +0.000054f, +0.000605f, -0.000661f, +0.000230f, +0.001582f, + -0.000577f, -0.000662f, -0.000219f, -0.000233f, +0.001427f, +0.000331f, +0.000234f, +0.000386f, -0.000223f, +0.000435f, + +0.000385f, -0.000033f, -0.001193f, -0.000342f, +0.000414f, -0.000127f, +0.000094f, +0.000070f, +0.000076f, +0.000342f, + -0.000304f, -0.000279f, +0.000344f, +0.000633f, -0.000295f, +0.000205f, +0.000072f, -0.000450f, +0.000065f, -0.000137f, + -0.000392f, -0.000018f, -0.000025f, -0.000385f, -0.000428f, +0.000097f, -0.000369f, -0.000067f, +0.000014f, +0.000185f, + -0.000306f, +0.000178f, +0.000315f, -0.000040f, -0.000149f, +0.000089f, +0.000272f, -0.000047f, -0.000095f, -0.000046f, + -0.000065f, +0.000171f, +0.000014f, -0.000085f, -0.000176f, +0.000014f, +0.000055f, -0.000019f, +0.000056f, -0.000026f, + -0.000025f, +0.000032f, -0.000064f, +0.000066f, -0.000027f, +0.000029f, +0.000015f, -0.000032f, -0.000032f, -0.000017f, + -0.000037f, -0.000062f, +0.000010f, +0.000073f, +0.000018f, +0.000024f, -0.000030f, +0.000058f, -0.000080f, -0.000001f, + +0.000015f, -0.000016f, +0.000005f, -0.000049f, +0.000028f, +0.000016f + }, + { + +0.000256f, +0.002253f, +0.000363f, -0.000768f, -0.000099f, +0.000085f, +0.000228f, +0.000407f, -0.000125f, -0.000076f, + +0.000032f, +0.000083f, -0.000753f, -0.000659f, +0.002209f, -0.003197f, -0.001150f, -0.000270f, +0.000755f, +0.000592f, + +0.000235f, +0.000080f, -0.003748f, +0.000581f, +0.000749f, +0.000689f, +0.001309f, -0.000414f, -0.000115f, +0.000508f, + -0.000416f, +0.000225f, +0.000256f, +0.000636f, -0.000001f, -0.000318f, -0.000121f, +0.000438f, +0.000016f, +0.000217f, + -0.000232f, -0.000439f, +0.000183f, -0.000104f, +0.000329f, +0.000116f, -0.000139f, +0.000006f, -0.000085f, -0.000063f, + +0.000009f, +0.000112f, -0.000095f, -0.000111f, -0.000052f, +0.000054f, +0.000145f, -0.000199f, +0.000036f, +0.000092f, + -0.000022f, -0.000141f, +0.000097f, +0.000056f, +0.000026f, +0.000029f, -0.000019f, +0.000070f, -0.000107f, -0.000067f, + +0.000084f, +0.000121f, +0.000002f, -0.000041f, +0.000108f, +0.000012f, +0.000033f, +0.000023f, -0.000010f, -0.000057f, + +0.000035f, +0.000005f, +0.000021f, -0.000025f, +0.000021f, +0.000004f, -0.000060f, +0.000003f, -0.000024f, -0.000070f, + -0.000018f, +0.000014f, +0.000049f, -0.000041f, -0.000016f, +0.000030f + }, + { + +0.012785f, -0.034183f, +0.000256f, +0.000552f, -0.000106f, -0.000016f, -0.000607f, +0.000215f, +0.000111f, +0.000272f, + -0.000443f, -0.000886f, -0.000003f, +0.000798f, +0.000652f, -0.000136f, +0.000027f, -0.000916f, +0.000793f, +0.000927f, + -0.000439f, +0.000383f, +0.000626f, +0.000101f, -0.000273f, +0.000216f, -0.000154f, +0.000190f, -0.000883f, +0.000223f, + +0.000648f, -0.000115f, +0.000264f, +0.000072f, -0.000065f, +0.000059f, -0.000354f, -0.000304f, -0.000026f, -0.000249f, + -0.000214f, +0.000118f, +0.000045f, -0.000484f, +0.000090f, -0.000411f, -0.000419f, -0.000106f, -0.000060f, +0.000139f, + -0.000008f, -0.000419f, -0.000222f, +0.000302f, -0.000014f, +0.000164f, +0.000158f, -0.000012f, -0.000128f, -0.000085f, + -0.000078f, +0.000135f, +0.000079f, -0.000047f, -0.000064f, +0.000030f, +0.000036f, +0.000033f, -0.000045f, +0.000064f, + +0.000062f, -0.000011f, +0.000046f, +0.000124f, -0.000105f, -0.000104f, +0.000164f, -0.000071f, -0.000050f, -0.000004f, + -0.000009f, -0.000070f, -0.000001f, -0.000002f, -0.000016f, +0.000022f, +0.000073f, -0.000013f, +0.000002f, -0.000007f, + +0.000002f, +0.000013f, +0.000019f, +0.000007f, -0.000015f, -0.000019f + }, + { + +0.000272f, +0.002926f, -0.003373f, +0.000397f, -0.000341f, -0.000111f, +0.000126f, +0.000245f, -0.000198f, -0.000248f, + -0.000097f, -0.000567f, -0.000473f, +0.000532f, -0.003864f, -0.001677f, +0.000892f, -0.001750f, +0.000686f, -0.000208f, + -0.000471f, +0.000918f, -0.001619f, +0.001759f, -0.000749f, +0.000692f, +0.000574f, +0.000143f, +0.000297f, +0.000249f, + -0.000799f, +0.000153f, +0.000156f, +0.000067f, +0.000709f, -0.000161f, +0.000429f, +0.000246f, -0.000278f, +0.000194f, + -0.000012f, -0.000409f, +0.000079f, +0.000297f, -0.000178f, -0.000080f, +0.000062f, -0.000249f, -0.000112f, -0.000251f, + -0.000118f, +0.000006f, +0.000148f, -0.000018f, -0.000037f, +0.000069f, +0.000249f, +0.000121f, -0.000006f, +0.000016f, + -0.000106f, -0.000153f, +0.000067f, -0.000170f, +0.000035f, +0.000103f, +0.000044f, +0.000108f, +0.000026f, -0.000034f, + -0.000067f, -0.000056f, +0.000073f, +0.000176f, -0.000011f, -0.000041f, +0.000013f, +0.000061f, -0.000038f, -0.000013f, + -0.000061f, -0.000077f, +0.000071f, +0.000042f, +0.000042f, +0.000038f, +0.000048f, -0.000016f, -0.000069f, +0.000003f, + +0.000054f, -0.000026f, -0.000005f, +0.000012f, -0.000002f, +0.000044f + }, + { + +0.001296f, +0.010689f, +0.004776f, -0.000540f, -0.000367f, +0.000753f, -0.000067f, -0.000503f, +0.000121f, +0.000309f, + -0.000273f, +0.000041f, -0.000257f, -0.000978f, +0.001148f, -0.000575f, +0.000232f, +0.000024f, -0.000229f, -0.000063f, + +0.000979f, -0.000504f, +0.000046f, -0.000278f, +0.000657f, +0.000009f, -0.000096f, -0.000124f, -0.000118f, -0.000338f, + +0.000495f, +0.000328f, -0.000074f, +0.000177f, +0.000207f, -0.000260f, -0.000056f, +0.000096f, -0.000337f, +0.000115f, + +0.000104f, +0.000166f, -0.000211f, -0.000172f, +0.000210f, -0.000117f, -0.000200f, -0.000001f, +0.000213f, -0.000079f, + -0.000336f, +0.000134f, +0.000079f, -0.000294f, -0.000039f, +0.000060f, +0.000001f, -0.000128f, +0.000010f, -0.000166f, + +0.000072f, +0.000005f, +0.000024f, +0.000030f, -0.000078f, +0.000060f, -0.000004f, +0.000004f, +0.000106f, -0.000027f, + -0.000063f, -0.000027f, +0.000099f, -0.000098f, +0.000028f, -0.000025f, +0.000087f, -0.000085f, +0.000037f, -0.000064f, + -0.000016f, +0.000036f, +0.000069f, -0.000023f, +0.000085f, +0.000070f, -0.000038f, -0.000011f, +0.000013f, -0.000040f, + +0.000024f, -0.000066f, +0.000000f, +0.000038f, +0.000052f, +0.000003f + }, + { + +0.000290f, -0.001884f, -0.000949f, -0.000716f, +0.000601f, -0.000211f, -0.000670f, -0.000616f, +0.000394f, -0.000030f, + +0.000052f, -0.000202f, +0.000595f, +0.000077f, +0.000153f, -0.000273f, -0.000819f, +0.000436f, +0.000323f, -0.001613f, + -0.001098f, +0.000734f, -0.001284f, -0.000233f, -0.001057f, +0.000664f, -0.000306f, -0.000498f, -0.001109f, -0.000027f, + +0.000080f, +0.000310f, +0.000237f, +0.000068f, +0.000550f, -0.000667f, -0.000111f, -0.000063f, +0.000196f, +0.000133f, + +0.000170f, +0.000015f, +0.000031f, -0.000074f, -0.000077f, +0.000116f, +0.000045f, +0.000009f, +0.000212f, +0.000046f, + +0.000010f, -0.000255f, -0.000202f, -0.000087f, +0.000140f, +0.000043f, +0.000053f, +0.000073f, -0.000068f, +0.000030f, + +0.000102f, -0.000108f, -0.000025f, +0.000075f, +0.000218f, -0.000065f, +0.000080f, +0.000117f, -0.000040f, -0.000039f, + -0.000052f, -0.000009f, +0.000026f, +0.000024f, -0.000066f, -0.000064f, -0.000081f, -0.000056f, +0.000118f, -0.000011f, + +0.000009f, +0.000050f, -0.000067f, -0.000091f, -0.000014f, +0.000038f, -0.000035f, +0.000002f, -0.000090f, +0.000048f, + +0.000019f, -0.000018f, +0.000016f, -0.000006f, +0.000033f, -0.000042f + }, + { + +0.003093f, -0.005604f, +0.003794f, -0.000258f, +0.000457f, +0.000514f, +0.000377f, +0.000525f, -0.000733f, +0.000432f, + -0.000560f, -0.000138f, +0.000654f, +0.000342f, +0.000433f, -0.000214f, +0.000007f, -0.000224f, +0.000464f, -0.000683f, + +0.000716f, -0.000035f, -0.000748f, -0.000021f, +0.000401f, +0.000026f, -0.000062f, -0.000366f, +0.000079f, -0.000447f, + -0.000217f, +0.000183f, -0.000229f, +0.000064f, -0.000376f, -0.000335f, -0.000515f, +0.000024f, +0.000578f, -0.000029f, + +0.000270f, -0.000097f, -0.000200f, -0.000060f, +0.000228f, +0.000070f, -0.000029f, +0.000167f, +0.000102f, -0.000007f, + +0.000344f, -0.000046f, +0.000200f, -0.000073f, -0.000071f, -0.000132f, +0.000020f, +0.000099f, -0.000148f, +0.000122f, + +0.000081f, -0.000045f, +0.000014f, +0.000090f, -0.000121f, -0.000063f, +0.000026f, -0.000059f, +0.000046f, +0.000105f, + -0.000078f, +0.000025f, +0.000051f, +0.000004f, +0.000014f, -0.000049f, -0.000047f, -0.000029f, -0.000006f, +0.000054f, + +0.000022f, +0.000073f, -0.000066f, -0.000008f, +0.000036f, -0.000119f, +0.000047f, +0.000008f, +0.000012f, +0.000083f, + -0.000005f, +0.000050f, -0.000028f, -0.000042f, +0.000011f, +0.000007f + }, + { + +0.000164f, +0.002878f, -0.001111f, +0.000327f, +0.000049f, +0.000357f, -0.000640f, -0.000060f, +0.000545f, +0.000724f, + +0.000071f, -0.000681f, -0.000179f, +0.002487f, +0.001589f, +0.001597f, +0.000306f, +0.000317f, -0.000643f, +0.001455f, + -0.002102f, +0.001054f, +0.002495f, +0.000361f, -0.000888f, +0.000399f, -0.000178f, +0.001755f, -0.000232f, +0.001338f, + -0.000464f, +0.000131f, -0.000271f, +0.000162f, -0.000028f, -0.000263f, +0.000213f, -0.000156f, +0.000277f, +0.000005f, + +0.000060f, +0.000232f, -0.000009f, -0.000037f, +0.000337f, +0.000030f, +0.000020f, +0.000034f, +0.000085f, +0.000045f, + -0.000057f, +0.000116f, -0.000067f, -0.000069f, +0.000287f, +0.000193f, -0.000301f, -0.000001f, -0.000130f, -0.000144f, + +0.000025f, +0.000203f, -0.000049f, -0.000156f, -0.000156f, +0.000117f, -0.000035f, -0.000112f, +0.000082f, +0.000051f, + -0.000043f, -0.000021f, +0.000021f, -0.000022f, +0.000117f, +0.000067f, -0.000018f, -0.000042f, -0.000046f, -0.000032f, + -0.000062f, +0.000002f, +0.000015f, -0.000025f, +0.000010f, -0.000036f, +0.000105f, -0.000064f, -0.000032f, +0.000006f, + +0.000000f, +0.000087f, +0.000016f, -0.000085f, +0.000047f, +0.000037f + }, + { + +0.000100f, +0.001193f, -0.001373f, -0.000447f, -0.000003f, +0.000937f, +0.001500f, -0.000239f, +0.001216f, +0.000055f, + -0.000093f, -0.000295f, -0.000680f, +0.001796f, -0.001245f, -0.001083f, -0.000174f, -0.000597f, +0.000629f, -0.000215f, + -0.000176f, +0.000528f, -0.000240f, +0.000719f, -0.000259f, +0.000134f, +0.000019f, +0.000568f, +0.000373f, -0.000500f, + +0.000112f, -0.000378f, -0.000266f, -0.000173f, +0.000167f, -0.000421f, -0.000122f, +0.000164f, -0.000148f, +0.000087f, + -0.000173f, +0.000149f, +0.000213f, -0.000119f, -0.000047f, +0.000068f, +0.000214f, +0.000250f, +0.000039f, +0.000092f, + -0.000216f, -0.000066f, +0.000264f, -0.000043f, -0.000158f, -0.000050f, +0.000097f, +0.000101f, -0.000031f, -0.000006f, + -0.000009f, +0.000053f, -0.000027f, -0.000137f, +0.000092f, -0.000039f, +0.000143f, +0.000000f, +0.000057f, -0.000071f, + +0.000086f, -0.000015f, +0.000011f, -0.000043f, -0.000007f, -0.000010f, +0.000119f, -0.000045f, -0.000127f, -0.000022f, + +0.000058f, -0.000012f, -0.000040f, +0.000023f, +0.000010f, -0.000049f, +0.000086f, +0.000042f, -0.000054f, -0.000003f, + +0.000040f, -0.000060f, +0.000003f, -0.000007f, +0.000036f, -0.000016f + }, + { + -0.000337f, +0.000119f, +0.001232f, +0.000743f, +0.000027f, -0.000174f, -0.000591f, +0.000177f, -0.000566f, -0.000163f, + -0.000145f, -0.000208f, +0.000299f, -0.000269f, +0.000989f, -0.001689f, -0.001161f, +0.000011f, -0.000720f, -0.000768f, + +0.000404f, -0.000116f, -0.001002f, +0.001408f, -0.000019f, -0.000400f, +0.001206f, -0.001233f, -0.000488f, +0.000158f, + +0.000012f, +0.000426f, +0.000472f, -0.000026f, -0.000366f, +0.000290f, +0.000063f, -0.000495f, -0.000288f, +0.000040f, + +0.000189f, +0.000226f, -0.000364f, -0.000138f, +0.000158f, +0.000130f, -0.000074f, +0.000434f, +0.000160f, -0.000142f, + -0.000136f, -0.000083f, +0.000082f, -0.000081f, -0.000068f, +0.000067f, +0.000076f, -0.000127f, +0.000219f, +0.000219f, + -0.000158f, -0.000218f, +0.000174f, +0.000012f, +0.000071f, -0.000168f, -0.000160f, +0.000273f, -0.000071f, +0.000037f, + -0.000035f, +0.000135f, +0.000062f, -0.000021f, +0.000086f, -0.000139f, +0.000054f, +0.000087f, +0.000014f, -0.000039f, + -0.000114f, +0.000009f, -0.000039f, +0.000113f, -0.000014f, +0.000004f, +0.000020f, -0.000048f, -0.000013f, +0.000032f, + -0.000000f, -0.000033f, +0.000039f, +0.000021f, -0.000021f, -0.000015f + } + }, + { + { + -0.006593f, -0.002709f, +0.002327f, +0.004486f, +0.000666f, -0.000363f, -0.000194f, -0.000055f, -0.000019f, -0.000564f, + +0.000335f, +0.000735f, -0.000144f, -0.001159f, -0.001462f, +0.001077f, -0.000360f, +0.000094f, -0.000079f, +0.001461f, + -0.000358f, +0.000074f, -0.000035f, +0.000069f, -0.000163f, +0.000075f, -0.000526f, -0.000512f, -0.000091f, +0.000646f, + +0.000025f, +0.000082f, -0.000413f, -0.000245f, -0.000026f, -0.000256f, -0.000141f, -0.000415f, +0.000013f, +0.000062f, + -0.000241f, +0.000057f, +0.000122f, -0.000075f, -0.000202f, +0.000191f, +0.000093f, +0.000021f, -0.000215f, +0.000101f, + +0.000067f, -0.000014f, -0.000037f, +0.000004f, -0.000118f, -0.000072f, -0.000119f, -0.000066f, -0.000204f, -0.000041f, + +0.000160f, +0.000031f, -0.000011f, -0.000037f, +0.000046f, -0.000071f, -0.000019f, +0.000185f, -0.000058f, +0.000018f, + -0.000099f, -0.000014f, +0.000012f, +0.000075f, +0.000035f, -0.000081f, -0.000038f, +0.000058f, -0.000118f, +0.000072f, + +0.000001f, +0.000098f, +0.000009f, +0.000031f, -0.000003f, -0.000108f, +0.000100f, -0.000032f, +0.000017f, +0.000040f, + +0.000031f, -0.000016f, +0.000036f, -0.000016f, -0.000012f, -0.000007f + }, + { + -0.000278f, +0.008271f, -0.000788f, -0.000266f, +0.000579f, +0.000333f, -0.000627f, +0.000223f, +0.000402f, -0.000342f, + +0.000136f, +0.000065f, -0.000574f, -0.000706f, +0.000336f, +0.002086f, +0.000496f, +0.002037f, -0.000196f, -0.001104f, + -0.000199f, -0.001553f, -0.000665f, -0.000044f, +0.000825f, +0.000916f, +0.001047f, +0.000191f, +0.000577f, -0.000289f, + +0.000272f, +0.000325f, -0.000470f, +0.000871f, +0.000174f, +0.000400f, -0.000079f, -0.000031f, +0.000245f, -0.000121f, + -0.000227f, +0.000147f, +0.000214f, +0.000185f, -0.000383f, +0.000040f, +0.000089f, -0.000045f, -0.000289f, +0.000185f, + +0.000029f, -0.000113f, +0.000053f, +0.000121f, +0.000168f, -0.000338f, -0.000011f, -0.000044f, -0.000027f, -0.000252f, + +0.000012f, +0.000132f, +0.000137f, -0.000048f, -0.000075f, -0.000030f, -0.000052f, +0.000169f, +0.000073f, -0.000046f, + -0.000023f, +0.000090f, -0.000031f, -0.000143f, +0.000016f, +0.000134f, -0.000050f, -0.000035f, -0.000091f, +0.000053f, + +0.000070f, -0.000045f, -0.000062f, +0.000021f, -0.000015f, +0.000014f, +0.000048f, +0.000036f, -0.000024f, +0.000091f, + -0.000031f, -0.000057f, -0.000022f, +0.000033f, +0.000052f, -0.000004f + }, + { + +0.000474f, +0.021702f, -0.001101f, -0.002635f, +0.001644f, +0.000096f, +0.000185f, +0.000048f, -0.000078f, -0.000616f, + +0.000393f, +0.000328f, +0.000037f, -0.000185f, -0.000564f, -0.000962f, +0.000749f, -0.000127f, +0.000871f, +0.000240f, + -0.000775f, -0.000430f, -0.000064f, -0.000332f, -0.000321f, -0.000193f, +0.000520f, +0.000428f, +0.000144f, -0.000217f, + +0.000674f, -0.000575f, +0.000330f, +0.000705f, +0.000576f, -0.000484f, +0.000020f, -0.000016f, +0.000240f, +0.000037f, + +0.000051f, -0.000066f, -0.000371f, +0.000238f, -0.000035f, +0.000223f, -0.000019f, -0.000036f, +0.000166f, +0.000204f, + -0.000474f, +0.000057f, +0.000083f, -0.000187f, -0.000023f, +0.000145f, +0.000069f, +0.000135f, +0.000035f, +0.000020f, + -0.000128f, +0.000115f, +0.000077f, +0.000100f, -0.000173f, +0.000112f, +0.000036f, +0.000076f, -0.000069f, +0.000083f, + +0.000001f, -0.000096f, +0.000043f, +0.000064f, -0.000015f, +0.000046f, -0.000075f, -0.000023f, +0.000092f, -0.000039f, + -0.000044f, -0.000022f, +0.000071f, -0.000027f, -0.000045f, +0.000020f, +0.000018f, +0.000071f, -0.000054f, +0.000009f, + +0.000035f, -0.000027f, -0.000031f, +0.000012f, -0.000030f, -0.000024f + }, + { + +0.000061f, +0.061332f, -0.000526f, -0.004577f, +0.000207f, +0.000264f, +0.000284f, -0.000090f, +0.000220f, +0.000833f, + -0.001047f, -0.000721f, +0.000302f, -0.000868f, +0.000591f, -0.001392f, +0.000058f, -0.000067f, +0.000095f, -0.000194f, + -0.000269f, -0.000444f, +0.000439f, +0.000318f, +0.000170f, +0.000461f, -0.000697f, +0.000020f, -0.000162f, +0.000330f, + +0.000592f, +0.000214f, +0.000112f, +0.000288f, -0.000165f, +0.000658f, -0.000105f, +0.000045f, -0.000258f, -0.000412f, + +0.000556f, -0.000534f, +0.000083f, +0.000208f, -0.000130f, -0.000163f, +0.000333f, +0.000300f, +0.000023f, +0.000044f, + +0.000049f, +0.000064f, -0.000038f, +0.000164f, -0.000014f, +0.000072f, -0.000044f, +0.000025f, +0.000115f, -0.000195f, + -0.000099f, +0.000139f, +0.000120f, +0.000007f, +0.000071f, +0.000017f, -0.000075f, +0.000117f, -0.000114f, +0.000044f, + +0.000116f, +0.000055f, -0.000172f, -0.000007f, -0.000014f, -0.000010f, +0.000047f, +0.000014f, -0.000018f, -0.000053f, + +0.000055f, +0.000027f, +0.000072f, -0.000028f, -0.000016f, +0.000016f, -0.000030f, +0.000073f, -0.000071f, -0.000049f, + +0.000010f, +0.000036f, -0.000013f, -0.000013f, +0.000028f, +0.000020f + }, + { + +0.000480f, -0.007684f, -0.000317f, -0.000757f, +0.000452f, -0.000056f, -0.000291f, +0.000164f, -0.000339f, +0.000155f, + +0.000097f, -0.000022f, +0.000715f, -0.000931f, +0.008493f, -0.000062f, -0.002389f, -0.003946f, +0.005762f, -0.000755f, + -0.000358f, -0.001268f, +0.000784f, +0.000079f, +0.000208f, -0.001345f, -0.002167f, -0.000756f, +0.001860f, +0.000177f, + -0.000500f, +0.000505f, -0.000348f, +0.000321f, -0.000491f, +0.000022f, -0.000140f, +0.000026f, -0.000061f, +0.000265f, + -0.000082f, -0.000207f, +0.000215f, +0.000071f, -0.000088f, -0.000193f, -0.000063f, -0.000147f, +0.000093f, -0.000346f, + +0.000157f, -0.000058f, -0.000158f, +0.000089f, -0.000000f, +0.000006f, -0.000059f, +0.000132f, -0.000033f, -0.000120f, + +0.000070f, +0.000083f, -0.000081f, -0.000106f, +0.000051f, +0.000099f, +0.000102f, +0.000067f, -0.000016f, +0.000013f, + +0.000165f, +0.000005f, +0.000026f, +0.000045f, -0.000042f, -0.000070f, +0.000028f, -0.000027f, -0.000004f, +0.000070f, + +0.000028f, +0.000087f, -0.000052f, -0.000062f, +0.000073f, -0.000045f, +0.000016f, +0.000022f, -0.000030f, +0.000011f, + -0.000026f, +0.000010f, +0.000043f, -0.000002f, -0.000047f, -0.000006f + }, + { + -0.004502f, +0.063905f, +0.001711f, +0.004737f, -0.001196f, +0.000004f, -0.000386f, +0.000967f, -0.000460f, -0.000739f, + +0.000879f, +0.000411f, -0.000291f, -0.000991f, +0.000757f, +0.000243f, -0.000082f, -0.000272f, -0.000049f, -0.000127f, + -0.000114f, +0.001013f, -0.000133f, -0.000353f, -0.000149f, -0.000009f, +0.000006f, +0.000404f, -0.000865f, -0.000000f, + +0.000292f, +0.000225f, +0.000121f, +0.000269f, -0.000084f, -0.000140f, +0.000018f, -0.000352f, -0.000047f, +0.000029f, + -0.000205f, +0.000659f, -0.000321f, -0.000214f, +0.000002f, +0.000237f, -0.000005f, -0.000200f, -0.000359f, +0.000013f, + +0.000078f, -0.000311f, +0.000077f, -0.000062f, +0.000315f, -0.000176f, +0.000105f, +0.000113f, +0.000149f, -0.000043f, + -0.000179f, -0.000019f, -0.000000f, +0.000119f, +0.000058f, -0.000037f, -0.000024f, +0.000078f, +0.000019f, -0.000022f, + -0.000013f, +0.000004f, +0.000029f, -0.000038f, +0.000034f, -0.000123f, +0.000039f, +0.000073f, -0.000010f, -0.000026f, + +0.000060f, -0.000001f, -0.000035f, -0.000105f, -0.000021f, +0.000019f, +0.000049f, -0.000008f, +0.000111f, -0.000075f, + +0.000012f, +0.000006f, +0.000026f, +0.000015f, -0.000055f, -0.000008f + }, + { + -0.000538f, -0.000009f, +0.003613f, -0.000177f, +0.000006f, -0.000087f, -0.000099f, -0.000054f, -0.000045f, -0.000011f, + -0.000134f, +0.000288f, +0.000159f, -0.000507f, +0.002195f, -0.000057f, -0.000239f, -0.000222f, -0.000149f, -0.000648f, + -0.000655f, +0.000084f, -0.004711f, -0.000217f, +0.000085f, +0.001127f, -0.000671f, +0.000174f, -0.000526f, +0.000413f, + -0.000463f, +0.000296f, +0.000400f, -0.000437f, +0.000489f, +0.000325f, -0.000099f, +0.000433f, +0.000217f, -0.000064f, + +0.000391f, +0.000072f, -0.000234f, -0.000031f, -0.000152f, +0.000021f, +0.000202f, +0.000140f, -0.000077f, +0.000086f, + -0.000147f, -0.000049f, -0.000075f, +0.000044f, -0.000008f, -0.000044f, -0.000018f, +0.000112f, -0.000008f, -0.000038f, + -0.000048f, -0.000055f, -0.000056f, -0.000079f, -0.000000f, -0.000025f, -0.000237f, +0.000111f, +0.000139f, +0.000042f, + -0.000163f, -0.000044f, +0.000093f, -0.000034f, +0.000030f, +0.000080f, -0.000037f, +0.000045f, +0.000068f, +0.000046f, + -0.000033f, +0.000015f, +0.000000f, -0.000008f, -0.000015f, +0.000006f, +0.000058f, -0.000058f, +0.000013f, +0.000014f, + -0.000056f, -0.000053f, -0.000041f, +0.000027f, -0.000026f, -0.000006f + }, + { + -0.006710f, -0.057630f, -0.003418f, -0.000626f, +0.000201f, +0.000234f, +0.000677f, -0.000216f, -0.000110f, +0.000023f, + +0.000017f, +0.000838f, -0.000810f, -0.000197f, +0.001420f, -0.000149f, +0.000409f, +0.000387f, -0.001037f, -0.000136f, + +0.000377f, -0.000373f, -0.000041f, +0.000746f, +0.000163f, -0.000516f, -0.000359f, +0.000181f, -0.000825f, -0.000515f, + +0.000164f, -0.000264f, -0.000078f, +0.000031f, -0.000394f, -0.000025f, -0.000183f, -0.000594f, +0.000331f, +0.000099f, + -0.000276f, -0.000007f, -0.000031f, -0.000262f, -0.000404f, +0.000220f, +0.000033f, +0.000129f, -0.000633f, +0.000061f, + +0.000089f, +0.000182f, -0.000080f, -0.000238f, -0.000057f, -0.000007f, +0.000196f, +0.000109f, +0.000060f, +0.000058f, + -0.000069f, -0.000117f, -0.000076f, +0.000119f, +0.000087f, -0.000075f, -0.000023f, -0.000028f, +0.000025f, -0.000034f, + -0.000045f, +0.000062f, -0.000076f, +0.000002f, +0.000153f, +0.000044f, -0.000129f, +0.000108f, +0.000054f, -0.000084f, + +0.000084f, -0.000000f, -0.000027f, +0.000000f, +0.000018f, +0.000009f, -0.000039f, +0.000031f, -0.000003f, +0.000045f, + +0.000027f, -0.000049f, +0.000007f, +0.000009f, +0.000033f, -0.000004f + }, + { + -0.000803f, +0.000558f, +0.001647f, +0.000217f, +0.000266f, -0.000051f, -0.000112f, -0.000332f, +0.000191f, +0.000039f, + +0.000145f, -0.000174f, +0.000156f, -0.001115f, -0.002734f, -0.002227f, +0.000600f, -0.002502f, -0.000681f, -0.000074f, + -0.000129f, -0.001144f, -0.001120f, +0.000979f, -0.000527f, +0.001038f, -0.000421f, +0.001987f, -0.000026f, +0.000054f, + +0.000055f, -0.000880f, +0.000579f, -0.000301f, -0.000036f, +0.000109f, +0.000078f, -0.000484f, +0.000287f, +0.000078f, + +0.000038f, +0.000341f, -0.000054f, +0.000108f, -0.000115f, +0.000135f, -0.000070f, -0.000027f, +0.000105f, +0.000114f, + -0.000023f, -0.000076f, -0.000174f, +0.000015f, +0.000212f, +0.000077f, -0.000129f, +0.000082f, +0.000099f, +0.000077f, + +0.000053f, -0.000072f, +0.000003f, +0.000042f, -0.000047f, -0.000058f, -0.000049f, -0.000068f, +0.000098f, +0.000042f, + -0.000003f, +0.000016f, -0.000093f, -0.000109f, +0.000097f, +0.000100f, +0.000041f, -0.000030f, +0.000051f, -0.000051f, + +0.000072f, +0.000010f, -0.000116f, -0.000050f, -0.000007f, -0.000018f, -0.000016f, +0.000093f, -0.000002f, -0.000010f, + -0.000005f, +0.000025f, -0.000008f, -0.000012f, -0.000004f, -0.000007f + }, + { + -0.001546f, +0.004894f, -0.000213f, -0.001062f, -0.000124f, +0.001690f, -0.000478f, -0.000401f, -0.000763f, -0.000398f, + +0.000307f, +0.000111f, +0.000645f, -0.000058f, -0.000103f, -0.000222f, -0.000572f, -0.000015f, +0.000478f, -0.000131f, + -0.000034f, -0.000460f, -0.000076f, -0.000510f, +0.000028f, +0.000073f, +0.000064f, -0.000429f, +0.000070f, -0.000111f, + +0.000231f, +0.000368f, -0.000543f, -0.000091f, +0.000831f, -0.000011f, -0.000237f, -0.000122f, +0.000213f, -0.000243f, + +0.000056f, +0.000229f, +0.000210f, -0.000083f, -0.000326f, +0.000221f, +0.000373f, +0.000024f, +0.000008f, -0.000009f, + +0.000198f, +0.000019f, +0.000105f, +0.000362f, -0.000065f, -0.000173f, +0.000111f, +0.000134f, -0.000073f, +0.000087f, + -0.000251f, -0.000029f, +0.000077f, -0.000020f, +0.000037f, -0.000067f, +0.000061f, +0.000023f, -0.000063f, +0.000049f, + +0.000029f, +0.000006f, -0.000037f, +0.000017f, +0.000003f, +0.000042f, -0.000015f, +0.000068f, -0.000094f, +0.000064f, + +0.000004f, -0.000075f, -0.000046f, +0.000045f, -0.000057f, +0.000018f, +0.000058f, +0.000018f, -0.000010f, +0.000068f, + -0.000004f, +0.000060f, -0.000046f, -0.000021f, -0.000031f, +0.000041f + }, + { + -0.000240f, -0.000149f, +0.001466f, +0.000433f, +0.000028f, +0.000358f, +0.000520f, -0.000814f, -0.000164f, -0.000554f, + +0.000238f, +0.000683f, -0.000536f, -0.000619f, -0.001049f, +0.000610f, +0.000118f, -0.000660f, +0.000004f, +0.001962f, + -0.001424f, -0.000655f, -0.000566f, +0.001054f, -0.000448f, -0.000072f, +0.000464f, -0.000368f, -0.000789f, -0.000067f, + -0.000921f, -0.000308f, -0.000149f, +0.000139f, +0.000003f, +0.000036f, -0.000118f, -0.000415f, +0.000034f, -0.000159f, + +0.000271f, -0.000261f, -0.000093f, +0.000112f, +0.000045f, -0.000180f, +0.000001f, -0.000152f, +0.000150f, +0.000051f, + +0.000147f, +0.000127f, +0.000054f, -0.000094f, -0.000098f, +0.000019f, -0.000066f, -0.000010f, +0.000022f, -0.000050f, + -0.000044f, +0.000197f, +0.000004f, -0.000126f, -0.000045f, +0.000097f, -0.000076f, +0.000023f, +0.000136f, +0.000005f, + +0.000028f, -0.000043f, -0.000043f, -0.000033f, +0.000041f, +0.000015f, +0.000015f, -0.000049f, -0.000125f, +0.000052f, + -0.000004f, -0.000051f, +0.000097f, +0.000035f, -0.000063f, -0.000020f, +0.000017f, -0.000039f, +0.000032f, -0.000057f, + -0.000018f, +0.000003f, -0.000031f, +0.000012f, -0.000005f, +0.000068f + }, + { + -0.002310f, -0.015032f, -0.000020f, -0.001573f, -0.000510f, +0.001423f, -0.000926f, +0.000108f, -0.000497f, +0.000248f, + +0.000763f, -0.001014f, +0.000439f, -0.000257f, -0.000406f, -0.000669f, -0.000019f, +0.000445f, -0.000001f, +0.000112f, + -0.000249f, +0.000264f, -0.000374f, +0.000303f, -0.000181f, +0.000307f, -0.000473f, +0.000608f, -0.000337f, +0.000485f, + -0.000274f, +0.000143f, -0.000027f, -0.000247f, +0.000555f, +0.000082f, -0.000240f, -0.000157f, -0.000347f, -0.000285f, + -0.000068f, -0.000130f, -0.000628f, +0.000089f, -0.000017f, +0.000187f, -0.000128f, -0.000115f, +0.000129f, -0.000073f, + +0.000127f, +0.000192f, -0.000042f, +0.000119f, -0.000077f, +0.000029f, +0.000010f, +0.000127f, +0.000076f, -0.000230f, + +0.000106f, +0.000062f, -0.000108f, -0.000086f, +0.000219f, +0.000010f, -0.000054f, -0.000002f, -0.000117f, -0.000079f, + +0.000147f, -0.000031f, -0.000004f, -0.000004f, +0.000034f, +0.000034f, -0.000010f, +0.000015f, -0.000016f, -0.000034f, + -0.000039f, -0.000013f, +0.000048f, +0.000025f, -0.000004f, +0.000048f, -0.000062f, -0.000001f, -0.000010f, -0.000030f, + +0.000029f, -0.000013f, +0.000061f, +0.000036f, -0.000035f, +0.000007f + }, + { + -0.000115f, +0.003090f, -0.000525f, -0.000551f, +0.000246f, -0.000124f, +0.000355f, -0.000553f, -0.000145f, -0.000073f, + -0.000636f, +0.000592f, -0.001247f, +0.001983f, +0.000374f, +0.003451f, +0.000045f, +0.000078f, +0.000120f, +0.000464f, + +0.000671f, -0.000511f, +0.003170f, +0.001162f, -0.001029f, +0.000339f, -0.000018f, +0.000948f, -0.000454f, -0.000926f, + -0.000269f, -0.000259f, -0.000158f, -0.000012f, -0.000243f, +0.000010f, -0.000458f, +0.000639f, -0.000177f, +0.000207f, + +0.000175f, +0.000123f, -0.000115f, +0.000156f, -0.000106f, -0.000019f, +0.000021f, +0.000129f, +0.000138f, -0.000119f, + -0.000109f, +0.000091f, +0.000308f, -0.000140f, +0.000019f, +0.000243f, +0.000257f, -0.000116f, +0.000039f, +0.000033f, + -0.000191f, -0.000201f, +0.000178f, +0.000027f, +0.000049f, -0.000126f, +0.000164f, +0.000039f, -0.000127f, +0.000093f, + +0.000020f, -0.000024f, -0.000039f, -0.000020f, -0.000059f, +0.000044f, +0.000095f, +0.000056f, -0.000004f, +0.000013f, + +0.000057f, -0.000053f, -0.000069f, -0.000037f, -0.000044f, -0.000020f, -0.000023f, +0.000069f, -0.000013f, +0.000015f, + -0.000016f, -0.000081f, +0.000055f, +0.000061f, -0.000088f, +0.000032f + }, + { + +0.000153f, +0.005064f, +0.001501f, -0.002054f, -0.000344f, -0.001738f, -0.000026f, -0.000168f, +0.000209f, +0.000787f, + -0.000627f, -0.000416f, +0.000459f, -0.000755f, -0.003039f, +0.001124f, -0.001007f, -0.000753f, +0.000219f, -0.000255f, + -0.000301f, -0.000272f, +0.000437f, -0.000444f, -0.000105f, +0.000077f, -0.000220f, -0.000295f, -0.000305f, +0.000588f, + -0.000337f, -0.000195f, +0.000100f, -0.000288f, -0.000174f, -0.000215f, +0.000042f, -0.000247f, -0.000059f, -0.000288f, + +0.000107f, -0.000069f, +0.000180f, +0.000089f, +0.000097f, +0.000058f, -0.000312f, -0.000302f, +0.000047f, -0.000114f, + +0.000303f, -0.000259f, +0.000080f, +0.000143f, -0.000015f, -0.000018f, -0.000129f, -0.000104f, +0.000222f, -0.000040f, + +0.000061f, +0.000061f, +0.000061f, -0.000005f, -0.000061f, -0.000044f, -0.000155f, -0.000004f, +0.000039f, +0.000057f, + -0.000044f, +0.000052f, -0.000012f, +0.000079f, -0.000012f, -0.000037f, -0.000049f, +0.000111f, +0.000024f, -0.000074f, + -0.000051f, +0.000028f, +0.000014f, -0.000084f, -0.000025f, +0.000009f, -0.000110f, +0.000029f, +0.000071f, -0.000004f, + +0.000004f, +0.000046f, -0.000038f, -0.000027f, -0.000035f, +0.000037f + }, + { + +0.000457f, +0.001162f, -0.001232f, -0.000273f, +0.000308f, +0.000086f, -0.000192f, +0.000127f, -0.000196f, +0.000556f, + -0.000158f, -0.000284f, -0.000754f, -0.004757f, +0.007784f, +0.005186f, -0.000878f, -0.000243f, +0.000128f, +0.000164f, + +0.001246f, +0.000258f, -0.000004f, +0.001029f, -0.000521f, -0.000676f, +0.000983f, -0.001180f, +0.000162f, -0.000410f, + -0.000482f, +0.000367f, +0.000233f, +0.000283f, +0.000076f, -0.000661f, +0.000359f, +0.000492f, -0.000464f, +0.000031f, + -0.000299f, -0.000017f, +0.000282f, +0.000565f, -0.000463f, +0.000299f, -0.000008f, +0.000027f, -0.000076f, +0.000069f, + -0.000008f, -0.000021f, +0.000179f, +0.000173f, -0.000024f, -0.000136f, -0.000058f, +0.000001f, -0.000113f, +0.000039f, + +0.000253f, -0.000028f, -0.000029f, -0.000007f, +0.000180f, +0.000035f, +0.000034f, -0.000271f, +0.000079f, +0.000076f, + +0.000008f, -0.000115f, +0.000108f, +0.000072f, +0.000032f, +0.000135f, -0.000093f, -0.000024f, +0.000047f, +0.000061f, + +0.000028f, -0.000021f, -0.000036f, -0.000106f, +0.000100f, -0.000014f, +0.000009f, +0.000032f, +0.000011f, -0.000052f, + +0.000015f, -0.000007f, -0.000044f, +0.000015f, +0.000045f, -0.000009f + } + }, + { + { + +0.003812f, -0.011435f, -0.006723f, +0.003316f, +0.001762f, -0.000076f, -0.000413f, +0.000099f, -0.000187f, -0.001088f, + +0.000277f, +0.000789f, -0.000052f, -0.000618f, -0.001977f, +0.000784f, +0.000647f, -0.000465f, +0.000660f, +0.001342f, + -0.000260f, -0.000108f, +0.000330f, -0.000098f, -0.000164f, +0.000021f, -0.000301f, -0.000982f, +0.000490f, -0.000014f, + -0.000198f, -0.000155f, -0.000246f, -0.000195f, +0.000257f, -0.000577f, -0.000079f, -0.000681f, -0.000079f, +0.000307f, + +0.000065f, -0.000158f, -0.000080f, -0.000248f, +0.000082f, -0.000208f, +0.000346f, +0.000074f, -0.000230f, -0.000214f, + +0.000146f, -0.000201f, +0.000036f, +0.000171f, -0.000146f, +0.000027f, -0.000067f, -0.000070f, -0.000071f, -0.000132f, + +0.000168f, +0.000076f, +0.000064f, -0.000082f, -0.000016f, -0.000032f, -0.000050f, +0.000129f, -0.000007f, +0.000003f, + -0.000029f, -0.000058f, -0.000027f, +0.000088f, +0.000068f, -0.000007f, -0.000099f, +0.000051f, -0.000102f, -0.000012f, + -0.000017f, +0.000006f, +0.000021f, +0.000018f, +0.000046f, -0.000120f, +0.000043f, -0.000025f, -0.000011f, +0.000004f, + +0.000038f, -0.000016f, +0.000027f, +0.000010f, -0.000008f, -0.000009f + }, + { + +0.000035f, +0.005571f, +0.001215f, -0.000424f, +0.000687f, +0.000190f, -0.000094f, -0.000160f, +0.000235f, +0.000175f, + +0.000057f, -0.000335f, -0.000884f, +0.001764f, -0.001796f, +0.002932f, +0.000736f, +0.000629f, +0.001122f, +0.000444f, + -0.000451f, -0.001167f, -0.001009f, -0.000448f, +0.000553f, +0.000908f, +0.000354f, +0.001122f, +0.000420f, +0.000032f, + -0.000525f, +0.000067f, +0.000425f, +0.000470f, +0.000355f, +0.000474f, -0.000338f, -0.000079f, +0.000224f, -0.000032f, + -0.000255f, -0.000026f, +0.000019f, +0.000132f, -0.000135f, -0.000041f, -0.000041f, +0.000063f, -0.000188f, +0.000099f, + -0.000011f, -0.000032f, -0.000178f, +0.000102f, +0.000275f, -0.000106f, -0.000123f, -0.000107f, +0.000004f, -0.000210f, + -0.000056f, +0.000044f, +0.000129f, +0.000013f, -0.000070f, +0.000009f, -0.000138f, +0.000066f, +0.000060f, -0.000009f, + -0.000032f, +0.000104f, +0.000031f, -0.000074f, -0.000031f, +0.000115f, +0.000034f, +0.000010f, -0.000112f, +0.000006f, + +0.000052f, +0.000011f, -0.000079f, +0.000022f, -0.000043f, -0.000019f, +0.000019f, +0.000029f, -0.000070f, +0.000070f, + +0.000002f, -0.000050f, -0.000050f, +0.000019f, +0.000039f, +0.000010f + }, + { + -0.000078f, +0.017696f, +0.002836f, -0.002354f, +0.000667f, +0.000521f, +0.000064f, -0.000157f, +0.000260f, -0.000268f, + +0.000138f, +0.000403f, -0.000085f, -0.000169f, +0.000089f, -0.001502f, +0.000188f, -0.000078f, +0.001915f, -0.000967f, + +0.000729f, -0.001460f, +0.000293f, +0.000208f, -0.000923f, -0.000492f, +0.000374f, +0.000405f, +0.000077f, +0.000135f, + +0.000713f, -0.000777f, +0.000188f, +0.000517f, +0.000781f, -0.000305f, -0.000162f, +0.000031f, +0.000219f, -0.000020f, + +0.000317f, -0.000294f, -0.000161f, -0.000006f, -0.000105f, +0.000178f, -0.000054f, -0.000083f, +0.000060f, +0.000196f, + -0.000238f, -0.000113f, -0.000082f, -0.000094f, -0.000085f, +0.000197f, -0.000026f, +0.000163f, +0.000122f, +0.000056f, + -0.000110f, +0.000046f, +0.000024f, +0.000169f, -0.000136f, -0.000062f, +0.000089f, +0.000038f, -0.000041f, +0.000082f, + +0.000035f, -0.000091f, -0.000045f, +0.000046f, +0.000063f, +0.000115f, -0.000075f, -0.000116f, +0.000120f, +0.000003f, + -0.000016f, -0.000050f, +0.000044f, +0.000032f, -0.000057f, +0.000006f, -0.000002f, +0.000062f, -0.000029f, +0.000010f, + +0.000038f, -0.000004f, -0.000027f, -0.000002f, -0.000002f, -0.000042f + }, + { + +0.008268f, +0.053215f, -0.001790f, -0.005033f, +0.000057f, -0.000000f, +0.000448f, -0.000168f, -0.000179f, +0.000695f, + -0.000115f, -0.000573f, -0.000138f, -0.000110f, -0.000619f, +0.000077f, -0.000361f, +0.000395f, +0.000544f, -0.000429f, + -0.000343f, -0.000076f, +0.000102f, +0.000293f, +0.000259f, +0.000551f, -0.000711f, -0.000264f, +0.000019f, +0.000165f, + +0.000356f, +0.000310f, +0.000045f, +0.000193f, +0.000038f, +0.000301f, -0.000105f, +0.000332f, -0.000486f, -0.000238f, + +0.000582f, -0.000226f, -0.000103f, +0.000255f, -0.000092f, -0.000239f, +0.000264f, +0.000143f, +0.000104f, +0.000020f, + -0.000203f, +0.000292f, -0.000086f, +0.000111f, +0.000058f, +0.000079f, +0.000137f, -0.000159f, +0.000099f, -0.000056f, + -0.000096f, +0.000042f, +0.000126f, -0.000172f, +0.000068f, +0.000018f, -0.000075f, +0.000149f, -0.000075f, -0.000005f, + +0.000050f, +0.000174f, -0.000065f, -0.000053f, +0.000017f, -0.000001f, +0.000020f, -0.000004f, -0.000044f, -0.000051f, + +0.000003f, -0.000015f, +0.000079f, -0.000030f, +0.000012f, +0.000032f, -0.000044f, +0.000042f, -0.000026f, -0.000054f, + -0.000016f, +0.000037f, +0.000005f, -0.000023f, +0.000025f, +0.000008f + }, + { + +0.000033f, -0.006470f, -0.000535f, -0.000453f, +0.000314f, +0.000016f, -0.000345f, +0.000022f, -0.000248f, -0.000174f, + +0.000174f, +0.000262f, +0.000018f, +0.001369f, +0.005692f, +0.001813f, -0.003129f, -0.003073f, +0.001471f, +0.000583f, + +0.000082f, -0.000515f, -0.000483f, +0.002117f, -0.001365f, -0.000961f, -0.001270f, -0.001465f, +0.001518f, +0.001491f, + -0.000641f, +0.000887f, -0.000401f, -0.000076f, -0.000349f, +0.000033f, -0.000106f, -0.000389f, -0.000073f, -0.000160f, + +0.000026f, -0.000120f, +0.000066f, -0.000045f, +0.000080f, -0.000264f, -0.000117f, -0.000176f, +0.000105f, -0.000291f, + -0.000047f, +0.000201f, -0.000278f, +0.000196f, -0.000051f, +0.000132f, -0.000069f, +0.000061f, +0.000137f, -0.000178f, + -0.000036f, +0.000077f, -0.000069f, -0.000117f, -0.000043f, +0.000073f, +0.000039f, +0.000107f, +0.000005f, -0.000044f, + +0.000226f, +0.000084f, +0.000002f, +0.000040f, -0.000006f, -0.000101f, +0.000001f, -0.000034f, -0.000070f, +0.000025f, + -0.000014f, +0.000091f, +0.000039f, -0.000099f, +0.000050f, -0.000020f, +0.000017f, +0.000042f, -0.000035f, -0.000004f, + -0.000033f, -0.000003f, +0.000048f, +0.000015f, -0.000061f, -0.000017f + }, + { + +0.014156f, +0.043773f, -0.001579f, +0.002916f, +0.000020f, +0.000113f, -0.000452f, +0.000597f, -0.000107f, -0.001152f, + +0.000688f, +0.000399f, +0.000255f, +0.000334f, -0.001270f, +0.000502f, -0.000053f, -0.000431f, +0.000089f, -0.000306f, + -0.000250f, +0.000341f, +0.000558f, -0.000134f, -0.000408f, +0.000330f, -0.000377f, +0.000584f, -0.000701f, -0.000187f, + +0.000292f, +0.000542f, +0.000008f, -0.000089f, -0.000097f, +0.000194f, -0.000187f, -0.000048f, -0.000356f, +0.000019f, + +0.000013f, +0.000224f, -0.000042f, -0.000256f, +0.000349f, -0.000088f, +0.000395f, -0.000285f, -0.000285f, -0.000172f, + +0.000279f, -0.000183f, -0.000193f, -0.000153f, +0.000281f, -0.000039f, -0.000117f, +0.000032f, +0.000076f, -0.000017f, + +0.000013f, -0.000129f, -0.000063f, +0.000098f, +0.000119f, -0.000014f, +0.000006f, +0.000048f, +0.000020f, -0.000006f, + +0.000002f, -0.000023f, +0.000059f, -0.000057f, +0.000052f, -0.000114f, -0.000014f, +0.000041f, +0.000027f, -0.000004f, + +0.000047f, +0.000088f, -0.000002f, -0.000084f, -0.000056f, -0.000021f, +0.000029f, -0.000041f, +0.000099f, -0.000029f, + -0.000005f, +0.000007f, +0.000006f, +0.000044f, -0.000038f, -0.000026f + }, + { + -0.000212f, -0.000617f, +0.002236f, +0.000422f, +0.000020f, -0.000066f, -0.000243f, -0.000136f, -0.000048f, +0.000231f, + -0.000128f, +0.000127f, +0.000148f, +0.000009f, +0.003645f, +0.001042f, -0.000397f, +0.000278f, -0.000021f, -0.001372f, + -0.000311f, -0.000561f, -0.005098f, +0.001133f, -0.000254f, +0.001895f, -0.001498f, -0.000408f, +0.000296f, +0.000526f, + -0.000709f, +0.000160f, +0.000544f, -0.000477f, +0.000149f, +0.000033f, +0.000252f, -0.000001f, +0.000311f, -0.000134f, + +0.000200f, +0.000094f, -0.000094f, -0.000052f, -0.000246f, -0.000148f, +0.000318f, -0.000038f, +0.000004f, +0.000083f, + -0.000013f, -0.000142f, -0.000105f, +0.000051f, +0.000078f, -0.000083f, -0.000146f, +0.000178f, -0.000064f, -0.000042f, + -0.000045f, +0.000023f, -0.000090f, -0.000049f, +0.000002f, -0.000065f, -0.000163f, -0.000039f, +0.000135f, +0.000087f, + -0.000048f, -0.000122f, +0.000025f, +0.000018f, -0.000087f, +0.000027f, -0.000040f, -0.000027f, +0.000043f, +0.000071f, + -0.000017f, -0.000004f, -0.000009f, +0.000008f, -0.000029f, -0.000012f, +0.000075f, -0.000018f, +0.000037f, +0.000062f, + -0.000001f, -0.000024f, -0.000047f, +0.000019f, +0.000005f, -0.000027f + }, + { + -0.000610f, -0.067001f, -0.001819f, -0.001149f, +0.000317f, -0.000064f, +0.001404f, -0.000310f, -0.000205f, +0.000006f, + -0.000010f, +0.000652f, -0.000120f, -0.000051f, +0.000799f, -0.000170f, +0.000077f, +0.001278f, -0.000838f, -0.000882f, + +0.000427f, +0.000120f, -0.000703f, +0.000440f, +0.000270f, -0.000386f, -0.000173f, -0.000299f, -0.000323f, -0.000273f, + -0.000223f, -0.000281f, -0.000303f, -0.000095f, -0.000292f, -0.000356f, -0.000033f, -0.000439f, +0.000047f, +0.000336f, + -0.000180f, -0.000045f, -0.000189f, -0.000001f, -0.000416f, +0.000476f, +0.000048f, +0.000154f, -0.000333f, -0.000064f, + -0.000104f, +0.000371f, +0.000197f, -0.000238f, -0.000071f, -0.000084f, +0.000003f, +0.000078f, +0.000095f, +0.000053f, + +0.000087f, -0.000087f, -0.000127f, +0.000055f, +0.000150f, -0.000010f, -0.000025f, -0.000084f, +0.000042f, -0.000032f, + -0.000052f, +0.000056f, -0.000069f, -0.000112f, +0.000092f, +0.000130f, -0.000173f, +0.000046f, +0.000052f, -0.000044f, + +0.000008f, +0.000053f, -0.000021f, +0.000019f, +0.000034f, +0.000001f, -0.000078f, +0.000011f, +0.000006f, +0.000019f, + +0.000018f, -0.000041f, -0.000004f, -0.000012f, +0.000022f, +0.000018f + }, + { + -0.000318f, -0.001686f, +0.001180f, +0.000132f, +0.000233f, +0.000046f, -0.000045f, -0.000422f, +0.000189f, +0.000135f, + +0.000271f, -0.000052f, -0.000075f, -0.002806f, -0.000383f, +0.001129f, -0.001605f, -0.000544f, -0.000857f, -0.000819f, + +0.000209f, -0.000834f, +0.000253f, -0.001403f, -0.000054f, +0.001473f, -0.000080f, +0.001111f, -0.000126f, +0.000065f, + +0.000150f, -0.000372f, +0.000388f, -0.000196f, -0.000433f, +0.000139f, -0.000013f, -0.000379f, +0.000383f, +0.000003f, + -0.000178f, +0.000229f, +0.000084f, -0.000301f, +0.000019f, -0.000145f, -0.000118f, +0.000202f, -0.000003f, +0.000091f, + +0.000110f, -0.000060f, -0.000181f, -0.000048f, +0.000262f, +0.000107f, -0.000181f, -0.000039f, -0.000059f, +0.000112f, + +0.000118f, +0.000152f, -0.000051f, +0.000044f, +0.000038f, -0.000032f, +0.000025f, -0.000058f, +0.000061f, +0.000098f, + +0.000079f, +0.000053f, -0.000052f, -0.000134f, +0.000039f, +0.000105f, +0.000070f, -0.000040f, +0.000043f, -0.000039f, + +0.000023f, +0.000086f, -0.000076f, -0.000053f, -0.000019f, -0.000048f, -0.000061f, +0.000030f, +0.000045f, -0.000008f, + -0.000035f, +0.000029f, +0.000002f, -0.000009f, -0.000006f, -0.000041f + }, + { + +0.001896f, -0.005000f, +0.000813f, +0.001174f, -0.000293f, -0.000207f, +0.000673f, -0.000269f, -0.000940f, -0.000627f, + +0.000230f, -0.000203f, +0.000508f, +0.000749f, -0.000694f, +0.000089f, -0.000724f, +0.000047f, +0.000238f, +0.000137f, + -0.000414f, -0.000409f, -0.000245f, -0.000037f, -0.000189f, -0.000037f, -0.000239f, -0.000075f, +0.000065f, -0.000221f, + -0.000114f, +0.000201f, -0.000531f, -0.000401f, +0.000668f, +0.000393f, +0.000035f, -0.000125f, +0.000170f, -0.000176f, + -0.000141f, +0.000021f, +0.000192f, +0.000185f, -0.000319f, +0.000062f, +0.000384f, -0.000017f, -0.000091f, -0.000021f, + +0.000099f, -0.000007f, -0.000083f, +0.000210f, +0.000124f, -0.000132f, +0.000119f, +0.000118f, -0.000071f, +0.000140f, + -0.000112f, -0.000108f, +0.000049f, -0.000066f, +0.000099f, -0.000063f, -0.000001f, +0.000021f, -0.000077f, +0.000038f, + +0.000050f, +0.000016f, -0.000107f, +0.000044f, -0.000007f, +0.000046f, -0.000073f, +0.000102f, -0.000062f, +0.000071f, + +0.000034f, -0.000040f, -0.000083f, +0.000014f, -0.000080f, -0.000070f, +0.000024f, +0.000014f, -0.000027f, +0.000035f, + -0.000021f, +0.000074f, -0.000005f, -0.000033f, -0.000043f, +0.000008f + }, + { + +0.000374f, +0.003632f, -0.001044f, -0.000232f, -0.000129f, -0.000028f, +0.000310f, -0.000643f, -0.000465f, -0.000386f, + -0.000223f, +0.000556f, -0.000293f, -0.000082f, -0.001506f, -0.000219f, +0.001129f, -0.000477f, +0.000025f, +0.001911f, + -0.000194f, -0.001118f, -0.000002f, +0.000153f, -0.000023f, -0.000642f, +0.000282f, -0.000311f, -0.000098f, +0.000005f, + -0.000747f, -0.000289f, -0.000533f, +0.000102f, -0.000215f, +0.000416f, -0.000096f, -0.000226f, +0.000075f, -0.000232f, + +0.000186f, -0.000055f, -0.000160f, -0.000053f, -0.000020f, -0.000225f, -0.000018f, -0.000031f, -0.000062f, +0.000006f, + +0.000029f, +0.000140f, +0.000175f, +0.000059f, -0.000086f, +0.000023f, -0.000055f, -0.000068f, +0.000021f, -0.000035f, + -0.000104f, +0.000117f, +0.000057f, -0.000102f, -0.000121f, +0.000074f, -0.000049f, -0.000067f, +0.000064f, +0.000028f, + +0.000040f, +0.000037f, -0.000032f, -0.000057f, +0.000031f, +0.000051f, +0.000074f, +0.000018f, -0.000108f, +0.000009f, + -0.000009f, -0.000050f, +0.000071f, +0.000084f, -0.000013f, -0.000039f, +0.000045f, -0.000008f, +0.000075f, -0.000033f, + -0.000029f, -0.000000f, -0.000020f, +0.000023f, -0.000030f, +0.000047f + }, + { + -0.000774f, -0.018949f, -0.000005f, -0.000322f, -0.000667f, +0.000288f, +0.000345f, -0.000241f, +0.000039f, -0.000334f, + +0.000794f, -0.000047f, +0.000285f, -0.000518f, -0.000289f, -0.000144f, +0.000028f, +0.000321f, -0.000226f, +0.000209f, + -0.000525f, +0.000056f, +0.000089f, +0.000033f, -0.000306f, +0.000345f, -0.000339f, +0.000348f, -0.000179f, +0.000467f, + +0.000174f, -0.000125f, +0.000008f, -0.000032f, +0.000321f, +0.000414f, +0.000242f, -0.000026f, -0.000323f, -0.000259f, + -0.000308f, -0.000165f, -0.000310f, -0.000106f, -0.000126f, -0.000030f, +0.000104f, -0.000020f, +0.000074f, -0.000029f, + -0.000124f, +0.000177f, -0.000108f, +0.000162f, +0.000013f, +0.000102f, +0.000022f, +0.000049f, +0.000225f, -0.000291f, + +0.000051f, +0.000060f, -0.000038f, -0.000116f, +0.000172f, +0.000020f, -0.000016f, +0.000022f, -0.000083f, -0.000125f, + +0.000109f, +0.000011f, -0.000039f, -0.000019f, -0.000001f, +0.000033f, +0.000003f, +0.000044f, +0.000027f, -0.000051f, + -0.000014f, -0.000077f, +0.000028f, +0.000003f, -0.000023f, +0.000073f, -0.000041f, -0.000005f, -0.000010f, -0.000072f, + -0.000002f, -0.000041f, +0.000030f, +0.000040f, -0.000019f, -0.000006f + }, + { + +0.000101f, +0.002328f, +0.000457f, -0.000437f, +0.000049f, -0.000136f, +0.000425f, -0.000097f, -0.000289f, -0.000691f, + -0.000397f, +0.000243f, +0.001545f, -0.001485f, +0.000028f, +0.003356f, +0.000838f, -0.000756f, +0.000382f, +0.000131f, + +0.003315f, -0.001180f, +0.001592f, +0.000679f, +0.000601f, -0.000545f, +0.000539f, +0.000318f, -0.000090f, -0.001058f, + -0.000338f, -0.000152f, -0.000147f, +0.000070f, -0.000279f, +0.000220f, -0.000367f, +0.000449f, -0.000219f, +0.000142f, + +0.000064f, +0.000016f, -0.000053f, +0.000167f, -0.000167f, +0.000021f, +0.000094f, -0.000106f, +0.000084f, -0.000087f, + -0.000082f, -0.000025f, +0.000190f, -0.000033f, -0.000043f, +0.000012f, +0.000280f, -0.000061f, +0.000008f, +0.000145f, + -0.000103f, -0.000250f, +0.000031f, +0.000088f, +0.000108f, -0.000106f, +0.000110f, +0.000128f, -0.000130f, -0.000009f, + +0.000061f, -0.000012f, -0.000020f, -0.000010f, -0.000091f, -0.000058f, +0.000065f, +0.000042f, +0.000035f, +0.000023f, + +0.000062f, +0.000010f, -0.000057f, +0.000013f, -0.000036f, +0.000007f, -0.000073f, +0.000065f, +0.000020f, +0.000002f, + +0.000006f, -0.000090f, -0.000016f, +0.000068f, -0.000066f, -0.000030f + }, + { + +0.000898f, +0.006315f, -0.000280f, -0.000004f, -0.000029f, -0.001378f, -0.001251f, +0.000039f, -0.000273f, +0.000526f, + -0.000679f, -0.000202f, +0.000347f, -0.001052f, -0.001724f, +0.000441f, +0.000028f, -0.000315f, -0.000066f, -0.000152f, + +0.000051f, -0.000617f, +0.000559f, -0.000603f, -0.000140f, -0.000333f, -0.000244f, -0.000562f, -0.000278f, +0.000317f, + -0.000211f, +0.000058f, +0.000198f, -0.000108f, -0.000005f, -0.000246f, +0.000037f, -0.000302f, -0.000091f, -0.000126f, + +0.000046f, -0.000210f, +0.000143f, +0.000238f, +0.000128f, +0.000143f, -0.000246f, -0.000239f, -0.000028f, -0.000073f, + +0.000217f, -0.000020f, -0.000157f, +0.000049f, +0.000202f, +0.000031f, -0.000057f, -0.000130f, +0.000163f, +0.000034f, + +0.000099f, -0.000004f, +0.000067f, +0.000103f, -0.000048f, +0.000006f, -0.000135f, -0.000022f, +0.000006f, +0.000086f, + -0.000060f, +0.000029f, +0.000003f, +0.000053f, +0.000009f, +0.000001f, -0.000065f, +0.000096f, +0.000101f, -0.000008f, + -0.000062f, +0.000024f, +0.000060f, -0.000046f, -0.000018f, +0.000061f, -0.000091f, -0.000050f, +0.000046f, +0.000026f, + -0.000004f, +0.000068f, -0.000012f, -0.000012f, -0.000027f, +0.000018f + }, + { + -0.000156f, +0.003133f, -0.001743f, -0.000375f, +0.000238f, -0.000076f, +0.000383f, +0.000160f, -0.000393f, +0.000207f, + +0.000089f, +0.000438f, -0.002125f, +0.004561f, -0.004495f, +0.004301f, +0.000800f, +0.000721f, -0.000090f, +0.000257f, + +0.001897f, +0.000066f, -0.000189f, +0.000254f, -0.000261f, -0.000322f, +0.000370f, -0.000112f, -0.000595f, +0.000067f, + -0.000847f, -0.000078f, +0.000641f, -0.000094f, +0.000216f, -0.000406f, -0.000122f, +0.000236f, +0.000273f, -0.000321f, + -0.000290f, -0.000333f, +0.000243f, +0.000389f, -0.000197f, +0.000009f, +0.000128f, +0.000017f, -0.000139f, +0.000033f, + +0.000047f, +0.000028f, +0.000014f, +0.000086f, +0.000108f, -0.000032f, -0.000177f, +0.000041f, -0.000220f, -0.000177f, + +0.000103f, +0.000124f, -0.000162f, -0.000033f, +0.000065f, +0.000076f, +0.000176f, -0.000285f, +0.000016f, +0.000019f, + +0.000058f, -0.000136f, -0.000015f, +0.000053f, -0.000041f, +0.000151f, -0.000050f, -0.000067f, +0.000006f, +0.000033f, + +0.000111f, +0.000001f, +0.000052f, -0.000098f, +0.000028f, -0.000000f, +0.000007f, +0.000041f, +0.000019f, -0.000025f, + +0.000001f, +0.000031f, -0.000040f, -0.000008f, +0.000018f, +0.000013f + } + }, + { + { + -0.002133f, +0.013127f, +0.010778f, +0.000181f, -0.001480f, +0.000319f, +0.000430f, +0.000187f, +0.000358f, -0.000332f, + -0.000688f, -0.000216f, +0.000261f, +0.000817f, +0.000244f, -0.000098f, +0.000729f, -0.000508f, +0.000605f, -0.000668f, + +0.000037f, +0.000297f, +0.000597f, +0.000011f, -0.000189f, -0.000298f, +0.000257f, -0.001031f, +0.000546f, -0.000126f, + -0.000143f, +0.000234f, -0.000017f, +0.000246f, +0.000067f, +0.000153f, +0.000238f, -0.000390f, -0.000257f, +0.000131f, + +0.000162f, +0.000043f, -0.000216f, -0.000214f, +0.000410f, -0.000506f, -0.000083f, +0.000107f, -0.000149f, -0.000142f, + -0.000005f, -0.000204f, -0.000057f, +0.000023f, -0.000038f, +0.000029f, -0.000089f, +0.000035f, +0.000150f, +0.000051f, + -0.000094f, -0.000076f, -0.000008f, +0.000065f, -0.000015f, +0.000058f, +0.000055f, -0.000078f, +0.000000f, -0.000017f, + +0.000048f, +0.000053f, +0.000009f, -0.000035f, -0.000057f, +0.000121f, +0.000018f, -0.000064f, +0.000098f, -0.000043f, + -0.000016f, -0.000093f, -0.000027f, +0.000003f, -0.000025f, +0.000071f, -0.000068f, +0.000039f, -0.000015f, -0.000026f, + -0.000022f, +0.000014f, -0.000025f, +0.000030f, +0.000018f, +0.000004f + }, + { + +0.000099f, +0.002116f, -0.001287f, +0.000607f, -0.000746f, +0.000050f, +0.000091f, -0.000060f, -0.000548f, +0.000532f, + -0.000009f, -0.000122f, -0.001086f, +0.000734f, -0.004831f, +0.001120f, +0.001167f, -0.000782f, -0.000707f, +0.001241f, + -0.000423f, -0.000801f, +0.000509f, +0.000254f, -0.000171f, -0.000683f, -0.000720f, +0.000094f, +0.000285f, +0.000411f, + +0.000042f, +0.000772f, -0.000095f, -0.000371f, +0.000505f, -0.000006f, -0.000117f, -0.000264f, -0.000074f, -0.000058f, + +0.000075f, -0.000002f, -0.000268f, -0.000133f, +0.000180f, -0.000238f, -0.000210f, -0.000109f, +0.000181f, +0.000137f, + -0.000157f, +0.000375f, -0.000056f, -0.000082f, -0.000341f, +0.000227f, +0.000111f, -0.000102f, -0.000003f, +0.000078f, + -0.000052f, -0.000066f, +0.000038f, +0.000085f, +0.000053f, -0.000007f, +0.000094f, -0.000126f, -0.000101f, +0.000021f, + +0.000029f, -0.000087f, +0.000086f, +0.000095f, -0.000016f, -0.000107f, +0.000033f, +0.000112f, +0.000033f, -0.000023f, + -0.000118f, +0.000083f, +0.000061f, -0.000001f, +0.000021f, -0.000021f, -0.000053f, +0.000005f, +0.000015f, -0.000097f, + +0.000027f, +0.000048f, +0.000014f, -0.000016f, -0.000045f, -0.000007f + }, + { + +0.000066f, +0.006779f, -0.002095f, +0.000881f, -0.000909f, +0.000015f, -0.000089f, -0.000463f, +0.000089f, +0.000427f, + +0.000282f, +0.000044f, -0.000202f, +0.001103f, +0.000377f, -0.000427f, +0.000253f, -0.000251f, +0.000123f, -0.000929f, + +0.000477f, -0.000949f, -0.000013f, +0.000421f, -0.000200f, +0.000099f, -0.000082f, -0.000317f, +0.000221f, -0.000306f, + +0.000211f, +0.000231f, +0.000189f, +0.000029f, +0.000179f, +0.000499f, -0.000067f, -0.000109f, +0.000100f, -0.000154f, + +0.000096f, -0.000036f, +0.000394f, -0.000308f, -0.000050f, -0.000186f, -0.000044f, -0.000107f, -0.000123f, -0.000057f, + +0.000155f, +0.000110f, -0.000222f, +0.000020f, -0.000168f, -0.000122f, -0.000031f, -0.000072f, +0.000022f, +0.000072f, + +0.000060f, -0.000067f, -0.000030f, -0.000126f, +0.000080f, -0.000096f, -0.000036f, +0.000012f, +0.000096f, -0.000062f, + -0.000007f, +0.000121f, -0.000046f, -0.000049f, +0.000004f, +0.000008f, +0.000108f, +0.000017f, -0.000045f, +0.000002f, + +0.000043f, -0.000000f, -0.000069f, +0.000053f, +0.000071f, -0.000023f, -0.000037f, -0.000041f, +0.000032f, -0.000012f, + -0.000026f, +0.000012f, +0.000038f, -0.000020f, +0.000027f, +0.000045f + }, + { + -0.013188f, +0.027633f, +0.002104f, -0.004124f, +0.000554f, -0.000147f, -0.000290f, -0.000079f, -0.000482f, -0.000164f, + +0.000212f, +0.000674f, +0.000228f, -0.000362f, -0.001468f, +0.000677f, +0.000163f, +0.000016f, +0.000421f, +0.000039f, + -0.000029f, +0.000593f, -0.000164f, -0.000221f, +0.000245f, +0.000199f, +0.000344f, -0.000255f, +0.000460f, -0.000198f, + -0.000358f, +0.000167f, -0.000138f, -0.000148f, +0.000201f, -0.000476f, -0.000190f, -0.000217f, -0.000056f, -0.000003f, + +0.000064f, -0.000193f, -0.000146f, +0.000020f, +0.000215f, +0.000073f, -0.000329f, -0.000158f, -0.000204f, +0.000221f, + -0.000198f, +0.000071f, +0.000113f, -0.000069f, +0.000131f, +0.000012f, +0.000035f, -0.000178f, -0.000088f, +0.000148f, + +0.000154f, -0.000034f, -0.000134f, -0.000025f, -0.000053f, -0.000030f, +0.000059f, -0.000074f, +0.000088f, -0.000042f, + -0.000112f, -0.000030f, +0.000155f, +0.000027f, -0.000017f, +0.000032f, -0.000019f, -0.000014f, -0.000019f, +0.000030f, + -0.000006f, -0.000046f, -0.000049f, +0.000001f, -0.000013f, +0.000017f, +0.000038f, -0.000069f, +0.000068f, +0.000032f, + -0.000022f, -0.000036f, +0.000018f, +0.000013f, -0.000018f, -0.000031f + }, + { + -0.000279f, -0.006495f, +0.001004f, +0.000501f, -0.000359f, +0.000107f, +0.000075f, +0.000075f, -0.000010f, -0.000274f, + +0.000000f, -0.000128f, +0.000330f, -0.001575f, +0.000299f, +0.001192f, -0.000448f, +0.002894f, -0.005711f, -0.000593f, + -0.000192f, +0.000460f, -0.000934f, +0.001866f, -0.000325f, -0.000466f, +0.002064f, -0.000369f, +0.000826f, +0.000995f, + -0.000824f, +0.000563f, +0.000770f, +0.000072f, +0.000001f, -0.000243f, -0.000191f, -0.000165f, -0.000034f, +0.000027f, + +0.000136f, +0.000361f, +0.000000f, -0.000311f, +0.000301f, -0.000046f, -0.000058f, +0.000188f, +0.000200f, +0.000159f, + -0.000230f, +0.000130f, +0.000205f, +0.000049f, -0.000171f, +0.000138f, +0.000090f, -0.000093f, +0.000090f, +0.000001f, + -0.000108f, -0.000068f, +0.000007f, -0.000016f, -0.000000f, -0.000028f, -0.000070f, -0.000046f, +0.000022f, +0.000017f, + -0.000074f, +0.000041f, +0.000029f, -0.000020f, +0.000025f, +0.000078f, -0.000019f, +0.000036f, +0.000015f, -0.000069f, + -0.000037f, -0.000098f, +0.000039f, +0.000055f, -0.000089f, +0.000047f, -0.000020f, -0.000008f, +0.000030f, -0.000009f, + +0.000003f, -0.000009f, -0.000051f, -0.000003f, +0.000054f, +0.000012f + }, + { + -0.018207f, +0.002215f, +0.002852f, +0.002306f, +0.000009f, +0.000039f, +0.000070f, -0.001291f, +0.000522f, +0.000821f, + -0.000817f, -0.000649f, +0.000117f, +0.000698f, -0.001364f, -0.000041f, +0.000184f, +0.000235f, -0.000191f, +0.000229f, + +0.000411f, -0.000544f, +0.000177f, +0.000305f, -0.000016f, +0.000037f, -0.000377f, +0.000118f, -0.000146f, +0.000200f, + -0.000063f, +0.000123f, +0.000021f, -0.000068f, -0.000315f, +0.000526f, -0.000064f, -0.000117f, -0.000169f, +0.000301f, + +0.000278f, -0.000348f, +0.000051f, +0.000087f, +0.000621f, -0.000315f, +0.000297f, -0.000023f, +0.000042f, -0.000145f, + -0.000130f, +0.000252f, +0.000074f, -0.000031f, -0.000213f, +0.000115f, -0.000111f, -0.000155f, -0.000133f, +0.000016f, + +0.000172f, +0.000040f, -0.000067f, -0.000095f, -0.000114f, +0.000007f, +0.000091f, -0.000087f, +0.000028f, +0.000050f, + +0.000035f, -0.000016f, -0.000078f, +0.000018f, -0.000007f, +0.000034f, -0.000045f, -0.000076f, +0.000011f, +0.000022f, + -0.000075f, -0.000009f, +0.000033f, +0.000113f, +0.000010f, +0.000001f, -0.000045f, +0.000032f, -0.000088f, +0.000051f, + -0.000003f, -0.000013f, -0.000015f, -0.000023f, +0.000039f, -0.000001f + }, + { + +0.000485f, +0.001339f, -0.001365f, +0.000007f, +0.000016f, +0.000134f, +0.000019f, -0.000011f, -0.000421f, +0.000190f, + +0.000085f, +0.000124f, -0.000114f, -0.000568f, +0.003899f, +0.002448f, +0.001792f, +0.000002f, +0.000138f, -0.000991f, + +0.000302f, +0.000400f, -0.003159f, +0.001440f, -0.000129f, +0.000643f, -0.001115f, -0.001162f, +0.000505f, +0.000118f, + -0.000363f, +0.000072f, -0.000232f, +0.000371f, -0.000101f, -0.000503f, +0.000372f, -0.000101f, +0.000209f, +0.000302f, + -0.000215f, -0.000255f, +0.000289f, -0.000175f, +0.000277f, +0.000018f, -0.000102f, -0.000187f, +0.000079f, -0.000063f, + +0.000227f, +0.000002f, -0.000045f, -0.000052f, +0.000058f, -0.000009f, -0.000028f, -0.000128f, -0.000030f, -0.000028f, + -0.000118f, -0.000036f, +0.000076f, +0.000013f, +0.000005f, +0.000016f, +0.000091f, -0.000074f, -0.000112f, -0.000098f, + +0.000191f, +0.000056f, -0.000087f, +0.000027f, -0.000011f, -0.000051f, +0.000017f, -0.000069f, -0.000060f, -0.000040f, + +0.000036f, -0.000010f, +0.000017f, +0.000006f, +0.000003f, -0.000025f, -0.000043f, +0.000033f, +0.000002f, -0.000010f, + +0.000041f, +0.000039f, +0.000045f, -0.000035f, +0.000033f, +0.000009f + }, + { + +0.008606f, -0.061039f, -0.001233f, -0.000386f, +0.000399f, -0.000249f, +0.000433f, +0.000265f, -0.000094f, +0.000335f, + -0.000025f, -0.000717f, +0.000784f, -0.000057f, -0.000719f, +0.000057f, -0.000434f, -0.000174f, +0.000873f, +0.000460f, + -0.000329f, +0.000395f, -0.000636f, -0.000591f, -0.000223f, +0.000245f, -0.000121f, -0.000083f, -0.000202f, -0.000040f, + -0.000397f, -0.000423f, +0.000055f, +0.000106f, +0.000296f, -0.000019f, -0.000495f, -0.000221f, +0.000014f, +0.000102f, + +0.000070f, +0.000239f, +0.000039f, -0.000219f, +0.000242f, +0.000305f, -0.000050f, +0.000152f, +0.000369f, +0.000067f, + -0.000204f, -0.000195f, +0.000049f, +0.000299f, +0.000064f, +0.000009f, -0.000169f, -0.000005f, -0.000065f, -0.000074f, + +0.000117f, +0.000157f, +0.000082f, -0.000104f, -0.000042f, +0.000034f, +0.000007f, -0.000005f, -0.000023f, +0.000056f, + +0.000038f, -0.000021f, +0.000046f, +0.000006f, -0.000146f, -0.000003f, +0.000132f, -0.000102f, -0.000045f, +0.000043f, + -0.000085f, -0.000008f, +0.000002f, +0.000023f, +0.000024f, +0.000027f, +0.000035f, -0.000035f, +0.000016f, -0.000026f, + -0.000030f, +0.000018f, +0.000017f, -0.000020f, -0.000028f, +0.000003f + }, + { + +0.000740f, +0.000946f, -0.003205f, +0.000381f, -0.000374f, -0.000007f, +0.000262f, +0.000475f, +0.000151f, -0.000069f, + +0.000143f, -0.000057f, +0.000511f, +0.002314f, +0.003497f, +0.004022f, -0.000682f, +0.000103f, +0.000259f, -0.000818f, + -0.001135f, +0.000053f, +0.000848f, -0.000158f, -0.001057f, -0.000245f, +0.001048f, -0.000619f, -0.000371f, +0.000123f, + -0.000336f, +0.000457f, -0.000194f, +0.000191f, +0.000131f, -0.000521f, -0.000110f, +0.000129f, -0.000263f, +0.000202f, + +0.000005f, -0.000274f, +0.000440f, -0.000038f, +0.000110f, -0.000357f, -0.000028f, +0.000143f, -0.000088f, -0.000185f, + +0.000112f, +0.000058f, +0.000167f, -0.000126f, -0.000057f, -0.000030f, +0.000198f, +0.000019f, -0.000300f, -0.000071f, + -0.000062f, +0.000079f, +0.000003f, -0.000119f, +0.000068f, +0.000109f, +0.000145f, +0.000069f, -0.000037f, -0.000027f, + -0.000001f, +0.000028f, +0.000077f, +0.000093f, -0.000055f, -0.000029f, +0.000007f, +0.000011f, -0.000056f, +0.000018f, + -0.000088f, -0.000012f, +0.000095f, +0.000045f, +0.000038f, +0.000021f, -0.000001f, -0.000095f, -0.000014f, +0.000004f, + +0.000003f, -0.000031f, +0.000012f, +0.000025f, +0.000012f, +0.000024f + }, + { + -0.001307f, -0.015003f, -0.001682f, +0.001021f, +0.000424f, -0.001813f, +0.000593f, +0.000018f, +0.000360f, +0.000353f, + +0.000045f, -0.000190f, -0.000557f, -0.000373f, -0.000077f, -0.001087f, -0.000197f, +0.000348f, -0.000478f, +0.000033f, + +0.000512f, -0.000397f, +0.000050f, +0.000342f, +0.000238f, -0.000346f, -0.000366f, +0.000514f, -0.000186f, -0.000590f, + -0.000244f, -0.000273f, -0.000154f, -0.000066f, -0.000277f, -0.000186f, +0.000327f, +0.000121f, -0.000322f, +0.000341f, + -0.000220f, -0.000128f, -0.000162f, +0.000190f, +0.000395f, -0.000159f, -0.000284f, +0.000012f, +0.000256f, +0.000055f, + -0.000323f, +0.000102f, -0.000169f, -0.000447f, +0.000218f, +0.000143f, -0.000033f, -0.000074f, +0.000084f, -0.000127f, + +0.000239f, +0.000002f, +0.000003f, -0.000083f, -0.000019f, +0.000093f, -0.000049f, +0.000002f, +0.000069f, -0.000034f, + -0.000036f, -0.000023f, +0.000026f, -0.000035f, +0.000036f, -0.000037f, +0.000003f, -0.000057f, +0.000060f, -0.000042f, + +0.000012f, +0.000044f, +0.000030f, -0.000042f, +0.000054f, -0.000025f, -0.000061f, -0.000016f, +0.000009f, -0.000064f, + +0.000005f, -0.000045f, +0.000045f, +0.000025f, +0.000036f, -0.000037f + }, + { + -0.000323f, +0.007863f, +0.002719f, -0.001308f, +0.000225f, -0.000365f, -0.000381f, -0.000254f, -0.000060f, +0.000220f, + -0.000116f, -0.000649f, +0.000627f, +0.000101f, -0.000988f, -0.000815f, +0.000953f, +0.001399f, +0.001087f, -0.001875f, + +0.000097f, +0.000747f, +0.000634f, -0.000282f, -0.000328f, -0.000098f, -0.000642f, -0.000504f, -0.000421f, +0.000020f, + +0.000280f, +0.000142f, -0.000587f, -0.000358f, +0.000011f, -0.000445f, -0.000243f, +0.000029f, +0.000238f, +0.000120f, + -0.000015f, +0.000224f, -0.000019f, -0.000211f, -0.000081f, +0.000028f, -0.000004f, +0.000217f, +0.000046f, +0.000055f, + -0.000104f, -0.000218f, -0.000037f, +0.000083f, +0.000108f, +0.000033f, +0.000100f, +0.000044f, -0.000080f, +0.000045f, + +0.000078f, -0.000198f, +0.000006f, +0.000059f, +0.000096f, -0.000134f, +0.000088f, -0.000014f, -0.000158f, +0.000001f, + -0.000046f, +0.000047f, +0.000049f, +0.000028f, -0.000062f, -0.000038f, -0.000018f, +0.000018f, +0.000131f, -0.000056f, + -0.000002f, +0.000063f, -0.000076f, -0.000035f, +0.000045f, +0.000014f, -0.000022f, +0.000035f, -0.000036f, +0.000062f, + +0.000012f, -0.000014f, +0.000024f, -0.000003f, +0.000002f, -0.000068f + }, + { + +0.004795f, -0.014132f, -0.001647f, +0.000048f, +0.000714f, -0.002166f, +0.000841f, +0.000403f, +0.000128f, -0.000360f, + -0.000670f, +0.000888f, +0.000296f, -0.000203f, +0.000440f, +0.000765f, +0.000860f, -0.000198f, -0.000011f, -0.000618f, + +0.000414f, +0.000133f, +0.000172f, -0.000216f, +0.000243f, +0.000017f, +0.000180f, -0.000650f, +0.000123f, -0.000318f, + +0.000237f, -0.000211f, -0.000310f, +0.000702f, -0.000230f, -0.000212f, +0.000026f, +0.000310f, +0.000479f, -0.000037f, + +0.000053f, -0.000014f, +0.000354f, -0.000168f, +0.000019f, -0.000241f, +0.000146f, +0.000083f, -0.000115f, -0.000141f, + -0.000001f, -0.000078f, +0.000076f, -0.000106f, +0.000079f, +0.000067f, -0.000007f, -0.000032f, +0.000032f, +0.000039f, + -0.000025f, -0.000072f, +0.000095f, +0.000061f, -0.000135f, -0.000036f, +0.000053f, -0.000019f, +0.000070f, +0.000037f, + -0.000128f, +0.000053f, -0.000002f, -0.000027f, -0.000011f, -0.000035f, -0.000012f, +0.000020f, +0.000019f, +0.000008f, + +0.000027f, -0.000005f, -0.000068f, -0.000031f, +0.000009f, -0.000096f, +0.000058f, -0.000004f, -0.000009f, +0.000027f, + -0.000052f, +0.000004f, -0.000057f, -0.000043f, +0.000021f, +0.000006f + }, + { + -0.000019f, +0.002071f, +0.000743f, +0.000835f, -0.000165f, +0.000219f, -0.000524f, +0.000390f, +0.000116f, -0.000290f, + +0.000624f, -0.000195f, -0.000316f, -0.001288f, +0.002646f, -0.000356f, +0.001940f, -0.000687f, -0.000640f, +0.000083f, + +0.000248f, +0.001567f, +0.000608f, -0.000859f, +0.001267f, -0.000313f, -0.000248f, +0.000629f, +0.000170f, +0.000738f, + -0.000502f, +0.000503f, +0.000072f, +0.000295f, -0.000136f, -0.000143f, +0.000445f, -0.000072f, +0.000118f, -0.000247f, + -0.000242f, -0.000217f, -0.000004f, +0.000026f, +0.000162f, +0.000027f, +0.000103f, -0.000372f, -0.000074f, +0.000155f, + +0.000060f, +0.000001f, -0.000165f, +0.000031f, +0.000080f, -0.000104f, -0.000294f, +0.000054f, -0.000034f, -0.000011f, + +0.000107f, +0.000215f, -0.000150f, -0.000099f, -0.000091f, +0.000144f, -0.000050f, -0.000002f, +0.000057f, -0.000048f, + +0.000015f, -0.000047f, +0.000028f, +0.000023f, +0.000098f, -0.000033f, -0.000057f, -0.000084f, -0.000006f, +0.000010f, + -0.000051f, +0.000056f, +0.000022f, +0.000033f, +0.000037f, -0.000003f, +0.000040f, -0.000065f, +0.000009f, -0.000009f, + +0.000021f, +0.000080f, -0.000053f, -0.000079f, +0.000080f, -0.000021f + }, + { + -0.002299f, +0.003264f, +0.001841f, +0.001737f, -0.000193f, +0.000035f, -0.000453f, +0.000415f, +0.000377f, -0.000638f, + +0.000434f, +0.000256f, -0.000797f, +0.000756f, +0.000511f, -0.000849f, +0.000302f, -0.000387f, +0.000133f, -0.000217f, + +0.000314f, +0.000204f, +0.000079f, +0.000395f, +0.000048f, +0.000238f, -0.000040f, -0.000596f, -0.000310f, -0.000556f, + +0.000467f, -0.000145f, -0.000068f, +0.000349f, +0.000668f, -0.000260f, -0.000049f, +0.000052f, +0.000082f, +0.000480f, + -0.000275f, -0.000288f, -0.000424f, -0.000358f, -0.000185f, +0.000123f, +0.000156f, +0.000209f, -0.000109f, +0.000173f, + -0.000315f, +0.000215f, -0.000026f, -0.000153f, +0.000074f, -0.000007f, +0.000170f, +0.000057f, -0.000133f, +0.000044f, + -0.000013f, -0.000003f, -0.000010f, -0.000072f, +0.000042f, +0.000006f, +0.000160f, -0.000046f, +0.000004f, -0.000021f, + +0.000096f, -0.000039f, +0.000041f, -0.000088f, -0.000004f, +0.000043f, +0.000099f, -0.000073f, -0.000043f, +0.000052f, + +0.000030f, -0.000035f, +0.000009f, +0.000073f, +0.000013f, +0.000000f, +0.000110f, -0.000045f, -0.000080f, +0.000027f, + +0.000015f, -0.000043f, +0.000039f, +0.000011f, +0.000037f, -0.000040f + }, + { + +0.000032f, +0.003841f, +0.000562f, +0.000214f, +0.000094f, -0.000056f, -0.000086f, +0.000003f, -0.000345f, +0.000319f, + +0.000350f, -0.000070f, +0.000436f, +0.005640f, -0.015380f, -0.000115f, +0.001282f, +0.001322f, -0.000898f, -0.000287f, + +0.001610f, +0.000118f, -0.000874f, +0.000845f, +0.001152f, +0.000500f, -0.000004f, +0.000547f, -0.000243f, +0.000943f, + -0.000343f, -0.000701f, +0.000361f, -0.000573f, -0.000510f, +0.000636f, -0.000140f, -0.000937f, +0.000681f, -0.000045f, + +0.000180f, -0.000169f, -0.000258f, -0.000410f, +0.000393f, -0.000177f, +0.000084f, +0.000323f, -0.000048f, -0.000026f, + +0.000087f, +0.000044f, -0.000035f, -0.000234f, +0.000011f, +0.000208f, +0.000011f, -0.000069f, +0.000069f, -0.000053f, + -0.000275f, +0.000026f, -0.000026f, -0.000051f, -0.000018f, -0.000086f, -0.000019f, +0.000287f, -0.000100f, -0.000043f, + -0.000019f, +0.000079f, -0.000073f, -0.000038f, -0.000000f, -0.000129f, +0.000118f, +0.000053f, -0.000026f, -0.000081f, + -0.000052f, +0.000005f, +0.000050f, +0.000124f, -0.000090f, +0.000021f, +0.000020f, -0.000043f, -0.000016f, +0.000055f, + -0.000014f, +0.000006f, +0.000045f, +0.000002f, -0.000051f, +0.000006f + } + } +}; + +const float leftBRIRImag[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]= +{ + { + { + +0.009895f, -0.028551f, +0.030329f, +0.054707f, -0.029041f, +0.023876f, +0.003374f, +0.000340f, -0.018431f, +0.004622f, + +0.000915f, -0.022215f, +0.010646f, +0.009840f, +0.011695f, -0.023007f, +0.004257f, -0.008676f, +0.020758f, -0.006481f, + +0.009139f, -0.006925f, +0.006698f, -0.010971f, +0.013021f, -0.005878f, -0.008686f, -0.002255f, +0.011478f, -0.005832f, + +0.008100f, -0.004175f, +0.004193f, -0.001489f, -0.002079f, +0.017929f, -0.002225f, -0.008913f, -0.005051f, +0.001066f, + +0.012284f, +0.011686f, -0.013601f, -0.004982f, +0.002401f, +0.003552f, -0.000908f, +0.002811f, -0.001353f, +0.001435f, + +0.000421f, -0.000537f, -0.004646f, +0.007740f, -0.004177f, -0.005006f, +0.000972f, +0.002837f, +0.000522f, +0.002567f, + -0.000992f, +0.001383f, -0.000484f, +0.001111f, +0.000479f, -0.000733f, +0.002578f, -0.002489f, -0.004365f, -0.000694f, + -0.001548f, +0.001112f, +0.000010f, +0.002147f, -0.006195f, +0.006187f, +0.000552f, -0.000054f, +0.002942f, -0.001335f, + -0.002581f, +0.001535f, -0.000257f, +0.001656f, -0.002117f, +0.000354f, -0.000052f, +0.002477f, -0.004390f, +0.000311f, + +0.001018f, +0.000572f, +0.000132f, +0.000278f, -0.001961f, +0.001063f + }, + { + -0.003499f, +0.033039f, -0.032264f, +0.037222f, -0.026681f, +0.013974f, +0.005584f, +0.006533f, -0.016046f, -0.003463f, + +0.002486f, -0.012055f, +0.001851f, +0.002929f, +0.015220f, -0.025973f, +0.009091f, -0.006825f, +0.019001f, -0.008219f, + +0.001361f, -0.005047f, +0.016288f, -0.010814f, +0.002972f, -0.009380f, +0.006079f, -0.004400f, +0.001007f, -0.006148f, + +0.011764f, +0.003931f, -0.011519f, -0.007802f, +0.010625f, -0.002170f, +0.007699f, -0.011194f, -0.003152f, -0.006306f, + +0.011015f, +0.010379f, -0.010885f, -0.003926f, +0.009017f, -0.005451f, -0.003277f, +0.004240f, -0.001089f, +0.007307f, + -0.005148f, -0.002343f, -0.000078f, +0.002508f, -0.004943f, +0.005729f, -0.003857f, +0.004031f, -0.003995f, +0.002816f, + +0.002609f, +0.001645f, -0.004319f, -0.000801f, +0.005385f, -0.006243f, +0.008428f, -0.005100f, +0.002238f, -0.004829f, + +0.002762f, -0.003732f, +0.000921f, -0.000077f, +0.000160f, -0.001817f, +0.000679f, +0.003101f, +0.003459f, -0.000860f, + +0.000429f, -0.000737f, +0.001517f, +0.000125f, -0.002581f, -0.001748f, +0.002728f, +0.000624f, -0.001503f, -0.003351f, + +0.003151f, -0.000136f, +0.000126f, -0.001160f, +0.001478f, +0.001321f + }, + { + +0.002816f, +0.002820f, -0.008232f, +0.051715f, -0.026744f, +0.025687f, +0.006058f, -0.017771f, +0.001479f, +0.010379f, + -0.011374f, -0.018655f, +0.016330f, +0.005795f, -0.004846f, -0.006424f, +0.014734f, -0.008971f, +0.004544f, -0.001649f, + -0.002723f, +0.009036f, -0.003338f, +0.003556f, -0.001079f, +0.009479f, -0.017092f, -0.018195f, -0.001283f, -0.002709f, + +0.018337f, -0.003198f, -0.003717f, +0.016892f, -0.003625f, -0.006374f, +0.003859f, +0.008071f, -0.005430f, -0.006945f, + -0.000026f, +0.005152f, +0.006389f, -0.000547f, -0.000053f, -0.010605f, +0.007501f, +0.008952f, -0.002974f, -0.008248f, + +0.003031f, -0.002100f, -0.005715f, +0.003717f, +0.003712f, +0.000030f, -0.003298f, -0.006181f, -0.000286f, +0.006645f, + +0.002656f, +0.002757f, -0.000717f, -0.000759f, +0.004488f, -0.002079f, +0.003126f, +0.000259f, +0.001539f, -0.006162f, + -0.002261f, -0.003163f, +0.001930f, -0.001646f, +0.002131f, -0.004658f, +0.002467f, +0.002735f, +0.001249f, +0.000439f, + +0.001943f, +0.001349f, -0.002044f, -0.000248f, +0.000447f, +0.002708f, -0.004255f, -0.001737f, -0.001226f, +0.003913f, + +0.000022f, -0.001106f, +0.000454f, +0.002245f, -0.000434f, -0.000574f + }, + { + +0.027491f, -0.088768f, +0.029093f, +0.034925f, -0.012075f, +0.011319f, -0.003862f, +0.005789f, -0.006674f, -0.015155f, + +0.010890f, -0.010052f, +0.010087f, +0.006548f, -0.001411f, +0.017636f, -0.004464f, -0.008077f, -0.004646f, +0.008106f, + -0.005810f, +0.014689f, -0.011966f, -0.014850f, +0.019997f, +0.010968f, -0.013555f, -0.012565f, +0.012902f, +0.011489f, + -0.007014f, -0.001886f, +0.007521f, -0.008907f, +0.003178f, +0.001174f, +0.004349f, -0.007110f, +0.005274f, -0.004896f, + +0.001277f, +0.001271f, +0.001589f, -0.002147f, +0.002788f, +0.003401f, -0.005817f, +0.000667f, +0.006739f, -0.005255f, + +0.001209f, +0.003998f, +0.001089f, -0.005178f, +0.001973f, -0.002304f, -0.002567f, +0.004967f, -0.005144f, +0.005079f, + -0.000560f, +0.000322f, -0.000241f, -0.000041f, +0.000064f, +0.001237f, -0.000086f, +0.001216f, -0.001624f, -0.001895f, + -0.001655f, -0.000646f, +0.000616f, +0.000687f, -0.000313f, +0.002153f, +0.000298f, -0.000168f, +0.000577f, +0.000343f, + +0.000653f, -0.001125f, -0.000748f, +0.000756f, -0.000556f, +0.001078f, +0.000886f, -0.001954f, -0.001091f, +0.000565f, + +0.001270f, -0.000845f, -0.001548f, +0.001241f, +0.000256f, +0.000635f + }, + { + -0.000439f, +0.020838f, -0.037461f, +0.043524f, -0.039373f, +0.016352f, +0.011505f, -0.003529f, +0.001727f, -0.005253f, + -0.006027f, -0.014428f, +0.009600f, +0.014221f, -0.019595f, +0.019476f, +0.015663f, -0.027105f, +0.019771f, -0.003661f, + -0.005611f, +0.012413f, -0.004226f, -0.023637f, +0.031134f, -0.006322f, -0.013723f, -0.017936f, +0.018781f, -0.012811f, + +0.020222f, -0.017411f, +0.011964f, -0.010057f, -0.001815f, +0.006294f, -0.004226f, -0.008177f, +0.013074f, -0.004000f, + +0.005200f, +0.001613f, -0.002816f, -0.007382f, +0.005115f, +0.010296f, -0.011520f, -0.002815f, -0.002404f, +0.012735f, + -0.002590f, -0.002986f, +0.002392f, +0.001288f, +0.002837f, -0.003282f, +0.001530f, -0.001326f, -0.000828f, +0.006871f, + -0.001868f, -0.004160f, +0.000172f, +0.001899f, +0.003482f, +0.002758f, -0.005145f, +0.001369f, -0.005055f, +0.003846f, + -0.002492f, +0.000252f, -0.002593f, +0.002114f, +0.000896f, -0.000534f, +0.001045f, -0.001111f, +0.002699f, +0.000788f, + -0.002496f, +0.001170f, -0.001209f, +0.002775f, -0.004226f, +0.001803f, +0.001462f, -0.001625f, -0.000696f, +0.000971f, + -0.000254f, +0.001289f, -0.002091f, -0.000072f, -0.000322f, +0.000799f + }, + { + +0.036339f, -0.119978f, +0.043693f, +0.040555f, -0.004507f, +0.004208f, +0.006206f, -0.006580f, -0.007521f, +0.002676f, + +0.009647f, -0.033419f, -0.007975f, +0.030305f, -0.016872f, +0.027836f, -0.006581f, -0.019038f, -0.002402f, -0.003782f, + +0.028666f, -0.020755f, -0.019578f, +0.008342f, +0.010728f, -0.010030f, +0.022701f, -0.021851f, +0.017824f, -0.014178f, + -0.002425f, -0.010752f, +0.015226f, +0.015629f, -0.004384f, -0.005347f, -0.001085f, -0.007247f, +0.009858f, +0.000863f, + +0.002459f, -0.013562f, +0.004915f, +0.005829f, -0.002082f, -0.007346f, -0.000426f, +0.001505f, +0.000053f, +0.003185f, + -0.002681f, -0.000119f, +0.003991f, +0.000748f, +0.001402f, +0.002976f, -0.001184f, -0.006699f, +0.000926f, -0.000767f, + +0.001282f, +0.004082f, -0.010046f, +0.005641f, -0.002188f, +0.000169f, +0.005178f, -0.001547f, -0.003454f, +0.001715f, + -0.002257f, +0.000224f, +0.002609f, +0.003002f, -0.003769f, +0.002993f, -0.000206f, -0.000381f, -0.000479f, +0.000508f, + -0.002733f, -0.002820f, +0.001316f, +0.000163f, +0.000999f, +0.003048f, -0.000753f, -0.000323f, -0.002384f, +0.000453f, + +0.000067f, -0.000305f, +0.000960f, +0.000952f, -0.000063f, +0.001971f + }, + { + -0.003345f, +0.038570f, -0.061080f, +0.044228f, -0.035088f, +0.014082f, +0.012330f, -0.002270f, -0.004311f, -0.004103f, + -0.001037f, -0.007374f, -0.022590f, +0.010560f, +0.006104f, +0.022569f, +0.000116f, -0.018077f, -0.004143f, -0.003773f, + +0.020337f, +0.000142f, -0.023107f, -0.013302f, +0.012033f, -0.004907f, +0.028324f, -0.029394f, +0.008418f, +0.001867f, + -0.017166f, -0.008088f, +0.020500f, +0.001142f, -0.001386f, -0.012243f, +0.002418f, +0.002804f, +0.004024f, -0.000268f, + -0.001715f, -0.007254f, +0.008285f, -0.000810f, +0.002179f, -0.003686f, +0.004906f, -0.001986f, +0.000500f, -0.004513f, + +0.002725f, -0.001024f, +0.007372f, -0.001149f, +0.005067f, -0.001647f, -0.000070f, -0.004945f, +0.005778f, -0.004457f, + +0.000296f, -0.001839f, -0.004274f, +0.002817f, +0.003291f, -0.002576f, +0.004217f, -0.005118f, +0.000803f, +0.000967f, + -0.000505f, +0.000941f, +0.001094f, +0.000837f, +0.002819f, -0.001844f, -0.000469f, -0.000105f, -0.001328f, -0.001950f, + +0.001066f, -0.002429f, -0.000719f, +0.002357f, -0.001916f, +0.004250f, -0.002088f, +0.000188f, -0.003038f, +0.001812f, + -0.000024f, -0.000257f, +0.001937f, -0.001006f, -0.000863f, +0.001363f + }, + { + +0.031631f, -0.105976f, +0.045843f, +0.040860f, -0.009952f, +0.014268f, -0.004814f, -0.005527f, +0.004628f, -0.011000f, + +0.003644f, -0.031151f, +0.014438f, +0.027692f, -0.023731f, +0.013680f, -0.013147f, -0.007540f, +0.025096f, +0.002901f, + -0.008951f, -0.009282f, +0.023548f, -0.022604f, -0.018362f, +0.026921f, +0.005238f, -0.003045f, -0.013082f, +0.010320f, + -0.007585f, +0.000466f, -0.000980f, -0.005397f, +0.020375f, -0.007380f, -0.009252f, +0.006841f, -0.000785f, +0.003700f, + -0.002149f, -0.004829f, -0.005071f, +0.007744f, +0.001764f, -0.000658f, -0.004049f, +0.001243f, +0.002701f, +0.003473f, + -0.001641f, -0.012557f, +0.008486f, +0.008011f, -0.001969f, +0.005112f, +0.000339f, -0.000100f, -0.007952f, +0.002039f, + +0.003730f, -0.008576f, +0.004803f, +0.000428f, -0.007983f, +0.002820f, +0.005484f, +0.000712f, -0.002861f, -0.001526f, + +0.002112f, +0.000323f, +0.000403f, +0.005312f, -0.004655f, -0.000054f, +0.008519f, -0.007258f, +0.000489f, -0.000795f, + -0.002156f, -0.002301f, -0.000336f, +0.000903f, +0.002435f, +0.001549f, +0.000956f, -0.000740f, -0.002919f, -0.000654f, + +0.000754f, +0.000748f, +0.002264f, +0.000844f, -0.001389f, +0.000773f + }, + { + -0.003537f, +0.042176f, -0.071803f, +0.046403f, -0.031671f, +0.008196f, +0.016943f, +0.000437f, -0.006427f, -0.007143f, + +0.003299f, -0.019593f, -0.007383f, +0.022614f, -0.001025f, -0.005523f, +0.004937f, -0.015200f, +0.022148f, -0.001021f, + -0.008633f, +0.006776f, +0.003508f, -0.020870f, +0.000236f, +0.009050f, +0.031461f, -0.023828f, +0.003296f, -0.008787f, + -0.005953f, +0.020786f, -0.022326f, +0.019157f, -0.008673f, -0.004029f, +0.004791f, +0.006183f, -0.003009f, +0.004329f, + -0.008356f, +0.003112f, +0.002310f, -0.007183f, +0.004151f, +0.003263f, +0.001992f, -0.009694f, +0.001414f, +0.007478f, + -0.003009f, -0.010212f, +0.007529f, +0.006774f, +0.003210f, -0.004184f, +0.006912f, -0.002545f, -0.008920f, +0.003406f, + -0.002114f, -0.001084f, -0.001420f, -0.000938f, +0.001427f, -0.000950f, +0.004357f, +0.003872f, -0.004031f, -0.003257f, + +0.002486f, -0.000298f, +0.004282f, +0.003557f, -0.001860f, -0.001899f, +0.001730f, +0.001633f, -0.002456f, -0.001672f, + -0.000862f, -0.000318f, +0.000813f, -0.000626f, +0.001403f, +0.003200f, -0.001392f, -0.002376f, -0.002357f, -0.000835f, + +0.003150f, -0.000600f, +0.001056f, +0.001484f, -0.000773f, -0.002219f + }, + { + +0.020573f, -0.061237f, +0.015535f, +0.033722f, +0.005983f, +0.000194f, -0.026112f, -0.001072f, +0.021556f, -0.005863f, + -0.008469f, -0.013959f, +0.023936f, -0.018840f, -0.002787f, +0.011071f, -0.004172f, +0.014701f, -0.015846f, +0.008258f, + -0.003057f, +0.022595f, -0.018016f, +0.020471f, -0.018350f, -0.007031f, +0.006206f, -0.008813f, +0.010144f, +0.006658f, + +0.005611f, -0.013133f, +0.014518f, -0.011846f, +0.000107f, +0.003408f, +0.000134f, -0.003061f, -0.004789f, +0.003774f, + +0.010011f, -0.004710f, +0.007618f, -0.019421f, +0.003568f, +0.005026f, -0.015373f, +0.011176f, +0.003419f, +0.006809f, + -0.007974f, +0.001546f, +0.000386f, -0.004445f, +0.003662f, +0.000908f, +0.001532f, -0.001659f, +0.004017f, -0.001477f, + -0.001387f, -0.002022f, +0.001351f, -0.000222f, +0.001955f, +0.002547f, -0.000821f, -0.001761f, +0.005428f, -0.003346f, + +0.000453f, -0.001066f, -0.000152f, -0.005242f, +0.002963f, -0.003641f, +0.002906f, -0.001205f, +0.003632f, -0.002361f, + +0.002076f, +0.001952f, -0.000370f, -0.004567f, +0.005463f, -0.002219f, +0.000174f, +0.001088f, -0.001183f, -0.002200f, + +0.001003f, -0.000172f, -0.001860f, +0.000804f, +0.001695f, +0.001573f + }, + { + +0.003635f, -0.002333f, -0.008290f, +0.032767f, -0.005703f, +0.011123f, -0.035414f, +0.008268f, +0.028229f, -0.008370f, + -0.002500f, -0.004046f, +0.009181f, +0.003187f, -0.012414f, +0.012863f, -0.019462f, +0.004964f, +0.009720f, +0.002863f, + -0.015270f, +0.021588f, -0.009941f, +0.006947f, -0.006198f, -0.017734f, +0.005900f, -0.002550f, -0.017042f, +0.019931f, + +0.004398f, +0.003667f, +0.003658f, -0.005699f, +0.001796f, +0.003393f, -0.003343f, +0.007840f, -0.005272f, +0.012760f, + -0.006969f, +0.004277f, -0.007677f, -0.003072f, +0.003470f, -0.003710f, +0.000627f, +0.014975f, -0.007740f, +0.007741f, + -0.002005f, -0.010413f, -0.004003f, +0.002057f, +0.002478f, +0.000408f, +0.001550f, +0.006611f, -0.003379f, -0.001877f, + -0.002207f, -0.002285f, +0.000574f, +0.002085f, +0.004696f, -0.007474f, +0.003378f, -0.001302f, -0.000463f, -0.001187f, + +0.001487f, -0.001629f, +0.003211f, -0.005039f, -0.000174f, +0.001769f, -0.000267f, -0.000605f, +0.003124f, -0.001634f, + +0.000098f, +0.002410f, -0.000752f, +0.000686f, -0.001228f, -0.000850f, -0.002738f, +0.002571f, -0.003740f, +0.003105f, + -0.000548f, -0.000115f, +0.002204f, +0.000598f, +0.000422f, -0.000716f + }, + { + +0.031151f, -0.101373f, +0.044734f, +0.030209f, +0.004885f, -0.000427f, -0.012441f, +0.020202f, -0.005586f, +0.018379f, + -0.054458f, +0.018383f, +0.015739f, -0.029512f, +0.023684f, +0.006432f, -0.000976f, +0.005168f, -0.000382f, -0.007842f, + +0.004562f, +0.003752f, -0.007221f, +0.004595f, -0.001687f, -0.001540f, -0.005289f, +0.011981f, +0.014551f, -0.024865f, + -0.001696f, +0.003535f, +0.001596f, +0.010745f, -0.004459f, +0.001213f, +0.005915f, -0.016705f, +0.002586f, +0.010938f, + -0.014778f, +0.002443f, +0.007148f, -0.006633f, +0.002673f, +0.007450f, -0.004068f, +0.004380f, -0.003100f, +0.007268f, + +0.000108f, -0.005089f, +0.000071f, +0.000470f, +0.001261f, -0.003063f, -0.009656f, +0.006376f, -0.001964f, +0.000444f, + +0.006792f, -0.001365f, +0.001608f, -0.001638f, +0.001698f, -0.000631f, -0.004269f, +0.001288f, +0.001432f, +0.000217f, + +0.000363f, -0.001806f, +0.001162f, -0.000172f, +0.001711f, -0.000425f, +0.001001f, -0.003938f, -0.002385f, -0.000818f, + -0.001484f, +0.002935f, -0.002561f, -0.001182f, +0.001583f, -0.001870f, +0.000470f, +0.001867f, +0.002055f, -0.001737f, + +0.002106f, +0.000945f, +0.001006f, -0.001184f, -0.000431f, -0.000907f + }, + { + +0.000835f, +0.012358f, -0.016825f, +0.028583f, -0.004425f, +0.002279f, -0.036895f, +0.021170f, +0.003966f, +0.010742f, + +0.005036f, -0.049075f, +0.043540f, -0.026268f, +0.007978f, +0.005813f, +0.008065f, -0.018267f, +0.009731f, +0.009857f, + -0.026213f, +0.009153f, -0.017787f, +0.018347f, +0.001466f, -0.006248f, -0.000317f, +0.009321f, -0.004614f, +0.004872f, + -0.014623f, +0.009287f, -0.007827f, +0.008790f, +0.012535f, -0.013980f, +0.004550f, -0.013387f, +0.007264f, -0.010643f, + +0.002450f, -0.000506f, +0.010691f, -0.008311f, -0.000187f, +0.004500f, -0.004779f, +0.006101f, +0.000337f, +0.001200f, + +0.008467f, -0.008440f, -0.000326f, -0.000650f, +0.001117f, -0.005377f, -0.005218f, +0.003672f, -0.003993f, +0.003443f, + -0.005075f, +0.006635f, -0.001710f, +0.000562f, -0.001185f, +0.005140f, -0.004812f, -0.004085f, +0.006496f, +0.003319f, + -0.004132f, +0.000349f, +0.003460f, +0.000396f, -0.000464f, -0.002300f, +0.004339f, -0.005217f, -0.001580f, -0.001446f, + +0.002218f, -0.002528f, -0.000753f, -0.000997f, +0.000847f, +0.000278f, +0.000064f, +0.001215f, -0.001713f, +0.001930f, + +0.000292f, +0.002401f, -0.000818f, +0.000348f, +0.000744f, -0.001989f + }, + { + +0.030051f, -0.094893f, +0.041345f, +0.011978f, +0.014982f, -0.006589f, -0.021219f, +0.022936f, +0.001714f, -0.012057f, + -0.009101f, -0.009559f, -0.019102f, +0.025642f, -0.006405f, -0.000868f, +0.013116f, -0.010884f, -0.014481f, +0.002995f, + +0.003407f, -0.000390f, -0.000054f, +0.006020f, -0.015620f, -0.001063f, +0.013169f, +0.001721f, -0.006719f, +0.004793f, + -0.007201f, -0.000307f, -0.006466f, +0.014477f, -0.013906f, +0.003942f, -0.006754f, +0.010838f, -0.007380f, +0.002502f, + +0.011618f, +0.004046f, -0.016922f, +0.001578f, +0.005872f, -0.013552f, +0.002205f, +0.002745f, +0.003949f, +0.002237f, + +0.005627f, -0.002263f, -0.001632f, -0.006578f, -0.002975f, +0.006192f, -0.002727f, +0.002331f, -0.002854f, +0.002305f, + +0.003836f, -0.005771f, +0.002282f, -0.004484f, +0.006913f, -0.003100f, +0.002935f, +0.000991f, -0.000757f, -0.002864f, + +0.001589f, -0.001246f, -0.000108f, +0.001843f, -0.003751f, +0.001948f, -0.001405f, -0.001257f, -0.002758f, +0.000285f, + +0.000013f, -0.000669f, +0.002634f, -0.000597f, +0.002651f, -0.002350f, +0.000757f, +0.001868f, -0.000450f, -0.001938f, + -0.000776f, -0.000478f, +0.002360f, -0.001209f, +0.000735f, -0.002416f + }, + { + +0.007324f, -0.016293f, +0.003666f, +0.014398f, +0.004357f, -0.003445f, -0.041252f, +0.033866f, -0.006165f, +0.007134f, + -0.001507f, -0.022548f, +0.000745f, +0.016897f, +0.010562f, -0.033693f, +0.022943f, -0.001320f, -0.007613f, -0.002602f, + +0.004740f, -0.002216f, +0.010284f, +0.012383f, -0.017238f, +0.004524f, -0.001437f, -0.010699f, +0.007210f, +0.004486f, + -0.015248f, +0.019136f, -0.002145f, +0.011081f, -0.022050f, +0.012358f, +0.001061f, -0.001055f, -0.006737f, +0.010871f, + -0.002460f, +0.007716f, -0.006530f, -0.000826f, +0.005627f, -0.000318f, -0.004695f, +0.006089f, +0.005079f, +0.008095f, + -0.001181f, -0.006723f, -0.000857f, +0.000852f, -0.001548f, -0.000407f, -0.000354f, +0.005709f, -0.003143f, +0.003804f, + -0.001922f, -0.001868f, +0.001659f, +0.001899f, +0.001533f, -0.001592f, -0.000143f, +0.005551f, -0.003215f, +0.001359f, + -0.001596f, -0.000007f, +0.003279f, -0.003216f, +0.001147f, +0.000115f, +0.003244f, -0.002224f, -0.003979f, +0.001845f, + +0.002884f, -0.002477f, +0.001670f, +0.000292f, -0.000868f, +0.004339f, -0.001028f, -0.000569f, -0.001518f, +0.000082f, + -0.000724f, +0.001151f, +0.000511f, -0.000531f, +0.001180f, +0.000455f + } + }, + { + { + -0.008350f, +0.053718f, +0.142128f, +0.114639f, +0.004961f, +0.026055f, +0.007911f, +0.008605f, -0.011433f, +0.007274f, + -0.005538f, -0.034077f, -0.001547f, -0.002710f, +0.021605f, -0.029595f, -0.001745f, -0.012672f, +0.013911f, +0.003608f, + +0.022058f, -0.017510f, +0.005225f, -0.003888f, +0.027232f, -0.003300f, -0.009654f, -0.008011f, +0.012875f, -0.003892f, + -0.002981f, -0.008293f, +0.019716f, +0.017443f, +0.007177f, +0.024126f, -0.000034f, +0.001220f, +0.002280f, +0.004440f, + +0.009447f, +0.004987f, -0.016763f, -0.003994f, +0.012038f, +0.010669f, -0.003342f, -0.000206f, -0.004855f, +0.000987f, + +0.007135f, +0.008137f, +0.001610f, +0.006807f, -0.006982f, -0.000598f, +0.002567f, -0.000360f, +0.001979f, +0.003783f, + -0.003086f, +0.003273f, +0.002021f, +0.001801f, -0.000748f, -0.005886f, -0.003658f, -0.002795f, -0.000143f, +0.002321f, + -0.001313f, +0.003931f, -0.001220f, +0.001582f, -0.005068f, +0.008907f, +0.002633f, +0.001317f, +0.002293f, -0.005989f, + -0.007963f, -0.002082f, -0.001316f, +0.002729f, +0.000412f, +0.001924f, +0.000630f, +0.002969f, -0.003935f, +0.002504f, + +0.001968f, -0.000872f, -0.001302f, -0.000432f, -0.000864f, +0.001583f + }, + { + -0.000631f, +0.114395f, +0.029079f, +0.017584f, -0.040108f, +0.004551f, -0.006146f, +0.011910f, -0.003039f, +0.000572f, + -0.002744f, -0.013487f, -0.005014f, -0.011725f, +0.000596f, -0.041849f, +0.022431f, +0.000327f, +0.002471f, -0.017398f, + +0.001530f, -0.005391f, +0.035835f, -0.015222f, -0.011788f, -0.013822f, +0.010653f, +0.010717f, +0.014123f, -0.005694f, + +0.002403f, -0.006207f, -0.020413f, -0.009635f, +0.003161f, -0.015040f, +0.007846f, -0.021365f, -0.015041f, -0.010030f, + +0.011291f, +0.014851f, -0.012845f, -0.008505f, +0.010535f, +0.001385f, -0.000725f, -0.002480f, -0.004598f, +0.016191f, + -0.002963f, -0.009394f, -0.001414f, +0.008612f, +0.002396f, +0.013663f, -0.001967f, +0.004280f, -0.006533f, +0.000965f, + +0.000698f, -0.004616f, -0.007312f, -0.002962f, -0.000207f, -0.010299f, +0.012657f, +0.001645f, +0.009127f, -0.002425f, + +0.010118f, -0.001478f, -0.000299f, +0.001731f, +0.000713f, -0.004655f, +0.001577f, +0.004644f, +0.000095f, -0.001743f, + +0.000054f, -0.002693f, +0.001794f, -0.000097f, -0.003949f, -0.002420f, +0.004292f, +0.003997f, +0.000107f, -0.003454f, + +0.003292f, -0.002159f, +0.000086f, -0.001040f, +0.001780f, +0.003142f + }, + { + +0.000709f, +0.110350f, +0.089409f, +0.078858f, +0.001183f, +0.027955f, +0.015972f, +0.000652f, +0.002814f, +0.016965f, + -0.009781f, -0.032815f, +0.014656f, +0.009626f, -0.009591f, -0.026737f, +0.021241f, +0.006809f, +0.004166f, -0.000996f, + +0.006622f, +0.000420f, -0.018649f, +0.002337f, +0.004341f, +0.008986f, -0.027034f, -0.033767f, -0.009440f, -0.012560f, + +0.019142f, +0.004554f, -0.002924f, +0.024591f, +0.001565f, -0.005319f, +0.010222f, +0.015483f, -0.006560f, -0.002934f, + -0.001928f, -0.001815f, +0.015346f, +0.015579f, +0.009069f, -0.016569f, +0.005420f, +0.011569f, +0.000385f, -0.003164f, + +0.008200f, -0.004762f, -0.012952f, +0.006152f, +0.004895f, -0.009268f, -0.003339f, +0.001384f, +0.002054f, +0.002635f, + -0.000900f, +0.002201f, +0.003055f, +0.003646f, +0.000608f, -0.001735f, +0.009615f, +0.004783f, +0.002198f, -0.008570f, + +0.002187f, +0.002160f, +0.005454f, -0.001276f, +0.000308f, -0.007538f, -0.000337f, +0.000422f, -0.000013f, -0.002881f, + +0.000863f, +0.001749f, -0.001306f, +0.000663f, +0.000062f, +0.005080f, -0.002544f, +0.000451f, -0.000095f, +0.003935f, + +0.000246f, -0.002235f, -0.000454f, +0.003907f, +0.000641f, +0.000464f + }, + { + -0.024150f, -0.174344f, +0.020682f, +0.089231f, +0.028191f, +0.004933f, -0.010313f, -0.000042f, -0.017862f, +0.007329f, + +0.045236f, +0.005878f, +0.011897f, -0.005672f, +0.005524f, +0.033323f, +0.012835f, -0.003410f, -0.014459f, +0.011312f, + -0.015141f, +0.008442f, +0.008978f, +0.001954f, +0.017111f, +0.011184f, +0.003795f, +0.007209f, +0.024019f, +0.018730f, + -0.003213f, +0.004703f, +0.002401f, -0.020097f, +0.007478f, +0.005014f, -0.002543f, -0.012827f, -0.000759f, -0.006910f, + +0.004526f, -0.004031f, +0.006590f, +0.006470f, +0.007241f, +0.009649f, +0.000999f, +0.007615f, +0.006041f, -0.006058f, + +0.010987f, +0.006296f, -0.001102f, -0.004428f, -0.002596f, -0.002865f, -0.002028f, +0.000613f, -0.008514f, +0.006524f, + -0.000166f, +0.003142f, +0.000780f, -0.002682f, -0.001161f, +0.002375f, +0.002734f, +0.001865f, -0.005045f, -0.002158f, + -0.001874f, -0.001779f, +0.000392f, -0.002461f, -0.001286f, +0.003307f, +0.002199f, +0.001104f, +0.001589f, +0.001855f, + +0.000901f, -0.000858f, -0.002307f, +0.000648f, -0.000875f, +0.000946f, +0.002177f, -0.004158f, -0.003085f, -0.000053f, + +0.001381f, +0.000183f, +0.000438f, +0.003116f, +0.001199f, -0.000016f + }, + { + +0.000523f, +0.087106f, +0.000110f, +0.004594f, -0.073216f, +0.012384f, +0.010048f, -0.002995f, +0.007025f, +0.021407f, + +0.002338f, -0.021292f, +0.007972f, -0.000405f, -0.030533f, +0.035486f, +0.048736f, -0.009853f, +0.014013f, -0.015582f, + -0.007684f, +0.016292f, +0.013597f, -0.023630f, +0.022627f, -0.007207f, -0.016943f, -0.041848f, +0.001342f, -0.038250f, + +0.019304f, -0.010401f, +0.007897f, -0.021366f, -0.009318f, +0.006765f, +0.003427f, -0.008606f, +0.009890f, +0.002636f, + +0.009828f, +0.001698f, -0.001503f, -0.007736f, +0.007478f, +0.010585f, -0.014127f, +0.006339f, +0.007137f, +0.023262f, + -0.003180f, -0.007226f, +0.009095f, +0.008779f, +0.006721f, +0.001002f, +0.006923f, +0.001306f, -0.002424f, +0.010024f, + -0.000069f, -0.002761f, +0.004219f, +0.003445f, +0.007495f, +0.003960f, -0.007614f, +0.000236f, -0.008722f, +0.004537f, + +0.001705f, +0.001856f, -0.005980f, +0.001948f, -0.001008f, -0.003219f, -0.000303f, -0.001865f, +0.002863f, +0.001890f, + +0.000780f, +0.003736f, -0.002315f, +0.000613f, -0.006192f, +0.002630f, +0.001534f, -0.001954f, +0.001548f, +0.002503f, + +0.000872f, +0.001925f, -0.002202f, +0.000721f, +0.000215f, +0.001123f + }, + { + -0.029211f, -0.225112f, +0.035357f, +0.121301f, +0.055823f, -0.008408f, +0.008018f, -0.005411f, -0.005554f, +0.011069f, + +0.014487f, -0.036375f, -0.021718f, +0.017220f, -0.034043f, +0.004006f, -0.032731f, -0.019473f, -0.002642f, -0.023031f, + +0.017936f, -0.026186f, -0.018443f, +0.010204f, +0.018946f, -0.007967f, +0.011645f, -0.020886f, +0.037213f, -0.018805f, + -0.006195f, -0.007137f, +0.023800f, +0.020182f, +0.003519f, +0.005239f, -0.007310f, -0.017228f, +0.004474f, -0.003938f, + +0.015374f, -0.005464f, -0.003480f, -0.000514f, -0.010083f, -0.013585f, -0.003756f, +0.006987f, +0.011231f, +0.006502f, + -0.005779f, +0.003034f, +0.007485f, -0.000984f, -0.002035f, -0.003021f, -0.003716f, -0.005379f, +0.001081f, -0.002465f, + +0.004460f, +0.007457f, -0.008609f, +0.010294f, -0.004055f, -0.001885f, +0.009879f, +0.002845f, -0.003846f, -0.000553f, + -0.006290f, -0.004245f, +0.001286f, +0.006583f, -0.005040f, +0.001967f, -0.001303f, -0.002296f, +0.000523f, +0.001262f, + -0.003290f, -0.000639f, +0.002310f, -0.000023f, -0.000837f, -0.000812f, -0.001744f, +0.002439f, -0.000234f, +0.002495f, + +0.002510f, +0.000951f, +0.000081f, +0.000575f, +0.001337f, +0.003081f + }, + { + -0.002000f, +0.083919f, -0.038690f, -0.004410f, -0.074599f, +0.012544f, +0.007236f, -0.004739f, +0.000769f, +0.007613f, + -0.001486f, -0.015934f, -0.032997f, -0.011839f, -0.007981f, +0.022907f, -0.010714f, -0.024495f, -0.003927f, -0.017002f, + +0.005649f, -0.007346f, -0.022945f, -0.012705f, +0.006124f, -0.005320f, +0.044813f, -0.041175f, -0.016466f, -0.010951f, + -0.028524f, -0.024700f, +0.010500f, -0.005034f, -0.002052f, -0.014790f, +0.001237f, +0.003813f, -0.001014f, -0.002098f, + +0.009019f, -0.007900f, -0.000643f, +0.004450f, +0.014952f, -0.001156f, +0.003235f, -0.004647f, +0.000699f, +0.001961f, + +0.001416f, +0.000733f, +0.012318f, -0.003869f, +0.006462f, +0.000859f, -0.000920f, -0.004556f, +0.006034f, -0.009425f, + +0.000857f, +0.000660f, -0.004512f, +0.003193f, +0.002883f, -0.007134f, -0.000166f, -0.005712f, +0.006961f, +0.006104f, + +0.003173f, +0.002770f, +0.001766f, +0.000057f, +0.001983f, -0.000468f, -0.003183f, -0.005403f, -0.005147f, -0.002098f, + +0.003311f, -0.002718f, -0.002549f, +0.002624f, -0.003122f, +0.003389f, -0.003169f, -0.000621f, -0.001383f, +0.004428f, + +0.000913f, -0.000277f, -0.000123f, -0.003526f, -0.001443f, +0.001339f + }, + { + -0.026515f, -0.179332f, +0.055491f, +0.113951f, +0.055600f, +0.016234f, -0.013578f, -0.019209f, +0.009082f, -0.002014f, + +0.010448f, -0.040876f, +0.000891f, +0.024366f, -0.036923f, +0.002423f, -0.006243f, +0.001904f, +0.024927f, +0.019805f, + +0.002854f, +0.000701f, +0.041911f, -0.010689f, -0.020653f, +0.010479f, -0.001251f, +0.004171f, -0.007697f, +0.011652f, + -0.010561f, -0.007496f, -0.001356f, -0.004916f, +0.022521f, -0.003145f, -0.010692f, +0.003268f, -0.000735f, +0.010920f, + -0.002017f, -0.004261f, +0.008681f, +0.013474f, +0.000490f, +0.006049f, +0.003378f, +0.002581f, +0.001482f, +0.008836f, + -0.006405f, -0.022686f, +0.010230f, +0.008879f, -0.002952f, +0.013141f, +0.004905f, +0.004847f, -0.002049f, +0.008922f, + +0.011930f, -0.009348f, +0.001698f, -0.001167f, -0.009207f, +0.006806f, +0.003386f, -0.001262f, -0.000087f, +0.000476f, + +0.003559f, -0.003878f, -0.006661f, +0.004300f, -0.003626f, +0.001206f, +0.013867f, -0.005093f, +0.003045f, +0.000551f, + -0.002585f, -0.003683f, -0.001477f, +0.001282f, +0.004849f, +0.003326f, +0.001223f, +0.000554f, -0.001516f, -0.000745f, + +0.000791f, +0.000951f, +0.001501f, -0.000340f, -0.002216f, +0.002063f + }, + { + -0.003362f, +0.072186f, -0.064216f, -0.003011f, -0.065572f, -0.002017f, +0.011553f, +0.008755f, -0.003508f, -0.007068f, + +0.006192f, -0.021027f, -0.010643f, +0.009631f, -0.010107f, -0.014692f, -0.002951f, -0.006740f, +0.035654f, -0.001039f, + -0.007148f, +0.016412f, -0.001209f, -0.002142f, +0.033290f, +0.008851f, +0.019968f, -0.021924f, +0.023010f, -0.009080f, + -0.005101f, +0.008103f, -0.040518f, +0.004430f, -0.020889f, +0.009017f, +0.016620f, +0.007088f, -0.002938f, +0.008188f, + -0.003821f, +0.005379f, +0.003333f, -0.012936f, +0.005069f, +0.010975f, +0.002223f, -0.011691f, +0.001251f, +0.003820f, + +0.000069f, -0.008845f, +0.002204f, +0.006554f, +0.002222f, -0.005310f, +0.006060f, -0.002143f, -0.005893f, +0.002620f, + -0.000660f, +0.000367f, -0.002476f, +0.000057f, +0.000596f, +0.000577f, +0.007533f, +0.006852f, -0.000374f, +0.000889f, + +0.004118f, +0.001091f, +0.006854f, +0.003169f, -0.002056f, -0.002570f, +0.001906f, +0.005265f, +0.001464f, -0.001523f, + -0.001254f, -0.002296f, +0.001205f, -0.001172f, +0.000014f, +0.004559f, -0.001368f, -0.002165f, -0.002081f, -0.003913f, + +0.000994f, -0.001262f, -0.002207f, -0.001922f, -0.000935f, -0.002354f + }, + { + -0.014933f, -0.062080f, +0.068882f, +0.057501f, +0.005586f, +0.016196f, -0.016669f, -0.023026f, +0.019589f, -0.026298f, + -0.010630f, -0.014403f, +0.002595f, -0.031702f, -0.002330f, +0.030654f, +0.009247f, +0.013970f, -0.018607f, +0.024328f, + +0.005796f, +0.022460f, -0.012859f, +0.001258f, -0.032747f, +0.001422f, +0.012370f, +0.001942f, +0.035241f, +0.020117f, + +0.009795f, -0.001512f, +0.013232f, -0.008894f, +0.000772f, -0.007997f, -0.005072f, -0.000233f, +0.000378f, -0.001562f, + -0.002980f, -0.013330f, +0.008084f, -0.019916f, +0.006939f, +0.008927f, -0.021024f, -0.000250f, +0.000053f, +0.010624f, + -0.001693f, +0.011076f, +0.007733f, -0.006121f, +0.004246f, +0.002148f, -0.000746f, -0.005029f, +0.006144f, +0.007853f, + +0.004708f, -0.003047f, -0.000541f, -0.002481f, -0.000317f, -0.001917f, +0.001000f, +0.003292f, +0.012670f, +0.000134f, + +0.001332f, -0.001211f, -0.002860f, -0.006777f, +0.002673f, -0.003323f, +0.003917f, -0.001440f, +0.002111f, -0.003584f, + +0.003339f, +0.000485f, -0.000824f, -0.004881f, +0.004510f, -0.003854f, -0.001073f, -0.001540f, -0.002326f, -0.001503f, + +0.000605f, -0.000080f, -0.001938f, +0.001251f, +0.003106f, +0.002793f + }, + { + -0.000142f, +0.076731f, +0.047000f, +0.016062f, -0.024972f, +0.006715f, -0.035529f, +0.022925f, +0.044036f, -0.004771f, + +0.031512f, +0.002746f, -0.006100f, -0.008273f, -0.022533f, +0.004731f, -0.046894f, +0.015155f, +0.026387f, +0.008715f, + -0.019766f, -0.000010f, -0.004286f, +0.008307f, -0.011217f, -0.016023f, +0.003752f, -0.007725f, -0.018881f, +0.037316f, + +0.019147f, +0.012323f, +0.007947f, +0.004561f, +0.005479f, +0.007249f, +0.006708f, +0.018099f, -0.002346f, +0.026781f, + -0.000204f, +0.004117f, -0.002006f, +0.005383f, +0.001333f, -0.007732f, -0.001072f, +0.007808f, -0.008656f, +0.005492f, + -0.002589f, -0.002915f, +0.001358f, +0.004008f, -0.000463f, -0.007618f, +0.000886f, +0.006750f, -0.008112f, -0.003150f, + +0.001967f, +0.003271f, -0.002747f, -0.001606f, -0.003454f, -0.009362f, +0.010508f, -0.000078f, -0.001136f, -0.002657f, + +0.000345f, -0.005305f, +0.002477f, -0.003154f, +0.001433f, +0.000635f, -0.004066f, +0.001275f, +0.005641f, -0.003691f, + -0.004087f, -0.000395f, +0.001801f, +0.004575f, -0.004017f, -0.005992f, -0.000917f, +0.006475f, -0.000902f, +0.008346f, + +0.000057f, -0.000161f, +0.001983f, -0.000798f, -0.000436f, -0.002752f + }, + { + -0.022880f, -0.202062f, +0.035318f, +0.057107f, +0.034632f, +0.046479f, +0.024143f, +0.022637f, -0.002090f, -0.019613f, + -0.082562f, +0.044320f, +0.041813f, -0.030007f, +0.012200f, +0.005302f, +0.016208f, +0.021422f, -0.001075f, +0.007190f, + +0.026168f, +0.006104f, -0.007435f, -0.004171f, +0.003928f, +0.007429f, -0.011072f, +0.011631f, +0.013127f, -0.028807f, + -0.011588f, -0.000503f, +0.009741f, +0.017235f, -0.011837f, +0.005819f, +0.019453f, -0.011492f, +0.001825f, +0.006504f, + -0.010452f, +0.007899f, -0.002388f, -0.007472f, +0.011476f, +0.010105f, -0.005523f, +0.005918f, +0.005396f, +0.008860f, + -0.008393f, -0.008316f, +0.002487f, +0.004907f, +0.002183f, -0.006850f, -0.007759f, +0.016089f, +0.009841f, +0.003021f, + +0.000307f, -0.007029f, +0.002988f, +0.003142f, +0.003086f, -0.002248f, -0.003851f, +0.001892f, -0.003863f, -0.005725f, + -0.004661f, -0.005968f, -0.003500f, -0.007042f, +0.000302f, -0.001016f, -0.000728f, -0.006418f, -0.004897f, -0.003645f, + -0.001181f, +0.005701f, -0.003295f, -0.004368f, -0.000005f, -0.001768f, -0.001535f, -0.000365f, +0.002495f, -0.002635f, + -0.000368f, +0.000591f, +0.003346f, +0.000627f, +0.000715f, -0.000423f + }, + { + -0.000436f, +0.096733f, +0.041272f, +0.002344f, -0.035885f, -0.025824f, -0.049723f, +0.026705f, +0.011762f, +0.009718f, + +0.017519f, -0.039739f, +0.046385f, -0.027378f, -0.015539f, -0.030347f, -0.014806f, -0.008686f, +0.023620f, +0.006128f, + -0.039834f, -0.002422f, -0.023206f, +0.020793f, +0.021583f, +0.007721f, -0.002223f, +0.002951f, -0.009022f, +0.014704f, + -0.006380f, +0.006341f, -0.019581f, -0.003899f, +0.008059f, -0.017272f, +0.000015f, -0.029753f, -0.005240f, -0.002673f, + +0.019247f, +0.001550f, +0.001294f, -0.014991f, +0.002619f, +0.007815f, -0.003138f, +0.008106f, +0.004441f, +0.001839f, + +0.003338f, -0.022804f, -0.003851f, +0.005333f, +0.001696f, -0.007622f, -0.011831f, -0.003160f, -0.003945f, +0.000429f, + -0.013475f, +0.002258f, -0.003634f, +0.004588f, +0.000723f, +0.007289f, -0.003845f, -0.004079f, +0.003560f, +0.000911f, + -0.002652f, +0.000637f, +0.003434f, -0.003855f, -0.005141f, -0.001234f, +0.006084f, -0.006632f, -0.003144f, +0.000108f, + +0.004518f, -0.004789f, -0.004875f, -0.001014f, +0.002718f, -0.001113f, -0.003211f, -0.001539f, -0.005395f, +0.000345f, + +0.001807f, +0.003110f, -0.002259f, +0.001695f, +0.001216f, -0.003476f + }, + { + -0.023167f, -0.188237f, +0.030335f, +0.027562f, +0.022143f, +0.012619f, -0.005553f, +0.024531f, +0.009067f, -0.054759f, + -0.038106f, -0.020398f, -0.055748f, +0.004321f, -0.008692f, +0.003719f, +0.002616f, -0.025339f, -0.025018f, -0.000405f, + +0.009791f, -0.006269f, -0.019720f, -0.002266f, -0.034591f, -0.009898f, +0.029075f, +0.023875f, -0.005603f, -0.012266f, + -0.019844f, +0.000316f, -0.006013f, +0.013454f, -0.012725f, +0.000337f, -0.011844f, +0.025171f, -0.007744f, -0.003985f, + +0.011048f, +0.000959f, -0.016158f, +0.002453f, +0.001565f, -0.012407f, -0.000664f, +0.001931f, +0.011021f, +0.005074f, + +0.010164f, -0.005254f, -0.013930f, -0.003653f, +0.008081f, +0.010194f, -0.006241f, -0.002780f, -0.004313f, +0.003160f, + +0.007882f, -0.001094f, +0.001206f, -0.013530f, +0.002802f, -0.004447f, +0.004073f, +0.006517f, +0.005811f, -0.000995f, + +0.003292f, -0.005223f, -0.007661f, -0.001284f, -0.008190f, +0.001043f, -0.004297f, -0.002146f, -0.003214f, -0.003135f, + -0.002460f, -0.000283f, +0.003718f, -0.000262f, +0.005984f, -0.002651f, +0.000029f, +0.004650f, -0.000683f, -0.003753f, + -0.002027f, +0.001089f, +0.007626f, +0.001353f, +0.000838f, -0.001142f + }, + { + -0.002662f, +0.046250f, +0.052461f, -0.004210f, -0.024751f, -0.042011f, -0.066950f, +0.032181f, +0.013560f, +0.012430f, + -0.016627f, -0.031865f, +0.002763f, +0.012756f, +0.001857f, -0.044151f, +0.011328f, -0.001802f, -0.011731f, +0.003268f, + +0.005312f, -0.014863f, +0.013952f, +0.025192f, -0.010445f, +0.013768f, -0.003064f, -0.021584f, +0.006777f, +0.002958f, + -0.006257f, +0.042718f, +0.002793f, +0.015485f, -0.012573f, +0.022936f, +0.005722f, -0.000026f, -0.014940f, +0.005101f, + -0.005688f, +0.014995f, +0.002627f, +0.014363f, +0.019944f, +0.012009f, -0.000034f, +0.016085f, +0.015470f, +0.010483f, + +0.008750f, +0.002064f, -0.004329f, +0.001317f, +0.002857f, -0.000104f, +0.003303f, +0.009780f, -0.007962f, +0.003490f, + +0.004163f, -0.000163f, +0.002806f, +0.007219f, +0.000959f, -0.001474f, +0.005532f, +0.002228f, -0.004154f, +0.005605f, + -0.001669f, -0.001072f, +0.004093f, -0.002877f, +0.001167f, +0.003486f, +0.008783f, -0.000719f, -0.007387f, +0.003058f, + +0.005111f, -0.002730f, +0.005080f, +0.002765f, -0.001172f, +0.004451f, -0.003826f, -0.002709f, +0.001421f, +0.002622f, + +0.000747f, +0.003972f, +0.002009f, -0.000508f, +0.003257f, +0.001273f + } + }, + { + { + +0.002515f, +0.189634f, -0.027014f, +0.038445f, +0.071505f, +0.023123f, +0.005794f, -0.000246f, +0.016140f, -0.017328f, + -0.009672f, -0.013321f, -0.010972f, -0.018578f, +0.022220f, -0.019820f, -0.002625f, +0.009851f, +0.007220f, -0.018272f, + +0.023789f, -0.020286f, +0.011599f, -0.015319f, +0.016497f, +0.013222f, -0.005975f, -0.012611f, +0.005703f, +0.004999f, + -0.024955f, +0.017484f, +0.012929f, +0.007735f, +0.010628f, +0.011421f, +0.007380f, +0.003092f, +0.002730f, +0.001310f, + +0.003616f, -0.003510f, +0.001196f, -0.004795f, +0.005050f, +0.010484f, +0.001825f, -0.005229f, -0.001730f, -0.000886f, + +0.004343f, +0.004028f, +0.012274f, -0.000413f, -0.004710f, +0.006357f, -0.001617f, -0.001855f, +0.003314f, +0.001096f, + -0.000111f, -0.000009f, +0.006724f, +0.001965f, -0.005187f, +0.002082f, -0.011045f, +0.002764f, -0.004400f, +0.001956f, + +0.004956f, +0.000061f, -0.003181f, +0.001016f, +0.000722f, +0.000905f, +0.002523f, +0.006276f, +0.000222f, -0.005149f, + -0.007442f, -0.004856f, +0.001139f, +0.003146f, +0.002767f, -0.001822f, +0.004422f, -0.001082f, -0.001395f, -0.000224f, + +0.001204f, +0.001062f, +0.001366f, -0.001062f, -0.001685f, +0.000488f + }, + { + +0.003985f, +0.045633f, +0.063580f, -0.026282f, +0.028249f, -0.007712f, -0.006509f, -0.004873f, +0.016730f, -0.010679f, + +0.000339f, -0.001511f, -0.012721f, -0.006901f, -0.000602f, -0.006056f, -0.008394f, +0.000516f, -0.012716f, -0.001963f, + -0.009009f, +0.011533f, +0.013665f, -0.010529f, -0.000844f, -0.014612f, -0.008769f, +0.012278f, +0.023562f, -0.002469f, + -0.001764f, -0.016887f, -0.013845f, -0.000396f, -0.009506f, +0.003431f, -0.003650f, -0.017891f, -0.015130f, -0.002036f, + +0.001148f, +0.009233f, -0.017045f, +0.000211f, +0.011932f, -0.008567f, +0.003520f, +0.003287f, -0.008674f, +0.012947f, + -0.004480f, -0.004683f, -0.001100f, +0.003985f, +0.017482f, -0.003063f, +0.000865f, +0.004582f, -0.003680f, -0.006495f, + +0.001779f, -0.003693f, -0.000231f, -0.003472f, -0.003469f, -0.003619f, +0.004181f, +0.005904f, +0.008257f, -0.001650f, + +0.006639f, +0.002935f, -0.002394f, +0.002005f, -0.002360f, -0.000015f, +0.000926f, +0.000699f, -0.003702f, -0.000181f, + +0.004116f, -0.002878f, -0.003940f, +0.005188f, -0.003635f, -0.001472f, +0.001305f, +0.002564f, +0.001417f, +0.001872f, + -0.004303f, -0.001474f, -0.000536f, +0.000814f, +0.002523f, +0.002228f + }, + { + -0.002554f, +0.162488f, +0.045172f, -0.014008f, +0.083014f, +0.020305f, +0.013375f, +0.012008f, -0.006905f, +0.000069f, + +0.008336f, -0.028291f, +0.004748f, +0.007284f, -0.003077f, -0.024230f, +0.001984f, +0.006795f, +0.005945f, +0.009600f, + +0.012775f, -0.000782f, -0.016401f, -0.005156f, +0.010851f, -0.003066f, -0.006939f, -0.037132f, -0.007679f, -0.013636f, + +0.024870f, -0.012042f, +0.006466f, +0.015490f, +0.007775f, -0.010208f, +0.011397f, +0.013175f, -0.009952f, +0.006173f, + -0.013928f, +0.009637f, +0.008649f, +0.014332f, +0.010172f, -0.007613f, +0.009377f, -0.002344f, -0.001060f, +0.002561f, + +0.006371f, -0.001441f, -0.009702f, -0.001385f, +0.005415f, -0.006750f, +0.002375f, -0.002894f, +0.006881f, -0.003115f, + -0.001164f, +0.002302f, +0.001366f, +0.000683f, +0.000750f, +0.004708f, +0.005228f, +0.004732f, +0.000257f, -0.001007f, + +0.001094f, +0.002646f, +0.002060f, -0.003457f, +0.003300f, -0.004903f, -0.004253f, -0.002036f, +0.001857f, -0.000818f, + -0.000157f, +0.002085f, -0.001554f, +0.002404f, -0.003870f, +0.006445f, -0.000740f, +0.001249f, -0.001518f, +0.004179f, + +0.001036f, -0.001940f, -0.001448f, +0.001897f, -0.000537f, -0.000328f + }, + { + +0.022020f, -0.146001f, -0.053909f, +0.086091f, +0.018625f, +0.019940f, -0.013426f, -0.006191f, -0.000400f, +0.027836f, + +0.012128f, +0.011786f, +0.007656f, -0.008985f, +0.019441f, +0.009765f, +0.002839f, +0.015720f, -0.014563f, +0.010049f, + -0.006451f, +0.002880f, +0.011509f, +0.003259f, +0.015000f, +0.010859f, +0.007620f, +0.015926f, +0.013165f, +0.016030f, + +0.000610f, +0.003517f, +0.001264f, -0.013123f, -0.006657f, +0.000540f, -0.011168f, +0.001155f, -0.009111f, +0.004630f, + +0.003358f, -0.002388f, +0.006075f, -0.004376f, +0.016585f, -0.000415f, +0.005818f, +0.009532f, +0.001765f, -0.005360f, + +0.004835f, +0.012805f, -0.002753f, -0.001856f, -0.007053f, +0.005890f, +0.000650f, -0.007105f, -0.006828f, +0.010347f, + -0.000706f, -0.005154f, +0.006332f, -0.005330f, +0.004025f, -0.000056f, +0.004878f, -0.002164f, -0.009203f, +0.003390f, + -0.004113f, -0.000008f, +0.001515f, -0.003383f, -0.001509f, +0.003039f, +0.000520f, +0.002269f, +0.002544f, -0.000436f, + -0.000276f, +0.000742f, -0.000413f, -0.000373f, -0.000196f, -0.000094f, +0.001257f, -0.003918f, +0.000543f, -0.001819f, + +0.002573f, -0.002450f, +0.002486f, +0.002221f, -0.000308f, -0.001151f + }, + { + +0.000200f, +0.068844f, +0.021804f, -0.023863f, -0.022473f, -0.011200f, +0.005787f, +0.007091f, -0.003167f, +0.013669f, + +0.000494f, -0.003395f, -0.000624f, -0.001702f, -0.007952f, +0.018439f, +0.028657f, +0.012064f, +0.005127f, -0.020593f, + +0.012017f, -0.022230f, +0.030488f, -0.004647f, +0.005700f, +0.000946f, -0.021291f, -0.030924f, -0.012561f, -0.021315f, + +0.002991f, +0.001930f, -0.002597f, -0.005557f, -0.017975f, +0.004104f, -0.007089f, +0.013098f, +0.000599f, +0.003235f, + +0.000840f, +0.006066f, +0.001274f, +0.004029f, -0.003232f, +0.010374f, +0.000249f, -0.003115f, +0.005283f, +0.018700f, + +0.003149f, -0.012916f, +0.000259f, +0.018070f, +0.004422f, +0.009741f, +0.004591f, -0.001846f, -0.001689f, +0.005303f, + +0.004265f, +0.000437f, +0.001141f, +0.004093f, +0.008483f, +0.002717f, -0.003833f, -0.004478f, +0.002752f, -0.003166f, + +0.004903f, +0.000703f, -0.005839f, -0.000106f, -0.001946f, -0.005706f, +0.000351f, +0.000145f, +0.002089f, +0.003254f, + +0.001281f, +0.003740f, -0.003747f, -0.001573f, -0.002875f, +0.002372f, -0.000258f, +0.001036f, -0.000139f, -0.000157f, + +0.003942f, +0.000843f, -0.000082f, -0.001149f, +0.000376f, +0.002234f + }, + { + +0.025162f, -0.156737f, -0.086011f, +0.124402f, +0.030338f, +0.015196f, +0.004439f, -0.000872f, -0.007864f, +0.008334f, + -0.005239f, +0.010496f, -0.011838f, -0.019802f, -0.020988f, -0.004480f, -0.044057f, -0.017495f, +0.005777f, -0.007849f, + +0.001637f, -0.019399f, +0.000050f, -0.007492f, +0.004081f, +0.011061f, +0.005937f, -0.010301f, +0.020668f, -0.006606f, + -0.016813f, +0.006113f, +0.021417f, +0.009268f, +0.004327f, -0.002251f, -0.006208f, +0.000597f, -0.005210f, +0.003893f, + +0.006915f, -0.000486f, -0.010510f, +0.005630f, -0.021692f, -0.007379f, +0.006921f, +0.000662f, +0.011132f, +0.006656f, + -0.001839f, -0.002235f, -0.001323f, +0.002698f, +0.005688f, -0.010060f, -0.007567f, +0.003539f, +0.000412f, +0.003365f, + +0.000722f, -0.000202f, +0.002469f, +0.003509f, -0.000705f, +0.000958f, +0.005941f, -0.001073f, +0.001812f, -0.002289f, + -0.006269f, +0.003084f, -0.004361f, +0.003883f, +0.000645f, -0.003759f, +0.001722f, -0.002060f, +0.000892f, -0.000896f, + -0.005560f, +0.006515f, -0.002212f, +0.000160f, -0.000693f, -0.001815f, -0.000246f, -0.001875f, +0.004228f, +0.002090f, + +0.000898f, +0.001897f, -0.000310f, +0.001244f, +0.000015f, +0.001775f + }, + { + +0.003994f, -0.031257f, +0.081513f, -0.030435f, -0.044952f, +0.005475f, +0.000115f, -0.011255f, +0.011655f, +0.010201f, + -0.013285f, -0.014542f, -0.018510f, -0.013243f, +0.002012f, +0.010774f, -0.016404f, -0.016602f, -0.015956f, -0.018231f, + -0.000207f, -0.006568f, -0.009884f, -0.004857f, +0.011584f, +0.001445f, +0.004639f, -0.012601f, -0.019825f, +0.002992f, + -0.040405f, -0.025033f, +0.015783f, -0.009242f, -0.012103f, -0.000054f, +0.003427f, -0.007406f, +0.005680f, -0.007363f, + +0.012281f, -0.007195f, -0.004757f, +0.016303f, -0.005007f, +0.001750f, -0.001626f, +0.008689f, -0.005355f, +0.004143f, + -0.004979f, +0.003871f, -0.000238f, +0.005259f, +0.005319f, -0.000844f, +0.003554f, -0.001085f, -0.000403f, -0.006852f, + -0.001067f, +0.000620f, -0.003342f, +0.001222f, -0.002822f, -0.002293f, -0.003490f, +0.002027f, +0.003164f, +0.005645f, + +0.003298f, +0.003925f, -0.001135f, +0.004442f, -0.000973f, -0.000880f, -0.000681f, -0.004819f, -0.005017f, +0.002945f, + -0.002323f, -0.002064f, -0.001506f, +0.003551f, -0.003046f, +0.002003f, +0.000659f, -0.004415f, +0.000321f, +0.003986f, + +0.001108f, -0.001055f, +0.000216f, -0.003480f, -0.001210f, -0.001761f + }, + { + +0.023813f, -0.099711f, -0.074641f, +0.098691f, +0.060780f, +0.023796f, -0.014716f, -0.014957f, -0.000988f, +0.011122f, + -0.005550f, -0.017386f, -0.016468f, +0.017993f, +0.004874f, -0.016379f, -0.021365f, +0.026241f, +0.011351f, +0.027976f, + +0.009426f, -0.002102f, +0.021973f, -0.007748f, +0.009240f, -0.016673f, +0.014803f, -0.003082f, +0.006685f, -0.005336f, + -0.006313f, -0.004889f, -0.007303f, +0.010493f, +0.010491f, +0.002378f, -0.012484f, +0.004938f, +0.005374f, +0.014833f, + -0.001993f, -0.006637f, +0.005583f, +0.014509f, -0.002280f, +0.006617f, -0.001498f, +0.008275f, +0.003909f, -0.000194f, + -0.006195f, -0.011113f, +0.009654f, -0.000263f, -0.002182f, +0.012416f, +0.002601f, +0.002397f, +0.002870f, +0.013548f, + +0.007179f, -0.000661f, -0.002926f, -0.003623f, -0.006404f, +0.008322f, -0.001534f, +0.002140f, +0.002228f, -0.001041f, + +0.001166f, -0.005800f, -0.002476f, -0.001796f, +0.002024f, -0.000494f, +0.010574f, -0.002008f, +0.002970f, +0.000687f, + -0.000565f, -0.000773f, -0.002955f, +0.002998f, +0.003659f, +0.002119f, -0.001443f, +0.001920f, +0.001055f, -0.001691f, + -0.000289f, -0.000520f, +0.001531f, +0.001653f, -0.003003f, +0.003874f + }, + { + +0.004102f, -0.065114f, +0.084047f, -0.033157f, -0.034744f, -0.005267f, +0.002550f, +0.006891f, -0.001586f, -0.008429f, + +0.000531f, -0.010533f, -0.001780f, -0.013774f, +0.000876f, +0.000056f, +0.005896f, -0.012911f, +0.006933f, +0.025469f, + -0.014012f, +0.012542f, +0.006413f, +0.015884f, +0.020685f, -0.007985f, +0.021670f, -0.026083f, +0.030787f, -0.019879f, + +0.027665f, -0.021550f, -0.021554f, -0.005286f, -0.024473f, +0.004471f, +0.024919f, +0.006032f, -0.003035f, +0.003386f, + +0.000133f, -0.001048f, +0.005330f, -0.013836f, +0.008489f, +0.001573f, -0.001745f, +0.002330f, -0.000841f, +0.005268f, + -0.004979f, -0.004572f, -0.000701f, +0.003678f, +0.003935f, -0.004217f, -0.001635f, +0.003339f, -0.003288f, -0.001640f, + +0.002518f, +0.000614f, -0.002158f, +0.000048f, -0.001730f, +0.003373f, +0.004506f, +0.004728f, +0.002695f, +0.003439f, + +0.002691f, +0.006266f, +0.000033f, -0.000677f, +0.001429f, -0.003422f, +0.005036f, +0.002129f, +0.002746f, -0.003485f, + +0.000548f, +0.000546f, -0.001411f, -0.004334f, +0.003939f, +0.000042f, -0.002309f, +0.001503f, -0.001154f, -0.003541f, + +0.000695f, -0.002220f, -0.000759f, -0.001270f, -0.005105f, -0.001448f + }, + { + +0.010177f, +0.017965f, -0.003024f, +0.026703f, -0.000323f, -0.017500f, +0.063053f, -0.015184f, -0.017991f, -0.025186f, + -0.013685f, -0.001004f, -0.013704f, +0.005753f, -0.005378f, +0.009227f, +0.005120f, -0.012717f, +0.019018f, +0.005415f, + +0.020644f, -0.005426f, +0.001467f, -0.020866f, -0.014109f, +0.023563f, -0.017709f, +0.015320f, +0.021543f, +0.027203f, + +0.007987f, +0.010786f, -0.022826f, +0.015887f, +0.011832f, -0.014928f, +0.001013f, -0.015200f, +0.018579f, +0.001912f, + +0.008002f, -0.025431f, +0.001927f, -0.012412f, -0.003491f, +0.000076f, -0.000021f, -0.011329f, +0.002797f, -0.002522f, + +0.004216f, +0.010334f, +0.004310f, +0.008997f, -0.001460f, -0.006032f, +0.006531f, -0.012152f, +0.000002f, +0.016460f, + -0.002744f, -0.000022f, +0.002248f, -0.000521f, +0.002103f, -0.009562f, +0.009058f, +0.003034f, +0.010042f, -0.000853f, + +0.001485f, -0.001098f, -0.007817f, +0.002451f, -0.001868f, +0.002675f, +0.000226f, +0.000366f, -0.003249f, -0.001037f, + +0.003255f, -0.002037f, -0.003326f, -0.001689f, +0.001616f, -0.001415f, -0.000801f, -0.001202f, -0.000749f, -0.003370f, + +0.002599f, +0.002125f, -0.003349f, +0.000721f, -0.001103f, +0.002787f + }, + { + -0.001557f, +0.114111f, -0.000372f, +0.013431f, -0.000772f, -0.033535f, +0.003736f, +0.029216f, +0.003452f, -0.005163f, + +0.050025f, -0.007526f, -0.010256f, -0.014491f, -0.027393f, +0.012571f, -0.035478f, +0.008544f, +0.020431f, -0.015665f, + +0.016737f, -0.020093f, +0.008258f, -0.010339f, +0.014067f, -0.017813f, -0.002609f, +0.009331f, -0.003725f, +0.031024f, + +0.018667f, +0.001181f, +0.007188f, +0.007811f, -0.023729f, +0.034279f, +0.010126f, +0.011293f, -0.002049f, +0.006331f, + +0.015690f, +0.006361f, -0.006830f, +0.003182f, -0.003213f, -0.003028f, +0.012639f, -0.005021f, +0.000062f, -0.004171f, + -0.002230f, +0.005123f, -0.000867f, -0.003956f, +0.000606f, +0.003540f, -0.002418f, -0.001408f, -0.005602f, -0.002838f, + +0.003791f, +0.005260f, -0.003021f, +0.003573f, -0.009844f, -0.004919f, +0.006954f, -0.004753f, +0.002890f, +0.001060f, + +0.002828f, -0.005025f, -0.004725f, -0.000212f, +0.003501f, -0.002110f, +0.000444f, +0.002811f, -0.004110f, +0.001340f, + -0.003813f, -0.002974f, +0.000710f, +0.006882f, -0.002615f, -0.006074f, +0.001088f, +0.003262f, +0.004105f, +0.004434f, + -0.000936f, -0.000804f, -0.001614f, +0.003975f, -0.002400f, -0.000841f + }, + { + +0.014817f, -0.210049f, -0.006006f, +0.031781f, +0.026644f, +0.019583f, +0.073024f, -0.001907f, +0.005088f, -0.031723f, + -0.017205f, +0.002438f, +0.022045f, +0.013311f, -0.008189f, -0.009919f, +0.001953f, +0.026121f, +0.014037f, +0.008013f, + +0.018793f, +0.011805f, +0.005050f, -0.008969f, -0.003436f, +0.019898f, -0.015294f, +0.010051f, +0.001027f, -0.020340f, + +0.001643f, -0.009072f, +0.005586f, -0.003850f, +0.011597f, -0.008031f, +0.023436f, +0.002806f, +0.007278f, +0.001483f, + -0.010471f, +0.003181f, -0.010203f, +0.009611f, +0.001058f, -0.000526f, +0.004676f, +0.004791f, +0.009474f, +0.000933f, + -0.011168f, -0.002824f, +0.008435f, -0.001768f, +0.010262f, -0.013712f, -0.001361f, +0.011876f, +0.007681f, +0.003003f, + +0.004982f, -0.005091f, -0.002599f, +0.004925f, -0.001151f, +0.002482f, -0.005021f, -0.000212f, -0.001481f, -0.011769f, + -0.000383f, -0.005061f, -0.006674f, -0.004878f, -0.000596f, -0.000191f, -0.004956f, -0.000989f, -0.004820f, -0.007041f, + +0.002369f, +0.002303f, -0.002671f, -0.001818f, +0.000151f, -0.001309f, -0.004994f, +0.000542f, +0.002775f, -0.001667f, + +0.001146f, -0.002226f, +0.001473f, +0.004811f, -0.001169f, -0.000874f + }, + { + +0.000746f, +0.098992f, +0.013426f, +0.002946f, -0.019621f, -0.011264f, -0.037170f, +0.017981f, -0.001057f, +0.005531f, + -0.000215f, -0.010370f, +0.024969f, -0.021456f, -0.031561f, -0.007804f, -0.031106f, +0.011791f, +0.029979f, -0.026176f, + -0.016181f, -0.013511f, +0.003325f, +0.006552f, +0.021440f, +0.002458f, -0.003987f, -0.016328f, +0.023412f, +0.005882f, + +0.017732f, -0.016370f, -0.007742f, -0.000584f, -0.009397f, -0.003727f, -0.019166f, -0.023011f, -0.010944f, +0.015409f, + +0.010574f, -0.007999f, +0.004151f, -0.008273f, -0.005945f, +0.006844f, +0.003346f, +0.004351f, +0.008956f, +0.003598f, + -0.003371f, -0.015091f, -0.000788f, -0.001076f, +0.005081f, -0.012044f, -0.003700f, -0.010506f, -0.005298f, +0.003233f, + -0.012174f, +0.001853f, -0.008513f, +0.000406f, +0.008570f, +0.002194f, -0.004125f, +0.005690f, -0.004785f, -0.002683f, + +0.001615f, +0.000715f, -0.004086f, +0.002322f, -0.002731f, -0.002244f, +0.001640f, -0.000785f, -0.007289f, +0.002965f, + +0.000732f, -0.003051f, -0.002774f, +0.003171f, +0.001914f, +0.000063f, -0.007445f, +0.000937f, -0.006571f, +0.000523f, + -0.001013f, +0.001083f, +0.002216f, +0.000691f, -0.001518f, -0.002114f + }, + { + +0.016239f, -0.189185f, -0.024806f, +0.037138f, -0.004699f, -0.006371f, +0.054419f, -0.007425f, -0.011470f, -0.013642f, + -0.040930f, -0.007639f, -0.054484f, -0.008196f, -0.032653f, +0.024165f, +0.014408f, -0.028959f, -0.029989f, +0.017456f, + +0.005527f, +0.006565f, -0.033852f, -0.013410f, -0.014028f, -0.011686f, +0.017672f, +0.025760f, -0.000367f, -0.018952f, + -0.021562f, +0.011994f, +0.000438f, -0.004681f, -0.008050f, -0.005197f, +0.006306f, +0.002174f, +0.010776f, -0.000311f, + +0.002214f, +0.001621f, -0.018350f, +0.012340f, -0.014744f, +0.006573f, -0.008675f, +0.001613f, +0.007693f, +0.008898f, + +0.004535f, -0.005968f, -0.005646f, +0.002286f, +0.003736f, -0.002980f, -0.000035f, -0.005362f, +0.004364f, +0.002223f, + +0.002088f, +0.005109f, -0.000984f, -0.014105f, +0.006263f, -0.007155f, -0.000604f, +0.003327f, +0.007829f, +0.005340f, + -0.003032f, -0.001374f, -0.009546f, +0.000404f, -0.006587f, +0.002502f, -0.005263f, -0.002680f, -0.000531f, -0.000855f, + -0.002877f, +0.000109f, +0.005334f, -0.000572f, +0.001643f, -0.001776f, -0.000645f, +0.003723f, +0.002592f, -0.003866f, + -0.002191f, +0.003545f, +0.003724f, +0.003190f, -0.000011f, +0.001552f + }, + { + -0.000124f, +0.110841f, -0.010620f, -0.002964f, -0.018475f, -0.034799f, -0.050043f, +0.015389f, +0.015447f, -0.002615f, + -0.014968f, -0.011532f, -0.000618f, -0.029151f, -0.011639f, +0.040162f, -0.018168f, +0.000763f, -0.007395f, -0.004142f, + -0.029285f, +0.011408f, +0.011708f, +0.005982f, +0.016986f, -0.006323f, +0.011975f, -0.022353f, -0.003530f, +0.031689f, + -0.001518f, +0.006396f, +0.024389f, -0.016091f, +0.016731f, +0.010085f, +0.003441f, +0.016945f, -0.017550f, -0.008992f, + +0.000600f, +0.005743f, +0.007863f, +0.019149f, +0.007621f, +0.018284f, -0.001993f, +0.018015f, +0.009629f, +0.004396f, + +0.020650f, -0.002177f, -0.007263f, +0.005150f, -0.002149f, +0.002303f, +0.003851f, +0.004588f, -0.001183f, -0.000970f, + +0.015188f, -0.001720f, -0.005601f, +0.005092f, -0.000317f, +0.003223f, +0.008057f, -0.004321f, +0.000697f, +0.000401f, + +0.003302f, -0.004652f, -0.000584f, +0.000842f, -0.001234f, +0.013068f, +0.002036f, -0.004588f, -0.007187f, +0.005979f, + +0.000588f, +0.003160f, +0.003797f, -0.002650f, +0.001882f, +0.000741f, -0.001965f, +0.001085f, +0.001717f, -0.000773f, + +0.005128f, +0.000145f, +0.003894f, +0.000156f, +0.001391f, +0.000273f + } + }, + { + { + +0.004883f, +0.211408f, -0.058552f, -0.084760f, -0.030524f, +0.012458f, +0.006276f, -0.008724f, +0.023777f, -0.010662f, + +0.001733f, -0.002750f, -0.008953f, -0.016391f, +0.016823f, -0.013911f, +0.013581f, +0.036448f, -0.007296f, -0.061088f, + +0.000915f, -0.025533f, +0.017959f, -0.003901f, +0.004136f, +0.002107f, +0.002984f, -0.007012f, -0.008365f, -0.004432f, + -0.020843f, +0.020258f, -0.002902f, -0.004683f, -0.001641f, -0.005506f, +0.004437f, +0.005130f, +0.007090f, -0.002334f, + -0.007782f, -0.013775f, +0.001985f, -0.001374f, +0.003796f, +0.005865f, -0.003992f, -0.009330f, +0.001571f, -0.000303f, + -0.007059f, -0.006899f, +0.009399f, -0.004284f, -0.007770f, +0.004163f, -0.001139f, -0.004224f, -0.000967f, -0.000802f, + +0.003137f, +0.002996f, +0.005992f, +0.008210f, +0.001577f, +0.006565f, -0.007529f, +0.000762f, -0.006378f, -0.000888f, + +0.000838f, -0.000981f, -0.004288f, -0.003006f, +0.002381f, -0.001853f, -0.001526f, +0.007989f, +0.003092f, -0.001511f, + -0.001932f, -0.001132f, +0.003396f, +0.003588f, +0.002208f, -0.003405f, +0.000603f, -0.001930f, +0.001166f, -0.000979f, + +0.000124f, +0.001018f, +0.002324f, +0.001005f, -0.000247f, +0.000003f + }, + { + -0.002933f, -0.071562f, -0.029880f, -0.043511f, +0.031544f, -0.011084f, -0.004639f, -0.003974f, +0.018946f, -0.009868f, + -0.004093f, +0.005286f, +0.010978f, +0.013349f, +0.001977f, +0.009135f, -0.016433f, -0.024527f, -0.007740f, +0.028132f, + -0.002805f, -0.009597f, -0.000591f, +0.009363f, +0.002273f, -0.023590f, -0.016706f, +0.008206f, +0.006496f, -0.007450f, + -0.003072f, -0.009046f, -0.011342f, -0.006899f, +0.005216f, +0.017851f, +0.005747f, -0.005732f, -0.008011f, +0.002342f, + -0.005925f, -0.002658f, -0.011221f, +0.002698f, -0.000670f, -0.013148f, +0.004769f, +0.003508f, -0.009850f, +0.008221f, + -0.008843f, -0.003339f, -0.000297f, -0.002431f, +0.010071f, -0.007157f, -0.000173f, +0.002118f, +0.001066f, -0.009616f, + -0.000339f, +0.000201f, +0.007502f, +0.001396f, -0.001244f, -0.000929f, -0.002724f, +0.002116f, +0.004052f, -0.003762f, + +0.004122f, +0.002307f, -0.004461f, +0.000439f, -0.002373f, +0.000298f, -0.002029f, -0.004368f, -0.005112f, +0.000649f, + +0.005183f, +0.001828f, -0.000645f, +0.006533f, -0.000953f, -0.001095f, -0.002287f, -0.001530f, -0.000762f, +0.002330f, + -0.004790f, -0.001709f, -0.001276f, +0.001732f, +0.000974f, -0.003755f + }, + { + +0.000758f, +0.074154f, -0.064360f, -0.097699f, +0.023215f, -0.002154f, +0.006656f, +0.006287f, -0.006224f, -0.005561f, + +0.005807f, -0.025396f, -0.004707f, -0.006188f, +0.001604f, -0.003852f, -0.003673f, -0.002142f, +0.008410f, +0.013301f, + +0.006123f, +0.005842f, -0.005404f, -0.000103f, +0.008229f, -0.017560f, +0.009690f, -0.016100f, +0.004246f, -0.000037f, + +0.015632f, -0.021356f, +0.002566f, -0.007334f, -0.006140f, -0.001078f, +0.007376f, +0.007474f, -0.005246f, +0.009585f, + -0.008431f, +0.009731f, -0.005368f, -0.006092f, +0.009541f, +0.013743f, +0.015299f, -0.005101f, -0.004014f, -0.001921f, + +0.002505f, +0.007937f, +0.000879f, -0.004294f, +0.001406f, -0.006709f, +0.008209f, +0.000552f, +0.005464f, -0.008620f, + -0.002753f, +0.002325f, +0.000661f, -0.005687f, -0.005476f, -0.000044f, +0.000464f, +0.003215f, -0.002401f, +0.000121f, + +0.001602f, +0.002906f, +0.003703f, -0.004278f, -0.002313f, -0.003268f, -0.001357f, -0.001729f, +0.002941f, -0.002164f, + -0.001336f, +0.004152f, -0.001465f, +0.001928f, -0.003288f, +0.002913f, -0.001207f, +0.002918f, -0.000846f, +0.001124f, + -0.000525f, +0.000964f, -0.001917f, -0.000740f, -0.001318f, -0.000947f + }, + { + -0.023695f, -0.063263f, +0.041789f, +0.047257f, -0.013945f, +0.019856f, -0.005383f, -0.009322f, -0.008321f, +0.006397f, + -0.008653f, -0.002569f, -0.005017f, -0.014932f, -0.009825f, -0.006138f, +0.003846f, +0.020692f, -0.007033f, +0.015966f, + +0.012000f, +0.003217f, +0.010159f, -0.000104f, +0.002641f, +0.001493f, +0.002250f, +0.005514f, -0.001859f, +0.001832f, + -0.006188f, +0.004033f, +0.011652f, -0.011585f, -0.022911f, -0.014560f, -0.009666f, +0.010843f, -0.009882f, +0.007863f, + +0.002218f, -0.000228f, +0.012875f, -0.003007f, +0.014291f, -0.015032f, -0.004503f, +0.001962f, -0.000072f, +0.003495f, + +0.002513f, +0.003627f, -0.002695f, +0.002665f, -0.005782f, +0.007898f, +0.001129f, -0.004965f, -0.004017f, +0.002637f, + -0.003415f, -0.002114f, +0.008073f, -0.004024f, +0.003705f, -0.003873f, +0.004892f, +0.001361f, -0.003884f, +0.004971f, + -0.003748f, -0.001642f, +0.001148f, -0.003439f, -0.000897f, +0.001569f, -0.004034f, -0.001742f, -0.000320f, -0.001724f, + -0.001248f, +0.000701f, +0.002318f, +0.001272f, -0.000171f, +0.000198f, -0.000841f, -0.004769f, +0.001025f, -0.001214f, + +0.002765f, -0.002461f, +0.003244f, -0.000823f, +0.000010f, +0.000889f + }, + { + -0.001128f, +0.011557f, -0.009032f, -0.009489f, +0.010615f, -0.007577f, +0.002479f, +0.002721f, -0.010979f, +0.003908f, + +0.001798f, +0.015162f, -0.000327f, -0.020635f, -0.026648f, -0.022372f, -0.014165f, +0.011107f, -0.002445f, -0.015491f, + +0.017056f, -0.024535f, +0.028453f, -0.010690f, -0.001230f, +0.016299f, +0.004893f, +0.000813f, -0.001865f, -0.011860f, + -0.006703f, +0.005243f, -0.002757f, +0.001042f, -0.000200f, +0.012637f, +0.000519f, +0.012829f, -0.008306f, +0.001108f, + +0.005643f, +0.006484f, -0.005471f, -0.001221f, -0.004315f, +0.007984f, +0.005149f, -0.001695f, -0.004975f, +0.006839f, + +0.002580f, -0.011268f, -0.007678f, +0.006665f, -0.002170f, +0.006637f, +0.001839f, -0.002133f, -0.003872f, +0.001433f, + +0.001974f, +0.001353f, +0.003354f, +0.006236f, +0.005063f, +0.000780f, +0.000233f, -0.002060f, +0.007203f, -0.008089f, + -0.000318f, +0.000905f, -0.004031f, -0.000701f, +0.000456f, -0.003259f, +0.003365f, +0.001901f, -0.000464f, -0.000659f, + +0.000333f, +0.003106f, -0.004821f, -0.001236f, -0.000859f, +0.001386f, -0.002332f, +0.001505f, -0.001647f, -0.002954f, + +0.003083f, +0.000102f, -0.001045f, -0.001432f, +0.000337f, +0.002043f + }, + { + -0.028402f, -0.049258f, +0.041777f, +0.048509f, -0.048415f, +0.009187f, +0.011501f, -0.003893f, -0.020066f, -0.001368f, + -0.005342f, +0.018060f, -0.007453f, -0.016236f, -0.016333f, -0.008681f, -0.019613f, +0.004312f, +0.008928f, -0.004884f, + +0.001074f, -0.014960f, +0.007867f, -0.012073f, +0.006066f, +0.022555f, +0.005261f, -0.007475f, +0.018274f, +0.006652f, + -0.004746f, +0.009697f, +0.004678f, -0.003576f, -0.001499f, -0.001890f, -0.007595f, -0.000633f, -0.006401f, +0.002568f, + +0.004230f, +0.003951f, -0.012249f, -0.002046f, -0.021352f, -0.001473f, +0.017082f, +0.000266f, +0.004893f, -0.003281f, + -0.003703f, +0.004946f, -0.004792f, +0.000123f, +0.008742f, -0.005128f, -0.004135f, +0.005495f, -0.001580f, +0.000824f, + -0.002617f, -0.001581f, +0.008996f, +0.000364f, -0.006739f, -0.000882f, +0.002009f, -0.002364f, +0.005670f, +0.000480f, + -0.002500f, +0.007051f, -0.004097f, -0.000466f, +0.002832f, -0.000128f, +0.003280f, -0.002950f, +0.000256f, +0.000006f, + -0.003685f, +0.006720f, -0.006462f, -0.002097f, +0.001695f, -0.001480f, +0.002622f, -0.001465f, +0.001967f, +0.002519f, + +0.001304f, +0.003572f, -0.001359f, -0.000906f, -0.001409f, -0.001945f + }, + { + -0.000004f, -0.065225f, +0.068425f, -0.007208f, -0.000717f, +0.005749f, -0.001354f, -0.002446f, +0.012086f, +0.003676f, + -0.010049f, +0.003273f, -0.011627f, -0.015838f, -0.002600f, -0.017555f, -0.030924f, -0.007655f, -0.000326f, -0.010106f, + -0.014464f, -0.009090f, +0.026038f, +0.005155f, -0.001454f, +0.011501f, -0.001184f, -0.007086f, +0.001686f, +0.040470f, + -0.001901f, -0.013609f, +0.007795f, +0.007216f, -0.003073f, +0.000652f, +0.002720f, -0.010654f, +0.014650f, -0.004677f, + +0.005219f, -0.010105f, -0.005663f, +0.018366f, -0.014159f, -0.002689f, -0.003709f, +0.002844f, -0.006830f, +0.009394f, + -0.008782f, -0.008331f, -0.013543f, +0.003099f, +0.002915f, -0.003664f, +0.001089f, -0.000854f, +0.000903f, -0.003314f, + -0.004446f, -0.007332f, -0.003034f, +0.001414f, -0.004591f, +0.001494f, +0.000740f, +0.003781f, +0.002516f, +0.002208f, + -0.001316f, +0.006946f, +0.002852f, +0.003427f, +0.000540f, -0.000055f, +0.000322f, +0.003720f, +0.000917f, +0.003600f, + -0.002303f, -0.000536f, -0.001329f, +0.001486f, -0.005507f, +0.000277f, +0.002836f, -0.003976f, -0.000792f, +0.000938f, + -0.001086f, -0.001023f, +0.002002f, -0.002155f, -0.000808f, -0.002774f + }, + { + -0.027596f, -0.012601f, +0.028573f, +0.013249f, -0.029170f, +0.010929f, +0.004677f, +0.003398f, +0.003982f, +0.012001f, + +0.005481f, +0.010255f, -0.010389f, +0.009390f, +0.030202f, +0.008808f, -0.025901f, +0.023852f, +0.003809f, +0.013033f, + +0.002345f, -0.002554f, +0.007424f, -0.014792f, +0.015171f, -0.018979f, +0.013281f, -0.002132f, +0.019125f, -0.003857f, + -0.007913f, +0.005627f, +0.000253f, +0.002091f, -0.004855f, +0.002810f, +0.002730f, +0.008953f, -0.002582f, +0.007273f, + +0.000655f, -0.002590f, -0.008156f, +0.002674f, -0.000769f, +0.010219f, -0.003982f, -0.003407f, -0.000923f, +0.001476f, + -0.003784f, +0.000529f, +0.006026f, -0.012499f, -0.002486f, +0.012306f, +0.006792f, +0.005360f, -0.004230f, +0.005212f, + +0.005370f, +0.002253f, -0.005885f, -0.001436f, +0.001577f, +0.009084f, -0.000005f, +0.005028f, +0.000579f, -0.001690f, + +0.003611f, -0.004039f, -0.000005f, -0.001324f, +0.001947f, -0.004074f, +0.005898f, -0.000294f, +0.004239f, +0.000981f, + +0.000933f, +0.003836f, +0.000280f, +0.004821f, +0.002453f, -0.000315f, -0.002944f, +0.001918f, +0.003086f, -0.001117f, + -0.000971f, -0.001181f, +0.000748f, +0.001852f, -0.002071f, +0.001951f + }, + { + +0.002834f, -0.055733f, +0.107833f, -0.007122f, +0.008995f, +0.000539f, -0.004691f, +0.004845f, -0.000821f, -0.004941f, + -0.000755f, +0.004990f, +0.006947f, -0.024656f, -0.002963f, +0.018844f, +0.028185f, -0.006416f, +0.008015f, +0.030585f, + -0.009198f, +0.009149f, -0.018608f, -0.002520f, +0.013435f, -0.021464f, +0.016200f, -0.020488f, +0.026636f, -0.019075f, + +0.033505f, -0.015600f, -0.018304f, -0.001613f, -0.011018f, -0.000612f, +0.017118f, -0.006439f, -0.017398f, -0.005654f, + -0.000429f, -0.002915f, +0.003490f, -0.011630f, +0.009144f, -0.007736f, -0.006365f, +0.009885f, -0.002863f, +0.000107f, + -0.000156f, -0.001519f, -0.006244f, -0.003159f, -0.000640f, -0.004693f, +0.003971f, +0.007085f, -0.004993f, -0.003880f, + -0.000714f, -0.002983f, +0.000727f, +0.002709f, -0.003342f, +0.003253f, +0.001622f, -0.001336f, +0.001011f, +0.002883f, + -0.001372f, +0.002504f, -0.002018f, -0.001102f, +0.004130f, -0.002778f, +0.000312f, -0.002538f, -0.001968f, -0.004054f, + +0.004606f, +0.000766f, -0.003369f, -0.005095f, +0.003505f, -0.000639f, -0.000987f, +0.004141f, +0.001896f, -0.000257f, + +0.001828f, -0.000432f, -0.000524f, +0.000259f, -0.001372f, +0.001268f + }, + { + -0.010058f, +0.125346f, +0.071137f, -0.008130f, -0.022175f, -0.018522f, +0.070935f, -0.022807f, -0.030550f, -0.029324f, + -0.006750f, +0.008200f, -0.000059f, +0.020225f, -0.004190f, -0.015894f, -0.026880f, -0.040855f, +0.003751f, -0.006516f, + +0.010122f, -0.025715f, +0.015862f, +0.006857f, +0.012528f, +0.026196f, -0.025286f, +0.012221f, -0.013800f, -0.001322f, + +0.000704f, +0.007762f, -0.020987f, +0.015777f, +0.008172f, -0.007248f, +0.008950f, -0.024723f, +0.020914f, +0.011391f, + +0.012848f, -0.015740f, +0.006224f, -0.009042f, -0.008994f, +0.001982f, +0.011236f, -0.008523f, -0.002224f, -0.005082f, + +0.000391f, +0.008259f, +0.007420f, -0.004265f, -0.012855f, -0.008301f, +0.006300f, -0.007639f, -0.003852f, +0.006867f, + -0.002947f, +0.001502f, +0.000265f, -0.002761f, +0.002215f, -0.011591f, +0.005447f, +0.003376f, +0.004145f, -0.005009f, + +0.003247f, +0.002418f, -0.006029f, +0.005930f, +0.000987f, +0.002941f, +0.003401f, -0.000036f, -0.009227f, -0.004489f, + +0.003260f, -0.004483f, -0.003683f, +0.004222f, +0.000492f, -0.000104f, +0.003818f, +0.000748f, +0.000365f, -0.001693f, + +0.002250f, +0.001653f, -0.003120f, +0.000571f, -0.003091f, +0.000580f + }, + { + +0.000030f, +0.084367f, -0.048213f, -0.022118f, +0.003953f, -0.006944f, +0.019377f, -0.004425f, -0.026556f, -0.021289f, + +0.022468f, -0.005473f, -0.000760f, -0.027100f, -0.047859f, +0.024220f, +0.010539f, -0.003329f, -0.008002f, -0.020772f, + +0.016501f, -0.015780f, +0.019991f, -0.020056f, +0.024723f, -0.002035f, +0.001139f, +0.027715f, +0.012494f, -0.001080f, + -0.001144f, -0.016014f, +0.001441f, +0.015897f, -0.037629f, +0.011516f, -0.011113f, -0.001279f, -0.004391f, -0.001189f, + +0.003290f, -0.004848f, +0.001456f, +0.012347f, -0.001906f, +0.001067f, +0.010057f, -0.010924f, +0.006075f, +0.000028f, + +0.000722f, +0.002215f, -0.003106f, -0.009914f, -0.001882f, +0.003469f, -0.009311f, -0.002406f, +0.005372f, +0.006070f, + +0.002229f, +0.003460f, +0.006726f, +0.009522f, -0.000577f, +0.003221f, +0.001287f, -0.008693f, +0.004908f, +0.005900f, + +0.002288f, -0.004643f, -0.003415f, -0.004604f, -0.002771f, +0.001750f, +0.007093f, +0.002090f, -0.008378f, +0.002890f, + -0.001086f, -0.002473f, -0.000730f, +0.002124f, -0.002051f, -0.002303f, +0.004560f, +0.004687f, +0.002767f, -0.000801f, + -0.003233f, -0.002088f, -0.004735f, +0.002311f, -0.001296f, +0.001618f + }, + { + -0.011141f, -0.228117f, -0.028463f, -0.008147f, +0.007899f, -0.042694f, +0.013973f, -0.008021f, +0.010179f, -0.016119f, + +0.013387f, +0.000162f, -0.001990f, -0.010332f, -0.011046f, +0.011519f, -0.002658f, +0.010333f, +0.019600f, +0.008140f, + +0.004100f, +0.001324f, +0.020242f, +0.006429f, -0.010897f, +0.015265f, -0.009124f, -0.001718f, -0.002550f, -0.003952f, + +0.002541f, -0.014510f, +0.003828f, -0.013765f, +0.009112f, -0.014138f, +0.015958f, +0.009988f, +0.007653f, -0.000698f, + -0.002306f, -0.000623f, -0.018292f, +0.008920f, -0.002393f, -0.003232f, -0.002188f, -0.004367f, +0.006722f, -0.004325f, + -0.006826f, +0.003875f, +0.014753f, +0.002963f, +0.011157f, -0.011516f, -0.006448f, -0.003222f, -0.001830f, -0.004902f, + -0.002240f, -0.004348f, +0.003024f, +0.002535f, -0.007042f, -0.001407f, -0.006338f, +0.001575f, +0.002086f, -0.008716f, + +0.000515f, -0.003830f, -0.002405f, +0.003300f, -0.001440f, -0.003019f, -0.002486f, +0.005939f, +0.001294f, -0.002945f, + +0.003482f, -0.002999f, -0.001825f, +0.002565f, +0.000578f, -0.000509f, -0.004642f, +0.000980f, +0.004244f, -0.000267f, + +0.002170f, -0.001998f, -0.000212f, +0.004935f, -0.002433f, -0.002427f + }, + { + -0.001325f, +0.021920f, -0.050222f, +0.005774f, -0.008548f, +0.006900f, -0.022200f, +0.011613f, -0.004685f, -0.002377f, + -0.006700f, -0.006690f, +0.031371f, -0.011662f, -0.038550f, +0.022290f, +0.007753f, +0.024233f, +0.012254f, -0.019852f, + -0.002117f, +0.010770f, +0.020075f, -0.019290f, +0.007482f, -0.006472f, -0.003663f, -0.017187f, +0.009688f, -0.002711f, + +0.011553f, -0.016761f, +0.013727f, +0.001555f, -0.005877f, -0.003753f, -0.023747f, -0.019965f, -0.004049f, +0.023668f, + +0.009655f, -0.008194f, +0.009380f, -0.004019f, -0.012452f, +0.005674f, +0.004766f, +0.000026f, +0.002761f, -0.001044f, + -0.005687f, -0.010557f, -0.002835f, -0.003212f, +0.013390f, -0.003509f, +0.001014f, -0.004415f, -0.000087f, +0.009147f, + -0.001072f, +0.006280f, -0.011853f, -0.000765f, +0.005572f, -0.004509f, -0.007998f, +0.004330f, -0.007671f, -0.001730f, + +0.002664f, -0.003106f, -0.004296f, +0.005794f, -0.004449f, -0.002922f, +0.001200f, +0.005452f, -0.001081f, +0.005245f, + -0.000049f, +0.000077f, +0.000537f, +0.002906f, +0.003796f, +0.003938f, -0.002779f, +0.004840f, -0.003533f, -0.002316f, + -0.003853f, +0.000193f, +0.003036f, +0.001280f, -0.002423f, -0.002353f + }, + { + -0.013146f, -0.184239f, -0.013584f, +0.033013f, +0.001074f, -0.023351f, +0.052053f, +0.006835f, +0.001291f, +0.017948f, + -0.000898f, +0.017902f, -0.036930f, +0.011227f, -0.032528f, +0.013504f, +0.005403f, -0.014107f, -0.013774f, +0.016839f, + +0.001548f, +0.015044f, -0.013192f, +0.000771f, +0.005769f, -0.009490f, +0.007045f, +0.012268f, -0.009695f, -0.019520f, + -0.017083f, +0.011632f, +0.001895f, -0.013889f, -0.007890f, +0.010377f, +0.016548f, -0.008514f, +0.007280f, -0.002795f, + -0.001629f, +0.008821f, -0.000728f, +0.023230f, -0.015457f, +0.011004f, -0.006473f, +0.002141f, -0.002294f, +0.008917f, + +0.005131f, -0.008999f, -0.000724f, -0.000386f, -0.006217f, -0.005236f, -0.002110f, -0.001071f, +0.011215f, -0.005032f, + -0.002310f, +0.002620f, -0.001995f, -0.010912f, +0.006524f, -0.003100f, +0.000048f, -0.001623f, +0.001497f, +0.000599f, + +0.001926f, +0.002473f, -0.010952f, +0.003669f, -0.001345f, +0.005443f, -0.003227f, -0.001079f, +0.003190f, +0.001802f, + +0.001237f, +0.003551f, +0.002589f, -0.002951f, +0.001811f, +0.000386f, +0.000723f, +0.002266f, +0.003547f, -0.000230f, + +0.001734f, +0.001383f, -0.001491f, +0.003923f, +0.000748f, +0.001372f + }, + { + -0.001056f, +0.111518f, -0.018150f, -0.008704f, +0.002250f, +0.012710f, -0.026799f, -0.004600f, +0.004087f, -0.003759f, + -0.003046f, +0.004272f, -0.003921f, +0.017222f, +0.045140f, +0.059560f, -0.001753f, +0.007509f, +0.004351f, -0.021522f, + -0.030350f, +0.013165f, -0.011698f, -0.007390f, +0.020251f, -0.010927f, +0.017232f, -0.006068f, -0.004111f, +0.024132f, + -0.001643f, -0.005534f, +0.019161f, -0.017231f, +0.014570f, +0.004120f, -0.011757f, -0.003643f, -0.014154f, -0.009366f, + -0.004189f, -0.000375f, -0.000997f, -0.000846f, -0.011576f, +0.008307f, -0.010064f, +0.003918f, +0.002190f, -0.000437f, + +0.017386f, +0.001715f, -0.002263f, +0.003513f, -0.009706f, +0.000549f, +0.002530f, +0.004765f, +0.006481f, -0.005586f, + +0.005432f, -0.003385f, -0.003797f, +0.001530f, -0.003101f, +0.002747f, +0.004117f, -0.001046f, +0.001765f, -0.008189f, + +0.003877f, -0.002977f, -0.007776f, -0.003515f, -0.003816f, +0.002735f, -0.003652f, +0.001160f, -0.001126f, +0.002862f, + -0.001825f, +0.002332f, -0.002492f, -0.003118f, +0.002304f, -0.002726f, -0.001519f, +0.000403f, -0.001729f, -0.002087f, + +0.003240f, -0.003461f, +0.005297f, +0.001651f, -0.000991f, +0.000012f + } + }, + { + { + -0.008284f, +0.211916f, -0.010306f, -0.113087f, -0.033144f, +0.013997f, +0.007648f, -0.003333f, +0.024033f, -0.014551f, + +0.007578f, -0.005071f, -0.005551f, -0.005831f, -0.002184f, +0.003168f, +0.006608f, +0.029486f, -0.008127f, -0.047197f, + -0.007831f, -0.016072f, +0.001617f, +0.006841f, +0.001821f, +0.003536f, +0.000721f, -0.007313f, +0.000649f, -0.017565f, + -0.002426f, +0.014351f, +0.007330f, -0.014200f, -0.007128f, +0.007912f, +0.008431f, -0.006393f, +0.004247f, +0.002269f, + -0.011122f, -0.006936f, -0.001978f, +0.003538f, +0.006273f, -0.000749f, -0.006034f, -0.004931f, +0.000935f, -0.003660f, + -0.004349f, -0.000993f, +0.001622f, -0.004195f, -0.005609f, -0.000177f, -0.000461f, -0.007011f, -0.001850f, +0.001656f, + -0.001868f, +0.006745f, -0.000110f, +0.010284f, +0.004385f, +0.003896f, +0.001034f, -0.008420f, -0.001477f, -0.004970f, + +0.000705f, +0.000025f, -0.005521f, -0.000866f, +0.000062f, -0.000038f, +0.002134f, +0.000919f, +0.004101f, +0.001439f, + -0.001927f, -0.000771f, +0.000861f, +0.004357f, -0.000609f, +0.001527f, -0.002766f, +0.000859f, -0.001534f, +0.001519f, + +0.001600f, -0.000214f, +0.001668f, -0.000187f, +0.001765f, +0.000486f + }, + { + -0.000598f, -0.108535f, -0.004872f, +0.007982f, -0.031250f, -0.006178f, -0.005330f, +0.012059f, -0.002506f, -0.005528f, + +0.008673f, -0.004867f, +0.022286f, +0.008045f, -0.000694f, -0.007649f, -0.003188f, -0.028086f, +0.002580f, +0.022663f, + +0.006380f, -0.017815f, +0.001593f, +0.014157f, -0.001825f, -0.011083f, -0.006399f, +0.001341f, -0.012029f, +0.007723f, + -0.006819f, +0.000918f, -0.022070f, -0.001331f, +0.001508f, +0.013021f, +0.006096f, +0.003575f, -0.010269f, +0.006547f, + -0.012336f, -0.009198f, +0.000854f, -0.004919f, +0.000871f, -0.006494f, +0.009591f, -0.003922f, -0.009750f, +0.003109f, + -0.004203f, -0.001903f, +0.000391f, -0.000649f, +0.001221f, -0.002908f, +0.002478f, -0.002847f, +0.001732f, -0.009592f, + +0.001076f, +0.006217f, +0.001562f, +0.001657f, -0.002999f, +0.000557f, -0.002037f, +0.002712f, +0.004164f, -0.004019f, + +0.000878f, +0.003093f, -0.002395f, -0.000158f, -0.001083f, -0.001287f, -0.005051f, -0.003765f, +0.001534f, -0.000935f, + -0.000142f, +0.003588f, +0.003464f, +0.001883f, +0.002176f, -0.001729f, -0.002885f, -0.001783f, +0.001110f, +0.000898f, + -0.001889f, -0.000722f, -0.000781f, +0.000129f, +0.000518f, -0.005177f + }, + { + +0.000810f, -0.034339f, +0.001518f, -0.061297f, -0.027848f, -0.003135f, +0.007863f, +0.009551f, -0.010620f, -0.009218f, + +0.018721f, -0.030526f, +0.001019f, -0.015995f, -0.000957f, +0.004077f, -0.004218f, -0.000420f, -0.000418f, +0.021286f, + -0.011007f, +0.022396f, -0.002069f, -0.006647f, +0.010257f, -0.008517f, -0.010870f, -0.002472f, +0.002663f, +0.006562f, + -0.001760f, -0.003349f, -0.006364f, -0.001956f, -0.013020f, -0.001523f, +0.005650f, +0.003551f, +0.000387f, +0.001716f, + +0.002506f, +0.000876f, +0.003926f, -0.006469f, -0.001740f, +0.017873f, +0.009722f, -0.000847f, -0.004993f, -0.006134f, + +0.005822f, +0.013330f, -0.007228f, +0.002418f, +0.001299f, -0.007404f, +0.006354f, +0.002091f, +0.001296f, -0.006403f, + -0.002499f, -0.001505f, +0.006653f, -0.009321f, -0.002453f, -0.000424f, -0.003363f, +0.002584f, +0.003161f, -0.003343f, + -0.001641f, +0.007179f, +0.002148f, -0.003798f, -0.005382f, -0.005533f, +0.003938f, +0.001309f, -0.002255f, -0.000846f, + +0.002163f, +0.000998f, -0.000193f, +0.001878f, -0.001756f, -0.002520f, +0.002302f, +0.001249f, +0.000234f, -0.000395f, + +0.000770f, -0.000118f, -0.000081f, -0.001728f, -0.000183f, -0.001051f + }, + { + +0.026357f, -0.001120f, -0.066058f, +0.023750f, +0.022115f, +0.007885f, +0.001498f, -0.010550f, -0.011250f, -0.007481f, + +0.007404f, -0.013002f, -0.007172f, -0.002478f, -0.019114f, -0.007472f, +0.009424f, -0.002191f, +0.011287f, +0.020782f, + +0.009724f, +0.001069f, -0.010976f, +0.007158f, +0.010388f, -0.007375f, -0.002106f, +0.003573f, +0.002834f, -0.002244f, + +0.001598f, +0.001134f, +0.014979f, -0.015083f, -0.012404f, -0.018929f, -0.004862f, +0.000192f, -0.000759f, +0.001487f, + +0.006345f, +0.002186f, +0.010516f, +0.005716f, +0.007595f, -0.010634f, -0.007218f, +0.001414f, -0.007207f, +0.011078f, + +0.000875f, -0.000433f, +0.004218f, +0.001217f, -0.002169f, -0.000099f, +0.001680f, -0.002557f, -0.000983f, -0.009967f, + +0.006524f, +0.002402f, +0.004472f, -0.003428f, -0.002105f, -0.000917f, +0.004628f, +0.003998f, +0.001376f, -0.002288f, + -0.001619f, -0.005893f, +0.003743f, -0.000101f, -0.002241f, +0.001988f, -0.003459f, -0.000049f, -0.003516f, -0.001754f, + -0.001125f, +0.000054f, +0.002353f, +0.004160f, -0.002643f, +0.000778f, -0.003092f, -0.002232f, -0.001597f, +0.001280f, + +0.004040f, -0.003811f, +0.003506f, -0.001131f, +0.000436f, +0.000802f + }, + { + +0.000704f, -0.070258f, +0.048807f, +0.010030f, -0.002454f, -0.001901f, -0.003119f, +0.003405f, -0.004949f, -0.002756f, + +0.011019f, +0.014804f, -0.002683f, -0.024655f, -0.026595f, -0.017686f, -0.023810f, +0.019013f, -0.034848f, +0.009965f, + +0.005227f, -0.000751f, -0.008943f, +0.006411f, +0.000642f, +0.002629f, +0.011225f, +0.008464f, -0.000055f, -0.000385f, + -0.019474f, +0.001272f, +0.002632f, -0.003956f, +0.019037f, +0.006136f, +0.006757f, +0.009025f, -0.016479f, +0.000279f, + +0.018456f, -0.010209f, +0.002622f, +0.002908f, -0.006411f, -0.003720f, +0.009254f, +0.000458f, -0.006710f, +0.002784f, + +0.003579f, -0.005314f, -0.010639f, +0.002686f, -0.005508f, +0.009087f, -0.002070f, -0.000914f, -0.003086f, +0.000612f, + +0.001774f, +0.003070f, +0.003068f, +0.003171f, +0.005182f, +0.003263f, -0.004661f, -0.004028f, +0.004128f, -0.000644f, + -0.002942f, -0.001957f, +0.001283f, -0.004732f, +0.002804f, +0.000477f, +0.004617f, -0.000152f, +0.000554f, -0.002902f, + +0.000160f, -0.000834f, -0.001687f, +0.001674f, -0.004050f, +0.001398f, -0.002440f, +0.001400f, -0.002399f, -0.000905f, + -0.000021f, +0.000341f, -0.001333f, -0.000280f, +0.001364f, +0.001729f + }, + { + +0.031211f, -0.025296f, -0.043805f, -0.000340f, +0.010779f, +0.000424f, +0.001013f, -0.006142f, +0.005909f, -0.020534f, + +0.011094f, -0.015817f, +0.009222f, -0.000029f, -0.017073f, -0.015386f, -0.006253f, +0.000889f, -0.019834f, +0.001895f, + +0.014823f, -0.016816f, +0.009916f, -0.026104f, +0.033388f, +0.016828f, -0.003129f, +0.000306f, +0.004068f, +0.011888f, + +0.004006f, +0.018069f, -0.009036f, +0.000262f, -0.001819f, -0.005437f, -0.007758f, -0.005355f, +0.002260f, -0.003318f, + -0.000845f, +0.006571f, -0.014199f, -0.006024f, -0.007765f, -0.006418f, +0.015052f, -0.007830f, +0.005391f, -0.000604f, + -0.004004f, +0.009633f, -0.000381f, +0.000050f, -0.003451f, +0.006817f, +0.000390f, +0.001746f, -0.008429f, -0.001652f, + -0.000351f, +0.002244f, +0.005856f, -0.005698f, +0.003035f, -0.004569f, +0.000889f, -0.002293f, +0.003500f, +0.001621f, + +0.003687f, +0.005559f, -0.004542f, -0.004750f, +0.004766f, +0.002745f, +0.001216f, -0.002752f, -0.001558f, -0.000828f, + -0.000697f, +0.001354f, -0.002749f, -0.001776f, +0.001837f, +0.000672f, +0.002431f, +0.000668f, -0.002262f, +0.001902f, + +0.001395f, +0.003936f, -0.001430f, -0.000190f, -0.002408f, -0.002029f + }, + { + -0.002962f, +0.001650f, -0.015452f, +0.012387f, +0.003806f, +0.001584f, -0.001221f, +0.009073f, -0.003185f, -0.001695f, + -0.007192f, +0.006987f, -0.009857f, -0.000908f, -0.008365f, -0.020013f, -0.036313f, -0.022058f, +0.011456f, -0.005632f, + -0.022168f, -0.006958f, +0.023055f, +0.011149f, -0.000685f, +0.003956f, +0.006515f, -0.012409f, +0.004078f, +0.039931f, + +0.006954f, +0.000872f, -0.011132f, +0.021726f, +0.002393f, -0.012148f, +0.013730f, -0.013716f, +0.009593f, +0.007394f, + -0.002364f, -0.009237f, -0.007887f, +0.012827f, -0.003941f, -0.003476f, -0.004679f, +0.005295f, -0.012485f, +0.009847f, + -0.002509f, -0.010799f, -0.006606f, -0.002753f, +0.004294f, -0.010414f, +0.003040f, -0.000813f, -0.001559f, +0.002336f, + -0.004799f, -0.004744f, -0.003111f, -0.005403f, -0.002652f, -0.000313f, +0.004614f, +0.002303f, +0.000845f, +0.001352f, + +0.004955f, +0.004962f, +0.003299f, -0.002012f, +0.001381f, +0.002944f, +0.000434f, +0.001517f, +0.006835f, -0.004320f, + +0.000152f, -0.000178f, +0.002995f, -0.002330f, -0.003515f, -0.001238f, -0.000391f, +0.000617f, -0.003613f, +0.001373f, + -0.001977f, +0.000513f, +0.000149f, -0.001587f, -0.002105f, +0.000357f + }, + { + +0.033029f, -0.007031f, -0.032162f, -0.032087f, +0.009424f, +0.004269f, +0.011296f, -0.005803f, +0.007096f, +0.005042f, + +0.036946f, -0.008858f, -0.007749f, +0.010667f, +0.015160f, +0.029897f, -0.022896f, +0.002040f, +0.007100f, +0.013898f, + -0.002428f, +0.000680f, +0.009866f, -0.009836f, -0.000036f, -0.010142f, +0.008404f, +0.002561f, +0.011968f, +0.001979f, + -0.006472f, +0.004371f, -0.002487f, +0.001788f, -0.007429f, -0.004311f, +0.016935f, +0.003771f, -0.006614f, +0.000148f, + +0.001540f, +0.002545f, -0.011899f, -0.005126f, +0.006167f, +0.004351f, +0.004605f, -0.008920f, +0.004831f, +0.000430f, + -0.007559f, +0.005314f, -0.005065f, -0.000099f, -0.003396f, +0.008261f, +0.004001f, +0.009870f, -0.003404f, +0.000085f, + +0.007441f, -0.002696f, -0.001012f, -0.001630f, +0.004837f, +0.006099f, +0.001973f, +0.003388f, -0.001058f, +0.002182f, + +0.003131f, -0.007283f, -0.000116f, +0.003666f, -0.002576f, -0.001803f, +0.001638f, +0.003405f, -0.000426f, +0.002077f, + +0.000851f, +0.004781f, +0.000723f, +0.003090f, +0.002951f, -0.002036f, +0.000047f, +0.001794f, +0.002540f, -0.001742f, + +0.000027f, -0.002109f, +0.002220f, +0.001689f, -0.000371f, -0.001959f + }, + { + -0.004583f, +0.066019f, -0.030711f, +0.021787f, +0.006999f, +0.004808f, -0.004855f, +0.000166f, +0.001793f, -0.000683f, + -0.005929f, +0.011861f, -0.000458f, -0.018246f, -0.008287f, +0.016728f, +0.024687f, -0.000460f, +0.005441f, +0.013978f, + +0.006478f, +0.006811f, -0.007281f, -0.013531f, +0.008641f, -0.014214f, +0.008924f, -0.004956f, +0.005929f, +0.009057f, + -0.006293f, +0.002136f, -0.013094f, -0.005772f, -0.002702f, +0.000278f, +0.006967f, -0.000196f, -0.024136f, +0.001163f, + +0.004446f, -0.007083f, -0.001072f, -0.012110f, +0.007468f, -0.005862f, -0.002154f, +0.004661f, -0.002877f, -0.002886f, + +0.002353f, -0.002166f, -0.003380f, -0.006386f, +0.003288f, -0.005972f, +0.004445f, +0.004816f, -0.003217f, -0.004127f, + -0.003864f, +0.000143f, +0.002404f, -0.002028f, -0.001098f, +0.000562f, +0.002586f, +0.000611f, -0.000042f, -0.002035f, + +0.000316f, -0.000840f, -0.000133f, +0.002282f, +0.001237f, -0.001689f, -0.000077f, -0.003326f, -0.002669f, -0.001829f, + +0.001586f, +0.001330f, -0.003536f, -0.000785f, +0.001550f, +0.000412f, -0.001800f, +0.002623f, +0.001996f, +0.004139f, + -0.002007f, +0.002686f, -0.001778f, -0.000735f, +0.000657f, +0.002588f + }, + { + +0.011169f, +0.192466f, -0.017952f, -0.003520f, -0.031547f, +0.004198f, +0.038181f, -0.006771f, -0.026515f, -0.015280f, + -0.023617f, -0.003213f, +0.010251f, -0.001446f, +0.019208f, -0.014648f, -0.033020f, -0.024019f, -0.005316f, -0.021201f, + +0.009415f, -0.024054f, +0.011766f, +0.012322f, +0.013698f, +0.027984f, -0.019578f, -0.000099f, +0.002035f, -0.011860f, + -0.002701f, -0.002453f, +0.002201f, +0.010106f, +0.005204f, -0.015189f, +0.010347f, -0.009908f, +0.000289f, +0.012658f, + +0.007578f, +0.002590f, -0.018156f, +0.000503f, +0.003032f, -0.006263f, +0.006952f, +0.006979f, -0.004419f, -0.006621f, + -0.002799f, +0.003666f, +0.021310f, -0.014989f, -0.010053f, -0.000738f, -0.005143f, -0.005468f, -0.000589f, -0.003427f, + -0.000929f, +0.005402f, +0.001192f, -0.006977f, +0.003863f, -0.004899f, -0.004804f, +0.006336f, +0.001570f, -0.006679f, + +0.007548f, -0.000942f, +0.001036f, +0.001187f, +0.001387f, +0.001295f, +0.003052f, -0.002210f, -0.006474f, -0.002770f, + -0.000584f, +0.002695f, -0.007165f, +0.001094f, +0.001806f, +0.001393f, +0.006605f, +0.001148f, +0.000786f, -0.001805f, + +0.001961f, -0.001634f, -0.000213f, +0.000284f, +0.000478f, -0.003187f + }, + { + +0.000358f, -0.016243f, +0.039415f, -0.015629f, -0.006491f, -0.007252f, +0.026465f, +0.001038f, -0.028095f, -0.009910f, + -0.007449f, +0.005325f, -0.006423f, -0.005785f, -0.029156f, -0.006146f, +0.019734f, -0.016294f, +0.008590f, -0.026536f, + -0.011343f, +0.021044f, +0.020043f, -0.034287f, +0.020565f, +0.010429f, -0.005188f, +0.008501f, +0.030204f, -0.022818f, + +0.010187f, -0.009493f, -0.002421f, +0.002472f, -0.012539f, -0.019671f, -0.002688f, -0.008266f, -0.000337f, +0.005595f, + -0.008529f, -0.010224f, +0.010630f, +0.001920f, +0.006695f, +0.006351f, +0.005650f, -0.007245f, +0.005043f, +0.000050f, + -0.003435f, +0.005663f, -0.004500f, -0.014634f, +0.003749f, +0.001035f, -0.000532f, -0.010337f, +0.010307f, +0.007122f, + +0.000294f, -0.004468f, +0.009937f, +0.007090f, +0.007352f, -0.000136f, -0.000322f, -0.003436f, +0.001088f, +0.009993f, + -0.004336f, -0.002857f, -0.001839f, -0.001950f, -0.007206f, +0.000388f, +0.005725f, +0.001272f, -0.001567f, -0.002265f, + +0.004455f, -0.004390f, -0.002642f, -0.002364f, +0.001779f, +0.000073f, +0.006576f, +0.002308f, -0.000601f, +0.000350f, + -0.000688f, -0.003329f, +0.000153f, -0.003172f, -0.000061f, +0.001704f + }, + { + +0.006845f, -0.248167f, -0.014974f, +0.000818f, -0.011660f, +0.000427f, -0.041761f, -0.003855f, +0.002633f, -0.007629f, + -0.011877f, +0.020058f, -0.017764f, -0.000975f, -0.022580f, +0.004369f, +0.025015f, -0.016137f, +0.031440f, +0.012730f, + +0.002523f, -0.005741f, +0.009087f, +0.009527f, -0.004816f, +0.008312f, +0.008939f, -0.012902f, -0.008640f, +0.010484f, + -0.008314f, -0.010482f, +0.005414f, -0.005646f, +0.000650f, -0.014412f, +0.009922f, +0.011086f, -0.001104f, +0.006873f, + +0.006857f, -0.008751f, -0.008005f, +0.004468f, -0.006214f, +0.000936f, -0.005580f, -0.012118f, +0.007128f, -0.004235f, + +0.007502f, -0.002703f, +0.004315f, +0.009464f, -0.003059f, -0.002297f, -0.002304f, -0.005214f, -0.008907f, -0.001507f, + -0.000465f, -0.006727f, +0.003442f, -0.001827f, -0.007425f, -0.000842f, -0.003091f, -0.003439f, +0.006504f, +0.000766f, + -0.006903f, -0.002570f, +0.002986f, +0.003516f, -0.005125f, -0.000902f, -0.004199f, +0.004974f, +0.005100f, -0.004101f, + +0.002760f, +0.000113f, -0.000183f, +0.003707f, -0.002502f, -0.003124f, +0.000392f, -0.001650f, +0.002119f, +0.004667f, + -0.000406f, -0.001422f, +0.000721f, +0.000859f, -0.001502f, +0.002016f + }, + { + +0.000516f, -0.055750f, +0.005203f, +0.003634f, +0.004865f, +0.001358f, -0.014612f, -0.001497f, +0.005517f, -0.005240f, + -0.013020f, +0.011342f, -0.010203f, +0.021840f, -0.007016f, +0.020752f, -0.015096f, +0.033314f, +0.004027f, -0.013288f, + +0.004872f, -0.008153f, +0.030372f, -0.009677f, -0.025838f, +0.017976f, -0.013154f, -0.006012f, -0.011726f, +0.008383f, + +0.012299f, -0.027068f, +0.015655f, -0.011606f, +0.020153f, -0.014524f, -0.006272f, -0.015050f, -0.002542f, +0.012101f, + +0.005393f, -0.001793f, -0.004326f, -0.000292f, -0.004653f, +0.002822f, +0.006977f, -0.004927f, +0.001725f, +0.002553f, + -0.012781f, -0.007060f, -0.002740f, -0.000593f, +0.010153f, +0.002064f, +0.000247f, +0.003821f, -0.003860f, +0.005939f, + +0.006751f, +0.004783f, -0.012207f, +0.002900f, -0.002270f, -0.003658f, -0.008400f, +0.006549f, -0.003885f, -0.000424f, + -0.002319f, -0.000455f, -0.001967f, -0.000751f, +0.004431f, -0.004391f, -0.002466f, +0.005837f, -0.001003f, +0.006956f, + -0.006370f, +0.004166f, +0.005139f, -0.004942f, +0.008061f, +0.004353f, +0.000630f, -0.001094f, +0.001358f, -0.005992f, + +0.000164f, +0.001916f, +0.004626f, -0.003660f, -0.001642f, -0.001202f + }, + { + +0.010789f, -0.175653f, -0.029908f, +0.016369f, +0.009169f, +0.006584f, +0.010570f, +0.017193f, -0.011048f, +0.020429f, + +0.006000f, +0.007320f, -0.015925f, -0.008513f, -0.014595f, +0.009792f, -0.003887f, -0.015605f, +0.013494f, +0.000620f, + +0.005423f, +0.010729f, -0.015435f, -0.001461f, +0.023774f, -0.010643f, +0.006332f, +0.002185f, -0.004695f, -0.013842f, + -0.017396f, -0.002024f, +0.003904f, -0.007068f, +0.007076f, +0.005849f, +0.004418f, -0.008591f, +0.009661f, +0.003732f, + -0.005799f, -0.007265f, +0.014168f, +0.013830f, -0.017635f, +0.006696f, -0.002155f, +0.007468f, +0.002225f, +0.004755f, + +0.001064f, -0.005187f, -0.002352f, -0.001073f, -0.011027f, +0.004754f, -0.007301f, +0.006598f, +0.007439f, -0.005714f, + +0.006215f, -0.005297f, -0.005472f, -0.003389f, +0.000646f, -0.002441f, +0.002651f, -0.003615f, +0.001636f, -0.001118f, + +0.001402f, +0.001335f, -0.003874f, -0.002508f, +0.004887f, +0.000035f, -0.000256f, -0.003232f, +0.002327f, +0.000889f, + +0.003413f, +0.003909f, -0.000031f, -0.000858f, +0.000534f, -0.001011f, +0.005526f, +0.000262f, +0.000216f, +0.001729f, + +0.001162f, +0.000066f, -0.001699f, +0.003160f, +0.003181f, -0.000008f + }, + { + +0.001136f, +0.052935f, +0.024114f, -0.025512f, +0.019288f, +0.005259f, -0.021281f, -0.003652f, -0.004851f, +0.001275f, + +0.008506f, +0.004474f, -0.012318f, +0.000069f, +0.097733f, +0.011397f, +0.016205f, +0.006543f, +0.027162f, -0.022119f, + -0.014591f, -0.004744f, -0.004808f, -0.002164f, +0.010156f, -0.012384f, +0.005015f, +0.002684f, +0.009982f, +0.018752f, + -0.000297f, -0.018000f, +0.016541f, -0.016329f, +0.013707f, +0.002132f, +0.002211f, -0.019315f, -0.012451f, +0.000628f, + -0.003207f, -0.013271f, -0.005688f, -0.004620f, -0.000666f, +0.002830f, -0.005001f, -0.002557f, +0.004625f, +0.006932f, + +0.007375f, +0.003997f, +0.000389f, -0.001810f, -0.011559f, -0.000087f, +0.007744f, +0.003003f, +0.008099f, -0.004655f, + +0.002869f, -0.002005f, +0.000840f, -0.004478f, -0.005622f, +0.005667f, -0.000961f, +0.008696f, -0.001405f, -0.004397f, + +0.001254f, -0.007088f, -0.002150f, -0.001208f, -0.000878f, -0.005978f, -0.000890f, +0.002536f, -0.001153f, -0.003578f, + +0.000861f, -0.000779f, -0.002869f, +0.001872f, -0.000341f, -0.003433f, +0.000134f, -0.000977f, -0.004042f, +0.000442f, + +0.000448f, -0.002007f, +0.003799f, +0.001460f, -0.000754f, -0.001352f + } + }, + { + { + +0.009504f, +0.187348f, -0.012059f, -0.061788f, +0.010334f, +0.010615f, -0.000031f, -0.001678f, +0.030926f, +0.002686f, + +0.002748f, -0.022157f, -0.008670f, -0.001256f, +0.000231f, -0.002442f, -0.004074f, +0.022603f, -0.010895f, -0.007435f, + +0.034787f, -0.008059f, -0.005709f, -0.005606f, -0.015695f, -0.010158f, -0.003928f, +0.000585f, +0.021039f, +0.006594f, + +0.009576f, +0.009492f, +0.019204f, -0.003776f, -0.004545f, +0.013093f, +0.015907f, -0.003357f, +0.000770f, +0.009592f, + -0.002009f, -0.002201f, -0.004884f, -0.002138f, +0.001203f, +0.003486f, +0.001395f, +0.005245f, +0.002611f, -0.005807f, + +0.002515f, -0.000255f, -0.004365f, -0.004304f, -0.008688f, -0.006056f, -0.000967f, -0.008859f, -0.004401f, +0.000015f, + -0.005477f, +0.002741f, -0.007955f, +0.004996f, +0.002315f, -0.002594f, -0.001000f, -0.006435f, +0.001534f, -0.004301f, + -0.002264f, -0.000053f, +0.000474f, +0.003361f, -0.001698f, -0.002596f, -0.001223f, -0.001935f, +0.002187f, +0.001380f, + -0.003313f, -0.001019f, +0.000199f, +0.001317f, -0.002390f, +0.001231f, -0.002346f, +0.001451f, -0.002059f, +0.002398f, + +0.002660f, -0.001525f, +0.000991f, +0.000397f, +0.001678f, +0.000909f + }, + { + +0.002140f, -0.030711f, +0.062358f, +0.040940f, -0.032137f, -0.008529f, +0.001171f, +0.019266f, -0.003976f, -0.005665f, + -0.003053f, -0.014908f, +0.011386f, -0.001424f, +0.002018f, -0.015377f, +0.011238f, +0.008119f, +0.022738f, +0.014047f, + +0.012971f, -0.016088f, -0.006644f, +0.000746f, -0.004702f, -0.002425f, +0.003044f, +0.006096f, -0.013817f, +0.007779f, + +0.003447f, +0.011844f, -0.020653f, +0.002464f, +0.001015f, +0.001286f, +0.001985f, +0.012055f, -0.008302f, +0.004956f, + -0.006777f, +0.005513f, +0.006333f, +0.000570f, +0.013167f, -0.001304f, +0.004810f, -0.011983f, -0.011343f, +0.005663f, + +0.006458f, +0.006214f, +0.002078f, -0.002868f, -0.008269f, -0.004432f, +0.005655f, -0.000198f, -0.001939f, -0.010845f, + +0.007334f, +0.006883f, -0.004884f, +0.000305f, -0.004835f, +0.002152f, +0.004339f, +0.003628f, +0.004947f, -0.004279f, + -0.002643f, -0.000674f, -0.001199f, +0.001768f, -0.000332f, -0.000628f, +0.000571f, +0.002960f, +0.003834f, +0.002008f, + +0.002277f, +0.001563f, +0.001482f, -0.000703f, +0.000726f, -0.000215f, +0.000478f, -0.000683f, +0.000729f, +0.001604f, + +0.004140f, +0.003390f, +0.000829f, -0.001179f, -0.000054f, -0.003338f + }, + { + +0.000289f, -0.150191f, -0.070355f, +0.023721f, +0.010359f, -0.006315f, +0.011318f, -0.003558f, -0.019121f, -0.005369f, + +0.013277f, -0.029464f, +0.011823f, -0.006042f, +0.013857f, +0.019905f, +0.001025f, -0.021772f, -0.028071f, +0.009526f, + -0.012972f, +0.013716f, -0.008088f, +0.002798f, +0.009902f, -0.012188f, -0.020037f, -0.002511f, +0.002386f, +0.000167f, + -0.000310f, +0.000688f, -0.015307f, -0.000478f, -0.003258f, +0.001486f, -0.004433f, -0.013741f, -0.008813f, -0.001638f, + +0.007298f, +0.003657f, +0.008505f, -0.010370f, -0.013335f, +0.008863f, +0.002562f, -0.001253f, +0.001125f, -0.003605f, + +0.005147f, +0.007894f, -0.007800f, +0.007390f, +0.001017f, -0.004968f, +0.005402f, +0.001422f, +0.004357f, -0.004127f, + -0.003830f, -0.004198f, +0.005892f, -0.002150f, -0.001519f, -0.003816f, -0.002713f, +0.000430f, +0.002127f, -0.004176f, + -0.004164f, +0.001434f, +0.001805f, -0.000643f, -0.005391f, -0.003857f, +0.007455f, +0.003826f, -0.001379f, -0.000994f, + +0.002418f, +0.001409f, -0.001471f, +0.002197f, -0.000891f, -0.003724f, +0.001971f, +0.003042f, +0.002708f, +0.001604f, + +0.001739f, -0.001579f, +0.001176f, -0.000143f, +0.000540f, -0.000756f + }, + { + -0.025328f, +0.003560f, +0.009409f, +0.016590f, -0.002509f, +0.003725f, +0.003109f, -0.012508f, -0.011247f, -0.018131f, + +0.002154f, -0.006564f, +0.003213f, +0.006994f, -0.011376f, -0.003750f, +0.006792f, -0.006331f, +0.002845f, +0.010238f, + -0.000957f, -0.003113f, -0.015548f, +0.000945f, +0.015491f, +0.004100f, -0.008724f, +0.004796f, +0.000001f, -0.004612f, + +0.011883f, +0.002103f, +0.007279f, -0.007896f, +0.004302f, +0.006814f, +0.010296f, -0.003054f, -0.000607f, +0.000113f, + +0.016394f, +0.006725f, +0.007116f, +0.004418f, -0.001198f, -0.001348f, +0.000502f, +0.002397f, -0.007069f, +0.005170f, + -0.001813f, -0.000171f, +0.004793f, +0.002298f, +0.000882f, -0.001702f, +0.001662f, +0.002742f, -0.001986f, -0.009686f, + +0.006396f, -0.003158f, +0.005833f, -0.000173f, -0.002373f, +0.005536f, +0.004615f, +0.004295f, +0.002895f, -0.005045f, + +0.000042f, -0.001440f, +0.004147f, +0.003172f, +0.000009f, +0.001798f, -0.002398f, +0.001094f, -0.002561f, -0.001477f, + -0.000711f, -0.000180f, -0.000053f, +0.003667f, -0.001762f, +0.000999f, -0.002009f, +0.001239f, +0.000273f, +0.000774f, + +0.001639f, -0.003708f, +0.002001f, -0.002350f, +0.000982f, +0.000801f + }, + { + +0.000464f, -0.094563f, +0.029559f, +0.017711f, -0.010004f, -0.000279f, +0.002104f, +0.005286f, +0.002103f, +0.000984f, + +0.009941f, +0.009697f, -0.000405f, -0.017636f, -0.009544f, +0.011806f, -0.023466f, -0.000737f, -0.028245f, +0.004729f, + -0.008466f, -0.011119f, -0.032608f, +0.014232f, +0.012028f, -0.013373f, -0.002037f, +0.006039f, -0.003720f, +0.008070f, + +0.000848f, +0.000498f, +0.001879f, -0.007926f, +0.002807f, -0.002214f, +0.014521f, +0.010545f, -0.008701f, -0.003194f, + +0.019560f, -0.011247f, -0.006617f, +0.001013f, -0.004133f, -0.002645f, +0.002128f, -0.002796f, -0.007890f, -0.001023f, + +0.003653f, +0.004191f, -0.004835f, +0.003035f, -0.000823f, +0.007790f, -0.006224f, +0.000505f, -0.004987f, -0.005157f, + -0.003581f, +0.001578f, +0.002315f, -0.002071f, -0.000598f, -0.001004f, -0.003447f, -0.002743f, -0.000465f, +0.002627f, + +0.002181f, +0.001678f, +0.000500f, -0.005540f, +0.004054f, +0.002309f, +0.005990f, -0.001780f, -0.000880f, -0.003378f, + -0.000131f, -0.001451f, +0.000445f, +0.002954f, -0.006550f, +0.000929f, -0.001088f, +0.001270f, -0.002273f, -0.001227f, + -0.002244f, -0.000337f, -0.001340f, +0.000523f, -0.000100f, -0.000909f + }, + { + -0.025869f, -0.046324f, +0.030387f, -0.005907f, -0.008810f, -0.006752f, +0.001815f, +0.011722f, +0.018698f, -0.022711f, + +0.011689f, -0.022791f, +0.014339f, +0.009236f, -0.013826f, -0.010059f, -0.006067f, +0.001358f, -0.011592f, +0.003114f, + +0.008400f, -0.012585f, +0.012635f, -0.021297f, +0.029087f, +0.007562f, -0.001258f, -0.003342f, -0.009914f, +0.004673f, + +0.004241f, +0.006941f, -0.010788f, +0.009838f, +0.006126f, -0.006452f, -0.012240f, -0.011162f, -0.002734f, -0.006073f, + -0.004176f, +0.003269f, -0.011969f, +0.000941f, +0.005932f, -0.002950f, +0.010062f, -0.015457f, -0.003085f, -0.004630f, + -0.011150f, +0.004762f, +0.006877f, +0.006874f, -0.005843f, +0.004501f, -0.000465f, +0.001276f, -0.005337f, -0.000872f, + +0.002352f, +0.003251f, -0.000697f, -0.005401f, +0.005783f, -0.003123f, +0.002333f, -0.002347f, +0.002379f, -0.000193f, + -0.000209f, +0.002130f, -0.002922f, -0.004071f, +0.001067f, +0.001603f, +0.001836f, -0.000800f, -0.000920f, +0.000002f, + +0.000257f, -0.000033f, -0.002123f, -0.002391f, +0.001101f, -0.000786f, -0.000534f, +0.000416f, -0.003133f, -0.000175f, + +0.000314f, +0.001564f, -0.002012f, +0.001090f, -0.001092f, -0.001314f + }, + { + +0.000937f, +0.026954f, -0.026992f, +0.003543f, -0.007243f, +0.000738f, -0.000702f, +0.004185f, -0.015091f, +0.001493f, + -0.001921f, +0.011345f, +0.003906f, +0.008712f, -0.004756f, +0.003403f, -0.005513f, -0.012579f, +0.016276f, -0.003764f, + -0.030722f, -0.014688f, +0.001998f, +0.006487f, -0.009863f, -0.002957f, +0.017165f, -0.006388f, +0.002082f, +0.015058f, + -0.003413f, +0.008147f, -0.002627f, +0.017876f, +0.001753f, -0.013045f, +0.013483f, -0.007088f, -0.000763f, -0.003371f, + +0.000111f, +0.003855f, -0.000645f, +0.006969f, -0.000987f, +0.001133f, -0.005878f, +0.009365f, -0.002302f, +0.009134f, + -0.004647f, -0.006359f, +0.001690f, -0.009037f, -0.002956f, -0.008732f, +0.005723f, -0.001487f, +0.001686f, +0.008774f, + -0.003610f, -0.003363f, -0.002633f, -0.005146f, -0.000856f, +0.001962f, +0.006672f, +0.000391f, -0.000584f, +0.001610f, + +0.003863f, +0.000064f, +0.002017f, -0.001508f, +0.001595f, +0.000946f, -0.002919f, -0.002173f, +0.006846f, -0.004198f, + +0.002263f, -0.003111f, +0.000641f, -0.002508f, -0.001804f, +0.002307f, +0.000278f, +0.002113f, -0.004081f, +0.000575f, + -0.003132f, -0.000276f, -0.000632f, -0.001627f, -0.002027f, +0.001712f + }, + { + -0.033157f, -0.035432f, +0.038230f, -0.045814f, -0.012016f, -0.006809f, +0.013628f, -0.003507f, -0.000647f, -0.007980f, + +0.039803f, +0.002501f, -0.002000f, +0.012512f, +0.000663f, +0.008615f, -0.017723f, +0.006341f, -0.003980f, -0.006933f, + -0.012577f, +0.002634f, +0.018901f, -0.004475f, -0.000447f, -0.000887f, +0.004443f, -0.007435f, -0.002531f, +0.000643f, + +0.004459f, +0.009064f, -0.012626f, -0.012228f, -0.005149f, -0.003643f, +0.009453f, +0.000404f, -0.008742f, -0.006439f, + -0.002244f, +0.006726f, +0.002498f, +0.003255f, +0.003539f, -0.002401f, +0.009220f, +0.006006f, +0.013395f, +0.003485f, + -0.005781f, +0.003253f, -0.002970f, +0.008025f, -0.001265f, +0.002984f, +0.000374f, +0.007758f, -0.005257f, -0.000237f, + +0.003215f, -0.006080f, +0.004715f, -0.002616f, +0.000905f, +0.006347f, +0.001331f, +0.004128f, +0.001295f, +0.002913f, + +0.002388f, -0.007335f, +0.001057f, +0.005243f, -0.002942f, -0.001955f, +0.000058f, -0.000151f, -0.005248f, -0.000220f, + +0.000310f, +0.003247f, -0.003088f, -0.001945f, +0.000455f, +0.000679f, +0.002250f, -0.000902f, -0.000062f, -0.000875f, + +0.001476f, -0.002924f, +0.000360f, -0.000172f, +0.001323f, -0.000663f + }, + { + -0.002042f, +0.042587f, -0.090742f, +0.008167f, -0.006677f, +0.000931f, +0.000330f, +0.002854f, +0.003076f, +0.002181f, + -0.012140f, +0.001715f, +0.018401f, +0.008208f, -0.009851f, -0.021333f, -0.010745f, +0.004063f, +0.009793f, +0.002446f, + -0.005851f, +0.003289f, +0.001042f, -0.000134f, +0.008335f, -0.019492f, +0.019854f, -0.005814f, -0.008327f, +0.009663f, + -0.011299f, -0.000790f, -0.009671f, -0.000241f, +0.006461f, +0.007996f, +0.003011f, +0.009538f, -0.015602f, +0.009078f, + +0.006565f, -0.007145f, +0.002204f, -0.013553f, +0.006098f, +0.000037f, -0.004169f, -0.006653f, -0.004880f, -0.002013f, + -0.002540f, +0.000248f, +0.001795f, -0.005893f, +0.002178f, -0.006268f, +0.004308f, +0.000642f, -0.002943f, +0.000669f, + -0.002933f, +0.001769f, -0.000256f, -0.004976f, +0.001732f, -0.002506f, -0.000675f, -0.001927f, -0.001723f, -0.002044f, + -0.001083f, -0.001453f, +0.001832f, +0.002281f, +0.001236f, +0.000217f, +0.003249f, +0.001146f, -0.000849f, -0.001202f, + -0.000283f, -0.000016f, -0.001884f, +0.000902f, -0.001233f, -0.000892f, -0.000846f, +0.001669f, -0.000190f, +0.002126f, + -0.001873f, +0.002642f, -0.002723f, +0.001536f, +0.002885f, +0.000572f + }, + { + -0.009374f, +0.151674f, -0.038720f, +0.007307f, -0.012775f, +0.009269f, +0.016016f, +0.013825f, +0.000301f, -0.008097f, + -0.028067f, -0.006507f, +0.005967f, -0.017595f, +0.009499f, +0.014516f, +0.003436f, -0.008062f, -0.012254f, -0.045322f, + -0.006626f, -0.017842f, +0.000361f, +0.006685f, -0.008029f, +0.020701f, -0.004702f, -0.000253f, +0.007285f, -0.010362f, + +0.005249f, -0.004686f, +0.007334f, +0.012826f, +0.003325f, -0.010764f, +0.003873f, -0.015096f, -0.010554f, -0.004501f, + -0.002282f, +0.009329f, -0.014698f, +0.002012f, +0.005141f, -0.009941f, +0.002261f, +0.013600f, +0.004534f, +0.003502f, + +0.000106f, +0.001509f, +0.019740f, -0.001805f, +0.005644f, +0.001494f, -0.007778f, -0.004181f, -0.001149f, -0.014369f, + +0.000173f, +0.006048f, +0.001072f, -0.006761f, +0.001036f, +0.001068f, -0.003585f, -0.001443f, -0.002036f, -0.002977f, + +0.005717f, -0.001303f, +0.003144f, -0.004199f, -0.003025f, -0.002714f, +0.002850f, +0.003804f, +0.001515f, -0.000535f, + -0.003296f, +0.002493f, -0.004496f, +0.001585f, -0.001481f, +0.000741f, +0.004727f, +0.000543f, +0.003841f, -0.000851f, + +0.002790f, +0.000903f, -0.000772f, -0.002641f, +0.000868f, -0.002434f + }, + { + +0.002155f, -0.081058f, +0.001664f, +0.008290f, +0.000868f, -0.002923f, +0.030406f, +0.008415f, -0.012071f, -0.004618f, + -0.008523f, +0.016549f, +0.003779f, +0.001812f, -0.005633f, +0.009904f, +0.009864f, -0.019748f, +0.018282f, -0.017982f, + -0.015988f, +0.013211f, -0.006847f, -0.036677f, +0.008493f, +0.002847f, -0.005478f, -0.003491f, +0.009314f, -0.033379f, + +0.018102f, +0.003339f, +0.003535f, +0.002448f, -0.009108f, -0.021666f, -0.005791f, -0.013605f, +0.000583f, +0.002306f, + -0.012302f, -0.005285f, +0.006048f, -0.010181f, +0.010586f, +0.009559f, -0.004851f, -0.011545f, +0.004277f, +0.004722f, + -0.003853f, -0.000092f, -0.001758f, -0.003460f, +0.012137f, +0.005315f, +0.002943f, -0.012130f, +0.008583f, +0.007453f, + +0.002508f, -0.007963f, -0.002301f, -0.000791f, +0.007820f, -0.005696f, -0.002871f, -0.003421f, -0.001788f, +0.009335f, + -0.002574f, -0.001971f, +0.000939f, +0.000048f, -0.005354f, -0.000758f, +0.001849f, +0.003603f, +0.000706f, -0.005809f, + +0.003011f, -0.003977f, -0.000147f, +0.002482f, +0.006750f, -0.001096f, +0.002714f, +0.001850f, -0.000133f, +0.003816f, + +0.001364f, -0.002437f, +0.003246f, -0.003148f, -0.002123f, +0.001964f + }, + { + +0.002888f, -0.203379f, +0.059325f, +0.033980f, -0.024186f, -0.002645f, -0.047073f, -0.009417f, +0.002354f, -0.008323f, + -0.059243f, +0.002044f, +0.000173f, +0.013222f, -0.028062f, -0.029298f, +0.001099f, -0.023684f, +0.029673f, +0.000222f, + -0.004854f, +0.002452f, -0.009830f, -0.008764f, -0.006291f, -0.001108f, -0.000538f, -0.005871f, +0.001651f, +0.016018f, + -0.000036f, -0.003929f, +0.001491f, -0.014357f, +0.006092f, -0.004130f, -0.004429f, -0.008355f, -0.019710f, +0.007935f, + +0.015975f, +0.002700f, +0.000357f, +0.000260f, +0.005747f, +0.005763f, -0.010641f, -0.009106f, +0.002670f, -0.009214f, + +0.007662f, -0.007016f, -0.010784f, +0.006357f, -0.007211f, -0.002924f, +0.002557f, +0.004780f, -0.001193f, -0.004407f, + -0.002727f, -0.005582f, -0.002039f, -0.009891f, -0.001796f, +0.002930f, +0.000318f, +0.001957f, +0.007714f, +0.008229f, + -0.000533f, -0.002073f, +0.006202f, +0.004409f, -0.006208f, +0.003114f, -0.003858f, -0.000753f, +0.005443f, -0.000746f, + +0.001213f, +0.002393f, +0.003479f, +0.004201f, -0.002356f, -0.002068f, +0.000984f, -0.003344f, -0.000610f, +0.004448f, + +0.000782f, -0.000877f, -0.000108f, -0.001980f, -0.002653f, +0.002178f + }, + { + +0.001160f, -0.074540f, +0.008472f, +0.014353f, +0.008042f, +0.003586f, -0.014260f, -0.006320f, +0.001192f, -0.003056f, + -0.002218f, +0.017282f, +0.000052f, +0.036982f, +0.012997f, +0.028732f, -0.016170f, +0.015882f, +0.001054f, +0.023427f, + +0.008227f, -0.045981f, -0.001729f, -0.001089f, -0.026353f, -0.003086f, -0.024843f, +0.005412f, +0.010134f, +0.011727f, + +0.015130f, -0.016361f, +0.015199f, -0.004684f, +0.020494f, -0.021833f, +0.000488f, +0.006891f, +0.008942f, +0.000757f, + -0.011637f, -0.014303f, -0.014355f, -0.000204f, +0.001401f, -0.004136f, +0.001464f, -0.006286f, +0.002840f, -0.000272f, + -0.011569f, +0.001132f, +0.003809f, +0.005679f, +0.004188f, +0.001833f, +0.001752f, +0.002597f, -0.000017f, +0.002980f, + +0.004820f, +0.008642f, -0.001438f, +0.007368f, -0.004526f, -0.000563f, -0.009246f, +0.004428f, +0.004127f, +0.001168f, + -0.002829f, +0.005122f, +0.001809f, -0.001475f, +0.006051f, +0.002939f, -0.001173f, -0.002687f, -0.003954f, +0.004755f, + -0.006206f, +0.004869f, +0.003773f, -0.009983f, +0.003613f, +0.004750f, +0.005000f, -0.001604f, -0.000585f, -0.001547f, + +0.004596f, +0.001129f, +0.001617f, -0.002738f, +0.001022f, +0.000855f + }, + { + -0.005385f, -0.137403f, +0.015889f, -0.002486f, +0.014457f, -0.003387f, -0.026269f, +0.000356f, -0.028098f, +0.002046f, + +0.013381f, +0.000352f, -0.023516f, +0.012333f, +0.029464f, +0.030459f, -0.004785f, -0.013455f, +0.018689f, -0.006663f, + -0.005530f, +0.000846f, +0.007600f, +0.020166f, +0.025685f, +0.000214f, +0.013116f, -0.001720f, -0.000195f, -0.004095f, + -0.016975f, -0.006934f, +0.012872f, +0.015574f, +0.004161f, -0.018208f, -0.015093f, -0.011700f, +0.006582f, +0.004216f, + -0.001656f, -0.018859f, -0.008852f, +0.001074f, -0.016805f, +0.000768f, -0.000566f, +0.003530f, +0.013717f, +0.017090f, + -0.000314f, -0.004834f, -0.004075f, +0.001344f, +0.000297f, +0.008819f, -0.011677f, +0.005363f, +0.006644f, -0.006074f, + +0.005198f, -0.007471f, -0.003295f, +0.002252f, -0.002676f, -0.006155f, +0.001898f, -0.004631f, +0.002386f, -0.001710f, + -0.000192f, +0.003963f, +0.003258f, -0.002492f, +0.003103f, -0.004436f, -0.002177f, -0.003066f, -0.001494f, -0.006018f, + -0.002629f, +0.002486f, +0.002338f, -0.000232f, -0.002171f, -0.000951f, +0.005019f, -0.001574f, -0.001510f, -0.000353f, + -0.000111f, +0.001866f, +0.000477f, +0.000665f, -0.000308f, +0.000701f + }, + { + +0.002482f, -0.020647f, -0.017754f, -0.017158f, +0.002603f, -0.010953f, -0.018608f, +0.002903f, -0.005078f, +0.009175f, + +0.007840f, -0.009862f, -0.008827f, -0.028504f, +0.055435f, -0.011655f, +0.009159f, +0.000090f, +0.034748f, +0.006828f, + -0.001374f, -0.010886f, +0.002487f, -0.006816f, +0.001046f, -0.009204f, -0.010281f, -0.004304f, +0.007749f, -0.003590f, + -0.009301f, -0.008543f, +0.017258f, -0.019394f, +0.001422f, +0.002738f, +0.000449f, -0.018001f, +0.001693f, +0.011565f, + -0.001238f, -0.009091f, -0.009774f, -0.001629f, +0.010753f, -0.006589f, -0.010621f, +0.001331f, +0.005213f, +0.002145f, + +0.000940f, -0.000574f, -0.001866f, +0.000250f, -0.007043f, +0.004967f, +0.007649f, +0.002720f, +0.006541f, -0.003602f, + +0.001620f, -0.003967f, +0.007019f, +0.000443f, -0.003439f, +0.002332f, -0.001497f, +0.009736f, -0.000101f, -0.002550f, + -0.000208f, -0.003761f, +0.006292f, +0.003473f, +0.000731f, -0.004082f, -0.001415f, +0.001125f, -0.000200f, -0.002399f, + +0.004156f, -0.000352f, -0.002140f, +0.001132f, -0.003253f, -0.004116f, -0.000079f, -0.002084f, -0.005067f, -0.001006f, + +0.000031f, +0.000658f, +0.002747f, +0.000641f, +0.001367f, +0.000498f + } + }, + { + { + -0.014571f, +0.061120f, +0.085737f, -0.014648f, -0.005062f, +0.002856f, +0.003101f, +0.016160f, +0.009665f, +0.018014f, + -0.018593f, -0.025944f, -0.004214f, +0.009638f, -0.012331f, +0.005317f, +0.001547f, +0.003646f, -0.007534f, +0.002823f, + +0.040321f, -0.008266f, -0.015840f, -0.013576f, -0.006040f, -0.002154f, -0.010699f, +0.003118f, +0.004384f, +0.013211f, + +0.015884f, +0.008460f, +0.010051f, +0.001778f, -0.006321f, +0.011922f, +0.015857f, +0.004827f, +0.003398f, +0.009110f, + -0.003037f, -0.006983f, +0.000549f, -0.005964f, -0.002748f, +0.002644f, +0.005489f, +0.007547f, -0.003628f, +0.002895f, + -0.002592f, -0.003655f, -0.000236f, -0.005656f, -0.005448f, -0.003752f, -0.003666f, -0.004591f, -0.003133f, -0.001210f, + -0.004011f, -0.000190f, -0.000640f, -0.000288f, -0.001777f, -0.003557f, +0.000831f, -0.004510f, -0.000943f, -0.003366f, + -0.000698f, -0.001000f, +0.003725f, +0.001604f, -0.001932f, -0.000700f, -0.004041f, -0.000069f, +0.001774f, -0.000339f, + -0.001699f, -0.003754f, +0.000768f, +0.000158f, +0.000445f, -0.002144f, +0.001884f, -0.002222f, +0.001153f, +0.000818f, + +0.001326f, -0.001039f, -0.000817f, +0.002276f, +0.000555f, -0.001048f + }, + { + -0.000605f, +0.055467f, -0.000155f, +0.033266f, -0.001835f, -0.008020f, -0.003409f, +0.016384f, +0.002388f, +0.003463f, + -0.014185f, -0.024166f, +0.014435f, -0.004548f, -0.000251f, -0.000678f, +0.002841f, +0.022380f, +0.005863f, +0.006151f, + +0.014995f, -0.001626f, -0.003489f, -0.014162f, -0.006211f, -0.004654f, +0.009124f, +0.002222f, -0.001764f, +0.001927f, + +0.013264f, +0.005441f, -0.016894f, +0.006306f, -0.012908f, +0.009334f, -0.011009f, +0.020839f, -0.005326f, +0.005549f, + -0.006869f, +0.004198f, +0.005106f, +0.007778f, +0.008445f, +0.002920f, +0.002679f, -0.011591f, -0.005984f, +0.004446f, + +0.002370f, +0.003003f, -0.000053f, +0.000792f, -0.003716f, -0.003892f, -0.000164f, +0.000818f, -0.002427f, -0.005703f, + +0.003314f, +0.006230f, -0.000361f, -0.005024f, -0.000111f, +0.000679f, +0.003818f, +0.001665f, +0.003895f, -0.004306f, + +0.000123f, -0.000008f, -0.001697f, -0.000006f, +0.000754f, -0.000300f, +0.002914f, +0.003495f, +0.001364f, +0.005211f, + +0.001413f, +0.001980f, +0.000111f, -0.001561f, -0.001617f, +0.000140f, +0.001922f, -0.000760f, +0.001611f, +0.000427f, + +0.006437f, +0.001080f, +0.000789f, +0.000709f, -0.001846f, -0.001505f + }, + { + -0.000671f, -0.179046f, -0.030861f, +0.057259f, -0.014365f, +0.003498f, +0.007378f, -0.004015f, -0.014157f, +0.004880f, + +0.000217f, -0.022193f, +0.003267f, +0.005551f, +0.011252f, +0.009458f, -0.007527f, -0.011795f, -0.015632f, -0.003957f, + -0.003309f, +0.000100f, -0.001767f, +0.007812f, -0.009154f, -0.010553f, -0.006451f, +0.000708f, -0.005408f, +0.002591f, + +0.003804f, -0.006044f, -0.001763f, -0.016922f, +0.004504f, -0.003064f, -0.009022f, -0.014469f, -0.009789f, -0.004564f, + +0.011285f, +0.002526f, +0.005683f, -0.008177f, -0.002926f, +0.004220f, -0.000350f, -0.004191f, +0.003471f, +0.003498f, + -0.000944f, -0.005316f, +0.007077f, -0.000285f, -0.002034f, -0.000042f, +0.007773f, +0.000992f, -0.000710f, +0.000275f, + -0.005720f, -0.000605f, -0.000533f, +0.004455f, -0.006327f, +0.000567f, -0.000804f, +0.000775f, -0.000783f, -0.000006f, + -0.005899f, -0.000573f, +0.001931f, +0.001391f, -0.005393f, -0.000785f, +0.001665f, +0.001509f, +0.003107f, -0.000901f, + +0.001126f, -0.000015f, +0.001531f, +0.002504f, -0.000241f, -0.001932f, +0.000833f, +0.002276f, +0.001593f, +0.002287f, + +0.000959f, -0.001274f, +0.001312f, +0.000324f, +0.000279f, -0.001010f + }, + { + +0.018376f, -0.044508f, -0.018015f, +0.027672f, +0.007527f, +0.003362f, +0.005376f, -0.013116f, -0.013011f, -0.009585f, + -0.002557f, -0.006996f, +0.011176f, +0.002538f, -0.014908f, -0.006044f, -0.002215f, +0.023706f, -0.025270f, +0.011278f, + -0.000762f, -0.006977f, -0.004701f, +0.009740f, +0.004252f, +0.011175f, -0.027033f, +0.019782f, -0.005326f, -0.000558f, + +0.013811f, +0.010054f, -0.004539f, -0.000849f, +0.007499f, +0.005176f, +0.006893f, +0.005532f, -0.005703f, +0.000328f, + +0.012223f, +0.011493f, -0.000876f, +0.005479f, -0.000209f, +0.002677f, -0.008169f, +0.010349f, -0.004350f, -0.001820f, + -0.000129f, +0.003963f, +0.001788f, +0.005976f, -0.001134f, -0.001661f, +0.001193f, +0.002800f, -0.002239f, -0.002583f, + -0.003701f, +0.002858f, +0.001007f, +0.005184f, -0.006750f, +0.006594f, +0.002743f, +0.004526f, +0.000428f, -0.000676f, + -0.003538f, +0.003011f, -0.000977f, +0.007352f, -0.001137f, +0.001032f, -0.000362f, +0.000268f, -0.001141f, -0.002016f, + +0.001778f, -0.000608f, +0.000582f, +0.000433f, -0.002110f, +0.001945f, +0.001621f, +0.000287f, -0.000834f, +0.000504f, + -0.000663f, -0.002088f, +0.001397f, +0.000349f, -0.001344f, -0.000865f + }, + { + +0.000040f, -0.048580f, -0.014247f, +0.019114f, -0.005997f, -0.001130f, +0.001600f, -0.001790f, +0.011267f, +0.002245f, + +0.013994f, -0.001880f, -0.002538f, -0.004313f, -0.000596f, -0.001963f, -0.003183f, -0.016789f, -0.006225f, -0.018741f, + -0.009323f, -0.004498f, -0.018423f, +0.000140f, +0.006253f, +0.009323f, -0.016346f, -0.001503f, -0.000097f, -0.001402f, + +0.006753f, +0.000793f, +0.000918f, +0.000902f, -0.005684f, -0.002855f, +0.011510f, +0.010591f, -0.004704f, -0.000910f, + +0.007176f, -0.000342f, -0.008503f, +0.000392f, -0.006343f, +0.004763f, +0.003227f, -0.004470f, -0.008507f, -0.000564f, + -0.000022f, +0.008051f, +0.000598f, +0.004106f, -0.001163f, +0.000588f, -0.000414f, -0.000807f, -0.000783f, -0.003693f, + -0.005601f, +0.002240f, -0.000002f, -0.006359f, +0.003528f, -0.005909f, -0.001161f, +0.003931f, -0.005417f, +0.001241f, + +0.004146f, +0.002206f, -0.001833f, +0.000132f, +0.000937f, +0.001506f, +0.002000f, -0.001544f, +0.000542f, -0.002541f, + -0.001423f, +0.004030f, -0.001930f, -0.001246f, +0.000232f, -0.002213f, +0.001385f, -0.001900f, -0.001030f, -0.002298f, + -0.001437f, -0.000809f, +0.001356f, +0.000292f, -0.002517f, -0.000655f + }, + { + +0.013178f, -0.077224f, +0.002166f, -0.016661f, +0.014189f, -0.004548f, -0.003634f, +0.018353f, +0.004028f, -0.005826f, + -0.001382f, -0.011028f, +0.011016f, +0.011951f, -0.018331f, +0.006869f, +0.000518f, -0.011898f, -0.012659f, +0.007719f, + -0.000740f, +0.000414f, -0.006109f, +0.001491f, +0.004124f, +0.002740f, +0.010262f, -0.003120f, -0.002629f, -0.005639f, + +0.002349f, +0.003024f, -0.000677f, +0.003118f, +0.005975f, -0.012817f, -0.001546f, -0.009555f, -0.009990f, +0.002082f, + -0.008412f, +0.005493f, -0.011315f, +0.000420f, +0.006079f, -0.000975f, +0.003877f, -0.007169f, -0.006442f, -0.002280f, + -0.002739f, -0.002927f, +0.003701f, +0.005909f, -0.000431f, +0.001524f, -0.000771f, +0.003069f, -0.001168f, -0.008299f, + +0.004067f, +0.003467f, -0.002943f, +0.002075f, +0.002585f, +0.002099f, -0.004287f, +0.000419f, +0.002629f, -0.000752f, + -0.000937f, -0.001797f, -0.001382f, +0.000410f, -0.002795f, +0.003146f, -0.001160f, +0.001903f, -0.002659f, -0.000032f, + +0.002429f, -0.001917f, -0.003819f, -0.001370f, -0.001011f, -0.001099f, +0.001420f, -0.000999f, +0.000176f, -0.002022f, + -0.001662f, +0.001825f, -0.002076f, +0.001204f, +0.000314f, +0.000277f + }, + { + +0.001357f, +0.019751f, -0.008678f, -0.006037f, -0.007275f, +0.000502f, -0.000674f, -0.000505f, -0.009021f, +0.001153f, + +0.006191f, -0.000085f, +0.008624f, +0.017723f, -0.015166f, +0.003862f, -0.000104f, -0.001586f, -0.000186f, +0.008272f, + -0.032895f, -0.009778f, -0.017653f, +0.017875f, -0.012363f, +0.010514f, +0.011159f, -0.004386f, +0.006113f, -0.006684f, + -0.003970f, +0.007467f, +0.003323f, +0.002773f, +0.012677f, +0.000765f, +0.000126f, -0.002814f, -0.000987f, -0.004755f, + -0.005616f, +0.009994f, +0.003409f, +0.004379f, -0.007252f, +0.000860f, -0.003674f, +0.001684f, +0.010068f, +0.000803f, + -0.001589f, -0.002698f, -0.002620f, -0.006736f, -0.007563f, -0.007011f, +0.002917f, +0.003350f, +0.004602f, +0.001694f, + -0.001637f, -0.000342f, -0.005332f, -0.000708f, -0.001822f, +0.004473f, +0.003305f, +0.002270f, +0.000647f, +0.001003f, + +0.000790f, +0.000481f, +0.001064f, +0.001763f, -0.000714f, +0.000110f, -0.002913f, -0.004388f, +0.006377f, -0.001372f, + +0.000734f, -0.001161f, -0.001685f, -0.000239f, -0.000503f, +0.000557f, +0.000760f, -0.000094f, -0.000687f, -0.000225f, + -0.001687f, -0.002197f, -0.000321f, +0.001173f, -0.004052f, -0.000158f + }, + { + +0.026158f, -0.092108f, +0.001800f, -0.045494f, -0.000451f, -0.002985f, +0.021052f, -0.009115f, -0.002829f, +0.002582f, + +0.006947f, +0.020007f, -0.002547f, +0.013321f, -0.004339f, +0.001384f, -0.003551f, -0.000983f, -0.002991f, -0.019638f, + +0.015008f, -0.003006f, +0.004910f, +0.003194f, +0.005237f, +0.000430f, -0.006146f, -0.004244f, -0.003649f, -0.002280f, + +0.012619f, +0.002579f, -0.009052f, -0.011703f, +0.001702f, -0.003023f, +0.004578f, +0.003005f, -0.003453f, -0.003238f, + -0.000380f, -0.000130f, +0.010141f, +0.003903f, +0.001526f, +0.003463f, +0.000461f, +0.015101f, +0.005299f, +0.002964f, + -0.000085f, +0.000153f, +0.000986f, +0.002895f, +0.003736f, -0.002618f, +0.007389f, -0.000917f, -0.002825f, +0.002192f, + -0.003260f, +0.002699f, -0.000411f, +0.001994f, -0.002617f, +0.004900f, +0.005336f, -0.001125f, +0.006867f, +0.001687f, + -0.003132f, -0.000985f, -0.002385f, +0.003386f, +0.003644f, -0.003661f, -0.005015f, +0.001573f, -0.000270f, -0.002882f, + -0.000087f, +0.000961f, -0.001794f, -0.003755f, +0.001267f, +0.001490f, +0.000793f, -0.000302f, -0.001902f, +0.001730f, + -0.000728f, -0.002672f, +0.001111f, -0.000098f, +0.000453f, +0.000695f + }, + { + +0.004843f, -0.045986f, -0.005381f, -0.021930f, +0.001662f, -0.002610f, +0.005529f, -0.005188f, +0.007168f, +0.001152f, + +0.003731f, -0.011333f, +0.017010f, +0.019760f, -0.020185f, -0.004903f, -0.003039f, -0.007672f, +0.002162f, -0.000651f, + -0.003199f, -0.001071f, +0.003699f, +0.007924f, +0.006219f, -0.008598f, +0.003164f, -0.004205f, +0.004465f, +0.001530f, + -0.009239f, -0.009595f, -0.002691f, +0.001117f, +0.005916f, +0.010163f, +0.000302f, +0.007836f, -0.008524f, +0.010066f, + +0.003476f, -0.015237f, +0.002270f, -0.000552f, -0.007486f, +0.004994f, -0.009967f, -0.006380f, +0.001883f, +0.003981f, + -0.010174f, +0.002733f, +0.002561f, -0.002671f, -0.001447f, +0.002119f, -0.004703f, +0.000432f, -0.007382f, +0.003271f, + +0.002149f, -0.000331f, -0.000548f, -0.002972f, -0.001970f, +0.001353f, -0.002950f, +0.000523f, +0.001025f, -0.002638f, + -0.003871f, +0.000840f, +0.000799f, +0.000483f, +0.002032f, +0.000073f, +0.002604f, +0.001215f, +0.000044f, +0.000010f, + -0.000796f, -0.000601f, +0.000620f, -0.001632f, -0.000996f, -0.001075f, -0.000530f, +0.000941f, +0.000717f, +0.000797f, + +0.000599f, -0.001702f, -0.000386f, +0.001084f, +0.002758f, -0.000267f + }, + { + +0.006264f, +0.119827f, -0.025970f, -0.001179f, +0.009141f, +0.025206f, -0.006142f, +0.014143f, -0.001689f, -0.000378f, + -0.021341f, -0.005505f, +0.009514f, -0.012682f, -0.011936f, +0.011577f, +0.016913f, -0.020448f, -0.021960f, -0.010235f, + -0.038053f, +0.005087f, -0.011022f, +0.009343f, -0.004404f, +0.001754f, +0.008669f, +0.001189f, +0.010455f, -0.017926f, + +0.007902f, -0.000763f, -0.001428f, +0.012102f, +0.006577f, +0.000295f, -0.008573f, -0.008741f, -0.007919f, +0.001308f, + -0.014446f, +0.003659f, +0.000255f, -0.000192f, -0.003554f, +0.001682f, +0.001949f, +0.007314f, +0.000253f, +0.001789f, + +0.009181f, -0.004265f, +0.014265f, +0.003225f, +0.005705f, -0.003546f, +0.000484f, -0.002856f, -0.006525f, -0.009502f, + -0.001174f, +0.000634f, +0.007808f, -0.002166f, -0.006821f, +0.002055f, -0.002355f, -0.001844f, -0.002042f, +0.003148f, + +0.003051f, -0.001263f, +0.000070f, -0.004663f, -0.004497f, +0.000371f, +0.002822f, +0.003837f, +0.000193f, -0.000565f, + +0.000298f, +0.003552f, -0.005018f, +0.000986f, -0.001372f, -0.001658f, +0.003780f, +0.003235f, -0.000093f, +0.001983f, + +0.001437f, +0.001147f, -0.002576f, -0.001869f, +0.000377f, -0.000643f + }, + { + -0.003285f, -0.078139f, -0.008163f, +0.014308f, -0.000059f, +0.014515f, -0.003166f, -0.008725f, +0.014542f, -0.008189f, + +0.006052f, +0.005456f, +0.008642f, +0.002345f, -0.002231f, +0.010894f, +0.007201f, -0.005367f, -0.002125f, +0.010969f, + -0.012615f, -0.007280f, -0.031110f, -0.000125f, -0.003669f, -0.000356f, -0.000810f, +0.003881f, -0.012027f, -0.008333f, + +0.004912f, +0.007883f, +0.003361f, +0.000558f, -0.008605f, -0.009862f, -0.012226f, -0.019266f, -0.001849f, -0.000162f, + +0.002375f, -0.006574f, -0.002021f, -0.003165f, +0.004367f, -0.003556f, +0.005450f, -0.011998f, -0.004997f, +0.005572f, + +0.005797f, -0.000212f, -0.003337f, +0.005704f, +0.008159f, +0.006567f, +0.001169f, -0.010433f, +0.006965f, +0.003676f, + +0.005474f, -0.000348f, -0.007800f, -0.003801f, +0.005471f, -0.007700f, -0.002729f, -0.002231f, +0.000111f, +0.003165f, + +0.000511f, +0.003181f, -0.001589f, -0.002381f, -0.001946f, -0.001711f, +0.001375f, +0.006740f, -0.003347f, -0.002123f, + -0.001926f, -0.000996f, +0.002159f, +0.001704f, +0.003820f, +0.001910f, +0.000820f, +0.001822f, +0.002946f, +0.001158f, + +0.002270f, -0.000805f, +0.001542f, -0.000892f, -0.002604f, +0.001188f + }, + { + -0.015527f, -0.114286f, -0.003011f, +0.041750f, -0.019502f, -0.038449f, +0.002371f, -0.014130f, -0.007537f, -0.010514f, + -0.044035f, -0.010919f, +0.009501f, +0.007022f, -0.014677f, -0.027738f, -0.020832f, -0.007854f, +0.000291f, +0.019537f, + -0.006673f, +0.012974f, -0.026100f, -0.003996f, -0.009620f, -0.002156f, -0.004719f, +0.005943f, +0.001667f, +0.005381f, + +0.001758f, -0.001441f, +0.003676f, -0.017452f, -0.003455f, +0.015573f, -0.002752f, -0.013463f, -0.020345f, +0.009553f, + +0.011123f, -0.000680f, +0.012846f, -0.007285f, +0.008113f, -0.002434f, +0.000151f, -0.002772f, -0.001961f, -0.011123f, + -0.001000f, +0.003035f, -0.011093f, -0.005573f, -0.000262f, +0.003187f, +0.000304f, +0.000608f, +0.004357f, -0.004588f, + -0.008408f, -0.001511f, -0.006217f, -0.000494f, +0.003491f, -0.002747f, +0.002295f, +0.002498f, +0.006166f, +0.001608f, + +0.003742f, +0.000504f, +0.003246f, +0.002384f, -0.002707f, +0.001849f, -0.000677f, -0.000204f, +0.002470f, -0.000670f, + +0.001518f, +0.000880f, +0.003294f, +0.003356f, -0.004028f, +0.002692f, -0.003632f, +0.000187f, +0.000696f, +0.002137f, + +0.000951f, -0.001865f, +0.000848f, -0.002316f, -0.002012f, +0.001924f + }, + { + -0.000955f, -0.041505f, -0.008789f, +0.010814f, -0.002572f, -0.000398f, +0.001269f, -0.003716f, -0.002451f, -0.013357f, + +0.011517f, +0.005661f, +0.016162f, +0.010783f, +0.021199f, +0.021898f, +0.001967f, -0.000940f, +0.001428f, +0.015799f, + -0.000111f, -0.004527f, -0.039965f, +0.006508f, -0.005465f, -0.030326f, +0.009175f, -0.017860f, +0.019154f, +0.006418f, + +0.011650f, +0.009455f, -0.009493f, +0.001946f, +0.013039f, -0.014689f, -0.004746f, +0.017123f, -0.002226f, +0.006649f, + -0.000108f, -0.021241f, -0.013063f, -0.003322f, +0.000315f, -0.008829f, -0.004837f, +0.000409f, +0.007020f, -0.007246f, + -0.002541f, +0.000958f, +0.005178f, +0.007285f, -0.002723f, -0.004154f, +0.007286f, -0.003988f, +0.005011f, +0.000834f, + +0.010527f, -0.000898f, +0.001721f, +0.004132f, +0.002986f, -0.006662f, -0.003636f, +0.001491f, +0.005780f, -0.005251f, + -0.000005f, +0.003839f, +0.002762f, +0.002507f, +0.003902f, +0.002348f, +0.000423f, -0.003417f, -0.003122f, +0.000515f, + -0.000247f, +0.003284f, -0.003583f, -0.002797f, +0.001221f, +0.003976f, -0.000544f, +0.001652f, +0.002184f, +0.000701f, + +0.004329f, +0.000413f, -0.000579f, -0.000121f, -0.003067f, +0.000806f + }, + { + -0.002940f, -0.097772f, -0.013006f, -0.010034f, +0.025537f, -0.031270f, -0.005875f, +0.002199f, -0.020607f, -0.015489f, + +0.024215f, -0.021981f, -0.000964f, -0.006185f, +0.054225f, +0.019303f, -0.015404f, +0.018475f, -0.001041f, -0.004204f, + -0.008442f, +0.007754f, +0.014364f, +0.017516f, +0.003578f, +0.006859f, +0.025616f, +0.001564f, -0.003556f, +0.006682f, + -0.006413f, -0.022521f, +0.008767f, +0.020890f, -0.001018f, -0.016103f, -0.015812f, -0.006842f, +0.004554f, -0.003447f, + +0.000347f, -0.011414f, -0.014901f, -0.005580f, -0.002308f, -0.011203f, +0.004638f, -0.000228f, +0.014522f, +0.012295f, + +0.005998f, -0.000762f, +0.001349f, -0.008129f, +0.004392f, +0.007518f, -0.008314f, +0.003386f, +0.003580f, +0.004109f, + -0.003604f, -0.004425f, -0.003256f, +0.003378f, -0.007893f, +0.000241f, -0.005297f, -0.001756f, -0.003592f, +0.002415f, + +0.002895f, +0.001788f, +0.004488f, -0.001930f, +0.002463f, -0.005885f, -0.002745f, -0.000987f, +0.000128f, -0.006153f, + -0.001939f, -0.000210f, +0.002024f, +0.000694f, -0.001751f, -0.000035f, -0.000871f, +0.001259f, -0.000506f, +0.000381f, + +0.000140f, +0.001100f, +0.001870f, -0.000465f, -0.002627f, +0.002355f + }, + { + -0.005490f, -0.038288f, -0.000235f, -0.006691f, -0.017232f, -0.006607f, -0.004539f, -0.003583f, +0.001209f, +0.002059f, + +0.008155f, -0.019866f, +0.002820f, +0.019096f, -0.044431f, +0.001751f, +0.002307f, -0.005162f, +0.032439f, +0.012992f, + -0.008467f, -0.001793f, -0.011042f, +0.001427f, -0.007355f, -0.006227f, +0.001472f, -0.017582f, +0.000553f, +0.015686f, + -0.015078f, -0.000331f, +0.001305f, -0.007203f, -0.004759f, -0.006653f, +0.005687f, -0.005124f, -0.003591f, +0.009906f, + -0.005964f, -0.000195f, -0.008583f, +0.004706f, +0.002750f, -0.006575f, -0.005475f, -0.005717f, +0.007127f, +0.001771f, + -0.002782f, -0.000130f, +0.005917f, -0.008392f, +0.002706f, +0.003088f, +0.001945f, +0.006758f, +0.001687f, -0.000023f, + -0.003016f, +0.000281f, +0.004988f, -0.002874f, +0.003887f, -0.004559f, +0.002599f, +0.001127f, +0.003583f, -0.000987f, + +0.001904f, -0.004766f, +0.001565f, +0.009149f, +0.000081f, -0.002257f, +0.002994f, -0.001199f, -0.001091f, -0.002147f, + +0.007295f, +0.000370f, -0.002970f, -0.004209f, -0.000277f, -0.001340f, -0.003451f, +0.001569f, -0.002101f, -0.003729f, + -0.002207f, +0.001293f, +0.001228f, +0.000848f, +0.003805f, +0.001312f + } + }, + { + { + +0.022172f, -0.051363f, -0.075589f, +0.019555f, +0.031447f, +0.006688f, +0.013155f, +0.011471f, +0.006225f, +0.023805f, + -0.008586f, -0.023915f, -0.007057f, -0.004257f, -0.014725f, +0.010792f, -0.005435f, -0.002898f, -0.000855f, -0.002691f, + +0.014105f, -0.009075f, -0.003893f, -0.003416f, -0.003449f, +0.000577f, +0.001502f, +0.005085f, -0.004131f, +0.001911f, + +0.008046f, +0.005896f, -0.005111f, -0.006435f, -0.006897f, +0.006773f, +0.012063f, +0.006753f, +0.006073f, +0.006871f, + -0.000703f, -0.007735f, -0.002871f, -0.010888f, -0.004168f, +0.006335f, +0.006883f, +0.004109f, -0.004914f, +0.009119f, + -0.001455f, -0.007957f, +0.003335f, -0.002569f, +0.000359f, +0.004606f, +0.001374f, +0.000953f, +0.002363f, -0.001554f, + -0.002932f, +0.006581f, +0.005502f, -0.001017f, -0.002354f, -0.000458f, +0.004264f, -0.001924f, -0.000720f, -0.001563f, + +0.003026f, -0.000458f, +0.000977f, +0.000551f, +0.000427f, -0.000369f, -0.002585f, +0.002167f, +0.001388f, -0.002007f, + -0.000906f, -0.004610f, +0.002382f, +0.001360f, -0.000124f, -0.001176f, +0.002429f, -0.004602f, -0.000863f, -0.002601f, + -0.001813f, -0.001867f, -0.001847f, +0.000383f, -0.000049f, -0.001145f + }, + { + -0.000893f, +0.086663f, +0.008459f, -0.000180f, +0.009974f, +0.001374f, -0.007765f, +0.006976f, +0.003763f, +0.002530f, + -0.019067f, -0.028426f, +0.008824f, +0.007146f, +0.014857f, +0.004113f, -0.016210f, -0.003078f, -0.009755f, +0.004440f, + +0.008344f, +0.012519f, +0.017696f, +0.003171f, +0.000036f, -0.018984f, -0.009126f, -0.007390f, +0.004290f, +0.009140f, + +0.013422f, -0.000629f, -0.018260f, +0.002645f, -0.011655f, +0.008492f, -0.014393f, +0.027621f, -0.003465f, +0.010330f, + +0.000228f, -0.005411f, -0.005028f, +0.004735f, +0.001863f, -0.003226f, +0.006238f, -0.001646f, +0.000160f, +0.005219f, + -0.004928f, -0.004280f, -0.000983f, +0.000195f, -0.003974f, -0.003814f, +0.000446f, -0.000370f, -0.000773f, +0.000734f, + +0.003326f, +0.002812f, -0.001553f, -0.006160f, +0.003751f, +0.001811f, +0.000647f, -0.001949f, -0.001843f, -0.003712f, + +0.002092f, -0.000290f, -0.001234f, +0.000059f, +0.000806f, -0.000250f, +0.001932f, +0.000295f, -0.002949f, +0.003595f, + -0.000950f, -0.000792f, +0.000564f, +0.001389f, -0.002127f, -0.001705f, +0.001287f, -0.001633f, -0.000373f, -0.001362f, + +0.002258f, -0.001573f, -0.000722f, +0.002020f, +0.000717f, -0.001149f + }, + { + -0.003140f, -0.107261f, +0.047886f, +0.093387f, +0.006862f, +0.002617f, +0.001931f, -0.004214f, -0.000123f, +0.002766f, + -0.015243f, -0.019581f, +0.004733f, +0.004819f, +0.008582f, +0.006379f, +0.001119f, -0.007449f, -0.015229f, -0.004231f, + -0.007838f, -0.004274f, +0.000986f, +0.013099f, -0.006280f, +0.000799f, +0.015618f, +0.007028f, -0.006226f, +0.004918f, + +0.001194f, -0.010480f, +0.003655f, -0.015741f, -0.001855f, -0.008851f, -0.018461f, -0.003706f, +0.003170f, -0.005957f, + +0.000154f, -0.001075f, +0.006389f, -0.006157f, +0.008054f, +0.002818f, -0.002461f, +0.000062f, +0.009890f, +0.007353f, + -0.005524f, -0.010701f, +0.005946f, -0.007241f, -0.002500f, -0.003356f, +0.005468f, +0.001792f, -0.002191f, -0.003098f, + -0.005619f, +0.001568f, -0.002826f, +0.004245f, -0.004119f, +0.001573f, +0.000167f, +0.003443f, -0.000463f, +0.002953f, + -0.002811f, +0.002183f, +0.001637f, +0.000438f, -0.001867f, +0.000156f, -0.001377f, -0.000074f, +0.001749f, -0.001788f, + +0.000679f, +0.000402f, +0.000589f, +0.003156f, +0.003990f, +0.000997f, -0.000447f, +0.000885f, -0.000414f, +0.000067f, + +0.002036f, +0.000628f, +0.001777f, +0.000740f, -0.000180f, -0.003534f + }, + { + -0.006121f, -0.074290f, -0.005329f, +0.019708f, -0.011917f, -0.002420f, +0.005253f, -0.007126f, -0.000680f, +0.001442f, + -0.003852f, +0.003122f, +0.005230f, -0.014591f, -0.022274f, +0.009800f, +0.000176f, +0.014902f, -0.040223f, -0.002323f, + -0.006306f, +0.001545f, +0.010516f, +0.011656f, -0.003880f, -0.003006f, -0.019750f, +0.019262f, -0.006558f, -0.001178f, + -0.000577f, -0.001454f, -0.007897f, +0.004358f, +0.005319f, -0.002277f, +0.001251f, -0.001614f, -0.012718f, -0.002006f, + -0.002064f, +0.003923f, -0.008039f, -0.004378f, +0.005614f, +0.009014f, -0.006156f, +0.010675f, -0.004518f, -0.001095f, + +0.000724f, -0.000280f, -0.003138f, +0.003750f, -0.003361f, -0.004188f, +0.001028f, +0.002331f, -0.000057f, +0.004755f, + -0.001874f, +0.005722f, -0.004202f, +0.002302f, -0.006586f, +0.002074f, -0.002227f, -0.001467f, -0.000524f, +0.003007f, + -0.002946f, +0.001822f, -0.003449f, +0.004981f, +0.001126f, +0.003080f, +0.000343f, +0.001043f, -0.000480f, -0.000591f, + +0.003406f, -0.000214f, -0.000129f, -0.000932f, -0.001866f, +0.002557f, +0.004639f, +0.001898f, +0.000717f, -0.000233f, + -0.001128f, -0.001262f, -0.000645f, -0.000036f, -0.001167f, -0.002668f + }, + { + -0.002474f, -0.005290f, +0.011889f, +0.006749f, -0.000660f, +0.001881f, +0.001322f, -0.011603f, +0.000571f, +0.003814f, + +0.008636f, -0.007969f, +0.002542f, +0.008863f, -0.004306f, -0.010726f, +0.008799f, -0.008022f, -0.004117f, -0.017722f, + -0.001800f, +0.004233f, +0.003226f, +0.006984f, +0.005257f, +0.029636f, -0.008495f, -0.008554f, -0.009130f, -0.010697f, + +0.001958f, +0.008154f, -0.002407f, -0.000471f, -0.004798f, -0.000218f, +0.006911f, +0.005303f, -0.000885f, +0.002259f, + +0.000148f, +0.007609f, +0.001651f, +0.001405f, -0.002361f, +0.008723f, +0.008529f, +0.002613f, -0.004746f, +0.000875f, + +0.001262f, +0.008195f, -0.003610f, +0.002416f, +0.004463f, +0.004859f, +0.002541f, +0.003301f, +0.003793f, -0.000740f, + -0.001218f, -0.000134f, +0.001153f, -0.003603f, +0.002680f, -0.005992f, -0.001069f, +0.001898f, -0.003682f, -0.000406f, + +0.000826f, +0.003690f, +0.001063f, +0.001851f, -0.001762f, -0.002127f, +0.001157f, +0.001903f, +0.004725f, +0.000240f, + -0.002666f, +0.002210f, -0.001308f, -0.001877f, -0.000435f, -0.000868f, +0.003177f, -0.001455f, +0.001401f, +0.000098f, + +0.000262f, -0.000065f, +0.001368f, -0.000441f, -0.001229f, +0.001038f + }, + { + +0.003054f, -0.101774f, +0.017906f, -0.023206f, -0.014280f, -0.000270f, -0.002600f, +0.010675f, -0.014238f, -0.001816f, + +0.009196f, +0.011668f, +0.001572f, +0.003149f, -0.021671f, +0.005924f, +0.012761f, -0.011855f, -0.016356f, -0.001193f, + -0.011312f, +0.006876f, -0.002406f, +0.002336f, -0.011752f, -0.015246f, +0.009466f, +0.001741f, -0.005477f, -0.008163f, + +0.003704f, +0.001569f, +0.000855f, +0.005474f, +0.004755f, -0.013229f, +0.007797f, +0.002282f, -0.006530f, +0.005750f, + -0.001190f, +0.009513f, -0.004709f, +0.001756f, +0.004812f, +0.005572f, +0.009437f, +0.003448f, -0.000262f, -0.000073f, + -0.001459f, -0.007171f, -0.003227f, -0.002042f, -0.000768f, +0.004593f, -0.000689f, +0.003686f, +0.002224f, -0.003021f, + +0.004101f, +0.000940f, +0.001606f, +0.003415f, -0.002842f, +0.002279f, -0.004310f, +0.002893f, +0.003646f, -0.001417f, + +0.000269f, -0.003226f, -0.004458f, +0.001053f, -0.002896f, +0.000316f, -0.002990f, +0.001810f, -0.001928f, -0.002491f, + -0.001886f, -0.001583f, -0.003105f, -0.000480f, -0.000943f, -0.001642f, +0.000008f, -0.001546f, +0.001497f, +0.000313f, + -0.000560f, +0.001978f, -0.000708f, +0.000884f, +0.000592f, +0.001487f + }, + { + -0.000264f, +0.018519f, +0.009061f, -0.008264f, -0.000563f, +0.001580f, -0.004611f, -0.001386f, -0.002488f, +0.001096f, + +0.000766f, -0.005056f, +0.013448f, +0.000932f, -0.041654f, -0.004380f, -0.016176f, -0.007773f, -0.010237f, +0.010526f, + -0.013916f, +0.001236f, -0.013075f, +0.015890f, -0.008765f, +0.017684f, +0.011972f, -0.010229f, -0.006541f, -0.018760f, + -0.005547f, +0.013891f, +0.004291f, +0.002015f, +0.011658f, +0.004487f, -0.004099f, -0.003721f, +0.007023f, +0.002855f, + -0.008443f, -0.003095f, -0.000779f, -0.000115f, -0.007724f, +0.006671f, -0.006629f, -0.004986f, +0.003419f, -0.002439f, + +0.004204f, +0.000016f, -0.004000f, -0.000787f, -0.006119f, -0.006905f, +0.001496f, -0.000482f, +0.000971f, -0.002307f, + -0.004019f, -0.000236f, -0.001236f, +0.003452f, -0.001881f, +0.003737f, +0.000078f, +0.002661f, +0.003383f, -0.001042f, + +0.000494f, +0.004550f, +0.001094f, +0.003219f, -0.002498f, -0.001163f, -0.002266f, -0.005402f, +0.002527f, -0.001301f, + +0.002393f, -0.000252f, -0.003394f, +0.001501f, -0.000200f, -0.002611f, +0.000524f, -0.000933f, +0.001158f, +0.000131f, + +0.000589f, +0.000474f, +0.001046f, +0.002322f, -0.003286f, +0.000385f + }, + { + -0.013676f, -0.130635f, +0.021661f, -0.051033f, -0.015770f, -0.005017f, +0.009869f, +0.001576f, +0.006882f, +0.007140f, + -0.022682f, -0.003448f, -0.014040f, -0.002467f, -0.024592f, -0.018265f, +0.004293f, +0.007498f, +0.009214f, +0.002040f, + +0.027544f, +0.001426f, -0.002508f, -0.004619f, +0.009186f, -0.000613f, -0.002055f, +0.012591f, -0.000948f, -0.011971f, + +0.002483f, +0.001059f, +0.008680f, +0.015725f, +0.016886f, -0.002590f, -0.003941f, +0.000656f, +0.002910f, +0.003939f, + +0.006553f, +0.001357f, +0.011629f, +0.000676f, -0.002199f, +0.003433f, -0.007187f, +0.005518f, -0.004393f, -0.001611f, + +0.000528f, +0.002063f, +0.002263f, -0.003415f, +0.001460f, -0.000877f, +0.009175f, +0.000694f, +0.000125f, +0.006162f, + +0.001654f, +0.004106f, -0.004442f, +0.001679f, -0.003942f, -0.001682f, +0.004485f, +0.001494f, +0.002451f, -0.000618f, + +0.000461f, +0.005268f, -0.000769f, -0.000771f, +0.004326f, -0.000233f, -0.003669f, -0.000740f, +0.001458f, -0.000005f, + +0.001902f, +0.000384f, -0.000691f, -0.001871f, +0.000731f, -0.001859f, -0.002141f, +0.000602f, -0.002241f, +0.001535f, + -0.000783f, -0.002209f, +0.000586f, -0.000581f, -0.000950f, -0.000066f + }, + { + +0.001013f, -0.047931f, +0.040315f, -0.010441f, +0.003080f, -0.005611f, +0.007482f, -0.000713f, +0.002151f, -0.006117f, + +0.005465f, -0.006003f, +0.020881f, +0.015731f, -0.013505f, +0.040361f, +0.040620f, -0.011371f, -0.013959f, +0.006197f, + +0.004337f, -0.000687f, +0.002648f, -0.000743f, -0.010637f, -0.010396f, +0.005600f, +0.002581f, +0.008775f, +0.006336f, + +0.001523f, -0.019677f, -0.009673f, +0.011622f, +0.012044f, -0.000004f, -0.001820f, +0.012393f, -0.004167f, +0.007112f, + -0.009047f, -0.020734f, +0.002014f, +0.002022f, -0.000855f, +0.004451f, -0.007649f, +0.001410f, +0.001609f, +0.007569f, + -0.003787f, +0.006085f, +0.001780f, -0.002446f, -0.003771f, +0.003206f, -0.007329f, -0.002929f, -0.005779f, +0.005320f, + +0.002933f, -0.000137f, +0.002780f, +0.003114f, +0.000633f, +0.002071f, -0.002839f, +0.003524f, +0.006014f, +0.001821f, + -0.004374f, +0.000531f, +0.000648f, -0.000951f, -0.000044f, -0.002104f, +0.001456f, +0.000793f, -0.001571f, +0.002248f, + +0.002034f, +0.001085f, +0.002318f, -0.003242f, -0.001470f, +0.001485f, +0.003236f, +0.003272f, +0.001060f, -0.001790f, + +0.000421f, -0.000342f, +0.000837f, -0.000682f, +0.000340f, -0.000447f + }, + { + -0.006236f, +0.121930f, +0.001656f, -0.006697f, +0.023958f, +0.052469f, +0.005614f, +0.000593f, -0.003591f, +0.009037f, + +0.007606f, -0.008569f, -0.019825f, -0.022089f, -0.008058f, +0.002702f, -0.001117f, -0.015101f, +0.005605f, +0.019174f, + -0.022875f, -0.000778f, -0.011804f, +0.002064f, -0.010620f, -0.010700f, -0.000514f, -0.001226f, +0.012406f, -0.018048f, + -0.003215f, +0.001559f, -0.002409f, +0.008989f, +0.004415f, +0.008776f, +0.003490f, +0.002460f, +0.008783f, +0.008908f, + -0.011592f, +0.010713f, -0.001151f, -0.004797f, +0.001156f, +0.009188f, +0.000564f, -0.009541f, -0.013607f, -0.004657f, + +0.011589f, -0.011420f, -0.001719f, -0.002144f, -0.001686f, -0.007658f, +0.003594f, -0.003930f, -0.006848f, -0.005983f, + -0.001807f, -0.003800f, +0.009831f, +0.008857f, -0.001401f, +0.004839f, +0.000494f, +0.000005f, +0.001713f, +0.003047f, + +0.001175f, -0.000132f, -0.002696f, -0.005843f, -0.003186f, +0.003103f, +0.001436f, -0.001267f, +0.000022f, +0.001801f, + +0.001792f, +0.004232f, -0.003375f, +0.001357f, -0.002304f, -0.001202f, +0.004875f, +0.001686f, -0.003576f, -0.000277f, + -0.000211f, -0.002137f, -0.003603f, -0.000601f, -0.002183f, -0.000492f + }, + { + +0.000140f, -0.061661f, -0.006624f, +0.009810f, +0.000572f, +0.005223f, -0.012029f, -0.019444f, +0.005945f, -0.001278f, + +0.006198f, -0.006947f, +0.001435f, -0.015444f, -0.006021f, +0.010741f, +0.010793f, +0.013254f, +0.006557f, +0.020052f, + +0.001276f, -0.018009f, -0.024566f, +0.011422f, +0.002813f, +0.007158f, -0.009423f, -0.001429f, -0.012191f, +0.002502f, + +0.002074f, -0.002809f, +0.009093f, +0.001983f, -0.015347f, -0.004890f, -0.009526f, -0.019682f, -0.000768f, +0.001374f, + +0.011774f, +0.002479f, +0.000634f, +0.000330f, +0.001347f, -0.015954f, +0.000430f, -0.009323f, -0.008126f, +0.007393f, + +0.011848f, +0.001437f, -0.001572f, +0.006046f, +0.004468f, +0.005575f, +0.004071f, -0.002716f, +0.005286f, -0.001030f, + +0.007128f, +0.001676f, -0.003909f, -0.006573f, +0.001362f, -0.004533f, -0.000491f, +0.002527f, +0.000212f, -0.000075f, + +0.000739f, +0.000486f, -0.002348f, +0.000861f, -0.001344f, +0.000179f, +0.002564f, +0.003125f, -0.001980f, +0.001811f, + -0.004408f, +0.001993f, +0.003156f, -0.003506f, -0.000023f, +0.003235f, +0.000548f, +0.001361f, +0.003220f, +0.000807f, + +0.001695f, -0.002212f, +0.000236f, +0.000725f, -0.001554f, -0.000646f + }, + { + +0.025336f, -0.043254f, -0.029287f, +0.011233f, -0.003420f, -0.022399f, +0.031412f, +0.003806f, +0.003866f, +0.012796f, + -0.008074f, -0.007192f, +0.001732f, +0.017385f, +0.021021f, -0.001101f, -0.018071f, -0.014765f, -0.003714f, +0.021490f, + -0.011701f, +0.010316f, -0.027023f, -0.008044f, -0.010288f, +0.007782f, +0.011004f, +0.011807f, -0.004018f, +0.000211f, + +0.004714f, -0.011456f, -0.003372f, -0.007706f, +0.000463f, +0.014237f, +0.000987f, -0.003228f, -0.013578f, +0.006860f, + -0.002444f, -0.012710f, +0.016904f, -0.002404f, +0.002942f, -0.000226f, +0.011703f, +0.000090f, +0.008071f, -0.009785f, + -0.003154f, +0.008527f, -0.001177f, -0.005316f, -0.003080f, +0.000642f, -0.000019f, -0.003031f, +0.008230f, +0.003316f, + -0.002123f, +0.002929f, -0.001528f, +0.006100f, +0.006850f, -0.001187f, -0.003133f, -0.003667f, -0.000581f, -0.002530f, + +0.005770f, -0.000344f, -0.000409f, +0.000300f, -0.001150f, +0.001023f, -0.002972f, +0.001862f, +0.003979f, -0.001185f, + -0.000642f, -0.002451f, -0.000626f, +0.000575f, -0.002479f, +0.003526f, -0.002689f, +0.001950f, +0.000105f, -0.000441f, + +0.000613f, -0.001615f, +0.001030f, -0.001087f, -0.001594f, +0.001402f + }, + { + -0.001821f, -0.013745f, +0.001349f, +0.013710f, -0.009635f, -0.007575f, +0.006773f, +0.001774f, +0.001161f, -0.012475f, + +0.015682f, -0.000979f, -0.026819f, -0.043899f, -0.000457f, +0.002198f, -0.000207f, -0.009320f, -0.008868f, +0.007426f, + +0.000124f, +0.008340f, -0.021941f, +0.012475f, -0.003788f, -0.035661f, +0.020152f, -0.018307f, +0.013739f, +0.003500f, + -0.007556f, +0.005255f, -0.003029f, -0.001832f, +0.004992f, -0.010845f, -0.004793f, +0.010975f, -0.012761f, +0.003126f, + +0.006492f, -0.001322f, -0.000908f, -0.006583f, -0.006767f, -0.010944f, -0.002354f, -0.004049f, +0.007614f, +0.007252f, + +0.009557f, +0.000876f, -0.001154f, +0.000480f, -0.001618f, -0.007941f, -0.005278f, -0.009910f, +0.007343f, +0.002137f, + +0.008183f, -0.006326f, -0.003871f, -0.000770f, +0.002327f, -0.008927f, -0.001057f, -0.003173f, -0.005697f, -0.009564f, + +0.003166f, +0.002155f, -0.001385f, +0.001700f, +0.002306f, +0.002754f, +0.001488f, -0.002660f, -0.003674f, -0.000982f, + +0.000242f, +0.001027f, -0.001378f, -0.000288f, -0.003765f, +0.002258f, +0.000051f, +0.001546f, +0.003305f, +0.002102f, + +0.002866f, -0.000921f, -0.000477f, +0.000415f, -0.003090f, +0.001741f + }, + { + +0.012755f, -0.072756f, -0.004220f, -0.002208f, +0.013276f, -0.016350f, +0.016672f, +0.011256f, +0.001875f, -0.005023f, + +0.027675f, -0.014956f, -0.013005f, -0.032832f, +0.026579f, +0.002713f, -0.041189f, +0.004533f, +0.007385f, +0.007096f, + -0.003640f, +0.015066f, +0.009660f, +0.010571f, -0.009978f, -0.002477f, +0.027291f, +0.006234f, +0.006194f, +0.016111f, + +0.010349f, -0.012716f, +0.003556f, +0.007699f, +0.004645f, +0.003078f, +0.004384f, -0.004848f, +0.002297f, -0.009707f, + -0.005917f, +0.002718f, +0.001952f, +0.000631f, +0.000302f, -0.006602f, +0.007357f, -0.002157f, +0.001593f, +0.002247f, + +0.000687f, -0.001470f, +0.004536f, -0.002347f, +0.005212f, +0.002249f, -0.010091f, +0.001320f, -0.002425f, +0.004321f, + -0.004766f, -0.003049f, -0.003537f, -0.003342f, -0.006584f, +0.005277f, -0.005552f, -0.002454f, -0.003034f, +0.003314f, + +0.000983f, -0.000199f, +0.006091f, -0.000349f, +0.001353f, -0.000686f, +0.003238f, -0.000975f, +0.001299f, -0.002216f, + -0.000043f, -0.000478f, -0.002139f, -0.002692f, -0.002303f, +0.000645f, -0.002652f, +0.000071f, -0.000044f, +0.002999f, + +0.002426f, +0.002277f, +0.002292f, -0.000393f, -0.000440f, +0.002357f + }, + { + +0.004528f, -0.030142f, -0.004459f, +0.004574f, -0.010310f, +0.009586f, +0.014492f, -0.010486f, +0.003801f, -0.010808f, + +0.009750f, +0.000665f, +0.007362f, -0.020028f, -0.124694f, -0.012363f, -0.001706f, -0.010672f, +0.009606f, -0.003830f, + -0.009781f, +0.010508f, -0.012464f, +0.004413f, -0.008440f, -0.014346f, +0.008364f, -0.006042f, +0.012623f, +0.030053f, + +0.002262f, +0.001692f, -0.006103f, -0.004879f, -0.011894f, -0.018940f, +0.007789f, +0.001906f, -0.007584f, -0.002404f, + -0.007607f, +0.007775f, -0.005680f, +0.003541f, -0.004817f, -0.005111f, +0.002169f, -0.002865f, +0.002310f, -0.002853f, + -0.002482f, -0.000190f, +0.010966f, -0.000939f, +0.006041f, +0.001933f, -0.003246f, +0.000854f, +0.001033f, -0.000715f, + +0.000388f, +0.005493f, +0.004191f, -0.007236f, +0.001375f, -0.009150f, -0.003380f, -0.002575f, +0.004470f, -0.000681f, + +0.003708f, -0.001728f, -0.002773f, +0.007971f, +0.004449f, +0.004184f, +0.006186f, -0.001300f, +0.000459f, +0.001300f, + +0.009425f, +0.003242f, -0.003924f, -0.005732f, -0.000508f, -0.000731f, -0.002940f, +0.002126f, +0.000789f, +0.000022f, + +0.000825f, -0.000023f, -0.001158f, +0.000320f, +0.000922f, -0.000706f + } + }, + { + { + -0.026406f, -0.058357f, +0.011700f, +0.062147f, -0.034983f, +0.020862f, +0.016928f, +0.002629f, +0.013025f, +0.005029f, + +0.006749f, -0.033456f, +0.008818f, -0.001782f, -0.010425f, +0.004834f, -0.017175f, +0.011425f, -0.001778f, +0.006871f, + -0.005406f, +0.006898f, -0.002017f, +0.001819f, -0.010716f, -0.004028f, +0.011247f, +0.005096f, +0.000122f, -0.007567f, + +0.010988f, +0.001423f, +0.001514f, -0.014818f, +0.007108f, -0.006580f, +0.011086f, +0.009465f, +0.009942f, -0.001547f, + -0.002443f, -0.007131f, -0.000470f, -0.005378f, -0.001031f, +0.006535f, -0.000398f, +0.004354f, +0.000688f, +0.006164f, + -0.000501f, -0.010578f, +0.014125f, -0.007969f, -0.001517f, +0.000675f, +0.009281f, +0.000974f, +0.000539f, -0.001029f, + -0.006739f, +0.007700f, +0.003554f, +0.001413f, -0.004292f, -0.002160f, +0.007124f, -0.001794f, +0.000412f, -0.001488f, + +0.004324f, +0.002176f, -0.003414f, +0.000412f, +0.002297f, -0.004190f, +0.001431f, +0.000902f, +0.002723f, -0.004194f, + +0.001439f, -0.002934f, +0.000410f, +0.001680f, -0.002293f, +0.002722f, +0.000154f, -0.003929f, -0.002542f, -0.001332f, + -0.003556f, +0.000185f, -0.000886f, +0.000177f, -0.000679f, -0.001684f + }, + { + -0.000142f, +0.075610f, +0.013475f, -0.063244f, +0.047953f, +0.000728f, -0.003018f, -0.000656f, +0.006034f, -0.003069f, + -0.006208f, -0.029320f, -0.000478f, +0.017080f, +0.009264f, +0.007735f, -0.021856f, -0.019209f, -0.010101f, +0.015525f, + +0.012737f, +0.004477f, +0.024790f, +0.012303f, +0.002149f, -0.015156f, -0.013626f, -0.009917f, +0.002882f, +0.008966f, + -0.005485f, +0.005900f, -0.010775f, -0.000198f, -0.003213f, -0.005592f, +0.008650f, +0.010828f, +0.003870f, -0.002412f, + +0.008409f, -0.000958f, -0.007016f, -0.003221f, -0.000184f, +0.003620f, +0.000885f, +0.003539f, -0.000246f, +0.004940f, + -0.006326f, -0.005523f, +0.006865f, -0.007327f, -0.007536f, -0.000033f, -0.000133f, +0.001946f, -0.003966f, +0.003618f, + +0.004170f, -0.000223f, +0.003324f, -0.010223f, +0.002807f, +0.002178f, +0.000010f, -0.000368f, -0.005250f, -0.000178f, + -0.000227f, -0.001643f, -0.000111f, +0.003528f, -0.001585f, +0.001181f, -0.002136f, -0.000156f, -0.001111f, +0.000662f, + -0.003019f, +0.001563f, +0.000650f, +0.000795f, -0.000562f, -0.001272f, -0.000408f, +0.000583f, -0.002180f, -0.001368f, + +0.000201f, -0.000492f, +0.000344f, +0.000273f, +0.001916f, -0.001538f + }, + { + +0.008783f, -0.052881f, +0.000718f, +0.084234f, +0.006275f, +0.005944f, -0.000847f, -0.008332f, +0.005612f, -0.001359f, + -0.015938f, -0.027726f, +0.020046f, -0.013270f, +0.021549f, +0.001229f, -0.010753f, +0.001448f, -0.012162f, +0.018485f, + -0.011302f, -0.009776f, -0.008273f, +0.016054f, -0.007526f, +0.000999f, +0.015499f, +0.009895f, -0.004671f, +0.001516f, + -0.009022f, +0.011330f, -0.001362f, -0.005623f, -0.006739f, -0.006108f, -0.013066f, -0.008372f, +0.008143f, -0.003693f, + -0.001585f, -0.010015f, +0.005865f, -0.000085f, +0.006785f, +0.005000f, +0.001014f, -0.005129f, +0.009381f, +0.004286f, + -0.004913f, -0.002058f, +0.001608f, -0.008314f, +0.001906f, -0.003584f, -0.000489f, +0.004045f, -0.003829f, -0.006742f, + +0.000555f, -0.000247f, -0.004695f, +0.003312f, -0.000703f, -0.000597f, +0.003584f, +0.001536f, -0.001241f, +0.001688f, + +0.000709f, +0.002873f, +0.000851f, +0.001129f, -0.003813f, +0.000601f, +0.002890f, +0.000614f, -0.002570f, -0.000764f, + +0.000014f, -0.001923f, -0.000673f, +0.003223f, +0.004598f, +0.002048f, -0.000796f, -0.000325f, -0.001003f, +0.000930f, + +0.001461f, +0.000155f, +0.003423f, -0.000983f, -0.000119f, -0.001515f + }, + { + -0.008639f, -0.085668f, -0.005887f, +0.028624f, -0.005721f, +0.001668f, -0.005519f, -0.002081f, +0.001472f, +0.014291f, + -0.028832f, +0.006283f, +0.008680f, -0.012469f, -0.023902f, +0.016203f, -0.006346f, +0.010669f, -0.024190f, -0.005714f, + -0.006290f, -0.000285f, +0.004372f, +0.000328f, +0.012585f, -0.032897f, +0.009747f, -0.008356f, +0.011030f, -0.002316f, + -0.016373f, +0.002730f, -0.007849f, +0.008398f, +0.007512f, -0.011962f, +0.005761f, -0.008607f, -0.002831f, +0.007424f, + -0.007403f, -0.003857f, -0.006952f, -0.003126f, +0.000259f, +0.002009f, +0.008065f, -0.000940f, -0.003326f, +0.005713f, + +0.000270f, -0.004064f, +0.001135f, -0.003091f, -0.002258f, -0.007336f, +0.005981f, +0.004686f, -0.006230f, +0.010735f, + +0.001460f, +0.004191f, -0.008020f, +0.003664f, -0.000720f, -0.005071f, -0.001540f, -0.007637f, +0.007659f, -0.000499f, + -0.003652f, +0.002373f, -0.001185f, -0.000387f, +0.003650f, +0.004882f, -0.000759f, -0.003186f, +0.003183f, -0.000297f, + +0.002197f, +0.000745f, -0.000631f, -0.002664f, +0.000569f, +0.000582f, +0.007036f, +0.000765f, +0.002850f, -0.000891f, + -0.001547f, -0.001333f, -0.000248f, -0.000313f, -0.001687f, -0.004022f + }, + { + +0.004136f, +0.018802f, -0.007373f, -0.013283f, +0.014571f, -0.000952f, +0.006469f, -0.006468f, -0.006696f, +0.005295f, + +0.004270f, -0.008152f, -0.006184f, -0.008377f, +0.015573f, +0.000290f, -0.016703f, +0.016921f, -0.012970f, -0.017695f, + +0.005066f, +0.008891f, -0.011798f, +0.017378f, +0.000068f, +0.026959f, +0.000830f, -0.009885f, -0.004580f, -0.007558f, + -0.005089f, +0.018094f, -0.009440f, +0.003080f, -0.001606f, +0.002168f, +0.001005f, +0.001761f, +0.009962f, -0.001607f, + -0.007245f, +0.012102f, +0.011919f, -0.008647f, -0.002057f, +0.000935f, +0.009180f, +0.007627f, -0.002916f, -0.001594f, + -0.001313f, +0.001601f, +0.008176f, -0.000243f, +0.003221f, +0.002109f, +0.004457f, +0.005830f, -0.000875f, +0.001976f, + -0.000440f, -0.003783f, +0.008611f, -0.000262f, -0.001709f, -0.008345f, -0.001226f, -0.000296f, -0.000722f, +0.004054f, + -0.005909f, +0.002732f, +0.002402f, -0.000396f, +0.000588f, +0.000487f, -0.001478f, +0.003158f, +0.003947f, -0.001874f, + +0.001385f, -0.000646f, +0.000443f, -0.002266f, -0.000475f, +0.002223f, -0.000535f, -0.001701f, +0.002726f, -0.000286f, + +0.000873f, +0.001020f, -0.001295f, +0.000937f, -0.000056f, -0.000208f + }, + { + -0.020524f, -0.081515f, +0.010554f, -0.036298f, +0.013169f, -0.008647f, +0.011476f, +0.000581f, -0.021179f, +0.012215f, + -0.020856f, +0.034953f, -0.008383f, +0.005820f, -0.013275f, -0.004905f, +0.002943f, +0.002948f, -0.008387f, -0.011006f, + -0.008139f, +0.000868f, -0.008912f, -0.006218f, +0.010590f, -0.017921f, +0.012200f, -0.005600f, -0.003533f, -0.008807f, + +0.007453f, -0.009705f, +0.014251f, +0.003929f, -0.009004f, +0.005498f, -0.000863f, +0.006511f, +0.000800f, -0.002012f, + +0.006710f, -0.000860f, -0.000200f, +0.002944f, +0.000203f, +0.006260f, +0.005606f, +0.014522f, -0.001218f, +0.001694f, + -0.007086f, -0.002992f, -0.002285f, -0.005602f, -0.000988f, +0.006797f, +0.002373f, +0.000641f, +0.000000f, +0.004668f, + -0.004310f, -0.001192f, +0.006198f, +0.001304f, -0.004925f, +0.000532f, -0.000413f, +0.002964f, +0.002545f, +0.001059f, + -0.000248f, -0.003655f, -0.004345f, -0.002385f, +0.000847f, -0.004656f, -0.000891f, +0.002519f, -0.001488f, -0.001332f, + -0.004130f, +0.000051f, -0.001339f, +0.001647f, -0.002943f, +0.000745f, -0.002414f, +0.000913f, +0.000720f, +0.001382f, + -0.000773f, +0.000036f, +0.002154f, -0.001012f, +0.000287f, +0.001586f + }, + { + -0.001031f, +0.009203f, +0.012177f, -0.007797f, +0.003527f, -0.001042f, -0.004266f, -0.000516f, +0.000197f, -0.001666f, + -0.003241f, +0.002850f, -0.010713f, +0.007698f, -0.038440f, +0.000591f, -0.036220f, -0.003233f, -0.004923f, -0.005683f, + +0.000311f, +0.009203f, +0.003283f, -0.012584f, +0.000887f, +0.001441f, +0.007292f, -0.009950f, +0.008072f, -0.023513f, + +0.008276f, +0.010114f, -0.015313f, +0.022899f, +0.006994f, +0.007666f, -0.006202f, -0.003185f, +0.006776f, +0.004639f, + -0.003258f, -0.012548f, +0.002130f, -0.006565f, +0.003434f, +0.005760f, -0.003881f, -0.002910f, -0.010107f, +0.002189f, + +0.000491f, +0.002369f, +0.000295f, -0.000020f, -0.002652f, -0.009386f, +0.003876f, -0.004563f, -0.001231f, -0.000820f, + -0.006222f, +0.000837f, +0.000112f, +0.001524f, -0.002823f, +0.003869f, +0.003707f, -0.001475f, +0.001948f, -0.001004f, + +0.001538f, +0.005078f, -0.000391f, +0.002947f, -0.000732f, -0.002505f, +0.000018f, -0.002487f, -0.000879f, -0.002441f, + -0.000080f, +0.002154f, -0.004870f, +0.002603f, +0.000323f, -0.002274f, -0.000880f, -0.002775f, +0.002743f, +0.000933f, + +0.000295f, +0.001134f, +0.000742f, +0.001055f, -0.000751f, -0.000212f + }, + { + -0.003695f, -0.143659f, +0.015237f, -0.075894f, +0.019284f, +0.009651f, -0.029863f, +0.036305f, -0.003769f, +0.010570f, + -0.015451f, -0.025897f, -0.001443f, -0.011446f, -0.007080f, -0.012003f, -0.016379f, +0.000463f, +0.017649f, +0.014291f, + +0.007457f, +0.008519f, +0.004422f, -0.012197f, +0.003094f, -0.005587f, -0.004382f, +0.023000f, -0.005997f, +0.000604f, + -0.006327f, +0.007336f, +0.009463f, +0.010365f, +0.011969f, +0.000131f, -0.000930f, -0.002495f, +0.006001f, +0.000388f, + +0.008687f, +0.003295f, +0.003261f, +0.000857f, -0.001607f, -0.000864f, -0.002242f, -0.001797f, -0.000449f, -0.008726f, + +0.004544f, +0.000303f, -0.000391f, +0.004127f, -0.007954f, +0.003707f, +0.008336f, +0.000875f, +0.003270f, +0.002682f, + +0.003207f, +0.001783f, +0.000446f, -0.005167f, +0.001456f, -0.005619f, +0.000186f, +0.010032f, -0.002587f, +0.001101f, + +0.004097f, +0.003161f, +0.000682f, -0.003538f, +0.001989f, -0.001739f, +0.000285f, -0.001633f, +0.004196f, -0.000201f, + -0.000559f, +0.002914f, +0.001587f, -0.001930f, -0.001694f, -0.002197f, -0.002461f, +0.001795f, -0.001780f, +0.001396f, + -0.000800f, -0.001651f, +0.000212f, -0.000531f, -0.003339f, +0.000578f + }, + { + -0.004627f, +0.014167f, +0.000361f, +0.006536f, -0.004466f, -0.002059f, +0.004541f, +0.000853f, +0.004489f, -0.012167f, + -0.003117f, +0.006199f, +0.009088f, +0.013094f, -0.011476f, +0.038239f, +0.057766f, -0.020711f, -0.009162f, -0.001814f, + +0.013750f, +0.006563f, -0.004102f, -0.001108f, -0.009670f, +0.002917f, -0.007312f, +0.012438f, -0.001736f, +0.008638f, + -0.006815f, -0.013681f, -0.003980f, +0.007839f, +0.015593f, -0.004634f, -0.000966f, +0.011972f, -0.006949f, +0.005410f, + -0.005891f, -0.020581f, -0.001367f, +0.012700f, -0.005314f, -0.008605f, -0.001536f, +0.006221f, +0.000300f, +0.000199f, + +0.002328f, +0.006164f, +0.000876f, +0.004890f, -0.011784f, +0.000157f, +0.000307f, -0.002859f, +0.000040f, -0.002474f, + +0.005505f, +0.001825f, +0.001572f, -0.001892f, +0.005259f, +0.003524f, -0.005682f, +0.006658f, +0.005138f, +0.001582f, + -0.003831f, +0.000059f, -0.004192f, +0.004090f, -0.002067f, -0.000527f, +0.000905f, +0.000936f, -0.000907f, +0.004106f, + +0.000151f, +0.001536f, +0.002803f, -0.002922f, +0.000398f, +0.001214f, +0.003966f, +0.001931f, +0.003209f, -0.001500f, + -0.001209f, -0.000864f, +0.001837f, +0.000138f, -0.001367f, +0.000748f + }, + { + +0.010159f, +0.113965f, -0.006707f, -0.015710f, +0.036239f, +0.004550f, +0.033675f, -0.011229f, +0.020860f, +0.002559f, + +0.020257f, -0.017889f, -0.025646f, -0.017873f, +0.006748f, -0.012269f, -0.003005f, -0.015640f, +0.007073f, -0.003630f, + +0.016028f, -0.017858f, -0.002250f, +0.005504f, -0.012422f, +0.001205f, -0.011804f, -0.001994f, -0.005650f, +0.002775f, + -0.007969f, -0.006132f, +0.012103f, -0.007152f, +0.006587f, +0.002669f, +0.009777f, +0.000833f, +0.005017f, +0.017553f, + +0.002860f, +0.007723f, -0.004992f, -0.006838f, +0.006747f, +0.007269f, -0.013300f, -0.007637f, -0.005781f, -0.010186f, + +0.001802f, -0.005446f, +0.001142f, -0.003483f, -0.005198f, -0.004644f, -0.001844f, -0.002447f, -0.000979f, -0.007196f, + -0.004203f, -0.001422f, +0.008661f, +0.009806f, -0.001949f, +0.004149f, +0.000761f, +0.000946f, +0.004321f, +0.000950f, + -0.001467f, -0.002134f, +0.000680f, -0.007366f, -0.001603f, +0.001480f, +0.005061f, -0.004436f, -0.002228f, +0.003022f, + +0.001328f, +0.005540f, -0.002888f, -0.001400f, +0.003277f, -0.001320f, +0.001354f, +0.002513f, -0.001970f, -0.002658f, + +0.000980f, -0.005400f, +0.001322f, -0.001633f, -0.002665f, -0.000712f + }, + { + +0.003915f, -0.059141f, -0.000395f, -0.005516f, +0.011227f, -0.001050f, -0.009703f, -0.002621f, -0.000539f, +0.003268f, + +0.001749f, -0.015164f, +0.002819f, -0.024976f, +0.010389f, -0.010245f, +0.025413f, +0.012493f, +0.013010f, +0.004666f, + -0.013193f, -0.001901f, -0.007585f, -0.010488f, +0.009921f, +0.011838f, -0.016117f, +0.001166f, -0.008725f, -0.011960f, + +0.010240f, -0.010830f, +0.023990f, -0.010156f, -0.015840f, -0.007091f, -0.013613f, -0.007609f, +0.000236f, +0.003231f, + +0.016026f, +0.002124f, -0.000007f, -0.000888f, -0.003201f, -0.002451f, -0.013515f, -0.003135f, +0.000576f, +0.006811f, + +0.003874f, -0.003081f, +0.002054f, +0.001678f, +0.003496f, +0.002887f, +0.005199f, +0.004674f, +0.002453f, +0.002928f, + +0.006147f, +0.000390f, -0.005791f, +0.001582f, -0.002519f, -0.002969f, +0.002707f, +0.003648f, -0.004719f, +0.000471f, + +0.001670f, -0.000310f, -0.001838f, +0.001141f, -0.002541f, +0.000478f, +0.004279f, -0.000541f, +0.002118f, -0.000287f, + -0.004938f, +0.003542f, +0.001625f, -0.003721f, -0.000537f, +0.004220f, +0.000238f, +0.002053f, +0.000497f, +0.000669f, + -0.000182f, -0.000237f, -0.001034f, +0.000099f, +0.000970f, -0.003849f + }, + { + -0.027916f, +0.021879f, -0.019974f, +0.000459f, +0.015812f, +0.015229f, -0.004147f, -0.012988f, +0.022603f, +0.018667f, + -0.001342f, -0.016478f, +0.020122f, +0.016551f, +0.012641f, -0.004928f, -0.011245f, -0.010147f, +0.001113f, +0.015678f, + -0.001155f, -0.010796f, -0.015000f, -0.006951f, +0.002595f, +0.003707f, +0.019413f, -0.007227f, -0.000440f, -0.001821f, + +0.018631f, -0.024934f, -0.013579f, +0.011975f, -0.006532f, +0.006544f, +0.006633f, +0.003689f, -0.004439f, -0.003447f, + -0.004550f, -0.006276f, +0.005950f, +0.002806f, +0.001665f, -0.004378f, +0.017466f, -0.004366f, +0.008984f, -0.002504f, + +0.004098f, -0.009302f, +0.006986f, -0.007879f, -0.000421f, -0.001780f, -0.000148f, -0.006557f, +0.011817f, +0.004211f, + -0.002967f, +0.001473f, -0.001889f, +0.008967f, -0.001835f, +0.002510f, -0.000822f, -0.001041f, -0.003833f, -0.000201f, + +0.000743f, +0.001636f, +0.004459f, -0.004225f, +0.000973f, -0.005168f, -0.001619f, +0.006838f, -0.002223f, -0.000711f, + +0.001871f, -0.000610f, -0.003876f, -0.001630f, +0.002949f, -0.000818f, -0.000729f, +0.001066f, +0.000094f, -0.001278f, + +0.000984f, +0.000805f, -0.002784f, +0.000900f, -0.000387f, -0.000810f + }, + { + +0.004258f, +0.001534f, -0.015180f, +0.015330f, -0.019353f, +0.004708f, -0.006776f, +0.002346f, +0.008585f, -0.008100f, + +0.008120f, +0.003635f, +0.005412f, -0.093399f, -0.000016f, -0.011418f, +0.010270f, -0.007489f, -0.005272f, +0.001638f, + +0.005016f, -0.005250f, +0.000493f, -0.003755f, -0.003942f, -0.021335f, +0.006562f, -0.013083f, -0.005521f, +0.000684f, + -0.004737f, +0.012001f, +0.004167f, -0.015846f, +0.007634f, -0.010849f, +0.001192f, +0.009132f, -0.009115f, +0.006421f, + -0.012553f, +0.011169f, +0.001458f, -0.009608f, -0.004963f, -0.006815f, -0.001529f, -0.006389f, -0.000114f, +0.016934f, + +0.000682f, +0.001590f, -0.003253f, +0.000336f, +0.000567f, -0.000637f, -0.012034f, -0.004528f, +0.003761f, -0.004798f, + +0.016754f, -0.005847f, -0.009716f, -0.002779f, +0.001972f, -0.005399f, -0.000659f, -0.001695f, -0.011273f, +0.000180f, + +0.002412f, -0.004548f, -0.000398f, +0.000882f, +0.002452f, +0.002494f, -0.000156f, +0.000339f, -0.002570f, -0.004441f, + +0.002588f, -0.001580f, +0.000083f, -0.000131f, -0.001876f, -0.001333f, +0.001160f, +0.000681f, +0.003911f, +0.000832f, + +0.001316f, +0.001196f, +0.001800f, -0.001567f, -0.000820f, +0.001088f + }, + { + -0.022339f, -0.045626f, -0.001530f, +0.019499f, -0.016318f, +0.024275f, +0.009234f, -0.008306f, +0.017705f, +0.021034f, + +0.006852f, +0.009054f, -0.061953f, +0.014313f, -0.021268f, -0.001549f, -0.020236f, -0.018761f, +0.011265f, +0.015842f, + -0.003334f, +0.007122f, +0.004032f, +0.009678f, -0.007059f, -0.016047f, +0.036319f, +0.002649f, +0.014277f, +0.015763f, + +0.009807f, -0.018553f, +0.006144f, -0.007304f, +0.024659f, +0.001268f, +0.009714f, -0.010411f, +0.003484f, -0.009130f, + -0.010343f, -0.003455f, +0.005072f, +0.010324f, -0.007253f, +0.004699f, +0.003913f, +0.010530f, -0.005281f, -0.000712f, + -0.013461f, +0.009518f, +0.001386f, +0.001924f, +0.002118f, -0.000309f, -0.009571f, -0.000336f, -0.004987f, +0.005123f, + -0.008234f, +0.000490f, -0.003465f, -0.009471f, +0.000032f, +0.002160f, -0.003796f, -0.002416f, -0.000536f, +0.001849f, + +0.002173f, -0.002588f, +0.005116f, +0.000825f, -0.000662f, -0.000262f, +0.004889f, -0.000596f, -0.003993f, +0.002304f, + +0.002437f, +0.000409f, -0.003685f, -0.003280f, -0.003402f, +0.001180f, -0.002860f, +0.001117f, -0.002207f, +0.004221f, + +0.003952f, +0.000317f, +0.001353f, -0.002548f, +0.003755f, -0.001014f + }, + { + -0.002563f, -0.037748f, +0.009877f, +0.001693f, +0.005453f, -0.002590f, +0.018527f, -0.003033f, +0.006667f, -0.012034f, + -0.005281f, +0.007271f, +0.013778f, -0.067877f, -0.068772f, +0.010406f, -0.005969f, +0.010552f, -0.013696f, -0.016360f, + +0.009403f, +0.011630f, -0.024861f, +0.002138f, -0.000713f, -0.020789f, +0.003209f, +0.014356f, +0.010039f, +0.016991f, + +0.016176f, -0.000708f, -0.007361f, -0.004471f, -0.014356f, +0.004600f, -0.015473f, -0.001780f, +0.008509f, -0.017527f, + -0.010224f, +0.014877f, -0.001361f, -0.002240f, -0.008013f, +0.007154f, -0.002998f, +0.005423f, +0.000952f, -0.013596f, + +0.004624f, +0.003424f, +0.000371f, +0.005187f, +0.004192f, -0.003725f, -0.001888f, -0.002861f, +0.006828f, -0.000229f, + +0.004590f, +0.000882f, +0.008684f, -0.008724f, -0.001912f, +0.002309f, -0.012322f, +0.004986f, -0.001258f, +0.000394f, + +0.000400f, +0.003422f, +0.001340f, +0.000787f, +0.005016f, +0.001729f, +0.007198f, +0.000502f, +0.001615f, +0.001671f, + +0.003889f, +0.004506f, -0.003317f, -0.002649f, -0.001983f, -0.000515f, -0.001683f, +0.003442f, -0.002203f, -0.000023f, + +0.001385f, +0.000278f, -0.003103f, +0.004629f, -0.003253f, +0.002612f + } + }, + { + { + +0.028235f, +0.013519f, +0.046771f, +0.125150f, -0.009544f, -0.003206f, -0.004306f, -0.006612f, +0.010335f, +0.018780f, + +0.038857f, -0.012509f, +0.014820f, +0.007239f, -0.001006f, +0.010005f, -0.001032f, +0.024360f, -0.004805f, +0.003360f, + -0.004840f, +0.012937f, +0.012059f, +0.014385f, -0.009488f, -0.004576f, +0.005693f, +0.004557f, +0.007841f, -0.008691f, + +0.006260f, -0.006553f, +0.003915f, -0.011278f, +0.014051f, +0.002003f, +0.011463f, +0.007318f, +0.000220f, -0.003958f, + +0.003058f, +0.002435f, +0.011299f, +0.006398f, +0.001353f, -0.004619f, -0.004110f, +0.003898f, -0.001982f, -0.002994f, + +0.002054f, -0.008879f, +0.003105f, -0.014403f, -0.005678f, -0.008270f, +0.006590f, +0.001315f, -0.001833f, -0.000891f, + -0.006781f, +0.002729f, -0.003079f, -0.000331f, -0.003283f, +0.000715f, +0.005265f, -0.006154f, +0.000604f, -0.000634f, + +0.002797f, +0.002192f, -0.003615f, -0.000414f, +0.001702f, -0.002575f, +0.002639f, -0.002119f, +0.001010f, -0.002904f, + +0.002277f, -0.001741f, -0.000308f, +0.000749f, -0.002972f, +0.001067f, -0.001651f, -0.000099f, -0.001608f, +0.000923f, + +0.001042f, +0.002616f, +0.000903f, -0.000032f, -0.001390f, -0.001217f + }, + { + +0.002306f, +0.036909f, -0.015050f, -0.088735f, +0.005215f, -0.005590f, -0.003714f, -0.003148f, +0.006490f, -0.000245f, + +0.001147f, -0.023172f, -0.007792f, +0.001198f, -0.001133f, +0.001622f, -0.020815f, -0.005589f, +0.000286f, +0.008458f, + +0.017640f, +0.000702f, +0.016442f, +0.018946f, +0.016642f, -0.009862f, -0.010779f, -0.012939f, -0.001794f, +0.000885f, + -0.010868f, +0.003023f, -0.023698f, +0.001936f, +0.009647f, +0.002865f, +0.014272f, +0.002101f, +0.005538f, -0.002890f, + +0.004843f, +0.001158f, -0.003635f, -0.013540f, -0.002820f, +0.019275f, +0.011889f, +0.003966f, -0.009211f, +0.003981f, + -0.004246f, -0.003372f, +0.005243f, -0.006526f, -0.004191f, +0.001923f, +0.000360f, -0.003612f, -0.003380f, +0.006149f, + +0.001915f, -0.005223f, +0.001722f, -0.007078f, +0.001498f, +0.000719f, +0.000061f, -0.001785f, -0.002843f, +0.001469f, + -0.003467f, -0.003067f, -0.000595f, +0.001635f, -0.001803f, +0.001091f, -0.004107f, +0.003592f, +0.000388f, -0.004078f, + -0.002962f, +0.003978f, +0.000640f, -0.001517f, +0.000331f, -0.000429f, +0.001048f, +0.003676f, -0.001398f, +0.000175f, + +0.002678f, +0.001409f, +0.001061f, -0.002305f, -0.000703f, -0.000901f + }, + { + -0.011347f, -0.018289f, +0.031751f, +0.017155f, -0.047954f, -0.003822f, -0.003755f, +0.000747f, +0.009037f, -0.003007f, + -0.003701f, -0.030756f, +0.008176f, -0.024669f, +0.010095f, +0.015687f, -0.002742f, +0.001966f, -0.007917f, +0.019707f, + -0.004989f, -0.004988f, -0.015410f, +0.004627f, -0.007298f, -0.009524f, +0.004980f, +0.018174f, +0.003247f, -0.011075f, + -0.011766f, +0.022365f, +0.004344f, +0.011527f, +0.010802f, +0.012122f, +0.000380f, -0.007939f, +0.016561f, +0.001450f, + +0.000111f, -0.013931f, +0.003719f, +0.001352f, +0.001973f, +0.003387f, -0.001605f, -0.008582f, +0.004721f, +0.002722f, + -0.001166f, +0.004914f, +0.001927f, -0.003477f, +0.006194f, -0.003190f, -0.007769f, +0.002268f, -0.007428f, -0.007804f, + +0.005317f, +0.003756f, -0.002062f, +0.002886f, -0.001419f, -0.003462f, +0.004471f, +0.001609f, -0.000583f, +0.000511f, + -0.000781f, +0.004423f, +0.000810f, +0.000804f, -0.003823f, +0.000849f, +0.005448f, +0.001868f, -0.003811f, -0.003987f, + -0.003980f, -0.003417f, -0.003484f, -0.001283f, +0.001974f, +0.000057f, -0.002733f, -0.000312f, +0.002092f, +0.002943f, + +0.000566f, -0.000384f, +0.002862f, +0.001581f, +0.003123f, +0.000435f + }, + { + +0.020530f, -0.045286f, +0.011879f, +0.031932f, -0.017427f, +0.003081f, -0.006186f, -0.001824f, -0.003481f, -0.000197f, + -0.022545f, +0.014074f, +0.013938f, +0.012586f, -0.019027f, +0.019768f, -0.009120f, +0.003313f, -0.013397f, +0.002451f, + +0.000966f, -0.020782f, -0.030356f, -0.015457f, +0.000403f, -0.047678f, +0.008401f, -0.006391f, +0.010299f, -0.001198f, + -0.012763f, +0.010470f, -0.001076f, +0.006356f, +0.018785f, -0.007592f, +0.005687f, -0.003200f, +0.009224f, +0.011281f, + -0.007800f, -0.004569f, -0.007100f, +0.002688f, -0.001496f, -0.003487f, +0.005001f, -0.008960f, -0.005799f, +0.009556f, + +0.006078f, +0.000819f, +0.000804f, -0.003046f, +0.001367f, -0.005984f, +0.002269f, +0.005161f, -0.003597f, +0.007823f, + +0.002867f, +0.001921f, -0.011492f, -0.000575f, +0.002499f, -0.000003f, +0.000954f, -0.002419f, +0.008702f, -0.003693f, + -0.003422f, +0.003581f, +0.000035f, -0.003493f, +0.000130f, -0.000293f, -0.003372f, -0.002846f, +0.002296f, -0.000897f, + +0.000181f, -0.002347f, -0.000720f, -0.000666f, -0.000193f, -0.002830f, +0.002807f, +0.000871f, +0.004164f, +0.000854f, + +0.000794f, +0.000949f, -0.000141f, -0.001710f, +0.001466f, -0.000565f + }, + { + -0.003302f, +0.032158f, +0.009409f, -0.020841f, +0.002606f, -0.005316f, +0.001280f, -0.000613f, +0.000965f, +0.004640f, + -0.006536f, -0.017695f, -0.004155f, +0.009055f, +0.030237f, -0.006345f, -0.005708f, +0.010428f, -0.014874f, +0.004101f, + +0.024299f, +0.000900f, -0.035289f, +0.016386f, -0.011150f, +0.014158f, +0.021254f, +0.008506f, +0.000293f, +0.007894f, + +0.009264f, +0.013533f, -0.006857f, +0.012880f, -0.000251f, -0.003059f, +0.000089f, -0.000617f, -0.002864f, -0.017150f, + -0.013003f, +0.004330f, +0.005778f, -0.007708f, -0.004735f, -0.007037f, +0.000329f, +0.003426f, +0.001975f, +0.000164f, + -0.002519f, +0.000146f, +0.012205f, -0.001348f, -0.000911f, -0.001970f, -0.003283f, +0.003600f, -0.001042f, +0.001467f, + -0.001670f, -0.003439f, +0.006698f, -0.000624f, -0.001513f, -0.006430f, -0.005636f, -0.003625f, +0.001451f, +0.004953f, + -0.004916f, +0.005407f, +0.004906f, -0.001852f, +0.000093f, +0.002724f, +0.000109f, +0.002498f, -0.000553f, -0.004576f, + +0.002517f, -0.000532f, +0.003816f, -0.000352f, -0.003224f, -0.001047f, -0.001692f, +0.001329f, +0.003171f, -0.001551f, + -0.000196f, +0.001184f, -0.001077f, +0.000389f, -0.000343f, -0.001044f + }, + { + +0.033433f, -0.021092f, +0.010897f, -0.040982f, -0.005771f, -0.006139f, +0.015971f, -0.018566f, -0.034762f, +0.008712f, + -0.003597f, +0.046911f, -0.009666f, +0.017770f, -0.002265f, -0.010992f, -0.018014f, -0.002051f, +0.003407f, -0.001795f, + +0.002924f, +0.001028f, -0.017245f, -0.007861f, +0.034911f, -0.003240f, +0.013850f, -0.011227f, -0.007965f, -0.006738f, + +0.007284f, -0.004439f, +0.012454f, +0.005417f, -0.001135f, +0.006533f, -0.001162f, +0.002673f, -0.004902f, -0.003966f, + +0.004045f, -0.002032f, +0.001611f, -0.001270f, -0.001639f, +0.005020f, +0.000537f, +0.011575f, -0.001235f, +0.000864f, + -0.010217f, -0.002908f, +0.002762f, -0.003154f, -0.000043f, +0.006204f, -0.000461f, -0.007085f, -0.003983f, +0.004004f, + -0.005572f, -0.000564f, -0.001212f, -0.003795f, -0.004200f, +0.002485f, +0.004412f, +0.002496f, +0.000978f, +0.001443f, + +0.000248f, -0.003700f, -0.003408f, +0.000066f, +0.004592f, -0.000697f, +0.002147f, +0.003978f, +0.002020f, +0.000914f, + -0.001575f, +0.002313f, +0.002479f, +0.004443f, -0.001423f, +0.004241f, +0.001544f, +0.001339f, -0.001191f, +0.001922f, + -0.000685f, +0.000424f, +0.004960f, -0.000468f, -0.000453f, +0.000755f + }, + { + -0.000072f, -0.022964f, -0.027828f, -0.001077f, +0.008896f, -0.000424f, -0.001857f, -0.000677f, -0.007570f, -0.002049f, + -0.008454f, -0.004240f, -0.012508f, +0.014901f, -0.015096f, +0.005886f, -0.034005f, +0.003030f, -0.003855f, +0.006419f, + +0.007890f, +0.004016f, -0.000598f, -0.028646f, -0.016599f, -0.011826f, -0.007429f, -0.008175f, +0.018050f, -0.020196f, + +0.011487f, +0.007999f, -0.015386f, +0.025176f, +0.008540f, +0.006061f, -0.007293f, -0.002703f, +0.004928f, -0.000890f, + +0.007036f, -0.007546f, -0.011501f, -0.012465f, +0.008864f, +0.003601f, +0.000191f, -0.001431f, -0.018140f, +0.002385f, + +0.001411f, +0.002363f, +0.006964f, +0.005368f, +0.001906f, -0.003864f, +0.004455f, -0.010001f, -0.007382f, +0.001878f, + -0.004266f, -0.001532f, +0.001374f, +0.003154f, +0.000096f, +0.002530f, +0.001771f, -0.006194f, +0.000355f, +0.000645f, + -0.000206f, +0.003155f, -0.005752f, -0.002784f, +0.000977f, -0.001216f, +0.002518f, +0.001823f, -0.000235f, -0.005045f, + -0.003655f, +0.000906f, -0.004062f, +0.000017f, +0.001960f, +0.001539f, -0.001683f, -0.002861f, +0.003034f, +0.002549f, + +0.001315f, -0.000203f, -0.001502f, +0.000978f, +0.001087f, +0.002033f + }, + { + +0.025434f, -0.107260f, +0.022450f, -0.112608f, -0.003590f, +0.008838f, -0.018990f, +0.059496f, -0.006005f, +0.002388f, + +0.019178f, +0.021512f, +0.014687f, -0.003149f, +0.012168f, -0.013139f, -0.038432f, -0.006377f, +0.022468f, +0.004287f, + -0.011460f, -0.001696f, -0.000229f, -0.023395f, -0.009821f, +0.000200f, +0.009732f, +0.019392f, +0.001053f, +0.009679f, + -0.015047f, +0.007846f, +0.001564f, -0.004197f, +0.004732f, -0.007740f, -0.000864f, +0.000081f, +0.004145f, -0.005554f, + +0.003258f, -0.000306f, -0.005857f, -0.009654f, -0.010479f, +0.000794f, +0.007648f, +0.001353f, -0.001075f, -0.010438f, + +0.007185f, +0.003565f, -0.000271f, +0.001621f, -0.010589f, +0.001400f, -0.000801f, -0.001029f, +0.007922f, +0.001634f, + +0.000020f, -0.002571f, +0.000741f, -0.004026f, +0.007666f, -0.003058f, +0.001019f, +0.006612f, -0.002791f, +0.002971f, + +0.001352f, -0.001098f, +0.000577f, -0.001246f, -0.000484f, -0.004867f, -0.001538f, -0.001456f, +0.004425f, -0.000914f, + -0.001436f, +0.004459f, +0.003819f, -0.000446f, -0.002223f, -0.000464f, -0.001357f, +0.002175f, -0.000207f, +0.001612f, + -0.000421f, -0.001896f, -0.001993f, -0.000189f, -0.001868f, +0.001964f + }, + { + -0.000059f, +0.045273f, -0.002285f, +0.019274f, +0.006236f, +0.000164f, +0.006810f, -0.004704f, +0.000174f, -0.006638f, + -0.000176f, +0.001180f, -0.000461f, +0.017361f, +0.003063f, +0.006853f, +0.023964f, -0.016281f, +0.000508f, -0.004627f, + +0.016961f, -0.001548f, -0.016249f, -0.005412f, +0.000751f, +0.012059f, -0.003565f, +0.027713f, -0.005604f, -0.006766f, + -0.014988f, -0.018989f, -0.004183f, +0.005859f, +0.013656f, +0.006867f, +0.007084f, +0.002650f, -0.014717f, -0.005178f, + -0.009878f, -0.009179f, +0.002131f, +0.012033f, -0.014792f, -0.006967f, +0.008314f, +0.000954f, -0.006400f, -0.002285f, + +0.000266f, -0.000034f, -0.002992f, +0.006639f, -0.004289f, +0.005588f, +0.005595f, +0.003973f, +0.011164f, -0.003077f, + -0.002686f, +0.000385f, +0.003212f, -0.001964f, +0.003173f, +0.001022f, -0.002222f, +0.001676f, -0.006345f, -0.000610f, + +0.000443f, +0.004128f, -0.003318f, +0.003587f, +0.000375f, +0.003191f, +0.001325f, -0.000308f, -0.000386f, +0.004016f, + -0.000479f, +0.001659f, +0.004257f, -0.001087f, +0.001569f, +0.002108f, +0.003710f, +0.002771f, +0.004190f, -0.001407f, + -0.001261f, -0.000634f, +0.000737f, +0.000043f, -0.001961f, -0.000979f + }, + { + -0.015503f, +0.107460f, +0.017447f, -0.012559f, -0.003612f, -0.041818f, -0.005445f, -0.017988f, +0.027866f, -0.003843f, + +0.008415f, -0.017182f, +0.013445f, +0.004683f, +0.007915f, -0.008368f, +0.011175f, -0.011042f, -0.018602f, -0.006524f, + +0.033624f, -0.008838f, -0.005204f, -0.001865f, -0.011882f, +0.009956f, -0.006297f, +0.001680f, -0.003120f, +0.011671f, + -0.001911f, -0.008857f, +0.010382f, -0.017498f, +0.002867f, -0.002876f, +0.006638f, +0.002752f, +0.001345f, +0.017119f, + +0.002274f, +0.000626f, -0.002776f, -0.006123f, -0.005413f, -0.001987f, -0.010758f, +0.004767f, +0.005817f, -0.015144f, + -0.002895f, -0.004047f, -0.005211f, -0.001448f, +0.007005f, +0.003675f, -0.006540f, -0.001958f, +0.005245f, -0.009984f, + -0.006309f, -0.001424f, +0.002748f, +0.007011f, -0.002999f, -0.001409f, -0.002147f, +0.000629f, +0.003460f, -0.000779f, + -0.000700f, -0.004143f, +0.001228f, -0.002736f, -0.000368f, -0.004091f, +0.001862f, -0.000881f, +0.000453f, +0.002283f, + -0.003599f, +0.002174f, +0.000269f, +0.000714f, +0.002533f, +0.001299f, +0.001782f, -0.000675f, -0.001163f, -0.000754f, + +0.002500f, -0.002225f, +0.005311f, +0.000470f, +0.000316f, -0.000883f + }, + { + -0.005099f, -0.050498f, +0.013481f, -0.024300f, +0.000461f, +0.023260f, +0.019527f, -0.009410f, -0.008572f, +0.014824f, + +0.007741f, -0.010514f, -0.001916f, -0.034620f, +0.008519f, -0.007160f, +0.016977f, +0.002096f, +0.018153f, +0.011657f, + -0.025459f, +0.008875f, -0.004237f, -0.028813f, +0.000851f, +0.000984f, -0.022143f, +0.002435f, -0.014098f, -0.022287f, + +0.013632f, -0.007631f, +0.013561f, -0.009790f, +0.006820f, +0.001602f, -0.005421f, -0.000644f, -0.001093f, +0.006251f, + +0.013565f, -0.001156f, +0.007572f, +0.000402f, -0.000187f, +0.007119f, -0.007984f, +0.008712f, -0.001856f, -0.003460f, + -0.003749f, -0.006133f, +0.000596f, -0.002881f, -0.001053f, -0.003794f, +0.000544f, +0.011402f, +0.004650f, +0.002234f, + -0.003672f, -0.008798f, -0.000712f, +0.008774f, +0.002222f, +0.000604f, +0.001279f, +0.004104f, -0.000686f, +0.003356f, + +0.005069f, +0.001244f, -0.002399f, +0.000217f, -0.001645f, +0.001202f, +0.003605f, -0.003827f, +0.000673f, -0.000531f, + -0.003996f, +0.000455f, +0.000723f, -0.000359f, +0.001975f, +0.004068f, -0.000268f, -0.000901f, -0.003404f, -0.000528f, + -0.001954f, -0.000229f, -0.000499f, +0.000011f, +0.003267f, -0.000642f + }, + { + +0.018630f, +0.068240f, -0.000657f, +0.028056f, +0.004935f, +0.071610f, +0.021182f, -0.025690f, +0.013180f, +0.000491f, + +0.015197f, +0.008542f, -0.007164f, -0.017353f, +0.021379f, -0.000368f, -0.004494f, +0.020863f, +0.004132f, -0.003861f, + +0.004670f, +0.000971f, +0.001877f, +0.005601f, +0.008242f, +0.006261f, +0.012343f, -0.007888f, +0.002338f, -0.002477f, + +0.030700f, -0.016680f, -0.012199f, +0.016439f, -0.007019f, -0.001359f, +0.002566f, +0.005853f, -0.000249f, -0.001758f, + -0.000935f, -0.001238f, +0.002504f, +0.000301f, +0.005565f, -0.001154f, +0.001024f, -0.013664f, +0.007533f, -0.004512f, + -0.001072f, -0.012024f, +0.012490f, -0.006479f, -0.008613f, -0.002987f, +0.001318f, -0.009291f, +0.008485f, +0.001865f, + -0.006698f, +0.001113f, -0.006038f, -0.002769f, -0.008027f, +0.001022f, +0.000916f, +0.008650f, +0.002407f, -0.000287f, + -0.002713f, +0.000851f, +0.005600f, -0.008616f, +0.000174f, -0.003098f, -0.002279f, +0.005687f, -0.003460f, -0.003098f, + +0.000343f, +0.002646f, -0.000912f, +0.000516f, +0.004132f, -0.001024f, +0.000380f, -0.000633f, -0.001103f, -0.000965f, + +0.001976f, +0.001794f, -0.004556f, +0.000629f, +0.000984f, -0.001308f + }, + { + -0.003931f, +0.008134f, +0.002087f, +0.016889f, -0.007298f, +0.003469f, -0.015233f, +0.002188f, +0.014067f, -0.008241f, + +0.006751f, +0.012079f, +0.004834f, -0.078694f, +0.009417f, -0.023700f, +0.002860f, -0.012363f, +0.003918f, +0.002999f, + -0.006610f, +0.002357f, +0.009368f, -0.012644f, -0.005244f, -0.016359f, -0.006541f, -0.001243f, -0.008946f, -0.009543f, + +0.001721f, +0.004693f, +0.002403f, -0.024393f, +0.006714f, -0.009733f, -0.005853f, +0.005740f, -0.005864f, +0.002481f, + -0.017600f, +0.012265f, +0.004615f, -0.006711f, -0.002767f, -0.000545f, -0.004890f, -0.006674f, -0.003185f, +0.008725f, + -0.011971f, -0.004662f, +0.001294f, +0.009143f, +0.003403f, +0.004008f, -0.005126f, -0.004770f, +0.000910f, -0.010284f, + +0.010065f, -0.002356f, -0.009550f, -0.008221f, +0.001325f, -0.001807f, -0.000828f, +0.002910f, +0.000634f, +0.007924f, + +0.000002f, -0.004692f, +0.000777f, -0.000982f, -0.000837f, -0.001165f, -0.003364f, +0.000040f, +0.001151f, -0.000806f, + +0.003090f, -0.001937f, +0.000446f, -0.003482f, -0.002492f, -0.000475f, +0.001889f, +0.000098f, +0.000932f, -0.000827f, + +0.000519f, -0.000480f, +0.004086f, +0.002267f, +0.003480f, +0.001903f + }, + { + +0.026106f, +0.020239f, +0.012473f, +0.024617f, -0.020208f, +0.036109f, +0.004226f, -0.016052f, -0.004449f, +0.018928f, + -0.005810f, -0.003595f, -0.059746f, -0.010737f, -0.064376f, +0.009615f, +0.001097f, -0.025543f, -0.000111f, +0.012357f, + +0.004029f, -0.001132f, -0.007531f, +0.009037f, -0.008763f, -0.042687f, +0.020334f, -0.013631f, -0.013727f, +0.003086f, + +0.008071f, -0.015439f, +0.006983f, -0.008751f, +0.021251f, -0.014884f, -0.006605f, -0.006863f, +0.015278f, -0.004782f, + -0.002561f, -0.003019f, +0.007398f, +0.011996f, -0.009686f, +0.012951f, +0.008589f, +0.007694f, -0.007071f, -0.004663f, + -0.010800f, +0.012389f, -0.008232f, -0.008366f, -0.002042f, +0.005149f, -0.009066f, -0.001176f, -0.003340f, -0.000627f, + -0.010231f, -0.001183f, -0.000807f, -0.006954f, +0.001985f, -0.000461f, -0.004166f, +0.000307f, -0.000376f, -0.001617f, + -0.000739f, -0.003305f, +0.001511f, -0.001065f, +0.001971f, +0.001073f, +0.001294f, -0.004339f, -0.005734f, +0.000208f, + -0.000380f, +0.001596f, +0.003224f, -0.000062f, -0.004152f, -0.001391f, -0.002752f, +0.001701f, -0.003994f, +0.000987f, + -0.000799f, -0.003463f, +0.001199f, -0.002137f, +0.002927f, -0.000554f + }, + { + +0.002972f, -0.053462f, -0.006524f, +0.006400f, +0.015015f, -0.002030f, +0.011851f, +0.001165f, +0.014177f, +0.003117f, + -0.006055f, -0.003152f, +0.006219f, +0.028356f, +0.060932f, +0.006159f, +0.014043f, +0.007056f, -0.032292f, -0.014945f, + +0.019807f, +0.003576f, -0.019735f, +0.004848f, -0.000666f, -0.015760f, -0.000353f, +0.009383f, -0.010849f, -0.005534f, + +0.008633f, +0.013080f, +0.006423f, +0.007585f, -0.003623f, +0.015286f, -0.013293f, -0.015668f, +0.004450f, -0.015232f, + -0.010759f, +0.021422f, +0.001805f, -0.001228f, +0.002323f, +0.014856f, -0.000470f, +0.001313f, -0.003401f, -0.006430f, + +0.007097f, -0.003531f, +0.001273f, +0.012537f, -0.000506f, -0.010289f, -0.000268f, +0.002586f, +0.007190f, -0.003389f, + +0.005873f, -0.000496f, +0.009739f, -0.004507f, +0.000258f, +0.009888f, -0.005701f, +0.010823f, +0.000079f, -0.000205f, + -0.005129f, +0.000921f, +0.003015f, -0.002232f, +0.002470f, -0.002381f, +0.001805f, -0.001909f, -0.001114f, -0.000748f, + +0.000521f, +0.001105f, +0.000952f, +0.002179f, +0.000873f, +0.003963f, +0.000471f, +0.000635f, -0.002450f, -0.000283f, + -0.000831f, +0.002041f, -0.001265f, +0.005768f, -0.002820f, +0.002582f + } + }, + { + { + -0.032246f, +0.058970f, +0.058704f, +0.111977f, +0.024281f, -0.015506f, -0.008080f, +0.006770f, -0.007336f, +0.027168f, + +0.021472f, +0.008476f, +0.008575f, +0.009482f, -0.000728f, +0.006548f, +0.018807f, +0.003044f, +0.001780f, -0.000566f, + +0.002266f, +0.015540f, +0.002221f, +0.015700f, -0.005109f, -0.005261f, +0.000690f, +0.011396f, -0.003278f, +0.000575f, + +0.004622f, -0.005612f, -0.002233f, +0.000845f, +0.005038f, +0.009373f, -0.003765f, +0.014924f, -0.000646f, -0.002655f, + +0.005747f, +0.000101f, +0.004289f, +0.006007f, +0.006701f, -0.008510f, +0.003658f, -0.005821f, +0.002238f, -0.007933f, + +0.002311f, -0.001065f, -0.004863f, -0.011007f, -0.003373f, -0.008913f, +0.002775f, +0.002007f, -0.001839f, -0.004307f, + +0.001888f, -0.000554f, -0.005739f, -0.000673f, -0.002077f, +0.000971f, -0.000325f, -0.003910f, -0.003485f, +0.003927f, + -0.002250f, +0.002723f, -0.000880f, +0.000006f, +0.000498f, -0.002076f, -0.000973f, -0.002244f, -0.001239f, -0.001323f, + +0.000275f, +0.001934f, -0.001743f, +0.000078f, +0.000130f, -0.002897f, +0.000073f, -0.001301f, -0.001448f, +0.002209f, + +0.002567f, +0.001465f, +0.001174f, -0.000197f, +0.001163f, -0.000699f + }, + { + -0.002751f, -0.016116f, +0.028019f, -0.020373f, -0.049026f, -0.004341f, +0.001874f, +0.003787f, +0.000235f, +0.008665f, + -0.016550f, -0.016481f, +0.005166f, -0.013064f, -0.004565f, +0.011719f, -0.029283f, -0.006138f, +0.025004f, -0.026140f, + +0.010529f, +0.025176f, -0.003688f, +0.010122f, +0.019483f, -0.003682f, +0.004009f, -0.026192f, +0.007302f, +0.002125f, + -0.013039f, -0.005097f, -0.015465f, +0.006692f, +0.003653f, +0.001075f, +0.019744f, +0.000313f, +0.000753f, +0.003646f, + -0.003249f, +0.007458f, +0.004227f, -0.015172f, -0.004621f, +0.019491f, +0.009967f, +0.007168f, -0.007235f, -0.002953f, + -0.002256f, -0.002587f, -0.005366f, +0.002840f, +0.001050f, -0.000253f, -0.002085f, -0.001975f, +0.001377f, -0.003882f, + +0.000473f, -0.000883f, +0.001210f, +0.000615f, -0.003355f, -0.000576f, +0.000701f, -0.002760f, +0.004128f, -0.003680f, + -0.004391f, -0.001140f, -0.000648f, -0.001580f, +0.001530f, -0.000013f, -0.003780f, +0.002722f, -0.000101f, -0.003153f, + +0.000847f, +0.001581f, +0.003612f, -0.003396f, +0.000365f, -0.001659f, +0.002991f, +0.002140f, -0.002495f, +0.004739f, + +0.000942f, +0.000857f, +0.000861f, -0.002050f, +0.000150f, -0.001941f + }, + { + +0.009753f, +0.041008f, -0.048865f, -0.060896f, +0.022426f, +0.000212f, -0.004221f, -0.001552f, +0.010895f, -0.005506f, + -0.016818f, -0.012369f, -0.021779f, +0.010061f, -0.006146f, +0.015755f, -0.003978f, -0.003600f, -0.006483f, +0.017047f, + +0.007737f, -0.007872f, -0.009030f, -0.014099f, +0.003048f, -0.003502f, +0.006807f, +0.010090f, +0.005469f, -0.011802f, + -0.012067f, +0.007737f, +0.022187f, -0.002961f, +0.026010f, -0.003659f, +0.015844f, -0.005785f, +0.001308f, +0.000193f, + +0.004583f, -0.009049f, +0.000471f, +0.007260f, -0.002806f, +0.002899f, -0.007585f, +0.006562f, -0.005353f, +0.005369f, + -0.004920f, +0.006846f, -0.005240f, +0.005350f, +0.003007f, -0.000820f, -0.009332f, -0.001307f, -0.007118f, -0.001555f, + +0.000541f, -0.000265f, +0.004379f, +0.006128f, -0.006355f, -0.001086f, +0.003159f, -0.001100f, +0.000949f, +0.003342f, + -0.002798f, +0.001430f, +0.001857f, +0.002210f, -0.004788f, +0.000966f, +0.003863f, +0.001729f, -0.004105f, -0.000893f, + -0.004862f, -0.001194f, -0.000911f, -0.005461f, +0.001364f, +0.000499f, -0.001774f, -0.000988f, +0.001455f, +0.003714f, + +0.001043f, +0.000026f, +0.000179f, +0.002226f, +0.001455f, +0.002022f + }, + { + -0.022948f, +0.004436f, -0.002443f, +0.043063f, +0.005061f, -0.002358f, -0.003641f, -0.011824f, +0.013385f, -0.011292f, + -0.017846f, +0.015710f, +0.001058f, +0.025464f, -0.002972f, +0.005966f, -0.013467f, +0.018816f, -0.015349f, -0.020729f, + +0.010190f, -0.016462f, -0.040475f, -0.003809f, -0.009878f, -0.038665f, +0.002056f, +0.010275f, -0.003006f, +0.000681f, + +0.006496f, -0.002845f, -0.001204f, +0.012757f, +0.015976f, -0.002116f, +0.003150f, +0.005261f, +0.003151f, +0.004072f, + +0.001279f, +0.002441f, -0.011454f, +0.004228f, -0.002235f, -0.000526f, -0.005754f, -0.004859f, +0.001274f, +0.007870f, + +0.001228f, +0.006153f, -0.006949f, +0.004240f, -0.006808f, -0.000741f, +0.001607f, +0.004611f, +0.005255f, -0.005862f, + +0.007885f, -0.002738f, -0.003883f, -0.008220f, +0.003672f, +0.005105f, -0.003148f, +0.007775f, +0.000055f, -0.001587f, + -0.002509f, +0.004656f, -0.000197f, -0.001253f, -0.001065f, -0.004641f, -0.001924f, +0.000218f, +0.000547f, -0.002171f, + -0.003056f, +0.002815f, -0.003044f, -0.000987f, -0.001076f, -0.001618f, -0.002419f, +0.004089f, +0.002435f, +0.000979f, + +0.000468f, +0.002432f, +0.000118f, -0.002580f, +0.002651f, +0.001031f + }, + { + +0.001356f, +0.054386f, -0.014489f, -0.014105f, -0.005310f, +0.000143f, -0.001752f, +0.000446f, +0.001887f, +0.001161f, + -0.000647f, -0.014425f, -0.006986f, -0.008410f, +0.053095f, -0.010262f, +0.019450f, -0.017161f, +0.006277f, +0.012373f, + +0.013090f, -0.002524f, -0.030806f, +0.006801f, -0.006406f, +0.014120f, +0.009909f, +0.011295f, +0.015672f, +0.003225f, + +0.002341f, +0.008013f, +0.001293f, +0.007866f, -0.007238f, +0.003337f, +0.000630f, -0.002127f, -0.014675f, -0.017252f, + +0.003381f, -0.003580f, -0.001379f, +0.001283f, -0.010729f, -0.010836f, +0.006427f, -0.003794f, +0.006109f, +0.002105f, + +0.002989f, -0.001565f, +0.006499f, -0.002795f, +0.001676f, -0.006193f, -0.001283f, +0.003995f, +0.000045f, -0.000724f, + -0.002562f, +0.005071f, -0.002990f, -0.001007f, +0.000071f, -0.001871f, -0.006607f, -0.001430f, -0.000435f, +0.003167f, + -0.000830f, +0.005838f, +0.000639f, +0.000597f, -0.002230f, +0.003948f, +0.001876f, -0.002535f, -0.002379f, -0.001796f, + +0.004014f, +0.000739f, +0.003026f, -0.000892f, -0.002210f, -0.003798f, -0.000814f, +0.002972f, +0.000497f, -0.000009f, + -0.000263f, -0.001020f, +0.000495f, +0.001891f, -0.001595f, -0.001448f + }, + { + -0.031219f, +0.078929f, -0.030796f, -0.030312f, +0.008832f, +0.003475f, +0.007998f, -0.026735f, -0.012876f, -0.010352f, + +0.037505f, +0.014522f, -0.001571f, +0.013710f, +0.016180f, -0.003643f, -0.040911f, -0.004535f, +0.013933f, +0.003838f, + -0.000248f, -0.009725f, -0.006916f, -0.005013f, +0.026479f, +0.011845f, -0.002280f, +0.000424f, -0.012363f, -0.002522f, + +0.000370f, +0.002385f, +0.006144f, +0.002949f, +0.002266f, +0.005709f, +0.008543f, -0.005327f, -0.015985f, -0.002237f, + +0.001282f, +0.006288f, +0.002099f, -0.003440f, +0.000234f, -0.004207f, +0.002401f, +0.008696f, +0.003652f, -0.007774f, + +0.002019f, -0.001488f, -0.000214f, -0.004315f, +0.004037f, -0.000913f, +0.000213f, -0.006949f, -0.002383f, -0.000544f, + -0.002895f, +0.004367f, -0.010113f, -0.000658f, +0.002466f, -0.002960f, +0.003200f, +0.003087f, +0.000350f, +0.003623f, + -0.002276f, -0.004499f, +0.003515f, -0.001089f, +0.003567f, -0.001580f, +0.001983f, +0.002607f, +0.004428f, +0.000335f, + +0.000965f, +0.001676f, +0.003916f, +0.002271f, -0.000515f, +0.003357f, +0.000904f, +0.000787f, +0.001123f, -0.000920f, + -0.000187f, +0.001737f, +0.002817f, +0.000982f, +0.000869f, -0.000152f + }, + { + +0.000853f, -0.042855f, -0.011867f, +0.005624f, +0.000937f, +0.000751f, -0.000355f, -0.002097f, -0.008334f, -0.003454f, + +0.006418f, -0.015072f, -0.001998f, +0.009595f, -0.003768f, -0.004678f, -0.027434f, -0.001767f, -0.008430f, +0.018266f, + +0.016767f, -0.004749f, -0.006442f, +0.000266f, -0.028243f, -0.015844f, -0.020222f, +0.008489f, +0.010479f, -0.012321f, + +0.010277f, -0.002466f, +0.005673f, +0.001251f, +0.017261f, +0.000759f, -0.009677f, +0.000299f, +0.002091f, -0.010730f, + +0.010734f, -0.001804f, -0.019769f, -0.005142f, +0.010637f, -0.008851f, -0.000042f, +0.001030f, -0.015444f, +0.007423f, + +0.001009f, -0.003936f, +0.010354f, +0.002818f, +0.002658f, -0.003310f, -0.001697f, +0.001980f, -0.011208f, +0.000787f, + -0.004082f, -0.001254f, +0.005163f, +0.004876f, -0.000584f, +0.000034f, -0.000807f, -0.002142f, -0.000826f, +0.001267f, + -0.000129f, -0.000939f, -0.001272f, -0.005977f, +0.001942f, -0.003204f, +0.002999f, +0.001456f, +0.001019f, -0.005021f, + -0.002698f, +0.000546f, -0.001043f, -0.002666f, +0.000557f, +0.004607f, -0.002131f, +0.001743f, +0.000350f, +0.001437f, + +0.003162f, -0.000586f, -0.003587f, +0.002925f, -0.000674f, +0.001901f + }, + { + -0.047095f, -0.019605f, +0.014210f, -0.120858f, +0.018301f, -0.003081f, +0.018907f, +0.020715f, +0.002572f, -0.006477f, + +0.022225f, +0.018268f, +0.024605f, -0.002871f, +0.016229f, -0.006564f, -0.040384f, +0.001862f, +0.015513f, -0.000176f, + +0.002433f, -0.012120f, +0.003617f, -0.010129f, -0.017012f, -0.000795f, +0.016459f, +0.005284f, +0.008083f, +0.004913f, + -0.002000f, +0.000639f, -0.006234f, +0.008172f, -0.007034f, -0.002288f, +0.001749f, -0.002414f, +0.002026f, -0.002646f, + +0.007422f, -0.006335f, -0.010226f, -0.006639f, -0.000815f, -0.001892f, +0.011343f, -0.003888f, +0.001704f, -0.003794f, + +0.000454f, +0.005564f, -0.003489f, -0.004187f, -0.000194f, -0.003424f, -0.001533f, -0.000780f, +0.007501f, +0.002911f, + +0.003766f, -0.005933f, +0.002455f, -0.000935f, +0.007761f, -0.004065f, +0.003193f, +0.003202f, +0.001532f, -0.001251f, + -0.003241f, +0.003303f, -0.001441f, -0.001381f, +0.000430f, -0.001920f, -0.005193f, +0.001266f, -0.000073f, +0.000928f, + -0.002241f, +0.004837f, +0.003530f, +0.000561f, -0.004170f, +0.002001f, -0.001119f, +0.001028f, -0.001154f, -0.000245f, + +0.002385f, -0.000299f, -0.003522f, -0.000159f, -0.001342f, +0.002055f + }, + { + +0.003927f, +0.012470f, +0.018633f, +0.006862f, +0.007857f, +0.003618f, +0.003119f, +0.001381f, -0.008325f, -0.004769f, + +0.015878f, -0.005577f, +0.003322f, -0.011728f, +0.024688f, -0.012083f, +0.003489f, +0.008545f, +0.001509f, -0.008011f, + +0.027664f, -0.020469f, -0.012274f, -0.000082f, +0.000950f, +0.000896f, +0.020063f, +0.016069f, -0.001217f, -0.005550f, + -0.013962f, -0.035810f, +0.022017f, +0.007911f, +0.009201f, +0.002502f, +0.002428f, -0.005849f, -0.002528f, -0.017751f, + -0.014144f, +0.011233f, -0.005873f, +0.009757f, -0.013562f, -0.000050f, +0.008903f, -0.006824f, -0.005476f, -0.002527f, + +0.001849f, +0.001494f, -0.004062f, +0.001613f, +0.002268f, +0.006155f, +0.002955f, +0.002461f, +0.007114f, +0.004615f, + -0.004365f, -0.001641f, +0.004540f, +0.001667f, +0.002135f, -0.002787f, +0.000537f, -0.002298f, -0.007303f, +0.001015f, + +0.002983f, +0.000423f, -0.001753f, +0.002897f, +0.002928f, +0.000530f, +0.004274f, -0.002839f, +0.002154f, +0.001318f, + -0.001985f, +0.003042f, +0.002287f, +0.000190f, +0.002441f, +0.001279f, +0.000714f, +0.003729f, +0.003179f, +0.001303f, + -0.002948f, +0.000244f, -0.000051f, +0.000600f, -0.002970f, -0.002585f + }, + { + +0.021094f, +0.109210f, -0.010801f, -0.005859f, -0.048080f, +0.033520f, -0.053264f, +0.010095f, +0.009967f, -0.009075f, + +0.015103f, -0.037095f, +0.037896f, -0.001457f, -0.007560f, +0.016058f, +0.002087f, +0.013013f, -0.027807f, -0.003542f, + +0.005745f, +0.012415f, -0.029343f, +0.008735f, -0.011157f, +0.008473f, -0.004739f, -0.002531f, +0.006504f, +0.007217f, + -0.001643f, +0.010681f, -0.002963f, -0.019277f, +0.004010f, -0.003442f, +0.010339f, -0.002265f, +0.008639f, +0.004882f, + +0.001881f, -0.000524f, -0.003544f, -0.001300f, -0.001987f, -0.008004f, -0.004532f, +0.003039f, -0.003642f, -0.006475f, + +0.002590f, -0.002910f, -0.010248f, -0.000756f, +0.012939f, +0.004053f, -0.011463f, -0.000163f, +0.005958f, -0.006117f, + -0.008945f, -0.002991f, +0.006356f, -0.002336f, +0.002445f, -0.002954f, +0.001429f, +0.001487f, +0.000621f, -0.001004f, + +0.000240f, -0.003025f, -0.000899f, +0.000289f, -0.001469f, -0.002773f, -0.002336f, +0.001397f, +0.001934f, -0.002225f, + -0.000755f, +0.003344f, -0.002390f, +0.000901f, +0.002001f, +0.000203f, +0.004958f, -0.001297f, -0.001356f, +0.002230f, + -0.001725f, +0.002257f, +0.003687f, -0.000827f, +0.002392f, -0.002262f + }, + { + +0.004889f, -0.045313f, -0.007403f, -0.012042f, -0.011568f, +0.013553f, +0.029342f, -0.009097f, -0.010107f, +0.015361f, + +0.004130f, +0.009872f, -0.022202f, -0.022648f, -0.005795f, +0.003264f, +0.001827f, +0.001048f, +0.012650f, +0.033389f, + -0.024388f, -0.005967f, -0.014074f, -0.024573f, +0.005115f, +0.005731f, -0.009017f, -0.000928f, -0.024069f, +0.009385f, + -0.004483f, -0.005138f, +0.014834f, -0.020102f, +0.015108f, -0.004645f, -0.000800f, +0.008941f, +0.000889f, +0.002491f, + +0.002258f, +0.010001f, -0.000714f, -0.002381f, +0.001304f, +0.004666f, -0.001126f, +0.012467f, -0.008848f, -0.012454f, + +0.002479f, -0.000881f, -0.004290f, -0.002030f, -0.000626f, +0.002213f, -0.007529f, +0.013417f, +0.004146f, +0.000068f, + -0.006886f, -0.008880f, +0.002495f, +0.003935f, +0.003405f, +0.007842f, -0.003057f, +0.001910f, +0.001397f, +0.005005f, + +0.005276f, -0.000812f, +0.002605f, -0.004038f, +0.000494f, +0.001443f, +0.003533f, -0.004557f, +0.000787f, -0.004511f, + -0.000131f, -0.001530f, +0.003382f, +0.000338f, +0.001826f, +0.002607f, +0.002406f, -0.002812f, -0.002069f, -0.001231f, + -0.001602f, -0.000578f, +0.000947f, -0.000631f, +0.000300f, +0.002164f + }, + { + +0.005231f, +0.096164f, -0.011396f, +0.050536f, -0.001478f, +0.088358f, +0.000961f, -0.013783f, -0.012738f, -0.005145f, + +0.033288f, +0.002883f, -0.001647f, -0.027229f, +0.020317f, +0.006984f, -0.013050f, +0.025773f, +0.012132f, -0.032093f, + +0.015141f, +0.004651f, +0.004871f, +0.001208f, +0.007371f, +0.017493f, -0.000270f, +0.006188f, -0.014659f, +0.008060f, + +0.020651f, -0.015891f, -0.000382f, +0.011054f, -0.000167f, -0.000918f, +0.006822f, -0.011421f, +0.003856f, +0.005567f, + -0.009685f, +0.002359f, +0.006888f, +0.003420f, +0.000793f, +0.006159f, -0.013188f, -0.010433f, +0.000142f, +0.002770f, + -0.006878f, +0.001301f, +0.000134f, -0.003341f, -0.004849f, +0.000459f, -0.010712f, +0.002986f, +0.001985f, -0.000917f, + -0.001240f, +0.000817f, -0.003856f, -0.013526f, -0.003356f, +0.003162f, +0.003667f, +0.003846f, -0.000346f, +0.001624f, + +0.000535f, -0.001017f, +0.003294f, -0.003297f, -0.003177f, -0.002305f, +0.001505f, +0.000324f, -0.001367f, -0.001701f, + +0.001751f, +0.000707f, +0.000211f, +0.001792f, -0.000547f, +0.002399f, +0.002696f, -0.002645f, -0.003212f, +0.001512f, + +0.001137f, -0.000389f, +0.001043f, -0.001393f, -0.000461f, -0.003676f + }, + { + +0.002099f, +0.016961f, -0.001083f, +0.006998f, +0.004561f, -0.000160f, -0.009542f, -0.008957f, +0.009816f, -0.003172f, + +0.004321f, +0.008096f, -0.011614f, -0.016172f, -0.022024f, -0.013384f, +0.005818f, -0.013447f, -0.007520f, +0.008682f, + -0.003670f, +0.011688f, -0.004865f, -0.005644f, -0.005253f, -0.007411f, -0.010328f, -0.013306f, +0.012586f, -0.021896f, + +0.026987f, -0.020361f, -0.001053f, -0.007215f, -0.009466f, +0.008697f, -0.019511f, +0.013015f, +0.004057f, -0.010939f, + -0.007270f, -0.000246f, +0.000015f, +0.003725f, -0.005627f, +0.004481f, -0.012113f, -0.000328f, -0.002804f, +0.001359f, + -0.010681f, -0.002998f, -0.003274f, +0.011087f, +0.002736f, -0.000534f, +0.004410f, -0.000816f, -0.009257f, -0.002504f, + +0.001984f, +0.001278f, -0.007696f, -0.007453f, +0.002632f, -0.003568f, -0.001079f, +0.001204f, +0.002954f, +0.011587f, + -0.006705f, -0.000949f, +0.002216f, -0.001206f, -0.003596f, -0.000237f, -0.003265f, +0.002034f, -0.003746f, +0.000990f, + +0.004759f, -0.003392f, -0.000942f, -0.001971f, +0.001582f, -0.003095f, +0.002374f, +0.001586f, -0.000911f, -0.000340f, + +0.001018f, -0.001976f, +0.005427f, +0.000285f, +0.004020f, +0.002098f + }, + { + -0.016302f, +0.111112f, +0.000470f, +0.010864f, -0.004840f, +0.022265f, -0.017823f, +0.017966f, -0.030146f, +0.010664f, + +0.007787f, -0.035577f, -0.016543f, -0.022009f, -0.052696f, +0.005285f, +0.003989f, -0.002168f, -0.010443f, +0.010092f, + +0.018531f, -0.027793f, -0.002668f, -0.000427f, +0.006216f, -0.040175f, +0.000027f, -0.019295f, -0.007864f, +0.007775f, + -0.012829f, +0.014696f, -0.006157f, -0.010450f, +0.013101f, -0.002187f, -0.019518f, -0.006628f, +0.021263f, -0.010212f, + +0.004590f, -0.003803f, +0.007409f, +0.004278f, -0.000330f, +0.005942f, +0.013938f, -0.001966f, -0.002446f, -0.011981f, + +0.011082f, -0.006087f, -0.007964f, -0.005793f, -0.005808f, +0.007773f, -0.008484f, -0.001107f, +0.003654f, -0.011460f, + -0.000527f, -0.004662f, -0.000575f, -0.002474f, +0.001738f, +0.000711f, -0.002687f, -0.001426f, -0.002663f, +0.001950f, + -0.002605f, -0.003618f, +0.002808f, -0.003445f, +0.004061f, +0.000085f, -0.000708f, -0.002247f, -0.003317f, -0.001414f, + -0.001803f, +0.002368f, +0.003641f, -0.004524f, -0.000509f, -0.002846f, +0.000210f, -0.002284f, +0.000187f, -0.001426f, + -0.000983f, -0.000493f, -0.000908f, +0.000892f, -0.000676f, +0.000502f + }, + { + -0.004033f, -0.042596f, -0.005694f, +0.008063f, +0.005948f, +0.005432f, -0.000155f, +0.004573f, +0.014653f, +0.003541f, + +0.001223f, -0.009782f, +0.006197f, +0.035298f, +0.051110f, -0.014540f, +0.030617f, +0.001436f, -0.000438f, -0.019881f, + +0.019387f, -0.030330f, -0.001912f, -0.017187f, -0.002631f, +0.010121f, -0.004267f, -0.003137f, -0.018883f, -0.001382f, + +0.002048f, +0.006403f, +0.014332f, +0.000429f, +0.016878f, -0.001494f, -0.011769f, +0.001637f, -0.003971f, -0.002425f, + -0.006637f, +0.009059f, +0.002444f, +0.004620f, +0.002407f, +0.012470f, -0.004914f, -0.002762f, +0.009202f, -0.001525f, + +0.005691f, -0.003117f, -0.006800f, +0.016359f, -0.000435f, -0.008580f, -0.002316f, +0.004827f, +0.000399f, -0.000561f, + +0.010733f, +0.001117f, -0.001630f, +0.003334f, -0.004475f, +0.007383f, +0.007013f, -0.001124f, +0.004612f, -0.003173f, + -0.001875f, -0.004002f, +0.003015f, +0.002515f, -0.000718f, -0.001567f, -0.001971f, -0.000981f, -0.002229f, -0.001712f, + +0.004590f, +0.000154f, +0.002878f, -0.001622f, +0.004143f, +0.003339f, +0.001869f, -0.002963f, -0.001099f, +0.000489f, + -0.000266f, +0.000381f, +0.000172f, +0.004064f, +0.000135f, -0.000292f + } + }, + { + { + +0.035627f, +0.021743f, -0.057503f, +0.063878f, -0.000470f, -0.011304f, +0.000578f, +0.010713f, -0.012698f, +0.008712f, + -0.002364f, +0.012777f, -0.004770f, -0.002839f, -0.005940f, +0.000913f, +0.009290f, -0.014944f, +0.002643f, +0.016258f, + +0.013870f, +0.010998f, -0.006636f, +0.009533f, -0.009228f, -0.010645f, -0.001339f, +0.006728f, -0.016926f, -0.008348f, + +0.006218f, -0.001313f, -0.001741f, +0.005780f, +0.002803f, +0.006911f, -0.005680f, +0.016182f, +0.000226f, +0.001555f, + +0.002349f, -0.003205f, +0.001965f, -0.003081f, +0.007217f, -0.005426f, +0.000030f, -0.007613f, +0.006725f, -0.002577f, + +0.001100f, +0.004742f, +0.000547f, -0.005720f, +0.003179f, -0.006785f, -0.001622f, -0.002969f, -0.002543f, -0.006865f, + +0.002730f, -0.000353f, -0.006742f, -0.001734f, -0.001896f, +0.001917f, -0.002944f, -0.005518f, -0.004953f, +0.002183f, + -0.003621f, +0.001952f, -0.000743f, -0.003592f, -0.001374f, -0.003517f, -0.003063f, -0.001404f, -0.000711f, -0.001550f, + -0.002213f, +0.000350f, -0.001991f, +0.001089f, +0.001842f, -0.002101f, -0.000032f, -0.001995f, +0.000905f, +0.002217f, + +0.000615f, -0.000634f, +0.000079f, +0.000510f, +0.003911f, +0.001606f + }, + { + +0.001084f, -0.065150f, -0.004528f, +0.059389f, +0.013398f, -0.004236f, +0.006625f, +0.011157f, +0.003558f, +0.012268f, + -0.027537f, -0.018114f, +0.006241f, -0.014299f, -0.012084f, +0.012202f, -0.024446f, -0.012268f, +0.019218f, -0.029043f, + -0.000679f, +0.009024f, -0.025699f, -0.010519f, +0.009855f, -0.008044f, +0.013048f, -0.010637f, +0.005490f, +0.004362f, + -0.000005f, +0.001154f, -0.002006f, +0.013096f, -0.003430f, -0.011650f, +0.005552f, -0.005331f, -0.003911f, +0.008029f, + +0.000414f, +0.006176f, +0.007665f, -0.004849f, -0.003499f, +0.014446f, +0.003257f, -0.000676f, -0.005467f, -0.000339f, + +0.003254f, -0.000963f, -0.011645f, +0.005497f, +0.003001f, -0.004148f, -0.003199f, -0.006848f, -0.002749f, -0.003831f, + +0.002511f, -0.000649f, +0.000067f, +0.002507f, +0.002373f, -0.000414f, +0.000511f, +0.002354f, +0.004771f, -0.004237f, + -0.003030f, +0.002534f, +0.002113f, -0.004688f, +0.000213f, -0.000723f, -0.005646f, +0.000665f, +0.002084f, +0.000119f, + +0.002657f, +0.002220f, +0.003689f, -0.001431f, +0.001369f, -0.002130f, +0.002426f, -0.000388f, -0.003805f, +0.004136f, + -0.000626f, +0.000817f, +0.000317f, -0.001073f, +0.000105f, -0.002505f + }, + { + -0.006460f, +0.117666f, +0.019048f, -0.101531f, +0.006772f, +0.005211f, -0.007228f, -0.007400f, +0.007386f, -0.004909f, + +0.014141f, +0.000117f, -0.046484f, +0.028207f, -0.011268f, +0.012091f, -0.000930f, -0.008020f, -0.033178f, -0.024641f, + -0.008079f, +0.002849f, +0.006477f, +0.003834f, +0.025433f, +0.008803f, +0.012950f, +0.002266f, -0.003938f, -0.009992f, + -0.001664f, -0.005263f, -0.004103f, -0.030306f, +0.017809f, -0.013018f, +0.000020f, -0.012335f, -0.006712f, +0.001690f, + +0.004042f, -0.002410f, +0.006612f, +0.006584f, -0.000594f, +0.005843f, -0.012849f, +0.004425f, -0.001595f, +0.004607f, + -0.006444f, +0.009319f, -0.008025f, -0.000238f, +0.001356f, +0.007099f, +0.003572f, +0.001623f, -0.004345f, +0.002013f, + -0.000202f, -0.008872f, -0.002352f, +0.004115f, -0.008714f, -0.003840f, +0.003840f, -0.001575f, -0.001811f, +0.003172f, + -0.004191f, -0.000876f, -0.000064f, +0.000752f, -0.001638f, +0.001093f, -0.002528f, -0.001277f, -0.001420f, +0.003256f, + +0.000956f, +0.004452f, +0.004056f, -0.002234f, -0.000335f, +0.000369f, +0.000527f, +0.000364f, -0.000431f, -0.000267f, + -0.000955f, -0.001645f, -0.001350f, -0.000241f, -0.000067f, +0.001901f + }, + { + +0.012138f, +0.041205f, +0.017162f, +0.053880f, -0.009240f, +0.004817f, +0.001200f, -0.011796f, +0.008912f, -0.024276f, + -0.017892f, +0.020567f, -0.010395f, +0.002654f, -0.003121f, +0.011619f, -0.010826f, +0.026363f, -0.001753f, -0.019469f, + +0.007870f, +0.001925f, -0.004387f, +0.016956f, -0.005694f, -0.026529f, +0.008438f, +0.023475f, +0.016637f, +0.001305f, + +0.013755f, +0.005799f, -0.002516f, +0.014257f, +0.014907f, -0.004568f, -0.003873f, +0.003930f, -0.005959f, -0.003041f, + +0.001946f, +0.009858f, -0.000535f, +0.005379f, -0.004202f, -0.002764f, -0.011294f, +0.003505f, +0.006149f, +0.003761f, + -0.003302f, +0.006338f, -0.004573f, +0.001976f, -0.011709f, +0.002647f, +0.005087f, -0.003149f, -0.000770f, -0.001507f, + +0.005090f, -0.006467f, +0.003416f, -0.001106f, +0.003398f, +0.002530f, -0.001852f, +0.007380f, -0.005112f, -0.000859f, + -0.002417f, +0.002934f, +0.000018f, +0.002805f, +0.002297f, -0.004689f, +0.001378f, +0.001939f, -0.001357f, -0.000828f, + -0.003461f, +0.002609f, -0.005677f, -0.004784f, -0.002659f, -0.001735f, -0.002085f, +0.001212f, -0.000357f, +0.000101f, + +0.000369f, +0.001353f, +0.001191f, -0.000076f, +0.001403f, -0.001020f + }, + { + -0.000072f, +0.065969f, -0.005826f, +0.001688f, +0.010309f, +0.000823f, -0.001337f, +0.004140f, +0.008504f, +0.004106f, + +0.003419f, -0.007697f, -0.004082f, +0.013565f, +0.070497f, -0.006490f, +0.023018f, -0.005885f, +0.015200f, +0.001296f, + +0.003775f, +0.006821f, -0.014247f, +0.007368f, -0.004947f, +0.026761f, +0.016408f, +0.003692f, +0.008307f, -0.009832f, + -0.011521f, -0.008632f, -0.002472f, -0.001753f, -0.028831f, +0.002536f, +0.000728f, -0.000312f, -0.005459f, -0.016419f, + +0.000383f, -0.000607f, +0.004194f, +0.008120f, -0.005047f, -0.003283f, +0.008587f, -0.009235f, +0.002837f, +0.001189f, + +0.007266f, -0.004271f, -0.003968f, -0.008782f, -0.002782f, -0.004456f, +0.006786f, +0.005560f, -0.000895f, -0.003823f, + -0.002894f, +0.005331f, -0.008074f, -0.003500f, +0.003240f, +0.003604f, -0.005138f, +0.000170f, +0.001497f, +0.002099f, + +0.000484f, +0.000946f, -0.005419f, -0.001273f, -0.005328f, +0.000373f, -0.000927f, -0.004137f, +0.000519f, +0.001193f, + +0.003667f, +0.000682f, +0.001536f, -0.000515f, -0.001859f, -0.004426f, +0.001180f, +0.002015f, -0.001507f, +0.000607f, + +0.001189f, -0.000103f, +0.001132f, +0.000748f, -0.002508f, -0.000546f + }, + { + +0.008160f, +0.137007f, -0.012250f, -0.044187f, -0.022356f, +0.001619f, +0.005927f, -0.015614f, +0.007385f, -0.001668f, + +0.043021f, +0.000105f, +0.008550f, +0.028832f, +0.014407f, +0.005161f, -0.020462f, -0.013055f, -0.009159f, +0.000858f, + +0.014991f, +0.004549f, +0.003767f, -0.000911f, +0.002056f, -0.004866f, -0.014643f, +0.012359f, +0.010831f, +0.005501f, + -0.006176f, -0.007143f, -0.004813f, -0.005766f, +0.001650f, +0.007948f, +0.002321f, -0.012199f, -0.014137f, -0.002501f, + -0.000518f, +0.007733f, -0.004478f, -0.011913f, +0.003337f, -0.008622f, -0.004109f, +0.004545f, +0.000906f, -0.007856f, + +0.006133f, +0.001110f, -0.000865f, -0.000469f, +0.007648f, -0.001233f, +0.002310f, -0.002408f, +0.003027f, -0.000574f, + -0.003627f, +0.006340f, -0.006595f, -0.000713f, +0.002906f, -0.001564f, -0.000362f, -0.002536f, -0.002991f, +0.001822f, + -0.000825f, -0.000504f, +0.006804f, +0.001631f, +0.002278f, -0.002368f, +0.000884f, +0.002075f, +0.001205f, -0.003353f, + -0.001300f, -0.001014f, +0.000481f, +0.000793f, -0.001576f, -0.000004f, -0.001295f, +0.000117f, -0.000336f, -0.001610f, + +0.000218f, +0.001071f, +0.000786f, -0.000469f, +0.001522f, +0.001565f + }, + { + +0.000379f, -0.019133f, +0.019563f, +0.003115f, -0.003087f, +0.001710f, +0.003417f, -0.001238f, -0.005409f, -0.001743f, + +0.009785f, -0.008282f, -0.002622f, -0.007961f, -0.028312f, -0.019302f, +0.014212f, +0.031372f, -0.010867f, +0.007242f, + -0.013889f, -0.018726f, +0.010889f, +0.049056f, +0.013724f, -0.010920f, -0.017435f, +0.005112f, +0.005673f, -0.011144f, + -0.000237f, -0.008488f, +0.005985f, -0.000593f, +0.006801f, -0.006141f, -0.003153f, +0.010485f, +0.002363f, -0.019312f, + -0.001349f, -0.012960f, -0.013766f, +0.003473f, +0.003574f, -0.012136f, -0.004534f, -0.000712f, -0.007583f, +0.007815f, + -0.003277f, -0.004980f, +0.010099f, -0.000518f, -0.003968f, -0.004207f, +0.002279f, +0.004972f, -0.007151f, +0.009151f, + +0.004567f, +0.002973f, +0.006386f, +0.007291f, -0.002601f, -0.001119f, +0.001074f, +0.004031f, -0.001039f, -0.004087f, + -0.000906f, -0.003122f, -0.000182f, +0.000812f, +0.002236f, -0.004683f, +0.002866f, +0.000406f, +0.002329f, +0.001022f, + +0.002908f, +0.000815f, -0.000346f, -0.000735f, -0.000193f, +0.003263f, +0.000294f, +0.003661f, -0.001030f, -0.002798f, + +0.003344f, +0.001748f, -0.001174f, +0.004531f, -0.001814f, -0.000649f + }, + { + +0.059943f, +0.118450f, -0.007210f, -0.134809f, +0.010731f, -0.014956f, +0.002794f, +0.006619f, -0.010073f, +0.004193f, + +0.007543f, -0.020996f, +0.031158f, +0.013216f, +0.015099f, +0.004390f, -0.008793f, +0.017922f, +0.026176f, +0.015178f, + +0.009648f, +0.001257f, +0.024393f, -0.000902f, -0.010373f, +0.007946f, +0.003735f, -0.002452f, -0.003885f, -0.012821f, + -0.001971f, +0.006376f, +0.001461f, +0.021567f, -0.004126f, -0.002990f, -0.003257f, -0.001948f, +0.003934f, -0.005303f, + +0.006791f, -0.003524f, +0.000636f, -0.003024f, +0.009784f, +0.008287f, +0.011191f, -0.000789f, +0.008570f, +0.002402f, + +0.000996f, -0.002525f, -0.011062f, -0.000070f, +0.004834f, -0.002461f, -0.000171f, -0.002639f, +0.007575f, +0.007267f, + +0.007547f, -0.004310f, +0.003791f, +0.000977f, +0.001675f, -0.004689f, +0.004791f, +0.002906f, +0.000828f, -0.001732f, + -0.002295f, +0.003365f, -0.000290f, +0.001122f, +0.003411f, -0.002049f, -0.008182f, -0.000379f, +0.000705f, +0.003289f, + -0.003642f, +0.001261f, +0.001785f, -0.001149f, -0.004478f, +0.002755f, -0.001343f, +0.001961f, +0.000620f, -0.001488f, + -0.000825f, +0.000902f, +0.000329f, +0.001035f, -0.002529f, -0.000725f + }, + { + -0.000444f, -0.028747f, +0.005351f, -0.007735f, -0.008795f, -0.002489f, +0.001477f, +0.002185f, -0.012162f, +0.000120f, + +0.024032f, -0.011224f, -0.000478f, -0.001434f, +0.038199f, -0.010563f, -0.013573f, +0.000960f, +0.011037f, -0.006684f, + +0.009869f, -0.023114f, -0.002065f, +0.016201f, +0.002470f, -0.009813f, +0.024844f, +0.008963f, +0.005088f, +0.011645f, + +0.004915f, -0.044968f, +0.007646f, +0.010785f, -0.004263f, -0.011263f, +0.009875f, -0.008884f, -0.007533f, -0.013450f, + -0.006071f, +0.006553f, -0.009530f, +0.010603f, -0.001732f, +0.008835f, +0.007032f, -0.003715f, +0.002151f, +0.003850f, + +0.002372f, +0.000327f, -0.002155f, -0.001286f, -0.000137f, +0.008126f, -0.001361f, -0.001845f, -0.000148f, +0.005014f, + -0.001636f, -0.004584f, +0.002203f, +0.003759f, -0.000451f, -0.003776f, +0.003867f, +0.000681f, -0.001708f, +0.006114f, + +0.002718f, +0.001344f, -0.002985f, +0.002070f, +0.003663f, -0.005473f, -0.000087f, -0.004066f, +0.000342f, -0.001756f, + -0.001930f, +0.001399f, -0.001214f, +0.000193f, +0.003190f, -0.002201f, -0.001322f, +0.002757f, -0.000905f, +0.000352f, + -0.001031f, -0.001485f, -0.000967f, +0.000862f, -0.004241f, -0.002370f + }, + { + -0.028101f, +0.135716f, +0.081754f, -0.006248f, -0.036348f, +0.095430f, +0.026563f, +0.025470f, -0.052790f, -0.018392f, + +0.040752f, -0.016205f, +0.043892f, -0.021306f, -0.032697f, +0.012581f, +0.003219f, +0.017471f, -0.005370f, +0.004735f, + -0.015563f, +0.004056f, -0.021578f, +0.000843f, -0.021998f, +0.006499f, -0.004268f, +0.013498f, +0.010944f, +0.006646f, + +0.012944f, +0.019434f, -0.009323f, -0.009221f, +0.006360f, -0.004686f, +0.015153f, +0.003347f, +0.011596f, -0.002125f, + -0.011474f, -0.009195f, +0.000944f, +0.009177f, +0.004608f, +0.000435f, +0.002773f, -0.001639f, -0.012633f, -0.001877f, + +0.013804f, +0.003442f, -0.005611f, -0.005412f, +0.001763f, +0.005250f, -0.001596f, -0.004337f, +0.007514f, -0.002137f, + -0.006085f, +0.002076f, +0.007111f, -0.003154f, +0.008924f, +0.004018f, -0.001990f, -0.003655f, +0.001020f, +0.003215f, + +0.003980f, +0.000022f, -0.003767f, -0.002606f, -0.000256f, +0.001146f, -0.005026f, -0.002185f, +0.000608f, -0.000248f, + +0.003521f, +0.003215f, -0.000888f, +0.003233f, +0.001420f, -0.001274f, +0.004048f, -0.002511f, -0.002307f, +0.003267f, + -0.000131f, +0.002169f, +0.000546f, -0.002051f, +0.001520f, -0.003074f + }, + { + -0.006195f, -0.010684f, +0.024593f, -0.015765f, -0.008825f, -0.021902f, -0.003906f, -0.004407f, -0.014068f, +0.012638f, + +0.003517f, -0.016418f, -0.025683f, +0.010327f, +0.017043f, +0.003897f, -0.006186f, -0.014685f, -0.011371f, +0.022395f, + -0.015591f, -0.019065f, -0.023817f, -0.013409f, +0.010387f, +0.020142f, +0.024266f, +0.020436f, -0.016139f, +0.026755f, + +0.004513f, -0.003583f, +0.011623f, -0.013453f, +0.009455f, -0.013671f, -0.000916f, +0.005490f, -0.002118f, -0.001068f, + -0.004824f, +0.004366f, -0.004672f, -0.004133f, -0.001353f, +0.001747f, -0.001252f, +0.011903f, -0.004534f, -0.016299f, + +0.003909f, +0.005907f, -0.002100f, -0.001742f, -0.001668f, +0.005998f, -0.007661f, +0.003548f, -0.001143f, -0.001992f, + -0.002802f, -0.003872f, -0.000682f, -0.003060f, -0.002707f, +0.006395f, +0.000759f, +0.003367f, -0.000728f, +0.005302f, + +0.004284f, -0.005143f, -0.001713f, -0.004957f, +0.002378f, +0.001287f, +0.002928f, -0.006515f, +0.001711f, -0.002370f, + -0.000504f, -0.000288f, +0.003835f, +0.000228f, +0.000127f, -0.000268f, +0.001805f, +0.001372f, +0.003776f, -0.000948f, + -0.001984f, -0.003794f, -0.000870f, +0.000901f, -0.002037f, +0.000513f + }, + { + -0.035156f, +0.082381f, -0.007192f, +0.023758f, +0.028769f, +0.070458f, -0.018135f, -0.007625f, +0.000740f, -0.016695f, + +0.007518f, -0.009644f, +0.006163f, -0.014044f, +0.032828f, +0.027967f, -0.041132f, -0.006465f, +0.011398f, -0.025819f, + +0.027894f, +0.016077f, +0.008547f, -0.015558f, +0.004245f, +0.020334f, -0.005699f, +0.000631f, -0.013165f, -0.008657f, + -0.001430f, -0.002925f, +0.011088f, +0.005166f, -0.001221f, -0.000411f, +0.002869f, -0.015287f, +0.002958f, +0.014648f, + -0.002605f, -0.000644f, +0.010302f, -0.000632f, -0.014130f, -0.009542f, -0.013371f, +0.002052f, +0.004135f, +0.001397f, + -0.005552f, -0.002474f, +0.000068f, +0.002865f, +0.003043f, +0.005342f, -0.010353f, +0.001413f, -0.001636f, +0.001748f, + +0.002948f, -0.001520f, -0.002029f, -0.006920f, -0.001663f, -0.002190f, +0.001351f, +0.002852f, -0.002733f, +0.001291f, + +0.000120f, -0.002472f, +0.003381f, -0.001553f, -0.003204f, +0.001001f, +0.004116f, -0.001374f, +0.004965f, +0.005774f, + +0.004429f, +0.002397f, -0.002287f, -0.000841f, +0.000337f, +0.000714f, +0.000853f, +0.001075f, +0.000308f, +0.003230f, + -0.000536f, -0.001749f, +0.002358f, -0.002804f, -0.002143f, -0.002659f + }, + { + -0.001102f, +0.052149f, +0.013830f, -0.009791f, +0.002650f, -0.005788f, -0.010909f, -0.010501f, +0.010921f, +0.000316f, + -0.007347f, -0.012192f, +0.014784f, +0.041891f, -0.009557f, +0.001676f, +0.001036f, -0.017636f, -0.005825f, +0.011814f, + -0.010077f, +0.006636f, +0.007560f, +0.018880f, +0.015673f, +0.000076f, -0.015025f, -0.006017f, +0.043834f, -0.016800f, + +0.018092f, -0.028636f, -0.007807f, +0.003917f, -0.001387f, +0.024199f, -0.013745f, +0.001989f, +0.006130f, -0.000043f, + -0.006087f, -0.012441f, -0.003678f, +0.010491f, -0.008095f, -0.006335f, -0.011917f, +0.000524f, -0.002364f, +0.008216f, + -0.000281f, +0.007511f, -0.004025f, +0.007263f, +0.001106f, +0.000667f, +0.010133f, +0.000875f, -0.010775f, -0.001158f, + +0.002919f, +0.004408f, -0.000223f, -0.000210f, +0.002808f, -0.000671f, +0.005682f, +0.000047f, -0.005679f, +0.001836f, + -0.007640f, +0.001936f, +0.002934f, +0.002454f, +0.000936f, +0.000354f, -0.003470f, +0.001869f, -0.007628f, -0.002141f, + +0.001198f, -0.004855f, -0.001947f, -0.001119f, +0.004769f, +0.000304f, +0.004004f, +0.005092f, +0.001930f, -0.001381f, + -0.000330f, -0.001477f, +0.004492f, -0.002756f, -0.000043f, +0.001780f + }, + { + -0.007286f, +0.138256f, +0.001569f, +0.022052f, +0.007395f, -0.019211f, -0.029794f, +0.027372f, -0.021379f, +0.021731f, + +0.032455f, -0.003771f, +0.011393f, +0.005595f, -0.023936f, -0.010452f, +0.019986f, +0.042135f, +0.011493f, +0.000199f, + -0.001079f, -0.036995f, +0.004050f, +0.006428f, +0.006406f, -0.026376f, +0.005133f, -0.016725f, -0.002105f, -0.010297f, + -0.035694f, +0.014149f, +0.006867f, +0.000724f, -0.011836f, -0.014651f, -0.005579f, +0.005432f, +0.019092f, -0.004424f, + +0.011182f, -0.002291f, +0.001656f, -0.004534f, -0.007170f, -0.016375f, -0.008548f, -0.002134f, +0.004954f, -0.007495f, + +0.006130f, -0.008485f, +0.005251f, +0.000818f, -0.006871f, -0.002835f, -0.007927f, +0.003806f, +0.005494f, -0.009266f, + +0.002010f, +0.002182f, +0.005652f, +0.002900f, +0.005517f, +0.005092f, +0.003164f, +0.000699f, -0.000936f, +0.002769f, + -0.001564f, +0.001562f, +0.010379f, -0.002196f, +0.002611f, +0.000932f, +0.003128f, +0.000610f, -0.001313f, -0.000744f, + -0.004606f, -0.000844f, +0.001575f, -0.003611f, +0.002268f, -0.003474f, +0.000138f, -0.001967f, +0.003292f, -0.000134f, + +0.000105f, +0.003025f, +0.000920f, +0.003842f, +0.000669f, +0.000904f + }, + { + +0.003085f, -0.047474f, -0.018505f, +0.027460f, +0.011030f, -0.002077f, -0.005108f, -0.002905f, +0.013924f, -0.006249f, + +0.004895f, -0.002049f, -0.002519f, -0.060940f, -0.069184f, -0.027258f, +0.024663f, +0.004364f, +0.005436f, -0.006354f, + +0.012780f, -0.036421f, +0.001264f, -0.022856f, +0.002249f, +0.017474f, +0.007471f, +0.001937f, -0.021662f, -0.007709f, + -0.011250f, -0.006649f, -0.005449f, -0.017786f, +0.013088f, +0.014624f, +0.011969f, +0.010169f, +0.000333f, +0.002884f, + +0.001169f, +0.011842f, +0.002448f, +0.007828f, +0.001838f, +0.005059f, -0.004362f, -0.002764f, +0.007143f, -0.002784f, + +0.008748f, +0.010633f, -0.002623f, +0.008499f, -0.003901f, -0.001676f, +0.003527f, +0.004443f, +0.001655f, +0.001309f, + +0.006870f, +0.004320f, +0.002250f, +0.002095f, -0.012357f, -0.004355f, +0.004136f, -0.007626f, +0.004255f, +0.001673f, + -0.000006f, -0.003313f, +0.002068f, +0.000736f, -0.003818f, -0.002125f, -0.000816f, -0.001310f, -0.004738f, -0.002395f, + +0.007270f, +0.002349f, +0.001767f, -0.004051f, +0.004626f, +0.002922f, +0.003021f, -0.002618f, -0.001119f, +0.003132f, + -0.000240f, -0.002281f, +0.001324f, +0.003439f, -0.001870f, -0.000269f + } + }, + { + { + -0.033384f, -0.090919f, +0.076209f, +0.014265f, +0.037782f, -0.006125f, +0.014221f, +0.012653f, -0.012667f, +0.007782f, + -0.022731f, +0.014800f, -0.001583f, +0.001665f, +0.001585f, -0.011695f, -0.000916f, -0.018865f, +0.017902f, +0.012907f, + +0.018249f, -0.007170f, +0.004079f, +0.006243f, -0.002570f, -0.003843f, -0.015944f, +0.001192f, +0.003602f, -0.007585f, + +0.003982f, +0.006289f, -0.015347f, +0.006153f, +0.012275f, -0.000278f, +0.011638f, -0.005116f, +0.010031f, -0.000902f, + -0.014082f, +0.005345f, +0.012780f, -0.002354f, -0.000847f, -0.000504f, -0.006290f, -0.003430f, +0.004775f, +0.010561f, + -0.007131f, +0.006382f, +0.004231f, -0.001222f, -0.004904f, -0.001768f, +0.001185f, -0.005644f, -0.001607f, +0.001423f, + -0.001653f, -0.008994f, +0.002236f, -0.004637f, +0.003200f, -0.001089f, -0.002740f, -0.004852f, -0.002458f, +0.000667f, + +0.000315f, -0.002280f, +0.000116f, -0.006984f, -0.002660f, -0.000494f, -0.002950f, -0.003222f, +0.000341f, +0.000059f, + -0.004176f, +0.000529f, -0.002962f, +0.003464f, -0.000330f, +0.000063f, +0.000905f, -0.004596f, +0.003403f, +0.001404f, + +0.000656f, -0.002191f, -0.000712f, +0.002922f, +0.001490f, +0.002631f + }, + { + +0.000743f, -0.093825f, +0.008105f, +0.066181f, +0.016102f, -0.004066f, +0.005057f, +0.006357f, +0.007547f, +0.017208f, + -0.042104f, -0.009682f, -0.009616f, +0.009367f, -0.007044f, -0.010676f, -0.000409f, -0.006835f, +0.008297f, -0.022817f, + +0.006892f, +0.004818f, -0.047828f, -0.016447f, +0.030002f, +0.002941f, -0.002377f, +0.003555f, -0.020401f, +0.005751f, + +0.002704f, +0.003077f, +0.013027f, -0.009249f, +0.000570f, +0.004671f, -0.008061f, +0.001567f, -0.009416f, +0.002484f, + +0.012838f, -0.000237f, +0.006288f, -0.003439f, +0.004469f, -0.004277f, +0.007186f, -0.000592f, -0.003471f, +0.001473f, + +0.001283f, +0.000254f, -0.008863f, +0.002641f, -0.003012f, +0.000699f, +0.001104f, -0.013242f, +0.000135f, -0.001465f, + -0.002090f, +0.000443f, +0.000320f, -0.000174f, -0.001753f, +0.003665f, +0.002494f, -0.000623f, +0.002761f, +0.003052f, + -0.003403f, -0.001553f, +0.003298f, -0.001375f, +0.000087f, -0.005808f, -0.003103f, -0.001646f, +0.001535f, +0.002601f, + -0.000502f, +0.004884f, +0.000219f, +0.001472f, +0.000827f, -0.000386f, -0.002437f, -0.000357f, +0.001597f, +0.001282f, + -0.002647f, +0.001826f, -0.000203f, +0.000667f, -0.001181f, -0.002687f + }, + { + +0.002922f, +0.181320f, -0.025801f, -0.070873f, -0.021801f, -0.000029f, +0.003313f, -0.020183f, +0.009913f, -0.005646f, + -0.004386f, +0.019833f, -0.024647f, +0.018078f, -0.001673f, +0.005539f, -0.011743f, -0.002091f, -0.040346f, -0.014051f, + -0.028673f, +0.019773f, +0.000637f, +0.017396f, +0.016778f, +0.003656f, +0.017330f, -0.005021f, +0.001191f, -0.006942f, + +0.004691f, -0.004600f, -0.013148f, -0.021962f, -0.004876f, +0.009498f, -0.016489f, +0.000760f, -0.008093f, -0.001811f, + -0.000324f, -0.000197f, +0.010907f, -0.001519f, +0.007372f, -0.001075f, -0.009576f, -0.000971f, +0.005473f, -0.003936f, + +0.005425f, +0.004939f, -0.006322f, -0.001251f, +0.001492f, +0.003121f, +0.010324f, -0.002746f, -0.004122f, -0.000455f, + +0.003321f, -0.008147f, -0.003189f, -0.006314f, -0.000775f, -0.000358f, +0.002181f, -0.002648f, -0.002126f, +0.003821f, + -0.001439f, -0.002216f, -0.002548f, -0.003320f, +0.003456f, +0.001970f, -0.001370f, -0.005198f, +0.002269f, +0.000685f, + +0.002932f, +0.002121f, +0.004861f, -0.000000f, -0.001649f, -0.000347f, +0.004001f, -0.000723f, +0.000917f, -0.003242f, + -0.000635f, -0.001693f, +0.000021f, -0.002498f, -0.000090f, +0.003002f + }, + { + +0.009907f, +0.039665f, -0.005417f, +0.046443f, +0.030165f, -0.000266f, -0.002086f, -0.010348f, +0.009983f, -0.019788f, + -0.000813f, -0.006663f, -0.000671f, -0.007462f, -0.012213f, -0.000442f, +0.018752f, -0.003648f, +0.012138f, -0.001729f, + -0.008227f, +0.003118f, +0.031107f, -0.007017f, +0.001284f, -0.018558f, +0.020093f, +0.009103f, +0.027433f, -0.012597f, + +0.004487f, +0.016262f, -0.006158f, +0.012664f, +0.005746f, +0.010495f, -0.013271f, +0.002833f, -0.012060f, +0.002417f, + -0.003508f, +0.013540f, +0.008664f, -0.000247f, -0.008929f, +0.003754f, -0.014545f, +0.005897f, +0.003134f, -0.001329f, + +0.006686f, -0.002399f, +0.000413f, -0.003408f, -0.009597f, -0.000166f, +0.007559f, -0.000891f, -0.007031f, +0.008006f, + -0.001195f, -0.005710f, +0.005656f, +0.005255f, -0.004411f, -0.000236f, +0.007200f, -0.000660f, -0.005209f, +0.002669f, + -0.001875f, -0.005077f, +0.007556f, -0.000320f, +0.001484f, -0.002269f, +0.001051f, +0.002355f, -0.003258f, -0.000138f, + +0.001277f, -0.000059f, -0.004572f, -0.005612f, -0.002019f, -0.002677f, +0.001041f, -0.001556f, +0.002293f, -0.001531f, + -0.001350f, +0.000696f, +0.003581f, +0.002252f, -0.000986f, -0.001924f + }, + { + -0.000785f, +0.058943f, +0.003867f, +0.013770f, +0.001064f, +0.002213f, -0.000454f, +0.001633f, +0.012213f, -0.000812f, + +0.003472f, -0.010267f, +0.008939f, -0.019387f, +0.061263f, +0.051244f, +0.012945f, +0.010989f, -0.020093f, +0.003372f, + +0.006151f, +0.005013f, -0.007533f, -0.001464f, +0.011470f, +0.028338f, -0.001849f, +0.000204f, +0.008343f, -0.022312f, + +0.009034f, +0.000066f, +0.000755f, -0.007352f, -0.026163f, -0.000219f, +0.000331f, -0.003273f, +0.002311f, -0.010111f, + -0.003762f, +0.004954f, -0.006129f, +0.014016f, +0.000963f, -0.012736f, +0.004611f, +0.002340f, -0.005118f, +0.004882f, + +0.001915f, -0.006472f, -0.003726f, -0.008154f, -0.000301f, -0.005819f, +0.011052f, -0.002470f, -0.000797f, -0.002647f, + +0.000208f, +0.001803f, -0.004480f, -0.002211f, +0.001581f, +0.006338f, +0.000820f, -0.009383f, +0.004841f, -0.002025f, + -0.001815f, +0.002705f, -0.004122f, -0.003346f, -0.002256f, -0.004280f, +0.000630f, -0.001815f, +0.000149f, +0.002474f, + +0.003666f, -0.002775f, -0.000244f, +0.000708f, -0.002387f, -0.002961f, +0.000808f, +0.001511f, -0.002023f, +0.000240f, + +0.001502f, +0.000034f, +0.001912f, -0.001277f, -0.001432f, -0.000721f + }, + { + +0.029665f, +0.096117f, -0.006150f, -0.076763f, +0.016247f, -0.008852f, -0.000701f, -0.018044f, +0.032019f, +0.004577f, + +0.025381f, -0.010916f, +0.022943f, +0.024800f, +0.005975f, +0.002064f, -0.007182f, -0.014421f, -0.011523f, -0.007821f, + +0.024824f, +0.010256f, -0.009417f, +0.015161f, -0.013384f, -0.009441f, -0.009827f, +0.012980f, +0.006193f, +0.014430f, + -0.009609f, -0.012480f, +0.001595f, -0.001600f, -0.003546f, +0.010076f, -0.001215f, -0.011366f, -0.005606f, -0.004076f, + +0.003076f, -0.000959f, -0.001520f, -0.022052f, +0.008680f, -0.009407f, +0.002819f, -0.001992f, +0.002076f, +0.002267f, + -0.002568f, +0.006523f, -0.001530f, +0.004121f, -0.000881f, +0.000722f, +0.000590f, +0.002153f, +0.005602f, -0.003352f, + -0.003015f, +0.007669f, -0.005485f, -0.002756f, +0.000992f, +0.003985f, -0.003780f, -0.004425f, -0.002687f, -0.000465f, + -0.000666f, +0.002685f, +0.002297f, +0.005255f, -0.002210f, +0.002038f, -0.000339f, +0.002190f, -0.001664f, -0.002615f, + -0.003160f, -0.000321f, -0.000473f, +0.003393f, -0.001557f, -0.002589f, -0.000979f, +0.000059f, -0.002469f, -0.001605f, + +0.001899f, +0.000874f, -0.000517f, -0.000304f, +0.002147f, +0.001306f + }, + { + -0.000704f, +0.012398f, -0.001063f, +0.000171f, -0.000996f, +0.002364f, -0.000769f, -0.003539f, -0.004620f, +0.009647f, + +0.000218f, -0.010955f, +0.000239f, -0.010258f, -0.041146f, -0.008470f, +0.024625f, +0.026816f, -0.004311f, -0.016187f, + -0.020071f, -0.004111f, +0.018284f, +0.011707f, +0.040379f, -0.018562f, -0.022550f, +0.011764f, -0.004110f, +0.002780f, + +0.008957f, -0.016405f, -0.000859f, +0.008924f, -0.004116f, +0.002443f, -0.000795f, +0.012742f, -0.003284f, -0.005843f, + -0.000357f, -0.022608f, -0.010110f, +0.008095f, +0.000424f, -0.007244f, -0.007159f, -0.009003f, +0.007439f, -0.004240f, + +0.000560f, +0.002282f, -0.002558f, +0.004190f, -0.004050f, +0.002320f, -0.001203f, +0.000015f, -0.002597f, +0.008466f, + +0.005142f, +0.001857f, +0.004742f, +0.009350f, -0.003076f, -0.004371f, +0.006115f, +0.003500f, -0.004032f, -0.001567f, + -0.000406f, -0.001053f, -0.001253f, +0.002062f, +0.000407f, -0.003786f, +0.001782f, +0.001645f, -0.000613f, +0.001680f, + +0.005139f, +0.001700f, -0.002457f, +0.001929f, +0.000174f, -0.001344f, +0.003419f, +0.001899f, -0.000206f, -0.004214f, + +0.002957f, +0.001981f, +0.002079f, +0.001983f, +0.000363f, -0.003547f + }, + { + -0.054987f, +0.321355f, -0.031335f, -0.126368f, -0.001141f, -0.012879f, -0.006853f, +0.012993f, -0.023432f, +0.005051f, + -0.015702f, -0.015676f, +0.034761f, +0.019946f, +0.014643f, -0.021227f, +0.018751f, +0.005146f, +0.030702f, +0.036776f, + -0.001199f, +0.013092f, +0.008373f, +0.000745f, -0.014893f, +0.021952f, -0.020778f, +0.019502f, -0.011112f, -0.018314f, + +0.002324f, +0.001714f, +0.008090f, +0.016696f, -0.002618f, -0.004046f, -0.005549f, +0.003517f, -0.007903f, +0.000856f, + +0.000760f, +0.003142f, +0.006725f, -0.007161f, +0.009404f, +0.012951f, +0.002075f, +0.006740f, +0.012609f, -0.007987f, + -0.000797f, -0.000461f, -0.012949f, +0.001254f, +0.008028f, -0.002973f, -0.001195f, +0.004330f, -0.001879f, +0.005148f, + +0.007865f, +0.004423f, +0.000622f, +0.000552f, -0.004271f, +0.003501f, +0.001925f, +0.004233f, -0.000523f, -0.001377f, + -0.000049f, -0.000676f, +0.003763f, +0.001645f, -0.000511f, -0.004516f, +0.001728f, -0.004236f, -0.001247f, +0.005048f, + -0.003553f, -0.001311f, +0.002651f, -0.001880f, -0.001866f, +0.004828f, -0.003041f, -0.001769f, +0.003395f, -0.000764f, + -0.001892f, -0.001919f, +0.003245f, -0.000384f, +0.000590f, -0.001626f + }, + { + -0.003092f, -0.010313f, -0.005851f, -0.014159f, -0.002905f, -0.004600f, -0.002243f, +0.003637f, -0.010537f, +0.004148f, + +0.011570f, +0.003156f, -0.004020f, +0.016087f, +0.011072f, +0.018279f, -0.027856f, -0.011886f, +0.017450f, -0.001238f, + -0.010455f, -0.005158f, +0.013166f, +0.014823f, -0.005661f, -0.013121f, +0.035639f, -0.011731f, +0.030255f, +0.006093f, + -0.011126f, -0.009114f, -0.018837f, +0.001293f, +0.003933f, -0.019249f, +0.010818f, -0.003187f, -0.019695f, -0.007199f, + +0.004835f, -0.001819f, -0.000290f, -0.001680f, +0.007367f, +0.006066f, +0.008616f, -0.003606f, -0.004741f, +0.003540f, + +0.008391f, +0.001601f, +0.002808f, -0.005433f, -0.000170f, +0.003290f, +0.004219f, -0.001984f, -0.002808f, +0.007310f, + -0.005827f, +0.002359f, +0.000906f, +0.004472f, -0.001843f, -0.000216f, -0.000452f, +0.004671f, -0.000011f, +0.004835f, + +0.002400f, -0.001674f, -0.003859f, +0.004773f, -0.000740f, -0.005547f, -0.000340f, -0.001004f, -0.001697f, -0.001842f, + +0.001331f, +0.002182f, -0.003923f, +0.001228f, +0.004472f, -0.003264f, +0.000481f, -0.000293f, -0.001037f, -0.000229f, + +0.002452f, -0.003779f, -0.000811f, -0.000109f, -0.005324f, +0.001102f + }, + { + +0.036719f, +0.109878f, +0.060018f, -0.024343f, -0.010085f, +0.030190f, +0.055684f, +0.033154f, -0.032727f, -0.002585f, + -0.000071f, +0.016171f, +0.022334f, -0.015500f, -0.025462f, -0.008488f, +0.021256f, +0.003808f, +0.013803f, -0.011420f, + -0.014813f, -0.001145f, -0.007734f, -0.002658f, -0.002688f, +0.003612f, -0.005927f, +0.015490f, +0.005295f, +0.002233f, + +0.015369f, +0.023801f, -0.018332f, +0.004367f, -0.004307f, -0.000964f, +0.011350f, +0.006403f, +0.005861f, +0.005441f, + -0.013356f, -0.001761f, -0.007970f, +0.004141f, +0.010350f, +0.005660f, -0.005209f, -0.000967f, -0.006615f, -0.002283f, + +0.012828f, +0.005488f, -0.005024f, -0.006630f, -0.008025f, +0.002502f, +0.005525f, -0.001755f, +0.003333f, -0.000154f, + -0.002313f, +0.000745f, +0.005832f, -0.000373f, +0.000736f, +0.010659f, -0.004502f, -0.005809f, +0.007024f, -0.001022f, + +0.000430f, +0.002345f, -0.000168f, -0.000791f, -0.000779f, -0.000214f, -0.003029f, -0.004300f, -0.000098f, -0.001516f, + +0.003391f, +0.002652f, +0.005435f, +0.002314f, -0.001403f, -0.001577f, +0.005067f, -0.002733f, -0.000139f, +0.000999f, + +0.000147f, +0.001203f, -0.000840f, -0.001604f, +0.002598f, -0.003436f + }, + { + +0.007959f, +0.003403f, -0.001140f, -0.001980f, -0.007270f, -0.026457f, -0.005084f, -0.016930f, -0.010359f, +0.022924f, + -0.005343f, -0.036841f, +0.003276f, +0.002105f, +0.033529f, -0.005231f, -0.005630f, -0.024182f, -0.011787f, -0.002578f, + +0.019670f, -0.034131f, -0.009634f, -0.012149f, +0.000913f, +0.023068f, +0.023525f, +0.006872f, +0.003575f, +0.015690f, + +0.011301f, +0.001094f, -0.001888f, -0.004838f, +0.001217f, -0.008386f, -0.004654f, +0.000956f, -0.001818f, +0.003821f, + -0.006550f, +0.000894f, +0.003864f, -0.004960f, +0.007159f, -0.003757f, -0.003819f, +0.000870f, +0.004591f, -0.007197f, + +0.002639f, +0.002757f, -0.006122f, +0.000419f, -0.002383f, -0.002402f, +0.005020f, -0.001752f, -0.002431f, +0.000457f, + -0.003943f, -0.000708f, -0.003045f, -0.002237f, -0.001673f, +0.004108f, +0.001692f, +0.005771f, -0.001393f, +0.000607f, + +0.001774f, -0.002787f, -0.005189f, -0.000561f, +0.002758f, -0.003846f, +0.000304f, -0.003659f, +0.004433f, -0.002832f, + +0.000296f, +0.002737f, -0.002161f, +0.002811f, -0.001969f, +0.000198f, -0.001272f, +0.001830f, +0.003687f, +0.000412f, + -0.000197f, -0.004009f, -0.002505f, +0.002792f, -0.002554f, -0.001384f + }, + { + +0.050294f, -0.043887f, -0.015827f, +0.023476f, +0.069209f, +0.004410f, +0.024947f, -0.025179f, +0.018543f, +0.000243f, + -0.020798f, -0.019289f, +0.014150f, +0.009573f, +0.031089f, +0.014414f, -0.006846f, -0.040609f, +0.011289f, -0.012367f, + +0.027606f, +0.015860f, +0.009124f, -0.016411f, +0.009314f, -0.002779f, +0.006909f, -0.006208f, -0.000161f, -0.010806f, + -0.005848f, +0.012624f, -0.003598f, +0.013638f, +0.000543f, -0.008511f, -0.008681f, -0.000963f, +0.006725f, +0.005050f, + -0.001279f, -0.005362f, +0.022672f, -0.013201f, -0.015542f, -0.014594f, +0.000812f, -0.004296f, +0.006715f, -0.009835f, + +0.001390f, +0.000811f, +0.002251f, -0.004354f, +0.001646f, +0.003889f, -0.001618f, -0.006436f, +0.000132f, +0.000709f, + +0.006072f, -0.004274f, +0.002389f, -0.005944f, -0.003486f, -0.001092f, +0.000203f, +0.000912f, -0.002649f, +0.003065f, + +0.000394f, +0.001596f, -0.000887f, -0.000570f, -0.001407f, -0.000861f, +0.003830f, -0.003687f, +0.008610f, +0.006892f, + +0.002117f, +0.000326f, -0.001894f, +0.000910f, +0.001059f, -0.002203f, +0.001275f, +0.001583f, +0.003407f, +0.002039f, + -0.001398f, -0.000316f, +0.000265f, -0.000115f, -0.002444f, -0.002187f + }, + { + +0.000688f, +0.075515f, -0.010802f, -0.002148f, -0.011140f, +0.003619f, -0.007983f, -0.012581f, +0.001248f, +0.002359f, + +0.003047f, -0.005753f, +0.002676f, +0.069185f, -0.040831f, +0.023072f, -0.006576f, +0.000469f, -0.025853f, -0.011338f, + +0.007201f, +0.001282f, +0.023069f, -0.009376f, +0.012530f, -0.007828f, +0.012770f, -0.002460f, +0.017630f, +0.025377f, + -0.029409f, +0.000413f, -0.008797f, -0.004468f, +0.004356f, +0.005347f, +0.012400f, -0.015254f, +0.013897f, +0.002392f, + -0.008333f, -0.011204f, -0.000447f, +0.007764f, +0.001000f, -0.015296f, -0.007603f, +0.000411f, -0.003609f, +0.009536f, + -0.001157f, +0.016827f, -0.004786f, -0.003814f, +0.002266f, +0.009541f, +0.002536f, +0.002001f, -0.005062f, -0.004422f, + +0.000603f, +0.009442f, +0.001051f, -0.000763f, +0.000729f, +0.006924f, +0.006186f, -0.000735f, -0.002049f, -0.010567f, + -0.005405f, +0.002736f, +0.000548f, +0.007268f, +0.002670f, -0.001674f, -0.003528f, +0.001035f, -0.007853f, -0.001492f, + -0.002649f, -0.002694f, -0.001989f, +0.001512f, +0.004437f, +0.000552f, +0.002722f, +0.005922f, +0.001598f, -0.000396f, + -0.003132f, +0.000199f, +0.001810f, -0.005153f, +0.002304f, +0.001527f + }, + { + +0.032590f, +0.096225f, -0.024036f, +0.009853f, +0.037361f, -0.058418f, +0.011676f, +0.008324f, +0.004178f, +0.002297f, + +0.039175f, +0.017248f, -0.005795f, -0.027975f, +0.019363f, -0.019703f, +0.042278f, +0.021891f, +0.034006f, -0.014916f, + -0.019823f, -0.004265f, -0.006244f, +0.020812f, -0.012887f, -0.019807f, +0.019316f, -0.018329f, -0.003259f, -0.024230f, + -0.007311f, -0.004548f, -0.003063f, +0.012428f, -0.018949f, +0.000641f, -0.010262f, +0.009393f, +0.001242f, +0.007537f, + +0.012069f, +0.003149f, -0.001109f, -0.015781f, -0.005820f, -0.012297f, -0.020192f, +0.009820f, -0.002725f, +0.012540f, + -0.015264f, +0.003777f, +0.003074f, -0.000542f, -0.007635f, -0.010147f, +0.003973f, +0.006882f, -0.007365f, -0.005267f, + -0.000013f, +0.003132f, +0.006131f, -0.001625f, +0.009574f, +0.003164f, +0.011027f, -0.006399f, +0.005489f, +0.003391f, + +0.000494f, +0.001889f, +0.004849f, +0.001263f, +0.004751f, -0.000140f, +0.006463f, -0.003695f, -0.004242f, +0.000069f, + -0.002891f, +0.001192f, -0.000808f, -0.000351f, -0.001341f, -0.001647f, +0.000502f, -0.002060f, +0.000948f, +0.002158f, + +0.000318f, +0.002442f, +0.000658f, +0.002110f, +0.002822f, +0.000639f + }, + { + -0.001419f, -0.072770f, +0.003517f, +0.038717f, -0.005287f, +0.000246f, +0.002637f, -0.002651f, +0.012991f, -0.013378f, + +0.006408f, -0.000847f, +0.000995f, -0.026727f, -0.122976f, +0.008373f, +0.000578f, +0.001824f, +0.007293f, +0.001555f, + -0.011369f, -0.009710f, +0.005276f, -0.023906f, +0.002699f, +0.007783f, +0.006611f, +0.007828f, -0.010346f, -0.005979f, + -0.011967f, -0.018709f, -0.007198f, -0.014862f, +0.008275f, +0.015745f, +0.015004f, +0.011455f, +0.002768f, -0.003643f, + +0.010152f, +0.001939f, -0.000102f, +0.004708f, +0.004888f, -0.002949f, -0.002646f, +0.007509f, -0.002899f, +0.005074f, + +0.002609f, +0.007099f, +0.005500f, -0.002485f, -0.002762f, +0.005405f, +0.002120f, +0.003419f, +0.004931f, +0.007644f, + -0.006314f, +0.009853f, -0.000135f, +0.001347f, +0.000143f, -0.015144f, +0.003090f, -0.001230f, +0.001094f, +0.001992f, + -0.002823f, +0.002122f, +0.001197f, -0.000622f, -0.000631f, -0.004019f, +0.000453f, -0.000681f, -0.001983f, -0.007985f, + +0.005341f, +0.006359f, -0.002518f, -0.000494f, +0.002177f, +0.002309f, +0.002020f, -0.000584f, -0.000074f, +0.004308f, + -0.000918f, -0.004921f, +0.001979f, +0.004480f, -0.003308f, +0.001316f + } + }, + { + { + +0.030267f, -0.250345f, -0.079482f, -0.061973f, -0.038731f, -0.002806f, +0.016336f, +0.006336f, -0.005335f, +0.015481f, + -0.018166f, +0.006682f, -0.002343f, +0.015870f, +0.003743f, -0.021447f, -0.022345f, -0.023698f, +0.021922f, +0.006867f, + +0.011625f, -0.007283f, +0.010491f, +0.013584f, +0.009698f, +0.004986f, -0.011363f, +0.005642f, +0.003156f, -0.012941f, + +0.014781f, +0.009737f, -0.009238f, +0.007154f, +0.009520f, -0.008696f, +0.010374f, -0.008233f, +0.010808f, -0.000948f, + -0.005463f, +0.007676f, +0.005190f, +0.002861f, +0.008840f, -0.000145f, -0.005924f, +0.010456f, +0.010774f, +0.013300f, + -0.001788f, -0.002170f, +0.000192f, +0.010501f, -0.001682f, +0.003355f, +0.013622f, -0.002141f, +0.000329f, +0.005655f, + -0.006014f, -0.009620f, +0.011183f, +0.001672f, +0.005084f, -0.002359f, -0.000056f, -0.000325f, -0.000449f, -0.002087f, + -0.003868f, -0.004695f, -0.002146f, -0.009265f, -0.000856f, +0.004081f, -0.000026f, -0.001520f, +0.000825f, +0.003278f, + -0.001849f, +0.001831f, -0.001613f, +0.003978f, +0.000653f, +0.002145f, +0.002485f, -0.003109f, +0.002313f, +0.001310f, + +0.001869f, -0.001624f, -0.000392f, +0.002191f, -0.002234f, +0.000092f + }, + { + -0.001383f, -0.092461f, +0.004667f, +0.026706f, -0.014142f, -0.008463f, -0.003404f, -0.011942f, -0.016078f, +0.000528f, + -0.017160f, +0.009143f, -0.009626f, +0.041929f, +0.023514f, +0.015236f, +0.025955f, +0.011794f, +0.010735f, -0.009926f, + +0.019210f, +0.007795f, -0.033993f, -0.028317f, +0.028489f, +0.002447f, -0.026246f, -0.004629f, -0.021764f, +0.005768f, + -0.003389f, -0.007210f, +0.005628f, -0.003005f, +0.000766f, -0.000592f, -0.009899f, +0.001600f, -0.000632f, -0.000699f, + +0.000927f, -0.013099f, -0.005479f, -0.001483f, +0.008827f, -0.011150f, +0.006590f, +0.003220f, -0.011334f, -0.003208f, + +0.000467f, +0.001170f, -0.002407f, +0.002026f, -0.010185f, +0.000938f, +0.011729f, -0.007069f, +0.001145f, -0.004362f, + -0.000211f, +0.003602f, -0.000776f, -0.005754f, -0.008542f, +0.005547f, +0.002307f, -0.006557f, -0.001828f, +0.003231f, + -0.002278f, -0.001268f, +0.004200f, +0.001007f, -0.001666f, -0.007205f, -0.004281f, -0.004164f, +0.001426f, +0.001295f, + -0.003560f, +0.004791f, -0.002390f, +0.001784f, +0.002282f, +0.000438f, -0.001896f, -0.001142f, +0.000029f, -0.001735f, + -0.003599f, +0.000877f, -0.000060f, +0.000378f, -0.001040f, -0.000126f + }, + { + +0.001182f, +0.224240f, +0.014517f, -0.010475f, +0.004071f, -0.006086f, +0.008015f, -0.014830f, +0.005353f, -0.011593f, + +0.001110f, +0.022512f, -0.005145f, +0.013197f, +0.006318f, +0.024747f, -0.018038f, -0.006579f, -0.017163f, +0.014729f, + -0.021308f, +0.006414f, -0.007096f, +0.016956f, +0.007563f, -0.010546f, +0.009674f, -0.006126f, +0.005624f, +0.004634f, + +0.002154f, -0.002818f, -0.005659f, -0.004974f, +0.002476f, +0.005510f, -0.009267f, +0.019420f, +0.006591f, +0.006160f, + -0.011192f, -0.013338f, +0.015297f, -0.003204f, +0.001000f, +0.007955f, +0.006872f, +0.001882f, -0.000579f, -0.002363f, + +0.013576f, -0.001068f, -0.007727f, +0.002641f, +0.000954f, -0.001234f, +0.006660f, -0.002307f, -0.003247f, -0.005742f, + +0.002551f, -0.005273f, -0.003081f, -0.007171f, +0.003850f, -0.000737f, -0.001812f, +0.000836f, +0.000061f, +0.001806f, + +0.000214f, -0.003239f, -0.002946f, -0.001562f, +0.005039f, +0.002930f, +0.000898f, -0.002614f, +0.003286f, -0.002744f, + +0.002161f, +0.000646f, +0.002484f, +0.000773f, -0.000803f, -0.001752f, +0.002410f, -0.000789f, +0.001615f, -0.001664f, + +0.002554f, +0.000557f, +0.001489f, -0.000382f, +0.002533f, +0.004006f + }, + { + -0.036016f, -0.017953f, +0.022607f, +0.037980f, -0.003028f, -0.009549f, -0.000733f, -0.002092f, +0.021381f, -0.018421f, + -0.007647f, -0.000823f, +0.004561f, -0.015234f, -0.009924f, +0.012302f, +0.015999f, -0.019837f, +0.021877f, +0.010630f, + -0.002432f, +0.015051f, +0.037461f, -0.017509f, +0.003648f, -0.018434f, +0.012803f, +0.001633f, +0.005287f, -0.023961f, + -0.002547f, +0.009936f, -0.010281f, +0.010000f, +0.007588f, +0.017235f, -0.015338f, -0.002298f, -0.007231f, +0.002039f, + -0.015743f, +0.001677f, +0.004761f, -0.000643f, -0.014869f, -0.004642f, -0.007700f, +0.002174f, -0.008352f, -0.000904f, + +0.019849f, +0.001230f, -0.001691f, -0.002692f, -0.004064f, -0.001135f, +0.001225f, -0.006532f, -0.004411f, +0.013298f, + -0.001204f, -0.003716f, +0.005249f, +0.008888f, -0.002255f, -0.003199f, +0.004161f, -0.002141f, -0.002307f, +0.004875f, + -0.001384f, -0.007305f, +0.004205f, -0.005030f, +0.000456f, -0.001140f, +0.001638f, +0.002604f, -0.001931f, +0.001420f, + +0.002411f, +0.001280f, +0.001517f, -0.001536f, -0.001405f, -0.001294f, +0.004062f, +0.001934f, +0.004172f, -0.001906f, + -0.001262f, +0.000569f, +0.001671f, +0.000892f, +0.000049f, +0.000733f + }, + { + +0.002018f, +0.051594f, +0.000878f, +0.015897f, -0.002201f, +0.002189f, +0.003929f, +0.000834f, +0.003655f, -0.004871f, + +0.011451f, -0.004935f, +0.009134f, -0.003645f, +0.033962f, +0.012838f, -0.005131f, -0.019350f, -0.014398f, +0.018474f, + +0.008165f, -0.002042f, +0.008419f, +0.026784f, +0.028090f, +0.030781f, -0.020611f, -0.027747f, -0.008509f, -0.014322f, + +0.036125f, +0.041071f, +0.023106f, -0.009076f, -0.014597f, +0.001500f, +0.002512f, +0.004764f, +0.013934f, +0.002649f, + +0.000441f, +0.002871f, -0.013101f, +0.002035f, -0.000873f, -0.008937f, -0.002834f, +0.002277f, -0.002967f, +0.003675f, + -0.003198f, -0.011499f, +0.000298f, +0.000003f, +0.005646f, -0.002212f, +0.004959f, -0.008306f, -0.007988f, -0.000897f, + +0.002725f, -0.005848f, -0.002331f, +0.000723f, +0.002126f, +0.011328f, +0.001568f, -0.014721f, -0.000417f, -0.004277f, + +0.001461f, +0.003719f, -0.006129f, +0.000878f, +0.003831f, -0.007027f, +0.001031f, +0.001512f, -0.003558f, -0.000141f, + +0.002790f, -0.006967f, -0.000877f, +0.000816f, -0.002703f, -0.000473f, +0.001510f, +0.000255f, -0.001925f, -0.000845f, + -0.001920f, -0.001939f, +0.000168f, -0.001019f, -0.000510f, -0.002689f + }, + { + -0.069078f, -0.005915f, +0.049828f, -0.092657f, -0.010643f, +0.000710f, +0.006378f, +0.001412f, +0.035882f, -0.034701f, + -0.023552f, -0.019896f, +0.019712f, +0.012051f, +0.011014f, +0.001941f, +0.008145f, +0.001027f, -0.012162f, -0.012024f, + +0.023335f, +0.006647f, -0.015432f, +0.025711f, +0.000629f, -0.009431f, -0.001324f, +0.024451f, +0.006988f, +0.005640f, + -0.015977f, -0.014247f, +0.000877f, -0.000287f, -0.005519f, +0.013421f, +0.001493f, -0.004995f, +0.009992f, +0.001283f, + -0.003121f, -0.009718f, +0.001342f, -0.017147f, +0.015220f, +0.002557f, +0.008965f, -0.002628f, -0.001767f, +0.008625f, + +0.002505f, +0.008029f, -0.002171f, -0.001292f, -0.005009f, +0.004273f, -0.000191f, -0.001036f, +0.001013f, -0.002935f, + -0.005633f, +0.002695f, -0.004532f, -0.001876f, -0.002235f, +0.000405f, -0.001676f, -0.000227f, -0.002314f, -0.002490f, + +0.002284f, +0.005772f, -0.003438f, +0.000178f, -0.001525f, +0.004804f, -0.000853f, -0.000702f, -0.003280f, -0.001256f, + -0.001985f, +0.000924f, +0.000051f, +0.002507f, -0.002128f, -0.002679f, +0.000018f, -0.000440f, -0.002938f, -0.002244f, + +0.001274f, +0.000604f, -0.000861f, -0.000614f, +0.001070f, -0.000120f + }, + { + -0.001133f, +0.020307f, -0.005801f, -0.002064f, -0.004145f, +0.000814f, +0.000631f, -0.004328f, -0.007864f, +0.001979f, + -0.008270f, -0.003124f, -0.000087f, +0.008701f, -0.030969f, -0.007430f, +0.013982f, +0.004555f, -0.017024f, -0.035896f, + -0.016892f, +0.004956f, +0.007806f, -0.014228f, +0.029119f, -0.031138f, -0.034149f, +0.020011f, +0.007821f, +0.006134f, + +0.020692f, -0.011758f, +0.007035f, +0.011316f, -0.007851f, +0.005958f, +0.006620f, +0.008939f, -0.008367f, +0.006732f, + +0.005571f, -0.009486f, +0.003427f, +0.009226f, +0.000002f, -0.002675f, -0.000940f, +0.000726f, +0.013169f, -0.007652f, + -0.000073f, +0.001505f, -0.004713f, +0.009899f, +0.001456f, +0.004182f, -0.007721f, -0.006025f, +0.001288f, +0.005704f, + -0.001221f, -0.004110f, -0.003017f, +0.004619f, -0.003583f, -0.005733f, +0.004723f, +0.001705f, -0.004420f, +0.001045f, + -0.001424f, -0.002989f, -0.001590f, -0.001317f, +0.001548f, +0.000586f, -0.000071f, +0.000151f, -0.000064f, -0.000931f, + +0.000811f, +0.000997f, +0.000851f, +0.001942f, -0.001225f, -0.001328f, +0.001525f, +0.000070f, +0.000447f, -0.003294f, + +0.001212f, -0.000305f, +0.001791f, +0.001086f, -0.000070f, -0.002534f + }, + { + +0.027895f, +0.525123f, +0.039485f, -0.114204f, +0.006994f, -0.034456f, -0.030817f, +0.019756f, -0.017083f, -0.004319f, + -0.018676f, -0.008318f, +0.019993f, +0.007104f, +0.023880f, -0.022507f, +0.012207f, -0.002350f, +0.006810f, +0.017832f, + -0.023468f, +0.007475f, +0.011119f, +0.003805f, -0.016678f, +0.009993f, -0.026038f, +0.020509f, +0.006405f, -0.005937f, + -0.011580f, -0.003649f, +0.001367f, +0.008394f, -0.011263f, -0.010417f, +0.001688f, -0.003649f, -0.007926f, +0.005916f, + -0.001310f, +0.013039f, +0.009546f, -0.002581f, +0.001860f, +0.005644f, +0.004055f, +0.000645f, +0.007070f, -0.005514f, + -0.002531f, +0.002999f, -0.006542f, +0.006699f, +0.012789f, -0.001071f, +0.000675f, +0.009007f, -0.007063f, -0.003036f, + +0.004284f, -0.000481f, -0.001594f, -0.001161f, -0.006406f, +0.006673f, +0.001162f, +0.000259f, +0.001634f, +0.004077f, + +0.000711f, -0.002911f, +0.004240f, -0.000076f, -0.004454f, -0.000188f, +0.009111f, -0.002761f, +0.000106f, +0.002441f, + -0.003720f, +0.000970f, +0.002167f, -0.001687f, +0.000515f, +0.005325f, -0.001024f, +0.000208f, +0.001550f, -0.002861f, + -0.001382f, -0.001431f, +0.003383f, -0.001754f, +0.001936f, -0.002217f + }, + { + +0.000439f, +0.011746f, -0.003967f, -0.006190f, +0.006088f, +0.000401f, +0.000500f, +0.008128f, -0.002909f, -0.002975f, + -0.001908f, +0.005182f, +0.000209f, -0.002061f, -0.010806f, +0.031097f, -0.001739f, +0.006864f, -0.007948f, -0.031510f, + +0.003901f, +0.013590f, +0.008809f, +0.020211f, -0.006628f, -0.018281f, +0.027798f, +0.001905f, +0.022931f, -0.011583f, + +0.001097f, +0.000166f, -0.022190f, -0.009885f, +0.000393f, -0.016179f, +0.000316f, +0.002910f, -0.011317f, -0.007920f, + +0.003825f, -0.010027f, +0.004932f, +0.003120f, -0.005364f, -0.007184f, +0.006289f, +0.002309f, -0.005106f, -0.000832f, + +0.011538f, +0.002453f, +0.008096f, +0.000659f, +0.003510f, +0.003048f, +0.006155f, +0.001593f, -0.000852f, +0.004018f, + -0.004928f, +0.008072f, +0.004827f, +0.006387f, +0.005604f, +0.001968f, -0.002207f, +0.004153f, -0.001997f, +0.004014f, + -0.000191f, -0.003851f, -0.003391f, +0.004589f, -0.001617f, -0.002898f, +0.002501f, +0.002406f, -0.001738f, -0.000575f, + +0.003318f, +0.003181f, -0.003857f, +0.000804f, +0.004827f, -0.002123f, +0.000623f, -0.002342f, -0.001035f, +0.000774f, + +0.004001f, +0.000313f, +0.000622f, -0.000387f, -0.002653f, +0.002541f + }, + { + -0.045090f, +0.042907f, +0.071196f, -0.024873f, +0.002054f, -0.008819f, +0.001851f, -0.004702f, -0.015218f, +0.026055f, + +0.012860f, +0.013687f, -0.003474f, +0.010840f, -0.006605f, -0.032726f, +0.016565f, +0.006873f, +0.013139f, +0.000617f, + +0.014669f, +0.026135f, +0.007328f, +0.004648f, +0.002794f, +0.011328f, +0.001283f, -0.003475f, -0.005733f, +0.001931f, + -0.004817f, -0.002412f, -0.013222f, +0.006418f, -0.009723f, +0.001374f, +0.002256f, -0.003103f, +0.003478f, +0.010974f, + +0.003302f, +0.019936f, +0.000462f, +0.004228f, +0.001465f, -0.006515f, -0.010210f, +0.006339f, +0.001309f, -0.003349f, + +0.005032f, +0.001917f, -0.006277f, -0.001806f, -0.002859f, +0.000002f, -0.001841f, -0.001760f, +0.008287f, +0.002247f, + -0.004528f, -0.003317f, +0.001118f, +0.000659f, +0.001026f, +0.008276f, -0.004251f, -0.006581f, +0.006850f, -0.006657f, + -0.011372f, -0.001970f, -0.001494f, -0.002083f, +0.003363f, +0.002207f, +0.000830f, -0.002993f, -0.000855f, -0.000839f, + +0.002253f, +0.003176f, +0.005672f, +0.001716f, -0.001753f, -0.002784f, +0.005724f, -0.000209f, -0.000915f, -0.001406f, + -0.001271f, -0.001698f, +0.000994f, +0.001350f, +0.003257f, -0.001479f + }, + { + -0.007490f, +0.017357f, +0.031756f, +0.005160f, -0.007107f, -0.015996f, +0.000028f, -0.017280f, -0.017396f, +0.002800f, + -0.019757f, -0.027154f, -0.004870f, -0.001155f, +0.043893f, -0.013403f, +0.008320f, -0.011429f, -0.009266f, -0.002678f, + +0.023466f, -0.016031f, +0.012273f, -0.005808f, -0.011944f, -0.003844f, -0.005298f, -0.008569f, -0.002857f, +0.002019f, + +0.009095f, -0.002892f, -0.000632f, -0.003804f, -0.002640f, -0.003249f, +0.001744f, -0.002379f, -0.010222f, -0.001030f, + -0.000169f, +0.002329f, +0.000212f, -0.004909f, +0.011633f, +0.004149f, -0.004176f, -0.010195f, +0.004921f, +0.007489f, + +0.000530f, -0.005669f, -0.006765f, +0.001559f, -0.001259f, -0.005959f, +0.003531f, -0.004544f, +0.001070f, +0.005223f, + -0.005339f, -0.000277f, -0.001113f, +0.002490f, -0.000780f, -0.002165f, -0.000643f, +0.004300f, -0.002871f, -0.000678f, + -0.000856f, -0.005533f, -0.005476f, +0.000015f, +0.001697f, -0.002172f, +0.001349f, -0.003055f, +0.006161f, -0.000158f, + -0.000042f, +0.000815f, -0.004958f, +0.002605f, -0.000638f, +0.001714f, -0.002789f, -0.002054f, -0.000784f, -0.000432f, + +0.002182f, -0.001434f, -0.002042f, +0.003219f, -0.001471f, -0.001363f + }, + { + -0.033546f, -0.160731f, -0.011525f, +0.017905f, +0.066193f, -0.020816f, -0.003322f, -0.019092f, +0.025569f, +0.030163f, + -0.010287f, -0.023501f, +0.029496f, +0.013918f, +0.013578f, +0.005741f, +0.027963f, -0.019657f, +0.000095f, -0.019072f, + +0.015658f, -0.006771f, -0.001423f, -0.027122f, +0.002460f, -0.001747f, +0.009529f, +0.002670f, +0.013521f, +0.000869f, + +0.007370f, +0.025469f, -0.000796f, +0.007583f, -0.004488f, -0.018185f, -0.016713f, +0.005374f, -0.006177f, -0.012946f, + -0.010007f, -0.008841f, +0.013909f, -0.015192f, -0.012230f, -0.009386f, +0.005492f, -0.008885f, +0.000910f, -0.012275f, + +0.006413f, -0.001259f, -0.002322f, -0.001362f, -0.008159f, -0.000558f, +0.004618f, -0.009039f, -0.001607f, +0.004246f, + +0.009227f, -0.005946f, +0.000479f, -0.008088f, -0.004780f, +0.002458f, -0.000330f, -0.000721f, -0.000592f, +0.002347f, + -0.000917f, +0.002382f, +0.000593f, +0.001201f, +0.003621f, +0.000771f, +0.002828f, -0.007462f, +0.001699f, +0.001377f, + -0.003007f, -0.003479f, -0.001595f, +0.003239f, -0.000274f, -0.003933f, +0.002371f, +0.000710f, +0.002083f, +0.001237f, + -0.000749f, -0.001288f, -0.001667f, +0.002817f, +0.000647f, -0.001521f + }, + { + +0.000890f, +0.076115f, -0.000201f, +0.018487f, -0.013649f, -0.016921f, -0.010973f, -0.006142f, +0.001409f, +0.013575f, + +0.013874f, +0.004521f, -0.025343f, +0.027554f, -0.031743f, +0.037721f, +0.001001f, -0.002241f, -0.030102f, -0.008561f, + +0.017242f, -0.021965f, +0.005011f, -0.009614f, -0.016672f, -0.008980f, +0.028350f, -0.008120f, -0.022373f, +0.012036f, + -0.038237f, +0.016471f, +0.000067f, -0.013214f, +0.003121f, -0.013587f, +0.005087f, -0.018304f, +0.006229f, -0.000864f, + -0.007473f, +0.000381f, +0.008197f, +0.001027f, +0.008536f, -0.004166f, -0.001600f, +0.004694f, +0.002625f, +0.009133f, + -0.007261f, +0.006170f, -0.009039f, -0.000231f, +0.006538f, +0.013825f, +0.004513f, +0.006894f, +0.003646f, -0.003975f, + -0.000099f, +0.012488f, -0.001396f, -0.001063f, +0.001961f, +0.004850f, +0.004469f, +0.002516f, +0.000761f, -0.007825f, + -0.002945f, -0.000253f, -0.004346f, +0.001570f, -0.002113f, -0.005561f, -0.002054f, +0.002887f, -0.004434f, +0.003696f, + -0.001052f, -0.004631f, -0.003999f, -0.002081f, +0.002048f, -0.000334f, +0.000319f, +0.003027f, +0.000901f, +0.001102f, + -0.003157f, -0.001181f, -0.000684f, -0.004966f, +0.002457f, +0.001253f + }, + { + -0.043754f, +0.011673f, +0.003930f, -0.015413f, +0.009471f, -0.029858f, +0.029451f, -0.019506f, +0.012171f, +0.013839f, + +0.011582f, +0.000662f, -0.004847f, +0.016303f, +0.059762f, -0.030473f, +0.025148f, +0.001263f, +0.021810f, -0.029932f, + -0.026265f, -0.004321f, -0.012972f, +0.029326f, +0.002332f, -0.013124f, +0.027482f, -0.013152f, -0.002220f, -0.015426f, + -0.000481f, -0.014377f, -0.000325f, +0.023363f, +0.000527f, +0.016003f, -0.019653f, -0.008448f, -0.007669f, +0.001668f, + +0.002642f, -0.009834f, -0.004901f, -0.012842f, -0.001802f, +0.003050f, -0.005627f, +0.010949f, -0.004662f, +0.022803f, + -0.010622f, +0.002032f, -0.003673f, -0.002866f, -0.007318f, -0.005662f, +0.005031f, +0.004309f, -0.010924f, -0.005480f, + -0.002259f, +0.002696f, +0.006404f, -0.005571f, +0.002917f, -0.002223f, +0.008719f, -0.007596f, +0.005192f, +0.003053f, + -0.000077f, -0.000700f, +0.000146f, +0.004490f, +0.008129f, -0.001375f, +0.002299f, -0.006716f, -0.006159f, -0.001884f, + -0.000978f, +0.002690f, -0.002267f, +0.002993f, +0.001424f, -0.000350f, -0.000307f, -0.001926f, -0.000218f, +0.000190f, + -0.001534f, +0.001849f, -0.000873f, -0.001800f, +0.002668f, +0.002563f + }, + { + +0.001183f, -0.099729f, -0.024336f, +0.020037f, -0.000438f, +0.000693f, -0.012798f, -0.001907f, +0.011109f, -0.016343f, + +0.001297f, +0.020671f, +0.014218f, +0.081884f, -0.003756f, +0.000540f, -0.008702f, +0.004595f, +0.029148f, -0.000195f, + -0.018407f, +0.002608f, +0.018608f, -0.010447f, +0.000268f, -0.003281f, -0.015761f, -0.024311f, -0.037925f, -0.005188f, + +0.015047f, +0.001641f, +0.005287f, -0.005470f, +0.000859f, -0.010550f, -0.008609f, -0.007463f, -0.007193f, -0.015592f, + -0.003621f, +0.006938f, +0.002698f, -0.005743f, -0.010284f, -0.003533f, +0.007533f, -0.008136f, -0.010991f, +0.013119f, + -0.007229f, -0.005511f, +0.001462f, -0.005384f, -0.005523f, +0.008812f, +0.003132f, +0.004030f, +0.006060f, +0.005233f, + -0.010031f, +0.007410f, -0.002717f, +0.002764f, +0.011362f, -0.007187f, +0.003996f, +0.001589f, +0.000129f, +0.003475f, + -0.001040f, +0.004592f, -0.000254f, -0.002308f, +0.002300f, -0.001361f, +0.005185f, +0.005044f, +0.004642f, -0.009621f, + -0.001976f, +0.001744f, -0.006443f, -0.002388f, +0.002213f, +0.001567f, -0.002560f, -0.000904f, +0.001483f, +0.004409f, + -0.001134f, -0.004552f, -0.000202f, +0.003635f, -0.002503f, +0.001960f + } + }, + { + { + -0.032955f, -0.385428f, +0.061318f, -0.085198f, -0.021268f, +0.000597f, -0.003775f, +0.028864f, -0.018004f, -0.017678f, + +0.017818f, +0.010489f, +0.003255f, +0.017963f, -0.014536f, -0.006766f, -0.012063f, -0.019914f, +0.006155f, +0.010225f, + -0.001229f, -0.003037f, +0.017277f, +0.010159f, +0.020390f, +0.004587f, -0.013287f, +0.001963f, -0.000144f, -0.008664f, + +0.007014f, -0.001985f, +0.018263f, -0.003289f, +0.008323f, -0.013112f, +0.004432f, -0.008602f, +0.014827f, +0.000849f, + +0.004349f, +0.005403f, +0.003819f, +0.000612f, +0.008202f, -0.006408f, +0.003093f, +0.005590f, +0.008494f, +0.005420f, + +0.011395f, -0.010220f, +0.002234f, +0.007772f, -0.003675f, +0.005169f, +0.010274f, +0.003428f, -0.001961f, +0.007734f, + -0.005755f, -0.004341f, +0.007037f, +0.005317f, -0.003320f, +0.002871f, -0.000760f, +0.002314f, -0.002464f, -0.003523f, + +0.000002f, -0.006612f, -0.004401f, -0.003620f, +0.000286f, +0.000820f, -0.001998f, +0.000553f, -0.001713f, +0.002895f, + -0.000187f, +0.004675f, -0.000983f, +0.003872f, +0.000528f, -0.000114f, +0.001170f, -0.000672f, -0.000985f, +0.003701f, + +0.003994f, -0.001527f, -0.000081f, +0.000292f, -0.000950f, -0.001578f + }, + { + +0.001267f, -0.040840f, -0.030678f, -0.006880f, +0.005743f, -0.004875f, -0.003092f, -0.011182f, -0.011508f, -0.020900f, + -0.015983f, +0.025247f, +0.001026f, +0.011114f, +0.041533f, +0.038498f, -0.007121f, +0.038921f, +0.006670f, -0.020867f, + +0.020447f, +0.002042f, -0.008555f, -0.023188f, -0.011289f, +0.031710f, -0.018185f, -0.022930f, -0.029367f, +0.007654f, + +0.008356f, -0.010120f, +0.008907f, -0.003543f, +0.002368f, -0.000107f, -0.008221f, -0.009984f, +0.004819f, +0.001399f, + -0.009693f, -0.014694f, -0.002513f, +0.001574f, +0.004426f, +0.007829f, -0.004087f, +0.005057f, -0.014260f, -0.004033f, + +0.002897f, -0.000889f, +0.004954f, -0.003010f, -0.004115f, -0.006559f, +0.008786f, +0.000007f, +0.001118f, -0.008488f, + +0.004308f, +0.002220f, +0.000293f, -0.007160f, -0.008033f, +0.008533f, -0.003947f, -0.004821f, -0.000985f, +0.001273f, + -0.001022f, +0.003200f, -0.001267f, +0.004991f, -0.005926f, -0.002011f, -0.005690f, -0.002428f, +0.001871f, -0.000539f, + -0.001236f, +0.001435f, -0.001068f, +0.002488f, -0.000217f, -0.000971f, +0.001638f, -0.001653f, -0.001832f, -0.002721f, + +0.001046f, -0.002263f, +0.000575f, -0.000837f, -0.000005f, +0.002065f + }, + { + -0.005274f, +0.216782f, +0.024387f, +0.027145f, -0.026478f, -0.004209f, +0.005637f, +0.005390f, -0.001526f, -0.023891f, + -0.013284f, +0.047086f, +0.009969f, -0.023612f, +0.019312f, +0.020638f, +0.000075f, -0.027878f, +0.006381f, +0.015045f, + -0.008801f, -0.009024f, -0.001215f, -0.000067f, +0.019017f, -0.012182f, -0.000501f, +0.003080f, -0.002672f, +0.013276f, + +0.005778f, -0.014049f, +0.007800f, +0.002314f, -0.001458f, -0.005577f, +0.006055f, +0.014336f, +0.014803f, +0.001490f, + -0.007104f, -0.011988f, +0.005505f, -0.003243f, -0.008186f, +0.010555f, +0.008220f, +0.011599f, -0.002629f, +0.006538f, + +0.006963f, -0.001710f, -0.000213f, -0.005335f, +0.003287f, +0.003470f, +0.005802f, -0.000697f, -0.005738f, -0.011200f, + +0.003289f, -0.001378f, -0.001490f, -0.002910f, -0.004654f, -0.000634f, -0.002466f, +0.000223f, +0.001856f, -0.001058f, + +0.003668f, -0.004110f, -0.003493f, +0.000016f, +0.003876f, +0.002865f, -0.001145f, +0.001688f, +0.002590f, -0.001597f, + +0.001186f, +0.001235f, +0.001250f, +0.002370f, -0.001924f, -0.000442f, -0.000052f, +0.000955f, +0.001811f, -0.001489f, + +0.003413f, +0.001599f, -0.001647f, +0.000422f, +0.002983f, +0.002171f + }, + { + +0.055885f, -0.121233f, -0.020854f, +0.026816f, +0.028967f, -0.009499f, -0.004099f, +0.006184f, -0.002006f, +0.007604f, + -0.003476f, -0.004163f, -0.001422f, -0.017662f, -0.000461f, +0.011189f, -0.015681f, +0.013905f, +0.025344f, -0.003753f, + -0.003425f, +0.018394f, +0.016624f, -0.011603f, -0.000287f, +0.010854f, -0.009544f, +0.001232f, -0.003066f, +0.002259f, + -0.021133f, +0.005982f, +0.001190f, +0.009056f, +0.001520f, +0.018676f, -0.009322f, -0.005291f, -0.005322f, +0.000826f, + +0.003492f, -0.008882f, +0.005474f, -0.003533f, -0.013147f, -0.013778f, +0.005612f, -0.008202f, -0.005545f, +0.002696f, + +0.012923f, +0.006305f, -0.008534f, +0.000486f, +0.000508f, -0.002680f, -0.000034f, -0.005522f, -0.002889f, +0.009645f, + +0.001295f, +0.000907f, +0.000590f, +0.004093f, -0.001204f, -0.001992f, +0.000015f, +0.005929f, -0.002363f, +0.001044f, + -0.000267f, -0.002459f, +0.001546f, -0.005281f, +0.000081f, +0.002192f, +0.000104f, -0.002796f, +0.000375f, +0.003104f, + +0.001692f, +0.000709f, +0.004104f, -0.000833f, -0.001414f, -0.000659f, +0.001489f, +0.003067f, +0.002922f, -0.001217f, + -0.000726f, +0.001970f, +0.000827f, -0.000366f, +0.001237f, +0.000774f + }, + { + -0.003275f, +0.032246f, +0.019740f, +0.012349f, -0.000524f, +0.000613f, +0.003208f, +0.006912f, -0.005444f, +0.001369f, + -0.000092f, +0.001246f, +0.008812f, +0.021122f, +0.023585f, +0.007231f, -0.028027f, -0.076139f, +0.091989f, -0.010470f, + +0.005913f, -0.007174f, +0.015509f, +0.022493f, +0.005382f, +0.030013f, -0.003796f, -0.036229f, -0.017341f, +0.013630f, + +0.018792f, +0.039756f, +0.025355f, -0.002682f, -0.001096f, -0.016805f, +0.015034f, +0.003977f, +0.003681f, +0.012929f, + +0.001731f, -0.003764f, -0.006358f, -0.001258f, -0.014601f, +0.006665f, -0.006024f, -0.002300f, +0.006549f, +0.001164f, + -0.004949f, -0.005428f, -0.007913f, +0.004984f, +0.002585f, +0.001308f, -0.007240f, +0.000088f, -0.008635f, -0.000484f, + +0.003007f, -0.005254f, +0.004606f, -0.003391f, +0.000552f, +0.009550f, +0.000210f, -0.007073f, -0.008663f, +0.000369f, + +0.001726f, +0.000822f, -0.001339f, +0.002319f, +0.003454f, -0.008749f, +0.003485f, -0.000191f, -0.002454f, -0.000594f, + +0.002075f, -0.002847f, +0.001187f, -0.003666f, -0.001846f, +0.000265f, +0.001397f, +0.001293f, -0.001696f, -0.000830f, + -0.004266f, -0.001558f, -0.000613f, -0.000543f, -0.001669f, -0.000298f + }, + { + +0.096260f, -0.170950f, -0.027963f, -0.085272f, +0.011361f, -0.000966f, -0.001295f, +0.022383f, +0.029759f, -0.042877f, + -0.017437f, -0.018659f, +0.038020f, -0.003985f, +0.005971f, +0.021253f, -0.007327f, +0.005957f, +0.004812f, -0.022177f, + +0.008139f, +0.012766f, -0.002770f, +0.000454f, +0.013852f, +0.000345f, -0.000140f, +0.022375f, -0.000703f, +0.006239f, + -0.009399f, -0.019992f, -0.007441f, +0.009873f, -0.010246f, +0.013243f, +0.004791f, +0.003940f, +0.007177f, -0.011160f, + -0.009015f, +0.001905f, -0.001451f, -0.007623f, +0.006159f, +0.006931f, +0.008634f, +0.000251f, -0.007042f, +0.008933f, + +0.001032f, +0.006425f, +0.004031f, -0.005000f, -0.007313f, +0.008058f, -0.002168f, -0.001924f, -0.002952f, +0.002197f, + -0.006441f, -0.001330f, -0.000009f, -0.003912f, +0.000120f, -0.002280f, +0.000181f, +0.001012f, -0.003332f, -0.002702f, + +0.004319f, +0.002586f, +0.001295f, -0.004630f, +0.001697f, +0.000410f, -0.000647f, +0.001191f, -0.002886f, -0.001655f, + -0.001692f, +0.002060f, +0.000801f, +0.000192f, -0.000217f, -0.003349f, +0.000785f, -0.002358f, +0.000763f, -0.002172f, + +0.000402f, -0.001005f, +0.000645f, -0.000264f, +0.000274f, -0.000441f + }, + { + +0.001721f, +0.008658f, -0.001528f, +0.000175f, -0.004203f, -0.001887f, -0.001019f, -0.001995f, -0.004046f, -0.004844f, + -0.006169f, -0.001343f, +0.002458f, -0.023701f, +0.007345f, +0.013695f, -0.014621f, +0.005324f, -0.010133f, -0.037779f, + -0.000738f, -0.008332f, +0.024952f, -0.011038f, -0.001553f, -0.006757f, -0.026298f, -0.003354f, +0.000513f, +0.002232f, + +0.030902f, -0.002919f, +0.007607f, +0.011195f, -0.006776f, +0.003248f, +0.009239f, +0.003975f, -0.013565f, +0.007729f, + +0.004151f, +0.001395f, +0.003630f, +0.006142f, -0.006091f, -0.000485f, +0.006170f, -0.003299f, +0.008657f, -0.003141f, + -0.002036f, +0.004178f, +0.001390f, +0.001399f, +0.003134f, +0.003187f, -0.006238f, -0.001112f, -0.001059f, -0.003292f, + -0.000420f, +0.001248f, -0.005743f, -0.000975f, +0.000076f, -0.003343f, +0.000093f, +0.003340f, -0.003306f, +0.002113f, + -0.001234f, -0.004427f, +0.000251f, -0.003755f, +0.002960f, +0.002313f, -0.003009f, +0.000066f, +0.001747f, -0.001102f, + -0.000447f, -0.002622f, +0.002772f, +0.002207f, -0.001119f, +0.000363f, +0.002138f, -0.000466f, -0.000575f, -0.000068f, + -0.000990f, -0.001121f, +0.000690f, +0.000831f, -0.001234f, -0.000419f + }, + { + +0.018023f, +0.633921f, -0.026242f, -0.111686f, -0.005583f, -0.011666f, -0.035808f, -0.010925f, -0.008948f, +0.011412f, + -0.019942f, +0.017682f, +0.016157f, -0.016154f, +0.013791f, +0.005205f, -0.011818f, +0.030649f, -0.020483f, +0.002638f, + +0.005806f, -0.018613f, +0.010100f, -0.007539f, -0.001896f, +0.001916f, -0.002618f, +0.007084f, +0.004322f, +0.007769f, + -0.013499f, +0.000550f, +0.001018f, -0.000120f, -0.000305f, -0.002472f, +0.007481f, -0.017317f, -0.013335f, +0.011347f, + -0.006599f, +0.019842f, -0.002442f, +0.012800f, -0.010931f, +0.018751f, +0.006606f, -0.002183f, -0.000433f, +0.001797f, + -0.005444f, +0.007037f, +0.007683f, -0.003960f, +0.006926f, -0.001389f, +0.001126f, +0.012358f, -0.010072f, -0.002197f, + +0.004695f, -0.003682f, -0.002064f, -0.001255f, +0.003669f, +0.001921f, +0.002571f, -0.004610f, +0.000474f, +0.006374f, + +0.000799f, -0.001173f, +0.003380f, -0.005480f, -0.001386f, +0.002568f, +0.003744f, +0.002580f, +0.000946f, -0.002607f, + -0.000787f, +0.003901f, +0.000568f, -0.001289f, +0.000853f, +0.000594f, +0.002000f, +0.001391f, -0.001876f, -0.000666f, + -0.000878f, -0.000878f, +0.001875f, -0.001325f, +0.001402f, -0.000527f + }, + { + +0.002505f, -0.003858f, +0.001327f, +0.007595f, -0.002320f, +0.002663f, +0.003628f, -0.003769f, +0.003829f, +0.007108f, + -0.010727f, +0.003178f, +0.000139f, -0.002487f, -0.001382f, -0.006474f, +0.014173f, +0.015095f, -0.001372f, -0.031353f, + +0.009613f, -0.000732f, -0.008037f, +0.033642f, -0.016181f, +0.015848f, -0.001900f, +0.016473f, +0.006709f, -0.011287f, + +0.022215f, -0.021243f, -0.020875f, -0.003419f, -0.004804f, -0.004079f, -0.001714f, -0.014949f, +0.012116f, -0.007359f, + -0.008779f, +0.000518f, -0.003556f, +0.004809f, -0.010982f, -0.000994f, -0.000733f, +0.001157f, +0.000139f, +0.006444f, + +0.001957f, -0.003289f, +0.003059f, +0.009392f, +0.011161f, -0.004162f, +0.008411f, -0.002621f, +0.007499f, -0.005769f, + +0.006311f, +0.003691f, +0.003845f, +0.003939f, +0.007123f, +0.004599f, -0.003999f, -0.000252f, -0.000328f, +0.004613f, + +0.000962f, -0.003898f, -0.001734f, +0.002736f, -0.003261f, +0.003272f, +0.000031f, +0.001631f, -0.000753f, -0.000836f, + +0.003967f, +0.000695f, -0.002327f, +0.002540f, +0.001622f, -0.001759f, -0.000517f, -0.000504f, -0.000481f, +0.001234f, + +0.001850f, +0.003765f, -0.001715f, -0.001192f, +0.001147f, +0.000552f + }, + { + +0.051956f, +0.018443f, -0.023013f, -0.028398f, -0.006302f, +0.037503f, -0.043143f, -0.033437f, -0.001861f, +0.016735f, + +0.018859f, +0.002339f, +0.006114f, +0.021149f, -0.009888f, -0.001350f, -0.005069f, +0.010796f, -0.000351f, +0.014411f, + +0.012346f, +0.028574f, +0.013216f, -0.002495f, +0.011002f, +0.009395f, +0.011529f, -0.024963f, +0.001146f, +0.008687f, + -0.023229f, -0.005366f, -0.000718f, -0.013915f, -0.000142f, +0.011303f, -0.012201f, -0.005983f, +0.005800f, +0.005995f, + +0.013640f, +0.018392f, +0.003309f, +0.006902f, -0.010008f, -0.002752f, -0.006101f, +0.005517f, -0.000436f, +0.003859f, + -0.000584f, -0.003692f, -0.001703f, +0.004755f, -0.005722f, +0.004594f, -0.009666f, +0.003632f, +0.005127f, -0.003157f, + +0.000362f, +0.000421f, -0.001906f, -0.000736f, +0.002640f, +0.007180f, -0.005149f, -0.002009f, +0.000370f, -0.006898f, + -0.004942f, -0.007960f, +0.000641f, -0.002853f, +0.003776f, +0.003083f, -0.000796f, +0.000888f, -0.002921f, +0.003191f, + +0.000211f, +0.003112f, +0.005503f, +0.000363f, -0.004535f, -0.000497f, +0.004586f, +0.000803f, -0.000571f, -0.002973f, + +0.000256f, -0.002515f, +0.002553f, +0.000967f, +0.001019f, +0.000865f + }, + { + +0.005156f, +0.052656f, -0.021161f, +0.017083f, -0.028034f, -0.007741f, -0.006139f, +0.001879f, -0.016413f, -0.014560f, + -0.024317f, -0.018078f, -0.023096f, +0.031070f, +0.007857f, -0.017923f, +0.031521f, -0.027370f, +0.017271f, +0.019836f, + -0.002567f, -0.013734f, +0.028442f, -0.020136f, -0.001885f, -0.014219f, -0.011746f, -0.011167f, +0.002654f, +0.004908f, + -0.001612f, +0.009096f, -0.001823f, -0.007359f, -0.002936f, +0.004344f, -0.001525f, -0.002294f, -0.011121f, -0.010337f, + +0.002226f, -0.000270f, -0.001192f, +0.009641f, -0.004348f, +0.005007f, +0.000654f, -0.008548f, +0.003876f, +0.007049f, + +0.000594f, -0.006406f, -0.004741f, +0.000930f, -0.004533f, -0.004131f, +0.004171f, -0.005732f, +0.005866f, +0.003632f, + -0.006482f, +0.001753f, -0.001757f, -0.002092f, -0.000866f, -0.000089f, -0.001766f, +0.001543f, +0.002333f, -0.003232f, + +0.001537f, -0.005505f, -0.003464f, -0.002249f, +0.000693f, +0.000807f, +0.000026f, -0.000090f, +0.003647f, +0.003848f, + -0.001978f, -0.000774f, -0.002878f, +0.001238f, +0.001464f, -0.001967f, -0.000915f, -0.000304f, -0.001236f, -0.000861f, + +0.001089f, -0.000343f, -0.000596f, +0.001525f, -0.001522f, +0.001042f + }, + { + -0.011099f, -0.212850f, +0.002362f, +0.034963f, +0.020819f, +0.033977f, -0.049289f, -0.005131f, +0.029513f, +0.010411f, + +0.019282f, -0.031223f, +0.037386f, +0.003170f, +0.014379f, -0.007149f, +0.006831f, +0.026566f, -0.027442f, -0.012647f, + +0.008352f, -0.012377f, -0.005973f, -0.015999f, -0.003059f, +0.012190f, -0.005849f, +0.016254f, +0.009644f, -0.006248f, + +0.010525f, +0.021898f, +0.010752f, -0.005351f, -0.003955f, -0.000265f, -0.024390f, +0.014423f, -0.027866f, -0.012621f, + -0.006770f, -0.004974f, -0.014990f, +0.009439f, -0.017529f, +0.000458f, +0.005210f, -0.012823f, -0.012380f, +0.006048f, + +0.003762f, -0.002426f, -0.010486f, +0.013083f, -0.014682f, +0.001639f, +0.000314f, -0.007300f, +0.000675f, +0.001100f, + +0.005360f, -0.003501f, +0.000326f, -0.010897f, -0.001172f, +0.002017f, -0.002989f, +0.000126f, +0.003422f, +0.004249f, + -0.001749f, -0.000806f, +0.002938f, +0.001341f, +0.002661f, +0.002133f, -0.000130f, -0.002961f, -0.002481f, -0.000593f, + -0.002062f, -0.004057f, -0.001334f, +0.003364f, +0.000022f, -0.002447f, +0.001137f, -0.000217f, +0.002001f, -0.001642f, + -0.000007f, +0.000835f, -0.002719f, +0.003519f, +0.001135f, +0.000198f + }, + { + -0.003569f, +0.072683f, +0.011752f, +0.014637f, -0.013239f, -0.012070f, -0.007541f, -0.006754f, -0.000309f, +0.013250f, + +0.002155f, +0.019523f, +0.001087f, +0.000956f, -0.061191f, +0.051701f, +0.008441f, -0.013205f, -0.022764f, -0.011292f, + +0.042790f, -0.018564f, -0.026402f, +0.016613f, -0.056795f, +0.007648f, +0.043565f, -0.014042f, -0.040266f, +0.000370f, + -0.009875f, +0.004821f, +0.004101f, -0.009637f, -0.000144f, -0.016138f, -0.011128f, +0.004740f, -0.009427f, -0.005598f, + -0.000312f, +0.009135f, +0.013732f, -0.010150f, +0.001250f, +0.007043f, -0.000173f, -0.002796f, +0.007841f, +0.002721f, + +0.004117f, -0.006580f, -0.006143f, +0.004521f, +0.002555f, +0.007925f, +0.006507f, +0.004244f, +0.004357f, +0.001410f, + +0.001030f, +0.003370f, -0.000424f, +0.000915f, +0.005336f, +0.000775f, +0.005440f, -0.002799f, -0.001821f, +0.000881f, + -0.002646f, -0.001869f, -0.003655f, -0.003332f, -0.003460f, -0.005529f, +0.003896f, -0.001681f, +0.000260f, +0.002312f, + +0.000661f, -0.005992f, -0.001561f, -0.005087f, +0.001143f, +0.001357f, -0.001965f, +0.004422f, +0.001121f, -0.001419f, + +0.000304f, -0.000595f, -0.004998f, +0.000330f, -0.002541f, +0.002708f + }, + { + +0.032924f, -0.108289f, +0.030183f, -0.016501f, -0.008445f, +0.021362f, -0.014022f, -0.017797f, -0.007686f, +0.033555f, + -0.015302f, -0.004810f, +0.015518f, +0.014284f, +0.054385f, +0.000096f, +0.013359f, -0.013976f, +0.010824f, -0.008197f, + -0.022984f, -0.011956f, -0.012152f, +0.019100f, +0.002486f, -0.002699f, +0.017226f, -0.013573f, -0.000429f, -0.008010f, + -0.004320f, -0.012837f, +0.008176f, +0.008373f, +0.016388f, +0.009662f, -0.012347f, -0.024062f, +0.009195f, -0.015805f, + +0.010238f, -0.005638f, -0.008890f, -0.002505f, -0.010561f, -0.000904f, +0.000709f, +0.012889f, +0.002948f, +0.000190f, + +0.003971f, +0.005344f, -0.016474f, +0.002423f, -0.009055f, +0.005301f, -0.002252f, +0.000607f, -0.007092f, -0.008791f, + +0.001033f, +0.005051f, -0.003843f, +0.001845f, -0.001320f, +0.002535f, -0.000173f, -0.001859f, -0.002508f, +0.003625f, + +0.003403f, +0.000692f, -0.001808f, +0.004619f, +0.003696f, +0.001458f, -0.005104f, -0.001429f, -0.003824f, -0.002663f, + -0.000867f, +0.003361f, -0.000535f, +0.002052f, -0.000117f, +0.001958f, -0.005088f, +0.001486f, +0.000388f, -0.001656f, + -0.000179f, +0.001500f, -0.000197f, -0.003135f, +0.002232f, +0.002172f + }, + { + -0.001229f, -0.116353f, -0.009447f, +0.011987f, +0.000065f, -0.002468f, -0.016378f, +0.007616f, -0.014156f, +0.013628f, + -0.015270f, +0.030260f, +0.003632f, +0.002344f, +0.108295f, +0.029637f, -0.010245f, -0.019538f, +0.006831f, +0.026687f, + -0.012659f, -0.013751f, +0.024303f, -0.017081f, +0.012529f, -0.004175f, -0.017037f, -0.035774f, -0.033732f, -0.013657f, + +0.017156f, -0.001631f, +0.018480f, -0.013004f, -0.001772f, -0.006999f, -0.021572f, -0.005404f, -0.007484f, +0.002767f, + -0.012445f, -0.013279f, +0.014169f, -0.002109f, -0.018485f, -0.003872f, +0.008307f, -0.006116f, -0.005092f, +0.012073f, + -0.010634f, -0.006720f, -0.000271f, +0.000157f, -0.008268f, +0.004652f, +0.003420f, +0.003989f, -0.001285f, +0.002622f, + +0.003619f, +0.003161f, -0.003624f, +0.004470f, +0.007247f, +0.005294f, -0.005198f, +0.000267f, -0.002405f, +0.006996f, + +0.001598f, -0.003344f, +0.005496f, -0.005538f, +0.002462f, +0.002695f, +0.002028f, +0.003259f, +0.001063f, -0.003078f, + -0.000220f, -0.005369f, -0.001786f, -0.001928f, +0.002737f, -0.001042f, -0.001066f, -0.000061f, +0.000063f, +0.002455f, + +0.000675f, -0.001008f, -0.002261f, -0.000650f, -0.000792f, +0.002264f + } + }, + { + { + +0.034785f, -0.411669f, -0.048043f, -0.071052f, -0.004066f, -0.010813f, -0.005819f, +0.018226f, -0.034854f, -0.025564f, + +0.002220f, +0.014767f, -0.004543f, +0.007869f, -0.010034f, +0.003300f, +0.011210f, -0.000874f, +0.007211f, -0.001749f, + -0.022683f, -0.008788f, +0.009064f, +0.003528f, +0.018164f, -0.000419f, -0.005182f, +0.011555f, -0.002720f, -0.009322f, + -0.001750f, -0.009508f, +0.011250f, -0.018684f, -0.000987f, -0.002452f, +0.003924f, -0.006085f, +0.012819f, -0.002272f, + +0.004725f, +0.005397f, -0.000623f, -0.009970f, +0.000822f, -0.007647f, +0.010033f, -0.000071f, +0.005577f, -0.007286f, + +0.000693f, -0.015233f, -0.007614f, -0.002114f, -0.003198f, +0.004099f, +0.003779f, +0.000557f, +0.000095f, +0.010357f, + -0.001046f, -0.000619f, -0.000554f, +0.000948f, -0.004153f, +0.006517f, +0.001787f, +0.003859f, -0.003291f, -0.004603f, + +0.001222f, -0.002444f, -0.000271f, +0.003897f, +0.002857f, +0.000866f, -0.004840f, -0.002097f, +0.000536f, +0.003207f, + -0.001316f, +0.003577f, -0.000885f, +0.002590f, -0.000724f, -0.001439f, +0.000588f, +0.000831f, +0.001375f, +0.004320f, + +0.002853f, -0.001915f, -0.000488f, -0.000852f, +0.000433f, -0.000428f + }, + { + -0.001293f, +0.039184f, +0.033845f, -0.023080f, -0.001203f, +0.002494f, +0.002470f, +0.003664f, +0.006774f, +0.000528f, + -0.002734f, +0.014951f, -0.004755f, -0.024213f, +0.011222f, +0.011645f, -0.049156f, +0.038523f, -0.004897f, -0.036733f, + +0.020967f, -0.003999f, +0.000193f, +0.000885f, -0.014571f, +0.030496f, +0.006874f, -0.001203f, -0.006070f, +0.010909f, + +0.009568f, -0.005017f, -0.001563f, -0.010868f, +0.000822f, +0.000695f, -0.001171f, -0.010094f, -0.008291f, +0.003749f, + -0.002978f, -0.011433f, -0.001170f, +0.000764f, +0.000780f, +0.005414f, -0.005465f, +0.011287f, +0.000536f, +0.004727f, + -0.004843f, -0.002845f, +0.011654f, -0.001390f, +0.002173f, -0.002665f, +0.001006f, -0.001602f, +0.001947f, -0.002830f, + +0.004997f, -0.001189f, +0.007149f, +0.005784f, +0.001965f, +0.006399f, -0.009858f, -0.006075f, +0.000689f, +0.002675f, + +0.002574f, +0.006824f, -0.000904f, +0.002302f, -0.004802f, +0.000604f, -0.001453f, +0.001574f, +0.002651f, -0.000946f, + -0.001675f, -0.000021f, -0.001234f, -0.000380f, -0.001375f, +0.000258f, +0.002995f, -0.002174f, -0.001890f, -0.000501f, + +0.003905f, -0.002183f, +0.000707f, +0.000417f, +0.000056f, +0.003048f + }, + { + +0.007699f, +0.135897f, -0.055987f, +0.033564f, +0.008070f, +0.007987f, +0.000232f, +0.017649f, +0.016668f, +0.008725f, + -0.015682f, +0.024810f, -0.023390f, -0.050247f, +0.016096f, +0.019654f, +0.011281f, -0.011224f, +0.005452f, +0.009495f, + -0.007045f, +0.000154f, +0.022755f, +0.010446f, +0.018267f, -0.003697f, +0.016266f, +0.010157f, -0.014198f, +0.000988f, + +0.006283f, -0.004817f, +0.024579f, -0.003454f, -0.012686f, -0.007672f, +0.011828f, +0.005514f, -0.007737f, +0.002452f, + +0.002608f, -0.008904f, +0.003757f, +0.009641f, +0.009093f, +0.015652f, +0.003466f, +0.015100f, -0.002967f, +0.000514f, + +0.004683f, -0.002866f, -0.002103f, -0.000580f, +0.009962f, +0.001190f, -0.000600f, -0.003229f, -0.002579f, -0.009529f, + +0.000384f, -0.003536f, -0.002508f, -0.002156f, -0.005764f, -0.000745f, -0.006269f, -0.005266f, +0.000927f, +0.001595f, + +0.005977f, -0.000161f, -0.003903f, -0.004407f, -0.000824f, +0.002710f, -0.001065f, +0.001518f, +0.002798f, -0.000194f, + +0.001100f, +0.000927f, -0.000619f, +0.002081f, +0.000006f, +0.001621f, -0.001493f, +0.001301f, +0.003944f, -0.000506f, + +0.000375f, -0.000139f, -0.002778f, -0.001512f, +0.000901f, -0.000254f + }, + { + -0.058877f, -0.266754f, +0.013659f, +0.007192f, -0.016488f, -0.002834f, -0.003073f, -0.007451f, -0.009730f, +0.030302f, + +0.022208f, +0.014122f, -0.003134f, -0.004552f, +0.003938f, +0.003301f, -0.014594f, +0.033658f, +0.010905f, -0.019931f, + -0.003977f, +0.012135f, +0.006173f, -0.014937f, -0.000881f, +0.012679f, -0.021616f, +0.004482f, +0.002045f, +0.014634f, + -0.005495f, +0.004638f, -0.003402f, +0.000526f, -0.009682f, +0.011468f, -0.003823f, -0.008275f, -0.014323f, +0.006273f, + +0.019618f, -0.002659f, +0.005495f, -0.004030f, -0.003796f, -0.002649f, +0.015312f, -0.004529f, -0.002502f, +0.007516f, + +0.000676f, +0.005374f, -0.002651f, -0.002214f, -0.003674f, +0.002034f, +0.005708f, -0.002771f, -0.006190f, +0.004416f, + +0.000938f, +0.000616f, -0.004850f, -0.003408f, -0.000281f, -0.000570f, -0.000929f, +0.006157f, -0.001826f, +0.003144f, + +0.003189f, -0.000510f, +0.001813f, +0.000138f, -0.000154f, +0.000022f, -0.000743f, -0.002785f, +0.002102f, +0.005415f, + +0.001261f, -0.001142f, +0.001840f, -0.000292f, +0.000301f, -0.001733f, -0.002314f, +0.000039f, +0.001215f, -0.000360f, + +0.001079f, +0.004013f, +0.001621f, -0.001532f, -0.000671f, -0.001315f + }, + { + +0.003979f, +0.007773f, -0.011999f, +0.001830f, -0.002923f, -0.000717f, -0.002854f, +0.001927f, -0.007204f, -0.000662f, + +0.002563f, +0.012974f, +0.024198f, +0.026366f, -0.014580f, -0.031638f, -0.023689f, -0.011094f, +0.116810f, -0.040100f, + -0.026321f, -0.018644f, +0.017582f, +0.003961f, -0.017723f, +0.008276f, +0.003244f, -0.023939f, -0.019767f, +0.015274f, + -0.000055f, +0.013827f, +0.014385f, +0.003272f, +0.001255f, -0.016321f, +0.022532f, -0.000400f, -0.012905f, +0.005230f, + +0.000245f, +0.000863f, +0.003055f, -0.006377f, -0.021759f, +0.018589f, +0.008106f, -0.000510f, +0.009264f, -0.001297f, + -0.007813f, +0.000705f, -0.001987f, +0.002012f, -0.016000f, -0.003275f, -0.001996f, +0.000372f, +0.004254f, +0.009952f, + +0.002688f, -0.003453f, +0.001386f, -0.008523f, -0.002697f, +0.004441f, +0.000805f, +0.001206f, -0.006290f, +0.001173f, + +0.004887f, +0.004249f, +0.001963f, +0.000810f, +0.000204f, -0.004990f, +0.006743f, +0.000727f, -0.000171f, +0.003112f, + +0.006191f, +0.001550f, +0.002526f, -0.005204f, -0.002105f, +0.001707f, +0.003820f, +0.002092f, -0.000657f, -0.001305f, + -0.002839f, +0.000990f, +0.000468f, -0.000726f, -0.002974f, -0.000136f + }, + { + -0.097957f, -0.401080f, +0.019526f, -0.072362f, -0.005722f, +0.003428f, -0.012562f, -0.007211f, +0.021261f, -0.007603f, + +0.027713f, -0.011745f, +0.012201f, -0.008775f, +0.015873f, +0.032750f, -0.003393f, +0.011050f, +0.015769f, -0.021288f, + +0.012196f, +0.020865f, +0.002499f, -0.006816f, +0.000671f, +0.005528f, -0.005459f, +0.007744f, +0.004307f, +0.007159f, + -0.010696f, -0.017727f, -0.018041f, +0.004400f, -0.009728f, +0.003215f, +0.011284f, +0.013230f, +0.001689f, -0.009888f, + -0.001339f, +0.001778f, -0.011285f, -0.014767f, -0.007911f, -0.001298f, -0.001266f, -0.006422f, -0.009305f, -0.001541f, + -0.005102f, +0.005548f, +0.006761f, -0.002319f, -0.002685f, +0.001547f, -0.002443f, +0.002081f, -0.008278f, +0.000670f, + +0.003098f, -0.002444f, -0.001347f, -0.000103f, +0.001201f, -0.001501f, +0.001924f, +0.000339f, -0.002033f, -0.000199f, + +0.003473f, +0.000944f, +0.003180f, -0.004349f, +0.000732f, -0.002863f, -0.001250f, +0.000745f, -0.002574f, +0.000015f, + -0.001505f, +0.002113f, +0.000250f, -0.000887f, +0.000710f, -0.001408f, +0.002321f, +0.001215f, +0.003953f, -0.001081f, + +0.000381f, -0.002860f, -0.000567f, -0.000148f, -0.000723f, -0.001994f + }, + { + +0.000466f, +0.007609f, +0.006585f, -0.001491f, -0.003936f, -0.001401f, +0.000428f, -0.001666f, -0.001953f, +0.001979f, + +0.006658f, +0.003031f, +0.009586f, +0.009072f, +0.032523f, -0.013270f, -0.018076f, +0.022359f, +0.005929f, -0.017369f, + +0.025000f, +0.007259f, +0.020606f, -0.016630f, +0.020423f, +0.029491f, -0.000029f, -0.010769f, +0.015392f, +0.009119f, + -0.016490f, -0.016986f, +0.026344f, +0.025965f, -0.008674f, -0.017868f, -0.008609f, -0.010395f, -0.021875f, +0.007033f, + -0.001287f, -0.004843f, -0.006768f, -0.003406f, -0.007182f, -0.000057f, +0.003172f, -0.012072f, +0.007756f, -0.000894f, + +0.004415f, +0.009260f, -0.004924f, -0.001939f, +0.006942f, -0.000259f, -0.001022f, +0.004682f, -0.001514f, -0.005875f, + -0.001406f, +0.006389f, -0.005842f, -0.005635f, +0.000790f, +0.001917f, -0.000816f, +0.004934f, -0.001457f, -0.001276f, + +0.000347f, +0.000741f, +0.002184f, -0.001447f, +0.000947f, +0.000779f, +0.001301f, +0.002367f, +0.001245f, +0.000785f, + +0.000911f, -0.004669f, +0.000117f, +0.000102f, -0.000410f, +0.001779f, +0.001118f, -0.000742f, +0.000723f, -0.000222f, + -0.002409f, -0.004254f, -0.002153f, +0.000122f, -0.002381f, +0.000564f + }, + { + -0.072515f, +0.596569f, +0.025947f, -0.069445f, +0.025489f, -0.008953f, -0.025128f, -0.004660f, -0.003404f, +0.030305f, + -0.009581f, +0.002189f, +0.001874f, -0.034434f, +0.012993f, +0.025900f, -0.012674f, +0.039040f, -0.037145f, -0.018999f, + +0.007883f, -0.013913f, +0.013027f, -0.002879f, -0.001013f, +0.001372f, +0.004972f, +0.009126f, +0.008791f, +0.019539f, + +0.008864f, +0.010149f, -0.002993f, +0.004134f, +0.006864f, +0.023985f, +0.017573f, -0.010622f, -0.006059f, +0.009405f, + -0.004461f, +0.012520f, -0.002483f, +0.018114f, +0.001689f, +0.018918f, +0.004025f, -0.004422f, -0.007119f, +0.000785f, + +0.002772f, +0.013707f, +0.004151f, -0.014921f, -0.000276f, -0.003990f, -0.000920f, +0.013972f, -0.005301f, -0.000748f, + +0.000729f, +0.001851f, +0.003848f, +0.000253f, +0.005764f, -0.001289f, +0.001725f, -0.002784f, +0.001323f, +0.002724f, + -0.003212f, -0.000574f, +0.003253f, -0.004442f, +0.003442f, +0.001472f, +0.000625f, +0.003271f, +0.001136f, -0.001624f, + -0.001424f, +0.001716f, +0.000298f, +0.000154f, +0.000474f, -0.002412f, -0.000286f, +0.001576f, -0.002363f, -0.000835f, + -0.000233f, +0.001028f, +0.001131f, -0.002289f, +0.000415f, +0.000449f + }, + { + -0.000204f, -0.017212f, +0.000793f, +0.007960f, -0.005617f, +0.000641f, -0.000293f, -0.004302f, +0.007590f, +0.003527f, + -0.008787f, +0.013626f, -0.014980f, +0.007595f, +0.030818f, -0.047245f, -0.022460f, -0.009840f, -0.009901f, -0.010417f, + -0.010738f, -0.034700f, -0.040831f, +0.041559f, +0.026445f, +0.031560f, +0.008579f, +0.012615f, +0.004740f, +0.001666f, + +0.021021f, -0.029466f, -0.018331f, +0.005577f, +0.004082f, +0.006172f, +0.002001f, -0.009007f, +0.020873f, -0.006612f, + -0.007470f, +0.006058f, -0.003542f, +0.000304f, -0.007591f, -0.002592f, -0.005793f, +0.006840f, +0.006624f, +0.003912f, + -0.005288f, -0.007691f, -0.001413f, +0.007885f, +0.010512f, -0.001106f, +0.006672f, -0.003877f, +0.005112f, -0.009716f, + +0.007086f, -0.001545f, -0.007034f, +0.000026f, +0.005363f, +0.004881f, -0.001381f, -0.002037f, -0.001507f, +0.001586f, + +0.001668f, -0.001048f, -0.003573f, +0.003512f, +0.001687f, +0.004963f, -0.003719f, -0.000067f, -0.002312f, -0.004009f, + +0.002514f, -0.001541f, -0.002849f, +0.000646f, +0.000042f, -0.001205f, -0.000008f, +0.001165f, -0.000520f, -0.000673f, + -0.001020f, +0.002573f, -0.001217f, +0.000262f, +0.002526f, +0.000448f + }, + { + -0.057835f, -0.034718f, +0.043570f, -0.023371f, -0.000680f, +0.062572f, -0.037908f, -0.041711f, -0.022169f, -0.022024f, + -0.004249f, -0.005590f, +0.009538f, +0.021694f, +0.001228f, +0.023930f, +0.020965f, +0.028952f, +0.009755f, +0.025065f, + +0.008384f, +0.002273f, -0.014236f, -0.020876f, +0.007363f, +0.004391f, -0.000870f, -0.024444f, -0.004137f, -0.005359f, + -0.025063f, -0.002917f, -0.004000f, -0.014557f, -0.002765f, +0.005990f, -0.004949f, +0.011344f, +0.008806f, -0.004114f, + +0.005755f, +0.010762f, -0.004571f, +0.004040f, -0.006901f, -0.002414f, -0.003377f, +0.010123f, +0.001901f, +0.002497f, + -0.005537f, -0.005656f, +0.003999f, +0.008961f, -0.004025f, +0.008057f, -0.008615f, -0.000352f, +0.001662f, -0.002600f, + +0.008745f, +0.007726f, +0.002863f, +0.000060f, -0.000616f, +0.004965f, -0.003001f, +0.001170f, +0.000631f, -0.001656f, + +0.005877f, -0.004800f, -0.000007f, -0.002515f, +0.004242f, +0.002881f, -0.002913f, +0.003823f, +0.000994f, +0.001578f, + -0.001846f, +0.001580f, +0.002609f, -0.000463f, -0.001791f, +0.000554f, +0.000544f, -0.001739f, +0.001190f, -0.002086f, + +0.002469f, -0.000522f, +0.000911f, +0.000143f, +0.000654f, -0.000149f + }, + { + -0.003110f, +0.093411f, -0.009615f, -0.005521f, -0.025424f, -0.001179f, -0.015762f, +0.004470f, -0.013559f, -0.011932f, + -0.008876f, -0.010073f, -0.021996f, +0.020425f, -0.023243f, -0.034277f, +0.026666f, -0.029870f, +0.040146f, +0.044435f, + -0.002001f, -0.026367f, +0.027399f, -0.028136f, -0.000460f, +0.004721f, -0.005306f, -0.010034f, +0.012338f, +0.014467f, + -0.014406f, -0.002411f, -0.005087f, +0.001029f, +0.012901f, +0.017652f, -0.007048f, -0.012631f, -0.011188f, -0.007668f, + +0.009264f, +0.003377f, -0.009664f, +0.004068f, -0.017950f, -0.000104f, +0.007525f, +0.002615f, +0.009140f, +0.005608f, + +0.001491f, -0.009041f, -0.003886f, +0.008571f, +0.005676f, +0.002823f, +0.003675f, -0.007173f, +0.006407f, +0.004116f, + -0.003383f, -0.002068f, -0.001722f, -0.002463f, -0.003070f, -0.000678f, -0.006077f, -0.003745f, +0.001571f, -0.002043f, + +0.006263f, +0.000196f, +0.001345f, +0.000267f, +0.002086f, +0.001097f, +0.003530f, +0.002480f, -0.000476f, +0.002446f, + -0.003085f, +0.000427f, +0.001598f, -0.000236f, +0.002205f, +0.000396f, +0.001596f, +0.002216f, +0.001865f, +0.001064f, + +0.000390f, -0.002191f, +0.000146f, +0.002194f, -0.002345f, +0.001653f + }, + { + +0.059475f, -0.123507f, -0.023820f, +0.011616f, -0.002404f, +0.043116f, -0.011360f, -0.018106f, -0.013553f, +0.009126f, + +0.053924f, -0.005397f, +0.034502f, -0.024910f, -0.017109f, -0.014243f, -0.005824f, +0.026454f, -0.032274f, -0.028472f, + +0.003038f, +0.005600f, +0.009206f, -0.015857f, -0.016476f, -0.002183f, -0.023039f, +0.006396f, -0.001950f, -0.033417f, + -0.004710f, +0.019935f, +0.003722f, -0.010986f, +0.005192f, +0.023179f, -0.017782f, +0.021960f, -0.011109f, -0.008585f, + -0.000975f, -0.005872f, -0.025796f, +0.015190f, -0.005582f, +0.005615f, +0.000886f, -0.004792f, -0.006858f, +0.004199f, + -0.000538f, +0.002781f, -0.010588f, +0.008980f, -0.005268f, +0.007055f, -0.001657f, -0.001103f, +0.002374f, -0.003614f, + -0.003755f, -0.004907f, +0.001211f, -0.005219f, +0.004036f, -0.000133f, -0.002754f, -0.000160f, +0.003976f, +0.006217f, + +0.001933f, +0.001630f, +0.000549f, -0.000195f, +0.000222f, +0.000347f, -0.000689f, -0.002173f, -0.003831f, -0.001292f, + +0.003146f, -0.001275f, -0.002956f, +0.000723f, -0.001230f, -0.000274f, -0.000222f, -0.001728f, +0.001017f, -0.002511f, + +0.002041f, +0.001635f, -0.001220f, +0.002588f, -0.000573f, +0.000720f + }, + { + +0.005524f, +0.063126f, -0.008834f, +0.006740f, -0.008531f, -0.001339f, -0.004167f, -0.002037f, -0.001597f, +0.001697f, + -0.006916f, +0.006410f, -0.005950f, -0.015378f, -0.091573f, +0.010342f, -0.027504f, -0.005887f, -0.004863f, -0.016601f, + +0.018551f, +0.053136f, +0.021345f, +0.021232f, -0.025779f, -0.002039f, +0.016523f, -0.011786f, -0.031498f, -0.001396f, + +0.016250f, +0.000385f, +0.000880f, -0.001362f, -0.001281f, -0.014773f, -0.027119f, +0.006725f, -0.003237f, -0.002042f, + +0.008129f, +0.007876f, +0.006028f, -0.022180f, -0.011171f, +0.000404f, -0.006301f, -0.007841f, +0.009277f, +0.002162f, + +0.010037f, -0.007461f, -0.011771f, -0.005721f, -0.004230f, +0.000989f, -0.000969f, +0.000033f, -0.001014f, -0.006580f, + -0.006150f, +0.004750f, -0.000945f, -0.002871f, +0.004559f, -0.004419f, -0.004079f, -0.005650f, +0.000336f, +0.000721f, + -0.000835f, -0.001756f, -0.002027f, -0.002697f, -0.000960f, -0.001188f, +0.006269f, -0.000091f, +0.002989f, +0.001186f, + +0.000686f, -0.000526f, +0.002657f, -0.004156f, +0.001152f, +0.001025f, -0.001310f, +0.003247f, +0.000337f, +0.000925f, + +0.001298f, +0.000274f, -0.004402f, +0.000505f, -0.003932f, +0.000350f + }, + { + -0.003571f, -0.164858f, +0.016401f, -0.022974f, -0.017958f, +0.021946f, -0.021610f, -0.009809f, -0.010155f, +0.001963f, + -0.018275f, -0.002938f, +0.019488f, -0.006977f, +0.006131f, -0.002795f, +0.000249f, -0.030284f, +0.003154f, +0.027671f, + +0.015202f, +0.011324f, -0.010826f, +0.006885f, +0.007566f, +0.004901f, +0.001812f, -0.023035f, -0.005449f, -0.006892f, + -0.005038f, -0.016119f, -0.009830f, -0.012103f, +0.015117f, +0.016876f, +0.003376f, -0.011479f, +0.015911f, -0.013574f, + +0.017643f, +0.018160f, +0.004360f, -0.007991f, -0.008141f, +0.001369f, +0.001200f, +0.006548f, -0.007924f, -0.014117f, + -0.000616f, +0.008998f, -0.010099f, +0.002033f, -0.006839f, +0.007774f, -0.004766f, +0.005381f, +0.004724f, -0.005042f, + -0.001698f, +0.004013f, -0.008315f, +0.003127f, -0.000198f, -0.002778f, -0.005264f, -0.002538f, -0.006938f, +0.002863f, + +0.005044f, +0.003017f, -0.000427f, -0.002854f, -0.009234f, -0.004094f, -0.002882f, +0.005447f, +0.001373f, +0.000499f, + +0.003007f, +0.003682f, -0.002091f, +0.000801f, +0.001142f, +0.001347f, -0.007057f, +0.001558f, +0.002664f, -0.001415f, + +0.000568f, +0.001894f, -0.000265f, -0.002112f, +0.000216f, +0.000395f + }, + { + -0.000373f, -0.112908f, -0.002404f, +0.000624f, -0.016536f, +0.001305f, -0.007131f, +0.004081f, -0.021309f, +0.010816f, + -0.020714f, +0.021344f, +0.009835f, -0.019338f, +0.066981f, +0.023916f, -0.032394f, -0.034077f, -0.004129f, +0.022643f, + +0.010299f, -0.012085f, +0.006255f, -0.021281f, +0.008668f, -0.013184f, -0.010839f, -0.017714f, -0.012799f, -0.022033f, + -0.006802f, -0.016686f, +0.014994f, -0.012108f, -0.004545f, +0.005877f, -0.005585f, -0.006098f, -0.000748f, +0.027171f, + -0.000730f, -0.018381f, +0.012030f, +0.001664f, -0.005985f, -0.005400f, -0.008495f, -0.010080f, +0.004610f, +0.016847f, + -0.003837f, -0.003895f, +0.001980f, +0.008444f, +0.001217f, +0.007748f, -0.000652f, -0.004964f, -0.006970f, -0.000192f, + +0.006555f, +0.003675f, -0.011743f, -0.005323f, -0.000986f, +0.003985f, -0.006644f, -0.002322f, -0.001523f, +0.005294f, + +0.001174f, -0.007333f, +0.001373f, -0.007705f, +0.002749f, +0.005145f, -0.000369f, -0.001582f, +0.000181f, +0.003524f, + +0.000265f, -0.004071f, +0.003132f, -0.002554f, +0.001466f, -0.001177f, +0.001017f, +0.000441f, -0.001214f, -0.000008f, + +0.002971f, +0.002386f, +0.000019f, -0.000730f, -0.002038f, +0.000243f + } + }, + { + { + -0.024666f, -0.386495f, +0.006687f, -0.040235f, -0.016992f, -0.009858f, -0.001441f, -0.008552f, +0.009319f, -0.021058f, + -0.020651f, +0.014678f, -0.011593f, +0.011300f, -0.032193f, +0.013898f, +0.007787f, +0.000868f, -0.002547f, +0.000682f, + -0.014983f, +0.004092f, -0.004359f, +0.000901f, +0.019922f, -0.007792f, +0.007555f, +0.012273f, -0.003594f, -0.003502f, + -0.001065f, -0.009232f, -0.008214f, -0.009473f, -0.014336f, +0.019323f, -0.002657f, +0.006253f, -0.002080f, -0.006923f, + +0.012878f, -0.004245f, +0.008278f, -0.005737f, -0.001753f, -0.004939f, +0.001413f, -0.002900f, +0.007030f, -0.001425f, + -0.008522f, -0.012145f, +0.000777f, -0.017413f, +0.008776f, +0.002333f, -0.010337f, -0.000922f, +0.010440f, +0.009947f, + -0.006379f, +0.009091f, -0.005979f, +0.002290f, -0.008000f, +0.008549f, +0.002491f, +0.001281f, -0.001612f, -0.002192f, + -0.001464f, +0.003137f, -0.000875f, +0.002894f, +0.000132f, +0.001824f, -0.002800f, -0.002332f, +0.002021f, +0.000251f, + +0.001193f, -0.000793f, +0.000456f, +0.002440f, -0.001988f, +0.000668f, -0.000874f, +0.001099f, +0.004113f, +0.002324f, + -0.000732f, +0.001862f, -0.003454f, -0.000520f, +0.002088f, -0.000575f + }, + { + +0.001678f, +0.087913f, -0.002715f, -0.028931f, +0.000898f, +0.003788f, +0.000793f, +0.012403f, -0.000100f, +0.008515f, + +0.004081f, +0.010387f, -0.003950f, -0.005575f, -0.013550f, -0.022437f, -0.017553f, +0.016652f, -0.022768f, -0.016601f, + +0.027645f, +0.015964f, -0.034196f, +0.018904f, +0.009876f, -0.003359f, +0.013717f, -0.013714f, -0.000007f, +0.016062f, + -0.004250f, +0.008619f, -0.010043f, -0.003028f, +0.002565f, +0.005133f, -0.008022f, -0.002286f, -0.022032f, +0.002964f, + +0.003309f, +0.000679f, -0.000171f, -0.006284f, -0.006169f, +0.000080f, +0.006964f, +0.002039f, +0.008553f, -0.002347f, + -0.007344f, +0.008443f, +0.007494f, +0.000680f, +0.000587f, +0.001189f, -0.003831f, +0.001708f, -0.002403f, -0.001345f, + +0.003185f, +0.003318f, +0.003378f, +0.003921f, +0.007458f, -0.000583f, -0.001972f, -0.005491f, -0.001422f, +0.003382f, + +0.008463f, -0.000611f, +0.002262f, -0.001872f, -0.002501f, +0.000698f, +0.000505f, +0.000516f, +0.003444f, -0.001804f, + -0.000286f, -0.001800f, +0.001254f, -0.002004f, -0.000140f, -0.001274f, +0.002971f, -0.000874f, +0.000332f, -0.001089f, + +0.000666f, -0.001069f, -0.000847f, +0.003214f, -0.000767f, +0.001108f + }, + { + -0.008126f, +0.014413f, +0.062132f, +0.024371f, +0.015977f, +0.004152f, -0.005633f, +0.025904f, -0.006054f, +0.023788f, + -0.022709f, +0.035594f, -0.045069f, -0.019556f, +0.000440f, +0.014842f, -0.006824f, +0.014324f, -0.004422f, +0.005167f, + +0.002277f, +0.003701f, +0.015531f, +0.014909f, +0.019328f, -0.001853f, +0.019692f, +0.007850f, -0.018342f, -0.006983f, + +0.003484f, +0.020341f, +0.012141f, +0.002055f, -0.022595f, +0.010275f, +0.000176f, +0.001515f, -0.016301f, +0.009321f, + +0.002401f, +0.001334f, +0.000882f, +0.003420f, +0.010984f, +0.014143f, +0.004300f, +0.009434f, -0.000687f, +0.005453f, + -0.004087f, +0.002319f, -0.002688f, +0.001064f, +0.006612f, +0.001532f, -0.001126f, -0.007184f, -0.003968f, -0.005921f, + -0.001070f, -0.003288f, -0.001603f, -0.004702f, -0.002299f, +0.000392f, -0.006672f, -0.003874f, -0.002038f, +0.003409f, + +0.004147f, +0.002547f, -0.002926f, -0.004948f, -0.004370f, -0.001237f, +0.001876f, -0.000014f, -0.000491f, +0.004651f, + -0.001302f, +0.003744f, -0.000974f, +0.000372f, +0.000909f, +0.002505f, -0.001702f, +0.000722f, +0.003096f, +0.000592f, + -0.002265f, +0.000317f, +0.000030f, -0.002842f, -0.000516f, +0.000295f + }, + { + +0.039081f, -0.417729f, +0.010658f, -0.006518f, +0.001294f, +0.004577f, -0.000992f, -0.002848f, -0.021015f, +0.039857f, + +0.004511f, +0.030536f, -0.015381f, +0.007827f, +0.010780f, +0.011113f, -0.019920f, +0.053937f, -0.022392f, -0.011747f, + +0.009812f, +0.011525f, -0.011564f, -0.009778f, +0.000034f, +0.011466f, -0.009361f, -0.003044f, +0.003578f, -0.000070f, + +0.000228f, +0.012352f, -0.008735f, -0.008402f, -0.002334f, -0.001971f, +0.012736f, -0.014648f, -0.010980f, -0.005784f, + +0.015998f, +0.008904f, +0.006666f, -0.015317f, -0.001155f, +0.010589f, +0.006268f, +0.003959f, -0.005233f, +0.011902f, + -0.004375f, +0.000579f, +0.000487f, -0.000116f, -0.006743f, -0.000508f, +0.004682f, +0.000684f, -0.001574f, +0.002334f, + +0.000509f, -0.002565f, -0.002106f, -0.003915f, +0.001412f, -0.001865f, -0.001294f, +0.001302f, +0.002591f, +0.004153f, + +0.001269f, -0.001608f, +0.000890f, +0.004161f, -0.002157f, +0.000789f, -0.001792f, +0.000399f, +0.002312f, +0.005233f, + -0.000369f, -0.000784f, +0.000297f, +0.000845f, -0.000336f, -0.001079f, -0.000425f, -0.003660f, +0.001166f, +0.001316f, + +0.000678f, +0.002753f, +0.000336f, -0.000136f, -0.001333f, -0.002888f + }, + { + -0.004323f, -0.004016f, +0.000971f, -0.006452f, +0.005123f, -0.003191f, +0.002536f, -0.001727f, -0.009944f, +0.004404f, + -0.009296f, +0.017069f, +0.019455f, +0.040826f, -0.053813f, -0.026552f, -0.009768f, +0.081513f, +0.026532f, -0.019763f, + -0.062393f, -0.000202f, +0.010923f, -0.003506f, -0.007284f, -0.035096f, +0.018681f, +0.000164f, -0.013684f, +0.017180f, + -0.007645f, +0.006125f, +0.014850f, -0.006542f, +0.010413f, -0.019253f, +0.018255f, +0.004810f, -0.016906f, +0.012084f, + -0.010976f, +0.008189f, +0.003417f, -0.014600f, -0.008980f, +0.014020f, +0.012896f, -0.006650f, -0.000565f, +0.008030f, + -0.010415f, -0.001629f, +0.003652f, -0.003859f, -0.010008f, -0.008488f, +0.005377f, -0.004097f, +0.006177f, +0.010500f, + -0.002131f, +0.000134f, -0.002248f, -0.004962f, -0.002866f, +0.000846f, -0.000219f, +0.001445f, +0.000020f, -0.001056f, + +0.000853f, +0.006821f, +0.002824f, +0.001322f, -0.003389f, -0.002173f, +0.005061f, -0.000798f, +0.003813f, +0.002971f, + +0.005450f, -0.000343f, +0.000531f, -0.000246f, -0.004324f, +0.001387f, +0.004230f, +0.001286f, +0.000400f, -0.003110f, + +0.000677f, -0.000489f, +0.001962f, -0.002409f, -0.000836f, -0.000905f + }, + { + +0.065601f, -0.637273f, +0.012054f, -0.044495f, -0.013553f, +0.000470f, +0.007210f, -0.023572f, +0.004878f, +0.025837f, + +0.009134f, +0.015775f, -0.034500f, +0.008309f, +0.023953f, +0.013748f, +0.014680f, +0.004055f, +0.000793f, -0.009136f, + +0.010788f, -0.003709f, +0.017596f, -0.007406f, -0.008242f, +0.014921f, +0.004974f, -0.017645f, +0.007809f, +0.004681f, + -0.013302f, -0.004322f, -0.012779f, -0.003677f, -0.003098f, -0.006366f, +0.011774f, +0.019096f, -0.004074f, -0.003252f, + +0.000220f, -0.009416f, -0.007089f, -0.005660f, -0.010716f, -0.010399f, -0.002605f, -0.005402f, -0.006543f, -0.013583f, + +0.007443f, +0.001858f, +0.005073f, -0.005376f, +0.003617f, -0.006208f, +0.004199f, -0.001456f, -0.002389f, -0.005561f, + +0.004949f, +0.001435f, +0.001785f, -0.004329f, -0.001332f, -0.000944f, +0.002321f, -0.001919f, +0.003173f, -0.001341f, + +0.000109f, -0.000140f, +0.001890f, +0.000270f, -0.003634f, -0.000508f, -0.004105f, +0.002716f, +0.000694f, -0.001371f, + -0.002762f, +0.001114f, -0.001076f, +0.001482f, +0.002285f, -0.001651f, +0.000787f, +0.003072f, +0.002978f, +0.000238f, + -0.003129f, +0.000527f, -0.003010f, -0.001101f, +0.000601f, -0.001799f + }, + { + -0.001901f, +0.020607f, -0.001957f, -0.005210f, -0.001221f, +0.000580f, -0.000637f, +0.002229f, -0.002924f, +0.000017f, + +0.006910f, -0.000584f, +0.008141f, -0.000227f, +0.027789f, -0.016763f, +0.012305f, +0.008640f, -0.000736f, -0.000458f, + +0.037498f, -0.016448f, +0.044017f, -0.012413f, +0.010407f, +0.005154f, +0.036338f, -0.020758f, +0.013573f, +0.016547f, + -0.018513f, -0.013748f, +0.012245f, +0.042294f, -0.020094f, -0.010616f, -0.013625f, -0.010879f, -0.014703f, +0.001860f, + -0.002511f, -0.009947f, -0.001361f, -0.011998f, -0.000189f, -0.004033f, +0.009479f, -0.015049f, +0.003931f, +0.001872f, + +0.005573f, +0.003098f, +0.004262f, -0.004329f, +0.002509f, -0.005194f, +0.006391f, +0.006039f, -0.010732f, -0.001217f, + -0.000067f, +0.004831f, +0.001059f, -0.007040f, -0.002256f, +0.007499f, +0.000617f, +0.001798f, -0.001363f, -0.002123f, + +0.000690f, +0.003667f, -0.004122f, +0.005542f, +0.000226f, -0.002409f, +0.002896f, -0.000448f, +0.001973f, -0.000128f, + +0.002779f, -0.001328f, -0.001181f, -0.001597f, +0.001705f, -0.000224f, +0.000270f, -0.000266f, +0.001791f, -0.003242f, + -0.002368f, -0.000935f, -0.002324f, -0.001272f, -0.001002f, -0.000961f + }, + { + +0.122423f, +0.455486f, -0.057501f, -0.017818f, -0.017865f, -0.006469f, -0.030858f, +0.002695f, -0.009453f, +0.036123f, + -0.005119f, -0.028295f, +0.011743f, -0.003208f, -0.039873f, +0.048102f, -0.004267f, +0.008875f, -0.002765f, -0.015379f, + -0.017580f, -0.007778f, -0.002557f, +0.028783f, -0.002710f, +0.007823f, -0.000142f, +0.000011f, +0.004009f, +0.030009f, + +0.001270f, +0.009049f, -0.006274f, +0.020790f, +0.003391f, +0.042114f, -0.006572f, -0.002076f, -0.004917f, -0.003487f, + +0.012930f, -0.006033f, +0.002251f, +0.002585f, +0.024175f, +0.002499f, +0.014188f, -0.008934f, -0.006398f, -0.002151f, + +0.003728f, +0.007459f, -0.006579f, -0.007722f, -0.005467f, +0.004580f, +0.001509f, +0.007487f, -0.001466f, -0.000198f, + -0.002546f, +0.003279f, +0.001584f, +0.005938f, -0.000330f, -0.001392f, +0.002398f, -0.001253f, +0.001757f, +0.001316f, + -0.001368f, +0.000067f, +0.000270f, +0.000397f, +0.002334f, -0.000518f, +0.001678f, +0.001227f, +0.002297f, +0.000449f, + -0.002014f, +0.001151f, -0.001210f, +0.001678f, -0.001787f, -0.003108f, +0.000878f, +0.000746f, -0.000813f, -0.001429f, + -0.001293f, +0.003555f, -0.002117f, -0.000282f, +0.000034f, +0.000737f + }, + { + -0.002263f, +0.011633f, -0.022926f, +0.004336f, -0.002292f, -0.000259f, -0.001303f, +0.002400f, +0.000885f, +0.000625f, + -0.007916f, +0.012581f, -0.000383f, +0.014907f, +0.024886f, -0.057794f, -0.016990f, -0.024389f, -0.002715f, +0.008211f, + -0.042446f, -0.012662f, -0.028546f, +0.037054f, +0.025465f, -0.006707f, +0.039244f, -0.013426f, -0.007090f, +0.045020f, + -0.015450f, -0.007609f, -0.026353f, +0.010709f, +0.012445f, -0.012755f, +0.009925f, +0.001011f, +0.010917f, +0.008651f, + -0.005176f, -0.002229f, +0.003555f, -0.011812f, +0.009615f, -0.005130f, -0.006643f, -0.000109f, +0.010896f, +0.007537f, + -0.013307f, +0.002672f, -0.001572f, +0.005672f, +0.004832f, +0.007248f, -0.002119f, -0.001583f, -0.000354f, -0.002598f, + +0.003903f, -0.000728f, -0.008120f, -0.003676f, +0.009498f, +0.001703f, +0.002600f, -0.001742f, -0.002952f, +0.000316f, + -0.000021f, +0.001213f, -0.006102f, +0.004575f, +0.002902f, +0.001551f, -0.001976f, -0.001319f, -0.001236f, -0.001286f, + -0.002041f, -0.000413f, -0.000390f, -0.001683f, -0.002024f, -0.000147f, +0.003038f, +0.001305f, -0.002163f, -0.000939f, + -0.000492f, -0.000547f, +0.000822f, +0.001591f, +0.000299f, +0.001004f + }, + { + +0.062779f, -0.090473f, -0.018356f, -0.027490f, -0.005714f, +0.062389f, -0.022414f, -0.056810f, -0.013805f, -0.021671f, + +0.003927f, -0.013616f, +0.008570f, +0.014733f, +0.005370f, +0.000561f, +0.034996f, +0.014868f, +0.049282f, +0.008777f, + +0.006697f, -0.000662f, -0.012829f, -0.033884f, +0.003959f, +0.008280f, -0.018644f, +0.007739f, -0.024593f, -0.005316f, + -0.003968f, -0.012531f, -0.005259f, -0.012369f, -0.000082f, -0.010154f, +0.010498f, +0.023774f, -0.001920f, +0.001192f, + -0.000161f, -0.002341f, -0.009161f, +0.011021f, -0.012181f, +0.003732f, +0.008247f, -0.003116f, +0.006627f, -0.004193f, + +0.002565f, -0.001917f, -0.000950f, -0.004388f, +0.009756f, +0.002219f, -0.002358f, -0.003229f, -0.001066f, -0.006149f, + +0.016752f, +0.006133f, +0.007787f, -0.001467f, -0.007732f, +0.005231f, +0.001037f, +0.004273f, +0.001942f, -0.006017f, + +0.008122f, -0.002249f, -0.002344f, -0.000769f, +0.003109f, +0.007249f, -0.002507f, -0.003261f, +0.005605f, -0.002775f, + -0.001008f, +0.001493f, +0.003917f, +0.001210f, +0.000119f, -0.000432f, -0.002211f, -0.002002f, +0.001020f, -0.000810f, + +0.002647f, -0.000422f, +0.000035f, +0.002010f, -0.001195f, -0.000695f + }, + { + +0.001549f, +0.125030f, -0.047925f, -0.011397f, -0.006887f, +0.004146f, -0.013420f, -0.007283f, -0.010830f, +0.001878f, + +0.009072f, -0.011019f, -0.015671f, -0.015527f, +0.011079f, -0.047875f, -0.000848f, +0.006129f, +0.037911f, -0.004307f, + +0.023658f, -0.015034f, +0.012118f, -0.019566f, -0.002770f, +0.015785f, -0.013935f, -0.000059f, -0.004554f, +0.010594f, + +0.002332f, -0.007167f, -0.008206f, +0.004444f, +0.005057f, +0.022484f, -0.012264f, -0.008047f, -0.005950f, -0.001889f, + +0.002016f, +0.005588f, -0.007326f, +0.000054f, -0.015920f, +0.002199f, +0.006257f, +0.011163f, +0.007388f, +0.002371f, + +0.002868f, -0.013285f, +0.000930f, +0.002828f, +0.009139f, +0.002413f, +0.001777f, +0.000176f, +0.000818f, +0.000230f, + +0.002097f, -0.007417f, +0.003145f, -0.003400f, -0.001138f, -0.004587f, -0.003791f, -0.001707f, +0.002335f, +0.001691f, + +0.000599f, +0.000458f, +0.003924f, -0.001763f, +0.002103f, -0.000682f, +0.002584f, +0.001904f, -0.000482f, +0.002584f, + -0.001583f, +0.000122f, +0.001309f, -0.001818f, +0.003287f, -0.001007f, +0.002863f, +0.002800f, +0.002791f, +0.001961f, + -0.000417f, -0.002331f, -0.000688f, +0.000053f, +0.000716f, -0.000413f + }, + { + -0.083475f, +0.065419f, -0.013103f, -0.010836f, +0.050893f, -0.004935f, +0.015120f, -0.014167f, -0.035431f, +0.025618f, + +0.043999f, +0.017078f, +0.012862f, -0.002895f, -0.044253f, -0.002293f, -0.015284f, +0.020811f, -0.000183f, -0.036514f, + -0.013461f, +0.018902f, +0.004704f, -0.006867f, -0.030088f, -0.000279f, -0.013041f, -0.004147f, -0.002401f, -0.032089f, + -0.012157f, +0.016349f, +0.004069f, -0.000302f, -0.003173f, +0.017942f, -0.014978f, +0.017051f, +0.000287f, +0.000086f, + -0.006950f, -0.012311f, -0.000336f, +0.007926f, -0.012956f, +0.006767f, -0.004832f, -0.001830f, +0.003270f, -0.002596f, + +0.002300f, +0.008474f, -0.007354f, -0.008350f, +0.012328f, -0.002163f, -0.004212f, +0.005152f, -0.002596f, +0.001843f, + -0.007721f, -0.005648f, -0.003332f, +0.005441f, -0.001575f, +0.000465f, +0.002982f, -0.005486f, +0.003074f, +0.010230f, + -0.001060f, -0.000424f, +0.000103f, +0.001480f, +0.000255f, -0.000438f, -0.000487f, -0.002028f, -0.003272f, -0.000114f, + +0.004062f, +0.000742f, -0.002588f, -0.000055f, -0.000548f, -0.000074f, -0.000264f, -0.002532f, -0.000265f, -0.000938f, + +0.001100f, +0.001520f, -0.000450f, +0.000617f, -0.000724f, +0.000549f + }, + { + -0.005853f, +0.040145f, +0.012949f, +0.000004f, -0.004527f, -0.001268f, -0.002547f, +0.003346f, -0.002315f, -0.004366f, + -0.004426f, -0.005403f, -0.029191f, +0.029632f, -0.086853f, -0.025975f, -0.064973f, +0.007815f, +0.011397f, -0.010521f, + -0.010526f, +0.065624f, +0.033459f, -0.018518f, +0.025250f, -0.004649f, -0.002042f, +0.007768f, -0.021823f, -0.009788f, + +0.009524f, +0.002041f, +0.006398f, -0.001915f, -0.009035f, -0.004830f, -0.025296f, -0.013480f, +0.011852f, +0.005217f, + +0.005811f, +0.005099f, -0.006740f, -0.011284f, -0.009866f, -0.013872f, +0.007412f, -0.011775f, +0.008419f, -0.003802f, + +0.013524f, +0.000985f, -0.010306f, -0.009929f, -0.006035f, +0.001813f, +0.000642f, -0.002932f, -0.002002f, -0.005604f, + -0.007557f, +0.011468f, -0.004560f, -0.002500f, +0.000753f, -0.003922f, -0.002488f, -0.010150f, +0.006667f, -0.004288f, + -0.003024f, +0.002355f, -0.004673f, -0.001528f, +0.005353f, -0.000066f, +0.002189f, +0.000458f, +0.001852f, +0.003192f, + -0.001379f, +0.001007f, +0.000598f, -0.000514f, +0.002034f, -0.001138f, +0.000961f, +0.000232f, +0.002914f, +0.002263f, + -0.001662f, +0.002673f, -0.002359f, -0.004175f, -0.000875f, -0.001044f + }, + { + -0.032599f, -0.135270f, -0.000029f, -0.016348f, -0.000271f, +0.008431f, -0.018748f, +0.009049f, -0.004255f, -0.023578f, + -0.002348f, +0.004474f, -0.013726f, +0.016096f, -0.013357f, -0.019646f, -0.001416f, -0.007542f, -0.014970f, +0.038599f, + +0.007464f, +0.024722f, -0.002665f, +0.003240f, -0.007337f, +0.009601f, -0.015102f, +0.001940f, -0.005853f, -0.015483f, + -0.007184f, -0.013080f, -0.012006f, -0.010488f, +0.008846f, +0.012106f, +0.003049f, +0.005711f, +0.008471f, -0.001314f, + +0.006502f, +0.026268f, -0.002357f, -0.002060f, -0.008872f, +0.002613f, +0.010338f, -0.004431f, -0.009974f, -0.007463f, + -0.007955f, -0.001809f, +0.008197f, -0.008754f, -0.004770f, +0.006413f, -0.003569f, +0.010522f, -0.001456f, -0.003907f, + -0.001070f, +0.002681f, -0.001124f, -0.000512f, -0.000037f, -0.002974f, -0.002645f, -0.001566f, -0.007650f, +0.003161f, + +0.010550f, -0.002406f, +0.001752f, -0.006932f, -0.008601f, -0.002585f, -0.001667f, +0.002881f, +0.002377f, +0.002782f, + +0.004115f, +0.000096f, -0.000128f, +0.000281f, +0.001965f, -0.002587f, +0.000206f, -0.000602f, +0.001988f, -0.000408f, + +0.000704f, -0.000606f, +0.000935f, +0.000591f, -0.002191f, +0.001593f + }, + { + +0.002750f, -0.122959f, +0.012343f, -0.009775f, -0.011847f, +0.006572f, -0.002234f, -0.005788f, -0.010543f, -0.007661f, + +0.017668f, -0.009136f, +0.019113f, +0.039073f, -0.053653f, +0.021127f, -0.042692f, +0.009766f, -0.015340f, -0.002037f, + +0.059527f, +0.002481f, -0.020127f, -0.013588f, +0.000465f, -0.006454f, -0.028854f, -0.014780f, +0.012720f, -0.017826f, + +0.004488f, -0.032082f, -0.000315f, -0.009103f, -0.006794f, +0.031117f, -0.010856f, -0.021784f, +0.013044f, +0.022060f, + +0.000163f, -0.008631f, +0.005616f, -0.000792f, -0.000549f, -0.007052f, -0.012123f, -0.010349f, +0.010940f, +0.007751f, + +0.004338f, +0.001235f, +0.003046f, -0.005112f, +0.011336f, +0.005989f, +0.002107f, -0.008801f, +0.005193f, -0.005596f, + +0.002665f, +0.006418f, -0.010862f, -0.003222f, -0.005214f, -0.001904f, -0.002925f, +0.002123f, -0.000632f, +0.000677f, + +0.002592f, -0.001230f, -0.005716f, -0.002823f, -0.000315f, +0.001441f, +0.003446f, -0.002226f, -0.001297f, +0.001619f, + -0.000114f, +0.000576f, -0.001508f, -0.000082f, +0.001079f, -0.002758f, +0.000928f, +0.001959f, +0.000555f, -0.002180f, + +0.004782f, +0.000953f, +0.001821f, -0.001395f, -0.001853f, -0.003244f + } + }, + { + { + +0.007748f, -0.380502f, +0.008703f, -0.029205f, +0.004620f, +0.008134f, -0.005334f, -0.035598f, +0.007420f, -0.029125f, + -0.052226f, -0.001557f, -0.002282f, +0.019914f, -0.011544f, +0.007298f, -0.005602f, -0.006411f, -0.017291f, +0.005877f, + +0.001361f, +0.000585f, -0.019966f, -0.008099f, +0.021260f, +0.011714f, +0.010368f, -0.005635f, +0.000668f, +0.000621f, + +0.012667f, +0.010005f, -0.004915f, +0.000591f, +0.012196f, +0.027145f, -0.005756f, +0.009181f, -0.005720f, -0.009540f, + +0.005149f, -0.004753f, +0.013692f, -0.004352f, -0.002767f, -0.002247f, -0.001315f, -0.008960f, -0.002324f, -0.004540f, + -0.006518f, +0.000617f, +0.005887f, -0.008319f, +0.010266f, -0.006637f, -0.015072f, +0.003674f, +0.006010f, -0.001881f, + -0.010642f, +0.002975f, -0.003193f, +0.007824f, -0.005927f, +0.007449f, -0.002132f, -0.003636f, +0.002585f, +0.005067f, + +0.002271f, +0.004065f, -0.002532f, -0.000240f, -0.002226f, +0.001111f, -0.000594f, -0.000083f, +0.001689f, -0.002512f, + -0.001285f, -0.003383f, +0.000644f, +0.000275f, -0.005149f, +0.002608f, +0.002757f, -0.000214f, -0.000425f, -0.000949f, + -0.003527f, +0.002982f, -0.002091f, -0.001170f, +0.000612f, -0.000567f + }, + { + -0.001963f, +0.083076f, -0.007936f, -0.023951f, -0.000816f, +0.001427f, +0.004121f, +0.005754f, -0.005269f, +0.021350f, + +0.001449f, -0.000953f, +0.015304f, -0.007852f, -0.036678f, -0.018368f, -0.008269f, -0.000337f, -0.002552f, +0.006952f, + +0.002405f, +0.014277f, -0.034427f, +0.018997f, +0.036817f, +0.003209f, -0.015888f, -0.014861f, +0.000279f, -0.000864f, + -0.015947f, -0.000164f, -0.022739f, -0.013785f, -0.003145f, +0.015372f, +0.002072f, +0.006428f, -0.012057f, +0.009061f, + +0.010934f, +0.011863f, +0.003465f, -0.011608f, -0.017075f, -0.014289f, +0.007241f, +0.005698f, +0.006077f, -0.003615f, + -0.002247f, +0.009951f, +0.001420f, -0.001836f, +0.001882f, +0.002775f, +0.001568f, -0.003797f, -0.007568f, +0.003822f, + +0.001566f, +0.000872f, -0.000125f, -0.000475f, +0.001894f, -0.003149f, +0.005415f, +0.001086f, +0.001049f, +0.004462f, + +0.007306f, -0.004592f, +0.003454f, +0.000352f, -0.000195f, +0.000851f, -0.003321f, -0.004743f, -0.000567f, -0.001461f, + +0.001830f, -0.000556f, +0.000191f, -0.001519f, +0.001114f, -0.001534f, +0.002437f, -0.000697f, +0.000416f, -0.001748f, + -0.000282f, -0.000469f, -0.002988f, -0.000428f, -0.002876f, +0.000263f + }, + { + +0.007813f, -0.093511f, -0.027619f, +0.032803f, +0.009778f, -0.012335f, -0.015355f, +0.008146f, -0.012557f, +0.023386f, + -0.038248f, +0.034477f, -0.016661f, +0.005965f, +0.001946f, -0.006497f, +0.004169f, +0.034617f, -0.003691f, +0.020268f, + -0.012208f, -0.014254f, +0.011710f, +0.011330f, +0.010001f, -0.010729f, -0.004506f, +0.000084f, -0.011949f, -0.008234f, + +0.006862f, +0.021317f, +0.002752f, +0.018895f, -0.014336f, +0.009443f, -0.004486f, -0.000712f, -0.005579f, +0.009665f, + -0.008058f, +0.003058f, +0.001303f, -0.007648f, -0.004986f, +0.002842f, -0.001457f, +0.004421f, +0.004283f, +0.000420f, + -0.019706f, +0.003519f, -0.000583f, -0.007753f, -0.001586f, -0.003369f, -0.001699f, -0.000999f, -0.001696f, +0.000169f, + +0.000603f, -0.002327f, +0.000131f, -0.003278f, +0.002381f, +0.003292f, +0.003806f, +0.002543f, -0.003783f, -0.001423f, + -0.000439f, +0.003565f, -0.001907f, -0.003679f, -0.005777f, -0.006201f, +0.001662f, +0.000177f, -0.001388f, +0.001563f, + -0.003232f, +0.001479f, -0.002032f, -0.000019f, -0.000907f, +0.001098f, -0.000626f, +0.001273f, +0.001767f, -0.002519f, + -0.003007f, +0.000731f, +0.002737f, -0.001442f, -0.001537f, +0.000671f + }, + { + -0.000266f, -0.531127f, -0.022111f, -0.008110f, -0.009255f, +0.000456f, +0.012300f, +0.009552f, -0.024260f, +0.030971f, + -0.002201f, +0.033814f, +0.007887f, +0.016623f, +0.000052f, +0.016010f, -0.016781f, +0.033805f, -0.025766f, +0.026817f, + +0.027993f, -0.003173f, -0.012979f, -0.000567f, -0.002203f, +0.013200f, -0.007513f, -0.024287f, -0.014868f, -0.019603f, + -0.011560f, +0.007373f, -0.004686f, +0.007017f, +0.011477f, -0.002192f, +0.006690f, -0.013880f, -0.006339f, -0.015552f, + +0.009197f, +0.004352f, +0.005309f, -0.013264f, -0.004256f, +0.002163f, -0.007199f, +0.003840f, -0.004983f, +0.014057f, + +0.001087f, -0.000532f, +0.006470f, -0.001112f, -0.011714f, -0.003132f, +0.001543f, +0.000062f, +0.002400f, +0.000502f, + -0.000074f, -0.003958f, +0.000352f, +0.000802f, -0.000418f, -0.001520f, -0.001740f, -0.002167f, +0.003106f, +0.002295f, + +0.001258f, +0.003701f, +0.005037f, +0.003275f, -0.004218f, +0.001082f, +0.000838f, +0.002476f, +0.002767f, +0.003696f, + -0.000139f, -0.001721f, -0.000370f, +0.001778f, +0.000099f, -0.001175f, -0.000245f, -0.003124f, -0.001096f, -0.001516f, + -0.000477f, +0.000055f, -0.000872f, +0.000530f, +0.000522f, -0.000819f + }, + { + +0.004368f, -0.011829f, -0.013817f, -0.014503f, -0.001505f, +0.000012f, +0.005252f, -0.002813f, -0.015343f, -0.003941f, + -0.015872f, -0.002099f, -0.013702f, +0.013747f, -0.059528f, +0.021840f, +0.037151f, +0.017898f, -0.070423f, -0.014072f, + -0.025823f, +0.018771f, +0.000518f, +0.003265f, -0.006237f, -0.050405f, -0.003391f, +0.005015f, -0.000006f, +0.011851f, + +0.000062f, +0.005901f, -0.004697f, -0.010972f, +0.017508f, -0.011053f, +0.019465f, +0.005476f, -0.005760f, +0.013401f, + -0.007527f, +0.013707f, +0.010096f, -0.003300f, +0.010261f, +0.002927f, -0.012853f, -0.004397f, -0.003537f, -0.000109f, + -0.009716f, +0.002412f, +0.005685f, -0.003240f, -0.002769f, -0.001164f, +0.012824f, -0.006952f, -0.003217f, -0.003704f, + -0.011839f, +0.000444f, -0.000028f, -0.000423f, -0.002080f, +0.002251f, -0.000243f, -0.003900f, +0.000285f, -0.001754f, + -0.004296f, +0.003958f, +0.001522f, -0.004291f, -0.003207f, +0.002182f, +0.002030f, -0.004985f, +0.002903f, +0.002280f, + +0.001196f, -0.006774f, -0.001104f, +0.001093f, -0.003601f, +0.001085f, +0.001038f, -0.000337f, +0.000554f, -0.001272f, + +0.002176f, -0.001253f, +0.002334f, -0.000106f, +0.000528f, -0.001653f + }, + { + -0.004785f, -0.774263f, +0.000333f, -0.004082f, +0.007349f, +0.005431f, +0.016420f, -0.026273f, -0.009066f, +0.015795f, + -0.001212f, +0.009411f, -0.058099f, -0.012026f, -0.000257f, -0.000139f, +0.002524f, -0.014497f, -0.027103f, -0.021793f, + +0.015072f, -0.010001f, +0.016472f, -0.007709f, -0.003844f, +0.017960f, +0.007256f, -0.005017f, +0.009945f, -0.010088f, + -0.017998f, +0.005263f, -0.016065f, -0.004836f, +0.011866f, -0.002272f, -0.005194f, -0.002424f, -0.004080f, +0.009226f, + +0.008929f, -0.004020f, -0.001084f, +0.000226f, +0.001103f, -0.006295f, -0.005843f, -0.007392f, -0.004599f, -0.016237f, + +0.003054f, -0.000907f, +0.001750f, -0.009867f, +0.007669f, -0.000993f, +0.005028f, +0.002658f, -0.001000f, -0.005835f, + +0.001513f, +0.000350f, -0.000831f, -0.005745f, +0.003752f, -0.002364f, -0.002065f, +0.000462f, +0.005565f, -0.001860f, + -0.001500f, -0.003221f, -0.000029f, +0.000805f, -0.007384f, -0.000931f, -0.003165f, +0.005659f, +0.005422f, -0.000960f, + -0.002579f, -0.001536f, -0.002435f, +0.002822f, +0.001464f, -0.001285f, +0.000708f, +0.002601f, +0.000294f, -0.001880f, + -0.005645f, -0.000551f, -0.002315f, -0.000114f, +0.000168f, -0.000808f + }, + { + +0.000509f, +0.017308f, -0.018577f, -0.004870f, +0.004017f, +0.002572f, +0.000928f, +0.005503f, -0.000697f, -0.006604f, + -0.001731f, -0.015571f, -0.013936f, +0.000860f, +0.027900f, +0.003896f, +0.017512f, +0.017643f, +0.023298f, +0.016981f, + +0.015910f, -0.022714f, +0.020432f, -0.068851f, -0.002407f, -0.023621f, +0.032865f, +0.007904f, +0.014024f, +0.012020f, + -0.007196f, +0.002483f, -0.001215f, +0.011240f, -0.027537f, -0.003173f, -0.013133f, -0.004694f, +0.002253f, +0.008586f, + -0.002553f, -0.003976f, -0.003829f, -0.015222f, +0.005582f, +0.000436f, +0.013023f, -0.012477f, +0.003655f, +0.001090f, + +0.007654f, +0.002659f, +0.006145f, -0.003674f, +0.000253f, -0.006080f, +0.001918f, +0.002605f, -0.008643f, +0.008292f, + +0.007315f, +0.007628f, +0.005261f, -0.005783f, -0.004676f, +0.002823f, +0.001013f, +0.001960f, -0.000336f, -0.002572f, + -0.000566f, +0.000569f, -0.007503f, +0.004873f, -0.002467f, -0.002931f, +0.004612f, -0.001107f, -0.001171f, -0.004539f, + +0.001930f, +0.003387f, +0.001675f, -0.000497f, +0.001395f, -0.003329f, +0.001243f, -0.000117f, -0.000454f, -0.002789f, + -0.000524f, +0.001967f, +0.000892f, -0.000606f, -0.000634f, -0.001922f + }, + { + -0.155546f, +0.240132f, +0.075412f, -0.013544f, -0.015494f, +0.013591f, -0.013509f, +0.016810f, -0.008287f, +0.018399f, + -0.006611f, -0.018816f, +0.013938f, +0.012253f, -0.063384f, +0.016496f, -0.013535f, -0.007672f, +0.017927f, +0.005442f, + -0.004244f, +0.012358f, -0.002266f, +0.017936f, -0.001196f, +0.012107f, -0.011456f, +0.003694f, -0.004402f, -0.003103f, + -0.027128f, +0.004126f, -0.002355f, +0.015766f, -0.007520f, +0.032990f, +0.000270f, +0.011849f, -0.008254f, -0.008359f, + +0.006462f, -0.014907f, -0.007035f, -0.013100f, +0.008651f, -0.010026f, +0.009335f, -0.005860f, -0.008521f, -0.013406f, + -0.000676f, -0.001151f, -0.015969f, +0.003895f, -0.002098f, +0.002671f, +0.002799f, +0.001294f, -0.002422f, -0.000064f, + -0.008193f, -0.003561f, -0.004298f, -0.000388f, -0.005054f, -0.000747f, +0.003942f, +0.002768f, +0.002860f, +0.000231f, + +0.000558f, -0.001587f, -0.000610f, +0.003172f, -0.000804f, +0.000217f, +0.002259f, -0.001770f, +0.001615f, -0.000327f, + -0.002684f, -0.000335f, -0.003471f, -0.000498f, -0.000780f, +0.001511f, +0.001503f, -0.002892f, -0.002437f, +0.000162f, + -0.000135f, +0.002760f, -0.001563f, -0.001032f, -0.001288f, +0.000770f + }, + { + +0.000047f, +0.026466f, -0.022250f, +0.000659f, -0.000929f, -0.000332f, +0.003286f, -0.001743f, -0.006072f, +0.003589f, + -0.009487f, +0.012668f, +0.000243f, -0.039724f, -0.015478f, -0.007169f, +0.023377f, -0.015689f, -0.007157f, +0.029592f, + -0.021503f, +0.022657f, -0.005783f, +0.000534f, -0.026138f, -0.046188f, +0.028283f, -0.015734f, -0.009622f, +0.031964f, + -0.023479f, +0.004742f, -0.014930f, +0.012288f, +0.007643f, -0.013950f, +0.014936f, +0.009075f, +0.007945f, +0.014651f, + +0.003121f, +0.000263f, +0.011953f, -0.014383f, +0.010644f, +0.003214f, +0.000843f, +0.000271f, -0.000650f, +0.009278f, + +0.002367f, +0.006063f, +0.002561f, +0.006496f, -0.005250f, +0.001722f, -0.002624f, -0.002905f, -0.003515f, -0.000463f, + +0.005619f, +0.003692f, -0.004346f, -0.002259f, +0.009703f, +0.001451f, +0.003941f, +0.000728f, -0.002247f, -0.002154f, + -0.003721f, +0.002121f, -0.004814f, -0.001340f, -0.000410f, +0.000259f, -0.002599f, -0.001366f, +0.001663f, +0.004808f, + +0.002181f, +0.003662f, -0.000939f, -0.001504f, -0.003142f, -0.001274f, +0.003683f, +0.000870f, -0.001914f, -0.000545f, + +0.000210f, -0.000661f, +0.001102f, +0.000094f, -0.001006f, +0.001459f + }, + { + -0.065114f, -0.104685f, +0.099155f, -0.016424f, +0.006860f, +0.023243f, -0.031229f, -0.039433f, +0.004328f, -0.019762f, + +0.004552f, +0.004048f, +0.011320f, -0.008386f, -0.025816f, -0.020073f, +0.013014f, -0.009731f, +0.051808f, +0.020067f, + +0.014287f, -0.005259f, -0.011426f, -0.033741f, -0.002620f, +0.009855f, -0.006807f, +0.008773f, -0.024434f, -0.000285f, + +0.008192f, -0.016100f, -0.002665f, +0.001860f, -0.002511f, -0.010810f, +0.021710f, +0.019629f, -0.011043f, -0.001524f, + -0.013993f, -0.008815f, -0.010741f, +0.001051f, -0.014438f, +0.009342f, +0.010972f, -0.003987f, +0.008725f, -0.008216f, + +0.002746f, +0.002328f, -0.006329f, -0.010205f, +0.008828f, -0.000808f, -0.000104f, +0.000122f, +0.002548f, -0.002616f, + +0.015405f, -0.001766f, +0.002259f, -0.000737f, -0.010154f, -0.003035f, -0.001386f, +0.002769f, +0.001594f, -0.005422f, + +0.006112f, +0.004381f, +0.000812f, -0.003215f, -0.001993f, +0.001519f, -0.000118f, -0.003249f, +0.002115f, -0.002347f, + +0.000310f, +0.000848f, +0.002083f, +0.005226f, +0.004938f, +0.001132f, -0.003391f, -0.005872f, -0.003575f, +0.001092f, + +0.003716f, -0.002261f, -0.001301f, +0.002316f, -0.000624f, -0.001705f + }, + { + +0.000549f, +0.129850f, -0.028106f, +0.013465f, +0.001115f, +0.013913f, +0.010543f, -0.002024f, -0.005909f, +0.016182f, + +0.028899f, +0.023630f, +0.004479f, -0.032150f, +0.014136f, -0.036498f, -0.000545f, -0.004314f, -0.004145f, -0.042466f, + +0.019308f, -0.008438f, +0.001726f, -0.019619f, -0.008167f, +0.003175f, -0.017250f, -0.008435f, -0.014504f, +0.007299f, + +0.006121f, -0.011640f, -0.008782f, -0.003163f, -0.016809f, +0.001846f, -0.012216f, +0.001562f, +0.010944f, +0.023254f, + +0.021791f, +0.003789f, -0.016060f, -0.001825f, -0.007132f, +0.010047f, +0.009588f, +0.018481f, +0.004301f, -0.001919f, + +0.000011f, -0.006656f, +0.007791f, -0.000879f, +0.001383f, -0.009638f, -0.003814f, +0.003517f, +0.000332f, -0.000417f, + -0.002167f, -0.004536f, +0.011698f, +0.004469f, +0.006743f, -0.004759f, -0.007328f, +0.003371f, +0.005459f, -0.000839f, + -0.003556f, -0.002770f, +0.000447f, -0.003804f, -0.000194f, -0.003658f, -0.001601f, +0.001648f, -0.001052f, +0.001970f, + +0.002665f, -0.000592f, -0.001507f, -0.002170f, +0.000360f, -0.003565f, +0.000116f, +0.001113f, +0.000571f, +0.001038f, + +0.000085f, -0.001495f, -0.000714f, -0.002004f, +0.001238f, -0.001158f + }, + { + +0.066578f, +0.283561f, +0.020378f, +0.009391f, +0.058829f, +0.000965f, +0.032682f, +0.012347f, -0.011496f, +0.024795f, + +0.031521f, +0.018461f, +0.002102f, -0.012270f, -0.045436f, +0.015174f, -0.008181f, +0.013594f, -0.009706f, -0.027560f, + +0.001836f, +0.022199f, +0.001700f, +0.015674f, -0.021017f, -0.024794f, -0.025794f, +0.000808f, +0.008259f, -0.018214f, + -0.009738f, +0.006124f, +0.006501f, +0.009831f, -0.010998f, +0.011344f, -0.009081f, +0.014138f, +0.001787f, +0.007230f, + -0.002239f, -0.003934f, +0.007098f, +0.002202f, -0.015109f, +0.007785f, -0.010647f, -0.004132f, +0.012312f, -0.008016f, + -0.000355f, +0.009007f, -0.006910f, -0.011223f, +0.004945f, -0.014100f, -0.005457f, +0.005667f, -0.003838f, +0.000916f, + -0.002320f, +0.002825f, -0.000092f, +0.004045f, -0.006665f, +0.001485f, +0.005937f, -0.002555f, -0.003745f, +0.001808f, + -0.000589f, -0.002705f, -0.001281f, +0.004255f, +0.003349f, +0.003602f, +0.002849f, +0.001289f, +0.002161f, +0.000962f, + +0.000128f, +0.001047f, +0.002571f, +0.000814f, -0.000762f, +0.000684f, +0.001395f, +0.000728f, +0.001580f, -0.001040f, + +0.000109f, +0.000347f, -0.001960f, -0.000812f, -0.001938f, -0.000046f + }, + { + +0.005320f, -0.010365f, -0.037200f, -0.007186f, -0.014133f, -0.008982f, -0.001219f, +0.012845f, +0.004316f, -0.006906f, + -0.010308f, -0.015781f, -0.020118f, +0.022460f, -0.107968f, -0.016379f, -0.053075f, +0.001431f, +0.019925f, -0.008207f, + -0.036826f, -0.004091f, -0.013028f, -0.023333f, +0.016126f, +0.005109f, +0.030193f, +0.027040f, -0.000395f, -0.022616f, + -0.029492f, +0.001685f, +0.014850f, -0.006916f, -0.006079f, +0.016065f, -0.011758f, -0.020072f, +0.004110f, -0.002104f, + -0.001597f, +0.000388f, -0.006262f, -0.003701f, +0.000983f, -0.013233f, +0.005852f, -0.005884f, +0.017379f, -0.003849f, + +0.002605f, +0.001423f, +0.000639f, -0.003205f, -0.000354f, +0.008745f, +0.009159f, +0.004305f, +0.003635f, +0.004894f, + -0.002478f, +0.008862f, -0.008026f, -0.004232f, -0.001601f, -0.001813f, +0.000491f, -0.007535f, +0.005240f, -0.005464f, + -0.000807f, +0.005806f, -0.003682f, +0.002625f, +0.007760f, -0.001738f, -0.001940f, -0.001414f, -0.003135f, -0.001945f, + -0.000779f, +0.004737f, +0.002920f, -0.000008f, +0.002491f, -0.001156f, -0.000264f, -0.000653f, +0.005584f, +0.002590f, + -0.003436f, +0.001784f, -0.000522f, -0.002777f, +0.000729f, +0.000168f + }, + { + +0.059193f, -0.037419f, -0.032551f, -0.037083f, +0.006505f, +0.010121f, -0.007734f, +0.023427f, +0.013255f, -0.013440f, + -0.008161f, -0.012498f, -0.024382f, -0.013868f, -0.043011f, +0.014778f, +0.030078f, -0.019517f, -0.039344f, +0.018553f, + -0.002471f, +0.010231f, -0.002036f, +0.004485f, -0.010855f, -0.005201f, -0.025311f, +0.023356f, -0.002662f, -0.016467f, + +0.000333f, -0.013117f, -0.005206f, -0.010066f, -0.009946f, -0.003103f, +0.017715f, +0.024872f, -0.000330f, -0.007273f, + -0.003562f, +0.015286f, +0.002414f, +0.011335f, +0.003747f, +0.009398f, -0.001314f, -0.018000f, -0.012181f, -0.007852f, + -0.008633f, -0.000713f, +0.009369f, -0.008567f, -0.002436f, +0.007285f, -0.004244f, -0.000073f, -0.009001f, +0.002440f, + +0.005114f, +0.003900f, +0.002004f, +0.002299f, +0.005455f, +0.005548f, +0.007438f, +0.006304f, +0.002616f, +0.001159f, + +0.004141f, -0.004384f, +0.003427f, +0.000184f, -0.003722f, +0.001121f, -0.000135f, -0.003032f, +0.000615f, +0.004577f, + +0.003724f, +0.000033f, +0.000777f, +0.000852f, +0.001425f, -0.001516f, +0.002089f, -0.001464f, +0.003585f, +0.000724f, + -0.002480f, -0.003134f, +0.000443f, +0.000479f, -0.000625f, +0.001300f + }, + { + -0.004233f, -0.122761f, +0.030808f, +0.004093f, +0.003884f, +0.017486f, +0.015294f, -0.001084f, -0.012720f, -0.003760f, + +0.025510f, -0.015446f, +0.008878f, -0.011382f, -0.160912f, -0.033874f, +0.007808f, +0.067446f, +0.006253f, -0.020529f, + +0.076853f, +0.052536f, +0.012802f, +0.012193f, -0.007943f, -0.005350f, -0.016737f, -0.013600f, +0.024986f, +0.002328f, + +0.002766f, -0.024772f, -0.007838f, -0.009419f, -0.002842f, +0.022822f, -0.007841f, -0.015073f, +0.021280f, +0.006998f, + -0.007297f, -0.006812f, -0.007128f, -0.005979f, -0.008027f, -0.000641f, +0.002021f, +0.000392f, +0.004534f, +0.000311f, + +0.010921f, +0.007487f, +0.003988f, -0.009568f, +0.010649f, +0.006049f, +0.003623f, -0.003192f, +0.012932f, -0.002812f, + -0.004203f, +0.007025f, +0.001291f, +0.007630f, -0.002926f, -0.004130f, +0.000256f, +0.004621f, -0.001476f, -0.001715f, + +0.000633f, +0.003156f, +0.000642f, +0.000556f, -0.002416f, -0.000717f, +0.004548f, -0.003464f, -0.002930f, -0.003092f, + -0.003963f, +0.001809f, -0.002511f, -0.000928f, +0.000928f, -0.000616f, +0.000386f, +0.002886f, +0.002382f, -0.003327f, + +0.002612f, -0.000592f, +0.001709f, +0.000749f, +0.000530f, -0.001833f + } + }, + { + { + +0.000476f, -0.471869f, +0.059514f, -0.034048f, +0.014860f, -0.001417f, +0.010185f, -0.035296f, -0.003586f, -0.046250f, + -0.012974f, -0.028851f, -0.000595f, +0.004146f, +0.021353f, -0.004111f, -0.013998f, -0.006130f, -0.018504f, +0.004712f, + +0.007060f, +0.003540f, -0.017508f, +0.008009f, +0.003605f, +0.013601f, +0.000815f, -0.006392f, +0.008932f, -0.005452f, + +0.010649f, +0.005337f, -0.000425f, -0.002944f, +0.029511f, +0.008661f, +0.007039f, +0.000791f, -0.003631f, +0.003047f, + -0.008668f, +0.002019f, +0.007168f, +0.006785f, -0.016872f, +0.010470f, -0.009951f, -0.009277f, -0.005856f, -0.005983f, + -0.002389f, +0.006749f, -0.004285f, +0.006043f, +0.002508f, -0.006065f, -0.006967f, -0.002683f, +0.000281f, -0.003772f, + -0.003196f, -0.001096f, -0.000678f, +0.001587f, +0.003207f, +0.000011f, +0.001039f, -0.006323f, +0.004340f, +0.006755f, + -0.001756f, +0.002410f, +0.002239f, -0.003263f, -0.002082f, -0.000732f, +0.001317f, +0.001078f, -0.000257f, -0.000812f, + -0.004575f, -0.003291f, +0.003430f, -0.000652f, -0.003611f, +0.001189f, +0.002457f, +0.001709f, -0.002675f, -0.000792f, + +0.000161f, -0.001202f, -0.001174f, +0.000874f, -0.001554f, +0.000557f + }, + { + +0.001364f, +0.026236f, +0.016828f, +0.018540f, -0.023915f, +0.001762f, +0.000969f, +0.000846f, +0.006455f, +0.013700f, + -0.002605f, -0.002727f, +0.011139f, -0.013273f, -0.023577f, +0.010295f, -0.006856f, -0.026667f, +0.001423f, +0.023773f, + -0.008771f, -0.002508f, -0.002761f, +0.026240f, -0.008489f, +0.016619f, -0.020862f, +0.010585f, -0.010815f, -0.002040f, + -0.030248f, +0.003100f, -0.018230f, -0.007608f, +0.000065f, +0.001028f, +0.008480f, +0.014070f, -0.000354f, -0.003427f, + +0.008786f, +0.013353f, +0.003770f, -0.004954f, -0.017084f, -0.020809f, +0.010060f, +0.012545f, -0.001055f, -0.007591f, + +0.004636f, -0.003514f, +0.004385f, +0.000240f, +0.009417f, -0.001844f, +0.006690f, -0.008391f, -0.004094f, -0.001627f, + -0.001971f, +0.005985f, -0.002761f, -0.000047f, -0.000122f, -0.000890f, +0.000854f, +0.004180f, +0.004650f, +0.005314f, + +0.003216f, +0.002444f, -0.001328f, -0.002341f, +0.001613f, +0.000072f, -0.004000f, -0.003598f, -0.001508f, -0.001736f, + +0.000102f, +0.002042f, -0.002965f, +0.002222f, -0.000453f, -0.000082f, +0.000049f, +0.000987f, -0.001098f, -0.000374f, + -0.001112f, -0.001969f, -0.001499f, -0.001363f, -0.000451f, -0.000650f + }, + { + -0.007392f, -0.135388f, +0.010669f, +0.034504f, -0.002688f, -0.010270f, -0.006233f, -0.018644f, +0.015464f, -0.003054f, + -0.030668f, +0.043304f, -0.016371f, -0.011602f, +0.018123f, -0.003583f, +0.001449f, +0.048455f, +0.006879f, -0.002882f, + +0.009614f, -0.021418f, +0.012297f, +0.003391f, -0.006689f, +0.014805f, -0.028978f, +0.007129f, -0.007463f, -0.007233f, + +0.011520f, +0.023276f, -0.015584f, +0.019592f, -0.005185f, +0.002130f, -0.002215f, -0.005498f, +0.003642f, +0.007662f, + +0.001384f, -0.009234f, -0.006623f, -0.000170f, -0.004068f, -0.001054f, -0.003998f, +0.007725f, +0.003457f, -0.008523f, + -0.010032f, +0.001831f, -0.001951f, -0.000510f, -0.006114f, +0.000505f, -0.009346f, +0.003830f, -0.004920f, +0.003351f, + +0.003667f, -0.002262f, +0.001340f, -0.005936f, +0.001531f, +0.003929f, +0.006883f, +0.002321f, -0.004643f, +0.000104f, + +0.000740f, -0.003106f, +0.000862f, -0.002043f, -0.002217f, -0.005782f, +0.001627f, -0.004527f, +0.002547f, -0.000102f, + +0.001328f, -0.005334f, +0.000278f, +0.000315f, -0.000363f, -0.002618f, +0.000442f, +0.003647f, -0.000008f, -0.001681f, + -0.002699f, +0.000147f, +0.001651f, +0.000083f, -0.001253f, -0.000003f + }, + { + -0.044724f, -0.554975f, +0.026927f, -0.002478f, +0.001121f, +0.003608f, +0.008709f, -0.004480f, -0.014030f, +0.018693f, + +0.030381f, -0.002183f, +0.016405f, +0.020913f, -0.011419f, +0.007170f, -0.009364f, +0.019854f, -0.003597f, +0.032178f, + +0.013210f, -0.000472f, +0.003501f, -0.010991f, +0.005044f, +0.023034f, -0.023661f, -0.017015f, -0.026844f, -0.017207f, + -0.008545f, -0.003810f, +0.011568f, -0.001635f, +0.010375f, +0.009047f, -0.011474f, -0.002850f, -0.012069f, -0.013736f, + +0.020495f, +0.001654f, +0.005700f, -0.000051f, -0.019660f, -0.005808f, +0.000217f, -0.004175f, +0.008766f, +0.003264f, + +0.005354f, +0.003327f, -0.003033f, -0.001773f, -0.003038f, -0.004126f, +0.002160f, -0.005705f, +0.010554f, -0.003444f, + -0.000722f, +0.002059f, -0.002365f, -0.001254f, +0.000702f, -0.000312f, -0.001031f, +0.002886f, -0.001236f, +0.000371f, + +0.003821f, +0.003721f, +0.006195f, -0.002484f, +0.001228f, -0.001238f, +0.003429f, +0.001302f, +0.002412f, +0.001258f, + +0.001433f, -0.004497f, +0.000867f, +0.001911f, +0.000110f, -0.000107f, -0.001569f, +0.000155f, -0.003164f, -0.002119f, + -0.000133f, +0.000795f, -0.000429f, -0.000588f, +0.000199f, -0.000063f + }, + { + -0.003619f, -0.021674f, +0.000263f, -0.010916f, -0.003183f, +0.003368f, -0.002289f, -0.000037f, -0.010154f, -0.006166f, + -0.014519f, +0.001094f, -0.011088f, +0.008595f, -0.039962f, +0.025569f, +0.006959f, -0.064390f, +0.003424f, -0.025921f, + -0.005711f, +0.047889f, -0.050687f, +0.008846f, +0.010561f, -0.042087f, -0.016231f, +0.004445f, +0.009386f, +0.017259f, + -0.007751f, +0.030686f, -0.011999f, -0.028280f, +0.016060f, +0.013015f, -0.003740f, +0.008278f, +0.008265f, +0.002909f, + +0.007524f, -0.001277f, +0.011481f, +0.008498f, +0.011511f, -0.004901f, -0.016619f, -0.000255f, -0.000585f, -0.007511f, + +0.002115f, -0.000269f, +0.000711f, -0.002236f, +0.001962f, -0.001669f, +0.007662f, +0.001749f, -0.005988f, -0.010650f, + -0.005021f, -0.004280f, -0.000409f, +0.001135f, -0.001599f, +0.001558f, -0.001049f, -0.001321f, +0.000421f, -0.002480f, + +0.001765f, -0.003442f, +0.001609f, -0.002312f, -0.001522f, -0.001544f, +0.001526f, -0.002665f, +0.000464f, +0.002709f, + +0.001073f, -0.006020f, -0.000898f, -0.001521f, -0.003458f, +0.000942f, +0.000823f, +0.000552f, -0.001315f, +0.001125f, + +0.000673f, +0.001379f, -0.000116f, +0.001044f, -0.000016f, -0.001525f + }, + { + -0.063191f, -0.751861f, +0.027437f, +0.027727f, +0.003766f, +0.005213f, -0.015200f, +0.031318f, -0.019346f, -0.009709f, + +0.002233f, -0.001218f, -0.030874f, -0.010005f, -0.017170f, +0.021490f, -0.012439f, -0.029927f, -0.032167f, -0.018822f, + +0.015510f, +0.007440f, +0.008704f, -0.010573f, +0.004436f, +0.013052f, +0.007352f, +0.014106f, +0.002211f, -0.010228f, + -0.003038f, -0.002821f, -0.030417f, +0.001517f, +0.007128f, -0.003232f, -0.009229f, -0.007179f, +0.002461f, +0.000562f, + +0.017205f, +0.000721f, -0.004907f, +0.006240f, +0.006032f, -0.003448f, -0.014565f, +0.002606f, -0.006544f, -0.013590f, + +0.003909f, -0.003789f, +0.000257f, -0.003166f, +0.004313f, +0.005597f, -0.005576f, +0.006882f, -0.004417f, -0.000073f, + -0.004234f, +0.001491f, -0.002193f, -0.005050f, +0.007509f, -0.000989f, -0.003405f, +0.003492f, -0.001043f, +0.001415f, + -0.002889f, -0.002344f, -0.000616f, +0.000020f, -0.004428f, -0.001783f, -0.002813f, +0.004755f, +0.005854f, -0.002479f, + +0.000037f, -0.002030f, -0.000434f, +0.000571f, -0.001260f, +0.001503f, +0.001471f, +0.000236f, -0.000010f, -0.000954f, + -0.004218f, -0.002175f, -0.000683f, +0.000700f, -0.001970f, -0.000392f + }, + { + +0.000752f, -0.013472f, +0.004545f, +0.006139f, -0.001583f, +0.000041f, +0.002850f, +0.002193f, +0.005759f, +0.000690f, + -0.013901f, -0.005272f, -0.023976f, +0.029400f, -0.009585f, +0.077641f, -0.025086f, -0.003736f, +0.011198f, +0.038742f, + -0.012502f, -0.012004f, +0.045835f, -0.067383f, -0.020397f, -0.021082f, -0.002536f, +0.043201f, -0.012339f, -0.028213f, + +0.018023f, +0.017590f, +0.003220f, -0.008369f, -0.021580f, -0.002282f, -0.008937f, -0.002596f, +0.001899f, +0.002852f, + +0.003440f, -0.000430f, -0.004215f, -0.012664f, -0.002768f, +0.006761f, +0.010569f, -0.005066f, -0.002964f, +0.001761f, + +0.006010f, +0.003100f, +0.003897f, +0.004276f, -0.006225f, +0.000345f, -0.000979f, -0.003650f, -0.002258f, +0.010052f, + +0.009489f, +0.004737f, -0.000073f, -0.006014f, +0.000258f, -0.001939f, +0.003090f, -0.004445f, +0.005500f, +0.002962f, + -0.000228f, -0.006262f, -0.003751f, -0.000951f, -0.002187f, +0.000847f, +0.002037f, -0.000469f, -0.001483f, -0.005138f, + +0.003256f, +0.001209f, +0.000802f, +0.001983f, +0.000637f, -0.004986f, +0.002205f, -0.000454f, -0.000905f, -0.000751f, + +0.000801f, +0.000873f, -0.000058f, -0.000377f, +0.000843f, -0.002089f + }, + { + +0.162421f, -0.017866f, -0.061923f, -0.045119f, +0.007353f, +0.008691f, +0.013411f, -0.005908f, +0.005341f, -0.002797f, + -0.012615f, +0.014580f, -0.012146f, +0.021606f, -0.056014f, +0.005920f, +0.011526f, -0.004775f, -0.001382f, +0.001312f, + +0.004983f, +0.004687f, +0.011461f, +0.014334f, +0.010868f, -0.007830f, -0.004294f, +0.012080f, -0.002397f, -0.016087f, + -0.026387f, -0.000168f, +0.005564f, +0.001400f, +0.003774f, +0.014561f, +0.000250f, +0.020562f, -0.014489f, +0.008574f, + -0.009223f, -0.008892f, -0.013835f, -0.001299f, -0.003632f, -0.006005f, -0.000264f, +0.013764f, -0.018698f, -0.008410f, + +0.001169f, -0.001712f, -0.008181f, -0.002652f, -0.000323f, +0.004038f, +0.003207f, -0.004854f, +0.000708f, -0.000238f, + -0.003553f, -0.009717f, -0.005625f, -0.001253f, -0.006121f, -0.002104f, +0.003703f, +0.007285f, +0.001436f, -0.000746f, + +0.004938f, -0.003709f, -0.005132f, +0.004537f, -0.002218f, +0.002303f, +0.000904f, -0.002756f, +0.001687f, +0.000471f, + -0.002635f, -0.000879f, -0.003096f, -0.002354f, -0.000075f, +0.002746f, +0.000051f, -0.000496f, -0.001206f, -0.001620f, + +0.000563f, -0.000261f, +0.000398f, +0.000081f, -0.000998f, +0.000123f + }, + { + +0.002204f, -0.004513f, +0.008013f, -0.011380f, +0.008592f, +0.000650f, +0.004472f, -0.001717f, -0.004764f, -0.001698f, + -0.000797f, +0.003010f, +0.009900f, +0.023719f, -0.084536f, +0.019909f, -0.021236f, +0.009902f, -0.034089f, +0.012755f, + +0.032592f, +0.000337f, +0.019109f, -0.061518f, -0.005026f, -0.022297f, -0.025219f, +0.016216f, -0.006426f, +0.012138f, + +0.001322f, -0.017059f, +0.004865f, -0.003305f, +0.002404f, +0.006507f, +0.007116f, +0.004890f, +0.012285f, +0.018330f, + -0.010892f, +0.008436f, +0.010035f, -0.008788f, +0.000945f, +0.002943f, +0.004834f, +0.000316f, -0.001097f, +0.001453f, + +0.014132f, +0.000097f, +0.003066f, +0.005061f, -0.003096f, -0.000678f, +0.000315f, -0.006460f, +0.002943f, +0.003120f, + +0.001847f, -0.000256f, -0.005769f, +0.001074f, +0.008283f, -0.000472f, +0.006808f, +0.000166f, -0.000476f, -0.004402f, + -0.000831f, -0.002741f, -0.001923f, -0.000866f, +0.000042f, +0.000114f, -0.001696f, +0.000403f, +0.001574f, +0.002216f, + +0.003456f, +0.007235f, -0.005105f, -0.000685f, -0.001603f, -0.000235f, +0.000179f, +0.000672f, +0.001634f, -0.002105f, + -0.000337f, +0.001190f, +0.000263f, +0.000828f, -0.001969f, -0.000523f + }, + { + +0.063667f, -0.044585f, -0.125064f, +0.004212f, +0.029951f, -0.038334f, -0.001526f, -0.040749f, +0.002457f, +0.001205f, + +0.014113f, -0.005008f, -0.006937f, +0.000215f, -0.021194f, -0.018592f, -0.005650f, +0.010592f, +0.041188f, +0.015752f, + +0.015088f, -0.005090f, -0.001708f, -0.017222f, -0.015777f, +0.005652f, +0.023432f, -0.010467f, -0.019296f, -0.010560f, + +0.014360f, -0.024733f, +0.013099f, -0.003960f, -0.016843f, +0.002957f, +0.014937f, +0.016718f, -0.001086f, -0.010597f, + -0.020306f, -0.000821f, +0.000346f, -0.004137f, -0.009076f, +0.000832f, +0.010382f, -0.000453f, +0.003766f, -0.010936f, + -0.001809f, +0.010110f, -0.002477f, -0.008939f, +0.006283f, -0.004469f, -0.003854f, +0.004412f, +0.002300f, +0.003156f, + +0.010219f, -0.000771f, -0.003351f, -0.004248f, -0.000092f, -0.010544f, -0.003895f, +0.007743f, -0.003171f, -0.001666f, + +0.001569f, +0.006715f, -0.000583f, -0.002776f, -0.000368f, -0.001408f, -0.000344f, +0.001021f, -0.004237f, +0.001089f, + -0.000272f, +0.005260f, -0.001807f, +0.006605f, +0.003314f, +0.001036f, -0.003985f, -0.002366f, -0.003709f, +0.001476f, + +0.000801f, -0.000164f, -0.001891f, +0.000453f, +0.000719f, -0.002686f + }, + { + -0.002708f, +0.094942f, +0.012797f, +0.015648f, -0.001875f, -0.005386f, +0.022146f, -0.002463f, +0.011298f, +0.002902f, + +0.008489f, +0.028642f, +0.010246f, -0.033016f, +0.002470f, -0.011655f, -0.000246f, +0.009117f, -0.069777f, +0.017993f, + -0.010536f, -0.018937f, +0.009038f, -0.003868f, -0.010912f, -0.008087f, -0.009619f, -0.014682f, +0.001068f, -0.014073f, + +0.013608f, -0.024820f, +0.000505f, +0.008989f, -0.018097f, -0.008078f, -0.007091f, -0.005290f, +0.012927f, +0.023858f, + +0.015762f, -0.003775f, -0.003715f, -0.003213f, +0.003805f, +0.016215f, -0.003474f, +0.018097f, -0.002633f, +0.005392f, + -0.011533f, -0.000636f, +0.008992f, +0.002214f, -0.006352f, -0.012596f, -0.001569f, +0.002541f, -0.001091f, +0.010411f, + -0.010067f, -0.000550f, +0.010333f, +0.008473f, +0.001160f, +0.000732f, -0.009734f, +0.003438f, +0.002434f, +0.001469f, + -0.005887f, +0.000597f, -0.003443f, -0.001051f, -0.002943f, +0.000640f, -0.002585f, -0.000166f, +0.001638f, -0.002729f, + +0.004106f, +0.001834f, -0.005832f, +0.001544f, -0.002584f, +0.000444f, -0.001792f, -0.000605f, -0.000993f, +0.001806f, + -0.000999f, +0.000347f, +0.001630f, -0.003755f, -0.001097f, -0.000198f + }, + { + -0.011894f, +0.416049f, +0.031517f, +0.007649f, -0.012482f, +0.040351f, +0.039309f, +0.006705f, -0.002291f, +0.021310f, + +0.017917f, +0.021020f, +0.012202f, -0.001672f, -0.046574f, -0.003135f, +0.008358f, +0.005106f, -0.018633f, +0.003727f, + -0.019315f, +0.018387f, -0.010741f, +0.020240f, -0.023244f, -0.012914f, -0.019338f, -0.003135f, +0.003861f, -0.000208f, + -0.015881f, +0.007968f, +0.010815f, -0.000834f, -0.005159f, +0.006494f, +0.003163f, +0.006640f, -0.009271f, +0.003283f, + -0.004872f, +0.002765f, +0.016266f, -0.010344f, -0.011919f, +0.010051f, -0.016635f, -0.001118f, +0.019836f, -0.006890f, + -0.002567f, +0.003945f, -0.007165f, -0.004794f, -0.006239f, -0.012976f, -0.003994f, +0.000573f, +0.000228f, -0.007867f, + +0.004353f, +0.006730f, +0.000939f, -0.002598f, -0.002802f, +0.000669f, +0.000341f, +0.004289f, -0.003175f, -0.002465f, + -0.000640f, -0.003781f, +0.003219f, +0.003305f, +0.003027f, +0.001510f, +0.004342f, +0.001552f, +0.004570f, +0.000606f, + -0.000943f, -0.001514f, +0.004933f, +0.001191f, -0.000043f, +0.001429f, -0.000390f, +0.002400f, -0.000562f, -0.000237f, + +0.000935f, -0.002554f, +0.000078f, -0.001069f, -0.001474f, -0.000232f + }, + { + -0.004666f, -0.059332f, +0.008517f, -0.010636f, -0.000345f, -0.015383f, -0.000910f, +0.016294f, +0.003339f, -0.013755f, + -0.009081f, -0.010107f, -0.012720f, -0.017330f, -0.101563f, -0.010713f, -0.002612f, -0.008223f, +0.033849f, -0.030172f, + +0.017932f, -0.061289f, -0.024537f, +0.019743f, -0.023983f, +0.007652f, +0.042210f, +0.031045f, -0.021942f, -0.012272f, + -0.018468f, -0.007991f, +0.023639f, -0.028741f, +0.009856f, +0.002666f, -0.004878f, -0.015243f, -0.008749f, +0.003448f, + -0.002412f, +0.006896f, -0.006204f, +0.000320f, -0.001174f, -0.004121f, -0.001590f, +0.001021f, +0.003050f, +0.004922f, + -0.001392f, -0.003503f, +0.008233f, -0.001256f, -0.002459f, +0.009554f, +0.010047f, +0.005712f, +0.004603f, +0.009268f, + -0.004496f, -0.000067f, +0.006381f, -0.005140f, -0.006968f, +0.002924f, -0.001117f, -0.002379f, +0.000966f, -0.000767f, + -0.006469f, +0.004411f, +0.000798f, -0.000018f, +0.001992f, +0.002718f, -0.002729f, -0.001817f, -0.002184f, -0.003602f, + +0.000027f, +0.003164f, +0.004195f, -0.001980f, +0.000763f, +0.000785f, -0.000139f, +0.001364f, +0.002358f, +0.001663f, + -0.001551f, +0.000073f, -0.000322f, -0.001407f, +0.001518f, -0.001062f + }, + { + -0.061202f, +0.096577f, +0.018573f, -0.055294f, +0.027354f, -0.030821f, +0.015595f, +0.004201f, +0.005804f, +0.010874f, + +0.018114f, -0.039551f, -0.023853f, -0.048921f, -0.027186f, +0.032076f, +0.036688f, -0.014346f, -0.032660f, -0.003966f, + +0.000466f, +0.000925f, +0.009236f, -0.006495f, -0.001175f, -0.013075f, -0.013334f, +0.002635f, -0.001306f, +0.014595f, + -0.003500f, -0.018786f, -0.004849f, -0.013481f, -0.007056f, +0.008275f, +0.000893f, +0.015909f, -0.016741f, -0.005507f, + +0.021814f, -0.002530f, +0.003544f, +0.013511f, +0.012395f, -0.006667f, +0.001110f, -0.012685f, -0.013842f, -0.007370f, + -0.002433f, -0.003128f, +0.000226f, +0.000117f, +0.003086f, +0.001078f, +0.001229f, -0.005133f, -0.004589f, -0.001984f, + +0.007759f, +0.002772f, +0.003643f, -0.000762f, +0.005117f, +0.006665f, +0.008558f, +0.005759f, +0.008967f, +0.001113f, + -0.004826f, +0.003451f, -0.003437f, +0.001040f, +0.000215f, -0.000844f, +0.000554f, -0.003278f, +0.000570f, +0.003681f, + +0.001422f, +0.001426f, +0.003010f, +0.001819f, -0.000696f, +0.001688f, -0.000197f, -0.001708f, +0.001412f, -0.000056f, + -0.001033f, -0.001852f, +0.000148f, -0.000218f, -0.000066f, -0.001096f + }, + { + +0.005269f, -0.112397f, +0.015100f, +0.002170f, +0.018749f, +0.003585f, +0.011178f, -0.003185f, -0.011481f, +0.012932f, + +0.006058f, -0.004980f, +0.012829f, -0.095898f, -0.077875f, -0.054608f, +0.067222f, +0.030269f, +0.036693f, +0.010683f, + +0.004506f, +0.054638f, +0.020833f, +0.023412f, -0.015135f, +0.004341f, -0.025642f, -0.016149f, +0.025576f, -0.015381f, + -0.002572f, +0.001371f, -0.003209f, -0.005380f, +0.004491f, +0.002785f, +0.001522f, +0.007732f, -0.006073f, +0.007771f, + -0.007450f, -0.010263f, +0.001155f, +0.004396f, -0.021766f, -0.001464f, +0.004680f, +0.008984f, -0.005733f, -0.001923f, + +0.004991f, +0.006788f, +0.000015f, +0.005528f, +0.009198f, +0.004664f, -0.002340f, -0.003235f, +0.007053f, -0.000284f, + -0.004357f, +0.010048f, +0.005481f, +0.002292f, -0.000479f, -0.003759f, +0.005209f, +0.002968f, -0.005962f, -0.003390f, + +0.002378f, +0.002030f, +0.002481f, +0.000719f, -0.004221f, +0.001159f, +0.004084f, -0.002619f, -0.003029f, -0.002872f, + -0.000641f, -0.002916f, -0.001434f, -0.000205f, +0.000179f, +0.000707f, -0.000024f, +0.002229f, +0.000677f, -0.000869f, + -0.000690f, +0.000981f, -0.000534f, +0.001331f, +0.000302f, +0.001966f + } + }, + { + { + +0.001477f, -0.529576f, -0.053199f, -0.039469f, +0.003830f, -0.020725f, +0.008074f, -0.020852f, -0.008955f, -0.030849f, + +0.003223f, -0.048716f, -0.015634f, +0.010822f, +0.029039f, -0.022888f, -0.013475f, +0.003306f, -0.016872f, -0.016479f, + +0.001366f, +0.013446f, -0.015675f, +0.011088f, +0.002938f, +0.014042f, +0.002292f, +0.008369f, +0.003434f, -0.030162f, + -0.014724f, +0.002854f, +0.019295f, +0.002082f, +0.017811f, -0.003918f, -0.002076f, +0.008465f, +0.011500f, +0.004965f, + -0.009365f, -0.004603f, -0.010985f, +0.002678f, -0.019565f, +0.005051f, -0.004332f, -0.008361f, -0.007899f, -0.013092f, + -0.009019f, +0.004303f, -0.006875f, +0.004442f, -0.000532f, -0.007147f, -0.004520f, +0.000847f, -0.002175f, -0.002876f, + +0.008791f, +0.002817f, -0.004619f, -0.005542f, -0.002195f, +0.000634f, +0.004847f, -0.005464f, +0.000372f, +0.001310f, + -0.004101f, -0.001443f, +0.000781f, -0.002672f, -0.001913f, -0.001738f, +0.001262f, +0.001139f, +0.001133f, +0.002845f, + -0.000098f, +0.000545f, +0.003761f, -0.001500f, -0.002651f, +0.001099f, +0.001280f, +0.001416f, -0.001107f, +0.001353f, + +0.000922f, -0.000167f, +0.000073f, +0.001462f, -0.000654f, +0.002199f + }, + { + +0.000433f, -0.022774f, -0.027920f, +0.031290f, -0.002948f, -0.002339f, -0.003491f, -0.002869f, -0.009706f, -0.012065f, + -0.021819f, -0.007039f, +0.025867f, -0.000961f, -0.008427f, +0.027188f, -0.001326f, -0.008983f, -0.017711f, +0.003392f, + -0.000220f, -0.011009f, +0.005201f, +0.014444f, -0.052730f, +0.021130f, +0.003252f, +0.034142f, +0.005778f, +0.007460f, + -0.018104f, +0.012219f, -0.001540f, -0.000788f, +0.009144f, -0.001732f, +0.014510f, +0.013502f, -0.003263f, -0.003501f, + +0.000273f, +0.010205f, +0.004807f, +0.000704f, +0.003140f, -0.005513f, +0.006615f, +0.000064f, -0.007822f, -0.010731f, + -0.000062f, -0.005927f, +0.005014f, -0.000933f, +0.005829f, -0.012468f, -0.000884f, -0.002948f, +0.008886f, +0.003629f, + -0.003112f, +0.001240f, -0.003696f, +0.003006f, -0.002133f, -0.001419f, +0.001639f, +0.004225f, +0.001897f, -0.000308f, + +0.002011f, +0.004127f, -0.007510f, -0.007134f, +0.001805f, +0.001655f, -0.000495f, +0.000742f, -0.000116f, -0.000103f, + +0.000447f, +0.000537f, -0.002153f, +0.003869f, +0.000631f, +0.000956f, -0.000019f, -0.000039f, -0.000954f, +0.001538f, + -0.001081f, -0.002236f, +0.000330f, +0.000403f, -0.000361f, -0.000878f + }, + { + +0.006181f, -0.115485f, -0.003486f, -0.008989f, -0.026763f, -0.004978f, -0.004790f, -0.024002f, +0.012985f, +0.011634f, + -0.014775f, +0.016822f, -0.032228f, -0.004046f, +0.040310f, +0.016231f, +0.012509f, +0.038893f, -0.009906f, +0.005116f, + +0.025975f, -0.002616f, +0.013719f, -0.019090f, +0.006612f, +0.038617f, -0.028486f, -0.004941f, -0.007402f, +0.005195f, + -0.007912f, -0.004318f, -0.017596f, +0.001154f, -0.012137f, +0.003147f, +0.002875f, -0.001963f, +0.000344f, +0.002685f, + +0.001207f, -0.004875f, +0.001542f, +0.004437f, -0.005016f, -0.001727f, +0.003232f, +0.008772f, -0.004901f, -0.005181f, + -0.000087f, +0.001072f, -0.004452f, +0.002785f, -0.003499f, +0.002278f, -0.001829f, +0.009835f, -0.002561f, +0.001961f, + +0.001388f, +0.000484f, +0.005093f, -0.003463f, -0.000001f, +0.003600f, +0.005556f, +0.000959f, -0.001843f, +0.001598f, + -0.001728f, -0.003259f, +0.004578f, +0.001379f, +0.004500f, -0.001607f, -0.002221f, -0.005563f, +0.005956f, +0.002330f, + +0.003713f, -0.005061f, -0.001030f, -0.000647f, +0.001541f, -0.001266f, -0.000590f, +0.001627f, +0.000893f, +0.001365f, + -0.002574f, -0.000531f, -0.000608f, -0.000879f, -0.000758f, +0.000328f + }, + { + +0.080322f, -0.484836f, -0.031029f, +0.042197f, +0.019459f, -0.003451f, -0.008147f, -0.014129f, -0.000706f, +0.007877f, + +0.003046f, -0.016910f, +0.005882f, +0.003854f, -0.043084f, -0.017791f, -0.025093f, -0.009799f, -0.018158f, +0.017662f, + +0.001351f, +0.017493f, +0.021652f, -0.011587f, +0.009662f, +0.019765f, -0.017576f, +0.007749f, -0.006847f, +0.009402f, + +0.008365f, -0.007069f, +0.008549f, -0.006188f, +0.008312f, +0.008315f, -0.012352f, +0.003781f, -0.002452f, -0.001873f, + +0.015867f, +0.000468f, +0.008561f, +0.008252f, -0.013044f, -0.002104f, -0.004432f, -0.016213f, +0.003875f, -0.002134f, + +0.010630f, +0.010428f, -0.005976f, -0.001811f, +0.004285f, +0.006747f, +0.010963f, -0.006669f, +0.006286f, -0.002788f, + +0.006623f, +0.008935f, -0.005520f, -0.003442f, -0.000023f, +0.003285f, +0.004225f, +0.005320f, +0.000558f, +0.001477f, + +0.002853f, +0.000571f, +0.001263f, -0.003181f, +0.003072f, -0.001303f, +0.003316f, +0.000278f, +0.000696f, -0.001227f, + -0.000249f, -0.004181f, -0.000175f, -0.000456f, -0.001154f, +0.000202f, -0.003027f, -0.000201f, -0.001291f, +0.000186f, + +0.001114f, +0.001598f, +0.000561f, +0.000084f, +0.002356f, +0.001241f + }, + { + +0.002238f, -0.038921f, -0.017659f, +0.000770f, +0.007172f, +0.001574f, -0.002929f, +0.011576f, +0.003156f, +0.003069f, + -0.009873f, +0.000350f, -0.023373f, -0.015656f, -0.049417f, -0.004439f, -0.022483f, -0.014419f, +0.078550f, -0.012744f, + -0.008536f, +0.036267f, -0.046229f, +0.007754f, +0.001779f, -0.011675f, +0.010229f, -0.000218f, -0.004213f, +0.014480f, + +0.008400f, +0.027346f, +0.004411f, -0.009989f, +0.001078f, +0.006667f, -0.003145f, +0.015368f, +0.014923f, +0.005355f, + +0.010778f, -0.011445f, +0.005552f, +0.014496f, +0.016222f, +0.002051f, -0.011138f, +0.007825f, +0.014459f, +0.001802f, + +0.009901f, -0.001180f, -0.001166f, -0.001120f, +0.002330f, -0.004184f, -0.000612f, -0.001621f, -0.001798f, -0.001677f, + +0.001595f, +0.000136f, +0.004275f, -0.001047f, -0.002395f, +0.003174f, +0.002887f, +0.003357f, +0.001634f, -0.002953f, + +0.002039f, -0.001733f, +0.003467f, +0.000404f, -0.001063f, -0.001088f, +0.004063f, -0.000425f, -0.001328f, -0.001195f, + +0.001695f, -0.002104f, -0.000092f, -0.001412f, -0.002266f, +0.000303f, -0.000967f, -0.000127f, -0.001083f, +0.002102f, + +0.001120f, +0.001359f, -0.002141f, -0.000214f, +0.000644f, -0.000075f + }, + { + +0.113570f, -0.612072f, -0.037817f, +0.044334f, -0.004079f, +0.000502f, -0.006614f, +0.044729f, -0.018122f, +0.003311f, + +0.008365f, +0.018720f, -0.003439f, -0.007229f, +0.009351f, +0.030198f, -0.015590f, -0.013942f, -0.006439f, +0.004867f, + +0.023212f, +0.010613f, +0.006900f, -0.014253f, -0.001927f, +0.010698f, +0.009338f, +0.020897f, +0.008789f, +0.005366f, + +0.002855f, -0.008503f, -0.034144f, -0.010695f, -0.005625f, -0.012913f, -0.012385f, +0.001063f, +0.002582f, -0.008987f, + +0.011979f, +0.006138f, -0.002149f, +0.007886f, +0.020563f, +0.012277f, -0.014601f, +0.001920f, +0.005380f, +0.004927f, + +0.009751f, +0.001951f, +0.001914f, +0.002089f, +0.006336f, +0.003369f, -0.010832f, +0.000832f, -0.007312f, +0.002718f, + -0.002554f, +0.005701f, +0.005205f, -0.001448f, +0.004607f, -0.000727f, -0.000696f, +0.001432f, -0.002448f, +0.003917f, + -0.001133f, +0.001422f, +0.000009f, -0.001360f, -0.002030f, -0.001121f, -0.003144f, +0.001260f, +0.003526f, -0.002310f, + +0.002775f, +0.000321f, -0.002573f, -0.000152f, -0.000613f, +0.001663f, +0.000808f, -0.000465f, +0.000664f, +0.000582f, + +0.000508f, -0.000013f, -0.001012f, +0.000725f, -0.000788f, +0.000180f + }, + { + +0.000197f, -0.025766f, +0.011649f, +0.011379f, -0.001493f, -0.001567f, -0.000894f, +0.004808f, +0.007543f, +0.004654f, + -0.001225f, +0.009306f, -0.008940f, +0.054635f, -0.007315f, +0.018913f, -0.057469f, -0.002157f, -0.015700f, +0.021394f, + +0.010881f, +0.017183f, +0.047930f, -0.059181f, -0.015775f, -0.018101f, -0.029545f, +0.033180f, -0.004678f, -0.036495f, + -0.004283f, +0.003166f, +0.004535f, -0.005595f, -0.011912f, +0.000993f, -0.004881f, +0.000440f, -0.003853f, -0.004237f, + +0.000579f, -0.003060f, -0.001176f, -0.001345f, -0.005822f, +0.003848f, +0.011676f, +0.003297f, -0.000040f, -0.003199f, + -0.000017f, +0.002456f, +0.002535f, +0.001103f, -0.006760f, +0.004253f, +0.001490f, +0.000004f, -0.002359f, -0.002825f, + -0.001978f, -0.002826f, -0.001188f, -0.004837f, +0.000403f, -0.002908f, +0.004436f, +0.001106f, +0.008829f, -0.000100f, + -0.002250f, -0.002575f, +0.000241f, -0.001758f, -0.002188f, +0.000943f, +0.000222f, -0.001078f, +0.000334f, -0.003651f, + +0.002083f, -0.001292f, +0.001067f, +0.000852f, -0.000910f, -0.001328f, +0.002721f, -0.001492f, +0.002288f, +0.000298f, + -0.000590f, -0.000765f, -0.001162f, +0.000508f, +0.000277f, -0.002229f + }, + { + -0.138895f, -0.279522f, +0.020939f, -0.091970f, +0.000202f, +0.006051f, +0.016852f, -0.001263f, +0.003474f, -0.001166f, + -0.012789f, +0.007249f, -0.007880f, +0.044331f, -0.031836f, +0.004026f, +0.035854f, +0.011135f, -0.022482f, +0.004373f, + +0.014985f, +0.007592f, +0.013912f, +0.010875f, +0.010993f, -0.003765f, +0.009146f, +0.011909f, -0.001779f, -0.009741f, + -0.017933f, +0.003079f, +0.012294f, +0.001160f, +0.002917f, -0.003144f, -0.011658f, +0.018985f, -0.015178f, +0.010963f, + -0.006190f, +0.000591f, -0.010950f, +0.008131f, +0.007855f, -0.000786f, -0.008595f, +0.016678f, -0.001155f, +0.005725f, + +0.014675f, +0.009732f, -0.004215f, -0.001759f, -0.000398f, +0.006979f, +0.007184f, -0.006690f, -0.000570f, -0.003985f, + -0.006980f, -0.007373f, -0.003068f, -0.000741f, +0.001055f, +0.001810f, +0.001806f, +0.004621f, +0.002089f, -0.004752f, + +0.001736f, -0.001614f, -0.005803f, +0.002019f, -0.004591f, -0.001168f, -0.002521f, -0.003432f, -0.000327f, -0.001239f, + -0.001499f, +0.003178f, +0.000797f, -0.000406f, +0.000466f, +0.001241f, -0.000158f, +0.002347f, -0.000009f, -0.002603f, + -0.001600f, -0.002111f, +0.000575f, +0.000651f, +0.000204f, +0.002820f + }, + { + -0.000105f, -0.022977f, +0.013192f, +0.003930f, +0.012926f, -0.001241f, +0.003094f, +0.001057f, +0.002298f, -0.000944f, + +0.002288f, +0.006909f, +0.005822f, -0.018208f, -0.130082f, +0.008272f, -0.037393f, -0.002526f, -0.034067f, +0.043195f, + +0.030528f, -0.029139f, +0.029148f, -0.069508f, -0.023766f, -0.009519f, -0.026043f, +0.021929f, +0.012962f, -0.003799f, + -0.003224f, -0.008113f, -0.003519f, -0.018699f, +0.012320f, +0.013460f, -0.009563f, -0.000878f, +0.018541f, +0.014541f, + -0.014166f, +0.010959f, +0.008195f, -0.002647f, -0.006260f, -0.010384f, -0.002226f, +0.000639f, +0.000267f, -0.005846f, + +0.004785f, -0.011209f, -0.004161f, +0.006442f, +0.000244f, -0.003571f, +0.002980f, -0.001774f, +0.005047f, +0.000387f, + -0.000800f, -0.003510f, -0.007182f, -0.000013f, +0.001257f, -0.004541f, +0.002455f, -0.001608f, -0.000196f, -0.002842f, + +0.002624f, -0.003257f, +0.001229f, +0.002562f, +0.000580f, +0.003899f, +0.001768f, +0.000554f, +0.003287f, +0.000989f, + -0.000051f, +0.004256f, -0.004990f, +0.000668f, +0.001337f, +0.001321f, -0.002229f, -0.000739f, +0.003301f, -0.002175f, + -0.000687f, +0.003317f, -0.000341f, +0.000904f, +0.000530f, -0.000811f + }, + { + -0.059617f, -0.023830f, -0.006555f, -0.008232f, +0.017525f, -0.000275f, +0.057712f, -0.009349f, -0.002965f, -0.000078f, + +0.019657f, -0.002042f, -0.025386f, -0.013219f, +0.000835f, +0.004381f, -0.017392f, -0.004764f, +0.003585f, -0.020209f, + +0.002990f, +0.011187f, +0.007971f, -0.007733f, +0.014850f, +0.014198f, +0.011487f, -0.011992f, +0.005247f, +0.005870f, + +0.010259f, -0.021713f, +0.022787f, +0.002881f, -0.024588f, +0.001432f, -0.009864f, -0.010272f, +0.005847f, +0.014791f, + -0.007679f, +0.001613f, +0.006265f, +0.004388f, -0.003159f, -0.011657f, +0.007972f, -0.001174f, -0.000855f, -0.006227f, + -0.001617f, +0.000001f, -0.003141f, -0.001983f, +0.009172f, -0.006553f, -0.004983f, +0.006714f, -0.000888f, -0.002020f, + -0.001985f, -0.006849f, -0.001459f, -0.003488f, +0.000597f, -0.008672f, -0.003381f, +0.004397f, -0.002583f, +0.001767f, + -0.001917f, +0.001399f, -0.000993f, -0.003334f, -0.000238f, -0.001507f, -0.000915f, +0.003689f, -0.001002f, +0.003626f, + +0.000039f, +0.005164f, -0.003718f, +0.003650f, +0.000888f, +0.003583f, +0.001655f, +0.001134f, -0.001790f, -0.000341f, + -0.002633f, -0.000451f, -0.002927f, -0.000510f, +0.002513f, -0.000204f + }, + { + +0.003815f, +0.050867f, -0.026289f, +0.002615f, -0.009383f, -0.018871f, +0.002702f, -0.006116f, +0.013900f, -0.015449f, + -0.017325f, +0.011375f, -0.000238f, -0.022882f, -0.007264f, -0.011697f, -0.008334f, -0.000266f, -0.060185f, +0.027524f, + -0.010493f, -0.009784f, +0.015672f, +0.012259f, -0.000212f, -0.022508f, -0.020877f, -0.007688f, +0.021559f, -0.007844f, + +0.004928f, -0.018519f, +0.003850f, +0.001380f, -0.007673f, +0.001974f, -0.010968f, -0.011003f, +0.003081f, -0.000710f, + +0.000563f, -0.006702f, -0.007733f, -0.001171f, +0.005432f, +0.007562f, -0.012914f, +0.013393f, -0.004304f, -0.005071f, + -0.019736f, +0.002308f, +0.006112f, -0.000635f, -0.007628f, -0.011722f, -0.001635f, +0.002324f, -0.000467f, +0.012847f, + -0.003262f, -0.003857f, +0.001300f, +0.006020f, +0.001455f, +0.005773f, -0.005927f, +0.000833f, -0.000617f, +0.001719f, + -0.002722f, +0.006382f, -0.000341f, -0.002190f, -0.002631f, +0.003674f, -0.001618f, -0.001118f, -0.000290f, -0.004165f, + +0.001634f, +0.000965f, -0.005971f, +0.002277f, -0.002529f, +0.001881f, +0.000640f, +0.000540f, -0.001296f, -0.001588f, + -0.001242f, +0.002284f, +0.003068f, -0.002005f, -0.000581f, -0.000588f + }, + { + -0.056499f, +0.383462f, +0.037830f, +0.006957f, -0.017878f, -0.003956f, +0.007624f, +0.013347f, -0.019117f, +0.007420f, + +0.008888f, +0.003615f, +0.016657f, +0.008399f, -0.035837f, -0.006610f, -0.004610f, +0.001311f, -0.024164f, -0.002382f, + -0.009083f, +0.024959f, -0.023121f, -0.004664f, -0.005330f, +0.021940f, +0.005459f, +0.004307f, -0.002617f, -0.000968f, + -0.010957f, +0.009216f, +0.003740f, -0.010954f, +0.015998f, +0.003568f, -0.026026f, -0.005075f, -0.014099f, -0.003434f, + -0.003325f, -0.000717f, +0.007392f, +0.002945f, -0.007733f, -0.001882f, -0.025215f, +0.002075f, +0.023622f, -0.003785f, + -0.012081f, -0.010668f, -0.006639f, +0.005024f, -0.006951f, -0.008867f, -0.001977f, -0.004389f, -0.005911f, -0.013143f, + +0.007003f, +0.008403f, +0.001800f, -0.002205f, +0.000103f, -0.003517f, -0.005461f, +0.006208f, -0.000286f, -0.004023f, + -0.003869f, -0.004121f, +0.002529f, +0.001725f, +0.004131f, +0.002986f, +0.004528f, +0.002280f, +0.003632f, -0.000179f, + -0.000111f, -0.002468f, +0.004834f, -0.000137f, -0.001653f, +0.001327f, -0.000922f, +0.001521f, -0.002421f, +0.001454f, + +0.001389f, -0.003120f, +0.001283f, +0.000222f, -0.000765f, -0.002000f + }, + { + +0.003701f, -0.094582f, -0.019585f, +0.011539f, +0.009653f, -0.010478f, +0.010224f, +0.012490f, -0.005110f, -0.018880f, + -0.000523f, -0.004196f, +0.019079f, +0.014670f, -0.044985f, +0.032291f, +0.036267f, +0.010895f, +0.028032f, -0.032133f, + +0.048456f, +0.010286f, -0.018912f, -0.027057f, -0.046469f, +0.005514f, -0.001633f, -0.000452f, -0.005420f, +0.014878f, + +0.002283f, +0.001354f, +0.013115f, -0.045422f, +0.004012f, -0.011416f, -0.006744f, -0.004766f, -0.009470f, -0.003990f, + -0.002244f, +0.014426f, +0.009465f, +0.010285f, -0.003135f, +0.009974f, +0.006443f, -0.000153f, -0.002791f, +0.005495f, + +0.009872f, -0.003324f, -0.001198f, -0.001255f, +0.001900f, +0.006505f, +0.002499f, -0.005150f, +0.000144f, +0.004349f, + -0.006385f, -0.000654f, +0.010540f, +0.002287f, -0.002808f, +0.004553f, -0.003386f, -0.008655f, -0.001482f, -0.001244f, + -0.004389f, +0.003855f, -0.001897f, -0.002927f, -0.004194f, +0.003106f, -0.002145f, -0.003827f, -0.001235f, -0.002475f, + -0.002528f, -0.003075f, +0.000679f, -0.003841f, -0.000092f, -0.001328f, -0.002513f, +0.001669f, -0.000940f, -0.000627f, + -0.000898f, +0.000398f, +0.000638f, +0.000674f, +0.001931f, -0.000964f + }, + { + +0.034909f, +0.224798f, +0.019710f, -0.036941f, +0.032958f, -0.052581f, -0.019279f, -0.020724f, -0.004436f, +0.014863f, + +0.021706f, -0.045663f, -0.003666f, -0.002928f, +0.019978f, +0.028690f, +0.044769f, -0.000545f, -0.021122f, +0.015235f, + +0.014495f, +0.008963f, +0.011876f, -0.002748f, -0.007068f, -0.013754f, -0.004991f, -0.007096f, -0.006415f, +0.002570f, + -0.009032f, -0.010148f, -0.001708f, -0.021797f, -0.009064f, -0.002205f, -0.021563f, -0.004959f, -0.022016f, +0.000905f, + +0.022825f, -0.020229f, -0.005578f, +0.002286f, +0.002636f, -0.017099f, -0.007603f, -0.002906f, +0.006504f, +0.013834f, + +0.015182f, -0.002520f, -0.007719f, +0.010607f, +0.014101f, +0.001024f, +0.002287f, -0.006521f, +0.000470f, +0.001791f, + +0.001700f, -0.000176f, +0.001770f, -0.002197f, -0.001616f, -0.002884f, +0.002485f, +0.002032f, +0.002857f, -0.000050f, + -0.003741f, +0.002636f, -0.003073f, +0.001495f, -0.000220f, -0.001653f, -0.000196f, -0.001621f, +0.002993f, +0.002837f, + -0.001782f, -0.001071f, +0.001923f, +0.003185f, +0.000667f, +0.002802f, -0.001511f, -0.002398f, +0.000742f, -0.001996f, + -0.000204f, +0.000376f, -0.000371f, -0.000121f, +0.000580f, -0.000662f + }, + { + -0.006714f, -0.104897f, +0.027938f, +0.003072f, +0.009754f, -0.015214f, +0.002405f, +0.004057f, -0.005420f, +0.011395f, + -0.009189f, -0.014552f, +0.017254f, -0.009221f, +0.060717f, -0.041344f, +0.038292f, +0.009182f, +0.011685f, +0.009610f, + -0.005601f, -0.003567f, -0.033259f, +0.016276f, +0.000144f, +0.010110f, -0.025014f, -0.013709f, +0.003976f, -0.026187f, + +0.015813f, +0.011717f, -0.000297f, +0.004374f, +0.006047f, +0.000934f, +0.021152f, +0.017582f, -0.014047f, +0.009792f, + -0.005966f, -0.008289f, +0.005154f, +0.002202f, -0.018742f, -0.007509f, -0.001596f, +0.003590f, -0.006485f, -0.001072f, + -0.004802f, +0.000305f, -0.004027f, +0.005589f, +0.009837f, +0.002430f, -0.003510f, -0.001619f, -0.001218f, -0.003751f, + -0.005556f, +0.004940f, +0.002636f, -0.000133f, -0.002104f, -0.002247f, -0.001414f, -0.002439f, -0.003766f, -0.008381f, + +0.000949f, +0.001670f, -0.000311f, -0.001655f, -0.001135f, +0.003521f, +0.000363f, -0.001227f, +0.002807f, -0.000180f, + -0.000220f, -0.003701f, -0.000084f, +0.003628f, +0.003812f, +0.000608f, -0.000540f, -0.000634f, -0.002847f, -0.002395f, + -0.002535f, +0.000108f, -0.000808f, +0.000023f, -0.000529f, +0.002831f + } + }, + { + { + -0.000851f, -0.277721f, -0.240802f, +0.003602f, -0.049267f, -0.005537f, -0.003462f, +0.004498f, -0.019744f, -0.002737f, + -0.020585f, -0.030604f, -0.040606f, -0.001402f, +0.045386f, -0.024887f, -0.011675f, +0.000382f, -0.005047f, -0.029676f, + -0.005454f, +0.012271f, -0.001383f, -0.008546f, +0.002102f, +0.014189f, +0.009146f, +0.019811f, -0.014154f, -0.010015f, + -0.025454f, +0.000062f, +0.017606f, +0.013736f, -0.002110f, +0.003233f, -0.003892f, +0.011112f, +0.008532f, +0.001131f, + +0.003705f, -0.008104f, -0.014679f, +0.001725f, -0.004926f, -0.011911f, +0.004195f, -0.011572f, -0.005638f, -0.010440f, + -0.002564f, -0.010127f, +0.001273f, -0.005786f, +0.001195f, -0.001156f, -0.001424f, -0.002270f, -0.002916f, +0.002907f, + +0.003727f, -0.001154f, -0.004059f, +0.000058f, -0.004428f, +0.002043f, +0.002348f, -0.003888f, -0.002551f, -0.000725f, + -0.002106f, -0.001487f, +0.002100f, -0.002601f, -0.002661f, -0.001866f, +0.002005f, -0.000114f, +0.002491f, +0.002911f, + +0.001640f, +0.000393f, +0.001027f, -0.001990f, +0.000640f, +0.000754f, -0.000949f, +0.002410f, -0.000559f, +0.001479f, + +0.000909f, +0.000096f, +0.000039f, +0.000539f, +0.000995f, +0.001033f + }, + { + -0.002279f, -0.029376f, -0.016638f, +0.001771f, +0.019389f, -0.001596f, -0.003851f, -0.000280f, -0.005298f, -0.012170f, + -0.032490f, -0.008634f, +0.017689f, -0.010318f, -0.002627f, +0.017436f, +0.013289f, +0.002983f, -0.037813f, +0.010725f, + -0.008921f, -0.011205f, +0.020863f, +0.016943f, -0.053767f, +0.012767f, +0.022956f, +0.013141f, +0.008291f, -0.003894f, + +0.015359f, -0.016827f, +0.017462f, -0.003105f, +0.018520f, -0.004029f, +0.004841f, +0.006189f, +0.003484f, -0.003575f, + -0.001245f, +0.009717f, +0.009440f, -0.004505f, +0.006125f, -0.001992f, +0.000846f, -0.006160f, -0.000341f, -0.005711f, + -0.010178f, -0.000627f, +0.004886f, -0.000085f, -0.005109f, -0.004346f, +0.001751f, -0.001837f, +0.009922f, +0.001653f, + -0.003305f, -0.003581f, -0.001107f, +0.006127f, -0.002412f, +0.001244f, -0.000589f, +0.002587f, +0.004367f, -0.002926f, + +0.001437f, +0.002244f, -0.005879f, -0.005561f, +0.001770f, +0.000216f, +0.000416f, +0.001848f, -0.000263f, -0.000088f, + +0.001727f, -0.002264f, +0.000263f, +0.002218f, +0.002452f, +0.001276f, -0.002045f, +0.000118f, +0.000408f, +0.001426f, + -0.001477f, -0.001616f, +0.000990f, +0.000327f, -0.001537f, +0.000899f + }, + { + -0.003851f, -0.046432f, -0.044008f, -0.038206f, -0.000826f, -0.006893f, -0.003215f, -0.005973f, -0.003622f, +0.001522f, + +0.012721f, -0.013580f, -0.008362f, -0.010205f, +0.023550f, +0.029596f, +0.013442f, +0.040797f, -0.033651f, +0.019625f, + +0.020371f, +0.011720f, +0.000667f, -0.008158f, +0.020044f, +0.015341f, -0.009990f, -0.008144f, +0.005332f, -0.001519f, + -0.012485f, -0.005482f, -0.008066f, -0.019856f, -0.009124f, +0.003318f, +0.008912f, +0.000797f, -0.001574f, -0.001964f, + -0.003001f, +0.003764f, +0.005370f, -0.002200f, +0.003298f, -0.004796f, +0.006400f, +0.007067f, -0.008571f, -0.004619f, + +0.005500f, -0.002891f, -0.002217f, -0.004724f, +0.003929f, -0.002398f, +0.005705f, +0.001048f, -0.000218f, +0.001408f, + +0.004272f, +0.000170f, +0.004026f, -0.003332f, -0.001244f, +0.005333f, +0.002404f, -0.001938f, +0.001536f, +0.001898f, + -0.001740f, -0.001655f, +0.003087f, +0.000466f, +0.003956f, +0.002251f, -0.005978f, -0.002622f, +0.002349f, +0.002104f, + +0.003305f, +0.000010f, -0.002832f, -0.000240f, +0.000875f, +0.000262f, -0.000869f, +0.000463f, +0.001033f, +0.001408f, + -0.000610f, -0.001659f, -0.002011f, -0.001990f, +0.000834f, +0.001200f + }, + { + -0.094552f, -0.344672f, +0.045941f, +0.092823f, -0.023101f, -0.001011f, -0.007762f, -0.010612f, +0.008446f, -0.012525f, + +0.005368f, +0.004840f, -0.008723f, -0.012664f, -0.040884f, -0.005732f, -0.041957f, -0.012010f, +0.002090f, +0.000231f, + +0.007838f, +0.015430f, +0.017682f, -0.011791f, +0.000790f, +0.011721f, -0.002115f, +0.006856f, +0.003588f, +0.005238f, + +0.017990f, -0.010550f, +0.006140f, -0.000791f, +0.002343f, +0.002540f, +0.001747f, -0.001159f, -0.007098f, +0.009491f, + +0.001170f, +0.007647f, +0.008657f, -0.003633f, +0.001489f, -0.000627f, -0.010794f, -0.010237f, -0.004250f, +0.007081f, + +0.004425f, +0.012691f, -0.002948f, -0.004672f, +0.009235f, +0.007252f, +0.004614f, +0.001701f, -0.004785f, +0.002030f, + +0.006057f, +0.007410f, -0.001948f, -0.004001f, -0.002814f, +0.005319f, +0.005434f, +0.002644f, -0.000624f, +0.003268f, + +0.000938f, +0.000616f, +0.001127f, -0.000506f, +0.000267f, -0.000770f, +0.002613f, +0.001979f, -0.000260f, -0.000577f, + -0.001623f, -0.000473f, -0.003005f, -0.001743f, -0.001137f, +0.000894f, -0.001291f, -0.001648f, -0.000417f, +0.000294f, + +0.001224f, +0.000871f, +0.000690f, +0.000976f, +0.001082f, +0.001335f + }, + { + -0.001199f, -0.064311f, +0.007976f, +0.010549f, -0.000050f, -0.000683f, +0.002166f, +0.007028f, +0.008034f, +0.000727f, + -0.006881f, +0.004963f, -0.013220f, -0.017933f, -0.038585f, -0.053205f, -0.030733f, +0.073288f, +0.011223f, +0.005776f, + +0.004932f, +0.018122f, -0.015996f, -0.018827f, -0.007911f, -0.021063f, +0.042164f, -0.013887f, +0.001969f, +0.009245f, + +0.011410f, +0.012673f, +0.005051f, +0.007708f, -0.002096f, -0.001524f, +0.004264f, +0.011860f, +0.009388f, +0.007068f, + +0.006442f, -0.006809f, +0.010940f, +0.009126f, +0.004744f, +0.006763f, +0.000925f, +0.001788f, +0.009767f, +0.010346f, + +0.009020f, -0.002234f, -0.002005f, -0.000987f, -0.000705f, -0.004659f, +0.000600f, -0.002779f, -0.003069f, +0.003113f, + +0.005813f, -0.005237f, +0.006338f, -0.001781f, +0.003487f, -0.003373f, +0.001978f, +0.006746f, +0.000732f, +0.001433f, + -0.001754f, +0.000587f, +0.000850f, +0.003971f, -0.002118f, -0.000290f, +0.002726f, +0.001399f, -0.001867f, -0.002157f, + +0.001274f, +0.000873f, -0.000938f, -0.001262f, -0.001631f, -0.000418f, -0.000499f, -0.000073f, +0.000402f, +0.000454f, + +0.001290f, +0.001052f, -0.001524f, -0.000085f, +0.000999f, +0.000223f + }, + { + -0.130693f, -0.375111f, +0.026557f, +0.009649f, +0.023491f, -0.000570f, +0.025115f, +0.013864f, -0.015985f, +0.022349f, + +0.005842f, -0.011936f, +0.022237f, +0.000365f, +0.005558f, +0.013351f, -0.010235f, -0.004173f, +0.002148f, +0.025091f, + +0.005461f, +0.005493f, +0.006035f, -0.004455f, -0.011591f, +0.002160f, +0.015518f, +0.007845f, +0.019122f, +0.016782f, + -0.004495f, -0.014513f, -0.022106f, -0.014898f, -0.012073f, -0.008455f, -0.003210f, +0.003611f, -0.005888f, -0.008984f, + +0.002340f, +0.008187f, +0.009315f, -0.002235f, +0.016621f, +0.010356f, -0.010225f, +0.001083f, +0.007194f, +0.007548f, + -0.000224f, +0.008928f, -0.003261f, +0.012553f, +0.000251f, +0.002546f, -0.002999f, -0.001147f, -0.005913f, -0.000673f, + +0.001889f, +0.001044f, +0.002852f, +0.005636f, -0.002974f, -0.001148f, +0.003510f, -0.001407f, +0.001306f, +0.000805f, + -0.000106f, +0.002618f, -0.003519f, -0.000050f, -0.000643f, -0.000201f, -0.002049f, +0.000734f, -0.000283f, +0.000620f, + +0.001388f, +0.002861f, -0.002732f, -0.001368f, +0.000059f, +0.001515f, -0.000024f, -0.000640f, +0.000140f, +0.002475f, + -0.000349f, +0.000284f, +0.000045f, -0.000316f, +0.000888f, +0.000116f + }, + { + -0.000902f, -0.023093f, +0.011804f, +0.002419f, +0.007312f, -0.001573f, -0.002095f, +0.006261f, +0.003469f, +0.001074f, + +0.006760f, +0.007456f, -0.000139f, +0.009465f, +0.010427f, -0.028625f, +0.002705f, -0.002965f, +0.001434f, -0.001132f, + +0.013476f, +0.011650f, +0.039000f, -0.008155f, -0.032951f, +0.001361f, -0.039013f, +0.007640f, -0.009668f, +0.003242f, + -0.014449f, -0.011339f, -0.002268f, +0.011608f, +0.000209f, -0.013569f, +0.002004f, +0.002188f, -0.006076f, -0.006189f, + -0.000191f, -0.003051f, -0.002650f, -0.002588f, -0.001053f, +0.007413f, -0.000246f, +0.010621f, +0.002674f, -0.003131f, + -0.002986f, +0.003347f, +0.001769f, -0.005161f, -0.000603f, +0.002001f, +0.003460f, -0.006295f, +0.005647f, -0.005925f, + -0.004123f, -0.001220f, -0.001741f, -0.002373f, -0.000325f, -0.000087f, +0.003145f, +0.002272f, +0.006174f, -0.001979f, + +0.000220f, -0.001558f, +0.000344f, -0.002121f, -0.000315f, -0.001542f, +0.001475f, +0.000488f, -0.000421f, -0.001586f, + -0.000925f, -0.001537f, +0.002721f, +0.000385f, -0.000968f, -0.000218f, +0.001390f, -0.001156f, -0.000041f, +0.001622f, + -0.000108f, -0.002088f, +0.000594f, +0.000476f, -0.001188f, -0.000388f + }, + { + +0.090355f, -0.432231f, -0.072197f, -0.094932f, -0.018809f, +0.006460f, -0.002932f, +0.007184f, +0.006705f, +0.013322f, + -0.003841f, -0.021931f, -0.005852f, +0.014143f, +0.028598f, -0.018625f, +0.014880f, +0.024755f, -0.017216f, +0.012428f, + +0.010953f, +0.008584f, +0.008386f, +0.008497f, +0.004414f, +0.002634f, +0.015055f, -0.000878f, -0.006060f, -0.008932f, + -0.003556f, -0.000484f, +0.006796f, +0.006097f, +0.002064f, -0.002419f, -0.007690f, +0.006225f, -0.001967f, +0.003504f, + -0.006784f, +0.002030f, -0.002319f, -0.001164f, +0.014868f, -0.005883f, -0.005321f, +0.015418f, +0.005465f, +0.010869f, + +0.012532f, -0.000695f, +0.003240f, +0.000135f, +0.001163f, +0.006345f, +0.002043f, -0.009080f, -0.001728f, -0.004906f, + -0.004915f, +0.000835f, -0.002939f, -0.001403f, +0.000979f, +0.004674f, +0.001382f, -0.002085f, +0.004629f, -0.002208f, + -0.001921f, +0.000456f, -0.001945f, -0.003090f, -0.001914f, -0.003089f, -0.002473f, -0.000972f, -0.003798f, -0.000958f, + +0.000975f, +0.001780f, +0.000702f, +0.000103f, -0.000778f, +0.002609f, +0.000223f, +0.000423f, +0.001958f, -0.002200f, + -0.002453f, -0.000485f, -0.000333f, +0.000728f, -0.000902f, +0.002216f + }, + { + -0.002046f, -0.000674f, -0.009989f, +0.018633f, +0.002102f, +0.000217f, +0.001128f, +0.003187f, +0.002278f, +0.001698f, + -0.002269f, +0.008584f, -0.002696f, -0.004764f, -0.100375f, -0.056053f, -0.029966f, +0.007775f, -0.020657f, +0.047838f, + +0.021952f, -0.033338f, +0.006958f, -0.010879f, -0.044826f, -0.019666f, +0.004117f, -0.012175f, +0.025116f, -0.013381f, + -0.007231f, +0.006911f, -0.007601f, -0.017654f, +0.020896f, -0.005072f, -0.005084f, +0.006961f, +0.007042f, +0.015962f, + -0.000761f, -0.000814f, +0.009222f, +0.002227f, -0.011414f, -0.008726f, -0.006113f, -0.001464f, +0.000965f, -0.000756f, + -0.001240f, -0.008998f, -0.005253f, +0.003250f, +0.000303f, +0.000625f, +0.004578f, -0.000225f, -0.000247f, -0.000878f, + +0.001713f, -0.005213f, -0.002630f, -0.004075f, +0.000294f, -0.001504f, -0.002418f, -0.000973f, +0.002670f, -0.003240f, + -0.000406f, -0.002256f, +0.001592f, +0.002928f, +0.002073f, +0.001522f, +0.003666f, +0.000307f, +0.001987f, +0.001669f, + -0.001015f, -0.001865f, +0.000979f, +0.001274f, +0.000992f, +0.000715f, -0.001957f, +0.000097f, +0.001809f, -0.001169f, + +0.001179f, +0.000390f, -0.000017f, +0.000515f, +0.001802f, -0.000376f + }, + { + +0.054731f, -0.025384f, -0.107790f, +0.025085f, -0.005672f, +0.011758f, +0.048596f, +0.005326f, -0.016275f, +0.016000f, + +0.005431f, +0.012909f, -0.025212f, -0.034762f, -0.012382f, +0.003436f, -0.001225f, +0.009269f, -0.024011f, -0.000092f, + +0.007325f, +0.004671f, +0.002357f, -0.007060f, +0.025362f, +0.017051f, -0.000837f, -0.004848f, +0.010699f, +0.002001f, + -0.015727f, +0.008060f, +0.003797f, +0.013428f, -0.015480f, -0.010340f, -0.011476f, -0.008567f, +0.007373f, +0.011241f, + -0.002506f, +0.000271f, +0.003137f, +0.003329f, +0.010221f, -0.010133f, -0.007267f, +0.002930f, -0.003684f, -0.003343f, + +0.007567f, -0.008711f, +0.000654f, +0.000948f, +0.000753f, -0.000033f, -0.008363f, +0.004393f, -0.000460f, -0.002779f, + +0.000965f, -0.007448f, -0.004828f, +0.000345f, -0.003275f, -0.004269f, +0.000298f, -0.001071f, +0.003057f, -0.001748f, + +0.000656f, -0.000275f, -0.001863f, -0.003446f, +0.003045f, -0.001971f, +0.000864f, +0.000663f, +0.000446f, +0.001572f, + +0.003335f, +0.002447f, -0.000932f, +0.001830f, +0.001864f, +0.001489f, +0.001738f, +0.001008f, -0.000631f, -0.000371f, + -0.003137f, -0.000179f, -0.003098f, -0.000104f, +0.000971f, +0.001904f + }, + { + -0.004262f, -0.007976f, +0.028233f, -0.004156f, -0.004316f, -0.002756f, -0.017308f, -0.008755f, +0.001507f, +0.005374f, + -0.005118f, -0.017290f, -0.008100f, -0.018270f, -0.010257f, -0.003215f, -0.016903f, +0.012316f, -0.017824f, -0.013921f, + -0.003977f, -0.000826f, +0.001064f, +0.012920f, +0.009069f, -0.010065f, -0.026091f, -0.003405f, -0.002202f, +0.014342f, + +0.002243f, -0.010358f, -0.001619f, -0.003049f, +0.010681f, -0.019936f, -0.002869f, -0.010093f, +0.003164f, -0.003707f, + -0.012349f, +0.008739f, -0.011497f, -0.002198f, +0.003511f, -0.001771f, +0.003899f, -0.004455f, -0.004247f, -0.007702f, + -0.006804f, -0.000797f, -0.001524f, +0.003213f, +0.000525f, -0.014574f, -0.002189f, +0.001036f, +0.000654f, +0.006863f, + +0.005892f, -0.003162f, -0.001790f, +0.003139f, +0.004884f, -0.000837f, -0.001345f, -0.000749f, -0.001209f, -0.000287f, + +0.000695f, +0.004226f, +0.001020f, -0.000724f, -0.001760f, +0.000742f, +0.000820f, -0.001101f, -0.001396f, +0.000273f, + -0.003017f, +0.000292f, -0.001342f, -0.000735f, -0.000942f, +0.000852f, +0.000639f, -0.000206f, +0.000518f, -0.001525f, + -0.001605f, +0.001871f, +0.002462f, -0.000745f, -0.000454f, +0.000262f + }, + { + +0.102628f, +0.202008f, -0.002539f, +0.003131f, -0.009516f, -0.012491f, +0.003694f, +0.004949f, -0.015128f, -0.003860f, + +0.023901f, +0.008673f, +0.006514f, -0.010135f, -0.004443f, -0.018143f, +0.002077f, -0.005743f, -0.028096f, -0.000277f, + +0.011778f, -0.002656f, -0.005407f, -0.015866f, +0.028134f, -0.003338f, +0.025591f, -0.007234f, -0.003177f, -0.011654f, + +0.006499f, +0.000840f, -0.003721f, -0.010880f, +0.008993f, +0.007596f, -0.016637f, -0.006185f, -0.013908f, +0.000170f, + -0.008940f, +0.008402f, -0.004916f, +0.004567f, +0.005101f, -0.018138f, -0.019604f, +0.009721f, +0.006633f, +0.000928f, + -0.007501f, -0.013498f, -0.002773f, -0.002609f, -0.002166f, -0.004252f, -0.007034f, -0.002655f, -0.007515f, -0.005893f, + +0.007259f, +0.004300f, +0.001166f, -0.000548f, -0.001416f, -0.000732f, -0.006001f, +0.001735f, +0.001788f, -0.004047f, + -0.003288f, -0.000919f, +0.000987f, +0.002009f, +0.002497f, +0.002855f, +0.003238f, +0.003108f, +0.003701f, -0.001414f, + +0.000226f, -0.000665f, +0.002093f, +0.002389f, -0.002146f, +0.000315f, +0.001103f, -0.000540f, -0.003021f, +0.002681f, + +0.000716f, -0.002617f, +0.000019f, +0.001156f, -0.000974f, -0.001542f + }, + { + -0.002083f, -0.101853f, -0.005458f, +0.010247f, +0.006475f, +0.002601f, +0.005717f, -0.000327f, +0.001693f, -0.018644f, + +0.002075f, -0.005488f, +0.015946f, +0.045521f, +0.018147f, -0.041428f, +0.032767f, +0.006796f, -0.003168f, +0.008348f, + -0.021880f, +0.058027f, -0.000008f, -0.035117f, -0.035140f, -0.005955f, -0.014427f, -0.014523f, +0.013542f, +0.021565f, + +0.007863f, -0.015784f, +0.009103f, -0.012795f, -0.010500f, -0.015843f, -0.004811f, +0.005428f, -0.000397f, -0.013624f, + +0.000720f, +0.004504f, +0.017929f, +0.010058f, +0.003798f, +0.003191f, +0.006352f, +0.000677f, -0.001474f, -0.000399f, + +0.012793f, -0.001489f, -0.001647f, +0.000180f, +0.001204f, +0.001630f, -0.002431f, -0.003486f, +0.001882f, -0.001759f, + -0.001103f, +0.000828f, +0.008417f, +0.001518f, -0.002232f, -0.000359f, -0.001024f, -0.007962f, +0.001615f, -0.001908f, + -0.003869f, +0.000069f, -0.000871f, -0.002301f, -0.003462f, +0.001515f, -0.000153f, -0.005011f, -0.002757f, -0.000375f, + -0.002816f, -0.003631f, -0.002240f, -0.000036f, +0.000216f, -0.002474f, -0.001732f, +0.000886f, -0.002253f, -0.001214f, + +0.000026f, +0.000723f, +0.000522f, +0.000337f, +0.001400f, +0.000616f + }, + { + +0.007064f, +0.260005f, -0.004064f, +0.020656f, -0.013406f, -0.028452f, -0.024755f, -0.012433f, +0.003027f, -0.008589f, + +0.033380f, -0.039665f, -0.000734f, -0.008758f, +0.039781f, +0.001411f, +0.029258f, +0.014416f, -0.011654f, +0.012643f, + +0.017614f, +0.014844f, -0.004992f, +0.002445f, +0.001529f, -0.007660f, -0.013364f, -0.009701f, +0.006646f, -0.016597f, + -0.007513f, -0.001815f, -0.006053f, -0.018518f, -0.005765f, -0.006255f, -0.008671f, -0.020802f, -0.002130f, -0.008680f, + +0.008485f, +0.003637f, -0.013477f, -0.007223f, -0.001570f, -0.010246f, -0.001439f, +0.000953f, +0.000220f, +0.009858f, + +0.011587f, +0.011166f, -0.004037f, +0.004169f, +0.010898f, -0.001132f, +0.000977f, -0.001286f, -0.001031f, +0.007251f, + -0.001984f, +0.000754f, -0.003510f, -0.001139f, -0.001124f, -0.000567f, -0.002028f, +0.001808f, +0.002450f, -0.005782f, + +0.004991f, +0.000994f, -0.002081f, +0.001082f, -0.000310f, -0.004325f, -0.002296f, +0.002210f, +0.002940f, +0.003752f, + -0.000599f, -0.002691f, +0.000193f, +0.003666f, +0.000957f, -0.000693f, -0.000357f, -0.000065f, +0.000061f, -0.003195f, + -0.000010f, +0.001525f, +0.000160f, -0.000011f, -0.000620f, +0.001542f + }, + { + +0.007725f, -0.085097f, -0.002819f, +0.012037f, -0.000184f, +0.000469f, -0.008656f, +0.001162f, -0.005206f, -0.003519f, + +0.001948f, -0.001045f, -0.005143f, -0.010877f, +0.105405f, -0.021055f, +0.000769f, +0.015712f, +0.001586f, +0.032245f, + -0.022675f, -0.022501f, -0.021134f, +0.004905f, +0.022954f, -0.006559f, -0.015629f, -0.035401f, -0.016469f, +0.011039f, + +0.006436f, +0.013007f, +0.002364f, -0.004920f, +0.003841f, +0.013974f, +0.012512f, +0.013325f, +0.003739f, +0.000885f, + +0.006534f, -0.011960f, +0.010278f, -0.010163f, -0.011505f, -0.006479f, -0.008686f, +0.000948f, +0.002242f, -0.006762f, + -0.004525f, -0.000004f, -0.001427f, +0.009961f, +0.005062f, +0.004217f, -0.002273f, -0.004174f, -0.004962f, +0.001670f, + -0.004565f, -0.001777f, +0.006486f, -0.000263f, -0.004333f, -0.004156f, -0.001646f, -0.005075f, -0.003201f, -0.004336f, + +0.000988f, -0.000056f, -0.001222f, -0.000169f, +0.001292f, +0.001860f, +0.002174f, -0.002136f, +0.000554f, +0.000815f, + -0.000455f, -0.004335f, +0.001222f, +0.003799f, +0.004437f, +0.000251f, -0.000879f, -0.000886f, -0.003476f, -0.001895f, + -0.002032f, -0.000139f, +0.000145f, -0.001367f, +0.000289f, +0.001109f + } + }, + { + { + -0.006202f, +0.041130f, +0.061582f, +0.049766f, -0.019043f, +0.008486f, -0.004938f, +0.015414f, -0.001801f, -0.005006f, + -0.010140f, +0.009812f, -0.031412f, -0.018326f, +0.016368f, -0.029276f, -0.011746f, -0.008309f, -0.002837f, -0.021529f, + -0.003875f, +0.011100f, +0.009701f, -0.004642f, -0.002708f, +0.007015f, -0.006484f, +0.004138f, +0.002837f, +0.010188f, + -0.013538f, +0.009230f, +0.007548f, +0.005840f, -0.004359f, +0.008621f, +0.002809f, +0.004991f, -0.004562f, -0.004017f, + +0.010237f, -0.001044f, -0.008975f, +0.001359f, +0.002034f, -0.004026f, +0.010194f, -0.003238f, +0.001293f, -0.003171f, + +0.002730f, -0.008230f, +0.004805f, -0.006399f, +0.003354f, +0.001585f, -0.000420f, -0.003339f, -0.003291f, +0.002334f, + -0.002133f, -0.003760f, -0.002120f, +0.001323f, -0.004703f, +0.002536f, +0.001981f, -0.001159f, -0.000374f, -0.000785f, + +0.000367f, +0.001503f, +0.002866f, -0.001644f, -0.001830f, -0.002285f, +0.000979f, +0.000538f, +0.002943f, +0.002155f, + +0.000796f, -0.001501f, -0.000329f, -0.001291f, +0.001088f, +0.000948f, -0.001507f, +0.001165f, -0.001632f, +0.000740f, + +0.000351f, +0.000456f, -0.000696f, -0.000166f, +0.000910f, -0.000400f + }, + { + +0.002388f, -0.002013f, +0.001642f, -0.017208f, +0.003652f, -0.002300f, -0.006857f, +0.006432f, +0.001338f, -0.000860f, + -0.017918f, -0.011738f, +0.012032f, -0.005955f, -0.005304f, -0.017767f, -0.007014f, +0.014100f, -0.001319f, +0.019621f, + -0.010130f, -0.001896f, +0.004210f, +0.021212f, -0.033534f, +0.011393f, +0.012005f, -0.003865f, +0.006070f, +0.000553f, + +0.026563f, -0.017789f, +0.012268f, -0.011748f, +0.008380f, -0.006895f, -0.004346f, -0.003868f, +0.001227f, -0.005803f, + -0.004918f, +0.003849f, +0.004683f, -0.009435f, +0.000791f, -0.002406f, -0.000740f, -0.007625f, +0.001422f, +0.002845f, + -0.005288f, -0.000796f, -0.000523f, -0.002058f, -0.004052f, -0.001357f, +0.003068f, -0.003720f, +0.006325f, +0.000325f, + -0.003106f, -0.002050f, -0.001394f, +0.003981f, -0.001226f, +0.001947f, -0.002760f, -0.000803f, +0.001507f, -0.001076f, + +0.003281f, +0.000296f, -0.000155f, +0.000148f, +0.002266f, +0.000100f, +0.001832f, +0.002474f, +0.000001f, -0.000890f, + +0.001502f, -0.000729f, +0.000592f, -0.001444f, -0.000106f, +0.000354f, -0.001771f, +0.000994f, +0.001007f, +0.002220f, + +0.000111f, -0.000927f, +0.000401f, +0.000555f, -0.000908f, +0.001295f + }, + { + +0.001390f, +0.026715f, +0.023965f, -0.010838f, +0.013290f, -0.004917f, +0.005052f, +0.002763f, -0.008130f, +0.004307f, + +0.013467f, -0.029244f, +0.001618f, +0.007243f, +0.014490f, +0.003786f, -0.021101f, +0.029407f, -0.030942f, +0.015067f, + +0.008164f, +0.000987f, +0.000790f, -0.001671f, +0.005095f, +0.008877f, +0.007410f, -0.000048f, +0.013077f, -0.002028f, + -0.009315f, +0.009476f, +0.000698f, -0.015174f, -0.004318f, +0.002657f, +0.001521f, -0.001183f, +0.002748f, +0.001566f, + -0.001903f, +0.003817f, +0.004633f, -0.003828f, +0.005793f, -0.006148f, +0.000144f, +0.000683f, -0.008068f, -0.004392f, + +0.002762f, -0.002726f, -0.000340f, -0.004872f, +0.004358f, -0.003320f, +0.002635f, -0.004803f, +0.000338f, -0.000192f, + -0.000273f, -0.004346f, +0.001065f, -0.002266f, -0.000657f, +0.002133f, -0.000152f, -0.001894f, +0.002987f, +0.001900f, + -0.000184f, -0.002040f, -0.000359f, -0.002432f, +0.000113f, +0.001487f, -0.001733f, -0.000359f, -0.001309f, -0.001942f, + +0.001264f, +0.002500f, -0.000661f, +0.001845f, +0.000685f, -0.000264f, -0.001033f, -0.000566f, -0.000630f, -0.000208f, + -0.000549f, -0.001037f, +0.000132f, -0.001064f, +0.000869f, +0.000608f + }, + { + +0.082386f, -0.140381f, +0.021834f, +0.103399f, -0.020785f, +0.010043f, +0.006187f, -0.005920f, +0.004864f, -0.004945f, + +0.003871f, +0.003117f, -0.004755f, -0.001658f, -0.011436f, +0.019428f, -0.010538f, -0.015781f, -0.012186f, +0.002405f, + +0.003791f, -0.004849f, +0.001171f, -0.011768f, -0.000140f, +0.009333f, +0.004736f, +0.006190f, -0.001134f, +0.002007f, + +0.018864f, -0.009438f, +0.002226f, -0.002574f, -0.001533f, -0.002442f, +0.002821f, +0.002079f, -0.005495f, +0.001555f, + -0.007895f, +0.002028f, -0.001021f, -0.005978f, +0.012107f, +0.010763f, +0.000788f, -0.002439f, -0.005295f, +0.001485f, + -0.004851f, +0.011367f, +0.004717f, -0.003116f, +0.000656f, -0.001467f, -0.002880f, +0.001033f, -0.005329f, +0.002208f, + +0.002470f, -0.000749f, +0.001310f, +0.003330f, -0.003478f, +0.000482f, -0.002391f, -0.002798f, +0.001267f, +0.001784f, + -0.000462f, +0.000638f, -0.001137f, -0.000949f, +0.000091f, -0.001213f, +0.001067f, +0.000850f, -0.000277f, +0.000174f, + -0.000671f, +0.000518f, -0.002559f, -0.000804f, +0.000185f, +0.002496f, +0.000336f, -0.001402f, +0.000322f, -0.000045f, + -0.001244f, -0.000402f, +0.000242f, -0.000135f, -0.000808f, +0.000198f + }, + { + +0.000645f, -0.061528f, +0.010580f, +0.008868f, -0.001804f, -0.000660f, -0.000097f, -0.001448f, +0.002533f, -0.000236f, + -0.015512f, -0.000743f, -0.011680f, -0.021339f, -0.018050f, +0.007924f, +0.005661f, +0.009743f, -0.051571f, +0.022514f, + +0.007028f, +0.014725f, -0.002325f, -0.018717f, -0.005183f, -0.009578f, +0.035617f, -0.027432f, -0.000532f, -0.005064f, + -0.004791f, +0.000753f, -0.003880f, +0.006031f, +0.000026f, -0.002744f, +0.004106f, +0.006895f, -0.007426f, -0.003019f, + +0.007776f, -0.006323f, +0.001573f, +0.001102f, -0.002859f, +0.004254f, +0.004158f, -0.003930f, +0.001553f, +0.006312f, + +0.002074f, -0.003874f, -0.001302f, +0.001040f, +0.001142f, -0.004786f, +0.000560f, -0.005009f, +0.000633f, +0.005565f, + +0.003342f, -0.004361f, +0.003814f, -0.003021f, +0.004315f, -0.002799f, +0.000229f, +0.002639f, +0.001276f, +0.003506f, + -0.004018f, +0.001063f, +0.001012f, +0.003109f, +0.000288f, +0.000258f, +0.001763f, +0.002119f, -0.000433f, -0.000831f, + +0.001064f, +0.001521f, +0.000373f, +0.001922f, +0.000124f, -0.000546f, -0.000560f, -0.000025f, +0.000042f, -0.000035f, + +0.001520f, +0.001283f, -0.000685f, -0.000298f, +0.000581f, -0.000384f + }, + { + +0.110560f, -0.094230f, +0.011348f, -0.037230f, -0.035301f, -0.004354f, -0.003057f, -0.014450f, -0.006173f, +0.007222f, + -0.012408f, -0.015268f, +0.009277f, -0.008440f, +0.013770f, +0.014582f, -0.001565f, +0.003759f, +0.001142f, +0.013605f, + -0.006782f, -0.007493f, -0.001494f, -0.002514f, -0.010900f, -0.001031f, +0.003873f, -0.002648f, +0.006681f, -0.000085f, + -0.000477f, +0.004961f, -0.003481f, -0.003286f, -0.001037f, +0.003121f, +0.002863f, +0.006777f, +0.003115f, -0.005086f, + -0.007908f, -0.008943f, -0.001479f, -0.011586f, +0.004661f, +0.006367f, -0.013331f, -0.004711f, +0.002563f, -0.002399f, + -0.009847f, +0.004219f, -0.004569f, +0.006792f, -0.001604f, +0.004269f, +0.001655f, +0.003078f, -0.002404f, +0.000709f, + +0.001454f, -0.002286f, -0.002701f, +0.003200f, -0.003344f, -0.002744f, +0.001982f, -0.003063f, +0.000074f, -0.000709f, + -0.000064f, +0.001460f, -0.002667f, +0.001906f, -0.000820f, +0.001219f, -0.001248f, +0.000822f, -0.001890f, -0.000912f, + -0.000285f, +0.002840f, -0.001067f, +0.000227f, +0.001044f, +0.001275f, -0.001011f, +0.000298f, +0.000124f, +0.000464f, + -0.000993f, +0.001112f, +0.000008f, +0.000204f, +0.001751f, -0.000261f + }, + { + -0.000381f, -0.015922f, +0.006083f, -0.006032f, +0.004448f, -0.000199f, -0.001702f, +0.006829f, +0.000239f, -0.001438f, + +0.004180f, +0.008540f, +0.003908f, +0.006965f, +0.001668f, -0.033378f, +0.038942f, +0.020846f, +0.006062f, -0.024524f, + +0.001127f, +0.019993f, +0.009396f, +0.000166f, +0.016634f, +0.029773f, -0.028301f, -0.010176f, -0.015229f, +0.028594f, + -0.001657f, -0.012060f, +0.003141f, +0.008444f, +0.002346f, -0.003470f, +0.005748f, +0.006204f, +0.000802f, -0.004488f, + -0.000266f, -0.005672f, -0.001268f, +0.002334f, +0.005447f, +0.009543f, -0.001655f, +0.007121f, -0.000264f, -0.001201f, + -0.004407f, -0.000858f, +0.005423f, -0.000985f, +0.000703f, +0.000360f, +0.002890f, -0.004557f, +0.006547f, -0.005594f, + -0.000645f, +0.004480f, +0.003557f, +0.002250f, +0.001411f, -0.000087f, +0.001020f, -0.001307f, +0.000052f, -0.003245f, + +0.002669f, +0.001470f, -0.000239f, -0.000155f, +0.002433f, -0.001621f, +0.000339f, -0.000436f, +0.000946f, -0.000345f, + -0.000269f, -0.000456f, +0.002058f, -0.000799f, -0.001272f, -0.000219f, +0.000788f, -0.001183f, -0.001270f, +0.000209f, + +0.000171f, -0.001042f, +0.001311f, +0.000852f, -0.000442f, +0.000382f + }, + { + -0.031846f, -0.409565f, +0.061353f, -0.075654f, +0.012552f, -0.000508f, -0.023662f, +0.000466f, +0.011005f, +0.009339f, + -0.003237f, -0.006408f, +0.000353f, -0.003763f, +0.019134f, -0.026926f, -0.001904f, +0.017785f, +0.005606f, +0.016590f, + -0.005716f, -0.008373f, -0.012236f, +0.000505f, +0.001557f, -0.000438f, -0.000863f, -0.012353f, -0.005913f, -0.002603f, + -0.000938f, -0.004770f, +0.002694f, +0.005491f, +0.001178f, -0.004497f, -0.011721f, +0.001493f, +0.000031f, +0.000697f, + -0.007609f, +0.005116f, +0.005530f, -0.005477f, +0.009442f, -0.005125f, -0.001874f, +0.011640f, +0.001705f, +0.001060f, + -0.000548f, -0.010568f, +0.000043f, +0.003080f, -0.000249f, +0.001809f, +0.000401f, -0.004036f, +0.003705f, -0.001611f, + -0.005094f, +0.005075f, +0.000356f, +0.000228f, +0.003300f, +0.004375f, +0.000901f, -0.003228f, +0.003003f, -0.000743f, + -0.001049f, +0.002839f, +0.001505f, -0.001880f, -0.002155f, -0.003561f, -0.001559f, +0.000373f, -0.001238f, -0.000872f, + -0.000180f, -0.000224f, -0.001824f, -0.000734f, -0.001214f, +0.001968f, +0.000048f, -0.001334f, +0.001516f, -0.000829f, + -0.001053f, +0.000712f, -0.000767f, +0.000620f, -0.001128f, +0.001148f + }, + { + +0.000212f, +0.010466f, -0.018547f, +0.007614f, -0.005842f, -0.000071f, -0.000686f, +0.000354f, +0.001344f, +0.002977f, + -0.006809f, +0.004024f, +0.003769f, +0.019602f, -0.056289f, -0.042743f, -0.000292f, +0.008684f, -0.018032f, +0.025212f, + +0.000708f, -0.001318f, -0.004557f, +0.004670f, -0.003653f, +0.010206f, +0.026774f, -0.018378f, +0.010979f, -0.005253f, + +0.010207f, +0.017117f, -0.010965f, -0.012619f, +0.016406f, -0.015236f, -0.007430f, +0.005726f, -0.003924f, +0.004252f, + +0.005669f, +0.002860f, +0.003051f, -0.005883f, -0.005062f, -0.000151f, +0.001135f, +0.000500f, -0.002009f, -0.003757f, + +0.001168f, +0.000372f, -0.003610f, -0.000133f, -0.001783f, -0.000857f, -0.001106f, -0.002496f, -0.001295f, +0.000701f, + +0.006181f, +0.000296f, +0.002566f, -0.001056f, +0.000209f, +0.000548f, -0.001609f, -0.002929f, +0.000328f, -0.005802f, + -0.001871f, -0.002462f, -0.000487f, +0.001718f, -0.000084f, -0.002422f, -0.000279f, -0.002252f, +0.000292f, +0.000199f, + -0.001016f, -0.000811f, +0.002753f, +0.000704f, +0.000786f, +0.001913f, +0.000136f, +0.001178f, +0.000733f, -0.000213f, + +0.001183f, -0.001351f, -0.000507f, -0.000166f, +0.001044f, -0.000199f + }, + { + -0.049023f, +0.032256f, +0.058908f, +0.008350f, -0.005563f, -0.018469f, +0.011465f, +0.021689f, -0.003994f, -0.001545f, + -0.010587f, +0.016343f, +0.006656f, -0.002320f, -0.008861f, -0.004767f, -0.003394f, -0.002139f, -0.018869f, +0.012343f, + +0.006037f, +0.001454f, +0.001012f, -0.016040f, +0.013816f, +0.001654f, -0.014398f, -0.008564f, +0.006277f, +0.007688f, + -0.015847f, +0.008659f, +0.000281f, +0.008442f, -0.013725f, -0.002485f, +0.000940f, -0.000301f, +0.004904f, +0.002354f, + -0.011786f, +0.001505f, -0.000366f, -0.009649f, +0.006553f, -0.002014f, -0.008474f, +0.001030f, +0.002470f, -0.001963f, + +0.008918f, -0.004258f, -0.001424f, -0.001262f, -0.001151f, +0.002127f, -0.005216f, +0.003829f, +0.000673f, -0.002718f, + +0.000319f, -0.005011f, -0.001537f, +0.001694f, +0.000327f, +0.000636f, +0.002894f, -0.000825f, +0.004764f, +0.000011f, + +0.001450f, +0.000543f, +0.002137f, -0.001168f, +0.002804f, -0.000797f, +0.000235f, -0.002422f, +0.000456f, +0.000864f, + +0.002668f, +0.000548f, -0.001922f, -0.000587f, +0.000202f, +0.000080f, +0.001041f, +0.001138f, -0.001351f, -0.000038f, + -0.001508f, +0.000975f, -0.001043f, +0.000291f, -0.000538f, +0.000808f + }, + { + +0.004856f, -0.033514f, +0.003861f, -0.003302f, -0.000525f, +0.002951f, -0.012784f, +0.003150f, +0.001056f, +0.014928f, + +0.007726f, -0.009892f, +0.008888f, -0.002140f, -0.004850f, +0.000488f, -0.006804f, +0.020633f, +0.000108f, -0.002185f, + +0.005729f, -0.004822f, -0.016222f, +0.003060f, +0.010144f, +0.000320f, -0.016333f, -0.010290f, -0.013994f, +0.023216f, + +0.018722f, -0.008415f, +0.000352f, -0.011769f, -0.000016f, -0.017500f, +0.008734f, -0.002409f, +0.004652f, -0.002383f, + -0.013960f, +0.007154f, -0.012593f, -0.001722f, +0.007207f, -0.007764f, +0.001524f, -0.001869f, +0.002746f, +0.002280f, + +0.001249f, -0.002700f, -0.002511f, +0.003151f, +0.004697f, -0.005681f, -0.000928f, -0.002155f, -0.000991f, +0.003902f, + +0.004366f, -0.005540f, -0.000581f, +0.003725f, +0.004020f, -0.004571f, -0.002824f, +0.000664f, +0.000495f, -0.000824f, + -0.001129f, +0.000770f, +0.001729f, +0.000694f, -0.001178f, -0.000645f, +0.000056f, +0.000051f, -0.000264f, +0.000769f, + -0.001321f, +0.001509f, -0.001765f, -0.001037f, -0.000226f, -0.000180f, +0.000450f, +0.000210f, +0.001204f, +0.000125f, + -0.000441f, +0.000474f, +0.000232f, -0.000059f, -0.000025f, +0.000369f + }, + { + -0.099443f, -0.108108f, -0.037781f, +0.005652f, +0.006328f, +0.021036f, +0.025653f, -0.012358f, -0.009653f, +0.008500f, + +0.015546f, +0.001939f, +0.003638f, -0.008413f, +0.011314f, +0.004398f, +0.003643f, -0.017835f, -0.022495f, +0.012945f, + +0.017895f, -0.004148f, +0.009578f, -0.000457f, +0.033381f, -0.003840f, +0.027082f, -0.008193f, +0.004110f, -0.012246f, + +0.004234f, -0.001539f, -0.009561f, -0.008503f, +0.004252f, -0.001524f, -0.014636f, +0.005960f, -0.003407f, +0.005404f, + -0.006079f, +0.002179f, -0.014049f, -0.000816f, +0.005099f, -0.011101f, -0.006415f, +0.004808f, -0.004500f, -0.000287f, + +0.003693f, -0.003602f, +0.000122f, -0.001004f, -0.002928f, -0.002220f, +0.000116f, +0.002698f, -0.000783f, +0.000425f, + +0.002954f, -0.000569f, -0.001663f, -0.000186f, -0.000786f, +0.002658f, -0.003489f, +0.000087f, +0.001924f, -0.000943f, + +0.001101f, +0.002842f, +0.000364f, -0.002220f, -0.002169f, -0.000815f, +0.000171f, -0.000763f, +0.000452f, -0.001470f, + +0.001719f, +0.000375f, -0.000321f, +0.001234f, -0.002422f, -0.000705f, +0.000735f, -0.001395f, -0.001305f, +0.002721f, + -0.000050f, -0.001009f, +0.000416f, +0.000846f, -0.000456f, +0.000417f + }, + { + -0.000038f, -0.072490f, +0.009017f, -0.003548f, -0.001994f, -0.006825f, +0.000007f, -0.005271f, +0.001077f, -0.008009f, + +0.009388f, -0.011589f, -0.011948f, +0.013923f, +0.001064f, -0.032618f, +0.017155f, -0.023559f, -0.002220f, +0.012185f, + -0.058625f, +0.001808f, -0.015873f, -0.013326f, -0.010053f, -0.000943f, -0.016093f, -0.014584f, +0.018557f, +0.004357f, + +0.007339f, -0.002575f, +0.009574f, +0.001831f, -0.001514f, +0.005597f, +0.012625f, +0.003655f, +0.009575f, -0.001525f, + +0.003704f, -0.000772f, +0.009671f, +0.000933f, +0.002041f, -0.005479f, -0.007196f, -0.004980f, -0.000333f, -0.003334f, + +0.005513f, -0.001994f, +0.002818f, +0.001277f, -0.002530f, -0.002558f, -0.003415f, +0.000198f, +0.001716f, -0.002662f, + +0.001777f, +0.000722f, +0.002128f, -0.001172f, -0.002326f, -0.001058f, +0.001372f, -0.004368f, -0.000040f, -0.001050f, + -0.000122f, +0.000112f, -0.000437f, -0.000539f, -0.000017f, +0.001235f, -0.000276f, -0.003860f, -0.001190f, +0.002264f, + -0.000230f, -0.000307f, -0.000779f, +0.001101f, +0.001508f, -0.001316f, -0.000836f, -0.000010f, -0.001184f, +0.000389f, + +0.000719f, +0.000496f, -0.001310f, -0.001190f, +0.000629f, +0.000214f + }, + { + -0.043096f, +0.168146f, -0.030473f, +0.040362f, +0.012291f, +0.026263f, +0.012631f, -0.001917f, +0.005331f, -0.019854f, + +0.021923f, -0.034651f, +0.007491f, -0.010788f, +0.019496f, -0.015587f, +0.009814f, -0.005260f, -0.015524f, -0.002917f, + -0.007017f, +0.008487f, -0.001062f, +0.002982f, +0.001049f, +0.001516f, -0.010771f, -0.003902f, +0.004683f, -0.013349f, + +0.006634f, +0.003111f, +0.001160f, -0.001840f, -0.000460f, -0.004702f, +0.007147f, -0.000378f, +0.006680f, -0.012692f, + -0.009844f, -0.000706f, +0.000361f, -0.002474f, +0.006316f, +0.008005f, +0.003442f, +0.000809f, -0.002101f, +0.000656f, + -0.000167f, +0.009585f, -0.000869f, -0.000089f, +0.007034f, -0.002507f, +0.001379f, +0.000533f, -0.004718f, +0.002052f, + -0.002939f, +0.002817f, -0.001011f, +0.002071f, +0.000949f, +0.000360f, -0.001710f, -0.000030f, +0.000860f, -0.004488f, + +0.006518f, +0.002088f, -0.001336f, -0.000542f, +0.000039f, -0.001934f, -0.002389f, +0.001192f, +0.001649f, +0.002346f, + +0.000821f, -0.000866f, -0.000408f, +0.001195f, -0.000516f, -0.002806f, +0.000101f, +0.000876f, +0.000551f, -0.001518f, + +0.000616f, +0.000953f, +0.000323f, +0.000050f, -0.000617f, +0.001683f + }, + { + -0.007661f, -0.057960f, +0.032244f, +0.000319f, -0.002592f, +0.007869f, -0.013671f, +0.004937f, +0.003828f, +0.001261f, + +0.001142f, -0.003576f, +0.010387f, -0.005616f, +0.081720f, -0.013428f, -0.008578f, +0.003546f, -0.010875f, +0.004853f, + -0.015452f, -0.001766f, -0.016162f, +0.000764f, +0.010830f, -0.008649f, -0.003531f, -0.008110f, +0.012994f, +0.010924f, + -0.012155f, +0.004741f, -0.002543f, -0.008183f, +0.003444f, +0.011376f, -0.002808f, +0.002315f, +0.002701f, -0.005618f, + +0.009545f, -0.001527f, +0.012718f, -0.005585f, -0.000219f, +0.005349f, -0.000347f, +0.000113f, +0.004650f, -0.002269f, + -0.000036f, -0.002099f, -0.003076f, +0.003164f, -0.002023f, -0.000154f, -0.004118f, -0.000725f, -0.001853f, +0.002517f, + -0.002703f, -0.001979f, +0.006234f, +0.000229f, -0.004178f, -0.004022f, +0.002133f, +0.000151f, +0.001590f, -0.000123f, + +0.001397f, +0.001209f, -0.000635f, +0.000150f, +0.000874f, +0.000803f, +0.001479f, -0.001549f, +0.000443f, -0.001457f, + -0.002021f, -0.001926f, +0.001524f, +0.001482f, +0.000852f, -0.000561f, +0.000204f, +0.000572f, -0.000507f, +0.000004f, + -0.000924f, +0.000896f, +0.000882f, -0.000960f, +0.000873f, -0.000433f + } + }, + { + { + +0.010017f, +0.090806f, +0.064807f, +0.020127f, +0.004666f, +0.005564f, +0.003327f, -0.001042f, +0.000838f, -0.000887f, + -0.011803f, +0.008190f, -0.007102f, -0.014462f, -0.005276f, -0.027594f, -0.012193f, -0.006058f, -0.007113f, -0.001164f, + -0.005687f, +0.008123f, +0.009737f, +0.002880f, -0.006749f, -0.003146f, -0.004776f, +0.004085f, +0.002364f, +0.003950f, + +0.001786f, +0.008836f, +0.000614f, +0.002411f, +0.003712f, +0.002269f, +0.011137f, -0.003219f, -0.005662f, +0.002438f, + +0.006168f, -0.002706f, +0.003574f, -0.002247f, -0.002014f, +0.004582f, +0.002178f, +0.001195f, +0.000254f, +0.000404f, + -0.001826f, -0.002437f, +0.000406f, -0.000691f, +0.001411f, -0.000990f, +0.001432f, -0.003912f, +0.000933f, -0.000788f, + -0.005143f, -0.000227f, -0.001379f, +0.000369f, -0.001383f, -0.000383f, +0.001600f, +0.000209f, +0.000488f, -0.000707f, + -0.000258f, +0.001185f, +0.000033f, +0.001293f, -0.002066f, -0.000481f, +0.000579f, +0.000741f, +0.001319f, +0.001312f, + +0.000438f, +0.000309f, -0.001786f, -0.001088f, +0.000522f, +0.000564f, -0.001244f, +0.000576f, -0.001054f, +0.000605f, + +0.000222f, +0.000306f, -0.000760f, +0.000526f, +0.000249f, -0.000234f + }, + { + -0.000934f, +0.016318f, -0.005139f, -0.002559f, -0.010752f, +0.001562f, -0.005891f, -0.000032f, +0.001502f, -0.003495f, + -0.007524f, -0.004713f, +0.002494f, -0.005453f, +0.000742f, -0.019450f, -0.002468f, +0.014635f, +0.024240f, -0.002472f, + -0.008762f, +0.003235f, -0.007579f, +0.004605f, +0.000896f, +0.002650f, -0.003836f, -0.000588f, +0.007135f, +0.008622f, + +0.009908f, -0.004046f, -0.000229f, +0.009017f, -0.017670f, +0.003139f, -0.009756f, -0.006206f, +0.004896f, -0.002968f, + -0.004024f, +0.000489f, -0.001464f, +0.002747f, -0.007896f, -0.002343f, -0.001404f, -0.002247f, -0.000988f, +0.002916f, + -0.002736f, -0.003698f, -0.000790f, -0.003445f, -0.000485f, -0.000016f, +0.001257f, -0.000847f, +0.002615f, -0.000698f, + -0.002518f, -0.000444f, -0.000632f, +0.000279f, +0.001014f, -0.001942f, +0.000184f, +0.000575f, -0.001234f, +0.000459f, + +0.002177f, -0.000712f, +0.003250f, +0.001007f, +0.000958f, +0.000501f, +0.000757f, +0.002617f, +0.000180f, -0.001278f, + -0.000893f, +0.001614f, +0.000362f, -0.001797f, +0.000051f, -0.000544f, -0.000399f, +0.000908f, +0.000538f, +0.001217f, + +0.000511f, -0.000046f, -0.000398f, +0.000335f, -0.000011f, +0.000698f + }, + { + -0.000143f, +0.047005f, +0.011701f, +0.020070f, -0.006701f, -0.001830f, +0.005955f, +0.005299f, -0.004522f, +0.001460f, + -0.000444f, -0.016231f, +0.001870f, +0.010118f, +0.000801f, +0.004075f, -0.006613f, +0.003183f, +0.002831f, -0.002871f, + +0.008315f, -0.013002f, +0.005524f, +0.003939f, -0.000640f, +0.001973f, +0.004511f, +0.005646f, +0.007912f, +0.000202f, + -0.005622f, +0.007685f, -0.002816f, -0.001946f, -0.007861f, -0.001776f, +0.002074f, +0.000656f, -0.000429f, +0.003712f, + +0.001994f, +0.002399f, +0.001566f, -0.001509f, -0.001139f, -0.000933f, -0.000983f, -0.005186f, -0.002510f, -0.004885f, + -0.001067f, +0.000828f, -0.000505f, -0.003664f, +0.003669f, -0.002763f, +0.001698f, -0.002229f, -0.000572f, -0.000391f, + -0.002893f, -0.001994f, -0.000762f, -0.000858f, -0.000732f, +0.000296f, +0.000654f, -0.000573f, +0.001661f, -0.000053f, + +0.002246f, -0.000713f, -0.002098f, -0.001858f, -0.000793f, -0.000577f, +0.001366f, -0.000623f, -0.001022f, -0.001548f, + -0.000563f, +0.001863f, +0.000971f, +0.001411f, +0.000350f, -0.000372f, -0.000800f, -0.000991f, -0.000492f, -0.000779f, + -0.000146f, -0.000461f, -0.000177f, +0.000147f, -0.000165f, +0.000524f + }, + { + -0.048100f, +0.063035f, -0.002537f, +0.083575f, +0.002580f, -0.001299f, +0.007027f, +0.003494f, +0.004862f, +0.002229f, + -0.004788f, +0.000340f, +0.004248f, -0.001384f, +0.012498f, +0.004222f, -0.002732f, -0.014356f, -0.008239f, +0.001509f, + +0.008400f, -0.010567f, -0.008513f, +0.000776f, -0.000356f, +0.007456f, -0.002246f, +0.007010f, -0.001245f, +0.002424f, + +0.011963f, -0.003139f, -0.002345f, -0.001487f, -0.000054f, +0.000270f, -0.000471f, +0.000154f, +0.000419f, -0.000114f, + -0.012188f, +0.004203f, -0.000606f, -0.005091f, +0.010607f, +0.007956f, +0.003531f, +0.001274f, -0.004576f, -0.004054f, + -0.001031f, +0.008371f, +0.002291f, +0.000418f, -0.001835f, -0.000902f, -0.002368f, -0.003597f, -0.000721f, +0.001997f, + +0.000198f, -0.001896f, +0.000322f, +0.003596f, -0.001061f, -0.002073f, -0.001137f, -0.002934f, +0.001105f, +0.000608f, + +0.000164f, -0.000144f, -0.000605f, -0.001103f, -0.000263f, -0.000975f, +0.000640f, -0.000327f, -0.000349f, -0.000280f, + +0.000861f, -0.000144f, -0.001034f, -0.001058f, +0.000704f, +0.001709f, -0.000054f, +0.000397f, -0.000463f, -0.000317f, + -0.001366f, +0.000169f, -0.001102f, +0.000244f, -0.001096f, -0.000177f + }, + { + +0.000420f, -0.049401f, +0.001055f, +0.003618f, +0.001106f, -0.000147f, -0.000060f, -0.004794f, -0.000105f, -0.000045f, + -0.009247f, -0.007926f, -0.013541f, -0.012068f, -0.005294f, +0.023234f, +0.003271f, -0.053061f, -0.016713f, +0.015281f, + +0.011442f, +0.000184f, +0.006047f, -0.010947f, +0.000301f, +0.018184f, -0.013103f, -0.010294f, -0.002860f, +0.004161f, + -0.006725f, +0.000379f, -0.007853f, +0.001709f, +0.003034f, -0.001709f, -0.003281f, +0.006377f, -0.006103f, +0.000720f, + -0.000461f, -0.001437f, -0.002726f, +0.001486f, +0.000428f, +0.003464f, -0.001904f, +0.000581f, -0.001972f, +0.003286f, + -0.000041f, +0.001002f, -0.002426f, +0.001166f, -0.002076f, -0.000894f, +0.000243f, -0.004314f, +0.004539f, +0.004995f, + -0.001588f, -0.001397f, -0.000043f, +0.000389f, +0.000907f, +0.001375f, -0.002489f, +0.000283f, +0.000458f, +0.002266f, + +0.000618f, -0.001244f, +0.001408f, +0.001119f, +0.002059f, +0.000657f, +0.002072f, +0.000442f, -0.000052f, +0.000162f, + -0.000438f, +0.001191f, +0.000965f, +0.001762f, +0.000232f, -0.000398f, -0.000294f, -0.000500f, +0.000403f, +0.000485f, + +0.000675f, +0.000719f, +0.000879f, -0.000045f, -0.000688f, -0.000013f + }, + { + -0.060383f, +0.135257f, -0.011593f, -0.045279f, -0.003187f, -0.005185f, -0.007650f, -0.007847f, -0.004536f, -0.013299f, + -0.002834f, -0.006215f, -0.011306f, -0.001520f, +0.011106f, +0.010120f, +0.007095f, -0.003002f, +0.007265f, +0.001592f, + -0.010665f, -0.004511f, -0.000411f, -0.006828f, +0.001346f, -0.002668f, +0.000988f, -0.002924f, +0.001986f, -0.003862f, + -0.000272f, +0.010689f, -0.002102f, -0.000172f, -0.000834f, +0.004661f, -0.001910f, +0.004640f, +0.006294f, -0.003495f, + -0.008408f, -0.008838f, -0.003977f, -0.003537f, -0.003839f, +0.000597f, -0.002628f, -0.000304f, -0.004613f, -0.006869f, + -0.003699f, -0.005587f, +0.000674f, +0.003544f, +0.002678f, -0.001052f, +0.004102f, +0.003857f, +0.001226f, +0.000344f, + -0.000107f, -0.004710f, -0.001356f, -0.000907f, -0.001466f, -0.001255f, -0.000824f, -0.001101f, -0.000871f, +0.000582f, + +0.000032f, -0.000500f, -0.001003f, -0.000331f, +0.000642f, -0.000630f, -0.000057f, +0.001436f, -0.001615f, -0.000838f, + -0.000889f, +0.001693f, +0.000118f, +0.000250f, +0.000481f, +0.001601f, -0.000614f, -0.000125f, +0.001089f, -0.001483f, + -0.000290f, +0.000324f, +0.000408f, +0.001364f, +0.000264f, -0.000034f + }, + { + +0.001319f, -0.003488f, -0.005813f, -0.004281f, +0.000225f, +0.000726f, -0.000947f, +0.003171f, +0.000970f, +0.001057f, + -0.000027f, +0.008203f, -0.002726f, -0.005135f, +0.000553f, +0.028454f, +0.012530f, +0.007736f, +0.008702f, -0.004442f, + -0.009273f, +0.004029f, +0.016097f, +0.006915f, +0.018475f, +0.012021f, -0.021863f, -0.006513f, -0.011869f, +0.021617f, + +0.002987f, -0.008440f, -0.010641f, +0.002956f, +0.010961f, +0.000208f, +0.005026f, +0.000997f, +0.006474f, -0.004502f, + -0.001694f, -0.003541f, -0.000867f, +0.003171f, +0.005713f, +0.007100f, -0.000337f, +0.006622f, +0.000980f, +0.001354f, + -0.006095f, -0.001595f, +0.006034f, +0.000768f, -0.000546f, +0.000397f, -0.000708f, +0.001749f, -0.000610f, -0.001317f, + +0.001549f, +0.004103f, +0.001551f, +0.002750f, +0.001016f, +0.002366f, -0.000227f, -0.002051f, -0.002432f, +0.000347f, + +0.000743f, +0.001104f, +0.000164f, +0.000463f, +0.000196f, -0.000547f, -0.000220f, +0.000437f, +0.000348f, -0.000307f, + -0.000646f, +0.000632f, +0.001574f, -0.001055f, -0.000973f, +0.000042f, +0.000424f, -0.001432f, -0.000341f, -0.000059f, + -0.000748f, +0.000474f, +0.000371f, +0.000933f, +0.000412f, +0.000113f + }, + { + -0.019144f, -0.323714f, -0.004829f, -0.050792f, -0.011981f, -0.000061f, -0.015179f, -0.002345f, +0.008634f, +0.006217f, + -0.003295f, -0.004151f, +0.006833f, -0.004161f, +0.011026f, -0.013036f, -0.001765f, +0.005661f, +0.005106f, +0.012063f, + -0.001498f, -0.008866f, -0.011574f, -0.003842f, -0.002038f, +0.004243f, -0.006826f, -0.010438f, -0.008435f, +0.003003f, + -0.002305f, -0.002815f, -0.001399f, +0.003639f, +0.003222f, -0.009443f, -0.000871f, -0.005892f, -0.002156f, +0.002046f, + +0.000326f, -0.001551f, +0.004867f, -0.000599f, -0.001883f, +0.000159f, +0.002215f, +0.003216f, +0.004680f, -0.002962f, + -0.004493f, -0.001549f, -0.004755f, +0.003763f, -0.002322f, +0.003625f, -0.001874f, +0.001048f, -0.001235f, +0.000835f, + -0.001674f, +0.000560f, +0.002160f, +0.001090f, +0.001934f, +0.004867f, +0.000717f, -0.000746f, +0.000289f, -0.000508f, + +0.001085f, +0.000048f, +0.001768f, -0.000711f, -0.002539f, -0.002697f, -0.001082f, -0.000597f, -0.000366f, -0.000216f, + -0.000984f, -0.000131f, -0.001509f, -0.001204f, +0.000216f, +0.000274f, -0.000689f, -0.000291f, -0.000134f, +0.000126f, + +0.000105f, -0.000202f, -0.000563f, -0.000213f, +0.000010f, +0.000507f + }, + { + +0.001702f, -0.004080f, -0.001356f, -0.006125f, -0.000549f, -0.000112f, +0.000835f, -0.001290f, +0.001150f, -0.000236f, + +0.002052f, -0.000184f, -0.003799f, -0.000527f, -0.013597f, -0.020795f, +0.001188f, -0.005185f, -0.009653f, +0.000623f, + +0.002533f, +0.015799f, +0.002279f, -0.006870f, +0.000701f, +0.015458f, +0.013876f, +0.010557f, -0.013509f, +0.003854f, + +0.014256f, +0.004942f, -0.001115f, -0.007104f, -0.000597f, -0.003040f, -0.006601f, -0.001949f, -0.000264f, -0.002333f, + +0.009058f, +0.004039f, -0.004707f, -0.006724f, -0.001144f, +0.001621f, +0.004571f, -0.000368f, -0.001625f, -0.003902f, + +0.001016f, +0.004713f, -0.005195f, +0.000495f, -0.001457f, -0.000931f, -0.002067f, -0.002461f, -0.001349f, +0.003878f, + +0.002814f, +0.002489f, +0.001541f, +0.000043f, +0.000568f, -0.000364f, -0.000279f, -0.001808f, -0.002891f, -0.002459f, + -0.003303f, -0.000559f, -0.000766f, -0.000897f, -0.001265f, -0.001320f, -0.000050f, -0.002318f, -0.000225f, -0.000157f, + +0.000281f, +0.000289f, +0.001040f, +0.001562f, +0.000218f, +0.001336f, +0.000612f, +0.001629f, +0.000134f, +0.000097f, + +0.000124f, -0.000431f, -0.000764f, +0.000166f, -0.000195f, +0.001046f + }, + { + +0.041891f, -0.041207f, +0.034631f, -0.004929f, +0.013842f, -0.016317f, -0.007971f, +0.013463f, +0.007009f, -0.006545f, + -0.005348f, +0.006885f, +0.019298f, -0.002753f, -0.000189f, -0.015138f, -0.002405f, +0.000449f, -0.016987f, +0.015210f, + +0.006188f, -0.002276f, -0.001471f, +0.000946f, -0.002204f, -0.006502f, -0.017111f, +0.003572f, +0.002222f, +0.007627f, + -0.017359f, +0.006594f, -0.000220f, +0.005368f, -0.003535f, -0.006840f, +0.001871f, +0.002442f, +0.004100f, -0.002889f, + -0.008837f, +0.000058f, +0.000842f, -0.009122f, -0.006888f, +0.004598f, -0.005567f, +0.003447f, +0.000018f, +0.001324f, + +0.001056f, +0.003473f, -0.001502f, -0.002260f, -0.001392f, +0.000172f, +0.000292f, +0.000044f, +0.001746f, -0.001528f, + -0.001556f, -0.001341f, -0.000898f, -0.000437f, +0.002590f, +0.001216f, -0.000859f, +0.002244f, +0.003924f, +0.000940f, + +0.000411f, -0.000049f, +0.002126f, -0.000397f, +0.001221f, +0.000110f, -0.001167f, +0.000012f, -0.000902f, +0.001572f, + +0.000805f, +0.001334f, -0.002362f, -0.000744f, -0.000368f, +0.000008f, +0.000843f, +0.000515f, -0.001077f, -0.000482f, + -0.000657f, +0.000114f, -0.000314f, +0.000124f, +0.000405f, -0.000878f + }, + { + -0.004876f, -0.033296f, +0.009675f, +0.005598f, -0.004128f, +0.002119f, -0.006367f, -0.000014f, -0.000136f, +0.008528f, + +0.004240f, +0.006601f, -0.002239f, +0.012866f, +0.002765f, -0.007048f, -0.004944f, +0.001576f, +0.016229f, +0.004258f, + -0.004510f, +0.000349f, -0.007035f, -0.006818f, +0.015124f, -0.011232f, -0.009512f, -0.016294f, -0.001262f, +0.011948f, + +0.024871f, -0.011624f, +0.001915f, -0.007390f, -0.009948f, -0.008810f, -0.000027f, +0.005499f, +0.007078f, -0.005231f, + -0.002860f, -0.004174f, -0.006347f, -0.002046f, +0.002606f, -0.002322f, -0.003427f, +0.003559f, +0.000847f, +0.004110f, + +0.000325f, -0.002352f, +0.000853f, +0.000296f, +0.002717f, -0.000996f, -0.003583f, -0.000951f, -0.001009f, +0.002007f, + +0.001730f, -0.003101f, +0.001460f, +0.002894f, +0.001132f, -0.000934f, -0.001939f, -0.000722f, +0.001734f, -0.001283f, + -0.001110f, -0.000870f, +0.001109f, +0.000901f, -0.000203f, -0.002370f, +0.000170f, -0.000493f, +0.000663f, +0.000130f, + +0.000699f, +0.000108f, -0.000707f, -0.000445f, -0.000326f, -0.000810f, +0.000009f, +0.000866f, +0.000700f, +0.000088f, + -0.000152f, +0.000572f, -0.000428f, +0.000357f, +0.000071f, +0.000365f + }, + { + +0.047880f, -0.311115f, -0.019974f, -0.009466f, +0.000805f, +0.044796f, +0.005574f, -0.018569f, -0.007963f, +0.009910f, + +0.010765f, +0.007287f, +0.000169f, -0.007607f, +0.000593f, +0.017871f, +0.003876f, -0.012170f, -0.022101f, +0.014880f, + +0.000307f, +0.009068f, +0.004791f, +0.016047f, +0.006079f, +0.009060f, +0.013406f, +0.002646f, +0.003494f, -0.008723f, + -0.001001f, -0.004241f, -0.002291f, +0.000622f, -0.004798f, -0.009363f, -0.004766f, +0.002703f, -0.000686f, +0.005861f, + -0.004422f, -0.000092f, -0.006154f, -0.010191f, +0.000257f, -0.002735f, -0.001223f, -0.002403f, -0.000631f, +0.000275f, + +0.000619f, +0.001175f, -0.004024f, +0.002394f, -0.005461f, -0.000120f, -0.001772f, +0.005353f, +0.001127f, +0.001520f, + -0.001957f, +0.002737f, -0.003414f, -0.000743f, -0.000755f, +0.002685f, +0.001714f, -0.002994f, -0.000000f, +0.000205f, + +0.002859f, +0.000250f, +0.000180f, -0.002290f, -0.001516f, -0.000614f, -0.000632f, -0.000527f, -0.000802f, +0.000046f, + -0.000091f, +0.000956f, -0.000069f, -0.000197f, +0.000216f, -0.001387f, +0.000119f, -0.000717f, -0.000825f, -0.000018f, + +0.000941f, -0.000143f, +0.000381f, +0.000034f, +0.000292f, +0.000377f + }, + { + +0.002202f, -0.053630f, -0.009798f, -0.003659f, +0.002215f, -0.005832f, +0.003094f, -0.006798f, +0.001984f, -0.004859f, + -0.001636f, -0.001029f, -0.008124f, +0.004089f, -0.023692f, -0.003331f, -0.005118f, -0.007435f, -0.005139f, -0.003435f, + -0.007511f, -0.047459f, -0.005632f, -0.020280f, +0.003212f, -0.005561f, -0.012173f, -0.020630f, +0.011820f, +0.001801f, + -0.001999f, +0.009255f, +0.011980f, +0.006827f, +0.001459f, +0.011876f, +0.008486f, +0.003659f, +0.006493f, -0.002836f, + +0.000629f, +0.000972f, +0.005616f, -0.002951f, +0.004009f, -0.001230f, -0.011299f, -0.001572f, -0.001727f, -0.003907f, + +0.003272f, +0.001423f, +0.004107f, -0.001282f, -0.004610f, -0.000482f, -0.002048f, +0.000749f, +0.001103f, -0.000776f, + -0.001318f, +0.001885f, -0.001008f, +0.001960f, -0.001009f, -0.002627f, -0.000727f, -0.000225f, -0.001612f, -0.000878f, + +0.001047f, -0.000448f, +0.000615f, +0.000121f, +0.000123f, +0.000125f, -0.000576f, -0.001720f, -0.000682f, +0.000309f, + +0.001055f, +0.001652f, -0.001009f, +0.001049f, +0.000262f, -0.000293f, -0.000594f, -0.000306f, -0.000334f, -0.000235f, + +0.001193f, -0.000324f, -0.001084f, -0.000440f, -0.000396f, -0.000478f + }, + { + +0.056154f, +0.017709f, +0.008070f, +0.009959f, +0.012594f, +0.027974f, +0.000990f, +0.013922f, -0.000666f, -0.003887f, + -0.015853f, -0.003433f, +0.000054f, -0.006478f, +0.008328f, +0.007313f, -0.009821f, -0.007310f, -0.014435f, -0.002476f, + -0.013220f, +0.003897f, +0.000653f, +0.001633f, +0.003935f, +0.000337f, -0.015320f, +0.006181f, +0.000251f, +0.001314f, + +0.003971f, -0.001027f, +0.000389f, +0.006606f, -0.005598f, -0.000732f, +0.008786f, +0.002648f, -0.001586f, -0.008941f, + -0.002362f, -0.008762f, -0.001338f, +0.000868f, +0.003384f, +0.014263f, +0.003706f, -0.004369f, +0.003796f, -0.006056f, + +0.000786f, +0.007420f, +0.002004f, -0.000652f, +0.002223f, +0.001323f, +0.000685f, +0.000190f, -0.006380f, -0.000718f, + +0.002110f, -0.000138f, +0.001820f, +0.003061f, -0.000690f, +0.000740f, -0.000573f, -0.001097f, -0.000833f, +0.000301f, + +0.001542f, +0.001858f, +0.001272f, -0.000131f, -0.001607f, -0.000189f, -0.002755f, +0.000761f, +0.001170f, +0.001233f, + +0.001480f, -0.000506f, +0.000257f, -0.001087f, +0.001111f, -0.001902f, -0.000207f, +0.000263f, -0.000190f, +0.000276f, + +0.000182f, +0.000069f, +0.000756f, -0.000043f, +0.000074f, +0.000790f + }, + { + +0.007682f, -0.030544f, -0.006187f, -0.001199f, -0.002859f, +0.005422f, -0.005872f, +0.007118f, -0.000246f, +0.002625f, + +0.002046f, -0.004834f, -0.003015f, +0.020464f, +0.037228f, +0.010576f, -0.004618f, -0.005754f, -0.015035f, -0.011414f, + +0.012682f, -0.007077f, -0.011032f, -0.004522f, -0.004433f, +0.001494f, -0.001674f, +0.007094f, +0.005173f, +0.003850f, + -0.003867f, -0.004087f, +0.001887f, -0.009315f, +0.001191f, +0.008350f, -0.002489f, -0.005813f, +0.006879f, -0.005605f, + +0.001245f, +0.004225f, +0.005542f, +0.006092f, -0.001078f, +0.001476f, +0.003074f, +0.001356f, +0.002834f, -0.001923f, + -0.001206f, +0.000548f, +0.000042f, -0.000470f, -0.001469f, -0.002964f, -0.001660f, -0.000633f, +0.000963f, -0.001105f, + -0.003179f, +0.001092f, +0.002485f, +0.000826f, -0.002845f, -0.000738f, +0.001159f, +0.001913f, +0.000498f, +0.001348f, + -0.000392f, +0.001710f, -0.000341f, +0.000729f, +0.000045f, +0.000566f, +0.000780f, -0.000405f, +0.000539f, -0.002605f, + -0.002462f, +0.000754f, +0.000683f, +0.000513f, -0.000527f, -0.000759f, +0.000182f, +0.000827f, +0.000581f, +0.000125f, + -0.000050f, +0.000789f, +0.000118f, +0.000186f, -0.000010f, -0.000625f + } + }, + { + { + -0.006723f, +0.065045f, +0.021526f, -0.022242f, -0.005087f, +0.001197f, -0.000163f, -0.004573f, -0.005879f, +0.008873f, + +0.010868f, +0.009867f, +0.000806f, -0.001406f, +0.009544f, -0.009952f, +0.005895f, +0.005522f, -0.003526f, +0.006370f, + +0.002548f, +0.006457f, +0.005332f, +0.002953f, -0.010116f, -0.004302f, -0.006617f, +0.002161f, +0.001906f, +0.001991f, + +0.000587f, +0.008404f, +0.001156f, +0.000118f, +0.000459f, -0.004669f, +0.009527f, +0.000813f, -0.001579f, +0.000211f, + +0.002947f, -0.000791f, +0.007086f, +0.001287f, -0.001264f, +0.005949f, +0.000562f, +0.001402f, -0.000137f, +0.002170f, + -0.000971f, -0.001413f, -0.000082f, +0.004422f, +0.001721f, -0.002384f, +0.002000f, -0.003523f, +0.001146f, +0.000863f, + -0.000973f, +0.003404f, +0.000161f, +0.000389f, +0.000404f, -0.000747f, +0.000300f, -0.000726f, +0.000436f, +0.000935f, + -0.000633f, -0.000412f, -0.000594f, +0.001431f, -0.001260f, -0.000075f, -0.000407f, -0.000352f, -0.000779f, +0.000139f, + -0.000258f, +0.000870f, -0.000140f, -0.000258f, +0.000229f, +0.000582f, -0.000377f, +0.000733f, -0.000382f, +0.000765f, + +0.000195f, -0.000041f, -0.000863f, +0.000475f, -0.000170f, -0.000206f + }, + { + +0.000346f, +0.013789f, -0.003100f, +0.025264f, +0.004894f, +0.001509f, -0.002810f, -0.004056f, -0.002235f, +0.001287f, + -0.000699f, +0.001234f, +0.005310f, +0.005214f, +0.010799f, +0.001719f, +0.007825f, -0.002791f, -0.000366f, -0.006651f, + +0.000720f, +0.011671f, -0.002207f, -0.003546f, -0.006141f, -0.008463f, -0.015483f, -0.002099f, +0.009564f, +0.004735f, + +0.002695f, -0.002114f, -0.004533f, +0.016752f, -0.012867f, +0.007644f, -0.002126f, -0.004754f, +0.001654f, -0.001540f, + -0.003669f, -0.000692f, -0.001664f, +0.007075f, -0.002511f, -0.002011f, -0.002920f, +0.002369f, +0.000211f, +0.002680f, + -0.001850f, -0.005297f, -0.001472f, -0.001817f, +0.000945f, -0.002426f, +0.000963f, -0.000777f, +0.001183f, -0.000994f, + -0.000594f, -0.000174f, -0.001180f, -0.000454f, +0.000753f, -0.001703f, -0.000192f, +0.000428f, -0.001246f, -0.000722f, + -0.000122f, -0.000537f, +0.002689f, +0.000149f, +0.000828f, -0.000079f, -0.000892f, +0.000359f, -0.001818f, -0.000283f, + -0.000058f, +0.001266f, +0.000197f, -0.000678f, +0.000136f, -0.000546f, +0.000705f, +0.000181f, -0.000949f, +0.000249f, + -0.000051f, +0.000354f, +0.000282f, +0.000117f, -0.000032f, -0.000022f + }, + { + +0.000814f, +0.020385f, -0.019981f, +0.033828f, +0.007681f, +0.000276f, +0.001511f, +0.004457f, +0.000028f, -0.002121f, + +0.001200f, -0.000569f, -0.000817f, +0.004340f, -0.001502f, +0.010372f, -0.000890f, -0.001702f, +0.010984f, -0.008375f, + +0.001961f, -0.014328f, +0.003965f, -0.007383f, -0.010580f, -0.005095f, +0.000303f, -0.004470f, -0.009353f, -0.000522f, + -0.005095f, -0.001446f, -0.003495f, +0.002827f, -0.000011f, +0.003539f, -0.000723f, -0.002013f, -0.001839f, -0.001606f, + -0.000828f, +0.000701f, +0.001310f, +0.002000f, -0.000715f, +0.000957f, -0.001686f, -0.007073f, -0.002271f, -0.002143f, + -0.000530f, +0.001512f, +0.003853f, +0.000900f, +0.004697f, -0.002454f, +0.001286f, +0.003589f, +0.002076f, -0.001464f, + -0.002106f, +0.000087f, -0.000152f, -0.000274f, -0.001926f, -0.000842f, -0.000087f, -0.001175f, -0.000039f, +0.000136f, + +0.002894f, +0.001047f, +0.000887f, +0.000262f, +0.000442f, -0.000355f, +0.001799f, -0.000643f, -0.000671f, +0.000222f, + -0.000004f, -0.000045f, -0.000143f, +0.000435f, +0.000486f, +0.000366f, -0.000389f, -0.000941f, -0.000230f, -0.000711f, + -0.000335f, -0.000014f, +0.000074f, +0.000315f, -0.000477f, +0.000250f + }, + { + +0.005790f, +0.136520f, -0.018566f, +0.074023f, +0.002450f, -0.004157f, +0.005136f, +0.009616f, +0.005153f, +0.001347f, + -0.003799f, +0.005058f, +0.014893f, +0.008118f, +0.010914f, -0.009910f, +0.000523f, -0.000949f, +0.010718f, +0.013062f, + +0.011199f, +0.001397f, +0.003217f, +0.004821f, +0.001173f, +0.011593f, -0.006674f, +0.006344f, -0.003641f, -0.003913f, + +0.005836f, -0.001301f, +0.001131f, +0.003463f, +0.003329f, +0.002124f, -0.006105f, +0.000070f, -0.001261f, +0.002441f, + +0.000591f, +0.007165f, -0.000669f, -0.002255f, +0.005932f, -0.001462f, +0.000060f, +0.003333f, +0.000371f, -0.001064f, + -0.003421f, +0.001671f, -0.000343f, +0.003090f, -0.000574f, +0.002231f, +0.000929f, -0.003314f, +0.001041f, +0.000943f, + -0.001630f, -0.001910f, -0.000149f, +0.001756f, -0.000080f, -0.002058f, -0.000843f, -0.000740f, +0.001683f, +0.000609f, + -0.000138f, -0.000287f, +0.000220f, -0.000855f, -0.000044f, -0.000469f, -0.000263f, -0.001945f, -0.000329f, +0.000670f, + +0.001405f, -0.000270f, -0.000301f, -0.000384f, +0.000400f, +0.000230f, -0.000497f, +0.000725f, -0.000582f, +0.000311f, + -0.000403f, +0.000721f, -0.001159f, +0.000523f, -0.000372f, +0.000457f + }, + { + -0.002288f, -0.044330f, -0.000060f, -0.003029f, +0.000912f, +0.000076f, +0.001081f, -0.002165f, -0.001605f, +0.003763f, + -0.003035f, -0.003858f, +0.000815f, +0.002121f, +0.004242f, +0.015753f, -0.013129f, -0.027393f, +0.017756f, +0.009590f, + +0.010156f, -0.010765f, -0.000887f, -0.004141f, -0.007262f, +0.011507f, -0.002805f, +0.008160f, -0.004244f, +0.009650f, + +0.007701f, +0.003190f, -0.002959f, -0.002671f, -0.000901f, +0.000005f, -0.005807f, +0.004240f, -0.003888f, +0.003932f, + -0.003277f, -0.002854f, -0.000785f, +0.003466f, -0.001534f, -0.000500f, -0.003910f, +0.001864f, -0.000014f, +0.003720f, + -0.000429f, +0.001558f, -0.001585f, +0.002213f, -0.001405f, +0.001428f, +0.001712f, -0.002197f, +0.003456f, +0.000954f, + -0.001561f, +0.001805f, -0.001704f, -0.000196f, +0.000563f, +0.002035f, -0.001998f, +0.000592f, +0.000345f, -0.000603f, + +0.001552f, -0.000278f, +0.000145f, -0.000364f, +0.001805f, -0.000200f, +0.000438f, -0.001055f, +0.000038f, +0.000203f, + -0.001360f, -0.000086f, -0.000328f, +0.000215f, +0.000416f, +0.000952f, +0.000291f, -0.000108f, +0.000981f, +0.000674f, + -0.000064f, -0.000036f, +0.001281f, +0.000584f, -0.000812f, +0.000469f + }, + { + +0.000165f, +0.206338f, -0.008699f, -0.023547f, -0.003743f, -0.000164f, +0.001430f, +0.005907f, -0.003447f, -0.013785f, + +0.000178f, +0.001950f, -0.000671f, +0.000587f, -0.000414f, +0.004639f, +0.001174f, -0.004290f, +0.009013f, -0.002429f, + -0.009928f, +0.005095f, +0.007110f, -0.008306f, +0.004638f, -0.002178f, -0.001721f, +0.001849f, +0.006759f, -0.001983f, + -0.005121f, +0.000862f, -0.010483f, -0.000940f, -0.000365f, +0.006759f, -0.001402f, -0.001788f, +0.001729f, +0.000246f, + -0.002463f, -0.001490f, +0.000755f, +0.004155f, -0.002188f, -0.000618f, +0.004277f, +0.004829f, -0.003985f, -0.001116f, + -0.001211f, -0.005342f, +0.003731f, +0.004013f, +0.005492f, -0.001208f, +0.000847f, +0.000052f, -0.001285f, +0.000484f, + +0.000136f, -0.005295f, +0.001008f, +0.001628f, +0.001919f, +0.001707f, -0.000650f, +0.000637f, -0.001483f, -0.000475f, + +0.000191f, -0.001580f, -0.001589f, -0.001979f, +0.000004f, -0.001101f, -0.001026f, +0.001222f, +0.000257f, +0.000220f, + -0.001040f, +0.001089f, +0.000130f, -0.000163f, -0.000175f, +0.000877f, -0.000190f, -0.000463f, +0.000311f, -0.001837f, + +0.000403f, +0.000409f, +0.000095f, +0.000651f, -0.000632f, +0.000023f + }, + { + -0.000305f, +0.010271f, +0.012632f, -0.000097f, +0.000909f, +0.001027f, -0.001609f, -0.001399f, -0.000117f, +0.000330f, + -0.004476f, +0.003272f, -0.004718f, +0.004084f, -0.000323f, +0.034782f, -0.001249f, -0.007537f, +0.017862f, +0.016389f, + -0.006004f, +0.002917f, +0.011391f, -0.011995f, -0.002848f, -0.016458f, -0.035139f, +0.000915f, -0.006080f, +0.005970f, + -0.001524f, +0.004597f, -0.008661f, -0.008952f, +0.004775f, -0.003330f, -0.002889f, -0.000985f, +0.005045f, -0.007051f, + -0.002578f, -0.000908f, +0.003910f, +0.000267f, -0.002632f, +0.003042f, -0.002287f, +0.002588f, -0.002130f, +0.002521f, + -0.003478f, -0.000130f, +0.004245f, +0.002838f, -0.001887f, -0.002422f, -0.001153f, +0.005523f, +0.000441f, -0.001762f, + +0.001084f, +0.001796f, -0.001200f, +0.002112f, +0.001120f, +0.001351f, -0.001063f, -0.001375f, -0.000657f, +0.001505f, + +0.000127f, +0.000195f, +0.000056f, +0.000825f, -0.000248f, -0.000782f, +0.000211f, -0.000131f, -0.001365f, -0.000579f, + -0.000791f, -0.000658f, +0.000667f, -0.000262f, -0.000181f, -0.000284f, +0.000733f, -0.000480f, +0.000391f, +0.000121f, + -0.000494f, +0.000728f, -0.000411f, +0.000521f, +0.000132f, -0.000126f + }, + { + +0.050409f, -0.212177f, -0.014862f, -0.045536f, +0.006706f, +0.004629f, +0.000500f, +0.000396f, -0.000641f, +0.006989f, + +0.004028f, +0.006401f, +0.009117f, +0.000139f, +0.007912f, -0.008510f, +0.000048f, -0.006706f, -0.004204f, +0.006380f, + +0.001512f, +0.001242f, -0.004651f, -0.010175f, -0.003014f, +0.003896f, -0.002280f, +0.001262f, -0.001705f, +0.006273f, + +0.003511f, -0.000374f, -0.002352f, -0.000737f, +0.002064f, -0.004970f, +0.009583f, -0.000831f, -0.003701f, +0.003623f, + +0.002454f, -0.003293f, +0.003064f, +0.002896f, -0.002918f, +0.000073f, -0.001179f, -0.003307f, +0.002528f, -0.000117f, + +0.000072f, +0.004236f, -0.001760f, +0.003760f, -0.000523f, +0.004335f, -0.001501f, +0.000785f, -0.001913f, +0.002178f, + -0.001260f, -0.002167f, +0.003014f, +0.001166f, -0.000809f, +0.002194f, -0.000731f, -0.000540f, +0.000052f, -0.001223f, + +0.000944f, -0.000777f, +0.001819f, +0.000891f, -0.000237f, +0.000251f, -0.000507f, -0.000502f, +0.000864f, +0.001467f, + +0.000048f, +0.000173f, -0.000880f, -0.000693f, +0.000006f, -0.000053f, -0.000353f, +0.000078f, -0.000734f, +0.000260f, + +0.000829f, +0.000020f, +0.000082f, -0.000200f, -0.000336f, +0.000269f + }, + { + -0.000094f, -0.004631f, +0.015040f, -0.005827f, +0.000558f, -0.000128f, +0.000101f, -0.001805f, +0.000877f, -0.001805f, + +0.004318f, +0.001564f, -0.003345f, +0.007629f, +0.004876f, +0.016703f, +0.015344f, -0.001722f, +0.000618f, +0.002383f, + -0.006615f, +0.003274f, +0.002668f, -0.012654f, +0.003047f, +0.015889f, -0.002613f, +0.009192f, -0.007524f, -0.000465f, + -0.004892f, -0.007118f, +0.012058f, -0.001371f, -0.006499f, +0.003716f, -0.003186f, -0.001558f, +0.003515f, -0.002762f, + +0.005376f, +0.003197f, -0.003071f, -0.000657f, +0.002670f, +0.000879f, +0.000552f, -0.000343f, +0.002101f, -0.001118f, + -0.000306f, +0.003766f, -0.003120f, +0.002874f, +0.001482f, -0.001324f, -0.000934f, +0.000218f, -0.001360f, +0.002011f, + +0.000644f, -0.001020f, -0.001642f, -0.000300f, -0.000136f, -0.002125f, -0.000320f, -0.000702f, -0.000814f, -0.000193f, + -0.001442f, +0.000765f, +0.000027f, +0.000840f, +0.000009f, -0.000745f, +0.000200f, -0.001647f, +0.000838f, -0.000253f, + +0.000243f, +0.000117f, +0.000236f, +0.000014f, -0.001617f, +0.000580f, -0.000692f, +0.000660f, -0.000015f, -0.000039f, + +0.000016f, +0.000379f, -0.000387f, +0.000130f, -0.000639f, +0.000717f + }, + { + -0.034706f, -0.113761f, +0.054238f, +0.010720f, +0.022847f, -0.004952f, -0.005470f, -0.003742f, -0.002699f, -0.004632f, + +0.004134f, +0.002794f, +0.011772f, -0.004371f, -0.000607f, -0.006920f, +0.006192f, +0.005336f, -0.019607f, +0.009695f, + -0.001906f, -0.002225f, -0.000410f, -0.003173f, -0.001014f, -0.000459f, -0.010768f, +0.012399f, +0.006933f, +0.003161f, + -0.017867f, +0.002094f, -0.002990f, +0.007527f, +0.000099f, -0.008165f, -0.000138f, -0.001554f, +0.002838f, -0.002480f, + -0.007978f, +0.002233f, +0.000449f, -0.004233f, -0.005387f, +0.002185f, -0.000284f, +0.006610f, -0.001937f, +0.000480f, + +0.000464f, +0.006143f, +0.001968f, +0.001744f, +0.001453f, +0.000773f, +0.000935f, -0.001135f, +0.001807f, +0.001626f, + +0.000859f, +0.000373f, -0.001672f, -0.001742f, +0.002019f, +0.000089f, -0.001240f, -0.000013f, +0.000536f, +0.002170f, + +0.000263f, -0.001281f, +0.000946f, -0.000562f, -0.000650f, -0.001290f, -0.000614f, +0.001127f, -0.001404f, +0.000318f, + -0.001849f, +0.000823f, -0.001607f, +0.000152f, -0.000510f, +0.000348f, +0.000526f, +0.000123f, -0.001002f, +0.000513f, + -0.000116f, +0.000398f, +0.000053f, -0.000623f, +0.000497f, -0.000403f + }, + { + +0.003343f, -0.025121f, -0.003468f, -0.002194f, -0.005843f, +0.000684f, -0.005714f, -0.001451f, -0.001642f, -0.003712f, + -0.000334f, +0.005808f, -0.009467f, +0.001262f, +0.000902f, -0.000239f, -0.001414f, -0.003889f, +0.014589f, +0.000381f, + -0.006176f, +0.012110f, +0.009204f, +0.002713f, +0.008794f, -0.018063f, -0.003191f, -0.009933f, +0.003422f, +0.001731f, + +0.014563f, -0.005622f, +0.004491f, -0.006417f, -0.006661f, +0.001023f, +0.001681f, +0.002420f, +0.005522f, -0.004475f, + +0.002897f, +0.002651f, -0.000716f, +0.000697f, -0.000436f, -0.001835f, -0.000284f, +0.003571f, -0.003668f, -0.000414f, + -0.002263f, +0.000818f, +0.002642f, -0.001436f, -0.001954f, +0.000328f, -0.000146f, +0.000744f, -0.000505f, +0.003392f, + +0.002358f, -0.000293f, +0.001391f, +0.000859f, +0.000234f, +0.000452f, -0.000848f, +0.000297f, +0.002129f, -0.000609f, + -0.000477f, -0.001010f, +0.000267f, +0.000419f, +0.000929f, -0.001099f, +0.000273f, -0.001318f, +0.000144f, -0.000211f, + +0.000272f, -0.000350f, -0.000252f, +0.000484f, +0.000372f, -0.000268f, -0.000545f, -0.000185f, -0.000216f, -0.000318f, + +0.000200f, +0.000823f, -0.000292f, +0.000333f, -0.000390f, +0.000013f + }, + { + +0.023341f, -0.332473f, -0.007099f, -0.015864f, -0.013992f, +0.007604f, -0.028144f, -0.008549f, -0.003829f, +0.005921f, + +0.002638f, -0.008527f, -0.004049f, +0.000812f, -0.001108f, +0.020007f, +0.004535f, -0.006094f, -0.017711f, +0.003761f, + -0.007656f, +0.014809f, +0.000993f, +0.008823f, -0.014134f, -0.003338f, -0.001393f, +0.000994f, +0.007489f, -0.001629f, + +0.000402f, -0.004541f, +0.001636f, +0.001816f, -0.008151f, -0.007759f, +0.001855f, -0.002574f, -0.007645f, +0.001779f, + -0.006008f, +0.002325f, +0.004510f, -0.004260f, -0.001714f, +0.002638f, +0.005130f, -0.000982f, +0.000871f, +0.002963f, + -0.000300f, +0.001195f, -0.005111f, +0.003526f, -0.001457f, +0.001671f, -0.002587f, +0.002826f, -0.001702f, +0.000241f, + -0.001563f, +0.003450f, -0.002436f, -0.000875f, -0.001172f, +0.000289f, +0.000809f, -0.001669f, -0.001055f, -0.000605f, + +0.001752f, -0.002377f, -0.000102f, -0.000566f, -0.000218f, -0.001135f, +0.000027f, +0.000521f, +0.000383f, +0.001142f, + +0.000323f, +0.000635f, +0.000401f, +0.000300f, +0.000796f, -0.000707f, -0.000612f, -0.000518f, -0.000930f, -0.000942f, + +0.000832f, -0.000208f, +0.000641f, -0.000090f, +0.000382f, +0.000358f + }, + { + -0.003796f, -0.034325f, +0.011257f, -0.001586f, +0.004281f, +0.002630f, +0.012397f, -0.005089f, +0.000790f, -0.003631f, + +0.000881f, +0.009550f, +0.004828f, -0.015650f, -0.034725f, +0.027844f, +0.009761f, +0.001511f, +0.001953f, -0.001161f, + +0.033000f, -0.001813f, +0.019664f, -0.013205f, -0.010485f, -0.007717f, +0.003610f, -0.014800f, +0.001510f, +0.004015f, + +0.003482f, +0.000183f, -0.003309f, +0.006382f, -0.000431f, +0.004916f, +0.002256f, -0.002230f, +0.002384f, +0.000784f, + -0.000106f, -0.009474f, -0.000713f, -0.003987f, +0.002030f, +0.006376f, -0.005585f, +0.001973f, +0.002089f, -0.002779f, + +0.002443f, +0.000486f, +0.003386f, +0.002772f, -0.000438f, +0.000816f, +0.001529f, -0.000780f, -0.001439f, +0.000978f, + -0.002758f, +0.000468f, -0.001308f, +0.000552f, +0.000060f, -0.000846f, +0.000700f, +0.002097f, -0.001227f, -0.001132f, + +0.001640f, +0.000329f, +0.000564f, -0.000108f, -0.000233f, +0.000381f, +0.001310f, +0.000213f, -0.000210f, -0.000577f, + +0.000087f, +0.000249f, -0.000513f, +0.001017f, -0.000231f, +0.000629f, -0.000301f, +0.000477f, +0.000421f, -0.000828f, + +0.000499f, -0.000033f, -0.000078f, +0.000119f, -0.000800f, -0.000390f + }, + { + -0.042092f, -0.111785f, +0.014510f, -0.008699f, +0.006156f, -0.002589f, -0.022797f, +0.007368f, -0.009514f, +0.003539f, + -0.010886f, -0.001144f, +0.001388f, -0.001998f, +0.012828f, +0.018069f, -0.005274f, +0.006902f, -0.010537f, -0.007179f, + -0.017977f, +0.001035f, -0.000849f, -0.002839f, +0.003659f, +0.004094f, -0.007131f, +0.012570f, +0.003244f, +0.006766f, + +0.002220f, +0.000814f, +0.002783f, +0.004467f, -0.004417f, -0.003002f, +0.001433f, -0.003911f, -0.005116f, -0.001573f, + +0.007191f, -0.008293f, -0.003474f, -0.000331f, -0.004010f, +0.003386f, +0.000813f, -0.006321f, +0.002683f, -0.004162f, + +0.001037f, +0.002347f, -0.001181f, +0.000218f, -0.000203f, -0.001862f, +0.001797f, +0.001290f, -0.003593f, +0.001108f, + +0.001639f, -0.001746f, +0.000205f, +0.000928f, -0.002294f, -0.000160f, -0.000846f, -0.000622f, -0.000944f, +0.001170f, + -0.000547f, +0.000332f, +0.000921f, +0.000346f, -0.001830f, +0.001138f, -0.001148f, +0.000201f, +0.000747f, -0.000591f, + -0.000319f, -0.000712f, -0.000097f, -0.002092f, +0.000744f, -0.000564f, +0.000612f, +0.000224f, -0.000025f, +0.000815f, + +0.000226f, +0.000140f, +0.000920f, +0.000128f, -0.000252f, -0.000103f + }, + { + -0.008392f, -0.024459f, +0.012005f, +0.001448f, -0.004912f, +0.004622f, -0.003474f, +0.002210f, -0.007467f, -0.002384f, + -0.000057f, -0.001760f, -0.003305f, -0.004249f, -0.008180f, -0.000829f, +0.002878f, -0.002717f, -0.009852f, -0.015703f, + +0.004421f, -0.007093f, -0.007898f, +0.001349f, +0.000140f, +0.003520f, -0.004670f, +0.001650f, -0.006370f, -0.007445f, + -0.000342f, -0.005955f, +0.003793f, -0.004946f, -0.004696f, -0.004533f, +0.000308f, -0.005498f, +0.001450f, -0.003909f, + +0.001621f, +0.002573f, -0.002356f, -0.000586f, -0.002634f, +0.001593f, +0.002487f, -0.000621f, -0.001794f, -0.002227f, + +0.002667f, +0.002161f, -0.000747f, +0.000638f, -0.000591f, -0.001222f, +0.001551f, +0.002212f, +0.000175f, -0.003082f, + -0.001837f, +0.001207f, -0.000218f, +0.001492f, -0.000233f, +0.001541f, +0.001737f, +0.001061f, -0.001547f, +0.001301f, + -0.000239f, +0.000956f, -0.000114f, -0.001138f, -0.002033f, -0.000719f, +0.000057f, -0.000416f, +0.000833f, -0.000193f, + -0.001024f, -0.000255f, -0.000501f, +0.000061f, -0.000068f, -0.000393f, -0.000001f, -0.000050f, +0.000407f, +0.000738f, + +0.000337f, +0.000299f, -0.000541f, +0.000398f, +0.000064f, -0.000291f + } + }, + { + { + +0.003802f, +0.090446f, -0.049549f, -0.021631f, +0.000623f, -0.001765f, -0.006916f, +0.005307f, -0.007098f, +0.005540f, + +0.017440f, +0.009965f, -0.004410f, -0.003813f, +0.015058f, -0.004892f, +0.005401f, +0.006489f, +0.005626f, -0.005226f, + +0.008092f, +0.001605f, +0.005975f, -0.006852f, +0.001259f, -0.003922f, -0.003781f, +0.001811f, +0.001799f, -0.000831f, + +0.000198f, +0.010446f, -0.002292f, +0.003149f, -0.006371f, -0.002232f, +0.003478f, +0.004760f, +0.003252f, +0.003588f, + -0.001234f, +0.003431f, +0.001806f, +0.003464f, -0.003604f, +0.005968f, +0.002211f, -0.001545f, +0.000861f, +0.002107f, + -0.003226f, -0.000056f, -0.000169f, +0.004787f, +0.001120f, -0.001550f, -0.000252f, -0.001630f, -0.001287f, +0.002737f, + +0.001090f, +0.002451f, +0.001638f, -0.001144f, +0.001057f, +0.000252f, -0.001258f, +0.001172f, -0.000950f, +0.001241f, + -0.000606f, -0.000429f, -0.000201f, +0.001407f, -0.000872f, -0.000246f, -0.000670f, -0.000675f, -0.000678f, -0.000247f, + +0.000815f, -0.000092f, +0.000804f, +0.000001f, -0.000421f, +0.000839f, +0.000294f, -0.000432f, +0.000723f, +0.000508f, + +0.000380f, +0.000138f, -0.000694f, +0.000359f, -0.000453f, +0.000158f + }, + { + -0.001645f, +0.008906f, +0.002598f, +0.018543f, +0.007231f, -0.003125f, -0.000203f, -0.000213f, -0.001419f, +0.000424f, + -0.005694f, +0.009640f, -0.003882f, +0.010800f, +0.003097f, +0.007294f, +0.003036f, +0.004489f, -0.019289f, -0.000410f, + +0.003589f, +0.007200f, +0.012349f, -0.005353f, -0.016411f, -0.009747f, -0.012402f, +0.003977f, +0.004949f, +0.001733f, + +0.001583f, +0.004865f, -0.001789f, +0.004165f, -0.002536f, +0.000009f, +0.005213f, +0.000143f, -0.001904f, -0.002814f, + +0.000294f, -0.001102f, -0.000506f, +0.004268f, +0.001536f, -0.003048f, -0.003400f, +0.000756f, +0.002886f, -0.000425f, + -0.001819f, -0.004448f, -0.001048f, +0.000084f, +0.000637f, -0.004162f, +0.000528f, -0.000183f, +0.001450f, -0.000672f, + -0.000829f, +0.000623f, -0.002305f, -0.000470f, +0.000928f, -0.000531f, -0.001162f, +0.000726f, -0.000428f, -0.001190f, + -0.001105f, +0.000412f, +0.000871f, -0.000314f, +0.000700f, -0.000879f, +0.000418f, -0.001112f, -0.000734f, +0.000379f, + -0.000148f, -0.000304f, +0.000624f, +0.000109f, +0.000053f, +0.000141f, +0.000745f, -0.000574f, -0.000371f, -0.000739f, + +0.000253f, -0.000247f, +0.001187f, +0.000223f, -0.000067f, -0.000471f + }, + { + -0.003326f, +0.007865f, -0.018921f, +0.011415f, +0.022596f, +0.004497f, -0.001317f, +0.002502f, -0.001798f, +0.000372f, + +0.000743f, +0.009368f, -0.008107f, +0.000023f, +0.010157f, +0.007320f, +0.004395f, -0.005706f, +0.000257f, -0.001499f, + +0.006253f, -0.010595f, -0.006868f, -0.009499f, -0.003515f, -0.002670f, +0.003085f, -0.005525f, -0.015027f, +0.001066f, + -0.006529f, -0.001697f, +0.006658f, -0.000806f, -0.003639f, +0.003808f, -0.002300f, -0.000067f, -0.002889f, -0.001452f, + -0.001803f, +0.001770f, +0.000581f, +0.003774f, +0.001589f, -0.000479f, -0.003947f, -0.001725f, -0.004235f, -0.001276f, + +0.001744f, -0.001017f, +0.003480f, +0.003465f, +0.001277f, -0.000292f, +0.001863f, +0.002128f, +0.001698f, -0.000059f, + -0.002069f, +0.001533f, -0.001057f, -0.000665f, -0.001844f, -0.000385f, -0.001833f, +0.000154f, -0.000449f, +0.001707f, + +0.000518f, +0.000819f, +0.002250f, -0.000283f, +0.000816f, +0.000022f, +0.000497f, -0.000064f, -0.000176f, +0.000398f, + +0.000567f, -0.000197f, -0.000789f, -0.000061f, +0.001050f, +0.000319f, -0.000313f, -0.000430f, -0.000932f, +0.000062f, + -0.000699f, +0.000052f, +0.000098f, +0.000052f, -0.000176f, -0.000068f + }, + { + +0.026114f, +0.108407f, -0.020680f, +0.080600f, -0.005062f, +0.000602f, -0.000227f, +0.010696f, +0.000762f, +0.001632f, + -0.007265f, +0.013062f, +0.009717f, +0.005732f, +0.001546f, -0.008641f, +0.004261f, +0.000557f, +0.014776f, +0.005755f, + +0.007484f, +0.005807f, +0.005603f, +0.008925f, -0.002390f, +0.009378f, +0.002795f, -0.001313f, +0.000373f, -0.001874f, + +0.000158f, +0.003926f, -0.003015f, +0.003154f, +0.000793f, +0.002703f, -0.004343f, +0.003156f, -0.003707f, +0.000117f, + +0.008130f, +0.002010f, -0.000381f, +0.004093f, -0.004205f, +0.000522f, +0.002994f, +0.001520f, +0.002972f, -0.000912f, + -0.002086f, -0.001077f, -0.000288f, +0.003404f, +0.000366f, +0.000468f, +0.001922f, -0.001207f, -0.000103f, -0.000444f, + -0.001696f, +0.000308f, +0.000653f, -0.001113f, +0.001709f, -0.001878f, +0.000011f, +0.000402f, -0.000399f, +0.000835f, + -0.000291f, +0.000689f, +0.000003f, -0.000199f, -0.000917f, +0.000727f, -0.001374f, -0.001608f, +0.000177f, +0.000909f, + +0.000224f, -0.000005f, -0.000293f, +0.000042f, -0.000199f, -0.000519f, +0.000544f, -0.000313f, +0.000020f, +0.000137f, + +0.000053f, +0.000169f, +0.000042f, +0.000161f, -0.000240f, +0.000361f + }, + { + +0.003873f, -0.040716f, -0.010638f, -0.003395f, +0.003549f, -0.001149f, -0.001181f, +0.002650f, -0.000541f, +0.000424f, + +0.000677f, -0.003888f, +0.005008f, +0.006000f, +0.005769f, -0.006324f, -0.021725f, +0.036907f, +0.014441f, -0.005708f, + +0.005982f, -0.019020f, -0.003001f, +0.004827f, -0.003854f, -0.008185f, +0.013471f, +0.000593f, +0.003939f, +0.007900f, + +0.009420f, -0.003560f, +0.006508f, -0.007743f, -0.007408f, +0.001796f, +0.003148f, -0.000897f, -0.006413f, +0.006429f, + -0.003696f, -0.003697f, +0.003171f, +0.000452f, +0.000768f, -0.001949f, -0.003625f, +0.003649f, +0.000986f, +0.002034f, + +0.001821f, +0.001003f, +0.000510f, -0.000744f, -0.000753f, +0.000536f, +0.001051f, +0.001540f, +0.000824f, +0.000225f, + -0.000446f, +0.002808f, -0.002700f, +0.000159f, +0.002008f, -0.000784f, +0.000575f, +0.000090f, +0.000888f, -0.001697f, + +0.002158f, -0.000284f, -0.000648f, +0.000155f, +0.000409f, +0.000131f, +0.000300f, -0.000448f, -0.000168f, -0.000223f, + -0.000810f, -0.000745f, -0.000312f, -0.000006f, +0.000955f, +0.001089f, +0.000188f, +0.000173f, +0.000334f, +0.000788f, + -0.000393f, +0.000162f, +0.001257f, +0.000344f, -0.000286f, +0.000994f + }, + { + +0.042897f, +0.138854f, -0.020323f, -0.026825f, +0.020437f, -0.000483f, -0.000298f, +0.008529f, -0.008956f, +0.002992f, + -0.004221f, +0.005996f, -0.001333f, +0.002142f, +0.002241f, +0.000630f, +0.002023f, -0.003057f, +0.008051f, +0.000922f, + -0.003155f, +0.003370f, +0.001002f, -0.002284f, +0.002328f, -0.002493f, -0.001498f, -0.000455f, +0.006364f, +0.006280f, + -0.006622f, -0.003410f, -0.008837f, +0.001299f, -0.003255f, +0.004611f, -0.002150f, -0.000578f, +0.003341f, -0.003652f, + -0.003302f, +0.004067f, -0.002955f, +0.002838f, +0.002874f, +0.000195f, +0.004541f, +0.003214f, -0.002821f, +0.000354f, + -0.006536f, +0.001961f, +0.003608f, +0.001784f, +0.006710f, +0.001404f, -0.001016f, -0.000010f, -0.001446f, -0.000502f, + -0.000670f, -0.001527f, +0.001802f, +0.001489f, +0.000947f, +0.001627f, -0.000571f, -0.000237f, -0.001070f, -0.001309f, + +0.002169f, -0.002066f, -0.001869f, -0.001207f, -0.001024f, -0.000656f, -0.000849f, +0.000645f, +0.000772f, -0.000340f, + -0.000418f, +0.000506f, -0.000146f, +0.000319f, +0.000122f, +0.000130f, +0.000005f, -0.000137f, -0.000602f, +0.000174f, + +0.000040f, +0.000243f, +0.000069f, -0.000123f, +0.000018f, +0.000348f + }, + { + -0.000518f, +0.028792f, +0.002093f, -0.002738f, +0.001547f, +0.000637f, -0.002152f, -0.001058f, +0.000968f, -0.000194f, + -0.002700f, +0.003715f, -0.004115f, -0.001395f, +0.013589f, +0.015542f, -0.009563f, -0.009776f, +0.021873f, +0.021103f, + +0.000397f, -0.001563f, +0.001195f, -0.023064f, +0.000302f, -0.008928f, -0.019974f, -0.022821f, +0.005638f, -0.004696f, + +0.000765f, +0.009070f, -0.010557f, -0.001993f, +0.007937f, -0.004263f, -0.007121f, +0.001172f, +0.005102f, -0.002992f, + -0.004421f, -0.004083f, +0.004399f, -0.000170f, -0.003606f, +0.002917f, -0.001889f, -0.000417f, -0.000268f, +0.003160f, + -0.002039f, +0.000566f, +0.000351f, +0.002427f, -0.001066f, +0.000855f, -0.001331f, +0.002778f, +0.000925f, -0.001091f, + +0.000128f, +0.000355f, +0.001275f, -0.000430f, +0.000507f, +0.000011f, +0.000707f, -0.000296f, -0.000738f, +0.000180f, + +0.000200f, +0.000965f, -0.000436f, +0.000678f, +0.000989f, -0.001107f, +0.000956f, -0.000245f, -0.001329f, -0.000901f, + -0.000403f, -0.000873f, +0.000423f, -0.000111f, +0.000114f, -0.000139f, +0.000109f, -0.000368f, +0.000426f, -0.000033f, + +0.000045f, -0.000287f, -0.000055f, +0.000136f, +0.000178f, -0.000136f + }, + { + -0.056552f, -0.093432f, +0.016562f, -0.045903f, -0.006792f, +0.001974f, +0.005153f, +0.007824f, -0.006388f, +0.007823f, + -0.000186f, +0.011677f, -0.004202f, +0.008008f, +0.003314f, -0.008717f, +0.005824f, -0.014189f, +0.002751f, +0.003565f, + +0.004968f, -0.000013f, -0.001555f, -0.010110f, -0.003786f, -0.000746f, +0.000743f, +0.001526f, +0.004503f, +0.003615f, + +0.003502f, +0.001009f, +0.001415f, +0.000151f, -0.000325f, -0.003344f, +0.010638f, -0.001979f, +0.002726f, -0.003095f, + +0.002723f, -0.001209f, -0.000253f, +0.001875f, +0.001629f, -0.002413f, -0.003121f, -0.003613f, +0.002682f, +0.000521f, + +0.003444f, -0.000295f, +0.002473f, +0.001292f, +0.001276f, +0.002530f, +0.000333f, +0.001170f, +0.000550f, -0.000924f, + -0.000971f, -0.000745f, +0.002130f, +0.001418f, -0.000510f, +0.000203f, -0.000981f, +0.000372f, +0.000529f, -0.002135f, + +0.000049f, +0.000408f, +0.000666f, +0.001414f, +0.000378f, +0.000146f, -0.000613f, +0.000459f, +0.000366f, +0.001649f, + +0.000438f, -0.000271f, +0.000226f, +0.000001f, -0.000966f, +0.000047f, +0.000646f, -0.000553f, -0.000385f, +0.000667f, + +0.000547f, -0.000091f, +0.000147f, +0.000508f, -0.000688f, -0.000423f + }, + { + -0.001452f, +0.006767f, +0.010448f, -0.001979f, -0.000635f, -0.000851f, -0.002741f, +0.001607f, +0.001321f, -0.002479f, + +0.002302f, +0.002675f, -0.004676f, +0.003261f, +0.003554f, +0.043739f, -0.025838f, +0.008821f, +0.006983f, +0.001090f, + +0.000043f, -0.003285f, -0.005636f, +0.001064f, +0.000928f, -0.007036f, +0.006487f, +0.012528f, -0.000271f, -0.002169f, + -0.013063f, -0.000191f, +0.009253f, +0.000500f, +0.001323f, +0.002028f, -0.004218f, -0.003780f, +0.003273f, +0.001818f, + -0.001314f, +0.003065f, -0.001158f, +0.003928f, -0.001646f, +0.000768f, -0.003584f, +0.000306f, +0.004993f, +0.000123f, + -0.002670f, +0.001481f, +0.000110f, +0.000311f, +0.003981f, -0.001479f, -0.002335f, +0.003200f, +0.000774f, -0.000632f, + -0.000896f, -0.002943f, -0.001884f, -0.000927f, +0.000857f, -0.003063f, -0.000314f, -0.000736f, +0.001073f, -0.000998f, + -0.000287f, +0.000282f, +0.000192f, +0.000383f, +0.000100f, +0.000546f, -0.000970f, -0.000401f, +0.000504f, -0.000326f, + -0.000142f, -0.000466f, +0.000607f, -0.000368f, -0.001064f, +0.000071f, -0.000124f, -0.000309f, +0.000365f, -0.000109f, + -0.000141f, +0.000118f, +0.000030f, -0.000270f, -0.000072f, -0.000160f + }, + { + +0.030113f, -0.140934f, -0.009004f, +0.021816f, +0.000688f, +0.014227f, +0.007371f, -0.006522f, -0.007670f, +0.000521f, + +0.007227f, +0.002973f, -0.008433f, -0.000997f, +0.001194f, -0.001340f, +0.002084f, +0.011375f, -0.017153f, -0.000732f, + +0.002050f, +0.000467f, -0.003494f, -0.008927f, +0.005185f, -0.001891f, +0.001249f, +0.006914f, +0.006495f, -0.003970f, + -0.003529f, -0.001072f, -0.002657f, +0.004925f, -0.003337f, -0.003559f, -0.002484f, -0.006868f, +0.006381f, +0.002338f, + -0.007733f, +0.003633f, -0.001705f, -0.004731f, +0.000230f, -0.002847f, +0.003681f, +0.000871f, +0.001674f, -0.000124f, + +0.000357f, +0.003757f, +0.003790f, +0.001805f, +0.000198f, +0.002398f, +0.000194f, -0.000386f, -0.000019f, +0.001695f, + +0.002368f, +0.000154f, -0.001733f, -0.000512f, -0.001148f, +0.001409f, +0.000847f, -0.000898f, -0.001657f, +0.002765f, + +0.000135f, +0.000264f, -0.000889f, -0.000719f, -0.000049f, -0.001095f, +0.000252f, -0.000047f, -0.000450f, -0.001022f, + -0.000899f, +0.000363f, +0.000114f, -0.000718f, -0.000049f, +0.001068f, -0.000446f, +0.000468f, +0.000215f, -0.000051f, + -0.000245f, +0.000391f, -0.000233f, -0.000489f, -0.000157f, +0.000748f + }, + { + -0.001053f, -0.021981f, -0.007894f, -0.005761f, +0.000882f, -0.001197f, -0.002120f, +0.001008f, +0.000061f, -0.008876f, + +0.000431f, -0.009339f, +0.007798f, -0.003196f, +0.003180f, -0.007651f, -0.001540f, -0.004966f, +0.010569f, -0.009249f, + +0.008508f, +0.002922f, +0.017067f, +0.009695f, -0.005273f, -0.013445f, -0.004848f, -0.001163f, +0.003467f, +0.001642f, + +0.001079f, +0.008707f, -0.002587f, -0.005097f, -0.003376f, +0.002972f, +0.001703f, -0.002974f, +0.002380f, +0.001851f, + -0.001123f, +0.003324f, +0.001150f, +0.003783f, -0.005424f, +0.001072f, +0.002561f, +0.000489f, -0.002851f, -0.000544f, + -0.004264f, +0.000772f, +0.001152f, +0.000740f, -0.002727f, +0.000963f, -0.000079f, +0.000169f, +0.000273f, +0.003025f, + +0.002849f, +0.001602f, +0.000404f, -0.000758f, -0.000050f, +0.000838f, +0.000258f, +0.000462f, +0.000230f, -0.000299f, + -0.000617f, -0.000242f, +0.000376f, +0.001406f, +0.000129f, -0.000294f, +0.000337f, -0.001160f, -0.000432f, -0.000440f, + +0.000131f, -0.000943f, +0.000565f, +0.000012f, +0.000996f, +0.000253f, -0.001388f, -0.000561f, -0.000295f, -0.000303f, + -0.000104f, +0.000598f, +0.000473f, +0.000262f, -0.000203f, -0.000233f + }, + { + -0.077186f, -0.191612f, -0.002980f, -0.006434f, -0.025891f, -0.038292f, +0.003018f, +0.004451f, -0.008298f, +0.008597f, + -0.007994f, -0.002124f, -0.012137f, +0.015859f, -0.004535f, +0.008609f, -0.003763f, +0.002443f, -0.012115f, -0.011163f, + +0.005758f, +0.013840f, +0.000712f, +0.003411f, -0.005607f, -0.010318f, -0.004070f, +0.004833f, +0.005571f, -0.001355f, + -0.001842f, -0.005654f, +0.000726f, -0.000125f, -0.007913f, +0.001272f, -0.003017f, -0.004873f, -0.006207f, -0.000396f, + +0.000452f, -0.006598f, +0.006529f, +0.000317f, +0.000175f, +0.001170f, +0.001851f, +0.001288f, +0.003123f, +0.002259f, + +0.000256f, -0.001195f, -0.001723f, +0.000891f, -0.000566f, +0.001136f, -0.000530f, -0.001110f, -0.001787f, -0.000273f, + +0.000915f, -0.000693f, +0.001818f, -0.000753f, -0.000743f, +0.000208f, -0.001526f, -0.000057f, -0.000718f, -0.000609f, + +0.000048f, -0.001463f, -0.001092f, +0.000932f, +0.000278f, -0.001271f, +0.000604f, +0.000104f, +0.000423f, +0.000696f, + +0.001323f, +0.000349f, -0.000219f, +0.000598f, +0.000433f, -0.000086f, -0.000532f, -0.000680f, -0.000605f, -0.000416f, + -0.000001f, -0.000000f, +0.000621f, +0.000137f, +0.000215f, +0.000246f + }, + { + +0.004245f, -0.017113f, -0.014744f, +0.003576f, +0.008158f, +0.005306f, +0.006567f, -0.006697f, +0.000029f, -0.001076f, + +0.002091f, +0.009135f, +0.004531f, -0.005774f, -0.023462f, +0.012813f, +0.015503f, -0.001872f, +0.010895f, -0.002412f, + +0.006670f, +0.042272f, +0.013247f, +0.008881f, -0.024253f, -0.014451f, +0.010226f, -0.002920f, -0.013193f, +0.010137f, + -0.002298f, +0.000573f, -0.002453f, +0.002674f, +0.000305f, +0.002714f, +0.001247f, -0.001527f, -0.003955f, +0.004123f, + +0.001729f, -0.007176f, -0.001765f, -0.002626f, -0.001815f, +0.006088f, +0.001007f, -0.000952f, +0.000899f, -0.000594f, + +0.001157f, +0.002421f, -0.000486f, +0.001568f, +0.003595f, +0.000570f, +0.000493f, -0.000834f, -0.001844f, +0.000099f, + -0.000896f, -0.000934f, +0.000627f, -0.001323f, +0.000673f, -0.000887f, -0.000562f, +0.000637f, +0.001166f, -0.001127f, + +0.000457f, +0.000894f, +0.000683f, +0.000387f, -0.000290f, +0.000553f, +0.000865f, +0.000634f, -0.000044f, -0.000983f, + +0.000123f, -0.000829f, +0.000936f, +0.000490f, -0.000171f, +0.000636f, -0.001062f, +0.000659f, +0.000292f, -0.000098f, + -0.000594f, +0.000151f, +0.000359f, +0.000081f, -0.000425f, -0.000207f + }, + { + +0.009627f, -0.169816f, -0.002697f, -0.010819f, +0.008852f, -0.017645f, -0.006253f, +0.002321f, -0.004430f, -0.001677f, + -0.000613f, -0.008972f, -0.002621f, +0.018940f, -0.001578f, +0.008066f, -0.002983f, +0.020684f, -0.019467f, -0.002079f, + -0.007458f, -0.003900f, -0.003103f, +0.002906f, -0.003139f, +0.000468f, +0.003490f, +0.004020f, +0.005800f, +0.004223f, + +0.002524f, +0.003000f, +0.001939f, -0.002338f, +0.001559f, -0.002017f, -0.004820f, -0.004380f, -0.001595f, +0.002114f, + +0.000640f, +0.003341f, -0.007571f, -0.003943f, -0.001117f, -0.005652f, -0.001642f, -0.000462f, -0.000068f, +0.000637f, + -0.000773f, +0.002828f, -0.002740f, +0.002306f, -0.000944f, -0.001843f, +0.004079f, -0.000902f, -0.000041f, -0.000240f, + +0.001154f, -0.000332f, -0.000758f, -0.000106f, -0.001860f, -0.001859f, +0.000099f, -0.001213f, -0.000457f, +0.001066f, + -0.000769f, -0.000124f, +0.001649f, -0.000859f, -0.000940f, +0.000495f, +0.000570f, -0.000452f, +0.000471f, -0.000233f, + -0.000751f, -0.000178f, -0.000577f, -0.001742f, +0.000035f, +0.000507f, +0.000051f, +0.000290f, +0.000147f, -0.000054f, + +0.000709f, +0.000544f, +0.000239f, -0.000170f, +0.000295f, -0.000223f + }, + { + +0.008299f, -0.025095f, -0.008518f, +0.009268f, -0.006459f, -0.001715f, +0.002464f, -0.003673f, -0.003326f, -0.006074f, + -0.000824f, -0.004808f, -0.002584f, +0.000182f, -0.002025f, -0.004899f, +0.006096f, -0.008859f, -0.008638f, -0.015401f, + +0.002364f, -0.012473f, +0.003380f, +0.004003f, +0.000199f, -0.004636f, +0.001518f, +0.002350f, -0.018143f, -0.003999f, + +0.002280f, -0.003317f, +0.004561f, -0.006599f, -0.005231f, -0.003975f, +0.005917f, -0.003737f, -0.001012f, -0.004708f, + +0.005640f, +0.002052f, -0.000770f, -0.004079f, -0.001486f, +0.000488f, +0.001412f, -0.000658f, -0.003158f, -0.002209f, + +0.001218f, +0.004422f, -0.001393f, -0.000772f, -0.001035f, +0.002571f, +0.002981f, -0.001812f, +0.001788f, -0.001679f, + -0.002082f, +0.001852f, -0.000060f, +0.001040f, -0.000580f, +0.002542f, -0.001634f, +0.000981f, -0.000695f, +0.000403f, + +0.001159f, -0.000524f, +0.001310f, -0.001573f, -0.000728f, -0.002148f, +0.000347f, -0.000234f, +0.000208f, +0.000477f, + -0.000723f, -0.000583f, -0.001407f, +0.000158f, +0.000790f, +0.000086f, -0.000498f, +0.000052f, +0.000077f, +0.000574f, + +0.000169f, +0.000341f, -0.000372f, +0.000320f, -0.000658f, +0.000259f + } + }, + { + { + -0.004022f, +0.071692f, -0.030597f, +0.013226f, +0.020625f, +0.002655f, -0.001163f, +0.017326f, -0.000973f, -0.002488f, + +0.004235f, +0.005832f, -0.007044f, -0.005041f, +0.014614f, -0.003959f, -0.002898f, +0.002522f, +0.004474f, -0.009338f, + +0.005148f, -0.000831f, +0.005814f, -0.009720f, +0.010201f, -0.000268f, +0.001425f, +0.007512f, +0.003482f, +0.001223f, + +0.002551f, +0.004633f, -0.011211f, +0.000680f, -0.008927f, -0.001107f, +0.001535f, +0.001630f, +0.005430f, +0.004294f, + +0.000317f, +0.003033f, -0.005493f, +0.003068f, -0.001575f, +0.002760f, +0.003085f, -0.000102f, -0.000422f, +0.001437f, + -0.002650f, +0.001665f, +0.002951f, +0.001572f, +0.001069f, +0.002103f, +0.001220f, +0.000119f, -0.001375f, +0.001560f, + -0.000012f, +0.000479f, +0.000360f, -0.000990f, +0.001003f, +0.001880f, +0.000593f, +0.002111f, +0.000510f, +0.001332f, + -0.001461f, +0.000213f, -0.000669f, -0.000058f, -0.000456f, +0.001012f, -0.000230f, -0.000864f, -0.000201f, -0.000764f, + +0.000784f, -0.000227f, +0.000603f, -0.000159f, -0.000509f, +0.000704f, -0.000023f, -0.000509f, +0.000434f, +0.000166f, + +0.000258f, +0.000385f, -0.000327f, +0.000352f, -0.000047f, +0.000562f + }, + { + +0.002294f, +0.004189f, -0.003487f, -0.018700f, -0.022785f, -0.000015f, +0.004327f, +0.008158f, +0.004049f, -0.001480f, + -0.012462f, +0.000673f, -0.003356f, +0.008048f, -0.001191f, +0.001897f, -0.015705f, -0.002837f, -0.008544f, +0.010335f, + +0.001659f, -0.003187f, +0.003599f, -0.006100f, -0.006630f, -0.001378f, -0.012829f, -0.000739f, +0.000038f, +0.000037f, + -0.000207f, +0.006006f, -0.006263f, -0.006293f, +0.007412f, +0.000599f, +0.003873f, +0.006616f, +0.002135f, -0.000680f, + +0.003167f, -0.000232f, -0.000015f, -0.002968f, -0.003137f, -0.002315f, -0.002900f, -0.002784f, +0.002124f, +0.002085f, + +0.000514f, -0.000395f, +0.001740f, +0.000385f, +0.001306f, -0.000525f, +0.002096f, -0.000234f, +0.001593f, +0.000500f, + -0.001128f, -0.000188f, -0.000992f, +0.000032f, -0.001116f, -0.001524f, -0.001115f, +0.000463f, +0.000059f, -0.000605f, + -0.000628f, -0.000259f, -0.000276f, -0.001751f, -0.000347f, -0.001292f, +0.000883f, -0.000484f, +0.000588f, +0.000025f, + -0.000428f, -0.000562f, +0.000288f, -0.000406f, -0.000272f, -0.000262f, -0.000529f, -0.000847f, +0.000196f, -0.000562f, + +0.000450f, -0.000433f, +0.000564f, -0.000257f, -0.000185f, -0.000300f + }, + { + +0.006623f, +0.024307f, -0.018324f, -0.053551f, -0.023061f, +0.004530f, -0.003360f, +0.000989f, -0.003695f, +0.003862f, + +0.008669f, +0.017776f, +0.000291f, +0.001393f, +0.004468f, +0.000518f, +0.002087f, -0.010071f, -0.011263f, +0.003534f, + +0.012222f, +0.001827f, +0.001526f, +0.001990f, +0.009016f, -0.003477f, +0.006871f, +0.004693f, -0.002642f, +0.001626f, + -0.005781f, +0.006133f, +0.010041f, +0.002670f, -0.001144f, +0.001383f, -0.005739f, +0.000517f, -0.000310f, +0.002698f, + +0.001342f, +0.003418f, -0.001160f, +0.000339f, +0.000702f, -0.000348f, +0.000106f, +0.002037f, -0.001720f, +0.000036f, + +0.003558f, -0.002754f, -0.000220f, +0.001071f, +0.000118f, -0.001852f, -0.000003f, -0.000500f, -0.000039f, -0.001269f, + -0.004051f, +0.000000f, -0.000539f, -0.000117f, -0.000729f, +0.000463f, -0.002056f, +0.000177f, -0.002097f, +0.000731f, + -0.000123f, -0.000489f, +0.001173f, -0.001438f, -0.000537f, -0.000284f, +0.000149f, -0.000448f, -0.000355f, -0.000202f, + +0.000225f, +0.000305f, -0.000659f, -0.000131f, +0.000381f, -0.000343f, -0.000443f, +0.000275f, -0.000642f, -0.000017f, + -0.000090f, +0.000017f, -0.000318f, +0.000046f, +0.000051f, +0.000068f + }, + { + -0.034802f, -0.002925f, -0.029563f, +0.095837f, -0.003518f, -0.001117f, -0.000371f, +0.006469f, -0.004480f, +0.002187f, + -0.010476f, +0.006741f, +0.002278f, -0.002545f, -0.007812f, -0.012547f, +0.002198f, -0.003539f, +0.010777f, -0.002034f, + -0.002226f, -0.000222f, +0.002261f, +0.000277f, -0.008031f, +0.004459f, +0.004477f, -0.002760f, +0.000897f, -0.002987f, + -0.001773f, +0.002642f, -0.007367f, +0.001609f, +0.000053f, +0.002456f, -0.000940f, +0.002395f, -0.003397f, +0.000927f, + +0.006059f, -0.002893f, -0.004443f, +0.003071f, -0.002471f, +0.000057f, +0.001865f, +0.002973f, +0.002845f, +0.001354f, + +0.002256f, -0.000067f, -0.003542f, -0.001154f, -0.000677f, -0.001891f, +0.000152f, +0.000982f, +0.000170f, -0.000443f, + -0.000795f, +0.001430f, +0.003101f, -0.000642f, +0.000363f, -0.000591f, +0.001277f, -0.000181f, -0.000510f, -0.000305f, + -0.002074f, +0.000046f, +0.000249f, -0.000211f, -0.001343f, +0.001238f, -0.000112f, +0.000118f, +0.000642f, +0.000117f, + -0.001142f, -0.000297f, -0.000396f, +0.000141f, +0.000158f, -0.000250f, +0.000833f, -0.000825f, +0.000291f, -0.000025f, + -0.000454f, -0.000102f, +0.000228f, +0.000411f, -0.000211f, +0.000296f + }, + { + -0.004382f, -0.028251f, +0.013432f, -0.003757f, -0.000663f, -0.001711f, -0.001038f, +0.006714f, +0.005052f, -0.001232f, + +0.001648f, -0.003314f, +0.004615f, +0.015182f, +0.015380f, +0.001930f, +0.003522f, +0.045921f, -0.007248f, -0.012660f, + +0.005985f, -0.015235f, -0.006396f, +0.002629f, -0.000957f, -0.019862f, +0.000830f, -0.005698f, +0.003813f, +0.003740f, + +0.007485f, -0.008533f, +0.005652f, -0.005017f, -0.014352f, -0.006343f, +0.006478f, +0.001016f, -0.005098f, +0.004271f, + -0.005248f, -0.003069f, +0.001740f, -0.003120f, -0.000807f, -0.002403f, -0.001467f, +0.004055f, +0.001846f, +0.002811f, + +0.000189f, -0.001225f, +0.000111f, -0.002032f, -0.000636f, -0.000514f, -0.001001f, -0.001289f, -0.000391f, +0.001753f, + -0.000842f, +0.001437f, -0.000645f, +0.000085f, +0.000396f, -0.002358f, +0.001132f, -0.000005f, +0.001559f, -0.000434f, + +0.000817f, +0.000648f, +0.000128f, -0.000410f, -0.000539f, -0.000819f, -0.000593f, -0.000292f, -0.000415f, -0.000050f, + +0.000212f, -0.000344f, -0.000039f, +0.000093f, +0.000121f, -0.000150f, -0.000184f, +0.000497f, -0.000248f, +0.000283f, + +0.000007f, -0.000080f, +0.000346f, -0.000007f, +0.000025f, +0.000855f + }, + { + -0.050430f, +0.012409f, +0.008351f, -0.042469f, -0.007734f, +0.003581f, -0.000509f, +0.003920f, +0.000097f, +0.007684f, + -0.006163f, +0.007929f, +0.000027f, -0.002876f, +0.000265f, +0.002435f, +0.005216f, -0.000396f, +0.007003f, +0.003732f, + +0.008981f, +0.004521f, -0.006146f, -0.003252f, +0.001230f, +0.000014f, +0.001310f, -0.004262f, +0.002490f, +0.005011f, + -0.003094f, +0.000847f, +0.000642f, +0.004785f, -0.007040f, +0.000919f, -0.001489f, +0.003076f, +0.006666f, -0.004495f, + -0.007607f, +0.002093f, -0.001448f, +0.001454f, +0.003248f, -0.000248f, -0.002256f, -0.002074f, -0.000171f, +0.000438f, + -0.005459f, +0.005555f, +0.002518f, -0.001461f, +0.002895f, +0.002672f, +0.000116f, +0.001631f, +0.000583f, +0.000930f, + +0.001491f, -0.000390f, +0.000538f, +0.000010f, -0.000718f, -0.000522f, -0.002102f, -0.001013f, -0.000092f, -0.001548f, + +0.001852f, -0.000704f, -0.001048f, +0.000126f, -0.000810f, -0.000538f, -0.001164f, +0.000855f, +0.001136f, +0.000221f, + -0.000214f, +0.000548f, +0.000098f, +0.000521f, +0.000460f, -0.000107f, +0.000044f, +0.000692f, -0.000543f, +0.000880f, + +0.000497f, +0.000697f, +0.000202f, -0.000215f, +0.000332f, +0.000590f + }, + { + -0.000225f, +0.022740f, -0.008889f, -0.001684f, +0.001910f, +0.000105f, -0.000850f, -0.000349f, -0.001364f, +0.003337f, + +0.000566f, +0.001153f, +0.000807f, -0.003973f, +0.002810f, -0.019153f, -0.022155f, -0.005752f, +0.003470f, +0.007553f, + +0.010551f, -0.001338f, -0.000793f, -0.028472f, -0.004304f, +0.002194f, +0.008988f, -0.010524f, +0.009318f, +0.006802f, + +0.002050f, +0.010789f, +0.005372f, +0.009642f, +0.006451f, -0.005996f, -0.000609f, +0.001784f, +0.001850f, -0.001760f, + -0.000155f, -0.003671f, +0.002932f, -0.000134f, -0.000244f, +0.003859f, -0.002256f, -0.001072f, -0.000305f, +0.003858f, + -0.000956f, -0.000918f, -0.002332f, +0.000667f, +0.000935f, +0.000900f, -0.001782f, -0.000165f, -0.001499f, -0.001139f, + -0.000587f, -0.000949f, +0.001291f, -0.002485f, -0.002099f, +0.000022f, +0.003117f, -0.000202f, -0.001744f, +0.000469f, + +0.000749f, +0.001466f, -0.000432f, +0.000182f, +0.001248f, -0.000774f, +0.000678f, -0.000267f, -0.001214f, -0.000235f, + +0.000513f, -0.000174f, +0.000709f, +0.000120f, +0.000496f, -0.000406f, +0.000061f, -0.000136f, +0.000171f, -0.000136f, + +0.000043f, -0.000541f, +0.000155f, -0.000102f, -0.000061f, +0.000079f + }, + { + +0.038017f, -0.000471f, -0.018288f, -0.031106f, +0.013158f, -0.000267f, -0.000410f, +0.006366f, -0.006919f, +0.004248f, + -0.001228f, +0.002913f, -0.019891f, -0.002655f, +0.008466f, -0.004974f, +0.009537f, -0.004591f, +0.010075f, -0.002894f, + -0.007580f, -0.002171f, +0.000069f, -0.006711f, -0.000197f, +0.002118f, +0.003281f, +0.000487f, -0.002576f, +0.001297f, + +0.006283f, +0.006273f, +0.002941f, +0.003009f, +0.001643f, -0.008100f, +0.003272f, -0.006923f, +0.001237f, -0.006393f, + -0.000156f, -0.003207f, -0.000156f, +0.001992f, +0.005459f, -0.001930f, -0.001480f, -0.001852f, -0.000323f, -0.003591f, + +0.000459f, -0.003756f, -0.000310f, -0.000624f, +0.000450f, +0.000679f, -0.000646f, +0.002116f, +0.000683f, -0.001013f, + -0.000336f, -0.001592f, +0.000617f, +0.000686f, -0.000896f, -0.000656f, -0.001092f, +0.000665f, +0.000499f, -0.001150f, + +0.000447f, +0.000424f, +0.000684f, +0.001451f, +0.000244f, -0.000190f, -0.000627f, +0.000811f, -0.000089f, +0.000013f, + -0.000229f, -0.000139f, +0.000712f, +0.001285f, +0.000083f, +0.000504f, +0.001398f, -0.000199f, +0.000030f, +0.000248f, + +0.000229f, +0.000598f, +0.000263f, +0.000361f, -0.000212f, -0.000231f + }, + { + -0.000130f, +0.007261f, +0.002735f, +0.005004f, +0.001759f, -0.000132f, -0.001351f, +0.002389f, +0.000710f, -0.003494f, + -0.003325f, +0.000291f, -0.006853f, +0.003336f, +0.003557f, +0.038053f, -0.021105f, +0.010072f, +0.005322f, -0.005560f, + -0.008826f, -0.004618f, -0.011385f, -0.001014f, +0.000533f, -0.009796f, +0.004934f, +0.005939f, +0.007485f, +0.000077f, + -0.009545f, +0.014516f, +0.005156f, +0.001342f, +0.010550f, +0.000804f, -0.002760f, -0.000295f, -0.000676f, -0.002329f, + -0.003908f, +0.001347f, -0.002356f, +0.001293f, -0.004149f, +0.000775f, -0.000861f, -0.001577f, +0.000574f, -0.001790f, + -0.002098f, +0.002079f, +0.001346f, +0.000215f, +0.003078f, -0.000427f, -0.002329f, +0.001259f, +0.000644f, +0.000034f, + -0.001662f, -0.001943f, -0.000302f, -0.000724f, +0.001932f, -0.001441f, +0.001058f, +0.000658f, +0.001390f, -0.001439f, + -0.000506f, -0.001473f, -0.000248f, -0.000147f, -0.001996f, -0.000261f, -0.000995f, -0.000529f, +0.000270f, -0.000383f, + -0.000324f, -0.000558f, +0.000721f, +0.000162f, -0.000412f, +0.000365f, -0.000266f, -0.000959f, -0.000241f, -0.000373f, + -0.000015f, -0.000314f, -0.000203f, -0.000608f, -0.000172f, +0.000088f + }, + { + -0.028749f, -0.185587f, +0.018097f, +0.017632f, -0.030580f, +0.010260f, +0.025427f, +0.000544f, -0.000529f, +0.005632f, + +0.001338f, -0.006096f, -0.017779f, -0.004489f, +0.007562f, -0.005498f, -0.007910f, +0.009566f, -0.014895f, -0.006846f, + +0.006317f, +0.007755f, -0.002914f, -0.009614f, +0.007551f, +0.004930f, +0.006591f, +0.005559f, +0.001099f, -0.002480f, + +0.000239f, -0.004792f, -0.002788f, +0.005289f, -0.003606f, +0.002064f, +0.005845f, -0.004750f, +0.005573f, +0.002332f, + -0.004953f, +0.005461f, -0.002307f, -0.001072f, +0.005119f, -0.007695f, -0.003857f, -0.002843f, +0.001312f, -0.001874f, + -0.000284f, +0.000944f, +0.001036f, -0.001395f, -0.001719f, +0.002801f, -0.000637f, +0.002300f, +0.001550f, -0.001089f, + +0.002380f, +0.001090f, -0.000593f, +0.001819f, -0.001846f, +0.002725f, +0.002419f, -0.000759f, -0.001180f, -0.000084f, + -0.000877f, +0.001362f, -0.000631f, -0.000443f, +0.000986f, +0.000687f, +0.001092f, -0.000356f, +0.000281f, -0.000538f, + +0.000730f, +0.000224f, +0.000326f, -0.000227f, +0.000843f, +0.000476f, -0.001175f, +0.000730f, +0.000924f, +0.000215f, + +0.000101f, +0.000092f, -0.000072f, +0.000266f, -0.000107f, +0.000425f + }, + { + -0.000501f, -0.033461f, -0.006116f, +0.001104f, -0.001211f, +0.007522f, +0.003439f, +0.002245f, +0.002635f, -0.002384f, + +0.005338f, -0.013750f, +0.005322f, -0.008942f, +0.000283f, +0.001557f, +0.000773f, -0.004779f, +0.002531f, -0.019881f, + +0.000864f, -0.010168f, +0.004069f, -0.002564f, -0.003539f, -0.008945f, -0.004927f, +0.004163f, +0.003874f, +0.000154f, + -0.004558f, +0.004426f, -0.002789f, +0.000851f, +0.000094f, +0.001422f, +0.002537f, -0.005104f, +0.002344f, +0.005333f, + -0.002697f, -0.000520f, -0.000812f, +0.003984f, -0.004152f, +0.003119f, +0.002070f, -0.001918f, -0.004287f, +0.000659f, + -0.002199f, -0.002611f, -0.001810f, +0.002412f, -0.000404f, -0.001194f, -0.000824f, -0.000303f, -0.001849f, +0.000474f, + +0.002198f, +0.001641f, +0.000468f, -0.001436f, -0.000637f, -0.000670f, +0.000490f, -0.000153f, -0.000849f, +0.000342f, + +0.000429f, +0.000371f, +0.000600f, +0.001496f, +0.000203f, -0.000424f, -0.000127f, -0.000484f, +0.000290f, +0.000271f, + +0.000110f, -0.000882f, +0.000374f, -0.000237f, +0.001027f, +0.000261f, -0.000794f, -0.000488f, -0.000320f, -0.000335f, + -0.000957f, +0.000108f, +0.000301f, -0.000264f, -0.000173f, -0.000066f + }, + { + +0.089984f, +0.033904f, -0.004097f, -0.005764f, -0.011474f, -0.021079f, +0.012678f, +0.008438f, -0.003867f, +0.011523f, + -0.004983f, +0.003056f, -0.013185f, +0.005443f, -0.013137f, -0.006449f, -0.011966f, +0.000258f, -0.010816f, +0.000981f, + +0.014677f, +0.004767f, -0.001456f, +0.003423f, +0.005839f, -0.005671f, -0.004221f, -0.001552f, +0.000127f, -0.003688f, + -0.002573f, -0.007238f, +0.000848f, -0.000734f, -0.005704f, +0.006057f, -0.000111f, +0.002689f, -0.005058f, -0.002338f, + +0.001428f, -0.007724f, +0.006576f, +0.001799f, +0.003069f, -0.001335f, +0.000377f, +0.002735f, +0.001063f, -0.002356f, + -0.001256f, -0.002321f, -0.004724f, -0.001522f, -0.000033f, -0.000704f, -0.000004f, +0.000625f, -0.001066f, -0.000747f, + +0.000265f, -0.001674f, +0.002231f, +0.001035f, +0.001044f, +0.001682f, -0.000908f, +0.000436f, +0.000470f, +0.000291f, + +0.000081f, +0.000163f, +0.000029f, +0.000913f, +0.000028f, -0.001036f, +0.000850f, +0.000136f, -0.000128f, +0.000143f, + +0.000459f, +0.000026f, -0.000905f, +0.000047f, -0.000254f, -0.000509f, +0.000367f, -0.000198f, +0.000476f, +0.000800f, + -0.000290f, -0.000387f, +0.000255f, -0.000008f, +0.000127f, +0.000363f + }, + { + -0.003605f, +0.010838f, +0.016074f, -0.000268f, +0.001724f, -0.000342f, +0.003821f, -0.009040f, -0.002025f, +0.001322f, + -0.000712f, +0.000411f, +0.001282f, +0.012764f, -0.006361f, +0.006217f, +0.005304f, -0.010513f, +0.006908f, -0.000991f, + -0.017756f, +0.024033f, +0.016276f, +0.023453f, +0.001128f, -0.010238f, +0.002163f, +0.006430f, -0.008501f, +0.005869f, + -0.004824f, -0.001898f, -0.005438f, +0.001630f, +0.003171f, -0.001060f, -0.002875f, -0.000314f, -0.002983f, +0.000023f, + +0.000290f, -0.001645f, +0.003178f, +0.000832f, -0.002484f, +0.002112f, +0.003192f, -0.002133f, -0.000851f, +0.001102f, + +0.000908f, +0.000061f, -0.002992f, -0.000312f, +0.002419f, -0.000628f, -0.001687f, +0.000434f, +0.001735f, -0.000066f, + +0.000102f, +0.000706f, +0.000895f, -0.000962f, -0.001021f, -0.001434f, -0.000042f, +0.000488f, +0.001133f, -0.001794f, + -0.001377f, +0.000412f, -0.000405f, +0.000179f, +0.000142f, +0.000096f, -0.000191f, +0.000200f, +0.000493f, -0.000701f, + +0.000670f, -0.000027f, +0.000903f, +0.000436f, -0.000422f, +0.000756f, -0.000361f, +0.000237f, +0.000096f, +0.000209f, + -0.000400f, +0.000573f, +0.000505f, +0.000696f, +0.000287f, -0.000099f + }, + { + +0.024411f, -0.147860f, -0.010714f, -0.003728f, +0.023330f, +0.003639f, +0.014108f, +0.008396f, -0.003973f, -0.002430f, + +0.004396f, -0.007797f, -0.004879f, -0.000999f, -0.035604f, +0.000166f, +0.002870f, +0.025658f, -0.016408f, +0.008364f, + +0.005541f, -0.001837f, -0.001603f, +0.006348f, -0.005295f, +0.003903f, +0.006897f, -0.002159f, +0.003710f, -0.003198f, + -0.005215f, -0.000890f, +0.000854f, -0.001764f, +0.001474f, +0.001486f, +0.005389f, +0.004638f, +0.004876f, +0.003332f, + -0.004339f, +0.003601f, -0.006590f, -0.002493f, +0.004183f, -0.000530f, -0.000694f, +0.002406f, -0.000658f, -0.000100f, + -0.002287f, +0.003847f, -0.001383f, +0.001031f, -0.000093f, -0.001316f, +0.005685f, +0.002239f, +0.001717f, -0.000399f, + +0.000149f, +0.000470f, -0.000811f, +0.000877f, +0.000666f, -0.001826f, -0.000627f, -0.000914f, +0.000250f, +0.001429f, + +0.000572f, -0.000923f, +0.001747f, -0.000225f, +0.000090f, +0.000285f, +0.000612f, -0.000505f, +0.000727f, +0.000899f, + +0.000371f, +0.000793f, -0.000113f, -0.000563f, +0.000203f, -0.000424f, -0.000584f, +0.000269f, +0.000696f, -0.000190f, + +0.000235f, -0.000179f, -0.000258f, -0.000391f, +0.000288f, +0.000014f + }, + { + -0.006551f, -0.020305f, +0.011673f, +0.014860f, -0.001060f, -0.000776f, +0.006590f, -0.002896f, +0.001079f, -0.001793f, + +0.001026f, -0.005435f, -0.002545f, +0.026582f, +0.021470f, -0.021634f, -0.003646f, -0.006707f, -0.002713f, -0.003288f, + +0.016809f, +0.002103f, +0.014955f, +0.006983f, +0.007675f, -0.001504f, +0.001256f, +0.007975f, -0.008372f, +0.002270f, + +0.003681f, -0.001213f, +0.000360f, -0.005563f, +0.003652f, +0.005311f, +0.006734f, -0.000943f, +0.005212f, -0.000565f, + +0.004216f, -0.001402f, +0.001396f, -0.002156f, -0.001124f, -0.001618f, -0.001678f, -0.002289f, -0.001117f, -0.001508f, + -0.000546f, +0.002805f, -0.001172f, -0.000584f, -0.000092f, +0.003436f, +0.002634f, -0.001779f, +0.002974f, -0.000579f, + -0.002842f, +0.001277f, +0.001990f, +0.001709f, -0.001003f, -0.000290f, -0.004086f, -0.000089f, -0.000752f, +0.001450f, + +0.001830f, -0.000820f, +0.000171f, -0.000997f, +0.000950f, -0.001025f, +0.001297f, -0.000426f, -0.000624f, +0.000491f, + -0.000328f, -0.000004f, -0.000562f, +0.000540f, +0.000542f, +0.000469f, -0.000383f, -0.000024f, -0.000231f, -0.000224f, + -0.000819f, +0.000002f, -0.000140f, +0.000631f, -0.000520f, +0.000682f + } + }, + { + { + +0.000990f, +0.003012f, +0.066430f, +0.031112f, -0.000909f, +0.003394f, -0.000048f, +0.013192f, +0.001678f, +0.001927f, + -0.000318f, +0.006146f, -0.013488f, +0.010328f, -0.002114f, +0.003630f, -0.004321f, -0.003159f, +0.006784f, -0.003706f, + -0.008783f, +0.001177f, +0.009060f, -0.009582f, +0.012451f, -0.001610f, +0.001619f, +0.001197f, +0.003349f, +0.005613f, + +0.004397f, +0.000593f, -0.007183f, -0.004878f, -0.004567f, -0.003183f, +0.003368f, -0.000573f, +0.007077f, +0.000005f, + +0.003268f, +0.004232f, -0.006520f, +0.000349f, +0.003551f, +0.001007f, +0.001252f, +0.001633f, -0.000849f, -0.001122f, + +0.001894f, +0.001625f, +0.004011f, -0.001659f, +0.002751f, +0.003877f, -0.000528f, -0.000253f, -0.001704f, +0.001547f, + +0.000154f, -0.000459f, -0.000288f, +0.000128f, +0.000597f, +0.001891f, +0.000154f, +0.001848f, +0.002027f, -0.000160f, + -0.000906f, -0.000180f, -0.000571f, -0.000006f, +0.000087f, -0.000019f, +0.000585f, -0.000819f, -0.000146f, -0.001316f, + +0.000650f, -0.000480f, -0.000088f, +0.000021f, -0.000045f, +0.000373f, -0.000213f, -0.000229f, -0.000076f, -0.000200f, + +0.000298f, +0.000569f, +0.000147f, +0.000058f, +0.000461f, +0.000002f + }, + { + +0.000062f, -0.020507f, +0.024698f, -0.034573f, -0.011691f, -0.000154f, +0.005271f, +0.002749f, +0.010003f, -0.004567f, + -0.008728f, -0.002876f, +0.002958f, +0.005946f, -0.005117f, +0.005918f, -0.021409f, -0.006028f, +0.001569f, +0.010748f, + +0.001014f, -0.008896f, -0.000176f, -0.008136f, +0.002095f, -0.004853f, -0.014578f, -0.000360f, -0.005449f, +0.006111f, + +0.001805f, -0.002001f, -0.002698f, -0.005933f, +0.006720f, +0.000263f, -0.000166f, +0.006865f, +0.002619f, +0.001359f, + +0.003844f, -0.000419f, -0.001694f, -0.004282f, -0.000129f, -0.002131f, -0.003739f, -0.000650f, -0.000052f, +0.002818f, + -0.000917f, +0.000338f, +0.002427f, +0.000211f, +0.002534f, -0.000853f, +0.003102f, -0.000915f, +0.001429f, +0.001548f, + -0.001760f, -0.000766f, -0.001021f, +0.000624f, -0.001995f, -0.002499f, +0.000241f, +0.000504f, -0.000205f, +0.000195f, + +0.000759f, -0.001967f, -0.000046f, -0.000608f, -0.001077f, -0.000274f, +0.000831f, -0.000917f, +0.000344f, -0.000107f, + -0.000244f, -0.000631f, +0.000318f, -0.000889f, -0.000308f, -0.000449f, -0.000399f, -0.000349f, -0.000555f, -0.000057f, + +0.000224f, +0.000190f, -0.000433f, -0.000236f, -0.000005f, -0.000225f + }, + { + -0.008584f, +0.045964f, -0.009278f, -0.076563f, -0.006534f, -0.002641f, +0.000886f, +0.004631f, +0.000019f, -0.002708f, + +0.001818f, +0.023390f, +0.006446f, +0.004626f, +0.000110f, -0.007654f, -0.000041f, -0.002139f, -0.008050f, +0.001013f, + -0.000563f, +0.016871f, -0.007398f, +0.016065f, +0.002783f, -0.009070f, +0.013496f, +0.003269f, +0.001879f, -0.001084f, + +0.000695f, +0.003133f, +0.009488f, +0.007158f, -0.003276f, -0.002302f, -0.001913f, -0.001131f, -0.000045f, +0.001854f, + -0.000087f, +0.002989f, +0.003306f, -0.004798f, +0.000122f, -0.001559f, +0.002530f, +0.000345f, +0.001981f, +0.000110f, + +0.002142f, -0.002194f, -0.001889f, -0.000406f, +0.001721f, -0.000619f, -0.001739f, -0.001233f, -0.000868f, -0.000708f, + -0.003501f, -0.000915f, -0.001212f, -0.000061f, +0.001656f, -0.000799f, -0.002280f, +0.001203f, -0.002302f, +0.000067f, + -0.000145f, -0.000668f, +0.000049f, -0.000575f, -0.000578f, -0.000478f, +0.000265f, -0.000952f, +0.000365f, -0.001010f, + +0.000196f, +0.000060f, -0.000319f, +0.000530f, -0.000758f, -0.000188f, -0.000476f, +0.000307f, -0.000339f, -0.000465f, + +0.000206f, -0.000216f, -0.000087f, +0.000126f, +0.000470f, -0.000067f + }, + { + +0.019112f, -0.140762f, +0.018560f, +0.093065f, +0.000282f, -0.001508f, +0.004232f, -0.003217f, -0.001468f, +0.003558f, + +0.002112f, -0.003291f, -0.006690f, -0.000318f, -0.000231f, -0.003718f, +0.004236f, -0.007582f, +0.003575f, -0.002167f, + +0.002569f, -0.005572f, -0.002446f, +0.000875f, -0.003234f, -0.003224f, +0.003809f, +0.001342f, -0.003245f, -0.004755f, + -0.004106f, +0.004241f, -0.004761f, +0.001744f, -0.000727f, +0.001203f, +0.002649f, -0.000170f, -0.000471f, +0.001196f, + +0.004401f, -0.004008f, -0.000535f, -0.001213f, -0.002783f, +0.001650f, +0.003965f, +0.001372f, -0.000574f, +0.002448f, + +0.003001f, +0.001079f, -0.005125f, -0.001751f, -0.001987f, -0.001246f, +0.000744f, +0.000580f, +0.000829f, -0.000594f, + +0.000041f, +0.000067f, +0.001957f, -0.000523f, -0.000069f, +0.000736f, +0.000038f, -0.000521f, +0.000155f, -0.001194f, + -0.001296f, +0.000168f, +0.000100f, -0.000089f, -0.000758f, +0.000310f, +0.000913f, +0.000504f, +0.000030f, -0.000677f, + -0.000562f, -0.000399f, +0.000081f, +0.000216f, +0.000357f, -0.000111f, +0.000676f, -0.000394f, -0.000114f, -0.000055f, + -0.000561f, +0.000049f, +0.000067f, +0.000253f, -0.000108f, +0.000066f + }, + { + +0.004218f, -0.013207f, -0.003004f, -0.004848f, -0.001300f, -0.000644f, +0.002338f, +0.001484f, +0.006729f, -0.000543f, + -0.007045f, +0.005423f, +0.006366f, +0.003049f, +0.019400f, +0.012466f, +0.016727f, -0.006407f, -0.002040f, -0.006456f, + +0.000979f, -0.002195f, -0.019857f, +0.010019f, -0.007348f, -0.013889f, +0.000589f, -0.002708f, +0.004621f, +0.003516f, + +0.003071f, -0.001777f, -0.002952f, -0.003119f, -0.008188f, -0.006697f, +0.003031f, +0.001658f, -0.002493f, -0.002912f, + -0.003332f, -0.002691f, +0.001096f, -0.001967f, -0.000303f, -0.003172f, -0.000727f, +0.000291f, +0.004442f, +0.001133f, + -0.001036f, -0.001143f, +0.001387f, -0.001812f, -0.000335f, -0.001099f, -0.001563f, -0.001075f, +0.001302f, -0.000019f, + -0.000326f, -0.000814f, +0.001295f, -0.001216f, -0.000685f, +0.000367f, -0.000004f, +0.000512f, -0.000449f, +0.001152f, + -0.001315f, +0.001797f, +0.000311f, -0.000648f, -0.000125f, -0.000401f, -0.000944f, -0.000311f, -0.000964f, -0.000168f, + +0.000771f, +0.000139f, -0.000522f, +0.000467f, -0.000129f, -0.000286f, -0.000250f, +0.000712f, -0.000256f, -0.000508f, + +0.000108f, +0.000257f, +0.000064f, +0.000159f, +0.000043f, +0.000218f + }, + { + +0.023980f, -0.090652f, +0.005705f, -0.064016f, +0.014926f, +0.002874f, +0.004804f, -0.005027f, +0.002727f, -0.003069f, + +0.006032f, +0.002004f, +0.010331f, -0.011729f, -0.000896f, -0.000907f, +0.003827f, +0.002290f, +0.008172f, -0.005295f, + +0.015405f, +0.003377f, -0.007154f, -0.000421f, -0.000370f, -0.001812f, +0.001170f, +0.000065f, -0.001400f, -0.003749f, + +0.002636f, +0.004756f, +0.004367f, +0.000748f, -0.005202f, +0.001187f, -0.000020f, -0.000312f, +0.006332f, -0.001130f, + -0.007470f, -0.001923f, -0.000676f, +0.001893f, +0.000833f, +0.002223f, -0.006022f, -0.002736f, +0.002036f, -0.001124f, + -0.000789f, +0.002767f, -0.000331f, -0.001077f, +0.001601f, +0.003741f, +0.000140f, +0.000434f, +0.001059f, +0.000252f, + +0.002103f, -0.000427f, -0.000177f, -0.001664f, -0.000043f, -0.000117f, -0.002526f, -0.001111f, +0.000537f, -0.001315f, + +0.000981f, +0.001503f, -0.002679f, +0.000728f, +0.000228f, -0.001460f, -0.000718f, +0.000683f, +0.001115f, +0.000368f, + -0.000193f, +0.000812f, -0.000102f, +0.000528f, +0.000751f, -0.000365f, +0.000043f, +0.000677f, -0.000458f, +0.000844f, + +0.000418f, +0.000338f, +0.000308f, -0.000247f, +0.000446f, +0.000425f + }, + { + +0.000501f, +0.006157f, +0.000186f, +0.000868f, -0.001162f, +0.000461f, -0.000836f, +0.002173f, -0.002188f, +0.000667f, + +0.003213f, +0.000357f, +0.001101f, -0.007400f, -0.003356f, -0.015433f, -0.012155f, -0.012142f, +0.016228f, -0.013692f, + +0.016369f, -0.012701f, -0.007682f, +0.000796f, -0.001956f, +0.003306f, +0.000173f, -0.001638f, +0.003894f, +0.008960f, + +0.003739f, +0.003792f, +0.015846f, +0.005395f, +0.000894f, -0.004822f, +0.007253f, -0.000722f, +0.000695f, -0.005106f, + +0.002223f, +0.000477f, -0.001208f, -0.002019f, +0.002700f, +0.001735f, +0.000943f, -0.001621f, -0.000374f, +0.002847f, + -0.000192f, -0.002904f, -0.001848f, +0.001579f, +0.001136f, -0.000680f, +0.000294f, -0.002095f, -0.002557f, +0.000273f, + +0.000688f, -0.001417f, +0.000039f, -0.001420f, -0.001538f, -0.000104f, +0.001395f, -0.000645f, -0.000306f, +0.000967f, + +0.000990f, -0.000457f, +0.000466f, -0.000289f, -0.000185f, +0.000722f, -0.000584f, -0.000016f, -0.000595f, -0.000295f, + +0.000060f, +0.000975f, +0.000240f, -0.000131f, +0.000278f, -0.000261f, +0.000236f, -0.000059f, +0.000279f, +0.000172f, + -0.000299f, -0.000243f, +0.000009f, +0.000335f, -0.000065f, +0.000078f + }, + { + -0.002518f, +0.019648f, +0.018205f, +0.002023f, -0.021593f, +0.003395f, +0.000813f, +0.000565f, -0.003231f, +0.001602f, + -0.001758f, -0.003222f, -0.005322f, -0.009979f, +0.012080f, -0.006358f, +0.008646f, +0.001749f, +0.005856f, -0.001482f, + -0.016597f, +0.003317f, -0.001527f, -0.004313f, +0.000536f, -0.001385f, +0.002904f, +0.000705f, -0.004164f, +0.006423f, + +0.003671f, +0.004287f, -0.000775f, +0.004292f, +0.002299f, -0.006086f, -0.001784f, -0.003785f, -0.000001f, -0.003353f, + -0.004654f, -0.003447f, +0.004238f, +0.001517f, +0.001569f, +0.000132f, +0.000900f, -0.000367f, -0.004066f, -0.004014f, + -0.001891f, -0.000508f, -0.003672f, -0.000195f, -0.000620f, +0.000506f, +0.000024f, +0.002542f, -0.000444f, -0.000117f, + -0.001378f, -0.001561f, +0.000096f, +0.000716f, -0.000397f, -0.000393f, -0.001149f, +0.001431f, -0.001220f, -0.000413f, + +0.001151f, +0.000194f, +0.000031f, +0.001702f, +0.000065f, -0.000468f, -0.000882f, +0.000470f, +0.001007f, -0.001169f, + -0.000004f, -0.000252f, +0.000594f, +0.000292f, +0.001329f, -0.000347f, +0.000972f, +0.000817f, +0.000123f, -0.000135f, + +0.000372f, +0.000219f, +0.000124f, +0.000288f, -0.000261f, +0.000201f + }, + { + +0.001349f, -0.005285f, +0.007265f, +0.003976f, +0.003166f, +0.000900f, +0.000154f, -0.001704f, +0.003406f, +0.001559f, + -0.008186f, -0.001829f, -0.006967f, +0.006210f, +0.008931f, +0.013434f, +0.024698f, -0.008509f, +0.008485f, -0.011420f, + -0.013889f, +0.005206f, -0.005079f, -0.012953f, +0.002502f, -0.000557f, +0.000636f, -0.000090f, +0.007850f, +0.001797f, + -0.005740f, +0.017159f, -0.004230f, +0.003596f, +0.012654f, -0.004270f, -0.000296f, +0.000494f, +0.001606f, -0.005469f, + -0.002279f, -0.004025f, +0.001262f, +0.001091f, -0.005246f, -0.001061f, +0.003908f, -0.000676f, -0.002602f, -0.001772f, + +0.000155f, +0.000189f, +0.003064f, -0.000286f, +0.000811f, +0.000343f, -0.000650f, -0.002305f, +0.000723f, +0.002107f, + -0.001139f, -0.000938f, +0.000782f, +0.000561f, +0.000838f, -0.001068f, +0.001522f, +0.001525f, -0.000156f, -0.001535f, + +0.000337f, -0.002417f, -0.000377f, -0.000821f, -0.001945f, +0.000292f, -0.000415f, -0.001064f, -0.000644f, +0.000188f, + -0.000134f, +0.000374f, +0.000441f, -0.000210f, +0.000315f, -0.000168f, -0.000162f, -0.000687f, -0.000556f, -0.000322f, + +0.000455f, -0.000436f, -0.000432f, -0.000378f, -0.000872f, +0.000668f + }, + { + +0.028596f, -0.207279f, -0.033332f, +0.024324f, -0.032919f, +0.015077f, +0.007691f, -0.001346f, +0.009567f, -0.008247f, + +0.001435f, -0.007955f, -0.004342f, -0.011107f, +0.017351f, -0.010511f, -0.006813f, +0.003814f, -0.006987f, -0.005238f, + +0.003251f, +0.007914f, -0.002903f, -0.006701f, +0.001110f, +0.003861f, +0.005772f, +0.005651f, -0.001646f, -0.001916f, + +0.002967f, -0.006804f, -0.003854f, +0.004102f, +0.000373f, +0.004565f, +0.006241f, -0.002375f, +0.002538f, -0.001479f, + +0.002541f, -0.001460f, -0.000003f, +0.003991f, -0.000922f, -0.004138f, -0.004978f, -0.002431f, +0.001581f, +0.000659f, + -0.002125f, -0.001165f, -0.001342f, -0.000689f, +0.000720f, +0.000521f, -0.000242f, +0.002536f, +0.002387f, +0.001207f, + +0.000138f, +0.000552f, +0.000923f, +0.001420f, -0.001689f, +0.002873f, +0.001129f, -0.000445f, -0.000386f, -0.001985f, + +0.000150f, +0.001393f, -0.000509f, +0.000360f, +0.001263f, +0.000682f, -0.000405f, +0.000602f, +0.000330f, -0.000008f, + +0.000856f, -0.000294f, +0.000431f, +0.000181f, +0.000482f, -0.000469f, -0.000946f, +0.000499f, +0.000437f, -0.000152f, + +0.000820f, +0.000083f, +0.000226f, +0.000036f, +0.000344f, -0.000386f + }, + { + +0.001186f, -0.049535f, -0.004781f, +0.018827f, -0.005993f, +0.002374f, +0.010533f, -0.000498f, +0.000172f, +0.002041f, + +0.001460f, -0.005721f, -0.005921f, +0.007014f, -0.009849f, +0.011629f, -0.001846f, -0.006781f, -0.011971f, -0.003776f, + -0.008201f, +0.002939f, -0.006325f, -0.015040f, +0.004705f, -0.004312f, -0.005761f, +0.008309f, +0.001161f, -0.005289f, + +0.004223f, -0.002218f, -0.005503f, -0.000119f, +0.002667f, -0.002038f, +0.001750f, -0.000524f, +0.000662f, +0.004805f, + -0.001235f, -0.002805f, -0.000786f, +0.000845f, +0.001846f, +0.000362f, +0.000912f, -0.002728f, -0.001337f, -0.002023f, + -0.001017f, -0.002710f, +0.000002f, +0.001254f, -0.000752f, -0.001009f, -0.001421f, -0.000330f, -0.000580f, -0.000341f, + +0.000902f, -0.000667f, +0.001642f, -0.000515f, -0.000478f, -0.000255f, -0.000637f, -0.000580f, +0.000014f, -0.000279f, + +0.000378f, +0.000606f, +0.000119f, +0.001553f, -0.000242f, +0.000329f, -0.000922f, +0.000302f, -0.000030f, +0.000942f, + +0.000216f, -0.000535f, -0.000369f, +0.000112f, +0.000291f, +0.000150f, -0.000028f, -0.000571f, -0.000391f, -0.000136f, + -0.000925f, +0.000174f, +0.000153f, -0.000473f, -0.000065f, +0.000084f + }, + { + -0.061067f, +0.226406f, +0.004349f, +0.002610f, -0.011826f, -0.004351f, +0.008833f, -0.002845f, +0.000289f, +0.010626f, + -0.000106f, +0.000251f, +0.000564f, -0.017955f, -0.005963f, -0.006379f, -0.001857f, -0.009454f, -0.009488f, +0.008772f, + +0.010326f, -0.005159f, +0.005391f, +0.000228f, +0.009353f, -0.002622f, -0.005481f, +0.002771f, -0.008928f, +0.002452f, + -0.008095f, -0.000911f, +0.000347f, -0.006249f, -0.004198f, +0.005949f, +0.005044f, +0.000406f, -0.000668f, -0.002624f, + -0.003575f, -0.001303f, +0.004292f, -0.005118f, +0.005574f, +0.002284f, +0.000914f, -0.000611f, +0.002444f, -0.002972f, + -0.001225f, -0.002127f, -0.004052f, -0.000261f, -0.001882f, -0.000893f, -0.002206f, +0.003930f, -0.002361f, -0.000123f, + -0.000994f, -0.001313f, +0.002437f, +0.000409f, +0.001979f, +0.000975f, +0.000637f, -0.001191f, +0.001193f, +0.000431f, + -0.000011f, +0.000577f, +0.000856f, -0.000257f, -0.001319f, +0.001158f, +0.000221f, +0.000513f, -0.000553f, +0.000530f, + -0.001240f, +0.000439f, -0.000559f, -0.000119f, -0.000551f, -0.000411f, +0.000316f, -0.000079f, +0.000949f, +0.000161f, + -0.000429f, +0.000020f, -0.000157f, -0.000038f, +0.000125f, +0.000463f + }, + { + +0.002655f, +0.029782f, +0.002578f, -0.003055f, +0.002016f, -0.004734f, +0.011720f, -0.013386f, -0.002735f, +0.002841f, + -0.002702f, +0.004946f, +0.000945f, +0.011714f, -0.008703f, +0.003360f, -0.004856f, -0.002654f, -0.005219f, +0.002567f, + -0.004083f, -0.000401f, +0.013342f, +0.012995f, +0.015050f, -0.001781f, -0.003210f, -0.001136f, +0.004494f, -0.009980f, + +0.004567f, -0.004762f, +0.001989f, -0.003925f, +0.004647f, -0.001206f, -0.004158f, -0.003458f, +0.005852f, -0.003292f, + -0.003580f, +0.003237f, -0.000534f, +0.000908f, -0.002029f, +0.001270f, +0.004203f, -0.004156f, -0.000488f, +0.003237f, + -0.001283f, -0.001565f, +0.001329f, -0.000856f, +0.000488f, -0.000408f, -0.001299f, +0.000726f, +0.001101f, -0.000685f, + +0.001895f, +0.000017f, +0.000145f, +0.001485f, -0.002289f, +0.000193f, -0.001171f, +0.000465f, +0.000125f, -0.000542f, + -0.002188f, +0.001452f, -0.001300f, +0.000094f, +0.000650f, -0.000716f, -0.000794f, +0.000059f, +0.000951f, -0.000021f, + +0.000171f, +0.001203f, +0.000087f, +0.000361f, -0.000280f, +0.000919f, -0.000249f, +0.000052f, +0.000116f, +0.000184f, + +0.000143f, +0.000407f, +0.000101f, +0.000861f, +0.000362f, -0.000229f + }, + { + -0.042906f, -0.048370f, -0.004453f, +0.018531f, -0.006017f, +0.013823f, +0.009923f, +0.003811f, -0.005498f, +0.003842f, + +0.000071f, -0.005158f, -0.009261f, -0.003055f, -0.040768f, +0.009521f, +0.008805f, +0.011048f, -0.003980f, +0.003669f, + +0.003813f, -0.003093f, +0.006325f, +0.000894f, -0.000520f, +0.004681f, +0.006106f, -0.005379f, -0.000631f, -0.002460f, + -0.001833f, -0.001405f, -0.001151f, +0.005611f, -0.002494f, +0.006755f, +0.005263f, +0.006815f, +0.000404f, +0.001149f, + -0.003165f, -0.005103f, +0.001586f, +0.003190f, -0.000471f, +0.003207f, +0.002237f, -0.001840f, +0.000992f, -0.000697f, + -0.001168f, +0.000564f, -0.000598f, +0.000454f, +0.000186f, -0.000079f, +0.004135f, +0.002795f, +0.000930f, -0.001582f, + +0.001278f, +0.000155f, -0.000143f, +0.001253f, +0.000381f, -0.000733f, -0.000675f, -0.000240f, +0.000519f, +0.000350f, + +0.000868f, -0.001110f, +0.000315f, +0.000460f, +0.001058f, +0.000331f, -0.000076f, -0.000052f, -0.000436f, +0.001227f, + +0.000667f, +0.001713f, -0.000012f, -0.000168f, +0.000375f, -0.000896f, -0.000338f, -0.000353f, +0.000565f, +0.000546f, + +0.000152f, -0.000445f, -0.000428f, +0.000079f, -0.000005f, -0.000185f + }, + { + +0.004813f, +0.003122f, -0.015750f, +0.009403f, +0.007546f, -0.006545f, +0.008562f, -0.002010f, -0.000679f, +0.002446f, + +0.003117f, -0.004753f, -0.005161f, +0.009730f, +0.029056f, -0.013099f, -0.012121f, +0.003622f, -0.000842f, +0.003908f, + +0.013059f, +0.007893f, +0.009809f, +0.003529f, +0.006516f, -0.001708f, +0.000573f, +0.003650f, -0.003180f, +0.003385f, + +0.003118f, +0.000258f, -0.003909f, -0.000138f, +0.005082f, +0.011102f, -0.001126f, +0.002615f, +0.004048f, +0.002016f, + -0.001453f, -0.002067f, -0.000783f, +0.003058f, -0.002232f, -0.001626f, -0.003349f, -0.001057f, +0.001088f, -0.002178f, + -0.000026f, +0.000919f, -0.000230f, -0.000150f, +0.001765f, +0.002455f, +0.001111f, +0.000480f, +0.000149f, -0.002399f, + +0.000041f, +0.000284f, +0.001983f, +0.001056f, +0.000021f, -0.002923f, -0.000058f, -0.000534f, +0.000218f, +0.001302f, + +0.000349f, -0.000409f, -0.000869f, +0.000040f, +0.000084f, +0.000210f, +0.000451f, +0.000255f, -0.000652f, -0.000428f, + -0.000165f, +0.000585f, +0.000213f, +0.000102f, -0.000289f, +0.000456f, +0.000021f, -0.000454f, +0.000527f, -0.000261f, + -0.000916f, -0.000222f, -0.000032f, +0.000446f, +0.000050f, +0.000713f + } + }, + { + { + +0.006345f, +0.072584f, +0.096494f, +0.044926f, +0.009654f, -0.001223f, -0.001289f, +0.009008f, -0.003257f, -0.003030f, + -0.005377f, -0.000188f, -0.014441f, +0.012157f, +0.001378f, +0.018118f, +0.008603f, -0.006818f, -0.002930f, -0.003360f, + -0.011726f, -0.001454f, +0.005765f, -0.001819f, +0.008560f, -0.009055f, -0.003282f, -0.002736f, -0.002440f, -0.000243f, + +0.000595f, +0.004507f, +0.002182f, -0.003350f, -0.001736f, -0.007186f, +0.005434f, +0.000573f, -0.000966f, -0.003632f, + +0.003519f, +0.003878f, -0.003153f, +0.001201f, +0.004248f, +0.002982f, +0.001435f, +0.000783f, +0.000050f, -0.000976f, + -0.000099f, +0.000213f, +0.002351f, -0.002829f, +0.000497f, +0.002884f, -0.001207f, +0.000499f, -0.001302f, +0.001359f, + +0.000322f, -0.000491f, +0.000641f, +0.000266f, -0.001238f, -0.001581f, -0.001002f, +0.001010f, +0.000940f, +0.000011f, + -0.000924f, -0.000287f, +0.000223f, +0.000044f, -0.000912f, -0.001109f, +0.000615f, -0.000815f, -0.000316f, -0.000895f, + -0.000158f, -0.001136f, -0.000427f, -0.000166f, +0.000226f, +0.000467f, -0.000097f, -0.000235f, -0.000176f, -0.000416f, + +0.000335f, +0.000462f, -0.000029f, +0.000035f, +0.000627f, -0.000155f + }, + { + -0.003260f, -0.067952f, +0.003254f, -0.000049f, +0.017924f, +0.005794f, +0.002809f, -0.004997f, +0.000841f, -0.000912f, + +0.001760f, -0.001388f, +0.002323f, +0.002041f, -0.007604f, +0.001715f, -0.019692f, -0.006175f, +0.000549f, +0.008965f, + -0.006487f, -0.011544f, -0.002331f, -0.015185f, +0.000756f, -0.005606f, -0.012575f, +0.002111f, -0.009225f, +0.010217f, + +0.003344f, -0.004348f, -0.001442f, -0.003187f, +0.004809f, +0.004400f, -0.005615f, -0.001937f, +0.001676f, +0.001975f, + +0.002820f, +0.000985f, -0.002386f, -0.004090f, +0.002054f, +0.005981f, +0.000693f, +0.001704f, +0.001462f, +0.001561f, + -0.001690f, +0.000047f, +0.000340f, -0.002402f, +0.001627f, -0.003010f, +0.003039f, -0.000383f, +0.000926f, +0.001430f, + -0.001559f, +0.000657f, +0.000044f, -0.000346f, -0.001728f, -0.002050f, +0.001272f, +0.001420f, +0.000570f, +0.000273f, + +0.000474f, -0.000418f, +0.001191f, +0.000245f, +0.000359f, +0.000775f, +0.000430f, -0.001073f, -0.001276f, -0.000469f, + +0.000418f, -0.000090f, +0.000016f, -0.000405f, +0.000147f, -0.000476f, -0.000023f, +0.000081f, -0.000379f, +0.000560f, + +0.000352f, -0.000042f, -0.000158f, +0.000120f, +0.000146f, -0.000065f + }, + { + +0.007339f, +0.022157f, -0.036072f, -0.009140f, +0.044023f, -0.002520f, +0.003927f, +0.008042f, -0.001760f, -0.014189f, + -0.011685f, +0.025584f, +0.005734f, -0.001337f, +0.002566f, -0.009665f, +0.000210f, +0.005441f, -0.007998f, -0.004827f, + -0.010539f, +0.014613f, -0.002421f, +0.017512f, -0.000620f, -0.002993f, +0.013853f, +0.001842f, +0.002120f, +0.005037f, + +0.001300f, -0.000535f, +0.009165f, +0.002163f, -0.008158f, -0.001922f, +0.001020f, -0.003497f, -0.000353f, -0.000991f, + -0.004887f, -0.000836f, +0.003153f, -0.004234f, -0.001569f, -0.002540f, +0.000548f, -0.001653f, +0.002162f, -0.000109f, + +0.000600f, -0.002591f, -0.001511f, -0.000911f, +0.001200f, -0.000484f, -0.001759f, +0.000172f, +0.000123f, +0.001426f, + -0.000067f, +0.000084f, -0.002302f, -0.001570f, -0.001775f, -0.001269f, -0.000278f, +0.000604f, -0.001683f, +0.001626f, + +0.000281f, -0.000762f, -0.000419f, +0.000413f, +0.000909f, -0.000604f, -0.000118f, -0.000707f, +0.000232f, -0.001659f, + -0.000196f, -0.000482f, -0.000243f, +0.000757f, -0.000308f, +0.000366f, -0.000150f, +0.000382f, -0.000254f, -0.000085f, + +0.000050f, -0.000288f, +0.000011f, -0.000011f, +0.000233f, -0.000192f + }, + { + +0.012474f, -0.220146f, -0.028401f, +0.073884f, -0.011168f, -0.000102f, +0.003108f, -0.005192f, +0.000906f, +0.006821f, + +0.002096f, -0.002010f, -0.000659f, +0.002920f, +0.014176f, +0.009050f, +0.003743f, -0.010063f, -0.001859f, -0.004820f, + +0.004606f, -0.002125f, -0.003289f, -0.000473f, -0.001543f, -0.007658f, -0.005910f, +0.004549f, -0.001756f, +0.000282f, + -0.001849f, +0.005288f, +0.005348f, +0.007242f, +0.003071f, +0.003003f, -0.003434f, -0.003917f, +0.000062f, -0.001033f, + +0.002016f, -0.003077f, +0.003551f, +0.001904f, -0.002070f, +0.000342f, +0.003577f, +0.001702f, -0.004172f, -0.002064f, + -0.000343f, -0.000057f, -0.003661f, -0.000697f, -0.001789f, +0.001457f, +0.002315f, -0.001099f, +0.001708f, -0.000966f, + -0.000146f, -0.001107f, -0.000846f, -0.001276f, +0.000190f, +0.000522f, -0.001131f, -0.000061f, +0.000488f, -0.000069f, + +0.000327f, +0.000888f, +0.000324f, -0.000058f, -0.000737f, -0.000069f, +0.000917f, +0.001124f, +0.000536f, -0.000652f, + +0.000665f, +0.000636f, +0.000508f, +0.000219f, +0.000562f, -0.000338f, +0.000044f, -0.000063f, +0.000012f, +0.000113f, + -0.000350f, +0.000289f, -0.000069f, +0.000176f, -0.000182f, -0.000077f + }, + { + -0.003798f, +0.010297f, +0.016444f, -0.004448f, +0.001687f, +0.001365f, +0.002096f, -0.003899f, +0.001814f, -0.000878f, + -0.005218f, +0.004943f, +0.008496f, -0.009734f, -0.006166f, -0.013364f, -0.029090f, -0.056671f, -0.018818f, -0.007513f, + +0.003016f, +0.014623f, -0.004984f, +0.014229f, -0.003001f, -0.000527f, +0.008971f, +0.008364f, +0.004039f, -0.001096f, + -0.004224f, +0.005613f, +0.006044f, +0.004076f, +0.006573f, +0.000726f, +0.002364f, +0.007872f, -0.000135f, -0.006310f, + -0.002924f, -0.001510f, +0.002159f, +0.000213f, -0.000354f, -0.000030f, -0.000138f, -0.001120f, +0.005638f, +0.001507f, + -0.003477f, -0.003395f, +0.001969f, +0.001260f, +0.000459f, -0.000704f, -0.000206f, -0.000165f, +0.002168f, -0.000953f, + -0.002671f, -0.002394f, +0.000110f, -0.000797f, +0.000383f, +0.002018f, -0.000089f, -0.000690f, -0.001519f, +0.000528f, + -0.001138f, +0.000992f, -0.000151f, -0.000247f, -0.000215f, +0.000124f, -0.000061f, +0.000567f, -0.000165f, +0.000106f, + +0.001228f, +0.001167f, -0.000459f, +0.000237f, -0.000328f, +0.000067f, +0.000059f, +0.000484f, +0.000046f, -0.000045f, + +0.000512f, +0.000234f, -0.000020f, +0.000165f, -0.000401f, -0.000221f + }, + { + +0.020459f, -0.123209f, -0.004462f, -0.065679f, -0.003640f, -0.002361f, -0.001682f, -0.009768f, -0.000308f, -0.001402f, + +0.016133f, +0.003425f, +0.010175f, -0.015657f, +0.001808f, -0.001041f, -0.005374f, +0.000736f, +0.006888f, -0.005716f, + +0.016095f, +0.002863f, -0.008718f, -0.008477f, -0.002374f, -0.001267f, -0.000393f, -0.000198f, -0.004255f, -0.006999f, + +0.001733f, +0.002087f, +0.000820f, +0.003282f, +0.000699f, +0.001047f, -0.004166f, -0.005787f, +0.001503f, -0.000516f, + -0.002247f, +0.000187f, -0.001891f, +0.000624f, -0.004893f, +0.001734f, -0.001447f, +0.000130f, +0.000828f, -0.001939f, + -0.001097f, -0.002464f, -0.001908f, +0.001407f, +0.001387f, +0.001973f, -0.001076f, -0.001618f, -0.001619f, -0.002500f, + -0.000556f, -0.000525f, +0.001171f, -0.001595f, +0.000297f, +0.001358f, -0.001158f, +0.000415f, +0.001216f, -0.000847f, + +0.001036f, +0.001634f, -0.001420f, +0.001531f, +0.001654f, -0.000961f, -0.000778f, -0.000185f, -0.000205f, -0.000540f, + -0.000532f, +0.000507f, +0.000120f, +0.000443f, +0.000536f, -0.000174f, +0.000089f, +0.000454f, -0.000259f, -0.000122f, + -0.000423f, -0.000516f, -0.000095f, -0.000207f, -0.000010f, -0.000306f + }, + { + +0.000733f, -0.005326f, -0.001981f, +0.001633f, -0.002866f, +0.000633f, +0.000300f, +0.000997f, -0.003237f, -0.003394f, + -0.000745f, -0.002121f, -0.007537f, -0.010055f, -0.001253f, -0.003750f, -0.004727f, -0.014024f, +0.011867f, -0.007502f, + +0.016494f, -0.010954f, +0.007481f, +0.019984f, +0.002136f, +0.001602f, -0.003884f, +0.004187f, +0.002894f, +0.002972f, + -0.004472f, -0.004763f, +0.009391f, -0.003470f, -0.001566f, -0.007081f, +0.001733f, -0.003735f, -0.000255f, -0.005009f, + +0.000822f, +0.002671f, +0.000991f, -0.002309f, +0.000215f, -0.000556f, -0.000971f, -0.002271f, -0.001391f, +0.001182f, + -0.002057f, -0.002895f, +0.000384f, +0.003892f, +0.000803f, +0.000373f, +0.002265f, -0.001378f, -0.001593f, +0.000734f, + +0.001517f, -0.001833f, -0.001222f, -0.000722f, -0.000137f, +0.001051f, +0.000576f, -0.001289f, -0.000895f, -0.000285f, + +0.000346f, +0.000024f, +0.001230f, -0.000962f, -0.001232f, +0.000692f, -0.000711f, +0.000281f, +0.000464f, -0.000191f, + -0.000771f, +0.001178f, +0.000377f, -0.000402f, +0.000056f, +0.000328f, +0.000723f, +0.000061f, +0.000292f, +0.000102f, + -0.000320f, -0.000216f, -0.000322f, +0.000250f, -0.000138f, +0.000176f + }, + { + -0.035785f, -0.024081f, +0.009071f, +0.024548f, +0.000936f, +0.006983f, +0.003688f, -0.005224f, -0.006702f, +0.002303f, + +0.002617f, +0.010090f, +0.012690f, -0.005206f, +0.006855f, -0.007853f, +0.005042f, +0.001474f, -0.001842f, -0.004952f, + -0.017403f, -0.001484f, -0.001613f, -0.003247f, +0.002977f, +0.000770f, +0.000201f, +0.004028f, +0.003158f, +0.004714f, + -0.002967f, -0.001653f, -0.005904f, +0.000158f, +0.001683f, -0.006166f, -0.000046f, +0.000231f, -0.000242f, +0.002509f, + +0.000222f, +0.001975f, +0.006050f, +0.001799f, -0.002266f, +0.001818f, +0.001208f, +0.000598f, +0.002146f, -0.001633f, + -0.003868f, -0.000106f, -0.004063f, -0.000709f, +0.000070f, +0.000959f, -0.001535f, +0.000684f, -0.000091f, +0.000505f, + -0.001257f, -0.000646f, +0.000253f, +0.000018f, -0.000341f, +0.000560f, +0.000034f, +0.001620f, -0.000188f, +0.000151f, + +0.000500f, -0.000475f, -0.000819f, +0.000987f, -0.000220f, -0.000581f, -0.000709f, +0.000232f, +0.000813f, -0.001178f, + -0.000026f, -0.000586f, -0.000397f, -0.000893f, +0.000709f, -0.001119f, +0.000107f, +0.000670f, -0.000033f, -0.000345f, + -0.000178f, -0.000598f, -0.000168f, +0.000184f, -0.000375f, +0.000350f + }, + { + +0.000358f, -0.008163f, +0.012179f, -0.001698f, +0.000925f, +0.001230f, +0.001332f, +0.000099f, +0.006499f, +0.002693f, + -0.005205f, -0.003660f, -0.002748f, +0.007514f, -0.002138f, +0.009542f, +0.031080f, +0.000886f, +0.010260f, -0.011099f, + -0.004259f, +0.005196f, -0.000285f, -0.005051f, +0.011573f, +0.009794f, +0.000902f, +0.001375f, -0.001010f, -0.000898f, + +0.001004f, +0.006615f, -0.006490f, +0.001130f, +0.006659f, -0.001042f, +0.003058f, -0.002239f, +0.000126f, -0.004158f, + +0.001283f, -0.005906f, -0.003659f, +0.002487f, -0.001081f, +0.002645f, +0.005024f, +0.001544f, +0.001536f, -0.000205f, + +0.000054f, -0.002158f, +0.002867f, -0.000417f, -0.001140f, -0.001849f, -0.000632f, -0.001942f, +0.000920f, +0.003150f, + +0.000589f, +0.001300f, +0.002415f, +0.000064f, -0.001265f, -0.001639f, +0.001022f, +0.000577f, -0.000358f, +0.000630f, + +0.001625f, -0.001148f, +0.001041f, -0.000932f, -0.001111f, +0.000604f, +0.000210f, -0.000124f, -0.000065f, +0.000147f, + +0.000332f, +0.000067f, -0.000361f, -0.000248f, +0.000747f, +0.000131f, +0.000097f, -0.000121f, +0.000196f, +0.000135f, + +0.000171f, -0.000194f, -0.000080f, +0.000464f, -0.000468f, +0.000254f + }, + { + -0.028110f, -0.215063f, -0.007744f, +0.023762f, -0.009634f, -0.011101f, -0.027940f, -0.002521f, +0.006666f, -0.018019f, + +0.000197f, +0.007007f, +0.014582f, -0.000364f, +0.020485f, -0.010421f, -0.009064f, +0.006700f, -0.002288f, -0.005966f, + +0.002012f, +0.010573f, -0.001245f, -0.006224f, -0.002498f, -0.001121f, -0.001249f, +0.001244f, -0.001138f, -0.002326f, + +0.006643f, -0.004307f, -0.000686f, +0.007810f, +0.003106f, +0.005102f, +0.003609f, -0.002307f, +0.001476f, -0.002220f, + +0.005047f, +0.000362f, +0.000470f, +0.003590f, -0.000208f, -0.002305f, -0.001985f, +0.000239f, +0.001196f, +0.003269f, + -0.003405f, +0.000865f, +0.002073f, -0.001532f, +0.000765f, +0.003242f, +0.001718f, +0.001882f, +0.001660f, -0.000044f, + -0.002377f, +0.001513f, +0.000949f, -0.000732f, -0.000186f, +0.002044f, -0.000296f, -0.000243f, +0.000617f, -0.001225f, + +0.000124f, +0.001613f, +0.000190f, +0.001227f, +0.000536f, -0.000765f, -0.001411f, +0.000825f, -0.000116f, -0.000388f, + -0.000028f, -0.000487f, +0.000727f, +0.000704f, -0.000570f, -0.000896f, -0.000743f, +0.000499f, +0.000381f, +0.000170f, + +0.000868f, +0.000694f, +0.000550f, -0.000223f, +0.000177f, -0.000761f + }, + { + -0.001664f, -0.045286f, -0.009765f, +0.016224f, -0.004721f, -0.009974f, +0.002423f, -0.001153f, +0.000574f, +0.000923f, + +0.002107f, -0.003817f, -0.005990f, +0.009022f, -0.014572f, +0.008093f, +0.008331f, +0.010446f, +0.003266f, +0.003950f, + -0.021779f, +0.005636f, +0.002189f, -0.014730f, +0.005252f, +0.002237f, -0.002170f, +0.004012f, -0.004789f, -0.007312f, + +0.005100f, -0.006257f, -0.006078f, -0.003979f, -0.002647f, -0.005611f, -0.002371f, -0.000861f, -0.002413f, -0.000959f, + -0.001175f, +0.000692f, +0.000967f, +0.000067f, +0.002032f, -0.000785f, +0.000437f, -0.000342f, -0.000650f, -0.002357f, + -0.000387f, -0.000493f, +0.001759f, -0.000374f, -0.003747f, -0.000417f, -0.001302f, -0.002306f, -0.001884f, -0.000831f, + -0.001434f, -0.003275f, +0.000269f, +0.000059f, +0.001077f, +0.001265f, -0.000290f, -0.000609f, +0.000337f, -0.000712f, + -0.000531f, -0.000271f, -0.000632f, +0.000590f, -0.000286f, +0.000937f, -0.001065f, -0.000164f, -0.000263f, +0.000423f, + +0.000486f, +0.000461f, -0.000030f, +0.000208f, -0.000179f, -0.000037f, +0.000220f, -0.000130f, +0.000418f, +0.000380f, + -0.000207f, +0.000234f, -0.000178f, -0.000289f, -0.000228f, +0.000062f + }, + { + +0.009230f, +0.306026f, -0.010553f, +0.005473f, +0.000509f, +0.017401f, +0.006643f, -0.001669f, +0.003630f, +0.004576f, + -0.008296f, -0.005425f, +0.001778f, -0.015936f, -0.003062f, +0.002611f, +0.009652f, -0.008769f, -0.004980f, +0.005183f, + -0.003598f, -0.007462f, +0.007638f, +0.001352f, +0.002539f, -0.001727f, -0.008679f, +0.004924f, -0.002765f, +0.011189f, + -0.006666f, -0.002513f, -0.000099f, -0.005709f, -0.005997f, -0.004156f, +0.002852f, +0.001808f, +0.002297f, -0.000544f, + +0.000175f, +0.002832f, +0.002242f, -0.008769f, -0.000133f, +0.002404f, +0.000727f, -0.001934f, +0.002926f, -0.003276f, + -0.001876f, +0.002189f, -0.000840f, +0.000205f, -0.001559f, +0.000294f, -0.001499f, +0.004928f, -0.001096f, -0.000125f, + -0.001745f, -0.001865f, -0.000651f, -0.002729f, +0.000117f, +0.000082f, +0.001595f, -0.001004f, +0.000708f, -0.000367f, + -0.000325f, +0.000375f, +0.000272f, -0.001542f, -0.000704f, +0.002489f, +0.000471f, +0.000225f, -0.001234f, +0.000092f, + -0.001769f, -0.000068f, +0.000143f, +0.000508f, -0.000745f, -0.000464f, -0.000080f, +0.000128f, +0.000656f, -0.000564f, + -0.000093f, +0.000198f, -0.000399f, -0.000327f, +0.000501f, +0.000602f + }, + { + -0.001967f, +0.047799f, +0.012586f, -0.004075f, +0.010345f, +0.002289f, +0.016879f, -0.008300f, +0.001365f, -0.001060f, + -0.002549f, +0.009176f, -0.016711f, -0.038148f, -0.024990f, +0.003654f, -0.003222f, +0.006376f, -0.010485f, -0.001133f, + +0.010766f, +0.008063f, +0.021444f, +0.006622f, +0.003613f, +0.000733f, -0.004909f, -0.008191f, +0.003476f, -0.002000f, + +0.008197f, -0.007505f, -0.003167f, -0.011159f, +0.002378f, -0.002281f, -0.004847f, -0.002335f, +0.006403f, -0.004644f, + -0.005494f, +0.004423f, +0.001804f, -0.004006f, -0.007350f, +0.000419f, +0.004711f, +0.000629f, +0.001160f, +0.003723f, + +0.000854f, -0.000467f, +0.003117f, +0.001086f, +0.003097f, +0.000836f, -0.001558f, -0.001994f, +0.000109f, -0.001778f, + +0.000390f, -0.000020f, -0.000973f, +0.001649f, +0.000230f, +0.000649f, -0.001019f, -0.000443f, -0.001559f, +0.000163f, + -0.000991f, +0.002365f, -0.000171f, -0.000518f, -0.001211f, -0.002118f, -0.000821f, +0.000270f, +0.001168f, +0.000443f, + +0.000523f, +0.000518f, -0.001580f, -0.000038f, -0.000409f, +0.000788f, -0.000145f, +0.000087f, +0.000053f, -0.000117f, + +0.000045f, -0.000051f, -0.000157f, +0.000687f, +0.000050f, -0.000004f + }, + { + +0.037669f, +0.078346f, +0.007615f, +0.015315f, -0.010868f, -0.002789f, -0.008329f, -0.002654f, -0.008237f, +0.003488f, + -0.002090f, +0.003735f, -0.007880f, +0.017368f, -0.004763f, +0.008228f, +0.002596f, +0.007248f, +0.006121f, +0.011589f, + -0.002008f, -0.004010f, +0.006853f, -0.002723f, +0.006722f, +0.010260f, +0.004229f, -0.002694f, +0.004933f, +0.006621f, + +0.006115f, +0.007623f, +0.002894f, +0.002982f, -0.007086f, +0.002118f, -0.003868f, -0.002404f, -0.003209f, -0.001483f, + -0.000776f, -0.005786f, +0.000968f, +0.005173f, +0.000325f, +0.002633f, +0.001383f, -0.004041f, +0.000428f, -0.001006f, + +0.000339f, +0.000699f, -0.001951f, +0.000613f, +0.000369f, -0.002279f, +0.000917f, +0.000988f, -0.000144f, -0.002380f, + +0.000435f, +0.000787f, +0.001232f, +0.001735f, +0.000026f, -0.000881f, -0.000956f, +0.000139f, -0.000275f, -0.000666f, + -0.000366f, -0.001800f, -0.001676f, -0.000939f, +0.000548f, -0.000289f, -0.001138f, +0.000096f, +0.000001f, +0.000345f, + -0.000214f, +0.001436f, +0.000333f, -0.000010f, +0.000761f, -0.000176f, +0.000049f, -0.000069f, +0.000580f, +0.000472f, + -0.000097f, -0.000301f, -0.000444f, -0.000164f, -0.000058f, -0.000059f + }, + { + -0.004487f, +0.024884f, +0.004208f, -0.002236f, +0.001073f, -0.004201f, +0.010713f, -0.000898f, -0.005375f, -0.006574f, + -0.000458f, -0.002713f, -0.006288f, -0.027516f, -0.024986f, -0.006746f, -0.004117f, +0.003597f, +0.004159f, +0.007641f, + +0.001182f, +0.008599f, +0.007501f, -0.008554f, +0.000366f, +0.000579f, +0.003205f, -0.000635f, -0.015681f, -0.001435f, + +0.008045f, +0.004661f, +0.001136f, +0.002715f, +0.002267f, +0.002990f, -0.002914f, +0.004976f, +0.000039f, -0.003228f, + -0.003954f, -0.002937f, -0.003349f, +0.001041f, -0.004264f, +0.001485f, -0.001407f, +0.001162f, +0.004705f, -0.001719f, + -0.000058f, +0.001744f, +0.003458f, +0.003487f, +0.001569f, +0.001131f, -0.000630f, -0.000413f, -0.000861f, -0.000809f, + +0.003085f, -0.000464f, -0.001818f, -0.000849f, +0.001381f, -0.001193f, +0.001958f, +0.000298f, +0.001327f, +0.000303f, + -0.001148f, -0.000598f, -0.000674f, +0.000370f, -0.000132f, +0.000228f, -0.000238f, -0.000162f, -0.000783f, -0.000022f, + +0.000347f, +0.000331f, +0.000664f, -0.000117f, -0.000930f, +0.000082f, +0.000342f, -0.000363f, +0.000778f, +0.000226f, + -0.000037f, +0.000303f, +0.000002f, +0.000484f, +0.000502f, +0.000514f + } + }, + { + { + -0.010676f, +0.322599f, -0.124309f, +0.043726f, +0.013808f, -0.007829f, +0.001674f, +0.009140f, -0.014454f, +0.005903f, + -0.001605f, -0.006144f, -0.004251f, +0.004600f, +0.012729f, +0.001620f, +0.013324f, +0.002418f, -0.018418f, +0.001796f, + -0.011031f, +0.008803f, -0.004426f, +0.009590f, -0.001258f, -0.009428f, +0.003968f, -0.002510f, -0.002849f, -0.001807f, + -0.001863f, +0.001157f, +0.005596f, +0.000368f, -0.001931f, -0.007386f, +0.006314f, +0.003501f, -0.002128f, -0.001722f, + +0.000084f, -0.001589f, +0.003570f, -0.001577f, +0.003482f, +0.004369f, +0.002936f, -0.000738f, -0.002487f, +0.002519f, + -0.002798f, -0.000452f, -0.002716f, +0.002807f, -0.001070f, +0.001744f, -0.001267f, +0.000208f, -0.000013f, +0.001179f, + -0.000270f, +0.001274f, +0.001253f, -0.002159f, +0.000026f, -0.002082f, +0.000517f, +0.001376f, -0.001811f, +0.000777f, + +0.000306f, -0.000408f, +0.000105f, -0.000930f, -0.000943f, -0.001138f, +0.001304f, -0.000674f, -0.000822f, -0.000252f, + -0.000259f, -0.000210f, -0.000539f, -0.000300f, +0.000203f, +0.000757f, -0.000375f, -0.000470f, +0.000271f, -0.000050f, + +0.000299f, +0.000509f, -0.000392f, +0.000092f, +0.000480f, -0.000243f + }, + { + +0.003276f, -0.094618f, +0.009510f, +0.022767f, +0.007440f, +0.005549f, -0.002656f, +0.004873f, -0.004127f, -0.005525f, + +0.002901f, +0.006969f, -0.004703f, +0.002113f, -0.007708f, -0.011885f, -0.002502f, -0.008157f, -0.009064f, +0.009230f, + -0.000049f, -0.006266f, -0.003756f, -0.012147f, +0.003946f, -0.016214f, -0.012868f, +0.002813f, -0.007220f, +0.011672f, + -0.002613f, +0.001601f, -0.003573f, +0.000164f, +0.002283f, +0.006776f, -0.001974f, -0.000038f, -0.003476f, -0.000425f, + +0.000051f, +0.006312f, -0.003357f, -0.001235f, +0.000259f, +0.005964f, +0.002570f, -0.000693f, +0.004884f, -0.000526f, + -0.003392f, +0.000765f, -0.000817f, -0.000398f, -0.001271f, -0.001584f, +0.001685f, -0.000342f, +0.000070f, +0.000973f, + -0.000310f, +0.000878f, +0.001349f, -0.001226f, -0.001156f, -0.000114f, +0.001339f, +0.000194f, -0.000472f, +0.001292f, + -0.000957f, +0.000292f, +0.000526f, +0.000420f, +0.000752f, +0.000025f, -0.000603f, +0.000928f, -0.002014f, +0.000078f, + +0.000128f, -0.000033f, -0.000214f, +0.000592f, +0.000015f, -0.000309f, +0.000006f, -0.000101f, -0.000382f, +0.000521f, + +0.000421f, -0.000410f, +0.000185f, +0.000135f, +0.000382f, -0.000371f + }, + { + -0.003286f, -0.060860f, +0.041522f, +0.040235f, -0.005171f, -0.000248f, +0.006761f, +0.002735f, +0.000225f, +0.000875f, + -0.013330f, +0.015287f, +0.006201f, +0.000855f, -0.012263f, +0.000361f, -0.000509f, +0.013185f, -0.020466f, -0.000622f, + -0.005506f, +0.008026f, +0.005441f, +0.004130f, -0.008554f, +0.025476f, +0.000436f, +0.006177f, -0.009058f, +0.011216f, + +0.000514f, -0.002408f, +0.010951f, -0.005709f, -0.006747f, +0.003118f, -0.000211f, -0.004954f, -0.000518f, -0.002610f, + -0.001378f, +0.000596f, -0.003407f, +0.000158f, +0.000568f, -0.002846f, -0.001571f, -0.001180f, +0.002297f, -0.002479f, + +0.000117f, +0.000816f, -0.001778f, +0.000847f, -0.001106f, -0.001016f, -0.000458f, +0.001740f, +0.000200f, -0.000947f, + +0.000568f, +0.000255f, -0.002367f, -0.001574f, -0.001495f, -0.001808f, +0.000685f, -0.001784f, +0.000256f, +0.001388f, + -0.000090f, +0.000504f, -0.000564f, -0.000400f, +0.001441f, -0.000256f, -0.000179f, -0.000529f, -0.000738f, -0.001369f, + +0.000551f, -0.000495f, -0.000437f, +0.000660f, +0.000401f, +0.000111f, +0.000167f, -0.000068f, +0.000083f, +0.000420f, + -0.000515f, +0.000043f, +0.000114f, -0.000349f, +0.000082f, +0.000018f + }, + { + -0.047042f, -0.226515f, +0.040270f, +0.048614f, +0.006694f, +0.004240f, -0.003650f, +0.001051f, -0.001406f, +0.003653f, + -0.001672f, +0.007451f, +0.002298f, -0.014578f, +0.021394f, +0.011333f, +0.001907f, -0.003076f, -0.010792f, +0.000149f, + -0.001299f, +0.002776f, -0.004972f, +0.004888f, -0.000094f, -0.007803f, -0.003983f, +0.002967f, -0.002156f, +0.003751f, + -0.001627f, +0.006693f, +0.009475f, +0.000321f, +0.004022f, +0.002549f, -0.004564f, -0.004679f, +0.000115f, -0.000584f, + +0.000323f, -0.000328f, +0.003478f, +0.001350f, -0.002699f, +0.000600f, +0.000712f, +0.004000f, -0.003452f, -0.001032f, + -0.002255f, -0.001483f, -0.002139f, -0.000740f, -0.000888f, +0.002931f, +0.002348f, -0.003386f, +0.002858f, -0.001683f, + +0.000370f, -0.000270f, -0.002285f, +0.000760f, -0.000984f, -0.000054f, -0.000249f, +0.000695f, -0.000120f, +0.000620f, + +0.000394f, +0.000326f, +0.000683f, -0.000159f, -0.001183f, +0.000756f, +0.000456f, +0.000438f, +0.001304f, -0.000286f, + +0.001121f, +0.000456f, +0.000315f, +0.000132f, +0.000196f, -0.000111f, -0.000244f, +0.000166f, -0.000228f, +0.000348f, + -0.000182f, +0.000546f, -0.000235f, -0.000196f, +0.000164f, +0.000013f + }, + { + +0.002924f, +0.048638f, -0.024362f, +0.000163f, +0.000977f, +0.000661f, +0.004433f, -0.005964f, -0.001678f, -0.001787f, + -0.004138f, +0.003666f, +0.016647f, +0.000347f, -0.042994f, +0.004568f, -0.030548f, -0.018026f, -0.050140f, -0.000681f, + +0.009163f, +0.003089f, +0.001777f, +0.011330f, -0.006342f, +0.005097f, +0.008725f, +0.011058f, +0.005033f, -0.009537f, + +0.005684f, +0.007846f, +0.007530f, +0.000229f, +0.007697f, +0.000043f, +0.002250f, +0.006327f, -0.001126f, -0.004133f, + -0.001128f, +0.000107f, +0.001497f, +0.001178f, -0.002669f, +0.000862f, +0.002706f, +0.001074f, +0.001724f, +0.002442f, + -0.005414f, -0.002397f, +0.002675f, +0.001133f, +0.000098f, -0.000557f, -0.000623f, +0.000625f, +0.002369f, -0.000985f, + -0.005326f, +0.000425f, -0.002102f, -0.000355f, +0.001596f, +0.001465f, -0.000065f, -0.000103f, -0.001003f, -0.000729f, + -0.000352f, +0.000174f, -0.000010f, +0.000797f, -0.001489f, -0.000167f, +0.000638f, +0.000397f, +0.000090f, +0.000886f, + +0.000467f, +0.001594f, -0.000619f, -0.000146f, -0.000236f, +0.000500f, -0.000431f, +0.000562f, +0.000278f, +0.000233f, + +0.000571f, -0.000179f, +0.000553f, -0.000185f, -0.000309f, +0.000323f + }, + { + -0.064450f, -0.074002f, +0.028788f, -0.044318f, -0.005863f, -0.005211f, +0.002912f, -0.011285f, +0.002945f, +0.005654f, + +0.006759f, +0.005389f, +0.001974f, -0.014272f, +0.002973f, -0.003786f, -0.009149f, +0.012882f, +0.003397f, -0.002871f, + +0.014673f, +0.000346f, -0.001573f, -0.013262f, +0.000404f, -0.001551f, -0.002389f, -0.001960f, -0.003811f, -0.005494f, + -0.000486f, -0.003039f, -0.000068f, +0.008059f, +0.002003f, +0.000474f, -0.002453f, -0.010596f, -0.002699f, +0.003232f, + +0.002144f, -0.002036f, -0.001924f, +0.002959f, -0.008635f, -0.000064f, +0.003358f, -0.000380f, -0.001256f, +0.003185f, + -0.002205f, -0.003989f, +0.000356f, +0.001616f, -0.001168f, +0.002988f, -0.000273f, -0.000565f, -0.003266f, -0.003491f, + -0.000539f, -0.000125f, -0.000123f, +0.000012f, +0.000948f, +0.001735f, -0.001068f, -0.000603f, +0.000979f, -0.000237f, + +0.001071f, +0.000175f, +0.001000f, +0.000582f, +0.001849f, -0.000653f, -0.000521f, -0.000598f, -0.000522f, -0.001570f, + +0.000540f, +0.000026f, +0.000227f, +0.000273f, +0.000478f, +0.000300f, +0.000087f, +0.000498f, -0.000160f, -0.000797f, + +0.000168f, -0.000782f, -0.000531f, -0.000155f, +0.000313f, -0.000297f + }, + { + -0.001228f, -0.010555f, +0.006386f, +0.000404f, -0.001097f, +0.000627f, +0.000239f, -0.002141f, -0.000836f, -0.001221f, + -0.001661f, -0.004125f, -0.014061f, +0.003389f, -0.005648f, -0.010116f, -0.010091f, -0.003940f, +0.001264f, +0.020502f, + -0.000758f, +0.003710f, -0.005606f, +0.031640f, -0.009767f, +0.004242f, +0.004082f, -0.010461f, +0.008640f, -0.000550f, + +0.001173f, -0.002299f, -0.005721f, +0.007102f, -0.008660f, -0.001764f, -0.001243f, -0.004074f, +0.000537f, -0.003448f, + -0.002802f, +0.003223f, -0.000937f, +0.000712f, -0.000695f, -0.001044f, -0.002518f, -0.000626f, -0.001685f, -0.000625f, + -0.004394f, +0.000255f, +0.000855f, +0.002276f, +0.000451f, +0.001097f, +0.003231f, -0.001086f, +0.001118f, -0.000790f, + +0.001326f, -0.001387f, -0.001054f, -0.000153f, -0.000615f, +0.001259f, +0.001149f, -0.001288f, -0.001459f, -0.000988f, + +0.001033f, +0.000632f, +0.000070f, -0.000169f, -0.000403f, +0.000604f, -0.000344f, +0.000127f, +0.000066f, +0.000028f, + +0.000514f, +0.000007f, -0.000302f, +0.000073f, -0.000114f, +0.000778f, +0.000260f, +0.000539f, -0.000047f, -0.000207f, + +0.000005f, -0.000127f, -0.000760f, +0.000163f, +0.000087f, -0.000199f + }, + { + +0.063650f, -0.085687f, -0.038923f, +0.019354f, -0.001226f, +0.003770f, -0.004016f, -0.000961f, -0.009498f, +0.008580f, + +0.011471f, -0.000324f, +0.012697f, +0.024381f, -0.027093f, +0.005691f, -0.006641f, +0.006138f, -0.002825f, -0.006168f, + -0.008831f, -0.006674f, -0.000826f, -0.001078f, +0.001615f, -0.004596f, +0.003607f, +0.001183f, +0.009861f, -0.004475f, + -0.002397f, +0.003848f, -0.000411f, -0.002978f, -0.000054f, -0.000456f, -0.006998f, +0.004345f, -0.003282f, +0.002079f, + -0.002252f, +0.006285f, +0.002553f, +0.002319f, -0.003719f, +0.003615f, +0.002132f, -0.003551f, +0.005517f, +0.002432f, + -0.004506f, -0.000095f, -0.004158f, -0.001108f, -0.001147f, +0.002300f, -0.000015f, -0.001969f, +0.000831f, +0.001038f, + -0.002287f, +0.000394f, +0.000673f, -0.000234f, -0.000875f, +0.000609f, +0.001349f, -0.000078f, +0.000795f, +0.000491f, + +0.000468f, -0.000888f, +0.000383f, +0.000257f, +0.000111f, -0.000975f, +0.000129f, +0.000095f, +0.000113f, +0.000068f, + -0.000104f, -0.000115f, -0.000452f, -0.001435f, -0.000041f, -0.000074f, -0.000621f, +0.000797f, +0.000032f, -0.000408f, + -0.000168f, -0.000829f, -0.000046f, +0.000310f, -0.000171f, +0.000049f + }, + { + -0.001379f, +0.006965f, +0.003517f, -0.001453f, -0.001262f, -0.000249f, +0.003140f, +0.001869f, +0.005297f, -0.001902f, + -0.005974f, -0.006580f, +0.007861f, +0.019405f, -0.026213f, +0.013364f, +0.003266f, +0.024987f, +0.007538f, -0.010959f, + +0.005505f, -0.006753f, +0.008096f, +0.000586f, -0.005830f, +0.011357f, +0.010313f, +0.010540f, -0.003660f, -0.008015f, + +0.014913f, -0.016841f, +0.007709f, +0.001715f, -0.003086f, +0.003365f, +0.004999f, -0.004180f, -0.002912f, +0.000311f, + -0.001174f, -0.006808f, -0.002337f, +0.003070f, -0.000607f, +0.003172f, +0.003173f, +0.000245f, +0.004381f, -0.000329f, + -0.000294f, -0.002385f, +0.002167f, +0.001032f, -0.000478f, -0.003861f, +0.000601f, +0.000617f, -0.000314f, +0.000889f, + +0.000615f, +0.001533f, +0.001862f, -0.000359f, -0.001613f, -0.000758f, -0.000062f, +0.000253f, +0.000758f, +0.001179f, + +0.000348f, -0.000809f, +0.000891f, -0.000010f, +0.000338f, -0.000435f, +0.000823f, -0.000851f, +0.000658f, -0.000378f, + +0.001125f, -0.000462f, -0.000673f, -0.000059f, +0.000905f, -0.000026f, -0.000209f, +0.000502f, +0.000193f, +0.000034f, + +0.000022f, +0.000161f, -0.000062f, +0.000157f, +0.000001f, -0.000126f + }, + { + +0.028053f, -0.165567f, -0.116071f, +0.010766f, +0.038417f, +0.002690f, -0.052192f, -0.008930f, +0.000036f, -0.005836f, + -0.004540f, +0.003711f, +0.016277f, +0.009091f, +0.011288f, -0.006439f, -0.006604f, -0.002547f, +0.003595f, -0.002536f, + -0.000370f, +0.005597f, +0.000576f, +0.000221f, -0.001250f, -0.011988f, +0.003855f, -0.003475f, +0.007018f, -0.011267f, + +0.008646f, +0.003339f, -0.004897f, +0.009595f, -0.000324f, +0.001313f, +0.000233f, +0.002366f, +0.002849f, +0.005292f, + -0.006169f, +0.004694f, +0.002199f, +0.000254f, +0.000048f, -0.000865f, -0.001109f, +0.004194f, -0.003484f, +0.001413f, + -0.001544f, +0.002846f, +0.001456f, -0.000441f, +0.001221f, +0.002103f, +0.001948f, +0.001000f, +0.001964f, -0.001363f, + +0.000829f, -0.001162f, +0.002541f, -0.001382f, +0.001246f, -0.000698f, +0.000661f, +0.000025f, -0.000665f, -0.000357f, + +0.000037f, +0.001653f, +0.000486f, +0.001054f, +0.000347f, -0.001346f, -0.000281f, -0.000002f, -0.000288f, +0.000108f, + -0.000962f, +0.000575f, +0.000470f, +0.000785f, -0.000889f, -0.000399f, -0.000385f, +0.000761f, -0.000219f, +0.001229f, + -0.000075f, +0.001006f, +0.000347f, -0.000330f, -0.000130f, +0.000015f + }, + { + +0.001893f, -0.013154f, -0.030874f, -0.002760f, +0.005359f, -0.006048f, -0.000440f, -0.007192f, +0.003421f, -0.000761f, + +0.003931f, -0.008492f, +0.004250f, -0.001348f, -0.005056f, +0.002029f, +0.002063f, +0.017335f, +0.008926f, -0.005853f, + -0.017213f, +0.003767f, +0.011889f, -0.006306f, -0.000638f, +0.010695f, -0.013821f, +0.010344f, -0.011687f, -0.001663f, + +0.000619f, -0.001773f, -0.003250f, -0.005472f, -0.006288f, -0.003116f, -0.002288f, +0.000084f, -0.002083f, -0.005834f, + +0.000454f, +0.000361f, +0.002889f, +0.000315f, +0.000669f, -0.001225f, +0.002022f, -0.000418f, -0.000630f, -0.001589f, + -0.002684f, +0.001631f, +0.000691f, +0.000036f, -0.004071f, +0.001103f, -0.002845f, -0.001574f, -0.000966f, -0.002176f, + +0.000780f, -0.003197f, -0.000674f, +0.001266f, +0.000221f, +0.000440f, -0.000365f, +0.000233f, +0.000143f, -0.001613f, + +0.000268f, -0.000911f, -0.000017f, +0.000099f, +0.000420f, -0.000033f, -0.000502f, -0.000662f, +0.000371f, -0.000572f, + +0.000805f, +0.000176f, +0.000348f, +0.000024f, -0.000166f, +0.000097f, -0.000043f, +0.000029f, +0.000664f, -0.000040f, + +0.000272f, -0.000104f, -0.000128f, -0.000020f, -0.000105f, +0.000037f + }, + { + +0.038722f, +0.279686f, -0.015771f, +0.001184f, +0.001655f, +0.010539f, -0.003933f, +0.011141f, -0.002949f, -0.002359f, + -0.003388f, -0.004930f, -0.000284f, -0.011138f, -0.008015f, +0.010216f, +0.008872f, -0.000258f, +0.002541f, -0.002995f, + -0.003208f, -0.005090f, +0.000537f, +0.011642f, -0.010933f, +0.004742f, -0.003976f, -0.003378f, +0.004390f, +0.007869f, + -0.001980f, -0.003758f, -0.004289f, -0.002769f, -0.005365f, -0.008154f, +0.005287f, +0.000580f, +0.002897f, -0.002812f, + +0.004497f, -0.002396f, -0.001898f, +0.001521f, -0.002960f, +0.002626f, -0.000803f, +0.000230f, +0.002431f, +0.000044f, + -0.003170f, -0.000220f, +0.002640f, -0.001749f, -0.002046f, +0.002028f, +0.000556f, +0.001765f, -0.000323f, -0.001790f, + -0.002126f, +0.000775f, -0.002686f, -0.002150f, -0.000090f, -0.000250f, +0.000966f, +0.000136f, -0.000956f, +0.000469f, + -0.000456f, +0.000049f, +0.001023f, -0.002121f, -0.000024f, +0.001404f, +0.001835f, -0.000985f, -0.000464f, -0.000222f, + -0.001210f, -0.000147f, +0.000227f, +0.000345f, -0.000506f, -0.000168f, -0.000779f, +0.000772f, -0.000053f, -0.000436f, + +0.000115f, +0.000104f, +0.000111f, -0.000328f, +0.000269f, +0.000472f + }, + { + +0.001277f, +0.053753f, +0.009032f, -0.000061f, -0.001369f, +0.008719f, +0.006441f, +0.003694f, -0.002873f, -0.003608f, + +0.008206f, -0.003172f, +0.008329f, -0.085933f, -0.005689f, +0.005190f, +0.002203f, -0.001662f, -0.004440f, -0.003718f, + -0.001238f, +0.022078f, +0.030094f, +0.004270f, -0.011883f, +0.011261f, -0.010826f, -0.000757f, -0.006721f, +0.017526f, + -0.003310f, -0.000934f, -0.006728f, -0.007779f, +0.003067f, -0.007524f, -0.000052f, -0.003238f, +0.001241f, -0.002296f, + -0.002823f, +0.003123f, +0.001584f, -0.007119f, -0.002800f, +0.000250f, +0.004675f, +0.002328f, -0.002596f, -0.000503f, + +0.005453f, +0.002597f, +0.002253f, +0.001785f, +0.003714f, -0.001164f, -0.000599f, -0.003078f, -0.000063f, -0.001547f, + -0.001332f, +0.001765f, -0.000241f, -0.000978f, +0.002124f, -0.001073f, +0.000566f, -0.002980f, +0.001042f, -0.000962f, + +0.000219f, +0.000574f, +0.000452f, -0.000328f, -0.001739f, -0.000670f, -0.000750f, +0.000048f, +0.001501f, +0.000191f, + +0.000713f, -0.000226f, -0.001431f, -0.000648f, -0.000259f, +0.000310f, +0.000217f, +0.000041f, -0.000007f, -0.000258f, + -0.000359f, -0.000111f, +0.000405f, +0.000253f, +0.000030f, +0.000617f + }, + { + -0.013935f, +0.143209f, +0.019446f, -0.004390f, -0.010319f, +0.012958f, -0.022055f, -0.006124f, -0.002560f, +0.007094f, + +0.001369f, +0.001158f, -0.005171f, -0.023567f, +0.057970f, +0.009424f, -0.009566f, +0.003646f, +0.006784f, +0.014016f, + -0.002839f, +0.004002f, -0.004093f, +0.005287f, +0.008179f, +0.009354f, -0.002180f, +0.006404f, +0.000141f, +0.010456f, + +0.004952f, +0.003461f, +0.005482f, -0.002608f, -0.002255f, +0.001479f, -0.004256f, -0.005712f, -0.001647f, -0.002353f, + +0.003918f, -0.004187f, -0.004205f, +0.002819f, +0.004668f, +0.000039f, -0.002025f, -0.003732f, +0.000784f, +0.002317f, + -0.001702f, +0.003261f, -0.000905f, +0.002089f, -0.001865f, -0.002825f, +0.000259f, -0.000099f, +0.000020f, -0.000270f, + -0.001573f, +0.001918f, +0.000526f, +0.000138f, +0.000576f, -0.000438f, -0.001071f, +0.000634f, -0.000524f, -0.001032f, + -0.000903f, -0.001518f, -0.000826f, -0.001071f, -0.000329f, -0.000431f, -0.000800f, +0.000197f, +0.000424f, -0.000443f, + +0.000237f, +0.000336f, +0.000081f, +0.000444f, +0.000478f, +0.000101f, +0.000077f, +0.000072f, +0.000418f, +0.000195f, + +0.000172f, -0.000132f, -0.000560f, -0.000306f, +0.000053f, -0.000092f + }, + { + +0.004400f, +0.025951f, -0.006493f, -0.005622f, -0.001481f, +0.001838f, +0.007100f, +0.001990f, -0.004611f, -0.009374f, + -0.005968f, +0.000771f, -0.002717f, +0.005084f, -0.075227f, -0.003136f, -0.001231f, +0.007688f, -0.003005f, +0.014317f, + -0.005760f, +0.014912f, -0.009117f, +0.000061f, +0.000749f, -0.002795f, +0.007157f, -0.006166f, -0.011313f, -0.000261f, + +0.002115f, +0.003194f, +0.007636f, +0.003352f, -0.003060f, +0.000906f, +0.001008f, +0.002181f, -0.002263f, -0.002500f, + -0.001760f, -0.001842f, -0.001217f, -0.004720f, -0.001265f, +0.000078f, -0.001032f, +0.002325f, +0.002394f, -0.001140f, + -0.000177f, +0.003676f, +0.003839f, +0.004719f, +0.000387f, -0.000412f, -0.000059f, -0.001725f, -0.001129f, +0.001491f, + +0.002562f, +0.000144f, -0.002355f, -0.001495f, +0.000503f, +0.000653f, +0.001873f, -0.000050f, +0.001877f, -0.001907f, + -0.000108f, +0.000590f, -0.000496f, -0.000459f, +0.000607f, -0.000289f, -0.000728f, -0.000427f, -0.000116f, +0.000158f, + +0.000639f, -0.000210f, +0.000479f, -0.000361f, -0.000229f, -0.000543f, +0.000267f, +0.000324f, +0.000527f, +0.000083f, + +0.000483f, -0.000290f, +0.000421f, +0.000338f, +0.000423f, -0.000116f + } + }, + { + { + +0.010693f, +0.417234f, -0.084083f, +0.011468f, -0.016776f, -0.005790f, -0.000757f, -0.001771f, -0.014771f, +0.013472f, + -0.002242f, +0.002480f, +0.001457f, -0.002997f, +0.017699f, +0.002761f, +0.007783f, +0.014157f, -0.013047f, -0.005441f, + -0.003824f, +0.015366f, -0.007732f, +0.004552f, +0.001741f, -0.002974f, +0.009722f, -0.001777f, +0.000618f, +0.000651f, + +0.002954f, +0.004379f, -0.000727f, -0.003797f, +0.002421f, -0.002963f, +0.008597f, +0.001662f, -0.006595f, +0.000351f, + +0.000406f, -0.002653f, +0.000780f, -0.000229f, +0.000928f, -0.000753f, +0.002173f, +0.000100f, -0.003767f, +0.001579f, + -0.004505f, -0.001026f, -0.000672f, +0.005366f, -0.000540f, -0.000880f, -0.000477f, +0.002678f, +0.001519f, +0.001393f, + -0.000125f, +0.001649f, +0.001014f, -0.001737f, +0.002316f, +0.000474f, +0.000591f, +0.000577f, -0.002022f, +0.000744f, + +0.000831f, -0.000374f, +0.000317f, -0.000163f, -0.000441f, +0.000068f, +0.002402f, +0.000360f, +0.000078f, -0.000218f, + -0.000109f, +0.000744f, +0.000815f, -0.000003f, -0.000201f, +0.000923f, -0.000297f, +0.000021f, +0.001075f, +0.000458f, + -0.000091f, -0.000033f, -0.000561f, -0.000421f, +0.000131f, -0.000125f + }, + { + -0.000422f, -0.055849f, +0.031670f, +0.012747f, -0.005466f, -0.001006f, -0.004333f, +0.007294f, -0.002743f, -0.001763f, + +0.004336f, +0.003736f, -0.011321f, +0.000614f, -0.004650f, -0.009143f, +0.004016f, -0.003330f, -0.007980f, +0.009636f, + +0.005940f, +0.011093f, +0.020715f, -0.001094f, +0.007364f, -0.017258f, -0.015578f, +0.006533f, -0.005350f, +0.002104f, + +0.001896f, +0.011861f, -0.003448f, -0.001936f, +0.000197f, +0.005677f, -0.000892f, -0.002652f, -0.005731f, -0.002594f, + -0.003990f, +0.009109f, +0.000889f, -0.000501f, -0.001825f, -0.000392f, -0.001287f, -0.003305f, +0.001721f, -0.002173f, + -0.003454f, +0.000707f, -0.000993f, -0.000666f, -0.002887f, -0.000635f, +0.000558f, -0.000376f, +0.000124f, -0.000323f, + -0.000804f, +0.000439f, +0.001518f, +0.000192f, +0.000379f, +0.001025f, +0.001409f, +0.000293f, -0.001116f, -0.000064f, + -0.002320f, -0.000919f, -0.000229f, -0.000649f, -0.000435f, -0.000459f, -0.000517f, +0.001434f, -0.000167f, +0.000858f, + -0.000291f, -0.000222f, +0.000099f, +0.000478f, +0.000048f, -0.000091f, -0.000356f, +0.000289f, +0.000100f, +0.000248f, + +0.000362f, -0.000652f, -0.000070f, +0.000049f, +0.000265f, -0.000262f + }, + { + -0.000869f, -0.186049f, -0.053866f, +0.038145f, -0.006144f, +0.004282f, +0.002896f, -0.003312f, +0.002999f, -0.001364f, + -0.017618f, +0.014125f, +0.002548f, -0.002667f, -0.011035f, +0.003667f, -0.004765f, +0.009567f, -0.017263f, +0.009558f, + +0.000700f, +0.005655f, +0.001675f, -0.006028f, -0.010344f, +0.024670f, -0.011958f, -0.003007f, -0.010625f, +0.011477f, + +0.003263f, +0.004188f, +0.008949f, -0.007663f, +0.002298f, +0.007313f, -0.000073f, -0.002615f, +0.003729f, +0.006995f, + -0.000044f, +0.001580f, -0.000761f, +0.001099f, +0.000525f, -0.003799f, +0.000011f, -0.000605f, +0.000083f, -0.004042f, + +0.001530f, +0.001116f, -0.003248f, -0.000721f, -0.001480f, -0.001093f, -0.001845f, +0.000579f, +0.000475f, -0.001514f, + -0.000149f, +0.001726f, -0.000788f, -0.002000f, -0.000886f, -0.002006f, +0.000808f, -0.002029f, -0.000377f, +0.000262f, + -0.000555f, +0.000353f, -0.000179f, -0.000045f, +0.001202f, -0.000272f, +0.000363f, +0.000327f, -0.000698f, -0.000559f, + +0.001498f, +0.000278f, -0.000519f, +0.000188f, +0.000276f, -0.000172f, +0.000336f, +0.000330f, +0.000160f, +0.000350f, + -0.000065f, +0.000635f, +0.000430f, -0.000433f, +0.000117f, +0.000104f + }, + { + +0.071114f, -0.124693f, -0.006001f, +0.036646f, -0.002488f, +0.003173f, -0.005521f, +0.002390f, -0.003078f, -0.002212f, + -0.008246f, -0.000733f, +0.005196f, -0.008469f, +0.015268f, +0.003972f, -0.002154f, -0.004919f, -0.004118f, +0.002314f, + -0.003255f, +0.005741f, -0.001430f, +0.006056f, +0.005664f, +0.002215f, -0.001310f, +0.001998f, +0.001040f, +0.001495f, + +0.000070f, +0.004010f, +0.002891f, -0.004530f, -0.005162f, -0.002197f, -0.002599f, -0.005268f, -0.002143f, -0.002094f, + +0.000980f, +0.001272f, +0.000608f, -0.002786f, -0.003093f, -0.000871f, -0.001163f, +0.003399f, -0.000547f, +0.002622f, + -0.001382f, -0.000828f, +0.000645f, +0.000372f, -0.001067f, +0.001722f, -0.000681f, -0.003386f, +0.002206f, -0.002481f, + -0.000080f, +0.001286f, -0.000174f, +0.002097f, -0.000894f, -0.000275f, -0.000329f, -0.000421f, +0.000186f, +0.001241f, + -0.000012f, +0.000066f, +0.001191f, +0.000380f, -0.001140f, +0.000338f, +0.000077f, +0.000090f, +0.001111f, -0.000230f, + +0.000127f, -0.000100f, +0.000018f, -0.000205f, -0.000278f, +0.000063f, -0.000067f, +0.000255f, -0.000024f, +0.000200f, + +0.000077f, +0.000539f, -0.000058f, -0.000058f, +0.000147f, +0.000297f + }, + { + -0.001724f, +0.072241f, -0.002019f, +0.002009f, +0.000569f, -0.000085f, +0.002608f, -0.003809f, -0.000488f, -0.000346f, + +0.003677f, +0.005006f, +0.010525f, -0.009602f, -0.036334f, +0.038902f, +0.005993f, +0.040962f, -0.001749f, +0.013617f, + +0.008869f, +0.005417f, +0.002759f, +0.010783f, -0.001191f, +0.003119f, -0.002969f, -0.005653f, -0.001600f, -0.012331f, + +0.008485f, +0.002983f, +0.007324f, +0.000031f, +0.002280f, -0.000985f, -0.003561f, -0.004112f, +0.002441f, +0.000916f, + -0.000608f, +0.001122f, +0.001816f, +0.001103f, -0.002362f, -0.001983f, +0.003146f, +0.001241f, -0.000713f, +0.001801f, + -0.004099f, -0.000918f, +0.001671f, -0.000894f, -0.001490f, -0.000828f, -0.003077f, -0.001401f, +0.000970f, -0.000786f, + -0.003568f, +0.000730f, -0.002717f, -0.000202f, +0.000336f, -0.001138f, -0.000250f, +0.001444f, -0.000340f, -0.001023f, + -0.000524f, -0.000027f, +0.000558f, +0.000977f, -0.001788f, -0.000858f, +0.000243f, +0.000914f, -0.000160f, -0.000272f, + -0.000730f, +0.000913f, -0.000335f, -0.000042f, -0.000541f, +0.000785f, -0.000198f, +0.000133f, +0.000335f, +0.000192f, + +0.000207f, -0.000439f, +0.000368f, -0.000082f, +0.000049f, +0.000533f + }, + { + +0.092145f, +0.051207f, -0.027686f, -0.020332f, +0.003283f, -0.000172f, +0.003793f, -0.013550f, +0.002631f, -0.004307f, + -0.008396f, -0.002064f, -0.002437f, -0.003734f, +0.006708f, -0.001749f, -0.004681f, +0.012452f, +0.002145f, -0.001190f, + +0.007336f, -0.004036f, +0.001604f, -0.003966f, +0.007714f, +0.002013f, +0.003449f, -0.002129f, -0.006808f, -0.006843f, + -0.002906f, +0.002461f, +0.005846f, +0.001806f, -0.000126f, +0.002183f, +0.000918f, -0.007054f, -0.003824f, +0.002387f, + +0.002425f, -0.002832f, -0.001882f, +0.002329f, -0.004834f, +0.002605f, +0.005594f, +0.001583f, -0.000132f, +0.003672f, + -0.003512f, -0.002409f, +0.001347f, +0.001388f, -0.002359f, +0.000737f, -0.000212f, +0.001055f, +0.000518f, +0.000562f, + -0.000069f, -0.000923f, -0.000442f, -0.000139f, -0.000083f, +0.001051f, -0.000640f, -0.001118f, +0.000491f, -0.000960f, + -0.000297f, -0.000516f, +0.001213f, -0.000169f, +0.000577f, -0.000908f, +0.000098f, +0.000897f, +0.000135f, -0.001737f, + +0.000606f, -0.000400f, +0.000242f, +0.000373f, +0.000293f, +0.000106f, -0.000139f, +0.000460f, -0.000331f, -0.000117f, + +0.000831f, -0.000350f, -0.000105f, +0.000151f, +0.000571f, -0.000005f + }, + { + -0.000069f, -0.013599f, -0.001087f, -0.001516f, -0.001591f, +0.000105f, +0.000150f, -0.003555f, -0.000852f, +0.001043f, + -0.003318f, -0.006830f, -0.006443f, +0.012502f, -0.002486f, -0.000283f, -0.001554f, +0.005674f, -0.001827f, +0.016282f, + -0.001186f, -0.002796f, -0.007580f, +0.034419f, -0.011125f, +0.004381f, +0.005367f, -0.012086f, +0.011744f, +0.002373f, + +0.002841f, +0.001239f, -0.011456f, +0.008563f, -0.004664f, -0.005902f, -0.002110f, +0.000056f, +0.006539f, +0.000921f, + -0.001750f, +0.001893f, -0.003037f, +0.000340f, +0.000129f, -0.001324f, -0.002837f, +0.000410f, +0.000004f, +0.001083f, + -0.003750f, +0.001398f, -0.000524f, -0.000565f, +0.000176f, +0.000934f, +0.001363f, -0.002083f, +0.004374f, +0.000962f, + +0.003372f, +0.001742f, +0.000857f, +0.000408f, +0.000336f, +0.001370f, +0.000913f, -0.001092f, -0.001927f, -0.000485f, + +0.001508f, +0.000349f, -0.000021f, +0.001548f, +0.001354f, +0.000424f, -0.000241f, -0.000059f, -0.000721f, -0.000035f, + +0.000700f, -0.000042f, -0.000198f, +0.000437f, +0.000099f, +0.000258f, -0.000539f, +0.000298f, -0.000243f, -0.000355f, + +0.000067f, +0.000169f, -0.000493f, -0.000356f, -0.000171f, -0.000051f + }, + { + -0.075211f, -0.168596f, +0.038119f, +0.017023f, +0.001196f, -0.000618f, -0.008687f, +0.004592f, -0.005076f, +0.002083f, + +0.005863f, -0.010433f, +0.007581f, +0.020139f, -0.042272f, -0.000840f, -0.009538f, +0.004074f, +0.002592f, +0.006572f, + +0.000676f, -0.009180f, -0.004481f, +0.003096f, +0.003141f, -0.003959f, +0.001075f, -0.001834f, +0.008974f, -0.005881f, + -0.000169f, +0.008999f, +0.005021f, -0.004512f, -0.003618f, -0.001506f, -0.003158f, +0.005957f, -0.009497f, -0.002370f, + -0.002386f, +0.004899f, +0.000121f, -0.001056f, -0.001779f, +0.002519f, -0.000043f, -0.002148f, +0.007682f, +0.004441f, + -0.002023f, -0.001969f, -0.001901f, +0.001816f, -0.000275f, +0.004619f, +0.000724f, -0.000735f, +0.000317f, -0.000269f, + -0.001480f, +0.000151f, -0.000163f, -0.000588f, -0.000274f, +0.000977f, +0.000704f, -0.000433f, +0.000885f, +0.000093f, + -0.000254f, -0.000405f, +0.000846f, +0.000368f, +0.000349f, -0.000728f, +0.000372f, -0.000152f, +0.000341f, +0.000997f, + +0.000493f, +0.000383f, +0.000378f, -0.000361f, -0.000278f, +0.000092f, -0.000384f, +0.000359f, +0.000051f, -0.000019f, + +0.000132f, -0.000662f, +0.000073f, +0.000383f, -0.000147f, -0.000494f + }, + { + -0.000538f, +0.004825f, -0.009191f, -0.002141f, -0.001181f, -0.000743f, +0.000014f, -0.005674f, -0.001756f, -0.000474f, + -0.004604f, -0.004443f, +0.004381f, +0.007807f, -0.032270f, +0.012144f, -0.021368f, +0.011596f, +0.008269f, -0.015778f, + +0.004388f, -0.008439f, +0.009414f, +0.001745f, -0.011788f, +0.012087f, +0.002782f, -0.000067f, +0.001831f, -0.006443f, + +0.009155f, -0.016034f, +0.008863f, -0.000258f, -0.005443f, -0.001300f, +0.005806f, -0.000114f, -0.000191f, -0.000054f, + -0.003845f, -0.004421f, -0.000013f, +0.001847f, +0.000154f, +0.002111f, -0.000023f, -0.004197f, +0.003241f, +0.002221f, + -0.000944f, -0.000781f, +0.002290f, -0.001274f, -0.000449f, -0.000489f, +0.000682f, +0.001721f, +0.000597f, -0.002787f, + -0.003120f, +0.000690f, +0.001537f, -0.000800f, -0.000100f, +0.001022f, +0.000492f, +0.000938f, +0.001247f, +0.000927f, + +0.000268f, -0.000977f, +0.000437f, +0.000342f, +0.000702f, -0.000700f, +0.000254f, -0.001156f, +0.000845f, +0.000045f, + +0.000652f, -0.000358f, +0.000429f, +0.000156f, +0.000202f, -0.000463f, -0.000263f, -0.000134f, -0.000422f, +0.000046f, + -0.000041f, +0.000017f, +0.000173f, +0.000242f, +0.000300f, +0.000099f + }, + { + -0.029155f, -0.061565f, +0.031403f, -0.001710f, +0.014235f, +0.008423f, -0.013697f, +0.003923f, -0.002204f, -0.007962f, + +0.000209f, +0.000288f, -0.002551f, -0.004224f, -0.005171f, -0.011178f, -0.000287f, -0.010612f, +0.007047f, +0.005207f, + -0.008779f, -0.007273f, +0.000066f, +0.001633f, +0.005712f, -0.001923f, +0.008853f, -0.005085f, +0.004596f, -0.009405f, + +0.005442f, +0.002829f, -0.002424f, +0.004889f, -0.005235f, -0.007306f, -0.006480f, -0.002233f, +0.003422f, +0.009357f, + -0.007490f, +0.005756f, +0.001028f, -0.000464f, -0.002452f, -0.005421f, -0.002904f, +0.004212f, -0.003637f, -0.001840f, + -0.003353f, -0.000640f, -0.000149f, +0.001008f, +0.001781f, -0.000881f, +0.000012f, +0.001595f, +0.000645f, -0.001958f, + +0.002516f, -0.002758f, +0.002807f, -0.000629f, -0.001304f, -0.000358f, +0.002342f, -0.000523f, -0.000037f, +0.000051f, + -0.000453f, +0.001747f, -0.000171f, -0.000701f, +0.000056f, -0.000014f, +0.001021f, +0.000095f, -0.000351f, +0.000052f, + -0.000720f, +0.000462f, +0.000432f, +0.000415f, -0.000265f, -0.000102f, -0.000387f, +0.000495f, -0.000275f, +0.001157f, + -0.000249f, +0.000378f, -0.000286f, -0.000232f, +0.000382f, +0.000423f + }, + { + -0.001619f, +0.020448f, +0.004930f, +0.000148f, +0.005673f, -0.001176f, +0.002618f, -0.001956f, +0.003037f, -0.003181f, + +0.004278f, -0.004395f, +0.006802f, -0.005561f, -0.006936f, -0.001280f, -0.008678f, +0.006067f, +0.006191f, +0.006302f, + +0.005226f, +0.007645f, +0.016285f, +0.005101f, +0.004039f, +0.008985f, -0.009851f, +0.017795f, -0.003644f, +0.003260f, + -0.002076f, +0.006385f, +0.003443f, -0.000797f, +0.001500f, +0.001879f, +0.003358f, +0.001501f, +0.001615f, +0.000240f, + +0.001040f, -0.002474f, -0.000044f, -0.001648f, +0.000338f, -0.001351f, +0.002705f, -0.000304f, +0.001095f, +0.000277f, + -0.001654f, +0.000771f, -0.001369f, +0.001990f, +0.000621f, +0.002404f, -0.002472f, +0.000976f, +0.001735f, +0.000256f, + +0.003094f, -0.001788f, +0.000286f, +0.001374f, -0.000224f, -0.000590f, -0.000212f, +0.000104f, -0.000263f, -0.001095f, + +0.000045f, -0.001387f, -0.000097f, -0.000479f, -0.000137f, -0.000461f, +0.000108f, -0.000462f, +0.000768f, -0.000333f, + +0.000370f, -0.000473f, -0.000053f, +0.000138f, +0.000395f, +0.000391f, +0.000073f, -0.000170f, +0.000299f, -0.000157f, + +0.000099f, -0.000113f, -0.000038f, +0.000111f, +0.000064f, -0.000048f + }, + { + -0.061816f, +0.159821f, -0.003286f, -0.008603f, +0.002502f, +0.007643f, -0.007727f, +0.008039f, +0.004715f, +0.007108f, + -0.000720f, +0.004682f, +0.011955f, +0.013410f, -0.000001f, +0.004968f, +0.008708f, +0.002181f, +0.005803f, -0.004137f, + +0.010844f, +0.001076f, -0.003446f, +0.014624f, -0.003246f, +0.001585f, -0.005146f, -0.004632f, +0.000011f, +0.003188f, + +0.000322f, -0.001154f, -0.000010f, +0.004175f, +0.001400f, -0.003860f, +0.005615f, -0.001712f, +0.000002f, -0.004355f, + +0.002993f, -0.002715f, +0.002064f, +0.007756f, -0.001780f, +0.001674f, -0.002099f, +0.000192f, +0.002116f, +0.000630f, + -0.002099f, -0.002235f, +0.000753f, -0.002004f, +0.000360f, +0.001397f, -0.000271f, +0.000748f, -0.001408f, -0.002452f, + -0.001376f, +0.001940f, -0.001648f, -0.000135f, +0.000441f, -0.000546f, +0.000425f, +0.000370f, -0.000167f, +0.000172f, + -0.001338f, -0.000394f, +0.000908f, -0.000839f, +0.000242f, -0.000643f, +0.000684f, -0.001158f, +0.000271f, +0.000813f, + +0.000225f, +0.000210f, -0.000496f, +0.000135f, -0.000088f, -0.000210f, -0.000668f, +0.000536f, +0.000171f, +0.000097f, + -0.000255f, -0.000216f, +0.000162f, -0.000188f, -0.000071f, +0.000104f + }, + { + -0.000234f, +0.034893f, -0.000997f, +0.001350f, -0.002449f, +0.004710f, -0.006066f, +0.000756f, -0.001464f, -0.002575f, + +0.006268f, -0.002501f, +0.023470f, -0.062505f, +0.006399f, +0.005745f, +0.004871f, -0.000659f, -0.005866f, -0.018509f, + -0.005788f, +0.030061f, +0.001265f, -0.008062f, -0.000657f, +0.012677f, -0.007605f, +0.006187f, -0.003523f, +0.017577f, + -0.001852f, +0.004233f, +0.000164f, +0.001973f, +0.004287f, -0.007815f, +0.003001f, -0.005705f, -0.003284f, -0.001648f, + -0.002039f, +0.001721f, +0.003669f, -0.003255f, +0.000321f, -0.001018f, +0.003282f, +0.002258f, -0.004637f, -0.004291f, + +0.003086f, -0.000081f, -0.000818f, -0.000240f, +0.002251f, -0.000530f, +0.001597f, -0.000122f, +0.000653f, -0.000721f, + -0.000700f, +0.001745f, -0.000917f, -0.002205f, +0.000805f, -0.002099f, +0.000913f, -0.001640f, +0.003057f, +0.000184f, + -0.000029f, -0.000910f, -0.000078f, +0.000266f, -0.000554f, +0.000107f, -0.000152f, +0.000283f, +0.000873f, -0.000507f, + +0.000319f, -0.000194f, -0.000309f, +0.000002f, -0.000155f, -0.000251f, -0.000490f, -0.001079f, -0.000686f, -0.000125f, + -0.000273f, +0.000083f, +0.000319f, -0.000263f, -0.000032f, +0.000540f + }, + { + -0.014161f, +0.130087f, +0.001197f, -0.005322f, -0.001610f, +0.018704f, -0.011680f, +0.010633f, +0.009454f, +0.000769f, + +0.003108f, +0.006764f, -0.003401f, +0.000634f, +0.085526f, +0.000089f, -0.017799f, -0.004576f, -0.005936f, +0.005026f, + -0.004047f, +0.002201f, -0.002836f, +0.005637f, +0.001535f, +0.005407f, -0.007005f, +0.007636f, -0.000621f, +0.002997f, + +0.001690f, +0.002793f, +0.005328f, -0.001031f, +0.001602f, +0.001311f, -0.003175f, -0.000743f, +0.004853f, +0.000254f, + +0.002869f, -0.000621f, -0.004463f, -0.002386f, +0.004156f, +0.000855f, -0.000465f, -0.001612f, -0.000095f, +0.004315f, + -0.002744f, +0.003515f, +0.003066f, +0.006789f, +0.000203f, -0.001563f, +0.001301f, +0.000189f, +0.000353f, +0.001268f, + -0.001079f, +0.000363f, -0.001419f, -0.000581f, +0.001496f, +0.000301f, -0.000192f, +0.000943f, +0.000109f, -0.000809f, + +0.001128f, -0.000751f, -0.000656f, -0.000823f, -0.000327f, +0.000561f, +0.000600f, +0.000682f, +0.000426f, -0.000197f, + -0.000128f, -0.000511f, -0.000393f, +0.000228f, +0.000107f, -0.000436f, +0.000251f, -0.000160f, -0.000242f, -0.000472f, + -0.000334f, -0.000139f, -0.000294f, -0.000393f, -0.000009f, +0.000376f + }, + { + -0.003171f, +0.014195f, -0.005233f, -0.005022f, -0.001153f, +0.001846f, +0.002070f, +0.000546f, +0.004625f, -0.003970f, + -0.001375f, +0.003485f, +0.001004f, +0.042845f, -0.028247f, -0.008908f, -0.012505f, +0.006602f, -0.000482f, +0.010423f, + -0.015297f, +0.000675f, -0.010626f, +0.005997f, +0.008879f, -0.004220f, -0.006314f, -0.005571f, -0.000605f, +0.005960f, + +0.004807f, +0.001926f, -0.001866f, -0.001319f, -0.005016f, +0.000027f, -0.001421f, -0.003605f, -0.001993f, +0.001165f, + -0.000002f, +0.000474f, +0.002791f, -0.003961f, +0.000403f, +0.002492f, +0.000565f, -0.000173f, +0.000479f, -0.000437f, + +0.000072f, +0.001745f, +0.000746f, +0.001706f, -0.001904f, -0.001028f, -0.000920f, -0.001349f, +0.000395f, +0.000151f, + -0.000821f, +0.001160f, +0.000702f, -0.001534f, -0.000660f, -0.000490f, +0.000865f, +0.000702f, +0.001597f, -0.001175f, + +0.001481f, +0.000553f, -0.000493f, +0.000241f, +0.001669f, -0.000080f, -0.000186f, -0.000034f, -0.000332f, -0.000076f, + +0.000247f, -0.000903f, -0.000037f, +0.000117f, +0.000475f, -0.000315f, -0.000192f, -0.000070f, -0.000132f, -0.000126f, + +0.000290f, -0.000641f, +0.000413f, -0.000228f, -0.000465f, -0.000374f + } + }, + { + { + -0.013356f, +0.316179f, +0.068555f, -0.020471f, -0.005130f, -0.000560f, -0.004401f, -0.002500f, -0.004026f, +0.010125f, + -0.001250f, -0.001436f, +0.004184f, +0.001719f, -0.003776f, +0.023143f, -0.005973f, +0.008432f, +0.006506f, -0.014236f, + +0.008750f, +0.002630f, +0.004989f, -0.013907f, +0.007494f, +0.003718f, +0.004746f, -0.002490f, -0.000203f, +0.000979f, + +0.007816f, +0.000020f, -0.007067f, -0.003101f, +0.005257f, +0.001265f, +0.003637f, -0.000703f, -0.002474f, -0.001294f, + +0.003740f, +0.002590f, -0.006906f, +0.003375f, -0.001387f, +0.000331f, +0.000958f, +0.001463f, -0.003164f, -0.001575f, + -0.001518f, -0.001629f, +0.000787f, +0.001539f, +0.002253f, -0.001870f, -0.000208f, +0.002925f, +0.003447f, -0.000912f, + +0.001053f, +0.001628f, +0.000033f, +0.000276f, +0.001109f, +0.000487f, +0.000423f, -0.000092f, -0.000240f, -0.000591f, + +0.000869f, +0.000095f, -0.000309f, +0.000158f, -0.000667f, +0.001609f, +0.001446f, +0.001203f, -0.000399f, -0.000239f, + -0.000214f, +0.000117f, +0.001295f, -0.000023f, +0.000060f, +0.000189f, -0.000014f, +0.000465f, +0.000484f, +0.000525f, + +0.000041f, -0.000664f, -0.000013f, -0.000365f, -0.000119f, +0.000027f + }, + { + -0.000893f, +0.048678f, -0.040643f, +0.001993f, -0.004704f, -0.002185f, -0.002055f, +0.003764f, -0.000508f, +0.001233f, + +0.006796f, +0.000004f, -0.004395f, +0.001049f, -0.011421f, -0.000010f, -0.000753f, -0.012851f, +0.018962f, -0.003410f, + +0.008059f, +0.020065f, +0.007876f, -0.002719f, +0.002894f, -0.003325f, -0.009513f, +0.003496f, -0.006714f, -0.006871f, + +0.005770f, +0.012441f, -0.002487f, -0.002550f, -0.004140f, +0.000787f, +0.001567f, -0.001270f, -0.004678f, -0.000066f, + -0.003281f, +0.005625f, +0.001757f, +0.002426f, -0.003590f, -0.005360f, +0.000272f, +0.000950f, -0.001381f, -0.002431f, + -0.001456f, -0.000192f, -0.000253f, -0.001728f, -0.002543f, +0.000932f, -0.001609f, +0.001607f, +0.001325f, -0.001287f, + -0.002150f, +0.001238f, +0.000226f, +0.001329f, -0.000491f, +0.001088f, +0.000544f, +0.001188f, -0.000767f, -0.000676f, + -0.001826f, -0.001344f, -0.000238f, -0.000145f, -0.001400f, -0.000015f, +0.000732f, -0.000153f, +0.001021f, +0.000165f, + -0.000192f, -0.000070f, +0.000422f, -0.000471f, +0.000343f, -0.000056f, -0.001043f, +0.000351f, +0.000428f, +0.000097f, + +0.000465f, -0.000262f, -0.000582f, +0.000274f, -0.000228f, +0.000206f + }, + { + +0.002897f, -0.271262f, +0.008285f, +0.018221f, +0.008144f, +0.005021f, -0.002042f, +0.000702f, +0.000723f, +0.000729f, + -0.008157f, -0.001472f, +0.008523f, -0.004144f, +0.009299f, -0.009425f, -0.005638f, -0.000152f, -0.007636f, +0.003349f, + +0.013395f, -0.006545f, -0.005167f, -0.004206f, -0.003323f, +0.008750f, -0.010160f, -0.005350f, -0.000691f, +0.006550f, + +0.002771f, +0.012192f, -0.000362f, -0.004941f, +0.010050f, +0.004316f, +0.001681f, -0.000199f, +0.000699f, +0.007312f, + +0.000478f, -0.001350f, +0.001694f, +0.002437f, -0.002517f, -0.002714f, -0.000596f, +0.000412f, -0.001260f, -0.001037f, + +0.001151f, -0.001115f, -0.001109f, -0.001364f, -0.001172f, +0.000040f, -0.002893f, -0.001939f, +0.001544f, -0.000195f, + -0.001014f, +0.000780f, +0.000473f, -0.001859f, -0.000842f, -0.001380f, +0.000570f, -0.001939f, +0.000072f, -0.000135f, + -0.000569f, -0.000336f, +0.000061f, +0.000923f, +0.000751f, -0.000051f, -0.000653f, +0.000937f, -0.000987f, -0.000424f, + +0.001001f, +0.000626f, -0.000330f, -0.000132f, +0.000551f, -0.000273f, -0.000228f, +0.000289f, +0.000052f, +0.000377f, + +0.000295f, +0.000752f, +0.000352f, -0.000078f, -0.000066f, -0.000119f + }, + { + -0.074778f, +0.051907f, +0.007172f, +0.034432f, +0.001284f, -0.003475f, +0.001177f, +0.004756f, -0.000982f, -0.007209f, + -0.006131f, -0.005217f, +0.004212f, -0.005147f, +0.015456f, +0.003022f, -0.001058f, +0.000383f, -0.004424f, -0.001002f, + -0.001262f, -0.000129f, +0.001741f, +0.002408f, +0.006321f, +0.001420f, -0.000560f, -0.000562f, +0.001224f, -0.004160f, + +0.004216f, +0.002699f, +0.002051f, -0.002290f, -0.004130f, -0.005370f, -0.002396f, -0.004297f, -0.002533f, -0.001582f, + +0.000683f, +0.000955f, +0.000121f, -0.004063f, -0.003172f, -0.000542f, +0.000368f, +0.001856f, +0.000221f, +0.000974f, + +0.000602f, +0.001725f, -0.002160f, +0.000239f, +0.000349f, -0.000828f, -0.000039f, -0.001404f, -0.001486f, +0.001503f, + -0.001972f, -0.000278f, +0.001181f, +0.002105f, -0.000915f, -0.000515f, -0.000279f, -0.000506f, +0.001046f, +0.000503f, + +0.000118f, -0.000005f, +0.000813f, +0.000482f, -0.001039f, +0.000137f, -0.000483f, +0.000646f, +0.000077f, +0.000372f, + -0.000417f, -0.000448f, +0.000071f, +0.000253f, -0.000442f, +0.000145f, +0.000190f, +0.000082f, +0.000116f, +0.000086f, + +0.000221f, +0.000182f, -0.000087f, +0.000165f, -0.000113f, +0.000400f + }, + { + +0.000805f, +0.069203f, +0.002078f, +0.001785f, -0.002145f, +0.002570f, -0.000150f, -0.001275f, -0.001713f, +0.001902f, + -0.001802f, +0.010261f, +0.002030f, +0.005475f, -0.021241f, +0.009956f, +0.001667f, +0.016643f, +0.053028f, +0.009560f, + +0.019990f, -0.005740f, -0.000428f, +0.013540f, +0.005826f, -0.004499f, -0.001718f, -0.012684f, -0.002974f, -0.005542f, + +0.002613f, +0.003107f, -0.000417f, +0.009044f, -0.000859f, -0.004175f, +0.001883f, -0.006092f, +0.000037f, -0.000389f, + +0.000651f, -0.000048f, +0.001775f, -0.001272f, +0.001221f, -0.001822f, +0.001609f, +0.000337f, +0.000160f, -0.001071f, + -0.000154f, +0.001830f, -0.001558f, -0.001286f, -0.001922f, +0.001348f, -0.004232f, -0.002386f, -0.000598f, +0.000621f, + -0.002133f, -0.000659f, -0.001117f, -0.001004f, -0.000384f, -0.001377f, -0.000100f, +0.000612f, +0.000384f, -0.000841f, + -0.000238f, +0.000316f, +0.000311f, +0.000417f, -0.000418f, -0.001538f, -0.000000f, +0.000775f, -0.000559f, -0.000748f, + -0.000061f, +0.000037f, -0.000061f, +0.000054f, -0.000087f, +0.000288f, -0.000107f, +0.000092f, -0.000039f, +0.000440f, + -0.000146f, -0.000380f, +0.000399f, +0.000277f, -0.000127f, +0.000105f + }, + { + -0.091792f, +0.256231f, +0.004478f, -0.000467f, -0.009904f, +0.003182f, -0.005938f, -0.002510f, +0.000430f, -0.001584f, + -0.007633f, -0.005734f, -0.008547f, +0.001839f, +0.003469f, -0.002775f, +0.003025f, +0.003472f, +0.002990f, -0.001684f, + -0.001874f, +0.004554f, +0.001102f, +0.002421f, +0.002769f, +0.003102f, +0.001147f, +0.002919f, -0.007360f, -0.008423f, + -0.003509f, +0.007773f, +0.006718f, -0.003667f, +0.003817f, -0.001486f, +0.002834f, -0.006735f, -0.001878f, +0.001718f, + -0.000469f, +0.003272f, -0.000442f, -0.002835f, +0.000966f, +0.000617f, +0.003735f, +0.000038f, +0.001016f, +0.001377f, + +0.000890f, -0.002070f, -0.000640f, +0.002033f, -0.001420f, -0.001061f, -0.001127f, +0.000693f, +0.001352f, +0.001468f, + +0.000141f, -0.001272f, -0.000968f, +0.000321f, +0.000033f, -0.000558f, +0.000215f, -0.000531f, -0.000169f, -0.000499f, + -0.001085f, +0.000692f, -0.000253f, +0.000325f, +0.000440f, -0.000937f, +0.000252f, +0.000511f, +0.000613f, -0.000579f, + +0.000095f, -0.000471f, +0.000281f, +0.000195f, +0.000425f, -0.000101f, +0.000368f, -0.000491f, -0.000071f, +0.000378f, + +0.000441f, -0.000022f, -0.000002f, +0.000344f, +0.000219f, +0.000173f + }, + { + +0.000844f, -0.018051f, -0.000965f, -0.001884f, -0.000168f, -0.000046f, -0.000410f, -0.002969f, -0.000405f, -0.001415f, + -0.002031f, -0.005921f, -0.003298f, +0.019431f, -0.015329f, +0.006854f, +0.003056f, +0.006883f, +0.006772f, -0.009555f, + +0.007625f, +0.003480f, -0.000035f, +0.018059f, -0.007693f, +0.000959f, -0.001978f, +0.003881f, +0.004742f, +0.006212f, + -0.001447f, +0.004524f, -0.002560f, -0.001492f, -0.002443f, -0.004830f, +0.002534f, -0.001588f, +0.006081f, +0.000081f, + +0.000309f, -0.000984f, -0.000757f, +0.000027f, +0.000311f, +0.001308f, -0.003089f, -0.000871f, +0.001168f, +0.000091f, + -0.002144f, -0.001261f, -0.000200f, +0.001174f, -0.000763f, +0.000670f, -0.000363f, -0.001026f, +0.002611f, +0.001627f, + +0.003356f, +0.001984f, +0.001754f, -0.000399f, +0.001041f, +0.000827f, -0.000125f, -0.000949f, -0.001461f, +0.000321f, + +0.000809f, +0.000315f, +0.000295f, +0.000784f, +0.001536f, +0.000507f, -0.000153f, -0.000716f, -0.000767f, +0.000539f, + -0.000022f, +0.000552f, +0.000130f, +0.000383f, +0.000007f, -0.000171f, -0.000627f, +0.000356f, -0.000074f, -0.000140f, + +0.000427f, +0.000092f, -0.000329f, -0.000366f, +0.000056f, -0.000218f + }, + { + +0.070067f, -0.285547f, -0.025016f, +0.021137f, -0.002741f, -0.005063f, -0.001068f, -0.001735f, +0.000649f, -0.004463f, + -0.000840f, +0.001538f, +0.001311f, -0.005369f, -0.017121f, +0.001658f, -0.006070f, +0.003262f, +0.005095f, +0.000661f, + +0.005887f, -0.004502f, -0.007702f, +0.004631f, +0.003968f, -0.007201f, +0.001336f, -0.002785f, +0.005361f, -0.002432f, + +0.003496f, +0.004764f, +0.005319f, -0.004630f, -0.001632f, +0.000919f, -0.000913f, -0.000454f, -0.007336f, -0.003966f, + +0.003518f, -0.002472f, -0.000417f, -0.000949f, +0.003157f, +0.003262f, -0.004126f, +0.001777f, +0.003924f, +0.001220f, + +0.002289f, -0.002443f, -0.001873f, +0.000765f, -0.000215f, +0.004224f, -0.000004f, +0.001684f, +0.000555f, -0.001879f, + -0.000527f, -0.000659f, -0.000134f, -0.000004f, -0.001158f, +0.001492f, -0.000166f, -0.000250f, +0.000535f, +0.000588f, + -0.000365f, -0.000376f, -0.000010f, +0.000267f, -0.000242f, +0.000295f, -0.000274f, -0.000280f, +0.000742f, +0.000096f, + +0.000640f, +0.001252f, +0.000061f, -0.000355f, -0.000499f, +0.000284f, +0.000001f, -0.000073f, +0.000219f, +0.000035f, + +0.000054f, -0.000140f, +0.000176f, -0.000262f, +0.000215f, -0.000462f + }, + { + +0.001540f, -0.011513f, -0.003371f, +0.000971f, -0.001697f, -0.000419f, +0.000227f, -0.004532f, -0.006099f, -0.000472f, + -0.002722f, -0.002531f, +0.000937f, +0.003595f, -0.028389f, +0.018299f, -0.008742f, -0.008374f, +0.007530f, -0.006419f, + -0.012988f, -0.003513f, +0.009799f, -0.013419f, +0.007166f, +0.013477f, -0.010025f, -0.000564f, +0.011362f, -0.010831f, + -0.001867f, +0.002393f, -0.001071f, -0.007754f, +0.001094f, +0.000476f, +0.003296f, -0.001399f, +0.002193f, +0.000616f, + -0.003330f, +0.000503f, -0.003935f, -0.001291f, +0.002089f, -0.001686f, +0.002335f, -0.000507f, -0.001499f, +0.002845f, + -0.002667f, +0.003687f, -0.001179f, -0.000338f, -0.000095f, +0.000319f, +0.000479f, +0.001824f, +0.001518f, -0.004119f, + -0.002920f, +0.001950f, +0.000247f, +0.000542f, +0.000376f, -0.000214f, +0.001336f, +0.000892f, +0.001842f, -0.000548f, + +0.000808f, -0.000350f, -0.000608f, +0.000542f, -0.000185f, +0.000332f, -0.000760f, -0.000602f, +0.000439f, +0.000221f, + -0.000082f, +0.000611f, +0.000307f, +0.000635f, +0.000071f, -0.001173f, +0.000027f, -0.000187f, -0.000311f, -0.000126f, + -0.000092f, +0.000019f, +0.000060f, +0.000288f, +0.000381f, +0.000193f + }, + { + +0.029740f, -0.030563f, -0.022840f, -0.007689f, +0.001406f, -0.009482f, +0.010669f, -0.000676f, +0.001020f, -0.007602f, + -0.005119f, -0.001443f, -0.004907f, +0.000429f, -0.005801f, -0.006288f, +0.004720f, -0.014106f, +0.006109f, +0.000399f, + -0.005895f, -0.010357f, +0.006068f, -0.005126f, +0.005105f, +0.003925f, +0.003825f, -0.001142f, -0.002295f, -0.004441f, + -0.005513f, +0.005280f, +0.008225f, -0.006496f, +0.001935f, -0.008641f, -0.004829f, -0.006298f, +0.004149f, +0.004384f, + +0.002084f, +0.000421f, +0.002377f, -0.000331f, -0.004224f, -0.003237f, -0.002415f, +0.002822f, -0.001588f, -0.004736f, + -0.001037f, -0.003119f, -0.001902f, +0.000394f, +0.004787f, -0.001718f, -0.001043f, +0.001747f, +0.000513f, -0.000322f, + +0.000819f, -0.001198f, -0.000107f, +0.001070f, -0.002594f, +0.001128f, +0.001305f, -0.000636f, +0.000685f, -0.000217f, + -0.000926f, +0.001162f, +0.000137f, -0.000194f, -0.000752f, +0.000334f, +0.001081f, +0.000057f, -0.000317f, -0.000389f, + +0.000005f, +0.000050f, +0.000933f, -0.000321f, +0.000299f, -0.001089f, -0.000287f, +0.000197f, +0.000333f, +0.000309f, + +0.000469f, -0.000181f, -0.000364f, +0.000188f, +0.000398f, +0.000069f + }, + { + +0.001294f, +0.048200f, -0.010075f, -0.000379f, +0.001815f, +0.003617f, -0.003355f, +0.003224f, +0.000404f, +0.000736f, + -0.001667f, -0.002923f, +0.002890f, -0.004917f, -0.006219f, +0.003890f, -0.007122f, +0.004916f, +0.000918f, +0.011770f, + +0.003003f, +0.016430f, +0.004224f, +0.005711f, +0.002603f, +0.001334f, +0.004838f, +0.012820f, +0.003018f, +0.005381f, + -0.001531f, +0.000548f, +0.005060f, +0.000723f, +0.005136f, -0.002183f, +0.003771f, +0.000810f, +0.003407f, +0.001262f, + +0.002361f, -0.004740f, -0.000334f, -0.000137f, +0.001105f, -0.001528f, +0.002941f, +0.000187f, -0.000114f, +0.000565f, + +0.000471f, -0.002168f, -0.000395f, +0.002531f, +0.001138f, +0.001376f, -0.000131f, +0.000148f, +0.001873f, +0.000354f, + +0.000880f, +0.000406f, +0.000964f, +0.000015f, +0.000582f, -0.000892f, -0.000230f, +0.000101f, +0.000330f, -0.001523f, + -0.000562f, -0.000295f, -0.000116f, -0.000729f, -0.000467f, -0.000062f, -0.000120f, +0.000003f, +0.000500f, +0.000001f, + +0.000153f, -0.000683f, -0.000358f, +0.000582f, +0.000492f, -0.000062f, +0.000442f, +0.000026f, -0.000064f, +0.000439f, + -0.000308f, +0.000064f, -0.000131f, -0.000163f, +0.000238f, -0.000057f + }, + { + +0.054752f, -0.014533f, +0.014709f, -0.006443f, +0.000796f, +0.004975f, +0.000939f, +0.001801f, +0.002290f, +0.010732f, + +0.003679f, +0.002184f, -0.003224f, +0.017998f, +0.015869f, -0.000100f, +0.003343f, +0.000790f, +0.006918f, +0.000039f, + +0.010956f, -0.000792f, +0.002214f, +0.007181f, +0.006782f, -0.007709f, -0.001307f, -0.000818f, -0.003128f, -0.002003f, + +0.000082f, +0.002000f, +0.003961f, -0.000102f, +0.007241f, -0.003214f, +0.000388f, +0.003418f, -0.006665f, +0.000188f, + -0.001849f, +0.001452f, +0.009159f, -0.001079f, -0.000600f, +0.001622f, -0.000141f, +0.000457f, -0.000134f, -0.000013f, + -0.002103f, -0.000718f, -0.002524f, -0.000240f, +0.001784f, +0.000818f, +0.000273f, -0.001092f, +0.000516f, -0.001578f, + -0.001428f, +0.000602f, -0.000945f, -0.000417f, -0.000128f, +0.000337f, +0.000696f, -0.000711f, +0.001254f, -0.000916f, + -0.000669f, +0.000442f, +0.000205f, -0.000437f, -0.000164f, -0.001156f, +0.000405f, -0.000229f, +0.000091f, +0.000092f, + +0.000325f, +0.000091f, -0.000246f, +0.000427f, +0.000070f, -0.000537f, +0.000011f, -0.000318f, +0.000221f, +0.000181f, + -0.000145f, -0.000293f, -0.000265f, +0.000238f, -0.000155f, -0.000054f + }, + { + -0.000790f, +0.016322f, +0.014562f, -0.000390f, +0.005934f, -0.003916f, -0.007540f, +0.000612f, -0.004281f, +0.003202f, + +0.000299f, +0.008423f, -0.028773f, -0.001244f, +0.011652f, +0.007755f, -0.004057f, -0.004955f, +0.002382f, -0.017621f, + -0.000812f, -0.001445f, -0.001580f, +0.015012f, +0.006567f, -0.009176f, +0.003012f, +0.012004f, +0.004820f, -0.001426f, + -0.000091f, +0.005522f, +0.006194f, -0.000877f, +0.003194f, -0.003124f, -0.005693f, +0.002857f, -0.006720f, -0.003043f, + -0.001360f, -0.000377f, +0.004469f, +0.001553f, -0.000693f, -0.000697f, +0.002989f, +0.000069f, -0.004494f, -0.004167f, + -0.000458f, -0.000105f, +0.000932f, +0.000680f, +0.000075f, +0.000875f, +0.000452f, +0.000358f, +0.001144f, +0.000134f, + -0.000526f, +0.001121f, -0.001276f, -0.000320f, -0.001428f, -0.000950f, -0.000102f, +0.000749f, +0.001784f, +0.000505f, + -0.000514f, -0.000021f, -0.001113f, +0.000343f, +0.000057f, -0.000431f, +0.000186f, +0.000575f, +0.000411f, -0.000333f, + +0.000123f, -0.000163f, +0.000283f, -0.000172f, +0.000062f, -0.000049f, -0.000942f, -0.000507f, -0.000752f, +0.000001f, + -0.000630f, +0.000303f, +0.000051f, -0.000385f, +0.000132f, +0.000319f + }, + { + +0.032848f, +0.066274f, -0.000384f, -0.005014f, +0.003999f, +0.003061f, +0.009783f, -0.004353f, +0.015183f, -0.002416f, + +0.002327f, +0.003793f, +0.009022f, +0.020990f, +0.041824f, +0.005300f, -0.015745f, -0.001059f, -0.007934f, -0.001440f, + +0.001828f, -0.002703f, +0.000093f, +0.008313f, -0.000567f, -0.000437f, -0.000775f, +0.006709f, -0.007040f, +0.001415f, + +0.003001f, +0.003288f, +0.001233f, +0.002299f, +0.007298f, -0.002144f, -0.004875f, +0.004258f, +0.006322f, -0.001393f, + +0.002084f, +0.001489f, -0.004045f, -0.003938f, +0.001968f, +0.004609f, -0.002659f, +0.001504f, -0.000207f, +0.000912f, + -0.001236f, +0.003650f, +0.003137f, +0.004409f, +0.001802f, +0.000707f, +0.000238f, -0.000628f, +0.001862f, +0.000488f, + -0.000741f, -0.001338f, -0.000057f, -0.000222f, +0.001131f, +0.000136f, +0.000558f, +0.000099f, +0.000872f, -0.000405f, + +0.000434f, -0.000008f, -0.001652f, -0.000051f, +0.000278f, +0.000686f, +0.000649f, +0.000416f, +0.000028f, +0.000260f, + +0.000107f, -0.000451f, +0.000347f, -0.000473f, +0.000282f, -0.000466f, -0.000052f, -0.000486f, -0.000181f, -0.000432f, + -0.000560f, +0.000064f, -0.000176f, -0.000301f, +0.000067f, +0.000472f + }, + { + +0.001673f, +0.000877f, +0.004568f, -0.008003f, +0.001078f, +0.003304f, -0.000523f, -0.002181f, +0.006622f, -0.000228f, + +0.003512f, -0.007671f, +0.003163f, -0.042119f, +0.065898f, +0.001006f, -0.007356f, +0.002448f, +0.006812f, +0.002300f, + -0.002012f, -0.001155f, -0.003889f, -0.003445f, +0.006622f, +0.000990f, -0.007814f, -0.007873f, +0.001659f, +0.008480f, + +0.004271f, +0.000058f, -0.010461f, +0.002667f, +0.001981f, -0.000521f, -0.003636f, +0.001921f, -0.006809f, +0.001563f, + -0.001440f, +0.000202f, +0.001805f, -0.001491f, +0.002133f, +0.001799f, +0.000265f, -0.000245f, -0.001438f, +0.001916f, + +0.001971f, +0.000226f, -0.001735f, +0.000057f, -0.000932f, -0.001373f, +0.000089f, -0.000207f, -0.000596f, -0.000298f, + -0.001264f, +0.000927f, +0.001642f, -0.001221f, -0.000190f, +0.000240f, -0.001098f, +0.001129f, +0.000761f, -0.000275f, + +0.001262f, +0.000134f, +0.000023f, -0.000072f, +0.000926f, +0.000760f, -0.000673f, +0.000272f, -0.000516f, -0.000300f, + +0.000150f, -0.000104f, -0.000257f, +0.000209f, -0.000019f, +0.000031f, -0.000715f, +0.000120f, -0.000202f, +0.000092f, + -0.000110f, +0.000031f, +0.000052f, -0.000280f, -0.000405f, -0.000204f + } + }, + { + { + +0.019472f, +0.240624f, +0.021662f, -0.013335f, -0.001718f, +0.003957f, -0.002222f, +0.004402f, -0.000145f, +0.003624f, + -0.006208f, -0.007645f, +0.003730f, -0.000687f, -0.004800f, +0.021552f, -0.016223f, +0.002616f, +0.016873f, -0.004880f, + +0.001393f, -0.007172f, +0.002946f, -0.012348f, +0.009918f, +0.002611f, -0.004933f, -0.008744f, -0.001898f, -0.002955f, + -0.000201f, +0.000633f, -0.007519f, -0.001976f, +0.003858f, -0.005711f, +0.001514f, -0.001650f, -0.002413f, -0.002077f, + +0.004942f, +0.005153f, -0.002429f, +0.007533f, -0.000550f, -0.000472f, -0.001198f, -0.000365f, -0.003544f, -0.001274f, + +0.002152f, +0.000592f, -0.001531f, -0.000702f, +0.003276f, -0.000598f, -0.001634f, +0.000885f, +0.001412f, -0.003051f, + +0.001714f, +0.000331f, -0.002164f, +0.000017f, +0.000182f, -0.000637f, -0.000468f, -0.000540f, -0.000049f, -0.001118f, + +0.000893f, +0.000419f, -0.000594f, +0.001437f, +0.000395f, +0.000940f, -0.000303f, +0.000308f, +0.000003f, +0.000438f, + -0.000410f, -0.000503f, +0.000906f, +0.000138f, +0.000036f, -0.000491f, -0.000275f, -0.000232f, -0.000513f, -0.000073f, + +0.000233f, -0.000245f, +0.000200f, +0.000014f, +0.000071f, -0.000121f + }, + { + -0.001030f, +0.128667f, +0.025113f, -0.000727f, -0.005801f, +0.001068f, -0.001643f, +0.002243f, +0.006203f, +0.002749f, + +0.002542f, -0.000534f, -0.001392f, +0.001853f, -0.018280f, +0.007193f, +0.011594f, -0.009084f, +0.026408f, -0.003343f, + -0.017795f, -0.002550f, +0.000773f, -0.005023f, +0.001504f, +0.001020f, -0.005936f, +0.004519f, -0.001904f, -0.004103f, + +0.003156f, +0.012558f, +0.001805f, -0.001919f, -0.006662f, -0.002767f, -0.001015f, +0.001224f, -0.001267f, +0.003815f, + +0.003156f, +0.004703f, -0.003686f, -0.001931f, -0.002378f, -0.002764f, +0.000213f, +0.003298f, +0.000151f, +0.002157f, + +0.001998f, +0.001175f, +0.000637f, -0.000409f, -0.001136f, -0.001009f, -0.001593f, +0.000857f, +0.002004f, +0.000715f, + -0.000929f, +0.001374f, -0.000402f, +0.000870f, -0.000018f, +0.000308f, -0.001008f, +0.001250f, +0.000389f, +0.000028f, + -0.000507f, -0.000276f, -0.000371f, +0.000494f, -0.000542f, +0.000235f, +0.000326f, -0.000539f, +0.000695f, +0.000017f, + -0.000293f, -0.000350f, +0.000159f, -0.001132f, -0.000464f, -0.000178f, -0.000398f, +0.000389f, +0.000093f, -0.000125f, + +0.000125f, -0.000137f, -0.000288f, +0.000482f, -0.000190f, +0.000295f + }, + { + -0.003593f, -0.237278f, +0.041739f, +0.016958f, +0.010643f, +0.010813f, +0.000113f, -0.001569f, -0.002282f, +0.001939f, + -0.000061f, +0.003412f, +0.013053f, +0.001377f, +0.010677f, -0.005042f, -0.011525f, -0.017360f, -0.000922f, -0.005035f, + -0.001090f, -0.012240f, -0.007998f, -0.006965f, -0.009947f, +0.000872f, -0.013231f, -0.008819f, +0.001845f, +0.005565f, + +0.002244f, +0.008794f, -0.001279f, +0.000824f, +0.007999f, +0.000115f, +0.002107f, -0.002732f, -0.001984f, +0.003978f, + -0.003004f, -0.006817f, +0.001001f, +0.004639f, +0.001544f, +0.000017f, -0.003912f, +0.000256f, +0.000610f, +0.000879f, + +0.001241f, -0.000354f, +0.000593f, -0.000306f, -0.000060f, +0.001245f, -0.001734f, -0.002420f, +0.000110f, +0.000148f, + +0.000222f, +0.001246f, +0.000760f, +0.000069f, -0.000034f, -0.000927f, +0.001019f, -0.000405f, +0.001141f, +0.001006f, + +0.000551f, -0.000441f, -0.000883f, +0.000596f, +0.000650f, +0.000001f, -0.001220f, +0.000385f, -0.000601f, -0.000553f, + -0.000297f, -0.000009f, +0.000021f, -0.000288f, +0.000132f, -0.000292f, -0.000052f, +0.000057f, -0.000257f, -0.000060f, + -0.000023f, +0.000097f, -0.000498f, -0.000010f, +0.000074f, -0.000101f + }, + { + +0.056824f, +0.205353f, -0.019375f, +0.031804f, +0.000898f, -0.002004f, +0.004076f, +0.004434f, +0.001843f, -0.000163f, + +0.001790f, -0.001099f, +0.002801f, -0.011996f, +0.006056f, +0.000219f, -0.007007f, +0.008445f, +0.008610f, -0.000782f, + -0.000745f, -0.009022f, -0.006873f, -0.000831f, +0.001388f, -0.004167f, -0.005775f, -0.000378f, +0.001450f, -0.001559f, + +0.007536f, -0.001943f, -0.001309f, +0.000920f, -0.000359f, -0.000535f, +0.001585f, -0.001449f, +0.000137f, +0.000977f, + -0.001422f, -0.001948f, +0.001021f, -0.001187f, -0.002542f, +0.000783f, +0.000902f, -0.001974f, -0.001461f, -0.001639f, + +0.000312f, +0.001775f, -0.002608f, +0.001623f, +0.000226f, -0.001140f, +0.000898f, -0.000230f, -0.000805f, +0.002690f, + -0.001282f, -0.000210f, +0.000476f, +0.000936f, -0.000142f, -0.000399f, -0.000079f, +0.000498f, +0.000338f, -0.000145f, + -0.000327f, -0.000771f, -0.000809f, +0.000158f, +0.000448f, +0.000336f, -0.000771f, +0.000124f, -0.000561f, +0.000248f, + -0.000713f, -0.000769f, +0.000073f, +0.000502f, +0.000044f, -0.000102f, -0.000188f, -0.000020f, -0.000233f, +0.000099f, + +0.000036f, -0.000037f, -0.000125f, +0.000174f, -0.000148f, +0.000001f + }, + { + -0.000119f, +0.046121f, -0.012649f, +0.001216f, -0.001989f, +0.001731f, -0.000644f, +0.001490f, +0.000994f, +0.001665f, + -0.006856f, +0.003637f, +0.003454f, +0.011655f, -0.007862f, +0.003145f, -0.003688f, -0.000094f, +0.026662f, +0.002410f, + +0.006181f, -0.007025f, +0.005433f, +0.000748f, -0.004245f, -0.007033f, +0.002245f, -0.006185f, -0.000243f, -0.000005f, + +0.001026f, -0.001015f, -0.002613f, +0.014074f, -0.001093f, -0.009043f, -0.002332f, -0.004715f, +0.002631f, -0.001831f, + -0.001358f, +0.000030f, +0.000416f, +0.000022f, +0.004246f, +0.000420f, +0.000454f, -0.002436f, +0.002447f, +0.000111f, + -0.001158f, +0.002385f, -0.000771f, -0.000252f, -0.000867f, +0.002738f, -0.001360f, +0.000848f, -0.000154f, -0.000945f, + -0.001801f, +0.000712f, +0.000092f, +0.000810f, +0.001993f, -0.000464f, -0.000447f, +0.000596f, +0.000716f, +0.000035f, + +0.000859f, +0.000225f, -0.000623f, +0.000635f, +0.000929f, -0.000644f, -0.000200f, +0.000617f, -0.000881f, -0.000915f, + +0.000029f, +0.000148f, +0.000209f, -0.000038f, -0.000104f, -0.000287f, -0.000389f, -0.000197f, -0.000303f, +0.000378f, + -0.000115f, +0.000007f, +0.000374f, -0.000089f, -0.000399f, -0.000058f + }, + { + +0.061710f, +0.459021f, -0.008219f, -0.000427f, -0.009419f, +0.003125f, -0.001138f, +0.008910f, +0.001018f, +0.000939f, + +0.000742f, -0.000167f, -0.003816f, -0.002490f, -0.000955f, -0.004903f, -0.004545f, -0.004420f, +0.002030f, -0.000441f, + -0.002941f, +0.001223f, -0.001517f, +0.001398f, +0.001750f, +0.004128f, +0.001493f, +0.009362f, +0.001292f, -0.002391f, + -0.003440f, +0.004238f, +0.001226f, -0.008725f, +0.003838f, -0.000800f, +0.004620f, -0.001569f, +0.002015f, +0.001901f, + +0.001343f, +0.007603f, +0.003776f, +0.002292f, +0.002149f, -0.000736f, -0.001599f, -0.002628f, +0.001026f, -0.000084f, + +0.001676f, -0.002041f, +0.000126f, +0.001677f, -0.001510f, -0.001182f, -0.002691f, -0.000632f, +0.000116f, +0.000003f, + +0.000116f, -0.000174f, -0.000453f, +0.000524f, +0.001289f, -0.000338f, +0.000262f, -0.000361f, -0.000166f, +0.000872f, + -0.000003f, +0.001464f, -0.000062f, -0.000223f, +0.000472f, -0.000581f, +0.000498f, +0.000310f, +0.000362f, -0.000066f, + +0.000965f, +0.000430f, +0.000060f, -0.000551f, -0.000069f, -0.000120f, +0.000331f, -0.000743f, +0.000240f, +0.000052f, + -0.000181f, -0.000328f, +0.000106f, +0.000299f, -0.000196f, -0.000095f + }, + { + +0.000079f, -0.009558f, +0.009574f, -0.000205f, +0.001823f, -0.000136f, +0.000795f, -0.000812f, +0.000964f, +0.001582f, + +0.002549f, +0.003768f, -0.004162f, +0.011337f, -0.011019f, +0.004279f, +0.000819f, +0.011469f, +0.002057f, -0.025572f, + -0.001702f, -0.009345f, +0.002315f, +0.022006f, -0.006381f, +0.001257f, +0.004327f, +0.014649f, -0.001401f, +0.001652f, + -0.000835f, +0.002595f, -0.002791f, -0.001136f, +0.000544f, -0.004393f, +0.002361f, -0.002313f, +0.002911f, +0.000411f, + +0.000298f, -0.002470f, +0.001423f, +0.001603f, +0.000255f, +0.002715f, -0.001577f, -0.000862f, +0.001494f, +0.000807f, + -0.001638f, -0.000897f, +0.000750f, +0.002196f, -0.000740f, -0.001159f, -0.002361f, -0.000325f, +0.000084f, -0.002714f, + +0.000672f, -0.000265f, -0.000505f, -0.000362f, +0.000990f, -0.000702f, -0.000787f, -0.000257f, -0.000410f, +0.000612f, + -0.000154f, -0.000198f, +0.000087f, -0.000718f, +0.000879f, +0.000650f, -0.000144f, -0.000553f, -0.000413f, +0.000844f, + -0.000108f, +0.000756f, +0.000174f, +0.000003f, -0.000375f, +0.000001f, -0.000473f, +0.000011f, +0.000233f, +0.000396f, + +0.000639f, -0.000002f, -0.000250f, +0.000050f, +0.000165f, -0.000216f + }, + { + -0.049538f, -0.411099f, -0.006845f, +0.015602f, -0.002685f, -0.003569f, +0.005830f, -0.003942f, +0.003327f, -0.000752f, + -0.002352f, +0.007557f, +0.002514f, +0.002693f, +0.000997f, +0.006103f, +0.005308f, +0.006237f, +0.005281f, -0.001619f, + +0.000664f, -0.001510f, +0.000185f, +0.006654f, +0.001054f, -0.006902f, +0.007485f, -0.000974f, +0.003133f, -0.001891f, + +0.003673f, -0.003193f, -0.000469f, +0.001079f, +0.001280f, +0.012169f, +0.010478f, +0.000454f, -0.000597f, +0.000621f, + +0.001549f, -0.004287f, -0.001511f, -0.000423f, +0.000945f, +0.001323f, -0.002703f, +0.000453f, +0.000185f, +0.000479f, + +0.003089f, -0.000553f, -0.000138f, +0.000527f, -0.001481f, +0.001220f, -0.001600f, +0.002022f, +0.000071f, -0.002333f, + -0.000319f, -0.000431f, -0.000078f, -0.000693f, -0.000613f, +0.002180f, -0.000997f, -0.001178f, -0.000728f, -0.000435f, + -0.000917f, -0.001012f, -0.000708f, -0.000169f, -0.000515f, +0.000235f, -0.000500f, -0.000351f, +0.000209f, -0.000971f, + +0.000160f, +0.000838f, -0.000494f, -0.000687f, -0.000024f, +0.000214f, +0.000113f, +0.000543f, +0.000204f, +0.000123f, + +0.000430f, +0.000050f, -0.000067f, -0.000167f, +0.000319f, -0.000290f + }, + { + +0.000571f, -0.009034f, +0.006449f, +0.002019f, +0.001191f, +0.000007f, +0.000337f, -0.002005f, -0.003664f, +0.000054f, + -0.000666f, -0.003606f, -0.006470f, -0.008362f, -0.028732f, +0.020306f, +0.002826f, -0.004422f, -0.002849f, -0.011615f, + -0.017982f, -0.004877f, -0.008116f, -0.022771f, +0.016052f, +0.012355f, -0.003768f, +0.001532f, +0.005293f, -0.003242f, + +0.002996f, +0.001959f, -0.003808f, -0.011660f, +0.003485f, +0.002066f, -0.000700f, -0.001519f, +0.007075f, +0.003336f, + -0.003537f, +0.002163f, -0.002655f, +0.000569f, +0.001463f, -0.003201f, +0.002750f, +0.000428f, -0.002554f, -0.000930f, + -0.003950f, +0.004534f, -0.001392f, -0.000079f, +0.001028f, +0.000848f, +0.000323f, +0.001994f, +0.003226f, -0.001568f, + -0.001609f, +0.001276f, -0.000816f, -0.000077f, -0.000200f, -0.001033f, +0.000834f, +0.000004f, -0.000511f, -0.001293f, + +0.001277f, -0.000205f, -0.000646f, -0.000662f, -0.000163f, +0.001164f, -0.000365f, -0.000376f, +0.000444f, +0.000328f, + -0.000305f, +0.000541f, -0.000006f, +0.000275f, +0.000153f, -0.000939f, +0.000498f, +0.000422f, +0.000176f, +0.000246f, + -0.000040f, -0.000068f, -0.000049f, +0.000198f, +0.000237f, +0.000161f + }, + { + -0.027636f, -0.016107f, +0.036620f, -0.013495f, -0.006565f, -0.015407f, +0.013729f, -0.002477f, +0.000578f, -0.001638f, + -0.002792f, +0.003478f, +0.000016f, +0.002464f, +0.007430f, +0.006593f, +0.013604f, +0.002892f, +0.000056f, -0.007828f, + +0.001452f, -0.009782f, +0.006669f, -0.001240f, +0.002614f, +0.000421f, +0.003259f, -0.002525f, +0.000578f, +0.000909f, + -0.009991f, -0.002557f, +0.004580f, -0.003450f, +0.007151f, -0.000882f, +0.003385f, -0.006364f, +0.002964f, +0.000339f, + +0.002555f, +0.001552f, +0.003615f, +0.001499f, -0.000815f, +0.003424f, +0.001118f, +0.001782f, +0.000847f, -0.001053f, + -0.000528f, -0.003002f, -0.002336f, -0.002338f, +0.002235f, -0.002019f, -0.001060f, +0.001259f, -0.000305f, +0.000396f, + -0.000245f, -0.002236f, -0.000804f, +0.001955f, -0.001567f, +0.000097f, -0.000432f, -0.000854f, +0.000466f, +0.000084f, + -0.000329f, +0.000325f, -0.001154f, +0.000215f, -0.000160f, +0.000122f, +0.000311f, +0.000529f, +0.000062f, -0.000391f, + -0.000379f, -0.000663f, +0.000520f, -0.000471f, -0.000335f, -0.000888f, +0.000056f, +0.000023f, +0.000254f, -0.000232f, + +0.000110f, -0.000012f, -0.000129f, +0.000042f, +0.000128f, -0.000195f + }, + { + -0.001201f, +0.056749f, +0.008084f, +0.003258f, -0.003442f, +0.002037f, -0.002407f, +0.006258f, +0.000305f, -0.002256f, + -0.003019f, -0.002582f, -0.002774f, -0.001812f, -0.011338f, +0.003223f, +0.001661f, +0.008485f, +0.002734f, +0.015193f, + +0.000401f, +0.012170f, -0.007348f, -0.011257f, -0.001747f, +0.005971f, +0.008973f, +0.013632f, +0.005202f, +0.004836f, + -0.003154f, -0.005703f, +0.004706f, -0.000148f, +0.005337f, -0.003073f, -0.000523f, -0.000772f, +0.001068f, -0.003590f, + +0.001488f, -0.001357f, +0.001321f, +0.002338f, +0.001678f, -0.003274f, +0.001088f, +0.000396f, -0.000090f, +0.000022f, + +0.001648f, -0.000763f, -0.000939f, +0.000412f, -0.000288f, +0.001092f, -0.000220f, -0.000573f, +0.000808f, +0.000001f, + +0.000859f, +0.001110f, +0.001269f, +0.000217f, +0.000917f, +0.000433f, +0.000892f, +0.000287f, +0.000929f, -0.001275f, + -0.000621f, +0.000427f, +0.000659f, +0.000161f, -0.000183f, +0.000032f, -0.000134f, -0.000191f, -0.000342f, -0.000112f, + +0.000186f, -0.000613f, -0.000640f, +0.000085f, +0.000058f, -0.000364f, +0.000457f, +0.000052f, -0.000292f, +0.000336f, + -0.000410f, -0.000024f, -0.000303f, -0.000201f, +0.000037f, -0.000126f + }, + { + -0.028152f, -0.123977f, +0.020673f, -0.010058f, -0.006564f, +0.000960f, +0.002475f, +0.001081f, -0.004086f, +0.000976f, + -0.002195f, +0.004449f, -0.014236f, +0.002004f, +0.019005f, -0.005346f, -0.006880f, -0.003944f, +0.001393f, -0.004336f, + +0.005281f, +0.000985f, +0.003047f, +0.001563f, +0.006878f, -0.001640f, +0.005246f, +0.003718f, -0.005053f, -0.005001f, + -0.000435f, +0.001847f, +0.003456f, -0.002158f, +0.000288f, -0.007272f, -0.001078f, +0.002235f, -0.007387f, +0.001138f, + -0.000849f, +0.001770f, +0.006375f, -0.004358f, -0.000209f, +0.001627f, +0.000691f, +0.002199f, -0.000213f, -0.002088f, + -0.000910f, +0.001164f, -0.001367f, +0.001682f, +0.001163f, +0.000866f, +0.000686f, +0.000368f, +0.002588f, -0.000564f, + -0.002487f, +0.000354f, +0.000427f, -0.000095f, +0.000432f, +0.001075f, +0.000672f, -0.001252f, +0.001299f, -0.001157f, + -0.000029f, +0.000389f, -0.000030f, -0.000031f, +0.000383f, -0.000875f, -0.000201f, +0.000027f, -0.000080f, -0.000475f, + -0.000414f, -0.000183f, +0.000053f, +0.000321f, +0.000271f, +0.000274f, +0.000213f, -0.000430f, +0.000002f, +0.000144f, + +0.000097f, -0.000388f, -0.000441f, -0.000096f, -0.000234f, +0.000125f + }, + { + +0.001223f, +0.002413f, +0.001148f, -0.002895f, +0.008093f, +0.000506f, +0.000354f, +0.004479f, -0.001719f, +0.002658f, + -0.001096f, +0.016463f, +0.017689f, +0.055144f, +0.014727f, +0.019035f, +0.000323f, +0.001101f, +0.005963f, -0.004200f, + -0.007059f, -0.030404f, -0.016798f, +0.014731f, +0.016969f, -0.004145f, +0.007816f, +0.003379f, +0.004128f, -0.005539f, + -0.005690f, +0.000351f, +0.001947f, -0.002895f, -0.002679f, -0.006155f, -0.004815f, +0.002608f, -0.003403f, +0.002220f, + +0.001287f, +0.002531f, +0.003709f, +0.000829f, -0.001897f, -0.000505f, +0.004287f, +0.000538f, -0.003728f, -0.002711f, + -0.003473f, -0.001225f, +0.000662f, -0.000261f, +0.000826f, +0.002072f, +0.000745f, +0.000549f, +0.001031f, -0.000170f, + -0.000312f, +0.000084f, -0.000917f, +0.001082f, +0.000019f, +0.000154f, +0.000370f, +0.000488f, -0.000665f, -0.000130f, + -0.000218f, +0.000885f, -0.000277f, +0.000376f, -0.000201f, +0.000048f, +0.000499f, +0.000053f, -0.000048f, -0.000651f, + -0.000267f, -0.000432f, -0.000024f, -0.000151f, +0.000333f, +0.000497f, -0.000250f, +0.000714f, -0.000219f, +0.000221f, + -0.000114f, +0.000422f, +0.000069f, -0.000245f, -0.000005f, +0.000112f + }, + { + -0.035312f, -0.021394f, +0.003262f, -0.007246f, +0.001445f, -0.007423f, +0.002126f, -0.006848f, +0.007667f, -0.005686f, + -0.002883f, -0.003015f, +0.014628f, -0.015745f, -0.022033f, +0.009237f, -0.002473f, -0.002706f, -0.009571f, -0.000645f, + -0.001832f, -0.003163f, +0.000324f, +0.007454f, +0.002289f, -0.000562f, +0.000505f, +0.002758f, -0.005534f, +0.005445f, + +0.003261f, +0.002213f, -0.001240f, -0.002102f, +0.005233f, -0.001444f, -0.005087f, +0.002852f, +0.000580f, -0.004506f, + +0.002708f, -0.000839f, -0.002727f, +0.000164f, +0.000941f, +0.004267f, -0.003358f, +0.001654f, +0.001686f, -0.000669f, + -0.002394f, +0.001309f, +0.001283f, -0.000023f, -0.001032f, +0.000485f, -0.001292f, -0.001630f, +0.001942f, +0.000964f, + +0.000194f, -0.001387f, -0.000283f, -0.000495f, -0.000127f, -0.000897f, -0.000304f, -0.000118f, +0.001272f, -0.000116f, + -0.000651f, -0.000217f, -0.001703f, +0.000203f, +0.000768f, +0.000368f, -0.000493f, +0.000220f, +0.000103f, +0.000216f, + -0.000098f, -0.000575f, +0.000229f, -0.000910f, -0.000044f, +0.000020f, -0.000066f, -0.000531f, +0.000100f, -0.000317f, + -0.000348f, +0.000560f, +0.000302f, +0.000067f, -0.000031f, +0.000160f + }, + { + -0.001216f, -0.004061f, +0.005499f, -0.003523f, +0.004052f, +0.000113f, -0.004447f, -0.007396f, +0.003607f, +0.005804f, + +0.004396f, -0.011291f, -0.001639f, -0.023426f, +0.094695f, +0.001740f, -0.005765f, +0.008678f, +0.017115f, -0.006365f, + -0.010238f, +0.005348f, +0.003189f, -0.014844f, +0.002271f, +0.007640f, -0.006385f, -0.006469f, -0.000830f, +0.003079f, + +0.002786f, -0.000642f, -0.009722f, +0.009776f, +0.008188f, +0.002916f, -0.000804f, +0.006065f, -0.005026f, -0.000591f, + +0.000317f, +0.002702f, +0.002477f, +0.001818f, +0.000246f, -0.001189f, -0.002151f, -0.002236f, +0.000482f, +0.005291f, + +0.001705f, -0.000583f, -0.001510f, -0.000894f, -0.000298f, +0.000578f, +0.001094f, +0.000196f, +0.000344f, +0.000626f, + -0.001268f, -0.000544f, +0.001863f, -0.000099f, +0.000833f, +0.001122f, -0.001893f, -0.000742f, +0.000041f, -0.000604f, + +0.000170f, -0.000616f, -0.000197f, -0.000650f, +0.000164f, +0.000905f, -0.000757f, +0.000548f, -0.000410f, -0.000217f, + +0.000199f, +0.000117f, -0.000093f, -0.000195f, -0.000345f, +0.000332f, -0.000414f, +0.000184f, +0.000132f, +0.000256f, + -0.000132f, +0.000135f, +0.000027f, +0.000123f, +0.000019f, -0.000008f + } + }, + { + { + -0.021786f, +0.176761f, +0.089323f, -0.027304f, +0.003482f, +0.003748f, +0.000107f, +0.005796f, +0.000819f, -0.001381f, + -0.009910f, -0.007117f, +0.004740f, -0.003710f, +0.008595f, +0.001620f, -0.000141f, +0.003203f, -0.000541f, +0.007763f, + -0.002018f, -0.006497f, -0.005436f, +0.001320f, +0.003070f, +0.002593f, -0.006432f, -0.007723f, -0.006485f, +0.003178f, + -0.006552f, +0.001476f, -0.002954f, -0.002002f, +0.001136f, -0.004620f, -0.001165f, -0.001210f, +0.001546f, -0.002140f, + +0.004185f, +0.002628f, +0.002153f, +0.001098f, +0.000595f, +0.000472f, +0.000798f, -0.002434f, -0.003298f, -0.001321f, + +0.004252f, +0.001005f, -0.003600f, +0.000237f, +0.001269f, +0.001684f, -0.001616f, -0.000213f, -0.001042f, -0.000725f, + +0.001374f, -0.000488f, -0.001095f, +0.000476f, -0.001132f, -0.000546f, -0.000785f, +0.000090f, -0.000657f, -0.000199f, + +0.000023f, +0.000805f, -0.000648f, +0.000789f, +0.000786f, +0.000043f, +0.000112f, +0.000158f, +0.000561f, +0.000521f, + -0.000182f, -0.000415f, +0.000506f, -0.000119f, +0.000098f, -0.000190f, -0.000396f, -0.000148f, -0.000600f, +0.000064f, + +0.000090f, +0.000020f, -0.000150f, +0.000187f, +0.000058f, +0.000042f + }, + { + +0.002562f, +0.105923f, +0.035805f, -0.005124f, +0.002769f, -0.001022f, -0.000249f, +0.001676f, +0.008023f, +0.004218f, + -0.003749f, +0.001093f, -0.000280f, -0.006607f, -0.016731f, +0.022520f, +0.000818f, +0.009642f, +0.003067f, -0.005311f, + -0.013908f, -0.007034f, +0.001081f, -0.004406f, +0.003225f, -0.003953f, -0.002452f, +0.005924f, -0.005893f, +0.002695f, + -0.004538f, +0.013398f, +0.002791f, -0.003188f, -0.000584f, -0.007511f, +0.001389f, +0.002170f, +0.001828f, +0.002171f, + +0.002101f, +0.003716f, -0.003047f, -0.002711f, -0.001105f, -0.000497f, +0.000713f, +0.001913f, +0.000540f, +0.001160f, + +0.003282f, +0.001638f, +0.000919f, -0.000776f, -0.000523f, -0.002896f, -0.000492f, +0.000516f, +0.000992f, +0.001575f, + +0.001509f, -0.000744f, +0.000343f, -0.000581f, +0.001098f, -0.000261f, -0.000397f, +0.000962f, +0.000166f, -0.000243f, + +0.000918f, -0.000543f, -0.000555f, -0.000006f, +0.000213f, -0.000026f, +0.000050f, -0.000085f, +0.000011f, +0.000128f, + -0.000368f, -0.000082f, -0.000369f, -0.000495f, -0.000371f, +0.000144f, +0.000191f, -0.000270f, +0.000036f, -0.000170f, + -0.000340f, -0.000136f, +0.000241f, +0.000417f, +0.000136f, -0.000082f + }, + { + +0.005625f, -0.095492f, -0.074637f, +0.014469f, +0.013916f, +0.012782f, -0.001460f, -0.002938f, +0.000797f, -0.003086f, + +0.010501f, +0.001960f, +0.001698f, +0.008690f, +0.007984f, -0.000709f, -0.005238f, -0.023311f, -0.008023f, -0.000726f, + -0.012530f, -0.008245f, -0.012111f, +0.003683f, -0.005293f, -0.008183f, -0.007966f, -0.007162f, -0.001739f, +0.004309f, + +0.006302f, +0.003590f, +0.000661f, +0.003080f, -0.002051f, +0.001472f, +0.004827f, -0.005284f, +0.000998f, -0.001153f, + -0.003884f, -0.002252f, -0.001598f, +0.001773f, +0.001863f, +0.002513f, -0.003848f, -0.000781f, +0.001799f, -0.000264f, + +0.001088f, +0.000650f, +0.000576f, -0.000078f, -0.000084f, +0.001292f, -0.001067f, -0.001624f, +0.000050f, -0.000124f, + -0.000751f, +0.002556f, +0.000955f, +0.000138f, -0.000995f, +0.001057f, -0.001487f, +0.001019f, +0.000576f, +0.001474f, + -0.000007f, +0.000032f, -0.000334f, +0.000095f, +0.000187f, -0.000030f, -0.000598f, -0.000181f, -0.000460f, -0.000207f, + -0.000850f, +0.000229f, +0.000004f, -0.000478f, +0.000301f, -0.000118f, +0.000404f, -0.000456f, -0.000016f, -0.000295f, + -0.000001f, -0.000040f, -0.000543f, -0.000262f, +0.000050f, +0.000099f + }, + { + -0.026104f, +0.285162f, +0.006503f, +0.028130f, +0.004889f, -0.000785f, +0.003873f, -0.000282f, +0.003193f, +0.002503f, + -0.001757f, +0.003805f, -0.001744f, -0.001134f, -0.006057f, -0.005455f, +0.006608f, +0.009660f, +0.003305f, -0.002027f, + -0.001695f, -0.006917f, -0.004833f, -0.001588f, -0.001282f, -0.001923f, -0.005090f, +0.001343f, -0.001386f, +0.004466f, + +0.001243f, -0.003961f, +0.000420f, +0.002316f, +0.002569f, -0.001964f, +0.001043f, -0.000577f, +0.000236f, +0.004065f, + -0.003955f, -0.000234f, -0.002333f, +0.001483f, +0.000666f, -0.001040f, -0.001377f, -0.001720f, -0.000076f, -0.002704f, + +0.001668f, -0.000547f, -0.001993f, +0.000664f, +0.001601f, +0.000512f, +0.000307f, -0.000014f, -0.001125f, +0.001738f, + +0.000751f, -0.000407f, +0.000031f, +0.000295f, +0.000371f, +0.000037f, -0.000337f, +0.000960f, -0.000003f, +0.000049f, + -0.000339f, -0.000774f, -0.001233f, -0.000221f, +0.001210f, +0.000056f, -0.000104f, -0.000163f, -0.000600f, +0.000096f, + -0.000381f, -0.000260f, -0.000221f, +0.000359f, +0.000192f, -0.000376f, -0.000144f, -0.000002f, -0.000528f, +0.000170f, + +0.000188f, +0.000107f, -0.000042f, -0.000169f, +0.000202f, -0.000262f + }, + { + -0.000946f, +0.016452f, +0.008457f, -0.000542f, +0.001055f, -0.000517f, +0.001041f, +0.001025f, +0.002280f, -0.000082f, + -0.003593f, +0.002688f, +0.006890f, +0.001251f, +0.012186f, -0.014022f, -0.001570f, +0.041645f, -0.042072f, +0.014227f, + +0.009964f, -0.002155f, +0.000356f, -0.007523f, -0.009307f, -0.001476f, -0.001585f, +0.002241f, -0.000785f, +0.006733f, + -0.004467f, -0.000116f, -0.002263f, +0.008796f, +0.002294f, -0.005542f, -0.003244f, +0.000150f, +0.002167f, -0.000199f, + -0.003726f, +0.000373f, -0.002552f, -0.000392f, +0.004170f, +0.002878f, -0.001403f, +0.001426f, -0.000153f, +0.002103f, + -0.002043f, +0.000470f, +0.001785f, -0.002828f, +0.000719f, +0.001282f, +0.002039f, +0.000498f, -0.001440f, -0.000554f, + -0.000283f, -0.000353f, -0.000224f, +0.001970f, +0.001544f, +0.001000f, -0.000156f, +0.000398f, +0.000601f, +0.000089f, + -0.000046f, +0.000536f, -0.000445f, +0.000655f, +0.000567f, +0.000393f, -0.000778f, +0.000416f, -0.000063f, -0.000677f, + +0.000097f, -0.000084f, -0.000076f, +0.000095f, -0.000134f, -0.000702f, +0.000220f, -0.000346f, -0.000143f, +0.000335f, + -0.000155f, +0.000457f, +0.000054f, -0.000111f, -0.000323f, +0.000004f + }, + { + -0.014720f, +0.563568f, -0.011558f, -0.012793f, +0.007445f, -0.001774f, +0.000926f, +0.007073f, +0.001004f, +0.000886f, + +0.007768f, -0.005160f, +0.000504f, -0.003486f, +0.001380f, +0.000685f, -0.013127f, -0.002460f, +0.002602f, -0.002479f, + +0.000019f, -0.001300f, +0.003225f, -0.002010f, +0.001893f, +0.002114f, +0.003968f, +0.006390f, +0.001474f, -0.003649f, + +0.000618f, +0.002985f, -0.003679f, -0.003560f, -0.000722f, +0.002138f, +0.003035f, +0.001656f, +0.002336f, +0.002467f, + +0.005820f, +0.002426f, +0.006592f, +0.003138f, -0.004454f, +0.001493f, -0.005312f, +0.002357f, -0.000433f, -0.001311f, + +0.001151f, -0.001630f, +0.002059f, -0.000767f, -0.000668f, -0.001825f, -0.001402f, -0.001006f, +0.000954f, -0.000074f, + -0.001167f, +0.000623f, +0.000407f, +0.000562f, +0.000300f, +0.000601f, +0.000022f, +0.000032f, +0.000132f, +0.000277f, + +0.001071f, +0.000408f, +0.000919f, +0.000041f, -0.000478f, -0.000025f, +0.000402f, -0.000207f, +0.000021f, +0.000881f, + +0.000529f, +0.000480f, -0.000593f, -0.000306f, -0.000190f, +0.000483f, -0.000300f, -0.000472f, +0.000326f, -0.000163f, + -0.000120f, -0.000446f, +0.000396f, -0.000258f, +0.000061f, -0.000168f + }, + { + -0.000542f, +0.008396f, -0.000594f, +0.000509f, +0.001645f, -0.000011f, +0.000166f, -0.000205f, +0.000881f, +0.001637f, + +0.001767f, +0.000699f, +0.005352f, -0.005131f, +0.000313f, +0.008300f, +0.004305f, -0.004114f, -0.004549f, -0.013147f, + +0.001533f, -0.000978f, +0.012640f, +0.001668f, -0.004872f, +0.000305f, +0.006930f, +0.009442f, -0.001501f, +0.000590f, + -0.002734f, +0.003233f, +0.001086f, -0.002386f, -0.002730f, -0.002711f, +0.002643f, -0.001333f, -0.000306f, +0.003734f, + -0.000938f, -0.003588f, +0.004142f, +0.002567f, -0.002609f, +0.001470f, +0.000864f, -0.000685f, +0.000794f, -0.001573f, + +0.000298f, -0.001480f, +0.000537f, +0.001958f, -0.000907f, +0.000622f, -0.002973f, +0.000582f, +0.000155f, -0.002705f, + -0.000252f, -0.000624f, -0.001332f, +0.000280f, +0.001476f, -0.001959f, -0.001100f, +0.000224f, +0.000174f, +0.000588f, + -0.000423f, -0.000491f, -0.000026f, -0.000028f, +0.000654f, +0.000293f, +0.000217f, -0.000353f, -0.000019f, +0.000622f, + -0.000013f, +0.000205f, +0.000437f, -0.000250f, -0.000170f, -0.000110f, +0.000035f, -0.000315f, +0.000120f, +0.000384f, + +0.000210f, +0.000005f, -0.000094f, -0.000007f, +0.000060f, -0.000119f + }, + { + +0.019229f, -0.449954f, -0.040939f, +0.002016f, +0.003914f, +0.000321f, +0.002838f, +0.002978f, -0.000212f, -0.002471f, + +0.001932f, +0.003210f, +0.002791f, -0.006634f, +0.011913f, +0.008149f, +0.003835f, +0.004855f, +0.004202f, -0.000224f, + -0.002712f, +0.002363f, +0.003210f, +0.005674f, +0.000192f, -0.004820f, +0.002994f, +0.001696f, +0.002729f, +0.002754f, + -0.000356f, -0.004319f, +0.003749f, -0.004230f, +0.006776f, +0.015034f, +0.004691f, +0.003161f, -0.002232f, +0.005917f, + -0.002274f, -0.002643f, -0.004096f, +0.000241f, +0.001517f, +0.001025f, -0.000272f, -0.003706f, +0.001515f, +0.002942f, + +0.002159f, +0.000398f, +0.000841f, -0.003598f, +0.001308f, +0.000343f, -0.000579f, +0.000837f, -0.001139f, +0.000273f, + -0.001414f, -0.000082f, -0.000521f, -0.001536f, +0.000798f, +0.001324f, -0.001267f, -0.000381f, -0.000431f, -0.001020f, + -0.000916f, -0.001205f, +0.000430f, -0.000336f, -0.000366f, -0.000288f, +0.000151f, -0.000024f, -0.000246f, -0.000853f, + +0.000633f, -0.000100f, -0.000250f, -0.000704f, +0.000021f, +0.000172f, +0.000148f, +0.000723f, -0.000132f, +0.000441f, + +0.000214f, +0.000028f, -0.000281f, +0.000354f, -0.000284f, +0.000087f + }, + { + -0.001750f, +0.014403f, -0.004793f, -0.002429f, +0.002633f, -0.000307f, -0.000861f, -0.001136f, -0.000948f, -0.001200f, + -0.001160f, -0.002523f, -0.001458f, -0.010578f, -0.023322f, +0.002030f, -0.001870f, +0.020105f, -0.016345f, -0.012467f, + -0.017346f, +0.000117f, -0.011513f, -0.007499f, +0.006621f, +0.006332f, +0.006192f, -0.001871f, -0.003221f, +0.003961f, + +0.002468f, -0.001022f, -0.002049f, -0.007263f, -0.000039f, +0.004870f, -0.004045f, -0.000728f, +0.004954f, +0.004355f, + -0.000887f, -0.001104f, -0.001569f, +0.003774f, -0.000285f, -0.001729f, +0.000716f, -0.001231f, +0.000839f, -0.003590f, + -0.001078f, +0.001585f, -0.000686f, -0.000570f, +0.001526f, +0.000846f, +0.000210f, +0.003163f, +0.001685f, -0.000845f, + -0.000299f, -0.001169f, -0.000376f, -0.000103f, +0.000124f, -0.001735f, +0.000175f, -0.000840f, -0.000451f, +0.000509f, + +0.000446f, +0.000099f, -0.000623f, -0.000959f, +0.000669f, +0.000320f, +0.000036f, +0.000103f, +0.000189f, +0.000305f, + +0.000078f, -0.000505f, +0.000339f, -0.000261f, +0.000229f, -0.000300f, +0.000499f, +0.000338f, +0.000245f, +0.000452f, + -0.000015f, -0.000340f, +0.000070f, -0.000001f, +0.000520f, -0.000008f + }, + { + +0.023366f, +0.028432f, -0.066831f, -0.011039f, -0.000908f, -0.002685f, +0.001983f, -0.001929f, -0.002120f, +0.003373f, + +0.001429f, -0.000343f, -0.000277f, +0.002214f, +0.012468f, +0.002812f, +0.017239f, +0.009498f, -0.006305f, -0.005405f, + -0.000650f, -0.005146f, +0.001440f, +0.003377f, +0.003136f, +0.002842f, -0.000898f, -0.002835f, +0.002181f, -0.000216f, + -0.004439f, -0.003357f, +0.001019f, -0.003142f, +0.004500f, +0.005055f, +0.000396f, -0.001399f, -0.000379f, -0.001024f, + +0.005359f, +0.000089f, +0.002764f, +0.001469f, +0.000537f, +0.004565f, +0.003572f, -0.000235f, -0.001508f, +0.003434f, + -0.001875f, -0.001884f, -0.001415f, -0.001787f, -0.000760f, +0.000236f, -0.001060f, -0.000288f, -0.000241f, +0.000918f, + -0.000232f, -0.001600f, -0.000800f, +0.000899f, -0.000715f, +0.000008f, -0.001491f, +0.000115f, -0.000029f, +0.000253f, + +0.000649f, -0.000266f, -0.000936f, +0.000092f, +0.000167f, -0.000077f, +0.000294f, +0.000130f, +0.000428f, -0.000423f, + -0.000789f, -0.000383f, +0.000013f, -0.000065f, -0.000551f, -0.000084f, +0.000120f, -0.000031f, +0.000246f, +0.000143f, + -0.000220f, +0.000019f, -0.000029f, -0.000136f, +0.000055f, -0.000068f + }, + { + +0.000711f, +0.035108f, +0.022530f, +0.001603f, -0.000138f, -0.001633f, -0.001166f, +0.003876f, +0.003416f, -0.005439f, + +0.002148f, -0.004657f, -0.008707f, +0.009827f, -0.015422f, +0.006452f, +0.000030f, +0.001628f, +0.015529f, -0.005644f, + +0.008721f, +0.009472f, -0.005590f, -0.006877f, -0.004582f, +0.008794f, +0.006922f, +0.012509f, +0.007978f, +0.002299f, + -0.003942f, -0.012659f, +0.009959f, +0.002348f, -0.000144f, -0.001420f, -0.003719f, +0.003242f, -0.002277f, -0.003579f, + -0.001708f, -0.000538f, +0.004686f, +0.000344f, +0.000516f, -0.000010f, -0.002236f, +0.002803f, -0.000238f, -0.000796f, + -0.000112f, +0.000652f, -0.000280f, -0.000957f, +0.001158f, +0.000417f, -0.001253f, -0.000430f, +0.000105f, +0.000971f, + +0.001746f, +0.000005f, +0.000211f, +0.000766f, +0.000431f, +0.001159f, +0.001456f, +0.000505f, +0.000027f, +0.000315f, + -0.000724f, +0.000308f, +0.000013f, +0.000392f, +0.000057f, -0.000215f, -0.000301f, -0.000503f, -0.000290f, +0.000117f, + -0.000143f, -0.000357f, +0.000012f, -0.000630f, -0.000289f, -0.000000f, -0.000022f, +0.000293f, -0.000130f, -0.000248f, + -0.000129f, -0.000092f, -0.000280f, +0.000043f, -0.000005f, -0.000109f + }, + { + -0.000279f, -0.151715f, +0.002133f, -0.000704f, -0.010483f, -0.007623f, +0.009708f, +0.001688f, -0.004057f, -0.000797f, + -0.005257f, +0.005662f, -0.007716f, -0.002242f, +0.006599f, -0.003491f, -0.003891f, -0.002404f, -0.002559f, -0.000462f, + +0.002853f, +0.000118f, +0.004632f, +0.000832f, +0.001526f, +0.005568f, +0.004437f, +0.001809f, -0.004670f, -0.002378f, + -0.002669f, +0.001055f, +0.002950f, +0.000180f, -0.003140f, -0.008488f, -0.001007f, -0.002028f, -0.000606f, -0.002705f, + -0.000314f, +0.004821f, +0.004613f, -0.005644f, +0.001471f, -0.000464f, +0.000191f, +0.002020f, +0.002727f, -0.002775f, + -0.001539f, -0.000159f, +0.000151f, +0.001988f, +0.000264f, +0.002076f, +0.000245f, +0.001844f, +0.000448f, -0.000137f, + -0.001503f, +0.000112f, +0.000189f, +0.000436f, +0.000646f, +0.000270f, +0.000273f, -0.000933f, +0.000393f, -0.000081f, + +0.000003f, +0.000182f, +0.000375f, -0.000058f, -0.000108f, -0.000345f, -0.000247f, +0.000187f, -0.000474f, -0.000121f, + -0.000397f, -0.000248f, +0.000085f, +0.000578f, +0.000146f, +0.000440f, -0.000322f, -0.000334f, +0.000322f, -0.000037f, + +0.000058f, -0.000217f, -0.000155f, -0.000260f, -0.000107f, +0.000303f + }, + { + -0.001151f, -0.005131f, +0.001334f, +0.002063f, +0.004098f, +0.004919f, +0.003750f, -0.001220f, +0.005061f, +0.000988f, + +0.003680f, +0.009583f, -0.003100f, +0.087080f, +0.009198f, +0.015404f, +0.007391f, +0.002742f, -0.000590f, +0.003226f, + -0.007887f, -0.030028f, +0.002264f, -0.001079f, +0.003961f, +0.008311f, +0.011704f, -0.001331f, +0.001623f, -0.005471f, + -0.009905f, +0.002964f, -0.000208f, -0.002763f, -0.005571f, -0.002359f, -0.004490f, +0.000195f, +0.001160f, +0.000422f, + +0.004627f, +0.002730f, -0.000321f, +0.000852f, -0.004224f, +0.002779f, +0.003825f, +0.000681f, -0.001944f, -0.003721f, + -0.002486f, -0.001772f, +0.001797f, +0.000581f, +0.001225f, -0.000037f, +0.001188f, +0.000140f, +0.000645f, -0.000749f, + +0.000076f, -0.001010f, +0.000751f, +0.001062f, -0.000551f, +0.000137f, +0.001171f, +0.000063f, -0.001756f, -0.000184f, + -0.000214f, +0.000636f, +0.001270f, +0.000121f, -0.000758f, +0.000027f, +0.000898f, +0.000173f, -0.000663f, -0.000202f, + -0.000166f, -0.000362f, -0.000587f, -0.000101f, -0.000092f, +0.000280f, +0.000597f, +0.000399f, +0.000390f, -0.000388f, + +0.000329f, +0.000499f, -0.000204f, -0.000028f, +0.000006f, -0.000032f + }, + { + +0.023282f, -0.087935f, -0.018446f, -0.000254f, -0.002374f, +0.005155f, -0.010218f, -0.000679f, +0.000223f, -0.001798f, + +0.002243f, -0.000100f, +0.006279f, +0.002553f, -0.047127f, -0.006683f, +0.008993f, -0.001313f, -0.010365f, +0.002340f, + -0.005089f, +0.000592f, +0.000447f, +0.004739f, +0.003628f, +0.001080f, +0.001049f, +0.002101f, +0.002305f, -0.000918f, + +0.005226f, -0.000547f, -0.000532f, -0.001396f, +0.000955f, +0.000941f, -0.002582f, -0.000011f, -0.002705f, -0.004190f, + +0.001626f, +0.003294f, -0.002049f, +0.000323f, -0.001202f, +0.002224f, -0.001248f, -0.001229f, +0.001460f, -0.000364f, + +0.000150f, -0.000582f, +0.001111f, -0.001268f, -0.000917f, +0.000174f, -0.001937f, +0.000835f, -0.000034f, +0.001900f, + -0.001186f, +0.000137f, -0.000785f, -0.000825f, -0.000712f, -0.001152f, -0.001259f, +0.000282f, +0.001243f, +0.000578f, + -0.001567f, -0.000054f, -0.001392f, -0.000318f, +0.000812f, +0.000165f, -0.000098f, -0.000030f, +0.000315f, -0.000317f, + -0.000572f, +0.000118f, -0.000545f, -0.000585f, -0.000487f, +0.000706f, -0.000014f, -0.000240f, -0.000133f, -0.000125f, + -0.000243f, +0.000465f, +0.000199f, +0.000031f, +0.000310f, -0.000074f + }, + { + +0.001272f, -0.007894f, +0.004867f, -0.001392f, +0.001418f, -0.001293f, -0.003147f, -0.004966f, -0.000810f, +0.004420f, + +0.002759f, -0.002720f, -0.003317f, +0.054605f, -0.006893f, -0.005841f, +0.012914f, -0.003743f, +0.014360f, -0.010639f, + -0.005401f, +0.012287f, +0.005789f, -0.020707f, -0.005069f, +0.010213f, -0.006158f, -0.001877f, +0.000451f, +0.002591f, + -0.000947f, -0.000755f, -0.005183f, +0.008808f, +0.006269f, +0.003938f, -0.002836f, +0.002855f, +0.000751f, -0.001181f, + +0.003477f, +0.000319f, +0.003549f, +0.001517f, -0.000499f, -0.001303f, -0.001387f, -0.002248f, +0.000942f, +0.004165f, + -0.000164f, +0.001601f, -0.000240f, -0.003159f, +0.001259f, -0.000787f, +0.002437f, +0.000985f, -0.000139f, +0.000765f, + +0.000825f, -0.000848f, -0.000027f, +0.000944f, +0.000265f, +0.000274f, -0.000311f, -0.001351f, -0.000135f, -0.000608f, + -0.000310f, -0.000498f, -0.000181f, +0.000120f, -0.000089f, +0.000572f, -0.000358f, -0.000063f, -0.000226f, +0.000482f, + -0.000492f, +0.000130f, +0.000308f, -0.000476f, -0.000321f, +0.000258f, -0.000312f, +0.000090f, +0.000322f, -0.000083f, + -0.000019f, +0.000207f, -0.000045f, +0.000239f, -0.000007f, +0.000007f + } + }, + { + { + +0.019440f, +0.002091f, -0.101951f, -0.015108f, -0.003232f, -0.001833f, -0.003902f, +0.000068f, +0.001585f, +0.002243f, + -0.007184f, -0.007726f, +0.000330f, -0.005674f, +0.009512f, -0.001259f, +0.001832f, +0.004490f, -0.007475f, -0.001377f, + -0.004192f, -0.000594f, +0.000158f, +0.004237f, -0.002078f, +0.002341f, -0.000092f, +0.003031f, +0.000431f, +0.003004f, + -0.005224f, +0.000104f, -0.002580f, -0.000123f, +0.000433f, -0.001763f, +0.000113f, -0.001507f, -0.000996f, -0.003700f, + +0.003062f, -0.000772f, +0.001080f, +0.000959f, +0.001236f, +0.001969f, +0.003612f, +0.000249f, -0.000103f, -0.000805f, + +0.000468f, -0.000320f, -0.001596f, +0.001343f, +0.000100f, +0.001371f, -0.000397f, +0.000546f, -0.000076f, +0.000644f, + +0.000173f, -0.000391f, +0.000149f, +0.000842f, -0.000434f, +0.000118f, -0.000399f, +0.000466f, -0.000116f, +0.000374f, + -0.000174f, +0.000498f, -0.000572f, +0.000552f, +0.000187f, -0.000331f, +0.000165f, +0.000046f, +0.000543f, -0.000164f, + -0.000379f, -0.000085f, +0.000375f, -0.000336f, -0.000180f, +0.000121f, -0.000143f, +0.000098f, -0.000219f, +0.000151f, + -0.000041f, +0.000269f, -0.000214f, +0.000127f, +0.000113f, +0.000075f + }, + { + -0.000518f, +0.012393f, -0.040097f, -0.007977f, +0.002628f, -0.001288f, -0.000853f, -0.001374f, +0.000252f, +0.002057f, + -0.003147f, -0.001078f, -0.003822f, +0.006099f, -0.002791f, +0.011584f, -0.007033f, +0.001202f, -0.007114f, +0.001511f, + -0.000836f, -0.002650f, -0.000847f, -0.000140f, +0.006332f, -0.005513f, -0.003535f, +0.003057f, -0.005991f, +0.002371f, + -0.005815f, +0.009529f, -0.002437f, -0.003366f, +0.002936f, -0.003806f, +0.007170f, +0.003687f, +0.000507f, +0.001508f, + +0.000095f, +0.000455f, -0.001713f, +0.001192f, +0.000241f, -0.000224f, -0.000025f, -0.001255f, -0.000351f, -0.000536f, + +0.000692f, +0.000842f, +0.001400f, -0.000780f, -0.000354f, -0.000973f, +0.000192f, +0.000312f, -0.000172f, +0.000801f, + +0.001091f, -0.001278f, +0.000121f, -0.001031f, +0.001008f, -0.000216f, -0.000052f, +0.000316f, +0.000206f, -0.000112f, + +0.001053f, -0.000443f, -0.000357f, +0.000061f, +0.000024f, -0.000626f, -0.000026f, +0.000205f, -0.000368f, +0.000000f, + -0.000015f, +0.000254f, +0.000188f, +0.000116f, -0.000047f, +0.000098f, +0.000054f, -0.000244f, -0.000021f, +0.000036f, + -0.000074f, -0.000062f, +0.000214f, -0.000025f, +0.000093f, -0.000103f + }, + { + -0.009603f, +0.050413f, +0.043876f, -0.014723f, -0.015772f, +0.003756f, -0.003159f, -0.001619f, +0.002748f, -0.000759f, + +0.007562f, -0.008654f, -0.003566f, +0.004286f, -0.000820f, +0.000018f, +0.000499f, -0.017144f, -0.009450f, +0.000651f, + -0.014001f, +0.002084f, -0.003853f, +0.005215f, -0.001239f, -0.001366f, -0.000130f, -0.001928f, -0.006297f, -0.003809f, + +0.003843f, +0.000942f, -0.001473f, -0.002236f, -0.003773f, +0.004149f, +0.000504f, -0.006429f, -0.000550f, -0.003184f, + -0.001380f, +0.001032f, -0.002443f, +0.000970f, +0.000415f, +0.000910f, -0.002644f, -0.001605f, +0.000819f, +0.000331f, + +0.000535f, -0.001230f, -0.000392f, +0.000503f, -0.000229f, +0.000913f, +0.000001f, -0.000543f, -0.000177f, -0.000138f, + -0.000315f, +0.001808f, -0.000617f, -0.000284f, -0.000851f, +0.000575f, -0.001675f, +0.000474f, -0.000459f, +0.000226f, + -0.000903f, +0.000055f, -0.000064f, -0.000416f, -0.000525f, +0.000343f, +0.000441f, +0.000416f, -0.000515f, +0.000172f, + -0.000106f, +0.000263f, -0.000121f, -0.000285f, +0.000110f, -0.000331f, +0.000445f, -0.000515f, +0.000324f, -0.000018f, + -0.000035f, +0.000211f, -0.000031f, -0.000150f, +0.000229f, +0.000145f + }, + { + -0.003976f, +0.265165f, -0.022349f, +0.023520f, -0.000231f, -0.000559f, +0.001189f, -0.001886f, +0.001551f, +0.001705f, + -0.000290f, +0.006314f, -0.003556f, -0.007499f, -0.006117f, +0.004451f, +0.003070f, +0.009696f, +0.007238f, -0.001678f, + +0.002121f, +0.003032f, +0.002039f, -0.000813f, +0.002560f, +0.002685f, -0.000939f, +0.001265f, -0.002305f, +0.002100f, + +0.000195f, -0.001037f, +0.000886f, +0.000211f, +0.000918f, -0.001597f, +0.003429f, -0.000540f, -0.001150f, +0.005793f, + -0.002261f, +0.000320f, -0.003589f, +0.000897f, +0.001491f, -0.000852f, -0.000671f, -0.000457f, +0.001713f, -0.000262f, + +0.001079f, -0.001763f, -0.000614f, +0.000282f, +0.000764f, -0.000371f, -0.000208f, +0.000957f, -0.000705f, +0.000807f, + +0.000740f, -0.000252f, -0.000333f, +0.000279f, +0.000084f, +0.000169f, -0.000111f, +0.000514f, +0.000013f, +0.000683f, + -0.000168f, -0.000768f, -0.000314f, +0.000034f, +0.000474f, -0.000262f, +0.000105f, +0.000422f, -0.000002f, +0.000214f, + +0.000093f, +0.000523f, +0.000006f, -0.000049f, -0.000095f, -0.000125f, +0.000124f, -0.000136f, -0.000239f, +0.000299f, + +0.000020f, -0.000016f, +0.000068f, -0.000150f, +0.000314f, -0.000151f + }, + { + +0.002129f, -0.001042f, -0.005338f, -0.000369f, -0.000272f, +0.000219f, +0.002008f, +0.000611f, +0.001607f, +0.001014f, + -0.001188f, -0.001105f, +0.003195f, +0.001431f, +0.011216f, -0.013803f, -0.009144f, +0.042863f, -0.040981f, +0.002141f, + +0.001907f, -0.003787f, -0.005690f, -0.003289f, -0.002119f, +0.001713f, +0.002622f, +0.006554f, +0.000816f, +0.003937f, + -0.002826f, +0.002405f, -0.001360f, +0.005226f, +0.001943f, -0.002279f, -0.000267f, +0.002474f, +0.005604f, +0.003364f, + -0.002280f, -0.000249f, -0.002284f, -0.000880f, +0.001364f, +0.000546f, -0.002960f, +0.001202f, -0.001171f, +0.002035f, + -0.001900f, -0.000934f, +0.001733f, -0.001211f, +0.000776f, -0.000398f, +0.001532f, +0.000444f, -0.000312f, +0.000859f, + +0.000674f, -0.000786f, -0.000502f, +0.001506f, +0.000254f, -0.000225f, -0.000198f, +0.000613f, +0.000067f, -0.000129f, + -0.000137f, +0.000459f, -0.000333f, +0.000842f, +0.000175f, +0.000542f, -0.000164f, +0.000749f, +0.000426f, -0.000323f, + +0.000182f, +0.000007f, -0.000083f, -0.000058f, -0.000078f, -0.000356f, +0.000303f, -0.000241f, +0.000126f, +0.000391f, + -0.000191f, +0.000236f, +0.000008f, +0.000001f, -0.000193f, +0.000049f + }, + { + -0.028539f, +0.501921f, -0.030612f, -0.009238f, +0.008007f, -0.000745f, -0.000484f, +0.002922f, +0.003455f, -0.000641f, + +0.002956f, -0.001126f, +0.000820f, -0.001419f, +0.005692f, -0.001137f, -0.009988f, +0.001697f, +0.002952f, -0.000894f, + +0.003107f, -0.001016f, +0.001679f, -0.001908f, +0.001818f, -0.001656f, +0.000168f, +0.000005f, -0.001062f, +0.001247f, + +0.002245f, -0.003052f, -0.002745f, +0.001696f, +0.000885f, +0.002504f, +0.000491f, -0.000043f, +0.002718f, +0.000898f, + +0.005284f, -0.000859f, +0.000918f, -0.001605f, -0.006741f, +0.001133f, -0.003589f, +0.003837f, -0.001276f, -0.000047f, + +0.001782f, -0.001236f, +0.002378f, -0.000095f, +0.000839f, -0.000621f, -0.000147f, -0.001008f, +0.000726f, -0.000238f, + -0.001241f, +0.001716f, +0.000524f, +0.000026f, -0.000548f, +0.000372f, +0.000173f, -0.000155f, +0.000051f, -0.000600f, + +0.000455f, -0.000327f, +0.000661f, +0.000067f, -0.000405f, -0.000099f, -0.000029f, -0.000197f, +0.000066f, +0.000607f, + -0.000164f, +0.000214f, -0.000103f, +0.000307f, -0.000208f, +0.000461f, -0.000225f, -0.000177f, +0.000143f, -0.000109f, + -0.000110f, -0.000405f, +0.000196f, -0.000325f, +0.000238f, -0.000048f + }, + { + -0.000546f, +0.015852f, +0.003912f, +0.001967f, +0.000384f, +0.000126f, +0.001423f, +0.000459f, -0.000855f, +0.000084f, + -0.000013f, +0.000593f, +0.002192f, +0.007364f, +0.020585f, +0.005221f, +0.001532f, -0.006271f, +0.008116f, +0.007052f, + +0.004424f, -0.007363f, +0.009935f, +0.008282f, -0.000806f, -0.000204f, +0.004345f, -0.001146f, -0.006213f, +0.000535f, + -0.000721f, +0.005582f, +0.001601f, +0.000004f, -0.001111f, -0.001461f, +0.001870f, +0.000566f, +0.000152f, +0.001315f, + -0.002053f, -0.002015f, +0.002545f, +0.000396f, -0.002891f, -0.000387f, +0.000135f, -0.000151f, +0.000630f, -0.002406f, + +0.000931f, +0.000069f, +0.000397f, +0.000725f, -0.000202f, +0.002055f, -0.001301f, +0.000225f, +0.000930f, -0.000537f, + +0.000290f, -0.000621f, -0.000467f, +0.000663f, +0.000605f, -0.001367f, +0.000310f, +0.000260f, -0.000189f, +0.000598f, + +0.000058f, -0.000086f, +0.000306f, +0.000346f, +0.000185f, -0.000371f, +0.000168f, -0.000163f, +0.000116f, +0.000227f, + -0.000560f, -0.000184f, +0.000396f, -0.000275f, +0.000067f, +0.000057f, +0.000178f, -0.000133f, +0.000028f, -0.000200f, + -0.000341f, -0.000038f, -0.000062f, -0.000092f, +0.000071f, +0.000063f + }, + { + +0.008898f, -0.347228f, +0.057766f, +0.005939f, +0.006671f, +0.001156f, -0.001842f, +0.002094f, +0.000448f, -0.000059f, + +0.004381f, -0.003693f, -0.000559f, -0.006156f, +0.004765f, +0.001525f, -0.001519f, -0.000010f, +0.002583f, +0.001101f, + -0.005836f, +0.001946f, +0.003082f, +0.004457f, +0.001297f, -0.001842f, +0.002635f, -0.000584f, -0.000599f, +0.001632f, + -0.000842f, -0.002857f, +0.003564f, -0.005295f, +0.002161f, +0.006215f, -0.001249f, +0.003229f, -0.000233f, +0.005533f, + -0.003153f, -0.000837f, -0.002578f, +0.000398f, +0.002847f, -0.000272f, +0.000849f, -0.002032f, +0.001150f, +0.001190f, + +0.000211f, -0.000066f, +0.002291f, -0.001784f, +0.001504f, +0.000999f, -0.001093f, -0.000473f, -0.000496f, +0.000842f, + -0.001327f, +0.000076f, -0.000040f, -0.000327f, +0.001143f, +0.000387f, -0.000597f, +0.000521f, +0.000119f, -0.000454f, + -0.000299f, +0.000221f, +0.001682f, +0.000403f, -0.000132f, -0.000452f, +0.000478f, +0.000344f, +0.000129f, -0.000325f, + +0.000621f, -0.000189f, +0.000290f, -0.000183f, -0.000050f, +0.000054f, -0.000043f, +0.000168f, -0.000331f, +0.000263f, + +0.000091f, +0.000042f, -0.000305f, +0.000346f, -0.000339f, -0.000095f + }, + { + -0.000386f, +0.015138f, -0.014091f, -0.004742f, -0.000151f, -0.000114f, +0.001153f, +0.001462f, -0.000131f, -0.000146f, + -0.000907f, +0.000228f, +0.003558f, -0.005977f, -0.017343f, +0.000047f, -0.010770f, +0.018272f, -0.010934f, -0.000402f, + -0.004111f, +0.004929f, -0.000908f, -0.000256f, -0.002094f, +0.004513f, +0.002902f, -0.001286f, -0.001245f, +0.001951f, + -0.001919f, -0.002964f, +0.001524f, -0.002660f, -0.001833f, +0.000286f, -0.003810f, -0.001579f, -0.000431f, +0.002355f, + -0.001941f, -0.001444f, -0.000231f, +0.001030f, -0.002791f, -0.001075f, -0.001269f, -0.001215f, +0.002271f, -0.001985f, + +0.000591f, -0.000155f, +0.000233f, -0.000382f, -0.000669f, -0.000384f, -0.000561f, +0.002014f, +0.000709f, -0.000667f, + +0.000782f, -0.001412f, -0.000348f, +0.000153f, +0.000857f, -0.000418f, +0.000152f, -0.000678f, +0.000334f, +0.001225f, + +0.000308f, +0.000348f, +0.000111f, -0.000271f, +0.000422f, -0.000365f, +0.000269f, +0.000329f, +0.000077f, +0.000144f, + -0.000013f, -0.000787f, +0.000322f, -0.000175f, +0.000220f, -0.000103f, +0.000349f, -0.000135f, -0.000127f, +0.000045f, + +0.000008f, -0.000340f, +0.000175f, -0.000116f, +0.000336f, -0.000015f + }, + { + -0.019253f, +0.048452f, -0.012082f, -0.006452f, +0.005227f, +0.005448f, +0.009073f, +0.002028f, -0.000915f, +0.005495f, + +0.000399f, -0.005538f, -0.001663f, -0.000407f, +0.002562f, -0.001943f, +0.014919f, +0.004945f, -0.001704f, +0.000168f, + -0.003184f, -0.001689f, +0.005744f, +0.002686f, +0.001987f, +0.004009f, -0.000351f, -0.003349f, +0.002938f, +0.001968f, + +0.001918f, +0.004081f, +0.003236f, -0.004514f, +0.000138f, +0.002565f, -0.003467f, +0.001084f, +0.002716f, -0.000688f, + +0.001014f, -0.001786f, +0.000810f, -0.001426f, -0.001074f, +0.000185f, +0.000840f, -0.000843f, -0.002913f, +0.001638f, + -0.001442f, +0.000689f, +0.000341f, -0.000645f, -0.000088f, +0.001205f, -0.000375f, -0.000184f, -0.000446f, +0.000547f, + +0.000890f, -0.000190f, +0.000173f, +0.000357f, -0.000810f, +0.001016f, -0.000979f, +0.000150f, +0.000184f, +0.000041f, + +0.000448f, +0.000185f, +0.000161f, +0.000111f, +0.000148f, -0.000312f, +0.000261f, -0.000228f, +0.000465f, -0.000105f, + -0.000363f, +0.000053f, +0.000214f, +0.000057f, -0.000063f, +0.000257f, +0.000118f, -0.000082f, +0.000048f, +0.000201f, + -0.000274f, -0.000088f, -0.000019f, -0.000085f, +0.000081f, -0.000050f + }, + { + +0.000460f, +0.010453f, -0.005024f, -0.003855f, +0.003259f, -0.000703f, +0.003567f, +0.002239f, -0.000174f, -0.003209f, + +0.004625f, -0.003823f, -0.003952f, +0.016574f, -0.008101f, +0.004040f, +0.004578f, +0.001127f, +0.005858f, -0.006293f, + +0.006353f, +0.004516f, +0.005824f, +0.001418f, -0.003905f, +0.002191f, +0.001383f, +0.005211f, +0.000964f, +0.000848f, + -0.003747f, -0.006906f, +0.006400f, -0.002438f, -0.003466f, -0.004893f, -0.005270f, +0.002283f, -0.001045f, -0.001265f, + -0.002397f, -0.000764f, +0.003588f, -0.001435f, -0.000614f, +0.000474f, -0.003157f, +0.001383f, +0.000653f, +0.000481f, + -0.000672f, +0.000182f, +0.000151f, +0.000566f, +0.002116f, -0.000323f, -0.001077f, -0.000481f, -0.000738f, +0.000491f, + +0.001757f, -0.000895f, -0.000282f, +0.000569f, -0.000156f, +0.000032f, +0.000733f, +0.000230f, -0.000316f, +0.000821f, + -0.000387f, -0.000377f, -0.000122f, +0.000277f, -0.000348f, -0.000316f, +0.000090f, -0.000007f, +0.000108f, +0.000069f, + -0.000131f, -0.000223f, +0.000196f, -0.000400f, +0.000024f, +0.000081f, -0.000332f, +0.000134f, -0.000014f, +0.000038f, + +0.000201f, +0.000003f, -0.000185f, -0.000019f, +0.000081f, +0.000069f + }, + { + +0.016913f, -0.109002f, +0.005705f, -0.003169f, -0.003336f, -0.008570f, +0.006991f, -0.000073f, -0.001304f, +0.004666f, + -0.006009f, +0.006915f, -0.005299f, -0.009520f, +0.001728f, +0.002311f, +0.001901f, +0.004093f, +0.002174f, -0.002218f, + +0.000112f, -0.004084f, +0.000200f, +0.000376f, +0.000337f, +0.003933f, +0.001750f, -0.000832f, -0.002381f, +0.001427f, + -0.000143f, -0.000234f, +0.000926f, +0.000252f, +0.000170f, -0.002414f, +0.002425f, +0.000026f, +0.001784f, -0.001546f, + +0.001057f, -0.000328f, -0.000524f, -0.002253f, +0.003721f, -0.001185f, +0.000197f, -0.000053f, +0.002792f, -0.000242f, + -0.000896f, -0.001025f, +0.000067f, +0.000934f, -0.000464f, +0.002591f, -0.000160f, +0.000062f, -0.000435f, +0.000766f, + -0.000737f, +0.000106f, +0.000037f, +0.000089f, +0.000137f, -0.000035f, -0.000026f, -0.000607f, +0.000321f, +0.000083f, + -0.000060f, +0.000181f, +0.000400f, +0.000239f, +0.000045f, +0.000057f, +0.000243f, +0.000272f, -0.000266f, +0.000415f, + +0.000005f, -0.000025f, -0.000064f, +0.000199f, -0.000228f, +0.000083f, -0.000242f, -0.000225f, +0.000186f, -0.000183f, + -0.000013f, +0.000094f, +0.000108f, -0.000163f, -0.000062f, +0.000152f + }, + { + +0.001010f, -0.014305f, -0.007476f, +0.000630f, -0.003075f, +0.000397f, +0.000633f, -0.001236f, +0.003197f, -0.000555f, + +0.002379f, +0.004060f, -0.021809f, +0.055547f, -0.012359f, -0.008001f, +0.005010f, +0.000326f, -0.002707f, +0.003834f, + +0.003696f, -0.007020f, +0.016722f, -0.001566f, -0.004603f, +0.004901f, +0.003378f, -0.007589f, -0.002211f, +0.001031f, + -0.004576f, +0.002005f, -0.002151f, -0.001512f, -0.002351f, +0.000300f, +0.000071f, +0.001497f, +0.000952f, -0.000917f, + +0.004554f, +0.001518f, -0.002986f, +0.000030f, -0.003719f, +0.000750f, +0.001467f, +0.000966f, -0.000717f, -0.001814f, + -0.000045f, -0.001337f, -0.000773f, -0.001343f, +0.001082f, -0.001050f, -0.000122f, -0.000620f, +0.000763f, -0.000915f, + +0.000709f, -0.000871f, -0.000973f, -0.000349f, -0.000902f, -0.000105f, +0.000397f, -0.000640f, -0.001202f, +0.000119f, + +0.000022f, +0.000069f, +0.000668f, +0.000080f, -0.000170f, -0.000264f, -0.000158f, -0.000119f, -0.000266f, +0.000105f, + -0.000032f, -0.000422f, -0.000242f, +0.000143f, -0.000030f, +0.000086f, +0.000107f, -0.000286f, +0.000412f, -0.000092f, + +0.000161f, +0.000260f, -0.000022f, +0.000132f, +0.000111f, -0.000015f + }, + { + -0.005083f, -0.102358f, +0.001738f, +0.002791f, +0.002506f, +0.014414f, -0.012344f, -0.001490f, +0.001710f, -0.000374f, + +0.007038f, +0.000062f, +0.000098f, +0.001461f, -0.039303f, -0.003859f, +0.011234f, +0.004889f, -0.003542f, +0.005781f, + -0.002833f, +0.001945f, -0.002141f, +0.000877f, -0.000574f, +0.000006f, +0.001919f, +0.002907f, +0.002686f, -0.002259f, + +0.002757f, -0.002232f, +0.001177f, +0.000240f, +0.000220f, -0.000790f, -0.000558f, +0.001522f, -0.000666f, +0.000016f, + +0.000256f, +0.002811f, -0.000788f, +0.000524f, -0.001954f, -0.000145f, -0.001280f, -0.000526f, +0.000707f, +0.000817f, + +0.000210f, -0.001308f, +0.002006f, +0.000313f, -0.000431f, +0.000831f, -0.001417f, +0.001056f, -0.000944f, +0.001187f, + -0.000960f, +0.000276f, -0.000916f, -0.000757f, -0.000347f, +0.000072f, -0.000155f, -0.000149f, +0.000291f, +0.000487f, + -0.000691f, +0.000438f, -0.000624f, -0.000542f, +0.000328f, -0.000160f, +0.000063f, -0.000039f, +0.000130f, -0.000016f, + +0.000058f, +0.000249f, -0.000496f, +0.000210f, -0.000266f, +0.000585f, +0.000418f, -0.000100f, -0.000316f, +0.000152f, + -0.000199f, +0.000220f, +0.000167f, +0.000014f, +0.000218f, -0.000210f + }, + { + -0.000865f, -0.012041f, +0.003018f, -0.001566f, -0.000454f, -0.000476f, -0.000190f, -0.001797f, -0.002753f, -0.003892f, + -0.003038f, -0.002395f, +0.004046f, -0.012473f, -0.086283f, +0.006517f, +0.009379f, -0.008373f, +0.006814f, +0.003061f, + +0.002717f, +0.001674f, +0.005562f, -0.008434f, -0.000888f, +0.004423f, -0.007170f, -0.000297f, +0.001511f, +0.004237f, + -0.001359f, +0.002035f, -0.001240f, +0.003656f, -0.003239f, +0.001512f, -0.000748f, -0.000730f, +0.001188f, +0.000367f, + +0.002421f, -0.000829f, +0.002028f, -0.001631f, +0.000001f, -0.000491f, -0.000486f, -0.001353f, -0.000328f, +0.002048f, + -0.002344f, +0.000562f, +0.000172f, -0.003506f, +0.001486f, +0.000197f, +0.001292f, -0.001000f, -0.000423f, +0.000623f, + +0.000450f, -0.000868f, +0.000167f, +0.000669f, -0.000096f, +0.000149f, -0.000020f, -0.000300f, +0.000850f, -0.000255f, + -0.000134f, -0.000136f, -0.000147f, +0.000316f, -0.000050f, -0.000033f, -0.000418f, -0.000147f, -0.000199f, +0.000316f, + -0.000389f, +0.000159f, +0.000184f, +0.000018f, +0.000008f, +0.000268f, -0.000165f, +0.000021f, +0.000068f, -0.000220f, + -0.000104f, +0.000121f, -0.000059f, +0.000141f, -0.000333f, -0.000108f + } + }, + { + { + -0.019346f, -0.070846f, -0.004744f, -0.012389f, -0.006706f, -0.001654f, -0.001557f, -0.004012f, +0.001654f, -0.000930f, + -0.005206f, -0.003281f, +0.000292f, -0.001747f, +0.000857f, +0.000266f, +0.002752f, +0.000281f, +0.001740f, -0.008821f, + -0.002064f, +0.001985f, +0.000821f, +0.001452f, -0.000491f, -0.000523f, +0.004712f, +0.002324f, +0.000533f, -0.000758f, + -0.000689f, -0.000464f, -0.000680f, -0.000438f, -0.000967f, +0.000070f, +0.000109f, -0.002286f, -0.000523f, -0.000444f, + +0.000216f, -0.001296f, +0.000602f, +0.000957f, +0.000631f, +0.002403f, +0.002832f, +0.001688f, -0.000094f, -0.000680f, + -0.001002f, -0.000721f, +0.000237f, +0.000825f, +0.000493f, +0.000511f, -0.000018f, +0.001352f, +0.000687f, +0.000191f, + -0.000490f, -0.000060f, +0.000761f, +0.000676f, -0.000487f, +0.000734f, -0.000557f, +0.000348f, +0.000264f, +0.000149f, + +0.000227f, +0.000096f, -0.000195f, +0.000329f, +0.000092f, +0.000037f, +0.000027f, +0.000231f, +0.000161f, -0.000369f, + -0.000344f, -0.000062f, +0.000061f, -0.000148f, -0.000186f, +0.000217f, -0.000002f, -0.000013f, -0.000047f, -0.000079f, + -0.000041f, +0.000124f, -0.000107f, +0.000071f, +0.000138f, +0.000074f + }, + { + -0.002911f, -0.033496f, -0.007489f, -0.002753f, -0.005895f, -0.000670f, -0.001271f, -0.001552f, -0.001030f, -0.000375f, + -0.000084f, -0.001240f, -0.002437f, +0.000138f, +0.005667f, +0.002715f, +0.001926f, -0.002409f, +0.001156f, -0.001006f, + +0.002681f, -0.003402f, -0.000432f, -0.001620f, +0.003073f, +0.000234f, -0.001942f, +0.000302f, -0.004267f, -0.001848f, + -0.002580f, +0.001801f, -0.001413f, -0.000840f, +0.002227f, +0.001965f, +0.003950f, +0.001923f, +0.000366f, +0.002170f, + -0.000971f, -0.000852f, -0.000181f, +0.000538f, +0.000508f, +0.000350f, -0.000735f, -0.000995f, -0.000640f, -0.000653f, + +0.000114f, +0.000461f, +0.000480f, -0.000278f, -0.000575f, +0.001044f, +0.000341f, -0.000231f, -0.000500f, +0.000561f, + +0.000007f, -0.000893f, +0.000125f, -0.000201f, -0.000228f, +0.000026f, +0.000298f, +0.000054f, +0.000229f, +0.000144f, + +0.000181f, -0.000083f, +0.000116f, +0.000022f, -0.000503f, -0.000213f, +0.000143f, +0.000061f, -0.000163f, -0.000304f, + +0.000127f, +0.000341f, +0.000259f, +0.000009f, -0.000014f, -0.000109f, -0.000055f, +0.000043f, -0.000155f, -0.000036f, + +0.000106f, +0.000056f, -0.000024f, -0.000114f, -0.000080f, +0.000040f + }, + { + +0.012464f, +0.097402f, -0.010196f, -0.028237f, -0.007759f, -0.000222f, -0.001613f, -0.000268f, +0.001068f, +0.004997f, + -0.000375f, -0.008183f, -0.001462f, +0.001992f, +0.001037f, -0.005239f, -0.000248f, -0.006369f, -0.010198f, +0.000152f, + -0.011961f, +0.001207f, +0.000411f, +0.002283f, +0.000891f, -0.001902f, -0.001562f, -0.001586f, -0.004795f, -0.002136f, + +0.000124f, +0.000742f, -0.001283f, -0.000462f, -0.001618f, +0.001096f, -0.001740f, -0.001642f, -0.001381f, -0.002354f, + -0.001606f, +0.000915f, +0.000076f, +0.000152f, -0.000456f, -0.001273f, -0.000624f, -0.001463f, -0.000046f, +0.000817f, + -0.000025f, -0.001232f, -0.001233f, -0.000394f, +0.000464f, +0.001211f, -0.000417f, +0.000336f, -0.000366f, +0.000377f, + -0.000394f, -0.000203f, +0.000037f, -0.000389f, -0.000078f, -0.000468f, -0.000701f, -0.000315f, -0.000116f, -0.000107f, + -0.000427f, -0.000325f, -0.000717f, -0.000078f, -0.000130f, +0.000271f, +0.000581f, +0.000077f, -0.000282f, +0.000272f, + +0.000147f, +0.000069f, -0.000217f, -0.000128f, -0.000059f, -0.000237f, +0.000031f, -0.000082f, +0.000078f, +0.000035f, + +0.000193f, +0.000130f, +0.000195f, +0.000023f, +0.000095f, +0.000065f + }, + { + +0.023111f, +0.165959f, +0.028872f, +0.016365f, +0.001918f, +0.000995f, -0.000641f, -0.000760f, -0.000088f, +0.001985f, + +0.002499f, +0.001781f, -0.001691f, -0.004048f, -0.002191f, +0.000884f, +0.005249f, +0.010346f, +0.002042f, +0.000016f, + -0.000398f, +0.004152f, +0.000983f, +0.001494f, +0.002521f, +0.002834f, -0.000077f, +0.000738f, -0.001263f, -0.000685f, + +0.000456f, +0.001271f, -0.000906f, -0.000265f, +0.000070f, +0.000683f, +0.000508f, -0.000225f, +0.000525f, +0.002030f, + +0.000437f, +0.000317f, -0.002474f, -0.000421f, +0.000320f, -0.000859f, +0.000034f, -0.000250f, +0.002029f, +0.000743f, + -0.000748f, -0.000783f, -0.000043f, -0.000645f, -0.000314f, +0.000035f, +0.000085f, +0.000651f, +0.000027f, +0.000548f, + +0.000317f, -0.000620f, +0.000219f, -0.000030f, -0.000040f, -0.000269f, +0.000349f, -0.000032f, +0.000203f, +0.000376f, + -0.000036f, -0.000218f, +0.000211f, +0.000152f, -0.000095f, -0.000209f, +0.000022f, +0.000221f, +0.000258f, +0.000014f, + +0.000206f, +0.000213f, +0.000156f, -0.000078f, -0.000085f, +0.000046f, +0.000122f, -0.000142f, +0.000071f, +0.000004f, + -0.000009f, -0.000112f, +0.000096f, +0.000001f, +0.000021f, +0.000108f + }, + { + -0.002406f, -0.003376f, +0.001879f, -0.000043f, -0.000718f, +0.000604f, +0.001835f, +0.000019f, +0.000675f, +0.000530f, + +0.000784f, +0.000732f, -0.001829f, -0.002083f, +0.007709f, +0.001193f, +0.004648f, -0.012497f, -0.000959f, -0.001256f, + +0.004435f, -0.004142f, -0.008467f, +0.001007f, +0.001987f, +0.001634f, +0.002046f, +0.002474f, +0.002308f, -0.001103f, + +0.001870f, +0.003444f, +0.001146f, -0.000181f, -0.000485f, -0.000001f, +0.000413f, +0.002408f, +0.004226f, +0.001914f, + +0.000222f, -0.002136f, -0.000416f, -0.000384f, +0.000058f, -0.001195f, -0.001702f, -0.000589f, -0.000333f, +0.000236f, + +0.000231f, -0.000468f, +0.000034f, +0.000242f, +0.000070f, -0.000224f, +0.000960f, -0.000234f, -0.000506f, +0.000857f, + +0.000335f, +0.000187f, -0.000084f, +0.000457f, -0.000335f, -0.000770f, +0.000367f, +0.000164f, +0.000281f, -0.000051f, + -0.000374f, +0.000500f, +0.000325f, +0.000104f, +0.000274f, +0.000235f, +0.000288f, +0.000315f, +0.000137f, -0.000112f, + -0.000009f, +0.000088f, +0.000143f, -0.000177f, -0.000082f, -0.000063f, -0.000104f, +0.000055f, +0.000010f, +0.000192f, + +0.000085f, -0.000068f, -0.000007f, +0.000020f, -0.000017f, +0.000037f + }, + { + +0.052529f, +0.306525f, +0.036302f, -0.005514f, +0.002391f, +0.001976f, +0.000433f, +0.000292f, +0.003139f, -0.000329f, + -0.001989f, +0.001496f, +0.000407f, +0.001226f, +0.000988f, -0.000064f, -0.004206f, -0.000418f, -0.000273f, +0.001010f, + +0.001141f, -0.000685f, +0.002382f, -0.000648f, +0.000519f, -0.001570f, -0.000298f, -0.000146f, -0.001390f, -0.000047f, + +0.002655f, -0.002114f, +0.000213f, -0.001377f, +0.003837f, +0.001529f, +0.001092f, +0.000022f, +0.001574f, +0.001918f, + +0.001599f, +0.000029f, -0.000973f, -0.003213f, -0.002237f, -0.001043f, +0.000379f, -0.000146f, -0.000171f, +0.001022f, + +0.000147f, +0.000395f, +0.000773f, +0.000053f, +0.000563f, -0.000273f, -0.000362f, -0.001024f, +0.000951f, +0.000303f, + -0.000628f, +0.000704f, +0.000090f, -0.000055f, -0.000391f, +0.000108f, +0.000046f, -0.000027f, +0.000312f, -0.000518f, + -0.000107f, -0.000056f, +0.000089f, -0.000062f, +0.000026f, -0.000279f, -0.000109f, +0.000052f, +0.000163f, +0.000260f, + +0.000021f, +0.000302f, +0.000227f, +0.000197f, -0.000019f, +0.000005f, -0.000002f, +0.000009f, -0.000098f, -0.000023f, + -0.000257f, -0.000144f, +0.000016f, -0.000025f, +0.000085f, -0.000060f + }, + { + +0.001036f, +0.009360f, +0.004391f, +0.002329f, +0.000002f, +0.000316f, +0.001248f, -0.000038f, -0.000487f, +0.000271f, + -0.000815f, +0.000979f, +0.000053f, +0.009372f, +0.017214f, +0.006689f, +0.003709f, -0.000601f, +0.002974f, +0.014285f, + +0.004246f, -0.001693f, +0.006202f, +0.006402f, -0.004152f, +0.002208f, +0.003421f, -0.002880f, -0.003241f, -0.001217f, + +0.002397f, +0.001387f, +0.000670f, +0.002096f, -0.000812f, +0.000682f, -0.000217f, +0.000689f, +0.000757f, -0.000848f, + -0.000694f, +0.000233f, +0.000487f, -0.001127f, -0.001019f, -0.000372f, -0.000229f, +0.000371f, +0.000165f, -0.000997f, + +0.000129f, +0.000107f, +0.000408f, -0.000188f, +0.000820f, +0.000274f, +0.000450f, -0.000250f, +0.000297f, +0.000852f, + -0.000076f, +0.000332f, -0.000171f, +0.000585f, -0.000183f, +0.000146f, -0.000168f, -0.000346f, -0.000163f, +0.000743f, + +0.000602f, -0.000161f, -0.000290f, +0.000374f, -0.000226f, -0.000308f, +0.000081f, +0.000056f, -0.000007f, -0.000236f, + -0.000319f, -0.000138f, +0.000180f, -0.000012f, +0.000035f, -0.000077f, +0.000156f, +0.000076f, +0.000037f, -0.000155f, + -0.000079f, +0.000031f, -0.000099f, -0.000092f, +0.000081f, +0.000030f + }, + { + -0.024123f, -0.196398f, -0.009694f, +0.005852f, +0.001671f, +0.000379f, -0.001376f, +0.001721f, +0.000260f, +0.000423f, + +0.001107f, -0.001360f, -0.000691f, -0.002024f, -0.001042f, +0.001981f, -0.001388f, -0.001014f, +0.001218f, +0.001494f, + -0.002801f, +0.000806f, -0.000000f, +0.003601f, +0.001770f, +0.000036f, -0.000217f, +0.001214f, -0.001652f, +0.000186f, + -0.000290f, +0.001288f, +0.000710f, -0.003016f, -0.000941f, -0.000007f, +0.000776f, +0.002857f, +0.002363f, +0.000351f, + -0.001586f, -0.001703f, -0.000668f, +0.001493f, +0.001978f, -0.000605f, -0.000354f, +0.001211f, +0.000116f, -0.000540f, + +0.000881f, -0.000286f, +0.001098f, +0.000920f, -0.000364f, +0.000493f, -0.000412f, -0.000497f, +0.000425f, -0.000347f, + -0.000288f, +0.000041f, -0.000576f, +0.000150f, +0.000956f, -0.000027f, +0.000039f, +0.000088f, +0.000137f, +0.000270f, + +0.000069f, +0.000301f, +0.000916f, +0.000211f, -0.000290f, -0.000118f, +0.000378f, +0.000057f, +0.000246f, +0.000232f, + +0.000116f, +0.000222f, +0.000129f, +0.000080f, +0.000036f, +0.000081f, +0.000019f, -0.000234f, -0.000199f, -0.000010f, + +0.000195f, +0.000049f, -0.000063f, +0.000000f, -0.000167f, -0.000187f + }, + { + +0.001816f, -0.006683f, -0.006273f, -0.000596f, -0.001315f, +0.000320f, +0.001011f, +0.000911f, -0.000005f, -0.001099f, + -0.001716f, +0.002322f, +0.000427f, -0.001779f, -0.012404f, -0.006216f, +0.003667f, +0.001871f, -0.001158f, +0.003126f, + -0.004531f, +0.001784f, +0.000843f, +0.004448f, -0.002042f, +0.001201f, -0.001168f, +0.000870f, +0.001526f, -0.001255f, + -0.005183f, -0.000597f, +0.000216f, +0.000804f, -0.001395f, -0.002860f, +0.000099f, -0.002687f, -0.001905f, +0.001390f, + -0.001993f, -0.001158f, +0.000322f, -0.002060f, -0.002269f, -0.000304f, -0.001098f, -0.000243f, -0.000762f, +0.000954f, + +0.000313f, -0.000250f, +0.001028f, -0.000652f, -0.001172f, -0.000366f, -0.000133f, +0.000005f, +0.000431f, -0.000039f, + +0.000313f, -0.000029f, -0.000492f, +0.000434f, +0.001032f, +0.000635f, -0.000399f, -0.000127f, +0.000194f, +0.000522f, + +0.000797f, +0.000335f, +0.000162f, +0.000103f, -0.000345f, -0.000136f, +0.000225f, +0.000070f, +0.000202f, +0.000078f, + -0.000017f, -0.000173f, +0.000266f, -0.000014f, -0.000108f, +0.000091f, -0.000112f, -0.000276f, -0.000127f, -0.000030f, + +0.000023f, -0.000078f, +0.000032f, -0.000062f, +0.000031f, -0.000011f + }, + { + +0.015873f, +0.022336f, -0.016643f, -0.004063f, +0.000428f, +0.007099f, +0.009186f, +0.003728f, -0.001637f, +0.001389f, + +0.000186f, -0.006024f, +0.000869f, -0.002496f, -0.002703f, +0.001918f, +0.005901f, +0.006664f, -0.001251f, +0.000168f, + -0.002087f, +0.001740f, +0.003323f, +0.003235f, +0.001613f, +0.001492f, +0.000718f, -0.000130f, -0.000323f, +0.002741f, + +0.003288f, +0.004657f, +0.001254f, -0.002478f, -0.002799f, +0.000724f, -0.002126f, +0.001746f, +0.001150f, +0.001113f, + -0.001719f, -0.000842f, -0.000172f, -0.001158f, -0.000577f, -0.001007f, -0.000630f, -0.000351f, -0.001482f, -0.001883f, + +0.000279f, +0.000586f, -0.000644f, -0.000148f, +0.000407f, +0.000798f, +0.000231f, +0.000128f, -0.000146f, +0.000016f, + +0.000697f, +0.000441f, -0.000030f, +0.000077f, -0.000373f, +0.000087f, -0.000115f, +0.000160f, +0.000184f, -0.000109f, + -0.000044f, +0.000527f, +0.000158f, +0.000132f, -0.000047f, -0.000036f, +0.000088f, +0.000009f, +0.000114f, +0.000175f, + -0.000022f, +0.000050f, +0.000086f, -0.000082f, +0.000024f, -0.000045f, -0.000098f, -0.000013f, -0.000113f, +0.000047f, + -0.000087f, -0.000069f, +0.000013f, -0.000005f, -0.000047f, -0.000104f + }, + { + -0.001356f, -0.001427f, -0.000432f, +0.005615f, -0.000886f, +0.000168f, +0.002574f, +0.001250f, +0.000027f, -0.001732f, + +0.001608f, +0.001309f, +0.002232f, +0.004428f, -0.001969f, +0.005531f, +0.001989f, -0.001259f, +0.002273f, +0.002035f, + +0.004451f, +0.001020f, +0.005846f, +0.001113f, -0.001701f, +0.001410f, +0.000750f, +0.001268f, +0.000612f, +0.000813f, + -0.002884f, -0.000141f, +0.001150f, -0.000279f, -0.004875f, -0.004575f, -0.001175f, -0.000706f, -0.000430f, +0.000138f, + -0.002029f, -0.000196f, +0.000333f, -0.000852f, -0.000053f, -0.001097f, +0.000100f, -0.000391f, -0.000505f, +0.000820f, + -0.000216f, +0.000034f, +0.000263f, +0.001585f, +0.001867f, -0.000330f, -0.000718f, -0.000262f, -0.000708f, +0.000424f, + +0.000575f, -0.000482f, +0.000165f, +0.000161f, +0.000168f, -0.000250f, +0.000025f, -0.000053f, +0.000024f, +0.000182f, + +0.000130f, -0.000408f, -0.000249f, +0.000146f, -0.000414f, -0.000199f, +0.000276f, +0.000358f, +0.000172f, -0.000104f, + -0.000065f, -0.000075f, -0.000113f, -0.000056f, +0.000135f, -0.000029f, -0.000149f, +0.000028f, +0.000149f, +0.000159f, + +0.000104f, -0.000016f, -0.000085f, -0.000107f, +0.000065f, +0.000015f + }, + { + -0.018495f, -0.042886f, -0.006205f, -0.002288f, -0.004624f, +0.002863f, -0.001334f, -0.001100f, -0.000530f, +0.003028f, + +0.002180f, -0.000069f, -0.002001f, -0.002132f, -0.000540f, +0.002920f, +0.001235f, +0.001979f, +0.002329f, -0.000369f, + -0.001306f, -0.002582f, -0.001349f, +0.000013f, +0.002198f, +0.000869f, +0.001005f, -0.000666f, -0.001149f, +0.001681f, + +0.002561f, -0.001541f, -0.000716f, +0.000408f, -0.000035f, +0.000906f, +0.001433f, +0.002552f, +0.001633f, -0.000242f, + -0.000784f, +0.000334f, -0.003841f, +0.001483f, +0.001421f, +0.000089f, +0.000846f, +0.000031f, +0.000817f, +0.000049f, + -0.000715f, +0.000079f, -0.000478f, +0.000064f, +0.000302f, +0.001224f, +0.000196f, -0.000350f, +0.000273f, +0.000464f, + -0.000143f, -0.000017f, -0.000042f, +0.000066f, -0.000126f, -0.000108f, -0.000034f, +0.000215f, +0.000123f, -0.000216f, + +0.000108f, +0.000318f, +0.000190f, +0.000049f, -0.000056f, +0.000197f, +0.000161f, +0.000268f, +0.000144f, +0.000009f, + +0.000152f, -0.000017f, -0.000114f, -0.000028f, -0.000090f, -0.000070f, +0.000092f, -0.000238f, -0.000056f, -0.000154f, + -0.000094f, +0.000065f, -0.000034f, +0.000000f, -0.000086f, +0.000014f + }, + { + -0.000825f, -0.011728f, -0.003656f, -0.004460f, -0.002906f, -0.000297f, -0.001301f, +0.000171f, +0.000747f, +0.002489f, + +0.000790f, +0.000711f, +0.014097f, -0.003255f, -0.002093f, -0.007565f, +0.000433f, -0.000538f, -0.000115f, -0.000261f, + +0.004834f, -0.005884f, +0.011955f, +0.001970f, +0.003349f, -0.003127f, -0.000804f, -0.001522f, -0.005587f, -0.001177f, + -0.001602f, +0.000930f, -0.001087f, -0.001927f, +0.001576f, +0.000477f, +0.001486f, -0.000858f, +0.000588f, +0.000850f, + +0.002086f, +0.000527f, -0.001749f, -0.000072f, -0.001559f, -0.001391f, +0.000430f, -0.000434f, +0.000353f, -0.000674f, + -0.001027f, -0.001477f, -0.001277f, -0.000989f, +0.000360f, -0.000322f, -0.000909f, +0.000147f, +0.000058f, -0.000294f, + +0.001077f, -0.000679f, -0.001404f, -0.001031f, -0.000375f, -0.000176f, +0.000164f, -0.000652f, -0.000484f, +0.000065f, + -0.000170f, +0.000344f, -0.000132f, +0.000300f, +0.000176f, -0.000520f, -0.000432f, -0.000311f, +0.000230f, -0.000102f, + +0.000109f, -0.000116f, +0.000019f, +0.000295f, -0.000110f, +0.000019f, -0.000119f, -0.000163f, +0.000170f, +0.000202f, + +0.000054f, +0.000094f, -0.000106f, +0.000089f, +0.000125f, +0.000009f + }, + { + -0.009229f, -0.075174f, -0.010230f, +0.004897f, +0.003371f, +0.002754f, -0.002010f, -0.000023f, +0.001601f, +0.000718f, + +0.004941f, +0.000539f, -0.000449f, -0.011351f, -0.013371f, +0.002010f, -0.000024f, +0.003986f, +0.003436f, -0.000985f, + -0.000768f, +0.001651f, +0.000520f, -0.002339f, -0.001100f, -0.000913f, +0.002332f, +0.002216f, +0.002005f, -0.002338f, + +0.001002f, -0.001398f, +0.000586f, +0.002727f, -0.001833f, +0.001206f, +0.000115f, +0.002081f, +0.000424f, +0.000561f, + -0.000203f, +0.002456f, -0.000574f, -0.000303f, -0.000366f, -0.000859f, -0.000202f, -0.001274f, +0.000460f, +0.000563f, + +0.000583f, -0.000397f, +0.000466f, +0.000986f, +0.000500f, +0.000923f, -0.000182f, -0.000023f, -0.000542f, -0.000095f, + +0.000399f, -0.000452f, -0.000610f, -0.000011f, -0.000035f, +0.000108f, +0.000259f, -0.000053f, -0.000048f, +0.000181f, + +0.000307f, -0.000214f, -0.000231f, -0.000215f, -0.000059f, +0.000154f, -0.000043f, +0.000017f, +0.000129f, +0.000335f, + +0.000171f, +0.000036f, +0.000019f, +0.000223f, -0.000010f, +0.000203f, +0.000216f, -0.000037f, -0.000187f, -0.000061f, + +0.000036f, +0.000139f, +0.000063f, +0.000077f, +0.000106f, -0.000150f + }, + { + +0.000443f, -0.007169f, -0.003063f, +0.000430f, -0.002433f, +0.000532f, -0.000322f, -0.001327f, -0.002358f, -0.001941f, + -0.002785f, -0.001119f, +0.004188f, -0.028627f, -0.056429f, -0.003725f, +0.004667f, -0.001723f, -0.001632f, +0.013346f, + +0.004962f, -0.003426f, -0.000922f, -0.003926f, +0.001386f, -0.000656f, -0.003280f, +0.000221f, +0.001540f, +0.004931f, + -0.002651f, +0.001159f, +0.000366f, +0.000174f, -0.001636f, -0.000543f, -0.000899f, -0.000942f, +0.001587f, +0.001467f, + -0.000725f, -0.000222f, +0.000952f, -0.001092f, +0.000027f, +0.000495f, -0.000547f, +0.000172f, -0.001577f, -0.000361f, + -0.000190f, -0.000592f, -0.000480f, -0.000994f, -0.000005f, +0.000377f, -0.000081f, -0.000914f, -0.000161f, -0.000012f, + -0.000136f, -0.000456f, +0.000653f, -0.000037f, +0.000089f, +0.000078f, -0.000095f, +0.000359f, +0.000160f, +0.000092f, + -0.000146f, +0.000021f, -0.000121f, +0.000205f, +0.000013f, -0.000157f, -0.000113f, -0.000345f, -0.000180f, +0.000119f, + +0.000018f, +0.000105f, +0.000123f, +0.000103f, +0.000039f, +0.000070f, -0.000147f, -0.000053f, +0.000081f, -0.000106f, + -0.000101f, +0.000086f, +0.000021f, -0.000132f, -0.000165f, -0.000150f + } + }, + { + { + +0.021392f, +0.014473f, +0.037566f, -0.008558f, +0.001322f, +0.000248f, +0.000010f, -0.001830f, +0.001227f, -0.000610f, + +0.001753f, +0.001447f, +0.000888f, -0.001346f, -0.000940f, +0.000218f, -0.000182f, -0.003310f, +0.005138f, -0.003851f, + -0.000571f, +0.000979f, +0.000394f, -0.000496f, -0.000413f, -0.000663f, +0.002433f, -0.000941f, -0.000702f, +0.000430f, + +0.000766f, -0.001283f, +0.000691f, +0.000281f, +0.000027f, -0.001033f, +0.000350f, -0.000455f, -0.000272f, +0.000952f, + +0.000744f, -0.001105f, -0.000040f, -0.000598f, -0.001013f, +0.001299f, -0.000025f, +0.001024f, +0.000789f, -0.000487f, + -0.000391f, -0.000432f, +0.000178f, +0.000417f, +0.000182f, +0.000266f, -0.000146f, +0.000843f, +0.000273f, -0.000182f, + -0.000227f, -0.000334f, +0.000165f, +0.000163f, -0.000389f, +0.000920f, -0.000545f, +0.000343f, +0.000220f, +0.000078f, + +0.000028f, -0.000116f, -0.000022f, +0.000063f, -0.000130f, +0.000125f, +0.000147f, +0.000249f, -0.000188f, -0.000139f, + -0.000137f, +0.000037f, +0.000187f, +0.000073f, -0.000078f, +0.000031f, +0.000149f, -0.000003f, -0.000027f, -0.000020f, + -0.000007f, -0.000073f, -0.000019f, +0.000036f, +0.000026f, -0.000069f + }, + { + +0.003603f, -0.030156f, -0.003247f, +0.005645f, -0.000678f, +0.000475f, -0.000504f, -0.000114f, +0.000425f, -0.000748f, + +0.000360f, -0.000193f, -0.001881f, -0.003009f, +0.003464f, -0.004102f, -0.000791f, +0.000810f, +0.010399f, +0.003323f, + +0.001556f, -0.002736f, -0.000912f, -0.002481f, +0.000513f, +0.000388f, -0.002237f, +0.002043f, -0.001606f, -0.002151f, + -0.001233f, +0.001551f, +0.000730f, +0.001626f, +0.000975f, +0.001430f, +0.000451f, -0.001102f, -0.000185f, +0.000991f, + -0.001122f, +0.000192f, -0.000208f, +0.000902f, +0.000050f, +0.000321f, +0.000078f, +0.000572f, -0.000308f, -0.000156f, + +0.000507f, -0.000059f, +0.000015f, +0.000075f, -0.000025f, +0.000473f, +0.000172f, +0.000079f, -0.000367f, +0.000003f, + -0.000120f, -0.000213f, +0.000340f, +0.000195f, -0.000351f, -0.000099f, +0.000157f, +0.000174f, +0.000121f, -0.000035f, + -0.000081f, +0.000279f, +0.000403f, +0.000276f, -0.000274f, +0.000200f, +0.000234f, -0.000028f, -0.000161f, -0.000310f, + +0.000100f, +0.000127f, -0.000015f, -0.000094f, -0.000064f, -0.000164f, -0.000008f, +0.000097f, -0.000102f, +0.000085f, + +0.000088f, +0.000029f, -0.000150f, -0.000069f, -0.000022f, +0.000087f + }, + { + -0.010950f, +0.072074f, -0.005644f, -0.016836f, +0.005010f, +0.001976f, -0.000976f, -0.000083f, +0.000010f, +0.001504f, + -0.003067f, -0.002900f, -0.000257f, -0.000261f, +0.005467f, -0.003367f, +0.001296f, +0.000793f, -0.000640f, +0.004764f, + -0.001905f, +0.004135f, -0.002413f, -0.000014f, +0.000304f, -0.002852f, -0.001179f, +0.000810f, -0.000313f, +0.001454f, + -0.000373f, +0.000968f, -0.000317f, +0.000713f, +0.000946f, +0.000605f, +0.000465f, -0.000125f, -0.000778f, -0.000153f, + -0.000406f, +0.001017f, +0.000270f, -0.000170f, -0.000723f, -0.001008f, +0.000293f, -0.000896f, -0.000250f, +0.000469f, + +0.000056f, +0.000182f, -0.000352f, -0.000274f, -0.000003f, +0.000712f, -0.000557f, +0.000430f, -0.000398f, +0.000445f, + -0.000491f, -0.000604f, +0.000583f, +0.000423f, +0.000120f, -0.000468f, -0.000175f, +0.000095f, +0.000186f, +0.000069f, + -0.000040f, -0.000070f, -0.000460f, +0.000285f, +0.000184f, +0.000168f, +0.000034f, -0.000219f, +0.000122f, +0.000309f, + -0.000118f, +0.000039f, -0.000012f, -0.000115f, -0.000108f, -0.000166f, +0.000000f, +0.000110f, +0.000057f, -0.000020f, + +0.000161f, +0.000025f, +0.000053f, +0.000097f, +0.000015f, -0.000027f + }, + { + -0.027734f, +0.056632f, -0.000886f, +0.011828f, -0.000674f, +0.000564f, +0.000331f, -0.000290f, -0.000127f, +0.002318f, + +0.002062f, -0.001691f, +0.000713f, -0.000907f, +0.000835f, +0.000934f, -0.000520f, +0.004609f, -0.000507f, -0.000830f, + -0.001377f, +0.001250f, -0.000590f, +0.000723f, -0.000578f, -0.000664f, -0.002607f, +0.001625f, -0.000418f, -0.000569f, + -0.000227f, -0.000144f, -0.000756f, +0.000372f, -0.000183f, +0.000451f, -0.000757f, +0.000069f, -0.000029f, +0.000801f, + +0.000622f, +0.000544f, -0.000630f, -0.000547f, -0.000690f, -0.000185f, +0.001171f, -0.000452f, +0.001171f, +0.000072f, + -0.000884f, +0.000234f, +0.000088f, -0.000500f, -0.000293f, +0.000290f, +0.000222f, +0.000244f, +0.000036f, +0.000135f, + -0.000163f, -0.000616f, +0.000362f, -0.000178f, +0.000170f, -0.000177f, +0.000091f, -0.000052f, +0.000028f, +0.000144f, + +0.000144f, +0.000150f, +0.000220f, +0.000061f, -0.000090f, -0.000173f, -0.000009f, +0.000017f, +0.000068f, -0.000178f, + -0.000012f, -0.000103f, +0.000082f, -0.000100f, -0.000091f, -0.000032f, +0.000000f, +0.000067f, +0.000092f, -0.000143f, + -0.000030f, -0.000051f, +0.000051f, +0.000007f, -0.000022f, +0.000128f + }, + { + +0.001747f, -0.001200f, -0.001932f, +0.000100f, +0.000365f, -0.000155f, +0.000590f, -0.000031f, -0.000069f, +0.000628f, + +0.001192f, +0.000785f, -0.003291f, -0.000097f, +0.008043f, -0.000439f, +0.001851f, -0.018801f, +0.014391f, +0.000671f, + +0.004072f, -0.000135f, -0.002718f, +0.001401f, -0.001313f, -0.001851f, -0.001323f, +0.000153f, +0.000327f, -0.000117f, + +0.000904f, +0.001270f, -0.000630f, -0.001028f, -0.001862f, -0.001611f, -0.000133f, +0.000706f, -0.000168f, -0.000163f, + +0.001412f, -0.001314f, +0.000673f, +0.000397f, -0.000111f, -0.000793f, -0.001119f, -0.000656f, +0.000426f, -0.000141f, + +0.001063f, -0.000003f, -0.000702f, +0.000624f, -0.000130f, -0.000167f, -0.000101f, -0.000433f, -0.000063f, +0.000327f, + -0.000578f, -0.000010f, +0.000025f, +0.000303f, -0.000083f, -0.000264f, +0.000387f, -0.000241f, -0.000009f, +0.000070f, + +0.000136f, +0.000258f, -0.000088f, -0.000378f, -0.000075f, -0.000157f, +0.000154f, -0.000040f, -0.000072f, -0.000050f, + -0.000065f, -0.000045f, -0.000036f, -0.000168f, +0.000162f, +0.000006f, -0.000101f, +0.000102f, -0.000128f, +0.000040f, + +0.000030f, -0.000172f, -0.000007f, +0.000096f, -0.000027f, -0.000003f + }, + { + -0.053451f, +0.100571f, -0.006781f, -0.005689f, -0.000741f, +0.000738f, -0.000852f, -0.000359f, +0.000355f, -0.001312f, + -0.000532f, +0.000861f, +0.001424f, +0.001526f, -0.002101f, +0.001408f, -0.000155f, +0.000156f, -0.000607f, +0.000179f, + -0.000313f, -0.000145f, +0.002139f, -0.000251f, +0.000701f, -0.000652f, -0.000896f, +0.000640f, -0.001653f, -0.000646f, + +0.001914f, -0.000183f, +0.001001f, -0.003997f, +0.001666f, -0.000510f, +0.001794f, +0.000941f, +0.000775f, +0.000048f, + -0.001570f, -0.000284f, -0.000044f, -0.000374f, +0.001411f, +0.000623f, +0.001393f, -0.000609f, -0.000331f, +0.000255f, + -0.000111f, +0.000025f, -0.000484f, -0.000310f, +0.000702f, -0.000102f, +0.000002f, -0.000562f, +0.000587f, +0.000338f, + -0.000388f, +0.000084f, -0.000227f, +0.000062f, +0.000249f, +0.000035f, -0.000100f, +0.000138f, +0.000292f, -0.000052f, + +0.000112f, +0.000104f, -0.000137f, -0.000147f, +0.000253f, -0.000271f, +0.000124f, +0.000150f, +0.000159f, +0.000004f, + -0.000115f, +0.000209f, -0.000051f, +0.000002f, +0.000043f, -0.000118f, +0.000067f, -0.000039f, +0.000046f, +0.000015f, + -0.000131f, -0.000009f, +0.000092f, +0.000120f, +0.000013f, -0.000111f + }, + { + +0.000163f, +0.001363f, +0.000161f, +0.000094f, -0.000431f, -0.000256f, +0.000338f, -0.000294f, +0.000093f, +0.000002f, + -0.000696f, +0.000571f, +0.001498f, +0.000085f, +0.002310f, +0.003427f, -0.000773f, +0.000355f, -0.002797f, +0.001744f, + -0.001455f, -0.004811f, -0.002138f, +0.003379f, -0.000695f, +0.000848f, -0.001224f, +0.000212f, -0.002237f, -0.000960f, + +0.002552f, -0.000640f, +0.000100f, +0.001339f, +0.000474f, +0.001511f, -0.000068f, -0.000168f, +0.000148f, -0.000636f, + +0.000450f, +0.000666f, +0.000093f, -0.000857f, -0.000375f, +0.000521f, +0.000431f, +0.000317f, +0.000371f, +0.000045f, + +0.000511f, -0.000099f, +0.000118f, -0.000204f, +0.000135f, -0.000627f, +0.000265f, -0.000391f, -0.000361f, +0.000593f, + +0.000172f, +0.000855f, -0.000279f, +0.000200f, -0.000190f, +0.000507f, -0.000149f, -0.000192f, -0.000182f, +0.000373f, + +0.000169f, -0.000175f, -0.000130f, +0.000267f, -0.000236f, +0.000056f, +0.000040f, -0.000122f, -0.000077f, +0.000002f, + +0.000027f, +0.000057f, +0.000117f, -0.000018f, -0.000015f, -0.000055f, +0.000155f, +0.000088f, +0.000131f, +0.000030f, + +0.000099f, +0.000039f, -0.000038f, +0.000078f, +0.000043f, -0.000039f + }, + { + +0.026076f, -0.089216f, +0.005314f, +0.003242f, -0.000940f, -0.000149f, +0.000109f, -0.000945f, -0.000118f, -0.000080f, + -0.001079f, +0.000583f, +0.000522f, +0.000087f, +0.001723f, +0.001990f, -0.000612f, +0.001155f, -0.000584f, +0.000878f, + -0.000085f, -0.000504f, -0.002023f, +0.001201f, +0.001103f, +0.000868f, +0.000076f, +0.001244f, -0.000813f, -0.000790f, + -0.000943f, +0.000919f, -0.000126f, -0.000751f, -0.000053f, -0.002451f, -0.000747f, +0.000272f, +0.000030f, -0.000112f, + +0.000391f, -0.000633f, -0.000107f, +0.001220f, +0.000469f, -0.000149f, -0.000090f, +0.000895f, -0.001973f, -0.001614f, + +0.000419f, -0.000167f, +0.000479f, +0.000491f, -0.000479f, +0.000106f, -0.000224f, -0.000022f, +0.000508f, -0.000106f, + +0.000018f, -0.000389f, -0.000722f, +0.000241f, +0.000539f, -0.000476f, +0.000013f, -0.000113f, +0.000074f, +0.000268f, + -0.000002f, +0.000025f, +0.000157f, -0.000155f, -0.000055f, +0.000103f, -0.000032f, -0.000014f, +0.000226f, +0.000105f, + +0.000034f, +0.000116f, -0.000097f, +0.000065f, +0.000066f, -0.000010f, +0.000039f, -0.000043f, -0.000020f, -0.000036f, + +0.000055f, -0.000028f, -0.000055f, -0.000036f, +0.000016f, -0.000073f + }, + { + +0.000116f, -0.015679f, -0.001616f, +0.001362f, -0.000195f, +0.000458f, +0.000270f, +0.000083f, +0.000217f, -0.000039f, + -0.001003f, +0.002154f, +0.000156f, +0.005542f, +0.001387f, -0.000026f, +0.006504f, -0.003305f, -0.001971f, +0.005831f, + -0.001364f, -0.002181f, +0.001724f, +0.004062f, -0.001096f, -0.000155f, -0.004814f, +0.001341f, +0.000741f, -0.001338f, + -0.003412f, +0.000806f, +0.000830f, +0.001143f, +0.001009f, -0.000614f, +0.000955f, -0.002200f, -0.001073f, +0.000110f, + -0.000929f, +0.000113f, +0.000088f, -0.001023f, -0.000712f, +0.000611f, +0.000300f, +0.000699f, -0.001221f, +0.001033f, + -0.000060f, -0.000720f, +0.000411f, +0.000179f, -0.000075f, -0.000019f, -0.000184f, -0.000601f, +0.000312f, -0.000119f, + +0.000300f, +0.000597f, -0.000304f, +0.000171f, +0.000283f, +0.000231f, -0.000292f, -0.000062f, +0.000011f, -0.000124f, + +0.000106f, -0.000095f, -0.000118f, -0.000123f, -0.000123f, +0.000118f, +0.000149f, -0.000038f, +0.000083f, -0.000085f, + +0.000129f, +0.000113f, +0.000028f, +0.000005f, -0.000027f, +0.000078f, -0.000136f, +0.000011f, -0.000014f, -0.000123f, + +0.000038f, +0.000056f, -0.000000f, -0.000016f, -0.000060f, -0.000067f + }, + { + -0.011740f, -0.003104f, +0.004026f, +0.000190f, -0.001226f, -0.006375f, -0.004230f, +0.002543f, -0.003129f, -0.000831f, + +0.001805f, -0.003282f, +0.002238f, -0.000599f, -0.001056f, +0.002031f, -0.002926f, -0.000287f, -0.000389f, -0.000499f, + -0.002661f, +0.000987f, +0.000784f, -0.000052f, -0.001222f, +0.000113f, +0.000132f, -0.000170f, -0.001056f, +0.000109f, + -0.001438f, +0.000213f, +0.000372f, +0.000515f, -0.000587f, +0.001477f, -0.000853f, +0.000979f, +0.000337f, +0.000046f, + -0.001399f, -0.000249f, +0.001081f, -0.000024f, -0.000412f, -0.000648f, -0.000177f, +0.000291f, -0.000052f, -0.000851f, + +0.000488f, +0.000221f, -0.000692f, +0.000199f, +0.000457f, +0.000207f, +0.000206f, +0.000327f, -0.000093f, -0.000292f, + -0.000577f, +0.000024f, -0.000107f, +0.000366f, -0.000050f, -0.000416f, -0.000048f, +0.000029f, -0.000117f, +0.000228f, + -0.000263f, +0.000040f, -0.000216f, +0.000330f, -0.000099f, -0.000022f, -0.000053f, +0.000234f, +0.000041f, +0.000243f, + +0.000075f, +0.000115f, -0.000131f, -0.000131f, -0.000100f, -0.000145f, +0.000006f, +0.000058f, -0.000154f, -0.000031f, + +0.000031f, +0.000103f, +0.000038f, -0.000051f, -0.000059f, -0.000073f + }, + { + +0.001206f, -0.002932f, -0.001727f, +0.009838f, -0.000629f, -0.000823f, -0.000516f, -0.000343f, +0.000692f, -0.001125f, + +0.000702f, +0.002723f, -0.001297f, +0.001679f, -0.004655f, +0.003881f, +0.000713f, -0.008338f, -0.000985f, +0.005730f, + -0.000377f, -0.003052f, +0.002664f, -0.000783f, -0.001005f, +0.000730f, +0.000241f, -0.000011f, +0.000365f, +0.000395f, + -0.000632f, -0.000154f, -0.001576f, +0.000163f, -0.000577f, -0.000046f, +0.001389f, +0.000183f, +0.000434f, +0.000636f, + -0.001042f, +0.000116f, -0.000335f, -0.000422f, +0.000367f, -0.000810f, +0.001119f, +0.000146f, -0.000782f, +0.000138f, + +0.000273f, +0.000118f, +0.000022f, +0.000781f, +0.000527f, -0.000243f, -0.000310f, +0.000018f, -0.000074f, -0.000067f, + -0.000682f, +0.000020f, +0.000516f, -0.000093f, +0.000139f, -0.000013f, -0.000245f, -0.000206f, +0.000182f, -0.000147f, + -0.000002f, -0.000119f, -0.000204f, -0.000035f, -0.000115f, +0.000156f, +0.000099f, +0.000148f, -0.000043f, -0.000028f, + -0.000001f, -0.000063f, -0.000183f, +0.000085f, +0.000113f, -0.000063f, +0.000067f, +0.000077f, +0.000033f, +0.000004f, + +0.000037f, +0.000021f, -0.000001f, -0.000037f, -0.000023f, +0.000031f + }, + { + +0.010818f, +0.005912f, +0.001253f, +0.000606f, -0.004722f, +0.004512f, -0.001755f, -0.000424f, +0.000008f, +0.001054f, + +0.002402f, -0.001511f, +0.001703f, +0.002639f, -0.002320f, -0.000002f, -0.000956f, -0.001496f, -0.000066f, +0.000906f, + -0.000774f, -0.000909f, -0.000514f, -0.000916f, +0.000931f, -0.000194f, -0.000133f, +0.001025f, -0.000372f, +0.000457f, + +0.001091f, -0.000218f, -0.000576f, -0.000602f, +0.000850f, +0.001296f, +0.000571f, +0.000796f, -0.000626f, +0.000787f, + -0.000393f, +0.001164f, -0.001332f, +0.002581f, -0.000028f, -0.000043f, +0.000944f, -0.000157f, -0.000080f, +0.000179f, + +0.000022f, +0.000888f, -0.000284f, +0.000369f, -0.000130f, +0.000223f, -0.000140f, -0.000399f, +0.000268f, -0.000146f, + +0.000037f, +0.000513f, +0.000073f, -0.000124f, +0.000097f, +0.000025f, -0.000021f, +0.000319f, +0.000196f, -0.000453f, + +0.000165f, +0.000137f, -0.000071f, -0.000177f, -0.000066f, +0.000167f, -0.000071f, +0.000094f, -0.000062f, -0.000166f, + +0.000033f, -0.000113f, -0.000060f, -0.000123f, -0.000052f, +0.000109f, +0.000102f, -0.000081f, -0.000003f, -0.000080f, + -0.000001f, -0.000050f, -0.000004f, +0.000072f, -0.000072f, -0.000048f + }, + { + +0.000385f, -0.006916f, +0.002131f, -0.002909f, -0.001433f, +0.000185f, -0.000801f, -0.000210f, -0.000131f, +0.001167f, + -0.001028f, +0.003444f, +0.002882f, -0.027444f, -0.000081f, -0.000551f, +0.000570f, +0.001810f, +0.001712f, -0.000996f, + +0.001154f, -0.011650f, +0.005267f, +0.000946f, +0.006251f, -0.002735f, -0.001223f, +0.000136f, -0.001445f, -0.000355f, + +0.000809f, +0.000905f, +0.000446f, -0.001067f, +0.001190f, +0.000422f, +0.000920f, -0.000572f, -0.000244f, +0.000253f, + +0.000733f, +0.000361f, -0.000475f, +0.001579f, -0.000135f, -0.000642f, +0.000334f, -0.000781f, +0.000357f, -0.000696f, + -0.001175f, -0.000155f, +0.000230f, +0.000095f, +0.000622f, -0.000165f, -0.000152f, +0.000570f, -0.000069f, -0.000136f, + +0.000732f, -0.000371f, -0.000415f, -0.000234f, +0.000187f, -0.000045f, +0.000297f, +0.000075f, -0.000185f, +0.000293f, + -0.000030f, +0.000272f, -0.000437f, +0.000213f, +0.000136f, -0.000365f, -0.000126f, -0.000157f, +0.000361f, -0.000042f, + +0.000200f, +0.000039f, +0.000065f, +0.000123f, -0.000189f, +0.000149f, -0.000118f, +0.000059f, -0.000066f, +0.000043f, + -0.000010f, -0.000044f, -0.000139f, +0.000161f, -0.000084f, -0.000073f + }, + { + +0.013864f, -0.028435f, -0.000708f, -0.001612f, -0.000363f, -0.002399f, -0.001820f, -0.001344f, +0.001275f, +0.001576f, + +0.001236f, +0.000414f, +0.001757f, +0.002719f, +0.009743f, +0.005087f, -0.005617f, +0.001076f, +0.001632f, -0.003209f, + -0.000416f, +0.000405f, +0.000516f, -0.001619f, +0.000939f, -0.001785f, -0.000025f, -0.001052f, +0.000403f, -0.001289f, + +0.000786f, -0.000002f, +0.000026f, +0.001305f, -0.002573f, +0.001465f, -0.000920f, +0.000501f, -0.000015f, +0.000792f, + +0.000860f, +0.001295f, -0.000939f, +0.000434f, +0.000447f, -0.000413f, +0.000396f, -0.000658f, +0.000507f, +0.000006f, + +0.001344f, +0.000018f, -0.000335f, +0.000492f, +0.000259f, +0.000357f, +0.000128f, -0.000082f, -0.000295f, -0.000566f, + +0.000505f, -0.000161f, -0.000114f, +0.000252f, -0.000179f, +0.000051f, +0.000285f, -0.000026f, -0.000140f, +0.000083f, + +0.000199f, +0.000098f, -0.000006f, +0.000013f, -0.000150f, +0.000293f, -0.000101f, -0.000017f, +0.000072f, +0.000133f, + -0.000106f, +0.000033f, +0.000187f, +0.000010f, -0.000064f, +0.000050f, -0.000140f, -0.000070f, +0.000015f, -0.000090f, + +0.000034f, +0.000078f, -0.000055f, +0.000019f, -0.000018f, -0.000116f + }, + { + -0.000659f, -0.004449f, -0.000690f, +0.001866f, -0.001132f, +0.000697f, +0.000095f, -0.000064f, +0.000030f, +0.001794f, + -0.000221f, -0.000286f, +0.001166f, +0.010072f, +0.014230f, +0.007375f, +0.002461f, +0.001143f, +0.001573f, +0.009610f, + -0.001672f, -0.002807f, +0.001807f, -0.003051f, +0.000492f, -0.000327f, -0.000438f, +0.001375f, -0.000082f, +0.001735f, + -0.002519f, +0.001257f, -0.000490f, +0.000436f, -0.000363f, -0.001534f, -0.000292f, -0.000644f, -0.000593f, +0.000867f, + -0.001526f, -0.000569f, -0.000102f, -0.000096f, +0.000469f, +0.000785f, -0.000477f, +0.000870f, -0.000593f, -0.000338f, + +0.000611f, -0.000130f, -0.000112f, +0.000109f, +0.000037f, +0.000381f, -0.000128f, -0.000334f, -0.000030f, +0.000060f, + +0.000349f, -0.000090f, +0.000118f, -0.000343f, +0.000336f, +0.000358f, +0.000269f, -0.000002f, -0.000040f, +0.000301f, + +0.000227f, +0.000088f, -0.000081f, +0.000130f, -0.000089f, +0.000318f, +0.000022f, -0.000125f, -0.000069f, +0.000137f, + +0.000076f, +0.000043f, +0.000037f, -0.000157f, -0.000109f, -0.000032f, -0.000096f, -0.000103f, +0.000087f, +0.000004f, + -0.000041f, +0.000098f, -0.000035f, -0.000134f, +0.000055f, -0.000018f + } + }, + { + { + -0.017767f, +0.114503f, +0.000172f, -0.001411f, +0.002357f, -0.000796f, +0.000302f, +0.001854f, -0.000840f, +0.000633f, + +0.001971f, +0.000528f, +0.000165f, +0.000446f, -0.000781f, -0.001368f, -0.000189f, -0.000714f, +0.001762f, -0.000719f, + -0.001052f, +0.000099f, -0.000023f, -0.001281f, -0.000773f, -0.000878f, +0.001102f, -0.000255f, -0.001099f, +0.000929f, + -0.000940f, -0.000982f, +0.000536f, +0.000955f, -0.000416f, -0.000457f, -0.000065f, +0.000193f, +0.000244f, +0.001221f, + +0.000060f, -0.000169f, +0.000030f, -0.000933f, -0.000223f, +0.000340f, +0.000437f, +0.000436f, -0.000399f, +0.000096f, + +0.000222f, +0.000136f, -0.000376f, +0.000076f, -0.000262f, +0.000469f, -0.000042f, -0.000092f, -0.000214f, -0.000210f, + +0.000305f, -0.000249f, -0.000198f, -0.000220f, -0.000041f, +0.000227f, +0.000053f, +0.000147f, -0.000098f, -0.000017f, + -0.000006f, -0.000127f, +0.000103f, +0.000022f, -0.000149f, -0.000097f, +0.000123f, +0.000192f, -0.000085f, +0.000193f, + +0.000092f, +0.000096f, +0.000005f, +0.000149f, +0.000009f, -0.000023f, +0.000128f, +0.000049f, +0.000076f, +0.000035f, + -0.000020f, -0.000095f, -0.000011f, -0.000017f, -0.000021f, -0.000024f + }, + { + -0.001419f, -0.028599f, +0.008311f, +0.004160f, +0.002975f, -0.000239f, -0.000562f, +0.000960f, +0.000007f, +0.000482f, + -0.000487f, +0.000073f, -0.002025f, -0.001800f, -0.000599f, -0.002104f, -0.001021f, -0.001212f, +0.004581f, +0.006008f, + -0.001865f, -0.001498f, -0.000885f, -0.001632f, -0.003939f, +0.002625f, -0.000232f, +0.001749f, -0.001740f, -0.001626f, + -0.001065f, +0.000314f, +0.002580f, +0.001919f, +0.000557f, +0.001019f, -0.001101f, +0.000599f, -0.000194f, +0.000474f, + -0.000650f, +0.000473f, +0.000510f, +0.000526f, +0.000215f, +0.000332f, +0.000549f, +0.000530f, -0.000054f, +0.000528f, + -0.000123f, +0.000158f, +0.000006f, +0.000738f, -0.000077f, -0.000473f, -0.000086f, -0.000040f, +0.000075f, -0.000071f, + -0.000047f, +0.000317f, +0.000155f, +0.000184f, -0.000021f, -0.000061f, -0.000093f, +0.000540f, +0.000063f, -0.000213f, + +0.000122f, +0.000412f, -0.000029f, +0.000117f, +0.000169f, +0.000245f, -0.000051f, -0.000119f, -0.000085f, -0.000067f, + +0.000021f, -0.000070f, -0.000075f, -0.000027f, -0.000019f, +0.000046f, +0.000057f, -0.000005f, +0.000049f, +0.000046f, + -0.000077f, +0.000022f, -0.000011f, +0.000094f, -0.000003f, -0.000020f + }, + { + +0.005992f, +0.058243f, -0.016926f, +0.000211f, -0.000842f, +0.001801f, +0.000111f, -0.000792f, -0.000185f, -0.000780f, + -0.002288f, +0.000428f, -0.001499f, +0.001925f, +0.003509f, -0.000334f, -0.000922f, +0.000006f, +0.005808f, -0.001235f, + +0.001382f, +0.002074f, -0.002028f, -0.000973f, +0.000811f, -0.002108f, -0.000555f, +0.000912f, +0.000479f, +0.001896f, + -0.000823f, -0.001781f, +0.002532f, +0.000905f, +0.000059f, +0.000302f, +0.001317f, -0.000420f, -0.001109f, -0.001001f, + +0.000602f, -0.000048f, -0.000115f, +0.000263f, -0.000416f, -0.000247f, +0.000030f, -0.000216f, -0.000072f, +0.000409f, + -0.000717f, +0.000962f, -0.000421f, +0.000342f, +0.000375f, -0.000080f, +0.000086f, +0.000200f, -0.000273f, -0.000335f, + -0.000040f, +0.000053f, +0.000517f, +0.000237f, -0.000146f, +0.000040f, +0.000010f, -0.000036f, +0.000130f, +0.000085f, + +0.000154f, -0.000135f, +0.000018f, +0.000069f, +0.000106f, +0.000002f, -0.000004f, -0.000122f, +0.000239f, +0.000068f, + -0.000033f, +0.000090f, -0.000038f, -0.000173f, -0.000044f, +0.000083f, +0.000005f, -0.000013f, +0.000014f, +0.000087f, + -0.000023f, -0.000052f, -0.000027f, +0.000042f, -0.000051f, +0.000033f + }, + { + +0.020302f, -0.021038f, +0.003148f, +0.009244f, +0.000803f, +0.000800f, +0.000782f, -0.000454f, +0.000655f, +0.001461f, + +0.000281f, -0.001849f, +0.002492f, -0.001423f, +0.000437f, -0.000192f, +0.001571f, +0.001024f, -0.001567f, -0.000957f, + -0.000691f, +0.000300f, +0.000144f, +0.000013f, -0.001330f, -0.001450f, -0.001920f, +0.000858f, -0.000108f, +0.001192f, + +0.000075f, -0.001251f, +0.000549f, +0.000018f, -0.000310f, +0.000636f, -0.000563f, +0.000179f, -0.000229f, +0.000322f, + +0.000398f, +0.000115f, +0.000282f, -0.000412f, -0.001179f, +0.000771f, +0.000678f, +0.000247f, +0.000367f, -0.000543f, + -0.000144f, +0.000312f, -0.000319f, +0.000028f, +0.000120f, +0.000118f, +0.000379f, -0.000057f, +0.000204f, -0.000263f, + +0.000195f, -0.000054f, +0.000019f, -0.000035f, +0.000371f, -0.000050f, +0.000060f, +0.000134f, -0.000113f, +0.000231f, + +0.000055f, -0.000025f, +0.000025f, +0.000007f, +0.000103f, -0.000171f, +0.000128f, -0.000097f, -0.000026f, +0.000008f, + +0.000062f, -0.000064f, -0.000019f, -0.000114f, -0.000099f, -0.000093f, -0.000026f, +0.000067f, -0.000079f, -0.000058f, + +0.000046f, +0.000041f, -0.000064f, +0.000080f, +0.000022f, +0.000049f + }, + { + -0.001258f, -0.000373f, -0.001097f, +0.000553f, +0.000610f, -0.000512f, +0.000078f, +0.001638f, -0.000966f, +0.000427f, + +0.002022f, -0.000351f, -0.000158f, +0.003435f, +0.003268f, -0.005500f, -0.007905f, +0.006284f, +0.001496f, +0.002694f, + -0.000594f, +0.000866f, +0.002303f, -0.002697f, -0.004386f, -0.001160f, +0.000063f, +0.001668f, -0.001909f, +0.001322f, + +0.000363f, +0.001045f, -0.001732f, +0.000485f, -0.001241f, -0.000665f, -0.000725f, +0.000027f, -0.000586f, +0.000526f, + +0.000234f, +0.000095f, +0.000547f, +0.001173f, -0.000769f, -0.000263f, -0.000557f, -0.000516f, +0.000725f, +0.000542f, + +0.000382f, +0.000134f, -0.000619f, +0.000697f, -0.000090f, -0.000281f, -0.000367f, +0.000122f, +0.000031f, +0.000174f, + -0.000332f, -0.000261f, -0.000166f, +0.000255f, +0.000604f, +0.000199f, +0.000068f, -0.000328f, +0.000038f, +0.000134f, + +0.000167f, +0.000004f, -0.000209f, -0.000259f, -0.000061f, -0.000215f, +0.000151f, +0.000046f, +0.000126f, +0.000042f, + -0.000013f, -0.000038f, -0.000205f, -0.000040f, +0.000052f, -0.000000f, +0.000033f, -0.000071f, -0.000025f, +0.000048f, + +0.000017f, -0.000028f, -0.000017f, +0.000043f, -0.000025f, +0.000015f + }, + { + +0.037094f, -0.046989f, +0.002505f, -0.004275f, -0.000985f, -0.000447f, +0.000290f, +0.000549f, -0.001580f, +0.000202f, + +0.002156f, +0.000339f, +0.001245f, -0.001018f, -0.000334f, +0.000581f, +0.000516f, -0.000088f, -0.000398f, +0.001028f, + +0.000493f, +0.000119f, +0.000955f, -0.000256f, -0.000271f, +0.000524f, -0.001471f, +0.000996f, -0.001460f, +0.000025f, + +0.000375f, +0.000186f, -0.001105f, -0.000913f, -0.001502f, +0.000708f, +0.001276f, +0.001314f, -0.000050f, +0.000173f, + -0.000022f, -0.000204f, -0.000881f, +0.000560f, +0.001500f, +0.001173f, +0.000085f, -0.000011f, -0.000344f, +0.000533f, + -0.000655f, -0.000097f, -0.000257f, +0.000102f, +0.000532f, -0.000188f, +0.000352f, +0.000302f, +0.000030f, -0.000089f, + -0.000290f, -0.000130f, +0.000423f, +0.000274f, +0.000208f, -0.000235f, +0.000055f, +0.000299f, +0.000066f, +0.000305f, + +0.000028f, +0.000242f, -0.000082f, -0.000123f, +0.000101f, -0.000184f, +0.000380f, -0.000008f, +0.000013f, -0.000030f, + -0.000099f, +0.000020f, -0.000241f, -0.000067f, +0.000060f, +0.000056f, +0.000049f, +0.000059f, -0.000025f, -0.000056f, + -0.000022f, +0.000075f, +0.000065f, +0.000013f, -0.000042f, -0.000050f + }, + { + -0.000935f, +0.001793f, +0.002666f, -0.001217f, -0.000224f, -0.000122f, +0.000252f, +0.000214f, +0.000210f, -0.000531f, + +0.000042f, +0.000059f, +0.002406f, -0.003765f, -0.001110f, +0.001408f, -0.002439f, +0.000869f, -0.001163f, -0.004679f, + -0.001844f, -0.002210f, -0.001723f, -0.001102f, +0.000794f, +0.000666f, -0.003678f, +0.001172f, -0.001809f, -0.000703f, + +0.000995f, -0.000205f, -0.000676f, +0.001991f, +0.000828f, +0.001197f, -0.000002f, -0.001035f, -0.000267f, +0.000554f, + +0.000672f, -0.000516f, +0.000183f, -0.000650f, -0.000097f, +0.000517f, +0.000803f, +0.000462f, +0.000166f, +0.000186f, + -0.000039f, +0.000138f, +0.000179f, -0.000300f, -0.000200f, -0.000196f, +0.000061f, -0.000254f, -0.000415f, +0.000133f, + +0.000262f, +0.000337f, -0.000353f, -0.000006f, +0.000155f, +0.000239f, -0.000022f, +0.000307f, -0.000037f, -0.000100f, + -0.000136f, +0.000088f, +0.000217f, +0.000069f, -0.000024f, +0.000203f, +0.000051f, +0.000164f, -0.000041f, +0.000066f, + +0.000036f, +0.000118f, +0.000004f, -0.000034f, +0.000019f, +0.000028f, +0.000052f, -0.000042f, +0.000093f, -0.000015f, + -0.000053f, -0.000063f, +0.000026f, +0.000096f, -0.000025f, -0.000051f + }, + { + -0.021797f, -0.019020f, -0.004493f, +0.002305f, -0.000865f, +0.000090f, +0.000439f, -0.001770f, -0.000309f, +0.000179f, + -0.000484f, +0.000066f, +0.000022f, +0.002083f, +0.001043f, +0.002079f, -0.000115f, +0.000203f, -0.000446f, +0.000431f, + +0.000587f, -0.000965f, -0.000374f, +0.000738f, -0.000593f, +0.001541f, +0.001330f, +0.000366f, +0.000415f, -0.001347f, + +0.000001f, -0.000942f, -0.000196f, +0.000513f, +0.000553f, -0.000713f, -0.000039f, +0.000285f, -0.000595f, -0.000078f, + +0.000222f, -0.000097f, +0.000086f, -0.000095f, -0.000053f, +0.001611f, -0.000916f, -0.000869f, -0.001307f, -0.000581f, + +0.000403f, +0.000253f, -0.000169f, -0.000394f, +0.000354f, -0.000147f, +0.000027f, -0.000018f, +0.000361f, -0.000011f, + -0.000065f, -0.000370f, +0.000000f, -0.000037f, -0.000204f, +0.000001f, -0.000082f, -0.000213f, +0.000185f, +0.000025f, + +0.000109f, +0.000039f, -0.000095f, +0.000082f, +0.000104f, -0.000101f, -0.000015f, +0.000261f, +0.000015f, +0.000039f, + +0.000046f, +0.000054f, -0.000144f, +0.000021f, +0.000035f, -0.000039f, +0.000076f, +0.000153f, -0.000007f, -0.000034f, + -0.000008f, -0.000092f, -0.000012f, +0.000084f, +0.000044f, -0.000045f + }, + { + -0.001700f, -0.005506f, +0.001119f, -0.001448f, +0.000571f, +0.000040f, -0.000468f, +0.000773f, +0.000660f, +0.000306f, + -0.000050f, +0.000190f, -0.000249f, -0.000687f, +0.011405f, -0.002881f, +0.001330f, +0.001623f, -0.000982f, +0.002069f, + +0.000772f, -0.003432f, +0.003138f, +0.002261f, +0.002301f, -0.004208f, -0.000409f, +0.000213f, -0.002118f, +0.000203f, + -0.001991f, +0.000362f, +0.001185f, -0.000137f, +0.001451f, +0.000353f, -0.000205f, -0.001276f, +0.000117f, -0.001201f, + +0.000764f, +0.000170f, -0.000077f, +0.000589f, +0.000093f, +0.000143f, +0.000894f, -0.000029f, +0.000122f, -0.000191f, + -0.000549f, -0.000504f, -0.000036f, +0.000205f, +0.000361f, -0.000192f, +0.000305f, +0.000003f, +0.000287f, -0.000256f, + -0.000106f, +0.000071f, +0.000352f, -0.000352f, -0.000316f, -0.000037f, -0.000250f, -0.000178f, -0.000022f, +0.000004f, + -0.000137f, -0.000339f, -0.000066f, -0.000153f, +0.000293f, +0.000034f, +0.000059f, +0.000083f, -0.000014f, -0.000009f, + -0.000010f, +0.000021f, -0.000178f, -0.000007f, +0.000088f, +0.000075f, +0.000010f, +0.000209f, +0.000036f, -0.000133f, + -0.000004f, +0.000090f, -0.000028f, +0.000051f, -0.000044f, +0.000026f + }, + { + +0.006524f, -0.031766f, +0.009426f, -0.000506f, -0.001691f, -0.002554f, -0.008350f, -0.000858f, -0.000975f, -0.001361f, + +0.002340f, -0.000183f, +0.000812f, -0.000226f, +0.000486f, +0.000204f, -0.003306f, +0.001908f, -0.000872f, -0.002753f, + -0.000302f, +0.000675f, +0.000878f, -0.001192f, +0.000173f, -0.001064f, +0.000093f, -0.000713f, +0.000683f, -0.001504f, + -0.000472f, -0.000862f, -0.000534f, +0.001747f, +0.000856f, -0.000222f, +0.000461f, -0.000336f, +0.000492f, -0.000548f, + +0.000117f, +0.000070f, +0.001105f, -0.000217f, -0.000287f, +0.000730f, +0.000335f, -0.000164f, +0.000164f, +0.000857f, + +0.000004f, +0.000009f, +0.000337f, -0.000173f, -0.000186f, +0.000364f, +0.000341f, +0.000122f, -0.000141f, -0.000264f, + -0.000817f, -0.000162f, +0.000168f, +0.000273f, +0.000048f, -0.000405f, -0.000086f, -0.000070f, -0.000097f, +0.000278f, + +0.000073f, -0.000239f, -0.000143f, +0.000295f, -0.000063f, +0.000036f, -0.000050f, +0.000114f, +0.000110f, +0.000045f, + -0.000050f, +0.000036f, +0.000018f, -0.000024f, -0.000109f, +0.000114f, +0.000111f, +0.000070f, +0.000030f, -0.000023f, + +0.000039f, +0.000068f, -0.000052f, -0.000077f, -0.000018f, +0.000079f + }, + { + -0.000661f, -0.002606f, +0.005450f, +0.003135f, +0.000174f, +0.000413f, -0.002174f, -0.000426f, +0.000112f, +0.001382f, + -0.000064f, +0.000920f, -0.001054f, -0.001859f, +0.000217f, -0.000662f, -0.001415f, -0.004177f, +0.000885f, +0.004929f, + -0.004132f, -0.000941f, +0.000276f, -0.000717f, +0.000338f, +0.000802f, +0.001001f, +0.000224f, +0.000936f, -0.001037f, + -0.000580f, -0.001389f, -0.000778f, -0.001304f, +0.001778f, +0.001051f, -0.000749f, +0.000546f, +0.000113f, -0.000092f, + -0.000270f, -0.000372f, +0.000349f, +0.000744f, -0.000384f, -0.000203f, +0.000622f, -0.000074f, -0.000055f, -0.000165f, + +0.000535f, +0.000064f, +0.000100f, -0.000241f, +0.000039f, +0.000115f, -0.000072f, -0.000224f, +0.000258f, -0.000296f, + -0.000272f, +0.000156f, +0.000017f, -0.000065f, +0.000065f, +0.000310f, -0.000093f, +0.000055f, +0.000213f, -0.000152f, + +0.000018f, -0.000074f, -0.000152f, -0.000085f, +0.000101f, +0.000057f, -0.000184f, -0.000183f, -0.000081f, +0.000098f, + -0.000036f, +0.000011f, -0.000035f, -0.000027f, -0.000107f, -0.000099f, +0.000098f, +0.000086f, -0.000105f, -0.000123f, + +0.000082f, +0.000034f, -0.000049f, +0.000014f, +0.000017f, +0.000021f + }, + { + -0.002172f, +0.026331f, -0.001851f, -0.000637f, +0.000153f, -0.000628f, +0.000228f, -0.000610f, +0.000862f, +0.000535f, + -0.000553f, -0.002486f, -0.000221f, +0.003144f, -0.000844f, +0.000817f, -0.002913f, -0.001882f, -0.000007f, +0.000603f, + -0.001186f, +0.000536f, -0.000229f, -0.000219f, -0.001175f, +0.000970f, -0.000271f, +0.002098f, -0.000410f, +0.000167f, + -0.000251f, +0.000612f, -0.000883f, -0.001122f, +0.000870f, +0.000434f, -0.000413f, -0.000721f, -0.000757f, +0.001067f, + +0.000453f, -0.000257f, +0.001367f, +0.001055f, +0.000324f, -0.000237f, +0.000654f, -0.000005f, -0.000229f, +0.000171f, + +0.000644f, +0.000523f, +0.000292f, +0.000258f, +0.000187f, -0.000085f, -0.000089f, -0.000435f, +0.000326f, -0.000507f, + +0.000434f, -0.000050f, +0.000215f, +0.000020f, +0.000292f, -0.000315f, -0.000071f, +0.000016f, +0.000045f, -0.000078f, + +0.000207f, -0.000088f, -0.000068f, +0.000039f, -0.000037f, +0.000108f, -0.000064f, +0.000027f, -0.000177f, -0.000133f, + -0.000070f, +0.000069f, -0.000003f, -0.000018f, -0.000058f, +0.000133f, -0.000060f, +0.000012f, -0.000022f, -0.000000f, + +0.000082f, +0.000015f, +0.000114f, -0.000051f, -0.000037f, +0.000036f + }, + { + +0.000136f, -0.006038f, +0.001279f, -0.002179f, +0.000699f, -0.000250f, +0.000645f, -0.000813f, +0.000305f, -0.001268f, + +0.000618f, +0.004187f, -0.008717f, -0.008885f, +0.000409f, +0.001679f, -0.001096f, +0.004166f, +0.000316f, -0.000342f, + -0.007748f, +0.000960f, +0.001697f, +0.000603f, +0.005007f, +0.000904f, -0.003567f, +0.001832f, -0.001214f, +0.001499f, + -0.001095f, +0.001854f, -0.000562f, -0.000745f, +0.000482f, -0.000727f, +0.000610f, +0.000168f, +0.000091f, +0.000346f, + +0.000475f, +0.000558f, +0.000326f, +0.000610f, -0.000388f, +0.000194f, +0.000704f, +0.000244f, -0.000884f, -0.000353f, + -0.000426f, +0.000250f, +0.000452f, +0.000179f, +0.000694f, +0.000192f, +0.000095f, +0.000273f, -0.000142f, -0.000191f, + -0.000314f, -0.000085f, +0.000259f, +0.000086f, +0.000059f, +0.000137f, -0.000015f, +0.000112f, -0.000071f, +0.000134f, + +0.000079f, -0.000025f, +0.000040f, -0.000077f, +0.000107f, -0.000022f, +0.000134f, -0.000120f, +0.000040f, +0.000186f, + -0.000021f, -0.000106f, +0.000007f, -0.000131f, -0.000136f, +0.000043f, +0.000042f, +0.000138f, -0.000119f, -0.000030f, + -0.000117f, +0.000044f, +0.000119f, +0.000101f, -0.000122f, +0.000023f + }, + { + -0.009896f, +0.006933f, +0.001776f, -0.009048f, -0.000352f, -0.002900f, -0.004723f, +0.000691f, -0.000884f, +0.002288f, + -0.000400f, +0.001424f, +0.000755f, +0.003515f, +0.012136f, +0.000231f, -0.002693f, +0.000225f, -0.001154f, -0.001219f, + -0.000364f, +0.000396f, +0.000688f, +0.000816f, +0.001116f, -0.001244f, +0.000000f, -0.000159f, -0.000623f, -0.000354f, + -0.000368f, +0.000927f, -0.000861f, -0.001109f, +0.000090f, -0.000402f, -0.000693f, -0.000460f, -0.000634f, +0.000723f, + +0.001754f, +0.000448f, +0.000318f, -0.000257f, -0.000033f, -0.000484f, -0.000578f, +0.000217f, -0.000203f, +0.000642f, + +0.000906f, +0.000442f, -0.000172f, -0.000033f, -0.000111f, -0.000148f, +0.000006f, -0.000059f, -0.000043f, -0.000223f, + -0.000051f, -0.000051f, +0.000177f, -0.000303f, -0.000412f, -0.000076f, -0.000065f, +0.000004f, +0.000134f, -0.000033f, + +0.000059f, +0.000072f, -0.000037f, +0.000201f, -0.000183f, -0.000055f, -0.000073f, +0.000094f, -0.000055f, -0.000143f, + -0.000152f, -0.000052f, +0.000010f, -0.000148f, +0.000069f, -0.000136f, -0.000108f, +0.000110f, +0.000062f, -0.000130f, + +0.000051f, +0.000054f, -0.000082f, -0.000041f, -0.000037f, +0.000004f + }, + { + +0.000883f, -0.006375f, -0.000483f, +0.001895f, -0.000356f, +0.000053f, -0.000420f, -0.000065f, +0.000085f, +0.002214f, + -0.000757f, +0.001649f, -0.002233f, +0.016884f, +0.019388f, +0.005387f, +0.001507f, -0.000335f, +0.004574f, +0.001622f, + -0.001167f, +0.001350f, +0.000309f, -0.002454f, -0.000416f, +0.001787f, -0.001005f, +0.000102f, +0.000141f, -0.000419f, + -0.000458f, +0.000050f, +0.000325f, +0.000136f, +0.000511f, -0.001030f, -0.000123f, -0.000027f, -0.001109f, +0.000130f, + -0.000011f, +0.000424f, -0.000264f, +0.000014f, +0.000295f, +0.000478f, -0.000361f, -0.000203f, +0.000449f, +0.000172f, + +0.000115f, +0.000412f, +0.000482f, +0.000032f, -0.000062f, +0.000424f, -0.000187f, +0.000277f, +0.000106f, +0.000506f, + +0.000618f, -0.000048f, -0.000436f, +0.000042f, +0.000516f, +0.000264f, +0.000009f, -0.000209f, +0.000186f, +0.000210f, + +0.000188f, +0.000043f, +0.000258f, +0.000023f, +0.000024f, +0.000333f, -0.000050f, +0.000042f, +0.000012f, +0.000217f, + -0.000095f, -0.000066f, -0.000173f, -0.000121f, +0.000054f, -0.000173f, +0.000055f, -0.000101f, -0.000060f, +0.000056f, + +0.000015f, +0.000014f, -0.000058f, +0.000008f, +0.000032f, -0.000061f + } + }, + { + { + +0.009236f, +0.110738f, -0.049293f, +0.000469f, +0.007619f, -0.000835f, +0.000197f, +0.003063f, -0.000387f, +0.000444f, + +0.000636f, +0.000211f, +0.000405f, -0.000830f, -0.001662f, -0.002099f, +0.000007f, +0.000599f, +0.000368f, +0.000452f, + -0.000987f, -0.001452f, -0.001758f, +0.000366f, -0.000002f, -0.001283f, +0.000904f, -0.000132f, -0.001010f, +0.001420f, + -0.001234f, -0.000906f, +0.000340f, +0.000858f, -0.000406f, -0.000582f, -0.000630f, +0.000641f, -0.000119f, +0.000957f, + +0.000370f, +0.000789f, +0.000755f, -0.000659f, +0.000235f, -0.000102f, +0.000722f, -0.000128f, -0.000784f, +0.000380f, + +0.000157f, +0.000166f, -0.000525f, -0.000182f, -0.000419f, +0.000216f, -0.000338f, -0.000360f, -0.000515f, -0.000236f, + +0.000084f, -0.000203f, -0.000204f, -0.000153f, +0.000114f, +0.000021f, +0.000038f, +0.000034f, -0.000214f, +0.000074f, + +0.000203f, +0.000075f, +0.000066f, -0.000128f, -0.000251f, -0.000155f, +0.000017f, +0.000030f, +0.000056f, +0.000157f, + +0.000086f, +0.000009f, -0.000142f, +0.000040f, -0.000038f, +0.000117f, -0.000098f, -0.000074f, +0.000105f, +0.000111f, + -0.000022f, -0.000013f, -0.000057f, -0.000070f, -0.000039f, +0.000013f + }, + { + -0.000416f, -0.031612f, +0.003433f, +0.000711f, +0.001386f, -0.000873f, -0.001797f, +0.001479f, +0.000073f, +0.000183f, + -0.001028f, +0.000983f, -0.001508f, -0.002929f, -0.003856f, +0.001338f, +0.004101f, -0.000731f, -0.005639f, -0.002533f, + -0.005033f, -0.001149f, +0.000955f, -0.000792f, -0.002601f, +0.002787f, -0.000715f, +0.000338f, -0.001082f, -0.000356f, + -0.001353f, -0.001453f, +0.001128f, +0.000896f, +0.000696f, +0.001581f, -0.000031f, +0.001432f, +0.000312f, +0.000212f, + -0.000218f, +0.000433f, -0.000662f, -0.000716f, +0.000683f, +0.000336f, -0.000212f, -0.000217f, +0.000286f, +0.000574f, + -0.000262f, +0.000355f, -0.000003f, +0.000379f, -0.000461f, -0.000324f, -0.000398f, -0.000118f, +0.000193f, +0.000217f, + +0.000112f, +0.000163f, +0.000067f, -0.000069f, +0.000035f, +0.000116f, -0.000062f, +0.000283f, +0.000014f, -0.000011f, + +0.000113f, -0.000013f, -0.000179f, -0.000054f, +0.000175f, +0.000155f, -0.000024f, +0.000094f, +0.000110f, -0.000068f, + -0.000027f, -0.000014f, +0.000029f, -0.000012f, +0.000073f, +0.000125f, -0.000019f, -0.000060f, +0.000066f, -0.000087f, + -0.000114f, +0.000035f, +0.000042f, +0.000064f, -0.000023f, -0.000037f + }, + { + -0.001838f, +0.078249f, +0.010426f, +0.008956f, -0.000434f, +0.000485f, +0.000409f, -0.000029f, +0.000717f, +0.001146f, + +0.000516f, +0.001676f, -0.000634f, -0.001600f, -0.000388f, +0.001001f, +0.001160f, +0.002653f, +0.004056f, -0.002625f, + -0.000089f, +0.001038f, -0.002178f, +0.000333f, +0.002012f, -0.001904f, -0.000803f, +0.000741f, -0.000370f, +0.001364f, + -0.000348f, -0.002042f, +0.001248f, +0.000658f, -0.000753f, -0.000410f, +0.000524f, +0.000965f, -0.000540f, -0.001849f, + +0.000528f, +0.000173f, -0.000889f, +0.000241f, +0.000798f, -0.000434f, -0.000128f, +0.000206f, +0.000098f, +0.000060f, + -0.000847f, +0.000793f, -0.000490f, +0.000618f, -0.000035f, -0.000285f, +0.000634f, +0.000195f, -0.000364f, -0.000592f, + -0.000079f, +0.000176f, +0.000022f, -0.000414f, -0.000200f, +0.000188f, +0.000050f, -0.000193f, -0.000247f, -0.000176f, + +0.000044f, +0.000077f, +0.000128f, -0.000103f, -0.000033f, -0.000101f, +0.000212f, -0.000014f, -0.000049f, -0.000040f, + -0.000077f, +0.000068f, -0.000092f, -0.000026f, +0.000072f, +0.000030f, +0.000026f, -0.000082f, -0.000015f, +0.000022f, + -0.000167f, -0.000082f, +0.000037f, -0.000037f, -0.000073f, +0.000049f + }, + { + -0.007164f, -0.066714f, -0.003882f, +0.007669f, -0.000506f, +0.000519f, -0.000057f, -0.000462f, +0.000461f, -0.000397f, + -0.001615f, -0.000639f, +0.003307f, -0.000974f, -0.000328f, +0.000204f, -0.000096f, -0.001083f, +0.000129f, +0.000259f, + -0.000461f, +0.000298f, -0.000067f, -0.000595f, -0.000603f, -0.000389f, +0.000285f, +0.000651f, -0.000660f, +0.000972f, + -0.000218f, -0.001196f, +0.000556f, -0.000253f, +0.000365f, -0.000220f, -0.000611f, +0.000329f, -0.000208f, -0.000118f, + -0.000617f, +0.000172f, +0.000333f, -0.000669f, -0.000992f, +0.000734f, -0.000146f, +0.000081f, +0.000052f, -0.000094f, + +0.000271f, +0.000079f, +0.000144f, +0.000042f, +0.000460f, +0.000004f, +0.000106f, -0.000147f, -0.000173f, -0.000285f, + +0.000436f, +0.000263f, +0.000170f, +0.000135f, +0.000193f, -0.000102f, +0.000000f, +0.000027f, -0.000026f, +0.000149f, + -0.000032f, -0.000217f, +0.000024f, +0.000019f, +0.000177f, -0.000066f, +0.000064f, -0.000079f, +0.000036f, +0.000074f, + +0.000105f, +0.000004f, -0.000086f, -0.000007f, -0.000041f, -0.000065f, -0.000007f, -0.000085f, -0.000023f, +0.000060f, + +0.000062f, -0.000004f, -0.000070f, +0.000075f, +0.000010f, -0.000012f + }, + { + +0.001351f, -0.001336f, -0.003154f, +0.000972f, +0.000081f, -0.000347f, +0.000441f, +0.001302f, -0.001242f, -0.000036f, + +0.001479f, +0.000510f, +0.001985f, -0.001265f, +0.002119f, -0.002985f, -0.006814f, +0.016476f, -0.006939f, +0.001769f, + -0.000433f, -0.000784f, +0.000409f, -0.002955f, -0.003054f, +0.001612f, +0.002377f, +0.001391f, -0.001769f, +0.000950f, + +0.000246f, +0.000666f, -0.001661f, +0.000576f, +0.000847f, +0.001150f, +0.000217f, -0.000153f, +0.000002f, +0.001347f, + +0.000371f, +0.000779f, -0.000167f, +0.000549f, -0.000763f, +0.000208f, +0.000037f, -0.000275f, +0.000268f, +0.000675f, + -0.000385f, +0.000169f, +0.000092f, +0.000377f, +0.000364f, +0.000242f, +0.000008f, -0.000083f, -0.000175f, +0.000293f, + -0.000089f, -0.000433f, -0.000337f, +0.000239f, +0.000320f, -0.000137f, -0.000130f, -0.000251f, +0.000191f, +0.000052f, + -0.000116f, +0.000040f, +0.000028f, +0.000109f, +0.000119f, -0.000145f, +0.000120f, +0.000166f, +0.000155f, -0.000079f, + -0.000062f, -0.000090f, -0.000086f, +0.000100f, -0.000116f, -0.000004f, +0.000000f, -0.000097f, +0.000062f, +0.000071f, + +0.000125f, +0.000082f, -0.000023f, +0.000022f, +0.000050f, +0.000018f + }, + { + -0.014080f, -0.119594f, +0.003141f, -0.002673f, +0.001153f, -0.000434f, +0.000633f, -0.000091f, -0.000751f, +0.000827f, + +0.000860f, -0.000681f, -0.000230f, -0.002442f, +0.000108f, -0.000153f, -0.000283f, +0.001338f, -0.000282f, +0.001631f, + +0.001527f, -0.001357f, -0.000264f, -0.001012f, -0.000759f, +0.000131f, -0.000503f, -0.000033f, -0.001396f, -0.000390f, + -0.001474f, -0.000346f, -0.000903f, +0.000908f, -0.000950f, +0.001059f, +0.000253f, +0.000721f, +0.000195f, +0.000482f, + +0.000890f, +0.000430f, +0.000163f, +0.000126f, -0.000061f, +0.000296f, -0.000207f, +0.000407f, -0.000176f, +0.001214f, + -0.000341f, +0.000149f, +0.000252f, +0.000325f, -0.000192f, -0.000527f, +0.000439f, +0.000109f, -0.000092f, -0.000026f, + -0.000036f, +0.000058f, +0.000260f, +0.000158f, -0.000013f, -0.000207f, +0.000120f, +0.000072f, -0.000056f, +0.000101f, + -0.000015f, +0.000138f, +0.000071f, +0.000034f, +0.000021f, -0.000014f, +0.000264f, -0.000089f, +0.000031f, +0.000097f, + -0.000094f, -0.000042f, -0.000130f, +0.000116f, +0.000062f, +0.000123f, -0.000043f, +0.000085f, -0.000129f, -0.000027f, + +0.000034f, +0.000046f, -0.000057f, -0.000047f, +0.000075f, +0.000021f + }, + { + +0.000078f, +0.000638f, -0.002747f, -0.001906f, -0.000167f, +0.000012f, +0.000733f, +0.000983f, +0.000058f, -0.000241f, + +0.000155f, -0.000475f, +0.001880f, -0.001572f, -0.001909f, -0.007032f, -0.004698f, +0.001676f, +0.001047f, -0.002246f, + +0.000261f, -0.001190f, -0.002493f, -0.000606f, +0.000954f, -0.001424f, -0.002308f, -0.000505f, -0.002101f, -0.001155f, + -0.000942f, -0.000975f, -0.002449f, +0.001507f, -0.000202f, -0.000140f, -0.000088f, -0.000172f, -0.000365f, +0.000835f, + -0.000174f, -0.001551f, +0.000643f, +0.000467f, +0.000390f, -0.000297f, +0.000463f, +0.000303f, -0.000222f, -0.000077f, + -0.000074f, +0.000055f, -0.000152f, -0.000696f, -0.000015f, +0.000046f, -0.000051f, -0.000189f, +0.000021f, +0.000202f, + +0.000105f, +0.000064f, -0.000399f, -0.000073f, +0.000196f, +0.000176f, +0.000342f, +0.000519f, +0.000000f, -0.000119f, + -0.000004f, +0.000184f, +0.000068f, +0.000117f, +0.000201f, +0.000141f, -0.000014f, +0.000147f, -0.000010f, +0.000012f, + +0.000036f, +0.000086f, +0.000001f, -0.000049f, +0.000040f, -0.000042f, -0.000084f, -0.000075f, +0.000004f, -0.000063f, + -0.000011f, +0.000003f, +0.000001f, -0.000044f, -0.000008f, -0.000006f + }, + { + +0.015867f, +0.022747f, -0.009229f, +0.001436f, +0.000559f, +0.000136f, -0.000390f, +0.000421f, +0.000413f, +0.000330f, + -0.000096f, -0.001281f, -0.000053f, -0.000160f, -0.002369f, +0.000658f, -0.001380f, -0.000646f, +0.000078f, +0.000161f, + -0.000208f, +0.000043f, +0.000174f, +0.000846f, -0.001568f, +0.000566f, +0.000619f, -0.000971f, -0.000270f, -0.000477f, + +0.000937f, -0.000255f, +0.000763f, +0.000714f, +0.000631f, +0.000365f, +0.000863f, +0.000986f, -0.000170f, -0.000652f, + -0.000123f, +0.000760f, -0.000022f, -0.001309f, -0.000547f, +0.000926f, -0.000613f, -0.000643f, +0.000068f, +0.000636f, + +0.000786f, +0.000065f, -0.000289f, -0.000243f, +0.000664f, +0.000069f, -0.000099f, -0.000198f, +0.000131f, -0.000091f, + +0.000130f, +0.000106f, +0.000550f, -0.000012f, -0.000433f, +0.000117f, -0.000064f, -0.000019f, +0.000107f, -0.000057f, + +0.000263f, +0.000095f, +0.000042f, +0.000107f, -0.000059f, -0.000207f, +0.000142f, +0.000066f, -0.000184f, -0.000009f, + -0.000086f, -0.000008f, +0.000037f, +0.000072f, -0.000028f, +0.000015f, +0.000082f, +0.000013f, -0.000021f, +0.000041f, + +0.000003f, -0.000057f, +0.000016f, +0.000085f, -0.000053f, -0.000063f + }, + { + +0.000134f, +0.009647f, +0.005763f, -0.001276f, +0.000079f, -0.000126f, -0.000696f, +0.000785f, +0.000331f, +0.000045f, + +0.000045f, +0.000534f, -0.001007f, -0.002069f, +0.009109f, -0.007831f, -0.005652f, +0.003371f, +0.001586f, +0.002096f, + +0.002238f, -0.001749f, +0.002013f, +0.000760f, +0.001045f, -0.003587f, +0.002233f, +0.000736f, -0.001610f, +0.000541f, + -0.001583f, +0.000241f, +0.001882f, +0.000710f, +0.000815f, -0.001101f, +0.000006f, +0.001388f, +0.001397f, -0.000388f, + +0.000859f, -0.000591f, +0.000257f, +0.000829f, +0.000230f, +0.000371f, +0.000669f, -0.000570f, +0.000449f, -0.000038f, + -0.000382f, -0.000271f, -0.000061f, -0.000427f, -0.000016f, -0.000471f, +0.000418f, +0.000146f, -0.000122f, -0.000206f, + -0.000015f, +0.000049f, +0.000556f, -0.000387f, -0.000019f, +0.000294f, -0.000055f, +0.000052f, +0.000103f, -0.000033f, + -0.000169f, -0.000202f, +0.000125f, +0.000044f, +0.000235f, -0.000240f, -0.000169f, -0.000030f, -0.000053f, +0.000059f, + -0.000086f, -0.000058f, +0.000070f, +0.000081f, +0.000020f, +0.000030f, +0.000061f, +0.000117f, -0.000027f, -0.000022f, + +0.000020f, -0.000012f, -0.000024f, +0.000002f, +0.000012f, +0.000070f + }, + { + -0.002073f, -0.036831f, +0.009674f, -0.003463f, +0.000527f, +0.005028f, -0.000284f, -0.001447f, -0.000028f, +0.000366f, + +0.001148f, -0.001020f, +0.000157f, -0.000013f, -0.000250f, -0.000302f, -0.000902f, +0.003430f, +0.000350f, -0.001560f, + +0.000318f, +0.000122f, +0.000106f, -0.000387f, +0.001729f, -0.000826f, -0.000338f, -0.000680f, +0.000911f, -0.001588f, + +0.000767f, +0.000018f, -0.001301f, -0.000048f, -0.000061f, -0.000876f, -0.000060f, -0.000472f, +0.000648f, +0.000362f, + +0.000909f, -0.000001f, +0.000454f, +0.000192f, +0.000455f, +0.000858f, +0.000401f, -0.000066f, -0.000033f, +0.000777f, + -0.000345f, -0.000149f, +0.000402f, -0.000373f, -0.000429f, +0.000325f, +0.000335f, +0.000104f, -0.000077f, +0.000010f, + -0.000145f, -0.000260f, +0.000092f, +0.000072f, +0.000033f, +0.000064f, +0.000005f, +0.000021f, +0.000123f, +0.000115f, + +0.000160f, -0.000132f, -0.000029f, +0.000038f, -0.000111f, -0.000044f, -0.000016f, -0.000151f, +0.000200f, -0.000101f, + -0.000108f, +0.000046f, +0.000139f, +0.000035f, +0.000064f, +0.000124f, -0.000014f, -0.000007f, +0.000052f, +0.000032f, + +0.000003f, +0.000016f, +0.000005f, -0.000013f, +0.000027f, +0.000088f + }, + { + +0.000592f, -0.000545f, +0.001496f, -0.004343f, -0.000170f, +0.000782f, -0.001690f, +0.000459f, -0.000287f, +0.001754f, + -0.000539f, -0.001640f, +0.000433f, +0.000643f, +0.002622f, -0.002182f, -0.001746f, -0.000148f, +0.002228f, -0.000099f, + -0.000963f, +0.002279f, -0.000216f, -0.000102f, +0.000966f, +0.001733f, +0.000820f, +0.000064f, +0.001480f, -0.000183f, + -0.000196f, -0.000631f, +0.000219f, -0.001117f, +0.001864f, +0.000735f, -0.001198f, +0.000482f, +0.000052f, -0.000016f, + -0.000482f, +0.000367f, +0.001195f, +0.000375f, -0.000654f, -0.000075f, +0.000074f, -0.000373f, +0.000174f, -0.000074f, + -0.000016f, -0.000342f, -0.000149f, -0.000733f, -0.000034f, +0.000009f, +0.000123f, -0.000126f, +0.000180f, -0.000176f, + +0.000227f, +0.000032f, -0.000033f, +0.000090f, +0.000047f, +0.000065f, +0.000159f, +0.000205f, -0.000014f, -0.000063f, + +0.000130f, +0.000058f, +0.000113f, +0.000074f, +0.000049f, -0.000092f, -0.000157f, -0.000170f, +0.000104f, +0.000024f, + -0.000110f, +0.000042f, -0.000007f, -0.000132f, -0.000084f, -0.000089f, -0.000026f, +0.000069f, -0.000070f, -0.000063f, + +0.000080f, -0.000006f, -0.000031f, +0.000012f, +0.000060f, -0.000053f + }, + { + -0.002759f, +0.025671f, -0.000476f, +0.001796f, +0.001986f, -0.002626f, +0.002637f, +0.000751f, +0.000462f, -0.001279f, + -0.001969f, +0.000543f, -0.001474f, +0.002602f, -0.000596f, +0.000313f, -0.000618f, -0.000822f, -0.000334f, -0.000367f, + -0.000219f, +0.000027f, -0.000019f, +0.000400f, -0.001246f, +0.001066f, -0.000573f, +0.001233f, +0.000356f, +0.000232f, + -0.000025f, +0.000752f, -0.000327f, +0.000166f, -0.000349f, -0.000443f, -0.000286f, -0.000945f, -0.000309f, +0.000561f, + +0.001050f, -0.000105f, +0.000482f, -0.000798f, +0.000181f, -0.000801f, -0.000056f, -0.000154f, -0.000208f, +0.000147f, + +0.000317f, -0.000373f, -0.000105f, -0.000407f, +0.000077f, -0.000144f, +0.000147f, -0.000464f, +0.000090f, -0.000309f, + +0.000426f, -0.000441f, -0.000041f, -0.000017f, +0.000085f, -0.000266f, +0.000021f, -0.000027f, -0.000006f, +0.000132f, + +0.000077f, -0.000045f, -0.000019f, +0.000038f, -0.000040f, -0.000010f, -0.000032f, +0.000015f, -0.000118f, -0.000042f, + -0.000015f, +0.000180f, -0.000023f, +0.000096f, -0.000000f, +0.000019f, -0.000008f, +0.000026f, +0.000013f, +0.000045f, + +0.000011f, +0.000004f, +0.000048f, -0.000060f, +0.000027f, +0.000083f + }, + { + -0.000358f, -0.007046f, +0.002538f, -0.001910f, -0.000986f, +0.000757f, +0.000113f, -0.000582f, +0.001091f, -0.001718f, + +0.001073f, +0.003004f, +0.006190f, +0.017858f, +0.001899f, -0.001443f, -0.001816f, +0.002617f, -0.002131f, -0.000529f, + -0.007083f, +0.004123f, +0.001972f, -0.000928f, +0.002154f, +0.002508f, -0.002585f, +0.002938f, -0.000712f, +0.003328f, + -0.002551f, +0.000448f, -0.001641f, -0.000996f, +0.000789f, -0.000292f, +0.000988f, -0.000059f, +0.000271f, -0.000421f, + +0.000170f, +0.000143f, -0.000215f, -0.000135f, -0.000213f, +0.000041f, +0.000102f, +0.000275f, -0.000040f, +0.000479f, + -0.000129f, -0.000115f, +0.000236f, +0.000187f, +0.000591f, +0.000255f, -0.000098f, +0.000151f, -0.000199f, -0.000333f, + +0.000074f, +0.000460f, +0.000073f, -0.000096f, -0.000031f, +0.000069f, -0.000129f, -0.000041f, +0.000017f, +0.000069f, + -0.000054f, -0.000239f, +0.000096f, -0.000209f, +0.000189f, +0.000094f, +0.000205f, -0.000028f, -0.000131f, +0.000099f, + -0.000110f, -0.000164f, +0.000020f, -0.000089f, -0.000025f, -0.000003f, +0.000087f, +0.000027f, -0.000066f, -0.000044f, + -0.000165f, +0.000075f, +0.000069f, -0.000052f, -0.000035f, +0.000084f + }, + { + +0.002450f, +0.024900f, +0.004091f, -0.005184f, +0.000675f, -0.000754f, -0.005171f, +0.001963f, -0.000645f, +0.000719f, + -0.002055f, -0.000465f, -0.000974f, -0.006695f, -0.000453f, +0.001111f, +0.001704f, +0.000346f, -0.000974f, -0.000015f, + -0.000072f, +0.000575f, +0.000330f, +0.001589f, +0.001811f, +0.000229f, +0.000881f, +0.001106f, -0.000656f, -0.000904f, + -0.000315f, +0.000256f, -0.000440f, -0.000704f, +0.000834f, -0.000078f, +0.000101f, -0.000059f, -0.000659f, +0.000046f, + +0.000630f, +0.000637f, +0.000261f, +0.000013f, +0.000534f, -0.000482f, -0.000476f, +0.000777f, -0.000799f, +0.000461f, + +0.000137f, +0.000089f, -0.000338f, -0.000217f, -0.000227f, -0.000277f, -0.000022f, +0.000266f, +0.000073f, +0.000330f, + +0.000163f, +0.000108f, -0.000101f, -0.000347f, -0.000057f, +0.000036f, +0.000063f, -0.000111f, +0.000073f, -0.000162f, + +0.000034f, -0.000245f, -0.000103f, +0.000041f, -0.000156f, -0.000061f, +0.000014f, +0.000009f, -0.000073f, -0.000084f, + -0.000088f, -0.000124f, -0.000101f, -0.000106f, +0.000031f, -0.000078f, +0.000113f, +0.000102f, -0.000034f, -0.000091f, + -0.000027f, -0.000048f, -0.000058f, -0.000074f, +0.000030f, +0.000024f + }, + { + -0.000477f, -0.006651f, +0.002027f, +0.002046f, +0.000151f, +0.000088f, -0.000336f, -0.000056f, -0.000188f, +0.001821f, + -0.000289f, +0.000894f, -0.001436f, -0.006564f, -0.024410f, -0.003211f, +0.001014f, -0.000498f, +0.002829f, -0.002990f, + +0.000701f, +0.003583f, -0.001774f, -0.000924f, +0.001543f, +0.000670f, -0.002492f, -0.000684f, +0.000002f, -0.000123f, + -0.000149f, +0.000761f, +0.001143f, -0.000277f, -0.000475f, +0.000048f, -0.000412f, -0.000867f, -0.000731f, -0.000337f, + +0.001448f, +0.000672f, -0.000449f, -0.000064f, +0.000340f, -0.000192f, -0.000368f, -0.000147f, +0.000475f, -0.000085f, + -0.000317f, +0.000503f, +0.000566f, -0.000281f, -0.000122f, +0.000128f, -0.000321f, -0.000041f, +0.000098f, +0.000451f, + +0.000294f, -0.000145f, -0.000200f, +0.000267f, +0.000263f, -0.000051f, -0.000049f, +0.000210f, +0.000233f, -0.000090f, + -0.000114f, -0.000119f, +0.000101f, -0.000048f, +0.000004f, +0.000012f, +0.000049f, +0.000102f, +0.000021f, +0.000037f, + -0.000272f, -0.000066f, -0.000093f, +0.000116f, +0.000062f, -0.000152f, +0.000064f, -0.000056f, -0.000054f, +0.000042f, + -0.000019f, -0.000017f, -0.000008f, +0.000024f, -0.000044f, -0.000080f + } + }, + { + { + -0.006270f, +0.033016f, +0.028530f, -0.001216f, +0.001499f, +0.002033f, -0.000518f, +0.001422f, +0.000832f, -0.000674f, + -0.001569f, +0.001412f, +0.001770f, +0.001316f, -0.005627f, -0.001343f, +0.000154f, +0.001094f, -0.001807f, +0.003053f, + -0.000986f, -0.001950f, -0.000770f, +0.000114f, -0.000572f, -0.000255f, +0.001431f, +0.000065f, -0.000838f, -0.000168f, + -0.000371f, +0.000094f, -0.000662f, +0.000397f, -0.000275f, +0.000216f, -0.001069f, +0.000301f, -0.000486f, +0.000771f, + +0.001202f, +0.000710f, -0.000207f, +0.000332f, +0.000035f, -0.000152f, +0.000977f, -0.000696f, +0.000054f, +0.000178f, + -0.000388f, -0.000021f, +0.000206f, +0.000020f, -0.000055f, -0.000372f, +0.000264f, -0.000250f, -0.000271f, +0.000002f, + -0.000453f, -0.000094f, +0.000107f, +0.000093f, +0.000065f, +0.000139f, -0.000128f, -0.000133f, +0.000010f, +0.000072f, + +0.000418f, -0.000002f, +0.000045f, -0.000236f, -0.000110f, -0.000020f, -0.000084f, +0.000003f, +0.000128f, -0.000156f, + +0.000049f, -0.000110f, -0.000139f, -0.000008f, +0.000035f, +0.000067f, -0.000185f, -0.000056f, +0.000016f, +0.000009f, + +0.000016f, +0.000004f, -0.000047f, -0.000015f, -0.000039f, -0.000022f + }, + { + +0.000415f, -0.024741f, -0.005351f, -0.001447f, -0.000790f, +0.000858f, -0.002587f, +0.000493f, +0.000013f, +0.000548f, + -0.000606f, +0.000282f, -0.001540f, -0.001123f, -0.003431f, +0.001714f, +0.003448f, +0.000571f, -0.005109f, -0.002694f, + -0.001630f, -0.001546f, +0.000564f, -0.000555f, +0.000286f, -0.000380f, +0.000922f, -0.002262f, -0.000450f, +0.000732f, + -0.002381f, -0.000419f, -0.000714f, +0.000226f, +0.000655f, +0.001115f, +0.001214f, +0.000396f, +0.001042f, -0.000095f, + +0.000367f, -0.000658f, -0.000863f, -0.000486f, +0.000448f, +0.000135f, -0.000190f, -0.000275f, +0.000800f, -0.000231f, + -0.000014f, +0.000128f, -0.000237f, -0.000179f, -0.000117f, +0.000367f, -0.000231f, -0.000048f, +0.000247f, +0.000022f, + -0.000310f, -0.000106f, +0.000169f, -0.000071f, -0.000085f, +0.000125f, +0.000021f, -0.000142f, +0.000140f, +0.000046f, + +0.000006f, -0.000110f, +0.000082f, +0.000010f, +0.000019f, +0.000075f, +0.000163f, +0.000204f, +0.000010f, -0.000221f, + +0.000090f, +0.000034f, +0.000083f, -0.000038f, +0.000045f, -0.000061f, -0.000081f, -0.000003f, -0.000039f, -0.000056f, + +0.000017f, +0.000014f, -0.000004f, -0.000186f, -0.000001f, +0.000058f + }, + { + +0.000789f, +0.090351f, +0.008249f, +0.004861f, -0.004471f, -0.000407f, +0.000619f, +0.001162f, +0.000081f, +0.000773f, + +0.000465f, +0.001331f, +0.002643f, -0.003903f, -0.002642f, +0.001058f, +0.000481f, +0.003117f, +0.000858f, -0.000258f, + +0.001480f, -0.000132f, -0.000187f, +0.001133f, -0.000478f, -0.002813f, -0.000517f, +0.000758f, +0.000655f, -0.001469f, + +0.001048f, +0.000485f, -0.000555f, +0.000634f, -0.000258f, +0.000495f, -0.001527f, +0.001514f, -0.000620f, -0.000538f, + +0.000126f, +0.000867f, -0.000470f, -0.000633f, +0.000840f, -0.000853f, -0.000181f, -0.000426f, +0.000141f, +0.000257f, + -0.000665f, +0.000248f, -0.000342f, +0.000859f, -0.000615f, -0.000262f, +0.000047f, +0.000257f, +0.000062f, -0.000340f, + -0.000303f, +0.000087f, -0.000237f, -0.000483f, -0.000040f, +0.000084f, -0.000165f, -0.000014f, -0.000349f, -0.000059f, + -0.000162f, -0.000026f, +0.000034f, -0.000005f, -0.000192f, +0.000141f, +0.000335f, -0.000039f, -0.000257f, +0.000051f, + -0.000048f, -0.000159f, -0.000008f, +0.000160f, -0.000049f, -0.000054f, -0.000089f, +0.000009f, +0.000000f, -0.000038f, + -0.000057f, +0.000035f, +0.000049f, -0.000030f, +0.000020f, -0.000009f + }, + { + -0.004249f, -0.073034f, +0.000355f, +0.006096f, -0.001839f, +0.000477f, -0.000382f, +0.000427f, -0.000501f, -0.000333f, + -0.000793f, +0.000312f, +0.000390f, +0.001847f, +0.000358f, +0.001111f, +0.000262f, -0.000903f, -0.000655f, +0.000791f, + -0.000348f, +0.000049f, -0.000095f, -0.000243f, +0.000279f, +0.000007f, +0.000395f, +0.000358f, -0.000395f, -0.001028f, + -0.000369f, -0.000345f, -0.000125f, -0.000887f, +0.000723f, -0.001103f, +0.000088f, +0.000086f, +0.000213f, -0.000523f, + -0.000254f, +0.000328f, -0.000033f, -0.000749f, -0.000223f, -0.000329f, -0.000406f, +0.000289f, +0.000374f, +0.000139f, + -0.000098f, +0.000152f, +0.000379f, -0.000127f, +0.000163f, +0.000046f, -0.000234f, -0.000407f, +0.000017f, +0.000169f, + +0.000002f, +0.000062f, +0.000105f, +0.000149f, -0.000260f, +0.000131f, -0.000250f, -0.000087f, +0.000232f, -0.000148f, + -0.000060f, +0.000029f, +0.000234f, -0.000016f, +0.000134f, -0.000028f, -0.000014f, -0.000060f, +0.000049f, -0.000022f, + -0.000036f, +0.000014f, -0.000094f, +0.000090f, -0.000079f, +0.000035f, +0.000008f, -0.000070f, +0.000100f, +0.000026f, + -0.000053f, -0.000001f, +0.000002f, -0.000023f, -0.000004f, -0.000011f + }, + { + -0.001291f, -0.004106f, +0.004482f, -0.000455f, -0.000439f, +0.000471f, +0.000366f, -0.000196f, -0.000754f, -0.000372f, + +0.001203f, +0.000460f, +0.001481f, +0.002784f, +0.001174f, -0.002943f, +0.002636f, -0.000907f, -0.002699f, +0.002181f, + +0.000583f, +0.000745f, -0.002020f, -0.000318f, -0.001486f, +0.003489f, -0.000704f, +0.000735f, +0.000416f, -0.000626f, + -0.000110f, +0.001627f, -0.000785f, -0.000935f, +0.001703f, -0.000092f, +0.001157f, -0.000886f, +0.000869f, +0.001405f, + -0.000001f, +0.000705f, -0.000731f, -0.000079f, -0.000395f, -0.000217f, -0.000127f, -0.000300f, -0.000191f, +0.000410f, + -0.000203f, +0.000366f, +0.000348f, +0.000025f, +0.000530f, +0.000317f, +0.000184f, -0.000422f, -0.000183f, +0.000232f, + -0.000057f, -0.000490f, +0.000066f, -0.000076f, -0.000387f, -0.000312f, -0.000150f, -0.000077f, +0.000168f, -0.000028f, + -0.000067f, +0.000167f, +0.000215f, +0.000143f, +0.000132f, -0.000135f, +0.000169f, -0.000002f, -0.000088f, -0.000149f, + -0.000200f, -0.000081f, +0.000150f, +0.000014f, -0.000158f, +0.000020f, -0.000080f, -0.000017f, +0.000100f, +0.000034f, + +0.000061f, +0.000000f, +0.000017f, +0.000105f, +0.000011f, -0.000050f + }, + { + -0.004646f, -0.127692f, +0.004030f, -0.000911f, -0.001238f, +0.000304f, -0.000389f, -0.000749f, +0.001204f, -0.000196f, + -0.001876f, -0.000127f, -0.000111f, -0.001092f, -0.001592f, +0.000796f, +0.000413f, +0.000764f, +0.000019f, +0.000735f, + +0.000357f, -0.001868f, -0.000211f, -0.000821f, -0.000083f, +0.000137f, +0.000271f, -0.000953f, -0.000539f, -0.000884f, + -0.001530f, -0.000029f, -0.000002f, +0.000503f, -0.000024f, +0.000544f, -0.000440f, +0.000782f, +0.000654f, +0.000638f, + +0.000070f, +0.000553f, -0.000008f, -0.000233f, -0.000063f, +0.000111f, +0.000540f, +0.000120f, +0.000006f, +0.000713f, + +0.000121f, +0.000079f, -0.000167f, +0.000376f, -0.000354f, -0.000246f, -0.000178f, -0.000380f, +0.000294f, +0.000238f, + +0.000011f, +0.000072f, -0.000256f, +0.000027f, -0.000035f, -0.000036f, -0.000076f, -0.000116f, +0.000115f, -0.000102f, + +0.000086f, -0.000074f, +0.000129f, +0.000098f, -0.000062f, +0.000145f, -0.000010f, -0.000019f, +0.000175f, +0.000132f, + +0.000004f, +0.000070f, +0.000112f, +0.000175f, -0.000034f, +0.000010f, -0.000060f, -0.000021f, -0.000105f, +0.000015f, + -0.000003f, +0.000020f, -0.000086f, +0.000082f, +0.000066f, +0.000041f + }, + { + +0.000518f, -0.005934f, -0.001649f, -0.000011f, -0.000190f, +0.000270f, +0.000153f, +0.001662f, -0.000763f, +0.000377f, + -0.000425f, +0.000412f, +0.001107f, +0.001776f, -0.005289f, -0.003920f, +0.002373f, -0.001942f, +0.001448f, -0.000072f, + -0.000745f, +0.000301f, -0.003613f, +0.000169f, +0.002265f, -0.003552f, +0.001710f, -0.002943f, -0.000889f, -0.000770f, + -0.002171f, +0.000566f, -0.001215f, +0.000053f, -0.001173f, -0.000532f, +0.000061f, +0.000600f, -0.000104f, -0.000494f, + -0.000609f, -0.000080f, +0.000205f, +0.001028f, +0.000408f, -0.000778f, +0.000147f, +0.000492f, -0.000305f, +0.000167f, + -0.000100f, -0.000026f, -0.000354f, -0.000442f, -0.000233f, -0.000021f, -0.000183f, +0.000019f, -0.000093f, +0.000364f, + +0.000309f, -0.000036f, +0.000008f, +0.000062f, +0.000062f, +0.000143f, +0.000302f, +0.000121f, +0.000042f, +0.000190f, + +0.000207f, -0.000120f, -0.000141f, +0.000168f, +0.000076f, +0.000080f, -0.000118f, -0.000057f, -0.000031f, -0.000081f, + +0.000048f, +0.000035f, +0.000065f, -0.000049f, -0.000023f, -0.000073f, -0.000040f, +0.000058f, -0.000005f, +0.000056f, + +0.000114f, +0.000093f, -0.000019f, -0.000086f, +0.000045f, +0.000027f + }, + { + -0.008895f, +0.040617f, +0.010404f, +0.000673f, +0.000892f, +0.000496f, -0.000560f, +0.000637f, +0.001055f, -0.000317f, + -0.000511f, -0.000290f, +0.000104f, -0.002868f, -0.002339f, +0.000381f, -0.000636f, -0.000102f, +0.000714f, -0.000480f, + -0.000480f, +0.000634f, -0.000764f, +0.000558f, -0.000092f, -0.000174f, -0.000003f, -0.001384f, -0.000178f, -0.000698f, + +0.000451f, +0.000420f, +0.001279f, +0.000059f, +0.000369f, -0.000536f, +0.000902f, +0.000362f, +0.000165f, -0.000806f, + +0.000143f, +0.000276f, +0.000771f, -0.001055f, -0.000848f, +0.000306f, -0.000212f, +0.000091f, +0.000527f, +0.000322f, + +0.000176f, -0.000285f, +0.000294f, +0.000451f, +0.000090f, +0.000175f, -0.000410f, -0.000148f, +0.000058f, +0.000021f, + +0.000283f, +0.000190f, +0.000342f, -0.000049f, -0.000248f, +0.000073f, -0.000166f, +0.000214f, +0.000014f, +0.000147f, + +0.000236f, +0.000018f, +0.000067f, -0.000071f, -0.000253f, +0.000035f, +0.000003f, -0.000184f, +0.000042f, -0.000150f, + -0.000059f, +0.000045f, +0.000090f, +0.000071f, +0.000053f, +0.000032f, +0.000062f, -0.000105f, -0.000051f, +0.000024f, + -0.000018f, +0.000021f, -0.000019f, -0.000013f, -0.000086f, -0.000026f + }, + { + +0.001384f, +0.007739f, +0.000050f, +0.000424f, -0.000525f, +0.000210f, -0.000301f, -0.000056f, -0.000341f, -0.000043f, + +0.000466f, +0.001485f, +0.000383f, -0.000958f, +0.001715f, -0.003393f, -0.003521f, +0.002332f, +0.001977f, +0.002281f, + -0.000448f, +0.000473f, +0.002324f, -0.000449f, -0.001558f, -0.000667f, +0.001842f, +0.000039f, -0.001274f, -0.001051f, + +0.001176f, -0.000888f, +0.002300f, +0.001589f, -0.000255f, -0.000960f, -0.000219f, +0.001332f, +0.001058f, +0.000020f, + -0.000288f, -0.000646f, +0.000473f, +0.000053f, -0.000180f, +0.000366f, +0.000262f, -0.000197f, -0.000041f, +0.000289f, + -0.000072f, -0.000023f, -0.000015f, -0.000762f, -0.000254f, +0.000233f, -0.000091f, -0.000186f, -0.000405f, -0.000001f, + +0.000140f, +0.000414f, +0.000215f, +0.000046f, +0.000419f, +0.000437f, +0.000297f, +0.000091f, +0.000101f, -0.000001f, + +0.000004f, +0.000025f, -0.000019f, +0.000037f, -0.000131f, -0.000221f, -0.000177f, -0.000060f, +0.000001f, +0.000030f, + -0.000034f, +0.000067f, +0.000258f, +0.000086f, -0.000055f, -0.000031f, -0.000086f, -0.000112f, +0.000010f, +0.000082f, + -0.000036f, -0.000020f, -0.000013f, -0.000063f, -0.000015f, -0.000007f + }, + { + -0.000453f, -0.036279f, +0.001159f, +0.001735f, +0.001368f, -0.001045f, +0.007626f, -0.001646f, -0.000532f, -0.000373f, + -0.000039f, -0.001109f, -0.001038f, +0.000424f, -0.000454f, +0.000257f, -0.001655f, +0.003378f, -0.001248f, +0.001106f, + -0.000146f, +0.000131f, -0.001191f, +0.000733f, +0.000812f, -0.000248f, +0.000031f, -0.000693f, -0.000459f, -0.000544f, + +0.000605f, +0.000152f, -0.000463f, -0.002754f, +0.000704f, -0.000326f, -0.000215f, +0.000113f, +0.000506f, +0.000553f, + +0.000232f, -0.000331f, +0.000358f, +0.000798f, -0.000326f, -0.000208f, +0.000405f, +0.000075f, -0.000069f, -0.000244f, + -0.000334f, -0.000171f, -0.000169f, -0.000200f, +0.000005f, +0.000328f, +0.000131f, +0.000190f, +0.000106f, -0.000125f, + +0.000286f, -0.000251f, +0.000022f, -0.000036f, +0.000022f, +0.000048f, +0.000022f, +0.000077f, +0.000103f, -0.000134f, + +0.000080f, +0.000115f, +0.000033f, -0.000145f, -0.000072f, -0.000099f, +0.000023f, -0.000123f, +0.000057f, -0.000012f, + +0.000092f, +0.000051f, +0.000018f, -0.000048f, +0.000106f, -0.000119f, -0.000166f, -0.000040f, -0.000094f, +0.000038f, + +0.000020f, +0.000003f, +0.000083f, +0.000049f, -0.000015f, -0.000052f + }, + { + -0.000736f, +0.004597f, -0.005320f, -0.000319f, -0.000708f, +0.000686f, +0.000462f, -0.000821f, -0.000545f, -0.000622f, + +0.000263f, +0.000103f, +0.000629f, -0.000506f, +0.003921f, -0.001095f, -0.001030f, -0.000126f, -0.000767f, -0.000305f, + +0.002086f, +0.001859f, -0.000760f, +0.000154f, +0.001535f, +0.000766f, +0.000780f, -0.000669f, +0.001273f, +0.001578f, + -0.000402f, +0.000074f, +0.000236f, -0.000898f, +0.001011f, +0.000005f, +0.000443f, +0.000453f, +0.000062f, +0.000187f, + -0.000692f, +0.000468f, +0.001316f, -0.000597f, +0.000063f, +0.000182f, -0.000573f, -0.000252f, -0.000233f, -0.000040f, + -0.000270f, -0.000375f, -0.000068f, -0.000111f, +0.000224f, +0.000032f, +0.000032f, -0.000142f, -0.000217f, -0.000008f, + +0.000117f, -0.000199f, +0.000371f, +0.000147f, -0.000032f, -0.000247f, +0.000097f, +0.000035f, -0.000161f, +0.000010f, + +0.000233f, +0.000083f, +0.000253f, -0.000036f, -0.000080f, -0.000078f, +0.000108f, +0.000058f, +0.000171f, -0.000023f, + -0.000085f, -0.000087f, -0.000103f, +0.000055f, +0.000042f, -0.000064f, +0.000024f, -0.000010f, +0.000049f, +0.000063f, + +0.000009f, +0.000009f, +0.000014f, -0.000021f, +0.000018f, -0.000033f + }, + { + +0.004089f, +0.017156f, +0.003383f, -0.000304f, -0.001215f, -0.001226f, +0.002093f, +0.002074f, +0.000649f, +0.000122f, + -0.000677f, +0.000155f, +0.001854f, -0.001285f, +0.000082f, -0.000067f, +0.000769f, +0.000112f, -0.000492f, -0.000766f, + -0.000173f, -0.000945f, +0.000045f, +0.001149f, -0.000267f, +0.000285f, -0.000678f, +0.000258f, +0.000907f, -0.000438f, + +0.000440f, +0.000558f, +0.000622f, +0.000594f, -0.000596f, -0.000123f, +0.000594f, +0.000105f, +0.000518f, -0.000313f, + +0.000546f, +0.000579f, -0.000282f, -0.001109f, +0.000204f, -0.000493f, -0.000034f, -0.000165f, -0.000364f, +0.000114f, + -0.000526f, -0.000193f, -0.000330f, -0.000403f, -0.000083f, -0.000118f, -0.000004f, +0.000063f, +0.000013f, -0.000009f, + -0.000155f, -0.000134f, -0.000078f, -0.000146f, -0.000240f, +0.000181f, +0.000150f, +0.000096f, +0.000033f, -0.000004f, + -0.000009f, +0.000087f, +0.000008f, -0.000049f, -0.000145f, -0.000023f, -0.000008f, -0.000009f, +0.000087f, -0.000033f, + -0.000046f, -0.000013f, +0.000073f, +0.000060f, -0.000046f, -0.000039f, +0.000057f, +0.000002f, +0.000069f, -0.000023f, + -0.000087f, -0.000057f, -0.000097f, +0.000038f, +0.000043f, +0.000026f + }, + { + +0.000297f, -0.005163f, -0.000585f, -0.001344f, -0.000981f, -0.000391f, -0.000159f, -0.000042f, +0.001074f, -0.001039f, + +0.000480f, +0.000893f, +0.008977f, +0.023749f, -0.008197f, -0.000256f, -0.000916f, -0.000787f, -0.002208f, -0.001214f, + +0.000730f, +0.000445f, -0.000757f, -0.000741f, -0.000398f, +0.001048f, +0.000849f, +0.000510f, +0.000577f, +0.001529f, + -0.002185f, +0.000525f, -0.001390f, -0.000183f, +0.000225f, +0.001662f, -0.000026f, -0.000468f, +0.000729f, -0.000876f, + -0.000231f, +0.000414f, -0.000118f, -0.000958f, +0.000860f, -0.000404f, -0.000647f, -0.000296f, +0.000064f, +0.000312f, + -0.000104f, -0.000650f, +0.000311f, +0.000190f, +0.000126f, +0.000278f, -0.000254f, +0.000401f, -0.000212f, +0.000062f, + +0.000486f, +0.000372f, -0.000284f, -0.000368f, -0.000034f, +0.000150f, -0.000184f, +0.000166f, +0.000042f, -0.000044f, + -0.000139f, -0.000025f, -0.000092f, -0.000118f, +0.000071f, -0.000041f, -0.000167f, +0.000077f, +0.000071f, -0.000027f, + -0.000001f, +0.000129f, +0.000102f, +0.000032f, +0.000031f, -0.000019f, -0.000018f, -0.000046f, -0.000069f, +0.000016f, + -0.000021f, -0.000085f, -0.000112f, -0.000013f, +0.000053f, -0.000035f + }, + { + +0.003692f, +0.027648f, -0.004632f, +0.003531f, +0.000794f, +0.001325f, -0.003080f, +0.001787f, -0.000081f, -0.000674f, + -0.000157f, -0.004506f, -0.000024f, +0.000983f, -0.010709f, +0.001057f, +0.005333f, -0.000987f, -0.000915f, +0.000543f, + -0.000033f, -0.000238f, -0.000213f, +0.001211f, +0.001892f, +0.000742f, +0.000180f, +0.000827f, -0.001260f, -0.000675f, + -0.000271f, -0.000289f, +0.000957f, +0.000614f, -0.000425f, +0.000373f, +0.001027f, +0.000623f, -0.000172f, -0.000185f, + -0.000516f, -0.000073f, +0.000678f, +0.000059f, +0.001318f, +0.000046f, +0.000132f, -0.000096f, +0.000017f, +0.000102f, + -0.000326f, +0.000059f, -0.000098f, -0.000230f, -0.000133f, +0.000145f, +0.000514f, +0.000025f, -0.000067f, +0.000085f, + +0.000377f, +0.000230f, -0.000222f, +0.000144f, +0.000194f, +0.000242f, +0.000117f, -0.000039f, -0.000043f, -0.000034f, + +0.000154f, -0.000365f, -0.000078f, -0.000033f, +0.000019f, +0.000058f, +0.000021f, -0.000104f, +0.000025f, +0.000114f, + +0.000033f, -0.000108f, +0.000027f, +0.000054f, +0.000021f, -0.000010f, +0.000063f, -0.000034f, -0.000111f, +0.000033f, + -0.000108f, -0.000057f, +0.000020f, -0.000045f, +0.000002f, -0.000009f + }, + { + +0.000073f, -0.004271f, +0.000269f, +0.000620f, +0.000988f, +0.000193f, -0.000344f, -0.000752f, +0.001028f, +0.000708f, + +0.000651f, +0.001128f, -0.000066f, -0.008731f, -0.034432f, -0.003603f, +0.002932f, +0.000124f, +0.002467f, -0.002760f, + +0.003610f, +0.000523f, -0.000658f, +0.000303f, +0.001441f, +0.000693f, -0.001544f, -0.000882f, -0.000455f, +0.000149f, + -0.000429f, +0.001251f, +0.000451f, -0.000579f, -0.001177f, +0.000873f, -0.001722f, -0.000992f, +0.000485f, -0.001215f, + +0.001066f, -0.000262f, -0.000467f, +0.000232f, +0.000720f, -0.000598f, +0.000030f, +0.000249f, +0.000068f, -0.000473f, + -0.000293f, +0.000219f, +0.000142f, -0.000108f, -0.000043f, -0.000102f, -0.000539f, -0.000310f, +0.000115f, -0.000330f, + -0.000069f, -0.000017f, +0.000181f, +0.000139f, +0.000015f, -0.000133f, +0.000306f, +0.000370f, +0.000034f, -0.000064f, + -0.000114f, -0.000182f, -0.000151f, -0.000019f, -0.000140f, -0.000028f, +0.000177f, +0.000018f, -0.000015f, -0.000200f, + -0.000046f, +0.000035f, +0.000060f, +0.000097f, -0.000127f, -0.000005f, -0.000079f, -0.000022f, +0.000048f, +0.000002f, + -0.000012f, +0.000022f, +0.000004f, -0.000042f, -0.000050f, +0.000007f + } + }, + { + { + +0.010883f, +0.008754f, +0.009926f, +0.003321f, +0.000677f, +0.000394f, -0.000667f, -0.000414f, -0.000626f, -0.000671f, + -0.000852f, +0.000934f, +0.000886f, +0.000759f, -0.004287f, +0.002011f, +0.000555f, -0.000401f, -0.001913f, +0.003524f, + -0.000541f, -0.000676f, +0.001086f, -0.000710f, -0.000426f, +0.000503f, +0.000972f, -0.000118f, -0.000751f, -0.000483f, + +0.000536f, +0.000071f, -0.001125f, +0.000934f, +0.000786f, +0.000324f, -0.001115f, +0.000142f, -0.000331f, +0.000614f, + +0.000870f, -0.000105f, -0.001174f, +0.000406f, +0.000609f, +0.000296f, +0.000457f, -0.000134f, +0.000562f, -0.000448f, + -0.000410f, +0.000145f, +0.000695f, +0.000526f, +0.000430f, -0.000135f, +0.000410f, +0.000237f, +0.000351f, +0.000110f, + -0.000248f, +0.000054f, +0.000189f, +0.000115f, +0.000076f, +0.000219f, -0.000214f, -0.000163f, +0.000106f, +0.000052f, + +0.000181f, -0.000206f, +0.000136f, -0.000042f, +0.000048f, -0.000079f, -0.000135f, +0.000110f, +0.000015f, -0.000201f, + +0.000025f, +0.000010f, -0.000056f, -0.000023f, +0.000045f, -0.000055f, +0.000003f, -0.000026f, -0.000070f, -0.000098f, + +0.000026f, +0.000015f, +0.000038f, +0.000043f, +0.000005f, -0.000023f + }, + { + -0.000130f, -0.007026f, +0.009720f, +0.000357f, -0.001231f, +0.000861f, -0.002579f, -0.000658f, -0.000086f, +0.000781f, + -0.000746f, +0.000042f, +0.000347f, -0.000035f, -0.002222f, +0.000392f, -0.001436f, -0.000101f, +0.002247f, +0.002214f, + -0.000038f, -0.001735f, -0.000120f, -0.000388f, +0.001376f, -0.000742f, +0.000857f, -0.000724f, +0.000191f, +0.001301f, + -0.000941f, -0.000289f, -0.000700f, +0.000606f, -0.000745f, -0.000427f, -0.000312f, -0.000561f, +0.001023f, +0.000406f, + +0.000625f, +0.000070f, +0.000226f, +0.000034f, -0.000136f, +0.000001f, +0.000085f, +0.000231f, +0.000390f, -0.000297f, + +0.000109f, -0.000299f, -0.000047f, +0.000178f, +0.000465f, +0.000218f, -0.000383f, -0.000224f, +0.000231f, -0.000116f, + -0.000469f, -0.000179f, +0.000122f, +0.000112f, -0.000031f, +0.000160f, +0.000001f, -0.000090f, +0.000135f, +0.000060f, + -0.000048f, -0.000017f, +0.000122f, +0.000021f, -0.000036f, +0.000114f, +0.000051f, +0.000039f, -0.000147f, -0.000182f, + +0.000217f, -0.000001f, +0.000019f, -0.000029f, -0.000030f, -0.000023f, +0.000028f, -0.000026f, -0.000102f, +0.000043f, + +0.000057f, -0.000006f, -0.000026f, -0.000160f, +0.000022f, +0.000052f + }, + { + -0.000915f, +0.076678f, -0.002030f, +0.001629f, -0.000629f, +0.000773f, -0.000051f, +0.000723f, +0.000281f, -0.000596f, + -0.001726f, +0.000067f, +0.001517f, -0.001549f, +0.000539f, -0.000582f, -0.001754f, +0.001986f, -0.000169f, -0.002483f, + +0.001364f, -0.000108f, +0.000842f, +0.000751f, -0.001116f, -0.002266f, +0.000280f, +0.000334f, +0.000327f, -0.001802f, + +0.001017f, +0.000000f, -0.001469f, +0.000359f, -0.000075f, +0.000784f, -0.000546f, +0.001056f, -0.000338f, +0.000762f, + +0.000498f, +0.000505f, -0.000093f, -0.000068f, +0.000416f, -0.000873f, +0.000260f, +0.000085f, +0.000381f, +0.000368f, + -0.000190f, +0.000153f, -0.000396f, +0.000750f, -0.000354f, +0.000172f, -0.000226f, +0.000186f, +0.000349f, +0.000013f, + -0.000257f, -0.000059f, -0.000047f, +0.000070f, +0.000011f, +0.000031f, -0.000184f, +0.000132f, -0.000071f, +0.000164f, + -0.000076f, -0.000227f, -0.000096f, +0.000139f, -0.000073f, +0.000139f, +0.000036f, -0.000080f, -0.000005f, +0.000038f, + -0.000086f, -0.000171f, +0.000041f, +0.000153f, -0.000057f, -0.000079f, -0.000102f, +0.000052f, -0.000008f, +0.000023f, + -0.000013f, +0.000010f, -0.000040f, +0.000017f, -0.000002f, -0.000060f + }, + { + +0.008917f, -0.055842f, -0.000161f, +0.005486f, -0.002097f, +0.000579f, -0.000245f, +0.000421f, -0.000784f, +0.000298f, + +0.000047f, +0.000302f, -0.001198f, +0.000978f, +0.001938f, +0.001983f, -0.000686f, +0.000747f, +0.001368f, +0.001020f, + -0.000188f, -0.000232f, +0.000424f, +0.000237f, +0.000185f, +0.000006f, -0.000352f, +0.000027f, -0.000901f, +0.000281f, + +0.000274f, -0.000570f, -0.000240f, -0.001568f, +0.000261f, -0.001176f, -0.000591f, +0.000658f, +0.000423f, -0.000113f, + +0.000684f, +0.000096f, -0.000480f, -0.000902f, -0.000008f, -0.000465f, -0.000237f, +0.000521f, +0.000412f, -0.000290f, + -0.000133f, +0.000120f, -0.000077f, -0.000270f, -0.000414f, +0.000066f, -0.000053f, -0.000428f, +0.000110f, -0.000088f, + -0.000338f, -0.000130f, -0.000081f, -0.000090f, -0.000283f, +0.000100f, -0.000195f, +0.000085f, +0.000086f, -0.000265f, + -0.000011f, +0.000148f, +0.000128f, -0.000102f, +0.000075f, -0.000114f, -0.000037f, -0.000114f, +0.000007f, -0.000009f, + +0.000005f, +0.000063f, +0.000033f, +0.000025f, -0.000089f, +0.000019f, -0.000038f, +0.000066f, +0.000043f, -0.000065f, + -0.000078f, +0.000046f, +0.000005f, -0.000051f, -0.000002f, +0.000015f + }, + { + +0.000800f, -0.007832f, -0.001033f, -0.001229f, -0.000105f, +0.000103f, -0.000329f, -0.000505f, -0.000425f, -0.000170f, + +0.000679f, -0.000563f, -0.000035f, +0.000145f, +0.001310f, +0.001079f, +0.000694f, -0.009410f, +0.003940f, +0.001284f, + +0.001064f, +0.001968f, -0.002379f, +0.001172f, -0.002212f, +0.001518f, -0.002195f, +0.000209f, +0.001243f, +0.001105f, + +0.000185f, +0.001547f, -0.000406f, -0.001350f, +0.000032f, -0.001034f, +0.000890f, -0.001034f, +0.000401f, +0.000753f, + -0.000128f, +0.000236f, -0.000881f, +0.000081f, -0.000277f, -0.000566f, -0.000225f, +0.000065f, +0.000062f, +0.000048f, + +0.000404f, +0.000564f, +0.000195f, +0.000345f, +0.000246f, +0.000155f, +0.000196f, -0.000240f, -0.000018f, +0.000171f, + +0.000227f, -0.000258f, +0.000229f, -0.000137f, -0.000522f, -0.000136f, +0.000040f, +0.000150f, +0.000057f, -0.000037f, + +0.000191f, +0.000141f, +0.000119f, -0.000081f, -0.000005f, -0.000235f, +0.000164f, -0.000042f, -0.000161f, -0.000062f, + -0.000036f, +0.000080f, +0.000087f, -0.000116f, -0.000003f, +0.000049f, +0.000007f, +0.000052f, +0.000019f, -0.000014f, + -0.000006f, -0.000043f, +0.000023f, +0.000086f, -0.000057f, -0.000014f + }, + { + +0.012509f, -0.093358f, +0.010767f, -0.000663f, -0.002407f, +0.000238f, -0.000836f, +0.000731f, +0.001358f, -0.000987f, + -0.001030f, +0.000469f, +0.000424f, -0.000808f, -0.000958f, +0.003313f, +0.000866f, -0.000525f, -0.000136f, -0.000439f, + -0.000503f, -0.000773f, +0.000120f, -0.000944f, +0.000164f, +0.000667f, -0.000109f, +0.000123f, +0.000613f, +0.000293f, + -0.000547f, +0.000329f, -0.000380f, -0.000496f, +0.000399f, -0.000304f, -0.000747f, +0.000122f, +0.000174f, +0.000628f, + -0.000314f, +0.000151f, -0.001241f, -0.000060f, +0.000512f, +0.000153f, +0.000166f, -0.000283f, -0.000301f, +0.000257f, + +0.000118f, -0.000535f, -0.000544f, +0.000127f, -0.000118f, +0.000087f, -0.000180f, -0.000413f, +0.000165f, +0.000099f, + -0.000014f, +0.000055f, -0.000314f, +0.000029f, +0.000259f, +0.000104f, -0.000114f, -0.000150f, -0.000039f, -0.000119f, + +0.000123f, +0.000055f, +0.000059f, +0.000018f, +0.000047f, -0.000004f, -0.000062f, +0.000057f, +0.000143f, -0.000023f, + +0.000062f, +0.000155f, +0.000008f, -0.000020f, -0.000075f, -0.000007f, +0.000014f, -0.000057f, +0.000045f, +0.000023f, + -0.000011f, +0.000009f, -0.000011f, +0.000159f, -0.000031f, -0.000012f + }, + { + +0.000250f, -0.007009f, +0.001174f, +0.000622f, -0.000092f, -0.000124f, -0.000691f, +0.000998f, -0.000625f, +0.000438f, + -0.000276f, -0.000037f, -0.000043f, -0.000488f, -0.005095f, +0.001347f, +0.004669f, -0.001533f, +0.002430f, +0.001255f, + -0.001477f, +0.000779f, -0.001944f, +0.000250f, +0.002304f, -0.001323f, +0.003080f, -0.001587f, -0.000500f, +0.000813f, + -0.000762f, +0.001724f, -0.000089f, -0.000971f, -0.000553f, -0.000046f, +0.000260f, +0.000882f, +0.000241f, -0.000482f, + +0.000105f, +0.001252f, +0.000297f, +0.000498f, +0.000031f, -0.000316f, +0.000106f, -0.000044f, -0.000104f, +0.000564f, + -0.000403f, -0.000226f, -0.000131f, -0.000063f, -0.000268f, -0.000205f, -0.000106f, +0.000296f, -0.000312f, +0.000158f, + +0.000077f, -0.000053f, +0.000013f, +0.000059f, -0.000013f, +0.000018f, -0.000153f, -0.000341f, -0.000108f, +0.000272f, + +0.000051f, -0.000280f, -0.000087f, +0.000038f, -0.000101f, +0.000082f, -0.000219f, -0.000079f, +0.000072f, +0.000007f, + -0.000014f, -0.000020f, +0.000070f, -0.000008f, -0.000048f, +0.000015f, +0.000020f, -0.000000f, +0.000026f, +0.000059f, + +0.000037f, +0.000020f, -0.000012f, +0.000015f, +0.000022f, -0.000020f + }, + { + +0.003355f, +0.040596f, -0.001507f, +0.000146f, -0.001300f, +0.000444f, +0.000510f, -0.000730f, +0.000373f, -0.000503f, + -0.000407f, +0.001277f, +0.000332f, -0.000981f, +0.000174f, -0.000052f, +0.000116f, +0.000945f, +0.000183f, -0.000455f, + +0.000450f, +0.000617f, -0.001275f, +0.000314f, +0.000809f, -0.000514f, -0.000032f, -0.000959f, +0.000224f, -0.000794f, + +0.000187f, +0.000130f, +0.000764f, -0.000241f, +0.000208f, -0.000619f, +0.000736f, -0.000179f, +0.000407f, +0.000010f, + +0.000240f, -0.000740f, +0.000632f, -0.000246f, -0.000712f, +0.000763f, -0.000097f, +0.000169f, -0.000291f, -0.000369f, + -0.000088f, +0.000005f, +0.000027f, -0.000116f, -0.000056f, +0.000224f, -0.000263f, +0.000134f, +0.000345f, -0.000006f, + +0.000196f, -0.000018f, -0.000025f, +0.000007f, +0.000006f, +0.000122f, -0.000060f, +0.000281f, -0.000021f, +0.000043f, + +0.000087f, +0.000002f, -0.000081f, -0.000114f, -0.000030f, +0.000137f, -0.000134f, -0.000065f, +0.000163f, -0.000179f, + -0.000040f, +0.000060f, -0.000023f, -0.000021f, +0.000039f, -0.000066f, +0.000023f, +0.000007f, -0.000055f, +0.000004f, + +0.000037f, +0.000044f, -0.000010f, -0.000003f, -0.000011f, +0.000038f + }, + { + -0.000174f, -0.002107f, -0.000790f, +0.001130f, -0.000148f, +0.000262f, -0.000549f, -0.000578f, -0.000256f, +0.000154f, + +0.000101f, +0.000652f, -0.000225f, +0.001578f, +0.002086f, -0.002299f, +0.000098f, +0.000323f, -0.000515f, +0.001428f, + -0.000399f, -0.001118f, +0.000528f, +0.000148f, +0.001868f, +0.000457f, -0.001993f, +0.000017f, -0.000484f, -0.000772f, + +0.002642f, -0.001908f, +0.000663f, -0.000111f, -0.000932f, +0.000777f, +0.000056f, -0.000402f, +0.000763f, -0.000557f, + -0.000569f, -0.000414f, -0.000401f, -0.000388f, -0.000037f, +0.000060f, +0.000147f, +0.000588f, -0.000011f, +0.000370f, + +0.000109f, -0.000083f, -0.000152f, -0.000472f, -0.000046f, +0.000347f, -0.000198f, -0.000241f, -0.000009f, +0.000406f, + +0.000189f, +0.000029f, -0.000179f, +0.000167f, +0.000226f, +0.000153f, +0.000172f, -0.000047f, +0.000028f, +0.000086f, + +0.000127f, +0.000014f, -0.000077f, -0.000079f, -0.000161f, +0.000035f, -0.000036f, -0.000106f, -0.000047f, -0.000007f, + +0.000050f, +0.000082f, +0.000032f, +0.000036f, -0.000057f, -0.000122f, -0.000121f, -0.000042f, +0.000027f, +0.000031f, + -0.000053f, +0.000042f, -0.000020f, -0.000078f, -0.000081f, -0.000033f + }, + { + +0.002213f, -0.045965f, -0.012167f, +0.002048f, +0.001316f, -0.005506f, +0.002989f, -0.001102f, -0.000459f, -0.000893f, + -0.000140f, -0.001101f, -0.000253f, +0.000543f, -0.002475f, +0.000849f, -0.001509f, +0.000815f, -0.001537f, +0.001456f, + -0.001342f, +0.000053f, -0.000949f, +0.000213f, -0.000643f, -0.000665f, +0.000474f, -0.000764f, -0.000603f, +0.000212f, + +0.000203f, +0.000424f, +0.000847f, -0.001687f, +0.001323f, +0.000268f, +0.000234f, -0.000090f, +0.000396f, -0.000062f, + -0.000208f, -0.000516f, +0.000685f, +0.000575f, -0.000817f, -0.000407f, +0.000120f, -0.000152f, -0.000110f, -0.000178f, + +0.000094f, +0.000106f, -0.000091f, -0.000054f, -0.000111f, -0.000056f, -0.000013f, +0.000074f, +0.000061f, -0.000115f, + +0.000066f, +0.000015f, +0.000037f, -0.000122f, +0.000016f, -0.000118f, +0.000052f, +0.000088f, -0.000070f, -0.000088f, + -0.000013f, +0.000013f, -0.000043f, +0.000009f, -0.000057f, +0.000029f, +0.000037f, +0.000069f, -0.000101f, +0.000022f, + +0.000142f, +0.000019f, -0.000131f, -0.000064f, -0.000019f, -0.000135f, -0.000080f, +0.000007f, -0.000091f, +0.000034f, + +0.000038f, +0.000021f, +0.000003f, -0.000017f, -0.000039f, -0.000058f + }, + { + +0.000537f, +0.008323f, -0.003034f, +0.004021f, +0.000059f, -0.000202f, +0.000382f, -0.002143f, -0.001035f, -0.000622f, + +0.000864f, +0.001516f, -0.000201f, -0.001948f, +0.000596f, -0.000748f, -0.001097f, -0.000830f, -0.002459f, +0.000729f, + +0.000862f, -0.000099f, -0.000157f, +0.000651f, +0.000132f, -0.001270f, +0.000629f, -0.001317f, +0.000975f, +0.000945f, + -0.000281f, -0.000274f, -0.000011f, -0.000386f, +0.000112f, -0.000252f, +0.000905f, +0.000248f, -0.000408f, -0.000314f, + -0.000545f, -0.000184f, +0.000400f, -0.000539f, +0.000347f, +0.000256f, -0.000242f, -0.000121f, -0.000201f, -0.000190f, + -0.000219f, +0.000121f, +0.000134f, +0.000259f, +0.000134f, +0.000104f, +0.000029f, -0.000123f, -0.000091f, +0.000025f, + -0.000220f, -0.000082f, +0.000372f, -0.000049f, -0.000064f, +0.000048f, -0.000005f, -0.000038f, +0.000032f, +0.000054f, + +0.000285f, +0.000015f, +0.000136f, +0.000006f, +0.000023f, +0.000066f, +0.000181f, +0.000078f, -0.000007f, -0.000055f, + -0.000006f, -0.000013f, -0.000104f, +0.000134f, +0.000061f, -0.000066f, +0.000071f, -0.000022f, +0.000045f, -0.000019f, + -0.000062f, +0.000010f, +0.000038f, -0.000001f, -0.000046f, +0.000021f + }, + { + -0.003821f, +0.003990f, -0.001485f, -0.002649f, -0.000857f, +0.001613f, +0.000529f, +0.000300f, +0.000238f, +0.000455f, + +0.001150f, +0.000104f, +0.001747f, -0.002422f, +0.000849f, -0.000073f, +0.000619f, +0.000703f, -0.000746f, -0.000276f, + -0.000388f, -0.000382f, +0.000268f, +0.000740f, -0.000689f, -0.000176f, -0.000938f, +0.000240f, -0.000096f, -0.000496f, + -0.000289f, -0.000392f, +0.000426f, -0.000364f, -0.000490f, +0.000225f, +0.001283f, +0.001108f, +0.000285f, -0.000617f, + -0.000291f, -0.000076f, -0.000159f, -0.000380f, +0.000339f, +0.000046f, +0.000014f, +0.000038f, -0.000155f, +0.000153f, + -0.000543f, +0.000212f, -0.000200f, +0.000177f, -0.000025f, -0.000165f, -0.000129f, +0.000137f, +0.000119f, -0.000082f, + -0.000298f, +0.000165f, +0.000142f, -0.000136f, -0.000081f, +0.000218f, +0.000156f, +0.000142f, +0.000070f, -0.000161f, + +0.000041f, +0.000053f, +0.000013f, -0.000016f, -0.000081f, +0.000072f, -0.000018f, +0.000041f, +0.000114f, -0.000022f, + -0.000048f, -0.000111f, +0.000071f, +0.000024f, +0.000004f, +0.000073f, -0.000013f, -0.000039f, +0.000009f, -0.000087f, + -0.000041f, -0.000040f, -0.000026f, +0.000048f, -0.000016f, -0.000015f + }, + { + -0.000272f, -0.001315f, +0.001891f, -0.001712f, -0.000359f, -0.000371f, +0.000194f, -0.000629f, +0.001055f, -0.000431f, + -0.000229f, +0.000377f, -0.005017f, +0.002378f, -0.007947f, +0.004740f, +0.000631f, +0.002047f, +0.000501f, -0.000033f, + +0.003370f, -0.003181f, -0.004056f, +0.000312f, -0.000093f, -0.000648f, +0.000305f, -0.000620f, +0.000561f, +0.000316f, + -0.000362f, +0.000554f, -0.001532f, -0.000044f, +0.000181f, +0.001148f, -0.000970f, -0.000136f, +0.000591f, -0.000178f, + -0.000221f, -0.000153f, -0.000451f, -0.001030f, +0.000621f, -0.000534f, -0.000884f, -0.000177f, -0.000135f, +0.000353f, + +0.000145f, -0.000706f, +0.000359f, +0.000095f, -0.000378f, +0.000028f, -0.000115f, +0.000229f, +0.000032f, +0.000333f, + +0.000196f, -0.000099f, -0.000180f, -0.000035f, +0.000108f, +0.000056f, -0.000196f, +0.000206f, -0.000092f, +0.000115f, + +0.000028f, +0.000202f, -0.000182f, -0.000106f, -0.000035f, -0.000061f, -0.000115f, +0.000070f, +0.000082f, -0.000023f, + +0.000084f, +0.000113f, +0.000017f, +0.000007f, +0.000005f, +0.000016f, -0.000087f, +0.000026f, -0.000038f, +0.000112f, + +0.000008f, -0.000149f, -0.000063f, +0.000089f, -0.000037f, -0.000028f + }, + { + -0.006019f, +0.018320f, -0.001163f, +0.003479f, +0.000298f, +0.002254f, +0.000761f, +0.001677f, -0.000850f, +0.000412f, + +0.000952f, -0.002751f, +0.001478f, +0.002630f, -0.009095f, +0.000846f, +0.003198f, -0.000385f, -0.000695f, -0.000703f, + -0.000229f, -0.000423f, -0.000850f, -0.000687f, +0.000785f, -0.000212f, +0.000757f, +0.000908f, -0.001443f, +0.000504f, + -0.000060f, +0.000609f, +0.001595f, +0.000405f, -0.000833f, +0.000950f, +0.000815f, +0.000237f, +0.000054f, +0.000084f, + -0.000538f, -0.001176f, +0.000515f, -0.000131f, +0.000909f, -0.000260f, -0.000159f, -0.000666f, -0.000085f, -0.000377f, + +0.000026f, -0.000200f, -0.000132f, +0.000184f, +0.000184f, +0.000005f, +0.000223f, -0.000276f, +0.000033f, -0.000416f, + +0.000161f, +0.000246f, -0.000033f, +0.000343f, +0.000132f, +0.000238f, +0.000074f, +0.000130f, -0.000068f, +0.000105f, + +0.000151f, -0.000094f, +0.000065f, +0.000037f, -0.000031f, +0.000057f, -0.000011f, +0.000047f, +0.000083f, +0.000091f, + +0.000043f, -0.000029f, +0.000138f, +0.000017f, +0.000058f, -0.000001f, -0.000101f, -0.000042f, -0.000018f, +0.000043f, + -0.000061f, +0.000019f, +0.000030f, +0.000030f, -0.000033f, +0.000004f + }, + { + -0.000266f, -0.003849f, -0.001120f, -0.000599f, +0.000241f, +0.000055f, -0.000124f, -0.000093f, +0.001456f, +0.001052f, + +0.000856f, +0.000178f, -0.000311f, +0.010414f, +0.000390f, +0.001333f, +0.000651f, +0.000099f, +0.003707f, -0.002515f, + -0.000125f, -0.001057f, +0.000457f, -0.000129f, +0.000073f, +0.000925f, +0.000372f, -0.000639f, -0.001411f, -0.001546f, + -0.000916f, +0.000662f, -0.001218f, -0.000006f, -0.000025f, +0.000102f, -0.001030f, +0.000267f, +0.000557f, -0.000927f, + +0.000104f, -0.000396f, -0.000209f, +0.000297f, +0.000305f, -0.000290f, +0.000101f, +0.000151f, -0.000080f, -0.000324f, + +0.000137f, +0.000034f, -0.000151f, +0.000233f, +0.000141f, -0.000171f, -0.000532f, -0.000256f, -0.000147f, -0.000568f, + -0.000008f, +0.000045f, +0.000044f, +0.000018f, +0.000027f, -0.000033f, +0.000222f, +0.000036f, +0.000023f, +0.000021f, + +0.000007f, -0.000112f, -0.000069f, +0.000039f, -0.000125f, +0.000146f, -0.000054f, -0.000042f, +0.000022f, -0.000055f, + +0.000138f, +0.000084f, +0.000056f, -0.000068f, -0.000045f, +0.000075f, -0.000094f, -0.000034f, +0.000064f, -0.000043f, + -0.000023f, +0.000046f, +0.000023f, -0.000027f, -0.000003f, +0.000024f + } + }, + { + { + -0.012884f, +0.063306f, -0.005824f, +0.003779f, +0.000939f, -0.001030f, +0.000223f, -0.000724f, -0.000048f, -0.000299f, + +0.000872f, -0.000592f, -0.000684f, -0.000858f, -0.000509f, +0.001470f, +0.000588f, -0.001213f, +0.000730f, +0.001175f, + -0.000375f, -0.000536f, +0.000933f, -0.000370f, -0.000559f, +0.000221f, +0.000069f, +0.000233f, -0.000265f, -0.000501f, + +0.000072f, -0.000117f, -0.000009f, +0.000944f, +0.000260f, -0.000451f, +0.000462f, +0.000566f, +0.000058f, -0.000265f, + +0.000423f, -0.000387f, -0.000113f, +0.000121f, +0.000441f, +0.000757f, -0.000343f, -0.000162f, +0.000232f, -0.000147f, + +0.000217f, -0.000103f, +0.000541f, +0.000255f, +0.000235f, +0.000266f, -0.000085f, +0.000106f, +0.000199f, +0.000076f, + +0.000257f, +0.000010f, -0.000047f, -0.000012f, -0.000092f, +0.000036f, +0.000068f, +0.000040f, -0.000021f, -0.000077f, + -0.000058f, +0.000000f, +0.000061f, +0.000068f, -0.000071f, -0.000175f, -0.000028f, +0.000004f, +0.000028f, +0.000074f, + +0.000072f, +0.000146f, +0.000014f, -0.000017f, -0.000022f, -0.000056f, +0.000117f, -0.000053f, +0.000046f, -0.000055f, + +0.000010f, +0.000007f, +0.000027f, +0.000010f, +0.000020f, +0.000003f + }, + { + +0.000760f, +0.007540f, +0.000117f, +0.002018f, +0.000769f, -0.001445f, -0.001010f, -0.000147f, +0.000024f, -0.000521f, + -0.000002f, +0.000338f, +0.000321f, -0.001152f, -0.000487f, -0.001728f, -0.003525f, -0.000704f, +0.003408f, +0.001195f, + +0.000106f, -0.001564f, -0.002509f, +0.000206f, +0.000488f, +0.001308f, +0.000085f, +0.000084f, +0.001063f, +0.000685f, + -0.000590f, -0.000200f, +0.000719f, +0.000086f, -0.000704f, -0.000519f, -0.000306f, +0.000108f, +0.000262f, +0.000714f, + -0.000193f, +0.000817f, +0.000813f, +0.000301f, -0.000047f, -0.000124f, +0.000257f, +0.000071f, -0.000001f, +0.000146f, + +0.000163f, -0.000252f, +0.000416f, +0.000398f, +0.000188f, -0.000532f, -0.000212f, -0.000228f, -0.000016f, +0.000131f, + -0.000003f, -0.000002f, -0.000158f, +0.000142f, +0.000079f, -0.000084f, +0.000210f, +0.000250f, +0.000009f, -0.000032f, + +0.000135f, -0.000003f, -0.000051f, -0.000024f, +0.000081f, +0.000078f, -0.000146f, -0.000097f, -0.000081f, +0.000089f, + +0.000036f, -0.000067f, +0.000021f, +0.000074f, -0.000050f, +0.000103f, +0.000088f, -0.000095f, +0.000032f, +0.000065f, + -0.000084f, -0.000024f, +0.000052f, +0.000039f, +0.000065f, -0.000056f + }, + { + -0.000282f, +0.043048f, +0.014934f, +0.006078f, +0.004036f, -0.000658f, +0.000396f, +0.000365f, -0.000412f, -0.000927f, + -0.000014f, -0.000910f, -0.000796f, +0.000162f, +0.001005f, -0.000634f, +0.000036f, +0.000329f, -0.000701f, -0.001004f, + -0.000058f, +0.000818f, +0.000352f, +0.000144f, -0.000715f, -0.000430f, +0.000463f, -0.000420f, +0.000034f, -0.000550f, + -0.001333f, +0.000003f, +0.000029f, +0.000347f, -0.000572f, +0.000118f, +0.001394f, -0.000712f, +0.000009f, +0.000021f, + +0.000546f, -0.000227f, +0.000649f, +0.000283f, +0.000567f, -0.000067f, -0.000175f, +0.000422f, +0.000324f, +0.000005f, + +0.000280f, -0.000025f, +0.000311f, -0.000060f, +0.000522f, +0.000160f, -0.000128f, +0.000048f, +0.000005f, +0.000050f, + +0.000041f, +0.000062f, +0.000223f, -0.000103f, +0.000043f, +0.000234f, -0.000097f, +0.000002f, +0.000117f, +0.000126f, + -0.000051f, -0.000141f, +0.000041f, +0.000048f, +0.000010f, -0.000029f, -0.000127f, +0.000030f, +0.000087f, -0.000068f, + -0.000054f, -0.000042f, +0.000085f, -0.000025f, +0.000039f, +0.000024f, -0.000005f, -0.000045f, +0.000012f, +0.000023f, + -0.000042f, -0.000101f, -0.000065f, +0.000010f, -0.000084f, -0.000003f + }, + { + -0.006355f, -0.027077f, -0.007063f, +0.003165f, +0.000191f, -0.000274f, +0.000269f, +0.000146f, -0.000156f, -0.000272f, + -0.001070f, +0.000442f, -0.001196f, +0.001137f, +0.001410f, +0.000730f, -0.000176f, +0.001342f, +0.000136f, +0.000099f, + +0.000286f, -0.000040f, +0.000955f, -0.000298f, -0.000515f, -0.000306f, -0.000974f, +0.000462f, -0.000084f, +0.001004f, + +0.000542f, -0.000963f, +0.000514f, -0.001063f, -0.000544f, -0.000262f, -0.001060f, +0.000612f, -0.000039f, +0.000255f, + +0.000388f, -0.000237f, -0.000051f, -0.000607f, -0.000467f, +0.000414f, +0.000230f, +0.000028f, +0.000384f, -0.000321f, + -0.000037f, -0.000151f, -0.000210f, -0.000045f, -0.000260f, +0.000262f, -0.000103f, -0.000118f, -0.000076f, -0.000279f, + -0.000213f, +0.000070f, -0.000061f, -0.000077f, +0.000096f, -0.000087f, +0.000106f, +0.000039f, -0.000075f, -0.000007f, + -0.000000f, -0.000049f, -0.000149f, -0.000020f, -0.000043f, -0.000022f, -0.000025f, -0.000107f, +0.000010f, +0.000089f, + +0.000143f, +0.000099f, +0.000040f, -0.000077f, -0.000054f, -0.000084f, -0.000001f, +0.000014f, -0.000088f, -0.000014f, + +0.000040f, +0.000066f, -0.000034f, -0.000012f, +0.000015f, -0.000007f + }, + { + -0.000529f, -0.012215f, +0.000965f, +0.000038f, +0.000134f, -0.000397f, -0.000168f, -0.000317f, +0.000035f, +0.000609f, + +0.000006f, -0.000651f, -0.000004f, +0.001634f, +0.002505f, -0.003203f, -0.006330f, +0.000905f, +0.003130f, -0.000385f, + +0.001047f, +0.000545f, -0.000823f, +0.000611f, -0.001335f, -0.001601f, -0.000965f, +0.000236f, +0.000089f, +0.001379f, + +0.001391f, +0.000575f, +0.000092f, -0.000355f, -0.000475f, -0.000367f, -0.000128f, +0.000139f, -0.000066f, -0.000052f, + +0.000584f, -0.000269f, +0.000061f, -0.000092f, -0.000082f, -0.000194f, -0.000224f, +0.000245f, +0.000310f, +0.000078f, + +0.000898f, +0.000142f, +0.000265f, +0.000291f, +0.000199f, -0.000067f, +0.000096f, +0.000101f, +0.000203f, -0.000080f, + +0.000355f, -0.000029f, +0.000124f, -0.000111f, +0.000008f, +0.000049f, +0.000099f, +0.000083f, -0.000104f, +0.000139f, + +0.000121f, -0.000097f, +0.000011f, -0.000069f, -0.000170f, -0.000002f, +0.000122f, +0.000026f, +0.000072f, +0.000055f, + +0.000090f, +0.000030f, -0.000109f, -0.000021f, +0.000055f, +0.000012f, +0.000055f, -0.000006f, +0.000027f, +0.000021f, + -0.000030f, +0.000060f, +0.000035f, -0.000056f, -0.000022f, +0.000053f + }, + { + -0.009788f, -0.046408f, -0.006548f, -0.001041f, -0.000559f, -0.000284f, +0.000547f, +0.000337f, -0.000270f, +0.000926f, + +0.001040f, -0.000099f, -0.000364f, -0.000853f, +0.000070f, +0.003268f, +0.000697f, -0.000606f, +0.000244f, -0.000191f, + -0.000108f, +0.000394f, -0.000897f, -0.001174f, +0.000287f, +0.001027f, -0.000410f, +0.000227f, +0.000689f, +0.000251f, + -0.000704f, -0.000044f, -0.000580f, -0.000825f, +0.000624f, -0.000344f, +0.000222f, -0.000794f, +0.000053f, +0.000536f, + +0.000448f, +0.000228f, -0.001414f, +0.000127f, +0.000371f, +0.000249f, -0.000381f, -0.000270f, -0.000330f, +0.000071f, + -0.000096f, -0.000519f, -0.000076f, +0.000208f, +0.000254f, +0.000034f, +0.000150f, +0.000030f, -0.000056f, -0.000242f, + -0.000018f, +0.000054f, +0.000007f, +0.000222f, +0.000275f, -0.000070f, -0.000007f, -0.000022f, -0.000145f, +0.000062f, + +0.000080f, +0.000114f, +0.000001f, +0.000041f, +0.000058f, +0.000010f, +0.000069f, -0.000009f, -0.000063f, +0.000005f, + +0.000003f, -0.000024f, -0.000170f, -0.000069f, +0.000031f, +0.000020f, +0.000077f, +0.000027f, +0.000056f, -0.000035f, + +0.000002f, +0.000013f, +0.000050f, +0.000031f, -0.000049f, +0.000006f + }, + { + -0.000657f, -0.001955f, +0.001782f, -0.000375f, -0.000148f, -0.000215f, -0.000201f, +0.000184f, +0.000198f, -0.000497f, + +0.000217f, +0.000306f, -0.000655f, -0.003623f, -0.002936f, +0.001421f, -0.000108f, -0.000744f, -0.001195f, +0.001387f, + +0.000314f, +0.000036f, +0.001512f, -0.002406f, +0.000491f, +0.000541f, +0.000398f, +0.000922f, -0.001836f, +0.000279f, + +0.000357f, +0.001195f, +0.000360f, -0.000527f, +0.000866f, -0.000480f, +0.000262f, +0.000232f, +0.000353f, -0.000089f, + +0.000608f, +0.000459f, +0.000598f, +0.000187f, -0.000276f, +0.000495f, +0.000132f, -0.000424f, +0.000150f, +0.000009f, + -0.000368f, -0.000073f, -0.000023f, -0.000126f, -0.000068f, -0.000149f, +0.000166f, +0.000224f, -0.000296f, -0.000097f, + -0.000039f, -0.000088f, -0.000161f, -0.000015f, +0.000033f, -0.000197f, -0.000089f, -0.000124f, -0.000004f, -0.000054f, + -0.000199f, -0.000007f, +0.000121f, +0.000074f, -0.000013f, +0.000064f, -0.000033f, +0.000149f, +0.000073f, +0.000022f, + +0.000026f, -0.000001f, +0.000027f, -0.000057f, +0.000006f, +0.000089f, -0.000037f, -0.000096f, +0.000003f, -0.000080f, + -0.000127f, -0.000071f, +0.000039f, +0.000058f, -0.000042f, -0.000026f + }, + { + -0.003340f, +0.023172f, +0.011069f, +0.000313f, +0.000444f, +0.000881f, +0.000369f, -0.001564f, -0.000243f, +0.000099f, + +0.000614f, +0.000333f, -0.000760f, +0.001659f, +0.000818f, -0.000755f, +0.000818f, -0.000700f, -0.000830f, +0.000472f, + +0.000694f, +0.000229f, +0.000297f, -0.000100f, -0.000176f, -0.000289f, +0.000534f, -0.000797f, +0.000042f, -0.000034f, + -0.000138f, -0.000131f, +0.000112f, +0.000550f, +0.000048f, +0.000937f, +0.000352f, +0.000638f, -0.000175f, +0.000186f, + +0.000159f, -0.000615f, +0.000116f, -0.000219f, -0.000275f, +0.000627f, -0.000060f, -0.000814f, -0.000296f, +0.000342f, + -0.000246f, -0.000080f, -0.000553f, -0.000286f, +0.000253f, +0.000124f, +0.000233f, +0.000096f, +0.000353f, +0.000014f, + +0.000038f, -0.000044f, -0.000003f, +0.000022f, +0.000063f, +0.000038f, +0.000047f, +0.000067f, +0.000057f, -0.000037f, + +0.000046f, +0.000052f, -0.000105f, +0.000118f, +0.000199f, -0.000054f, -0.000033f, +0.000113f, -0.000007f, -0.000055f, + -0.000001f, -0.000110f, -0.000032f, -0.000000f, -0.000033f, -0.000108f, +0.000034f, +0.000150f, -0.000020f, +0.000006f, + +0.000024f, +0.000024f, +0.000075f, +0.000048f, +0.000030f, +0.000001f + }, + { + -0.001060f, -0.002526f, +0.005613f, -0.000129f, +0.000439f, -0.000127f, -0.000079f, -0.000904f, +0.000621f, -0.000114f, + -0.000072f, -0.000106f, -0.000654f, +0.002001f, +0.002134f, -0.003963f, -0.000226f, -0.000166f, -0.001009f, +0.003857f, + -0.000561f, -0.002563f, -0.000261f, +0.002919f, +0.001203f, +0.001164f, -0.001843f, +0.000261f, -0.001151f, +0.000208f, + +0.000443f, -0.000180f, +0.000520f, -0.001670f, +0.000236f, +0.001057f, +0.000037f, -0.000752f, +0.000412f, -0.000334f, + +0.000251f, -0.000433f, -0.000548f, +0.000342f, +0.000505f, -0.000186f, +0.000390f, +0.000403f, +0.000213f, +0.000156f, + -0.000007f, -0.000283f, -0.000239f, +0.000006f, -0.000062f, +0.000055f, +0.000019f, +0.000204f, +0.000271f, +0.000200f, + +0.000017f, -0.000356f, -0.000107f, -0.000030f, -0.000144f, -0.000255f, -0.000079f, +0.000004f, +0.000056f, +0.000099f, + -0.000058f, -0.000076f, -0.000173f, +0.000026f, +0.000137f, +0.000035f, -0.000068f, -0.000002f, +0.000018f, -0.000074f, + +0.000038f, -0.000142f, -0.000119f, +0.000038f, -0.000028f, -0.000067f, +0.000072f, +0.000093f, +0.000008f, -0.000065f, + +0.000020f, +0.000033f, -0.000019f, -0.000046f, -0.000045f, +0.000042f + }, + { + -0.004331f, -0.038306f, -0.008845f, -0.003848f, +0.001040f, +0.000853f, -0.005625f, +0.000066f, -0.000738f, +0.000106f, + +0.000134f, +0.000357f, +0.000113f, -0.001496f, -0.000879f, +0.000027f, -0.000558f, +0.000469f, -0.000300f, -0.000526f, + -0.000433f, -0.000338f, -0.000374f, -0.000460f, -0.000116f, -0.000982f, -0.000299f, -0.000025f, +0.000314f, +0.000097f, + -0.000054f, +0.000112f, +0.000831f, +0.000166f, +0.000936f, -0.000077f, +0.000353f, +0.000211f, -0.000212f, -0.000241f, + +0.000511f, +0.000400f, +0.000287f, -0.000533f, +0.000096f, +0.000419f, +0.000044f, +0.000003f, +0.000021f, +0.000395f, + +0.000226f, +0.000303f, +0.000227f, -0.000097f, -0.000524f, -0.000132f, +0.000177f, -0.000243f, +0.000008f, +0.000018f, + -0.000325f, +0.000175f, +0.000121f, -0.000001f, -0.000089f, -0.000075f, +0.000019f, -0.000045f, -0.000024f, +0.000103f, + +0.000007f, -0.000098f, -0.000024f, +0.000072f, +0.000017f, +0.000019f, +0.000017f, +0.000078f, -0.000121f, +0.000040f, + -0.000016f, -0.000042f, -0.000033f, +0.000011f, -0.000005f, +0.000081f, +0.000095f, +0.000043f, +0.000062f, +0.000029f, + +0.000030f, +0.000010f, -0.000090f, -0.000054f, +0.000018f, +0.000043f + }, + { + -0.000288f, +0.006248f, +0.002086f, +0.002186f, +0.000541f, +0.000611f, -0.000851f, -0.003011f, +0.000249f, +0.000339f, + +0.000536f, +0.000710f, -0.000422f, -0.001054f, -0.002228f, -0.000870f, +0.000779f, -0.002383f, -0.001497f, +0.001440f, + -0.002409f, -0.000179f, +0.001843f, +0.000164f, -0.000473f, -0.000164f, -0.000098f, -0.000385f, +0.000358f, -0.000794f, + -0.000155f, -0.000454f, -0.000176f, +0.000074f, +0.000029f, -0.000147f, -0.000025f, -0.000118f, -0.000359f, -0.000586f, + -0.000488f, -0.000006f, -0.000062f, +0.000254f, +0.000118f, -0.000093f, -0.000047f, -0.000119f, -0.000023f, +0.000275f, + +0.000121f, +0.000193f, -0.000133f, -0.000160f, -0.000365f, +0.000336f, -0.000064f, +0.000021f, +0.000122f, -0.000108f, + -0.000042f, +0.000185f, -0.000063f, -0.000130f, +0.000097f, +0.000300f, -0.000018f, +0.000202f, +0.000165f, +0.000056f, + +0.000141f, +0.000041f, +0.000004f, +0.000045f, +0.000113f, +0.000055f, +0.000005f, -0.000151f, -0.000082f, +0.000018f, + -0.000058f, +0.000042f, +0.000077f, -0.000045f, -0.000077f, -0.000033f, -0.000000f, -0.000010f, -0.000047f, -0.000117f, + -0.000041f, +0.000019f, +0.000015f, +0.000017f, -0.000013f, +0.000029f + }, + { + +0.003199f, -0.004493f, -0.006318f, -0.001899f, +0.001355f, -0.000543f, -0.000974f, +0.001571f, -0.000343f, +0.001076f, + +0.000178f, -0.001052f, -0.000388f, -0.000824f, +0.000824f, -0.000448f, +0.000779f, -0.000160f, +0.000072f, +0.000148f, + -0.000666f, +0.000634f, +0.000496f, -0.000598f, -0.000638f, -0.000178f, +0.000814f, -0.000161f, -0.000652f, -0.000783f, + -0.000688f, -0.000245f, -0.000332f, -0.000785f, -0.000005f, +0.000217f, -0.000342f, +0.000090f, -0.000110f, +0.000092f, + -0.000021f, -0.000363f, +0.000025f, +0.000091f, +0.000072f, +0.000349f, -0.000399f, +0.000107f, +0.000306f, -0.000059f, + +0.000210f, +0.000112f, +0.000260f, +0.000155f, -0.000210f, +0.000027f, -0.000147f, -0.000111f, +0.000059f, -0.000200f, + -0.000044f, +0.000064f, +0.000021f, +0.000103f, +0.000118f, -0.000095f, +0.000024f, +0.000037f, -0.000022f, +0.000030f, + +0.000135f, -0.000151f, +0.000094f, +0.000030f, +0.000033f, +0.000052f, -0.000061f, +0.000019f, +0.000023f, -0.000012f, + -0.000022f, +0.000040f, +0.000046f, +0.000002f, +0.000089f, +0.000058f, -0.000101f, +0.000031f, -0.000049f, -0.000004f, + +0.000055f, +0.000018f, +0.000092f, -0.000021f, -0.000018f, +0.000012f + }, + { + +0.000357f, +0.003514f, -0.003541f, -0.001146f, +0.000411f, +0.000399f, +0.000380f, -0.000975f, +0.000665f, -0.000038f, + -0.000004f, +0.000698f, +0.001521f, -0.012962f, +0.002212f, +0.002873f, +0.000316f, +0.003007f, -0.000607f, +0.001585f, + -0.000673f, -0.001332f, -0.001435f, -0.000103f, -0.000251f, +0.001808f, -0.000189f, -0.001966f, +0.000428f, +0.000720f, + +0.001053f, +0.000388f, -0.002339f, -0.000530f, +0.000006f, +0.000498f, -0.000831f, +0.000164f, +0.000153f, +0.000539f, + -0.000028f, -0.000227f, -0.000581f, -0.000448f, -0.000289f, +0.000098f, +0.000041f, -0.000011f, -0.000374f, +0.000213f, + +0.000504f, -0.000009f, +0.000166f, -0.000020f, -0.000014f, -0.000021f, +0.000183f, -0.000273f, +0.000156f, -0.000027f, + -0.000271f, +0.000041f, +0.000207f, +0.000099f, +0.000157f, -0.000126f, +0.000029f, -0.000112f, -0.000119f, +0.000205f, + +0.000108f, +0.000041f, +0.000007f, -0.000115f, -0.000047f, +0.000195f, +0.000045f, +0.000067f, +0.000003f, -0.000008f, + -0.000063f, -0.000081f, -0.000128f, -0.000095f, -0.000005f, -0.000022f, +0.000035f, +0.000055f, -0.000012f, +0.000017f, + -0.000065f, -0.000013f, +0.000123f, +0.000042f, -0.000071f, +0.000061f + }, + { + +0.004358f, +0.003265f, +0.003776f, -0.002750f, -0.001131f, -0.000206f, +0.000297f, +0.001129f, -0.000279f, +0.000921f, + -0.001528f, +0.002862f, -0.000155f, -0.002359f, -0.000569f, +0.000800f, -0.000658f, -0.000630f, -0.000371f, -0.000698f, + -0.000443f, -0.000256f, -0.000977f, -0.000365f, +0.000450f, +0.000584f, +0.001149f, +0.000552f, +0.000192f, +0.000859f, + -0.000178f, +0.000857f, +0.000563f, -0.000486f, -0.000308f, +0.000269f, +0.000012f, -0.000317f, +0.000217f, -0.000083f, + -0.000258f, -0.000445f, +0.000255f, +0.000085f, -0.000240f, -0.000694f, -0.000423f, -0.000549f, -0.000230f, +0.000039f, + +0.000094f, -0.000550f, +0.000020f, +0.000346f, -0.000039f, -0.000228f, -0.000141f, -0.000038f, -0.000131f, -0.000268f, + +0.000091f, -0.000016f, +0.000213f, -0.000032f, -0.000064f, -0.000115f, +0.000129f, +0.000025f, +0.000002f, +0.000080f, + -0.000002f, +0.000144f, +0.000092f, +0.000000f, -0.000136f, -0.000074f, +0.000027f, +0.000139f, -0.000029f, -0.000157f, + -0.000004f, -0.000008f, -0.000073f, -0.000050f, +0.000029f, -0.000064f, -0.000082f, +0.000116f, +0.000055f, -0.000054f, + +0.000022f, +0.000015f, -0.000062f, +0.000019f, +0.000003f, +0.000020f + }, + { + +0.000448f, -0.005626f, -0.001611f, +0.000382f, -0.000132f, -0.000073f, +0.000286f, +0.000631f, +0.001070f, +0.000454f, + -0.000641f, +0.000045f, -0.001595f, +0.007198f, +0.021949f, -0.002258f, -0.000400f, -0.000666f, +0.002711f, -0.001186f, + -0.002909f, -0.000949f, +0.001603f, -0.000143f, -0.000675f, -0.000320f, +0.000975f, -0.001588f, -0.001007f, -0.002012f, + -0.000182f, +0.000757f, -0.001186f, +0.000541f, +0.000168f, -0.000838f, +0.000770f, +0.000376f, -0.000210f, -0.000240f, + -0.000392f, +0.000465f, +0.000849f, -0.000030f, -0.000487f, +0.000320f, -0.000476f, +0.000074f, +0.000273f, -0.000015f, + +0.000014f, +0.000249f, +0.000329f, +0.000349f, -0.000215f, -0.000142f, -0.000177f, -0.000081f, -0.000299f, +0.000183f, + +0.000377f, +0.000023f, +0.000004f, -0.000082f, +0.000108f, +0.000226f, -0.000334f, -0.000120f, +0.000162f, +0.000138f, + -0.000094f, -0.000003f, +0.000167f, +0.000100f, +0.000064f, +0.000083f, -0.000194f, +0.000072f, +0.000043f, +0.000181f, + -0.000003f, -0.000102f, -0.000074f, -0.000016f, +0.000051f, +0.000013f, +0.000028f, -0.000040f, -0.000058f, -0.000023f, + +0.000000f, -0.000042f, +0.000025f, +0.000043f, +0.000018f, -0.000055f + } + }, + { + { + +0.007908f, +0.095817f, -0.018402f, +0.000515f, +0.000825f, -0.000348f, +0.001170f, -0.000487f, -0.000040f, +0.000097f, + +0.000322f, -0.001052f, -0.000627f, +0.000631f, +0.001956f, -0.000334f, +0.000175f, -0.000484f, -0.000625f, -0.000233f, + +0.000719f, +0.000358f, +0.000276f, -0.000051f, -0.000303f, -0.000336f, +0.000050f, +0.000473f, -0.000442f, -0.000539f, + -0.000281f, -0.000086f, +0.000330f, +0.000718f, -0.000131f, -0.000053f, +0.000742f, +0.000647f, +0.000172f, -0.000194f, + -0.000043f, -0.000297f, +0.000128f, -0.000336f, +0.000229f, +0.000264f, -0.000592f, -0.000302f, -0.000168f, -0.000268f, + -0.000006f, -0.000520f, +0.000078f, -0.000158f, -0.000083f, +0.000180f, -0.000048f, -0.000018f, +0.000035f, +0.000256f, + +0.000175f, -0.000074f, -0.000131f, -0.000025f, -0.000035f, +0.000040f, +0.000136f, +0.000040f, -0.000017f, -0.000071f, + +0.000029f, +0.000177f, +0.000028f, +0.000034f, -0.000028f, -0.000026f, +0.000010f, -0.000100f, +0.000128f, +0.000092f, + +0.000055f, +0.000082f, -0.000038f, -0.000012f, -0.000029f, +0.000040f, +0.000024f, -0.000027f, +0.000082f, -0.000012f, + -0.000019f, +0.000020f, -0.000020f, -0.000008f, +0.000026f, +0.000016f + }, + { + -0.001363f, +0.010381f, +0.002131f, -0.001186f, +0.000144f, -0.000331f, +0.000348f, +0.000395f, -0.000015f, -0.000260f, + +0.000521f, +0.000075f, -0.000022f, -0.000383f, -0.001778f, -0.000993f, -0.000958f, -0.001813f, +0.000150f, -0.000418f, + -0.000320f, -0.000414f, -0.000479f, +0.001057f, -0.000277f, +0.000256f, +0.000338f, +0.000552f, +0.000490f, +0.000564f, + -0.000514f, +0.000039f, +0.000758f, +0.000010f, +0.000623f, +0.000091f, +0.000257f, +0.000286f, -0.000667f, -0.000200f, + -0.000497f, +0.000500f, +0.000032f, -0.000427f, +0.000290f, +0.000013f, -0.000006f, -0.000638f, -0.000066f, +0.000142f, + -0.000096f, -0.000181f, +0.000331f, +0.000100f, -0.000394f, -0.000403f, +0.000044f, -0.000109f, -0.000045f, +0.000280f, + +0.000190f, +0.000032f, -0.000156f, -0.000039f, +0.000068f, -0.000013f, +0.000162f, +0.000110f, -0.000106f, -0.000040f, + +0.000191f, -0.000116f, -0.000016f, +0.000038f, +0.000107f, -0.000057f, -0.000138f, -0.000001f, +0.000032f, +0.000079f, + -0.000086f, -0.000085f, +0.000023f, +0.000060f, +0.000008f, +0.000082f, +0.000033f, -0.000048f, +0.000062f, -0.000049f, + -0.000093f, +0.000017f, +0.000096f, +0.000075f, +0.000038f, -0.000063f + }, + { + +0.002206f, +0.013600f, -0.010289f, +0.006431f, +0.001365f, -0.001251f, +0.000667f, +0.000671f, +0.000021f, -0.000012f, + +0.000836f, -0.001288f, -0.001167f, +0.000473f, +0.000966f, +0.000277f, +0.001479f, +0.001146f, -0.000648f, +0.000828f, + +0.000116f, +0.000680f, -0.000244f, -0.000037f, -0.000180f, +0.001142f, +0.000959f, -0.000721f, -0.000540f, +0.000454f, + -0.000391f, +0.000314f, -0.000132f, -0.000074f, -0.000736f, +0.000961f, +0.001426f, -0.000504f, +0.000629f, -0.000486f, + -0.000090f, -0.000428f, +0.000415f, -0.000375f, +0.000322f, -0.000030f, -0.000164f, +0.000392f, +0.000161f, -0.000220f, + +0.000274f, +0.000094f, +0.000265f, -0.000143f, +0.000535f, +0.000093f, +0.000009f, -0.000122f, -0.000182f, -0.000138f, + +0.000140f, +0.000194f, +0.000357f, -0.000087f, +0.000053f, +0.000143f, -0.000162f, -0.000038f, +0.000117f, +0.000042f, + -0.000012f, +0.000046f, +0.000099f, -0.000066f, -0.000054f, -0.000049f, +0.000016f, +0.000057f, -0.000035f, -0.000018f, + +0.000026f, +0.000025f, +0.000048f, -0.000059f, +0.000051f, +0.000059f, +0.000037f, -0.000109f, +0.000043f, +0.000038f, + -0.000037f, -0.000046f, +0.000007f, -0.000018f, -0.000024f, +0.000052f + }, + { + -0.000205f, -0.012775f, -0.004594f, +0.001885f, -0.000177f, -0.000629f, -0.000307f, -0.000104f, -0.000244f, -0.000354f, + -0.001294f, +0.000607f, -0.001203f, +0.001448f, +0.000402f, -0.000627f, -0.000720f, +0.000029f, -0.000516f, -0.000345f, + +0.000088f, -0.000569f, +0.000229f, -0.000800f, -0.000672f, -0.000279f, +0.000079f, +0.000441f, +0.000313f, +0.000628f, + +0.000258f, -0.000500f, +0.000621f, -0.000339f, -0.000250f, +0.000062f, -0.000434f, -0.000172f, -0.000161f, +0.000209f, + -0.000256f, -0.000236f, +0.000314f, -0.000116f, -0.000323f, +0.000479f, -0.000016f, -0.000137f, +0.000179f, -0.000129f, + +0.000128f, -0.000129f, +0.000084f, -0.000050f, +0.000043f, +0.000306f, -0.000009f, +0.000033f, -0.000358f, -0.000168f, + +0.000135f, +0.000174f, -0.000019f, +0.000069f, +0.000060f, -0.000003f, +0.000218f, -0.000093f, +0.000002f, +0.000065f, + -0.000040f, -0.000159f, -0.000075f, +0.000062f, -0.000026f, +0.000016f, -0.000041f, +0.000003f, +0.000059f, +0.000052f, + +0.000067f, +0.000017f, -0.000047f, -0.000018f, -0.000001f, -0.000060f, +0.000052f, -0.000046f, -0.000036f, +0.000042f, + +0.000034f, -0.000005f, -0.000026f, +0.000029f, +0.000011f, -0.000018f + }, + { + +0.000637f, -0.013372f, -0.001065f, +0.000234f, -0.000046f, -0.000144f, +0.000494f, -0.000110f, -0.000261f, +0.000499f, + +0.000227f, -0.000442f, +0.000938f, -0.000532f, +0.003177f, +0.000840f, -0.001153f, +0.008294f, -0.003612f, -0.000120f, + +0.001672f, +0.000689f, -0.000527f, -0.000609f, -0.000765f, +0.000800f, +0.002233f, +0.000579f, +0.000055f, +0.000583f, + +0.000526f, -0.000690f, +0.000657f, +0.000052f, -0.000475f, +0.000016f, +0.000431f, +0.000240f, -0.000714f, -0.000359f, + +0.000376f, -0.000033f, +0.000392f, -0.000164f, +0.000141f, +0.000053f, +0.000056f, +0.000388f, -0.000220f, -0.000003f, + +0.000552f, -0.000244f, +0.000307f, -0.000116f, -0.000107f, -0.000414f, +0.000048f, +0.000148f, +0.000129f, -0.000028f, + +0.000283f, -0.000132f, +0.000147f, +0.000130f, +0.000311f, +0.000047f, +0.000033f, -0.000091f, -0.000190f, +0.000097f, + -0.000046f, -0.000128f, +0.000002f, +0.000081f, +0.000005f, +0.000153f, +0.000014f, -0.000000f, +0.000120f, +0.000009f, + +0.000030f, -0.000070f, -0.000041f, +0.000135f, -0.000045f, -0.000023f, -0.000021f, -0.000095f, +0.000016f, -0.000002f, + -0.000002f, +0.000073f, -0.000012f, -0.000069f, +0.000054f, +0.000046f + }, + { + +0.001633f, -0.021476f, -0.001144f, -0.000558f, +0.001044f, +0.000018f, +0.001057f, -0.000945f, -0.000702f, +0.001786f, + +0.001002f, -0.000153f, -0.000045f, +0.001007f, +0.000909f, +0.001192f, -0.000596f, -0.000367f, +0.000443f, +0.000501f, + +0.000215f, -0.000231f, -0.000174f, -0.000336f, +0.000013f, +0.000159f, -0.000065f, +0.000094f, +0.000301f, -0.000235f, + -0.000793f, -0.000001f, +0.000200f, +0.000354f, +0.000184f, -0.000722f, +0.000806f, -0.000134f, -0.000122f, +0.000213f, + +0.000714f, +0.000504f, -0.000607f, -0.000021f, -0.000027f, +0.000280f, -0.000178f, +0.000167f, -0.000185f, +0.000205f, + -0.000156f, +0.000070f, +0.000289f, +0.000178f, +0.000109f, +0.000046f, +0.000469f, +0.000190f, -0.000072f, -0.000346f, + -0.000042f, +0.000108f, +0.000040f, +0.000160f, -0.000045f, -0.000130f, +0.000187f, +0.000003f, -0.000078f, +0.000034f, + +0.000004f, -0.000029f, +0.000019f, +0.000083f, -0.000081f, +0.000083f, +0.000070f, -0.000043f, -0.000104f, +0.000028f, + -0.000078f, -0.000061f, -0.000058f, +0.000037f, +0.000061f, +0.000020f, -0.000008f, +0.000067f, -0.000012f, +0.000012f, + -0.000023f, -0.000016f, -0.000011f, -0.000035f, +0.000019f, -0.000002f + }, + { + -0.000229f, +0.001999f, +0.001599f, -0.000662f, +0.000055f, +0.000073f, +0.000011f, -0.000382f, -0.000194f, -0.000329f, + +0.000216f, -0.000026f, -0.000352f, -0.002856f, -0.003479f, +0.000446f, -0.001511f, -0.002654f, -0.002151f, +0.001791f, + +0.000854f, -0.000460f, +0.001975f, -0.002083f, -0.000231f, +0.000351f, -0.001231f, -0.001346f, -0.000771f, +0.000409f, + -0.000258f, +0.000449f, +0.000316f, +0.000308f, +0.000881f, -0.000538f, -0.000395f, -0.000179f, +0.000567f, +0.000482f, + -0.000197f, -0.000580f, +0.000416f, -0.000249f, -0.000108f, +0.000555f, +0.000073f, -0.000197f, +0.000145f, -0.000358f, + -0.000142f, +0.000233f, +0.000084f, -0.000159f, +0.000195f, +0.000002f, +0.000165f, -0.000035f, +0.000031f, +0.000039f, + -0.000094f, -0.000029f, -0.000076f, -0.000020f, +0.000157f, -0.000128f, +0.000147f, +0.000007f, -0.000039f, -0.000189f, + -0.000057f, +0.000221f, +0.000052f, +0.000132f, +0.000095f, +0.000049f, +0.000044f, +0.000131f, -0.000003f, -0.000007f, + +0.000070f, -0.000022f, +0.000016f, -0.000045f, +0.000028f, +0.000048f, -0.000081f, -0.000073f, -0.000038f, -0.000089f, + -0.000085f, -0.000009f, +0.000042f, -0.000018f, -0.000005f, +0.000013f + }, + { + +0.008061f, +0.012525f, -0.008358f, -0.000812f, +0.000348f, +0.000349f, -0.000515f, -0.000455f, -0.000238f, +0.000205f, + +0.000505f, -0.001128f, -0.000566f, +0.001080f, -0.000922f, -0.000694f, +0.000174f, -0.001446f, +0.000048f, +0.000884f, + -0.000325f, -0.000356f, +0.000606f, -0.000054f, -0.000588f, +0.000491f, +0.000754f, -0.000392f, +0.000092f, -0.000141f, + -0.000492f, -0.000341f, -0.000131f, +0.000343f, +0.000060f, +0.000780f, -0.000245f, +0.000055f, -0.000539f, +0.000165f, + +0.000211f, -0.000041f, +0.000056f, -0.000644f, -0.000270f, +0.000206f, -0.000009f, -0.000887f, +0.000001f, +0.000498f, + -0.000076f, -0.000157f, -0.000455f, -0.000057f, +0.000267f, +0.000164f, +0.000260f, -0.000077f, +0.000138f, -0.000158f, + -0.000108f, +0.000017f, +0.000149f, -0.000074f, -0.000089f, +0.000005f, -0.000001f, -0.000004f, +0.000048f, +0.000014f, + +0.000019f, +0.000028f, +0.000071f, +0.000126f, +0.000013f, -0.000167f, +0.000081f, +0.000028f, -0.000053f, +0.000051f, + -0.000020f, -0.000155f, +0.000012f, +0.000022f, -0.000034f, -0.000044f, +0.000037f, +0.000084f, +0.000012f, +0.000010f, + +0.000001f, +0.000039f, +0.000052f, +0.000059f, +0.000001f, -0.000042f + }, + { + +0.000021f, +0.000713f, +0.002663f, -0.000546f, +0.000042f, -0.000134f, +0.000338f, -0.000370f, +0.000883f, -0.000026f, + -0.000396f, +0.000049f, +0.000223f, +0.002019f, +0.002667f, -0.002286f, -0.002214f, +0.000387f, -0.000317f, +0.001893f, + +0.000709f, +0.000599f, +0.001396f, +0.004086f, -0.000312f, +0.000843f, -0.000160f, -0.001062f, -0.000962f, +0.000855f, + -0.000589f, -0.000245f, -0.000144f, -0.000909f, +0.000371f, -0.000124f, +0.000615f, +0.000379f, +0.000107f, -0.000222f, + +0.000529f, -0.000139f, +0.000057f, +0.000430f, +0.000174f, -0.000485f, +0.000083f, -0.000094f, +0.000173f, -0.000045f, + -0.000094f, -0.000076f, +0.000212f, +0.000109f, -0.000249f, -0.000131f, +0.000136f, +0.000235f, -0.000191f, -0.000060f, + +0.000072f, -0.000138f, +0.000197f, -0.000074f, -0.000027f, -0.000106f, -0.000132f, -0.000036f, -0.000005f, +0.000010f, + -0.000082f, -0.000012f, -0.000037f, +0.000132f, +0.000083f, -0.000073f, -0.000038f, +0.000054f, +0.000059f, -0.000028f, + -0.000045f, -0.000221f, -0.000025f, +0.000028f, -0.000004f, +0.000029f, +0.000098f, +0.000038f, -0.000002f, -0.000043f, + +0.000038f, -0.000003f, +0.000030f, -0.000005f, +0.000028f, +0.000054f + }, + { + +0.005913f, -0.023630f, -0.006527f, -0.003562f, +0.001809f, +0.001585f, -0.005225f, +0.000352f, -0.000507f, +0.000776f, + -0.000024f, +0.000271f, -0.000113f, -0.000970f, -0.000678f, -0.000230f, +0.001056f, +0.000479f, +0.000172f, -0.000202f, + +0.000334f, -0.000228f, +0.000183f, +0.000067f, +0.000700f, -0.000481f, -0.000744f, +0.000208f, +0.000963f, -0.000308f, + -0.000373f, -0.000352f, +0.000149f, +0.000289f, +0.000698f, -0.000565f, +0.000323f, +0.000524f, -0.000446f, -0.000183f, + +0.000514f, +0.000689f, -0.000121f, -0.000596f, +0.000890f, +0.000608f, -0.000045f, +0.000330f, +0.000130f, +0.000416f, + +0.000065f, +0.000085f, +0.000149f, -0.000265f, -0.000376f, +0.000064f, +0.000049f, -0.000247f, +0.000078f, -0.000074f, + -0.000147f, -0.000008f, +0.000004f, +0.000049f, -0.000191f, +0.000072f, -0.000004f, -0.000145f, +0.000024f, -0.000016f, + +0.000017f, -0.000061f, +0.000027f, -0.000004f, +0.000066f, -0.000030f, +0.000037f, -0.000052f, +0.000019f, -0.000044f, + -0.000048f, -0.000005f, +0.000067f, +0.000003f, +0.000068f, +0.000121f, +0.000062f, +0.000007f, +0.000060f, +0.000002f, + -0.000006f, -0.000024f, -0.000045f, -0.000012f, +0.000044f, +0.000049f + }, + { + +0.000431f, +0.002014f, -0.001257f, +0.000027f, +0.000267f, +0.000166f, -0.001135f, -0.002139f, +0.000694f, +0.000921f, + +0.000296f, -0.000364f, -0.000035f, -0.000854f, -0.002507f, -0.003196f, +0.001726f, -0.000266f, -0.000575f, -0.000489f, + -0.002659f, +0.000410f, +0.001986f, -0.000186f, -0.000305f, +0.000250f, -0.000773f, +0.000376f, +0.000828f, -0.000593f, + +0.000039f, -0.000311f, -0.000303f, -0.000236f, +0.000108f, -0.000414f, -0.000332f, -0.000270f, -0.000217f, -0.000040f, + -0.000446f, +0.000221f, -0.000070f, +0.000052f, -0.000115f, -0.000233f, -0.000141f, +0.000103f, +0.000307f, +0.000419f, + +0.000086f, +0.000012f, -0.000280f, -0.000076f, -0.000150f, +0.000129f, +0.000024f, +0.000098f, +0.000103f, -0.000127f, + +0.000117f, +0.000074f, -0.000114f, +0.000023f, +0.000094f, +0.000043f, +0.000097f, +0.000233f, -0.000105f, -0.000056f, + -0.000025f, -0.000050f, +0.000076f, +0.000083f, +0.000020f, -0.000106f, -0.000069f, -0.000131f, +0.000055f, +0.000012f, + -0.000049f, +0.000039f, +0.000066f, -0.000095f, -0.000022f, +0.000002f, -0.000039f, -0.000016f, -0.000065f, -0.000030f, + +0.000019f, +0.000013f, +0.000007f, +0.000018f, +0.000039f, -0.000031f + }, + { + -0.002448f, -0.008823f, -0.002893f, -0.000418f, +0.002023f, -0.003812f, -0.002407f, +0.002079f, +0.000491f, +0.001063f, + -0.000719f, -0.000270f, -0.000207f, +0.000281f, +0.000807f, -0.000115f, +0.000916f, -0.000044f, +0.000600f, +0.000322f, + -0.000184f, +0.000356f, +0.000086f, -0.000916f, -0.000510f, -0.000408f, +0.001243f, -0.000211f, -0.000113f, -0.000548f, + +0.000002f, +0.000140f, -0.000600f, -0.000300f, +0.000243f, +0.000065f, -0.001157f, -0.000654f, -0.000268f, +0.000169f, + +0.000233f, -0.000418f, +0.000187f, +0.000217f, +0.000092f, +0.000067f, -0.000523f, +0.000162f, +0.000425f, -0.000250f, + +0.000352f, -0.000022f, +0.000463f, -0.000148f, -0.000158f, +0.000147f, +0.000043f, -0.000227f, -0.000135f, +0.000033f, + +0.000128f, -0.000178f, -0.000002f, +0.000180f, -0.000030f, -0.000174f, -0.000078f, -0.000026f, -0.000015f, +0.000132f, + +0.000042f, -0.000110f, +0.000092f, -0.000031f, -0.000018f, -0.000016f, -0.000026f, -0.000039f, -0.000029f, -0.000038f, + +0.000001f, +0.000111f, -0.000014f, +0.000006f, +0.000024f, -0.000038f, -0.000031f, +0.000032f, -0.000007f, +0.000053f, + +0.000019f, +0.000028f, +0.000028f, -0.000060f, -0.000000f, +0.000028f + }, + { + -0.000367f, +0.005592f, -0.000432f, -0.000574f, -0.000094f, +0.000329f, -0.000259f, -0.001017f, +0.000420f, -0.000175f, + +0.000446f, +0.000178f, +0.003825f, -0.009668f, +0.002563f, +0.000629f, -0.000936f, +0.001447f, -0.001217f, +0.001549f, + -0.002017f, +0.001675f, +0.000425f, -0.001656f, -0.000874f, +0.002043f, -0.000736f, -0.001217f, -0.000379f, +0.000550f, + +0.000226f, +0.000671f, -0.001620f, +0.000235f, -0.000324f, -0.000759f, -0.000862f, -0.000423f, +0.000049f, +0.000580f, + +0.000123f, +0.000138f, -0.000229f, -0.000096f, +0.000232f, +0.000298f, +0.000577f, +0.000277f, -0.000117f, +0.000097f, + +0.000360f, +0.000182f, -0.000069f, -0.000093f, +0.000253f, -0.000071f, -0.000038f, -0.000284f, +0.000109f, -0.000158f, + -0.000153f, +0.000162f, +0.000077f, -0.000044f, +0.000090f, -0.000100f, -0.000014f, -0.000173f, +0.000078f, +0.000076f, + +0.000024f, -0.000026f, +0.000095f, -0.000045f, +0.000051f, +0.000125f, -0.000038f, +0.000007f, -0.000056f, +0.000007f, + -0.000094f, -0.000062f, -0.000092f, -0.000076f, +0.000039f, -0.000043f, +0.000074f, -0.000062f, +0.000016f, +0.000010f, + -0.000064f, +0.000061f, +0.000071f, -0.000063f, +0.000021f, +0.000052f + }, + { + -0.000739f, -0.005590f, -0.000543f, -0.005166f, -0.000369f, -0.003073f, -0.004000f, +0.000103f, -0.000226f, -0.000241f, + -0.000277f, +0.004407f, -0.001214f, -0.000265f, +0.002319f, -0.001321f, -0.001290f, -0.000409f, -0.000016f, +0.000299f, + +0.000162f, +0.000420f, -0.000335f, +0.000402f, -0.000001f, +0.000561f, +0.001029f, +0.000578f, +0.000147f, +0.000253f, + +0.000196f, +0.000120f, -0.000528f, -0.000645f, +0.000006f, -0.000092f, -0.000092f, +0.000038f, +0.000555f, -0.000095f, + -0.000622f, +0.000171f, +0.000096f, -0.000095f, -0.000063f, -0.000307f, -0.000082f, +0.000179f, +0.000102f, +0.000193f, + -0.000249f, -0.000125f, +0.000061f, -0.000049f, -0.000203f, -0.000084f, -0.000010f, +0.000310f, -0.000091f, +0.000040f, + +0.000100f, +0.000024f, +0.000194f, -0.000154f, +0.000030f, -0.000115f, +0.000179f, -0.000069f, +0.000026f, -0.000033f, + +0.000047f, +0.000047f, +0.000043f, -0.000017f, -0.000029f, -0.000063f, +0.000088f, +0.000013f, -0.000104f, -0.000103f, + +0.000040f, -0.000028f, -0.000140f, -0.000011f, -0.000002f, -0.000045f, +0.000065f, +0.000093f, -0.000014f, -0.000044f, + +0.000014f, -0.000030f, -0.000065f, -0.000005f, +0.000049f, +0.000001f + }, + { + -0.000094f, -0.005169f, +0.001507f, +0.000862f, -0.000251f, +0.000233f, +0.000225f, +0.000830f, +0.000862f, -0.000493f, + -0.000911f, +0.000509f, +0.000350f, +0.000156f, +0.007440f, -0.003650f, +0.001429f, -0.000407f, +0.000577f, -0.001014f, + -0.000516f, -0.000398f, +0.000252f, -0.000151f, +0.000013f, -0.000878f, -0.000026f, -0.002549f, +0.000620f, +0.000455f, + +0.000062f, +0.000632f, -0.000265f, +0.000913f, -0.000259f, -0.000139f, +0.000720f, -0.000543f, +0.000594f, +0.000102f, + -0.000085f, +0.000773f, +0.000567f, -0.000393f, -0.000076f, +0.000249f, -0.000409f, +0.000098f, +0.000362f, +0.000162f, + -0.000070f, +0.000213f, +0.000115f, -0.000022f, -0.000211f, +0.000041f, +0.000088f, +0.000028f, -0.000028f, +0.000174f, + +0.000073f, -0.000066f, +0.000095f, -0.000069f, -0.000003f, +0.000058f, -0.000348f, +0.000123f, +0.000088f, +0.000110f, + -0.000104f, +0.000052f, +0.000181f, +0.000063f, +0.000069f, -0.000109f, -0.000098f, +0.000096f, -0.000014f, +0.000062f, + -0.000094f, -0.000071f, -0.000071f, +0.000083f, +0.000028f, -0.000011f, +0.000057f, +0.000001f, -0.000061f, +0.000018f, + -0.000015f, -0.000088f, +0.000039f, +0.000040f, -0.000031f, -0.000058f + } + }, + { + { + -0.004007f, +0.068196f, +0.007701f, +0.003848f, +0.000039f, +0.000719f, +0.000302f, -0.000129f, -0.000229f, -0.000688f, + -0.000863f, -0.000389f, -0.000148f, +0.001562f, +0.001387f, -0.001040f, +0.000142f, +0.000435f, -0.000575f, -0.001149f, + +0.001345f, +0.000436f, -0.000337f, +0.000502f, -0.000353f, +0.000027f, +0.000556f, -0.000127f, -0.000938f, +0.000162f, + +0.000061f, +0.000124f, -0.000032f, -0.000265f, +0.000401f, +0.000450f, +0.000207f, +0.000230f, +0.000098f, +0.000214f, + -0.000076f, -0.000183f, -0.000012f, -0.000416f, +0.000075f, -0.000327f, -0.000063f, -0.000065f, -0.000373f, -0.000503f, + -0.000338f, -0.000247f, -0.000089f, +0.000036f, +0.000103f, -0.000034f, +0.000389f, +0.000176f, +0.000176f, +0.000058f, + -0.000052f, -0.000134f, +0.000147f, +0.000123f, +0.000026f, +0.000034f, +0.000042f, -0.000029f, +0.000106f, +0.000034f, + +0.000118f, +0.000099f, +0.000008f, -0.000014f, +0.000075f, +0.000164f, -0.000083f, -0.000035f, +0.000056f, -0.000113f, + -0.000085f, -0.000048f, -0.000030f, -0.000019f, +0.000046f, +0.000007f, -0.000073f, +0.000008f, -0.000056f, +0.000006f, + -0.000025f, -0.000010f, -0.000004f, +0.000037f, +0.000001f, -0.000015f + }, + { + +0.000935f, +0.007007f, -0.000564f, -0.002397f, -0.000642f, +0.000547f, +0.000195f, +0.000068f, -0.000075f, +0.000250f, + +0.000625f, -0.000585f, +0.000141f, +0.000778f, -0.002851f, +0.000460f, +0.000790f, -0.000613f, +0.000285f, -0.000725f, + +0.000109f, -0.000028f, +0.000633f, -0.000182f, -0.000256f, +0.000460f, -0.000079f, +0.000245f, +0.000186f, -0.000165f, + +0.000699f, -0.000333f, +0.000049f, +0.000005f, +0.000459f, +0.000273f, -0.000036f, -0.000089f, -0.000333f, +0.000121f, + -0.000351f, -0.000482f, -0.000635f, -0.000082f, +0.000327f, -0.000047f, -0.000231f, -0.000192f, -0.000336f, -0.000213f, + -0.000014f, -0.000013f, -0.000171f, -0.000419f, +0.000037f, +0.000168f, +0.000048f, +0.000040f, +0.000092f, +0.000032f, + -0.000148f, -0.000143f, +0.000032f, -0.000080f, -0.000027f, +0.000117f, -0.000075f, -0.000096f, -0.000053f, +0.000074f, + -0.000032f, -0.000028f, +0.000148f, +0.000101f, -0.000012f, -0.000026f, +0.000075f, +0.000053f, -0.000007f, -0.000134f, + -0.000030f, +0.000089f, -0.000023f, -0.000032f, +0.000009f, -0.000042f, -0.000063f, +0.000042f, -0.000056f, -0.000071f, + +0.000057f, +0.000030f, -0.000034f, -0.000032f, -0.000023f, +0.000047f + }, + { + -0.002824f, +0.005155f, +0.002175f, +0.002605f, -0.001333f, -0.000580f, +0.000842f, +0.001078f, +0.000556f, +0.000541f, + -0.000076f, -0.001365f, +0.000106f, -0.000168f, -0.000007f, +0.000414f, +0.000937f, +0.001406f, -0.001065f, +0.002142f, + +0.001211f, -0.000151f, -0.000235f, +0.000083f, -0.000171f, +0.000449f, -0.000367f, +0.000286f, -0.000703f, +0.000013f, + +0.000551f, +0.001003f, -0.000733f, -0.000486f, +0.000414f, +0.000854f, +0.000268f, +0.000672f, +0.000693f, -0.000168f, + -0.000036f, +0.000197f, -0.000218f, -0.000568f, -0.000259f, -0.000044f, -0.000094f, +0.000044f, -0.000029f, +0.000138f, + +0.000069f, +0.000115f, -0.000132f, +0.000024f, +0.000001f, +0.000139f, -0.000033f, -0.000140f, -0.000001f, -0.000121f, + -0.000005f, +0.000186f, +0.000010f, +0.000004f, +0.000193f, -0.000224f, +0.000033f, -0.000001f, -0.000113f, -0.000062f, + +0.000105f, +0.000019f, -0.000077f, -0.000035f, -0.000013f, +0.000093f, +0.000121f, -0.000079f, -0.000067f, +0.000032f, + -0.000017f, -0.000012f, +0.000000f, +0.000080f, -0.000002f, -0.000058f, -0.000042f, -0.000020f, +0.000039f, +0.000006f, + +0.000033f, +0.000089f, +0.000013f, -0.000002f, +0.000062f, +0.000000f + }, + { + +0.006174f, -0.014042f, -0.007658f, -0.000823f, +0.000098f, -0.000682f, -0.000321f, -0.000232f, -0.000353f, -0.000058f, + -0.000310f, +0.000181f, -0.000642f, +0.001220f, +0.001124f, -0.000489f, +0.000040f, -0.000575f, -0.000123f, -0.000281f, + +0.000213f, -0.000870f, -0.000837f, -0.000190f, -0.000122f, -0.000454f, +0.000915f, +0.000213f, +0.000264f, -0.000679f, + -0.000360f, +0.000170f, -0.000372f, +0.000188f, -0.000060f, +0.000330f, -0.000233f, -0.000672f, +0.000476f, -0.000302f, + -0.000168f, +0.000163f, -0.000058f, -0.000044f, -0.000161f, -0.000153f, -0.000310f, +0.000095f, +0.000023f, +0.000024f, + +0.000304f, -0.000041f, +0.000061f, -0.000082f, -0.000091f, +0.000153f, -0.000083f, +0.000017f, -0.000227f, -0.000116f, + +0.000039f, -0.000103f, +0.000013f, +0.000075f, -0.000204f, +0.000084f, +0.000045f, -0.000053f, +0.000010f, -0.000097f, + -0.000055f, +0.000111f, +0.000183f, -0.000028f, -0.000011f, -0.000040f, -0.000056f, +0.000061f, +0.000014f, -0.000045f, + -0.000044f, -0.000091f, -0.000002f, +0.000054f, +0.000020f, +0.000035f, -0.000010f, -0.000008f, +0.000093f, -0.000010f, + -0.000061f, -0.000024f, +0.000027f, -0.000008f, -0.000050f, +0.000032f + }, + { + -0.000440f, -0.011945f, +0.000448f, +0.000257f, -0.000435f, +0.000333f, -0.000139f, +0.000378f, -0.000684f, +0.000090f, + +0.000226f, +0.000192f, -0.000025f, +0.001040f, +0.003934f, +0.002457f, +0.005663f, -0.000337f, -0.004692f, +0.001983f, + +0.001246f, +0.000560f, +0.000347f, -0.000598f, +0.000568f, +0.002514f, +0.001330f, -0.000237f, +0.000025f, +0.000898f, + +0.000306f, -0.000353f, +0.000130f, -0.000133f, +0.000168f, -0.000647f, +0.000548f, -0.000652f, -0.000734f, +0.000266f, + -0.000098f, -0.000037f, -0.000244f, -0.000039f, +0.000174f, -0.000093f, +0.000031f, +0.000274f, -0.000439f, -0.000191f, + +0.000131f, +0.000071f, +0.000019f, -0.000135f, -0.000024f, -0.000198f, -0.000027f, -0.000019f, +0.000154f, -0.000003f, + -0.000040f, +0.000078f, +0.000186f, +0.000005f, +0.000001f, -0.000313f, +0.000040f, -0.000085f, -0.000037f, -0.000028f, + -0.000014f, +0.000087f, +0.000088f, +0.000123f, +0.000212f, +0.000075f, -0.000141f, -0.000056f, -0.000118f, -0.000108f, + -0.000089f, -0.000056f, +0.000179f, +0.000089f, -0.000103f, +0.000010f, -0.000124f, -0.000018f, +0.000028f, -0.000032f, + -0.000014f, -0.000034f, -0.000028f, +0.000056f, +0.000040f, -0.000043f + }, + { + +0.005721f, -0.018923f, -0.004700f, +0.000500f, +0.000724f, +0.000183f, +0.000018f, -0.000555f, +0.000494f, -0.000173f, + -0.000905f, +0.000420f, +0.000988f, +0.001319f, +0.000465f, +0.000604f, -0.000348f, -0.000129f, -0.000535f, +0.000373f, + -0.000554f, -0.000717f, +0.000593f, -0.000035f, +0.000090f, -0.000494f, +0.000591f, +0.000391f, -0.000036f, -0.000623f, + -0.000545f, +0.000119f, +0.000806f, +0.000524f, -0.000102f, -0.000060f, +0.000041f, +0.000212f, -0.000244f, +0.000163f, + +0.000004f, +0.000235f, +0.000646f, -0.000462f, -0.000416f, +0.000293f, +0.000054f, +0.000481f, +0.000045f, +0.000180f, + +0.000045f, +0.000318f, -0.000257f, -0.000180f, +0.000091f, +0.000011f, +0.000144f, +0.000021f, +0.000020f, -0.000096f, + +0.000087f, -0.000026f, -0.000248f, -0.000042f, -0.000057f, +0.000057f, +0.000029f, -0.000081f, +0.000053f, -0.000031f, + -0.000082f, -0.000099f, +0.000077f, +0.000072f, -0.000081f, +0.000102f, -0.000077f, +0.000011f, +0.000068f, +0.000003f, + -0.000036f, +0.000085f, +0.000183f, +0.000055f, -0.000007f, -0.000079f, -0.000055f, +0.000001f, -0.000023f, +0.000078f, + -0.000048f, -0.000033f, -0.000057f, +0.000032f, +0.000073f, -0.000027f + }, + { + +0.000711f, +0.000500f, -0.001951f, +0.000539f, +0.000166f, +0.000253f, +0.000235f, -0.001056f, -0.000206f, +0.000205f, + +0.000175f, -0.000237f, -0.000101f, +0.003386f, -0.009641f, +0.001556f, +0.000656f, -0.000483f, -0.002079f, +0.002229f, + +0.001139f, -0.000302f, +0.000919f, +0.000082f, -0.000498f, -0.000525f, -0.000452f, -0.002096f, +0.001179f, -0.002028f, + +0.000025f, +0.000312f, +0.000786f, +0.000235f, -0.000541f, +0.000130f, -0.000273f, -0.000279f, +0.000058f, +0.000418f, + -0.000668f, -0.000063f, +0.000362f, +0.000249f, +0.000045f, -0.000163f, -0.000085f, +0.000061f, -0.000028f, -0.000222f, + +0.000153f, +0.000111f, -0.000032f, -0.000235f, +0.000210f, +0.000015f, -0.000126f, -0.000233f, +0.000418f, -0.000002f, + +0.000057f, +0.000117f, +0.000177f, -0.000011f, +0.000087f, +0.000039f, -0.000028f, -0.000089f, -0.000076f, +0.000077f, + +0.000184f, -0.000032f, -0.000104f, +0.000091f, -0.000012f, -0.000063f, -0.000072f, -0.000042f, -0.000103f, +0.000015f, + +0.000059f, -0.000037f, +0.000007f, +0.000001f, +0.000013f, -0.000048f, +0.000005f, +0.000038f, -0.000018f, +0.000043f, + +0.000068f, +0.000079f, -0.000001f, -0.000035f, +0.000036f, +0.000034f + }, + { + -0.011709f, +0.024988f, +0.006278f, -0.000216f, -0.001243f, +0.000139f, -0.000026f, +0.000035f, -0.000259f, -0.000371f, + -0.000482f, -0.000294f, +0.000905f, -0.000724f, -0.001394f, -0.000644f, -0.000931f, +0.000485f, +0.000937f, -0.000223f, + -0.000510f, -0.000250f, +0.000110f, -0.000453f, +0.000384f, +0.000501f, +0.000050f, +0.000410f, -0.000457f, -0.000565f, + -0.000554f, -0.000255f, +0.000140f, -0.000261f, -0.000236f, -0.000226f, -0.000013f, -0.000532f, -0.000334f, +0.000193f, + +0.000302f, +0.000345f, -0.000574f, -0.000123f, -0.000455f, -0.000022f, +0.000458f, -0.000249f, +0.000142f, -0.000132f, + -0.000054f, -0.000491f, +0.000530f, -0.000002f, -0.000043f, +0.000083f, -0.000004f, -0.000025f, -0.000144f, -0.000106f, + +0.000107f, +0.000082f, -0.000073f, -0.000151f, +0.000066f, +0.000082f, +0.000005f, -0.000105f, +0.000085f, +0.000139f, + +0.000014f, -0.000050f, +0.000119f, -0.000137f, -0.000215f, +0.000040f, +0.000020f, -0.000160f, +0.000041f, +0.000018f, + -0.000082f, -0.000021f, +0.000059f, +0.000002f, -0.000002f, +0.000026f, -0.000027f, -0.000062f, +0.000018f, -0.000002f, + +0.000042f, +0.000037f, -0.000013f, +0.000004f, -0.000029f, +0.000007f + }, + { + +0.000894f, -0.001144f, -0.002069f, +0.000657f, -0.000610f, +0.000282f, +0.000080f, -0.000704f, +0.000568f, +0.000212f, + -0.000175f, +0.000180f, +0.000715f, +0.000543f, +0.003214f, +0.000849f, -0.003406f, +0.002655f, +0.001585f, -0.001191f, + +0.000018f, +0.003182f, +0.002321f, +0.001758f, -0.000549f, +0.000601f, +0.001132f, -0.003179f, +0.000417f, -0.000125f, + -0.000076f, -0.000039f, -0.000555f, +0.000423f, -0.000282f, -0.000655f, +0.000695f, +0.000569f, -0.000103f, -0.000001f, + -0.000403f, +0.000078f, +0.000366f, -0.000097f, -0.000675f, -0.000443f, -0.000136f, -0.000131f, +0.000068f, +0.000233f, + -0.000014f, +0.000177f, +0.000216f, -0.000212f, -0.000240f, -0.000009f, -0.000068f, -0.000094f, -0.000451f, +0.000048f, + +0.000241f, +0.000199f, +0.000193f, +0.000168f, +0.000356f, +0.000037f, +0.000122f, -0.000049f, +0.000005f, -0.000045f, + +0.000058f, +0.000163f, +0.000068f, -0.000095f, -0.000141f, -0.000072f, +0.000016f, -0.000018f, +0.000045f, +0.000019f, + -0.000084f, +0.000046f, +0.000112f, -0.000017f, -0.000046f, -0.000000f, -0.000080f, -0.000106f, +0.000029f, +0.000044f, + +0.000001f, -0.000021f, +0.000022f, -0.000015f, +0.000011f, -0.000050f + }, + { + -0.005859f, -0.019048f, +0.006471f, -0.000682f, -0.000923f, -0.001594f, -0.000415f, -0.000304f, +0.000319f, -0.000523f, + -0.000813f, -0.000760f, -0.000310f, +0.000411f, -0.001024f, -0.000492f, +0.001705f, -0.000243f, +0.000499f, -0.000057f, + +0.000681f, -0.000494f, +0.000016f, +0.000227f, +0.000420f, +0.000142f, -0.000576f, +0.000224f, -0.000031f, -0.000114f, + -0.000282f, -0.000355f, -0.000279f, -0.000271f, -0.000112f, +0.000402f, +0.000343f, +0.000005f, +0.000106f, -0.000162f, + -0.000094f, +0.000115f, -0.000080f, +0.000102f, +0.000396f, +0.000031f, -0.000172f, +0.000576f, +0.000012f, -0.000336f, + -0.000174f, -0.000051f, -0.000420f, -0.000233f, +0.000230f, +0.000029f, -0.000014f, +0.000091f, -0.000090f, -0.000007f, + +0.000122f, -0.000180f, -0.000069f, +0.000030f, -0.000058f, +0.000034f, -0.000031f, -0.000047f, -0.000018f, -0.000131f, + -0.000096f, +0.000050f, -0.000054f, -0.000059f, +0.000042f, -0.000022f, +0.000001f, -0.000019f, +0.000076f, -0.000053f, + +0.000086f, +0.000035f, -0.000033f, -0.000032f, -0.000011f, -0.000080f, -0.000095f, -0.000015f, -0.000070f, -0.000025f, + -0.000014f, +0.000002f, +0.000066f, +0.000013f, -0.000010f, -0.000055f + }, + { + -0.000631f, -0.000509f, +0.000853f, +0.000313f, -0.000597f, -0.000675f, -0.000821f, -0.000670f, +0.000243f, +0.000523f, + -0.000221f, -0.000556f, +0.001295f, -0.001243f, -0.001844f, -0.002133f, +0.000928f, +0.000360f, -0.000835f, -0.001836f, + +0.000961f, -0.000617f, +0.000428f, -0.000416f, +0.000365f, -0.000262f, -0.000817f, +0.000491f, +0.000622f, +0.000909f, + +0.000244f, -0.000433f, -0.000344f, -0.000034f, -0.000505f, -0.000289f, +0.000461f, -0.000268f, +0.000224f, -0.000150f, + +0.000145f, -0.000146f, -0.000095f, -0.000190f, -0.000010f, -0.000296f, -0.000047f, +0.000045f, +0.000222f, +0.000077f, + -0.000308f, -0.000035f, +0.000190f, +0.000259f, +0.000123f, -0.000077f, +0.000196f, -0.000045f, -0.000090f, +0.000002f, + -0.000055f, -0.000082f, +0.000134f, +0.000208f, -0.000123f, -0.000130f, +0.000042f, -0.000108f, -0.000135f, -0.000051f, + +0.000030f, +0.000081f, +0.000073f, -0.000001f, -0.000085f, -0.000013f, +0.000031f, +0.000120f, +0.000129f, -0.000060f, + -0.000015f, -0.000080f, -0.000022f, +0.000087f, +0.000084f, +0.000006f, +0.000012f, -0.000012f, +0.000030f, +0.000083f, + -0.000017f, +0.000020f, +0.000014f, -0.000001f, +0.000009f, -0.000028f + }, + { + +0.001374f, -0.010670f, -0.003691f, +0.001148f, -0.000419f, -0.003486f, -0.000151f, +0.001286f, +0.001079f, +0.000606f, + +0.000273f, +0.000873f, +0.000348f, +0.001441f, -0.000103f, +0.000734f, -0.000329f, +0.000754f, -0.000185f, +0.000147f, + +0.000510f, -0.000875f, -0.000234f, -0.000179f, -0.000521f, -0.000194f, +0.000254f, +0.000174f, -0.000158f, -0.000067f, + +0.000515f, +0.000102f, +0.000011f, +0.000221f, -0.000008f, +0.000265f, -0.000060f, +0.000083f, -0.000356f, +0.000016f, + -0.000405f, +0.000159f, -0.000372f, +0.000252f, +0.000111f, -0.000146f, -0.000076f, -0.000138f, +0.000102f, +0.000031f, + -0.000032f, -0.000061f, -0.000033f, -0.000104f, -0.000042f, +0.000099f, +0.000058f, -0.000112f, +0.000025f, +0.000058f, + +0.000003f, -0.000155f, +0.000155f, -0.000092f, -0.000140f, +0.000064f, +0.000043f, +0.000063f, +0.000054f, -0.000069f, + -0.000034f, +0.000106f, -0.000063f, -0.000070f, -0.000107f, -0.000047f, +0.000056f, -0.000038f, +0.000025f, -0.000006f, + -0.000011f, -0.000040f, -0.000050f, +0.000028f, -0.000071f, -0.000043f, +0.000083f, -0.000025f, +0.000053f, -0.000012f, + -0.000075f, -0.000030f, -0.000107f, -0.000014f, +0.000027f, -0.000011f + }, + { + +0.000237f, +0.004598f, +0.002059f, -0.001940f, -0.000764f, -0.000185f, -0.000542f, +0.000127f, +0.000238f, -0.000852f, + +0.000201f, -0.000444f, -0.003458f, +0.003105f, -0.001360f, -0.002837f, +0.001137f, -0.000020f, -0.000043f, -0.000299f, + +0.002026f, -0.000625f, -0.000174f, -0.003355f, -0.000329f, +0.000017f, -0.000376f, -0.000434f, -0.000501f, +0.000326f, + -0.000494f, +0.000768f, -0.000541f, +0.000203f, +0.000244f, -0.000912f, -0.000449f, -0.000771f, +0.000034f, -0.000125f, + +0.000241f, +0.000013f, -0.000007f, -0.000122f, +0.000334f, +0.000152f, +0.000236f, -0.000108f, +0.000403f, +0.000019f, + -0.000168f, -0.000276f, -0.000171f, +0.000173f, +0.000090f, -0.000351f, -0.000052f, -0.000023f, +0.000020f, +0.000207f, + +0.000255f, -0.000090f, -0.000284f, -0.000048f, +0.000019f, -0.000032f, -0.000076f, +0.000073f, +0.000172f, -0.000073f, + -0.000024f, +0.000007f, +0.000033f, +0.000054f, -0.000011f, -0.000145f, -0.000200f, -0.000004f, -0.000007f, -0.000012f, + +0.000083f, +0.000084f, +0.000030f, +0.000068f, +0.000032f, +0.000015f, -0.000025f, -0.000128f, +0.000053f, +0.000031f, + +0.000033f, -0.000030f, -0.000130f, -0.000025f, +0.000054f, -0.000072f + }, + { + -0.001841f, -0.003347f, -0.002289f, -0.002414f, +0.000185f, -0.002477f, -0.002410f, -0.000204f, +0.000093f, -0.001171f, + +0.001350f, +0.000670f, -0.000181f, +0.001436f, -0.000654f, -0.000489f, +0.000466f, +0.000192f, +0.000160f, -0.000133f, + +0.000247f, -0.000105f, +0.000093f, +0.000169f, -0.000425f, +0.000093f, +0.000413f, +0.000698f, -0.000613f, -0.000233f, + +0.000800f, -0.000269f, +0.000172f, +0.000218f, +0.000256f, -0.000416f, +0.000469f, +0.000770f, +0.000514f, -0.000221f, + -0.000950f, +0.000094f, -0.000268f, +0.000239f, +0.000366f, +0.000497f, +0.000426f, +0.000081f, +0.000017f, -0.000040f, + -0.000232f, +0.000352f, -0.000215f, -0.000215f, -0.000063f, +0.000336f, +0.000214f, +0.000074f, -0.000034f, +0.000258f, + +0.000048f, +0.000117f, +0.000144f, +0.000136f, +0.000268f, +0.000194f, +0.000166f, -0.000070f, -0.000024f, +0.000004f, + +0.000024f, -0.000030f, +0.000003f, +0.000014f, +0.000137f, +0.000062f, +0.000019f, -0.000148f, +0.000068f, +0.000113f, + +0.000053f, -0.000014f, +0.000046f, +0.000090f, -0.000044f, +0.000054f, +0.000064f, -0.000098f, -0.000022f, +0.000021f, + -0.000048f, -0.000021f, +0.000032f, -0.000008f, +0.000002f, -0.000011f + }, + { + -0.000200f, -0.003803f, +0.002130f, +0.000126f, +0.000097f, +0.000384f, +0.000333f, +0.000749f, +0.000992f, -0.000967f, + -0.000095f, +0.000130f, +0.001869f, +0.000697f, -0.009343f, +0.000027f, +0.005007f, +0.001146f, -0.002281f, +0.000269f, + +0.001657f, -0.000254f, -0.000404f, -0.000331f, +0.000317f, -0.000191f, -0.001186f, -0.001422f, +0.000676f, +0.000746f, + -0.000333f, +0.000502f, +0.000849f, -0.000288f, +0.000366f, +0.000397f, -0.001266f, -0.000171f, +0.000868f, -0.000383f, + +0.000210f, +0.000071f, -0.000272f, +0.000254f, +0.000236f, -0.000359f, +0.000424f, +0.000066f, +0.000122f, +0.000050f, + -0.000239f, +0.000012f, -0.000193f, -0.000189f, +0.000076f, -0.000147f, -0.000023f, -0.000118f, -0.000129f, -0.000343f, + -0.000256f, +0.000086f, +0.000070f, -0.000165f, -0.000092f, -0.000126f, +0.000269f, +0.000081f, -0.000085f, -0.000023f, + +0.000084f, -0.000052f, -0.000074f, +0.000004f, -0.000041f, -0.000085f, +0.000094f, -0.000038f, -0.000103f, -0.000115f, + +0.000044f, +0.000091f, +0.000098f, +0.000027f, -0.000071f, +0.000013f, -0.000043f, +0.000019f, +0.000061f, +0.000006f, + -0.000025f, -0.000007f, +0.000001f, -0.000030f, -0.000042f, +0.000039f + } + }, + { + { + +0.005866f, +0.036231f, -0.016480f, +0.003584f, +0.000040f, -0.000064f, -0.000741f, -0.000231f, -0.000218f, -0.000810f, + -0.000154f, -0.000138f, +0.000033f, -0.000087f, -0.001199f, -0.000378f, +0.000183f, +0.000665f, +0.000984f, -0.000094f, + +0.000249f, -0.000414f, -0.000114f, +0.000651f, +0.000123f, +0.000097f, +0.000292f, -0.000068f, -0.000565f, +0.000824f, + +0.000527f, +0.000346f, +0.000338f, -0.000121f, +0.000400f, +0.000081f, +0.000250f, +0.000076f, +0.000106f, +0.000469f, + +0.000068f, -0.000064f, -0.000066f, -0.000338f, -0.000166f, -0.000379f, +0.000087f, +0.000116f, -0.000190f, -0.000545f, + -0.000309f, +0.000034f, +0.000136f, +0.000104f, +0.000059f, -0.000206f, +0.000117f, -0.000089f, +0.000076f, -0.000137f, + -0.000013f, -0.000166f, +0.000117f, +0.000102f, +0.000025f, +0.000010f, -0.000067f, +0.000016f, +0.000144f, +0.000039f, + +0.000045f, -0.000089f, -0.000007f, -0.000016f, +0.000010f, +0.000031f, -0.000121f, +0.000061f, -0.000029f, -0.000133f, + -0.000090f, +0.000008f, +0.000058f, +0.000014f, +0.000068f, -0.000077f, -0.000017f, -0.000003f, -0.000059f, +0.000011f, + +0.000005f, -0.000029f, +0.000043f, +0.000045f, -0.000022f, -0.000027f + }, + { + -0.000093f, +0.006045f, -0.001659f, -0.001907f, +0.000497f, +0.000658f, -0.000288f, -0.000431f, +0.000110f, -0.000476f, + +0.000106f, -0.000554f, +0.000302f, +0.000328f, -0.002247f, +0.001153f, +0.001257f, +0.000409f, +0.001124f, -0.000694f, + +0.000143f, -0.000029f, -0.000277f, -0.000719f, +0.000131f, +0.000951f, +0.000144f, +0.000111f, -0.000519f, -0.000888f, + +0.000541f, -0.001106f, -0.000188f, +0.000466f, +0.000080f, +0.000609f, +0.000121f, -0.000090f, +0.000120f, +0.000451f, + -0.000232f, -0.000489f, -0.000540f, +0.000102f, +0.000117f, -0.000036f, -0.000098f, +0.000471f, -0.000242f, -0.000224f, + +0.000242f, -0.000090f, -0.000212f, -0.000185f, +0.000438f, -0.000017f, +0.000066f, +0.000192f, +0.000043f, -0.000247f, + -0.000262f, -0.000103f, +0.000084f, +0.000021f, -0.000045f, +0.000051f, -0.000147f, -0.000023f, -0.000012f, +0.000057f, + -0.000096f, +0.000094f, +0.000074f, +0.000020f, -0.000041f, +0.000041f, +0.000081f, +0.000023f, -0.000036f, -0.000101f, + +0.000046f, +0.000061f, -0.000082f, -0.000058f, -0.000027f, -0.000047f, -0.000045f, +0.000043f, -0.000075f, +0.000033f, + +0.000077f, -0.000022f, -0.000070f, -0.000045f, -0.000011f, +0.000068f + }, + { + +0.002164f, +0.006465f, -0.002727f, -0.003409f, -0.002855f, -0.000453f, +0.000178f, +0.000338f, +0.000109f, -0.000268f, + -0.000627f, -0.001351f, -0.000054f, -0.000310f, -0.000552f, -0.000395f, -0.000153f, +0.001160f, -0.000474f, +0.001125f, + +0.001180f, -0.001044f, +0.000309f, +0.001102f, -0.000012f, -0.000200f, -0.000395f, +0.001037f, -0.000203f, +0.000107f, + +0.000187f, +0.000144f, -0.000522f, -0.000191f, +0.000741f, +0.000021f, -0.000273f, +0.000259f, +0.000444f, +0.000460f, + +0.000103f, +0.000024f, -0.000257f, -0.000459f, -0.000389f, -0.000029f, -0.000097f, -0.000026f, -0.000042f, +0.000109f, + -0.000226f, +0.000036f, -0.000007f, -0.000129f, -0.000329f, +0.000122f, -0.000159f, -0.000038f, +0.000157f, +0.000005f, + -0.000194f, +0.000024f, -0.000153f, -0.000021f, +0.000013f, -0.000219f, +0.000137f, -0.000017f, -0.000135f, -0.000022f, + +0.000033f, -0.000196f, -0.000060f, +0.000108f, -0.000005f, +0.000111f, +0.000017f, -0.000103f, +0.000052f, +0.000048f, + -0.000046f, -0.000054f, +0.000034f, +0.000074f, -0.000029f, -0.000048f, -0.000045f, +0.000041f, -0.000018f, -0.000020f, + +0.000049f, +0.000084f, -0.000030f, +0.000024f, +0.000027f, -0.000043f + }, + { + -0.007704f, -0.026412f, -0.001422f, -0.001779f, +0.000139f, -0.000310f, +0.000164f, -0.000154f, +0.000171f, +0.000844f, + +0.000269f, -0.000238f, -0.000146f, +0.000862f, +0.000977f, -0.000507f, -0.000311f, -0.000459f, -0.000078f, -0.000461f, + +0.000202f, -0.000232f, -0.000330f, +0.000065f, +0.000184f, -0.000116f, +0.000786f, +0.000260f, -0.000656f, -0.000856f, + +0.000141f, +0.000452f, -0.000499f, +0.000316f, -0.000024f, +0.000763f, +0.000098f, -0.000139f, +0.000670f, -0.000227f, + +0.000281f, -0.000000f, -0.000287f, -0.000035f, -0.000049f, -0.000138f, -0.000176f, +0.000026f, +0.000166f, -0.000103f, + +0.000182f, +0.000057f, -0.000202f, +0.000075f, -0.000114f, +0.000108f, -0.000149f, -0.000109f, +0.000007f, -0.000084f, + -0.000086f, -0.000112f, +0.000002f, -0.000020f, -0.000168f, -0.000002f, -0.000124f, +0.000039f, +0.000004f, -0.000055f, + +0.000024f, +0.000169f, +0.000114f, -0.000025f, -0.000013f, -0.000078f, +0.000013f, +0.000042f, -0.000011f, -0.000073f, + -0.000045f, -0.000055f, +0.000076f, +0.000039f, +0.000010f, +0.000013f, -0.000063f, +0.000057f, +0.000061f, -0.000033f, + -0.000042f, +0.000011f, +0.000024f, -0.000018f, -0.000042f, +0.000053f + }, + { + -0.000189f, -0.010008f, +0.001515f, -0.000104f, -0.000201f, +0.000214f, -0.000298f, +0.000790f, -0.000380f, +0.000205f, + +0.000131f, +0.000262f, -0.000552f, -0.000864f, +0.002015f, +0.002807f, +0.002936f, -0.005823f, +0.001752f, +0.003541f, + +0.000988f, -0.000348f, +0.000143f, -0.000071f, +0.000592f, +0.001213f, -0.002452f, -0.001112f, +0.001107f, +0.002346f, + +0.000854f, +0.000577f, +0.000035f, +0.000328f, +0.000224f, -0.001342f, +0.000063f, +0.000039f, -0.000165f, +0.000280f, + -0.000061f, +0.000243f, -0.000032f, -0.000069f, +0.000141f, +0.000092f, -0.000137f, +0.000182f, -0.000222f, -0.000433f, + +0.000057f, +0.000070f, -0.000076f, -0.000010f, +0.000084f, +0.000092f, +0.000075f, +0.000140f, +0.000233f, +0.000013f, + +0.000051f, +0.000159f, +0.000130f, -0.000096f, -0.000102f, -0.000248f, +0.000188f, +0.000125f, -0.000028f, -0.000074f, + +0.000145f, +0.000106f, +0.000077f, +0.000041f, +0.000100f, -0.000034f, -0.000050f, -0.000031f, -0.000156f, -0.000055f, + -0.000024f, +0.000049f, +0.000107f, -0.000055f, -0.000004f, +0.000012f, -0.000068f, +0.000049f, +0.000000f, -0.000023f, + -0.000016f, -0.000028f, -0.000004f, +0.000066f, -0.000016f, -0.000038f + }, + { + -0.007444f, -0.032082f, +0.000941f, +0.001946f, -0.000504f, +0.000128f, -0.000199f, +0.000482f, +0.000207f, -0.001190f, + -0.000877f, +0.000405f, +0.000472f, +0.000222f, -0.000873f, -0.000014f, -0.000215f, +0.000090f, -0.000424f, -0.000319f, + -0.000923f, -0.000154f, +0.000576f, -0.000358f, +0.000010f, -0.000498f, +0.000271f, +0.000736f, -0.000576f, -0.000786f, + -0.000032f, +0.000513f, +0.000317f, -0.000288f, +0.000220f, +0.000301f, -0.000133f, +0.000126f, -0.000074f, +0.000212f, + -0.000940f, -0.000199f, +0.000694f, +0.000130f, +0.000002f, -0.000009f, -0.000274f, +0.000227f, +0.000013f, +0.000127f, + +0.000147f, -0.000044f, -0.000500f, -0.000215f, +0.000002f, -0.000272f, -0.000199f, -0.000002f, +0.000189f, +0.000096f, + +0.000076f, -0.000064f, -0.000185f, +0.000009f, +0.000066f, +0.000010f, -0.000098f, +0.000013f, +0.000057f, -0.000066f, + -0.000118f, -0.000003f, +0.000066f, -0.000008f, +0.000002f, +0.000029f, -0.000077f, +0.000024f, +0.000097f, +0.000027f, + +0.000053f, +0.000115f, +0.000110f, -0.000063f, -0.000035f, -0.000043f, +0.000002f, -0.000052f, +0.000034f, +0.000023f, + -0.000041f, -0.000022f, -0.000015f, +0.000070f, +0.000003f, -0.000042f + }, + { + +0.000072f, -0.001279f, -0.001035f, +0.000466f, -0.000052f, -0.000026f, +0.000601f, -0.000239f, +0.000253f, +0.000150f, + +0.000001f, -0.000095f, +0.000017f, +0.003819f, -0.009458f, +0.000627f, -0.000359f, +0.000054f, -0.002039f, +0.001699f, + +0.001115f, -0.000988f, +0.000260f, +0.001866f, +0.001124f, -0.000892f, +0.000169f, +0.000037f, +0.000806f, -0.002424f, + -0.000169f, -0.000028f, +0.000178f, -0.000568f, -0.000083f, +0.000754f, +0.000014f, -0.000120f, -0.000314f, -0.000210f, + -0.000250f, +0.000668f, -0.000042f, +0.000066f, -0.000023f, -0.000146f, +0.000028f, +0.000184f, +0.000003f, -0.000078f, + -0.000079f, -0.000128f, +0.000020f, -0.000062f, +0.000054f, -0.000059f, -0.000108f, -0.000122f, +0.000128f, -0.000034f, + +0.000145f, +0.000075f, +0.000166f, -0.000051f, +0.000028f, +0.000060f, -0.000195f, -0.000045f, +0.000039f, +0.000130f, + +0.000058f, -0.000142f, -0.000062f, -0.000005f, -0.000090f, -0.000012f, -0.000116f, -0.000066f, -0.000075f, +0.000057f, + -0.000006f, -0.000051f, +0.000006f, -0.000017f, -0.000018f, -0.000039f, +0.000047f, +0.000028f, +0.000029f, +0.000075f, + +0.000066f, +0.000028f, -0.000050f, +0.000011f, +0.000015f, +0.000002f + }, + { + +0.010744f, +0.042791f, -0.005442f, +0.001033f, +0.000023f, +0.000545f, +0.000828f, -0.000324f, +0.000080f, -0.000534f, + -0.000628f, +0.000820f, +0.000373f, -0.001053f, +0.000336f, -0.000250f, -0.000661f, +0.000694f, -0.000041f, -0.000653f, + -0.000012f, -0.000354f, -0.000032f, +0.000048f, +0.001047f, +0.000074f, -0.000316f, -0.000124f, -0.000791f, -0.000358f, + -0.000187f, +0.000058f, -0.000099f, -0.000549f, -0.000138f, -0.000701f, +0.000025f, -0.000204f, -0.000118f, +0.000257f, + +0.000101f, +0.000058f, -0.000301f, +0.000092f, -0.000591f, -0.000038f, +0.000367f, +0.000227f, +0.000060f, -0.000335f, + -0.000052f, -0.000147f, +0.000616f, -0.000165f, -0.000115f, -0.000021f, -0.000091f, -0.000034f, -0.000056f, +0.000043f, + +0.000106f, -0.000062f, -0.000146f, -0.000016f, +0.000153f, +0.000012f, +0.000032f, -0.000071f, -0.000021f, +0.000027f, + -0.000011f, -0.000052f, -0.000036f, -0.000150f, -0.000020f, +0.000139f, -0.000104f, -0.000096f, +0.000132f, -0.000021f, + -0.000007f, +0.000077f, +0.000015f, +0.000001f, +0.000048f, +0.000009f, -0.000021f, -0.000032f, -0.000026f, -0.000013f, + +0.000038f, +0.000005f, -0.000024f, -0.000029f, -0.000014f, +0.000050f + }, + { + +0.000158f, -0.003274f, +0.000884f, +0.001198f, -0.000220f, +0.000233f, -0.000302f, -0.001051f, +0.000194f, +0.000051f, + +0.000192f, +0.000113f, +0.000425f, +0.001558f, +0.003018f, +0.003631f, +0.001840f, +0.002617f, +0.001249f, -0.002224f, + -0.000360f, +0.002574f, -0.000412f, -0.001214f, -0.000183f, +0.000558f, +0.000616f, -0.000658f, +0.001252f, -0.000766f, + +0.000948f, -0.000192f, +0.000263f, +0.000408f, -0.000363f, +0.000033f, +0.000107f, -0.000168f, +0.000163f, -0.000104f, + -0.000570f, +0.000055f, +0.000084f, -0.000228f, -0.000539f, -0.000126f, -0.000034f, +0.000122f, +0.000091f, +0.000341f, + +0.000020f, -0.000027f, -0.000198f, -0.000204f, +0.000056f, +0.000109f, -0.000331f, -0.000230f, -0.000186f, +0.000227f, + +0.000235f, -0.000012f, -0.000078f, +0.000070f, +0.000131f, -0.000013f, +0.000139f, -0.000036f, +0.000068f, -0.000066f, + +0.000113f, +0.000138f, +0.000019f, -0.000192f, -0.000157f, +0.000022f, +0.000006f, -0.000099f, -0.000009f, -0.000002f, + +0.000001f, +0.000126f, +0.000044f, -0.000005f, -0.000033f, -0.000020f, -0.000094f, -0.000053f, +0.000062f, +0.000027f, + -0.000036f, +0.000015f, +0.000008f, -0.000013f, -0.000032f, -0.000061f + }, + { + +0.004930f, -0.013252f, +0.002012f, +0.001812f, -0.000568f, -0.002114f, +0.000232f, -0.000379f, +0.000133f, -0.001184f, + -0.000581f, -0.000527f, +0.000072f, +0.000924f, +0.000110f, -0.000108f, +0.000016f, -0.001132f, +0.000474f, +0.000320f, + +0.000169f, -0.000356f, +0.000256f, +0.000229f, +0.000100f, -0.000065f, -0.000568f, -0.000024f, -0.000313f, +0.000304f, + +0.000120f, -0.000133f, -0.000121f, -0.000109f, -0.000074f, +0.000309f, -0.000107f, -0.000456f, +0.000235f, -0.000399f, + -0.000123f, -0.000151f, +0.000347f, +0.000330f, -0.000285f, -0.000137f, -0.000202f, +0.000251f, -0.000099f, -0.000289f, + -0.000090f, -0.000058f, -0.000404f, +0.000135f, +0.000435f, +0.000079f, +0.000055f, +0.000089f, -0.000082f, +0.000116f, + +0.000079f, -0.000073f, -0.000070f, +0.000043f, +0.000129f, -0.000058f, -0.000044f, +0.000014f, -0.000073f, +0.000020f, + -0.000044f, +0.000055f, -0.000087f, +0.000026f, -0.000006f, -0.000001f, -0.000050f, +0.000093f, -0.000034f, -0.000023f, + +0.000084f, -0.000012f, -0.000105f, +0.000007f, -0.000067f, -0.000102f, -0.000069f, +0.000011f, -0.000077f, +0.000001f, + +0.000006f, +0.000045f, +0.000044f, -0.000016f, -0.000016f, -0.000063f + }, + { + +0.000468f, -0.001534f, -0.003758f, -0.001308f, -0.001118f, -0.000055f, +0.000936f, +0.000469f, +0.000072f, -0.000343f, + +0.000238f, +0.000152f, +0.000541f, +0.000549f, +0.000919f, -0.000058f, -0.000655f, -0.001749f, -0.000871f, +0.000561f, + +0.001177f, -0.000776f, -0.000293f, -0.001008f, +0.000316f, -0.000818f, -0.000494f, -0.000508f, -0.000383f, +0.000370f, + -0.000083f, -0.000424f, -0.000291f, +0.000077f, -0.000431f, +0.000064f, +0.000757f, -0.000126f, +0.000135f, -0.000437f, + +0.000490f, +0.000039f, -0.000053f, -0.000200f, +0.000038f, -0.000209f, +0.000121f, -0.000081f, -0.000181f, -0.000148f, + -0.000164f, +0.000129f, +0.000186f, +0.000165f, +0.000065f, -0.000056f, +0.000005f, -0.000052f, -0.000019f, +0.000037f, + -0.000150f, +0.000013f, +0.000142f, +0.000065f, -0.000156f, +0.000022f, -0.000114f, -0.000176f, +0.000072f, +0.000033f, + +0.000076f, +0.000040f, -0.000043f, -0.000047f, -0.000028f, +0.000079f, +0.000065f, +0.000097f, -0.000014f, -0.000037f, + +0.000015f, -0.000074f, -0.000039f, +0.000110f, +0.000030f, -0.000009f, +0.000041f, -0.000020f, +0.000060f, +0.000035f, + -0.000038f, +0.000018f, -0.000007f, -0.000012f, -0.000044f, +0.000033f + }, + { + +0.000252f, -0.010322f, -0.002583f, +0.000982f, -0.000550f, +0.000992f, +0.001825f, -0.000154f, +0.000489f, +0.000151f, + +0.000597f, +0.000123f, -0.000027f, +0.000519f, -0.000344f, +0.000589f, -0.001149f, +0.000197f, -0.000668f, -0.000031f, + -0.000066f, -0.000606f, -0.000044f, +0.000049f, -0.000230f, +0.000013f, -0.000422f, +0.000813f, +0.000056f, -0.000045f, + +0.000274f, +0.000177f, +0.000501f, +0.000138f, +0.000096f, +0.000639f, +0.000663f, +0.000511f, -0.000448f, -0.000295f, + -0.000616f, +0.000403f, -0.000670f, +0.000061f, -0.000007f, +0.000195f, +0.000281f, -0.000210f, -0.000177f, +0.000132f, + -0.000278f, -0.000021f, -0.000196f, +0.000140f, -0.000057f, +0.000015f, -0.000031f, +0.000081f, +0.000133f, -0.000068f, + -0.000034f, -0.000033f, +0.000099f, -0.000172f, -0.000026f, +0.000059f, +0.000044f, +0.000108f, +0.000032f, -0.000195f, + +0.000033f, +0.000068f, -0.000094f, -0.000023f, -0.000056f, -0.000009f, +0.000026f, -0.000020f, -0.000007f, -0.000024f, + -0.000023f, -0.000090f, +0.000023f, +0.000018f, -0.000056f, +0.000028f, +0.000027f, -0.000013f, +0.000021f, -0.000071f, + -0.000030f, -0.000026f, -0.000054f, +0.000013f, +0.000001f, -0.000020f + }, + { + -0.000082f, +0.004123f, +0.001671f, -0.001425f, +0.000432f, -0.000281f, -0.000013f, -0.000102f, +0.000125f, -0.000814f, + -0.000404f, -0.000307f, -0.000073f, +0.007969f, -0.001577f, -0.002295f, +0.001940f, +0.000710f, +0.001292f, -0.000206f, + +0.002952f, -0.001764f, -0.002250f, -0.004135f, -0.000848f, -0.001459f, +0.000141f, -0.000666f, +0.000054f, -0.000533f, + -0.000807f, +0.000666f, +0.000161f, +0.000243f, +0.000481f, -0.000077f, -0.000049f, -0.000186f, -0.000443f, -0.000607f, + +0.000246f, +0.000263f, +0.000188f, +0.000090f, +0.000292f, -0.000010f, -0.000237f, -0.000323f, +0.000185f, -0.000209f, + -0.000264f, -0.000306f, +0.000076f, +0.000150f, -0.000143f, -0.000243f, +0.000134f, -0.000020f, -0.000026f, +0.000295f, + +0.000197f, -0.000253f, -0.000177f, +0.000056f, +0.000080f, -0.000091f, -0.000148f, +0.000110f, -0.000017f, -0.000075f, + -0.000005f, +0.000033f, -0.000068f, +0.000006f, -0.000076f, -0.000058f, -0.000090f, +0.000035f, -0.000009f, -0.000069f, + +0.000100f, +0.000082f, +0.000038f, +0.000075f, -0.000001f, +0.000027f, -0.000083f, -0.000030f, +0.000017f, +0.000021f, + +0.000062f, -0.000091f, -0.000105f, +0.000066f, -0.000015f, -0.000062f + }, + { + +0.001955f, +0.001624f, -0.001048f, -0.000554f, +0.000259f, +0.001935f, +0.002977f, +0.000380f, +0.000068f, +0.000130f, + +0.000087f, -0.001209f, +0.000778f, -0.000152f, -0.002775f, +0.000666f, +0.000417f, +0.000157f, +0.000068f, -0.000234f, + +0.000723f, -0.000358f, +0.000095f, -0.000437f, -0.000217f, -0.000224f, +0.000159f, +0.000714f, -0.000618f, +0.000361f, + +0.000432f, -0.000453f, +0.000354f, +0.000463f, +0.000276f, -0.000289f, +0.000637f, +0.000725f, +0.000306f, -0.000000f, + -0.000252f, -0.000166f, -0.000224f, +0.000284f, +0.000276f, +0.000267f, +0.000187f, -0.000080f, +0.000148f, -0.000121f, + +0.000196f, +0.000109f, -0.000272f, +0.000022f, +0.000102f, +0.000333f, +0.000011f, -0.000191f, +0.000124f, +0.000176f, + +0.000063f, +0.000084f, +0.000119f, +0.000203f, +0.000129f, +0.000099f, +0.000028f, -0.000028f, -0.000030f, +0.000067f, + -0.000101f, -0.000002f, -0.000038f, +0.000003f, +0.000063f, +0.000056f, -0.000031f, -0.000065f, +0.000124f, +0.000060f, + -0.000020f, +0.000019f, +0.000102f, +0.000045f, -0.000021f, +0.000058f, -0.000051f, -0.000094f, +0.000039f, +0.000008f, + -0.000034f, +0.000030f, +0.000034f, -0.000011f, -0.000058f, -0.000015f + }, + { + -0.000026f, -0.003107f, +0.000657f, +0.000027f, +0.000361f, +0.000201f, +0.000470f, -0.001038f, -0.000472f, -0.000275f, + +0.000128f, -0.000328f, +0.001194f, +0.004622f, -0.002727f, +0.001510f, +0.003545f, +0.000426f, -0.001685f, +0.001019f, + +0.000928f, -0.000977f, -0.000385f, +0.000601f, +0.001278f, +0.000676f, -0.000845f, -0.000438f, +0.000210f, +0.000270f, + +0.000138f, +0.000547f, +0.000609f, -0.000445f, +0.000336f, +0.000010f, -0.000561f, +0.000925f, +0.000536f, -0.000529f, + -0.000383f, -0.000316f, -0.000237f, +0.000439f, +0.000012f, -0.000446f, +0.000441f, +0.000185f, +0.000086f, +0.000079f, + -0.000089f, -0.000107f, -0.000179f, +0.000070f, +0.000228f, -0.000207f, -0.000016f, -0.000036f, -0.000172f, -0.000327f, + -0.000136f, +0.000097f, -0.000044f, -0.000122f, -0.000040f, -0.000031f, +0.000295f, -0.000184f, -0.000091f, -0.000054f, + +0.000090f, -0.000131f, -0.000115f, -0.000025f, -0.000052f, +0.000074f, +0.000002f, -0.000044f, -0.000037f, -0.000013f, + +0.000133f, +0.000074f, +0.000091f, -0.000077f, -0.000075f, +0.000010f, -0.000055f, +0.000006f, +0.000067f, -0.000022f, + -0.000017f, +0.000026f, -0.000020f, -0.000046f, +0.000005f, +0.000062f + } + }, + { + { + -0.007167f, +0.030888f, +0.005645f, +0.001318f, +0.000560f, -0.000536f, -0.000234f, -0.000008f, -0.000597f, -0.000147f, + +0.000706f, -0.000785f, -0.000224f, -0.000379f, -0.000868f, -0.000868f, +0.000818f, +0.000194f, +0.000630f, +0.000877f, + -0.001415f, +0.000736f, -0.000171f, +0.000224f, +0.000321f, -0.000183f, -0.000095f, +0.000080f, +0.000029f, +0.000803f, + +0.000248f, +0.000601f, +0.000518f, +0.000615f, -0.000479f, +0.000185f, +0.000601f, +0.000259f, +0.000269f, +0.000106f, + -0.000092f, +0.000260f, -0.000127f, -0.000331f, -0.000044f, +0.000204f, -0.000294f, -0.000220f, -0.000090f, -0.000236f, + -0.000121f, +0.000154f, +0.000112f, +0.000011f, -0.000254f, -0.000201f, -0.000187f, -0.000223f, -0.000171f, -0.000050f, + +0.000212f, -0.000125f, -0.000168f, -0.000052f, +0.000060f, -0.000066f, +0.000122f, +0.000063f, -0.000027f, -0.000023f, + -0.000049f, -0.000026f, +0.000027f, +0.000004f, -0.000094f, -0.000173f, +0.000017f, +0.000027f, -0.000047f, +0.000096f, + +0.000066f, +0.000121f, +0.000057f, +0.000017f, -0.000020f, -0.000015f, +0.000071f, -0.000009f, +0.000040f, +0.000046f, + -0.000004f, -0.000024f, +0.000039f, -0.000002f, -0.000016f, +0.000013f + }, + { + -0.000185f, +0.007943f, -0.002271f, +0.001866f, +0.000291f, -0.000350f, -0.000023f, +0.000195f, -0.000003f, -0.000298f, + -0.000565f, +0.000446f, -0.000370f, -0.001719f, +0.000187f, -0.000814f, -0.000031f, +0.000320f, -0.000664f, -0.000212f, + -0.000243f, -0.000092f, -0.001185f, -0.000137f, -0.000165f, +0.000420f, +0.001266f, +0.000553f, -0.000156f, -0.001137f, + +0.000033f, -0.000686f, +0.000548f, +0.000447f, -0.000005f, +0.000516f, +0.000503f, +0.000171f, -0.000186f, -0.000348f, + +0.000276f, +0.000272f, -0.000155f, -0.000086f, +0.000214f, -0.000063f, +0.000245f, +0.000200f, -0.000307f, +0.000118f, + +0.000086f, +0.000040f, +0.000183f, +0.000421f, -0.000117f, -0.000410f, +0.000065f, +0.000034f, -0.000082f, -0.000125f, + +0.000045f, +0.000075f, +0.000027f, -0.000028f, +0.000064f, -0.000094f, +0.000098f, +0.000156f, -0.000008f, -0.000039f, + +0.000006f, +0.000096f, -0.000140f, -0.000062f, +0.000088f, +0.000011f, -0.000115f, -0.000073f, +0.000001f, +0.000096f, + +0.000021f, -0.000107f, -0.000027f, -0.000003f, +0.000006f, +0.000065f, +0.000021f, -0.000021f, +0.000038f, +0.000064f, + -0.000059f, -0.000030f, +0.000037f, +0.000069f, +0.000030f, -0.000025f + }, + { + -0.001831f, +0.003635f, +0.000171f, -0.002436f, +0.002708f, -0.000964f, +0.000383f, -0.000280f, -0.000192f, -0.000426f, + -0.000175f, -0.000983f, -0.000852f, +0.000251f, -0.000391f, +0.000151f, +0.000475f, +0.000453f, -0.000369f, -0.000010f, + +0.000607f, -0.000470f, +0.000434f, +0.000684f, +0.000610f, +0.000290f, +0.000105f, +0.000827f, -0.000407f, +0.000148f, + +0.000213f, -0.000396f, +0.000100f, -0.000095f, -0.000421f, -0.000269f, +0.000746f, -0.000453f, +0.000220f, +0.000300f, + -0.000036f, -0.000284f, -0.000151f, -0.000014f, -0.000072f, +0.000128f, -0.000001f, -0.000077f, +0.000326f, -0.000291f, + -0.000110f, +0.000072f, +0.000089f, -0.000134f, +0.000050f, +0.000115f, -0.000159f, -0.000004f, -0.000039f, +0.000054f, + -0.000121f, +0.000139f, -0.000104f, +0.000015f, -0.000129f, +0.000069f, +0.000081f, -0.000134f, +0.000108f, +0.000026f, + -0.000120f, -0.000144f, +0.000125f, +0.000001f, +0.000029f, -0.000015f, -0.000171f, +0.000076f, +0.000107f, -0.000021f, + -0.000003f, +0.000010f, +0.000029f, -0.000014f, +0.000024f, +0.000059f, +0.000022f, +0.000003f, -0.000071f, +0.000025f, + -0.000025f, -0.000051f, -0.000017f, +0.000006f, -0.000035f, -0.000011f + }, + { + +0.003446f, -0.044406f, +0.002179f, -0.001733f, -0.000436f, -0.000048f, +0.000186f, +0.000090f, +0.000360f, +0.000474f, + -0.000065f, -0.000346f, +0.000760f, -0.000586f, +0.000179f, -0.000969f, +0.000359f, -0.000570f, -0.000817f, -0.000210f, + -0.000245f, +0.000491f, +0.000031f, -0.000089f, -0.000054f, -0.000344f, +0.000159f, +0.000469f, +0.000173f, -0.000229f, + +0.000277f, +0.000248f, +0.000094f, -0.000021f, +0.000012f, +0.000672f, +0.000112f, +0.000377f, -0.000004f, +0.000395f, + +0.000091f, -0.000606f, +0.000031f, +0.000093f, +0.000107f, +0.000152f, -0.000010f, +0.000032f, +0.000072f, -0.000142f, + +0.000176f, -0.000016f, -0.000233f, +0.000322f, -0.000063f, +0.000060f, -0.000036f, -0.000091f, -0.000106f, -0.000139f, + -0.000020f, +0.000188f, +0.000033f, -0.000068f, +0.000128f, -0.000143f, +0.000026f, +0.000051f, -0.000020f, +0.000036f, + +0.000110f, -0.000065f, -0.000160f, +0.000062f, -0.000029f, -0.000006f, +0.000040f, -0.000003f, +0.000002f, +0.000046f, + +0.000078f, +0.000035f, +0.000029f, -0.000024f, +0.000005f, -0.000085f, -0.000010f, +0.000029f, -0.000073f, +0.000017f, + +0.000047f, +0.000023f, -0.000004f, +0.000007f, +0.000021f, +0.000004f + }, + { + +0.000510f, -0.010126f, -0.000686f, +0.000274f, +0.000329f, -0.000532f, +0.000106f, +0.000950f, +0.000160f, +0.000397f, + +0.000115f, +0.000226f, -0.000194f, +0.001814f, -0.002385f, +0.000069f, -0.001990f, -0.001463f, +0.005755f, +0.002298f, + -0.000699f, +0.000739f, -0.000544f, -0.000170f, -0.000586f, +0.000289f, -0.002744f, -0.000806f, +0.001431f, +0.001770f, + +0.000494f, +0.001605f, -0.000378f, +0.001308f, -0.000472f, -0.000348f, +0.000097f, +0.000099f, +0.000186f, +0.000044f, + +0.000036f, +0.000336f, +0.000642f, -0.000213f, +0.000027f, +0.000283f, -0.000180f, +0.000482f, -0.000187f, -0.000096f, + +0.000282f, -0.000230f, +0.000089f, +0.000031f, -0.000082f, +0.000023f, +0.000160f, +0.000268f, +0.000168f, +0.000118f, + +0.000190f, +0.000140f, +0.000041f, +0.000110f, +0.000163f, +0.000027f, +0.000145f, +0.000094f, -0.000061f, +0.000059f, + +0.000033f, -0.000041f, +0.000024f, -0.000036f, -0.000100f, +0.000015f, +0.000149f, +0.000051f, +0.000047f, +0.000041f, + +0.000105f, +0.000027f, -0.000089f, -0.000034f, +0.000063f, -0.000039f, +0.000046f, +0.000001f, -0.000041f, +0.000031f, + +0.000018f, +0.000040f, +0.000003f, -0.000026f, -0.000016f, +0.000064f + }, + { + +0.001991f, -0.046820f, +0.000562f, +0.002759f, -0.000978f, -0.000083f, +0.000576f, +0.000522f, -0.001104f, +0.000519f, + +0.001081f, -0.000177f, -0.000632f, -0.000442f, -0.000449f, -0.000485f, -0.000061f, +0.000533f, +0.000001f, -0.000250f, + +0.000026f, +0.000667f, -0.000447f, -0.000685f, +0.000088f, -0.000106f, -0.000131f, +0.000114f, -0.000965f, +0.000026f, + -0.000157f, +0.000188f, -0.000354f, +0.000090f, +0.000269f, -0.000068f, -0.000052f, +0.000130f, -0.000014f, +0.000289f, + -0.000221f, -0.000112f, -0.000188f, +0.000562f, +0.000459f, -0.000475f, -0.000455f, -0.000286f, +0.000016f, +0.000244f, + +0.000106f, -0.000339f, -0.000071f, +0.000181f, -0.000102f, -0.000157f, +0.000045f, +0.000201f, +0.000040f, +0.000056f, + -0.000088f, -0.000000f, +0.000149f, +0.000169f, +0.000038f, -0.000136f, -0.000012f, +0.000090f, -0.000033f, -0.000021f, + -0.000025f, +0.000117f, +0.000003f, -0.000044f, +0.000000f, -0.000013f, +0.000090f, -0.000002f, -0.000047f, +0.000029f, + +0.000017f, -0.000025f, -0.000146f, -0.000058f, +0.000009f, +0.000075f, +0.000042f, +0.000021f, +0.000028f, -0.000069f, + +0.000034f, -0.000010f, +0.000028f, -0.000024f, -0.000044f, +0.000006f + }, + { + -0.000493f, +0.001771f, +0.000459f, -0.000846f, -0.000001f, -0.000061f, +0.000488f, +0.000295f, +0.000419f, -0.000198f, + -0.000020f, +0.000089f, -0.000173f, -0.002308f, -0.003934f, -0.004390f, +0.000794f, -0.000439f, -0.001614f, +0.000040f, + +0.000617f, +0.000106f, +0.001668f, -0.001027f, +0.000972f, -0.001079f, -0.000169f, +0.001483f, -0.001157f, +0.000068f, + -0.000231f, +0.000303f, -0.001277f, +0.000238f, +0.000899f, +0.000437f, -0.000017f, -0.000005f, -0.000515f, +0.000148f, + +0.000169f, +0.000168f, -0.000129f, -0.000118f, -0.000223f, +0.000260f, +0.000262f, +0.000115f, -0.000041f, -0.000155f, + -0.000321f, -0.000090f, +0.000156f, +0.000102f, -0.000013f, +0.000021f, +0.000141f, +0.000057f, -0.000216f, -0.000049f, + -0.000039f, -0.000058f, +0.000032f, -0.000030f, -0.000092f, -0.000024f, -0.000084f, +0.000194f, +0.000067f, -0.000148f, + -0.000180f, +0.000046f, +0.000137f, -0.000020f, +0.000044f, +0.000063f, +0.000042f, +0.000083f, +0.000031f, +0.000007f, + -0.000008f, -0.000017f, +0.000022f, -0.000042f, -0.000025f, +0.000027f, -0.000017f, -0.000062f, -0.000006f, -0.000064f, + -0.000077f, -0.000075f, -0.000012f, +0.000030f, -0.000040f, +0.000002f + }, + { + -0.006506f, +0.054384f, -0.000045f, +0.001330f, +0.000823f, +0.000559f, +0.000215f, -0.000689f, +0.000080f, -0.000115f, + +0.000445f, -0.000047f, -0.000860f, -0.000356f, +0.001234f, -0.000345f, +0.000198f, -0.000251f, -0.001164f, +0.000058f, + +0.000391f, -0.000235f, +0.000509f, +0.000292f, -0.000057f, -0.000027f, -0.000254f, +0.000344f, -0.000857f, -0.000164f, + +0.000140f, -0.000165f, -0.000171f, +0.000240f, -0.000408f, -0.000153f, -0.000060f, +0.000153f, +0.000256f, +0.000280f, + -0.000062f, -0.000265f, +0.000109f, -0.000411f, -0.000016f, -0.000274f, -0.000015f, -0.000257f, -0.000024f, +0.000259f, + -0.000013f, +0.000102f, -0.000149f, -0.000334f, +0.000070f, +0.000117f, +0.000107f, +0.000103f, -0.000009f, +0.000038f, + -0.000099f, -0.000164f, +0.000067f, +0.000076f, -0.000004f, -0.000013f, -0.000020f, +0.000033f, -0.000078f, -0.000130f, + +0.000023f, +0.000027f, -0.000093f, +0.000176f, +0.000159f, -0.000043f, -0.000024f, +0.000109f, -0.000001f, -0.000001f, + +0.000063f, +0.000011f, -0.000048f, +0.000010f, +0.000028f, -0.000046f, +0.000049f, +0.000045f, +0.000006f, +0.000011f, + -0.000017f, -0.000009f, +0.000043f, +0.000025f, +0.000019f, +0.000000f + }, + { + -0.000859f, +0.001062f, +0.003988f, -0.000157f, +0.000302f, -0.000192f, -0.000480f, -0.000495f, +0.000291f, +0.000098f, + -0.000030f, -0.000147f, -0.000640f, +0.001474f, +0.005818f, -0.002390f, +0.004457f, +0.002270f, -0.000226f, -0.000748f, + +0.000466f, -0.000587f, -0.002146f, +0.001054f, +0.000628f, +0.001349f, -0.000467f, +0.001356f, +0.000779f, -0.000774f, + +0.000450f, -0.000135f, +0.000640f, -0.000099f, +0.000098f, +0.000125f, -0.000509f, -0.000164f, +0.000244f, -0.000106f, + +0.000403f, -0.000049f, -0.000300f, +0.000225f, +0.000155f, +0.000270f, +0.000023f, -0.000066f, +0.000475f, -0.000090f, + -0.000143f, -0.000296f, -0.000166f, -0.000048f, +0.000144f, +0.000007f, -0.000107f, +0.000005f, +0.000262f, +0.000047f, + -0.000039f, -0.000187f, -0.000196f, -0.000236f, -0.000260f, -0.000086f, -0.000077f, -0.000022f, +0.000086f, -0.000115f, + +0.000014f, +0.000000f, -0.000135f, +0.000024f, +0.000084f, +0.000037f, -0.000126f, -0.000044f, -0.000004f, +0.000006f, + +0.000043f, -0.000092f, -0.000111f, +0.000041f, +0.000003f, +0.000027f, +0.000081f, +0.000082f, +0.000026f, -0.000022f, + -0.000013f, +0.000029f, -0.000021f, +0.000036f, -0.000015f, +0.000021f + }, + { + -0.004339f, -0.007690f, +0.003814f, +0.002138f, +0.000414f, -0.000542f, -0.000652f, -0.000554f, -0.000409f, +0.000099f, + +0.000350f, +0.000344f, +0.000165f, -0.000598f, +0.001795f, -0.001222f, -0.001366f, +0.000601f, +0.000319f, -0.000309f, + -0.000123f, +0.000287f, +0.000390f, -0.000039f, +0.000256f, -0.000213f, -0.000626f, +0.000131f, +0.000223f, -0.000087f, + +0.000292f, -0.000057f, +0.000262f, +0.000520f, +0.000258f, -0.000230f, -0.000479f, -0.000035f, -0.000019f, -0.000322f, + +0.000516f, +0.000073f, +0.000275f, -0.000092f, -0.000118f, +0.000582f, -0.000071f, -0.000220f, +0.000114f, +0.000368f, + +0.000055f, +0.000017f, +0.000180f, +0.000067f, -0.000050f, +0.000108f, +0.000124f, -0.000078f, +0.000018f, +0.000002f, + -0.000176f, +0.000144f, +0.000057f, -0.000027f, +0.000055f, +0.000015f, -0.000031f, -0.000041f, +0.000009f, +0.000150f, + +0.000007f, -0.000032f, +0.000023f, +0.000053f, +0.000000f, +0.000022f, -0.000004f, +0.000029f, -0.000082f, +0.000000f, + -0.000080f, -0.000060f, +0.000022f, +0.000045f, +0.000000f, +0.000097f, +0.000091f, +0.000045f, +0.000058f, +0.000027f, + +0.000015f, +0.000007f, -0.000070f, -0.000021f, +0.000035f, +0.000035f + }, + { + -0.000239f, -0.001749f, -0.001846f, -0.003158f, -0.000141f, +0.000725f, +0.000759f, +0.000433f, -0.000023f, -0.000148f, + +0.000814f, +0.000603f, -0.000639f, +0.001641f, +0.001341f, -0.000471f, -0.001842f, -0.001919f, +0.000336f, +0.000456f, + -0.001212f, -0.000071f, -0.000041f, -0.000748f, -0.000259f, +0.000354f, -0.000660f, -0.000558f, -0.000625f, -0.001182f, + -0.000160f, -0.000128f, -0.000236f, -0.000200f, +0.000060f, +0.000306f, -0.000249f, -0.000134f, -0.000222f, -0.000443f, + +0.000300f, +0.000049f, +0.000088f, +0.000051f, -0.000251f, +0.000089f, +0.000044f, -0.000128f, +0.000001f, +0.000074f, + +0.000285f, +0.000145f, -0.000183f, -0.000226f, -0.000142f, -0.000014f, -0.000074f, +0.000038f, +0.000094f, -0.000027f, + +0.000222f, +0.000068f, -0.000192f, -0.000099f, +0.000145f, +0.000093f, -0.000038f, +0.000113f, +0.000156f, +0.000005f, + +0.000013f, -0.000061f, -0.000061f, +0.000017f, +0.000065f, -0.000018f, -0.000051f, -0.000142f, -0.000071f, +0.000035f, + -0.000050f, +0.000058f, +0.000053f, -0.000063f, -0.000102f, -0.000000f, -0.000018f, -0.000031f, -0.000009f, -0.000081f, + +0.000001f, -0.000014f, -0.000012f, -0.000001f, +0.000010f, +0.000027f + }, + { + -0.001975f, -0.006170f, -0.004253f, +0.000063f, +0.000723f, +0.002726f, -0.000499f, -0.000856f, +0.000392f, +0.000177f, + -0.000188f, -0.001082f, -0.000207f, -0.000556f, +0.000654f, -0.000378f, -0.000222f, -0.000491f, -0.000034f, -0.000292f, + -0.000374f, +0.000255f, +0.000283f, -0.000360f, +0.000253f, +0.000036f, -0.000122f, +0.000494f, -0.000095f, +0.000037f, + -0.000072f, +0.000148f, -0.000173f, -0.000183f, +0.000344f, +0.000276f, -0.000208f, -0.000403f, -0.000148f, -0.000115f, + -0.000366f, +0.000019f, -0.000073f, +0.000233f, -0.000233f, +0.000145f, +0.000080f, +0.000037f, +0.000047f, +0.000116f, + -0.000186f, +0.000237f, +0.000057f, +0.000168f, -0.000100f, -0.000092f, -0.000061f, +0.000124f, -0.000116f, -0.000121f, + +0.000073f, +0.000016f, -0.000031f, +0.000076f, +0.000050f, -0.000156f, -0.000022f, -0.000028f, -0.000072f, +0.000020f, + +0.000063f, -0.000057f, +0.000008f, +0.000017f, +0.000055f, +0.000045f, -0.000055f, -0.000053f, -0.000049f, -0.000038f, + -0.000025f, +0.000056f, +0.000076f, -0.000032f, +0.000053f, -0.000006f, -0.000066f, +0.000035f, -0.000033f, -0.000003f, + +0.000068f, +0.000040f, +0.000072f, -0.000016f, -0.000037f, +0.000009f + }, + { + -0.000038f, +0.003406f, -0.000189f, +0.001415f, +0.000460f, -0.000131f, +0.000602f, -0.000647f, +0.000032f, -0.000280f, + -0.000350f, +0.000549f, +0.001473f, +0.003878f, +0.003394f, -0.003227f, +0.002535f, +0.000703f, +0.001067f, +0.001161f, + -0.001574f, +0.001127f, -0.001481f, -0.002733f, -0.001410f, -0.000372f, -0.000104f, -0.001688f, +0.001109f, +0.000109f, + -0.000488f, -0.000188f, +0.000327f, -0.000070f, -0.000029f, +0.000235f, -0.000082f, -0.000040f, -0.000302f, +0.000061f, + -0.000059f, -0.000059f, +0.000290f, +0.000260f, +0.000220f, +0.000075f, -0.000085f, +0.000155f, -0.000253f, -0.000127f, + +0.000100f, +0.000179f, +0.000211f, -0.000042f, -0.000095f, +0.000202f, -0.000009f, -0.000234f, +0.000034f, -0.000061f, + -0.000153f, -0.000045f, +0.000198f, +0.000102f, -0.000056f, -0.000101f, -0.000031f, -0.000140f, -0.000112f, +0.000043f, + +0.000042f, +0.000002f, -0.000063f, -0.000059f, +0.000035f, +0.000148f, +0.000113f, -0.000009f, -0.000038f, -0.000028f, + -0.000068f, -0.000088f, -0.000060f, -0.000047f, -0.000027f, -0.000005f, +0.000003f, +0.000060f, -0.000072f, -0.000001f, + -0.000011f, +0.000001f, +0.000110f, +0.000032f, -0.000067f, +0.000073f + }, + { + -0.000745f, +0.004687f, -0.000722f, -0.002259f, -0.000243f, +0.003359f, +0.001124f, -0.000068f, +0.000109f, +0.001406f, + -0.000554f, -0.000034f, +0.000348f, -0.001558f, -0.000472f, +0.000271f, -0.001223f, +0.000166f, -0.000072f, +0.000037f, + +0.000342f, +0.000278f, +0.000154f, -0.000417f, +0.000895f, -0.000222f, -0.000080f, +0.000786f, +0.000524f, +0.000150f, + +0.000117f, -0.000171f, -0.000320f, -0.000069f, +0.000115f, -0.000023f, +0.000133f, +0.000077f, -0.000069f, +0.000184f, + +0.000561f, -0.000320f, +0.000303f, -0.000121f, -0.000277f, -0.000381f, -0.000094f, -0.000169f, +0.000148f, +0.000253f, + +0.000100f, -0.000317f, +0.000057f, +0.000137f, -0.000037f, -0.000207f, -0.000206f, +0.000060f, +0.000159f, -0.000077f, + +0.000130f, +0.000036f, +0.000054f, -0.000075f, -0.000105f, -0.000153f, -0.000114f, +0.000098f, +0.000027f, -0.000031f, + -0.000099f, +0.000082f, -0.000003f, -0.000006f, -0.000119f, -0.000060f, +0.000035f, +0.000074f, -0.000064f, -0.000112f, + -0.000060f, +0.000012f, -0.000055f, -0.000065f, +0.000008f, -0.000053f, -0.000061f, +0.000113f, +0.000042f, -0.000035f, + +0.000029f, +0.000003f, -0.000056f, -0.000026f, -0.000019f, +0.000008f + }, + { + +0.000181f, -0.002302f, -0.002060f, +0.000890f, -0.000125f, +0.000268f, +0.000116f, -0.001039f, -0.000533f, -0.000828f, + +0.000289f, -0.000199f, -0.000809f, +0.005600f, +0.001073f, +0.006005f, -0.000905f, +0.000935f, -0.000160f, -0.001104f, + -0.001014f, +0.000742f, -0.000829f, +0.000785f, +0.001354f, +0.001970f, -0.001995f, +0.000415f, -0.001058f, +0.000397f, + +0.000867f, +0.000341f, +0.000310f, +0.000740f, -0.001044f, +0.000110f, +0.001419f, +0.000485f, -0.000422f, +0.000037f, + -0.000026f, +0.000311f, +0.000301f, -0.000135f, -0.000161f, +0.000065f, -0.000324f, +0.000214f, +0.000308f, +0.000108f, + +0.000117f, -0.000010f, +0.000304f, +0.000123f, +0.000054f, -0.000157f, +0.000053f, +0.000120f, +0.000027f, +0.000183f, + +0.000216f, -0.000001f, -0.000118f, +0.000111f, -0.000008f, +0.000025f, -0.000195f, -0.000175f, +0.000097f, +0.000041f, + -0.000072f, -0.000042f, +0.000137f, -0.000036f, +0.000085f, +0.000002f, -0.000118f, +0.000034f, +0.000145f, +0.000089f, + +0.000010f, -0.000049f, -0.000089f, -0.000023f, +0.000028f, -0.000010f, +0.000025f, -0.000007f, -0.000061f, -0.000022f, + +0.000002f, -0.000031f, -0.000017f, +0.000033f, -0.000000f, -0.000017f + } + }, + { + { + +0.003834f, +0.023669f, -0.015645f, +0.002674f, -0.000110f, -0.000229f, +0.000646f, +0.000343f, -0.000514f, +0.000059f, + +0.000411f, -0.000502f, -0.000068f, +0.000721f, +0.001131f, -0.000986f, +0.000724f, -0.000210f, -0.000391f, -0.000085f, + -0.001776f, +0.000691f, -0.000499f, -0.000001f, +0.000159f, -0.000228f, -0.000064f, +0.000559f, +0.000471f, +0.000783f, + +0.000335f, +0.000442f, +0.000053f, +0.000516f, -0.000701f, +0.000275f, +0.000178f, -0.000081f, +0.000209f, -0.000021f, + -0.000224f, -0.000036f, -0.000090f, -0.000154f, +0.000001f, +0.000178f, -0.000079f, -0.000063f, -0.000049f, +0.000023f, + -0.000228f, -0.000139f, +0.000007f, -0.000039f, -0.000196f, +0.000018f, -0.000040f, -0.000059f, -0.000078f, +0.000117f, + +0.000122f, -0.000045f, -0.000122f, -0.000029f, +0.000117f, -0.000012f, +0.000182f, -0.000044f, -0.000105f, +0.000007f, + -0.000015f, +0.000046f, +0.000036f, -0.000034f, -0.000076f, -0.000066f, +0.000042f, -0.000035f, +0.000023f, +0.000095f, + +0.000071f, +0.000054f, -0.000035f, -0.000005f, -0.000041f, +0.000053f, +0.000031f, +0.000019f, +0.000044f, +0.000027f, + -0.000021f, +0.000011f, -0.000009f, -0.000027f, +0.000000f, +0.000027f + }, + { + +0.000040f, +0.009083f, -0.000873f, +0.002232f, +0.000135f, -0.000228f, +0.000306f, +0.000458f, +0.000098f, +0.000274f, + -0.000276f, +0.000451f, -0.000539f, +0.000279f, +0.002095f, -0.000992f, -0.000038f, -0.000498f, -0.001734f, -0.000229f, + -0.000641f, +0.000000f, -0.000863f, +0.000409f, +0.000370f, -0.000095f, +0.000695f, +0.000277f, +0.000438f, -0.000616f, + +0.000301f, -0.000153f, +0.000254f, +0.000098f, +0.000371f, -0.000094f, -0.000218f, +0.000005f, -0.000040f, -0.000647f, + +0.000095f, +0.000577f, +0.000098f, -0.000264f, +0.000293f, -0.000015f, +0.000066f, -0.000075f, -0.000093f, +0.000087f, + -0.000100f, +0.000182f, +0.000254f, +0.000288f, -0.000387f, -0.000123f, +0.000073f, -0.000187f, -0.000099f, +0.000050f, + +0.000074f, +0.000027f, -0.000063f, -0.000061f, +0.000146f, -0.000084f, +0.000139f, +0.000021f, -0.000067f, +0.000023f, + +0.000049f, -0.000048f, -0.000090f, -0.000014f, +0.000090f, -0.000082f, -0.000131f, -0.000015f, +0.000066f, +0.000072f, + -0.000039f, -0.000063f, +0.000066f, +0.000030f, +0.000026f, +0.000063f, +0.000001f, -0.000019f, +0.000061f, -0.000016f, + -0.000068f, +0.000004f, +0.000049f, +0.000044f, +0.000001f, -0.000041f + }, + { + +0.002107f, +0.006219f, -0.000434f, -0.001528f, +0.001965f, -0.000850f, +0.000531f, -0.000332f, -0.000033f, +0.000258f, + +0.000705f, -0.000551f, -0.000354f, +0.001268f, +0.001157f, +0.001743f, +0.000697f, +0.000084f, -0.000004f, +0.000209f, + +0.000197f, +0.000430f, -0.000346f, -0.000102f, +0.000210f, +0.000486f, -0.000101f, +0.000354f, -0.000091f, -0.000156f, + -0.000081f, -0.000194f, +0.000435f, +0.000012f, -0.000893f, +0.000145f, +0.000759f, -0.000374f, +0.000045f, -0.000151f, + -0.000077f, -0.000034f, +0.000129f, -0.000016f, +0.000149f, +0.000133f, +0.000140f, -0.000055f, +0.000212f, -0.000368f, + +0.000296f, +0.000181f, -0.000022f, +0.000046f, +0.000208f, +0.000010f, -0.000087f, -0.000153f, -0.000091f, +0.000077f, + -0.000060f, +0.000184f, +0.000001f, -0.000015f, -0.000069f, +0.000021f, -0.000048f, -0.000098f, +0.000182f, -0.000026f, + -0.000092f, -0.000005f, +0.000140f, -0.000103f, +0.000009f, -0.000010f, -0.000076f, +0.000123f, +0.000009f, -0.000046f, + +0.000064f, +0.000071f, -0.000010f, -0.000051f, +0.000024f, +0.000084f, +0.000024f, -0.000042f, -0.000039f, +0.000023f, + -0.000056f, -0.000060f, +0.000034f, -0.000022f, -0.000014f, +0.000025f + }, + { + +0.004476f, -0.045561f, -0.000410f, -0.001084f, +0.000912f, -0.000199f, -0.000031f, +0.000114f, -0.000016f, +0.000161f, + -0.000225f, -0.000089f, +0.001073f, -0.000682f, -0.000185f, -0.000167f, +0.000594f, -0.000756f, -0.000262f, +0.000005f, + -0.000480f, +0.000512f, +0.000240f, -0.000072f, +0.000206f, -0.000314f, +0.000124f, -0.000179f, +0.000396f, +0.000087f, + +0.000088f, -0.000090f, +0.000074f, -0.000151f, -0.000208f, +0.000141f, -0.000279f, -0.000028f, -0.000060f, +0.000500f, + -0.000000f, -0.000489f, +0.000333f, +0.000400f, +0.000201f, +0.000403f, +0.000048f, +0.000099f, -0.000018f, -0.000127f, + +0.000052f, -0.000156f, +0.000005f, +0.000203f, -0.000099f, -0.000073f, -0.000062f, +0.000016f, -0.000235f, -0.000095f, + +0.000104f, +0.000167f, -0.000020f, -0.000031f, +0.000111f, -0.000063f, +0.000113f, -0.000042f, +0.000063f, +0.000030f, + +0.000021f, -0.000152f, -0.000109f, +0.000105f, +0.000010f, +0.000055f, +0.000019f, +0.000010f, +0.000012f, +0.000066f, + +0.000063f, +0.000018f, -0.000062f, -0.000047f, +0.000012f, -0.000068f, +0.000022f, -0.000035f, -0.000064f, +0.000044f, + +0.000045f, -0.000006f, -0.000002f, +0.000018f, +0.000005f, -0.000036f + }, + { + -0.000333f, -0.008573f, +0.001489f, +0.000505f, +0.000094f, -0.000254f, +0.000365f, +0.000791f, +0.000344f, +0.000074f, + -0.000127f, +0.000162f, -0.000404f, +0.001432f, -0.002027f, -0.001978f, -0.002286f, +0.002440f, +0.000071f, +0.000764f, + -0.001390f, +0.000626f, -0.000472f, -0.000262f, -0.000256f, +0.001343f, -0.000268f, -0.000685f, -0.000042f, -0.000034f, + -0.000046f, +0.000738f, -0.000478f, +0.000910f, -0.000333f, +0.000576f, +0.000574f, +0.000032f, +0.000036f, -0.000199f, + -0.000102f, +0.000195f, +0.000171f, -0.000459f, +0.000017f, +0.000169f, +0.000047f, +0.000502f, -0.000398f, +0.000144f, + +0.000252f, -0.000098f, +0.000317f, -0.000075f, -0.000050f, -0.000053f, +0.000145f, +0.000175f, +0.000008f, -0.000001f, + +0.000022f, -0.000060f, -0.000096f, +0.000149f, +0.000217f, -0.000051f, -0.000011f, -0.000061f, -0.000001f, +0.000112f, + -0.000128f, -0.000111f, -0.000001f, +0.000012f, -0.000069f, +0.000075f, +0.000095f, +0.000065f, +0.000115f, +0.000008f, + +0.000060f, -0.000054f, -0.000097f, +0.000022f, +0.000016f, -0.000006f, +0.000049f, -0.000026f, -0.000015f, +0.000026f, + +0.000024f, +0.000053f, -0.000022f, -0.000045f, +0.000024f, +0.000046f + }, + { + +0.007490f, -0.040831f, +0.000939f, +0.003230f, -0.000553f, -0.000045f, +0.000215f, -0.000536f, -0.000465f, +0.001295f, + +0.000642f, -0.000595f, -0.000621f, +0.000138f, +0.000007f, -0.000761f, -0.000040f, +0.000751f, +0.000029f, +0.000181f, + +0.000227f, +0.000225f, -0.000620f, -0.000630f, +0.000089f, +0.000017f, -0.000021f, -0.000515f, -0.000729f, +0.000408f, + -0.000031f, -0.000047f, -0.000475f, +0.000072f, +0.000036f, +0.000038f, +0.000046f, +0.000054f, -0.000035f, +0.000243f, + +0.000253f, -0.000048f, -0.000212f, +0.000155f, -0.000005f, -0.000360f, -0.000115f, -0.000179f, +0.000009f, +0.000226f, + +0.000002f, +0.000072f, +0.000222f, +0.000133f, -0.000053f, +0.000172f, +0.000178f, -0.000015f, -0.000123f, -0.000097f, + -0.000131f, +0.000075f, +0.000143f, +0.000129f, -0.000030f, -0.000083f, +0.000085f, +0.000049f, -0.000011f, -0.000015f, + -0.000001f, +0.000058f, -0.000007f, +0.000020f, -0.000011f, +0.000065f, +0.000064f, -0.000043f, -0.000072f, +0.000034f, + -0.000040f, -0.000078f, -0.000116f, +0.000054f, +0.000034f, +0.000058f, +0.000004f, +0.000051f, -0.000050f, -0.000034f, + +0.000056f, +0.000008f, +0.000012f, -0.000060f, +0.000002f, +0.000032f + }, + { + -0.000214f, +0.003329f, +0.000076f, -0.000714f, -0.000055f, -0.000095f, +0.000336f, +0.000191f, +0.000203f, -0.000247f, + -0.000092f, +0.000020f, -0.000251f, -0.001705f, -0.000832f, -0.004133f, +0.002017f, +0.000026f, -0.001840f, -0.000363f, + +0.000655f, -0.000183f, +0.001230f, -0.002859f, -0.000509f, -0.000847f, -0.000078f, +0.001018f, -0.000122f, +0.001977f, + +0.000785f, +0.000356f, -0.001356f, +0.001030f, +0.000674f, -0.000348f, -0.000427f, +0.000106f, -0.000436f, +0.000543f, + -0.000067f, -0.000439f, -0.000032f, -0.000072f, -0.000012f, +0.000220f, +0.000132f, +0.000023f, -0.000021f, -0.000149f, + -0.000209f, -0.000012f, +0.000068f, -0.000017f, +0.000054f, +0.000067f, +0.000224f, +0.000042f, -0.000007f, +0.000095f, + -0.000047f, -0.000109f, +0.000027f, -0.000032f, -0.000128f, -0.000003f, +0.000082f, +0.000103f, -0.000079f, -0.000227f, + -0.000090f, +0.000137f, +0.000029f, -0.000022f, +0.000064f, +0.000003f, +0.000106f, +0.000098f, +0.000000f, -0.000028f, + +0.000042f, -0.000016f, +0.000013f, -0.000030f, +0.000007f, +0.000019f, -0.000055f, -0.000068f, -0.000056f, -0.000078f, + -0.000058f, -0.000024f, +0.000033f, -0.000008f, -0.000036f, +0.000011f + }, + { + +0.000543f, +0.060071f, -0.000578f, +0.001004f, +0.000581f, +0.000331f, -0.000157f, +0.000290f, -0.000114f, +0.000017f, + +0.000734f, -0.000870f, -0.000227f, +0.000467f, +0.000429f, -0.000654f, +0.000091f, -0.000210f, -0.000355f, +0.000157f, + +0.000071f, +0.000003f, +0.000261f, -0.000518f, -0.000987f, +0.000059f, -0.000442f, +0.000261f, -0.000458f, +0.000364f, + +0.000095f, -0.000026f, +0.000241f, +0.000299f, -0.000189f, +0.000350f, -0.000085f, +0.000197f, -0.000101f, -0.000149f, + -0.000090f, +0.000003f, +0.000078f, -0.000437f, +0.000395f, -0.000602f, -0.000130f, -0.000430f, +0.000066f, +0.000350f, + +0.000021f, -0.000093f, -0.000201f, -0.000113f, +0.000057f, +0.000084f, +0.000094f, +0.000078f, +0.000015f, -0.000028f, + -0.000134f, -0.000006f, +0.000102f, -0.000087f, -0.000126f, -0.000000f, -0.000021f, +0.000052f, -0.000004f, -0.000043f, + +0.000038f, +0.000020f, +0.000002f, +0.000214f, +0.000015f, -0.000096f, +0.000109f, +0.000030f, -0.000082f, +0.000035f, + +0.000032f, -0.000036f, -0.000024f, +0.000011f, +0.000003f, -0.000010f, +0.000038f, +0.000000f, +0.000027f, +0.000010f, + -0.000034f, -0.000017f, +0.000035f, +0.000034f, -0.000009f, -0.000028f + }, + { + -0.000251f, +0.003506f, +0.000668f, -0.001283f, +0.000182f, -0.000165f, -0.000165f, +0.000093f, +0.000342f, -0.000072f, + -0.000176f, -0.000184f, -0.000934f, +0.000314f, +0.004721f, -0.009431f, -0.001921f, +0.002022f, +0.000198f, -0.000270f, + -0.000087f, -0.001192f, -0.001358f, +0.002929f, +0.000536f, +0.001954f, +0.000380f, +0.000578f, +0.000661f, -0.000493f, + -0.000405f, +0.000119f, +0.000554f, +0.000088f, -0.000157f, -0.000342f, -0.000426f, -0.000041f, +0.000001f, +0.000140f, + +0.000543f, -0.000204f, -0.000291f, +0.000072f, +0.000263f, +0.000308f, +0.000069f, -0.000248f, +0.000263f, -0.000338f, + -0.000183f, -0.000250f, +0.000054f, -0.000076f, -0.000007f, +0.000004f, +0.000226f, +0.000233f, +0.000178f, -0.000124f, + -0.000112f, -0.000008f, +0.000018f, -0.000222f, -0.000084f, -0.000018f, -0.000133f, +0.000014f, +0.000014f, -0.000125f, + -0.000083f, -0.000048f, -0.000017f, +0.000178f, +0.000098f, -0.000008f, -0.000062f, +0.000050f, -0.000007f, +0.000008f, + -0.000013f, -0.000147f, -0.000054f, +0.000054f, +0.000009f, +0.000046f, +0.000108f, +0.000014f, -0.000042f, -0.000020f, + +0.000015f, +0.000009f, +0.000005f, +0.000044f, +0.000018f, +0.000034f + }, + { + +0.003674f, -0.003264f, -0.002687f, +0.001745f, +0.001205f, +0.001149f, -0.000019f, -0.000355f, -0.000162f, +0.000661f, + -0.000118f, +0.000271f, -0.000001f, -0.001335f, +0.001528f, -0.000952f, -0.000763f, +0.000537f, +0.000189f, -0.000263f, + +0.000338f, +0.000260f, +0.000246f, -0.000234f, +0.000256f, +0.000078f, -0.000621f, +0.000079f, +0.000582f, -0.000198f, + +0.000151f, -0.000356f, +0.000092f, +0.000358f, -0.000157f, -0.000461f, -0.000251f, +0.000283f, -0.000228f, -0.000086f, + +0.000591f, +0.000065f, -0.000122f, -0.000098f, +0.000316f, +0.000555f, -0.000312f, -0.000370f, +0.000175f, +0.000453f, + -0.000009f, -0.000000f, +0.000317f, -0.000153f, -0.000296f, +0.000071f, +0.000031f, -0.000194f, +0.000002f, -0.000027f, + -0.000070f, -0.000003f, +0.000029f, -0.000031f, -0.000075f, +0.000089f, -0.000008f, -0.000059f, +0.000056f, +0.000074f, + +0.000048f, +0.000003f, +0.000070f, -0.000019f, +0.000042f, +0.000016f, +0.000027f, -0.000088f, +0.000021f, -0.000036f, + -0.000088f, +0.000001f, +0.000080f, +0.000000f, +0.000063f, +0.000103f, +0.000054f, +0.000026f, +0.000067f, +0.000012f, + +0.000001f, -0.000034f, -0.000041f, +0.000011f, +0.000036f, +0.000045f + }, + { + +0.000315f, -0.000592f, +0.001192f, -0.002107f, +0.000222f, +0.000041f, -0.000465f, +0.000555f, +0.000531f, +0.000518f, + +0.000157f, +0.000214f, +0.000042f, +0.000277f, +0.001102f, -0.000279f, -0.000483f, +0.000209f, +0.001130f, -0.001082f, + -0.000875f, +0.000838f, -0.000004f, -0.000627f, +0.000236f, +0.000845f, -0.001382f, -0.000358f, -0.000312f, -0.000810f, + +0.000267f, +0.000267f, -0.000025f, -0.000106f, +0.000138f, -0.000008f, -0.000381f, -0.000024f, -0.000016f, -0.000055f, + -0.000135f, -0.000211f, -0.000011f, +0.000018f, -0.000246f, +0.000115f, +0.000038f, -0.000010f, +0.000169f, +0.000191f, + +0.000179f, -0.000038f, -0.000115f, -0.000075f, -0.000059f, -0.000125f, -0.000010f, +0.000105f, +0.000040f, -0.000093f, + +0.000289f, -0.000074f, -0.000234f, -0.000048f, +0.000192f, -0.000007f, +0.000075f, +0.000139f, -0.000013f, -0.000059f, + -0.000067f, -0.000039f, +0.000042f, +0.000062f, +0.000022f, -0.000099f, -0.000064f, -0.000120f, +0.000035f, +0.000041f, + -0.000019f, +0.000086f, +0.000039f, -0.000117f, -0.000064f, +0.000019f, -0.000034f, -0.000011f, -0.000028f, -0.000050f, + +0.000020f, -0.000024f, -0.000003f, +0.000006f, +0.000050f, -0.000029f + }, + { + +0.002271f, +0.001456f, -0.001568f, +0.001012f, +0.000949f, +0.000941f, -0.001093f, -0.000308f, +0.000467f, +0.000303f, + -0.000456f, -0.000606f, +0.000141f, +0.000333f, +0.000797f, +0.000171f, +0.000968f, -0.000666f, +0.000184f, -0.000321f, + +0.000226f, +0.000500f, +0.000283f, -0.000375f, +0.000464f, -0.000064f, +0.000173f, -0.000145f, -0.000264f, -0.000005f, + -0.000049f, -0.000143f, -0.000423f, +0.000158f, +0.000144f, -0.000111f, -0.000507f, -0.000127f, +0.000192f, -0.000047f, + -0.000017f, -0.000003f, +0.000186f, +0.000261f, -0.000256f, -0.000254f, +0.000007f, +0.000148f, +0.000013f, +0.000122f, + +0.000124f, +0.000142f, +0.000174f, -0.000095f, -0.000059f, +0.000052f, +0.000011f, +0.000009f, -0.000198f, -0.000007f, + +0.000133f, -0.000023f, -0.000006f, +0.000142f, -0.000002f, -0.000111f, -0.000012f, -0.000037f, -0.000042f, +0.000126f, + -0.000019f, -0.000050f, +0.000051f, +0.000012f, +0.000048f, +0.000023f, -0.000027f, -0.000053f, -0.000018f, +0.000014f, + +0.000036f, +0.000089f, -0.000006f, -0.000024f, +0.000042f, -0.000049f, -0.000018f, +0.000023f, -0.000024f, +0.000034f, + +0.000044f, +0.000038f, +0.000030f, -0.000031f, -0.000013f, +0.000022f + }, + { + +0.000131f, +0.003242f, -0.000372f, +0.001961f, +0.000384f, +0.000088f, +0.000521f, -0.000486f, +0.000431f, +0.000161f, + +0.000181f, +0.000724f, -0.000569f, -0.001138f, +0.002130f, -0.003804f, +0.001911f, -0.000383f, +0.000347f, +0.000923f, + -0.003070f, +0.003982f, +0.001203f, -0.000775f, -0.000217f, +0.000183f, +0.000219f, -0.001111f, +0.000586f, +0.001379f, + -0.000010f, -0.000167f, -0.000016f, +0.000080f, +0.000057f, +0.000184f, -0.000019f, -0.000211f, +0.000048f, +0.000156f, + -0.000118f, -0.000241f, -0.000046f, -0.000078f, +0.000018f, -0.000153f, +0.000078f, +0.000322f, -0.000264f, -0.000175f, + +0.000188f, +0.000282f, +0.000041f, -0.000097f, +0.000101f, +0.000154f, -0.000140f, -0.000120f, +0.000035f, -0.000132f, + -0.000059f, +0.000085f, +0.000061f, -0.000060f, -0.000070f, +0.000028f, +0.000008f, -0.000140f, +0.000043f, +0.000010f, + +0.000018f, -0.000039f, +0.000008f, +0.000012f, +0.000093f, +0.000100f, +0.000087f, -0.000047f, -0.000034f, +0.000035f, + -0.000089f, -0.000101f, -0.000060f, -0.000053f, -0.000009f, -0.000015f, +0.000063f, +0.000016f, -0.000038f, -0.000013f, + -0.000029f, +0.000065f, +0.000103f, -0.000037f, -0.000010f, +0.000072f + }, + { + +0.000033f, +0.003020f, -0.000850f, -0.000133f, -0.000539f, +0.000010f, -0.002186f, +0.000129f, -0.000348f, +0.000263f, + -0.000001f, +0.000766f, -0.000766f, +0.000894f, +0.003318f, -0.000223f, -0.000621f, +0.000350f, -0.000592f, -0.000127f, + +0.000099f, +0.000424f, +0.000109f, +0.000227f, +0.001040f, +0.000066f, +0.000029f, +0.000438f, +0.000415f, -0.000347f, + -0.000100f, +0.000005f, -0.000064f, -0.000179f, +0.000118f, +0.000086f, -0.000209f, -0.000387f, -0.000169f, +0.000115f, + +0.000375f, -0.000067f, +0.000081f, -0.000428f, -0.000285f, -0.000337f, -0.000096f, -0.000084f, +0.000033f, +0.000400f, + -0.000143f, -0.000170f, +0.000151f, -0.000030f, -0.000135f, -0.000189f, -0.000087f, +0.000213f, -0.000031f, -0.000050f, + -0.000017f, -0.000057f, +0.000044f, -0.000136f, -0.000050f, -0.000147f, -0.000028f, +0.000063f, +0.000029f, -0.000130f, + -0.000006f, +0.000021f, +0.000004f, -0.000017f, -0.000093f, -0.000052f, +0.000088f, +0.000018f, -0.000103f, -0.000051f, + +0.000005f, -0.000012f, -0.000103f, -0.000032f, -0.000001f, -0.000048f, +0.000044f, +0.000108f, -0.000017f, -0.000013f, + +0.000030f, -0.000036f, -0.000044f, -0.000012f, +0.000038f, +0.000013f + }, + { + +0.000153f, -0.002199f, -0.000846f, +0.000949f, -0.000600f, -0.000029f, -0.000124f, -0.000099f, +0.000312f, -0.000598f, + +0.000823f, +0.000521f, -0.000396f, -0.001223f, -0.010002f, +0.001140f, -0.003152f, -0.000037f, +0.000088f, -0.000013f, + -0.000809f, +0.001883f, +0.000688f, -0.000400f, -0.000433f, +0.001519f, -0.001220f, +0.001985f, -0.000702f, +0.000214f, + +0.000516f, -0.000142f, -0.000295f, +0.000611f, -0.000936f, +0.000615f, +0.001055f, -0.000258f, +0.000026f, +0.000364f, + +0.000074f, +0.000157f, -0.000074f, -0.000560f, +0.000058f, +0.000160f, -0.000401f, +0.000083f, +0.000118f, +0.000031f, + +0.000161f, +0.000066f, +0.000198f, -0.000148f, +0.000019f, -0.000033f, -0.000009f, +0.000011f, +0.000084f, +0.000230f, + +0.000080f, -0.000014f, +0.000022f, +0.000164f, -0.000011f, -0.000020f, -0.000154f, +0.000044f, +0.000080f, +0.000022f, + -0.000129f, +0.000055f, +0.000112f, -0.000075f, +0.000103f, -0.000121f, -0.000004f, +0.000032f, +0.000076f, +0.000004f, + -0.000060f, -0.000044f, -0.000086f, +0.000073f, +0.000022f, +0.000004f, +0.000022f, -0.000022f, -0.000073f, +0.000005f, + +0.000006f, -0.000034f, +0.000008f, +0.000049f, -0.000024f, -0.000039f + } + }, + { + { + -0.001288f, +0.008067f, -0.001642f, -0.000189f, +0.000856f, +0.000588f, +0.000401f, -0.000094f, -0.000052f, -0.000865f, + -0.000655f, +0.000863f, +0.000267f, +0.000255f, +0.001226f, -0.000131f, +0.000121f, +0.000312f, -0.000613f, -0.001533f, + -0.000298f, +0.000261f, +0.000197f, -0.000568f, -0.000007f, +0.000112f, +0.000493f, +0.000345f, +0.000089f, +0.000797f, + +0.000207f, +0.000223f, -0.000280f, -0.000037f, +0.000231f, +0.000093f, +0.000028f, -0.000793f, -0.000077f, +0.000176f, + -0.000222f, +0.000050f, -0.000014f, +0.000006f, -0.000232f, -0.000254f, +0.000087f, +0.000232f, -0.000120f, -0.000211f, + -0.000370f, -0.000171f, +0.000043f, +0.000138f, -0.000014f, +0.000142f, +0.000194f, +0.000249f, +0.000113f, -0.000055f, + -0.000054f, +0.000032f, +0.000087f, +0.000086f, +0.000089f, +0.000054f, -0.000002f, -0.000122f, +0.000008f, +0.000132f, + +0.000070f, -0.000008f, -0.000039f, -0.000049f, +0.000074f, +0.000123f, -0.000086f, -0.000029f, +0.000010f, -0.000098f, + -0.000063f, -0.000097f, +0.000004f, -0.000027f, +0.000014f, +0.000023f, -0.000063f, +0.000020f, -0.000042f, -0.000033f, + -0.000008f, +0.000017f, -0.000003f, +0.000001f, +0.000007f, -0.000002f + }, + { + -0.000091f, +0.005865f, +0.001140f, -0.000560f, -0.000013f, +0.000543f, +0.000403f, -0.000195f, -0.000072f, +0.000375f, + +0.000131f, +0.000286f, +0.000087f, -0.000658f, +0.002267f, +0.002932f, +0.000336f, -0.000192f, +0.000318f, -0.001403f, + -0.000084f, -0.000062f, -0.000751f, +0.001221f, +0.001376f, -0.001235f, -0.000104f, -0.000300f, +0.000330f, +0.000203f, + -0.000369f, -0.000056f, -0.000299f, +0.000277f, +0.000242f, -0.000520f, -0.000390f, -0.000065f, -0.000118f, +0.000011f, + -0.000331f, +0.000128f, -0.000168f, -0.000011f, +0.000105f, -0.000092f, -0.000194f, +0.000029f, +0.000121f, -0.000289f, + +0.000108f, +0.000091f, -0.000165f, -0.000225f, +0.000155f, +0.000402f, -0.000080f, -0.000104f, +0.000050f, +0.000034f, + -0.000287f, -0.000108f, -0.000076f, -0.000023f, +0.000020f, +0.000055f, -0.000050f, -0.000171f, +0.000009f, +0.000021f, + +0.000008f, -0.000076f, +0.000151f, +0.000012f, -0.000034f, -0.000057f, +0.000089f, +0.000082f, +0.000018f, -0.000128f, + -0.000021f, +0.000122f, +0.000019f, -0.000016f, -0.000021f, -0.000049f, -0.000030f, +0.000019f, -0.000048f, -0.000056f, + +0.000069f, +0.000010f, -0.000051f, -0.000085f, -0.000028f, +0.000039f + }, + { + -0.001903f, +0.004573f, +0.007430f, -0.001277f, -0.002557f, +0.000036f, -0.000053f, -0.000293f, +0.000674f, +0.000545f, + -0.000242f, -0.000350f, +0.000603f, +0.000871f, +0.001323f, +0.001125f, +0.000272f, -0.000061f, +0.000992f, -0.000210f, + +0.000768f, +0.000680f, -0.000468f, +0.000093f, -0.000001f, -0.000541f, -0.000508f, +0.000211f, +0.000281f, +0.000038f, + +0.000138f, +0.000362f, -0.000021f, -0.000380f, +0.000137f, +0.000405f, -0.000118f, +0.000304f, +0.000188f, +0.000027f, + +0.000307f, -0.000164f, +0.000167f, -0.000429f, -0.000209f, -0.000105f, +0.000097f, -0.000025f, -0.000018f, +0.000116f, + +0.000238f, -0.000165f, -0.000167f, +0.000194f, -0.000075f, -0.000079f, -0.000005f, -0.000182f, +0.000155f, -0.000023f, + -0.000092f, -0.000029f, -0.000068f, +0.000032f, +0.000072f, -0.000208f, -0.000088f, +0.000025f, -0.000021f, -0.000101f, + +0.000101f, -0.000027f, -0.000079f, -0.000012f, +0.000037f, +0.000107f, +0.000096f, -0.000040f, -0.000092f, +0.000034f, + +0.000047f, -0.000013f, -0.000009f, +0.000047f, -0.000024f, -0.000032f, -0.000038f, +0.000004f, +0.000031f, -0.000043f, + +0.000010f, +0.000065f, +0.000029f, -0.000010f, +0.000046f, -0.000002f + }, + { + -0.011697f, -0.025372f, +0.002191f, -0.000662f, -0.001015f, -0.000075f, -0.000228f, -0.000145f, -0.000269f, +0.000104f, + +0.000574f, +0.000384f, +0.000416f, +0.000379f, +0.000349f, +0.000278f, -0.000064f, -0.000343f, +0.000338f, -0.000181f, + +0.000032f, -0.000309f, -0.000029f, +0.000184f, +0.000252f, +0.000249f, -0.000248f, +0.000053f, +0.000001f, -0.000566f, + +0.000013f, -0.000257f, -0.000189f, +0.000229f, -0.000190f, -0.000457f, -0.000035f, -0.000189f, +0.000440f, +0.000018f, + -0.000108f, +0.000132f, +0.000152f, +0.000199f, +0.000325f, +0.000068f, -0.000219f, +0.000075f, +0.000005f, -0.000038f, + -0.000157f, +0.000100f, +0.000042f, -0.000125f, +0.000054f, -0.000279f, -0.000083f, -0.000026f, -0.000105f, +0.000071f, + +0.000001f, -0.000146f, +0.000002f, -0.000053f, -0.000120f, +0.000029f, -0.000058f, -0.000021f, +0.000103f, -0.000086f, + -0.000095f, +0.000122f, +0.000174f, -0.000012f, +0.000052f, +0.000004f, -0.000020f, +0.000044f, -0.000032f, -0.000033f, + -0.000069f, -0.000065f, -0.000017f, +0.000027f, -0.000003f, +0.000037f, -0.000031f, -0.000006f, +0.000058f, -0.000009f, + -0.000050f, -0.000008f, +0.000024f, -0.000017f, -0.000033f, -0.000011f + }, + { + +0.000344f, -0.003897f, -0.001151f, +0.000045f, -0.000309f, +0.000325f, +0.000118f, +0.000254f, +0.000290f, -0.000710f, + +0.000269f, +0.000146f, -0.000049f, -0.003216f, +0.002804f, +0.000772f, +0.001600f, -0.000258f, -0.004097f, +0.001165f, + +0.000157f, +0.000185f, -0.000509f, +0.000160f, +0.000354f, +0.001957f, +0.000359f, -0.000193f, +0.000466f, -0.001977f, + +0.000533f, -0.000292f, +0.000228f, -0.000264f, -0.000123f, +0.001046f, -0.000103f, -0.000191f, +0.000075f, -0.000500f, + +0.000083f, +0.000039f, -0.000524f, -0.000457f, +0.000116f, -0.000215f, +0.000263f, +0.000133f, -0.000273f, -0.000100f, + -0.000118f, +0.000259f, +0.000142f, -0.000055f, +0.000075f, +0.000194f, -0.000128f, -0.000014f, +0.000124f, -0.000079f, + -0.000162f, -0.000072f, +0.000014f, -0.000046f, -0.000124f, -0.000187f, -0.000128f, -0.000059f, +0.000137f, -0.000031f, + -0.000027f, +0.000096f, -0.000009f, +0.000108f, +0.000093f, -0.000011f, -0.000079f, -0.000021f, -0.000066f, -0.000103f, + -0.000081f, -0.000008f, +0.000097f, -0.000007f, -0.000035f, +0.000008f, -0.000028f, +0.000011f, +0.000018f, -0.000015f, + -0.000004f, -0.000033f, -0.000009f, +0.000044f, +0.000016f, -0.000071f + }, + { + -0.014917f, -0.011895f, +0.004041f, +0.001193f, +0.001898f, +0.000180f, -0.000508f, -0.000849f, +0.000784f, -0.000168f, + -0.001053f, +0.000002f, +0.000151f, +0.000291f, -0.000585f, -0.000190f, +0.000377f, -0.000167f, -0.000027f, +0.000264f, + -0.000443f, -0.000539f, +0.000166f, -0.000270f, -0.000057f, -0.000120f, +0.000240f, -0.000446f, -0.000042f, -0.000250f, + -0.000061f, +0.000298f, +0.000050f, +0.000006f, -0.000151f, -0.000078f, +0.000363f, -0.000053f, +0.000239f, -0.000090f, + +0.000017f, -0.000298f, +0.000176f, +0.000230f, -0.000574f, +0.000153f, +0.000136f, +0.000002f, +0.000081f, -0.000053f, + +0.000195f, +0.000247f, +0.000024f, -0.000367f, +0.000012f, +0.000144f, -0.000171f, -0.000190f, -0.000014f, +0.000025f, + -0.000018f, -0.000052f, -0.000152f, -0.000025f, +0.000047f, +0.000029f, +0.000017f, -0.000072f, +0.000122f, -0.000043f, + -0.000060f, -0.000094f, +0.000050f, +0.000083f, +0.000002f, +0.000072f, -0.000084f, -0.000013f, +0.000054f, +0.000044f, + -0.000012f, +0.000044f, +0.000146f, +0.000104f, -0.000051f, -0.000067f, -0.000021f, -0.000045f, -0.000047f, +0.000069f, + -0.000017f, -0.000001f, -0.000025f, +0.000017f, +0.000054f, -0.000006f + }, + { + +0.000504f, -0.000179f, -0.001035f, +0.000691f, -0.000151f, +0.000137f, -0.000059f, -0.000123f, -0.000050f, +0.000314f, + -0.000209f, -0.000075f, +0.000006f, -0.001204f, +0.000841f, +0.001086f, +0.000526f, -0.000268f, -0.000826f, +0.000335f, + +0.000637f, +0.000953f, -0.001786f, -0.002082f, -0.000058f, -0.000329f, -0.000132f, +0.000638f, +0.000817f, +0.001250f, + +0.000493f, -0.000153f, +0.000425f, +0.000398f, -0.000580f, -0.000102f, -0.000290f, +0.000026f, -0.000058f, -0.000075f, + -0.000365f, -0.000106f, +0.000085f, +0.000202f, +0.000129f, -0.000243f, -0.000143f, +0.000122f, -0.000056f, +0.000108f, + -0.000067f, +0.000027f, -0.000160f, -0.000151f, +0.000060f, +0.000024f, -0.000065f, +0.000004f, +0.000235f, +0.000117f, + +0.000130f, +0.000105f, +0.000030f, +0.000002f, -0.000022f, +0.000088f, -0.000011f, -0.000187f, -0.000127f, +0.000080f, + +0.000146f, -0.000124f, -0.000113f, -0.000047f, -0.000063f, -0.000098f, -0.000018f, -0.000089f, -0.000071f, +0.000003f, + +0.000037f, -0.000025f, -0.000008f, +0.000019f, -0.000003f, -0.000036f, -0.000005f, +0.000037f, -0.000024f, +0.000061f, + +0.000083f, +0.000068f, +0.000008f, -0.000029f, +0.000029f, -0.000005f + }, + { + +0.007129f, +0.053807f, +0.002005f, +0.000088f, +0.000057f, -0.000027f, +0.000461f, +0.000683f, -0.000023f, -0.000270f, + -0.000297f, +0.000055f, +0.000767f, -0.000257f, -0.000529f, -0.000046f, -0.000161f, +0.000401f, +0.000840f, -0.000844f, + -0.000235f, +0.000165f, -0.000268f, -0.000907f, -0.000056f, -0.000098f, -0.000392f, -0.000024f, -0.000162f, -0.000148f, + -0.000027f, +0.000511f, +0.000347f, -0.000398f, -0.000057f, -0.000326f, -0.000349f, +0.000270f, -0.000524f, -0.000130f, + +0.000137f, +0.000074f, -0.000031f, -0.000012f, +0.000124f, -0.000357f, -0.000043f, +0.000031f, +0.000033f, -0.000174f, + -0.000100f, -0.000108f, +0.000344f, +0.000216f, -0.000123f, -0.000187f, -0.000056f, -0.000041f, -0.000048f, +0.000099f, + +0.000001f, -0.000001f, -0.000029f, -0.000212f, -0.000030f, +0.000071f, +0.000026f, -0.000023f, +0.000046f, +0.000104f, + -0.000046f, +0.000009f, +0.000020f, -0.000090f, -0.000158f, +0.000095f, +0.000015f, -0.000160f, +0.000017f, +0.000015f, + -0.000053f, +0.000053f, +0.000031f, +0.000003f, +0.000011f, +0.000043f, -0.000036f, -0.000084f, +0.000014f, -0.000020f, + +0.000004f, +0.000012f, -0.000049f, -0.000028f, -0.000036f, +0.000016f + }, + { + +0.000839f, +0.000567f, -0.004115f, -0.000078f, -0.000255f, +0.000162f, +0.000039f, +0.000020f, -0.000321f, -0.000018f, + +0.000243f, +0.000339f, +0.000228f, -0.000429f, +0.002075f, -0.007453f, -0.001816f, +0.001886f, +0.000518f, -0.000600f, + -0.001949f, +0.001135f, +0.000191f, +0.001077f, -0.000672f, +0.002471f, +0.001029f, -0.000921f, +0.000772f, -0.000417f, + -0.000102f, +0.000489f, -0.000054f, +0.000669f, -0.000659f, -0.000799f, +0.000290f, -0.000046f, +0.000061f, +0.000303f, + -0.000200f, -0.000352f, -0.000105f, -0.000395f, -0.000216f, -0.000095f, +0.000059f, -0.000004f, -0.000138f, -0.000068f, + -0.000091f, -0.000014f, +0.000094f, -0.000243f, -0.000240f, +0.000167f, +0.000140f, -0.000128f, -0.000061f, -0.000071f, + +0.000181f, +0.000183f, +0.000213f, +0.000084f, +0.000187f, +0.000149f, +0.000058f, +0.000050f, -0.000155f, -0.000017f, + +0.000022f, +0.000089f, +0.000102f, +0.000036f, -0.000125f, -0.000044f, +0.000031f, +0.000004f, +0.000033f, -0.000001f, + -0.000048f, +0.000047f, +0.000105f, -0.000002f, +0.000008f, -0.000021f, -0.000084f, -0.000112f, -0.000008f, +0.000030f, + -0.000011f, +0.000004f, +0.000038f, -0.000014f, -0.000001f, -0.000045f + }, + { + -0.002017f, +0.002137f, +0.000624f, +0.001806f, -0.000456f, +0.000138f, +0.000692f, +0.000440f, -0.000272f, -0.000303f, + -0.000815f, -0.000573f, -0.000425f, +0.000546f, -0.000027f, -0.000072f, +0.000240f, -0.000875f, -0.000272f, +0.000571f, + +0.000583f, +0.000022f, +0.000060f, -0.000220f, -0.000319f, +0.000240f, +0.000054f, -0.000148f, +0.000113f, -0.000059f, + -0.000304f, -0.000170f, -0.000078f, -0.000766f, -0.000562f, +0.000186f, +0.000202f, +0.000025f, +0.000038f, +0.000063f, + -0.000096f, -0.000167f, -0.000101f, +0.000419f, +0.000143f, -0.000445f, -0.000235f, -0.000005f, +0.000034f, -0.000203f, + -0.000214f, -0.000093f, -0.000205f, -0.000200f, +0.000256f, -0.000050f, -0.000139f, +0.000058f, -0.000039f, +0.000042f, + +0.000155f, -0.000171f, -0.000058f, -0.000058f, +0.000021f, +0.000015f, -0.000040f, +0.000022f, +0.000004f, -0.000089f, + +0.000024f, +0.000054f, +0.000007f, -0.000071f, +0.000009f, -0.000001f, -0.000008f, -0.000031f, +0.000062f, -0.000031f, + +0.000066f, +0.000044f, -0.000024f, -0.000053f, -0.000014f, -0.000092f, -0.000091f, -0.000020f, -0.000049f, -0.000031f, + -0.000011f, -0.000002f, +0.000073f, +0.000018f, -0.000030f, -0.000050f + }, + { + -0.000460f, +0.002836f, +0.000668f, -0.001949f, -0.000435f, -0.000329f, -0.000492f, +0.000625f, +0.000011f, +0.000346f, + -0.000841f, +0.000178f, +0.001154f, -0.000415f, +0.001038f, -0.000241f, +0.000659f, +0.001367f, -0.000801f, -0.000472f, + +0.001555f, +0.000635f, -0.000408f, -0.000933f, +0.000319f, -0.000305f, -0.000906f, -0.000019f, -0.000266f, +0.000343f, + +0.000436f, +0.000271f, -0.000126f, +0.000154f, -0.000283f, -0.000160f, +0.000398f, +0.000171f, +0.000261f, +0.000140f, + -0.000131f, -0.000133f, -0.000271f, -0.000110f, -0.000043f, -0.000138f, +0.000088f, +0.000057f, -0.000060f, +0.000031f, + -0.000172f, -0.000105f, +0.000206f, +0.000301f, +0.000114f, -0.000046f, +0.000024f, -0.000058f, -0.000125f, +0.000035f, + -0.000060f, -0.000144f, +0.000087f, +0.000074f, -0.000087f, -0.000094f, +0.000041f, -0.000150f, -0.000116f, -0.000016f, + -0.000042f, +0.000089f, +0.000090f, -0.000012f, -0.000063f, -0.000015f, +0.000051f, +0.000146f, +0.000078f, -0.000049f, + +0.000048f, -0.000025f, -0.000056f, +0.000053f, +0.000083f, -0.000000f, +0.000023f, +0.000018f, +0.000024f, +0.000069f, + -0.000009f, -0.000008f, -0.000006f, +0.000001f, +0.000008f, -0.000027f + }, + { + +0.000002f, +0.006185f, -0.001083f, +0.002816f, -0.001363f, -0.000837f, +0.001237f, +0.000324f, +0.000616f, -0.000273f, + +0.000370f, +0.000883f, +0.000094f, +0.000888f, +0.000677f, +0.000820f, +0.000532f, -0.000380f, +0.000040f, -0.000462f, + +0.000549f, -0.000183f, -0.000172f, +0.000183f, +0.000001f, -0.000082f, +0.000208f, -0.000544f, -0.000052f, +0.000235f, + -0.000035f, +0.000004f, +0.000253f, +0.000660f, -0.000465f, +0.000246f, +0.000459f, +0.000430f, +0.000197f, -0.000059f, + -0.000074f, -0.000023f, +0.000222f, -0.000303f, -0.000131f, -0.000147f, +0.000060f, +0.000049f, -0.000033f, -0.000022f, + -0.000027f, -0.000044f, -0.000079f, -0.000064f, +0.000115f, -0.000055f, +0.000049f, +0.000008f, +0.000079f, +0.000093f, + -0.000121f, +0.000082f, +0.000079f, -0.000092f, -0.000037f, +0.000081f, +0.000070f, +0.000074f, +0.000070f, -0.000061f, + -0.000067f, +0.000041f, -0.000023f, -0.000038f, -0.000050f, -0.000006f, +0.000039f, -0.000014f, +0.000035f, +0.000035f, + +0.000025f, -0.000019f, -0.000091f, +0.000009f, -0.000056f, -0.000010f, +0.000064f, -0.000031f, +0.000022f, -0.000007f, + -0.000060f, -0.000034f, -0.000087f, +0.000003f, +0.000022f, -0.000013f + }, + { + -0.000175f, +0.002247f, +0.002029f, +0.000382f, +0.000174f, -0.000094f, +0.000220f, +0.000263f, +0.000191f, -0.000123f, + +0.000333f, +0.000273f, -0.001723f, +0.001458f, -0.004173f, -0.002438f, +0.001322f, +0.000306f, -0.000053f, -0.000728f, + +0.001411f, +0.001795f, -0.000989f, +0.000017f, +0.000474f, -0.000407f, -0.000749f, +0.000670f, -0.000682f, +0.000242f, + +0.000643f, +0.000727f, +0.000105f, +0.000394f, +0.000032f, +0.000599f, -0.000092f, -0.000311f, -0.000264f, -0.000208f, + -0.000094f, -0.000217f, -0.000055f, -0.000219f, +0.000034f, -0.000109f, -0.000213f, -0.000181f, +0.000120f, -0.000147f, + -0.000157f, -0.000204f, -0.000083f, +0.000079f, -0.000040f, -0.000115f, -0.000093f, +0.000227f, -0.000047f, +0.000134f, + +0.000346f, -0.000063f, -0.000316f, -0.000164f, -0.000019f, +0.000095f, -0.000019f, +0.000076f, +0.000053f, -0.000050f, + -0.000026f, -0.000013f, +0.000033f, +0.000043f, -0.000014f, -0.000147f, -0.000086f, -0.000003f, +0.000022f, +0.000008f, + +0.000046f, +0.000098f, +0.000032f, +0.000051f, +0.000033f, +0.000010f, -0.000005f, -0.000067f, +0.000038f, +0.000013f, + +0.000033f, -0.000002f, -0.000118f, -0.000008f, +0.000040f, -0.000070f + }, + { + -0.000296f, +0.003607f, -0.000508f, +0.001151f, +0.000540f, -0.002325f, +0.000304f, -0.000078f, -0.000938f, -0.000351f, + +0.000606f, -0.000457f, -0.000642f, +0.000473f, +0.004104f, -0.000376f, +0.001059f, +0.000676f, -0.000711f, -0.000028f, + +0.000061f, -0.000019f, -0.000113f, +0.000255f, +0.000331f, +0.000297f, -0.000320f, -0.000369f, -0.000064f, -0.000421f, + +0.000029f, +0.000230f, +0.000473f, +0.000515f, +0.000187f, +0.000106f, +0.000051f, -0.000021f, +0.000394f, -0.000537f, + -0.000089f, -0.000252f, -0.000246f, -0.000058f, +0.000284f, +0.000280f, +0.000304f, +0.000008f, +0.000030f, -0.000090f, + -0.000081f, +0.000231f, -0.000193f, -0.000128f, +0.000098f, +0.000243f, +0.000169f, +0.000033f, -0.000081f, +0.000044f, + -0.000046f, +0.000074f, +0.000055f, +0.000094f, +0.000135f, +0.000140f, +0.000069f, -0.000057f, +0.000004f, -0.000049f, + -0.000013f, -0.000067f, -0.000015f, -0.000034f, +0.000093f, +0.000068f, -0.000001f, -0.000085f, +0.000087f, +0.000122f, + +0.000024f, -0.000014f, +0.000083f, +0.000083f, -0.000034f, +0.000061f, +0.000052f, -0.000101f, -0.000024f, +0.000039f, + -0.000032f, -0.000001f, +0.000038f, +0.000008f, +0.000006f, -0.000007f + }, + { + -0.000401f, -0.001414f, +0.001091f, +0.000023f, -0.000093f, -0.000094f, -0.000415f, +0.000827f, +0.000063f, +0.000229f, + +0.000296f, +0.000641f, +0.001577f, -0.007383f, -0.008309f, -0.004822f, +0.000596f, -0.000059f, -0.000172f, +0.001138f, + +0.000870f, +0.000710f, +0.000971f, -0.000940f, -0.000677f, +0.000501f, +0.000133f, +0.002456f, -0.000732f, +0.000223f, + -0.000637f, -0.000217f, +0.000142f, +0.000052f, -0.000037f, +0.000906f, -0.000867f, -0.000117f, +0.000675f, +0.000003f, + -0.000414f, -0.000333f, -0.000504f, -0.000086f, +0.000156f, -0.000081f, +0.000038f, -0.000082f, +0.000035f, +0.000039f, + -0.000004f, -0.000077f, -0.000370f, -0.000126f, +0.000007f, +0.000172f, -0.000279f, -0.000056f, -0.000136f, -0.000314f, + -0.000173f, +0.000059f, +0.000102f, -0.000033f, -0.000043f, -0.000101f, +0.000243f, +0.000173f, -0.000160f, -0.000049f, + -0.000012f, +0.000009f, -0.000183f, -0.000051f, -0.000085f, -0.000037f, +0.000146f, -0.000083f, -0.000064f, -0.000091f, + +0.000044f, +0.000089f, +0.000090f, +0.000036f, -0.000085f, +0.000017f, -0.000056f, -0.000017f, +0.000046f, +0.000018f, + -0.000015f, +0.000030f, +0.000015f, -0.000035f, -0.000003f, +0.000018f + } + }, + { + { + +0.002899f, +0.013833f, +0.006638f, -0.000390f, -0.000640f, +0.000339f, +0.000088f, -0.000143f, +0.000050f, -0.000879f, + -0.000157f, +0.000966f, -0.000019f, -0.000309f, +0.000119f, -0.000043f, -0.000653f, -0.000027f, +0.000061f, -0.000673f, + +0.000476f, +0.000156f, +0.000249f, -0.000676f, -0.000119f, -0.000089f, -0.000026f, -0.000145f, +0.000036f, +0.000645f, + -0.000041f, -0.000247f, -0.000673f, -0.000355f, +0.000523f, -0.000188f, -0.000085f, -0.000669f, -0.000068f, +0.000054f, + -0.000024f, +0.000240f, -0.000153f, -0.000101f, -0.000309f, -0.000210f, +0.000075f, +0.000239f, +0.000057f, -0.000163f, + -0.000205f, -0.000048f, -0.000031f, +0.000246f, +0.000132f, +0.000088f, +0.000172f, +0.000232f, +0.000091f, -0.000128f, + +0.000024f, +0.000029f, +0.000117f, +0.000031f, -0.000030f, -0.000042f, -0.000077f, -0.000082f, +0.000034f, +0.000078f, + +0.000013f, -0.000056f, -0.000024f, -0.000012f, +0.000068f, +0.000048f, -0.000115f, +0.000023f, -0.000037f, -0.000110f, + -0.000067f, -0.000059f, +0.000035f, -0.000029f, +0.000018f, -0.000042f, -0.000023f, +0.000000f, -0.000045f, -0.000030f, + +0.000006f, -0.000007f, +0.000027f, +0.000020f, +0.000000f, -0.000016f + }, + { + +0.000324f, +0.000463f, -0.003145f, -0.000985f, -0.000181f, +0.000185f, -0.000049f, -0.000398f, -0.000037f, +0.000462f, + +0.000674f, +0.000134f, +0.000030f, -0.000300f, +0.003432f, +0.003821f, -0.000039f, -0.000782f, +0.000110f, -0.001254f, + +0.000280f, +0.000941f, +0.000449f, +0.000762f, +0.000852f, -0.000642f, -0.000534f, -0.000422f, +0.000471f, +0.000292f, + -0.000410f, -0.001278f, -0.000676f, +0.000558f, -0.000342f, -0.000138f, -0.000086f, +0.000176f, +0.000296f, +0.000349f, + -0.000406f, -0.000258f, -0.000221f, +0.000158f, -0.000072f, +0.000014f, -0.000173f, +0.000174f, +0.000119f, -0.000238f, + +0.000167f, -0.000075f, -0.000264f, -0.000197f, +0.000446f, +0.000381f, +0.000010f, +0.000076f, +0.000088f, -0.000096f, + -0.000244f, +0.000041f, +0.000014f, -0.000027f, -0.000085f, +0.000027f, -0.000092f, -0.000077f, +0.000036f, -0.000037f, + -0.000006f, +0.000012f, +0.000072f, -0.000026f, +0.000005f, +0.000041f, +0.000117f, +0.000029f, -0.000027f, -0.000079f, + +0.000036f, +0.000109f, -0.000028f, -0.000013f, -0.000047f, -0.000051f, +0.000011f, +0.000009f, -0.000082f, +0.000000f, + +0.000069f, -0.000025f, -0.000067f, -0.000065f, -0.000000f, +0.000049f + }, + { + +0.001122f, -0.002630f, -0.002395f, -0.001533f, -0.001015f, +0.000193f, -0.000052f, -0.000234f, +0.000334f, -0.000049f, + -0.000398f, +0.000102f, +0.000518f, -0.000059f, +0.000380f, +0.000318f, -0.000536f, -0.000555f, +0.001385f, -0.001211f, + +0.000198f, +0.000137f, -0.000455f, +0.000347f, +0.000172f, -0.000486f, -0.000463f, +0.000304f, +0.000158f, +0.000308f, + +0.000489f, +0.000178f, -0.000041f, -0.000231f, +0.000388f, -0.000132f, -0.000334f, +0.000370f, +0.000134f, -0.000037f, + +0.000179f, -0.000423f, +0.000050f, -0.000314f, -0.000354f, -0.000164f, -0.000006f, +0.000020f, +0.000045f, +0.000114f, + +0.000067f, -0.000048f, -0.000153f, +0.000066f, -0.000094f, +0.000113f, +0.000013f, -0.000128f, +0.000153f, -0.000074f, + -0.000141f, -0.000050f, -0.000076f, +0.000067f, +0.000072f, -0.000132f, +0.000021f, +0.000048f, -0.000091f, -0.000029f, + +0.000134f, -0.000097f, -0.000088f, +0.000041f, +0.000037f, +0.000090f, +0.000004f, -0.000093f, -0.000030f, +0.000042f, + -0.000002f, -0.000044f, +0.000036f, +0.000058f, -0.000046f, -0.000050f, -0.000030f, +0.000043f, +0.000010f, -0.000033f, + +0.000045f, +0.000058f, -0.000023f, +0.000012f, +0.000036f, -0.000026f + }, + { + +0.014583f, +0.004732f, -0.003811f, +0.000327f, +0.000610f, -0.000080f, -0.000169f, -0.000028f, -0.000051f, -0.000360f, + +0.000052f, -0.000041f, -0.000442f, +0.000464f, +0.000175f, -0.000717f, -0.000178f, +0.000130f, +0.000507f, -0.000243f, + +0.000189f, -0.000181f, +0.000195f, +0.000264f, +0.000193f, -0.000020f, -0.000695f, +0.000213f, -0.000399f, -0.000312f, + +0.000237f, -0.000229f, -0.000038f, +0.000364f, -0.000065f, -0.000420f, -0.000303f, -0.000018f, +0.000285f, -0.000189f, + +0.000019f, +0.000104f, +0.000192f, -0.000066f, +0.000013f, -0.000231f, +0.000018f, +0.000055f, +0.000061f, -0.000017f, + -0.000182f, +0.000223f, -0.000117f, -0.000108f, +0.000039f, -0.000095f, +0.000070f, +0.000067f, +0.000100f, +0.000106f, + -0.000002f, -0.000129f, +0.000056f, -0.000046f, -0.000089f, +0.000036f, -0.000089f, +0.000055f, +0.000032f, -0.000045f, + -0.000062f, +0.000112f, +0.000111f, -0.000066f, +0.000021f, -0.000044f, -0.000009f, +0.000016f, -0.000063f, -0.000043f, + -0.000045f, -0.000047f, +0.000033f, +0.000011f, +0.000009f, +0.000064f, -0.000043f, +0.000052f, +0.000028f, -0.000042f, + -0.000048f, +0.000010f, +0.000006f, -0.000027f, -0.000013f, +0.000017f + }, + { + -0.000717f, -0.000593f, +0.001565f, -0.000399f, +0.000010f, +0.000219f, -0.000267f, -0.000163f, +0.000065f, -0.000617f, + +0.000117f, +0.000294f, -0.000275f, -0.000450f, +0.005237f, -0.000651f, +0.000940f, -0.001681f, +0.000389f, +0.000624f, + +0.000336f, +0.000811f, +0.000268f, +0.001161f, +0.000214f, +0.000755f, -0.000821f, -0.000477f, -0.000353f, -0.002648f, + +0.000422f, +0.000095f, +0.000341f, -0.000504f, -0.000421f, +0.000679f, -0.000035f, +0.000168f, +0.000188f, -0.000421f, + -0.000017f, -0.000083f, -0.000329f, -0.000048f, +0.000176f, -0.000171f, +0.000089f, -0.000085f, -0.000081f, -0.000218f, + -0.000036f, +0.000210f, -0.000147f, -0.000020f, +0.000054f, +0.000190f, -0.000229f, -0.000045f, +0.000114f, -0.000050f, + -0.000040f, +0.000026f, -0.000025f, -0.000146f, -0.000137f, -0.000061f, +0.000005f, +0.000019f, +0.000058f, -0.000058f, + +0.000123f, +0.000112f, -0.000011f, +0.000057f, +0.000046f, -0.000072f, -0.000096f, -0.000053f, -0.000082f, -0.000032f, + -0.000030f, +0.000054f, +0.000082f, -0.000059f, +0.000002f, -0.000018f, -0.000022f, +0.000042f, +0.000003f, -0.000030f, + -0.000026f, -0.000046f, +0.000014f, +0.000052f, -0.000033f, -0.000059f + }, + { + +0.015911f, +0.025711f, +0.000163f, -0.001146f, -0.001102f, +0.000101f, -0.000498f, +0.000153f, +0.000432f, -0.001160f, + -0.000915f, +0.000428f, +0.000346f, +0.000982f, +0.000321f, -0.000039f, +0.000015f, -0.000767f, -0.000100f, -0.000121f, + -0.000673f, -0.000371f, +0.000209f, -0.000167f, -0.000170f, -0.000029f, +0.000435f, +0.000007f, +0.000049f, -0.000267f, + -0.000088f, +0.000438f, -0.000021f, -0.000434f, -0.000277f, -0.000133f, +0.000212f, +0.000006f, +0.000386f, -0.000250f, + +0.000056f, +0.000017f, -0.000026f, +0.000286f, -0.000417f, +0.000250f, +0.000085f, -0.000018f, -0.000039f, -0.000172f, + +0.000212f, +0.000072f, -0.000111f, -0.000322f, +0.000067f, -0.000070f, -0.000244f, -0.000055f, +0.000086f, +0.000072f, + +0.000044f, -0.000046f, -0.000176f, -0.000080f, +0.000107f, +0.000036f, -0.000048f, -0.000023f, +0.000109f, -0.000016f, + -0.000044f, -0.000049f, +0.000041f, +0.000036f, +0.000007f, -0.000019f, -0.000062f, +0.000030f, +0.000081f, +0.000023f, + +0.000007f, +0.000069f, +0.000111f, +0.000012f, -0.000056f, -0.000047f, +0.000018f, -0.000057f, +0.000020f, +0.000036f, + -0.000035f, -0.000009f, -0.000010f, +0.000050f, +0.000020f, -0.000019f + }, + { + +0.000256f, -0.001034f, -0.000021f, +0.000534f, -0.000063f, +0.000050f, -0.000253f, -0.000370f, -0.000032f, +0.000436f, + -0.000063f, -0.000112f, -0.000102f, +0.000053f, +0.001058f, +0.002617f, +0.000019f, -0.000272f, -0.000033f, +0.000183f, + -0.000138f, -0.000999f, -0.002075f, +0.000168f, +0.000309f, -0.000570f, -0.000774f, +0.000256f, -0.000548f, -0.000235f, + +0.000069f, +0.000303f, +0.000793f, -0.000169f, -0.000374f, +0.000336f, +0.000061f, +0.000105f, -0.000155f, -0.000239f, + -0.000028f, +0.000373f, +0.000042f, +0.000183f, -0.000085f, -0.000376f, -0.000114f, +0.000170f, -0.000094f, +0.000203f, + -0.000070f, -0.000032f, -0.000166f, -0.000025f, +0.000002f, +0.000015f, -0.000085f, +0.000076f, +0.000031f, -0.000060f, + +0.000109f, +0.000128f, -0.000027f, +0.000004f, +0.000058f, +0.000027f, -0.000108f, -0.000050f, -0.000015f, +0.000135f, + +0.000098f, -0.000167f, -0.000070f, -0.000065f, -0.000080f, -0.000082f, -0.000074f, -0.000102f, -0.000023f, +0.000036f, + -0.000007f, -0.000018f, +0.000017f, +0.000040f, -0.000012f, -0.000016f, +0.000029f, +0.000049f, +0.000028f, +0.000078f, + +0.000065f, +0.000023f, -0.000030f, +0.000004f, +0.000027f, -0.000006f + }, + { + -0.014368f, +0.028438f, +0.003616f, +0.000137f, -0.000134f, -0.000004f, +0.000843f, -0.000118f, +0.000107f, -0.000329f, + -0.000341f, +0.000980f, +0.000421f, -0.000402f, +0.000458f, +0.000282f, -0.000017f, +0.000409f, +0.000487f, -0.000748f, + +0.000089f, +0.000134f, +0.000034f, -0.000256f, +0.000415f, -0.000385f, +0.000004f, -0.000130f, -0.000341f, +0.000195f, + +0.000271f, +0.000328f, +0.000076f, -0.000652f, -0.000242f, -0.000639f, -0.000467f, +0.000389f, -0.000186f, +0.000043f, + +0.000252f, +0.000001f, -0.000189f, +0.000104f, -0.000047f, -0.000094f, +0.000121f, +0.000140f, -0.000218f, -0.000219f, + -0.000083f, +0.000029f, +0.000344f, +0.000050f, -0.000081f, -0.000094f, -0.000013f, -0.000049f, -0.000052f, +0.000077f, + -0.000008f, -0.000032f, -0.000055f, -0.000075f, +0.000048f, +0.000027f, +0.000049f, -0.000030f, +0.000000f, +0.000042f, + -0.000064f, -0.000011f, -0.000080f, -0.000131f, -0.000069f, +0.000114f, -0.000115f, -0.000094f, +0.000073f, -0.000018f, + -0.000048f, +0.000051f, -0.000003f, -0.000011f, +0.000030f, +0.000004f, -0.000045f, -0.000038f, -0.000006f, -0.000024f, + +0.000006f, +0.000006f, -0.000040f, -0.000028f, -0.000007f, +0.000044f + }, + { + +0.000283f, -0.002321f, -0.002095f, +0.000942f, -0.000140f, +0.000220f, +0.000032f, -0.000131f, -0.000379f, +0.000194f, + +0.000424f, +0.000219f, +0.000002f, -0.003277f, -0.000792f, -0.001486f, +0.000802f, -0.000266f, +0.000296f, -0.000834f, + -0.001900f, +0.001638f, +0.001464f, -0.000267f, -0.001764f, +0.001759f, +0.000106f, -0.000593f, +0.000237f, -0.000695f, + -0.000073f, -0.000131f, +0.000070f, +0.000565f, -0.000436f, -0.000233f, +0.000321f, -0.000218f, +0.000560f, +0.000084f, + -0.000421f, +0.000132f, +0.000090f, -0.000437f, -0.000387f, -0.000105f, +0.000078f, +0.000291f, -0.000141f, +0.000007f, + -0.000036f, +0.000051f, -0.000021f, -0.000125f, -0.000061f, +0.000140f, -0.000034f, -0.000289f, -0.000053f, -0.000016f, + +0.000174f, +0.000131f, +0.000226f, +0.000164f, +0.000096f, +0.000084f, +0.000039f, -0.000010f, -0.000145f, +0.000006f, + +0.000096f, +0.000077f, -0.000018f, -0.000114f, -0.000120f, +0.000017f, +0.000009f, -0.000051f, +0.000015f, -0.000022f, + +0.000012f, +0.000105f, +0.000054f, -0.000016f, +0.000006f, -0.000077f, -0.000116f, -0.000051f, +0.000036f, +0.000026f, + -0.000034f, +0.000017f, +0.000010f, -0.000025f, -0.000015f, -0.000055f + }, + { + -0.000023f, +0.001897f, -0.003480f, -0.000174f, -0.001163f, -0.001356f, +0.000085f, +0.000503f, -0.000389f, -0.000552f, + -0.000448f, -0.000500f, -0.000195f, +0.001025f, -0.000314f, +0.000189f, +0.000398f, -0.000780f, -0.000229f, +0.000631f, + -0.000219f, -0.000503f, -0.000150f, -0.000182f, -0.000268f, +0.000257f, +0.000239f, -0.000261f, -0.000021f, +0.000301f, + -0.000139f, -0.000157f, -0.000068f, -0.000487f, -0.000367f, +0.000377f, +0.000269f, +0.000082f, +0.000462f, +0.000018f, + -0.000085f, -0.000125f, +0.000156f, +0.000377f, -0.000245f, -0.000372f, +0.000219f, +0.000142f, -0.000140f, -0.000344f, + -0.000078f, -0.000033f, -0.000212f, +0.000003f, +0.000244f, -0.000177f, -0.000034f, +0.000131f, -0.000085f, +0.000054f, + +0.000075f, -0.000035f, -0.000049f, -0.000054f, +0.000132f, -0.000062f, -0.000019f, +0.000029f, -0.000097f, -0.000058f, + -0.000028f, +0.000003f, -0.000044f, -0.000005f, -0.000011f, -0.000009f, -0.000056f, +0.000064f, +0.000006f, +0.000037f, + +0.000085f, +0.000006f, -0.000070f, -0.000032f, -0.000066f, -0.000098f, -0.000069f, -0.000002f, -0.000049f, -0.000010f, + +0.000011f, +0.000026f, +0.000043f, -0.000007f, -0.000033f, -0.000048f + }, + { + +0.000430f, +0.006230f, +0.001766f, -0.000138f, +0.000012f, -0.000358f, -0.000185f, +0.000455f, -0.000473f, -0.000088f, + -0.000494f, +0.000292f, +0.000591f, -0.000380f, +0.001201f, +0.000657f, +0.000572f, +0.000450f, -0.000968f, +0.000937f, + +0.001535f, +0.000510f, +0.000253f, -0.000141f, +0.000553f, -0.000241f, -0.000345f, -0.000209f, +0.000245f, +0.000893f, + +0.000160f, +0.000077f, -0.000153f, +0.000132f, -0.000677f, -0.000144f, +0.000454f, +0.000082f, +0.000283f, +0.000095f, + +0.000226f, -0.000068f, -0.000046f, +0.000151f, +0.000008f, -0.000211f, +0.000078f, +0.000046f, -0.000230f, -0.000171f, + -0.000153f, +0.000010f, +0.000222f, +0.000229f, +0.000029f, +0.000061f, -0.000037f, -0.000111f, -0.000065f, +0.000089f, + -0.000186f, -0.000041f, +0.000128f, -0.000002f, -0.000156f, -0.000001f, -0.000081f, -0.000204f, +0.000003f, +0.000006f, + +0.000005f, +0.000082f, -0.000000f, -0.000066f, -0.000039f, +0.000064f, +0.000068f, +0.000125f, -0.000010f, -0.000040f, + +0.000028f, -0.000057f, -0.000049f, +0.000099f, +0.000068f, -0.000012f, +0.000028f, +0.000003f, +0.000043f, +0.000042f, + -0.000024f, +0.000014f, +0.000003f, +0.000003f, -0.000028f, +0.000021f + }, + { + -0.003642f, +0.004262f, -0.000146f, +0.000714f, -0.002073f, -0.000423f, +0.000970f, -0.000302f, -0.000072f, -0.000268f, + +0.000506f, +0.000275f, -0.000007f, -0.000017f, -0.000210f, +0.000329f, +0.000122f, -0.000057f, -0.000143f, -0.000143f, + +0.000322f, -0.000543f, -0.000239f, +0.000295f, -0.000211f, -0.000124f, -0.000118f, -0.000171f, -0.000256f, +0.000134f, + +0.000029f, +0.000344f, +0.000337f, +0.000275f, -0.000495f, +0.000116f, +0.000675f, +0.000590f, -0.000100f, -0.000016f, + -0.000071f, -0.000070f, +0.000064f, -0.000109f, -0.000002f, +0.000009f, -0.000047f, -0.000031f, -0.000075f, +0.000064f, + -0.000080f, +0.000031f, -0.000223f, +0.000062f, +0.000134f, -0.000039f, +0.000062f, +0.000112f, +0.000154f, +0.000025f, + -0.000152f, +0.000113f, +0.000002f, -0.000143f, +0.000043f, +0.000037f, +0.000032f, +0.000059f, +0.000007f, -0.000165f, + +0.000006f, +0.000028f, -0.000045f, -0.000009f, -0.000040f, +0.000005f, +0.000043f, +0.000025f, +0.000022f, -0.000001f, + -0.000019f, -0.000067f, -0.000018f, +0.000026f, -0.000063f, +0.000033f, +0.000030f, -0.000021f, +0.000017f, -0.000035f, + -0.000053f, -0.000047f, -0.000054f, +0.000018f, +0.000015f, -0.000020f + }, + { + +0.000173f, +0.000678f, +0.000081f, -0.000508f, +0.000089f, -0.000358f, +0.000185f, +0.000292f, +0.000156f, -0.000330f, + +0.000031f, +0.000314f, +0.000204f, +0.004407f, -0.004298f, +0.000307f, +0.000995f, -0.000176f, -0.000494f, -0.001171f, + +0.003341f, +0.000488f, -0.002832f, -0.001007f, +0.000244f, -0.000632f, -0.000227f, +0.000848f, -0.000904f, -0.000347f, + +0.000947f, +0.000526f, -0.000022f, +0.000078f, -0.000243f, +0.000433f, -0.000239f, +0.000109f, -0.000420f, -0.000123f, + -0.000025f, -0.000175f, +0.000084f, -0.000134f, -0.000056f, +0.000054f, -0.000197f, -0.000066f, +0.000325f, -0.000006f, + -0.000138f, -0.000221f, +0.000002f, +0.000149f, -0.000048f, -0.000118f, -0.000032f, +0.000154f, -0.000067f, +0.000197f, + +0.000200f, -0.000176f, -0.000218f, -0.000030f, +0.000106f, +0.000054f, -0.000052f, +0.000093f, -0.000024f, -0.000007f, + -0.000043f, -0.000003f, -0.000019f, +0.000004f, -0.000066f, -0.000113f, -0.000067f, +0.000020f, +0.000041f, -0.000011f, + +0.000074f, +0.000085f, +0.000029f, +0.000059f, +0.000008f, +0.000035f, -0.000044f, -0.000025f, +0.000022f, +0.000017f, + +0.000036f, -0.000065f, -0.000119f, +0.000042f, -0.000005f, -0.000070f + }, + { + +0.000932f, +0.005102f, -0.001977f, -0.000425f, +0.000609f, -0.001202f, +0.002022f, -0.000135f, -0.000902f, -0.000365f, + -0.000293f, -0.001009f, +0.000359f, -0.001431f, +0.001556f, -0.000124f, +0.000406f, +0.000798f, -0.000359f, -0.000150f, + +0.000091f, -0.000092f, +0.000169f, -0.000039f, +0.000326f, +0.000061f, -0.000726f, -0.000808f, -0.000035f, +0.000242f, + -0.000080f, +0.000251f, +0.000513f, +0.000473f, +0.000085f, +0.000225f, +0.000184f, -0.000026f, +0.000246f, -0.000656f, + +0.000009f, -0.000597f, -0.000153f, +0.000302f, +0.000492f, +0.000287f, +0.000189f, -0.000069f, +0.000094f, -0.000249f, + +0.000206f, +0.000156f, -0.000203f, -0.000036f, +0.000159f, +0.000307f, +0.000107f, -0.000089f, +0.000031f, -0.000066f, + +0.000053f, +0.000072f, -0.000026f, +0.000148f, +0.000085f, +0.000128f, -0.000015f, -0.000053f, -0.000007f, +0.000057f, + -0.000056f, -0.000032f, -0.000036f, -0.000012f, +0.000092f, +0.000071f, -0.000067f, -0.000051f, +0.000110f, +0.000080f, + -0.000007f, +0.000020f, +0.000116f, +0.000024f, -0.000020f, +0.000066f, -0.000045f, -0.000098f, +0.000028f, +0.000030f, + -0.000027f, +0.000026f, +0.000030f, +0.000006f, -0.000032f, +0.000002f + }, + { + +0.000204f, -0.000057f, +0.000762f, -0.000358f, +0.000058f, -0.000136f, -0.000131f, +0.000963f, +0.000485f, +0.000506f, + -0.000701f, +0.000126f, +0.001324f, -0.000178f, +0.007379f, -0.001539f, -0.000003f, -0.000127f, +0.000176f, +0.001674f, + +0.000753f, -0.000260f, +0.001085f, -0.000430f, -0.000642f, +0.000856f, -0.000189f, +0.001386f, -0.000583f, +0.000207f, + -0.000467f, -0.000015f, +0.000101f, -0.000058f, +0.000132f, +0.000442f, -0.000893f, +0.000028f, +0.000238f, -0.000005f, + -0.000608f, -0.000325f, -0.000081f, +0.000396f, -0.000045f, -0.000146f, +0.000195f, -0.000045f, -0.000082f, +0.000007f, + -0.000023f, -0.000038f, -0.000260f, +0.000062f, -0.000016f, +0.000091f, -0.000294f, +0.000009f, -0.000182f, -0.000320f, + -0.000057f, +0.000064f, +0.000009f, -0.000031f, +0.000018f, -0.000048f, +0.000272f, -0.000006f, -0.000125f, -0.000021f, + +0.000011f, -0.000055f, -0.000161f, +0.000016f, -0.000087f, +0.000071f, +0.000061f, -0.000091f, -0.000040f, -0.000048f, + +0.000081f, +0.000072f, +0.000089f, -0.000027f, -0.000065f, +0.000004f, -0.000056f, +0.000001f, +0.000075f, +0.000008f, + -0.000012f, +0.000036f, -0.000001f, -0.000043f, +0.000029f, +0.000030f + } + }, + { + { + -0.003601f, +0.043083f, -0.003184f, -0.002078f, +0.001345f, -0.000442f, +0.000214f, +0.000409f, -0.000110f, +0.000045f, + +0.000651f, -0.000218f, -0.000360f, +0.000587f, -0.001444f, +0.000565f, -0.000781f, -0.000486f, -0.000375f, +0.001081f, + +0.000279f, -0.000300f, -0.000011f, -0.000411f, -0.000033f, -0.000455f, -0.000122f, -0.000323f, +0.000337f, +0.000584f, + +0.000185f, -0.000461f, +0.000250f, -0.000361f, +0.000041f, -0.000236f, +0.000370f, -0.000015f, -0.000113f, -0.000458f, + -0.000033f, +0.000277f, -0.000145f, -0.000069f, -0.000087f, +0.000077f, -0.000113f, -0.000192f, +0.000359f, +0.000008f, + +0.000106f, +0.000023f, -0.000227f, +0.000196f, +0.000088f, -0.000122f, -0.000047f, -0.000111f, -0.000103f, +0.000007f, + +0.000203f, -0.000012f, -0.000066f, -0.000161f, +0.000002f, -0.000106f, +0.000051f, +0.000047f, -0.000040f, -0.000058f, + -0.000075f, +0.000001f, +0.000028f, +0.000004f, -0.000105f, -0.000138f, +0.000079f, -0.000018f, -0.000031f, +0.000092f, + +0.000058f, +0.000108f, +0.000006f, -0.000020f, -0.000042f, -0.000008f, +0.000063f, -0.000027f, +0.000064f, +0.000025f, + -0.000003f, -0.000008f, +0.000020f, -0.000005f, -0.000011f, +0.000018f + }, + { + -0.000378f, -0.003471f, +0.001888f, -0.000239f, +0.000499f, -0.000214f, -0.000437f, +0.000057f, +0.000273f, +0.000138f, + +0.000674f, +0.000486f, -0.000597f, -0.000522f, +0.003018f, +0.000802f, -0.000870f, +0.000166f, -0.001538f, -0.001009f, + +0.000193f, +0.001251f, +0.000113f, +0.000134f, -0.000493f, +0.000410f, -0.000466f, +0.000915f, +0.000083f, -0.000048f, + -0.000236f, -0.001625f, +0.000303f, +0.000130f, -0.000405f, +0.000662f, +0.000306f, +0.000349f, +0.000256f, -0.000392f, + +0.000021f, -0.000054f, +0.000482f, -0.000022f, -0.000166f, +0.000118f, +0.000001f, +0.000073f, -0.000063f, +0.000148f, + +0.000038f, -0.000102f, +0.000183f, +0.000234f, +0.000056f, -0.000226f, +0.000088f, +0.000101f, -0.000062f, -0.000044f, + +0.000093f, +0.000185f, +0.000031f, -0.000067f, -0.000000f, -0.000078f, +0.000031f, +0.000176f, -0.000002f, -0.000071f, + +0.000043f, +0.000033f, -0.000162f, -0.000075f, +0.000112f, +0.000034f, -0.000071f, -0.000072f, +0.000015f, +0.000130f, + +0.000008f, -0.000076f, +0.000018f, +0.000033f, -0.000002f, +0.000059f, +0.000043f, -0.000035f, +0.000042f, +0.000042f, + -0.000079f, -0.000024f, +0.000038f, +0.000059f, +0.000028f, -0.000026f + }, + { + -0.000808f, -0.012298f, +0.003068f, +0.001721f, +0.001245f, -0.000340f, +0.000158f, -0.000168f, -0.000485f, -0.000678f, + +0.000473f, +0.000418f, -0.000582f, +0.000722f, +0.000152f, +0.000721f, -0.000693f, -0.000379f, +0.000700f, -0.001099f, + -0.000882f, +0.000314f, -0.000397f, +0.000375f, +0.000568f, +0.000271f, -0.000196f, +0.000505f, -0.000524f, +0.000364f, + +0.000315f, -0.000271f, +0.000255f, -0.000026f, -0.000380f, -0.000044f, +0.000264f, -0.000192f, -0.000007f, -0.000267f, + -0.000314f, -0.000226f, -0.000173f, +0.000170f, -0.000053f, +0.000122f, -0.000115f, +0.000186f, +0.000110f, -0.000048f, + -0.000039f, +0.000343f, -0.000058f, -0.000058f, +0.000157f, +0.000122f, -0.000009f, -0.000078f, -0.000061f, -0.000086f, + +0.000017f, +0.000084f, +0.000015f, -0.000025f, +0.000000f, +0.000134f, +0.000019f, -0.000052f, +0.000053f, +0.000072f, + -0.000036f, -0.000054f, +0.000105f, -0.000032f, -0.000017f, -0.000056f, -0.000091f, +0.000020f, +0.000041f, +0.000007f, + -0.000003f, +0.000031f, +0.000022f, -0.000049f, +0.000027f, +0.000054f, +0.000040f, -0.000014f, -0.000038f, +0.000012f, + -0.000004f, -0.000068f, -0.000031f, +0.000002f, -0.000022f, +0.000009f + }, + { + -0.012139f, +0.034166f, +0.002717f, +0.000936f, -0.000559f, +0.000096f, -0.000052f, +0.000392f, +0.000026f, -0.000728f, + -0.000321f, -0.000282f, -0.000121f, -0.000139f, -0.000980f, -0.001248f, +0.000307f, -0.000178f, -0.000225f, -0.000056f, + -0.000036f, +0.000400f, +0.000393f, -0.000083f, +0.000128f, -0.000685f, -0.000156f, -0.000135f, -0.000256f, +0.000824f, + +0.000101f, -0.000046f, +0.000446f, +0.000040f, -0.000143f, -0.000522f, +0.000043f, +0.000161f, +0.000150f, -0.000125f, + -0.000104f, -0.000294f, +0.000346f, -0.000061f, +0.000034f, -0.000111f, +0.000359f, +0.000012f, -0.000010f, +0.000090f, + -0.000038f, -0.000026f, -0.000153f, +0.000211f, -0.000078f, +0.000105f, +0.000043f, +0.000239f, +0.000008f, -0.000017f, + +0.000026f, +0.000122f, +0.000115f, +0.000030f, +0.000172f, -0.000072f, +0.000066f, +0.000052f, -0.000072f, +0.000110f, + +0.000027f, -0.000175f, -0.000124f, -0.000015f, -0.000021f, +0.000005f, +0.000060f, -0.000014f, -0.000018f, +0.000046f, + +0.000088f, +0.000039f, -0.000020f, -0.000054f, +0.000011f, -0.000025f, +0.000025f, +0.000019f, -0.000090f, +0.000003f, + +0.000044f, +0.000007f, -0.000034f, +0.000017f, +0.000028f, -0.000005f + }, + { + +0.000794f, +0.000415f, -0.002334f, +0.000090f, +0.000339f, -0.000229f, -0.000116f, +0.000193f, +0.000162f, -0.000132f, + -0.000073f, -0.000248f, +0.000623f, -0.001283f, +0.003585f, -0.001421f, -0.001023f, +0.000981f, +0.004704f, -0.001401f, + -0.000215f, +0.000557f, +0.000626f, +0.001049f, -0.000285f, -0.000771f, -0.000538f, -0.001413f, -0.001109f, -0.000423f, + -0.000629f, +0.000777f, +0.000403f, -0.000207f, +0.000090f, -0.000255f, +0.000709f, +0.000522f, -0.000164f, +0.000107f, + -0.000061f, -0.000117f, +0.000383f, +0.000063f, +0.000027f, +0.000269f, -0.000111f, +0.000033f, +0.000241f, -0.000006f, + +0.000041f, -0.000130f, -0.000032f, +0.000066f, -0.000131f, -0.000024f, -0.000019f, +0.000098f, +0.000016f, +0.000047f, + +0.000098f, +0.000078f, -0.000067f, -0.000067f, +0.000199f, +0.000153f, +0.000088f, +0.000012f, -0.000077f, +0.000060f, + +0.000015f, -0.000061f, -0.000014f, -0.000023f, -0.000093f, +0.000001f, +0.000035f, +0.000035f, +0.000120f, +0.000111f, + +0.000062f, +0.000033f, -0.000138f, +0.000013f, +0.000039f, -0.000020f, +0.000041f, -0.000009f, -0.000017f, +0.000007f, + +0.000010f, +0.000020f, +0.000017f, -0.000042f, -0.000025f, +0.000053f + }, + { + -0.010354f, +0.055737f, +0.001437f, -0.001401f, -0.000367f, -0.000207f, +0.000048f, +0.001049f, -0.001250f, +0.000149f, + +0.001016f, -0.000125f, -0.000455f, +0.000652f, +0.001017f, -0.000392f, -0.000219f, -0.000084f, +0.000014f, -0.000409f, + +0.000169f, +0.000393f, -0.000265f, -0.000702f, -0.000239f, +0.000186f, +0.000086f, -0.000124f, -0.000163f, +0.000213f, + -0.000126f, -0.000162f, -0.000493f, -0.000085f, -0.000182f, -0.000091f, +0.000138f, -0.000033f, +0.000255f, -0.000061f, + +0.000303f, +0.000150f, -0.000245f, +0.000368f, -0.000322f, -0.000081f, -0.000095f, -0.000080f, -0.000305f, +0.000080f, + -0.000081f, -0.000093f, +0.000198f, +0.000164f, -0.000063f, -0.000174f, +0.000235f, +0.000190f, +0.000000f, -0.000090f, + -0.000047f, +0.000057f, +0.000160f, +0.000026f, -0.000013f, -0.000059f, +0.000016f, +0.000075f, -0.000021f, +0.000077f, + -0.000000f, +0.000095f, -0.000038f, -0.000022f, +0.000017f, -0.000041f, +0.000067f, +0.000018f, -0.000024f, -0.000019f, + -0.000039f, -0.000050f, -0.000120f, -0.000056f, +0.000054f, +0.000062f, +0.000029f, +0.000042f, +0.000038f, -0.000067f, + +0.000014f, +0.000014f, +0.000018f, -0.000013f, -0.000033f, +0.000019f + }, + { + -0.000538f, +0.000874f, +0.002336f, -0.000289f, -0.000014f, -0.000155f, -0.000062f, -0.000039f, +0.000166f, -0.000078f, + +0.000080f, +0.000134f, -0.000500f, -0.001871f, +0.000150f, +0.002302f, -0.002173f, -0.000118f, -0.000029f, -0.000403f, + -0.000544f, +0.000382f, -0.000891f, -0.001417f, -0.001095f, -0.000829f, +0.000266f, -0.000027f, -0.001986f, +0.000583f, + +0.000535f, +0.000167f, -0.000506f, +0.000579f, +0.000849f, +0.000217f, -0.000208f, +0.000049f, -0.000139f, +0.000291f, + +0.000471f, -0.000029f, -0.000127f, -0.000135f, -0.000175f, +0.000065f, +0.000035f, +0.000234f, -0.000177f, -0.000012f, + -0.000147f, -0.000021f, +0.000059f, +0.000077f, -0.000055f, +0.000093f, +0.000156f, +0.000142f, -0.000253f, -0.000100f, + -0.000029f, -0.000045f, -0.000114f, -0.000060f, +0.000058f, -0.000082f, +0.000010f, +0.000180f, +0.000027f, -0.000173f, + -0.000086f, +0.000060f, +0.000079f, -0.000017f, +0.000032f, +0.000027f, +0.000051f, +0.000050f, +0.000087f, -0.000019f, + -0.000012f, +0.000024f, +0.000027f, +0.000009f, -0.000013f, +0.000039f, -0.000029f, -0.000043f, +0.000002f, -0.000052f, + -0.000091f, -0.000068f, -0.000001f, +0.000028f, -0.000040f, -0.000004f + }, + { + +0.016875f, -0.009632f, -0.005220f, +0.001105f, +0.000042f, +0.000283f, +0.000034f, -0.000428f, +0.000010f, +0.000280f, + +0.000715f, -0.000028f, -0.000940f, -0.000264f, +0.001967f, -0.000058f, +0.000111f, -0.000463f, -0.000430f, +0.000745f, + -0.000200f, -0.000038f, +0.000233f, +0.000560f, -0.000320f, -0.000403f, +0.000306f, +0.000053f, -0.000493f, +0.000104f, + +0.000619f, -0.000143f, -0.000176f, +0.000163f, -0.000232f, -0.000065f, -0.000254f, +0.000369f, +0.000045f, +0.000147f, + -0.000015f, -0.000050f, -0.000079f, -0.000178f, -0.000070f, -0.000042f, -0.000066f, -0.000278f, -0.000225f, +0.000139f, + +0.000123f, +0.000026f, -0.000331f, -0.000166f, +0.000112f, +0.000094f, +0.000171f, +0.000107f, +0.000031f, -0.000094f, + -0.000165f, +0.000044f, +0.000019f, +0.000069f, -0.000044f, -0.000076f, +0.000063f, +0.000033f, -0.000079f, -0.000102f, + +0.000023f, -0.000009f, -0.000046f, +0.000131f, +0.000118f, -0.000099f, -0.000013f, +0.000128f, -0.000040f, +0.000005f, + +0.000030f, -0.000056f, -0.000055f, -0.000002f, +0.000007f, -0.000047f, +0.000039f, +0.000052f, -0.000006f, -0.000001f, + -0.000024f, -0.000008f, +0.000029f, +0.000035f, +0.000031f, -0.000002f + }, + { + -0.000767f, +0.000283f, +0.003241f, -0.000716f, +0.000319f, -0.000220f, -0.000004f, +0.000115f, +0.000117f, +0.000121f, + +0.000048f, -0.000269f, -0.000313f, +0.000022f, -0.005448f, +0.001947f, +0.000004f, -0.002444f, +0.000237f, -0.000050f, + -0.000266f, +0.000010f, +0.001157f, -0.000038f, -0.000863f, -0.000104f, +0.000231f, +0.000944f, -0.000682f, +0.000709f, + -0.000696f, -0.000947f, +0.000737f, -0.000335f, +0.000409f, +0.000162f, -0.000330f, +0.000056f, +0.000334f, +0.000019f, + +0.000295f, +0.000368f, -0.000106f, +0.000178f, +0.000091f, +0.000194f, -0.000027f, +0.000270f, +0.000010f, -0.000062f, + -0.000207f, -0.000041f, -0.000190f, +0.000070f, +0.000140f, -0.000097f, +0.000152f, +0.000076f, +0.000098f, -0.000040f, + -0.000066f, -0.000125f, +0.000105f, -0.000133f, -0.000230f, -0.000068f, -0.000143f, -0.000101f, +0.000076f, -0.000104f, + +0.000048f, -0.000109f, -0.000148f, +0.000005f, +0.000129f, -0.000005f, -0.000045f, +0.000011f, -0.000011f, +0.000006f, + +0.000028f, -0.000096f, -0.000074f, +0.000008f, +0.000019f, -0.000006f, +0.000060f, +0.000090f, +0.000008f, -0.000053f, + +0.000007f, +0.000011f, -0.000019f, +0.000022f, +0.000016f, +0.000025f + }, + { + +0.001219f, -0.001922f, -0.004324f, +0.000473f, +0.000142f, -0.000811f, +0.000060f, +0.000165f, -0.000277f, +0.000170f, + +0.000413f, -0.000013f, +0.000247f, -0.000502f, +0.000221f, -0.000056f, -0.000009f, +0.000387f, +0.000273f, -0.000362f, + -0.000392f, -0.000078f, -0.000239f, -0.000280f, +0.000261f, +0.000084f, +0.000099f, -0.000270f, +0.000297f, +0.000277f, + -0.000183f, +0.000275f, +0.000029f, +0.000446f, -0.000321f, +0.000241f, -0.000107f, +0.000261f, +0.000322f, +0.000005f, + +0.000203f, +0.000375f, +0.000174f, -0.000264f, +0.000100f, +0.000329f, +0.000298f, -0.000053f, -0.000069f, +0.000271f, + +0.000205f, -0.000042f, +0.000334f, +0.000088f, -0.000326f, -0.000142f, +0.000147f, -0.000022f, -0.000052f, -0.000075f, + -0.000090f, +0.000141f, -0.000036f, +0.000035f, +0.000011f, -0.000015f, +0.000054f, -0.000084f, -0.000030f, +0.000100f, + -0.000023f, -0.000045f, +0.000028f, +0.000060f, -0.000014f, -0.000004f, -0.000006f, +0.000019f, -0.000048f, +0.000051f, + -0.000079f, -0.000028f, +0.000039f, +0.000021f, +0.000005f, +0.000110f, +0.000070f, +0.000036f, +0.000072f, +0.000026f, + +0.000024f, -0.000007f, -0.000072f, -0.000016f, +0.000031f, +0.000048f + }, + { + -0.000474f, +0.007922f, -0.000185f, +0.001272f, +0.000118f, +0.000266f, +0.000350f, -0.000311f, -0.000167f, +0.000176f, + +0.000690f, -0.000432f, +0.000051f, +0.000383f, +0.001125f, +0.000580f, -0.000512f, -0.000696f, +0.000656f, +0.000910f, + -0.000705f, +0.000410f, +0.000890f, +0.000660f, +0.000101f, +0.000228f, +0.000151f, -0.000459f, +0.000055f, +0.000019f, + -0.000286f, -0.000048f, -0.000078f, -0.000298f, -0.000115f, +0.000119f, -0.000332f, -0.000310f, +0.000026f, -0.000090f, + +0.000184f, +0.000010f, +0.000338f, +0.000203f, -0.000100f, -0.000024f, -0.000058f, -0.000023f, +0.000000f, +0.000001f, + +0.000191f, +0.000146f, -0.000174f, -0.000189f, -0.000172f, +0.000066f, -0.000068f, +0.000076f, +0.000066f, +0.000033f, + +0.000033f, +0.000083f, -0.000168f, -0.000136f, +0.000070f, +0.000106f, -0.000070f, +0.000092f, +0.000118f, -0.000016f, + -0.000033f, -0.000056f, -0.000048f, +0.000027f, +0.000022f, -0.000011f, -0.000040f, -0.000148f, -0.000065f, +0.000061f, + -0.000041f, +0.000044f, +0.000043f, -0.000053f, -0.000075f, -0.000010f, -0.000039f, +0.000001f, -0.000039f, -0.000064f, + +0.000016f, -0.000000f, -0.000006f, +0.000009f, +0.000011f, +0.000030f + }, + { + +0.005705f, -0.007607f, -0.002038f, -0.001284f, +0.000194f, -0.000036f, -0.000700f, -0.000025f, -0.000789f, +0.000188f, + -0.000319f, -0.001334f, +0.000119f, -0.000394f, -0.000586f, -0.000008f, +0.000126f, -0.000038f, +0.000004f, +0.000383f, + -0.000311f, +0.000404f, +0.000061f, -0.000293f, +0.000011f, +0.000085f, -0.000098f, +0.000118f, -0.000313f, -0.000249f, + +0.000013f, +0.000324f, -0.000449f, -0.000115f, -0.000102f, -0.000267f, -0.000152f, -0.000172f, -0.000161f, +0.000288f, + +0.000019f, +0.000119f, -0.000214f, +0.000299f, -0.000114f, +0.000002f, -0.000306f, +0.000048f, +0.000065f, +0.000159f, + +0.000137f, +0.000139f, +0.000067f, +0.000027f, +0.000047f, +0.000027f, -0.000032f, +0.000104f, -0.000017f, -0.000085f, + +0.000082f, +0.000030f, -0.000114f, +0.000104f, +0.000058f, -0.000116f, -0.000083f, -0.000038f, -0.000129f, +0.000029f, + +0.000030f, -0.000049f, +0.000028f, +0.000068f, +0.000060f, +0.000021f, -0.000020f, -0.000018f, -0.000039f, -0.000016f, + -0.000012f, +0.000049f, +0.000090f, -0.000031f, +0.000051f, -0.000010f, -0.000060f, +0.000027f, -0.000023f, +0.000018f, + +0.000034f, +0.000030f, +0.000070f, -0.000019f, -0.000017f, +0.000022f + }, + { + -0.000195f, +0.000117f, -0.000352f, +0.000325f, +0.000215f, +0.000200f, +0.000180f, -0.000311f, +0.000122f, +0.000257f, + +0.000293f, +0.000123f, -0.000651f, +0.005004f, -0.002888f, +0.004277f, -0.000409f, +0.000018f, -0.000542f, -0.000555f, + +0.000804f, +0.000127f, -0.001059f, +0.000184f, -0.000191f, -0.000152f, -0.000227f, +0.000238f, +0.000299f, +0.000952f, + +0.000177f, -0.000335f, -0.000306f, -0.000352f, -0.000017f, -0.000411f, -0.000049f, +0.000274f, -0.000231f, +0.000380f, + -0.000256f, +0.000089f, +0.000042f, -0.000037f, -0.000197f, +0.000140f, +0.000168f, +0.000335f, -0.000011f, +0.000215f, + +0.000075f, +0.000199f, +0.000174f, -0.000073f, +0.000013f, +0.000249f, -0.000050f, -0.000098f, -0.000014f, -0.000105f, + -0.000271f, +0.000046f, +0.000156f, +0.000077f, +0.000048f, -0.000093f, +0.000016f, -0.000109f, -0.000014f, +0.000048f, + -0.000003f, -0.000046f, -0.000001f, -0.000052f, +0.000028f, +0.000142f, +0.000077f, -0.000006f, +0.000008f, +0.000005f, + -0.000062f, -0.000110f, -0.000041f, -0.000049f, -0.000026f, -0.000010f, +0.000012f, +0.000071f, -0.000051f, -0.000012f, + -0.000030f, +0.000003f, +0.000108f, +0.000004f, -0.000042f, +0.000058f + }, + { + -0.001336f, +0.006824f, -0.001141f, -0.002600f, -0.000058f, +0.000606f, +0.000205f, -0.000560f, -0.000137f, +0.000304f, + -0.000415f, -0.000272f, +0.000477f, -0.000333f, -0.000075f, -0.000529f, -0.001056f, +0.000016f, -0.000051f, +0.000098f, + -0.000251f, +0.000293f, +0.000382f, +0.000271f, +0.001006f, -0.000330f, -0.000206f, -0.000591f, +0.000686f, +0.000686f, + -0.000345f, -0.000081f, +0.000083f, -0.000293f, +0.000052f, +0.000245f, -0.000222f, -0.000250f, -0.000345f, -0.000021f, + +0.000221f, -0.000506f, +0.000125f, +0.000074f, -0.000038f, -0.000267f, -0.000276f, -0.000066f, +0.000097f, +0.000155f, + +0.000221f, -0.000275f, +0.000160f, +0.000104f, -0.000123f, -0.000106f, -0.000096f, +0.000008f, +0.000084f, -0.000147f, + +0.000106f, -0.000057f, -0.000059f, -0.000077f, -0.000098f, -0.000113f, -0.000122f, +0.000042f, -0.000016f, +0.000042f, + -0.000044f, +0.000050f, -0.000021f, +0.000002f, -0.000070f, -0.000056f, -0.000030f, +0.000095f, -0.000073f, -0.000105f, + -0.000026f, +0.000025f, -0.000058f, -0.000095f, +0.000013f, -0.000048f, -0.000050f, +0.000116f, +0.000024f, -0.000037f, + +0.000033f, +0.000005f, -0.000040f, -0.000021f, -0.000009f, +0.000031f + }, + { + -0.000111f, -0.000038f, -0.000711f, -0.000055f, +0.000195f, -0.000137f, +0.000102f, +0.000240f, +0.001094f, -0.000246f, + -0.000880f, +0.000246f, -0.000345f, +0.001021f, +0.015216f, +0.000707f, -0.002709f, -0.000753f, +0.000831f, -0.000277f, + -0.000413f, +0.001252f, +0.000115f, +0.000394f, +0.000721f, -0.000038f, +0.000041f, +0.000320f, +0.000041f, +0.000154f, + +0.000274f, -0.000381f, +0.000001f, +0.000474f, -0.000360f, -0.000063f, +0.000854f, -0.000103f, -0.000314f, +0.000163f, + -0.000034f, +0.000255f, +0.000272f, -0.000092f, -0.000093f, -0.000041f, -0.000128f, -0.000034f, +0.000128f, +0.000111f, + -0.000047f, +0.000167f, +0.000281f, +0.000066f, -0.000057f, -0.000099f, +0.000104f, -0.000021f, +0.000055f, +0.000246f, + +0.000262f, -0.000102f, -0.000063f, +0.000116f, +0.000104f, +0.000071f, -0.000185f, -0.000090f, +0.000104f, +0.000011f, + -0.000058f, -0.000032f, +0.000132f, +0.000032f, +0.000067f, +0.000032f, -0.000126f, +0.000055f, +0.000072f, +0.000057f, + -0.000046f, -0.000073f, -0.000069f, -0.000011f, +0.000077f, -0.000032f, +0.000032f, +0.000006f, -0.000044f, -0.000009f, + +0.000016f, -0.000035f, -0.000003f, +0.000033f, +0.000020f, -0.000038f + } + }, + { + { + +0.000513f, +0.056536f, -0.002765f, -0.004322f, +0.000111f, -0.000314f, +0.000241f, +0.000406f, -0.000137f, +0.000231f, + +0.000507f, -0.000561f, -0.000570f, +0.000282f, -0.001245f, +0.001177f, +0.000074f, +0.000361f, +0.000278f, +0.001478f, + +0.000081f, -0.000157f, -0.000162f, -0.000224f, +0.000252f, -0.000101f, -0.000065f, -0.000140f, +0.000440f, +0.000051f, + +0.000270f, -0.000072f, +0.000836f, +0.000213f, -0.000120f, +0.000083f, +0.000261f, -0.000156f, +0.000056f, -0.000256f, + +0.000028f, +0.000228f, -0.000132f, +0.000215f, +0.000148f, +0.000083f, -0.000014f, -0.000389f, +0.000181f, +0.000196f, + +0.000171f, +0.000062f, -0.000088f, +0.000042f, -0.000066f, -0.000174f, -0.000128f, -0.000112f, -0.000054f, +0.000112f, + +0.000058f, -0.000057f, -0.000011f, -0.000094f, +0.000056f, -0.000035f, +0.000137f, +0.000015f, -0.000069f, -0.000037f, + -0.000040f, +0.000052f, +0.000001f, -0.000040f, -0.000105f, -0.000081f, +0.000103f, -0.000044f, +0.000021f, +0.000093f, + +0.000050f, +0.000084f, -0.000017f, -0.000023f, -0.000060f, +0.000062f, +0.000044f, -0.000017f, +0.000076f, +0.000032f, + -0.000014f, +0.000006f, -0.000006f, -0.000016f, -0.000011f, +0.000019f + }, + { + +0.000272f, -0.004140f, +0.001449f, +0.000284f, +0.000337f, -0.000400f, -0.000529f, +0.000178f, +0.000121f, -0.000189f, + -0.000239f, -0.000179f, -0.000622f, -0.002216f, +0.000111f, -0.000958f, -0.001664f, +0.000543f, -0.000821f, -0.000015f, + -0.000102f, +0.001565f, +0.000368f, -0.000079f, -0.001249f, -0.000073f, +0.000219f, +0.001164f, -0.000402f, -0.000484f, + -0.000003f, -0.001004f, +0.000249f, -0.000129f, +0.000011f, +0.000293f, -0.000078f, +0.000223f, +0.000142f, -0.000520f, + +0.000345f, +0.000189f, +0.000458f, -0.000352f, -0.000244f, +0.000012f, +0.000080f, -0.000013f, +0.000002f, +0.000113f, + -0.000125f, -0.000084f, +0.000162f, +0.000198f, -0.000211f, -0.000169f, +0.000003f, -0.000085f, -0.000113f, +0.000105f, + +0.000231f, +0.000182f, +0.000006f, -0.000084f, +0.000064f, -0.000013f, +0.000113f, +0.000101f, -0.000017f, -0.000020f, + +0.000034f, -0.000018f, -0.000086f, -0.000038f, +0.000102f, -0.000022f, -0.000070f, -0.000071f, +0.000011f, +0.000102f, + -0.000031f, -0.000077f, +0.000027f, +0.000017f, +0.000008f, +0.000047f, +0.000015f, -0.000015f, +0.000074f, +0.000002f, + -0.000078f, +0.000010f, +0.000069f, +0.000057f, +0.000001f, -0.000038f + }, + { + +0.001103f, -0.016156f, -0.001573f, +0.002518f, +0.001232f, -0.000359f, +0.000063f, -0.000144f, -0.000340f, -0.000172f, + +0.000836f, -0.000021f, -0.000443f, +0.001074f, -0.000443f, +0.001347f, +0.000056f, -0.000027f, +0.000606f, +0.000204f, + -0.000694f, +0.000687f, +0.000252f, +0.000031f, +0.000011f, +0.000350f, -0.000129f, +0.000163f, -0.000960f, +0.000096f, + +0.000098f, -0.000319f, +0.000509f, +0.000213f, -0.000450f, +0.000306f, +0.000366f, -0.000176f, +0.000010f, -0.000275f, + -0.000169f, +0.000043f, -0.000248f, +0.000097f, +0.000205f, +0.000168f, -0.000135f, +0.000145f, +0.000096f, -0.000117f, + +0.000037f, +0.000282f, -0.000138f, -0.000077f, +0.000134f, -0.000009f, +0.000015f, -0.000053f, -0.000046f, -0.000033f, + +0.000114f, +0.000124f, -0.000004f, -0.000092f, +0.000023f, +0.000135f, -0.000027f, -0.000049f, +0.000112f, +0.000016f, + -0.000063f, +0.000019f, +0.000102f, -0.000100f, -0.000044f, -0.000063f, -0.000025f, +0.000060f, -0.000026f, -0.000037f, + +0.000001f, +0.000030f, -0.000024f, -0.000066f, +0.000022f, +0.000035f, +0.000033f, -0.000050f, -0.000022f, +0.000022f, + -0.000034f, -0.000072f, +0.000010f, -0.000024f, -0.000021f, +0.000023f + }, + { + +0.005644f, +0.052815f, -0.001840f, +0.001561f, +0.000647f, +0.000438f, +0.000329f, +0.000459f, -0.000001f, -0.000619f, + -0.000214f, +0.000065f, -0.000024f, -0.001011f, -0.000955f, +0.000044f, +0.000511f, -0.000621f, -0.000379f, -0.000228f, + -0.000167f, +0.000306f, -0.000124f, -0.000241f, +0.000339f, -0.000435f, +0.000168f, -0.000362f, -0.000000f, +0.000660f, + +0.000081f, +0.000019f, +0.000117f, -0.000419f, -0.000388f, -0.000777f, +0.000190f, +0.000083f, +0.000424f, +0.000562f, + -0.000062f, -0.000327f, +0.000436f, -0.000035f, -0.000029f, +0.000014f, +0.000230f, -0.000062f, -0.000031f, +0.000130f, + -0.000056f, -0.000112f, -0.000019f, +0.000195f, -0.000096f, +0.000000f, -0.000114f, +0.000165f, -0.000095f, -0.000028f, + +0.000022f, +0.000075f, +0.000059f, +0.000048f, +0.000143f, -0.000082f, +0.000125f, -0.000016f, -0.000056f, +0.000073f, + +0.000032f, -0.000161f, -0.000092f, +0.000002f, -0.000015f, +0.000052f, +0.000031f, -0.000025f, +0.000016f, +0.000076f, + +0.000068f, +0.000035f, -0.000042f, -0.000029f, +0.000028f, -0.000027f, +0.000038f, -0.000033f, -0.000069f, +0.000021f, + +0.000038f, -0.000010f, -0.000021f, +0.000026f, +0.000014f, -0.000016f + }, + { + -0.000418f, +0.001668f, +0.000149f, +0.000304f, +0.000076f, -0.000238f, +0.000073f, +0.000163f, +0.000128f, +0.000144f, + +0.000137f, -0.000123f, +0.001227f, -0.000146f, +0.003587f, -0.002657f, -0.000511f, +0.001998f, +0.000732f, -0.000842f, + +0.000339f, +0.000432f, +0.001045f, +0.000744f, -0.001147f, -0.000252f, +0.000619f, -0.000685f, +0.000614f, +0.000215f, + -0.000300f, +0.001142f, +0.000374f, -0.000134f, +0.000219f, -0.000492f, +0.000498f, +0.000347f, -0.000130f, +0.000195f, + -0.000001f, +0.000099f, +0.000377f, +0.000010f, +0.000104f, +0.000170f, +0.000018f, +0.000297f, +0.000191f, +0.000048f, + -0.000123f, -0.000242f, +0.000113f, -0.000034f, -0.000087f, +0.000071f, +0.000107f, +0.000195f, +0.000018f, +0.000054f, + +0.000085f, +0.000046f, -0.000030f, +0.000033f, +0.000247f, +0.000082f, +0.000017f, -0.000037f, -0.000041f, +0.000077f, + -0.000084f, -0.000048f, -0.000011f, -0.000014f, -0.000061f, +0.000066f, +0.000063f, +0.000070f, +0.000129f, +0.000056f, + +0.000018f, -0.000015f, -0.000100f, +0.000082f, +0.000015f, +0.000014f, +0.000038f, -0.000031f, -0.000002f, +0.000017f, + +0.000028f, +0.000033f, -0.000002f, -0.000047f, +0.000020f, +0.000051f + }, + { + +0.000858f, +0.068268f, -0.000401f, -0.001673f, -0.000382f, -0.000174f, +0.000142f, +0.000605f, -0.000866f, +0.000910f, + +0.000912f, -0.000446f, -0.000559f, -0.000242f, +0.000269f, -0.000259f, -0.000235f, +0.000074f, -0.000076f, -0.000113f, + +0.000453f, +0.000193f, -0.000633f, -0.000858f, +0.000063f, +0.000131f, +0.000062f, -0.000444f, -0.000166f, +0.000573f, + +0.000008f, -0.000155f, -0.000238f, +0.000186f, -0.000206f, -0.000168f, -0.000208f, -0.000442f, +0.000080f, +0.000006f, + +0.000072f, -0.000314f, -0.000301f, +0.000507f, -0.000230f, -0.000201f, -0.000207f, -0.000295f, -0.000211f, +0.000216f, + -0.000133f, +0.000105f, +0.000276f, +0.000094f, -0.000188f, -0.000070f, +0.000320f, +0.000095f, -0.000073f, -0.000144f, + -0.000089f, +0.000033f, +0.000203f, +0.000048f, -0.000109f, -0.000024f, +0.000081f, +0.000031f, -0.000027f, +0.000065f, + +0.000008f, +0.000069f, -0.000048f, +0.000007f, -0.000023f, +0.000013f, +0.000080f, -0.000001f, -0.000048f, -0.000012f, + -0.000046f, -0.000058f, -0.000101f, -0.000011f, +0.000061f, +0.000056f, -0.000002f, +0.000062f, -0.000022f, -0.000045f, + +0.000029f, +0.000028f, +0.000011f, -0.000048f, -0.000014f, +0.000022f + }, + { + -0.000196f, +0.001581f, +0.000974f, -0.000705f, +0.000014f, -0.000047f, +0.000214f, +0.000226f, +0.000199f, -0.000081f, + +0.000177f, +0.000208f, -0.000500f, -0.000724f, +0.001250f, +0.000468f, -0.002188f, +0.000078f, -0.000654f, -0.000399f, + +0.000372f, -0.000030f, +0.000026f, +0.000278f, -0.000680f, -0.001156f, -0.000569f, -0.000388f, -0.001142f, +0.000603f, + +0.000191f, -0.000137f, -0.000977f, +0.000928f, +0.000681f, +0.000067f, -0.000127f, +0.000247f, +0.000085f, +0.000338f, + +0.000036f, -0.000418f, -0.000032f, -0.000142f, +0.000149f, +0.000283f, -0.000042f, +0.000101f, -0.000119f, -0.000032f, + -0.000095f, -0.000017f, +0.000118f, +0.000075f, -0.000053f, -0.000006f, +0.000087f, +0.000010f, -0.000167f, -0.000054f, + -0.000087f, -0.000022f, -0.000053f, -0.000090f, -0.000003f, -0.000076f, +0.000118f, +0.000130f, -0.000070f, -0.000197f, + -0.000026f, +0.000086f, +0.000064f, +0.000038f, +0.000074f, +0.000010f, +0.000072f, +0.000067f, +0.000059f, -0.000057f, + +0.000017f, +0.000020f, -0.000006f, -0.000033f, -0.000016f, +0.000026f, -0.000049f, -0.000032f, -0.000015f, -0.000069f, + -0.000088f, -0.000034f, +0.000026f, +0.000001f, -0.000035f, -0.000004f + }, + { + -0.013430f, -0.045187f, +0.000180f, +0.001096f, +0.000325f, +0.000185f, -0.000837f, -0.000341f, -0.000019f, +0.000398f, + +0.000487f, -0.000987f, -0.000710f, +0.000050f, +0.000844f, -0.000889f, +0.000035f, -0.000477f, -0.000048f, +0.000825f, + -0.000769f, -0.000681f, -0.000601f, +0.000129f, -0.000715f, -0.000236f, -0.000113f, -0.000446f, -0.000728f, -0.000126f, + +0.000175f, -0.000217f, +0.000055f, +0.000499f, -0.000173f, -0.000172f, -0.000360f, +0.000620f, +0.000270f, +0.000130f, + -0.000080f, +0.000053f, -0.000087f, -0.000298f, +0.000338f, -0.000006f, -0.000113f, -0.000345f, -0.000075f, +0.000138f, + +0.000085f, -0.000032f, -0.000302f, -0.000009f, +0.000093f, +0.000092f, +0.000150f, +0.000064f, -0.000001f, -0.000064f, + -0.000089f, +0.000092f, +0.000022f, +0.000017f, -0.000074f, -0.000063f, +0.000031f, +0.000031f, -0.000039f, -0.000057f, + +0.000043f, +0.000010f, +0.000047f, +0.000165f, +0.000058f, -0.000105f, +0.000096f, +0.000093f, -0.000092f, +0.000026f, + +0.000034f, -0.000051f, +0.000003f, +0.000040f, -0.000007f, -0.000025f, +0.000052f, +0.000036f, +0.000011f, -0.000009f, + -0.000039f, +0.000002f, +0.000035f, +0.000042f, +0.000022f, -0.000030f + }, + { + -0.000349f, +0.001367f, +0.001579f, -0.000878f, +0.000039f, -0.000225f, +0.000056f, +0.000234f, +0.000115f, -0.000186f, + -0.000344f, -0.000119f, +0.000224f, +0.001370f, -0.005161f, -0.001728f, -0.001516f, -0.001132f, +0.000886f, +0.001805f, + +0.002248f, +0.000862f, +0.000324f, -0.000032f, -0.000771f, -0.000668f, -0.000309f, -0.000221f, -0.000891f, +0.001336f, + -0.000658f, -0.000287f, +0.000430f, -0.000523f, +0.000434f, +0.000005f, -0.000222f, +0.000399f, +0.000086f, +0.000156f, + +0.000410f, +0.000098f, -0.000163f, +0.000252f, +0.000155f, +0.000146f, -0.000010f, +0.000047f, +0.000083f, +0.000196f, + +0.000036f, +0.000006f, -0.000104f, +0.000072f, +0.000091f, -0.000161f, +0.000224f, +0.000088f, +0.000077f, -0.000017f, + -0.000111f, -0.000177f, -0.000061f, -0.000248f, -0.000120f, +0.000001f, -0.000121f, -0.000046f, +0.000143f, -0.000113f, + -0.000010f, -0.000113f, -0.000051f, +0.000123f, +0.000115f, -0.000071f, -0.000047f, +0.000029f, -0.000022f, +0.000025f, + +0.000008f, -0.000116f, -0.000025f, +0.000025f, +0.000023f, +0.000037f, +0.000094f, +0.000049f, -0.000026f, -0.000052f, + +0.000021f, -0.000017f, -0.000003f, +0.000030f, +0.000031f, +0.000034f + }, + { + -0.001782f, -0.001779f, +0.001497f, +0.001844f, +0.000449f, +0.000795f, +0.000929f, +0.000284f, +0.000330f, +0.000903f, + +0.000284f, -0.000249f, -0.000065f, -0.001047f, +0.000268f, -0.000081f, +0.001085f, +0.001292f, +0.000636f, -0.000365f, + -0.000164f, +0.000085f, +0.000071f, -0.000102f, +0.000220f, -0.000220f, +0.000084f, -0.000142f, +0.000125f, +0.000048f, + -0.000039f, +0.000247f, -0.000063f, +0.000714f, -0.000238f, +0.000194f, -0.000149f, +0.000002f, -0.000052f, +0.000103f, + +0.000201f, +0.000492f, +0.000010f, -0.000232f, +0.000416f, +0.000328f, +0.000058f, -0.000033f, +0.000055f, +0.000267f, + +0.000205f, -0.000025f, +0.000263f, +0.000003f, -0.000277f, -0.000031f, +0.000114f, -0.000064f, +0.000005f, -0.000092f, + -0.000015f, +0.000095f, -0.000022f, +0.000030f, -0.000092f, +0.000007f, +0.000025f, -0.000077f, +0.000058f, +0.000053f, + -0.000012f, -0.000013f, +0.000061f, +0.000020f, +0.000014f, -0.000009f, +0.000040f, -0.000059f, +0.000000f, +0.000007f, + -0.000109f, -0.000011f, +0.000077f, +0.000016f, +0.000054f, +0.000110f, +0.000054f, +0.000019f, +0.000068f, +0.000012f, + +0.000012f, -0.000031f, -0.000054f, +0.000003f, +0.000033f, +0.000042f + }, + { + +0.000721f, +0.007490f, -0.001892f, +0.000313f, +0.000346f, +0.000344f, -0.000200f, -0.000746f, +0.000096f, +0.000485f, + +0.000668f, -0.000597f, +0.000231f, -0.000332f, +0.000665f, +0.000261f, -0.000613f, -0.000534f, +0.000091f, -0.001161f, + -0.001406f, -0.000281f, +0.000183f, +0.000101f, -0.000291f, +0.000316f, -0.000193f, -0.000246f, +0.000089f, -0.000066f, + +0.000026f, +0.000020f, -0.000210f, -0.000149f, +0.000302f, +0.000063f, -0.000470f, -0.000250f, -0.000055f, -0.000132f, + -0.000084f, -0.000038f, +0.000225f, +0.000007f, -0.000092f, +0.000078f, -0.000101f, -0.000025f, +0.000153f, +0.000100f, + +0.000114f, +0.000044f, -0.000251f, -0.000186f, -0.000087f, +0.000021f, +0.000045f, +0.000136f, +0.000019f, -0.000005f, + +0.000122f, +0.000038f, -0.000190f, -0.000076f, +0.000106f, -0.000005f, +0.000047f, +0.000143f, +0.000021f, -0.000022f, + -0.000060f, -0.000062f, -0.000014f, +0.000057f, +0.000014f, -0.000046f, -0.000041f, -0.000133f, -0.000001f, +0.000040f, + -0.000028f, +0.000070f, +0.000033f, -0.000102f, -0.000072f, -0.000003f, -0.000045f, +0.000014f, -0.000051f, -0.000039f, + +0.000021f, -0.000019f, -0.000011f, +0.000004f, +0.000034f, -0.000011f + }, + { + -0.004348f, -0.021608f, -0.000911f, -0.000195f, +0.000642f, -0.000394f, -0.000037f, +0.000741f, -0.000315f, +0.000134f, + -0.000542f, -0.000674f, +0.000101f, -0.000187f, -0.000582f, -0.000212f, +0.000256f, -0.000300f, +0.000133f, +0.000290f, + -0.000143f, +0.000511f, +0.000056f, -0.000306f, +0.000316f, +0.000079f, +0.000179f, +0.000199f, +0.000133f, -0.000134f, + -0.000051f, -0.000172f, -0.000646f, +0.000104f, -0.000326f, -0.000278f, -0.000441f, -0.000384f, -0.000095f, +0.000295f, + +0.000095f, -0.000031f, -0.000433f, -0.000006f, -0.000253f, -0.000122f, -0.000196f, +0.000112f, +0.000087f, +0.000111f, + +0.000149f, -0.000032f, +0.000157f, -0.000134f, -0.000013f, -0.000008f, -0.000046f, +0.000046f, -0.000132f, +0.000013f, + +0.000194f, -0.000053f, -0.000102f, +0.000146f, -0.000040f, -0.000088f, -0.000069f, -0.000053f, -0.000067f, +0.000150f, + -0.000008f, -0.000047f, +0.000032f, +0.000068f, +0.000065f, -0.000010f, -0.000021f, -0.000033f, -0.000042f, -0.000001f, + +0.000017f, +0.000085f, +0.000046f, -0.000028f, +0.000057f, -0.000044f, -0.000020f, +0.000013f, -0.000021f, +0.000034f, + +0.000028f, +0.000053f, +0.000053f, -0.000027f, -0.000006f, +0.000037f + }, + { + +0.000234f, -0.000057f, -0.000768f, +0.000800f, +0.000156f, +0.000268f, -0.000070f, -0.000417f, -0.000017f, +0.000196f, + +0.000030f, -0.000592f, -0.002493f, +0.003631f, -0.000581f, +0.003327f, -0.001538f, -0.000320f, +0.000970f, +0.000427f, + -0.002064f, +0.000111f, -0.001021f, -0.000325f, +0.000181f, +0.000390f, +0.000195f, +0.000365f, +0.000299f, +0.001021f, + -0.000964f, -0.000461f, -0.000423f, -0.000335f, -0.000022f, -0.000466f, +0.000181f, -0.000002f, -0.000217f, +0.000318f, + -0.000134f, +0.000310f, -0.000008f, -0.000057f, -0.000202f, +0.000004f, +0.000117f, +0.000185f, -0.000169f, +0.000123f, + +0.000064f, +0.000250f, +0.000072f, -0.000135f, +0.000060f, +0.000182f, -0.000150f, -0.000041f, +0.000002f, -0.000215f, + -0.000209f, +0.000195f, +0.000123f, -0.000012f, -0.000054f, -0.000073f, +0.000043f, -0.000143f, +0.000075f, +0.000041f, + -0.000007f, -0.000060f, +0.000066f, -0.000018f, +0.000068f, +0.000115f, +0.000049f, -0.000041f, +0.000008f, +0.000034f, + -0.000083f, -0.000109f, -0.000037f, -0.000045f, -0.000005f, -0.000023f, +0.000050f, +0.000034f, -0.000037f, -0.000015f, + -0.000034f, +0.000054f, +0.000112f, -0.000033f, +0.000008f, +0.000061f + }, + { + +0.001021f, +0.009273f, -0.000757f, -0.001584f, -0.000064f, +0.000593f, -0.000211f, +0.000217f, +0.000205f, +0.000021f, + +0.000101f, +0.000140f, -0.000158f, -0.000066f, -0.000125f, -0.000894f, -0.000833f, +0.000069f, +0.000181f, +0.000202f, + -0.000338f, +0.000288f, +0.000151f, +0.000441f, +0.001035f, -0.000240f, +0.000038f, -0.000334f, +0.000879f, +0.000598f, + -0.000241f, -0.000304f, +0.000095f, -0.000260f, -0.000177f, -0.000052f, -0.000170f, -0.000191f, -0.000166f, +0.000050f, + -0.000147f, -0.000220f, +0.000073f, -0.000237f, -0.000142f, -0.000352f, -0.000333f, -0.000003f, +0.000072f, +0.000306f, + -0.000037f, -0.000144f, +0.000276f, +0.000060f, -0.000215f, -0.000213f, -0.000054f, +0.000110f, +0.000029f, -0.000006f, + +0.000077f, -0.000066f, -0.000028f, -0.000121f, -0.000043f, -0.000092f, -0.000055f, +0.000039f, +0.000019f, -0.000002f, + +0.000030f, +0.000038f, -0.000009f, -0.000026f, -0.000077f, -0.000055f, +0.000022f, +0.000049f, -0.000118f, -0.000076f, + +0.000016f, +0.000022f, -0.000080f, -0.000060f, +0.000008f, -0.000057f, +0.000014f, +0.000106f, -0.000016f, -0.000021f, + +0.000026f, -0.000020f, -0.000035f, -0.000015f, +0.000025f, +0.000023f + }, + { + +0.000402f, -0.001495f, -0.001884f, +0.000316f, +0.000187f, -0.000004f, +0.000133f, -0.000198f, +0.000779f, -0.000423f, + -0.000383f, -0.000053f, -0.000099f, -0.006940f, +0.005274f, +0.003584f, -0.001893f, -0.001726f, -0.000507f, -0.000222f, + -0.000317f, +0.000845f, +0.000112f, +0.000691f, +0.000712f, +0.000036f, +0.000573f, +0.000641f, +0.000972f, +0.000666f, + +0.000079f, -0.000058f, +0.000220f, +0.000307f, -0.000486f, +0.000185f, +0.000772f, -0.000150f, +0.000058f, -0.000076f, + +0.000320f, +0.000493f, +0.000083f, -0.000481f, +0.000055f, -0.000018f, -0.000238f, -0.000189f, +0.000001f, +0.000028f, + -0.000145f, +0.000179f, +0.000289f, -0.000047f, +0.000034f, -0.000054f, +0.000176f, +0.000012f, +0.000210f, +0.000281f, + +0.000139f, -0.000159f, -0.000045f, +0.000121f, +0.000038f, -0.000006f, -0.000229f, +0.000004f, +0.000073f, +0.000024f, + -0.000057f, +0.000039f, +0.000148f, -0.000018f, +0.000057f, -0.000063f, -0.000064f, +0.000060f, +0.000025f, +0.000003f, + -0.000087f, -0.000061f, -0.000062f, +0.000037f, +0.000070f, -0.000007f, +0.000039f, -0.000016f, -0.000072f, -0.000008f, + +0.000005f, -0.000043f, +0.000015f, +0.000038f, -0.000011f, -0.000042f + } + } +}; + +const float rightBRIRReal[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]= +{ + { + { + -0.002626f, -0.091984f, +0.112454f, +0.032889f, -0.018787f, +0.020135f, -0.040166f, -0.046445f, -0.039117f, +0.013418f, + +0.017182f, +0.006263f, +0.051753f, +0.017991f, -0.017273f, -0.014571f, +0.004824f, +0.045673f, +0.002516f, -0.028876f, + -0.018614f, -0.000233f, -0.014210f, -0.000345f, -0.033314f, -0.000234f, -0.008287f, +0.014615f, +0.002657f, +0.041244f, + +0.007988f, +0.000967f, -0.016643f, +0.002161f, +0.018013f, -0.005292f, -0.019658f, -0.004553f, +0.015985f, +0.024332f, + +0.012325f, -0.028393f, -0.036958f, +0.000012f, +0.014259f, +0.004401f, -0.001464f, -0.006581f, +0.006742f, -0.020979f, + -0.003024f, +0.005075f, +0.001263f, +0.003405f, +0.001322f, +0.008734f, +0.016774f, +0.016192f, +0.004745f, -0.003023f, + -0.001688f, -0.000306f, +0.000506f, -0.010260f, -0.007314f, -0.009882f, -0.012185f, -0.022195f, -0.005114f, -0.001018f, + +0.009550f, +0.008692f, +0.008496f, +0.004482f, +0.011601f, +0.010002f, +0.006993f, +0.004236f, +0.002123f, -0.001852f, + +0.000104f, -0.005423f, -0.004225f, -0.008126f, -0.009280f, -0.004170f, -0.001537f, -0.004997f, -0.008491f, +0.005719f, + +0.006197f, +0.003095f, +0.000349f, +0.000155f, +0.003755f, +0.002206f + }, + { + +0.004919f, -0.095386f, +0.124053f, -0.015697f, +0.035913f, -0.018521f, -0.036348f, -0.052516f, -0.013161f, +0.009784f, + +0.008901f, +0.036876f, +0.038571f, +0.004469f, -0.025103f, +0.016424f, -0.009310f, +0.049941f, -0.022953f, -0.022712f, + +0.003293f, -0.027499f, -0.015957f, -0.003968f, -0.007109f, -0.014544f, +0.000560f, +0.031722f, +0.010526f, +0.006277f, + +0.000365f, -0.005303f, -0.007273f, +0.008598f, +0.024339f, +0.006596f, -0.022474f, -0.005834f, +0.010760f, +0.013438f, + +0.000540f, -0.020743f, -0.009388f, +0.007212f, -0.006048f, -0.015220f, +0.009370f, +0.004605f, -0.001744f, -0.009482f, + -0.008456f, -0.002932f, +0.003339f, +0.002680f, +0.000756f, +0.019608f, +0.011465f, +0.009581f, +0.006395f, +0.010447f, + -0.000806f, -0.005562f, -0.007976f, -0.004493f, -0.011419f, -0.015257f, -0.015816f, -0.017768f, -0.003138f, +0.001517f, + +0.001753f, +0.009699f, +0.013487f, +0.010184f, +0.017604f, +0.011297f, +0.008167f, +0.006076f, -0.003928f, -0.009072f, + -0.003002f, -0.005302f, -0.008729f, -0.012691f, -0.005865f, +0.000469f, -0.002336f, -0.002416f, +0.001988f, +0.001768f, + +0.006487f, +0.002197f, -0.001045f, +0.003595f, -0.000533f, -0.000087f + }, + { + +0.002371f, -0.102239f, +0.130602f, -0.012847f, +0.031526f, -0.001903f, -0.067157f, -0.018273f, +0.003170f, -0.025677f, + +0.010545f, +0.020547f, +0.038030f, +0.001859f, +0.009985f, +0.008685f, -0.011709f, +0.009396f, +0.002348f, -0.001855f, + +0.007032f, +0.006271f, -0.024756f, -0.023850f, -0.032530f, -0.026169f, -0.038805f, +0.018433f, +0.043789f, +0.056149f, + +0.008966f, -0.000807f, +0.013400f, -0.004701f, -0.015611f, -0.007087f, +0.005971f, -0.004905f, -0.013002f, -0.001660f, + +0.025840f, +0.002527f, -0.015595f, -0.010920f, +0.003142f, +0.003172f, +0.000238f, -0.022082f, -0.017089f, -0.007475f, + -0.002722f, +0.011160f, +0.015255f, +0.003771f, +0.014825f, -0.000794f, -0.009696f, +0.017684f, +0.032232f, +0.016622f, + -0.003140f, -0.007946f, -0.012051f, -0.002400f, -0.011365f, -0.019873f, -0.011785f, -0.022991f, -0.012280f, -0.015610f, + -0.001900f, +0.015175f, +0.011841f, +0.014766f, +0.018579f, +0.015310f, +0.017258f, +0.010536f, +0.005214f, -0.000988f, + -0.009193f, -0.010375f, -0.011902f, -0.005221f, -0.006926f, -0.010096f, -0.009423f, +0.001378f, +0.010446f, +0.003376f, + -0.003868f, +0.001471f, -0.001449f, -0.003910f, -0.005467f, -0.003336f + }, + { + +0.000564f, -0.066587f, +0.087062f, +0.026248f, -0.024360f, +0.015070f, -0.024941f, -0.024942f, -0.043150f, -0.032055f, + +0.040954f, +0.018554f, +0.062695f, +0.004183f, +0.004934f, -0.024908f, -0.038268f, +0.026678f, +0.016424f, -0.006447f, + -0.001552f, -0.020931f, -0.019639f, +0.011155f, +0.021935f, -0.029200f, -0.023702f, +0.022973f, +0.012058f, +0.011795f, + -0.007980f, +0.005958f, +0.013033f, -0.017547f, +0.001049f, +0.007811f, +0.003803f, +0.000334f, +0.001290f, -0.002987f, + +0.007679f, -0.012197f, -0.012133f, +0.007014f, -0.006724f, -0.004298f, -0.001449f, +0.009421f, -0.000027f, -0.010373f, + +0.014766f, +0.004202f, -0.009704f, +0.000081f, -0.000714f, +0.003343f, +0.004317f, +0.000603f, +0.006223f, +0.000140f, + -0.005321f, -0.003893f, +0.005639f, +0.000074f, -0.007684f, -0.003903f, +0.000882f, +0.000788f, -0.012462f, -0.004038f, + +0.006968f, +0.006532f, +0.005018f, +0.005665f, +0.000488f, +0.001809f, -0.004227f, +0.005507f, +0.001594f, -0.004166f, + -0.001945f, +0.000937f, -0.000895f, -0.002800f, -0.001256f, -0.000284f, -0.004216f, -0.005711f, +0.001721f, +0.002112f, + -0.000916f, +0.000115f, +0.000567f, +0.007798f, +0.002932f, +0.002671f + }, + { + +0.001666f, -0.041376f, +0.097623f, -0.052418f, +0.036112f, -0.012835f, -0.024260f, -0.038437f, -0.026326f, -0.023128f, + +0.040447f, +0.036446f, +0.039993f, +0.018840f, -0.012233f, -0.011276f, -0.029095f, +0.030939f, -0.015488f, -0.000699f, + -0.000699f, -0.038556f, -0.035968f, +0.056013f, +0.015707f, -0.041508f, -0.012167f, +0.027488f, +0.040874f, -0.008169f, + -0.024412f, +0.014149f, -0.011409f, -0.010785f, +0.012658f, -0.003709f, -0.007668f, +0.023531f, +0.005853f, +0.001764f, + -0.001855f, -0.011050f, -0.007934f, +0.010609f, -0.001228f, -0.017845f, -0.013191f, +0.002377f, +0.022763f, +0.001753f, + -0.006159f, +0.002132f, -0.011970f, +0.008922f, +0.004841f, -0.008873f, +0.011393f, +0.008069f, +0.003166f, +0.000949f, + -0.013549f, +0.002975f, +0.004332f, -0.003866f, -0.003245f, -0.011883f, -0.008549f, -0.004174f, +0.005358f, -0.002642f, + +0.004272f, +0.005506f, +0.012704f, +0.006268f, +0.007150f, +0.004407f, -0.001985f, -0.005593f, -0.003597f, -0.009715f, + -0.004237f, +0.000923f, -0.001200f, -0.000261f, +0.000253f, +0.000017f, -0.004304f, -0.001286f, +0.002442f, +0.002595f, + -0.001585f, +0.001289f, -0.000935f, +0.002463f, +0.002901f, +0.004676f + }, + { + -0.004050f, -0.073050f, +0.096420f, +0.040655f, -0.036664f, +0.017952f, -0.020075f, -0.045128f, -0.037587f, +0.001975f, + +0.002725f, -0.003929f, +0.046383f, +0.083217f, +0.005472f, +0.016851f, -0.074807f, -0.020715f, -0.003260f, +0.022054f, + -0.015679f, -0.043455f, -0.032602f, +0.073273f, +0.011045f, +0.025909f, -0.034716f, -0.014683f, -0.001407f, -0.011081f, + +0.004575f, +0.060003f, +0.005990f, -0.018629f, -0.022468f, -0.010518f, +0.008302f, +0.012123f, -0.000264f, -0.008743f, + -0.034883f, +0.025522f, +0.013887f, -0.019726f, -0.014578f, +0.006546f, +0.015123f, +0.001403f, +0.008514f, +0.007104f, + +0.006983f, -0.000170f, +0.011973f, -0.001818f, -0.006791f, -0.014751f, -0.019580f, -0.009661f, +0.001487f, -0.001793f, + -0.007205f, -0.001120f, +0.004357f, +0.013158f, +0.011712f, +0.005776f, -0.005371f, -0.001393f, +0.004069f, +0.009914f, + +0.002459f, +0.010826f, -0.001358f, -0.001234f, -0.007199f, -0.005368f, -0.012194f, -0.009313f, -0.005590f, -0.000329f, + -0.005369f, +0.005234f, +0.010834f, +0.006705f, +0.004616f, -0.002623f, -0.008596f, -0.002714f, +0.001302f, +0.004940f, + +0.004725f, +0.005621f, +0.002327f, -0.000822f, -0.002757f, +0.000967f + }, + { + +0.001269f, -0.038460f, +0.104052f, -0.069352f, +0.049874f, -0.022910f, -0.029584f, -0.031089f, -0.030876f, +0.004071f, + -0.005977f, +0.020708f, +0.094485f, +0.029371f, +0.019354f, -0.030412f, -0.070395f, -0.011234f, +0.030981f, +0.017226f, + -0.041039f, -0.045879f, +0.002071f, +0.027306f, +0.021226f, +0.026577f, -0.016963f, -0.011802f, +0.003393f, -0.004777f, + -0.006079f, +0.039185f, +0.019401f, -0.029855f, -0.025531f, +0.011340f, +0.010572f, -0.007136f, -0.003117f, -0.019577f, + -0.010488f, +0.016309f, +0.009123f, +0.001297f, -0.002883f, -0.002108f, +0.011125f, -0.007347f, -0.000416f, +0.014537f, + +0.014730f, +0.001136f, +0.004673f, +0.000268f, -0.013320f, -0.023244f, -0.011374f, -0.004133f, +0.002617f, -0.011766f, + -0.002675f, +0.007823f, +0.010544f, +0.003291f, +0.006354f, +0.006199f, -0.001065f, -0.003185f, +0.007126f, +0.003557f, + +0.008914f, +0.008229f, -0.002392f, -0.000366f, -0.011420f, -0.006384f, -0.005386f, -0.007969f, -0.004933f, -0.003720f, + -0.002352f, +0.005145f, +0.004786f, +0.006877f, +0.002937f, +0.000685f, -0.004972f, -0.004256f, +0.001242f, +0.005907f, + -0.000379f, +0.002987f, +0.004985f, -0.002592f, +0.000295f, -0.003449f + }, + { + -0.004157f, -0.060323f, +0.083203f, +0.039794f, -0.036717f, +0.020897f, -0.025007f, -0.034272f, -0.031072f, -0.024760f, + -0.000998f, +0.022314f, +0.070542f, +0.049464f, -0.038618f, +0.019768f, -0.036649f, +0.029468f, +0.010225f, -0.047899f, + -0.027133f, -0.018283f, -0.014402f, -0.027981f, +0.067339f, +0.068939f, -0.016976f, -0.070859f, +0.021392f, -0.014830f, + +0.017421f, +0.030413f, +0.021651f, -0.006659f, -0.025694f, -0.001340f, +0.002116f, -0.003434f, -0.017647f, +0.002407f, + -0.018175f, -0.009812f, +0.013525f, +0.014872f, -0.003068f, -0.006386f, -0.001761f, +0.026296f, +0.010537f, -0.007237f, + -0.003080f, +0.020031f, +0.022122f, -0.005348f, -0.017106f, -0.014774f, -0.018287f, -0.028999f, -0.010723f, +0.012706f, + -0.005548f, -0.004651f, +0.009074f, +0.010528f, +0.013573f, +0.018056f, +0.014532f, -0.010693f, -0.010059f, +0.013080f, + +0.011388f, +0.004481f, -0.003305f, -0.005373f, -0.008468f, -0.004419f, -0.018445f, -0.018167f, -0.004965f, +0.002231f, + +0.002270f, +0.009652f, +0.007305f, +0.009093f, +0.002598f, -0.001868f, -0.007371f, -0.004179f, +0.007021f, +0.011871f, + +0.004523f, +0.006646f, -0.000097f, -0.007227f, -0.006826f, -0.002948f + }, + { + +0.000941f, -0.044094f, +0.109804f, -0.073937f, +0.055858f, -0.020020f, -0.035497f, -0.037051f, -0.023878f, +0.000226f, + -0.009250f, +0.061056f, +0.070502f, +0.009437f, -0.009815f, -0.008946f, -0.024591f, +0.032256f, -0.031037f, -0.032700f, + -0.024210f, +0.010421f, -0.028830f, -0.021243f, +0.079933f, +0.010727f, +0.006359f, -0.055370f, +0.013295f, +0.029021f, + +0.026940f, -0.016967f, -0.013493f, +0.026264f, -0.015633f, -0.009662f, +0.007789f, -0.004763f, -0.021226f, -0.028899f, + +0.002391f, +0.007813f, +0.003190f, +0.021845f, -0.005564f, -0.003680f, +0.010593f, +0.012747f, +0.006321f, +0.005903f, + -0.002617f, +0.009340f, +0.016941f, +0.008451f, -0.024435f, -0.017691f, -0.025645f, -0.031341f, -0.008820f, +0.003859f, + +0.004534f, +0.011937f, +0.011547f, +0.004280f, +0.003822f, +0.021157f, +0.006229f, -0.005379f, +0.003404f, +0.003844f, + +0.013751f, +0.004010f, +0.000249f, -0.013736f, -0.016171f, -0.002333f, -0.011896f, -0.008191f, -0.006236f, -0.001770f, + +0.006106f, +0.007203f, +0.005697f, +0.004779f, +0.002075f, -0.002754f, -0.003636f, -0.000180f, +0.002136f, +0.010256f, + +0.005555f, -0.000734f, +0.001710f, -0.002561f, -0.003573f, -0.003050f + }, + { + +0.002190f, -0.089866f, +0.114820f, +0.027895f, -0.010424f, -0.065978f, +0.002761f, +0.007385f, +0.016021f, -0.038197f, + -0.017028f, +0.035990f, +0.008253f, -0.019622f, +0.012206f, +0.027197f, -0.003262f, -0.011867f, +0.038914f, -0.009334f, + +0.028961f, +0.002318f, -0.024548f, -0.028802f, -0.052649f, -0.025898f, +0.008610f, +0.000557f, +0.022862f, +0.020252f, + +0.010404f, +0.017997f, -0.002086f, -0.015251f, +0.017789f, +0.000507f, -0.003808f, +0.006473f, +0.022842f, +0.001650f, + -0.012254f, -0.030566f, -0.024494f, -0.009148f, +0.018401f, +0.007228f, +0.034694f, -0.000505f, +0.004019f, -0.033861f, + -0.026367f, +0.003587f, -0.000949f, +0.012101f, +0.013697f, +0.017073f, +0.003288f, -0.013361f, -0.002429f, -0.008061f, + -0.005454f, +0.014690f, +0.018759f, +0.006268f, +0.000432f, -0.009994f, -0.009049f, -0.005162f, -0.008237f, -0.009102f, + -0.005555f, -0.007982f, -0.004440f, -0.000137f, +0.014733f, +0.011790f, +0.009120f, +0.004697f, +0.008027f, +0.008908f, + +0.000566f, -0.007040f, -0.004159f, -0.003113f, -0.001064f, -0.005748f, -0.008081f, -0.005662f, -0.010267f, +0.000977f, + +0.003994f, +0.000701f, +0.005608f, +0.003190f, +0.002403f, -0.002453f + }, + { + +0.002988f, -0.049390f, +0.099889f, -0.013724f, -0.018414f, -0.089835f, +0.068462f, -0.001002f, -0.005412f, -0.021757f, + -0.003411f, +0.049304f, -0.006413f, -0.021428f, +0.034330f, -0.025512f, +0.010371f, -0.006968f, +0.029931f, -0.025688f, + +0.014086f, -0.017538f, -0.020421f, -0.014991f, -0.037334f, +0.034980f, +0.009581f, +0.025207f, -0.002760f, +0.042903f, + -0.045553f, +0.016406f, -0.010670f, +0.008019f, +0.018439f, -0.007156f, -0.004478f, -0.000203f, -0.007345f, -0.012330f, + -0.015364f, -0.014996f, -0.004558f, +0.009168f, +0.019567f, +0.019055f, +0.023773f, -0.006824f, -0.018919f, +0.003844f, + -0.034060f, -0.016853f, +0.020352f, +0.017607f, +0.006138f, +0.012604f, -0.001888f, +0.000635f, -0.014635f, -0.002884f, + -0.003097f, +0.002616f, +0.004431f, +0.005792f, -0.012535f, -0.009041f, -0.003033f, +0.002739f, +0.000431f, +0.006339f, + +0.001078f, +0.001648f, -0.004795f, +0.001085f, +0.008090f, +0.004383f, +0.003342f, +0.001445f, +0.002241f, +0.000329f, + -0.002384f, -0.006953f, -0.009799f, -0.005643f, +0.003041f, -0.002914f, +0.001954f, +0.000433f, -0.002751f, +0.005194f, + +0.005162f, +0.001823f, +0.004406f, +0.001330f, -0.002383f, -0.002361f + }, + { + +0.000436f, -0.087446f, +0.121313f, +0.024718f, -0.025816f, -0.044646f, -0.009521f, +0.037450f, -0.023468f, -0.010725f, + -0.083993f, +0.067398f, +0.019467f, +0.014747f, +0.067784f, +0.008986f, -0.047529f, -0.029258f, +0.012877f, -0.042138f, + +0.014017f, -0.001170f, +0.001656f, +0.027947f, -0.037599f, +0.027201f, +0.013888f, -0.011305f, -0.025074f, -0.013492f, + +0.025294f, +0.009986f, +0.015165f, +0.008862f, -0.025397f, -0.031433f, +0.004222f, -0.000681f, +0.005335f, -0.009622f, + +0.010093f, +0.026943f, +0.002413f, -0.001957f, +0.019931f, +0.008270f, +0.000297f, +0.000053f, +0.002812f, +0.001075f, + -0.031715f, -0.023720f, -0.004165f, -0.011659f, -0.012853f, -0.013113f, +0.007493f, +0.010608f, +0.007707f, +0.035684f, + +0.013493f, +0.002546f, -0.014085f, -0.002349f, +0.005312f, -0.004030f, -0.012415f, +0.014143f, +0.015080f, -0.000651f, + -0.005964f, +0.001450f, +0.003833f, -0.007555f, -0.018156f, -0.006858f, -0.012725f, -0.007952f, -0.002141f, +0.005255f, + +0.002882f, +0.002468f, +0.004662f, +0.011014f, +0.006481f, +0.010711f, +0.012227f, +0.006496f, -0.001234f, -0.002674f, + -0.002832f, -0.009746f, -0.012441f, -0.008285f, -0.008948f, -0.004024f + }, + { + -0.007397f, -0.017761f, +0.081072f, -0.018595f, -0.031152f, -0.055820f, +0.056058f, +0.002859f, -0.018669f, -0.022159f, + -0.054689f, +0.075668f, -0.006481f, +0.061680f, +0.024949f, -0.019871f, -0.039919f, +0.003876f, -0.014460f, -0.027331f, + +0.016988f, -0.002039f, +0.016271f, -0.009324f, -0.018518f, +0.017239f, +0.023176f, +0.003393f, -0.027990f, -0.004303f, + +0.010276f, +0.014052f, +0.010346f, +0.005351f, -0.019770f, -0.036977f, -0.023701f, +0.013798f, +0.006538f, -0.014372f, + +0.032580f, +0.026711f, +0.029195f, -0.028315f, +0.017284f, +0.020758f, -0.010578f, -0.008527f, +0.003346f, -0.004393f, + -0.018071f, -0.029349f, -0.018974f, -0.007902f, -0.013854f, -0.003130f, +0.022807f, +0.006027f, +0.017396f, +0.017145f, + +0.003645f, +0.002277f, -0.004889f, +0.000591f, +0.003927f, -0.004036f, +0.002614f, +0.019514f, +0.000021f, -0.007769f, + -0.000153f, -0.004977f, -0.001780f, -0.007824f, -0.010163f, -0.006285f, -0.014498f, -0.008555f, -0.001908f, +0.004746f, + +0.005369f, +0.008628f, +0.009793f, +0.010248f, +0.006463f, +0.007293f, +0.005515f, -0.000864f, +0.000535f, +0.000123f, + -0.003258f, -0.004441f, -0.010192f, -0.010172f, -0.008089f, -0.004420f + }, + { + +0.002811f, -0.081316f, +0.115097f, +0.012186f, -0.006536f, -0.060388f, +0.008720f, +0.014165f, -0.013447f, -0.019596f, + -0.029051f, +0.020671f, +0.021437f, +0.045447f, -0.018790f, -0.003224f, +0.002091f, -0.007357f, -0.013631f, +0.020397f, + +0.010830f, +0.018342f, -0.022804f, -0.016874f, -0.009384f, +0.008478f, -0.019255f, -0.019837f, +0.006406f, +0.009260f, + -0.010485f, +0.020562f, +0.001700f, +0.002207f, -0.008287f, +0.043127f, -0.017300f, +0.029738f, -0.006732f, +0.014781f, + -0.022478f, -0.034911f, -0.017080f, +0.006116f, +0.000370f, +0.003263f, +0.029480f, +0.017696f, +0.003311f, -0.008238f, + -0.033850f, -0.004877f, -0.010342f, -0.011509f, +0.010972f, +0.010975f, +0.006128f, +0.002400f, +0.003616f, +0.010971f, + -0.001684f, -0.002428f, +0.011354f, +0.008068f, -0.003688f, -0.007101f, -0.008356f, -0.002072f, -0.011090f, -0.000310f, + +0.000124f, +0.001507f, -0.005044f, +0.001721f, +0.000906f, -0.001759f, -0.002204f, +0.000015f, +0.009049f, +0.005862f, + +0.005194f, +0.003749f, +0.000126f, +0.002832f, -0.004904f, +0.000994f, -0.004946f, -0.007446f, -0.006764f, +0.002219f, + -0.000288f, +0.000713f, -0.001430f, +0.002343f, -0.001700f, +0.002610f + }, + { + -0.006217f, -0.013388f, +0.067848f, -0.012897f, -0.021346f, -0.056777f, +0.053953f, -0.015433f, -0.021452f, +0.011208f, + -0.032609f, +0.013694f, +0.060868f, -0.009873f, -0.012618f, +0.031967f, -0.018713f, -0.024377f, +0.010406f, +0.004159f, + +0.000413f, +0.002984f, +0.002455f, -0.020324f, -0.022209f, +0.010644f, +0.006718f, +0.003857f, +0.000984f, -0.000327f, + -0.014605f, +0.006520f, +0.005370f, -0.004400f, -0.016379f, +0.020798f, +0.009098f, +0.004721f, +0.017005f, +0.015857f, + -0.009999f, -0.025020f, -0.013240f, +0.011309f, -0.018543f, +0.008244f, +0.008220f, +0.018936f, -0.007838f, -0.008121f, + -0.023962f, -0.005177f, +0.000315f, -0.002577f, +0.010816f, +0.011817f, +0.012248f, -0.002520f, +0.003026f, -0.011318f, + +0.000127f, +0.000269f, +0.002225f, +0.006403f, +0.004370f, -0.005433f, +0.003213f, +0.000365f, -0.009226f, -0.003653f, + -0.001362f, -0.000316f, -0.002569f, -0.000611f, +0.000898f, +0.001198f, -0.005630f, -0.002840f, +0.008469f, +0.006670f, + +0.000974f, +0.003762f, +0.000868f, +0.003725f, -0.002653f, -0.000927f, -0.002855f, -0.007487f, -0.002664f, -0.003302f, + +0.002723f, -0.002561f, +0.001210f, -0.001676f, +0.002342f, -0.000985f + } + }, + { + { + +0.005007f, -0.014294f, +0.110044f, +0.046944f, +0.016024f, +0.011647f, -0.012991f, +0.004501f, -0.001118f, +0.013586f, + +0.001506f, -0.019113f, +0.004169f, -0.012622f, +0.001476f, -0.014243f, -0.027496f, +0.018652f, +0.005031f, -0.008627f, + +0.006046f, +0.023982f, -0.002206f, -0.001958f, -0.036236f, -0.011195f, -0.022668f, +0.002652f, -0.015114f, +0.022833f, + +0.002723f, +0.005492f, -0.000626f, -0.003848f, -0.003069f, -0.009132f, +0.007504f, -0.000048f, -0.002998f, -0.004407f, + -0.012143f, -0.002503f, -0.008794f, +0.004562f, +0.004359f, -0.005565f, -0.005226f, -0.002670f, +0.007515f, -0.015540f, + +0.001064f, +0.002934f, -0.002818f, +0.000334f, -0.004728f, +0.005334f, +0.011133f, +0.000154f, -0.007129f, +0.000572f, + +0.008698f, +0.008950f, +0.003266f, -0.006376f, +0.002223f, -0.000157f, +0.000412f, -0.004737f, +0.006144f, +0.001505f, + +0.010013f, +0.005736f, +0.003437f, +0.002416f, +0.003534f, -0.001922f, -0.001646f, -0.000660f, +0.003488f, +0.001155f, + +0.005753f, -0.000099f, +0.002361f, +0.003075f, -0.002459f, -0.002764f, -0.001349f, -0.003467f, -0.004264f, -0.000113f, + -0.000494f, +0.001684f, +0.001383f, +0.001405f, +0.002248f, -0.000626f + }, + { + -0.010661f, -0.226958f, -0.039330f, +0.035432f, +0.067703f, -0.015417f, -0.021811f, -0.018302f, +0.014286f, +0.003720f, + +0.004485f, -0.000912f, +0.001274f, +0.002703f, +0.009506f, +0.039611f, -0.016936f, +0.013783f, -0.014929f, -0.012532f, + +0.004827f, -0.005742f, -0.005807f, -0.005952f, +0.008659f, +0.008796f, -0.006785f, +0.005139f, +0.010704f, +0.007342f, + +0.008798f, +0.007140f, -0.017032f, -0.003626f, +0.002174f, +0.007575f, +0.005938f, +0.005782f, +0.003120f, -0.001939f, + +0.003455f, +0.005330f, -0.004046f, -0.001499f, -0.004748f, -0.014842f, +0.000313f, +0.001749f, -0.001231f, +0.000927f, + -0.005349f, +0.003864f, +0.003092f, -0.005229f, -0.010377f, +0.004807f, +0.007327f, +0.005785f, -0.000682f, +0.001040f, + -0.005437f, +0.002077f, -0.006266f, -0.003555f, -0.000373f, -0.001372f, +0.000835f, -0.004330f, +0.003563f, +0.005433f, + -0.002271f, -0.003291f, -0.000257f, -0.001695f, +0.006182f, +0.002387f, +0.002883f, +0.002432f, -0.001584f, -0.008367f, + -0.002654f, +0.000220f, -0.001419f, -0.004196f, -0.000307f, -0.000867f, -0.001441f, +0.002475f, +0.002687f, -0.003347f, + -0.001142f, -0.001629f, -0.003005f, +0.001652f, +0.001143f, +0.002180f + }, + { + -0.003904f, -0.128268f, +0.056819f, +0.034048f, +0.065833f, +0.002597f, -0.022355f, +0.008635f, +0.020437f, +0.002492f, + +0.021072f, +0.001764f, +0.008189f, +0.000732f, +0.003402f, -0.015248f, -0.011867f, +0.002602f, +0.002638f, +0.006662f, + -0.009046f, -0.013159f, -0.011748f, +0.005864f, -0.003891f, +0.004868f, -0.028377f, -0.000605f, -0.007996f, -0.001501f, + -0.009691f, +0.011535f, +0.014757f, -0.002534f, -0.011747f, -0.008804f, +0.000437f, +0.000233f, +0.005697f, +0.005970f, + +0.006531f, -0.005792f, +0.000343f, +0.003957f, +0.005200f, +0.001785f, -0.002213f, -0.006338f, +0.009348f, +0.009263f, + -0.008968f, -0.003540f, +0.003624f, -0.008391f, +0.005260f, -0.004026f, -0.004321f, +0.008644f, +0.007187f, -0.003612f, + -0.002761f, +0.005067f, +0.002512f, +0.002308f, -0.005194f, -0.007001f, +0.003274f, -0.002906f, +0.005009f, -0.001143f, + -0.000405f, +0.003959f, -0.001293f, -0.000256f, +0.001103f, -0.001553f, +0.001819f, +0.000327f, +0.000827f, +0.002558f, + +0.001188f, +0.003886f, +0.000595f, +0.001412f, -0.003010f, -0.002038f, -0.003537f, -0.001970f, +0.002584f, -0.001905f, + -0.003888f, +0.002327f, +0.001235f, +0.001167f, -0.002725f, -0.003726f + }, + { + -0.000209f, -0.041404f, +0.068870f, +0.025763f, -0.013397f, -0.007942f, -0.012463f, +0.002279f, -0.012562f, -0.010816f, + +0.029104f, -0.002976f, +0.022616f, +0.007623f, -0.000736f, -0.034268f, -0.008299f, +0.030749f, -0.009134f, -0.019952f, + -0.004047f, -0.000809f, +0.022390f, +0.024536f, +0.005618f, -0.007251f, +0.008686f, +0.006303f, -0.007300f, -0.001053f, + -0.013642f, +0.016911f, +0.013417f, -0.010302f, +0.003241f, +0.010663f, +0.009922f, -0.000916f, -0.004534f, -0.006419f, + +0.008890f, +0.004414f, +0.005808f, +0.006580f, -0.017709f, -0.001445f, -0.001240f, +0.000500f, -0.002952f, -0.001085f, + +0.005523f, -0.010164f, -0.005468f, +0.004523f, +0.001402f, +0.005184f, +0.003731f, +0.000309f, -0.003477f, +0.003850f, + +0.006503f, +0.000348f, -0.004498f, -0.003955f, +0.001585f, +0.004769f, +0.003904f, +0.004910f, -0.002841f, -0.004237f, + +0.001414f, +0.000417f, +0.004320f, +0.005825f, -0.000843f, +0.001519f, -0.001605f, +0.003551f, +0.000841f, -0.000564f, + -0.000543f, +0.002252f, +0.000972f, +0.000243f, +0.001187f, +0.000414f, -0.001845f, +0.000391f, +0.004481f, +0.003052f, + +0.000141f, +0.000190f, +0.000689f, +0.005663f, +0.001417f, +0.000398f + }, + { + -0.002470f, -0.200808f, -0.052043f, -0.026054f, +0.073740f, +0.005175f, -0.006591f, -0.013563f, -0.014882f, -0.046509f, + +0.018616f, +0.002358f, +0.011460f, +0.008625f, -0.028832f, -0.009725f, -0.003909f, +0.042151f, +0.000886f, +0.016132f, + +0.006147f, -0.024842f, -0.038607f, +0.012764f, +0.005050f, -0.004909f, +0.005461f, -0.003956f, +0.005273f, +0.004115f, + -0.000252f, -0.000404f, -0.011114f, -0.006626f, -0.000087f, +0.005195f, +0.003721f, +0.008124f, -0.006342f, +0.000910f, + -0.005946f, -0.025783f, -0.019599f, +0.006167f, -0.004593f, +0.001395f, +0.012518f, +0.001395f, +0.009149f, -0.001322f, + +0.001151f, +0.016127f, +0.000653f, +0.011809f, +0.002667f, -0.008220f, -0.001678f, -0.014690f, -0.006773f, +0.001079f, + -0.004275f, +0.012939f, +0.009093f, -0.005287f, -0.007142f, -0.007014f, +0.003915f, -0.001932f, +0.004178f, -0.000859f, + +0.001416f, -0.006412f, -0.001941f, -0.001561f, +0.003059f, +0.004170f, +0.002890f, +0.002406f, +0.000614f, +0.001319f, + +0.005833f, +0.004831f, +0.000411f, +0.001949f, +0.002459f, -0.000877f, -0.004706f, -0.001664f, -0.002799f, -0.001859f, + -0.002201f, -0.000721f, -0.002234f, -0.000948f, -0.000872f, +0.002230f + }, + { + +0.005291f, +0.036362f, +0.134909f, +0.015235f, -0.035841f, -0.012534f, -0.005976f, -0.007681f, -0.006245f, +0.005963f, + -0.006982f, -0.012398f, -0.001794f, +0.016940f, -0.024493f, +0.020806f, -0.030480f, +0.003487f, -0.000300f, -0.020098f, + -0.030926f, -0.008255f, -0.007071f, +0.051267f, -0.033575f, -0.001858f, -0.008951f, +0.013960f, -0.006971f, -0.011475f, + -0.009663f, +0.018299f, -0.034787f, -0.011297f, +0.000718f, -0.008728f, -0.002894f, +0.010547f, -0.003397f, +0.007557f, + -0.012046f, +0.016150f, +0.001782f, -0.000415f, +0.008347f, +0.003378f, +0.006068f, +0.003349f, +0.004444f, +0.001470f, + -0.001064f, -0.008062f, +0.002677f, -0.000148f, +0.005141f, +0.007008f, -0.009314f, -0.017358f, -0.009249f, -0.001643f, + -0.004686f, +0.004903f, +0.007339f, +0.002735f, +0.006958f, +0.005934f, -0.005100f, -0.001072f, -0.000426f, +0.005784f, + +0.008665f, +0.010232f, +0.000867f, +0.001555f, -0.006387f, -0.000498f, -0.002121f, +0.001487f, +0.003393f, +0.004248f, + -0.000900f, +0.001918f, +0.001674f, -0.002298f, +0.001004f, +0.002684f, +0.000046f, -0.000040f, -0.002003f, -0.000482f, + +0.000215f, +0.000331f, -0.002483f, -0.000002f, -0.000862f, -0.000102f + }, + { + -0.000205f, -0.216736f, -0.060989f, -0.055679f, +0.066096f, -0.002241f, +0.002120f, -0.006289f, -0.009098f, +0.005325f, + +0.003581f, +0.007125f, +0.027759f, -0.011484f, +0.013721f, -0.002023f, -0.024038f, +0.000313f, +0.022400f, -0.005591f, + -0.035882f, -0.010480f, -0.010769f, -0.003223f, +0.007461f, +0.003163f, -0.019537f, -0.015672f, -0.000424f, +0.008663f, + -0.009091f, +0.013080f, +0.003291f, -0.000510f, +0.009449f, +0.015250f, +0.006535f, -0.008571f, +0.006763f, +0.004541f, + +0.004687f, +0.008192f, +0.006012f, +0.011072f, -0.000243f, -0.016993f, -0.009175f, -0.007330f, +0.009089f, +0.009341f, + +0.005900f, -0.000763f, +0.009190f, +0.015907f, +0.005501f, +0.001076f, +0.003801f, -0.000813f, +0.014487f, +0.001000f, + +0.001084f, +0.008136f, +0.009245f, -0.003571f, -0.004952f, -0.000023f, +0.002378f, -0.001222f, +0.004938f, -0.001877f, + -0.002272f, -0.004908f, -0.007209f, +0.002922f, -0.000128f, +0.000477f, -0.006614f, -0.007567f, +0.001210f, +0.004149f, + +0.003224f, +0.004100f, +0.000580f, +0.002788f, -0.003096f, +0.000632f, +0.001686f, -0.002388f, -0.000251f, +0.001336f, + -0.002523f, -0.000293f, -0.000650f, -0.005813f, -0.001353f, -0.000845f + }, + { + +0.004518f, +0.053320f, +0.139534f, +0.013218f, -0.024425f, +0.001118f, -0.017612f, -0.004302f, +0.005083f, -0.007617f, + -0.003757f, -0.006212f, +0.013686f, -0.006668f, -0.060514f, +0.015181f, -0.063122f, -0.007723f, +0.013457f, +0.006952f, + +0.005747f, -0.004835f, -0.003278f, -0.027973f, +0.026987f, +0.032197f, +0.010904f, -0.037137f, +0.026876f, -0.010649f, + -0.004308f, -0.002753f, -0.007590f, -0.011380f, -0.013091f, +0.009996f, +0.016517f, +0.013378f, -0.003576f, -0.002589f, + -0.012916f, +0.008519f, +0.007743f, -0.006295f, -0.002805f, +0.005942f, -0.001164f, +0.009745f, -0.001594f, -0.000431f, + +0.007123f, +0.002211f, +0.006629f, +0.003915f, -0.004313f, -0.000008f, +0.003502f, -0.004120f, -0.004688f, +0.002732f, + -0.000397f, -0.005006f, -0.000807f, +0.003047f, +0.000267f, +0.002274f, +0.009808f, +0.003485f, -0.003523f, +0.004623f, + +0.007946f, +0.001166f, -0.003575f, +0.001767f, +0.003929f, +0.004325f, -0.008125f, -0.004840f, +0.002335f, +0.000949f, + -0.003823f, +0.003558f, +0.002308f, +0.003191f, -0.001322f, -0.001573f, -0.003911f, -0.001133f, +0.001194f, +0.002051f, + -0.001809f, +0.002388f, -0.001574f, -0.001753f, -0.000845f, +0.000028f + }, + { + +0.000543f, -0.218307f, -0.060798f, -0.058511f, +0.069107f, +0.007875f, +0.010140f, -0.003973f, +0.001950f, +0.004438f, + -0.007110f, +0.015100f, +0.010271f, +0.005448f, +0.002118f, -0.012893f, -0.007232f, +0.014349f, -0.027664f, -0.018765f, + -0.001899f, +0.000068f, -0.031174f, -0.003459f, +0.038839f, -0.030574f, +0.006824f, -0.019476f, +0.017237f, +0.015143f, + +0.021198f, -0.016688f, -0.011588f, +0.020020f, -0.008133f, -0.005370f, +0.003976f, +0.001759f, -0.017243f, -0.029694f, + +0.002643f, +0.003702f, -0.005336f, +0.011599f, -0.017131f, -0.010995f, +0.010740f, +0.009435f, -0.005221f, +0.000902f, + +0.006518f, +0.002976f, -0.005748f, +0.001855f, -0.006164f, +0.003995f, -0.001292f, -0.011153f, -0.002173f, -0.007840f, + -0.004994f, +0.002552f, -0.004294f, +0.000655f, +0.000109f, +0.009654f, +0.005807f, -0.002333f, +0.006211f, +0.000121f, + +0.000322f, -0.001822f, +0.002338f, +0.000184f, -0.004978f, +0.001839f, -0.005122f, -0.000536f, -0.002930f, -0.002889f, + -0.000334f, -0.004966f, -0.005132f, -0.000463f, -0.001304f, -0.003489f, -0.000187f, +0.001860f, +0.001062f, +0.004239f, + -0.000475f, -0.001931f, +0.001649f, +0.000246f, +0.000074f, -0.001287f + }, + { + -0.003496f, -0.100254f, +0.076413f, +0.021559f, +0.018939f, -0.010702f, +0.011306f, -0.035194f, +0.023452f, +0.000821f, + +0.005782f, +0.007645f, -0.021944f, +0.011563f, +0.020050f, +0.029650f, +0.003684f, -0.018125f, +0.037487f, -0.000878f, + +0.021840f, +0.011479f, +0.009900f, +0.003551f, -0.015214f, -0.011317f, +0.002025f, -0.013691f, -0.012247f, -0.013637f, + -0.004323f, +0.001735f, -0.014556f, -0.012946f, -0.012230f, -0.005137f, +0.013853f, +0.007174f, -0.000486f, +0.007288f, + +0.010851f, -0.008543f, +0.007397f, +0.002516f, -0.000600f, -0.007759f, +0.001974f, -0.022003f, -0.001207f, -0.024081f, + -0.008179f, -0.000810f, -0.016569f, +0.003198f, +0.002133f, -0.001617f, -0.000664f, -0.013850f, +0.011021f, +0.000731f, + -0.004492f, +0.004824f, +0.000245f, -0.012319f, -0.012668f, -0.006020f, +0.002465f, +0.004977f, +0.003098f, -0.005929f, + -0.005702f, -0.005405f, -0.000127f, +0.002561f, +0.005694f, -0.001072f, -0.003529f, -0.004228f, -0.000108f, +0.001610f, + -0.002324f, -0.004162f, +0.000642f, +0.001685f, +0.002330f, -0.004091f, -0.009063f, -0.000745f, -0.000564f, +0.001159f, + +0.001595f, +0.001048f, +0.004874f, +0.001415f, +0.004110f, +0.000016f + }, + { + -0.006231f, -0.182247f, -0.012818f, +0.003576f, +0.040676f, -0.010896f, +0.101655f, -0.039086f, -0.012151f, +0.024888f, + +0.001402f, +0.020457f, -0.002489f, -0.010928f, +0.012472f, -0.016442f, +0.022504f, +0.028952f, +0.052608f, -0.024482f, + +0.018937f, +0.009209f, +0.001736f, -0.000027f, -0.018199f, +0.029534f, +0.006447f, +0.018728f, -0.007163f, +0.028220f, + -0.038256f, +0.010958f, -0.010604f, -0.006869f, -0.008567f, -0.007348f, +0.004586f, +0.008407f, -0.001921f, +0.000325f, + +0.003712f, -0.003459f, -0.001832f, -0.003304f, -0.005534f, +0.002395f, +0.006194f, -0.003350f, -0.000199f, -0.000404f, + -0.018013f, +0.003240f, +0.017431f, +0.001415f, -0.008400f, +0.006601f, -0.011650f, +0.004564f, -0.003741f, -0.005341f, + -0.000628f, +0.005494f, -0.001024f, +0.000782f, -0.001400f, +0.001221f, -0.007814f, -0.000413f, -0.002780f, -0.000708f, + -0.000531f, -0.000531f, -0.003977f, +0.002002f, +0.001580f, +0.002040f, -0.000212f, -0.001123f, +0.003849f, +0.000469f, + -0.000190f, +0.001610f, -0.003181f, -0.004036f, +0.003501f, +0.002871f, +0.005762f, +0.000657f, +0.000206f, +0.003060f, + +0.001053f, -0.004352f, -0.000478f, +0.003381f, -0.000352f, -0.000031f + }, + { + -0.000362f, -0.068245f, +0.089695f, +0.024946f, +0.010615f, -0.017941f, -0.034164f, -0.000064f, -0.016740f, -0.001633f, + -0.048027f, +0.048680f, +0.021552f, +0.023497f, +0.026125f, -0.017404f, -0.043651f, -0.005085f, +0.025610f, -0.010883f, + +0.028646f, +0.014121f, +0.012349f, +0.021985f, -0.031772f, -0.001174f, -0.001662f, +0.020267f, -0.002664f, -0.011779f, + +0.004459f, -0.022264f, -0.024299f, -0.006322f, +0.003936f, -0.009179f, +0.020533f, +0.006976f, -0.001977f, -0.015332f, + +0.002621f, +0.007698f, +0.004394f, +0.021293f, +0.011751f, -0.005930f, -0.001466f, -0.000666f, -0.004622f, -0.004222f, + -0.007798f, -0.003364f, -0.000394f, +0.001091f, -0.004113f, +0.002413f, +0.004600f, -0.007155f, -0.002438f, +0.010957f, + -0.002541f, +0.006989f, -0.010952f, -0.010104f, -0.000472f, -0.002747f, -0.006812f, +0.011502f, +0.006063f, +0.000896f, + +0.001568f, +0.001658f, +0.002406f, +0.004522f, -0.004331f, +0.000317f, -0.002196f, -0.002212f, +0.001333f, +0.004558f, + -0.002731f, +0.000948f, +0.000902f, +0.003097f, +0.000747f, +0.003876f, -0.001854f, -0.003615f, -0.001833f, +0.000339f, + +0.003619f, +0.001064f, -0.001052f, +0.000365f, -0.003735f, -0.000577f + }, + { + +0.022343f, -0.099045f, -0.049851f, -0.018600f, +0.032970f, +0.021822f, +0.061055f, +0.017215f, -0.002596f, +0.006813f, + -0.032703f, +0.044740f, -0.022684f, +0.001730f, -0.031956f, -0.018524f, -0.037513f, +0.015247f, +0.001110f, -0.012632f, + +0.022744f, +0.006185f, +0.012943f, -0.007730f, -0.024273f, -0.008515f, -0.002807f, -0.000152f, -0.002274f, +0.012245f, + -0.002961f, -0.023826f, -0.028386f, -0.011189f, +0.000743f, +0.001242f, +0.005848f, +0.017758f, +0.007838f, +0.000890f, + +0.016448f, -0.016621f, +0.004975f, -0.030960f, +0.005729f, +0.008361f, -0.005675f, -0.001206f, +0.014908f, +0.008960f, + -0.005019f, -0.014145f, -0.009144f, +0.009268f, -0.011013f, -0.005867f, +0.009264f, -0.007374f, +0.001633f, +0.001613f, + +0.000387f, +0.004867f, +0.002076f, +0.001080f, +0.004055f, -0.002221f, -0.009179f, -0.002174f, -0.007474f, +0.003171f, + +0.007223f, +0.000065f, +0.005150f, -0.000988f, -0.000164f, +0.002647f, -0.005905f, -0.000489f, +0.001998f, +0.004519f, + +0.002558f, +0.002464f, +0.003673f, +0.001264f, +0.001825f, +0.004970f, -0.001851f, -0.004332f, -0.000108f, -0.001369f, + -0.003276f, -0.002295f, -0.000813f, +0.000286f, +0.001206f, +0.003272f + }, + { + -0.005159f, -0.119096f, +0.061277f, +0.000301f, +0.011310f, -0.015004f, +0.006400f, -0.004180f, +0.024668f, +0.004036f, + -0.014881f, -0.002665f, -0.029827f, +0.021548f, +0.010519f, +0.011075f, -0.016194f, +0.003394f, -0.005471f, +0.005513f, + -0.001723f, +0.015124f, -0.007375f, +0.034652f, +0.012416f, +0.011046f, +0.005128f, +0.002424f, +0.011783f, +0.007791f, + -0.032004f, -0.005830f, -0.004633f, +0.011243f, -0.017041f, +0.026767f, -0.003359f, +0.023656f, -0.017033f, +0.016072f, + +0.007833f, +0.000543f, +0.004174f, +0.013306f, -0.000904f, -0.009133f, +0.007965f, +0.011713f, +0.013523f, +0.012863f, + -0.004286f, +0.013996f, +0.002278f, -0.002060f, +0.005520f, +0.005162f, +0.003144f, -0.000198f, +0.004970f, +0.007084f, + -0.001951f, -0.005446f, +0.001401f, +0.002769f, +0.003734f, +0.005196f, -0.000489f, -0.000145f, -0.006263f, -0.002001f, + -0.001683f, +0.002371f, -0.002204f, -0.000914f, -0.004338f, +0.001754f, +0.000623f, -0.000781f, +0.000728f, -0.002223f, + +0.005149f, +0.007896f, +0.001794f, +0.002957f, -0.001805f, +0.002824f, -0.003335f, -0.005575f, -0.002398f, +0.005605f, + +0.000494f, +0.002323f, +0.000754f, +0.002977f, +0.001963f, +0.002265f + }, + { + +0.018198f, -0.098903f, -0.050793f, -0.017470f, +0.043549f, +0.036161f, +0.059008f, -0.026629f, -0.037816f, +0.008594f, + -0.012681f, +0.018755f, +0.059020f, +0.001392f, +0.039048f, +0.056117f, -0.004031f, +0.004033f, +0.027815f, -0.009181f, + -0.019447f, +0.008043f, +0.009637f, -0.015838f, -0.000575f, -0.005418f, -0.008017f, -0.000940f, -0.004097f, +0.002350f, + -0.001333f, +0.007605f, -0.005594f, -0.019142f, -0.040502f, -0.001572f, -0.004956f, -0.015025f, +0.000920f, +0.005021f, + -0.000803f, +0.005181f, +0.005854f, +0.008728f, -0.007111f, +0.001311f, -0.015729f, +0.001924f, -0.005073f, -0.004702f, + -0.010995f, +0.009837f, +0.002462f, -0.006041f, -0.001443f, +0.000593f, +0.006194f, -0.004996f, +0.004334f, -0.008495f, + -0.000862f, -0.004002f, -0.004677f, +0.003897f, +0.000672f, -0.009350f, +0.002019f, +0.005095f, -0.000911f, -0.002104f, + +0.001148f, +0.004871f, -0.003799f, +0.002916f, +0.005869f, +0.005777f, +0.000676f, -0.003657f, +0.001893f, -0.000287f, + +0.000620f, +0.001814f, -0.003215f, -0.001312f, -0.003136f, +0.002593f, +0.002385f, +0.000975f, +0.004680f, -0.001762f, + +0.000702f, -0.003604f, +0.002981f, -0.000583f, +0.001753f, +0.002383f + } + }, + { + { + -0.002001f, +0.120721f, -0.017484f, +0.037160f, +0.041208f, -0.000432f, +0.001172f, -0.001453f, +0.009845f, +0.009956f, + -0.002020f, -0.013495f, +0.003319f, -0.022076f, -0.013002f, -0.001811f, -0.017825f, -0.009323f, +0.007165f, -0.006179f, + +0.025770f, +0.038787f, -0.014970f, -0.028247f, -0.009328f, -0.028693f, -0.002082f, -0.007808f, +0.002355f, -0.020726f, + +0.012350f, -0.001254f, +0.008477f, +0.005408f, -0.019882f, -0.002726f, +0.012084f, -0.004859f, +0.001455f, -0.014467f, + -0.010366f, +0.008860f, -0.005199f, +0.005500f, -0.007693f, -0.003059f, +0.007687f, +0.002828f, -0.013846f, +0.000149f, + +0.000083f, -0.000142f, -0.001206f, -0.000175f, -0.010643f, +0.000990f, +0.015188f, -0.005189f, -0.003176f, +0.006658f, + -0.004387f, +0.012830f, +0.004401f, -0.006118f, +0.002544f, -0.000144f, +0.000933f, +0.001918f, +0.003932f, +0.005726f, + +0.012638f, -0.000440f, +0.002103f, +0.004775f, +0.001891f, -0.008382f, -0.003586f, +0.002658f, +0.002984f, +0.001407f, + +0.005817f, +0.000101f, +0.001256f, +0.005644f, -0.001257f, -0.003263f, +0.000710f, -0.002489f, +0.000468f, -0.002842f, + -0.002711f, +0.001355f, -0.000145f, +0.002748f, +0.002423f, -0.001222f + }, + { + +0.010487f, -0.178229f, -0.144691f, +0.133696f, -0.000580f, -0.015382f, -0.027442f, +0.011508f, +0.012344f, -0.002924f, + +0.001226f, -0.010461f, +0.002911f, +0.003295f, +0.021788f, +0.011234f, +0.002692f, -0.014366f, +0.020898f, -0.029634f, + -0.000027f, +0.012549f, -0.008618f, +0.005963f, +0.013566f, -0.001560f, +0.006757f, -0.007970f, +0.007189f, +0.019551f, + +0.004369f, +0.004047f, -0.008440f, -0.002232f, -0.005281f, -0.001876f, +0.010814f, +0.005482f, -0.008354f, +0.009697f, + +0.000905f, +0.012690f, -0.000586f, -0.006349f, +0.004330f, -0.016760f, -0.001895f, +0.002190f, -0.007776f, +0.010280f, + -0.008294f, -0.000385f, +0.007830f, -0.011119f, -0.001776f, -0.004424f, +0.005206f, +0.005919f, -0.004780f, +0.000733f, + -0.005452f, +0.001223f, -0.003586f, +0.002793f, -0.002777f, +0.000611f, +0.004515f, -0.002808f, +0.003352f, +0.007343f, + -0.001348f, -0.004503f, -0.003776f, -0.003031f, +0.001360f, +0.001103f, +0.002305f, +0.001007f, -0.000016f, -0.005808f, + -0.002242f, -0.002759f, +0.000341f, -0.000208f, +0.001112f, -0.001918f, -0.002359f, +0.001857f, +0.004115f, -0.003282f, + -0.002828f, -0.001419f, -0.001594f, -0.001781f, +0.001724f, +0.000197f + }, + { + +0.000627f, +0.019731f, -0.104321f, +0.098643f, +0.019155f, -0.017028f, +0.000836f, +0.003627f, +0.030840f, +0.013166f, + -0.004121f, +0.006567f, +0.007199f, +0.002982f, +0.001312f, -0.011187f, +0.002341f, -0.016375f, +0.002997f, +0.010705f, + -0.018628f, -0.014743f, -0.008769f, +0.009270f, +0.001263f, +0.003590f, -0.033209f, +0.009343f, -0.002003f, -0.017762f, + -0.007024f, +0.005510f, +0.010760f, +0.009457f, -0.011895f, -0.008398f, +0.003351f, -0.001854f, +0.009610f, -0.003622f, + -0.001269f, +0.002676f, +0.002196f, +0.003875f, -0.004231f, +0.010159f, -0.005061f, +0.000271f, +0.012256f, +0.007451f, + +0.001885f, -0.012609f, -0.001541f, -0.003392f, -0.002670f, +0.000644f, +0.003710f, +0.003121f, -0.002364f, -0.005988f, + +0.001955f, +0.004488f, +0.001164f, +0.004573f, -0.005297f, -0.002267f, +0.000569f, +0.007940f, +0.001882f, +0.000993f, + +0.002297f, -0.003423f, -0.000347f, -0.000487f, -0.006179f, -0.000621f, -0.000647f, +0.001828f, +0.002439f, +0.000507f, + +0.002680f, +0.005958f, +0.002659f, -0.003049f, -0.001486f, +0.000304f, -0.000946f, -0.002296f, +0.000730f, -0.000656f, + -0.004354f, +0.000288f, +0.000583f, +0.004838f, -0.001965f, -0.003566f + }, + { + -0.001496f, +0.041948f, -0.012596f, +0.005812f, +0.010844f, -0.008192f, -0.005334f, -0.002631f, +0.008123f, +0.019758f, + -0.021358f, +0.007833f, +0.007947f, +0.007533f, -0.012296f, +0.003213f, -0.008229f, -0.005162f, -0.015393f, +0.000693f, + -0.010153f, +0.010020f, +0.030265f, +0.030619f, -0.011072f, -0.007451f, +0.011489f, +0.003838f, -0.009792f, +0.002122f, + -0.006314f, +0.007639f, +0.015850f, -0.010332f, +0.006341f, +0.002712f, +0.007558f, +0.012171f, -0.005852f, -0.009324f, + +0.009384f, +0.005059f, +0.003571f, +0.008552f, -0.023715f, +0.001817f, -0.001502f, +0.004426f, -0.009282f, +0.009589f, + -0.009757f, -0.013823f, +0.005836f, +0.004712f, -0.002468f, +0.006976f, -0.001795f, +0.005241f, -0.005517f, +0.009472f, + +0.002518f, +0.002804f, -0.005844f, -0.000317f, +0.002653f, -0.004393f, +0.009677f, -0.000439f, +0.002681f, +0.002595f, + -0.002970f, -0.003706f, +0.008494f, +0.001502f, +0.000679f, -0.000093f, +0.002071f, -0.000414f, -0.001241f, +0.001765f, + -0.000853f, +0.002579f, +0.000834f, +0.000030f, +0.001526f, +0.001721f, -0.003080f, +0.005462f, +0.001607f, +0.002610f, + -0.000408f, +0.000084f, +0.002351f, +0.001594f, +0.003236f, -0.002029f + }, + { + -0.000718f, -0.328228f, +0.025788f, +0.051720f, +0.008529f, +0.006723f, -0.020825f, +0.007782f, -0.016818f, -0.051795f, + +0.024448f, -0.014481f, +0.013221f, -0.000693f, -0.023207f, -0.002031f, +0.023236f, -0.016525f, +0.026325f, +0.007068f, + +0.002069f, +0.004171f, -0.029544f, -0.004513f, -0.001693f, +0.007106f, +0.014221f, -0.007324f, -0.007558f, +0.009915f, + -0.005748f, -0.004716f, +0.000765f, -0.006482f, -0.002870f, +0.007070f, +0.005612f, +0.003577f, -0.003686f, -0.001809f, + -0.008040f, -0.023899f, -0.019835f, +0.001671f, -0.005675f, +0.007410f, +0.026950f, -0.002936f, -0.007495f, +0.005941f, + -0.005262f, +0.020437f, +0.011919f, +0.000236f, +0.002994f, -0.002576f, -0.009423f, -0.015807f, -0.001244f, +0.000094f, + -0.003521f, +0.014641f, +0.003955f, -0.006405f, -0.002722f, -0.000101f, -0.001272f, -0.003527f, +0.002318f, -0.000579f, + +0.000855f, -0.002324f, -0.003365f, -0.000136f, +0.002451f, -0.000060f, +0.002726f, +0.009399f, -0.002907f, +0.004263f, + +0.004123f, +0.003634f, +0.002761f, -0.000901f, +0.002111f, +0.000656f, -0.002805f, -0.001619f, -0.003375f, -0.003591f, + -0.001996f, +0.000937f, -0.002773f, -0.003177f, -0.000308f, +0.002568f + }, + { + +0.002070f, +0.100628f, +0.064105f, -0.031021f, +0.012420f, -0.013065f, -0.010660f, +0.002159f, +0.007606f, +0.003523f, + -0.021297f, -0.004136f, -0.000549f, -0.023784f, +0.003855f, +0.011385f, -0.013906f, +0.000220f, +0.004109f, -0.029039f, + -0.024612f, +0.000129f, -0.002072f, +0.038766f, -0.040258f, +0.009751f, -0.005558f, +0.014301f, -0.009294f, -0.016455f, + -0.001469f, +0.004818f, -0.032360f, -0.002663f, -0.006845f, +0.000646f, -0.004590f, +0.001370f, +0.000714f, +0.017449f, + -0.008757f, +0.006088f, +0.000918f, +0.006843f, +0.016160f, -0.002410f, -0.005208f, +0.009890f, +0.005865f, +0.002697f, + -0.002091f, -0.008539f, -0.003337f, +0.008671f, +0.004520f, +0.007489f, -0.012796f, -0.014973f, -0.012467f, +0.002406f, + -0.003083f, +0.001865f, +0.008850f, -0.000423f, +0.006972f, +0.005368f, +0.003318f, -0.005788f, -0.002458f, +0.001476f, + +0.017780f, -0.000096f, +0.000157f, -0.000777f, +0.001017f, +0.001364f, -0.000402f, +0.000018f, +0.007048f, +0.004117f, + -0.001744f, +0.000923f, +0.004038f, -0.002884f, -0.000867f, -0.000710f, +0.004353f, +0.000831f, -0.002567f, -0.000547f, + -0.002832f, +0.000865f, -0.005603f, -0.000132f, +0.003209f, -0.001250f + }, + { + -0.006030f, -0.354455f, +0.034633f, +0.053905f, -0.035748f, +0.003052f, +0.008633f, -0.015126f, +0.012319f, -0.015783f, + +0.027485f, +0.007676f, -0.003241f, +0.002129f, -0.003188f, -0.020282f, +0.019074f, -0.009220f, +0.003672f, +0.002043f, + -0.029195f, -0.000796f, -0.017109f, +0.003840f, +0.006458f, -0.014269f, -0.000878f, -0.016179f, +0.001611f, +0.009211f, + -0.011059f, -0.001100f, +0.007767f, +0.008783f, +0.009924f, +0.008889f, +0.003390f, -0.005602f, +0.013092f, +0.006391f, + +0.009508f, -0.006423f, +0.014900f, +0.006763f, -0.004206f, -0.007666f, -0.015323f, +0.000045f, +0.013358f, -0.003108f, + -0.000575f, +0.007994f, +0.012465f, +0.009658f, +0.014072f, +0.006326f, +0.005641f, +0.000030f, +0.008297f, +0.003391f, + +0.005074f, -0.002929f, +0.009131f, +0.003070f, -0.012730f, -0.000156f, +0.004885f, +0.000229f, -0.000074f, +0.000104f, + -0.001178f, -0.009595f, -0.003114f, -0.000466f, +0.001513f, -0.000689f, -0.002735f, -0.004802f, -0.000960f, +0.004161f, + +0.004482f, +0.002200f, +0.000374f, +0.000049f, -0.000926f, -0.000752f, +0.004168f, -0.001199f, -0.002621f, +0.002000f, + -0.002347f, +0.000008f, -0.003370f, -0.003647f, -0.003232f, +0.002336f + }, + { + +0.003883f, +0.075503f, +0.102668f, -0.024804f, +0.010187f, +0.002364f, -0.004230f, -0.001031f, +0.007249f, -0.004458f, + +0.002379f, -0.021386f, +0.007573f, -0.020854f, -0.042178f, +0.016113f, -0.060394f, -0.029485f, +0.008686f, +0.029222f, + -0.000989f, +0.003212f, +0.007772f, -0.025149f, +0.014341f, +0.009911f, +0.016470f, -0.012020f, +0.012990f, +0.005803f, + -0.010138f, -0.021619f, -0.016491f, -0.003796f, -0.006878f, +0.009087f, +0.012003f, +0.019808f, -0.001429f, -0.005120f, + -0.003366f, +0.006027f, -0.001620f, -0.007663f, +0.005430f, +0.002003f, -0.000633f, -0.000248f, +0.009745f, -0.003834f, + +0.010865f, +0.002088f, -0.001544f, +0.006474f, +0.001256f, -0.006201f, +0.005472f, +0.003296f, -0.000107f, -0.009508f, + +0.004045f, +0.000123f, -0.003683f, +0.004258f, -0.003539f, -0.001390f, +0.006114f, +0.007690f, +0.004337f, +0.000305f, + +0.009200f, -0.000433f, -0.004296f, -0.001577f, +0.005793f, +0.004536f, -0.003244f, -0.003023f, +0.004580f, -0.000914f, + -0.004151f, +0.001337f, +0.001626f, -0.000937f, -0.000216f, +0.000512f, -0.002262f, -0.000244f, -0.003710f, +0.002081f, + -0.000294f, +0.001288f, -0.002822f, +0.001544f, -0.001243f, -0.000079f + }, + { + -0.006694f, -0.330796f, +0.013699f, +0.058874f, -0.027305f, -0.007582f, +0.015867f, -0.002427f, +0.024374f, -0.000179f, + -0.002738f, -0.027425f, +0.016845f, -0.000864f, -0.003296f, -0.010576f, +0.018548f, -0.013735f, -0.001341f, -0.028975f, + -0.005074f, -0.009178f, -0.012698f, +0.000856f, +0.012341f, -0.012794f, -0.012101f, +0.011095f, +0.006041f, +0.009052f, + +0.004273f, +0.001228f, +0.004726f, +0.003465f, -0.004609f, -0.003609f, -0.000282f, +0.008679f, -0.016631f, -0.028092f, + -0.004017f, +0.005059f, +0.002559f, +0.001690f, -0.009259f, -0.013146f, +0.004321f, +0.005695f, -0.010054f, +0.006938f, + +0.008846f, +0.001322f, -0.009597f, -0.007826f, +0.008937f, +0.002050f, -0.000232f, -0.002095f, -0.000470f, -0.007860f, + -0.008469f, +0.001068f, -0.005854f, +0.000595f, +0.001491f, +0.003625f, +0.005062f, -0.002044f, +0.001583f, +0.003906f, + -0.006420f, +0.000498f, -0.001554f, +0.009743f, -0.005871f, -0.001795f, -0.002473f, +0.000551f, +0.000068f, -0.000694f, + -0.004210f, -0.006599f, -0.003451f, +0.000537f, -0.003323f, -0.004041f, +0.003578f, -0.000191f, +0.002670f, -0.000344f, + -0.002466f, +0.000466f, +0.000007f, +0.003868f, -0.001064f, -0.003068f + }, + { + +0.000724f, -0.012733f, -0.005371f, +0.016099f, -0.002752f, +0.001405f, +0.039656f, -0.027017f, -0.001002f, +0.004496f, + +0.017087f, -0.005671f, -0.015679f, +0.021841f, -0.006799f, +0.014456f, +0.026509f, +0.020594f, +0.012416f, -0.015318f, + +0.022745f, +0.006976f, +0.021392f, +0.001853f, -0.004453f, -0.005373f, -0.012723f, -0.012188f, +0.000406f, -0.019487f, + -0.004069f, -0.005314f, -0.030240f, +0.006585f, -0.029918f, +0.005687f, +0.019308f, -0.001470f, -0.018138f, +0.019946f, + +0.002900f, +0.002469f, -0.004875f, +0.020910f, -0.016073f, +0.005189f, -0.020676f, -0.009874f, -0.004851f, -0.024075f, + +0.010805f, -0.012584f, -0.021126f, +0.014256f, +0.005297f, -0.013279f, -0.005545f, -0.007269f, +0.009915f, -0.002309f, + +0.006390f, +0.001707f, -0.004424f, -0.018338f, -0.012416f, +0.005696f, +0.002930f, +0.000902f, +0.009589f, -0.010830f, + -0.006726f, -0.003509f, +0.001798f, +0.009913f, -0.005539f, -0.003027f, -0.002854f, -0.002316f, -0.001818f, -0.002117f, + -0.002337f, +0.000245f, -0.000180f, +0.002976f, -0.002648f, -0.001951f, -0.005648f, +0.001171f, +0.002911f, -0.001820f, + -0.000139f, +0.000677f, +0.005075f, +0.000682f, +0.002776f, +0.001389f + }, + { + +0.005400f, -0.242165f, +0.007941f, +0.000740f, +0.019441f, +0.060414f, +0.042447f, -0.045146f, +0.001948f, +0.039477f, + +0.010129f, -0.011417f, +0.015585f, +0.014261f, -0.025557f, +0.023507f, +0.020532f, +0.043036f, +0.026691f, -0.001535f, + +0.001756f, -0.007181f, +0.017293f, -0.010203f, -0.001269f, +0.031032f, +0.006576f, +0.006166f, +0.010930f, -0.025558f, + +0.006834f, +0.001062f, -0.012421f, -0.006733f, -0.025795f, +0.005341f, +0.003805f, +0.010083f, -0.002276f, +0.001088f, + +0.013527f, -0.002534f, +0.011057f, -0.010770f, -0.022386f, -0.004456f, -0.000534f, -0.000179f, +0.017287f, -0.019544f, + -0.002824f, +0.009240f, +0.008016f, +0.002214f, -0.009904f, +0.002506f, -0.007757f, -0.000422f, +0.001072f, -0.015958f, + +0.010298f, +0.006832f, +0.002299f, -0.008579f, +0.002671f, +0.006252f, -0.013771f, +0.003004f, -0.002719f, -0.007141f, + +0.007920f, -0.006198f, -0.003547f, +0.000008f, -0.003981f, +0.004868f, +0.000348f, +0.002105f, -0.000175f, +0.001610f, + +0.001492f, +0.001413f, -0.004173f, +0.000714f, +0.000850f, +0.002116f, +0.003723f, +0.001159f, +0.006724f, -0.001034f, + -0.001588f, -0.001044f, -0.002077f, +0.002252f, -0.001829f, +0.000771f + }, + { + -0.000509f, +0.045800f, -0.031774f, +0.027760f, +0.012184f, -0.020224f, -0.006932f, -0.019358f, -0.006374f, -0.012491f, + +0.017211f, -0.014845f, +0.020440f, +0.046689f, -0.025299f, -0.004945f, -0.034755f, +0.023141f, +0.003154f, +0.004430f, + +0.012097f, +0.021027f, +0.047245f, +0.005145f, -0.020612f, -0.017570f, -0.007817f, +0.027225f, +0.014868f, -0.012015f, + -0.006677f, -0.030541f, -0.032234f, -0.009682f, +0.016844f, -0.007297f, +0.014815f, +0.003268f, +0.004999f, -0.005922f, + -0.010698f, +0.005410f, +0.011518f, +0.021888f, +0.010241f, -0.010016f, -0.001339f, -0.002499f, -0.004252f, -0.006855f, + -0.007000f, +0.008175f, -0.009425f, +0.012632f, -0.007324f, +0.006276f, +0.005168f, -0.010500f, +0.005593f, -0.011120f, + +0.002728f, +0.010105f, -0.010025f, -0.010052f, -0.006147f, -0.003037f, +0.003941f, +0.004817f, +0.002995f, +0.004495f, + -0.000456f, +0.007436f, -0.003743f, +0.002820f, +0.002352f, -0.000643f, +0.003455f, -0.004054f, +0.001650f, +0.006395f, + -0.007729f, -0.000125f, +0.003945f, +0.001024f, +0.000539f, +0.003453f, -0.004603f, -0.003317f, -0.004355f, +0.002049f, + +0.002853f, +0.004188f, -0.000632f, +0.002290f, -0.003894f, -0.002407f + }, + { + -0.033563f, -0.103273f, +0.003317f, -0.007842f, +0.026696f, +0.069116f, -0.011531f, +0.016968f, -0.002760f, -0.005532f, + +0.001220f, +0.032210f, -0.018805f, -0.010324f, -0.029955f, -0.011573f, -0.030998f, +0.002812f, +0.000702f, +0.006928f, + +0.020077f, +0.013634f, -0.010101f, -0.010780f, -0.016397f, -0.001060f, -0.006758f, -0.008455f, -0.005375f, +0.000403f, + +0.012872f, -0.038466f, -0.023830f, -0.005714f, -0.009902f, +0.021297f, +0.012427f, +0.007193f, +0.002220f, +0.007251f, + +0.010177f, -0.017274f, -0.004940f, -0.012721f, +0.001136f, -0.011187f, +0.011144f, +0.000184f, +0.001159f, +0.015631f, + -0.005584f, +0.002510f, -0.008112f, +0.008415f, -0.013234f, +0.000577f, -0.003736f, +0.002508f, -0.006281f, -0.004790f, + -0.000960f, +0.005796f, +0.006946f, +0.002222f, +0.000235f, +0.004516f, -0.011177f, -0.008320f, -0.009276f, +0.007847f, + +0.000719f, +0.006904f, +0.002784f, -0.001538f, +0.005294f, -0.002235f, +0.003371f, +0.000215f, -0.000058f, +0.004325f, + -0.001662f, +0.001319f, +0.001844f, +0.000818f, +0.004716f, +0.006197f, -0.007025f, -0.001256f, +0.000223f, -0.003085f, + -0.001395f, -0.002573f, +0.000921f, +0.001562f, -0.000753f, +0.002642f + }, + { + +0.002981f, -0.059915f, -0.022595f, +0.008259f, -0.009065f, -0.007690f, +0.033681f, -0.012111f, +0.012040f, +0.028961f, + -0.009110f, -0.010416f, -0.014714f, -0.030265f, +0.059586f, +0.025945f, -0.047895f, -0.002299f, -0.000644f, +0.007123f, + -0.012166f, +0.019955f, +0.020219f, +0.027763f, +0.006601f, +0.014834f, -0.013594f, +0.021797f, +0.026997f, -0.002585f, + -0.037599f, -0.007640f, -0.004921f, -0.000808f, +0.006469f, -0.001180f, +0.022424f, +0.005579f, -0.011893f, +0.005284f, + +0.019178f, +0.012918f, +0.009522f, +0.009663f, +0.004879f, -0.016205f, -0.001235f, +0.009775f, +0.007469f, +0.017139f, + +0.015746f, +0.002275f, +0.001422f, +0.012047f, -0.007115f, +0.000350f, +0.006933f, -0.001083f, +0.005649f, +0.004873f, + -0.002432f, -0.002635f, +0.002603f, -0.003561f, +0.003507f, -0.000973f, +0.011754f, -0.005674f, +0.000172f, +0.001141f, + -0.004405f, -0.002402f, +0.001591f, +0.000624f, -0.010093f, +0.004258f, +0.000909f, +0.003334f, -0.002311f, -0.005210f, + +0.004385f, +0.010708f, -0.000045f, +0.000663f, +0.003107f, +0.000477f, -0.002891f, -0.004282f, -0.001507f, +0.005005f, + -0.001274f, +0.003774f, +0.003491f, +0.001221f, +0.000883f, +0.002190f + }, + { + -0.026590f, -0.135543f, +0.015018f, -0.006206f, +0.026766f, +0.082717f, +0.010623f, -0.016561f, -0.045477f, -0.002971f, + +0.008449f, +0.004921f, +0.054069f, +0.006294f, +0.074226f, +0.030447f, -0.019143f, +0.010145f, +0.048306f, +0.002468f, + -0.015725f, -0.012885f, +0.007939f, -0.020816f, +0.016731f, -0.000390f, +0.010066f, -0.028279f, -0.003746f, -0.001241f, + +0.013385f, +0.016161f, -0.021576f, -0.026187f, -0.025344f, -0.005126f, -0.004987f, -0.023913f, -0.005040f, -0.001497f, + +0.002919f, +0.007869f, +0.011361f, -0.009659f, +0.022167f, -0.008714f, -0.014278f, -0.010755f, +0.002764f, -0.005686f, + -0.000769f, +0.004496f, +0.004238f, -0.003090f, -0.008860f, -0.003695f, +0.002630f, +0.000191f, +0.006856f, -0.003561f, + -0.008464f, +0.005459f, -0.012492f, +0.002193f, -0.006086f, -0.004003f, +0.002077f, +0.002624f, +0.000950f, +0.002152f, + -0.001280f, +0.010882f, -0.006949f, -0.000754f, +0.009898f, +0.003739f, +0.004336f, -0.004327f, -0.000642f, -0.003755f, + +0.004962f, -0.000592f, -0.003536f, -0.003815f, +0.002550f, +0.003131f, +0.000876f, +0.002624f, +0.004896f, -0.002506f, + +0.001632f, -0.002810f, +0.000701f, +0.002506f, +0.000607f, +0.000532f + } + }, + { + { + -0.002845f, +0.098158f, -0.041338f, -0.041723f, -0.028323f, +0.002722f, +0.006905f, -0.001438f, +0.000389f, -0.004706f, + +0.015019f, -0.008325f, +0.001432f, +0.008125f, -0.010347f, +0.001686f, -0.003372f, -0.020329f, +0.013931f, +0.008604f, + +0.016358f, +0.012381f, +0.000103f, +0.009092f, +0.016872f, -0.031310f, -0.005623f, -0.007372f, +0.007692f, -0.034117f, + -0.002729f, -0.011454f, -0.012889f, +0.006996f, +0.001795f, +0.005700f, +0.005683f, -0.005123f, +0.009015f, -0.008558f, + -0.008753f, +0.016558f, +0.005574f, +0.001335f, -0.005629f, +0.002556f, +0.015110f, +0.003728f, -0.013783f, +0.015096f, + +0.007203f, -0.001633f, -0.001325f, -0.003058f, -0.014911f, -0.004764f, +0.008854f, -0.002574f, +0.003419f, +0.003374f, + -0.010978f, +0.001773f, -0.004326f, -0.007060f, -0.000987f, -0.007603f, -0.002168f, +0.002669f, +0.003833f, -0.000043f, + +0.001511f, -0.003453f, +0.001717f, +0.002844f, +0.001723f, -0.004843f, -0.001405f, +0.001607f, -0.000310f, -0.001728f, + -0.000342f, -0.003040f, -0.002327f, +0.001666f, +0.000007f, +0.000226f, +0.002766f, +0.001995f, +0.003851f, +0.000771f, + +0.001005f, +0.001836f, -0.001393f, +0.001638f, +0.002040f, +0.001262f + }, + { + -0.010301f, -0.032570f, +0.016091f, +0.128825f, +0.000887f, -0.010646f, -0.016930f, +0.007203f, -0.003082f, -0.001108f, + +0.000162f, -0.004156f, +0.003077f, -0.014225f, +0.011634f, +0.013387f, -0.010797f, -0.010142f, +0.041788f, -0.019305f, + +0.000675f, +0.016284f, +0.006208f, +0.009121f, +0.004641f, -0.000340f, +0.022082f, +0.010512f, -0.002668f, -0.003209f, + -0.004882f, +0.004138f, -0.003798f, +0.006824f, +0.001045f, -0.002798f, +0.006459f, +0.010023f, -0.004729f, +0.003007f, + +0.001371f, +0.010812f, +0.002110f, -0.001470f, +0.013507f, -0.011864f, +0.001447f, +0.003878f, -0.005151f, +0.006115f, + -0.007512f, -0.007483f, -0.002192f, -0.010223f, +0.006498f, -0.000871f, +0.000960f, +0.002164f, -0.006424f, -0.003352f, + -0.009012f, -0.002386f, -0.004993f, +0.009024f, +0.009625f, +0.005393f, +0.007319f, +0.003555f, +0.000088f, +0.002637f, + +0.000546f, -0.001146f, -0.003138f, -0.006144f, -0.001756f, -0.000699f, +0.000079f, -0.002223f, +0.001679f, +0.000669f, + +0.001063f, -0.001183f, +0.002040f, -0.002401f, -0.000222f, +0.001811f, -0.001233f, +0.000209f, +0.001409f, -0.002029f, + +0.000090f, +0.001004f, +0.001647f, -0.000852f, +0.000197f, -0.002680f + }, + { + +0.002425f, +0.154058f, -0.024490f, +0.010987f, -0.041565f, -0.003074f, +0.007382f, -0.011926f, +0.011496f, +0.004215f, + -0.003621f, +0.001655f, +0.000329f, -0.010271f, -0.000713f, +0.005798f, +0.008601f, -0.017084f, -0.009516f, +0.004921f, + -0.003066f, +0.005325f, -0.007143f, +0.000767f, +0.003740f, +0.016839f, -0.012201f, +0.016663f, -0.006937f, -0.023537f, + -0.007414f, -0.006511f, +0.000137f, +0.001733f, -0.002287f, -0.000170f, +0.006753f, +0.000646f, +0.009525f, -0.007725f, + -0.004797f, +0.007538f, +0.009121f, -0.001007f, -0.013531f, +0.007247f, +0.002069f, +0.003733f, +0.000127f, +0.002199f, + +0.013490f, -0.008177f, -0.003755f, -0.000981f, -0.001463f, -0.000286f, -0.000836f, +0.000314f, +0.005400f, +0.001073f, + -0.004028f, +0.000548f, +0.000944f, +0.007896f, -0.001203f, +0.003183f, -0.002751f, +0.002684f, -0.003506f, -0.004074f, + +0.000342f, -0.004582f, +0.001751f, +0.001872f, -0.007599f, -0.000512f, -0.001271f, -0.002382f, +0.003317f, +0.004342f, + +0.002752f, +0.004464f, +0.001023f, -0.004086f, +0.000480f, +0.002981f, +0.000838f, -0.001859f, +0.000222f, +0.000993f, + -0.001603f, +0.001192f, -0.000561f, +0.003198f, -0.001514f, -0.000997f + }, + { + +0.001296f, +0.092170f, +0.016154f, -0.011435f, +0.000781f, -0.000652f, +0.000689f, -0.000865f, +0.004682f, +0.022868f, + -0.018405f, -0.003766f, -0.003381f, -0.008913f, -0.029114f, +0.000712f, -0.021770f, -0.010602f, -0.007028f, -0.005227f, + -0.010169f, +0.002161f, +0.012783f, +0.023897f, -0.002588f, +0.004183f, +0.003778f, +0.006217f, +0.000536f, -0.005269f, + -0.006706f, +0.011837f, +0.014682f, -0.010232f, +0.001919f, -0.022942f, -0.013750f, +0.008087f, -0.002843f, -0.008974f, + +0.011236f, -0.004253f, -0.015384f, +0.005471f, -0.020989f, +0.008711f, -0.001472f, -0.003085f, -0.006681f, +0.004185f, + -0.011954f, -0.013748f, +0.004446f, +0.009873f, -0.007926f, +0.003327f, +0.003219f, +0.007862f, -0.005252f, +0.001094f, + -0.004462f, -0.001100f, -0.001877f, +0.003550f, +0.006338f, -0.005332f, +0.008211f, -0.000604f, -0.002188f, +0.001357f, + -0.001578f, -0.004004f, +0.004417f, -0.002113f, +0.001478f, +0.002877f, -0.002005f, -0.008202f, -0.004971f, -0.000119f, + -0.003962f, -0.001626f, -0.000903f, +0.000410f, -0.000190f, +0.001092f, -0.001173f, +0.005608f, -0.002050f, -0.000341f, + -0.000875f, -0.001824f, -0.003495f, -0.004015f, +0.000627f, -0.002562f + }, + { + +0.004139f, -0.347644f, +0.011394f, +0.070553f, +0.003351f, +0.003842f, -0.020487f, +0.015352f, +0.004318f, -0.031982f, + +0.038276f, -0.026409f, -0.000876f, +0.000401f, -0.002956f, -0.006718f, +0.004847f, -0.023024f, +0.019598f, -0.001091f, + -0.013983f, -0.005429f, -0.001950f, +0.013014f, -0.000396f, +0.000310f, +0.009650f, +0.009236f, +0.008724f, +0.016625f, + -0.004753f, +0.003434f, +0.003901f, +0.005167f, +0.002449f, +0.006135f, +0.003205f, +0.002632f, -0.002091f, +0.002621f, + +0.007896f, -0.002756f, -0.013580f, -0.000521f, +0.000540f, +0.007705f, +0.015179f, -0.015669f, -0.013984f, +0.005878f, + -0.014026f, +0.007473f, +0.008474f, -0.000679f, -0.001960f, +0.000222f, +0.000632f, -0.000803f, +0.008029f, +0.002799f, + -0.005779f, +0.003381f, -0.008461f, -0.006062f, +0.005767f, +0.005320f, -0.003456f, -0.002090f, +0.001188f, -0.001571f, + +0.002864f, +0.000672f, +0.002594f, +0.000764f, +0.002143f, -0.000410f, -0.003794f, +0.001730f, -0.004514f, +0.003696f, + -0.000200f, +0.001483f, +0.000541f, -0.005767f, +0.000108f, -0.001976f, -0.000755f, +0.000917f, -0.000988f, +0.000355f, + -0.000083f, +0.005383f, +0.000054f, -0.001324f, +0.000064f, +0.000704f + }, + { + -0.005280f, -0.032372f, -0.059784f, -0.026981f, +0.020391f, -0.003505f, -0.008708f, +0.005225f, +0.010227f, +0.005880f, + -0.006491f, +0.015366f, +0.012553f, +0.001603f, +0.025671f, +0.005129f, -0.019844f, +0.003434f, -0.002059f, +0.001886f, + +0.005926f, +0.003287f, +0.004909f, +0.031410f, -0.026358f, +0.040511f, -0.011371f, +0.005113f, +0.004091f, +0.008110f, + +0.024740f, +0.016164f, -0.015902f, +0.011017f, -0.004301f, +0.002294f, -0.000152f, -0.011939f, -0.006230f, +0.012445f, + -0.006440f, +0.001481f, -0.000690f, +0.008084f, +0.005357f, -0.006417f, -0.002703f, +0.004919f, -0.000358f, +0.006166f, + +0.005740f, +0.002262f, +0.007436f, +0.005217f, -0.002362f, +0.002576f, -0.007522f, -0.001861f, -0.006405f, +0.001942f, + +0.004079f, -0.000111f, +0.000980f, -0.001653f, +0.003551f, +0.000303f, +0.001576f, -0.003286f, +0.006043f, +0.000352f, + +0.006804f, -0.007444f, -0.006755f, -0.001273f, +0.001798f, +0.000673f, +0.002764f, -0.000404f, +0.004395f, +0.000530f, + -0.003911f, +0.001378f, +0.002188f, -0.001191f, -0.000257f, -0.003725f, +0.002594f, +0.000066f, -0.001597f, -0.000049f, + -0.001271f, -0.000008f, -0.006076f, -0.000513f, +0.002082f, -0.000278f + }, + { + +0.011620f, -0.356596f, +0.014883f, +0.101424f, -0.002852f, -0.006025f, +0.000423f, -0.020390f, +0.026376f, -0.009836f, + +0.004431f, -0.003565f, +0.004432f, +0.002860f, -0.008213f, -0.003896f, +0.030427f, -0.019476f, -0.011646f, +0.020437f, + +0.001626f, +0.002142f, -0.017707f, +0.020864f, +0.017404f, -0.006103f, +0.016040f, +0.000456f, +0.007351f, +0.007655f, + -0.006573f, -0.004316f, +0.003852f, +0.000767f, +0.006936f, -0.001516f, -0.002083f, -0.009872f, +0.002358f, -0.000430f, + +0.004299f, -0.005947f, +0.011344f, +0.003864f, -0.003805f, +0.002263f, -0.007377f, +0.000382f, +0.009300f, +0.000357f, + -0.002757f, -0.005486f, +0.010459f, +0.005125f, +0.005101f, -0.003761f, -0.007571f, -0.015132f, -0.000599f, -0.000585f, + +0.001863f, -0.010934f, -0.000628f, +0.007673f, -0.007173f, -0.003119f, +0.001250f, -0.001519f, -0.001077f, +0.000505f, + +0.001605f, -0.000605f, -0.001297f, -0.004274f, +0.003155f, +0.003516f, +0.001209f, +0.001416f, -0.001608f, -0.002604f, + -0.000517f, +0.000182f, -0.002647f, +0.002114f, +0.002833f, +0.000145f, +0.002726f, +0.000850f, -0.001403f, +0.000110f, + -0.000914f, +0.002246f, +0.001547f, +0.000136f, -0.002474f, +0.003876f + }, + { + -0.005094f, -0.082928f, -0.052459f, -0.016718f, +0.017689f, +0.008010f, -0.003157f, +0.000519f, +0.004238f, -0.000538f, + +0.013275f, -0.003611f, +0.003441f, -0.004262f, +0.007968f, +0.026710f, -0.052508f, -0.018163f, +0.025494f, +0.031053f, + +0.000804f, +0.010755f, +0.003764f, -0.027368f, +0.013581f, -0.022673f, +0.001212f, -0.006855f, +0.015914f, -0.001002f, + -0.017211f, +0.002927f, -0.011781f, -0.004787f, -0.002597f, -0.013778f, -0.009333f, +0.016143f, -0.009756f, -0.001841f, + +0.005061f, -0.000413f, -0.009483f, -0.011325f, +0.003281f, -0.002522f, -0.004421f, +0.005300f, +0.017296f, -0.008174f, + +0.009771f, -0.001344f, -0.012333f, +0.004608f, +0.006444f, -0.003360f, +0.007358f, +0.003450f, +0.000348f, -0.010769f, + +0.000747f, +0.002514f, -0.003300f, +0.000223f, +0.000248f, +0.002166f, -0.000191f, +0.000693f, -0.001686f, -0.005808f, + +0.000461f, +0.001963f, +0.004715f, -0.000844f, +0.004987f, +0.006561f, -0.000608f, -0.004284f, +0.003162f, +0.001199f, + -0.001274f, -0.000322f, +0.001666f, -0.001960f, +0.001384f, +0.002987f, -0.003462f, +0.000770f, -0.001828f, +0.001674f, + +0.000317f, +0.002032f, -0.002073f, +0.000024f, -0.002314f, +0.000207f + }, + { + +0.011661f, -0.325268f, -0.000830f, +0.102723f, +0.000410f, -0.022069f, -0.007512f, -0.016016f, +0.011325f, -0.014096f, + -0.011417f, -0.023346f, +0.018863f, -0.005308f, -0.013351f, -0.029068f, +0.011495f, +0.000944f, -0.002924f, -0.020008f, + +0.007398f, +0.001794f, +0.007691f, -0.005076f, -0.001264f, -0.002394f, -0.009235f, +0.015076f, -0.000043f, -0.002453f, + +0.003301f, +0.009542f, +0.012745f, +0.006015f, -0.000511f, -0.001488f, -0.003146f, +0.015161f, -0.004567f, -0.012823f, + +0.006498f, +0.008003f, -0.001039f, -0.003643f, -0.008645f, -0.017264f, -0.006132f, +0.015808f, +0.000985f, +0.005213f, + +0.003270f, -0.003146f, -0.001183f, +0.000601f, +0.006569f, +0.003909f, -0.001110f, -0.001909f, -0.002271f, -0.001771f, + -0.002146f, -0.008203f, -0.011688f, +0.003171f, +0.003584f, +0.000197f, -0.002678f, -0.006822f, -0.004614f, -0.004091f, + -0.006874f, +0.007593f, -0.002555f, +0.005608f, -0.004283f, +0.001752f, +0.002254f, +0.001872f, -0.001552f, +0.000166f, + +0.001307f, +0.001610f, +0.004863f, +0.004327f, -0.000979f, -0.002539f, +0.003475f, -0.000516f, +0.000115f, -0.003757f, + -0.000935f, +0.001209f, -0.001425f, +0.002686f, -0.000208f, -0.000535f + }, + { + +0.000753f, +0.094013f, +0.051104f, -0.024576f, -0.027690f, -0.013609f, +0.043574f, -0.004189f, -0.005099f, -0.008979f, + +0.017846f, +0.008949f, -0.013596f, +0.011684f, -0.013513f, -0.005048f, +0.027822f, +0.015513f, -0.008758f, -0.032674f, + +0.018484f, -0.000047f, +0.014784f, -0.011235f, -0.003450f, -0.008280f, -0.012377f, +0.002782f, +0.019497f, -0.010431f, + -0.007480f, -0.002684f, -0.022310f, +0.012572f, -0.035079f, -0.007788f, +0.016027f, +0.003926f, -0.016826f, -0.000414f, + -0.003492f, +0.007441f, -0.007467f, +0.026006f, -0.029015f, -0.002267f, -0.010650f, +0.001940f, +0.009222f, -0.009268f, + +0.010820f, -0.009138f, -0.013860f, +0.013977f, +0.012643f, +0.005560f, +0.002592f, +0.001778f, +0.013907f, +0.005123f, + +0.014252f, -0.000414f, -0.000675f, -0.003521f, -0.001832f, +0.008178f, -0.000220f, +0.000641f, +0.009215f, -0.006280f, + -0.002197f, -0.004245f, +0.002480f, +0.010356f, -0.006310f, -0.002632f, -0.000394f, +0.005007f, +0.005262f, +0.002614f, + +0.002809f, -0.001115f, -0.004704f, +0.001451f, -0.004716f, -0.001961f, -0.003273f, +0.002494f, +0.002514f, -0.001725f, + +0.000965f, +0.001061f, +0.003659f, -0.000911f, +0.001092f, -0.000134f + }, + { + -0.005247f, -0.255562f, -0.018018f, -0.005643f, +0.018528f, +0.004958f, -0.009991f, -0.007784f, +0.027793f, +0.018177f, + -0.009309f, -0.002299f, +0.023513f, +0.034779f, +0.014103f, +0.033351f, +0.002642f, +0.016267f, +0.020605f, +0.016774f, + +0.005086f, -0.008700f, +0.006350f, -0.015728f, -0.000534f, +0.018017f, -0.011173f, -0.008989f, +0.005771f, -0.030890f, + -0.000750f, +0.005141f, -0.005347f, -0.003416f, -0.025522f, +0.011880f, +0.005356f, -0.004395f, +0.001810f, -0.002618f, + +0.003180f, +0.008712f, +0.013769f, -0.009544f, -0.016746f, -0.005316f, -0.001789f, -0.015158f, +0.005653f, -0.012004f, + +0.005320f, +0.000324f, -0.012503f, -0.003360f, +0.001928f, +0.007600f, -0.005367f, +0.001565f, +0.007322f, -0.012020f, + +0.010735f, +0.001096f, +0.005582f, -0.006015f, -0.004064f, +0.006810f, -0.003442f, +0.007297f, -0.000230f, -0.002618f, + +0.007065f, -0.008804f, -0.006446f, -0.008377f, -0.006867f, +0.003413f, -0.002359f, +0.004951f, -0.002045f, +0.000180f, + +0.001369f, -0.003895f, -0.005026f, +0.000889f, -0.000926f, -0.000919f, -0.000431f, +0.001178f, +0.005465f, -0.001836f, + -0.002932f, +0.000465f, -0.001489f, -0.001132f, -0.005178f, -0.001434f + }, + { + +0.000096f, +0.109681f, -0.003683f, +0.002639f, +0.001263f, -0.005480f, +0.007852f, -0.019993f, -0.003886f, -0.010610f, + +0.014300f, -0.017647f, +0.011281f, +0.025759f, -0.014657f, +0.051088f, -0.008490f, +0.006639f, -0.008990f, +0.007002f, + +0.007486f, +0.002449f, +0.024962f, -0.010232f, -0.011988f, -0.000036f, +0.003040f, +0.001887f, -0.002426f, -0.017584f, + +0.003244f, +0.004767f, +0.008721f, +0.003910f, -0.001308f, -0.010184f, +0.024219f, -0.004338f, -0.003770f, +0.004708f, + -0.001919f, -0.001980f, -0.007809f, +0.010390f, -0.000046f, -0.010518f, +0.005756f, -0.001758f, +0.003070f, -0.010454f, + -0.016595f, +0.004482f, -0.010897f, +0.008953f, -0.010723f, +0.007335f, +0.010664f, -0.002503f, +0.011676f, -0.005867f, + +0.004932f, +0.007078f, -0.007495f, -0.004047f, +0.002830f, -0.001427f, -0.003096f, -0.003965f, +0.000980f, +0.002323f, + -0.008390f, +0.001704f, -0.004739f, +0.002387f, +0.002939f, -0.002047f, +0.000233f, -0.002554f, +0.001615f, +0.005728f, + -0.004607f, -0.002578f, -0.001053f, +0.001187f, +0.001889f, +0.004019f, -0.001229f, -0.000108f, -0.001194f, +0.002622f, + +0.000304f, +0.003483f, -0.001225f, +0.003425f, -0.000686f, -0.000277f + }, + { + +0.035019f, -0.083048f, -0.063877f, -0.034040f, +0.013631f, +0.019339f, -0.068516f, -0.002975f, -0.010026f, +0.007217f, + -0.010135f, +0.008691f, +0.000492f, +0.036148f, +0.021787f, -0.004132f, -0.020215f, -0.002237f, -0.005360f, +0.001755f, + +0.003789f, +0.008422f, -0.001698f, -0.000133f, -0.014158f, -0.000657f, -0.015227f, -0.004946f, -0.003436f, -0.015785f, + +0.003222f, -0.025718f, -0.002066f, -0.001340f, -0.013658f, +0.007979f, +0.001335f, -0.000496f, -0.004378f, +0.009221f, + +0.012402f, -0.010003f, +0.002623f, +0.000573f, +0.001372f, -0.010828f, +0.011145f, +0.005084f, -0.000021f, +0.007810f, + +0.000508f, +0.005798f, -0.002067f, +0.009251f, -0.016806f, +0.000507f, -0.010494f, +0.003034f, +0.004225f, -0.003959f, + -0.005485f, +0.002919f, +0.008697f, +0.009657f, -0.000870f, +0.001945f, -0.011035f, -0.007510f, -0.011169f, +0.003213f, + +0.000961f, +0.010648f, +0.000640f, +0.000731f, +0.009245f, +0.001037f, +0.003053f, -0.007377f, -0.008292f, -0.002075f, + -0.002375f, +0.000779f, -0.001720f, -0.002699f, -0.000439f, +0.003135f, -0.004853f, +0.002728f, +0.004316f, +0.001340f, + -0.002024f, -0.003453f, -0.002400f, -0.001155f, -0.002512f, +0.000625f + }, + { + -0.001648f, +0.026502f, +0.026042f, +0.001294f, -0.005435f, +0.005724f, +0.031845f, -0.012163f, +0.003164f, +0.017519f, + +0.003113f, -0.005121f, -0.020952f, -0.052612f, +0.059153f, +0.048832f, -0.008801f, +0.021980f, +0.015351f, +0.011001f, + -0.043323f, +0.003685f, +0.012507f, +0.004827f, +0.010074f, +0.001796f, -0.025991f, +0.018318f, +0.023930f, +0.017552f, + -0.018303f, -0.008249f, +0.003128f, +0.002243f, -0.008279f, -0.011238f, +0.020757f, +0.001202f, -0.006713f, -0.005339f, + +0.000586f, +0.001476f, -0.000778f, -0.004319f, +0.005394f, -0.005608f, -0.003386f, -0.004453f, -0.004038f, +0.003769f, + +0.005127f, -0.003481f, -0.000631f, +0.015476f, -0.001063f, +0.001557f, +0.003403f, -0.001818f, -0.000676f, -0.007009f, + -0.008563f, -0.008592f, -0.006501f, -0.005637f, +0.001047f, -0.004507f, +0.006073f, -0.005732f, +0.002022f, +0.003160f, + +0.000970f, -0.003058f, -0.001481f, +0.004525f, -0.006629f, +0.001570f, +0.001148f, +0.006695f, +0.002824f, -0.001759f, + -0.000574f, +0.005679f, +0.001776f, +0.000187f, +0.001405f, +0.005670f, +0.001543f, -0.005212f, -0.001303f, +0.004009f, + -0.003657f, +0.001543f, -0.001309f, -0.002380f, -0.002315f, +0.002135f + }, + { + +0.027637f, -0.122965f, -0.022229f, -0.017338f, -0.008992f, +0.006587f, -0.034625f, +0.010876f, -0.012810f, +0.007881f, + -0.009107f, -0.016707f, +0.015237f, +0.001096f, +0.062815f, -0.001139f, -0.000998f, +0.018060f, +0.020366f, +0.003553f, + +0.003707f, -0.015115f, +0.011269f, +0.004222f, +0.023726f, -0.004946f, +0.013819f, -0.008795f, +0.014541f, -0.005065f, + -0.017438f, -0.001334f, -0.004077f, +0.006524f, +0.001763f, -0.001800f, +0.001850f, -0.016163f, -0.014570f, -0.008571f, + +0.003104f, +0.003932f, +0.014931f, -0.004403f, +0.019126f, -0.002191f, +0.008634f, -0.002670f, +0.002749f, -0.003188f, + -0.003127f, +0.002663f, +0.002980f, -0.004170f, -0.002129f, +0.000989f, -0.001814f, -0.013293f, -0.001759f, +0.009575f, + -0.001851f, +0.006413f, -0.007119f, +0.000785f, +0.001271f, -0.001212f, -0.006797f, -0.000043f, +0.002942f, +0.004202f, + -0.002406f, +0.008471f, -0.005867f, -0.006227f, +0.001592f, +0.001342f, +0.003184f, -0.004645f, +0.004505f, +0.001136f, + +0.000311f, -0.002628f, -0.003711f, -0.002285f, +0.002419f, +0.000077f, +0.001447f, +0.001808f, +0.002144f, -0.004159f, + +0.001752f, +0.001508f, +0.005718f, +0.004470f, +0.000401f, -0.001749f + } + }, + { + { + +0.004152f, -0.028546f, +0.064053f, -0.058586f, -0.046700f, +0.010821f, +0.000999f, +0.008239f, +0.002802f, -0.014521f, + +0.018518f, -0.005393f, -0.005553f, +0.011074f, -0.020909f, +0.002233f, +0.011313f, -0.007855f, +0.016681f, +0.010869f, + +0.020860f, -0.018434f, +0.012929f, +0.028339f, +0.021898f, -0.050395f, -0.002610f, -0.003896f, +0.013568f, -0.011641f, + -0.028670f, -0.008994f, -0.010810f, -0.000089f, +0.011508f, +0.006371f, -0.005569f, +0.006000f, -0.003248f, -0.001187f, + +0.004281f, +0.001784f, +0.022081f, -0.016315f, +0.002881f, +0.009219f, -0.000179f, +0.002399f, +0.001266f, +0.009914f, + +0.000523f, +0.002548f, +0.001663f, -0.012329f, +0.000391f, -0.004056f, -0.005689f, +0.004213f, +0.006808f, -0.005741f, + -0.000056f, -0.007008f, -0.001323f, -0.005829f, -0.006183f, -0.000613f, -0.003770f, +0.005850f, -0.001741f, -0.000980f, + -0.003968f, +0.001724f, +0.001665f, -0.000424f, -0.000329f, +0.002617f, -0.001284f, -0.000518f, -0.003049f, -0.000136f, + -0.002297f, +0.000358f, -0.002404f, -0.000085f, -0.001450f, +0.001754f, -0.000076f, +0.004445f, +0.000200f, +0.002641f, + +0.003796f, +0.001553f, -0.000918f, -0.000388f, +0.001056f, +0.000300f + }, + { + +0.012291f, +0.072374f, -0.019711f, -0.000158f, +0.070717f, -0.008249f, +0.001699f, -0.015811f, -0.012173f, +0.014717f, + -0.014379f, +0.007144f, -0.002544f, -0.000993f, -0.006603f, +0.007312f, -0.015153f, +0.007232f, +0.018195f, -0.007627f, + +0.001030f, +0.016149f, +0.012955f, +0.010485f, -0.015040f, +0.003552f, +0.022445f, +0.022988f, -0.004691f, -0.011845f, + -0.007825f, +0.007273f, +0.000963f, -0.000110f, +0.007718f, +0.003807f, +0.000207f, +0.010436f, +0.001068f, -0.005609f, + +0.010375f, -0.007589f, +0.013098f, -0.005093f, +0.009193f, -0.010261f, +0.001388f, +0.007151f, +0.002334f, -0.009127f, + +0.006394f, -0.015287f, -0.006659f, -0.006162f, +0.011531f, -0.002139f, -0.003297f, +0.006317f, -0.003232f, -0.009537f, + +0.002242f, -0.005576f, -0.004395f, +0.009938f, +0.008169f, +0.000120f, +0.004289f, +0.008689f, +0.001911f, -0.002107f, + +0.002982f, -0.002015f, -0.002946f, -0.002277f, -0.003841f, -0.002122f, +0.001275f, -0.001809f, -0.001354f, +0.009891f, + -0.001887f, -0.002913f, +0.001522f, -0.003505f, +0.003232f, +0.000896f, -0.002079f, +0.001598f, -0.002433f, -0.002390f, + +0.002641f, +0.002009f, +0.003092f, -0.001170f, -0.000655f, -0.005338f + }, + { + -0.002107f, +0.191159f, -0.033511f, -0.072493f, +0.030441f, +0.005824f, +0.000275f, -0.008983f, -0.003143f, -0.001825f, + +0.008847f, -0.015313f, +0.003735f, -0.014851f, -0.002358f, +0.020112f, -0.000444f, +0.000363f, -0.024877f, -0.004509f, + +0.003536f, +0.015759f, -0.012787f, -0.008064f, +0.028173f, -0.006249f, +0.000983f, +0.002800f, +0.006132f, -0.019439f, + -0.010949f, -0.005693f, +0.010136f, -0.015308f, -0.002438f, +0.005176f, +0.006501f, +0.010804f, +0.003629f, -0.011246f, + +0.003156f, +0.003561f, +0.015221f, -0.008773f, -0.014863f, +0.009314f, +0.004930f, +0.001477f, -0.007326f, +0.006116f, + +0.012496f, -0.008140f, -0.003824f, +0.005304f, -0.008458f, -0.001722f, -0.007543f, +0.007361f, +0.006247f, +0.005674f, + -0.006432f, +0.001192f, -0.001108f, +0.011173f, -0.002779f, +0.001987f, +0.001554f, -0.005630f, -0.004083f, -0.003556f, + -0.001802f, -0.004413f, +0.003982f, +0.001991f, -0.006306f, +0.000726f, -0.001209f, +0.001600f, -0.001107f, +0.001555f, + +0.004430f, +0.001586f, -0.001021f, -0.005055f, +0.002266f, +0.003637f, -0.000705f, -0.001179f, +0.000579f, +0.000766f, + +0.001373f, -0.000294f, -0.000837f, +0.000414f, -0.000583f, +0.000289f + }, + { + +0.000674f, +0.085364f, +0.025428f, -0.018664f, -0.004949f, +0.004052f, +0.001173f, -0.002288f, -0.004545f, +0.009896f, + +0.018132f, -0.022345f, +0.002803f, -0.022885f, -0.026279f, -0.004875f, -0.016431f, -0.018722f, -0.018822f, +0.007620f, + -0.019749f, +0.000551f, +0.007522f, +0.012107f, +0.011325f, +0.015985f, -0.007626f, +0.002288f, +0.010079f, -0.018054f, + +0.008656f, +0.010886f, +0.007991f, -0.001814f, +0.000146f, -0.026404f, -0.017270f, +0.001349f, +0.003329f, +0.004195f, + -0.005207f, +0.000792f, -0.022912f, +0.004651f, -0.016248f, +0.001867f, +0.005880f, -0.015889f, +0.014683f, +0.002012f, + -0.025312f, -0.005443f, +0.005910f, +0.009329f, -0.014083f, +0.001392f, +0.012692f, -0.004360f, +0.007889f, -0.001646f, + -0.005825f, -0.007082f, +0.003354f, +0.002840f, +0.004397f, -0.002826f, +0.003379f, +0.003058f, -0.006081f, +0.002902f, + -0.000492f, -0.000893f, -0.000158f, +0.000793f, -0.005095f, +0.005320f, +0.000558f, -0.009784f, -0.002415f, -0.004744f, + -0.003227f, -0.002891f, +0.000587f, -0.000473f, -0.002788f, +0.002399f, +0.000001f, +0.003086f, -0.001569f, -0.001301f, + -0.001137f, -0.000005f, -0.005652f, -0.004789f, +0.002318f, -0.001962f + }, + { + -0.004983f, -0.287697f, -0.013148f, +0.074242f, +0.001226f, +0.002354f, -0.009804f, +0.002901f, +0.007911f, -0.014863f, + +0.013480f, -0.007086f, -0.010499f, -0.000603f, +0.007036f, +0.003915f, -0.002196f, -0.008479f, +0.005776f, -0.011927f, + -0.003805f, -0.022204f, +0.024474f, +0.003987f, -0.000467f, -0.003904f, +0.003395f, +0.011331f, +0.014469f, +0.015784f, + +0.001272f, +0.012356f, -0.008395f, +0.013786f, +0.000202f, +0.004680f, +0.002059f, -0.002977f, +0.008168f, +0.001259f, + -0.003087f, +0.009058f, -0.010374f, +0.000606f, +0.000292f, +0.003652f, -0.000888f, -0.003731f, -0.008147f, +0.000434f, + -0.003797f, -0.012101f, +0.008161f, -0.001007f, +0.002063f, +0.004610f, -0.003146f, +0.004479f, +0.005593f, +0.004125f, + -0.001859f, -0.003152f, -0.012249f, -0.001815f, +0.005550f, +0.008323f, -0.007755f, +0.000474f, +0.001547f, -0.000709f, + +0.004339f, +0.001089f, +0.003056f, -0.005008f, +0.005027f, -0.000170f, -0.000009f, -0.006486f, -0.003433f, +0.001325f, + -0.000228f, +0.004259f, -0.001078f, -0.007278f, +0.001844f, -0.004107f, -0.000558f, +0.002831f, -0.001363f, +0.001203f, + -0.001157f, +0.008065f, +0.000051f, -0.000616f, +0.000553f, -0.002313f + }, + { + -0.000176f, -0.067386f, -0.063749f, +0.008515f, -0.005868f, +0.001676f, -0.004288f, +0.001199f, +0.003905f, +0.006237f, + +0.000676f, +0.006942f, +0.020255f, +0.012145f, +0.010253f, +0.024766f, -0.037143f, +0.004754f, -0.025392f, +0.013822f, + +0.004507f, +0.006143f, +0.009945f, +0.022351f, +0.005743f, +0.024302f, -0.012240f, -0.000085f, +0.018941f, +0.012759f, + +0.013492f, +0.011072f, +0.006390f, -0.005801f, +0.007429f, -0.002855f, +0.006038f, -0.012770f, +0.005142f, -0.013585f, + +0.000578f, +0.000339f, +0.007040f, +0.003788f, +0.003489f, -0.009667f, +0.004310f, -0.005877f, +0.005655f, +0.007128f, + +0.005504f, +0.000360f, +0.015399f, -0.004635f, +0.000045f, -0.003101f, -0.003604f, -0.001853f, +0.005995f, -0.004063f, + +0.004695f, -0.003773f, -0.001433f, +0.000838f, +0.004558f, +0.002428f, +0.000716f, -0.002642f, +0.001430f, +0.005335f, + -0.003402f, -0.000743f, -0.007907f, +0.002057f, -0.001418f, -0.000741f, +0.001671f, -0.001095f, +0.003871f, +0.003440f, + -0.006183f, -0.000763f, +0.005130f, -0.002415f, -0.000435f, -0.001625f, +0.000710f, -0.000283f, -0.002063f, -0.000317f, + -0.000289f, -0.001144f, -0.003256f, -0.001300f, +0.002892f, -0.001402f + }, + { + -0.013569f, -0.272947f, -0.007711f, +0.108365f, +0.000574f, -0.015424f, -0.003778f, -0.006388f, +0.004433f, -0.002265f, + -0.020433f, +0.013904f, +0.003319f, +0.019044f, -0.019922f, -0.000535f, +0.010558f, +0.000302f, -0.028113f, +0.016069f, + +0.021205f, -0.007958f, -0.016987f, +0.035690f, +0.014111f, +0.005932f, +0.003170f, +0.008188f, +0.014120f, -0.007545f, + +0.000152f, -0.011118f, +0.011323f, +0.001411f, -0.001853f, -0.003625f, +0.003766f, -0.002334f, -0.007795f, +0.000560f, + -0.005477f, +0.012254f, -0.001401f, +0.005893f, -0.004201f, -0.001828f, -0.001030f, -0.002068f, +0.002980f, +0.006952f, + -0.002322f, -0.012797f, +0.013086f, +0.001639f, +0.004617f, -0.012607f, -0.005038f, -0.007528f, -0.005852f, -0.007950f, + -0.002351f, +0.000987f, -0.001908f, +0.004113f, -0.003408f, -0.006991f, +0.004717f, -0.001483f, -0.005940f, +0.005770f, + -0.001664f, +0.006135f, -0.000864f, -0.004211f, -0.002632f, +0.004515f, +0.003267f, +0.004413f, -0.003115f, -0.002561f, + -0.003738f, -0.000155f, -0.004719f, +0.005647f, +0.001952f, +0.002168f, +0.000378f, +0.002203f, -0.000260f, -0.003308f, + +0.000935f, +0.001064f, +0.004033f, +0.000961f, -0.002982f, +0.002142f + }, + { + -0.003516f, -0.055949f, -0.123166f, +0.032875f, -0.007223f, +0.008517f, -0.003950f, +0.002250f, -0.002933f, +0.002543f, + +0.016424f, +0.011215f, -0.010355f, +0.007589f, +0.040627f, -0.022065f, -0.027166f, -0.011963f, +0.004958f, +0.018038f, + +0.014809f, +0.006353f, +0.006761f, -0.019345f, +0.009497f, -0.021887f, -0.007918f, +0.013996f, -0.001713f, -0.010789f, + -0.013701f, +0.009918f, -0.007390f, -0.000868f, -0.009994f, -0.015958f, -0.010183f, +0.006951f, -0.001158f, +0.004990f, + +0.000690f, -0.007045f, -0.002683f, -0.011972f, +0.005265f, -0.004892f, -0.001799f, +0.003904f, +0.005496f, +0.003832f, + -0.001351f, +0.009128f, -0.016633f, +0.005567f, +0.011039f, -0.000032f, +0.000143f, +0.000552f, -0.006073f, -0.000140f, + -0.006817f, +0.001926f, +0.001362f, -0.001553f, +0.003270f, +0.000255f, +0.005942f, -0.002565f, -0.005787f, -0.005105f, + -0.000524f, +0.000854f, +0.005004f, +0.000709f, +0.006012f, +0.003621f, -0.002338f, -0.004027f, +0.001049f, -0.000312f, + +0.005582f, -0.002647f, +0.001050f, -0.001184f, +0.002194f, +0.002083f, -0.005079f, +0.001584f, +0.002565f, +0.000157f, + +0.002549f, -0.001843f, +0.001421f, +0.000097f, -0.004647f, -0.001195f + }, + { + -0.012491f, -0.267117f, +0.003303f, +0.108361f, -0.015550f, -0.015533f, -0.017181f, -0.001061f, -0.008887f, -0.002642f, + -0.035500f, +0.006347f, +0.013492f, -0.002627f, -0.015763f, -0.011525f, -0.011577f, +0.003644f, -0.005879f, +0.004774f, + -0.014359f, +0.009143f, +0.010113f, -0.009256f, +0.000694f, +0.004479f, -0.002487f, +0.000301f, +0.006261f, -0.011926f, + +0.007995f, +0.017048f, -0.001076f, +0.006037f, -0.001664f, +0.008330f, -0.006425f, +0.013369f, -0.000230f, +0.001162f, + -0.002123f, +0.006242f, -0.000025f, -0.004075f, -0.001593f, -0.018731f, -0.003251f, +0.012669f, -0.000330f, +0.009521f, + +0.000402f, -0.004585f, +0.001887f, +0.009108f, -0.003689f, +0.003773f, -0.002972f, -0.003312f, -0.006314f, +0.003024f, + +0.002022f, -0.013202f, -0.005493f, +0.003019f, +0.002646f, +0.000142f, -0.003748f, -0.006116f, -0.006454f, -0.005809f, + -0.000672f, +0.008484f, +0.000207f, -0.002228f, -0.001959f, -0.001672f, +0.004106f, -0.000066f, +0.000692f, -0.003390f, + +0.004065f, +0.004925f, +0.006492f, -0.000708f, +0.001766f, +0.000663f, +0.000272f, +0.000708f, -0.000521f, -0.001219f, + -0.002376f, +0.000326f, +0.001881f, +0.000893f, -0.002196f, +0.002895f + }, + { + +0.001012f, +0.143657f, +0.001120f, -0.028215f, -0.022192f, +0.002890f, +0.029581f, +0.011406f, -0.014449f, -0.012789f, + -0.000660f, +0.009485f, +0.024645f, -0.022218f, +0.004976f, +0.005863f, +0.005679f, -0.002148f, -0.000429f, -0.021546f, + +0.011611f, +0.003018f, +0.017005f, -0.014631f, -0.003384f, -0.023454f, -0.003438f, +0.021229f, -0.001342f, -0.005803f, + -0.004167f, -0.004838f, +0.010302f, -0.023006f, -0.009113f, -0.008197f, +0.001952f, +0.001045f, +0.012805f, -0.022485f, + -0.001185f, +0.013164f, -0.009245f, +0.008348f, -0.020919f, -0.002017f, -0.001950f, +0.001911f, +0.009644f, +0.004028f, + -0.008449f, -0.010568f, +0.000462f, +0.012105f, +0.008332f, +0.011172f, -0.001964f, +0.006234f, +0.007215f, +0.011689f, + +0.004315f, +0.001094f, +0.001965f, +0.001125f, -0.000629f, +0.005758f, -0.001762f, +0.004804f, +0.002237f, -0.000185f, + -0.000042f, -0.003122f, -0.000048f, +0.009503f, -0.004896f, -0.001038f, -0.001283f, +0.004037f, +0.007459f, +0.003059f, + +0.005311f, -0.003371f, -0.003928f, +0.001737f, -0.003790f, -0.002291f, +0.000361f, +0.002559f, -0.003984f, +0.001053f, + -0.001037f, +0.003041f, +0.002228f, -0.002518f, +0.002523f, -0.000482f + }, + { + +0.009553f, -0.173943f, -0.085566f, -0.002141f, -0.000069f, +0.022954f, -0.044351f, -0.010483f, +0.026746f, -0.004170f, + +0.020953f, +0.002178f, +0.018809f, +0.016256f, +0.057682f, +0.005647f, -0.007381f, +0.016315f, +0.015879f, +0.020670f, + -0.000594f, +0.000948f, -0.003980f, -0.009174f, +0.006747f, -0.007719f, -0.006556f, +0.011980f, -0.011850f, -0.008764f, + -0.014891f, +0.013545f, -0.011160f, +0.000935f, -0.008569f, -0.008993f, +0.017202f, -0.007365f, -0.000537f, -0.002770f, + -0.008698f, +0.016160f, +0.001416f, -0.002919f, -0.002720f, -0.007755f, +0.003995f, -0.024092f, -0.004078f, -0.001783f, + +0.002535f, -0.002677f, -0.014092f, +0.004610f, -0.000063f, +0.004674f, -0.002811f, +0.003467f, +0.000336f, -0.002504f, + +0.011386f, -0.001246f, +0.001434f, +0.000204f, -0.006606f, -0.002205f, +0.012382f, +0.006551f, -0.004503f, -0.000339f, + +0.002779f, -0.005923f, -0.004871f, -0.008854f, -0.003796f, +0.002257f, -0.002322f, +0.004400f, -0.002389f, +0.003254f, + -0.005557f, -0.006077f, -0.001355f, +0.000523f, +0.000471f, -0.000709f, -0.001385f, +0.002618f, +0.000804f, -0.002293f, + +0.001644f, -0.002989f, +0.000282f, -0.002017f, -0.004142f, -0.001234f + }, + { + +0.001165f, +0.089985f, +0.017241f, -0.003593f, +0.002491f, -0.000683f, -0.004980f, -0.005237f, -0.011638f, -0.008081f, + -0.015690f, +0.018695f, -0.001710f, +0.012649f, +0.016550f, +0.034496f, +0.007553f, -0.016102f, -0.001107f, +0.003212f, + +0.021961f, -0.019719f, +0.022788f, -0.018593f, -0.016987f, +0.021621f, +0.001804f, -0.012765f, -0.003532f, -0.011053f, + -0.003352f, +0.008727f, +0.020142f, +0.012067f, -0.014248f, -0.005667f, +0.008121f, +0.000134f, +0.008738f, -0.000301f, + +0.008490f, -0.012670f, -0.004243f, +0.005570f, -0.005999f, -0.003768f, +0.004589f, -0.001191f, +0.006705f, -0.008350f, + -0.006357f, -0.010962f, -0.006293f, -0.004413f, +0.006854f, -0.002890f, +0.003773f, +0.002260f, +0.011145f, +0.004332f, + +0.000197f, +0.001599f, -0.002152f, -0.002228f, +0.006393f, -0.007102f, -0.005739f, -0.000592f, -0.004056f, +0.004073f, + -0.003250f, -0.000310f, -0.004131f, -0.002930f, +0.007422f, +0.000444f, -0.006177f, +0.000942f, +0.001991f, -0.001425f, + +0.003375f, -0.003737f, -0.004629f, -0.000463f, +0.003742f, +0.002911f, +0.001762f, -0.000158f, +0.002585f, +0.000883f, + -0.001416f, +0.004043f, -0.002747f, -0.000858f, +0.003147f, +0.002414f + }, + { + -0.029905f, -0.088887f, +0.006529f, -0.024131f, +0.008149f, +0.010585f, -0.058018f, -0.031186f, -0.002318f, +0.003541f, + +0.005535f, -0.011136f, +0.000220f, +0.044552f, +0.022561f, -0.023244f, +0.025931f, -0.019225f, +0.011046f, +0.014588f, + -0.018602f, +0.005513f, +0.006852f, -0.016025f, -0.002120f, -0.004555f, -0.010963f, +0.004275f, +0.004916f, -0.029625f, + -0.005887f, +0.001201f, -0.008966f, +0.008814f, -0.022085f, +0.003666f, -0.002717f, -0.012666f, +0.006528f, +0.001553f, + +0.008568f, +0.002290f, +0.011115f, +0.006357f, -0.016739f, -0.004317f, +0.007320f, +0.013271f, -0.005721f, -0.001987f, + +0.014931f, -0.008065f, +0.006375f, -0.002552f, -0.011054f, +0.000546f, -0.011462f, -0.001289f, +0.011110f, +0.000867f, + -0.000221f, -0.000267f, +0.001019f, +0.011251f, -0.001711f, -0.003568f, -0.004944f, -0.005129f, -0.014707f, +0.005808f, + -0.001086f, +0.008761f, +0.001612f, -0.000646f, +0.010030f, -0.000613f, +0.003642f, -0.011333f, -0.009673f, +0.001450f, + -0.002923f, +0.001464f, -0.001915f, -0.000345f, -0.003488f, +0.001026f, -0.000603f, +0.004155f, +0.004012f, +0.001839f, + -0.004660f, -0.001670f, -0.006665f, -0.000083f, -0.002419f, +0.001517f + }, + { + +0.003335f, +0.100835f, -0.045222f, +0.003907f, +0.008269f, +0.002160f, +0.009986f, +0.009965f, +0.005931f, -0.001073f, + +0.010676f, -0.007920f, -0.007481f, +0.003499f, +0.018287f, -0.019491f, +0.022597f, +0.038866f, +0.016275f, +0.002236f, + -0.027460f, -0.012268f, +0.013074f, +0.007239f, +0.003500f, -0.018074f, -0.006575f, +0.013640f, +0.013831f, +0.023327f, + -0.017135f, -0.005897f, +0.003804f, +0.006412f, -0.005993f, -0.016739f, +0.011243f, +0.005968f, +0.001709f, -0.002334f, + -0.011544f, +0.000828f, +0.006024f, -0.017244f, +0.000438f, -0.003116f, -0.003056f, -0.001190f, +0.000972f, +0.000775f, + -0.012344f, +0.004859f, +0.002122f, +0.003549f, +0.004624f, +0.013078f, -0.010253f, +0.004961f, -0.004207f, -0.004557f, + -0.009527f, -0.012651f, -0.005779f, +0.003780f, -0.001305f, -0.003449f, -0.004098f, +0.000431f, -0.001249f, +0.005272f, + +0.004543f, -0.008505f, -0.001299f, +0.003187f, -0.002940f, +0.001061f, +0.002173f, +0.003796f, +0.002436f, +0.003559f, + +0.001938f, -0.002495f, +0.002572f, +0.002063f, -0.000667f, +0.009310f, -0.002083f, -0.003769f, +0.002819f, -0.003782f, + +0.001002f, +0.002531f, -0.006298f, +0.000779f, -0.004114f, -0.000175f + }, + { + -0.023908f, -0.136296f, +0.058851f, -0.023844f, -0.032871f, +0.005741f, -0.021062f, -0.014630f, +0.007527f, +0.009672f, + -0.020458f, +0.003012f, -0.027625f, +0.033685f, +0.047287f, -0.005366f, +0.011168f, +0.027106f, -0.014262f, +0.015332f, + -0.002677f, -0.002989f, -0.003504f, +0.023843f, +0.013316f, +0.005695f, -0.008853f, +0.010837f, +0.004463f, +0.007550f, + -0.027120f, -0.012724f, +0.009017f, +0.009236f, +0.017098f, -0.025254f, +0.010041f, -0.001285f, -0.006289f, -0.013486f, + -0.006025f, +0.006095f, +0.004742f, +0.000593f, +0.014646f, -0.001964f, +0.013263f, +0.004600f, -0.001642f, +0.012823f, + -0.003683f, -0.009961f, +0.001885f, -0.003562f, +0.003603f, +0.002543f, -0.002773f, -0.005831f, -0.006907f, +0.010840f, + -0.000307f, +0.004206f, +0.001888f, -0.009351f, +0.008336f, -0.002558f, -0.003744f, -0.009209f, +0.000834f, +0.004157f, + +0.000006f, +0.004062f, -0.001698f, -0.000314f, -0.007662f, +0.003448f, -0.001426f, -0.001360f, +0.005335f, +0.003789f, + -0.004253f, +0.002079f, -0.006005f, -0.000351f, +0.001861f, -0.000437f, +0.002354f, +0.001649f, -0.001492f, -0.004820f, + +0.002322f, +0.003602f, +0.008122f, +0.000562f, +0.001631f, -0.002577f + } + }, + { + { + -0.001234f, -0.120946f, +0.014286f, -0.000541f, -0.007134f, +0.006237f, -0.005188f, +0.009124f, +0.011752f, -0.003640f, + +0.010492f, -0.005529f, -0.011102f, +0.000701f, -0.017378f, +0.025871f, +0.037416f, +0.001951f, +0.004147f, -0.003791f, + +0.024144f, -0.027681f, -0.003945f, +0.015972f, +0.009779f, -0.043589f, +0.000788f, +0.004819f, +0.015899f, +0.014727f, + -0.000104f, +0.002020f, -0.011772f, -0.010925f, +0.005624f, +0.001072f, +0.003794f, +0.015486f, -0.006635f, -0.000218f, + +0.006333f, -0.008552f, +0.016885f, -0.014616f, +0.004794f, +0.004536f, -0.007085f, +0.006234f, +0.006205f, +0.004384f, + -0.003198f, -0.001741f, -0.000726f, -0.008042f, +0.005553f, -0.001455f, -0.009556f, -0.002320f, +0.003507f, -0.001017f, + +0.007115f, -0.004312f, +0.004055f, +0.003895f, -0.000654f, +0.006692f, -0.000624f, +0.003753f, -0.003762f, +0.000929f, + -0.001700f, +0.000007f, +0.000601f, -0.001182f, +0.000279f, +0.004288f, -0.000780f, -0.001214f, -0.002466f, +0.001395f, + -0.002546f, +0.004165f, +0.001149f, +0.001213f, -0.001496f, -0.002259f, -0.003465f, +0.002015f, -0.003596f, +0.000765f, + +0.005249f, +0.001334f, -0.000248f, +0.001647f, -0.000685f, +0.000344f + }, + { + -0.012369f, +0.178115f, +0.081879f, -0.125513f, -0.052034f, -0.006054f, +0.002507f, -0.035739f, -0.018295f, +0.020967f, + +0.007823f, +0.015321f, -0.016334f, +0.000605f, +0.003137f, +0.006900f, -0.011361f, -0.013778f, -0.016991f, -0.019317f, + -0.012307f, +0.000940f, +0.002337f, +0.015925f, -0.019874f, -0.003822f, +0.016374f, +0.009319f, +0.001897f, +0.009367f, + -0.000891f, -0.000915f, +0.005884f, +0.009642f, +0.012470f, +0.009904f, +0.001166f, +0.003535f, +0.001080f, -0.003188f, + +0.001787f, -0.013549f, +0.006528f, -0.014171f, +0.002435f, -0.004260f, +0.003330f, +0.002915f, +0.000676f, -0.008713f, + +0.004887f, -0.013243f, -0.000005f, -0.001339f, +0.011668f, -0.004393f, -0.002658f, +0.005700f, +0.001992f, +0.003201f, + +0.008844f, -0.000302f, -0.000625f, +0.004364f, +0.000397f, -0.006303f, -0.004185f, +0.001974f, -0.000820f, -0.002931f, + +0.007919f, +0.003373f, +0.002905f, +0.000408f, -0.002475f, -0.001258f, +0.000448f, -0.004452f, -0.004511f, +0.006172f, + +0.000168f, -0.000502f, +0.000698f, -0.001940f, +0.003083f, -0.002258f, -0.004286f, +0.003078f, -0.001646f, -0.000709f, + +0.001108f, -0.000415f, +0.002187f, -0.001930f, -0.000070f, -0.002098f + }, + { + +0.001693f, +0.150231f, -0.051559f, -0.083275f, +0.041914f, +0.011577f, +0.010538f, -0.002793f, -0.009542f, -0.006412f, + +0.004730f, -0.025221f, -0.012245f, -0.003520f, +0.005678f, +0.013440f, -0.000004f, +0.011474f, -0.017023f, -0.015982f, + +0.002663f, +0.011421f, -0.018347f, -0.012192f, +0.025584f, -0.003370f, +0.008520f, +0.003892f, -0.006085f, -0.017075f, + +0.008047f, +0.013159f, +0.014416f, -0.019821f, -0.007849f, +0.006042f, -0.011372f, +0.007224f, +0.015115f, -0.009787f, + +0.006190f, +0.009926f, +0.019604f, -0.003867f, -0.018252f, -0.001363f, -0.004559f, -0.005800f, -0.004160f, +0.005872f, + -0.005318f, -0.016194f, -0.004618f, +0.001596f, -0.007821f, +0.005297f, -0.002419f, +0.006553f, +0.001667f, +0.009171f, + +0.000052f, +0.003736f, -0.003929f, +0.006194f, -0.003183f, -0.003128f, +0.000257f, -0.003714f, -0.004849f, -0.000538f, + -0.001534f, -0.005232f, +0.003862f, -0.002247f, -0.005045f, +0.001842f, -0.004915f, -0.000633f, -0.005598f, -0.004050f, + +0.000351f, -0.001312f, -0.000190f, -0.002661f, -0.001522f, -0.001204f, -0.002071f, -0.002562f, -0.000270f, -0.001781f, + +0.001704f, +0.001278f, -0.001026f, +0.000407f, -0.000518f, +0.000377f + }, + { + -0.000534f, -0.006045f, -0.039844f, +0.002146f, +0.007794f, +0.001587f, -0.002825f, +0.003141f, -0.004068f, -0.006901f, + +0.000893f, -0.033201f, +0.003440f, -0.021676f, -0.013946f, +0.000213f, -0.031250f, -0.023838f, -0.026250f, -0.013971f, + -0.029220f, -0.001603f, -0.001060f, +0.000705f, +0.014715f, -0.000027f, -0.022217f, +0.012165f, +0.023379f, -0.007251f, + +0.008526f, +0.003284f, +0.006718f, +0.010181f, +0.003825f, -0.003563f, -0.006006f, -0.009910f, +0.001366f, -0.002622f, + -0.009889f, +0.007701f, -0.022499f, +0.002517f, -0.010472f, -0.000469f, -0.000253f, -0.016953f, +0.017622f, +0.008396f, + -0.012457f, +0.005678f, +0.001530f, +0.011091f, -0.007288f, -0.001706f, +0.006733f, -0.007511f, +0.008863f, +0.000118f, + -0.001477f, -0.001384f, +0.002192f, -0.001562f, +0.004922f, -0.005676f, -0.002448f, +0.004936f, +0.000700f, +0.004535f, + -0.001692f, -0.001742f, -0.002998f, +0.001206f, -0.007817f, +0.000860f, +0.002801f, -0.003251f, +0.001330f, -0.005176f, + -0.004406f, -0.003948f, -0.000478f, +0.000974f, -0.000365f, +0.000963f, -0.002678f, +0.001794f, -0.000679f, -0.001206f, + -0.000475f, +0.001630f, +0.000340f, -0.000288f, +0.005758f, +0.001197f + }, + { + +0.005619f, -0.175265f, +0.056542f, +0.059440f, -0.007782f, -0.000038f, +0.003155f, +0.001051f, -0.001229f, -0.010261f, + +0.023625f, +0.022582f, +0.008339f, +0.010348f, +0.001324f, +0.007729f, +0.028193f, -0.004494f, -0.012609f, -0.003147f, + +0.013959f, -0.003127f, +0.025137f, -0.017070f, -0.009630f, +0.001868f, +0.007050f, +0.005153f, +0.011824f, +0.017044f, + +0.014337f, +0.016766f, -0.003149f, +0.026039f, +0.003971f, -0.004362f, -0.008095f, -0.017026f, +0.001681f, -0.007280f, + -0.019456f, -0.006823f, -0.011845f, +0.000840f, -0.004946f, -0.000556f, -0.004463f, +0.005214f, +0.004990f, -0.004233f, + -0.006221f, -0.005468f, +0.008469f, -0.002715f, +0.005490f, +0.005394f, -0.002328f, -0.002027f, -0.004425f, +0.002104f, + +0.001443f, -0.005006f, -0.003624f, +0.004918f, +0.003676f, +0.008014f, -0.002433f, +0.002610f, -0.000632f, -0.005128f, + +0.000625f, -0.002408f, -0.002825f, -0.006317f, +0.002873f, -0.003969f, +0.001418f, -0.002171f, -0.002099f, +0.001127f, + +0.001473f, +0.001252f, -0.003014f, -0.003410f, +0.003641f, -0.002589f, -0.000374f, +0.002512f, -0.003119f, -0.001006f, + -0.000879f, +0.006508f, -0.000538f, -0.000693f, +0.000225f, -0.001488f + }, + { + +0.003862f, +0.001443f, +0.005394f, +0.015464f, -0.012770f, +0.001536f, -0.001774f, -0.003831f, -0.012184f, -0.001914f, + -0.008965f, -0.004604f, +0.021633f, +0.001894f, +0.001930f, +0.029805f, -0.036038f, -0.015664f, -0.034380f, +0.000231f, + -0.011245f, -0.002086f, +0.006655f, +0.000987f, -0.018615f, +0.015195f, +0.003244f, -0.002067f, -0.013409f, +0.000478f, + +0.002213f, -0.003136f, +0.006965f, -0.006727f, +0.007346f, -0.003175f, +0.005090f, -0.013692f, +0.006912f, -0.012094f, + -0.000606f, -0.007451f, +0.007159f, +0.003985f, +0.004674f, -0.000035f, +0.006431f, -0.008320f, +0.004652f, +0.010742f, + +0.009323f, -0.003115f, +0.011418f, -0.010244f, -0.001093f, -0.002401f, -0.004171f, -0.001692f, +0.004956f, -0.011118f, + +0.005654f, +0.004821f, +0.003533f, +0.002842f, +0.003070f, +0.000602f, +0.000296f, -0.005660f, -0.002673f, +0.001802f, + -0.002715f, +0.003621f, -0.002640f, +0.007056f, +0.001382f, +0.000894f, +0.001718f, -0.002620f, +0.000983f, -0.000155f, + -0.003746f, +0.001301f, +0.001432f, -0.003715f, +0.001158f, -0.003936f, -0.003045f, +0.000129f, +0.000638f, +0.001618f, + -0.003064f, -0.003352f, -0.000270f, +0.000279f, -0.000085f, -0.001969f + }, + { + +0.016186f, -0.178227f, +0.022761f, +0.094671f, -0.000403f, -0.007376f, -0.000922f, -0.020958f, -0.022751f, +0.001706f, + -0.003368f, +0.017475f, -0.021582f, +0.002349f, -0.015315f, -0.001010f, -0.010990f, +0.008782f, -0.027827f, -0.004737f, + +0.013897f, -0.003864f, -0.009958f, +0.021313f, -0.004814f, -0.004291f, +0.001133f, +0.007375f, +0.008960f, -0.005510f, + +0.015106f, +0.008122f, +0.015603f, +0.007855f, -0.008246f, -0.004769f, +0.008662f, -0.001301f, -0.005168f, +0.007576f, + -0.000890f, +0.017190f, -0.009370f, -0.004777f, -0.007034f, -0.001631f, +0.001402f, -0.005367f, -0.004654f, +0.004046f, + +0.002249f, -0.009501f, +0.004139f, -0.008428f, -0.005338f, -0.010219f, +0.005761f, +0.000686f, +0.001120f, -0.001789f, + +0.003336f, +0.005724f, -0.001326f, -0.001516f, -0.001866f, -0.001995f, +0.006952f, -0.001088f, -0.008033f, +0.007363f, + -0.001619f, +0.001632f, +0.001782f, -0.000078f, -0.001688f, +0.004326f, +0.004306f, +0.002735f, -0.002781f, -0.000949f, + -0.004289f, -0.002480f, -0.002948f, +0.004909f, -0.004064f, +0.002488f, +0.000247f, -0.001194f, +0.000381f, -0.001027f, + -0.000334f, -0.002165f, +0.003912f, +0.001349f, -0.003258f, +0.002556f + }, + { + +0.006083f, +0.078962f, -0.015422f, +0.026280f, -0.016108f, +0.000662f, -0.009142f, +0.002223f, +0.000297f, -0.000983f, + +0.002809f, -0.003007f, -0.007970f, +0.017523f, +0.027893f, -0.026094f, -0.012802f, -0.006163f, -0.016955f, -0.019678f, + +0.003842f, +0.002897f, +0.002671f, -0.003688f, +0.013611f, -0.025614f, +0.008987f, +0.013162f, -0.023762f, -0.016554f, + -0.023515f, +0.005855f, +0.006212f, +0.010329f, -0.003439f, -0.003679f, +0.001625f, +0.013344f, +0.007153f, +0.000725f, + -0.004886f, -0.002812f, +0.004265f, -0.004478f, +0.009844f, -0.000661f, +0.002784f, +0.009298f, +0.001082f, +0.006897f, + +0.002696f, +0.008031f, -0.016401f, +0.008764f, +0.004462f, -0.004891f, +0.000950f, +0.000833f, -0.004346f, +0.008901f, + -0.007055f, -0.004093f, -0.000020f, -0.000615f, +0.004058f, -0.004596f, +0.002677f, +0.000502f, -0.002928f, -0.001144f, + +0.001983f, -0.001201f, +0.002763f, -0.004002f, -0.000841f, +0.001666f, -0.000451f, -0.000933f, +0.004012f, -0.000678f, + +0.002698f, -0.006655f, -0.001461f, -0.000854f, -0.000679f, +0.000728f, -0.001902f, +0.001174f, +0.001973f, +0.001126f, + +0.003167f, -0.000905f, +0.001025f, -0.002232f, -0.005672f, -0.002978f + }, + { + +0.014045f, -0.198845f, +0.016757f, +0.094252f, -0.009093f, +0.005447f, -0.005801f, +0.010413f, +0.002406f, +0.008599f, + -0.009901f, +0.021833f, -0.002222f, -0.001581f, +0.013502f, +0.015947f, +0.000324f, +0.006804f, +0.001726f, +0.008423f, + -0.004766f, +0.000430f, -0.001290f, -0.004566f, -0.007897f, +0.006771f, +0.001734f, -0.011194f, -0.007043f, -0.028527f, + +0.000099f, +0.009156f, -0.008177f, +0.003770f, -0.001211f, +0.009965f, +0.002537f, +0.016459f, +0.003810f, +0.011708f, + +0.002040f, +0.007172f, -0.001656f, +0.005362f, +0.010761f, -0.007799f, -0.001435f, +0.007808f, -0.002784f, +0.010336f, + +0.006944f, -0.001619f, +0.005285f, +0.006434f, -0.005834f, +0.000466f, -0.001140f, +0.000615f, +0.000583f, +0.001058f, + -0.001724f, -0.005138f, -0.001634f, -0.000077f, -0.007846f, -0.006369f, +0.004696f, +0.000515f, -0.002336f, -0.000932f, + +0.004049f, +0.006969f, -0.001366f, -0.006432f, -0.002343f, -0.002728f, +0.000893f, +0.000293f, +0.001089f, -0.005154f, + +0.001033f, +0.005076f, +0.005758f, -0.004559f, -0.001621f, -0.000131f, +0.001766f, +0.002993f, +0.001711f, +0.000882f, + -0.001538f, +0.000811f, +0.003346f, +0.002807f, -0.002015f, +0.002573f + }, + { + -0.001191f, +0.075452f, -0.051348f, -0.010026f, +0.005627f, +0.007181f, +0.019131f, +0.025279f, -0.003750f, -0.013721f, + -0.013086f, -0.002728f, +0.008792f, -0.024378f, +0.014043f, +0.006483f, +0.005308f, -0.002761f, +0.026896f, +0.024612f, + +0.004085f, -0.003604f, +0.004781f, -0.018678f, +0.002717f, -0.015263f, +0.000892f, +0.013414f, -0.006450f, +0.008372f, + +0.002363f, +0.000599f, +0.025440f, -0.003332f, +0.009848f, -0.011105f, +0.002573f, +0.009674f, +0.021808f, -0.022304f, + -0.003535f, +0.003304f, -0.018930f, -0.005676f, -0.011182f, +0.010389f, +0.006626f, -0.000876f, +0.003540f, +0.003834f, + -0.010645f, -0.002493f, +0.008621f, +0.005826f, -0.012367f, -0.007587f, -0.013042f, -0.005624f, -0.001196f, +0.000169f, + -0.011001f, -0.001666f, +0.002659f, -0.004960f, -0.008268f, -0.000342f, +0.001278f, +0.008077f, +0.006937f, +0.007061f, + +0.000523f, -0.001723f, -0.003318f, +0.002559f, -0.003100f, +0.002305f, -0.002152f, +0.001211f, +0.004531f, +0.000705f, + +0.002689f, -0.004146f, -0.007043f, +0.000024f, -0.000270f, +0.002340f, +0.002943f, +0.001136f, -0.003237f, +0.001967f, + -0.001830f, +0.000161f, -0.001582f, -0.002442f, +0.005107f, -0.000695f + }, + { + -0.016014f, -0.075257f, +0.038826f, +0.004357f, -0.018068f, +0.018153f, -0.046063f, -0.065021f, +0.010960f, +0.028767f, + +0.027766f, -0.027657f, -0.032898f, -0.030784f, +0.043647f, +0.007684f, -0.005290f, +0.003457f, -0.003571f, +0.008633f, + +0.002681f, +0.007126f, -0.008780f, -0.008442f, +0.011629f, -0.000537f, +0.002123f, +0.020557f, +0.010609f, +0.016414f, + -0.011781f, -0.001398f, -0.019640f, +0.010019f, +0.004065f, -0.014793f, +0.009424f, -0.005850f, -0.004276f, +0.003035f, + -0.006046f, +0.014025f, -0.006982f, -0.005251f, +0.007571f, +0.005206f, +0.020391f, -0.014003f, +0.001938f, +0.012165f, + +0.008723f, +0.001459f, -0.006318f, +0.007830f, -0.002542f, +0.002857f, -0.003700f, +0.013139f, -0.002932f, -0.010821f, + +0.006106f, +0.000596f, +0.005239f, +0.004347f, -0.004435f, -0.004554f, +0.006192f, +0.005369f, -0.002042f, +0.000227f, + -0.000360f, -0.005179f, +0.003609f, +0.003880f, +0.001326f, +0.000742f, -0.004474f, +0.003746f, -0.002370f, +0.003003f, + -0.003569f, -0.005135f, -0.003917f, -0.001494f, +0.001207f, -0.000853f, -0.001578f, +0.001343f, -0.001051f, -0.003379f, + +0.003538f, -0.001734f, +0.001574f, +0.000524f, +0.002344f, +0.001075f + }, + { + -0.000314f, +0.012186f, -0.032943f, -0.005713f, +0.004973f, +0.004483f, -0.015466f, -0.000540f, -0.001715f, -0.002550f, + -0.028120f, +0.010749f, -0.018601f, -0.017184f, +0.002124f, +0.004165f, -0.007080f, -0.001170f, +0.030018f, +0.010744f, + +0.005749f, -0.042284f, +0.008554f, -0.019868f, -0.017221f, +0.000957f, -0.012453f, -0.031262f, -0.017708f, +0.013423f, + +0.007702f, +0.002565f, +0.011509f, +0.015307f, +0.005263f, +0.006459f, -0.007782f, -0.015971f, +0.006083f, -0.007487f, + +0.013429f, +0.001186f, +0.005977f, +0.007423f, +0.001574f, -0.001098f, -0.001429f, +0.005574f, +0.014868f, -0.003658f, + +0.009588f, -0.004921f, -0.000816f, -0.004968f, +0.007862f, -0.003795f, -0.001556f, -0.000635f, +0.002679f, +0.002054f, + +0.001164f, -0.002943f, -0.004150f, -0.001447f, +0.004503f, -0.000166f, -0.001931f, -0.002589f, -0.006845f, +0.001937f, + +0.000336f, +0.003188f, +0.002493f, +0.000093f, +0.003004f, +0.003017f, -0.001613f, -0.000498f, +0.001392f, -0.001640f, + +0.000120f, -0.007027f, -0.005522f, -0.003424f, -0.000439f, -0.001222f, +0.002148f, +0.001807f, +0.005183f, -0.000529f, + -0.004248f, +0.004077f, -0.001147f, -0.001633f, +0.001753f, +0.000519f + }, + { + +0.028299f, -0.110028f, -0.054541f, -0.001565f, +0.007362f, +0.019777f, -0.031267f, -0.012635f, +0.002995f, +0.009949f, + +0.011368f, -0.010433f, -0.004986f, +0.020135f, -0.003119f, -0.040862f, +0.039931f, +0.004559f, +0.032401f, +0.023616f, + -0.021797f, +0.004399f, +0.000906f, -0.002838f, +0.017392f, +0.001521f, +0.000664f, +0.006269f, +0.011048f, -0.014113f, + +0.009410f, +0.019528f, -0.009634f, -0.003410f, -0.022481f, +0.009925f, -0.005351f, -0.013896f, +0.006754f, -0.009262f, + +0.008785f, +0.003990f, +0.001423f, -0.004642f, -0.015325f, -0.005599f, -0.003386f, -0.003837f, -0.018849f, -0.004256f, + +0.017338f, -0.000059f, +0.013360f, -0.001981f, -0.004725f, +0.002477f, -0.010032f, +0.000258f, -0.001156f, -0.010474f, + +0.000377f, -0.002507f, -0.009150f, +0.003028f, -0.006210f, -0.005983f, -0.000995f, +0.002459f, -0.010176f, +0.002309f, + -0.005431f, +0.004438f, +0.002389f, -0.000918f, -0.000704f, -0.009613f, +0.004988f, -0.006033f, -0.004428f, +0.002976f, + -0.002838f, -0.001831f, -0.002694f, +0.003109f, +0.002605f, +0.001016f, -0.002752f, +0.000901f, -0.001333f, +0.000442f, + -0.004259f, -0.002609f, -0.003847f, +0.004712f, +0.002358f, +0.003322f + }, + { + -0.003745f, +0.105224f, -0.030086f, -0.004368f, +0.001137f, +0.005089f, +0.004299f, +0.000215f, +0.013153f, +0.002320f, + +0.010509f, -0.005812f, +0.017811f, -0.008856f, -0.044790f, -0.034200f, -0.005149f, +0.003774f, +0.003440f, +0.024868f, + +0.007068f, -0.004147f, +0.008921f, +0.019026f, +0.002263f, -0.030551f, -0.007564f, -0.005910f, +0.021722f, +0.033827f, + -0.022048f, -0.015919f, -0.002862f, -0.001042f, -0.006627f, -0.010268f, -0.000763f, -0.001486f, +0.008545f, +0.010028f, + -0.014718f, -0.004554f, +0.003645f, -0.016658f, -0.001553f, -0.009200f, +0.000229f, +0.007843f, +0.003789f, -0.005524f, + -0.014524f, +0.011751f, +0.002664f, +0.006244f, +0.002609f, +0.011859f, -0.011590f, +0.005885f, -0.004374f, -0.001167f, + +0.008993f, +0.004153f, -0.002721f, +0.008844f, +0.002715f, -0.001092f, -0.002729f, +0.001910f, -0.000934f, -0.000608f, + +0.002081f, -0.006658f, -0.004151f, -0.000153f, +0.000823f, +0.006546f, +0.002635f, +0.000903f, -0.002719f, +0.000560f, + +0.005143f, +0.000290f, +0.002865f, -0.001407f, -0.005403f, +0.003962f, -0.001518f, +0.000782f, +0.005587f, -0.003671f, + +0.001497f, +0.004056f, -0.002602f, +0.001205f, +0.000008f, +0.000102f + }, + { + +0.022740f, -0.122504f, +0.002187f, -0.034534f, -0.027881f, +0.008717f, -0.015158f, -0.013693f, +0.016198f, +0.018461f, + +0.006532f, +0.010914f, -0.027596f, +0.023483f, +0.015290f, -0.009432f, +0.013604f, +0.019378f, -0.034642f, -0.003375f, + -0.002597f, -0.004550f, -0.021104f, +0.027458f, +0.012837f, +0.002890f, -0.016106f, +0.006046f, +0.003803f, +0.021525f, + -0.017097f, -0.027772f, -0.013331f, -0.007006f, +0.021699f, -0.016141f, +0.005426f, -0.002410f, +0.014715f, +0.006066f, + -0.004040f, +0.013733f, +0.004833f, -0.002601f, +0.011190f, -0.009024f, -0.002766f, +0.005039f, +0.008123f, +0.021742f, + +0.003206f, -0.009326f, -0.000533f, -0.006052f, +0.004750f, +0.004069f, +0.000609f, +0.005485f, +0.000268f, +0.012257f, + -0.003103f, -0.001270f, +0.000077f, -0.008916f, +0.007603f, -0.004933f, -0.005595f, -0.009919f, -0.000977f, -0.001633f, + -0.004613f, +0.000694f, +0.002568f, +0.006971f, -0.003274f, +0.002126f, -0.006111f, +0.002724f, +0.010998f, +0.004007f, + -0.008383f, +0.003426f, +0.000353f, -0.001738f, -0.002498f, -0.002263f, +0.002124f, +0.004221f, -0.000968f, -0.007375f, + +0.001191f, +0.003044f, +0.005690f, -0.002527f, -0.000464f, +0.000034f + } + }, + { + { + -0.001352f, -0.090659f, -0.020104f, +0.049967f, -0.025559f, -0.002949f, -0.001262f, +0.012338f, +0.009950f, +0.011038f, + -0.005484f, -0.004123f, -0.011341f, -0.020427f, -0.005560f, +0.030302f, +0.008941f, +0.008754f, -0.004541f, +0.015387f, + +0.021669f, -0.019778f, -0.017112f, +0.008871f, -0.004917f, -0.017386f, -0.005967f, +0.010210f, +0.006936f, +0.016303f, + +0.013282f, -0.011187f, +0.003283f, -0.022346f, -0.001709f, +0.004657f, +0.020719f, +0.004459f, -0.002277f, -0.001400f, + -0.000704f, -0.007380f, +0.007257f, +0.004286f, -0.000368f, -0.007157f, +0.003428f, +0.002840f, -0.001007f, +0.000846f, + +0.000700f, +0.005882f, -0.006544f, +0.001317f, -0.005981f, -0.001913f, -0.001764f, -0.004830f, +0.001086f, +0.003575f, + +0.000270f, +0.004821f, +0.003476f, -0.001011f, +0.008107f, +0.003985f, +0.000453f, +0.002883f, -0.002777f, +0.001129f, + +0.001153f, -0.002782f, +0.000842f, +0.001908f, -0.004538f, +0.003309f, +0.000582f, +0.000430f, -0.001111f, -0.001524f, + +0.002430f, +0.002165f, +0.000388f, +0.003032f, -0.002759f, -0.000457f, -0.004077f, -0.001487f, -0.000210f, +0.000130f, + +0.002790f, +0.000627f, +0.000271f, +0.003585f, -0.000004f, +0.000270f + }, + { + +0.009500f, +0.279015f, -0.054121f, -0.118754f, -0.055858f, -0.004959f, -0.018894f, -0.022364f, +0.008820f, -0.001452f, + +0.020240f, +0.011278f, -0.014677f, -0.004276f, +0.010007f, +0.000476f, +0.010698f, -0.028010f, -0.026386f, +0.001152f, + -0.014836f, +0.002877f, +0.000378f, -0.005776f, -0.004706f, +0.000622f, +0.006242f, -0.001146f, +0.002570f, +0.022587f, + -0.007233f, +0.000850f, +0.018626f, +0.005016f, +0.012121f, +0.010969f, -0.002154f, -0.007041f, +0.006790f, +0.009577f, + -0.007011f, -0.007172f, -0.000025f, -0.009800f, -0.001548f, -0.002388f, +0.004349f, +0.005877f, -0.004787f, -0.004935f, + -0.004664f, -0.002399f, -0.000286f, +0.002720f, +0.001139f, -0.005241f, +0.007147f, -0.002402f, -0.001890f, +0.012978f, + +0.005924f, -0.000911f, +0.004301f, -0.005053f, +0.002494f, -0.003333f, -0.003475f, -0.002509f, -0.000373f, -0.002785f, + +0.008519f, +0.003513f, +0.002453f, -0.001321f, -0.001816f, +0.002877f, -0.002091f, -0.004370f, +0.000592f, -0.002379f, + +0.000562f, +0.001703f, -0.001607f, +0.001752f, -0.000777f, -0.001738f, -0.000494f, +0.001370f, -0.000015f, -0.001587f, + -0.000989f, +0.000795f, -0.001652f, +0.000592f, -0.000421f, -0.000134f + }, + { + -0.004619f, -0.007284f, +0.073463f, -0.044741f, +0.011030f, +0.011374f, +0.015565f, -0.007638f, -0.014397f, +0.017936f, + -0.021068f, -0.005134f, -0.008204f, -0.003431f, +0.014743f, -0.002606f, +0.013784f, -0.010833f, -0.000434f, -0.002886f, + -0.003884f, -0.009593f, -0.012405f, +0.008358f, +0.006105f, +0.004774f, +0.005824f, +0.004199f, -0.004279f, -0.003304f, + +0.007022f, +0.005779f, +0.001003f, -0.006667f, -0.003955f, +0.008895f, -0.013855f, -0.000947f, +0.006763f, +0.009762f, + -0.003170f, +0.006768f, +0.016888f, +0.001462f, -0.011932f, -0.006774f, -0.009999f, +0.001722f, -0.001947f, +0.008766f, + -0.015349f, -0.008351f, -0.004200f, -0.005142f, +0.000003f, +0.002105f, +0.001081f, -0.000798f, -0.001548f, +0.009812f, + +0.003678f, +0.004360f, -0.003078f, -0.002847f, +0.001832f, -0.005778f, +0.000445f, +0.001128f, -0.003400f, -0.000164f, + -0.003198f, -0.000029f, -0.001359f, -0.004220f, -0.002003f, -0.002370f, -0.005070f, -0.001140f, -0.004039f, -0.002576f, + +0.000237f, -0.000666f, -0.001413f, -0.000738f, +0.000270f, -0.002999f, -0.002614f, -0.004133f, +0.000444f, +0.000105f, + +0.000044f, -0.000862f, -0.000415f, +0.002620f, +0.000539f, -0.001759f + }, + { + -0.002214f, -0.066486f, +0.006456f, +0.013674f, -0.002206f, -0.000452f, -0.001096f, +0.003646f, +0.003765f, -0.019816f, + +0.002196f, -0.023043f, -0.013688f, -0.009939f, +0.002583f, -0.026018f, -0.014575f, -0.017038f, -0.027212f, -0.014183f, + -0.024507f, -0.011672f, +0.009630f, +0.003728f, +0.000988f, -0.011406f, -0.001433f, +0.013335f, +0.007283f, +0.003860f, + +0.003328f, +0.005201f, +0.002864f, +0.016755f, +0.000545f, +0.004081f, +0.007044f, -0.014424f, -0.004938f, -0.012945f, + -0.005870f, +0.009235f, -0.012963f, -0.003794f, +0.002265f, -0.006044f, -0.007479f, -0.002419f, +0.002008f, +0.007985f, + -0.000682f, +0.001629f, -0.004720f, +0.008901f, +0.004183f, -0.001340f, -0.002888f, -0.000045f, +0.002232f, +0.004539f, + +0.001491f, -0.000627f, -0.000820f, +0.000395f, +0.002230f, -0.003947f, -0.002382f, +0.005075f, +0.004068f, -0.000853f, + +0.000970f, -0.002304f, -0.001703f, +0.000919f, -0.007404f, -0.003006f, +0.002531f, -0.000709f, +0.000766f, -0.000013f, + -0.008063f, -0.003531f, +0.001082f, -0.000805f, +0.000277f, +0.001851f, -0.001634f, -0.001688f, +0.000587f, -0.000357f, + +0.001968f, -0.001213f, +0.001945f, +0.003402f, +0.003115f, +0.000840f + }, + { + -0.009973f, -0.109242f, +0.012168f, +0.055011f, +0.003772f, +0.001913f, -0.002197f, +0.003732f, -0.012950f, +0.016565f, + +0.011438f, +0.018979f, +0.010917f, +0.009929f, +0.005080f, +0.012264f, +0.027324f, -0.007912f, +0.018742f, -0.012149f, + -0.003102f, +0.007920f, +0.008554f, -0.016474f, -0.002428f, +0.003753f, +0.013829f, -0.000655f, +0.001142f, +0.021597f, + +0.020936f, -0.005694f, +0.017592f, +0.017436f, +0.006519f, -0.004097f, -0.001999f, -0.014599f, -0.002040f, -0.009681f, + -0.018907f, -0.018470f, -0.008957f, -0.004516f, -0.000211f, +0.003640f, -0.006934f, +0.007725f, +0.008658f, -0.004696f, + -0.006307f, -0.002608f, +0.005886f, -0.002134f, +0.010221f, -0.003612f, +0.001998f, -0.004477f, -0.008409f, +0.002300f, + -0.001144f, -0.002666f, +0.005461f, +0.000479f, +0.006632f, -0.002818f, +0.004478f, +0.004837f, -0.003946f, -0.002222f, + -0.000696f, -0.003712f, -0.005955f, +0.000069f, -0.003363f, -0.001470f, +0.001411f, +0.000915f, +0.000184f, -0.001111f, + +0.002030f, +0.000342f, -0.002459f, -0.000502f, +0.003121f, -0.000131f, -0.001491f, -0.001087f, -0.001767f, -0.002495f, + +0.001389f, +0.000696f, -0.000350f, +0.003446f, -0.002311f, -0.000550f + }, + { + -0.000121f, +0.024822f, +0.015934f, +0.006360f, -0.006747f, -0.003432f, +0.001202f, -0.002691f, -0.002846f, -0.008931f, + -0.010417f, -0.008410f, +0.011614f, -0.019109f, +0.036045f, +0.002032f, -0.004873f, -0.030430f, -0.012372f, -0.012561f, + -0.013169f, +0.008691f, +0.004220f, -0.009743f, -0.012679f, +0.002830f, +0.017587f, -0.008753f, -0.018855f, +0.004261f, + -0.011079f, +0.000542f, -0.005146f, -0.006872f, +0.009681f, -0.003817f, +0.000622f, -0.006134f, -0.004649f, +0.002173f, + -0.005773f, -0.004790f, +0.004830f, +0.005281f, +0.003223f, +0.009625f, -0.000203f, -0.001997f, +0.000680f, +0.008973f, + +0.007476f, +0.003306f, +0.006665f, -0.011261f, -0.000366f, -0.002865f, +0.000272f, -0.001194f, +0.000391f, -0.003485f, + +0.002694f, +0.002215f, +0.005663f, +0.000730f, +0.001979f, +0.000427f, +0.000168f, -0.003366f, -0.001543f, -0.006789f, + +0.004088f, +0.001053f, +0.000229f, +0.005158f, +0.004151f, +0.000873f, -0.000677f, +0.001285f, +0.000529f, -0.003672f, + +0.001715f, -0.001561f, -0.001111f, +0.000395f, -0.001918f, -0.003027f, -0.001661f, -0.002352f, +0.003000f, -0.000030f, + -0.003063f, -0.001740f, +0.000530f, -0.001506f, -0.002317f, -0.000562f + }, + { + -0.023020f, -0.071051f, -0.022474f, +0.080458f, +0.002223f, -0.000186f, +0.006137f, -0.022582f, -0.035814f, +0.004431f, + +0.004682f, +0.008881f, +0.004732f, -0.017247f, -0.023012f, +0.000136f, -0.021076f, +0.015770f, -0.005604f, -0.023450f, + +0.007587f, +0.014031f, +0.005096f, -0.013487f, +0.000045f, -0.000642f, -0.002677f, +0.002015f, +0.001649f, +0.002145f, + +0.007926f, +0.015454f, +0.006995f, +0.019021f, -0.009792f, +0.006003f, -0.004799f, +0.002745f, -0.001645f, +0.011787f, + +0.008535f, +0.003723f, +0.003443f, -0.015718f, -0.003968f, -0.001381f, -0.002403f, +0.002510f, -0.003373f, +0.003805f, + -0.004949f, -0.003347f, +0.002412f, -0.011844f, -0.003657f, -0.000117f, +0.003683f, -0.000943f, +0.004130f, -0.000837f, + +0.004424f, +0.004616f, +0.002684f, -0.003402f, -0.003937f, -0.001240f, +0.004005f, -0.000690f, -0.000745f, +0.004060f, + -0.001313f, -0.005988f, +0.000408f, +0.003570f, +0.004058f, -0.000490f, +0.006780f, -0.005033f, +0.001041f, +0.000126f, + -0.001115f, -0.003722f, -0.001684f, +0.000826f, -0.002133f, +0.001397f, -0.001396f, +0.000533f, -0.001894f, +0.001591f, + -0.002290f, -0.000886f, +0.002512f, -0.000838f, -0.000582f, +0.002514f + }, + { + +0.002307f, +0.056206f, +0.048252f, -0.007428f, +0.007780f, -0.008973f, -0.007056f, -0.001539f, +0.006184f, +0.000206f, + -0.004035f, +0.002900f, +0.006721f, -0.003509f, +0.008458f, -0.015528f, -0.007141f, -0.007245f, -0.024580f, -0.016470f, + +0.002911f, -0.002207f, +0.012143f, -0.008179f, +0.002333f, -0.009665f, +0.007530f, -0.000266f, -0.007640f, -0.005697f, + -0.027174f, +0.005115f, +0.002887f, +0.011757f, -0.004258f, +0.000280f, +0.011295f, -0.000722f, +0.018597f, -0.001821f, + -0.012446f, +0.005635f, +0.005243f, +0.005303f, -0.002291f, +0.014483f, +0.002170f, +0.003504f, +0.003662f, -0.000364f, + +0.000638f, +0.008970f, -0.010527f, +0.006906f, -0.001098f, -0.006152f, +0.007518f, -0.003356f, +0.000539f, +0.006373f, + -0.001310f, -0.002623f, -0.001172f, +0.002389f, -0.001042f, -0.002760f, -0.005009f, +0.005517f, -0.001802f, +0.002034f, + +0.000941f, -0.000502f, +0.003182f, -0.005690f, -0.001430f, -0.000045f, -0.000026f, +0.001532f, +0.002703f, -0.000698f, + -0.001984f, -0.002396f, -0.001653f, +0.001491f, -0.004515f, -0.001655f, +0.000956f, -0.000315f, +0.002042f, +0.001047f, + +0.002262f, -0.000318f, -0.000663f, -0.002166f, -0.002235f, -0.004430f + }, + { + -0.021323f, -0.115452f, -0.018529f, +0.072883f, +0.003163f, +0.012651f, -0.007988f, +0.006076f, +0.021394f, +0.003838f, + +0.028180f, -0.012836f, +0.001889f, -0.008934f, +0.033047f, -0.004987f, -0.011024f, +0.018660f, +0.007494f, +0.010760f, + +0.005229f, -0.008646f, -0.007800f, +0.000511f, -0.003511f, +0.000940f, -0.001098f, -0.002703f, -0.024129f, -0.021727f, + -0.002322f, +0.005792f, -0.002707f, +0.006920f, +0.007510f, +0.005296f, -0.001647f, +0.010691f, +0.009983f, -0.001067f, + +0.008037f, +0.008297f, -0.003800f, +0.011326f, +0.010374f, -0.003206f, -0.000406f, -0.001152f, +0.002461f, +0.002230f, + +0.011753f, -0.001201f, +0.005054f, -0.003223f, +0.006472f, -0.006427f, +0.004299f, +0.000613f, +0.001841f, -0.000303f, + -0.006433f, -0.000117f, -0.001258f, +0.000181f, -0.009290f, -0.007375f, +0.005271f, +0.003782f, -0.001422f, -0.000171f, + +0.006229f, -0.001054f, -0.001044f, -0.000951f, -0.004201f, +0.001401f, -0.000948f, -0.001618f, +0.001086f, -0.001101f, + -0.002407f, +0.003479f, +0.001145f, -0.001483f, -0.000770f, -0.000988f, +0.001262f, +0.003444f, -0.000263f, +0.000494f, + -0.000194f, -0.000541f, +0.003978f, +0.003987f, -0.000415f, -0.001107f + }, + { + -0.003040f, +0.006090f, -0.012601f, -0.001727f, +0.025521f, +0.014574f, -0.017476f, +0.011177f, +0.020041f, -0.008940f, + -0.017724f, +0.002814f, -0.008077f, +0.010501f, -0.005973f, +0.008464f, +0.015253f, -0.011794f, +0.025158f, +0.052007f, + -0.027469f, +0.009167f, +0.003813f, -0.006338f, -0.010691f, -0.005055f, +0.003604f, +0.000421f, +0.001265f, -0.003911f, + +0.011341f, +0.012007f, +0.002581f, +0.006349f, +0.000601f, -0.004856f, -0.001202f, +0.005250f, +0.013868f, -0.006981f, + +0.000561f, -0.010329f, +0.001047f, -0.019737f, +0.000917f, +0.005762f, +0.006732f, -0.007520f, -0.000107f, -0.002203f, + -0.000018f, +0.000702f, +0.005297f, +0.001171f, -0.003237f, -0.016853f, -0.009790f, -0.010552f, +0.000252f, -0.004275f, + -0.017658f, +0.003417f, +0.001993f, -0.007189f, -0.007986f, -0.004524f, +0.004413f, +0.010931f, -0.000739f, +0.009497f, + -0.000749f, -0.000310f, -0.002892f, -0.000811f, +0.001849f, +0.003072f, -0.004065f, +0.004483f, -0.001238f, -0.003196f, + +0.000726f, -0.002782f, -0.003540f, +0.001572f, -0.000445f, +0.001940f, +0.003441f, -0.000887f, +0.002379f, -0.000938f, + -0.003152f, +0.002060f, -0.002964f, -0.001179f, +0.002276f, +0.000775f + }, + { + +0.020180f, -0.077264f, +0.003835f, +0.008196f, +0.005719f, -0.018381f, -0.000198f, -0.051291f, -0.010240f, +0.027750f, + +0.009841f, -0.008056f, -0.041790f, -0.031489f, +0.013262f, +0.014759f, -0.009908f, +0.003659f, +0.004030f, -0.006064f, + +0.019658f, -0.001519f, -0.004478f, -0.012936f, +0.000703f, +0.009322f, +0.015307f, +0.012395f, -0.001576f, +0.017214f, + +0.006032f, -0.017669f, -0.009491f, +0.010168f, -0.001559f, -0.015868f, +0.005110f, -0.000201f, -0.001346f, +0.000076f, + +0.009044f, -0.004116f, -0.000084f, +0.001026f, -0.000338f, +0.006280f, +0.008615f, +0.003088f, +0.005024f, +0.011181f, + +0.002647f, +0.007835f, -0.004148f, +0.009838f, -0.007682f, +0.003684f, -0.006710f, +0.015099f, -0.001585f, -0.008430f, + -0.001041f, +0.010924f, -0.000965f, +0.003428f, -0.004041f, +0.000527f, -0.003622f, +0.004525f, +0.002696f, -0.001780f, + -0.000135f, -0.001319f, +0.001156f, +0.004274f, +0.003564f, -0.000250f, -0.001316f, -0.001850f, +0.000877f, +0.000317f, + -0.000288f, -0.006098f, -0.003059f, -0.002424f, +0.000393f, -0.000926f, +0.000496f, -0.000418f, -0.000545f, -0.003593f, + +0.002232f, -0.001714f, +0.003944f, +0.001981f, +0.001868f, +0.002274f + }, + { + -0.002812f, -0.037538f, -0.001723f, -0.010172f, +0.007179f, +0.003799f, -0.006625f, -0.003681f, +0.002444f, -0.006729f, + +0.002031f, -0.017293f, -0.000033f, -0.054047f, +0.016087f, -0.010659f, -0.009057f, +0.000486f, +0.034788f, +0.018941f, + -0.003763f, -0.022366f, -0.006504f, -0.011377f, -0.011096f, -0.017094f, -0.007947f, -0.010859f, -0.032949f, +0.016574f, + +0.032378f, -0.012666f, -0.002265f, +0.021791f, +0.005472f, +0.006759f, -0.005964f, -0.005942f, -0.004070f, -0.007568f, + +0.009542f, +0.003441f, +0.017789f, -0.005924f, +0.004993f, -0.009557f, +0.004099f, +0.017163f, +0.001365f, -0.008036f, + +0.023002f, -0.010531f, +0.003131f, -0.003459f, +0.001865f, +0.004429f, -0.003440f, -0.000407f, -0.001726f, +0.008604f, + -0.003337f, -0.001150f, -0.001914f, +0.002100f, -0.006277f, +0.001671f, -0.002084f, +0.001415f, -0.006780f, -0.000130f, + +0.002057f, +0.003534f, +0.000534f, -0.001358f, +0.002033f, +0.005850f, +0.002603f, +0.001771f, -0.003983f, -0.003940f, + +0.002615f, -0.006608f, -0.004047f, -0.005005f, +0.000568f, -0.002111f, +0.003297f, -0.000743f, +0.005056f, -0.000613f, + -0.001554f, -0.000253f, +0.003917f, -0.000702f, -0.003552f, +0.001275f + }, + { + -0.031140f, -0.052877f, -0.036906f, -0.018560f, +0.019187f, -0.013136f, +0.003389f, +0.010173f, -0.007198f, +0.000071f, + -0.004636f, +0.007908f, +0.022079f, -0.008046f, -0.027027f, -0.022983f, +0.036724f, +0.008882f, +0.039652f, +0.012950f, + -0.009636f, -0.002536f, -0.005231f, +0.006860f, +0.016885f, -0.010491f, +0.001335f, +0.007217f, +0.003280f, +0.007853f, + +0.010074f, +0.003467f, -0.014977f, -0.005696f, -0.007740f, +0.020461f, -0.019315f, -0.005467f, +0.003774f, -0.004069f, + +0.001481f, -0.003792f, +0.002871f, -0.009031f, -0.000307f, -0.009300f, -0.003812f, -0.008254f, -0.012822f, +0.000843f, + +0.012486f, +0.003658f, +0.002235f, -0.000246f, +0.002780f, -0.002308f, -0.006106f, -0.000025f, -0.005288f, -0.013419f, + +0.002210f, -0.002363f, -0.005719f, -0.006012f, -0.009709f, +0.001358f, +0.002809f, -0.000511f, -0.003474f, -0.002510f, + -0.000313f, -0.005035f, +0.005084f, -0.001449f, -0.005182f, -0.004740f, +0.004070f, -0.006853f, +0.000033f, -0.002593f, + -0.001493f, -0.002767f, +0.001833f, +0.001452f, +0.002700f, -0.001220f, -0.000552f, +0.000611f, -0.003051f, +0.000527f, + -0.001997f, -0.003187f, +0.000510f, +0.002941f, +0.002701f, +0.000774f + }, + { + +0.000405f, +0.063496f, +0.007891f, -0.015403f, -0.000447f, +0.004930f, +0.012062f, -0.000142f, +0.010400f, +0.008043f, + +0.002747f, -0.003425f, +0.015515f, -0.019741f, -0.015608f, -0.009442f, -0.038886f, -0.010041f, +0.013332f, -0.006425f, + +0.034407f, +0.008425f, -0.000598f, +0.016272f, +0.007811f, -0.027313f, -0.004349f, -0.013010f, +0.020830f, +0.008191f, + +0.006458f, -0.009221f, -0.004171f, -0.011732f, -0.001494f, -0.009557f, +0.002518f, -0.003348f, -0.001409f, +0.010080f, + -0.005963f, -0.003928f, -0.005186f, -0.007263f, -0.002592f, -0.010552f, -0.002641f, +0.012975f, -0.001707f, -0.001190f, + -0.004350f, +0.009985f, -0.004782f, +0.012100f, +0.004836f, +0.003655f, -0.010062f, +0.008668f, -0.004133f, +0.001581f, + +0.001679f, +0.007216f, +0.004669f, +0.007550f, -0.001384f, -0.000462f, -0.000055f, +0.004666f, -0.002117f, -0.002399f, + +0.001551f, -0.005755f, -0.004421f, -0.001575f, +0.001387f, +0.007073f, +0.003749f, +0.000599f, -0.002200f, +0.001209f, + +0.003142f, +0.001934f, +0.000621f, -0.004691f, -0.001424f, -0.002384f, +0.002672f, -0.000120f, +0.005216f, -0.002299f, + +0.001009f, +0.002183f, +0.003358f, -0.001898f, +0.000410f, +0.001181f + }, + { + -0.025940f, -0.055351f, -0.018909f, -0.017904f, -0.009930f, -0.021777f, +0.000213f, -0.009233f, +0.015381f, +0.004027f, + +0.018450f, -0.018140f, +0.012744f, +0.042040f, -0.033283f, -0.004285f, +0.012669f, +0.013034f, -0.019626f, -0.001073f, + +0.002332f, +0.004021f, -0.016598f, +0.000789f, +0.014224f, +0.004260f, -0.016813f, +0.004807f, -0.000339f, +0.005008f, + -0.002598f, -0.007393f, -0.011379f, -0.013470f, +0.001983f, +0.004015f, +0.000587f, -0.000707f, +0.011597f, +0.004982f, + -0.006962f, +0.017721f, -0.002011f, +0.004621f, -0.005023f, -0.001675f, +0.002441f, +0.001421f, +0.006169f, +0.006847f, + +0.009700f, -0.005904f, -0.004932f, +0.000200f, -0.003245f, +0.001361f, +0.006620f, +0.010318f, +0.002564f, +0.004162f, + -0.000716f, -0.006021f, -0.005916f, +0.004572f, +0.001043f, -0.000871f, -0.002635f, -0.009522f, -0.004949f, -0.003335f, + -0.005228f, +0.003390f, +0.001583f, +0.003512f, -0.001977f, +0.001345f, -0.004800f, +0.008732f, +0.005605f, -0.001832f, + +0.001247f, +0.001011f, +0.002179f, -0.002367f, -0.006020f, +0.000791f, +0.002517f, +0.000665f, +0.002337f, -0.003389f, + -0.001178f, +0.003220f, +0.003527f, -0.002901f, -0.002510f, +0.000048f + } + }, + { + { + +0.000245f, -0.014068f, +0.026797f, +0.065150f, -0.020748f, -0.004243f, +0.001653f, -0.002266f, +0.001209f, +0.005580f, + -0.008129f, -0.018250f, -0.018446f, -0.007815f, +0.002021f, +0.011038f, -0.022833f, -0.009363f, -0.019510f, -0.005111f, + +0.008857f, -0.016132f, -0.040787f, -0.011875f, +0.008412f, -0.000655f, -0.000317f, -0.003435f, -0.006406f, -0.000375f, + +0.009468f, -0.008064f, +0.007110f, -0.014429f, -0.001078f, +0.003389f, +0.014845f, -0.000787f, -0.004465f, -0.006249f, + -0.002049f, -0.007794f, +0.006726f, +0.003885f, -0.001396f, -0.011497f, -0.001331f, +0.001765f, +0.001788f, +0.007061f, + +0.004334f, +0.010216f, -0.003833f, -0.000722f, -0.008354f, +0.003968f, +0.002759f, -0.008644f, -0.001626f, +0.001051f, + -0.005979f, +0.001607f, +0.005387f, +0.000248f, +0.001212f, -0.003603f, +0.000432f, +0.004758f, +0.003995f, +0.002466f, + +0.002882f, -0.005023f, -0.006824f, +0.003644f, -0.002869f, +0.001620f, +0.004139f, +0.004086f, -0.002062f, +0.000349f, + +0.001528f, -0.001789f, +0.000699f, +0.003658f, -0.000486f, +0.002805f, -0.000842f, -0.000416f, +0.000044f, +0.001705f, + +0.003653f, +0.002290f, +0.002577f, +0.003168f, -0.000534f, -0.001094f + }, + { + -0.007616f, +0.293974f, -0.017633f, -0.106164f, -0.032509f, +0.008405f, +0.015694f, +0.024423f, +0.011515f, -0.031116f, + +0.002389f, +0.036281f, +0.011679f, +0.005057f, -0.000198f, -0.000528f, +0.030884f, -0.011745f, -0.001235f, +0.023407f, + -0.003411f, +0.004450f, -0.011100f, -0.017873f, -0.007545f, -0.004735f, +0.015161f, -0.000353f, -0.015807f, +0.019138f, + -0.009005f, +0.001537f, +0.017755f, -0.000559f, -0.000792f, -0.001621f, +0.006755f, +0.013259f, +0.018541f, +0.010075f, + -0.007974f, -0.007055f, +0.005285f, -0.003414f, -0.001104f, -0.004942f, +0.002415f, +0.008235f, +0.007124f, -0.002696f, + -0.001949f, +0.006533f, -0.003443f, -0.006698f, -0.003819f, -0.002584f, +0.002481f, -0.008504f, -0.008719f, +0.000675f, + -0.000643f, -0.003775f, +0.003413f, -0.002702f, +0.004722f, -0.000020f, +0.000194f, -0.005516f, -0.002812f, -0.002265f, + +0.006342f, +0.001992f, -0.001067f, -0.004479f, -0.002691f, +0.005575f, -0.001123f, -0.000190f, +0.004252f, -0.003812f, + -0.002365f, -0.000475f, -0.001022f, +0.001507f, -0.001362f, -0.000561f, +0.001053f, +0.002389f, +0.001497f, -0.001967f, + -0.001315f, -0.000142f, -0.002946f, +0.000925f, +0.000310f, +0.000992f + }, + { + +0.008355f, -0.121090f, -0.030040f, -0.003239f, +0.018980f, -0.004623f, +0.014222f, +0.001379f, -0.005244f, +0.021426f, + +0.005471f, +0.012795f, -0.003502f, +0.008605f, +0.023983f, +0.012503f, +0.021888f, -0.018050f, +0.003872f, +0.021788f, + -0.000049f, -0.004598f, +0.006408f, +0.018338f, +0.010739f, +0.003953f, -0.005770f, +0.005790f, +0.010650f, +0.000975f, + -0.000013f, -0.000411f, -0.000438f, -0.010100f, -0.003461f, +0.013171f, -0.004551f, -0.003717f, +0.001829f, +0.010283f, + -0.002955f, -0.000139f, +0.009695f, +0.004754f, -0.005376f, +0.010773f, +0.005572f, +0.002887f, -0.005968f, +0.006789f, + -0.001070f, +0.006499f, +0.004045f, -0.000946f, +0.005581f, +0.004816f, -0.002252f, -0.004023f, -0.006569f, +0.001961f, + +0.000350f, +0.002630f, -0.005509f, -0.003998f, +0.004729f, -0.003968f, +0.002136f, +0.004580f, -0.003003f, -0.001149f, + +0.000159f, +0.002082f, -0.001863f, -0.000578f, -0.000608f, -0.005120f, -0.004560f, +0.001584f, +0.003690f, +0.005226f, + +0.001035f, -0.002021f, -0.000562f, +0.000590f, +0.004709f, +0.000320f, -0.001344f, -0.002701f, -0.001037f, +0.000610f, + -0.001743f, -0.003473f, -0.000908f, +0.003489f, +0.000854f, -0.003799f + }, + { + +0.003163f, -0.068756f, -0.004152f, +0.016838f, +0.006060f, -0.001439f, -0.002180f, -0.001224f, +0.003049f, -0.019819f, + -0.002744f, -0.014122f, -0.007158f, +0.002353f, +0.025767f, -0.004947f, +0.013532f, +0.007183f, +0.004132f, +0.001230f, + -0.016226f, -0.014778f, +0.010230f, +0.004531f, -0.011114f, -0.010225f, -0.007620f, -0.004453f, +0.003914f, -0.003857f, + +0.004014f, +0.014946f, -0.000034f, +0.013033f, +0.002451f, -0.001861f, +0.012936f, -0.005270f, +0.000672f, -0.004912f, + -0.002523f, +0.014029f, -0.002266f, +0.002547f, +0.011322f, +0.001603f, +0.001176f, -0.001272f, -0.008657f, -0.003069f, + -0.003363f, -0.003102f, -0.008411f, +0.003709f, +0.001973f, -0.001642f, -0.000385f, +0.003791f, -0.001091f, +0.006483f, + +0.001810f, +0.002117f, +0.002891f, -0.001394f, +0.003966f, -0.002844f, -0.007102f, -0.000455f, -0.002767f, -0.002437f, + +0.006120f, +0.002437f, -0.000096f, +0.001211f, -0.005139f, -0.001903f, +0.001223f, -0.003244f, -0.002522f, +0.003347f, + -0.003962f, -0.000482f, -0.000258f, -0.001736f, +0.002040f, +0.001429f, -0.002224f, -0.000544f, +0.000283f, -0.000137f, + +0.002487f, -0.003352f, +0.000583f, +0.000813f, -0.000540f, -0.000581f + }, + { + +0.017885f, -0.063203f, +0.012991f, +0.042167f, -0.007484f, -0.005431f, -0.002440f, +0.014916f, -0.013990f, +0.017422f, + +0.012953f, +0.014663f, +0.003089f, +0.004793f, +0.006352f, -0.011674f, +0.008537f, -0.000324f, +0.041015f, -0.004181f, + -0.003439f, +0.006162f, +0.012114f, +0.002091f, +0.003921f, +0.001426f, -0.001396f, -0.001732f, +0.008660f, +0.005969f, + +0.008183f, -0.006156f, +0.012806f, +0.004892f, -0.000120f, -0.007931f, +0.002763f, +0.009014f, +0.001908f, -0.005755f, + -0.004734f, -0.010044f, -0.000897f, +0.007138f, +0.011674f, +0.006481f, -0.008837f, +0.006017f, +0.004268f, +0.000190f, + -0.000774f, -0.005608f, +0.001460f, -0.002520f, +0.005795f, -0.008074f, -0.004258f, -0.003530f, -0.001903f, +0.006986f, + -0.003580f, -0.001301f, +0.002959f, -0.004740f, +0.006249f, -0.000753f, +0.004468f, +0.002553f, -0.004229f, -0.000928f, + -0.001209f, -0.000932f, +0.000786f, +0.003652f, -0.001767f, -0.002947f, +0.000595f, +0.003815f, +0.000688f, -0.000286f, + +0.001430f, -0.000317f, -0.000549f, +0.001319f, +0.002198f, -0.000135f, -0.001834f, -0.003414f, +0.000982f, -0.000083f, + -0.000206f, -0.002138f, -0.002526f, +0.002047f, -0.002895f, +0.000553f + }, + { + -0.002906f, +0.006029f, +0.004991f, +0.006745f, -0.002844f, -0.001806f, +0.005413f, +0.000579f, -0.000367f, -0.007732f, + -0.007596f, -0.005095f, +0.004240f, -0.009945f, +0.070097f, +0.027067f, +0.032156f, -0.003792f, +0.003055f, -0.000419f, + -0.001362f, +0.017853f, -0.004153f, -0.010112f, -0.000772f, +0.008681f, +0.025045f, +0.005203f, +0.004290f, +0.002130f, + -0.020857f, -0.012207f, -0.012718f, -0.007343f, -0.000303f, -0.006482f, -0.001630f, -0.008053f, -0.002683f, +0.009163f, + -0.005982f, -0.009023f, +0.004160f, +0.004320f, +0.001799f, +0.009457f, +0.004559f, +0.006454f, -0.001777f, +0.006937f, + +0.002743f, -0.000018f, +0.008390f, -0.007957f, -0.005211f, -0.003993f, +0.004484f, -0.002242f, -0.002010f, -0.003515f, + +0.002377f, +0.001875f, +0.003387f, +0.001118f, +0.004862f, -0.000184f, -0.002813f, -0.001330f, +0.000655f, -0.007626f, + +0.003035f, -0.002167f, +0.000176f, +0.005348f, +0.004635f, +0.001542f, -0.001672f, -0.002710f, -0.003517f, -0.004826f, + +0.002248f, -0.000718f, +0.000182f, +0.003730f, -0.000808f, -0.001560f, +0.000952f, -0.000577f, +0.003497f, +0.000409f, + -0.000581f, -0.002442f, -0.002166f, -0.001154f, -0.001704f, -0.002186f + }, + { + +0.030302f, +0.001869f, -0.021688f, +0.078637f, +0.002439f, +0.007165f, -0.000862f, -0.002786f, -0.002352f, -0.013198f, + -0.007319f, +0.013134f, +0.012540f, -0.009745f, -0.020817f, +0.011246f, +0.017413f, +0.019584f, +0.007672f, -0.001935f, + +0.011813f, +0.010430f, +0.003291f, -0.018642f, +0.007422f, +0.003020f, -0.010807f, -0.004198f, +0.005714f, +0.000031f, + +0.014148f, +0.020780f, -0.011998f, +0.008891f, -0.001558f, +0.020359f, -0.004237f, +0.002937f, +0.002331f, +0.002577f, + +0.001752f, -0.000044f, +0.006245f, -0.007636f, +0.011218f, -0.000391f, -0.000982f, +0.007932f, -0.000873f, +0.010388f, + +0.003471f, +0.001677f, +0.001853f, -0.006373f, +0.003184f, +0.001412f, +0.007631f, +0.001236f, +0.005600f, +0.000642f, + -0.001732f, -0.002140f, +0.004041f, -0.000707f, -0.006917f, -0.004909f, -0.003726f, -0.000069f, +0.008151f, +0.006586f, + +0.001353f, -0.004417f, -0.001250f, +0.000608f, +0.004212f, +0.000261f, +0.003950f, -0.006308f, +0.002171f, +0.000280f, + -0.001567f, -0.001117f, -0.003258f, -0.003565f, -0.002689f, +0.002144f, -0.000160f, +0.001510f, -0.002569f, +0.001485f, + -0.003318f, +0.000460f, +0.002218f, -0.001126f, +0.001970f, +0.001576f + }, + { + -0.006558f, -0.043411f, -0.016275f, -0.018264f, +0.009099f, -0.001106f, +0.001022f, +0.005945f, +0.005865f, -0.006670f, + -0.003034f, +0.015628f, -0.003485f, -0.046527f, -0.001903f, +0.012885f, +0.023102f, +0.011067f, -0.013232f, -0.005528f, + -0.009400f, -0.015631f, +0.008251f, -0.015216f, +0.000304f, -0.011471f, +0.002523f, -0.005074f, +0.008924f, +0.012014f, + -0.006948f, +0.015486f, -0.005319f, +0.010415f, +0.003281f, +0.002618f, +0.015928f, -0.005277f, -0.004841f, -0.012012f, + +0.000472f, +0.011390f, +0.004200f, +0.005588f, -0.001464f, +0.011940f, +0.000043f, -0.002230f, +0.001055f, -0.002575f, + +0.002444f, +0.008968f, -0.007087f, +0.003935f, -0.005446f, -0.004872f, +0.007191f, -0.004816f, +0.004588f, +0.010491f, + +0.003437f, +0.001956f, +0.002862f, +0.005262f, -0.003679f, +0.000150f, -0.003479f, +0.004508f, -0.001384f, +0.004543f, + +0.004982f, +0.001502f, +0.003274f, -0.005582f, -0.006007f, -0.001462f, +0.000445f, +0.001658f, -0.000448f, -0.005029f, + -0.002445f, +0.000407f, +0.001421f, +0.001047f, -0.005230f, -0.000702f, -0.000161f, -0.002697f, +0.000548f, -0.000088f, + +0.000232f, -0.002310f, -0.001535f, -0.000479f, -0.000021f, -0.003015f + }, + { + +0.031972f, -0.044615f, -0.009200f, +0.080944f, -0.008678f, +0.004819f, -0.007966f, +0.003097f, +0.016650f, -0.017342f, + +0.019485f, -0.007342f, -0.011805f, -0.015859f, +0.030061f, +0.003036f, -0.014318f, +0.002162f, +0.001638f, -0.001607f, + -0.006251f, -0.017565f, -0.009949f, +0.005307f, +0.007227f, +0.008088f, -0.006978f, +0.004882f, -0.012619f, -0.004614f, + -0.005491f, -0.007586f, -0.001434f, +0.003457f, +0.008341f, +0.009811f, -0.001789f, -0.004132f, -0.000411f, -0.003673f, + -0.000898f, -0.001541f, -0.006491f, +0.005745f, +0.006995f, -0.003814f, -0.001299f, -0.000762f, +0.003408f, -0.006024f, + +0.004911f, -0.000056f, +0.004186f, -0.007602f, +0.008406f, -0.002502f, +0.000563f, -0.003735f, -0.003571f, +0.003126f, + -0.005865f, +0.001101f, +0.000916f, +0.003974f, +0.000113f, +0.000721f, +0.002029f, -0.000140f, -0.001958f, -0.001436f, + +0.003691f, -0.000113f, +0.000172f, +0.002972f, -0.000638f, +0.002684f, -0.000967f, -0.002473f, -0.000555f, +0.001633f, + -0.001275f, -0.000572f, -0.000082f, +0.000048f, +0.000047f, -0.000699f, -0.000916f, -0.000619f, -0.004050f, -0.000636f, + -0.000813f, -0.001076f, -0.000098f, +0.002155f, +0.001211f, -0.001447f + }, + { + +0.007257f, -0.013929f, -0.016307f, +0.001469f, +0.012282f, -0.017963f, -0.042032f, -0.004732f, +0.014056f, +0.003092f, + -0.002883f, +0.016219f, -0.000582f, +0.030104f, +0.009931f, -0.002086f, +0.003750f, -0.012067f, -0.011128f, +0.019531f, + -0.025480f, +0.005451f, +0.007079f, -0.020279f, -0.017411f, +0.004528f, -0.005805f, -0.007415f, +0.006186f, -0.007960f, + +0.011473f, +0.014184f, -0.007098f, -0.011243f, -0.012060f, -0.000463f, -0.003158f, -0.002472f, +0.012044f, -0.001175f, + -0.001311f, -0.010062f, +0.011046f, -0.003490f, +0.007294f, -0.000578f, +0.001630f, -0.008929f, +0.003694f, -0.000457f, + +0.000062f, +0.002862f, -0.003946f, +0.000100f, +0.007654f, -0.012496f, -0.002181f, -0.002649f, +0.003601f, +0.003600f, + -0.010258f, +0.006076f, +0.002501f, -0.006755f, -0.005454f, +0.002827f, +0.000828f, +0.000884f, -0.010197f, +0.001659f, + -0.001434f, +0.000778f, -0.001345f, +0.003823f, +0.000835f, +0.000097f, +0.000009f, +0.004899f, -0.003186f, -0.003352f, + -0.001032f, -0.000548f, +0.000111f, +0.000840f, -0.002273f, +0.001675f, +0.000741f, -0.002990f, +0.004130f, +0.000207f, + -0.003729f, +0.001299f, -0.002687f, -0.001795f, +0.000663f, +0.000293f + }, + { + -0.021326f, -0.108604f, -0.004676f, -0.007831f, +0.013048f, +0.001451f, +0.025859f, -0.008861f, +0.013623f, +0.021033f, + -0.000946f, -0.000077f, -0.010249f, -0.011949f, -0.008337f, -0.003370f, -0.019506f, -0.011768f, -0.006622f, -0.019653f, + +0.009879f, -0.003429f, +0.001895f, -0.016324f, -0.009123f, +0.006285f, +0.001242f, -0.000560f, -0.011019f, -0.009505f, + -0.010740f, -0.019453f, -0.007070f, -0.008147f, +0.000947f, +0.014918f, +0.024147f, +0.002407f, +0.010441f, -0.000738f, + -0.007277f, -0.013719f, +0.005655f, +0.005082f, -0.000921f, +0.006657f, -0.000242f, -0.006392f, +0.004602f, +0.003908f, + -0.014594f, -0.001632f, -0.007296f, +0.010765f, -0.001216f, +0.010621f, -0.006112f, +0.007056f, -0.000182f, -0.004265f, + -0.006779f, +0.007023f, +0.003492f, +0.003892f, -0.006895f, +0.000224f, -0.002345f, +0.002803f, -0.001659f, -0.003136f, + +0.002248f, +0.001290f, +0.000112f, -0.000857f, +0.002499f, -0.001207f, -0.000953f, -0.000506f, +0.000546f, -0.001584f, + +0.004466f, -0.001872f, -0.001696f, -0.001835f, -0.000476f, -0.002494f, -0.001559f, -0.002931f, -0.001523f, -0.001473f, + +0.001095f, -0.001904f, +0.004342f, +0.000479f, +0.001717f, +0.002037f + }, + { + +0.004422f, -0.050168f, -0.016994f, -0.007784f, +0.002928f, +0.002439f, +0.007551f, -0.004839f, -0.000581f, +0.000891f, + +0.024675f, -0.006597f, +0.012822f, -0.051586f, +0.004134f, -0.010013f, -0.004238f, -0.000878f, +0.013329f, +0.003110f, + +0.007279f, +0.004930f, +0.003411f, +0.000450f, -0.003681f, -0.011652f, +0.020663f, +0.026289f, -0.001962f, +0.012668f, + +0.026701f, -0.003379f, +0.004314f, +0.022370f, +0.003935f, +0.001098f, -0.009927f, +0.010163f, +0.000718f, -0.005088f, + +0.009580f, +0.001426f, +0.014600f, -0.012020f, +0.002219f, -0.013019f, -0.003176f, +0.012869f, -0.000217f, -0.016454f, + +0.016804f, +0.001661f, +0.016949f, +0.001172f, -0.000640f, +0.006977f, +0.003911f, +0.007953f, +0.001862f, +0.005582f, + -0.001860f, +0.001020f, -0.006579f, +0.002792f, -0.004362f, +0.002637f, +0.000685f, +0.002594f, -0.006149f, +0.000340f, + -0.005839f, -0.003576f, -0.003097f, -0.000195f, +0.002778f, +0.000744f, +0.001443f, +0.002073f, -0.000465f, +0.001835f, + -0.000488f, -0.003783f, +0.002735f, -0.000978f, +0.001864f, -0.003451f, +0.002317f, +0.000080f, +0.003549f, -0.003254f, + -0.001873f, +0.000520f, +0.005458f, +0.000517f, -0.003214f, +0.002024f + }, + { + +0.027244f, +0.062653f, -0.013275f, -0.012378f, +0.014916f, -0.047121f, -0.007986f, -0.006053f, -0.022401f, -0.010362f, + -0.013663f, +0.016086f, +0.014789f, -0.030105f, +0.005225f, -0.004968f, +0.015134f, -0.002761f, +0.031201f, -0.001274f, + -0.015345f, -0.004712f, +0.006003f, +0.009177f, -0.000271f, -0.016036f, -0.006929f, -0.012758f, -0.006541f, +0.003194f, + -0.008306f, -0.009844f, -0.011727f, -0.000025f, +0.001280f, +0.018834f, -0.011952f, +0.012855f, -0.011019f, -0.010661f, + +0.000975f, -0.015195f, +0.003094f, +0.011582f, +0.018869f, +0.002193f, +0.006970f, +0.005893f, +0.000897f, +0.002346f, + +0.009253f, -0.002881f, -0.008862f, -0.006438f, +0.000213f, -0.001403f, +0.000402f, -0.002114f, -0.006639f, -0.007288f, + +0.003663f, +0.000103f, -0.005548f, -0.009784f, -0.006959f, +0.002450f, -0.001476f, +0.002488f, +0.000839f, -0.004780f, + +0.002346f, -0.004302f, -0.000115f, -0.005413f, -0.005300f, -0.000053f, +0.007516f, +0.000528f, +0.003566f, -0.004229f, + +0.000664f, +0.001791f, +0.000640f, -0.003135f, +0.001484f, +0.000167f, +0.001665f, +0.002375f, +0.000415f, +0.002576f, + -0.000287f, -0.001120f, -0.001123f, -0.000127f, +0.000167f, -0.000654f + }, + { + +0.003043f, +0.053434f, +0.006697f, -0.000761f, +0.013583f, +0.005198f, +0.002163f, -0.019413f, -0.009436f, +0.008950f, + +0.009593f, -0.008150f, -0.004859f, +0.057312f, +0.146504f, +0.040140f, -0.041345f, -0.022146f, +0.011050f, -0.019553f, + +0.023440f, +0.020899f, +0.004970f, -0.009580f, -0.005466f, -0.027085f, +0.000444f, -0.003055f, +0.013410f, -0.008059f, + +0.008432f, -0.011773f, -0.000362f, -0.005536f, +0.008694f, -0.000624f, +0.012597f, +0.001106f, -0.018864f, +0.003938f, + +0.002787f, -0.012531f, -0.012902f, -0.001152f, -0.000286f, -0.011449f, -0.002076f, +0.011143f, -0.011117f, -0.004143f, + -0.001250f, +0.003660f, -0.007067f, +0.008653f, +0.006320f, +0.001703f, -0.012513f, +0.005571f, -0.003309f, +0.003763f, + -0.007687f, +0.001222f, +0.003833f, -0.002107f, -0.006309f, -0.000838f, +0.000495f, +0.004571f, -0.004792f, -0.002144f, + +0.001287f, +0.000838f, +0.000289f, -0.003195f, -0.000516f, +0.004080f, +0.003324f, +0.000123f, -0.001210f, -0.001125f, + -0.001867f, +0.000438f, -0.000500f, -0.003767f, +0.001629f, -0.000955f, +0.002267f, -0.003028f, +0.001301f, -0.001541f, + +0.000247f, +0.000003f, +0.000546f, -0.005216f, -0.002132f, +0.000469f + }, + { + +0.026735f, +0.031288f, -0.002974f, -0.006824f, -0.004170f, -0.013950f, +0.011532f, +0.002059f, +0.006090f, -0.029031f, + -0.028275f, -0.037291f, +0.011784f, -0.011819f, -0.088485f, -0.012323f, +0.034292f, +0.030290f, +0.010350f, +0.029581f, + +0.011878f, +0.005004f, +0.001352f, +0.006735f, +0.026741f, +0.012338f, -0.015733f, +0.016495f, +0.007052f, +0.008444f, + +0.030838f, +0.017473f, -0.017911f, -0.006537f, +0.005844f, +0.000417f, -0.010016f, -0.003186f, -0.008354f, -0.005565f, + -0.008116f, +0.005375f, -0.010838f, -0.002865f, -0.012073f, -0.004017f, +0.004086f, -0.002171f, -0.002174f, -0.010004f, + -0.001678f, -0.011466f, -0.005279f, -0.000309f, -0.009145f, +0.001148f, +0.008472f, +0.005005f, -0.000930f, -0.005817f, + -0.005180f, -0.008613f, -0.004948f, +0.008810f, -0.001157f, +0.000486f, -0.000715f, -0.004680f, -0.003026f, -0.000576f, + -0.003119f, +0.003072f, +0.000514f, -0.001704f, -0.003354f, +0.004596f, -0.001313f, +0.007905f, -0.002778f, -0.006430f, + +0.002881f, +0.000034f, +0.002011f, -0.001730f, -0.005185f, +0.001395f, +0.004191f, +0.000159f, +0.003630f, +0.001044f, + -0.000678f, +0.000536f, -0.000323f, -0.003476f, -0.001146f, +0.000327f + } + }, + { + { + +0.002141f, +0.058218f, -0.016126f, +0.015408f, +0.002458f, -0.004789f, +0.003331f, -0.008028f, -0.012076f, +0.005837f, + +0.012799f, -0.036831f, +0.003183f, -0.008745f, -0.006536f, +0.004108f, -0.016613f, -0.001759f, -0.001840f, -0.018749f, + -0.005244f, -0.010422f, -0.023884f, -0.013142f, +0.014564f, -0.009334f, +0.006058f, -0.025888f, +0.007273f, -0.006025f, + -0.007141f, +0.002197f, +0.002904f, +0.002643f, -0.000352f, -0.011392f, +0.008480f, +0.006069f, -0.008357f, -0.010972f, + +0.004683f, -0.002619f, +0.006741f, -0.004043f, +0.001512f, -0.012293f, -0.003597f, +0.006969f, -0.005265f, +0.011418f, + +0.008416f, +0.004677f, +0.002739f, -0.004189f, -0.008997f, +0.002225f, -0.000848f, -0.005069f, +0.004935f, -0.001796f, + -0.003291f, -0.001403f, +0.000467f, +0.002912f, -0.002362f, -0.004775f, +0.004417f, -0.003583f, +0.010178f, +0.003184f, + -0.000002f, -0.004177f, -0.006014f, +0.003474f, -0.002964f, -0.000768f, +0.004205f, +0.005897f, +0.000947f, -0.001229f, + +0.000833f, -0.000778f, +0.002753f, -0.000657f, +0.000024f, +0.002540f, +0.000095f, +0.001882f, -0.002057f, +0.003952f, + +0.002676f, +0.001606f, +0.004102f, -0.000000f, -0.000032f, +0.001169f + }, + { + +0.007317f, +0.237430f, +0.033904f, -0.161933f, +0.031218f, +0.000566f, +0.019346f, +0.033601f, -0.003239f, -0.016472f, + -0.000577f, +0.047694f, -0.000383f, -0.001986f, -0.004823f, +0.002085f, +0.012025f, +0.005409f, +0.024144f, +0.004625f, + -0.010788f, +0.004471f, -0.010975f, -0.009028f, -0.002251f, -0.009598f, +0.006464f, +0.010912f, -0.015429f, +0.007776f, + -0.000950f, +0.004891f, +0.003836f, -0.003482f, +0.001621f, +0.004469f, +0.004795f, +0.014123f, +0.016509f, +0.002852f, + -0.001885f, -0.010978f, -0.004018f, +0.001668f, +0.007750f, -0.008904f, +0.003446f, -0.000342f, +0.019578f, -0.011567f, + -0.003536f, +0.006057f, -0.003403f, -0.003437f, -0.002377f, -0.000314f, -0.005362f, -0.005690f, -0.002245f, -0.006161f, + +0.001824f, -0.008650f, -0.002449f, +0.002885f, +0.001010f, +0.006024f, +0.001005f, -0.002379f, -0.007322f, +0.003270f, + -0.002632f, +0.001492f, -0.002443f, +0.000880f, -0.003342f, +0.004490f, +0.000176f, +0.001764f, +0.001140f, +0.000826f, + -0.003458f, -0.002609f, +0.001539f, -0.002619f, +0.002156f, -0.000838f, +0.002607f, -0.000648f, +0.000724f, -0.001595f, + -0.000493f, -0.000509f, +0.000219f, +0.002928f, -0.001134f, -0.001329f + }, + { + -0.007839f, -0.151081f, +0.016031f, +0.063568f, -0.056096f, +0.015111f, -0.001031f, -0.011990f, +0.020499f, +0.001629f, + +0.008320f, +0.020093f, -0.003100f, +0.017618f, +0.018170f, +0.016606f, +0.021841f, -0.014833f, +0.001374f, +0.049415f, + -0.024645f, -0.005746f, +0.019716f, +0.007774f, +0.007514f, +0.006151f, -0.012420f, +0.018230f, +0.009989f, -0.001436f, + -0.005004f, +0.002693f, +0.006178f, -0.016725f, +0.005804f, -0.003180f, +0.018145f, -0.014805f, +0.004793f, +0.004600f, + +0.008873f, -0.007611f, -0.004542f, +0.014147f, -0.005524f, +0.009697f, +0.010273f, -0.001110f, -0.000578f, -0.003794f, + +0.011698f, +0.006335f, +0.006710f, +0.000071f, +0.001867f, +0.004392f, -0.001037f, -0.001787f, -0.003918f, +0.000025f, + +0.000644f, +0.001449f, -0.007385f, -0.001215f, +0.005105f, -0.001729f, +0.000043f, -0.000402f, +0.004212f, -0.005505f, + +0.000402f, +0.002191f, -0.000657f, +0.001376f, +0.001779f, -0.004531f, -0.002516f, -0.003980f, +0.007005f, +0.006159f, + -0.000047f, -0.005655f, +0.000199f, +0.001636f, +0.004410f, +0.002178f, -0.004007f, +0.000452f, -0.003924f, +0.004126f, + -0.003818f, -0.002500f, -0.000888f, +0.002553f, +0.000650f, -0.002057f + }, + { + -0.000253f, -0.053200f, -0.006889f, +0.013469f, +0.003832f, -0.001180f, -0.000770f, -0.009605f, +0.004088f, -0.001739f, + -0.015785f, -0.018885f, +0.000689f, -0.013582f, +0.031017f, +0.013743f, -0.008594f, +0.006933f, +0.032503f, -0.012305f, + -0.013261f, -0.006080f, -0.012117f, +0.006131f, -0.002146f, -0.013285f, -0.013530f, -0.010193f, +0.013410f, -0.000488f, + +0.012595f, +0.009999f, -0.001265f, +0.011833f, +0.005059f, -0.005932f, +0.004602f, -0.007762f, +0.011093f, +0.001050f, + -0.003268f, +0.001033f, +0.008567f, +0.004803f, +0.004701f, +0.004329f, +0.005018f, -0.003950f, -0.002828f, -0.007975f, + -0.003135f, -0.006492f, +0.001237f, -0.001020f, -0.001711f, -0.002839f, +0.002266f, +0.004126f, -0.003826f, +0.005787f, + +0.002782f, +0.003593f, +0.002129f, -0.000307f, -0.000066f, +0.001200f, -0.008813f, +0.001666f, -0.006303f, +0.001474f, + +0.004714f, -0.000829f, -0.000479f, +0.001096f, -0.002683f, +0.002024f, -0.006135f, -0.000177f, -0.002970f, +0.001419f, + +0.001209f, +0.001941f, -0.008041f, +0.001139f, -0.000552f, +0.000701f, -0.000528f, +0.000245f, -0.002075f, +0.001511f, + +0.001661f, -0.000963f, -0.001310f, -0.000289f, -0.001992f, +0.001872f + }, + { + -0.024490f, -0.018803f, +0.020645f, +0.055123f, -0.014883f, -0.007046f, +0.000199f, +0.006319f, -0.002353f, +0.009169f, + +0.015881f, +0.025483f, +0.008671f, -0.009449f, +0.006961f, -0.013047f, +0.002119f, -0.002751f, +0.035258f, -0.005052f, + +0.009029f, -0.008550f, +0.017317f, +0.019518f, -0.008793f, +0.008623f, -0.010036f, +0.009909f, +0.003633f, -0.006908f, + +0.000206f, +0.010277f, +0.005062f, +0.004705f, +0.000501f, -0.004775f, -0.001334f, +0.013568f, +0.001431f, -0.009343f, + +0.003227f, +0.006449f, -0.002070f, +0.009699f, +0.008853f, +0.005070f, -0.012032f, +0.007182f, -0.002437f, +0.008868f, + -0.007703f, -0.001810f, -0.004833f, +0.005825f, -0.004380f, -0.000923f, -0.010241f, +0.000882f, -0.004542f, +0.007074f, + -0.000607f, -0.000999f, -0.001652f, +0.000863f, -0.000776f, +0.003772f, +0.004062f, -0.002558f, +0.000636f, -0.000955f, + -0.005223f, +0.002967f, +0.001153f, -0.000263f, +0.003361f, -0.002507f, +0.001820f, +0.000209f, +0.000666f, +0.001288f, + -0.002994f, +0.001234f, +0.002919f, -0.000569f, -0.002703f, +0.001628f, -0.000419f, -0.001877f, +0.000114f, +0.001614f, + -0.002884f, -0.001596f, -0.002799f, +0.002006f, -0.002132f, +0.002452f + }, + { + -0.000279f, +0.007443f, -0.013502f, -0.002138f, +0.009889f, -0.000239f, +0.000154f, -0.000214f, -0.001714f, -0.004484f, + +0.004934f, -0.007514f, -0.007397f, -0.020801f, +0.084137f, +0.035220f, +0.025858f, +0.001684f, +0.000036f, +0.007756f, + -0.002526f, +0.019999f, -0.011970f, -0.003110f, +0.015035f, +0.001837f, +0.019184f, +0.002371f, +0.014812f, -0.015979f, + +0.009105f, -0.017541f, -0.003697f, +0.000878f, -0.004781f, -0.007189f, -0.003463f, -0.005742f, +0.002347f, +0.005131f, + -0.006188f, -0.004242f, -0.006385f, -0.002695f, +0.004140f, +0.008194f, +0.010633f, +0.003456f, +0.001183f, +0.001136f, + +0.003751f, +0.000149f, +0.005411f, -0.001530f, -0.008687f, -0.005259f, +0.007414f, -0.001083f, -0.005949f, +0.001444f, + -0.000034f, -0.000721f, -0.001007f, +0.005488f, +0.001216f, +0.002497f, -0.001805f, -0.000825f, -0.001653f, -0.001663f, + +0.000181f, -0.002522f, -0.000969f, +0.003229f, +0.003867f, -0.000676f, +0.005063f, -0.005157f, -0.006931f, -0.001570f, + -0.003355f, +0.001537f, +0.000966f, +0.005394f, +0.000846f, -0.000626f, -0.001945f, -0.001744f, +0.002519f, +0.000968f, + +0.002189f, -0.002712f, -0.003151f, -0.000817f, +0.000548f, -0.002323f + }, + { + -0.031000f, +0.070114f, -0.000492f, +0.082610f, -0.003048f, +0.003957f, -0.010588f, -0.004652f, +0.030959f, -0.025693f, + +0.005253f, +0.005581f, +0.005745f, -0.002465f, -0.019575f, +0.007483f, +0.058382f, -0.011384f, +0.009546f, +0.010160f, + +0.008702f, -0.001005f, +0.005695f, -0.019201f, +0.020159f, +0.011770f, -0.004114f, -0.015469f, +0.001061f, -0.003858f, + +0.014210f, +0.018758f, +0.000540f, -0.003052f, +0.006616f, +0.014533f, -0.005922f, +0.008060f, +0.006437f, -0.003546f, + -0.001110f, -0.003126f, -0.001081f, -0.008118f, +0.019064f, -0.004790f, +0.004204f, +0.006817f, -0.005239f, +0.013282f, + +0.003298f, +0.001229f, +0.000754f, -0.004390f, +0.006071f, -0.001986f, +0.005876f, -0.000080f, +0.004660f, +0.003738f, + -0.002305f, +0.000617f, -0.001616f, +0.002469f, -0.006360f, -0.004458f, -0.003926f, +0.000170f, +0.010614f, +0.004499f, + -0.001466f, +0.000346f, +0.002055f, -0.001458f, +0.001523f, +0.004123f, -0.003683f, +0.000788f, -0.002136f, +0.003281f, + -0.003676f, +0.000642f, -0.006242f, -0.001505f, -0.000836f, +0.002124f, +0.000010f, +0.000702f, -0.002538f, +0.000637f, + -0.000619f, +0.000393f, +0.000157f, +0.000385f, +0.002574f, -0.001552f + }, + { + -0.000689f, -0.071311f, -0.024826f, -0.001798f, -0.008283f, +0.010476f, +0.004003f, +0.006736f, -0.001905f, -0.004404f, + -0.007441f, +0.016129f, -0.008130f, -0.024835f, +0.004959f, +0.001853f, +0.039561f, -0.012510f, -0.021603f, +0.003713f, + -0.006561f, -0.006882f, -0.002762f, -0.020127f, +0.002366f, -0.008140f, +0.008826f, -0.013953f, -0.000595f, +0.007450f, + +0.013536f, +0.012927f, -0.005796f, +0.005608f, +0.011459f, -0.003432f, +0.009021f, -0.006652f, -0.016308f, -0.002167f, + +0.005698f, -0.001890f, +0.011927f, -0.001847f, +0.004903f, +0.005129f, +0.000431f, +0.001266f, -0.003085f, -0.000867f, + +0.008130f, +0.004976f, +0.001282f, -0.003896f, -0.001585f, -0.002398f, -0.000801f, -0.003241f, +0.005347f, +0.012406f, + +0.002074f, +0.004646f, -0.001149f, +0.006593f, -0.006072f, +0.006095f, -0.003386f, -0.000846f, +0.000769f, +0.003344f, + +0.001786f, +0.003637f, -0.001156f, +0.001046f, -0.005007f, -0.004582f, +0.000279f, +0.002308f, -0.000597f, -0.003029f, + -0.001069f, -0.000837f, -0.001221f, +0.001153f, -0.000452f, -0.003362f, -0.002511f, +0.000833f, +0.000278f, +0.000498f, + -0.000213f, -0.003015f, -0.002509f, -0.000023f, +0.001261f, -0.003172f + }, + { + -0.038860f, +0.035952f, +0.017102f, +0.097596f, -0.022765f, -0.002401f, +0.006166f, -0.010894f, +0.006965f, -0.003084f, + -0.030230f, +0.039614f, -0.027867f, +0.004132f, -0.017271f, -0.012578f, +0.030685f, -0.008582f, -0.005834f, -0.011416f, + -0.012314f, -0.013880f, -0.003588f, +0.008509f, -0.000172f, +0.021979f, -0.014853f, +0.000936f, -0.009050f, -0.000300f, + -0.002106f, -0.004623f, -0.006403f, -0.004364f, +0.003388f, +0.008849f, +0.003223f, -0.006146f, +0.002366f, -0.001269f, + -0.002285f, -0.000468f, -0.006700f, +0.001533f, -0.000772f, +0.001296f, +0.002609f, -0.005715f, +0.009498f, -0.002120f, + -0.004210f, +0.004567f, -0.003737f, +0.003147f, -0.001982f, +0.006248f, -0.012607f, +0.002739f, -0.011138f, +0.012673f, + -0.002276f, -0.004791f, -0.001364f, +0.001205f, +0.003202f, +0.003576f, -0.000204f, +0.001232f, -0.001115f, +0.000962f, + -0.000796f, +0.004375f, +0.000456f, -0.001001f, +0.002759f, -0.001975f, +0.000981f, -0.001271f, -0.001621f, +0.000864f, + +0.000383f, -0.001732f, +0.001224f, +0.001472f, -0.001025f, -0.000239f, -0.000116f, -0.002944f, -0.004001f, +0.001627f, + -0.003676f, +0.000018f, -0.002727f, +0.003360f, +0.001675f, -0.001302f + }, + { + -0.006894f, -0.026370f, +0.030270f, -0.007668f, -0.004044f, -0.040667f, -0.001410f, -0.010666f, +0.001050f, +0.019325f, + -0.013586f, -0.003238f, +0.027467f, +0.011833f, +0.027012f, -0.006634f, -0.007992f, -0.005537f, -0.015706f, -0.003091f, + +0.003550f, -0.011244f, +0.006908f, -0.030323f, -0.022588f, +0.008425f, -0.011548f, +0.005975f, +0.010776f, -0.000549f, + +0.004634f, +0.010294f, -0.004726f, -0.012867f, -0.011830f, +0.002603f, +0.000147f, +0.001507f, +0.005864f, +0.008884f, + -0.008785f, -0.002448f, +0.005201f, +0.000095f, +0.006151f, +0.007204f, -0.004537f, -0.005625f, -0.009082f, +0.010535f, + -0.000422f, +0.001478f, -0.002006f, -0.005659f, +0.004587f, -0.007925f, +0.000611f, +0.007874f, -0.005401f, +0.007176f, + +0.000575f, +0.002697f, -0.001112f, -0.001525f, -0.004829f, +0.005537f, -0.003651f, -0.006014f, -0.001798f, -0.002364f, + +0.000422f, -0.003169f, +0.002669f, +0.005197f, -0.003021f, +0.000427f, -0.000033f, +0.000496f, +0.004665f, -0.003870f, + -0.000388f, -0.000160f, -0.001550f, +0.001569f, -0.003745f, +0.003791f, -0.001481f, -0.000341f, +0.000384f, +0.002219f, + -0.001080f, -0.000258f, -0.003525f, +0.002008f, -0.001899f, -0.001323f + }, + { + +0.021500f, -0.127454f, -0.055492f, -0.023221f, +0.039214f, +0.040737f, +0.003892f, +0.006992f, -0.004379f, +0.003439f, + -0.011872f, +0.007718f, +0.021834f, -0.012115f, +0.003343f, -0.023179f, -0.009541f, -0.030827f, +0.003927f, -0.002981f, + -0.004506f, +0.001404f, -0.000548f, -0.028830f, +0.003329f, -0.005650f, +0.011277f, -0.001690f, -0.016047f, -0.016610f, + -0.007736f, -0.013640f, -0.005142f, -0.014244f, +0.011057f, +0.005922f, +0.021641f, -0.001860f, +0.016358f, -0.000641f, + -0.007998f, -0.015604f, +0.014154f, -0.001418f, +0.004319f, +0.006459f, -0.005856f, -0.003901f, +0.000770f, +0.000649f, + -0.014159f, -0.007494f, -0.005760f, +0.006623f, +0.001925f, +0.007040f, +0.001177f, -0.003966f, +0.004167f, +0.000536f, + -0.000159f, -0.004351f, +0.004079f, +0.002195f, -0.002583f, -0.001644f, -0.000930f, +0.002395f, -0.000755f, -0.003966f, + +0.004074f, -0.000128f, -0.001773f, -0.002748f, +0.003741f, -0.000958f, -0.000184f, -0.000184f, +0.002893f, -0.002850f, + +0.001979f, +0.000332f, -0.003303f, +0.001746f, -0.000416f, -0.002528f, -0.003716f, -0.001381f, -0.004767f, +0.002168f, + -0.001399f, +0.002514f, +0.001614f, -0.000991f, +0.001816f, -0.000048f + }, + { + -0.002394f, -0.043604f, -0.009018f, -0.005631f, -0.012881f, +0.010326f, +0.007849f, -0.005465f, +0.001999f, -0.002938f, + +0.019549f, +0.007110f, -0.015659f, -0.016561f, +0.005394f, -0.003371f, +0.002012f, +0.013046f, -0.007304f, -0.000349f, + +0.000680f, +0.015577f, -0.009251f, +0.003972f, +0.011304f, -0.018908f, +0.023948f, +0.026957f, +0.036160f, -0.013005f, + -0.002054f, +0.017427f, +0.012682f, +0.012876f, -0.011493f, +0.011525f, -0.008570f, +0.016565f, -0.005425f, +0.001450f, + +0.000671f, +0.005640f, +0.001773f, +0.002262f, +0.001109f, -0.001913f, -0.006480f, -0.005562f, +0.003153f, -0.004129f, + +0.008218f, +0.005914f, +0.008487f, +0.000749f, -0.001007f, +0.009439f, +0.007762f, +0.003877f, +0.005529f, +0.002941f, + -0.001552f, +0.003677f, -0.008612f, +0.000475f, +0.000819f, +0.000750f, -0.000986f, -0.001162f, +0.001336f, -0.000110f, + -0.007371f, -0.007831f, -0.004804f, +0.006380f, -0.000951f, -0.000213f, +0.001550f, +0.000578f, -0.002429f, +0.006072f, + -0.002807f, +0.000013f, +0.000295f, +0.000480f, +0.003843f, -0.003800f, +0.004336f, +0.000855f, -0.001124f, -0.001752f, + -0.000061f, +0.000781f, +0.001288f, +0.000637f, +0.000260f, +0.000597f + }, + { + -0.009445f, +0.127947f, -0.009894f, -0.030695f, -0.017873f, -0.014443f, -0.012185f, -0.005693f, -0.021477f, -0.024077f, + +0.011129f, +0.002539f, +0.025959f, -0.032257f, +0.016773f, -0.004448f, +0.004443f, -0.002450f, +0.015202f, -0.008926f, + +0.005859f, -0.010994f, +0.000786f, +0.018684f, -0.007261f, +0.002732f, -0.013944f, -0.026127f, -0.006051f, +0.002116f, + -0.001897f, -0.017488f, +0.002205f, -0.004726f, +0.007757f, +0.012699f, -0.020998f, +0.022733f, -0.009375f, -0.007982f, + -0.001887f, -0.015208f, -0.000180f, +0.014906f, +0.019861f, +0.011278f, +0.005652f, +0.002650f, +0.002510f, -0.000884f, + +0.009503f, -0.005471f, -0.006179f, -0.003454f, -0.006687f, +0.001929f, -0.000526f, -0.000018f, -0.002483f, -0.006864f, + -0.000317f, +0.003203f, -0.007847f, -0.012820f, +0.004980f, +0.000442f, -0.008180f, +0.004341f, -0.005961f, +0.000107f, + +0.001124f, -0.001745f, +0.000519f, -0.005942f, -0.003763f, +0.002338f, +0.000689f, +0.005023f, +0.000538f, -0.003255f, + +0.003012f, +0.002417f, -0.002469f, -0.002776f, +0.001107f, +0.003573f, +0.001391f, +0.001358f, -0.000802f, +0.005072f, + -0.000908f, +0.000583f, -0.004465f, +0.001794f, -0.001278f, +0.000604f + }, + { + -0.003628f, +0.054341f, +0.006482f, +0.010395f, +0.013371f, +0.001707f, +0.001521f, -0.021767f, -0.010321f, +0.003295f, + +0.016357f, +0.003097f, -0.019935f, -0.007249f, +0.249690f, +0.039433f, -0.025345f, -0.036166f, +0.016461f, +0.000622f, + -0.010853f, +0.024208f, +0.023041f, -0.015043f, -0.021030f, -0.026867f, +0.007043f, +0.002302f, +0.000324f, -0.002311f, + +0.004780f, -0.011845f, -0.002471f, -0.014582f, +0.021952f, +0.000575f, +0.005704f, +0.003300f, -0.013801f, -0.004300f, + +0.009186f, -0.020633f, -0.002589f, -0.002421f, -0.007662f, -0.000709f, +0.002296f, -0.005240f, -0.000228f, -0.007946f, + -0.003931f, +0.003048f, -0.006891f, +0.002494f, +0.005700f, -0.005651f, -0.001796f, +0.001713f, -0.004174f, +0.007364f, + -0.011345f, -0.009144f, +0.013150f, -0.006527f, -0.005590f, +0.000221f, -0.003996f, +0.009010f, -0.009669f, +0.003902f, + +0.000320f, +0.000659f, -0.000549f, -0.002664f, -0.001148f, +0.002031f, +0.003224f, -0.003738f, +0.003543f, +0.000611f, + -0.001793f, -0.001481f, -0.003798f, +0.003605f, -0.003133f, +0.000915f, -0.000773f, +0.000592f, -0.003229f, +0.002698f, + +0.000498f, -0.001443f, -0.003695f, -0.001990f, -0.004396f, -0.000172f + }, + { + -0.018617f, +0.097431f, +0.004326f, -0.018222f, -0.020174f, +0.011611f, +0.005877f, +0.006564f, +0.002567f, -0.021423f, + -0.043211f, -0.023602f, -0.008714f, -0.032266f, -0.091180f, +0.004470f, +0.060203f, +0.009616f, +0.039555f, +0.009136f, + +0.025003f, -0.011400f, +0.018854f, +0.009712f, +0.019325f, +0.014282f, -0.006264f, +0.013737f, +0.015106f, +0.011249f, + +0.016450f, +0.020649f, -0.005990f, -0.003469f, +0.003164f, -0.002360f, -0.015877f, +0.004181f, -0.009971f, -0.018376f, + +0.004416f, -0.002735f, +0.004166f, -0.012005f, -0.005045f, -0.008021f, +0.007076f, -0.002592f, -0.009603f, -0.005539f, + -0.001183f, -0.013570f, +0.005554f, -0.012147f, -0.003687f, +0.002521f, +0.011382f, -0.004337f, -0.003064f, -0.004004f, + -0.008875f, -0.006752f, -0.000190f, +0.004727f, -0.002303f, +0.001682f, -0.001980f, +0.002611f, -0.002636f, -0.008160f, + -0.001342f, +0.002836f, +0.003922f, -0.001979f, -0.002691f, +0.004941f, -0.001661f, +0.003866f, -0.001473f, -0.005850f, + +0.003339f, +0.000917f, +0.001254f, -0.002142f, -0.000796f, -0.000042f, +0.001902f, +0.000726f, +0.000495f, +0.000051f, + +0.001080f, +0.000596f, -0.000996f, -0.002582f, +0.001680f, -0.000142f + } + }, + { + { + -0.001512f, +0.092096f, +0.022725f, -0.048405f, -0.027445f, +0.009791f, +0.001837f, +0.002579f, -0.006484f, +0.008674f, + +0.021944f, -0.011945f, +0.027018f, -0.003670f, -0.019597f, +0.013655f, +0.023679f, +0.036464f, +0.015870f, -0.028666f, + +0.009351f, +0.017035f, -0.001581f, -0.001179f, +0.002617f, -0.015820f, +0.007758f, -0.029150f, -0.000977f, -0.004994f, + -0.004793f, +0.004241f, +0.004271f, -0.004256f, -0.010455f, -0.018157f, +0.001884f, -0.004171f, -0.018860f, -0.006821f, + +0.013648f, +0.007963f, +0.004674f, -0.012244f, +0.009907f, -0.005968f, -0.007261f, +0.001940f, -0.008068f, +0.005947f, + +0.000338f, -0.001999f, +0.000795f, +0.001410f, -0.003350f, -0.002345f, -0.003430f, -0.001952f, +0.000170f, -0.011411f, + -0.002944f, +0.002217f, +0.003693f, +0.004166f, -0.003773f, -0.004348f, +0.004572f, -0.000165f, +0.010759f, +0.001092f, + -0.005940f, -0.000408f, +0.001913f, -0.000548f, -0.002617f, -0.000265f, +0.001337f, +0.002447f, +0.003669f, +0.002236f, + -0.000201f, -0.000376f, +0.001818f, -0.001343f, +0.000400f, +0.000308f, -0.002132f, +0.001926f, -0.002687f, +0.001604f, + +0.000348f, -0.000730f, +0.001565f, -0.000647f, -0.000987f, -0.000071f + }, + { + -0.004837f, +0.182593f, -0.002630f, -0.105206f, +0.091073f, +0.014126f, +0.008452f, -0.006046f, -0.007786f, -0.010315f, + -0.034361f, +0.013588f, -0.008042f, -0.007420f, +0.004908f, -0.010851f, -0.019964f, -0.008839f, +0.014122f, -0.006236f, + -0.004759f, +0.007171f, -0.010896f, -0.004992f, +0.008279f, +0.007857f, +0.014271f, +0.014404f, -0.022406f, -0.005900f, + -0.013687f, -0.000188f, +0.008426f, -0.003179f, -0.008397f, -0.005158f, -0.003063f, +0.003738f, -0.000263f, -0.009082f, + -0.005782f, -0.014483f, -0.004362f, +0.000279f, +0.005260f, -0.009159f, -0.001518f, -0.007755f, +0.004412f, -0.015922f, + -0.003722f, +0.004601f, +0.001191f, +0.000499f, +0.000827f, +0.000803f, -0.002582f, +0.001068f, +0.000524f, -0.010076f, + +0.001269f, -0.008215f, -0.001467f, +0.005999f, -0.004775f, -0.001127f, -0.003343f, +0.004527f, -0.001667f, +0.001392f, + -0.008382f, +0.000322f, -0.000439f, +0.003734f, -0.005616f, +0.000900f, +0.003329f, +0.001384f, -0.000492f, +0.004194f, + -0.000211f, -0.000708f, +0.002280f, -0.004496f, +0.003654f, +0.000009f, +0.001655f, -0.001892f, -0.003562f, -0.000998f, + +0.003134f, +0.001960f, +0.003344f, +0.003273f, -0.001290f, -0.001831f + }, + { + +0.002174f, -0.157647f, +0.007759f, +0.121977f, -0.017540f, +0.014369f, +0.003777f, -0.003529f, +0.016121f, -0.001977f, + +0.024859f, +0.036908f, -0.007511f, +0.011648f, +0.019321f, +0.000663f, +0.013406f, -0.000813f, +0.003379f, +0.036195f, + -0.014864f, +0.009300f, +0.014562f, +0.005626f, +0.003419f, +0.000516f, -0.009202f, +0.016354f, +0.001547f, +0.001945f, + -0.013096f, -0.007004f, +0.021237f, +0.003275f, +0.008480f, -0.005068f, +0.013734f, -0.017503f, +0.004780f, -0.008988f, + +0.006693f, -0.003962f, -0.007991f, +0.022415f, -0.002523f, -0.008573f, -0.002704f, -0.003509f, -0.002289f, -0.003184f, + +0.008794f, +0.002333f, +0.003209f, +0.000407f, -0.003042f, -0.003073f, +0.000242f, +0.005005f, +0.004590f, +0.003421f, + +0.003988f, +0.006537f, +0.000040f, +0.001781f, +0.002982f, +0.001027f, +0.002876f, -0.003861f, +0.005558f, -0.007917f, + -0.004080f, +0.000400f, +0.001176f, +0.001692f, +0.000468f, -0.004534f, -0.001506f, -0.004071f, +0.001118f, -0.001744f, + -0.002711f, -0.005498f, -0.000949f, +0.000227f, +0.001481f, -0.000480f, -0.003170f, +0.002182f, -0.002074f, +0.004830f, + -0.002476f, +0.000208f, +0.000052f, +0.002589f, +0.001114f, +0.000083f + }, + { + -0.002995f, -0.050766f, -0.003370f, -0.001805f, -0.006943f, -0.001634f, -0.004478f, -0.002462f, +0.005530f, +0.001169f, + -0.003272f, -0.021742f, +0.000148f, -0.015143f, +0.005079f, -0.004765f, -0.029616f, +0.000047f, +0.033838f, -0.015435f, + -0.001976f, -0.004916f, -0.028641f, +0.005215f, -0.008058f, -0.016731f, -0.002296f, -0.008776f, +0.007593f, +0.000872f, + +0.011424f, +0.016329f, -0.003669f, +0.007863f, +0.003248f, -0.004361f, +0.005702f, +0.002171f, +0.019756f, +0.006679f, + -0.007072f, -0.000060f, +0.010797f, +0.004287f, -0.008364f, -0.009023f, +0.000366f, -0.002103f, +0.007810f, -0.008502f, + -0.003669f, +0.003908f, +0.005366f, -0.003121f, -0.001009f, +0.000482f, +0.001165f, +0.003155f, -0.003638f, +0.001038f, + -0.001517f, -0.001145f, +0.000712f, +0.003242f, -0.001425f, +0.005016f, -0.002173f, +0.005250f, -0.003140f, +0.002320f, + -0.000741f, -0.004385f, -0.000902f, -0.002279f, -0.004101f, +0.001001f, -0.003151f, +0.004542f, -0.000579f, +0.003200f, + +0.002291f, +0.002182f, -0.003201f, +0.002105f, -0.004819f, -0.000702f, -0.000283f, +0.000790f, -0.001516f, +0.001007f, + -0.000077f, +0.001056f, -0.000591f, -0.002054f, -0.001915f, +0.003673f + }, + { + +0.023873f, +0.030719f, +0.017558f, +0.075618f, -0.005020f, +0.005829f, +0.001236f, -0.004205f, +0.004671f, +0.017882f, + +0.003256f, +0.014361f, +0.016958f, -0.007788f, +0.008102f, -0.009484f, -0.005559f, -0.015786f, +0.023562f, -0.011644f, + -0.003029f, +0.001868f, +0.008828f, -0.017112f, -0.014483f, +0.008191f, +0.002327f, +0.044005f, +0.013283f, -0.012632f, + -0.003656f, +0.009984f, +0.000849f, +0.007508f, +0.011992f, +0.000326f, -0.010539f, -0.003312f, +0.003909f, +0.001772f, + +0.009855f, +0.012382f, -0.000291f, -0.000571f, +0.002098f, +0.007620f, -0.009506f, +0.005709f, -0.009516f, +0.006548f, + -0.002702f, +0.000587f, -0.013405f, -0.003456f, -0.008355f, +0.003347f, -0.002780f, +0.005557f, -0.002212f, +0.005214f, + +0.003093f, -0.001199f, -0.002686f, +0.002227f, -0.000550f, +0.001302f, -0.001408f, -0.007920f, -0.000277f, +0.002055f, + -0.004296f, -0.001170f, -0.002601f, +0.003043f, +0.008465f, -0.000422f, -0.000052f, -0.002716f, -0.002103f, +0.000403f, + -0.004224f, +0.000784f, +0.002054f, -0.001762f, -0.006944f, +0.001781f, +0.001686f, -0.000647f, +0.001171f, +0.003454f, + -0.001926f, -0.000009f, -0.000468f, +0.002773f, -0.000769f, +0.002987f + }, + { + +0.002937f, +0.028401f, -0.005901f, -0.006481f, +0.006750f, -0.002264f, +0.002187f, +0.001020f, +0.003051f, +0.010582f, + +0.004216f, -0.020368f, -0.016832f, -0.043502f, +0.062218f, +0.012454f, +0.003098f, -0.010920f, -0.005323f, -0.000492f, + -0.019707f, +0.009401f, +0.021944f, +0.020362f, +0.002089f, +0.000126f, +0.012201f, -0.011894f, +0.014769f, -0.005686f, + +0.021636f, +0.004312f, +0.010686f, +0.006529f, -0.002043f, -0.001517f, +0.007586f, -0.004107f, -0.004237f, -0.008942f, + -0.005692f, +0.006127f, -0.006009f, -0.003872f, +0.000735f, -0.000364f, +0.007259f, +0.000859f, -0.003698f, -0.003826f, + +0.001914f, -0.002039f, +0.001217f, +0.000359f, -0.002127f, -0.007618f, -0.000526f, -0.002206f, -0.000405f, +0.005517f, + -0.002581f, -0.004398f, -0.004489f, +0.004196f, -0.001252f, +0.003079f, +0.001288f, +0.001500f, -0.000775f, +0.001438f, + +0.001942f, +0.003481f, -0.002161f, -0.004358f, +0.000640f, -0.002490f, +0.007877f, -0.000620f, -0.003098f, -0.002591f, + -0.005599f, +0.005066f, +0.000146f, +0.002982f, +0.000111f, -0.003082f, -0.002409f, -0.000195f, +0.000593f, -0.002248f, + +0.001770f, -0.000366f, +0.000502f, +0.001127f, +0.001226f, -0.000557f + }, + { + +0.020837f, +0.124920f, +0.001142f, +0.100057f, -0.002591f, +0.007993f, -0.001959f, -0.017106f, +0.017868f, +0.004681f, + -0.003248f, -0.017535f, +0.026510f, +0.023405f, -0.000084f, +0.022576f, +0.063044f, -0.018036f, +0.002612f, +0.000013f, + +0.003525f, +0.003834f, +0.018775f, +0.004555f, +0.011883f, +0.001245f, -0.005673f, -0.008845f, +0.005232f, -0.006119f, + +0.008382f, +0.012708f, -0.005798f, -0.014842f, -0.001765f, +0.002552f, -0.012435f, +0.006957f, +0.008910f, -0.003352f, + +0.003653f, -0.000034f, -0.005210f, -0.009225f, +0.007052f, -0.011878f, -0.005502f, -0.007189f, -0.010343f, +0.002274f, + -0.002828f, +0.001004f, +0.001620f, -0.000028f, +0.008772f, -0.001728f, +0.004158f, +0.002459f, +0.003938f, -0.000943f, + +0.000500f, +0.004807f, -0.003083f, +0.004893f, +0.001323f, +0.002070f, -0.002249f, -0.004109f, +0.005701f, +0.005249f, + +0.001341f, +0.004352f, +0.004442f, -0.000942f, +0.000783f, +0.001961f, -0.001107f, +0.006589f, -0.002955f, +0.000616f, + -0.005798f, +0.004089f, -0.001830f, -0.000011f, +0.000345f, +0.002152f, +0.002232f, +0.002295f, -0.004895f, -0.000998f, + +0.002802f, +0.000895f, -0.000458f, -0.000150f, +0.001790f, -0.003026f + }, + { + +0.006206f, -0.004386f, +0.015331f, +0.027484f, +0.006998f, +0.005081f, +0.007086f, +0.003765f, -0.009707f, -0.000512f, + -0.009421f, +0.001794f, -0.003612f, +0.003726f, +0.028204f, +0.008096f, +0.018929f, -0.020634f, -0.013138f, +0.014173f, + -0.000035f, -0.001779f, -0.003679f, -0.012738f, -0.003133f, -0.028671f, -0.002981f, -0.014800f, -0.004562f, -0.000485f, + -0.011963f, -0.010056f, -0.002965f, +0.007422f, +0.010700f, -0.010292f, -0.003695f, -0.017297f, -0.013872f, +0.005034f, + -0.002054f, +0.001640f, +0.014922f, +0.000308f, +0.004788f, -0.000831f, +0.001545f, +0.005007f, +0.000752f, +0.002904f, + +0.003788f, +0.006387f, +0.004466f, -0.003954f, +0.006419f, +0.001701f, +0.000002f, -0.000661f, -0.001392f, +0.002114f, + -0.005217f, +0.005282f, -0.006054f, +0.006049f, -0.006213f, +0.003350f, -0.000116f, -0.004995f, -0.001886f, -0.000902f, + -0.005165f, +0.000297f, -0.004619f, +0.000588f, -0.001347f, -0.002731f, +0.001955f, +0.008145f, +0.002824f, +0.000159f, + +0.002706f, -0.002310f, -0.004315f, +0.001193f, +0.001286f, -0.000864f, -0.000171f, +0.003396f, +0.000573f, +0.001306f, + +0.001855f, -0.001073f, -0.000792f, +0.000184f, +0.002729f, -0.003746f + }, + { + +0.035906f, +0.122675f, +0.020299f, +0.132683f, -0.010382f, -0.000237f, -0.002189f, -0.034367f, -0.008888f, +0.002554f, + -0.050122f, +0.015725f, -0.023421f, +0.001359f, -0.048641f, -0.022121f, +0.039852f, -0.024678f, -0.017499f, -0.012055f, + -0.016505f, -0.019342f, -0.003330f, +0.006154f, -0.004066f, +0.020008f, -0.006453f, +0.012755f, -0.000803f, -0.002156f, + -0.004869f, -0.018914f, -0.025568f, -0.009973f, -0.009608f, -0.004503f, +0.002224f, +0.000892f, +0.011044f, +0.008527f, + -0.004440f, +0.000436f, -0.007859f, +0.002851f, +0.000617f, +0.004404f, +0.008615f, -0.008674f, +0.002133f, -0.000022f, + -0.005655f, -0.001473f, -0.007010f, +0.000539f, -0.006428f, +0.005101f, -0.013373f, +0.005766f, -0.003336f, +0.013785f, + -0.004519f, -0.007395f, -0.005817f, -0.006268f, -0.008202f, -0.001600f, +0.004956f, +0.004033f, +0.003746f, +0.006381f, + -0.001668f, +0.001319f, -0.000828f, -0.005496f, +0.002634f, -0.004840f, -0.004683f, +0.001276f, +0.002960f, -0.000217f, + +0.001897f, +0.001327f, +0.004701f, +0.000741f, -0.004900f, -0.000842f, +0.001044f, -0.001798f, -0.003027f, +0.000851f, + -0.001932f, +0.001707f, -0.003817f, +0.001819f, +0.001171f, -0.001193f + }, + { + +0.004026f, -0.045896f, +0.006804f, -0.004468f, -0.008903f, -0.000184f, +0.039414f, -0.031794f, -0.029086f, +0.029769f, + -0.001038f, -0.013562f, +0.000298f, -0.026615f, +0.010567f, +0.002230f, -0.000188f, -0.015039f, +0.005532f, +0.015184f, + +0.009174f, -0.004924f, -0.000052f, -0.022622f, -0.024047f, +0.006388f, -0.002757f, +0.000368f, +0.008652f, +0.011009f, + -0.001553f, +0.012171f, +0.017859f, +0.001414f, -0.016993f, +0.000609f, +0.010972f, -0.001029f, +0.004920f, +0.030856f, + +0.008336f, +0.001954f, +0.004361f, -0.012799f, -0.007097f, +0.007067f, -0.003952f, +0.003046f, -0.010805f, +0.004231f, + +0.005215f, +0.002775f, -0.000567f, -0.011615f, -0.004181f, -0.012784f, +0.000012f, +0.011410f, -0.006582f, +0.006395f, + +0.002011f, +0.000986f, -0.004336f, -0.005416f, -0.001590f, +0.006180f, -0.003694f, -0.002721f, +0.005783f, +0.002179f, + -0.000369f, -0.004418f, +0.001539f, +0.001982f, +0.001832f, +0.001940f, -0.003277f, +0.003929f, +0.011319f, +0.001855f, + -0.001608f, -0.001671f, -0.000463f, +0.004060f, -0.002300f, +0.001718f, -0.001537f, +0.000619f, -0.000769f, +0.002784f, + -0.000006f, -0.000512f, -0.001582f, +0.003826f, -0.001702f, -0.000548f + }, + { + -0.020847f, -0.164871f, -0.033359f, -0.009741f, +0.027424f, +0.012009f, -0.001361f, +0.010331f, +0.013107f, -0.006963f, + -0.008458f, +0.012288f, +0.042557f, +0.022310f, +0.016413f, -0.027729f, +0.006946f, -0.010358f, +0.014727f, -0.000262f, + -0.004918f, +0.004910f, +0.009870f, -0.010539f, +0.017349f, -0.021265f, +0.007305f, +0.005718f, +0.005168f, +0.009553f, + +0.016755f, +0.007609f, -0.007846f, -0.017645f, +0.000676f, -0.025632f, -0.000948f, -0.001844f, +0.015900f, +0.006589f, + +0.009063f, -0.003847f, +0.011432f, -0.002563f, -0.001485f, -0.004185f, -0.010704f, -0.008109f, -0.003956f, -0.003792f, + -0.000188f, +0.004404f, -0.006435f, -0.002817f, -0.002001f, +0.009011f, +0.001448f, -0.006229f, +0.002939f, +0.000099f, + +0.006430f, -0.002013f, -0.002223f, -0.003954f, -0.005129f, -0.003009f, +0.001467f, +0.003513f, -0.000429f, -0.002608f, + +0.002902f, -0.001747f, -0.005002f, -0.000708f, +0.008080f, +0.000454f, -0.000998f, -0.000027f, +0.003927f, -0.001621f, + -0.000663f, -0.002865f, -0.005506f, -0.000193f, +0.000668f, +0.004152f, -0.001435f, -0.002207f, -0.003299f, +0.002645f, + -0.001744f, +0.002776f, +0.001171f, -0.002343f, -0.000772f, -0.001905f + }, + { + -0.000689f, -0.046939f, -0.004468f, +0.004409f, -0.017615f, -0.007484f, -0.007643f, -0.001284f, -0.000488f, -0.000684f, + +0.005624f, -0.002890f, +0.012795f, +0.030376f, +0.013577f, -0.004709f, +0.016586f, +0.025452f, -0.019182f, -0.011844f, + -0.009829f, +0.005911f, -0.010366f, +0.010639f, +0.031899f, -0.001146f, +0.007475f, -0.012794f, +0.010925f, -0.016768f, + -0.017030f, +0.001575f, -0.004005f, +0.008226f, -0.014774f, -0.005947f, -0.007192f, +0.029345f, -0.002137f, -0.002087f, + -0.002346f, +0.002269f, +0.002157f, +0.007393f, +0.002103f, +0.013417f, +0.005082f, -0.013543f, -0.008386f, -0.003849f, + +0.003508f, -0.007786f, -0.003002f, -0.003086f, +0.003301f, +0.006598f, -0.005298f, -0.008032f, -0.001423f, -0.000397f, + +0.001486f, +0.002638f, -0.008833f, +0.003018f, +0.004565f, +0.005334f, -0.002365f, -0.003765f, +0.006133f, -0.001007f, + -0.005625f, -0.002258f, -0.004054f, +0.008721f, -0.001188f, -0.000155f, +0.002436f, -0.002293f, -0.005126f, +0.004504f, + -0.004623f, +0.001706f, -0.000485f, -0.003416f, +0.003087f, -0.004884f, +0.003415f, +0.002716f, -0.000259f, -0.000333f, + +0.000977f, +0.000001f, -0.001002f, -0.002051f, -0.001539f, +0.000163f + }, + { + -0.015371f, +0.090404f, -0.024343f, +0.006079f, -0.007202f, +0.019875f, +0.015332f, +0.009801f, +0.003059f, -0.024681f, + +0.003706f, -0.011758f, -0.010269f, -0.042191f, +0.025241f, -0.017770f, -0.005371f, +0.009113f, -0.007868f, +0.004463f, + +0.033588f, -0.006565f, +0.009204f, +0.004802f, -0.004235f, +0.025511f, -0.007855f, -0.008246f, +0.013994f, +0.001037f, + +0.002888f, -0.003068f, +0.021226f, +0.004149f, -0.005668f, +0.000530f, -0.011729f, +0.023852f, +0.001955f, +0.007873f, + +0.008063f, -0.009869f, -0.001592f, -0.002109f, +0.001747f, -0.002299f, -0.003989f, -0.002944f, -0.008768f, -0.009701f, + -0.000959f, -0.003846f, +0.008297f, +0.003866f, -0.003407f, +0.010936f, +0.001862f, -0.001824f, -0.004671f, -0.005001f, + -0.002350f, -0.001329f, -0.000421f, -0.004398f, +0.003627f, +0.002333f, -0.005877f, -0.003035f, -0.010423f, -0.002417f, + -0.002325f, -0.003293f, -0.000211f, -0.001925f, -0.000679f, +0.004013f, +0.002669f, +0.004926f, +0.000310f, -0.002329f, + +0.003117f, +0.002281f, -0.000860f, +0.001011f, +0.002074f, +0.002977f, -0.001393f, -0.001722f, -0.004937f, +0.003373f, + -0.000451f, +0.002761f, -0.003266f, +0.001137f, -0.001966f, +0.001567f + }, + { + +0.003740f, +0.042564f, -0.013449f, +0.003624f, -0.002693f, +0.001731f, +0.017458f, +0.003391f, +0.009155f, +0.000363f, + +0.009154f, +0.001076f, -0.014747f, -0.053271f, +0.150468f, +0.026030f, +0.017688f, -0.003791f, +0.029024f, +0.027652f, + -0.024065f, -0.006601f, +0.008784f, -0.026319f, -0.027937f, -0.008067f, +0.006481f, -0.020627f, -0.003033f, -0.007133f, + +0.001450f, +0.003277f, +0.002733f, -0.010286f, +0.013113f, -0.009240f, +0.008459f, +0.006886f, -0.007344f, -0.003554f, + +0.005422f, -0.009973f, -0.000093f, -0.004775f, -0.004144f, +0.002388f, +0.008217f, -0.003051f, -0.001701f, -0.003848f, + +0.000990f, +0.005327f, -0.016773f, -0.019667f, -0.003340f, -0.003208f, -0.000405f, +0.002833f, -0.004184f, +0.005150f, + +0.000874f, -0.006638f, +0.004321f, -0.000087f, +0.004175f, +0.000386f, -0.010012f, +0.004365f, -0.006736f, +0.007620f, + +0.000084f, -0.005205f, -0.003681f, -0.001073f, -0.003811f, -0.000706f, +0.000004f, -0.004216f, +0.002429f, -0.000339f, + +0.002593f, +0.000896f, -0.001416f, +0.005842f, -0.005013f, +0.000386f, -0.000985f, +0.003709f, +0.001034f, +0.001048f, + -0.000529f, -0.000782f, -0.002829f, +0.000941f, -0.003940f, +0.000423f + }, + { + +0.002129f, +0.113632f, -0.014444f, -0.045759f, -0.022421f, +0.044932f, +0.026294f, +0.012051f, +0.001491f, -0.003618f, + -0.026106f, -0.007640f, +0.001025f, +0.032987f, -0.002619f, +0.016931f, +0.050399f, +0.004758f, +0.027450f, +0.008066f, + +0.021767f, -0.024194f, +0.023743f, +0.007166f, -0.005981f, +0.005075f, -0.000797f, +0.022643f, +0.021165f, -0.013823f, + -0.011015f, -0.003207f, -0.010584f, -0.001803f, +0.008109f, +0.002511f, +0.001947f, +0.009948f, -0.011880f, -0.006965f, + +0.017105f, +0.008126f, +0.016044f, -0.013360f, -0.002388f, -0.006240f, +0.003418f, +0.001093f, +0.005425f, +0.000810f, + +0.000710f, -0.010827f, +0.003796f, -0.006677f, +0.003113f, +0.006631f, +0.011759f, -0.002323f, -0.005348f, -0.006737f, + -0.005381f, -0.001120f, +0.002987f, +0.001875f, -0.000945f, +0.001300f, -0.003593f, -0.001347f, -0.001258f, -0.004098f, + +0.000375f, -0.000459f, +0.003950f, +0.008037f, +0.001707f, +0.001320f, -0.007156f, +0.001994f, +0.002245f, -0.005687f, + +0.000543f, -0.000506f, +0.001070f, -0.000782f, +0.000681f, +0.000341f, -0.001483f, -0.000446f, -0.000062f, -0.002581f, + +0.002392f, +0.000559f, -0.001304f, +0.000641f, +0.004735f, +0.001327f + } + }, + { + { + -0.001828f, +0.096569f, +0.019613f, -0.074319f, +0.011641f, +0.002763f, -0.005559f, +0.011787f, -0.005212f, +0.010179f, + +0.015948f, +0.005291f, +0.003879f, +0.008041f, -0.017480f, +0.020014f, +0.032246f, +0.031820f, +0.010449f, -0.024704f, + +0.015199f, +0.003202f, +0.011599f, +0.016515f, -0.021632f, +0.006440f, -0.024039f, -0.003083f, -0.006905f, +0.002606f, + -0.011918f, -0.011291f, +0.009537f, +0.002945f, -0.022167f, -0.009721f, +0.008112f, +0.000604f, -0.020573f, -0.003499f, + -0.000783f, +0.008270f, +0.013175f, -0.012622f, +0.005551f, -0.003870f, -0.004636f, +0.006953f, -0.006597f, -0.003682f, + +0.003573f, +0.002642f, -0.007402f, -0.002047f, +0.009027f, -0.001655f, -0.009333f, -0.001422f, -0.006671f, -0.010130f, + +0.004335f, +0.000002f, +0.002422f, +0.000309f, +0.001003f, +0.004476f, -0.004716f, +0.006903f, -0.000817f, +0.003547f, + -0.003516f, +0.000831f, +0.005432f, -0.002121f, -0.002527f, -0.000516f, +0.002035f, -0.002492f, +0.002671f, +0.004292f, + +0.000252f, +0.004937f, -0.002970f, -0.000828f, +0.001571f, -0.002421f, -0.003044f, -0.000786f, +0.001460f, +0.001167f, + -0.001544f, +0.000188f, -0.000370f, +0.002901f, -0.002242f, -0.001152f + }, + { + -0.000070f, +0.235554f, -0.036219f, +0.005810f, -0.043754f, +0.031298f, +0.023651f, -0.038108f, +0.007010f, +0.004221f, + -0.019197f, -0.037165f, +0.013149f, -0.013084f, +0.007448f, -0.010035f, -0.018825f, -0.005429f, -0.012201f, +0.006221f, + +0.014324f, -0.015268f, -0.003562f, -0.004017f, +0.009488f, +0.009464f, +0.002836f, +0.013739f, -0.004022f, -0.018306f, + -0.008643f, +0.002123f, +0.003218f, +0.001283f, -0.007225f, -0.000398f, +0.000350f, -0.003337f, -0.005018f, -0.006950f, + -0.007748f, -0.018603f, -0.002769f, +0.000071f, -0.000027f, +0.007885f, -0.015402f, -0.003992f, -0.008210f, +0.002511f, + -0.008799f, -0.000826f, +0.004338f, -0.002639f, +0.001578f, -0.000039f, +0.000062f, +0.009556f, -0.010286f, -0.004693f, + -0.003331f, -0.000382f, -0.000779f, +0.000839f, -0.004513f, +0.001573f, -0.010038f, +0.005999f, +0.003346f, -0.002911f, + -0.008444f, +0.002108f, +0.001923f, -0.002396f, +0.000568f, -0.004597f, +0.004615f, +0.003814f, +0.000493f, -0.000298f, + +0.001852f, +0.000406f, -0.000371f, -0.001998f, +0.003041f, +0.001003f, +0.000872f, +0.000275f, -0.005193f, -0.000292f, + +0.002523f, -0.000025f, +0.005439f, -0.000561f, -0.000011f, +0.001145f + }, + { + +0.005037f, -0.190573f, +0.031395f, +0.095125f, +0.002124f, +0.009079f, +0.012541f, +0.018029f, +0.002007f, +0.003718f, + +0.000719f, +0.046979f, +0.015756f, +0.002630f, +0.022420f, -0.002069f, +0.003120f, +0.002656f, +0.023414f, +0.007709f, + -0.005633f, +0.021109f, -0.003158f, +0.012633f, -0.000428f, +0.000231f, +0.003125f, +0.002312f, -0.003596f, +0.004348f, + -0.001659f, -0.006119f, +0.026121f, -0.000077f, -0.005022f, +0.020467f, -0.013813f, -0.012714f, +0.010505f, -0.009959f, + -0.007717f, +0.006913f, -0.008824f, +0.012854f, +0.003079f, -0.011115f, -0.002549f, -0.001843f, -0.007991f, +0.008554f, + -0.000943f, +0.006627f, +0.006449f, -0.006044f, -0.008563f, -0.009866f, +0.006787f, +0.006592f, +0.003177f, +0.006897f, + +0.004655f, -0.000634f, +0.006675f, -0.001163f, +0.000187f, -0.002790f, +0.011150f, -0.004389f, +0.002254f, -0.005440f, + -0.002303f, -0.004767f, +0.000634f, +0.000248f, -0.001976f, -0.001104f, -0.004902f, +0.001505f, -0.001554f, -0.006362f, + -0.002367f, -0.000794f, -0.002266f, +0.001295f, +0.000139f, -0.003184f, +0.000116f, +0.000358f, +0.002901f, +0.000407f, + -0.000329f, +0.000422f, +0.000267f, +0.003010f, -0.001566f, -0.000208f + }, + { + +0.003580f, -0.052339f, -0.010298f, -0.010180f, +0.001778f, -0.002734f, -0.009010f, +0.007013f, +0.004344f, -0.000215f, + -0.000738f, -0.024636f, -0.002061f, +0.004654f, -0.018377f, +0.008682f, -0.029820f, +0.001994f, +0.017008f, -0.005162f, + +0.003914f, -0.002186f, -0.035184f, +0.005908f, -0.009014f, -0.022227f, +0.010026f, -0.010302f, -0.011909f, +0.015644f, + +0.016290f, +0.012759f, -0.008194f, +0.014509f, -0.015026f, +0.024864f, +0.000036f, +0.006417f, -0.002364f, +0.019463f, + -0.020155f, +0.009993f, +0.006428f, +0.003679f, -0.005421f, -0.008659f, -0.000367f, -0.000329f, +0.009848f, -0.006074f, + -0.009038f, +0.005415f, +0.001943f, -0.001113f, +0.001496f, +0.001770f, +0.000186f, +0.001926f, +0.000201f, +0.004638f, + -0.000461f, -0.003914f, -0.004556f, +0.006728f, -0.006198f, +0.003482f, +0.001112f, +0.000539f, +0.005393f, +0.002415f, + -0.001013f, -0.006809f, +0.000722f, -0.004111f, -0.001002f, -0.001498f, +0.002770f, +0.001253f, +0.000165f, +0.002807f, + +0.002197f, -0.000885f, +0.001855f, +0.002701f, -0.006036f, +0.000113f, -0.001258f, +0.001819f, -0.000905f, +0.000055f, + +0.000094f, +0.002530f, -0.001002f, -0.002787f, +0.000444f, +0.001670f + }, + { + -0.012796f, +0.076098f, +0.000082f, +0.089648f, +0.006916f, +0.001737f, +0.010064f, -0.004758f, +0.007828f, +0.018944f, + +0.003279f, +0.002848f, +0.012117f, -0.003787f, -0.003152f, +0.002464f, -0.007901f, -0.010721f, +0.011551f, -0.000638f, + -0.020234f, +0.020416f, -0.008518f, -0.030243f, -0.011153f, +0.017860f, -0.002396f, +0.035086f, +0.019346f, -0.002782f, + +0.006428f, -0.009186f, +0.007920f, -0.002374f, +0.019397f, -0.001900f, -0.000047f, -0.012644f, -0.003241f, +0.009786f, + +0.011145f, +0.005447f, +0.002390f, +0.003411f, -0.008350f, +0.005324f, +0.006079f, -0.001234f, -0.014701f, +0.007597f, + +0.006483f, -0.005826f, -0.013587f, -0.009849f, +0.004482f, -0.002345f, +0.003144f, +0.003653f, +0.000283f, -0.002003f, + +0.003701f, +0.001064f, +0.003612f, +0.002568f, -0.005424f, -0.000201f, +0.001020f, -0.007910f, -0.003385f, +0.002463f, + -0.001066f, -0.001525f, -0.004870f, +0.003671f, +0.005311f, +0.006218f, -0.004673f, -0.000820f, -0.004666f, +0.002230f, + -0.004117f, +0.001977f, +0.000045f, +0.000186f, -0.005320f, +0.000407f, +0.000355f, +0.003440f, -0.000690f, +0.003099f, + -0.000715f, -0.002715f, +0.000597f, +0.001561f, +0.002408f, +0.000999f + }, + { + +0.000016f, +0.014968f, +0.020008f, +0.002054f, -0.007235f, -0.000998f, +0.000627f, +0.003842f, +0.006197f, +0.003880f, + +0.007599f, -0.024885f, -0.016131f, -0.033356f, +0.059635f, +0.009903f, +0.006760f, -0.026315f, -0.005130f, -0.016083f, + -0.009269f, +0.007009f, +0.024829f, +0.025802f, -0.003068f, +0.004269f, -0.004620f, -0.005753f, -0.009678f, +0.014402f, + +0.008054f, +0.010039f, +0.002116f, +0.003034f, +0.004987f, +0.001515f, +0.007816f, +0.002061f, -0.004142f, -0.009730f, + -0.001920f, +0.000307f, -0.009294f, +0.002837f, +0.004309f, -0.005848f, +0.002379f, +0.001002f, -0.004244f, +0.001514f, + -0.001760f, +0.001658f, -0.004135f, +0.006232f, -0.001884f, -0.003987f, -0.011182f, -0.002146f, +0.004016f, +0.006557f, + -0.007637f, +0.001368f, -0.004733f, -0.000930f, +0.001563f, +0.000250f, +0.003290f, +0.002146f, -0.000613f, +0.003361f, + +0.000584f, +0.003393f, +0.000533f, -0.001391f, -0.003080f, -0.000738f, +0.005590f, -0.001345f, +0.000166f, -0.004575f, + -0.002751f, +0.002527f, -0.001544f, +0.003611f, -0.000173f, -0.002743f, -0.000789f, -0.001720f, -0.000834f, -0.002773f, + +0.001479f, +0.001225f, +0.000839f, +0.001847f, +0.000427f, +0.000183f + }, + { + +0.001035f, +0.149983f, -0.008916f, +0.117574f, -0.008571f, -0.003121f, +0.009765f, +0.002670f, -0.017128f, +0.025105f, + -0.004169f, -0.020861f, +0.033248f, +0.002099f, +0.029905f, +0.022166f, +0.030633f, -0.014291f, +0.004394f, +0.016440f, + -0.017437f, +0.020477f, +0.003208f, +0.041497f, -0.012495f, -0.005020f, -0.011774f, -0.008326f, +0.003035f, -0.002671f, + +0.001773f, +0.010958f, -0.010381f, -0.010195f, -0.005605f, -0.010896f, +0.004862f, +0.003035f, +0.001395f, +0.004137f, + +0.004064f, +0.002540f, -0.005251f, -0.000202f, -0.003740f, -0.013544f, -0.008308f, -0.000963f, -0.007669f, +0.001247f, + -0.007392f, -0.008437f, +0.015061f, +0.001452f, -0.000190f, +0.003228f, +0.004346f, +0.002024f, +0.004787f, -0.003476f, + +0.002669f, +0.009562f, -0.005033f, +0.003132f, +0.005156f, -0.003282f, +0.002426f, -0.001198f, -0.001829f, +0.003904f, + +0.003958f, +0.001658f, +0.002740f, +0.001013f, +0.002745f, +0.000526f, +0.000608f, +0.004612f, -0.003036f, -0.000935f, + -0.001014f, +0.001015f, +0.003486f, -0.002861f, +0.002207f, -0.000907f, +0.004314f, +0.000393f, -0.004139f, -0.000768f, + +0.002058f, -0.000832f, +0.001483f, +0.000972f, -0.000986f, -0.001586f + }, + { + -0.000786f, +0.063199f, -0.011171f, +0.015329f, +0.018495f, -0.002414f, +0.008910f, +0.003928f, -0.012817f, -0.008245f, + +0.013486f, -0.005553f, -0.009936f, +0.014998f, +0.035809f, +0.016033f, -0.017254f, -0.018633f, +0.000639f, +0.030474f, + -0.004279f, +0.006479f, -0.023248f, -0.000633f, +0.006842f, -0.036152f, -0.015429f, -0.007744f, -0.018281f, +0.023853f, + -0.036617f, -0.016262f, +0.015921f, -0.001517f, +0.022684f, -0.005171f, -0.030062f, -0.003290f, +0.006700f, +0.002774f, + -0.010743f, +0.009304f, +0.004155f, +0.014094f, -0.008391f, -0.002419f, +0.004938f, +0.005995f, +0.005040f, +0.011683f, + -0.014962f, +0.010328f, +0.003290f, -0.003224f, +0.005278f, +0.005085f, -0.004961f, +0.001597f, -0.001187f, +0.000621f, + -0.000414f, -0.004169f, -0.000887f, +0.007903f, -0.007111f, -0.000047f, +0.001820f, -0.002064f, -0.004076f, -0.002729f, + -0.004790f, +0.000894f, -0.006207f, +0.000122f, -0.001724f, -0.002066f, +0.002159f, +0.007119f, +0.004499f, +0.001117f, + +0.002881f, -0.001083f, -0.004103f, +0.001438f, -0.000074f, -0.001914f, +0.001757f, +0.002746f, +0.001456f, -0.000625f, + +0.000773f, +0.002917f, -0.000570f, -0.001887f, +0.003581f, -0.002970f + }, + { + -0.019425f, +0.208707f, -0.004175f, +0.145299f, -0.008486f, -0.017543f, -0.000918f, -0.022952f, -0.004124f, +0.003660f, + -0.026178f, -0.010900f, +0.015968f, -0.027376f, -0.028816f, -0.004377f, +0.010129f, -0.017829f, -0.015086f, -0.017119f, + -0.016956f, -0.006298f, -0.008212f, -0.008343f, +0.006400f, +0.004739f, +0.007267f, +0.007737f, +0.003354f, -0.006144f, + -0.005723f, -0.012521f, -0.026320f, -0.001575f, -0.025069f, -0.003027f, +0.005588f, +0.015456f, -0.006982f, +0.008578f, + +0.000199f, -0.008145f, -0.005712f, +0.009139f, -0.004302f, +0.009885f, +0.002277f, -0.007795f, -0.005126f, +0.003161f, + +0.003343f, -0.010896f, -0.008333f, +0.000745f, +0.002696f, -0.006691f, -0.004004f, -0.001097f, +0.006654f, +0.002186f, + +0.000611f, -0.003661f, -0.002102f, -0.009387f, -0.011279f, -0.006651f, +0.007816f, +0.003094f, +0.006969f, +0.001466f, + +0.000753f, +0.001198f, -0.000412f, -0.010627f, +0.004520f, -0.002249f, -0.008574f, +0.001018f, +0.004974f, +0.000181f, + +0.000448f, +0.003208f, +0.005458f, -0.002173f, -0.004046f, -0.001100f, -0.000070f, +0.000416f, -0.002722f, -0.000545f, + +0.001018f, -0.001372f, -0.000891f, -0.001054f, +0.001448f, -0.000131f + }, + { + -0.002875f, -0.065813f, +0.001166f, +0.011017f, -0.011497f, +0.023556f, +0.013950f, -0.029465f, -0.021938f, +0.022264f, + +0.004118f, -0.010575f, -0.001603f, -0.009015f, -0.009383f, -0.010791f, +0.013074f, -0.003687f, +0.004072f, +0.018799f, + +0.009112f, +0.004001f, -0.019465f, -0.006922f, -0.008101f, -0.009527f, +0.002016f, -0.002302f, +0.000857f, +0.026313f, + -0.015468f, +0.007232f, +0.031017f, +0.004534f, -0.025002f, +0.002631f, +0.014789f, -0.001030f, -0.003177f, +0.029567f, + +0.023549f, -0.004943f, +0.000356f, -0.014639f, -0.001562f, +0.004121f, +0.003340f, -0.003574f, -0.000873f, -0.008652f, + +0.005309f, +0.002846f, -0.005236f, -0.005476f, -0.001807f, -0.017835f, +0.001090f, -0.001017f, +0.002927f, -0.000866f, + +0.001796f, +0.000098f, -0.003566f, -0.005659f, +0.004169f, -0.001568f, -0.001997f, +0.000886f, +0.004534f, +0.001363f, + -0.001463f, -0.001394f, +0.004627f, -0.000039f, -0.000238f, +0.003924f, -0.004435f, +0.002078f, +0.007547f, +0.008943f, + -0.002662f, -0.001622f, -0.001220f, +0.004584f, -0.003070f, -0.000947f, +0.002145f, -0.000498f, -0.001396f, +0.001202f, + +0.001101f, -0.003399f, +0.003104f, +0.000585f, +0.000755f, -0.001541f + }, + { + +0.017469f, -0.257384f, +0.021138f, -0.003863f, +0.020824f, -0.056961f, +0.081643f, -0.004020f, +0.005457f, -0.000037f, + -0.001241f, -0.007098f, +0.044825f, +0.009043f, +0.024014f, -0.025845f, +0.026001f, +0.001593f, +0.006877f, -0.012168f, + -0.000359f, -0.005900f, +0.011625f, +0.005278f, +0.007994f, -0.011427f, +0.011607f, -0.012488f, +0.016208f, +0.024929f, + +0.000163f, +0.011181f, +0.002529f, -0.018810f, -0.013443f, -0.004735f, -0.014520f, +0.003679f, +0.008411f, +0.001405f, + +0.015848f, +0.009621f, -0.003583f, +0.000226f, +0.004778f, -0.010088f, -0.008838f, -0.012057f, +0.004659f, -0.010363f, + +0.005120f, +0.002512f, +0.001003f, -0.008707f, +0.001964f, +0.004561f, -0.001328f, -0.001474f, +0.000486f, -0.005411f, + +0.009047f, +0.002477f, -0.005373f, -0.006997f, -0.002832f, +0.001940f, -0.002734f, +0.004349f, -0.000675f, -0.000249f, + -0.001450f, -0.000150f, -0.004058f, +0.001355f, +0.003368f, +0.002261f, -0.001988f, +0.000821f, +0.002825f, +0.001618f, + -0.005045f, +0.000073f, -0.002753f, -0.004061f, +0.000511f, +0.004490f, -0.002644f, -0.002214f, -0.000170f, -0.000860f, + +0.001914f, +0.000625f, +0.001116f, +0.001284f, -0.003383f, -0.000923f + }, + { + +0.001992f, -0.064388f, +0.000694f, +0.007766f, -0.008353f, -0.002051f, -0.022742f, +0.006823f, -0.002052f, +0.005486f, + -0.030872f, +0.012084f, +0.011014f, +0.025510f, +0.032079f, -0.014615f, +0.016625f, +0.028299f, -0.036388f, -0.008053f, + -0.003966f, -0.000193f, -0.005536f, +0.002549f, +0.034227f, +0.000731f, +0.019920f, -0.003825f, -0.018757f, -0.009099f, + -0.014690f, -0.010540f, -0.020539f, +0.018865f, -0.001070f, -0.011223f, -0.000413f, +0.009893f, +0.004474f, -0.005064f, + -0.004805f, -0.001557f, +0.008797f, +0.008347f, -0.001334f, +0.010974f, +0.000798f, -0.011065f, -0.002787f, +0.000545f, + -0.004341f, -0.006275f, -0.005669f, -0.000610f, +0.002520f, +0.010786f, -0.012949f, -0.000028f, -0.002631f, -0.004858f, + +0.000911f, +0.000619f, -0.001053f, +0.003434f, -0.001250f, +0.003707f, +0.000506f, -0.003502f, +0.004355f, -0.002000f, + -0.001506f, -0.000358f, -0.003237f, +0.005447f, +0.001815f, +0.001407f, -0.002284f, -0.001872f, -0.002190f, -0.000610f, + -0.004375f, +0.006199f, -0.001316f, -0.004834f, +0.001760f, -0.002485f, +0.001395f, +0.002922f, +0.001258f, -0.002392f, + +0.001228f, +0.001487f, -0.001195f, -0.003209f, -0.001327f, +0.002836f + }, + { + +0.034600f, +0.004758f, -0.018678f, +0.023568f, -0.009706f, +0.047721f, -0.011518f, +0.023850f, -0.003538f, +0.009250f, + -0.035490f, +0.017809f, -0.039035f, -0.025682f, +0.000076f, -0.010732f, -0.000648f, +0.021918f, -0.011564f, +0.008066f, + +0.018867f, -0.001057f, +0.015613f, +0.005322f, +0.003710f, +0.014283f, -0.008385f, -0.003487f, +0.006537f, +0.002358f, + +0.012867f, -0.021664f, +0.024417f, +0.004433f, -0.006983f, +0.001620f, +0.009278f, -0.001364f, +0.011602f, +0.003288f, + +0.014967f, -0.000309f, -0.004567f, -0.008399f, -0.006189f, +0.002314f, -0.003557f, +0.000351f, -0.017963f, -0.002324f, + -0.008610f, -0.003366f, +0.008732f, +0.007328f, -0.005610f, +0.008592f, -0.001256f, -0.004377f, -0.001422f, -0.003059f, + -0.005613f, -0.002499f, +0.001239f, +0.001001f, -0.004183f, +0.003448f, +0.003710f, -0.009089f, -0.009992f, -0.003659f, + -0.005247f, +0.000092f, +0.000115f, -0.001877f, -0.000803f, +0.002532f, +0.004932f, +0.003764f, -0.002904f, +0.000571f, + +0.004316f, +0.002522f, -0.001038f, +0.002527f, +0.000995f, +0.000400f, -0.000725f, -0.000379f, -0.005118f, +0.002560f, + -0.000173f, +0.000848f, -0.002013f, +0.001422f, -0.001352f, +0.000905f + }, + { + -0.005777f, +0.051308f, -0.010272f, -0.000697f, -0.011795f, +0.010732f, +0.020658f, +0.005045f, +0.012664f, +0.004214f, + +0.000710f, -0.005951f, +0.008228f, +0.100190f, -0.068661f, -0.000711f, +0.026068f, +0.030645f, +0.008704f, +0.023414f, + -0.012118f, -0.014030f, -0.005471f, -0.018178f, -0.032611f, -0.007160f, -0.006552f, -0.011871f, -0.008192f, +0.006720f, + +0.001868f, +0.016977f, +0.000059f, -0.002995f, -0.007357f, +0.000263f, +0.005214f, +0.007833f, -0.005390f, +0.003735f, + -0.002098f, +0.001897f, -0.000765f, -0.007328f, +0.003326f, +0.003104f, -0.007381f, +0.002657f, -0.006306f, +0.008125f, + +0.002249f, -0.000260f, -0.010662f, -0.017907f, -0.013628f, +0.004246f, -0.003223f, -0.001914f, +0.006591f, -0.002937f, + +0.006096f, -0.001225f, -0.007876f, +0.007405f, +0.009003f, +0.000368f, -0.008331f, -0.000972f, +0.005604f, -0.000530f, + -0.001355f, -0.003055f, -0.006383f, +0.001659f, -0.005780f, -0.000393f, -0.002562f, +0.003160f, -0.003518f, -0.000575f, + +0.003634f, -0.000687f, +0.002670f, +0.002231f, -0.001301f, -0.001287f, -0.001344f, +0.002177f, +0.003952f, +0.000856f, + -0.003112f, +0.002022f, -0.002648f, +0.001062f, -0.000035f, -0.002556f + }, + { + +0.017759f, +0.085213f, -0.005907f, -0.057037f, +0.004691f, +0.037147f, +0.024678f, +0.008157f, -0.009916f, +0.009998f, + -0.006765f, -0.001904f, -0.031734f, +0.007104f, +0.085210f, +0.013654f, +0.007736f, +0.031086f, -0.002275f, +0.018640f, + +0.002049f, +0.000247f, +0.009542f, +0.004116f, -0.015160f, +0.013293f, +0.020933f, +0.005482f, +0.005053f, -0.022780f, + +0.005506f, -0.021765f, +0.002550f, -0.003371f, +0.009198f, -0.013744f, +0.014068f, +0.001064f, +0.006204f, -0.004034f, + +0.012455f, -0.000379f, +0.024634f, -0.003608f, -0.006844f, -0.005979f, -0.009537f, +0.004350f, +0.005544f, +0.005252f, + -0.006358f, -0.003263f, -0.009739f, +0.010433f, -0.001175f, +0.007205f, +0.006630f, +0.001530f, -0.004181f, -0.007436f, + -0.004633f, +0.000502f, +0.007505f, +0.001490f, -0.009340f, +0.001531f, -0.000093f, -0.004072f, -0.001683f, +0.001752f, + +0.001515f, +0.001072f, +0.000809f, +0.007219f, +0.001110f, -0.001535f, -0.003203f, +0.000613f, -0.000067f, -0.003661f, + +0.002643f, -0.001174f, -0.001623f, +0.000003f, +0.000891f, +0.000941f, -0.002902f, -0.000609f, +0.002863f, -0.005839f, + +0.002967f, +0.002413f, -0.000934f, +0.001556f, +0.001874f, +0.001654f + } + }, + { + { + +0.003666f, +0.070616f, -0.008442f, -0.016774f, +0.048447f, -0.000983f, -0.012015f, -0.006057f, -0.016951f, +0.007404f, + +0.000226f, -0.014619f, -0.003707f, +0.018053f, +0.000429f, +0.017994f, -0.007094f, -0.012845f, +0.003355f, -0.003351f, + +0.030798f, +0.001006f, -0.007397f, +0.015969f, -0.021733f, +0.005805f, -0.021267f, +0.012986f, +0.000222f, +0.003897f, + -0.018234f, -0.019148f, +0.006137f, +0.002176f, -0.006925f, -0.005897f, -0.001109f, +0.012485f, +0.001286f, +0.002843f, + -0.005661f, +0.012307f, +0.017038f, -0.007663f, +0.005344f, +0.003762f, +0.012444f, +0.013112f, -0.005190f, -0.004570f, + +0.005293f, +0.005947f, -0.005509f, -0.001268f, +0.010538f, +0.002692f, -0.010254f, -0.000907f, -0.000174f, +0.002856f, + +0.006004f, -0.004573f, +0.000227f, -0.002675f, -0.001512f, +0.000890f, -0.005954f, +0.006296f, -0.001403f, +0.002108f, + -0.002644f, +0.003628f, +0.006365f, +0.000058f, -0.002476f, -0.001625f, -0.000780f, -0.004009f, +0.000407f, +0.004030f, + +0.000130f, +0.006011f, -0.002737f, +0.001604f, -0.000568f, -0.003553f, -0.001289f, -0.000661f, +0.002669f, +0.002229f, + -0.000222f, +0.001456f, -0.001163f, +0.001192f, -0.001355f, +0.000957f + }, + { + +0.003807f, +0.354570f, +0.037188f, +0.100238f, +0.018193f, +0.013310f, +0.029373f, -0.000128f, +0.025010f, +0.018595f, + -0.007354f, -0.067306f, -0.005320f, -0.009220f, +0.021795f, +0.008518f, -0.019033f, -0.016017f, -0.007876f, +0.003670f, + +0.004039f, -0.004641f, +0.005805f, -0.008196f, +0.003071f, +0.004667f, -0.002091f, +0.006565f, +0.014447f, +0.001137f, + +0.000405f, +0.003494f, +0.007522f, +0.016306f, +0.001508f, -0.007515f, -0.010340f, -0.004097f, +0.003641f, +0.006146f, + +0.000674f, -0.009428f, +0.010116f, +0.001209f, -0.005331f, +0.004832f, -0.008830f, +0.004162f, +0.005040f, +0.013815f, + -0.005237f, -0.001396f, -0.002355f, -0.012333f, -0.006350f, +0.003881f, +0.002411f, +0.005165f, -0.009465f, +0.002194f, + -0.007834f, -0.000875f, +0.003625f, -0.001595f, -0.000684f, +0.007718f, -0.007868f, +0.002162f, +0.002193f, +0.002416f, + -0.003849f, +0.000650f, +0.003113f, -0.001423f, +0.003390f, -0.006711f, +0.000899f, +0.001958f, -0.001762f, +0.000382f, + +0.000613f, -0.002886f, -0.000336f, +0.001036f, +0.002460f, +0.003537f, +0.002673f, +0.000942f, -0.002517f, -0.001484f, + +0.001644f, -0.000015f, +0.003159f, -0.000711f, +0.002618f, +0.001165f + }, + { + -0.010342f, -0.209390f, +0.022984f, +0.001144f, -0.056639f, +0.012706f, +0.014683f, +0.015001f, -0.005230f, -0.007648f, + +0.001600f, +0.063926f, +0.018033f, -0.000685f, +0.025721f, -0.001999f, -0.001170f, +0.004826f, +0.028970f, -0.015439f, + -0.017152f, +0.021827f, -0.005873f, +0.012565f, -0.016981f, -0.013051f, +0.001038f, +0.004989f, +0.006537f, +0.006839f, + +0.006131f, -0.005359f, +0.016447f, -0.007363f, +0.005303f, +0.022574f, -0.028204f, -0.014177f, +0.009513f, -0.009330f, + -0.015794f, +0.000830f, -0.005337f, +0.007398f, -0.001020f, -0.002271f, +0.005278f, -0.005054f, -0.014903f, +0.009943f, + +0.004713f, +0.003126f, -0.000767f, -0.008619f, -0.002606f, -0.008476f, +0.002245f, +0.003499f, -0.000779f, +0.007516f, + +0.002682f, -0.008821f, +0.001055f, -0.006979f, -0.003813f, -0.008025f, +0.009645f, -0.004126f, +0.000626f, -0.000562f, + -0.001271f, -0.006431f, -0.004152f, -0.005373f, -0.003880f, +0.000116f, -0.001940f, +0.004600f, -0.002502f, -0.004348f, + +0.004599f, +0.003295f, +0.000765f, +0.002339f, -0.000552f, -0.000965f, +0.002897f, -0.000193f, +0.002482f, -0.000157f, + +0.001955f, +0.002446f, -0.000881f, +0.000590f, +0.000132f, +0.001438f + }, + { + -0.003239f, -0.023437f, +0.025347f, -0.013494f, -0.002867f, +0.001378f, -0.001447f, +0.011538f, +0.002678f, -0.002889f, + +0.009458f, +0.003791f, +0.013478f, +0.003878f, -0.028705f, +0.018801f, -0.000610f, +0.013276f, +0.015976f, +0.000376f, + -0.000303f, -0.001063f, -0.022333f, +0.007704f, -0.015460f, -0.019045f, +0.023115f, +0.008799f, -0.003535f, +0.016697f, + +0.010237f, -0.004483f, -0.009555f, +0.012014f, -0.009330f, +0.033181f, +0.010449f, +0.001334f, -0.024654f, +0.016065f, + -0.011738f, +0.009061f, -0.003756f, -0.001995f, +0.001155f, -0.007095f, -0.000186f, +0.000123f, +0.007169f, +0.001026f, + +0.002531f, +0.003776f, -0.002499f, +0.002314f, -0.002875f, -0.006981f, -0.002116f, +0.002401f, -0.001223f, +0.006074f, + +0.007705f, +0.002599f, -0.002970f, +0.004027f, -0.009506f, +0.003059f, +0.004540f, +0.000946f, +0.005886f, +0.002236f, + +0.002751f, +0.004209f, +0.005818f, -0.007907f, -0.002024f, -0.000402f, +0.003998f, +0.000531f, -0.002314f, +0.003321f, + +0.004944f, +0.000491f, +0.001096f, +0.002636f, -0.001790f, +0.002535f, -0.000043f, +0.005305f, +0.000714f, +0.000469f, + +0.001022f, -0.001031f, -0.001254f, +0.001555f, +0.002549f, -0.001072f + }, + { + -0.007282f, +0.062777f, -0.003454f, +0.089053f, -0.006931f, +0.001270f, +0.018768f, -0.001664f, -0.007120f, -0.017086f, + -0.043129f, -0.016730f, +0.015504f, +0.003304f, +0.019001f, +0.026436f, +0.007222f, -0.023920f, -0.031471f, -0.022486f, + -0.033423f, +0.011897f, -0.012869f, -0.028596f, -0.003509f, +0.023353f, -0.016636f, +0.003903f, +0.003796f, +0.013413f, + +0.012081f, -0.015069f, +0.004537f, -0.011854f, +0.017546f, +0.004709f, +0.005968f, -0.016023f, -0.019584f, -0.000146f, + -0.001915f, -0.002458f, -0.001937f, +0.009720f, -0.003742f, +0.001865f, +0.019200f, +0.007844f, -0.011732f, +0.004758f, + +0.001189f, -0.010719f, -0.008504f, +0.002465f, +0.011882f, +0.002091f, +0.001436f, +0.000005f, +0.001460f, -0.005205f, + +0.001023f, +0.007853f, +0.009043f, -0.001662f, -0.010003f, +0.003491f, +0.001729f, +0.000390f, +0.001861f, +0.003563f, + +0.002077f, +0.002216f, -0.002388f, +0.000335f, +0.000633f, +0.005774f, -0.003336f, +0.000483f, -0.005111f, +0.000391f, + -0.003158f, +0.001561f, -0.000236f, +0.002383f, +0.000134f, +0.002515f, -0.002350f, -0.000592f, -0.003209f, +0.001989f, + +0.000566f, -0.000194f, +0.002243f, +0.001193f, +0.000721f, -0.001201f + }, + { + -0.002558f, -0.029810f, +0.000633f, +0.013268f, -0.005452f, -0.003469f, -0.000867f, -0.002594f, -0.002575f, -0.004862f, + +0.007648f, -0.014259f, -0.002556f, +0.001765f, +0.087725f, +0.004735f, -0.007631f, -0.015601f, -0.014682f, -0.021690f, + +0.013800f, +0.015410f, -0.007010f, +0.000599f, -0.001876f, +0.004370f, -0.019606f, -0.007884f, +0.007022f, +0.012753f, + -0.019448f, -0.023108f, -0.013774f, +0.000357f, +0.008403f, +0.012521f, +0.003071f, -0.005024f, +0.000351f, +0.001855f, + -0.011384f, -0.010272f, +0.001024f, +0.004088f, +0.005831f, -0.006850f, -0.003225f, +0.003095f, -0.003437f, +0.007193f, + -0.001079f, -0.000530f, -0.002957f, +0.011204f, +0.000364f, +0.000530f, -0.004586f, -0.000329f, +0.003563f, +0.008526f, + -0.003399f, +0.004384f, -0.002700f, -0.008596f, -0.002268f, +0.001234f, +0.002550f, -0.001129f, +0.001525f, +0.007855f, + +0.000289f, -0.001464f, -0.000095f, +0.002105f, -0.001164f, +0.001331f, +0.002161f, -0.006371f, +0.001398f, +0.000986f, + -0.000076f, -0.000986f, -0.005982f, +0.002178f, +0.000212f, -0.002742f, +0.001996f, -0.001596f, -0.003345f, -0.003517f, + +0.001446f, +0.002758f, -0.000188f, -0.001662f, -0.002027f, -0.000552f + }, + { + -0.031536f, +0.115950f, +0.007673f, +0.115482f, -0.014437f, -0.003913f, +0.024467f, +0.028979f, -0.013869f, -0.000151f, + -0.001445f, -0.002226f, +0.031644f, -0.004632f, +0.023419f, -0.001391f, +0.000745f, -0.031731f, -0.004776f, +0.004803f, + -0.015367f, +0.032032f, -0.004366f, +0.011364f, -0.021401f, +0.001087f, -0.018012f, -0.017991f, -0.002335f, +0.004886f, + -0.013813f, -0.009594f, -0.008746f, +0.003158f, +0.008442f, -0.008154f, +0.005246f, +0.007226f, +0.004314f, -0.000079f, + +0.000909f, +0.011331f, -0.000314f, +0.001341f, +0.003078f, -0.006995f, +0.001364f, +0.002795f, -0.012554f, +0.004414f, + +0.001910f, -0.008328f, +0.014826f, -0.002161f, -0.005061f, +0.004805f, +0.004582f, +0.001787f, +0.005041f, -0.005423f, + -0.000118f, +0.002818f, -0.007807f, +0.001001f, -0.003920f, -0.006391f, +0.006662f, +0.004314f, -0.000860f, +0.001713f, + +0.002041f, -0.001525f, -0.002100f, -0.000176f, +0.002719f, -0.002131f, -0.001876f, +0.001300f, -0.000323f, -0.001123f, + -0.002556f, +0.000465f, +0.003899f, -0.000402f, +0.004542f, -0.004397f, +0.000434f, -0.000399f, -0.001574f, +0.002311f, + +0.001409f, +0.000741f, +0.002758f, -0.000444f, +0.000316f, +0.000174f + }, + { + -0.005051f, +0.032632f, -0.023391f, -0.007221f, +0.001044f, -0.003229f, +0.005354f, +0.000487f, -0.011952f, -0.000373f, + +0.022806f, +0.003734f, +0.000190f, +0.015495f, +0.032847f, +0.000813f, -0.023704f, -0.005278f, +0.011259f, +0.032663f, + -0.011060f, -0.004709f, -0.019977f, +0.012673f, +0.017371f, -0.032904f, -0.028458f, -0.000095f, +0.002446f, +0.009119f, + -0.037212f, +0.010671f, +0.026735f, -0.001786f, +0.017745f, +0.006713f, -0.014793f, +0.017657f, +0.013174f, +0.002862f, + +0.001727f, +0.006602f, -0.010352f, +0.005129f, -0.010639f, +0.001906f, +0.008920f, +0.003999f, +0.007197f, +0.008727f, + -0.016339f, +0.005930f, -0.007558f, -0.009021f, -0.000720f, +0.000909f, -0.005185f, +0.001539f, +0.004349f, +0.006470f, + +0.003392f, -0.002624f, -0.003864f, +0.007628f, -0.001444f, +0.004723f, +0.001406f, -0.002146f, -0.000265f, +0.000456f, + -0.005205f, +0.000186f, -0.007856f, -0.001615f, -0.000627f, -0.001532f, -0.001721f, +0.002249f, +0.003898f, +0.001736f, + +0.004227f, +0.002208f, -0.002034f, -0.001094f, -0.002545f, -0.001529f, -0.000347f, -0.000792f, +0.002200f, -0.000102f, + +0.001098f, +0.000504f, -0.001533f, -0.001110f, +0.002674f, -0.001652f + }, + { + -0.011639f, +0.244054f, +0.015473f, +0.120510f, -0.021818f, -0.004595f, +0.020531f, +0.014216f, +0.023731f, -0.007602f, + -0.009503f, +0.012775f, +0.033919f, +0.012896f, +0.010476f, -0.005946f, +0.015484f, +0.013591f, -0.004577f, -0.001644f, + +0.006172f, -0.002246f, -0.017236f, -0.011927f, +0.015112f, +0.004537f, +0.005498f, +0.006472f, +0.002767f, -0.008907f, + -0.002013f, +0.010381f, -0.001525f, +0.010232f, -0.012900f, +0.006562f, -0.000399f, +0.009897f, -0.016270f, -0.008599f, + -0.007727f, -0.004740f, -0.003379f, +0.003196f, -0.003558f, -0.001271f, -0.011143f, -0.002632f, -0.011378f, -0.018008f, + -0.006188f, -0.010701f, -0.006267f, -0.004082f, +0.000714f, -0.002976f, +0.002901f, +0.003282f, +0.011203f, -0.000644f, + -0.003886f, -0.001033f, +0.000242f, -0.009428f, -0.006784f, -0.006841f, +0.002109f, -0.003504f, +0.000186f, -0.004467f, + -0.000584f, +0.001614f, +0.000336f, -0.010521f, +0.002068f, -0.000702f, -0.005732f, +0.001227f, +0.003103f, +0.003352f, + +0.003858f, -0.000127f, +0.003773f, +0.001128f, -0.002509f, +0.001548f, +0.001005f, -0.001440f, -0.003748f, -0.001093f, + +0.001860f, +0.000856f, +0.001650f, -0.002575f, +0.000486f, +0.001740f + }, + { + +0.002956f, -0.102441f, -0.053326f, -0.001381f, -0.010653f, -0.010297f, -0.014481f, +0.000753f, +0.007769f, +0.032736f, + +0.014579f, +0.019189f, +0.029129f, +0.006075f, -0.014667f, -0.007624f, +0.008080f, -0.012809f, -0.000305f, +0.011667f, + +0.015304f, +0.018085f, -0.013419f, -0.004030f, +0.013474f, -0.003963f, +0.009161f, +0.000714f, +0.002042f, +0.018674f, + -0.024467f, +0.014591f, +0.018972f, -0.012064f, -0.014183f, +0.001188f, -0.009634f, -0.018922f, -0.009761f, +0.008862f, + +0.010436f, -0.005789f, +0.004737f, +0.000549f, +0.004001f, -0.000784f, +0.000866f, -0.004348f, +0.011223f, -0.006447f, + -0.006926f, -0.009757f, -0.008335f, +0.002391f, +0.003487f, -0.008937f, +0.000592f, -0.004014f, +0.004370f, -0.004499f, + -0.002191f, -0.003121f, +0.001757f, -0.002570f, +0.000625f, +0.001050f, +0.000104f, +0.000583f, +0.000070f, -0.000761f, + +0.000207f, +0.000935f, +0.004798f, -0.003440f, -0.004610f, +0.002060f, -0.002709f, +0.001718f, +0.001585f, +0.006486f, + -0.002309f, +0.002248f, +0.001167f, +0.000918f, -0.006107f, -0.003908f, +0.001184f, -0.001132f, -0.004000f, -0.003157f, + +0.000194f, -0.003832f, +0.000220f, -0.000012f, +0.001311f, -0.001566f + }, + { + -0.011139f, -0.260271f, +0.084204f, -0.002630f, -0.010164f, -0.092200f, +0.060123f, -0.000278f, +0.011775f, +0.018659f, + +0.003604f, -0.012848f, +0.013057f, -0.034434f, +0.008601f, -0.013756f, +0.036200f, +0.033273f, +0.019484f, -0.018589f, + +0.001522f, -0.003358f, +0.007793f, -0.003553f, +0.001130f, -0.006982f, -0.002998f, -0.020203f, +0.002764f, +0.015273f, + -0.002448f, -0.001205f, +0.005627f, -0.014441f, -0.007219f, +0.013544f, -0.007104f, -0.002755f, +0.008153f, +0.003614f, + +0.008498f, +0.006640f, -0.001071f, +0.004821f, +0.003527f, -0.007789f, -0.001520f, -0.014631f, +0.005102f, -0.003391f, + +0.005261f, -0.007785f, -0.003952f, -0.002399f, +0.006603f, -0.003094f, -0.006288f, -0.007065f, -0.001544f, -0.003960f, + +0.002155f, -0.003283f, -0.005230f, -0.001451f, +0.001957f, +0.006740f, +0.001206f, +0.000213f, -0.000414f, +0.002708f, + -0.001678f, +0.000181f, +0.000359f, +0.000190f, -0.001124f, +0.000629f, -0.004569f, -0.000874f, +0.002457f, +0.005469f, + -0.002515f, +0.000093f, +0.000309f, -0.002461f, -0.000013f, +0.001108f, -0.003201f, -0.002388f, +0.000762f, +0.001062f, + +0.000020f, -0.004025f, +0.000032f, +0.003835f, -0.000785f, -0.000952f + }, + { + -0.002473f, -0.072923f, +0.009017f, +0.022773f, +0.008308f, +0.005541f, -0.018061f, +0.011396f, -0.003512f, +0.003268f, + -0.026919f, +0.003464f, -0.020958f, -0.014199f, +0.033129f, -0.028648f, -0.008301f, +0.010420f, -0.046183f, +0.000458f, + +0.010630f, +0.001321f, -0.021000f, -0.016800f, +0.011176f, +0.007053f, +0.028462f, -0.005981f, -0.008081f, +0.002398f, + -0.007197f, -0.004949f, -0.015199f, +0.025029f, +0.001983f, -0.010263f, -0.015073f, -0.027867f, -0.017775f, +0.001159f, + +0.016066f, +0.002317f, -0.011283f, -0.003525f, -0.002403f, -0.000777f, -0.002905f, -0.004003f, +0.001680f, +0.004839f, + -0.004198f, -0.004915f, -0.001188f, -0.000091f, +0.002692f, +0.009049f, -0.008214f, +0.014764f, +0.010690f, -0.000463f, + -0.007378f, +0.002414f, +0.002529f, +0.003583f, -0.002690f, +0.001689f, +0.004744f, +0.000805f, -0.000384f, -0.002221f, + -0.001042f, -0.001167f, -0.004153f, +0.000314f, +0.001952f, +0.004848f, -0.004642f, -0.001867f, -0.000085f, -0.002530f, + -0.004378f, +0.003583f, +0.000241f, -0.003641f, +0.000002f, +0.001213f, -0.001276f, +0.001442f, +0.001907f, -0.001245f, + +0.001927f, +0.000392f, +0.000295f, -0.000456f, +0.000351f, +0.002576f + }, + { + -0.039216f, -0.081783f, -0.009576f, +0.024996f, -0.010745f, +0.023887f, -0.035958f, +0.021938f, +0.021290f, +0.015485f, + -0.061283f, +0.024454f, -0.000985f, -0.004328f, -0.008470f, +0.012916f, +0.020761f, +0.006486f, -0.020558f, -0.007364f, + -0.008767f, +0.000225f, +0.002851f, +0.011145f, +0.009065f, -0.018155f, -0.021894f, -0.014215f, -0.024487f, -0.005452f, + +0.021764f, -0.036866f, +0.006834f, +0.012842f, +0.005140f, +0.007957f, +0.012488f, -0.009402f, -0.007003f, -0.011287f, + +0.020169f, +0.016930f, +0.000400f, -0.002226f, -0.002420f, +0.010768f, +0.006943f, +0.008108f, -0.014941f, -0.006393f, + -0.008741f, -0.009261f, -0.002723f, -0.004006f, -0.017497f, -0.008674f, -0.009578f, +0.001236f, -0.000647f, +0.000777f, + +0.003058f, +0.002688f, +0.006299f, +0.001680f, -0.006171f, +0.005997f, +0.010039f, -0.005288f, -0.010013f, -0.003499f, + -0.003464f, +0.004575f, -0.001147f, -0.005088f, -0.001684f, +0.001276f, +0.005069f, +0.000445f, -0.001965f, +0.003384f, + +0.003485f, +0.004478f, +0.001417f, -0.000455f, -0.002956f, -0.000553f, +0.000569f, +0.001166f, -0.005866f, +0.001163f, + +0.000182f, +0.001367f, -0.000022f, +0.000140f, -0.003854f, -0.002858f + }, + { + +0.007708f, +0.079932f, -0.006838f, -0.003282f, -0.003023f, +0.012750f, +0.012379f, -0.002631f, +0.005506f, +0.005596f, + -0.010131f, -0.005292f, +0.014491f, +0.038071f, -0.124812f, -0.008298f, -0.002384f, +0.025464f, -0.023646f, -0.017826f, + -0.001353f, -0.000627f, -0.006862f, -0.011350f, -0.022757f, -0.002609f, -0.012361f, +0.005653f, -0.011750f, +0.004983f, + +0.011489f, +0.024502f, +0.004319f, -0.003170f, -0.000574f, +0.022683f, +0.011105f, +0.002722f, +0.001751f, +0.003025f, + -0.008496f, -0.003677f, -0.007432f, +0.003596f, +0.005411f, +0.002056f, -0.004353f, +0.005420f, -0.004546f, +0.008823f, + -0.000279f, -0.004342f, +0.008766f, +0.001136f, -0.008884f, +0.008774f, -0.003363f, +0.004408f, +0.006988f, -0.009738f, + +0.000921f, -0.001733f, -0.001411f, +0.014050f, +0.006482f, +0.002725f, +0.002903f, +0.005065f, +0.009075f, -0.003445f, + +0.000588f, +0.006885f, -0.001118f, -0.000682f, -0.009384f, +0.003356f, +0.001843f, +0.001547f, -0.007934f, -0.002019f, + +0.001205f, -0.000103f, +0.002310f, -0.001749f, +0.001025f, +0.004169f, +0.003802f, -0.000971f, +0.003317f, +0.004159f, + -0.006378f, +0.002166f, +0.000802f, +0.002981f, +0.002699f, -0.002353f + }, + { + -0.034593f, +0.037598f, +0.043336f, -0.036530f, +0.003696f, +0.011195f, +0.003983f, +0.006540f, -0.016483f, +0.007089f, + +0.014978f, +0.000106f, -0.032032f, +0.010811f, +0.081698f, +0.006988f, -0.008362f, -0.005593f, -0.037414f, -0.001811f, + -0.014874f, +0.015473f, +0.018537f, -0.005148f, -0.018937f, +0.013216f, +0.002237f, -0.019650f, -0.011276f, -0.021903f, + +0.000871f, -0.022459f, +0.014701f, +0.006863f, +0.006189f, -0.012952f, +0.007061f, -0.000476f, +0.010594f, -0.012385f, + +0.001753f, -0.008168f, +0.015351f, -0.004020f, -0.011156f, -0.009184f, -0.014830f, -0.008988f, -0.012683f, -0.004012f, + +0.000588f, +0.002851f, -0.015279f, +0.014653f, -0.000850f, -0.005240f, -0.001797f, +0.005058f, -0.001558f, -0.010933f, + -0.003005f, +0.006583f, +0.008337f, +0.003240f, -0.001497f, +0.003757f, -0.001395f, -0.000140f, +0.000696f, +0.002802f, + -0.002013f, -0.001404f, -0.002867f, +0.001484f, -0.001175f, -0.003301f, -0.003475f, +0.002494f, -0.000917f, -0.004095f, + +0.004193f, +0.000602f, -0.002888f, -0.000857f, +0.000527f, +0.000644f, -0.000572f, +0.000044f, +0.003056f, -0.002314f, + +0.004023f, +0.002842f, +0.000794f, +0.001006f, +0.000979f, +0.001401f + } + }, + { + { + -0.002235f, +0.014689f, +0.030726f, +0.052665f, -0.025664f, +0.004723f, -0.010426f, -0.004763f, -0.011727f, +0.004696f, + -0.009006f, -0.018568f, -0.004842f, +0.015563f, +0.024378f, +0.003829f, -0.045756f, -0.010499f, +0.025266f, -0.003779f, + +0.019506f, -0.001304f, +0.002528f, +0.013275f, -0.019600f, +0.011085f, -0.033420f, +0.021848f, -0.005451f, +0.001079f, + -0.003478f, -0.024662f, +0.007648f, -0.000294f, -0.003813f, -0.004009f, -0.007455f, -0.001093f, +0.014208f, +0.002386f, + -0.005948f, +0.016353f, +0.008911f, +0.001418f, -0.004671f, +0.002532f, +0.028125f, +0.006058f, -0.012597f, -0.001183f, + +0.004058f, +0.013795f, -0.008712f, +0.008575f, +0.011281f, -0.001543f, -0.009292f, +0.003448f, -0.003624f, +0.004926f, + +0.000905f, +0.002380f, -0.000614f, -0.007140f, -0.000945f, -0.002405f, -0.001515f, +0.002335f, +0.003362f, +0.004640f, + -0.001786f, +0.003697f, -0.004056f, +0.007660f, -0.004003f, +0.000551f, -0.001855f, +0.002129f, -0.005326f, +0.003878f, + +0.001779f, +0.003094f, +0.002022f, +0.001346f, -0.004428f, -0.002311f, +0.001043f, +0.000185f, +0.001408f, +0.002290f, + +0.002078f, +0.000563f, -0.000124f, -0.001936f, +0.000236f, +0.001894f + }, + { + -0.006450f, +0.464562f, +0.004074f, +0.132112f, -0.020974f, +0.011546f, +0.016134f, +0.016808f, +0.016468f, -0.003589f, + +0.006472f, -0.048092f, -0.017988f, -0.002791f, -0.000955f, +0.019947f, -0.000465f, -0.017120f, +0.003685f, -0.004085f, + -0.003895f, -0.003233f, +0.007904f, +0.000108f, -0.000780f, -0.014273f, +0.002567f, +0.007475f, +0.023872f, -0.003202f, + +0.001560f, +0.013278f, -0.006477f, +0.015537f, +0.010923f, -0.009125f, -0.003190f, -0.002502f, +0.002479f, +0.000872f, + +0.004045f, -0.001677f, +0.015352f, -0.010639f, -0.000853f, -0.011023f, -0.000499f, +0.009444f, +0.010866f, +0.003897f, + -0.001472f, -0.000523f, -0.000594f, -0.018200f, +0.000031f, +0.010683f, -0.009554f, -0.000166f, -0.003415f, +0.000720f, + -0.001974f, -0.002306f, +0.003388f, -0.001044f, +0.004482f, +0.001783f, +0.001016f, -0.003065f, +0.000511f, +0.003522f, + -0.003618f, +0.000080f, +0.003026f, +0.001171f, +0.001691f, -0.000330f, -0.001539f, -0.001894f, -0.003444f, +0.000415f, + +0.003558f, -0.002547f, -0.001492f, +0.001187f, +0.001896f, +0.003504f, +0.003724f, -0.001924f, -0.000003f, -0.000936f, + +0.001590f, +0.002993f, +0.001912f, -0.001504f, +0.001726f, -0.000483f + }, + { + +0.012981f, -0.178506f, -0.036178f, -0.072328f, +0.028175f, -0.006702f, +0.019710f, +0.001389f, +0.006497f, -0.020357f, + +0.003438f, +0.048807f, +0.017699f, +0.006281f, +0.003890f, +0.018087f, -0.006741f, +0.015700f, -0.006527f, +0.011431f, + -0.014638f, +0.002377f, +0.003208f, +0.010618f, -0.007731f, -0.013300f, -0.014326f, -0.002664f, +0.021810f, -0.007848f, + +0.016130f, +0.007063f, +0.003259f, -0.010393f, +0.018353f, -0.007339f, -0.003664f, -0.013308f, -0.005890f, +0.000026f, + -0.012222f, -0.005295f, +0.003743f, +0.001231f, +0.003698f, +0.002892f, +0.002302f, -0.004333f, -0.012781f, -0.000453f, + +0.019612f, -0.004474f, -0.001205f, -0.006913f, +0.000934f, +0.001383f, -0.001968f, -0.001100f, -0.001385f, +0.009459f, + +0.002206f, -0.009751f, -0.003708f, -0.006291f, -0.004155f, -0.002153f, +0.004490f, -0.004323f, -0.003524f, +0.002192f, + -0.001414f, -0.006811f, -0.005894f, +0.001036f, -0.002276f, +0.001273f, +0.000183f, -0.000225f, -0.000113f, -0.004598f, + +0.003899f, +0.003366f, +0.003768f, +0.000007f, -0.000278f, +0.000428f, +0.002328f, -0.001376f, +0.003795f, +0.001380f, + +0.002759f, -0.000322f, -0.000936f, -0.001968f, +0.003478f, +0.002147f + }, + { + +0.004102f, +0.006495f, -0.003469f, -0.007297f, -0.004122f, -0.002383f, +0.006036f, +0.004991f, +0.004420f, +0.007229f, + -0.007275f, +0.013983f, +0.008884f, +0.011684f, -0.031193f, -0.015930f, +0.025657f, +0.040655f, +0.013340f, -0.010841f, + -0.002072f, +0.005806f, -0.013090f, -0.024283f, +0.007774f, +0.014818f, +0.002207f, -0.004027f, +0.002658f, +0.006788f, + +0.013476f, -0.021869f, +0.015361f, -0.009983f, -0.003780f, +0.016272f, +0.031815f, -0.001863f, -0.004816f, -0.002997f, + +0.009534f, -0.003091f, -0.014287f, -0.003099f, +0.003520f, -0.001103f, +0.000043f, -0.000824f, +0.010469f, -0.001365f, + +0.002008f, -0.007011f, +0.006094f, +0.008794f, -0.008278f, -0.002823f, -0.004849f, -0.002505f, +0.003634f, +0.002961f, + +0.006182f, +0.002008f, +0.001926f, +0.002186f, -0.002367f, -0.000424f, +0.004932f, -0.004177f, +0.006808f, +0.004639f, + -0.001226f, +0.006576f, +0.002221f, -0.000974f, -0.005028f, +0.003498f, -0.000187f, -0.001260f, +0.000960f, +0.001016f, + +0.003195f, -0.000421f, +0.001611f, +0.000764f, +0.000754f, +0.000580f, +0.003466f, +0.004958f, -0.001236f, +0.001061f, + +0.004225f, -0.001351f, -0.002176f, +0.001396f, +0.001717f, -0.002916f + }, + { + +0.030327f, -0.007903f, -0.008205f, +0.084008f, +0.012648f, -0.001769f, +0.004562f, +0.006664f, -0.017920f, -0.007216f, + -0.051865f, -0.019183f, +0.039220f, -0.009042f, +0.031846f, +0.017555f, +0.000294f, -0.027926f, -0.029026f, -0.035834f, + -0.010472f, -0.007037f, -0.028560f, +0.003542f, -0.012454f, +0.018265f, -0.021520f, -0.001742f, +0.009834f, +0.020304f, + +0.000135f, -0.000700f, -0.004462f, -0.010837f, +0.003749f, +0.019375f, -0.019830f, +0.018818f, -0.024517f, -0.005066f, + -0.006930f, -0.000788f, -0.003064f, +0.008279f, +0.007924f, -0.008540f, +0.016059f, +0.007213f, -0.007688f, +0.002935f, + -0.002760f, -0.010413f, +0.001659f, +0.002145f, +0.006929f, +0.002922f, -0.002830f, +0.002663f, +0.000327f, +0.003917f, + -0.013929f, +0.008108f, +0.008124f, +0.003431f, -0.010526f, +0.011370f, -0.008348f, +0.004777f, +0.004284f, +0.001934f, + -0.002689f, +0.003348f, +0.003760f, -0.000615f, +0.001409f, -0.001453f, -0.001958f, -0.001917f, +0.001102f, -0.003760f, + +0.000779f, +0.000436f, +0.003070f, -0.004849f, +0.005621f, +0.003001f, -0.001430f, -0.003949f, -0.003780f, +0.002219f, + +0.000402f, -0.001568f, +0.002672f, +0.002809f, -0.002151f, -0.000159f + }, + { + -0.000190f, -0.047520f, +0.003167f, +0.011532f, -0.000917f, -0.003474f, -0.001874f, -0.002373f, +0.000047f, -0.005333f, + -0.002089f, -0.006932f, +0.005528f, +0.019918f, +0.049360f, +0.004434f, +0.001528f, -0.008067f, -0.011495f, -0.006984f, + +0.017896f, +0.007687f, -0.012418f, -0.001636f, -0.008956f, +0.002188f, -0.007186f, -0.028009f, +0.023925f, +0.005968f, + -0.010371f, -0.006710f, -0.020298f, -0.005600f, +0.004155f, +0.019984f, -0.007387f, -0.009417f, +0.007450f, +0.000569f, + -0.014729f, -0.007441f, +0.002229f, +0.006914f, -0.001599f, +0.005183f, -0.008159f, +0.002458f, -0.003502f, +0.002712f, + +0.002625f, +0.000221f, +0.005719f, +0.006344f, -0.005393f, -0.003661f, +0.004667f, +0.000051f, +0.008507f, +0.000851f, + +0.002312f, -0.000650f, -0.001743f, -0.008845f, -0.000699f, -0.000504f, +0.002453f, -0.006290f, +0.008582f, +0.002070f, + -0.002445f, +0.003036f, +0.000872f, +0.002688f, +0.000020f, -0.001661f, +0.003257f, -0.004545f, +0.001973f, -0.001448f, + -0.000168f, -0.000869f, -0.005937f, +0.001588f, -0.000452f, -0.001927f, -0.000322f, -0.000492f, +0.000273f, -0.002399f, + -0.000998f, +0.001569f, +0.001239f, -0.003695f, -0.000853f, -0.000767f + }, + { + +0.060840f, -0.026404f, +0.013560f, +0.096031f, +0.015030f, -0.005843f, +0.012912f, +0.018676f, +0.016147f, -0.017737f, + +0.024242f, -0.004126f, +0.025738f, +0.007518f, +0.014343f, -0.010803f, -0.022284f, -0.030802f, +0.005694f, +0.008907f, + +0.001068f, +0.001726f, +0.012121f, -0.017688f, +0.005698f, +0.007883f, -0.010888f, -0.026049f, +0.003730f, -0.006169f, + -0.006100f, -0.010846f, +0.002394f, +0.002103f, +0.008082f, -0.005563f, +0.001366f, +0.006453f, +0.001289f, -0.002210f, + +0.007310f, +0.003130f, +0.004308f, +0.007744f, -0.001076f, -0.010499f, +0.020308f, -0.005801f, -0.014409f, +0.001533f, + +0.005226f, -0.008014f, +0.009069f, -0.001632f, -0.000639f, +0.001224f, +0.005556f, -0.000904f, +0.005096f, -0.001997f, + -0.003448f, +0.001997f, -0.012519f, +0.007838f, -0.007951f, -0.000678f, -0.002340f, +0.007797f, +0.000325f, +0.000116f, + +0.002770f, -0.001089f, -0.002205f, -0.002080f, -0.000153f, -0.001122f, +0.000709f, -0.000172f, -0.000732f, +0.000787f, + -0.000777f, -0.001685f, +0.000845f, +0.003331f, +0.000588f, -0.003947f, -0.000776f, +0.000161f, +0.000862f, +0.005020f, + -0.000831f, +0.001874f, +0.000718f, +0.000329f, -0.000215f, +0.001687f + }, + { + +0.001484f, -0.028140f, +0.009102f, -0.010372f, -0.007471f, +0.002956f, -0.001945f, +0.001877f, -0.009995f, +0.003493f, + +0.014666f, +0.008935f, +0.021591f, +0.016776f, +0.000187f, -0.016379f, -0.004615f, -0.009007f, -0.001415f, +0.032330f, + -0.004926f, -0.018596f, -0.006331f, +0.000475f, +0.016581f, -0.036674f, -0.024386f, +0.009491f, +0.023412f, -0.012001f, + -0.033639f, +0.028648f, +0.001501f, +0.007684f, +0.012740f, +0.000669f, -0.018049f, +0.032011f, +0.003114f, +0.000431f, + +0.016128f, -0.011163f, +0.010391f, -0.012063f, -0.004066f, +0.003561f, +0.007847f, +0.001472f, +0.004818f, +0.010759f, + -0.008208f, -0.003964f, -0.004932f, -0.007207f, -0.002115f, -0.000590f, -0.006601f, +0.005078f, +0.002037f, +0.008785f, + +0.002114f, -0.000016f, -0.001943f, +0.004624f, +0.005811f, +0.004079f, +0.001258f, -0.002525f, +0.000660f, -0.000269f, + -0.010913f, +0.000940f, -0.001486f, -0.004903f, +0.000800f, +0.000633f, -0.001659f, -0.000816f, +0.003209f, +0.002861f, + -0.000142f, +0.002292f, +0.001737f, -0.004679f, -0.000571f, +0.000313f, -0.001025f, -0.003078f, +0.001433f, +0.000423f, + +0.001432f, -0.003032f, +0.001142f, +0.002353f, -0.001483f, -0.000903f + }, + { + +0.053074f, +0.189622f, -0.024697f, +0.111632f, +0.029453f, -0.018744f, +0.014672f, +0.014218f, +0.040873f, -0.019197f, + +0.021791f, -0.005851f, -0.003741f, +0.026045f, +0.024829f, -0.005418f, +0.018034f, +0.004471f, -0.007413f, +0.008643f, + +0.012506f, +0.003728f, -0.015850f, -0.008618f, +0.024895f, +0.004902f, -0.006409f, +0.001318f, +0.002213f, -0.003110f, + +0.012923f, +0.006909f, -0.003335f, +0.009425f, -0.001440f, +0.001159f, -0.005889f, +0.007378f, -0.000523f, -0.021536f, + -0.017983f, +0.002633f, +0.008151f, -0.002012f, -0.013760f, -0.001432f, -0.005355f, -0.007255f, -0.003394f, -0.020315f, + -0.010425f, -0.007314f, +0.005234f, -0.015063f, -0.006358f, +0.000156f, +0.001042f, +0.005054f, +0.004231f, -0.001558f, + +0.001775f, -0.000716f, +0.004690f, -0.008669f, -0.010151f, +0.000196f, -0.007174f, -0.003001f, -0.000824f, -0.005789f, + +0.005038f, +0.000698f, +0.000900f, -0.006974f, -0.004409f, -0.000040f, +0.000081f, -0.003323f, +0.002198f, +0.005902f, + +0.007771f, -0.001864f, -0.000852f, +0.007711f, -0.004570f, +0.001275f, -0.001213f, -0.002867f, -0.000617f, -0.001870f, + +0.000790f, +0.001413f, +0.001615f, -0.001907f, -0.000269f, +0.002242f + }, + { + -0.001137f, -0.099824f, -0.044545f, -0.010512f, +0.006063f, -0.031526f, -0.018155f, -0.004203f, +0.020402f, +0.020526f, + -0.004609f, +0.045650f, +0.021964f, +0.023392f, -0.019060f, -0.011706f, -0.015276f, +0.010325f, +0.010007f, -0.014201f, + +0.038286f, -0.004148f, +0.009348f, -0.019135f, +0.026319f, -0.004240f, -0.002847f, +0.003387f, +0.014810f, +0.008577f, + -0.023661f, +0.006323f, +0.031013f, -0.021568f, -0.009168f, +0.008960f, -0.033174f, -0.004338f, +0.002389f, -0.012430f, + +0.003069f, +0.002908f, -0.002982f, +0.007297f, +0.009036f, -0.001881f, -0.002377f, -0.001144f, +0.017521f, -0.008717f, + -0.012611f, -0.011114f, -0.008160f, +0.019335f, -0.008494f, +0.003958f, -0.001101f, -0.001063f, -0.003288f, -0.002344f, + +0.000535f, -0.002982f, -0.001624f, +0.005578f, -0.004525f, +0.003869f, -0.004490f, +0.000945f, -0.002656f, +0.003901f, + +0.001469f, -0.000611f, -0.002764f, +0.003819f, -0.006160f, -0.002378f, +0.004234f, +0.001589f, +0.001169f, +0.003663f, + +0.000057f, -0.001121f, +0.000517f, +0.000750f, -0.004410f, -0.002570f, -0.000453f, -0.001619f, -0.004876f, -0.005079f, + +0.001008f, -0.001107f, -0.000926f, -0.002615f, +0.001488f, +0.001142f + }, + { + +0.003785f, -0.268941f, +0.071919f, -0.003534f, -0.031390f, +0.017005f, -0.029529f, +0.015174f, +0.003677f, +0.004524f, + -0.005775f, +0.021483f, -0.016447f, -0.013211f, -0.002575f, -0.011706f, +0.017230f, +0.051855f, -0.009994f, +0.002046f, + +0.005691f, +0.015400f, -0.008276f, -0.002544f, -0.020179f, +0.009183f, -0.007631f, -0.011494f, -0.019839f, +0.009634f, + +0.016091f, -0.019157f, +0.007013f, -0.011015f, -0.003861f, +0.011866f, +0.003464f, -0.010891f, +0.009200f, +0.011568f, + +0.000801f, -0.001010f, +0.004839f, +0.008103f, -0.005502f, -0.004147f, +0.000131f, -0.008727f, -0.000764f, -0.002527f, + -0.003789f, -0.007188f, -0.000654f, -0.006311f, +0.008015f, -0.003095f, -0.005502f, -0.008193f, -0.000519f, +0.004147f, + -0.008712f, -0.006343f, +0.002933f, -0.000096f, +0.001587f, +0.005629f, +0.003721f, -0.006824f, +0.003243f, +0.001318f, + +0.003653f, -0.003744f, +0.005923f, -0.004794f, +0.001572f, +0.001653f, -0.004344f, -0.001458f, -0.000036f, +0.004032f, + +0.000323f, +0.000006f, -0.000839f, -0.000174f, +0.001541f, -0.002543f, +0.000278f, -0.002282f, -0.002436f, +0.002490f, + +0.000102f, -0.003720f, +0.002337f, -0.000780f, +0.001072f, -0.001665f + }, + { + +0.004158f, -0.053501f, -0.006180f, +0.003805f, +0.025596f, +0.005108f, -0.008599f, -0.000102f, +0.002643f, -0.009560f, + +0.001210f, -0.016397f, -0.014623f, -0.037114f, +0.032186f, -0.014769f, +0.004518f, +0.006018f, -0.048936f, -0.013185f, + +0.020872f, -0.008382f, -0.025631f, +0.008610f, -0.001206f, -0.002575f, +0.044871f, -0.010625f, -0.004833f, +0.013443f, + -0.019086f, +0.002857f, -0.012629f, +0.023380f, -0.001997f, -0.017023f, -0.003529f, -0.019418f, -0.026486f, +0.000329f, + +0.023962f, +0.001513f, -0.007335f, -0.011539f, +0.000135f, -0.006759f, -0.014222f, +0.009647f, -0.003878f, +0.003627f, + -0.000786f, -0.001354f, +0.002939f, -0.005156f, +0.001110f, -0.001620f, +0.003126f, +0.016275f, +0.010947f, +0.004828f, + -0.010279f, +0.006654f, -0.003071f, +0.010656f, -0.004425f, -0.000519f, +0.006462f, -0.003004f, -0.001890f, +0.002079f, + -0.001648f, -0.004681f, -0.003587f, -0.001358f, +0.004094f, +0.002146f, -0.004903f, -0.001714f, +0.000880f, -0.001942f, + -0.001586f, +0.000003f, -0.000969f, +0.001072f, -0.005385f, +0.002132f, -0.000839f, +0.002580f, -0.001353f, +0.003252f, + +0.001053f, -0.002358f, +0.000062f, +0.000111f, +0.001671f, +0.000967f + }, + { + +0.023543f, -0.167861f, -0.009686f, +0.049400f, -0.038171f, -0.032696f, +0.010360f, +0.005174f, +0.021793f, +0.015491f, + -0.046722f, +0.013097f, -0.001378f, +0.023008f, -0.010717f, +0.001073f, +0.033889f, -0.017019f, +0.002626f, -0.000819f, + -0.032624f, -0.002436f, -0.006123f, +0.016984f, +0.003421f, -0.011581f, -0.018236f, -0.010902f, -0.033054f, +0.006900f, + +0.005518f, -0.018129f, -0.000585f, +0.012861f, +0.013582f, +0.001467f, +0.002702f, +0.003406f, -0.015269f, -0.003607f, + +0.002252f, +0.018198f, +0.009456f, -0.000068f, +0.000822f, +0.004981f, +0.008402f, +0.004333f, -0.004412f, -0.000716f, + -0.016780f, -0.005931f, -0.004192f, -0.014901f, -0.009831f, -0.011978f, -0.013050f, +0.004146f, +0.000789f, +0.006551f, + +0.000118f, +0.006394f, +0.004131f, -0.001819f, -0.000957f, +0.007536f, +0.001043f, -0.000896f, -0.005813f, -0.001322f, + -0.003511f, +0.004017f, -0.001824f, -0.007961f, +0.001741f, +0.000404f, +0.002488f, +0.000360f, -0.000836f, +0.002376f, + +0.004063f, +0.002969f, +0.005324f, -0.001740f, -0.004305f, -0.002621f, +0.005113f, -0.000674f, -0.005429f, +0.000580f, + +0.003917f, +0.000244f, +0.000394f, -0.004730f, -0.002000f, -0.003065f + }, + { + -0.007576f, +0.099986f, +0.000007f, -0.004563f, +0.006112f, +0.015693f, -0.011359f, +0.004712f, -0.007614f, +0.011684f, + -0.010972f, -0.007455f, +0.020204f, -0.065201f, +0.024860f, -0.020987f, -0.009823f, +0.011923f, -0.014491f, -0.016589f, + -0.018911f, -0.004432f, +0.015927f, -0.013225f, -0.027560f, +0.012444f, -0.018126f, +0.023792f, -0.036041f, +0.004314f, + +0.013604f, +0.017956f, +0.012879f, +0.012950f, -0.012888f, +0.022657f, +0.011532f, +0.003229f, +0.000789f, -0.023355f, + +0.003540f, +0.001934f, -0.012077f, +0.007231f, +0.008290f, +0.002668f, +0.002765f, +0.005167f, -0.004410f, +0.007856f, + -0.003060f, -0.016837f, +0.015325f, -0.000107f, +0.002177f, +0.010236f, -0.007087f, +0.001121f, +0.000179f, +0.001254f, + -0.002753f, -0.002585f, +0.005763f, +0.008602f, -0.000489f, +0.007892f, +0.003519f, +0.007746f, +0.005074f, +0.003127f, + -0.003506f, +0.008470f, +0.001144f, -0.002965f, -0.005542f, +0.000073f, +0.002461f, -0.000487f, -0.003968f, -0.001539f, + -0.002040f, +0.001783f, +0.001229f, +0.000008f, -0.000991f, +0.001105f, +0.006530f, +0.000924f, -0.002492f, +0.005141f, + -0.003943f, +0.000609f, +0.000195f, +0.002006f, +0.003583f, -0.002047f + }, + { + +0.039316f, -0.059393f, +0.050304f, -0.033522f, -0.017303f, -0.010308f, +0.019376f, +0.010417f, +0.008931f, -0.018882f, + +0.033526f, -0.026061f, -0.011636f, +0.052070f, +0.006657f, -0.019030f, +0.018762f, -0.028731f, -0.002474f, -0.008954f, + -0.026679f, +0.027642f, +0.015240f, +0.011167f, -0.018491f, +0.009103f, -0.014154f, -0.024259f, -0.018792f, +0.015669f, + -0.013568f, -0.006584f, +0.002720f, +0.019021f, -0.014543f, -0.002815f, +0.004735f, +0.020223f, +0.005775f, -0.014971f, + -0.010253f, -0.012136f, +0.000942f, +0.011500f, -0.015984f, -0.010869f, -0.012983f, -0.014812f, -0.010519f, -0.000605f, + +0.008309f, +0.000736f, -0.006767f, +0.006027f, +0.008207f, -0.008384f, -0.010688f, +0.000143f, -0.001263f, -0.007408f, + +0.002555f, -0.000593f, +0.007293f, +0.001166f, +0.006993f, -0.000497f, -0.006335f, +0.005483f, +0.000180f, +0.002444f, + -0.006991f, -0.003994f, -0.000367f, +0.000372f, -0.000620f, -0.003263f, -0.005090f, +0.003771f, -0.002665f, -0.000273f, + +0.003998f, -0.000205f, -0.001457f, -0.000206f, +0.000697f, -0.000049f, +0.002220f, +0.000032f, -0.001602f, +0.001749f, + +0.004489f, +0.000073f, +0.003051f, -0.001832f, +0.004095f, -0.000597f + } + }, + { + { + +0.000260f, -0.077718f, -0.047276f, +0.048477f, -0.030764f, -0.001722f, -0.013081f, +0.006441f, +0.000174f, -0.000879f, + -0.013683f, -0.010457f, -0.009772f, -0.028218f, -0.014908f, -0.011470f, -0.034677f, +0.004911f, +0.021658f, -0.010013f, + +0.026713f, +0.011533f, -0.006319f, +0.005466f, -0.008616f, +0.011952f, -0.029644f, +0.012374f, -0.009090f, +0.002045f, + +0.009310f, +0.006761f, +0.017889f, -0.009807f, -0.002479f, -0.001756f, -0.011703f, -0.005881f, +0.010816f, -0.000669f, + -0.007950f, +0.005130f, +0.003183f, +0.001992f, -0.004641f, -0.002369f, +0.017330f, -0.004135f, -0.014632f, -0.001971f, + +0.006074f, +0.012974f, -0.005049f, +0.018882f, +0.007760f, -0.003909f, -0.003607f, +0.001650f, -0.007394f, +0.005329f, + +0.000168f, +0.008277f, +0.007269f, +0.002213f, +0.004594f, -0.000963f, -0.003205f, -0.001378f, +0.005281f, +0.009657f, + +0.004384f, +0.005766f, -0.005862f, +0.009162f, +0.000510f, +0.005815f, -0.000797f, +0.004080f, -0.000364f, +0.004267f, + -0.000524f, +0.000785f, +0.002674f, +0.001841f, -0.001950f, +0.000770f, +0.002643f, -0.000054f, -0.000042f, -0.000929f, + +0.001866f, +0.001740f, +0.000705f, -0.003209f, -0.001763f, +0.000228f + }, + { + +0.011217f, +0.551291f, +0.055243f, +0.124283f, -0.023879f, -0.014312f, -0.015743f, -0.011599f, -0.008870f, -0.030515f, + -0.011070f, +0.003419f, +0.012830f, -0.019361f, -0.017748f, -0.001262f, +0.005189f, +0.008393f, +0.019173f, +0.008962f, + +0.003451f, -0.005992f, +0.010001f, +0.014384f, +0.004806f, -0.008210f, -0.004191f, -0.005827f, +0.008771f, -0.006312f, + -0.000160f, +0.004339f, -0.018022f, +0.001641f, +0.006791f, -0.009984f, -0.000866f, -0.000468f, -0.000289f, -0.002907f, + +0.007103f, -0.005069f, +0.012170f, -0.005652f, -0.003347f, -0.017551f, -0.001777f, +0.004177f, +0.002387f, -0.005238f, + -0.006342f, -0.002793f, +0.005588f, -0.005994f, +0.005725f, +0.006355f, -0.015213f, -0.001617f, -0.000512f, +0.006706f, + +0.004934f, -0.003617f, +0.007101f, +0.010156f, +0.002610f, -0.003476f, +0.004367f, +0.001083f, +0.005722f, +0.004772f, + -0.003753f, -0.001876f, +0.001962f, +0.001914f, -0.000104f, +0.001447f, +0.001532f, +0.001249f, -0.002114f, -0.000872f, + +0.004022f, -0.003517f, -0.003299f, +0.000821f, -0.001216f, +0.000281f, +0.001806f, -0.001455f, +0.002668f, +0.001121f, + +0.001482f, +0.002398f, +0.001541f, -0.001448f, +0.001832f, -0.001510f + }, + { + -0.013753f, -0.085934f, +0.057205f, -0.083064f, +0.031432f, +0.001232f, +0.010334f, -0.010200f, +0.006922f, -0.014453f, + -0.018279f, +0.010655f, -0.011844f, -0.013728f, +0.007725f, +0.023156f, -0.019422f, +0.019339f, -0.012792f, +0.003301f, + -0.019164f, -0.009854f, -0.008755f, -0.001242f, +0.000545f, +0.004969f, -0.009041f, +0.001852f, +0.006212f, -0.030799f, + +0.014631f, +0.018064f, +0.003081f, -0.019333f, +0.007795f, -0.006888f, +0.025735f, +0.014769f, +0.009696f, -0.002046f, + -0.011554f, +0.007548f, +0.008215f, -0.000405f, +0.006284f, -0.003425f, -0.009104f, +0.000827f, -0.000489f, +0.002262f, + +0.018838f, -0.009308f, -0.001983f, +0.000104f, +0.006676f, +0.007716f, +0.001363f, +0.000800f, -0.000429f, +0.006227f, + +0.000806f, -0.007144f, -0.001305f, -0.000241f, +0.000197f, +0.000847f, +0.001632f, -0.004362f, -0.005313f, -0.006462f, + +0.002476f, +0.000206f, -0.000741f, +0.008291f, +0.002703f, +0.006802f, +0.002337f, -0.004994f, -0.003368f, -0.005635f, + +0.000028f, -0.000812f, +0.004372f, -0.000365f, -0.000313f, +0.001322f, +0.000310f, -0.001346f, +0.003542f, +0.000565f, + +0.000604f, -0.003689f, -0.000156f, -0.000085f, +0.003218f, +0.002480f + }, + { + -0.004796f, +0.021413f, +0.016122f, +0.001551f, +0.000250f, -0.002132f, +0.006051f, -0.004171f, -0.000924f, +0.005458f, + -0.009985f, +0.007992f, -0.000800f, +0.001133f, -0.034431f, -0.017123f, +0.025240f, +0.015777f, -0.008308f, +0.006765f, + +0.020043f, -0.002726f, -0.006936f, -0.004263f, +0.017370f, +0.031948f, +0.013418f, +0.000930f, +0.001052f, -0.020183f, + -0.001884f, -0.005293f, +0.018245f, +0.001440f, +0.003799f, +0.002273f, +0.030777f, +0.005024f, +0.011705f, -0.001884f, + +0.012002f, -0.004928f, -0.017337f, -0.007049f, +0.004490f, +0.010633f, +0.000612f, -0.005879f, +0.005826f, -0.006861f, + +0.004005f, -0.003103f, +0.001924f, -0.003090f, -0.005451f, +0.000175f, -0.010508f, -0.006703f, +0.006658f, +0.005134f, + +0.003476f, +0.002491f, +0.003276f, +0.001386f, +0.002855f, +0.005240f, +0.002488f, -0.008110f, -0.001835f, -0.000556f, + -0.001704f, +0.003876f, -0.001753f, -0.001216f, -0.000872f, +0.003751f, -0.001684f, +0.000678f, -0.000494f, -0.003120f, + -0.000407f, -0.001854f, +0.001863f, +0.003106f, +0.001085f, -0.003025f, +0.000854f, +0.003584f, -0.000336f, +0.000499f, + +0.002824f, -0.001014f, -0.001031f, -0.000126f, -0.000220f, -0.001140f + }, + { + -0.048227f, -0.130418f, -0.006290f, +0.068483f, -0.013329f, -0.004415f, -0.008694f, +0.001273f, -0.017353f, -0.018791f, + -0.004718f, +0.030401f, +0.024409f, -0.021079f, -0.000044f, -0.005936f, +0.004044f, -0.027421f, -0.020522f, -0.028218f, + -0.005985f, -0.011832f, -0.021979f, +0.007177f, -0.015968f, +0.021500f, -0.013058f, +0.014872f, +0.019909f, +0.000376f, + -0.016542f, +0.005762f, -0.012074f, -0.006214f, +0.006100f, +0.002142f, -0.027297f, +0.020077f, -0.017816f, +0.005634f, + +0.004545f, +0.009913f, -0.007530f, -0.003815f, +0.000248f, -0.014155f, +0.003012f, -0.001970f, -0.000394f, +0.001564f, + -0.005324f, -0.006446f, +0.005189f, +0.000364f, +0.002826f, -0.000765f, -0.005010f, +0.001418f, +0.000677f, -0.001561f, + -0.019570f, +0.001531f, +0.002535f, +0.011668f, -0.007779f, +0.007047f, -0.008202f, +0.001903f, +0.000378f, -0.002330f, + -0.005424f, +0.003225f, +0.004390f, -0.000546f, -0.000426f, -0.000477f, +0.005097f, +0.000544f, +0.001639f, -0.004015f, + -0.001802f, +0.000146f, +0.005722f, -0.007052f, +0.000923f, +0.002653f, +0.000607f, -0.005122f, -0.003204f, +0.002271f, + -0.000829f, -0.001960f, +0.002966f, +0.001481f, -0.001893f, +0.001609f + }, + { + +0.002651f, -0.015268f, +0.016786f, +0.003749f, -0.001455f, +0.000513f, +0.000658f, +0.000068f, +0.003639f, -0.009598f, + -0.012943f, -0.007599f, +0.009876f, -0.008261f, +0.006137f, -0.013079f, +0.008626f, +0.016504f, +0.015540f, +0.014164f, + +0.013041f, -0.006444f, -0.001722f, +0.013762f, -0.022353f, -0.012448f, +0.014953f, -0.023544f, +0.008734f, +0.003025f, + +0.018528f, +0.015629f, -0.019144f, -0.003214f, -0.007424f, +0.002119f, -0.011734f, -0.011643f, +0.003756f, -0.006904f, + -0.012964f, +0.007569f, +0.015002f, +0.018458f, +0.005889f, +0.008399f, -0.009992f, +0.002172f, -0.012391f, -0.000997f, + +0.010586f, +0.002072f, +0.003639f, -0.004826f, -0.004348f, -0.001265f, +0.006604f, +0.001559f, +0.005966f, -0.002554f, + +0.002509f, -0.002513f, -0.001250f, -0.005516f, +0.004869f, -0.000798f, -0.002297f, -0.007648f, +0.009117f, +0.000766f, + -0.003287f, +0.004861f, -0.001223f, +0.001924f, +0.002881f, -0.000637f, +0.005224f, -0.000062f, +0.004681f, -0.001990f, + -0.001470f, +0.000493f, -0.004534f, -0.000145f, +0.000252f, +0.001131f, +0.000983f, -0.000328f, +0.002110f, -0.000700f, + -0.002992f, -0.000184f, +0.003014f, +0.000112f, +0.000806f, -0.001145f + }, + { + -0.074655f, -0.260866f, -0.020177f, +0.079553f, +0.009044f, -0.002662f, -0.006705f, +0.020983f, +0.028349f, -0.011190f, + +0.052574f, +0.002309f, +0.011813f, +0.011108f, +0.003872f, +0.000409f, -0.003165f, -0.015006f, -0.004149f, -0.003211f, + +0.008666f, -0.012887f, +0.014433f, +0.004795f, +0.028881f, +0.005765f, +0.002382f, +0.000010f, +0.017764f, -0.001883f, + +0.006954f, +0.004548f, +0.012381f, -0.001083f, +0.013245f, +0.006242f, -0.002452f, -0.002460f, -0.002542f, -0.002980f, + +0.003564f, -0.002553f, +0.002855f, +0.007775f, +0.010419f, -0.006542f, +0.005908f, -0.018739f, -0.011169f, -0.002852f, + +0.002250f, -0.006356f, -0.000718f, -0.010890f, -0.002520f, +0.000733f, +0.002314f, -0.007310f, +0.002029f, +0.000366f, + -0.003188f, +0.012467f, -0.006198f, +0.007532f, +0.000765f, +0.008606f, -0.005298f, +0.000813f, -0.000820f, +0.000472f, + -0.001713f, -0.001324f, +0.001196f, +0.000034f, -0.000333f, -0.000622f, -0.000561f, -0.002107f, -0.002593f, +0.002773f, + -0.000407f, -0.004185f, +0.000690f, +0.002888f, -0.001870f, -0.002491f, -0.000103f, +0.000584f, -0.001213f, +0.004197f, + +0.000635f, +0.000559f, -0.001624f, +0.001135f, +0.001656f, +0.002200f + }, + { + +0.003722f, -0.029396f, -0.000871f, -0.001915f, -0.003914f, +0.002519f, -0.003972f, +0.003738f, -0.006709f, -0.002369f, + -0.004036f, -0.002731f, +0.008185f, -0.006947f, -0.033922f, -0.018382f, +0.015852f, -0.015200f, -0.037948f, +0.002024f, + -0.020094f, -0.025562f, +0.021195f, +0.008634f, +0.009011f, -0.017627f, -0.009572f, -0.013195f, -0.006790f, -0.012989f, + -0.013489f, +0.016878f, -0.015262f, +0.001377f, +0.001605f, +0.008489f, -0.021397f, +0.008480f, -0.016231f, +0.000464f, + +0.024540f, -0.015182f, +0.011854f, -0.008066f, -0.002499f, +0.001079f, +0.011703f, +0.010977f, -0.004935f, +0.010799f, + +0.005753f, +0.006315f, +0.001693f, -0.004688f, +0.001954f, +0.000176f, -0.004342f, +0.010228f, -0.009301f, -0.006547f, + -0.000232f, +0.008054f, -0.000317f, +0.001115f, +0.008322f, +0.005317f, +0.003030f, -0.005190f, -0.004418f, +0.001871f, + -0.006070f, +0.005474f, +0.005665f, -0.002183f, +0.002946f, +0.000213f, -0.002564f, -0.002280f, +0.001014f, +0.000996f, + -0.001873f, -0.001575f, +0.001165f, -0.001686f, +0.001830f, +0.003582f, -0.000937f, -0.004739f, +0.000425f, +0.001063f, + -0.001030f, -0.002727f, +0.001859f, -0.000174f, -0.004235f, -0.002589f + }, + { + -0.094860f, +0.063786f, +0.043413f, +0.123446f, +0.035331f, -0.009268f, +0.031508f, -0.015153f, -0.002359f, +0.000831f, + +0.027470f, -0.014172f, -0.013225f, -0.003864f, +0.001461f, -0.011511f, +0.003468f, -0.017054f, +0.001613f, +0.009176f, + +0.014900f, +0.018972f, -0.007742f, -0.008069f, +0.016606f, +0.007680f, -0.006503f, -0.005543f, +0.000143f, +0.005012f, + +0.021596f, +0.001911f, -0.018809f, +0.008827f, +0.018485f, +0.021758f, -0.012561f, -0.013347f, +0.011539f, -0.006542f, + -0.010466f, +0.018460f, +0.012976f, -0.007565f, -0.011215f, +0.000329f, +0.002472f, +0.001714f, -0.000259f, -0.014072f, + -0.001527f, -0.006012f, +0.004227f, -0.013520f, -0.002488f, -0.002595f, -0.009917f, -0.000587f, +0.000625f, +0.002308f, + +0.006751f, -0.002477f, +0.003036f, -0.001991f, -0.003449f, +0.004326f, -0.004977f, -0.001155f, +0.000833f, -0.005090f, + +0.003882f, -0.000306f, +0.002610f, -0.000712f, +0.000959f, +0.002817f, +0.004324f, -0.002281f, +0.001178f, +0.005276f, + +0.005504f, -0.003308f, -0.000443f, +0.001711f, -0.006410f, -0.001249f, -0.004041f, -0.000625f, +0.003420f, -0.000416f, + -0.001472f, -0.001235f, -0.000583f, -0.000131f, +0.000291f, +0.000309f + }, + { + -0.002590f, -0.097412f, -0.024113f, -0.001004f, +0.002037f, -0.025853f, -0.007369f, -0.006779f, +0.010437f, +0.005083f, + -0.027059f, +0.019110f, +0.008439f, +0.023431f, -0.021645f, -0.009476f, -0.018902f, +0.004596f, +0.009100f, -0.041556f, + +0.000224f, -0.012842f, +0.023545f, -0.005227f, +0.008782f, -0.007196f, +0.008725f, +0.011963f, +0.012291f, -0.003152f, + -0.014818f, +0.001500f, +0.016973f, -0.007029f, +0.002562f, +0.017557f, -0.018764f, +0.001982f, +0.000118f, -0.012236f, + +0.010159f, +0.005980f, -0.002643f, +0.009764f, -0.003919f, -0.010023f, -0.002881f, +0.007242f, +0.025473f, -0.002189f, + -0.003320f, +0.006445f, +0.004621f, +0.013823f, -0.016658f, +0.006254f, -0.003326f, -0.002045f, +0.002035f, +0.005047f, + +0.006048f, -0.003220f, -0.007609f, +0.010116f, -0.005238f, +0.000722f, +0.001158f, +0.003827f, -0.004010f, -0.001292f, + -0.002345f, +0.000302f, -0.006226f, +0.002625f, -0.002421f, -0.003652f, +0.002209f, -0.001563f, +0.000528f, +0.002603f, + +0.003098f, +0.000604f, -0.000428f, -0.000120f, -0.002665f, +0.001893f, -0.000607f, -0.002961f, -0.003718f, -0.003545f, + +0.000087f, -0.000672f, -0.001202f, -0.003049f, +0.001296f, -0.000088f + }, + { + +0.003907f, -0.319354f, +0.009422f, -0.008483f, -0.007520f, +0.049822f, -0.060413f, +0.002330f, +0.011275f, -0.011170f, + -0.014644f, +0.013502f, -0.019363f, +0.001389f, -0.003410f, -0.015411f, +0.005839f, +0.051284f, -0.010534f, +0.005244f, + -0.002478f, +0.011675f, +0.007644f, -0.004726f, -0.027722f, +0.012847f, +0.000159f, -0.008953f, -0.032454f, -0.012588f, + +0.008170f, -0.009519f, +0.004517f, -0.010367f, +0.017089f, +0.020057f, +0.000073f, -0.011691f, -0.006250f, +0.007726f, + +0.008331f, -0.006025f, +0.007879f, +0.005008f, -0.018875f, -0.007486f, -0.000091f, -0.004859f, +0.001360f, -0.011100f, + -0.005991f, -0.003920f, -0.001677f, -0.003791f, +0.010469f, -0.003422f, -0.007415f, +0.000703f, +0.001582f, +0.004705f, + -0.001605f, +0.002884f, +0.007135f, -0.000257f, +0.000525f, +0.004844f, +0.006091f, -0.004501f, +0.004257f, -0.000120f, + +0.000366f, -0.002782f, +0.010114f, -0.002859f, +0.002896f, +0.002483f, -0.001159f, +0.001352f, +0.000093f, +0.005953f, + +0.002078f, +0.000880f, -0.000430f, +0.001674f, +0.001371f, -0.000370f, +0.004093f, -0.000094f, -0.003230f, +0.000494f, + +0.000790f, -0.002876f, +0.001395f, -0.005016f, +0.001325f, +0.000148f + }, + { + -0.006293f, -0.044488f, +0.009727f, -0.001799f, +0.008008f, -0.004428f, +0.000265f, -0.001407f, +0.004078f, +0.000395f, + +0.016967f, -0.005538f, -0.012946f, -0.002017f, +0.052217f, -0.003707f, +0.021236f, +0.020253f, -0.022691f, -0.021211f, + +0.002227f, +0.022602f, +0.020372f, +0.019378f, +0.003267f, -0.025733f, +0.019089f, -0.002910f, -0.007256f, +0.006945f, + +0.001245f, +0.023586f, -0.010772f, +0.020014f, -0.007489f, -0.020756f, +0.015403f, +0.005778f, -0.014592f, -0.000399f, + +0.012724f, -0.010871f, -0.009149f, +0.001724f, +0.008262f, -0.000931f, -0.011064f, +0.009302f, -0.000218f, +0.007782f, + -0.003058f, -0.006376f, -0.002226f, -0.009284f, +0.001257f, -0.002944f, +0.004400f, +0.003520f, -0.002943f, +0.005302f, + -0.001205f, +0.012541f, +0.001854f, +0.005549f, -0.012193f, -0.004753f, +0.003129f, -0.004953f, -0.000668f, +0.001687f, + -0.003178f, -0.000521f, +0.005231f, +0.003017f, +0.001070f, -0.000663f, -0.001855f, -0.001463f, +0.001797f, -0.000295f, + -0.001873f, -0.002645f, -0.005646f, +0.001008f, -0.003897f, -0.000709f, -0.003974f, +0.001709f, -0.004362f, -0.001984f, + -0.001091f, -0.001664f, +0.000821f, +0.000802f, +0.003281f, +0.002238f + }, + { + +0.012152f, -0.203078f, -0.031865f, +0.027970f, -0.062166f, -0.048458f, -0.000394f, -0.008108f, -0.007677f, +0.011983f, + -0.018868f, -0.002203f, -0.001730f, +0.023475f, -0.014149f, +0.012554f, +0.035538f, +0.013090f, +0.024623f, +0.004355f, + -0.012954f, +0.009128f, +0.007650f, -0.001348f, -0.014473f, +0.004485f, +0.001233f, +0.023168f, -0.006489f, +0.011557f, + +0.014949f, -0.001737f, -0.001890f, +0.014304f, +0.007389f, -0.006959f, +0.009988f, +0.007009f, -0.009130f, +0.003435f, + -0.000692f, +0.007283f, -0.001448f, -0.007679f, -0.000093f, -0.007017f, +0.005768f, +0.013017f, +0.000120f, +0.004752f, + -0.009130f, -0.006766f, -0.006661f, -0.003549f, +0.006109f, -0.003475f, -0.013700f, +0.001440f, +0.002213f, +0.010005f, + +0.003046f, +0.006929f, +0.005909f, +0.006982f, +0.001624f, -0.002794f, -0.010512f, -0.000756f, -0.004888f, -0.002831f, + -0.002822f, +0.000287f, -0.000604f, -0.000789f, +0.004302f, -0.002724f, -0.003599f, -0.000190f, +0.001610f, -0.000703f, + +0.002781f, -0.000283f, +0.001308f, -0.001339f, -0.000790f, -0.002846f, +0.002537f, +0.000151f, +0.000353f, +0.000190f, + +0.002481f, +0.000704f, +0.001183f, -0.003902f, +0.000538f, +0.003258f + }, + { + +0.007618f, +0.084600f, -0.030316f, -0.010579f, +0.004988f, +0.003958f, -0.019354f, +0.011157f, -0.000771f, +0.016939f, + +0.002864f, -0.002671f, +0.006820f, +0.011982f, +0.150269f, -0.034845f, -0.010668f, +0.008734f, -0.027723f, +0.001622f, + -0.026058f, -0.010520f, +0.035223f, +0.000737f, -0.011992f, +0.033130f, -0.007011f, +0.015755f, -0.032104f, -0.007012f, + -0.015815f, -0.015875f, -0.000752f, +0.009569f, -0.010632f, +0.018867f, -0.005992f, -0.011776f, +0.006183f, -0.021000f, + +0.004317f, +0.008845f, -0.005478f, +0.008564f, +0.001929f, +0.005789f, +0.010049f, -0.010741f, -0.009474f, -0.001887f, + -0.002964f, -0.006656f, +0.011091f, +0.003890f, +0.007808f, +0.010233f, -0.010294f, +0.003491f, +0.002482f, -0.000261f, + -0.001413f, -0.001435f, +0.002704f, -0.000434f, -0.005275f, +0.002577f, -0.001937f, +0.008055f, +0.003244f, +0.004148f, + -0.004521f, +0.001949f, -0.001640f, +0.003525f, +0.001889f, +0.000156f, -0.001798f, -0.001498f, +0.000285f, +0.002705f, + -0.000675f, -0.001677f, -0.000332f, +0.000836f, -0.002194f, -0.000148f, +0.002765f, -0.002596f, -0.005582f, +0.004012f, + -0.000697f, +0.002220f, -0.003405f, -0.001119f, +0.003297f, -0.001739f + }, + { + -0.023947f, -0.193677f, -0.013113f, -0.039710f, -0.006410f, -0.009431f, +0.022247f, +0.022748f, +0.027241f, -0.037135f, + +0.019020f, +0.020544f, +0.014426f, -0.040227f, -0.105046f, +0.000157f, +0.051065f, -0.003654f, +0.051023f, -0.000462f, + -0.036403f, +0.024870f, +0.027680f, +0.020675f, -0.021980f, -0.011100f, -0.017072f, +0.014432f, +0.003640f, +0.026619f, + -0.003882f, -0.008177f, +0.000067f, +0.032289f, +0.007464f, +0.008727f, +0.000737f, +0.008949f, +0.020763f, +0.003278f, + -0.006829f, -0.013735f, -0.007526f, +0.020338f, -0.005805f, +0.001739f, +0.008820f, +0.001674f, +0.002064f, +0.010927f, + +0.010661f, +0.004283f, +0.001290f, +0.000112f, +0.004493f, -0.007087f, -0.011340f, -0.008603f, -0.002895f, -0.002044f, + -0.000634f, -0.008651f, -0.000328f, -0.002833f, +0.001586f, -0.007018f, -0.004816f, -0.001465f, -0.007595f, +0.002447f, + -0.003282f, -0.006583f, -0.001162f, +0.002590f, +0.003545f, +0.001738f, -0.003235f, +0.003406f, +0.000005f, +0.000556f, + +0.003342f, +0.002176f, +0.002258f, +0.001153f, +0.002623f, +0.001015f, +0.002997f, +0.000301f, -0.003102f, -0.003182f, + +0.000206f, -0.001544f, +0.003005f, -0.000484f, +0.003212f, -0.001661f + } + }, + { + { + -0.000203f, -0.139800f, +0.002357f, +0.018682f, +0.000826f, -0.008412f, -0.004587f, +0.002304f, -0.005642f, +0.008867f, + -0.020724f, -0.032019f, +0.026152f, -0.014086f, -0.025398f, -0.028038f, -0.007870f, -0.005324f, +0.034094f, -0.001054f, + -0.009047f, +0.010007f, -0.002240f, +0.011038f, -0.005096f, +0.000352f, -0.003615f, -0.016477f, +0.006436f, +0.006252f, + +0.010935f, +0.006972f, +0.011056f, -0.009664f, -0.008208f, -0.003240f, +0.000062f, -0.011238f, +0.016498f, -0.007562f, + -0.004746f, -0.001001f, +0.003087f, +0.000194f, -0.006787f, +0.004944f, +0.019762f, -0.012465f, -0.007334f, -0.008819f, + +0.005253f, +0.005076f, -0.000615f, +0.019209f, +0.006285f, -0.000334f, +0.004199f, -0.009903f, -0.001369f, +0.001243f, + -0.001433f, +0.011882f, +0.005524f, +0.006805f, +0.001867f, +0.002794f, -0.002199f, -0.003124f, +0.000331f, +0.011709f, + +0.004962f, +0.004874f, +0.001059f, +0.002785f, +0.003942f, +0.003246f, -0.000205f, +0.001357f, +0.003034f, +0.002725f, + -0.000843f, +0.001253f, +0.002103f, -0.000687f, +0.001929f, -0.000464f, +0.003527f, -0.001450f, -0.001456f, -0.002844f, + +0.001707f, +0.002557f, +0.002394f, -0.003097f, -0.001888f, -0.000682f + }, + { + -0.017301f, +0.588153f, +0.055606f, +0.070844f, +0.014476f, -0.013777f, -0.027724f, -0.013629f, -0.016464f, -0.005166f, + -0.049686f, +0.016691f, +0.019986f, -0.028178f, -0.008048f, -0.005224f, +0.028453f, +0.013555f, +0.010254f, +0.010091f, + +0.005692f, -0.010117f, +0.000509f, +0.025760f, +0.006935f, -0.002659f, -0.022505f, +0.012981f, -0.013317f, +0.010373f, + -0.003207f, -0.014118f, +0.003453f, -0.017153f, +0.000979f, -0.002590f, +0.009605f, -0.004458f, +0.000374f, -0.003141f, + +0.004317f, +0.003748f, -0.010537f, +0.005313f, -0.011182f, +0.000624f, -0.006139f, -0.006465f, +0.007347f, -0.006346f, + -0.005763f, -0.001908f, +0.003722f, +0.000817f, -0.004167f, -0.002345f, -0.005435f, -0.003006f, +0.002640f, -0.000047f, + +0.008807f, -0.006485f, +0.007858f, +0.013777f, -0.000062f, -0.002030f, +0.005355f, -0.000272f, +0.006575f, +0.000828f, + -0.002255f, -0.001838f, +0.000552f, +0.003066f, +0.000832f, -0.001469f, +0.001739f, +0.000534f, -0.000368f, -0.000813f, + +0.002812f, +0.000830f, -0.007210f, +0.001132f, -0.000010f, +0.000005f, -0.001350f, +0.001566f, +0.001263f, +0.002033f, + +0.001225f, +0.000160f, +0.001947f, +0.000019f, +0.000051f, -0.000440f + }, + { + +0.013268f, +0.054696f, -0.074955f, -0.038944f, +0.007227f, +0.012014f, -0.014427f, -0.005184f, -0.007275f, +0.019718f, + -0.010226f, -0.010408f, -0.015801f, -0.007864f, +0.016049f, -0.000194f, -0.009297f, +0.034195f, -0.021976f, +0.006128f, + -0.006474f, -0.012273f, -0.023105f, +0.013412f, +0.006192f, -0.007290f, -0.002540f, +0.001863f, -0.008605f, -0.012856f, + +0.011080f, +0.006902f, -0.005725f, +0.003463f, -0.003287f, -0.008887f, +0.034334f, +0.016892f, +0.016464f, -0.010955f, + -0.009899f, +0.009799f, -0.000554f, -0.002353f, +0.011460f, -0.004112f, -0.018922f, +0.014598f, -0.000906f, +0.003989f, + +0.006356f, -0.004481f, +0.000713f, +0.002620f, -0.001646f, +0.010125f, +0.003674f, +0.002722f, -0.000510f, +0.000530f, + -0.000512f, -0.003559f, -0.000209f, +0.002507f, -0.002443f, +0.006748f, -0.001208f, -0.011437f, +0.000657f, -0.008184f, + +0.002563f, -0.002277f, +0.003147f, +0.006389f, +0.006364f, +0.002915f, -0.000871f, +0.001304f, -0.004056f, -0.005614f, + -0.000736f, +0.001665f, -0.001057f, +0.001059f, +0.000332f, -0.000711f, -0.000722f, +0.002774f, +0.000900f, -0.000890f, + -0.000560f, -0.002331f, +0.000144f, +0.001154f, +0.001863f, +0.001436f + }, + { + +0.003735f, +0.036371f, -0.004259f, +0.002013f, -0.001735f, +0.000949f, +0.003546f, -0.004430f, -0.004595f, +0.007687f, + -0.007972f, -0.001583f, +0.003065f, +0.003584f, +0.004833f, -0.035677f, +0.013075f, +0.013657f, +0.006279f, -0.026712f, + +0.030872f, +0.010084f, -0.019708f, +0.002319f, +0.003813f, +0.034410f, +0.021678f, -0.002205f, -0.000132f, +0.007285f, + -0.039832f, +0.029411f, -0.008584f, +0.015663f, +0.014417f, -0.003958f, +0.022689f, +0.000915f, +0.023177f, -0.001641f, + +0.010764f, -0.013273f, -0.001432f, -0.006316f, -0.005483f, +0.010589f, -0.005699f, -0.001440f, -0.005857f, +0.000769f, + +0.002651f, -0.003414f, +0.000440f, -0.006877f, +0.003409f, -0.007338f, -0.002711f, -0.010403f, +0.008017f, +0.005912f, + +0.000145f, +0.005867f, -0.000049f, +0.000237f, +0.003179f, +0.008171f, -0.000872f, -0.003637f, -0.006884f, +0.000722f, + +0.003045f, -0.003976f, -0.002291f, +0.001882f, +0.000348f, +0.000831f, -0.000400f, -0.000542f, +0.001553f, -0.003491f, + +0.002878f, -0.002080f, +0.000026f, +0.002720f, -0.000599f, -0.001458f, +0.000359f, +0.001319f, +0.001529f, -0.000098f, + +0.000929f, +0.000835f, +0.000351f, -0.001561f, -0.001606f, +0.001825f + }, + { + +0.053944f, -0.260097f, -0.037466f, +0.048352f, +0.022642f, -0.000634f, -0.011956f, -0.025621f, +0.012374f, -0.040070f, + +0.010817f, +0.042278f, +0.022260f, -0.005333f, -0.029035f, +0.016160f, -0.011470f, -0.036645f, +0.013267f, -0.030063f, + -0.001518f, -0.020724f, -0.009145f, +0.007456f, -0.017740f, +0.018566f, -0.002911f, +0.016748f, +0.012095f, -0.002005f, + -0.015131f, -0.005642f, -0.009489f, -0.002578f, +0.002170f, -0.005508f, +0.015575f, -0.023259f, +0.001605f, +0.008179f, + +0.009533f, +0.002317f, -0.006292f, -0.006873f, -0.007648f, -0.003053f, -0.005324f, -0.003823f, +0.013839f, -0.008310f, + -0.009486f, -0.002731f, +0.007204f, +0.001480f, -0.003292f, -0.007875f, +0.009689f, -0.005947f, -0.000044f, -0.006113f, + -0.008309f, +0.000142f, +0.002340f, +0.002420f, +0.001666f, -0.001186f, -0.002372f, -0.000488f, +0.001087f, -0.003070f, + -0.002806f, +0.001154f, +0.001259f, +0.001402f, -0.001290f, +0.001368f, +0.004544f, +0.000540f, +0.003612f, -0.007045f, + -0.001241f, +0.005230f, +0.000727f, -0.002220f, -0.001409f, +0.000490f, +0.002000f, -0.002729f, -0.002113f, -0.001203f, + +0.001383f, -0.001459f, +0.001312f, +0.002384f, +0.000316f, -0.000635f + }, + { + +0.000154f, +0.024230f, -0.003820f, -0.004378f, -0.000453f, +0.000798f, +0.002174f, +0.004617f, -0.001120f, -0.008753f, + -0.008907f, -0.011212f, +0.011607f, -0.009867f, -0.007242f, -0.006108f, +0.028167f, -0.015913f, +0.051038f, +0.000091f, + -0.005427f, -0.001155f, +0.010282f, +0.017640f, -0.042720f, -0.003562f, +0.023100f, -0.020851f, +0.011148f, -0.003538f, + +0.001187f, +0.024150f, -0.020888f, +0.010008f, -0.005520f, -0.008256f, -0.011455f, -0.010129f, -0.003390f, -0.002334f, + -0.001533f, +0.010071f, +0.003740f, +0.022345f, +0.003983f, +0.004642f, -0.006368f, -0.002674f, -0.017007f, +0.006935f, + +0.015781f, -0.003127f, +0.000966f, -0.011302f, +0.005474f, -0.005271f, +0.009561f, -0.001337f, +0.004750f, -0.000873f, + +0.002195f, +0.000404f, -0.002402f, -0.000425f, -0.000194f, +0.006289f, -0.004732f, -0.008523f, +0.002210f, +0.004565f, + -0.002688f, +0.002378f, +0.000020f, +0.002431f, +0.007067f, -0.001333f, +0.001553f, +0.002006f, +0.007575f, -0.004941f, + -0.002138f, +0.000801f, -0.000335f, -0.004353f, -0.000306f, +0.003235f, +0.001297f, -0.001062f, +0.001392f, +0.000963f, + -0.003023f, -0.000891f, +0.001787f, +0.003744f, -0.000156f, -0.001547f + }, + { + +0.063234f, -0.471319f, -0.026524f, +0.079025f, +0.010226f, +0.008015f, -0.009975f, +0.026044f, +0.007240f, +0.012160f, + +0.027952f, +0.005634f, -0.006821f, +0.015978f, +0.012233f, +0.012387f, -0.022174f, +0.008425f, +0.005190f, -0.035946f, + +0.030874f, -0.015861f, +0.003106f, +0.026648f, +0.032827f, -0.007984f, +0.002342f, +0.008870f, +0.010683f, +0.009068f, + +0.006283f, -0.004125f, +0.019335f, -0.000304f, +0.010264f, +0.002240f, +0.010656f, -0.007382f, -0.009582f, +0.006803f, + -0.005920f, +0.000940f, +0.001877f, +0.003871f, +0.013273f, +0.000889f, -0.011214f, -0.013523f, -0.004240f, -0.015475f, + -0.002161f, +0.004820f, -0.001351f, -0.013947f, +0.001373f, +0.008352f, -0.004356f, -0.010232f, -0.000103f, +0.003302f, + -0.001414f, +0.013492f, +0.000372f, -0.000727f, +0.007254f, +0.006605f, -0.003364f, -0.002697f, -0.000457f, -0.000569f, + -0.004562f, +0.001133f, +0.001454f, -0.001410f, +0.000525f, +0.002045f, -0.005139f, +0.000598f, -0.003501f, +0.003064f, + -0.000028f, -0.003753f, -0.000324f, +0.004231f, -0.004465f, -0.001093f, +0.000088f, +0.000901f, +0.000858f, +0.000929f, + +0.001130f, +0.000076f, -0.000963f, +0.000715f, +0.001572f, +0.001036f + }, + { + -0.001349f, +0.009490f, -0.022802f, +0.006382f, -0.004706f, -0.002312f, -0.001614f, -0.002325f, -0.000829f, +0.003028f, + -0.016100f, +0.009941f, -0.012263f, -0.013742f, -0.022537f, -0.026569f, +0.007709f, -0.002366f, -0.015489f, -0.003540f, + -0.025233f, -0.009211f, +0.032676f, +0.019508f, -0.018016f, +0.005767f, +0.001029f, -0.032331f, -0.028850f, +0.007381f, + +0.007203f, -0.014580f, -0.001863f, -0.002862f, +0.003794f, +0.016608f, -0.020957f, -0.023321f, +0.001428f, +0.006641f, + +0.001423f, -0.000316f, +0.013853f, -0.002885f, -0.003969f, +0.005961f, -0.007488f, +0.025985f, -0.007459f, +0.005336f, + +0.018579f, +0.005768f, -0.006498f, -0.001806f, -0.005831f, +0.002886f, +0.003338f, +0.007942f, -0.009042f, -0.006283f, + -0.001691f, +0.005297f, -0.002630f, +0.003086f, +0.004634f, +0.005283f, +0.002689f, -0.007067f, -0.000213f, -0.001862f, + +0.000226f, +0.000811f, +0.007647f, -0.004294f, +0.004348f, +0.000411f, -0.001165f, -0.001953f, +0.001533f, -0.001841f, + -0.001031f, +0.000581f, -0.002142f, +0.002009f, -0.001176f, +0.004387f, +0.001189f, -0.001715f, -0.002895f, +0.001782f, + -0.003346f, +0.001300f, -0.001902f, -0.000456f, -0.003453f, -0.002757f + }, + { + +0.125381f, -0.112987f, -0.078019f, +0.141806f, +0.024767f, +0.016266f, +0.029617f, -0.010539f, -0.036068f, -0.003640f, + +0.025630f, +0.005578f, -0.000804f, -0.009272f, -0.009198f, -0.005403f, +0.014462f, -0.054315f, -0.004948f, +0.019971f, + +0.003188f, +0.021564f, +0.001538f, -0.004008f, -0.003945f, +0.015026f, -0.001633f, -0.001508f, -0.011483f, +0.008351f, + +0.013914f, +0.003367f, -0.024933f, +0.013484f, +0.019872f, +0.012413f, +0.011995f, -0.020867f, -0.004675f, +0.012029f, + -0.005151f, +0.017822f, +0.010991f, -0.008320f, -0.015649f, +0.002660f, +0.014089f, -0.000534f, -0.007675f, -0.004660f, + +0.002283f, -0.005192f, -0.001588f, -0.008961f, -0.000871f, -0.000945f, -0.013849f, -0.004736f, +0.001644f, +0.004212f, + +0.006431f, +0.004894f, -0.006291f, -0.000081f, +0.001708f, -0.001384f, -0.001564f, +0.001039f, +0.001592f, -0.002186f, + +0.000102f, -0.000971f, +0.001954f, -0.000037f, +0.003454f, +0.001255f, +0.004810f, -0.000335f, +0.003935f, +0.000193f, + +0.004769f, -0.002216f, +0.002508f, -0.006701f, -0.000860f, -0.004805f, -0.002550f, +0.002437f, +0.003545f, -0.002759f, + -0.000859f, +0.000149f, -0.001551f, -0.000657f, -0.001595f, +0.000530f + }, + { + +0.005673f, -0.121000f, -0.021282f, +0.022683f, -0.007475f, -0.037450f, +0.003026f, +0.004176f, -0.006502f, +0.008113f, + -0.014254f, +0.014374f, -0.001027f, +0.014672f, -0.016171f, -0.001925f, -0.007025f, -0.022970f, -0.009781f, -0.003707f, + -0.019945f, -0.001915f, +0.011044f, +0.008575f, -0.008384f, -0.000722f, +0.015717f, +0.019138f, -0.009908f, +0.008376f, + -0.003931f, -0.003122f, +0.008562f, +0.002211f, -0.007674f, +0.006224f, -0.000960f, -0.001599f, -0.013766f, +0.008358f, + +0.018762f, -0.007542f, +0.000984f, +0.009213f, -0.017945f, -0.000193f, -0.004137f, +0.017484f, +0.012112f, -0.000817f, + +0.001307f, +0.005412f, +0.009429f, +0.001641f, -0.006374f, -0.001313f, -0.004580f, -0.003457f, +0.003251f, +0.007048f, + -0.000788f, +0.002175f, -0.008328f, +0.004802f, +0.000561f, -0.003050f, -0.001780f, +0.002961f, -0.002707f, +0.000414f, + -0.001085f, -0.000833f, -0.003093f, -0.002270f, +0.002239f, -0.004486f, +0.000216f, -0.002364f, +0.006144f, -0.000598f, + +0.001463f, -0.000181f, +0.000862f, +0.000531f, -0.003853f, +0.000962f, +0.000993f, -0.001649f, -0.002693f, -0.002233f, + -0.000489f, -0.000894f, -0.001028f, -0.002030f, -0.001417f, +0.001073f + }, + { + -0.013294f, -0.378256f, +0.073112f, -0.007170f, -0.004854f, -0.002392f, -0.003778f, -0.003125f, +0.008810f, -0.014266f, + +0.013598f, -0.038286f, +0.005150f, +0.000173f, -0.005778f, -0.012125f, +0.017040f, +0.027616f, -0.012896f, +0.024898f, + -0.003680f, -0.005405f, +0.010775f, +0.002485f, -0.015247f, +0.004073f, -0.008848f, +0.001146f, -0.024004f, -0.019052f, + +0.008250f, -0.020384f, -0.007290f, +0.006423f, +0.016778f, +0.015787f, +0.003383f, -0.003656f, -0.011234f, +0.000819f, + +0.003406f, +0.006656f, +0.006794f, +0.001997f, -0.015359f, -0.005736f, -0.001006f, -0.008001f, -0.002216f, -0.010994f, + +0.001197f, -0.003299f, +0.002189f, -0.003470f, +0.002232f, +0.007935f, -0.014017f, +0.009212f, +0.000072f, +0.001894f, + +0.001094f, +0.006468f, +0.004215f, +0.003580f, +0.001159f, -0.001689f, +0.006311f, +0.004636f, -0.001533f, +0.004279f, + -0.005042f, -0.002865f, +0.005599f, +0.004515f, -0.000116f, +0.002235f, -0.001295f, +0.004499f, +0.001680f, +0.005246f, + -0.001692f, -0.000194f, +0.000281f, +0.002651f, +0.001111f, +0.003660f, +0.000458f, -0.000045f, -0.001359f, -0.000513f, + +0.001661f, -0.001678f, -0.000381f, -0.005265f, +0.001272f, -0.001576f + }, + { + +0.006911f, -0.025357f, -0.017331f, -0.001801f, -0.011864f, +0.002375f, +0.004737f, -0.003083f, +0.001488f, +0.008111f, + +0.019976f, -0.008398f, -0.035766f, +0.027209f, +0.047186f, +0.009807f, +0.029316f, -0.008399f, -0.008570f, +0.019500f, + -0.025235f, +0.004216f, +0.060992f, -0.015806f, +0.014842f, -0.002204f, -0.020468f, +0.010110f, -0.012654f, +0.021919f, + +0.008248f, +0.014639f, -0.006977f, +0.025878f, -0.011739f, -0.015806f, +0.009497f, -0.000470f, +0.008106f, -0.008192f, + -0.003133f, -0.006509f, -0.002315f, +0.005407f, +0.000795f, +0.005198f, -0.008960f, +0.003871f, +0.006170f, -0.001746f, + +0.002823f, -0.007461f, -0.008954f, -0.011045f, +0.005364f, -0.000102f, +0.001328f, -0.002361f, -0.003076f, +0.000742f, + +0.008305f, +0.006252f, +0.009019f, -0.001485f, -0.007702f, -0.008821f, +0.003056f, -0.003408f, +0.000601f, +0.000148f, + -0.002114f, +0.002528f, +0.006039f, +0.002858f, -0.002981f, -0.001699f, +0.005392f, -0.003000f, -0.001878f, -0.000291f, + -0.001871f, +0.002488f, -0.005703f, -0.003801f, +0.000292f, -0.003004f, -0.002913f, +0.000183f, -0.001986f, -0.002913f, + -0.001158f, -0.003998f, +0.003836f, +0.000838f, +0.000329f, +0.000135f + }, + { + -0.053007f, -0.120464f, -0.019376f, +0.007141f, -0.041694f, -0.021962f, -0.031681f, +0.006793f, -0.002489f, -0.009406f, + +0.007344f, -0.009878f, -0.010347f, +0.010488f, -0.025446f, +0.036743f, +0.032130f, +0.033172f, +0.028724f, -0.012123f, + +0.007317f, -0.010455f, +0.013652f, +0.000717f, -0.019115f, +0.003250f, -0.004460f, +0.025131f, +0.027390f, -0.011631f, + +0.005980f, +0.017954f, -0.000563f, +0.005025f, +0.001527f, -0.003471f, +0.011374f, +0.009094f, -0.002972f, +0.000275f, + +0.004972f, -0.001317f, +0.005099f, -0.020783f, +0.003875f, -0.002261f, +0.005095f, +0.003645f, +0.005221f, +0.002214f, + -0.008743f, -0.009356f, +0.000427f, -0.000995f, +0.002524f, +0.002132f, -0.010596f, -0.000939f, +0.001210f, +0.005899f, + +0.006066f, +0.009163f, +0.004450f, +0.007866f, -0.001376f, -0.003795f, -0.013452f, -0.002257f, -0.000125f, -0.004751f, + -0.000462f, +0.000878f, -0.001496f, +0.003122f, -0.002588f, -0.004734f, +0.000644f, -0.001857f, +0.004256f, -0.005449f, + +0.003845f, -0.000973f, +0.000161f, +0.000120f, -0.001527f, -0.000005f, +0.001023f, -0.003576f, +0.004953f, +0.000152f, + -0.000310f, +0.000969f, +0.003076f, -0.003429f, +0.000258f, +0.004810f + }, + { + -0.010093f, +0.066302f, +0.000968f, -0.017596f, -0.005531f, -0.006829f, +0.013768f, -0.003806f, +0.013012f, +0.009991f, + +0.010723f, +0.007992f, -0.000731f, +0.069876f, +0.076557f, -0.054872f, -0.000964f, -0.002908f, -0.023838f, -0.001815f, + -0.014268f, -0.031341f, +0.035148f, +0.013919f, +0.003095f, +0.005125f, +0.020639f, -0.018440f, +0.006244f, -0.012234f, + -0.017398f, -0.026097f, +0.002089f, +0.006261f, -0.002124f, -0.002204f, -0.009554f, +0.007344f, +0.007868f, -0.009714f, + -0.015094f, +0.012668f, +0.007866f, -0.006069f, +0.009065f, -0.000119f, +0.003414f, -0.017961f, +0.007796f, -0.005536f, + -0.001012f, +0.004314f, -0.005700f, +0.012600f, +0.000834f, +0.011643f, -0.009055f, -0.000001f, +0.000334f, +0.004421f, + -0.000056f, -0.004287f, +0.003510f, -0.000953f, -0.007191f, +0.000037f, -0.001243f, +0.003600f, +0.004679f, +0.004531f, + -0.003552f, -0.002504f, -0.004395f, +0.005601f, +0.007562f, -0.001955f, -0.000802f, +0.001449f, -0.001141f, -0.002373f, + -0.000315f, -0.002210f, +0.002401f, +0.001091f, -0.000981f, +0.002786f, -0.005729f, +0.002337f, -0.001266f, -0.004533f, + +0.002837f, +0.001804f, -0.000281f, -0.002924f, +0.001343f, -0.002049f + }, + { + -0.008403f, -0.215667f, -0.037317f, -0.034671f, +0.009126f, -0.002344f, -0.005483f, +0.022951f, +0.017008f, +0.006823f, + -0.028121f, +0.029311f, +0.033201f, -0.026887f, -0.128842f, +0.028423f, +0.058664f, -0.013401f, +0.053174f, +0.000093f, + -0.001600f, -0.001815f, +0.024479f, +0.009692f, -0.014477f, -0.009301f, -0.023811f, +0.011380f, +0.011038f, +0.010576f, + +0.005421f, -0.016731f, +0.017806f, +0.012812f, +0.019781f, +0.016291f, -0.003191f, -0.003271f, +0.034045f, +0.002937f, + -0.025655f, +0.018267f, -0.010761f, +0.016841f, +0.009306f, -0.002507f, +0.004222f, +0.002390f, +0.007746f, +0.016996f, + +0.007492f, +0.000078f, +0.006796f, -0.003499f, +0.000189f, -0.004979f, -0.002711f, -0.004977f, -0.005735f, -0.002278f, + -0.005394f, -0.006613f, +0.004768f, -0.008460f, +0.002652f, -0.007896f, -0.001161f, -0.013781f, +0.001815f, -0.004677f, + +0.000509f, -0.006697f, +0.003176f, -0.001448f, +0.001764f, +0.008287f, -0.002088f, -0.000241f, +0.003652f, -0.002276f, + +0.006053f, +0.002102f, +0.003407f, -0.001314f, +0.003176f, +0.000435f, +0.002979f, +0.000585f, -0.004762f, -0.002542f, + -0.000505f, -0.002032f, +0.000742f, +0.002025f, -0.001309f, +0.002682f + } + }, + { + { + +0.000849f, -0.110880f, +0.027714f, -0.000013f, -0.004675f, -0.002802f, +0.000599f, +0.002926f, +0.018415f, +0.028952f, + -0.020988f, -0.044748f, +0.035435f, +0.002033f, -0.029991f, -0.021282f, +0.018644f, -0.018103f, +0.004079f, +0.021087f, + +0.011181f, -0.006977f, -0.017500f, +0.011579f, -0.013013f, -0.008470f, -0.002546f, -0.016948f, -0.007212f, -0.013717f, + +0.011217f, +0.005792f, +0.004577f, -0.005432f, -0.010086f, +0.003489f, +0.023690f, +0.015127f, +0.023749f, -0.003933f, + -0.001622f, -0.005691f, +0.007833f, +0.006991f, -0.005777f, -0.002210f, +0.011236f, -0.001734f, +0.000378f, -0.012445f, + +0.002503f, -0.004491f, -0.004460f, +0.007736f, -0.002236f, +0.005073f, +0.013226f, -0.004447f, -0.003656f, -0.007173f, + -0.001735f, +0.002821f, -0.001786f, +0.006246f, +0.000305f, -0.002821f, -0.006290f, -0.003983f, -0.008943f, +0.005783f, + +0.007642f, +0.003671f, -0.001376f, -0.000146f, -0.001231f, -0.000274f, -0.002504f, -0.001345f, +0.001616f, -0.002160f, + -0.002426f, +0.001412f, -0.002519f, -0.004336f, +0.001091f, +0.000055f, +0.003958f, -0.002141f, -0.001710f, -0.002269f, + -0.000429f, -0.001216f, +0.001309f, +0.000098f, +0.002071f, +0.000833f + }, + { + +0.021654f, +0.507075f, -0.057054f, +0.006284f, -0.010263f, +0.009384f, -0.013878f, +0.013801f, -0.000629f, -0.015144f, + -0.030314f, +0.039742f, +0.018104f, +0.005426f, +0.020806f, +0.016792f, +0.036163f, +0.001931f, +0.016778f, +0.028279f, + +0.016389f, -0.015311f, -0.019522f, +0.012784f, +0.013292f, +0.012499f, -0.019905f, +0.005535f, -0.027906f, +0.005239f, + +0.000946f, -0.006703f, +0.015308f, -0.006619f, +0.007606f, +0.001377f, +0.013105f, +0.001357f, +0.004763f, +0.007546f, + -0.004576f, -0.001396f, -0.009257f, +0.001283f, -0.013817f, +0.008116f, +0.002596f, +0.000706f, +0.015723f, -0.008156f, + -0.004587f, +0.002856f, +0.002323f, +0.007287f, -0.003255f, -0.008562f, -0.004855f, -0.007854f, -0.001374f, +0.002663f, + +0.007100f, -0.004297f, +0.004007f, -0.000942f, -0.002811f, -0.000787f, +0.000579f, -0.006112f, +0.000220f, -0.001770f, + +0.001785f, -0.000191f, -0.001357f, -0.000999f, +0.001050f, -0.002065f, -0.000630f, +0.001490f, +0.001559f, -0.000778f, + +0.000781f, +0.000412f, -0.006635f, +0.000324f, +0.000772f, +0.001179f, -0.000789f, +0.001619f, -0.001370f, -0.001354f, + -0.001413f, -0.001439f, +0.000240f, +0.000262f, +0.001559f, +0.001506f + }, + { + -0.011433f, +0.186330f, +0.046516f, -0.014047f, +0.011573f, +0.005854f, -0.015217f, -0.000283f, +0.008395f, +0.024140f, + -0.041825f, -0.008217f, +0.011925f, +0.004113f, +0.026533f, -0.000036f, -0.002046f, +0.031771f, -0.026973f, +0.030288f, + +0.022108f, -0.002413f, -0.014532f, +0.035940f, +0.035472f, +0.005835f, +0.005460f, +0.003375f, -0.004108f, -0.003781f, + +0.005086f, -0.009701f, -0.009473f, +0.005118f, -0.009778f, -0.008416f, +0.021527f, -0.001283f, +0.010370f, -0.008815f, + -0.014034f, +0.000247f, -0.004709f, -0.004337f, +0.005333f, +0.002181f, -0.014408f, +0.006616f, -0.003493f, +0.000337f, + +0.003109f, +0.001562f, +0.005233f, -0.000376f, -0.009385f, +0.005254f, +0.001283f, +0.000520f, +0.000282f, +0.006450f, + -0.000883f, -0.004801f, -0.001494f, +0.000202f, -0.004958f, +0.004578f, -0.005646f, -0.008811f, +0.007517f, -0.005965f, + +0.000236f, -0.004302f, +0.001663f, -0.000076f, +0.001286f, +0.000617f, +0.000395f, +0.006314f, -0.000663f, -0.001270f, + +0.001295f, +0.001008f, -0.003588f, +0.001299f, +0.001928f, -0.001692f, -0.001046f, +0.003105f, -0.001358f, -0.002949f, + -0.001286f, -0.001434f, +0.000084f, +0.000548f, +0.000681f, -0.000821f + }, + { + -0.002307f, +0.046511f, +0.004786f, +0.005313f, +0.002621f, -0.001756f, +0.000713f, +0.001033f, -0.003707f, +0.009816f, + -0.001743f, +0.001449f, +0.010855f, +0.007289f, +0.031692f, -0.010524f, -0.000130f, -0.025203f, -0.002022f, -0.014139f, + +0.028860f, +0.010398f, -0.020466f, +0.009098f, +0.013423f, +0.033267f, +0.008205f, -0.011755f, +0.003465f, +0.043498f, + -0.008334f, +0.026036f, -0.020897f, +0.004239f, -0.002067f, -0.027570f, +0.019581f, +0.015763f, +0.010079f, -0.011796f, + +0.010014f, -0.006813f, -0.004885f, -0.012795f, -0.008549f, +0.003284f, -0.008369f, -0.001723f, -0.018568f, -0.005151f, + +0.001943f, -0.007263f, +0.000693f, +0.001428f, +0.007010f, -0.006839f, +0.002154f, -0.004967f, +0.006538f, +0.001630f, + -0.000847f, +0.004348f, -0.002233f, +0.000626f, -0.002681f, -0.000197f, -0.000838f, +0.002744f, -0.003235f, -0.001738f, + +0.001245f, -0.004759f, -0.001433f, +0.000308f, +0.000246f, +0.001382f, -0.001962f, -0.001425f, +0.002660f, +0.000049f, + +0.006141f, -0.001987f, -0.001939f, +0.000994f, -0.002257f, -0.000315f, +0.000182f, -0.000411f, -0.000664f, +0.000106f, + +0.001612f, +0.000567f, +0.001509f, -0.002748f, -0.002787f, +0.000233f + }, + { + -0.043344f, -0.372667f, +0.004137f, +0.017157f, -0.019759f, +0.002358f, +0.002721f, -0.020064f, +0.033241f, -0.038122f, + -0.005638f, +0.026774f, +0.026311f, +0.014834f, -0.045147f, +0.001091f, +0.008640f, -0.028523f, +0.021957f, +0.010312f, + +0.013793f, -0.000437f, +0.015995f, +0.007039f, -0.018348f, -0.002010f, -0.017355f, +0.026462f, +0.020631f, -0.005508f, + -0.013474f, -0.008873f, -0.002003f, -0.005006f, -0.008515f, +0.007515f, +0.040806f, -0.024124f, +0.000694f, +0.002219f, + -0.003426f, -0.011683f, -0.006025f, -0.000010f, -0.003694f, +0.009006f, +0.002340f, +0.000136f, +0.016525f, -0.009673f, + -0.000289f, -0.005696f, -0.009111f, -0.005432f, +0.000915f, -0.001136f, +0.014666f, -0.003841f, +0.004366f, -0.003108f, + -0.002951f, +0.005795f, +0.002171f, +0.004752f, +0.005846f, -0.002376f, -0.000847f, -0.001199f, +0.004089f, +0.000551f, + -0.002306f, +0.000672f, -0.000071f, +0.002858f, -0.000932f, -0.001673f, +0.002593f, +0.004134f, +0.008256f, -0.002976f, + +0.000854f, +0.002961f, +0.000438f, +0.002538f, +0.000008f, +0.000359f, +0.002283f, -0.000037f, +0.002350f, +0.000402f, + +0.001331f, -0.001328f, +0.000302f, +0.002275f, +0.000929f, -0.001606f + }, + { + -0.003140f, +0.013381f, -0.006741f, -0.003732f, +0.000492f, -0.000522f, -0.000704f, +0.000931f, +0.001178f, +0.005825f, + +0.009521f, -0.003934f, +0.014454f, +0.029520f, +0.003535f, -0.011337f, +0.023574f, -0.034381f, +0.006512f, -0.025073f, + +0.008457f, +0.010529f, +0.010994f, +0.024296f, -0.008156f, +0.011139f, +0.008923f, -0.030005f, -0.009556f, -0.015347f, + +0.002140f, +0.022869f, -0.012436f, +0.012569f, -0.006091f, -0.010516f, -0.015743f, -0.014492f, +0.002883f, +0.007981f, + +0.002296f, +0.001407f, -0.007675f, +0.012963f, -0.000099f, +0.002015f, +0.001742f, +0.007714f, -0.017593f, +0.002813f, + +0.004079f, -0.014135f, -0.000549f, +0.002864f, +0.013017f, -0.007213f, +0.005554f, +0.003094f, +0.006109f, -0.001558f, + +0.002166f, +0.006727f, +0.008136f, +0.004212f, +0.001233f, +0.006545f, -0.003036f, -0.003440f, -0.003516f, +0.001359f, + -0.003869f, -0.002014f, +0.000329f, +0.003410f, +0.002699f, -0.004853f, -0.001399f, -0.001517f, +0.005948f, -0.002872f, + +0.000219f, +0.000346f, +0.001743f, -0.001848f, -0.001437f, +0.000325f, +0.002178f, +0.000251f, -0.000728f, +0.000413f, + -0.002212f, -0.000385f, +0.000179f, +0.001896f, -0.000611f, -0.000110f + }, + { + -0.027145f, -0.605965f, -0.009919f, +0.065256f, -0.028404f, +0.000445f, -0.019182f, -0.011194f, -0.023681f, -0.008053f, + -0.016638f, -0.011469f, -0.001735f, +0.017645f, +0.022736f, +0.004081f, -0.019314f, +0.019268f, +0.006133f, -0.018124f, + +0.048705f, +0.010937f, +0.011854f, +0.002624f, +0.007210f, -0.003919f, -0.003038f, -0.010483f, -0.009676f, +0.017663f, + +0.012731f, -0.007796f, +0.019010f, -0.006009f, -0.012308f, -0.011955f, +0.013206f, -0.005666f, -0.009246f, +0.002580f, + -0.008127f, +0.002422f, -0.000319f, -0.004141f, +0.005572f, -0.001356f, -0.009551f, +0.000032f, -0.002831f, -0.017559f, + -0.000112f, +0.009480f, +0.011795f, +0.001727f, +0.006301f, +0.006301f, -0.001044f, +0.002597f, +0.001199f, -0.000832f, + -0.000110f, +0.012393f, +0.005129f, -0.001937f, +0.002597f, +0.001166f, -0.005740f, -0.002309f, +0.002912f, -0.001452f, + -0.008559f, -0.001308f, +0.001675f, -0.002072f, +0.000308f, +0.002799f, -0.007655f, -0.002135f, -0.004971f, +0.001397f, + -0.000686f, -0.000338f, +0.001712f, +0.003238f, -0.001317f, +0.000988f, -0.000444f, -0.002167f, -0.001058f, +0.000058f, + -0.000202f, -0.001256f, -0.001194f, +0.000538f, +0.001669f, +0.001146f + }, + { + -0.002870f, +0.006005f, -0.018208f, +0.002535f, -0.004978f, -0.001731f, -0.003274f, +0.000295f, +0.008065f, +0.009093f, + -0.005698f, +0.013428f, -0.021509f, +0.001542f, +0.012013f, +0.010789f, +0.027973f, -0.000207f, +0.004409f, +0.018168f, + +0.003718f, +0.002871f, +0.035536f, +0.038063f, -0.011282f, +0.018479f, +0.031857f, -0.033019f, -0.023285f, +0.033143f, + -0.001523f, -0.024047f, +0.007002f, +0.002971f, +0.019951f, +0.021813f, -0.024210f, -0.023779f, +0.006188f, -0.010253f, + -0.021043f, +0.004937f, +0.014781f, +0.002882f, +0.002521f, +0.004389f, -0.022195f, +0.013872f, +0.004949f, +0.010739f, + +0.008335f, -0.002872f, -0.001396f, +0.002052f, -0.010389f, +0.000458f, -0.003161f, -0.000997f, -0.003321f, -0.002469f, + -0.004160f, -0.000942f, -0.012828f, -0.001109f, -0.001202f, +0.000735f, +0.004128f, -0.002150f, -0.002419f, -0.001265f, + +0.004681f, -0.003946f, +0.003181f, -0.003318f, +0.002890f, +0.001229f, -0.000236f, -0.001267f, +0.005057f, +0.001876f, + +0.001687f, -0.000062f, -0.004747f, +0.002451f, -0.000522f, +0.003991f, +0.001043f, -0.000488f, -0.002726f, -0.001875f, + -0.003169f, +0.002732f, -0.002216f, +0.002567f, +0.000791f, -0.000122f + }, + { + -0.135615f, -0.330402f, +0.039433f, +0.099226f, -0.043485f, -0.012640f, +0.016292f, +0.001075f, -0.033205f, -0.010904f, + +0.006611f, +0.018917f, +0.030057f, +0.025408f, +0.019023f, -0.008377f, -0.011178f, -0.052393f, -0.003051f, +0.014227f, + -0.012692f, +0.013919f, -0.006509f, -0.012716f, -0.018700f, +0.000781f, -0.010010f, +0.008405f, -0.003506f, -0.004292f, + -0.005495f, -0.000248f, -0.014867f, +0.008873f, +0.008376f, +0.007222f, +0.016775f, -0.001136f, +0.003545f, +0.014030f, + -0.008770f, +0.003978f, +0.009737f, -0.000140f, +0.001673f, +0.009797f, +0.003883f, -0.003359f, -0.000670f, +0.007077f, + +0.001705f, -0.008066f, +0.003684f, -0.002906f, -0.002085f, +0.008528f, -0.000766f, -0.001233f, +0.007665f, +0.003181f, + +0.000082f, +0.000892f, -0.007332f, +0.006926f, +0.008083f, +0.000090f, +0.001085f, +0.003881f, +0.007276f, +0.000595f, + -0.003160f, -0.000135f, +0.001138f, -0.002884f, +0.002276f, +0.001698f, +0.004153f, -0.002560f, +0.002140f, -0.003567f, + +0.001818f, -0.001970f, +0.001930f, -0.006962f, +0.002828f, -0.000189f, -0.000782f, +0.000843f, +0.001106f, -0.001982f, + +0.000932f, +0.000387f, -0.001808f, +0.000165f, -0.001263f, -0.000506f + }, + { + -0.007286f, -0.115691f, -0.003296f, +0.012555f, -0.015207f, -0.036172f, -0.007574f, -0.006620f, -0.014103f, +0.013711f, + +0.012813f, +0.031851f, +0.002598f, -0.005806f, -0.036475f, +0.010210f, +0.005821f, -0.021677f, -0.015642f, -0.006478f, + -0.008099f, +0.019387f, +0.007071f, -0.005661f, +0.004726f, +0.005473f, +0.004182f, +0.004111f, -0.008619f, +0.006967f, + -0.008159f, -0.009413f, -0.001395f, +0.002094f, -0.017370f, -0.000217f, +0.002107f, -0.008008f, -0.014021f, +0.022527f, + +0.030160f, -0.001324f, +0.003527f, -0.001026f, -0.019170f, +0.011210f, -0.003664f, +0.005108f, -0.003969f, -0.019345f, + -0.002396f, +0.001526f, -0.005911f, -0.007914f, -0.000752f, +0.001798f, -0.006326f, -0.009321f, -0.007757f, -0.005692f, + -0.002928f, +0.011086f, -0.004363f, -0.001869f, -0.004339f, -0.001813f, -0.002377f, -0.003209f, -0.001645f, +0.001925f, + -0.005594f, -0.002249f, +0.001148f, +0.000379f, +0.003644f, -0.002440f, +0.000896f, -0.004955f, +0.004493f, +0.002928f, + +0.003808f, +0.001219f, -0.000160f, -0.000018f, -0.003156f, -0.000316f, +0.002388f, +0.000229f, +0.002112f, -0.000771f, + -0.000956f, +0.000138f, +0.000932f, -0.001240f, -0.003151f, +0.000253f + }, + { + +0.024285f, -0.400620f, +0.031113f, +0.014887f, +0.049061f, -0.019851f, -0.015231f, +0.002116f, +0.020384f, +0.003165f, + +0.027621f, -0.033062f, +0.021033f, -0.001227f, -0.006711f, -0.007370f, -0.001485f, +0.003452f, -0.035285f, -0.013351f, + -0.030590f, -0.015340f, +0.013875f, +0.004038f, -0.012390f, +0.005809f, -0.000577f, +0.015202f, -0.009119f, -0.013864f, + -0.000639f, -0.010112f, +0.007335f, -0.002251f, +0.001102f, +0.010655f, +0.001292f, +0.000485f, +0.001284f, +0.005570f, + -0.004205f, -0.001539f, +0.007531f, +0.006028f, +0.002115f, +0.000792f, -0.002820f, -0.008434f, -0.003331f, -0.000161f, + +0.008993f, +0.001030f, +0.004062f, -0.005711f, +0.005577f, +0.015907f, -0.004725f, +0.013238f, -0.005502f, -0.000861f, + +0.002768f, +0.007097f, -0.001176f, +0.002509f, +0.008206f, -0.001670f, +0.003149f, +0.007700f, +0.000079f, +0.004632f, + -0.004704f, -0.007104f, -0.001635f, +0.000887f, -0.004013f, +0.000635f, -0.001458f, +0.006441f, +0.001359f, +0.004021f, + -0.002714f, -0.001453f, -0.000979f, -0.000927f, -0.002920f, +0.001961f, -0.001006f, -0.000932f, -0.000967f, -0.000548f, + +0.002208f, +0.000460f, +0.001959f, -0.000953f, +0.002885f, -0.001399f + }, + { + -0.006113f, +0.013834f, +0.025836f, -0.004911f, -0.022689f, -0.003543f, +0.006613f, -0.007921f, +0.000347f, +0.004796f, + +0.013804f, -0.004776f, -0.007064f, +0.032962f, +0.018903f, +0.028759f, +0.059000f, -0.005483f, -0.016169f, +0.022063f, + +0.005386f, +0.019006f, +0.028648f, -0.048115f, +0.004012f, +0.010775f, -0.033804f, +0.003739f, +0.016826f, +0.035680f, + +0.003565f, +0.005840f, -0.007108f, +0.018173f, -0.006755f, +0.005003f, +0.001546f, -0.019427f, +0.002500f, -0.006035f, + -0.003061f, -0.001397f, +0.001072f, +0.004274f, -0.002519f, +0.000394f, -0.001193f, +0.001282f, -0.011198f, -0.011839f, + +0.009015f, +0.000615f, -0.001998f, -0.004756f, +0.001075f, -0.005994f, -0.003792f, +0.003242f, -0.002635f, -0.004408f, + +0.006947f, +0.004149f, +0.000987f, -0.002290f, +0.004193f, -0.007402f, -0.001685f, -0.003151f, -0.003687f, +0.002738f, + +0.003898f, +0.004508f, +0.005863f, -0.002425f, -0.006033f, +0.001562f, +0.007807f, -0.001979f, -0.001526f, +0.001879f, + +0.002954f, +0.006987f, -0.004772f, -0.001682f, +0.003333f, -0.000432f, +0.000666f, -0.000628f, -0.001244f, -0.001328f, + +0.001258f, -0.001653f, -0.000442f, -0.003003f, -0.000307f, -0.003606f + }, + { + +0.072776f, +0.062798f, +0.001728f, +0.007249f, -0.025863f, +0.025536f, +0.013241f, +0.042790f, +0.011991f, -0.011787f, + -0.006076f, +0.013423f, +0.010003f, +0.015031f, -0.025208f, +0.052070f, +0.030542f, +0.001208f, +0.016177f, -0.025014f, + -0.009228f, -0.031273f, +0.000055f, -0.001343f, -0.024413f, -0.006723f, -0.014606f, +0.005777f, +0.015964f, -0.006799f, + +0.014656f, +0.009671f, -0.009167f, -0.011023f, -0.009387f, -0.004784f, +0.003913f, +0.009936f, -0.003685f, -0.010218f, + +0.014369f, -0.000060f, -0.001107f, -0.020186f, +0.009854f, +0.012940f, +0.003998f, -0.004043f, +0.002727f, +0.010488f, + -0.002262f, -0.009203f, +0.010234f, -0.006093f, -0.003641f, +0.005358f, -0.011983f, +0.001100f, +0.003477f, +0.001514f, + +0.001186f, +0.008088f, +0.002067f, +0.002820f, -0.001663f, +0.000489f, -0.009253f, -0.000406f, -0.002298f, -0.006644f, + +0.001569f, -0.000170f, -0.003443f, -0.001218f, -0.005881f, -0.002898f, +0.003706f, -0.000281f, -0.000616f, -0.006702f, + +0.003404f, -0.001334f, -0.000470f, -0.003102f, -0.003489f, -0.001110f, +0.000795f, +0.000267f, +0.005192f, -0.002627f, + -0.000510f, -0.000114f, +0.003429f, -0.002451f, +0.001134f, +0.003996f + }, + { + +0.012968f, +0.073737f, -0.008797f, -0.007196f, -0.005457f, -0.007892f, +0.007176f, -0.014363f, +0.010876f, +0.016425f, + +0.003595f, -0.004452f, -0.017002f, -0.110437f, -0.123622f, -0.036812f, -0.002074f, -0.002112f, +0.013280f, -0.004668f, + -0.036655f, -0.028207f, +0.028312f, +0.006302f, +0.027897f, +0.018267f, +0.015128f, -0.003080f, +0.026605f, -0.002317f, + -0.001292f, +0.001685f, +0.022632f, +0.002137f, -0.002410f, -0.013566f, -0.000795f, +0.017741f, +0.008540f, +0.007748f, + -0.019409f, +0.004102f, +0.007362f, -0.011719f, -0.003645f, -0.011656f, +0.001122f, -0.015666f, +0.012346f, -0.001483f, + -0.001840f, +0.006906f, -0.003728f, +0.003655f, -0.006570f, +0.008571f, -0.007382f, +0.000943f, -0.004413f, +0.001723f, + -0.004557f, -0.007862f, -0.002962f, -0.004684f, -0.007975f, +0.006453f, +0.003692f, -0.007808f, -0.005373f, +0.001510f, + -0.003907f, -0.002472f, -0.004151f, +0.000490f, +0.006649f, -0.000090f, +0.003691f, +0.001510f, -0.005833f, -0.002693f, + -0.001927f, +0.000268f, +0.005809f, +0.000449f, -0.000133f, +0.005851f, -0.001616f, +0.004873f, +0.000418f, -0.003744f, + +0.001197f, -0.001031f, +0.001071f, -0.001183f, +0.000584f, -0.000320f + }, + { + +0.041102f, -0.132478f, -0.024407f, -0.025884f, +0.014035f, +0.011579f, +0.007374f, +0.017197f, +0.001937f, +0.007411f, + -0.040152f, +0.016519f, +0.036663f, +0.052435f, -0.035869f, +0.022713f, +0.021508f, -0.024476f, +0.039573f, +0.008051f, + +0.000994f, -0.023393f, +0.004286f, -0.005327f, -0.009897f, +0.006209f, -0.010615f, -0.008507f, -0.010414f, +0.011489f, + +0.005118f, -0.026945f, +0.010570f, -0.003760f, +0.006834f, +0.009576f, -0.009428f, -0.004384f, +0.019011f, +0.002528f, + -0.013318f, +0.028212f, -0.004933f, +0.014125f, +0.008094f, +0.004616f, +0.007091f, -0.004821f, +0.001269f, +0.009343f, + -0.004874f, -0.004859f, +0.008088f, +0.005970f, +0.001537f, -0.004267f, +0.014650f, +0.004258f, -0.006406f, -0.001631f, + -0.005377f, -0.006102f, +0.010299f, -0.005956f, +0.001529f, -0.001254f, +0.009509f, -0.002152f, +0.005379f, -0.010299f, + +0.001095f, +0.000250f, +0.002549f, -0.003727f, +0.000712f, +0.010299f, +0.001406f, -0.000879f, +0.004370f, +0.000192f, + +0.009439f, +0.001827f, +0.000166f, -0.002910f, +0.001289f, -0.001909f, -0.001770f, -0.002474f, -0.003730f, -0.002863f, + -0.003565f, -0.001976f, -0.001045f, -0.001909f, -0.003375f, +0.003346f + } + }, + { + { + -0.000004f, -0.025128f, -0.028436f, -0.023789f, +0.002351f, +0.006887f, -0.003219f, -0.005129f, +0.014110f, +0.004486f, + +0.010925f, -0.020794f, +0.004335f, -0.005326f, -0.000368f, -0.030043f, -0.009654f, +0.017438f, -0.021662f, +0.036128f, + +0.013231f, -0.010535f, -0.017410f, -0.006901f, +0.009461f, -0.026033f, -0.014596f, -0.004728f, -0.018901f, +0.006185f, + -0.010964f, +0.018403f, -0.020265f, +0.008153f, +0.007557f, +0.018911f, +0.001491f, +0.014024f, +0.029141f, -0.005348f, + -0.002693f, -0.007742f, +0.006491f, +0.013280f, +0.000251f, -0.003629f, -0.005063f, +0.002933f, +0.003664f, -0.004029f, + +0.001962f, -0.011343f, +0.008597f, -0.002038f, +0.006582f, -0.003773f, +0.015236f, -0.003012f, -0.000621f, -0.008310f, + +0.000355f, -0.003863f, +0.000686f, -0.002657f, +0.002410f, -0.005994f, -0.007301f, -0.002792f, -0.002027f, +0.005352f, + -0.000043f, +0.002035f, -0.002177f, +0.002142f, -0.002170f, +0.001455f, -0.002742f, +0.001421f, -0.001294f, -0.002400f, + -0.001022f, +0.000771f, -0.002050f, -0.001781f, -0.001750f, -0.001128f, +0.004575f, -0.001944f, -0.001796f, -0.001206f, + -0.000049f, -0.000453f, -0.001246f, +0.001309f, +0.003567f, -0.000040f + }, + { + -0.025942f, +0.390884f, +0.063283f, -0.015332f, +0.023642f, -0.004843f, -0.012209f, +0.031390f, -0.013613f, -0.022891f, + -0.003834f, +0.040075f, +0.004986f, +0.012742f, +0.000353f, +0.030616f, +0.050716f, -0.013533f, +0.022828f, +0.030645f, + +0.004744f, -0.017294f, -0.020388f, +0.013833f, +0.014383f, +0.001269f, -0.013106f, +0.012420f, -0.016469f, -0.007873f, + -0.005729f, +0.011265f, +0.009597f, -0.006877f, +0.007917f, -0.003514f, +0.006063f, +0.020742f, +0.002337f, +0.015329f, + -0.009805f, +0.002984f, +0.001363f, -0.014773f, -0.001749f, -0.003517f, +0.000970f, +0.002713f, +0.016216f, -0.002856f, + +0.006183f, +0.007219f, -0.004073f, +0.008272f, -0.004688f, -0.009491f, -0.000099f, -0.011360f, -0.002138f, +0.008975f, + +0.003608f, +0.002776f, -0.001978f, -0.009684f, +0.005380f, -0.002368f, -0.003463f, -0.000798f, -0.000331f, -0.006614f, + +0.005024f, -0.000168f, -0.004110f, -0.000569f, +0.003392f, +0.000249f, -0.004762f, +0.003326f, +0.000970f, +0.002020f, + +0.000781f, -0.005230f, -0.000144f, -0.000481f, +0.000649f, +0.000090f, +0.001665f, -0.000237f, -0.002290f, -0.003311f, + -0.000380f, -0.000399f, +0.000518f, +0.000861f, +0.000961f, +0.000828f + }, + { + +0.008079f, +0.250663f, -0.014189f, -0.010798f, -0.010956f, +0.008573f, -0.008460f, +0.010705f, -0.002242f, +0.014980f, + -0.037509f, -0.032070f, +0.028621f, +0.030338f, +0.002638f, +0.002246f, +0.003558f, -0.007702f, -0.016141f, +0.035077f, + +0.013309f, +0.005858f, +0.009341f, +0.017002f, +0.034581f, +0.009464f, +0.011988f, +0.003264f, +0.012150f, -0.014326f, + +0.000158f, -0.009159f, -0.016742f, -0.003707f, -0.000394f, +0.004570f, +0.004971f, -0.001117f, +0.007794f, -0.000667f, + -0.006580f, -0.018690f, -0.002545f, +0.000744f, -0.003661f, +0.009850f, -0.001311f, -0.009503f, +0.006615f, -0.000956f, + +0.005311f, +0.007082f, -0.004560f, -0.000400f, -0.002448f, -0.000238f, +0.003342f, -0.001862f, +0.004856f, +0.002487f, + -0.002454f, -0.002952f, -0.002972f, -0.001219f, +0.002034f, -0.002135f, -0.010212f, -0.002161f, +0.001819f, +0.000954f, + -0.002738f, +0.000679f, +0.000302f, -0.001416f, +0.000873f, +0.000525f, +0.001901f, +0.004342f, +0.000266f, +0.002582f, + +0.000331f, -0.000397f, -0.001563f, +0.000877f, -0.001006f, -0.000219f, +0.000691f, +0.001628f, -0.002691f, -0.001458f, + -0.001483f, -0.001767f, +0.002259f, -0.000777f, -0.000403f, -0.001029f + }, + { + +0.001934f, +0.051356f, -0.002324f, +0.010588f, -0.002729f, +0.001445f, -0.003134f, +0.004349f, -0.006235f, +0.005028f, + +0.011092f, -0.005669f, +0.011114f, +0.009651f, +0.007158f, +0.033447f, -0.024282f, -0.028610f, +0.000148f, +0.005825f, + -0.004453f, -0.010887f, +0.005858f, -0.003006f, +0.023477f, +0.021505f, -0.004500f, +0.006805f, -0.015639f, +0.038788f, + +0.029098f, -0.003444f, -0.003714f, -0.007312f, -0.000009f, -0.016444f, +0.005411f, +0.022739f, +0.004133f, -0.009649f, + +0.007087f, -0.005358f, -0.013298f, -0.004186f, -0.014381f, +0.002860f, +0.002682f, -0.001213f, -0.025766f, +0.001311f, + +0.003594f, -0.011397f, +0.003883f, -0.000731f, +0.002020f, -0.002199f, +0.000393f, +0.005035f, +0.000556f, -0.000403f, + +0.001446f, +0.001767f, -0.002737f, +0.003910f, -0.005337f, -0.001680f, +0.002170f, -0.003341f, +0.001795f, -0.002015f, + -0.005296f, -0.000084f, -0.002085f, +0.000095f, +0.001207f, +0.001929f, -0.004066f, +0.000598f, +0.001366f, +0.002730f, + +0.003167f, +0.003059f, -0.005657f, +0.000208f, -0.002948f, +0.001240f, +0.000988f, -0.001504f, -0.000870f, +0.001781f, + +0.002085f, -0.000720f, +0.000421f, -0.001252f, -0.003840f, +0.000329f + }, + { + +0.016527f, -0.484179f, +0.021641f, -0.007141f, +0.008691f, -0.003008f, -0.000684f, -0.008572f, +0.023932f, -0.044448f, + +0.014450f, +0.015571f, +0.029702f, +0.005160f, -0.035665f, -0.005518f, +0.007836f, -0.035223f, +0.033397f, +0.014819f, + -0.006236f, +0.014241f, +0.014280f, +0.002735f, -0.009797f, -0.008528f, -0.014265f, +0.027227f, +0.008126f, -0.004139f, + +0.005773f, -0.030055f, +0.012218f, -0.016681f, -0.002963f, +0.005469f, +0.005087f, +0.022224f, -0.020758f, +0.006720f, + -0.001650f, -0.014164f, -0.003320f, -0.007499f, +0.004996f, +0.003364f, +0.012470f, -0.004541f, +0.018997f, -0.006334f, + +0.000667f, -0.003368f, -0.016411f, +0.002295f, -0.002930f, +0.004494f, +0.002278f, +0.006001f, +0.004401f, -0.004582f, + -0.002784f, +0.006511f, +0.004883f, +0.001200f, +0.008769f, -0.002557f, -0.007971f, +0.002295f, +0.004481f, +0.002108f, + -0.000250f, -0.001446f, +0.001717f, +0.001453f, -0.001016f, +0.000007f, +0.001281f, +0.002602f, +0.008083f, -0.001632f, + +0.002672f, +0.000057f, +0.001738f, +0.002055f, -0.000500f, +0.002105f, +0.000914f, -0.000453f, +0.003668f, +0.001216f, + -0.000980f, -0.000395f, -0.000003f, +0.000753f, +0.002051f, -0.000395f + }, + { + +0.000975f, -0.005453f, -0.002931f, -0.003807f, +0.003925f, +0.001015f, -0.002367f, +0.002940f, +0.001987f, +0.004150f, + +0.006520f, +0.008052f, +0.000339f, +0.021203f, -0.017606f, +0.025272f, +0.000150f, -0.008767f, -0.007526f, -0.004485f, + -0.001552f, +0.017437f, +0.007916f, -0.008401f, -0.002173f, +0.020063f, -0.011273f, -0.029919f, +0.008689f, -0.014469f, + +0.012605f, +0.009589f, +0.004206f, +0.002410f, -0.002527f, -0.012871f, -0.013312f, -0.008260f, +0.010235f, -0.005561f, + +0.009093f, -0.010971f, -0.005131f, +0.012443f, -0.002273f, -0.000391f, +0.003520f, +0.003795f, -0.007721f, +0.003194f, + -0.005139f, -0.004876f, -0.006382f, +0.013945f, +0.004625f, -0.005966f, +0.000585f, +0.010687f, -0.001414f, +0.009146f, + -0.001786f, +0.005250f, +0.012496f, -0.001350f, +0.004103f, +0.003639f, -0.002795f, -0.001066f, -0.003821f, +0.002150f, + -0.007113f, -0.003166f, +0.000141f, +0.004714f, -0.003236f, +0.000174f, -0.000828f, -0.004703f, +0.002160f, +0.000546f, + +0.002216f, +0.000108f, +0.000555f, +0.000538f, -0.000897f, -0.003025f, +0.000886f, +0.001559f, -0.000918f, +0.000122f, + -0.001516f, +0.000147f, +0.000893f, -0.000352f, -0.000333f, -0.000642f + }, + { + -0.025059f, -0.671750f, +0.040931f, +0.035155f, -0.004364f, -0.003652f, +0.000707f, -0.025909f, -0.018907f, -0.021093f, + -0.001606f, -0.004240f, +0.009794f, -0.028177f, +0.021465f, +0.017510f, -0.009334f, +0.033218f, -0.028054f, +0.009874f, + +0.013010f, +0.035419f, +0.011647f, -0.004481f, -0.004096f, +0.007651f, -0.013953f, -0.001583f, -0.014536f, +0.009583f, + +0.020012f, -0.001527f, -0.002385f, +0.010843f, -0.022720f, -0.013221f, +0.020419f, -0.009607f, -0.002566f, -0.012400f, + +0.006179f, +0.000676f, -0.002677f, -0.002408f, +0.002569f, -0.005777f, -0.015312f, +0.017853f, -0.016011f, -0.003242f, + +0.004918f, -0.000674f, +0.016137f, +0.005676f, +0.006511f, +0.000384f, +0.001693f, +0.005820f, -0.002235f, -0.000777f, + +0.001994f, +0.003559f, +0.011348f, -0.002274f, -0.001117f, -0.000911f, -0.001548f, -0.000893f, +0.004254f, -0.002468f, + -0.007715f, -0.003467f, +0.003126f, -0.000471f, -0.005463f, +0.000667f, -0.000632f, -0.003831f, -0.006971f, +0.004124f, + -0.003523f, +0.001980f, +0.003591f, -0.002269f, +0.003948f, +0.000833f, +0.002116f, -0.004417f, -0.000513f, -0.000022f, + -0.001645f, +0.001512f, -0.003055f, -0.001415f, +0.003406f, +0.000493f + }, + { + +0.000903f, -0.018697f, -0.002525f, -0.007544f, +0.001618f, +0.000474f, -0.002102f, +0.003036f, +0.002097f, +0.005664f, + +0.002626f, -0.000798f, -0.008870f, +0.005873f, +0.006116f, +0.034613f, +0.024660f, -0.025598f, +0.048946f, -0.031990f, + +0.030047f, +0.014466f, -0.006696f, +0.010715f, +0.015900f, +0.010748f, +0.025938f, -0.004822f, +0.011542f, -0.016169f, + -0.012318f, -0.011103f, +0.011097f, +0.024509f, +0.002067f, +0.009151f, -0.013444f, -0.004726f, -0.012938f, -0.012502f, + -0.009343f, -0.000353f, +0.009120f, +0.004546f, -0.004141f, +0.007525f, -0.009029f, -0.010576f, +0.019164f, +0.012513f, + -0.000783f, -0.004236f, +0.002811f, +0.001269f, -0.009364f, +0.005245f, +0.001016f, -0.010802f, +0.001768f, -0.001721f, + -0.007963f, +0.003292f, -0.014251f, -0.001583f, -0.002326f, +0.004989f, -0.006548f, +0.005645f, -0.000507f, -0.002483f, + +0.004837f, -0.002020f, -0.000289f, -0.001202f, -0.003923f, +0.003663f, +0.000257f, -0.000472f, +0.002177f, +0.003843f, + +0.000202f, -0.001333f, +0.000917f, -0.002820f, +0.003377f, +0.000084f, +0.001450f, -0.001696f, +0.002122f, -0.004897f, + -0.001639f, +0.000624f, -0.000538f, +0.001034f, +0.002453f, +0.001723f + }, + { + +0.120527f, -0.566917f, -0.038031f, +0.058110f, -0.016555f, -0.010939f, +0.003488f, -0.000168f, -0.010432f, +0.000496f, + -0.022734f, +0.037850f, +0.019077f, +0.046159f, -0.001927f, +0.008966f, -0.039558f, -0.012392f, -0.015968f, -0.001450f, + +0.002641f, +0.004502f, -0.010247f, -0.006364f, -0.013384f, -0.002585f, -0.012274f, +0.006390f, +0.003780f, -0.000471f, + -0.010493f, -0.002107f, -0.008885f, +0.015917f, -0.001233f, +0.003022f, +0.006450f, +0.022086f, +0.006298f, -0.007670f, + -0.005696f, +0.004152f, +0.010044f, -0.005905f, +0.004364f, +0.004899f, +0.005639f, +0.000479f, +0.000985f, +0.007876f, + -0.003820f, -0.011243f, +0.004720f, +0.003402f, -0.010763f, +0.010919f, +0.004676f, +0.002020f, +0.003379f, +0.004077f, + -0.002264f, -0.003464f, +0.006420f, -0.001795f, +0.006580f, +0.003540f, -0.000545f, +0.005258f, +0.004906f, +0.003093f, + -0.004195f, +0.000599f, +0.000822f, -0.001351f, -0.001328f, +0.000745f, +0.006575f, -0.002369f, +0.000245f, -0.002900f, + +0.000723f, +0.000007f, -0.001947f, +0.000654f, -0.001049f, +0.003648f, -0.000379f, -0.001132f, -0.002619f, +0.001350f, + +0.001602f, -0.001483f, -0.000691f, -0.002015f, +0.000351f, +0.001601f + }, + { + +0.008374f, -0.084784f, -0.043197f, +0.001593f, -0.015335f, -0.014135f, -0.017492f, -0.008318f, -0.009803f, +0.013869f, + +0.018482f, +0.016992f, +0.010542f, -0.021593f, -0.029352f, +0.014985f, -0.020803f, +0.004919f, +0.025030f, -0.070324f, + +0.021813f, +0.023728f, +0.012745f, -0.015428f, +0.019163f, -0.005210f, +0.009443f, +0.002690f, -0.008479f, -0.010899f, + -0.007846f, +0.006014f, -0.004703f, -0.004004f, -0.008104f, -0.008554f, +0.005546f, -0.004634f, -0.004742f, +0.006399f, + +0.025531f, +0.001850f, +0.008340f, -0.004598f, -0.006162f, +0.001274f, +0.002543f, -0.006530f, +0.004317f, -0.021062f, + +0.000585f, -0.000679f, -0.015250f, -0.003876f, -0.004697f, +0.006200f, -0.004832f, -0.000730f, -0.015800f, -0.005514f, + -0.000562f, +0.007386f, -0.001502f, -0.003725f, -0.004803f, +0.001433f, -0.000917f, -0.010189f, +0.004028f, -0.000256f, + -0.001752f, -0.007338f, -0.000360f, +0.003114f, +0.001304f, -0.002369f, +0.003350f, -0.000308f, +0.000038f, +0.001416f, + +0.000295f, +0.003541f, +0.003238f, -0.001700f, -0.001900f, -0.003323f, +0.003916f, -0.000323f, +0.003100f, -0.001348f, + +0.001211f, -0.002626f, +0.003870f, -0.003260f, -0.002427f, -0.000109f + }, + { + -0.033805f, -0.431365f, +0.105930f, +0.025498f, +0.054001f, -0.005442f, -0.004820f, -0.004308f, +0.020848f, -0.001701f, + +0.007841f, -0.000375f, +0.014191f, -0.009573f, -0.005412f, +0.009626f, -0.008824f, -0.011723f, -0.030678f, -0.002685f, + -0.046453f, -0.001791f, +0.001565f, +0.009830f, -0.016300f, +0.009713f, -0.010735f, +0.005193f, +0.004762f, +0.008916f, + -0.009347f, -0.006158f, +0.007573f, -0.007903f, -0.001458f, +0.003268f, +0.012754f, -0.000362f, +0.012231f, +0.000767f, + -0.007270f, -0.007464f, +0.004814f, -0.003253f, +0.006752f, +0.009762f, -0.003955f, -0.012950f, -0.005760f, +0.016851f, + -0.005672f, -0.000963f, +0.010622f, -0.007032f, +0.005487f, +0.004519f, +0.009893f, +0.008442f, -0.004269f, -0.005212f, + +0.005374f, +0.001541f, +0.005323f, +0.000437f, +0.006811f, -0.002961f, +0.000870f, +0.005017f, +0.004764f, +0.004515f, + -0.005494f, -0.006717f, -0.000958f, -0.000385f, -0.004342f, +0.002882f, -0.001288f, +0.005588f, -0.000145f, -0.000526f, + +0.000425f, +0.000931f, -0.004153f, -0.000083f, -0.003462f, +0.000655f, -0.000751f, -0.000103f, -0.001596f, +0.000345f, + +0.000602f, +0.001744f, -0.000123f, +0.001555f, +0.002317f, +0.000856f + }, + { + +0.005222f, +0.056425f, -0.008784f, -0.011672f, -0.010980f, -0.008659f, +0.005245f, +0.000788f, -0.009139f, +0.008273f, + +0.015103f, -0.011536f, +0.026412f, +0.003081f, +0.022820f, +0.004564f, +0.072040f, -0.018266f, +0.006883f, -0.013953f, + +0.007022f, +0.048945f, -0.029501f, +0.007968f, -0.029571f, +0.024428f, -0.026681f, -0.001734f, +0.019520f, +0.036046f, + +0.002801f, -0.014851f, +0.025618f, -0.004284f, -0.009459f, +0.017141f, -0.015741f, +0.007011f, -0.009652f, +0.000233f, + +0.001699f, +0.002534f, +0.003195f, -0.003302f, +0.005418f, -0.018615f, +0.010880f, +0.000715f, -0.009738f, -0.003147f, + -0.000411f, +0.001428f, +0.000211f, -0.000166f, -0.009687f, -0.011418f, -0.001269f, +0.009692f, -0.002607f, +0.004133f, + -0.000315f, +0.001824f, -0.000931f, -0.001606f, -0.000954f, +0.001008f, -0.006904f, +0.001563f, -0.004737f, +0.001401f, + +0.002143f, +0.003883f, +0.004693f, -0.005209f, +0.002382f, +0.004434f, -0.000956f, +0.004566f, -0.002585f, -0.002547f, + +0.007947f, +0.003760f, -0.002823f, +0.003467f, -0.001965f, +0.002990f, -0.001021f, -0.001256f, +0.001890f, -0.001847f, + +0.001155f, -0.000255f, -0.003545f, -0.001542f, +0.000529f, -0.004574f + }, + { + -0.053912f, +0.259795f, +0.000041f, -0.012490f, -0.026804f, +0.047868f, +0.007870f, +0.040483f, -0.027298f, +0.016350f, + -0.001890f, +0.022110f, -0.004837f, -0.003023f, +0.014450f, +0.035953f, +0.028918f, -0.001719f, +0.000733f, -0.013990f, + -0.020627f, -0.014175f, -0.017254f, -0.010919f, -0.010141f, -0.005613f, +0.007009f, +0.002384f, -0.017245f, -0.010804f, + +0.024005f, +0.009447f, -0.009352f, -0.007581f, +0.004733f, -0.013941f, -0.007278f, +0.001444f, +0.004586f, -0.009853f, + +0.014323f, -0.009580f, -0.006798f, -0.007363f, -0.001205f, +0.024935f, -0.005192f, -0.006765f, +0.004340f, +0.009594f, + +0.005626f, -0.013173f, +0.004057f, +0.003272f, -0.004950f, -0.003559f, -0.000772f, +0.003364f, +0.000866f, +0.001982f, + -0.002048f, +0.010521f, +0.002326f, -0.001059f, -0.001581f, +0.001151f, -0.006541f, +0.000044f, +0.001713f, -0.008173f, + -0.000227f, -0.000686f, -0.003241f, -0.000639f, -0.005255f, +0.000862f, -0.000254f, -0.000198f, -0.005621f, +0.000428f, + -0.001796f, +0.003407f, -0.001000f, -0.004511f, -0.001135f, -0.003031f, +0.001537f, +0.003773f, +0.002621f, -0.004876f, + +0.003440f, -0.001905f, +0.000880f, -0.000336f, +0.001482f, +0.001936f + }, + { + -0.013488f, +0.081782f, +0.013612f, +0.013230f, -0.018627f, +0.004213f, -0.010673f, +0.006566f, -0.005795f, -0.006316f, + +0.002702f, +0.006003f, -0.012232f, -0.075665f, -0.184234f, +0.006377f, -0.045958f, +0.023760f, +0.019086f, -0.068435f, + +0.024741f, -0.016969f, +0.008274f, +0.018924f, +0.003361f, +0.034777f, +0.002910f, +0.016251f, +0.013147f, +0.017197f, + -0.014704f, +0.006661f, +0.017768f, +0.008756f, -0.003114f, -0.032457f, +0.021335f, +0.015757f, -0.001643f, +0.010970f, + -0.010213f, -0.008821f, +0.009198f, -0.004911f, -0.012637f, -0.006387f, -0.001735f, -0.006704f, -0.002879f, +0.006036f, + +0.002194f, -0.003176f, +0.002982f, -0.006195f, +0.001184f, +0.005170f, -0.004729f, +0.005927f, -0.010265f, +0.001540f, + -0.006370f, -0.003915f, -0.007817f, -0.006800f, -0.001805f, +0.000269f, +0.007788f, -0.004759f, -0.006555f, -0.000081f, + -0.008558f, -0.001546f, +0.007208f, -0.004859f, +0.002906f, +0.003794f, +0.000620f, +0.001643f, -0.002688f, -0.000281f, + -0.004124f, +0.002272f, +0.002643f, -0.003364f, +0.003567f, +0.003841f, -0.000127f, +0.005954f, -0.000195f, -0.001458f, + -0.001913f, -0.002106f, +0.001009f, +0.002019f, -0.001137f, +0.002671f + }, + { + -0.055737f, -0.009783f, +0.008988f, -0.002457f, -0.028149f, +0.012964f, +0.011374f, +0.031829f, -0.003939f, -0.004484f, + -0.018706f, +0.017675f, -0.000739f, +0.010788f, +0.053842f, +0.025129f, -0.001045f, -0.008816f, +0.000965f, +0.028457f, + -0.009676f, -0.019302f, +0.009891f, -0.006328f, -0.020152f, +0.012802f, -0.011467f, -0.005130f, -0.001967f, +0.005049f, + -0.011998f, -0.007393f, -0.006177f, -0.003144f, +0.019387f, +0.010911f, -0.030311f, +0.017531f, -0.001928f, +0.008746f, + -0.013930f, +0.006381f, +0.008253f, +0.005407f, +0.006500f, +0.005724f, +0.013932f, -0.003758f, -0.002042f, -0.003083f, + +0.001202f, -0.005990f, +0.000105f, +0.016878f, -0.006737f, -0.008286f, +0.020098f, +0.004678f, -0.003305f, -0.005265f, + -0.008742f, +0.000370f, +0.007449f, -0.000478f, +0.001953f, +0.000176f, +0.005704f, +0.006935f, -0.005879f, -0.001480f, + +0.000379f, +0.002673f, -0.006120f, -0.002316f, +0.002718f, +0.005829f, +0.008042f, -0.003941f, +0.001928f, +0.005696f, + +0.002706f, +0.005923f, -0.002327f, -0.001251f, +0.001284f, -0.003591f, -0.001779f, -0.001486f, -0.003089f, -0.001411f, + -0.005439f, -0.000355f, -0.004460f, -0.001730f, -0.000187f, +0.001541f + } + }, + { + { + -0.001967f, +0.059869f, +0.030841f, -0.042580f, -0.018684f, +0.003712f, +0.002148f, -0.005977f, +0.005193f, +0.007183f, + +0.013423f, -0.010044f, -0.004284f, -0.027925f, -0.025414f, -0.052686f, -0.034978f, -0.004892f, -0.034498f, +0.016190f, + -0.009752f, +0.008980f, +0.010490f, -0.008229f, -0.012130f, -0.034905f, -0.019332f, -0.009749f, -0.016276f, +0.009049f, + -0.029144f, +0.002803f, -0.016131f, +0.012729f, +0.005385f, +0.022926f, +0.003056f, +0.005882f, +0.012637f, -0.009549f, + -0.002317f, -0.006745f, -0.000457f, -0.003741f, -0.002913f, +0.010014f, +0.000193f, +0.006061f, +0.007180f, +0.006286f, + +0.010866f, +0.002242f, +0.015648f, +0.000216f, +0.014597f, -0.003975f, +0.005346f, -0.006926f, +0.005095f, -0.004349f, + +0.003145f, +0.002625f, +0.003284f, -0.006567f, -0.001201f, -0.003551f, -0.004459f, -0.001996f, +0.004232f, +0.004790f, + -0.005883f, -0.003094f, -0.002577f, +0.006891f, +0.000089f, +0.003296f, -0.000374f, +0.002138f, +0.002646f, +0.000230f, + -0.002528f, +0.003388f, +0.003116f, +0.000506f, +0.000020f, +0.000337f, +0.003904f, -0.000471f, +0.000042f, -0.000784f, + +0.000496f, -0.001533f, -0.001587f, +0.002589f, +0.003667f, -0.001731f + }, + { + +0.032523f, +0.278998f, -0.066119f, -0.007358f, +0.010908f, -0.000649f, -0.013765f, +0.000384f, -0.038899f, -0.006645f, + +0.015056f, +0.024814f, -0.012249f, -0.010086f, +0.004708f, -0.012903f, -0.004407f, -0.006985f, +0.012958f, +0.012148f, + -0.005462f, -0.023542f, -0.023776f, +0.015386f, +0.007095f, -0.006856f, -0.002067f, +0.019596f, -0.004003f, -0.008076f, + -0.009648f, +0.018399f, +0.002305f, -0.022003f, +0.023940f, +0.015863f, +0.002514f, +0.009575f, -0.012564f, +0.010962f, + -0.006889f, +0.011959f, +0.004414f, -0.011209f, +0.012434f, -0.002982f, +0.005431f, +0.003869f, +0.009996f, +0.005535f, + +0.012982f, +0.015749f, +0.006247f, +0.013768f, +0.002678f, -0.004078f, +0.008551f, -0.000558f, +0.002202f, +0.009512f, + +0.005026f, +0.007354f, +0.000106f, -0.010404f, +0.004085f, -0.001355f, -0.004987f, -0.000871f, +0.005000f, -0.002400f, + +0.003406f, -0.000803f, +0.000263f, +0.004503f, +0.000995f, +0.001303f, -0.002487f, +0.001399f, +0.001194f, +0.003211f, + +0.001418f, -0.004389f, +0.002516f, +0.001446f, +0.000787f, -0.001791f, +0.002546f, +0.001941f, -0.001440f, -0.002277f, + +0.002919f, +0.001586f, +0.001137f, +0.003854f, +0.001283f, -0.002573f + }, + { + -0.003947f, +0.221195f, -0.043193f, -0.015932f, -0.008332f, +0.008594f, -0.008949f, +0.010120f, -0.013757f, -0.016587f, + -0.043415f, -0.039830f, +0.002519f, -0.001056f, -0.012559f, +0.008957f, -0.002707f, -0.017094f, -0.015486f, +0.005167f, + -0.014796f, -0.012729f, -0.005418f, +0.004389f, +0.031492f, +0.011267f, +0.004354f, +0.002637f, +0.012239f, -0.025197f, + -0.011276f, -0.003814f, -0.001489f, -0.007989f, -0.013923f, +0.001590f, +0.000652f, -0.011434f, +0.009918f, +0.011189f, + +0.002897f, -0.006826f, +0.007780f, +0.005985f, +0.002390f, +0.009558f, +0.004873f, +0.001508f, +0.013190f, +0.002649f, + +0.006069f, +0.003390f, -0.006484f, +0.003650f, +0.000356f, -0.006643f, +0.005193f, +0.002372f, +0.002627f, -0.003531f, + +0.000676f, -0.000989f, -0.001668f, -0.002695f, +0.007021f, +0.000753f, -0.007685f, +0.003078f, +0.004588f, +0.008479f, + +0.001699f, +0.001198f, +0.000879f, +0.002722f, +0.001647f, -0.002725f, -0.001780f, +0.001274f, +0.002687f, +0.003663f, + -0.000717f, -0.001884f, -0.001156f, -0.000033f, -0.002024f, +0.001141f, -0.000771f, -0.001363f, -0.001078f, +0.000827f, + +0.000709f, +0.000622f, +0.002286f, -0.001467f, -0.000633f, -0.001322f + }, + { + -0.001338f, +0.044481f, -0.003129f, +0.014685f, -0.001043f, +0.001503f, -0.000693f, +0.003793f, -0.008363f, +0.000284f, + +0.003523f, -0.015654f, +0.016627f, -0.006424f, -0.061584f, +0.001259f, -0.020177f, -0.017766f, -0.004779f, -0.009189f, + -0.027128f, -0.027096f, -0.003675f, -0.002089f, +0.020290f, -0.004317f, -0.016648f, +0.007686f, -0.019748f, +0.021493f, + +0.017057f, -0.002089f, +0.001721f, -0.011635f, -0.004838f, -0.002856f, +0.013549f, -0.007065f, -0.005306f, +0.000252f, + +0.004013f, -0.002207f, -0.013168f, -0.002328f, -0.004921f, +0.011601f, +0.010415f, +0.003920f, -0.006978f, +0.009535f, + +0.000035f, -0.013839f, +0.001332f, -0.002882f, -0.000396f, -0.003017f, -0.000311f, +0.007096f, +0.001803f, -0.003876f, + -0.004348f, +0.002574f, +0.000959f, +0.007197f, -0.003446f, -0.004120f, +0.001086f, -0.000901f, +0.002456f, -0.003926f, + -0.007208f, +0.002471f, -0.000294f, -0.000928f, -0.000890f, +0.000888f, -0.000470f, +0.003755f, -0.000189f, +0.001755f, + +0.000733f, +0.004264f, -0.002745f, +0.000962f, -0.002444f, +0.000075f, +0.000570f, +0.000256f, +0.000173f, +0.002866f, + +0.001428f, -0.001845f, +0.000708f, +0.001169f, -0.001273f, +0.000830f + }, + { + +0.020631f, -0.544589f, -0.018512f, -0.013048f, -0.004873f, -0.000194f, -0.003779f, -0.001673f, +0.028960f, -0.031043f, + +0.000487f, -0.010240f, +0.021500f, +0.004886f, -0.012910f, -0.009678f, +0.011416f, -0.027388f, +0.009015f, -0.016746f, + -0.019125f, +0.011265f, +0.007035f, -0.007771f, -0.016153f, -0.005303f, -0.028433f, +0.002371f, -0.009053f, +0.001458f, + +0.028181f, -0.015963f, +0.008540f, -0.019567f, +0.005644f, +0.009798f, -0.043340f, -0.012869f, -0.017386f, -0.003739f, + -0.014770f, -0.014707f, -0.000859f, -0.000218f, +0.003192f, +0.006337f, +0.012285f, -0.012297f, +0.014148f, +0.003639f, + +0.009662f, +0.003938f, -0.003893f, +0.009983f, +0.004398f, +0.002293f, -0.010331f, +0.005231f, +0.002315f, -0.000091f, + -0.000007f, +0.001219f, -0.000315f, -0.002432f, +0.009945f, +0.001488f, -0.011850f, -0.000733f, +0.004167f, +0.000327f, + +0.000148f, -0.001872f, -0.002650f, -0.001241f, -0.003020f, -0.003544f, -0.001053f, -0.001394f, +0.005086f, +0.001084f, + +0.003393f, -0.000787f, +0.002870f, +0.000689f, -0.003115f, -0.001993f, -0.001284f, -0.000496f, +0.001103f, -0.001346f, + -0.002188f, +0.000015f, -0.000277f, -0.003065f, +0.000727f, -0.000195f + }, + { + +0.002225f, +0.008703f, +0.003311f, +0.001196f, +0.006814f, +0.000252f, -0.000485f, +0.003279f, +0.003273f, +0.001918f, + +0.003559f, -0.001084f, -0.025696f, -0.031219f, -0.101872f, -0.000418f, +0.010524f, +0.003081f, -0.009022f, +0.016613f, + +0.023488f, -0.003749f, -0.022632f, -0.025018f, -0.019430f, -0.015017f, -0.018625f, -0.026295f, +0.021666f, -0.007969f, + -0.010939f, -0.015542f, -0.004414f, +0.021232f, +0.022983f, +0.007005f, +0.010131f, -0.001136f, +0.001829f, -0.018825f, + +0.006312f, -0.012259f, -0.012356f, +0.004672f, -0.004658f, -0.003456f, -0.002855f, +0.001293f, +0.004274f, +0.007461f, + -0.004654f, +0.003362f, -0.000453f, +0.011787f, +0.004524f, -0.004280f, +0.000655f, +0.012022f, -0.003143f, +0.007878f, + -0.006193f, -0.000611f, +0.008168f, -0.006656f, -0.001143f, -0.001641f, -0.004542f, +0.002703f, +0.000306f, -0.005671f, + -0.010000f, +0.001130f, -0.003854f, -0.001867f, -0.003676f, +0.003658f, +0.003208f, -0.004923f, -0.000853f, +0.000351f, + +0.000932f, -0.000261f, +0.000071f, +0.001133f, -0.001846f, -0.004085f, +0.000875f, +0.001755f, -0.001094f, +0.001219f, + +0.000427f, +0.000033f, -0.000092f, -0.001083f, +0.000130f, -0.000717f + }, + { + +0.080318f, -0.636161f, -0.045165f, +0.017000f, -0.002233f, +0.007073f, +0.014109f, +0.004157f, +0.003094f, -0.013441f, + -0.007674f, +0.000324f, +0.018041f, -0.050383f, -0.000224f, +0.011474f, -0.002365f, +0.035512f, -0.038729f, +0.003429f, + +0.011086f, +0.011379f, -0.006992f, +0.001091f, +0.004337f, +0.017367f, -0.005003f, +0.000098f, -0.011991f, -0.000234f, + +0.000294f, +0.001852f, -0.001309f, +0.004243f, -0.022085f, -0.002243f, +0.021387f, -0.013322f, +0.002417f, -0.011529f, + +0.010386f, +0.001328f, -0.000628f, -0.004420f, +0.004619f, +0.005578f, -0.018188f, +0.012652f, -0.004907f, +0.006030f, + +0.006174f, -0.003279f, +0.013184f, +0.005874f, +0.003245f, -0.000950f, +0.004827f, +0.010483f, +0.004071f, +0.001059f, + +0.000523f, -0.006216f, +0.007143f, +0.001414f, -0.004248f, +0.002209f, +0.005585f, +0.004140f, +0.002759f, +0.000611f, + -0.003351f, -0.003325f, +0.004904f, +0.000853f, -0.004839f, +0.001738f, +0.003715f, +0.000373f, -0.004954f, +0.005447f, + -0.004896f, +0.000271f, +0.004648f, +0.000431f, +0.002722f, -0.001209f, +0.003630f, -0.002121f, -0.000019f, +0.000185f, + +0.000317f, +0.002996f, -0.001719f, -0.001806f, +0.001917f, +0.001352f + }, + { + +0.002620f, +0.000722f, +0.009459f, -0.002107f, +0.002919f, +0.002269f, +0.001638f, -0.007853f, -0.007742f, +0.010364f, + -0.007370f, -0.000680f, +0.000009f, +0.018536f, -0.005557f, -0.004893f, -0.019631f, -0.068311f, +0.023913f, -0.063955f, + +0.003368f, -0.000021f, -0.006610f, -0.012985f, -0.005517f, -0.011523f, +0.008574f, +0.007674f, +0.011181f, -0.061075f, + -0.026406f, +0.009628f, +0.002541f, +0.026394f, -0.001382f, -0.001351f, -0.002778f, +0.013446f, -0.007600f, +0.003985f, + +0.007473f, -0.010073f, +0.004016f, +0.000512f, +0.000412f, +0.016358f, +0.003557f, -0.008787f, +0.003819f, +0.000352f, + -0.003527f, +0.005171f, +0.004710f, +0.004878f, -0.002418f, +0.006104f, +0.002429f, -0.013206f, +0.001789f, +0.004114f, + -0.005515f, +0.006895f, -0.006213f, +0.001606f, -0.001807f, +0.003000f, -0.008505f, +0.004395f, -0.003076f, -0.000437f, + +0.007489f, -0.001402f, -0.001588f, -0.001991f, -0.005366f, +0.001597f, -0.001511f, -0.001546f, +0.001771f, +0.004271f, + -0.001741f, -0.003633f, +0.002993f, -0.002358f, +0.003237f, -0.002383f, -0.000495f, -0.003709f, +0.002242f, -0.001037f, + +0.001289f, -0.000674f, +0.000050f, +0.000620f, +0.000135f, +0.001296f + }, + { + -0.080897f, -0.739112f, +0.049233f, +0.063673f, +0.001102f, -0.002372f, +0.012517f, +0.003736f, +0.012795f, +0.017160f, + -0.036974f, -0.010327f, -0.016589f, +0.031055f, -0.018217f, -0.001380f, -0.009335f, +0.020783f, -0.009438f, +0.000779f, + -0.008557f, -0.015449f, -0.005846f, +0.019613f, +0.013639f, +0.012027f, -0.006237f, +0.006662f, +0.008828f, -0.005041f, + -0.011019f, +0.011744f, -0.006175f, +0.012276f, -0.006911f, -0.006032f, -0.007573f, +0.013709f, +0.000975f, -0.021581f, + -0.016584f, -0.001483f, +0.001500f, -0.005756f, -0.001631f, -0.005070f, +0.013825f, +0.010140f, -0.007595f, -0.008294f, + -0.005247f, -0.008745f, +0.005839f, +0.006163f, -0.009979f, +0.007257f, +0.005120f, +0.006810f, +0.002611f, -0.000308f, + -0.003581f, -0.002245f, +0.007324f, -0.003638f, +0.001875f, -0.001313f, -0.000466f, +0.003354f, +0.001421f, +0.003200f, + -0.000945f, +0.003185f, -0.000258f, -0.003430f, -0.000650f, -0.001790f, +0.002167f, -0.000312f, +0.001982f, -0.000110f, + +0.002456f, +0.000012f, -0.000625f, +0.004271f, -0.002452f, +0.000879f, -0.001708f, -0.003106f, -0.001628f, +0.003895f, + +0.001776f, -0.001462f, -0.000877f, -0.003057f, -0.000401f, +0.003667f + }, + { + -0.008907f, -0.028148f, +0.019244f, -0.005860f, -0.027928f, +0.008389f, +0.008024f, +0.008022f, +0.004978f, +0.011274f, + -0.002151f, -0.007698f, -0.004970f, -0.045033f, -0.039265f, +0.004627f, -0.036250f, +0.025952f, +0.089757f, -0.027382f, + +0.001877f, -0.016698f, -0.011494f, -0.017552f, +0.033099f, -0.003021f, -0.002042f, -0.013061f, -0.012625f, -0.013748f, + -0.020796f, +0.003564f, +0.022319f, +0.014075f, +0.000087f, -0.006109f, +0.001781f, +0.024247f, +0.002091f, -0.023231f, + +0.007706f, -0.005499f, -0.000490f, -0.001632f, +0.011857f, +0.006749f, +0.006226f, -0.001420f, +0.009704f, -0.001694f, + +0.015089f, -0.002781f, -0.012141f, +0.000202f, -0.011444f, +0.009015f, +0.004589f, +0.000337f, -0.016216f, +0.004796f, + +0.006369f, +0.002593f, -0.001945f, -0.000858f, -0.002291f, +0.003744f, -0.001855f, -0.010943f, +0.007751f, +0.002573f, + +0.003884f, -0.006169f, -0.004338f, +0.002511f, +0.001548f, -0.001822f, +0.004515f, +0.000861f, -0.002208f, -0.002219f, + -0.000585f, +0.002481f, +0.003890f, -0.001487f, -0.001417f, -0.003005f, +0.002505f, -0.000687f, -0.000253f, -0.002506f, + +0.002614f, -0.000984f, +0.004975f, -0.002736f, +0.000697f, +0.002453f + }, + { + +0.039409f, -0.459045f, -0.003757f, +0.020210f, +0.009744f, +0.022951f, +0.034072f, +0.006016f, +0.006741f, -0.027334f, + -0.008626f, +0.023301f, +0.035180f, +0.020598f, +0.011192f, +0.007058f, -0.008607f, -0.001030f, -0.021067f, +0.013949f, + -0.031668f, -0.007264f, -0.009034f, +0.002603f, -0.011617f, +0.015683f, -0.025657f, -0.000382f, +0.009582f, +0.017995f, + +0.003942f, +0.004936f, +0.007250f, -0.015081f, -0.001733f, +0.005500f, +0.017326f, +0.001845f, +0.005906f, +0.004908f, + +0.006255f, -0.011911f, -0.008988f, -0.016326f, +0.000839f, +0.005421f, -0.008618f, -0.006688f, -0.005568f, +0.010935f, + -0.017566f, -0.014625f, +0.001423f, -0.001876f, +0.009074f, +0.002341f, +0.006883f, +0.003873f, +0.005131f, -0.003902f, + -0.007678f, -0.010520f, +0.003730f, +0.000347f, -0.000409f, -0.007079f, -0.003869f, -0.002689f, +0.004457f, +0.005375f, + -0.002403f, -0.001782f, +0.001580f, +0.003977f, +0.003525f, +0.002986f, -0.000592f, +0.001063f, -0.006665f, -0.001666f, + +0.002029f, +0.001086f, -0.005335f, +0.001620f, -0.001404f, +0.001384f, +0.000835f, -0.000168f, -0.002328f, +0.002077f, + +0.001736f, +0.001957f, -0.000563f, +0.001095f, +0.002790f, +0.001077f + }, + { + -0.004199f, +0.086956f, +0.020941f, +0.001038f, +0.017798f, +0.007116f, -0.000772f, -0.002474f, -0.008074f, +0.011171f, + +0.017834f, -0.015451f, +0.040597f, -0.012176f, -0.003977f, -0.030504f, +0.037184f, -0.012649f, +0.017870f, -0.032072f, + -0.006461f, +0.013736f, -0.026784f, +0.058725f, -0.029197f, +0.003214f, -0.006721f, +0.015868f, +0.006529f, +0.029684f, + -0.008999f, -0.024439f, +0.048660f, -0.006556f, -0.019990f, +0.015737f, -0.018320f, +0.026077f, +0.016983f, +0.026350f, + +0.018900f, -0.007070f, -0.000451f, +0.012942f, +0.011948f, -0.017656f, +0.007980f, +0.002273f, +0.009374f, +0.004425f, + -0.007115f, -0.001294f, +0.003300f, +0.001868f, -0.013917f, -0.007129f, +0.000850f, +0.002518f, -0.004037f, -0.000363f, + -0.006651f, -0.001607f, -0.000863f, +0.000792f, -0.005731f, -0.002005f, -0.006116f, +0.000023f, -0.002130f, +0.001346f, + -0.000652f, -0.000098f, +0.001957f, -0.002836f, +0.007246f, +0.006301f, -0.005899f, +0.003709f, -0.000259f, -0.002301f, + +0.006846f, +0.003393f, -0.000955f, +0.004956f, -0.002460f, +0.002530f, -0.000902f, +0.000026f, +0.003677f, -0.000668f, + +0.000603f, -0.000361f, -0.002154f, +0.001369f, +0.000816f, -0.002188f + }, + { + +0.002298f, +0.339212f, +0.002453f, +0.003012f, -0.022563f, +0.045461f, -0.030651f, -0.027328f, -0.067342f, -0.007661f, + -0.019460f, +0.012608f, -0.008771f, +0.000691f, +0.005060f, +0.010836f, +0.014855f, -0.007680f, -0.020343f, -0.001364f, + +0.010543f, -0.016068f, -0.030318f, +0.003594f, +0.018129f, +0.017583f, +0.019237f, -0.000520f, -0.024485f, -0.009586f, + +0.007032f, -0.006085f, -0.000152f, -0.002310f, +0.002019f, -0.003149f, -0.011288f, -0.015170f, -0.004144f, -0.019463f, + +0.001481f, -0.003659f, +0.006213f, +0.002513f, -0.012712f, +0.002052f, -0.006983f, -0.012344f, -0.006944f, +0.001512f, + +0.010462f, -0.009364f, +0.003559f, +0.012086f, -0.005269f, -0.000476f, +0.005995f, +0.010642f, -0.000927f, +0.002044f, + +0.005360f, +0.009135f, +0.000184f, +0.002652f, +0.004195f, +0.001943f, -0.004839f, +0.004082f, +0.009311f, +0.001380f, + +0.003498f, +0.000243f, +0.001130f, +0.003059f, -0.002287f, -0.000067f, -0.003716f, -0.003014f, -0.006375f, +0.006185f, + +0.001785f, +0.001194f, +0.000826f, -0.002618f, +0.001014f, -0.000094f, +0.001640f, +0.000848f, +0.001465f, -0.003967f, + +0.003673f, -0.001672f, +0.000447f, +0.000599f, +0.000424f, -0.000369f + }, + { + +0.012725f, +0.066439f, -0.022130f, +0.020092f, -0.004925f, +0.008762f, -0.020369f, -0.000386f, -0.018298f, -0.018650f, + -0.010526f, +0.002665f, +0.002309f, +0.046358f, -0.048192f, +0.013438f, -0.029056f, +0.010242f, -0.002876f, -0.028549f, + +0.063422f, +0.011040f, +0.002516f, -0.013353f, -0.029421f, +0.018194f, +0.027190f, +0.056331f, +0.004399f, -0.006684f, + -0.029561f, -0.003260f, -0.004350f, -0.009261f, -0.016086f, -0.022414f, +0.024066f, +0.004570f, -0.004458f, -0.003609f, + -0.015086f, -0.013056f, -0.003093f, +0.000456f, +0.001721f, +0.003189f, +0.002679f, -0.002020f, -0.009422f, -0.007117f, + -0.004463f, -0.003966f, -0.001185f, -0.003719f, +0.004719f, +0.000634f, -0.011346f, +0.004073f, -0.003353f, +0.001609f, + -0.001540f, +0.002025f, -0.001176f, -0.001677f, -0.000128f, -0.001282f, +0.003299f, -0.000862f, -0.000196f, +0.002812f, + -0.002482f, +0.007661f, +0.013327f, -0.004905f, -0.001263f, +0.005594f, -0.000237f, +0.000280f, +0.000535f, +0.002944f, + -0.004832f, -0.001531f, -0.000172f, -0.005875f, +0.000105f, +0.001352f, +0.000794f, +0.002982f, -0.004260f, -0.001227f, + +0.001927f, +0.002422f, +0.001131f, +0.001455f, -0.000777f, +0.000924f + }, + { + +0.044843f, +0.140038f, +0.006984f, -0.005066f, -0.025534f, -0.006134f, -0.002534f, +0.040641f, +0.009835f, -0.014887f, + +0.022482f, +0.042206f, -0.015513f, +0.019434f, +0.052829f, +0.021093f, +0.019417f, -0.000909f, -0.017293f, -0.000807f, + -0.030994f, -0.019961f, +0.005710f, -0.004997f, -0.006197f, -0.007801f, -0.018856f, +0.003162f, +0.007568f, +0.015643f, + -0.014475f, +0.007434f, -0.000020f, -0.005235f, -0.012237f, -0.015141f, -0.026275f, +0.015258f, -0.019523f, -0.004504f, + -0.013625f, -0.009677f, -0.008437f, -0.005588f, -0.000785f, +0.003539f, +0.000006f, -0.014023f, +0.005924f, +0.003935f, + +0.000338f, -0.003404f, -0.000094f, +0.011822f, -0.004606f, -0.009050f, +0.008352f, -0.002753f, -0.002581f, -0.002200f, + -0.001320f, +0.002526f, +0.005546f, -0.000947f, +0.002774f, -0.000011f, -0.001172f, +0.003401f, -0.003748f, +0.003248f, + -0.004529f, +0.001419f, -0.000067f, -0.000185f, +0.001205f, -0.002497f, -0.000634f, -0.003033f, +0.001391f, -0.001087f, + -0.003749f, +0.005082f, -0.001788f, -0.000727f, +0.000916f, -0.002794f, -0.000755f, +0.002575f, +0.001200f, +0.000519f, + -0.002281f, +0.002121f, -0.001473f, -0.001796f, -0.000215f, -0.000400f + } + }, + { + { + +0.003091f, +0.081387f, -0.002105f, -0.010578f, -0.028840f, +0.000940f, +0.001777f, +0.004029f, -0.008413f, +0.030725f, + -0.008660f, +0.014242f, -0.034273f, -0.001967f, -0.060902f, -0.021076f, -0.038038f, -0.027369f, +0.002537f, -0.002507f, + -0.009753f, -0.007624f, +0.008090f, -0.021772f, -0.002708f, -0.012313f, -0.031853f, -0.018806f, -0.024988f, +0.006013f, + +0.001438f, -0.008633f, -0.013809f, +0.012347f, -0.005559f, +0.021098f, +0.000934f, +0.019996f, -0.007098f, -0.004466f, + -0.011393f, +0.003005f, +0.006248f, -0.014070f, -0.008554f, +0.016067f, +0.009152f, +0.004453f, -0.002023f, +0.008696f, + +0.006024f, +0.004036f, +0.013453f, +0.007145f, +0.010178f, +0.004433f, -0.004819f, -0.003437f, +0.003143f, -0.002967f, + +0.004743f, +0.007401f, -0.002297f, -0.000800f, -0.001626f, -0.001410f, +0.000091f, -0.004468f, +0.003277f, +0.005048f, + -0.004469f, -0.003466f, +0.000379f, +0.008819f, -0.000588f, -0.000656f, +0.004241f, +0.000432f, +0.003573f, -0.000980f, + -0.000441f, +0.000950f, +0.003109f, +0.002259f, +0.001815f, -0.001372f, +0.001024f, -0.000385f, +0.001210f, -0.000353f, + +0.000262f, -0.001298f, -0.000285f, +0.002069f, +0.002705f, -0.001118f + }, + { + -0.036309f, +0.230435f, +0.021129f, +0.025687f, -0.009602f, +0.000046f, -0.001448f, -0.027572f, -0.019703f, +0.001712f, + +0.021069f, -0.010727f, -0.001285f, -0.018615f, +0.003506f, -0.043641f, +0.008123f, +0.013757f, +0.001099f, +0.003805f, + -0.010622f, -0.021659f, -0.018599f, +0.023068f, +0.000369f, +0.015254f, -0.003542f, +0.002646f, +0.005648f, -0.003560f, + -0.011633f, +0.004211f, +0.004710f, -0.019063f, +0.017094f, +0.018116f, -0.000547f, +0.012804f, -0.000098f, -0.005323f, + -0.006296f, +0.001049f, -0.001421f, +0.008259f, -0.004656f, +0.005814f, +0.002318f, +0.013279f, -0.000526f, +0.008935f, + +0.009685f, +0.009025f, +0.012803f, +0.013052f, +0.006988f, -0.006244f, +0.001812f, +0.004779f, +0.005154f, +0.012690f, + -0.003552f, +0.006703f, +0.004144f, -0.000825f, -0.004550f, +0.002402f, -0.006184f, +0.001487f, +0.003774f, -0.001221f, + +0.002513f, +0.000169f, +0.003130f, +0.001249f, +0.000582f, -0.000179f, +0.003518f, +0.000678f, -0.001150f, +0.001582f, + +0.000786f, +0.000946f, -0.000206f, -0.000024f, +0.000795f, +0.001072f, +0.001403f, +0.001642f, -0.000724f, +0.000104f, + +0.001020f, +0.001584f, +0.001015f, +0.003898f, +0.001209f, -0.002941f + }, + { + +0.000485f, +0.142915f, +0.012900f, +0.012008f, -0.024996f, +0.000188f, -0.005683f, +0.004916f, -0.007273f, -0.021421f, + -0.030361f, -0.030474f, -0.008641f, -0.000225f, -0.008646f, -0.006520f, +0.002711f, -0.009376f, +0.005378f, -0.029494f, + +0.008999f, -0.021457f, +0.009762f, -0.012429f, +0.005228f, +0.012621f, -0.001744f, +0.009353f, -0.003888f, -0.019758f, + -0.027677f, +0.015095f, -0.005816f, +0.003545f, -0.015972f, +0.001258f, -0.002868f, +0.000963f, +0.005822f, +0.011937f, + +0.001326f, -0.001565f, +0.015509f, -0.009034f, +0.004818f, +0.017308f, -0.000516f, +0.006049f, +0.012131f, -0.000906f, + +0.008680f, -0.002494f, -0.006356f, +0.004262f, +0.004124f, -0.008507f, +0.007184f, -0.003683f, +0.002284f, -0.004176f, + +0.008082f, -0.008223f, +0.005704f, -0.004461f, +0.005474f, +0.001588f, -0.001782f, +0.000288f, +0.004963f, +0.006121f, + +0.004520f, +0.000512f, +0.000582f, +0.002468f, +0.001577f, -0.003258f, -0.002339f, -0.001242f, +0.003321f, +0.001336f, + -0.001835f, -0.000505f, +0.001442f, +0.001152f, -0.002343f, -0.000381f, -0.000011f, -0.001632f, -0.000608f, -0.000006f, + +0.000600f, +0.001497f, +0.000670f, -0.001643f, +0.000321f, -0.000538f + }, + { + -0.000571f, +0.037839f, -0.001633f, +0.008792f, +0.007629f, -0.000867f, +0.002696f, -0.005183f, -0.003803f, -0.000307f, + -0.000278f, +0.001187f, +0.006800f, -0.015041f, -0.058775f, -0.023105f, -0.010176f, +0.017108f, -0.012600f, -0.026225f, + -0.026711f, -0.000076f, -0.027781f, -0.004023f, +0.024091f, -0.000020f, -0.013566f, -0.015596f, +0.009956f, +0.005643f, + +0.002518f, -0.012521f, +0.001957f, +0.021774f, -0.017734f, -0.010044f, +0.026842f, -0.017990f, +0.009626f, -0.008175f, + +0.002282f, +0.000035f, -0.011304f, -0.001677f, +0.000452f, +0.006470f, +0.002769f, -0.003559f, +0.018073f, -0.002167f, + +0.000405f, -0.005931f, -0.006448f, -0.000671f, -0.001447f, -0.002175f, -0.002167f, +0.007864f, -0.001464f, +0.002613f, + -0.004692f, -0.000342f, +0.006717f, +0.003706f, -0.004501f, +0.003155f, -0.000473f, -0.003212f, -0.001235f, +0.000730f, + -0.001430f, -0.004032f, -0.000437f, +0.001823f, -0.002247f, -0.001218f, +0.000682f, +0.005374f, +0.000638f, +0.000341f, + -0.000756f, +0.003537f, -0.000274f, +0.000378f, -0.000758f, -0.001524f, -0.000039f, -0.000914f, +0.002412f, +0.002747f, + -0.000658f, +0.000644f, -0.001442f, +0.001153f, +0.000719f, -0.000708f + }, + { + -0.057375f, -0.524580f, +0.028697f, +0.002278f, -0.006748f, -0.001346f, -0.005304f, +0.010560f, +0.005115f, -0.005109f, + -0.002848f, -0.004320f, +0.014050f, +0.000804f, -0.011296f, -0.031294f, +0.009397f, +0.011550f, -0.004410f, -0.023310f, + -0.015101f, +0.017000f, -0.016117f, +0.002324f, -0.009694f, -0.015906f, -0.017855f, -0.005576f, -0.016546f, +0.010638f, + +0.016817f, +0.002301f, -0.008016f, -0.009758f, +0.006565f, +0.008045f, -0.031201f, -0.030625f, -0.017918f, +0.002012f, + -0.010050f, -0.008519f, -0.007924f, +0.001232f, +0.000292f, +0.001855f, +0.012656f, -0.010444f, +0.007476f, +0.013735f, + +0.003651f, -0.001262f, +0.004501f, +0.010433f, +0.005345f, -0.002812f, -0.006104f, +0.004955f, -0.005074f, +0.004548f, + +0.000975f, -0.000802f, -0.001628f, -0.000103f, +0.003203f, +0.002483f, -0.006925f, -0.001237f, +0.003993f, +0.000424f, + -0.001128f, -0.003690f, -0.005389f, -0.000671f, -0.005793f, -0.001057f, -0.000810f, -0.000591f, +0.003074f, +0.001886f, + +0.000689f, +0.001210f, +0.001250f, +0.000900f, -0.000855f, -0.004078f, -0.000015f, +0.000405f, -0.002386f, -0.002207f, + +0.000477f, -0.001569f, +0.001138f, -0.003276f, +0.000525f, -0.001884f + }, + { + -0.001142f, +0.032121f, -0.004059f, +0.002456f, -0.000491f, +0.000456f, +0.001638f, -0.002538f, +0.007975f, +0.007849f, + -0.011193f, -0.003476f, -0.012784f, -0.055394f, -0.122561f, +0.023018f, +0.001753f, +0.000199f, +0.011903f, +0.020517f, + -0.006322f, -0.029939f, -0.000293f, -0.020400f, -0.025045f, -0.024170f, -0.003550f, -0.028974f, +0.018223f, -0.004994f, + -0.020189f, -0.002634f, -0.021628f, +0.024729f, +0.026565f, +0.007471f, +0.003003f, +0.000990f, -0.001811f, -0.000921f, + -0.007937f, -0.011244f, -0.007808f, -0.009469f, +0.007376f, -0.007163f, -0.000001f, +0.006807f, +0.003112f, -0.006667f, + +0.003667f, +0.001405f, +0.005269f, -0.000208f, +0.008434f, +0.003683f, -0.003418f, +0.011780f, +0.000130f, +0.004348f, + -0.009085f, +0.000143f, +0.003966f, -0.002744f, -0.003467f, -0.004726f, +0.004819f, -0.003432f, +0.001575f, -0.001088f, + -0.005166f, -0.001008f, -0.006653f, -0.006791f, -0.000208f, +0.000304f, +0.005989f, -0.001470f, -0.002967f, +0.004616f, + -0.000818f, -0.000891f, -0.000085f, +0.000249f, -0.003161f, -0.000172f, -0.001339f, +0.002552f, -0.000754f, +0.000324f, + -0.000032f, +0.000172f, -0.000358f, -0.001366f, +0.002110f, -0.001501f + }, + { + -0.122157f, -0.480561f, +0.029047f, +0.032963f, -0.003092f, +0.003405f, +0.007549f, -0.009667f, +0.018425f, +0.019627f, + -0.009524f, -0.007978f, -0.006493f, -0.024509f, -0.023473f, +0.009452f, +0.016037f, +0.012291f, -0.015130f, -0.001733f, + +0.010521f, +0.001539f, -0.016203f, +0.013262f, +0.008092f, +0.007050f, -0.002102f, +0.006422f, +0.001781f, -0.014928f, + -0.001528f, +0.010994f, -0.004869f, +0.000314f, -0.008404f, -0.006747f, +0.005774f, -0.013230f, +0.009990f, -0.001660f, + +0.003805f, -0.005046f, +0.010811f, -0.009618f, +0.009613f, +0.000992f, -0.008823f, -0.005099f, +0.005320f, +0.009216f, + +0.003984f, +0.014633f, -0.011005f, +0.004518f, +0.010782f, -0.003789f, +0.006557f, +0.007928f, +0.003240f, +0.001543f, + +0.000741f, +0.001545f, +0.000687f, +0.006973f, -0.004696f, +0.003287f, +0.000691f, +0.004629f, -0.001736f, +0.002104f, + +0.002652f, -0.002181f, -0.000981f, -0.001167f, +0.002300f, -0.000022f, +0.001484f, +0.002991f, -0.003092f, +0.002276f, + -0.002221f, -0.000369f, +0.002345f, +0.002174f, +0.001856f, -0.000420f, +0.002364f, +0.000321f, -0.000559f, -0.000170f, + +0.000125f, +0.000761f, +0.000348f, +0.000811f, +0.000278f, +0.003071f + }, + { + -0.000760f, +0.032893f, -0.013185f, +0.004698f, +0.000084f, +0.003938f, +0.002499f, +0.002773f, -0.014514f, +0.004307f, + -0.011834f, +0.005092f, +0.013202f, +0.003475f, -0.011451f, -0.018000f, -0.025698f, -0.029963f, -0.018131f, -0.041165f, + +0.009068f, -0.024590f, +0.015884f, -0.021340f, -0.003092f, +0.006119f, -0.001231f, +0.024384f, -0.023081f, -0.053406f, + -0.021385f, +0.014405f, -0.008009f, +0.025960f, +0.007350f, -0.006416f, -0.003975f, +0.020776f, -0.014153f, +0.011659f, + +0.016662f, -0.019590f, +0.011423f, -0.008120f, +0.006666f, +0.004622f, +0.007083f, +0.003389f, -0.010968f, +0.002753f, + -0.001890f, +0.014628f, -0.004344f, +0.007131f, +0.008048f, +0.003054f, -0.004403f, -0.005422f, -0.003327f, +0.001748f, + -0.001939f, -0.002301f, -0.000890f, +0.004015f, +0.001360f, -0.004370f, -0.002275f, +0.002521f, -0.003108f, -0.000245f, + +0.006028f, +0.000246f, -0.002851f, -0.000699f, -0.000785f, -0.003438f, +0.000257f, -0.000364f, +0.001194f, +0.003953f, + -0.002981f, -0.003879f, +0.003783f, -0.001844f, +0.001097f, -0.001814f, +0.000045f, -0.002593f, +0.000709f, +0.000497f, + +0.001428f, -0.001726f, +0.000202f, -0.000597f, +0.001544f, +0.000176f + }, + { + +0.025685f, -0.805313f, -0.017354f, +0.070208f, +0.012320f, -0.012268f, +0.017586f, +0.004167f, +0.013661f, +0.004836f, + +0.018685f, -0.060088f, -0.014604f, +0.014468f, +0.016017f, -0.039987f, +0.018917f, +0.016834f, -0.004505f, -0.004577f, + +0.002369f, -0.026276f, -0.003990f, +0.020506f, +0.014803f, +0.002069f, +0.003418f, +0.001864f, +0.003374f, +0.003091f, + -0.001247f, -0.003149f, -0.009321f, +0.018435f, -0.006695f, -0.009637f, +0.002353f, +0.005864f, -0.012797f, -0.010389f, + -0.021896f, -0.004807f, -0.002708f, +0.003316f, -0.004380f, -0.004137f, +0.011847f, +0.009092f, -0.009387f, -0.000312f, + -0.002130f, -0.013872f, +0.008418f, -0.004367f, +0.008675f, -0.000861f, +0.005738f, +0.007324f, +0.001427f, -0.000138f, + -0.004228f, -0.001744f, +0.001090f, +0.000254f, +0.001479f, +0.001685f, +0.000010f, -0.001330f, +0.002859f, +0.001362f, + +0.003398f, +0.001066f, -0.004624f, -0.000964f, +0.002047f, -0.000734f, +0.000085f, +0.002975f, -0.001332f, +0.000629f, + +0.001496f, +0.000608f, +0.000317f, +0.003814f, -0.001362f, -0.002614f, -0.001324f, -0.002539f, -0.000877f, +0.002605f, + +0.001458f, -0.001138f, -0.001571f, -0.001199f, -0.001239f, +0.003210f + }, + { + +0.008200f, +0.044704f, -0.038442f, -0.018640f, -0.021192f, -0.007693f, +0.021577f, +0.021272f, -0.007028f, +0.017437f, + -0.022143f, -0.004330f, -0.021040f, -0.046429f, -0.023205f, +0.000286f, -0.008460f, +0.011453f, +0.025724f, +0.027501f, + +0.006846f, -0.018262f, -0.011418f, -0.010918f, +0.008194f, +0.004166f, -0.007210f, -0.022483f, -0.012194f, -0.007498f, + -0.002159f, -0.008694f, +0.020384f, +0.029882f, -0.010816f, +0.000655f, -0.013945f, +0.039991f, +0.002288f, -0.020713f, + -0.001130f, +0.002681f, -0.015608f, +0.010082f, +0.003730f, +0.013380f, +0.002938f, +0.004303f, +0.003862f, +0.006163f, + +0.009865f, -0.001893f, -0.002906f, -0.008900f, -0.004511f, -0.000081f, +0.002845f, +0.002470f, -0.006946f, -0.000211f, + +0.011752f, +0.002656f, -0.007996f, +0.003399f, -0.001872f, -0.000318f, -0.005685f, -0.006841f, +0.008605f, -0.000146f, + +0.009556f, -0.005731f, -0.007100f, +0.000719f, +0.004350f, +0.003139f, +0.000730f, -0.000628f, -0.001258f, -0.003879f, + +0.002635f, -0.001982f, +0.002819f, +0.002350f, -0.000936f, -0.002172f, +0.000172f, +0.000233f, -0.002452f, -0.000700f, + +0.001779f, +0.000997f, +0.003106f, -0.002027f, +0.001311f, +0.001847f + }, + { + -0.042311f, -0.452011f, +0.051289f, +0.041399f, -0.034327f, +0.050550f, -0.004465f, +0.026235f, -0.016203f, -0.011835f, + -0.012186f, +0.018686f, +0.030761f, +0.064479f, -0.024074f, +0.010115f, -0.020790f, +0.002987f, -0.016940f, +0.009372f, + -0.006419f, -0.009281f, -0.013487f, -0.019695f, +0.007747f, -0.000922f, -0.010549f, -0.003180f, +0.001437f, +0.020801f, + +0.011350f, +0.001190f, +0.001948f, -0.005226f, +0.005804f, +0.008600f, -0.001458f, +0.005603f, -0.010457f, +0.014086f, + +0.007991f, -0.007994f, -0.015162f, -0.008895f, -0.004738f, +0.004031f, -0.004317f, +0.000358f, +0.005657f, -0.010116f, + -0.016546f, -0.012593f, -0.005030f, +0.014736f, +0.002071f, +0.007723f, -0.003338f, -0.000818f, +0.011004f, -0.005375f, + -0.005942f, -0.010744f, +0.003607f, +0.001463f, -0.003983f, -0.002249f, -0.005592f, -0.005789f, +0.006402f, -0.001865f, + +0.000789f, +0.005282f, -0.000043f, +0.001430f, +0.007797f, -0.001027f, +0.000654f, -0.001966f, -0.006429f, +0.001248f, + +0.001761f, -0.000434f, -0.004234f, +0.000532f, +0.001458f, +0.001430f, +0.000634f, -0.000662f, -0.001398f, +0.000923f, + +0.001439f, +0.001223f, +0.001890f, +0.001111f, +0.000722f, +0.000397f + }, + { + +0.002259f, +0.106395f, -0.017351f, +0.015495f, +0.019465f, +0.013759f, -0.001503f, -0.009749f, -0.004534f, +0.005224f, + +0.003961f, +0.003127f, +0.001052f, -0.037143f, +0.085397f, -0.022473f, -0.013952f, -0.003053f, +0.047182f, -0.029161f, + -0.007617f, -0.004450f, +0.007316f, +0.017262f, -0.011686f, -0.021996f, +0.016229f, +0.024830f, +0.006979f, +0.011091f, + +0.009692f, -0.005625f, +0.028276f, -0.012551f, -0.008755f, +0.004577f, -0.005679f, +0.013162f, +0.029397f, +0.015354f, + +0.016703f, -0.001373f, +0.001052f, +0.014815f, +0.002397f, +0.009290f, -0.001110f, -0.005603f, +0.005764f, +0.004650f, + -0.004019f, +0.006360f, -0.011002f, +0.000365f, -0.006924f, -0.000450f, +0.004167f, -0.007621f, +0.007666f, -0.006014f, + -0.006650f, -0.006389f, +0.002819f, -0.000694f, -0.005152f, -0.007919f, +0.005728f, -0.002491f, +0.000766f, -0.003786f, + +0.001690f, -0.002938f, -0.002578f, +0.007762f, +0.004516f, +0.000345f, -0.002812f, +0.004313f, +0.002395f, -0.001031f, + +0.001088f, +0.004668f, +0.000165f, +0.001578f, -0.000246f, -0.000869f, -0.000582f, +0.001578f, +0.001405f, +0.002050f, + -0.001231f, -0.001117f, +0.000173f, +0.002386f, -0.002322f, +0.001096f + }, + { + +0.058638f, +0.311273f, -0.060785f, +0.053216f, -0.034413f, -0.012509f, -0.010020f, -0.023015f, -0.042282f, -0.036280f, + -0.016863f, -0.021451f, +0.007721f, +0.001967f, -0.002726f, +0.032639f, -0.012406f, +0.012928f, -0.021442f, -0.010014f, + +0.028820f, -0.037307f, -0.017789f, +0.020164f, +0.024725f, +0.007371f, +0.008743f, +0.012956f, -0.000377f, -0.011854f, + -0.009506f, +0.003340f, -0.022993f, +0.015735f, +0.004227f, -0.003652f, -0.003305f, -0.029900f, -0.007864f, -0.002481f, + -0.002888f, -0.011748f, +0.015481f, -0.009183f, -0.003682f, -0.008225f, +0.007224f, -0.004175f, -0.016754f, -0.003337f, + +0.001761f, +0.000814f, -0.006594f, +0.018997f, -0.007854f, +0.008393f, +0.004215f, +0.012199f, +0.000726f, -0.005618f, + +0.009135f, +0.004216f, +0.001270f, +0.003155f, +0.007376f, +0.002357f, -0.002263f, +0.003277f, +0.003982f, +0.003523f, + +0.005760f, -0.000764f, +0.004121f, +0.000881f, +0.001181f, -0.003410f, -0.003781f, -0.004898f, -0.000493f, +0.000782f, + +0.007891f, -0.004445f, +0.002955f, -0.002586f, -0.003481f, +0.006396f, -0.000201f, -0.002521f, +0.002563f, -0.000610f, + +0.000453f, +0.000919f, -0.000983f, +0.002478f, -0.000046f, -0.001704f + }, + { + -0.013075f, +0.028277f, +0.031233f, +0.007587f, +0.009707f, +0.012450f, -0.024221f, -0.011472f, +0.003425f, -0.023398f, + -0.001625f, -0.000733f, +0.005023f, -0.045671f, +0.080458f, -0.007846f, +0.020259f, -0.016728f, -0.035549f, +0.045057f, + +0.007571f, +0.022106f, -0.004725f, -0.025370f, -0.024754f, +0.008890f, +0.029855f, +0.046911f, -0.010314f, -0.007283f, + -0.009168f, -0.020397f, -0.010245f, -0.000696f, -0.028426f, +0.008466f, +0.003212f, +0.004968f, -0.007648f, -0.008298f, + -0.011456f, -0.006274f, +0.001689f, -0.007271f, -0.000134f, +0.011624f, -0.007386f, +0.000266f, -0.009134f, -0.002043f, + -0.011926f, +0.006286f, -0.009159f, +0.002445f, +0.002983f, -0.000351f, -0.012069f, -0.006581f, +0.006416f, -0.004957f, + +0.007452f, -0.000280f, +0.001211f, -0.000582f, +0.003736f, +0.001015f, -0.006923f, -0.002933f, +0.006327f, +0.002946f, + +0.004039f, +0.007095f, +0.006879f, -0.000936f, -0.004127f, +0.005624f, +0.000667f, -0.001959f, +0.000130f, +0.001895f, + -0.002837f, +0.000210f, +0.001185f, -0.003305f, -0.002725f, -0.001614f, +0.002686f, +0.001269f, -0.002406f, -0.001087f, + +0.002665f, +0.000571f, +0.000735f, +0.001687f, +0.000549f, -0.000553f + }, + { + -0.013250f, +0.234976f, -0.016168f, +0.005440f, -0.028913f, -0.037036f, +0.025841f, +0.018984f, +0.012348f, +0.003827f, + +0.028332f, +0.031882f, +0.006628f, +0.024538f, +0.018084f, -0.000749f, +0.039763f, -0.012616f, +0.005348f, -0.004504f, + -0.021849f, -0.008184f, -0.003840f, -0.012582f, +0.012831f, -0.044394f, +0.003454f, -0.006095f, +0.000526f, +0.038086f, + -0.009850f, +0.006569f, -0.012265f, -0.010140f, -0.007133f, -0.015284f, -0.006076f, -0.025639f, +0.011146f, -0.020633f, + -0.016465f, +0.008758f, -0.024292f, +0.008557f, -0.005315f, -0.000338f, -0.004677f, -0.006637f, +0.019277f, -0.000349f, + -0.000241f, -0.006518f, -0.003574f, +0.003682f, +0.006344f, -0.003303f, -0.002590f, -0.000450f, +0.003446f, -0.002083f, + -0.004603f, +0.004946f, +0.000280f, +0.003570f, +0.001490f, -0.002618f, -0.003419f, +0.001733f, +0.002889f, -0.001841f, + -0.001400f, -0.000386f, +0.001974f, +0.000734f, -0.000336f, +0.000048f, -0.005330f, -0.000693f, -0.000777f, +0.001095f, + -0.003697f, +0.000924f, +0.001608f, -0.003862f, -0.000057f, +0.001594f, +0.001077f, -0.000625f, +0.003646f, -0.001970f, + +0.001473f, +0.000312f, -0.000152f, -0.001266f, -0.002025f, -0.001349f + } + }, + { + { + -0.002566f, +0.050243f, -0.021820f, +0.028525f, +0.011430f, +0.001468f, +0.007022f, +0.013800f, -0.002760f, +0.018414f, + -0.017799f, +0.026106f, -0.035899f, +0.001282f, -0.049750f, +0.024153f, +0.004952f, -0.001625f, +0.013911f, -0.028400f, + -0.025181f, -0.025635f, -0.006846f, -0.050474f, -0.016863f, +0.010870f, -0.018228f, -0.009710f, -0.020818f, -0.021245f, + -0.019514f, -0.004513f, -0.001076f, +0.014366f, -0.010333f, +0.017673f, +0.003909f, +0.017552f, -0.012832f, +0.003536f, + -0.005216f, -0.001329f, +0.004082f, -0.004091f, +0.004817f, +0.010463f, -0.001472f, +0.005808f, -0.001428f, +0.003463f, + +0.000282f, -0.003525f, +0.005074f, -0.000375f, +0.001501f, +0.000588f, -0.008256f, -0.001738f, +0.009027f, +0.003663f, + +0.007955f, +0.004412f, -0.001117f, +0.009407f, +0.006994f, +0.001377f, -0.000601f, -0.001357f, -0.000137f, +0.004018f, + +0.001633f, +0.000941f, +0.002567f, +0.005381f, -0.002454f, +0.001953f, +0.003649f, -0.003191f, +0.002459f, +0.000953f, + +0.001047f, -0.002951f, -0.000873f, -0.000338f, +0.002223f, -0.001168f, +0.000037f, +0.000767f, +0.002091f, +0.000296f, + -0.000234f, -0.002239f, -0.000639f, +0.000741f, +0.001091f, -0.000850f + }, + { + +0.031258f, +0.198943f, -0.055473f, -0.004978f, -0.027515f, +0.003763f, -0.005648f, -0.006877f, +0.004195f, -0.016032f, + -0.021589f, -0.029254f, +0.011252f, -0.014059f, +0.015920f, -0.012498f, +0.015912f, +0.003185f, -0.000629f, +0.002111f, + +0.007988f, +0.016625f, -0.004555f, +0.005553f, -0.014049f, +0.018473f, -0.004210f, +0.005625f, +0.014339f, +0.006522f, + -0.012755f, -0.004338f, -0.001764f, -0.010768f, +0.006873f, -0.003716f, -0.004206f, +0.003700f, -0.005152f, -0.009998f, + -0.015643f, -0.013013f, -0.003940f, +0.009851f, -0.017450f, -0.000948f, +0.000208f, +0.011900f, -0.009614f, -0.000424f, + +0.005480f, -0.000687f, -0.001665f, +0.003607f, -0.003998f, -0.010376f, +0.000358f, -0.000352f, -0.001341f, +0.004166f, + -0.005607f, +0.005170f, +0.001371f, -0.000453f, -0.003051f, +0.004055f, -0.002601f, +0.007404f, +0.003659f, -0.000560f, + +0.000994f, +0.001183f, +0.005849f, +0.001101f, +0.003811f, +0.002199f, +0.004931f, +0.000281f, -0.002506f, -0.002770f, + -0.002114f, +0.004608f, +0.000795f, -0.002365f, +0.000317f, +0.002861f, +0.000644f, +0.000528f, -0.001439f, +0.000641f, + +0.001558f, +0.001303f, -0.000141f, +0.001369f, +0.000670f, -0.000965f + }, + { + +0.001699f, +0.046089f, -0.041345f, +0.061538f, +0.007330f, -0.004926f, -0.012212f, -0.000898f, -0.000443f, +0.007311f, + +0.027081f, +0.009992f, -0.005483f, +0.026352f, +0.021770f, -0.002565f, +0.008272f, +0.022312f, +0.029746f, -0.020978f, + +0.020356f, -0.026694f, +0.012265f, -0.007309f, -0.011570f, -0.000646f, -0.016386f, -0.012875f, -0.012317f, -0.011825f, + -0.013146f, +0.024118f, -0.012253f, +0.003473f, -0.012371f, -0.003687f, -0.000084f, +0.007405f, -0.003772f, +0.013768f, + +0.004949f, -0.001357f, +0.009149f, -0.015006f, +0.005012f, +0.014057f, -0.001135f, +0.001564f, +0.000611f, -0.006245f, + +0.009095f, +0.000132f, -0.008078f, -0.004828f, -0.004210f, -0.009455f, +0.000496f, -0.005005f, +0.005948f, -0.004161f, + +0.007787f, -0.007033f, +0.008708f, -0.001439f, +0.000755f, -0.000305f, -0.001130f, +0.000842f, +0.007512f, +0.001413f, + -0.002556f, -0.002037f, -0.001264f, -0.001353f, -0.000618f, -0.003439f, -0.001907f, -0.001310f, -0.001791f, -0.002990f, + -0.001456f, -0.000716f, -0.000634f, -0.000035f, -0.001545f, +0.000349f, +0.002279f, -0.000001f, -0.001116f, +0.000376f, + +0.000120f, -0.000577f, -0.000709f, -0.000618f, +0.002032f, +0.001678f + }, + { + +0.002206f, +0.049686f, +0.005171f, -0.004706f, +0.000055f, -0.000640f, +0.001054f, -0.004375f, +0.002514f, -0.004793f, + -0.008648f, -0.002761f, +0.011035f, -0.008814f, -0.025100f, +0.055083f, +0.037973f, +0.001240f, +0.002888f, +0.005272f, + +0.015055f, +0.029624f, -0.018822f, +0.004228f, -0.001092f, +0.014498f, +0.015840f, -0.039602f, -0.000981f, -0.016882f, + -0.010398f, +0.001517f, -0.009844f, +0.022840f, -0.000173f, -0.018111f, +0.012897f, -0.017202f, -0.002832f, -0.012515f, + -0.000278f, +0.006011f, +0.004881f, +0.012970f, +0.008922f, -0.013004f, -0.018170f, -0.007652f, +0.009280f, -0.008191f, + +0.005372f, -0.002470f, -0.005908f, -0.002611f, -0.000944f, +0.005721f, +0.003272f, +0.002276f, +0.000983f, +0.012590f, + +0.005404f, -0.000047f, -0.002825f, -0.000642f, -0.001849f, +0.005765f, +0.001177f, +0.001677f, +0.000466f, -0.000479f, + +0.005264f, -0.000244f, -0.002695f, +0.001555f, +0.002573f, +0.001559f, -0.001698f, +0.001070f, -0.001582f, -0.001432f, + -0.003298f, +0.000166f, +0.000616f, +0.001584f, -0.000256f, -0.000590f, -0.001196f, -0.002873f, +0.000070f, -0.000132f, + -0.000909f, +0.000979f, -0.001834f, +0.000771f, +0.000026f, -0.002048f + }, + { + +0.082802f, -0.453920f, -0.052884f, +0.032903f, +0.010915f, +0.003417f, -0.000950f, +0.015352f, +0.001570f, -0.009642f, + -0.020646f, -0.008426f, +0.013104f, -0.008035f, -0.010178f, -0.011401f, +0.032779f, +0.018314f, -0.001492f, -0.004101f, + -0.000646f, +0.001192f, -0.038415f, +0.008768f, -0.000426f, -0.001639f, +0.005182f, -0.014514f, -0.028909f, +0.017711f, + +0.018535f, -0.002348f, -0.017394f, -0.002436f, +0.005236f, -0.001011f, +0.010140f, +0.014976f, +0.015728f, +0.015718f, + -0.004432f, -0.005108f, -0.020824f, -0.012388f, +0.004889f, -0.001585f, -0.003633f, -0.006022f, +0.009209f, -0.001272f, + -0.010485f, -0.003515f, +0.004859f, +0.007285f, +0.002892f, -0.007877f, -0.004853f, +0.003672f, -0.007891f, +0.003877f, + +0.000538f, -0.003084f, -0.006010f, -0.002152f, -0.000321f, +0.004286f, +0.002451f, +0.002233f, +0.001687f, -0.000851f, + -0.000122f, -0.002488f, -0.003709f, +0.000979f, -0.008688f, -0.000356f, -0.001173f, -0.002072f, +0.000494f, -0.000807f, + -0.000018f, -0.000481f, -0.000255f, +0.003017f, -0.000827f, -0.003152f, +0.002407f, +0.001222f, -0.002147f, -0.001013f, + +0.002192f, -0.000247f, +0.003126f, -0.001728f, +0.001194f, -0.001510f + }, + { + -0.001211f, +0.011767f, -0.015865f, +0.004095f, -0.002175f, -0.000264f, +0.000167f, -0.003743f, -0.000074f, -0.007224f, + -0.016004f, +0.007629f, +0.003442f, -0.012207f, -0.085480f, -0.030291f, -0.042527f, +0.007336f, +0.001050f, +0.014144f, + +0.006649f, -0.017294f, +0.012156f, -0.016617f, -0.018035f, -0.004598f, -0.005620f, -0.040828f, -0.023829f, -0.036970f, + -0.004837f, +0.019374f, -0.022176f, -0.006600f, -0.002495f, -0.001170f, -0.004192f, +0.005781f, +0.004302f, +0.002909f, + -0.006845f, -0.000873f, +0.001394f, -0.011908f, +0.001089f, -0.007263f, +0.001830f, +0.010187f, +0.001553f, -0.011092f, + +0.001499f, -0.000197f, +0.000850f, -0.007207f, +0.010824f, +0.002556f, -0.011458f, +0.004570f, -0.002615f, +0.007354f, + -0.004185f, -0.000496f, +0.001872f, -0.001345f, -0.002572f, -0.003841f, +0.006188f, +0.001707f, +0.005595f, +0.003035f, + +0.003054f, +0.004094f, -0.004872f, -0.002538f, +0.001791f, -0.005905f, +0.001271f, +0.001067f, +0.000657f, +0.004841f, + -0.001849f, +0.000122f, +0.000799f, -0.000365f, -0.000481f, +0.001678f, -0.001103f, +0.002701f, -0.001811f, -0.000349f, + +0.001470f, +0.001442f, -0.001384f, -0.001096f, +0.002507f, -0.001344f + }, + { + +0.135466f, -0.286606f, -0.088552f, +0.074547f, +0.020597f, -0.000041f, -0.002505f, -0.029607f, +0.000737f, +0.009254f, + -0.004735f, -0.002090f, -0.015279f, -0.011747f, -0.010004f, +0.021745f, +0.013569f, +0.012098f, +0.010462f, +0.003975f, + +0.002587f, -0.012558f, -0.017768f, +0.004486f, -0.001982f, +0.001139f, -0.000595f, +0.012838f, +0.010828f, +0.000983f, + +0.000814f, -0.003899f, -0.010347f, +0.006290f, -0.005118f, -0.009242f, -0.002472f, -0.026311f, -0.001589f, -0.001750f, + +0.004484f, -0.000250f, +0.020851f, +0.003278f, +0.022529f, +0.008881f, +0.000229f, -0.003288f, +0.001900f, +0.003063f, + -0.002302f, +0.013527f, -0.014419f, +0.001365f, +0.011241f, -0.006377f, +0.002927f, -0.002772f, -0.002777f, -0.000552f, + +0.001864f, +0.008657f, +0.001139f, +0.004247f, +0.000376f, +0.003313f, -0.009999f, -0.002908f, -0.003157f, +0.005425f, + +0.005188f, -0.000723f, -0.002211f, -0.003227f, +0.003728f, +0.000074f, +0.000485f, +0.005550f, -0.000013f, +0.001991f, + -0.000693f, +0.000186f, -0.000246f, -0.001640f, -0.000327f, -0.001451f, +0.000743f, +0.000211f, -0.000003f, +0.002191f, + -0.000323f, -0.000455f, +0.001371f, +0.000525f, -0.001208f, +0.000135f + }, + { + -0.002414f, +0.011490f, -0.028637f, +0.003873f, +0.000969f, +0.001238f, +0.001459f, +0.003134f, -0.013109f, +0.003023f, + -0.006935f, +0.009091f, +0.002716f, -0.026839f, -0.031040f, +0.013358f, +0.030399f, +0.004491f, -0.022638f, -0.000253f, + +0.062826f, +0.011166f, +0.045874f, -0.002140f, -0.002421f, +0.018455f, +0.013079f, +0.024082f, -0.026608f, -0.003164f, + +0.016162f, +0.011927f, -0.000648f, +0.037219f, +0.015790f, +0.000455f, +0.001715f, +0.013421f, +0.000240f, +0.012526f, + +0.006067f, -0.017621f, +0.009896f, -0.000535f, +0.009024f, -0.004386f, -0.000605f, +0.011239f, +0.000217f, +0.002500f, + -0.002466f, +0.002436f, -0.010355f, -0.000400f, -0.002353f, +0.004953f, -0.003590f, +0.000817f, -0.002473f, -0.003487f, + -0.001319f, -0.005576f, -0.002300f, +0.004305f, -0.001024f, -0.005828f, +0.002304f, +0.000752f, -0.003471f, +0.001535f, + +0.004792f, -0.001871f, -0.002343f, +0.000561f, -0.001081f, -0.002429f, +0.001250f, +0.001103f, +0.002109f, +0.002668f, + +0.000617f, -0.001707f, +0.003047f, +0.002003f, -0.000503f, -0.002887f, +0.002116f, -0.000876f, +0.001503f, -0.000749f, + -0.000294f, -0.002157f, -0.001293f, -0.000861f, +0.000640f, -0.001171f + }, + { + +0.030096f, -0.756684f, +0.003793f, +0.098305f, +0.025058f, -0.019077f, +0.002018f, -0.003209f, +0.015145f, -0.005568f, + +0.041332f, -0.008948f, +0.023168f, +0.029575f, +0.046400f, -0.029127f, -0.000739f, -0.009932f, -0.005639f, -0.012007f, + -0.003657f, -0.015577f, +0.000007f, +0.011252f, -0.001913f, -0.006464f, -0.006548f, -0.011455f, -0.000878f, +0.002049f, + -0.014646f, -0.012086f, -0.002280f, +0.006883f, -0.018290f, -0.002953f, +0.010487f, -0.005768f, -0.017791f, +0.002817f, + -0.008054f, -0.001948f, -0.002135f, -0.001634f, -0.003537f, -0.001936f, +0.000439f, +0.002270f, -0.000697f, +0.020765f, + +0.013671f, -0.009032f, +0.005923f, -0.007708f, +0.009220f, +0.001798f, +0.003535f, +0.003276f, +0.007288f, +0.004788f, + -0.004505f, -0.001707f, -0.003830f, -0.001555f, +0.002900f, +0.000921f, -0.000942f, -0.000499f, +0.005753f, +0.003055f, + +0.004975f, +0.002011f, -0.004309f, +0.000448f, +0.003406f, -0.001685f, -0.002351f, +0.001952f, -0.001225f, -0.001170f, + -0.001439f, +0.000847f, +0.000268f, +0.001420f, -0.001153f, -0.000409f, +0.000669f, -0.003064f, -0.002659f, +0.001436f, + +0.001467f, -0.000937f, -0.000380f, +0.000306f, -0.002249f, +0.002778f + }, + { + -0.006837f, +0.100197f, +0.015638f, -0.008790f, -0.004280f, -0.013353f, +0.012328f, +0.011263f, -0.007036f, +0.019344f, + -0.027670f, -0.010086f, -0.003162f, -0.019425f, -0.017903f, +0.009061f, +0.002487f, -0.013855f, -0.034001f, +0.022736f, + +0.023883f, -0.021315f, -0.017268f, -0.023111f, -0.019974f, -0.006857f, +0.004658f, -0.005402f, -0.000253f, +0.016251f, + +0.013404f, -0.007935f, -0.006274f, +0.016326f, -0.015162f, -0.001316f, -0.017824f, +0.020789f, -0.004130f, -0.011622f, + -0.003301f, -0.002392f, -0.008529f, +0.012405f, -0.010852f, +0.007662f, +0.000480f, +0.006536f, +0.008694f, -0.001209f, + -0.005843f, -0.007870f, +0.002416f, -0.004406f, +0.000694f, -0.002184f, -0.003417f, -0.002860f, -0.009874f, -0.001979f, + +0.010102f, +0.001850f, -0.007556f, -0.000379f, -0.004435f, +0.004246f, +0.001268f, -0.006149f, +0.001490f, +0.000634f, + +0.011285f, -0.000016f, -0.002008f, +0.003784f, +0.005115f, -0.000288f, -0.000973f, +0.000490f, +0.002703f, +0.000239f, + +0.005629f, -0.002311f, -0.000073f, +0.000409f, -0.001165f, -0.000596f, +0.001168f, +0.001640f, -0.000055f, -0.000378f, + -0.000522f, -0.000066f, +0.000677f, -0.003274f, -0.000004f, +0.000363f + }, + { + +0.044810f, -0.457175f, -0.046238f, +0.012416f, -0.065660f, -0.027118f, -0.084625f, +0.027609f, +0.018007f, -0.002269f, + -0.016419f, +0.010204f, -0.010281f, +0.009962f, -0.051262f, +0.007548f, -0.018027f, +0.001750f, -0.013757f, +0.002932f, + +0.002536f, -0.004233f, -0.019185f, -0.017684f, +0.001916f, -0.015993f, -0.000736f, +0.000444f, -0.009565f, -0.002890f, + -0.000176f, +0.000823f, +0.008088f, +0.000826f, -0.004659f, +0.004710f, -0.004058f, +0.007345f, -0.003298f, +0.009113f, + -0.001658f, -0.008746f, -0.003724f, +0.002164f, -0.003945f, +0.005460f, -0.003665f, +0.003964f, +0.008207f, -0.000847f, + +0.002389f, -0.002888f, -0.001857f, +0.011846f, -0.003870f, +0.006948f, -0.003251f, -0.000119f, +0.008856f, -0.002719f, + +0.003116f, -0.001525f, +0.004958f, -0.000355f, -0.003304f, +0.000657f, -0.002718f, -0.006095f, +0.001833f, -0.006344f, + -0.001948f, +0.003510f, -0.001269f, -0.001211f, +0.003429f, -0.005775f, -0.002970f, +0.000482f, -0.002008f, +0.003699f, + +0.001770f, +0.000074f, +0.000060f, +0.000265f, +0.000764f, +0.002264f, -0.001463f, -0.000357f, -0.000845f, -0.000867f, + +0.000731f, -0.000542f, +0.001263f, +0.001804f, -0.000516f, -0.001019f + }, + { + +0.000143f, +0.103642f, -0.025321f, +0.008449f, +0.002453f, +0.010869f, +0.007456f, -0.012230f, +0.002676f, -0.000584f, + -0.009062f, -0.000907f, +0.005944f, -0.006091f, +0.103717f, -0.016075f, +0.003398f, +0.011214f, +0.062450f, +0.024976f, + +0.036583f, +0.011122f, -0.012154f, -0.008832f, -0.009057f, +0.010210f, +0.047890f, +0.038143f, +0.028253f, -0.001482f, + +0.015642f, -0.001586f, -0.001110f, -0.003873f, +0.005410f, -0.000353f, -0.003712f, -0.003058f, +0.008949f, -0.001069f, + -0.006177f, -0.006172f, +0.001678f, +0.011696f, +0.001994f, +0.013332f, +0.001724f, -0.005706f, -0.003038f, -0.002686f, + -0.000285f, +0.010057f, -0.010650f, +0.002161f, +0.001734f, +0.009938f, +0.004900f, -0.005264f, +0.011487f, +0.000297f, + -0.000320f, -0.004790f, +0.009832f, +0.001887f, -0.003241f, -0.007036f, +0.008908f, -0.000440f, +0.001438f, -0.003497f, + +0.003046f, -0.001134f, -0.002980f, +0.007936f, -0.001690f, -0.005456f, -0.001542f, +0.002581f, +0.000193f, -0.000543f, + -0.000337f, +0.000882f, -0.002509f, +0.001199f, +0.000662f, -0.001834f, -0.002972f, +0.000508f, +0.000065f, -0.000404f, + -0.001277f, +0.000175f, +0.001454f, +0.002669f, -0.001925f, +0.001758f + }, + { + -0.102240f, +0.178404f, +0.009384f, +0.037071f, -0.042003f, -0.053038f, -0.038522f, +0.015559f, -0.008132f, -0.031862f, + -0.000791f, -0.022061f, +0.006735f, +0.014676f, +0.004035f, +0.032810f, +0.009194f, +0.037452f, -0.015657f, -0.030978f, + +0.013519f, -0.029273f, +0.009601f, +0.037707f, +0.017124f, +0.003018f, +0.009459f, +0.003294f, +0.004291f, -0.001461f, + -0.009484f, +0.001030f, -0.012199f, +0.017549f, -0.009723f, -0.001832f, +0.012389f, -0.011744f, +0.007813f, -0.004740f, + -0.007472f, +0.000431f, +0.024211f, -0.003262f, +0.018780f, +0.004339f, +0.011561f, +0.001434f, -0.011228f, +0.003002f, + +0.001294f, +0.000563f, -0.007817f, +0.012284f, -0.015239f, +0.003604f, -0.001741f, +0.009620f, +0.003444f, -0.007610f, + +0.005472f, -0.001438f, -0.001129f, +0.005220f, +0.008127f, +0.002859f, -0.002220f, -0.000694f, -0.004254f, -0.001943f, + +0.005471f, +0.000660f, +0.002961f, -0.002546f, -0.001211f, -0.003351f, +0.002392f, -0.001274f, -0.001195f, -0.005403f, + +0.002368f, -0.005484f, +0.000061f, -0.003470f, -0.002897f, +0.004998f, +0.000909f, -0.001036f, +0.002990f, +0.000633f, + -0.000450f, +0.001794f, -0.002609f, +0.000810f, +0.000828f, -0.000243f + }, + { + +0.014007f, +0.001358f, -0.017224f, -0.006907f, -0.000741f, +0.017389f, -0.006311f, -0.006026f, +0.022825f, +0.008117f, + +0.015087f, +0.016722f, +0.011293f, -0.079573f, +0.059795f, +0.001982f, +0.021214f, -0.042106f, -0.024712f, +0.036131f, + -0.045632f, -0.028133f, -0.027315f, -0.025567f, -0.031156f, -0.027280f, -0.016821f, -0.004161f, -0.007663f, +0.003169f, + +0.005550f, -0.000622f, -0.003748f, +0.008608f, -0.010053f, +0.015970f, -0.003767f, -0.001327f, -0.002075f, +0.002441f, + -0.002816f, +0.000985f, -0.002862f, -0.010135f, -0.005685f, +0.017079f, -0.009598f, -0.009905f, -0.003190f, +0.006350f, + -0.009888f, +0.004487f, -0.009065f, +0.005098f, -0.005053f, -0.009718f, -0.006364f, +0.001599f, +0.006903f, -0.002046f, + +0.011840f, -0.005168f, -0.002075f, +0.000486f, +0.001510f, -0.001235f, -0.003964f, -0.001025f, +0.007198f, +0.002742f, + +0.001876f, -0.001092f, -0.000247f, +0.003040f, -0.002088f, +0.001835f, +0.000816f, -0.001141f, -0.001654f, +0.002684f, + -0.000599f, +0.000049f, +0.001992f, +0.001816f, +0.002364f, -0.000081f, +0.001797f, +0.000241f, -0.000343f, -0.001162f, + -0.000133f, -0.001165f, +0.000613f, +0.001492f, +0.000361f, +0.000885f + }, + { + -0.026863f, +0.267019f, -0.007253f, -0.026440f, -0.016721f, -0.042033f, +0.005724f, +0.011531f, +0.016174f, +0.019304f, + +0.018373f, +0.015521f, +0.010542f, +0.000602f, -0.002324f, +0.009619f, +0.026572f, -0.013445f, +0.009067f, +0.002869f, + +0.007030f, +0.002269f, -0.012469f, -0.040826f, -0.001922f, -0.036457f, +0.011197f, -0.001609f, -0.009053f, +0.036148f, + +0.005735f, +0.002062f, -0.008086f, +0.000785f, +0.008595f, -0.007683f, +0.002230f, -0.039093f, +0.008659f, -0.004256f, + -0.009528f, +0.019464f, -0.000867f, +0.027495f, +0.002874f, +0.001394f, +0.002872f, +0.004683f, +0.028058f, +0.001142f, + -0.005345f, -0.003791f, -0.003238f, +0.001695f, +0.005777f, +0.001841f, +0.004008f, +0.006752f, +0.008641f, +0.002499f, + -0.006038f, +0.002068f, -0.000014f, +0.003126f, -0.002057f, -0.004697f, -0.004324f, -0.006892f, +0.001780f, +0.002672f, + +0.001053f, -0.000093f, +0.001736f, +0.002660f, +0.000768f, +0.001208f, -0.001096f, +0.002788f, +0.000172f, -0.000114f, + -0.006319f, -0.001127f, +0.003213f, -0.002819f, +0.002894f, +0.001586f, -0.001146f, +0.000523f, +0.003119f, -0.003745f, + +0.000108f, +0.000308f, +0.002678f, -0.000304f, -0.002047f, +0.002376f + } + }, + { + { + +0.001090f, -0.000145f, +0.017223f, +0.022689f, +0.018861f, -0.001296f, +0.005542f, +0.007892f, +0.000819f, +0.024043f, + -0.007943f, -0.001847f, -0.006862f, +0.005547f, -0.060703f, +0.021444f, +0.019947f, +0.006207f, -0.015488f, -0.035263f, + +0.011014f, -0.036235f, -0.006885f, -0.039403f, -0.009230f, -0.017401f, -0.010102f, -0.006859f, -0.009599f, -0.031509f, + -0.013789f, +0.002451f, -0.010511f, +0.023219f, +0.000143f, +0.014437f, -0.002177f, -0.005409f, +0.004541f, +0.005464f, + -0.001719f, -0.005539f, +0.003181f, +0.002822f, +0.009724f, -0.006381f, +0.003008f, +0.011714f, +0.004961f, +0.004380f, + -0.006699f, -0.006750f, +0.003884f, +0.000169f, +0.005836f, -0.004107f, -0.005954f, +0.001288f, +0.003691f, +0.004222f, + +0.006932f, +0.007028f, -0.000917f, +0.007131f, +0.005345f, -0.000976f, +0.002377f, -0.001542f, -0.001664f, +0.002650f, + +0.002947f, +0.003712f, -0.000046f, +0.004271f, -0.001308f, +0.002985f, +0.002241f, -0.002923f, +0.001265f, +0.000035f, + +0.000975f, -0.001925f, +0.000007f, +0.001054f, -0.001444f, -0.001349f, +0.001275f, +0.001303f, +0.000594f, +0.001799f, + -0.001102f, -0.000179f, -0.001351f, +0.000447f, -0.000119f, +0.000865f + }, + { + -0.022173f, +0.025248f, +0.131878f, -0.056540f, +0.020122f, +0.005370f, -0.016235f, +0.010738f, +0.001449f, -0.025767f, + -0.018149f, -0.009676f, -0.000737f, -0.008034f, -0.003081f, +0.020345f, +0.006522f, +0.007683f, -0.003048f, -0.010225f, + +0.021333f, +0.023394f, -0.013642f, +0.001035f, -0.004131f, +0.010784f, +0.002081f, +0.014875f, +0.006482f, +0.008378f, + -0.016074f, -0.002438f, -0.014397f, +0.003971f, +0.006925f, -0.013052f, -0.003780f, +0.003338f, -0.010391f, -0.014480f, + -0.002015f, -0.018035f, +0.001825f, +0.002805f, -0.012695f, -0.005964f, -0.000972f, +0.005089f, +0.005908f, -0.002346f, + +0.002810f, -0.001476f, -0.009970f, +0.001503f, -0.001748f, -0.002323f, -0.003740f, -0.001987f, -0.003430f, -0.001024f, + -0.002053f, -0.000127f, +0.000546f, -0.000106f, +0.002337f, +0.000413f, +0.002288f, +0.005382f, -0.000578f, +0.005478f, + +0.001152f, -0.000610f, +0.005649f, +0.000549f, +0.004391f, +0.001736f, +0.002858f, -0.000705f, -0.001735f, -0.000909f, + -0.001735f, +0.004945f, -0.001318f, -0.001666f, +0.001817f, +0.001442f, +0.001541f, -0.000982f, -0.000841f, +0.000528f, + +0.000066f, +0.002102f, +0.001350f, -0.000681f, +0.000389f, -0.000038f + }, + { + -0.003162f, -0.044611f, +0.027444f, +0.047538f, +0.022697f, -0.007732f, -0.005458f, -0.001687f, +0.004251f, +0.012358f, + +0.019897f, +0.014753f, -0.002282f, +0.026637f, +0.022343f, +0.006653f, +0.016402f, +0.015047f, +0.012665f, +0.016703f, + -0.006744f, +0.006602f, -0.001089f, -0.006215f, -0.002779f, -0.014820f, -0.017730f, -0.017221f, +0.002263f, -0.007287f, + -0.010883f, +0.008962f, -0.010028f, -0.003419f, +0.003048f, -0.003834f, -0.008795f, +0.013024f, -0.015297f, +0.019540f, + +0.006545f, -0.003532f, -0.002499f, -0.008214f, +0.009870f, +0.003844f, +0.000583f, +0.005892f, -0.002232f, -0.002082f, + +0.001093f, +0.003055f, -0.002355f, -0.006217f, -0.011099f, -0.003417f, -0.002592f, +0.001138f, -0.000945f, +0.001763f, + -0.000664f, +0.004964f, -0.001523f, +0.001136f, +0.000422f, +0.002349f, -0.000936f, -0.000256f, +0.006953f, -0.000514f, + -0.003348f, -0.000819f, -0.001247f, -0.002014f, -0.005383f, +0.000730f, -0.000521f, -0.000640f, -0.003017f, -0.001418f, + -0.001144f, -0.001572f, -0.001194f, -0.001238f, +0.000987f, -0.001287f, +0.001774f, +0.001992f, -0.001359f, -0.000142f, + -0.000261f, +0.000394f, -0.001907f, +0.000325f, +0.001217f, +0.001740f + }, + { + -0.002259f, +0.050317f, +0.013464f, -0.011939f, +0.001096f, +0.001547f, -0.002754f, +0.001394f, -0.001213f, -0.008894f, + +0.002029f, -0.008623f, +0.006131f, +0.022178f, +0.025755f, -0.012527f, +0.060542f, +0.009431f, +0.007303f, +0.003244f, + +0.007555f, +0.027813f, -0.014321f, +0.002407f, -0.014688f, +0.013505f, +0.032159f, -0.022726f, -0.029261f, -0.002766f, + +0.004121f, -0.015853f, -0.020522f, +0.015386f, +0.007365f, -0.000877f, +0.008270f, -0.008386f, -0.022362f, -0.006329f, + -0.000447f, +0.008629f, +0.007359f, +0.012500f, +0.007551f, -0.011214f, -0.019056f, -0.005241f, -0.000156f, -0.001507f, + -0.003584f, -0.000569f, +0.000367f, -0.004354f, -0.004113f, +0.005547f, +0.003665f, +0.004986f, +0.006064f, +0.005012f, + +0.008906f, -0.000645f, -0.005423f, -0.002375f, +0.001708f, +0.002581f, +0.004249f, -0.000107f, +0.001156f, -0.000046f, + +0.003903f, +0.000210f, -0.000064f, -0.001579f, +0.004319f, +0.001129f, -0.001557f, -0.001302f, -0.002659f, -0.000213f, + -0.002061f, -0.001379f, +0.001126f, +0.001065f, +0.000002f, -0.001789f, +0.001064f, -0.002343f, -0.001686f, -0.001504f, + +0.000524f, +0.000081f, -0.000255f, -0.000616f, -0.000706f, -0.001782f + }, + { + -0.090268f, -0.320500f, +0.028018f, +0.052461f, +0.002112f, +0.005245f, -0.003617f, +0.017524f, -0.001101f, -0.015416f, + -0.009287f, -0.030441f, +0.025994f, -0.001066f, -0.026583f, +0.011735f, +0.012423f, +0.002672f, +0.032519f, -0.001537f, + +0.004176f, -0.026530f, -0.023219f, +0.011595f, -0.001786f, +0.015529f, +0.009333f, -0.006598f, -0.039617f, +0.005942f, + +0.001055f, +0.003966f, -0.000654f, -0.009419f, -0.004321f, +0.007278f, +0.031453f, +0.007672f, +0.020650f, -0.007717f, + +0.010699f, -0.004924f, -0.013393f, -0.016812f, +0.006957f, +0.006474f, -0.014006f, -0.003282f, +0.009902f, -0.010859f, + -0.008841f, +0.000251f, -0.003942f, +0.011112f, -0.001859f, -0.003128f, -0.000983f, -0.006547f, +0.001681f, +0.003992f, + -0.007144f, +0.003092f, -0.007098f, -0.001964f, -0.000607f, +0.005144f, +0.001398f, +0.002350f, +0.001234f, +0.002473f, + -0.004459f, +0.000064f, -0.003589f, +0.000451f, -0.002720f, -0.002360f, -0.001625f, -0.000615f, -0.001192f, -0.000831f, + -0.001653f, +0.001063f, -0.001003f, +0.002989f, -0.001258f, -0.002981f, +0.003414f, +0.000485f, +0.000781f, -0.000423f, + -0.000449f, -0.000065f, +0.001862f, +0.001309f, +0.000080f, +0.000282f + }, + { + +0.000174f, -0.012842f, -0.007852f, -0.000811f, +0.006343f, +0.000195f, -0.001044f, -0.006758f, +0.000436f, -0.013936f, + -0.001099f, +0.001841f, +0.004941f, +0.015788f, -0.059478f, -0.051365f, -0.047004f, -0.002305f, +0.015771f, +0.001984f, + +0.007924f, -0.006523f, -0.000537f, -0.030475f, -0.008962f, +0.044362f, -0.038696f, -0.031227f, -0.012446f, -0.040590f, + -0.010480f, -0.004303f, +0.001847f, -0.007218f, -0.025880f, +0.013483f, +0.004304f, +0.001775f, -0.003831f, +0.003776f, + +0.003031f, -0.002470f, -0.007829f, -0.011313f, -0.005909f, +0.001636f, -0.002080f, +0.006524f, -0.006334f, +0.002913f, + +0.006529f, +0.000199f, -0.006557f, -0.000948f, +0.006445f, -0.002668f, -0.005596f, -0.000107f, -0.000298f, +0.007665f, + -0.000690f, -0.000062f, -0.002213f, -0.000828f, +0.001346f, -0.001784f, +0.000052f, +0.004633f, +0.004473f, +0.003549f, + +0.002663f, +0.002240f, -0.001724f, -0.001170f, +0.002066f, -0.003568f, -0.001119f, +0.000153f, +0.001240f, +0.002141f, + +0.000757f, -0.003528f, +0.001960f, -0.000298f, -0.000511f, +0.002527f, +0.000593f, +0.001154f, -0.001982f, +0.000839f, + +0.000899f, -0.000615f, -0.000243f, +0.000170f, +0.000426f, +0.000008f + }, + { + -0.115399f, -0.108737f, +0.053038f, +0.112358f, -0.013290f, -0.007991f, -0.007916f, -0.011059f, -0.009773f, -0.017109f, + +0.006479f, -0.006422f, -0.004511f, -0.004099f, +0.012644f, -0.006608f, +0.014068f, +0.019191f, +0.002344f, +0.011125f, + +0.002116f, -0.014674f, -0.003166f, -0.011336f, -0.000850f, +0.000174f, +0.007354f, -0.001870f, +0.011220f, +0.010504f, + +0.003152f, -0.009372f, -0.013707f, +0.014970f, -0.006729f, -0.015459f, -0.011038f, -0.024688f, +0.002874f, +0.004571f, + -0.004174f, +0.013832f, +0.004842f, +0.019279f, +0.017196f, -0.001530f, +0.007852f, -0.003354f, +0.004658f, +0.000249f, + -0.002173f, +0.007727f, +0.000063f, -0.002494f, +0.007167f, -0.003540f, +0.001678f, -0.002793f, -0.001951f, -0.003955f, + +0.001079f, +0.007604f, +0.004088f, -0.000592f, +0.000942f, -0.000060f, -0.006626f, -0.005798f, +0.001592f, +0.003874f, + +0.002732f, +0.001184f, -0.001950f, -0.002160f, +0.000571f, +0.001056f, +0.001060f, +0.003039f, +0.000372f, +0.001147f, + -0.000624f, +0.001626f, -0.001910f, -0.001762f, +0.000873f, -0.003041f, +0.000040f, +0.001474f, -0.000031f, +0.002429f, + -0.000761f, +0.000697f, +0.000721f, -0.000633f, -0.000376f, -0.002077f + }, + { + +0.000741f, -0.028466f, -0.001238f, -0.003229f, +0.003752f, +0.001823f, -0.000351f, -0.001030f, -0.007462f, -0.000076f, + +0.002538f, +0.003037f, -0.018011f, +0.003245f, -0.027633f, -0.006072f, +0.044640f, +0.004728f, -0.024883f, +0.026601f, + +0.033719f, +0.037412f, +0.019676f, +0.006871f, +0.016744f, +0.018585f, +0.025370f, -0.004697f, -0.023200f, +0.025191f, + +0.004128f, -0.003274f, +0.019779f, +0.030963f, +0.028338f, -0.008506f, +0.011968f, -0.002178f, +0.018157f, +0.007991f, + -0.012858f, +0.000011f, -0.011418f, +0.002657f, +0.010700f, +0.003908f, +0.000207f, -0.004530f, +0.015856f, -0.004105f, + -0.002010f, -0.006835f, -0.000722f, +0.000499f, -0.005828f, -0.000308f, -0.000857f, -0.002835f, -0.000679f, +0.001128f, + -0.002391f, -0.007355f, +0.000760f, -0.000831f, -0.001871f, -0.003905f, +0.006804f, -0.003897f, -0.003518f, +0.004202f, + +0.001255f, -0.000367f, -0.001815f, +0.001045f, -0.002317f, +0.000284f, +0.001515f, +0.001404f, -0.000056f, +0.003279f, + +0.001485f, +0.000115f, +0.001327f, +0.000650f, +0.001170f, -0.002626f, -0.000179f, +0.001989f, +0.000797f, -0.000033f, + -0.001907f, -0.001659f, -0.001306f, +0.000163f, +0.000550f, +0.000296f + }, + { + -0.072011f, -0.607115f, -0.002239f, +0.141530f, -0.018108f, -0.011547f, -0.011573f, -0.005336f, +0.027739f, -0.014286f, + +0.011060f, +0.044263f, +0.020171f, +0.026523f, +0.031534f, +0.005229f, -0.026441f, -0.006540f, -0.002765f, -0.005561f, + -0.017140f, -0.008509f, +0.004914f, +0.003549f, -0.004437f, -0.000113f, -0.001591f, -0.014994f, -0.003586f, -0.003185f, + -0.009489f, -0.022089f, +0.011149f, -0.014260f, -0.004543f, +0.005141f, +0.001703f, -0.012245f, +0.004163f, +0.002924f, + -0.003093f, -0.017375f, +0.002487f, -0.005043f, +0.001687f, +0.007336f, -0.005035f, -0.002373f, +0.002389f, +0.016359f, + +0.012611f, +0.002366f, +0.002239f, +0.000330f, -0.003687f, +0.004406f, +0.002650f, +0.001299f, +0.007186f, +0.005851f, + -0.003430f, -0.003132f, -0.003923f, +0.001558f, +0.001503f, -0.001105f, +0.000044f, +0.000948f, +0.001296f, +0.005994f, + +0.004546f, +0.001255f, -0.002020f, +0.001470f, +0.000659f, -0.001576f, -0.000582f, -0.001985f, -0.000614f, +0.001064f, + -0.000690f, -0.001577f, +0.000294f, +0.001261f, -0.001211f, +0.000971f, -0.000226f, -0.001675f, -0.001907f, +0.000240f, + -0.000024f, +0.000087f, -0.000550f, +0.001574f, -0.002079f, +0.000913f + }, + { + +0.005702f, +0.109048f, -0.009820f, -0.000394f, +0.005140f, -0.011743f, +0.004400f, -0.000390f, +0.002939f, +0.007039f, + -0.002551f, -0.015469f, -0.024446f, +0.028287f, -0.015153f, -0.014347f, +0.014845f, -0.013157f, -0.049812f, +0.010152f, + +0.029972f, -0.012390f, -0.013313f, -0.025027f, -0.016890f, -0.002136f, -0.002305f, +0.007692f, -0.003259f, +0.025185f, + -0.001519f, +0.001538f, -0.024070f, +0.007343f, -0.007468f, -0.003322f, -0.001225f, +0.003760f, -0.002482f, -0.014236f, + -0.004008f, +0.007065f, -0.001708f, -0.004152f, +0.000701f, +0.005060f, +0.000536f, +0.001181f, +0.008774f, -0.004931f, + -0.008260f, -0.006038f, +0.001194f, -0.003071f, +0.002607f, +0.000888f, -0.003058f, -0.003949f, -0.008393f, -0.003691f, + +0.001699f, +0.006540f, -0.008889f, -0.000023f, -0.001570f, +0.002623f, +0.001855f, +0.000514f, -0.006013f, +0.002574f, + +0.003865f, +0.006278f, +0.001867f, +0.005112f, -0.000545f, +0.000330f, +0.002307f, -0.002702f, +0.002637f, +0.002495f, + +0.002692f, +0.000154f, -0.000667f, -0.002864f, -0.001064f, +0.001881f, +0.001978f, +0.000524f, +0.000447f, +0.000129f, + -0.000905f, +0.000359f, -0.001504f, -0.001097f, -0.001107f, +0.000445f + }, + { + -0.046422f, -0.391819f, -0.004579f, -0.023413f, -0.006498f, -0.064752f, -0.059842f, +0.008923f, +0.023036f, -0.004494f, + -0.005132f, +0.013029f, -0.020142f, -0.010873f, -0.026070f, +0.001911f, -0.013405f, -0.020704f, -0.005670f, -0.022589f, + +0.017177f, -0.000556f, -0.011674f, -0.016749f, -0.002939f, -0.013905f, +0.012045f, -0.010702f, -0.013221f, +0.001415f, + -0.006024f, +0.000389f, +0.007459f, -0.003912f, +0.003151f, +0.001156f, +0.008334f, -0.011240f, +0.009148f, +0.007165f, + -0.009648f, -0.002113f, +0.002192f, +0.006641f, -0.003272f, -0.002267f, +0.002392f, +0.004453f, -0.002170f, +0.008362f, + +0.004844f, -0.005419f, -0.000968f, +0.004221f, -0.002803f, +0.009620f, -0.001799f, +0.003958f, +0.002264f, +0.003387f, + +0.002594f, -0.000329f, +0.000557f, -0.004609f, +0.002737f, -0.002310f, +0.001021f, -0.005412f, -0.001950f, -0.002193f, + -0.001221f, +0.000836f, -0.000801f, -0.001461f, +0.000546f, -0.002362f, -0.006341f, +0.001728f, -0.001402f, +0.003640f, + +0.000914f, +0.000113f, +0.001790f, -0.000343f, -0.000248f, +0.001868f, -0.002554f, +0.001060f, -0.001173f, -0.000376f, + -0.000244f, +0.000117f, +0.000615f, +0.001532f, -0.000138f, -0.001839f + }, + { + -0.001991f, +0.075447f, +0.012579f, -0.005080f, -0.007067f, +0.007712f, +0.018684f, -0.004375f, +0.000435f, -0.002134f, + -0.016013f, -0.001403f, -0.013197f, +0.032941f, +0.053745f, +0.046319f, -0.018006f, -0.000723f, +0.067390f, +0.035491f, + -0.005135f, +0.064100f, -0.015165f, -0.018207f, -0.015462f, +0.031383f, +0.046301f, +0.015277f, +0.049677f, -0.007092f, + +0.002588f, +0.006274f, -0.009056f, +0.009000f, +0.002028f, -0.000639f, +0.001935f, -0.000731f, -0.012231f, +0.002575f, + -0.006874f, -0.007917f, +0.006999f, +0.004887f, -0.002644f, +0.015333f, +0.004754f, -0.002573f, -0.009534f, -0.009183f, + +0.010872f, +0.002476f, -0.002483f, +0.000031f, +0.001363f, +0.009502f, -0.002870f, +0.008500f, +0.002720f, +0.000656f, + +0.006240f, -0.004357f, +0.002430f, +0.002613f, +0.003364f, -0.002914f, +0.005222f, +0.000945f, -0.002461f, +0.002577f, + -0.002461f, -0.002945f, +0.001530f, +0.001106f, +0.000282f, -0.001289f, +0.000175f, -0.001672f, -0.001975f, -0.000141f, + +0.002723f, -0.001952f, -0.003565f, +0.002085f, +0.000926f, -0.001786f, -0.002247f, +0.001548f, -0.000897f, +0.000924f, + +0.000449f, -0.000124f, +0.001071f, -0.000251f, +0.001809f, -0.000360f + }, + { + +0.107916f, -0.042160f, +0.004942f, -0.004232f, -0.013006f, -0.057321f, -0.030897f, -0.000314f, -0.010707f, -0.004440f, + -0.015135f, -0.019801f, -0.003266f, +0.025887f, +0.029602f, -0.003698f, +0.029484f, +0.007040f, -0.006165f, -0.018615f, + -0.014189f, -0.008266f, +0.017920f, +0.036480f, +0.007238f, -0.001403f, +0.010022f, -0.008021f, +0.018076f, -0.005478f, + +0.004939f, -0.011768f, +0.003807f, -0.004593f, -0.000235f, +0.002713f, +0.001889f, -0.001408f, +0.006729f, -0.002787f, + -0.009407f, +0.006458f, +0.018245f, +0.001645f, +0.012086f, +0.013313f, -0.002738f, -0.003744f, -0.001240f, +0.009840f, + -0.002127f, +0.000459f, +0.007426f, -0.000658f, -0.005192f, -0.004669f, -0.003274f, -0.000751f, +0.009420f, -0.002270f, + +0.003805f, -0.002872f, -0.001899f, +0.006189f, +0.003912f, -0.001633f, +0.002898f, +0.000760f, -0.004077f, -0.005995f, + +0.004285f, +0.005965f, -0.002462f, -0.000309f, -0.000328f, -0.002451f, +0.001040f, +0.000890f, -0.004023f, -0.003025f, + -0.002233f, -0.000149f, -0.002810f, -0.003337f, -0.001976f, +0.001121f, +0.002480f, +0.002267f, +0.000329f, -0.000514f, + +0.000306f, +0.002329f, -0.001795f, -0.000694f, +0.000851f, -0.000677f + }, + { + -0.013656f, -0.007875f, +0.011505f, -0.005394f, +0.003642f, -0.002143f, +0.009829f, -0.001907f, +0.015279f, +0.022374f, + +0.010994f, +0.018978f, +0.004239f, -0.023702f, +0.009652f, -0.019377f, +0.012756f, -0.028615f, -0.008035f, -0.032172f, + -0.013061f, -0.052718f, -0.006828f, -0.029544f, -0.008681f, -0.039387f, -0.022396f, -0.012205f, +0.010415f, +0.004279f, + +0.006651f, +0.006752f, +0.002510f, +0.002058f, +0.004517f, -0.001977f, +0.010168f, -0.010812f, +0.002766f, +0.009517f, + -0.008136f, +0.005820f, -0.017618f, -0.005776f, +0.002421f, +0.016685f, -0.007636f, -0.016996f, +0.001023f, +0.002509f, + -0.001499f, -0.003035f, -0.002778f, -0.006161f, -0.000588f, -0.010276f, -0.000488f, +0.004769f, -0.000879f, +0.004797f, + +0.005732f, -0.004303f, -0.007409f, +0.001048f, +0.002877f, -0.004671f, +0.004494f, +0.000605f, -0.000031f, +0.002867f, + -0.001532f, -0.001119f, +0.001447f, +0.006421f, -0.001050f, -0.004883f, +0.003897f, +0.002317f, -0.000919f, +0.001444f, + -0.001830f, +0.001003f, +0.000793f, +0.002543f, +0.001365f, +0.001628f, +0.001453f, +0.000958f, +0.001671f, -0.002046f, + -0.002817f, -0.000820f, +0.000147f, +0.001118f, +0.000546f, +0.000589f + }, + { + +0.059105f, +0.186549f, -0.003387f, -0.021234f, -0.024502f, -0.029342f, -0.014941f, +0.012507f, +0.017957f, +0.010749f, + -0.001049f, +0.029258f, +0.006138f, +0.003755f, -0.018383f, +0.023020f, -0.009883f, -0.012306f, +0.011030f, +0.020862f, + +0.017261f, -0.007318f, -0.017312f, -0.024798f, -0.009080f, -0.032841f, +0.009506f, +0.002015f, +0.007781f, +0.011220f, + +0.010578f, +0.003330f, -0.000479f, -0.011398f, +0.010666f, -0.011372f, +0.000447f, -0.016262f, -0.010031f, +0.000110f, + +0.000221f, +0.011544f, +0.020280f, +0.012577f, +0.000929f, +0.002287f, +0.006463f, +0.011404f, +0.013603f, +0.007451f, + -0.009485f, -0.001166f, -0.003341f, +0.006312f, +0.002068f, +0.000303f, +0.003949f, +0.007201f, +0.005966f, +0.005742f, + -0.001038f, -0.001337f, -0.002502f, +0.002299f, -0.000517f, -0.002729f, -0.002216f, -0.004847f, -0.003149f, +0.002621f, + +0.001916f, -0.001599f, +0.002963f, +0.002554f, -0.000153f, +0.003541f, +0.001023f, -0.000481f, -0.000318f, -0.001721f, + -0.001825f, -0.000659f, +0.001150f, -0.000314f, +0.001004f, +0.002380f, -0.002139f, +0.000802f, +0.000899f, -0.000539f, + -0.003552f, +0.000966f, +0.002977f, +0.000626f, -0.001655f, +0.002856f + } + }, + { + { + +0.000375f, -0.024613f, +0.004998f, -0.009052f, -0.008551f, +0.000547f, -0.001436f, +0.000878f, -0.000840f, +0.024249f, + +0.000716f, +0.006428f, +0.018128f, +0.014194f, -0.040790f, +0.001038f, -0.026294f, +0.001754f, -0.002233f, +0.006768f, + +0.039594f, -0.019635f, +0.015790f, -0.035311f, -0.009525f, -0.008060f, +0.018058f, +0.014282f, +0.015879f, +0.001521f, + +0.001370f, +0.008148f, -0.018325f, +0.009780f, -0.003435f, +0.011062f, -0.010527f, -0.013900f, +0.006262f, +0.008021f, + +0.006420f, -0.004429f, -0.005687f, +0.003113f, +0.014647f, -0.007101f, -0.002722f, +0.010097f, +0.003785f, +0.004690f, + +0.004805f, -0.001388f, +0.002837f, +0.001121f, +0.003518f, -0.003379f, +0.000608f, +0.000538f, -0.000897f, +0.000988f, + +0.000540f, +0.003665f, -0.003365f, -0.000413f, +0.001455f, +0.000355f, +0.002936f, +0.001190f, +0.002214f, +0.000399f, + -0.001067f, +0.001781f, -0.001969f, +0.004132f, +0.000418f, +0.002556f, +0.001050f, -0.001266f, +0.000954f, -0.001109f, + +0.000762f, -0.000962f, +0.000970f, +0.000987f, +0.000260f, +0.000267f, +0.001015f, +0.001138f, -0.000446f, +0.000602f, + -0.001416f, +0.000481f, -0.000939f, +0.000807f, -0.000209f, +0.001145f + }, + { + +0.018257f, -0.154483f, -0.037326f, -0.056208f, +0.008325f, -0.004541f, -0.005895f, -0.002269f, -0.011291f, +0.004673f, + -0.002653f, -0.008859f, +0.007506f, +0.000193f, -0.008183f, +0.018135f, -0.009332f, -0.001952f, -0.002145f, -0.014121f, + +0.011679f, +0.014946f, -0.007173f, -0.008708f, -0.017489f, +0.001663f, -0.003309f, +0.013409f, -0.000323f, +0.003077f, + -0.003124f, +0.006461f, -0.009600f, +0.002349f, +0.002160f, -0.010505f, -0.010148f, -0.001811f, -0.005746f, -0.005741f, + +0.007568f, -0.007997f, +0.007609f, +0.005209f, +0.000098f, -0.000026f, -0.003033f, -0.005999f, +0.000489f, -0.005343f, + -0.000693f, +0.001165f, -0.004477f, +0.004704f, -0.000259f, +0.001589f, +0.002509f, +0.000245f, -0.003827f, +0.000448f, + +0.000361f, -0.001557f, -0.001524f, +0.001726f, +0.004066f, -0.000894f, +0.001952f, +0.005744f, -0.000284f, +0.003295f, + -0.000425f, -0.001691f, +0.002489f, -0.001121f, +0.001417f, -0.001585f, +0.000221f, -0.001389f, +0.000079f, +0.002308f, + -0.001272f, +0.001033f, -0.002030f, -0.001174f, +0.001309f, -0.000016f, +0.001487f, -0.001642f, -0.001953f, +0.000275f, + +0.000123f, +0.001296f, +0.000962f, -0.001841f, -0.000438f, -0.000032f + }, + { + +0.003799f, -0.072499f, -0.017891f, -0.013674f, -0.006035f, +0.002199f, +0.001979f, +0.000769f, +0.000404f, -0.013662f, + +0.004383f, +0.023948f, -0.020746f, +0.000246f, +0.019845f, +0.002217f, +0.004105f, -0.001113f, -0.014758f, +0.010569f, + -0.005110f, +0.010514f, +0.012533f, +0.011196f, +0.009878f, +0.000651f, -0.001346f, -0.009327f, +0.001259f, -0.004251f, + -0.001148f, +0.001512f, -0.016069f, -0.005010f, +0.006262f, +0.002145f, -0.007571f, +0.010826f, -0.016208f, +0.006283f, + -0.000574f, +0.002520f, +0.003929f, -0.002487f, +0.006908f, +0.001204f, +0.000838f, +0.004078f, -0.002232f, -0.000191f, + +0.000516f, +0.001671f, -0.000547f, -0.002520f, -0.003070f, +0.003676f, -0.000125f, +0.007070f, +0.001648f, +0.000695f, + -0.004226f, +0.005402f, -0.003793f, +0.000198f, -0.001103f, +0.001615f, -0.000822f, -0.002638f, +0.002292f, -0.000942f, + -0.001451f, -0.000984f, -0.000679f, +0.001653f, -0.001979f, +0.000436f, -0.000400f, +0.003118f, +0.000100f, +0.001608f, + +0.000955f, +0.000327f, +0.000580f, -0.001746f, +0.000951f, -0.000748f, -0.000756f, +0.000303f, -0.001121f, -0.000300f, + +0.000582f, +0.001521f, -0.001644f, -0.000758f, -0.000343f, +0.000885f + }, + { + +0.002276f, +0.032537f, -0.006922f, -0.009229f, +0.002432f, +0.000565f, -0.003053f, +0.003000f, +0.000701f, -0.005204f, + +0.002790f, -0.011888f, -0.001405f, +0.013159f, +0.060506f, +0.001391f, +0.015724f, -0.024664f, -0.008408f, +0.005028f, + -0.003556f, +0.027001f, -0.000871f, -0.002526f, -0.005279f, +0.007623f, +0.019892f, -0.000528f, -0.013558f, +0.008673f, + +0.004081f, -0.020478f, -0.012491f, +0.007662f, -0.001925f, +0.010270f, +0.016482f, -0.004159f, -0.010090f, +0.006812f, + +0.010104f, +0.009668f, -0.004830f, -0.000128f, +0.007883f, +0.000640f, -0.003897f, +0.000362f, -0.004585f, +0.003907f, + -0.003211f, -0.001431f, +0.003101f, -0.000310f, -0.002285f, +0.002643f, -0.003564f, +0.003352f, +0.003235f, -0.006100f, + +0.004075f, +0.001032f, -0.003970f, -0.003174f, +0.003468f, +0.000478f, +0.001695f, +0.000764f, +0.001045f, -0.002412f, + -0.001319f, -0.002131f, -0.000807f, -0.002045f, +0.001990f, -0.000346f, -0.000927f, -0.000504f, -0.001881f, +0.000279f, + -0.000799f, +0.000577f, -0.000328f, -0.000448f, +0.001331f, -0.001091f, +0.001144f, -0.000785f, -0.000246f, -0.000516f, + +0.000388f, -0.000742f, +0.001070f, +0.000287f, -0.000606f, -0.001181f + }, + { + +0.078009f, -0.130401f, +0.014911f, +0.068014f, -0.003452f, +0.005844f, -0.007656f, +0.001515f, -0.011333f, -0.010509f, + +0.019120f, -0.018295f, +0.022514f, +0.000815f, -0.016653f, +0.016097f, +0.000575f, -0.014829f, +0.028127f, +0.006224f, + -0.003635f, -0.013505f, +0.000649f, -0.002750f, -0.010742f, +0.008906f, -0.004838f, +0.018827f, -0.013676f, +0.001851f, + -0.001725f, -0.003167f, +0.000410f, -0.000772f, -0.003788f, -0.003596f, +0.007197f, -0.009108f, +0.017404f, -0.008916f, + +0.012343f, +0.000627f, +0.001595f, -0.005994f, +0.001003f, +0.004365f, -0.009251f, -0.002361f, +0.006017f, -0.011112f, + -0.002962f, +0.002280f, -0.009510f, +0.002749f, -0.006248f, +0.002457f, +0.001223f, -0.008782f, +0.001068f, +0.006376f, + -0.003355f, +0.004693f, -0.005268f, -0.001825f, -0.001462f, +0.004066f, -0.002406f, -0.000773f, -0.000516f, +0.001901f, + -0.003523f, +0.001812f, -0.002838f, +0.000855f, +0.000123f, -0.000335f, +0.001690f, +0.001932f, -0.000522f, +0.000108f, + -0.001161f, +0.000473f, -0.001120f, +0.001708f, -0.000733f, -0.001645f, +0.001333f, -0.001213f, +0.001099f, +0.000520f, + -0.000070f, -0.000246f, +0.000135f, +0.000525f, +0.000202f, +0.000644f + }, + { + +0.001743f, -0.019271f, -0.013570f, -0.002860f, +0.003061f, +0.001394f, -0.000934f, -0.003583f, +0.005261f, -0.005109f, + +0.010896f, +0.004836f, -0.003454f, +0.001382f, -0.008340f, +0.007191f, -0.030522f, +0.004091f, +0.009440f, -0.011111f, + +0.019645f, -0.001882f, -0.004754f, -0.021057f, -0.008538f, +0.054514f, -0.006952f, -0.008535f, +0.013306f, -0.016085f, + -0.000092f, +0.000283f, +0.006502f, +0.004914f, -0.013491f, +0.004518f, -0.005791f, +0.003565f, -0.001145f, +0.002292f, + +0.009533f, -0.003171f, -0.011182f, -0.005916f, -0.004608f, +0.004106f, -0.003283f, +0.001310f, -0.005391f, +0.008174f, + +0.008416f, -0.000319f, -0.004106f, +0.004025f, +0.004619f, -0.000007f, -0.002594f, -0.001136f, -0.002470f, +0.002097f, + -0.003238f, -0.002708f, -0.002897f, +0.000896f, +0.006069f, -0.000802f, -0.003068f, +0.001832f, -0.001815f, -0.000558f, + +0.001230f, +0.001242f, +0.000212f, +0.002054f, +0.004181f, -0.002059f, -0.001265f, +0.000137f, +0.001162f, -0.001211f, + -0.000162f, -0.003330f, +0.000559f, +0.000005f, -0.000670f, +0.000781f, -0.000436f, +0.000099f, -0.002492f, +0.000431f, + +0.000115f, -0.000919f, +0.000283f, -0.000143f, -0.000057f, +0.000229f + }, + { + +0.070552f, +0.053573f, -0.009624f, +0.105289f, -0.012326f, +0.001053f, +0.012697f, +0.004978f, -0.015890f, -0.022649f, + +0.010940f, +0.002104f, +0.018443f, +0.008921f, +0.018736f, -0.002257f, +0.009278f, +0.008560f, +0.000079f, +0.007109f, + -0.019127f, -0.018895f, +0.003063f, -0.014951f, -0.001891f, +0.002065f, +0.010599f, -0.003045f, +0.002330f, +0.000551f, + -0.001755f, -0.001173f, -0.009305f, +0.009134f, -0.001826f, -0.005655f, -0.005129f, -0.009410f, +0.009271f, -0.002842f, + -0.012239f, +0.007237f, -0.003614f, +0.002210f, -0.003307f, -0.006680f, +0.008705f, -0.005383f, +0.002239f, +0.002018f, + -0.005652f, +0.004266f, +0.011914f, -0.000690f, +0.000810f, -0.001767f, +0.006122f, +0.002083f, -0.001580f, -0.002701f, + -0.000951f, -0.000382f, +0.000535f, -0.001349f, -0.001451f, -0.000436f, -0.000903f, -0.000179f, +0.001447f, +0.000246f, + +0.000558f, -0.000136f, +0.000228f, +0.000018f, -0.001215f, -0.001207f, -0.001797f, -0.000057f, -0.001119f, -0.000369f, + -0.001509f, +0.001402f, -0.001105f, +0.000567f, +0.001338f, -0.001586f, +0.000551f, -0.000201f, -0.001426f, +0.000631f, + -0.001712f, +0.001289f, +0.000968f, -0.000932f, -0.000248f, -0.001929f + }, + { + +0.002111f, -0.014149f, +0.014504f, -0.005823f, -0.003179f, +0.000564f, -0.001397f, +0.002853f, -0.002999f, -0.000576f, + -0.000053f, -0.004820f, -0.013210f, -0.000829f, -0.007219f, -0.014647f, -0.016726f, -0.009892f, -0.005312f, +0.030228f, + +0.001197f, +0.004109f, -0.003045f, -0.003780f, +0.023643f, +0.019639f, +0.004345f, -0.001026f, -0.012079f, +0.019051f, + +0.006299f, -0.013600f, +0.013180f, +0.000336f, +0.004694f, -0.013302f, +0.010484f, -0.009754f, +0.009364f, -0.000951f, + -0.018455f, +0.004637f, -0.008557f, +0.000239f, -0.005268f, -0.001571f, +0.001809f, -0.008573f, +0.013252f, -0.006068f, + -0.000649f, -0.006415f, +0.003069f, +0.002195f, -0.003940f, +0.000176f, -0.000950f, -0.005512f, -0.001369f, +0.003602f, + +0.002012f, -0.001172f, +0.002383f, -0.001799f, -0.000910f, -0.004778f, +0.002854f, -0.002111f, -0.000900f, +0.002982f, + +0.000356f, +0.000185f, -0.001655f, +0.001518f, -0.000936f, +0.001070f, +0.001208f, +0.001204f, -0.001199f, +0.001771f, + +0.000998f, -0.001154f, -0.001153f, -0.001654f, +0.002152f, -0.001175f, +0.000324f, +0.001783f, +0.000646f, +0.001766f, + -0.000015f, +0.000449f, -0.000207f, -0.000174f, +0.000262f, +0.000572f + }, + { + +0.091009f, -0.367194f, +0.008985f, +0.116226f, -0.031367f, +0.001904f, -0.001499f, -0.004436f, +0.019206f, -0.006796f, + -0.002362f, +0.010185f, -0.018899f, +0.001895f, +0.014364f, +0.012913f, -0.017843f, +0.012012f, +0.010866f, +0.002363f, + -0.005043f, -0.005565f, +0.002855f, +0.004489f, -0.008262f, +0.004348f, +0.007867f, -0.013927f, -0.004944f, +0.001085f, + +0.003280f, -0.011230f, +0.012890f, -0.010843f, -0.002628f, -0.000460f, -0.000379f, -0.001801f, +0.018150f, +0.000773f, + +0.005410f, -0.002511f, +0.008806f, -0.001132f, +0.000785f, +0.006427f, +0.000912f, +0.001593f, -0.002126f, +0.002325f, + +0.004824f, +0.003874f, +0.001395f, -0.001409f, -0.006468f, +0.001633f, -0.002097f, -0.002271f, +0.003499f, +0.001898f, + -0.003898f, -0.001255f, +0.000075f, +0.001792f, -0.001655f, -0.001641f, -0.000508f, +0.001069f, +0.000579f, +0.003282f, + -0.000408f, -0.000280f, +0.000376f, -0.000323f, -0.000538f, -0.000433f, +0.000048f, -0.002085f, -0.000908f, +0.002581f, + +0.001546f, -0.001975f, -0.001208f, +0.001057f, +0.000000f, +0.000810f, +0.000228f, +0.001326f, -0.000921f, -0.000255f, + +0.000559f, +0.001004f, -0.001940f, +0.001092f, -0.000503f, -0.000358f + }, + { + -0.004117f, +0.086314f, +0.004614f, +0.013132f, -0.000210f, -0.019261f, -0.012160f, -0.006067f, -0.001463f, +0.002931f, + +0.004396f, -0.010449f, -0.001839f, +0.033520f, -0.011748f, -0.008762f, +0.004164f, +0.004443f, -0.010383f, +0.015734f, + +0.014150f, -0.003174f, +0.018017f, +0.005611f, +0.009687f, +0.003346f, +0.002678f, +0.031934f, +0.000869f, +0.010804f, + -0.008149f, +0.007709f, -0.018187f, +0.003797f, -0.007330f, +0.001766f, -0.000740f, -0.001977f, +0.000895f, -0.008525f, + -0.005408f, +0.007714f, +0.001252f, -0.007054f, +0.002201f, +0.004505f, +0.003987f, -0.002348f, -0.001368f, -0.009558f, + -0.002843f, -0.000907f, +0.002332f, -0.001207f, +0.005326f, +0.003299f, -0.002160f, -0.003803f, -0.001531f, +0.002049f, + -0.003291f, +0.005300f, -0.003163f, +0.001128f, -0.002987f, +0.000906f, +0.000631f, +0.002220f, -0.002267f, +0.001952f, + -0.001568f, +0.001516f, -0.001367f, +0.003086f, -0.002834f, +0.000133f, +0.004237f, -0.002824f, -0.000779f, +0.000173f, + +0.000294f, -0.000383f, -0.000244f, -0.000628f, +0.002189f, +0.000525f, -0.000532f, -0.001189f, +0.000009f, +0.000142f, + -0.001277f, +0.000619f, +0.000033f, +0.001053f, -0.000700f, -0.000152f + }, + { + +0.045184f, -0.289196f, -0.012278f, -0.000500f, +0.023771f, +0.006847f, -0.005837f, -0.014631f, +0.012558f, -0.003044f, + +0.000828f, +0.013249f, -0.010340f, +0.006224f, -0.013447f, +0.009571f, -0.001383f, -0.017196f, -0.003228f, -0.006044f, + +0.009604f, -0.005092f, +0.004576f, -0.009721f, +0.004045f, +0.003472f, +0.009116f, -0.010722f, +0.001322f, +0.009215f, + +0.001015f, +0.005665f, +0.004647f, -0.003994f, +0.004848f, -0.005247f, +0.009163f, -0.003961f, +0.007451f, +0.000282f, + -0.001944f, +0.001689f, -0.002258f, +0.002301f, -0.001010f, +0.001257f, +0.000826f, +0.001182f, -0.002834f, +0.007590f, + -0.002034f, -0.008597f, -0.003339f, -0.001282f, -0.000035f, +0.007892f, -0.003401f, +0.001883f, -0.000119f, +0.001697f, + -0.000036f, -0.000536f, -0.001466f, -0.006661f, +0.001874f, +0.000991f, +0.006360f, -0.003551f, -0.001500f, +0.002009f, + -0.000571f, +0.001128f, +0.002549f, -0.000836f, -0.001445f, -0.000396f, -0.002883f, +0.002769f, -0.002065f, +0.002151f, + +0.001181f, -0.000815f, +0.000227f, +0.001260f, -0.000660f, +0.000754f, -0.002512f, +0.001517f, +0.000264f, +0.000644f, + -0.000124f, +0.000982f, -0.000109f, +0.000263f, -0.000206f, -0.001549f + }, + { + +0.003411f, +0.047445f, -0.008514f, -0.003509f, -0.002764f, +0.009717f, +0.014535f, -0.002419f, +0.002485f, +0.000705f, + -0.009213f, -0.003084f, -0.004547f, +0.040195f, -0.008193f, +0.003508f, -0.020567f, -0.000740f, +0.042746f, +0.007179f, + -0.012981f, +0.056532f, +0.006219f, +0.007430f, -0.020806f, +0.010765f, +0.006620f, -0.015129f, +0.035193f, -0.003661f, + +0.000298f, +0.001042f, -0.013461f, +0.005107f, -0.004702f, -0.000504f, +0.005504f, +0.000136f, -0.012450f, +0.007930f, + -0.001029f, -0.001384f, +0.009140f, -0.004706f, -0.009634f, +0.002547f, +0.001730f, +0.005024f, -0.001050f, -0.003146f, + +0.008035f, +0.001024f, +0.001285f, -0.003243f, -0.004571f, +0.001900f, -0.005875f, +0.006602f, -0.000775f, -0.001692f, + +0.004497f, +0.000175f, -0.001726f, -0.004851f, +0.004499f, +0.000765f, +0.001287f, +0.000453f, -0.002671f, +0.001688f, + -0.000907f, -0.002513f, +0.000774f, -0.000070f, +0.002036f, +0.000974f, +0.002197f, -0.001507f, -0.002592f, +0.000024f, + +0.002991f, -0.001237f, -0.003273f, +0.002025f, +0.002845f, +0.001369f, -0.000578f, +0.000548f, -0.000836f, +0.001989f, + +0.002053f, +0.000477f, -0.000045f, -0.000982f, +0.001258f, -0.001280f + }, + { + -0.069158f, -0.273804f, +0.002358f, -0.014624f, +0.010684f, +0.022158f, +0.029815f, -0.001725f, -0.018819f, +0.015207f, + +0.008733f, +0.000661f, +0.008350f, +0.019052f, +0.005830f, -0.012995f, +0.011640f, -0.020410f, +0.003747f, +0.004240f, + -0.008899f, -0.018031f, -0.002671f, +0.012742f, -0.008948f, +0.009214f, +0.010923f, -0.020134f, +0.019748f, -0.001149f, + +0.005775f, -0.012971f, +0.006767f, -0.009962f, -0.001412f, +0.002886f, -0.000552f, +0.003262f, +0.008855f, +0.000717f, + -0.004815f, -0.001717f, +0.006349f, -0.003338f, +0.001328f, +0.006914f, -0.008425f, +0.000088f, +0.004367f, +0.005969f, + -0.003982f, -0.002143f, +0.004899f, +0.001334f, +0.002304f, -0.004147f, -0.003108f, -0.003310f, +0.006153f, -0.000974f, + +0.003951f, -0.002699f, -0.005493f, +0.000580f, -0.000168f, -0.004273f, +0.002982f, +0.002557f, +0.000148f, -0.002080f, + +0.001756f, +0.004374f, -0.000548f, -0.000232f, +0.000256f, -0.000737f, +0.001058f, +0.002669f, -0.000135f, +0.000091f, + -0.003109f, +0.001336f, -0.001236f, -0.000796f, -0.000030f, -0.001347f, -0.000198f, +0.000937f, -0.001044f, -0.001657f, + -0.000834f, +0.001113f, -0.001322f, -0.000512f, +0.000982f, -0.000644f + }, + { + +0.012357f, -0.016816f, -0.024235f, -0.001691f, +0.004064f, -0.011070f, +0.002242f, -0.010979f, -0.010704f, -0.002644f, + -0.009104f, +0.011306f, +0.027859f, -0.040475f, -0.019191f, +0.007403f, +0.025045f, -0.007925f, +0.004404f, -0.023785f, + +0.014258f, -0.016797f, +0.026774f, -0.008486f, +0.015091f, -0.008162f, -0.006571f, +0.004175f, +0.010746f, -0.015068f, + +0.004160f, +0.009670f, +0.002335f, +0.011431f, +0.008977f, -0.010461f, +0.011611f, -0.007523f, -0.003806f, +0.002494f, + -0.003793f, +0.010624f, -0.009993f, +0.001328f, -0.000079f, +0.004425f, -0.005889f, -0.003048f, +0.006769f, +0.001575f, + -0.000994f, -0.002484f, +0.002573f, -0.007296f, +0.005330f, -0.004140f, +0.001706f, +0.004641f, -0.005465f, +0.000672f, + +0.001521f, -0.002672f, -0.005676f, +0.000317f, +0.001079f, -0.004535f, +0.007389f, +0.002130f, -0.004519f, -0.000364f, + -0.000227f, -0.000099f, +0.001623f, +0.006048f, +0.000275f, -0.002805f, +0.003483f, +0.002050f, +0.000557f, +0.001692f, + -0.001777f, +0.000509f, -0.002316f, +0.000383f, -0.000257f, +0.001157f, +0.001134f, -0.000619f, +0.000439f, -0.001622f, + -0.001720f, +0.000054f, -0.001396f, -0.000477f, -0.000245f, +0.000125f + }, + { + -0.067596f, +0.044247f, +0.019953f, -0.001057f, +0.032606f, +0.018984f, -0.010356f, +0.000034f, +0.000101f, -0.013428f, + -0.017469f, +0.010787f, -0.023151f, -0.013398f, -0.025103f, +0.002372f, -0.024158f, -0.000429f, +0.009792f, +0.010910f, + +0.005305f, -0.016663f, -0.002566f, +0.008070f, +0.008306f, -0.013918f, +0.016639f, -0.001763f, +0.003397f, -0.004562f, + -0.004820f, +0.001942f, +0.002530f, -0.010269f, +0.010606f, -0.008358f, +0.004147f, +0.004972f, -0.001688f, +0.000431f, + +0.006170f, +0.005738f, +0.000571f, +0.000335f, -0.002474f, -0.005782f, -0.001433f, +0.003608f, +0.005818f, +0.000980f, + -0.011029f, +0.002472f, +0.001749f, +0.005431f, -0.001404f, -0.002753f, +0.001883f, +0.001117f, -0.001915f, +0.006551f, + +0.004347f, -0.001822f, -0.003950f, -0.000883f, -0.000016f, +0.003104f, +0.000932f, -0.002299f, -0.001578f, +0.004411f, + +0.001225f, -0.002908f, +0.001182f, +0.001427f, -0.001521f, +0.001617f, +0.000698f, -0.002318f, -0.001261f, +0.000247f, + +0.000575f, +0.000405f, -0.001174f, -0.000814f, +0.000685f, -0.000065f, -0.002876f, +0.001715f, +0.000123f, +0.000317f, + -0.001825f, +0.000787f, +0.000584f, +0.000519f, +0.000243f, +0.002026f + } + }, + { + { + -0.001058f, -0.013486f, -0.005863f, -0.014193f, -0.003597f, +0.000297f, -0.003004f, +0.000602f, +0.003709f, +0.005604f, + +0.018715f, +0.014507f, +0.006357f, -0.000826f, -0.023606f, -0.009586f, -0.023096f, +0.000589f, +0.002548f, -0.001893f, + +0.030324f, +0.005717f, +0.008758f, +0.004527f, -0.026790f, -0.000320f, +0.003350f, +0.005077f, +0.020570f, +0.019771f, + -0.000668f, -0.006133f, +0.007849f, -0.003510f, -0.001614f, +0.000787f, -0.001316f, -0.010572f, -0.002185f, +0.007923f, + +0.000572f, +0.001443f, -0.003634f, +0.001769f, +0.006124f, +0.001957f, -0.001677f, +0.004205f, +0.001348f, +0.005712f, + +0.005184f, +0.001179f, +0.001005f, +0.003819f, -0.000163f, +0.000203f, +0.002261f, -0.000620f, -0.002060f, +0.001848f, + -0.000108f, +0.003379f, -0.001859f, -0.000207f, -0.001803f, +0.002290f, +0.002464f, +0.001195f, +0.004575f, -0.000408f, + -0.000960f, -0.000202f, +0.000427f, +0.000437f, +0.002125f, +0.001757f, +0.000858f, -0.000067f, -0.000112f, -0.000244f, + +0.000649f, +0.000724f, +0.000675f, +0.000402f, +0.000736f, +0.000735f, -0.000048f, +0.001429f, -0.000566f, -0.000140f, + -0.000743f, -0.000399f, +0.000043f, +0.001292f, -0.000479f, +0.000308f + }, + { + -0.017648f, -0.171606f, -0.022307f, -0.020279f, -0.012084f, -0.003122f, +0.003218f, -0.013834f, -0.010690f, +0.003439f, + -0.004160f, +0.003461f, +0.000783f, -0.006328f, +0.002919f, +0.005402f, -0.010268f, +0.003279f, -0.006126f, -0.011422f, + +0.014734f, -0.004152f, +0.008463f, -0.009749f, -0.022388f, +0.001581f, -0.003237f, +0.006488f, +0.002059f, -0.006187f, + +0.007850f, -0.003712f, +0.006194f, -0.006701f, -0.006726f, +0.001262f, -0.005326f, -0.006293f, +0.000131f, -0.002508f, + -0.000424f, +0.001236f, +0.003900f, +0.001255f, +0.007296f, -0.001988f, -0.002904f, -0.002438f, -0.003198f, -0.003694f, + -0.002278f, -0.000205f, +0.005830f, -0.001269f, +0.001006f, +0.001214f, +0.001373f, +0.003449f, -0.002205f, -0.001155f, + +0.002289f, +0.000381f, -0.004069f, +0.004086f, +0.002666f, +0.001195f, +0.000973f, +0.003402f, +0.001478f, +0.001047f, + +0.000356f, -0.001278f, -0.000121f, -0.000233f, +0.000268f, -0.001672f, +0.000156f, -0.000889f, +0.001343f, -0.000091f, + +0.000509f, -0.000649f, -0.001311f, -0.000010f, +0.000223f, +0.000457f, +0.000342f, -0.000913f, -0.001448f, -0.000285f, + +0.000735f, +0.000641f, +0.000901f, -0.001024f, -0.000716f, -0.000175f + }, + { + -0.002328f, -0.035070f, -0.037193f, -0.041164f, +0.003469f, +0.003086f, +0.006475f, +0.001662f, -0.003352f, -0.007867f, + +0.000416f, +0.009279f, -0.003166f, -0.008317f, -0.002471f, +0.004055f, -0.003305f, -0.004034f, -0.002787f, -0.003562f, + +0.010920f, +0.003610f, +0.011320f, +0.009705f, +0.008113f, +0.003879f, +0.000850f, -0.000617f, -0.007370f, -0.005460f, + +0.002098f, -0.001410f, -0.009680f, -0.008615f, +0.007648f, +0.003232f, -0.001682f, -0.006674f, -0.000760f, +0.000750f, + +0.000279f, +0.001462f, +0.003469f, +0.001494f, +0.003882f, +0.003775f, -0.005160f, +0.001612f, +0.003360f, +0.002473f, + -0.001802f, -0.000525f, -0.000272f, -0.000817f, -0.001978f, +0.001436f, +0.002415f, +0.004422f, +0.002659f, -0.000375f, + -0.001241f, +0.001144f, -0.000019f, +0.000835f, -0.002519f, +0.000058f, +0.000636f, +0.000639f, -0.001796f, +0.000719f, + +0.000249f, -0.001566f, -0.001124f, +0.001683f, -0.000220f, -0.000275f, -0.001020f, +0.001442f, +0.001897f, +0.001450f, + +0.000755f, +0.000985f, -0.000710f, -0.000551f, +0.000854f, +0.000152f, -0.001408f, -0.000866f, -0.000283f, -0.000473f, + +0.000861f, +0.000782f, -0.000659f, -0.000387f, -0.000482f, +0.000034f + }, + { + -0.003741f, +0.017142f, +0.006336f, -0.002477f, -0.000556f, -0.000375f, -0.002457f, +0.001717f, -0.000343f, -0.002287f, + +0.001217f, -0.006333f, +0.000422f, +0.013986f, +0.054315f, +0.013038f, -0.028263f, +0.009848f, -0.021480f, -0.013448f, + +0.013200f, +0.013819f, +0.005741f, -0.002322f, -0.001143f, -0.002798f, +0.011272f, +0.006066f, -0.002323f, +0.013205f, + -0.014805f, -0.020320f, +0.005502f, +0.005984f, -0.000423f, +0.009279f, +0.011507f, -0.000793f, -0.001483f, +0.003991f, + +0.008092f, +0.007950f, +0.001170f, -0.004916f, +0.001517f, +0.004140f, +0.002355f, +0.000953f, -0.003549f, +0.005082f, + -0.005525f, +0.000594f, -0.000400f, +0.002842f, -0.001342f, +0.000318f, -0.002293f, +0.002196f, +0.000195f, -0.005056f, + +0.000302f, +0.002413f, -0.002918f, -0.001322f, +0.002066f, +0.001201f, +0.001015f, +0.000881f, +0.000474f, -0.000593f, + -0.004053f, -0.002750f, -0.001381f, +0.000129f, -0.000050f, -0.000430f, -0.000149f, -0.000145f, -0.001535f, +0.000059f, + +0.000594f, -0.000123f, -0.000068f, +0.000338f, +0.000179f, +0.000022f, +0.000000f, +0.000356f, +0.000011f, -0.000474f, + -0.000259f, +0.000218f, +0.000438f, +0.001026f, -0.000698f, +0.000176f + }, + { + -0.049011f, +0.070004f, -0.021702f, +0.070562f, +0.010487f, -0.000167f, -0.006627f, -0.003615f, -0.003017f, -0.010495f, + +0.007944f, +0.008040f, +0.004250f, +0.000454f, -0.000350f, +0.006485f, -0.001456f, -0.008322f, +0.013826f, +0.006218f, + -0.006522f, -0.003132f, -0.002591f, -0.008755f, -0.000126f, +0.005312f, -0.010164f, +0.014303f, -0.000373f, -0.003544f, + +0.002708f, -0.004622f, +0.001746f, -0.001772f, +0.000550f, +0.001239f, -0.012871f, +0.001361f, +0.003059f, +0.000182f, + +0.007961f, +0.001322f, +0.001596f, +0.000940f, -0.006418f, -0.000785f, -0.002038f, -0.001715f, -0.005309f, -0.002294f, + -0.000263f, -0.001946f, -0.000383f, -0.005284f, -0.002986f, +0.001350f, -0.000075f, -0.001974f, -0.000582f, +0.000511f, + +0.001550f, -0.000975f, +0.001051f, -0.001682f, -0.001293f, -0.000600f, +0.000645f, -0.002742f, +0.000597f, -0.001138f, + -0.002299f, +0.000676f, -0.001008f, +0.000987f, -0.000499f, +0.000311f, +0.001337f, +0.001695f, -0.000143f, +0.000555f, + -0.001068f, -0.000286f, +0.000649f, +0.000028f, -0.000793f, -0.001225f, +0.000183f, -0.000388f, +0.000334f, +0.000166f, + +0.000255f, -0.000142f, +0.000236f, -0.000846f, +0.000321f, +0.000639f + }, + { + -0.000432f, -0.015223f, -0.006293f, -0.001400f, -0.002876f, +0.001651f, +0.000891f, -0.001193f, -0.000345f, +0.006249f, + +0.005338f, +0.000265f, +0.000834f, +0.002047f, +0.000533f, -0.014663f, +0.006254f, -0.006415f, +0.009601f, -0.013994f, + +0.006044f, +0.007739f, -0.008642f, -0.000241f, -0.004407f, +0.012270f, +0.020202f, -0.004112f, +0.001895f, -0.007315f, + +0.005601f, +0.005787f, +0.002771f, +0.010516f, -0.005407f, -0.009171f, -0.001199f, +0.000532f, +0.007716f, +0.000369f, + +0.002088f, -0.003269f, -0.006903f, -0.004057f, -0.001125f, +0.001887f, +0.000802f, -0.004367f, +0.001695f, +0.003426f, + +0.007029f, -0.001662f, +0.000923f, +0.002587f, -0.000511f, +0.001471f, +0.001708f, -0.002891f, -0.001392f, -0.002159f, + -0.002682f, -0.002100f, -0.003137f, +0.002488f, +0.004585f, -0.000581f, -0.001509f, -0.001333f, -0.001857f, -0.000389f, + +0.000034f, +0.001781f, +0.002107f, +0.000737f, +0.003240f, +0.000711f, -0.001325f, +0.000358f, +0.001217f, -0.002521f, + -0.000871f, -0.001259f, -0.001180f, +0.000353f, +0.000144f, -0.000321f, -0.000023f, -0.000848f, -0.000969f, -0.000391f, + -0.000019f, -0.000756f, -0.000695f, +0.000808f, -0.000118f, +0.000058f + }, + { + -0.016935f, +0.148656f, +0.009292f, +0.088850f, -0.007201f, +0.004386f, +0.004828f, +0.007748f, -0.008920f, +0.000446f, + +0.000045f, +0.000901f, +0.018961f, +0.006119f, +0.008858f, -0.002361f, +0.010132f, +0.010573f, +0.003602f, +0.002815f, + -0.017498f, -0.016138f, +0.000481f, -0.011480f, +0.002180f, -0.000586f, +0.005499f, +0.005102f, -0.000863f, -0.006728f, + -0.001522f, +0.001854f, -0.003266f, -0.001412f, +0.005677f, -0.003200f, -0.008142f, -0.000179f, -0.000759f, -0.001811f, + -0.001912f, +0.001159f, +0.000110f, -0.007364f, -0.002238f, -0.006063f, -0.000200f, +0.003429f, -0.003744f, +0.002558f, + -0.006947f, +0.008963f, +0.004783f, +0.002605f, +0.000636f, +0.000903f, +0.003157f, +0.001100f, +0.001719f, -0.001859f, + +0.000021f, -0.000836f, -0.002989f, +0.001303f, -0.001994f, -0.001164f, +0.000773f, +0.002529f, -0.000763f, -0.001346f, + +0.001689f, -0.000718f, +0.000669f, +0.001205f, -0.001528f, -0.001431f, -0.001646f, -0.000957f, -0.000207f, -0.000827f, + -0.000530f, +0.000078f, -0.000300f, +0.001644f, -0.000749f, +0.000455f, +0.000419f, -0.001444f, -0.000732f, +0.000027f, + -0.000463f, +0.000017f, +0.000304f, -0.000201f, -0.000896f, -0.000340f + }, + { + -0.000643f, +0.007922f, +0.001604f, +0.000074f, -0.002472f, -0.000798f, +0.000253f, -0.000486f, +0.000884f, -0.002322f, + -0.000806f, -0.004474f, -0.000579f, -0.004620f, +0.006709f, -0.020002f, -0.028412f, -0.018137f, -0.001786f, +0.029562f, + +0.014903f, -0.017829f, -0.007005f, -0.000445f, +0.013991f, +0.013638f, +0.006043f, -0.006760f, +0.001135f, +0.004668f, + +0.009560f, -0.007787f, -0.008623f, +0.005301f, -0.001659f, -0.005195f, -0.001112f, -0.006144f, +0.003954f, -0.001049f, + -0.006750f, -0.003155f, -0.003221f, +0.000808f, -0.012709f, -0.000636f, +0.002122f, +0.001064f, +0.001143f, -0.006138f, + +0.001811f, -0.002196f, +0.004167f, +0.000253f, -0.001376f, -0.001443f, +0.000369f, -0.003077f, -0.002341f, +0.002507f, + +0.002504f, -0.000598f, +0.001368f, -0.001818f, +0.000841f, -0.003166f, -0.001363f, +0.001130f, +0.000336f, -0.000929f, + +0.001843f, -0.000117f, -0.000075f, -0.001047f, +0.001351f, +0.000322f, +0.001403f, -0.000690f, -0.000316f, +0.001177f, + -0.000504f, +0.000559f, -0.001098f, -0.001155f, +0.000669f, -0.000473f, +0.000469f, +0.001070f, +0.000069f, +0.001461f, + +0.000569f, +0.000511f, +0.000023f, -0.000931f, +0.001287f, -0.000436f + }, + { + -0.084217f, -0.105594f, +0.001691f, +0.081515f, -0.001245f, -0.001068f, +0.001656f, -0.001180f, +0.003486f, +0.010008f, + -0.009077f, -0.012157f, -0.011487f, -0.003112f, +0.011702f, +0.004498f, +0.000952f, +0.006364f, +0.004011f, +0.009022f, + -0.000967f, -0.006162f, -0.001752f, +0.002195f, -0.005099f, +0.007422f, +0.004603f, -0.007401f, -0.009381f, +0.001428f, + +0.000428f, +0.001960f, -0.004982f, +0.001239f, -0.005701f, -0.002792f, +0.001404f, +0.005072f, +0.014907f, +0.001112f, + +0.001488f, +0.004285f, +0.004452f, +0.002597f, -0.002013f, +0.004494f, +0.006302f, -0.003462f, +0.002601f, -0.003544f, + -0.000858f, +0.006159f, -0.001856f, +0.001152f, -0.004229f, -0.003377f, -0.000497f, -0.001027f, +0.002630f, -0.001655f, + -0.001813f, -0.000279f, +0.002224f, +0.000001f, -0.002024f, -0.000436f, -0.001435f, +0.000654f, +0.001161f, +0.000823f, + -0.000753f, -0.001377f, +0.002751f, -0.000998f, +0.000272f, -0.000273f, -0.001184f, -0.000210f, +0.000009f, +0.001541f, + +0.000534f, -0.000832f, -0.001433f, +0.000638f, +0.001115f, +0.000033f, -0.000196f, +0.000767f, -0.000010f, +0.000052f, + -0.000478f, +0.000731f, -0.000491f, +0.000173f, +0.000369f, -0.000142f + }, + { + +0.001204f, +0.052506f, +0.017207f, +0.015819f, -0.002557f, -0.007664f, -0.012974f, -0.011152f, +0.003559f, -0.007478f, + +0.004157f, -0.004713f, +0.001080f, +0.015064f, -0.000545f, +0.004937f, +0.004044f, -0.005082f, +0.023063f, -0.003353f, + +0.010786f, +0.005079f, +0.003518f, +0.016185f, +0.013763f, +0.009922f, -0.006641f, +0.019244f, +0.013238f, +0.007262f, + -0.007615f, -0.000852f, +0.002138f, -0.002977f, -0.009035f, +0.004177f, -0.005777f, +0.008862f, -0.004889f, -0.006321f, + +0.004495f, +0.000552f, -0.004369f, -0.005568f, +0.004774f, +0.001658f, +0.004816f, -0.001302f, -0.006256f, -0.004556f, + +0.002221f, -0.001431f, +0.002761f, -0.001297f, +0.002665f, +0.000853f, +0.000870f, -0.003534f, -0.001317f, +0.001344f, + +0.000936f, -0.000240f, +0.000002f, -0.000701f, -0.000151f, -0.000201f, +0.001274f, +0.000939f, +0.001087f, +0.000013f, + +0.000214f, -0.002345f, +0.000425f, +0.000945f, -0.001789f, +0.001117f, +0.000816f, +0.000059f, -0.001405f, -0.000905f, + -0.000335f, -0.000998f, +0.000637f, -0.000066f, +0.002346f, -0.000183f, -0.001123f, -0.000401f, -0.000706f, -0.001086f, + +0.000317f, +0.000018f, +0.000516f, +0.001078f, -0.000171f, -0.000495f + }, + { + -0.041777f, -0.177907f, -0.005917f, +0.010660f, +0.016855f, +0.012975f, +0.012164f, -0.010551f, -0.005342f, -0.003818f, + +0.004796f, +0.010306f, -0.000267f, +0.005217f, -0.007640f, +0.009140f, -0.000608f, -0.003400f, -0.008752f, +0.003679f, + -0.008215f, -0.001587f, +0.004199f, -0.001519f, -0.005035f, +0.016451f, -0.007338f, +0.006087f, +0.006201f, +0.003369f, + +0.008715f, +0.003198f, +0.002865f, -0.002570f, +0.000066f, +0.000644f, +0.005705f, +0.003204f, -0.002394f, +0.000183f, + +0.003334f, -0.000768f, +0.001204f, -0.000818f, -0.000189f, -0.001820f, +0.002385f, -0.000626f, +0.002078f, +0.003210f, + -0.004870f, -0.004182f, -0.005847f, -0.001096f, +0.004086f, +0.001268f, +0.000797f, -0.000878f, -0.000629f, +0.002982f, + -0.003095f, +0.000853f, -0.003216f, -0.001820f, -0.002807f, +0.002241f, +0.002737f, +0.000256f, -0.003060f, +0.003580f, + +0.001427f, -0.000121f, +0.002450f, +0.000434f, -0.001112f, -0.001653f, +0.000888f, +0.001312f, -0.001661f, -0.000078f, + +0.001348f, +0.000161f, -0.000221f, +0.000716f, +0.000108f, +0.000362f, -0.001284f, +0.000505f, +0.000788f, +0.000493f, + +0.000077f, +0.000588f, +0.000343f, -0.000078f, -0.000522f, -0.000015f + }, + { + -0.004892f, +0.024593f, +0.010279f, -0.004181f, +0.009535f, +0.011603f, +0.001075f, +0.007417f, +0.001524f, -0.001282f, + -0.001152f, -0.009625f, +0.003777f, -0.000452f, +0.013150f, +0.000790f, -0.021743f, +0.010567f, +0.014803f, +0.009080f, + +0.015939f, -0.007600f, +0.027223f, +0.009808f, +0.000205f, +0.006750f, -0.015395f, -0.000839f, +0.015367f, -0.004932f, + -0.001415f, +0.006125f, -0.005584f, -0.007390f, -0.003482f, -0.001627f, +0.006778f, +0.001879f, -0.003385f, +0.000889f, + +0.003695f, +0.002434f, +0.001583f, -0.002917f, -0.006371f, +0.001443f, +0.004692f, +0.000338f, +0.001578f, +0.006068f, + -0.000913f, -0.000468f, +0.003451f, -0.006001f, -0.001546f, -0.002005f, -0.000819f, +0.000043f, -0.000970f, -0.001221f, + +0.002415f, +0.000585f, -0.000453f, -0.003435f, +0.000021f, +0.002702f, -0.000487f, -0.001136f, +0.000512f, +0.000792f, + -0.000525f, -0.002339f, +0.001686f, -0.000205f, +0.002004f, +0.000275f, +0.002178f, -0.000921f, -0.000937f, +0.001351f, + +0.000010f, -0.001413f, +0.000256f, +0.000436f, +0.002647f, +0.000358f, +0.000156f, -0.000221f, -0.000542f, +0.001760f, + +0.001773f, +0.000977f, +0.000183f, -0.000167f, -0.000088f, -0.000399f + }, + { + +0.001366f, -0.357240f, -0.046428f, +0.008744f, +0.012506f, +0.051100f, +0.024702f, -0.011405f, -0.018514f, +0.019302f, + +0.011180f, -0.001741f, +0.010253f, +0.003522f, +0.002646f, -0.003138f, -0.009477f, -0.005215f, -0.003490f, +0.010708f, + -0.006568f, -0.015031f, -0.007996f, +0.006954f, +0.005149f, +0.006714f, +0.000524f, -0.010427f, +0.001898f, +0.009999f, + +0.001021f, -0.007359f, +0.000191f, -0.001737f, -0.003534f, -0.001350f, -0.001995f, +0.008192f, +0.005248f, +0.005185f, + -0.001329f, -0.006070f, -0.000762f, +0.004494f, -0.008107f, +0.002338f, -0.000100f, -0.002232f, +0.003631f, +0.002608f, + +0.001417f, -0.004569f, +0.000967f, +0.003381f, +0.000261f, +0.000008f, -0.002523f, -0.001980f, +0.000749f, +0.000581f, + +0.002860f, -0.001302f, -0.002771f, -0.005301f, -0.000367f, -0.000940f, +0.001823f, +0.001085f, +0.000577f, +0.003837f, + +0.000082f, +0.000103f, +0.003488f, +0.000422f, -0.000498f, +0.000485f, +0.000975f, +0.000998f, +0.000347f, +0.000542f, + -0.001758f, +0.000043f, +0.000152f, -0.000154f, +0.000165f, -0.001688f, +0.000199f, -0.000547f, -0.000469f, -0.001866f, + -0.000250f, -0.000346f, +0.000018f, -0.000078f, +0.000509f, -0.000431f + }, + { + -0.011519f, -0.017176f, -0.002612f, +0.003499f, -0.000355f, -0.007799f, -0.004878f, -0.000531f, -0.019511f, -0.007005f, + -0.011826f, +0.008951f, +0.021283f, -0.002470f, -0.029942f, -0.000979f, +0.015163f, +0.006784f, -0.000968f, -0.015261f, + +0.007474f, +0.007519f, +0.015380f, -0.005109f, +0.009308f, +0.003243f, +0.002714f, +0.009314f, +0.000333f, -0.005650f, + -0.006842f, +0.015239f, +0.000106f, +0.002433f, +0.007964f, -0.001340f, -0.000970f, +0.005224f, -0.003505f, -0.004779f, + +0.002132f, -0.002762f, +0.000476f, +0.002197f, +0.002170f, -0.003706f, +0.000702f, -0.000181f, +0.002885f, +0.001057f, + +0.002446f, -0.003223f, -0.000063f, -0.004586f, +0.004709f, +0.001212f, -0.000308f, +0.002846f, -0.004448f, -0.000047f, + +0.000245f, -0.000822f, -0.001111f, -0.002777f, +0.000653f, +0.000126f, +0.000412f, +0.001947f, -0.000212f, -0.002716f, + -0.000343f, +0.001624f, +0.003278f, +0.002735f, +0.000534f, +0.000730f, +0.001627f, +0.000669f, +0.000703f, +0.000477f, + -0.000209f, -0.000013f, -0.001478f, -0.000408f, -0.001048f, +0.000152f, +0.001201f, -0.000660f, +0.000462f, -0.001211f, + -0.001050f, +0.000537f, -0.001624f, -0.000461f, -0.000080f, -0.000367f + }, + { + +0.046651f, -0.103470f, -0.012704f, +0.015636f, +0.024142f, +0.015735f, +0.013920f, -0.009627f, +0.004063f, -0.021852f, + +0.006477f, -0.017713f, -0.014123f, -0.009181f, -0.025635f, -0.006044f, -0.008111f, -0.006971f, +0.006809f, +0.003662f, + -0.003480f, -0.006031f, -0.007055f, +0.015834f, +0.002625f, +0.006480f, +0.000769f, -0.000701f, +0.004113f, -0.002830f, + -0.003836f, -0.005137f, +0.002734f, -0.000144f, -0.003662f, +0.000659f, +0.000076f, +0.011775f, -0.000738f, -0.006235f, + +0.005911f, +0.003868f, +0.000363f, +0.001515f, -0.005134f, -0.005407f, -0.003428f, -0.001137f, +0.007051f, -0.001999f, + -0.002862f, +0.000120f, +0.002695f, +0.000089f, +0.002025f, -0.000608f, -0.001148f, -0.000114f, -0.000922f, +0.003257f, + +0.005062f, +0.001115f, -0.004443f, -0.002262f, -0.000403f, +0.003531f, +0.000681f, -0.000733f, -0.001545f, +0.004141f, + +0.000751f, -0.001010f, -0.000088f, +0.001729f, -0.001183f, -0.000562f, +0.000334f, -0.002152f, -0.000314f, -0.001544f, + +0.001062f, +0.001334f, -0.001765f, -0.000141f, -0.000713f, -0.000528f, -0.001922f, +0.001569f, +0.000800f, -0.000190f, + -0.000441f, -0.000090f, -0.000604f, +0.000793f, +0.000922f, +0.000172f + } + }, + { + { + +0.000799f, +0.005775f, +0.002777f, +0.011541f, +0.014104f, -0.001438f, -0.002109f, -0.002364f, -0.003428f, -0.002095f, + +0.007603f, -0.003808f, -0.003432f, +0.007572f, -0.003270f, +0.017155f, -0.001894f, +0.017160f, +0.005898f, -0.018148f, + +0.019316f, +0.003688f, +0.002021f, +0.013375f, -0.018312f, +0.006843f, -0.004742f, -0.016113f, -0.000137f, +0.016900f, + +0.004659f, -0.001888f, +0.014070f, -0.006582f, +0.000270f, -0.000746f, +0.000235f, -0.002949f, -0.002252f, +0.003361f, + -0.002870f, +0.002338f, -0.002383f, -0.002737f, -0.001068f, +0.002973f, +0.001432f, +0.002106f, -0.001002f, +0.000980f, + +0.000343f, -0.001174f, +0.000027f, +0.003551f, -0.002260f, +0.002259f, +0.002309f, +0.000038f, +0.000280f, +0.001866f, + +0.000288f, +0.004980f, +0.000019f, +0.002686f, +0.001822f, +0.002609f, +0.000856f, +0.000045f, +0.002128f, +0.000288f, + +0.000637f, -0.000187f, +0.000580f, -0.001480f, -0.000267f, +0.000512f, +0.000700f, -0.000966f, +0.000009f, +0.000216f, + -0.000318f, +0.000018f, -0.000394f, +0.000161f, +0.000559f, -0.000176f, -0.001463f, -0.000046f, -0.000597f, -0.000402f, + -0.000762f, +0.000255f, +0.000238f, +0.000592f, -0.000571f, +0.000190f + }, + { + +0.011518f, -0.123879f, -0.016944f, +0.017254f, +0.006114f, +0.002611f, +0.005642f, -0.007285f, -0.000159f, -0.004025f, + -0.012962f, +0.002304f, -0.001290f, -0.001029f, +0.000458f, -0.002415f, -0.006393f, +0.006656f, +0.004411f, +0.004199f, + +0.017116f, -0.008634f, +0.011622f, -0.001812f, -0.023729f, -0.004537f, -0.001313f, -0.000614f, -0.003933f, -0.006623f, + +0.002745f, -0.011741f, +0.013918f, -0.000093f, -0.005236f, +0.005417f, +0.004363f, +0.005725f, +0.008041f, +0.000111f, + -0.004179f, +0.002555f, +0.003208f, -0.000976f, +0.006662f, +0.004413f, +0.001872f, +0.001065f, -0.000624f, -0.001236f, + +0.001615f, -0.001549f, +0.003232f, -0.004190f, +0.000675f, +0.002063f, -0.000526f, +0.002068f, -0.000449f, -0.000767f, + +0.000141f, +0.001631f, -0.002809f, +0.001291f, +0.000185f, +0.001722f, +0.000262f, -0.000052f, -0.000979f, -0.001043f, + -0.000896f, -0.001331f, -0.000008f, -0.000405f, +0.000474f, -0.000471f, +0.001763f, -0.001159f, +0.000494f, -0.001248f, + +0.000379f, +0.000374f, -0.000340f, +0.000286f, -0.000505f, +0.000620f, +0.000209f, +0.000462f, -0.000245f, +0.000176f, + +0.000142f, -0.000368f, +0.000267f, -0.000042f, +0.000071f, -0.000535f + }, + { + -0.001226f, +0.005775f, +0.011695f, -0.000330f, +0.011902f, -0.001901f, +0.003706f, +0.003736f, +0.003403f, +0.002998f, + +0.004645f, +0.001431f, -0.004099f, -0.004819f, +0.001708f, +0.003607f, +0.000350f, +0.008974f, +0.008202f, -0.011338f, + +0.002466f, -0.010978f, +0.001360f, +0.002732f, +0.000228f, -0.001326f, -0.004418f, -0.005819f, -0.004315f, -0.000754f, + -0.002258f, -0.005519f, +0.002653f, -0.002637f, +0.006278f, +0.002089f, -0.007536f, -0.008200f, +0.008952f, +0.001898f, + -0.007373f, -0.002375f, +0.000324f, -0.004078f, -0.001106f, +0.001290f, -0.005855f, -0.000790f, -0.000865f, +0.001427f, + -0.000328f, +0.001057f, +0.000168f, -0.000706f, -0.001995f, -0.000393f, -0.000538f, -0.000362f, +0.000741f, +0.000121f, + -0.000822f, -0.000048f, +0.000243f, +0.001079f, -0.001044f, +0.000345f, +0.002090f, +0.002035f, -0.001754f, -0.000566f, + +0.000289f, -0.001563f, -0.002043f, +0.000591f, -0.000374f, -0.000219f, -0.002119f, -0.000840f, -0.000028f, -0.000397f, + -0.000123f, +0.001486f, -0.000054f, +0.000015f, +0.001052f, +0.000103f, -0.000619f, +0.000145f, +0.000187f, -0.000601f, + +0.000060f, -0.000230f, -0.000317f, +0.000177f, -0.000524f, -0.000346f + }, + { + +0.005229f, +0.013113f, -0.004920f, +0.001215f, +0.002178f, -0.000576f, -0.000889f, +0.001345f, -0.001498f, -0.004928f, + +0.002827f, +0.004693f, +0.005539f, +0.003371f, +0.037143f, +0.010683f, -0.016715f, +0.012423f, -0.015005f, +0.004648f, + +0.017478f, +0.005900f, +0.002665f, +0.003849f, -0.004121f, -0.008645f, +0.010942f, +0.004672f, -0.000079f, +0.011050f, + -0.007835f, +0.001420f, +0.013001f, +0.005056f, -0.001551f, +0.003657f, +0.001871f, -0.006202f, +0.002819f, +0.001051f, + -0.000318f, +0.001458f, -0.000236f, -0.004650f, +0.002318f, +0.003398f, +0.001972f, +0.002619f, -0.002800f, +0.003723f, + -0.000665f, +0.002542f, -0.004076f, +0.002693f, -0.000910f, -0.002294f, -0.002872f, +0.000133f, -0.000347f, -0.000146f, + +0.000904f, +0.002349f, -0.000085f, -0.000227f, +0.001260f, +0.000873f, +0.000357f, -0.000932f, -0.000925f, +0.001301f, + -0.001603f, -0.001474f, -0.000523f, +0.000722f, +0.000292f, -0.000483f, -0.000053f, +0.000543f, -0.000068f, +0.000821f, + +0.000796f, -0.000593f, +0.000166f, +0.000478f, -0.000188f, +0.000081f, +0.000276f, +0.000855f, -0.000077f, -0.000401f, + -0.000139f, +0.000481f, +0.000235f, +0.001033f, -0.000438f, +0.000343f + }, + { + +0.012568f, +0.160851f, -0.017435f, +0.065937f, -0.002850f, +0.000815f, -0.001525f, +0.000618f, +0.002611f, -0.009630f, + -0.003766f, -0.001157f, -0.002714f, +0.002647f, -0.002415f, +0.000797f, -0.008836f, -0.005736f, +0.008032f, -0.004360f, + -0.005519f, +0.001978f, -0.003252f, -0.003276f, -0.000637f, -0.002193f, -0.009458f, +0.012471f, +0.002548f, +0.000227f, + +0.003363f, -0.002987f, +0.006184f, +0.004739f, +0.003769f, +0.001933f, -0.009241f, +0.000097f, +0.002370f, +0.005016f, + +0.003398f, -0.004869f, -0.006551f, -0.002247f, -0.006138f, -0.003941f, -0.003289f, -0.001925f, -0.006650f, +0.001476f, + +0.003342f, +0.000364f, +0.003912f, -0.000966f, +0.001396f, +0.001578f, +0.003094f, +0.001794f, -0.002538f, -0.000830f, + +0.003936f, -0.002879f, +0.000757f, -0.000757f, -0.000647f, -0.000743f, +0.002558f, -0.000780f, +0.001439f, -0.002301f, + -0.002036f, +0.000791f, +0.000016f, +0.000563f, -0.002225f, -0.000321f, +0.000758f, +0.000953f, -0.000436f, +0.000412f, + -0.001387f, -0.000348f, +0.000416f, -0.000528f, -0.000432f, -0.001223f, -0.000355f, -0.000519f, -0.000839f, -0.000273f, + +0.001013f, +0.000232f, +0.000503f, -0.000665f, -0.000493f, -0.000072f + }, + { + -0.001776f, -0.015605f, +0.000114f, +0.002210f, -0.002107f, +0.000086f, -0.000069f, -0.000586f, -0.000060f, +0.005060f, + -0.002886f, -0.001349f, +0.002608f, -0.008097f, +0.006315f, +0.004761f, +0.025259f, +0.015366f, +0.010829f, -0.016228f, + +0.000644f, +0.009370f, +0.008039f, +0.007609f, -0.015480f, +0.005753f, +0.023120f, -0.000059f, +0.001426f, -0.015186f, + +0.004893f, +0.010931f, +0.002441f, +0.018634f, +0.003952f, -0.008449f, -0.004033f, -0.003751f, +0.003977f, -0.002384f, + -0.000843f, +0.000539f, -0.000513f, +0.000398f, +0.000436f, -0.002225f, +0.000589f, -0.001805f, +0.001830f, -0.001378f, + +0.000623f, -0.004651f, +0.000176f, -0.000471f, -0.001747f, +0.000246f, +0.000880f, -0.001899f, -0.000509f, -0.001576f, + +0.000798f, +0.001874f, -0.000195f, +0.002348f, +0.001807f, -0.000408f, +0.001089f, +0.001123f, +0.000622f, +0.001731f, + +0.000354f, +0.001740f, +0.002778f, -0.000269f, +0.000379f, +0.000988f, +0.000247f, -0.000045f, +0.000642f, -0.001710f, + -0.000642f, -0.000399f, -0.000365f, +0.000508f, +0.000084f, -0.000672f, -0.000146f, -0.000198f, +0.000177f, -0.000562f, + +0.000089f, -0.000581f, -0.000999f, +0.000708f, -0.000171f, +0.000472f + }, + { + -0.028570f, +0.142406f, +0.000757f, +0.079307f, -0.006764f, +0.002228f, -0.002286f, +0.011954f, -0.001501f, +0.010502f, + -0.000980f, -0.008892f, -0.000832f, -0.011245f, +0.003237f, +0.001346f, +0.001724f, -0.000876f, +0.008586f, +0.009111f, + -0.000693f, -0.008562f, +0.004053f, +0.002325f, +0.005757f, -0.007550f, -0.006333f, +0.001348f, -0.000414f, -0.004892f, + -0.003906f, +0.002033f, +0.003053f, -0.004045f, +0.002363f, -0.001202f, -0.004815f, -0.001527f, -0.003121f, +0.004430f, + -0.000713f, -0.002322f, +0.004531f, -0.007884f, -0.001447f, -0.007108f, -0.006193f, +0.001807f, -0.002338f, +0.004652f, + -0.007451f, +0.002849f, -0.000979f, +0.004603f, +0.002244f, +0.000895f, -0.000511f, -0.001547f, +0.001679f, -0.001211f, + +0.001292f, +0.001455f, -0.001724f, +0.003030f, -0.000612f, -0.001168f, +0.000856f, +0.001881f, -0.001086f, -0.001666f, + +0.001080f, +0.000618f, +0.000439f, +0.001565f, +0.001024f, +0.000233f, +0.000100f, -0.000406f, -0.000466f, +0.000422f, + +0.001476f, +0.000071f, -0.000493f, +0.000156f, -0.001629f, +0.000600f, +0.000535f, -0.001143f, -0.000341f, +0.000412f, + +0.000443f, -0.000132f, -0.000122f, -0.000056f, -0.000867f, -0.000159f + }, + { + -0.001767f, +0.002266f, -0.004004f, +0.003286f, +0.002076f, +0.000092f, +0.000417f, +0.002160f, +0.005800f, +0.000014f, + +0.005655f, +0.001622f, +0.000459f, -0.013984f, +0.010422f, +0.017627f, +0.022761f, +0.010582f, +0.002997f, +0.014452f, + +0.002391f, -0.013780f, -0.004364f, -0.013115f, -0.005317f, +0.007327f, -0.000204f, -0.007442f, +0.005067f, -0.001498f, + +0.006945f, -0.005735f, -0.019377f, +0.000832f, -0.001521f, +0.001903f, +0.005415f, -0.002253f, -0.002109f, -0.003548f, + -0.000913f, +0.003933f, +0.004705f, +0.003373f, -0.011432f, -0.000094f, +0.000985f, +0.002700f, +0.001280f, -0.001849f, + +0.006513f, -0.001312f, +0.002038f, -0.003199f, -0.000414f, -0.001529f, -0.001533f, +0.001708f, +0.001308f, +0.001942f, + +0.000945f, -0.003400f, -0.001518f, -0.001242f, +0.002876f, -0.002180f, -0.001568f, +0.000243f, -0.001633f, -0.001724f, + +0.002830f, -0.001018f, -0.001503f, -0.001708f, +0.002059f, +0.000192f, +0.000005f, -0.002047f, -0.000580f, +0.000368f, + -0.000900f, +0.000791f, -0.000012f, +0.000075f, +0.000021f, -0.000600f, -0.000246f, +0.000079f, -0.000528f, -0.000144f, + -0.000285f, +0.000143f, -0.000372f, -0.001094f, +0.001152f, -0.000741f + }, + { + +0.055432f, +0.099860f, -0.000121f, +0.071189f, +0.002313f, -0.000125f, +0.003120f, +0.003069f, +0.001837f, +0.002676f, + -0.009307f, -0.010624f, -0.000045f, -0.003002f, +0.001019f, -0.005845f, +0.001376f, +0.001672f, -0.007471f, +0.003720f, + +0.001255f, -0.001114f, -0.001320f, -0.002422f, -0.006511f, +0.000874f, +0.002028f, -0.001423f, -0.007817f, +0.002722f, + -0.002537f, -0.000962f, -0.010938f, +0.004668f, +0.000442f, +0.002726f, +0.004294f, -0.001822f, +0.001077f, -0.005860f, + +0.002522f, +0.009475f, +0.001492f, +0.000796f, -0.003509f, +0.001190f, +0.003069f, -0.007269f, -0.000941f, -0.007795f, + -0.006353f, +0.002674f, -0.005354f, +0.002732f, +0.002752f, -0.002583f, +0.000260f, +0.000321f, +0.001693f, -0.000873f, + -0.000871f, +0.000595f, +0.000509f, -0.001404f, -0.000482f, -0.000381f, -0.001481f, +0.000615f, -0.000015f, -0.001169f, + +0.000055f, -0.000307f, +0.002347f, -0.000304f, +0.000895f, +0.001019f, -0.000247f, +0.001036f, +0.000269f, +0.001255f, + -0.000349f, -0.000936f, +0.000003f, +0.000447f, +0.000239f, -0.000783f, -0.000823f, +0.000442f, -0.000451f, -0.000135f, + -0.000310f, +0.000452f, -0.000125f, +0.000000f, -0.000358f, -0.000344f + }, + { + +0.001927f, +0.035730f, -0.012597f, +0.002116f, +0.006916f, -0.003990f, -0.005560f, -0.001664f, +0.003645f, -0.008972f, + +0.001734f, +0.001800f, +0.001955f, -0.000068f, -0.003932f, +0.006794f, +0.009333f, -0.007631f, +0.023726f, -0.002977f, + +0.003203f, +0.002576f, -0.007465f, +0.005996f, +0.006846f, +0.008632f, -0.002347f, +0.005267f, +0.004505f, +0.005977f, + -0.003155f, +0.003941f, +0.008595f, -0.000882f, -0.011550f, +0.003693f, -0.006007f, +0.008808f, -0.005676f, -0.002256f, + +0.005686f, -0.007008f, -0.006268f, -0.002901f, +0.000103f, +0.001007f, +0.001251f, -0.002431f, -0.000461f, +0.002121f, + +0.004065f, -0.003216f, +0.001885f, -0.001508f, -0.001130f, +0.000753f, +0.001457f, -0.003712f, +0.000793f, +0.001278f, + +0.002529f, -0.001158f, +0.001297f, +0.001740f, +0.000656f, -0.001073f, -0.000562f, -0.001794f, +0.000209f, -0.000276f, + +0.001028f, -0.001902f, -0.000291f, -0.000170f, -0.000866f, +0.000590f, -0.001141f, +0.001367f, +0.000150f, -0.000207f, + +0.000688f, -0.000237f, +0.000276f, -0.000361f, +0.000473f, -0.000837f, +0.000114f, +0.000346f, -0.000165f, -0.000493f, + +0.000056f, -0.000908f, -0.000258f, +0.000544f, +0.000152f, +0.000018f + }, + { + +0.039298f, -0.107858f, -0.033545f, +0.019091f, +0.010333f, -0.012951f, -0.000032f, -0.003344f, -0.008293f, -0.004063f, + +0.000188f, +0.011609f, +0.001096f, +0.000706f, -0.004416f, +0.010184f, +0.003443f, +0.002327f, -0.010758f, +0.002243f, + -0.013378f, -0.003639f, +0.006040f, +0.005144f, -0.004856f, +0.015455f, -0.004771f, +0.012582f, +0.013174f, -0.000509f, + +0.001618f, +0.000891f, +0.003879f, -0.002163f, -0.000420f, +0.001412f, +0.001159f, +0.002639f, -0.005804f, -0.003833f, + +0.001247f, +0.000579f, +0.004234f, +0.003601f, -0.000112f, -0.003063f, +0.002140f, -0.002001f, +0.000816f, +0.000381f, + -0.002429f, +0.002562f, -0.001322f, -0.002120f, -0.000460f, -0.001421f, +0.001893f, +0.000219f, -0.001068f, +0.001715f, + -0.002616f, +0.002264f, -0.000453f, +0.000376f, -0.003246f, +0.000822f, -0.001588f, +0.000610f, -0.001726f, +0.000869f, + +0.000009f, -0.000422f, +0.001284f, +0.000857f, -0.000631f, -0.001655f, +0.001488f, +0.000654f, -0.001781f, -0.000286f, + +0.000556f, +0.000395f, +0.000351f, +0.000032f, +0.000340f, +0.000533f, -0.000460f, -0.000152f, +0.000268f, +0.000224f, + +0.000005f, -0.000056f, +0.000209f, -0.000005f, -0.000668f, +0.000455f + }, + { + +0.005726f, +0.006836f, -0.015951f, -0.004541f, +0.012954f, +0.009406f, +0.002107f, +0.011605f, +0.000207f, -0.004787f, + +0.002955f, -0.002030f, +0.001274f, -0.026432f, +0.008321f, +0.003835f, -0.011725f, +0.005418f, -0.010700f, -0.002065f, + +0.002839f, -0.035471f, +0.010438f, -0.006205f, -0.007685f, +0.006728f, +0.001301f, +0.005985f, +0.000652f, -0.018987f, + -0.007423f, +0.006181f, +0.006080f, +0.002943f, +0.002473f, -0.005129f, +0.000794f, +0.004970f, +0.000872f, -0.002171f, + +0.002376f, +0.000673f, -0.002208f, -0.003183f, -0.002833f, +0.004521f, +0.004474f, -0.002318f, +0.000946f, +0.007418f, + +0.000602f, +0.001714f, +0.001823f, -0.003935f, +0.001753f, -0.000502f, +0.000435f, -0.002155f, -0.000415f, -0.000868f, + -0.001607f, -0.001080f, +0.001685f, -0.000915f, -0.001174f, +0.000884f, +0.000717f, -0.000965f, +0.001831f, +0.000903f, + -0.000601f, -0.001142f, +0.000482f, -0.001239f, +0.001079f, -0.000467f, +0.001603f, +0.000120f, +0.001550f, +0.001931f, + -0.000199f, -0.000165f, +0.001074f, -0.000448f, +0.000760f, -0.001251f, -0.000528f, -0.000580f, -0.001204f, +0.000024f, + -0.000194f, +0.000100f, +0.000474f, +0.000586f, -0.000561f, -0.000174f + }, + { + +0.063063f, -0.278205f, -0.039671f, +0.023902f, +0.025312f, +0.017294f, -0.023075f, -0.008527f, -0.010824f, +0.014375f, + +0.014389f, +0.004940f, -0.000602f, -0.012720f, +0.001812f, +0.001313f, -0.006072f, +0.000766f, -0.014450f, +0.001914f, + -0.000668f, -0.007840f, -0.005478f, +0.006300f, +0.001468f, -0.011856f, +0.000537f, +0.004074f, +0.001504f, +0.005338f, + +0.001599f, -0.003071f, -0.004355f, -0.002035f, -0.003350f, -0.003670f, -0.006362f, +0.001691f, +0.001810f, +0.004955f, + +0.002627f, -0.002083f, +0.000490f, +0.009171f, +0.001455f, +0.009224f, +0.000036f, -0.004393f, -0.002697f, -0.003755f, + -0.003637f, -0.004193f, +0.003771f, +0.003866f, -0.001175f, -0.001129f, -0.003168f, -0.000692f, -0.000153f, -0.002263f, + +0.000881f, +0.000231f, +0.000392f, -0.002715f, +0.000175f, -0.000229f, +0.000058f, -0.000203f, +0.001924f, +0.004245f, + +0.000517f, +0.000065f, +0.002934f, -0.000041f, -0.000875f, -0.001107f, -0.001186f, +0.000017f, -0.000389f, -0.000092f, + -0.000471f, +0.000168f, +0.000405f, +0.000372f, +0.001606f, +0.000066f, +0.000931f, -0.000117f, +0.000690f, -0.000240f, + +0.000823f, +0.000497f, -0.000060f, -0.000193f, +0.000472f, -0.000145f + }, + { + +0.010849f, -0.013021f, -0.017647f, +0.001814f, -0.000954f, -0.001311f, +0.002955f, +0.009786f, -0.002343f, +0.006287f, + -0.006675f, -0.002351f, +0.006375f, -0.017139f, -0.011598f, +0.022613f, +0.006697f, +0.005198f, -0.001393f, -0.003207f, + +0.013671f, +0.002631f, -0.003011f, -0.019196f, -0.004429f, -0.001699f, +0.006971f, +0.020358f, +0.008844f, +0.007972f, + -0.013340f, +0.001540f, -0.004312f, -0.000118f, +0.005722f, +0.003737f, +0.005852f, +0.009007f, -0.005744f, -0.002741f, + +0.001769f, -0.003019f, +0.001768f, -0.003149f, -0.000530f, -0.001927f, +0.003289f, +0.002714f, +0.001151f, -0.001166f, + +0.003568f, -0.002004f, -0.000524f, -0.001592f, +0.003357f, +0.002932f, -0.002019f, +0.002001f, +0.001010f, +0.000316f, + -0.002176f, +0.000238f, +0.002571f, -0.000928f, -0.000439f, -0.000460f, -0.002861f, +0.000648f, +0.002478f, -0.001978f, + -0.000073f, +0.000113f, +0.001273f, +0.000795f, -0.000027f, +0.000334f, +0.000497f, -0.000145f, -0.000046f, +0.000138f, + -0.000207f, +0.000880f, +0.000344f, +0.000951f, -0.000552f, -0.000580f, +0.001436f, -0.000432f, +0.001057f, +0.000552f, + +0.000221f, +0.001343f, -0.000300f, +0.000350f, +0.000958f, +0.000270f + }, + { + -0.006620f, -0.204228f, -0.030984f, +0.018097f, +0.008175f, -0.016265f, +0.001241f, -0.012709f, +0.000489f, +0.001128f, + +0.018834f, -0.016320f, +0.004159f, +0.005432f, -0.008831f, +0.007293f, +0.006135f, -0.013345f, -0.012758f, -0.013855f, + +0.005239f, +0.003008f, -0.012652f, +0.002424f, +0.003864f, +0.014107f, +0.002676f, +0.000808f, +0.003648f, +0.002162f, + +0.002894f, -0.003116f, +0.000899f, +0.004302f, +0.001432f, +0.004006f, -0.002547f, +0.001696f, +0.000284f, -0.003696f, + -0.004010f, -0.005784f, -0.004917f, -0.000399f, -0.001787f, +0.001128f, +0.002926f, +0.001782f, +0.004105f, +0.001242f, + +0.004629f, +0.002309f, -0.002039f, -0.004341f, +0.001390f, +0.000715f, -0.001201f, -0.002162f, -0.002151f, +0.001415f, + +0.000338f, +0.002138f, -0.002109f, -0.001270f, +0.000348f, +0.001936f, +0.000047f, +0.001170f, +0.001049f, +0.003256f, + -0.000368f, +0.000535f, +0.000163f, +0.000723f, -0.000747f, -0.000117f, -0.000444f, -0.001142f, +0.001023f, -0.001136f, + +0.000244f, -0.000826f, -0.001602f, -0.000030f, -0.001241f, -0.000439f, -0.001686f, +0.000815f, +0.000395f, -0.000474f, + +0.000445f, -0.000129f, -0.001163f, +0.000096f, -0.000259f, -0.000540f + } + }, + { + { + -0.000674f, +0.025484f, -0.011719f, +0.031493f, -0.002843f, +0.000382f, -0.003131f, -0.002809f, -0.001260f, -0.000113f, + -0.005692f, -0.009160f, +0.002239f, +0.006914f, +0.005751f, +0.027285f, +0.009128f, +0.006269f, +0.006104f, -0.010107f, + -0.000870f, +0.005735f, +0.000007f, +0.011451f, -0.002147f, +0.001450f, -0.020833f, -0.007667f, -0.003493f, +0.009728f, + +0.001961f, +0.001569f, +0.008406f, -0.002275f, +0.002059f, -0.002170f, +0.002375f, +0.000967f, -0.003310f, +0.001480f, + +0.003688f, -0.005992f, -0.003397f, -0.000932f, +0.002641f, +0.001058f, +0.002067f, +0.001509f, -0.002094f, +0.000018f, + +0.001198f, -0.001986f, -0.000850f, -0.000206f, -0.000897f, +0.002420f, +0.001177f, +0.001186f, +0.001520f, +0.002696f, + +0.000582f, +0.001500f, +0.002684f, +0.002264f, +0.002326f, +0.001793f, +0.000123f, -0.000197f, -0.000150f, +0.000747f, + +0.001867f, -0.000066f, -0.000024f, -0.000148f, -0.001240f, +0.000464f, +0.000553f, -0.000347f, -0.001404f, +0.000731f, + -0.000360f, -0.000257f, -0.001277f, +0.000464f, +0.000073f, -0.000463f, -0.001009f, -0.000560f, -0.000022f, -0.000591f, + -0.000388f, +0.000029f, +0.000358f, -0.000267f, +0.000179f, +0.000038f + }, + { + -0.001282f, -0.101385f, +0.000149f, +0.012574f, +0.004734f, +0.003070f, -0.002190f, +0.005505f, +0.001462f, -0.005975f, + -0.019011f, +0.009150f, -0.003909f, +0.005460f, -0.000512f, -0.008161f, +0.002387f, +0.005487f, +0.008911f, +0.006394f, + +0.015950f, +0.000698f, -0.005150f, +0.002213f, -0.013337f, -0.006576f, +0.001239f, -0.004906f, -0.005634f, +0.003885f, + -0.008708f, -0.007601f, +0.006687f, +0.004469f, -0.001526f, +0.002775f, +0.004658f, +0.007103f, +0.004251f, +0.002748f, + -0.001422f, -0.000138f, +0.003305f, +0.000696f, +0.001157f, +0.003898f, +0.002867f, +0.002008f, +0.002715f, +0.000455f, + +0.001980f, -0.004825f, +0.000444f, -0.001032f, -0.002683f, +0.002321f, +0.000220f, -0.000441f, +0.000860f, +0.000127f, + -0.001924f, +0.001323f, -0.001792f, -0.000586f, +0.001754f, +0.000583f, +0.001285f, -0.001961f, -0.000220f, -0.001584f, + -0.001263f, -0.001210f, +0.000834f, -0.000656f, +0.001481f, -0.000746f, +0.001418f, -0.001073f, +0.000378f, -0.000472f, + -0.001095f, +0.001048f, -0.000507f, +0.000284f, +0.000094f, +0.000574f, -0.000207f, +0.000507f, -0.000001f, +0.000471f, + -0.000737f, -0.000207f, +0.000010f, +0.000103f, +0.000240f, -0.000658f + }, + { + +0.004354f, -0.002402f, +0.021918f, +0.062429f, -0.036406f, -0.001033f, +0.000618f, +0.004010f, +0.005936f, +0.004273f, + +0.003471f, +0.000984f, +0.000706f, +0.003534f, +0.009490f, -0.010152f, +0.008621f, +0.005507f, +0.011796f, -0.001428f, + -0.004516f, -0.021094f, +0.006869f, +0.002367f, -0.004332f, -0.000911f, +0.000808f, -0.008556f, -0.002028f, -0.000572f, + -0.005968f, -0.009458f, +0.009618f, +0.000699f, -0.000332f, +0.002508f, -0.008806f, -0.001933f, +0.002238f, +0.006439f, + -0.006964f, -0.003364f, -0.002883f, -0.005613f, -0.001113f, +0.001376f, -0.002271f, -0.001833f, -0.001827f, -0.001172f, + +0.002561f, +0.003009f, -0.000556f, -0.002857f, -0.002805f, +0.000043f, -0.000519f, +0.000228f, -0.000549f, +0.001388f, + -0.001562f, -0.001296f, +0.001320f, -0.000866f, +0.001395f, +0.000348f, +0.001651f, -0.000654f, +0.001098f, -0.000774f, + -0.001192f, -0.000184f, -0.000811f, -0.000500f, -0.000814f, -0.000597f, -0.001185f, -0.001073f, -0.000798f, +0.000349f, + -0.000126f, +0.000168f, +0.000335f, +0.000059f, +0.000899f, -0.000675f, +0.000550f, +0.000177f, -0.000128f, -0.000106f, + +0.000464f, -0.001000f, -0.000023f, +0.000120f, -0.000389f, +0.000146f + }, + { + -0.004938f, +0.011682f, +0.008535f, +0.000898f, +0.000915f, -0.001246f, +0.001332f, -0.002487f, +0.001075f, -0.003546f, + +0.000472f, +0.003873f, +0.011387f, +0.010297f, +0.008565f, +0.008043f, +0.033446f, -0.026397f, +0.015078f, +0.008979f, + +0.003504f, +0.010104f, -0.003362f, +0.006844f, -0.008406f, +0.005980f, +0.007596f, +0.000409f, -0.006447f, +0.007174f, + +0.002338f, +0.001076f, +0.009244f, +0.007479f, -0.002468f, +0.002859f, -0.004195f, -0.000867f, -0.000743f, -0.002180f, + -0.001711f, +0.000554f, -0.001326f, +0.004227f, +0.000693f, +0.001809f, -0.000113f, +0.001097f, -0.000975f, -0.000691f, + +0.003926f, -0.000293f, -0.001681f, +0.002619f, -0.001232f, -0.002837f, -0.001586f, -0.000110f, -0.001631f, +0.001601f, + +0.001870f, +0.000022f, +0.000869f, +0.000676f, +0.001621f, -0.000482f, -0.000315f, -0.001529f, -0.000584f, +0.000248f, + +0.000901f, -0.001042f, +0.000719f, -0.000237f, +0.001189f, -0.000297f, -0.001510f, +0.000409f, +0.000760f, +0.000463f, + +0.000799f, -0.000745f, -0.000082f, +0.000819f, -0.000851f, +0.000155f, +0.000299f, +0.000886f, -0.000995f, -0.000091f, + +0.000562f, +0.000167f, +0.000367f, +0.000075f, -0.000091f, +0.000111f + }, + { + +0.017277f, +0.137196f, -0.014053f, +0.061965f, +0.006144f, +0.001604f, +0.004373f, -0.007067f, -0.000992f, -0.008677f, + -0.000310f, -0.004151f, -0.008521f, +0.007714f, -0.015524f, +0.008628f, -0.009246f, +0.001828f, -0.001264f, -0.001960f, + -0.007126f, -0.000092f, -0.000415f, -0.000623f, +0.001737f, -0.004809f, -0.004418f, -0.001481f, +0.004121f, +0.000393f, + +0.005210f, +0.000178f, -0.000496f, +0.012185f, -0.000225f, -0.000975f, +0.004399f, -0.004421f, +0.004791f, +0.001320f, + +0.001209f, -0.004161f, -0.007158f, -0.003489f, -0.002656f, -0.002329f, -0.002013f, -0.003473f, -0.006188f, -0.001520f, + +0.004383f, +0.002855f, -0.001087f, +0.003436f, +0.001663f, +0.000806f, +0.003924f, -0.000012f, -0.000083f, +0.000049f, + +0.002758f, -0.002944f, +0.000837f, -0.000149f, -0.002335f, +0.000858f, +0.002928f, -0.000176f, +0.002018f, -0.002092f, + -0.001395f, +0.000323f, +0.000907f, +0.000104f, -0.001969f, -0.000154f, -0.000179f, -0.000215f, -0.000227f, -0.000274f, + -0.000867f, +0.000036f, +0.000033f, -0.000416f, -0.000252f, -0.000560f, -0.000449f, -0.000554f, -0.000945f, +0.000580f, + +0.000356f, +0.000424f, +0.000328f, +0.000250f, -0.000607f, -0.000609f + }, + { + +0.000940f, -0.016543f, -0.003623f, +0.001758f, -0.002071f, +0.000572f, +0.000446f, -0.001896f, +0.001208f, +0.003137f, + -0.005128f, +0.000019f, -0.000965f, +0.013464f, -0.006567f, +0.007785f, +0.012310f, +0.026586f, +0.000392f, -0.004126f, + +0.001816f, +0.002107f, +0.006899f, -0.001498f, +0.004368f, +0.003156f, -0.009868f, +0.026167f, +0.003348f, -0.016675f, + +0.004777f, +0.001147f, +0.004736f, +0.013901f, +0.001652f, +0.001414f, -0.006188f, -0.003227f, -0.001206f, +0.001531f, + -0.003929f, -0.000883f, +0.005112f, +0.000404f, +0.000074f, -0.003360f, -0.002064f, +0.001898f, +0.000231f, +0.000617f, + -0.004006f, -0.001504f, -0.000730f, -0.002657f, +0.000731f, -0.000632f, -0.001011f, -0.000452f, -0.001173f, -0.000157f, + -0.000059f, +0.003021f, +0.001979f, +0.000862f, -0.000112f, +0.001630f, +0.001282f, +0.002333f, +0.000387f, +0.001976f, + +0.002278f, +0.001173f, +0.000616f, +0.001168f, -0.001363f, +0.001181f, +0.000535f, -0.000610f, -0.000258f, -0.000310f, + +0.000249f, -0.000491f, -0.000615f, -0.000010f, +0.000664f, -0.000828f, +0.000614f, -0.000498f, +0.000151f, -0.000407f, + -0.000444f, -0.000045f, -0.000564f, +0.000094f, +0.000241f, -0.000270f + }, + { + +0.050863f, +0.053880f, -0.004017f, +0.079882f, -0.011566f, +0.000546f, +0.001284f, +0.000861f, +0.000614f, +0.004539f, + +0.003658f, -0.006640f, -0.011571f, -0.008662f, -0.003600f, +0.005118f, +0.003465f, -0.001565f, +0.004941f, +0.007099f, + +0.007431f, -0.003746f, -0.005569f, +0.006003f, +0.001959f, -0.006446f, -0.004214f, -0.002426f, -0.003330f, -0.000949f, + -0.004707f, +0.003712f, +0.002200f, -0.001644f, -0.001113f, +0.001105f, -0.002198f, -0.006405f, -0.001694f, +0.004303f, + -0.003125f, -0.002479f, +0.002067f, -0.001108f, -0.003882f, +0.000989f, -0.006817f, -0.002656f, +0.000152f, +0.000278f, + +0.000481f, -0.003950f, -0.001468f, +0.004241f, +0.001934f, +0.001074f, +0.000319f, -0.002250f, +0.000720f, -0.000258f, + +0.001574f, +0.000749f, +0.000561f, +0.000445f, -0.000253f, -0.000261f, +0.001081f, -0.000545f, -0.001205f, -0.000488f, + +0.000061f, +0.002164f, +0.000044f, +0.000417f, +0.002879f, -0.000244f, -0.000595f, -0.000181f, +0.000795f, -0.000192f, + +0.001179f, +0.000815f, -0.000861f, -0.001376f, +0.000290f, -0.000043f, +0.000599f, -0.001126f, -0.000222f, +0.000555f, + +0.000530f, +0.000151f, -0.000245f, -0.000055f, -0.000491f, -0.000591f + }, + { + +0.000268f, -0.001139f, -0.008807f, +0.001949f, +0.000551f, +0.001922f, -0.001153f, -0.000751f, +0.010134f, -0.000755f, + +0.006014f, -0.000890f, +0.004201f, -0.004875f, +0.002548f, +0.016722f, +0.021887f, +0.014833f, +0.008744f, -0.002110f, + +0.003768f, +0.000082f, +0.000033f, -0.012917f, -0.006122f, +0.010367f, -0.006084f, -0.007135f, -0.006629f, +0.016791f, + -0.007791f, +0.003859f, -0.006405f, -0.004825f, -0.002035f, +0.003517f, +0.004640f, +0.005046f, -0.002453f, -0.007044f, + -0.000997f, +0.005480f, +0.005348f, -0.001090f, -0.004567f, -0.003663f, +0.001820f, +0.001510f, +0.002586f, -0.000372f, + +0.004677f, -0.001354f, -0.000635f, -0.000834f, -0.002299f, -0.001127f, -0.000740f, +0.001025f, +0.001546f, +0.001611f, + -0.001067f, -0.002023f, -0.001592f, +0.000489f, +0.002105f, -0.002470f, -0.000268f, -0.001733f, -0.001509f, +0.000379f, + +0.002200f, -0.002325f, -0.001711f, +0.000300f, +0.000045f, +0.000490f, -0.000398f, -0.001924f, -0.000578f, +0.000777f, + +0.000047f, +0.000190f, +0.000724f, +0.000073f, -0.000290f, -0.000294f, -0.000392f, +0.000183f, +0.000037f, -0.000345f, + -0.000434f, -0.000208f, -0.000531f, -0.001072f, +0.000626f, +0.000077f + }, + { + -0.015464f, +0.203524f, +0.003531f, +0.073897f, -0.006766f, -0.001782f, -0.001370f, +0.005427f, +0.003895f, -0.004500f, + -0.010179f, -0.000867f, +0.001613f, -0.001368f, +0.003531f, +0.000115f, -0.007249f, +0.001111f, -0.008862f, +0.006478f, + +0.004928f, -0.000745f, -0.004426f, -0.001010f, -0.002919f, -0.000025f, -0.002292f, -0.000805f, -0.001969f, -0.000910f, + -0.004667f, -0.006449f, -0.002118f, -0.000259f, +0.005009f, +0.002201f, +0.000524f, +0.002353f, -0.004736f, -0.001324f, + -0.000564f, +0.007293f, +0.001930f, -0.000854f, +0.000088f, +0.001081f, -0.001717f, -0.005637f, -0.001801f, -0.005652f, + -0.002509f, -0.001172f, -0.001038f, +0.001220f, -0.000668f, +0.002040f, +0.000416f, +0.002838f, -0.003894f, +0.001353f, + -0.001152f, +0.002115f, -0.002238f, -0.000995f, +0.001182f, -0.001474f, -0.000062f, +0.000272f, -0.000927f, +0.000370f, + -0.000239f, +0.001166f, +0.000579f, +0.000383f, +0.000353f, +0.000938f, +0.001135f, +0.000694f, +0.000381f, +0.000295f, + -0.001111f, +0.000124f, +0.000202f, +0.000357f, -0.000475f, -0.000400f, -0.000705f, +0.000330f, -0.000655f, +0.000263f, + -0.000216f, -0.000223f, +0.000103f, +0.000025f, -0.000518f, -0.000013f + }, + { + -0.003439f, +0.037383f, -0.005242f, -0.007440f, +0.008479f, -0.008895f, +0.004807f, +0.003708f, -0.001211f, -0.007862f, + +0.001105f, +0.004850f, +0.006198f, -0.001164f, +0.002978f, -0.005046f, +0.007773f, -0.004984f, +0.016052f, -0.002240f, + +0.003938f, -0.005606f, -0.004648f, +0.002715f, +0.005753f, -0.004178f, +0.006185f, +0.002983f, -0.003457f, +0.006470f, + +0.006687f, -0.000686f, +0.010187f, -0.005147f, -0.010955f, +0.006653f, -0.002382f, +0.001753f, -0.003506f, -0.000275f, + +0.001755f, -0.003604f, -0.005532f, -0.001103f, -0.004793f, +0.002300f, -0.001266f, -0.001484f, +0.001664f, +0.003923f, + -0.000135f, -0.002364f, -0.000240f, -0.001696f, +0.000540f, +0.001094f, -0.000550f, -0.000744f, +0.000049f, +0.000853f, + +0.002236f, -0.001134f, +0.000982f, +0.001564f, +0.000181f, +0.000554f, -0.001254f, -0.001998f, -0.000321f, -0.000689f, + +0.001106f, +0.000632f, -0.002000f, +0.000734f, -0.000796f, +0.000717f, -0.000755f, +0.000860f, +0.000328f, +0.000768f, + +0.000626f, +0.000190f, -0.000364f, -0.000066f, -0.001158f, +0.000612f, -0.000066f, +0.000021f, -0.000167f, +0.000590f, + -0.000519f, -0.000066f, -0.000936f, -0.000342f, +0.000467f, -0.000019f + }, + { + -0.038838f, -0.055096f, +0.006596f, +0.011652f, +0.004914f, -0.009050f, -0.014620f, +0.000111f, -0.009166f, +0.003861f, + -0.001742f, +0.008958f, -0.005043f, +0.006044f, +0.000207f, -0.004222f, +0.011678f, -0.002254f, -0.005152f, -0.010658f, + -0.008738f, -0.002077f, +0.001362f, +0.006279f, -0.003491f, +0.009276f, +0.006450f, +0.004168f, +0.008676f, -0.000572f, + -0.002246f, +0.004142f, +0.001370f, -0.001777f, +0.008798f, -0.002251f, -0.006094f, +0.005974f, -0.004920f, -0.001989f, + -0.004857f, +0.003619f, +0.005500f, +0.002515f, +0.001551f, -0.003560f, +0.003065f, -0.002226f, +0.000176f, +0.001643f, + -0.001889f, -0.000276f, +0.001629f, -0.001314f, -0.004899f, +0.001829f, +0.000688f, +0.001986f, -0.000971f, -0.003449f, + +0.001028f, +0.001096f, +0.001284f, -0.000371f, -0.000362f, -0.000613f, -0.002448f, +0.000074f, +0.000036f, -0.001034f, + +0.000062f, +0.000278f, -0.000837f, +0.000985f, -0.000545f, -0.001152f, +0.001461f, -0.001670f, +0.000626f, -0.000270f, + -0.000029f, +0.000554f, +0.001086f, -0.000032f, -0.000075f, -0.000645f, +0.000501f, -0.000219f, -0.000488f, -0.000269f, + +0.000552f, -0.000490f, +0.000516f, +0.000474f, -0.000517f, -0.000205f + }, + { + -0.004983f, -0.010087f, +0.013322f, -0.009805f, +0.010125f, +0.000281f, +0.013190f, +0.008713f, +0.000222f, -0.005692f, + +0.002997f, -0.000593f, -0.001148f, -0.022464f, +0.013488f, -0.008194f, -0.000342f, +0.003477f, -0.023843f, +0.012380f, + -0.018720f, -0.005566f, -0.014007f, +0.001484f, +0.003123f, -0.009195f, +0.005449f, +0.018912f, +0.000721f, -0.020655f, + -0.002146f, +0.004094f, -0.000271f, +0.005244f, +0.006390f, -0.000219f, +0.000191f, +0.001274f, -0.005531f, -0.004030f, + +0.005326f, +0.000544f, -0.005315f, -0.004540f, +0.002608f, +0.004333f, -0.000697f, -0.002425f, +0.004621f, +0.000653f, + +0.002010f, +0.002436f, -0.000088f, +0.000895f, -0.002491f, +0.002734f, -0.000171f, +0.000245f, +0.000528f, -0.000872f, + -0.003898f, +0.000995f, -0.000569f, +0.001418f, +0.000403f, -0.002306f, +0.001144f, +0.001612f, +0.000286f, +0.001299f, + -0.002310f, +0.000024f, -0.000766f, -0.000243f, +0.000393f, +0.000136f, -0.000225f, +0.000799f, +0.002321f, +0.000019f, + +0.001171f, +0.000509f, +0.000145f, +0.000001f, -0.000494f, -0.000477f, -0.000955f, -0.000026f, -0.000892f, -0.000649f, + -0.000442f, +0.000044f, +0.000192f, +0.000679f, -0.000856f, +0.000251f + }, + { + -0.094872f, -0.102125f, +0.027667f, +0.008892f, +0.037536f, -0.028966f, -0.013621f, +0.012109f, -0.007038f, -0.006334f, + +0.011811f, +0.012793f, +0.001923f, -0.010703f, +0.000692f, -0.006876f, +0.005572f, +0.004999f, -0.020903f, +0.005267f, + -0.009341f, -0.004317f, +0.002558f, -0.003176f, +0.003485f, -0.015541f, +0.002969f, +0.005911f, +0.004342f, -0.001254f, + -0.000076f, +0.000139f, -0.006427f, -0.003626f, +0.001554f, -0.002911f, -0.003195f, -0.000526f, -0.003123f, +0.002637f, + +0.002452f, +0.002028f, +0.005813f, +0.005269f, +0.004536f, +0.011766f, -0.000887f, -0.002280f, -0.002683f, -0.003393f, + -0.008457f, +0.001623f, +0.000045f, -0.000124f, +0.000602f, -0.002859f, -0.001969f, +0.001311f, +0.000030f, -0.000442f, + -0.003414f, +0.001129f, +0.000029f, +0.000741f, -0.000990f, +0.000222f, -0.000058f, +0.001655f, +0.000659f, +0.001135f, + +0.001717f, +0.000609f, +0.000573f, +0.001017f, -0.001860f, -0.000505f, -0.001249f, +0.000783f, -0.001165f, -0.001008f, + -0.000350f, +0.000593f, -0.000457f, +0.000958f, +0.000711f, +0.000836f, +0.000515f, +0.000824f, -0.000040f, +0.000164f, + +0.000502f, +0.001251f, -0.000267f, -0.000360f, +0.000130f, +0.000214f + }, + { + -0.009373f, -0.022872f, +0.015120f, +0.002026f, -0.002388f, +0.000016f, +0.008719f, +0.001376f, +0.014588f, +0.004022f, + -0.003922f, -0.003030f, -0.002438f, -0.027887f, +0.025116f, +0.010542f, +0.000375f, -0.000060f, +0.007245f, +0.006349f, + -0.004770f, +0.005652f, -0.009854f, -0.010425f, -0.017030f, +0.011107f, -0.015379f, +0.029654f, +0.011056f, +0.010059f, + -0.008877f, -0.011212f, +0.001840f, +0.007306f, -0.001778f, +0.004511f, +0.009315f, +0.004220f, -0.000028f, +0.002288f, + -0.004299f, -0.000963f, -0.001394f, -0.002787f, -0.003699f, +0.002431f, +0.002026f, +0.003360f, -0.000932f, -0.001346f, + +0.002258f, -0.000151f, +0.000153f, -0.000720f, +0.001135f, +0.000705f, -0.001324f, +0.003030f, +0.000173f, +0.002226f, + -0.003061f, -0.000013f, +0.000912f, -0.001422f, -0.000921f, -0.000329f, -0.000776f, -0.000862f, +0.002278f, -0.000876f, + +0.000855f, -0.002203f, +0.000819f, +0.000980f, -0.000457f, +0.000333f, +0.000697f, -0.000271f, -0.000324f, +0.001365f, + -0.000359f, +0.000668f, +0.000399f, +0.001099f, -0.000194f, +0.000556f, +0.000436f, +0.000231f, +0.000970f, +0.000839f, + -0.000116f, +0.000481f, +0.000439f, +0.000540f, +0.000579f, +0.000482f + }, + { + -0.032571f, -0.183388f, +0.006618f, -0.012537f, +0.004010f, -0.003174f, -0.010001f, -0.000081f, -0.011719f, +0.011068f, + +0.008502f, -0.016548f, +0.016818f, -0.011041f, +0.017461f, +0.007429f, -0.007830f, -0.010239f, -0.009330f, -0.010401f, + +0.004506f, +0.002506f, -0.002119f, -0.009051f, +0.005547f, +0.005390f, +0.012584f, -0.003672f, +0.003330f, +0.004138f, + +0.004731f, -0.006157f, +0.004710f, +0.012232f, +0.000039f, +0.000514f, +0.000941f, -0.003748f, -0.000914f, -0.000203f, + -0.010388f, -0.001529f, -0.003040f, -0.004321f, +0.003125f, +0.002489f, +0.002196f, +0.003435f, +0.000197f, +0.003106f, + +0.002238f, +0.004828f, -0.007043f, +0.000683f, -0.002948f, +0.003116f, -0.002452f, +0.000597f, -0.003049f, +0.000448f, + -0.002227f, +0.004130f, -0.001636f, -0.001023f, +0.001380f, +0.000196f, +0.001019f, +0.002196f, -0.000430f, +0.002211f, + -0.000611f, +0.002122f, +0.000065f, -0.000542f, +0.000551f, -0.000121f, -0.000660f, -0.000177f, +0.000372f, -0.000869f, + +0.000397f, -0.000670f, -0.000988f, -0.000223f, -0.000476f, -0.001469f, -0.000353f, -0.000489f, +0.000185f, -0.000283f, + +0.000561f, -0.000338f, -0.000453f, -0.000645f, -0.000672f, -0.000044f + } + }, + { + { + +0.001805f, +0.042635f, -0.001119f, +0.005192f, -0.025707f, -0.001351f, -0.001336f, +0.001892f, +0.000975f, -0.002352f, + -0.012033f, -0.008921f, +0.007856f, +0.000976f, +0.004950f, +0.023437f, -0.000303f, -0.001240f, +0.001744f, -0.008412f, + -0.014013f, +0.002588f, -0.002543f, +0.002029f, -0.002017f, -0.006457f, -0.015315f, -0.001382f, -0.001901f, +0.008389f, + -0.000834f, -0.001154f, +0.003810f, -0.000278f, +0.002878f, -0.002973f, +0.001079f, +0.002781f, -0.002639f, -0.004107f, + +0.004434f, -0.002960f, -0.004268f, +0.004217f, +0.007978f, -0.003115f, -0.001223f, -0.000372f, -0.003951f, -0.000277f, + -0.000084f, -0.001410f, -0.001370f, -0.002662f, -0.000337f, +0.001087f, +0.000903f, +0.001501f, +0.000886f, +0.001815f, + +0.000344f, -0.000080f, +0.000924f, -0.000157f, +0.000562f, +0.000699f, -0.001158f, -0.002213f, -0.001076f, +0.000256f, + +0.001075f, -0.000145f, +0.000082f, +0.000596f, -0.000623f, -0.000021f, +0.000253f, +0.000292f, -0.001415f, -0.000145f, + -0.000909f, +0.000143f, -0.000875f, +0.000779f, +0.000513f, +0.000166f, +0.000070f, +0.000128f, -0.000154f, -0.000827f, + +0.000054f, -0.000216f, -0.000312f, -0.000777f, -0.000126f, -0.000058f + }, + { + -0.003272f, -0.089421f, +0.017246f, -0.030578f, -0.023992f, -0.001372f, -0.000615f, +0.010069f, -0.001269f, +0.004047f, + -0.009558f, +0.003954f, +0.001797f, +0.017229f, +0.007334f, -0.012428f, -0.009351f, -0.002729f, +0.008449f, +0.005182f, + +0.013361f, +0.007985f, -0.002563f, +0.001028f, -0.004729f, +0.006244f, +0.009660f, -0.005528f, -0.008471f, +0.007882f, + -0.003363f, -0.004799f, -0.001872f, +0.001306f, -0.003698f, +0.001256f, -0.000729f, +0.002511f, -0.001452f, -0.000401f, + -0.002594f, -0.002532f, +0.003343f, -0.001109f, -0.000049f, +0.001288f, +0.000791f, +0.000086f, -0.000847f, -0.000241f, + +0.001354f, -0.005583f, +0.000730f, +0.001541f, -0.001827f, -0.000025f, +0.000168f, +0.001721f, +0.000622f, +0.001304f, + -0.000699f, +0.000435f, -0.001855f, -0.001468f, +0.001462f, -0.000352f, +0.001240f, -0.000724f, +0.001990f, +0.000360f, + -0.000240f, -0.001580f, +0.000747f, +0.000019f, +0.001238f, -0.001191f, +0.000515f, -0.001633f, -0.000110f, +0.000195f, + -0.001147f, +0.000417f, -0.000475f, +0.000320f, +0.000422f, +0.000469f, -0.000617f, -0.000651f, -0.000902f, +0.000233f, + -0.000684f, +0.000149f, +0.000057f, -0.000145f, +0.000482f, -0.000310f + }, + { + -0.004898f, -0.011146f, +0.015996f, +0.065092f, -0.023166f, +0.000918f, +0.002808f, +0.003784f, +0.003062f, -0.002773f, + -0.007704f, +0.005111f, +0.002287f, +0.001670f, +0.011191f, -0.012723f, +0.004897f, -0.003557f, +0.001367f, -0.006560f, + -0.005383f, -0.014675f, +0.002020f, -0.005148f, +0.001894f, +0.004065f, +0.009218f, +0.001422f, -0.001099f, +0.000862f, + -0.005653f, -0.005030f, +0.008034f, -0.002713f, -0.002936f, +0.000284f, -0.008036f, +0.004375f, -0.000633f, +0.005307f, + -0.003461f, -0.000295f, +0.000463f, -0.003252f, -0.002342f, +0.001038f, +0.001300f, +0.001773f, +0.000804f, +0.000029f, + +0.002540f, +0.001690f, -0.001351f, -0.001683f, -0.001833f, +0.002194f, +0.001385f, +0.001256f, -0.001945f, +0.001524f, + -0.001134f, +0.000287f, +0.003014f, -0.000452f, +0.001967f, -0.000427f, +0.000394f, -0.000183f, +0.002524f, +0.000232f, + -0.001197f, +0.000543f, -0.000071f, +0.000253f, -0.000340f, -0.000194f, +0.000094f, -0.000378f, -0.000199f, +0.000704f, + +0.000327f, +0.000498f, +0.000038f, -0.001125f, +0.000317f, -0.000702f, +0.000024f, +0.000102f, +0.000176f, +0.000109f, + +0.000919f, -0.000220f, +0.000655f, +0.000202f, -0.000218f, +0.000143f + }, + { + +0.003714f, -0.008028f, -0.015019f, +0.002975f, +0.000735f, -0.001582f, +0.001310f, +0.000307f, +0.003951f, -0.003524f, + +0.000521f, +0.000546f, +0.003133f, +0.012838f, -0.002799f, -0.003065f, +0.028636f, -0.017555f, +0.024934f, +0.000156f, + +0.002230f, +0.002375f, -0.006464f, +0.004758f, -0.007616f, +0.009390f, +0.009014f, -0.000074f, -0.011611f, +0.009579f, + +0.006892f, -0.005807f, +0.000601f, +0.001265f, -0.006418f, -0.003520f, -0.008229f, -0.002147f, -0.005084f, -0.000559f, + +0.000728f, +0.000701f, -0.001137f, +0.006307f, +0.000919f, +0.000712f, -0.002607f, +0.002726f, +0.001132f, +0.001174f, + +0.002939f, +0.000086f, -0.000396f, +0.000599f, -0.001766f, -0.000397f, +0.000845f, +0.001369f, -0.001846f, -0.000700f, + -0.000372f, -0.001804f, +0.000874f, +0.001714f, +0.001670f, -0.001844f, +0.000632f, -0.000280f, -0.001276f, -0.000158f, + +0.001392f, -0.000707f, +0.000932f, -0.000309f, +0.000758f, +0.000488f, -0.000529f, -0.000264f, -0.000429f, -0.000221f, + +0.000352f, -0.000550f, -0.000661f, +0.000288f, -0.001244f, -0.000239f, +0.000616f, +0.001035f, -0.000670f, -0.000073f, + +0.000367f, -0.000381f, -0.000052f, -0.000393f, -0.000225f, +0.000073f + }, + { + -0.029451f, +0.030376f, -0.033023f, +0.045851f, -0.015128f, +0.000031f, +0.000958f, -0.015183f, -0.007552f, -0.014935f, + -0.006389f, -0.014656f, -0.009378f, +0.012501f, -0.014312f, +0.016109f, -0.003501f, -0.006940f, -0.009614f, -0.000365f, + -0.007564f, -0.006319f, +0.005022f, +0.004257f, -0.000701f, -0.006473f, -0.009152f, -0.007585f, +0.000200f, -0.003902f, + +0.002878f, -0.000570f, -0.006948f, +0.002710f, -0.006674f, +0.000101f, +0.008744f, -0.003784f, +0.005425f, -0.002540f, + -0.004553f, -0.006352f, -0.000863f, +0.003893f, +0.001287f, -0.000021f, +0.003222f, +0.000654f, -0.003458f, -0.003083f, + +0.000782f, +0.001553f, -0.001534f, +0.003952f, +0.000825f, -0.000822f, +0.000013f, -0.001237f, +0.001202f, +0.000111f, + +0.001056f, -0.002437f, +0.000608f, +0.000835f, -0.000286f, +0.002408f, +0.001520f, -0.000987f, +0.001901f, -0.000817f, + -0.000112f, -0.000127f, -0.000896f, -0.000012f, -0.000938f, +0.000614f, -0.000665f, -0.000493f, -0.000132f, -0.000233f, + -0.000650f, -0.000359f, +0.000545f, +0.000565f, +0.000232f, +0.000138f, -0.000271f, -0.000085f, -0.000191f, +0.000372f, + -0.000484f, +0.000176f, +0.000230f, +0.000563f, -0.000092f, -0.000123f + }, + { + +0.001031f, +0.004850f, +0.009069f, +0.000063f, -0.003847f, -0.000168f, -0.000351f, -0.000949f, +0.000991f, +0.000900f, + -0.001233f, +0.001527f, -0.001465f, +0.009061f, -0.010346f, -0.002631f, -0.021307f, +0.009143f, +0.004033f, -0.001498f, + +0.004203f, -0.004391f, +0.000854f, -0.000529f, +0.004276f, -0.001172f, -0.017771f, +0.023526f, +0.001552f, -0.016583f, + +0.007436f, -0.009417f, -0.007363f, +0.002349f, -0.001483f, +0.011168f, +0.005119f, +0.004432f, +0.000478f, -0.001155f, + -0.000485f, +0.002063f, +0.004800f, -0.000290f, -0.003192f, -0.002991f, -0.001008f, +0.000511f, -0.003299f, +0.001205f, + +0.000411f, +0.001902f, +0.000584f, -0.001418f, -0.000087f, -0.001383f, -0.001391f, -0.000644f, -0.001409f, +0.000679f, + -0.000045f, +0.003079f, +0.001938f, +0.000670f, -0.000206f, +0.000404f, -0.000223f, +0.001004f, +0.000030f, +0.000630f, + +0.000663f, +0.000484f, -0.000447f, +0.000953f, -0.001748f, +0.000362f, -0.000298f, -0.000888f, -0.000183f, -0.000163f, + +0.001292f, +0.000309f, -0.000568f, -0.000124f, +0.000637f, -0.000850f, +0.000636f, -0.000435f, +0.000123f, -0.000207f, + -0.000797f, +0.000065f, -0.000221f, -0.000112f, +0.000358f, -0.000214f + }, + { + -0.041432f, -0.061753f, +0.007117f, +0.088049f, +0.003788f, +0.001838f, -0.005533f, -0.005091f, +0.000763f, -0.009225f, + -0.001114f, -0.004365f, -0.000030f, +0.001757f, +0.001320f, +0.002832f, +0.000389f, -0.000683f, -0.002866f, -0.001966f, + -0.002146f, -0.001701f, -0.005867f, -0.006030f, -0.010288f, -0.004947f, +0.000294f, -0.006569f, -0.005799f, +0.000948f, + -0.002844f, +0.001704f, +0.002398f, +0.005435f, +0.002259f, +0.003983f, -0.001990f, -0.003386f, -0.003041f, -0.001614f, + -0.000291f, -0.002060f, +0.000469f, +0.004559f, -0.000599f, +0.004925f, -0.000983f, -0.001947f, -0.001679f, -0.001024f, + -0.002042f, -0.005909f, -0.002700f, -0.000175f, -0.000211f, +0.002110f, +0.001671f, -0.002712f, +0.001076f, -0.000798f, + +0.000629f, +0.000584f, -0.000194f, -0.001136f, -0.000080f, +0.000878f, +0.001314f, -0.000474f, -0.000392f, +0.000055f, + -0.000363f, +0.001672f, +0.000098f, -0.000189f, +0.000900f, -0.000893f, -0.000287f, -0.000331f, +0.000432f, -0.000058f, + +0.000547f, +0.000928f, +0.000271f, -0.000079f, +0.001054f, -0.000306f, +0.000556f, +0.000076f, +0.000023f, -0.000026f, + +0.000410f, +0.000277f, +0.000025f, +0.000195f, +0.000511f, +0.000447f + }, + { + +0.001801f, +0.010744f, -0.003272f, -0.003228f, -0.005309f, +0.001250f, -0.002155f, -0.004402f, +0.004761f, -0.003923f, + +0.004953f, +0.000855f, +0.006409f, -0.003902f, -0.000084f, -0.014804f, -0.033313f, -0.001633f, +0.019267f, -0.009830f, + -0.002212f, +0.011201f, +0.000799f, -0.006469f, -0.000542f, -0.005165f, -0.016787f, -0.006649f, +0.003323f, +0.020713f, + -0.010589f, +0.012967f, +0.012152f, +0.006677f, +0.002460f, -0.000239f, +0.003653f, -0.000134f, -0.003630f, -0.000332f, + -0.001597f, +0.001166f, +0.002236f, -0.002823f, -0.003139f, -0.002150f, +0.000408f, -0.000763f, +0.004871f, -0.000963f, + +0.000421f, -0.001830f, +0.000448f, -0.000045f, -0.001053f, -0.000718f, -0.000804f, -0.001577f, +0.000069f, +0.002816f, + +0.001061f, +0.001339f, +0.000088f, +0.000104f, +0.001661f, -0.001557f, +0.000879f, -0.001062f, -0.000729f, -0.000164f, + +0.000638f, -0.001111f, +0.000191f, +0.001154f, -0.000350f, +0.000051f, -0.000413f, -0.001308f, -0.000256f, +0.001807f, + +0.000868f, -0.000023f, +0.000984f, +0.000081f, +0.000097f, +0.000471f, +0.000798f, +0.000816f, +0.000268f, +0.000247f, + -0.000259f, -0.000509f, -0.000189f, -0.001001f, +0.000061f, +0.000054f + }, + { + -0.021436f, +0.166361f, -0.018486f, +0.089721f, +0.008118f, -0.001476f, -0.003425f, -0.004861f, -0.004406f, -0.003565f, + -0.006904f, -0.000855f, -0.003675f, +0.012103f, +0.012541f, +0.008795f, -0.003892f, -0.001073f, -0.009081f, +0.008525f, + +0.007356f, +0.001744f, -0.001138f, +0.004430f, +0.001207f, +0.002589f, +0.001243f, +0.003512f, -0.000961f, -0.004699f, + -0.004316f, -0.004119f, +0.000374f, -0.001578f, +0.002668f, -0.004086f, +0.000846f, +0.005988f, -0.000916f, +0.001892f, + +0.000103f, +0.003034f, +0.001262f, -0.001262f, +0.003753f, +0.003474f, -0.000685f, -0.001421f, +0.005764f, -0.002219f, + -0.001199f, +0.002374f, +0.000472f, +0.000993f, -0.001884f, +0.003627f, -0.000012f, +0.001112f, -0.003478f, +0.004099f, + -0.000760f, +0.000324f, -0.000626f, +0.001443f, +0.000409f, -0.001241f, +0.001013f, +0.001052f, +0.000593f, +0.000972f, + -0.000784f, +0.001269f, +0.000494f, +0.000182f, +0.000321f, +0.000366f, +0.000625f, -0.000050f, +0.000062f, -0.000102f, + -0.001464f, -0.000326f, +0.000177f, +0.000164f, -0.000879f, +0.000806f, -0.000274f, -0.000402f, -0.000808f, +0.000862f, + +0.000207f, -0.000513f, -0.000557f, -0.000176f, -0.000213f, +0.000541f + }, + { + +0.003328f, +0.041050f, -0.000193f, -0.009342f, -0.004043f, +0.003039f, +0.015491f, +0.003849f, +0.007752f, -0.004402f, + -0.004038f, -0.005975f, +0.001774f, -0.003464f, -0.001193f, +0.000492f, -0.001150f, -0.002857f, +0.015578f, -0.011819f, + -0.006444f, -0.021944f, -0.012739f, +0.002661f, +0.000056f, -0.012240f, +0.007194f, -0.000218f, -0.010664f, +0.005359f, + +0.007296f, -0.001157f, +0.005613f, -0.007929f, -0.004277f, +0.004784f, -0.001468f, +0.004334f, -0.000187f, -0.000796f, + +0.004918f, +0.004230f, +0.002219f, +0.000956f, -0.005163f, +0.001512f, -0.000258f, -0.001684f, -0.000934f, +0.002642f, + -0.000537f, -0.002593f, +0.000176f, -0.000842f, +0.000407f, +0.000825f, -0.001238f, +0.001898f, +0.000483f, -0.001270f, + -0.000136f, -0.001067f, -0.000649f, +0.001034f, -0.000586f, +0.000567f, -0.000223f, -0.001149f, +0.000452f, -0.000176f, + +0.001294f, +0.001310f, -0.001413f, +0.001847f, +0.000216f, +0.001529f, +0.000146f, +0.000571f, +0.000066f, +0.000202f, + -0.000604f, +0.000647f, +0.000535f, +0.000137f, -0.000455f, +0.001030f, -0.000283f, -0.000265f, -0.000501f, +0.000597f, + -0.000463f, +0.000049f, -0.000648f, -0.000351f, +0.000482f, -0.000317f + }, + { + +0.038261f, -0.019065f, -0.054666f, -0.009493f, -0.006351f, +0.002729f, -0.011647f, -0.007171f, -0.009219f, -0.002448f, + -0.007609f, +0.003481f, -0.006518f, +0.004376f, +0.004128f, -0.008831f, -0.003363f, -0.002962f, +0.009067f, +0.001884f, + +0.007364f, +0.005172f, -0.008157f, -0.002599f, -0.005910f, +0.005305f, +0.001403f, -0.009239f, -0.001151f, -0.005157f, + -0.004071f, +0.002561f, -0.002480f, -0.005137f, +0.011223f, +0.000930f, -0.006303f, +0.004263f, +0.000039f, +0.001749f, + -0.004704f, +0.002528f, +0.001961f, -0.000455f, +0.002560f, -0.000930f, +0.005144f, -0.002348f, -0.000097f, +0.003323f, + -0.002858f, -0.002759f, +0.000295f, -0.001976f, -0.004318f, +0.001716f, -0.002560f, -0.000435f, -0.001094f, -0.000933f, + +0.002438f, -0.001071f, -0.000316f, -0.001693f, +0.000881f, -0.000237f, -0.000847f, +0.000810f, +0.000932f, -0.000418f, + -0.000226f, +0.000671f, -0.001123f, +0.000716f, -0.000025f, -0.001388f, +0.000597f, -0.002031f, +0.001218f, +0.000473f, + +0.000404f, +0.000370f, +0.000687f, -0.000071f, -0.000432f, -0.000887f, +0.000209f, +0.000268f, -0.000476f, -0.000337f, + +0.000383f, -0.000324f, +0.000450f, +0.000646f, +0.000152f, -0.000251f + }, + { + +0.003288f, -0.033894f, -0.005127f, -0.007287f, -0.001034f, -0.004800f, +0.009079f, -0.001951f, -0.001657f, +0.002532f, + +0.000280f, -0.005431f, +0.002114f, -0.008937f, +0.011142f, -0.004538f, +0.004152f, +0.010089f, -0.008325f, +0.017153f, + -0.010063f, +0.012487f, -0.010662f, +0.009435f, +0.002369f, -0.004946f, -0.000041f, +0.004355f, -0.003900f, -0.009401f, + -0.001352f, -0.000290f, -0.003982f, +0.002773f, +0.004410f, -0.001230f, +0.002184f, -0.000199f, -0.003999f, -0.003166f, + +0.003207f, +0.001808f, -0.004493f, -0.004535f, +0.001075f, -0.003597f, -0.005746f, -0.006150f, +0.002110f, -0.001131f, + +0.001198f, +0.000592f, +0.001667f, +0.003558f, -0.004195f, -0.000387f, -0.001388f, +0.002413f, +0.001981f, +0.001070f, + -0.001998f, +0.002615f, -0.001763f, -0.001772f, -0.000176f, -0.000817f, -0.000424f, +0.000986f, -0.001188f, -0.000117f, + -0.002090f, +0.000463f, -0.001607f, -0.001084f, +0.001129f, +0.001286f, -0.000064f, +0.000052f, +0.000377f, -0.001505f, + +0.001088f, -0.000065f, -0.000371f, +0.000153f, -0.000525f, +0.000342f, -0.000819f, +0.000251f, -0.000027f, -0.000604f, + -0.000711f, +0.000256f, -0.000095f, +0.000438f, -0.000625f, +0.000419f + }, + { + +0.084728f, +0.114795f, +0.001662f, -0.009273f, +0.030420f, -0.027579f, -0.001441f, +0.015230f, -0.013602f, -0.016945f, + -0.002799f, +0.013203f, +0.007929f, -0.007964f, +0.003152f, -0.004160f, +0.007534f, +0.005445f, -0.021365f, -0.000691f, + -0.012708f, +0.001476f, +0.010709f, -0.000172f, +0.007926f, -0.003178f, +0.008702f, +0.004243f, +0.002249f, -0.001610f, + +0.002960f, +0.001563f, -0.002002f, -0.001802f, +0.002618f, -0.001509f, -0.001860f, +0.005569f, -0.001493f, -0.004967f, + +0.001086f, +0.001021f, -0.000135f, +0.003719f, -0.002755f, +0.003093f, -0.001612f, -0.001095f, +0.000378f, +0.002143f, + -0.004410f, +0.003271f, +0.001911f, +0.000573f, -0.001341f, -0.001484f, +0.000258f, +0.001620f, -0.000128f, +0.000868f, + -0.001970f, +0.000769f, +0.000474f, +0.002169f, -0.000860f, +0.000033f, -0.000346f, +0.001411f, -0.000864f, -0.001479f, + +0.000247f, -0.000612f, -0.001073f, +0.000159f, -0.001490f, +0.000807f, +0.000637f, +0.001258f, -0.001756f, -0.001352f, + -0.001680f, +0.000558f, -0.000940f, +0.000168f, -0.000071f, -0.000274f, -0.000342f, +0.000516f, -0.000316f, -0.000028f, + +0.000187f, +0.001304f, +0.000189f, -0.000319f, +0.000180f, -0.000032f + }, + { + +0.007641f, -0.030510f, -0.007763f, +0.004503f, +0.000415f, +0.004717f, +0.012042f, -0.001602f, +0.014403f, -0.003536f, + -0.006960f, -0.002463f, +0.001389f, -0.004342f, +0.054301f, +0.015928f, -0.004292f, -0.014246f, -0.003481f, +0.006239f, + +0.002153f, +0.009399f, +0.002873f, +0.004959f, -0.015585f, +0.011882f, -0.017062f, +0.013473f, -0.003074f, +0.006746f, + +0.001730f, -0.001029f, +0.003841f, +0.007265f, -0.005640f, -0.002693f, +0.005929f, +0.004477f, +0.004446f, +0.003531f, + -0.004848f, +0.000485f, +0.000675f, -0.001097f, +0.001003f, +0.004181f, -0.003930f, +0.000179f, +0.000401f, -0.001076f, + +0.001505f, -0.000539f, -0.000370f, -0.004325f, -0.001691f, -0.000272f, -0.002585f, +0.001697f, -0.001592f, +0.000657f, + -0.002009f, +0.000294f, -0.001632f, -0.001578f, +0.001329f, +0.000632f, +0.000779f, -0.000184f, +0.000570f, -0.000869f, + +0.001195f, -0.001920f, +0.000055f, +0.000644f, +0.000530f, +0.001162f, +0.000790f, -0.000092f, -0.000545f, +0.000875f, + -0.000199f, +0.000814f, -0.000531f, +0.000873f, +0.000100f, +0.001007f, +0.000263f, +0.000087f, +0.000132f, -0.000003f, + -0.000546f, +0.000190f, -0.000176f, +0.000028f, +0.000465f, +0.000182f + }, + { + +0.053987f, -0.071861f, +0.004445f, -0.026576f, +0.002720f, +0.011205f, +0.000420f, +0.011827f, -0.009927f, +0.003920f, + +0.003631f, -0.000649f, +0.012268f, -0.016909f, +0.023223f, +0.005933f, -0.014198f, +0.000382f, +0.003903f, -0.000623f, + -0.001170f, -0.003712f, +0.003550f, -0.003186f, +0.005219f, -0.005144f, +0.008437f, -0.006391f, +0.004680f, +0.007175f, + +0.001528f, +0.000200f, +0.009008f, +0.007831f, -0.004255f, -0.002861f, -0.000210f, -0.003430f, -0.001117f, +0.006518f, + -0.000988f, -0.000676f, -0.000631f, -0.002933f, -0.001225f, -0.002048f, +0.000108f, +0.000483f, -0.004427f, -0.001006f, + -0.000719f, +0.004617f, -0.006761f, +0.000630f, -0.005391f, +0.001286f, -0.003990f, +0.001089f, -0.002642f, -0.000713f, + -0.002827f, +0.002454f, -0.000342f, +0.000337f, +0.001773f, -0.000738f, -0.000317f, +0.000837f, -0.002901f, +0.001221f, + -0.000480f, +0.001631f, +0.000401f, -0.000268f, +0.000717f, +0.000409f, -0.000189f, +0.000083f, +0.001060f, -0.000417f, + +0.001096f, +0.001585f, -0.000066f, -0.000010f, +0.001005f, -0.000543f, +0.000089f, -0.000318f, -0.000342f, -0.000030f, + +0.000254f, -0.000610f, -0.000099f, -0.000242f, -0.000302f, -0.000021f + } + }, + { + { + -0.003085f, +0.043678f, +0.003338f, -0.026308f, -0.002989f, +0.003512f, +0.000910f, -0.004501f, +0.009742f, -0.008791f, + -0.009630f, -0.006089f, +0.005982f, +0.001082f, +0.007008f, +0.009468f, -0.015567f, +0.013821f, -0.004895f, -0.009283f, + -0.012595f, -0.002837f, +0.000821f, -0.005085f, +0.003182f, -0.008895f, -0.002612f, -0.004014f, +0.000396f, +0.002689f, + +0.006882f, -0.007312f, +0.005599f, -0.000583f, -0.003368f, +0.005783f, -0.004445f, +0.005650f, +0.001310f, -0.005394f, + +0.005144f, -0.000207f, -0.009685f, +0.006931f, +0.008020f, -0.001597f, -0.003447f, -0.001682f, -0.001988f, -0.000156f, + -0.003604f, +0.000993f, +0.000338f, -0.001688f, +0.001616f, -0.000088f, -0.000023f, +0.001363f, +0.000742f, -0.000199f, + +0.001483f, -0.000450f, +0.001463f, -0.001412f, +0.001338f, +0.000851f, -0.001239f, -0.001775f, -0.000733f, +0.000636f, + -0.000622f, -0.000074f, +0.000889f, -0.000034f, +0.000210f, -0.000711f, +0.000199f, +0.000618f, -0.000283f, -0.001064f, + -0.000467f, -0.000312f, +0.000601f, +0.000196f, +0.000221f, +0.000270f, +0.000390f, +0.000036f, -0.000392f, -0.000546f, + -0.000415f, -0.000320f, -0.000348f, -0.000150f, -0.000264f, -0.000122f + }, + { + +0.002359f, -0.073614f, -0.010625f, -0.050859f, -0.007075f, -0.005544f, +0.005845f, +0.004909f, -0.004862f, +0.006824f, + +0.008934f, -0.018832f, +0.013717f, +0.007975f, +0.010730f, -0.019576f, -0.004221f, +0.000859f, -0.004357f, +0.005403f, + +0.006177f, +0.017562f, -0.001004f, -0.005129f, +0.003332f, +0.001555f, +0.004503f, +0.002825f, -0.005692f, -0.001835f, + -0.005797f, +0.007772f, -0.001374f, -0.001824f, -0.006962f, +0.002893f, -0.004787f, +0.003371f, -0.003697f, +0.000967f, + -0.002219f, -0.002009f, +0.002999f, -0.001837f, -0.000131f, +0.003042f, -0.001532f, -0.000693f, -0.002282f, +0.001966f, + -0.001426f, -0.002709f, -0.001193f, +0.001130f, +0.002645f, -0.001748f, +0.000206f, +0.003330f, +0.001333f, +0.000082f, + +0.000947f, -0.000250f, -0.000577f, -0.001123f, +0.001062f, -0.000087f, -0.000292f, +0.000649f, +0.002031f, +0.000910f, + -0.000917f, -0.001040f, -0.000224f, +0.000998f, +0.000294f, -0.000194f, -0.001305f, -0.000470f, -0.000151f, +0.000105f, + -0.000476f, -0.000225f, -0.000243f, +0.000149f, +0.000689f, -0.000062f, -0.000758f, -0.000262f, -0.000854f, -0.000243f, + -0.000189f, +0.000146f, +0.000002f, -0.000240f, +0.000316f, -0.000008f + }, + { + +0.003233f, +0.025116f, -0.039619f, -0.014594f, +0.051811f, -0.000547f, +0.006405f, +0.003049f, +0.002083f, -0.001110f, + -0.010559f, +0.004977f, -0.001783f, -0.004902f, +0.000335f, +0.001063f, -0.004751f, -0.000125f, +0.003345f, -0.009526f, + -0.006838f, -0.017473f, -0.001656f, -0.000643f, -0.002026f, +0.011395f, +0.006799f, +0.006796f, -0.006521f, +0.001515f, + -0.004131f, +0.004295f, -0.007354f, +0.006085f, -0.003516f, -0.001096f, -0.006292f, +0.004356f, -0.003551f, +0.005090f, + +0.000439f, -0.000018f, -0.000371f, -0.000707f, -0.003349f, +0.000997f, +0.001843f, +0.000238f, +0.001303f, +0.004049f, + +0.000384f, -0.000491f, -0.003811f, +0.002399f, -0.000223f, +0.002120f, +0.000099f, +0.002251f, -0.003234f, -0.000369f, + +0.000158f, +0.001167f, +0.002680f, +0.000223f, +0.000229f, +0.001267f, -0.000438f, +0.000897f, +0.000191f, +0.001662f, + -0.000223f, -0.000037f, +0.000692f, +0.000268f, +0.000974f, -0.000780f, -0.000049f, -0.000922f, +0.000496f, -0.000173f, + +0.000692f, +0.000038f, +0.000622f, -0.000603f, -0.000555f, +0.000111f, -0.000205f, -0.000150f, +0.000289f, +0.000008f, + +0.000566f, +0.000415f, +0.000686f, +0.000040f, -0.000390f, +0.000036f + }, + { + -0.003106f, -0.040377f, +0.010819f, +0.006376f, +0.000803f, +0.000516f, -0.000063f, -0.000160f, +0.006088f, -0.001518f, + -0.003984f, +0.002756f, -0.002749f, +0.012902f, -0.011587f, +0.012546f, -0.008650f, -0.001329f, +0.023905f, +0.001668f, + +0.006064f, -0.002747f, -0.002550f, +0.004816f, -0.006773f, +0.006814f, +0.005720f, -0.000476f, -0.006664f, +0.009275f, + +0.003401f, -0.012082f, +0.001823f, +0.002780f, -0.004109f, -0.005241f, -0.004878f, -0.005899f, -0.002325f, +0.002060f, + +0.001227f, -0.001166f, -0.001499f, +0.007012f, -0.000401f, +0.000263f, -0.001547f, +0.002594f, +0.002949f, +0.004235f, + -0.000087f, +0.001474f, -0.000377f, -0.000516f, -0.001570f, +0.001846f, -0.000328f, +0.000270f, -0.001253f, -0.001356f, + -0.000945f, -0.000717f, +0.000882f, +0.001709f, +0.001239f, -0.001618f, +0.000538f, +0.000146f, -0.001036f, +0.000808f, + -0.000729f, -0.000220f, +0.000137f, +0.000310f, +0.000553f, +0.000008f, +0.000449f, -0.000517f, -0.000712f, +0.000122f, + +0.000025f, +0.000076f, -0.000641f, -0.000082f, -0.000565f, -0.000275f, +0.000580f, +0.000550f, +0.000037f, +0.000034f, + +0.000233f, -0.000480f, -0.000027f, -0.000123f, -0.000118f, +0.000004f + }, + { + +0.022231f, -0.105416f, +0.003345f, +0.026902f, +0.010924f, +0.002199f, -0.004808f, -0.007860f, -0.010844f, -0.006224f, + -0.012878f, -0.021509f, +0.003372f, +0.010186f, -0.011566f, -0.008337f, +0.011263f, -0.010616f, +0.000040f, +0.002920f, + -0.014143f, -0.007052f, +0.009200f, -0.005893f, -0.004435f, -0.000265f, -0.003611f, -0.008026f, +0.001580f, -0.007302f, + +0.001935f, +0.001347f, -0.008650f, +0.002207f, -0.000406f, -0.002975f, +0.005951f, -0.006410f, +0.001565f, -0.001682f, + -0.003674f, -0.002943f, +0.000905f, +0.003913f, +0.001326f, -0.000477f, +0.001575f, -0.000926f, +0.000684f, -0.001930f, + -0.001831f, +0.000137f, +0.000229f, +0.001920f, +0.001706f, -0.000334f, -0.002693f, -0.000564f, +0.000063f, +0.002344f, + -0.001752f, -0.001947f, +0.001171f, +0.001458f, +0.000284f, +0.001414f, +0.000291f, +0.000422f, -0.001197f, +0.000261f, + +0.000876f, +0.000024f, -0.003078f, +0.000595f, -0.001164f, +0.001146f, -0.000694f, -0.000015f, +0.000301f, -0.000204f, + -0.000656f, -0.000278f, -0.000237f, +0.000968f, -0.000142f, +0.000197f, -0.000399f, +0.000351f, +0.000248f, -0.000612f, + -0.000445f, +0.000481f, -0.000019f, -0.000114f, -0.000101f, +0.000371f + }, + { + -0.000474f, +0.032693f, -0.005795f, -0.002778f, -0.003260f, -0.000359f, +0.000039f, -0.001548f, +0.002393f, -0.003925f, + +0.010735f, -0.005119f, -0.005091f, +0.008111f, -0.004025f, -0.019393f, -0.019628f, +0.007567f, +0.013989f, -0.023644f, + +0.021035f, +0.001361f, +0.000221f, -0.000698f, -0.006968f, +0.004032f, +0.003986f, +0.002257f, -0.000265f, -0.006584f, + -0.002982f, -0.009898f, -0.002442f, -0.007061f, +0.004945f, +0.013292f, +0.007821f, +0.002682f, +0.000228f, +0.000619f, + +0.001373f, +0.003608f, +0.002317f, -0.001759f, -0.001386f, -0.003395f, -0.001243f, -0.000302f, -0.001246f, -0.001816f, + +0.001532f, +0.003891f, -0.000665f, -0.000223f, +0.000481f, -0.001935f, -0.001431f, -0.001592f, -0.001236f, -0.000045f, + +0.000096f, +0.002724f, +0.001163f, +0.000808f, -0.000472f, +0.000290f, +0.000356f, -0.000281f, +0.001715f, -0.001315f, + -0.000241f, +0.001375f, -0.000632f, -0.000099f, -0.000261f, -0.000557f, -0.000939f, +0.000171f, -0.000165f, +0.000490f, + +0.000195f, +0.000254f, -0.000402f, -0.000239f, +0.000234f, -0.000655f, +0.000422f, +0.000090f, -0.000476f, -0.000233f, + -0.000317f, -0.000174f, -0.000371f, -0.000150f, +0.000362f, +0.000466f + }, + { + +0.005541f, -0.136758f, +0.018517f, +0.086926f, +0.000659f, +0.000813f, +0.002654f, -0.011591f, +0.003606f, -0.005348f, + -0.001954f, -0.003270f, +0.004774f, +0.002372f, +0.000543f, +0.002132f, -0.002579f, +0.005425f, -0.004717f, -0.000818f, + -0.013693f, -0.000496f, -0.000472f, -0.003385f, -0.017636f, -0.002392f, +0.000234f, -0.004664f, +0.000212f, -0.006092f, + +0.002052f, +0.002592f, -0.002622f, +0.006177f, +0.001115f, +0.005877f, -0.005213f, +0.005190f, -0.002503f, -0.006435f, + +0.003961f, -0.003562f, -0.003969f, +0.004856f, +0.000731f, +0.004479f, +0.000315f, -0.003746f, -0.000739f, +0.001173f, + -0.003675f, -0.004205f, -0.002111f, -0.000781f, -0.001019f, +0.001956f, +0.003271f, -0.002624f, -0.000156f, -0.000387f, + +0.000849f, +0.001334f, -0.001783f, -0.001144f, -0.000498f, +0.002029f, +0.000749f, +0.000177f, -0.000816f, -0.000003f, + -0.000119f, -0.000368f, +0.000902f, +0.000880f, -0.001013f, +0.000457f, -0.000798f, +0.000797f, -0.000718f, +0.000607f, + +0.000397f, +0.000517f, +0.000327f, +0.000637f, -0.000131f, +0.000278f, +0.000091f, +0.000528f, +0.000089f, -0.000166f, + +0.000438f, +0.000146f, -0.000003f, +0.000556f, +0.000382f, +0.000654f + }, + { + -0.000018f, +0.014448f, +0.005792f, -0.008155f, -0.004824f, +0.000361f, -0.001330f, +0.000646f, -0.003725f, +0.000867f, + -0.003596f, +0.008073f, +0.006279f, +0.005413f, -0.012645f, -0.020642f, -0.037835f, -0.004893f, +0.019789f, -0.004092f, + +0.000832f, +0.005823f, -0.002209f, +0.001977f, -0.008154f, -0.004607f, -0.005053f, -0.016281f, +0.014726f, -0.001173f, + +0.001923f, +0.004537f, +0.013617f, +0.007289f, +0.005984f, -0.008709f, +0.002064f, +0.000402f, -0.001118f, +0.005003f, + -0.007113f, -0.000736f, +0.003750f, -0.003668f, -0.003792f, +0.001033f, +0.002130f, +0.000697f, +0.000431f, -0.002562f, + +0.001911f, +0.000556f, -0.001303f, +0.001009f, +0.001807f, -0.002418f, +0.001254f, -0.002795f, -0.000661f, +0.003042f, + +0.000476f, +0.001135f, +0.002121f, +0.000044f, +0.000971f, -0.002056f, +0.000351f, -0.000346f, +0.000836f, -0.001216f, + +0.000272f, +0.000243f, +0.000230f, +0.000507f, +0.000695f, -0.001100f, -0.000706f, -0.000005f, -0.000033f, +0.000932f, + +0.001196f, -0.000195f, +0.000369f, -0.000001f, +0.000476f, +0.000025f, +0.001191f, +0.000669f, -0.000205f, +0.000294f, + +0.000135f, -0.000165f, -0.000066f, -0.000569f, -0.000709f, +0.000288f + }, + { + +0.043627f, +0.013154f, +0.026845f, +0.091444f, +0.002098f, +0.001538f, +0.001504f, -0.010203f, -0.011165f, +0.007886f, + -0.011498f, +0.005117f, -0.008116f, +0.000723f, +0.007932f, +0.014828f, -0.002800f, +0.000596f, -0.002249f, +0.004810f, + +0.004814f, -0.003464f, +0.004897f, +0.002603f, +0.005076f, -0.001622f, +0.006001f, +0.001190f, -0.000729f, -0.007211f, + -0.003163f, -0.002256f, +0.001837f, +0.000216f, -0.001385f, -0.004555f, +0.005521f, +0.001086f, -0.000720f, +0.003659f, + +0.002049f, +0.001998f, +0.000497f, -0.000713f, +0.002991f, +0.003082f, -0.000738f, +0.003859f, +0.005094f, -0.005281f, + +0.001371f, +0.000884f, -0.000297f, +0.001699f, -0.000495f, +0.002891f, -0.000721f, +0.000108f, -0.000160f, +0.001434f, + +0.001385f, -0.001607f, +0.001653f, +0.001120f, -0.001534f, -0.000125f, +0.000326f, +0.001941f, +0.000891f, +0.000733f, + -0.000232f, +0.000377f, +0.000510f, +0.000325f, +0.001196f, +0.000073f, -0.000304f, -0.000075f, +0.000450f, -0.000407f, + -0.000979f, -0.000405f, -0.000549f, +0.000065f, -0.000758f, +0.000757f, -0.000165f, -0.000608f, -0.000056f, +0.000451f, + +0.000175f, -0.000439f, -0.000224f, -0.000424f, +0.000088f, +0.000908f + }, + { + -0.002886f, +0.016150f, +0.010790f, +0.013732f, -0.005807f, -0.008916f, +0.022058f, +0.001337f, +0.006674f, -0.000270f, + -0.004373f, +0.003766f, -0.011894f, +0.008333f, -0.020078f, +0.009910f, -0.003469f, +0.001859f, -0.009503f, +0.007571f, + -0.003088f, -0.020121f, -0.010451f, +0.006307f, -0.003004f, -0.012987f, +0.001353f, +0.004565f, -0.004435f, -0.003418f, + +0.008362f, -0.002062f, +0.004484f, -0.000166f, +0.002444f, -0.004173f, +0.003071f, +0.000031f, +0.002337f, -0.003370f, + +0.004550f, +0.004068f, +0.002635f, -0.001173f, +0.000054f, -0.000170f, +0.000748f, +0.000256f, -0.003369f, +0.002279f, + +0.002102f, -0.000369f, -0.001505f, -0.002244f, +0.000941f, -0.001261f, +0.000889f, +0.000949f, -0.000072f, -0.000206f, + -0.001574f, +0.000574f, -0.000276f, +0.000152f, -0.000652f, +0.000301f, +0.000504f, -0.001308f, -0.000092f, +0.001332f, + +0.000227f, +0.000167f, +0.000035f, +0.000644f, +0.001168f, +0.000802f, +0.000123f, +0.000784f, +0.000550f, -0.000474f, + -0.000630f, -0.000051f, +0.000870f, +0.000076f, +0.000488f, +0.000276f, +0.000303f, -0.000310f, -0.000368f, -0.000104f, + +0.000174f, -0.000033f, -0.000622f, -0.000098f, +0.000367f, -0.000248f + }, + { + -0.036233f, -0.008770f, +0.005670f, -0.014071f, -0.002509f, +0.013512f, -0.003215f, -0.016284f, -0.001271f, -0.011122f, + +0.006900f, -0.013883f, +0.006459f, -0.001020f, +0.006953f, -0.008933f, +0.002914f, -0.009537f, +0.010869f, +0.012053f, + +0.009141f, -0.003514f, -0.003659f, -0.006390f, -0.000132f, +0.002542f, +0.000323f, -0.003701f, -0.004523f, -0.004224f, + -0.000890f, +0.000876f, -0.006827f, -0.001390f, +0.007160f, -0.001953f, -0.003012f, +0.004310f, +0.000334f, +0.002706f, + -0.000688f, -0.002698f, +0.001721f, -0.000761f, +0.002668f, +0.000178f, +0.002219f, -0.001026f, +0.001971f, -0.000301f, + +0.001630f, -0.003966f, -0.002767f, -0.000794f, -0.001829f, +0.001189f, -0.003702f, -0.001470f, -0.000552f, +0.000615f, + +0.001513f, -0.001059f, -0.000383f, -0.001243f, -0.000887f, +0.000100f, -0.000186f, +0.000603f, +0.001513f, -0.000413f, + -0.000363f, -0.000043f, +0.000523f, +0.000012f, +0.000246f, -0.000910f, +0.000348f, -0.000690f, +0.000815f, +0.000466f, + +0.000581f, +0.000163f, +0.000046f, -0.000038f, -0.000379f, -0.000395f, +0.000408f, +0.000893f, -0.000804f, +0.000356f, + -0.000383f, -0.000057f, +0.000287f, +0.000444f, +0.000242f, +0.000048f + }, + { + -0.002003f, -0.052888f, +0.006047f, +0.006992f, -0.013722f, +0.008575f, -0.005832f, +0.000937f, -0.000165f, +0.004933f, + -0.003331f, -0.000505f, -0.008378f, +0.015733f, -0.009229f, +0.005344f, -0.001692f, +0.008956f, +0.010833f, -0.004218f, + +0.004294f, -0.002997f, +0.007223f, +0.001644f, +0.001383f, +0.003118f, -0.015135f, +0.007010f, -0.004676f, -0.007191f, + -0.002692f, -0.002569f, -0.003617f, +0.004216f, +0.005349f, -0.005091f, +0.013271f, -0.006825f, -0.001873f, -0.000246f, + +0.004539f, -0.003628f, -0.004566f, -0.001653f, -0.001635f, -0.005913f, -0.005700f, -0.001868f, +0.002571f, -0.001868f, + +0.003110f, -0.001581f, +0.001202f, +0.000098f, -0.001980f, -0.002614f, +0.000972f, +0.001612f, +0.000180f, +0.001899f, + -0.000687f, +0.000533f, -0.001096f, -0.001912f, -0.000806f, +0.000570f, -0.000733f, -0.000515f, -0.000573f, -0.000599f, + -0.000802f, -0.000353f, -0.000897f, -0.000379f, +0.000541f, +0.002079f, +0.000061f, -0.000253f, -0.000407f, -0.001311f, + +0.000785f, -0.000485f, +0.000007f, -0.000092f, -0.000532f, +0.000384f, -0.000463f, +0.000064f, -0.000275f, +0.000003f, + -0.000341f, +0.000089f, -0.000072f, +0.000539f, -0.000436f, +0.000241f + }, + { + -0.043072f, +0.285754f, -0.034020f, +0.012638f, +0.026989f, -0.026095f, +0.011750f, +0.002201f, -0.022357f, -0.013515f, + -0.005992f, +0.016211f, +0.005209f, -0.008062f, -0.005970f, +0.008289f, -0.000752f, +0.006536f, -0.015888f, -0.003926f, + -0.004669f, +0.003538f, +0.004732f, +0.001200f, +0.000251f, +0.009210f, +0.006876f, -0.001621f, +0.007897f, +0.000849f, + -0.000615f, +0.002289f, +0.003343f, -0.002053f, -0.000889f, -0.002755f, -0.001129f, +0.007245f, -0.003510f, +0.000379f, + -0.000654f, +0.001081f, +0.000219f, +0.002392f, -0.009625f, +0.000045f, +0.002135f, +0.000850f, +0.000480f, -0.000643f, + -0.000179f, +0.000796f, +0.001427f, +0.001391f, -0.003320f, +0.002390f, +0.000087f, +0.001581f, +0.000065f, +0.000803f, + -0.000678f, -0.001038f, +0.000663f, +0.000940f, +0.000162f, -0.000205f, +0.000374f, +0.001535f, -0.001196f, -0.000683f, + -0.000533f, -0.001251f, +0.000356f, -0.001221f, +0.000685f, -0.000701f, +0.001699f, -0.000468f, -0.000092f, -0.001523f, + -0.001595f, +0.000470f, -0.000009f, -0.000906f, +0.000274f, -0.000343f, -0.000385f, -0.000253f, +0.000036f, -0.000964f, + +0.000635f, +0.000754f, +0.000264f, +0.000238f, +0.000632f, +0.000103f + }, + { + -0.006619f, -0.047632f, +0.015573f, +0.014140f, +0.001067f, -0.002408f, +0.007136f, +0.003314f, +0.008244f, -0.011320f, + -0.003483f, +0.000559f, -0.002292f, +0.027076f, +0.025126f, -0.000874f, +0.005022f, -0.008847f, -0.001034f, -0.005787f, + +0.011387f, +0.014079f, +0.005789f, +0.006143f, -0.006242f, -0.000380f, +0.006559f, -0.015194f, +0.001178f, +0.005547f, + +0.000320f, +0.006279f, -0.001254f, +0.005156f, -0.005354f, -0.004141f, +0.006143f, +0.000147f, +0.005852f, -0.000088f, + +0.004905f, -0.003858f, +0.001687f, -0.001827f, +0.003355f, +0.004988f, -0.004773f, -0.002411f, +0.002097f, +0.000244f, + -0.002678f, +0.001683f, -0.000042f, -0.005074f, -0.000315f, -0.000134f, -0.000439f, +0.000363f, -0.002120f, -0.000782f, + +0.000100f, +0.000150f, -0.002054f, -0.001573f, +0.002657f, +0.001218f, -0.000370f, +0.000368f, -0.000970f, -0.000248f, + +0.000769f, +0.000956f, -0.001765f, +0.000125f, +0.001438f, +0.001406f, +0.000240f, -0.000471f, -0.000771f, +0.001211f, + -0.000006f, +0.000177f, -0.000120f, +0.000207f, -0.000027f, +0.000835f, -0.000001f, +0.000604f, -0.000234f, -0.000519f, + +0.000102f, +0.000100f, -0.000170f, +0.000032f, +0.000312f, -0.000019f + }, + { + -0.050960f, +0.053373f, +0.002221f, -0.020122f, +0.010460f, +0.012975f, +0.008723f, +0.010649f, -0.007611f, +0.000672f, + -0.002929f, +0.011925f, -0.005459f, -0.001319f, -0.001617f, +0.009269f, -0.009797f, +0.008201f, -0.007674f, +0.006929f, + -0.003206f, -0.012958f, +0.001664f, +0.011680f, -0.007878f, -0.004139f, +0.006188f, +0.006125f, -0.004007f, +0.009403f, + -0.007290f, +0.005415f, +0.009918f, -0.002042f, -0.003656f, -0.003018f, +0.004125f, -0.004767f, +0.000888f, +0.005303f, + +0.003114f, +0.001539f, -0.002905f, -0.002495f, -0.004133f, -0.001351f, -0.004258f, +0.000177f, -0.003227f, -0.000479f, + -0.000141f, -0.000815f, -0.001054f, -0.002814f, -0.003841f, +0.000625f, -0.001971f, -0.001286f, -0.000906f, +0.000070f, + +0.000362f, -0.002270f, +0.000956f, -0.000106f, +0.000774f, -0.000239f, -0.000543f, -0.000224f, -0.001813f, -0.000397f, + +0.001871f, -0.000190f, -0.000222f, +0.000641f, +0.001290f, +0.000293f, -0.000503f, +0.000005f, +0.000874f, -0.000414f, + +0.001120f, +0.001194f, +0.000059f, -0.000073f, +0.001444f, -0.000380f, -0.000214f, -0.000196f, +0.000123f, -0.000021f, + -0.000475f, -0.000078f, -0.000520f, -0.000177f, +0.000192f, -0.000021f + } + }, + { + { + +0.002088f, +0.016141f, -0.021465f, -0.016655f, +0.009822f, +0.005217f, +0.005004f, +0.003027f, +0.011269f, -0.004761f, + +0.006186f, -0.008175f, -0.014317f, -0.014245f, -0.008484f, -0.012108f, -0.026699f, +0.001800f, -0.013229f, -0.003793f, + -0.001696f, +0.001331f, +0.012931f, +0.001158f, -0.003026f, -0.005117f, +0.001600f, -0.004023f, +0.005913f, +0.007297f, + -0.003026f, -0.016307f, +0.000933f, -0.007574f, -0.005327f, +0.011572f, +0.006346f, +0.015725f, +0.005145f, -0.004190f, + +0.001395f, +0.001785f, -0.005439f, +0.001290f, +0.005313f, +0.001472f, -0.004588f, -0.001597f, -0.001222f, -0.000234f, + +0.001444f, +0.004974f, +0.001720f, +0.000864f, +0.001482f, +0.000576f, +0.000001f, +0.003198f, +0.002163f, -0.002331f, + +0.000154f, -0.001694f, +0.000350f, -0.001365f, +0.001211f, +0.001997f, +0.000731f, -0.000354f, -0.001454f, -0.000226f, + +0.000768f, +0.000203f, +0.000457f, +0.000494f, +0.000223f, -0.001542f, -0.000604f, -0.000026f, -0.000211f, -0.000266f, + +0.000039f, -0.000102f, +0.000400f, -0.000062f, +0.000281f, -0.000068f, -0.000194f, -0.000399f, -0.000197f, -0.000560f, + -0.000734f, -0.000049f, +0.000403f, +0.000767f, +0.000025f, +0.000030f + }, + { + -0.006631f, -0.080735f, -0.017363f, -0.033208f, +0.013517f, +0.000252f, +0.002588f, -0.000584f, -0.002552f, +0.008271f, + +0.007434f, -0.026133f, +0.004826f, -0.002330f, +0.010014f, -0.012975f, -0.001491f, -0.008195f, -0.016515f, -0.001730f, + -0.004000f, +0.003395f, -0.004169f, -0.003844f, -0.002292f, -0.003318f, +0.002164f, +0.004943f, +0.000124f, -0.001892f, + +0.001108f, +0.016848f, +0.002612f, -0.004635f, -0.006399f, +0.009246f, +0.000121f, +0.003250f, -0.000371f, +0.003218f, + -0.002674f, -0.008271f, -0.001214f, -0.001697f, -0.001900f, +0.002193f, -0.001306f, +0.002734f, -0.000524f, +0.003324f, + +0.000893f, -0.000047f, -0.001503f, -0.001565f, +0.004015f, -0.000868f, +0.001191f, +0.005316f, +0.002909f, +0.000007f, + -0.000225f, -0.000168f, +0.000492f, -0.000390f, -0.000128f, +0.000269f, -0.000440f, -0.000806f, +0.000997f, +0.000264f, + -0.001300f, -0.000243f, -0.000471f, -0.000021f, +0.000209f, +0.000089f, -0.001242f, +0.001080f, +0.000779f, +0.000180f, + -0.000225f, -0.000422f, -0.000061f, -0.000345f, +0.000201f, +0.000232f, -0.000660f, +0.000625f, -0.000437f, -0.000609f, + -0.000164f, +0.000189f, +0.000016f, -0.000056f, +0.000147f, -0.000018f + }, + { + -0.000252f, +0.099883f, +0.013170f, -0.090856f, -0.001292f, -0.003333f, +0.000118f, +0.001141f, +0.003430f, +0.005308f, + -0.009990f, -0.005321f, -0.009679f, -0.001265f, +0.011152f, +0.011262f, +0.004744f, -0.000202f, +0.001317f, -0.005679f, + +0.000769f, -0.023603f, -0.013460f, +0.002010f, +0.002893f, +0.008563f, -0.002900f, +0.005135f, -0.005126f, +0.000794f, + +0.000721f, +0.005478f, -0.009792f, +0.007232f, -0.002660f, -0.000187f, -0.000289f, +0.001473f, -0.008400f, +0.001247f, + +0.000011f, -0.000055f, +0.000088f, +0.001055f, -0.003115f, +0.001178f, -0.000845f, -0.002543f, +0.001289f, +0.004828f, + -0.000769f, +0.001756f, -0.000662f, +0.003716f, -0.001453f, -0.001038f, -0.001279f, +0.000955f, -0.004080f, +0.000094f, + +0.000267f, -0.001039f, +0.000620f, -0.002272f, -0.002983f, +0.000940f, -0.000026f, +0.000554f, -0.000702f, +0.001383f, + -0.000081f, -0.000425f, +0.001153f, +0.001474f, +0.001069f, -0.001119f, +0.000051f, -0.000908f, +0.000289f, -0.000691f, + +0.000344f, +0.000144f, +0.001120f, +0.000177f, -0.000161f, +0.000980f, +0.000337f, -0.000212f, +0.000397f, +0.000011f, + +0.000471f, -0.000095f, -0.000039f, +0.000101f, -0.000280f, -0.000104f + }, + { + +0.002559f, -0.061697f, -0.011795f, +0.000628f, +0.000548f, +0.001453f, -0.001605f, -0.001287f, +0.004993f, -0.005111f, + -0.003865f, +0.006916f, -0.011633f, -0.002285f, -0.027138f, -0.009209f, -0.014329f, +0.008454f, +0.013338f, +0.006569f, + +0.008667f, -0.006598f, +0.002485f, +0.012754f, -0.001614f, +0.002470f, +0.002652f, +0.001950f, +0.000837f, -0.000511f, + -0.011219f, -0.009597f, +0.009320f, +0.006274f, -0.000897f, -0.000947f, +0.006744f, -0.002117f, +0.001133f, +0.002781f, + -0.000634f, -0.002744f, -0.006185f, +0.002916f, +0.000761f, +0.002692f, -0.000096f, +0.001650f, +0.003846f, +0.003593f, + -0.000561f, +0.003362f, -0.000230f, -0.001233f, -0.001409f, +0.002676f, +0.000041f, +0.000066f, +0.000083f, -0.000314f, + -0.000058f, +0.000052f, -0.000282f, +0.000917f, +0.001329f, +0.000684f, +0.001014f, +0.000598f, +0.000994f, +0.001106f, + -0.001078f, +0.000295f, +0.000238f, +0.000095f, +0.000187f, +0.000013f, +0.001007f, -0.000002f, +0.000442f, +0.001148f, + +0.000526f, +0.000560f, +0.000034f, +0.000771f, +0.000268f, -0.000361f, -0.000100f, +0.000185f, +0.000181f, +0.000409f, + +0.000252f, -0.000461f, +0.000161f, +0.000285f, +0.000068f, -0.000204f + }, + { + -0.000818f, -0.211527f, -0.033873f, +0.014620f, -0.009119f, -0.000419f, -0.003018f, +0.002885f, -0.002733f, +0.007685f, + -0.002171f, -0.009093f, +0.006622f, -0.006666f, -0.023830f, -0.014796f, +0.006194f, -0.013021f, +0.015585f, +0.021928f, + -0.009824f, -0.002978f, +0.003331f, -0.015250f, -0.006475f, +0.002362f, +0.008468f, -0.001408f, +0.005714f, -0.007072f, + -0.004758f, -0.002626f, -0.002060f, +0.005751f, +0.000142f, -0.000277f, +0.009704f, -0.007717f, -0.000120f, +0.002266f, + +0.000998f, -0.000757f, +0.000797f, +0.006098f, +0.000372f, -0.004626f, -0.001469f, +0.000008f, +0.000026f, +0.000289f, + -0.003780f, -0.003511f, -0.000430f, -0.001619f, +0.000342f, -0.000731f, -0.000901f, +0.000491f, -0.001538f, +0.001019f, + -0.001087f, -0.001938f, +0.001510f, +0.002511f, +0.000787f, +0.000673f, +0.000300f, +0.000051f, -0.003106f, -0.001863f, + +0.000598f, +0.000555f, -0.001676f, +0.000940f, -0.001812f, +0.001057f, -0.001018f, -0.000565f, -0.000070f, +0.000218f, + -0.001016f, -0.001542f, -0.001032f, +0.000610f, -0.000287f, +0.000110f, -0.001078f, +0.000204f, +0.000163f, -0.000500f, + +0.000370f, +0.000256f, -0.000843f, -0.000632f, -0.000003f, +0.000380f + }, + { + -0.001149f, +0.031610f, -0.002743f, -0.002069f, -0.001253f, +0.000282f, +0.000546f, -0.000485f, +0.002499f, -0.004741f, + +0.011445f, -0.003860f, -0.001314f, +0.018659f, +0.007570f, -0.005261f, -0.009302f, -0.002410f, +0.006887f, -0.034148f, + +0.019242f, +0.013083f, -0.000959f, -0.012350f, -0.004172f, +0.005790f, -0.002428f, -0.004930f, +0.000497f, +0.002015f, + -0.001940f, -0.004716f, +0.005146f, +0.002796f, +0.010311f, +0.010955f, +0.005446f, -0.000211f, +0.002458f, +0.004948f, + +0.002461f, -0.001020f, -0.001481f, -0.001132f, +0.000513f, -0.002160f, -0.000436f, +0.000666f, +0.001747f, -0.000790f, + -0.000002f, +0.000709f, -0.001255f, +0.000799f, +0.000972f, -0.000780f, +0.000215f, -0.002656f, -0.001391f, +0.000007f, + -0.000388f, +0.001069f, -0.001473f, +0.000218f, -0.000020f, +0.000832f, +0.001112f, -0.000305f, +0.001695f, -0.002097f, + -0.001681f, +0.000709f, +0.000039f, -0.000659f, -0.001587f, -0.001264f, -0.000382f, -0.000062f, -0.000646f, +0.000065f, + -0.000722f, +0.000051f, +0.000032f, -0.000513f, -0.000119f, -0.000349f, +0.000755f, +0.000372f, -0.000616f, -0.000408f, + -0.000001f, -0.000164f, -0.000982f, -0.000117f, +0.000632f, +0.001003f + }, + { + +0.038924f, -0.129758f, -0.020809f, +0.076340f, -0.003360f, +0.001790f, +0.005116f, -0.010396f, +0.005815f, +0.008702f, + +0.012408f, +0.011438f, +0.008289f, -0.000296f, -0.002390f, +0.004162f, -0.002107f, +0.002051f, -0.003576f, -0.001465f, + -0.010929f, +0.003948f, +0.004338f, +0.004028f, -0.004178f, +0.004141f, +0.001396f, +0.003915f, +0.006521f, -0.005871f, + +0.000548f, +0.000622f, -0.007794f, +0.002299f, -0.000180f, +0.003236f, -0.000897f, +0.007265f, -0.003024f, -0.002215f, + +0.008456f, -0.003033f, -0.006228f, +0.001256f, -0.000278f, +0.002105f, +0.002397f, -0.000698f, +0.001657f, +0.001122f, + -0.004225f, +0.000986f, +0.000585f, +0.002191f, +0.000349f, +0.000829f, +0.001663f, -0.002666f, -0.000015f, -0.000001f, + +0.001186f, +0.000719f, -0.002547f, -0.001619f, -0.001797f, +0.000532f, -0.000563f, +0.000064f, -0.001388f, -0.000467f, + -0.000268f, -0.001075f, +0.000130f, +0.000201f, -0.000306f, +0.001036f, -0.001323f, +0.000390f, -0.000387f, +0.001281f, + +0.000424f, -0.000583f, -0.000069f, +0.000430f, -0.001015f, -0.000124f, -0.000108f, +0.000259f, +0.000497f, +0.000251f, + +0.000156f, -0.000351f, -0.000216f, +0.000212f, -0.000424f, -0.000079f + }, + { + -0.002130f, -0.009173f, -0.000178f, -0.000290f, -0.001481f, +0.000697f, +0.000318f, +0.003014f, -0.004006f, +0.002373f, + +0.001068f, +0.011945f, +0.005414f, +0.005730f, -0.011462f, -0.003286f, -0.010166f, +0.011371f, +0.006617f, +0.005337f, + +0.021547f, +0.000305f, -0.008017f, +0.009125f, -0.004646f, +0.002386f, +0.006234f, -0.000287f, +0.016204f, -0.014943f, + -0.002992f, -0.008008f, +0.003539f, -0.001227f, -0.000577f, -0.007356f, -0.002745f, -0.002995f, +0.002043f, +0.006632f, + -0.005865f, +0.000823f, +0.006417f, -0.002887f, -0.002131f, +0.006002f, +0.004789f, +0.002442f, +0.003916f, -0.000493f, + +0.000245f, -0.000748f, +0.000603f, +0.004468f, +0.003763f, -0.000818f, +0.002766f, -0.002917f, -0.002671f, -0.000751f, + -0.001964f, +0.000707f, +0.001209f, -0.001126f, +0.001084f, -0.002092f, +0.000390f, +0.000634f, +0.000425f, -0.001035f, + +0.001680f, +0.000874f, +0.000136f, -0.000359f, +0.000606f, -0.001421f, -0.000619f, +0.000796f, +0.000731f, -0.000394f, + +0.000357f, -0.000346f, +0.000087f, +0.000307f, -0.000060f, -0.000486f, -0.000360f, -0.000395f, -0.000325f, -0.000007f, + +0.000118f, -0.000065f, -0.000262f, -0.000282f, -0.000599f, -0.000222f + }, + { + -0.045131f, -0.205233f, -0.044040f, +0.074656f, -0.007631f, -0.002266f, -0.003104f, -0.008603f, -0.013618f, +0.001450f, + -0.020315f, +0.010136f, +0.006133f, -0.008980f, -0.018364f, +0.001206f, +0.004827f, +0.006665f, +0.004754f, +0.000974f, + -0.004455f, -0.006731f, +0.004988f, +0.001545f, +0.001830f, -0.004852f, +0.004976f, -0.000192f, +0.000445f, -0.002721f, + +0.001783f, -0.002260f, -0.005179f, +0.000436f, -0.000283f, -0.001990f, +0.010112f, -0.001669f, -0.005816f, +0.004847f, + +0.004221f, +0.002799f, -0.002564f, -0.000193f, +0.000256f, -0.002933f, -0.000856f, +0.006585f, +0.005224f, -0.004943f, + -0.001779f, -0.003145f, -0.001811f, +0.001370f, -0.001254f, -0.000522f, -0.000383f, +0.001526f, +0.001497f, +0.001752f, + +0.002055f, +0.000428f, +0.001531f, -0.000539f, -0.001972f, -0.000414f, -0.000124f, +0.001589f, -0.000256f, +0.000170f, + +0.000740f, -0.000422f, -0.000160f, +0.000606f, -0.000201f, -0.000995f, +0.000001f, +0.000275f, +0.000054f, +0.000242f, + +0.000014f, -0.000158f, -0.000637f, +0.000478f, +0.000015f, +0.000547f, -0.000329f, -0.000629f, +0.000489f, +0.000389f, + +0.000050f, +0.000156f, +0.000431f, +0.000022f, +0.000232f, +0.000789f + }, + { + +0.002452f, -0.023818f, -0.041085f, +0.004186f, +0.008350f, -0.012088f, +0.014354f, +0.004883f, +0.006586f, +0.003274f, + +0.004398f, +0.014398f, -0.003325f, +0.015500f, -0.023644f, +0.012382f, +0.011078f, -0.010076f, -0.033237f, +0.007274f, + +0.014505f, +0.010532f, +0.000267f, +0.002564f, -0.006959f, -0.008708f, -0.008774f, -0.005003f, +0.001463f, +0.005958f, + +0.015871f, -0.002881f, +0.005027f, +0.004853f, -0.000402f, -0.010589f, -0.000787f, -0.005464f, -0.000125f, -0.003185f, + +0.001690f, -0.002463f, +0.002557f, +0.005223f, +0.001245f, -0.000050f, +0.000747f, +0.000103f, -0.001207f, +0.005586f, + +0.002916f, +0.002036f, -0.000888f, -0.004326f, +0.000240f, -0.001107f, +0.002560f, +0.001748f, +0.001660f, +0.001559f, + -0.000479f, +0.000920f, +0.000053f, +0.000249f, -0.000674f, -0.000327f, -0.000070f, -0.002660f, -0.000642f, +0.001155f, + -0.000563f, -0.000384f, -0.000336f, -0.001248f, -0.000544f, -0.000525f, -0.000553f, +0.000746f, -0.000118f, +0.000293f, + +0.000595f, -0.000636f, -0.000063f, -0.000527f, +0.000355f, -0.000631f, +0.000106f, +0.000024f, -0.000012f, -0.000324f, + +0.000284f, +0.000377f, -0.000290f, +0.000142f, +0.000319f, -0.000255f + }, + { + +0.034652f, -0.039730f, -0.087321f, +0.003609f, +0.000333f, +0.006375f, +0.021981f, +0.000823f, +0.010092f, -0.001518f, + +0.013363f, -0.014002f, +0.001427f, +0.005135f, +0.020329f, -0.001296f, +0.009080f, -0.010278f, +0.006753f, -0.000675f, + +0.001840f, -0.002905f, +0.000433f, +0.001122f, +0.002825f, +0.000108f, +0.002531f, +0.006071f, +0.004821f, +0.001529f, + +0.000798f, -0.000595f, -0.006473f, +0.000776f, +0.001629f, -0.003649f, +0.000079f, +0.002683f, -0.002846f, -0.002191f, + -0.004402f, -0.001885f, +0.003461f, +0.002126f, +0.003309f, -0.001534f, -0.000402f, -0.001898f, +0.002063f, -0.004060f, + +0.001279f, -0.000178f, -0.002361f, +0.001304f, +0.001720f, +0.001931f, -0.001597f, -0.000925f, +0.001395f, +0.000932f, + +0.000200f, -0.000768f, +0.000437f, +0.000545f, -0.002347f, -0.000392f, -0.000853f, -0.000568f, +0.001310f, +0.000592f, + +0.000824f, +0.000353f, +0.000572f, +0.000097f, +0.000953f, -0.000386f, +0.000641f, +0.000302f, +0.001247f, +0.000518f, + +0.000266f, -0.000444f, -0.000377f, +0.000005f, +0.000459f, +0.000269f, +0.000650f, +0.000812f, -0.000464f, +0.000627f, + -0.000490f, -0.000211f, +0.000044f, -0.000099f, -0.000115f, +0.000007f + }, + { + +0.001242f, -0.073885f, -0.017140f, +0.026647f, +0.006105f, +0.012930f, -0.008471f, -0.002436f, -0.003080f, +0.005287f, + +0.001644f, +0.006958f, -0.004940f, +0.010964f, -0.011151f, +0.017414f, +0.000877f, +0.006994f, +0.007765f, -0.007575f, + +0.012431f, -0.013803f, +0.007339f, -0.002356f, +0.004125f, +0.005397f, -0.012161f, +0.001440f, -0.008413f, -0.007609f, + -0.003380f, +0.001939f, -0.001630f, +0.000791f, -0.001947f, -0.011200f, +0.009483f, -0.004980f, +0.006649f, -0.001293f, + -0.002389f, -0.004743f, -0.000358f, +0.000384f, -0.000253f, -0.000388f, -0.001576f, +0.000284f, +0.002941f, -0.003392f, + +0.002196f, -0.002945f, -0.001189f, -0.000858f, -0.000540f, -0.002857f, -0.000856f, +0.000820f, +0.001225f, +0.002079f, + -0.000671f, +0.000378f, -0.000482f, -0.000936f, -0.000150f, +0.001057f, -0.000278f, -0.001003f, +0.000191f, -0.001290f, + +0.000918f, +0.002601f, +0.000284f, +0.000542f, +0.000262f, +0.001325f, +0.000052f, -0.000528f, +0.000067f, -0.000400f, + +0.000084f, -0.000570f, +0.000471f, -0.000309f, -0.000228f, +0.000514f, -0.000402f, -0.000239f, -0.000578f, +0.000104f, + +0.000134f, +0.000820f, +0.000172f, +0.000245f, -0.000563f, +0.000217f + }, + { + -0.009161f, +0.313805f, -0.074347f, -0.000754f, +0.021987f, -0.023267f, +0.001278f, -0.012058f, -0.016823f, -0.004945f, + -0.013326f, +0.002886f, -0.001853f, -0.007806f, -0.006743f, +0.014090f, -0.005126f, -0.000206f, -0.011456f, -0.003296f, + +0.004232f, +0.009959f, +0.001768f, -0.004393f, -0.009278f, +0.003086f, -0.003487f, -0.000639f, +0.012255f, +0.000313f, + -0.000547f, +0.004891f, +0.008558f, -0.000634f, -0.007863f, -0.000883f, +0.004131f, +0.004625f, +0.001034f, +0.003892f, + -0.001737f, +0.002049f, +0.000144f, +0.002566f, -0.005336f, +0.001014f, +0.001755f, +0.001530f, +0.001032f, +0.000355f, + -0.000885f, -0.003687f, -0.002484f, -0.003532f, -0.004618f, +0.003631f, +0.000065f, +0.002166f, -0.000753f, -0.000034f, + -0.001098f, -0.002303f, -0.001151f, -0.000972f, +0.000228f, +0.001790f, +0.001161f, +0.000509f, -0.000514f, +0.001636f, + +0.001206f, -0.000300f, +0.001464f, -0.001556f, +0.001057f, -0.000637f, +0.001010f, -0.001128f, +0.000841f, -0.000737f, + -0.000232f, +0.000647f, +0.000221f, -0.000812f, -0.000175f, +0.000429f, +0.000861f, -0.000330f, +0.000290f, -0.001006f, + +0.000248f, +0.000056f, -0.000307f, +0.000378f, +0.000679f, +0.000225f + }, + { + +0.005797f, -0.049927f, +0.001320f, +0.008205f, -0.006485f, -0.007638f, +0.002387f, -0.002746f, -0.001402f, -0.007082f, + +0.003339f, +0.005643f, -0.004119f, -0.030499f, -0.031142f, +0.005767f, +0.009933f, +0.005482f, +0.015854f, +0.001441f, + +0.011141f, +0.002692f, -0.008105f, +0.004810f, -0.008345f, -0.011837f, +0.002082f, -0.021394f, -0.000307f, -0.000908f, + +0.001276f, +0.001644f, -0.008402f, +0.005669f, -0.003071f, -0.002909f, +0.002440f, -0.005008f, +0.003744f, -0.000230f, + +0.009714f, +0.000183f, +0.003502f, +0.001554f, +0.004146f, +0.002724f, -0.002893f, -0.000300f, +0.001528f, -0.000060f, + -0.002730f, +0.001947f, +0.000148f, -0.001661f, +0.002298f, +0.001412f, -0.000418f, -0.000212f, -0.000045f, +0.001667f, + +0.001702f, +0.000024f, -0.000948f, -0.000698f, +0.000791f, +0.001337f, -0.000839f, -0.000942f, -0.000371f, -0.000106f, + +0.000542f, +0.001448f, -0.001067f, +0.001162f, +0.001566f, +0.000192f, -0.000998f, -0.001820f, -0.001379f, +0.000658f, + -0.000771f, -0.000067f, +0.000469f, -0.000251f, -0.000613f, +0.000381f, -0.000495f, +0.000122f, +0.000108f, -0.000519f, + +0.000006f, +0.000002f, -0.000262f, +0.000045f, +0.000249f, -0.000146f + }, + { + +0.027346f, +0.143837f, -0.013432f, -0.018301f, +0.009739f, +0.007620f, -0.001909f, +0.002767f, -0.006109f, -0.002438f, + -0.006482f, +0.011541f, -0.001218f, -0.019077f, -0.042834f, +0.005840f, +0.006772f, +0.004298f, -0.019767f, -0.004864f, + -0.008856f, -0.009482f, -0.002782f, +0.002479f, -0.006197f, +0.008014f, +0.003636f, -0.003268f, -0.014020f, +0.007309f, + -0.008377f, -0.005162f, +0.000758f, -0.001939f, -0.004091f, -0.004740f, +0.005416f, -0.006203f, +0.001080f, +0.004585f, + -0.000147f, +0.002298f, -0.002107f, -0.002284f, -0.005707f, -0.004047f, -0.006416f, +0.001342f, -0.002049f, +0.002004f, + +0.003325f, -0.001279f, -0.001664f, -0.002947f, -0.001460f, +0.002446f, +0.001053f, -0.000192f, -0.000536f, +0.001008f, + +0.001616f, -0.001544f, +0.001350f, -0.001268f, -0.001354f, +0.000581f, +0.000750f, +0.000281f, -0.000253f, -0.000779f, + +0.001202f, -0.001090f, -0.001950f, -0.000189f, +0.000959f, +0.000016f, -0.000566f, -0.000252f, +0.001271f, -0.000312f, + -0.000600f, -0.000742f, -0.000186f, -0.000500f, +0.000633f, -0.000934f, -0.001175f, -0.000797f, +0.000285f, +0.000419f, + -0.000011f, +0.000237f, -0.000059f, -0.000019f, +0.000070f, +0.000016f + } + }, + { + { + +0.000978f, -0.048415f, +0.028247f, -0.000343f, +0.000751f, +0.000927f, +0.008283f, +0.004883f, +0.008728f, -0.000732f, + +0.005341f, -0.014582f, -0.014706f, -0.004007f, -0.010938f, -0.014343f, -0.016371f, -0.014181f, -0.003525f, -0.005346f, + +0.012722f, -0.001389f, +0.007933f, +0.004734f, -0.019811f, +0.005210f, -0.003300f, -0.005961f, +0.004169f, +0.009087f, + -0.008513f, -0.008033f, -0.001972f, -0.010849f, +0.002627f, +0.009781f, +0.003549f, +0.016291f, +0.004923f, +0.000891f, + +0.002134f, -0.001374f, +0.000747f, -0.002321f, +0.001742f, +0.001795f, -0.003933f, -0.004639f, +0.001973f, +0.002614f, + +0.002917f, +0.001784f, +0.000946f, +0.002357f, -0.000899f, +0.002344f, +0.000418f, +0.001110f, +0.002581f, -0.000366f, + -0.000904f, -0.002883f, -0.000293f, +0.001480f, +0.000264f, +0.000930f, +0.000111f, +0.000306f, -0.000860f, -0.000483f, + +0.000872f, +0.000407f, +0.000585f, +0.001028f, -0.001547f, -0.000718f, -0.000991f, +0.000505f, -0.000575f, -0.000304f, + -0.000280f, +0.000631f, -0.000345f, +0.000058f, -0.000585f, +0.000087f, -0.000118f, -0.000706f, +0.000459f, -0.000250f, + -0.000737f, -0.000237f, +0.000409f, +0.000886f, +0.000355f, +0.000227f + }, + { + +0.017685f, -0.192625f, +0.050759f, -0.003206f, -0.006708f, +0.003541f, -0.002565f, -0.000181f, +0.001363f, +0.006549f, + -0.004083f, -0.006818f, -0.004413f, +0.001108f, -0.004958f, -0.008532f, -0.002673f, -0.006743f, -0.010323f, -0.010023f, + +0.002375f, -0.006989f, +0.004105f, -0.001076f, -0.005543f, -0.001882f, -0.001623f, +0.011203f, -0.001373f, -0.003215f, + +0.002816f, +0.013008f, +0.008561f, -0.011691f, +0.004412f, +0.001136f, +0.004055f, +0.000827f, +0.001995f, +0.004755f, + +0.000022f, -0.011713f, -0.003468f, +0.000911f, -0.000542f, -0.001101f, +0.003096f, +0.002829f, -0.000019f, -0.000022f, + +0.003690f, +0.000612f, -0.002301f, -0.002736f, +0.003070f, -0.000485f, +0.003358f, +0.001136f, +0.002657f, +0.001270f, + -0.001990f, +0.001267f, +0.000537f, -0.000982f, +0.000517f, -0.000355f, +0.000137f, -0.001109f, -0.000667f, -0.000057f, + -0.000194f, +0.000669f, -0.000473f, -0.001750f, +0.000844f, +0.000662f, -0.001188f, +0.001170f, +0.000073f, +0.000798f, + +0.000051f, -0.000696f, -0.000218f, -0.000126f, -0.000074f, +0.000022f, +0.000123f, +0.000447f, -0.000307f, -0.000588f, + -0.000271f, +0.000242f, -0.000011f, +0.000037f, +0.000224f, -0.000089f + }, + { + -0.004254f, +0.166517f, -0.013816f, -0.057324f, -0.035364f, -0.002266f, +0.001750f, -0.001630f, +0.003183f, -0.004440f, + +0.005352f, -0.013149f, +0.000903f, +0.004839f, -0.001364f, +0.008436f, +0.007669f, +0.005733f, +0.002163f, -0.002053f, + +0.002755f, -0.013502f, -0.014005f, +0.006122f, +0.002478f, -0.003204f, -0.002279f, +0.000964f, +0.000883f, -0.002881f, + +0.007040f, -0.003355f, -0.002338f, -0.003555f, +0.002408f, -0.005377f, +0.007605f, -0.002483f, -0.005210f, -0.003180f, + -0.001439f, +0.001905f, +0.000598f, +0.000088f, -0.003898f, +0.002900f, -0.001600f, +0.000045f, +0.001612f, +0.001707f, + -0.001044f, +0.000927f, +0.002510f, +0.002156f, -0.000596f, -0.002239f, -0.000283f, -0.001676f, -0.001387f, +0.000844f, + -0.000954f, -0.000261f, -0.001415f, -0.001920f, -0.002724f, +0.000206f, -0.000374f, -0.000274f, +0.000187f, +0.000516f, + +0.000305f, -0.000044f, +0.000968f, +0.001572f, -0.000327f, -0.000196f, -0.000330f, -0.000941f, -0.000214f, +0.000404f, + -0.000166f, +0.000341f, +0.000975f, +0.000510f, +0.000210f, +0.000514f, +0.000417f, +0.000082f, +0.000260f, -0.000257f, + +0.000450f, -0.000260f, -0.000128f, -0.000076f, +0.000523f, -0.000240f + }, + { + -0.000967f, -0.074287f, +0.005813f, -0.005162f, +0.002367f, +0.000655f, -0.001482f, +0.000019f, +0.002030f, -0.002059f, + -0.003830f, +0.010164f, -0.008762f, -0.017624f, -0.026209f, -0.008390f, -0.002971f, +0.011557f, +0.004430f, +0.011423f, + +0.000693f, -0.005954f, +0.015384f, +0.001483f, +0.003504f, -0.004106f, +0.008166f, +0.000794f, +0.004030f, -0.005998f, + -0.010381f, -0.001041f, +0.002804f, +0.005543f, +0.001196f, -0.007239f, +0.011671f, -0.003056f, +0.005758f, -0.001507f, + +0.001433f, -0.002990f, -0.002943f, -0.000398f, +0.001755f, +0.001298f, +0.004127f, -0.002794f, +0.004896f, +0.000878f, + -0.000201f, +0.002632f, +0.001626f, -0.002070f, -0.000560f, +0.002931f, -0.000218f, +0.000331f, -0.001019f, -0.000397f, + +0.000346f, +0.001512f, -0.001744f, +0.001210f, +0.001041f, +0.001074f, +0.000231f, +0.000264f, +0.001805f, +0.000027f, + -0.000145f, +0.000531f, +0.000109f, +0.000646f, +0.000035f, +0.000710f, +0.000160f, +0.000568f, +0.000860f, +0.000650f, + +0.000748f, +0.000396f, -0.000286f, +0.001086f, +0.000287f, -0.000283f, -0.000256f, +0.000081f, +0.000011f, +0.000396f, + +0.000126f, -0.000118f, -0.000054f, +0.000111f, -0.000049f, -0.000245f + }, + { + -0.028403f, -0.278906f, +0.036879f, +0.003455f, +0.006995f, -0.005373f, -0.000066f, +0.005058f, -0.000409f, +0.012163f, + -0.003176f, -0.003327f, +0.000799f, +0.002373f, -0.033572f, -0.005775f, -0.007915f, -0.004754f, +0.017993f, +0.014210f, + -0.000921f, -0.006248f, +0.006923f, -0.015582f, -0.009237f, -0.003298f, +0.013335f, -0.006235f, +0.010487f, -0.007196f, + -0.005689f, -0.003393f, +0.006843f, +0.002791f, -0.003373f, +0.001589f, -0.002738f, +0.006189f, +0.000792f, -0.001677f, + +0.001600f, +0.002204f, +0.000389f, +0.003164f, +0.001334f, -0.001201f, -0.003882f, +0.002359f, -0.002187f, +0.003591f, + -0.003896f, -0.005080f, -0.001702f, -0.002752f, +0.001957f, +0.000965f, -0.000428f, +0.000677f, -0.000767f, -0.001057f, + +0.000467f, -0.001435f, +0.001945f, +0.001888f, +0.000095f, +0.000269f, +0.001012f, +0.000766f, -0.002736f, -0.002099f, + +0.001117f, -0.001113f, +0.001165f, -0.000061f, -0.001066f, -0.000728f, -0.000371f, -0.000502f, -0.000851f, +0.000632f, + -0.000950f, -0.001932f, -0.000912f, +0.000091f, +0.000235f, -0.000257f, -0.000754f, +0.000288f, -0.000300f, +0.000019f, + +0.001005f, -0.000369f, -0.000685f, -0.000501f, +0.000152f, +0.000060f + }, + { + +0.000589f, +0.005732f, +0.013720f, -0.004890f, +0.001184f, +0.001068f, -0.000119f, +0.000664f, +0.002221f, -0.000288f, + +0.005346f, -0.004301f, -0.005283f, +0.014231f, +0.012271f, +0.004502f, +0.000262f, -0.006245f, +0.003046f, -0.022163f, + +0.008263f, +0.009880f, +0.004765f, -0.025659f, -0.007253f, +0.021664f, -0.006024f, -0.003725f, +0.003976f, -0.001477f, + -0.008457f, +0.007140f, +0.002569f, +0.005704f, +0.010083f, +0.006357f, +0.002532f, -0.005209f, +0.005177f, +0.008352f, + -0.001313f, -0.001969f, -0.000163f, -0.000801f, +0.002139f, -0.000066f, -0.001500f, -0.000628f, +0.002607f, +0.000627f, + -0.001555f, +0.001203f, -0.003167f, +0.001778f, +0.000902f, -0.003243f, +0.001208f, -0.000525f, -0.002157f, -0.001741f, + +0.002646f, +0.000391f, -0.001315f, -0.000731f, +0.001766f, -0.000159f, +0.001166f, +0.000221f, +0.000638f, -0.001375f, + -0.000927f, -0.000202f, +0.000574f, -0.001379f, -0.001268f, -0.001473f, +0.000373f, -0.000706f, -0.000449f, +0.000519f, + -0.000916f, -0.000637f, +0.000774f, -0.000690f, -0.000102f, +0.000124f, +0.000458f, +0.000399f, -0.000261f, -0.000904f, + +0.000491f, +0.000058f, -0.001214f, -0.000329f, +0.000763f, +0.000548f + }, + { + -0.073409f, -0.052484f, +0.039048f, +0.056575f, +0.004253f, +0.006468f, -0.003614f, -0.000564f, -0.009509f, +0.014735f, + +0.015728f, +0.015704f, +0.004896f, -0.007787f, +0.008173f, -0.000564f, -0.003690f, -0.001099f, +0.000195f, -0.005616f, + -0.001530f, +0.002823f, -0.000454f, -0.003910f, +0.013083f, +0.004092f, +0.003359f, +0.006166f, -0.003485f, +0.004169f, + -0.002315f, -0.004860f, -0.002921f, -0.000448f, +0.001484f, -0.001600f, +0.007804f, -0.004958f, +0.003241f, +0.001532f, + +0.002926f, +0.000833f, -0.008997f, +0.000260f, +0.004669f, -0.000654f, +0.000208f, +0.002144f, +0.001128f, +0.000236f, + -0.001057f, +0.000148f, +0.003434f, +0.001493f, +0.000135f, +0.000113f, -0.000232f, -0.000312f, -0.001458f, -0.000297f, + -0.000250f, -0.001284f, -0.000487f, -0.000434f, -0.001717f, -0.000156f, -0.000433f, -0.001215f, -0.000610f, -0.000596f, + -0.000967f, -0.000977f, +0.001200f, -0.001238f, +0.000721f, +0.000669f, -0.000605f, -0.000212f, +0.000665f, -0.000191f, + +0.000474f, +0.000145f, +0.000057f, -0.000576f, -0.000602f, +0.000074f, -0.000010f, +0.000205f, +0.000735f, -0.000239f, + +0.000301f, -0.000471f, -0.000101f, -0.000383f, -0.000036f, -0.000501f + }, + { + +0.000232f, -0.026705f, +0.002008f, +0.006345f, -0.000728f, -0.001800f, +0.000454f, +0.000933f, +0.001961f, -0.001187f, + +0.004981f, +0.014935f, +0.000813f, +0.007516f, -0.019896f, +0.010933f, -0.002845f, +0.006396f, +0.002101f, +0.022272f, + +0.006722f, -0.000844f, -0.006351f, +0.008277f, -0.000696f, -0.002541f, -0.003477f, +0.018423f, +0.008022f, -0.010341f, + +0.001634f, -0.004502f, -0.002625f, -0.002107f, -0.006963f, +0.006070f, -0.004239f, -0.002207f, +0.004677f, +0.001430f, + -0.002381f, -0.001813f, +0.005420f, +0.000457f, -0.001187f, +0.003929f, +0.002084f, +0.003225f, +0.005404f, +0.001156f, + +0.000573f, -0.002430f, +0.001580f, +0.002875f, +0.001669f, +0.001809f, +0.002173f, -0.003651f, -0.002208f, -0.000146f, + -0.001380f, -0.002210f, -0.000779f, +0.001508f, +0.000023f, -0.000189f, -0.000544f, +0.000266f, +0.000104f, -0.001174f, + +0.002218f, +0.000600f, +0.000838f, -0.000923f, +0.000677f, -0.001444f, -0.000927f, +0.000360f, +0.001157f, -0.000084f, + +0.000008f, +0.000069f, +0.000141f, +0.000931f, -0.000790f, -0.000162f, -0.000998f, -0.000103f, +0.000087f, -0.000439f, + -0.000458f, -0.000082f, -0.000296f, -0.000088f, -0.000174f, -0.000335f + }, + { + +0.025843f, -0.398486f, +0.026231f, +0.042697f, +0.014505f, -0.000334f, -0.013525f, -0.005022f, -0.010185f, -0.001409f, + -0.017376f, +0.011031f, +0.001612f, -0.001286f, -0.006755f, -0.010751f, +0.011091f, -0.000529f, +0.000538f, +0.001618f, + -0.003139f, -0.003204f, +0.002089f, +0.005051f, -0.001749f, -0.002815f, +0.002373f, -0.000293f, -0.000008f, +0.000083f, + +0.005301f, -0.005865f, -0.003057f, -0.005115f, +0.001474f, +0.005602f, +0.003432f, -0.001267f, -0.006697f, +0.004448f, + +0.006683f, +0.003377f, -0.005218f, +0.001558f, -0.001157f, -0.005919f, +0.000692f, +0.004366f, +0.001451f, -0.000505f, + -0.005268f, -0.002080f, +0.000860f, +0.000480f, -0.001131f, -0.004192f, +0.002166f, +0.002394f, +0.000154f, +0.001973f, + +0.001529f, +0.001912f, -0.000924f, -0.000481f, -0.000383f, -0.000304f, +0.000035f, +0.000422f, -0.000467f, +0.000290f, + +0.001089f, -0.000851f, -0.000903f, +0.000762f, -0.000793f, -0.000617f, +0.000794f, +0.000005f, -0.000713f, +0.000600f, + +0.000647f, -0.000133f, -0.000577f, +0.000117f, +0.000929f, +0.000644f, -0.000237f, -0.000651f, +0.000038f, +0.000352f, + -0.000184f, +0.000327f, +0.000591f, +0.000727f, -0.000021f, +0.000010f + }, + { + -0.001482f, -0.065980f, +0.011437f, -0.014366f, +0.016281f, -0.001911f, -0.005932f, +0.005578f, +0.003107f, +0.006265f, + +0.014095f, +0.013644f, -0.001721f, +0.005209f, -0.007442f, -0.003497f, +0.016786f, -0.014765f, -0.027237f, -0.001984f, + +0.013733f, +0.030959f, -0.006784f, +0.004727f, -0.008749f, -0.020563f, -0.003350f, +0.003929f, -0.006125f, +0.011695f, + +0.007950f, -0.000744f, +0.002143f, +0.004685f, -0.004176f, -0.009597f, -0.004124f, -0.000714f, +0.002182f, -0.003482f, + +0.002383f, -0.003915f, -0.001888f, +0.007718f, +0.004234f, +0.001179f, -0.005666f, +0.000247f, +0.003315f, +0.004891f, + +0.000391f, +0.003082f, -0.003018f, -0.001065f, -0.001204f, -0.000542f, +0.002248f, +0.002989f, +0.002683f, -0.000680f, + +0.001358f, +0.000554f, -0.000683f, -0.000574f, -0.000269f, +0.000521f, -0.001312f, -0.001370f, -0.000903f, +0.000000f, + -0.000076f, +0.000118f, -0.000958f, -0.000724f, -0.001228f, -0.000918f, -0.000782f, +0.001319f, -0.000109f, +0.000312f, + +0.000761f, -0.000574f, -0.000508f, -0.000427f, -0.000386f, -0.000864f, +0.000352f, +0.000077f, +0.000411f, +0.000295f, + -0.000547f, -0.000115f, -0.000078f, +0.000358f, +0.000270f, -0.000410f + }, + { + -0.035288f, -0.088981f, +0.022502f, +0.016117f, +0.006055f, -0.014740f, +0.021301f, +0.007800f, +0.002485f, +0.015095f, + +0.001871f, -0.002420f, -0.005122f, -0.003434f, +0.022483f, +0.006287f, +0.002841f, -0.004984f, -0.001811f, -0.003160f, + +0.001370f, +0.000720f, +0.001962f, -0.002304f, +0.005422f, -0.006085f, +0.004337f, +0.003055f, +0.008502f, +0.002652f, + -0.003586f, +0.000854f, -0.002808f, -0.001702f, +0.000064f, +0.000675f, +0.001924f, -0.000611f, -0.000990f, -0.004397f, + -0.004290f, -0.001958f, +0.005348f, +0.002255f, -0.001378f, +0.003496f, +0.000360f, -0.001228f, -0.002567f, -0.000911f, + -0.000400f, +0.001478f, -0.000489f, -0.000358f, +0.001376f, -0.001020f, +0.003229f, -0.001471f, +0.001594f, -0.000339f, + -0.002071f, +0.001809f, +0.000565f, +0.001237f, -0.002890f, -0.001588f, +0.000196f, -0.000424f, +0.000512f, +0.001253f, + +0.000600f, -0.000127f, +0.000692f, +0.000326f, +0.000354f, +0.000240f, -0.000524f, +0.001294f, +0.001005f, +0.000395f, + +0.000150f, -0.000073f, -0.000345f, -0.000217f, +0.000137f, +0.000489f, +0.000440f, +0.000384f, +0.000083f, -0.000197f, + +0.000004f, -0.000158f, +0.000001f, -0.000080f, -0.000291f, -0.000372f + }, + { + -0.000162f, -0.060728f, -0.014223f, +0.017008f, +0.015347f, -0.002490f, -0.001421f, -0.006587f, +0.002986f, -0.003697f, + +0.006212f, +0.015159f, +0.005905f, -0.016616f, -0.000956f, +0.016634f, +0.008273f, +0.001102f, -0.000553f, -0.000248f, + +0.004376f, -0.007339f, +0.009448f, -0.007717f, +0.009604f, -0.011075f, -0.001600f, +0.001411f, -0.005434f, +0.000514f, + -0.010119f, +0.004799f, -0.002071f, +0.001290f, -0.005877f, -0.003923f, +0.000624f, +0.000226f, +0.007586f, -0.003527f, + -0.009032f, +0.001533f, -0.000883f, -0.003147f, -0.000978f, +0.003317f, -0.000845f, +0.002239f, -0.002125f, -0.001231f, + -0.000177f, -0.000951f, -0.000710f, -0.002745f, +0.002516f, -0.004451f, -0.001187f, -0.000035f, +0.004030f, +0.000922f, + -0.000415f, +0.000335f, -0.001190f, -0.001171f, +0.001427f, -0.000143f, +0.000533f, -0.000725f, -0.000672f, -0.000086f, + +0.000539f, +0.003436f, -0.000769f, +0.001081f, +0.000152f, +0.000709f, -0.000001f, -0.000011f, +0.000495f, -0.000482f, + +0.000055f, -0.001199f, +0.001207f, -0.000375f, +0.000006f, +0.000776f, -0.000845f, -0.000308f, -0.000404f, +0.000124f, + +0.000242f, +0.000302f, +0.000108f, +0.000064f, -0.000060f, -0.000165f + }, + { + +0.048997f, +0.208193f, -0.030149f, -0.009386f, +0.010642f, +0.000221f, -0.025404f, -0.003095f, -0.016649f, -0.005658f, + +0.003805f, -0.008588f, -0.000054f, -0.002600f, -0.005557f, +0.004536f, -0.005810f, +0.008872f, -0.008658f, -0.003689f, + -0.001259f, +0.014493f, +0.001928f, -0.008442f, -0.013814f, -0.000472f, +0.002549f, +0.002226f, +0.004792f, +0.001808f, + +0.005535f, -0.002451f, +0.008584f, +0.003771f, -0.012765f, +0.005721f, +0.002249f, -0.006983f, +0.007821f, +0.000115f, + +0.000984f, +0.003017f, +0.007257f, -0.004805f, -0.002099f, -0.000490f, +0.002100f, +0.002122f, +0.001630f, -0.000235f, + -0.003991f, -0.001856f, -0.004917f, -0.004531f, -0.000481f, -0.000590f, +0.000283f, +0.002834f, -0.000315f, +0.000696f, + -0.001517f, -0.001427f, -0.001622f, +0.000089f, -0.000697f, +0.001322f, +0.001133f, -0.000155f, +0.000138f, +0.001830f, + +0.001012f, -0.000750f, +0.002541f, -0.000988f, -0.000217f, +0.000631f, +0.000386f, -0.001297f, +0.000744f, -0.000540f, + -0.000143f, +0.000474f, +0.000005f, -0.000694f, -0.000250f, +0.000542f, +0.000814f, +0.000057f, +0.000367f, -0.000170f, + -0.000641f, +0.000184f, +0.000195f, +0.000167f, +0.000317f, +0.000430f + }, + { + -0.004362f, -0.040761f, +0.009091f, +0.001708f, -0.004935f, -0.001320f, -0.000660f, -0.001214f, -0.011601f, +0.004307f, + +0.000481f, -0.000229f, +0.005086f, -0.047068f, -0.008106f, +0.017744f, +0.002298f, +0.005296f, +0.021468f, -0.012386f, + +0.014444f, +0.004303f, -0.010549f, -0.004889f, -0.007016f, -0.004323f, -0.008645f, -0.012581f, -0.001893f, -0.008351f, + +0.010149f, -0.003509f, -0.006160f, +0.004102f, -0.006878f, +0.000533f, +0.003673f, -0.005150f, +0.004975f, +0.002169f, + +0.004230f, -0.000070f, +0.002677f, +0.004563f, +0.001427f, +0.000061f, +0.000298f, +0.000920f, +0.002535f, -0.001536f, + -0.001748f, +0.000676f, -0.001263f, +0.001498f, +0.001719f, +0.000486f, -0.001329f, +0.001437f, -0.000600f, +0.001262f, + +0.002834f, -0.001224f, +0.000071f, -0.000229f, -0.000548f, +0.001295f, -0.000697f, -0.001466f, +0.000242f, +0.000647f, + -0.000111f, +0.000725f, -0.000231f, +0.001347f, +0.000977f, -0.000573f, -0.000713f, -0.002028f, -0.000448f, -0.000100f, + -0.000664f, -0.000526f, +0.000992f, -0.000456f, -0.000097f, +0.000354f, -0.000475f, -0.000088f, +0.000151f, -0.000214f, + -0.000413f, +0.000031f, +0.000021f, +0.000032f, -0.000118f, +0.000161f + }, + { + +0.004988f, +0.159136f, -0.002088f, -0.009033f, +0.003790f, +0.002699f, +0.002013f, +0.003301f, -0.008135f, +0.008167f, + -0.005376f, -0.008685f, +0.013527f, -0.015715f, -0.045449f, -0.001601f, +0.023055f, -0.000206f, -0.012800f, -0.016870f, + -0.006205f, -0.001569f, -0.004649f, -0.002393f, -0.004760f, +0.014934f, -0.000577f, -0.010067f, -0.007335f, +0.002153f, + +0.001861f, -0.008829f, -0.007341f, -0.002191f, -0.004393f, +0.000894f, -0.000669f, -0.001325f, +0.002927f, -0.000285f, + +0.001496f, +0.004132f, -0.004376f, -0.003770f, -0.004993f, -0.003279f, -0.001935f, -0.001248f, -0.001796f, +0.001613f, + +0.001340f, +0.002437f, -0.000331f, -0.004258f, +0.001307f, +0.000052f, +0.000582f, +0.001592f, +0.000750f, -0.000069f, + +0.000722f, -0.001155f, -0.000321f, +0.000470f, -0.001568f, +0.001521f, +0.000318f, +0.000370f, +0.000615f, -0.000666f, + +0.000511f, -0.001022f, -0.001112f, -0.000916f, +0.000316f, -0.000372f, -0.000078f, -0.000037f, +0.000566f, +0.000568f, + -0.000683f, -0.001571f, +0.000318f, -0.000534f, -0.000601f, -0.000693f, -0.001307f, -0.000642f, +0.000228f, +0.000694f, + +0.000250f, +0.000066f, +0.000240f, -0.000441f, -0.000131f, -0.000263f + } + }, + { + { + -0.002690f, -0.113906f, -0.007630f, +0.009879f, +0.000558f, -0.001695f, +0.006495f, -0.001851f, -0.000542f, +0.004772f, + +0.007487f, -0.006462f, -0.004796f, -0.008623f, -0.004820f, +0.013585f, +0.002718f, -0.004271f, +0.024179f, +0.010159f, + +0.002542f, +0.000207f, +0.004669f, +0.008496f, -0.010153f, -0.008460f, -0.015499f, -0.007390f, -0.004767f, -0.013223f, + -0.011308f, +0.007412f, +0.007532f, -0.001905f, +0.000768f, +0.001062f, -0.001363f, +0.008329f, +0.001895f, +0.001134f, + +0.001217f, -0.003536f, -0.001357f, -0.003561f, -0.000181f, +0.000731f, -0.001090f, -0.001850f, +0.005954f, +0.003073f, + +0.001638f, +0.000849f, +0.000284f, +0.001154f, -0.001368f, +0.001014f, -0.001551f, -0.001960f, +0.001479f, -0.000561f, + -0.002243f, -0.001173f, +0.001027f, +0.000352f, +0.000286f, +0.000125f, -0.001432f, +0.000409f, +0.000320f, +0.000105f, + +0.000535f, -0.000161f, -0.000392f, +0.000341f, -0.001282f, +0.001073f, +0.000170f, +0.001690f, -0.000043f, +0.000332f, + -0.000106f, -0.000143f, -0.000532f, +0.000420f, -0.000547f, -0.000039f, +0.000012f, -0.000837f, +0.000432f, +0.000447f, + +0.000472f, +0.000273f, +0.000058f, +0.000150f, -0.000049f, +0.000326f + }, + { + -0.024368f, -0.335530f, +0.010211f, +0.024076f, +0.006753f, -0.000758f, -0.003999f, -0.000577f, -0.007696f, -0.009047f, + -0.017941f, -0.006814f, +0.002649f, -0.002776f, -0.019271f, -0.010659f, -0.008156f, -0.001656f, +0.005286f, -0.003422f, + +0.002727f, -0.007571f, +0.007780f, +0.001936f, -0.006951f, -0.001845f, +0.002920f, +0.010838f, -0.000882f, +0.002546f, + +0.001212f, -0.000348f, +0.004073f, -0.001503f, +0.005458f, -0.002862f, +0.006483f, +0.002445f, +0.003648f, +0.006510f, + -0.000520f, -0.005924f, -0.000268f, -0.000635f, -0.000186f, -0.003400f, +0.001756f, +0.000856f, -0.000201f, -0.000146f, + +0.004503f, +0.003724f, +0.001580f, -0.004147f, -0.000455f, -0.000459f, +0.002510f, -0.002692f, -0.000589f, +0.001164f, + -0.002326f, +0.000047f, -0.000180f, -0.001224f, -0.000338f, -0.001800f, +0.000759f, -0.000649f, -0.000974f, -0.000271f, + +0.000478f, +0.001079f, +0.000363f, -0.001008f, +0.000111f, +0.001158f, -0.000482f, +0.000149f, -0.000345f, +0.001011f, + -0.000251f, -0.000530f, -0.000083f, -0.000105f, +0.000357f, -0.000168f, -0.000025f, -0.000058f, -0.000205f, +0.000193f, + +0.000124f, +0.000495f, +0.000248f, -0.000115f, +0.000027f, -0.000160f + }, + { + +0.009300f, +0.247111f, +0.045845f, +0.005404f, +0.010514f, +0.003804f, +0.003730f, -0.002392f, -0.005308f, -0.010953f, + +0.004292f, -0.011263f, -0.004090f, +0.001834f, +0.001168f, +0.005442f, +0.009981f, +0.004912f, +0.003937f, +0.006795f, + +0.007959f, -0.000112f, +0.007090f, +0.015005f, -0.006267f, -0.004394f, -0.003301f, -0.005994f, -0.002714f, -0.006563f, + +0.001374f, -0.002054f, +0.000904f, -0.008452f, +0.001040f, -0.004164f, +0.006047f, -0.001536f, +0.000167f, -0.005804f, + -0.003519f, +0.002016f, +0.001645f, +0.003174f, -0.001399f, +0.002805f, -0.000704f, +0.002508f, +0.001236f, +0.000906f, + -0.001575f, +0.001122f, +0.003127f, -0.001160f, -0.002925f, -0.000452f, +0.002579f, -0.001395f, +0.000887f, +0.003737f, + -0.000269f, -0.000232f, -0.001050f, +0.001195f, +0.000500f, -0.000411f, -0.001492f, -0.001016f, +0.000573f, +0.000055f, + -0.000236f, +0.000705f, +0.000851f, +0.000275f, -0.001559f, -0.000064f, +0.000115f, -0.000029f, -0.000025f, +0.000285f, + -0.000268f, +0.000199f, +0.000611f, -0.000103f, +0.000047f, +0.000132f, +0.000072f, -0.000215f, -0.000183f, -0.000359f, + +0.000331f, -0.000476f, -0.000186f, -0.000071f, +0.000711f, -0.000187f + }, + { + -0.000879f, -0.071201f, +0.008900f, -0.006767f, +0.000415f, +0.000432f, -0.000236f, +0.000121f, -0.000463f, -0.003243f, + -0.003170f, +0.013273f, -0.004418f, +0.005567f, -0.007141f, -0.014283f, -0.004784f, -0.003628f, -0.013823f, +0.002902f, + -0.010256f, -0.016919f, +0.011528f, -0.004286f, +0.006895f, +0.000206f, +0.007554f, -0.000052f, +0.001765f, -0.010109f, + -0.000624f, +0.006738f, -0.001724f, +0.006171f, +0.000668f, -0.009212f, +0.005795f, -0.003671f, +0.005337f, -0.003989f, + +0.003235f, -0.000614f, -0.001040f, +0.000199f, +0.002667f, +0.002674f, +0.004604f, -0.005163f, +0.000071f, -0.003130f, + -0.002034f, +0.000850f, +0.001414f, -0.001334f, -0.000981f, +0.002206f, -0.000453f, +0.001007f, -0.000423f, -0.001229f, + -0.001624f, +0.000104f, -0.002409f, -0.000047f, -0.000265f, -0.000123f, -0.000864f, +0.000471f, +0.001064f, -0.000754f, + +0.000330f, +0.000095f, -0.000271f, +0.000860f, +0.000041f, +0.000467f, -0.000106f, +0.000464f, +0.000250f, -0.000093f, + +0.000505f, -0.000057f, -0.001561f, +0.000489f, +0.000390f, -0.000197f, -0.000431f, -0.000244f, -0.000360f, +0.000078f, + +0.000223f, +0.000030f, -0.000053f, +0.000024f, +0.000027f, -0.000281f + }, + { + +0.057917f, -0.251025f, -0.021837f, +0.004713f, +0.001645f, -0.002582f, -0.000509f, +0.004957f, -0.003063f, +0.005561f, + +0.010888f, +0.016240f, +0.003024f, +0.006065f, -0.022965f, -0.000372f, -0.008163f, -0.013106f, +0.001260f, +0.004284f, + -0.000480f, -0.004235f, +0.008696f, -0.007887f, +0.000266f, -0.001773f, +0.001140f, -0.015331f, -0.000528f, -0.007674f, + +0.000989f, -0.003844f, +0.002463f, -0.003503f, -0.008700f, +0.000574f, -0.015812f, +0.001333f, +0.006295f, -0.005387f, + -0.004293f, +0.004670f, +0.000695f, +0.000737f, +0.007463f, +0.005892f, +0.001780f, +0.008214f, +0.000232f, +0.001729f, + -0.000543f, -0.000215f, -0.000074f, -0.000023f, +0.002674f, +0.001248f, +0.000956f, +0.002197f, +0.000716f, -0.000543f, + -0.000033f, -0.001028f, +0.001926f, +0.000934f, -0.000915f, +0.001359f, +0.001404f, +0.001774f, +0.000150f, -0.000047f, + +0.001516f, -0.000774f, +0.001206f, -0.000824f, -0.000805f, -0.001039f, -0.000669f, -0.000849f, -0.000782f, +0.000254f, + -0.000907f, -0.000191f, +0.000212f, -0.000400f, -0.000176f, -0.000081f, -0.000292f, +0.000172f, +0.000047f, +0.000161f, + +0.000715f, +0.000136f, -0.000315f, -0.000194f, +0.000339f, -0.000014f + }, + { + +0.001039f, -0.016929f, -0.001958f, +0.001368f, +0.001566f, +0.000729f, -0.000146f, +0.001955f, +0.003509f, -0.004989f, + -0.001144f, -0.005925f, -0.010866f, +0.006796f, +0.008467f, +0.000606f, +0.002036f, +0.005767f, +0.011607f, -0.026488f, + -0.002605f, +0.003765f, -0.003403f, -0.028690f, -0.009168f, +0.021309f, -0.002883f, -0.002044f, -0.002229f, -0.007407f, + -0.004471f, +0.010668f, +0.003155f, -0.001266f, -0.000331f, +0.001752f, +0.002494f, -0.006623f, -0.000783f, +0.003184f, + +0.000614f, -0.001053f, -0.000411f, -0.000400f, +0.003377f, +0.001035f, -0.001169f, +0.000552f, +0.003308f, +0.001556f, + -0.003528f, -0.000811f, -0.004220f, +0.000089f, +0.000025f, -0.001528f, +0.001606f, +0.000775f, +0.000780f, +0.000171f, + +0.002627f, +0.000681f, +0.000161f, -0.000597f, +0.001425f, -0.001274f, +0.000487f, -0.000223f, -0.000647f, -0.001324f, + +0.000901f, -0.000003f, +0.000092f, -0.000442f, +0.000464f, +0.000780f, +0.001328f, -0.000228f, -0.000545f, +0.000854f, + +0.000168f, -0.000621f, +0.000757f, -0.000197f, +0.000622f, -0.000032f, -0.000180f, +0.000323f, +0.000600f, -0.000001f, + +0.000310f, +0.000161f, -0.000465f, -0.000319f, +0.000140f, -0.000147f + }, + { + +0.088119f, +0.084596f, -0.025317f, +0.027895f, -0.013481f, +0.000312f, -0.002606f, +0.001039f, -0.011934f, +0.006322f, + +0.002278f, -0.006899f, -0.011522f, -0.008515f, +0.015288f, -0.001573f, -0.001223f, +0.003209f, +0.002303f, -0.001007f, + -0.001594f, +0.000451f, -0.003701f, -0.005922f, +0.015880f, +0.003572f, +0.000250f, +0.001020f, -0.005471f, +0.006022f, + -0.000039f, -0.002438f, +0.002564f, +0.003946f, +0.003296f, -0.003361f, +0.003004f, -0.012084f, -0.001261f, +0.001118f, + +0.004200f, +0.003710f, -0.008620f, -0.001098f, +0.002855f, +0.001581f, +0.000551f, -0.000284f, +0.000703f, +0.002178f, + -0.000089f, -0.003375f, +0.003352f, -0.000665f, -0.001702f, -0.001144f, -0.001322f, +0.000213f, -0.001269f, -0.000898f, + -0.000177f, -0.000284f, -0.000427f, +0.000196f, -0.000781f, +0.000234f, +0.001234f, -0.001252f, +0.000037f, -0.000197f, + -0.001125f, -0.000314f, +0.001339f, -0.001583f, +0.000674f, +0.001138f, -0.000026f, -0.000749f, +0.000479f, -0.000983f, + -0.000665f, +0.000285f, +0.000677f, +0.000330f, +0.000658f, +0.000365f, -0.000070f, -0.000106f, -0.000146f, -0.000694f, + +0.000434f, -0.000352f, -0.000075f, -0.000638f, -0.000163f, -0.000275f + }, + { + +0.002284f, -0.007096f, +0.003291f, +0.001118f, +0.000589f, +0.000099f, +0.000147f, +0.000385f, +0.005203f, -0.001005f, + +0.000031f, +0.004611f, -0.003062f, +0.011702f, -0.023602f, +0.005703f, -0.001818f, -0.002715f, -0.002735f, +0.023590f, + -0.009305f, -0.014572f, -0.006988f, +0.000014f, +0.005549f, -0.003587f, -0.011099f, +0.011467f, -0.001646f, -0.001361f, + +0.010092f, +0.007141f, +0.001442f, -0.002571f, -0.001247f, +0.010770f, -0.002437f, -0.001645f, +0.003738f, +0.000097f, + -0.001726f, -0.003532f, +0.000509f, +0.002213f, -0.000137f, -0.001227f, -0.001562f, -0.002309f, +0.002118f, +0.002816f, + -0.000189f, -0.002261f, +0.001348f, -0.000515f, -0.000286f, -0.001151f, -0.000641f, -0.004409f, -0.001991f, +0.001361f, + +0.000107f, +0.000499f, +0.000120f, +0.001507f, +0.000204f, +0.000069f, -0.001239f, -0.000805f, -0.000128f, -0.002815f, + +0.001066f, +0.000253f, -0.000207f, -0.000371f, +0.000998f, -0.000567f, -0.000002f, +0.000717f, +0.001574f, +0.001337f, + +0.000877f, -0.000072f, +0.000121f, +0.000832f, -0.000549f, +0.000036f, -0.000843f, +0.000439f, +0.000630f, -0.000142f, + -0.000210f, -0.000113f, +0.000056f, +0.000686f, +0.000528f, +0.000035f + }, + { + +0.007517f, -0.470856f, -0.000840f, +0.018815f, -0.005468f, -0.006646f, -0.012332f, -0.001343f, -0.005012f, +0.005546f, + -0.014665f, +0.000388f, -0.007899f, +0.004078f, +0.009115f, -0.002047f, +0.000741f, -0.002037f, +0.003287f, +0.005125f, + +0.007634f, +0.002823f, -0.000279f, +0.002465f, -0.001666f, -0.000929f, +0.000414f, +0.000109f, +0.001614f, -0.000782f, + +0.004339f, -0.007483f, -0.000476f, -0.003872f, +0.003237f, -0.002970f, -0.004121f, +0.004313f, -0.001355f, +0.002541f, + +0.007111f, +0.000835f, -0.003024f, +0.004458f, +0.000147f, -0.006209f, -0.000717f, +0.000773f, -0.001681f, +0.000137f, + -0.002135f, -0.000017f, +0.000470f, +0.000176f, -0.000287f, -0.002276f, +0.001803f, -0.001445f, -0.003446f, +0.000544f, + +0.000251f, +0.001817f, -0.000798f, +0.000428f, +0.000986f, -0.000663f, -0.001149f, -0.000395f, -0.000846f, -0.000592f, + +0.000883f, +0.000282f, -0.001094f, +0.000303f, +0.000084f, -0.000356f, +0.000411f, -0.000027f, -0.000530f, +0.000502f, + +0.000951f, +0.000116f, -0.000402f, -0.000121f, +0.000937f, +0.000848f, -0.000227f, +0.000310f, +0.000067f, +0.000084f, + -0.000025f, +0.000433f, +0.000177f, +0.000449f, -0.000330f, -0.000268f + }, + { + +0.000118f, -0.082694f, +0.015439f, -0.010706f, +0.006560f, -0.001269f, -0.006125f, +0.003574f, -0.002241f, -0.001959f, + +0.007806f, +0.008934f, -0.003186f, +0.007471f, -0.003981f, -0.017566f, +0.002442f, -0.006848f, -0.002442f, +0.004374f, + -0.003293f, +0.019378f, -0.007398f, +0.004661f, +0.005475f, -0.009027f, -0.000301f, -0.002077f, -0.015949f, +0.008168f, + +0.000921f, -0.007008f, -0.003918f, -0.002899f, -0.006758f, +0.000089f, +0.005340f, +0.001641f, +0.004453f, -0.001385f, + +0.003693f, -0.002246f, -0.002406f, +0.004375f, +0.002025f, -0.000004f, -0.006708f, -0.001024f, +0.000821f, -0.000070f, + -0.002999f, +0.002564f, -0.001444f, +0.002838f, -0.000241f, -0.000683f, +0.001038f, +0.000869f, +0.000458f, -0.003975f, + +0.000252f, +0.001389f, -0.000599f, -0.000196f, -0.000504f, +0.000212f, -0.000856f, +0.000935f, +0.000003f, -0.001110f, + -0.000268f, +0.000125f, -0.001499f, -0.000946f, -0.002187f, -0.000443f, -0.000664f, +0.000572f, -0.001011f, -0.000935f, + +0.000712f, +0.000018f, -0.000023f, -0.000181f, -0.000554f, -0.000473f, +0.000145f, -0.000060f, +0.000274f, -0.000046f, + -0.000771f, +0.000036f, +0.000232f, +0.000075f, -0.000180f, -0.000102f + }, + { + +0.036299f, -0.088325f, -0.046420f, +0.000907f, +0.019469f, -0.006958f, -0.000454f, +0.004705f, -0.007586f, +0.008459f, + -0.008295f, -0.004772f, -0.002072f, -0.002759f, +0.007121f, -0.004053f, +0.000562f, -0.004170f, -0.006416f, -0.010032f, + +0.000170f, +0.004654f, +0.001153f, -0.006448f, +0.004251f, -0.009727f, +0.003990f, -0.003198f, +0.001752f, -0.000098f, + -0.002478f, +0.000744f, -0.002047f, -0.001118f, +0.002047f, +0.005398f, +0.001749f, -0.001848f, -0.000044f, -0.002446f, + -0.000994f, +0.000334f, +0.004529f, +0.000154f, -0.002210f, +0.006122f, +0.002624f, -0.001955f, -0.005114f, +0.000261f, + +0.000837f, +0.001819f, +0.000833f, -0.001515f, -0.001478f, -0.004506f, +0.001358f, -0.000145f, +0.000130f, -0.002058f, + -0.001181f, +0.002658f, +0.000102f, +0.000864f, -0.000428f, -0.000957f, -0.000005f, -0.000468f, +0.000201f, +0.001116f, + +0.000131f, -0.000567f, +0.000068f, -0.000647f, -0.000351f, +0.000602f, -0.000298f, +0.000438f, -0.000125f, -0.000025f, + +0.000339f, +0.000376f, +0.000070f, +0.000075f, -0.000166f, -0.000142f, -0.000774f, -0.000164f, +0.000127f, -0.000340f, + -0.000113f, -0.000173f, -0.000121f, +0.000046f, -0.000046f, -0.000435f + }, + { + -0.001249f, -0.031921f, +0.010982f, +0.006511f, +0.008854f, -0.004529f, +0.003811f, -0.006920f, -0.000326f, -0.004982f, + +0.002381f, +0.007856f, -0.017603f, -0.051735f, -0.006196f, +0.009745f, +0.003068f, +0.002655f, +0.001087f, +0.002481f, + +0.002644f, -0.006393f, +0.011031f, -0.007055f, -0.002103f, -0.008029f, +0.009055f, +0.008809f, +0.005428f, +0.006159f, + -0.011404f, +0.007227f, -0.000211f, +0.002918f, -0.005906f, -0.002863f, -0.008355f, -0.005505f, +0.003183f, -0.002937f, + -0.005936f, +0.003612f, -0.001668f, -0.004332f, +0.000097f, +0.003257f, -0.002569f, +0.002529f, -0.003863f, -0.002566f, + +0.000415f, -0.000292f, +0.000294f, -0.000666f, +0.001586f, -0.005525f, +0.000851f, -0.001080f, +0.001261f, -0.000776f, + -0.000687f, +0.000456f, +0.000082f, -0.000117f, +0.001182f, -0.000342f, -0.000548f, -0.000900f, -0.000687f, +0.001199f, + -0.000409f, +0.001472f, -0.000195f, +0.001250f, -0.000097f, +0.000604f, -0.000246f, -0.000293f, +0.000627f, -0.000049f, + +0.000805f, -0.000579f, +0.001090f, -0.000173f, -0.000328f, +0.000200f, -0.000576f, +0.000029f, -0.000448f, -0.000093f, + -0.000115f, -0.000270f, -0.000202f, -0.000052f, +0.000134f, +0.000086f + }, + { + -0.060837f, +0.070627f, +0.005917f, +0.002340f, +0.023197f, +0.020299f, -0.026988f, -0.007067f, -0.009153f, +0.003128f, + +0.020626f, +0.006389f, +0.001300f, +0.005819f, +0.013311f, +0.001501f, +0.000676f, +0.012805f, -0.002917f, +0.001467f, + -0.007790f, +0.000950f, -0.005497f, -0.003446f, -0.009625f, -0.003328f, +0.001698f, +0.003313f, +0.006532f, -0.002645f, + -0.000669f, -0.004517f, +0.006289f, +0.005027f, -0.005184f, +0.008327f, -0.007451f, -0.011271f, +0.006209f, -0.002628f, + +0.000720f, +0.001209f, +0.006528f, -0.009703f, -0.006865f, -0.003484f, +0.000643f, -0.000169f, -0.001288f, -0.000455f, + -0.002352f, +0.000550f, -0.003608f, -0.003449f, +0.001435f, +0.000642f, +0.002290f, +0.002771f, +0.000479f, +0.003653f, + -0.000494f, -0.001003f, -0.000098f, +0.000952f, -0.001568f, +0.000277f, -0.000554f, -0.001527f, -0.000841f, -0.000528f, + +0.000383f, +0.000226f, +0.003437f, +0.000105f, +0.000100f, +0.000969f, +0.000916f, -0.000766f, -0.000338f, +0.000360f, + +0.000484f, +0.000053f, -0.000647f, +0.000049f, +0.000413f, -0.000195f, +0.000141f, +0.000015f, +0.000044f, +0.000344f, + -0.000205f, +0.000122f, +0.000291f, +0.000109f, -0.000050f, -0.000089f + }, + { + +0.002867f, -0.033389f, +0.001541f, +0.000317f, +0.002585f, +0.002254f, +0.001545f, +0.004032f, -0.005534f, +0.008608f, + +0.005925f, +0.004912f, +0.005791f, +0.031958f, +0.105524f, +0.020349f, -0.011069f, -0.001922f, +0.014345f, -0.015907f, + +0.005477f, +0.002912f, -0.007316f, -0.008971f, +0.000984f, +0.007486f, -0.001932f, -0.004330f, -0.002147f, -0.010157f, + +0.010293f, +0.004567f, -0.002227f, +0.002664f, -0.009327f, -0.001617f, +0.003632f, -0.007409f, +0.005960f, +0.004655f, + -0.001589f, -0.001731f, +0.003029f, +0.001585f, -0.002850f, -0.001970f, +0.001780f, -0.000448f, +0.000823f, -0.000259f, + -0.000959f, +0.001230f, +0.000391f, +0.000278f, +0.000371f, -0.001525f, -0.001056f, +0.002093f, -0.002113f, -0.000088f, + +0.000886f, -0.001944f, +0.001527f, +0.001039f, -0.001613f, -0.000576f, -0.000556f, -0.001343f, +0.000350f, +0.000586f, + -0.001368f, +0.000454f, +0.000112f, +0.000061f, -0.000247f, +0.000063f, +0.000197f, -0.000306f, +0.000665f, -0.000226f, + -0.000031f, -0.000585f, +0.000579f, -0.000130f, -0.000076f, +0.000246f, -0.000251f, +0.000196f, +0.000015f, +0.000045f, + -0.000233f, +0.000125f, -0.000002f, +0.000142f, +0.000005f, -0.000316f + }, + { + -0.031095f, +0.109140f, +0.014362f, -0.000583f, +0.000051f, +0.002327f, +0.005433f, +0.014091f, -0.002738f, +0.011297f, + +0.002328f, +0.001851f, +0.017488f, +0.023337f, +0.011760f, +0.008249f, +0.021617f, -0.010230f, -0.004141f, -0.000749f, + +0.004962f, +0.005449f, +0.000177f, -0.001497f, -0.003447f, +0.012411f, +0.002330f, -0.010729f, -0.006260f, -0.000440f, + +0.001282f, -0.001809f, -0.000836f, +0.005384f, -0.000240f, +0.000757f, -0.007072f, -0.003282f, +0.000962f, -0.000356f, + +0.003559f, +0.004849f, -0.003902f, -0.005705f, -0.001155f, +0.000333f, +0.002712f, +0.001510f, -0.000818f, +0.000361f, + -0.000320f, +0.003821f, +0.002767f, -0.000970f, +0.004088f, -0.001260f, -0.002453f, +0.001820f, -0.000251f, -0.002159f, + -0.001358f, -0.002918f, -0.000592f, +0.001524f, -0.001127f, +0.000711f, -0.000301f, +0.000330f, +0.001262f, -0.000894f, + -0.000565f, -0.000681f, -0.000162f, -0.000510f, +0.000237f, +0.000124f, +0.000785f, +0.000054f, +0.000360f, +0.000190f, + -0.000143f, -0.000779f, +0.000569f, -0.000701f, -0.001130f, -0.000013f, -0.000135f, -0.000106f, -0.000408f, +0.000363f, + +0.000275f, -0.000039f, +0.000346f, -0.000014f, +0.000133f, -0.000674f + } + }, + { + { + +0.001273f, -0.120991f, -0.000660f, +0.009554f, -0.005477f, +0.000141f, +0.003655f, +0.001745f, -0.005301f, +0.005881f, + -0.000472f, +0.000426f, +0.000763f, -0.000695f, -0.013876f, +0.022468f, -0.000932f, +0.001191f, +0.003455f, +0.021201f, + -0.001801f, +0.001441f, +0.001827f, +0.001590f, +0.013929f, -0.017878f, -0.014810f, -0.005202f, -0.004354f, -0.024743f, + +0.003117f, +0.003597f, -0.000552f, +0.005751f, +0.001633f, -0.002085f, -0.002745f, +0.001799f, +0.008547f, -0.003085f, + +0.001835f, -0.001535f, -0.006167f, +0.001332f, +0.000157f, -0.002830f, +0.000549f, +0.000289f, +0.003920f, +0.001688f, + +0.001389f, +0.000042f, +0.000932f, -0.000623f, +0.001685f, -0.001218f, -0.000768f, -0.002462f, +0.000498f, -0.002116f, + -0.000203f, -0.000165f, +0.001178f, +0.000398f, -0.001073f, +0.001184f, -0.001106f, -0.000296f, +0.000898f, +0.000583f, + -0.000232f, -0.000078f, -0.000081f, -0.000297f, -0.000263f, +0.000746f, +0.000463f, +0.001459f, +0.000089f, -0.000036f, + +0.000605f, -0.000471f, +0.000356f, -0.000341f, +0.000032f, +0.000058f, +0.000291f, -0.000623f, -0.000237f, +0.000373f, + +0.000613f, +0.000219f, +0.000117f, -0.000022f, -0.000219f, +0.000419f + }, + { + +0.022245f, -0.377694f, +0.003063f, +0.019555f, +0.001784f, -0.006312f, +0.001565f, -0.000159f, -0.008224f, -0.015448f, + -0.012904f, -0.009347f, +0.007755f, -0.008908f, -0.014506f, -0.006818f, -0.020318f, -0.004581f, +0.014777f, -0.004156f, + -0.003600f, +0.008239f, -0.005800f, +0.005934f, -0.005016f, -0.004027f, +0.010728f, +0.002349f, -0.001184f, +0.001272f, + +0.001533f, -0.000005f, -0.003493f, +0.009355f, -0.003809f, +0.003965f, +0.002233f, +0.006644f, +0.004841f, +0.001214f, + -0.003256f, +0.000766f, -0.002835f, +0.000825f, +0.002980f, -0.004355f, -0.001513f, +0.001151f, +0.000209f, +0.001829f, + +0.004185f, +0.000300f, +0.002587f, -0.001573f, -0.002410f, +0.001037f, +0.001131f, -0.000951f, -0.002223f, +0.001944f, + -0.001212f, -0.000799f, -0.000441f, -0.000235f, -0.000307f, -0.002941f, +0.000477f, +0.000283f, -0.000174f, -0.001101f, + +0.000149f, +0.000333f, +0.000754f, -0.000357f, -0.000565f, +0.000549f, +0.001095f, -0.000730f, -0.000501f, +0.000775f, + +0.000530f, -0.000694f, -0.000159f, +0.000168f, +0.000558f, -0.000362f, -0.000232f, -0.000094f, -0.000392f, +0.000586f, + -0.000364f, +0.000588f, +0.000240f, +0.000099f, -0.000191f, -0.000142f + }, + { + -0.011872f, +0.247660f, +0.053103f, +0.028237f, +0.007730f, -0.003696f, +0.001596f, +0.002037f, -0.006472f, -0.006134f, + -0.001762f, -0.006631f, -0.008446f, +0.000603f, -0.005496f, +0.013504f, +0.007283f, -0.008937f, +0.001369f, +0.010783f, + +0.006853f, +0.002520f, +0.003485f, +0.016700f, -0.005766f, -0.004550f, +0.001156f, -0.006570f, -0.013732f, -0.001984f, + +0.000451f, +0.002576f, -0.003251f, -0.001549f, -0.004028f, +0.002177f, +0.001485f, -0.000816f, +0.006238f, -0.007373f, + -0.001731f, -0.000432f, -0.001492f, +0.009268f, -0.002370f, -0.000039f, +0.003337f, +0.001226f, +0.000098f, +0.000539f, + -0.000375f, +0.000928f, -0.000465f, -0.000402f, +0.000449f, -0.000768f, +0.000255f, -0.000547f, +0.001265f, +0.003083f, + +0.000158f, -0.000722f, +0.001090f, +0.000710f, +0.001542f, -0.001002f, -0.001364f, -0.001025f, +0.000574f, -0.000326f, + +0.001028f, +0.000045f, +0.001337f, +0.000036f, -0.001210f, -0.000380f, +0.000072f, +0.000055f, -0.000310f, +0.000320f, + -0.000126f, +0.000488f, -0.000281f, -0.000000f, +0.000316f, -0.000270f, -0.000267f, +0.000255f, -0.000258f, -0.000070f, + +0.000052f, -0.000431f, +0.000187f, -0.000141f, -0.000002f, +0.000282f + }, + { + +0.001673f, -0.053315f, -0.009248f, -0.004227f, -0.000513f, -0.000476f, +0.000022f, +0.002545f, -0.004478f, +0.001942f, + -0.002633f, +0.005064f, +0.001957f, -0.002038f, +0.008528f, -0.016629f, +0.002698f, -0.013425f, -0.022340f, +0.003882f, + -0.008175f, -0.018482f, +0.000691f, +0.001660f, +0.004116f, +0.005329f, +0.001649f, +0.004345f, -0.006520f, -0.006880f, + +0.001207f, +0.003718f, +0.001548f, +0.005350f, -0.003988f, +0.001096f, -0.003896f, +0.001197f, -0.002854f, +0.000519f, + +0.002804f, +0.000854f, -0.000413f, +0.000551f, +0.000789f, +0.003875f, +0.002000f, -0.002639f, -0.001271f, -0.002700f, + +0.000167f, -0.000683f, +0.000295f, -0.001153f, -0.000895f, +0.002940f, -0.001444f, +0.000839f, +0.000526f, -0.001793f, + -0.000921f, -0.001768f, -0.001498f, +0.000396f, -0.000648f, +0.000437f, -0.000530f, -0.000388f, +0.000637f, -0.000618f, + +0.000313f, -0.000613f, +0.000042f, +0.000597f, -0.000160f, -0.000051f, +0.000134f, +0.000431f, +0.000330f, -0.000461f, + +0.000362f, -0.000003f, -0.000878f, -0.000253f, +0.000234f, +0.000398f, -0.000898f, -0.000338f, -0.000016f, +0.000108f, + +0.000239f, -0.000106f, +0.000022f, +0.000176f, +0.000117f, -0.000064f + }, + { + -0.077156f, -0.097905f, -0.012245f, +0.011094f, +0.006460f, -0.001510f, -0.001957f, +0.001178f, +0.001376f, +0.001670f, + +0.009535f, +0.014673f, +0.006746f, +0.002389f, -0.003933f, -0.009224f, -0.011449f, -0.001847f, -0.003086f, -0.004094f, + -0.003570f, +0.007438f, -0.001010f, -0.001512f, -0.000806f, -0.001234f, -0.004308f, -0.004471f, -0.012962f, -0.003147f, + +0.002964f, -0.004624f, -0.001083f, -0.004605f, -0.007151f, +0.001927f, -0.017517f, -0.002127f, +0.005468f, -0.002772f, + -0.003941f, +0.002929f, +0.000096f, +0.001643f, +0.008122f, +0.005735f, +0.002647f, +0.004318f, +0.004418f, -0.001842f, + +0.002596f, +0.001009f, +0.000646f, +0.000598f, +0.000590f, +0.002744f, +0.000174f, +0.002370f, -0.000205f, -0.000708f, + +0.000131f, -0.000452f, -0.000297f, +0.002096f, -0.000893f, +0.000529f, +0.001463f, +0.000399f, +0.001604f, +0.000092f, + +0.000832f, +0.001429f, -0.000833f, -0.001415f, -0.000204f, +0.000360f, -0.001552f, -0.000465f, -0.000685f, -0.000116f, + -0.000648f, +0.000461f, -0.000274f, +0.000258f, -0.000625f, +0.000169f, +0.000047f, -0.000851f, +0.000428f, +0.000376f, + -0.000137f, +0.000254f, +0.000078f, +0.000076f, -0.000084f, +0.000251f + }, + { + -0.000924f, -0.013500f, -0.002829f, +0.003330f, +0.000458f, +0.000364f, +0.000083f, +0.001780f, +0.002616f, -0.000749f, + -0.003220f, -0.008686f, -0.002213f, -0.002374f, +0.008227f, -0.008295f, +0.006935f, +0.006905f, +0.005226f, -0.033721f, + +0.004686f, +0.000620f, -0.009252f, -0.012085f, -0.008028f, +0.001602f, +0.003300f, +0.000250f, -0.002585f, -0.009628f, + -0.001499f, +0.005656f, -0.000477f, +0.000940f, +0.002275f, +0.001641f, +0.001953f, -0.002450f, -0.004997f, +0.000473f, + +0.004541f, -0.001379f, -0.002427f, +0.001524f, +0.001826f, +0.001392f, +0.000376f, -0.000684f, +0.001981f, +0.002036f, + -0.003274f, -0.001786f, -0.000472f, -0.001893f, -0.001578f, -0.000215f, +0.000516f, +0.002181f, -0.000161f, +0.001469f, + +0.001960f, +0.000808f, -0.000069f, -0.000634f, +0.001306f, -0.000635f, +0.000917f, -0.001593f, -0.001111f, +0.000048f, + -0.000517f, +0.001240f, -0.000092f, -0.000016f, -0.000035f, +0.001657f, +0.000402f, +0.000393f, -0.000619f, +0.000965f, + +0.000547f, -0.000331f, +0.000114f, +0.000087f, +0.000336f, +0.000379f, -0.000557f, +0.000093f, +0.000875f, +0.000154f, + -0.000184f, +0.000014f, +0.000131f, -0.000257f, -0.000007f, -0.000296f + }, + { + -0.080403f, +0.274587f, +0.011083f, +0.011555f, +0.001410f, -0.005205f, -0.000355f, +0.001227f, -0.001983f, -0.005389f, + -0.001037f, -0.014458f, -0.008995f, -0.003992f, +0.012470f, -0.000674f, +0.004049f, -0.000055f, +0.004742f, -0.001585f, + -0.000751f, -0.003872f, -0.003842f, -0.004501f, +0.006012f, +0.009518f, +0.002806f, +0.000251f, +0.000900f, -0.003455f, + +0.001829f, -0.004843f, +0.005565f, +0.001754f, +0.001833f, +0.000905f, -0.003613f, -0.003325f, -0.006172f, -0.001212f, + +0.004942f, +0.002815f, -0.002128f, -0.005780f, +0.001264f, +0.002370f, -0.000727f, +0.002116f, +0.000535f, +0.003330f, + -0.000437f, -0.002620f, +0.001248f, -0.003170f, -0.000913f, +0.000175f, -0.000846f, -0.000399f, -0.000114f, -0.001489f, + +0.000394f, -0.000096f, -0.000891f, -0.000145f, +0.000094f, -0.000774f, +0.001725f, -0.000918f, +0.000142f, -0.000269f, + -0.000445f, -0.000475f, +0.000352f, +0.000323f, -0.000167f, +0.000347f, +0.000529f, -0.000290f, +0.000138f, -0.001150f, + -0.000135f, +0.000315f, -0.000037f, +0.001209f, +0.000806f, +0.000059f, -0.000164f, +0.000075f, -0.000443f, -0.000374f, + +0.000157f, -0.000125f, -0.000236f, -0.000354f, -0.000384f, +0.000267f + }, + { + -0.000749f, +0.024469f, -0.010431f, -0.003463f, +0.000741f, -0.000047f, -0.000387f, +0.002156f, +0.003017f, -0.000983f, + +0.000004f, -0.002613f, +0.002869f, +0.004719f, +0.006093f, -0.025110f, +0.009879f, -0.005660f, -0.001467f, +0.006164f, + +0.000552f, -0.017885f, +0.005762f, +0.003384f, -0.007863f, -0.007774f, -0.009183f, +0.006502f, -0.006318f, +0.007397f, + +0.002358f, +0.007170f, +0.001438f, +0.001239f, -0.001760f, +0.003972f, +0.000920f, +0.000529f, +0.002808f, +0.003827f, + -0.002851f, -0.004350f, +0.000718f, +0.000258f, -0.001421f, +0.001324f, -0.001309f, -0.002146f, -0.001828f, +0.004281f, + -0.000346f, +0.000034f, +0.000747f, -0.002669f, +0.001506f, -0.002716f, -0.001018f, -0.002912f, -0.001650f, -0.000168f, + +0.000306f, +0.001532f, +0.001443f, +0.000653f, +0.000925f, -0.000154f, -0.001628f, -0.000667f, +0.000902f, -0.003612f, + -0.000050f, +0.001384f, -0.000284f, -0.000539f, +0.000477f, -0.000061f, +0.000615f, +0.000748f, +0.000526f, +0.002064f, + +0.000615f, -0.000598f, +0.001172f, -0.000239f, -0.000241f, +0.000249f, -0.000592f, +0.000152f, +0.000564f, +0.000111f, + +0.000214f, -0.000092f, +0.000372f, +0.000268f, +0.000287f, +0.000107f + }, + { + -0.042241f, -0.436374f, +0.027659f, +0.008785f, -0.000080f, -0.006487f, -0.005215f, -0.002738f, -0.002839f, +0.001590f, + -0.003028f, -0.011393f, -0.009796f, -0.006812f, +0.014291f, +0.003779f, -0.003741f, +0.005749f, +0.002916f, +0.000811f, + +0.008742f, +0.004397f, +0.000627f, +0.004238f, -0.000113f, -0.003208f, +0.000975f, -0.000098f, +0.001868f, -0.001946f, + +0.006146f, -0.008885f, +0.000319f, -0.004021f, +0.003605f, -0.007481f, +0.000870f, +0.002155f, -0.000885f, +0.002198f, + +0.011169f, -0.008538f, +0.003095f, +0.001031f, +0.001977f, -0.002961f, +0.001161f, -0.004068f, +0.001762f, -0.001971f, + -0.001003f, +0.001081f, -0.002661f, -0.001055f, +0.002691f, -0.000465f, +0.001111f, -0.003171f, -0.001792f, +0.000095f, + +0.000198f, +0.000943f, -0.000600f, +0.000812f, +0.000131f, +0.000025f, -0.000013f, -0.000362f, -0.000051f, -0.000345f, + -0.000580f, +0.000458f, -0.000700f, -0.000149f, -0.000039f, +0.000270f, +0.000040f, +0.000630f, -0.000046f, +0.000383f, + +0.000111f, +0.000202f, -0.000263f, -0.000058f, +0.000520f, +0.000638f, -0.000426f, +0.000818f, +0.000061f, +0.000260f, + +0.000011f, +0.000731f, -0.000071f, -0.000170f, -0.000013f, -0.000344f + }, + { + +0.000952f, -0.071240f, +0.003557f, +0.001730f, -0.007897f, +0.004935f, -0.002251f, -0.003998f, +0.001015f, -0.002779f, + +0.003797f, +0.000407f, +0.007207f, -0.007945f, -0.001474f, -0.011240f, -0.005780f, +0.003796f, +0.005036f, +0.005408f, + -0.009876f, +0.010854f, +0.004970f, -0.003002f, +0.001231f, +0.005347f, -0.007297f, -0.007374f, -0.005742f, -0.004836f, + +0.009995f, -0.006925f, -0.006883f, -0.004944f, -0.005616f, +0.002646f, +0.002411f, -0.000141f, +0.006528f, +0.000798f, + -0.000943f, +0.002138f, +0.000832f, +0.002361f, -0.001172f, +0.001662f, -0.002705f, -0.003641f, +0.000520f, -0.004050f, + +0.000583f, +0.000463f, -0.000173f, +0.001985f, +0.000531f, -0.001400f, -0.000157f, +0.001543f, -0.002217f, -0.003078f, + -0.000090f, +0.002044f, -0.000370f, -0.000523f, -0.000384f, +0.000391f, -0.001182f, +0.002214f, -0.000615f, -0.001020f, + -0.000235f, +0.000557f, -0.001411f, -0.000942f, -0.001615f, -0.000227f, -0.000755f, -0.000559f, -0.000169f, -0.001496f, + -0.000004f, +0.000472f, +0.000173f, +0.000145f, -0.000666f, +0.000251f, -0.000290f, +0.000150f, +0.000027f, -0.000235f, + -0.000170f, -0.000378f, +0.000315f, -0.000140f, +0.000176f, -0.000027f + }, + { + -0.034719f, -0.079898f, +0.022328f, -0.008715f, +0.015753f, +0.019444f, -0.019003f, -0.003972f, -0.005515f, +0.001698f, + -0.000893f, -0.007648f, -0.004428f, +0.004688f, -0.001585f, +0.000664f, -0.009239f, +0.005093f, -0.004499f, -0.013795f, + +0.004124f, +0.002639f, +0.002745f, -0.012634f, +0.011793f, -0.007117f, -0.000229f, -0.004668f, -0.001798f, -0.001527f, + +0.001062f, +0.001704f, +0.000807f, -0.001874f, +0.001584f, +0.003956f, +0.004126f, +0.000397f, -0.006092f, +0.002378f, + +0.000996f, +0.002978f, -0.001362f, -0.000078f, +0.000651f, +0.002686f, +0.001518f, -0.001006f, -0.002710f, -0.002183f, + +0.001170f, +0.001190f, +0.002030f, -0.001061f, -0.004253f, -0.001062f, -0.001780f, +0.000100f, +0.000213f, -0.000767f, + -0.000018f, +0.000745f, +0.000589f, -0.000670f, +0.000815f, -0.000537f, -0.000715f, +0.000340f, -0.000081f, +0.000924f, + +0.000343f, -0.000557f, -0.000493f, +0.000379f, -0.000342f, +0.000091f, +0.000808f, -0.000119f, -0.000996f, +0.000218f, + +0.000392f, +0.000103f, +0.000590f, -0.000162f, -0.000519f, +0.000094f, -0.000525f, -0.000172f, +0.000402f, -0.000730f, + -0.000095f, -0.000263f, +0.000004f, +0.000059f, +0.000031f, -0.000317f + }, + { + +0.002121f, -0.009481f, -0.006604f, -0.000478f, +0.004202f, +0.000678f, +0.001672f, -0.003570f, -0.002222f, -0.004922f, + -0.000119f, +0.000669f, -0.005998f, -0.041034f, -0.014784f, -0.003171f, -0.001614f, +0.003587f, +0.009061f, -0.000934f, + +0.001176f, -0.008801f, +0.014715f, -0.001486f, -0.015551f, +0.004263f, +0.002430f, +0.010619f, -0.002007f, +0.005285f, + +0.003461f, -0.007586f, +0.003227f, +0.002888f, -0.009063f, +0.001474f, -0.007875f, +0.000556f, -0.003233f, -0.002884f, + +0.000271f, +0.001834f, -0.001420f, -0.002181f, -0.002487f, +0.000406f, -0.000547f, -0.000991f, +0.000925f, -0.002646f, + -0.000879f, -0.001352f, +0.000764f, +0.001765f, -0.000124f, -0.003505f, +0.000539f, -0.001631f, -0.001198f, -0.000364f, + +0.000725f, -0.000535f, +0.000602f, -0.000827f, -0.000780f, +0.000806f, -0.000199f, -0.000780f, -0.000672f, +0.001187f, + -0.000301f, -0.000260f, +0.000668f, +0.000771f, +0.001150f, +0.000590f, -0.000251f, -0.000412f, +0.000434f, +0.000121f, + +0.000174f, +0.000373f, +0.000218f, -0.000353f, -0.000535f, +0.000062f, -0.000032f, -0.000577f, -0.000075f, +0.000262f, + -0.000196f, -0.000458f, -0.000006f, +0.000052f, +0.000005f, +0.000306f + }, + { + +0.045452f, -0.066326f, -0.021020f, +0.022840f, +0.015296f, +0.001738f, +0.010106f, -0.013649f, -0.004224f, +0.001450f, + +0.016675f, +0.007932f, +0.015803f, -0.014015f, +0.017796f, +0.002589f, -0.001163f, +0.001643f, +0.005280f, -0.006471f, + +0.003809f, -0.008118f, -0.004995f, -0.007521f, +0.000980f, -0.001712f, +0.004246f, +0.001797f, -0.003350f, +0.001625f, + -0.001608f, +0.005988f, -0.000563f, +0.004135f, -0.000000f, -0.002404f, -0.002304f, -0.005149f, -0.004154f, +0.002698f, + +0.002525f, -0.001363f, +0.001618f, -0.004665f, -0.008940f, -0.004717f, -0.000204f, +0.002330f, -0.001458f, -0.003755f, + -0.000575f, -0.000726f, -0.000318f, -0.000135f, +0.000261f, +0.001515f, -0.000396f, +0.004267f, +0.000983f, +0.001220f, + +0.001131f, -0.001670f, -0.000168f, +0.001900f, -0.000855f, -0.000118f, -0.001887f, -0.001324f, -0.000768f, -0.000484f, + +0.001232f, -0.000342f, +0.001865f, +0.001736f, -0.000486f, +0.000898f, +0.000198f, +0.000561f, -0.000393f, +0.000250f, + +0.000200f, -0.000039f, -0.000524f, +0.000253f, +0.000496f, +0.000420f, -0.000627f, +0.000133f, -0.000327f, +0.000194f, + +0.000179f, +0.000122f, +0.000378f, +0.000076f, -0.000071f, +0.000038f + }, + { + -0.002081f, -0.019097f, -0.003982f, -0.001758f, -0.000079f, +0.003703f, +0.003657f, +0.002975f, +0.000059f, +0.000799f, + +0.003821f, +0.006239f, +0.008531f, +0.023309f, +0.138036f, -0.010591f, +0.006264f, -0.012048f, +0.006724f, +0.003547f, + -0.006076f, +0.006961f, -0.006115f, -0.009284f, +0.003972f, +0.007419f, +0.006086f, -0.005478f, -0.012487f, +0.006666f, + -0.003325f, +0.007395f, -0.001004f, -0.001394f, -0.004963f, +0.003448f, +0.000730f, -0.007891f, +0.001015f, +0.007206f, + -0.003462f, +0.000013f, +0.003860f, -0.001220f, +0.000681f, -0.001670f, -0.001064f, -0.000359f, +0.002590f, -0.000576f, + -0.000561f, -0.001086f, +0.001645f, +0.000578f, +0.000882f, -0.001752f, -0.001335f, +0.000394f, -0.000979f, -0.000695f, + +0.000733f, +0.000261f, -0.000193f, +0.000333f, +0.000101f, -0.001289f, -0.001206f, -0.000364f, +0.000185f, -0.000093f, + -0.001122f, +0.000001f, +0.000199f, +0.000003f, -0.000030f, +0.000097f, +0.000359f, +0.000295f, +0.000349f, -0.000024f, + +0.000248f, -0.000369f, +0.000127f, -0.000202f, -0.000112f, +0.000204f, -0.000278f, +0.000107f, +0.000091f, -0.000146f, + +0.000264f, +0.000132f, +0.000156f, -0.000128f, +0.000088f, -0.000296f + }, + { + +0.040554f, +0.006683f, +0.014598f, -0.001815f, +0.001398f, +0.005257f, +0.003183f, +0.016280f, -0.003777f, +0.010866f, + +0.003054f, +0.012655f, -0.003115f, -0.012924f, +0.078788f, +0.002497f, +0.013726f, -0.010536f, +0.001009f, +0.000452f, + +0.005328f, +0.002757f, +0.002181f, +0.002312f, -0.001388f, +0.002452f, +0.005520f, -0.013773f, +0.002629f, -0.003048f, + -0.006091f, +0.003033f, -0.001112f, +0.008445f, +0.001844f, +0.002691f, -0.008608f, -0.002380f, -0.001466f, -0.000436f, + +0.007432f, -0.000496f, -0.000093f, -0.005474f, +0.003027f, -0.001031f, -0.001563f, +0.000669f, +0.001233f, -0.000481f, + +0.001546f, +0.001978f, +0.001827f, +0.001279f, +0.003182f, -0.001106f, -0.003121f, +0.000280f, +0.000309f, -0.001809f, + -0.001366f, -0.001625f, -0.001054f, +0.000040f, +0.000848f, -0.001449f, -0.000310f, -0.000544f, +0.001806f, -0.000773f, + -0.000224f, -0.000347f, -0.000780f, +0.000159f, -0.000107f, +0.000383f, +0.001038f, -0.000163f, +0.000775f, -0.000723f, + +0.000056f, -0.000571f, +0.000797f, -0.000603f, -0.000936f, -0.000074f, +0.000351f, -0.000190f, -0.000185f, +0.000011f, + +0.000250f, +0.000082f, +0.000300f, +0.000231f, -0.000017f, -0.000225f + } + }, + { + { + +0.000472f, -0.041204f, +0.050237f, +0.007229f, -0.004853f, -0.000560f, +0.001478f, +0.001730f, -0.005379f, -0.001302f, + -0.001599f, +0.001792f, +0.006967f, +0.013582f, -0.018673f, +0.005840f, -0.014770f, -0.007372f, -0.009092f, +0.001702f, + -0.014378f, -0.007025f, -0.001472f, +0.007962f, +0.016797f, -0.006002f, -0.004495f, -0.007995f, -0.008516f, -0.017862f, + +0.009330f, -0.005625f, -0.003441f, +0.003125f, -0.001824f, -0.006478f, -0.002477f, +0.000646f, +0.006467f, -0.002875f, + +0.001950f, -0.000565f, -0.005298f, +0.001874f, -0.000518f, -0.001556f, +0.002220f, -0.001208f, +0.000935f, +0.000115f, + -0.001713f, -0.000298f, +0.001185f, -0.001832f, -0.000557f, -0.000990f, +0.001130f, -0.000470f, -0.000367f, -0.003322f, + +0.000655f, +0.000072f, +0.001231f, +0.000061f, -0.002325f, +0.001010f, -0.000798f, -0.000181f, +0.001517f, +0.001122f, + +0.000272f, +0.000153f, +0.000244f, -0.000188f, +0.000540f, +0.000528f, +0.000167f, +0.000587f, -0.000348f, -0.000321f, + +0.000572f, -0.000011f, +0.000525f, -0.000349f, +0.000567f, +0.000321f, +0.000515f, -0.000423f, -0.000376f, +0.000171f, + -0.000234f, -0.000343f, -0.000025f, -0.000140f, -0.000426f, +0.000109f + }, + { + -0.021043f, -0.240596f, +0.127411f, +0.006529f, -0.002458f, -0.000252f, +0.006146f, +0.004495f, +0.000925f, -0.005142f, + -0.000027f, -0.012487f, -0.001392f, -0.007984f, -0.000944f, +0.001334f, -0.005497f, -0.007861f, -0.005928f, -0.000524f, + -0.002138f, +0.011385f, -0.002972f, +0.004874f, -0.005259f, -0.005954f, +0.009808f, -0.002432f, -0.002088f, -0.001393f, + -0.001105f, -0.000722f, -0.003825f, +0.004663f, -0.006896f, +0.003276f, +0.000679f, +0.007509f, +0.002906f, +0.002975f, + +0.001338f, +0.003145f, -0.002914f, +0.005230f, +0.006264f, -0.001133f, -0.002193f, -0.000509f, +0.002199f, +0.001365f, + -0.001854f, -0.002678f, +0.002836f, -0.000322f, -0.001277f, +0.001079f, +0.002241f, -0.000868f, -0.003539f, +0.000535f, + -0.001225f, +0.000001f, +0.000695f, +0.001522f, -0.000293f, -0.002724f, -0.000256f, +0.000555f, -0.000143f, -0.001827f, + +0.000403f, -0.000681f, -0.000220f, +0.000004f, -0.000203f, +0.000451f, +0.000923f, -0.000653f, -0.000506f, +0.000076f, + +0.001005f, -0.000262f, -0.000040f, +0.000326f, +0.000569f, +0.000112f, -0.000185f, -0.000161f, -0.000463f, +0.000240f, + -0.000752f, +0.000273f, +0.000102f, +0.000215f, -0.000339f, +0.000021f + }, + { + +0.011175f, +0.106505f, -0.104212f, +0.000501f, +0.001959f, -0.010311f, -0.002755f, +0.002826f, +0.000836f, +0.003492f, + -0.002189f, -0.009658f, -0.016152f, +0.001873f, +0.004693f, +0.008890f, -0.002966f, -0.005513f, -0.010268f, -0.012300f, + -0.008293f, -0.017258f, -0.004064f, +0.011289f, -0.003006f, -0.000599f, -0.000110f, -0.006265f, -0.010785f, +0.005228f, + +0.007395f, +0.009195f, -0.005405f, +0.004428f, +0.003101f, +0.003052f, -0.000153f, +0.001693f, +0.009969f, -0.002989f, + +0.002167f, -0.000629f, -0.002480f, +0.007496f, -0.003238f, -0.002065f, +0.000254f, -0.001557f, -0.000199f, +0.002711f, + -0.000515f, -0.002268f, -0.002635f, -0.001997f, +0.000654f, +0.000707f, -0.003019f, -0.002042f, -0.000013f, -0.000112f, + +0.000027f, +0.000424f, +0.001041f, -0.001406f, +0.000535f, +0.000481f, -0.000469f, -0.000081f, +0.001385f, -0.000178f, + +0.001382f, -0.000004f, +0.001347f, +0.000297f, -0.001056f, -0.000854f, -0.000249f, -0.000327f, -0.000380f, +0.000356f, + -0.000056f, +0.000159f, -0.000681f, +0.000196f, +0.000680f, -0.000108f, -0.000144f, +0.000187f, +0.000139f, +0.000618f, + -0.000001f, -0.000356f, +0.000307f, -0.000041f, -0.000100f, +0.000215f + }, + { + -0.001879f, -0.020867f, +0.015677f, -0.004990f, +0.000117f, -0.000475f, -0.001451f, +0.001499f, -0.003190f, +0.002187f, + -0.004031f, +0.002430f, +0.001890f, -0.002597f, +0.026008f, +0.007173f, +0.002276f, -0.019258f, -0.029889f, -0.004009f, + -0.002156f, -0.018946f, -0.012098f, -0.010375f, -0.006517f, +0.006976f, +0.001040f, +0.006287f, -0.002247f, -0.002741f, + +0.000461f, -0.005738f, -0.002941f, +0.001638f, -0.006151f, +0.003933f, -0.001105f, +0.004286f, -0.005434f, -0.000463f, + +0.001543f, +0.002115f, -0.000893f, -0.000281f, +0.000534f, +0.000564f, -0.000836f, +0.000818f, +0.002768f, -0.000642f, + +0.003702f, -0.000014f, -0.002471f, -0.001233f, -0.001957f, +0.002309f, -0.000456f, -0.000491f, +0.000127f, +0.000126f, + +0.000581f, -0.000882f, -0.000410f, +0.000730f, +0.000076f, +0.000910f, -0.000002f, -0.000878f, +0.000046f, -0.000565f, + -0.000093f, -0.000895f, +0.000015f, -0.000010f, -0.000606f, -0.000794f, -0.000152f, +0.000329f, -0.000028f, -0.000810f, + -0.000559f, -0.000215f, +0.000435f, +0.000104f, +0.000206f, +0.000440f, -0.000606f, +0.000104f, +0.000083f, +0.000110f, + +0.000171f, +0.000012f, +0.000166f, +0.000355f, +0.000165f, -0.000053f + }, + { + +0.077480f, +0.072366f, -0.047084f, +0.017156f, +0.005841f, +0.001001f, -0.001494f, -0.003144f, -0.003707f, +0.005733f, + -0.002721f, -0.001895f, +0.005306f, +0.007312f, +0.019412f, +0.003350f, +0.009120f, +0.007586f, -0.016016f, -0.012842f, + -0.006487f, +0.003121f, -0.006972f, +0.000914f, +0.002193f, +0.002378f, -0.003374f, +0.002912f, -0.004927f, +0.001336f, + +0.005378f, -0.005443f, -0.006941f, -0.007537f, -0.000663f, +0.006323f, -0.003384f, +0.003315f, +0.003504f, -0.000640f, + +0.001151f, +0.003001f, -0.004735f, -0.001121f, +0.001546f, -0.000329f, -0.001712f, -0.001357f, +0.001822f, -0.001748f, + +0.002043f, +0.000409f, +0.002117f, +0.001077f, +0.000440f, +0.001170f, -0.000591f, -0.000252f, -0.002760f, -0.000296f, + +0.000635f, -0.001068f, -0.001355f, +0.001586f, -0.001401f, -0.000525f, +0.001052f, -0.001019f, +0.000267f, -0.000840f, + -0.000304f, +0.000774f, -0.001169f, -0.001119f, +0.000081f, +0.000992f, -0.000531f, +0.000909f, -0.000027f, +0.000192f, + -0.000351f, +0.001285f, +0.000237f, +0.000637f, -0.000655f, -0.000248f, +0.000159f, -0.000369f, +0.000143f, +0.000101f, + -0.000271f, -0.000010f, -0.000020f, +0.000008f, -0.000264f, +0.000435f + }, + { + -0.000202f, -0.009494f, -0.001819f, +0.002031f, +0.001605f, +0.000647f, +0.000930f, +0.002690f, +0.000048f, -0.001697f, + -0.001490f, -0.002313f, +0.001744f, -0.007617f, +0.007342f, -0.007434f, -0.000865f, -0.004525f, -0.004584f, -0.055361f, + -0.001727f, +0.010800f, -0.012965f, -0.005668f, +0.002365f, -0.011749f, -0.001736f, +0.006452f, -0.002503f, -0.010828f, + -0.001926f, +0.002045f, -0.002981f, -0.002154f, +0.004412f, +0.002345f, +0.003036f, +0.001133f, -0.006003f, -0.000889f, + +0.004752f, +0.000441f, -0.001279f, +0.000847f, -0.001478f, -0.000239f, -0.000909f, -0.003098f, +0.000839f, +0.001974f, + -0.000550f, +0.001718f, +0.002497f, -0.002488f, -0.001236f, +0.000598f, -0.000685f, +0.000453f, -0.000940f, +0.001883f, + +0.000744f, -0.000881f, -0.000127f, -0.000572f, +0.000473f, +0.000498f, +0.001289f, -0.001023f, +0.000535f, +0.000778f, + -0.000606f, +0.001089f, -0.000694f, +0.000086f, +0.000285f, +0.000374f, -0.000901f, +0.000583f, +0.000085f, +0.000667f, + -0.000554f, +0.000130f, +0.000211f, -0.000306f, -0.000116f, +0.000052f, -0.000556f, +0.000211f, +0.000626f, -0.000081f, + -0.000052f, -0.000009f, +0.000304f, +0.000190f, -0.000034f, -0.000590f + }, + { + +0.051213f, +0.491177f, +0.028651f, +0.021484f, +0.012504f, -0.003749f, +0.000541f, -0.000357f, +0.000843f, +0.000301f, + +0.008413f, -0.006350f, -0.004184f, +0.001520f, +0.006096f, -0.010248f, +0.001551f, -0.004024f, +0.001281f, -0.002842f, + +0.000895f, -0.000321f, -0.003332f, -0.006344f, -0.004054f, +0.001172f, -0.001247f, +0.002886f, +0.005478f, -0.004972f, + +0.002484f, -0.004326f, +0.001513f, -0.003977f, -0.003405f, -0.004211f, -0.003764f, +0.002916f, -0.003091f, +0.000279f, + +0.002991f, +0.000636f, -0.001124f, -0.001836f, +0.001825f, -0.001184f, +0.000855f, +0.002800f, +0.001320f, +0.003205f, + -0.000414f, -0.000214f, +0.000813f, -0.003149f, -0.001524f, +0.000725f, -0.000600f, -0.000343f, +0.000257f, -0.001788f, + +0.001402f, +0.001598f, -0.000705f, -0.000632f, +0.000106f, -0.001527f, +0.000433f, -0.000075f, +0.000779f, -0.000404f, + +0.000440f, +0.000015f, -0.000118f, +0.000397f, -0.000009f, +0.000215f, +0.000486f, +0.000154f, +0.000497f, -0.000070f, + +0.000812f, -0.000393f, -0.000811f, +0.000607f, +0.000189f, -0.000132f, -0.000268f, +0.000679f, +0.000424f, -0.000168f, + +0.000023f, +0.000430f, +0.000329f, +0.000225f, -0.000069f, +0.000426f + }, + { + -0.001941f, +0.020340f, -0.003242f, -0.000792f, +0.000949f, -0.000527f, -0.002130f, -0.001916f, -0.001677f, -0.002288f, + -0.002177f, -0.003788f, +0.005558f, +0.007913f, +0.043964f, +0.007501f, +0.023041f, +0.005668f, +0.007706f, +0.002435f, + +0.013734f, +0.004126f, +0.015311f, -0.004853f, -0.024007f, -0.001148f, -0.010414f, -0.000789f, -0.009161f, -0.002515f, + -0.005970f, +0.000343f, -0.004070f, -0.000190f, -0.000958f, -0.002763f, -0.002927f, +0.001538f, +0.001071f, +0.003194f, + -0.000067f, -0.003550f, +0.002756f, +0.003108f, -0.001172f, +0.000595f, -0.001325f, +0.000771f, -0.001736f, +0.002717f, + +0.000773f, +0.001251f, +0.000383f, -0.002266f, +0.001885f, -0.004222f, -0.001132f, -0.000625f, -0.000647f, -0.001673f, + -0.000212f, +0.002629f, +0.001989f, -0.000697f, +0.000800f, +0.001070f, -0.001340f, -0.000738f, +0.002232f, -0.001783f, + +0.000156f, +0.000100f, -0.000707f, -0.000320f, +0.000435f, +0.000061f, +0.000408f, -0.000347f, -0.000872f, +0.000664f, + -0.000234f, -0.000574f, +0.001199f, -0.000688f, -0.000244f, +0.000726f, -0.000439f, -0.000226f, -0.000018f, -0.000129f, + +0.000360f, -0.000266f, +0.000079f, -0.000081f, -0.000187f, -0.000302f + }, + { + +0.066323f, -0.343189f, -0.019325f, +0.009584f, +0.005697f, +0.000575f, +0.001609f, +0.002477f, -0.001987f, +0.001578f, + +0.004233f, -0.006969f, -0.001116f, -0.007521f, -0.001270f, -0.005127f, -0.006976f, +0.005054f, +0.011333f, -0.001124f, + -0.001432f, +0.000539f, +0.005732f, +0.005260f, -0.004438f, -0.002480f, +0.001109f, -0.001918f, -0.001040f, -0.007966f, + +0.009279f, -0.004405f, -0.002781f, -0.002247f, +0.002140f, -0.006419f, +0.004223f, +0.000120f, -0.001127f, +0.005464f, + +0.006820f, -0.010374f, +0.007101f, -0.000615f, +0.000379f, -0.001257f, +0.001144f, -0.001558f, +0.004689f, -0.002502f, + -0.002225f, -0.000721f, -0.003892f, +0.000339f, +0.004865f, -0.000084f, +0.001168f, -0.001647f, +0.001048f, +0.001155f, + +0.000306f, +0.000887f, +0.000980f, +0.001572f, +0.000315f, +0.000942f, +0.000279f, -0.000010f, +0.001046f, +0.000110f, + -0.000955f, +0.000694f, -0.000041f, +0.000221f, +0.000618f, +0.000749f, -0.000036f, +0.001305f, -0.000017f, -0.000180f, + -0.000026f, +0.000315f, -0.000644f, -0.000554f, -0.000257f, +0.000219f, -0.000394f, +0.000511f, +0.000067f, +0.000043f, + -0.000130f, +0.000569f, -0.000232f, -0.000356f, +0.000098f, -0.000011f + }, + { + -0.001723f, -0.046074f, +0.020307f, +0.006563f, -0.009929f, -0.001574f, -0.001351f, +0.002060f, +0.002784f, -0.005218f, + -0.006741f, -0.005014f, +0.000126f, -0.014888f, -0.005208f, -0.020545f, +0.002443f, +0.007223f, +0.007415f, +0.023182f, + -0.006428f, +0.006816f, -0.000651f, -0.007936f, +0.002089f, +0.003943f, -0.007537f, -0.005562f, +0.001941f, -0.006105f, + +0.011352f, -0.000089f, -0.000121f, -0.001925f, -0.005421f, +0.000163f, -0.002336f, -0.003005f, +0.000503f, -0.002677f, + -0.001968f, +0.002025f, +0.002119f, +0.002374f, -0.000584f, +0.002741f, -0.002030f, -0.002415f, +0.000800f, -0.005422f, + +0.001413f, +0.000473f, -0.002900f, +0.000260f, +0.000604f, -0.003679f, -0.003605f, -0.000553f, -0.001882f, -0.001619f, + +0.000722f, +0.002236f, +0.000058f, -0.000317f, +0.000298f, +0.000768f, -0.000841f, +0.001555f, -0.000737f, +0.000154f, + -0.000441f, +0.000731f, -0.000165f, +0.000494f, +0.000447f, +0.001129f, -0.000437f, -0.000422f, +0.000868f, -0.000254f, + -0.000278f, +0.000125f, +0.000463f, +0.000797f, -0.000100f, +0.000550f, +0.000150f, +0.000161f, +0.000280f, -0.000314f, + +0.000169f, -0.000248f, +0.000171f, -0.000059f, +0.000246f, -0.000125f + }, + { + +0.031005f, -0.097161f, -0.048984f, -0.009709f, -0.006890f, +0.012187f, -0.010318f, -0.011187f, -0.011012f, +0.004445f, + +0.005660f, -0.008245f, -0.009156f, +0.003334f, -0.008870f, -0.002597f, -0.018762f, +0.003164f, +0.011419f, -0.005749f, + +0.010004f, +0.003259f, +0.003962f, -0.011928f, +0.008376f, -0.005603f, +0.001939f, +0.000955f, -0.003162f, -0.005288f, + +0.000175f, +0.004600f, +0.007712f, +0.003369f, +0.002295f, +0.003535f, +0.002156f, +0.000245f, -0.004492f, +0.004103f, + +0.003223f, +0.003670f, -0.002950f, -0.001503f, -0.000471f, -0.000012f, -0.000438f, +0.001097f, +0.000557f, -0.004073f, + -0.000700f, +0.000603f, +0.000973f, +0.000104f, -0.000904f, +0.000968f, -0.000792f, +0.000168f, +0.000612f, +0.000184f, + +0.000763f, +0.000592f, -0.000081f, -0.001325f, +0.000361f, +0.000153f, -0.000568f, +0.001325f, +0.000008f, -0.000474f, + -0.000212f, +0.000274f, -0.000016f, +0.000393f, -0.000603f, -0.000638f, +0.000377f, -0.000311f, -0.000992f, +0.000020f, + -0.000010f, -0.000385f, +0.000295f, -0.000615f, -0.000335f, +0.000405f, +0.000148f, +0.000077f, +0.000543f, -0.000618f, + -0.000154f, -0.000262f, +0.000312f, +0.000311f, +0.000073f, -0.000214f + }, + { + -0.002145f, +0.006040f, -0.000087f, -0.009818f, -0.005125f, -0.001877f, +0.001621f, -0.001386f, -0.001524f, -0.002748f, + -0.000681f, -0.003391f, +0.021056f, +0.002722f, -0.005872f, -0.006373f, -0.009154f, +0.001159f, +0.011884f, -0.000788f, + -0.000567f, -0.012328f, +0.003880f, -0.012657f, -0.020312f, +0.008772f, +0.001241f, +0.000179f, -0.006462f, -0.000133f, + +0.003292f, -0.007025f, +0.002981f, +0.001347f, -0.005316f, +0.005371f, -0.001058f, +0.004532f, -0.001477f, -0.004287f, + +0.000346f, +0.004121f, +0.001591f, -0.000559f, -0.004146f, -0.000412f, +0.000310f, +0.000602f, +0.004442f, -0.001670f, + -0.001028f, -0.000018f, +0.000269f, -0.001061f, +0.000268f, +0.000196f, +0.003492f, +0.000288f, -0.001085f, -0.000559f, + +0.000774f, -0.000575f, +0.000389f, -0.001687f, -0.001622f, +0.000874f, +0.000465f, -0.000409f, -0.000434f, +0.000124f, + -0.000668f, -0.000406f, -0.000399f, -0.000276f, +0.001165f, +0.000478f, +0.000059f, -0.000345f, +0.000288f, +0.000199f, + -0.000158f, +0.000338f, -0.000215f, -0.000681f, -0.000338f, +0.000016f, +0.000347f, +0.000082f, +0.000216f, +0.000155f, + -0.000095f, -0.000036f, +0.000216f, +0.000048f, -0.000225f, +0.000131f + }, + { + -0.017931f, -0.133639f, -0.031316f, -0.000164f, +0.007766f, -0.002068f, +0.009774f, -0.018719f, +0.003009f, -0.003668f, + +0.003047f, +0.001188f, -0.014666f, -0.034599f, +0.015463f, -0.012433f, -0.013931f, -0.002949f, +0.011768f, -0.003132f, + +0.008034f, -0.004953f, +0.005348f, -0.000434f, +0.002408f, -0.003780f, -0.002785f, -0.002781f, -0.005575f, +0.000720f, + -0.003366f, +0.006124f, -0.003953f, +0.003366f, +0.002187f, -0.004671f, +0.002136f, +0.000020f, -0.004253f, +0.000243f, + -0.000151f, -0.001562f, +0.003726f, +0.005330f, -0.003328f, +0.000649f, +0.003124f, +0.001362f, -0.002662f, -0.001906f, + +0.001923f, -0.001356f, +0.001849f, +0.002960f, -0.000617f, +0.000173f, -0.001765f, +0.003660f, +0.000643f, -0.003193f, + -0.001276f, -0.000446f, +0.000433f, +0.002136f, -0.000020f, +0.001336f, -0.000247f, -0.000877f, -0.001559f, -0.001095f, + +0.000353f, -0.001554f, +0.000011f, +0.000519f, -0.000449f, +0.000113f, +0.000090f, +0.000717f, -0.000893f, -0.000642f, + +0.000259f, +0.000520f, -0.000521f, -0.000157f, +0.000384f, +0.001137f, +0.000016f, +0.000536f, +0.000188f, -0.000118f, + +0.000020f, +0.000059f, +0.000291f, +0.000399f, +0.000013f, +0.000157f + }, + { + +0.001561f, -0.011143f, -0.001273f, +0.003758f, -0.000429f, +0.002291f, +0.005099f, -0.002763f, -0.004450f, -0.000880f, + +0.001490f, +0.005217f, -0.003233f, -0.082635f, +0.030048f, -0.016539f, -0.009484f, -0.013562f, +0.007524f, +0.014482f, + +0.001459f, +0.004427f, -0.007117f, +0.003917f, +0.007319f, -0.001195f, +0.008630f, -0.007752f, -0.013728f, +0.009729f, + -0.003307f, +0.001448f, -0.007282f, -0.003872f, +0.000030f, +0.009137f, +0.004621f, -0.001333f, +0.000029f, +0.004260f, + -0.001620f, -0.000335f, -0.000450f, -0.002612f, +0.002907f, -0.000472f, -0.000387f, -0.001086f, +0.002283f, -0.000363f, + -0.000797f, -0.002040f, -0.000437f, +0.000029f, +0.000630f, +0.000361f, -0.000325f, +0.000769f, +0.000253f, -0.000361f, + +0.001644f, +0.000230f, -0.000328f, +0.000298f, +0.000147f, -0.001193f, -0.001577f, +0.000155f, +0.000024f, -0.001123f, + -0.000814f, -0.000256f, -0.000131f, +0.000213f, -0.000084f, +0.000108f, +0.000152f, -0.000347f, +0.000608f, +0.000507f, + +0.000568f, +0.000532f, +0.000387f, -0.000312f, -0.000329f, +0.000051f, -0.000022f, +0.000222f, +0.000661f, -0.000116f, + +0.000231f, +0.000109f, +0.000316f, -0.000068f, +0.000153f, +0.000056f + }, + { + -0.032649f, -0.095281f, -0.001887f, -0.008593f, +0.004775f, -0.008427f, -0.010824f, +0.011134f, -0.000985f, +0.010387f, + +0.000622f, +0.001383f, -0.013808f, -0.003778f, +0.082778f, -0.019173f, -0.010482f, -0.015793f, +0.002157f, -0.000718f, + -0.000234f, -0.003300f, -0.002808f, +0.001459f, +0.002332f, +0.004319f, +0.004830f, -0.017418f, -0.001173f, -0.001113f, + -0.006585f, +0.004807f, -0.001698f, +0.002457f, +0.001197f, +0.006702f, -0.000807f, +0.002094f, +0.001724f, -0.001826f, + +0.004756f, +0.003418f, +0.003061f, -0.004429f, +0.001738f, +0.001442f, +0.000618f, -0.001414f, -0.001284f, -0.000497f, + +0.000627f, -0.001222f, -0.001258f, -0.001582f, +0.000632f, -0.001510f, -0.001549f, -0.000061f, -0.000389f, -0.000476f, + +0.001134f, -0.000877f, -0.002120f, -0.001256f, +0.000632f, -0.001233f, +0.000005f, -0.000645f, +0.002318f, -0.000149f, + +0.000791f, +0.000827f, -0.000791f, -0.000219f, -0.000018f, +0.000344f, +0.000636f, -0.000553f, +0.000821f, -0.000420f, + +0.000107f, -0.000741f, +0.000849f, -0.000074f, -0.000595f, -0.000291f, +0.000222f, -0.000149f, +0.000280f, +0.000147f, + +0.000254f, -0.000111f, -0.000092f, -0.000101f, -0.000063f, +0.000208f + } + }, + { + { + +0.000593f, +0.084231f, -0.053294f, +0.001581f, +0.007484f, -0.004204f, -0.000262f, +0.000044f, -0.000071f, -0.003392f, + -0.003616f, +0.000020f, +0.013649f, +0.008505f, -0.022297f, -0.002198f, -0.000616f, -0.005944f, -0.019357f, -0.010886f, + +0.003611f, -0.015454f, -0.000719f, +0.013053f, +0.007265f, +0.006417f, -0.007186f, -0.012964f, -0.003484f, -0.015635f, + +0.008480f, -0.008444f, -0.006836f, -0.005433f, +0.000620f, -0.002019f, -0.001303f, +0.004109f, +0.002972f, +0.001043f, + -0.000780f, -0.001254f, -0.000567f, -0.000494f, -0.003751f, +0.000704f, +0.002248f, +0.000388f, -0.003691f, +0.001515f, + -0.000378f, -0.000906f, -0.000028f, -0.000076f, -0.002943f, +0.000659f, -0.000535f, +0.001795f, -0.001099f, -0.001990f, + +0.001572f, -0.001350f, +0.001067f, +0.000185f, -0.001913f, -0.000047f, +0.000451f, -0.000116f, +0.000764f, +0.001200f, + +0.000289f, -0.000191f, +0.000225f, +0.000781f, -0.000055f, +0.000208f, +0.000823f, -0.000769f, -0.000174f, -0.000015f, + +0.000036f, +0.000502f, +0.000085f, -0.000446f, +0.000466f, +0.000105f, +0.000353f, -0.000329f, +0.000279f, +0.000221f, + -0.000625f, -0.000394f, -0.000328f, -0.000025f, -0.000084f, +0.000078f + }, + { + +0.026883f, -0.034828f, -0.089426f, +0.014128f, +0.000231f, +0.005435f, +0.002931f, -0.000456f, +0.008574f, -0.001517f, + +0.000505f, -0.012381f, -0.001195f, -0.001077f, -0.012698f, -0.002994f, +0.017595f, +0.004403f, -0.028982f, +0.006921f, + -0.005716f, +0.002127f, +0.006807f, +0.000800f, +0.000366f, -0.007945f, +0.004665f, +0.001729f, -0.002407f, -0.001692f, + +0.000718f, -0.000767f, -0.000316f, -0.004788f, +0.003656f, -0.000952f, +0.001673f, +0.004858f, +0.004527f, +0.000552f, + +0.001298f, +0.005444f, -0.000535f, +0.003727f, +0.003995f, -0.000746f, +0.000410f, -0.001280f, +0.002158f, -0.000468f, + -0.002857f, -0.000152f, +0.000122f, +0.000219f, +0.001213f, -0.001205f, +0.000922f, -0.001473f, -0.001044f, +0.000003f, + -0.000599f, -0.000032f, -0.000100f, +0.000685f, -0.000668f, -0.000752f, +0.000094f, -0.000754f, -0.000038f, -0.001039f, + -0.000004f, -0.001209f, -0.000092f, +0.000054f, +0.000309f, +0.000400f, +0.000603f, -0.000327f, -0.000369f, -0.000430f, + +0.000965f, -0.000247f, +0.000505f, +0.000066f, +0.000241f, +0.000331f, +0.000013f, -0.000102f, -0.000008f, -0.000256f, + -0.000305f, -0.000319f, -0.000196f, +0.000316f, -0.000053f, +0.000117f + }, + { + -0.010615f, -0.091554f, +0.062404f, +0.006429f, -0.007969f, -0.011554f, -0.005330f, -0.000876f, +0.003278f, +0.005060f, + -0.007766f, -0.001842f, -0.016706f, +0.004418f, +0.017004f, -0.004281f, +0.000738f, +0.002716f, -0.014746f, -0.017332f, + -0.010885f, -0.012466f, -0.000244f, +0.002550f, +0.001636f, -0.003270f, -0.000339f, -0.011136f, +0.001474f, +0.007772f, + +0.003884f, +0.001613f, -0.000094f, +0.000681f, +0.006651f, +0.007753f, -0.006134f, +0.001589f, +0.008681f, -0.001526f, + +0.004055f, -0.003201f, +0.002651f, +0.004384f, -0.001264f, -0.004968f, +0.000298f, -0.002580f, +0.002149f, +0.002847f, + -0.001568f, -0.002767f, -0.002846f, -0.002313f, +0.002008f, +0.000890f, -0.004827f, -0.001003f, -0.001242f, -0.000936f, + +0.001212f, +0.000161f, +0.000382f, -0.001378f, -0.000822f, +0.002014f, -0.001454f, +0.000614f, +0.000969f, +0.000097f, + +0.001657f, -0.000031f, +0.000052f, +0.000998f, -0.000684f, -0.001263f, +0.000135f, -0.000567f, -0.000764f, +0.000509f, + +0.000479f, -0.000522f, -0.000154f, +0.000187f, +0.000686f, -0.000139f, +0.000012f, -0.000062f, +0.000463f, +0.000344f, + +0.000113f, -0.000179f, -0.000036f, -0.000128f, +0.000119f, +0.000059f + }, + { + +0.002509f, +0.010150f, -0.010989f, -0.002891f, -0.000552f, +0.000137f, -0.002089f, -0.000992f, +0.000008f, +0.000852f, + -0.001187f, -0.000416f, +0.002968f, -0.004749f, +0.021559f, +0.011873f, +0.004243f, -0.022639f, -0.024782f, +0.002144f, + -0.004213f, -0.014451f, -0.013214f, -0.008720f, -0.007790f, +0.004699f, +0.003954f, +0.003687f, -0.002473f, -0.003090f, + +0.000494f, -0.007797f, -0.000038f, -0.001592f, -0.000564f, +0.001662f, -0.001525f, +0.005352f, -0.003980f, -0.000215f, + -0.000597f, +0.001750f, -0.003028f, +0.001507f, +0.002837f, +0.000078f, -0.003531f, +0.001280f, +0.003666f, +0.000941f, + +0.001880f, +0.000171f, -0.002271f, -0.000657f, -0.001122f, +0.000243f, +0.000274f, -0.000624f, -0.001129f, +0.002017f, + +0.000107f, +0.000185f, +0.000093f, +0.000066f, +0.000338f, +0.000048f, +0.000928f, -0.000501f, -0.000350f, -0.000459f, + +0.000188f, -0.001453f, +0.000653f, +0.000011f, -0.000780f, -0.000117f, -0.000535f, -0.000007f, -0.000257f, -0.000267f, + -0.000598f, -0.000448f, +0.000754f, +0.000073f, +0.000391f, -0.000007f, -0.000122f, +0.000220f, -0.000357f, +0.000278f, + -0.000048f, +0.000103f, +0.000118f, +0.000085f, +0.000163f, -0.000077f + }, + { + -0.059984f, +0.204113f, -0.012400f, +0.011302f, +0.013158f, -0.001521f, +0.001310f, -0.003157f, -0.005260f, +0.009593f, + -0.006612f, -0.003449f, +0.002197f, +0.006711f, +0.029124f, -0.000296f, -0.000007f, +0.008095f, -0.004592f, -0.021672f, + +0.001062f, -0.004293f, -0.003176f, +0.000123f, +0.009967f, -0.007019f, +0.000663f, -0.007448f, +0.010820f, -0.001108f, + +0.001651f, -0.000884f, -0.007909f, -0.004991f, -0.001502f, +0.000869f, +0.017605f, -0.007822f, +0.003052f, -0.001516f, + +0.003674f, +0.001878f, -0.004422f, -0.000239f, -0.000618f, -0.001164f, -0.003856f, +0.000294f, -0.001348f, -0.000571f, + +0.001845f, +0.001166f, +0.001911f, +0.000552f, +0.001295f, +0.000260f, -0.000130f, -0.002883f, -0.000712f, +0.000604f, + -0.000943f, +0.000032f, -0.001564f, -0.000291f, +0.000669f, -0.001145f, +0.000766f, -0.000090f, -0.000055f, -0.001063f, + -0.001032f, +0.000604f, -0.000451f, -0.000574f, -0.000215f, +0.000387f, +0.000699f, +0.000831f, -0.000462f, +0.000330f, + -0.000210f, +0.000542f, +0.000599f, +0.000230f, -0.000220f, -0.000238f, -0.000222f, +0.000248f, -0.000186f, +0.000176f, + -0.000227f, +0.000298f, -0.000206f, +0.000326f, -0.000434f, +0.000333f + }, + { + +0.000234f, -0.008162f, -0.006993f, +0.003569f, +0.002078f, +0.000477f, +0.000474f, +0.000923f, -0.001771f, +0.001473f, + -0.003111f, -0.000675f, -0.003879f, -0.004859f, +0.016171f, -0.002242f, -0.001989f, -0.010848f, -0.004897f, -0.050706f, + -0.006104f, +0.010052f, -0.003985f, -0.015313f, +0.008083f, -0.013691f, -0.006647f, +0.005506f, -0.005966f, +0.002937f, + -0.005805f, -0.003828f, +0.000835f, -0.001910f, +0.006735f, -0.000217f, +0.000978f, +0.000652f, -0.002359f, +0.001291f, + +0.002801f, -0.003242f, +0.000926f, -0.001213f, -0.001294f, -0.000213f, +0.000476f, -0.001656f, -0.001357f, +0.001090f, + +0.001133f, +0.002427f, +0.000896f, -0.001398f, +0.000635f, -0.002283f, +0.000811f, +0.000281f, -0.000467f, +0.000474f, + +0.000681f, -0.001051f, -0.000879f, +0.001448f, -0.000656f, +0.001553f, +0.000036f, +0.000615f, +0.000472f, +0.000728f, + -0.000288f, +0.000543f, -0.000448f, -0.000034f, +0.000097f, +0.000114f, -0.001248f, -0.000107f, +0.000865f, +0.000038f, + -0.000473f, +0.000277f, +0.000478f, -0.000288f, -0.000497f, -0.000219f, +0.000197f, -0.000189f, +0.000715f, -0.000363f, + +0.000386f, -0.000098f, +0.000230f, +0.000242f, -0.000202f, -0.000346f + }, + { + -0.008024f, +0.642203f, -0.020992f, +0.032725f, +0.004047f, -0.002292f, +0.000103f, -0.000865f, -0.004480f, +0.006810f, + +0.007947f, +0.000581f, -0.006218f, +0.000009f, +0.006546f, -0.014948f, +0.001243f, -0.000948f, -0.002535f, +0.000396f, + +0.001413f, +0.001455f, -0.003501f, -0.005658f, -0.003775f, -0.002560f, -0.003794f, +0.003899f, +0.002980f, +0.000266f, + +0.004447f, -0.003586f, -0.002492f, -0.006793f, -0.003538f, -0.004230f, -0.004110f, +0.003510f, -0.000966f, +0.000438f, + -0.000263f, +0.001944f, +0.000129f, -0.000366f, +0.002325f, -0.005307f, +0.004085f, +0.000389f, +0.003356f, +0.001544f, + -0.002551f, +0.002424f, -0.000863f, +0.000371f, -0.001926f, +0.000989f, -0.000814f, -0.000973f, +0.001231f, -0.001464f, + +0.000995f, +0.000713f, -0.000365f, -0.000273f, -0.000259f, -0.001561f, +0.000248f, -0.000164f, +0.001027f, -0.000425f, + -0.000412f, +0.000807f, +0.000017f, -0.000155f, +0.000651f, +0.000134f, +0.000253f, +0.000595f, -0.000208f, +0.000142f, + +0.000914f, -0.000459f, -0.000630f, -0.000070f, +0.000180f, +0.000066f, -0.000009f, +0.000181f, +0.000398f, +0.000403f, + -0.000166f, +0.000555f, +0.000238f, +0.000318f, +0.000141f, -0.000028f + }, + { + +0.001054f, -0.013126f, +0.016849f, +0.001318f, +0.001036f, -0.000545f, -0.001942f, -0.001854f, -0.002852f, -0.000525f, + -0.001324f, +0.000958f, +0.003904f, +0.004682f, +0.058722f, +0.021525f, +0.005662f, +0.004556f, +0.013449f, -0.012623f, + +0.014984f, +0.021685f, +0.000240f, +0.004919f, -0.020115f, -0.001254f, -0.003306f, -0.006154f, -0.003594f, -0.011510f, + +0.001743f, -0.002345f, -0.007781f, +0.003527f, -0.000119f, -0.002776f, -0.005102f, -0.000229f, +0.003443f, +0.001635f, + +0.001421f, -0.001674f, +0.001251f, +0.001570f, +0.000842f, +0.000497f, -0.000257f, +0.000012f, -0.000881f, +0.001414f, + +0.001429f, -0.000937f, +0.002790f, -0.000503f, -0.000944f, -0.001745f, -0.002870f, +0.000397f, -0.000884f, -0.001452f, + +0.002311f, +0.000375f, +0.001249f, -0.000846f, +0.000182f, +0.000692f, -0.000129f, +0.000340f, -0.000351f, +0.000855f, + -0.000219f, -0.001669f, +0.000031f, -0.000195f, +0.000128f, +0.000332f, +0.000656f, -0.001173f, -0.000254f, +0.000114f, + -0.000960f, +0.000430f, -0.000022f, +0.000190f, -0.000092f, +0.000155f, +0.000149f, -0.000277f, -0.000484f, -0.000127f, + +0.000338f, -0.000140f, -0.000170f, -0.000050f, -0.000274f, -0.000387f + }, + { + -0.075424f, -0.242926f, +0.042822f, +0.022396f, -0.003771f, +0.001100f, +0.000014f, +0.001938f, +0.000552f, -0.001004f, + +0.000776f, +0.004003f, +0.001355f, -0.005036f, -0.011066f, -0.002798f, +0.003770f, -0.003855f, +0.005145f, +0.001278f, + -0.001826f, -0.000936f, +0.007375f, +0.000566f, -0.001241f, -0.002734f, -0.000490f, -0.001962f, -0.002678f, -0.003035f, + +0.004396f, -0.000846f, -0.006431f, +0.001107f, -0.001924f, +0.002795f, +0.000138f, +0.000313f, -0.000064f, +0.004685f, + +0.000162f, -0.002142f, +0.002121f, +0.001687f, -0.001838f, -0.000283f, +0.000093f, +0.000049f, +0.000934f, -0.000101f, + -0.001193f, -0.002514f, -0.001819f, +0.000253f, +0.003457f, +0.000328f, +0.000356f, +0.000204f, +0.001824f, +0.000362f, + +0.001003f, -0.000274f, +0.001314f, +0.001127f, +0.000694f, +0.001375f, -0.000671f, -0.000028f, +0.000600f, +0.000247f, + +0.000026f, +0.000131f, +0.000192f, +0.000128f, +0.000487f, -0.000327f, +0.000979f, +0.000954f, -0.000131f, +0.000041f, + -0.000006f, +0.000246f, -0.000807f, -0.000222f, -0.000251f, +0.000196f, +0.000212f, -0.000142f, -0.000021f, +0.000042f, + -0.000022f, +0.000191f, -0.000038f, -0.000212f, -0.000120f, +0.000105f + }, + { + +0.002567f, -0.004071f, -0.014011f, -0.001073f, -0.000770f, -0.000590f, -0.011876f, +0.005905f, +0.002639f, -0.003739f, + -0.010829f, -0.005055f, +0.001017f, -0.016653f, -0.010971f, -0.010559f, +0.011401f, -0.001513f, +0.007623f, +0.020755f, + +0.003393f, -0.002410f, +0.008982f, -0.011446f, +0.001406f, -0.004369f, -0.000532f, -0.006301f, +0.007008f, -0.000433f, + -0.001349f, +0.002647f, +0.003808f, -0.003141f, -0.005314f, +0.001365f, -0.001110f, -0.005695f, -0.000687f, -0.001270f, + -0.002132f, +0.000204f, +0.001489f, +0.003404f, +0.002347f, +0.000289f, -0.001385f, -0.001757f, +0.000308f, -0.003418f, + -0.000910f, +0.000117f, -0.001727f, +0.000397f, -0.001050f, -0.001439f, -0.003242f, -0.001729f, -0.001626f, -0.000128f, + +0.000612f, +0.001014f, +0.001046f, -0.000982f, +0.001374f, +0.000465f, -0.000501f, +0.000343f, -0.000845f, +0.000762f, + -0.000555f, +0.000002f, +0.000706f, +0.000636f, +0.000668f, +0.000715f, +0.000130f, -0.000359f, +0.000578f, +0.000996f, + -0.000473f, -0.000276f, +0.000561f, +0.000383f, +0.000260f, -0.000163f, +0.000383f, +0.000395f, +0.000322f, -0.000146f, + +0.000040f, -0.000198f, -0.000101f, +0.000215f, -0.000079f, +0.000043f + }, + { + -0.028175f, -0.134172f, +0.034378f, -0.001967f, -0.006443f, -0.010941f, -0.002826f, +0.001689f, -0.012139f, +0.004470f, + +0.011134f, -0.011091f, -0.004929f, +0.001464f, -0.015516f, +0.003677f, -0.013003f, +0.003442f, +0.005800f, -0.003473f, + +0.007781f, +0.002291f, +0.000656f, -0.004065f, -0.003211f, +0.002244f, -0.001478f, +0.006548f, -0.000860f, -0.005789f, + -0.005440f, -0.001696f, +0.014270f, +0.007215f, -0.000597f, +0.003269f, +0.005710f, +0.000411f, -0.004178f, +0.003827f, + +0.002489f, -0.000845f, -0.001800f, -0.000162f, -0.002136f, -0.000026f, +0.000600f, -0.000589f, +0.001167f, -0.003363f, + -0.001287f, +0.000618f, +0.001724f, -0.001086f, +0.000669f, -0.000217f, +0.001882f, -0.001655f, +0.001493f, -0.000537f, + +0.000682f, +0.000934f, -0.000380f, +0.000115f, -0.000890f, +0.000401f, -0.000366f, +0.001045f, +0.000129f, -0.000535f, + -0.000344f, +0.000167f, +0.000178f, +0.000354f, -0.000665f, -0.000332f, -0.000419f, -0.000220f, -0.000103f, -0.000600f, + +0.000170f, -0.000571f, -0.000187f, -0.000277f, +0.000199f, +0.000031f, +0.000195f, +0.000376f, -0.000152f, -0.000278f, + -0.000358f, +0.000134f, +0.000310f, +0.000130f, +0.000015f, -0.000164f + }, + { + +0.001824f, +0.020132f, -0.020902f, -0.007801f, +0.000270f, -0.001723f, -0.000754f, +0.002884f, -0.004088f, -0.001350f, + -0.001322f, -0.006595f, -0.005515f, +0.043773f, -0.005020f, +0.003941f, -0.010496f, -0.001499f, +0.004127f, +0.010654f, + -0.020187f, +0.005154f, -0.001990f, -0.009749f, -0.008830f, -0.005417f, +0.009779f, -0.007426f, -0.000046f, -0.004495f, + +0.001448f, -0.002959f, +0.005791f, -0.000748f, -0.000778f, +0.001360f, -0.001000f, +0.001400f, +0.000804f, -0.004211f, + -0.000908f, +0.002374f, +0.002280f, +0.000419f, -0.003519f, -0.000718f, -0.000870f, +0.003233f, +0.003237f, -0.000520f, + -0.001267f, +0.000755f, -0.000129f, -0.002339f, +0.000445f, +0.000725f, +0.002257f, +0.001695f, +0.001342f, +0.000125f, + +0.000730f, -0.002164f, -0.000054f, -0.000839f, -0.001319f, +0.000271f, +0.000859f, -0.000325f, +0.000054f, -0.000589f, + +0.000063f, -0.000432f, -0.001143f, +0.000156f, +0.000706f, -0.000028f, +0.000292f, -0.000396f, +0.000229f, +0.000226f, + -0.000015f, -0.000302f, -0.000203f, -0.000293f, +0.000025f, -0.000014f, +0.000109f, +0.000275f, +0.000325f, +0.000122f, + -0.000078f, +0.000027f, +0.000228f, -0.000185f, +0.000033f, -0.000095f + }, + { + -0.005845f, -0.148771f, -0.021341f, -0.015773f, +0.019185f, -0.005678f, -0.008865f, -0.007560f, +0.000673f, +0.000077f, + -0.010134f, +0.006707f, -0.013035f, -0.037889f, +0.012761f, -0.013231f, -0.002343f, -0.003379f, +0.004366f, -0.000229f, + -0.000889f, +0.003633f, +0.006029f, +0.003300f, -0.001585f, -0.005777f, -0.004860f, -0.002267f, -0.003384f, -0.001602f, + +0.002024f, -0.000005f, -0.005186f, +0.000951f, +0.003427f, -0.005480f, +0.005372f, -0.000716f, -0.002443f, -0.002652f, + +0.000616f, +0.004402f, +0.001903f, +0.002569f, +0.001223f, +0.003329f, +0.002549f, -0.001405f, -0.000254f, +0.000022f, + +0.001003f, -0.001899f, -0.000480f, +0.002321f, -0.000165f, -0.000661f, -0.000190f, +0.002416f, -0.000524f, -0.002645f, + -0.002420f, +0.000922f, +0.000309f, +0.001813f, +0.000502f, +0.001861f, -0.000645f, -0.001012f, -0.001407f, -0.000811f, + -0.000014f, -0.000527f, -0.001148f, -0.000614f, +0.000593f, -0.000165f, -0.000316f, +0.000971f, -0.001181f, -0.000319f, + +0.000050f, +0.000195f, -0.000545f, +0.000172f, +0.000230f, +0.000722f, +0.000647f, +0.000440f, +0.000505f, -0.000013f, + -0.000096f, -0.000029f, +0.000179f, +0.000170f, +0.000138f, +0.000005f + }, + { + -0.000784f, -0.002350f, -0.001455f, +0.000129f, -0.000885f, +0.000799f, +0.003285f, -0.002654f, -0.004645f, +0.000025f, + -0.000316f, +0.001702f, -0.004388f, +0.009197f, -0.080829f, -0.025914f, -0.007539f, -0.003520f, -0.000841f, +0.014910f, + +0.006084f, -0.004262f, -0.005613f, +0.010508f, -0.001344f, -0.000260f, -0.001492f, -0.002565f, -0.002777f, +0.002736f, + -0.000166f, -0.007628f, -0.001749f, -0.005372f, +0.000383f, +0.012422f, +0.001660f, -0.000715f, +0.002502f, -0.002489f, + +0.004948f, +0.000725f, -0.004519f, +0.000938f, +0.001152f, -0.002587f, +0.000944f, -0.001196f, +0.004446f, -0.000856f, + -0.002286f, -0.001503f, -0.000805f, +0.001094f, -0.001993f, +0.002415f, -0.000078f, -0.000492f, +0.001139f, -0.000176f, + +0.000611f, +0.000012f, +0.000474f, -0.001241f, +0.000751f, -0.001103f, -0.001263f, +0.000341f, +0.000793f, -0.001002f, + -0.001341f, -0.000478f, +0.000357f, -0.000724f, +0.000142f, +0.000068f, +0.000233f, -0.000095f, +0.000527f, +0.000647f, + +0.000323f, +0.000704f, -0.000148f, +0.000110f, -0.000420f, -0.000233f, +0.000437f, +0.000174f, +0.000640f, -0.000053f, + +0.000159f, +0.000208f, +0.000132f, +0.000053f, +0.000054f, +0.000015f + }, + { + +0.014671f, -0.143561f, -0.018234f, -0.011926f, +0.006329f, -0.005994f, -0.014314f, +0.005019f, +0.002960f, +0.010086f, + +0.003362f, -0.010671f, -0.002680f, +0.032153f, +0.037607f, -0.016831f, -0.018322f, -0.013234f, +0.000608f, -0.001601f, + +0.002135f, -0.008221f, -0.004466f, +0.000541f, -0.001385f, +0.006772f, +0.001064f, -0.004139f, -0.013932f, +0.004111f, + -0.002566f, +0.002967f, +0.001168f, -0.004729f, +0.005324f, +0.000408f, +0.003965f, +0.004116f, -0.001698f, +0.001133f, + +0.001353f, +0.006408f, +0.000087f, -0.001099f, +0.000132f, -0.000340f, +0.000772f, +0.001517f, -0.002806f, -0.000553f, + -0.000406f, +0.001129f, -0.001917f, -0.002469f, +0.001276f, -0.001415f, +0.000148f, -0.001957f, -0.001024f, +0.001486f, + -0.000124f, -0.000144f, -0.001022f, -0.000915f, -0.000633f, -0.001513f, +0.001329f, +0.000448f, +0.000116f, +0.000733f, + +0.000589f, +0.000114f, +0.000504f, -0.000779f, -0.000130f, +0.000664f, +0.000051f, +0.000256f, +0.000110f, -0.000010f, + -0.000643f, -0.000034f, +0.000028f, +0.000364f, -0.000299f, -0.000376f, -0.000110f, -0.000257f, +0.000277f, +0.000194f, + +0.000107f, +0.000057f, +0.000049f, -0.000348f, -0.000209f, +0.000252f + } + }, + { + { + -0.002922f, +0.130487f, -0.023142f, -0.014260f, +0.001688f, -0.000628f, +0.000722f, +0.000599f, -0.000057f, +0.000014f, + -0.000423f, -0.007433f, +0.004892f, -0.007524f, -0.029235f, +0.002683f, +0.008845f, +0.006597f, -0.012258f, -0.022835f, + +0.002571f, -0.005102f, +0.002470f, +0.006105f, -0.000546f, -0.000325f, -0.005843f, +0.000647f, +0.006166f, -0.009669f, + +0.007102f, -0.001139f, -0.001717f, -0.009223f, +0.001814f, -0.000212f, +0.000927f, -0.000546f, -0.003982f, +0.003457f, + -0.001127f, -0.003299f, +0.000261f, +0.000388f, -0.002589f, -0.000540f, -0.000709f, +0.000733f, -0.001853f, +0.001706f, + +0.000023f, -0.000948f, -0.000505f, +0.000960f, -0.001940f, +0.000533f, -0.001046f, -0.000209f, -0.000340f, +0.001357f, + +0.001621f, -0.002199f, +0.000682f, +0.000413f, -0.000775f, +0.000045f, +0.000377f, +0.000554f, +0.000745f, +0.000123f, + -0.000531f, -0.000037f, +0.000236f, +0.000663f, -0.000175f, -0.000237f, +0.000538f, +0.000077f, +0.000069f, -0.000461f, + -0.000324f, +0.000331f, -0.000030f, -0.000519f, -0.000055f, -0.000136f, +0.000366f, -0.000144f, +0.000462f, +0.000181f, + -0.000145f, -0.000047f, -0.000339f, +0.000045f, +0.000177f, +0.000197f + }, + { + -0.031646f, +0.059881f, +0.029214f, +0.002544f, -0.001595f, +0.005815f, -0.003208f, -0.005874f, +0.006700f, -0.000374f, + +0.010683f, +0.006595f, +0.002699f, -0.002882f, -0.011787f, -0.004128f, +0.013606f, +0.005089f, -0.022350f, +0.012861f, + -0.002822f, -0.003019f, +0.001000f, +0.001892f, +0.006983f, -0.005511f, -0.001267f, +0.000598f, +0.000065f, +0.001934f, + +0.000671f, +0.000413f, +0.003140f, -0.003234f, +0.007279f, -0.002012f, +0.000316f, +0.001972f, +0.001861f, -0.000360f, + +0.000057f, +0.001379f, -0.001058f, +0.003318f, +0.000666f, -0.004429f, -0.000798f, -0.002091f, +0.002277f, -0.000436f, + -0.000820f, +0.003634f, +0.000973f, -0.000010f, +0.001053f, -0.002126f, -0.000098f, -0.001603f, +0.000584f, +0.001253f, + +0.000318f, -0.000638f, -0.000902f, +0.000311f, -0.000162f, +0.000444f, +0.000286f, -0.001045f, +0.000419f, -0.000462f, + +0.000594f, -0.000663f, -0.000049f, -0.000184f, +0.000063f, +0.000273f, +0.000776f, +0.000068f, -0.000096f, +0.000043f, + +0.000580f, -0.000509f, +0.000514f, +0.000015f, +0.000163f, -0.000248f, +0.000360f, +0.000247f, +0.000445f, -0.000080f, + -0.000261f, -0.000157f, +0.000012f, +0.000071f, -0.000121f, +0.000208f + }, + { + +0.012174f, -0.227355f, -0.033757f, +0.030663f, -0.002102f, -0.002750f, -0.001268f, -0.002764f, +0.000176f, -0.000578f, + -0.008196f, +0.008632f, -0.001088f, +0.010728f, +0.011504f, -0.001200f, +0.007706f, +0.008469f, +0.001120f, +0.000638f, + -0.001498f, -0.006073f, +0.000327f, -0.002706f, +0.000336f, -0.001187f, +0.005883f, -0.002844f, +0.009100f, +0.004695f, + -0.000767f, -0.003003f, -0.002294f, -0.004190f, -0.000772f, +0.002387f, -0.004218f, -0.001809f, +0.001900f, -0.001064f, + +0.006506f, -0.001489f, +0.000459f, +0.001387f, +0.000533f, -0.001319f, +0.002029f, -0.002764f, +0.002052f, +0.001448f, + -0.001221f, -0.000299f, +0.001670f, -0.001830f, -0.001409f, +0.000220f, -0.002580f, +0.000450f, +0.000436f, -0.000319f, + -0.000524f, +0.000131f, +0.000879f, -0.000346f, -0.000290f, +0.002024f, -0.001288f, +0.000216f, -0.000089f, -0.001095f, + +0.000847f, +0.000634f, +0.000321f, +0.000769f, -0.000377f, -0.000331f, +0.000811f, -0.000003f, -0.000662f, +0.000556f, + +0.000693f, -0.000533f, +0.000259f, +0.000051f, -0.000135f, -0.000435f, +0.000225f, -0.000155f, +0.000359f, +0.000095f, + -0.000101f, -0.000197f, -0.000034f, -0.000311f, +0.000036f, -0.000018f + }, + { + -0.003046f, +0.023424f, +0.006049f, +0.000820f, +0.000857f, +0.000744f, -0.001034f, -0.000224f, +0.000040f, -0.001001f, + -0.002702f, +0.001881f, +0.006714f, -0.017054f, +0.003733f, +0.006570f, +0.006861f, -0.003173f, -0.006286f, +0.002538f, + -0.003676f, -0.000677f, +0.000815f, -0.001056f, -0.006024f, -0.002290f, -0.001218f, +0.002801f, +0.000185f, -0.002998f, + +0.004991f, -0.002230f, -0.000488f, -0.002534f, +0.002471f, +0.000679f, -0.003401f, +0.005049f, -0.001344f, +0.000927f, + +0.000762f, +0.001776f, -0.002583f, +0.001326f, +0.003155f, +0.001111f, -0.002805f, +0.000318f, +0.001747f, -0.000600f, + -0.001433f, -0.000104f, +0.001174f, +0.001347f, +0.000131f, -0.000385f, -0.000680f, +0.000915f, -0.000954f, +0.000554f, + -0.000178f, -0.000236f, -0.000412f, +0.000667f, -0.000223f, -0.001424f, +0.000524f, +0.000720f, -0.000113f, -0.000949f, + +0.000210f, -0.000792f, +0.000672f, -0.000115f, -0.000020f, +0.000602f, -0.000132f, +0.000226f, -0.000204f, +0.000439f, + -0.000081f, -0.000499f, +0.000318f, -0.000213f, +0.000259f, -0.000113f, +0.000115f, +0.000228f, -0.000462f, +0.000035f, + -0.000198f, +0.000086f, -0.000088f, -0.000138f, -0.000011f, -0.000059f + }, + { + +0.034355f, +0.222198f, -0.083685f, +0.000568f, -0.004145f, -0.000250f, +0.001020f, -0.000895f, -0.004958f, +0.002714f, + -0.000769f, -0.002715f, -0.004947f, +0.006918f, +0.027289f, -0.005453f, +0.000841f, -0.007114f, -0.012297f, -0.007547f, + +0.000424f, -0.003118f, +0.003310f, -0.006287f, +0.004265f, -0.010184f, +0.003689f, -0.005746f, +0.007118f, -0.001810f, + +0.001692f, +0.001309f, +0.001358f, -0.000912f, -0.002846f, -0.004560f, +0.013370f, -0.005100f, +0.003534f, -0.004131f, + +0.002121f, -0.000089f, -0.004027f, +0.000019f, +0.000513f, -0.000776f, -0.004390f, +0.000757f, +0.000889f, +0.002308f, + +0.001183f, -0.000260f, +0.001001f, -0.000613f, +0.000875f, +0.001191f, -0.000321f, -0.002577f, +0.000500f, +0.001312f, + -0.002011f, -0.000209f, -0.000546f, +0.000083f, +0.000948f, -0.000673f, +0.000460f, +0.000196f, +0.000780f, -0.000249f, + -0.000951f, -0.000018f, -0.000077f, +0.000373f, -0.000092f, -0.000080f, +0.000575f, -0.000013f, -0.000357f, +0.000779f, + -0.000031f, -0.000034f, +0.000158f, -0.000255f, -0.000158f, +0.000107f, +0.000059f, +0.000521f, -0.000251f, +0.000395f, + -0.000322f, +0.000278f, -0.000150f, +0.000296f, -0.000369f, +0.000221f + }, + { + +0.000175f, +0.000646f, -0.003743f, -0.001183f, -0.000343f, -0.000287f, +0.001046f, -0.000456f, -0.003171f, +0.002642f, + -0.002938f, +0.000862f, -0.004850f, -0.011357f, +0.016959f, +0.007901f, +0.002487f, -0.007428f, +0.007937f, -0.046563f, + -0.017059f, +0.002077f, -0.005191f, -0.020179f, +0.009577f, -0.002534f, -0.015398f, +0.000591f, +0.006017f, +0.008268f, + -0.003887f, -0.000703f, +0.008465f, -0.002496f, +0.001959f, -0.001199f, -0.002231f, -0.000407f, +0.001786f, +0.002992f, + +0.001898f, -0.003209f, +0.002634f, +0.000941f, -0.000552f, -0.000786f, +0.001114f, -0.000305f, -0.001518f, +0.000950f, + +0.000104f, +0.000300f, -0.000266f, -0.000650f, +0.001254f, -0.002713f, +0.000113f, +0.000033f, -0.000074f, +0.001187f, + +0.000358f, -0.000024f, +0.000203f, +0.000899f, -0.000734f, +0.001316f, -0.000581f, +0.000185f, +0.000190f, +0.000206f, + -0.000833f, -0.000228f, -0.000666f, +0.000018f, +0.000250f, +0.001323f, -0.000413f, -0.000623f, +0.000085f, -0.000494f, + -0.000101f, -0.000048f, +0.000199f, +0.000015f, -0.000175f, +0.000111f, +0.000646f, -0.000328f, +0.000496f, -0.000351f, + +0.000370f, +0.000108f, +0.000460f, +0.000035f, -0.000324f, -0.000225f + }, + { + -0.033504f, +0.631298f, +0.000748f, +0.023060f, -0.000408f, -0.000997f, -0.000923f, -0.000159f, -0.002945f, +0.005121f, + +0.003068f, -0.000055f, -0.004996f, +0.000167f, +0.003324f, -0.017020f, +0.003446f, -0.003003f, -0.006254f, +0.001519f, + +0.002645f, +0.003636f, -0.002818f, -0.004533f, +0.001940f, -0.001506f, -0.005736f, +0.001182f, +0.001488f, +0.001844f, + +0.002427f, -0.001006f, +0.002602f, -0.006514f, -0.004725f, -0.001409f, -0.001909f, +0.002068f, -0.001748f, -0.001643f, + -0.000863f, +0.002720f, -0.001899f, -0.001439f, +0.002575f, -0.003762f, +0.004399f, +0.000387f, -0.000254f, -0.002744f, + -0.002647f, +0.000283f, +0.000117f, +0.002264f, +0.000894f, +0.003227f, -0.001908f, -0.001771f, +0.001131f, -0.001322f, + +0.001097f, +0.000486f, -0.000831f, +0.000313f, +0.000856f, -0.000051f, +0.000148f, -0.001006f, +0.001024f, -0.000591f, + -0.000610f, +0.000827f, -0.000278f, -0.000870f, +0.000546f, +0.000215f, +0.000262f, +0.000562f, +0.000128f, +0.000164f, + +0.000073f, -0.000242f, -0.000070f, -0.000303f, -0.000059f, +0.000368f, +0.000251f, -0.000100f, +0.000088f, +0.000188f, + -0.000383f, +0.000117f, -0.000078f, +0.000127f, +0.000003f, +0.000026f + }, + { + +0.001357f, -0.017087f, +0.007909f, +0.000215f, +0.001308f, -0.000313f, -0.001022f, -0.000385f, +0.000071f, -0.000048f, + -0.001992f, +0.001611f, +0.003640f, -0.001774f, +0.041604f, +0.004209f, -0.011390f, -0.000129f, +0.010192f, -0.009359f, + +0.009298f, +0.013251f, -0.006414f, +0.001459f, -0.006830f, +0.008867f, +0.003256f, +0.006294f, +0.003626f, -0.010688f, + +0.005287f, +0.000840f, -0.005036f, +0.004164f, +0.001432f, -0.000059f, -0.003554f, +0.000688f, +0.001611f, -0.001092f, + +0.000415f, -0.000248f, -0.001051f, -0.001366f, -0.000912f, -0.001191f, +0.001285f, -0.000819f, +0.001673f, +0.002736f, + +0.000417f, -0.000792f, +0.002334f, +0.001186f, +0.000690f, +0.001015f, -0.000220f, -0.000164f, -0.001181f, -0.000905f, + +0.002338f, -0.000346f, +0.000042f, -0.000828f, -0.001220f, -0.000111f, +0.000667f, +0.000359f, -0.001102f, +0.000809f, + -0.000562f, -0.001371f, +0.000112f, -0.000190f, -0.000186f, -0.000675f, +0.000359f, -0.000610f, -0.000089f, +0.000307f, + -0.000973f, +0.000614f, -0.000268f, +0.000105f, +0.000379f, +0.000114f, -0.000110f, -0.000025f, +0.000101f, -0.000112f, + +0.000057f, -0.000115f, -0.000167f, -0.000045f, -0.000153f, -0.000254f + }, + { + +0.071576f, -0.176631f, -0.058883f, +0.031554f, -0.001408f, -0.001736f, -0.006872f, -0.001340f, +0.003349f, -0.000436f, + -0.000260f, +0.007609f, +0.003474f, +0.002627f, -0.005451f, +0.003069f, +0.006398f, -0.009301f, -0.004588f, -0.001097f, + +0.001230f, -0.001326f, +0.003050f, -0.003543f, -0.002597f, -0.001366f, +0.000275f, -0.002050f, +0.001170f, +0.000388f, + +0.001501f, +0.002441f, -0.000352f, +0.002697f, -0.001515f, +0.004658f, -0.001395f, +0.001508f, +0.000850f, +0.001673f, + -0.003718f, -0.003623f, -0.000949f, -0.000085f, -0.002260f, +0.001300f, +0.000823f, -0.001357f, -0.001122f, +0.000995f, + +0.000287f, -0.002074f, -0.000406f, -0.000292f, +0.001270f, -0.000891f, -0.000052f, -0.000117f, -0.000321f, -0.001375f, + +0.000134f, -0.000806f, -0.000109f, -0.000489f, -0.000609f, +0.000662f, -0.000151f, -0.000246f, +0.000306f, +0.000292f, + -0.000305f, -0.000379f, -0.000366f, -0.000685f, +0.000121f, -0.000622f, +0.000888f, +0.000114f, -0.000523f, -0.000098f, + +0.000015f, +0.000167f, -0.000624f, +0.000082f, -0.000212f, +0.000314f, +0.000387f, -0.000289f, -0.000044f, +0.000221f, + -0.000116f, +0.000102f, +0.000133f, +0.000159f, -0.000140f, -0.000120f + }, + { + -0.003190f, +0.029990f, +0.015313f, -0.010472f, +0.001804f, +0.004126f, -0.018218f, -0.000519f, +0.000184f, -0.000474f, + -0.003123f, -0.004432f, +0.004827f, -0.000887f, -0.006149f, -0.007032f, +0.018901f, +0.003958f, +0.007203f, +0.004256f, + -0.003281f, +0.000140f, +0.008201f, -0.011681f, +0.004594f, -0.000045f, +0.003782f, -0.007715f, +0.004628f, +0.001110f, + -0.004748f, -0.000215f, +0.004335f, -0.000734f, -0.000958f, +0.001257f, +0.003970f, +0.000738f, +0.001588f, +0.001324f, + +0.001836f, +0.003811f, +0.001897f, +0.000636f, +0.000438f, -0.000412f, +0.000713f, -0.001082f, +0.001989f, -0.001086f, + -0.001494f, +0.000505f, +0.000147f, +0.002212f, -0.000452f, +0.001775f, -0.000118f, +0.000209f, +0.000217f, +0.001371f, + +0.000600f, -0.000173f, +0.000463f, -0.000335f, +0.000483f, -0.000614f, -0.000536f, +0.000307f, -0.000745f, +0.000276f, + -0.000220f, +0.000052f, -0.000418f, +0.000273f, -0.000019f, +0.000060f, +0.000582f, -0.000236f, -0.000159f, +0.000708f, + -0.000088f, -0.000378f, +0.000440f, +0.000064f, -0.000234f, -0.000551f, -0.000060f, +0.000001f, +0.000040f, +0.000154f, + +0.000046f, -0.000172f, -0.000119f, +0.000264f, -0.000085f, -0.000048f + }, + { + +0.026930f, -0.149177f, -0.015685f, +0.018005f, -0.001332f, -0.002239f, +0.000491f, +0.002356f, -0.007409f, +0.001669f, + +0.008892f, -0.002137f, +0.001678f, +0.001980f, -0.010163f, +0.004246f, -0.001145f, +0.009192f, -0.001600f, -0.004173f, + +0.004136f, +0.003800f, +0.002796f, +0.002447f, -0.000686f, +0.004071f, -0.002279f, +0.001665f, -0.001722f, -0.000878f, + -0.003973f, -0.008517f, +0.008018f, +0.003017f, -0.002318f, +0.002854f, +0.004884f, +0.001490f, -0.002884f, +0.002395f, + +0.000109f, -0.002127f, -0.000531f, +0.001521f, -0.000392f, -0.000611f, -0.000878f, -0.002859f, -0.000453f, -0.001490f, + -0.000106f, -0.000124f, +0.001285f, -0.001883f, +0.000570f, -0.000327f, +0.002723f, -0.000286f, +0.000889f, -0.000894f, + +0.000031f, +0.000331f, +0.000189f, +0.001127f, -0.000653f, +0.000306f, -0.000268f, +0.000631f, +0.000130f, -0.000708f, + -0.000234f, -0.000061f, -0.000112f, +0.000244f, +0.000029f, +0.000585f, -0.000385f, -0.000206f, +0.000267f, -0.000347f, + +0.000435f, -0.000108f, -0.000255f, -0.000171f, +0.000118f, +0.000060f, +0.000019f, +0.000248f, -0.000356f, +0.000032f, + -0.000136f, -0.000094f, -0.000088f, -0.000019f, +0.000121f, +0.000023f + }, + { + -0.001456f, +0.027929f, -0.002122f, -0.000832f, +0.002595f, +0.000697f, +0.001394f, +0.003753f, -0.001418f, -0.000846f, + +0.000763f, -0.002040f, -0.005065f, +0.051260f, +0.003208f, +0.008151f, -0.006754f, +0.004313f, +0.000409f, +0.000079f, + -0.010431f, +0.023708f, +0.003437f, -0.001490f, -0.010401f, -0.004862f, +0.012607f, -0.007575f, +0.008591f, +0.004057f, + +0.003414f, +0.000201f, -0.000904f, -0.002780f, -0.000926f, -0.002488f, -0.001933f, +0.000815f, +0.001850f, +0.002887f, + -0.000257f, -0.002935f, +0.000176f, +0.000828f, -0.001439f, +0.001249f, -0.000275f, +0.003529f, +0.001588f, +0.000478f, + +0.000192f, +0.000288f, +0.000614f, -0.000699f, +0.001398f, +0.000293f, +0.000235f, +0.000563f, +0.000769f, -0.001056f, + +0.000802f, -0.001448f, +0.000157f, -0.000262f, -0.001217f, -0.000043f, -0.000149f, -0.000249f, -0.000419f, -0.000461f, + +0.001182f, +0.000301f, -0.000897f, +0.000003f, +0.000254f, -0.000255f, +0.000145f, -0.000494f, -0.000122f, -0.000074f, + +0.000236f, -0.000543f, -0.000141f, +0.000259f, +0.000381f, +0.000250f, -0.000100f, -0.000018f, +0.000031f, +0.000001f, + -0.000049f, -0.000064f, -0.000014f, -0.000393f, +0.000020f, -0.000265f + }, + { + +0.018805f, -0.114090f, -0.005677f, -0.013261f, +0.011884f, -0.004502f, -0.003802f, -0.000386f, +0.002700f, +0.005250f, + -0.002572f, +0.007277f, +0.003584f, -0.017058f, +0.011987f, -0.007516f, +0.004803f, -0.007477f, -0.005310f, +0.003603f, + +0.000269f, -0.000448f, +0.000346f, +0.002849f, -0.000558f, -0.000488f, +0.001131f, -0.000679f, -0.001444f, -0.002768f, + +0.004954f, -0.000115f, -0.007626f, -0.000802f, +0.003449f, -0.002972f, +0.002528f, -0.001622f, +0.003101f, -0.000645f, + +0.002015f, +0.002199f, -0.002148f, -0.002520f, +0.000470f, +0.004994f, +0.001082f, -0.004214f, +0.000222f, -0.001281f, + +0.000202f, +0.000934f, -0.001903f, +0.000197f, -0.000839f, -0.000580f, +0.000595f, +0.001088f, -0.000175f, -0.001112f, + -0.002135f, +0.001030f, -0.000619f, +0.001148f, -0.000604f, +0.000347f, +0.000304f, -0.000293f, -0.000848f, -0.000069f, + -0.000081f, +0.000042f, -0.000700f, -0.000354f, +0.000811f, +0.000179f, -0.000852f, +0.000523f, -0.000587f, +0.000092f, + -0.000496f, -0.000056f, -0.000666f, +0.000265f, +0.000162f, +0.000169f, +0.000022f, -0.000108f, +0.000159f, -0.000257f, + -0.000093f, +0.000143f, +0.000334f, -0.000175f, +0.000061f, +0.000068f + }, + { + +0.000298f, -0.003660f, -0.006638f, -0.002643f, -0.000530f, -0.002111f, +0.000488f, -0.001471f, -0.003159f, -0.000063f, + -0.003809f, +0.000272f, -0.006921f, +0.029209f, -0.036858f, -0.002073f, -0.001968f, +0.002764f, -0.003062f, +0.002174f, + +0.002271f, -0.001954f, -0.003830f, +0.010508f, -0.004848f, -0.003173f, -0.006919f, +0.005705f, +0.005005f, -0.002428f, + -0.002465f, -0.005162f, +0.004217f, -0.003098f, -0.005688f, +0.004873f, +0.000160f, +0.001685f, +0.003043f, -0.002777f, + +0.003412f, -0.000903f, -0.003197f, +0.002303f, +0.001317f, -0.000649f, +0.003514f, -0.003425f, +0.001347f, -0.002047f, + -0.000936f, -0.001635f, -0.001624f, +0.000719f, -0.002191f, +0.001285f, -0.000281f, +0.000320f, -0.000225f, -0.000461f, + +0.000805f, -0.001486f, +0.000646f, -0.000300f, +0.000698f, -0.000137f, +0.000070f, +0.000335f, +0.000868f, -0.000405f, + -0.001107f, -0.000167f, +0.001081f, -0.000811f, -0.000403f, -0.000139f, +0.000083f, +0.000396f, +0.000292f, -0.000081f, + -0.000334f, +0.000074f, -0.000448f, +0.000106f, -0.000162f, +0.000302f, +0.000425f, -0.000347f, +0.000053f, -0.000048f, + +0.000162f, +0.000055f, -0.000169f, +0.000092f, +0.000085f, -0.000091f + }, + { + +0.003718f, -0.133567f, +0.002175f, -0.011781f, +0.010627f, +0.013410f, -0.002759f, +0.002268f, -0.000997f, +0.001478f, + +0.004321f, -0.002748f, +0.006907f, -0.015928f, -0.016000f, +0.008108f, +0.006721f, +0.000753f, -0.002593f, -0.004335f, + +0.002273f, -0.002959f, -0.001047f, -0.002129f, -0.005066f, +0.006105f, +0.000288f, +0.005215f, -0.005903f, +0.004071f, + -0.000982f, +0.001296f, +0.000654f, -0.005646f, +0.001968f, -0.004161f, -0.000966f, +0.000324f, -0.003871f, +0.000442f, + -0.001368f, +0.004001f, -0.001406f, -0.002119f, +0.001448f, +0.001351f, +0.001699f, +0.002804f, -0.000244f, +0.000300f, + +0.000592f, +0.002529f, -0.000302f, -0.000770f, +0.001324f, -0.000562f, +0.000968f, +0.000092f, +0.001361f, +0.000621f, + -0.002218f, -0.000510f, -0.000002f, +0.000422f, +0.000570f, -0.000604f, +0.001066f, -0.000078f, -0.000906f, +0.000369f, + -0.000472f, -0.000655f, +0.000678f, +0.000007f, +0.000221f, +0.000142f, -0.000094f, +0.000525f, +0.000036f, -0.000097f, + -0.000326f, +0.000368f, -0.000441f, +0.000131f, -0.000057f, -0.000275f, +0.000031f, +0.000177f, +0.000079f, +0.000163f, + +0.000143f, +0.000121f, +0.000139f, -0.000316f, -0.000002f, +0.000181f + } + }, + { + { + +0.002615f, +0.069124f, +0.019724f, -0.009280f, -0.003160f, +0.001997f, +0.000857f, +0.002780f, -0.000110f, -0.003467f, + -0.000090f, -0.003023f, -0.003709f, -0.006969f, -0.014679f, -0.001974f, +0.003637f, +0.004754f, -0.005127f, -0.010686f, + -0.004297f, -0.004847f, +0.002357f, +0.001204f, +0.004307f, -0.009744f, -0.000980f, +0.003737f, +0.005234f, -0.007392f, + +0.004442f, +0.004466f, -0.001445f, -0.003368f, -0.002587f, -0.000288f, -0.000294f, -0.006073f, -0.000457f, +0.001600f, + -0.000510f, -0.002641f, +0.000011f, +0.000293f, -0.002928f, -0.000800f, -0.001192f, +0.001307f, -0.000210f, -0.000043f, + +0.001445f, -0.000470f, -0.000375f, -0.000029f, +0.000129f, -0.000973f, -0.000302f, -0.000978f, -0.000468f, +0.001519f, + -0.000170f, -0.000037f, +0.000660f, -0.000373f, +0.000007f, +0.000382f, +0.000422f, +0.000894f, +0.000074f, +0.000133f, + -0.000545f, +0.000034f, +0.000366f, +0.000072f, -0.000020f, -0.000029f, +0.000229f, +0.000628f, +0.000197f, -0.000608f, + -0.000220f, +0.000274f, +0.000116f, -0.000300f, +0.000056f, -0.000214f, +0.000059f, +0.000172f, +0.000264f, +0.000044f, + +0.000125f, -0.000136f, -0.000076f, +0.000060f, +0.000056f, -0.000017f + }, + { + +0.027646f, +0.043374f, -0.022996f, +0.011106f, -0.002819f, +0.001497f, -0.001563f, -0.003465f, -0.001285f, +0.006732f, + +0.002297f, +0.010100f, +0.002055f, -0.003092f, -0.005102f, -0.004518f, +0.000613f, -0.003367f, +0.000205f, +0.002850f, + -0.000002f, -0.000536f, -0.001451f, +0.005215f, +0.001884f, -0.000960f, -0.000573f, -0.001049f, -0.001637f, +0.002851f, + +0.000064f, +0.002178f, +0.001035f, +0.002291f, +0.002132f, -0.000192f, +0.000760f, +0.002484f, -0.001578f, +0.000383f, + +0.000456f, -0.000868f, -0.000410f, +0.001897f, -0.000120f, -0.003558f, -0.001328f, +0.000421f, -0.000110f, -0.000503f, + +0.001517f, +0.002135f, +0.000655f, +0.000999f, +0.000457f, -0.001146f, -0.001111f, -0.000311f, +0.000549f, +0.000296f, + +0.000843f, +0.000121f, -0.000921f, -0.000460f, -0.000010f, +0.000059f, +0.000188f, +0.000105f, +0.000179f, +0.000238f, + -0.000160f, +0.000013f, -0.000054f, -0.000099f, -0.000485f, +0.000442f, +0.000560f, +0.000249f, +0.000246f, +0.000087f, + +0.000033f, -0.000057f, +0.000325f, +0.000137f, +0.000138f, -0.000306f, +0.000080f, +0.000252f, +0.000326f, +0.000192f, + -0.000244f, -0.000072f, +0.000010f, -0.000068f, +0.000034f, +0.000071f + }, + { + -0.012094f, -0.233769f, -0.009561f, +0.015135f, +0.021649f, +0.002178f, -0.000161f, -0.002520f, -0.001268f, -0.005325f, + -0.003956f, +0.002996f, +0.005740f, +0.009488f, +0.002458f, +0.009101f, +0.001941f, +0.002069f, +0.007652f, +0.005080f, + -0.005524f, +0.000813f, +0.001114f, -0.004096f, -0.000251f, +0.000387f, +0.006881f, +0.004271f, +0.002895f, -0.001300f, + +0.000001f, -0.002981f, -0.002018f, -0.003954f, -0.000398f, -0.001422f, +0.001672f, -0.001444f, -0.001902f, +0.000470f, + +0.004088f, +0.001031f, -0.000153f, +0.000837f, +0.000822f, +0.000267f, -0.000176f, +0.001300f, +0.001341f, -0.000266f, + -0.001132f, -0.000187f, +0.001273f, +0.000016f, -0.001815f, -0.000512f, +0.000079f, +0.000721f, -0.000745f, +0.000027f, + -0.001449f, +0.000867f, +0.000117f, +0.000921f, +0.000583f, +0.000512f, -0.000431f, -0.000116f, -0.000526f, +0.000109f, + +0.000415f, +0.000380f, +0.000576f, +0.000328f, +0.000156f, -0.000121f, +0.000125f, +0.000085f, +0.000089f, +0.000032f, + +0.000252f, -0.000003f, +0.000392f, -0.000086f, -0.000528f, -0.000182f, -0.000042f, -0.000093f, +0.000195f, +0.000009f, + -0.000111f, +0.000030f, -0.000112f, -0.000044f, -0.000084f, -0.000039f + }, + { + +0.002514f, +0.017887f, +0.002740f, +0.002653f, +0.000906f, +0.000118f, +0.000744f, -0.000700f, -0.000730f, +0.000242f, + -0.001933f, -0.001359f, +0.003240f, -0.006159f, -0.002058f, -0.004965f, +0.008718f, -0.000508f, -0.007601f, +0.004401f, + -0.003429f, +0.002694f, +0.003643f, -0.004327f, +0.001835f, -0.005228f, -0.001215f, +0.000836f, -0.001139f, -0.001399f, + +0.001417f, +0.000965f, -0.000219f, -0.000413f, +0.000595f, -0.000577f, +0.000102f, +0.000744f, +0.001550f, +0.000473f, + +0.000810f, +0.000731f, +0.001205f, +0.000148f, +0.002602f, +0.000864f, -0.001132f, -0.000635f, -0.000236f, +0.000693f, + -0.002185f, -0.000440f, +0.002442f, +0.000340f, +0.000613f, +0.000074f, -0.000450f, -0.000099f, -0.000156f, +0.000172f, + -0.000891f, -0.000327f, -0.000341f, +0.000258f, -0.000094f, -0.000627f, -0.000116f, +0.000765f, -0.000095f, -0.000398f, + -0.000658f, -0.000193f, +0.000113f, -0.000408f, +0.000475f, +0.000375f, +0.000219f, +0.000054f, -0.000025f, +0.000284f, + -0.000116f, -0.000131f, +0.000006f, -0.000043f, +0.000129f, -0.000029f, +0.000068f, -0.000022f, -0.000147f, -0.000087f, + -0.000078f, -0.000008f, +0.000021f, -0.000064f, -0.000099f, +0.000166f + }, + { + -0.009785f, +0.175226f, +0.006625f, -0.013594f, +0.000300f, -0.000341f, +0.000724f, +0.000966f, -0.002784f, -0.000422f, + +0.003454f, -0.003277f, -0.004048f, +0.002948f, +0.016154f, +0.004264f, -0.009273f, -0.011284f, -0.001578f, -0.003952f, + -0.000273f, -0.000294f, +0.000881f, -0.002826f, -0.003116f, -0.005321f, +0.001178f, +0.001832f, -0.001065f, +0.001096f, + +0.001232f, -0.001189f, +0.002839f, -0.000855f, -0.000779f, -0.003629f, +0.001811f, +0.002312f, +0.000461f, -0.001953f, + -0.000967f, -0.001291f, -0.000928f, -0.002299f, +0.002421f, -0.000290f, -0.001908f, -0.000672f, +0.000012f, +0.002006f, + +0.002119f, +0.001013f, -0.000297f, +0.000483f, +0.000756f, +0.001049f, -0.000925f, -0.001593f, +0.000376f, +0.000739f, + -0.001327f, -0.000412f, -0.000240f, +0.000268f, +0.000298f, +0.000645f, -0.000757f, +0.000330f, +0.000678f, -0.000091f, + -0.000585f, -0.000405f, +0.000090f, +0.000146f, +0.000063f, -0.000025f, +0.000385f, -0.000091f, +0.000026f, +0.000438f, + +0.000240f, -0.000009f, -0.000090f, -0.000309f, +0.000088f, +0.000026f, +0.000196f, +0.000172f, -0.000260f, +0.000295f, + -0.000142f, +0.000225f, -0.000100f, +0.000064f, -0.000191f, +0.000058f + }, + { + +0.000328f, +0.002211f, -0.001555f, -0.001901f, +0.000278f, -0.000405f, +0.000765f, -0.000421f, -0.001363f, -0.000474f, + -0.000696f, -0.001883f, -0.004345f, -0.006959f, +0.006922f, +0.005697f, +0.010288f, -0.008188f, -0.000536f, -0.043787f, + -0.001874f, -0.006316f, -0.001712f, -0.014547f, +0.000303f, +0.002375f, -0.005925f, -0.005141f, +0.004925f, +0.003126f, + -0.002188f, +0.003629f, +0.001981f, -0.000005f, +0.000446f, -0.000726f, -0.001008f, +0.001487f, +0.001896f, +0.001619f, + +0.000222f, -0.000104f, +0.000769f, +0.000701f, +0.000318f, +0.000012f, -0.000518f, +0.000806f, +0.000326f, +0.000412f, + -0.000889f, -0.000419f, -0.000453f, -0.000804f, +0.000635f, -0.001634f, +0.000226f, -0.000359f, +0.000095f, +0.000973f, + +0.000696f, +0.000023f, -0.000039f, +0.001004f, +0.000065f, -0.000056f, -0.000291f, +0.000319f, -0.000095f, -0.000662f, + -0.000452f, -0.000025f, -0.000443f, +0.000058f, +0.000071f, +0.000927f, +0.000307f, -0.000094f, -0.000731f, -0.000184f, + -0.000026f, +0.000060f, +0.000030f, -0.000126f, +0.000099f, +0.000106f, +0.000279f, +0.000037f, +0.000237f, +0.000093f, + -0.000073f, +0.000244f, +0.000213f, +0.000027f, -0.000055f, -0.000015f + }, + { + +0.057810f, +0.436435f, +0.051308f, +0.014107f, +0.005564f, +0.000118f, -0.000835f, -0.000601f, +0.001204f, +0.001075f, + +0.001591f, -0.001361f, -0.003916f, -0.003042f, +0.001401f, -0.003196f, -0.004846f, -0.001668f, -0.003116f, -0.001250f, + +0.001072f, +0.000161f, -0.000822f, -0.000823f, -0.000686f, -0.000078f, -0.001430f, -0.000216f, +0.000043f, +0.000119f, + +0.002283f, -0.002187f, +0.001034f, -0.000877f, -0.005109f, +0.000892f, -0.000145f, -0.000519f, -0.002629f, -0.002110f, + +0.000049f, +0.000429f, +0.001074f, -0.002359f, -0.001245f, +0.002470f, +0.001230f, -0.001399f, -0.000228f, -0.002188f, + -0.001223f, -0.001165f, -0.000190f, +0.002137f, +0.001276f, +0.000904f, +0.000625f, -0.001241f, -0.000188f, +0.000447f, + +0.000509f, -0.000000f, -0.000791f, +0.000417f, +0.000355f, +0.000719f, +0.000349f, -0.000706f, +0.000197f, -0.000005f, + -0.000313f, +0.000106f, -0.000191f, -0.000202f, +0.000319f, +0.000335f, +0.000262f, +0.000097f, +0.000272f, +0.000041f, + +0.000129f, -0.000042f, -0.000023f, -0.000151f, -0.000155f, +0.000439f, +0.000087f, +0.000032f, -0.000030f, -0.000099f, + -0.000034f, -0.000066f, -0.000191f, +0.000054f, +0.000057f, +0.000065f + }, + { + -0.000985f, +0.002249f, -0.006865f, +0.003694f, +0.001272f, -0.000702f, -0.000273f, -0.001117f, +0.001089f, -0.000152f, + -0.001890f, +0.002373f, +0.000721f, +0.004195f, +0.017842f, +0.001051f, -0.003587f, -0.006626f, +0.005468f, +0.008410f, + +0.000460f, +0.002518f, -0.005696f, -0.001433f, -0.003812f, +0.002810f, +0.010152f, +0.009790f, -0.003356f, -0.005253f, + +0.005145f, +0.003481f, -0.002489f, +0.000430f, +0.000549f, -0.000763f, +0.001188f, -0.000498f, +0.001397f, -0.000658f, + -0.001310f, -0.000952f, -0.000587f, -0.001685f, -0.001164f, -0.000458f, +0.000302f, +0.000252f, +0.002008f, +0.001797f, + -0.001107f, +0.001689f, +0.001150f, +0.000803f, +0.000641f, +0.001656f, +0.000856f, -0.000497f, -0.000832f, -0.000374f, + +0.000966f, +0.000202f, -0.000660f, -0.000138f, -0.000727f, -0.000581f, +0.000171f, -0.000119f, -0.000571f, +0.000389f, + -0.000299f, -0.000520f, -0.000642f, +0.000133f, -0.000300f, -0.000551f, +0.000151f, +0.000134f, -0.000182f, -0.000079f, + -0.000243f, +0.000120f, +0.000028f, -0.000240f, +0.000271f, +0.000022f, +0.000072f, +0.000005f, +0.000203f, +0.000009f, + -0.000136f, -0.000005f, -0.000079f, -0.000011f, -0.000079f, -0.000134f + }, + { + -0.057317f, -0.067821f, -0.002241f, +0.019892f, +0.000350f, -0.000178f, -0.005695f, -0.002695f, +0.000155f, +0.002778f, + +0.002374f, +0.001326f, +0.002782f, -0.006187f, +0.004876f, +0.004190f, -0.000579f, -0.003251f, -0.004488f, -0.000710f, + +0.000751f, +0.001556f, -0.002333f, +0.000985f, -0.001606f, -0.002425f, -0.000201f, -0.000652f, -0.000620f, +0.003333f, + +0.000799f, +0.000888f, +0.002378f, +0.001146f, -0.001199f, +0.002818f, -0.001273f, +0.001300f, +0.000909f, -0.001123f, + -0.005175f, +0.003253f, -0.001408f, -0.002362f, -0.001277f, +0.000283f, +0.002225f, -0.001346f, -0.002217f, +0.000188f, + +0.001281f, -0.000840f, +0.000665f, -0.001017f, -0.000026f, -0.000069f, -0.000928f, +0.000334f, -0.001174f, -0.000898f, + -0.001190f, +0.000182f, -0.000435f, -0.000229f, -0.000899f, -0.000534f, +0.000291f, +0.000434f, +0.000158f, +0.000154f, + -0.000511f, -0.000493f, -0.000076f, -0.000764f, -0.000030f, +0.000064f, +0.000410f, -0.000134f, -0.000278f, -0.000375f, + +0.000206f, -0.000221f, -0.000224f, -0.000066f, -0.000281f, +0.000090f, +0.000171f, +0.000183f, +0.000045f, +0.000180f, + +0.000063f, +0.000025f, +0.000112f, -0.000055f, +0.000108f, -0.000001f + }, + { + +0.003026f, +0.030860f, +0.005828f, -0.002283f, -0.001860f, -0.001610f, -0.007981f, -0.002237f, +0.000507f, -0.001301f, + +0.001060f, -0.005319f, +0.001401f, +0.003373f, -0.010706f, +0.003765f, +0.002456f, +0.008028f, +0.010761f, +0.002172f, + -0.003533f, +0.001672f, +0.000366f, -0.001263f, +0.004091f, +0.000353f, -0.000510f, -0.003518f, +0.001261f, -0.002125f, + +0.002906f, -0.004099f, +0.003038f, +0.000318f, +0.000655f, +0.001657f, +0.003048f, +0.001193f, +0.003472f, +0.001500f, + +0.001871f, +0.003311f, +0.003389f, -0.001167f, -0.000032f, -0.000394f, +0.000249f, +0.000398f, +0.000140f, +0.000271f, + -0.000738f, +0.000373f, +0.000996f, +0.001829f, -0.000490f, +0.000978f, +0.001031f, +0.000180f, +0.000704f, +0.000934f, + +0.000083f, +0.000451f, -0.000147f, +0.000063f, -0.000543f, -0.000642f, -0.000250f, +0.000061f, +0.000190f, -0.000079f, + +0.000305f, -0.000436f, -0.000395f, +0.000059f, -0.000034f, +0.000072f, +0.000328f, -0.000219f, -0.000203f, +0.000047f, + -0.000009f, -0.000030f, +0.000272f, -0.000103f, -0.000119f, -0.000098f, -0.000259f, -0.000128f, -0.000115f, +0.000143f, + +0.000052f, -0.000050f, -0.000019f, +0.000081f, +0.000037f, +0.000010f + }, + { + -0.024696f, -0.096373f, +0.006055f, -0.001107f, +0.005589f, -0.002824f, +0.004514f, +0.000785f, -0.001338f, -0.001174f, + +0.001717f, +0.005033f, +0.001376f, +0.000221f, -0.001474f, -0.002787f, +0.010179f, +0.003694f, -0.003780f, +0.001856f, + +0.001438f, +0.001510f, +0.003424f, +0.001498f, +0.001965f, +0.001467f, +0.000432f, -0.001164f, +0.000291f, -0.003344f, + -0.002528f, -0.003785f, +0.002163f, +0.002624f, +0.000551f, +0.002611f, +0.001529f, +0.000464f, -0.001094f, +0.003124f, + -0.000102f, -0.000347f, -0.001239f, +0.000936f, -0.001178f, -0.001132f, -0.000406f, -0.001550f, -0.001170f, -0.001008f, + +0.000250f, -0.000209f, +0.000296f, -0.001226f, -0.000036f, -0.000179f, +0.000511f, +0.001743f, +0.000299f, +0.000007f, + -0.000027f, -0.000204f, +0.000399f, +0.000462f, -0.000162f, -0.000066f, +0.000030f, -0.000075f, +0.000356f, -0.000485f, + +0.000042f, -0.000397f, +0.000075f, +0.000433f, +0.000202f, +0.000391f, -0.000364f, -0.000011f, +0.000161f, -0.000047f, + +0.000119f, +0.000261f, -0.000396f, +0.000120f, -0.000115f, +0.000110f, +0.000054f, +0.000026f, -0.000132f, +0.000102f, + -0.000136f, -0.000025f, -0.000167f, -0.000107f, +0.000175f, +0.000047f + }, + { + +0.000879f, +0.021614f, +0.003546f, -0.001102f, +0.003330f, +0.000643f, +0.001125f, +0.001606f, -0.000036f, +0.000187f, + -0.000331f, +0.001569f, +0.014111f, +0.018317f, +0.007521f, +0.000116f, +0.001304f, +0.004223f, -0.000698f, -0.005187f, + -0.001272f, +0.014815f, +0.003547f, -0.000236f, -0.002732f, -0.004061f, +0.002383f, +0.004412f, +0.004754f, +0.007362f, + +0.001388f, -0.000757f, -0.002668f, -0.001332f, -0.001740f, -0.001506f, -0.000789f, +0.000034f, +0.000646f, +0.003176f, + +0.000709f, -0.001931f, -0.000853f, +0.000903f, +0.000533f, -0.000713f, -0.000053f, +0.003125f, -0.000923f, +0.001839f, + +0.001198f, +0.000005f, +0.000552f, +0.000429f, +0.000544f, +0.000307f, +0.000129f, -0.000312f, -0.000318f, -0.000123f, + -0.000949f, +0.000108f, -0.000123f, -0.000407f, -0.001051f, -0.000232f, -0.000421f, -0.000589f, -0.000341f, +0.000197f, + +0.000799f, +0.000186f, -0.000271f, +0.000302f, -0.000299f, +0.000141f, -0.000057f, -0.000257f, -0.000217f, -0.000160f, + +0.000046f, -0.000209f, -0.000050f, +0.000163f, +0.000123f, +0.000111f, -0.000066f, +0.000024f, -0.000029f, -0.000112f, + +0.000065f, -0.000007f, -0.000177f, -0.000121f, -0.000121f, -0.000144f + }, + { + -0.020629f, -0.067501f, -0.009707f, +0.004091f, -0.000891f, +0.003811f, +0.006723f, -0.000579f, -0.000673f, +0.004197f, + +0.003611f, -0.001606f, -0.006462f, +0.008758f, +0.010050f, -0.003553f, +0.000282f, -0.004740f, -0.005899f, +0.002744f, + +0.002221f, -0.001319f, -0.000771f, -0.000614f, +0.001265f, +0.000998f, +0.002400f, +0.000047f, -0.002094f, -0.001534f, + +0.005196f, -0.003219f, -0.001966f, -0.001589f, +0.002176f, +0.000572f, -0.001696f, -0.000769f, +0.003595f, +0.002169f, + +0.000220f, +0.000249f, -0.000190f, -0.004316f, -0.001911f, +0.002623f, -0.000072f, -0.001802f, -0.000826f, -0.000991f, + -0.000093f, -0.000191f, -0.000135f, +0.000278f, +0.001010f, -0.000863f, -0.000284f, +0.000336f, +0.000032f, +0.000137f, + -0.001103f, -0.000429f, +0.000478f, -0.000034f, -0.000249f, -0.000170f, -0.000021f, -0.000136f, -0.000255f, +0.000148f, + -0.000381f, +0.000045f, -0.000261f, +0.000212f, +0.000429f, +0.000183f, -0.000643f, -0.000143f, +0.000214f, +0.000201f, + -0.000608f, +0.000006f, -0.000508f, +0.000121f, +0.000242f, +0.000084f, -0.000233f, -0.000159f, -0.000165f, -0.000176f, + +0.000050f, -0.000077f, +0.000279f, -0.000043f, +0.000148f, +0.000214f + }, + { + -0.000475f, -0.003233f, -0.006720f, -0.005002f, +0.002366f, -0.001042f, -0.002372f, +0.001113f, -0.001634f, -0.000575f, + -0.003391f, -0.003007f, -0.004932f, -0.022877f, +0.056077f, -0.005553f, -0.006002f, +0.002792f, -0.004351f, -0.003989f, + +0.000534f, +0.002039f, +0.004574f, +0.001260f, -0.000126f, -0.006633f, -0.002826f, +0.006058f, +0.004687f, -0.003414f, + -0.002592f, -0.001060f, +0.000185f, -0.001435f, -0.003006f, +0.000173f, +0.001706f, +0.000963f, +0.002349f, +0.000012f, + -0.000593f, -0.000676f, +0.000401f, +0.001684f, -0.000591f, +0.000344f, +0.001896f, -0.000572f, -0.000678f, -0.001528f, + -0.000956f, -0.000327f, -0.000958f, -0.001291f, -0.000403f, -0.000483f, -0.000419f, +0.001133f, -0.000912f, -0.000283f, + +0.000549f, -0.000503f, -0.000307f, +0.000123f, +0.000671f, +0.000215f, +0.000164f, +0.000435f, -0.000027f, +0.000040f, + -0.000390f, +0.000148f, +0.000026f, +0.000051f, -0.000358f, +0.000090f, -0.000249f, +0.000345f, -0.000040f, -0.000062f, + +0.000003f, -0.000250f, -0.000327f, +0.000002f, +0.000056f, +0.000053f, +0.000063f, -0.000110f, -0.000081f, -0.000124f, + +0.000169f, +0.000161f, -0.000062f, +0.000030f, +0.000154f, -0.000164f + }, + { + -0.014971f, -0.089993f, -0.012952f, -0.002355f, +0.006688f, +0.012018f, +0.007861f, +0.002633f, -0.004723f, -0.001832f, + +0.002763f, +0.008486f, +0.002306f, +0.002627f, -0.036012f, +0.004175f, +0.013439f, +0.000839f, -0.002854f, -0.001701f, + -0.000140f, -0.000725f, -0.001627f, -0.001920f, -0.000812f, +0.001177f, +0.000320f, +0.005582f, +0.000202f, -0.002081f, + +0.000045f, +0.002811f, +0.000799f, -0.004633f, -0.001050f, -0.002994f, -0.001427f, -0.001741f, -0.000445f, -0.001810f, + -0.000529f, +0.001724f, -0.000850f, -0.001623f, +0.000935f, +0.000904f, +0.001333f, +0.001572f, +0.001363f, -0.000223f, + +0.001533f, +0.000668f, +0.001044f, +0.000957f, +0.000486f, -0.000061f, +0.000364f, +0.000919f, +0.001030f, -0.000404f, + -0.001121f, -0.000568f, -0.000427f, +0.000322f, +0.000656f, -0.000015f, -0.000001f, -0.000068f, -0.000528f, -0.000107f, + -0.000362f, -0.000531f, +0.000203f, +0.000580f, +0.000326f, -0.000342f, +0.000513f, +0.000238f, -0.000249f, +0.000126f, + -0.000191f, +0.000242f, -0.000362f, -0.000014f, -0.000082f, -0.000030f, -0.000014f, +0.000255f, +0.000099f, +0.000163f, + +0.000283f, +0.000061f, -0.000052f, -0.000137f, +0.000189f, +0.000026f + } + }, + { + { + +0.000569f, +0.011821f, -0.014026f, -0.001390f, +0.001642f, -0.000259f, -0.001026f, +0.000613f, +0.000215f, -0.002792f, + +0.000439f, -0.000130f, -0.001133f, +0.000033f, -0.001963f, +0.001131f, -0.002265f, +0.001728f, +0.000015f, -0.000564f, + +0.002473f, +0.003832f, +0.003199f, -0.000142f, +0.006401f, -0.006788f, -0.002084f, +0.000703f, +0.002145f, -0.006902f, + +0.006184f, +0.002362f, -0.003374f, -0.002157f, -0.001546f, +0.001331f, +0.002288f, -0.002976f, +0.001435f, +0.000411f, + -0.000010f, -0.000513f, -0.000310f, +0.000665f, -0.000493f, +0.000862f, -0.001156f, +0.000940f, +0.000005f, -0.000964f, + +0.000457f, -0.000734f, +0.000014f, +0.000280f, +0.000692f, -0.000366f, +0.000132f, -0.000640f, -0.000471f, -0.000017f, + -0.000933f, +0.000646f, +0.000809f, -0.000103f, +0.000149f, +0.000330f, -0.000047f, +0.000384f, -0.000285f, +0.000307f, + -0.000079f, -0.000069f, +0.000270f, -0.000294f, -0.000107f, +0.000062f, -0.000013f, +0.000232f, +0.000337f, -0.000132f, + +0.000080f, +0.000086f, +0.000011f, -0.000054f, +0.000426f, +0.000028f, -0.000053f, +0.000009f, +0.000068f, -0.000026f, + +0.000060f, +0.000003f, +0.000059f, +0.000120f, -0.000003f, -0.000113f + }, + { + -0.020268f, +0.029939f, +0.010806f, +0.006051f, -0.005559f, -0.002206f, +0.001257f, -0.000527f, -0.003473f, +0.001473f, + -0.005301f, +0.003591f, +0.001929f, -0.000456f, +0.001953f, -0.002111f, -0.005317f, +0.003278f, +0.010856f, -0.002178f, + -0.001748f, +0.001207f, -0.004304f, +0.002451f, +0.001063f, +0.001012f, +0.000612f, -0.001952f, -0.001723f, +0.001504f, + -0.000749f, +0.002321f, +0.000351f, +0.000742f, +0.000233f, +0.001576f, -0.002417f, -0.000145f, -0.001942f, +0.000656f, + -0.001155f, -0.001259f, +0.000010f, +0.001594f, +0.000713f, +0.000364f, -0.000379f, +0.000345f, -0.000431f, -0.000058f, + +0.001090f, -0.000372f, -0.000293f, -0.000360f, +0.000036f, -0.000053f, -0.000539f, +0.000590f, -0.000128f, -0.000524f, + +0.000073f, +0.000542f, -0.000125f, +0.000096f, +0.000251f, -0.000392f, -0.000145f, +0.000391f, +0.000140f, +0.000120f, + -0.000160f, +0.000545f, -0.000156f, -0.000088f, +0.000044f, +0.000097f, +0.000180f, +0.000186f, +0.000203f, -0.000216f, + -0.000209f, +0.000104f, +0.000040f, -0.000079f, -0.000002f, -0.000136f, -0.000105f, +0.000128f, -0.000104f, +0.000145f, + -0.000159f, -0.000009f, +0.000009f, -0.000027f, -0.000080f, -0.000056f + }, + { + +0.006560f, -0.150414f, +0.029082f, -0.015815f, +0.002934f, +0.000459f, +0.000053f, -0.000431f, -0.000825f, -0.000035f, + +0.000765f, +0.000408f, +0.001195f, +0.003867f, -0.005690f, +0.001011f, -0.006373f, -0.001690f, +0.005505f, +0.004067f, + -0.003241f, +0.002105f, +0.002343f, -0.001768f, +0.003910f, +0.001248f, +0.004054f, +0.002143f, -0.002787f, -0.004653f, + +0.001550f, +0.002303f, +0.001888f, -0.000069f, -0.000700f, -0.002422f, +0.001712f, -0.001891f, -0.000691f, -0.000258f, + +0.000914f, +0.000048f, -0.000437f, -0.000021f, +0.000173f, +0.001561f, -0.000327f, +0.000635f, +0.000138f, +0.000605f, + +0.000276f, -0.000080f, +0.000101f, +0.000619f, -0.000212f, +0.000047f, +0.000151f, +0.000429f, -0.000608f, +0.000442f, + -0.001234f, +0.000381f, -0.000444f, +0.000303f, -0.000101f, +0.000428f, +0.000052f, -0.000078f, -0.000356f, +0.000068f, + -0.000064f, -0.000289f, +0.000159f, +0.000101f, +0.000269f, -0.000305f, -0.000077f, +0.000248f, +0.000365f, -0.000134f, + +0.000156f, +0.000142f, +0.000137f, +0.000115f, -0.000189f, -0.000153f, -0.000107f, -0.000094f, +0.000149f, +0.000085f, + -0.000179f, +0.000117f, -0.000063f, +0.000048f, -0.000068f, +0.000015f + }, + { + -0.001430f, +0.009794f, -0.000474f, +0.000352f, -0.000116f, -0.000532f, +0.000524f, +0.000378f, -0.000484f, +0.000171f, + -0.000301f, -0.001223f, +0.003287f, -0.006063f, -0.004144f, -0.006175f, +0.000085f, +0.002051f, -0.003255f, +0.002121f, + +0.000206f, -0.000447f, +0.002464f, -0.001608f, +0.001534f, -0.003713f, -0.000486f, +0.002642f, +0.001653f, +0.000864f, + -0.000531f, +0.001333f, +0.001257f, +0.000862f, +0.001018f, -0.000220f, +0.000667f, -0.001623f, +0.000363f, +0.001264f, + +0.000860f, +0.000013f, +0.001456f, -0.000105f, +0.000214f, -0.000094f, +0.000279f, -0.000666f, -0.000643f, +0.001699f, + -0.000552f, -0.000725f, +0.001187f, -0.000780f, -0.000385f, -0.000001f, -0.000175f, -0.000410f, +0.000183f, +0.000327f, + -0.000628f, -0.000070f, -0.000302f, -0.000317f, -0.000156f, +0.000021f, -0.000280f, +0.000032f, -0.000277f, +0.000194f, + -0.000134f, -0.000351f, +0.000025f, -0.000032f, +0.000388f, -0.000185f, +0.000021f, +0.000033f, +0.000153f, +0.000149f, + -0.000024f, +0.000030f, +0.000133f, +0.000063f, +0.000131f, +0.000015f, -0.000081f, -0.000098f, +0.000007f, -0.000014f, + -0.000056f, -0.000050f, +0.000019f, +0.000078f, -0.000061f, +0.000145f + }, + { + -0.009536f, +0.140766f, -0.004172f, -0.008758f, -0.000715f, +0.000288f, +0.000480f, +0.002569f, +0.000850f, -0.000060f, + -0.001420f, -0.003909f, +0.000293f, -0.000381f, +0.004909f, +0.001261f, +0.003515f, +0.000843f, -0.000807f, -0.002021f, + +0.001473f, +0.001355f, +0.000104f, -0.001717f, -0.003119f, -0.000902f, +0.001203f, +0.002017f, -0.002739f, -0.000732f, + +0.001147f, -0.001535f, +0.000395f, +0.000003f, +0.002093f, -0.002642f, -0.001026f, -0.000186f, +0.000381f, +0.000756f, + -0.000810f, -0.001616f, +0.000164f, -0.000322f, +0.002252f, -0.000129f, +0.000816f, +0.000250f, -0.000605f, +0.000800f, + +0.000797f, -0.000581f, -0.000708f, +0.001176f, +0.000432f, -0.000023f, -0.000257f, +0.000164f, +0.000182f, -0.000090f, + -0.000274f, +0.000211f, -0.000149f, +0.000400f, -0.000167f, +0.000347f, -0.000661f, -0.000230f, -0.000127f, -0.000267f, + -0.000051f, -0.000094f, -0.000131f, -0.000340f, -0.000107f, +0.000063f, -0.000088f, +0.000149f, +0.000031f, +0.000017f, + +0.000139f, +0.000035f, -0.000289f, -0.000039f, +0.000083f, -0.000156f, +0.000056f, +0.000067f, -0.000195f, +0.000170f, + -0.000158f, +0.000095f, -0.000078f, +0.000075f, -0.000132f, +0.000102f + }, + { + -0.000700f, +0.003701f, +0.006645f, +0.000411f, -0.000576f, -0.000637f, +0.000177f, -0.000126f, -0.000969f, +0.000152f, + +0.001088f, -0.000455f, -0.000919f, -0.003233f, +0.000931f, -0.003790f, +0.009220f, -0.003759f, +0.006487f, -0.033194f, + +0.005903f, -0.003102f, +0.005380f, -0.001190f, +0.003126f, +0.000992f, +0.001620f, -0.000724f, -0.000429f, -0.001664f, + -0.001447f, +0.001501f, -0.003632f, -0.001224f, +0.000986f, +0.000584f, +0.001125f, +0.001342f, +0.000287f, -0.000330f, + -0.000860f, +0.000069f, -0.001777f, -0.000681f, -0.000260f, +0.000652f, +0.000240f, +0.000778f, -0.000068f, -0.000193f, + -0.000458f, -0.000526f, +0.000295f, -0.000585f, -0.000063f, -0.000235f, +0.000813f, -0.000700f, +0.000197f, +0.000234f, + +0.000182f, -0.000228f, -0.000398f, +0.000500f, -0.000367f, -0.000046f, -0.000133f, -0.000071f, -0.000192f, -0.000146f, + -0.000196f, +0.000435f, +0.000088f, +0.000023f, -0.000307f, +0.000272f, +0.000058f, +0.000162f, -0.000261f, +0.000170f, + -0.000222f, +0.000070f, -0.000075f, -0.000060f, +0.000018f, -0.000094f, +0.000034f, -0.000062f, -0.000010f, +0.000122f, + -0.000123f, -0.000063f, -0.000105f, +0.000023f, -0.000031f, -0.000008f + }, + { + -0.059982f, +0.191282f, -0.014337f, +0.004649f, +0.000433f, +0.000559f, -0.000477f, +0.000871f, +0.001976f, -0.000403f, + +0.000141f, -0.000894f, -0.002455f, -0.002233f, -0.000186f, +0.000900f, -0.001390f, +0.000659f, +0.001631f, -0.000079f, + +0.000905f, +0.000342f, +0.000416f, +0.000550f, -0.000564f, +0.000693f, -0.000167f, +0.000512f, -0.000111f, -0.002155f, + +0.000340f, -0.003211f, -0.000155f, +0.001098f, -0.000680f, +0.004231f, -0.000018f, -0.001287f, -0.001356f, +0.000117f, + +0.000121f, -0.001421f, +0.002043f, -0.001032f, -0.001146f, +0.002295f, +0.000083f, -0.002106f, +0.000603f, -0.000106f, + +0.000096f, -0.000630f, -0.001152f, +0.000891f, +0.000003f, -0.000861f, +0.000347f, -0.000530f, -0.000014f, +0.000516f, + +0.000163f, +0.000169f, -0.000469f, +0.000066f, -0.000103f, +0.000107f, +0.000215f, +0.000026f, -0.000043f, +0.000212f, + +0.000330f, -0.000034f, -0.000323f, +0.000180f, +0.000311f, +0.000078f, -0.000134f, -0.000163f, +0.000046f, -0.000127f, + +0.000284f, -0.000040f, +0.000027f, +0.000136f, -0.000054f, +0.000060f, -0.000078f, +0.000151f, +0.000015f, -0.000076f, + -0.000025f, -0.000021f, -0.000128f, +0.000104f, -0.000051f, +0.000006f + }, + { + -0.000846f, +0.008629f, -0.002235f, +0.000998f, +0.001004f, -0.000509f, +0.000992f, -0.000205f, -0.000071f, +0.000611f, + -0.000753f, +0.000885f, -0.002605f, -0.001812f, +0.003451f, -0.005568f, -0.002122f, -0.006673f, +0.002071f, +0.004809f, + -0.002772f, -0.002961f, -0.002162f, +0.001702f, -0.001602f, +0.003736f, +0.001262f, +0.001470f, -0.002371f, -0.002825f, + +0.003261f, +0.001629f, -0.003396f, +0.000245f, +0.000344f, -0.001337f, +0.001990f, +0.000288f, +0.000759f, -0.000593f, + -0.001117f, -0.000677f, +0.000885f, -0.000510f, -0.000511f, +0.000145f, -0.000114f, +0.001192f, +0.000744f, +0.000273f, + -0.001039f, +0.001453f, -0.000100f, -0.000435f, -0.000372f, +0.000288f, +0.000058f, +0.000063f, +0.000430f, -0.000154f, + +0.000387f, -0.000038f, -0.000053f, +0.000366f, +0.000084f, -0.000305f, -0.000351f, -0.000118f, +0.000081f, +0.000007f, + -0.000033f, +0.000325f, -0.000209f, +0.000214f, -0.000248f, -0.000282f, +0.000021f, +0.000159f, -0.000081f, +0.000010f, + +0.000165f, -0.000108f, +0.000040f, -0.000359f, -0.000027f, -0.000050f, -0.000033f, +0.000116f, +0.000007f, -0.000105f, + +0.000041f, -0.000031f, -0.000067f, +0.000005f, -0.000017f, +0.000062f + }, + { + +0.035394f, +0.046217f, -0.014230f, +0.010605f, -0.001482f, +0.001370f, -0.001165f, +0.000568f, -0.001231f, +0.000869f, + +0.000535f, -0.003425f, -0.000250f, -0.009582f, +0.006532f, -0.000725f, -0.000782f, +0.003688f, -0.001775f, -0.000722f, + +0.001479f, +0.001735f, -0.003732f, +0.002755f, +0.001115f, -0.000996f, +0.001504f, +0.001767f, -0.001047f, +0.001722f, + -0.000715f, -0.000124f, +0.001364f, +0.001097f, -0.001521f, +0.001357f, -0.001281f, -0.000064f, +0.000215f, +0.001045f, + -0.004820f, +0.002344f, -0.000264f, -0.001421f, -0.000651f, -0.001812f, +0.001119f, +0.001559f, -0.000046f, -0.000997f, + +0.000050f, -0.000849f, +0.001046f, -0.000517f, +0.000778f, +0.001150f, -0.000637f, +0.000076f, -0.000405f, +0.000316f, + -0.000688f, +0.000338f, -0.000449f, +0.000028f, -0.000308f, -0.000578f, +0.000259f, +0.000594f, +0.000012f, -0.000183f, + -0.000229f, +0.000082f, +0.000285f, -0.000382f, +0.000203f, +0.000425f, +0.000020f, -0.000006f, +0.000118f, +0.000028f, + +0.000087f, -0.000123f, +0.000061f, +0.000093f, -0.000148f, -0.000156f, -0.000072f, +0.000204f, +0.000044f, +0.000092f, + +0.000071f, -0.000018f, +0.000025f, -0.000238f, +0.000209f, +0.000003f + }, + { + -0.002257f, +0.018403f, -0.004632f, +0.001627f, +0.000875f, +0.001574f, +0.005601f, +0.001454f, +0.000018f, -0.000473f, + +0.004635f, -0.001346f, +0.001592f, +0.000967f, -0.012601f, +0.004963f, -0.003877f, +0.001308f, +0.004375f, +0.001787f, + -0.000924f, +0.003900f, -0.002769f, -0.002750f, +0.000896f, -0.000110f, -0.000707f, -0.001858f, +0.000279f, -0.003372f, + +0.005478f, -0.004343f, +0.000832f, -0.000172f, +0.000037f, +0.000504f, -0.000108f, -0.001010f, +0.002511f, -0.000262f, + -0.000113f, +0.000173f, +0.001382f, -0.000859f, -0.000621f, +0.000403f, +0.000073f, +0.001254f, -0.000173f, -0.000779f, + -0.000301f, +0.000274f, -0.000060f, +0.000520f, -0.000436f, +0.000076f, +0.000522f, -0.000477f, -0.000286f, +0.000224f, + -0.000160f, +0.000022f, -0.000357f, -0.000088f, -0.000023f, -0.000081f, -0.000056f, -0.000032f, +0.000048f, +0.000233f, + +0.000487f, -0.000190f, -0.000000f, -0.000226f, -0.000046f, +0.000163f, +0.000080f, -0.000154f, -0.000055f, -0.000132f, + +0.000069f, +0.000000f, +0.000146f, -0.000026f, +0.000079f, +0.000095f, -0.000105f, -0.000034f, -0.000022f, +0.000012f, + +0.000067f, -0.000057f, -0.000001f, +0.000002f, +0.000074f, +0.000063f + }, + { + +0.019898f, -0.040251f, -0.000171f, -0.006664f, +0.001249f, -0.006408f, +0.004445f, +0.001775f, +0.001646f, -0.000014f, + -0.000457f, +0.002785f, +0.000404f, -0.000092f, +0.003008f, +0.002467f, +0.013502f, +0.004233f, -0.002118f, +0.000877f, + -0.000130f, -0.000425f, +0.001184f, -0.001594f, +0.001802f, -0.000049f, +0.001720f, -0.001755f, -0.001526f, -0.000796f, + +0.001325f, -0.000034f, -0.000014f, -0.000259f, +0.000812f, +0.001705f, -0.000965f, +0.001204f, -0.000010f, +0.001717f, + -0.000083f, +0.001766f, -0.000943f, +0.001303f, -0.000072f, +0.000282f, +0.000475f, -0.000057f, +0.000806f, -0.000730f, + +0.000233f, -0.000773f, -0.000012f, +0.000246f, +0.000217f, -0.000459f, -0.000690f, +0.000608f, +0.000387f, +0.000181f, + -0.000008f, +0.000245f, +0.000177f, -0.000050f, +0.000074f, +0.000169f, +0.000117f, +0.000061f, +0.000360f, -0.000037f, + +0.000254f, -0.000342f, -0.000099f, +0.000284f, +0.000027f, +0.000007f, -0.000140f, +0.000139f, -0.000012f, +0.000041f, + -0.000049f, +0.000183f, -0.000132f, +0.000004f, +0.000030f, +0.000003f, +0.000054f, +0.000006f, -0.000004f, +0.000059f, + -0.000104f, +0.000065f, -0.000016f, -0.000057f, -0.000017f, +0.000001f + }, + { + -0.000144f, +0.013611f, -0.003714f, -0.003439f, +0.001551f, +0.001440f, -0.000459f, -0.000306f, +0.000183f, +0.001388f, + +0.000258f, +0.002359f, -0.000623f, -0.009659f, +0.005320f, -0.001355f, -0.001734f, -0.000377f, +0.000050f, -0.002754f, + -0.003475f, -0.000546f, +0.000579f, +0.001969f, +0.001854f, -0.000517f, -0.001405f, +0.002439f, +0.000543f, +0.002322f, + +0.001095f, -0.002115f, -0.000082f, +0.000675f, -0.000482f, -0.000690f, +0.000427f, -0.000349f, -0.000138f, +0.001195f, + +0.000706f, -0.000571f, -0.000827f, +0.001007f, +0.000466f, -0.001021f, -0.000906f, +0.000677f, -0.001776f, +0.000383f, + +0.000236f, +0.000113f, +0.000400f, +0.000422f, -0.000073f, +0.000052f, +0.000281f, -0.000447f, -0.000986f, +0.000132f, + -0.001189f, +0.000478f, +0.000578f, +0.000356f, -0.000784f, -0.000218f, +0.000313f, -0.000389f, -0.000162f, -0.000271f, + -0.000150f, -0.000284f, -0.000154f, +0.000384f, -0.000356f, +0.000183f, +0.000186f, +0.000052f, +0.000055f, +0.000050f, + -0.000099f, +0.000002f, +0.000043f, -0.000049f, -0.000134f, +0.000009f, -0.000064f, -0.000087f, +0.000056f, -0.000109f, + -0.000065f, -0.000025f, -0.000002f, +0.000120f, -0.000093f, +0.000010f + }, + { + +0.013729f, -0.005983f, +0.001946f, +0.010148f, -0.006372f, +0.001177f, +0.008604f, -0.001777f, +0.000370f, -0.000595f, + +0.000112f, -0.001902f, +0.001441f, +0.020342f, +0.005488f, -0.004566f, +0.000341f, -0.000303f, -0.001343f, +0.000362f, + +0.003315f, -0.001588f, -0.001686f, -0.001035f, +0.000991f, -0.002055f, -0.000971f, -0.000574f, +0.001245f, +0.000897f, + +0.002805f, -0.002105f, +0.002370f, -0.000400f, -0.000768f, -0.000657f, +0.000553f, +0.000150f, +0.000915f, +0.000552f, + -0.001474f, +0.000090f, +0.000808f, -0.002122f, -0.002037f, +0.000738f, -0.000620f, -0.000238f, -0.000456f, -0.000274f, + +0.000704f, +0.000079f, +0.000382f, +0.000326f, +0.001134f, +0.000141f, -0.000395f, +0.000162f, +0.000033f, +0.000114f, + +0.000131f, -0.000058f, +0.000773f, -0.000242f, +0.000303f, +0.000314f, -0.000195f, +0.000046f, +0.000119f, +0.000338f, + -0.000016f, +0.000139f, +0.000032f, +0.000249f, -0.000190f, -0.000041f, -0.000177f, -0.000249f, +0.000145f, +0.000172f, + +0.000037f, +0.000277f, -0.000232f, -0.000073f, -0.000057f, +0.000182f, -0.000093f, -0.000166f, -0.000031f, +0.000002f, + +0.000138f, -0.000010f, +0.000125f, +0.000060f, +0.000008f, +0.000087f + }, + { + +0.000551f, +0.004337f, +0.000555f, -0.002530f, +0.002796f, +0.000029f, -0.000963f, -0.000298f, -0.000930f, +0.000711f, + -0.000832f, +0.002581f, -0.003666f, -0.013083f, +0.077420f, -0.002589f, -0.004499f, -0.000197f, -0.002396f, -0.004337f, + -0.006781f, -0.003285f, +0.003366f, +0.000320f, +0.001634f, -0.004469f, +0.001686f, +0.000111f, +0.000542f, -0.000494f, + +0.000162f, +0.002059f, +0.001304f, +0.000002f, +0.000800f, +0.000052f, +0.001761f, +0.000028f, -0.000450f, +0.000929f, + -0.000688f, -0.000094f, +0.000889f, +0.000166f, -0.000871f, +0.000470f, +0.000582f, +0.000391f, -0.000296f, -0.000178f, + -0.000199f, +0.000605f, -0.000103f, -0.000931f, +0.000720f, +0.000667f, -0.000608f, +0.000623f, -0.000774f, -0.000029f, + +0.000563f, -0.000153f, -0.000274f, -0.000174f, +0.000136f, +0.000041f, -0.000631f, -0.000108f, -0.000053f, +0.000069f, + +0.000060f, +0.000385f, -0.000256f, +0.000651f, +0.000039f, +0.000016f, -0.000086f, +0.000063f, -0.000116f, -0.000048f, + +0.000096f, +0.000100f, -0.000073f, -0.000022f, +0.000092f, -0.000117f, -0.000083f, -0.000169f, +0.000180f, -0.000097f, + +0.000110f, +0.000115f, -0.000005f, -0.000048f, +0.000096f, -0.000064f + }, + { + +0.016168f, -0.035344f, +0.002678f, +0.009884f, +0.001426f, -0.001356f, +0.005031f, +0.004005f, -0.001749f, -0.000682f, + -0.000763f, +0.008610f, -0.003043f, +0.009263f, -0.020696f, -0.001624f, +0.005235f, -0.000515f, +0.001421f, +0.001313f, + -0.000364f, +0.000034f, +0.001058f, -0.000377f, +0.000102f, +0.001141f, -0.001965f, +0.001483f, -0.001338f, -0.003346f, + -0.000498f, +0.000724f, +0.000128f, -0.002018f, +0.001121f, -0.000028f, +0.000421f, -0.001074f, +0.000779f, -0.000343f, + +0.000069f, -0.000054f, -0.000678f, -0.001284f, -0.000078f, +0.000367f, -0.000594f, -0.000714f, +0.001083f, -0.000174f, + +0.000927f, -0.000971f, -0.000288f, +0.000625f, +0.000510f, +0.000105f, -0.000137f, +0.000510f, +0.000838f, -0.000472f, + -0.000090f, +0.000382f, -0.000179f, -0.000069f, +0.000178f, -0.000206f, -0.000186f, -0.000100f, -0.000341f, -0.000029f, + -0.000022f, -0.000135f, +0.000069f, +0.000187f, +0.000291f, -0.000171f, +0.000207f, -0.000118f, -0.000137f, +0.000166f, + -0.000180f, +0.000179f, -0.000138f, -0.000019f, -0.000131f, +0.000039f, +0.000103f, +0.000010f, +0.000132f, -0.000051f, + +0.000110f, +0.000003f, -0.000125f, -0.000022f, +0.000114f, +0.000004f + } + }, + { + { + -0.002966f, -0.017605f, +0.008481f, +0.003496f, +0.000874f, -0.001711f, -0.001170f, -0.000787f, +0.000672f, -0.001703f, + -0.001305f, +0.000937f, +0.000523f, +0.000894f, +0.000363f, +0.002069f, -0.003639f, +0.001123f, +0.002264f, -0.000335f, + +0.003180f, +0.000641f, +0.001467f, +0.003907f, +0.000066f, +0.000347f, -0.002326f, -0.000697f, -0.002506f, -0.002028f, + +0.002441f, +0.002086f, -0.003933f, -0.001028f, -0.000303f, -0.000183f, +0.000466f, +0.000686f, +0.002289f, -0.000377f, + +0.000286f, -0.000143f, -0.000128f, -0.000098f, +0.000873f, +0.000217f, +0.000217f, +0.000307f, -0.000702f, -0.000116f, + +0.000324f, -0.000659f, -0.000464f, -0.000070f, -0.000162f, +0.000516f, -0.000003f, +0.000113f, +0.000057f, -0.001006f, + -0.000227f, +0.000190f, +0.000174f, +0.000451f, +0.000001f, +0.000165f, -0.000079f, +0.000020f, -0.000239f, -0.000034f, + +0.000228f, +0.000063f, +0.000050f, -0.000178f, -0.000151f, +0.000222f, +0.000028f, +0.000012f, -0.000065f, +0.000094f, + +0.000079f, -0.000002f, -0.000104f, +0.000035f, +0.000143f, +0.000091f, -0.000006f, -0.000046f, +0.000049f, +0.000117f, + +0.000020f, -0.000030f, +0.000082f, +0.000101f, +0.000002f, -0.000010f + }, + { + +0.017437f, +0.012091f, -0.014694f, -0.000791f, +0.002262f, -0.001181f, +0.000971f, +0.000361f, +0.000358f, -0.002912f, + -0.001762f, +0.000516f, +0.000411f, +0.000543f, +0.002389f, -0.002258f, -0.001132f, +0.006248f, +0.004654f, -0.000238f, + -0.001784f, +0.000545f, -0.001771f, +0.000719f, +0.000618f, -0.000391f, +0.000758f, -0.001064f, -0.001008f, -0.000517f, + +0.001519f, +0.001047f, -0.000225f, +0.000933f, -0.000919f, +0.002573f, -0.001746f, -0.002036f, +0.000606f, +0.000607f, + -0.001523f, +0.000142f, -0.000278f, +0.000195f, +0.000937f, +0.000646f, +0.000840f, -0.000226f, +0.000485f, -0.000187f, + +0.000665f, -0.000820f, -0.000722f, -0.000387f, -0.000074f, -0.000158f, -0.000154f, +0.000412f, -0.000634f, -0.000338f, + -0.000188f, +0.000114f, +0.000250f, +0.000103f, +0.000039f, +0.000011f, -0.000092f, -0.000044f, +0.000114f, -0.000016f, + +0.000004f, +0.000342f, -0.000016f, -0.000413f, +0.000353f, +0.000171f, -0.000007f, +0.000340f, -0.000030f, -0.000193f, + -0.000019f, -0.000043f, -0.000131f, -0.000046f, -0.000045f, +0.000098f, -0.000089f, -0.000018f, -0.000012f, -0.000055f, + -0.000058f, -0.000087f, -0.000010f, -0.000043f, -0.000016f, -0.000042f + }, + { + +0.001229f, -0.096815f, -0.000442f, -0.022560f, -0.002445f, +0.001439f, -0.001035f, -0.000019f, -0.000375f, +0.002593f, + +0.000845f, +0.002923f, -0.001895f, +0.002189f, -0.001394f, -0.001697f, -0.006199f, +0.000830f, +0.003004f, -0.001153f, + +0.002478f, -0.001618f, +0.001059f, +0.000092f, +0.004380f, +0.002173f, +0.001282f, +0.000780f, -0.003247f, -0.001651f, + +0.001859f, +0.002551f, +0.001412f, +0.000989f, -0.000832f, -0.001512f, +0.001678f, -0.002755f, -0.000891f, -0.000097f, + +0.001129f, -0.001119f, -0.000441f, -0.000282f, -0.000660f, +0.001588f, +0.000830f, -0.000335f, -0.000494f, +0.000904f, + +0.000245f, +0.000441f, -0.000717f, +0.000493f, +0.000734f, -0.000207f, -0.000763f, +0.000026f, +0.000277f, -0.000111f, + -0.000588f, -0.000326f, +0.000101f, -0.000342f, -0.000389f, +0.000314f, +0.000062f, +0.000039f, -0.000200f, -0.000048f, + -0.000241f, -0.000369f, +0.000141f, +0.000138f, +0.000055f, -0.000224f, -0.000032f, +0.000203f, +0.000248f, +0.000080f, + +0.000125f, +0.000051f, -0.000044f, +0.000108f, +0.000102f, -0.000128f, +0.000001f, +0.000037f, +0.000055f, +0.000077f, + -0.000116f, +0.000023f, -0.000015f, -0.000017f, -0.000064f, +0.000069f + }, + { + +0.000906f, +0.007223f, -0.000160f, -0.001399f, -0.000095f, +0.000066f, +0.000064f, +0.000062f, +0.000124f, +0.000121f, + +0.000041f, +0.000155f, +0.000498f, -0.004133f, -0.009944f, +0.005677f, -0.001615f, -0.003731f, +0.003320f, +0.001494f, + +0.000061f, +0.000853f, +0.001537f, -0.000274f, -0.003116f, -0.000812f, +0.000546f, +0.001676f, +0.000719f, +0.001247f, + +0.000127f, +0.001598f, +0.000969f, +0.000332f, +0.000949f, +0.000598f, +0.000393f, -0.001894f, -0.000572f, +0.001268f, + +0.000745f, +0.000709f, +0.000088f, +0.000150f, -0.000016f, -0.000438f, +0.000447f, -0.000758f, -0.000021f, +0.000377f, + +0.001000f, -0.000540f, -0.000104f, -0.000178f, -0.000740f, -0.000032f, +0.000081f, -0.000359f, -0.000067f, +0.000598f, + -0.000249f, +0.000151f, -0.000025f, -0.000619f, -0.000303f, +0.000305f, -0.000087f, -0.000459f, -0.000161f, +0.000107f, + +0.000164f, +0.000035f, -0.000092f, +0.000090f, +0.000126f, -0.000072f, -0.000095f, -0.000071f, +0.000079f, +0.000080f, + +0.000047f, +0.000077f, +0.000041f, +0.000129f, +0.000088f, +0.000135f, -0.000098f, -0.000112f, +0.000011f, -0.000105f, + +0.000050f, -0.000039f, -0.000043f, +0.000007f, +0.000001f, -0.000037f + }, + { + +0.021105f, +0.086112f, +0.005885f, -0.003986f, -0.000094f, -0.000152f, +0.000335f, +0.001965f, +0.001875f, -0.000121f, + -0.003610f, -0.003297f, +0.000662f, -0.001034f, +0.005494f, +0.001111f, -0.002036f, +0.007784f, +0.001795f, -0.000256f, + +0.000850f, +0.001760f, -0.002205f, +0.000176f, -0.000905f, -0.001027f, +0.001731f, -0.001383f, -0.000885f, -0.000744f, + +0.000877f, +0.000391f, -0.000280f, -0.000819f, +0.000415f, -0.000985f, +0.001046f, -0.000243f, +0.000778f, +0.000853f, + +0.000232f, -0.001537f, -0.000900f, +0.001768f, +0.000350f, +0.000211f, +0.000846f, -0.000479f, +0.000067f, +0.000620f, + -0.000526f, -0.000368f, -0.000285f, +0.001052f, -0.000371f, -0.000401f, +0.000328f, +0.000555f, -0.000258f, -0.000077f, + +0.000195f, +0.000167f, -0.000565f, +0.000433f, -0.000170f, -0.000128f, +0.000182f, -0.000379f, -0.000374f, -0.000399f, + +0.000110f, -0.000009f, +0.000136f, -0.000276f, -0.000203f, +0.000134f, -0.000238f, +0.000203f, -0.000024f, -0.000094f, + -0.000000f, +0.000025f, -0.000252f, +0.000065f, +0.000083f, -0.000099f, -0.000047f, +0.000137f, -0.000108f, +0.000007f, + +0.000005f, -0.000012f, +0.000014f, +0.000054f, -0.000054f, +0.000035f + }, + { + -0.000083f, +0.005616f, +0.002323f, +0.000475f, -0.000297f, +0.000040f, -0.000672f, -0.000181f, -0.000699f, +0.000464f, + +0.000326f, +0.000177f, +0.000678f, -0.000785f, +0.002554f, -0.000444f, +0.000303f, +0.001997f, -0.002400f, -0.027170f, + +0.005400f, +0.000757f, +0.001252f, +0.006137f, +0.000929f, +0.000991f, +0.002020f, -0.001928f, +0.000424f, -0.003062f, + +0.001154f, -0.000660f, -0.002308f, -0.001985f, +0.001224f, +0.000108f, +0.001117f, +0.000414f, +0.000698f, -0.000360f, + -0.000885f, +0.000042f, -0.002029f, -0.000570f, -0.000763f, +0.000338f, +0.000004f, +0.000751f, +0.000549f, -0.000872f, + +0.000323f, -0.001068f, +0.000544f, -0.000092f, -0.000190f, +0.000129f, -0.000216f, +0.000053f, -0.000148f, +0.000051f, + +0.000373f, -0.000333f, +0.000021f, +0.000194f, -0.000439f, -0.000005f, +0.000123f, -0.000045f, -0.000009f, +0.000175f, + -0.000028f, +0.000047f, +0.000214f, -0.000113f, -0.000190f, +0.000026f, -0.000116f, -0.000052f, +0.000040f, +0.000025f, + -0.000149f, +0.000033f, -0.000031f, -0.000026f, +0.000083f, -0.000046f, -0.000085f, -0.000061f, -0.000072f, -0.000066f, + +0.000142f, -0.000042f, -0.000204f, -0.000045f, -0.000028f, -0.000041f + }, + { + +0.046170f, +0.013052f, +0.000054f, +0.006919f, +0.000018f, -0.000157f, +0.000484f, +0.000663f, +0.000089f, -0.000438f, + +0.000866f, -0.000128f, -0.001332f, -0.000638f, -0.002148f, +0.000860f, -0.000584f, +0.000746f, +0.001540f, +0.000742f, + +0.000978f, +0.001094f, +0.001009f, +0.000296f, -0.001022f, +0.000743f, -0.000840f, +0.000621f, +0.000412f, -0.001345f, + -0.000732f, -0.002300f, -0.000570f, +0.000296f, +0.000490f, +0.001406f, +0.001615f, -0.002198f, -0.000256f, +0.000674f, + +0.000114f, -0.000947f, +0.000115f, +0.000623f, -0.000006f, +0.000440f, +0.000556f, -0.001244f, +0.000805f, +0.000283f, + -0.000058f, -0.000493f, -0.000344f, +0.000228f, -0.000059f, -0.001099f, -0.000174f, -0.000021f, -0.000085f, -0.000043f, + +0.000146f, +0.000141f, -0.000154f, +0.000021f, +0.000023f, -0.000367f, -0.000204f, +0.000370f, -0.000039f, +0.000266f, + +0.000100f, +0.000379f, -0.000313f, -0.000102f, +0.000300f, +0.000086f, -0.000064f, -0.000215f, +0.000040f, +0.000038f, + +0.000150f, -0.000025f, -0.000092f, +0.000014f, +0.000085f, -0.000126f, -0.000037f, +0.000162f, +0.000118f, -0.000007f, + -0.000081f, -0.000041f, +0.000055f, +0.000101f, +0.000014f, -0.000073f + }, + { + +0.000633f, +0.000509f, +0.001573f, -0.000804f, +0.000929f, +0.000242f, +0.000310f, +0.000719f, -0.000945f, -0.000160f, + +0.000372f, +0.000646f, -0.001509f, -0.001397f, -0.005074f, +0.000567f, +0.000651f, +0.002340f, -0.001488f, +0.001725f, + -0.002290f, -0.000776f, +0.002103f, -0.000367f, -0.000848f, +0.002602f, +0.001597f, -0.002338f, -0.003419f, +0.002038f, + -0.001537f, +0.000967f, -0.001563f, -0.000526f, +0.000882f, -0.000328f, -0.000712f, +0.001833f, +0.000309f, -0.000794f, + -0.000782f, -0.000509f, +0.000436f, +0.000657f, -0.000398f, +0.000445f, -0.000681f, +0.001292f, +0.000901f, -0.000001f, + -0.000326f, +0.000085f, +0.000287f, -0.000349f, -0.000493f, -0.000592f, -0.000596f, +0.000677f, +0.000599f, -0.000066f, + +0.000147f, -0.000248f, +0.000606f, -0.000202f, +0.000136f, -0.000032f, -0.000206f, -0.000025f, +0.000257f, -0.000195f, + +0.000021f, +0.000067f, -0.000013f, +0.000337f, -0.000248f, -0.000200f, -0.000005f, -0.000066f, -0.000119f, -0.000059f, + +0.000140f, +0.000047f, +0.000005f, -0.000085f, -0.000234f, +0.000008f, -0.000055f, -0.000001f, -0.000037f, -0.000121f, + +0.000021f, -0.000035f, -0.000099f, +0.000012f, +0.000014f, +0.000057f + }, + { + -0.012511f, +0.101740f, +0.001025f, +0.003861f, +0.002297f, -0.000859f, +0.000406f, +0.000432f, -0.000090f, -0.000318f, + -0.001217f, +0.000027f, -0.000451f, -0.004351f, +0.001701f, -0.000719f, +0.000697f, +0.001712f, -0.000734f, -0.001295f, + +0.000668f, +0.000992f, -0.000161f, +0.000867f, +0.001012f, -0.000434f, +0.000315f, +0.003364f, -0.001606f, -0.000298f, + -0.000170f, +0.001067f, -0.000955f, +0.000548f, -0.000737f, +0.000378f, +0.001413f, +0.000819f, -0.002109f, +0.000269f, + -0.001981f, +0.000502f, -0.001109f, -0.000360f, +0.000000f, -0.001379f, -0.001239f, +0.001740f, +0.001231f, -0.000196f, + -0.000934f, -0.000943f, +0.000594f, +0.000255f, +0.000389f, +0.000870f, +0.000101f, -0.000019f, +0.000187f, +0.000199f, + -0.000393f, -0.000007f, -0.000081f, -0.000339f, +0.000179f, +0.000018f, +0.000085f, +0.000055f, +0.000089f, -0.000070f, + -0.000056f, +0.000061f, +0.000037f, -0.000027f, +0.000249f, +0.000256f, +0.000037f, -0.000020f, +0.000130f, +0.000172f, + -0.000075f, -0.000011f, +0.000116f, +0.000145f, +0.000040f, -0.000090f, -0.000091f, +0.000075f, -0.000070f, +0.000051f, + +0.000056f, -0.000015f, +0.000009f, -0.000126f, +0.000040f, +0.000037f + }, + { + +0.001506f, +0.008673f, -0.008098f, +0.002980f, +0.005426f, -0.000807f, +0.007645f, +0.002003f, +0.000263f, +0.001547f, + +0.001570f, +0.000828f, +0.000651f, +0.001328f, -0.009727f, +0.000772f, -0.001783f, +0.001836f, -0.003174f, +0.005679f, + +0.001659f, +0.002923f, -0.002027f, -0.002287f, -0.001629f, -0.000319f, -0.001418f, +0.000332f, -0.000305f, -0.001751f, + +0.001809f, +0.000673f, -0.001505f, -0.000122f, +0.000041f, +0.000633f, -0.002110f, -0.000545f, +0.000317f, -0.000011f, + +0.000478f, -0.000853f, -0.000451f, +0.000654f, -0.000434f, +0.000467f, +0.000031f, +0.000480f, +0.000279f, -0.000315f, + -0.000683f, +0.000532f, -0.000270f, -0.000589f, +0.000556f, +0.000020f, -0.000216f, -0.000265f, -0.000470f, -0.000076f, + +0.000109f, -0.000367f, +0.000220f, -0.000140f, +0.000129f, +0.000341f, -0.000118f, -0.000184f, -0.000177f, +0.000134f, + +0.000330f, -0.000022f, +0.000161f, -0.000097f, -0.000035f, +0.000041f, +0.000173f, -0.000078f, +0.000192f, -0.000021f, + +0.000188f, +0.000024f, +0.000007f, -0.000024f, +0.000010f, -0.000091f, +0.000070f, +0.000020f, +0.000033f, -0.000019f, + +0.000023f, -0.000037f, -0.000031f, -0.000000f, +0.000012f, +0.000024f + }, + { + -0.014379f, -0.006611f, +0.007433f, +0.001811f, -0.002977f, -0.000746f, -0.007571f, +0.002484f, +0.001591f, +0.002139f, + +0.001234f, -0.000048f, +0.000739f, -0.000650f, +0.002193f, +0.007547f, +0.005559f, +0.002905f, +0.004033f, -0.001324f, + -0.001430f, +0.000243f, +0.000242f, -0.001560f, +0.000352f, -0.000052f, +0.000706f, +0.000336f, -0.001636f, -0.000660f, + +0.001175f, +0.001573f, -0.000697f, -0.001923f, +0.002287f, +0.000230f, -0.000057f, +0.001280f, +0.001416f, -0.000725f, + +0.000269f, +0.000871f, +0.000700f, +0.001149f, +0.000272f, +0.000360f, +0.000106f, +0.000193f, +0.000688f, -0.000479f, + +0.000050f, -0.000170f, -0.000472f, +0.000125f, +0.000520f, -0.000298f, -0.000103f, -0.000158f, +0.000441f, +0.000410f, + -0.000135f, +0.000255f, -0.000029f, +0.000143f, +0.000146f, +0.000196f, +0.000186f, +0.000229f, +0.000013f, +0.000024f, + +0.000276f, -0.000111f, -0.000183f, -0.000046f, -0.000104f, -0.000178f, -0.000159f, +0.000176f, +0.000130f, -0.000082f, + +0.000036f, +0.000032f, +0.000006f, -0.000135f, +0.000065f, -0.000042f, -0.000052f, +0.000039f, +0.000049f, +0.000017f, + -0.000083f, -0.000001f, +0.000058f, +0.000046f, -0.000095f, -0.000048f + }, + { + -0.000387f, +0.010448f, -0.000717f, -0.005202f, +0.000505f, +0.001846f, -0.000179f, -0.000470f, +0.000240f, -0.000483f, + +0.000139f, +0.001853f, -0.002657f, -0.004468f, +0.004521f, -0.001857f, +0.000846f, -0.005392f, +0.001652f, -0.001687f, + -0.003010f, -0.003768f, +0.001034f, +0.000996f, -0.000843f, +0.002912f, +0.001128f, +0.000583f, +0.001111f, -0.001009f, + +0.000744f, -0.001264f, +0.000682f, +0.000283f, +0.000036f, -0.000764f, +0.000548f, -0.000113f, +0.000047f, -0.000329f, + +0.000250f, +0.000053f, +0.000191f, +0.000521f, -0.000745f, +0.000280f, -0.000404f, -0.000626f, -0.000493f, -0.000484f, + -0.000602f, +0.000620f, +0.000189f, +0.000361f, -0.000011f, +0.000011f, +0.000283f, +0.000166f, -0.000395f, -0.000001f, + -0.000587f, +0.000247f, +0.000263f, +0.000302f, +0.000006f, -0.000326f, +0.000160f, +0.000064f, -0.000174f, -0.000216f, + -0.000521f, -0.000254f, -0.000145f, -0.000036f, -0.000061f, -0.000025f, +0.000089f, +0.000019f, +0.000076f, +0.000146f, + -0.000082f, +0.000035f, +0.000122f, -0.000028f, -0.000058f, -0.000016f, +0.000025f, -0.000018f, -0.000034f, -0.000060f, + -0.000087f, -0.000036f, +0.000079f, +0.000014f, -0.000033f, +0.000006f + }, + { + -0.003791f, +0.027693f, +0.005085f, -0.002136f, -0.004259f, +0.000137f, +0.003315f, +0.000054f, +0.000692f, -0.001680f, + -0.000297f, -0.001477f, +0.004916f, +0.015190f, +0.001590f, -0.001494f, -0.001376f, +0.001700f, +0.000001f, -0.001473f, + +0.001464f, -0.000345f, -0.000393f, -0.000686f, -0.001194f, -0.003101f, +0.000535f, -0.002964f, +0.000874f, +0.002231f, + +0.001031f, -0.000936f, +0.001596f, +0.000678f, -0.000217f, -0.001542f, +0.001069f, +0.000566f, -0.000094f, +0.000601f, + -0.001532f, +0.000181f, -0.000361f, +0.000422f, -0.000207f, +0.000286f, +0.000206f, -0.000147f, -0.000307f, +0.000706f, + +0.000401f, -0.000695f, +0.000549f, +0.000341f, +0.000189f, +0.000572f, -0.000522f, -0.000003f, +0.000165f, -0.000128f, + -0.000037f, +0.000056f, +0.000417f, +0.000038f, +0.000428f, +0.000407f, -0.000015f, +0.000264f, -0.000004f, +0.000235f, + +0.000042f, +0.000173f, +0.000036f, -0.000261f, -0.000105f, -0.000087f, +0.000043f, -0.000210f, -0.000124f, -0.000033f, + +0.000261f, +0.000186f, +0.000015f, -0.000222f, -0.000220f, +0.000126f, +0.000057f, +0.000095f, +0.000011f, +0.000084f, + +0.000083f, +0.000149f, -0.000086f, +0.000051f, -0.000043f, -0.000039f + }, + { + -0.000050f, +0.004590f, +0.002894f, +0.000912f, -0.000402f, +0.001260f, -0.000045f, -0.001366f, -0.001209f, +0.001151f, + +0.000166f, +0.001016f, -0.001261f, +0.022114f, +0.013520f, +0.001077f, -0.000148f, -0.002865f, +0.003975f, -0.005160f, + -0.009743f, -0.002138f, +0.001287f, +0.002717f, -0.001469f, -0.002787f, +0.002088f, -0.000959f, -0.000411f, -0.002142f, + +0.003296f, +0.000486f, +0.000908f, +0.001061f, +0.001667f, +0.001264f, +0.001085f, -0.000428f, +0.000080f, +0.000346f, + -0.000068f, +0.000673f, -0.000247f, -0.000891f, +0.000234f, +0.000579f, +0.000081f, +0.000461f, -0.000363f, +0.000123f, + -0.000081f, +0.000003f, -0.000270f, +0.000340f, +0.000224f, +0.000387f, +0.000077f, -0.000094f, -0.000060f, +0.000151f, + +0.000045f, -0.000369f, +0.000053f, -0.000085f, -0.000185f, -0.000000f, -0.000588f, -0.000386f, +0.000145f, -0.000100f, + +0.000054f, +0.000312f, -0.000048f, +0.000359f, +0.000204f, -0.000035f, +0.000101f, -0.000144f, -0.000044f, +0.000005f, + -0.000034f, +0.000081f, +0.000054f, +0.000091f, +0.000075f, -0.000010f, -0.000140f, -0.000014f, +0.000161f, +0.000091f, + -0.000088f, +0.000001f, +0.000062f, +0.000006f, -0.000065f, +0.000013f + }, + { + -0.009930f, +0.001101f, +0.003178f, +0.010711f, +0.000477f, -0.002527f, -0.000630f, +0.002108f, +0.001741f, +0.002987f, + -0.002296f, +0.003084f, -0.002151f, -0.005120f, +0.006805f, -0.003983f, -0.005167f, -0.000584f, +0.001240f, +0.002987f, + -0.000271f, -0.000117f, +0.000806f, -0.000273f, -0.000733f, +0.002396f, -0.002209f, -0.001634f, -0.001771f, -0.001929f, + +0.000006f, +0.000107f, -0.001178f, +0.000668f, -0.000252f, +0.001113f, +0.001005f, +0.000082f, -0.000087f, -0.000533f, + -0.000339f, +0.000085f, -0.000418f, +0.000173f, -0.000426f, +0.000313f, -0.001075f, -0.000356f, -0.000066f, +0.000190f, + +0.000485f, -0.000747f, -0.000034f, -0.000217f, +0.000255f, -0.000114f, +0.000153f, +0.000564f, +0.000240f, -0.000092f, + +0.000272f, +0.000444f, +0.000119f, -0.000061f, -0.000215f, -0.000144f, -0.000073f, +0.000005f, -0.000016f, -0.000090f, + +0.000028f, +0.000064f, +0.000102f, -0.000005f, -0.000274f, +0.000390f, -0.000048f, +0.000014f, -0.000024f, -0.000021f, + +0.000039f, -0.000031f, -0.000072f, -0.000042f, -0.000012f, -0.000027f, +0.000001f, -0.000169f, +0.000174f, +0.000039f, + -0.000059f, +0.000082f, -0.000089f, -0.000046f, -0.000006f, +0.000013f + } + }, + { + { + +0.002467f, -0.027596f, -0.007297f, +0.002037f, -0.000172f, -0.001550f, -0.000683f, -0.001097f, +0.000163f, +0.000789f, + +0.000596f, +0.001710f, +0.002137f, -0.000199f, +0.002789f, +0.004666f, -0.002753f, -0.000643f, +0.000835f, -0.001830f, + +0.005316f, -0.000074f, -0.000768f, +0.004009f, -0.000276f, +0.004190f, +0.000910f, -0.000608f, -0.001471f, -0.001173f, + -0.003068f, -0.001121f, -0.003678f, +0.000458f, +0.001665f, +0.001003f, +0.000128f, -0.000233f, -0.000437f, -0.000495f, + +0.000774f, -0.000007f, +0.000527f, +0.000067f, +0.001237f, +0.000435f, +0.000310f, -0.000085f, -0.000608f, +0.000571f, + +0.000296f, -0.000447f, -0.000370f, -0.000017f, -0.000732f, +0.000115f, -0.000015f, -0.000024f, +0.000442f, -0.000187f, + +0.000347f, -0.000015f, -0.000333f, +0.000060f, -0.000282f, +0.000003f, -0.000274f, +0.000010f, +0.000013f, -0.000329f, + +0.000079f, +0.000090f, +0.000041f, +0.000262f, +0.000069f, +0.000293f, -0.000028f, -0.000011f, -0.000168f, +0.000032f, + -0.000002f, +0.000038f, -0.000080f, -0.000019f, -0.000105f, -0.000016f, +0.000052f, -0.000114f, -0.000043f, +0.000049f, + +0.000104f, -0.000088f, +0.000025f, -0.000015f, -0.000051f, +0.000072f + }, + { + -0.017038f, -0.037529f, -0.008881f, -0.002559f, +0.000061f, +0.000606f, -0.000528f, -0.000234f, +0.002086f, -0.001037f, + -0.000215f, +0.001142f, -0.000449f, -0.000564f, +0.000764f, -0.001732f, +0.001423f, +0.000894f, -0.002776f, +0.001580f, + -0.001472f, +0.000227f, -0.000454f, +0.000245f, +0.000985f, -0.000346f, +0.000660f, +0.000844f, +0.000763f, +0.000424f, + +0.002183f, -0.000276f, -0.002224f, +0.000077f, +0.000707f, +0.001720f, -0.000584f, -0.000498f, +0.000843f, +0.000072f, + -0.000747f, +0.000425f, -0.000160f, +0.000161f, +0.000927f, -0.000590f, +0.000992f, -0.000471f, +0.000739f, -0.000469f, + +0.000352f, +0.000136f, -0.000578f, -0.000384f, +0.000122f, -0.000224f, -0.000433f, -0.000299f, -0.000091f, +0.000078f, + -0.000015f, -0.000366f, -0.000044f, -0.000052f, -0.000059f, +0.000324f, -0.000003f, -0.000323f, +0.000088f, -0.000213f, + -0.000045f, +0.000060f, +0.000007f, -0.000364f, +0.000045f, +0.000151f, -0.000312f, +0.000133f, -0.000070f, +0.000090f, + +0.000141f, -0.000229f, -0.000050f, +0.000001f, -0.000164f, -0.000135f, +0.000178f, -0.000082f, +0.000048f, -0.000084f, + +0.000081f, -0.000007f, +0.000039f, -0.000088f, +0.000019f, -0.000023f + }, + { + -0.004945f, -0.086014f, +0.014126f, -0.009736f, +0.000321f, +0.000646f, +0.000087f, -0.000410f, -0.000843f, +0.000341f, + -0.001192f, +0.000870f, -0.002057f, +0.005891f, +0.004307f, +0.000267f, -0.000728f, +0.003372f, +0.000677f, +0.000252f, + +0.003969f, -0.002582f, -0.000232f, -0.002017f, +0.002666f, +0.000107f, -0.001066f, -0.000214f, -0.001430f, -0.000828f, + +0.001360f, +0.001238f, +0.000816f, -0.000454f, -0.000639f, -0.000484f, +0.001467f, -0.001534f, -0.000633f, -0.000107f, + +0.001165f, -0.001311f, +0.000032f, -0.000056f, -0.000998f, -0.000108f, +0.000862f, +0.000278f, -0.000072f, +0.000328f, + -0.000450f, +0.000101f, -0.000492f, +0.000349f, +0.000196f, -0.000048f, -0.000343f, -0.000146f, +0.000681f, +0.000320f, + -0.000033f, +0.000205f, +0.000049f, -0.000442f, -0.000247f, +0.000248f, -0.000052f, +0.000155f, +0.000073f, -0.000044f, + -0.000146f, -0.000169f, -0.000042f, +0.000073f, -0.000034f, -0.000089f, +0.000001f, +0.000011f, -0.000017f, +0.000073f, + -0.000057f, -0.000123f, -0.000011f, -0.000205f, +0.000089f, +0.000136f, +0.000061f, +0.000087f, +0.000027f, -0.000014f, + +0.000006f, -0.000070f, -0.000035f, -0.000068f, -0.000005f, +0.000099f + }, + { + -0.000860f, +0.005860f, +0.001532f, -0.000235f, -0.000393f, +0.000116f, -0.000183f, +0.000199f, +0.000498f, -0.000611f, + -0.000304f, -0.000936f, +0.000147f, +0.001326f, -0.009130f, +0.003685f, +0.001889f, +0.001034f, +0.007376f, +0.001487f, + -0.001123f, +0.000447f, -0.001053f, -0.001176f, -0.002041f, +0.000676f, +0.002924f, +0.000932f, -0.000514f, +0.000438f, + -0.000941f, +0.000641f, +0.000246f, -0.000439f, +0.001126f, +0.000706f, -0.000436f, -0.000144f, +0.000590f, +0.000055f, + -0.000042f, +0.000226f, -0.000888f, -0.000075f, +0.000064f, -0.000217f, +0.000345f, -0.000446f, +0.000434f, -0.000332f, + +0.000430f, -0.000145f, -0.000124f, +0.000149f, +0.000051f, -0.000008f, +0.000157f, +0.000282f, -0.000351f, +0.000499f, + -0.000153f, +0.000341f, +0.000270f, -0.000026f, -0.000102f, +0.000066f, -0.000012f, -0.000092f, +0.000027f, -0.000179f, + +0.000043f, +0.000289f, -0.000016f, -0.000007f, -0.000078f, +0.000080f, +0.000051f, +0.000012f, -0.000068f, -0.000045f, + -0.000094f, -0.000008f, -0.000160f, +0.000090f, -0.000064f, +0.000050f, +0.000083f, -0.000004f, +0.000027f, -0.000074f, + +0.000125f, +0.000058f, -0.000044f, -0.000080f, +0.000013f, -0.000075f + }, + { + -0.022418f, +0.023156f, +0.005724f, -0.000984f, -0.000751f, -0.000564f, -0.001015f, +0.000406f, +0.000524f, -0.000197f, + +0.000851f, -0.000139f, +0.001672f, -0.000929f, +0.001667f, -0.000117f, +0.001204f, +0.010013f, +0.000335f, +0.000054f, + +0.002562f, +0.001895f, -0.001393f, -0.000403f, +0.001327f, -0.001460f, +0.000818f, -0.001347f, +0.000860f, -0.000478f, + +0.001097f, +0.000450f, -0.000101f, -0.000730f, -0.000170f, -0.001012f, +0.001999f, +0.001164f, +0.000717f, -0.000544f, + +0.000715f, +0.000124f, -0.000769f, +0.000221f, -0.000031f, +0.000223f, -0.000242f, -0.000181f, +0.000069f, -0.000003f, + +0.000100f, +0.000093f, -0.000922f, +0.000515f, -0.001162f, -0.000980f, -0.000315f, +0.000385f, -0.000179f, +0.000104f, + +0.000065f, +0.000234f, -0.000313f, +0.000093f, -0.000333f, +0.000167f, +0.000211f, -0.000183f, +0.000117f, -0.000256f, + +0.000042f, -0.000091f, +0.000206f, +0.000100f, -0.000038f, -0.000091f, -0.000076f, +0.000019f, +0.000096f, +0.000087f, + -0.000051f, -0.000061f, -0.000068f, -0.000042f, +0.000049f, -0.000070f, -0.000020f, +0.000177f, -0.000115f, +0.000047f, + -0.000018f, +0.000084f, +0.000003f, +0.000004f, +0.000024f, +0.000044f + }, + { + +0.000613f, +0.007622f, -0.001441f, -0.000810f, -0.000025f, +0.000341f, -0.000386f, +0.000081f, -0.000003f, +0.000101f, + -0.000740f, +0.000360f, -0.000098f, -0.000758f, +0.005855f, +0.002253f, -0.004274f, +0.001057f, +0.004503f, -0.023396f, + -0.000918f, -0.001571f, -0.001361f, +0.001329f, +0.000922f, +0.000965f, -0.000879f, -0.002297f, +0.001438f, -0.000183f, + +0.002815f, -0.000157f, -0.000051f, -0.000171f, +0.001194f, -0.001239f, -0.000277f, -0.001357f, -0.000099f, -0.000395f, + -0.000063f, +0.000267f, -0.000389f, +0.000474f, -0.001056f, +0.000031f, -0.000387f, -0.000001f, -0.000081f, -0.000777f, + +0.000943f, -0.000500f, +0.000015f, +0.000164f, +0.000178f, -0.000326f, -0.000478f, +0.000069f, -0.000324f, -0.000161f, + +0.000141f, -0.000158f, +0.000358f, +0.000130f, -0.000241f, +0.000123f, +0.000153f, +0.000241f, +0.000158f, +0.000166f, + +0.000240f, -0.000067f, -0.000075f, +0.000007f, +0.000093f, +0.000025f, -0.000041f, -0.000013f, +0.000077f, -0.000032f, + -0.000002f, -0.000067f, -0.000041f, -0.000070f, +0.000192f, -0.000001f, -0.000006f, -0.000020f, -0.000014f, -0.000076f, + +0.000102f, +0.000060f, -0.000014f, -0.000068f, -0.000016f, -0.000063f + }, + { + -0.025877f, -0.085914f, +0.001838f, +0.006538f, -0.000345f, -0.000023f, +0.000721f, -0.000400f, -0.001290f, -0.000626f, + +0.001110f, +0.000131f, +0.001341f, +0.001947f, -0.000270f, +0.000197f, -0.000598f, +0.000168f, -0.000869f, +0.000564f, + +0.000424f, +0.000356f, +0.000049f, -0.000363f, -0.000507f, +0.000571f, -0.000006f, +0.000664f, +0.000374f, -0.000162f, + +0.000410f, -0.000172f, +0.000208f, +0.000238f, -0.000023f, -0.001488f, -0.000024f, -0.001562f, +0.001114f, +0.000635f, + -0.000234f, -0.000799f, -0.000689f, +0.000890f, +0.000289f, -0.000201f, +0.000162f, -0.000423f, +0.001009f, -0.000312f, + +0.000393f, -0.000239f, -0.000058f, -0.000226f, +0.000326f, -0.000119f, +0.000130f, +0.000090f, +0.000132f, +0.000175f, + -0.000237f, -0.000423f, +0.000120f, +0.000328f, +0.000168f, -0.000286f, -0.000293f, +0.000024f, +0.000057f, +0.000250f, + -0.000305f, +0.000419f, +0.000064f, -0.000361f, -0.000038f, +0.000108f, +0.000128f, -0.000161f, +0.000155f, +0.000145f, + -0.000112f, -0.000059f, -0.000016f, -0.000041f, +0.000030f, +0.000110f, -0.000012f, -0.000039f, +0.000043f, +0.000046f, + -0.000020f, -0.000130f, +0.000078f, +0.000069f, +0.000055f, -0.000088f + }, + { + +0.000625f, -0.002649f, -0.001716f, +0.000108f, -0.000131f, +0.000345f, +0.000042f, +0.000688f, -0.000241f, -0.000286f, + -0.000037f, +0.000024f, -0.000009f, -0.003284f, -0.012393f, -0.003496f, -0.001843f, +0.004436f, -0.001695f, -0.000489f, + -0.003251f, +0.002293f, +0.001853f, +0.000274f, -0.002495f, -0.003226f, -0.000127f, -0.002509f, -0.003830f, +0.001707f, + -0.002128f, +0.000983f, +0.000564f, +0.000285f, +0.000221f, -0.000062f, -0.000838f, +0.001292f, +0.000072f, -0.000569f, + +0.000186f, -0.000348f, -0.000677f, +0.000360f, +0.000354f, +0.000440f, -0.000950f, -0.000267f, +0.000589f, +0.000225f, + -0.000260f, -0.000300f, +0.000211f, -0.000083f, -0.000359f, -0.000044f, -0.000246f, +0.000254f, -0.000354f, -0.000023f, + +0.000335f, -0.000278f, +0.000226f, -0.000178f, +0.000058f, +0.000222f, +0.000344f, -0.000004f, -0.000050f, -0.000056f, + +0.000037f, -0.000083f, -0.000039f, +0.000320f, -0.000126f, +0.000045f, +0.000260f, -0.000025f, -0.000111f, +0.000023f, + -0.000056f, +0.000014f, +0.000001f, +0.000130f, +0.000036f, +0.000028f, -0.000005f, -0.000097f, +0.000006f, -0.000006f, + -0.000107f, +0.000016f, -0.000028f, +0.000018f, -0.000047f, -0.000051f + }, + { + -0.002854f, +0.105206f, -0.003202f, +0.002725f, +0.001013f, -0.001353f, -0.000570f, -0.000976f, +0.001348f, +0.000051f, + -0.002071f, +0.000966f, -0.000017f, +0.000855f, +0.000943f, +0.001405f, +0.001813f, +0.000868f, +0.000021f, -0.000140f, + +0.000615f, -0.000448f, +0.000954f, +0.000272f, -0.000709f, -0.000176f, -0.001074f, +0.000903f, -0.001980f, +0.000624f, + +0.001013f, +0.000178f, -0.001649f, +0.000819f, -0.000299f, +0.000650f, +0.000950f, +0.001625f, -0.001500f, -0.001797f, + -0.002620f, -0.000294f, -0.000905f, +0.000929f, +0.000595f, +0.000131f, -0.000375f, +0.000371f, +0.000658f, +0.000432f, + -0.000410f, -0.000705f, +0.000207f, -0.000083f, -0.000849f, -0.000064f, +0.000481f, +0.000152f, +0.000008f, +0.000434f, + -0.000034f, +0.000099f, +0.000141f, -0.000520f, +0.000012f, +0.000243f, -0.000095f, -0.000441f, +0.000118f, +0.000214f, + -0.000013f, -0.000059f, +0.000125f, -0.000035f, +0.000063f, -0.000102f, +0.000170f, -0.000151f, +0.000060f, +0.000053f, + +0.000128f, +0.000008f, +0.000003f, +0.000044f, -0.000081f, +0.000106f, +0.000114f, -0.000004f, -0.000161f, -0.000051f, + -0.000073f, -0.000011f, +0.000005f, +0.000083f, -0.000046f, -0.000006f + }, + { + -0.000973f, +0.002776f, -0.001037f, +0.002972f, +0.000721f, -0.001200f, +0.003138f, +0.001585f, -0.000257f, -0.000216f, + -0.000340f, -0.000501f, +0.000520f, +0.003540f, -0.001680f, +0.005002f, -0.000205f, +0.004848f, -0.000829f, +0.000851f, + -0.001459f, +0.002555f, +0.001374f, -0.000480f, -0.001221f, -0.000272f, +0.000191f, +0.001346f, +0.000127f, -0.000298f, + -0.000722f, +0.002254f, -0.000545f, -0.001203f, -0.000117f, +0.001880f, -0.000937f, -0.000744f, -0.000250f, +0.000015f, + +0.000436f, -0.000468f, -0.000434f, +0.000640f, +0.001261f, -0.000057f, -0.000668f, +0.000102f, +0.000538f, +0.000177f, + -0.001153f, +0.000177f, +0.000079f, -0.000606f, +0.000010f, +0.000554f, -0.000117f, -0.000021f, -0.000295f, -0.000189f, + -0.000075f, -0.000200f, +0.000444f, +0.000096f, +0.000037f, +0.000354f, -0.000023f, -0.000109f, +0.000054f, -0.000180f, + +0.000093f, -0.000087f, -0.000017f, +0.000256f, +0.000036f, -0.000134f, +0.000219f, -0.000065f, +0.000128f, +0.000072f, + +0.000194f, -0.000022f, +0.000001f, -0.000063f, +0.000052f, -0.000129f, -0.000007f, +0.000059f, +0.000014f, +0.000042f, + -0.000045f, +0.000004f, -0.000130f, -0.000009f, +0.000027f, -0.000032f + }, + { + +0.010405f, +0.015225f, +0.000572f, +0.004955f, +0.001066f, -0.000633f, -0.014143f, -0.000016f, -0.000036f, +0.003177f, + +0.001046f, +0.000366f, +0.000247f, -0.000433f, +0.000805f, +0.003157f, -0.002214f, -0.002794f, +0.002023f, -0.000245f, + -0.001257f, +0.001570f, -0.000796f, -0.001632f, -0.001460f, -0.001337f, +0.000241f, +0.000748f, -0.000050f, +0.000747f, + -0.000453f, +0.000171f, +0.000954f, -0.001157f, +0.000670f, -0.001220f, +0.001595f, -0.000044f, +0.000167f, -0.000822f, + -0.000347f, -0.000750f, +0.000045f, +0.000084f, +0.000138f, +0.001221f, +0.000285f, -0.000557f, +0.000047f, +0.000374f, + +0.000407f, -0.000004f, -0.000251f, -0.000310f, +0.000231f, -0.000417f, +0.000123f, -0.000153f, -0.000064f, +0.000459f, + -0.000182f, -0.000153f, -0.000187f, +0.000088f, +0.000092f, -0.000075f, +0.000207f, +0.000153f, -0.000072f, -0.000234f, + +0.000165f, -0.000072f, -0.000065f, -0.000042f, -0.000181f, -0.000006f, -0.000203f, -0.000003f, +0.000133f, -0.000231f, + +0.000064f, +0.000063f, -0.000080f, +0.000090f, -0.000011f, +0.000076f, -0.000081f, +0.000075f, -0.000060f, +0.000017f, + -0.000010f, +0.000005f, -0.000025f, +0.000044f, +0.000050f, -0.000039f + }, + { + +0.000589f, +0.008261f, -0.002108f, -0.003899f, +0.001513f, -0.000719f, +0.000107f, +0.000200f, -0.000136f, -0.000826f, + -0.000611f, -0.000075f, +0.003233f, +0.005540f, -0.000143f, -0.000490f, +0.004708f, -0.002932f, +0.002046f, +0.000920f, + +0.002368f, +0.002865f, -0.001004f, -0.000897f, -0.004113f, +0.000376f, +0.002057f, -0.000856f, +0.001090f, -0.000534f, + -0.001270f, +0.001185f, -0.000138f, +0.000423f, +0.000706f, -0.000599f, -0.000142f, +0.000193f, -0.000205f, -0.000039f, + +0.000144f, +0.000506f, +0.000884f, +0.000547f, -0.000673f, +0.000767f, +0.000150f, +0.000463f, +0.000190f, +0.000387f, + -0.000088f, +0.000257f, +0.000278f, +0.000237f, -0.000121f, -0.000461f, -0.000686f, -0.000134f, +0.000459f, +0.000499f, + +0.000077f, +0.000257f, -0.000298f, -0.000039f, +0.000283f, -0.000115f, -0.000288f, +0.000262f, -0.000083f, +0.000025f, + -0.000163f, +0.000110f, +0.000043f, -0.000088f, +0.000019f, +0.000009f, -0.000104f, -0.000126f, +0.000036f, +0.000006f, + +0.000062f, -0.000086f, +0.000029f, +0.000111f, +0.000050f, +0.000067f, +0.000060f, +0.000064f, +0.000014f, +0.000030f, + -0.000003f, +0.000026f, +0.000007f, -0.000088f, +0.000058f, -0.000035f + }, + { + -0.002038f, +0.019957f, -0.000654f, -0.005187f, -0.000888f, +0.000302f, -0.001982f, +0.000722f, +0.001758f, +0.000285f, + +0.000180f, -0.001618f, -0.003970f, -0.002339f, -0.001953f, -0.001367f, +0.000180f, +0.002312f, -0.000921f, -0.000068f, + -0.000559f, +0.000532f, -0.000216f, +0.000350f, +0.000297f, -0.000201f, +0.003029f, -0.001799f, +0.001454f, +0.001770f, + +0.000599f, -0.002106f, +0.000942f, +0.001151f, +0.000839f, -0.000717f, +0.001010f, +0.000754f, +0.000019f, -0.000440f, + -0.001467f, +0.000160f, +0.000158f, +0.001164f, +0.000887f, +0.000582f, +0.000574f, -0.000738f, +0.000132f, +0.000825f, + +0.000188f, -0.000681f, +0.000012f, +0.000454f, -0.000032f, +0.000177f, -0.000541f, -0.000503f, -0.000197f, +0.000199f, + -0.000054f, +0.000175f, -0.000005f, +0.000066f, -0.000066f, -0.000002f, +0.000009f, +0.000196f, +0.000010f, +0.000049f, + -0.000117f, +0.000261f, +0.000192f, -0.000268f, -0.000107f, -0.000065f, +0.000033f, +0.000264f, -0.000065f, +0.000041f, + -0.000190f, -0.000099f, +0.000092f, +0.000089f, -0.000147f, -0.000121f, -0.000016f, +0.000111f, -0.000095f, -0.000007f, + +0.000053f, +0.000110f, -0.000007f, -0.000052f, -0.000020f, -0.000051f + }, + { + -0.000277f, +0.001464f, +0.000616f, +0.001617f, -0.000795f, +0.000464f, +0.000128f, -0.000190f, -0.000883f, +0.000118f, + -0.000251f, +0.002015f, +0.000602f, +0.000740f, -0.025677f, +0.000989f, +0.003564f, -0.003990f, +0.004623f, +0.002743f, + -0.000585f, +0.000371f, +0.000941f, +0.001363f, -0.002214f, -0.000804f, -0.001021f, +0.000444f, +0.000630f, -0.002221f, + +0.002514f, -0.002092f, +0.000500f, +0.001041f, -0.000954f, -0.000184f, +0.000525f, -0.000647f, +0.000648f, -0.000632f, + +0.000466f, +0.001447f, -0.000462f, -0.000482f, +0.000169f, +0.000119f, +0.000359f, -0.000040f, -0.000229f, +0.000018f, + +0.000087f, -0.000335f, -0.000324f, +0.000188f, +0.000111f, +0.000142f, -0.000117f, -0.000031f, +0.000465f, +0.000432f, + +0.000025f, -0.000581f, +0.000110f, -0.000008f, -0.000067f, -0.000048f, +0.000148f, +0.000032f, -0.000003f, -0.000028f, + -0.000236f, +0.000032f, +0.000154f, +0.000002f, +0.000010f, -0.000120f, -0.000042f, +0.000188f, +0.000064f, +0.000154f, + +0.000013f, -0.000193f, -0.000046f, +0.000125f, -0.000094f, +0.000048f, +0.000014f, +0.000111f, -0.000031f, +0.000196f, + -0.000021f, -0.000047f, -0.000061f, +0.000103f, -0.000039f, -0.000112f + }, + { + +0.002126f, +0.015326f, -0.003159f, +0.002568f, +0.001463f, +0.000731f, -0.002534f, +0.001070f, +0.001555f, +0.003201f, + -0.000588f, -0.000307f, -0.001495f, -0.002901f, +0.010098f, -0.001557f, -0.003450f, +0.001440f, -0.000759f, +0.001040f, + -0.001210f, -0.000179f, +0.001184f, -0.000427f, -0.001819f, +0.001400f, -0.002401f, -0.000341f, -0.000259f, +0.000020f, + +0.000706f, +0.000618f, -0.001351f, +0.001185f, -0.000036f, -0.000477f, +0.000040f, +0.000414f, -0.000832f, -0.000382f, + +0.000037f, +0.000711f, -0.000363f, +0.000401f, +0.000552f, +0.000477f, +0.000108f, +0.000723f, -0.000674f, -0.000211f, + +0.000515f, -0.000305f, -0.000260f, -0.000575f, +0.000258f, -0.000484f, +0.000265f, +0.000524f, -0.000154f, +0.000035f, + +0.000166f, +0.000038f, +0.000001f, +0.000098f, +0.000044f, +0.000119f, +0.000070f, +0.000114f, -0.000022f, +0.000020f, + -0.000061f, +0.000089f, +0.000306f, +0.000053f, -0.000405f, +0.000169f, -0.000122f, +0.000130f, +0.000079f, +0.000094f, + +0.000093f, +0.000119f, +0.000001f, +0.000064f, +0.000084f, -0.000026f, -0.000023f, -0.000053f, -0.000088f, +0.000071f, + -0.000048f, +0.000042f, +0.000092f, +0.000025f, +0.000004f, -0.000035f + } + }, + { + { + -0.000880f, -0.031078f, -0.000227f, +0.000028f, -0.000909f, -0.000908f, +0.000066f, -0.000833f, -0.000007f, +0.000027f, + +0.001619f, +0.000544f, +0.002226f, +0.000062f, +0.003309f, -0.000301f, +0.000869f, +0.000009f, +0.002249f, -0.000853f, + +0.003519f, -0.000705f, +0.000093f, +0.002523f, +0.001590f, +0.003169f, +0.000803f, -0.000304f, -0.000553f, -0.001054f, + -0.003010f, -0.001702f, -0.001027f, +0.000476f, +0.000879f, +0.001313f, -0.001800f, +0.001144f, -0.002500f, +0.000183f, + +0.000610f, -0.000361f, +0.000427f, +0.000864f, +0.000971f, -0.000023f, +0.000246f, -0.000342f, -0.000416f, +0.000486f, + +0.000349f, -0.000198f, -0.000201f, -0.000033f, -0.000321f, -0.000289f, -0.000117f, +0.000104f, +0.000005f, +0.000206f, + +0.000183f, +0.000260f, -0.000190f, -0.000295f, -0.000218f, +0.000012f, -0.000060f, +0.000006f, +0.000274f, -0.000306f, + -0.000167f, +0.000116f, +0.000158f, +0.000196f, +0.000390f, -0.000010f, +0.000038f, +0.000028f, -0.000005f, +0.000009f, + +0.000016f, +0.000107f, +0.000072f, +0.000044f, -0.000154f, -0.000036f, +0.000041f, -0.000080f, -0.000014f, -0.000066f, + +0.000091f, -0.000017f, -0.000059f, -0.000000f, -0.000049f, +0.000018f + }, + { + +0.013684f, -0.087790f, -0.000936f, -0.005775f, -0.000450f, +0.000586f, -0.000748f, -0.000328f, -0.001212f, +0.001516f, + +0.000200f, +0.001030f, -0.000479f, -0.000384f, -0.001419f, -0.000218f, +0.000555f, -0.001503f, -0.001805f, -0.000163f, + +0.000152f, -0.000893f, -0.000440f, +0.001176f, +0.001063f, +0.000481f, -0.000325f, +0.001248f, +0.001482f, +0.000320f, + +0.001349f, -0.000107f, -0.001621f, -0.000938f, +0.001038f, +0.000211f, +0.001280f, -0.000528f, +0.000377f, -0.000580f, + +0.000483f, -0.000403f, +0.000200f, -0.000033f, +0.000607f, -0.000325f, -0.000080f, -0.000367f, +0.000038f, +0.000053f, + -0.000221f, +0.000705f, -0.000015f, +0.000074f, -0.000165f, -0.000289f, -0.000399f, -0.000359f, +0.000375f, +0.000237f, + +0.000131f, -0.000291f, -0.000229f, +0.000090f, -0.000069f, +0.000144f, +0.000043f, -0.000272f, +0.000024f, +0.000138f, + -0.000181f, -0.000088f, +0.000007f, -0.000096f, -0.000201f, -0.000032f, -0.000106f, -0.000004f, -0.000110f, +0.000213f, + +0.000119f, -0.000209f, -0.000017f, +0.000049f, -0.000087f, -0.000236f, +0.000081f, +0.000011f, +0.000005f, +0.000016f, + +0.000014f, +0.000066f, +0.000028f, -0.000038f, -0.000033f, -0.000014f + }, + { + +0.004049f, -0.062907f, -0.018174f, +0.002707f, -0.001723f, +0.001038f, +0.000646f, -0.000409f, -0.000777f, -0.001336f, + -0.000898f, -0.001136f, +0.000729f, +0.002765f, +0.004503f, -0.001445f, +0.004730f, -0.000227f, +0.001976f, +0.000300f, + +0.002533f, -0.000038f, +0.000521f, -0.001539f, -0.000252f, +0.000750f, +0.000317f, -0.000202f, -0.001015f, -0.001432f, + +0.001066f, +0.001386f, +0.000073f, +0.000122f, -0.001277f, -0.000863f, +0.001294f, -0.000982f, -0.000530f, +0.000682f, + -0.000860f, +0.001711f, -0.000732f, +0.000219f, +0.000230f, -0.001049f, +0.000171f, +0.000306f, +0.000954f, -0.000277f, + -0.000414f, -0.000237f, -0.000010f, -0.000006f, -0.000261f, +0.000130f, +0.000311f, +0.000027f, +0.000522f, +0.000308f, + +0.000171f, +0.000471f, -0.000367f, -0.000012f, +0.000075f, +0.000109f, -0.000220f, +0.000262f, +0.000203f, -0.000172f, + -0.000023f, +0.000028f, -0.000012f, +0.000063f, -0.000013f, -0.000066f, -0.000016f, -0.000021f, -0.000114f, -0.000008f, + -0.000104f, -0.000094f, +0.000072f, -0.000160f, -0.000064f, +0.000140f, +0.000011f, +0.000012f, +0.000026f, -0.000048f, + -0.000022f, -0.000014f, +0.000010f, -0.000051f, +0.000016f, +0.000035f + }, + { + +0.000618f, +0.005872f, -0.001399f, +0.001055f, -0.000254f, -0.000160f, +0.000126f, +0.000315f, +0.000097f, -0.000427f, + -0.000493f, -0.000977f, -0.000610f, -0.001690f, -0.001956f, -0.002518f, +0.002471f, +0.003448f, +0.003506f, +0.001931f, + -0.000100f, -0.000523f, -0.001126f, -0.000568f, -0.001080f, +0.001359f, +0.001435f, -0.000711f, +0.000728f, -0.000081f, + -0.001453f, +0.001358f, +0.000055f, -0.000165f, -0.000244f, +0.001099f, +0.000024f, +0.000678f, +0.000326f, +0.000356f, + +0.000105f, -0.000013f, -0.000375f, -0.000660f, -0.000037f, +0.000296f, -0.000132f, -0.000127f, +0.000641f, -0.000033f, + -0.000278f, -0.000090f, +0.000196f, +0.000209f, +0.000017f, +0.000281f, -0.000088f, +0.000233f, +0.000118f, -0.000019f, + -0.000369f, +0.000163f, +0.000265f, +0.000134f, +0.000056f, -0.000117f, -0.000017f, +0.000191f, -0.000031f, -0.000152f, + -0.000210f, +0.000146f, -0.000015f, -0.000060f, -0.000045f, -0.000004f, +0.000245f, +0.000057f, -0.000040f, -0.000053f, + -0.000116f, -0.000012f, -0.000096f, -0.000012f, +0.000002f, -0.000074f, +0.000081f, +0.000060f, +0.000061f, +0.000002f, + +0.000030f, +0.000056f, +0.000028f, -0.000058f, +0.000013f, +0.000020f + }, + { + +0.014622f, -0.023180f, -0.004011f, -0.000162f, +0.000789f, -0.000659f, -0.001300f, -0.000194f, +0.000438f, -0.000548f, + +0.002105f, +0.002546f, -0.000206f, +0.000021f, +0.000972f, -0.000899f, -0.000183f, +0.007940f, +0.001875f, +0.001074f, + +0.001865f, -0.000106f, +0.000332f, -0.000329f, +0.000207f, +0.000063f, -0.000437f, -0.000007f, -0.000798f, +0.000050f, + +0.000692f, +0.000235f, +0.000166f, +0.000270f, -0.000179f, -0.000391f, -0.001283f, +0.001140f, +0.000494f, -0.000580f, + +0.000166f, +0.000202f, +0.000154f, -0.000975f, +0.000051f, +0.000489f, -0.000224f, +0.000118f, +0.000353f, -0.000249f, + +0.000379f, +0.000143f, -0.000421f, -0.000349f, -0.000708f, -0.000519f, -0.000893f, -0.000110f, +0.000305f, -0.000069f, + +0.000149f, +0.000184f, -0.000176f, -0.000104f, -0.000130f, +0.000241f, -0.000017f, -0.000277f, +0.000282f, +0.000010f, + -0.000059f, -0.000120f, -0.000077f, +0.000175f, -0.000017f, -0.000240f, +0.000127f, -0.000025f, +0.000096f, +0.000128f, + +0.000020f, -0.000047f, +0.000031f, -0.000128f, +0.000047f, -0.000105f, +0.000068f, +0.000091f, -0.000117f, +0.000027f, + -0.000040f, +0.000040f, +0.000048f, -0.000054f, +0.000034f, +0.000027f + }, + { + +0.000104f, +0.004501f, +0.002755f, -0.000992f, +0.000255f, -0.000167f, +0.000166f, -0.000358f, +0.000471f, -0.000025f, + -0.000337f, -0.000250f, +0.000241f, +0.001996f, -0.001151f, -0.000367f, -0.000293f, +0.000068f, +0.001016f, -0.015846f, + -0.001833f, -0.002716f, -0.000609f, -0.002173f, +0.001902f, -0.000230f, -0.000384f, -0.001726f, -0.000074f, +0.003250f, + +0.002269f, -0.001048f, +0.000175f, +0.000815f, +0.000555f, -0.001388f, -0.000547f, -0.000263f, -0.000803f, -0.000426f, + +0.000241f, +0.000285f, +0.000555f, -0.000059f, -0.000319f, -0.000091f, -0.000551f, -0.000224f, -0.000137f, -0.000554f, + +0.000242f, +0.000108f, -0.000219f, +0.000309f, -0.000184f, -0.000438f, -0.000162f, -0.000069f, +0.000011f, -0.000390f, + +0.000009f, +0.000099f, -0.000045f, +0.000070f, +0.000117f, +0.000074f, +0.000149f, -0.000006f, +0.000143f, -0.000069f, + +0.000304f, +0.000094f, -0.000110f, -0.000067f, +0.000035f, +0.000198f, +0.000108f, +0.000223f, -0.000084f, -0.000077f, + +0.000081f, -0.000014f, -0.000121f, -0.000061f, +0.000116f, +0.000017f, +0.000059f, -0.000101f, +0.000028f, +0.000092f, + -0.000076f, -0.000020f, +0.000134f, -0.000051f, -0.000037f, +0.000030f + }, + { + +0.006822f, -0.115110f, -0.006962f, +0.003654f, +0.000084f, +0.000981f, +0.000315f, -0.000552f, -0.000462f, -0.000944f, + +0.001196f, +0.000292f, +0.000935f, +0.000373f, +0.000696f, +0.000351f, +0.000898f, -0.000658f, -0.000425f, -0.000277f, + -0.000142f, -0.000470f, -0.000180f, -0.000546f, +0.000506f, +0.000010f, -0.000094f, +0.000553f, -0.000167f, +0.000882f, + +0.000915f, +0.000186f, +0.000687f, -0.000672f, +0.000079f, -0.000875f, -0.000407f, -0.001580f, +0.001783f, -0.000032f, + -0.000223f, +0.000156f, -0.001291f, +0.000483f, +0.000092f, +0.000128f, -0.000197f, -0.000188f, +0.000145f, -0.000308f, + +0.000042f, -0.000175f, +0.000138f, -0.000288f, +0.000230f, +0.000166f, +0.000267f, +0.000322f, +0.000076f, +0.000145f, + -0.000198f, -0.000201f, +0.000014f, +0.000191f, +0.000053f, +0.000103f, +0.000162f, -0.000158f, -0.000128f, +0.000100f, + -0.000058f, -0.000030f, +0.000233f, -0.000106f, -0.000138f, -0.000039f, +0.000223f, -0.000038f, +0.000054f, +0.000123f, + -0.000158f, -0.000055f, +0.000117f, +0.000009f, -0.000051f, +0.000156f, +0.000137f, -0.000070f, -0.000079f, -0.000063f, + +0.000053f, -0.000067f, -0.000056f, +0.000039f, +0.000052f, -0.000026f + }, + { + -0.000275f, +0.000676f, -0.000970f, +0.000857f, -0.000369f, +0.000159f, +0.000192f, -0.000238f, +0.000470f, -0.000023f, + -0.000616f, -0.000993f, +0.000876f, -0.002023f, -0.016004f, -0.004041f, -0.003215f, +0.000618f, -0.000714f, +0.000651f, + -0.003477f, +0.000552f, +0.000849f, +0.000220f, -0.000191f, -0.006238f, -0.000532f, -0.000691f, -0.002561f, -0.000873f, + -0.000078f, +0.000811f, +0.000072f, +0.000155f, +0.000001f, +0.000203f, -0.000082f, +0.000451f, -0.000299f, +0.000659f, + -0.000232f, -0.000477f, -0.000529f, +0.000019f, -0.000026f, +0.000172f, -0.000117f, -0.000657f, -0.000430f, +0.000320f, + +0.000210f, -0.000260f, +0.000033f, +0.000196f, +0.000017f, -0.000136f, +0.000263f, +0.000145f, -0.000519f, +0.000260f, + +0.000085f, +0.000087f, -0.000077f, +0.000010f, +0.000010f, -0.000091f, +0.000160f, +0.000140f, -0.000141f, +0.000054f, + -0.000011f, -0.000049f, -0.000079f, +0.000091f, +0.000131f, +0.000066f, +0.000230f, +0.000104f, -0.000045f, +0.000096f, + -0.000146f, -0.000048f, +0.000007f, +0.000046f, +0.000102f, +0.000013f, +0.000065f, -0.000050f, -0.000024f, +0.000103f, + -0.000091f, -0.000004f, +0.000032f, +0.000012f, -0.000066f, -0.000053f + }, + { + +0.007730f, +0.078546f, +0.004586f, +0.001450f, +0.000145f, +0.000508f, -0.000673f, -0.001090f, +0.000686f, +0.001027f, + -0.000399f, -0.000679f, -0.002264f, +0.001243f, +0.001910f, +0.001238f, +0.001809f, +0.000150f, +0.000129f, +0.000492f, + +0.000660f, -0.000114f, +0.000523f, +0.000745f, -0.000869f, -0.000650f, +0.000649f, -0.000162f, -0.001412f, -0.000283f, + +0.000825f, +0.000089f, -0.000807f, +0.000632f, +0.000437f, +0.000599f, +0.000212f, -0.000238f, +0.000040f, -0.001697f, + -0.001951f, -0.000901f, -0.000335f, +0.000965f, +0.000153f, +0.000277f, +0.000461f, +0.000025f, +0.000606f, -0.000305f, + +0.000070f, -0.000029f, -0.000232f, -0.000227f, -0.000671f, -0.000406f, +0.000352f, +0.000084f, +0.000198f, +0.000145f, + +0.000240f, -0.000208f, +0.000032f, -0.000200f, -0.000315f, -0.000011f, +0.000052f, -0.000401f, -0.000020f, +0.000309f, + +0.000054f, -0.000181f, -0.000050f, +0.000070f, +0.000180f, -0.000182f, +0.000092f, +0.000037f, -0.000099f, +0.000068f, + +0.000047f, -0.000016f, -0.000063f, +0.000016f, -0.000146f, +0.000010f, +0.000144f, +0.000099f, -0.000006f, -0.000142f, + -0.000116f, +0.000047f, -0.000028f, +0.000110f, -0.000004f, -0.000004f + }, + { + +0.000598f, +0.001423f, +0.003180f, +0.001458f, -0.001953f, +0.002633f, +0.000143f, +0.000665f, -0.000657f, -0.000719f, + -0.000889f, +0.000057f, +0.000267f, +0.001351f, +0.001216f, +0.003366f, +0.001113f, +0.000879f, +0.005172f, +0.000431f, + -0.001973f, +0.000064f, +0.001599f, +0.001265f, +0.000415f, -0.000646f, +0.000860f, +0.000800f, -0.000564f, +0.000566f, + -0.001762f, +0.000682f, +0.001086f, -0.001185f, +0.000996f, +0.000829f, +0.000189f, -0.000077f, +0.000055f, -0.000307f, + +0.000563f, +0.000453f, -0.000039f, -0.000033f, +0.001065f, -0.000171f, -0.000406f, +0.000227f, -0.000194f, +0.000425f, + -0.000382f, -0.000264f, +0.000654f, -0.000392f, -0.000537f, +0.000171f, +0.000392f, -0.000106f, -0.000092f, +0.000059f, + -0.000329f, +0.000114f, +0.000117f, +0.000022f, -0.000040f, -0.000163f, +0.000241f, +0.000072f, +0.000323f, -0.000064f, + -0.000117f, -0.000095f, -0.000225f, +0.000222f, +0.000019f, -0.000024f, +0.000069f, -0.000040f, -0.000046f, -0.000008f, + +0.000054f, -0.000002f, +0.000027f, +0.000012f, +0.000079f, +0.000011f, -0.000099f, +0.000032f, -0.000045f, +0.000028f, + -0.000008f, +0.000017f, -0.000102f, -0.000014f, +0.000058f, +0.000036f + }, + { + -0.007562f, +0.032197f, +0.010437f, +0.002182f, +0.000154f, -0.003954f, -0.004737f, -0.002739f, +0.000537f, +0.002120f, + +0.000193f, +0.000738f, +0.000038f, +0.001275f, +0.000724f, -0.000396f, -0.002485f, -0.000980f, +0.000935f, +0.000911f, + -0.000679f, +0.000956f, -0.000535f, -0.000881f, -0.001483f, -0.000515f, -0.000370f, -0.000293f, +0.000540f, +0.000952f, + -0.000103f, -0.000188f, +0.000069f, -0.000326f, -0.000209f, -0.000863f, +0.000921f, +0.000302f, -0.000241f, -0.000262f, + -0.000325f, -0.000097f, -0.000389f, -0.000709f, +0.000100f, +0.000748f, +0.000327f, +0.000063f, -0.000388f, +0.000305f, + +0.000665f, -0.000113f, -0.000296f, -0.000159f, -0.000360f, -0.000285f, -0.000091f, +0.000163f, -0.000185f, +0.000126f, + -0.000009f, -0.000183f, -0.000173f, +0.000073f, +0.000096f, -0.000165f, +0.000140f, -0.000062f, +0.000026f, -0.000170f, + +0.000087f, +0.000018f, -0.000019f, -0.000002f, -0.000015f, +0.000120f, -0.000086f, -0.000120f, -0.000029f, +0.000013f, + +0.000014f, +0.000073f, -0.000094f, +0.000103f, -0.000042f, +0.000092f, +0.000090f, +0.000034f, -0.000044f, +0.000001f, + +0.000020f, -0.000016f, -0.000062f, +0.000019f, +0.000063f, +0.000039f + }, + { + -0.000640f, +0.003881f, +0.002373f, -0.001415f, +0.000655f, -0.001089f, +0.000094f, -0.000053f, -0.000070f, -0.000775f, + -0.000829f, +0.000109f, +0.002909f, +0.005503f, -0.002240f, +0.003495f, -0.000111f, +0.000190f, +0.001394f, +0.000754f, + +0.003414f, +0.002313f, +0.000046f, +0.000514f, -0.002046f, -0.002111f, -0.000519f, -0.000544f, +0.001221f, +0.001111f, + -0.001606f, +0.001111f, -0.000323f, +0.000424f, -0.000446f, +0.000134f, -0.000613f, +0.000307f, +0.000302f, +0.000480f, + +0.000343f, +0.000208f, +0.000665f, +0.000648f, +0.000007f, +0.000425f, +0.000099f, +0.000479f, +0.000192f, +0.000844f, + +0.000368f, -0.000245f, +0.000152f, +0.000348f, -0.000141f, -0.000423f, -0.000776f, -0.000393f, -0.000047f, +0.000293f, + +0.000211f, +0.000168f, -0.000206f, -0.000266f, +0.000109f, +0.000057f, -0.000354f, +0.000015f, -0.000077f, +0.000006f, + +0.000215f, +0.000040f, -0.000026f, +0.000111f, +0.000051f, +0.000111f, -0.000093f, -0.000101f, +0.000008f, -0.000073f, + +0.000027f, -0.000035f, -0.000061f, +0.000102f, +0.000041f, +0.000033f, +0.000050f, +0.000028f, -0.000011f, +0.000039f, + +0.000022f, +0.000073f, -0.000026f, -0.000045f, +0.000036f, +0.000003f + }, + { + +0.001727f, +0.003592f, -0.000294f, +0.001511f, -0.001026f, +0.001793f, +0.000322f, +0.001671f, +0.000329f, +0.000116f, + +0.001076f, -0.000048f, -0.000557f, -0.008597f, -0.003922f, +0.000768f, -0.000226f, +0.000184f, -0.000585f, +0.002411f, + -0.000553f, -0.000207f, -0.000328f, -0.000227f, +0.001449f, +0.001872f, +0.002318f, -0.000797f, +0.001838f, +0.001637f, + -0.000003f, -0.001004f, +0.000202f, +0.000957f, +0.000599f, +0.001038f, -0.000670f, +0.000747f, +0.000395f, -0.000528f, + -0.000815f, -0.000333f, +0.000400f, +0.000348f, -0.000335f, +0.000205f, +0.000042f, -0.000391f, -0.000186f, +0.000177f, + +0.000371f, +0.000115f, -0.000150f, +0.000638f, +0.000182f, +0.000155f, -0.000117f, -0.000493f, -0.000499f, +0.000361f, + +0.000063f, +0.000048f, -0.000128f, +0.000215f, -0.000163f, -0.000296f, +0.000034f, +0.000097f, +0.000137f, -0.000044f, + -0.000084f, +0.000154f, +0.000218f, +0.000024f, +0.000042f, -0.000012f, -0.000164f, +0.000296f, +0.000119f, +0.000103f, + -0.000136f, -0.000255f, -0.000017f, +0.000125f, +0.000025f, -0.000124f, -0.000089f, -0.000117f, -0.000101f, -0.000073f, + +0.000058f, +0.000033f, +0.000091f, +0.000014f, +0.000029f, +0.000014f + }, + { + -0.000045f, +0.002073f, -0.002852f, +0.000666f, +0.000661f, -0.000456f, -0.000131f, +0.000453f, +0.000161f, -0.001227f, + -0.000459f, +0.001588f, +0.001491f, -0.012117f, +0.004399f, -0.007132f, +0.003577f, -0.001004f, +0.000589f, +0.004165f, + +0.002245f, +0.000466f, +0.002580f, +0.000936f, -0.003053f, +0.002124f, -0.002212f, +0.000296f, +0.000144f, +0.001272f, + -0.001433f, -0.000468f, -0.000440f, +0.000831f, -0.002070f, -0.000737f, +0.000299f, -0.000411f, +0.000953f, -0.000657f, + +0.000143f, +0.000985f, +0.000211f, -0.000162f, -0.000145f, +0.000359f, +0.000161f, -0.000223f, -0.000101f, -0.000210f, + +0.000312f, +0.000013f, -0.000235f, -0.000263f, +0.000352f, -0.000296f, -0.000003f, +0.000118f, +0.000302f, +0.000230f, + -0.000062f, +0.000025f, -0.000219f, +0.000020f, +0.000214f, -0.000046f, +0.000213f, +0.000159f, -0.000020f, -0.000016f, + -0.000133f, -0.000011f, +0.000243f, -0.000200f, -0.000061f, +0.000085f, -0.000060f, +0.000139f, +0.000051f, +0.000032f, + +0.000129f, -0.000123f, -0.000216f, +0.000074f, -0.000095f, -0.000046f, -0.000005f, +0.000095f, -0.000080f, +0.000059f, + +0.000086f, +0.000063f, -0.000049f, +0.000079f, +0.000008f, -0.000104f + }, + { + +0.002753f, +0.013921f, +0.001082f, -0.003762f, +0.001571f, +0.002680f, -0.000519f, +0.001395f, +0.001606f, +0.000754f, + +0.002287f, -0.001327f, -0.000306f, +0.004363f, -0.000999f, -0.001197f, +0.000995f, +0.002100f, -0.001861f, +0.000733f, + -0.001404f, +0.000596f, +0.000487f, +0.000781f, -0.001184f, -0.000945f, -0.001082f, +0.000780f, -0.000709f, +0.000719f, + +0.000104f, +0.000766f, -0.000637f, +0.000218f, +0.000787f, -0.000729f, -0.000921f, +0.000282f, -0.000786f, +0.000263f, + +0.000501f, -0.000126f, -0.000214f, +0.000093f, +0.000973f, +0.000325f, +0.000280f, +0.000194f, +0.000130f, -0.000565f, + +0.000184f, +0.000328f, -0.000100f, -0.000299f, +0.000013f, -0.000141f, -0.000108f, +0.000102f, +0.000133f, +0.000290f, + -0.000099f, -0.000140f, -0.000132f, +0.000245f, +0.000118f, -0.000025f, +0.000132f, -0.000169f, -0.000013f, +0.000041f, + -0.000018f, -0.000067f, +0.000184f, +0.000183f, +0.000066f, -0.000123f, -0.000178f, +0.000197f, +0.000045f, +0.000029f, + +0.000111f, +0.000209f, +0.000029f, +0.000026f, +0.000057f, +0.000049f, -0.000014f, +0.000009f, +0.000004f, -0.000069f, + +0.000080f, -0.000007f, +0.000074f, +0.000080f, +0.000031f, -0.000040f + } + }, + { + { + +0.000334f, -0.025325f, +0.005920f, +0.001240f, -0.000460f, -0.000023f, +0.000623f, -0.000035f, +0.001183f, -0.000337f, + +0.000818f, -0.001704f, +0.000700f, -0.000412f, +0.000478f, -0.002966f, -0.000130f, +0.000685f, +0.000619f, -0.001187f, + +0.002842f, -0.001019f, -0.000042f, +0.001715f, +0.001081f, +0.001209f, +0.000807f, +0.001782f, +0.001303f, +0.000649f, + +0.000302f, +0.000569f, +0.000677f, -0.000680f, -0.001027f, -0.001043f, -0.001573f, +0.001819f, -0.001982f, +0.000385f, + -0.000076f, -0.000626f, +0.000030f, +0.000529f, -0.000149f, +0.000059f, +0.000285f, -0.000330f, +0.000109f, +0.000269f, + -0.000304f, -0.000328f, -0.000048f, -0.000347f, +0.000083f, +0.000134f, +0.000004f, +0.000211f, -0.000158f, +0.000070f, + -0.000196f, +0.000166f, +0.000182f, +0.000065f, -0.000023f, +0.000154f, +0.000086f, +0.000002f, +0.000079f, -0.000084f, + -0.000057f, -0.000056f, +0.000196f, -0.000051f, +0.000208f, -0.000216f, +0.000071f, +0.000010f, +0.000060f, +0.000119f, + +0.000020f, -0.000010f, +0.000016f, +0.000069f, +0.000056f, +0.000029f, -0.000002f, -0.000041f, +0.000025f, -0.000037f, + -0.000076f, +0.000042f, -0.000057f, +0.000086f, +0.000020f, -0.000046f + }, + { + -0.009411f, -0.083437f, +0.023110f, -0.005002f, -0.001782f, -0.001021f, +0.000052f, +0.000742f, -0.002478f, +0.001209f, + +0.000182f, -0.000148f, +0.000557f, -0.000204f, -0.002049f, -0.000343f, -0.001167f, -0.000152f, +0.001909f, -0.000648f, + +0.000113f, -0.000334f, -0.000600f, +0.000524f, +0.000161f, +0.000641f, -0.000253f, +0.000450f, +0.000504f, -0.000688f, + +0.000024f, -0.000036f, -0.000277f, +0.000240f, +0.000007f, -0.000957f, +0.000421f, +0.000104f, +0.000416f, -0.001101f, + +0.000331f, +0.000375f, +0.000732f, -0.000476f, -0.000181f, +0.000317f, -0.000745f, +0.000076f, -0.000205f, -0.000331f, + -0.000744f, -0.000273f, +0.000026f, +0.000177f, -0.000132f, +0.000143f, -0.000164f, +0.000124f, +0.000174f, +0.000058f, + +0.000029f, +0.000026f, -0.000080f, +0.000272f, +0.000174f, +0.000136f, -0.000175f, -0.000260f, -0.000128f, +0.000182f, + -0.000112f, +0.000050f, -0.000032f, +0.000049f, -0.000022f, -0.000228f, +0.000066f, +0.000052f, -0.000070f, +0.000019f, + +0.000041f, +0.000017f, -0.000045f, +0.000045f, +0.000053f, +0.000052f, -0.000135f, +0.000114f, -0.000066f, +0.000020f, + -0.000029f, +0.000016f, -0.000017f, +0.000053f, -0.000046f, +0.000042f + }, + { + -0.003242f, -0.021477f, +0.015182f, +0.003844f, +0.003903f, +0.000362f, -0.000133f, +0.000289f, +0.000253f, +0.000606f, + -0.000456f, -0.001214f, -0.000205f, -0.000255f, +0.004340f, -0.000306f, +0.001903f, -0.002872f, +0.002582f, -0.001072f, + +0.002000f, +0.000959f, +0.001412f, -0.000870f, -0.001276f, -0.000048f, +0.000583f, +0.001422f, +0.000387f, -0.000269f, + +0.000534f, +0.000842f, +0.000210f, +0.000911f, -0.001035f, -0.000730f, +0.001254f, -0.000690f, +0.000617f, +0.001517f, + -0.001599f, +0.001741f, -0.000384f, +0.000557f, +0.000348f, -0.000723f, -0.000278f, -0.000193f, +0.000306f, +0.000064f, + -0.000098f, -0.000578f, -0.000010f, -0.000174f, -0.000247f, +0.000131f, -0.000138f, -0.000024f, +0.000286f, +0.000132f, + -0.000195f, +0.000107f, -0.000159f, +0.000223f, -0.000211f, -0.000119f, -0.000365f, +0.000116f, +0.000159f, -0.000097f, + +0.000030f, -0.000028f, +0.000050f, -0.000012f, +0.000136f, -0.000016f, -0.000022f, -0.000000f, +0.000021f, -0.000054f, + -0.000103f, -0.000066f, -0.000037f, +0.000068f, -0.000090f, -0.000026f, +0.000039f, -0.000053f, -0.000019f, +0.000025f, + -0.000091f, +0.000018f, -0.000009f, +0.000039f, -0.000031f, -0.000050f + }, + { + -0.000308f, +0.007487f, -0.000055f, +0.000506f, +0.000414f, -0.000101f, -0.000075f, -0.000080f, +0.000029f, +0.000269f, + +0.000475f, -0.000043f, -0.000746f, -0.001105f, +0.005416f, -0.001870f, -0.004206f, +0.000395f, +0.001535f, +0.000031f, + +0.000806f, -0.000188f, -0.000988f, +0.000787f, -0.000805f, -0.000661f, -0.002067f, -0.001409f, +0.000161f, -0.000228f, + -0.002228f, +0.001078f, +0.000666f, +0.000759f, -0.000546f, +0.000537f, +0.001417f, +0.000425f, -0.000354f, +0.000693f, + -0.000130f, -0.000142f, +0.000027f, -0.000277f, +0.000014f, +0.000028f, -0.000152f, -0.000345f, +0.000301f, +0.000228f, + +0.000003f, -0.000394f, +0.000112f, +0.000089f, -0.000240f, +0.000416f, -0.000229f, -0.000317f, +0.000292f, +0.000143f, + -0.000326f, -0.000118f, +0.000148f, -0.000166f, -0.000045f, +0.000075f, +0.000006f, +0.000163f, -0.000061f, +0.000075f, + -0.000085f, -0.000136f, -0.000055f, -0.000051f, +0.000116f, -0.000131f, +0.000043f, +0.000041f, +0.000114f, -0.000012f, + -0.000015f, -0.000020f, +0.000067f, -0.000031f, +0.000064f, -0.000022f, -0.000056f, -0.000011f, +0.000051f, -0.000005f, + -0.000053f, -0.000047f, +0.000031f, +0.000038f, -0.000004f, +0.000029f + }, + { + -0.003799f, -0.040216f, +0.001691f, -0.002482f, -0.000494f, +0.000276f, -0.000580f, -0.000863f, +0.000700f, +0.000021f, + +0.000002f, +0.001761f, -0.000461f, +0.001019f, +0.000712f, -0.001409f, +0.000995f, +0.005930f, -0.000693f, -0.000011f, + +0.000118f, -0.000391f, +0.000872f, +0.000862f, -0.000885f, +0.001129f, -0.000257f, +0.000582f, -0.001411f, -0.000161f, + -0.000275f, -0.000563f, -0.000805f, +0.000412f, +0.000112f, -0.000013f, -0.001871f, -0.001357f, -0.000347f, +0.000240f, + +0.000006f, -0.000179f, +0.000171f, -0.000471f, -0.000278f, -0.000277f, -0.000141f, +0.000125f, +0.000117f, -0.000331f, + -0.000273f, -0.000207f, +0.000521f, -0.000105f, -0.000110f, +0.000088f, +0.000077f, -0.000141f, -0.000152f, -0.000340f, + +0.000094f, +0.000125f, -0.000121f, +0.000185f, +0.000112f, +0.000028f, -0.000063f, -0.000258f, +0.000167f, +0.000006f, + +0.000030f, +0.000010f, -0.000260f, -0.000128f, -0.000015f, -0.000014f, +0.000026f, +0.000139f, -0.000014f, -0.000083f, + -0.000005f, +0.000056f, +0.000001f, +0.000085f, +0.000002f, -0.000163f, +0.000037f, +0.000003f, -0.000021f, -0.000017f, + +0.000008f, +0.000016f, +0.000041f, -0.000031f, -0.000050f, -0.000034f + }, + { + -0.000524f, -0.004345f, +0.000853f, +0.000153f, +0.000139f, -0.000348f, -0.000131f, -0.000368f, +0.000250f, -0.000058f, + +0.000449f, +0.000216f, +0.000876f, +0.000248f, -0.002889f, +0.000900f, +0.001591f, -0.000260f, +0.003368f, -0.009970f, + +0.000343f, -0.001373f, +0.001971f, +0.000136f, +0.000324f, -0.001252f, +0.000616f, -0.001486f, -0.001610f, +0.002349f, + +0.002618f, -0.000173f, -0.000385f, +0.000024f, +0.000820f, -0.000471f, -0.000058f, +0.000360f, -0.000426f, +0.000030f, + -0.000414f, +0.000975f, +0.000803f, +0.000142f, +0.000256f, -0.000193f, -0.000256f, -0.000088f, -0.000070f, -0.000594f, + -0.000286f, -0.000071f, -0.000306f, -0.000257f, -0.000476f, -0.000098f, +0.000244f, +0.000048f, +0.000318f, -0.000049f, + +0.000042f, -0.000060f, -0.000110f, +0.000079f, -0.000064f, -0.000021f, +0.000022f, -0.000257f, +0.000092f, -0.000135f, + +0.000037f, +0.000138f, +0.000100f, -0.000014f, -0.000124f, +0.000011f, -0.000043f, +0.000274f, -0.000098f, +0.000066f, + +0.000012f, +0.000158f, +0.000057f, -0.000039f, -0.000103f, -0.000003f, +0.000066f, -0.000090f, +0.000019f, +0.000122f, + -0.000020f, -0.000108f, -0.000015f, +0.000047f, +0.000052f, +0.000102f + }, + { + +0.005400f, -0.091752f, +0.011522f, +0.002923f, -0.000876f, +0.000806f, +0.000049f, +0.000648f, +0.000896f, -0.001041f, + +0.000238f, -0.000014f, -0.000010f, -0.000611f, -0.000004f, +0.000747f, +0.000630f, -0.000522f, +0.001555f, -0.000592f, + -0.000576f, -0.000640f, -0.000007f, -0.000143f, +0.000480f, -0.000038f, -0.000324f, +0.000844f, -0.000400f, +0.000273f, + +0.000522f, -0.000258f, +0.000651f, -0.000631f, -0.000040f, -0.000019f, +0.000202f, -0.001640f, +0.000742f, -0.000487f, + +0.000375f, +0.001086f, -0.000474f, +0.000017f, +0.000273f, +0.000339f, +0.000113f, -0.000090f, -0.000150f, -0.000255f, + -0.000319f, -0.000234f, -0.000277f, -0.000008f, +0.000089f, -0.000031f, +0.000064f, +0.000066f, -0.000120f, +0.000045f, + +0.000010f, +0.000079f, -0.000042f, -0.000022f, -0.000234f, -0.000045f, +0.000063f, +0.000018f, -0.000156f, +0.000007f, + +0.000272f, -0.000160f, -0.000169f, +0.000106f, +0.000069f, -0.000150f, +0.000041f, +0.000018f, -0.000069f, -0.000050f, + +0.000089f, -0.000039f, +0.000069f, +0.000112f, +0.000009f, -0.000098f, +0.000049f, +0.000011f, -0.000031f, -0.000067f, + -0.000006f, +0.000040f, -0.000070f, +0.000004f, -0.000015f, -0.000005f + }, + { + -0.000634f, +0.001003f, +0.001818f, -0.000208f, +0.000193f, +0.000098f, -0.000013f, -0.000499f, -0.000041f, +0.000295f, + +0.000465f, +0.000087f, +0.001539f, -0.000048f, -0.010765f, +0.000021f, -0.000995f, -0.001081f, +0.000096f, +0.002248f, + -0.001984f, -0.000607f, +0.002125f, +0.002430f, +0.001389f, -0.002476f, +0.001262f, +0.000478f, -0.000937f, -0.000852f, + +0.000780f, +0.000129f, -0.000628f, +0.000111f, -0.000210f, -0.000009f, +0.000222f, +0.000348f, -0.000785f, +0.001022f, + -0.000241f, -0.000114f, +0.000272f, +0.000080f, -0.000578f, +0.000085f, -0.000025f, +0.000450f, -0.000752f, -0.000467f, + +0.000229f, -0.000153f, -0.000347f, -0.000240f, +0.000341f, +0.000116f, -0.000091f, +0.000018f, -0.000046f, +0.000041f, + -0.000227f, -0.000174f, +0.000034f, +0.000137f, +0.000081f, -0.000323f, -0.000215f, +0.000116f, +0.000171f, +0.000054f, + -0.000044f, +0.000040f, -0.000130f, -0.000098f, +0.000100f, -0.000002f, +0.000018f, +0.000095f, +0.000044f, +0.000013f, + +0.000083f, +0.000053f, -0.000022f, -0.000131f, -0.000094f, +0.000001f, -0.000022f, +0.000062f, -0.000036f, +0.000028f, + +0.000025f, -0.000020f, +0.000033f, +0.000066f, +0.000009f, +0.000016f + }, + { + -0.006076f, +0.054560f, -0.002434f, -0.001149f, -0.000496f, +0.000336f, +0.000503f, +0.000828f, -0.000970f, +0.000414f, + +0.002297f, -0.000199f, -0.001213f, -0.001767f, +0.001215f, -0.001408f, +0.000104f, -0.000396f, -0.000129f, -0.000208f, + -0.000347f, -0.000099f, -0.000956f, +0.000440f, +0.000510f, -0.000608f, +0.000839f, +0.000185f, -0.000568f, -0.000218f, + -0.000318f, +0.000570f, +0.000069f, +0.000840f, +0.000229f, -0.000141f, -0.000576f, -0.000733f, +0.000343f, -0.000659f, + -0.000428f, +0.000785f, -0.000032f, +0.000031f, -0.000011f, -0.000324f, +0.000230f, +0.000331f, +0.000162f, -0.001155f, + -0.000194f, +0.000208f, -0.000215f, +0.000250f, +0.000542f, +0.000002f, -0.000140f, -0.000303f, +0.000316f, -0.000170f, + +0.000027f, -0.000027f, -0.000004f, +0.000093f, -0.000009f, -0.000239f, +0.000045f, +0.000066f, +0.000040f, +0.000074f, + +0.000100f, -0.000013f, -0.000005f, +0.000127f, +0.000078f, -0.000029f, -0.000160f, +0.000076f, -0.000090f, +0.000103f, + -0.000127f, +0.000060f, +0.000004f, +0.000015f, -0.000048f, -0.000057f, -0.000033f, +0.000077f, +0.000073f, -0.000036f, + +0.000035f, +0.000072f, -0.000021f, -0.000046f, +0.000072f, +0.000014f + }, + { + -0.000513f, +0.005073f, +0.001327f, +0.000281f, -0.000844f, -0.000334f, +0.000947f, +0.001125f, -0.001000f, -0.000338f, + -0.000512f, +0.000749f, -0.001411f, -0.002237f, -0.001042f, +0.003844f, +0.001111f, -0.003533f, +0.001053f, +0.001158f, + -0.001417f, -0.000119f, -0.000502f, +0.000466f, +0.001235f, +0.000443f, +0.000590f, +0.000899f, -0.000744f, -0.000559f, + +0.000049f, -0.000838f, +0.000384f, -0.000859f, -0.000082f, -0.000141f, +0.000162f, +0.000078f, +0.000683f, -0.000247f, + +0.000519f, +0.000494f, +0.000220f, -0.000150f, -0.000333f, +0.000313f, +0.000016f, +0.000462f, -0.000555f, -0.000109f, + +0.000230f, +0.000042f, +0.000393f, -0.000097f, -0.000034f, -0.000365f, +0.000184f, -0.000196f, -0.000054f, +0.000146f, + -0.000126f, +0.000134f, +0.000085f, -0.000174f, -0.000059f, -0.000395f, -0.000039f, -0.000072f, +0.000289f, +0.000256f, + -0.000129f, +0.000036f, -0.000059f, -0.000079f, -0.000020f, +0.000100f, -0.000016f, -0.000077f, -0.000003f, -0.000025f, + -0.000008f, -0.000058f, +0.000028f, +0.000003f, -0.000023f, +0.000091f, -0.000012f, +0.000012f, -0.000019f, -0.000075f, + +0.000061f, -0.000002f, -0.000032f, -0.000041f, +0.000019f, +0.000096f + }, + { + +0.004265f, +0.041440f, +0.004288f, +0.003727f, -0.001515f, +0.002801f, +0.010016f, -0.001590f, -0.000519f, -0.000829f, + -0.000392f, -0.000063f, -0.000116f, -0.000379f, +0.000510f, +0.000820f, -0.001371f, -0.001391f, -0.000735f, -0.000655f, + +0.000164f, -0.000290f, +0.000287f, -0.000404f, -0.000557f, +0.000128f, -0.000363f, -0.000732f, -0.000627f, +0.000482f, + -0.000007f, -0.000056f, -0.000069f, -0.000563f, -0.000300f, +0.000178f, -0.000502f, +0.000012f, +0.000043f, -0.000208f, + -0.000211f, +0.000529f, -0.000532f, -0.000419f, -0.000051f, -0.000135f, +0.000018f, +0.000316f, -0.000044f, -0.000119f, + +0.000454f, -0.000042f, -0.000154f, +0.000361f, +0.000051f, -0.000083f, -0.000554f, -0.000057f, +0.000118f, +0.000170f, + -0.000001f, +0.000024f, +0.000017f, -0.000046f, -0.000093f, -0.000015f, +0.000007f, -0.000095f, -0.000058f, -0.000049f, + +0.000077f, -0.000055f, -0.000088f, +0.000028f, +0.000105f, +0.000026f, +0.000132f, +0.000084f, -0.000115f, +0.000173f, + -0.000110f, -0.000007f, +0.000028f, -0.000125f, +0.000012f, -0.000051f, +0.000140f, -0.000014f, +0.000045f, -0.000018f, + -0.000048f, +0.000004f, +0.000022f, -0.000013f, -0.000086f, +0.000059f + }, + { + +0.000646f, -0.000602f, -0.002076f, +0.000161f, +0.000352f, +0.000233f, -0.000094f, -0.000681f, +0.000088f, +0.000153f, + +0.000249f, +0.000667f, -0.004993f, -0.002453f, +0.000635f, +0.000846f, -0.002632f, -0.000531f, +0.000128f, -0.000773f, + +0.001480f, -0.003233f, -0.000401f, +0.000404f, +0.000431f, -0.000852f, -0.001359f, -0.000446f, -0.000103f, +0.001007f, + +0.000721f, -0.000296f, -0.000114f, +0.000259f, -0.000442f, -0.000042f, -0.001029f, -0.000665f, +0.001216f, -0.000007f, + +0.000133f, +0.000156f, -0.000372f, +0.000124f, -0.000044f, -0.000228f, -0.000085f, +0.000264f, +0.000165f, +0.000072f, + +0.000138f, -0.000224f, -0.000386f, +0.000175f, -0.000102f, +0.000308f, +0.000050f, -0.000023f, -0.000341f, +0.000020f, + -0.000298f, +0.000051f, +0.000130f, -0.000018f, -0.000245f, -0.000172f, +0.000212f, -0.000069f, -0.000013f, -0.000081f, + +0.000185f, +0.000057f, -0.000178f, +0.000054f, -0.000050f, -0.000031f, +0.000095f, +0.000118f, +0.000017f, +0.000021f, + -0.000114f, +0.000078f, +0.000033f, -0.000026f, -0.000029f, +0.000015f, +0.000041f, -0.000057f, -0.000069f, +0.000005f, + -0.000014f, +0.000032f, +0.000038f, +0.000040f, -0.000041f, +0.000003f + }, + { + +0.000260f, +0.002004f, -0.003471f, +0.004301f, -0.002518f, +0.001707f, +0.004089f, +0.001147f, +0.000922f, -0.001136f, + +0.000071f, +0.000251f, +0.001725f, -0.003855f, -0.003440f, +0.001547f, -0.001442f, -0.000000f, +0.000122f, +0.000024f, + +0.000864f, -0.000007f, +0.000421f, +0.000644f, +0.001369f, +0.000140f, +0.001085f, -0.000842f, +0.001378f, +0.001180f, + -0.000652f, -0.000720f, -0.000024f, +0.000519f, -0.000498f, +0.000557f, -0.000177f, +0.000477f, -0.000483f, +0.000778f, + +0.000229f, +0.000287f, +0.000161f, +0.000090f, -0.000826f, -0.000300f, -0.000395f, +0.000331f, -0.000713f, -0.000318f, + +0.000331f, +0.000416f, +0.000103f, +0.000046f, +0.000113f, +0.000290f, +0.000127f, +0.000179f, -0.000078f, +0.000068f, + +0.000163f, -0.000133f, +0.000074f, +0.000137f, -0.000068f, -0.000120f, +0.000008f, -0.000012f, -0.000185f, -0.000011f, + +0.000136f, -0.000043f, +0.000019f, +0.000160f, +0.000104f, -0.000027f, -0.000085f, -0.000028f, +0.000119f, +0.000026f, + +0.000191f, -0.000166f, -0.000133f, -0.000059f, +0.000063f, +0.000173f, +0.000006f, -0.000163f, +0.000018f, -0.000057f, + -0.000008f, -0.000038f, -0.000025f, +0.000089f, +0.000001f, +0.000004f + }, + { + +0.000251f, +0.005872f, -0.000966f, -0.001688f, -0.000385f, -0.000384f, -0.000270f, -0.000215f, +0.001046f, -0.000026f, + -0.000260f, +0.001413f, -0.000849f, -0.003404f, +0.033013f, -0.001366f, -0.000836f, -0.002464f, -0.001581f, +0.002352f, + +0.001448f, +0.000782f, +0.001710f, +0.000193f, -0.001939f, +0.001067f, +0.000158f, +0.000930f, +0.000539f, +0.002857f, + -0.001013f, +0.000834f, -0.000866f, -0.000192f, +0.000012f, -0.000080f, +0.000030f, -0.000444f, -0.000029f, -0.000368f, + -0.000391f, +0.000300f, +0.000137f, -0.000322f, -0.000223f, +0.000183f, -0.000677f, -0.000166f, -0.000098f, -0.000065f, + -0.000242f, +0.000298f, +0.000110f, -0.000242f, +0.000268f, -0.000368f, -0.000181f, +0.000002f, -0.000010f, -0.000105f, + -0.000079f, +0.000523f, -0.000190f, -0.000080f, +0.000141f, +0.000262f, -0.000099f, -0.000156f, +0.000056f, +0.000043f, + +0.000141f, +0.000070f, +0.000002f, -0.000103f, -0.000040f, +0.000065f, +0.000102f, -0.000187f, -0.000051f, -0.000228f, + -0.000012f, +0.000145f, -0.000143f, +0.000033f, +0.000050f, -0.000074f, -0.000104f, -0.000069f, +0.000044f, -0.000101f, + -0.000033f, +0.000104f, +0.000064f, -0.000014f, +0.000012f, +0.000051f + }, + { + -0.003883f, +0.007999f, +0.003868f, -0.002244f, -0.000428f, -0.000596f, +0.001012f, +0.000050f, -0.000450f, +0.000229f, + +0.000209f, +0.000575f, +0.001619f, +0.000373f, -0.007890f, +0.000207f, +0.002943f, +0.001339f, -0.000627f, +0.000895f, + -0.001446f, -0.000355f, -0.000528f, +0.000341f, +0.000564f, -0.000786f, -0.000940f, +0.001589f, +0.000141f, +0.001307f, + -0.000441f, +0.000089f, +0.000163f, -0.000421f, +0.000368f, -0.000201f, -0.000623f, -0.000451f, -0.000458f, +0.000510f, + +0.000529f, +0.000203f, +0.000278f, +0.000114f, +0.000348f, +0.000299f, -0.000049f, -0.000202f, +0.000387f, -0.000313f, + -0.000018f, -0.000087f, +0.000082f, +0.000386f, +0.000271f, +0.000363f, -0.000043f, -0.000185f, +0.000227f, +0.000225f, + -0.000022f, +0.000003f, -0.000341f, -0.000086f, +0.000071f, -0.000004f, +0.000016f, -0.000237f, +0.000054f, -0.000084f, + +0.000150f, -0.000104f, -0.000246f, -0.000033f, +0.000252f, +0.000050f, -0.000131f, +0.000096f, -0.000028f, -0.000020f, + -0.000025f, -0.000044f, -0.000015f, +0.000003f, +0.000001f, +0.000045f, +0.000013f, -0.000119f, +0.000184f, -0.000110f, + +0.000098f, +0.000041f, -0.000020f, +0.000020f, -0.000010f, +0.000039f + } + }, + { + { + -0.000332f, -0.011102f, -0.004470f, +0.001800f, +0.000766f, -0.000106f, +0.000263f, +0.000580f, +0.000197f, +0.000416f, + +0.000036f, -0.000182f, -0.000804f, -0.000866f, -0.000667f, -0.000030f, +0.000325f, -0.000983f, -0.000890f, -0.000830f, + +0.001845f, -0.000818f, +0.000122f, +0.001008f, +0.001072f, +0.001550f, +0.000946f, +0.001222f, +0.000854f, +0.000906f, + +0.000350f, +0.001718f, -0.000239f, -0.001423f, -0.000108f, -0.002470f, -0.000348f, +0.000379f, +0.000072f, +0.000708f, + -0.000127f, -0.000165f, -0.000066f, +0.000300f, -0.000211f, +0.000324f, +0.000062f, -0.000005f, +0.000242f, -0.000422f, + -0.000097f, -0.000583f, -0.000155f, -0.000268f, -0.000148f, +0.000285f, +0.000229f, +0.000314f, +0.000030f, -0.000017f, + -0.000134f, -0.000178f, +0.000251f, +0.000253f, -0.000011f, -0.000002f, -0.000035f, -0.000017f, -0.000104f, -0.000024f, + -0.000007f, +0.000003f, +0.000141f, +0.000009f, -0.000074f, -0.000147f, +0.000088f, +0.000024f, -0.000045f, +0.000049f, + -0.000023f, +0.000010f, -0.000072f, -0.000013f, +0.000051f, +0.000050f, -0.000006f, -0.000015f, +0.000001f, +0.000090f, + -0.000112f, -0.000029f, +0.000039f, +0.000051f, +0.000038f, -0.000004f + }, + { + +0.008797f, -0.040961f, -0.029053f, -0.002101f, -0.000289f, -0.000846f, +0.000035f, +0.000950f, -0.000117f, -0.000251f, + -0.000329f, -0.000440f, +0.000706f, +0.001599f, -0.001951f, -0.000300f, -0.000174f, +0.000411f, +0.001441f, -0.001029f, + +0.000069f, -0.000209f, -0.000237f, +0.000143f, +0.000189f, -0.000106f, -0.000111f, +0.000924f, -0.000482f, +0.000348f, + -0.000575f, +0.000417f, -0.000599f, +0.000933f, -0.001055f, +0.000108f, -0.001112f, +0.000788f, +0.000559f, -0.000793f, + +0.000105f, +0.000635f, +0.000307f, -0.000117f, -0.000435f, +0.000333f, -0.000043f, -0.000289f, +0.000345f, -0.000543f, + -0.000145f, -0.000831f, -0.000425f, -0.000112f, -0.000016f, +0.000067f, -0.000010f, +0.000147f, -0.000123f, -0.000130f, + -0.000122f, +0.000104f, +0.000058f, +0.000083f, +0.000229f, +0.000131f, -0.000041f, -0.000276f, -0.000148f, -0.000129f, + -0.000022f, +0.000134f, -0.000029f, -0.000006f, +0.000080f, -0.000072f, -0.000043f, +0.000100f, +0.000040f, -0.000109f, + -0.000013f, +0.000068f, -0.000039f, -0.000032f, +0.000040f, +0.000158f, -0.000042f, +0.000006f, -0.000044f, -0.000018f, + -0.000004f, -0.000032f, -0.000010f, +0.000021f, -0.000013f, +0.000033f + }, + { + +0.004364f, +0.011511f, -0.010102f, -0.000362f, +0.000686f, +0.000191f, -0.000382f, +0.000055f, +0.000685f, +0.001110f, + -0.000144f, -0.000639f, -0.000397f, +0.000079f, +0.004698f, +0.000358f, -0.002063f, +0.001302f, +0.001006f, -0.000864f, + +0.000916f, +0.001009f, -0.000130f, +0.000530f, -0.000137f, -0.000477f, +0.000053f, +0.000514f, +0.000984f, +0.000356f, + +0.000333f, +0.000588f, +0.000406f, +0.000462f, +0.000047f, -0.000023f, +0.000718f, -0.000626f, +0.000441f, +0.000730f, + -0.000390f, +0.000582f, +0.000222f, -0.000324f, +0.000168f, -0.000135f, -0.000322f, -0.000343f, -0.000655f, +0.000116f, + +0.000417f, -0.000312f, -0.000029f, -0.000287f, +0.000038f, -0.000079f, -0.000436f, -0.000082f, +0.000061f, +0.000035f, + -0.000003f, -0.000218f, -0.000043f, -0.000127f, -0.000285f, -0.000233f, -0.000216f, -0.000042f, +0.000182f, -0.000028f, + -0.000109f, -0.000031f, +0.000098f, -0.000046f, +0.000034f, +0.000021f, +0.000023f, +0.000018f, +0.000083f, -0.000103f, + +0.000027f, -0.000044f, -0.000114f, +0.000019f, +0.000083f, -0.000055f, +0.000025f, +0.000042f, -0.000041f, +0.000061f, + -0.000038f, -0.000042f, -0.000049f, +0.000035f, -0.000033f, -0.000053f + }, + { + +0.000339f, +0.008694f, -0.000061f, -0.000570f, +0.000251f, +0.000154f, -0.000206f, -0.000169f, -0.000135f, +0.000465f, + +0.000598f, +0.000430f, -0.000344f, +0.001282f, +0.006298f, -0.002177f, -0.004194f, +0.000377f, +0.000329f, +0.000677f, + +0.001267f, +0.000211f, +0.000221f, -0.000390f, -0.000474f, +0.000356f, -0.002770f, -0.002314f, -0.000346f, +0.000315f, + -0.002665f, +0.000591f, +0.001375f, +0.000461f, -0.000044f, +0.001084f, +0.000862f, +0.000088f, -0.000322f, +0.000141f, + -0.000194f, -0.000202f, +0.000123f, -0.000056f, +0.000200f, -0.000499f, -0.000238f, +0.000230f, -0.000324f, +0.000009f, + +0.000207f, -0.000167f, -0.000133f, +0.000248f, -0.000329f, -0.000032f, +0.000128f, -0.000283f, +0.000141f, +0.000199f, + +0.000003f, -0.000118f, +0.000129f, -0.000236f, -0.000117f, +0.000200f, -0.000010f, +0.000002f, -0.000029f, +0.000087f, + +0.000085f, -0.000081f, +0.000060f, -0.000040f, +0.000111f, -0.000017f, -0.000126f, -0.000071f, +0.000105f, -0.000002f, + +0.000053f, -0.000041f, +0.000045f, -0.000011f, -0.000002f, +0.000075f, -0.000044f, -0.000020f, -0.000018f, -0.000021f, + -0.000028f, -0.000052f, -0.000047f, +0.000042f, -0.000018f, -0.000027f + }, + { + -0.003880f, -0.034254f, -0.000037f, -0.002594f, +0.000544f, -0.000161f, +0.000078f, -0.000649f, +0.000271f, +0.000788f, + -0.000884f, -0.000441f, +0.000623f, +0.001675f, -0.000828f, +0.000741f, +0.000466f, +0.005467f, +0.000740f, -0.000107f, + -0.000481f, -0.000287f, +0.000899f, +0.000387f, +0.000497f, +0.000166f, +0.000324f, +0.000187f, -0.000094f, -0.000736f, + -0.001065f, -0.000648f, -0.000699f, +0.000346f, +0.000354f, -0.000493f, -0.000471f, -0.000887f, -0.000326f, +0.000672f, + +0.000040f, -0.000273f, -0.000115f, -0.000121f, -0.000228f, -0.000735f, -0.000218f, +0.000108f, -0.000107f, -0.000000f, + -0.000414f, -0.000295f, +0.000114f, -0.000065f, +0.000160f, -0.000089f, +0.000373f, +0.000080f, -0.000322f, +0.000062f, + +0.000040f, -0.000072f, -0.000145f, +0.000115f, +0.000103f, -0.000142f, -0.000021f, +0.000069f, -0.000012f, +0.000002f, + -0.000051f, +0.000088f, +0.000009f, -0.000180f, -0.000058f, +0.000139f, -0.000162f, +0.000164f, -0.000015f, -0.000120f, + -0.000061f, +0.000061f, -0.000079f, +0.000128f, -0.000014f, -0.000063f, +0.000009f, -0.000068f, +0.000069f, +0.000031f, + +0.000024f, +0.000012f, +0.000021f, -0.000000f, -0.000041f, -0.000023f + }, + { + -0.000300f, -0.007224f, +0.000494f, +0.000734f, +0.000022f, -0.000057f, -0.000416f, -0.000194f, -0.000136f, +0.000120f, + +0.000302f, +0.000680f, +0.001085f, +0.002054f, -0.001108f, +0.000219f, -0.000453f, +0.000056f, +0.000663f, -0.006154f, + -0.001185f, +0.001408f, +0.000762f, +0.001950f, +0.000709f, -0.001609f, +0.001313f, -0.001745f, -0.002145f, +0.002179f, + +0.001574f, +0.000711f, -0.000072f, -0.000080f, +0.000050f, +0.000226f, +0.000224f, -0.000195f, -0.000202f, +0.000064f, + -0.000095f, +0.000575f, +0.000302f, +0.000156f, -0.000007f, -0.000179f, +0.000086f, -0.000008f, -0.000440f, -0.000195f, + -0.000332f, -0.000222f, -0.000158f, -0.000231f, -0.000395f, -0.000061f, +0.000257f, +0.000021f, +0.000229f, +0.000082f, + +0.000043f, +0.000022f, -0.000134f, +0.000067f, -0.000141f, -0.000013f, +0.000038f, -0.000145f, +0.000137f, +0.000192f, + -0.000064f, -0.000004f, +0.000107f, +0.000004f, -0.000138f, -0.000160f, -0.000062f, +0.000008f, +0.000013f, +0.000115f, + -0.000083f, +0.000132f, +0.000103f, +0.000044f, -0.000078f, -0.000031f, -0.000001f, +0.000007f, -0.000018f, +0.000024f, + +0.000063f, -0.000035f, -0.000105f, +0.000021f, +0.000075f, +0.000050f + }, + { + -0.008112f, -0.045556f, -0.008426f, +0.001732f, +0.000265f, -0.000193f, +0.000087f, +0.000505f, +0.000364f, +0.000021f, + -0.000644f, +0.000552f, +0.000063f, -0.000904f, -0.000002f, +0.000890f, -0.000057f, -0.000565f, +0.001162f, +0.000192f, + +0.000361f, -0.000270f, -0.000130f, +0.000187f, -0.000417f, +0.000159f, +0.000041f, +0.000138f, +0.000530f, -0.000259f, + +0.000505f, -0.000618f, -0.000286f, +0.000371f, -0.000614f, -0.000134f, +0.000309f, -0.001032f, -0.000173f, +0.000387f, + -0.000033f, +0.000428f, +0.000656f, -0.000148f, +0.000263f, -0.000017f, +0.000686f, +0.000231f, -0.000292f, +0.000046f, + -0.000259f, -0.000295f, -0.000275f, +0.000188f, +0.000004f, -0.000116f, -0.000242f, +0.000031f, -0.000168f, -0.000089f, + +0.000090f, +0.000071f, -0.000092f, -0.000105f, -0.000200f, -0.000178f, -0.000223f, +0.000126f, -0.000037f, -0.000033f, + +0.000297f, +0.000019f, -0.000286f, +0.000019f, +0.000090f, -0.000066f, -0.000045f, +0.000033f, -0.000083f, -0.000094f, + +0.000097f, +0.000049f, -0.000029f, -0.000010f, +0.000095f, -0.000102f, -0.000063f, +0.000012f, +0.000012f, +0.000030f, + -0.000033f, +0.000050f, +0.000017f, +0.000002f, -0.000035f, +0.000002f + }, + { + +0.000083f, -0.002175f, +0.000968f, -0.000113f, +0.000092f, +0.000135f, +0.000041f, -0.000096f, -0.000540f, +0.000090f, + +0.000874f, +0.000875f, +0.000896f, +0.001034f, -0.003820f, -0.001973f, -0.001062f, +0.001929f, +0.000548f, -0.000103f, + +0.001499f, +0.000114f, +0.001694f, +0.000986f, -0.000193f, +0.002264f, +0.001059f, -0.001439f, +0.000675f, +0.000480f, + +0.000544f, -0.000601f, -0.000387f, -0.000380f, +0.000426f, +0.000075f, +0.000071f, -0.000055f, -0.000756f, +0.000753f, + -0.000351f, +0.000516f, +0.000185f, +0.000255f, -0.000554f, +0.000140f, -0.000108f, +0.000433f, -0.000192f, -0.000356f, + -0.000275f, -0.000139f, -0.000208f, -0.000222f, -0.000053f, +0.000182f, -0.000144f, -0.000286f, +0.000234f, +0.000143f, + -0.000310f, -0.000250f, -0.000042f, +0.000080f, +0.000087f, -0.000101f, -0.000180f, -0.000025f, +0.000209f, +0.000038f, + +0.000035f, -0.000052f, -0.000031f, -0.000117f, -0.000021f, +0.000027f, -0.000054f, -0.000034f, +0.000060f, -0.000038f, + +0.000129f, +0.000105f, +0.000017f, -0.000079f, -0.000107f, -0.000039f, -0.000049f, -0.000000f, -0.000013f, -0.000043f, + +0.000035f, -0.000023f, -0.000010f, +0.000072f, +0.000041f, +0.000020f + }, + { + +0.002741f, +0.040632f, +0.001226f, -0.003657f, -0.000355f, -0.000027f, +0.000760f, +0.000968f, -0.000547f, -0.000505f, + +0.001516f, +0.000833f, +0.000250f, -0.002869f, +0.001844f, -0.001255f, -0.000670f, +0.000123f, -0.000071f, -0.000690f, + -0.001091f, +0.000027f, -0.000817f, -0.000154f, +0.000484f, +0.000548f, -0.000312f, +0.000012f, +0.000687f, -0.000451f, + -0.000144f, -0.000169f, +0.000121f, +0.000543f, +0.000039f, -0.000419f, +0.000831f, -0.000910f, -0.000243f, -0.000264f, + +0.000344f, +0.000039f, -0.000022f, -0.000297f, +0.000126f, -0.000007f, -0.000410f, +0.000120f, +0.000313f, -0.000930f, + -0.000411f, +0.000203f, +0.000075f, +0.000196f, +0.000554f, +0.000171f, -0.000278f, -0.000152f, +0.000207f, +0.000172f, + -0.000002f, -0.000011f, +0.000030f, +0.000074f, +0.000171f, -0.000040f, -0.000147f, +0.000067f, +0.000022f, -0.000026f, + +0.000152f, +0.000197f, -0.000004f, +0.000084f, -0.000017f, +0.000087f, -0.000121f, -0.000033f, -0.000057f, +0.000036f, + -0.000048f, +0.000093f, +0.000081f, +0.000010f, +0.000076f, -0.000011f, -0.000072f, +0.000004f, -0.000014f, +0.000004f, + +0.000057f, +0.000025f, +0.000045f, -0.000064f, +0.000007f, +0.000050f + }, + { + +0.000686f, +0.008614f, -0.003023f, -0.000864f, -0.000156f, -0.001704f, +0.001125f, +0.001298f, -0.000400f, -0.000022f, + -0.001012f, +0.001126f, -0.000204f, -0.001244f, -0.001239f, -0.000116f, +0.002552f, -0.002471f, -0.003064f, +0.001213f, + +0.000978f, +0.000002f, -0.000928f, -0.000513f, +0.000710f, +0.000921f, -0.000085f, +0.000154f, +0.000249f, -0.000170f, + +0.000041f, +0.000065f, -0.000504f, -0.000771f, -0.000013f, -0.000641f, -0.000690f, -0.000286f, +0.000384f, -0.000299f, + +0.000180f, +0.000098f, +0.000277f, +0.000372f, -0.000356f, +0.000088f, +0.000148f, +0.000106f, -0.000041f, -0.000286f, + +0.000058f, -0.000058f, -0.000149f, -0.000046f, +0.000315f, -0.000056f, -0.000075f, -0.000007f, -0.000195f, -0.000092f, + +0.000101f, +0.000130f, +0.000091f, -0.000067f, -0.000001f, -0.000116f, -0.000060f, -0.000207f, -0.000148f, +0.000261f, + +0.000006f, +0.000044f, +0.000092f, -0.000049f, -0.000012f, +0.000041f, +0.000008f, +0.000019f, +0.000056f, +0.000079f, + +0.000071f, -0.000026f, -0.000050f, -0.000001f, -0.000088f, -0.000012f, +0.000089f, -0.000003f, +0.000018f, -0.000047f, + +0.000018f, +0.000001f, -0.000027f, -0.000013f, -0.000046f, +0.000035f + }, + { + -0.000640f, +0.047561f, -0.000689f, +0.004519f, +0.000706f, +0.002294f, +0.007543f, +0.000525f, -0.000432f, -0.000686f, + -0.000182f, -0.000174f, -0.000038f, -0.000815f, -0.001183f, +0.000748f, +0.000380f, -0.002089f, -0.000184f, -0.000900f, + +0.000158f, -0.000722f, -0.000185f, -0.000288f, -0.000504f, -0.000381f, -0.000178f, -0.000210f, -0.000764f, -0.000080f, + -0.000292f, +0.000273f, -0.000021f, -0.000192f, -0.000160f, +0.000154f, -0.000127f, -0.000554f, -0.000137f, -0.000160f, + -0.000226f, +0.000220f, -0.000158f, -0.000221f, +0.000366f, -0.000062f, -0.000129f, +0.000058f, +0.000195f, +0.000186f, + +0.000057f, -0.000026f, -0.000076f, +0.000369f, +0.000188f, +0.000107f, -0.000274f, -0.000174f, +0.000029f, +0.000174f, + -0.000000f, +0.000195f, -0.000012f, +0.000014f, -0.000049f, -0.000093f, +0.000036f, -0.000034f, -0.000079f, +0.000010f, + +0.000030f, -0.000048f, -0.000079f, -0.000100f, -0.000042f, -0.000057f, +0.000046f, +0.000173f, -0.000017f, +0.000095f, + -0.000098f, -0.000085f, +0.000094f, -0.000133f, +0.000004f, -0.000075f, -0.000005f, +0.000035f, +0.000025f, -0.000021f, + -0.000066f, +0.000014f, +0.000065f, -0.000012f, -0.000092f, -0.000003f + }, + { + -0.000600f, -0.003086f, +0.001019f, -0.000109f, -0.000054f, +0.000295f, +0.000089f, -0.000273f, -0.000356f, +0.000452f, + +0.000266f, +0.000160f, -0.003006f, -0.004283f, +0.002785f, -0.001543f, -0.001459f, -0.001420f, -0.000282f, +0.000911f, + -0.000499f, -0.002799f, -0.002040f, +0.000562f, -0.000039f, +0.000861f, -0.001892f, +0.000044f, -0.001499f, +0.001334f, + +0.001079f, -0.000388f, +0.000337f, +0.000668f, -0.000628f, -0.000400f, -0.000450f, -0.000285f, +0.000190f, -0.000275f, + -0.000108f, +0.000403f, -0.000358f, -0.000413f, -0.000160f, -0.000329f, +0.000326f, -0.000294f, +0.000432f, -0.000276f, + -0.000246f, +0.000062f, -0.000165f, +0.000006f, -0.000022f, +0.000173f, +0.000328f, +0.000414f, +0.000002f, -0.000034f, + -0.000211f, -0.000124f, +0.000139f, +0.000134f, -0.000079f, -0.000161f, +0.000246f, +0.000012f, +0.000083f, -0.000041f, + -0.000087f, -0.000030f, -0.000114f, -0.000145f, -0.000033f, -0.000096f, +0.000038f, +0.000147f, +0.000059f, +0.000036f, + -0.000034f, +0.000046f, +0.000053f, +0.000021f, -0.000024f, +0.000043f, +0.000070f, -0.000043f, -0.000034f, -0.000031f, + -0.000017f, +0.000016f, +0.000013f, +0.000036f, -0.000051f, -0.000003f + }, + { + -0.000043f, +0.005544f, +0.000432f, -0.001659f, -0.000271f, -0.001684f, +0.002977f, +0.001482f, +0.001665f, -0.000662f, + -0.001551f, +0.000148f, -0.001905f, +0.000952f, -0.000885f, +0.000678f, -0.000499f, -0.000878f, +0.000289f, -0.001164f, + +0.000485f, +0.000447f, +0.000624f, +0.001167f, +0.000230f, -0.000114f, -0.000326f, -0.000047f, +0.000486f, +0.000481f, + -0.000447f, -0.000612f, +0.000118f, +0.000348f, -0.000041f, -0.000374f, +0.000247f, +0.000311f, -0.000497f, +0.000367f, + +0.000374f, +0.000449f, +0.000495f, +0.000266f, +0.000212f, -0.000085f, +0.000013f, +0.000192f, -0.000310f, -0.000254f, + +0.000333f, -0.000034f, +0.000471f, -0.000402f, -0.000209f, +0.000128f, +0.000038f, +0.000413f, +0.000135f, -0.000215f, + +0.000161f, -0.000013f, +0.000162f, -0.000146f, +0.000015f, +0.000128f, +0.000024f, +0.000049f, -0.000197f, -0.000047f, + +0.000109f, +0.000040f, -0.000063f, -0.000060f, +0.000035f, +0.000024f, -0.000013f, -0.000082f, -0.000006f, -0.000079f, + +0.000125f, +0.000051f, -0.000084f, -0.000189f, -0.000031f, +0.000155f, +0.000154f, +0.000037f, +0.000010f, +0.000001f, + -0.000011f, -0.000037f, -0.000082f, +0.000005f, -0.000033f, -0.000054f + }, + { + +0.000168f, +0.005495f, +0.001993f, -0.001889f, -0.000690f, -0.000160f, -0.000053f, -0.000580f, +0.000269f, +0.000998f, + +0.000660f, +0.000506f, -0.000478f, +0.012134f, +0.004761f, +0.005153f, -0.003821f, -0.001745f, -0.000247f, -0.000153f, + +0.001063f, -0.000121f, +0.000581f, +0.000338f, -0.000166f, -0.002081f, -0.000416f, +0.001588f, +0.000237f, +0.002524f, + +0.000293f, +0.000605f, -0.000824f, -0.000457f, +0.001458f, +0.000402f, -0.000301f, +0.000145f, -0.000791f, +0.000132f, + -0.000242f, -0.000155f, -0.000007f, -0.000295f, -0.000256f, +0.000021f, -0.000500f, -0.000141f, -0.000184f, +0.000015f, + -0.000093f, -0.000288f, +0.000198f, +0.000004f, +0.000035f, -0.000123f, -0.000134f, -0.000052f, +0.000085f, -0.000097f, + -0.000159f, +0.000152f, +0.000065f, -0.000120f, +0.000009f, +0.000218f, -0.000019f, -0.000277f, +0.000052f, -0.000006f, + +0.000184f, +0.000016f, -0.000108f, +0.000018f, +0.000030f, -0.000039f, +0.000064f, -0.000130f, -0.000148f, -0.000107f, + -0.000126f, +0.000132f, +0.000034f, -0.000034f, +0.000095f, +0.000001f, -0.000034f, -0.000052f, +0.000054f, -0.000059f, + -0.000105f, +0.000001f, +0.000087f, -0.000007f, -0.000030f, +0.000074f + }, + { + +0.002475f, -0.000910f, +0.000372f, +0.004246f, -0.001687f, -0.002168f, +0.000396f, -0.000952f, -0.000083f, +0.000551f, + -0.001544f, +0.001679f, +0.000398f, -0.002118f, -0.003196f, -0.000544f, +0.001974f, -0.000259f, +0.000203f, +0.000359f, + +0.000098f, -0.000666f, -0.000796f, -0.000372f, +0.000533f, +0.000051f, -0.000231f, -0.000505f, +0.000968f, +0.000131f, + +0.000444f, -0.000892f, +0.000319f, -0.000023f, +0.000232f, +0.000510f, -0.000096f, -0.000874f, +0.000012f, +0.000085f, + -0.000219f, +0.000568f, +0.000660f, +0.000240f, -0.000336f, +0.000284f, +0.000023f, -0.000015f, +0.000152f, -0.000313f, + -0.000096f, -0.000067f, -0.000106f, +0.000215f, +0.000277f, +0.000283f, +0.000249f, -0.000102f, +0.000174f, +0.000197f, + -0.000067f, +0.000184f, -0.000143f, -0.000138f, -0.000051f, +0.000096f, -0.000018f, -0.000099f, +0.000126f, -0.000047f, + +0.000021f, +0.000108f, -0.000242f, -0.000211f, +0.000042f, +0.000121f, +0.000061f, -0.000015f, -0.000092f, +0.000085f, + -0.000027f, -0.000150f, -0.000016f, +0.000010f, -0.000005f, -0.000003f, -0.000004f, -0.000148f, +0.000044f, +0.000034f, + +0.000024f, +0.000057f, +0.000006f, -0.000017f, -0.000051f, +0.000057f + } + }, + { + { + -0.000355f, -0.000278f, +0.000117f, -0.000383f, +0.000598f, -0.000314f, +0.000041f, +0.000506f, -0.000466f, +0.000159f, + -0.000560f, +0.000873f, -0.001611f, -0.000350f, +0.000654f, -0.000637f, +0.002258f, -0.000854f, -0.001116f, -0.001266f, + +0.001747f, -0.000183f, +0.000202f, +0.000243f, -0.000561f, +0.000482f, -0.000025f, -0.000508f, +0.000766f, +0.001453f, + -0.001767f, +0.001353f, -0.001061f, -0.000956f, +0.001196f, -0.001295f, +0.000366f, -0.000584f, -0.000588f, +0.000113f, + +0.000061f, +0.000279f, -0.000126f, -0.000063f, +0.000028f, +0.000354f, -0.000194f, +0.000248f, +0.000358f, -0.000376f, + +0.000268f, -0.000737f, -0.000246f, +0.000108f, -0.000407f, +0.000102f, +0.000331f, +0.000068f, +0.000209f, +0.000328f, + +0.000240f, -0.000158f, -0.000069f, +0.000152f, +0.000130f, -0.000041f, -0.000224f, -0.000037f, +0.000099f, -0.000047f, + -0.000013f, +0.000015f, -0.000080f, +0.000145f, -0.000065f, -0.000058f, +0.000054f, +0.000093f, -0.000031f, -0.000031f, + -0.000049f, +0.000106f, +0.000014f, -0.000043f, -0.000120f, -0.000029f, +0.000060f, +0.000019f, -0.000056f, +0.000025f, + +0.000048f, -0.000068f, +0.000018f, -0.000041f, -0.000006f, +0.000032f + }, + { + -0.010001f, -0.023968f, +0.001764f, -0.002906f, +0.001948f, +0.000458f, -0.001133f, +0.000496f, +0.001663f, -0.000031f, + -0.000176f, +0.000757f, -0.000551f, +0.001551f, -0.000382f, +0.000587f, +0.001734f, -0.000112f, -0.001076f, -0.000495f, + -0.000126f, -0.000756f, +0.000456f, +0.000457f, -0.000232f, -0.000457f, -0.000008f, +0.001320f, +0.000041f, +0.000714f, + -0.000445f, +0.000630f, -0.001055f, +0.000188f, -0.000201f, +0.000354f, -0.001252f, +0.000226f, +0.000109f, -0.000261f, + +0.000457f, +0.000380f, -0.000019f, +0.000200f, +0.000076f, -0.000347f, +0.000560f, -0.000600f, +0.000516f, -0.000322f, + +0.000346f, +0.000121f, -0.000270f, -0.000288f, +0.000021f, -0.000072f, +0.000140f, -0.000189f, -0.000188f, -0.000064f, + +0.000059f, -0.000091f, -0.000010f, -0.000125f, -0.000062f, +0.000045f, +0.000299f, -0.000050f, +0.000036f, -0.000219f, + -0.000063f, +0.000029f, +0.000061f, -0.000071f, -0.000115f, +0.000194f, -0.000109f, +0.000022f, +0.000082f, +0.000079f, + +0.000018f, -0.000032f, +0.000054f, -0.000026f, -0.000045f, -0.000093f, +0.000162f, -0.000094f, +0.000036f, -0.000043f, + -0.000018f, -0.000012f, +0.000049f, -0.000043f, +0.000014f, -0.000038f + }, + { + -0.004756f, +0.020018f, +0.009213f, +0.002699f, -0.002076f, -0.000697f, +0.000033f, -0.000570f, +0.000116f, -0.000092f, + -0.000083f, -0.000199f, -0.000079f, -0.000561f, +0.002822f, +0.000321f, -0.001260f, +0.002202f, -0.000868f, -0.001434f, + +0.000103f, +0.000665f, -0.000052f, +0.001049f, +0.000750f, -0.000087f, -0.000270f, -0.000644f, +0.000335f, +0.000560f, + +0.000229f, -0.000368f, -0.000114f, +0.000025f, +0.000278f, -0.000062f, +0.000188f, -0.000270f, +0.000138f, -0.000229f, + +0.000138f, -0.000297f, +0.000456f, +0.000024f, -0.000142f, -0.000401f, +0.000244f, +0.000109f, -0.000212f, -0.000368f, + +0.000101f, +0.000151f, +0.000220f, -0.000323f, +0.000113f, +0.000288f, -0.000077f, -0.000285f, -0.000106f, -0.000028f, + +0.000303f, -0.000083f, -0.000186f, -0.000084f, +0.000063f, -0.000078f, -0.000066f, -0.000003f, +0.000246f, +0.000099f, + -0.000095f, +0.000032f, +0.000104f, -0.000029f, -0.000095f, +0.000031f, +0.000003f, +0.000011f, +0.000001f, +0.000035f, + +0.000128f, -0.000037f, -0.000004f, -0.000144f, +0.000076f, +0.000036f, -0.000048f, +0.000040f, +0.000007f, +0.000041f, + +0.000068f, -0.000062f, -0.000012f, -0.000029f, +0.000015f, +0.000014f + }, + { + -0.000383f, +0.008210f, +0.001052f, -0.000266f, -0.000467f, +0.000037f, +0.000051f, +0.000160f, -0.000060f, -0.000070f, + +0.000022f, +0.000492f, +0.000519f, -0.000278f, +0.003190f, +0.002994f, +0.002529f, +0.001586f, +0.000221f, +0.000774f, + -0.000903f, +0.000417f, +0.001489f, -0.000399f, +0.000917f, +0.001861f, -0.000334f, -0.002320f, -0.002274f, +0.001505f, + +0.000655f, -0.000179f, +0.000239f, +0.000467f, +0.000378f, +0.000836f, -0.000667f, +0.000656f, +0.000321f, -0.000580f, + -0.000318f, -0.000056f, -0.000021f, +0.000110f, +0.000531f, -0.000048f, -0.000117f, +0.000233f, -0.000094f, -0.000115f, + -0.000025f, +0.000295f, -0.000088f, +0.000044f, -0.000337f, -0.000372f, +0.000128f, +0.000207f, -0.000220f, -0.000096f, + +0.000199f, +0.000150f, +0.000000f, -0.000120f, -0.000098f, +0.000095f, +0.000018f, +0.000025f, -0.000013f, -0.000089f, + -0.000063f, +0.000084f, +0.000205f, +0.000004f, -0.000070f, +0.000148f, +0.000031f, -0.000064f, -0.000029f, -0.000070f, + -0.000002f, +0.000063f, -0.000058f, -0.000026f, -0.000134f, +0.000021f, +0.000073f, +0.000043f, -0.000013f, -0.000053f, + +0.000039f, +0.000053f, -0.000053f, -0.000026f, +0.000021f, -0.000042f + }, + { + +0.006274f, -0.015100f, +0.007043f, -0.000098f, +0.000612f, -0.000548f, -0.000134f, -0.000481f, +0.000314f, +0.001267f, + +0.000396f, -0.001758f, +0.000190f, +0.001667f, -0.000782f, +0.001580f, -0.000909f, +0.003445f, +0.001106f, +0.000413f, + -0.000141f, -0.000483f, +0.000324f, -0.000935f, +0.001726f, -0.000800f, +0.000084f, -0.000428f, +0.000693f, +0.000218f, + -0.000186f, -0.000023f, +0.000193f, -0.000148f, -0.000101f, -0.000072f, -0.000037f, +0.000234f, +0.000041f, -0.000354f, + -0.000043f, -0.000147f, +0.000281f, -0.000110f, -0.000043f, -0.000274f, -0.000096f, +0.000274f, -0.000046f, +0.000022f, + +0.000252f, +0.000184f, -0.000595f, -0.000172f, -0.000056f, -0.000130f, -0.000184f, +0.000094f, -0.000008f, +0.000362f, + -0.000160f, -0.000084f, +0.000100f, -0.000126f, -0.000153f, -0.000026f, -0.000077f, +0.000163f, +0.000108f, +0.000034f, + -0.000094f, -0.000049f, +0.000110f, +0.000188f, +0.000095f, +0.000028f, -0.000009f, -0.000065f, +0.000003f, +0.000022f, + -0.000101f, +0.000013f, +0.000009f, -0.000094f, -0.000029f, +0.000033f, +0.000026f, -0.000016f, +0.000022f, +0.000072f, + -0.000042f, -0.000011f, +0.000007f, -0.000015f, +0.000040f, +0.000036f + }, + { + +0.000743f, -0.002709f, -0.000637f, +0.000440f, -0.000076f, +0.000166f, +0.000077f, +0.000128f, +0.000029f, -0.000198f, + -0.000460f, +0.000158f, -0.000802f, -0.002042f, +0.000974f, +0.003305f, -0.002967f, -0.000836f, +0.002186f, -0.003281f, + -0.001407f, +0.000382f, -0.001207f, -0.000496f, +0.000216f, +0.000195f, +0.001504f, -0.001433f, -0.000166f, +0.000620f, + -0.001079f, -0.000260f, +0.000435f, +0.000262f, -0.000429f, +0.000372f, +0.000150f, -0.000792f, -0.000188f, +0.000004f, + +0.000477f, -0.000284f, +0.000162f, +0.000271f, -0.000373f, -0.000145f, -0.000119f, +0.000178f, +0.000045f, +0.000273f, + +0.000156f, +0.000011f, -0.000146f, +0.000241f, +0.000272f, -0.000132f, -0.000068f, -0.000039f, +0.000110f, -0.000005f, + -0.000003f, +0.000160f, -0.000025f, -0.000019f, -0.000021f, -0.000095f, -0.000006f, -0.000030f, +0.000034f, +0.000122f, + +0.000096f, -0.000018f, -0.000063f, +0.000006f, +0.000058f, -0.000037f, +0.000030f, -0.000162f, -0.000054f, +0.000009f, + +0.000008f, -0.000037f, -0.000019f, +0.000042f, +0.000062f, -0.000024f, -0.000021f, +0.000028f, -0.000024f, -0.000065f, + -0.000013f, +0.000069f, +0.000039f, -0.000063f, -0.000016f, -0.000038f + }, + { + +0.003288f, -0.010633f, +0.004842f, +0.000458f, -0.000013f, -0.000561f, +0.000177f, -0.000581f, -0.000727f, +0.000575f, + +0.000162f, +0.000227f, -0.000045f, +0.000052f, +0.000555f, -0.001326f, -0.000413f, -0.000366f, -0.000721f, +0.000515f, + +0.000790f, +0.000612f, -0.000158f, -0.000278f, -0.000427f, -0.000003f, +0.000526f, -0.000402f, +0.000059f, -0.000662f, + +0.000483f, -0.000203f, -0.000549f, +0.000324f, -0.000735f, -0.000431f, +0.000448f, -0.000425f, +0.000202f, +0.000331f, + -0.000429f, -0.000354f, +0.000344f, +0.000162f, +0.000027f, -0.000213f, +0.000175f, +0.000460f, +0.000001f, +0.000093f, + +0.000254f, -0.000285f, +0.000173f, -0.000043f, +0.000052f, +0.000071f, -0.000260f, +0.000153f, +0.000017f, -0.000103f, + +0.000011f, +0.000001f, -0.000019f, +0.000066f, +0.000059f, +0.000078f, -0.000142f, -0.000086f, +0.000095f, +0.000027f, + -0.000049f, +0.000183f, +0.000100f, -0.000104f, -0.000073f, -0.000011f, +0.000088f, -0.000056f, -0.000026f, -0.000012f, + -0.000156f, +0.000065f, +0.000002f, -0.000175f, -0.000036f, +0.000096f, -0.000033f, -0.000033f, +0.000003f, +0.000085f, + +0.000043f, -0.000042f, +0.000033f, -0.000015f, -0.000004f, +0.000013f + }, + { + +0.000666f, -0.000547f, -0.001958f, -0.000051f, -0.000394f, +0.000061f, +0.000036f, -0.000068f, +0.000050f, -0.000193f, + -0.000129f, -0.000058f, +0.000121f, +0.000590f, +0.002188f, +0.004920f, -0.000416f, +0.003089f, -0.000318f, -0.001381f, + +0.000177f, +0.000005f, -0.000589f, +0.000020f, -0.000125f, +0.002034f, +0.001997f, -0.001067f, +0.000759f, +0.000757f, + -0.000136f, -0.000362f, +0.000588f, -0.000480f, +0.000325f, +0.000523f, +0.000008f, -0.000269f, -0.000942f, -0.000157f, + -0.000516f, +0.000499f, -0.000319f, +0.000038f, +0.000001f, +0.000235f, +0.000172f, -0.000397f, +0.000155f, +0.000609f, + -0.000219f, -0.000225f, +0.000149f, +0.000376f, -0.000195f, +0.000090f, -0.000015f, -0.000415f, +0.000007f, +0.000461f, + -0.000152f, -0.000065f, -0.000167f, +0.000004f, -0.000002f, +0.000137f, +0.000186f, -0.000037f, -0.000055f, -0.000047f, + -0.000021f, -0.000113f, +0.000041f, +0.000061f, -0.000077f, -0.000069f, +0.000056f, -0.000035f, -0.000047f, -0.000009f, + -0.000066f, +0.000063f, +0.000027f, +0.000041f, +0.000093f, -0.000035f, +0.000037f, -0.000068f, +0.000016f, +0.000019f, + -0.000070f, -0.000004f, -0.000005f, +0.000019f, +0.000015f, +0.000003f + }, + { + +0.000102f, +0.034658f, +0.001798f, -0.002796f, -0.000464f, -0.000254f, -0.000231f, -0.000634f, +0.001113f, -0.000323f, + -0.001311f, +0.000488f, +0.000596f, -0.001232f, +0.000737f, +0.001415f, +0.000175f, +0.000099f, +0.000488f, -0.000116f, + -0.000873f, -0.000598f, +0.000147f, +0.000131f, -0.000184f, +0.001117f, -0.000750f, -0.000230f, +0.001087f, -0.000518f, + +0.000400f, -0.000553f, -0.000119f, +0.000229f, +0.000090f, +0.000031f, +0.001272f, -0.000239f, +0.000511f, -0.000190f, + +0.000465f, -0.000408f, -0.000261f, -0.000459f, -0.000508f, +0.000340f, -0.000644f, -0.000917f, +0.000618f, +0.000017f, + -0.000082f, +0.000237f, +0.000346f, +0.000227f, -0.000078f, -0.000079f, +0.000085f, +0.000164f, -0.000199f, +0.000162f, + +0.000283f, -0.000113f, -0.000031f, -0.000198f, -0.000104f, +0.000339f, +0.000120f, -0.000101f, +0.000006f, +0.000028f, + +0.000018f, +0.000176f, +0.000089f, -0.000068f, -0.000095f, -0.000129f, +0.000173f, -0.000065f, -0.000094f, -0.000014f, + +0.000072f, -0.000021f, +0.000019f, +0.000027f, +0.000052f, +0.000060f, +0.000067f, +0.000007f, -0.000078f, -0.000029f, + -0.000027f, -0.000001f, +0.000014f, +0.000049f, -0.000068f, +0.000044f + }, + { + -0.000683f, +0.008085f, -0.001011f, -0.002160f, +0.001197f, +0.000854f, -0.000469f, +0.000580f, -0.000099f, +0.000356f, + -0.001374f, +0.000352f, +0.001324f, +0.000907f, -0.000551f, -0.002547f, +0.001661f, +0.000160f, -0.001840f, -0.002413f, + +0.000724f, +0.000915f, +0.000146f, -0.000681f, -0.000442f, +0.000303f, +0.000319f, -0.000382f, -0.000512f, +0.000576f, + -0.000694f, +0.001021f, -0.000345f, -0.000473f, +0.000279f, -0.000362f, -0.000439f, -0.000638f, +0.000138f, -0.000226f, + -0.000256f, -0.000229f, -0.000146f, +0.000190f, +0.000486f, -0.000286f, -0.000012f, -0.000246f, +0.000366f, +0.000299f, + -0.000048f, -0.000187f, -0.000137f, -0.000270f, -0.000077f, +0.000497f, -0.000001f, +0.000138f, -0.000093f, -0.000171f, + +0.000018f, +0.000060f, -0.000057f, +0.000117f, -0.000063f, +0.000128f, +0.000213f, -0.000115f, -0.000114f, -0.000125f, + +0.000005f, +0.000005f, +0.000001f, +0.000198f, -0.000038f, -0.000084f, +0.000047f, +0.000085f, -0.000019f, +0.000016f, + +0.000083f, +0.000024f, -0.000034f, +0.000005f, -0.000013f, -0.000096f, +0.000006f, +0.000041f, +0.000021f, +0.000054f, + -0.000068f, +0.000037f, -0.000036f, +0.000024f, -0.000020f, -0.000038f + }, + { + -0.001978f, +0.040089f, -0.007545f, +0.000508f, +0.000522f, -0.002341f, -0.003302f, +0.000425f, +0.000530f, +0.000547f, + +0.000365f, +0.000657f, -0.000074f, -0.000350f, -0.001295f, -0.000461f, -0.000594f, -0.001087f, +0.000520f, +0.000277f, + -0.000143f, +0.000011f, -0.000372f, +0.000344f, -0.000598f, -0.000325f, +0.000226f, -0.000102f, -0.000092f, +0.000349f, + -0.000442f, +0.000064f, +0.000516f, +0.000456f, +0.000083f, -0.000911f, +0.000735f, -0.000629f, -0.000208f, +0.000370f, + -0.000732f, -0.000634f, +0.000216f, -0.000124f, +0.000532f, +0.000185f, +0.000056f, -0.000071f, -0.000256f, +0.000230f, + -0.000079f, +0.000056f, -0.000024f, -0.000150f, -0.000006f, +0.000157f, +0.000156f, +0.000278f, -0.000225f, -0.000007f, + -0.000050f, +0.000197f, -0.000005f, +0.000075f, +0.000111f, -0.000261f, +0.000089f, +0.000002f, +0.000080f, -0.000009f, + +0.000035f, -0.000002f, +0.000104f, +0.000006f, -0.000159f, +0.000006f, -0.000117f, -0.000038f, +0.000040f, -0.000026f, + +0.000017f, -0.000029f, -0.000004f, +0.000123f, -0.000036f, +0.000071f, -0.000130f, +0.000027f, -0.000080f, +0.000003f, + +0.000028f, -0.000014f, -0.000020f, +0.000021f, +0.000045f, -0.000055f + }, + { + +0.000553f, -0.003501f, +0.000221f, -0.000743f, +0.000135f, -0.000826f, +0.000360f, +0.000277f, -0.000343f, +0.000449f, + +0.000007f, -0.000612f, +0.002550f, +0.003798f, +0.001826f, -0.001713f, -0.000121f, -0.000311f, +0.000098f, +0.000111f, + -0.001471f, +0.002793f, -0.000339f, +0.001150f, -0.002201f, +0.000436f, +0.000072f, +0.001229f, -0.001200f, +0.001204f, + -0.001065f, +0.000465f, -0.000069f, +0.001257f, -0.000056f, +0.000119f, -0.000191f, +0.000401f, -0.000756f, +0.000016f, + -0.000444f, +0.000095f, +0.000226f, -0.000452f, -0.000307f, -0.000205f, +0.000178f, -0.000033f, +0.000308f, -0.000023f, + -0.000063f, +0.000012f, +0.000200f, +0.000005f, -0.000097f, -0.000226f, -0.000108f, +0.000309f, +0.000354f, +0.000033f, + +0.000151f, -0.000216f, -0.000156f, -0.000021f, +0.000194f, +0.000096f, -0.000154f, +0.000155f, +0.000003f, +0.000100f, + -0.000045f, -0.000077f, +0.000051f, -0.000069f, +0.000032f, +0.000024f, -0.000053f, -0.000072f, +0.000002f, -0.000027f, + +0.000110f, -0.000044f, -0.000044f, +0.000091f, +0.000013f, -0.000010f, +0.000021f, +0.000046f, +0.000020f, -0.000012f, + +0.000025f, +0.000040f, -0.000051f, -0.000033f, +0.000029f, +0.000000f + }, + { + -0.001178f, +0.002080f, +0.005296f, -0.002417f, +0.000829f, -0.001903f, -0.002108f, -0.000574f, +0.000036f, +0.001120f, + -0.000033f, -0.000243f, -0.000557f, +0.001907f, +0.000992f, +0.000498f, +0.000494f, -0.000177f, -0.000258f, -0.000217f, + -0.000926f, +0.000882f, -0.000216f, +0.000465f, -0.000238f, +0.000175f, -0.000819f, -0.000075f, -0.000003f, -0.000364f, + +0.000260f, -0.000474f, +0.000088f, +0.000786f, +0.000952f, -0.000335f, -0.000286f, -0.000011f, +0.000254f, -0.000284f, + -0.000448f, -0.000084f, +0.000610f, +0.000115f, +0.000567f, +0.000090f, +0.000331f, -0.000471f, +0.000570f, +0.000180f, + +0.000168f, -0.000160f, +0.000207f, -0.000132f, -0.000170f, -0.000235f, -0.000135f, +0.000135f, -0.000015f, +0.000129f, + -0.000052f, -0.000049f, +0.000063f, -0.000055f, -0.000145f, -0.000000f, -0.000005f, +0.000148f, +0.000142f, -0.000087f, + -0.000147f, +0.000159f, +0.000071f, -0.000117f, -0.000041f, +0.000049f, -0.000044f, +0.000103f, -0.000058f, +0.000000f, + -0.000151f, +0.000098f, +0.000054f, -0.000016f, -0.000039f, -0.000142f, +0.000041f, +0.000110f, -0.000031f, +0.000024f, + +0.000048f, -0.000002f, +0.000026f, -0.000061f, +0.000022f, -0.000033f + }, + { + -0.000496f, +0.002585f, +0.001551f, -0.000376f, -0.000008f, +0.000298f, +0.000272f, +0.000284f, -0.000194f, +0.000229f, + +0.000691f, -0.000253f, +0.001349f, -0.001256f, -0.028400f, +0.000777f, -0.001191f, -0.000733f, +0.001638f, -0.001025f, + -0.000821f, -0.001399f, -0.000237f, +0.000096f, -0.000774f, -0.001012f, -0.002243f, +0.000879f, -0.000895f, +0.001120f, + -0.000079f, +0.000057f, +0.000163f, +0.000604f, +0.000312f, +0.000604f, +0.000107f, +0.000092f, -0.000193f, +0.000190f, + +0.000415f, -0.000208f, -0.000489f, -0.000015f, +0.000034f, -0.000042f, +0.000137f, -0.000172f, +0.000056f, -0.000115f, + +0.000327f, -0.000476f, -0.000056f, -0.000179f, +0.000090f, -0.000018f, -0.000033f, +0.000103f, +0.000057f, +0.000063f, + +0.000101f, -0.000276f, +0.000026f, -0.000017f, +0.000055f, -0.000114f, +0.000313f, +0.000084f, -0.000026f, -0.000086f, + -0.000044f, -0.000048f, +0.000093f, -0.000037f, +0.000072f, -0.000014f, -0.000151f, +0.000158f, -0.000056f, +0.000119f, + -0.000023f, -0.000104f, -0.000005f, -0.000011f, -0.000046f, +0.000062f, +0.000096f, +0.000101f, -0.000076f, +0.000083f, + +0.000000f, -0.000060f, -0.000021f, +0.000061f, -0.000002f, -0.000063f + }, + { + +0.000014f, -0.006451f, -0.001769f, +0.003606f, +0.000041f, +0.001673f, -0.000167f, -0.000794f, +0.000601f, +0.000917f, + -0.000538f, -0.000116f, -0.000518f, +0.001476f, +0.003561f, -0.000459f, +0.000296f, +0.000364f, -0.000483f, +0.000235f, + +0.001368f, +0.000302f, +0.000245f, +0.000154f, -0.000710f, +0.000270f, -0.000319f, -0.002391f, -0.000259f, -0.000907f, + +0.000563f, -0.000650f, -0.000123f, -0.000076f, -0.000716f, -0.000264f, +0.000353f, -0.000017f, -0.000493f, -0.000309f, + -0.000271f, +0.000085f, -0.000032f, +0.000153f, +0.000209f, -0.000004f, +0.000090f, +0.000288f, -0.000066f, -0.000305f, + +0.000119f, +0.000149f, -0.000086f, -0.000271f, -0.000018f, -0.000196f, +0.000130f, +0.000124f, +0.000008f, +0.000131f, + -0.000039f, +0.000059f, -0.000038f, +0.000090f, -0.000060f, +0.000080f, +0.000156f, +0.000085f, +0.000108f, +0.000031f, + -0.000113f, +0.000107f, +0.000112f, -0.000013f, -0.000143f, -0.000048f, +0.000010f, +0.000018f, -0.000086f, +0.000028f, + +0.000040f, +0.000036f, -0.000046f, +0.000004f, +0.000024f, -0.000019f, +0.000012f, +0.000064f, -0.000137f, +0.000068f, + -0.000019f, -0.000031f, +0.000051f, -0.000007f, -0.000005f, +0.000015f + } + }, + { + { + +0.001201f, +0.000446f, -0.000980f, -0.002257f, -0.000202f, +0.000057f, +0.000063f, +0.000117f, -0.000098f, +0.000230f, + -0.000268f, +0.000464f, -0.000296f, -0.001995f, +0.000265f, +0.000064f, +0.001822f, +0.000155f, -0.000101f, -0.000400f, + +0.000049f, +0.000420f, +0.000212f, -0.000262f, +0.000042f, -0.000542f, +0.000047f, +0.000162f, +0.000678f, +0.000978f, + -0.001779f, +0.000985f, +0.000014f, -0.000838f, +0.000272f, -0.000046f, +0.000283f, -0.001300f, -0.000995f, -0.000617f, + +0.000669f, +0.000027f, -0.000055f, -0.000076f, -0.000035f, +0.000280f, +0.000049f, -0.000066f, +0.000252f, -0.000273f, + +0.000271f, -0.000439f, -0.000284f, +0.000079f, -0.000140f, -0.000042f, +0.000057f, +0.000054f, +0.000081f, +0.000300f, + +0.000176f, +0.000095f, +0.000117f, -0.000100f, +0.000190f, +0.000006f, -0.000127f, -0.000013f, +0.000193f, -0.000004f, + -0.000038f, -0.000045f, -0.000032f, +0.000065f, +0.000079f, -0.000018f, +0.000032f, +0.000054f, +0.000096f, -0.000027f, + -0.000033f, +0.000091f, +0.000116f, +0.000006f, -0.000078f, -0.000006f, +0.000023f, -0.000012f, -0.000022f, -0.000076f, + +0.000050f, -0.000021f, -0.000022f, -0.000027f, -0.000028f, -0.000001f + }, + { + +0.008584f, -0.037044f, -0.007252f, -0.002921f, -0.000186f, +0.000542f, -0.000599f, -0.001130f, +0.000798f, +0.000828f, + +0.000254f, +0.000670f, -0.000001f, -0.000385f, +0.000528f, +0.000758f, +0.000498f, -0.000238f, -0.000781f, -0.000186f, + -0.000364f, -0.001249f, +0.000352f, +0.000664f, -0.000227f, -0.000138f, +0.000084f, +0.000878f, +0.000599f, +0.000717f, + +0.000309f, +0.000196f, -0.001055f, -0.000470f, -0.000086f, +0.000472f, -0.000403f, -0.000303f, -0.000359f, -0.000086f, + +0.000182f, +0.000195f, +0.000314f, +0.000178f, +0.000173f, -0.000431f, +0.000119f, -0.000122f, -0.000212f, +0.000037f, + +0.000075f, +0.000315f, +0.000274f, -0.000251f, +0.000110f, -0.000146f, +0.000167f, -0.000092f, +0.000032f, +0.000048f, + +0.000072f, -0.000082f, +0.000021f, -0.000023f, -0.000063f, -0.000127f, +0.000224f, +0.000031f, +0.000159f, -0.000012f, + -0.000107f, -0.000103f, +0.000083f, -0.000030f, -0.000165f, +0.000044f, +0.000028f, -0.000042f, +0.000031f, +0.000154f, + +0.000009f, -0.000043f, +0.000039f, +0.000057f, -0.000024f, -0.000164f, +0.000102f, -0.000048f, +0.000021f, -0.000006f, + -0.000020f, +0.000023f, +0.000040f, -0.000036f, -0.000004f, -0.000039f + }, + { + +0.003303f, +0.013609f, +0.002337f, +0.005777f, -0.000500f, -0.000306f, -0.000037f, -0.000279f, -0.000361f, -0.000746f, + -0.000501f, -0.000031f, +0.000221f, +0.000678f, -0.000018f, -0.000162f, +0.000296f, +0.000846f, -0.001462f, -0.000389f, + +0.000067f, +0.000737f, +0.000426f, +0.000692f, +0.000250f, +0.000292f, +0.000038f, +0.000125f, -0.000628f, +0.000306f, + -0.000058f, -0.000271f, +0.000012f, -0.000247f, -0.000016f, -0.000102f, +0.000029f, +0.000197f, +0.000249f, -0.000517f, + +0.000168f, -0.000172f, +0.000810f, +0.000162f, -0.000047f, -0.000317f, -0.000188f, +0.000451f, +0.000429f, -0.000171f, + -0.000349f, +0.000079f, +0.000169f, -0.000200f, +0.000027f, +0.000322f, +0.000217f, -0.000089f, -0.000141f, -0.000091f, + +0.000247f, +0.000174f, -0.000162f, +0.000042f, +0.000147f, +0.000059f, -0.000036f, +0.000186f, +0.000043f, +0.000163f, + -0.000001f, +0.000060f, +0.000042f, +0.000027f, -0.000034f, -0.000011f, -0.000035f, -0.000054f, -0.000032f, +0.000099f, + +0.000007f, +0.000016f, +0.000074f, -0.000142f, -0.000048f, +0.000034f, -0.000048f, -0.000026f, +0.000032f, -0.000004f, + +0.000057f, +0.000001f, +0.000010f, -0.000023f, -0.000003f, +0.000022f + }, + { + +0.000051f, +0.007501f, +0.000016f, +0.000189f, -0.000137f, -0.000191f, +0.000090f, -0.000033f, +0.000256f, +0.000076f, + -0.000241f, +0.000138f, +0.000090f, +0.001943f, +0.001283f, -0.000179f, +0.003361f, +0.002666f, -0.000181f, +0.000104f, + -0.001613f, +0.001035f, +0.000295f, +0.001194f, +0.001217f, -0.000290f, +0.000386f, -0.000517f, -0.001465f, -0.000219f, + +0.000926f, +0.000664f, -0.000452f, +0.000456f, +0.000385f, +0.000526f, -0.000014f, -0.000012f, +0.000584f, -0.000247f, + -0.000180f, +0.000010f, +0.000169f, -0.000146f, +0.000356f, +0.000309f, +0.000054f, +0.000020f, +0.000223f, -0.000213f, + -0.000200f, +0.000428f, +0.000049f, -0.000133f, -0.000034f, -0.000263f, -0.000135f, +0.000357f, -0.000224f, -0.000203f, + -0.000035f, +0.000169f, -0.000000f, -0.000016f, -0.000047f, +0.000029f, -0.000016f, +0.000063f, +0.000079f, -0.000144f, + -0.000150f, +0.000008f, +0.000139f, +0.000069f, -0.000121f, +0.000090f, +0.000091f, +0.000052f, -0.000064f, -0.000053f, + -0.000039f, +0.000071f, -0.000050f, -0.000021f, -0.000102f, -0.000055f, +0.000056f, +0.000031f, +0.000062f, -0.000016f, + +0.000010f, +0.000041f, +0.000017f, -0.000013f, +0.000015f, +0.000031f + }, + { + -0.004036f, +0.003992f, +0.000290f, +0.001554f, -0.000067f, -0.000251f, -0.000159f, -0.000441f, +0.000272f, -0.000051f, + +0.001849f, -0.000375f, -0.000127f, -0.000501f, +0.000849f, +0.000255f, +0.000365f, +0.001308f, +0.001054f, +0.000728f, + -0.000487f, +0.000139f, +0.000432f, -0.000904f, +0.000529f, -0.000067f, -0.000299f, +0.000402f, +0.000116f, -0.000018f, + +0.000404f, +0.000103f, +0.000229f, -0.000312f, -0.000082f, -0.000192f, -0.000464f, -0.000323f, +0.000295f, -0.000740f, + -0.000750f, -0.000007f, +0.000690f, -0.000061f, -0.000574f, +0.000341f, +0.000311f, +0.000082f, -0.000036f, +0.000066f, + +0.000386f, +0.000365f, -0.000363f, -0.000230f, -0.000393f, +0.000118f, -0.000475f, -0.000014f, +0.000166f, +0.000111f, + -0.000055f, -0.000103f, +0.000188f, -0.000072f, -0.000166f, -0.000014f, -0.000022f, +0.000050f, +0.000070f, +0.000045f, + -0.000023f, -0.000093f, -0.000018f, +0.000123f, +0.000155f, -0.000019f, +0.000095f, -0.000101f, -0.000013f, +0.000120f, + -0.000056f, -0.000000f, +0.000031f, -0.000111f, -0.000082f, +0.000035f, +0.000011f, +0.000024f, -0.000025f, +0.000018f, + -0.000039f, -0.000028f, -0.000005f, -0.000029f, +0.000032f, +0.000039f + }, + { + +0.000120f, +0.001346f, -0.000427f, -0.000562f, +0.000021f, -0.000088f, +0.000331f, +0.000062f, +0.000332f, -0.000224f, + -0.000276f, -0.000357f, -0.000765f, -0.001698f, -0.000208f, -0.000149f, +0.000458f, -0.001525f, +0.002058f, -0.000925f, + -0.001984f, -0.001261f, -0.000305f, -0.001577f, -0.000771f, +0.000362f, -0.000269f, -0.000168f, -0.000315f, +0.000209f, + -0.001063f, -0.000517f, +0.000573f, +0.000925f, -0.000631f, -0.000069f, +0.000289f, -0.000447f, -0.000293f, -0.000179f, + +0.000687f, -0.000274f, +0.000176f, +0.000281f, -0.000129f, -0.000074f, -0.000049f, -0.000302f, +0.000359f, +0.000129f, + +0.000325f, +0.000100f, -0.000219f, +0.000034f, +0.000441f, +0.000045f, -0.000129f, -0.000037f, +0.000016f, -0.000014f, + -0.000079f, +0.000018f, +0.000108f, -0.000108f, +0.000062f, -0.000048f, -0.000047f, +0.000005f, -0.000087f, -0.000103f, + +0.000082f, +0.000081f, -0.000091f, -0.000017f, +0.000121f, +0.000071f, +0.000116f, -0.000040f, -0.000015f, -0.000079f, + +0.000066f, -0.000022f, -0.000069f, -0.000030f, +0.000041f, +0.000013f, -0.000003f, -0.000009f, +0.000001f, -0.000024f, + -0.000089f, +0.000033f, +0.000096f, -0.000023f, -0.000033f, -0.000027f + }, + { + +0.003729f, +0.002348f, -0.004645f, -0.001690f, +0.000516f, +0.000096f, -0.000083f, -0.000261f, -0.000287f, +0.000179f, + +0.000403f, -0.000313f, -0.000104f, -0.000005f, +0.000035f, -0.000997f, +0.000086f, +0.000157f, -0.000693f, -0.000051f, + +0.000226f, +0.000271f, -0.000446f, -0.000122f, -0.000021f, -0.000444f, +0.000820f, +0.000105f, -0.000612f, -0.000573f, + +0.000067f, +0.000210f, +0.000407f, -0.000413f, -0.000014f, -0.000194f, -0.000106f, -0.000178f, +0.000174f, +0.000062f, + -0.000224f, +0.000001f, -0.000029f, +0.000218f, -0.000481f, +0.000118f, -0.000320f, +0.000192f, +0.000151f, -0.000136f, + +0.000093f, -0.000055f, +0.000153f, -0.000342f, +0.000143f, +0.000187f, +0.000010f, +0.000091f, +0.000168f, -0.000003f, + -0.000015f, +0.000052f, -0.000010f, +0.000055f, +0.000086f, +0.000160f, +0.000113f, -0.000090f, +0.000026f, -0.000002f, + -0.000105f, +0.000025f, +0.000169f, +0.000014f, -0.000079f, -0.000022f, +0.000111f, -0.000065f, -0.000001f, -0.000028f, + -0.000123f, -0.000029f, +0.000052f, -0.000036f, -0.000135f, +0.000095f, +0.000062f, -0.000009f, -0.000042f, +0.000011f, + +0.000054f, -0.000038f, -0.000028f, -0.000004f, -0.000005f, +0.000020f + }, + { + +0.000007f, +0.002677f, -0.001349f, -0.000107f, -0.000365f, -0.000132f, -0.000107f, +0.000041f, +0.000317f, -0.000122f, + -0.000548f, -0.000453f, -0.001079f, +0.004515f, +0.003468f, -0.000748f, -0.001266f, +0.000679f, -0.000447f, +0.000563f, + -0.002113f, -0.000685f, -0.000943f, +0.000142f, +0.000982f, -0.000076f, +0.000760f, +0.000681f, -0.000413f, +0.000526f, + -0.000118f, +0.000086f, +0.000561f, +0.000076f, +0.000026f, +0.000102f, -0.000009f, -0.000262f, -0.000643f, -0.000386f, + -0.000063f, +0.000140f, -0.000329f, -0.000351f, +0.000342f, +0.000031f, +0.000063f, -0.000475f, +0.000019f, +0.000477f, + -0.000000f, -0.000067f, +0.000224f, +0.000365f, +0.000213f, +0.000029f, +0.000071f, -0.000245f, -0.000139f, +0.000178f, + +0.000128f, -0.000052f, -0.000037f, -0.000043f, -0.000067f, +0.000081f, +0.000140f, +0.000036f, -0.000101f, -0.000111f, + -0.000047f, -0.000050f, +0.000032f, +0.000065f, -0.000007f, -0.000024f, +0.000014f, +0.000099f, -0.000048f, +0.000031f, + -0.000102f, -0.000021f, -0.000011f, +0.000032f, +0.000113f, +0.000001f, +0.000075f, -0.000028f, -0.000008f, +0.000054f, + -0.000055f, -0.000000f, +0.000040f, -0.000007f, +0.000002f, -0.000016f + }, + { + -0.000725f, +0.043383f, -0.005436f, -0.001977f, -0.000347f, -0.000021f, -0.000180f, -0.001017f, +0.000912f, +0.000442f, + -0.001018f, -0.000468f, -0.000249f, -0.001461f, +0.000332f, +0.002231f, +0.000891f, +0.000229f, +0.000145f, +0.000004f, + -0.000205f, -0.000247f, -0.000745f, +0.000584f, -0.000170f, +0.000462f, +0.000238f, -0.000153f, +0.000527f, -0.000008f, + +0.000194f, -0.000552f, -0.000249f, +0.000025f, +0.000274f, +0.000763f, +0.000289f, +0.000002f, +0.000586f, +0.000169f, + -0.000042f, -0.000416f, -0.000043f, -0.000403f, -0.000621f, +0.000330f, +0.000075f, -0.001023f, -0.000070f, +0.000481f, + +0.000097f, +0.000283f, +0.000246f, +0.000246f, -0.000347f, -0.000102f, +0.000107f, +0.000153f, -0.000114f, -0.000087f, + +0.000168f, +0.000033f, -0.000087f, -0.000150f, -0.000142f, +0.000021f, +0.000215f, -0.000047f, +0.000035f, +0.000133f, + -0.000061f, +0.000024f, +0.000103f, -0.000081f, -0.000026f, -0.000129f, +0.000097f, -0.000050f, +0.000023f, -0.000087f, + +0.000070f, -0.000032f, -0.000073f, +0.000023f, -0.000047f, +0.000036f, +0.000086f, +0.000027f, +0.000004f, -0.000010f, + -0.000061f, -0.000029f, -0.000005f, +0.000081f, -0.000044f, +0.000022f + }, + { + +0.000345f, +0.006058f, +0.000304f, -0.001125f, -0.000229f, +0.002298f, -0.000506f, -0.000537f, -0.000079f, +0.000215f, + -0.000441f, -0.000988f, +0.000155f, +0.001399f, -0.000903f, -0.000350f, -0.000283f, +0.001254f, +0.000489f, -0.002082f, + -0.000144f, +0.000169f, -0.000136f, -0.000009f, -0.000256f, +0.000220f, +0.000388f, -0.000498f, -0.000817f, +0.000756f, + -0.000953f, +0.000496f, +0.000125f, +0.000033f, +0.000088f, +0.000142f, -0.000124f, -0.000057f, +0.000159f, -0.000152f, + -0.000205f, -0.000055f, -0.000003f, -0.000156f, +0.000493f, -0.000123f, -0.000106f, -0.000182f, +0.000111f, +0.000267f, + +0.000256f, -0.000029f, +0.000019f, -0.000084f, -0.000345f, +0.000345f, +0.000069f, +0.000108f, +0.000002f, -0.000032f, + -0.000088f, -0.000071f, -0.000106f, +0.000097f, -0.000132f, +0.000028f, +0.000180f, +0.000090f, +0.000122f, -0.000176f, + +0.000024f, -0.000034f, -0.000115f, +0.000143f, -0.000020f, -0.000058f, +0.000000f, -0.000011f, -0.000053f, -0.000068f, + -0.000012f, +0.000006f, -0.000001f, +0.000032f, +0.000075f, -0.000019f, -0.000068f, +0.000014f, -0.000008f, +0.000065f, + -0.000031f, +0.000011f, -0.000004f, +0.000014f, +0.000039f, -0.000028f + }, + { + +0.003340f, +0.027046f, -0.000230f, -0.002793f, +0.001192f, -0.001061f, -0.003957f, -0.000549f, +0.000369f, +0.000248f, + +0.000294f, +0.000402f, +0.000455f, -0.000269f, -0.000356f, -0.001308f, -0.000883f, -0.000111f, +0.000083f, +0.000885f, + -0.000184f, +0.000568f, +0.000004f, -0.000436f, +0.000190f, -0.000041f, -0.000225f, -0.000281f, +0.000410f, +0.000031f, + +0.000473f, -0.000022f, +0.000436f, -0.000002f, +0.000253f, -0.000657f, +0.000105f, +0.000008f, -0.000629f, +0.000298f, + -0.000130f, -0.000501f, -0.000150f, -0.000129f, -0.000037f, +0.000230f, +0.000168f, -0.000006f, -0.000176f, +0.000010f, + -0.000014f, +0.000078f, +0.000055f, -0.000209f, -0.000141f, -0.000041f, +0.000124f, +0.000238f, -0.000067f, -0.000104f, + +0.000009f, +0.000035f, +0.000029f, -0.000005f, +0.000051f, -0.000134f, +0.000003f, +0.000010f, +0.000062f, -0.000001f, + +0.000013f, +0.000040f, +0.000118f, +0.000132f, -0.000008f, +0.000006f, -0.000041f, -0.000115f, -0.000005f, -0.000058f, + +0.000050f, +0.000049f, -0.000058f, +0.000144f, -0.000019f, +0.000114f, -0.000060f, -0.000006f, -0.000049f, -0.000002f, + +0.000038f, +0.000006f, -0.000057f, -0.000016f, +0.000080f, -0.000001f + }, + { + -0.000499f, -0.002837f, +0.000215f, -0.000346f, +0.000153f, -0.000411f, -0.000154f, +0.000303f, +0.000010f, +0.000127f, + -0.000336f, -0.000461f, +0.001118f, +0.006914f, +0.000802f, -0.001902f, -0.000198f, +0.000281f, +0.001282f, -0.000797f, + -0.001291f, +0.003434f, +0.000750f, +0.000976f, -0.001150f, -0.001105f, -0.000073f, +0.001177f, -0.000172f, +0.000902f, + -0.001130f, +0.000360f, -0.000307f, +0.000202f, +0.000603f, +0.000065f, +0.000143f, +0.000347f, -0.000473f, +0.000352f, + -0.000190f, -0.000228f, +0.000091f, +0.000067f, -0.000070f, -0.000207f, -0.000212f, +0.000082f, +0.000280f, +0.000248f, + +0.000138f, -0.000058f, +0.000020f, +0.000070f, -0.000047f, -0.000173f, -0.000280f, -0.000092f, +0.000004f, +0.000031f, + +0.000106f, -0.000080f, -0.000145f, -0.000127f, +0.000010f, +0.000154f, -0.000205f, +0.000104f, -0.000002f, +0.000065f, + +0.000047f, -0.000020f, +0.000060f, +0.000076f, +0.000065f, +0.000081f, +0.000007f, -0.000083f, -0.000076f, -0.000032f, + +0.000074f, -0.000038f, -0.000048f, +0.000010f, +0.000032f, -0.000039f, -0.000026f, +0.000024f, +0.000016f, +0.000015f, + +0.000014f, +0.000041f, -0.000009f, -0.000030f, +0.000023f, +0.000019f + }, + { + +0.001114f, -0.003730f, +0.002183f, +0.000873f, +0.000776f, +0.002089f, -0.002702f, -0.001273f, +0.000099f, +0.001019f, + +0.000810f, -0.000366f, +0.000516f, -0.000079f, +0.001004f, +0.000337f, +0.000052f, +0.000382f, -0.001059f, +0.000751f, + -0.000164f, +0.000407f, -0.000167f, -0.000046f, -0.000170f, +0.000906f, -0.000184f, -0.000041f, +0.000169f, -0.000244f, + +0.000020f, +0.000145f, +0.000123f, +0.000543f, +0.000702f, +0.000364f, -0.000256f, -0.000586f, +0.000541f, -0.000142f, + -0.000468f, -0.000334f, -0.000049f, +0.000249f, -0.000152f, -0.000301f, +0.000320f, -0.000570f, +0.000272f, +0.000199f, + +0.000174f, +0.000039f, +0.000148f, +0.000148f, +0.000065f, -0.000061f, +0.000107f, -0.000093f, -0.000232f, +0.000179f, + -0.000033f, -0.000016f, -0.000070f, +0.000008f, -0.000126f, -0.000165f, +0.000060f, +0.000022f, +0.000138f, +0.000077f, + -0.000193f, +0.000046f, +0.000133f, +0.000124f, -0.000029f, +0.000014f, -0.000081f, +0.000138f, +0.000025f, +0.000092f, + -0.000131f, -0.000062f, +0.000041f, +0.000114f, +0.000038f, -0.000134f, -0.000096f, -0.000010f, -0.000059f, +0.000002f, + +0.000021f, -0.000005f, +0.000088f, +0.000003f, +0.000039f, +0.000045f + }, + { + +0.000223f, +0.000733f, -0.001341f, +0.001564f, +0.000008f, +0.000178f, +0.000245f, +0.000555f, +0.000448f, -0.000546f, + +0.000045f, -0.000049f, +0.000241f, -0.006493f, -0.015994f, -0.003659f, +0.001467f, -0.000645f, +0.001429f, -0.000255f, + -0.001191f, +0.000149f, -0.000729f, +0.000191f, -0.000663f, -0.000096f, -0.001005f, +0.000777f, -0.001677f, +0.000078f, + -0.000137f, +0.000222f, +0.000773f, +0.000434f, -0.000649f, +0.000273f, -0.000053f, -0.000105f, +0.000295f, -0.000169f, + +0.000280f, +0.000046f, -0.000246f, +0.000064f, +0.000060f, +0.000016f, -0.000026f, +0.000044f, +0.000077f, -0.000097f, + +0.000210f, -0.000057f, -0.000108f, -0.000293f, +0.000020f, -0.000051f, -0.000002f, +0.000055f, -0.000016f, +0.000054f, + +0.000182f, -0.000030f, -0.000084f, +0.000079f, +0.000134f, -0.000080f, +0.000214f, +0.000261f, -0.000049f, -0.000016f, + -0.000136f, -0.000116f, +0.000168f, -0.000017f, -0.000009f, +0.000087f, -0.000126f, +0.000126f, +0.000000f, +0.000041f, + +0.000093f, -0.000113f, -0.000090f, -0.000007f, -0.000100f, -0.000014f, +0.000061f, +0.000099f, -0.000071f, +0.000025f, + +0.000085f, +0.000015f, -0.000047f, +0.000032f, +0.000050f, -0.000082f + }, + { + -0.001852f, -0.004762f, +0.000229f, +0.000345f, +0.000574f, +0.004129f, -0.000648f, -0.000423f, +0.000618f, +0.000254f, + +0.001590f, -0.001160f, -0.000265f, +0.001399f, +0.002488f, +0.000648f, +0.000624f, +0.001201f, +0.000058f, -0.000095f, + +0.000820f, -0.000170f, +0.000533f, +0.001302f, -0.000696f, -0.000541f, -0.000755f, -0.002052f, -0.000088f, -0.000690f, + +0.000262f, -0.000030f, -0.000154f, -0.000521f, -0.000693f, -0.000696f, -0.000051f, +0.000340f, -0.000308f, -0.000652f, + +0.000148f, -0.000011f, +0.000009f, -0.000042f, +0.000379f, -0.000122f, -0.000144f, +0.000345f, -0.000014f, -0.000037f, + +0.000246f, +0.000075f, +0.000138f, -0.000244f, -0.000086f, -0.000306f, +0.000054f, +0.000140f, +0.000079f, -0.000028f, + -0.000014f, -0.000065f, -0.000029f, +0.000058f, -0.000019f, +0.000039f, +0.000086f, +0.000036f, +0.000007f, +0.000125f, + -0.000076f, -0.000106f, +0.000179f, +0.000184f, -0.000048f, -0.000097f, -0.000078f, -0.000010f, +0.000017f, -0.000049f, + +0.000022f, +0.000107f, +0.000020f, -0.000031f, +0.000005f, +0.000027f, +0.000007f, +0.000143f, -0.000063f, -0.000024f, + +0.000003f, -0.000012f, +0.000007f, +0.000030f, +0.000029f, -0.000010f + } + }, + { + { + -0.001056f, -0.003041f, +0.000517f, -0.001443f, -0.000352f, +0.000273f, -0.000048f, -0.000464f, +0.000167f, +0.000016f, + +0.000130f, -0.000048f, +0.001090f, +0.000852f, -0.000198f, -0.001504f, -0.000380f, +0.000279f, +0.001492f, -0.000257f, + -0.001892f, -0.000456f, +0.000629f, +0.000216f, +0.000789f, -0.000517f, -0.000604f, +0.000327f, -0.000421f, -0.000256f, + -0.000725f, -0.000403f, +0.000517f, -0.000134f, -0.000457f, -0.000349f, +0.000802f, -0.000118f, -0.000571f, -0.000794f, + +0.000230f, +0.000128f, +0.000148f, -0.000184f, -0.000431f, +0.000298f, +0.000129f, -0.000418f, +0.000046f, -0.000567f, + +0.000149f, -0.000008f, -0.000091f, -0.000113f, +0.000069f, +0.000009f, -0.000160f, +0.000232f, -0.000225f, -0.000139f, + -0.000040f, -0.000066f, +0.000151f, -0.000074f, +0.000052f, -0.000027f, +0.000092f, -0.000102f, -0.000064f, +0.000113f, + +0.000070f, -0.000070f, +0.000114f, -0.000043f, +0.000104f, -0.000012f, +0.000025f, -0.000102f, +0.000079f, +0.000040f, + -0.000007f, -0.000004f, +0.000021f, +0.000038f, +0.000097f, +0.000079f, -0.000031f, -0.000068f, +0.000027f, -0.000001f, + -0.000081f, +0.000049f, -0.000018f, +0.000042f, +0.000019f, -0.000045f + }, + { + -0.005313f, -0.043666f, +0.001634f, -0.000165f, -0.000234f, -0.000106f, +0.000506f, -0.000943f, -0.000681f, +0.000189f, + +0.000161f, -0.000403f, +0.000264f, -0.001093f, +0.000413f, +0.000779f, -0.001085f, +0.000339f, +0.001024f, -0.000188f, + +0.000114f, -0.000337f, +0.000054f, +0.000195f, +0.000065f, +0.000766f, +0.000468f, +0.000263f, +0.000068f, +0.000220f, + -0.000126f, +0.000058f, -0.000193f, -0.000154f, -0.000969f, +0.000489f, +0.000603f, +0.000437f, -0.000071f, -0.000247f, + -0.000688f, -0.000217f, +0.000351f, +0.000288f, -0.000043f, +0.000091f, -0.000290f, +0.000473f, -0.000525f, -0.000078f, + +0.000051f, -0.000175f, +0.000471f, +0.000008f, +0.000184f, +0.000057f, -0.000057f, +0.000243f, +0.000125f, +0.000136f, + +0.000047f, +0.000127f, +0.000056f, +0.000094f, +0.000096f, -0.000163f, -0.000066f, -0.000100f, +0.000088f, +0.000223f, + -0.000000f, -0.000036f, -0.000081f, -0.000046f, +0.000044f, -0.000205f, +0.000130f, +0.000002f, -0.000047f, -0.000028f, + -0.000038f, +0.000069f, -0.000038f, +0.000034f, +0.000065f, +0.000068f, -0.000164f, +0.000065f, -0.000011f, +0.000039f, + +0.000014f, -0.000001f, -0.000038f, +0.000029f, -0.000029f, +0.000012f + }, + { + -0.002307f, +0.004416f, -0.003567f, +0.001698f, +0.002094f, +0.000643f, -0.000534f, +0.000077f, -0.000120f, +0.000486f, + -0.000155f, +0.000123f, +0.000355f, -0.001204f, -0.002364f, -0.000396f, -0.000454f, -0.000743f, -0.001133f, -0.000081f, + +0.000554f, +0.000132f, +0.000001f, -0.000270f, -0.000836f, +0.000485f, +0.000848f, +0.001012f, -0.001084f, -0.000276f, + +0.000240f, +0.000190f, +0.000153f, +0.000489f, -0.000196f, -0.000432f, +0.000072f, +0.000099f, +0.000753f, +0.000128f, + -0.000181f, +0.000180f, +0.000502f, +0.000149f, +0.000370f, +0.000459f, -0.000268f, +0.000233f, +0.000265f, +0.000396f, + +0.000061f, +0.000014f, +0.000079f, +0.000023f, +0.000021f, -0.000010f, +0.000076f, +0.000206f, +0.000031f, -0.000025f, + -0.000142f, +0.000012f, +0.000048f, +0.000052f, -0.000025f, +0.000092f, -0.000053f, +0.000180f, -0.000140f, +0.000053f, + +0.000078f, +0.000018f, -0.000001f, -0.000032f, +0.000058f, -0.000018f, -0.000019f, -0.000006f, +0.000034f, -0.000007f, + -0.000069f, +0.000015f, +0.000002f, +0.000029f, -0.000026f, -0.000028f, +0.000042f, -0.000066f, -0.000040f, -0.000001f, + -0.000048f, +0.000051f, -0.000025f, +0.000037f, -0.000025f, -0.000016f + }, + { + +0.000280f, +0.007871f, -0.000776f, -0.000438f, +0.000435f, -0.000134f, -0.000277f, -0.000389f, +0.000094f, +0.000162f, + -0.000125f, +0.000314f, -0.000178f, +0.000955f, +0.002366f, -0.003056f, -0.002480f, +0.000272f, -0.000840f, +0.000566f, + +0.000280f, +0.000256f, -0.000904f, +0.002026f, -0.000025f, -0.001179f, -0.000702f, +0.000642f, +0.000297f, -0.000809f, + +0.000362f, +0.000821f, -0.000716f, +0.000204f, -0.000612f, -0.000450f, +0.000816f, -0.000443f, +0.000151f, +0.000402f, + -0.000139f, +0.000262f, +0.000541f, -0.000028f, +0.000108f, -0.000243f, +0.000142f, +0.000071f, +0.000112f, +0.000162f, + +0.000272f, +0.000032f, -0.000032f, -0.000071f, +0.000091f, +0.000274f, -0.000023f, +0.000008f, +0.000106f, +0.000014f, + -0.000174f, -0.000028f, +0.000136f, -0.000003f, +0.000014f, +0.000095f, -0.000062f, -0.000042f, +0.000052f, +0.000124f, + +0.000070f, -0.000188f, -0.000045f, +0.000031f, +0.000022f, -0.000060f, -0.000022f, +0.000045f, +0.000043f, +0.000049f, + +0.000015f, -0.000050f, +0.000026f, -0.000021f, +0.000035f, -0.000006f, -0.000100f, -0.000047f, +0.000074f, +0.000047f, + -0.000014f, -0.000053f, +0.000019f, +0.000067f, -0.000017f, +0.000031f + }, + { + -0.001459f, +0.009452f, -0.001917f, +0.001210f, -0.000190f, +0.000193f, +0.000388f, -0.000449f, +0.000395f, -0.000624f, + +0.000795f, +0.001727f, -0.000595f, -0.001467f, +0.001303f, -0.001471f, +0.000153f, +0.000099f, -0.000453f, +0.000387f, + -0.000533f, +0.000630f, +0.000184f, -0.000159f, -0.000954f, +0.000472f, -0.000189f, +0.001766f, +0.000586f, +0.000167f, + +0.000057f, -0.000124f, -0.000484f, +0.000227f, +0.000512f, +0.000059f, +0.000083f, -0.001209f, +0.000040f, +0.000250f, + -0.000435f, -0.000024f, +0.000152f, +0.000059f, -0.000506f, +0.000065f, +0.000467f, +0.000163f, -0.000019f, -0.000085f, + -0.000092f, +0.000101f, +0.000284f, +0.000166f, -0.000219f, +0.000056f, +0.000055f, +0.000071f, -0.000083f, -0.000279f, + +0.000115f, -0.000082f, +0.000002f, +0.000098f, +0.000024f, -0.000063f, +0.000097f, -0.000018f, -0.000128f, -0.000035f, + +0.000093f, +0.000034f, -0.000056f, -0.000121f, +0.000007f, +0.000011f, -0.000093f, +0.000055f, -0.000067f, +0.000024f, + -0.000023f, +0.000039f, -0.000038f, +0.000083f, -0.000071f, -0.000043f, +0.000004f, +0.000008f, +0.000007f, -0.000052f, + +0.000030f, -0.000018f, -0.000006f, +0.000014f, -0.000037f, -0.000015f + }, + { + -0.000653f, +0.000686f, +0.003792f, -0.000434f, -0.000021f, -0.000221f, +0.000008f, -0.000003f, +0.000313f, +0.000191f, + +0.000403f, -0.000077f, +0.000447f, -0.000803f, -0.001760f, -0.000505f, +0.004376f, -0.000407f, +0.000504f, +0.001200f, + +0.001186f, -0.001049f, -0.000406f, +0.000332f, -0.001393f, -0.001490f, -0.000584f, -0.000162f, -0.002324f, -0.000709f, + -0.000445f, -0.000335f, -0.000067f, +0.000426f, -0.000036f, -0.000013f, +0.000252f, +0.000338f, +0.000158f, -0.000049f, + -0.000282f, +0.000368f, +0.000169f, -0.000041f, +0.000444f, +0.000239f, +0.000086f, -0.000459f, +0.000099f, -0.000167f, + +0.000125f, +0.000225f, +0.000130f, -0.000254f, +0.000059f, +0.000118f, -0.000053f, -0.000048f, -0.000027f, +0.000039f, + -0.000085f, -0.000188f, +0.000102f, -0.000018f, -0.000055f, +0.000010f, +0.000025f, -0.000022f, -0.000012f, -0.000121f, + -0.000145f, +0.000114f, +0.000046f, -0.000035f, -0.000007f, -0.000010f, +0.000019f, +0.000128f, +0.000113f, -0.000009f, + -0.000069f, +0.000093f, +0.000000f, -0.000029f, -0.000071f, +0.000035f, +0.000015f, -0.000031f, +0.000003f, +0.000063f, + -0.000006f, -0.000071f, -0.000039f, +0.000046f, +0.000007f, +0.000010f + }, + { + -0.008027f, -0.005575f, +0.001612f, -0.001996f, -0.000782f, +0.000481f, -0.000048f, +0.000723f, +0.000593f, -0.000267f, + -0.000238f, -0.000234f, -0.000670f, +0.000878f, +0.000719f, -0.000511f, -0.000106f, +0.000245f, +0.000920f, -0.000592f, + -0.000465f, -0.000670f, -0.000361f, +0.000296f, -0.000028f, -0.000474f, +0.000044f, +0.000517f, -0.000604f, -0.000509f, + -0.000137f, +0.000150f, +0.001007f, -0.000439f, +0.000455f, +0.000320f, -0.000329f, -0.000360f, -0.000059f, -0.000059f, + -0.000174f, +0.000637f, +0.000491f, -0.000222f, -0.000466f, +0.000059f, -0.000094f, -0.000177f, -0.000011f, +0.000230f, + -0.000365f, +0.000133f, -0.000039f, -0.000317f, -0.000018f, +0.000024f, +0.000050f, +0.000012f, +0.000076f, +0.000067f, + +0.000116f, +0.000070f, -0.000083f, +0.000020f, -0.000098f, -0.000084f, +0.000081f, +0.000150f, -0.000086f, -0.000119f, + +0.000121f, -0.000152f, -0.000203f, +0.000117f, +0.000038f, -0.000057f, -0.000014f, +0.000022f, +0.000014f, -0.000058f, + +0.000134f, -0.000095f, -0.000008f, +0.000138f, -0.000006f, -0.000111f, +0.000035f, +0.000069f, +0.000004f, -0.000044f, + -0.000046f, +0.000056f, -0.000025f, +0.000022f, -0.000030f, +0.000013f + }, + { + -0.000659f, +0.000631f, +0.001539f, +0.000310f, +0.000456f, -0.000085f, -0.000182f, +0.000132f, -0.000040f, +0.000203f, + +0.000063f, -0.000052f, -0.000959f, +0.001080f, +0.002747f, +0.000298f, -0.000931f, -0.000789f, -0.001047f, +0.002821f, + +0.000170f, -0.000817f, -0.000158f, -0.000240f, -0.000633f, -0.001707f, -0.000838f, +0.000415f, -0.000369f, +0.000052f, + +0.000249f, +0.000423f, -0.000425f, -0.000048f, +0.000117f, -0.000595f, -0.000146f, +0.000011f, -0.000151f, +0.000382f, + +0.000126f, +0.000015f, +0.000114f, -0.000083f, -0.000125f, -0.000321f, -0.000245f, +0.000462f, -0.000353f, -0.000284f, + +0.000242f, -0.000049f, -0.000079f, -0.000101f, +0.000291f, +0.000010f, +0.000103f, +0.000183f, +0.000067f, -0.000273f, + +0.000008f, -0.000133f, +0.000186f, -0.000023f, +0.000051f, -0.000072f, -0.000163f, -0.000001f, +0.000077f, -0.000027f, + +0.000026f, +0.000053f, +0.000007f, -0.000042f, +0.000052f, +0.000047f, -0.000110f, +0.000095f, +0.000059f, +0.000002f, + +0.000070f, -0.000027f, -0.000022f, -0.000017f, -0.000024f, +0.000037f, -0.000003f, +0.000043f, -0.000031f, -0.000022f, + +0.000067f, -0.000009f, +0.000009f, -0.000007f, -0.000007f, +0.000005f + }, + { + -0.002835f, +0.059745f, +0.006370f, -0.002171f, +0.000437f, +0.000265f, +0.000257f, -0.000058f, -0.000695f, +0.000177f, + +0.001311f, -0.000566f, +0.000188f, -0.002021f, +0.001683f, -0.000091f, -0.000104f, +0.000302f, -0.000463f, -0.000443f, + -0.000254f, +0.000536f, -0.001482f, +0.000401f, +0.000479f, -0.000534f, +0.000258f, +0.000363f, +0.000103f, -0.000223f, + -0.000219f, +0.000017f, -0.000283f, -0.000334f, -0.000471f, +0.000033f, -0.000208f, -0.000161f, +0.000264f, +0.000626f, + -0.000408f, +0.000163f, +0.000707f, -0.000029f, -0.000099f, -0.000373f, +0.000146f, +0.000090f, -0.000042f, +0.000000f, + -0.000214f, +0.000279f, -0.000099f, +0.000031f, +0.000100f, +0.000105f, -0.000099f, -0.000128f, +0.000163f, -0.000051f, + -0.000035f, +0.000087f, -0.000063f, +0.000088f, +0.000118f, -0.000309f, -0.000045f, +0.000124f, +0.000025f, +0.000044f, + +0.000000f, -0.000013f, -0.000074f, -0.000008f, +0.000046f, +0.000093f, -0.000138f, -0.000031f, +0.000023f, -0.000024f, + -0.000022f, +0.000013f, -0.000088f, +0.000020f, -0.000038f, -0.000076f, -0.000054f, +0.000009f, +0.000040f, +0.000041f, + +0.000028f, -0.000035f, -0.000006f, -0.000046f, +0.000032f, +0.000015f + }, + { + -0.000102f, +0.005168f, -0.000921f, +0.001106f, -0.000704f, -0.000330f, +0.000813f, +0.000040f, -0.000211f, +0.000263f, + +0.000333f, +0.000501f, -0.000721f, +0.000170f, -0.001857f, +0.001167f, -0.000214f, -0.000955f, +0.000256f, +0.001599f, + +0.000032f, -0.001759f, -0.001637f, +0.000379f, +0.000659f, +0.000782f, -0.000300f, -0.000168f, -0.000194f, +0.000215f, + +0.000277f, -0.000218f, -0.000206f, +0.000310f, -0.000005f, -0.000118f, -0.000320f, +0.000202f, +0.000427f, -0.000132f, + -0.000203f, -0.000200f, +0.000290f, +0.000072f, -0.000454f, +0.000281f, -0.000105f, +0.000039f, -0.000162f, -0.000375f, + +0.000405f, +0.000310f, +0.000165f, +0.000301f, +0.000159f, -0.000198f, -0.000135f, +0.000007f, -0.000029f, +0.000121f, + +0.000102f, +0.000000f, +0.000072f, -0.000026f, +0.000023f, -0.000130f, -0.000119f, +0.000023f, +0.000083f, +0.000137f, + -0.000012f, -0.000004f, -0.000009f, -0.000081f, +0.000008f, +0.000040f, -0.000042f, -0.000067f, -0.000018f, -0.000034f, + -0.000052f, -0.000068f, -0.000026f, +0.000025f, +0.000033f, +0.000055f, -0.000003f, -0.000049f, -0.000030f, -0.000035f, + +0.000063f, -0.000024f, +0.000012f, -0.000009f, +0.000007f, +0.000033f + }, + { + -0.004230f, +0.017198f, +0.002745f, -0.001624f, -0.000435f, -0.000218f, +0.002921f, +0.000252f, -0.000266f, -0.000533f, + +0.000107f, -0.000437f, +0.000162f, -0.000116f, +0.000800f, -0.000998f, -0.000451f, +0.000084f, +0.000300f, +0.000548f, + +0.000290f, -0.000415f, +0.000772f, -0.000739f, +0.000572f, +0.000146f, -0.000209f, +0.000074f, -0.000266f, -0.000432f, + +0.000880f, +0.000396f, +0.000065f, -0.000649f, -0.000056f, +0.000285f, -0.000757f, +0.000191f, -0.000269f, +0.000128f, + +0.000439f, +0.000592f, -0.000099f, -0.000017f, -0.000410f, -0.000165f, -0.000142f, -0.000103f, +0.000259f, -0.000157f, + +0.000056f, +0.000015f, +0.000119f, +0.000288f, -0.000145f, -0.000145f, -0.000207f, -0.000225f, +0.000202f, -0.000003f, + +0.000033f, +0.000029f, +0.000067f, -0.000049f, -0.000102f, +0.000098f, -0.000068f, -0.000040f, -0.000077f, +0.000029f, + -0.000024f, +0.000010f, -0.000047f, +0.000045f, +0.000133f, -0.000038f, +0.000125f, +0.000056f, -0.000104f, +0.000017f, + -0.000025f, +0.000007f, +0.000055f, -0.000078f, +0.000021f, -0.000046f, +0.000066f, -0.000009f, +0.000058f, -0.000005f, + -0.000038f, +0.000024f, +0.000013f, -0.000029f, -0.000028f, +0.000050f + }, + { + +0.000330f, -0.003017f, -0.002175f, -0.000457f, -0.000369f, +0.000451f, -0.000265f, +0.000162f, +0.000016f, -0.000121f, + -0.000189f, +0.000063f, -0.001350f, +0.001666f, +0.000170f, -0.001060f, +0.000078f, -0.000311f, +0.001681f, -0.000192f, + -0.001363f, -0.000699f, +0.000728f, -0.000433f, +0.001222f, +0.000848f, -0.001168f, +0.000418f, -0.000108f, -0.000357f, + +0.000719f, +0.000195f, +0.000164f, -0.000536f, +0.000423f, -0.000294f, +0.000254f, -0.000174f, +0.000518f, +0.000349f, + +0.000264f, -0.000004f, -0.000345f, +0.000330f, +0.000187f, -0.000208f, -0.000046f, -0.000320f, +0.000040f, -0.000058f, + +0.000073f, +0.000091f, -0.000259f, +0.000127f, +0.000079f, +0.000119f, -0.000023f, -0.000063f, -0.000419f, -0.000095f, + -0.000225f, +0.000009f, +0.000034f, +0.000016f, -0.000180f, -0.000095f, +0.000175f, -0.000083f, +0.000028f, -0.000033f, + -0.000007f, +0.000063f, -0.000022f, +0.000062f, +0.000045f, +0.000008f, +0.000101f, +0.000069f, -0.000075f, +0.000032f, + -0.000063f, +0.000048f, +0.000063f, -0.000054f, +0.000002f, -0.000018f, -0.000014f, -0.000049f, -0.000026f, -0.000009f, + -0.000033f, +0.000001f, +0.000043f, +0.000038f, -0.000045f, +0.000015f + }, + { + -0.000169f, -0.005936f, -0.003667f, +0.002568f, -0.000220f, +0.003263f, +0.002446f, -0.000114f, +0.000728f, -0.000849f, + -0.000043f, -0.000030f, -0.000034f, -0.000812f, -0.000494f, +0.000788f, -0.001555f, +0.000118f, -0.000159f, -0.000363f, + +0.001265f, +0.000135f, +0.000197f, -0.000102f, -0.000029f, +0.000530f, -0.000058f, -0.000587f, +0.000128f, +0.000556f, + -0.000222f, +0.000451f, +0.000207f, -0.000102f, -0.000657f, +0.000072f, +0.000394f, -0.000335f, +0.000024f, +0.000469f, + +0.000127f, -0.000205f, -0.000218f, +0.000743f, -0.000463f, -0.000221f, +0.000097f, +0.000015f, -0.000415f, -0.000207f, + -0.000036f, -0.000082f, +0.000166f, -0.000005f, +0.000335f, +0.000166f, +0.000265f, +0.000188f, -0.000080f, -0.000231f, + +0.000009f, -0.000041f, -0.000014f, -0.000062f, +0.000023f, +0.000019f, +0.000056f, -0.000074f, -0.000088f, +0.000116f, + +0.000043f, -0.000052f, -0.000043f, +0.000154f, -0.000000f, -0.000003f, -0.000039f, -0.000063f, +0.000061f, +0.000005f, + +0.000139f, -0.000084f, -0.000044f, +0.000005f, +0.000043f, +0.000136f, -0.000010f, -0.000094f, -0.000002f, -0.000009f, + -0.000028f, -0.000037f, -0.000025f, +0.000067f, -0.000007f, +0.000055f + }, + { + -0.000003f, +0.000579f, -0.003242f, +0.000474f, -0.000045f, +0.000016f, +0.000196f, +0.000189f, +0.000688f, -0.000394f, + -0.000396f, +0.000198f, -0.001763f, +0.000499f, +0.007622f, +0.001532f, +0.001822f, -0.000386f, +0.000173f, -0.000207f, + -0.000295f, +0.001430f, -0.000036f, +0.001346f, +0.001486f, +0.000370f, +0.000820f, +0.000154f, -0.001475f, +0.000207f, + -0.001074f, +0.000186f, +0.000786f, +0.000101f, +0.000034f, -0.000026f, -0.000027f, -0.000096f, -0.000094f, +0.000313f, + -0.000390f, +0.000009f, +0.000243f, -0.000184f, -0.000045f, +0.000214f, -0.000543f, +0.000153f, +0.000059f, +0.000218f, + -0.000247f, +0.000306f, +0.000372f, -0.000044f, +0.000009f, -0.000003f, -0.000075f, -0.000037f, +0.000052f, -0.000100f, + -0.000128f, +0.000319f, -0.000068f, -0.000075f, +0.000028f, +0.000168f, -0.000195f, -0.000026f, +0.000039f, +0.000033f, + +0.000078f, -0.000061f, -0.000019f, +0.000046f, -0.000037f, +0.000064f, +0.000126f, -0.000127f, -0.000032f, -0.000092f, + -0.000015f, +0.000073f, -0.000033f, -0.000006f, +0.000036f, -0.000071f, -0.000053f, -0.000080f, +0.000058f, -0.000076f, + +0.000002f, +0.000069f, +0.000046f, -0.000055f, +0.000019f, +0.000058f + }, + { + +0.001628f, +0.001573f, +0.001020f, -0.000487f, -0.001114f, -0.000586f, -0.001199f, -0.000325f, +0.000220f, -0.000634f, + +0.001213f, +0.000421f, -0.000122f, -0.001460f, -0.003150f, -0.000685f, +0.001217f, +0.000062f, +0.000134f, -0.000292f, + +0.000026f, -0.000369f, -0.000017f, +0.000461f, +0.000206f, -0.000053f, -0.000454f, -0.000618f, +0.000726f, -0.000022f, + +0.000169f, +0.000020f, +0.000449f, -0.000050f, -0.000154f, -0.000594f, -0.000377f, -0.000255f, +0.000402f, -0.000418f, + +0.000188f, +0.000329f, +0.000358f, +0.000088f, -0.000073f, +0.000223f, -0.000251f, -0.000219f, -0.000085f, +0.000006f, + +0.000128f, +0.000019f, +0.000230f, +0.000227f, +0.000054f, +0.000025f, +0.000111f, -0.000118f, +0.000168f, -0.000072f, + +0.000047f, +0.000099f, -0.000087f, -0.000100f, +0.000023f, -0.000052f, -0.000162f, -0.000004f, +0.000045f, +0.000019f, + +0.000066f, -0.000105f, -0.000148f, +0.000041f, +0.000123f, +0.000047f, -0.000027f, -0.000060f, +0.000034f, +0.000003f, + -0.000065f, -0.000066f, +0.000084f, -0.000015f, -0.000032f, +0.000031f, +0.000019f, -0.000029f, +0.000127f, -0.000029f, + +0.000003f, +0.000039f, -0.000051f, +0.000007f, -0.000025f, -0.000003f + } + }, + { + { + +0.000262f, -0.000635f, -0.003161f, +0.001037f, -0.000725f, -0.000132f, +0.000137f, -0.000482f, -0.000027f, -0.000065f, + +0.000166f, -0.000161f, +0.001181f, +0.000976f, +0.000345f, -0.000829f, -0.000594f, -0.000323f, +0.000423f, -0.000253f, + -0.001191f, -0.001121f, +0.000590f, +0.000127f, +0.000589f, +0.000199f, -0.001017f, +0.000431f, -0.000444f, -0.001201f, + -0.000053f, -0.000519f, -0.000578f, +0.000733f, -0.000328f, -0.000293f, +0.000451f, +0.000649f, -0.000223f, -0.000432f, + -0.000021f, -0.000094f, +0.000268f, -0.000239f, -0.000142f, +0.000158f, +0.000102f, -0.000106f, -0.000220f, -0.000373f, + -0.000099f, +0.000044f, -0.000056f, -0.000208f, -0.000113f, +0.000013f, -0.000012f, +0.000247f, +0.000096f, -0.000291f, + -0.000098f, -0.000231f, +0.000015f, +0.000092f, -0.000003f, -0.000103f, +0.000038f, -0.000080f, -0.000222f, +0.000064f, + +0.000135f, +0.000035f, +0.000045f, -0.000020f, +0.000035f, -0.000004f, +0.000005f, -0.000060f, -0.000051f, +0.000016f, + +0.000024f, -0.000055f, -0.000058f, -0.000020f, +0.000097f, +0.000063f, +0.000002f, -0.000066f, +0.000017f, +0.000068f, + -0.000060f, +0.000021f, +0.000013f, +0.000014f, +0.000035f, -0.000009f + }, + { + +0.003558f, -0.032283f, -0.010037f, -0.001355f, -0.000288f, -0.000779f, +0.000416f, +0.000443f, +0.000105f, -0.000646f, + -0.000003f, -0.000501f, +0.000041f, -0.000101f, -0.001047f, +0.001054f, +0.000225f, +0.000083f, +0.000903f, -0.000188f, + +0.000247f, +0.000882f, -0.000718f, -0.000036f, +0.000407f, +0.000503f, +0.000005f, +0.000854f, -0.000128f, -0.000052f, + -0.000414f, -0.000441f, +0.000372f, +0.000324f, -0.000869f, -0.000132f, +0.000629f, +0.000580f, +0.000278f, -0.000484f, + -0.000208f, -0.000473f, +0.000273f, +0.000368f, -0.000337f, +0.000370f, -0.000192f, +0.000416f, -0.000162f, +0.000177f, + -0.000059f, -0.000487f, +0.000103f, +0.000140f, -0.000050f, +0.000106f, -0.000052f, +0.000225f, +0.000082f, +0.000035f, + -0.000128f, +0.000245f, +0.000050f, +0.000024f, +0.000095f, +0.000007f, -0.000137f, -0.000113f, -0.000129f, +0.000163f, + +0.000075f, +0.000005f, -0.000051f, -0.000117f, +0.000145f, -0.000098f, +0.000016f, +0.000066f, -0.000011f, -0.000117f, + -0.000034f, +0.000037f, -0.000019f, +0.000003f, +0.000021f, +0.000156f, -0.000114f, +0.000033f, -0.000001f, +0.000004f, + +0.000010f, +0.000001f, -0.000050f, +0.000023f, -0.000022f, +0.000023f + }, + { + +0.002744f, -0.005425f, +0.000254f, -0.002096f, +0.001846f, +0.000591f, -0.000546f, -0.000048f, -0.000047f, +0.001171f, + +0.000013f, +0.000187f, +0.000182f, +0.000053f, -0.002539f, -0.000889f, -0.000564f, -0.000438f, -0.000318f, -0.000681f, + +0.000524f, -0.000463f, -0.000016f, -0.000578f, -0.000337f, +0.000156f, +0.000854f, +0.000443f, -0.000579f, -0.000258f, + +0.000733f, +0.000329f, -0.000301f, +0.000692f, +0.000086f, -0.000479f, -0.000253f, +0.000178f, +0.000598f, +0.000182f, + -0.000349f, +0.000091f, +0.000334f, -0.000129f, +0.000158f, +0.000751f, +0.000126f, +0.000052f, -0.000183f, +0.000179f, + +0.000182f, +0.000163f, +0.000186f, +0.000025f, -0.000005f, +0.000009f, -0.000251f, +0.000183f, +0.000057f, +0.000030f, + -0.000210f, -0.000148f, +0.000052f, -0.000094f, -0.000083f, -0.000012f, +0.000038f, -0.000033f, -0.000014f, -0.000030f, + +0.000011f, -0.000006f, -0.000009f, -0.000085f, +0.000039f, +0.000016f, +0.000036f, +0.000009f, +0.000084f, -0.000000f, + -0.000041f, +0.000006f, -0.000083f, +0.000042f, +0.000052f, -0.000025f, +0.000059f, +0.000005f, -0.000056f, +0.000039f, + -0.000060f, +0.000008f, -0.000025f, +0.000008f, -0.000017f, -0.000024f + }, + { + -0.000236f, +0.007600f, +0.001046f, -0.000742f, +0.000217f, +0.000108f, -0.000411f, -0.000294f, -0.000162f, +0.000055f, + +0.000129f, +0.000275f, -0.000131f, -0.000685f, +0.004541f, +0.000229f, -0.004323f, +0.000140f, -0.001626f, +0.000892f, + +0.001204f, -0.001295f, +0.000287f, +0.000904f, -0.001003f, +0.000610f, -0.001140f, -0.000314f, +0.000957f, -0.000754f, + +0.000243f, +0.000347f, -0.000490f, -0.000128f, -0.000192f, -0.000338f, +0.000079f, +0.000123f, -0.000110f, -0.000075f, + +0.000150f, +0.000235f, +0.000343f, +0.000148f, -0.000008f, -0.000218f, -0.000054f, +0.000048f, +0.000084f, +0.000180f, + +0.000475f, -0.000112f, -0.000160f, +0.000084f, +0.000004f, +0.000164f, +0.000158f, -0.000097f, +0.000096f, +0.000135f, + -0.000053f, -0.000076f, +0.000163f, +0.000018f, -0.000043f, +0.000060f, +0.000006f, -0.000072f, -0.000040f, +0.000173f, + +0.000142f, -0.000066f, -0.000048f, +0.000017f, +0.000049f, +0.000003f, -0.000103f, -0.000052f, +0.000034f, +0.000080f, + +0.000049f, -0.000068f, +0.000013f, -0.000014f, +0.000032f, +0.000048f, -0.000086f, -0.000041f, +0.000011f, +0.000023f, + -0.000008f, -0.000053f, -0.000028f, +0.000062f, -0.000023f, -0.000014f + }, + { + +0.007597f, +0.004839f, -0.007591f, +0.001195f, -0.000282f, +0.000224f, +0.000350f, -0.000053f, +0.000046f, +0.000545f, + -0.000638f, +0.000852f, -0.000292f, -0.000493f, +0.000572f, -0.001033f, +0.000448f, -0.000175f, -0.000013f, +0.000002f, + -0.000169f, +0.000324f, -0.000456f, +0.000644f, -0.000593f, +0.000252f, +0.000188f, +0.002096f, +0.000082f, +0.000209f, + -0.000000f, -0.000410f, -0.000717f, +0.000478f, +0.000162f, +0.000423f, +0.000196f, +0.000055f, -0.000105f, +0.000135f, + +0.000396f, -0.000229f, -0.000156f, +0.000017f, -0.000334f, -0.000109f, +0.000162f, +0.000182f, -0.000037f, +0.000032f, + -0.000265f, -0.000112f, +0.000105f, +0.000261f, +0.000060f, -0.000109f, +0.000328f, +0.000014f, -0.000082f, -0.000204f, + +0.000052f, -0.000011f, -0.000115f, +0.000060f, +0.000059f, -0.000141f, +0.000104f, +0.000090f, -0.000086f, -0.000034f, + -0.000023f, +0.000141f, +0.000069f, -0.000074f, -0.000084f, +0.000057f, -0.000158f, +0.000029f, -0.000036f, -0.000058f, + +0.000003f, -0.000010f, -0.000051f, +0.000069f, +0.000032f, -0.000061f, -0.000007f, -0.000018f, +0.000023f, +0.000010f, + +0.000047f, -0.000007f, -0.000005f, +0.000040f, -0.000031f, -0.000027f + }, + { + -0.000059f, -0.001421f, +0.002573f, +0.000671f, -0.000046f, -0.000005f, -0.000229f, +0.000103f, +0.000018f, +0.000252f, + +0.000367f, +0.000070f, +0.000765f, +0.000946f, -0.001272f, +0.001118f, +0.001172f, +0.001235f, -0.000815f, +0.002157f, + +0.001008f, -0.000319f, -0.001219f, +0.001876f, -0.001503f, -0.000983f, -0.000954f, -0.000249f, -0.000484f, -0.001912f, + -0.000401f, -0.000278f, +0.000110f, -0.000392f, +0.000613f, +0.000291f, -0.000372f, +0.000428f, +0.000264f, +0.000125f, + -0.000537f, +0.000388f, +0.000264f, -0.000122f, +0.000163f, +0.000275f, -0.000002f, -0.000062f, -0.000148f, -0.000047f, + -0.000083f, +0.000234f, +0.000166f, -0.000022f, -0.000235f, +0.000029f, -0.000076f, +0.000130f, -0.000012f, +0.000021f, + +0.000063f, -0.000184f, -0.000013f, +0.000075f, -0.000100f, -0.000052f, +0.000112f, +0.000015f, +0.000086f, -0.000004f, + -0.000121f, -0.000008f, +0.000030f, +0.000054f, -0.000075f, -0.000092f, -0.000092f, +0.000067f, +0.000049f, +0.000079f, + -0.000081f, +0.000046f, +0.000057f, +0.000022f, -0.000054f, -0.000007f, +0.000010f, -0.000001f, -0.000018f, +0.000041f, + +0.000064f, -0.000048f, -0.000102f, +0.000015f, +0.000016f, +0.000022f + }, + { + +0.007260f, -0.023002f, +0.000260f, -0.002664f, -0.000262f, +0.000084f, -0.000083f, +0.000840f, +0.000199f, -0.000287f, + -0.000497f, +0.000216f, -0.000164f, +0.000432f, +0.000414f, -0.000100f, +0.000105f, -0.000449f, +0.001212f, +0.000093f, + -0.000426f, -0.000463f, -0.000246f, +0.000275f, -0.000344f, -0.000193f, -0.000209f, +0.000209f, -0.000510f, +0.000113f, + -0.000143f, -0.000148f, +0.000658f, +0.000112f, -0.000178f, +0.000275f, -0.000069f, -0.000109f, -0.000660f, +0.000017f, + +0.000033f, +0.000486f, +0.000456f, -0.000154f, +0.000018f, -0.000173f, +0.000070f, +0.000083f, -0.000088f, +0.000309f, + -0.000233f, +0.000074f, -0.000079f, -0.000118f, -0.000072f, -0.000128f, -0.000010f, +0.000057f, -0.000116f, +0.000009f, + +0.000062f, +0.000048f, -0.000019f, -0.000010f, -0.000097f, -0.000190f, -0.000110f, +0.000149f, -0.000044f, -0.000078f, + +0.000119f, -0.000000f, -0.000255f, +0.000012f, +0.000030f, -0.000032f, -0.000043f, +0.000029f, +0.000009f, -0.000060f, + +0.000133f, -0.000020f, -0.000068f, +0.000026f, +0.000085f, -0.000086f, -0.000063f, +0.000058f, +0.000042f, +0.000017f, + -0.000075f, +0.000049f, +0.000029f, +0.000015f, +0.000010f, -0.000023f + }, + { + -0.000066f, -0.002202f, +0.000572f, +0.000882f, +0.000253f, +0.000056f, -0.000169f, +0.000114f, -0.000138f, +0.000005f, + +0.000495f, +0.000234f, +0.000164f, +0.001337f, +0.002529f, +0.000336f, +0.000364f, +0.000482f, -0.000791f, +0.001132f, + +0.002615f, +0.000524f, -0.000750f, +0.001084f, -0.001196f, -0.002129f, -0.000346f, -0.000126f, -0.000225f, +0.000085f, + +0.000716f, -0.000243f, -0.000136f, -0.000400f, +0.000313f, -0.000319f, -0.000320f, -0.000167f, +0.000132f, +0.000157f, + +0.000199f, +0.000149f, +0.000035f, +0.000214f, -0.000145f, -0.000300f, -0.000353f, +0.000506f, +0.000060f, -0.000346f, + +0.000001f, -0.000016f, -0.000213f, -0.000105f, -0.000027f, +0.000045f, -0.000060f, +0.000159f, +0.000179f, -0.000177f, + -0.000083f, -0.000076f, +0.000050f, +0.000028f, +0.000082f, -0.000033f, -0.000116f, -0.000110f, +0.000097f, +0.000064f, + +0.000043f, +0.000055f, -0.000020f, -0.000006f, -0.000009f, +0.000023f, -0.000039f, -0.000046f, +0.000048f, -0.000038f, + +0.000097f, +0.000020f, +0.000027f, -0.000012f, -0.000056f, +0.000048f, -0.000056f, -0.000005f, +0.000015f, -0.000058f, + +0.000041f, +0.000002f, -0.000040f, +0.000018f, +0.000002f, +0.000009f + }, + { + +0.009605f, +0.059006f, -0.002942f, -0.001563f, -0.000685f, +0.000087f, -0.000459f, +0.000856f, -0.000559f, -0.000638f, + +0.001005f, +0.000352f, +0.000618f, +0.000495f, +0.000599f, -0.001310f, -0.000803f, +0.000338f, -0.000356f, -0.000219f, + -0.000597f, +0.000384f, -0.000698f, -0.000439f, +0.000369f, -0.000426f, +0.000035f, -0.000117f, -0.000121f, +0.000145f, + -0.000027f, -0.000250f, +0.000088f, -0.000713f, -0.000390f, -0.000358f, -0.000073f, +0.000888f, -0.001163f, +0.000895f, + -0.000380f, +0.000547f, +0.000256f, +0.000160f, -0.000099f, -0.000247f, -0.000184f, +0.000200f, +0.000294f, -0.000250f, + -0.000265f, -0.000080f, -0.000076f, +0.000136f, +0.000301f, +0.000051f, -0.000063f, -0.000113f, +0.000149f, +0.000072f, + +0.000030f, +0.000007f, -0.000074f, +0.000130f, +0.000179f, -0.000093f, -0.000173f, +0.000075f, -0.000018f, -0.000003f, + +0.000015f, +0.000077f, -0.000094f, +0.000075f, -0.000037f, +0.000103f, -0.000091f, -0.000026f, -0.000027f, -0.000026f, + -0.000045f, +0.000070f, -0.000009f, +0.000025f, +0.000018f, -0.000023f, -0.000067f, -0.000056f, +0.000005f, -0.000000f, + +0.000067f, -0.000012f, +0.000000f, -0.000072f, +0.000030f, +0.000015f + }, + { + +0.000206f, +0.004493f, -0.000835f, +0.000810f, +0.000120f, -0.001558f, +0.000202f, +0.000809f, +0.000216f, +0.000131f, + +0.000332f, +0.001322f, -0.000459f, +0.000179f, -0.002081f, +0.000257f, +0.000647f, -0.000917f, -0.001279f, +0.001531f, + +0.000133f, -0.001226f, -0.000880f, -0.000099f, +0.000377f, +0.000331f, -0.000292f, -0.000101f, +0.000355f, +0.000287f, + +0.000059f, -0.000223f, -0.000247f, +0.000257f, -0.000378f, -0.000071f, -0.000652f, -0.000137f, +0.000249f, -0.000272f, + -0.000179f, -0.000347f, +0.000100f, +0.000420f, -0.000491f, +0.000126f, +0.000061f, -0.000077f, +0.000006f, -0.000257f, + -0.000047f, +0.000319f, +0.000017f, +0.000233f, +0.000457f, -0.000262f, -0.000048f, -0.000004f, -0.000074f, +0.000037f, + +0.000139f, +0.000086f, +0.000151f, +0.000018f, +0.000046f, +0.000017f, -0.000145f, -0.000092f, -0.000124f, +0.000128f, + +0.000005f, +0.000035f, +0.000110f, -0.000103f, +0.000015f, +0.000008f, +0.000008f, -0.000028f, +0.000032f, +0.000046f, + +0.000017f, -0.000049f, -0.000035f, -0.000029f, -0.000040f, +0.000020f, +0.000050f, -0.000034f, -0.000012f, -0.000049f, + +0.000055f, -0.000018f, -0.000010f, -0.000012f, -0.000033f, +0.000018f + }, + { + +0.004775f, +0.009026f, -0.003382f, +0.001237f, -0.000272f, +0.000156f, +0.001583f, +0.001178f, +0.000428f, -0.000658f, + +0.000156f, -0.000181f, -0.000147f, -0.000199f, -0.000381f, +0.000364f, -0.000483f, -0.000385f, +0.000069f, +0.000032f, + +0.000339f, -0.000424f, +0.000370f, -0.000146f, +0.000307f, -0.000067f, -0.000407f, +0.000408f, -0.000154f, -0.000462f, + +0.000221f, -0.000063f, +0.000455f, -0.000418f, -0.000530f, +0.000646f, -0.000315f, -0.000313f, +0.000207f, +0.000085f, + -0.000001f, +0.000441f, +0.000222f, +0.000051f, -0.000102f, -0.000173f, -0.000214f, -0.000127f, +0.000138f, +0.000065f, + +0.000065f, -0.000079f, +0.000078f, +0.000250f, +0.000110f, -0.000049f, -0.000143f, -0.000319f, +0.000124f, +0.000102f, + +0.000067f, -0.000006f, +0.000140f, +0.000003f, -0.000129f, +0.000099f, -0.000032f, -0.000020f, -0.000116f, +0.000034f, + +0.000025f, -0.000024f, -0.000085f, -0.000062f, +0.000017f, -0.000048f, +0.000060f, +0.000102f, -0.000053f, +0.000019f, + -0.000018f, -0.000050f, +0.000085f, -0.000102f, +0.000001f, -0.000099f, +0.000028f, -0.000000f, +0.000043f, +0.000009f, + -0.000042f, -0.000009f, +0.000045f, +0.000011f, -0.000064f, +0.000016f + }, + { + -0.000103f, -0.003991f, -0.000610f, -0.000924f, -0.000487f, +0.000316f, +0.000030f, -0.000181f, +0.000147f, -0.000029f, + -0.000207f, +0.000163f, -0.000330f, -0.000812f, -0.000205f, +0.000024f, -0.000338f, -0.000046f, +0.000120f, +0.000118f, + +0.000991f, -0.003104f, +0.000397f, -0.001503f, +0.001168f, +0.001393f, +0.000164f, -0.000731f, -0.000009f, -0.000059f, + +0.000663f, +0.000260f, +0.000735f, -0.000279f, -0.000192f, +0.000088f, +0.000034f, -0.000350f, +0.000575f, +0.000041f, + +0.000070f, +0.000191f, -0.000144f, -0.000030f, +0.000018f, +0.000020f, +0.000007f, -0.000341f, -0.000079f, -0.000348f, + -0.000124f, +0.000311f, -0.000144f, +0.000112f, -0.000043f, +0.000185f, +0.000141f, +0.000126f, -0.000125f, -0.000031f, + -0.000119f, -0.000072f, -0.000018f, +0.000105f, -0.000047f, -0.000125f, +0.000247f, -0.000067f, +0.000065f, -0.000054f, + -0.000049f, +0.000052f, -0.000085f, -0.000012f, -0.000037f, -0.000043f, +0.000036f, +0.000079f, -0.000007f, +0.000061f, + -0.000052f, +0.000044f, +0.000079f, -0.000001f, +0.000012f, +0.000011f, +0.000022f, -0.000035f, -0.000025f, -0.000023f, + -0.000038f, -0.000009f, +0.000016f, +0.000026f, -0.000019f, -0.000023f + }, + { + -0.000747f, -0.004479f, -0.000193f, +0.000153f, -0.000489f, -0.000367f, +0.003964f, +0.000184f, +0.000969f, -0.000662f, + -0.001256f, -0.000074f, -0.000728f, +0.001000f, -0.000794f, +0.000979f, -0.001451f, -0.000166f, +0.000239f, -0.000950f, + +0.000803f, +0.000188f, +0.000368f, +0.000131f, +0.000125f, -0.000394f, -0.000350f, -0.000496f, -0.000522f, +0.000440f, + +0.000071f, +0.000178f, -0.000031f, -0.000050f, -0.000569f, -0.000377f, +0.000505f, +0.000080f, -0.000083f, +0.000333f, + +0.000032f, +0.000048f, +0.000283f, +0.000467f, +0.000244f, +0.000368f, -0.000186f, +0.000199f, -0.000239f, -0.000368f, + +0.000094f, -0.000229f, +0.000111f, -0.000080f, +0.000030f, +0.000083f, +0.000102f, +0.000246f, +0.000109f, -0.000233f, + -0.000073f, -0.000024f, +0.000001f, -0.000054f, +0.000045f, +0.000189f, -0.000004f, +0.000037f, -0.000116f, -0.000042f, + +0.000156f, -0.000000f, -0.000128f, -0.000025f, +0.000011f, -0.000049f, +0.000045f, -0.000090f, -0.000017f, -0.000077f, + +0.000139f, +0.000028f, -0.000032f, -0.000068f, -0.000038f, +0.000129f, +0.000084f, +0.000016f, +0.000045f, +0.000005f, + -0.000024f, -0.000001f, -0.000095f, +0.000002f, -0.000024f, -0.000018f + }, + { + +0.000315f, +0.001138f, -0.001496f, -0.000770f, -0.000028f, +0.000023f, +0.000009f, +0.000291f, +0.000147f, +0.000176f, + -0.000153f, +0.000018f, -0.001601f, +0.003673f, +0.002302f, +0.002967f, +0.000020f, +0.000751f, +0.000219f, -0.000941f, + -0.000434f, +0.000644f, +0.000413f, +0.000973f, +0.001202f, +0.000348f, +0.000408f, -0.000297f, -0.000229f, +0.000254f, + -0.000961f, +0.000430f, +0.000442f, +0.000304f, +0.000470f, +0.000089f, +0.000401f, -0.000109f, -0.000301f, +0.000544f, + -0.000333f, -0.000306f, +0.000145f, -0.000186f, -0.000098f, +0.000097f, -0.000349f, -0.000141f, +0.000094f, +0.000327f, + -0.000243f, +0.000089f, +0.000299f, +0.000231f, -0.000040f, +0.000018f, -0.000042f, -0.000089f, +0.000160f, -0.000076f, + -0.000229f, +0.000106f, -0.000020f, -0.000062f, -0.000076f, +0.000146f, -0.000137f, -0.000173f, +0.000041f, +0.000001f, + +0.000089f, +0.000024f, -0.000102f, +0.000042f, +0.000034f, -0.000066f, +0.000157f, -0.000122f, -0.000048f, -0.000061f, + -0.000080f, +0.000062f, +0.000060f, -0.000022f, +0.000100f, -0.000018f, -0.000026f, -0.000093f, +0.000056f, -0.000016f, + -0.000060f, -0.000004f, +0.000060f, -0.000034f, -0.000038f, +0.000075f + }, + { + +0.000017f, +0.003353f, +0.003389f, -0.001240f, -0.000730f, -0.004263f, +0.000107f, +0.000055f, -0.000056f, -0.000235f, + -0.000175f, -0.000032f, +0.000502f, -0.001707f, -0.003217f, -0.000798f, +0.001080f, -0.001438f, +0.000568f, -0.000131f, + -0.000098f, +0.000087f, -0.000305f, -0.000539f, +0.000549f, +0.000314f, -0.000149f, +0.000765f, -0.001055f, +0.000464f, + +0.000364f, -0.000184f, +0.000257f, +0.000599f, -0.000121f, -0.000058f, -0.000613f, -0.000189f, +0.000175f, +0.000101f, + -0.000244f, +0.000376f, +0.000338f, +0.000226f, -0.000158f, +0.000213f, +0.000136f, -0.000306f, -0.000300f, +0.000011f, + +0.000071f, -0.000164f, +0.000021f, +0.000181f, +0.000102f, +0.000112f, +0.000204f, -0.000060f, +0.000122f, +0.000024f, + -0.000009f, +0.000128f, +0.000040f, -0.000112f, -0.000019f, +0.000007f, -0.000140f, +0.000096f, +0.000049f, -0.000091f, + +0.000120f, +0.000010f, -0.000188f, -0.000142f, +0.000030f, +0.000082f, +0.000057f, -0.000030f, -0.000043f, +0.000070f, + -0.000029f, -0.000149f, +0.000040f, +0.000053f, -0.000035f, -0.000004f, -0.000003f, -0.000123f, +0.000084f, +0.000040f, + -0.000003f, +0.000039f, -0.000010f, -0.000034f, -0.000052f, -0.000005f + } + }, + { + { + +0.000034f, +0.007674f, +0.001430f, +0.001471f, +0.000347f, -0.000350f, +0.000190f, +0.000193f, -0.000147f, +0.000409f, + -0.000095f, +0.000133f, +0.000168f, -0.000240f, +0.001120f, -0.000540f, +0.001085f, -0.000622f, -0.000239f, -0.000158f, + +0.000663f, -0.000114f, -0.000288f, -0.000751f, -0.000730f, -0.000591f, -0.000838f, +0.000028f, -0.000341f, -0.000182f, + +0.000419f, +0.000755f, -0.001472f, +0.000718f, +0.000492f, +0.000115f, +0.000008f, +0.000203f, +0.000326f, +0.000253f, + +0.000240f, -0.000427f, +0.000048f, -0.000081f, +0.000347f, +0.000015f, -0.000317f, +0.000111f, +0.000039f, +0.000192f, + +0.000175f, -0.000092f, -0.000080f, +0.000117f, -0.000256f, -0.000246f, +0.000091f, -0.000103f, +0.000298f, +0.000098f, + +0.000150f, -0.000060f, -0.000189f, +0.000077f, +0.000147f, -0.000038f, -0.000118f, -0.000014f, -0.000029f, -0.000137f, + -0.000001f, +0.000087f, -0.000091f, +0.000082f, +0.000022f, +0.000001f, -0.000026f, +0.000084f, -0.000043f, -0.000079f, + +0.000031f, +0.000057f, +0.000024f, -0.000044f, -0.000079f, -0.000046f, +0.000059f, -0.000013f, -0.000020f, +0.000010f, + +0.000084f, -0.000040f, +0.000023f, -0.000050f, -0.000024f, +0.000031f + }, + { + -0.003066f, -0.021749f, +0.010729f, +0.002001f, +0.000924f, +0.000154f, -0.000129f, +0.000422f, +0.000815f, -0.000908f, + -0.000284f, -0.000022f, -0.000685f, +0.000842f, -0.001399f, -0.000584f, +0.001069f, -0.000454f, -0.001020f, -0.000098f, + -0.000250f, +0.000772f, +0.000320f, +0.000383f, -0.000002f, -0.000287f, -0.000799f, +0.000749f, -0.000088f, -0.000487f, + -0.000529f, -0.000571f, -0.000372f, +0.000190f, +0.000043f, -0.000441f, -0.000266f, +0.000102f, +0.000335f, -0.000056f, + +0.000659f, -0.000321f, -0.000154f, +0.000224f, -0.000072f, -0.000362f, +0.000048f, -0.000079f, +0.000039f, +0.000352f, + +0.000232f, +0.000029f, -0.000229f, -0.000097f, -0.000207f, -0.000222f, +0.000089f, -0.000019f, +0.000129f, -0.000012f, + -0.000071f, +0.000005f, -0.000033f, -0.000057f, -0.000039f, +0.000096f, +0.000075f, +0.000001f, -0.000134f, -0.000103f, + +0.000027f, -0.000078f, +0.000121f, -0.000056f, -0.000031f, +0.000179f, -0.000099f, -0.000025f, +0.000029f, +0.000046f, + +0.000033f, -0.000073f, +0.000061f, +0.000025f, -0.000058f, -0.000050f, +0.000143f, -0.000066f, +0.000033f, -0.000032f, + -0.000007f, +0.000037f, +0.000027f, -0.000047f, +0.000003f, -0.000019f + }, + { + -0.002705f, -0.012349f, +0.003664f, -0.001637f, -0.002783f, -0.000371f, -0.000116f, -0.000424f, -0.000130f, +0.000178f, + -0.000258f, +0.000187f, -0.000016f, +0.001111f, -0.001741f, -0.000890f, +0.000321f, +0.000760f, +0.000657f, -0.000096f, + -0.000027f, +0.000000f, -0.000105f, -0.000156f, +0.000639f, -0.000357f, -0.000426f, -0.000723f, -0.000511f, -0.000005f, + +0.000849f, +0.000027f, -0.000696f, -0.000611f, -0.000191f, -0.000172f, -0.000439f, -0.000039f, -0.000015f, -0.000352f, + -0.000108f, -0.000420f, +0.000243f, -0.000142f, -0.000246f, +0.000035f, +0.000266f, +0.000257f, -0.000072f, -0.000556f, + -0.000270f, +0.000364f, +0.000372f, -0.000077f, -0.000029f, +0.000163f, -0.000192f, -0.000230f, -0.000136f, +0.000121f, + +0.000100f, -0.000043f, -0.000139f, -0.000169f, +0.000118f, -0.000032f, +0.000024f, -0.000129f, +0.000116f, +0.000059f, + -0.000041f, -0.000011f, -0.000009f, -0.000059f, -0.000088f, +0.000002f, +0.000017f, +0.000005f, +0.000012f, +0.000078f, + +0.000030f, +0.000020f, +0.000017f, -0.000088f, +0.000016f, +0.000036f, -0.000024f, +0.000036f, -0.000003f, +0.000024f, + +0.000052f, -0.000025f, +0.000013f, -0.000055f, -0.000006f, +0.000022f + }, + { + +0.000186f, +0.006223f, +0.001131f, +0.000402f, -0.000293f, +0.000105f, -0.000034f, -0.000033f, -0.000272f, -0.000187f, + -0.000107f, +0.000044f, +0.000774f, -0.000497f, +0.000796f, +0.001491f, +0.000079f, +0.000157f, -0.002452f, +0.001334f, + +0.000493f, -0.001460f, -0.000368f, -0.000499f, -0.000210f, +0.001070f, +0.000209f, -0.000306f, +0.000455f, -0.001061f, + -0.000527f, -0.000459f, +0.000035f, -0.000116f, +0.000161f, +0.000653f, -0.001045f, +0.000162f, +0.000344f, -0.000781f, + +0.000241f, +0.000155f, -0.000120f, -0.000106f, -0.000028f, +0.000410f, -0.000080f, -0.000013f, +0.000334f, -0.000065f, + +0.000017f, +0.000170f, -0.000166f, -0.000011f, +0.000097f, -0.000150f, +0.000033f, +0.000246f, -0.000114f, -0.000063f, + +0.000033f, +0.000046f, -0.000029f, +0.000076f, -0.000047f, -0.000084f, +0.000000f, +0.000013f, -0.000058f, -0.000073f, + -0.000035f, +0.000173f, +0.000081f, +0.000004f, -0.000075f, +0.000138f, -0.000014f, -0.000026f, -0.000072f, -0.000007f, + +0.000018f, +0.000049f, -0.000072f, +0.000013f, -0.000042f, +0.000019f, +0.000048f, +0.000026f, +0.000006f, -0.000045f, + +0.000011f, +0.000058f, -0.000030f, -0.000016f, +0.000012f, -0.000031f + }, + { + -0.010798f, -0.013854f, +0.000122f, +0.002418f, -0.000246f, -0.000444f, -0.000359f, +0.000378f, -0.000221f, +0.000536f, + +0.000018f, -0.000672f, +0.000298f, +0.000392f, +0.000261f, +0.000523f, -0.000217f, -0.000770f, +0.000444f, +0.000177f, + +0.000516f, -0.000416f, -0.000642f, -0.000018f, +0.000483f, -0.000277f, +0.000362f, +0.001192f, -0.000502f, -0.000527f, + +0.000157f, -0.000087f, +0.000058f, +0.000040f, -0.000660f, +0.000086f, -0.000350f, +0.001229f, +0.000329f, -0.000606f, + +0.000672f, -0.000022f, +0.000019f, -0.000237f, +0.000054f, +0.000284f, -0.000376f, -0.000046f, +0.000140f, -0.000000f, + +0.000070f, +0.000220f, -0.000445f, +0.000067f, -0.000042f, -0.000053f, -0.000083f, -0.000052f, +0.000194f, +0.000252f, + +0.000027f, -0.000003f, -0.000027f, -0.000194f, -0.000120f, -0.000042f, -0.000058f, +0.000138f, +0.000061f, -0.000015f, + -0.000119f, -0.000034f, +0.000043f, +0.000175f, -0.000021f, -0.000009f, +0.000012f, -0.000111f, +0.000058f, +0.000030f, + +0.000003f, -0.000031f, +0.000024f, -0.000111f, +0.000037f, +0.000015f, +0.000006f, -0.000026f, -0.000041f, +0.000070f, + -0.000004f, -0.000013f, -0.000014f, +0.000013f, +0.000047f, +0.000015f + }, + { + +0.000469f, +0.000450f, -0.001271f, -0.000217f, +0.000048f, +0.000166f, +0.000138f, +0.000001f, -0.000094f, -0.000094f, + -0.000370f, +0.000003f, -0.000089f, -0.000371f, +0.001030f, +0.002088f, -0.002778f, +0.000790f, -0.000484f, +0.000920f, + -0.000875f, +0.000370f, +0.000667f, +0.002018f, -0.000197f, +0.001308f, +0.000078f, +0.000008f, +0.001219f, +0.000140f, + +0.000590f, -0.000655f, +0.000408f, -0.000347f, +0.000283f, +0.000399f, -0.000160f, -0.000227f, -0.000334f, +0.000089f, + +0.000326f, -0.000247f, +0.000170f, +0.000076f, -0.000129f, +0.000027f, -0.000408f, +0.000087f, +0.000012f, +0.000222f, + +0.000094f, +0.000086f, -0.000093f, +0.000255f, +0.000053f, -0.000054f, -0.000070f, +0.000234f, -0.000032f, -0.000024f, + +0.000135f, -0.000019f, -0.000021f, +0.000116f, +0.000070f, -0.000136f, -0.000023f, -0.000046f, +0.000067f, +0.000074f, + +0.000117f, -0.000008f, -0.000088f, +0.000034f, +0.000015f, -0.000035f, -0.000019f, -0.000078f, -0.000103f, -0.000019f, + +0.000053f, -0.000047f, -0.000020f, +0.000014f, +0.000069f, -0.000028f, -0.000021f, +0.000024f, -0.000006f, -0.000036f, + -0.000007f, +0.000064f, +0.000029f, -0.000050f, -0.000017f, -0.000019f + }, + { + -0.001549f, -0.035610f, +0.000965f, -0.002170f, +0.000987f, -0.000117f, +0.000097f, -0.000074f, -0.000810f, +0.000065f, + -0.000040f, +0.000091f, +0.000401f, +0.000535f, +0.000793f, -0.000379f, +0.000687f, -0.000642f, -0.000595f, +0.000579f, + +0.000258f, +0.000513f, -0.000252f, -0.000077f, -0.000642f, -0.000174f, +0.000197f, -0.000185f, -0.000099f, +0.000115f, + +0.000304f, +0.000136f, +0.000186f, +0.000271f, -0.000351f, +0.000219f, +0.000097f, +0.000250f, -0.000342f, +0.000085f, + -0.000142f, -0.000318f, -0.000104f, +0.000229f, +0.000097f, -0.000049f, -0.000213f, +0.000327f, +0.000099f, -0.000019f, + +0.000152f, -0.000097f, +0.000170f, +0.000055f, +0.000140f, -0.000048f, -0.000025f, +0.000236f, -0.000008f, -0.000042f, + -0.000086f, -0.000071f, -0.000007f, +0.000008f, +0.000036f, +0.000004f, -0.000098f, -0.000107f, +0.000061f, +0.000018f, + -0.000111f, +0.000157f, +0.000077f, -0.000109f, -0.000098f, +0.000028f, +0.000064f, -0.000071f, +0.000043f, +0.000032f, + -0.000092f, +0.000060f, +0.000016f, -0.000111f, -0.000013f, +0.000129f, -0.000068f, -0.000043f, -0.000006f, +0.000069f, + +0.000007f, -0.000055f, +0.000021f, -0.000033f, +0.000027f, -0.000020f + }, + { + +0.000612f, -0.000868f, -0.003613f, +0.000592f, -0.000192f, +0.000002f, +0.000063f, -0.000034f, +0.000041f, -0.000299f, + -0.000083f, +0.000165f, +0.000812f, -0.001331f, +0.000370f, +0.002815f, +0.000831f, +0.001926f, -0.000248f, -0.001266f, + +0.001054f, +0.001884f, -0.001489f, +0.000964f, +0.000288f, -0.000405f, +0.000574f, -0.000796f, -0.001004f, -0.000075f, + +0.000396f, -0.000290f, +0.000583f, -0.000532f, +0.000256f, +0.000572f, -0.000008f, -0.000413f, +0.000226f, -0.000219f, + +0.000109f, +0.000335f, -0.000263f, +0.000074f, +0.000220f, -0.000035f, +0.000128f, -0.000249f, +0.000310f, +0.000429f, + +0.000005f, +0.000006f, -0.000058f, +0.000167f, -0.000370f, -0.000073f, -0.000038f, -0.000127f, +0.000061f, +0.000248f, + -0.000005f, +0.000153f, -0.000138f, +0.000020f, -0.000017f, +0.000071f, +0.000246f, -0.000049f, -0.000093f, +0.000005f, + -0.000002f, -0.000076f, -0.000033f, +0.000119f, -0.000041f, -0.000006f, +0.000093f, -0.000074f, -0.000020f, +0.000006f, + -0.000089f, -0.000001f, +0.000035f, +0.000036f, +0.000032f, -0.000023f, +0.000003f, -0.000087f, +0.000040f, +0.000010f, + -0.000068f, +0.000032f, -0.000025f, +0.000011f, +0.000018f, -0.000004f + }, + { + -0.015411f, +0.036952f, +0.007928f, -0.000745f, +0.000485f, +0.000139f, -0.000826f, +0.000122f, +0.000990f, -0.000429f, + -0.001424f, +0.000198f, +0.000068f, +0.001359f, -0.000679f, +0.000561f, -0.000501f, -0.000075f, -0.000280f, +0.000193f, + -0.000171f, -0.000079f, -0.000001f, -0.000676f, -0.000507f, +0.000141f, -0.000486f, -0.000706f, +0.000062f, +0.000188f, + +0.000594f, -0.000644f, +0.000202f, -0.000701f, -0.000059f, -0.000622f, -0.000449f, +0.001156f, -0.001263f, -0.000149f, + -0.000159f, +0.000588f, -0.000148f, +0.000352f, -0.000099f, +0.000279f, -0.000105f, -0.000389f, +0.000230f, +0.000004f, + -0.000121f, -0.000561f, -0.000187f, +0.000017f, -0.000191f, -0.000069f, +0.000114f, -0.000056f, -0.000246f, +0.000011f, + +0.000096f, -0.000132f, -0.000053f, -0.000063f, -0.000136f, +0.000268f, +0.000117f, -0.000099f, -0.000011f, +0.000044f, + -0.000088f, +0.000107f, +0.000056f, +0.000031f, -0.000037f, -0.000121f, +0.000106f, -0.000030f, -0.000000f, -0.000055f, + +0.000011f, +0.000007f, +0.000017f, +0.000025f, -0.000001f, +0.000056f, +0.000066f, -0.000026f, -0.000010f, -0.000061f, + -0.000015f, +0.000026f, +0.000003f, +0.000041f, -0.000046f, +0.000012f + }, + { + -0.000322f, +0.001772f, +0.000427f, +0.000367f, +0.000758f, +0.000893f, -0.001044f, +0.000058f, +0.000384f, +0.000072f, + -0.000512f, +0.000220f, +0.000704f, +0.001396f, -0.001042f, -0.000825f, +0.000720f, +0.001297f, -0.000350f, -0.001249f, + -0.000241f, +0.000046f, +0.000978f, +0.000129f, -0.000440f, -0.000281f, +0.000363f, -0.000028f, -0.000337f, +0.000500f, + -0.001034f, +0.000409f, +0.000077f, +0.000072f, -0.000341f, +0.000464f, +0.000032f, -0.000337f, -0.000384f, -0.000410f, + -0.000082f, -0.000102f, -0.000181f, +0.000117f, +0.000416f, -0.000338f, +0.000085f, -0.000299f, +0.000105f, +0.000157f, + -0.000278f, +0.000052f, -0.000120f, -0.000257f, -0.000091f, +0.000194f, +0.000100f, +0.000024f, -0.000026f, -0.000049f, + +0.000007f, +0.000038f, -0.000073f, +0.000102f, -0.000067f, +0.000219f, +0.000149f, -0.000010f, -0.000042f, -0.000184f, + -0.000018f, -0.000037f, +0.000034f, +0.000095f, -0.000026f, -0.000085f, +0.000031f, +0.000018f, +0.000004f, +0.000021f, + +0.000062f, +0.000052f, +0.000028f, -0.000024f, -0.000008f, -0.000057f, -0.000013f, +0.000027f, -0.000003f, +0.000043f, + -0.000045f, +0.000009f, -0.000024f, +0.000015f, -0.000002f, -0.000044f + }, + { + -0.004436f, +0.001496f, -0.000145f, +0.000904f, -0.000018f, +0.002008f, -0.002909f, -0.000327f, +0.000792f, -0.000007f, + -0.000075f, +0.000046f, +0.000061f, +0.000234f, -0.001487f, +0.000574f, -0.000133f, -0.000327f, -0.000282f, +0.000103f, + -0.000104f, +0.000709f, -0.000222f, +0.000164f, -0.000349f, -0.000052f, -0.000178f, +0.000040f, +0.000349f, -0.000024f, + -0.000418f, -0.001045f, +0.000521f, +0.000151f, -0.000518f, -0.000452f, +0.000493f, -0.000363f, +0.000166f, +0.000624f, + -0.000226f, -0.000518f, +0.000183f, -0.000026f, +0.000270f, +0.000124f, -0.000106f, -0.000005f, -0.000324f, +0.000094f, + +0.000004f, -0.000017f, +0.000053f, -0.000258f, +0.000155f, +0.000014f, +0.000139f, +0.000095f, -0.000200f, -0.000006f, + +0.000024f, -0.000041f, +0.000052f, +0.000103f, +0.000114f, -0.000083f, +0.000007f, -0.000012f, +0.000004f, -0.000026f, + +0.000048f, +0.000017f, +0.000058f, -0.000007f, -0.000120f, +0.000017f, -0.000089f, -0.000054f, +0.000045f, -0.000061f, + +0.000065f, -0.000024f, -0.000061f, +0.000102f, -0.000052f, +0.000049f, -0.000069f, +0.000011f, -0.000064f, +0.000017f, + +0.000030f, -0.000041f, -0.000029f, +0.000028f, +0.000045f, -0.000034f + }, + { + +0.000035f, -0.004731f, +0.000228f, -0.000560f, +0.000284f, -0.000659f, +0.000009f, +0.000231f, +0.000055f, -0.000246f, + -0.000360f, -0.000319f, +0.001045f, +0.001104f, -0.003026f, -0.000692f, +0.001291f, +0.000178f, -0.001872f, -0.000609f, + +0.000883f, +0.000365f, +0.000847f, -0.000596f, -0.000763f, -0.000243f, +0.001057f, -0.000634f, -0.000564f, +0.000882f, + -0.000885f, +0.000972f, +0.000222f, +0.000168f, -0.000346f, -0.000010f, -0.000206f, +0.000225f, -0.000474f, +0.000002f, + -0.000176f, +0.000141f, +0.000501f, -0.000155f, -0.000235f, +0.000206f, +0.000062f, +0.000050f, -0.000024f, -0.000079f, + -0.000158f, +0.000133f, +0.000197f, +0.000038f, -0.000182f, -0.000059f, -0.000009f, +0.000192f, +0.000300f, +0.000037f, + +0.000221f, -0.000063f, -0.000156f, -0.000011f, +0.000207f, +0.000193f, -0.000048f, +0.000134f, +0.000002f, +0.000027f, + +0.000015f, -0.000024f, +0.000002f, -0.000009f, -0.000048f, +0.000022f, -0.000092f, -0.000076f, +0.000020f, -0.000010f, + +0.000072f, -0.000021f, -0.000009f, +0.000053f, +0.000028f, -0.000009f, +0.000022f, +0.000045f, +0.000023f, +0.000014f, + +0.000021f, +0.000022f, -0.000049f, -0.000038f, +0.000061f, -0.000011f + }, + { + +0.001975f, -0.001605f, +0.005358f, -0.000821f, -0.000142f, -0.002497f, -0.001477f, -0.000364f, +0.000439f, +0.000990f, + -0.000587f, -0.000790f, +0.000741f, +0.002311f, -0.000579f, +0.000128f, +0.000169f, +0.000334f, -0.000131f, +0.000300f, + -0.000976f, +0.000256f, -0.000053f, +0.000054f, +0.000001f, -0.000056f, -0.000207f, +0.000179f, -0.000433f, -0.000321f, + +0.000091f, -0.000356f, -0.000329f, -0.000088f, +0.000392f, -0.000119f, -0.000300f, +0.000181f, +0.000494f, -0.000493f, + -0.000543f, -0.000109f, +0.000372f, -0.000208f, +0.000323f, +0.000240f, +0.000033f, -0.000371f, +0.000354f, +0.000020f, + +0.000421f, -0.000035f, -0.000157f, +0.000004f, -0.000201f, -0.000158f, -0.000121f, -0.000062f, +0.000015f, +0.000204f, + -0.000049f, +0.000049f, +0.000021f, +0.000063f, -0.000153f, +0.000004f, -0.000062f, +0.000111f, +0.000120f, -0.000144f, + -0.000103f, +0.000121f, +0.000057f, -0.000076f, -0.000016f, -0.000038f, +0.000022f, +0.000107f, -0.000062f, -0.000017f, + -0.000127f, +0.000065f, +0.000060f, +0.000041f, -0.000053f, -0.000119f, +0.000013f, +0.000104f, +0.000004f, +0.000015f, + +0.000026f, +0.000023f, +0.000006f, -0.000062f, +0.000023f, -0.000041f + }, + { + -0.000577f, +0.001765f, +0.001940f, -0.000104f, +0.000065f, -0.000128f, -0.000322f, +0.000466f, -0.000750f, -0.000627f, + +0.000346f, +0.000045f, +0.000704f, +0.002782f, -0.009970f, +0.001331f, -0.000002f, -0.000281f, +0.000485f, -0.000841f, + -0.000403f, -0.000351f, +0.000313f, +0.000549f, -0.000049f, +0.001076f, -0.001131f, +0.000394f, +0.000616f, +0.000012f, + -0.000105f, +0.000710f, -0.000011f, +0.000421f, -0.000114f, +0.000293f, +0.000474f, +0.000013f, +0.000081f, +0.000062f, + +0.000309f, -0.000139f, -0.000013f, +0.000100f, -0.000039f, -0.000148f, +0.000191f, -0.000229f, +0.000048f, -0.000079f, + +0.000220f, -0.000202f, -0.000265f, +0.000004f, -0.000006f, -0.000083f, +0.000015f, +0.000038f, +0.000081f, +0.000027f, + +0.000147f, -0.000233f, -0.000105f, +0.000011f, -0.000065f, -0.000185f, +0.000142f, +0.000014f, -0.000065f, -0.000007f, + -0.000079f, +0.000003f, +0.000068f, -0.000048f, +0.000040f, -0.000057f, -0.000081f, +0.000112f, -0.000019f, +0.000091f, + +0.000018f, -0.000136f, +0.000024f, -0.000011f, -0.000017f, +0.000037f, +0.000074f, +0.000085f, -0.000074f, +0.000080f, + +0.000026f, -0.000064f, -0.000041f, +0.000043f, -0.000008f, -0.000049f + }, + { + -0.000851f, -0.000497f, +0.004042f, +0.000702f, +0.000503f, -0.000196f, +0.000913f, +0.000589f, -0.000278f, -0.000594f, + -0.000080f, -0.001690f, +0.000212f, +0.001946f, +0.003231f, +0.000072f, -0.000173f, -0.000567f, +0.000598f, -0.000666f, + +0.000095f, +0.000541f, +0.000041f, -0.000331f, -0.000487f, -0.000028f, +0.000452f, +0.002462f, +0.000083f, +0.000028f, + +0.000300f, +0.000133f, -0.000068f, +0.000417f, -0.000306f, +0.000240f, -0.000234f, +0.000429f, -0.000130f, +0.000520f, + +0.000013f, +0.000124f, +0.000073f, +0.000010f, -0.000015f, -0.000366f, +0.000323f, +0.000243f, -0.000209f, -0.000197f, + +0.000008f, -0.000035f, -0.000102f, -0.000224f, +0.000146f, -0.000264f, -0.000034f, +0.000073f, -0.000011f, +0.000177f, + -0.000073f, -0.000058f, +0.000115f, +0.000042f, -0.000002f, +0.000041f, +0.000010f, +0.000117f, -0.000063f, -0.000081f, + -0.000022f, -0.000010f, +0.000108f, +0.000006f, -0.000131f, -0.000100f, +0.000036f, +0.000052f, -0.000085f, +0.000020f, + +0.000080f, -0.000002f, -0.000052f, +0.000039f, +0.000018f, -0.000003f, -0.000030f, +0.000016f, -0.000134f, +0.000032f, + -0.000003f, -0.000018f, +0.000061f, +0.000003f, +0.000007f, -0.000016f + } + }, + { + { + +0.000229f, +0.013538f, -0.002371f, -0.000321f, +0.000499f, -0.000103f, -0.000104f, +0.000448f, -0.000007f, +0.000411f, + +0.000027f, +0.000551f, -0.000316f, +0.000285f, -0.000778f, -0.000347f, +0.001231f, +0.000127f, +0.000473f, -0.000624f, + +0.001014f, +0.000145f, -0.000476f, -0.000525f, -0.001310f, -0.000969f, -0.000349f, -0.000152f, +0.000148f, -0.000005f, + +0.000647f, +0.000286f, -0.000094f, -0.000139f, +0.000578f, +0.000103f, -0.000298f, +0.000250f, -0.000481f, +0.000503f, + +0.000101f, -0.000088f, -0.000174f, +0.000002f, +0.000318f, +0.000019f, -0.000431f, +0.000049f, +0.000034f, +0.000296f, + +0.000265f, +0.000019f, -0.000125f, +0.000176f, -0.000016f, -0.000276f, +0.000049f, -0.000269f, +0.000139f, +0.000252f, + +0.000053f, +0.000202f, -0.000064f, -0.000062f, +0.000098f, +0.000096f, -0.000067f, +0.000000f, +0.000092f, -0.000085f, + -0.000096f, +0.000031f, -0.000058f, +0.000096f, +0.000046f, +0.000000f, -0.000027f, +0.000087f, +0.000021f, -0.000048f, + +0.000003f, +0.000097f, +0.000082f, +0.000016f, -0.000068f, -0.000039f, +0.000018f, +0.000005f, -0.000018f, -0.000058f, + +0.000080f, -0.000020f, -0.000009f, -0.000016f, -0.000049f, +0.000005f + }, + { + +0.001743f, -0.020879f, +0.006169f, -0.000164f, -0.000423f, +0.000445f, -0.000261f, -0.000070f, -0.000078f, +0.000364f, + -0.000564f, +0.000003f, -0.000430f, -0.000522f, +0.000209f, -0.000902f, +0.000170f, -0.000356f, -0.001053f, -0.000593f, + +0.000144f, +0.000303f, +0.000542f, +0.000545f, -0.000159f, -0.000290f, -0.000477f, +0.000227f, -0.000039f, -0.000520f, + -0.000075f, -0.000632f, -0.000290f, -0.000098f, +0.000139f, -0.000089f, -0.000424f, -0.000211f, -0.000035f, +0.000199f, + +0.000429f, +0.000063f, -0.000392f, +0.000026f, +0.000168f, -0.000329f, -0.000081f, -0.000335f, -0.000018f, +0.000071f, + +0.000321f, +0.000276f, +0.000036f, -0.000097f, -0.000139f, -0.000288f, +0.000065f, +0.000039f, +0.000142f, +0.000038f, + +0.000142f, -0.000119f, +0.000035f, +0.000040f, -0.000150f, +0.000013f, +0.000092f, +0.000041f, +0.000018f, -0.000069f, + -0.000025f, -0.000083f, +0.000074f, +0.000048f, -0.000137f, +0.000112f, -0.000050f, -0.000053f, +0.000017f, +0.000070f, + +0.000061f, -0.000052f, +0.000047f, +0.000039f, -0.000000f, -0.000137f, +0.000100f, -0.000018f, +0.000017f, -0.000009f, + +0.000003f, +0.000023f, +0.000045f, -0.000046f, -0.000002f, -0.000025f + }, + { + +0.001485f, -0.001345f, -0.011872f, -0.000003f, -0.001341f, -0.000512f, +0.000340f, -0.000522f, +0.000110f, -0.000631f, + -0.000459f, +0.000301f, -0.000233f, +0.000106f, -0.000729f, -0.000445f, +0.000081f, +0.000281f, +0.001188f, +0.000122f, + -0.000292f, +0.000065f, +0.000044f, +0.000062f, +0.000441f, -0.000328f, -0.000268f, -0.000572f, -0.000338f, -0.000229f, + +0.000218f, -0.000275f, -0.000246f, -0.000652f, -0.000598f, -0.000175f, +0.000022f, -0.000245f, -0.000090f, -0.000510f, + +0.000084f, -0.000043f, +0.000070f, +0.000127f, -0.000120f, -0.000325f, +0.000270f, +0.000135f, +0.000239f, -0.000285f, + -0.000266f, +0.000069f, +0.000125f, +0.000049f, +0.000041f, +0.000007f, +0.000050f, -0.000099f, -0.000107f, +0.000022f, + +0.000078f, +0.000058f, +0.000014f, -0.000100f, +0.000122f, +0.000024f, -0.000017f, +0.000016f, +0.000061f, +0.000110f, + -0.000002f, +0.000002f, +0.000009f, -0.000027f, -0.000029f, -0.000017f, -0.000051f, +0.000020f, -0.000059f, +0.000030f, + +0.000026f, +0.000024f, +0.000075f, -0.000055f, -0.000064f, +0.000027f, -0.000037f, -0.000009f, +0.000034f, -0.000018f, + +0.000051f, -0.000006f, +0.000030f, -0.000027f, -0.000017f, +0.000025f + }, + { + -0.000448f, +0.003984f, +0.002468f, +0.000983f, -0.000217f, -0.000104f, +0.000069f, +0.000025f, -0.000131f, -0.000022f, + -0.000223f, -0.000530f, +0.000400f, +0.000340f, -0.003395f, +0.002013f, +0.002317f, +0.000015f, -0.003067f, +0.000881f, + -0.000829f, -0.000674f, +0.000110f, -0.000874f, +0.000566f, -0.000600f, +0.001744f, +0.000528f, -0.000647f, -0.000810f, + -0.000309f, -0.000623f, +0.000044f, -0.000275f, +0.000418f, +0.000427f, -0.000703f, -0.000006f, +0.000400f, -0.000536f, + +0.000183f, +0.000242f, -0.000150f, +0.000027f, -0.000301f, +0.000527f, +0.000196f, -0.000047f, +0.000334f, +0.000060f, + -0.000199f, +0.000085f, +0.000072f, -0.000107f, +0.000153f, -0.000108f, -0.000081f, +0.000301f, -0.000086f, -0.000206f, + -0.000062f, +0.000079f, -0.000039f, +0.000017f, -0.000036f, -0.000027f, -0.000035f, +0.000034f, +0.000006f, -0.000091f, + -0.000089f, +0.000070f, +0.000056f, +0.000010f, -0.000048f, +0.000039f, +0.000070f, +0.000033f, -0.000052f, -0.000033f, + -0.000021f, +0.000071f, -0.000051f, +0.000005f, -0.000023f, -0.000021f, +0.000032f, +0.000044f, +0.000044f, -0.000021f, + -0.000013f, +0.000055f, +0.000031f, -0.000026f, +0.000018f, +0.000017f + }, + { + +0.009309f, -0.036379f, -0.004170f, +0.002567f, +0.000371f, -0.000131f, -0.000784f, +0.000329f, -0.000281f, -0.000215f, + +0.000937f, -0.000226f, +0.000377f, +0.000551f, +0.000127f, +0.000274f, -0.000398f, -0.000729f, +0.000204f, +0.000012f, + +0.000350f, -0.000276f, +0.000015f, -0.000648f, +0.000184f, -0.000289f, +0.000308f, -0.000866f, +0.001504f, -0.000851f, + +0.000287f, -0.000090f, +0.000343f, -0.000336f, -0.000441f, -0.000009f, -0.000372f, +0.000300f, +0.000242f, -0.000341f, + +0.000329f, -0.000231f, +0.000111f, -0.000166f, +0.000086f, +0.000314f, -0.000237f, -0.000061f, +0.000215f, -0.000043f, + +0.000167f, +0.000320f, -0.000210f, -0.000117f, -0.000112f, +0.000042f, -0.000214f, -0.000184f, +0.000171f, +0.000205f, + +0.000122f, -0.000034f, +0.000084f, -0.000185f, -0.000171f, +0.000021f, -0.000091f, +0.000065f, +0.000089f, +0.000013f, + -0.000076f, -0.000085f, -0.000097f, +0.000111f, +0.000068f, -0.000068f, +0.000112f, -0.000071f, +0.000021f, +0.000079f, + +0.000043f, +0.000008f, +0.000031f, -0.000111f, -0.000048f, +0.000041f, +0.000003f, -0.000003f, -0.000055f, +0.000009f, + -0.000014f, -0.000003f, -0.000022f, -0.000016f, +0.000033f, +0.000033f + }, + { + +0.000216f, +0.002179f, -0.001067f, -0.000791f, +0.000040f, +0.000036f, +0.000184f, +0.000102f, +0.000073f, +0.000039f, + -0.000507f, -0.000280f, -0.000274f, -0.001338f, +0.000548f, +0.000994f, -0.000504f, -0.000328f, +0.000710f, +0.000847f, + -0.002074f, +0.000024f, +0.000654f, +0.000341f, +0.000888f, +0.000371f, +0.001039f, -0.000050f, +0.000415f, +0.001791f, + +0.000306f, -0.000355f, -0.000136f, +0.000146f, +0.000044f, +0.000384f, -0.000021f, -0.000203f, -0.000176f, -0.000323f, + +0.000619f, -0.000198f, +0.000093f, +0.000069f, -0.000025f, +0.000010f, -0.000325f, -0.000042f, +0.000042f, +0.000130f, + +0.000300f, -0.000005f, -0.000044f, +0.000051f, +0.000174f, +0.000068f, -0.000060f, +0.000168f, -0.000019f, -0.000083f, + +0.000049f, +0.000094f, +0.000075f, +0.000015f, +0.000073f, -0.000082f, -0.000084f, -0.000080f, -0.000022f, -0.000017f, + +0.000106f, +0.000062f, -0.000087f, +0.000004f, +0.000046f, +0.000050f, +0.000066f, -0.000045f, -0.000076f, -0.000067f, + +0.000059f, -0.000018f, -0.000074f, -0.000005f, +0.000054f, -0.000006f, -0.000011f, +0.000001f, +0.000014f, -0.000021f, + -0.000057f, +0.000034f, +0.000082f, -0.000023f, -0.000012f, -0.000027f + }, + { + -0.006717f, -0.033473f, +0.004251f, -0.000709f, -0.000772f, +0.000037f, +0.000575f, -0.000515f, -0.000620f, +0.000312f, + +0.000111f, -0.000258f, +0.000428f, +0.000676f, +0.000253f, +0.000320f, +0.000151f, +0.000363f, -0.000806f, -0.000107f, + +0.000260f, +0.000265f, -0.000409f, -0.000147f, -0.000243f, -0.000220f, -0.000042f, +0.000070f, +0.000125f, -0.000187f, + +0.000111f, +0.000687f, +0.000099f, -0.000169f, +0.000160f, -0.000075f, +0.000522f, +0.000390f, -0.000362f, -0.000004f, + -0.000031f, -0.000387f, -0.000320f, +0.000358f, -0.000154f, -0.000080f, -0.000238f, +0.000074f, +0.000357f, -0.000272f, + +0.000207f, -0.000021f, +0.000017f, +0.000031f, +0.000071f, +0.000157f, -0.000037f, +0.000270f, +0.000095f, -0.000018f, + -0.000011f, -0.000055f, -0.000022f, -0.000031f, +0.000065f, +0.000116f, +0.000050f, -0.000113f, -0.000019f, +0.000026f, + -0.000113f, +0.000066f, +0.000147f, -0.000043f, -0.000099f, +0.000001f, +0.000070f, -0.000017f, +0.000013f, +0.000052f, + -0.000097f, +0.000027f, +0.000041f, -0.000036f, -0.000084f, +0.000105f, +0.000032f, -0.000050f, -0.000024f, +0.000005f, + +0.000047f, -0.000063f, -0.000036f, -0.000026f, -0.000000f, +0.000012f + }, + { + +0.000147f, +0.001391f, -0.002438f, -0.000138f, -0.000284f, -0.000093f, +0.000033f, -0.000005f, +0.000180f, -0.000233f, + -0.000406f, -0.000282f, +0.000277f, -0.001042f, +0.000345f, +0.000531f, +0.000871f, +0.000227f, +0.000056f, -0.000745f, + -0.000061f, +0.000004f, -0.000842f, +0.000543f, +0.000153f, +0.000846f, +0.000094f, -0.000185f, -0.001207f, -0.000467f, + +0.000036f, -0.000040f, +0.000509f, -0.000152f, -0.000195f, +0.000861f, +0.000086f, -0.000312f, +0.000034f, +0.000071f, + -0.000249f, +0.000227f, -0.000210f, -0.000153f, +0.000179f, +0.000112f, +0.000317f, -0.000234f, -0.000020f, +0.000421f, + +0.000140f, -0.000000f, +0.000122f, +0.000087f, -0.000126f, -0.000040f, +0.000070f, -0.000144f, -0.000093f, +0.000247f, + +0.000095f, +0.000155f, -0.000010f, -0.000030f, +0.000000f, -0.000045f, +0.000189f, +0.000038f, -0.000043f, -0.000102f, + -0.000006f, -0.000057f, -0.000043f, +0.000105f, +0.000003f, +0.000011f, +0.000057f, +0.000048f, -0.000024f, +0.000036f, + -0.000098f, -0.000061f, -0.000028f, +0.000039f, +0.000059f, -0.000020f, +0.000039f, -0.000043f, +0.000002f, +0.000046f, + -0.000061f, +0.000015f, +0.000033f, -0.000021f, +0.000014f, -0.000003f + }, + { + +0.017198f, +0.004072f, -0.002279f, -0.000804f, -0.000005f, -0.000023f, +0.000107f, -0.000759f, +0.000653f, +0.000437f, + -0.001290f, -0.000368f, -0.000867f, +0.001236f, -0.001081f, +0.000600f, +0.000924f, -0.000465f, -0.000490f, +0.000619f, + +0.000240f, -0.000115f, -0.000593f, -0.000292f, -0.000557f, +0.000397f, -0.000235f, -0.000502f, +0.000082f, -0.000034f, + +0.000187f, -0.000258f, +0.000012f, -0.000232f, -0.000148f, -0.000500f, -0.000580f, +0.000230f, +0.000190f, -0.000686f, + -0.000252f, +0.000207f, +0.000269f, +0.000039f, +0.000133f, +0.000232f, -0.000105f, -0.000320f, -0.000002f, +0.000014f, + +0.000045f, -0.000268f, -0.000321f, -0.000104f, -0.000179f, -0.000183f, +0.000077f, -0.000055f, -0.000245f, +0.000028f, + -0.000016f, -0.000055f, -0.000056f, -0.000112f, -0.000268f, +0.000177f, +0.000201f, -0.000102f, +0.000039f, +0.000054f, + -0.000043f, -0.000045f, +0.000103f, -0.000008f, -0.000002f, -0.000126f, +0.000066f, +0.000019f, -0.000001f, -0.000015f, + +0.000011f, -0.000048f, +0.000009f, -0.000016f, -0.000050f, +0.000029f, +0.000053f, +0.000035f, +0.000025f, -0.000027f, + -0.000041f, +0.000014f, -0.000014f, +0.000058f, -0.000030f, -0.000009f + }, + { + +0.000249f, -0.002353f, +0.003656f, +0.000221f, +0.000216f, +0.001338f, -0.000103f, -0.000628f, +0.000121f, -0.000117f, + -0.000371f, -0.000227f, +0.000626f, +0.001338f, -0.000237f, -0.000269f, -0.000496f, +0.001028f, +0.001343f, -0.001390f, + -0.000720f, -0.000239f, +0.000442f, +0.000924f, -0.000024f, -0.000476f, +0.000669f, +0.000004f, -0.000551f, +0.000237f, + -0.001087f, +0.000003f, +0.000475f, +0.000030f, +0.000054f, +0.000092f, +0.000595f, -0.000137f, -0.000278f, -0.000235f, + +0.000022f, +0.000034f, -0.000077f, -0.000167f, +0.000543f, -0.000308f, +0.000030f, -0.000166f, -0.000161f, +0.000144f, + +0.000095f, -0.000058f, +0.000036f, -0.000178f, -0.000327f, +0.000080f, +0.000108f, -0.000027f, +0.000046f, +0.000030f, + -0.000035f, -0.000041f, -0.000132f, +0.000001f, -0.000078f, +0.000089f, +0.000174f, +0.000134f, +0.000120f, -0.000193f, + -0.000027f, -0.000039f, -0.000067f, +0.000066f, -0.000026f, -0.000033f, -0.000026f, -0.000012f, -0.000017f, -0.000067f, + +0.000001f, +0.000048f, +0.000044f, +0.000010f, +0.000042f, -0.000010f, -0.000054f, +0.000020f, -0.000018f, +0.000050f, + -0.000032f, +0.000001f, -0.000007f, +0.000017f, +0.000035f, -0.000027f + }, + { + +0.003346f, -0.001845f, -0.003569f, -0.001860f, +0.000656f, -0.000157f, -0.000669f, -0.000964f, +0.000236f, +0.000508f, + -0.000154f, -0.000118f, +0.000077f, +0.000467f, -0.000767f, +0.000274f, -0.000453f, +0.000142f, -0.000353f, +0.000366f, + -0.000339f, +0.000749f, -0.000036f, -0.000017f, -0.000186f, +0.000219f, -0.000054f, -0.000137f, +0.000086f, +0.000312f, + -0.000260f, -0.000624f, -0.000024f, +0.000386f, -0.000302f, -0.000750f, +0.000272f, -0.000108f, +0.000010f, +0.000258f, + +0.000336f, -0.000350f, -0.000111f, -0.000102f, +0.000124f, +0.000063f, -0.000089f, +0.000030f, -0.000135f, -0.000002f, + -0.000020f, -0.000052f, +0.000032f, -0.000276f, +0.000057f, -0.000011f, +0.000016f, +0.000175f, -0.000101f, -0.000085f, + -0.000055f, +0.000008f, -0.000034f, +0.000054f, +0.000160f, -0.000068f, -0.000024f, -0.000057f, +0.000044f, +0.000031f, + -0.000019f, +0.000039f, +0.000096f, +0.000080f, -0.000040f, +0.000034f, -0.000056f, -0.000112f, +0.000032f, -0.000046f, + +0.000042f, +0.000027f, -0.000090f, +0.000110f, -0.000031f, +0.000084f, -0.000017f, -0.000001f, -0.000042f, -0.000004f, + +0.000035f, -0.000017f, -0.000055f, -0.000002f, +0.000073f, -0.000008f + }, + { + -0.000104f, -0.003911f, +0.000155f, -0.000780f, +0.000339f, -0.000525f, -0.000232f, +0.000000f, +0.000333f, -0.000420f, + -0.000175f, -0.000414f, -0.000089f, +0.001261f, -0.000980f, -0.000855f, -0.000431f, +0.000633f, -0.000942f, +0.000067f, + -0.000634f, +0.002345f, +0.000075f, +0.000737f, -0.000846f, -0.000559f, +0.000040f, +0.000102f, -0.000359f, +0.000301f, + -0.000240f, +0.000404f, -0.000353f, +0.000393f, -0.000356f, -0.000151f, -0.000155f, +0.000466f, -0.000364f, +0.000209f, + -0.000117f, -0.000134f, +0.000535f, -0.000024f, -0.000132f, +0.000235f, -0.000162f, +0.000256f, -0.000003f, +0.000160f, + -0.000015f, -0.000118f, +0.000163f, -0.000074f, -0.000008f, -0.000126f, -0.000089f, -0.000020f, +0.000165f, -0.000028f, + +0.000181f, +0.000026f, -0.000160f, -0.000092f, +0.000063f, +0.000269f, -0.000100f, +0.000052f, +0.000027f, +0.000058f, + +0.000029f, +0.000005f, +0.000049f, +0.000043f, +0.000018f, +0.000029f, -0.000025f, -0.000088f, +0.000008f, -0.000041f, + +0.000057f, -0.000024f, -0.000051f, +0.000019f, +0.000034f, -0.000013f, -0.000026f, +0.000033f, +0.000025f, +0.000016f, + +0.000041f, +0.000018f, -0.000028f, -0.000019f, +0.000042f, +0.000011f + }, + { + -0.002735f, +0.008645f, +0.000164f, -0.000153f, -0.000226f, -0.000459f, -0.002835f, +0.000043f, +0.000120f, +0.000802f, + +0.000350f, -0.000243f, +0.000330f, +0.001681f, -0.000194f, -0.000511f, +0.000592f, +0.000357f, -0.000098f, +0.000804f, + -0.000341f, -0.000157f, -0.000241f, -0.000113f, -0.000194f, +0.000853f, -0.000156f, +0.000233f, +0.000237f, -0.000286f, + -0.000263f, -0.000228f, -0.000276f, -0.000080f, +0.000546f, +0.000193f, -0.000422f, -0.000069f, +0.000449f, -0.000269f, + -0.000389f, -0.000312f, -0.000016f, -0.000320f, -0.000162f, -0.000148f, -0.000114f, -0.000349f, +0.000123f, +0.000210f, + +0.000341f, +0.000152f, -0.000164f, +0.000228f, -0.000103f, -0.000061f, +0.000008f, -0.000155f, -0.000116f, +0.000240f, + +0.000049f, -0.000077f, +0.000001f, +0.000112f, -0.000150f, -0.000128f, -0.000066f, +0.000016f, +0.000132f, -0.000010f, + -0.000159f, +0.000032f, +0.000145f, +0.000039f, -0.000003f, +0.000010f, -0.000042f, +0.000122f, +0.000012f, +0.000058f, + -0.000116f, -0.000021f, +0.000039f, +0.000094f, +0.000020f, -0.000123f, -0.000067f, +0.000012f, -0.000038f, +0.000001f, + +0.000020f, +0.000004f, +0.000057f, -0.000004f, +0.000033f, +0.000015f + }, + { + +0.000379f, +0.000584f, +0.001049f, +0.000121f, -0.000118f, -0.000125f, -0.000238f, +0.000496f, -0.000766f, -0.000582f, + +0.000116f, +0.000023f, +0.001436f, -0.003926f, +0.002176f, -0.003458f, +0.000891f, +0.000633f, -0.000018f, -0.000760f, + +0.000106f, -0.000012f, +0.000292f, +0.000963f, -0.000415f, +0.001043f, -0.000281f, +0.000040f, +0.001111f, -0.000413f, + +0.000167f, +0.000034f, +0.000057f, +0.000242f, -0.000429f, +0.000260f, +0.000115f, -0.000125f, +0.000299f, +0.000009f, + +0.000173f, +0.000111f, +0.000094f, +0.000271f, +0.000049f, -0.000210f, +0.000185f, -0.000169f, +0.000054f, -0.000167f, + +0.000249f, -0.000083f, -0.000235f, -0.000229f, +0.000012f, -0.000063f, -0.000057f, +0.000074f, +0.000015f, +0.000016f, + +0.000214f, -0.000101f, -0.000137f, +0.000030f, +0.000071f, -0.000176f, +0.000081f, +0.000164f, -0.000072f, -0.000025f, + -0.000062f, +0.000000f, +0.000083f, -0.000044f, -0.000001f, +0.000055f, -0.000136f, +0.000089f, +0.000030f, +0.000056f, + +0.000060f, -0.000103f, -0.000045f, -0.000005f, -0.000074f, +0.000003f, +0.000035f, +0.000098f, -0.000059f, +0.000029f, + +0.000070f, +0.000002f, -0.000060f, +0.000034f, +0.000033f, -0.000074f + }, + { + -0.000086f, -0.002190f, +0.001986f, +0.000874f, +0.001411f, +0.003695f, -0.000407f, +0.000610f, -0.000257f, -0.000715f, + -0.000645f, -0.000495f, +0.000019f, -0.000100f, +0.006653f, +0.000461f, -0.000928f, +0.000823f, +0.000222f, -0.000380f, + -0.000210f, +0.000584f, +0.000189f, +0.000286f, -0.000465f, -0.000481f, +0.000022f, +0.002561f, +0.000503f, +0.000074f, + +0.000073f, +0.000142f, +0.000029f, -0.000022f, -0.000110f, +0.000039f, -0.000063f, +0.000093f, -0.000097f, +0.000418f, + +0.000445f, +0.000068f, -0.000177f, -0.000082f, +0.000315f, -0.000289f, -0.000145f, +0.000195f, +0.000124f, -0.000174f, + -0.000040f, +0.000058f, +0.000074f, -0.000128f, +0.000011f, -0.000254f, -0.000251f, +0.000029f, -0.000009f, +0.000157f, + -0.000024f, -0.000117f, +0.000041f, +0.000034f, +0.000023f, -0.000020f, +0.000056f, +0.000025f, -0.000092f, +0.000001f, + -0.000111f, -0.000027f, +0.000125f, +0.000120f, -0.000077f, -0.000102f, -0.000045f, +0.000069f, -0.000051f, -0.000032f, + +0.000043f, +0.000086f, -0.000013f, -0.000020f, +0.000037f, +0.000004f, -0.000019f, +0.000079f, -0.000090f, -0.000025f, + +0.000011f, -0.000031f, +0.000034f, +0.000043f, +0.000032f, -0.000011f + } + }, + { + { + -0.000246f, +0.011429f, -0.001860f, -0.000462f, -0.000113f, +0.000243f, -0.000324f, -0.000341f, +0.000277f, +0.000164f, + +0.000250f, -0.000368f, +0.000065f, -0.000116f, -0.003640f, -0.000755f, -0.000615f, +0.000129f, +0.001102f, -0.000257f, + -0.000061f, -0.000294f, +0.000278f, +0.000252f, -0.000714f, +0.000317f, +0.000535f, +0.000505f, +0.000600f, -0.000201f, + +0.000514f, -0.001001f, +0.001118f, -0.000112f, -0.000365f, -0.000583f, -0.000199f, +0.000902f, -0.000538f, +0.000113f, + -0.000239f, +0.000202f, -0.000031f, -0.000241f, -0.000047f, +0.000355f, -0.000031f, -0.000042f, -0.000086f, +0.000041f, + +0.000175f, +0.000214f, +0.000027f, -0.000050f, +0.000201f, +0.000095f, -0.000018f, -0.000022f, -0.000116f, -0.000058f, + -0.000135f, +0.000110f, +0.000184f, -0.000020f, -0.000030f, +0.000086f, +0.000114f, -0.000025f, -0.000053f, +0.000110f, + +0.000014f, -0.000029f, +0.000019f, -0.000068f, +0.000031f, +0.000020f, +0.000022f, -0.000055f, +0.000000f, +0.000032f, + -0.000020f, -0.000037f, -0.000019f, +0.000049f, +0.000075f, +0.000035f, -0.000040f, -0.000027f, +0.000014f, -0.000004f, + -0.000064f, +0.000041f, -0.000027f, +0.000039f, +0.000009f, -0.000028f + }, + { + -0.000097f, -0.026372f, +0.000968f, +0.000760f, -0.000786f, -0.000392f, +0.000697f, -0.000050f, -0.000931f, +0.000571f, + -0.000218f, -0.000220f, +0.000430f, +0.000089f, +0.002192f, +0.000841f, -0.000348f, +0.000233f, +0.001167f, -0.000396f, + +0.000020f, -0.000366f, -0.000446f, -0.000136f, -0.000373f, +0.000181f, -0.000213f, -0.000229f, -0.000223f, -0.000253f, + +0.000214f, -0.000204f, +0.000475f, +0.000093f, -0.000411f, +0.000173f, -0.000014f, +0.000202f, +0.000329f, -0.000113f, + -0.000535f, -0.000080f, -0.000041f, +0.000147f, -0.000075f, +0.000277f, -0.000450f, +0.000110f, -0.000286f, -0.000220f, + +0.000207f, -0.000249f, +0.000151f, +0.000065f, +0.000035f, +0.000053f, -0.000176f, +0.000181f, +0.000081f, +0.000005f, + +0.000059f, +0.000035f, +0.000068f, +0.000181f, -0.000005f, -0.000070f, -0.000080f, -0.000011f, +0.000038f, +0.000166f, + +0.000040f, -0.000002f, -0.000101f, +0.000028f, +0.000026f, -0.000159f, +0.000068f, +0.000024f, -0.000032f, -0.000079f, + +0.000019f, +0.000050f, -0.000049f, -0.000012f, +0.000065f, +0.000080f, -0.000155f, +0.000074f, -0.000020f, +0.000032f, + +0.000013f, -0.000027f, -0.000012f, +0.000034f, -0.000025f, +0.000015f + }, + { + -0.000862f, +0.018445f, +0.001382f, -0.000788f, +0.002292f, +0.000457f, +0.000120f, -0.000092f, +0.000106f, -0.000165f, + -0.000718f, +0.000133f, -0.000088f, +0.000283f, +0.000046f, +0.000074f, -0.000063f, -0.000563f, +0.001213f, +0.000537f, + +0.000638f, +0.000100f, +0.000432f, -0.000176f, -0.000548f, -0.000287f, +0.000298f, +0.000195f, +0.000080f, -0.000356f, + -0.000246f, -0.000314f, +0.000023f, +0.000479f, -0.000085f, -0.000094f, +0.000345f, -0.000315f, -0.000006f, -0.000110f, + -0.000118f, +0.000276f, -0.000049f, +0.000168f, +0.000353f, +0.000215f, -0.000242f, -0.000438f, -0.000021f, +0.000276f, + +0.000177f, -0.000177f, -0.000201f, +0.000081f, +0.000053f, -0.000197f, -0.000048f, +0.000204f, +0.000029f, -0.000027f, + -0.000178f, -0.000076f, +0.000246f, +0.000044f, -0.000060f, +0.000085f, -0.000037f, +0.000101f, -0.000066f, +0.000021f, + +0.000093f, +0.000015f, +0.000010f, -0.000009f, +0.000076f, -0.000039f, -0.000022f, +0.000011f, -0.000011f, -0.000038f, + -0.000052f, -0.000004f, +0.000015f, +0.000119f, -0.000035f, -0.000039f, +0.000040f, -0.000038f, -0.000004f, -0.000000f, + -0.000067f, +0.000009f, -0.000013f, +0.000048f, -0.000004f, -0.000006f + }, + { + +0.000635f, +0.002119f, -0.001450f, +0.000042f, +0.000276f, -0.000091f, -0.000124f, +0.000136f, +0.000157f, +0.000100f, + -0.000059f, -0.000117f, +0.000059f, -0.000476f, -0.006312f, -0.002384f, -0.001440f, -0.000439f, -0.002324f, -0.000538f, + +0.000410f, +0.000364f, +0.000577f, +0.000028f, +0.000224f, -0.001232f, -0.000460f, +0.000907f, +0.000311f, -0.000357f, + -0.000278f, -0.000369f, +0.000453f, -0.000118f, -0.000059f, -0.000724f, +0.000317f, -0.000011f, -0.000047f, +0.000160f, + +0.000044f, +0.000146f, +0.000096f, +0.000352f, -0.000400f, -0.000117f, +0.000324f, -0.000037f, -0.000039f, +0.000121f, + +0.000137f, -0.000239f, +0.000061f, -0.000080f, +0.000017f, +0.000197f, +0.000030f, +0.000018f, +0.000200f, -0.000005f, + -0.000131f, -0.000029f, +0.000073f, -0.000164f, -0.000092f, +0.000102f, +0.000016f, -0.000002f, -0.000010f, +0.000112f, + +0.000083f, -0.000133f, -0.000082f, -0.000017f, +0.000085f, -0.000105f, -0.000024f, +0.000037f, +0.000089f, +0.000023f, + -0.000036f, -0.000044f, +0.000049f, -0.000021f, +0.000051f, +0.000011f, -0.000084f, -0.000025f, +0.000032f, +0.000040f, + -0.000042f, -0.000053f, +0.000025f, +0.000037f, -0.000013f, +0.000021f + }, + { + -0.004432f, -0.047551f, +0.000831f, +0.001666f, -0.000346f, +0.000080f, -0.000353f, +0.000467f, +0.000186f, -0.000495f, + -0.000271f, +0.000800f, -0.000102f, -0.000952f, -0.000133f, -0.000422f, +0.000649f, -0.000331f, -0.000157f, +0.000028f, + -0.000204f, -0.000019f, +0.000354f, +0.000078f, -0.000979f, +0.000279f, +0.000251f, -0.001983f, +0.000349f, -0.000685f, + -0.000063f, -0.000173f, -0.000051f, +0.000097f, +0.000170f, +0.000374f, +0.000768f, -0.000632f, -0.000405f, +0.000271f, + +0.000093f, -0.000365f, -0.000127f, +0.000191f, -0.000212f, -0.000247f, +0.000119f, -0.000104f, -0.000107f, +0.000129f, + +0.000001f, -0.000028f, +0.000306f, -0.000008f, -0.000069f, -0.000055f, +0.000271f, -0.000068f, -0.000062f, -0.000191f, + +0.000179f, +0.000008f, +0.000064f, +0.000066f, -0.000011f, -0.000039f, +0.000052f, -0.000018f, -0.000041f, +0.000035f, + +0.000037f, +0.000062f, -0.000064f, -0.000129f, +0.000027f, +0.000025f, -0.000020f, +0.000131f, -0.000021f, +0.000019f, + +0.000042f, +0.000032f, -0.000019f, +0.000077f, -0.000068f, -0.000033f, +0.000025f, +0.000045f, +0.000026f, -0.000065f, + +0.000027f, +0.000009f, -0.000010f, -0.000001f, -0.000060f, -0.000002f + }, + { + -0.000503f, -0.000235f, +0.001978f, -0.000042f, +0.000035f, -0.000137f, -0.000126f, +0.000157f, -0.000033f, +0.000178f, + +0.000046f, -0.000131f, +0.000676f, -0.000174f, -0.000777f, +0.000218f, +0.002069f, -0.000984f, -0.000579f, +0.002381f, + -0.000193f, -0.000145f, -0.000900f, +0.000308f, +0.000623f, -0.001699f, +0.000629f, +0.000341f, -0.001111f, +0.000948f, + +0.000386f, +0.000203f, -0.000232f, +0.000029f, -0.000042f, +0.000066f, -0.000274f, +0.000319f, +0.000390f, -0.000207f, + -0.000227f, +0.000312f, +0.000048f, -0.000177f, +0.000127f, +0.000148f, +0.000219f, +0.000049f, -0.000006f, -0.000172f, + +0.000026f, +0.000027f, +0.000161f, -0.000122f, -0.000013f, +0.000198f, -0.000052f, +0.000014f, +0.000087f, -0.000002f, + +0.000070f, +0.000008f, +0.000127f, +0.000071f, -0.000051f, +0.000033f, +0.000012f, -0.000085f, -0.000009f, -0.000043f, + -0.000184f, +0.000029f, +0.000076f, +0.000007f, -0.000046f, +0.000016f, +0.000004f, +0.000055f, +0.000055f, +0.000031f, + -0.000079f, +0.000090f, -0.000013f, -0.000010f, -0.000069f, -0.000004f, +0.000019f, -0.000006f, -0.000012f, +0.000034f, + +0.000017f, -0.000061f, -0.000024f, +0.000043f, +0.000020f, +0.000018f + }, + { + +0.013512f, -0.014431f, -0.004021f, +0.000840f, -0.000167f, +0.000352f, +0.000414f, +0.000268f, +0.000367f, +0.000183f, + -0.000119f, +0.000093f, +0.000061f, +0.000306f, -0.000561f, +0.001177f, -0.000134f, +0.000366f, +0.000835f, -0.000468f, + -0.000160f, -0.000438f, -0.000454f, -0.000084f, +0.000228f, +0.000105f, -0.000290f, +0.001034f, +0.000426f, -0.000271f, + -0.000370f, +0.000336f, +0.000095f, -0.000529f, +0.000341f, -0.000047f, +0.000361f, +0.000533f, -0.000033f, +0.000038f, + -0.000037f, +0.000012f, -0.000035f, +0.000099f, +0.000039f, -0.000092f, +0.000196f, -0.000201f, +0.000057f, -0.000082f, + -0.000126f, +0.000148f, -0.000275f, +0.000013f, -0.000180f, -0.000078f, -0.000111f, +0.000054f, -0.000011f, +0.000055f, + +0.000100f, -0.000000f, -0.000010f, -0.000028f, -0.000037f, -0.000038f, +0.000053f, +0.000141f, -0.000099f, -0.000018f, + +0.000146f, -0.000086f, -0.000148f, +0.000121f, +0.000057f, -0.000027f, -0.000046f, +0.000054f, -0.000017f, -0.000046f, + +0.000099f, -0.000034f, -0.000045f, +0.000081f, +0.000004f, -0.000121f, +0.000021f, +0.000035f, +0.000035f, -0.000049f, + -0.000028f, +0.000059f, -0.000021f, +0.000020f, -0.000023f, +0.000001f + }, + { + -0.000575f, +0.000003f, +0.001802f, +0.000120f, +0.000282f, -0.000023f, -0.000009f, +0.000110f, -0.000238f, +0.000069f, + +0.000135f, -0.000226f, -0.000653f, -0.000679f, +0.001447f, -0.002377f, -0.000621f, -0.001277f, -0.000320f, +0.000023f, + -0.000497f, -0.001791f, +0.000338f, +0.000476f, -0.000476f, +0.001649f, +0.000129f, +0.000292f, -0.000283f, -0.000161f, + +0.000183f, -0.000336f, -0.000174f, +0.000206f, -0.000305f, +0.000181f, +0.000124f, +0.000080f, -0.000006f, +0.000158f, + -0.000251f, -0.000057f, +0.000084f, +0.000174f, -0.000203f, -0.000109f, -0.000049f, +0.000452f, -0.000362f, -0.000325f, + +0.000163f, +0.000001f, +0.000123f, -0.000127f, +0.000108f, +0.000010f, -0.000044f, +0.000165f, +0.000180f, -0.000134f, + +0.000033f, -0.000048f, +0.000181f, -0.000054f, +0.000094f, -0.000082f, -0.000125f, +0.000004f, +0.000113f, -0.000090f, + +0.000019f, +0.000042f, -0.000025f, -0.000026f, +0.000006f, +0.000053f, -0.000074f, +0.000050f, +0.000068f, +0.000002f, + +0.000083f, -0.000031f, -0.000049f, -0.000025f, -0.000056f, +0.000027f, -0.000010f, +0.000059f, -0.000020f, -0.000016f, + +0.000051f, -0.000025f, +0.000022f, -0.000006f, -0.000001f, +0.000008f + }, + { + -0.015056f, -0.032371f, -0.000311f, -0.001092f, +0.000999f, +0.000066f, +0.000915f, +0.000345f, -0.000919f, +0.000192f, + +0.001145f, -0.000093f, -0.000719f, -0.000799f, -0.000073f, -0.000088f, +0.001318f, -0.000046f, -0.000518f, +0.000635f, + +0.000134f, +0.000389f, -0.001076f, +0.000134f, +0.000248f, +0.000114f, +0.000246f, +0.000460f, +0.000134f, -0.000186f, + -0.000492f, +0.000296f, +0.000236f, +0.000281f, -0.000185f, -0.000081f, -0.000217f, -0.000543f, +0.000033f, -0.000077f, + -0.000337f, +0.000217f, +0.000493f, -0.000346f, -0.000009f, -0.000343f, -0.000189f, +0.000245f, -0.000048f, -0.000112f, + +0.000030f, +0.000339f, -0.000115f, -0.000140f, +0.000198f, +0.000001f, -0.000032f, -0.000078f, +0.000153f, +0.000051f, + -0.000131f, +0.000136f, -0.000020f, +0.000070f, +0.000030f, -0.000186f, -0.000094f, +0.000040f, -0.000013f, -0.000001f, + +0.000067f, -0.000114f, -0.000049f, +0.000009f, -0.000017f, +0.000109f, -0.000150f, +0.000016f, +0.000003f, +0.000050f, + -0.000052f, +0.000024f, -0.000013f, -0.000006f, -0.000008f, -0.000057f, -0.000064f, +0.000012f, +0.000044f, +0.000043f, + +0.000022f, -0.000024f, -0.000000f, -0.000046f, +0.000047f, -0.000005f + }, + { + -0.000289f, -0.004910f, +0.000109f, +0.000650f, -0.000614f, -0.000738f, +0.001617f, -0.000188f, -0.000783f, -0.000709f, + +0.000042f, +0.000645f, -0.000805f, -0.000581f, -0.000719f, +0.000615f, -0.001162f, -0.000676f, +0.000773f, +0.001554f, + -0.000096f, -0.000429f, -0.000768f, -0.000278f, +0.000246f, +0.000122f, -0.000066f, -0.000270f, +0.000069f, +0.000392f, + +0.000354f, -0.000597f, -0.000197f, +0.000132f, +0.000193f, -0.000500f, +0.000060f, +0.000112f, +0.000315f, -0.000033f, + +0.000059f, -0.000037f, +0.000208f, -0.000078f, -0.000283f, +0.000233f, +0.000068f, +0.000212f, -0.000260f, -0.000360f, + +0.000285f, +0.000155f, +0.000040f, +0.000177f, +0.000157f, -0.000384f, -0.000056f, -0.000115f, -0.000060f, +0.000104f, + +0.000096f, -0.000006f, +0.000063f, -0.000126f, -0.000001f, -0.000142f, -0.000109f, +0.000068f, +0.000053f, +0.000138f, + -0.000021f, +0.000024f, +0.000037f, -0.000103f, +0.000024f, +0.000079f, -0.000017f, -0.000034f, +0.000009f, -0.000042f, + -0.000064f, -0.000074f, -0.000012f, +0.000008f, -0.000001f, +0.000061f, +0.000012f, -0.000029f, -0.000005f, -0.000027f, + +0.000051f, -0.000035f, +0.000021f, -0.000005f, -0.000002f, +0.000038f + }, + { + -0.002240f, -0.003118f, +0.003226f, -0.000713f, -0.000255f, -0.002214f, +0.003559f, -0.000310f, -0.001048f, -0.000559f, + +0.000041f, -0.000340f, -0.000072f, -0.000029f, +0.000097f, +0.000485f, -0.000559f, +0.000206f, +0.000116f, +0.000094f, + +0.000233f, -0.000474f, +0.000252f, -0.000225f, +0.000218f, +0.000267f, +0.000054f, -0.000002f, -0.000510f, +0.000191f, + +0.000285f, +0.000416f, -0.000096f, -0.000035f, -0.000105f, +0.000222f, -0.000571f, +0.000038f, -0.000014f, -0.000579f, + +0.000346f, +0.000500f, -0.000138f, +0.000118f, -0.000027f, -0.000240f, -0.000068f, -0.000002f, +0.000274f, -0.000102f, + -0.000059f, -0.000133f, +0.000042f, +0.000130f, +0.000064f, +0.000022f, -0.000200f, -0.000222f, +0.000226f, +0.000002f, + -0.000097f, +0.000043f, +0.000026f, -0.000060f, -0.000061f, +0.000098f, -0.000056f, -0.000017f, -0.000044f, +0.000088f, + -0.000041f, +0.000007f, -0.000057f, +0.000009f, +0.000083f, -0.000024f, +0.000086f, +0.000022f, -0.000066f, +0.000029f, + -0.000049f, -0.000001f, +0.000055f, -0.000091f, +0.000038f, -0.000056f, +0.000079f, -0.000029f, +0.000051f, -0.000005f, + -0.000033f, +0.000034f, +0.000026f, -0.000028f, -0.000043f, +0.000037f + }, + { + +0.000044f, -0.002321f, +0.000066f, -0.000353f, +0.000098f, +0.000576f, -0.000163f, -0.000580f, +0.000050f, -0.000491f, + +0.000125f, +0.000222f, -0.001866f, -0.001184f, +0.001854f, +0.000604f, -0.000981f, -0.000049f, -0.000143f, +0.000774f, + -0.000017f, +0.000871f, +0.000237f, -0.000100f, +0.000677f, +0.000382f, -0.001024f, -0.000254f, -0.000019f, -0.000745f, + +0.001513f, -0.000543f, -0.000057f, +0.000127f, -0.000086f, +0.000056f, -0.000030f, -0.000372f, +0.000224f, +0.000018f, + -0.000005f, -0.000141f, -0.000164f, +0.000008f, -0.000003f, -0.000058f, -0.000113f, -0.000092f, +0.000042f, +0.000133f, + +0.000065f, +0.000066f, -0.000253f, -0.000159f, +0.000131f, +0.000070f, +0.000040f, -0.000049f, -0.000192f, -0.000060f, + -0.000161f, +0.000089f, +0.000030f, +0.000025f, -0.000235f, -0.000116f, +0.000175f, -0.000105f, +0.000087f, -0.000027f, + -0.000055f, +0.000076f, -0.000035f, +0.000039f, +0.000025f, -0.000057f, +0.000073f, +0.000055f, +0.000000f, +0.000032f, + -0.000052f, +0.000031f, +0.000028f, -0.000047f, -0.000002f, +0.000021f, -0.000017f, -0.000044f, -0.000017f, -0.000002f, + -0.000001f, -0.000017f, +0.000025f, +0.000034f, -0.000044f, -0.000001f + }, + { + +0.000856f, +0.016062f, -0.004267f, +0.001610f, -0.000476f, +0.000812f, +0.001615f, +0.000811f, +0.000297f, -0.000727f, + +0.000317f, +0.001000f, -0.000801f, +0.001111f, -0.000201f, +0.000073f, -0.000486f, +0.000067f, +0.000424f, -0.000511f, + +0.001294f, -0.000102f, +0.000282f, -0.000299f, -0.000409f, +0.000696f, +0.000438f, +0.000142f, +0.000151f, +0.000148f, + -0.000560f, +0.000130f, +0.000142f, +0.000156f, -0.000108f, -0.000024f, +0.000043f, -0.000247f, -0.000335f, +0.000436f, + +0.000391f, +0.000087f, -0.000179f, +0.000185f, -0.000385f, -0.000096f, -0.000330f, +0.000120f, -0.000351f, +0.000081f, + +0.000045f, +0.000026f, -0.000024f, -0.000059f, +0.000069f, +0.000155f, +0.000126f, +0.000086f, -0.000050f, -0.000233f, + +0.000082f, -0.000049f, -0.000007f, -0.000025f, -0.000006f, -0.000025f, -0.000057f, -0.000107f, -0.000121f, +0.000096f, + +0.000091f, -0.000109f, -0.000059f, +0.000081f, +0.000079f, +0.000049f, -0.000010f, -0.000047f, +0.000067f, -0.000007f, + +0.000144f, -0.000060f, -0.000070f, -0.000018f, +0.000035f, +0.000116f, -0.000001f, -0.000093f, -0.000018f, -0.000019f, + -0.000040f, -0.000031f, -0.000047f, +0.000062f, -0.000009f, +0.000035f + }, + { + -0.000248f, -0.000372f, -0.001133f, -0.000441f, +0.000024f, -0.000014f, +0.000179f, +0.000141f, -0.000177f, +0.000182f, + -0.000357f, +0.000042f, -0.001149f, -0.004113f, +0.015850f, -0.000588f, +0.001230f, +0.000988f, -0.000700f, -0.000192f, + +0.001001f, +0.000898f, -0.000878f, -0.000165f, +0.000023f, +0.000199f, +0.001379f, -0.000557f, +0.000762f, -0.000042f, + -0.000200f, -0.000205f, -0.000183f, -0.000492f, +0.000278f, +0.000048f, -0.000090f, -0.000145f, -0.000232f, +0.000201f, + -0.000432f, +0.000056f, +0.000119f, +0.000106f, +0.000155f, +0.000074f, -0.000277f, -0.000028f, +0.000032f, +0.000028f, + -0.000170f, +0.000209f, +0.000128f, -0.000094f, -0.000040f, -0.000008f, -0.000111f, -0.000039f, +0.000002f, -0.000091f, + -0.000097f, +0.000274f, +0.000009f, +0.000016f, +0.000056f, +0.000171f, -0.000145f, +0.000031f, +0.000092f, -0.000012f, + +0.000084f, +0.000034f, -0.000073f, +0.000036f, -0.000005f, +0.000058f, +0.000089f, -0.000152f, +0.000044f, -0.000075f, + -0.000031f, +0.000120f, -0.000017f, -0.000020f, +0.000029f, -0.000051f, -0.000061f, -0.000066f, +0.000080f, -0.000072f, + -0.000020f, +0.000075f, +0.000049f, -0.000045f, +0.000002f, +0.000050f + }, + { + +0.001541f, -0.000066f, -0.000753f, -0.001315f, -0.000521f, +0.001376f, -0.000056f, +0.000172f, +0.000410f, +0.000383f, + -0.001235f, +0.000709f, +0.000601f, -0.001925f, +0.003397f, +0.000027f, -0.000427f, -0.000326f, -0.000127f, +0.000658f, + -0.000093f, -0.000024f, -0.000171f, +0.000153f, +0.000296f, -0.000215f, -0.000684f, +0.000811f, -0.000367f, +0.000391f, + -0.000253f, +0.000067f, +0.000450f, -0.000266f, -0.000098f, +0.000111f, +0.000201f, -0.000402f, +0.000093f, +0.000024f, + +0.000152f, +0.000324f, +0.000108f, +0.000030f, +0.000107f, +0.000185f, -0.000392f, -0.000375f, +0.000072f, +0.000055f, + -0.000031f, -0.000057f, +0.000151f, +0.000128f, -0.000142f, -0.000025f, -0.000144f, -0.000089f, +0.000090f, +0.000010f, + -0.000003f, +0.000065f, -0.000026f, -0.000142f, +0.000032f, -0.000021f, -0.000034f, +0.000002f, -0.000021f, +0.000025f, + +0.000043f, +0.000028f, -0.000151f, -0.000012f, +0.000115f, +0.000080f, -0.000035f, -0.000021f, +0.000002f, +0.000043f, + -0.000025f, -0.000024f, +0.000044f, -0.000045f, -0.000019f, +0.000015f, +0.000013f, -0.000035f, +0.000136f, -0.000050f, + -0.000012f, +0.000008f, -0.000044f, +0.000014f, -0.000013f, +0.000011f + } + }, + { + { + -0.000138f, +0.003979f, +0.003569f, +0.000017f, +0.000154f, +0.000122f, -0.000199f, -0.000334f, -0.000006f, +0.000239f, + -0.000135f, -0.000683f, +0.000035f, +0.000782f, -0.004281f, -0.000233f, -0.001368f, +0.000176f, +0.000283f, +0.000614f, + +0.000183f, -0.001036f, -0.000070f, +0.000947f, -0.000720f, +0.000976f, +0.000619f, +0.000299f, +0.000448f, -0.000658f, + +0.000127f, -0.000443f, +0.000660f, +0.000139f, -0.001020f, -0.000269f, +0.000227f, +0.000725f, -0.000081f, +0.000025f, + -0.000195f, +0.000065f, +0.000082f, -0.000102f, -0.000161f, +0.000103f, +0.000269f, +0.000019f, -0.000128f, -0.000057f, + +0.000134f, +0.000185f, +0.000028f, -0.000054f, +0.000024f, +0.000166f, -0.000011f, +0.000145f, -0.000060f, -0.000169f, + -0.000065f, -0.000093f, +0.000138f, +0.000066f, -0.000039f, -0.000009f, +0.000055f, -0.000011f, -0.000118f, +0.000079f, + +0.000086f, +0.000000f, -0.000001f, -0.000078f, -0.000033f, +0.000059f, +0.000019f, -0.000073f, -0.000045f, +0.000020f, + -0.000019f, -0.000066f, -0.000080f, +0.000010f, +0.000060f, +0.000037f, -0.000023f, -0.000013f, -0.000003f, +0.000043f, + -0.000060f, +0.000034f, -0.000006f, +0.000014f, +0.000035f, -0.000005f + }, + { + -0.000459f, -0.031696f, +0.006406f, +0.002130f, -0.000801f, -0.000405f, +0.000921f, +0.000057f, -0.000037f, +0.000105f, + -0.000281f, -0.000399f, +0.000499f, +0.000565f, +0.001848f, +0.001488f, -0.000144f, +0.000138f, +0.001381f, -0.000156f, + +0.000177f, -0.000555f, -0.000233f, -0.000700f, +0.000106f, -0.000084f, -0.000073f, -0.000088f, -0.000253f, -0.000439f, + -0.000173f, +0.000293f, +0.000249f, +0.000296f, -0.000532f, +0.000252f, +0.000315f, +0.000231f, +0.000294f, -0.000120f, + -0.000428f, -0.000347f, +0.000145f, +0.000193f, -0.000157f, +0.000262f, -0.000266f, +0.000114f, +0.000021f, -0.000112f, + -0.000020f, -0.000282f, -0.000118f, +0.000021f, -0.000057f, +0.000222f, -0.000190f, +0.000075f, +0.000058f, +0.000014f, + -0.000072f, +0.000081f, +0.000068f, +0.000087f, +0.000016f, -0.000016f, -0.000060f, -0.000022f, -0.000073f, +0.000126f, + +0.000039f, +0.000063f, -0.000114f, -0.000046f, +0.000133f, -0.000145f, +0.000036f, +0.000067f, -0.000021f, -0.000085f, + -0.000025f, +0.000046f, -0.000036f, -0.000029f, +0.000015f, +0.000149f, -0.000119f, +0.000043f, -0.000011f, +0.000010f, + +0.000003f, -0.000010f, -0.000040f, +0.000037f, -0.000020f, +0.000021f + }, + { + +0.001388f, +0.031439f, -0.005806f, -0.002775f, +0.000525f, +0.000757f, -0.000376f, +0.000142f, -0.000060f, +0.000315f, + -0.000409f, +0.000005f, +0.000616f, -0.000460f, +0.000361f, +0.000302f, +0.000111f, +0.000126f, +0.000408f, +0.000128f, + +0.000990f, -0.000123f, +0.000208f, -0.000023f, -0.001053f, -0.000120f, +0.000121f, +0.000424f, +0.000251f, -0.000068f, + -0.000353f, -0.000130f, +0.000136f, +0.000285f, +0.000134f, -0.000090f, +0.000251f, +0.000039f, -0.000233f, +0.000001f, + -0.000056f, -0.000118f, +0.000103f, -0.000016f, +0.000153f, +0.000346f, -0.000219f, -0.000288f, -0.000256f, +0.000119f, + +0.000275f, +0.000015f, -0.000155f, +0.000035f, +0.000039f, -0.000165f, -0.000158f, +0.000064f, +0.000034f, -0.000003f, + -0.000151f, -0.000139f, +0.000106f, +0.000065f, -0.000146f, +0.000037f, -0.000019f, +0.000033f, -0.000015f, -0.000033f, + +0.000033f, -0.000003f, +0.000020f, +0.000003f, +0.000034f, -0.000031f, +0.000030f, -0.000001f, +0.000034f, -0.000010f, + -0.000026f, -0.000019f, -0.000036f, +0.000089f, +0.000045f, -0.000049f, +0.000058f, +0.000015f, -0.000045f, +0.000018f, + -0.000062f, -0.000007f, -0.000027f, +0.000034f, +0.000000f, -0.000010f + }, + { + -0.000470f, +0.001368f, +0.000466f, -0.000504f, +0.000271f, +0.000150f, -0.000188f, -0.000055f, +0.000207f, +0.000054f, + -0.000011f, +0.000114f, +0.000067f, -0.001117f, -0.007666f, +0.000519f, -0.001474f, -0.002651f, -0.000914f, +0.000310f, + +0.000277f, +0.000356f, +0.000823f, -0.000305f, +0.000241f, +0.000174f, -0.002040f, +0.000928f, +0.000151f, -0.000581f, + +0.000287f, -0.000218f, +0.000170f, -0.000025f, -0.000203f, -0.000759f, +0.000363f, +0.000074f, -0.000404f, +0.000262f, + -0.000096f, +0.000037f, +0.000318f, +0.000119f, +0.000070f, -0.000389f, +0.000007f, +0.000071f, -0.000161f, +0.000101f, + +0.000223f, -0.000161f, -0.000061f, +0.000012f, -0.000144f, +0.000178f, +0.000159f, -0.000061f, +0.000153f, +0.000149f, + -0.000002f, -0.000069f, +0.000087f, -0.000133f, -0.000128f, +0.000090f, +0.000030f, -0.000027f, -0.000059f, +0.000134f, + +0.000138f, -0.000058f, -0.000086f, -0.000006f, +0.000085f, -0.000049f, -0.000069f, -0.000015f, +0.000059f, +0.000046f, + -0.000000f, -0.000078f, +0.000046f, -0.000012f, +0.000029f, +0.000049f, -0.000069f, -0.000028f, -0.000023f, +0.000025f, + -0.000005f, -0.000072f, -0.000020f, +0.000032f, -0.000016f, -0.000014f + }, + { + -0.001590f, -0.049095f, -0.001060f, +0.000989f, +0.000699f, -0.000159f, +0.000284f, +0.000139f, +0.000294f, -0.000003f, + -0.000719f, +0.000294f, +0.000253f, -0.001735f, +0.000286f, -0.000495f, +0.000848f, -0.000508f, +0.000237f, -0.000040f, + -0.000021f, -0.000091f, -0.000005f, +0.000383f, -0.000681f, +0.000180f, +0.000282f, -0.001518f, -0.000543f, -0.000194f, + -0.000521f, -0.000215f, -0.000140f, +0.000263f, +0.000129f, +0.000564f, +0.000933f, -0.000255f, -0.000604f, +0.000478f, + +0.000125f, -0.000127f, -0.000281f, +0.000235f, -0.000059f, -0.000555f, +0.000086f, +0.000111f, -0.000201f, -0.000055f, + -0.000019f, -0.000199f, +0.000244f, +0.000133f, -0.000077f, -0.000087f, +0.000360f, +0.000075f, -0.000092f, -0.000149f, + +0.000106f, +0.000021f, +0.000037f, +0.000020f, +0.000080f, -0.000081f, +0.000062f, -0.000013f, -0.000008f, -0.000011f, + +0.000063f, +0.000088f, +0.000068f, -0.000105f, -0.000030f, +0.000074f, -0.000082f, +0.000096f, -0.000003f, -0.000022f, + +0.000013f, +0.000009f, -0.000024f, +0.000071f, -0.000008f, -0.000046f, +0.000021f, +0.000035f, +0.000050f, -0.000024f, + +0.000030f, +0.000010f, -0.000001f, +0.000019f, -0.000044f, -0.000017f + }, + { + -0.000237f, -0.000756f, +0.000848f, +0.000470f, -0.000019f, -0.000011f, -0.000180f, +0.000025f, -0.000064f, -0.000033f, + +0.000284f, +0.000160f, +0.000631f, -0.000029f, +0.001253f, -0.000239f, +0.000862f, +0.000089f, -0.000547f, +0.003201f, + -0.001123f, +0.000107f, -0.002200f, +0.002446f, +0.000130f, -0.001280f, -0.000177f, +0.000666f, -0.000207f, -0.000861f, + +0.000105f, +0.000689f, +0.000032f, -0.000135f, -0.000055f, -0.000042f, -0.000217f, +0.000210f, +0.000481f, +0.000258f, + -0.000694f, +0.000276f, +0.000087f, -0.000188f, +0.000092f, +0.000063f, +0.000263f, +0.000152f, +0.000015f, -0.000181f, + -0.000181f, +0.000155f, +0.000077f, -0.000012f, -0.000019f, +0.000050f, +0.000042f, -0.000037f, +0.000126f, +0.000004f, + +0.000097f, -0.000006f, +0.000076f, +0.000081f, -0.000026f, +0.000021f, +0.000033f, -0.000030f, +0.000056f, +0.000014f, + -0.000134f, -0.000080f, +0.000076f, +0.000045f, -0.000057f, -0.000066f, -0.000062f, +0.000011f, +0.000058f, +0.000053f, + -0.000077f, +0.000051f, +0.000034f, +0.000018f, -0.000062f, -0.000013f, +0.000020f, -0.000001f, -0.000016f, +0.000007f, + +0.000056f, -0.000033f, -0.000070f, +0.000035f, +0.000014f, +0.000022f + }, + { + -0.015500f, +0.016170f, +0.003602f, +0.001516f, -0.000572f, +0.000211f, -0.000043f, +0.000850f, -0.000143f, +0.000019f, + -0.000088f, +0.000521f, -0.000075f, +0.000296f, -0.000592f, +0.000770f, +0.000044f, +0.000117f, +0.000869f, +0.000059f, + -0.000066f, -0.000437f, -0.000207f, -0.000157f, +0.000294f, -0.000032f, -0.000172f, +0.000894f, +0.000460f, -0.000058f, + -0.000031f, -0.000132f, -0.000252f, -0.000210f, -0.000116f, +0.000166f, +0.000370f, +0.000300f, -0.000002f, -0.000056f, + -0.000026f, -0.000070f, +0.000465f, -0.000199f, +0.000282f, -0.000091f, +0.000211f, +0.000026f, -0.000032f, +0.000020f, + -0.000161f, +0.000073f, -0.000173f, -0.000049f, -0.000088f, -0.000167f, -0.000170f, -0.000079f, -0.000059f, +0.000005f, + +0.000070f, +0.000002f, +0.000002f, -0.000006f, -0.000056f, -0.000099f, -0.000090f, +0.000108f, +0.000003f, -0.000019f, + +0.000166f, -0.000040f, -0.000181f, +0.000046f, +0.000095f, -0.000002f, -0.000084f, +0.000035f, -0.000012f, -0.000041f, + +0.000096f, -0.000011f, -0.000074f, +0.000029f, +0.000058f, -0.000117f, -0.000042f, +0.000039f, +0.000059f, -0.000011f, + -0.000050f, +0.000061f, +0.000021f, +0.000029f, -0.000014f, -0.000019f + }, + { + -0.000237f, -0.001221f, +0.001210f, +0.000251f, +0.000173f, +0.000112f, -0.000088f, +0.000095f, -0.000251f, -0.000008f, + +0.000405f, +0.000239f, -0.000239f, -0.001956f, +0.001205f, -0.001442f, +0.000273f, +0.000362f, -0.000194f, +0.000758f, + -0.000724f, -0.000523f, +0.001458f, -0.000656f, -0.000222f, +0.000832f, +0.000262f, -0.000556f, +0.000449f, +0.000145f, + +0.000347f, -0.000221f, -0.000329f, +0.000000f, +0.000090f, -0.000424f, +0.000167f, +0.000056f, +0.000089f, -0.000014f, + -0.000068f, +0.000031f, +0.000106f, +0.000125f, -0.000061f, -0.000133f, -0.000133f, +0.000363f, -0.000097f, -0.000362f, + +0.000009f, -0.000026f, -0.000020f, -0.000084f, -0.000095f, +0.000077f, -0.000183f, +0.000177f, +0.000261f, -0.000171f, + +0.000007f, -0.000072f, +0.000098f, -0.000050f, +0.000095f, +0.000077f, -0.000147f, -0.000020f, +0.000060f, +0.000027f, + -0.000008f, +0.000021f, +0.000024f, -0.000041f, -0.000026f, +0.000033f, -0.000064f, -0.000024f, +0.000051f, -0.000060f, + +0.000099f, +0.000046f, +0.000007f, -0.000035f, -0.000071f, +0.000024f, -0.000037f, +0.000032f, +0.000005f, -0.000051f, + +0.000048f, -0.000015f, -0.000017f, +0.000014f, -0.000005f, +0.000013f + }, + { + +0.009811f, -0.063110f, -0.001394f, -0.000145f, -0.000386f, -0.000050f, +0.000446f, +0.000767f, -0.000752f, -0.000385f, + +0.001174f, +0.000350f, +0.000290f, -0.000319f, +0.000292f, -0.000719f, -0.000072f, +0.000672f, +0.000042f, +0.000125f, + -0.000381f, +0.000460f, -0.000972f, +0.000142f, +0.000230f, +0.000146f, +0.000103f, +0.000624f, -0.000220f, +0.000058f, + -0.000458f, +0.000402f, +0.000210f, +0.000171f, -0.000024f, -0.000145f, -0.000063f, -0.000413f, -0.000160f, +0.000384f, + -0.000159f, -0.000031f, +0.000284f, -0.000188f, -0.000108f, -0.000363f, -0.000337f, +0.000316f, +0.000001f, +0.000078f, + -0.000171f, +0.000094f, +0.000105f, -0.000052f, +0.000118f, +0.000176f, -0.000079f, -0.000027f, +0.000155f, +0.000112f, + +0.000015f, +0.000035f, +0.000043f, +0.000074f, +0.000169f, -0.000117f, -0.000214f, +0.000008f, -0.000022f, -0.000040f, + +0.000062f, -0.000009f, -0.000078f, +0.000004f, -0.000030f, +0.000103f, -0.000125f, -0.000012f, +0.000006f, +0.000018f, + -0.000026f, +0.000043f, +0.000014f, +0.000005f, +0.000038f, -0.000020f, -0.000070f, -0.000015f, -0.000003f, +0.000016f, + +0.000057f, -0.000025f, +0.000016f, -0.000059f, +0.000030f, +0.000012f + }, + { + +0.000546f, -0.004086f, -0.002094f, +0.000455f, -0.000246f, -0.001248f, +0.000793f, +0.000527f, -0.000782f, -0.000552f, + -0.000079f, +0.000842f, -0.000473f, -0.000376f, -0.001235f, +0.000097f, -0.000057f, -0.001022f, -0.001177f, +0.001933f, + +0.000280f, +0.000004f, -0.000366f, -0.000645f, +0.000115f, -0.000034f, -0.000625f, -0.000116f, +0.000358f, +0.000377f, + +0.001010f, -0.000379f, -0.000456f, -0.000093f, -0.000058f, -0.000385f, -0.000293f, -0.000053f, +0.000182f, -0.000034f, + -0.000128f, -0.000141f, +0.000197f, +0.000153f, -0.000427f, +0.000244f, +0.000042f, +0.000232f, -0.000114f, -0.000282f, + +0.000044f, +0.000097f, -0.000080f, +0.000209f, +0.000307f, -0.000273f, -0.000137f, -0.000050f, -0.000092f, +0.000039f, + +0.000117f, +0.000041f, +0.000129f, -0.000064f, -0.000003f, -0.000037f, -0.000102f, -0.000053f, -0.000117f, +0.000139f, + +0.000035f, +0.000012f, +0.000110f, -0.000081f, +0.000026f, +0.000056f, +0.000009f, +0.000001f, +0.000025f, +0.000034f, + -0.000017f, -0.000060f, -0.000032f, -0.000031f, -0.000038f, +0.000030f, +0.000043f, -0.000025f, +0.000007f, -0.000034f, + +0.000044f, -0.000024f, +0.000005f, -0.000009f, -0.000026f, +0.000019f + }, + { + +0.001259f, -0.005155f, +0.001517f, +0.000877f, -0.000721f, -0.000937f, +0.001154f, +0.001009f, -0.001221f, -0.000391f, + +0.000301f, -0.000200f, -0.000094f, -0.000456f, +0.000213f, +0.000604f, -0.000775f, +0.000069f, +0.000209f, -0.000030f, + -0.000116f, -0.000452f, +0.000131f, -0.000121f, +0.000047f, +0.000094f, +0.000073f, +0.000044f, -0.000308f, -0.000123f, + +0.000257f, +0.000353f, +0.000181f, -0.000249f, -0.000229f, +0.000495f, -0.000437f, -0.000107f, +0.000025f, -0.000428f, + -0.000098f, +0.000391f, +0.000110f, +0.000234f, +0.000033f, -0.000190f, -0.000011f, -0.000032f, +0.000230f, -0.000139f, + +0.000002f, -0.000100f, -0.000050f, +0.000212f, +0.000101f, +0.000060f, -0.000075f, -0.000244f, +0.000109f, +0.000079f, + -0.000006f, -0.000033f, +0.000050f, +0.000017f, -0.000109f, +0.000048f, -0.000003f, +0.000011f, -0.000059f, +0.000058f, + +0.000004f, -0.000012f, -0.000082f, -0.000071f, +0.000020f, -0.000041f, +0.000051f, +0.000065f, -0.000053f, +0.000035f, + -0.000044f, -0.000039f, +0.000097f, -0.000115f, +0.000021f, -0.000074f, +0.000014f, -0.000000f, +0.000030f, +0.000015f, + -0.000046f, +0.000021f, +0.000043f, +0.000001f, -0.000061f, +0.000010f + }, + { + +0.000150f, -0.000962f, -0.001154f, -0.000164f, -0.000204f, +0.000504f, +0.000009f, -0.000356f, -0.000264f, -0.000322f, + -0.000095f, +0.000580f, -0.001466f, -0.000507f, +0.001911f, -0.000359f, -0.000386f, -0.000542f, -0.000185f, +0.000122f, + +0.000824f, +0.000001f, -0.000221f, -0.000739f, +0.000261f, +0.001415f, -0.000559f, -0.001115f, +0.000479f, -0.000798f, + +0.001080f, -0.000122f, +0.000279f, +0.000278f, -0.000087f, +0.000145f, -0.000311f, -0.000517f, +0.000222f, -0.000118f, + -0.000097f, +0.000069f, -0.000269f, -0.000189f, +0.000044f, -0.000210f, -0.000002f, -0.000098f, -0.000012f, -0.000047f, + -0.000067f, +0.000196f, -0.000245f, -0.000130f, +0.000081f, +0.000086f, +0.000082f, +0.000106f, -0.000041f, +0.000005f, + -0.000162f, +0.000046f, +0.000073f, +0.000055f, -0.000104f, -0.000204f, +0.000190f, -0.000037f, +0.000060f, -0.000000f, + -0.000084f, +0.000043f, -0.000060f, -0.000029f, -0.000036f, -0.000062f, +0.000006f, +0.000092f, +0.000022f, +0.000034f, + -0.000030f, +0.000027f, +0.000039f, -0.000001f, -0.000013f, +0.000039f, +0.000013f, -0.000031f, -0.000019f, -0.000012f, + -0.000015f, -0.000019f, +0.000013f, +0.000026f, -0.000036f, -0.000020f + }, + { + +0.003341f, +0.015511f, -0.004034f, -0.000255f, -0.000163f, -0.000113f, +0.001797f, +0.000671f, +0.000855f, -0.000935f, + -0.000119f, +0.000755f, +0.000630f, +0.000086f, -0.000497f, +0.000354f, -0.000401f, -0.000047f, +0.000382f, -0.000910f, + +0.000940f, -0.000016f, +0.000190f, -0.000055f, +0.000121f, -0.000322f, +0.000068f, +0.000259f, -0.000385f, +0.000311f, + -0.000216f, +0.000044f, -0.000016f, +0.000290f, -0.000226f, -0.000127f, +0.000155f, -0.000153f, -0.000470f, +0.000207f, + +0.000461f, +0.000386f, -0.000075f, +0.000434f, -0.000093f, +0.000221f, -0.000189f, +0.000252f, -0.000228f, -0.000026f, + -0.000050f, -0.000074f, +0.000082f, -0.000187f, -0.000049f, +0.000074f, -0.000012f, +0.000165f, +0.000062f, -0.000220f, + -0.000006f, -0.000001f, +0.000019f, -0.000110f, +0.000019f, +0.000092f, +0.000010f, -0.000092f, -0.000134f, -0.000018f, + +0.000128f, -0.000042f, -0.000123f, -0.000007f, +0.000048f, +0.000050f, +0.000053f, -0.000091f, +0.000005f, -0.000052f, + +0.000131f, +0.000004f, -0.000051f, -0.000072f, -0.000018f, +0.000105f, +0.000077f, -0.000031f, +0.000029f, -0.000002f, + -0.000044f, -0.000016f, -0.000084f, +0.000012f, -0.000024f, -0.000006f + }, + { + +0.000500f, -0.000042f, -0.001936f, -0.000000f, -0.000195f, +0.000065f, +0.000227f, -0.000169f, -0.000054f, +0.000250f, + -0.000062f, -0.000101f, -0.000668f, +0.001722f, +0.004842f, +0.003177f, -0.000534f, +0.000105f, -0.000281f, +0.000086f, + +0.000657f, +0.000490f, -0.000721f, -0.000786f, -0.000172f, +0.000323f, +0.001130f, -0.000779f, +0.000029f, +0.000717f, + -0.000146f, -0.000053f, -0.000431f, -0.000213f, +0.000675f, -0.000250f, +0.000098f, +0.000027f, -0.000333f, +0.000254f, + -0.000344f, -0.000050f, -0.000001f, -0.000030f, -0.000010f, +0.000197f, -0.000226f, -0.000065f, -0.000015f, +0.000164f, + -0.000295f, +0.000127f, +0.000190f, +0.000029f, -0.000044f, -0.000040f, -0.000061f, -0.000030f, +0.000000f, -0.000028f, + -0.000192f, +0.000117f, +0.000053f, +0.000028f, -0.000034f, +0.000185f, -0.000081f, -0.000077f, +0.000070f, -0.000013f, + +0.000081f, +0.000049f, -0.000089f, +0.000061f, +0.000010f, -0.000017f, +0.000108f, -0.000120f, -0.000003f, -0.000039f, + -0.000086f, +0.000117f, +0.000036f, -0.000024f, +0.000068f, -0.000012f, -0.000024f, -0.000091f, +0.000077f, -0.000031f, + -0.000067f, +0.000022f, +0.000055f, -0.000032f, -0.000037f, +0.000070f + }, + { + -0.002221f, +0.004153f, +0.000923f, -0.001737f, -0.000647f, -0.001713f, +0.000854f, +0.000061f, +0.000353f, +0.000604f, + -0.000387f, -0.000356f, +0.000205f, +0.001703f, -0.001006f, -0.000380f, -0.000233f, -0.000875f, -0.000602f, +0.000644f, + +0.000102f, -0.000203f, -0.000122f, -0.000197f, +0.000316f, +0.000236f, -0.000612f, +0.000085f, -0.000156f, +0.000132f, + +0.000175f, -0.000253f, +0.000336f, +0.000062f, +0.000106f, +0.000051f, -0.000010f, -0.000170f, +0.000174f, -0.000182f, + +0.000017f, +0.000347f, +0.000255f, +0.000081f, -0.000166f, +0.000404f, -0.000095f, -0.000358f, -0.000175f, -0.000102f, + +0.000010f, +0.000000f, +0.000048f, +0.000091f, -0.000118f, +0.000027f, +0.000004f, -0.000107f, +0.000077f, -0.000031f, + +0.000027f, +0.000145f, -0.000022f, -0.000128f, -0.000062f, +0.000080f, -0.000018f, +0.000021f, +0.000033f, +0.000002f, + +0.000064f, +0.000072f, -0.000157f, -0.000138f, +0.000073f, +0.000097f, +0.000031f, -0.000027f, +0.000004f, +0.000038f, + +0.000019f, -0.000074f, +0.000020f, -0.000013f, -0.000031f, -0.000005f, -0.000003f, -0.000074f, +0.000094f, +0.000005f, + -0.000036f, +0.000021f, -0.000026f, -0.000028f, -0.000023f, +0.000014f + } + }, + { + { + +0.000374f, -0.001624f, -0.001899f, -0.000299f, +0.000192f, -0.000139f, -0.000115f, +0.000144f, -0.000449f, +0.000358f, + -0.000462f, +0.000084f, -0.000427f, -0.001190f, -0.003393f, +0.001378f, +0.001410f, +0.001054f, -0.001551f, -0.001027f, + +0.002150f, +0.000489f, -0.000090f, +0.000560f, -0.000769f, +0.000737f, +0.000040f, -0.000595f, +0.000192f, +0.000047f, + -0.000268f, +0.000264f, -0.000637f, -0.000090f, -0.000762f, +0.000053f, +0.000149f, +0.000226f, +0.000205f, +0.000284f, + +0.000067f, -0.000272f, -0.000028f, +0.000180f, +0.000184f, -0.000231f, -0.000091f, +0.000024f, -0.000003f, +0.000067f, + +0.000033f, -0.000161f, -0.000168f, +0.000137f, -0.000199f, -0.000137f, +0.000051f, -0.000059f, +0.000132f, +0.000017f, + +0.000085f, -0.000005f, -0.000088f, +0.000054f, +0.000065f, -0.000016f, -0.000105f, +0.000040f, +0.000068f, -0.000093f, + -0.000022f, +0.000086f, -0.000027f, +0.000057f, -0.000050f, +0.000055f, +0.000001f, +0.000080f, -0.000017f, -0.000079f, + -0.000016f, +0.000054f, +0.000003f, -0.000019f, -0.000089f, -0.000051f, +0.000051f, +0.000041f, -0.000036f, -0.000002f, + +0.000081f, -0.000034f, +0.000021f, -0.000033f, -0.000017f, +0.000030f + }, + { + +0.000543f, -0.038094f, +0.002469f, +0.001602f, +0.000214f, +0.000305f, -0.000302f, -0.000298f, +0.000959f, +0.000051f, + -0.000355f, +0.000167f, -0.000218f, +0.000172f, +0.000547f, +0.000402f, +0.000603f, -0.000675f, -0.000531f, +0.000091f, + +0.000287f, -0.000441f, +0.000300f, -0.000038f, +0.000464f, -0.000299f, -0.000465f, -0.000072f, +0.000156f, -0.000312f, + -0.000214f, +0.000199f, -0.000729f, -0.000120f, +0.000319f, +0.000365f, +0.000067f, -0.000132f, -0.000009f, +0.000087f, + +0.000271f, -0.000210f, -0.000070f, +0.000066f, +0.000059f, -0.000277f, +0.000152f, -0.000286f, +0.000467f, +0.000304f, + -0.000036f, +0.000160f, -0.000286f, -0.000152f, -0.000090f, +0.000129f, +0.000071f, -0.000172f, +0.000108f, +0.000039f, + +0.000047f, -0.000068f, +0.000015f, -0.000092f, -0.000129f, +0.000042f, +0.000059f, +0.000080f, -0.000054f, -0.000106f, + -0.000006f, -0.000045f, +0.000019f, -0.000032f, -0.000048f, +0.000126f, -0.000065f, -0.000014f, +0.000026f, +0.000075f, + +0.000011f, -0.000065f, +0.000055f, +0.000014f, -0.000067f, -0.000063f, +0.000136f, -0.000052f, +0.000018f, -0.000038f, + -0.000012f, +0.000034f, +0.000004f, -0.000039f, +0.000025f, -0.000014f + }, + { + -0.001366f, +0.030537f, +0.002268f, +0.001216f, -0.001661f, -0.000078f, -0.000226f, -0.000341f, -0.000028f, -0.000046f, + -0.000200f, -0.000062f, -0.000172f, +0.000193f, +0.000987f, -0.000190f, +0.000317f, -0.000622f, -0.001363f, -0.000785f, + -0.000622f, -0.000096f, +0.000087f, +0.000214f, -0.000146f, +0.000179f, -0.000020f, -0.000053f, -0.000081f, -0.000044f, + +0.000185f, +0.000351f, +0.000052f, -0.000488f, +0.000123f, -0.000056f, -0.000173f, +0.000199f, -0.000355f, -0.000314f, + +0.000428f, -0.000357f, +0.000135f, +0.000015f, -0.000328f, -0.000267f, +0.000392f, +0.000385f, +0.000043f, -0.000447f, + -0.000262f, +0.000197f, +0.000087f, -0.000000f, +0.000024f, +0.000052f, +0.000057f, -0.000137f, -0.000051f, +0.000050f, + +0.000179f, +0.000035f, -0.000086f, -0.000042f, -0.000028f, -0.000012f, +0.000007f, -0.000041f, +0.000108f, +0.000000f, + -0.000057f, +0.000006f, +0.000029f, +0.000012f, -0.000034f, +0.000010f, -0.000008f, -0.000027f, -0.000024f, +0.000061f, + +0.000041f, -0.000008f, +0.000016f, -0.000096f, +0.000008f, +0.000019f, -0.000024f, +0.000056f, -0.000000f, -0.000010f, + +0.000052f, -0.000015f, +0.000015f, -0.000038f, -0.000005f, +0.000010f + }, + { + +0.000329f, -0.000817f, -0.000940f, +0.000103f, -0.000399f, +0.000083f, +0.000003f, -0.000040f, -0.000046f, -0.000171f, + -0.000150f, -0.000338f, +0.000357f, -0.000096f, -0.008409f, +0.001803f, +0.001916f, -0.000504f, +0.000244f, +0.001108f, + +0.000467f, -0.000037f, -0.001198f, -0.001991f, +0.000653f, +0.000164f, -0.001025f, +0.000961f, -0.000112f, -0.000665f, + +0.000486f, -0.000375f, -0.000019f, -0.000168f, +0.000155f, +0.000343f, -0.000602f, +0.000209f, +0.000079f, -0.000254f, + +0.000222f, +0.000041f, +0.000006f, -0.000035f, +0.000350f, +0.000094f, -0.000222f, +0.000126f, +0.000089f, -0.000116f, + -0.000187f, +0.000150f, -0.000123f, -0.000022f, +0.000057f, -0.000045f, +0.000016f, +0.000158f, -0.000075f, +0.000071f, + +0.000095f, +0.000049f, +0.000008f, +0.000104f, -0.000020f, -0.000070f, -0.000069f, +0.000010f, -0.000055f, -0.000102f, + -0.000078f, +0.000115f, +0.000054f, +0.000059f, -0.000060f, +0.000099f, +0.000058f, -0.000012f, -0.000070f, +0.000004f, + -0.000001f, +0.000015f, -0.000050f, +0.000007f, -0.000053f, +0.000017f, +0.000060f, +0.000048f, -0.000028f, -0.000046f, + +0.000022f, +0.000031f, -0.000019f, -0.000039f, +0.000019f, -0.000016f + }, + { + +0.007164f, -0.042359f, -0.003342f, +0.000267f, -0.000574f, -0.000112f, +0.000282f, +0.000048f, -0.000201f, +0.000448f, + +0.000991f, -0.000815f, +0.000041f, -0.001025f, -0.000067f, -0.000128f, -0.000054f, -0.001263f, +0.000180f, -0.000287f, + +0.000252f, -0.000420f, -0.000436f, -0.000854f, +0.000624f, -0.000042f, -0.000237f, -0.001383f, -0.000150f, -0.000333f, + -0.000236f, -0.000199f, +0.000163f, +0.000057f, -0.000208f, -0.000141f, -0.000207f, +0.000726f, -0.000210f, -0.000279f, + +0.000289f, +0.000128f, -0.000011f, -0.000248f, +0.000137f, +0.000053f, -0.000104f, +0.000251f, -0.000021f, -0.000057f, + +0.000381f, -0.000095f, -0.000258f, +0.000205f, +0.000015f, +0.000108f, -0.000090f, -0.000040f, +0.000002f, +0.000094f, + +0.000010f, -0.000015f, +0.000102f, -0.000100f, -0.000029f, +0.000013f, -0.000103f, -0.000046f, +0.000092f, -0.000028f, + -0.000083f, -0.000087f, +0.000069f, +0.000155f, +0.000021f, +0.000003f, +0.000047f, -0.000130f, +0.000012f, +0.000020f, + -0.000009f, -0.000038f, +0.000015f, -0.000100f, +0.000029f, +0.000027f, -0.000005f, -0.000003f, -0.000019f, +0.000042f, + -0.000023f, +0.000009f, +0.000011f, +0.000001f, +0.000044f, +0.000021f + }, + { + +0.000490f, +0.001495f, -0.002089f, +0.000280f, +0.000022f, +0.000112f, +0.000107f, -0.000039f, +0.000002f, -0.000208f, + -0.000084f, +0.000027f, -0.000457f, -0.000283f, +0.004896f, -0.000442f, -0.002498f, +0.001745f, -0.001192f, +0.002736f, + -0.000097f, +0.000141f, -0.001656f, +0.001238f, -0.000428f, +0.000537f, -0.000177f, +0.000004f, +0.000916f, -0.000886f, + -0.000417f, +0.000539f, +0.000634f, +0.000246f, -0.000196f, +0.000176f, +0.000231f, -0.000223f, +0.000191f, +0.000283f, + +0.000177f, -0.000233f, +0.000075f, +0.000155f, +0.000004f, -0.000046f, -0.000136f, +0.000103f, -0.000008f, +0.000027f, + +0.000038f, +0.000084f, -0.000201f, +0.000112f, +0.000152f, -0.000105f, -0.000025f, +0.000018f, -0.000002f, -0.000102f, + +0.000084f, +0.000052f, -0.000073f, -0.000032f, +0.000084f, -0.000067f, -0.000011f, -0.000005f, +0.000021f, +0.000065f, + +0.000183f, -0.000063f, -0.000078f, +0.000035f, +0.000060f, +0.000008f, +0.000026f, -0.000080f, -0.000065f, -0.000036f, + +0.000056f, -0.000086f, -0.000033f, +0.000026f, +0.000060f, -0.000014f, +0.000004f, +0.000023f, +0.000004f, -0.000049f, + -0.000027f, +0.000061f, +0.000047f, -0.000033f, -0.000020f, -0.000016f + }, + { + +0.012153f, +0.046620f, -0.001559f, +0.000726f, +0.000409f, -0.000272f, -0.000214f, -0.000254f, -0.001225f, +0.000144f, + +0.000182f, +0.000182f, -0.000102f, +0.000027f, -0.000187f, +0.000165f, +0.000127f, -0.000250f, -0.000700f, +0.000501f, + +0.000427f, +0.000396f, -0.000075f, -0.000035f, +0.000379f, -0.000165f, -0.000121f, -0.000011f, +0.000529f, +0.000168f, + +0.000441f, +0.000044f, -0.000439f, +0.000382f, -0.000274f, -0.000317f, -0.000238f, +0.000107f, +0.000299f, -0.000112f, + +0.000043f, -0.000232f, +0.000085f, -0.000134f, +0.000070f, -0.000072f, -0.000147f, +0.000279f, +0.000212f, -0.000262f, + -0.000032f, -0.000280f, +0.000093f, -0.000129f, +0.000059f, -0.000009f, -0.000170f, -0.000013f, +0.000027f, -0.000076f, + -0.000087f, -0.000017f, +0.000007f, +0.000005f, +0.000073f, +0.000080f, -0.000072f, -0.000147f, +0.000084f, +0.000064f, + -0.000095f, +0.000060f, +0.000130f, -0.000097f, -0.000076f, +0.000041f, +0.000030f, -0.000070f, +0.000005f, +0.000045f, + -0.000099f, +0.000052f, +0.000006f, -0.000088f, -0.000021f, +0.000125f, -0.000023f, -0.000051f, -0.000013f, +0.000044f, + +0.000036f, -0.000058f, +0.000023f, -0.000002f, +0.000013f, -0.000002f + }, + { + +0.000565f, +0.001444f, -0.001832f, +0.000104f, -0.000305f, +0.000078f, +0.000035f, -0.000002f, +0.000038f, -0.000323f, + -0.000080f, +0.000086f, +0.000424f, -0.002098f, -0.001292f, +0.000150f, +0.001752f, +0.001530f, -0.000112f, +0.000799f, + +0.000417f, +0.001553f, +0.000240f, -0.001749f, -0.000627f, -0.001117f, +0.000544f, -0.000293f, +0.000439f, +0.000418f, + -0.000058f, -0.000288f, +0.000273f, -0.000239f, +0.000020f, -0.000100f, -0.000116f, -0.000351f, +0.000065f, -0.000348f, + +0.000028f, +0.000309f, -0.000121f, -0.000143f, +0.000230f, +0.000014f, +0.000126f, -0.000534f, +0.000204f, +0.000349f, + -0.000234f, -0.000083f, +0.000031f, +0.000173f, -0.000349f, +0.000007f, -0.000063f, -0.000122f, +0.000028f, +0.000222f, + +0.000043f, +0.000094f, -0.000131f, -0.000081f, -0.000050f, +0.000108f, +0.000085f, -0.000031f, -0.000047f, +0.000086f, + +0.000000f, -0.000003f, +0.000077f, +0.000090f, -0.000061f, -0.000033f, +0.000056f, -0.000054f, -0.000059f, -0.000063f, + -0.000099f, +0.000037f, +0.000025f, +0.000014f, +0.000055f, -0.000004f, +0.000020f, -0.000062f, +0.000036f, +0.000021f, + -0.000054f, +0.000018f, -0.000010f, +0.000001f, +0.000003f, +0.000001f + }, + { + -0.001980f, -0.081125f, +0.000884f, +0.001555f, +0.000271f, -0.000267f, -0.000433f, -0.000319f, +0.000870f, -0.000034f, + -0.001010f, +0.000077f, +0.000267f, +0.001619f, -0.000184f, +0.001006f, -0.000813f, -0.000230f, +0.000327f, +0.000135f, + -0.000329f, -0.000355f, -0.000644f, +0.000085f, -0.000254f, +0.000375f, -0.000274f, +0.000130f, +0.000099f, +0.000640f, + +0.000577f, -0.000253f, -0.000165f, -0.000029f, +0.000099f, +0.000073f, +0.000218f, +0.000631f, +0.000523f, -0.000142f, + +0.000260f, -0.000115f, -0.000206f, +0.000028f, -0.000165f, +0.000609f, +0.000211f, -0.000135f, -0.000120f, +0.000076f, + -0.000165f, -0.000307f, +0.000157f, +0.000053f, -0.000158f, +0.000106f, +0.000142f, +0.000122f, -0.000148f, +0.000047f, + +0.000119f, -0.000061f, +0.000122f, -0.000065f, -0.000118f, +0.000212f, +0.000076f, -0.000114f, +0.000013f, +0.000011f, + -0.000038f, +0.000054f, +0.000064f, -0.000035f, -0.000024f, -0.000131f, +0.000090f, +0.000011f, +0.000020f, -0.000071f, + +0.000040f, -0.000019f, +0.000015f, -0.000001f, +0.000012f, +0.000068f, +0.000054f, -0.000008f, -0.000035f, -0.000051f, + -0.000023f, +0.000004f, +0.000004f, +0.000048f, -0.000039f, +0.000018f + }, + { + -0.000631f, -0.001670f, +0.001807f, -0.000922f, +0.000555f, +0.000581f, -0.001260f, +0.000093f, +0.000167f, +0.000266f, + -0.000425f, -0.000442f, -0.000081f, +0.000510f, -0.000299f, -0.000119f, +0.000994f, +0.001020f, -0.001053f, -0.001744f, + -0.000718f, +0.001079f, +0.001378f, -0.000022f, -0.000293f, -0.000459f, +0.000106f, +0.000139f, -0.000187f, +0.000533f, + -0.000002f, +0.000628f, +0.000137f, -0.000343f, +0.000028f, +0.000152f, +0.000304f, -0.000157f, -0.000456f, -0.000172f, + -0.000164f, -0.000053f, -0.000069f, -0.000106f, +0.000248f, -0.000267f, -0.000002f, -0.000103f, +0.000115f, +0.000295f, + -0.000179f, -0.000089f, -0.000092f, -0.000173f, -0.000131f, +0.000255f, +0.000070f, +0.000054f, +0.000021f, -0.000066f, + -0.000130f, -0.000050f, -0.000029f, +0.000127f, -0.000092f, +0.000109f, +0.000141f, +0.000013f, -0.000061f, -0.000174f, + +0.000064f, -0.000050f, -0.000001f, +0.000082f, -0.000024f, -0.000053f, +0.000020f, +0.000040f, -0.000012f, +0.000015f, + +0.000051f, +0.000053f, +0.000016f, -0.000033f, +0.000010f, -0.000041f, -0.000022f, +0.000022f, -0.000003f, +0.000043f, + -0.000043f, +0.000018f, -0.000013f, +0.000005f, +0.000006f, -0.000038f + }, + { + -0.000052f, -0.005268f, +0.003880f, +0.002675f, +0.000755f, +0.002314f, -0.002643f, +0.000436f, -0.000155f, +0.000255f, + +0.000144f, +0.000337f, +0.000207f, -0.000385f, -0.000504f, +0.000784f, -0.000550f, -0.000212f, -0.000310f, +0.000524f, + -0.000467f, +0.000777f, -0.000356f, +0.000027f, -0.000507f, -0.000163f, +0.000028f, -0.000051f, +0.000293f, -0.000088f, + -0.000022f, -0.000460f, +0.000016f, +0.000191f, +0.000166f, -0.000196f, +0.000433f, -0.000276f, -0.000236f, +0.000352f, + -0.000344f, -0.000644f, +0.000147f, +0.000033f, +0.000229f, +0.000120f, +0.000049f, +0.000039f, -0.000182f, -0.000002f, + +0.000059f, -0.000064f, -0.000064f, -0.000147f, -0.000014f, -0.000023f, +0.000160f, +0.000207f, -0.000185f, +0.000033f, + +0.000092f, -0.000063f, -0.000080f, +0.000069f, +0.000067f, -0.000128f, +0.000043f, +0.000018f, +0.000046f, -0.000019f, + +0.000036f, +0.000025f, +0.000060f, -0.000007f, -0.000109f, +0.000020f, -0.000074f, -0.000059f, +0.000055f, -0.000028f, + +0.000049f, -0.000011f, -0.000042f, +0.000087f, -0.000056f, +0.000059f, -0.000092f, +0.000033f, -0.000054f, +0.000019f, + +0.000018f, -0.000031f, -0.000032f, +0.000027f, +0.000050f, -0.000035f + }, + { + -0.000196f, -0.000768f, +0.000572f, -0.000102f, +0.000079f, -0.000467f, +0.000145f, +0.000255f, -0.000033f, +0.000029f, + -0.000194f, +0.000021f, +0.001078f, +0.000103f, -0.000038f, +0.001771f, +0.000885f, +0.000618f, -0.000451f, -0.000729f, + -0.001165f, +0.000370f, -0.000201f, +0.000312f, -0.001256f, +0.000239f, +0.000459f, -0.001158f, +0.000008f, +0.000035f, + -0.001236f, +0.000419f, -0.000077f, +0.000649f, -0.000105f, +0.000037f, -0.000450f, +0.000218f, -0.000286f, +0.000039f, + -0.000295f, +0.000100f, +0.000247f, -0.000254f, -0.000076f, -0.000070f, -0.000046f, +0.000202f, -0.000017f, +0.000020f, + -0.000192f, +0.000031f, +0.000126f, -0.000077f, -0.000142f, -0.000230f, -0.000166f, -0.000022f, +0.000234f, +0.000096f, + +0.000219f, -0.000043f, -0.000104f, -0.000096f, +0.000135f, +0.000124f, -0.000112f, +0.000116f, +0.000005f, +0.000089f, + +0.000011f, -0.000020f, +0.000023f, -0.000008f, -0.000042f, +0.000022f, -0.000095f, -0.000053f, +0.000021f, -0.000057f, + +0.000070f, -0.000041f, -0.000064f, +0.000044f, -0.000007f, -0.000010f, +0.000003f, +0.000038f, +0.000021f, +0.000002f, + +0.000018f, +0.000022f, -0.000036f, -0.000034f, +0.000032f, -0.000010f + }, + { + -0.006371f, +0.002192f, +0.002147f, -0.001030f, +0.000759f, +0.000149f, -0.001122f, -0.000273f, +0.000075f, +0.000329f, + -0.000027f, -0.000375f, +0.000328f, -0.001187f, -0.000546f, -0.000284f, +0.000636f, -0.000024f, -0.000366f, +0.000071f, + -0.000794f, +0.000202f, -0.000098f, +0.000124f, +0.000373f, -0.000147f, -0.000464f, +0.000473f, -0.000210f, +0.000201f, + +0.000329f, -0.000176f, -0.000300f, +0.000225f, +0.000244f, -0.000045f, -0.000212f, -0.000009f, +0.000310f, -0.000410f, + -0.000142f, +0.000191f, +0.000102f, +0.000079f, +0.000167f, +0.000141f, +0.000133f, +0.000003f, +0.000387f, +0.000088f, + +0.000041f, +0.000024f, +0.000140f, +0.000117f, -0.000236f, -0.000124f, -0.000139f, -0.000034f, -0.000006f, +0.000186f, + -0.000029f, +0.000070f, +0.000030f, -0.000014f, -0.000089f, -0.000010f, +0.000019f, +0.000024f, +0.000130f, -0.000102f, + -0.000098f, +0.000115f, +0.000072f, -0.000053f, -0.000050f, +0.000003f, +0.000021f, +0.000065f, -0.000058f, +0.000004f, + -0.000138f, +0.000028f, +0.000050f, +0.000032f, -0.000023f, -0.000131f, +0.000010f, +0.000069f, +0.000002f, +0.000013f, + +0.000027f, +0.000026f, +0.000033f, -0.000049f, +0.000013f, -0.000025f + }, + { + -0.000623f, -0.000154f, +0.000757f, +0.000705f, -0.000059f, -0.000042f, -0.000220f, +0.000228f, -0.000190f, -0.000195f, + +0.000319f, -0.000701f, +0.001031f, +0.000801f, -0.014085f, -0.001577f, -0.000544f, -0.001383f, -0.000060f, +0.000588f, + +0.000423f, -0.000531f, -0.000059f, -0.000299f, -0.000868f, +0.000802f, -0.000425f, -0.000383f, -0.000501f, -0.000067f, + -0.000146f, -0.000132f, -0.000378f, +0.000526f, -0.000152f, -0.000234f, +0.000378f, +0.000000f, -0.000027f, -0.000027f, + +0.000370f, +0.000008f, -0.000199f, -0.000036f, -0.000268f, -0.000171f, +0.000331f, -0.000021f, +0.000134f, +0.000079f, + +0.000149f, -0.000154f, -0.000080f, +0.000013f, +0.000068f, -0.000103f, -0.000020f, +0.000057f, +0.000007f, +0.000059f, + +0.000119f, -0.000253f, -0.000099f, +0.000026f, -0.000042f, -0.000102f, +0.000153f, +0.000009f, -0.000108f, -0.000009f, + -0.000084f, -0.000039f, +0.000056f, -0.000021f, +0.000022f, -0.000016f, -0.000129f, +0.000125f, -0.000026f, +0.000089f, + +0.000010f, -0.000102f, +0.000018f, -0.000005f, -0.000038f, +0.000032f, +0.000060f, +0.000066f, -0.000076f, +0.000063f, + +0.000023f, -0.000055f, -0.000056f, +0.000036f, -0.000007f, -0.000052f + }, + { + +0.002093f, +0.006985f, +0.000306f, -0.000809f, +0.000610f, -0.000834f, -0.000725f, +0.000323f, -0.000379f, -0.000052f, + +0.001475f, -0.000416f, -0.000435f, -0.000127f, -0.002088f, +0.000615f, -0.000320f, -0.000219f, -0.000387f, -0.000121f, + -0.000140f, +0.000060f, +0.000209f, -0.000095f, -0.000870f, +0.000176f, +0.000716f, +0.000735f, -0.000228f, -0.000340f, + +0.000176f, -0.000156f, +0.000057f, +0.000243f, -0.000017f, -0.000216f, -0.000190f, +0.000505f, +0.000096f, +0.000114f, + +0.000152f, -0.000056f, -0.000070f, +0.000031f, +0.000071f, -0.000004f, +0.000191f, +0.000263f, -0.000013f, -0.000145f, + +0.000261f, +0.000305f, -0.000033f, -0.000246f, +0.000042f, -0.000141f, -0.000010f, +0.000107f, -0.000071f, +0.000045f, + -0.000002f, -0.000056f, -0.000029f, +0.000057f, -0.000030f, +0.000054f, +0.000058f, +0.000006f, -0.000047f, +0.000004f, + -0.000042f, +0.000036f, +0.000077f, -0.000007f, -0.000085f, -0.000071f, +0.000031f, +0.000063f, +0.000003f, -0.000031f, + +0.000065f, +0.000027f, -0.000048f, +0.000007f, +0.000023f, -0.000010f, -0.000035f, +0.000048f, -0.000137f, +0.000012f, + -0.000005f, -0.000026f, +0.000031f, -0.000005f, +0.000007f, -0.000022f + } + } +}; + +const float rightBRIRImag[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]= +{ + { + { + -0.003791f, +0.035616f, -0.034450f, +0.040441f, -0.029208f, +0.017954f, +0.011952f, +0.008329f, -0.020104f, -0.006243f, + +0.004245f, -0.010854f, +0.001877f, +0.018565f, +0.016323f, -0.029876f, +0.012277f, -0.005391f, +0.019624f, -0.011547f, + +0.004712f, -0.005113f, +0.019768f, -0.018680f, +0.007412f, -0.020217f, +0.010813f, -0.006206f, +0.003340f, +0.001228f, + -0.003712f, +0.012907f, -0.008330f, -0.003791f, -0.000284f, +0.001418f, +0.012931f, -0.024378f, +0.007858f, -0.010698f, + +0.012380f, +0.017354f, -0.014538f, -0.004443f, -0.001842f, -0.001028f, +0.000687f, +0.010936f, -0.003543f, +0.003378f, + -0.005550f, +0.002422f, -0.001987f, +0.003558f, -0.001605f, -0.002153f, -0.004844f, +0.003678f, -0.001028f, +0.009272f, + -0.002623f, -0.003425f, +0.001118f, +0.001615f, +0.000303f, +0.000069f, +0.002704f, -0.001183f, -0.003852f, -0.005380f, + +0.003144f, -0.001632f, +0.000334f, +0.001724f, -0.003079f, +0.003885f, -0.003650f, +0.002843f, +0.000534f, +0.000864f, + +0.000686f, +0.000315f, +0.000489f, +0.000848f, -0.003228f, +0.000289f, -0.002032f, +0.003090f, -0.002176f, -0.002891f, + +0.002361f, -0.000048f, +0.000530f, -0.002042f, +0.000599f, -0.000001f + }, + { + +0.015156f, -0.046919f, +0.023866f, +0.056551f, -0.018603f, +0.018204f, -0.006295f, +0.005841f, -0.017601f, +0.000850f, + +0.005508f, -0.025128f, +0.017630f, +0.004815f, +0.013452f, -0.013149f, -0.012112f, -0.002673f, +0.025048f, -0.020564f, + +0.008179f, -0.000026f, -0.006170f, -0.006985f, +0.015915f, -0.004689f, -0.011409f, +0.002401f, +0.008634f, -0.013774f, + +0.025872f, -0.016717f, +0.001849f, +0.000660f, -0.002988f, +0.019139f, -0.002357f, -0.007661f, -0.008487f, -0.005312f, + +0.017901f, -0.004952f, -0.005629f, -0.004625f, +0.011985f, -0.009104f, +0.003950f, +0.001489f, +0.002572f, -0.001056f, + +0.000930f, -0.001780f, -0.005631f, +0.005814f, -0.007183f, +0.003234f, -0.001103f, +0.003008f, -0.002753f, -0.000448f, + +0.004966f, +0.002010f, -0.007550f, +0.008200f, +0.000854f, +0.000047f, +0.002977f, -0.003688f, -0.002937f, +0.000292f, + -0.003802f, -0.000313f, +0.001301f, +0.000813f, -0.001391f, +0.002152f, +0.000637f, +0.000919f, +0.004756f, -0.002570f, + +0.001029f, +0.001605f, -0.000617f, +0.000673f, -0.001594f, -0.002762f, +0.003751f, -0.002323f, -0.001274f, -0.000698f, + +0.000647f, +0.002001f, -0.000753f, +0.000262f, +0.000371f, -0.000401f + }, + { + +0.004299f, -0.003209f, -0.003761f, +0.055760f, -0.024853f, +0.024391f, -0.001604f, -0.015957f, +0.002351f, +0.006343f, + -0.008115f, -0.020569f, +0.012643f, +0.009013f, -0.009925f, +0.003359f, +0.012535f, -0.012377f, +0.010433f, -0.000091f, + -0.010594f, +0.011266f, +0.006100f, -0.002060f, +0.002277f, -0.002171f, -0.012298f, -0.017392f, -0.006387f, +0.003138f, + +0.021639f, -0.000998f, -0.008441f, +0.007443f, +0.004154f, -0.005729f, +0.006390f, +0.002980f, +0.006195f, -0.009220f, + -0.008181f, +0.011127f, +0.006971f, -0.007298f, -0.001284f, -0.002612f, +0.002489f, +0.004926f, -0.000254f, -0.004375f, + -0.007130f, +0.002882f, -0.002582f, +0.000713f, +0.000041f, +0.002210f, +0.002881f, -0.008372f, +0.000127f, +0.003099f, + +0.008382f, +0.001015f, +0.000337f, -0.005586f, +0.007747f, -0.004040f, +0.002872f, -0.002689f, +0.003474f, -0.004804f, + -0.004120f, -0.003075f, +0.001198f, -0.002518f, +0.001058f, -0.002374f, +0.001928f, -0.000488f, +0.004656f, +0.002497f, + +0.002037f, +0.000146f, +0.000636f, -0.002417f, +0.000216f, +0.001828f, -0.004316f, -0.002718f, -0.001475f, +0.003910f, + +0.000325f, -0.001053f, +0.000272f, +0.000247f, +0.000219f, -0.001413f + }, + { + +0.000562f, +0.015049f, -0.031657f, +0.038521f, -0.033022f, +0.012710f, +0.010685f, -0.001883f, +0.000869f, -0.001471f, + -0.005622f, -0.010958f, -0.003235f, +0.030773f, -0.030455f, +0.027403f, +0.004990f, -0.020239f, -0.000620f, +0.002078f, + +0.000073f, +0.009197f, +0.002127f, -0.016887f, +0.015101f, +0.013827f, -0.020001f, -0.014559f, +0.014014f, -0.013660f, + +0.020513f, -0.015651f, +0.004790f, +0.001380f, -0.006340f, +0.001655f, +0.000017f, -0.004094f, +0.008944f, -0.005050f, + +0.002472f, +0.006787f, -0.005301f, -0.003325f, +0.000165f, +0.007203f, -0.010677f, +0.002142f, +0.006378f, -0.001557f, + -0.008835f, +0.005949f, +0.003548f, -0.006529f, +0.003132f, -0.001672f, +0.001931f, -0.004389f, -0.000620f, +0.006489f, + +0.000236f, -0.003725f, -0.002856f, +0.006497f, +0.003731f, -0.003336f, -0.003984f, +0.005417f, -0.002780f, -0.003150f, + +0.001674f, -0.001999f, +0.002759f, -0.000623f, +0.000414f, +0.001472f, -0.001143f, -0.000976f, +0.002069f, -0.000229f, + -0.000752f, -0.000053f, +0.000146f, +0.001228f, -0.001831f, +0.001328f, +0.000937f, +0.000171f, -0.002131f, +0.001937f, + -0.000823f, +0.000024f, -0.001228f, +0.000033f, +0.000899f, +0.000148f + }, + { + +0.031079f, -0.100963f, +0.034014f, +0.043930f, -0.015193f, +0.011117f, -0.002004f, +0.000328f, -0.003409f, -0.022653f, + +0.010101f, -0.016582f, +0.017336f, -0.001914f, +0.003425f, +0.004211f, +0.006719f, -0.007042f, -0.003467f, +0.006217f, + -0.011715f, +0.013506f, -0.012220f, -0.017549f, +0.030531f, +0.000010f, -0.011696f, -0.013516f, +0.015369f, +0.015785f, + -0.001777f, -0.020855f, +0.025498f, -0.019570f, +0.007411f, +0.007851f, -0.004696f, -0.008433f, +0.012166f, -0.003196f, + +0.005940f, -0.005937f, +0.004706f, -0.005311f, +0.001921f, +0.005805f, -0.004376f, -0.003911f, -0.000236f, +0.004180f, + +0.001336f, -0.003118f, +0.003544f, -0.003611f, +0.000195f, +0.004241f, -0.012135f, +0.005817f, -0.000021f, +0.006245f, + -0.001650f, -0.001215f, -0.000318f, +0.001569f, -0.002899f, +0.009029f, -0.003874f, -0.002748f, -0.000394f, +0.000273f, + -0.004816f, -0.001913f, -0.000162f, +0.002463f, +0.001834f, +0.001245f, +0.001416f, -0.000379f, +0.001714f, +0.003885f, + -0.003784f, +0.000354f, -0.001659f, +0.002297f, -0.002478f, +0.000657f, +0.000994f, -0.000099f, -0.002571f, +0.003597f, + -0.001896f, +0.001375f, -0.000341f, -0.000967f, -0.000569f, +0.000971f + }, + { + -0.004541f, +0.045081f, -0.061054f, +0.043177f, -0.033020f, +0.011133f, +0.018265f, -0.006689f, +0.000432f, -0.012501f, + +0.010020f, -0.014024f, -0.016100f, +0.006235f, -0.000806f, +0.025484f, -0.000778f, -0.011684f, -0.007542f, -0.008898f, + +0.025761f, +0.001589f, -0.018234f, -0.013261f, +0.009468f, -0.004788f, +0.034638f, -0.026602f, +0.010301f, -0.008334f, + -0.008825f, -0.013069f, +0.016905f, +0.007814f, -0.001121f, -0.017714f, +0.005769f, -0.002227f, -0.004115f, +0.010645f, + -0.002158f, -0.018715f, +0.013931f, +0.004391f, -0.002375f, -0.010036f, +0.007984f, -0.006945f, +0.003214f, -0.002949f, + +0.003658f, -0.001122f, +0.000061f, +0.002870f, +0.004568f, +0.006022f, -0.006356f, -0.004375f, -0.000618f, +0.002222f, + -0.001832f, +0.001598f, -0.005641f, -0.002685f, +0.005231f, -0.002316f, +0.002807f, +0.000707f, -0.004551f, +0.001686f, + +0.000074f, +0.000185f, +0.002129f, -0.003117f, -0.002030f, +0.004874f, -0.000430f, +0.000043f, -0.002739f, +0.001221f, + -0.000975f, -0.004325f, +0.000197f, +0.001261f, +0.003576f, +0.002260f, -0.001576f, -0.001480f, -0.001593f, +0.000692f, + +0.000285f, -0.001473f, +0.002741f, -0.000002f, -0.000450f, -0.000607f + }, + { + +0.036117f, -0.119327f, +0.044976f, +0.037739f, -0.001219f, +0.002103f, +0.007910f, -0.005947f, +0.000356f, -0.018261f, + +0.019002f, -0.028213f, -0.003305f, +0.022168f, +0.006128f, +0.018084f, -0.014664f, -0.011038f, -0.007963f, +0.000761f, + +0.021748f, -0.009466f, -0.025281f, +0.008730f, +0.005341f, -0.007303f, +0.016566f, -0.015863f, +0.012280f, -0.001132f, + -0.005262f, -0.011727f, +0.016218f, +0.013931f, -0.009602f, -0.011008f, +0.008522f, -0.008221f, +0.011200f, -0.002612f, + -0.000806f, -0.010326f, +0.006563f, +0.005927f, -0.008185f, -0.004359f, +0.003896f, +0.002613f, +0.001596f, -0.004896f, + +0.001641f, -0.003403f, +0.007664f, +0.001231f, -0.000518f, +0.005706f, -0.006250f, +0.000972f, +0.004981f, -0.003980f, + -0.000078f, +0.000348f, -0.004083f, +0.001331f, -0.000848f, +0.001826f, +0.003498f, -0.003738f, +0.001630f, -0.004187f, + +0.001313f, +0.000447f, +0.002926f, +0.000433f, +0.003567f, -0.004496f, -0.000221f, +0.002305f, -0.000183f, -0.000633f, + -0.001989f, -0.001657f, -0.000426f, +0.002021f, -0.003825f, +0.007214f, -0.003633f, +0.001283f, -0.003259f, -0.000361f, + +0.002577f, -0.003052f, +0.001919f, -0.000278f, +0.000787f, +0.000639f + }, + { + -0.004144f, +0.045374f, -0.072072f, +0.045968f, -0.026150f, +0.002220f, +0.016361f, +0.001348f, +0.003320f, -0.012047f, + +0.002106f, -0.018684f, -0.005858f, +0.018462f, +0.003925f, +0.001033f, -0.004733f, -0.010901f, +0.019465f, +0.009475f, + -0.015377f, -0.000092f, -0.001831f, -0.001823f, -0.028757f, +0.025943f, +0.021352f, -0.013191f, -0.010846f, +0.003222f, + -0.008877f, +0.007365f, -0.010518f, +0.020756f, -0.015993f, +0.008567f, -0.009150f, +0.009497f, -0.009918f, +0.000967f, + +0.004153f, +0.001123f, -0.016148f, +0.004013f, +0.009431f, -0.001843f, -0.006558f, -0.006791f, +0.007685f, +0.009283f, + -0.008128f, -0.010130f, +0.015240f, +0.002291f, +0.003442f, -0.000674f, +0.000825f, +0.000382f, -0.011712f, +0.002348f, + +0.002999f, -0.006862f, +0.000962f, -0.000590f, -0.000935f, -0.001273f, +0.005840f, +0.004162f, -0.009001f, +0.000338f, + +0.003104f, +0.001575f, +0.004593f, +0.001355f, -0.000290f, -0.002256f, +0.004355f, -0.001903f, -0.003263f, -0.000659f, + -0.001294f, -0.000832f, +0.000698f, -0.000816f, +0.002170f, -0.000212f, +0.002000f, -0.001026f, -0.004872f, -0.000179f, + +0.001854f, -0.000515f, +0.004120f, +0.000527f, -0.000354f, -0.001380f + }, + { + +0.034893f, -0.116598f, +0.051025f, +0.035694f, -0.000997f, +0.018245f, -0.005301f, -0.002292f, -0.008323f, -0.000000f, + +0.006370f, -0.022686f, -0.004512f, +0.042219f, -0.034481f, +0.020360f, -0.012263f, -0.007853f, +0.020722f, -0.005794f, + +0.005172f, -0.028014f, +0.028510f, -0.021731f, -0.020878f, +0.019570f, +0.009691f, +0.004412f, -0.023657f, +0.007119f, + -0.001198f, +0.000920f, -0.005098f, +0.000793f, +0.012300f, -0.012051f, +0.001785f, +0.006111f, +0.001740f, -0.004239f, + -0.005123f, -0.004060f, -0.000797f, +0.001264f, +0.002020f, +0.002966f, +0.000674f, -0.001972f, -0.002580f, +0.002055f, + +0.004382f, -0.010227f, +0.002932f, +0.006830f, +0.001417f, +0.004780f, -0.002332f, -0.000024f, -0.008105f, -0.000001f, + +0.002378f, -0.004309f, +0.002387f, +0.007005f, -0.006738f, +0.001774f, +0.005883f, -0.000985f, +0.001149f, -0.005486f, + +0.001724f, +0.002457f, +0.000348f, +0.004471f, -0.003903f, -0.000096f, +0.001148f, -0.002147f, -0.001909f, -0.000392f, + -0.000904f, -0.002897f, +0.002295f, +0.000806f, +0.001663f, +0.000673f, +0.000174f, -0.000742f, -0.000727f, -0.000970f, + +0.000703f, +0.002098f, -0.001480f, +0.002680f, -0.000201f, -0.000227f + }, + { + +0.005126f, -0.001538f, -0.015235f, +0.030695f, +0.005281f, +0.006940f, -0.039109f, +0.010453f, +0.025729f, -0.008861f, + -0.003570f, -0.022616f, +0.023200f, +0.008870f, -0.021218f, +0.004430f, -0.018785f, +0.010071f, +0.008505f, +0.003754f, + -0.012304f, +0.018236f, -0.001993f, +0.002251f, +0.006982f, -0.022933f, +0.013043f, -0.018298f, -0.002656f, +0.005637f, + +0.008741f, -0.003656f, +0.012688f, -0.010035f, -0.003106f, +0.012127f, +0.000493f, -0.001092f, -0.009893f, +0.015247f, + -0.000467f, +0.003941f, -0.000487f, -0.021390f, +0.003195f, -0.003115f, -0.006729f, +0.009499f, +0.002141f, +0.005978f, + -0.009898f, -0.000030f, -0.005210f, +0.003261f, -0.004086f, +0.008716f, +0.002369f, -0.002758f, +0.007527f, -0.010094f, + +0.001631f, -0.009640f, +0.007037f, -0.004069f, +0.003800f, +0.001849f, +0.001873f, -0.001975f, +0.003919f, -0.004245f, + +0.001578f, -0.003325f, +0.001115f, -0.003713f, -0.002063f, -0.000404f, +0.000261f, +0.001356f, -0.000226f, +0.000382f, + +0.001363f, +0.000463f, -0.000105f, -0.000621f, +0.000770f, -0.002227f, -0.000718f, +0.002514f, -0.000664f, -0.003633f, + +0.001976f, -0.001506f, -0.000715f, -0.000132f, +0.002516f, -0.002111f + }, + { + +0.022350f, -0.075938f, +0.035126f, +0.029207f, +0.003163f, -0.004521f, -0.020930f, -0.014418f, +0.030501f, -0.006740f, + -0.011390f, -0.000896f, +0.012382f, -0.006164f, -0.001313f, +0.002459f, -0.002104f, +0.021712f, -0.012193f, +0.009687f, + +0.004707f, +0.014163f, -0.023884f, +0.021911f, -0.026152f, +0.001162f, +0.006696f, -0.000469f, +0.000056f, +0.004718f, + -0.001990f, -0.000962f, +0.004848f, -0.013501f, +0.007453f, +0.000046f, +0.003247f, -0.006705f, +0.006898f, -0.006236f, + +0.006251f, -0.005148f, +0.001841f, -0.002463f, +0.000287f, -0.000001f, -0.007061f, +0.013003f, -0.004662f, -0.000785f, + +0.009561f, -0.011175f, -0.002834f, -0.002082f, +0.007184f, -0.000181f, -0.000345f, +0.009599f, -0.003307f, -0.002433f, + -0.001748f, -0.000585f, -0.000145f, +0.005346f, +0.003550f, -0.003113f, -0.001236f, -0.001061f, +0.000341f, -0.001713f, + +0.003038f, -0.000514f, +0.003507f, -0.004291f, -0.000841f, +0.001188f, -0.002748f, +0.003677f, -0.000286f, -0.001103f, + +0.002232f, +0.004038f, -0.003380f, -0.000870f, -0.000191f, +0.002415f, -0.004147f, +0.000529f, -0.000457f, -0.000480f, + +0.000047f, -0.002087f, +0.002915f, +0.001516f, -0.000635f, +0.000426f + }, + { + +0.001111f, +0.011867f, -0.017990f, +0.028297f, +0.000426f, -0.002363f, -0.039425f, +0.031221f, -0.005193f, +0.008364f, + +0.006401f, -0.025754f, +0.026080f, -0.023642f, +0.002052f, +0.003631f, +0.009743f, -0.017352f, +0.007839f, +0.000594f, + -0.014943f, +0.001556f, -0.013070f, +0.022447f, +0.000669f, -0.015098f, +0.015087f, +0.007037f, -0.005164f, -0.004471f, + -0.004559f, +0.009403f, -0.010427f, +0.012295f, +0.008748f, -0.010688f, +0.004361f, -0.009843f, -0.000076f, +0.003307f, + -0.002826f, -0.014185f, +0.022416f, -0.006705f, -0.010075f, +0.012218f, -0.003595f, +0.003724f, -0.005893f, +0.008991f, + +0.009057f, -0.015570f, +0.004597f, -0.001585f, +0.002206f, -0.000167f, -0.009879f, +0.004410f, +0.000127f, -0.007267f, + +0.006999f, +0.006806f, -0.003321f, -0.000730f, +0.001635f, -0.001273f, +0.000587f, -0.005776f, +0.001981f, +0.007074f, + -0.002171f, -0.003334f, +0.005375f, +0.004819f, -0.003044f, -0.001193f, +0.002751f, -0.002876f, +0.001043f, -0.003590f, + +0.003531f, -0.002616f, -0.001019f, -0.000056f, +0.001974f, -0.001485f, -0.001004f, +0.005073f, +0.001846f, -0.000808f, + +0.002524f, +0.000703f, +0.000142f, -0.000624f, +0.000828f, -0.003011f + }, + { + +0.034061f, -0.110442f, +0.048213f, +0.025239f, +0.012269f, -0.002514f, -0.019908f, +0.023970f, -0.019269f, +0.028416f, + -0.046883f, -0.000178f, +0.012888f, -0.032642f, +0.030844f, +0.001553f, +0.000074f, -0.004604f, +0.003820f, -0.010144f, + -0.000311f, +0.007779f, -0.005806f, +0.007944f, -0.014090f, -0.000900f, +0.002712f, +0.013894f, +0.004462f, -0.016205f, + -0.005337f, +0.000814f, -0.006058f, +0.012871f, +0.007492f, -0.003853f, -0.000002f, -0.010796f, +0.012141f, -0.004061f, + -0.014549f, +0.001839f, +0.014417f, -0.002074f, -0.006590f, +0.007401f, -0.001645f, +0.005736f, -0.004139f, +0.000785f, + +0.001653f, -0.002559f, +0.000538f, +0.002989f, -0.008537f, +0.004625f, -0.010530f, +0.011204f, -0.007167f, +0.007388f, + -0.002460f, +0.002414f, -0.002064f, -0.000228f, +0.001363f, -0.001512f, -0.003710f, +0.000004f, +0.007957f, +0.003478f, + -0.005423f, +0.002982f, -0.000691f, +0.001599f, +0.000515f, -0.001164f, -0.001368f, +0.001924f, -0.004302f, +0.002464f, + -0.003819f, +0.000138f, -0.002363f, -0.000981f, +0.002320f, +0.000650f, -0.000354f, +0.002478f, -0.001367f, +0.001364f, + -0.000283f, +0.002098f, +0.001957f, +0.000225f, +0.000149f, -0.001690f + }, + { + +0.008157f, -0.014952f, -0.004610f, +0.021016f, +0.004300f, -0.001303f, -0.048770f, +0.041565f, -0.008153f, -0.009920f, + +0.012004f, -0.032354f, +0.010967f, +0.009596f, +0.019598f, -0.022471f, +0.025230f, -0.003797f, -0.009861f, -0.015772f, + +0.014787f, -0.015178f, +0.026701f, +0.003907f, -0.021712f, +0.012796f, +0.010293f, -0.020113f, +0.003656f, +0.005975f, + -0.013944f, +0.007406f, +0.004362f, +0.006323f, -0.024994f, +0.018065f, -0.003672f, -0.002683f, +0.001180f, +0.002073f, + +0.009488f, -0.004959f, -0.001422f, -0.006185f, +0.005975f, -0.003506f, -0.003574f, +0.008883f, +0.000407f, +0.002029f, + +0.001688f, +0.000331f, -0.002574f, -0.002714f, -0.000760f, -0.000615f, -0.002091f, +0.001747f, -0.002336f, -0.001154f, + +0.003304f, -0.005443f, +0.001853f, +0.003146f, +0.004879f, -0.002264f, -0.004307f, +0.003847f, -0.003045f, +0.000536f, + +0.001209f, +0.000809f, +0.000078f, -0.002629f, +0.002595f, +0.001081f, -0.001842f, -0.000580f, -0.000494f, +0.001876f, + +0.000284f, +0.000530f, +0.000551f, +0.000242f, +0.000446f, +0.000477f, -0.000401f, +0.000882f, -0.000876f, -0.001634f, + -0.000019f, -0.000847f, +0.000083f, +0.000996f, +0.001146f, -0.003415f + }, + { + +0.031471f, -0.102371f, +0.048731f, +0.002571f, +0.031337f, -0.013155f, -0.021248f, +0.022650f, -0.018393f, +0.012535f, + -0.013414f, -0.001893f, -0.018236f, +0.028763f, -0.008034f, +0.003288f, +0.004925f, -0.009888f, -0.012764f, +0.000884f, + +0.005916f, +0.015517f, -0.013872f, +0.014332f, -0.013445f, -0.016763f, +0.018277f, +0.003870f, -0.005788f, +0.005802f, + -0.011611f, +0.006351f, +0.000286f, +0.004177f, -0.016282f, +0.009266f, +0.000629f, +0.004378f, -0.008592f, +0.007596f, + +0.003657f, +0.008392f, -0.015385f, +0.001600f, +0.002894f, -0.006831f, -0.000403f, +0.004026f, +0.004754f, -0.000294f, + +0.003344f, -0.003990f, -0.003904f, +0.002277f, -0.005484f, +0.002950f, -0.003668f, +0.002270f, +0.000406f, +0.004562f, + -0.004674f, +0.001137f, +0.000017f, +0.000317f, +0.000708f, -0.004247f, +0.002698f, -0.000040f, +0.000686f, -0.005979f, + +0.005994f, -0.005415f, +0.004858f, -0.002041f, -0.001598f, +0.001694f, -0.000177f, -0.003148f, +0.000052f, -0.001476f, + +0.002110f, -0.001808f, +0.000649f, -0.001596f, +0.001986f, -0.000151f, +0.002280f, -0.000636f, -0.000539f, -0.001988f, + +0.000286f, +0.001015f, +0.000693f, -0.002775f, +0.002611f, -0.000593f + } + }, + { + { + -0.000492f, +0.127142f, +0.030490f, +0.014264f, -0.035944f, +0.023620f, +0.016300f, +0.015501f, -0.016171f, +0.001100f, + +0.002479f, -0.006976f, +0.021283f, +0.029754f, +0.011380f, -0.041859f, +0.028271f, +0.004580f, +0.009514f, -0.023580f, + +0.013174f, +0.012351f, +0.037096f, -0.033694f, -0.007608f, -0.028563f, +0.014571f, +0.002913f, +0.019502f, +0.004183f, + -0.021282f, -0.001475f, -0.019316f, -0.001425f, -0.004670f, -0.007110f, +0.009945f, -0.033870f, +0.003142f, -0.022763f, + +0.006673f, +0.019557f, -0.011205f, +0.002269f, -0.006265f, -0.008485f, +0.004070f, +0.024582f, -0.001157f, +0.003195f, + +0.001529f, +0.004204f, -0.000652f, +0.005671f, -0.000359f, -0.001155f, -0.009685f, -0.001868f, -0.002569f, +0.016346f, + -0.001001f, -0.009543f, -0.005063f, +0.000231f, -0.000778f, -0.003100f, -0.000187f, -0.000874f, -0.003108f, -0.005018f, + +0.009271f, +0.000628f, +0.000157f, +0.003205f, -0.002344f, +0.001975f, -0.008487f, +0.000500f, -0.000589f, +0.000350f, + -0.000638f, -0.001753f, -0.000961f, -0.002041f, -0.005803f, -0.000833f, -0.003869f, +0.002965f, +0.001063f, +0.001273f, + +0.004055f, -0.000334f, -0.000921f, -0.003242f, -0.000172f, -0.001795f + }, + { + -0.007837f, +0.022107f, +0.127114f, +0.120839f, +0.001794f, +0.002773f, -0.015184f, +0.015920f, -0.002210f, +0.007927f, + +0.008238f, -0.028435f, +0.016593f, +0.007225f, +0.033784f, -0.024372f, -0.029858f, -0.012470f, +0.011342f, -0.024519f, + -0.004079f, -0.013535f, -0.012085f, -0.005937f, +0.029009f, -0.002930f, -0.007080f, +0.007354f, +0.003273f, -0.013310f, + +0.037567f, -0.019525f, +0.007405f, +0.018909f, +0.008826f, +0.023754f, -0.005211f, -0.012007f, -0.023086f, -0.016654f, + +0.016544f, -0.010107f, -0.005647f, -0.004065f, +0.012187f, -0.003826f, +0.013470f, +0.003581f, +0.001941f, -0.002853f, + +0.003480f, -0.002259f, -0.009590f, +0.004383f, -0.002683f, +0.010189f, -0.003419f, -0.000946f, -0.007792f, -0.005691f, + +0.002501f, +0.000188f, -0.010032f, +0.015210f, +0.004677f, +0.000532f, +0.003285f, -0.002984f, -0.001447f, +0.000496f, + -0.003362f, +0.003906f, +0.003948f, +0.004497f, +0.000189f, +0.000256f, -0.000929f, -0.001518f, +0.002044f, -0.002702f, + +0.004598f, +0.001435f, -0.003800f, +0.000606f, +0.002298f, -0.000827f, +0.004897f, -0.002414f, -0.003063f, -0.000538f, + +0.001736f, +0.002346f, +0.001046f, +0.001436f, -0.001316f, -0.003433f + }, + { + +0.000671f, +0.110839f, +0.101416f, +0.091860f, +0.005660f, +0.012777f, -0.008042f, -0.007811f, +0.005404f, +0.017988f, + -0.007726f, -0.035331f, +0.004686f, +0.004796f, -0.012038f, +0.004397f, +0.029637f, +0.000049f, +0.017032f, +0.002561f, + -0.013992f, +0.004338f, +0.002661f, -0.006978f, -0.001991f, -0.016686f, -0.030465f, -0.026391f, -0.008065f, +0.006298f, + +0.027376f, +0.005574f, -0.013353f, +0.005959f, +0.013166f, +0.005872f, +0.019797f, +0.014006f, +0.017696f, -0.005558f, + -0.015198f, +0.008329f, +0.010258f, -0.006952f, -0.005429f, -0.008932f, -0.002966f, +0.003579f, +0.002287f, -0.006145f, + -0.006903f, +0.008747f, -0.006150f, +0.000402f, -0.001114f, -0.001603f, +0.012201f, +0.003396f, +0.000947f, -0.002934f, + +0.010431f, +0.004735f, +0.000763f, -0.009370f, +0.004800f, -0.004450f, +0.001665f, -0.002129f, +0.006339f, -0.005015f, + -0.000539f, -0.002990f, -0.000544f, -0.002495f, -0.000746f, -0.004227f, +0.001651f, +0.000630f, +0.010454f, +0.005959f, + +0.004160f, +0.001907f, +0.001995f, -0.003650f, -0.003609f, -0.000892f, -0.005898f, -0.001278f, -0.001766f, +0.002991f, + +0.001625f, -0.001037f, -0.002750f, -0.002003f, -0.000188f, +0.000621f + }, + { + +0.000990f, +0.080842f, +0.006590f, +0.002939f, -0.063577f, +0.008257f, +0.010604f, -0.004919f, +0.005113f, +0.037113f, + +0.012699f, -0.015215f, -0.006199f, +0.018887f, -0.053634f, +0.035855f, +0.043012f, -0.015612f, -0.032205f, -0.010302f, + +0.001258f, +0.015463f, +0.019228f, -0.008104f, +0.015893f, +0.009870f, -0.028033f, -0.028344f, +0.002831f, -0.025566f, + +0.028636f, -0.011375f, -0.007755f, -0.005683f, -0.007843f, -0.003330f, -0.008150f, -0.007394f, +0.013685f, +0.003644f, + +0.008056f, +0.006824f, -0.003341f, -0.007880f, -0.003775f, +0.008857f, -0.015107f, +0.002661f, +0.007104f, +0.003490f, + -0.010954f, -0.003320f, +0.005706f, -0.003025f, +0.004389f, -0.000141f, -0.001093f, -0.010051f, -0.001956f, +0.010995f, + +0.002149f, -0.003701f, -0.000580f, +0.012925f, +0.011365f, -0.002934f, -0.007096f, -0.000541f, -0.008584f, +0.001509f, + +0.008050f, -0.000326f, +0.005580f, -0.000333f, +0.000527f, +0.000851f, -0.000600f, +0.000707f, +0.001200f, -0.001471f, + -0.000259f, +0.000664f, +0.000207f, +0.001260f, -0.002235f, +0.001211f, +0.001370f, +0.003000f, +0.000330f, +0.002028f, + -0.001790f, -0.000677f, +0.000545f, +0.000926f, -0.000186f, -0.000303f + }, + { + -0.026835f, -0.181865f, +0.037564f, +0.107751f, +0.032150f, +0.003916f, -0.013587f, -0.004438f, -0.013500f, -0.019061f, + +0.018127f, -0.027756f, +0.016303f, -0.018435f, -0.007393f, +0.008794f, +0.039105f, -0.003404f, -0.028716f, -0.011274f, + -0.044767f, +0.001436f, +0.013655f, +0.001732f, +0.026819f, -0.000095f, +0.001978f, +0.001876f, +0.026554f, +0.017451f, + -0.002075f, -0.028912f, +0.026192f, -0.012989f, +0.015906f, +0.014152f, +0.001101f, -0.007629f, +0.014840f, +0.001461f, + +0.001782f, -0.011494f, +0.011753f, -0.003328f, -0.003503f, +0.006511f, +0.000759f, +0.005716f, +0.003309f, -0.000564f, + +0.001223f, -0.006044f, +0.007236f, -0.001145f, -0.007203f, +0.004614f, -0.014844f, +0.001762f, +0.001465f, +0.007694f, + +0.001861f, +0.003301f, -0.004797f, -0.003294f, -0.004021f, +0.015571f, +0.000944f, -0.003031f, -0.003769f, -0.004734f, + -0.010545f, -0.004038f, +0.002712f, +0.006084f, +0.007743f, +0.002468f, +0.000482f, +0.002498f, +0.006597f, +0.009007f, + -0.001043f, +0.000108f, -0.003056f, +0.002881f, -0.005147f, -0.001948f, +0.002383f, +0.002622f, -0.000338f, +0.005018f, + -0.001357f, +0.002903f, +0.000944f, -0.000235f, -0.000181f, +0.002126f + }, + { + -0.003185f, +0.100270f, -0.029126f, -0.009281f, -0.072169f, +0.013546f, +0.016975f, -0.009072f, +0.010034f, -0.005103f, + +0.007802f, -0.018048f, -0.010867f, -0.011273f, -0.023622f, +0.012181f, -0.009776f, -0.008777f, -0.016221f, -0.021456f, + +0.020390f, +0.001323f, -0.002958f, -0.025382f, -0.008702f, -0.010006f, +0.039060f, -0.025220f, +0.005527f, -0.018304f, + -0.010691f, -0.032201f, +0.000142f, +0.010727f, -0.006689f, -0.024096f, +0.007994f, -0.009646f, -0.010656f, +0.009432f, + +0.005178f, -0.016290f, +0.008334f, +0.004069f, +0.003675f, -0.004658f, +0.006706f, -0.013866f, +0.002914f, -0.000667f, + +0.005199f, +0.003319f, +0.000516f, +0.003473f, +0.010426f, +0.006826f, -0.012693f, -0.007533f, -0.001723f, +0.001412f, + -0.001387f, +0.002234f, -0.008857f, -0.005027f, +0.002840f, -0.007341f, +0.004239f, +0.007672f, -0.002719f, +0.000126f, + +0.000082f, -0.002792f, -0.005425f, -0.012384f, -0.008279f, +0.006008f, +0.000589f, +0.000922f, -0.002687f, +0.000674f, + -0.001525f, -0.004787f, +0.000102f, +0.004109f, +0.006266f, +0.001595f, -0.003404f, -0.000900f, -0.000193f, +0.002951f, + +0.001078f, -0.003480f, +0.001421f, -0.002189f, -0.000761f, +0.000053f + }, + { + -0.030217f, -0.221214f, +0.038313f, +0.121312f, +0.064707f, -0.003907f, +0.010002f, -0.007884f, +0.004944f, -0.022780f, + +0.023826f, -0.005094f, +0.000909f, +0.020493f, +0.008115f, -0.005734f, -0.029788f, -0.003137f, -0.018553f, -0.030074f, + +0.006583f, -0.014134f, -0.029065f, +0.014021f, +0.006633f, -0.019995f, +0.009369f, -0.009166f, +0.024812f, +0.003127f, + -0.000021f, -0.011782f, +0.009195f, +0.018955f, -0.001175f, -0.014172f, -0.001517f, -0.015883f, +0.015238f, +0.000148f, + +0.006233f, -0.010534f, +0.004895f, +0.001454f, -0.021112f, -0.010564f, +0.005267f, +0.009229f, +0.012845f, -0.003395f, + -0.009352f, -0.007743f, +0.014193f, -0.001162f, -0.005752f, +0.009354f, -0.000337f, +0.012997f, +0.012746f, -0.004475f, + +0.005915f, +0.002550f, -0.009430f, -0.001723f, -0.001543f, +0.000441f, +0.002673f, -0.002115f, +0.001608f, -0.007624f, + +0.002453f, -0.000548f, +0.004768f, +0.003531f, +0.003776f, -0.008140f, -0.002597f, +0.006363f, +0.003781f, +0.000026f, + -0.001018f, -0.002478f, -0.001446f, +0.000320f, -0.006837f, +0.007249f, -0.005413f, +0.001959f, -0.003069f, -0.001351f, + +0.003129f, -0.001881f, +0.000818f, -0.001412f, +0.002122f, +0.001692f + }, + { + -0.004134f, +0.078893f, -0.059682f, -0.002127f, -0.060617f, -0.007065f, +0.016696f, +0.014501f, +0.011325f, -0.005655f, + +0.014505f, -0.010427f, -0.010943f, +0.000286f, +0.009830f, +0.007337f, +0.003271f, +0.014110f, +0.015331f, -0.001794f, + -0.025418f, -0.008408f, -0.008112f, +0.017243f, -0.011046f, +0.014224f, -0.004306f, -0.010070f, +0.001507f, -0.000426f, + +0.006884f, +0.007839f, -0.029931f, +0.009998f, -0.019037f, +0.012281f, -0.010893f, +0.001655f, -0.015497f, +0.000224f, + +0.009042f, +0.008738f, -0.022560f, -0.003224f, +0.011806f, -0.000160f, -0.005826f, -0.009557f, +0.001611f, +0.012995f, + -0.003841f, -0.006817f, +0.020858f, +0.002630f, +0.006933f, +0.002031f, -0.004101f, -0.003763f, -0.009439f, +0.000590f, + -0.003484f, -0.009424f, +0.004092f, +0.001133f, +0.001681f, -0.001448f, +0.001601f, -0.001946f, -0.006213f, +0.009829f, + +0.009660f, +0.007110f, +0.009400f, +0.003770f, -0.000927f, -0.007563f, +0.001073f, +0.001559f, +0.001140f, +0.000655f, + +0.000532f, +0.000921f, -0.000204f, -0.004870f, -0.002147f, -0.003474f, +0.002213f, +0.001794f, -0.005261f, -0.003304f, + +0.001486f, -0.000281f, +0.003085f, +0.001261f, +0.001769f, -0.000273f + }, + { + -0.029485f, -0.205707f, +0.057007f, +0.129426f, +0.081460f, +0.020928f, -0.011809f, -0.003713f, +0.001069f, +0.017510f, + +0.030232f, -0.016894f, -0.021508f, +0.027481f, -0.061490f, +0.003144f, -0.004036f, -0.014495f, +0.013101f, +0.005423f, + +0.006718f, -0.051342f, +0.019772f, -0.010063f, -0.033144f, +0.004254f, +0.006226f, +0.007016f, -0.012031f, +0.007262f, + -0.022784f, -0.018352f, +0.006932f, +0.005257f, +0.005291f, -0.012935f, +0.001822f, +0.000522f, -0.004537f, +0.002376f, + +0.000423f, -0.012098f, +0.001181f, +0.000544f, +0.000884f, +0.017346f, +0.012489f, -0.004209f, -0.012583f, -0.000402f, + +0.005246f, -0.010863f, +0.003781f, +0.000229f, -0.003368f, +0.005246f, -0.010223f, -0.000779f, -0.003906f, +0.005584f, + +0.007814f, -0.002715f, +0.006893f, +0.014089f, -0.000233f, +0.005548f, +0.003548f, -0.000286f, +0.000730f, -0.008074f, + +0.001699f, +0.000446f, -0.003747f, +0.002418f, -0.002163f, -0.001382f, -0.003948f, -0.005746f, -0.004252f, +0.002258f, + -0.000749f, -0.005488f, +0.002416f, +0.002479f, +0.001478f, +0.000712f, +0.002446f, +0.001543f, +0.001608f, -0.000083f, + -0.002007f, +0.000949f, -0.001753f, +0.003297f, +0.001064f, -0.000843f + }, + { + -0.000633f, +0.082188f, +0.048760f, +0.019632f, -0.017441f, -0.012185f, -0.045362f, +0.033211f, +0.046861f, -0.012585f, + +0.004360f, -0.030819f, +0.023468f, +0.025510f, -0.027721f, -0.024079f, -0.052916f, +0.027297f, +0.033162f, +0.009518f, + -0.011374f, +0.009831f, -0.010468f, -0.008194f, +0.004808f, -0.018884f, +0.014603f, -0.028812f, -0.000211f, +0.014420f, + +0.025996f, +0.000904f, +0.010663f, -0.009868f, +0.002204f, +0.027928f, +0.018839f, +0.007836f, -0.012974f, +0.015666f, + -0.005101f, -0.000679f, -0.004716f, -0.034668f, -0.007855f, -0.004884f, -0.016476f, +0.001579f, -0.003905f, -0.002110f, + -0.004217f, +0.002836f, -0.005910f, +0.012871f, +0.007021f, +0.015379f, -0.003426f, -0.003500f, +0.008908f, -0.020345f, + -0.000759f, -0.009878f, +0.003412f, -0.014077f, -0.003098f, +0.002591f, +0.008189f, +0.000578f, +0.003295f, -0.005207f, + -0.000990f, -0.005295f, +0.003115f, +0.000478f, -0.001554f, -0.005935f, -0.003133f, +0.001822f, +0.000705f, -0.002703f, + -0.004657f, -0.001924f, +0.001114f, -0.000978f, -0.003733f, -0.009387f, -0.001607f, +0.005996f, +0.003084f, -0.000329f, + +0.002784f, -0.002209f, -0.002129f, -0.002315f, -0.000030f, -0.006689f + }, + { + -0.016943f, -0.090729f, +0.085556f, +0.053957f, -0.002613f, +0.022006f, +0.000939f, -0.053566f, +0.028333f, -0.011225f, + +0.001241f, +0.001394f, +0.002168f, +0.009110f, +0.003073f, +0.009243f, +0.032560f, +0.065612f, +0.002608f, +0.022439f, + +0.028054f, +0.008371f, -0.037395f, +0.012039f, -0.025103f, +0.012142f, +0.012665f, +0.003970f, +0.010219f, -0.010216f, + -0.013918f, +0.013853f, +0.005000f, -0.013590f, +0.004497f, -0.001230f, +0.003010f, -0.009149f, +0.005757f, -0.009027f, + +0.010926f, +0.003460f, +0.016835f, +0.014114f, +0.007280f, -0.002770f, -0.022847f, +0.001379f, -0.003756f, -0.004804f, + +0.007888f, +0.000071f, +0.002686f, -0.002363f, +0.013375f, -0.000237f, +0.000169f, +0.014090f, -0.006365f, -0.006978f, + -0.003995f, +0.001151f, +0.004938f, +0.006669f, +0.004054f, -0.001068f, +0.000367f, -0.000199f, +0.001694f, -0.002071f, + +0.003131f, +0.000020f, +0.003951f, -0.004189f, -0.003484f, -0.003453f, -0.005239f, +0.005992f, +0.000068f, -0.002283f, + +0.002626f, +0.003949f, -0.004534f, +0.001314f, +0.003123f, +0.002455f, -0.007052f, -0.003418f, +0.000452f, +0.001266f, + -0.002274f, -0.002218f, +0.005999f, +0.001854f, -0.002535f, +0.000091f + }, + { + +0.000033f, +0.102045f, +0.043645f, +0.002350f, -0.028552f, -0.028841f, -0.048966f, +0.037118f, -0.009384f, +0.003191f, + +0.044805f, +0.012357f, +0.017346f, -0.026996f, -0.015394f, -0.047681f, -0.020342f, -0.012786f, +0.004794f, -0.005811f, + -0.027102f, -0.020956f, -0.011366f, +0.031116f, +0.013367f, +0.002588f, +0.018276f, +0.002396f, -0.002242f, +0.017254f, + +0.011884f, +0.009059f, -0.014139f, +0.003768f, +0.000473f, -0.005948f, +0.003630f, -0.031937f, -0.013405f, +0.004003f, + -0.000864f, -0.025657f, +0.023404f, -0.003349f, -0.015876f, +0.012644f, -0.004422f, +0.001269f, -0.010534f, +0.002678f, + +0.006516f, -0.014638f, +0.006894f, -0.002403f, +0.006401f, +0.007271f, -0.008773f, +0.007737f, +0.009868f, -0.008148f, + -0.000620f, +0.002854f, -0.007012f, +0.003549f, +0.000967f, -0.009368f, +0.004110f, +0.000346f, -0.000081f, +0.005454f, + -0.001003f, +0.000914f, +0.010178f, +0.002794f, -0.004786f, +0.000250f, +0.006214f, +0.002368f, +0.006170f, -0.001266f, + +0.004588f, -0.003319f, +0.000325f, +0.002422f, +0.004334f, +0.000189f, -0.000962f, +0.006950f, +0.003820f, +0.000201f, + +0.002909f, -0.000344f, +0.000879f, -0.000758f, +0.000546f, -0.005139f + }, + { + -0.024284f, -0.223206f, +0.037317f, +0.063289f, +0.052465f, +0.041019f, +0.008409f, +0.002862f, -0.043321f, -0.004690f, + -0.064343f, +0.001365f, +0.002791f, -0.043344f, +0.015558f, -0.010789f, +0.009228f, +0.000521f, -0.009767f, -0.005770f, + +0.016872f, +0.020933f, -0.005034f, -0.013734f, -0.025611f, +0.006051f, +0.013147f, +0.020925f, +0.001304f, -0.030472f, + -0.024297f, -0.008688f, -0.009350f, +0.019448f, +0.009052f, -0.001193f, +0.018630f, -0.002733f, +0.010437f, -0.002388f, + -0.020802f, -0.002194f, +0.009713f, +0.000938f, +0.010130f, +0.005118f, -0.007277f, +0.014773f, -0.008043f, -0.014581f, + -0.012544f, -0.006333f, +0.012915f, +0.007133f, -0.010056f, +0.015554f, -0.009099f, +0.016380f, -0.000907f, +0.005543f, + -0.006839f, -0.000726f, -0.004014f, +0.000180f, -0.000753f, -0.003436f, +0.000198f, +0.002889f, +0.009349f, +0.008555f, + -0.006448f, +0.000573f, -0.002764f, -0.001837f, -0.001285f, -0.006676f, -0.006083f, +0.005393f, -0.001769f, +0.004199f, + -0.005701f, -0.003992f, -0.008274f, -0.006427f, +0.002390f, +0.002250f, -0.001011f, +0.003754f, +0.000952f, +0.001146f, + -0.000172f, +0.004184f, +0.004210f, +0.003103f, +0.001616f, -0.003751f + }, + { + -0.002932f, +0.052919f, +0.047219f, -0.000490f, -0.024037f, -0.034001f, -0.071996f, +0.041005f, -0.025998f, -0.030701f, + +0.013798f, -0.036311f, +0.025725f, +0.021322f, +0.024050f, -0.005789f, +0.039130f, -0.012558f, -0.027915f, -0.034758f, + +0.002694f, -0.024811f, +0.036765f, +0.026944f, -0.020713f, +0.010310f, +0.002021f, -0.028153f, +0.012715f, +0.007126f, + -0.018811f, +0.011754f, +0.005309f, -0.006874f, -0.028563f, +0.022301f, -0.008155f, -0.006463f, -0.007457f, -0.002199f, + -0.001840f, -0.003810f, +0.012105f, +0.004819f, +0.015545f, +0.009521f, +0.003408f, +0.009476f, -0.004297f, -0.007252f, + +0.006604f, +0.008925f, -0.005192f, +0.001975f, +0.003181f, -0.007491f, -0.010705f, -0.002736f, -0.005499f, -0.007492f, + -0.002105f, -0.005298f, +0.008634f, +0.006697f, +0.004462f, -0.008720f, -0.009375f, +0.003176f, -0.002495f, +0.007735f, + +0.007820f, +0.001562f, +0.000515f, -0.000296f, +0.003658f, +0.001739f, -0.001186f, +0.002915f, +0.002585f, +0.003299f, + +0.001596f, +0.001295f, +0.000364f, -0.001972f, +0.000521f, +0.000687f, -0.004676f, -0.000272f, +0.002218f, -0.001851f, + -0.002763f, -0.002747f, +0.000607f, +0.002785f, +0.001474f, -0.004432f + }, + { + -0.023631f, -0.213962f, +0.027535f, +0.022393f, +0.051924f, +0.006589f, -0.012179f, +0.002871f, -0.021780f, -0.000197f, + -0.029364f, +0.008522f, -0.040051f, +0.018047f, +0.005705f, +0.000597f, -0.022049f, -0.034058f, -0.032891f, -0.002640f, + +0.022029f, +0.027775f, -0.030585f, -0.004056f, -0.027018f, -0.019276f, +0.036675f, +0.015325f, -0.012532f, -0.005416f, + -0.012346f, +0.021477f, +0.005231f, -0.007126f, -0.016103f, +0.025494f, +0.006598f, +0.010278f, -0.005712f, +0.004479f, + -0.002062f, +0.006364f, -0.018989f, -0.013151f, -0.005207f, -0.004013f, -0.000146f, -0.001291f, -0.004322f, -0.005807f, + +0.009029f, +0.002328f, -0.007284f, +0.004808f, -0.003689f, -0.000337f, -0.015451f, -0.004066f, +0.002110f, +0.009638f, + -0.001699f, +0.004829f, +0.006107f, +0.001273f, -0.007343f, -0.012112f, +0.002609f, -0.004282f, -0.005854f, -0.009464f, + +0.006030f, -0.007585f, +0.004678f, -0.002966f, -0.002705f, -0.000390f, -0.003388f, -0.002970f, +0.000247f, -0.006616f, + -0.000990f, -0.004819f, -0.002281f, -0.004609f, +0.001736f, +0.003352f, +0.003851f, +0.000245f, -0.000413f, -0.003137f, + +0.000224f, +0.002396f, +0.000992f, -0.004449f, +0.002995f, -0.002844f + } + }, + { + { + +0.004321f, +0.053914f, +0.070227f, -0.043621f, +0.040426f, +0.006642f, +0.017140f, -0.000059f, -0.004976f, -0.000420f, + +0.019670f, -0.021323f, +0.031517f, +0.029682f, -0.024665f, +0.001095f, -0.007585f, +0.002040f, +0.012807f, -0.018304f, + -0.009669f, +0.025349f, +0.043196f, -0.017436f, -0.009303f, -0.017048f, -0.004253f, +0.007567f, +0.013073f, -0.002208f, + -0.007856f, -0.021014f, -0.014202f, +0.011682f, -0.003206f, -0.010536f, -0.005873f, -0.012495f, -0.004106f, -0.017846f, + -0.001869f, +0.012476f, -0.003338f, +0.000898f, -0.003351f, -0.007277f, +0.008533f, +0.003814f, +0.013344f, +0.000013f, + +0.000845f, -0.001932f, +0.005752f, +0.000488f, -0.001516f, -0.002337f, -0.007410f, +0.001861f, -0.001140f, +0.004946f, + +0.001062f, -0.009567f, -0.000507f, +0.003416f, -0.006419f, -0.003406f, +0.000819f, -0.001973f, -0.001069f, -0.006550f, + +0.007555f, +0.006583f, -0.000291f, +0.000146f, +0.003243f, -0.000609f, -0.005467f, -0.004913f, +0.000784f, -0.002886f, + -0.000635f, -0.000039f, -0.003224f, -0.000216f, +0.000205f, -0.003937f, -0.001853f, +0.002322f, +0.001139f, +0.002995f, + +0.001389f, -0.000351f, -0.000200f, -0.002210f, -0.000836f, +0.001040f + }, + { + +0.001404f, +0.202612f, -0.042440f, +0.042075f, +0.040288f, +0.012624f, -0.009198f, -0.001598f, +0.012517f, +0.009249f, + -0.004603f, -0.001052f, -0.002570f, +0.002424f, +0.032080f, -0.019415f, -0.019799f, -0.003964f, -0.002234f, -0.004261f, + -0.027784f, -0.005372f, -0.005935f, -0.010948f, +0.022820f, -0.002299f, +0.001537f, +0.003022f, -0.014020f, +0.008343f, + +0.015405f, +0.003231f, +0.008117f, +0.012929f, +0.007872f, +0.009931f, -0.006384f, +0.001512f, -0.021693f, -0.012426f, + +0.005484f, -0.006434f, +0.001723f, +0.001663f, +0.005521f, +0.002866f, +0.000973f, +0.002400f, +0.003538f, -0.003656f, + +0.006753f, -0.008159f, -0.001383f, +0.001717f, -0.000288f, +0.005608f, -0.005822f, -0.001478f, -0.003612f, -0.004677f, + -0.003276f, +0.003143f, -0.006166f, +0.011693f, +0.005600f, -0.002922f, +0.001373f, +0.000051f, -0.008068f, +0.005697f, + +0.000673f, +0.005470f, -0.001595f, +0.002558f, +0.001276f, -0.001123f, -0.002280f, -0.000423f, +0.002044f, -0.002254f, + +0.005768f, -0.002566f, -0.000582f, -0.004826f, +0.005662f, +0.003137f, -0.000383f, -0.001742f, -0.001549f, +0.002319f, + -0.001765f, +0.002823f, +0.000973f, +0.001441f, -0.002637f, -0.001701f + }, + { + -0.003738f, +0.192876f, +0.032853f, -0.010317f, +0.085002f, +0.010323f, -0.010316f, -0.014287f, +0.009075f, +0.018472f, + -0.004150f, -0.020018f, -0.008771f, -0.003165f, +0.006240f, +0.001989f, +0.017927f, +0.011792f, +0.003424f, +0.004040f, + +0.010452f, -0.016447f, +0.000277f, -0.014527f, +0.003329f, -0.000882f, -0.028772f, -0.033206f, -0.005893f, +0.020099f, + +0.001834f, -0.001162f, -0.001330f, +0.010529f, +0.015824f, -0.000676f, +0.011731f, +0.013850f, +0.014365f, -0.003119f, + -0.007439f, +0.007710f, +0.000391f, -0.000930f, -0.009413f, -0.005542f, +0.006061f, -0.005673f, -0.005941f, +0.004577f, + +0.002858f, +0.003853f, -0.006141f, +0.004428f, -0.002424f, -0.000921f, +0.004220f, +0.005460f, +0.010321f, -0.007394f, + +0.004027f, +0.005359f, +0.000558f, -0.003956f, +0.004071f, -0.003201f, -0.004122f, +0.003092f, +0.000218f, +0.000760f, + -0.000107f, -0.001355f, -0.001785f, +0.000397f, -0.003019f, -0.000860f, -0.001309f, +0.002932f, +0.011788f, +0.003408f, + +0.002505f, +0.003143f, +0.001253f, +0.000025f, -0.005133f, -0.001552f, -0.003305f, -0.001395f, -0.001231f, +0.003274f, + +0.001087f, -0.000923f, -0.003768f, -0.000567f, +0.000649f, +0.001732f + }, + { + -0.000732f, +0.077533f, +0.019690f, -0.027300f, -0.018640f, -0.003579f, +0.002577f, -0.001561f, -0.003751f, +0.035189f, + +0.011266f, -0.010551f, +0.001022f, -0.001342f, -0.020076f, +0.019502f, +0.020950f, +0.018138f, -0.044158f, -0.007474f, + +0.007178f, -0.013682f, +0.015086f, +0.007612f, +0.017129f, -0.003447f, -0.016675f, -0.012533f, -0.010560f, -0.017076f, + +0.011157f, -0.000261f, -0.010697f, +0.004924f, -0.017230f, -0.003620f, -0.011755f, +0.005374f, +0.002166f, +0.009919f, + +0.007996f, -0.003070f, +0.001867f, +0.002955f, -0.001957f, -0.002559f, -0.014315f, +0.007213f, -0.001207f, +0.005798f, + +0.006749f, -0.018098f, +0.002680f, +0.008346f, -0.005970f, +0.003758f, -0.003791f, -0.002991f, -0.007425f, +0.007453f, + +0.004194f, +0.000966f, +0.004115f, +0.005305f, +0.011083f, -0.005834f, -0.001052f, -0.005206f, -0.006001f, +0.003852f, + +0.007096f, -0.001618f, +0.002814f, +0.002228f, +0.003802f, -0.002883f, +0.000290f, +0.000830f, +0.002850f, -0.001793f, + -0.001194f, +0.000345f, +0.002560f, -0.000486f, -0.002107f, +0.001644f, +0.000938f, -0.000070f, +0.001878f, +0.001000f, + +0.000796f, -0.003144f, +0.000896f, -0.000250f, +0.000683f, +0.000880f + }, + { + +0.024130f, -0.114797f, -0.070598f, +0.081480f, +0.037148f, +0.026473f, -0.021092f, +0.012851f, -0.009915f, -0.003073f, + -0.018367f, -0.019361f, +0.008026f, -0.006310f, +0.001784f, -0.023030f, +0.044276f, -0.003089f, -0.020861f, -0.022160f, + -0.031876f, +0.007702f, +0.016020f, +0.002359f, +0.014321f, -0.006915f, +0.015495f, +0.011918f, +0.011604f, +0.008844f, + -0.003610f, -0.007191f, +0.002918f, +0.008963f, -0.003311f, +0.011779f, -0.002543f, +0.003964f, +0.003999f, +0.013222f, + +0.000658f, -0.002984f, -0.005895f, -0.000374f, +0.002951f, -0.008446f, +0.003554f, +0.008426f, +0.009754f, -0.004118f, + -0.003316f, -0.004508f, +0.007181f, +0.000474f, -0.006587f, +0.006844f, -0.001511f, -0.005132f, -0.003987f, +0.004498f, + -0.000381f, -0.000929f, +0.001587f, -0.001410f, -0.000199f, +0.003069f, +0.007892f, -0.005159f, -0.004704f, -0.003745f, + -0.005388f, -0.003770f, +0.007413f, -0.001964f, +0.009141f, +0.001140f, -0.002234f, +0.006816f, +0.006514f, +0.003038f, + -0.000697f, +0.002548f, -0.002241f, +0.002036f, -0.003800f, -0.001234f, +0.004082f, -0.000567f, +0.004820f, +0.000509f, + +0.000146f, +0.001813f, +0.002022f, +0.000415f, -0.001923f, +0.001246f + }, + { + +0.005397f, -0.041378f, +0.104895f, -0.030359f, -0.035936f, +0.001265f, +0.001423f, +0.001481f, -0.002751f, +0.008702f, + +0.004326f, -0.015264f, -0.010821f, +0.002652f, -0.032210f, -0.004588f, +0.011177f, -0.020715f, -0.007297f, -0.000396f, + -0.012409f, -0.009549f, +0.000000f, -0.035048f, +0.021117f, -0.014946f, +0.001528f, -0.003568f, +0.006234f, -0.008428f, + -0.018761f, -0.017378f, -0.000225f, +0.003401f, -0.016052f, -0.002899f, -0.004890f, -0.012130f, +0.003582f, +0.004717f, + +0.006950f, -0.014722f, +0.011250f, -0.004198f, +0.003078f, +0.011121f, -0.005651f, -0.007370f, -0.003614f, +0.013448f, + -0.000961f, +0.010947f, -0.009922f, +0.003742f, +0.006057f, +0.007461f, -0.001792f, -0.004469f, -0.012353f, +0.003948f, + +0.000361f, -0.007041f, -0.005357f, -0.000495f, -0.007863f, +0.002966f, +0.003114f, +0.011557f, -0.002112f, -0.009488f, + +0.001481f, +0.000333f, -0.006428f, -0.004755f, -0.008993f, +0.003119f, +0.001767f, -0.003300f, -0.002591f, +0.000337f, + +0.002670f, -0.006812f, +0.000204f, +0.008286f, -0.000813f, +0.002605f, -0.003225f, +0.002017f, +0.000352f, +0.001225f, + +0.001804f, -0.003582f, +0.001999f, -0.006066f, +0.001079f, +0.002094f + }, + { + +0.026756f, -0.150037f, -0.088445f, +0.134905f, +0.044992f, +0.009202f, +0.004801f, -0.003703f, +0.012814f, -0.019796f, + -0.012653f, +0.026007f, +0.006770f, -0.001287f, +0.027595f, -0.017305f, -0.026466f, -0.006647f, -0.015578f, -0.009289f, + -0.009770f, -0.019482f, -0.015026f, +0.000224f, -0.004476f, +0.003594f, -0.000272f, +0.002927f, +0.002999f, +0.013749f, + -0.001428f, -0.008273f, -0.002814f, +0.013355f, +0.005024f, -0.015830f, +0.004083f, -0.014448f, +0.009483f, +0.002492f, + +0.005243f, -0.005318f, +0.000354f, -0.003664f, -0.003631f, -0.005962f, -0.003470f, +0.005552f, +0.003536f, +0.007630f, + -0.018407f, -0.002872f, +0.006794f, -0.003804f, +0.001791f, +0.005345f, -0.000423f, +0.012406f, +0.013029f, +0.000032f, + +0.004580f, -0.005694f, -0.001438f, +0.005730f, -0.003617f, -0.005708f, +0.000535f, +0.002215f, -0.000814f, -0.004637f, + +0.004577f, +0.001222f, -0.000830f, +0.006053f, +0.002644f, -0.006597f, -0.000004f, +0.003940f, +0.000390f, -0.001516f, + +0.003165f, -0.002668f, -0.000628f, -0.000762f, -0.002055f, -0.000856f, -0.001133f, +0.003348f, -0.003888f, +0.000508f, + +0.001525f, +0.000186f, +0.002632f, -0.002987f, +0.002142f, -0.000581f + }, + { + +0.004805f, -0.075133f, +0.095286f, -0.023720f, -0.034003f, -0.014303f, +0.009346f, +0.011973f, +0.005667f, +0.006888f, + +0.007557f, +0.008500f, -0.028944f, +0.030826f, +0.000145f, +0.008449f, +0.015027f, +0.016640f, -0.010198f, -0.013519f, + -0.007359f, -0.009585f, -0.005426f, +0.014209f, -0.009076f, -0.010839f, +0.017982f, -0.017595f, +0.025975f, -0.021533f, + +0.032545f, -0.000272f, -0.026021f, +0.001272f, -0.004301f, -0.020776f, +0.011566f, -0.009135f, +0.002110f, +0.001859f, + +0.007556f, -0.003226f, -0.001812f, -0.007344f, +0.002927f, +0.004491f, -0.005740f, +0.002137f, -0.009661f, +0.004341f, + +0.003702f, -0.003229f, +0.010267f, +0.007147f, +0.007066f, +0.003526f, -0.002295f, -0.007314f, +0.001675f, -0.008600f, + -0.000579f, -0.007268f, +0.001743f, -0.003111f, +0.009945f, -0.010111f, +0.000556f, -0.001200f, +0.001869f, +0.005317f, + +0.006611f, +0.017747f, +0.001903f, +0.000197f, -0.001245f, -0.000041f, -0.000570f, -0.001455f, +0.001764f, +0.002215f, + -0.000622f, +0.000634f, +0.000200f, -0.005149f, -0.001290f, -0.002031f, -0.000311f, +0.001363f, -0.003725f, -0.003192f, + +0.001199f, +0.001746f, -0.000946f, +0.002252f, +0.002949f, -0.001050f + }, + { + +0.026323f, -0.132667f, -0.079924f, +0.146226f, +0.060814f, +0.018220f, -0.013642f, +0.008330f, -0.003740f, +0.031773f, + +0.014619f, -0.012688f, -0.008770f, -0.007333f, -0.013782f, -0.037298f, +0.025655f, -0.009435f, +0.000293f, +0.021691f, + -0.014192f, -0.023026f, +0.001271f, -0.029793f, +0.001736f, -0.004256f, +0.005236f, -0.004142f, -0.004361f, +0.001894f, + -0.011909f, -0.011089f, +0.008801f, +0.001918f, +0.001613f, -0.010844f, +0.002200f, -0.000318f, +0.006861f, +0.002337f, + -0.003029f, -0.016362f, +0.004510f, +0.001324f, +0.009695f, +0.005650f, +0.003024f, +0.013916f, -0.021660f, +0.000440f, + -0.002577f, +0.002187f, +0.005373f, -0.006808f, -0.003001f, +0.001974f, -0.007142f, -0.001394f, -0.003693f, +0.009230f, + -0.000148f, -0.003242f, +0.008835f, +0.007323f, +0.002040f, +0.002694f, +0.002108f, +0.003683f, -0.005682f, -0.003422f, + +0.003023f, -0.000800f, -0.005954f, +0.004664f, +0.002240f, -0.002295f, -0.006517f, -0.004769f, -0.005127f, +0.004631f, + -0.002705f, +0.000619f, -0.003447f, +0.002990f, -0.000189f, +0.000523f, +0.000399f, +0.002833f, -0.002152f, +0.003652f, + +0.000245f, -0.004143f, +0.000479f, +0.000881f, +0.004260f, -0.002754f + }, + { + -0.001718f, +0.134150f, -0.008816f, +0.013269f, -0.001244f, -0.041296f, +0.002181f, +0.031839f, +0.015639f, +0.000134f, + +0.004179f, -0.009358f, -0.005626f, +0.030049f, -0.030780f, -0.018819f, -0.019812f, -0.003249f, +0.037288f, +0.000976f, + -0.001154f, -0.005032f, +0.001591f, -0.005541f, +0.009526f, -0.014606f, +0.005417f, -0.019642f, +0.016185f, -0.005901f, + +0.024996f, +0.002813f, +0.009207f, -0.003164f, -0.008630f, +0.018128f, +0.020157f, +0.011682f, -0.008626f, +0.002625f, + +0.008633f, -0.008304f, -0.004122f, -0.017536f, -0.020417f, +0.006680f, -0.005452f, -0.009377f, +0.004829f, -0.007608f, + -0.001925f, +0.006763f, -0.011599f, +0.001900f, +0.022401f, +0.008668f, -0.005743f, +0.000429f, -0.005111f, -0.005363f, + -0.008324f, -0.004519f, +0.005762f, -0.005223f, -0.012381f, -0.002584f, +0.006545f, +0.002682f, -0.000485f, +0.006592f, + -0.008175f, -0.001470f, -0.002334f, +0.002766f, +0.003623f, -0.006995f, -0.000793f, +0.000495f, -0.002188f, -0.000923f, + -0.003996f, -0.004496f, +0.001341f, -0.000238f, -0.003911f, -0.004030f, -0.001553f, +0.003343f, +0.003692f, +0.001317f, + +0.001841f, -0.003450f, -0.000517f, -0.002465f, -0.001486f, -0.003387f + }, + { + +0.012721f, -0.008627f, -0.003767f, +0.042753f, -0.011710f, -0.019395f, +0.088755f, -0.035649f, -0.016319f, -0.033758f, + +0.028400f, +0.001539f, -0.002913f, +0.020676f, +0.007217f, +0.000252f, +0.027777f, +0.033256f, +0.045715f, +0.013819f, + +0.025088f, -0.009499f, -0.010396f, -0.003629f, -0.011775f, -0.001053f, +0.007717f, +0.008052f, +0.021379f, -0.013792f, + -0.010606f, +0.015825f, +0.004397f, -0.003720f, -0.003268f, +0.004786f, -0.014910f, +0.006112f, +0.009035f, -0.011433f, + +0.011781f, +0.011193f, +0.005875f, +0.028115f, -0.000705f, -0.003338f, -0.013553f, -0.010364f, +0.003403f, +0.006547f, + -0.008289f, -0.001686f, -0.002782f, +0.015208f, +0.006001f, -0.003247f, +0.002767f, +0.005414f, -0.000592f, -0.012017f, + -0.005447f, -0.000864f, +0.013500f, -0.003662f, +0.002212f, +0.004420f, -0.000090f, -0.001816f, +0.005006f, -0.003789f, + -0.001755f, +0.005703f, -0.003384f, -0.002232f, -0.002090f, -0.007192f, -0.000337f, +0.004027f, -0.003301f, +0.003489f, + -0.000185f, -0.000983f, +0.002565f, -0.004770f, +0.006099f, -0.003356f, -0.000879f, -0.003491f, +0.000570f, +0.002099f, + -0.002555f, +0.003552f, -0.001031f, +0.002759f, -0.002965f, +0.000732f + }, + { + -0.000037f, +0.111740f, +0.013164f, +0.000290f, -0.009778f, -0.013178f, -0.034187f, +0.011712f, -0.000027f, +0.003586f, + +0.015235f, +0.028557f, -0.017692f, -0.008294f, +0.013152f, -0.027725f, -0.050000f, -0.007112f, +0.000992f, -0.003848f, + -0.032505f, -0.019660f, -0.009361f, +0.038317f, +0.014370f, +0.008867f, +0.002026f, -0.018809f, +0.027116f, +0.017156f, + +0.029046f, -0.001004f, -0.002208f, -0.024314f, -0.004183f, +0.006591f, -0.008341f, -0.036756f, +0.001451f, +0.000955f, + -0.005635f, -0.018408f, -0.001204f, +0.005772f, -0.007373f, +0.015373f, -0.007035f, -0.001714f, -0.003510f, -0.008495f, + +0.003976f, -0.002719f, +0.001481f, -0.003303f, +0.006744f, +0.007155f, -0.002937f, +0.006129f, +0.001423f, +0.004594f, + -0.012148f, +0.004510f, +0.000519f, -0.000017f, -0.000603f, -0.009500f, -0.003429f, +0.003007f, +0.001968f, -0.002434f, + +0.001893f, +0.003921f, +0.009184f, -0.003214f, +0.000120f, +0.000076f, +0.005644f, +0.004345f, -0.000154f, +0.005242f, + +0.002871f, -0.004191f, +0.000371f, +0.004037f, +0.000378f, +0.002473f, +0.002877f, +0.002602f, +0.003593f, -0.002462f, + +0.001944f, +0.000802f, +0.002274f, -0.001753f, -0.000064f, -0.003456f + }, + { + +0.014898f, -0.235522f, -0.003958f, +0.050408f, +0.041201f, +0.008810f, +0.068310f, -0.024066f, -0.010810f, -0.028775f, + -0.059863f, +0.021873f, -0.005468f, -0.006487f, -0.003824f, -0.018420f, +0.014775f, -0.016760f, -0.001273f, -0.008338f, + +0.021560f, +0.014015f, +0.021056f, -0.023360f, -0.017611f, -0.003652f, +0.009718f, +0.026735f, -0.015173f, -0.017100f, + -0.023117f, +0.010874f, -0.014738f, +0.007141f, +0.006680f, -0.009307f, +0.024614f, -0.003563f, +0.008304f, -0.005208f, + -0.008753f, -0.002542f, +0.003595f, +0.007942f, +0.005775f, +0.002137f, -0.006934f, +0.013885f, -0.012576f, -0.010867f, + -0.002311f, -0.008668f, +0.014730f, -0.000988f, +0.001383f, +0.003736f, -0.004241f, +0.010918f, +0.003796f, -0.004520f, + -0.000989f, -0.003714f, +0.002527f, -0.001951f, -0.004186f, +0.005296f, -0.000588f, +0.006161f, -0.001768f, +0.001399f, + +0.002288f, -0.006056f, -0.000127f, -0.001377f, -0.005459f, -0.000542f, -0.010269f, +0.004704f, -0.003646f, +0.001985f, + +0.000269f, -0.008089f, -0.004638f, -0.007263f, -0.000054f, +0.003325f, +0.004343f, -0.000844f, +0.005318f, -0.000251f, + -0.000022f, +0.004240f, +0.000453f, +0.003439f, -0.000514f, -0.002699f + }, + { + -0.000446f, +0.120440f, -0.014049f, -0.002632f, -0.013834f, -0.036474f, -0.048834f, +0.014829f, -0.034502f, -0.004332f, + +0.003828f, -0.013295f, +0.014497f, -0.004259f, +0.014119f, +0.046080f, +0.004778f, -0.017647f, -0.019912f, -0.020270f, + -0.034335f, +0.016998f, -0.019424f, +0.046940f, -0.000350f, -0.007187f, -0.002976f, -0.022017f, +0.011991f, +0.026022f, + -0.010042f, -0.011777f, +0.009236f, -0.026214f, -0.008509f, +0.010801f, -0.014019f, +0.007363f, -0.008644f, -0.011304f, + -0.004800f, +0.004475f, +0.006550f, +0.014899f, +0.018823f, +0.009798f, -0.006354f, +0.003810f, -0.001097f, -0.003984f, + +0.010197f, +0.002791f, +0.001087f, +0.005007f, -0.001127f, -0.008972f, -0.005937f, -0.004143f, -0.007425f, -0.006322f, + +0.005967f, -0.010333f, +0.007644f, +0.005781f, +0.000965f, -0.006443f, -0.007022f, +0.005973f, -0.003910f, +0.007771f, + +0.009589f, -0.002729f, +0.000704f, +0.007161f, -0.002664f, -0.001023f, +0.002193f, +0.002858f, +0.002868f, +0.000323f, + -0.003983f, +0.006578f, +0.000289f, -0.003605f, +0.000965f, +0.003756f, -0.003504f, -0.002904f, +0.002559f, -0.003556f, + -0.002010f, -0.001951f, -0.000093f, +0.002263f, +0.000390f, -0.001459f + }, + { + +0.015533f, -0.217392f, -0.029264f, +0.039516f, -0.005477f, -0.011817f, +0.065533f, +0.001464f, -0.015145f, -0.023538f, + -0.028276f, -0.006198f, -0.032400f, +0.013709f, -0.024705f, +0.029803f, -0.005442f, -0.055178f, -0.026604f, +0.026836f, + +0.012067f, -0.001128f, -0.007017f, -0.017517f, -0.029885f, +0.000470f, +0.028084f, +0.014413f, -0.013600f, -0.019257f, + -0.002030f, +0.022797f, +0.022735f, -0.010051f, -0.003418f, +0.002729f, +0.015448f, -0.001654f, +0.000443f, +0.001639f, + -0.001268f, -0.009343f, +0.000842f, -0.023260f, -0.011952f, +0.013001f, -0.003874f, -0.012571f, -0.005670f, -0.006264f, + +0.007368f, +0.002857f, -0.005564f, +0.006202f, -0.000236f, -0.006623f, -0.012341f, -0.008381f, +0.008210f, +0.013582f, + -0.008578f, +0.009904f, +0.005580f, -0.001637f, -0.001120f, -0.014548f, -0.002287f, +0.001782f, -0.008710f, -0.003526f, + -0.005416f, +0.000984f, +0.001080f, -0.007568f, +0.000957f, -0.000622f, +0.000077f, -0.002593f, +0.001455f, -0.007941f, + -0.004242f, -0.000045f, -0.002966f, -0.003038f, -0.002868f, +0.005184f, +0.003547f, -0.000916f, +0.002398f, -0.003022f, + +0.000903f, +0.001653f, -0.000354f, -0.002814f, +0.000395f, -0.002002f + } + }, + { + { + -0.003573f, -0.081733f, -0.033613f, -0.048322f, +0.047765f, -0.011505f, -0.004872f, -0.006668f, +0.009166f, +0.008773f, + +0.017553f, -0.022748f, +0.011597f, -0.007788f, -0.044793f, -0.002946f, -0.041352f, -0.015513f, +0.008628f, -0.005137f, + -0.003417f, -0.004172f, +0.011452f, -0.004734f, +0.009196f, -0.001917f, -0.001851f, +0.001243f, +0.000542f, +0.011452f, + +0.015705f, -0.017771f, -0.003296f, +0.018516f, -0.000468f, -0.000935f, -0.004132f, +0.000067f, -0.000902f, -0.016444f, + +0.000638f, +0.006491f, -0.000600f, +0.004425f, +0.000977f, +0.004082f, +0.004180f, -0.023381f, +0.006404f, +0.002569f, + -0.008485f, -0.011973f, +0.001698f, -0.010077f, -0.003704f, +0.010446f, -0.001620f, -0.001600f, -0.001360f, -0.007403f, + -0.001193f, -0.002957f, -0.000488f, +0.003924f, -0.006726f, -0.001584f, +0.006027f, +0.006144f, +0.007628f, -0.001957f, + +0.001880f, +0.004030f, +0.002932f, -0.000348f, +0.000102f, -0.001361f, +0.003151f, -0.001057f, +0.000222f, -0.004455f, + -0.000721f, +0.002124f, +0.001844f, +0.004723f, +0.004218f, +0.000486f, +0.002231f, +0.002131f, -0.000116f, +0.000960f, + +0.001022f, +0.000533f, +0.003638f, +0.001681f, -0.000675f, +0.000127f + }, + { + +0.001325f, +0.258823f, -0.023265f, -0.066995f, -0.050062f, +0.001583f, +0.007162f, +0.011001f, +0.017679f, +0.013444f, + -0.000383f, +0.005400f, -0.007168f, +0.002107f, +0.030082f, -0.021303f, -0.014787f, +0.009969f, -0.010270f, -0.008774f, + -0.008140f, +0.008949f, +0.013683f, +0.001589f, +0.006284f, -0.006116f, +0.001496f, -0.001804f, -0.007914f, +0.006815f, + -0.004879f, -0.001371f, +0.006140f, -0.000221f, -0.009389f, -0.001773f, -0.003034f, +0.009226f, -0.001197f, +0.002465f, + +0.006257f, -0.003219f, -0.000156f, +0.005315f, -0.004608f, -0.007229f, -0.007910f, -0.007853f, +0.003950f, -0.004033f, + +0.002117f, -0.000781f, +0.000469f, -0.001346f, -0.000409f, -0.000068f, -0.006826f, -0.004326f, +0.000202f, -0.004211f, + -0.004835f, +0.007414f, +0.000440f, +0.009932f, +0.000985f, -0.006046f, -0.004355f, -0.001277f, -0.004188f, +0.008457f, + +0.000311f, +0.002304f, -0.007723f, -0.001404f, -0.000116f, -0.004000f, -0.005926f, -0.003495f, -0.000791f, -0.001529f, + +0.007104f, -0.003328f, +0.000034f, -0.006690f, +0.005657f, +0.002708f, +0.000115f, +0.001984f, +0.000280f, +0.000439f, + -0.004128f, +0.001724f, +0.000421f, +0.001923f, -0.001069f, -0.000385f + }, + { + +0.001785f, +0.108612f, -0.081131f, -0.111231f, +0.011833f, +0.001847f, +0.000748f, -0.001536f, +0.010987f, -0.000600f, + +0.003293f, -0.003315f, -0.010173f, -0.010070f, +0.002274f, -0.006817f, -0.001416f, +0.003580f, -0.000532f, -0.006772f, + +0.005847f, -0.022992f, -0.001714f, -0.012367f, +0.017074f, +0.012387f, -0.003752f, -0.014853f, -0.013834f, +0.016053f, + -0.006804f, -0.005026f, +0.004464f, +0.001606f, -0.002830f, -0.013943f, -0.004392f, +0.007239f, +0.006226f, -0.003479f, + +0.007111f, +0.009779f, -0.003280f, -0.001748f, -0.004537f, +0.003237f, +0.012180f, +0.001287f, -0.000203f, +0.010777f, + +0.006613f, +0.005059f, +0.005097f, +0.013998f, +0.007323f, +0.000385f, -0.004334f, -0.001898f, +0.008347f, -0.009771f, + -0.000800f, +0.000770f, +0.001646f, -0.000206f, +0.003864f, -0.000962f, +0.000807f, +0.005538f, -0.003132f, +0.004340f, + +0.001570f, +0.001393f, +0.000773f, +0.000171f, -0.000552f, +0.003152f, -0.001175f, +0.004212f, +0.008854f, -0.002093f, + -0.000404f, +0.001185f, -0.002581f, -0.001292f, -0.003088f, +0.001628f, +0.000077f, +0.001595f, +0.000798f, +0.001512f, + +0.002448f, +0.002498f, -0.000129f, +0.000235f, -0.001331f, +0.002435f + }, + { + -0.001320f, +0.026169f, -0.006234f, -0.013365f, +0.007838f, -0.005023f, -0.004119f, -0.001316f, -0.015499f, -0.006531f, + -0.007196f, +0.012125f, +0.008794f, -0.007501f, -0.004983f, -0.001045f, -0.008534f, +0.031487f, -0.033270f, -0.003853f, + +0.005365f, -0.022586f, +0.000962f, -0.011395f, -0.008865f, -0.006712f, +0.011636f, +0.006953f, -0.009030f, -0.017142f, + +0.001029f, +0.009818f, -0.008089f, +0.008143f, -0.008586f, +0.002942f, -0.004568f, +0.005127f, -0.011579f, +0.011939f, + +0.010797f, -0.012906f, +0.005816f, +0.003487f, -0.000342f, +0.000935f, -0.011898f, +0.004502f, -0.000313f, +0.012895f, + +0.010946f, -0.013571f, +0.007833f, +0.007803f, -0.011327f, +0.000183f, -0.004010f, -0.001010f, -0.008922f, +0.005820f, + +0.004211f, +0.001779f, +0.001608f, -0.000448f, +0.001318f, -0.005604f, +0.004396f, -0.005379f, -0.002523f, -0.000674f, + +0.000661f, -0.000524f, +0.002889f, +0.000787f, +0.002432f, -0.006242f, -0.001116f, +0.000787f, +0.004346f, -0.001130f, + -0.001672f, +0.000179f, +0.002715f, +0.000142f, -0.002718f, -0.001225f, +0.000399f, -0.001765f, -0.001392f, -0.001090f, + -0.000180f, -0.003002f, -0.000128f, -0.002313f, -0.000974f, -0.000921f + }, + { + -0.026569f, +0.002897f, +0.047517f, +0.015956f, -0.015614f, +0.016296f, -0.006972f, +0.028840f, -0.007182f, +0.028224f, + -0.006085f, -0.023276f, +0.004731f, -0.018243f, -0.004767f, -0.023180f, +0.026704f, +0.003335f, +0.016675f, -0.003237f, + -0.007670f, +0.010186f, +0.012429f, +0.004075f, +0.006531f, -0.005076f, +0.012776f, -0.002601f, -0.009714f, -0.011737f, + -0.004722f, +0.007143f, -0.001510f, +0.006030f, -0.016091f, -0.003156f, -0.011550f, -0.000682f, -0.004640f, +0.010333f, + -0.006114f, -0.007617f, -0.003055f, +0.007963f, +0.011570f, -0.003138f, -0.007478f, -0.006880f, +0.013535f, -0.001569f, + +0.009029f, +0.007101f, -0.004633f, -0.007309f, -0.007122f, +0.008654f, +0.002863f, -0.003118f, -0.005377f, -0.002418f, + -0.001214f, -0.001099f, -0.000535f, -0.000784f, -0.000166f, -0.006715f, +0.002057f, -0.004295f, -0.001820f, +0.002056f, + +0.004983f, +0.002565f, +0.009139f, -0.005805f, +0.001448f, -0.002858f, +0.000636f, +0.004393f, -0.000903f, -0.003407f, + -0.004701f, +0.002025f, -0.001598f, +0.002123f, -0.000001f, -0.000174f, +0.002660f, -0.002560f, +0.003635f, -0.000878f, + +0.001074f, +0.000726f, +0.000751f, +0.002078f, +0.000533f, +0.000186f + }, + { + +0.001069f, -0.085750f, +0.075918f, -0.005048f, +0.013694f, -0.002220f, -0.004348f, +0.007877f, -0.004145f, +0.004188f, + +0.005077f, +0.002977f, -0.005913f, +0.013373f, -0.019508f, -0.015649f, +0.011829f, -0.008588f, -0.007899f, -0.013484f, + -0.039278f, -0.026026f, +0.004474f, -0.042905f, +0.031716f, -0.000542f, -0.018453f, -0.002562f, +0.012390f, +0.026115f, + +0.006057f, -0.010971f, -0.001290f, +0.002061f, -0.014363f, +0.010857f, -0.004480f, -0.002023f, +0.023329f, +0.002886f, + +0.000102f, -0.008346f, +0.013612f, -0.001809f, +0.002565f, +0.011109f, -0.002537f, +0.000631f, -0.002949f, +0.015572f, + -0.006125f, +0.007126f, -0.010257f, -0.002577f, -0.005378f, -0.003610f, -0.003097f, +0.000584f, -0.005983f, +0.012886f, + +0.005402f, -0.004684f, -0.003283f, +0.000748f, -0.007821f, +0.006472f, +0.001524f, +0.010605f, +0.000772f, -0.006851f, + -0.000468f, -0.003691f, -0.000247f, +0.007473f, -0.001561f, +0.001220f, -0.002187f, -0.005675f, -0.003228f, -0.002158f, + +0.005769f, -0.004081f, -0.002473f, +0.003575f, -0.007005f, +0.000874f, +0.000366f, +0.002840f, -0.000085f, -0.002130f, + -0.000534f, -0.004214f, +0.001947f, -0.003388f, +0.001976f, +0.001537f + }, + { + -0.029805f, -0.026883f, +0.055853f, +0.065978f, -0.019727f, +0.008894f, +0.001145f, +0.010318f, +0.032826f, -0.007957f, + -0.023149f, +0.006535f, -0.000327f, -0.010631f, +0.024674f, -0.005443f, -0.016352f, -0.005469f, +0.000372f, -0.002550f, + -0.015086f, -0.009734f, +0.002058f, +0.006687f, -0.005374f, +0.020508f, +0.010790f, +0.004183f, +0.004441f, +0.010260f, + -0.001045f, -0.005620f, -0.014370f, -0.002101f, -0.000325f, -0.014970f, +0.004411f, -0.004681f, +0.013042f, -0.000819f, + +0.000792f, -0.000050f, +0.004896f, -0.003677f, +0.009011f, +0.002009f, -0.006840f, +0.002564f, -0.005307f, +0.005096f, + -0.010710f, +0.001513f, +0.000584f, -0.007483f, +0.000070f, -0.001698f, -0.008995f, +0.008781f, +0.012900f, -0.001173f, + -0.005840f, -0.008554f, +0.009403f, +0.008390f, -0.002092f, -0.002557f, -0.000761f, +0.002041f, +0.000374f, -0.000649f, + +0.002804f, +0.001267f, +0.000415f, +0.006803f, +0.003276f, -0.004921f, +0.000101f, +0.000946f, -0.000034f, +0.000963f, + +0.005499f, -0.001436f, +0.000337f, -0.000217f, -0.000215f, -0.000128f, +0.000295f, +0.003823f, +0.000061f, +0.001925f, + -0.000273f, +0.000091f, +0.002243f, -0.003175f, +0.002820f, -0.001711f + }, + { + +0.003763f, -0.065127f, +0.108393f, -0.009194f, +0.009940f, -0.008879f, -0.005875f, +0.000734f, -0.005205f, +0.002855f, + +0.001050f, +0.024859f, -0.008435f, +0.032258f, +0.011343f, -0.000722f, -0.009275f, +0.030237f, -0.013837f, -0.030145f, + -0.007778f, -0.005892f, -0.015662f, +0.017517f, -0.003297f, -0.016538f, +0.020485f, -0.008818f, +0.038873f, -0.031073f, + +0.024264f, +0.004120f, -0.008432f, +0.011442f, +0.004853f, -0.019504f, +0.021036f, -0.011550f, +0.000436f, +0.008508f, + +0.009595f, -0.003323f, +0.008814f, +0.003822f, +0.006095f, +0.007369f, +0.007900f, +0.015896f, -0.018240f, -0.007102f, + +0.000766f, -0.013052f, +0.000258f, +0.001247f, +0.000237f, +0.008171f, +0.007733f, -0.005258f, +0.000549f, -0.008982f, + +0.002593f, -0.007406f, -0.001220f, -0.004258f, +0.008002f, -0.010659f, +0.002889f, +0.003466f, +0.003546f, +0.001093f, + -0.000938f, +0.008998f, -0.007685f, -0.003020f, +0.003282f, +0.003324f, -0.003902f, -0.002400f, -0.000914f, -0.004694f, + -0.004414f, +0.001101f, +0.000480f, -0.002967f, +0.001487f, -0.001895f, -0.003470f, -0.000879f, +0.000037f, +0.001330f, + +0.001761f, +0.000040f, -0.004331f, +0.001492f, +0.002639f, -0.001078f + }, + { + -0.029270f, -0.038847f, +0.035887f, +0.075120f, -0.029438f, -0.007200f, -0.012619f, +0.020210f, -0.000073f, +0.012124f, + -0.008993f, -0.004835f, +0.005688f, -0.007550f, +0.011831f, -0.007079f, +0.040903f, -0.013913f, -0.017832f, +0.021697f, + +0.001257f, -0.007737f, +0.003521f, -0.022371f, +0.016746f, -0.003029f, +0.007882f, +0.000471f, -0.001836f, +0.007143f, + +0.005809f, +0.006592f, +0.011916f, -0.008535f, -0.005241f, -0.005149f, +0.012760f, -0.002724f, +0.001999f, +0.010335f, + +0.013866f, -0.010881f, +0.002737f, -0.002593f, +0.002547f, -0.000363f, +0.005686f, +0.018771f, -0.016996f, +0.004940f, + -0.005883f, +0.001454f, +0.002871f, -0.004533f, -0.000307f, -0.002632f, -0.007129f, -0.002298f, -0.009960f, -0.002767f, + -0.008234f, -0.009450f, +0.001135f, +0.000950f, -0.002143f, +0.001100f, -0.001714f, +0.001212f, -0.004490f, -0.002630f, + +0.004366f, +0.002267f, -0.000849f, +0.005744f, +0.003065f, +0.000618f, -0.002780f, -0.001159f, -0.003211f, +0.003474f, + -0.002613f, +0.004580f, -0.002649f, -0.001947f, -0.005756f, +0.001345f, -0.000018f, +0.000392f, -0.004423f, +0.002813f, + +0.001721f, -0.004745f, +0.001232f, -0.000462f, +0.000749f, -0.002460f + }, + { + -0.000135f, +0.111291f, -0.046999f, -0.022021f, -0.003252f, -0.004750f, +0.030936f, +0.005604f, -0.006536f, -0.000316f, + +0.000814f, -0.023667f, -0.013214f, +0.030520f, -0.009704f, +0.035665f, +0.026361f, -0.023788f, -0.002280f, -0.015218f, + +0.001374f, -0.011169f, +0.006066f, +0.001864f, +0.018760f, -0.010055f, +0.007834f, +0.004759f, +0.021412f, -0.030229f, + +0.000992f, -0.013566f, +0.013616f, -0.001190f, -0.024204f, +0.015446f, +0.006080f, -0.012025f, -0.007765f, +0.003252f, + +0.008054f, -0.005958f, +0.016455f, -0.000974f, -0.015756f, +0.014531f, +0.004041f, -0.001474f, +0.007097f, +0.002829f, + +0.005484f, -0.004250f, -0.008258f, +0.000791f, +0.009061f, -0.000860f, -0.006519f, +0.005965f, -0.004565f, +0.003907f, + -0.004756f, -0.006294f, +0.000501f, -0.001173f, -0.005041f, -0.002157f, -0.000481f, +0.002126f, -0.005769f, +0.000820f, + -0.006184f, +0.004631f, +0.001827f, +0.001613f, +0.003837f, -0.000927f, +0.003304f, +0.000539f, -0.004296f, -0.001295f, + -0.002322f, -0.004752f, +0.002209f, +0.003403f, +0.001756f, +0.004794f, +0.005003f, +0.007721f, +0.003767f, +0.001449f, + +0.002422f, -0.000605f, +0.002821f, -0.000561f, +0.000335f, -0.000358f + }, + { + -0.013478f, +0.100273f, +0.070821f, +0.018209f, -0.013814f, -0.024278f, +0.079866f, -0.020457f, -0.007669f, -0.059648f, + +0.002029f, +0.003142f, +0.007095f, +0.018241f, +0.017298f, +0.003490f, -0.004483f, -0.011010f, +0.020103f, -0.013258f, + -0.003403f, -0.016420f, -0.000697f, +0.000021f, +0.012276f, -0.008629f, -0.019665f, +0.003106f, +0.014059f, -0.011631f, + +0.004507f, +0.007244f, +0.003255f, +0.001312f, +0.007480f, +0.016850f, -0.008566f, +0.017650f, +0.018944f, +0.000506f, + +0.011173f, +0.004332f, -0.016009f, +0.005252f, -0.000878f, +0.014608f, +0.004065f, -0.002395f, +0.001421f, +0.001351f, + -0.012331f, -0.010714f, -0.012339f, +0.009681f, -0.000488f, -0.011228f, -0.005972f, -0.003241f, -0.012652f, -0.010061f, + +0.002401f, -0.003199f, +0.003310f, -0.014864f, -0.000972f, -0.004037f, -0.002726f, +0.003510f, +0.003594f, -0.003015f, + -0.007429f, -0.001194f, -0.003857f, -0.000378f, +0.003123f, -0.002079f, +0.002788f, +0.002902f, -0.004934f, +0.006452f, + -0.003894f, -0.009111f, +0.001008f, -0.003828f, +0.004368f, -0.001702f, +0.005139f, +0.002949f, +0.000520f, -0.000919f, + -0.000759f, +0.004668f, -0.005013f, +0.000796f, -0.002413f, +0.003014f + }, + { + -0.000995f, +0.035189f, -0.048727f, -0.001066f, +0.005145f, +0.016234f, -0.010840f, +0.004490f, -0.000504f, -0.005556f, + -0.025195f, +0.007076f, -0.010769f, -0.003365f, +0.035734f, +0.011821f, -0.024474f, +0.014824f, -0.005958f, -0.000370f, + -0.011656f, +0.011840f, -0.009526f, +0.004284f, -0.015120f, +0.000409f, +0.000546f, -0.019929f, +0.024872f, +0.013221f, + +0.021253f, -0.007297f, +0.005809f, -0.012765f, -0.000465f, +0.012226f, -0.008781f, -0.031851f, +0.014460f, +0.007338f, + +0.009485f, -0.002137f, -0.001521f, +0.009737f, -0.011103f, +0.007166f, -0.007664f, -0.000788f, -0.002524f, -0.011166f, + +0.013556f, +0.007821f, +0.003715f, -0.007414f, +0.002889f, +0.011178f, -0.007271f, -0.004566f, -0.007741f, +0.006851f, + -0.006912f, -0.003923f, -0.003981f, +0.001510f, +0.003198f, -0.006465f, -0.009795f, -0.001153f, -0.002994f, -0.012417f, + +0.000672f, +0.003258f, +0.003642f, -0.007788f, -0.001150f, +0.001597f, +0.001642f, +0.001026f, +0.000516f, +0.000600f, + -0.002345f, +0.000314f, +0.002249f, +0.000630f, -0.003723f, -0.000500f, -0.000160f, -0.002084f, +0.001896f, -0.002065f, + +0.001275f, +0.000101f, +0.001364f, -0.003693f, -0.002379f, +0.001189f + }, + { + -0.011118f, -0.253622f, -0.016353f, +0.014093f, +0.021331f, -0.027796f, +0.058390f, -0.005729f, +0.006352f, -0.005428f, + -0.020252f, +0.034169f, -0.006941f, +0.004112f, -0.029520f, -0.045344f, +0.011143f, -0.006528f, +0.016287f, +0.016790f, + +0.030494f, +0.004005f, +0.023619f, -0.009650f, -0.004597f, -0.005093f, -0.008704f, +0.016943f, -0.005567f, +0.013424f, + -0.011650f, +0.015600f, -0.004227f, +0.001562f, +0.010998f, -0.005726f, +0.013421f, -0.013386f, -0.000073f, -0.004740f, + -0.010189f, -0.012045f, +0.001148f, +0.012311f, +0.003527f, -0.002689f, -0.004276f, +0.010016f, +0.002870f, +0.003690f, + +0.011595f, -0.001135f, +0.010012f, -0.012125f, -0.004371f, -0.003662f, -0.008398f, -0.002067f, -0.009728f, -0.007076f, + +0.010628f, +0.008041f, +0.008950f, -0.002616f, -0.005955f, +0.001344f, -0.005220f, +0.003076f, -0.006737f, -0.001406f, + +0.005078f, -0.005295f, -0.002307f, -0.000455f, -0.006531f, +0.002866f, -0.008647f, -0.000112f, -0.006574f, +0.000287f, + +0.002399f, -0.002804f, +0.002684f, +0.000271f, +0.001383f, -0.002834f, +0.001892f, +0.000882f, +0.006728f, +0.001044f, + -0.000401f, +0.002677f, -0.001450f, +0.000210f, -0.001079f, +0.000211f + }, + { + -0.000424f, +0.132792f, -0.017521f, -0.016671f, +0.000808f, +0.011182f, -0.024495f, +0.000483f, -0.010725f, +0.008726f, + -0.003823f, -0.010735f, +0.000321f, +0.027862f, +0.077612f, +0.021166f, -0.041425f, -0.007251f, +0.014194f, -0.000650f, + -0.025202f, +0.038421f, -0.037178f, +0.032189f, -0.004174f, -0.025424f, -0.006757f, +0.004367f, +0.008035f, -0.003507f, + -0.020770f, -0.014119f, +0.005443f, -0.021312f, +0.005520f, +0.014373f, -0.014815f, +0.002948f, -0.000770f, +0.000238f, + +0.002800f, +0.008320f, +0.007133f, +0.014974f, +0.004079f, -0.003638f, -0.011905f, -0.002804f, +0.004465f, +0.004827f, + +0.006161f, -0.006469f, +0.006714f, +0.002506f, -0.008308f, +0.001393f, +0.002904f, -0.000669f, -0.002339f, +0.000277f, + +0.011181f, -0.012627f, -0.000765f, +0.003092f, +0.003319f, +0.004442f, -0.001641f, +0.003890f, -0.003261f, +0.002507f, + +0.005203f, -0.003789f, +0.000801f, +0.003907f, -0.005286f, +0.000305f, +0.002543f, +0.000680f, -0.003989f, -0.001167f, + +0.000634f, +0.005680f, -0.005050f, -0.005521f, +0.000473f, +0.004176f, -0.003060f, -0.003161f, +0.004925f, -0.003341f, + -0.001589f, +0.001386f, -0.001882f, -0.000990f, +0.000215f, -0.001813f + }, + { + -0.012044f, -0.207752f, -0.019262f, +0.020293f, -0.024489f, -0.030076f, +0.064274f, +0.005907f, -0.006587f, -0.006834f, + -0.019585f, +0.004371f, -0.024566f, +0.008014f, -0.032656f, +0.009310f, +0.012891f, -0.009088f, -0.004543f, +0.015965f, + -0.009087f, -0.014673f, +0.010468f, -0.000022f, -0.008693f, +0.010350f, +0.006297f, -0.002099f, -0.007414f, -0.020775f, + -0.001787f, +0.005867f, +0.012919f, +0.002126f, +0.014226f, -0.005990f, -0.004657f, -0.006167f, +0.019874f, +0.015167f, + +0.004831f, -0.005820f, +0.002726f, -0.019051f, -0.014358f, -0.001201f, -0.011345f, -0.013036f, -0.004678f, -0.004179f, + +0.011373f, +0.004729f, -0.011284f, -0.002462f, -0.000518f, -0.003979f, -0.005616f, -0.000352f, +0.014539f, +0.009811f, + -0.009123f, +0.008232f, +0.004762f, +0.005022f, +0.006368f, -0.003901f, +0.006896f, +0.010178f, -0.005127f, -0.002381f, + -0.005299f, +0.001564f, -0.001814f, +0.000433f, +0.006523f, -0.001517f, -0.000645f, -0.000486f, +0.003991f, -0.006671f, + -0.003248f, +0.002628f, -0.000581f, +0.000134f, -0.001946f, +0.003064f, +0.003284f, +0.000776f, +0.001192f, -0.002815f, + +0.001835f, +0.001498f, +0.002728f, -0.000719f, -0.000440f, +0.000053f + } + }, + { + { + -0.000466f, -0.125731f, -0.007070f, +0.023464f, -0.023260f, -0.008159f, -0.011378f, +0.000350f, +0.015998f, +0.008716f, + -0.000254f, +0.009272f, -0.009642f, -0.011709f, -0.026469f, -0.012563f, -0.035499f, -0.020960f, -0.017087f, +0.002091f, + +0.016799f, -0.017939f, -0.001200f, -0.008981f, +0.029746f, +0.000415f, -0.006214f, -0.004049f, -0.000808f, +0.033251f, + +0.005142f, -0.005748f, -0.009493f, +0.014125f, -0.008631f, +0.002500f, +0.004392f, +0.001132f, -0.005162f, -0.000981f, + -0.003970f, -0.005790f, +0.009000f, +0.005275f, +0.001249f, -0.000221f, +0.003364f, -0.008901f, -0.006345f, +0.000973f, + -0.007962f, -0.010050f, +0.004548f, -0.008790f, -0.000824f, +0.001828f, +0.001629f, -0.006388f, +0.002792f, -0.004975f, + -0.003498f, -0.003392f, +0.005198f, -0.001340f, -0.006409f, +0.004493f, -0.000894f, +0.007836f, +0.007898f, +0.002698f, + -0.002028f, -0.000326f, +0.005351f, +0.000665f, +0.001247f, -0.003040f, +0.005693f, -0.000915f, +0.001997f, -0.004546f, + -0.000498f, +0.005232f, +0.000767f, +0.004504f, +0.002255f, +0.000846f, +0.004860f, -0.001576f, +0.000928f, +0.000251f, + +0.002097f, -0.000845f, +0.005265f, -0.000384f, +0.000142f, +0.000450f + }, + { + -0.005551f, +0.252702f, +0.010507f, -0.153487f, +0.033990f, -0.000045f, +0.010190f, -0.000666f, +0.014739f, +0.010816f, + +0.020538f, -0.021089f, +0.001413f, +0.011067f, +0.005830f, -0.009888f, -0.006479f, -0.016010f, +0.002423f, -0.016785f, + +0.004747f, -0.001244f, +0.022520f, +0.018280f, -0.016806f, +0.004477f, -0.007874f, +0.000004f, +0.015002f, -0.002299f, + -0.010106f, -0.012292f, +0.016362f, -0.008304f, -0.004815f, -0.003829f, +0.003206f, -0.004115f, +0.011189f, -0.001423f, + +0.002680f, +0.003357f, -0.007091f, +0.005160f, -0.003632f, -0.000961f, -0.016560f, -0.002061f, +0.003211f, -0.001857f, + -0.001915f, +0.005134f, -0.001285f, -0.005877f, +0.000484f, -0.005882f, -0.002896f, -0.004947f, +0.007307f, -0.007374f, + -0.002578f, +0.005136f, +0.000795f, +0.001814f, +0.001964f, -0.001386f, -0.007309f, -0.000271f, +0.001557f, +0.005646f, + +0.000861f, +0.001600f, -0.003437f, -0.003289f, -0.001494f, -0.005274f, -0.004031f, -0.004452f, -0.001736f, +0.000692f, + +0.008093f, -0.005139f, +0.001641f, -0.004854f, +0.002973f, -0.001313f, +0.004428f, +0.000570f, +0.003077f, -0.001636f, + -0.004314f, +0.001326f, +0.001240f, +0.000300f, +0.001754f, -0.000729f + }, + { + +0.000634f, -0.014443f, -0.002122f, -0.078482f, -0.036740f, +0.001133f, +0.016370f, -0.005855f, +0.008625f, -0.017511f, + +0.022073f, -0.022728f, +0.010704f, -0.003988f, -0.016217f, -0.002519f, +0.001138f, +0.008082f, -0.007024f, -0.010579f, + -0.001713f, -0.012970f, -0.000315f, -0.020943f, +0.021173f, +0.003286f, +0.008443f, -0.016050f, -0.007697f, +0.011366f, + +0.003219f, -0.010500f, +0.000938f, -0.001236f, -0.007609f, -0.009776f, -0.011848f, +0.018403f, +0.000657f, -0.001229f, + +0.011515f, -0.004075f, +0.006572f, +0.003294f, -0.007726f, +0.002807f, +0.005184f, +0.005688f, +0.010965f, -0.005071f, + +0.013278f, +0.005822f, +0.011175f, +0.004566f, +0.017662f, -0.002586f, -0.002989f, -0.008717f, +0.003018f, -0.000325f, + -0.001376f, -0.002539f, -0.001474f, +0.003604f, +0.003519f, -0.004480f, +0.007262f, +0.002591f, -0.001172f, +0.005280f, + -0.003002f, +0.004150f, -0.001851f, +0.000489f, +0.004129f, -0.002187f, -0.001189f, +0.003651f, +0.003173f, -0.001360f, + -0.000873f, +0.001462f, +0.002044f, -0.004819f, -0.004398f, +0.003275f, +0.001581f, -0.000093f, +0.000863f, -0.000333f, + +0.004799f, +0.000781f, +0.000291f, +0.000181f, -0.000411f, +0.000582f + }, + { + +0.001449f, -0.066164f, +0.057274f, +0.009986f, -0.005861f, -0.007080f, -0.002207f, +0.002128f, -0.014265f, -0.021293f, + -0.006111f, +0.028666f, -0.000122f, +0.002289f, +0.006265f, -0.011253f, -0.019048f, +0.033346f, -0.032256f, -0.005234f, + -0.000959f, -0.013468f, -0.019639f, -0.001361f, -0.005479f, -0.020439f, +0.022856f, +0.009122f, -0.005871f, -0.008458f, + -0.014776f, +0.000945f, +0.008113f, -0.000909f, +0.004047f, +0.013563f, -0.017455f, +0.003132f, -0.002027f, +0.000365f, + +0.012264f, -0.006038f, +0.002779f, +0.000458f, +0.004383f, -0.008070f, +0.001197f, -0.003950f, +0.003682f, +0.014558f, + +0.011123f, -0.011888f, -0.001575f, +0.007306f, -0.006114f, -0.008129f, -0.001715f, -0.000849f, -0.004121f, +0.003897f, + +0.007190f, +0.000850f, -0.005762f, +0.001414f, +0.000808f, -0.006553f, +0.003268f, -0.001367f, +0.002940f, -0.008726f, + +0.002636f, -0.001409f, +0.002544f, +0.002909f, -0.002102f, -0.005385f, +0.002997f, +0.002082f, -0.001035f, +0.000529f, + -0.000461f, -0.002480f, +0.000300f, +0.003861f, -0.004156f, -0.002614f, +0.000475f, -0.000310f, -0.001926f, -0.000501f, + -0.001607f, +0.000182f, +0.000853f, -0.006260f, +0.001684f, -0.003676f + }, + { + +0.031131f, +0.081428f, -0.081883f, -0.010873f, +0.006902f, +0.011456f, +0.014306f, -0.005262f, +0.014844f, +0.008466f, + +0.014511f, -0.009352f, -0.010181f, -0.018360f, -0.017914f, +0.006799f, +0.017541f, -0.019653f, +0.035016f, +0.016263f, + +0.002704f, +0.000304f, -0.003517f, +0.004901f, +0.005664f, +0.006663f, -0.005908f, -0.001325f, -0.013502f, -0.009146f, + +0.009079f, -0.000409f, +0.002155f, -0.000321f, -0.012101f, -0.007678f, -0.004756f, -0.002312f, -0.001413f, +0.003310f, + -0.002327f, -0.004177f, +0.005550f, -0.001626f, +0.006052f, -0.000677f, -0.003194f, -0.001500f, +0.005463f, -0.005411f, + +0.019122f, +0.004328f, -0.011823f, -0.002738f, -0.005432f, +0.006925f, -0.001366f, -0.001958f, -0.004805f, +0.002585f, + -0.002792f, -0.000429f, +0.005687f, -0.008829f, -0.001918f, -0.000310f, -0.003000f, -0.003650f, -0.001245f, -0.001049f, + +0.006688f, +0.004172f, +0.003166f, +0.000831f, -0.005186f, -0.001640f, +0.006680f, +0.001023f, -0.003098f, -0.003014f, + -0.003358f, -0.003009f, +0.006595f, -0.002039f, +0.001339f, +0.001972f, -0.001210f, +0.000397f, -0.000077f, +0.000971f, + -0.000415f, -0.000150f, +0.002389f, +0.000695f, +0.003134f, -0.000501f + }, + { + -0.004639f, +0.019209f, -0.035066f, +0.007517f, +0.019851f, -0.005507f, -0.000902f, -0.001382f, -0.001791f, +0.013878f, + -0.008086f, +0.010793f, -0.006078f, -0.004265f, -0.011763f, +0.008741f, -0.009830f, +0.000823f, -0.010695f, -0.022081f, + -0.035597f, -0.020513f, -0.013737f, -0.018810f, +0.011923f, +0.014659f, -0.005328f, -0.009284f, -0.005478f, +0.046684f, + -0.009035f, +0.006704f, -0.001440f, -0.007880f, -0.008403f, +0.007371f, -0.007746f, +0.009281f, +0.009962f, +0.004351f, + -0.008944f, -0.003049f, +0.007014f, -0.001202f, +0.010589f, +0.005999f, -0.004149f, +0.002544f, -0.003462f, +0.009383f, + -0.002757f, -0.002374f, -0.000410f, -0.003063f, -0.004936f, -0.003391f, -0.003848f, -0.000010f, -0.003239f, +0.008723f, + +0.009500f, -0.001086f, -0.004332f, -0.001861f, -0.005627f, +0.005975f, +0.002708f, +0.004611f, +0.000932f, -0.002760f, + -0.000151f, -0.002237f, +0.001468f, +0.002019f, +0.002292f, -0.000728f, -0.002993f, -0.006861f, -0.001328f, -0.001510f, + +0.007715f, -0.006027f, -0.001929f, +0.001702f, -0.002549f, -0.005616f, +0.004830f, +0.001284f, +0.001260f, -0.003114f, + -0.003902f, +0.000401f, +0.000907f, -0.002406f, -0.000724f, +0.003676f + }, + { + +0.033754f, +0.019182f, -0.031750f, +0.003452f, +0.032885f, +0.003072f, +0.005864f, +0.007524f, +0.024068f, +0.004037f, + -0.002227f, -0.034886f, +0.000907f, +0.015578f, +0.015097f, -0.011424f, -0.010408f, +0.006771f, -0.014069f, -0.004825f, + -0.012585f, +0.006779f, -0.002813f, -0.009250f, +0.018822f, +0.011074f, +0.022618f, -0.011231f, +0.019476f, +0.001954f, + +0.013646f, -0.017988f, -0.009966f, -0.005966f, -0.007953f, -0.000315f, -0.003898f, +0.001456f, +0.008782f, -0.004449f, + +0.002551f, -0.000695f, +0.000033f, +0.009155f, +0.004641f, +0.005544f, -0.003830f, -0.007811f, -0.000388f, +0.002611f, + +0.006349f, -0.009978f, -0.004924f, +0.000146f, -0.003670f, +0.008469f, -0.007200f, +0.006504f, +0.005673f, +0.002676f, + -0.011737f, -0.002620f, +0.004452f, +0.006017f, +0.006376f, -0.003075f, -0.002326f, +0.003423f, -0.002853f, +0.005257f, + -0.003281f, +0.003585f, +0.004725f, +0.000449f, +0.001537f, -0.002265f, +0.000682f, -0.000346f, +0.002383f, +0.001617f, + +0.001334f, +0.000825f, +0.001285f, -0.004273f, +0.000443f, +0.004671f, -0.002984f, +0.003140f, +0.004351f, +0.000042f, + -0.002534f, -0.000411f, +0.001346f, +0.000389f, -0.000274f, -0.000511f + }, + { + -0.005606f, +0.086721f, -0.048725f, +0.001654f, +0.013303f, -0.000273f, -0.009083f, +0.001177f, -0.007869f, -0.002175f, + -0.005511f, +0.019531f, +0.023983f, +0.007285f, +0.000756f, +0.036379f, -0.026669f, +0.010145f, -0.033189f, -0.015824f, + -0.001903f, -0.010462f, -0.006303f, +0.022239f, -0.020287f, +0.007977f, +0.005737f, -0.011950f, +0.017611f, +0.003055f, + -0.005067f, +0.010434f, +0.003687f, +0.004018f, +0.002061f, -0.002344f, -0.001258f, -0.005304f, -0.008317f, +0.009780f, + +0.007101f, +0.000938f, +0.006434f, +0.005541f, +0.006255f, +0.002126f, +0.016071f, +0.002958f, -0.008056f, -0.001606f, + -0.008087f, -0.009263f, +0.004868f, -0.010370f, +0.001495f, +0.007666f, +0.007610f, -0.000982f, -0.001870f, -0.002833f, + -0.008926f, -0.000635f, -0.005246f, +0.002705f, -0.001229f, -0.004603f, +0.001361f, +0.007104f, +0.001519f, +0.000824f, + -0.002992f, +0.000821f, -0.002814f, -0.003417f, +0.001048f, +0.007341f, -0.003767f, -0.000155f, -0.004904f, -0.005135f, + -0.005486f, +0.000577f, -0.000116f, +0.000613f, -0.001843f, +0.001437f, -0.002992f, -0.004627f, +0.001630f, +0.001754f, + +0.000553f, +0.000542f, -0.003363f, +0.001841f, +0.001564f, -0.001229f + }, + { + +0.033490f, -0.006765f, -0.037810f, +0.012394f, +0.021632f, -0.011869f, -0.003561f, +0.003530f, +0.008811f, -0.000771f, + +0.009858f, -0.015902f, -0.012274f, +0.029659f, -0.007983f, +0.034473f, -0.010938f, -0.000612f, -0.018741f, +0.009373f, + +0.012605f, -0.020947f, +0.013535f, -0.011729f, -0.003124f, +0.015649f, -0.011868f, +0.010379f, -0.003778f, +0.003344f, + +0.001687f, +0.006425f, +0.006959f, -0.007595f, +0.001058f, -0.002429f, +0.014301f, -0.011559f, +0.016277f, -0.002393f, + +0.010188f, -0.005803f, +0.000827f, +0.001022f, +0.003980f, +0.001813f, -0.001815f, +0.009581f, -0.004388f, +0.000770f, + -0.000817f, +0.001319f, -0.002574f, -0.005490f, +0.003393f, -0.004041f, -0.000707f, -0.003343f, -0.005835f, -0.013803f, + -0.000458f, -0.003076f, -0.009481f, +0.000519f, -0.005373f, +0.007533f, +0.001067f, -0.002425f, +0.000097f, -0.002178f, + -0.000754f, +0.000672f, +0.004025f, +0.000962f, +0.006358f, -0.004635f, +0.003421f, -0.002291f, +0.000887f, -0.001609f, + -0.000258f, +0.001961f, +0.000152f, -0.003276f, -0.003823f, +0.002341f, -0.000516f, -0.000484f, -0.000184f, -0.000133f, + +0.000229f, -0.002340f, -0.000808f, +0.002413f, -0.003053f, +0.000801f + }, + { + +0.000857f, -0.005759f, +0.057178f, -0.022825f, -0.007007f, -0.011499f, +0.042927f, -0.011027f, +0.006543f, -0.012257f, + -0.004821f, -0.028397f, +0.002481f, +0.015719f, +0.010343f, +0.009572f, +0.040383f, -0.021545f, +0.009590f, -0.022300f, + -0.011068f, -0.006652f, +0.001309f, +0.019804f, +0.016871f, -0.004090f, -0.002773f, +0.007545f, +0.017787f, -0.012773f, + -0.021427f, +0.002816f, +0.006791f, +0.011158f, -0.021727f, -0.002948f, +0.007293f, -0.017090f, +0.000134f, -0.005739f, + +0.004629f, -0.003871f, +0.014828f, -0.000318f, +0.009121f, -0.010676f, +0.011022f, -0.010428f, +0.011231f, +0.001438f, + +0.008647f, -0.005162f, -0.008287f, -0.005196f, -0.002254f, +0.011855f, -0.005316f, +0.003669f, -0.006141f, +0.006841f, + -0.005884f, +0.002327f, -0.008622f, +0.001853f, -0.005564f, +0.001911f, -0.004583f, +0.000387f, +0.001553f, -0.006862f, + -0.002341f, +0.003455f, -0.003930f, +0.002762f, +0.004247f, +0.002067f, -0.000138f, -0.001929f, -0.000611f, -0.003586f, + -0.000737f, -0.000758f, -0.003885f, +0.006756f, +0.003630f, +0.005610f, +0.001277f, +0.007934f, +0.003930f, +0.002306f, + -0.000182f, -0.000844f, +0.003749f, +0.001899f, -0.000367f, -0.000276f + }, + { + +0.015756f, +0.202496f, -0.046292f, -0.006937f, -0.005308f, +0.017654f, +0.000606f, -0.011287f, +0.015754f, -0.039307f, + -0.025350f, +0.000632f, +0.002420f, +0.010670f, +0.023221f, +0.013406f, -0.009630f, -0.024702f, +0.011628f, -0.006029f, + +0.001054f, -0.010706f, -0.003813f, +0.004317f, +0.004587f, -0.003566f, -0.021760f, +0.005730f, +0.012507f, -0.011734f, + +0.003266f, -0.007832f, +0.014517f, +0.001533f, +0.016941f, -0.011531f, +0.013870f, +0.007955f, +0.016894f, +0.007120f, + -0.001041f, +0.003883f, -0.013335f, +0.003707f, +0.004586f, +0.009723f, +0.008731f, -0.005557f, +0.000306f, -0.003232f, + -0.013856f, -0.004988f, -0.008710f, -0.004028f, +0.000954f, -0.007950f, -0.004624f, -0.004783f, -0.016944f, -0.002785f, + -0.004289f, +0.005863f, -0.002693f, -0.006698f, -0.003048f, -0.010286f, -0.003696f, +0.008020f, +0.001740f, -0.002636f, + -0.006052f, -0.000096f, +0.001774f, -0.001150f, -0.003383f, +0.001526f, +0.000648f, +0.003832f, -0.004651f, +0.006702f, + -0.002133f, -0.005660f, -0.007273f, +0.003770f, -0.003444f, +0.003563f, +0.000855f, +0.004402f, -0.000555f, +0.000852f, + -0.000513f, +0.002582f, -0.005351f, +0.003225f, -0.000268f, -0.002014f + }, + { + +0.000459f, -0.059531f, +0.031728f, -0.017425f, +0.019203f, +0.001344f, +0.004375f, +0.003565f, +0.000343f, -0.007046f, + -0.027415f, -0.000400f, -0.010188f, +0.009531f, +0.001392f, +0.022827f, +0.003858f, +0.017728f, -0.021256f, -0.008819f, + -0.004504f, +0.017309f, -0.007174f, +0.018370f, -0.032052f, -0.004813f, +0.006609f, -0.007376f, +0.024918f, +0.006986f, + -0.000440f, +0.009255f, -0.008691f, +0.010881f, +0.010486f, -0.004626f, -0.017144f, -0.002504f, +0.005955f, +0.007355f, + +0.018879f, +0.003162f, -0.002895f, +0.007928f, +0.001962f, -0.010242f, -0.005408f, +0.007324f, -0.002763f, -0.000176f, + +0.012545f, +0.002817f, +0.004094f, -0.012102f, +0.005598f, +0.000418f, +0.001768f, -0.012076f, -0.006773f, +0.004681f, + +0.001595f, -0.010556f, +0.003189f, -0.000964f, +0.003543f, +0.001655f, -0.015394f, -0.002389f, -0.004916f, -0.008560f, + +0.001216f, +0.001365f, +0.005375f, -0.010938f, -0.003323f, +0.007657f, -0.001704f, -0.001561f, +0.005739f, -0.003963f, + -0.003547f, +0.004832f, +0.001345f, -0.003195f, -0.003903f, +0.000337f, +0.001102f, -0.001396f, -0.000095f, -0.000074f, + +0.000194f, +0.002172f, -0.000924f, -0.000393f, -0.004058f, +0.001238f + }, + { + +0.008256f, -0.253050f, +0.004243f, -0.028030f, -0.001671f, +0.025857f, +0.012985f, +0.011478f, -0.017087f, +0.014383f, + -0.014168f, +0.013539f, -0.020065f, +0.003447f, -0.026630f, -0.035319f, +0.003448f, -0.003644f, +0.012934f, +0.019010f, + +0.027529f, +0.004293f, +0.006947f, +0.019595f, -0.017465f, +0.008048f, -0.018151f, -0.002664f, +0.015938f, +0.012417f, + -0.001748f, +0.006829f, -0.009514f, +0.000347f, +0.011734f, -0.003151f, +0.005438f, -0.005063f, -0.010387f, -0.007649f, + +0.003718f, -0.019772f, +0.003129f, +0.011542f, +0.012106f, -0.016698f, +0.000731f, -0.001769f, +0.019663f, -0.001195f, + +0.013572f, +0.007819f, -0.001402f, -0.008097f, +0.001311f, -0.013392f, +0.003805f, -0.015946f, -0.011747f, +0.001346f, + +0.010202f, +0.004968f, +0.003242f, +0.003900f, -0.002008f, -0.003897f, +0.001663f, +0.002944f, -0.007333f, -0.002981f, + +0.001975f, -0.000465f, -0.000940f, -0.001384f, -0.008932f, +0.005973f, -0.000681f, +0.002019f, -0.009431f, +0.000412f, + -0.003206f, +0.000691f, +0.001040f, +0.006346f, -0.000299f, -0.005069f, +0.000124f, +0.000626f, +0.003440f, +0.006846f, + -0.000176f, +0.001428f, +0.001193f, -0.000904f, -0.000266f, -0.001134f + }, + { + +0.000273f, +0.078636f, +0.022373f, -0.025053f, +0.001286f, +0.005855f, -0.017354f, -0.007741f, +0.013481f, -0.006040f, + +0.003702f, -0.009258f, +0.014230f, -0.005433f, +0.116881f, -0.003623f, -0.041405f, -0.003910f, +0.026436f, +0.015024f, + -0.012312f, +0.007192f, -0.012219f, +0.015877f, -0.014794f, +0.002388f, -0.022345f, +0.001985f, +0.014968f, -0.021582f, + -0.010782f, -0.011540f, +0.001094f, -0.009966f, +0.018212f, -0.006524f, -0.010096f, +0.002629f, +0.008374f, +0.001238f, + -0.000722f, +0.007617f, +0.010124f, +0.013616f, -0.005674f, -0.000609f, -0.007462f, -0.007276f, +0.001599f, +0.002496f, + +0.008689f, -0.006327f, +0.004520f, -0.000539f, -0.009164f, +0.010269f, +0.000664f, +0.000186f, -0.001675f, +0.008982f, + +0.008291f, -0.010642f, -0.009801f, +0.005859f, +0.002091f, +0.007718f, -0.001758f, +0.000643f, -0.001466f, -0.002106f, + +0.007283f, +0.001339f, -0.004854f, +0.001993f, -0.001138f, -0.000869f, -0.001606f, +0.001697f, -0.004012f, +0.000882f, + +0.005333f, +0.000401f, -0.003962f, -0.003876f, -0.002097f, +0.001565f, +0.003868f, -0.003236f, +0.000217f, -0.000230f, + -0.004210f, +0.003321f, -0.001249f, -0.002403f, +0.003179f, -0.009035f + }, + { + +0.010918f, -0.187265f, -0.046800f, +0.012151f, -0.018121f, +0.000435f, +0.013562f, +0.018913f, -0.019486f, +0.004714f, + -0.004506f, -0.020189f, -0.011774f, -0.031200f, +0.009339f, +0.007138f, +0.000954f, +0.004252f, +0.009667f, -0.008479f, + +0.017823f, -0.028090f, +0.025225f, -0.004373f, +0.003158f, +0.008016f, +0.000593f, -0.008115f, +0.003408f, -0.009577f, + -0.009827f, -0.013145f, +0.005100f, +0.009808f, +0.022963f, -0.010741f, -0.010244f, +0.006871f, +0.024511f, +0.010035f, + -0.001633f, +0.003588f, -0.009219f, -0.009548f, -0.006825f, -0.015559f, -0.009843f, +0.003400f, -0.008293f, +0.004630f, + +0.005054f, +0.004281f, -0.010944f, -0.005973f, -0.000413f, -0.006698f, +0.000600f, +0.004574f, +0.006713f, +0.003737f, + -0.001594f, +0.005449f, +0.004126f, +0.006412f, +0.002252f, +0.005044f, +0.007942f, +0.009541f, -0.009109f, -0.000575f, + -0.004672f, +0.002742f, +0.002028f, +0.004407f, +0.001875f, -0.005194f, -0.000073f, +0.002163f, -0.000052f, -0.004233f, + -0.004103f, +0.007167f, -0.000966f, -0.003533f, +0.001110f, -0.001013f, +0.004286f, +0.002219f, -0.000863f, -0.000699f, + +0.000767f, -0.000866f, +0.003467f, +0.002362f, +0.000544f, +0.001945f + } + }, + { + { + +0.002779f, -0.034787f, +0.068367f, +0.054749f, -0.018390f, +0.002452f, -0.005483f, +0.006023f, +0.008923f, +0.005565f, + +0.000998f, +0.009690f, +0.004957f, +0.002540f, -0.006828f, +0.003849f, -0.031761f, -0.033772f, -0.033187f, -0.004754f, + +0.014253f, -0.019371f, +0.013276f, -0.005083f, +0.001304f, -0.010803f, +0.012086f, +0.005602f, +0.002272f, +0.019209f, + +0.002284f, +0.004573f, -0.005111f, +0.013399f, -0.012277f, -0.001178f, +0.014240f, +0.004619f, -0.002687f, +0.013572f, + +0.001753f, -0.000768f, +0.000895f, -0.001340f, +0.011024f, -0.003597f, +0.007449f, +0.009827f, -0.007029f, -0.009364f, + -0.011631f, -0.004780f, +0.004563f, -0.000692f, +0.004815f, -0.010118f, -0.004912f, -0.002384f, +0.005766f, +0.000836f, + -0.003067f, -0.003225f, +0.009432f, -0.003987f, -0.002973f, +0.008377f, -0.002308f, +0.002944f, +0.001051f, +0.001487f, + -0.001560f, -0.003405f, +0.003747f, +0.002965f, +0.002566f, -0.004148f, +0.002223f, -0.001638f, +0.005346f, +0.000061f, + +0.002070f, +0.007567f, -0.000464f, +0.001726f, -0.001430f, -0.000130f, +0.004850f, -0.003119f, +0.000181f, +0.002788f, + +0.001634f, -0.004951f, +0.000290f, -0.003784f, -0.000136f, +0.002010f + }, + { + +0.013126f, +0.229410f, -0.012127f, -0.114628f, +0.090216f, +0.011521f, -0.006574f, -0.034168f, +0.002653f, +0.003229f, + +0.018022f, -0.026729f, -0.001323f, +0.003100f, -0.010539f, -0.012578f, -0.008633f, -0.018373f, +0.001637f, -0.016998f, + +0.018152f, +0.002624f, +0.018733f, +0.004590f, -0.023954f, +0.021587f, -0.000315f, -0.011393f, +0.006651f, -0.008398f, + -0.009590f, -0.015016f, +0.017275f, +0.001421f, +0.006946f, +0.008344f, +0.009147f, -0.015118f, -0.006857f, -0.008830f, + +0.000231f, +0.004952f, -0.007700f, +0.000193f, +0.000795f, +0.004414f, -0.004447f, +0.007923f, +0.001669f, -0.004017f, + -0.008095f, -0.004355f, -0.002513f, -0.000212f, +0.001075f, -0.011333f, +0.001951f, -0.001230f, +0.001829f, -0.004132f, + +0.002335f, +0.002400f, +0.000569f, -0.000515f, -0.003910f, +0.000604f, -0.001058f, +0.001631f, -0.000265f, +0.003225f, + -0.001295f, -0.000855f, -0.001369f, -0.003291f, -0.000617f, -0.000440f, +0.001828f, -0.000388f, +0.005298f, +0.001745f, + +0.002315f, -0.004680f, +0.002635f, -0.002599f, +0.000301f, -0.007184f, +0.004890f, +0.000981f, +0.001304f, -0.000202f, + -0.002229f, +0.001151f, -0.000959f, -0.001973f, +0.001551f, +0.000402f + }, + { + +0.000288f, -0.162622f, -0.084476f, +0.028560f, +0.017012f, -0.003575f, +0.012440f, -0.015021f, -0.004354f, -0.015455f, + +0.011252f, -0.036488f, +0.027489f, +0.014645f, +0.000812f, +0.006885f, +0.001368f, -0.002785f, -0.012622f, +0.004942f, + +0.013029f, -0.009399f, -0.008118f, -0.009106f, +0.011266f, -0.021899f, +0.002717f, -0.014860f, -0.009194f, +0.015187f, + +0.028729f, +0.002403f, -0.014188f, -0.012732f, +0.009652f, +0.008343f, +0.002675f, +0.024838f, -0.009946f, -0.004671f, + +0.013591f, -0.004692f, +0.000459f, -0.008250f, -0.000511f, +0.007557f, -0.009936f, -0.003532f, +0.011735f, -0.006544f, + +0.002114f, -0.000634f, +0.010487f, -0.005201f, +0.012927f, -0.000410f, +0.002782f, -0.006662f, -0.003236f, -0.001001f, + -0.000535f, -0.000736f, +0.000318f, +0.000369f, -0.003924f, -0.007391f, +0.002259f, -0.004275f, -0.000952f, +0.004168f, + -0.007180f, +0.003898f, -0.000696f, -0.003853f, +0.002793f, -0.004444f, -0.003303f, -0.001499f, -0.002523f, -0.000460f, + -0.000365f, +0.000821f, +0.001604f, -0.003797f, -0.001164f, +0.002652f, -0.001517f, -0.003509f, -0.002156f, -0.000922f, + +0.003359f, -0.002914f, -0.002265f, -0.000479f, -0.000112f, +0.000631f + }, + { + +0.000647f, -0.106520f, +0.025742f, +0.026254f, -0.003288f, -0.004843f, +0.003005f, +0.006731f, -0.000408f, -0.007004f, + -0.009913f, +0.025657f, -0.002464f, +0.003902f, +0.017903f, -0.007469f, -0.031331f, +0.019332f, -0.019519f, -0.000152f, + +0.006059f, +0.006644f, -0.009326f, +0.008211f, +0.002755f, -0.032794f, +0.007880f, +0.018193f, -0.001009f, -0.006416f, + -0.003274f, -0.005920f, +0.005555f, -0.005588f, -0.001070f, +0.011050f, -0.005265f, +0.016527f, +0.009609f, -0.009340f, + +0.003082f, -0.009549f, -0.002453f, +0.000229f, +0.006115f, +0.001757f, -0.000458f, -0.000511f, +0.007681f, -0.007260f, + +0.002003f, -0.002133f, -0.002448f, -0.004982f, -0.006600f, +0.003428f, +0.001166f, -0.001285f, +0.000587f, -0.000694f, + +0.003284f, +0.001380f, -0.006859f, +0.002891f, +0.001456f, -0.008046f, +0.005792f, +0.002784f, +0.008087f, -0.004339f, + +0.003238f, -0.001730f, +0.002841f, +0.001571f, -0.000485f, -0.000533f, -0.000933f, -0.002476f, -0.002816f, +0.001170f, + +0.002004f, -0.002125f, -0.000332f, +0.004068f, -0.003440f, -0.002642f, +0.001725f, +0.000611f, -0.004228f, -0.000440f, + -0.000496f, +0.001010f, +0.001028f, -0.002135f, +0.004974f, -0.003833f + }, + { + -0.032339f, +0.073068f, -0.012460f, -0.025593f, -0.017569f, +0.003431f, +0.008094f, -0.026695f, -0.010208f, -0.002320f, + +0.029278f, -0.006208f, -0.007655f, -0.010548f, -0.010396f, +0.023114f, +0.018477f, -0.028938f, +0.040739f, +0.039646f, + +0.010267f, +0.000551f, -0.015182f, -0.018647f, -0.001406f, +0.006620f, -0.009372f, +0.010090f, +0.000715f, -0.001398f, + +0.011360f, -0.015149f, -0.001374f, -0.001394f, -0.009512f, +0.000998f, +0.007412f, +0.009608f, +0.009894f, +0.004494f, + +0.006518f, +0.003137f, +0.009441f, -0.006757f, -0.004816f, -0.000452f, +0.001777f, +0.000398f, +0.000316f, -0.006546f, + +0.013469f, +0.005176f, -0.004211f, +0.002444f, +0.001150f, +0.001522f, -0.006408f, +0.002933f, +0.001106f, +0.003566f, + -0.007128f, -0.004782f, +0.006734f, -0.002494f, +0.004184f, +0.000425f, -0.008288f, -0.002713f, -0.003025f, -0.003389f, + +0.002652f, -0.001484f, -0.004106f, +0.002018f, -0.003137f, -0.002498f, +0.006162f, -0.000896f, +0.001431f, +0.004009f, + -0.000126f, -0.003960f, +0.004687f, +0.000446f, +0.002373f, +0.003136f, +0.002390f, +0.001739f, -0.001817f, +0.001493f, + +0.001263f, -0.001676f, -0.003422f, -0.001215f, +0.002887f, +0.000610f + }, + { + +0.000161f, +0.046753f, -0.042440f, -0.003481f, +0.001547f, -0.003964f, +0.001006f, -0.005170f, +0.003875f, +0.019340f, + -0.003822f, +0.018668f, -0.009954f, -0.020352f, -0.011710f, -0.007144f, -0.038271f, -0.010065f, -0.009154f, -0.001139f, + -0.005927f, +0.003230f, -0.000611f, -0.006341f, +0.009010f, +0.016773f, +0.004814f, -0.007061f, -0.019337f, +0.023640f, + -0.022372f, +0.005053f, -0.001236f, -0.009674f, -0.008817f, -0.001858f, -0.015841f, +0.003066f, -0.006773f, -0.007286f, + -0.013093f, -0.003543f, +0.005142f, -0.006734f, +0.002152f, -0.001409f, -0.002914f, +0.001088f, -0.000694f, +0.001029f, + -0.011573f, -0.001619f, +0.004136f, -0.003639f, -0.000316f, -0.000774f, -0.003571f, +0.004885f, -0.001493f, +0.008692f, + +0.016670f, +0.004528f, -0.000800f, +0.001760f, -0.003250f, +0.000338f, -0.003582f, +0.000153f, +0.003703f, +0.000056f, + -0.000395f, -0.001534f, +0.002339f, -0.002129f, -0.001780f, -0.000877f, -0.003557f, -0.003222f, +0.004027f, -0.001778f, + +0.006297f, -0.002251f, -0.001548f, +0.001523f, +0.001379f, -0.005081f, +0.004589f, -0.001233f, +0.000150f, -0.003022f, + -0.004808f, +0.001242f, +0.003581f, +0.000556f, -0.003241f, +0.000748f + }, + { + -0.031616f, +0.004171f, +0.055720f, -0.012970f, -0.001912f, -0.002699f, +0.007151f, +0.004118f, +0.005572f, -0.004886f, + +0.019424f, -0.032444f, +0.009721f, +0.037078f, +0.012639f, -0.001079f, -0.006975f, -0.005031f, -0.007941f, +0.013708f, + -0.006919f, +0.005537f, +0.018062f, +0.004651f, +0.011766f, +0.000413f, +0.022392f, -0.008779f, +0.013065f, -0.007175f, + +0.012082f, -0.021475f, -0.004415f, -0.005830f, -0.006933f, +0.010433f, -0.004565f, -0.008388f, +0.002742f, -0.004192f, + +0.012332f, +0.004180f, +0.000389f, +0.015356f, -0.000701f, +0.003755f, +0.001741f, -0.003059f, +0.011570f, +0.010840f, + +0.007822f, -0.007358f, +0.000593f, +0.001600f, -0.005899f, +0.015758f, +0.002949f, +0.002925f, -0.000809f, +0.001843f, + -0.004935f, +0.002011f, +0.000980f, +0.001887f, +0.006793f, +0.003261f, +0.001009f, +0.000891f, +0.002155f, +0.010542f, + -0.002160f, +0.002119f, -0.001695f, -0.005932f, +0.003848f, +0.001797f, +0.001021f, -0.003126f, -0.001764f, -0.002321f, + -0.000680f, +0.001573f, +0.004128f, -0.002920f, +0.000540f, +0.006964f, -0.005041f, +0.000538f, +0.001881f, -0.001644f, + -0.002068f, +0.001248f, +0.001424f, -0.001598f, -0.000802f, +0.001964f + }, + { + -0.002980f, +0.051164f, -0.106722f, -0.005785f, -0.003325f, +0.004115f, -0.003836f, +0.002517f, -0.012197f, -0.003898f, + -0.010134f, +0.000034f, +0.022549f, +0.014778f, -0.011895f, +0.017548f, -0.023992f, +0.000556f, -0.029735f, -0.003151f, + -0.003804f, -0.012766f, -0.011415f, +0.013859f, -0.038019f, +0.002978f, +0.003042f, -0.036358f, -0.012445f, +0.005333f, + -0.002609f, +0.012468f, +0.000572f, -0.001156f, -0.007183f, +0.000066f, -0.003780f, -0.009213f, -0.022857f, -0.000080f, + -0.004765f, -0.009516f, -0.006484f, +0.003464f, +0.004425f, -0.004231f, +0.016770f, +0.002814f, +0.005005f, +0.007444f, + -0.008127f, -0.014808f, +0.008414f, -0.003531f, -0.004455f, -0.002855f, +0.000448f, -0.003181f, -0.001006f, -0.001415f, + -0.011047f, +0.005857f, +0.001903f, +0.007869f, +0.000165f, +0.001294f, +0.001052f, -0.000636f, -0.004069f, +0.002945f, + -0.002112f, -0.001158f, +0.001347f, -0.000753f, +0.000904f, +0.004755f, -0.004521f, +0.002865f, -0.003278f, -0.002183f, + -0.005286f, -0.001806f, +0.001003f, +0.002520f, +0.000103f, +0.000592f, -0.002543f, -0.003133f, -0.000018f, -0.000358f, + -0.001530f, -0.000260f, -0.002082f, -0.001249f, -0.000173f, +0.001239f + }, + { + -0.032962f, -0.017536f, +0.054289f, -0.018492f, -0.010057f, -0.001358f, +0.000944f, -0.009297f, -0.006956f, -0.005455f, + +0.043093f, +0.008565f, -0.012551f, +0.040225f, -0.008940f, +0.018775f, -0.054045f, -0.019893f, -0.025664f, -0.007817f, + +0.007069f, -0.018699f, +0.013958f, -0.010964f, -0.007038f, +0.014319f, -0.019341f, +0.008906f, -0.017172f, -0.009405f, + -0.008127f, -0.009442f, -0.006507f, -0.004257f, +0.014373f, +0.005118f, +0.010695f, -0.018913f, +0.007727f, -0.015810f, + -0.006707f, -0.009331f, -0.002146f, +0.002063f, +0.001374f, +0.002904f, +0.005185f, +0.006239f, -0.001134f, +0.004225f, + -0.002038f, +0.000498f, -0.000025f, -0.007254f, +0.003126f, -0.001400f, +0.001274f, +0.000016f, +0.002479f, -0.007593f, + +0.002824f, +0.000728f, -0.004618f, +0.003341f, -0.006036f, +0.006501f, -0.000731f, -0.003566f, +0.003556f, +0.002134f, + +0.004238f, -0.001066f, -0.003473f, -0.003398f, +0.004393f, -0.002285f, +0.007782f, -0.000795f, +0.000799f, +0.000896f, + +0.004020f, +0.002287f, -0.001653f, -0.003014f, +0.001580f, +0.004677f, +0.001002f, +0.000396f, +0.000912f, -0.002616f, + -0.000682f, +0.000262f, -0.001027f, +0.002152f, -0.001293f, +0.002694f + }, + { + +0.002235f, -0.094738f, +0.000163f, -0.008835f, +0.011160f, +0.003144f, +0.037546f, -0.036438f, -0.007498f, -0.013921f, + +0.003256f, -0.014615f, -0.001291f, +0.007549f, +0.008166f, -0.021228f, +0.019592f, -0.013473f, +0.018088f, -0.000963f, + -0.003231f, -0.000110f, -0.005221f, +0.017757f, +0.019820f, -0.001119f, +0.012148f, +0.006802f, +0.014735f, +0.006683f, + -0.005742f, +0.024175f, +0.006812f, +0.009214f, -0.008842f, -0.003371f, +0.008822f, -0.011612f, -0.012456f, -0.017973f, + +0.010198f, -0.007393f, +0.009727f, +0.000777f, +0.015733f, -0.006830f, +0.007774f, -0.010228f, +0.005531f, -0.017552f, + -0.003059f, +0.001339f, +0.000982f, -0.003977f, -0.006650f, +0.015393f, +0.001534f, +0.010518f, +0.001066f, +0.003582f, + -0.007849f, +0.003950f, -0.009030f, -0.000990f, -0.000266f, +0.005088f, -0.005387f, +0.001473f, +0.001394f, -0.009861f, + -0.005032f, -0.002296f, -0.006413f, -0.004048f, -0.003470f, +0.002228f, -0.000061f, +0.001439f, +0.003082f, -0.004824f, + -0.005757f, -0.006111f, -0.007283f, +0.004536f, +0.001144f, +0.002302f, -0.004033f, +0.001667f, +0.001442f, +0.001942f, + -0.001166f, -0.000406f, +0.002535f, +0.004140f, +0.000993f, -0.003168f + }, + { + -0.015330f, +0.183692f, -0.042598f, -0.018534f, +0.008643f, +0.006985f, -0.045937f, +0.026815f, +0.081074f, +0.004521f, + -0.031585f, -0.011249f, +0.007178f, +0.018369f, +0.015137f, -0.013525f, -0.014235f, -0.025445f, +0.000303f, -0.007623f, + +0.009782f, +0.000014f, -0.005366f, +0.004132f, -0.008071f, -0.009389f, -0.005871f, +0.011792f, -0.005657f, -0.028522f, + -0.002409f, -0.008389f, +0.014607f, +0.006108f, +0.016969f, -0.014851f, +0.001718f, -0.019006f, +0.000355f, -0.009543f, + -0.003722f, +0.006171f, -0.013999f, +0.008440f, +0.004320f, -0.000042f, -0.014147f, -0.016105f, +0.007576f, -0.001421f, + -0.009172f, -0.000687f, +0.002294f, -0.000274f, +0.004047f, -0.003633f, -0.000089f, -0.000001f, -0.012903f, +0.007291f, + +0.000181f, +0.010706f, +0.004877f, -0.001080f, -0.000311f, -0.001972f, -0.000577f, -0.002234f, -0.005038f, +0.000342f, + -0.003216f, +0.003563f, +0.005463f, -0.002514f, -0.004380f, +0.001522f, +0.001605f, +0.005080f, -0.004904f, +0.004675f, + -0.001612f, -0.000295f, -0.005501f, +0.004514f, -0.006406f, -0.000129f, -0.003112f, +0.001432f, -0.003160f, +0.001071f, + -0.003257f, -0.001152f, -0.003316f, +0.004936f, +0.001243f, -0.002351f + }, + { + +0.001570f, -0.093088f, +0.019595f, -0.012280f, +0.007700f, -0.020111f, -0.003884f, +0.007440f, +0.004461f, +0.001452f, + +0.008372f, +0.020737f, -0.001422f, +0.009625f, -0.014956f, +0.006989f, -0.002478f, +0.014408f, -0.018665f, -0.002157f, + -0.012034f, +0.016346f, +0.000161f, +0.017993f, -0.005104f, +0.010822f, +0.010964f, +0.005403f, +0.027376f, -0.003297f, + +0.004203f, +0.028757f, +0.002286f, +0.016283f, +0.011420f, -0.009283f, -0.008250f, +0.024062f, +0.015640f, +0.010224f, + +0.018421f, +0.003410f, +0.010934f, +0.011475f, +0.002740f, -0.010191f, +0.001332f, +0.022431f, +0.003248f, +0.000616f, + +0.011286f, -0.003057f, +0.002129f, -0.009487f, +0.001309f, -0.007982f, +0.004090f, -0.006008f, -0.005977f, +0.000182f, + +0.005857f, -0.006665f, +0.008795f, +0.008053f, +0.006801f, +0.002061f, -0.009691f, -0.001959f, +0.002252f, +0.001231f, + +0.002412f, +0.001280f, +0.005845f, -0.007001f, -0.005124f, +0.001746f, -0.000935f, +0.003201f, +0.008122f, -0.007590f, + -0.006072f, +0.003211f, +0.001358f, -0.001299f, -0.000779f, +0.002321f, +0.003803f, +0.002632f, +0.000117f, -0.001014f, + +0.003644f, +0.003661f, -0.001206f, +0.004967f, -0.000956f, -0.001924f + }, + { + -0.002170f, -0.208905f, +0.061525f, -0.018328f, -0.020898f, -0.022671f, -0.047474f, +0.012242f, -0.007397f, +0.013651f, + -0.040959f, -0.014857f, -0.014094f, +0.017028f, -0.023281f, -0.018317f, +0.006240f, -0.010914f, +0.005261f, -0.019295f, + +0.004400f, +0.002584f, -0.011122f, +0.014543f, -0.020317f, +0.002102f, -0.024054f, -0.013505f, -0.001595f, -0.000519f, + +0.009590f, -0.000767f, -0.020612f, -0.011376f, +0.008195f, +0.005666f, +0.003168f, -0.001552f, -0.005149f, +0.005382f, + +0.015364f, -0.015019f, +0.002296f, -0.002669f, +0.006958f, -0.005383f, +0.004858f, -0.010491f, +0.011525f, +0.004449f, + +0.010538f, +0.003259f, -0.004183f, -0.012133f, +0.005382f, -0.007703f, +0.009778f, -0.004639f, -0.003485f, +0.004595f, + +0.005729f, -0.002987f, +0.001275f, +0.005320f, -0.004954f, -0.004814f, +0.007993f, +0.007436f, +0.004062f, +0.008883f, + +0.008987f, +0.006848f, -0.000061f, +0.002626f, -0.005863f, +0.009683f, +0.005117f, +0.003719f, -0.003601f, +0.001832f, + -0.007562f, -0.001961f, -0.002064f, +0.006864f, +0.000264f, -0.005180f, -0.001358f, +0.000014f, -0.001312f, +0.002116f, + -0.001858f, +0.001952f, +0.005867f, +0.004866f, +0.002249f, -0.000985f + }, + { + +0.003717f, -0.004608f, -0.029781f, -0.005521f, -0.003705f, -0.009974f, -0.021285f, +0.004005f, +0.022882f, -0.004373f, + +0.004108f, -0.012403f, +0.015462f, -0.037023f, +0.051828f, -0.010967f, +0.001644f, +0.007402f, +0.012384f, -0.004198f, + -0.023648f, +0.003958f, +0.000436f, +0.002651f, -0.031679f, +0.015343f, +0.001699f, +0.007498f, +0.012501f, -0.044819f, + -0.024343f, +0.008234f, +0.024100f, +0.001060f, +0.014911f, -0.004716f, +0.002222f, +0.004165f, +0.004896f, -0.007539f, + -0.012696f, +0.002510f, -0.005269f, -0.001639f, -0.010222f, +0.001150f, +0.001275f, -0.003557f, -0.007022f, -0.007283f, + +0.011971f, +0.006167f, +0.003592f, -0.001347f, -0.002411f, +0.005455f, -0.006392f, +0.002648f, -0.001411f, +0.009149f, + +0.001977f, -0.010948f, -0.005626f, +0.008424f, -0.001735f, +0.002005f, -0.003910f, +0.000825f, +0.000668f, -0.001183f, + +0.004618f, +0.001162f, -0.004849f, +0.000233f, +0.001232f, +0.000048f, -0.003835f, +0.000377f, -0.000537f, +0.006707f, + +0.007806f, +0.002096f, +0.000442f, -0.002167f, -0.000312f, -0.001785f, +0.000116f, -0.002250f, -0.002265f, -0.001380f, + -0.003043f, -0.000177f, -0.001729f, +0.000055f, +0.003822f, -0.007051f + }, + { + -0.008563f, -0.130346f, +0.016786f, +0.003924f, +0.016339f, +0.005727f, -0.035318f, +0.005955f, -0.015946f, -0.000205f, + -0.009639f, -0.030825f, -0.004764f, +0.010088f, +0.037581f, +0.006841f, +0.001748f, -0.015465f, +0.001483f, -0.003301f, + +0.033071f, -0.001256f, +0.054065f, +0.017989f, -0.001337f, -0.012744f, -0.002484f, -0.002996f, +0.006377f, -0.018390f, + -0.037228f, -0.027004f, +0.008698f, +0.017429f, +0.006433f, -0.014915f, +0.005782f, +0.016954f, +0.019800f, +0.002988f, + +0.001183f, +0.011023f, -0.009714f, +0.004885f, -0.001050f, -0.016276f, +0.004968f, +0.021738f, +0.004405f, +0.001587f, + -0.013441f, -0.000454f, -0.006525f, -0.001605f, +0.001151f, -0.007986f, -0.001814f, +0.003689f, +0.003778f, -0.000443f, + -0.004079f, +0.000605f, -0.007378f, +0.000687f, +0.000344f, +0.002556f, +0.007193f, +0.012868f, -0.001856f, +0.002316f, + -0.001594f, +0.004491f, +0.003209f, -0.000186f, -0.003540f, -0.008302f, -0.003522f, +0.003608f, -0.001111f, -0.008072f, + -0.004345f, +0.008729f, -0.000708f, -0.000980f, +0.002526f, -0.000441f, +0.005187f, -0.000566f, -0.004032f, +0.002458f, + +0.005634f, +0.002100f, +0.002801f, +0.001590f, +0.001434f, +0.000811f + } + }, + { + { + -0.001143f, +0.068575f, -0.005898f, +0.048672f, +0.001942f, +0.000487f, -0.005893f, -0.003453f, +0.012261f, -0.007128f, + +0.020831f, -0.009744f, +0.020686f, +0.006728f, -0.018904f, -0.014113f, -0.016245f, -0.030090f, -0.024684f, -0.015735f, + +0.016716f, +0.002956f, -0.011709f, +0.018196f, -0.001015f, -0.001116f, -0.000541f, -0.000476f, +0.008752f, +0.000111f, + +0.016900f, -0.004444f, +0.009528f, -0.002057f, -0.004987f, -0.003335f, +0.002764f, +0.012761f, -0.002289f, +0.011006f, + -0.000668f, +0.004252f, -0.004279f, +0.000500f, +0.012754f, -0.003631f, +0.001771f, +0.011643f, -0.003275f, -0.014367f, + -0.007954f, -0.000084f, -0.000499f, +0.003713f, +0.004314f, -0.007540f, -0.011072f, -0.002441f, +0.003512f, +0.002246f, + -0.000810f, -0.000982f, +0.008841f, -0.005586f, -0.001719f, +0.006043f, +0.000701f, +0.002096f, -0.001565f, -0.000327f, + +0.004353f, -0.005521f, +0.000773f, +0.007451f, -0.002282f, -0.001915f, +0.000502f, -0.002402f, +0.003881f, +0.004121f, + -0.003196f, +0.007759f, -0.000401f, +0.003347f, -0.001283f, +0.001026f, +0.001037f, -0.001209f, -0.000308f, +0.002559f, + -0.000112f, -0.000786f, -0.003310f, -0.002840f, -0.000177f, +0.000467f + }, + { + -0.019514f, +0.150088f, +0.087840f, -0.037265f, -0.001091f, +0.011784f, +0.002981f, -0.040237f, -0.009647f, -0.010542f, + +0.007258f, +0.013813f, -0.004088f, -0.007798f, -0.022093f, +0.002551f, -0.002765f, -0.011901f, -0.001084f, -0.003725f, + +0.003118f, -0.001518f, +0.009865f, -0.001381f, -0.005341f, +0.004032f, +0.010645f, -0.021300f, -0.002241f, +0.000941f, + -0.010021f, -0.002898f, +0.001139f, +0.008990f, -0.000910f, +0.019277f, +0.012249f, -0.008984f, -0.018268f, -0.004129f, + +0.004114f, -0.000847f, +0.004774f, -0.009118f, +0.003723f, -0.000058f, -0.001739f, +0.008627f, +0.006169f, -0.007117f, + -0.002186f, -0.010101f, -0.006553f, -0.001294f, +0.004012f, -0.005970f, -0.003240f, +0.003693f, -0.010121f, -0.000464f, + +0.007261f, +0.001735f, +0.000824f, -0.001624f, -0.006098f, +0.002451f, -0.000348f, +0.000060f, +0.001920f, -0.003100f, + +0.000792f, -0.002497f, -0.000652f, -0.003042f, +0.000847f, -0.000221f, +0.003454f, +0.002646f, +0.001093f, +0.001203f, + -0.000842f, -0.000768f, +0.000606f, -0.001677f, -0.000818f, -0.003155f, +0.001041f, +0.002518f, -0.000730f, +0.000159f, + -0.001433f, -0.000998f, -0.000318f, -0.001044f, +0.002412f, -0.000891f + }, + { + -0.001328f, -0.224486f, -0.018828f, +0.071426f, -0.017968f, +0.009861f, +0.007308f, +0.002954f, -0.028475f, +0.011202f, + -0.000005f, -0.030057f, +0.017213f, +0.005393f, +0.010614f, +0.006406f, +0.000426f, +0.001337f, -0.009842f, +0.013573f, + +0.007971f, +0.002027f, -0.018924f, -0.000539f, -0.004448f, -0.013979f, -0.009871f, -0.003672f, +0.002159f, +0.005183f, + +0.019444f, +0.006694f, -0.005337f, -0.014764f, +0.011891f, +0.009926f, +0.009514f, +0.009010f, -0.007340f, -0.000207f, + +0.008083f, -0.003723f, -0.003094f, -0.001204f, +0.003962f, +0.007598f, -0.014918f, -0.005282f, -0.000789f, +0.005717f, + +0.002018f, +0.000041f, +0.001387f, -0.000502f, +0.002086f, +0.002669f, -0.000345f, +0.001724f, -0.011352f, +0.001573f, + -0.000552f, +0.003530f, +0.000630f, -0.001800f, -0.004333f, -0.002844f, -0.002135f, -0.004752f, -0.000975f, +0.002095f, + -0.002018f, -0.003082f, +0.003170f, -0.002040f, -0.001452f, -0.001800f, +0.000435f, -0.002457f, -0.002082f, -0.000948f, + -0.001543f, +0.002431f, -0.001791f, -0.000936f, +0.001171f, -0.000019f, +0.000105f, -0.003906f, -0.004285f, +0.001234f, + +0.000070f, -0.001079f, -0.002675f, -0.000769f, +0.000318f, +0.000185f + }, + { + -0.000715f, -0.057882f, -0.022096f, +0.029521f, -0.000332f, -0.001627f, +0.003221f, +0.000188f, +0.006593f, +0.000757f, + +0.003193f, +0.015114f, -0.003605f, +0.007292f, +0.003332f, +0.005734f, -0.015620f, -0.007741f, +0.001278f, -0.004893f, + +0.009488f, -0.013542f, +0.009150f, -0.009995f, +0.005477f, -0.008406f, -0.016376f, +0.007576f, +0.012659f, -0.018424f, + +0.018615f, -0.010790f, -0.001054f, +0.000657f, +0.002913f, -0.001626f, +0.015860f, +0.005010f, +0.011295f, -0.003166f, + -0.011501f, +0.005234f, -0.010657f, +0.003711f, -0.000095f, +0.006956f, -0.003357f, -0.002190f, +0.000409f, -0.005929f, + +0.002997f, -0.001631f, -0.003395f, -0.006286f, +0.001037f, +0.002353f, +0.004771f, -0.005593f, +0.001669f, +0.000317f, + -0.001956f, +0.005994f, -0.005967f, +0.000561f, +0.004019f, -0.004858f, +0.001000f, +0.003320f, +0.004438f, +0.005781f, + +0.001857f, +0.000510f, -0.000424f, +0.002946f, +0.001003f, -0.000145f, -0.001641f, -0.005682f, +0.000545f, +0.003388f, + +0.001010f, -0.000268f, -0.002218f, +0.001890f, -0.001822f, -0.003307f, +0.001951f, +0.000476f, -0.004459f, -0.000843f, + -0.000303f, +0.000461f, +0.000339f, -0.001087f, +0.003940f, -0.001706f + }, + { + +0.027734f, -0.010680f, -0.027167f, -0.016215f, +0.003459f, -0.003731f, +0.005124f, -0.015293f, -0.022160f, -0.000010f, + +0.006510f, -0.001900f, -0.004287f, +0.002985f, -0.007554f, +0.001594f, +0.025690f, -0.000397f, +0.021443f, +0.028130f, + +0.010719f, -0.003980f, -0.009312f, -0.006826f, -0.010275f, -0.001280f, -0.009048f, +0.024989f, -0.005887f, -0.008121f, + +0.011006f, -0.013793f, -0.007872f, -0.003405f, +0.004906f, -0.003209f, +0.017967f, +0.007185f, +0.004059f, +0.016960f, + +0.000771f, +0.004536f, +0.003016f, -0.003233f, -0.008576f, +0.001453f, +0.000285f, -0.001302f, -0.001655f, +0.010603f, + -0.000107f, -0.002378f, +0.004938f, -0.001241f, +0.005825f, -0.002283f, -0.000047f, +0.003610f, +0.002614f, -0.004735f, + -0.003340f, -0.002597f, -0.003832f, +0.003048f, +0.003991f, +0.000042f, -0.007351f, -0.001476f, -0.000982f, -0.000645f, + -0.001275f, +0.000315f, -0.002035f, -0.003250f, +0.001445f, -0.004637f, +0.004750f, -0.000317f, +0.001785f, +0.004836f, + -0.001863f, +0.000875f, +0.000582f, +0.003755f, -0.001972f, +0.005717f, +0.000949f, +0.003163f, +0.000455f, -0.000563f, + -0.000430f, -0.000866f, -0.004417f, -0.000208f, +0.002175f, -0.000390f + }, + { + +0.003184f, +0.007806f, +0.003880f, -0.013882f, -0.006110f, +0.003003f, -0.000211f, -0.004711f, +0.006746f, +0.009672f, + +0.006869f, +0.006073f, -0.009043f, -0.012054f, -0.022056f, -0.003790f, -0.016950f, -0.021961f, -0.010519f, -0.006096f, + +0.004609f, -0.004582f, +0.003556f, +0.004551f, -0.000282f, +0.004844f, +0.008621f, -0.000772f, -0.006479f, -0.021205f, + -0.000725f, -0.006573f, +0.008233f, -0.009769f, -0.006219f, +0.000599f, -0.009600f, +0.000234f, -0.007039f, -0.003305f, + -0.009730f, -0.003637f, +0.004155f, -0.008404f, -0.000481f, -0.007459f, +0.011703f, -0.006856f, +0.000304f, -0.003061f, + -0.009816f, +0.001689f, +0.005261f, -0.000090f, -0.003390f, +0.001854f, -0.004803f, +0.004140f, +0.003706f, +0.004458f, + +0.014223f, +0.004497f, +0.000108f, +0.003341f, -0.000305f, -0.004412f, +0.000375f, +0.001595f, +0.002040f, +0.000545f, + -0.002489f, +0.000349f, +0.001684f, -0.004074f, -0.000501f, -0.001557f, -0.003392f, -0.000011f, +0.003076f, +0.001093f, + +0.001408f, -0.000331f, -0.000473f, +0.000561f, +0.001594f, +0.000234f, +0.000731f, -0.002249f, -0.002438f, -0.000365f, + -0.001627f, -0.002075f, +0.003073f, +0.001816f, -0.003343f, -0.001849f + }, + { + +0.022128f, -0.057500f, +0.019618f, -0.005925f, +0.019735f, -0.004215f, +0.004425f, +0.026705f, -0.020653f, -0.015615f, + +0.010703f, +0.001349f, +0.007862f, +0.042323f, -0.003454f, +0.010343f, -0.006430f, -0.019737f, +0.021494f, -0.006835f, + -0.002198f, -0.002578f, +0.025355f, +0.007605f, -0.003318f, +0.005063f, +0.009239f, +0.012728f, -0.000971f, -0.009354f, + +0.007236f, -0.022961f, -0.009368f, +0.008648f, -0.000618f, +0.009778f, -0.011134f, +0.000817f, -0.008140f, +0.000882f, + +0.010699f, +0.010004f, +0.005608f, +0.012291f, -0.002760f, -0.005300f, +0.006362f, +0.001858f, +0.008759f, +0.009600f, + +0.007009f, -0.005996f, +0.002444f, +0.002907f, -0.004485f, +0.005895f, +0.009464f, -0.003403f, +0.002337f, -0.003550f, + -0.000616f, +0.002499f, +0.004847f, +0.000033f, +0.004834f, +0.000400f, +0.000564f, +0.004650f, +0.002753f, +0.005633f, + +0.005759f, -0.002957f, -0.003508f, -0.004110f, +0.004904f, -0.000165f, +0.001206f, -0.000465f, -0.002452f, -0.003893f, + +0.002562f, +0.002141f, -0.000921f, -0.000751f, +0.002201f, +0.002624f, -0.000657f, -0.001010f, -0.000113f, -0.000794f, + -0.000740f, +0.002531f, -0.001086f, +0.000784f, -0.001049f, -0.000874f + }, + { + +0.006384f, -0.064413f, -0.007065f, -0.015080f, -0.003242f, +0.001266f, +0.001807f, -0.005285f, -0.010062f, -0.005209f, + +0.002458f, -0.004954f, +0.000570f, +0.006247f, +0.031468f, -0.009982f, +0.007483f, -0.005818f, -0.014554f, -0.014531f, + -0.025262f, +0.003636f, -0.010449f, +0.001264f, -0.026524f, -0.005455f, -0.011426f, -0.014181f, -0.010075f, +0.003742f, + +0.000594f, -0.001212f, -0.002560f, +0.006268f, -0.002341f, -0.005520f, -0.002508f, -0.011293f, -0.019700f, +0.008351f, + -0.004847f, -0.015274f, -0.007641f, +0.005407f, -0.004617f, +0.001508f, +0.011370f, +0.001722f, +0.010522f, +0.001135f, + -0.004051f, -0.007739f, +0.003837f, -0.003499f, +0.000115f, -0.003199f, -0.005565f, +0.000190f, -0.002832f, -0.001184f, + -0.003476f, +0.003004f, +0.005795f, +0.002622f, +0.001317f, +0.006845f, -0.002268f, -0.003144f, -0.001862f, +0.002533f, + +0.000895f, -0.004549f, +0.004041f, -0.000977f, +0.000309f, +0.003016f, -0.002933f, +0.001218f, -0.003508f, +0.001128f, + -0.000977f, -0.001707f, +0.000382f, -0.000909f, +0.003724f, -0.001081f, -0.003603f, -0.002180f, -0.000487f, -0.001391f, + -0.000252f, -0.000180f, -0.001113f, -0.000863f, -0.000442f, +0.001403f + }, + { + +0.026601f, -0.070384f, +0.009711f, -0.017724f, +0.002638f, +0.008098f, -0.001720f, -0.011152f, -0.013533f, +0.003157f, + +0.038805f, +0.011451f, +0.004871f, +0.013884f, +0.013992f, -0.004630f, -0.058494f, -0.011846f, -0.018006f, -0.010705f, + -0.000699f, -0.000807f, -0.001474f, -0.002898f, -0.000020f, -0.001002f, -0.002807f, +0.006733f, -0.010913f, -0.009805f, + -0.029936f, +0.001567f, -0.007157f, -0.002863f, +0.008752f, +0.012042f, -0.002798f, -0.016984f, +0.004680f, -0.004051f, + -0.020673f, +0.002134f, -0.002971f, -0.001138f, +0.004404f, +0.003253f, +0.005382f, +0.002242f, -0.001118f, +0.001345f, + +0.002085f, +0.000202f, +0.000220f, -0.004549f, +0.005708f, -0.006055f, +0.002249f, -0.004556f, +0.005934f, -0.002622f, + +0.002971f, -0.000743f, -0.001412f, +0.001016f, +0.001560f, -0.004029f, -0.005732f, +0.001099f, +0.002706f, -0.000650f, + +0.005015f, +0.001243f, -0.003916f, +0.001103f, -0.000463f, +0.000173f, +0.003352f, +0.001963f, -0.001570f, +0.005224f, + -0.000898f, +0.001425f, -0.000239f, -0.002052f, +0.004084f, +0.000030f, +0.002038f, -0.000275f, +0.001187f, -0.001534f, + -0.000292f, -0.001351f, -0.003144f, +0.002945f, +0.001854f, +0.000262f + }, + { + -0.004201f, -0.088740f, +0.000268f, -0.018073f, +0.009711f, +0.000881f, +0.019489f, -0.023089f, -0.006320f, +0.003650f, + -0.001914f, -0.009645f, -0.010280f, +0.014329f, -0.005318f, -0.014725f, +0.007101f, +0.001927f, -0.026656f, +0.040479f, + -0.003448f, +0.003178f, +0.000551f, +0.008009f, +0.017888f, -0.000344f, -0.001989f, +0.013825f, +0.009062f, +0.010423f, + +0.004107f, +0.018786f, +0.007249f, -0.002390f, +0.008853f, -0.000330f, -0.004708f, -0.005968f, -0.006606f, -0.006185f, + +0.000572f, -0.000090f, +0.007841f, +0.008641f, -0.004851f, +0.005857f, +0.006427f, -0.000463f, -0.000154f, -0.019273f, + -0.000706f, -0.001019f, -0.003608f, +0.008025f, -0.000869f, +0.004669f, +0.008649f, +0.001301f, +0.008385f, -0.001344f, + -0.001890f, -0.005676f, +0.001169f, -0.003369f, +0.004944f, -0.001734f, -0.007070f, +0.001641f, -0.003067f, -0.002507f, + -0.000383f, -0.004993f, -0.004176f, -0.002882f, -0.007730f, +0.004110f, +0.000987f, -0.002505f, +0.004912f, -0.002637f, + -0.008130f, -0.001395f, -0.007987f, +0.000030f, -0.000085f, +0.000621f, -0.003358f, +0.001835f, +0.000919f, +0.002264f, + -0.002056f, +0.002628f, +0.001291f, +0.001571f, +0.002026f, -0.001453f + }, + { + +0.013697f, +0.136584f, -0.029659f, -0.011855f, -0.006170f, +0.026274f, -0.011679f, +0.048915f, +0.022308f, +0.018499f, + -0.017485f, +0.000308f, +0.026969f, -0.010652f, -0.003446f, +0.003895f, -0.012234f, -0.018757f, -0.009949f, -0.005596f, + +0.008095f, +0.008788f, +0.008967f, -0.009677f, -0.011910f, -0.011424f, -0.009280f, +0.024935f, -0.017242f, -0.023721f, + +0.000876f, +0.009992f, -0.002307f, +0.001078f, +0.028525f, -0.003733f, -0.018951f, -0.014651f, -0.001441f, -0.018460f, + +0.000777f, +0.005166f, -0.006269f, +0.007588f, -0.001297f, -0.000510f, -0.020192f, -0.005266f, +0.004607f, -0.007554f, + +0.001244f, +0.000474f, +0.003902f, +0.002344f, +0.004459f, -0.003528f, -0.005094f, -0.003418f, +0.002445f, +0.000521f, + -0.001651f, +0.010354f, +0.005913f, -0.000884f, -0.000638f, +0.002481f, -0.001073f, -0.008233f, -0.003161f, +0.002267f, + -0.002189f, +0.005328f, -0.002364f, -0.001090f, -0.002552f, +0.001091f, +0.002699f, +0.002258f, -0.003079f, +0.002337f, + +0.001884f, -0.001237f, -0.002571f, -0.002100f, -0.001579f, -0.002674f, -0.002310f, -0.000292f, -0.000071f, -0.000716f, + -0.004123f, -0.001824f, -0.000240f, +0.001222f, +0.002713f, -0.002381f + }, + { + -0.001548f, -0.062638f, +0.001029f, -0.004092f, -0.012280f, -0.010500f, +0.002613f, -0.008326f, +0.013909f, -0.001664f, + +0.022736f, +0.012445f, +0.018618f, -0.015711f, -0.008955f, +0.002334f, -0.001407f, -0.004700f, -0.013177f, +0.013799f, + +0.007391f, +0.003653f, +0.005574f, -0.000913f, +0.015002f, +0.007030f, +0.015033f, +0.006969f, +0.014568f, -0.014898f, + +0.023073f, +0.017756f, +0.008230f, +0.010113f, +0.008017f, -0.012017f, +0.008505f, +0.021037f, +0.007730f, +0.010619f, + +0.004236f, +0.005603f, +0.011795f, +0.005464f, +0.006691f, -0.005660f, -0.000098f, +0.016333f, +0.008388f, -0.008175f, + +0.011015f, +0.008376f, -0.004848f, -0.004745f, -0.005139f, -0.004111f, +0.001281f, -0.000885f, -0.007826f, -0.001710f, + +0.009713f, -0.005349f, +0.008230f, +0.006780f, +0.007221f, -0.003248f, +0.001917f, -0.007969f, +0.005923f, -0.000373f, + +0.000170f, +0.003956f, +0.000511f, -0.001011f, -0.006746f, -0.004406f, +0.006192f, +0.001538f, +0.009791f, -0.010936f, + -0.002326f, +0.005094f, -0.001715f, -0.001878f, -0.000245f, +0.000088f, +0.003844f, +0.003648f, -0.001259f, +0.000295f, + +0.004485f, +0.001568f, +0.001024f, +0.002747f, +0.001174f, -0.002193f + }, + { + -0.005779f, -0.109258f, -0.019697f, +0.011958f, -0.054739f, -0.029975f, -0.040327f, -0.006133f, +0.013302f, -0.014056f, + -0.030199f, -0.012238f, -0.023533f, +0.033846f, +0.011531f, -0.037488f, -0.004735f, +0.001687f, -0.009596f, -0.004338f, + -0.003174f, +0.008041f, -0.004001f, -0.016754f, -0.002372f, -0.003533f, -0.016922f, -0.013669f, -0.003978f, -0.015142f, + +0.008845f, +0.005708f, -0.010469f, -0.009663f, -0.004573f, +0.007956f, +0.016815f, -0.015501f, -0.008446f, +0.020983f, + -0.000510f, -0.005130f, +0.002504f, -0.000245f, -0.004381f, +0.008709f, +0.000152f, +0.001741f, -0.005499f, +0.001631f, + +0.006027f, +0.001673f, -0.000567f, -0.004398f, -0.000565f, +0.003689f, +0.001863f, -0.005364f, +0.010767f, +0.000166f, + -0.001725f, +0.001671f, +0.001010f, +0.001808f, -0.003650f, -0.003525f, +0.005229f, +0.010754f, +0.003604f, +0.005509f, + +0.012599f, +0.000492f, +0.001666f, +0.002693f, +0.001501f, +0.004253f, +0.005416f, +0.004153f, -0.003968f, -0.000306f, + -0.003957f, -0.002615f, -0.005637f, +0.004273f, -0.000842f, +0.000228f, -0.003568f, +0.002151f, -0.001351f, -0.002386f, + +0.001436f, +0.001534f, +0.001585f, +0.004998f, +0.001512f, +0.000891f + }, + { + -0.007193f, -0.031339f, +0.003054f, +0.002446f, -0.009944f, -0.018991f, -0.009511f, +0.001380f, +0.010936f, +0.007623f, + -0.000368f, -0.007947f, +0.006194f, +0.028940f, -0.079654f, +0.031136f, +0.009556f, -0.001371f, -0.005221f, -0.007321f, + -0.023842f, +0.011574f, -0.015454f, -0.000573f, +0.000177f, +0.003169f, +0.007673f, +0.000929f, -0.010848f, -0.020594f, + -0.010323f, -0.000017f, +0.028047f, -0.004673f, +0.011284f, -0.003861f, +0.007580f, -0.000725f, -0.009305f, +0.007393f, + -0.015885f, -0.001906f, -0.006072f, +0.000627f, -0.012014f, +0.000868f, -0.002454f, +0.002148f, -0.011972f, +0.010210f, + -0.005432f, +0.013176f, -0.000764f, -0.001600f, +0.004988f, +0.000381f, -0.006449f, +0.003411f, +0.003314f, +0.002762f, + -0.004295f, -0.003867f, -0.006387f, +0.006288f, +0.002532f, -0.002954f, -0.002762f, +0.000182f, +0.003397f, -0.001296f, + +0.004190f, +0.004455f, -0.006513f, -0.000467f, -0.001436f, -0.001314f, +0.000418f, -0.001065f, +0.000746f, +0.004063f, + +0.006009f, +0.005030f, +0.001862f, -0.000382f, +0.001147f, -0.004963f, -0.001642f, -0.002832f, -0.000198f, -0.001597f, + -0.001219f, -0.002280f, -0.000678f, +0.001662f, +0.000124f, -0.001572f + }, + { + +0.003673f, -0.095424f, -0.002023f, +0.003660f, +0.013735f, -0.009811f, -0.024080f, -0.012281f, -0.010980f, -0.005570f, + -0.015300f, +0.003124f, -0.033142f, +0.017825f, +0.048239f, -0.011691f, +0.009460f, -0.019477f, +0.009031f, +0.000935f, + +0.006196f, +0.030701f, +0.027193f, +0.013346f, +0.004876f, -0.012159f, +0.000851f, -0.002863f, -0.010866f, -0.007417f, + -0.013494f, -0.040949f, +0.014341f, +0.014644f, -0.006701f, -0.007827f, +0.009679f, +0.012091f, +0.005534f, +0.016438f, + -0.009184f, +0.005837f, -0.002699f, +0.008551f, -0.008187f, -0.003834f, +0.000813f, +0.018933f, +0.000316f, -0.005065f, + -0.006034f, -0.000475f, -0.001786f, +0.001887f, -0.007440f, +0.002612f, -0.011106f, +0.009147f, -0.002512f, +0.000468f, + +0.002714f, -0.004311f, -0.003652f, -0.007620f, +0.001499f, +0.004656f, +0.005829f, +0.009886f, +0.003196f, +0.002916f, + -0.004985f, +0.001273f, +0.001043f, -0.002196f, -0.001435f, -0.003963f, -0.004811f, -0.002440f, -0.002479f, +0.000401f, + -0.004845f, +0.004257f, +0.001384f, +0.003732f, -0.000192f, +0.001910f, +0.002470f, -0.000922f, +0.000626f, +0.002270f, + +0.001486f, +0.002280f, +0.002594f, +0.004024f, -0.000309f, +0.000684f + } + }, + { + { + -0.001082f, +0.107383f, +0.008464f, -0.018373f, -0.013470f, +0.008905f, -0.003465f, -0.008446f, -0.004391f, -0.028271f, + +0.006924f, -0.024917f, +0.006164f, +0.001162f, -0.015862f, -0.013203f, -0.011002f, -0.008749f, +0.000951f, +0.008645f, + +0.011120f, -0.010911f, -0.009433f, +0.037765f, +0.011901f, +0.013325f, +0.004245f, -0.005941f, +0.002360f, -0.003736f, + +0.001364f, -0.021687f, -0.003317f, -0.005252f, +0.012865f, +0.002561f, -0.015700f, -0.002599f, -0.007193f, +0.001730f, + -0.010713f, +0.003728f, -0.000297f, -0.001084f, +0.002959f, -0.009747f, -0.004225f, +0.002502f, +0.001246f, -0.008068f, + +0.000884f, +0.001316f, -0.002067f, +0.002786f, +0.001337f, -0.002614f, -0.012298f, -0.007841f, +0.001032f, +0.002827f, + +0.008915f, +0.008823f, +0.007014f, -0.005336f, -0.001839f, +0.002274f, +0.003194f, +0.001743f, -0.004502f, -0.001667f, + +0.003683f, -0.003616f, +0.001222f, +0.006040f, -0.001752f, -0.000801f, -0.002168f, -0.006568f, +0.000892f, +0.002952f, + -0.006307f, +0.004919f, +0.001737f, +0.004566f, -0.000647f, -0.000585f, -0.001252f, +0.000754f, +0.000865f, +0.003157f, + +0.000785f, +0.001334f, -0.000268f, -0.000981f, -0.001871f, +0.000700f + }, + { + +0.023258f, +0.039554f, -0.063653f, -0.035015f, -0.022437f, -0.006544f, -0.001945f, -0.024329f, -0.006283f, -0.012603f, + +0.030405f, +0.050062f, +0.006561f, -0.000582f, -0.013920f, +0.012392f, -0.001509f, -0.010800f, +0.022467f, +0.016408f, + -0.006292f, -0.018805f, -0.010173f, -0.004443f, +0.010591f, +0.007806f, +0.008264f, -0.031961f, +0.000676f, +0.007225f, + -0.004165f, +0.022556f, -0.000642f, -0.005107f, -0.010836f, +0.014392f, +0.017805f, +0.009889f, -0.003385f, +0.000503f, + +0.002118f, +0.003689f, +0.004866f, -0.015292f, +0.001257f, +0.000841f, +0.002361f, +0.001656f, +0.001986f, -0.000719f, + +0.004429f, -0.008111f, -0.008510f, -0.002599f, +0.005878f, +0.000033f, -0.004713f, -0.002412f, -0.006686f, +0.004863f, + +0.006094f, -0.000405f, -0.002131f, -0.007274f, -0.010914f, -0.002636f, +0.000942f, +0.002634f, +0.003104f, -0.000382f, + +0.003806f, -0.006877f, -0.006418f, -0.005535f, +0.002654f, +0.000086f, -0.000829f, +0.001582f, -0.002655f, -0.001908f, + +0.000033f, -0.000542f, -0.000184f, -0.002695f, +0.000339f, +0.000173f, +0.001760f, +0.000996f, -0.003150f, -0.000742f, + -0.001871f, -0.003152f, -0.000017f, +0.001629f, +0.003886f, -0.000267f + }, + { + -0.002277f, -0.155573f, +0.048633f, +0.103840f, +0.004709f, +0.014250f, +0.004905f, -0.006369f, -0.021310f, +0.017196f, + -0.008577f, -0.032650f, -0.003111f, -0.001629f, +0.008651f, -0.001666f, -0.006839f, +0.002029f, +0.007284f, +0.028602f, + +0.015463f, +0.006029f, -0.006166f, +0.009681f, -0.008352f, -0.011766f, -0.009172f, +0.002495f, +0.003843f, -0.007666f, + -0.005862f, +0.001742f, +0.006404f, -0.007418f, +0.012575f, +0.001292f, -0.002029f, +0.005607f, -0.000900f, +0.001845f, + +0.011807f, +0.005508f, -0.003939f, -0.008575f, -0.003577f, +0.002255f, -0.010563f, -0.006784f, -0.004777f, +0.003846f, + -0.001296f, +0.000933f, +0.000336f, +0.002857f, -0.001779f, -0.002697f, -0.003396f, +0.006221f, -0.003199f, +0.004899f, + +0.001062f, +0.002817f, -0.002087f, +0.000071f, -0.001333f, +0.001486f, -0.000169f, -0.005970f, -0.003558f, +0.002843f, + +0.001941f, -0.003275f, +0.002605f, -0.000495f, -0.000754f, +0.003294f, +0.007460f, +0.002648f, +0.000500f, +0.000800f, + -0.000968f, +0.001553f, -0.002835f, +0.001770f, +0.001950f, -0.001075f, +0.001820f, -0.000139f, -0.000442f, +0.001336f, + -0.000761f, +0.001054f, +0.001728f, +0.000760f, -0.001155f, +0.000876f + }, + { + -0.002614f, -0.008750f, +0.009887f, +0.015734f, -0.000818f, -0.000282f, +0.001991f, -0.002617f, -0.003555f, +0.010103f, + +0.010026f, +0.001063f, -0.004257f, -0.002194f, -0.018820f, +0.005825f, -0.001394f, -0.011446f, +0.003282f, -0.003547f, + +0.003009f, -0.012594f, +0.014115f, -0.027053f, -0.005342f, -0.001049f, -0.019575f, -0.011549f, -0.002163f, -0.015616f, + +0.033926f, +0.002172f, +0.001741f, +0.008337f, +0.003079f, +0.002780f, +0.011620f, -0.011340f, -0.001697f, -0.002591f, + -0.003102f, +0.003331f, -0.015854f, +0.006234f, -0.007715f, -0.000115f, -0.005760f, -0.002769f, -0.001356f, -0.002127f, + +0.007204f, -0.001340f, +0.003108f, +0.006627f, +0.005494f, +0.000014f, +0.003512f, -0.002876f, +0.000055f, -0.002379f, + -0.005228f, +0.009594f, +0.000018f, +0.002019f, +0.002347f, -0.005054f, +0.000652f, +0.000972f, +0.000731f, +0.008889f, + +0.004155f, +0.000773f, -0.003070f, -0.000568f, +0.000550f, +0.004934f, +0.001652f, -0.004505f, +0.003375f, +0.001358f, + +0.000159f, +0.007261f, +0.000212f, -0.000880f, -0.001250f, -0.004612f, -0.000710f, +0.000197f, -0.002967f, -0.000895f, + -0.001039f, +0.000125f, +0.001655f, -0.001353f, +0.002406f, -0.000556f + }, + { + -0.018082f, -0.070411f, -0.003224f, -0.006998f, +0.002018f, -0.003132f, +0.006773f, -0.001424f, -0.007300f, +0.009096f, + -0.014182f, -0.001360f, +0.008565f, +0.018984f, -0.006365f, -0.010578f, +0.018752f, +0.009659f, -0.004456f, -0.021502f, + +0.001809f, +0.001669f, -0.008224f, +0.007175f, +0.005711f, +0.006135f, +0.007493f, +0.028798f, -0.009652f, -0.020182f, + -0.007628f, -0.016247f, -0.007387f, -0.008596f, -0.005494f, -0.014711f, +0.006614f, -0.001329f, -0.010842f, +0.001062f, + -0.014890f, +0.002288f, +0.007145f, +0.010494f, +0.005162f, +0.000050f, -0.000002f, +0.003075f, -0.001855f, +0.010174f, + -0.005029f, -0.005076f, +0.003738f, +0.000856f, +0.006814f, -0.000363f, +0.006215f, +0.002360f, +0.000580f, -0.009186f, + -0.004458f, +0.000528f, -0.004453f, +0.004831f, +0.002056f, -0.003765f, -0.001012f, -0.000370f, +0.001859f, +0.004461f, + -0.000588f, +0.001726f, +0.003446f, -0.004305f, -0.000688f, -0.004095f, +0.005330f, -0.000266f, -0.000361f, +0.002557f, + -0.002499f, +0.000443f, -0.000053f, +0.004348f, -0.004175f, +0.001499f, -0.002432f, +0.003527f, +0.003193f, -0.000602f, + -0.001066f, -0.001088f, -0.002523f, -0.001275f, -0.000541f, +0.000028f + }, + { + +0.000170f, -0.004405f, +0.025914f, -0.010818f, -0.006718f, +0.007430f, -0.000159f, -0.007452f, -0.004567f, -0.007126f, + +0.000058f, +0.010675f, -0.008308f, +0.002405f, -0.012085f, -0.004551f, -0.000820f, -0.012647f, +0.001176f, -0.007862f, + +0.002352f, -0.002578f, -0.000790f, -0.010980f, -0.000075f, +0.006891f, -0.006579f, -0.009725f, -0.003750f, -0.038584f, + -0.005651f, -0.006085f, +0.006330f, +0.004393f, +0.008769f, +0.016879f, +0.001949f, +0.005835f, +0.011445f, +0.015331f, + +0.012276f, +0.014849f, +0.014102f, -0.008919f, -0.002770f, -0.006600f, +0.011119f, -0.005190f, +0.004317f, +0.004801f, + -0.005352f, +0.004652f, -0.002191f, -0.002555f, -0.000924f, +0.004203f, +0.000534f, +0.006797f, +0.003661f, +0.000641f, + +0.007940f, -0.000153f, -0.000957f, +0.002301f, -0.001645f, -0.005457f, +0.002535f, +0.003742f, -0.001061f, +0.001111f, + +0.003516f, +0.001952f, +0.002056f, -0.000356f, -0.000297f, -0.003267f, -0.000449f, +0.002397f, +0.000415f, -0.000192f, + +0.000611f, -0.003071f, -0.001745f, -0.001054f, -0.000175f, +0.003796f, +0.001943f, -0.001764f, -0.004495f, -0.002678f, + -0.001070f, -0.002468f, +0.000552f, -0.000883f, -0.002206f, +0.000194f + }, + { + -0.006944f, -0.124001f, +0.015987f, +0.001441f, +0.000171f, -0.010147f, -0.017614f, +0.003140f, -0.015442f, -0.002258f, + +0.014695f, +0.035257f, +0.005466f, +0.005412f, -0.011713f, +0.016213f, +0.009450f, -0.004511f, +0.017653f, -0.003304f, + +0.006742f, -0.009208f, +0.005331f, -0.009876f, -0.014107f, +0.004636f, +0.014145f, +0.026447f, -0.006324f, -0.012914f, + +0.005455f, -0.026767f, -0.011904f, +0.013674f, +0.006274f, +0.010740f, -0.011721f, +0.012808f, +0.002224f, +0.010559f, + +0.009649f, +0.005648f, -0.006445f, -0.005037f, -0.008745f, -0.011347f, +0.001117f, +0.000762f, +0.001106f, -0.001292f, + -0.000315f, -0.005158f, -0.001212f, +0.000023f, -0.002711f, -0.001491f, +0.002249f, -0.009234f, -0.002218f, -0.006619f, + +0.001712f, +0.003584f, +0.005487f, -0.003668f, +0.000270f, -0.002932f, -0.001081f, +0.006714f, +0.004741f, +0.001932f, + +0.000650f, -0.004596f, +0.000976f, +0.002258f, +0.004574f, +0.000183f, -0.000015f, -0.002324f, -0.000619f, -0.003325f, + +0.003684f, +0.001679f, -0.003573f, -0.001101f, +0.003052f, +0.001984f, +0.002129f, -0.000840f, -0.001038f, +0.000985f, + +0.001054f, +0.004769f, -0.001250f, +0.001176f, +0.000700f, -0.002289f + }, + { + +0.001548f, -0.065743f, +0.046074f, +0.011178f, +0.000153f, -0.007384f, +0.004819f, -0.000624f, -0.003539f, -0.002027f, + +0.007857f, -0.008211f, -0.024988f, +0.003278f, +0.054968f, +0.001641f, +0.025051f, +0.004736f, -0.017200f, -0.019781f, + -0.026105f, +0.018071f, -0.007180f, -0.002102f, -0.018235f, -0.003361f, +0.006205f, +0.013703f, +0.002408f, -0.015228f, + -0.001573f, +0.005214f, +0.004609f, +0.012857f, +0.005163f, +0.006529f, +0.007367f, -0.004019f, -0.004913f, +0.013686f, + +0.010043f, -0.000649f, -0.002990f, +0.002064f, -0.008219f, -0.000389f, -0.001606f, -0.004433f, +0.000432f, -0.006221f, + +0.005013f, -0.000062f, +0.003420f, +0.002022f, +0.002821f, +0.003588f, -0.003042f, -0.003768f, +0.000314f, +0.001551f, + +0.003054f, +0.005264f, +0.003185f, -0.002751f, -0.003591f, +0.005216f, +0.000107f, -0.001468f, +0.000858f, +0.002729f, + -0.000168f, -0.005041f, -0.002563f, -0.005832f, +0.002717f, +0.004096f, -0.001732f, +0.000401f, -0.004052f, +0.004238f, + +0.004647f, +0.002590f, +0.000875f, -0.004550f, +0.003278f, +0.001086f, -0.003662f, -0.000844f, +0.001606f, +0.000754f, + +0.000472f, +0.000095f, -0.001858f, -0.001642f, -0.001765f, +0.000309f + }, + { + -0.015020f, -0.133924f, +0.021967f, -0.001632f, -0.012758f, +0.001000f, -0.002270f, +0.009533f, -0.001587f, +0.004538f, + +0.001176f, -0.009422f, +0.014160f, +0.018939f, +0.018345f, -0.025259f, -0.033611f, +0.027841f, +0.007910f, -0.001963f, + -0.009632f, -0.000223f, +0.001665f, +0.007118f, +0.009626f, -0.002728f, +0.004963f, +0.001775f, -0.011242f, -0.001429f, + -0.019661f, +0.011633f, +0.009125f, +0.001613f, -0.004633f, -0.005806f, -0.009642f, -0.009811f, +0.007846f, +0.002476f, + -0.008346f, +0.009151f, +0.003665f, +0.003443f, -0.005227f, -0.007306f, -0.000444f, -0.003091f, -0.004426f, +0.003612f, + +0.003608f, +0.000652f, -0.001043f, -0.003213f, +0.006903f, -0.008294f, +0.001141f, -0.008990f, +0.003420f, -0.003805f, + +0.003979f, +0.002785f, -0.000598f, -0.005755f, -0.003035f, -0.004410f, -0.006131f, -0.000809f, +0.000591f, +0.000069f, + +0.002743f, +0.000847f, +0.000970f, +0.003443f, +0.000033f, -0.001821f, -0.002013f, +0.002279f, -0.001394f, +0.002593f, + -0.003734f, -0.000332f, -0.002098f, -0.003792f, +0.001263f, -0.003154f, +0.000944f, -0.001945f, -0.000705f, +0.000430f, + +0.000536f, -0.002724f, -0.003848f, +0.000322f, -0.000575f, -0.001401f + }, + { + +0.000918f, -0.069912f, +0.004579f, -0.010570f, -0.000508f, -0.035393f, -0.009375f, -0.004558f, +0.006429f, +0.013680f, + +0.005227f, -0.014387f, -0.019091f, +0.016040f, -0.005036f, +0.006588f, +0.005451f, +0.003287f, -0.019357f, +0.016360f, + -0.013156f, +0.012190f, -0.009421f, -0.020347f, -0.008431f, -0.016464f, -0.028947f, -0.003350f, -0.002045f, +0.006407f, + +0.006713f, +0.002581f, -0.009894f, -0.015944f, +0.003830f, +0.003490f, -0.002131f, +0.007790f, +0.009263f, +0.004170f, + +0.002176f, +0.004707f, +0.007393f, +0.005464f, -0.002562f, +0.015997f, +0.015522f, +0.008712f, +0.003246f, -0.010208f, + +0.009694f, +0.000446f, -0.003119f, +0.008009f, -0.008294f, -0.011518f, +0.002412f, -0.002169f, +0.006104f, -0.006072f, + +0.003410f, +0.004651f, +0.004110f, +0.000423f, +0.010584f, +0.003243f, -0.000620f, -0.000512f, -0.002031f, +0.006256f, + +0.004249f, +0.000152f, +0.002742f, +0.007421f, -0.002281f, +0.002252f, +0.001250f, -0.006710f, -0.001679f, -0.000615f, + -0.003846f, +0.004156f, -0.003329f, -0.001354f, -0.003351f, +0.000374f, -0.003635f, +0.001817f, -0.000432f, -0.001136f, + -0.001118f, +0.003967f, -0.000809f, +0.001029f, +0.003375f, -0.001195f + }, + { + -0.015068f, +0.127424f, +0.013053f, -0.001496f, -0.020045f, +0.059216f, +0.042979f, +0.069414f, +0.005468f, +0.003082f, + -0.014244f, -0.009089f, +0.022095f, -0.003648f, +0.000137f, +0.012833f, +0.000784f, -0.002665f, -0.005737f, +0.010836f, + +0.016890f, +0.012993f, +0.014871f, -0.009961f, -0.003397f, -0.002804f, -0.005380f, +0.026377f, -0.003320f, -0.008837f, + +0.001565f, +0.006835f, -0.006023f, -0.000384f, +0.024943f, +0.008713f, -0.011378f, -0.009426f, -0.000559f, -0.015244f, + -0.000503f, +0.002424f, -0.000989f, +0.004703f, -0.003500f, +0.009090f, -0.007997f, +0.008447f, +0.012053f, -0.003792f, + +0.007540f, +0.002003f, +0.002290f, +0.002671f, +0.001539f, -0.006178f, -0.007852f, -0.004591f, -0.004776f, -0.004262f, + +0.002281f, +0.005724f, -0.005424f, -0.010999f, -0.004463f, +0.004793f, +0.000811f, -0.005905f, -0.001933f, +0.003265f, + -0.001692f, +0.002418f, -0.006960f, -0.000441f, -0.003570f, -0.003935f, -0.001250f, -0.001074f, -0.003125f, +0.002332f, + -0.001029f, -0.004360f, -0.000464f, -0.000526f, +0.004251f, +0.001405f, +0.000067f, +0.000787f, +0.001038f, +0.000424f, + -0.001097f, +0.002932f, +0.002333f, -0.001390f, +0.002572f, -0.002022f + }, + { + -0.001800f, -0.031833f, +0.014643f, +0.000345f, -0.009725f, -0.004081f, +0.008143f, -0.015288f, +0.011123f, -0.003091f, + +0.000323f, -0.006242f, -0.009466f, -0.038998f, +0.001199f, +0.001868f, +0.003066f, +0.011673f, +0.004954f, +0.015908f, + +0.009358f, +0.001155f, -0.000125f, -0.018023f, -0.000105f, -0.003988f, -0.002514f, -0.016581f, +0.022586f, +0.018074f, + +0.009521f, -0.011080f, +0.009578f, +0.001063f, -0.014191f, -0.016165f, +0.014324f, +0.009363f, -0.013062f, -0.001064f, + -0.010698f, -0.007156f, -0.011771f, -0.014927f, +0.004079f, +0.003420f, +0.006892f, -0.002083f, -0.014994f, -0.009970f, + +0.009294f, +0.008883f, -0.002650f, -0.007814f, -0.005307f, -0.004232f, +0.001757f, +0.002227f, -0.001098f, +0.001199f, + +0.005784f, -0.007649f, +0.006429f, -0.000663f, +0.002080f, -0.003304f, +0.002367f, -0.009478f, +0.002880f, -0.002828f, + +0.000562f, +0.001495f, -0.004731f, +0.001457f, -0.002942f, -0.005123f, +0.003491f, -0.005480f, +0.002854f, -0.009710f, + -0.002420f, +0.003152f, -0.003278f, -0.002190f, -0.000978f, -0.000578f, +0.004383f, +0.003630f, -0.002514f, -0.002922f, + +0.002862f, +0.002574f, -0.000110f, -0.003114f, +0.001713f, +0.001671f + }, + { + +0.014945f, -0.062272f, -0.012135f, +0.023310f, -0.075375f, -0.035436f, -0.018718f, -0.018159f, +0.002587f, -0.021548f, + -0.005202f, +0.014577f, -0.016665f, +0.049382f, +0.036712f, -0.007739f, +0.025850f, +0.019822f, -0.002407f, -0.003868f, + -0.008684f, +0.015370f, +0.001591f, -0.020114f, +0.012198f, +0.012084f, +0.009411f, +0.002978f, -0.006876f, -0.023133f, + +0.001525f, +0.006706f, -0.001614f, -0.003953f, -0.003631f, +0.002753f, +0.009205f, -0.017186f, -0.009662f, +0.018432f, + -0.008173f, -0.003808f, +0.002513f, -0.004605f, -0.010697f, +0.007883f, +0.010600f, +0.007212f, -0.005739f, +0.002555f, + +0.002245f, -0.000831f, +0.004429f, +0.006039f, +0.004128f, +0.002512f, -0.003496f, -0.007650f, +0.011781f, +0.002301f, + -0.001370f, +0.001319f, -0.000500f, -0.004249f, +0.000698f, +0.006110f, +0.001604f, +0.003245f, -0.008239f, -0.006634f, + +0.003287f, -0.006408f, +0.002217f, +0.002334f, +0.003936f, +0.005206f, -0.000407f, -0.001272f, -0.005551f, -0.001587f, + +0.001117f, +0.000787f, -0.005638f, -0.000415f, -0.004010f, +0.001085f, -0.000728f, +0.001878f, -0.001642f, -0.003662f, + +0.000239f, -0.000575f, -0.003064f, +0.000782f, -0.000135f, +0.002665f + }, + { + +0.006781f, -0.026211f, -0.008556f, +0.003793f, +0.002390f, -0.001908f, +0.001244f, -0.007478f, -0.003358f, +0.002154f, + -0.007530f, -0.000509f, +0.009869f, +0.024208f, -0.127374f, -0.000686f, +0.002862f, +0.007078f, -0.006911f, +0.007302f, + -0.014290f, +0.003616f, -0.025183f, +0.012520f, +0.013153f, -0.002046f, -0.000109f, +0.007818f, -0.002972f, +0.000850f, + +0.009151f, -0.006518f, +0.011730f, -0.021205f, -0.003364f, -0.002442f, +0.005261f, -0.014713f, -0.011251f, +0.012139f, + -0.013033f, -0.002386f, -0.001329f, +0.015023f, -0.005371f, +0.006359f, +0.010234f, +0.004192f, -0.009470f, +0.021679f, + -0.004183f, +0.008054f, -0.001175f, +0.007775f, +0.006217f, -0.008178f, -0.004126f, +0.007181f, +0.001841f, +0.001961f, + -0.000927f, -0.002621f, -0.007996f, +0.001783f, -0.001043f, -0.003355f, -0.000256f, +0.000148f, +0.002030f, +0.000919f, + +0.003162f, +0.005037f, -0.001465f, +0.003043f, -0.000212f, +0.000251f, +0.000578f, -0.002592f, -0.002898f, +0.000479f, + +0.002999f, +0.003414f, -0.000627f, +0.000498f, +0.003872f, -0.002095f, -0.001232f, -0.001051f, +0.000965f, -0.000460f, + +0.004554f, +0.001005f, -0.001012f, +0.000004f, +0.001256f, +0.000850f + }, + { + +0.005290f, -0.084534f, -0.000865f, -0.001444f, -0.005089f, -0.006355f, +0.004791f, -0.002889f, -0.010047f, -0.006756f, + -0.004412f, +0.035385f, -0.017117f, -0.034433f, -0.022663f, -0.023412f, +0.015720f, -0.021722f, +0.008779f, -0.001266f, + -0.028161f, -0.001948f, -0.007757f, -0.005259f, -0.003036f, -0.018355f, +0.005478f, +0.006063f, -0.017315f, +0.005772f, + +0.012308f, -0.036755f, +0.011368f, +0.018435f, +0.000263f, -0.006988f, -0.000141f, -0.010314f, -0.010228f, +0.004533f, + -0.020957f, -0.004527f, -0.005705f, +0.008816f, -0.002763f, +0.012940f, -0.000053f, +0.007578f, -0.010552f, -0.010969f, + -0.002582f, +0.001872f, +0.008869f, +0.007582f, -0.003067f, +0.013847f, -0.004366f, +0.007477f, -0.008237f, -0.000830f, + -0.000400f, -0.005936f, +0.003290f, -0.005170f, -0.003431f, -0.003562f, -0.005514f, +0.002746f, +0.007773f, +0.002839f, + -0.008789f, -0.002944f, -0.001398f, -0.001892f, +0.003137f, +0.002235f, +0.001293f, -0.000719f, -0.005052f, +0.004098f, + -0.000666f, +0.004332f, +0.002461f, +0.003764f, +0.002769f, +0.007934f, +0.003045f, +0.001740f, +0.002038f, -0.001364f, + -0.002210f, -0.000541f, -0.000860f, +0.002127f, +0.000152f, +0.003540f + } + }, + { + { + +0.000046f, +0.083033f, +0.025842f, -0.075043f, +0.035395f, -0.009488f, -0.000099f, +0.002091f, -0.020254f, -0.018686f, + -0.000913f, +0.001390f, -0.017830f, -0.005117f, -0.017992f, +0.001547f, -0.011329f, +0.004178f, -0.007765f, +0.015816f, + +0.013287f, -0.013016f, -0.003396f, +0.011941f, +0.010437f, +0.022828f, +0.005530f, -0.004721f, -0.009915f, +0.016562f, + -0.011699f, -0.011331f, -0.015751f, +0.000223f, +0.014140f, -0.005111f, -0.014816f, -0.004262f, +0.008187f, -0.004453f, + -0.007127f, -0.003042f, -0.005587f, +0.009195f, -0.001565f, -0.008476f, -0.008170f, -0.003534f, +0.005067f, -0.009081f, + +0.002226f, +0.002353f, +0.004085f, +0.004161f, -0.006908f, -0.002222f, -0.001155f, -0.009463f, -0.006454f, +0.004311f, + +0.010260f, +0.009476f, +0.001193f, -0.002744f, -0.000335f, +0.000644f, +0.005365f, +0.000377f, -0.004219f, -0.001516f, + -0.000637f, +0.006860f, -0.004190f, +0.001635f, +0.005319f, -0.005432f, -0.002058f, -0.004184f, +0.003724f, -0.002364f, + -0.001546f, +0.001656f, +0.004468f, +0.002737f, +0.000298f, -0.000726f, -0.000428f, +0.001202f, -0.000820f, +0.001276f, + +0.001474f, +0.000454f, +0.000420f, +0.002198f, -0.002215f, +0.001491f + }, + { + -0.028258f, -0.018252f, +0.047062f, +0.037736f, -0.087978f, -0.010197f, -0.024245f, +0.002587f, +0.003442f, -0.007410f, + +0.011744f, +0.049077f, +0.013960f, +0.008334f, -0.000889f, -0.009898f, -0.003387f, +0.001710f, +0.014142f, +0.013464f, + +0.010323f, -0.022936f, -0.003988f, -0.007681f, +0.018523f, +0.001004f, -0.000200f, -0.019789f, +0.001554f, -0.001022f, + +0.003136f, +0.019370f, +0.002878f, -0.009011f, -0.010162f, +0.007890f, +0.014747f, +0.008704f, +0.002495f, +0.011900f, + +0.001906f, +0.008311f, -0.008058f, -0.012801f, -0.000355f, +0.001283f, +0.006439f, -0.006955f, -0.002006f, +0.013810f, + -0.004641f, -0.002859f, -0.005484f, -0.002293f, +0.001607f, -0.000385f, -0.002926f, -0.003628f, +0.000114f, -0.001375f, + +0.008699f, -0.004876f, +0.001398f, -0.011239f, -0.007453f, -0.006530f, +0.007660f, +0.002466f, +0.001853f, -0.001528f, + +0.002363f, -0.004924f, -0.004393f, -0.003659f, -0.003325f, +0.002431f, -0.002095f, -0.002053f, +0.001324f, +0.000196f, + -0.000168f, -0.000780f, -0.001068f, -0.003392f, +0.002433f, -0.001971f, +0.003091f, -0.001337f, -0.000649f, +0.000753f, + -0.001915f, -0.002892f, -0.001183f, +0.001426f, +0.003079f, -0.000376f + }, + { + +0.009298f, -0.079688f, -0.021397f, +0.100131f, +0.002717f, +0.004763f, +0.007551f, -0.012225f, -0.014527f, +0.009879f, + -0.010429f, -0.024282f, -0.015465f, +0.003521f, -0.000689f, -0.007935f, +0.010666f, +0.000663f, -0.003160f, +0.028928f, + +0.030618f, -0.009544f, +0.000562f, +0.005960f, -0.008770f, -0.003925f, -0.005769f, -0.004529f, +0.004888f, -0.002990f, + -0.019604f, +0.005007f, +0.015595f, +0.003463f, -0.008679f, +0.002493f, +0.001380f, +0.003985f, -0.000389f, +0.001425f, + +0.017266f, +0.001129f, -0.000710f, -0.003732f, -0.009765f, -0.012108f, +0.005301f, -0.006104f, -0.000056f, -0.002730f, + -0.001007f, -0.001109f, +0.005628f, +0.008345f, -0.005137f, -0.002464f, -0.001035f, +0.004880f, +0.001925f, -0.001584f, + +0.005703f, +0.001381f, -0.000119f, -0.003948f, +0.000822f, +0.002984f, -0.004289f, -0.001818f, -0.000692f, -0.000959f, + +0.001944f, +0.000442f, -0.000210f, -0.000534f, +0.000281f, +0.005564f, +0.004429f, -0.000039f, -0.001395f, +0.002364f, + +0.002954f, -0.000527f, -0.002416f, -0.000272f, +0.000983f, +0.001518f, +0.002459f, -0.001310f, +0.002312f, -0.001690f, + +0.002725f, -0.000763f, +0.001496f, -0.000044f, +0.001644f, -0.000681f + }, + { + +0.005159f, +0.012353f, -0.008362f, -0.007345f, +0.014650f, -0.001232f, +0.001265f, +0.003173f, -0.013488f, +0.019052f, + +0.011494f, -0.013045f, +0.002776f, -0.017441f, -0.026110f, +0.016666f, -0.001534f, -0.005748f, -0.004058f, +0.006994f, + -0.000266f, -0.010840f, +0.003877f, -0.018259f, -0.008771f, +0.003327f, -0.016061f, -0.020843f, -0.017051f, +0.003146f, + +0.007063f, +0.022332f, -0.011832f, +0.014852f, +0.001868f, +0.009352f, +0.008295f, -0.005184f, -0.012773f, +0.001002f, + -0.001447f, -0.007050f, -0.008174f, +0.001576f, -0.011336f, +0.003155f, -0.003143f, +0.002671f, -0.001216f, -0.000665f, + +0.008406f, -0.000577f, -0.000052f, +0.005981f, +0.005691f, +0.000592f, -0.005659f, +0.006855f, -0.007423f, -0.000825f, + -0.000492f, +0.005915f, +0.005552f, +0.002527f, -0.003229f, +0.003568f, -0.003592f, -0.000599f, +0.000604f, +0.002400f, + +0.002480f, +0.006278f, -0.006223f, +0.000247f, -0.000291f, +0.003882f, +0.003199f, -0.000877f, -0.000090f, +0.001061f, + -0.001526f, +0.009141f, +0.002125f, -0.005385f, +0.000224f, -0.002584f, -0.001028f, -0.001713f, -0.000153f, -0.003131f, + -0.000147f, +0.001399f, +0.000215f, -0.000802f, +0.000776f, +0.000861f + }, + { + +0.005067f, -0.111573f, +0.000247f, -0.010550f, +0.017401f, -0.001610f, -0.008146f, +0.006221f, +0.002894f, +0.002526f, + -0.026171f, +0.023576f, +0.013677f, +0.012277f, +0.002927f, -0.008628f, +0.004054f, +0.001497f, +0.001565f, -0.019264f, + +0.001525f, +0.010171f, -0.023057f, +0.012495f, +0.020583f, -0.009734f, +0.036690f, -0.003318f, -0.004006f, -0.017798f, + -0.009297f, -0.011576f, -0.009705f, -0.004081f, -0.007813f, -0.009536f, -0.011716f, +0.004402f, -0.007173f, -0.007339f, + -0.016311f, +0.005893f, -0.000292f, +0.008045f, +0.014729f, -0.001415f, +0.002802f, -0.001236f, -0.000116f, +0.004102f, + +0.004835f, -0.004613f, -0.004371f, +0.002835f, +0.003638f, +0.008767f, +0.000460f, +0.003530f, -0.004139f, -0.007202f, + -0.001240f, -0.003019f, +0.001902f, +0.002217f, +0.002496f, -0.009091f, +0.003857f, -0.000082f, +0.003659f, +0.002865f, + -0.000858f, -0.000917f, +0.004869f, -0.002260f, -0.003977f, -0.001958f, +0.002920f, +0.000715f, +0.000023f, +0.000229f, + -0.000320f, -0.002539f, +0.002340f, +0.001031f, -0.001040f, +0.000870f, -0.002987f, +0.002447f, +0.003090f, +0.000239f, + -0.000324f, -0.000562f, -0.002104f, -0.002503f, -0.000774f, -0.000089f + }, + { + -0.002899f, +0.010395f, +0.004974f, +0.001470f, -0.002802f, +0.002258f, +0.002582f, -0.008017f, +0.000968f, -0.007738f, + -0.009583f, +0.015614f, -0.005677f, -0.026839f, -0.017357f, +0.006101f, +0.017279f, +0.004306f, -0.000733f, -0.003061f, + -0.017082f, +0.007571f, +0.014465f, -0.033442f, +0.006385f, +0.010324f, -0.015927f, +0.000923f, -0.001108f, -0.025103f, + -0.007937f, +0.000962f, -0.012142f, +0.005769f, +0.007374f, +0.017532f, +0.001140f, +0.002495f, +0.010145f, +0.011796f, + +0.027314f, +0.012560f, +0.005694f, -0.004270f, -0.007599f, +0.000117f, +0.002284f, +0.003550f, -0.001114f, +0.006226f, + -0.000789f, +0.003170f, -0.004978f, +0.005110f, -0.000215f, -0.002311f, +0.005146f, +0.006430f, +0.004078f, -0.000598f, + +0.002616f, -0.001404f, +0.002022f, -0.002977f, -0.000191f, -0.002289f, +0.002615f, +0.001789f, -0.000427f, -0.000558f, + +0.005004f, +0.004350f, -0.006434f, +0.002918f, +0.000887f, -0.003097f, +0.004270f, +0.002145f, +0.000506f, -0.004592f, + +0.002572f, -0.003450f, -0.005781f, +0.000630f, -0.000236f, +0.003201f, +0.003686f, -0.001871f, -0.005860f, -0.002899f, + -0.000568f, +0.000407f, -0.001109f, -0.003422f, +0.000758f, +0.000943f + }, + { + -0.012443f, -0.131236f, +0.008151f, -0.006995f, +0.018399f, -0.006076f, -0.013231f, -0.028653f, +0.014559f, +0.015554f, + -0.018602f, +0.043755f, +0.015820f, -0.010571f, -0.006300f, -0.001576f, +0.007807f, +0.018852f, -0.004120f, +0.005680f, + +0.009525f, -0.003604f, +0.003784f, -0.016407f, -0.008616f, +0.012553f, +0.019188f, +0.019542f, -0.008932f, -0.005382f, + -0.013696f, -0.007307f, -0.009053f, +0.007192f, +0.002668f, +0.005091f, -0.003978f, +0.011481f, +0.006286f, +0.009235f, + +0.011994f, -0.004294f, -0.000019f, -0.013550f, -0.012677f, +0.004607f, -0.015557f, +0.005544f, -0.000753f, -0.007403f, + +0.008374f, -0.008263f, +0.001571f, -0.001597f, -0.001440f, -0.004863f, -0.001036f, -0.003651f, -0.008925f, -0.002226f, + +0.002793f, -0.000221f, +0.005743f, -0.000543f, +0.002284f, -0.003019f, -0.003154f, +0.002889f, +0.004122f, +0.004317f, + -0.001539f, -0.001571f, -0.000996f, +0.004157f, -0.000785f, +0.003145f, +0.003327f, -0.004593f, -0.001659f, -0.001522f, + +0.002269f, +0.003734f, -0.004321f, +0.000164f, -0.000000f, +0.001895f, +0.003324f, +0.000220f, -0.002488f, +0.002760f, + +0.001438f, +0.000576f, -0.000192f, +0.000518f, +0.001702f, -0.002533f + }, + { + -0.006512f, +0.021521f, -0.000661f, +0.017970f, -0.013045f, -0.006407f, +0.007601f, -0.005650f, +0.009268f, -0.001332f, + -0.008584f, -0.004309f, +0.003683f, -0.004056f, +0.027084f, +0.013063f, +0.005705f, +0.023656f, -0.025540f, -0.016396f, + -0.012966f, +0.008046f, -0.001719f, -0.001939f, -0.016801f, +0.000729f, +0.011499f, +0.020967f, -0.010161f, -0.022971f, + -0.005239f, +0.009747f, +0.010760f, +0.002319f, +0.005237f, +0.013444f, +0.006316f, -0.004692f, +0.007944f, +0.001707f, + +0.006286f, +0.011815f, -0.011023f, +0.010006f, -0.011732f, +0.003704f, -0.007701f, +0.000972f, -0.003715f, -0.004868f, + -0.000489f, +0.007458f, +0.001759f, +0.002791f, +0.006214f, -0.003871f, +0.006437f, -0.011665f, -0.001800f, -0.002882f, + +0.011439f, +0.004375f, -0.006380f, +0.007410f, -0.008360f, +0.004494f, +0.000702f, -0.003050f, +0.004509f, -0.004805f, + +0.000718f, -0.001613f, -0.004056f, -0.003130f, +0.005416f, -0.002243f, +0.000421f, -0.001241f, -0.002588f, +0.004236f, + +0.001746f, +0.002132f, +0.000140f, -0.001661f, +0.002343f, +0.001311f, -0.004089f, +0.000026f, -0.000921f, +0.003993f, + -0.001212f, +0.001421f, -0.001323f, -0.002938f, +0.000033f, -0.002461f + }, + { + -0.002868f, -0.164171f, +0.009671f, +0.008246f, +0.013751f, -0.010118f, -0.007238f, +0.009952f, +0.005800f, +0.013897f, + -0.031182f, -0.000045f, +0.027596f, +0.013100f, -0.000423f, -0.005451f, -0.016236f, +0.017451f, +0.019162f, +0.003314f, + -0.010923f, -0.004008f, +0.002776f, +0.001488f, +0.004869f, -0.002782f, +0.014675f, -0.005399f, -0.004787f, -0.011592f, + -0.000495f, -0.006699f, +0.019803f, -0.003106f, -0.006044f, -0.016630f, +0.002733f, -0.002386f, +0.009312f, -0.010702f, + +0.005783f, +0.007161f, -0.001544f, +0.004619f, -0.007692f, -0.005464f, +0.001553f, -0.010004f, -0.000813f, +0.003184f, + +0.000955f, +0.003749f, -0.001979f, -0.006289f, +0.005912f, +0.000675f, -0.001934f, -0.003401f, -0.003357f, -0.006400f, + +0.005783f, +0.002986f, -0.001052f, -0.005987f, -0.006080f, +0.001793f, -0.003861f, -0.001892f, +0.002671f, +0.001646f, + -0.003157f, +0.002187f, +0.004977f, -0.000740f, +0.002546f, -0.002927f, -0.001048f, +0.003538f, -0.001349f, -0.001166f, + +0.000532f, -0.004134f, +0.000768f, -0.004501f, -0.001100f, -0.000005f, -0.001739f, +0.000693f, -0.002191f, +0.000036f, + +0.002336f, -0.004194f, -0.002682f, -0.002088f, +0.000073f, -0.001631f + }, + { + +0.004170f, -0.067460f, -0.001654f, -0.000211f, -0.007078f, +0.002436f, -0.046155f, -0.009511f, +0.006561f, +0.024745f, + -0.005977f, -0.017947f, -0.030443f, +0.017297f, +0.001272f, +0.030186f, -0.016452f, +0.011040f, +0.006995f, -0.025560f, + +0.008464f, -0.001430f, -0.005601f, -0.006960f, -0.033338f, -0.007932f, -0.030144f, -0.017464f, +0.002391f, -0.001762f, + +0.000337f, +0.002945f, -0.005366f, -0.009492f, -0.011328f, +0.003685f, -0.000313f, -0.000623f, +0.014221f, +0.005823f, + +0.002979f, +0.004722f, +0.005068f, -0.007426f, +0.008323f, +0.010660f, +0.015978f, +0.016986f, -0.013014f, +0.004990f, + +0.006813f, -0.002691f, +0.007126f, -0.007455f, +0.000670f, -0.010716f, -0.001844f, -0.001438f, -0.003203f, +0.002190f, + -0.001376f, +0.007868f, +0.000177f, +0.005498f, +0.007842f, +0.001744f, +0.004733f, -0.001980f, +0.001610f, +0.002311f, + +0.001059f, +0.003151f, -0.000392f, +0.009017f, +0.005314f, -0.005360f, +0.004213f, -0.005427f, -0.004394f, +0.000143f, + -0.003747f, +0.005426f, -0.002838f, +0.000926f, -0.004580f, -0.001583f, +0.000003f, +0.000020f, -0.001192f, -0.000907f, + +0.000549f, +0.001714f, +0.000071f, +0.000163f, +0.002287f, +0.001262f + }, + { + +0.020071f, +0.122850f, -0.019224f, -0.001846f, -0.040515f, +0.053290f, +0.032461f, +0.078940f, -0.003727f, -0.007409f, + +0.010107f, -0.024559f, +0.014916f, +0.011983f, -0.014306f, +0.020294f, +0.000615f, +0.009607f, -0.018852f, +0.024568f, + +0.004318f, +0.021464f, +0.001599f, +0.007892f, -0.019861f, -0.002739f, +0.008264f, +0.013365f, +0.009764f, -0.001484f, + +0.003726f, -0.008602f, -0.008851f, +0.009702f, -0.004557f, +0.004610f, +0.007930f, -0.002363f, -0.006594f, +0.000904f, + -0.002270f, -0.005906f, -0.001344f, +0.003005f, -0.008570f, +0.015202f, +0.000220f, +0.009507f, +0.000538f, +0.011242f, + +0.006752f, -0.000583f, -0.007411f, +0.002062f, -0.000295f, +0.000142f, -0.009107f, -0.002402f, -0.008090f, -0.001855f, + +0.002961f, +0.000629f, -0.009558f, -0.004721f, -0.005654f, +0.003731f, -0.001367f, -0.002956f, +0.002098f, -0.000430f, + -0.000616f, -0.000642f, -0.003770f, +0.000487f, -0.003523f, -0.004254f, -0.002497f, -0.002481f, -0.000736f, +0.002000f, + -0.002953f, -0.002695f, +0.000396f, -0.000575f, +0.005584f, +0.004104f, -0.001674f, +0.000580f, +0.001440f, -0.002599f, + +0.001460f, +0.001934f, +0.002376f, -0.001203f, +0.002176f, -0.000797f + }, + { + +0.005062f, -0.013033f, -0.006641f, -0.002301f, -0.009987f, -0.008906f, +0.014628f, -0.008318f, -0.000707f, +0.008174f, + -0.021571f, -0.005665f, +0.011957f, -0.057307f, -0.004367f, +0.002223f, +0.011635f, -0.002184f, +0.017053f, -0.002602f, + +0.013196f, -0.003537f, +0.004769f, -0.013286f, -0.004706f, -0.008268f, -0.032963f, -0.004046f, +0.030092f, +0.032479f, + -0.013560f, -0.001416f, -0.003810f, +0.012194f, -0.019716f, -0.006142f, +0.019773f, -0.001841f, -0.010482f, +0.000183f, + -0.010534f, -0.010702f, -0.012048f, -0.011779f, +0.001500f, +0.012263f, +0.002225f, -0.013817f, -0.014683f, +0.003894f, + -0.004499f, +0.006265f, +0.001363f, -0.005593f, -0.004433f, -0.009830f, +0.005918f, -0.001894f, +0.006462f, +0.001565f, + +0.004101f, -0.007064f, +0.007914f, -0.002928f, +0.001429f, -0.001264f, -0.005241f, -0.001945f, -0.000387f, -0.005146f, + +0.007071f, -0.003328f, -0.006302f, +0.000789f, -0.002373f, +0.000228f, -0.002399f, -0.003395f, -0.003307f, -0.003451f, + -0.003449f, +0.000685f, -0.002395f, -0.002705f, +0.000511f, -0.000820f, +0.003200f, +0.003491f, -0.000773f, +0.000102f, + -0.002064f, +0.002662f, -0.000470f, -0.001214f, -0.000399f, +0.003902f + }, + { + -0.025438f, -0.034789f, +0.029768f, +0.003155f, -0.074394f, +0.004236f, -0.034217f, -0.004066f, -0.009304f, -0.027188f, + +0.009357f, -0.011992f, +0.013976f, +0.039188f, +0.017340f, -0.010413f, +0.038918f, +0.003263f, -0.000972f, +0.028970f, + -0.024184f, +0.017575f, -0.010360f, -0.013512f, +0.033716f, +0.010259f, +0.015876f, +0.010489f, -0.017826f, -0.014134f, + +0.007053f, +0.004015f, -0.005462f, -0.004754f, -0.015657f, +0.014235f, +0.000609f, -0.013182f, +0.006772f, +0.000270f, + -0.004232f, +0.000793f, -0.006404f, -0.012739f, -0.000961f, -0.001349f, +0.019006f, +0.005383f, +0.003265f, -0.000394f, + -0.000181f, +0.012304f, -0.000579f, +0.005086f, +0.006535f, -0.001209f, -0.004086f, -0.002512f, +0.003987f, +0.007413f, + -0.007523f, +0.005686f, +0.004723f, -0.008441f, -0.002871f, +0.011576f, -0.003679f, +0.000788f, -0.003657f, -0.009676f, + -0.000078f, -0.005791f, +0.004858f, +0.004418f, +0.001344f, +0.002631f, -0.001344f, -0.003029f, +0.000178f, -0.005047f, + +0.001675f, +0.000464f, +0.000969f, -0.004922f, -0.002731f, -0.001671f, +0.001821f, -0.000343f, -0.002037f, +0.000073f, + +0.000646f, +0.000133f, -0.003417f, -0.001837f, +0.001961f, +0.001169f + }, + { + -0.005529f, -0.033938f, +0.013734f, -0.008988f, +0.002555f, +0.009534f, +0.004404f, +0.002827f, -0.019737f, -0.004925f, + -0.008226f, +0.014123f, -0.002710f, -0.064701f, -0.003638f, +0.019007f, +0.017679f, -0.010719f, -0.002463f, +0.010278f, + -0.018847f, -0.003353f, +0.000593f, +0.012522f, +0.019409f, +0.002678f, -0.031794f, +0.014777f, +0.000797f, -0.005300f, + +0.018947f, +0.001140f, -0.004005f, -0.008756f, -0.024392f, +0.010703f, -0.000384f, -0.014234f, +0.002773f, -0.010076f, + +0.008698f, -0.001434f, -0.005706f, +0.018867f, -0.003030f, +0.009349f, +0.009373f, -0.001936f, -0.002945f, +0.017269f, + -0.003728f, +0.007482f, -0.006020f, +0.008045f, +0.010266f, -0.006822f, -0.000669f, +0.002553f, -0.001697f, +0.005631f, + +0.008080f, -0.015330f, -0.003833f, +0.006116f, -0.005656f, +0.000044f, -0.003719f, +0.002428f, +0.002305f, +0.002331f, + -0.000723f, +0.004184f, +0.004120f, +0.001111f, -0.002605f, +0.002300f, -0.001938f, +0.002381f, -0.005286f, +0.002344f, + +0.003105f, +0.001045f, -0.001062f, +0.001078f, +0.000719f, +0.002606f, -0.002568f, +0.001807f, -0.001761f, -0.001525f, + +0.006124f, +0.000699f, +0.002359f, -0.002345f, +0.001333f, +0.000270f + }, + { + -0.018900f, -0.067675f, +0.010546f, -0.009222f, -0.003143f, +0.002858f, +0.001773f, +0.002648f, -0.011085f, +0.011855f, + -0.002550f, +0.022764f, -0.006721f, +0.002000f, -0.083981f, -0.039602f, -0.002291f, +0.001718f, -0.002234f, +0.007779f, + -0.031454f, -0.003499f, -0.008549f, -0.017642f, -0.012391f, +0.002137f, -0.004114f, +0.014266f, -0.017648f, -0.006901f, + +0.006666f, -0.011102f, +0.009072f, +0.007812f, +0.007896f, -0.000228f, -0.000917f, -0.024500f, -0.003007f, +0.004961f, + -0.026576f, +0.002200f, -0.011087f, +0.011435f, +0.003292f, +0.013083f, -0.005402f, +0.009861f, -0.006538f, -0.012582f, + +0.006912f, -0.004428f, +0.008188f, +0.006888f, -0.001603f, +0.004009f, +0.002917f, +0.007808f, -0.007941f, +0.004944f, + -0.002879f, -0.004496f, -0.002876f, +0.001994f, -0.001054f, -0.010243f, -0.000328f, -0.004314f, +0.013023f, -0.004085f, + -0.004110f, -0.009192f, +0.006345f, +0.001788f, -0.001315f, +0.000525f, +0.002507f, +0.001219f, +0.000130f, -0.002638f, + +0.001828f, +0.002956f, +0.004990f, +0.001873f, +0.003404f, +0.005401f, +0.001078f, +0.005038f, -0.000252f, -0.000418f, + -0.002634f, -0.001944f, +0.001349f, +0.001420f, +0.000099f, +0.001713f + } + }, + { + { + +0.002898f, +0.032579f, -0.012817f, -0.068437f, +0.025888f, -0.012050f, -0.005647f, +0.000083f, -0.006437f, +0.001915f, + -0.007458f, +0.017488f, -0.006572f, -0.011574f, -0.004629f, +0.017451f, +0.001453f, +0.016301f, -0.015634f, +0.007946f, + +0.015891f, -0.026199f, -0.012441f, +0.005854f, -0.000960f, +0.020023f, +0.000281f, -0.003923f, +0.002600f, +0.025944f, + -0.000877f, -0.000257f, -0.019527f, -0.006714f, -0.000005f, -0.007208f, +0.006705f, +0.005912f, +0.019020f, +0.013560f, + +0.005239f, -0.007067f, -0.014275f, +0.008652f, -0.003190f, -0.009704f, -0.004025f, -0.002546f, +0.006705f, -0.004215f, + -0.000549f, +0.003684f, +0.005350f, -0.001885f, -0.004263f, +0.007230f, +0.009469f, +0.000817f, -0.007556f, -0.004000f, + +0.001591f, +0.003008f, -0.002421f, -0.007276f, -0.004704f, +0.004873f, +0.007444f, +0.002501f, -0.003791f, -0.009496f, + -0.005431f, +0.006584f, -0.003784f, -0.000629f, +0.006119f, -0.001557f, +0.004696f, +0.000281f, +0.002854f, -0.004686f, + +0.000602f, +0.003255f, +0.004473f, +0.000553f, +0.000137f, +0.000535f, -0.000436f, -0.001908f, -0.003268f, +0.001053f, + -0.000371f, -0.000585f, -0.000515f, +0.002557f, +0.000915f, +0.001589f + }, + { + +0.035248f, +0.028615f, +0.033399f, +0.176972f, +0.029328f, -0.009158f, -0.012324f, +0.005863f, -0.012269f, -0.012504f, + +0.004399f, +0.015602f, -0.007186f, +0.016490f, -0.000019f, -0.023039f, -0.011717f, +0.009709f, +0.002527f, -0.013736f, + +0.028475f, -0.001530f, +0.000900f, +0.001252f, +0.018999f, +0.001059f, -0.002479f, -0.019587f, +0.005939f, -0.001587f, + -0.003497f, +0.011653f, +0.001208f, -0.011718f, -0.009238f, +0.005397f, +0.015274f, +0.012352f, +0.004092f, +0.010128f, + -0.000843f, +0.006527f, -0.008251f, -0.007871f, -0.003487f, +0.003602f, +0.010034f, -0.004513f, -0.010362f, +0.004111f, + +0.001122f, +0.000083f, -0.006172f, -0.004218f, -0.002806f, -0.002465f, -0.002425f, +0.003200f, +0.003755f, -0.005373f, + +0.003352f, -0.003271f, +0.010498f, -0.003067f, +0.001789f, -0.001302f, +0.006136f, -0.002369f, +0.001093f, -0.001845f, + -0.001150f, -0.000506f, +0.002634f, -0.001972f, -0.004699f, +0.002311f, -0.002503f, -0.002358f, +0.006593f, +0.002643f, + -0.001107f, +0.001731f, -0.000144f, -0.001452f, +0.003569f, -0.002445f, +0.002202f, -0.000970f, +0.001781f, +0.004291f, + +0.001894f, -0.000323f, -0.000725f, -0.001631f, -0.002631f, -0.001505f + }, + { + -0.014254f, -0.040197f, +0.018094f, +0.014355f, -0.061851f, -0.005780f, -0.011361f, +0.001359f, +0.002595f, +0.013470f, + -0.000296f, -0.032290f, -0.016971f, +0.020060f, -0.006604f, -0.004216f, +0.010298f, -0.006922f, +0.000318f, +0.001888f, + +0.005313f, -0.004303f, +0.004187f, -0.005954f, -0.011780f, -0.001704f, +0.010239f, +0.001850f, -0.004345f, -0.007999f, + -0.012251f, +0.018783f, +0.022531f, +0.011214f, -0.009821f, +0.003407f, +0.001266f, +0.001575f, +0.003336f, +0.002400f, + +0.007046f, -0.007716f, +0.011133f, -0.002156f, -0.016263f, -0.009514f, +0.006170f, -0.002997f, +0.004135f, +0.002731f, + +0.004191f, +0.001667f, +0.012344f, +0.014047f, -0.000299f, -0.003148f, -0.002064f, +0.003298f, +0.002711f, +0.001620f, + +0.007056f, -0.001111f, -0.001073f, -0.001344f, -0.000443f, -0.001494f, -0.004025f, +0.003630f, +0.001959f, -0.005050f, + +0.002042f, +0.002041f, -0.003415f, -0.003127f, -0.003379f, -0.000614f, -0.000451f, -0.001673f, -0.000267f, +0.000778f, + -0.001403f, -0.002558f, +0.000222f, -0.001011f, -0.000917f, -0.001896f, -0.000459f, -0.003540f, +0.003122f, -0.001030f, + +0.001928f, -0.001162f, +0.000830f, +0.000323f, +0.000213f, -0.005144f + }, + { + -0.004040f, +0.018761f, +0.003638f, -0.018714f, +0.003639f, -0.003622f, -0.001382f, +0.005000f, -0.012744f, +0.007716f, + -0.001336f, -0.015248f, -0.003454f, -0.008511f, -0.011194f, +0.006889f, +0.000304f, +0.015681f, -0.010647f, -0.008285f, + +0.009335f, -0.000162f, +0.011747f, -0.000062f, -0.005804f, +0.012610f, +0.001813f, -0.000290f, -0.013807f, -0.005885f, + -0.010797f, +0.009779f, -0.016748f, +0.008837f, -0.011982f, +0.003229f, +0.011142f, +0.005382f, -0.007976f, -0.006112f, + -0.008258f, -0.008042f, -0.009149f, -0.007799f, -0.015362f, +0.005250f, +0.004173f, +0.008894f, +0.005989f, +0.003727f, + +0.009600f, -0.002687f, -0.005665f, -0.005261f, -0.002553f, +0.000591f, -0.003076f, +0.005736f, -0.003006f, +0.011176f, + +0.010046f, +0.007687f, +0.005497f, +0.002356f, -0.001803f, +0.003054f, -0.005376f, -0.004697f, -0.004833f, -0.001556f, + -0.001142f, +0.004240f, -0.007672f, -0.002468f, -0.000967f, +0.002169f, +0.004750f, +0.002976f, -0.000134f, +0.002088f, + -0.004037f, +0.000021f, -0.001376f, -0.002716f, +0.002315f, +0.000556f, +0.000563f, -0.001143f, +0.000752f, -0.001306f, + -0.000624f, +0.001230f, +0.000576f, -0.001089f, +0.000612f, -0.000260f + }, + { + +0.009065f, -0.098193f, +0.016618f, -0.032870f, -0.007677f, +0.001436f, -0.007423f, +0.004678f, +0.014407f, +0.010164f, + +0.005468f, +0.053251f, +0.014831f, +0.007081f, +0.008442f, -0.007280f, -0.005398f, -0.007441f, +0.010833f, -0.003457f, + +0.011180f, +0.018862f, -0.022600f, -0.004489f, +0.011297f, -0.018975f, +0.024451f, -0.025392f, -0.014415f, -0.004365f, + +0.010598f, +0.002011f, -0.003587f, -0.002555f, -0.008169f, -0.009282f, -0.013276f, +0.002638f, -0.006499f, -0.006875f, + -0.004755f, +0.006495f, -0.002471f, +0.007324f, +0.010996f, -0.007898f, +0.005382f, -0.000992f, -0.006460f, -0.005283f, + +0.005210f, -0.002205f, -0.004654f, -0.002291f, -0.002012f, +0.006490f, -0.004380f, +0.005182f, +0.001960f, +0.001656f, + -0.000641f, -0.004615f, +0.003988f, +0.002796f, +0.006191f, -0.005409f, +0.002092f, -0.000052f, +0.000778f, -0.004804f, + -0.004731f, -0.002772f, +0.002008f, +0.000130f, -0.005108f, -0.002732f, +0.001451f, -0.001826f, -0.001855f, -0.002132f, + -0.000413f, -0.002070f, +0.001244f, -0.001959f, +0.001155f, +0.002941f, -0.004316f, +0.001735f, +0.003846f, +0.001932f, + +0.001559f, +0.001228f, -0.001173f, -0.002761f, -0.000660f, +0.001322f + }, + { + -0.000201f, -0.003252f, -0.026328f, +0.010248f, +0.002700f, -0.002028f, +0.003345f, -0.006325f, +0.010878f, +0.000588f, + -0.015148f, +0.006245f, -0.007315f, +0.009676f, +0.009677f, -0.004836f, +0.018939f, +0.013087f, +0.002079f, +0.002942f, + -0.004586f, +0.018072f, +0.015798f, -0.014842f, +0.017552f, +0.023428f, -0.006628f, +0.010468f, -0.001964f, -0.016267f, + -0.005534f, -0.001651f, -0.014428f, -0.011295f, -0.013059f, -0.001457f, -0.013425f, -0.003939f, +0.003099f, +0.000122f, + +0.013123f, +0.004858f, -0.004689f, +0.000131f, +0.003189f, +0.005854f, +0.000162f, -0.002864f, -0.006892f, +0.003969f, + -0.000473f, +0.004836f, +0.001658f, +0.009435f, +0.003573f, +0.003924f, +0.004425f, -0.002596f, +0.001640f, -0.001497f, + -0.002680f, -0.003292f, +0.003017f, -0.005503f, +0.000298f, -0.001625f, -0.002398f, -0.003165f, -0.000225f, +0.000214f, + +0.000749f, -0.000301f, -0.007183f, +0.005533f, +0.003976f, +0.001506f, +0.004406f, -0.002025f, +0.001763f, -0.003878f, + +0.004226f, -0.000876f, -0.005287f, +0.000681f, -0.002731f, -0.000300f, +0.003980f, -0.000225f, -0.003659f, -0.001548f, + -0.000547f, +0.000130f, -0.000476f, -0.001171f, +0.002283f, +0.001741f + }, + { + +0.031571f, -0.083900f, +0.013026f, -0.021671f, -0.009555f, -0.007657f, -0.015240f, -0.018056f, +0.017106f, +0.001962f, + -0.024512f, +0.027283f, +0.011808f, -0.014544f, -0.002951f, +0.020451f, -0.009183f, -0.011078f, -0.014604f, +0.005953f, + +0.020072f, +0.001727f, +0.000739f, +0.002311f, +0.031429f, +0.015145f, +0.007650f, +0.009586f, +0.002267f, +0.007063f, + -0.004286f, +0.004348f, -0.004399f, +0.003522f, -0.005482f, -0.012738f, -0.008197f, +0.008594f, -0.009008f, -0.009554f, + +0.001569f, -0.012668f, -0.002822f, +0.000463f, -0.004098f, +0.004514f, -0.015788f, -0.000747f, +0.004724f, +0.004179f, + +0.011986f, -0.010398f, +0.000294f, +0.004724f, +0.001217f, -0.003976f, +0.000244f, +0.000329f, -0.008344f, -0.002790f, + +0.000122f, -0.003046f, +0.005269f, +0.000605f, +0.004846f, +0.002523f, -0.000662f, +0.005771f, +0.003938f, -0.000947f, + -0.004260f, -0.000607f, -0.005170f, -0.001030f, -0.003644f, +0.000505f, +0.003764f, -0.003017f, -0.002470f, -0.004702f, + +0.000164f, +0.003856f, -0.002208f, +0.003749f, +0.000014f, +0.001376f, +0.001709f, -0.000483f, -0.002019f, +0.003375f, + -0.000710f, -0.003237f, -0.002554f, +0.000461f, +0.000840f, -0.002494f + }, + { + +0.000112f, +0.070325f, +0.004281f, +0.005657f, -0.015212f, +0.001148f, +0.007523f, -0.007436f, +0.007316f, -0.007399f, + -0.008404f, +0.009405f, +0.015894f, +0.000567f, +0.014126f, +0.014485f, -0.010040f, -0.006641f, -0.016050f, +0.010368f, + +0.004237f, +0.012901f, +0.001859f, +0.003371f, -0.008537f, +0.015103f, +0.006752f, +0.005997f, -0.019243f, -0.019693f, + -0.006314f, -0.003993f, -0.004131f, -0.007157f, -0.006265f, +0.009876f, -0.009225f, -0.020931f, +0.006609f, +0.005601f, + +0.004604f, +0.015883f, -0.011285f, +0.014670f, -0.003391f, +0.001644f, -0.010002f, +0.001949f, +0.002065f, +0.006267f, + +0.000812f, -0.001799f, -0.004356f, -0.001330f, +0.003194f, -0.006966f, +0.005815f, -0.011526f, -0.001178f, -0.009438f, + +0.004382f, -0.004479f, -0.010575f, +0.010122f, -0.007218f, +0.004254f, -0.003256f, -0.001010f, +0.005079f, -0.007881f, + -0.000535f, -0.000586f, -0.000060f, +0.000643f, +0.002547f, -0.004584f, +0.001783f, -0.001524f, -0.005776f, -0.000289f, + -0.003153f, -0.002670f, +0.000683f, +0.001536f, +0.001248f, +0.000667f, -0.001786f, +0.001504f, -0.002074f, +0.002525f, + -0.004347f, -0.000369f, +0.002589f, +0.000463f, +0.000080f, -0.002093f + }, + { + +0.026448f, -0.133584f, +0.025158f, -0.014327f, -0.010610f, -0.008681f, -0.030922f, -0.010903f, -0.009600f, -0.008265f, + -0.006356f, +0.014296f, +0.023817f, +0.013528f, -0.013196f, +0.047383f, +0.011586f, -0.006601f, +0.011519f, +0.004110f, + -0.012795f, -0.002340f, +0.015749f, -0.002706f, -0.002415f, -0.010017f, +0.004443f, -0.005286f, -0.007190f, -0.008567f, + +0.003385f, -0.011140f, +0.017186f, +0.004284f, +0.005015f, -0.010256f, +0.010542f, +0.008584f, +0.013312f, -0.016088f, + +0.004362f, -0.000034f, -0.009853f, +0.004446f, -0.004349f, -0.001822f, +0.001609f, -0.009994f, -0.003046f, -0.004887f, + +0.002584f, +0.005784f, -0.001954f, -0.005563f, +0.010952f, +0.005270f, +0.000603f, +0.001855f, -0.001674f, -0.010872f, + -0.004481f, +0.002654f, +0.004793f, +0.006422f, +0.003293f, +0.010169f, +0.001862f, +0.000490f, +0.005747f, +0.001498f, + -0.003958f, +0.003439f, +0.003645f, -0.001872f, +0.001702f, -0.001654f, +0.002747f, +0.003463f, -0.002381f, -0.000450f, + +0.002010f, -0.002067f, +0.005348f, -0.003120f, -0.000289f, +0.003110f, -0.003234f, -0.000784f, -0.000097f, +0.000274f, + +0.003589f, -0.001604f, -0.000566f, -0.001116f, -0.001688f, -0.001684f + }, + { + -0.006064f, -0.067326f, +0.012364f, +0.000634f, -0.000900f, +0.034063f, -0.022461f, -0.019812f, +0.010672f, +0.010551f, + -0.029260f, -0.012859f, -0.030098f, +0.014237f, +0.002943f, +0.004998f, -0.045861f, +0.005933f, +0.024763f, -0.019022f, + +0.004359f, -0.007232f, -0.018324f, -0.005098f, -0.007940f, +0.013168f, -0.016433f, -0.012742f, -0.001112f, -0.012851f, + -0.007504f, -0.006141f, -0.017487f, -0.009630f, -0.013216f, -0.002371f, -0.006295f, -0.005639f, +0.012981f, -0.006994f, + -0.006503f, +0.003306f, -0.003984f, -0.019709f, +0.006388f, -0.002979f, +0.001276f, +0.011432f, -0.007093f, +0.011605f, + -0.001651f, -0.006555f, +0.003029f, -0.008482f, +0.008013f, +0.002579f, +0.008740f, -0.003004f, -0.008441f, +0.002635f, + -0.007367f, +0.000878f, -0.008045f, -0.000966f, +0.008577f, +0.001369f, -0.000249f, +0.000346f, +0.003207f, -0.003890f, + -0.006632f, +0.000249f, -0.001020f, +0.005277f, +0.005078f, -0.005974f, +0.006296f, +0.000231f, -0.005080f, -0.002543f, + -0.001248f, +0.006836f, -0.000918f, +0.002602f, -0.002579f, -0.001323f, +0.000632f, +0.000403f, -0.000780f, -0.001725f, + -0.001513f, -0.003120f, -0.000253f, -0.000270f, -0.001282f, +0.001044f + }, + { + -0.026194f, +0.072573f, -0.033856f, +0.002255f, -0.041848f, -0.023353f, -0.040674f, +0.048630f, -0.000206f, -0.003118f, + +0.016761f, -0.013540f, -0.003495f, -0.007329f, -0.027736f, +0.009087f, +0.007410f, +0.031677f, -0.005923f, +0.015883f, + -0.006264f, +0.004969f, -0.026796f, +0.008369f, -0.019482f, -0.003007f, +0.016413f, +0.000594f, -0.002008f, +0.006554f, + -0.002012f, -0.022579f, -0.010807f, +0.009639f, -0.017871f, +0.001263f, +0.023456f, +0.011910f, +0.005393f, -0.000333f, + -0.007555f, +0.002500f, +0.003111f, -0.001063f, -0.007625f, +0.013136f, -0.003169f, +0.005115f, -0.001972f, +0.010210f, + +0.001200f, -0.005694f, -0.006616f, +0.003382f, +0.002841f, +0.005855f, -0.007242f, +0.003171f, -0.000734f, -0.000283f, + -0.002439f, -0.000952f, -0.002799f, +0.002757f, -0.004034f, +0.004631f, +0.001144f, -0.000361f, +0.002385f, +0.000960f, + +0.000275f, -0.002123f, +0.001217f, +0.005877f, -0.001007f, -0.004077f, -0.001521f, +0.001257f, +0.000150f, +0.001161f, + -0.002821f, -0.001146f, +0.003725f, +0.002305f, +0.003146f, +0.000686f, -0.005258f, -0.002492f, +0.001288f, -0.003588f, + -0.000382f, +0.000687f, +0.000924f, +0.000408f, +0.002663f, -0.000194f + }, + { + -0.005333f, -0.013961f, +0.006058f, -0.008244f, -0.006553f, -0.002089f, +0.015833f, +0.000534f, +0.001294f, +0.015083f, + -0.026749f, -0.023236f, +0.013265f, -0.044125f, -0.006224f, -0.004086f, +0.020042f, -0.017766f, -0.002643f, -0.022544f, + -0.006801f, -0.025366f, -0.003397f, -0.001923f, -0.004693f, -0.008588f, -0.019055f, +0.024417f, +0.029883f, +0.007153f, + -0.010096f, +0.006203f, -0.014926f, +0.001558f, -0.012403f, +0.003994f, +0.022072f, +0.002079f, -0.004033f, +0.014122f, + +0.002101f, -0.007592f, -0.002507f, +0.002449f, +0.003907f, +0.005226f, -0.011198f, -0.017777f, -0.005850f, +0.017528f, + -0.005843f, -0.002664f, +0.000306f, -0.001851f, +0.002720f, -0.009128f, +0.003896f, +0.000298f, +0.010455f, -0.001401f, + +0.003695f, -0.007571f, +0.008414f, +0.006200f, +0.005619f, -0.002622f, -0.006733f, +0.000355f, -0.001028f, -0.008103f, + +0.004013f, -0.002580f, +0.000861f, +0.003151f, -0.001391f, +0.005796f, -0.003215f, -0.004343f, -0.000696f, -0.001122f, + -0.005309f, +0.001446f, +0.000059f, +0.000263f, +0.002120f, -0.000098f, +0.003159f, +0.002416f, +0.000889f, +0.002787f, + -0.003339f, +0.001324f, -0.000231f, +0.000119f, -0.001042f, +0.004037f + }, + { + +0.029813f, +0.021308f, +0.019922f, +0.017327f, -0.023762f, +0.056590f, -0.008786f, +0.015970f, -0.013899f, -0.013982f, + +0.022262f, -0.009262f, +0.001982f, +0.005517f, -0.003679f, -0.033679f, +0.014489f, -0.015208f, +0.002996f, +0.039557f, + -0.020541f, +0.006996f, -0.002844f, +0.006287f, +0.033331f, +0.006163f, +0.008959f, +0.019999f, +0.004219f, +0.006522f, + +0.013949f, +0.002653f, -0.004288f, -0.006279f, -0.015130f, +0.006864f, +0.008028f, +0.001464f, +0.000716f, -0.001311f, + -0.002444f, +0.007952f, +0.007181f, +0.001661f, +0.004716f, -0.005944f, +0.009543f, +0.003341f, +0.005550f, +0.006752f, + +0.003887f, +0.012829f, -0.001831f, -0.000574f, +0.009093f, +0.002500f, -0.000490f, -0.002974f, -0.004640f, +0.009986f, + -0.003977f, +0.003679f, +0.001180f, -0.003374f, +0.000349f, +0.003417f, -0.005388f, +0.001946f, +0.003314f, -0.001083f, + +0.000590f, -0.003200f, +0.003299f, +0.002926f, +0.001197f, +0.003097f, +0.000511f, -0.001543f, +0.000327f, -0.005199f, + +0.001991f, +0.000767f, +0.003396f, -0.000884f, +0.002550f, -0.002024f, -0.000368f, -0.001001f, +0.001995f, +0.006297f, + +0.003075f, +0.002307f, -0.000839f, -0.000169f, +0.002298f, +0.001661f + }, + { + +0.006619f, -0.035063f, +0.006079f, -0.004825f, -0.002176f, +0.006128f, -0.000716f, +0.008780f, -0.006182f, +0.000807f, + -0.004724f, +0.003277f, +0.001636f, +0.092291f, +0.199568f, -0.001970f, -0.014985f, -0.004706f, +0.014987f, -0.000349f, + -0.007548f, +0.010211f, +0.004299f, -0.009772f, +0.002414f, -0.001544f, -0.044721f, -0.008754f, -0.013429f, -0.018359f, + +0.012034f, +0.004103f, +0.001805f, +0.015064f, -0.010205f, +0.004475f, -0.002353f, -0.016202f, +0.003135f, -0.010728f, + +0.007030f, +0.000472f, +0.002027f, +0.016598f, +0.001442f, +0.019692f, +0.006257f, -0.007956f, -0.009646f, +0.006488f, + -0.001993f, +0.004836f, -0.009632f, +0.006239f, +0.008997f, -0.003903f, +0.002055f, -0.003972f, -0.006850f, +0.005214f, + +0.003880f, -0.006756f, +0.001486f, +0.001366f, -0.005527f, +0.003493f, -0.000827f, +0.001882f, +0.003902f, +0.006950f, + -0.002878f, +0.000555f, +0.001329f, -0.001452f, +0.000258f, +0.004574f, -0.005038f, +0.003768f, +0.000334f, +0.004443f, + +0.003049f, -0.001090f, -0.000202f, +0.000873f, +0.000085f, +0.005740f, -0.001118f, +0.000539f, -0.003141f, -0.004344f, + +0.000180f, -0.002352f, +0.001960f, -0.004105f, +0.000612f, -0.000221f + }, + { + +0.030820f, -0.015704f, -0.012518f, -0.017558f, +0.029422f, +0.026762f, -0.004679f, +0.001497f, -0.013952f, +0.012121f, + -0.001900f, +0.029267f, +0.006595f, -0.011783f, -0.081573f, +0.002779f, -0.012010f, -0.015129f, -0.010497f, +0.000095f, + -0.032652f, -0.002663f, -0.001632f, -0.027158f, -0.017970f, -0.004950f, -0.001082f, +0.028749f, -0.016059f, -0.023869f, + -0.003629f, -0.006145f, +0.003083f, +0.004201f, +0.010101f, -0.004099f, -0.004137f, -0.020921f, -0.001778f, +0.023552f, + -0.001505f, +0.011614f, -0.018616f, +0.011357f, +0.010698f, +0.014719f, -0.005235f, +0.009064f, +0.000797f, +0.001030f, + +0.009024f, -0.007817f, +0.000168f, +0.002301f, +0.002098f, +0.005086f, +0.002434f, +0.002378f, -0.008044f, +0.006506f, + +0.002378f, +0.003367f, +0.002865f, +0.009830f, +0.002702f, -0.011784f, -0.000023f, -0.007643f, +0.001820f, -0.007918f, + +0.005583f, -0.000084f, +0.012775f, +0.002211f, -0.004427f, -0.005924f, +0.000402f, +0.003350f, -0.003234f, -0.005911f, + +0.002308f, +0.000566f, +0.000581f, -0.003306f, -0.000342f, -0.000326f, -0.002686f, +0.001332f, -0.002485f, +0.000176f, + -0.002559f, -0.002798f, +0.001291f, +0.002158f, -0.000438f, -0.002978f + } + }, + { + { + -0.003373f, -0.026072f, +0.027737f, +0.021078f, -0.045470f, +0.003257f, -0.012750f, -0.008346f, +0.006075f, +0.001826f, + -0.011470f, +0.018426f, +0.002870f, -0.006068f, -0.000434f, +0.001287f, -0.004585f, +0.006528f, +0.025006f, -0.007036f, + +0.003309f, -0.019491f, -0.015075f, +0.027205f, -0.009573f, +0.025063f, -0.000355f, -0.003256f, +0.007354f, +0.009847f, + +0.005683f, -0.001836f, -0.019611f, +0.002167f, +0.002947f, -0.020624f, +0.015387f, +0.017162f, +0.009834f, +0.005906f, + +0.003860f, -0.005234f, -0.008793f, +0.006689f, -0.006339f, +0.001925f, -0.011191f, +0.001507f, +0.002117f, -0.004846f, + -0.001797f, +0.003135f, +0.007921f, -0.011396f, +0.006431f, +0.009096f, +0.003500f, +0.005262f, +0.000921f, -0.006382f, + -0.009119f, +0.002763f, -0.001652f, -0.003745f, -0.007893f, +0.006730f, +0.002335f, +0.000377f, -0.001807f, -0.008552f, + +0.001496f, -0.001456f, +0.000920f, -0.002330f, +0.004590f, -0.002962f, +0.005782f, +0.000477f, +0.001411f, -0.004913f, + +0.002419f, +0.002137f, +0.003979f, +0.001898f, -0.002550f, +0.003958f, -0.002966f, -0.002071f, -0.003394f, +0.001729f, + -0.000532f, +0.000282f, -0.002086f, +0.001647f, +0.003347f, +0.000858f + }, + { + -0.040305f, +0.116461f, +0.036514f, +0.209998f, +0.008867f, -0.020062f, +0.022635f, +0.000386f, -0.028635f, +0.009596f, + -0.016591f, -0.001241f, -0.003281f, +0.015694f, -0.005311f, -0.016855f, -0.012717f, +0.008968f, +0.001672f, -0.022145f, + +0.025160f, +0.020838f, -0.013993f, +0.008075f, +0.001051f, +0.011452f, -0.022027f, -0.000013f, +0.008421f, +0.002151f, + -0.015391f, +0.003041f, +0.005248f, -0.007344f, -0.005812f, +0.000651f, +0.010996f, +0.018468f, +0.007461f, +0.007911f, + +0.000080f, +0.004433f, -0.006936f, -0.002119f, -0.009158f, +0.012608f, +0.001858f, -0.003260f, -0.000811f, -0.009325f, + +0.006685f, -0.007757f, -0.001168f, -0.006576f, -0.004813f, +0.005739f, -0.005866f, +0.004440f, +0.006181f, -0.004945f, + -0.007593f, +0.008968f, +0.002117f, +0.001388f, +0.003646f, +0.003841f, -0.002374f, -0.002349f, +0.001043f, +0.004596f, + -0.007428f, -0.000846f, +0.003648f, -0.002548f, -0.000800f, -0.004579f, +0.002468f, -0.002754f, +0.006814f, +0.001600f, + -0.002769f, +0.003143f, +0.000791f, +0.000386f, -0.002288f, +0.004499f, -0.004068f, +0.006142f, -0.001527f, +0.002303f, + +0.001241f, +0.000840f, -0.001718f, +0.002834f, -0.005548f, -0.000595f + }, + { + +0.014201f, -0.000440f, -0.053130f, -0.065916f, +0.014266f, -0.009369f, -0.025501f, +0.018424f, +0.001778f, +0.018579f, + -0.013651f, -0.018519f, -0.022264f, +0.030297f, -0.014813f, +0.012376f, -0.002365f, +0.006126f, -0.009846f, -0.012211f, + +0.020811f, -0.015299f, +0.011683f, -0.013907f, -0.005487f, +0.006036f, +0.009961f, +0.001369f, -0.006124f, -0.005145f, + +0.000002f, +0.007869f, +0.016149f, +0.016847f, +0.002296f, -0.005928f, +0.009135f, +0.003750f, -0.005685f, +0.008169f, + -0.007065f, +0.000892f, +0.002538f, -0.008527f, -0.004574f, +0.001718f, -0.006254f, +0.001810f, -0.003072f, +0.005868f, + +0.000041f, +0.004532f, +0.011061f, +0.015566f, +0.002376f, -0.006510f, -0.003474f, +0.003731f, -0.001799f, +0.008630f, + +0.000681f, +0.002785f, -0.001247f, +0.000318f, -0.001266f, -0.006146f, +0.001896f, +0.001008f, +0.003892f, -0.002346f, + -0.001617f, +0.001632f, -0.006663f, -0.001940f, -0.000784f, -0.002352f, +0.001207f, -0.002690f, +0.000242f, +0.003079f, + -0.003437f, -0.004413f, +0.001584f, -0.003274f, +0.000663f, -0.001294f, -0.002844f, -0.002933f, -0.000035f, +0.002111f, + +0.001982f, -0.000431f, -0.002251f, +0.001171f, +0.000834f, -0.005026f + }, + { + +0.001781f, +0.044265f, -0.019376f, -0.019376f, +0.001258f, -0.000576f, -0.001934f, -0.006368f, -0.000394f, +0.000916f, + +0.009531f, -0.007330f, -0.020044f, -0.006488f, +0.005060f, -0.001126f, -0.000353f, -0.005288f, +0.005738f, -0.003449f, + +0.008016f, +0.016207f, +0.008477f, -0.002055f, -0.004727f, +0.017955f, +0.007904f, +0.012613f, -0.019120f, -0.014279f, + -0.013758f, +0.011008f, -0.006559f, +0.005889f, -0.013741f, -0.007468f, +0.010306f, +0.001641f, -0.003365f, +0.006465f, + -0.012715f, -0.007115f, -0.010812f, -0.006516f, -0.004675f, -0.005980f, +0.008488f, +0.001143f, +0.010137f, +0.011527f, + +0.003503f, -0.011479f, -0.002270f, -0.002909f, -0.008155f, +0.001548f, +0.006279f, -0.002992f, +0.003596f, +0.010433f, + +0.014918f, +0.004314f, +0.002751f, -0.000133f, +0.004714f, -0.000495f, -0.001096f, -0.006609f, -0.005655f, +0.001912f, + +0.002598f, +0.001945f, -0.008501f, -0.002364f, +0.001708f, +0.000124f, +0.004951f, +0.001317f, +0.000395f, +0.003001f, + -0.000943f, -0.003920f, -0.004182f, +0.003447f, +0.000564f, -0.000670f, -0.000817f, +0.002453f, -0.003032f, +0.001000f, + -0.002415f, +0.001206f, +0.003647f, -0.000034f, -0.001889f, -0.001567f + }, + { + -0.020701f, -0.060666f, -0.000839f, -0.046255f, +0.018864f, -0.001763f, +0.004106f, -0.008052f, +0.013819f, -0.010465f, + +0.041384f, +0.025547f, +0.026081f, +0.004553f, +0.017346f, -0.009079f, +0.006912f, -0.030853f, +0.007656f, +0.019643f, + -0.001005f, +0.013751f, -0.002790f, -0.008881f, -0.003269f, -0.014077f, -0.004353f, -0.027967f, +0.004185f, +0.008858f, + -0.002122f, +0.008501f, -0.005681f, -0.003297f, -0.007132f, -0.002219f, -0.006411f, -0.014555f, +0.008991f, -0.014026f, + +0.006050f, +0.002239f, +0.002614f, +0.010890f, -0.001229f, -0.000145f, +0.007620f, -0.001565f, -0.003480f, -0.014800f, + +0.008202f, -0.000945f, +0.006326f, -0.009275f, -0.003752f, +0.004521f, -0.007053f, +0.005924f, +0.003286f, +0.002357f, + +0.001861f, -0.005416f, -0.000014f, +0.000130f, +0.009229f, -0.001211f, +0.000955f, +0.004350f, -0.007341f, -0.001837f, + -0.004264f, -0.001621f, -0.002837f, -0.002016f, -0.002169f, +0.002127f, -0.000874f, -0.002023f, -0.003826f, -0.001254f, + -0.000457f, -0.002212f, +0.000897f, +0.001349f, -0.000239f, +0.000359f, -0.002435f, +0.002425f, +0.001788f, +0.003424f, + +0.003684f, +0.000953f, -0.003932f, -0.001289f, -0.001466f, +0.000787f + }, + { + +0.002791f, -0.039373f, +0.003226f, +0.003728f, +0.002587f, -0.002258f, +0.001450f, -0.008698f, +0.010829f, -0.000591f, + +0.006203f, -0.002592f, +0.001535f, +0.005814f, +0.002506f, -0.008789f, +0.026316f, +0.020423f, -0.019301f, +0.018341f, + +0.001322f, +0.006170f, -0.012531f, +0.030803f, +0.004626f, +0.022645f, -0.005206f, +0.019246f, -0.019457f, -0.017745f, + -0.012831f, +0.001598f, +0.005278f, -0.013810f, -0.011551f, -0.006527f, -0.015637f, +0.004253f, +0.001998f, +0.010100f, + -0.016367f, +0.021647f, -0.010266f, -0.002728f, +0.009580f, -0.001926f, +0.006434f, -0.004441f, -0.003080f, +0.002223f, + -0.004328f, +0.004664f, +0.005561f, +0.009296f, +0.006196f, +0.007362f, -0.000342f, -0.006981f, -0.000369f, +0.003781f, + -0.001673f, -0.001036f, +0.000424f, -0.007932f, +0.004110f, -0.002595f, -0.003479f, -0.004762f, +0.004086f, +0.000525f, + -0.003815f, -0.004232f, +0.002926f, +0.002399f, +0.005099f, +0.000371f, +0.000349f, +0.001311f, +0.004068f, +0.000424f, + -0.002779f, +0.000123f, -0.003043f, +0.000265f, -0.000022f, -0.000770f, +0.003201f, -0.004006f, +0.000533f, -0.001462f, + -0.000406f, -0.000434f, -0.001636f, +0.001161f, +0.001042f, +0.002260f + }, + { + -0.041635f, +0.018181f, -0.022480f, -0.020219f, +0.016876f, -0.010029f, -0.006852f, -0.003638f, -0.009486f, -0.015831f, + +0.017987f, -0.003557f, -0.000737f, +0.009181f, -0.011878f, +0.018715f, -0.003936f, -0.009569f, -0.019761f, +0.003433f, + +0.030048f, -0.010589f, -0.002517f, +0.002505f, +0.051214f, +0.001008f, +0.017319f, -0.006976f, +0.013916f, +0.003604f, + -0.016513f, +0.016019f, +0.005684f, +0.002035f, -0.004263f, -0.019631f, -0.003700f, +0.000413f, -0.009238f, -0.014826f, + -0.001909f, +0.000819f, -0.014224f, +0.009213f, +0.004844f, -0.005749f, -0.007703f, -0.002575f, +0.001294f, +0.013349f, + +0.005345f, -0.009588f, -0.004252f, +0.005998f, +0.002696f, -0.000523f, -0.004040f, +0.003774f, -0.006364f, +0.001032f, + -0.005316f, +0.001099f, +0.005021f, -0.001795f, +0.004080f, +0.007708f, +0.000696f, +0.003393f, +0.001368f, -0.002489f, + -0.001614f, -0.000822f, -0.005228f, +0.000102f, -0.004396f, -0.000215f, -0.000949f, +0.002321f, -0.000887f, -0.007174f, + +0.001737f, +0.000626f, +0.001608f, +0.003730f, -0.000720f, -0.000934f, +0.000554f, +0.001964f, -0.000081f, +0.000297f, + -0.001530f, +0.000108f, -0.004093f, +0.000519f, +0.001515f, -0.003413f + }, + { + +0.005705f, +0.022543f, +0.024256f, -0.015689f, +0.005729f, +0.003987f, -0.002109f, +0.003935f, +0.002009f, -0.007747f, + -0.009548f, +0.019941f, -0.001830f, +0.009730f, +0.008181f, +0.008988f, +0.022337f, -0.017282f, -0.017428f, +0.004759f, + +0.013087f, +0.012237f, +0.015175f, -0.013945f, +0.005570f, +0.014072f, -0.017353f, +0.010156f, -0.024722f, -0.007708f, + +0.017536f, -0.025816f, -0.008244f, -0.014749f, +0.003360f, +0.017958f, -0.018660f, -0.015868f, -0.007280f, +0.014636f, + +0.003622f, -0.002198f, -0.001743f, +0.012665f, +0.003982f, -0.003087f, -0.007368f, +0.000208f, +0.001196f, +0.008677f, + +0.009296f, -0.016040f, +0.000229f, +0.000296f, -0.003844f, +0.001712f, -0.000256f, -0.007790f, +0.001225f, -0.009635f, + +0.002651f, -0.007767f, -0.006318f, +0.006222f, +0.000961f, +0.000768f, -0.004120f, +0.004957f, +0.001694f, -0.002206f, + -0.003289f, -0.001187f, +0.000426f, +0.002883f, -0.000770f, -0.003375f, -0.002132f, -0.000901f, -0.001059f, -0.002430f, + +0.000263f, -0.002942f, +0.000766f, -0.000496f, +0.002333f, +0.000442f, -0.002329f, +0.001325f, +0.000679f, -0.001108f, + -0.002028f, -0.003444f, +0.004673f, -0.000424f, +0.000927f, +0.000744f + }, + { + -0.050001f, -0.039459f, -0.010088f, -0.034530f, +0.044948f, -0.006264f, -0.024922f, -0.017641f, -0.025316f, -0.014234f, + +0.032042f, +0.002240f, +0.016386f, +0.026897f, -0.021872f, +0.022864f, +0.032251f, -0.005697f, -0.004946f, +0.011790f, + -0.016217f, -0.004044f, +0.011090f, -0.002312f, -0.004472f, -0.002357f, -0.001913f, -0.003240f, -0.004803f, -0.004077f, + +0.004126f, +0.012007f, -0.002415f, +0.008357f, +0.005482f, -0.005849f, -0.004723f, +0.012644f, +0.005282f, +0.000234f, + +0.000112f, +0.000097f, -0.014558f, +0.003932f, +0.001734f, -0.013450f, +0.010804f, -0.003204f, -0.014204f, -0.004164f, + +0.009976f, +0.002896f, -0.000176f, -0.002791f, +0.009171f, +0.004659f, -0.000465f, -0.000672f, -0.001977f, -0.009627f, + -0.004465f, +0.004962f, +0.000934f, +0.015954f, +0.003254f, +0.001119f, +0.000843f, -0.000002f, +0.004008f, +0.000675f, + +0.000344f, +0.003625f, +0.003708f, +0.000543f, -0.002568f, +0.003772f, +0.001330f, -0.000771f, -0.004676f, +0.005096f, + -0.003063f, +0.000836f, +0.003838f, +0.001812f, +0.000315f, +0.001883f, -0.002696f, -0.001800f, +0.001065f, -0.000920f, + +0.002596f, +0.000573f, -0.001209f, -0.002797f, -0.000390f, -0.000770f + }, + { + +0.005748f, -0.063657f, +0.000455f, -0.000281f, +0.007427f, -0.006892f, +0.037384f, -0.008578f, -0.016977f, -0.002951f, + -0.021726f, -0.003252f, -0.021523f, -0.002561f, +0.012087f, -0.011674f, -0.043982f, -0.002336f, +0.013774f, -0.002113f, + -0.000235f, +0.007497f, -0.022503f, +0.002592f, -0.000348f, +0.004524f, -0.002820f, -0.016960f, -0.003206f, -0.009506f, + +0.002425f, -0.016389f, -0.028196f, +0.018056f, -0.008606f, -0.019631f, -0.005185f, +0.001534f, +0.005282f, -0.016727f, + +0.009719f, -0.000955f, +0.003182f, -0.011585f, -0.008489f, +0.002126f, +0.001186f, +0.005505f, +0.007910f, +0.002016f, + -0.009922f, +0.002796f, -0.002320f, -0.001697f, +0.008119f, +0.007748f, -0.002016f, +0.005771f, -0.007787f, -0.000945f, + -0.005460f, -0.000503f, -0.000734f, -0.007797f, +0.005573f, +0.005881f, -0.004637f, +0.001846f, -0.002921f, +0.000758f, + -0.004533f, -0.001745f, -0.001315f, +0.000889f, +0.005060f, -0.002864f, +0.004425f, -0.002644f, -0.003198f, -0.000408f, + +0.004107f, +0.003732f, -0.001856f, -0.000714f, +0.002335f, -0.004288f, +0.003392f, -0.001345f, +0.000152f, -0.003365f, + +0.001418f, -0.005521f, -0.000328f, +0.001777f, -0.003502f, +0.001874f + }, + { + +0.032627f, +0.063910f, -0.080475f, -0.030679f, -0.008481f, -0.052312f, -0.007505f, +0.025200f, +0.019512f, +0.013208f, + -0.010385f, -0.001370f, -0.015478f, -0.009758f, +0.009835f, -0.002031f, +0.003731f, +0.036289f, -0.004511f, +0.006633f, + -0.006868f, -0.002967f, -0.019205f, -0.000551f, -0.001654f, -0.011031f, +0.007055f, +0.014891f, -0.028940f, +0.020136f, + -0.012052f, -0.008885f, +0.002697f, +0.003808f, -0.010538f, +0.002788f, +0.008398f, +0.006230f, +0.009915f, -0.002450f, + -0.008646f, +0.012905f, -0.000506f, +0.002364f, -0.004357f, +0.013201f, -0.003833f, -0.002911f, +0.004585f, +0.006711f, + -0.004535f, -0.008360f, +0.005836f, +0.003789f, -0.004531f, +0.002175f, +0.001839f, -0.002434f, +0.006866f, -0.003298f, + -0.004861f, +0.000364f, +0.003984f, +0.004062f, -0.006105f, +0.005258f, +0.000414f, -0.002664f, +0.004582f, -0.001158f, + +0.000437f, +0.000090f, +0.003345f, -0.001451f, +0.000310f, -0.000590f, -0.000762f, +0.001490f, -0.000126f, +0.002556f, + -0.004563f, +0.001432f, +0.003882f, +0.000828f, -0.000215f, -0.001532f, -0.000807f, -0.003824f, +0.000828f, -0.003447f, + -0.003030f, +0.000154f, +0.001730f, +0.003242f, +0.000675f, -0.000573f + }, + { + +0.004146f, -0.004189f, -0.000224f, -0.014485f, -0.000480f, +0.001139f, +0.010259f, -0.000123f, +0.003240f, +0.009621f, + -0.011827f, -0.029556f, -0.016910f, -0.008868f, +0.003027f, -0.022465f, +0.015235f, -0.000901f, +0.011223f, -0.025457f, + -0.018612f, -0.023185f, -0.009107f, -0.022501f, +0.011632f, -0.004261f, -0.010229f, +0.039146f, +0.024645f, -0.003540f, + +0.007338f, -0.001890f, -0.013647f, -0.013531f, +0.002201f, +0.005954f, -0.007401f, +0.007110f, +0.015487f, +0.009549f, + +0.006366f, -0.015239f, -0.003920f, +0.018424f, -0.003683f, +0.002323f, -0.007813f, -0.010131f, -0.003986f, +0.007734f, + -0.003927f, -0.000542f, -0.003012f, +0.000601f, +0.000228f, -0.005355f, +0.004084f, +0.000946f, +0.009294f, -0.005207f, + +0.000741f, +0.004192f, -0.000820f, +0.008058f, +0.006533f, -0.004577f, +0.004527f, -0.005486f, -0.003071f, +0.000648f, + -0.002293f, +0.001666f, -0.000338f, -0.001266f, +0.003301f, +0.005280f, -0.004167f, +0.000971f, -0.003663f, -0.000190f, + -0.003993f, -0.001238f, +0.005467f, -0.003209f, +0.004736f, -0.000644f, -0.001768f, +0.004992f, +0.000321f, +0.003122f, + -0.003045f, +0.001126f, +0.001545f, -0.000442f, -0.001751f, +0.001182f + }, + { + -0.016122f, +0.120275f, -0.022465f, +0.022309f, +0.007732f, +0.012737f, +0.003782f, +0.025340f, -0.006806f, -0.010905f, + +0.009440f, +0.012088f, +0.022004f, -0.038556f, +0.014077f, -0.009376f, -0.021018f, -0.011568f, +0.017376f, +0.002784f, + +0.010490f, -0.001864f, -0.013762f, +0.039046f, -0.011540f, +0.012071f, +0.019996f, +0.007288f, +0.001038f, +0.017987f, + +0.013491f, -0.011431f, +0.002366f, +0.003639f, -0.009955f, +0.003317f, +0.002052f, +0.006544f, -0.009050f, +0.007483f, + +0.004017f, +0.008568f, +0.000376f, +0.016149f, -0.008716f, +0.013460f, -0.008705f, +0.014491f, -0.007087f, +0.011795f, + +0.008276f, -0.002970f, +0.005099f, -0.000401f, +0.005388f, +0.001672f, +0.007164f, -0.000993f, -0.009074f, +0.013236f, + -0.001756f, -0.000741f, +0.000157f, -0.002038f, +0.001003f, -0.002433f, +0.003485f, +0.000034f, +0.003029f, +0.001869f, + -0.000883f, +0.000577f, -0.002644f, +0.004587f, -0.002519f, +0.003673f, -0.000124f, +0.000015f, +0.003103f, -0.007439f, + +0.000778f, +0.002140f, +0.002209f, -0.001168f, +0.004530f, -0.001084f, -0.001499f, +0.002282f, +0.000947f, +0.004239f, + +0.002749f, +0.004764f, +0.000174f, -0.000140f, +0.000520f, +0.000952f + }, + { + -0.007982f, -0.019290f, +0.003205f, +0.008390f, -0.001356f, -0.007039f, +0.008470f, -0.000664f, +0.011155f, -0.005476f, + +0.004864f, -0.000135f, -0.000788f, +0.065342f, +0.207535f, -0.017658f, -0.004473f, -0.008221f, +0.006340f, +0.005352f, + +0.020846f, -0.017696f, +0.010486f, -0.005108f, -0.004468f, -0.026043f, -0.017180f, -0.018450f, -0.025851f, -0.010528f, + -0.004362f, +0.002841f, +0.007890f, +0.010964f, +0.014368f, -0.010433f, -0.011158f, +0.000389f, +0.003098f, -0.017442f, + +0.000786f, -0.001870f, +0.010488f, +0.006832f, -0.003274f, +0.023161f, -0.000218f, +0.000503f, -0.006148f, -0.005156f, + +0.008170f, -0.000378f, +0.010804f, -0.008229f, +0.000636f, -0.000888f, -0.000161f, -0.000441f, -0.013764f, +0.006765f, + -0.003482f, +0.005408f, +0.000615f, -0.005950f, -0.005451f, +0.009112f, +0.000101f, -0.001978f, +0.004624f, +0.003188f, + +0.007073f, -0.003523f, +0.000092f, -0.004004f, +0.004860f, +0.001970f, -0.004163f, -0.001564f, +0.004488f, +0.003035f, + +0.000911f, +0.002268f, -0.002122f, +0.001839f, +0.004331f, +0.002213f, -0.001280f, -0.004412f, +0.002771f, -0.004929f, + -0.003002f, +0.000747f, -0.001247f, -0.002882f, +0.000241f, -0.001632f + }, + { + -0.029652f, +0.074370f, +0.003590f, -0.012669f, +0.008611f, -0.007839f, +0.013520f, +0.003986f, -0.002347f, +0.012983f, + +0.009738f, +0.014807f, +0.006496f, -0.044508f, -0.032595f, +0.012885f, -0.028133f, -0.021413f, -0.003070f, -0.007488f, + -0.010081f, -0.004543f, -0.012965f, -0.016258f, -0.005560f, -0.020664f, +0.005218f, +0.015305f, -0.001053f, -0.015732f, + -0.012834f, +0.006894f, +0.000161f, -0.001152f, +0.008538f, -0.002929f, -0.021564f, +0.004315f, +0.001197f, +0.007809f, + +0.018218f, -0.003601f, -0.010041f, +0.014932f, +0.007698f, +0.008839f, -0.002707f, -0.001333f, -0.001218f, +0.009630f, + +0.006260f, -0.005776f, -0.006020f, +0.005404f, +0.000172f, +0.002903f, +0.007972f, +0.001763f, -0.003855f, +0.000538f, + +0.005815f, +0.002590f, -0.001258f, +0.013094f, +0.001724f, -0.009377f, -0.002095f, -0.001557f, -0.005579f, -0.004454f, + +0.003611f, +0.004770f, +0.004197f, +0.000283f, +0.000847f, -0.005866f, -0.000321f, +0.000553f, -0.003446f, -0.004589f, + +0.001463f, +0.000113f, -0.002207f, -0.001720f, -0.001170f, -0.001113f, +0.000540f, -0.004104f, +0.001163f, -0.000589f, + -0.004173f, +0.000042f, +0.000584f, -0.000333f, -0.000117f, -0.001998f + } + }, + { + { + +0.000567f, -0.078455f, -0.014022f, +0.078781f, -0.001611f, -0.006773f, -0.014416f, -0.007692f, +0.014302f, +0.015974f, + -0.007435f, +0.006048f, +0.002159f, -0.004832f, +0.018453f, +0.017847f, -0.010728f, -0.012347f, +0.023036f, +0.008632f, + +0.013061f, -0.014631f, -0.004423f, +0.035262f, -0.007039f, +0.025193f, +0.004260f, +0.006295f, +0.006132f, -0.008440f, + +0.004089f, +0.017281f, -0.001046f, +0.010408f, +0.009816f, -0.011970f, +0.012617f, +0.002294f, -0.013952f, -0.008363f, + -0.002088f, +0.003846f, -0.008653f, +0.002443f, -0.004687f, +0.000345f, -0.007276f, +0.000336f, -0.005256f, -0.008255f, + -0.006005f, -0.009361f, +0.000331f, -0.007056f, +0.009871f, +0.002034f, -0.001880f, +0.007680f, +0.008914f, -0.000311f, + -0.009230f, +0.003776f, +0.002668f, +0.000217f, -0.007509f, -0.000864f, -0.003580f, -0.000069f, +0.001167f, -0.000737f, + +0.009743f, +0.003371f, +0.000581f, -0.006271f, +0.001075f, -0.004667f, +0.001782f, +0.000619f, +0.003804f, -0.005423f, + +0.000293f, -0.001562f, +0.000353f, +0.003683f, -0.003719f, +0.001412f, -0.003159f, +0.001511f, -0.000707f, +0.001169f, + +0.000406f, +0.001659f, -0.001707f, -0.000388f, +0.000663f, +0.000894f + }, + { + +0.042745f, +0.137323f, -0.055737f, +0.140146f, -0.038142f, -0.012829f, +0.014641f, -0.009713f, -0.015015f, -0.006884f, + -0.048946f, +0.002902f, -0.006265f, -0.001798f, -0.015076f, -0.028108f, -0.001091f, +0.020321f, +0.016859f, -0.003616f, + +0.007975f, +0.010062f, -0.015003f, +0.007419f, -0.002356f, +0.001229f, -0.030731f, -0.003154f, -0.003088f, -0.000723f, + -0.017060f, +0.003761f, +0.002586f, -0.007952f, -0.009157f, -0.002997f, +0.008814f, +0.024324f, +0.011547f, +0.009690f, + -0.003035f, +0.012846f, +0.015562f, +0.009026f, -0.005177f, +0.002307f, -0.009137f, -0.000408f, +0.011597f, -0.008914f, + +0.002528f, -0.004500f, +0.003764f, -0.003456f, +0.003318f, +0.014623f, -0.000241f, -0.004450f, -0.002494f, -0.004414f, + -0.008844f, +0.011497f, +0.001145f, -0.000518f, +0.002947f, +0.003063f, -0.001928f, +0.004825f, +0.000011f, +0.000591f, + -0.008011f, -0.001124f, -0.000439f, -0.003229f, +0.000049f, -0.001387f, +0.009345f, -0.002844f, -0.001382f, -0.004541f, + -0.006584f, +0.001291f, +0.001686f, +0.000444f, -0.003292f, +0.004808f, -0.005713f, +0.003497f, -0.005360f, +0.000382f, + -0.000642f, +0.002292f, +0.000889f, +0.005153f, -0.003348f, -0.001602f + }, + { + -0.010640f, +0.084811f, +0.030523f, -0.114623f, +0.019694f, +0.028707f, -0.006320f, +0.022253f, -0.001132f, +0.024295f, + +0.011366f, +0.005361f, -0.034090f, +0.028470f, -0.013467f, -0.001700f, -0.006720f, +0.021579f, -0.018748f, -0.029874f, + +0.036404f, -0.006823f, +0.008282f, -0.003686f, +0.012413f, +0.028190f, +0.015309f, -0.002169f, -0.011188f, -0.002273f, + -0.001468f, +0.009012f, +0.006366f, +0.005880f, +0.019649f, -0.011547f, -0.005393f, +0.009464f, -0.014939f, -0.012367f, + -0.008044f, -0.000585f, -0.006301f, -0.007363f, -0.002003f, +0.008093f, -0.003234f, -0.000867f, -0.002375f, +0.005070f, + -0.007338f, -0.001900f, -0.003793f, +0.002707f, -0.002224f, +0.001408f, +0.007892f, +0.005177f, -0.004105f, +0.006187f, + -0.004130f, +0.004424f, +0.000030f, -0.001380f, -0.002548f, -0.000379f, +0.005220f, -0.003723f, -0.000709f, -0.002483f, + -0.002196f, -0.002928f, -0.007652f, -0.001427f, +0.002364f, +0.001956f, +0.004841f, -0.000095f, -0.001187f, +0.004001f, + -0.001993f, -0.003449f, +0.002843f, -0.001914f, +0.001180f, +0.000221f, -0.000997f, -0.001072f, -0.000820f, +0.002246f, + +0.003322f, +0.001138f, -0.001753f, -0.000608f, +0.000421f, -0.000497f + }, + { + -0.001146f, +0.069208f, +0.000707f, -0.012934f, +0.010187f, -0.000645f, -0.000291f, -0.005334f, +0.002279f, +0.007200f, + +0.015476f, -0.002289f, -0.010302f, -0.010403f, +0.014865f, -0.009833f, -0.021946f, -0.000046f, +0.031763f, +0.013726f, + +0.005800f, +0.010629f, +0.026888f, +0.000780f, -0.009894f, +0.046780f, +0.042709f, +0.020672f, -0.006682f, +0.002029f, + -0.001446f, +0.006028f, -0.000223f, +0.008749f, -0.016092f, -0.019243f, -0.017058f, -0.011486f, +0.011034f, +0.020760f, + +0.001447f, +0.014779f, -0.003276f, -0.000229f, -0.001743f, -0.007262f, +0.001946f, -0.003624f, +0.003322f, +0.005654f, + -0.000079f, -0.018210f, -0.008613f, +0.002659f, -0.000916f, +0.005581f, +0.013044f, -0.000644f, +0.004629f, +0.005077f, + +0.003449f, -0.004964f, -0.001271f, -0.002680f, +0.008453f, +0.006836f, +0.003819f, -0.000888f, -0.000861f, +0.007736f, + +0.004824f, +0.002761f, -0.008669f, +0.000601f, +0.007362f, +0.002832f, +0.005592f, -0.002464f, +0.001238f, +0.006241f, + +0.000386f, -0.002994f, -0.003703f, +0.001044f, -0.003853f, -0.002901f, -0.001148f, +0.003523f, -0.004981f, +0.000086f, + -0.001803f, +0.002571f, +0.005622f, +0.002632f, -0.000727f, -0.001403f + }, + { + +0.025155f, +0.004468f, +0.016118f, -0.062087f, -0.008844f, +0.000691f, -0.001993f, -0.023413f, -0.008279f, -0.027353f, + +0.023963f, -0.013885f, +0.004857f, +0.006289f, +0.025252f, -0.000230f, +0.005657f, -0.030925f, +0.000750f, +0.006133f, + +0.004652f, +0.020753f, -0.008961f, -0.004879f, +0.018637f, -0.009403f, -0.010350f, -0.014194f, +0.002561f, +0.005638f, + -0.008237f, +0.009435f, -0.000274f, +0.009800f, -0.004362f, -0.007492f, -0.007210f, -0.012065f, +0.032680f, +0.011686f, + +0.015412f, +0.002771f, +0.002345f, +0.008741f, -0.000470f, +0.013727f, +0.007530f, -0.006375f, +0.004679f, -0.005570f, + +0.001516f, -0.005024f, +0.015131f, +0.005178f, +0.001617f, +0.001713f, -0.005894f, +0.003770f, -0.001287f, +0.002229f, + +0.006722f, -0.007315f, -0.007428f, -0.009105f, +0.006179f, +0.004769f, +0.002570f, +0.004300f, -0.001946f, +0.005781f, + -0.000396f, -0.002129f, -0.002063f, +0.002342f, +0.005364f, +0.002596f, -0.006227f, -0.007135f, -0.004883f, -0.001231f, + -0.000064f, +0.002252f, +0.002259f, +0.000784f, -0.000935f, +0.002963f, +0.001559f, +0.004209f, +0.001825f, +0.002119f, + +0.001572f, +0.000765f, -0.003152f, +0.000129f, -0.001183f, -0.000902f + }, + { + +0.000022f, -0.035947f, +0.023888f, -0.005123f, -0.003714f, -0.001504f, -0.000094f, -0.008330f, +0.006845f, +0.001660f, + +0.008502f, -0.005704f, +0.009779f, +0.035774f, +0.011487f, -0.045697f, +0.000492f, +0.002360f, -0.024175f, +0.022926f, + +0.007380f, +0.000900f, -0.016506f, +0.026922f, -0.016617f, +0.002153f, -0.016609f, +0.011128f, -0.022116f, -0.021433f, + -0.017901f, +0.011544f, +0.033825f, +0.013401f, +0.005748f, +0.010677f, -0.003652f, +0.004900f, +0.001949f, +0.009479f, + -0.016302f, +0.024679f, -0.001751f, +0.000787f, +0.003465f, -0.006251f, +0.013360f, +0.001125f, +0.003361f, +0.005652f, + -0.008188f, +0.001644f, +0.005830f, +0.009239f, +0.000922f, -0.001636f, -0.004125f, -0.001787f, +0.006234f, +0.006248f, + +0.000968f, +0.002324f, -0.000158f, -0.002502f, +0.009269f, -0.000281f, +0.000753f, -0.002225f, +0.006581f, -0.002186f, + -0.007846f, -0.005589f, +0.006022f, +0.003241f, +0.005529f, +0.000518f, -0.002481f, +0.002478f, +0.007959f, +0.002878f, + -0.002137f, +0.001121f, +0.000915f, +0.003426f, -0.000385f, -0.000621f, -0.000225f, -0.006815f, +0.002566f, +0.003258f, + +0.003528f, -0.000189f, -0.001567f, +0.000405f, -0.001108f, +0.001228f + }, + { + +0.034975f, +0.120090f, +0.002513f, -0.029772f, -0.013804f, +0.005452f, +0.011316f, -0.012873f, -0.032186f, -0.013810f, + +0.024263f, +0.004812f, +0.002478f, +0.015920f, +0.003021f, +0.014908f, -0.025675f, -0.032950f, -0.023524f, -0.008021f, + +0.022676f, -0.013500f, -0.009004f, -0.022976f, +0.003063f, -0.017200f, +0.014393f, -0.001741f, +0.010572f, -0.006213f, + -0.020220f, +0.012941f, +0.005422f, +0.016068f, +0.009463f, -0.005776f, +0.003483f, +0.001395f, -0.008731f, -0.011506f, + +0.001996f, +0.005885f, -0.015412f, +0.012766f, +0.003912f, -0.010765f, +0.002271f, +0.007812f, +0.004637f, +0.009792f, + -0.003885f, -0.002923f, -0.003710f, -0.004428f, +0.005975f, +0.005800f, -0.001398f, +0.006892f, +0.000162f, +0.006504f, + +0.004116f, +0.003808f, +0.002836f, -0.000160f, +0.002895f, +0.009426f, +0.001559f, -0.002082f, -0.000072f, -0.001185f, + +0.000037f, +0.001156f, -0.001323f, +0.002872f, -0.005768f, -0.004140f, -0.002834f, +0.002672f, +0.000226f, -0.003843f, + +0.004755f, +0.003631f, +0.001268f, +0.002173f, -0.002180f, -0.004521f, -0.001419f, -0.001753f, -0.000487f, +0.003098f, + +0.001168f, +0.003896f, -0.001965f, +0.000354f, +0.000931f, -0.002691f + }, + { + -0.001258f, -0.047092f, -0.002599f, -0.007058f, +0.009199f, -0.000244f, -0.008190f, -0.007759f, -0.004611f, +0.003813f, + -0.006509f, +0.008387f, +0.001785f, +0.037450f, +0.011718f, -0.021220f, +0.009143f, -0.007191f, -0.011554f, -0.016410f, + -0.008274f, +0.005054f, +0.013672f, -0.011965f, -0.012616f, -0.023360f, -0.030087f, +0.015120f, +0.007626f, +0.013092f, + +0.037129f, +0.003230f, +0.008095f, -0.009739f, +0.012253f, +0.003188f, -0.017231f, -0.002647f, -0.007076f, +0.009161f, + -0.003649f, -0.014994f, +0.001888f, +0.008433f, -0.000026f, +0.007953f, +0.002960f, -0.002364f, -0.005317f, -0.001127f, + +0.012569f, -0.008772f, -0.005678f, +0.002622f, -0.000579f, +0.000373f, -0.001294f, -0.003796f, +0.004649f, -0.003712f, + +0.005468f, -0.003315f, +0.000756f, +0.005080f, +0.004680f, +0.006229f, -0.000592f, +0.007735f, +0.008042f, +0.005206f, + -0.000823f, -0.003291f, -0.002514f, +0.002826f, -0.001112f, +0.000514f, +0.003561f, +0.004918f, +0.003905f, +0.002681f, + +0.003548f, -0.003317f, +0.001169f, -0.001764f, +0.001480f, +0.001443f, +0.000136f, +0.003021f, +0.001623f, -0.002168f, + -0.000956f, -0.004886f, +0.000223f, +0.000332f, +0.002745f, +0.001082f + }, + { + +0.065298f, +0.101848f, -0.014203f, -0.066230f, -0.000336f, +0.018271f, -0.004374f, -0.015465f, -0.006061f, -0.001190f, + +0.045663f, +0.021101f, -0.012585f, -0.017230f, -0.033675f, +0.003544f, +0.020354f, -0.012805f, -0.025041f, -0.000477f, + -0.014078f, -0.005426f, +0.003721f, +0.012273f, +0.019058f, +0.014443f, +0.005546f, -0.002608f, -0.004942f, -0.001130f, + +0.013722f, +0.020669f, -0.000940f, +0.008577f, +0.008347f, +0.001896f, -0.016438f, +0.001768f, +0.003574f, +0.011571f, + -0.002964f, -0.003218f, -0.009166f, +0.009698f, +0.000816f, -0.018891f, +0.008721f, -0.003014f, -0.015311f, +0.003239f, + +0.011428f, +0.001337f, +0.012456f, +0.008707f, +0.003765f, -0.006220f, -0.001866f, +0.000180f, -0.002474f, -0.011685f, + -0.008231f, +0.001450f, -0.003845f, +0.010263f, -0.000353f, -0.002089f, -0.002584f, -0.006858f, -0.004302f, -0.004726f, + +0.001575f, +0.003402f, +0.000746f, +0.004647f, +0.000219f, -0.001311f, -0.000979f, +0.000032f, -0.005870f, +0.003975f, + -0.004039f, +0.003509f, +0.000771f, -0.000424f, +0.002725f, +0.002506f, -0.001470f, -0.002965f, +0.000144f, -0.000673f, + +0.000328f, -0.000942f, -0.001546f, -0.001398f, +0.001609f, -0.000195f + }, + { + -0.006985f, -0.041919f, +0.033977f, +0.004181f, +0.012421f, -0.004877f, +0.042294f, -0.000072f, -0.014678f, -0.006268f, + -0.032896f, -0.001089f, -0.017667f, -0.016133f, +0.002254f, -0.004419f, -0.037756f, -0.013928f, +0.005871f, -0.001807f, + +0.008104f, +0.016574f, -0.004716f, +0.020092f, +0.007444f, +0.019087f, +0.011807f, -0.008233f, +0.009508f, -0.000731f, + +0.014530f, +0.003356f, -0.017743f, +0.023918f, +0.006806f, -0.001382f, -0.004752f, +0.000802f, +0.018524f, +0.001293f, + +0.008349f, -0.007312f, +0.007726f, -0.005418f, -0.007884f, +0.009068f, +0.005160f, +0.007179f, +0.011224f, -0.001669f, + -0.008344f, -0.001296f, -0.007805f, +0.000943f, +0.005787f, +0.006084f, +0.002505f, +0.016234f, +0.000881f, -0.000463f, + -0.003120f, +0.002264f, +0.005180f, -0.003223f, +0.003161f, +0.004224f, -0.005565f, -0.002407f, -0.009347f, +0.002207f, + +0.002827f, +0.002738f, -0.004785f, -0.004895f, +0.003644f, -0.003663f, +0.002424f, +0.001403f, +0.004549f, +0.003057f, + +0.004450f, +0.002172f, -0.004311f, -0.005470f, +0.001726f, -0.000541f, +0.004261f, -0.002206f, +0.000766f, -0.002069f, + +0.001076f, -0.002222f, +0.002699f, +0.002210f, -0.004442f, +0.001959f + }, + { + -0.040589f, +0.074499f, +0.019944f, -0.022315f, +0.000428f, +0.040682f, +0.087025f, +0.027556f, +0.021370f, +0.009746f, + -0.017868f, +0.019515f, +0.005085f, +0.012251f, +0.035368f, +0.017038f, +0.010206f, +0.018586f, -0.029489f, -0.011864f, + -0.005660f, +0.022103f, +0.011691f, +0.006667f, +0.008252f, -0.010098f, -0.000816f, +0.022717f, -0.014680f, +0.013365f, + -0.004332f, +0.012326f, -0.000907f, +0.004374f, +0.007022f, -0.002277f, -0.011601f, -0.001345f, +0.002686f, +0.005067f, + -0.000675f, +0.005670f, -0.005804f, +0.002964f, -0.007749f, +0.006043f, -0.006833f, +0.003354f, +0.009278f, +0.002298f, + -0.005270f, -0.009554f, +0.009649f, +0.006689f, -0.009492f, -0.006807f, +0.000848f, -0.002173f, +0.006716f, +0.001755f, + +0.000133f, -0.004694f, +0.000770f, +0.004344f, -0.000597f, +0.007103f, -0.000518f, -0.005922f, +0.000564f, -0.005351f, + -0.000286f, +0.002235f, +0.001632f, -0.003285f, +0.001343f, +0.001684f, +0.003017f, +0.003850f, +0.001067f, -0.000378f, + -0.006584f, +0.000132f, -0.000467f, -0.002844f, -0.000664f, -0.002173f, +0.000760f, -0.000410f, +0.001569f, -0.002839f, + -0.003592f, +0.000202f, +0.003244f, +0.001933f, -0.001125f, -0.001616f + }, + { + -0.003989f, +0.029621f, +0.042213f, -0.012531f, -0.003289f, +0.001854f, +0.016654f, +0.002387f, +0.002632f, +0.000386f, + +0.006732f, -0.005224f, -0.011646f, +0.016611f, -0.014764f, -0.041669f, +0.022039f, +0.007071f, +0.019647f, -0.001562f, + +0.002446f, -0.008960f, -0.018749f, -0.020507f, +0.011329f, -0.002597f, -0.009623f, +0.013037f, +0.002672f, +0.004277f, + +0.016342f, -0.004334f, -0.000674f, -0.010480f, -0.012173f, -0.007718f, -0.018458f, +0.004812f, +0.018674f, +0.007118f, + +0.002902f, -0.010240f, +0.008200f, +0.027690f, -0.000763f, +0.005325f, -0.007188f, -0.002236f, -0.001461f, -0.010165f, + -0.013460f, +0.003882f, +0.002332f, +0.005381f, +0.002431f, -0.011178f, -0.003502f, -0.002385f, +0.001765f, -0.006719f, + +0.003526f, +0.008383f, -0.003674f, +0.001089f, +0.007664f, +0.003412f, +0.011734f, -0.001499f, -0.000600f, +0.003340f, + +0.002408f, +0.006242f, +0.000816f, -0.001177f, +0.002360f, +0.000767f, -0.005091f, +0.003153f, -0.003077f, +0.000052f, + +0.001771f, +0.001162f, +0.003342f, -0.002610f, +0.004351f, -0.004487f, -0.004175f, +0.002887f, -0.004432f, +0.001976f, + +0.001100f, +0.001582f, +0.000038f, -0.002163f, -0.001671f, -0.002651f + }, + { + -0.015431f, +0.140840f, -0.012133f, +0.026533f, +0.012752f, -0.036588f, -0.027067f, +0.024119f, -0.000250f, -0.014700f, + +0.015062f, +0.032842f, +0.022344f, -0.017965f, +0.052357f, +0.024020f, -0.000370f, -0.004523f, +0.009964f, +0.014962f, + +0.023118f, -0.000418f, -0.028581f, +0.009064f, -0.040760f, -0.010760f, +0.005323f, -0.004168f, -0.011648f, +0.018809f, + -0.002929f, -0.012038f, +0.023462f, +0.011745f, -0.001611f, +0.012182f, -0.005913f, -0.001811f, -0.003835f, +0.019058f, + +0.006604f, -0.010231f, -0.013173f, +0.013597f, -0.006443f, +0.017617f, -0.010296f, +0.001375f, -0.019008f, +0.013225f, + +0.006532f, -0.005984f, +0.011321f, -0.002380f, -0.003284f, -0.001052f, +0.003946f, -0.000511f, -0.006765f, +0.011467f, + -0.001016f, +0.000289f, +0.001328f, -0.007194f, -0.003326f, -0.000020f, +0.000254f, -0.008969f, -0.001094f, +0.004688f, + +0.005440f, +0.004581f, -0.002401f, +0.003191f, -0.003045f, +0.003593f, -0.001506f, -0.001107f, +0.003731f, -0.003851f, + +0.001276f, -0.001167f, +0.000024f, +0.000218f, +0.003933f, -0.000565f, +0.000157f, +0.003025f, -0.000302f, +0.000647f, + +0.001562f, +0.005547f, +0.001958f, -0.000621f, -0.001614f, +0.000775f + }, + { + +0.007212f, -0.023992f, -0.012930f, +0.019534f, +0.016253f, +0.011515f, +0.016867f, -0.006941f, +0.008906f, -0.008772f, + +0.002777f, +0.001046f, -0.003473f, -0.078365f, -0.022739f, -0.045413f, +0.014457f, -0.027941f, -0.020230f, +0.011047f, + +0.006975f, -0.038391f, -0.016778f, -0.016118f, -0.005937f, -0.016443f, +0.001454f, -0.000292f, -0.020183f, -0.008326f, + -0.017710f, -0.013728f, -0.006860f, +0.011000f, +0.030206f, -0.002404f, -0.011590f, +0.010047f, +0.008252f, -0.027136f, + -0.017430f, -0.014751f, +0.000906f, -0.003764f, -0.014272f, +0.009201f, -0.006077f, +0.007766f, +0.008751f, +0.006475f, + +0.014503f, -0.002183f, +0.008027f, -0.016952f, -0.000931f, +0.001936f, +0.001493f, +0.004654f, -0.021576f, -0.002669f, + -0.003595f, +0.004916f, +0.005244f, -0.000961f, -0.008445f, +0.001535f, +0.001715f, +0.000291f, -0.000354f, -0.001816f, + +0.010091f, -0.003850f, +0.001595f, -0.003535f, +0.004458f, +0.002675f, -0.003643f, -0.004279f, +0.001306f, +0.002238f, + -0.002209f, +0.001923f, -0.000678f, +0.002649f, +0.005315f, -0.001386f, -0.004652f, -0.003293f, +0.006245f, -0.006155f, + -0.002108f, +0.001619f, -0.003372f, -0.002105f, -0.002347f, -0.002767f + }, + { + +0.010683f, +0.143497f, +0.012330f, +0.000397f, +0.008080f, -0.042482f, -0.005340f, -0.008920f, +0.001859f, +0.015276f, + +0.019256f, -0.004922f, -0.006785f, +0.024311f, +0.057960f, +0.017120f, -0.031647f, -0.024541f, -0.000435f, +0.004493f, + +0.006705f, +0.016207f, -0.004193f, -0.002276f, +0.026553f, +0.007774f, +0.009852f, -0.002260f, -0.018934f, -0.001403f, + +0.007511f, +0.023110f, +0.019687f, +0.004820f, -0.005039f, -0.011981f, -0.015702f, +0.022247f, +0.016931f, +0.007269f, + +0.015467f, -0.009263f, -0.009975f, -0.004447f, -0.006115f, -0.002370f, -0.011027f, -0.018346f, -0.016374f, -0.002887f, + +0.000810f, -0.004438f, +0.002933f, +0.011453f, +0.001367f, +0.009770f, +0.009446f, -0.000612f, -0.006826f, -0.002589f, + +0.009566f, +0.005584f, -0.005375f, +0.002651f, +0.000870f, -0.000040f, -0.001113f, +0.001156f, +0.002564f, +0.003045f, + -0.002048f, -0.003134f, -0.005162f, -0.003897f, +0.000263f, -0.004570f, -0.001452f, -0.002739f, -0.006203f, -0.002025f, + +0.002647f, -0.001709f, -0.002566f, +0.001648f, +0.000277f, +0.000264f, +0.002604f, -0.000738f, +0.001048f, -0.000211f, + +0.000931f, +0.001684f, +0.000134f, -0.001016f, -0.000505f, +0.000826f + } + }, + { + { + +0.001916f, -0.120157f, +0.008225f, +0.054829f, +0.027659f, -0.014513f, -0.004872f, +0.004228f, +0.001738f, +0.002726f, + +0.022034f, -0.014115f, -0.015396f, -0.013743f, +0.040653f, +0.021437f, +0.014356f, -0.033857f, +0.004382f, +0.033850f, + +0.008929f, -0.010487f, -0.012265f, +0.029814f, +0.009501f, +0.005859f, +0.017421f, -0.006914f, +0.013288f, -0.010085f, + +0.021559f, +0.016783f, -0.010780f, +0.019135f, +0.008598f, -0.003810f, -0.002975f, +0.000130f, -0.018440f, +0.002517f, + -0.015276f, +0.000813f, +0.002312f, +0.000483f, -0.005443f, -0.016823f, -0.000751f, +0.010358f, -0.002744f, -0.011235f, + -0.008080f, -0.011586f, +0.002250f, -0.008332f, +0.003767f, +0.007914f, +0.003170f, -0.001539f, +0.008582f, +0.000526f, + -0.005546f, +0.004973f, +0.003186f, +0.001795f, -0.006194f, -0.003627f, -0.004155f, +0.001497f, +0.000099f, +0.004409f, + +0.006739f, +0.002481f, -0.000107f, -0.000617f, -0.000716f, +0.000083f, -0.005309f, +0.006501f, -0.000957f, -0.002616f, + -0.002694f, +0.000579f, +0.000280f, +0.004063f, -0.000729f, -0.000796f, -0.003173f, +0.002251f, -0.000698f, -0.000835f, + +0.002288f, +0.000506f, +0.000495f, -0.000107f, -0.001422f, +0.001205f + }, + { + -0.045767f, +0.082199f, +0.072573f, +0.050805f, +0.022360f, -0.017582f, +0.015538f, -0.019786f, +0.010679f, -0.028563f, + +0.006168f, +0.006427f, -0.032228f, -0.016719f, -0.012083f, -0.030149f, +0.024400f, +0.006799f, +0.016926f, +0.010563f, + -0.000078f, -0.006825f, +0.002744f, -0.000558f, +0.005567f, -0.003073f, -0.027940f, -0.010112f, -0.004467f, +0.005064f, + -0.010630f, +0.002591f, -0.007079f, -0.001268f, -0.008130f, +0.000979f, +0.008131f, +0.019437f, +0.006759f, +0.014579f, + -0.001315f, +0.008162f, +0.020405f, +0.005566f, -0.000398f, -0.006096f, -0.002207f, -0.007979f, +0.010676f, +0.001441f, + +0.000922f, -0.002859f, +0.010989f, -0.000796f, -0.000343f, +0.005224f, +0.007537f, -0.007843f, -0.001693f, -0.001883f, + -0.005251f, +0.001913f, +0.002559f, +0.002314f, -0.005613f, +0.007331f, +0.000670f, +0.007358f, -0.002434f, -0.000535f, + -0.003552f, -0.004269f, -0.001892f, -0.001265f, -0.000547f, +0.003653f, +0.003680f, +0.002425f, -0.007606f, -0.004792f, + -0.003943f, -0.000439f, +0.002755f, -0.002695f, -0.002454f, +0.001726f, -0.001167f, +0.001083f, -0.003211f, -0.001337f, + -0.001708f, +0.002132f, +0.002126f, +0.003261f, -0.000673f, -0.002266f + }, + { + +0.006127f, +0.183323f, -0.047388f, -0.083534f, +0.003003f, +0.014536f, +0.012473f, +0.005068f, +0.013893f, +0.006720f, + -0.007436f, +0.012238f, -0.008229f, +0.007823f, +0.007216f, -0.017490f, -0.007574f, +0.020673f, -0.016695f, -0.008813f, + +0.017134f, +0.007691f, -0.003551f, +0.004343f, +0.033863f, +0.019713f, +0.005794f, -0.003078f, -0.021531f, +0.001003f, + +0.001683f, +0.008030f, +0.001987f, -0.001696f, +0.018805f, -0.000805f, -0.000954f, +0.000688f, -0.009187f, -0.019771f, + +0.002187f, -0.005309f, -0.012335f, -0.002880f, -0.002118f, +0.001117f, +0.001884f, +0.004926f, +0.002002f, -0.009879f, + -0.001389f, -0.004175f, +0.000933f, -0.001812f, -0.001982f, +0.001640f, +0.009573f, +0.002555f, -0.000572f, -0.003006f, + +0.006255f, +0.001975f, +0.000264f, +0.000265f, -0.004373f, -0.000386f, +0.003355f, +0.003607f, -0.010698f, +0.000364f, + +0.004913f, -0.007896f, -0.005243f, -0.003231f, +0.000718f, +0.006373f, -0.002046f, +0.001404f, +0.001620f, +0.001894f, + -0.005539f, +0.001710f, +0.002212f, -0.001156f, +0.002291f, -0.000713f, -0.001027f, +0.000654f, -0.001388f, +0.002392f, + +0.001272f, +0.002404f, +0.001809f, -0.003175f, -0.001557f, +0.002642f + }, + { + +0.000803f, +0.063452f, +0.005278f, +0.000740f, +0.000238f, -0.000892f, -0.002132f, -0.004217f, +0.004752f, +0.005969f, + +0.015349f, -0.015644f, +0.004577f, -0.007984f, +0.024373f, -0.015115f, -0.033214f, -0.012022f, +0.059794f, +0.026493f, + -0.016433f, +0.009041f, +0.049994f, -0.018218f, -0.004712f, +0.032904f, +0.042182f, +0.013546f, -0.009055f, -0.000753f, + +0.026658f, -0.011396f, +0.000095f, +0.009349f, -0.020386f, -0.022812f, -0.010080f, -0.005733f, +0.011149f, +0.008144f, + +0.015363f, +0.012063f, +0.001612f, +0.000083f, -0.000616f, +0.001636f, -0.011149f, +0.001294f, -0.004688f, +0.009295f, + -0.001788f, -0.010603f, -0.017498f, +0.003649f, +0.013078f, -0.002361f, +0.008189f, +0.003197f, +0.002069f, +0.001042f, + -0.001779f, -0.000544f, -0.003659f, +0.000690f, +0.006587f, +0.004359f, +0.001519f, +0.002812f, -0.004221f, +0.009727f, + +0.003075f, +0.001603f, -0.005633f, +0.004175f, +0.005685f, -0.001669f, +0.007463f, -0.002555f, +0.000013f, +0.003456f, + +0.000111f, +0.001884f, -0.003564f, +0.001334f, -0.006728f, -0.001602f, -0.002712f, +0.003541f, -0.002352f, -0.001850f, + -0.000891f, +0.004705f, +0.003209f, +0.001091f, +0.000919f, +0.000999f + }, + { + -0.017979f, +0.094034f, -0.018996f, -0.080108f, +0.018217f, -0.001063f, -0.007319f, -0.007967f, -0.022919f, -0.008610f, + +0.034648f, -0.064124f, -0.002988f, +0.025717f, -0.012239f, +0.038388f, +0.001078f, -0.006276f, -0.001051f, -0.001169f, + -0.002801f, +0.023091f, -0.006807f, -0.004433f, +0.011622f, +0.003710f, -0.008227f, -0.001901f, -0.014145f, -0.004191f, + +0.014453f, +0.005020f, -0.002839f, +0.016828f, -0.018929f, -0.007487f, +0.005500f, -0.000241f, +0.018654f, +0.019380f, + +0.007162f, +0.008882f, -0.009353f, +0.011921f, +0.001546f, +0.016647f, -0.008146f, +0.010626f, +0.002397f, -0.000734f, + +0.002067f, -0.002196f, +0.004221f, +0.009094f, +0.003721f, -0.000697f, -0.001351f, +0.002744f, -0.000946f, -0.001259f, + +0.008675f, -0.013001f, -0.000406f, +0.000358f, -0.007420f, +0.007863f, +0.004412f, -0.002457f, +0.003975f, +0.004753f, + +0.002367f, -0.003084f, +0.000258f, +0.001625f, +0.004572f, +0.003455f, -0.003766f, -0.009921f, -0.002223f, -0.001458f, + -0.004356f, +0.005226f, +0.002469f, -0.001779f, -0.001262f, +0.006076f, +0.001803f, +0.004138f, +0.002431f, -0.001169f, + +0.001215f, +0.000662f, -0.002150f, -0.000708f, +0.002700f, -0.002986f + }, + { + -0.002449f, +0.007566f, -0.009036f, -0.002672f, +0.003169f, -0.003518f, -0.002340f, -0.001828f, +0.003582f, -0.002926f, + +0.009065f, -0.001170f, +0.007222f, -0.002066f, +0.018532f, -0.021493f, +0.008020f, -0.003136f, -0.011815f, +0.018325f, + -0.018255f, +0.014966f, -0.006305f, +0.016441f, -0.023664f, +0.001060f, +0.001594f, -0.012931f, -0.024976f, +0.007938f, + -0.010478f, +0.002029f, +0.023156f, +0.011371f, +0.000386f, +0.016610f, +0.013001f, -0.005345f, +0.003083f, -0.000732f, + +0.013140f, +0.003678f, +0.007057f, -0.002167f, +0.003746f, -0.004780f, +0.010691f, +0.003485f, -0.001973f, +0.006566f, + -0.003930f, +0.000767f, +0.000928f, +0.006571f, +0.007935f, -0.009723f, -0.000434f, -0.000594f, +0.003210f, +0.008505f, + +0.000606f, +0.003654f, +0.001640f, +0.000924f, +0.006317f, -0.006656f, +0.009257f, -0.002810f, +0.002301f, -0.005122f, + -0.000956f, -0.006609f, +0.003153f, +0.003238f, +0.005449f, +0.000196f, +0.000118f, +0.002680f, +0.004765f, +0.003675f, + -0.000766f, +0.002076f, +0.000248f, +0.001515f, +0.000327f, -0.000014f, -0.002763f, -0.003781f, +0.002050f, +0.002505f, + +0.001451f, +0.000445f, +0.000830f, -0.000108f, -0.001813f, +0.000680f + }, + { + -0.009844f, +0.183997f, -0.007835f, -0.049970f, +0.028158f, -0.008024f, +0.005408f, -0.004760f, -0.026396f, -0.000373f, + +0.027293f, -0.018704f, +0.016234f, -0.004752f, +0.019778f, +0.017308f, -0.016946f, -0.039490f, -0.037082f, +0.010522f, + -0.008805f, +0.000741f, -0.011525f, -0.009318f, -0.028313f, -0.001688f, +0.018047f, +0.003207f, -0.008833f, -0.000361f, + -0.006299f, +0.000687f, -0.003061f, +0.014533f, +0.011247f, +0.006789f, -0.011727f, +0.010798f, -0.008690f, -0.000910f, + -0.004860f, +0.004901f, -0.008261f, +0.008054f, +0.006579f, -0.013874f, +0.000549f, +0.016733f, +0.008676f, -0.006816f, + +0.001966f, -0.006266f, -0.001080f, -0.005580f, +0.005686f, +0.002344f, +0.006166f, -0.001106f, +0.007817f, +0.002805f, + +0.005656f, +0.010167f, -0.004816f, +0.002138f, +0.007797f, +0.002555f, -0.000545f, -0.002399f, +0.003946f, -0.003440f, + -0.000693f, +0.003308f, +0.001621f, -0.000312f, -0.005592f, -0.001735f, -0.003877f, +0.000854f, -0.000353f, +0.002443f, + -0.000060f, +0.005051f, -0.000049f, -0.000570f, +0.001747f, -0.003899f, -0.002573f, -0.003064f, -0.002020f, +0.004965f, + +0.001684f, +0.001620f, -0.000188f, +0.002311f, -0.001355f, -0.000415f + }, + { + -0.004353f, -0.033570f, -0.004006f, +0.005012f, +0.000192f, -0.004901f, -0.004935f, -0.005035f, -0.006613f, -0.003987f, + -0.003529f, -0.001641f, +0.011658f, +0.025780f, +0.014319f, +0.008683f, -0.030709f, -0.009019f, -0.030878f, -0.003064f, + -0.005391f, +0.005052f, +0.008064f, -0.018462f, +0.007657f, -0.020628f, -0.020750f, -0.016548f, +0.026360f, +0.020488f, + +0.026354f, -0.011880f, +0.031703f, -0.021054f, +0.018940f, +0.005197f, -0.014373f, -0.013938f, +0.002039f, +0.006070f, + -0.000890f, -0.019090f, +0.011291f, +0.004843f, -0.001538f, +0.005249f, +0.008583f, -0.007700f, -0.006936f, +0.005514f, + +0.005164f, +0.004927f, -0.006641f, -0.000979f, +0.001866f, -0.006139f, +0.002077f, -0.004426f, -0.005459f, +0.003551f, + +0.008608f, +0.001692f, -0.003864f, +0.001658f, +0.007709f, +0.001931f, +0.008335f, +0.000564f, +0.009082f, +0.009453f, + -0.002263f, -0.002849f, -0.002143f, -0.001162f, -0.000921f, +0.001499f, +0.004214f, +0.003063f, +0.003238f, +0.004641f, + +0.001318f, -0.002662f, +0.004527f, -0.002668f, +0.001354f, -0.000664f, +0.001921f, +0.001786f, +0.001970f, -0.002308f, + -0.001154f, +0.000018f, -0.004184f, +0.000653f, +0.003802f, -0.000593f + }, + { + -0.065447f, +0.292990f, -0.045472f, -0.061734f, +0.019237f, +0.014213f, +0.013943f, -0.043522f, +0.037151f, +0.016003f, + -0.001148f, +0.044640f, -0.030681f, -0.030184f, -0.004407f, -0.001586f, -0.004032f, +0.020496f, -0.028263f, -0.022156f, + +0.004288f, -0.004563f, -0.000964f, +0.007412f, +0.010177f, +0.025315f, +0.000086f, +0.002601f, -0.003334f, +0.000536f, + +0.005825f, +0.016467f, +0.000151f, +0.011249f, +0.008537f, +0.003080f, -0.030662f, +0.017638f, +0.007553f, +0.006307f, + -0.004951f, -0.003600f, -0.011535f, +0.016181f, -0.002086f, -0.016902f, +0.007785f, -0.003332f, -0.007985f, +0.007123f, + +0.003432f, -0.001006f, +0.014859f, +0.010771f, +0.000110f, -0.009139f, +0.000103f, -0.001736f, -0.003696f, -0.005165f, + -0.009343f, -0.002000f, +0.004563f, +0.005064f, -0.001469f, -0.002743f, -0.002082f, -0.007447f, -0.004077f, -0.005150f, + -0.000284f, +0.002484f, +0.003675f, +0.004913f, -0.001790f, -0.002235f, -0.001207f, -0.002656f, -0.003216f, -0.000210f, + -0.002449f, +0.007118f, -0.002986f, -0.000723f, +0.006726f, -0.002770f, +0.001983f, -0.001935f, +0.000210f, -0.000970f, + -0.002600f, -0.000495f, -0.000168f, +0.002074f, -0.002475f, -0.000217f + }, + { + +0.009501f, +0.000529f, -0.008106f, -0.006825f, +0.017822f, +0.017804f, -0.002703f, +0.003289f, -0.016800f, -0.006880f, + -0.028242f, -0.019675f, +0.005907f, -0.009475f, +0.000031f, -0.002439f, -0.023133f, -0.011976f, -0.003885f, -0.026533f, + +0.026220f, +0.013952f, +0.018406f, +0.003744f, -0.003755f, +0.033555f, -0.000098f, +0.002046f, -0.006454f, +0.010202f, + +0.023659f, -0.023692f, +0.012347f, +0.028888f, -0.006746f, +0.015409f, -0.005470f, -0.006318f, +0.009579f, +0.007520f, + +0.006777f, -0.006126f, +0.005240f, -0.008843f, -0.006496f, +0.008964f, +0.005090f, +0.005611f, +0.009432f, +0.000296f, + +0.003741f, -0.007074f, -0.012568f, -0.004039f, +0.010495f, +0.004039f, +0.001926f, +0.013646f, +0.004206f, -0.000931f, + -0.000562f, -0.000735f, +0.002555f, +0.006754f, -0.006409f, +0.009101f, -0.002630f, -0.007983f, -0.007066f, -0.003199f, + +0.007386f, +0.003995f, -0.007878f, +0.001792f, -0.000869f, -0.002098f, -0.000574f, +0.001441f, +0.005214f, +0.004502f, + +0.006194f, -0.001132f, -0.003455f, -0.003114f, +0.002195f, +0.000608f, -0.001342f, +0.002045f, +0.000784f, -0.002423f, + -0.002383f, +0.002347f, +0.000537f, +0.001326f, -0.002723f, -0.000075f + }, + { + +0.049399f, -0.017031f, -0.006236f, +0.024172f, -0.000727f, +0.043195f, +0.051799f, +0.046068f, +0.010309f, -0.003214f, + +0.004790f, +0.005020f, +0.014172f, +0.022145f, +0.017766f, +0.021251f, -0.013792f, +0.027389f, -0.026833f, -0.002679f, + -0.013695f, +0.038954f, +0.017129f, +0.000340f, +0.011154f, -0.000296f, +0.003882f, +0.006084f, +0.007010f, -0.015359f, + +0.022055f, +0.015368f, -0.019371f, +0.010511f, +0.007551f, -0.013713f, -0.004202f, +0.001076f, -0.016054f, +0.020257f, + -0.003139f, -0.004527f, +0.004122f, -0.008829f, +0.004749f, -0.000720f, -0.000276f, +0.006325f, +0.005099f, -0.005903f, + +0.004148f, -0.009879f, +0.005503f, +0.001225f, -0.006336f, -0.007178f, +0.005167f, -0.001654f, -0.004500f, +0.007208f, + +0.004870f, -0.006704f, -0.004464f, +0.000924f, +0.004090f, +0.001817f, +0.002230f, -0.003443f, -0.001875f, -0.005910f, + +0.001780f, +0.002646f, -0.000369f, -0.002071f, +0.001915f, +0.001276f, +0.006311f, -0.001518f, +0.002287f, -0.000934f, + -0.001956f, -0.002075f, -0.002307f, -0.002385f, -0.002153f, +0.002959f, -0.000680f, +0.002050f, -0.002916f, -0.001001f, + -0.000086f, -0.000343f, +0.002180f, -0.000084f, +0.002998f, -0.003161f + }, + { + +0.004119f, +0.054014f, +0.008125f, -0.010001f, -0.007656f, +0.013811f, +0.017860f, -0.008988f, +0.013999f, -0.006775f, + +0.013277f, +0.002805f, -0.007896f, +0.006772f, -0.052354f, +0.006562f, -0.012068f, +0.037051f, +0.001655f, -0.019806f, + +0.016989f, +0.019447f, -0.045866f, -0.000913f, -0.018083f, -0.009828f, -0.000691f, +0.017784f, -0.027103f, +0.025424f, + +0.015062f, -0.009420f, -0.004806f, -0.008431f, +0.000783f, -0.013613f, +0.005520f, -0.005204f, +0.009243f, -0.003967f, + -0.001493f, +0.002432f, +0.017218f, +0.018297f, -0.000543f, +0.008609f, -0.005116f, -0.006292f, +0.003060f, -0.014666f, + -0.009539f, +0.003556f, +0.003637f, +0.002669f, -0.002738f, -0.005812f, -0.006568f, -0.011076f, +0.003453f, +0.004910f, + +0.000625f, +0.002602f, -0.000054f, -0.005077f, +0.010854f, +0.003919f, +0.006267f, +0.004229f, -0.000514f, +0.000983f, + +0.005193f, +0.008220f, -0.000667f, -0.001881f, -0.000343f, +0.000421f, -0.000816f, -0.001700f, +0.000044f, -0.002182f, + +0.002330f, -0.001234f, +0.003222f, +0.001792f, -0.000501f, -0.004897f, -0.002170f, +0.000895f, -0.004033f, -0.000037f, + +0.005907f, +0.000381f, -0.001449f, -0.000834f, -0.001044f, -0.002739f + }, + { + +0.046591f, +0.061951f, -0.014144f, +0.005669f, +0.035047f, -0.040569f, -0.021593f, -0.003218f, -0.005428f, +0.039559f, + -0.005745f, +0.016321f, +0.016963f, +0.002906f, +0.036760f, +0.009466f, +0.006855f, +0.030965f, -0.021641f, +0.047086f, + +0.006379f, +0.007408f, -0.031397f, -0.025760f, -0.001609f, -0.002734f, -0.006535f, +0.003178f, -0.021521f, +0.014402f, + -0.004925f, -0.001024f, +0.003828f, +0.016987f, -0.008047f, +0.019689f, -0.006697f, -0.004011f, +0.012617f, +0.000757f, + +0.004967f, -0.018960f, +0.002781f, +0.003505f, +0.003268f, -0.005787f, +0.012640f, -0.006955f, -0.006676f, +0.011621f, + +0.003223f, -0.007699f, +0.008525f, +0.008047f, -0.009728f, -0.001457f, -0.004368f, -0.002956f, -0.000182f, +0.001857f, + +0.001109f, -0.001217f, +0.004299f, -0.002229f, -0.011057f, +0.000078f, +0.000275f, -0.002217f, -0.007371f, +0.005360f, + +0.003301f, +0.001521f, +0.007968f, +0.000361f, -0.002480f, -0.001080f, -0.002378f, +0.004824f, -0.002540f, +0.000424f, + -0.001234f, -0.000652f, -0.001394f, +0.007760f, -0.000549f, -0.001987f, +0.001206f, +0.005854f, -0.001748f, -0.003567f, + +0.004524f, +0.002246f, +0.004924f, -0.000272f, -0.000345f, +0.001243f + }, + { + -0.006401f, -0.054502f, +0.029506f, +0.009015f, +0.012361f, +0.006630f, +0.019938f, -0.000200f, -0.006666f, +0.001470f, + +0.001697f, -0.006488f, -0.010410f, +0.003509f, -0.140299f, -0.015465f, +0.013303f, -0.024859f, -0.019556f, +0.028339f, + -0.026542f, -0.009040f, -0.037257f, +0.008280f, -0.021696f, +0.005717f, -0.025729f, +0.024082f, -0.020780f, -0.012270f, + -0.031933f, +0.000954f, -0.011669f, +0.022867f, +0.011493f, +0.002723f, -0.011730f, +0.011219f, +0.017872f, -0.021678f, + -0.018166f, -0.014514f, -0.001070f, -0.009268f, -0.011924f, +0.012709f, -0.010482f, +0.000841f, +0.016613f, +0.002027f, + +0.027145f, -0.008523f, -0.001274f, -0.004380f, -0.004398f, +0.001542f, +0.005899f, +0.001149f, -0.016648f, -0.007989f, + +0.004418f, -0.002223f, -0.000859f, +0.002757f, -0.000183f, -0.007780f, +0.007030f, -0.002776f, -0.000886f, +0.001706f, + +0.003922f, -0.002013f, +0.006120f, -0.000396f, +0.000928f, -0.001369f, -0.001581f, +0.001734f, +0.000879f, +0.000303f, + -0.003886f, -0.001754f, +0.002233f, +0.002522f, +0.003378f, -0.002518f, -0.003939f, -0.000478f, +0.003535f, -0.003076f, + +0.000247f, -0.001720f, -0.004042f, +0.000438f, -0.002853f, -0.000543f + }, + { + +0.017791f, +0.109493f, +0.032743f, +0.021093f, -0.012588f, -0.033255f, -0.012139f, -0.010339f, +0.007830f, -0.019383f, + +0.048234f, +0.001949f, -0.038820f, -0.009446f, +0.118006f, +0.002809f, -0.029216f, +0.008904f, -0.012302f, -0.003367f, + +0.006005f, +0.012965f, +0.006048f, +0.008497f, +0.021068f, +0.010416f, +0.028977f, +0.000097f, -0.041670f, +0.009305f, + +0.009169f, +0.011800f, +0.010973f, +0.020641f, -0.008995f, -0.017403f, -0.009322f, +0.008737f, +0.037842f, +0.005240f, + +0.005024f, -0.018500f, +0.003311f, -0.011115f, +0.005038f, -0.003171f, -0.004420f, -0.028616f, -0.012269f, -0.014153f, + +0.000850f, +0.004171f, +0.003374f, +0.000988f, +0.008040f, +0.014312f, +0.003242f, -0.003620f, +0.005543f, -0.005086f, + +0.003855f, +0.001801f, -0.000416f, +0.002990f, -0.004611f, +0.011804f, -0.001891f, -0.005171f, +0.004797f, +0.011267f, + -0.006767f, -0.005090f, -0.006967f, +0.002075f, -0.004157f, +0.001774f, -0.005895f, -0.003014f, -0.003088f, -0.003181f, + +0.000052f, +0.002955f, -0.002906f, +0.002196f, -0.001075f, +0.001513f, +0.000458f, +0.003750f, -0.001167f, -0.003441f, + +0.004250f, +0.001478f, +0.000488f, +0.000267f, -0.002819f, +0.002974f + } + }, + { + { + -0.001715f, -0.112406f, +0.014238f, -0.002407f, -0.011472f, -0.004696f, +0.009994f, +0.014985f, -0.011152f, -0.024435f, + +0.000459f, -0.035861f, -0.026023f, -0.002354f, +0.052146f, +0.018258f, +0.028012f, -0.006519f, +0.008704f, +0.050757f, + +0.011719f, -0.035609f, -0.025236f, +0.003503f, +0.000588f, -0.012054f, +0.013773f, -0.004528f, +0.006238f, +0.012514f, + +0.035922f, +0.022293f, -0.009440f, +0.006750f, +0.004779f, -0.003452f, -0.000533f, +0.004849f, -0.009194f, +0.005973f, + -0.011969f, +0.001128f, -0.003012f, -0.010727f, -0.016001f, -0.015093f, +0.004999f, +0.004778f, -0.002083f, +0.000415f, + -0.000372f, -0.014683f, +0.001266f, -0.007830f, -0.006745f, +0.003239f, +0.008018f, -0.004594f, +0.001401f, +0.004836f, + -0.002111f, +0.003442f, +0.001170f, +0.003063f, -0.003050f, -0.001927f, +0.002454f, +0.006465f, +0.000803f, +0.002758f, + -0.000499f, -0.004353f, +0.001763f, +0.004935f, +0.001506f, +0.004396f, -0.004425f, +0.006440f, -0.001129f, +0.001195f, + -0.000282f, +0.002471f, +0.000771f, +0.002114f, +0.000662f, +0.003680f, +0.000380f, +0.003416f, -0.000427f, -0.001882f, + -0.000129f, -0.001066f, +0.001485f, +0.002378f, +0.001399f, +0.002585f + }, + { + +0.049073f, -0.006499f, -0.062564f, -0.020022f, -0.010369f, +0.004583f, +0.026017f, -0.003955f, +0.014324f, -0.010670f, + +0.046873f, +0.003945f, -0.026446f, -0.015033f, -0.002814f, -0.018513f, +0.021454f, +0.012027f, +0.029653f, +0.010101f, + +0.003134f, -0.008034f, +0.009036f, -0.002511f, +0.010239f, +0.004730f, -0.013952f, +0.001364f, +0.002578f, +0.009098f, + +0.009687f, -0.000328f, -0.002825f, +0.006498f, -0.018354f, -0.009796f, +0.002455f, +0.005738f, -0.002575f, +0.008834f, + -0.005039f, +0.007852f, +0.006195f, -0.013070f, -0.005192f, +0.002617f, +0.017259f, -0.001982f, +0.002196f, +0.002277f, + +0.008462f, +0.006758f, +0.014404f, +0.006609f, +0.001232f, -0.012552f, -0.001371f, -0.001604f, +0.006796f, +0.002755f, + -0.007105f, -0.003590f, -0.002458f, -0.000680f, -0.007833f, +0.006588f, +0.002436f, +0.007778f, -0.000409f, +0.000148f, + -0.002181f, -0.000820f, -0.000644f, -0.000161f, +0.001012f, +0.002326f, -0.001697f, -0.000952f, -0.007223f, -0.000324f, + -0.001678f, -0.001474f, +0.002827f, -0.002329f, -0.001122f, +0.001505f, -0.001470f, -0.000102f, -0.000852f, -0.000074f, + -0.000327f, +0.000985f, -0.001904f, +0.001309f, +0.000263f, -0.001792f + }, + { + -0.001732f, +0.269234f, +0.028709f, -0.001651f, +0.039421f, +0.001574f, +0.004177f, -0.018638f, -0.010881f, -0.024881f, + +0.005130f, +0.030794f, -0.004674f, +0.008001f, +0.018184f, -0.022956f, -0.010352f, +0.016163f, -0.003545f, +0.007423f, + +0.007548f, +0.013491f, +0.004856f, +0.006169f, +0.027897f, -0.002991f, -0.006943f, -0.001760f, -0.025021f, +0.003256f, + +0.015674f, -0.003006f, -0.020537f, -0.012983f, +0.010258f, -0.000708f, +0.003340f, +0.001300f, +0.004995f, -0.009072f, + +0.011152f, +0.005257f, -0.006787f, -0.005066f, -0.007706f, -0.007138f, -0.004029f, +0.005782f, +0.010851f, +0.001470f, + +0.002406f, -0.008324f, +0.006663f, +0.002551f, +0.004187f, -0.001563f, +0.004751f, +0.002761f, +0.008312f, -0.002503f, + -0.001369f, -0.003768f, +0.000491f, +0.001386f, -0.001028f, +0.003546f, +0.003382f, +0.003496f, -0.011518f, +0.000941f, + +0.005515f, -0.006793f, -0.000775f, -0.001816f, +0.000888f, +0.004170f, -0.009464f, -0.002694f, +0.001874f, +0.004772f, + +0.000060f, +0.007008f, +0.004017f, -0.001540f, +0.002708f, -0.000437f, -0.001387f, +0.002020f, +0.000406f, +0.000182f, + -0.002708f, -0.000026f, +0.003140f, -0.000397f, +0.000053f, +0.000923f + }, + { + +0.001025f, +0.055196f, +0.005052f, +0.007769f, -0.002801f, +0.002006f, +0.003773f, -0.000278f, +0.002638f, -0.005065f, + +0.006735f, -0.015104f, +0.003606f, -0.008564f, +0.041245f, +0.033725f, +0.002796f, -0.008485f, +0.059910f, +0.028009f, + -0.024280f, -0.006504f, +0.032608f, -0.014902f, -0.009345f, -0.013986f, -0.018809f, -0.016539f, -0.018098f, +0.000785f, + +0.016323f, -0.022069f, -0.006461f, -0.005908f, -0.007011f, +0.008573f, +0.013433f, -0.012498f, -0.005166f, -0.000606f, + +0.011976f, -0.004467f, +0.001418f, +0.015761f, +0.012248f, +0.006519f, -0.009172f, +0.004370f, -0.009074f, +0.004025f, + +0.002555f, -0.000502f, -0.009026f, -0.002869f, +0.007655f, -0.010101f, -0.001692f, +0.003760f, +0.001600f, -0.001342f, + -0.004070f, -0.001200f, -0.002799f, -0.002275f, -0.001675f, -0.001327f, -0.005118f, +0.000902f, -0.006292f, +0.000536f, + -0.000351f, +0.000485f, -0.007626f, +0.000115f, +0.002496f, -0.006552f, +0.001614f, -0.003960f, -0.003651f, -0.000252f, + -0.000114f, +0.005815f, +0.001765f, +0.002404f, -0.005705f, +0.001188f, -0.000502f, +0.001918f, -0.001744f, +0.001063f, + -0.001760f, +0.000899f, +0.000048f, -0.000571f, +0.000234f, +0.002219f + }, + { + -0.002972f, +0.175251f, +0.037588f, -0.095445f, -0.010728f, +0.000227f, -0.001749f, -0.015473f, -0.030114f, -0.023964f, + +0.024995f, -0.049097f, -0.009799f, +0.010300f, -0.022621f, +0.041807f, -0.001235f, -0.013678f, +0.009626f, +0.017432f, + +0.002423f, +0.016786f, -0.004335f, +0.009978f, +0.020061f, +0.017240f, +0.016218f, +0.030563f, -0.004899f, -0.008502f, + +0.018714f, +0.001891f, -0.011550f, +0.011855f, -0.016244f, -0.008820f, +0.020826f, +0.002574f, -0.005397f, +0.010661f, + +0.003117f, +0.009375f, -0.008806f, +0.013263f, -0.005336f, +0.011201f, -0.008248f, +0.008169f, +0.002701f, +0.005462f, + +0.001541f, -0.004685f, +0.000581f, +0.010695f, +0.006026f, -0.004775f, -0.000427f, +0.005432f, -0.001217f, -0.010543f, + +0.009806f, +0.002276f, +0.013269f, +0.001764f, -0.012156f, +0.003885f, -0.001925f, -0.002882f, +0.001981f, -0.000960f, + +0.003469f, +0.002109f, +0.000556f, -0.001206f, -0.000549f, +0.003422f, +0.001431f, -0.004289f, -0.000353f, -0.002263f, + -0.006253f, +0.004261f, +0.000290f, -0.002464f, +0.001704f, +0.003154f, -0.004300f, +0.000855f, +0.003571f, -0.001587f, + -0.001577f, +0.002027f, +0.000578f, -0.001236f, +0.004234f, +0.000349f + }, + { + -0.000346f, +0.041887f, +0.004271f, -0.003607f, +0.000260f, -0.004380f, -0.000137f, +0.002847f, +0.003462f, -0.009888f, + +0.002804f, +0.002651f, +0.002545f, -0.016742f, -0.004034f, -0.014784f, +0.023554f, +0.004746f, -0.001314f, +0.039396f, + -0.015647f, +0.017333f, +0.002043f, +0.014691f, -0.027730f, +0.001782f, -0.003176f, -0.006159f, +0.006084f, +0.043646f, + +0.001762f, -0.024847f, -0.014600f, -0.004250f, +0.000404f, +0.010592f, +0.006499f, +0.000916f, +0.003868f, -0.009653f, + +0.021483f, +0.013787f, +0.014925f, -0.000868f, +0.004420f, -0.009338f, +0.003444f, -0.007747f, -0.016320f, +0.003573f, + +0.001469f, +0.004374f, +0.001271f, -0.002126f, +0.003532f, -0.006458f, +0.004516f, +0.001343f, -0.002838f, +0.001998f, + -0.000819f, +0.003622f, +0.001693f, +0.001936f, +0.005998f, -0.006851f, +0.011510f, -0.000327f, +0.000185f, -0.008638f, + +0.002071f, -0.006016f, -0.003278f, -0.002919f, +0.000912f, +0.002958f, +0.002133f, +0.000211f, +0.001499f, +0.000694f, + -0.001037f, -0.000705f, -0.000528f, +0.001307f, -0.001656f, -0.000876f, -0.000543f, -0.001670f, -0.000568f, -0.001809f, + +0.000150f, +0.001847f, +0.000132f, +0.000017f, +0.000038f, +0.000800f + }, + { + -0.030435f, +0.221015f, +0.063503f, -0.055794f, -0.002680f, -0.018200f, +0.006565f, +0.016268f, +0.000908f, +0.019927f, + +0.027017f, -0.032501f, +0.008650f, -0.028561f, -0.004025f, +0.004026f, -0.009993f, -0.015905f, -0.005149f, +0.015478f, + -0.022374f, +0.001167f, -0.017640f, -0.007223f, -0.008212f, +0.000855f, +0.004205f, -0.000463f, -0.006748f, +0.006595f, + +0.001262f, -0.005216f, -0.014444f, -0.001883f, -0.000640f, +0.000963f, -0.008179f, +0.017819f, -0.000298f, +0.010423f, + -0.000545f, +0.004569f, -0.000287f, +0.005044f, +0.002015f, -0.002942f, +0.002344f, +0.002105f, +0.008534f, -0.005584f, + -0.000545f, -0.007534f, +0.004192f, -0.003810f, +0.004231f, +0.005038f, +0.009806f, -0.003949f, +0.000797f, -0.005343f, + +0.003873f, +0.005516f, -0.006978f, +0.002570f, +0.003759f, -0.003208f, -0.002212f, +0.001345f, +0.004370f, -0.004094f, + -0.003514f, +0.002190f, +0.001178f, -0.001529f, -0.003801f, +0.001074f, -0.003317f, -0.001053f, +0.000251f, +0.003373f, + -0.003687f, +0.003265f, -0.000611f, -0.001899f, +0.001316f, -0.001966f, -0.001138f, -0.001764f, +0.001078f, +0.005139f, + -0.001432f, -0.000347f, +0.001104f, +0.004298f, -0.000087f, +0.000585f + }, + { + +0.001483f, +0.013711f, +0.014023f, +0.007415f, +0.001967f, -0.001615f, +0.001811f, -0.000802f, -0.007885f, -0.001805f, + -0.003230f, -0.004203f, +0.002317f, -0.014975f, -0.011591f, +0.011715f, -0.062395f, -0.047737f, -0.023772f, +0.017527f, + -0.017314f, +0.001978f, +0.022766f, +0.000484f, +0.012637f, +0.003442f, +0.012191f, -0.015599f, +0.008353f, -0.013697f, + +0.007967f, -0.012231f, +0.023128f, -0.014039f, +0.015435f, +0.000599f, -0.000259f, -0.009101f, -0.010943f, +0.006227f, + -0.002045f, -0.015960f, +0.009634f, +0.002084f, +0.002959f, +0.007426f, +0.006280f, -0.007285f, +0.002442f, +0.004029f, + -0.001784f, +0.014170f, +0.000614f, -0.004549f, -0.002319f, -0.016028f, +0.003226f, -0.001969f, -0.007729f, +0.005804f, + +0.011808f, +0.001274f, -0.004745f, +0.003381f, +0.003770f, -0.002789f, +0.003479f, -0.009252f, +0.002260f, +0.003952f, + -0.001220f, +0.002666f, -0.000916f, -0.001878f, -0.001326f, -0.001840f, +0.000863f, +0.001110f, +0.000668f, -0.001359f, + -0.003929f, -0.003874f, +0.003913f, -0.001980f, +0.001268f, -0.003501f, -0.001311f, +0.002298f, +0.003482f, -0.000481f, + +0.000894f, +0.004153f, -0.000555f, -0.001338f, +0.000073f, -0.001848f + }, + { + +0.045932f, +0.505659f, +0.041134f, -0.044142f, -0.014218f, +0.011923f, +0.043044f, -0.013601f, +0.051795f, +0.004112f, + -0.035158f, +0.024999f, -0.002259f, +0.013524f, +0.014967f, +0.007143f, +0.006137f, +0.033578f, -0.016065f, -0.023877f, + +0.001727f, -0.022907f, -0.017737f, +0.002657f, -0.008012f, +0.000998f, -0.005985f, +0.013605f, -0.001796f, -0.000364f, + -0.009363f, -0.009394f, -0.008365f, +0.006967f, +0.003559f, -0.004706f, -0.023358f, +0.031910f, -0.001849f, -0.010805f, + +0.004109f, +0.015357f, -0.006522f, +0.010206f, -0.000312f, -0.013586f, +0.006833f, +0.006472f, -0.000168f, +0.005320f, + +0.000843f, +0.003505f, +0.008503f, +0.004315f, +0.007958f, +0.002679f, +0.005968f, +0.001545f, -0.003572f, -0.002165f, + -0.004837f, +0.002227f, +0.007378f, +0.000051f, +0.000006f, +0.000981f, -0.000710f, -0.000217f, +0.000985f, -0.000860f, + +0.000847f, -0.000696f, -0.001399f, -0.000650f, -0.002357f, -0.001339f, -0.003113f, -0.001687f, +0.002933f, +0.001891f, + -0.003754f, +0.004282f, -0.000177f, -0.002121f, +0.003870f, -0.003378f, +0.001259f, +0.001942f, +0.003796f, +0.000480f, + -0.001059f, +0.002399f, +0.003137f, +0.003992f, -0.003593f, -0.001092f + }, + { + -0.010173f, -0.001218f, +0.002287f, -0.003946f, +0.009191f, -0.001759f, -0.028054f, +0.003052f, +0.003652f, -0.001495f, + +0.002029f, +0.007406f, +0.020889f, -0.012083f, +0.000571f, +0.019918f, +0.010680f, +0.008031f, -0.022647f, -0.026929f, + +0.034118f, +0.007039f, +0.005557f, -0.007016f, -0.013509f, +0.012397f, -0.004674f, +0.012680f, -0.005798f, -0.005685f, + +0.025253f, -0.004529f, +0.021923f, +0.018967f, -0.004479f, +0.005843f, -0.012630f, -0.004901f, -0.002789f, +0.001154f, + +0.010114f, -0.007653f, -0.001293f, -0.013115f, -0.012478f, -0.005002f, -0.005602f, +0.007350f, -0.001120f, -0.008739f, + +0.010570f, -0.000425f, -0.002703f, -0.006562f, +0.005379f, +0.005023f, -0.005142f, +0.004812f, +0.000952f, +0.003508f, + +0.002740f, -0.004565f, +0.002037f, +0.005793f, -0.007076f, +0.012421f, -0.001815f, -0.008840f, -0.005534f, -0.006831f, + +0.003553f, +0.003821f, -0.002670f, +0.005231f, -0.002136f, +0.000856f, -0.000095f, -0.000161f, +0.006582f, +0.004890f, + +0.002269f, -0.004229f, -0.002211f, -0.000297f, +0.001108f, -0.001800f, -0.005803f, +0.000221f, +0.000416f, -0.001170f, + -0.000365f, +0.002169f, -0.001068f, +0.001527f, -0.001094f, -0.001715f + }, + { + -0.056120f, -0.099621f, +0.024836f, +0.019668f, -0.006613f, -0.056240f, -0.042759f, +0.032886f, -0.002483f, -0.015551f, + +0.013937f, -0.014259f, -0.019317f, -0.003867f, -0.016757f, +0.001644f, -0.008818f, +0.015358f, -0.045401f, +0.012249f, + +0.005587f, +0.038061f, -0.002890f, -0.009534f, +0.020778f, +0.023877f, +0.005576f, -0.010449f, +0.014791f, -0.000011f, + +0.022950f, +0.005037f, -0.036839f, -0.008792f, +0.002779f, -0.019149f, -0.004682f, +0.009407f, -0.005668f, +0.016491f, + -0.019586f, -0.008200f, +0.011048f, -0.013657f, +0.003381f, +0.003037f, +0.004966f, +0.003257f, -0.004801f, -0.014080f, + +0.005008f, -0.010164f, -0.001475f, -0.000779f, -0.001878f, -0.008961f, +0.005881f, -0.001400f, -0.004620f, +0.006663f, + +0.004083f, -0.002186f, -0.004840f, +0.002633f, +0.006826f, -0.002018f, -0.002976f, +0.000807f, +0.003485f, -0.001130f, + +0.003293f, +0.001728f, -0.001928f, -0.003183f, +0.004309f, -0.001092f, +0.003805f, -0.000805f, +0.006109f, +0.003887f, + +0.000527f, -0.002299f, -0.003381f, -0.000856f, -0.000441f, +0.006939f, +0.000476f, +0.000703f, -0.001521f, +0.003126f, + +0.003071f, +0.002412f, +0.002869f, -0.000521f, +0.003959f, -0.003571f + }, + { + -0.002567f, +0.066284f, +0.017377f, -0.004615f, -0.013843f, -0.003395f, +0.004562f, -0.010801f, +0.010489f, -0.006917f, + +0.014597f, +0.001743f, -0.012462f, -0.000273f, -0.046008f, +0.019110f, -0.013923f, -0.010849f, -0.043970f, -0.009833f, + +0.025188f, -0.002760f, -0.055004f, +0.000464f, -0.036520f, -0.008240f, -0.008011f, -0.005955f, -0.038598f, +0.002370f, + +0.006969f, -0.014371f, -0.000561f, +0.009098f, +0.009396f, +0.002314f, +0.018109f, -0.020435f, +0.006274f, +0.009497f, + +0.002262f, -0.004347f, +0.013437f, +0.012955f, -0.001176f, +0.005159f, +0.005059f, -0.002522f, +0.010222f, +0.004318f, + +0.000864f, +0.005019f, +0.000228f, -0.004290f, -0.005023f, -0.001497f, +0.002019f, -0.010594f, -0.001133f, +0.000646f, + -0.001722f, -0.001678f, -0.001284f, -0.006494f, +0.002808f, -0.001490f, -0.003291f, -0.000958f, +0.000588f, +0.000249f, + +0.000242f, +0.004980f, -0.000358f, -0.002171f, -0.003249f, -0.002377f, -0.001535f, -0.000342f, +0.000147f, -0.006467f, + -0.003343f, -0.004946f, +0.003014f, +0.002177f, -0.002050f, -0.001706f, +0.000386f, +0.001005f, -0.001716f, +0.002906f, + +0.005678f, -0.000493f, -0.001041f, +0.004236f, +0.001606f, -0.003387f + }, + { + -0.056095f, -0.073067f, +0.018098f, -0.012970f, +0.018293f, +0.027312f, +0.025329f, -0.002086f, -0.007493f, +0.027248f, + -0.019397f, +0.009461f, +0.004019f, -0.025467f, -0.018688f, -0.014895f, -0.014958f, +0.025773f, -0.018570f, +0.029215f, + -0.001879f, +0.020938f, -0.016210f, -0.015965f, +0.019574f, +0.009374f, -0.005293f, +0.001541f, -0.007436f, +0.027070f, + -0.016553f, -0.011846f, +0.000440f, +0.013164f, -0.019009f, +0.013659f, -0.002681f, -0.003260f, +0.011328f, -0.000578f, + +0.009819f, -0.010480f, +0.008639f, +0.003959f, +0.006538f, -0.007514f, +0.020692f, -0.004189f, -0.001589f, +0.003837f, + -0.009960f, -0.009924f, -0.002147f, +0.003738f, -0.007928f, -0.008466f, -0.003593f, +0.004919f, +0.000787f, -0.004069f, + -0.002694f, +0.001533f, +0.005363f, +0.002297f, -0.007773f, -0.003135f, -0.004220f, -0.003060f, -0.009091f, +0.004676f, + +0.000673f, +0.002220f, +0.009310f, +0.005151f, +0.001401f, -0.003522f, -0.002075f, +0.004920f, -0.003647f, +0.002177f, + -0.002500f, -0.001054f, -0.003326f, +0.004699f, -0.002283f, +0.000173f, +0.003231f, +0.002791f, -0.003197f, -0.000089f, + +0.003741f, -0.001754f, +0.002280f, +0.000679f, +0.003073f, +0.001673f + }, + { + +0.007824f, -0.088637f, -0.012820f, -0.004758f, -0.010750f, -0.031999f, -0.003606f, +0.005052f, -0.005138f, -0.000023f, + -0.009941f, +0.003199f, +0.002398f, +0.101042f, +0.014826f, +0.022259f, +0.037875f, -0.000266f, -0.002948f, +0.009588f, + -0.022411f, +0.032193f, -0.018986f, +0.011410f, +0.004520f, +0.014026f, -0.033282f, +0.019306f, -0.012913f, +0.019120f, + -0.004152f, +0.025382f, -0.005066f, +0.010638f, +0.000251f, -0.001639f, -0.024278f, +0.000369f, +0.021926f, +0.004752f, + +0.009947f, -0.006212f, +0.004696f, +0.000586f, -0.005544f, +0.018902f, -0.015948f, -0.016261f, +0.007621f, -0.003677f, + +0.019140f, +0.000996f, +0.004441f, +0.001183f, +0.004259f, -0.000831f, +0.004359f, +0.004564f, -0.009725f, -0.002575f, + +0.006360f, -0.002813f, -0.001014f, +0.005198f, +0.005960f, -0.005358f, +0.001917f, -0.006280f, -0.003320f, -0.001680f, + -0.000891f, -0.002720f, +0.001813f, -0.003064f, +0.000078f, -0.000209f, +0.002191f, +0.006296f, +0.006798f, +0.002710f, + -0.004379f, -0.003586f, -0.000031f, -0.000900f, +0.001659f, +0.003058f, -0.000827f, -0.002579f, +0.005177f, -0.000594f, + -0.001597f, -0.002054f, -0.000612f, +0.005008f, -0.001588f, -0.001277f + }, + { + -0.041496f, +0.043611f, +0.027492f, +0.010045f, +0.012331f, +0.015759f, -0.000337f, -0.028707f, -0.029054f, -0.036205f, + +0.029413f, -0.026283f, -0.049640f, -0.049498f, +0.057493f, +0.001200f, -0.005768f, +0.037018f, -0.002824f, -0.019532f, + +0.023276f, +0.042230f, +0.015257f, -0.003589f, +0.007381f, +0.010419f, +0.025311f, +0.001968f, -0.024264f, +0.004718f, + -0.025836f, -0.014066f, +0.002577f, +0.011993f, -0.012101f, -0.003780f, +0.002212f, -0.001243f, +0.019285f, -0.008618f, + -0.011401f, -0.017152f, +0.020690f, -0.002870f, +0.012269f, +0.014690f, +0.007861f, -0.013986f, +0.004663f, -0.000552f, + +0.006830f, +0.005981f, +0.003470f, +0.000295f, -0.002532f, +0.001236f, +0.000684f, +0.002351f, +0.015197f, +0.000676f, + +0.000415f, +0.001820f, +0.007706f, +0.008834f, -0.001151f, +0.015257f, +0.006100f, -0.005847f, -0.000540f, +0.007488f, + -0.006284f, -0.001539f, +0.001479f, +0.007550f, -0.005966f, +0.001776f, -0.001293f, +0.002479f, +0.000694f, -0.000155f, + -0.000090f, +0.003566f, -0.000194f, +0.002717f, -0.001160f, +0.000147f, -0.001363f, +0.002726f, -0.001971f, -0.002559f, + +0.004734f, +0.001758f, +0.000072f, +0.000839f, -0.002513f, +0.001220f + } + }, + { + { + +0.000686f, -0.026170f, -0.044584f, -0.028456f, -0.002379f, +0.004153f, +0.007436f, +0.004526f, +0.003519f, -0.036379f, + -0.008528f, -0.037436f, -0.009099f, +0.003899f, +0.029816f, +0.033047f, +0.007000f, -0.018593f, +0.029301f, +0.043935f, + +0.004100f, -0.036830f, +0.000009f, -0.013061f, +0.001679f, +0.002527f, -0.000646f, +0.002508f, -0.014179f, +0.025142f, + +0.034542f, -0.001204f, +0.018969f, -0.014165f, +0.007906f, -0.000207f, +0.019766f, -0.015683f, -0.001789f, +0.008999f, + -0.006645f, -0.005705f, -0.001578f, -0.014260f, -0.010289f, -0.016737f, +0.009102f, +0.008324f, -0.009636f, +0.002870f, + -0.004651f, -0.009228f, -0.002842f, -0.012027f, +0.003293f, +0.005994f, +0.002673f, +0.005232f, -0.011189f, +0.009268f, + -0.001217f, -0.005543f, +0.006992f, +0.001792f, -0.001942f, -0.001050f, +0.005246f, +0.002205f, -0.006187f, +0.006987f, + -0.000904f, -0.005250f, +0.002414f, +0.002428f, -0.000057f, +0.005961f, -0.001604f, +0.003192f, -0.000958f, +0.000196f, + +0.004276f, -0.001013f, +0.001298f, +0.001976f, +0.002468f, +0.002289f, +0.001653f, +0.003076f, +0.000058f, -0.000690f, + -0.004419f, +0.000426f, +0.003110f, +0.003249f, +0.001663f, +0.000777f + }, + { + -0.049354f, -0.165838f, +0.136996f, -0.054067f, +0.055355f, +0.005878f, +0.015497f, +0.007679f, +0.002989f, -0.006876f, + +0.056646f, -0.050718f, +0.018032f, -0.006810f, -0.019710f, -0.017678f, +0.005541f, +0.018397f, +0.033459f, +0.002242f, + +0.016854f, -0.011208f, +0.000293f, -0.006218f, +0.024523f, +0.001772f, -0.011073f, -0.008808f, +0.013277f, +0.002543f, + +0.021080f, -0.011893f, +0.013974f, -0.007775f, -0.007807f, -0.018788f, +0.002869f, -0.003979f, +0.005835f, -0.000914f, + -0.007734f, +0.017258f, -0.001670f, -0.006008f, -0.006329f, +0.012324f, +0.007089f, +0.002809f, -0.006596f, +0.002451f, + +0.011387f, +0.008485f, +0.008049f, +0.014093f, -0.005214f, -0.008457f, -0.003137f, -0.001730f, +0.005601f, +0.000199f, + -0.006711f, +0.003091f, -0.013308f, -0.000749f, +0.003070f, +0.001228f, +0.000549f, +0.004447f, -0.000009f, +0.005308f, + -0.002726f, -0.000007f, -0.003207f, -0.001278f, +0.004104f, -0.000257f, -0.001520f, -0.002531f, -0.003249f, -0.002248f, + -0.000312f, +0.001968f, -0.000783f, -0.001648f, +0.001326f, -0.000143f, -0.000094f, -0.001587f, +0.000132f, -0.000675f, + +0.000736f, +0.000004f, -0.002011f, +0.002248f, -0.000783f, +0.000111f + }, + { + -0.002535f, +0.290216f, +0.010991f, +0.040995f, -0.007118f, +0.012761f, -0.000448f, -0.012825f, -0.006751f, -0.036994f, + +0.017257f, +0.036491f, -0.013284f, +0.005997f, +0.014093f, -0.009866f, +0.001488f, -0.005533f, +0.009548f, +0.015214f, + +0.000231f, +0.003590f, +0.011047f, +0.002746f, +0.020257f, -0.011106f, +0.000575f, -0.013949f, +0.002284f, -0.004939f, + +0.007715f, -0.001844f, -0.007285f, -0.018232f, +0.002419f, -0.001562f, -0.005584f, +0.003851f, +0.014800f, +0.005622f, + +0.002229f, +0.003381f, +0.000101f, -0.012400f, -0.006468f, +0.004695f, -0.013463f, +0.001223f, +0.009937f, +0.001048f, + +0.008046f, -0.002646f, +0.007110f, -0.003100f, +0.007316f, -0.004012f, +0.005769f, +0.000763f, +0.012799f, +0.000598f, + -0.005195f, -0.002167f, -0.000846f, -0.000623f, +0.001056f, +0.004437f, +0.003088f, +0.004591f, -0.008564f, -0.001442f, + -0.001665f, -0.001119f, -0.002959f, -0.002973f, +0.003427f, +0.000595f, -0.002803f, -0.002772f, +0.003089f, +0.002916f, + +0.001463f, +0.004675f, +0.003082f, +0.001536f, +0.001091f, -0.001715f, +0.000245f, -0.000165f, +0.001715f, -0.000448f, + -0.000740f, -0.001167f, +0.000231f, +0.001401f, +0.000414f, -0.001105f + }, + { + -0.002921f, +0.044908f, +0.012359f, +0.014877f, -0.006813f, +0.002624f, +0.003805f, +0.006459f, -0.006479f, +0.002089f, + -0.005848f, +0.001581f, -0.013342f, +0.005025f, +0.044646f, +0.021315f, +0.008821f, -0.000781f, +0.059459f, +0.011032f, + -0.004523f, +0.002310f, +0.001240f, +0.007021f, -0.021567f, -0.023746f, -0.028717f, -0.002163f, -0.011356f, +0.008854f, + -0.012964f, -0.020192f, +0.001502f, -0.022845f, +0.002746f, +0.000884f, +0.032072f, -0.018834f, -0.007303f, +0.002751f, + +0.012240f, -0.002471f, -0.004484f, +0.016201f, +0.009656f, -0.003240f, +0.007509f, -0.001910f, -0.004029f, -0.005054f, + +0.009036f, -0.005500f, +0.004451f, -0.005028f, -0.003141f, -0.002488f, -0.002595f, +0.000178f, -0.003084f, +0.002123f, + -0.001094f, -0.001323f, +0.000483f, -0.002441f, -0.006989f, -0.000509f, +0.001872f, +0.000250f, -0.006638f, -0.003713f, + +0.000893f, -0.001309f, -0.003099f, -0.005364f, +0.002656f, -0.003982f, -0.001640f, -0.002492f, -0.002133f, -0.001386f, + +0.000890f, +0.002576f, +0.004270f, -0.001116f, +0.000112f, -0.000814f, +0.000151f, -0.000377f, -0.000483f, +0.002061f, + -0.001731f, +0.000465f, +0.000113f, -0.001129f, +0.001524f, -0.002407f + }, + { + +0.034945f, +0.217215f, -0.048974f, -0.106686f, +0.008585f, +0.006321f, +0.005664f, -0.029917f, -0.000076f, -0.041540f, + -0.015926f, -0.022068f, +0.010940f, +0.003976f, -0.022293f, +0.022251f, +0.031844f, -0.039769f, +0.017079f, +0.030303f, + -0.016286f, +0.027516f, -0.023535f, +0.021307f, +0.004204f, +0.006219f, +0.027619f, +0.026342f, +0.002761f, +0.000418f, + +0.016295f, -0.003628f, -0.001943f, -0.009813f, -0.007901f, +0.006768f, +0.000575f, +0.004912f, -0.002846f, -0.007141f, + +0.011750f, +0.005265f, +0.011839f, -0.000847f, +0.000182f, +0.003593f, -0.004626f, +0.003849f, -0.002076f, +0.015701f, + +0.000281f, -0.011957f, +0.002113f, +0.009207f, +0.011841f, -0.009037f, +0.002887f, -0.000275f, +0.005482f, -0.007837f, + +0.005022f, +0.001499f, +0.009272f, +0.004311f, -0.008692f, +0.003827f, -0.004615f, -0.003037f, +0.002667f, -0.003433f, + +0.001956f, +0.001740f, -0.000320f, +0.002045f, -0.004056f, +0.001487f, +0.002343f, +0.001102f, -0.001298f, -0.000444f, + -0.007497f, +0.000169f, +0.002983f, +0.000052f, -0.000397f, +0.000097f, -0.001851f, +0.001440f, +0.001190f, -0.000908f, + -0.001120f, +0.001101f, -0.000780f, +0.000838f, +0.001607f, +0.001817f + }, + { + +0.002980f, +0.021782f, +0.013738f, -0.001620f, -0.004715f, -0.001985f, -0.001333f, +0.001675f, +0.009671f, -0.001884f, + -0.002883f, -0.004866f, +0.000221f, +0.011037f, -0.048954f, +0.013745f, -0.004613f, +0.014251f, -0.025005f, +0.071098f, + -0.010674f, +0.017627f, -0.002893f, +0.031221f, -0.016701f, -0.024066f, -0.000191f, -0.006609f, +0.001556f, +0.042248f, + -0.004262f, -0.010924f, -0.016386f, -0.007646f, +0.005148f, +0.006146f, +0.001028f, +0.004486f, +0.006947f, -0.004771f, + +0.007058f, +0.013532f, +0.007189f, +0.002272f, +0.010690f, -0.007224f, +0.009872f, -0.015006f, -0.013812f, -0.010716f, + +0.007068f, +0.004660f, +0.011492f, -0.004136f, -0.001303f, -0.004113f, +0.001036f, +0.004924f, -0.007433f, +0.000467f, + +0.002290f, +0.004819f, +0.003090f, -0.000314f, +0.001394f, -0.000405f, +0.011045f, -0.001628f, -0.007026f, +0.001342f, + -0.003042f, -0.004365f, -0.003167f, -0.004974f, -0.000335f, +0.004469f, +0.003032f, -0.002270f, +0.003017f, +0.001721f, + -0.001705f, -0.002120f, +0.003238f, -0.001248f, -0.002037f, -0.002116f, +0.002762f, -0.002600f, -0.001623f, -0.000343f, + +0.000396f, +0.000352f, -0.001709f, +0.001613f, +0.002012f, +0.001203f + }, + { + +0.078215f, +0.199219f, -0.058748f, -0.060550f, +0.007040f, -0.002710f, -0.008418f, +0.005655f, +0.033889f, -0.004018f, + +0.001861f, +0.015753f, -0.007424f, -0.012378f, -0.022228f, -0.000686f, +0.011304f, -0.024114f, +0.028543f, -0.010128f, + -0.010132f, -0.007210f, -0.016835f, -0.029917f, +0.026891f, +0.003223f, -0.006998f, -0.011628f, +0.006286f, +0.007113f, + -0.000218f, -0.004594f, -0.008587f, -0.013353f, +0.000580f, -0.004149f, +0.006498f, +0.011136f, +0.003529f, +0.001423f, + +0.005776f, -0.000518f, +0.005665f, -0.006001f, +0.009916f, +0.004086f, +0.009265f, -0.005366f, +0.005076f, -0.003120f, + -0.000411f, -0.008218f, +0.008908f, +0.000232f, -0.004177f, +0.005327f, +0.014266f, +0.000425f, -0.011749f, +0.000504f, + -0.000560f, -0.000929f, +0.002792f, -0.002514f, -0.000278f, -0.001282f, -0.000168f, +0.003606f, +0.000969f, -0.001495f, + -0.002861f, -0.000456f, +0.000511f, -0.001884f, -0.000183f, -0.002294f, -0.002078f, -0.000021f, -0.000885f, -0.000449f, + +0.001107f, +0.000998f, -0.002468f, +0.000113f, +0.001453f, -0.002362f, -0.001844f, -0.000640f, +0.002578f, +0.002891f, + -0.000961f, +0.000491f, +0.003157f, +0.000782f, +0.001065f, +0.000377f + }, + { + +0.003234f, +0.018094f, +0.005820f, +0.000203f, +0.004441f, +0.001605f, -0.000703f, +0.004492f, -0.008928f, -0.001328f, + +0.000134f, -0.004817f, -0.004409f, -0.003446f, -0.017665f, -0.003397f, -0.048209f, -0.040853f, -0.010700f, +0.023918f, + -0.020632f, -0.005610f, +0.017590f, +0.015404f, -0.008026f, +0.023157f, +0.011989f, -0.020765f, +0.013918f, -0.014877f, + -0.018409f, +0.016629f, -0.015532f, +0.015520f, +0.001425f, +0.000378f, +0.008387f, -0.004228f, -0.014519f, -0.009480f, + +0.004394f, -0.001442f, -0.006005f, +0.013099f, -0.001273f, +0.002574f, -0.002881f, +0.001037f, +0.011262f, -0.008024f, + +0.001097f, +0.013203f, +0.009523f, -0.009367f, -0.005431f, -0.014645f, -0.001546f, +0.002606f, +0.005161f, -0.002953f, + +0.008770f, -0.003466f, +0.003423f, +0.001243f, -0.000776f, +0.001078f, +0.006026f, -0.008934f, -0.001786f, +0.004602f, + -0.000400f, -0.001951f, +0.005472f, -0.000615f, -0.003208f, -0.000450f, -0.000083f, +0.000436f, +0.001508f, -0.003758f, + -0.002697f, -0.004841f, +0.002467f, +0.000378f, -0.001383f, -0.002231f, -0.000894f, +0.003234f, +0.000432f, +0.001075f, + +0.003566f, -0.000197f, +0.002928f, -0.000511f, -0.001489f, -0.001907f + }, + { + -0.006287f, +0.662294f, -0.046053f, -0.072931f, +0.033295f, +0.000050f, +0.046377f, +0.019806f, +0.023684f, -0.013034f, + -0.020295f, +0.010306f, +0.024298f, +0.024931f, +0.017308f, -0.015020f, +0.040771f, +0.013412f, -0.010838f, -0.028343f, + -0.007762f, -0.013780f, -0.010950f, -0.000884f, -0.014117f, -0.002264f, +0.000055f, +0.021149f, -0.012381f, -0.003616f, + -0.009369f, +0.002865f, -0.007837f, -0.012812f, +0.006982f, -0.007060f, +0.006435f, +0.018344f, -0.008476f, -0.002468f, + -0.004818f, +0.010093f, +0.013796f, +0.006985f, +0.001590f, -0.019159f, -0.000960f, +0.017061f, +0.005184f, +0.002309f, + -0.006304f, +0.013236f, +0.002149f, +0.005475f, +0.002050f, +0.015404f, -0.001773f, -0.000040f, -0.002725f, -0.008162f, + +0.001443f, +0.001079f, +0.009337f, +0.002860f, -0.003462f, +0.003875f, -0.004208f, +0.002127f, +0.002300f, -0.002081f, + +0.000741f, +0.000650f, -0.004784f, -0.000092f, -0.002256f, -0.001020f, -0.003915f, +0.000630f, +0.001512f, +0.000867f, + +0.000328f, +0.001955f, +0.000792f, +0.001531f, +0.000743f, -0.000537f, -0.001800f, +0.001405f, +0.004132f, +0.002117f, + -0.000057f, +0.002260f, +0.003129f, +0.003394f, -0.004150f, -0.000204f + }, + { + +0.008444f, +0.033179f, -0.044102f, -0.016401f, +0.024707f, -0.017071f, -0.018616f, -0.006152f, +0.010018f, -0.002200f, + +0.018445f, +0.000896f, +0.016719f, -0.015332f, +0.020959f, +0.015247f, +0.011935f, -0.003252f, -0.017795f, +0.002947f, + +0.002280f, +0.012148f, -0.019085f, +0.009150f, +0.002738f, -0.012413f, -0.006078f, +0.018716f, +0.016815f, -0.016360f, + +0.023111f, -0.005600f, +0.031977f, +0.001760f, +0.007275f, -0.004410f, -0.003267f, -0.003346f, +0.000913f, -0.006158f, + +0.004117f, +0.003598f, -0.013086f, -0.003920f, -0.001987f, -0.007043f, -0.016649f, +0.004114f, -0.003837f, +0.003806f, + +0.005668f, -0.000317f, -0.003405f, +0.004917f, +0.003528f, +0.001527f, -0.001092f, -0.000924f, -0.000486f, +0.002547f, + +0.010308f, -0.003407f, +0.000221f, -0.003895f, +0.004060f, +0.006080f, -0.002780f, -0.006401f, -0.000112f, -0.008729f, + +0.001638f, +0.003124f, +0.002795f, -0.000360f, +0.001213f, -0.000103f, -0.001056f, -0.001097f, +0.006781f, +0.005844f, + -0.001216f, -0.003417f, -0.002381f, +0.003938f, -0.002176f, -0.003561f, -0.003027f, -0.000542f, +0.001837f, -0.003907f, + +0.002910f, -0.000313f, +0.000630f, +0.000055f, -0.001621f, -0.000338f + }, + { + +0.059661f, -0.174120f, -0.064962f, +0.032902f, +0.000281f, -0.093006f, -0.022483f, +0.012090f, +0.005521f, -0.000490f, + +0.001935f, -0.004748f, -0.019927f, -0.021732f, -0.013475f, -0.011397f, -0.017464f, +0.018282f, -0.040716f, +0.009959f, + +0.017336f, +0.020190f, -0.008443f, +0.004917f, +0.015835f, +0.016193f, +0.015164f, -0.010177f, +0.008508f, +0.000567f, + +0.014689f, +0.008802f, -0.028218f, -0.025844f, -0.002263f, -0.009461f, -0.000318f, +0.011185f, +0.006363f, +0.002175f, + -0.019442f, -0.000945f, +0.006382f, -0.001553f, +0.006987f, -0.012689f, +0.017214f, -0.007937f, -0.002984f, -0.010391f, + +0.001292f, -0.009667f, -0.001210f, -0.002793f, +0.002269f, -0.006791f, +0.003723f, -0.007146f, +0.003003f, +0.004144f, + -0.000038f, +0.000281f, -0.004866f, +0.010718f, +0.003190f, -0.002788f, -0.004726f, +0.005968f, -0.001659f, +0.005875f, + +0.003651f, -0.004356f, -0.002165f, +0.000074f, +0.002232f, +0.000827f, +0.001639f, +0.001546f, +0.003435f, +0.005595f, + +0.000091f, -0.000868f, -0.002959f, -0.001678f, +0.001322f, +0.004148f, +0.001993f, +0.000105f, +0.000985f, +0.001308f, + +0.003813f, +0.002899f, +0.002975f, +0.000161f, -0.000621f, -0.001047f + }, + { + -0.000183f, +0.090290f, -0.010319f, +0.004678f, -0.015841f, -0.003556f, -0.007471f, -0.000773f, +0.005179f, -0.012599f, + +0.020556f, +0.006027f, +0.005531f, -0.053147f, +0.001846f, +0.016218f, -0.014019f, -0.009029f, -0.055799f, +0.021415f, + +0.002882f, -0.042575f, -0.031463f, -0.007366f, -0.014179f, -0.005795f, -0.015963f, -0.005683f, -0.012316f, -0.035251f, + +0.017078f, -0.014713f, +0.000977f, +0.002134f, +0.027987f, -0.002699f, -0.002938f, -0.012630f, +0.015379f, +0.002097f, + +0.009774f, -0.005591f, +0.010077f, +0.002020f, +0.008345f, -0.000192f, +0.009606f, -0.011833f, +0.009591f, +0.012974f, + +0.011279f, -0.001280f, +0.005056f, -0.009327f, -0.004699f, -0.002796f, -0.000553f, -0.000608f, -0.008749f, -0.001951f, + -0.000009f, -0.003293f, -0.004141f, +0.009623f, -0.001635f, -0.009630f, -0.000694f, -0.002950f, -0.001148f, +0.006206f, + -0.004581f, -0.000287f, +0.000701f, -0.002520f, -0.001717f, -0.000438f, -0.002664f, +0.002318f, -0.000797f, -0.004191f, + -0.006599f, -0.000383f, -0.001373f, +0.004921f, -0.004945f, +0.003037f, -0.001303f, -0.001959f, +0.002636f, +0.002457f, + +0.003082f, -0.000111f, -0.004709f, +0.007658f, -0.000688f, -0.001999f + }, + { + +0.035528f, -0.186578f, +0.021208f, -0.005840f, +0.014614f, +0.040997f, +0.021507f, -0.011280f, +0.004791f, -0.017636f, + +0.003644f, +0.020401f, -0.012151f, -0.021214f, -0.041234f, -0.005772f, -0.041467f, +0.020464f, +0.014660f, +0.006031f, + +0.004853f, +0.001525f, +0.007679f, -0.002586f, +0.006788f, +0.001396f, -0.005754f, -0.003910f, +0.017896f, +0.014060f, + -0.020291f, -0.010213f, +0.007334f, -0.002387f, +0.004436f, +0.001628f, -0.002815f, +0.012335f, -0.005256f, +0.009821f, + +0.009049f, -0.004619f, +0.011166f, +0.004774f, +0.002434f, +0.002491f, +0.004101f, +0.001059f, -0.002390f, +0.007247f, + -0.013346f, -0.001811f, -0.007239f, -0.011007f, +0.007823f, -0.008596f, -0.004857f, +0.008528f, -0.006531f, -0.001181f, + -0.005473f, +0.006389f, -0.000277f, +0.006749f, +0.000030f, -0.001421f, -0.006480f, -0.004847f, -0.007302f, +0.007601f, + -0.004982f, +0.005522f, +0.003129f, +0.004346f, +0.005088f, -0.003207f, +0.000168f, -0.000054f, -0.003493f, +0.004040f, + -0.006207f, +0.001067f, -0.002040f, -0.000321f, +0.000927f, -0.000123f, +0.002847f, +0.002164f, -0.004520f, +0.004294f, + -0.000008f, +0.000040f, +0.001331f, +0.001588f, +0.001598f, -0.001028f + }, + { + -0.009274f, -0.087405f, +0.007445f, -0.004927f, -0.016637f, -0.030685f, -0.016547f, +0.010273f, +0.000745f, +0.002972f, + -0.022761f, +0.015984f, +0.007294f, -0.032680f, +0.230276f, +0.013263f, +0.010221f, +0.002001f, +0.050952f, -0.061191f, + +0.009270f, +0.021244f, -0.026799f, +0.016260f, +0.026646f, -0.021649f, -0.002767f, +0.006393f, -0.011636f, +0.025596f, + +0.013734f, +0.015173f, -0.010683f, -0.000520f, +0.012529f, -0.016997f, -0.004687f, -0.017007f, +0.020686f, +0.017751f, + -0.004185f, +0.003346f, -0.000705f, +0.003310f, -0.004700f, +0.013845f, -0.004387f, -0.011355f, -0.004030f, +0.000806f, + +0.004209f, +0.013807f, -0.003321f, -0.000074f, +0.005311f, +0.001019f, +0.006476f, -0.002477f, -0.001456f, -0.000879f, + +0.003523f, -0.000391f, -0.000607f, +0.005479f, +0.002193f, +0.003407f, -0.012276f, -0.003689f, -0.000782f, +0.003162f, + -0.003025f, -0.001866f, -0.005379f, -0.003397f, +0.003268f, +0.000149f, +0.005159f, -0.001304f, +0.010848f, +0.002445f, + -0.002962f, -0.000212f, -0.003163f, -0.000879f, -0.000481f, +0.005989f, -0.000158f, -0.003625f, +0.004651f, +0.000581f, + -0.004700f, -0.001610f, +0.003161f, +0.000977f, -0.000199f, -0.000711f + }, + { + +0.049435f, -0.029715f, -0.014712f, +0.018215f, -0.001772f, +0.031982f, -0.018646f, -0.031479f, -0.021131f, -0.006104f, + -0.013476f, -0.033008f, -0.012680f, +0.022995f, -0.053321f, -0.028182f, +0.026986f, +0.024404f, -0.006021f, +0.007970f, + +0.009943f, +0.026914f, +0.010782f, +0.015692f, +0.005831f, +0.011128f, +0.012020f, -0.029857f, +0.017391f, -0.007415f, + -0.021830f, -0.022042f, -0.000370f, -0.011154f, +0.002154f, +0.006953f, +0.008040f, -0.009230f, +0.001287f, +0.016360f, + -0.012204f, -0.015544f, +0.007906f, +0.001968f, +0.009811f, +0.019419f, -0.002883f, +0.003325f, -0.000636f, +0.003641f, + +0.003766f, +0.013657f, -0.002754f, +0.010900f, -0.008563f, +0.001976f, +0.001637f, +0.000852f, +0.011042f, +0.005083f, + -0.001334f, -0.001225f, +0.011854f, +0.001273f, +0.008487f, +0.009329f, +0.008856f, -0.000752f, -0.007075f, -0.002427f, + +0.005919f, -0.003072f, +0.001053f, +0.002147f, -0.005061f, +0.000882f, +0.001154f, +0.002445f, +0.000325f, +0.001017f, + -0.000723f, -0.000384f, +0.004053f, +0.000213f, +0.000688f, -0.000629f, -0.002235f, +0.003841f, -0.000041f, -0.001678f, + +0.001958f, +0.002785f, -0.002179f, -0.000577f, +0.000803f, -0.001100f + } + }, + { + { + -0.001188f, +0.075567f, +0.030522f, -0.033787f, -0.003297f, +0.006425f, +0.002783f, -0.005801f, +0.006994f, -0.055871f, + -0.038536f, +0.002365f, +0.020770f, -0.038378f, -0.013552f, +0.019572f, -0.010368f, -0.019650f, +0.045569f, +0.023669f, + +0.012024f, +0.001861f, +0.032027f, -0.006239f, -0.000838f, +0.018049f, -0.010456f, -0.003168f, -0.020462f, +0.008556f, + +0.011507f, -0.018740f, +0.008867f, -0.030431f, +0.013310f, +0.026174f, +0.035852f, -0.010530f, -0.001597f, +0.004768f, + -0.000578f, -0.001938f, +0.001634f, -0.007221f, +0.014984f, +0.010248f, +0.006205f, -0.008070f, -0.016146f, +0.004614f, + +0.002780f, -0.006113f, +0.002246f, -0.003233f, +0.008071f, +0.006050f, -0.007311f, +0.002562f, -0.008389f, +0.009022f, + +0.003948f, -0.003562f, +0.003736f, -0.003075f, -0.007552f, -0.005895f, -0.004644f, -0.005705f, -0.004414f, +0.010993f, + -0.000242f, -0.008889f, -0.002873f, -0.004221f, -0.006384f, +0.000854f, -0.002942f, +0.002222f, -0.001045f, -0.003423f, + +0.004275f, -0.000876f, -0.000639f, +0.003124f, +0.003912f, +0.000682f, -0.001851f, -0.000917f, -0.001289f, +0.000246f, + -0.002995f, +0.001601f, +0.001742f, +0.000532f, +0.000003f, -0.001120f + }, + { + +0.047273f, -0.302853f, -0.062975f, -0.069689f, +0.035890f, -0.008904f, -0.003214f, -0.002567f, -0.002846f, -0.022879f, + +0.035799f, -0.036129f, +0.019625f, -0.002549f, -0.023038f, -0.031111f, +0.003356f, +0.008892f, +0.015866f, -0.004085f, + -0.000913f, -0.021070f, +0.000001f, -0.002953f, +0.009518f, -0.013305f, -0.013892f, -0.011457f, +0.013592f, +0.006849f, + +0.006863f, -0.008894f, +0.013620f, -0.004628f, +0.006974f, -0.022609f, -0.014394f, -0.016037f, +0.008539f, +0.003414f, + -0.003399f, +0.018457f, +0.007115f, +0.011274f, +0.002411f, +0.011484f, -0.010414f, -0.006866f, -0.016056f, -0.012763f, + +0.008333f, +0.011228f, +0.005210f, +0.008103f, -0.007524f, -0.003231f, -0.000854f, -0.003656f, -0.000162f, +0.000045f, + -0.004872f, +0.010104f, -0.006449f, -0.003437f, +0.000952f, -0.001031f, -0.007015f, +0.000899f, +0.002584f, +0.004178f, + -0.003640f, -0.000101f, -0.003795f, -0.004869f, +0.000042f, -0.000311f, +0.000542f, -0.000345f, -0.000064f, +0.000203f, + +0.001738f, -0.000060f, -0.000363f, +0.003665f, +0.003783f, +0.001553f, +0.002712f, +0.001006f, -0.000093f, -0.001420f, + -0.000785f, -0.000604f, -0.000448f, +0.003136f, -0.001404f, +0.000086f + }, + { + +0.006492f, +0.220010f, -0.052932f, +0.042052f, -0.001894f, +0.003878f, -0.000838f, +0.017339f, +0.020772f, -0.024373f, + +0.014916f, +0.032375f, -0.023135f, +0.025180f, +0.037694f, +0.007309f, +0.023133f, -0.018667f, -0.014719f, +0.003750f, + -0.022339f, -0.020055f, +0.018512f, +0.016548f, -0.003364f, -0.023122f, +0.003359f, -0.004185f, +0.015681f, +0.006759f, + +0.002958f, +0.000862f, +0.004084f, -0.022978f, -0.007267f, +0.009698f, -0.001401f, -0.001346f, +0.010879f, +0.003041f, + +0.012391f, +0.009499f, -0.003279f, -0.007021f, -0.003397f, +0.000627f, -0.004830f, +0.001985f, -0.000926f, +0.003328f, + +0.010077f, +0.005648f, +0.008501f, -0.008719f, +0.006074f, +0.000398f, +0.005734f, -0.001893f, +0.010114f, +0.003108f, + -0.005938f, +0.000102f, +0.001078f, -0.000131f, +0.005771f, +0.003967f, -0.005054f, +0.004183f, -0.004967f, -0.002719f, + -0.003932f, +0.001323f, +0.002921f, +0.000114f, +0.001972f, +0.000417f, +0.004313f, +0.001277f, +0.000075f, +0.001204f, + +0.000841f, +0.000016f, +0.001050f, +0.003459f, -0.000086f, -0.003313f, +0.001847f, +0.000742f, +0.000123f, -0.000489f, + +0.001115f, -0.001147f, -0.000519f, +0.002098f, +0.000163f, -0.001700f + }, + { + +0.003288f, +0.031285f, -0.008272f, +0.011005f, -0.005846f, +0.002487f, +0.000378f, +0.001079f, -0.005353f, +0.001164f, + -0.007240f, +0.013235f, -0.010739f, -0.009656f, +0.000403f, -0.000915f, +0.022398f, -0.005088f, +0.032413f, +0.012383f, + +0.020541f, -0.018235f, -0.015868f, +0.017039f, -0.006759f, -0.014424f, -0.025155f, +0.003028f, -0.003070f, -0.016974f, + -0.028273f, -0.014875f, -0.005630f, -0.018021f, -0.006065f, +0.003958f, +0.028323f, -0.021470f, -0.000484f, +0.002947f, + +0.004624f, -0.008732f, -0.015071f, +0.003492f, +0.001616f, -0.012633f, +0.002292f, -0.002396f, -0.002067f, -0.004640f, + +0.006189f, -0.003564f, +0.012179f, +0.000212f, -0.008722f, -0.002150f, +0.000543f, +0.004505f, +0.001825f, +0.002291f, + +0.005190f, +0.004852f, +0.002499f, +0.001294f, -0.002309f, +0.003616f, +0.007879f, +0.002063f, -0.003753f, +0.002262f, + +0.000419f, -0.002142f, -0.000297f, -0.004922f, +0.003501f, -0.000549f, -0.000012f, -0.000344f, +0.001123f, +0.001745f, + +0.000759f, -0.000784f, +0.003898f, -0.001976f, +0.000155f, -0.001171f, +0.001026f, -0.000673f, -0.000991f, +0.002531f, + -0.000497f, +0.001316f, +0.000166f, -0.001761f, +0.001746f, -0.003649f + }, + { + -0.069636f, +0.148031f, +0.016928f, -0.093360f, +0.007801f, +0.005570f, -0.002595f, -0.011229f, +0.009271f, -0.046935f, + +0.000433f, +0.010414f, +0.022801f, -0.007976f, -0.022657f, +0.007579f, +0.010636f, -0.045615f, +0.008638f, +0.015342f, + -0.025517f, +0.015134f, -0.026616f, -0.007635f, -0.015104f, -0.015353f, +0.012577f, +0.024273f, -0.005670f, -0.010000f, + +0.009923f, -0.004269f, -0.003125f, -0.012271f, -0.001125f, +0.004832f, -0.047624f, -0.017360f, +0.008647f, -0.014790f, + +0.010932f, +0.004623f, +0.021647f, -0.005928f, -0.001109f, +0.002352f, -0.007578f, +0.005040f, -0.004229f, +0.011551f, + +0.003249f, -0.005270f, +0.006451f, +0.006394f, +0.011606f, -0.003630f, +0.003182f, -0.005167f, +0.009042f, -0.005515f, + +0.003396f, -0.002903f, +0.002079f, +0.005161f, -0.002972f, +0.002625f, -0.006226f, -0.002909f, -0.000054f, -0.006262f, + +0.001077f, +0.000197f, -0.001567f, +0.002024f, -0.004916f, +0.001433f, +0.003911f, +0.003345f, -0.002105f, -0.000103f, + -0.002206f, +0.000519f, +0.000936f, -0.000543f, -0.002795f, -0.000630f, -0.000144f, +0.000714f, -0.000187f, +0.000076f, + -0.000414f, -0.000298f, -0.001437f, -0.000440f, -0.001795f, +0.001186f + }, + { + -0.000340f, -0.007689f, +0.001326f, -0.002610f, -0.005163f, -0.000194f, -0.000761f, +0.001089f, +0.011373f, +0.003229f, + -0.005997f, -0.009720f, +0.002914f, -0.003410f, -0.073008f, +0.012474f, -0.033900f, -0.000770f, -0.028449f, +0.065761f, + -0.002036f, +0.013700f, +0.004538f, +0.021634f, -0.031732f, -0.028442f, -0.023113f, -0.032172f, -0.022449f, +0.001095f, + -0.006301f, +0.006364f, +0.011070f, +0.015852f, +0.000755f, -0.000958f, -0.008895f, +0.004817f, +0.018428f, +0.002715f, + -0.001436f, -0.001259f, -0.001222f, +0.000381f, +0.006532f, -0.006886f, +0.010042f, -0.013687f, -0.002199f, +0.000153f, + +0.000025f, -0.000348f, +0.012562f, +0.000980f, -0.001043f, -0.004270f, -0.001715f, -0.000527f, -0.011406f, -0.002018f, + +0.004180f, +0.003848f, +0.001110f, -0.003480f, +0.000240f, -0.003169f, +0.002445f, -0.002104f, -0.003424f, +0.004618f, + +0.000128f, -0.000098f, +0.001216f, -0.000749f, -0.002230f, -0.000287f, +0.002177f, -0.001423f, +0.000060f, -0.002355f, + +0.000217f, +0.000667f, +0.004645f, -0.000137f, +0.002326f, +0.001857f, +0.002525f, -0.003474f, -0.000084f, +0.000295f, + -0.000123f, +0.000211f, -0.000197f, +0.001804f, +0.000893f, +0.000354f + }, + { + -0.119996f, +0.037900f, +0.033136f, -0.064969f, -0.014857f, -0.002205f, -0.003923f, +0.002424f, +0.013158f, -0.019328f, + -0.002359f, +0.055457f, +0.028544f, +0.015508f, -0.029808f, -0.015042f, +0.030251f, +0.008838f, +0.032504f, +0.008801f, + +0.005376f, -0.017867f, +0.004946f, -0.013414f, +0.025062f, -0.007594f, -0.012543f, -0.014568f, +0.016027f, +0.002651f, + -0.005698f, +0.012551f, -0.000681f, -0.015763f, +0.006383f, +0.002045f, +0.005930f, +0.001002f, +0.002721f, -0.005483f, + +0.004541f, +0.005180f, +0.006768f, -0.001114f, +0.015727f, -0.002001f, -0.000990f, -0.005191f, -0.000510f, +0.000492f, + +0.015383f, +0.004247f, +0.009169f, +0.001535f, +0.003031f, +0.002732f, +0.008214f, +0.003913f, -0.009254f, +0.000578f, + -0.000642f, -0.004219f, +0.001914f, -0.003745f, -0.001183f, -0.002744f, -0.001023f, +0.003336f, +0.000090f, -0.000992f, + +0.000141f, +0.001356f, -0.000048f, -0.000555f, +0.001251f, -0.008580f, -0.004578f, +0.000736f, -0.001767f, -0.002409f, + -0.000086f, +0.000424f, +0.000249f, -0.001496f, -0.002346f, -0.001026f, +0.001668f, +0.002288f, +0.003269f, +0.002499f, + +0.000388f, +0.001925f, +0.003285f, -0.001590f, +0.000032f, -0.000822f + }, + { + -0.001143f, -0.012226f, -0.004643f, -0.005751f, +0.000082f, +0.003342f, +0.000509f, +0.011522f, +0.005058f, -0.001379f, + +0.002294f, -0.006784f, -0.014374f, +0.013108f, -0.022786f, +0.007203f, +0.005728f, +0.014916f, +0.031267f, +0.033327f, + -0.003643f, +0.039339f, +0.028327f, -0.026063f, -0.043516f, +0.002659f, -0.020494f, -0.024119f, +0.053806f, +0.014183f, + -0.020996f, +0.009292f, -0.019679f, +0.031074f, +0.013591f, -0.013628f, -0.002287f, +0.016962f, +0.004891f, -0.011639f, + +0.007921f, +0.012662f, -0.004889f, +0.004835f, -0.006279f, -0.011411f, -0.002270f, +0.000605f, -0.000628f, -0.007003f, + -0.001203f, -0.002799f, -0.000664f, -0.010327f, -0.004109f, -0.002694f, +0.005576f, +0.008112f, +0.012515f, -0.002028f, + +0.005101f, -0.004791f, +0.006706f, +0.003391f, +0.000680f, +0.003331f, +0.004016f, -0.007554f, +0.003225f, +0.009572f, + +0.002282f, +0.001410f, +0.008664f, +0.003452f, +0.000444f, -0.000879f, -0.000414f, +0.003190f, +0.003799f, -0.002740f, + -0.000560f, -0.005095f, +0.002561f, +0.001483f, +0.000368f, -0.000645f, -0.002736f, -0.000269f, +0.000263f, +0.001918f, + +0.003127f, -0.002683f, +0.001822f, -0.000775f, -0.001910f, +0.000580f + }, + { + -0.046664f, +0.693915f, +0.040999f, -0.082664f, -0.010479f, -0.006600f, +0.017312f, -0.023838f, -0.005674f, +0.000708f, + +0.001006f, +0.009368f, +0.030186f, +0.023223f, +0.012801f, -0.017088f, +0.028933f, +0.000698f, +0.023466f, -0.013269f, + -0.002578f, +0.007055f, -0.001608f, +0.006562f, +0.001539f, +0.004404f, -0.001521f, +0.012321f, -0.015801f, +0.004588f, + +0.007732f, +0.009641f, -0.000747f, +0.001376f, +0.011661f, -0.002926f, +0.001006f, +0.008091f, +0.006644f, +0.006815f, + -0.007474f, +0.009582f, +0.012037f, +0.001060f, +0.001463f, -0.013710f, -0.006343f, +0.005115f, -0.000802f, +0.005776f, + -0.003535f, +0.009432f, -0.004336f, -0.001691f, -0.003902f, +0.004522f, -0.009195f, +0.002772f, +0.000744f, -0.007274f, + +0.001228f, -0.006543f, +0.005911f, +0.006803f, -0.008240f, -0.001472f, -0.004731f, +0.001349f, -0.000604f, -0.004550f, + +0.001281f, +0.001678f, -0.005195f, +0.002581f, +0.000899f, -0.000842f, -0.003334f, +0.002313f, +0.000385f, +0.000838f, + -0.001038f, -0.000381f, -0.002284f, +0.001353f, +0.001639f, +0.000715f, +0.001780f, +0.002928f, +0.001218f, +0.000375f, + +0.001119f, +0.000181f, -0.000462f, +0.000912f, -0.002765f, +0.002533f + }, + { + -0.006238f, +0.080201f, +0.013587f, -0.028706f, -0.001900f, -0.004732f, +0.017630f, +0.003256f, +0.008679f, +0.002865f, + +0.020862f, -0.009619f, -0.011125f, -0.038291f, +0.008298f, +0.001125f, -0.017094f, -0.011014f, +0.010730f, -0.001407f, + -0.031360f, +0.006285f, -0.016836f, +0.024634f, +0.016789f, -0.008891f, -0.001595f, +0.018508f, +0.024961f, -0.018645f, + +0.004691f, -0.002008f, +0.029550f, -0.011790f, +0.011041f, +0.002612f, +0.006801f, +0.008702f, +0.015044f, +0.012259f, + -0.000410f, -0.000207f, -0.001991f, +0.010137f, +0.016855f, +0.011433f, -0.005045f, +0.005453f, -0.004908f, +0.011055f, + +0.010953f, +0.003544f, +0.000046f, +0.006041f, +0.001784f, -0.002729f, -0.003502f, +0.002129f, +0.006952f, +0.004108f, + +0.012828f, -0.001324f, +0.000111f, -0.004828f, +0.002520f, +0.001249f, +0.000158f, +0.000918f, +0.006748f, -0.002604f, + +0.004094f, +0.003137f, +0.001803f, -0.002376f, -0.000415f, -0.002249f, -0.002080f, +0.000301f, +0.006782f, +0.001601f, + -0.004973f, -0.005589f, -0.002143f, +0.002290f, -0.001465f, -0.000778f, -0.000612f, -0.001207f, +0.001369f, -0.002593f, + +0.004465f, -0.000039f, +0.000439f, -0.000618f, -0.000929f, +0.000316f + }, + { + -0.061968f, -0.220343f, +0.004219f, +0.004002f, +0.002350f, -0.036013f, +0.029520f, +0.023684f, +0.006681f, +0.014196f, + -0.008956f, +0.009329f, +0.008169f, -0.019496f, -0.020923f, -0.008292f, -0.009487f, +0.004690f, -0.040812f, +0.008117f, + -0.004920f, +0.009499f, -0.004405f, -0.004643f, +0.008442f, -0.004150f, -0.000520f, -0.022692f, -0.015750f, +0.003951f, + +0.015957f, +0.021838f, +0.001522f, -0.003678f, +0.013578f, -0.001840f, -0.004456f, +0.009509f, +0.015416f, +0.013825f, + -0.003580f, +0.006976f, +0.002711f, -0.008189f, -0.002987f, -0.020883f, +0.012310f, -0.012009f, +0.000187f, -0.000173f, + +0.005740f, -0.005871f, +0.006372f, +0.008089f, +0.011154f, -0.011002f, -0.000678f, -0.002603f, +0.003757f, -0.001414f, + -0.002995f, +0.002478f, +0.000474f, +0.014277f, +0.001461f, +0.000964f, -0.001404f, +0.002138f, -0.003725f, +0.004483f, + -0.001063f, -0.003019f, +0.000964f, +0.001354f, +0.000353f, +0.000914f, +0.003654f, +0.001796f, +0.000989f, +0.000760f, + -0.004240f, +0.001086f, +0.000970f, -0.000623f, +0.000638f, +0.000578f, -0.000278f, -0.000275f, +0.002239f, +0.000930f, + +0.000655f, -0.000425f, -0.001077f, -0.001796f, -0.002249f, -0.000188f + }, + { + +0.002303f, +0.105350f, -0.003020f, +0.003445f, -0.003998f, +0.006918f, -0.007840f, +0.001159f, +0.010661f, -0.008160f, + +0.011962f, -0.003909f, +0.034684f, -0.017192f, +0.027229f, +0.021421f, -0.018700f, -0.002646f, -0.021127f, +0.031589f, + -0.017737f, -0.021806f, -0.019504f, -0.014615f, +0.004200f, -0.007213f, -0.003904f, +0.015999f, +0.013099f, -0.026416f, + +0.005560f, -0.015709f, +0.000462f, -0.018592f, +0.000833f, -0.017485f, -0.024311f, -0.008087f, +0.017881f, -0.007528f, + +0.000935f, -0.008781f, +0.011339f, -0.000507f, +0.003398f, -0.007619f, +0.001224f, -0.010923f, +0.002984f, +0.010780f, + +0.014491f, -0.002864f, +0.006496f, -0.003330f, -0.000799f, -0.008987f, -0.007956f, -0.002136f, -0.009498f, +0.003304f, + +0.008711f, -0.000558f, -0.005166f, +0.008706f, -0.007947f, -0.010845f, +0.002743f, -0.002513f, +0.001736f, +0.006674f, + -0.006825f, -0.003192f, -0.004068f, -0.007293f, +0.001903f, +0.007267f, -0.000342f, +0.003224f, +0.004001f, +0.001441f, + -0.001119f, +0.000671f, -0.004627f, +0.007374f, -0.002152f, +0.003318f, -0.001749f, -0.003862f, +0.001021f, +0.000285f, + -0.000487f, -0.000543f, -0.004953f, +0.003740f, -0.002304f, +0.000422f + }, + { + +0.009114f, -0.226441f, +0.026045f, -0.010244f, -0.002671f, +0.013474f, +0.002503f, -0.017852f, -0.016160f, -0.051039f, + +0.014409f, +0.032219f, -0.007331f, -0.032789f, -0.025307f, +0.026623f, -0.049113f, +0.005394f, -0.000817f, -0.012521f, + -0.009917f, -0.008656f, +0.021656f, -0.009171f, -0.013411f, -0.003866f, +0.010736f, +0.026520f, +0.018811f, -0.002490f, + -0.017679f, -0.003072f, +0.011560f, +0.002281f, +0.030431f, +0.022117f, +0.008153f, +0.010429f, -0.010482f, +0.024821f, + +0.023584f, +0.001507f, -0.001396f, -0.001113f, +0.000718f, +0.004785f, -0.004906f, -0.004242f, -0.005748f, +0.005165f, + -0.009208f, +0.007967f, -0.002793f, -0.012871f, +0.016304f, -0.003905f, -0.000982f, +0.017133f, +0.000168f, +0.008615f, + +0.000294f, +0.006409f, -0.001314f, +0.006667f, +0.000750f, -0.000745f, -0.001544f, +0.003274f, -0.002389f, +0.009576f, + -0.004816f, -0.000323f, -0.005097f, -0.002492f, +0.002071f, +0.001422f, +0.002439f, -0.002097f, -0.005834f, +0.003702f, + -0.006152f, -0.000142f, -0.001530f, -0.003049f, +0.001821f, +0.000793f, +0.000473f, +0.003831f, -0.001384f, +0.002361f, + +0.000030f, +0.002582f, -0.000379f, -0.001003f, +0.002170f, -0.000680f + }, + { + +0.007955f, -0.087025f, -0.010159f, +0.011287f, +0.008772f, -0.000693f, +0.001089f, +0.019768f, +0.024360f, +0.004867f, + -0.030829f, +0.010743f, +0.001315f, -0.054520f, +0.188336f, +0.012390f, +0.020471f, -0.002083f, +0.064372f, -0.066724f, + -0.004083f, +0.038787f, -0.012780f, +0.017455f, +0.029122f, -0.019346f, +0.010504f, +0.000484f, -0.027382f, +0.011953f, + +0.008982f, +0.005277f, -0.018512f, -0.013083f, +0.010220f, -0.017443f, +0.003557f, -0.013547f, -0.000259f, -0.009617f, + -0.009078f, +0.008776f, -0.006425f, +0.005980f, -0.005519f, +0.006012f, +0.000213f, +0.001447f, -0.003229f, -0.008353f, + +0.002086f, +0.009298f, -0.005550f, -0.005329f, -0.000876f, -0.005311f, +0.000918f, +0.002812f, +0.005866f, -0.000596f, + +0.000914f, +0.003481f, +0.001709f, -0.003844f, -0.000503f, +0.005309f, -0.013918f, +0.000240f, +0.005984f, +0.005363f, + -0.003731f, -0.005663f, -0.005625f, +0.001408f, +0.002465f, -0.002579f, +0.000591f, -0.010909f, +0.003148f, +0.001596f, + +0.000806f, +0.007035f, -0.000514f, -0.003026f, -0.001286f, +0.002857f, -0.002430f, -0.003939f, +0.001958f, +0.002656f, + -0.001058f, -0.002478f, -0.001250f, -0.002074f, -0.000008f, +0.001806f + }, + { + -0.036207f, -0.139168f, -0.021421f, +0.037524f, +0.000989f, +0.002617f, -0.016736f, -0.007470f, +0.001101f, -0.001288f, + +0.007484f, +0.009003f, +0.009959f, -0.031076f, -0.103883f, -0.000236f, +0.012184f, +0.003056f, -0.014790f, -0.015584f, + -0.021990f, +0.000553f, -0.001383f, +0.010369f, -0.006381f, -0.014346f, -0.003700f, -0.030551f, +0.037881f, +0.003119f, + -0.014725f, -0.010099f, +0.001423f, -0.030011f, +0.003997f, +0.016985f, +0.013099f, +0.003003f, +0.000439f, +0.014147f, + +0.009284f, -0.014370f, -0.006054f, -0.003515f, -0.006748f, +0.002279f, -0.009662f, +0.013840f, +0.013762f, +0.003391f, + -0.004019f, +0.015210f, -0.004647f, +0.009686f, -0.010618f, -0.001683f, -0.004041f, -0.008098f, +0.002657f, +0.002973f, + -0.006103f, -0.004377f, +0.003244f, -0.007776f, +0.007454f, +0.002272f, +0.002488f, +0.001822f, -0.007903f, -0.007600f, + +0.009224f, +0.002953f, -0.003242f, -0.006892f, -0.003395f, -0.002605f, -0.002088f, +0.003537f, -0.002010f, +0.002579f, + +0.000768f, -0.004863f, +0.001267f, -0.000126f, +0.001808f, +0.000635f, -0.001648f, +0.003214f, +0.001973f, +0.001674f, + +0.001567f, +0.002794f, -0.003269f, -0.003035f, +0.002392f, +0.000229f + } + }, + { + { + +0.002433f, +0.121055f, -0.013473f, -0.020738f, -0.002822f, +0.001202f, +0.007197f, -0.015797f, -0.002046f, -0.034778f, + -0.033457f, +0.015150f, +0.007008f, -0.037585f, -0.001702f, -0.000168f, -0.003493f, -0.021894f, +0.045062f, -0.006114f, + +0.041928f, +0.030791f, +0.016052f, -0.014826f, -0.004629f, +0.033317f, -0.015254f, +0.000474f, -0.013842f, -0.008272f, + -0.008880f, +0.010426f, -0.000533f, -0.019481f, +0.004940f, +0.030173f, +0.019560f, -0.008106f, +0.008431f, +0.007132f, + +0.001894f, -0.006558f, -0.002160f, -0.002678f, +0.026077f, +0.008484f, +0.002675f, -0.009089f, -0.005517f, -0.001622f, + +0.002529f, -0.001157f, -0.011107f, +0.008386f, +0.004087f, -0.000439f, -0.006121f, +0.004854f, +0.001255f, -0.000158f, + +0.003950f, +0.002739f, -0.003363f, -0.004312f, -0.005418f, -0.000370f, -0.010406f, -0.004184f, -0.002250f, +0.002252f, + +0.002684f, -0.006001f, -0.001954f, -0.005167f, -0.003587f, -0.002153f, -0.001455f, -0.000467f, +0.004630f, -0.005992f, + +0.002167f, +0.002464f, -0.000761f, +0.001531f, +0.004517f, -0.001846f, -0.001686f, +0.000335f, -0.002187f, -0.001267f, + -0.000776f, -0.000038f, +0.001811f, -0.001185f, -0.000493f, -0.000858f + }, + { + -0.045217f, -0.365939f, +0.064879f, -0.047686f, +0.006842f, +0.009902f, -0.021470f, -0.005967f, +0.005556f, +0.013736f, + -0.030353f, +0.010346f, -0.004541f, +0.005144f, -0.003895f, -0.077255f, +0.029512f, +0.021343f, -0.023697f, +0.025590f, + -0.010698f, +0.000764f, -0.025259f, +0.010439f, -0.017585f, +0.011941f, -0.012539f, -0.004251f, +0.007848f, +0.006093f, + -0.005206f, +0.006329f, -0.008845f, +0.010574f, +0.009072f, -0.022961f, -0.024019f, -0.014019f, +0.008762f, +0.015575f, + +0.003352f, +0.013520f, +0.000636f, +0.023022f, +0.000820f, -0.002172f, -0.004719f, -0.020394f, -0.003814f, -0.007610f, + -0.002651f, +0.014272f, +0.001068f, +0.005355f, +0.000218f, -0.000600f, -0.000948f, -0.004902f, -0.010101f, +0.000223f, + +0.002722f, +0.003530f, +0.001231f, -0.004817f, -0.000060f, -0.000742f, -0.005135f, -0.000995f, +0.008642f, -0.003262f, + -0.002448f, +0.000688f, -0.000179f, -0.006023f, -0.005305f, +0.005966f, -0.003777f, +0.001532f, +0.001061f, -0.000028f, + +0.002414f, +0.000266f, +0.000168f, +0.003218f, +0.001268f, +0.001405f, +0.004352f, +0.001768f, -0.000501f, -0.000468f, + -0.000909f, -0.002493f, +0.001364f, +0.001937f, -0.001938f, -0.000231f + }, + { + -0.009344f, +0.088853f, +0.069880f, +0.033132f, -0.001915f, +0.008470f, -0.006395f, +0.028728f, -0.003481f, +0.012660f, + +0.021804f, -0.002812f, -0.022060f, +0.027432f, +0.044472f, +0.015021f, +0.004914f, +0.002478f, -0.026164f, -0.019702f, + -0.007182f, -0.007975f, +0.003596f, +0.028146f, -0.017163f, +0.000450f, -0.015442f, +0.020636f, -0.001104f, +0.017478f, + -0.015870f, +0.016140f, -0.004308f, -0.025607f, -0.007350f, +0.006949f, -0.003047f, -0.001492f, +0.014912f, +0.002744f, + +0.016725f, +0.007264f, -0.009471f, +0.002276f, -0.008863f, -0.007450f, +0.014382f, -0.005188f, -0.003480f, +0.005652f, + +0.000107f, +0.013928f, +0.001569f, -0.000538f, -0.004053f, +0.004655f, +0.007122f, +0.001383f, -0.002596f, +0.006540f, + +0.000720f, -0.000428f, -0.001200f, +0.000555f, +0.008483f, +0.000096f, +0.001091f, -0.003849f, -0.001548f, -0.001563f, + -0.005145f, +0.000641f, +0.002834f, +0.002878f, -0.003243f, +0.003245f, +0.001011f, +0.004602f, -0.000887f, -0.000044f, + +0.000324f, -0.000754f, +0.001286f, +0.002115f, +0.001460f, -0.001754f, -0.000644f, +0.002686f, +0.001991f, -0.001815f, + +0.002432f, -0.002076f, -0.000466f, +0.001717f, -0.000531f, -0.000250f + }, + { + -0.003370f, +0.013786f, +0.008619f, +0.003520f, +0.001654f, +0.000470f, +0.001184f, -0.002847f, -0.003218f, -0.005858f, + -0.000729f, +0.001894f, +0.013829f, -0.028972f, -0.021816f, +0.021297f, +0.023444f, -0.005424f, +0.015097f, +0.004199f, + +0.022442f, -0.021545f, +0.000392f, -0.007632f, -0.010852f, -0.009131f, +0.009921f, -0.018244f, -0.006806f, -0.032562f, + -0.007471f, -0.004256f, -0.026905f, -0.001474f, -0.006495f, +0.015057f, -0.017137f, -0.015003f, +0.024047f, -0.000205f, + -0.007130f, +0.010542f, -0.021235f, +0.007773f, -0.011146f, -0.003874f, -0.008936f, +0.005935f, -0.001854f, -0.008313f, + -0.001512f, +0.006788f, +0.000471f, +0.004808f, -0.007677f, +0.000751f, -0.002537f, +0.005158f, +0.002522f, -0.002033f, + +0.006262f, +0.006388f, -0.000683f, +0.005049f, -0.000867f, +0.001065f, +0.009632f, +0.002616f, -0.003714f, +0.003539f, + +0.000271f, +0.000650f, -0.004480f, -0.001716f, +0.000304f, +0.001820f, +0.002346f, -0.004183f, +0.002359f, +0.001552f, + -0.000339f, +0.003378f, +0.001847f, -0.001962f, +0.000456f, -0.003272f, +0.003017f, -0.001210f, -0.001130f, +0.000978f, + +0.000243f, +0.001856f, +0.001193f, -0.000390f, +0.000128f, -0.002672f + }, + { + +0.096413f, -0.009619f, -0.037930f, -0.065215f, -0.002467f, +0.004987f, -0.013545f, +0.004606f, -0.007153f, -0.013424f, + -0.038605f, +0.028885f, +0.010692f, +0.019035f, -0.003134f, -0.022522f, +0.006030f, -0.031629f, -0.009836f, +0.002995f, + +0.004538f, -0.017715f, +0.008901f, -0.034184f, +0.012831f, -0.017914f, -0.006300f, +0.005298f, +0.008581f, -0.002929f, + +0.012496f, -0.008620f, -0.005299f, -0.007461f, +0.001978f, -0.009953f, -0.059683f, +0.005154f, +0.010456f, -0.032611f, + +0.030136f, -0.006656f, +0.028542f, -0.015816f, +0.004379f, -0.003217f, -0.005237f, +0.000454f, +0.001635f, +0.013341f, + +0.001186f, +0.006959f, +0.002256f, +0.001496f, +0.010410f, -0.006819f, +0.003527f, -0.000804f, +0.005361f, +0.003979f, + -0.004076f, -0.003324f, +0.001457f, +0.002139f, +0.006155f, -0.000467f, -0.005195f, -0.003384f, -0.001762f, -0.002084f, + +0.003309f, -0.002998f, -0.001651f, +0.001883f, -0.002350f, -0.001616f, +0.004086f, -0.001972f, +0.002625f, +0.000914f, + -0.001750f, +0.001001f, -0.000175f, -0.001285f, -0.002023f, -0.001541f, +0.003042f, -0.000334f, -0.001232f, +0.000738f, + +0.000552f, -0.000331f, -0.001975f, -0.001637f, +0.000841f, -0.000765f + }, + { + -0.002893f, +0.002103f, -0.003478f, +0.002068f, -0.007656f, +0.000960f, -0.000023f, +0.000290f, +0.005477f, +0.002166f, + +0.002086f, -0.018356f, +0.005618f, -0.022756f, -0.058210f, +0.011766f, -0.024590f, -0.006755f, -0.012084f, +0.050871f, + -0.001486f, -0.014704f, +0.015350f, +0.012929f, -0.031723f, -0.031321f, -0.003466f, -0.038229f, -0.015214f, -0.027132f, + -0.012781f, +0.016965f, +0.020643f, +0.023409f, -0.003575f, +0.010686f, -0.010597f, -0.008470f, +0.007613f, +0.009043f, + +0.007561f, -0.008351f, -0.006234f, +0.001234f, +0.001596f, +0.000783f, -0.005729f, +0.004186f, +0.003848f, -0.002199f, + -0.002800f, +0.004656f, -0.004014f, +0.003315f, +0.000664f, -0.002241f, -0.004472f, -0.005009f, -0.004494f, -0.001530f, + +0.002008f, -0.001505f, +0.002028f, -0.002023f, -0.000100f, -0.002504f, +0.000398f, +0.003234f, -0.005852f, -0.001031f, + +0.010072f, -0.002002f, -0.002128f, +0.001093f, +0.000851f, -0.003232f, +0.001372f, -0.002237f, -0.000824f, -0.002863f, + +0.001726f, +0.002052f, +0.002841f, +0.001675f, +0.001977f, +0.003294f, -0.000247f, -0.002262f, +0.000961f, +0.000997f, + -0.000366f, -0.002045f, +0.001935f, +0.000357f, +0.001030f, -0.000582f + }, + { + +0.139701f, -0.219260f, -0.052228f, -0.047600f, -0.001152f, -0.009719f, +0.010814f, +0.010890f, -0.029710f, +0.008872f, + -0.012711f, +0.072025f, +0.008137f, +0.021507f, -0.031317f, +0.000475f, +0.009456f, +0.033552f, +0.004637f, +0.021765f, + -0.005172f, -0.022276f, +0.023784f, -0.001378f, +0.007954f, -0.006385f, -0.003079f, -0.018505f, +0.021806f, -0.019627f, + +0.001661f, +0.021690f, -0.007367f, -0.002292f, +0.010823f, +0.002196f, -0.005673f, +0.007359f, +0.003718f, -0.005849f, + +0.004234f, +0.004597f, +0.005638f, +0.002281f, +0.011111f, +0.007285f, -0.021032f, +0.010238f, -0.002670f, -0.003245f, + +0.008344f, +0.009519f, +0.008941f, -0.002534f, +0.006270f, +0.006845f, +0.000878f, +0.005813f, -0.002156f, -0.004585f, + -0.000867f, -0.009430f, +0.010829f, -0.006015f, +0.002353f, -0.000431f, +0.002441f, -0.003822f, +0.001100f, +0.003059f, + -0.000562f, -0.000387f, +0.001353f, -0.000901f, +0.000352f, -0.007968f, -0.001202f, -0.001766f, -0.001589f, -0.003799f, + -0.000299f, -0.001830f, +0.002706f, -0.002378f, -0.005119f, +0.001279f, +0.003890f, +0.002553f, +0.001032f, +0.002273f, + +0.002106f, +0.000736f, +0.002695f, -0.003977f, +0.000915f, -0.000347f + }, + { + -0.002675f, +0.002002f, -0.006820f, -0.006356f, -0.003494f, +0.002467f, +0.003960f, -0.002728f, +0.024194f, -0.004657f, + -0.005451f, +0.004792f, -0.018441f, +0.028766f, -0.046597f, +0.011334f, +0.006117f, +0.033409f, +0.029735f, +0.015435f, + +0.007860f, +0.052319f, +0.011196f, -0.033841f, -0.025540f, -0.020793f, -0.010931f, +0.009051f, +0.032844f, +0.009436f, + +0.015069f, -0.014267f, -0.015512f, +0.029578f, +0.005075f, +0.005895f, +0.000194f, +0.012138f, +0.007683f, -0.003801f, + -0.001344f, +0.001596f, +0.006214f, -0.001032f, +0.001956f, -0.013978f, +0.003448f, -0.011334f, -0.012845f, +0.000852f, + +0.002764f, -0.002133f, -0.011455f, +0.002215f, -0.010707f, +0.005607f, +0.005840f, +0.007024f, +0.009579f, +0.004436f, + -0.003582f, +0.004573f, +0.001902f, -0.001811f, +0.001938f, +0.002704f, +0.000978f, -0.004473f, +0.006210f, +0.007191f, + +0.001178f, +0.004309f, +0.004890f, +0.004305f, +0.001047f, -0.000594f, +0.000080f, +0.003671f, +0.001212f, +0.000928f, + -0.001138f, -0.002137f, +0.001617f, -0.000197f, +0.000374f, -0.001463f, +0.000237f, -0.002541f, +0.002690f, +0.003089f, + -0.000818f, -0.001501f, +0.001066f, -0.002535f, -0.001180f, +0.002449f + }, + { + +0.099595f, +0.608834f, -0.071879f, -0.041209f, -0.016350f, +0.000057f, -0.007132f, -0.014202f, -0.001579f, -0.007666f, + +0.004429f, -0.000809f, +0.022626f, +0.009801f, +0.019326f, +0.007777f, +0.026811f, -0.016541f, +0.023288f, -0.011772f, + -0.006793f, +0.015341f, +0.009513f, +0.006736f, +0.004218f, +0.001180f, -0.003029f, -0.003342f, -0.003045f, -0.006237f, + +0.023581f, +0.008044f, -0.011374f, +0.005754f, +0.010640f, -0.001843f, -0.007581f, +0.009955f, +0.016258f, +0.003549f, + -0.000348f, -0.002658f, +0.008221f, +0.007825f, -0.011497f, -0.003657f, +0.000708f, -0.004953f, -0.008128f, +0.006676f, + +0.015328f, -0.005956f, -0.001554f, -0.002525f, -0.005925f, -0.003981f, -0.001887f, +0.002820f, -0.003340f, -0.001147f, + +0.000590f, -0.004525f, -0.001423f, +0.005724f, -0.009830f, -0.000336f, +0.001064f, -0.005075f, +0.000359f, -0.000137f, + +0.001133f, -0.000824f, -0.003104f, +0.000674f, +0.002489f, -0.006319f, +0.001231f, +0.004196f, -0.000530f, +0.001512f, + -0.003631f, +0.000277f, -0.001648f, +0.000598f, -0.000710f, +0.002167f, +0.003004f, +0.002341f, +0.001634f, -0.001934f, + +0.001623f, +0.000250f, -0.000970f, -0.001314f, -0.000920f, +0.003006f + }, + { + +0.004191f, +0.127155f, -0.017650f, -0.022846f, -0.009972f, +0.021504f, -0.008318f, +0.019605f, -0.011552f, +0.005786f, + -0.001207f, -0.004545f, -0.009870f, -0.022544f, -0.010778f, -0.015302f, -0.009173f, -0.006266f, +0.036817f, -0.036749f, + -0.052821f, +0.004886f, +0.005356f, +0.028371f, +0.006067f, -0.002956f, -0.000032f, +0.013233f, +0.015181f, -0.006864f, + -0.018692f, +0.019957f, +0.011663f, -0.003649f, +0.010896f, -0.000800f, +0.005123f, +0.023601f, -0.011809f, +0.016443f, + +0.001410f, +0.005780f, +0.001340f, +0.016665f, +0.016426f, -0.000840f, +0.013139f, -0.005526f, +0.007988f, +0.011464f, + +0.001691f, +0.001668f, +0.012882f, -0.005728f, -0.001071f, +0.001114f, -0.002968f, -0.001108f, +0.013042f, +0.003265f, + -0.000142f, +0.004117f, +0.005173f, -0.003508f, +0.003953f, -0.003912f, +0.005395f, -0.001022f, +0.004417f, +0.000085f, + +0.007869f, +0.000076f, -0.001274f, -0.002538f, -0.000962f, -0.001492f, -0.000582f, +0.000947f, +0.003610f, -0.000668f, + -0.002254f, -0.006445f, +0.000779f, -0.002098f, +0.003891f, -0.003306f, +0.000558f, -0.001470f, -0.000900f, +0.001676f, + +0.001136f, +0.001127f, -0.000488f, +0.001358f, -0.000624f, -0.001233f + }, + { + +0.063959f, -0.299295f, -0.057032f, -0.003382f, -0.025401f, +0.073342f, -0.002544f, +0.017266f, -0.007645f, +0.020039f, + -0.010114f, +0.021256f, -0.015712f, +0.022763f, -0.034941f, -0.001305f, -0.002070f, -0.003519f, -0.024054f, +0.006334f, + -0.007346f, -0.011219f, +0.013320f, -0.010715f, +0.013933f, -0.014882f, -0.012163f, -0.007255f, -0.022225f, +0.009748f, + +0.014927f, +0.016794f, +0.000612f, +0.009293f, +0.007977f, +0.002622f, -0.000927f, +0.005123f, +0.007940f, +0.017920f, + +0.009870f, -0.007199f, +0.002022f, -0.012250f, -0.003826f, -0.017512f, +0.011895f, -0.005821f, -0.005779f, +0.006513f, + -0.000031f, -0.002874f, +0.004186f, +0.014810f, -0.000180f, -0.000795f, -0.007848f, +0.005362f, +0.006406f, -0.010806f, + -0.003709f, +0.002393f, +0.005026f, +0.006895f, +0.000518f, +0.006964f, -0.004359f, -0.000365f, +0.000021f, +0.003712f, + -0.001490f, +0.000545f, -0.002626f, +0.006397f, -0.003364f, +0.000221f, +0.004182f, -0.002153f, +0.003778f, -0.001033f, + -0.002412f, +0.000772f, +0.001469f, +0.000185f, -0.000758f, -0.000247f, +0.000480f, -0.000483f, +0.002160f, +0.000786f, + -0.001208f, -0.000670f, -0.002154f, -0.001257f, -0.001276f, -0.000659f + }, + { + -0.003639f, +0.093278f, +0.016361f, +0.002656f, +0.007915f, -0.006862f, -0.001654f, +0.005358f, +0.003326f, -0.003225f, + +0.003773f, -0.005914f, +0.036060f, -0.035621f, +0.022327f, +0.005151f, -0.000686f, +0.016159f, -0.006811f, +0.014975f, + -0.027232f, -0.008303f, +0.020865f, -0.012833f, -0.025216f, +0.001746f, +0.008068f, -0.007090f, -0.006877f, +0.009668f, + -0.019655f, +0.009607f, -0.000396f, -0.020459f, -0.006853f, -0.015941f, -0.020490f, +0.006713f, +0.000197f, +0.002969f, + -0.016160f, -0.005846f, +0.014907f, +0.006060f, -0.008195f, +0.004132f, -0.014109f, +0.011588f, -0.001318f, -0.002840f, + +0.010435f, +0.001652f, +0.008880f, -0.007330f, +0.002187f, -0.008081f, -0.015739f, -0.004460f, -0.003015f, +0.001327f, + +0.009670f, -0.001134f, +0.001363f, +0.001012f, -0.009110f, -0.002899f, -0.002119f, -0.000656f, +0.005500f, -0.002822f, + -0.001587f, -0.005009f, -0.002673f, -0.005238f, +0.003725f, +0.002653f, +0.000030f, +0.004224f, +0.004801f, +0.000573f, + -0.000326f, +0.001800f, -0.000849f, +0.002458f, +0.001700f, +0.000440f, -0.000329f, -0.002562f, -0.000216f, -0.000688f, + -0.000429f, -0.000674f, -0.000282f, -0.001627f, -0.000846f, +0.001829f + }, + { + -0.061141f, -0.154771f, +0.043098f, -0.012086f, +0.008883f, -0.029669f, -0.015102f, -0.008298f, +0.007394f, -0.052166f, + +0.025027f, +0.004129f, +0.005813f, -0.028653f, -0.033110f, +0.006225f, -0.000649f, -0.010920f, -0.000019f, +0.011531f, + -0.012746f, -0.014773f, +0.009414f, -0.002854f, -0.014605f, -0.001357f, +0.003487f, +0.026995f, +0.021340f, -0.007457f, + -0.023517f, +0.016591f, +0.017130f, -0.013649f, +0.042546f, +0.024566f, +0.001767f, +0.005244f, +0.001341f, +0.012801f, + +0.023575f, +0.018293f, -0.012885f, +0.004937f, -0.025449f, +0.012827f, +0.000388f, -0.003832f, -0.003645f, +0.000786f, + +0.007230f, -0.001976f, -0.000648f, -0.006079f, +0.004917f, +0.002955f, -0.000297f, +0.011665f, +0.000873f, +0.014560f, + -0.002030f, +0.000359f, +0.004917f, +0.005626f, -0.002416f, +0.001538f, +0.001939f, +0.000879f, +0.004432f, +0.002584f, + -0.002852f, -0.001712f, -0.003021f, -0.001939f, -0.000364f, +0.001333f, +0.001685f, -0.001660f, -0.002360f, +0.001924f, + -0.006576f, -0.000185f, +0.001401f, -0.001638f, +0.000877f, -0.000620f, -0.000140f, +0.000150f, +0.004968f, -0.001492f, + +0.001874f, +0.001646f, +0.000579f, -0.001059f, +0.000477f, +0.001379f + }, + { + -0.005396f, -0.107631f, +0.015827f, +0.013482f, +0.014785f, +0.001825f, +0.016096f, +0.001000f, +0.031002f, -0.004400f, + -0.019081f, +0.008866f, +0.012965f, +0.095299f, -0.055668f, +0.040833f, +0.017112f, -0.007361f, +0.038707f, +0.004023f, + -0.031544f, +0.031128f, -0.017469f, +0.024577f, +0.001729f, +0.005575f, +0.026603f, -0.007132f, -0.026109f, +0.003818f, + +0.013596f, -0.008434f, -0.020254f, +0.001408f, +0.002831f, +0.000369f, -0.022964f, +0.004723f, -0.001693f, -0.022571f, + +0.010633f, -0.011724f, +0.000725f, +0.016880f, -0.004553f, -0.004651f, +0.002616f, +0.002215f, -0.008424f, -0.008893f, + +0.011149f, -0.002697f, +0.000700f, -0.002500f, -0.007369f, -0.001182f, -0.000148f, +0.006523f, +0.005194f, -0.006021f, + +0.007367f, -0.002080f, +0.007461f, -0.010420f, +0.001759f, -0.003611f, -0.001698f, +0.001226f, +0.002686f, +0.001492f, + +0.002198f, -0.008701f, -0.001822f, +0.000258f, -0.001625f, +0.002155f, -0.005272f, -0.002146f, -0.003238f, +0.002013f, + -0.001311f, +0.004442f, +0.001833f, -0.001318f, -0.002095f, +0.001242f, -0.002811f, -0.002759f, +0.002615f, +0.002180f, + +0.002888f, -0.002872f, -0.005173f, -0.000834f, +0.000300f, -0.000271f + }, + { + +0.003207f, -0.186630f, -0.028887f, +0.040167f, +0.003521f, -0.035307f, -0.009164f, +0.011533f, +0.000667f, -0.010377f, + +0.043270f, -0.027696f, +0.021870f, -0.050737f, -0.074583f, +0.011207f, -0.000523f, -0.003509f, -0.029021f, -0.007453f, + -0.011250f, -0.003366f, -0.009792f, +0.022632f, -0.005322f, -0.030848f, +0.011812f, -0.021223f, +0.021147f, -0.004831f, + +0.010424f, -0.004109f, -0.006134f, -0.029806f, -0.013724f, +0.036249f, +0.016551f, -0.006210f, +0.001088f, +0.021888f, + +0.005984f, -0.017735f, -0.001061f, -0.013699f, +0.007240f, -0.013593f, -0.002947f, +0.011560f, +0.020662f, -0.001268f, + +0.000300f, +0.013192f, -0.009847f, +0.004353f, -0.000748f, -0.007181f, -0.012301f, +0.004910f, -0.002601f, +0.008070f, + -0.007505f, -0.008165f, -0.001706f, -0.003849f, +0.006523f, -0.001166f, -0.002508f, +0.003178f, +0.000382f, -0.005977f, + -0.001583f, +0.011794f, -0.004538f, -0.008937f, -0.003113f, -0.007102f, +0.003019f, +0.004670f, -0.005712f, +0.000070f, + +0.003949f, -0.002324f, +0.001739f, -0.000483f, +0.000702f, +0.001751f, -0.000352f, +0.004908f, -0.000453f, +0.004213f, + +0.000109f, +0.002693f, -0.001824f, -0.003973f, +0.001873f, -0.000353f + } + }, + { + { + -0.002255f, +0.087084f, -0.038704f, +0.001192f, +0.015206f, +0.001260f, +0.007085f, -0.008645f, +0.006490f, -0.001134f, + +0.003358f, +0.017498f, +0.002727f, -0.013843f, +0.016106f, +0.007269f, +0.028791f, -0.021759f, +0.025439f, -0.001612f, + +0.046497f, +0.021941f, -0.008326f, -0.036210f, -0.016351f, +0.028458f, +0.002697f, +0.008928f, -0.012538f, -0.021626f, + -0.000712f, +0.040835f, +0.018055f, +0.007951f, +0.008846f, +0.009551f, -0.004374f, -0.004632f, +0.009003f, -0.001176f, + -0.004871f, -0.007466f, +0.007601f, +0.001084f, +0.012991f, -0.008418f, +0.004653f, +0.009232f, +0.004289f, -0.002201f, + -0.004076f, -0.003137f, -0.015376f, +0.003226f, -0.004575f, -0.002925f, -0.002619f, +0.004426f, +0.001221f, -0.005413f, + +0.000564f, +0.001534f, -0.005305f, -0.004783f, -0.002854f, +0.000082f, -0.003656f, +0.004690f, -0.000040f, -0.003300f, + -0.001077f, -0.001880f, +0.004142f, +0.002532f, +0.004384f, +0.001236f, -0.000699f, +0.003130f, +0.007123f, -0.004119f, + +0.002092f, +0.003325f, -0.002169f, -0.000918f, +0.003744f, -0.000128f, -0.001739f, -0.002431f, -0.004242f, -0.002214f, + -0.001260f, -0.002096f, +0.001879f, +0.000122f, -0.000920f, -0.000661f + }, + { + +0.040108f, -0.362267f, -0.026417f, -0.027787f, +0.016967f, +0.000669f, -0.010455f, -0.000178f, -0.000510f, +0.038242f, + +0.009060f, +0.035985f, -0.011885f, +0.015683f, +0.018902f, -0.071172f, +0.006450f, +0.009952f, -0.014686f, +0.018001f, + -0.022807f, -0.011514f, -0.026146f, +0.010631f, -0.023531f, +0.023664f, +0.019778f, +0.011790f, +0.001514f, +0.005510f, + +0.007974f, +0.011358f, -0.023720f, +0.013181f, +0.012028f, -0.015463f, -0.010529f, -0.010790f, +0.015685f, +0.021143f, + +0.002161f, +0.004075f, -0.023058f, +0.008069f, -0.006553f, -0.010575f, +0.002374f, -0.009257f, +0.007648f, +0.001724f, + -0.004160f, -0.001950f, -0.010566f, -0.000968f, -0.003335f, +0.003937f, -0.002577f, -0.008251f, -0.005695f, +0.004592f, + +0.002406f, -0.007992f, -0.005391f, +0.000895f, +0.006363f, +0.000489f, +0.002482f, +0.003657f, +0.006537f, -0.004039f, + +0.000459f, +0.003323f, +0.006341f, +0.000366f, -0.004892f, +0.003307f, -0.004347f, +0.004849f, +0.001778f, -0.001016f, + -0.000571f, +0.001143f, +0.001566f, -0.000519f, -0.003240f, -0.000590f, +0.003952f, -0.000029f, -0.000806f, +0.003372f, + +0.002513f, -0.001679f, +0.001242f, +0.000629f, -0.002743f, -0.000621f + }, + { + +0.010233f, -0.041850f, -0.037912f, +0.046770f, +0.005483f, +0.005751f, -0.010329f, +0.013646f, -0.014651f, +0.008545f, + +0.005308f, +0.001649f, +0.007404f, +0.018115f, +0.022878f, -0.001313f, -0.011614f, +0.012347f, -0.000414f, -0.002952f, + +0.003650f, +0.019506f, +0.029851f, +0.050963f, -0.007518f, -0.004917f, -0.028218f, +0.012326f, -0.025089f, -0.005424f, + -0.029138f, -0.006400f, -0.020494f, -0.023491f, -0.003782f, +0.005425f, -0.007421f, -0.002155f, +0.017105f, -0.004032f, + +0.001635f, +0.001796f, -0.000308f, +0.006645f, -0.010987f, -0.009420f, +0.013899f, -0.001927f, +0.000685f, -0.000228f, + -0.006413f, -0.000294f, -0.008302f, -0.002490f, -0.007029f, +0.005200f, +0.007069f, -0.000373f, -0.011322f, -0.001137f, + +0.002354f, -0.001608f, -0.001932f, +0.000280f, +0.003816f, -0.007026f, +0.004197f, +0.002362f, +0.001101f, -0.002676f, + -0.004841f, +0.000685f, +0.000467f, +0.001074f, -0.005567f, +0.000401f, -0.003032f, +0.000609f, -0.003914f, -0.003022f, + -0.004320f, -0.003929f, +0.000559f, +0.002085f, +0.004522f, +0.002103f, +0.000099f, +0.002490f, +0.003418f, -0.000485f, + +0.001972f, -0.000535f, +0.000276f, -0.000635f, -0.001405f, +0.000269f + }, + { + +0.004401f, -0.001463f, -0.011766f, -0.008092f, -0.006896f, -0.001139f, +0.001028f, -0.006351f, -0.007792f, -0.007768f, + -0.005728f, +0.006842f, +0.033454f, -0.033100f, -0.003929f, +0.021075f, -0.027521f, -0.011691f, +0.024171f, -0.009492f, + -0.002533f, -0.016093f, +0.014288f, -0.019934f, -0.020753f, -0.005788f, +0.008829f, -0.033409f, +0.000535f, -0.006810f, + +0.005776f, -0.020733f, -0.048180f, +0.000110f, -0.003865f, +0.000547f, -0.026862f, -0.017543f, +0.023474f, +0.003753f, + -0.005674f, +0.014987f, -0.011824f, +0.011820f, -0.007691f, +0.004723f, -0.012567f, -0.006922f, -0.003434f, +0.001385f, + -0.008306f, +0.005924f, -0.002299f, +0.002970f, -0.001675f, +0.002183f, -0.004861f, -0.000045f, -0.002759f, -0.007993f, + +0.001466f, -0.001887f, -0.002906f, +0.004890f, -0.004186f, +0.000556f, +0.007792f, +0.002421f, -0.006822f, -0.001427f, + +0.004892f, +0.004773f, -0.004198f, +0.001590f, +0.000895f, -0.001487f, +0.000343f, -0.004211f, +0.001697f, +0.001052f, + -0.000812f, +0.001549f, +0.000518f, -0.001245f, +0.001577f, -0.000823f, +0.002324f, -0.001726f, -0.000340f, +0.001760f, + -0.000690f, +0.001305f, +0.001249f, -0.001518f, -0.000040f, -0.001263f + }, + { + -0.106765f, -0.190532f, +0.056317f, -0.025935f, +0.008970f, -0.002112f, -0.014553f, +0.014761f, -0.019721f, -0.005159f, + -0.014189f, +0.042562f, +0.008408f, +0.018274f, +0.007908f, -0.013497f, -0.016990f, -0.021128f, +0.008771f, -0.002799f, + +0.016855f, -0.008071f, +0.018828f, -0.023176f, +0.031231f, -0.001896f, -0.005833f, -0.003325f, +0.007378f, +0.007299f, + +0.002043f, -0.014795f, +0.000185f, -0.003231f, +0.008367f, -0.005498f, -0.019306f, +0.024706f, +0.001630f, -0.039155f, + +0.017299f, -0.012576f, +0.022249f, -0.008364f, +0.013079f, -0.003267f, -0.007205f, +0.005485f, +0.000885f, +0.006248f, + +0.003387f, +0.003986f, -0.002711f, +0.000044f, +0.004818f, -0.010195f, +0.006580f, +0.005002f, +0.001433f, +0.003712f, + +0.000005f, +0.001228f, +0.004071f, +0.005458f, +0.005869f, -0.005494f, -0.001197f, +0.004500f, +0.003584f, +0.002785f, + +0.006877f, -0.001867f, -0.000494f, -0.000779f, -0.004125f, -0.002469f, +0.001866f, -0.001307f, +0.003936f, +0.001453f, + -0.001675f, -0.000114f, -0.000071f, -0.003273f, -0.000326f, +0.001727f, +0.004048f, +0.001594f, -0.000346f, -0.000757f, + +0.000436f, +0.001345f, -0.000934f, +0.000103f, +0.003239f, -0.001501f + }, + { + +0.001334f, +0.017947f, +0.002045f, +0.012172f, -0.001941f, -0.000276f, +0.000855f, -0.003941f, -0.004149f, +0.002178f, + +0.009169f, -0.018302f, +0.003541f, -0.027545f, -0.044321f, +0.037427f, +0.007704f, +0.008907f, +0.004823f, +0.058873f, + -0.009992f, -0.047621f, -0.028431f, -0.012546f, -0.022620f, -0.018948f, +0.002631f, -0.010561f, +0.006955f, -0.006037f, + +0.002824f, +0.014408f, +0.010789f, +0.012786f, -0.006942f, +0.013453f, -0.007687f, -0.015910f, -0.012811f, +0.004498f, + +0.015074f, -0.011487f, -0.003594f, -0.006958f, -0.011816f, -0.002326f, -0.007613f, +0.011175f, +0.007551f, -0.007667f, + -0.010702f, -0.001778f, -0.011181f, -0.002303f, -0.010083f, -0.006754f, +0.002064f, -0.002756f, +0.002714f, +0.001734f, + -0.004280f, -0.004055f, -0.004286f, -0.007287f, -0.000598f, -0.006606f, +0.000536f, +0.005334f, -0.008704f, -0.004533f, + +0.015270f, +0.003758f, -0.001586f, -0.001199f, -0.002294f, -0.005248f, -0.003369f, -0.002870f, +0.000608f, -0.000830f, + +0.003907f, +0.002318f, +0.000481f, +0.000228f, -0.001398f, +0.001719f, +0.001328f, -0.001087f, +0.001369f, +0.001222f, + -0.000918f, -0.002863f, +0.000177f, -0.001849f, -0.000693f, -0.000778f + }, + { + -0.128047f, -0.470872f, +0.071798f, -0.002606f, +0.016254f, -0.001851f, +0.001335f, -0.010738f, -0.042396f, +0.029240f, + +0.010908f, +0.056075f, -0.027577f, +0.016816f, +0.002149f, -0.000029f, -0.006964f, +0.007228f, -0.029680f, +0.026746f, + -0.001666f, -0.018862f, +0.013581f, -0.007372f, +0.004560f, -0.008676f, -0.000748f, -0.015399f, +0.022521f, -0.012810f, + -0.005049f, +0.011249f, -0.000687f, -0.000937f, +0.009888f, +0.018437f, -0.014785f, -0.009343f, +0.001675f, +0.007074f, + +0.011183f, -0.002100f, +0.002330f, +0.002466f, +0.004241f, -0.003516f, -0.017183f, +0.009977f, -0.012778f, -0.004938f, + +0.001855f, +0.013656f, +0.011518f, -0.009140f, -0.001410f, +0.003657f, -0.001049f, +0.003447f, -0.000487f, -0.004674f, + +0.001438f, -0.002531f, +0.013798f, -0.002890f, +0.011845f, +0.005423f, +0.005098f, -0.003108f, +0.000511f, -0.000918f, + -0.001631f, +0.005961f, +0.003511f, -0.005648f, +0.001196f, +0.000361f, +0.001629f, -0.003972f, +0.001124f, -0.002326f, + -0.002977f, -0.000698f, +0.000048f, -0.003864f, -0.003730f, +0.001925f, +0.001332f, -0.000323f, +0.000560f, +0.001104f, + -0.000133f, -0.003717f, -0.001644f, -0.001759f, +0.003480f, +0.002106f + }, + { + +0.000773f, +0.025730f, +0.004351f, +0.001038f, -0.003319f, -0.000132f, +0.003513f, -0.001876f, +0.034198f, -0.001134f, + -0.006513f, +0.011942f, +0.002578f, +0.038622f, -0.026596f, +0.024126f, -0.036476f, +0.012628f, +0.006984f, +0.003478f, + +0.019042f, +0.016917f, -0.014631f, -0.024358f, -0.000736f, +0.014741f, +0.024604f, +0.026640f, +0.008834f, -0.007160f, + +0.029247f, +0.002006f, +0.002959f, +0.015911f, -0.012927f, +0.012571f, -0.001909f, +0.004339f, +0.001654f, -0.001135f, + -0.001264f, +0.002799f, +0.012437f, +0.000500f, +0.007867f, -0.012293f, -0.006313f, -0.009820f, -0.012366f, -0.007775f, + -0.005874f, -0.000712f, -0.007359f, +0.001319f, -0.000805f, +0.014460f, -0.000160f, +0.000602f, +0.003243f, -0.000769f, + -0.004966f, -0.001302f, -0.009626f, -0.005622f, -0.000873f, -0.002664f, -0.002137f, -0.003362f, +0.001569f, +0.003029f, + -0.004488f, -0.002700f, -0.001527f, -0.001534f, +0.002720f, +0.002442f, -0.000568f, +0.003906f, +0.001788f, +0.001631f, + -0.001267f, -0.000248f, +0.002124f, -0.000791f, -0.001622f, -0.002436f, +0.000409f, -0.001322f, +0.002113f, +0.000810f, + -0.000513f, -0.000216f, +0.001350f, -0.001902f, -0.000258f, +0.003026f + }, + { + -0.138639f, +0.431837f, +0.078122f, +0.000877f, -0.021532f, +0.002148f, -0.012626f, -0.006869f, +0.007194f, -0.021693f, + +0.013394f, +0.013166f, -0.002132f, -0.029148f, -0.010954f, -0.010119f, -0.002605f, -0.024795f, +0.013503f, -0.011459f, + +0.000608f, +0.014847f, +0.011636f, +0.002685f, -0.004258f, -0.010599f, -0.013149f, -0.004111f, -0.008654f, -0.018860f, + +0.019661f, +0.005694f, -0.016448f, -0.000424f, +0.003173f, +0.002237f, -0.001878f, +0.012716f, +0.002166f, -0.006505f, + +0.002917f, -0.008470f, -0.011893f, -0.002363f, -0.008713f, +0.005075f, +0.004964f, -0.011165f, -0.011710f, +0.004065f, + +0.011275f, -0.006628f, +0.002577f, -0.006706f, -0.001962f, +0.006798f, +0.003171f, +0.006964f, -0.001510f, +0.000371f, + +0.001204f, +0.000090f, -0.007038f, +0.000071f, -0.006332f, +0.004869f, +0.009001f, -0.000845f, +0.001415f, -0.000531f, + +0.000414f, -0.000509f, -0.005420f, -0.004180f, -0.000055f, -0.004454f, +0.003690f, +0.004436f, -0.000223f, +0.000021f, + -0.002934f, +0.000217f, +0.000043f, +0.000264f, -0.000219f, +0.001895f, -0.001086f, -0.000619f, +0.002524f, -0.001969f, + -0.001617f, -0.001764f, -0.001870f, -0.001933f, +0.000231f, +0.000957f + }, + { + -0.001616f, +0.154783f, +0.028428f, +0.007946f, +0.002080f, +0.021649f, -0.031545f, +0.013001f, -0.007423f, -0.002969f, + -0.021598f, -0.014014f, -0.019158f, -0.039705f, -0.010092f, -0.014519f, +0.009689f, +0.026796f, -0.011477f, -0.078660f, + -0.035751f, +0.003558f, +0.007714f, +0.029650f, +0.001757f, -0.008166f, -0.007659f, -0.017738f, -0.014503f, -0.018798f, + -0.017438f, +0.018557f, -0.003981f, -0.008805f, -0.000418f, -0.005101f, -0.005284f, +0.004365f, -0.029686f, +0.015866f, + +0.001372f, +0.005122f, +0.000592f, +0.003256f, +0.005384f, -0.008595f, +0.011212f, -0.001518f, +0.004952f, +0.002389f, + -0.004866f, -0.009604f, +0.012321f, -0.008920f, +0.000518f, +0.004557f, -0.009382f, -0.013042f, +0.009547f, +0.008336f, + -0.001708f, +0.005373f, +0.007530f, +0.001537f, +0.011243f, +0.000653f, -0.000889f, -0.005677f, +0.004435f, -0.003610f, + +0.002721f, -0.001848f, -0.000003f, -0.001842f, -0.003896f, +0.002144f, +0.005312f, +0.000747f, +0.000466f, -0.001522f, + +0.001718f, -0.003518f, -0.001997f, -0.005424f, +0.004888f, -0.000123f, +0.001830f, -0.002093f, -0.002983f, -0.000344f, + -0.001614f, +0.000640f, -0.001495f, +0.000163f, +0.001243f, -0.000920f + }, + { + -0.063238f, -0.313998f, +0.079316f, +0.004536f, -0.022939f, +0.064222f, -0.017316f, +0.007666f, -0.031442f, -0.009238f, + -0.005851f, +0.013059f, -0.032470f, +0.042549f, +0.004637f, +0.015289f, +0.000092f, -0.007508f, -0.013149f, -0.000240f, + -0.003651f, +0.007354f, +0.025820f, -0.014087f, +0.003275f, -0.015720f, -0.008756f, +0.011658f, -0.012727f, +0.000206f, + +0.002776f, +0.005795f, -0.011623f, +0.002078f, +0.014923f, +0.022669f, +0.009186f, -0.002432f, -0.012664f, -0.005455f, + -0.007013f, -0.016198f, -0.000688f, -0.012367f, +0.006412f, -0.014681f, +0.008295f, +0.005989f, +0.014568f, +0.013680f, + -0.008565f, -0.003273f, -0.004895f, +0.006967f, +0.003462f, +0.010466f, -0.000074f, +0.000289f, -0.003455f, -0.012762f, + -0.004101f, +0.000406f, -0.000704f, -0.002730f, -0.006374f, +0.003349f, -0.002339f, +0.001885f, +0.000243f, -0.003114f, + -0.006848f, +0.003974f, +0.002604f, +0.006838f, -0.002947f, -0.000752f, +0.002426f, -0.005258f, +0.000003f, -0.000041f, + +0.000408f, -0.001017f, -0.000762f, -0.000902f, -0.000798f, +0.000884f, -0.000380f, -0.001816f, +0.000299f, +0.000590f, + -0.002250f, -0.002519f, -0.001114f, +0.001971f, +0.000385f, -0.002336f + }, + { + +0.005105f, +0.064518f, -0.018905f, -0.002863f, +0.006563f, -0.002488f, +0.004829f, +0.007203f, +0.003791f, -0.001646f, + -0.017011f, -0.019046f, -0.001593f, -0.105160f, -0.024377f, +0.026259f, +0.019805f, -0.003584f, -0.003041f, +0.019603f, + +0.009157f, +0.000970f, +0.048594f, +0.008490f, -0.033512f, -0.002399f, -0.009669f, -0.016070f, -0.012198f, +0.001710f, + -0.029102f, +0.035948f, +0.026366f, -0.015777f, +0.009136f, -0.000204f, +0.005274f, +0.017284f, -0.005519f, +0.002188f, + -0.023660f, -0.007229f, +0.017792f, +0.008161f, -0.017139f, +0.013086f, +0.005719f, +0.017219f, -0.006109f, -0.016267f, + -0.002077f, -0.000873f, +0.003719f, -0.020626f, -0.006155f, -0.002385f, -0.005759f, -0.000931f, +0.002877f, +0.005282f, + +0.005494f, -0.001756f, +0.000511f, -0.006077f, -0.008340f, -0.001657f, -0.002296f, +0.003473f, +0.008351f, -0.001881f, + +0.002735f, -0.002037f, -0.003396f, -0.002840f, +0.005343f, -0.004025f, -0.004557f, +0.001444f, +0.002527f, +0.004740f, + +0.002470f, -0.000358f, +0.001781f, +0.001045f, +0.000016f, -0.000879f, -0.000862f, +0.000756f, -0.000475f, -0.000685f, + +0.001895f, -0.000417f, +0.001844f, +0.000421f, -0.000916f, +0.001738f + }, + { + +0.095573f, +0.037159f, +0.010115f, -0.015980f, +0.039851f, -0.039748f, -0.036540f, -0.000310f, +0.038916f, +0.008089f, + +0.028821f, -0.026759f, -0.010922f, -0.010592f, -0.022130f, +0.010500f, +0.013870f, -0.021604f, -0.006565f, +0.019204f, + -0.005783f, -0.021969f, -0.003781f, +0.005600f, +0.007549f, +0.008597f, -0.017024f, -0.010744f, +0.016895f, +0.025156f, + +0.000954f, +0.021520f, +0.009291f, -0.026224f, +0.025175f, +0.016868f, +0.002495f, +0.008718f, -0.006319f, -0.002720f, + +0.019233f, +0.017985f, -0.010449f, +0.004071f, -0.025482f, +0.004072f, -0.001615f, +0.010729f, +0.017326f, +0.008122f, + -0.000045f, -0.010243f, +0.001461f, -0.013049f, -0.007968f, +0.002366f, +0.002217f, +0.007264f, -0.002406f, +0.011640f, + -0.003736f, -0.004563f, -0.001196f, +0.000277f, -0.006323f, -0.001173f, +0.003452f, +0.005881f, +0.002219f, -0.002039f, + -0.001723f, +0.000788f, +0.002341f, +0.000760f, +0.000327f, +0.002134f, +0.000865f, -0.002316f, +0.001620f, +0.005534f, + -0.002213f, +0.003860f, +0.002719f, +0.002451f, +0.000538f, -0.001046f, +0.002078f, -0.001961f, +0.001455f, -0.001490f, + +0.002905f, -0.000089f, +0.001993f, +0.001294f, +0.002232f, +0.000933f + }, + { + +0.004469f, -0.139209f, -0.016750f, -0.005605f, +0.003238f, +0.002971f, +0.011869f, -0.013133f, +0.011186f, +0.000216f, + +0.000318f, +0.014262f, -0.003122f, +0.010114f, -0.175926f, +0.012754f, +0.012479f, +0.016202f, +0.012905f, +0.045261f, + +0.002463f, +0.018052f, -0.009261f, +0.014106f, -0.005311f, +0.025755f, +0.032107f, +0.001836f, -0.022303f, -0.021040f, + +0.005982f, +0.003806f, -0.015690f, +0.003785f, -0.006588f, +0.020282f, -0.001981f, +0.007611f, +0.004094f, -0.021744f, + +0.008620f, -0.010401f, +0.009199f, +0.018864f, -0.002110f, -0.001015f, -0.005926f, -0.005777f, -0.006140f, -0.004038f, + +0.009643f, -0.005191f, +0.004965f, +0.005363f, +0.000013f, +0.004463f, +0.005401f, +0.002311f, -0.004812f, -0.009511f, + +0.001122f, -0.008911f, +0.004256f, -0.007409f, +0.005530f, +0.002995f, +0.004801f, -0.004557f, -0.004409f, -0.004121f, + +0.006046f, +0.004772f, +0.003573f, -0.001267f, -0.000204f, +0.001969f, -0.004023f, +0.002116f, -0.004199f, -0.002519f, + -0.007318f, +0.000892f, +0.002099f, +0.004244f, +0.002940f, +0.000747f, -0.000865f, -0.001457f, +0.001243f, +0.003005f, + +0.005742f, -0.000176f, -0.003320f, -0.000562f, +0.000286f, -0.001737f + }, + { + +0.037432f, -0.140682f, -0.031964f, +0.027759f, +0.009157f, -0.027875f, +0.004232f, +0.013976f, -0.024806f, -0.016477f, + +0.050699f, -0.039726f, +0.020766f, +0.010645f, -0.000784f, -0.004171f, -0.046363f, -0.033517f, -0.038374f, -0.004279f, + -0.002400f, +0.018763f, +0.002146f, +0.019656f, +0.016899f, -0.012511f, +0.025836f, -0.003130f, +0.004801f, -0.007125f, + +0.023461f, +0.019675f, +0.008895f, -0.012504f, -0.018085f, +0.019394f, +0.019373f, -0.004990f, -0.001146f, +0.015682f, + -0.006313f, -0.002127f, +0.012278f, -0.006076f, +0.017212f, -0.009601f, -0.007114f, +0.001880f, +0.020606f, +0.001427f, + +0.002911f, +0.009197f, -0.010796f, -0.007472f, -0.008506f, +0.003357f, -0.005983f, +0.001587f, -0.003924f, +0.008188f, + -0.003820f, -0.001986f, -0.002508f, -0.003951f, +0.003111f, -0.003079f, -0.005116f, -0.001576f, +0.006520f, -0.000027f, + -0.004383f, +0.009932f, -0.000676f, +0.000151f, +0.000678f, -0.002949f, +0.003809f, +0.003351f, -0.005363f, -0.002469f, + +0.006826f, +0.001663f, +0.001215f, -0.000783f, -0.002573f, -0.001156f, +0.003060f, +0.005452f, -0.003271f, +0.001780f, + +0.000575f, +0.004255f, +0.000729f, -0.000583f, +0.002947f, -0.002733f + } + }, + { + { + +0.000440f, +0.013717f, +0.012986f, +0.035782f, -0.012181f, -0.001245f, +0.006452f, -0.001889f, -0.004908f, -0.008629f, + +0.044858f, -0.002011f, -0.004341f, +0.022582f, +0.021734f, +0.004993f, +0.015411f, -0.000478f, -0.012287f, +0.004099f, + +0.041604f, +0.003069f, +0.000496f, -0.040834f, +0.015040f, +0.011948f, +0.005778f, +0.004137f, -0.017492f, -0.033387f, + +0.014350f, +0.038470f, +0.010100f, +0.006201f, +0.009482f, +0.000813f, +0.001262f, -0.006155f, +0.010836f, +0.003731f, + -0.009550f, -0.010529f, +0.009478f, +0.011704f, -0.005761f, -0.016886f, +0.005347f, +0.017483f, -0.001571f, +0.002083f, + -0.004883f, -0.006997f, -0.010075f, -0.003668f, -0.003772f, +0.003835f, +0.000163f, +0.003864f, -0.000015f, -0.004144f, + -0.004979f, -0.002257f, +0.004630f, -0.005711f, +0.000207f, -0.006901f, +0.002999f, +0.004716f, -0.007581f, +0.003212f, + -0.003554f, +0.000982f, -0.001400f, +0.002902f, +0.008103f, +0.001857f, -0.002756f, +0.005724f, +0.002020f, +0.004043f, + -0.003208f, +0.001312f, -0.001410f, +0.000431f, +0.003883f, -0.000749f, -0.000763f, -0.002192f, -0.004410f, -0.000985f, + -0.002462f, -0.000933f, +0.000406f, -0.000693f, +0.000727f, +0.000753f + }, + { + -0.028363f, -0.327548f, -0.007752f, -0.025987f, +0.026605f, -0.009377f, +0.004631f, +0.015008f, -0.012369f, +0.006165f, + +0.022757f, +0.041083f, +0.000622f, +0.005621f, +0.013260f, -0.029813f, -0.037300f, +0.005472f, +0.013782f, -0.010599f, + +0.009059f, -0.017256f, -0.028028f, -0.024570f, +0.007945f, +0.008751f, +0.026013f, +0.012893f, +0.007758f, +0.005211f, + +0.011154f, -0.002808f, -0.004226f, +0.005819f, -0.016119f, +0.006082f, -0.004915f, -0.010708f, +0.022676f, +0.006104f, + +0.004679f, -0.005333f, -0.008808f, -0.009548f, -0.004015f, -0.009133f, +0.001125f, -0.005622f, +0.002543f, +0.004789f, + +0.001142f, -0.011156f, -0.006879f, -0.002485f, -0.001546f, +0.009874f, -0.008300f, -0.005212f, -0.004640f, +0.003175f, + +0.005828f, -0.013632f, -0.002197f, +0.001704f, +0.006475f, -0.001285f, +0.007241f, +0.000926f, -0.000288f, +0.001012f, + -0.001253f, +0.006888f, +0.001290f, +0.004020f, -0.001464f, -0.000826f, -0.002836f, +0.004340f, -0.000429f, -0.001217f, + -0.000101f, +0.003691f, -0.000652f, -0.002013f, -0.001646f, +0.000246f, +0.000351f, +0.001989f, -0.000533f, +0.004177f, + +0.000757f, +0.000134f, -0.000807f, +0.000032f, +0.000675f, +0.000215f + }, + { + -0.009276f, -0.115991f, +0.031629f, +0.050203f, -0.002302f, -0.002659f, -0.002670f, -0.003953f, +0.005421f, +0.011892f, + +0.016885f, -0.024517f, +0.013774f, +0.019556f, +0.002365f, -0.002197f, -0.005789f, +0.024809f, -0.009738f, +0.014570f, + -0.000019f, +0.015267f, +0.046841f, +0.020741f, +0.004360f, -0.002492f, -0.021858f, -0.005867f, -0.004117f, -0.007806f, + -0.015971f, -0.030113f, -0.020785f, -0.007714f, -0.007101f, -0.003402f, +0.003447f, -0.008823f, +0.006413f, +0.006173f, + -0.002182f, -0.001737f, +0.002367f, +0.003662f, -0.013728f, -0.002761f, +0.006196f, -0.006932f, +0.006595f, -0.003103f, + +0.001776f, -0.007823f, -0.005205f, -0.008546f, +0.003345f, -0.000517f, -0.000405f, +0.005429f, -0.007999f, -0.006965f, + +0.003996f, -0.004048f, +0.003046f, -0.004759f, -0.002384f, -0.000616f, +0.003042f, +0.002287f, -0.000414f, -0.005134f, + -0.000174f, +0.001847f, -0.001547f, -0.000061f, -0.000962f, -0.002374f, -0.001457f, -0.003611f, -0.004398f, -0.000192f, + -0.002910f, -0.004704f, -0.000227f, +0.002271f, +0.004730f, +0.001880f, +0.001323f, +0.000625f, +0.002580f, +0.001497f, + -0.001340f, +0.000428f, +0.001556f, -0.001191f, -0.000611f, -0.000136f + }, + { + -0.004962f, -0.001175f, -0.004682f, -0.014843f, -0.000601f, -0.000224f, -0.001398f, -0.001028f, -0.006780f, -0.015115f, + -0.000709f, +0.005955f, +0.024033f, -0.013132f, +0.037346f, +0.017297f, -0.081576f, +0.015484f, +0.032164f, +0.006301f, + -0.011212f, -0.014827f, +0.011455f, -0.029113f, -0.034439f, +0.032112f, -0.028216f, -0.020485f, +0.004290f, -0.023364f, + +0.034667f, -0.029991f, -0.044394f, -0.002487f, +0.008301f, -0.038885f, +0.005232f, -0.006913f, +0.003049f, +0.012046f, + -0.008135f, +0.015896f, -0.003425f, +0.004990f, -0.005984f, -0.006898f, +0.004385f, -0.011191f, -0.009772f, +0.012769f, + -0.005023f, +0.001656f, -0.001241f, -0.001205f, +0.003299f, +0.001258f, -0.008240f, -0.006475f, +0.006253f, -0.007088f, + +0.003296f, -0.012097f, +0.001262f, +0.004271f, -0.000575f, -0.001608f, +0.006413f, +0.003187f, -0.007290f, -0.002564f, + +0.009656f, -0.001550f, -0.001535f, +0.002459f, +0.002326f, -0.003314f, -0.003795f, -0.000982f, +0.001126f, +0.000332f, + -0.000362f, +0.000097f, +0.002506f, -0.001226f, +0.001972f, +0.000828f, -0.001348f, +0.000703f, -0.002224f, +0.002535f, + +0.000544f, +0.000578f, +0.000223f, -0.000298f, -0.001376f, +0.000463f + }, + { + +0.096553f, -0.363943f, -0.028731f, +0.001540f, -0.002858f, -0.006950f, -0.002966f, -0.001070f, -0.007286f, -0.007130f, + -0.000308f, +0.031810f, -0.005792f, +0.030273f, +0.009668f, -0.004770f, -0.030346f, -0.024675f, +0.018020f, +0.011353f, + -0.002369f, -0.003811f, +0.003152f, +0.014495f, +0.002102f, +0.021902f, -0.008518f, -0.006975f, +0.013240f, +0.003012f, + -0.006683f, -0.011776f, +0.004618f, +0.004740f, -0.013098f, -0.001865f, +0.039604f, +0.000168f, -0.009727f, -0.026244f, + -0.000551f, +0.000526f, -0.004390f, +0.009483f, +0.008214f, -0.012104f, +0.003928f, +0.010629f, -0.010657f, +0.003596f, + +0.006684f, +0.005870f, -0.009072f, +0.000891f, +0.002714f, -0.004231f, +0.006854f, +0.001884f, +0.000266f, +0.002669f, + +0.002030f, +0.001021f, +0.005858f, +0.003247f, +0.001000f, +0.001844f, +0.001875f, -0.002212f, +0.004127f, +0.004458f, + +0.007672f, -0.002111f, +0.003026f, -0.006234f, -0.002185f, +0.000079f, -0.003244f, +0.001946f, +0.000587f, +0.002616f, + -0.000346f, -0.002977f, +0.002327f, -0.002917f, +0.001177f, +0.002660f, +0.000444f, +0.002079f, +0.000934f, +0.000077f, + -0.000492f, +0.001231f, -0.000537f, +0.000418f, +0.002171f, -0.000697f + }, + { + +0.001488f, -0.002856f, +0.023225f, +0.000942f, +0.003276f, -0.000974f, +0.001200f, -0.003821f, -0.011345f, +0.006285f, + +0.007373f, +0.001153f, -0.007131f, +0.027760f, -0.046138f, -0.039911f, +0.061800f, -0.004457f, +0.002090f, +0.053641f, + +0.005380f, -0.029264f, -0.035531f, -0.018187f, -0.020116f, -0.005320f, -0.008953f, -0.002797f, -0.017187f, +0.040737f, + +0.010938f, +0.002853f, -0.010718f, -0.008890f, +0.013445f, +0.004182f, +0.003792f, -0.003324f, -0.014320f, +0.000138f, + +0.013758f, +0.001072f, -0.005259f, -0.015795f, -0.011203f, -0.001495f, -0.007537f, +0.007523f, +0.000148f, -0.008333f, + -0.008165f, -0.002665f, -0.009388f, -0.006416f, -0.005116f, -0.009025f, +0.000335f, -0.002294f, +0.004384f, +0.004909f, + -0.003922f, -0.007287f, -0.002302f, -0.005221f, -0.001592f, -0.005940f, +0.000968f, +0.003083f, -0.006887f, +0.001324f, + +0.009443f, +0.003451f, +0.000127f, -0.000761f, -0.008216f, -0.004444f, -0.002410f, +0.002091f, -0.003281f, +0.000706f, + +0.003156f, +0.004159f, -0.003425f, +0.003093f, -0.001591f, -0.001534f, +0.001579f, +0.000331f, +0.000327f, +0.000958f, + +0.000356f, -0.002306f, -0.002151f, -0.000089f, -0.002295f, +0.001094f + }, + { + +0.088137f, -0.654913f, -0.031764f, +0.036073f, +0.004134f, +0.001976f, -0.006573f, -0.022287f, -0.011797f, +0.006711f, + +0.042691f, +0.005121f, +0.000026f, +0.006746f, +0.005312f, -0.002186f, -0.026409f, +0.017640f, -0.017429f, -0.000037f, + -0.006094f, +0.004978f, -0.001331f, -0.014057f, +0.007122f, -0.004760f, -0.000047f, -0.004851f, +0.005375f, +0.004947f, + -0.016567f, +0.002556f, +0.008732f, +0.002400f, +0.006572f, +0.010430f, -0.011736f, -0.012366f, -0.008963f, +0.018890f, + +0.002458f, +0.001446f, +0.002273f, +0.001606f, +0.003283f, -0.005791f, -0.001571f, -0.007550f, -0.013391f, +0.000672f, + -0.004266f, +0.016888f, +0.004242f, +0.000094f, -0.005556f, +0.003973f, -0.001998f, -0.000927f, +0.007265f, -0.005285f, + +0.003706f, +0.000966f, +0.003757f, +0.005629f, +0.013202f, -0.001804f, +0.003566f, +0.001628f, +0.000741f, -0.000368f, + -0.001700f, +0.007453f, -0.000315f, -0.002470f, -0.000654f, +0.002530f, -0.000014f, +0.000562f, -0.001487f, -0.001177f, + -0.002157f, -0.001565f, -0.002753f, -0.003338f, +0.000425f, +0.000264f, -0.000892f, +0.000914f, +0.000843f, +0.001908f, + -0.004144f, -0.000322f, -0.003473f, +0.000802f, +0.000989f, +0.002485f + }, + { + +0.002539f, +0.004975f, +0.013932f, +0.002862f, -0.005297f, +0.000919f, +0.002764f, +0.008450f, +0.017343f, +0.001062f, + +0.004265f, -0.000190f, +0.012440f, -0.000391f, +0.029154f, +0.016149f, -0.019281f, -0.012578f, -0.000167f, +0.026263f, + +0.001592f, -0.007258f, -0.009141f, -0.016759f, -0.008785f, +0.030416f, +0.020622f, +0.029913f, +0.008834f, +0.024753f, + -0.022432f, +0.007453f, +0.001328f, +0.004630f, -0.008658f, +0.022930f, -0.015666f, +0.008164f, +0.005842f, -0.011917f, + +0.011941f, +0.002847f, +0.006251f, +0.005632f, -0.008687f, -0.001331f, -0.010292f, +0.004519f, -0.016071f, -0.006395f, + -0.010744f, -0.007042f, +0.007256f, -0.013972f, +0.013827f, +0.010039f, +0.000592f, +0.004690f, -0.009018f, +0.002352f, + -0.000737f, -0.006255f, -0.009055f, -0.003676f, -0.004377f, +0.000811f, -0.005262f, -0.001402f, -0.000207f, -0.002240f, + -0.003442f, -0.001776f, -0.000624f, -0.003421f, +0.002187f, +0.002783f, -0.001360f, +0.003706f, -0.000681f, +0.001602f, + +0.003925f, -0.004189f, +0.002913f, +0.000659f, -0.005672f, +0.002693f, -0.002658f, +0.000772f, +0.000071f, -0.000887f, + +0.001756f, +0.000005f, -0.000109f, -0.000183f, -0.001277f, +0.002703f + }, + { + +0.154158f, +0.187149f, -0.071261f, +0.032881f, -0.007274f, -0.000308f, -0.023725f, +0.010054f, -0.006937f, -0.011006f, + +0.020359f, +0.024428f, -0.031337f, -0.019363f, -0.004514f, -0.014685f, -0.031026f, -0.000621f, +0.007018f, -0.015700f, + +0.020383f, +0.000757f, +0.001027f, -0.008993f, -0.000760f, -0.005517f, -0.016157f, +0.002198f, -0.008595f, -0.006675f, + -0.001647f, +0.017130f, -0.018763f, -0.006514f, +0.000799f, +0.014735f, -0.007724f, +0.010392f, +0.001572f, +0.006743f, + -0.002277f, -0.008771f, -0.016642f, -0.008568f, +0.003020f, -0.002787f, -0.002006f, +0.001336f, -0.001026f, +0.000693f, + +0.001143f, -0.002226f, -0.002714f, -0.000726f, -0.000815f, +0.009540f, -0.002535f, +0.009890f, +0.002687f, +0.000869f, + +0.000262f, +0.001820f, -0.008743f, -0.000443f, -0.001434f, +0.004480f, +0.005065f, +0.004233f, -0.001292f, -0.000896f, + +0.000538f, +0.001174f, -0.003856f, -0.004803f, -0.002310f, -0.001828f, +0.002809f, +0.002719f, +0.001761f, -0.003739f, + +0.001533f, -0.000168f, -0.000500f, +0.000124f, +0.003029f, +0.000990f, -0.001691f, -0.001975f, +0.001215f, -0.001016f, + -0.001027f, -0.001684f, -0.000198f, -0.002779f, -0.000289f, -0.000732f + }, + { + -0.001028f, +0.153034f, +0.023282f, +0.022547f, +0.002228f, -0.009103f, -0.020175f, +0.002959f, +0.010508f, -0.014383f, + -0.007136f, -0.011548f, +0.006243f, -0.051146f, -0.001382f, -0.016212f, +0.010086f, +0.007637f, -0.037393f, -0.034640f, + -0.016670f, -0.009115f, +0.020971f, -0.001378f, +0.007343f, -0.001424f, +0.008453f, -0.025017f, -0.011241f, -0.020404f, + -0.003689f, -0.002628f, -0.019857f, +0.012778f, -0.008846f, +0.003104f, -0.020371f, -0.009128f, +0.004587f, +0.004167f, + -0.009244f, +0.009181f, +0.007569f, -0.010908f, -0.003833f, +0.005074f, +0.001376f, +0.008531f, -0.000097f, -0.005675f, + -0.002815f, +0.000475f, +0.006265f, -0.004913f, -0.000443f, -0.001694f, -0.006222f, -0.006138f, +0.003421f, +0.006404f, + -0.002288f, +0.009449f, +0.005944f, -0.000810f, +0.011652f, +0.005514f, -0.002009f, -0.009998f, +0.001519f, +0.000062f, + -0.002392f, +0.004842f, -0.003356f, -0.000187f, -0.006042f, +0.002562f, +0.007181f, +0.002502f, -0.000178f, -0.001279f, + +0.000504f, -0.002839f, -0.003446f, -0.002027f, +0.002228f, +0.000339f, +0.000488f, -0.000695f, -0.001476f, -0.003923f, + -0.000503f, -0.000670f, -0.000286f, +0.000389f, +0.000055f, -0.000613f + }, + { + +0.057748f, -0.333521f, -0.031587f, -0.014596f, +0.025950f, -0.032828f, +0.025406f, +0.015205f, -0.011356f, -0.036932f, + +0.009236f, -0.018224f, -0.026815f, +0.024322f, +0.049077f, +0.004754f, +0.013213f, -0.017098f, +0.001876f, -0.023983f, + +0.012665f, +0.001280f, +0.015587f, -0.000009f, -0.024418f, +0.004185f, -0.001706f, +0.003717f, -0.014940f, -0.008529f, + +0.014255f, -0.005389f, +0.003428f, -0.010724f, +0.005935f, +0.029424f, +0.006777f, +0.006957f, -0.018784f, -0.013959f, + -0.008265f, -0.004385f, +0.001451f, -0.013067f, +0.003490f, -0.005540f, +0.000890f, +0.011418f, +0.011996f, +0.020490f, + -0.006252f, -0.005797f, -0.010993f, -0.002107f, +0.007488f, +0.008197f, +0.008539f, -0.007915f, -0.002774f, -0.002436f, + -0.000191f, -0.004270f, -0.004313f, -0.003721f, -0.002043f, -0.000230f, +0.000654f, -0.002008f, -0.001831f, -0.002327f, + -0.005135f, +0.002091f, +0.005440f, -0.000358f, +0.001037f, +0.000609f, +0.001109f, +0.000452f, -0.003680f, -0.001245f, + +0.000883f, +0.000303f, -0.000048f, -0.005248f, +0.002159f, -0.000992f, -0.000702f, +0.000795f, -0.002501f, -0.000046f, + -0.001496f, -0.003494f, +0.001149f, +0.000968f, +0.000117f, -0.001621f + }, + { + -0.006378f, +0.027100f, +0.010028f, +0.003381f, -0.014089f, +0.021007f, -0.006235f, +0.016794f, -0.001779f, -0.008129f, + -0.013409f, -0.013025f, -0.017656f, -0.093381f, -0.042537f, +0.035853f, +0.046587f, -0.052559f, +0.025549f, +0.024852f, + +0.011289f, -0.026761f, +0.041586f, +0.011209f, -0.003754f, -0.008386f, -0.029567f, -0.009097f, -0.003968f, -0.025947f, + +0.022471f, -0.010497f, +0.031129f, +0.014694f, -0.003731f, +0.001111f, +0.017790f, -0.011408f, +0.010077f, -0.009376f, + -0.007167f, +0.004409f, -0.000562f, +0.008558f, -0.007710f, +0.005674f, +0.019329f, +0.004463f, -0.004359f, -0.009264f, + -0.006100f, +0.001625f, -0.001812f, -0.013216f, -0.006621f, -0.005550f, -0.002982f, +0.001093f, +0.002659f, +0.010407f, + -0.003302f, +0.001923f, -0.001912f, -0.009666f, -0.000309f, -0.006994f, -0.000097f, +0.003339f, +0.006326f, -0.000520f, + +0.004278f, -0.003545f, -0.003933f, -0.002751f, -0.000723f, +0.000938f, -0.002453f, -0.002017f, +0.003779f, +0.003802f, + +0.000117f, -0.000059f, +0.003629f, -0.000012f, -0.000067f, -0.001086f, -0.002235f, +0.001713f, -0.001690f, +0.000211f, + +0.003878f, -0.000842f, +0.001239f, +0.000711f, +0.000801f, -0.000626f + }, + { + -0.089600f, +0.306687f, -0.017096f, +0.007612f, +0.045675f, -0.038564f, -0.006355f, +0.029933f, +0.000219f, +0.042446f, + +0.002053f, -0.026672f, -0.019632f, -0.004795f, -0.017299f, +0.004521f, +0.019568f, -0.017039f, -0.005768f, -0.012187f, + +0.011871f, -0.009507f, -0.012589f, -0.011221f, +0.014876f, +0.009484f, -0.017214f, -0.020477f, +0.025131f, +0.024666f, + +0.006397f, +0.019632f, +0.004971f, -0.019905f, +0.005564f, +0.025799f, +0.009713f, +0.012576f, -0.013900f, -0.008259f, + +0.018152f, +0.010720f, -0.005361f, +0.006254f, -0.007760f, -0.013207f, +0.006412f, +0.008150f, +0.017020f, -0.000353f, + -0.001612f, -0.011806f, -0.001623f, -0.013055f, -0.002368f, -0.001927f, +0.003244f, +0.003900f, +0.004442f, +0.000912f, + -0.001725f, -0.003020f, -0.000405f, -0.003330f, -0.002457f, -0.000546f, +0.000492f, +0.003938f, +0.000268f, +0.000267f, + -0.002550f, +0.003554f, +0.000056f, +0.001741f, +0.001943f, +0.003689f, +0.002167f, -0.004662f, +0.001964f, -0.002291f, + +0.004618f, +0.004022f, +0.000598f, +0.006134f, -0.003258f, -0.001925f, +0.005177f, -0.003562f, +0.001056f, -0.000627f, + +0.001224f, +0.000536f, -0.000030f, +0.003061f, +0.002699f, +0.000764f + }, + { + -0.004528f, -0.149227f, -0.002402f, -0.013304f, +0.000440f, +0.014787f, +0.001922f, -0.008564f, +0.003057f, +0.009095f, + -0.003725f, +0.022371f, -0.005045f, -0.051916f, -0.082711f, +0.008183f, -0.020642f, +0.050447f, +0.008877f, +0.002369f, + +0.017088f, +0.009101f, +0.013351f, +0.010945f, -0.018874f, +0.016468f, -0.004981f, +0.012573f, +0.017804f, -0.032774f, + +0.017778f, -0.003264f, -0.011146f, +0.006943f, -0.001980f, -0.001319f, +0.007936f, +0.006557f, +0.005944f, -0.006777f, + +0.002125f, -0.010433f, +0.011348f, +0.005979f, -0.004669f, +0.012863f, -0.013963f, -0.000734f, -0.002918f, -0.000022f, + -0.002415f, +0.000112f, +0.006584f, +0.002720f, -0.002923f, +0.010993f, +0.008936f, -0.004341f, -0.010313f, +0.001255f, + -0.008966f, -0.003416f, +0.000115f, -0.002586f, -0.000197f, +0.007527f, +0.004528f, -0.006457f, -0.005356f, -0.003729f, + +0.002483f, +0.002497f, +0.006911f, +0.002625f, -0.001363f, -0.002486f, +0.001519f, -0.000311f, -0.002077f, -0.000808f, + -0.005953f, -0.002523f, +0.003798f, +0.006126f, +0.002047f, -0.001568f, -0.000124f, +0.000172f, +0.003238f, +0.000740f, + +0.003369f, +0.000844f, -0.000701f, -0.001147f, +0.000283f, +0.000578f + }, + { + -0.065218f, -0.000121f, -0.033615f, +0.042708f, +0.021220f, -0.027715f, -0.005517f, +0.008265f, -0.017596f, +0.004989f, + -0.010682f, -0.000930f, +0.008690f, +0.003028f, +0.046337f, -0.034086f, -0.036817f, -0.025024f, -0.047419f, +0.009077f, + +0.005039f, +0.008031f, +0.008727f, -0.003437f, +0.035266f, +0.008580f, -0.006749f, +0.017801f, -0.031124f, +0.030220f, + +0.003730f, +0.025939f, +0.011688f, +0.002086f, -0.013394f, +0.007664f, +0.011508f, -0.008701f, +0.009259f, +0.011878f, + -0.022319f, +0.014831f, +0.006191f, +0.002128f, +0.002687f, -0.000518f, -0.001471f, -0.003776f, +0.011374f, +0.004472f, + +0.010686f, +0.001867f, -0.008071f, -0.011070f, -0.003510f, +0.004486f, -0.002559f, -0.003065f, -0.000891f, +0.004792f, + -0.005073f, +0.002350f, -0.004072f, -0.000961f, -0.002099f, +0.002618f, -0.006060f, -0.004480f, +0.010282f, -0.000157f, + -0.001673f, +0.002057f, +0.000885f, +0.005245f, -0.004297f, +0.003601f, +0.003325f, -0.000687f, -0.002684f, -0.002509f, + +0.002882f, +0.003902f, +0.001359f, -0.000534f, -0.001329f, -0.005655f, +0.006933f, +0.001352f, -0.001715f, +0.001157f, + +0.000902f, +0.002838f, +0.002377f, -0.000226f, +0.002457f, -0.001397f + } + }, + { + { + +0.001490f, -0.036543f, -0.018651f, +0.026680f, -0.014126f, +0.004473f, +0.006037f, -0.004775f, -0.001563f, -0.011962f, + +0.043043f, -0.010558f, -0.007322f, +0.022251f, +0.016700f, -0.007056f, -0.002858f, +0.018025f, -0.016875f, -0.040479f, + -0.009633f, -0.009598f, -0.000185f, -0.017888f, +0.052051f, +0.005638f, -0.015817f, -0.012438f, -0.018122f, -0.031023f, + +0.000515f, +0.006713f, -0.007392f, -0.007505f, +0.011799f, +0.011754f, +0.009556f, -0.017062f, -0.010534f, -0.001280f, + -0.008502f, -0.009861f, -0.000502f, +0.004881f, -0.003539f, -0.020424f, -0.009932f, +0.003728f, -0.004404f, +0.012368f, + +0.000825f, -0.004388f, -0.006116f, -0.005268f, +0.001140f, +0.006374f, +0.000076f, +0.007678f, +0.002010f, -0.003218f, + -0.004709f, -0.003108f, +0.011040f, +0.001819f, +0.001986f, -0.008524f, +0.001340f, +0.003211f, -0.007241f, +0.002670f, + -0.004767f, +0.001550f, -0.001486f, -0.002581f, +0.001176f, +0.001121f, -0.004245f, +0.001734f, -0.002698f, +0.001488f, + -0.006649f, -0.001511f, -0.000101f, +0.003546f, +0.003660f, -0.002594f, -0.000100f, +0.000191f, -0.002027f, +0.000150f, + -0.002047f, +0.000664f, +0.002177f, +0.000739f, +0.000726f, +0.000401f + }, + { + +0.015552f, -0.378485f, -0.102404f, -0.067299f, -0.010074f, -0.013440f, -0.002604f, +0.001793f, -0.017852f, -0.022518f, + -0.017950f, +0.024873f, +0.004558f, -0.007847f, -0.003619f, -0.010563f, -0.022249f, +0.004331f, +0.012472f, -0.020506f, + +0.008484f, -0.007507f, -0.018126f, -0.031087f, +0.011728f, -0.004619f, +0.005645f, +0.012223f, +0.010415f, +0.002070f, + +0.005689f, -0.004355f, -0.006872f, -0.001749f, -0.013835f, +0.006277f, +0.000061f, -0.008316f, +0.005133f, -0.020442f, + -0.007850f, -0.001719f, +0.005959f, -0.010599f, -0.004060f, -0.003533f, -0.002536f, -0.015435f, -0.005487f, +0.009717f, + +0.010158f, -0.003179f, +0.000384f, -0.005295f, -0.008569f, +0.013496f, +0.002344f, +0.003017f, +0.002112f, -0.000597f, + +0.002306f, -0.009256f, -0.005284f, -0.005146f, +0.001905f, -0.004983f, +0.004083f, -0.000379f, -0.007336f, +0.000054f, + +0.000168f, +0.005906f, -0.003113f, +0.002449f, -0.000387f, -0.000688f, -0.003634f, -0.001876f, -0.005173f, -0.002529f, + +0.000347f, +0.004073f, -0.002422f, -0.001083f, +0.002266f, +0.001916f, -0.001313f, +0.001131f, -0.000777f, +0.003646f, + -0.000757f, -0.000319f, +0.000131f, +0.001553f, +0.001189f, +0.001064f + }, + { + +0.007522f, -0.144942f, -0.018174f, +0.004985f, -0.033115f, -0.009662f, -0.004489f, -0.001101f, +0.008707f, +0.015920f, + +0.024704f, -0.029257f, -0.000251f, +0.011285f, -0.018610f, -0.005512f, +0.008993f, +0.027445f, -0.024503f, +0.021493f, + +0.001944f, +0.007896f, +0.041314f, -0.003185f, +0.011159f, +0.010022f, -0.014232f, -0.008501f, +0.005764f, +0.012095f, + +0.019009f, -0.012935f, -0.010109f, +0.001820f, -0.001246f, +0.007009f, +0.011315f, -0.008956f, -0.000323f, +0.003821f, + -0.002091f, +0.002615f, -0.008131f, -0.007135f, -0.001931f, -0.002966f, -0.011211f, -0.014177f, +0.000768f, -0.000177f, + +0.003521f, -0.013853f, -0.002258f, -0.002884f, +0.002429f, -0.006246f, -0.004767f, +0.006367f, -0.004168f, -0.007428f, + -0.002224f, -0.004918f, +0.004195f, -0.010085f, -0.004806f, -0.000031f, +0.002522f, +0.004336f, +0.001648f, -0.004197f, + +0.000286f, +0.002509f, +0.000368f, +0.001830f, -0.001519f, -0.003869f, +0.002741f, -0.000167f, -0.001672f, +0.002536f, + +0.001091f, -0.001610f, -0.000777f, -0.001160f, +0.001010f, -0.000331f, -0.001323f, -0.002262f, +0.000755f, +0.001119f, + -0.002234f, -0.000363f, +0.000456f, -0.000254f, +0.000648f, -0.000899f + }, + { + +0.003854f, -0.005241f, -0.013175f, -0.007808f, +0.003148f, +0.000408f, -0.002415f, +0.003183f, +0.000263f, -0.012744f, + +0.001433f, +0.004313f, +0.007752f, +0.003989f, +0.102062f, +0.051866f, -0.070870f, +0.036053f, +0.051680f, +0.034127f, + +0.022203f, -0.004150f, +0.008251f, -0.004006f, -0.019668f, +0.018883f, -0.039495f, +0.007470f, +0.023762f, -0.023604f, + +0.043474f, -0.001595f, -0.012465f, -0.009035f, -0.010784f, -0.021719f, +0.032170f, +0.007994f, +0.003807f, +0.008424f, + -0.005822f, +0.008939f, -0.001193f, +0.010405f, -0.003781f, -0.007847f, +0.015873f, +0.004424f, -0.002354f, +0.015194f, + -0.001625f, -0.003201f, +0.002808f, +0.002961f, +0.003349f, +0.000085f, -0.006784f, -0.003837f, +0.012849f, +0.000854f, + +0.005928f, -0.007897f, +0.003430f, +0.001301f, +0.002018f, -0.001183f, +0.004093f, +0.002773f, -0.003869f, +0.000563f, + +0.007178f, -0.005208f, +0.001732f, +0.003738f, +0.002680f, -0.001855f, -0.001400f, +0.000508f, -0.000781f, -0.001458f, + +0.000588f, -0.000313f, +0.001698f, -0.000793f, +0.001354f, -0.000708f, -0.002268f, +0.002992f, -0.000434f, +0.001110f, + -0.000584f, -0.000402f, +0.000610f, +0.001037f, -0.001852f, +0.000137f + }, + { + -0.067128f, -0.465579f, +0.061759f, +0.005608f, -0.000022f, +0.000399f, +0.006838f, +0.001813f, +0.002215f, -0.001673f, + +0.003948f, +0.015045f, -0.022695f, +0.010291f, -0.001357f, +0.006394f, -0.011750f, -0.044349f, +0.001180f, +0.011157f, + +0.000193f, -0.010938f, -0.016274f, +0.011603f, -0.016720f, +0.020661f, +0.015867f, +0.022511f, +0.033724f, +0.013471f, + -0.021633f, -0.029648f, +0.003135f, +0.011566f, -0.017397f, -0.003380f, +0.046684f, +0.009043f, +0.008059f, -0.018766f, + -0.011714f, -0.005363f, -0.007319f, +0.011482f, +0.006332f, -0.004958f, +0.009601f, +0.010964f, -0.009122f, -0.005417f, + -0.003740f, +0.002609f, -0.007223f, -0.002994f, -0.003428f, -0.005770f, +0.007055f, -0.004647f, -0.002313f, +0.003690f, + -0.002362f, -0.005370f, +0.001026f, +0.000255f, +0.000674f, +0.002573f, +0.000876f, -0.004332f, -0.000332f, +0.000032f, + +0.002557f, -0.005684f, +0.002434f, -0.007306f, +0.001154f, +0.006011f, -0.001279f, +0.004216f, +0.000226f, +0.001694f, + +0.000004f, -0.002571f, +0.004268f, -0.001379f, -0.000789f, +0.000202f, -0.001548f, -0.000281f, +0.001244f, +0.003345f, + +0.000167f, -0.000346f, -0.002797f, -0.001173f, +0.000560f, -0.000297f + }, + { + -0.000574f, -0.031017f, +0.009454f, -0.010840f, -0.002498f, -0.000062f, +0.000526f, -0.000723f, -0.010353f, -0.002803f, + +0.004587f, +0.006964f, -0.012954f, +0.035073f, +0.008731f, -0.012748f, +0.060099f, +0.000682f, -0.002743f, +0.042986f, + +0.005659f, +0.003988f, -0.002731f, -0.014590f, -0.013506f, +0.019642f, +0.003021f, +0.007642f, +0.001523f, +0.056445f, + +0.028378f, -0.011625f, -0.023836f, -0.001185f, +0.008403f, -0.008041f, +0.019030f, +0.025107f, +0.003460f, -0.001023f, + +0.011112f, +0.013143f, +0.002898f, -0.009316f, -0.006720f, -0.001278f, -0.003984f, -0.006134f, -0.020544f, -0.012861f, + +0.001222f, +0.007288f, +0.000109f, +0.001827f, +0.003066f, -0.012256f, -0.002219f, -0.002550f, -0.001679f, +0.001670f, + -0.001533f, +0.002303f, +0.003293f, -0.002649f, +0.001498f, +0.001813f, +0.003326f, +0.000929f, -0.002871f, +0.002058f, + +0.001423f, -0.004070f, -0.001664f, +0.003091f, -0.004938f, +0.001682f, +0.004651f, +0.005459f, -0.000132f, +0.000316f, + -0.000139f, +0.002000f, -0.005189f, +0.001000f, -0.002929f, -0.002889f, +0.001642f, +0.000308f, -0.000839f, +0.001921f, + +0.002101f, -0.002121f, -0.003275f, +0.001881f, -0.001449f, +0.000394f + }, + { + -0.032266f, -0.728063f, +0.039001f, +0.054079f, +0.001359f, -0.000431f, -0.017312f, -0.013230f, +0.015502f, -0.019371f, + +0.003024f, -0.027266f, -0.010564f, -0.003881f, +0.014361f, +0.006221f, -0.033908f, +0.007074f, -0.018362f, -0.020653f, + -0.017588f, -0.000219f, +0.000825f, -0.008154f, +0.008086f, -0.004217f, +0.004431f, -0.005062f, -0.011863f, +0.001413f, + -0.011293f, -0.000307f, +0.002630f, +0.000200f, -0.000961f, +0.001740f, -0.020219f, -0.019026f, -0.018662f, +0.006172f, + -0.005067f, +0.005663f, +0.000157f, -0.000492f, +0.011078f, -0.006580f, -0.002992f, -0.009074f, -0.005886f, +0.004997f, + -0.005910f, +0.004636f, -0.003054f, +0.011848f, -0.001923f, +0.004415f, +0.003685f, -0.000442f, +0.010519f, +0.001207f, + +0.006478f, +0.000255f, +0.001579f, +0.002063f, +0.004468f, -0.009908f, -0.000985f, +0.002278f, +0.001835f, +0.004192f, + -0.002636f, +0.002565f, -0.001147f, +0.002752f, +0.001554f, +0.000893f, +0.002065f, +0.003068f, -0.001678f, -0.000457f, + +0.000045f, +0.000490f, -0.000996f, -0.000919f, +0.001674f, -0.000878f, -0.002665f, -0.000391f, +0.000832f, +0.001644f, + -0.002914f, +0.003956f, -0.000583f, +0.000598f, -0.000912f, -0.001112f + }, + { + -0.000740f, -0.034338f, -0.008842f, +0.000111f, -0.004942f, +0.001034f, -0.001214f, -0.005156f, -0.003495f, -0.004614f, + +0.005968f, -0.003165f, -0.017248f, -0.026256f, +0.046575f, +0.011302f, -0.005139f, -0.002657f, +0.001176f, +0.040530f, + -0.008457f, -0.012067f, -0.004362f, -0.022631f, -0.003285f, +0.023217f, +0.012553f, +0.009948f, -0.020445f, +0.032026f, + -0.027655f, -0.010455f, -0.015766f, -0.002930f, -0.013561f, +0.017069f, -0.008500f, +0.008081f, +0.010308f, +0.001066f, + +0.009170f, +0.001426f, +0.001172f, -0.010373f, -0.019706f, +0.003617f, +0.004187f, +0.012948f, -0.009986f, +0.001924f, + -0.004828f, -0.009962f, +0.006941f, -0.008023f, +0.014825f, +0.001677f, -0.006555f, +0.002641f, -0.010104f, +0.003697f, + +0.002696f, -0.002969f, +0.000287f, +0.000343f, -0.008146f, +0.000044f, -0.000959f, +0.000046f, -0.002633f, -0.001639f, + -0.003473f, -0.003790f, +0.000143f, -0.002909f, -0.001308f, +0.001471f, -0.000495f, +0.003764f, -0.000956f, -0.000102f, + +0.002893f, -0.002593f, +0.003960f, +0.000278f, -0.004684f, +0.004760f, -0.002488f, +0.000357f, +0.000196f, -0.001109f, + +0.001269f, -0.001730f, -0.000848f, +0.000870f, -0.000765f, +0.002826f + }, + { + -0.141774f, -0.064875f, +0.052014f, +0.042377f, -0.008425f, +0.006794f, -0.013825f, +0.006107f, -0.012550f, -0.002393f, + -0.013868f, -0.003845f, +0.002015f, +0.017512f, -0.009116f, -0.016320f, -0.004877f, +0.005508f, +0.003675f, -0.008854f, + +0.013963f, -0.013822f, +0.001920f, -0.009948f, -0.003826f, +0.002598f, -0.001077f, +0.018473f, +0.008935f, +0.001599f, + -0.008009f, +0.017299f, -0.009075f, -0.013506f, -0.013544f, +0.021491f, -0.003994f, -0.004555f, -0.000135f, +0.022452f, + +0.013749f, +0.007017f, -0.007254f, -0.006498f, +0.004796f, +0.003486f, +0.008574f, +0.010752f, +0.008225f, +0.002308f, + -0.011228f, +0.000998f, +0.004567f, +0.010238f, +0.008050f, +0.005841f, -0.005674f, +0.006528f, +0.001437f, -0.002654f, + -0.000322f, +0.004360f, -0.003560f, +0.005091f, +0.002609f, +0.000212f, -0.001356f, +0.005201f, -0.001810f, -0.002978f, + +0.000386f, +0.000602f, -0.000774f, +0.002745f, +0.001859f, -0.000863f, +0.002524f, +0.000165f, -0.000407f, -0.001541f, + +0.004984f, +0.001408f, -0.000131f, +0.000104f, +0.001405f, +0.000048f, -0.001738f, -0.002496f, +0.002553f, +0.002087f, + -0.000331f, -0.002298f, +0.000594f, -0.001263f, +0.001661f, -0.000031f + }, + { + +0.002724f, +0.099670f, -0.042180f, -0.011262f, -0.008584f, -0.002469f, +0.010393f, +0.000714f, +0.011491f, -0.010846f, + +0.008161f, +0.017635f, +0.017529f, -0.029359f, +0.054432f, +0.012873f, +0.015576f, +0.013739f, +0.001630f, +0.018010f, + -0.005513f, -0.007676f, +0.020887f, -0.005733f, +0.016629f, +0.012219f, +0.029112f, -0.002160f, +0.018263f, +0.007881f, + +0.010048f, -0.003186f, -0.012910f, +0.000751f, -0.021142f, -0.000402f, -0.007019f, +0.005920f, +0.004428f, -0.003315f, + -0.014377f, +0.004460f, +0.013567f, -0.007498f, -0.004350f, +0.014707f, +0.000217f, +0.007190f, -0.005803f, -0.007808f, + -0.002052f, +0.002993f, +0.002631f, -0.001486f, +0.001401f, -0.002365f, +0.002143f, +0.002024f, +0.005093f, +0.008879f, + -0.004029f, -0.001626f, -0.002789f, -0.008650f, +0.004912f, +0.002184f, -0.003606f, -0.002733f, +0.006044f, +0.001990f, + -0.006523f, -0.001308f, +0.001239f, +0.008324f, -0.001767f, +0.000944f, +0.005011f, +0.001962f, -0.000038f, +0.000884f, + +0.000095f, -0.002056f, +0.000481f, -0.001540f, -0.003170f, -0.002528f, +0.001096f, +0.000339f, +0.000324f, -0.002253f, + +0.001720f, +0.000867f, -0.000367f, -0.000240f, +0.000863f, +0.000546f + }, + { + -0.049335f, -0.304949f, +0.087068f, -0.053716f, +0.009835f, -0.049000f, +0.028036f, +0.036952f, -0.004523f, -0.032410f, + +0.018595f, -0.001032f, -0.005186f, -0.010896f, +0.029262f, +0.013436f, +0.022618f, -0.007932f, +0.005301f, -0.032899f, + -0.015484f, -0.021765f, -0.003623f, +0.005752f, -0.016521f, +0.006383f, +0.005921f, +0.008670f, -0.009679f, -0.004360f, + +0.012228f, -0.006647f, +0.003113f, -0.020570f, -0.007320f, +0.012184f, -0.000325f, +0.008362f, -0.014359f, -0.005425f, + -0.007917f, -0.001417f, +0.010929f, +0.003057f, +0.017087f, +0.002040f, +0.000102f, +0.011652f, +0.001381f, +0.008855f, + -0.003300f, +0.003350f, -0.000205f, -0.003700f, -0.002683f, -0.003583f, +0.003283f, -0.001511f, +0.004643f, +0.003958f, + +0.008700f, +0.002812f, +0.001034f, -0.004703f, -0.000684f, -0.000648f, -0.001923f, -0.002253f, -0.002085f, -0.001493f, + +0.000779f, +0.001961f, +0.000781f, -0.001991f, +0.000528f, +0.000658f, +0.003164f, +0.001875f, -0.001898f, +0.000523f, + -0.001044f, -0.001388f, +0.001485f, -0.003632f, +0.002269f, -0.002892f, -0.001862f, +0.001037f, -0.002233f, +0.000192f, + -0.000473f, -0.002014f, +0.001085f, -0.001504f, -0.002091f, -0.001108f + }, + { + +0.006491f, -0.020018f, -0.029569f, +0.013315f, -0.020737f, +0.009196f, -0.025093f, +0.012979f, +0.006806f, -0.001067f, + -0.001035f, -0.003120f, -0.006192f, -0.023764f, -0.030949f, +0.002676f, +0.054955f, -0.032237f, +0.019735f, +0.006364f, + -0.015698f, -0.061885f, +0.019872f, -0.000828f, +0.005798f, +0.016195f, -0.001403f, +0.006635f, +0.002183f, -0.018981f, + +0.020949f, -0.039240f, +0.004778f, +0.006990f, -0.003142f, -0.000674f, +0.011265f, -0.003982f, +0.017556f, -0.011138f, + -0.000692f, +0.006897f, -0.006664f, +0.004917f, -0.006844f, -0.003394f, +0.008941f, -0.000471f, +0.001405f, -0.004794f, + -0.000234f, +0.000899f, -0.001134f, +0.001138f, +0.003738f, +0.000220f, -0.004814f, +0.002471f, -0.000462f, -0.001928f, + -0.007922f, +0.004887f, -0.004100f, -0.012486f, +0.000612f, -0.000327f, +0.006222f, +0.000748f, +0.001671f, +0.001147f, + +0.004613f, -0.006393f, -0.000825f, -0.003218f, -0.007784f, +0.002281f, +0.005081f, +0.000432f, -0.000614f, -0.001189f, + -0.001582f, -0.001782f, -0.000503f, -0.002332f, -0.003057f, -0.003792f, -0.004528f, +0.000097f, -0.002558f, -0.001032f, + +0.003399f, +0.000283f, +0.001974f, -0.000755f, +0.000501f, +0.000768f + }, + { + +0.040617f, +0.473019f, +0.008585f, +0.036434f, +0.053918f, +0.027498f, +0.058263f, +0.045043f, -0.019841f, +0.040506f, + +0.017397f, +0.001694f, +0.000004f, -0.003507f, +0.010359f, +0.014151f, +0.001643f, -0.022722f, -0.030094f, -0.024081f, + -0.006798f, -0.018826f, +0.014653f, -0.001704f, +0.003525f, +0.002121f, -0.018648f, -0.023548f, +0.008073f, +0.003875f, + +0.001670f, +0.013724f, +0.015636f, -0.006834f, -0.005519f, +0.020757f, +0.002470f, +0.009263f, -0.007087f, -0.004182f, + +0.011920f, +0.010793f, -0.000071f, +0.010384f, +0.006178f, -0.009365f, -0.002190f, -0.022847f, -0.012858f, -0.013635f, + -0.007388f, -0.015467f, +0.008254f, -0.001273f, +0.008203f, +0.007791f, +0.004526f, -0.003418f, -0.008342f, -0.003466f, + +0.002383f, -0.001731f, +0.001551f, +0.001059f, -0.000555f, -0.006971f, -0.007005f, -0.001537f, -0.002241f, +0.001524f, + -0.005259f, +0.000735f, -0.004400f, -0.002580f, +0.001181f, +0.003909f, +0.002277f, -0.005005f, -0.000239f, -0.005072f, + +0.001654f, +0.000025f, -0.001549f, +0.001957f, -0.001930f, -0.002575f, +0.000715f, -0.002738f, +0.001539f, -0.003409f, + -0.001677f, -0.001352f, -0.001541f, +0.002014f, -0.000295f, -0.001254f + }, + { + +0.003317f, -0.132928f, +0.000903f, -0.011154f, +0.001483f, -0.002953f, -0.017087f, -0.000607f, +0.006278f, +0.013081f, + +0.009324f, +0.031538f, -0.014726f, +0.020458f, +0.088671f, +0.045601f, -0.038899f, +0.021677f, +0.024010f, -0.040746f, + -0.036484f, -0.023664f, -0.025068f, -0.018151f, -0.028947f, -0.006135f, -0.031233f, -0.010575f, +0.007043f, -0.015425f, + +0.023733f, -0.005361f, +0.003268f, +0.007077f, +0.002618f, -0.005717f, +0.002402f, -0.000122f, +0.003330f, +0.003424f, + +0.008736f, -0.003671f, +0.000713f, -0.013052f, -0.003900f, +0.016696f, -0.005932f, +0.011102f, +0.003935f, -0.000803f, + -0.003526f, +0.004902f, +0.004571f, -0.002649f, -0.012804f, +0.000645f, +0.006065f, +0.001252f, -0.004793f, +0.008931f, + -0.003751f, -0.001193f, +0.000198f, -0.004610f, -0.005504f, +0.000289f, +0.000753f, +0.001587f, +0.001623f, -0.003465f, + -0.004018f, -0.007685f, +0.000207f, +0.001090f, +0.001383f, -0.002263f, -0.001331f, -0.001258f, +0.003937f, +0.004702f, + -0.000791f, +0.000671f, +0.002484f, +0.003254f, -0.000210f, -0.001715f, +0.000080f, -0.000043f, +0.004425f, +0.001555f, + +0.001673f, +0.000597f, +0.001404f, -0.000291f, +0.000538f, +0.001686f + }, + { + +0.064501f, +0.162786f, -0.038154f, +0.067782f, +0.042634f, +0.011483f, +0.024196f, +0.013688f, +0.002656f, +0.016277f, + -0.023351f, +0.003003f, +0.011512f, +0.006780f, +0.041301f, -0.013537f, -0.010934f, -0.018638f, -0.041193f, +0.004134f, + -0.001390f, -0.000179f, -0.007508f, -0.012175f, +0.023614f, +0.006242f, -0.011806f, +0.008162f, -0.004855f, +0.039082f, + -0.015074f, +0.013939f, +0.012162f, +0.012437f, -0.010671f, -0.009957f, -0.013322f, -0.008178f, +0.010317f, -0.004585f, + -0.014961f, +0.009504f, +0.005609f, +0.009615f, -0.012025f, -0.001929f, +0.000637f, +0.003939f, +0.002070f, -0.011520f, + +0.005692f, +0.001594f, +0.000836f, +0.001921f, +0.003060f, +0.005155f, -0.000402f, -0.004019f, -0.004983f, -0.001847f, + -0.002723f, +0.007375f, -0.002153f, -0.003129f, -0.004705f, +0.002790f, -0.001791f, +0.001472f, +0.009699f, -0.003214f, + -0.003092f, -0.002697f, -0.003051f, +0.002460f, -0.004964f, +0.003579f, +0.003100f, -0.000896f, -0.001925f, -0.004918f, + -0.002152f, +0.003305f, -0.000303f, +0.001254f, +0.002116f, -0.005202f, +0.004960f, +0.000009f, -0.002276f, +0.000372f, + -0.000202f, -0.001001f, -0.000895f, -0.002197f, +0.002316f, +0.000281f + } + }, + { + { + -0.002409f, -0.043268f, -0.000837f, -0.021804f, +0.021078f, +0.003336f, -0.003907f, +0.003277f, -0.007606f, +0.005754f, + +0.010194f, +0.014534f, +0.004834f, +0.007950f, +0.021007f, -0.050579f, +0.008749f, +0.022643f, +0.002474f, -0.028729f, + -0.050781f, +0.015195f, -0.013374f, +0.001838f, +0.036621f, +0.006772f, -0.006804f, -0.030664f, -0.000145f, -0.023128f, + -0.011420f, -0.011592f, -0.013280f, -0.003781f, +0.012759f, +0.012716f, +0.009518f, -0.008354f, -0.016620f, -0.002016f, + -0.001760f, -0.012975f, -0.004057f, +0.002683f, -0.000801f, -0.011670f, -0.014894f, -0.000940f, -0.002718f, +0.014348f, + +0.008387f, -0.012961f, -0.001499f, -0.006405f, +0.003717f, +0.007951f, +0.001026f, -0.000848f, +0.003860f, -0.004171f, + -0.003834f, +0.003431f, +0.005548f, +0.002119f, +0.004560f, -0.004085f, -0.001168f, +0.001533f, -0.003545f, -0.002541f, + -0.000704f, +0.000100f, -0.000940f, -0.001270f, -0.002161f, -0.001125f, -0.000233f, -0.000080f, -0.003554f, -0.000361f, + -0.004155f, -0.001295f, -0.000608f, +0.004141f, +0.003319f, -0.003329f, -0.000829f, +0.000094f, -0.000541f, -0.000936f, + +0.000345f, +0.000628f, +0.001249f, +0.000947f, +0.000307f, +0.000658f + }, + { + -0.009906f, -0.425455f, -0.009219f, -0.065060f, -0.045708f, +0.005079f, -0.000163f, -0.030680f, +0.017595f, -0.014208f, + -0.039440f, +0.012564f, +0.011949f, -0.011636f, -0.020988f, -0.002910f, -0.017015f, +0.013362f, -0.001871f, -0.008914f, + -0.017215f, +0.011819f, -0.011271f, -0.023385f, +0.003856f, -0.004703f, -0.001470f, +0.010002f, +0.007287f, +0.013816f, + +0.003637f, -0.007833f, -0.001314f, -0.017588f, +0.004656f, -0.002737f, -0.004976f, +0.002363f, -0.000054f, -0.015990f, + -0.007796f, -0.002326f, +0.000564f, -0.002293f, -0.000294f, -0.006573f, -0.011531f, -0.015667f, +0.000684f, +0.003729f, + +0.008746f, +0.004763f, +0.001523f, -0.006869f, -0.004486f, +0.008452f, +0.006240f, +0.000000f, +0.004332f, -0.001337f, + -0.002636f, -0.003341f, -0.005250f, -0.003837f, -0.004148f, -0.000467f, -0.001551f, +0.001676f, -0.005766f, -0.001493f, + +0.003444f, +0.001476f, -0.002542f, +0.002101f, -0.002178f, +0.000795f, -0.002006f, -0.001897f, -0.004073f, -0.001140f, + -0.002966f, +0.002193f, +0.000722f, -0.000951f, +0.001439f, +0.001072f, +0.000769f, +0.000067f, +0.000354f, +0.001471f, + -0.001295f, -0.000528f, +0.001541f, +0.001183f, +0.001681f, +0.000711f + }, + { + -0.005462f, -0.101151f, -0.034630f, -0.046397f, +0.007588f, -0.004295f, -0.009269f, +0.006016f, +0.000657f, +0.003437f, + +0.027697f, -0.004956f, -0.030750f, +0.020033f, -0.011498f, -0.011066f, +0.014803f, +0.004206f, -0.015419f, +0.023839f, + +0.000823f, +0.013036f, +0.030206f, -0.001424f, +0.011023f, +0.013118f, -0.006043f, -0.012298f, +0.002170f, +0.018981f, + +0.008522f, -0.008110f, +0.006997f, -0.008992f, +0.003981f, +0.009357f, +0.003202f, +0.000119f, -0.006075f, -0.009224f, + +0.014713f, +0.003714f, -0.007502f, -0.011637f, -0.002760f, +0.000617f, -0.013728f, -0.008850f, -0.002853f, +0.003309f, + -0.003250f, -0.006519f, -0.000844f, +0.000319f, +0.002326f, -0.011046f, -0.001455f, +0.000908f, -0.003315f, -0.006153f, + -0.005449f, -0.000512f, -0.001603f, -0.004617f, -0.005766f, +0.002409f, -0.000290f, +0.001807f, +0.000967f, +0.002409f, + -0.000522f, +0.000367f, +0.002797f, +0.002144f, -0.002082f, -0.005164f, +0.004716f, +0.000417f, -0.000647f, +0.001376f, + +0.000522f, +0.000738f, -0.001759f, -0.002206f, -0.000009f, -0.000839f, -0.003094f, +0.000629f, -0.000520f, +0.000182f, + -0.000691f, -0.000388f, -0.000607f, -0.000363f, +0.000135f, -0.000451f + }, + { + -0.002664f, -0.029099f, +0.010900f, +0.003282f, -0.004181f, +0.001481f, -0.001428f, +0.001961f, +0.002318f, -0.006184f, + -0.002268f, +0.004781f, -0.009906f, +0.019019f, +0.105888f, +0.001351f, -0.016434f, +0.026064f, +0.059357f, +0.025707f, + +0.012347f, +0.023860f, -0.004299f, +0.001193f, +0.006971f, -0.032871f, +0.000757f, +0.025362f, -0.001665f, -0.002047f, + +0.011338f, +0.019354f, -0.011859f, -0.019849f, -0.013433f, +0.009512f, +0.008298f, +0.022459f, +0.007485f, -0.003692f, + +0.000531f, -0.005783f, +0.002203f, +0.007991f, +0.007351f, +0.000713f, +0.010625f, -0.003041f, +0.006226f, +0.009263f, + -0.000606f, -0.002723f, +0.004210f, +0.004237f, -0.000621f, -0.004127f, -0.004602f, +0.004049f, +0.002298f, +0.005009f, + +0.004825f, +0.002355f, +0.000473f, -0.002144f, +0.004310f, -0.004850f, +0.006829f, +0.000165f, +0.000811f, +0.000266f, + +0.002724f, -0.001852f, +0.002894f, +0.000697f, +0.000817f, +0.001059f, +0.001065f, -0.000069f, -0.000546f, -0.002541f, + +0.001783f, -0.000970f, -0.001334f, +0.001638f, +0.001374f, -0.002654f, +0.000040f, +0.002096f, +0.000850f, -0.000686f, + -0.001290f, +0.000125f, +0.001606f, -0.000593f, +0.000302f, -0.001216f + }, + { + +0.026684f, -0.437979f, -0.055388f, -0.017904f, +0.018503f, +0.007291f, -0.001253f, -0.004771f, +0.018291f, +0.004182f, + +0.017410f, -0.027357f, -0.000233f, -0.000658f, +0.009680f, -0.018093f, +0.001561f, -0.041348f, +0.003299f, +0.007387f, + -0.001270f, +0.017516f, -0.033140f, -0.013388f, +0.001922f, +0.000218f, +0.027747f, +0.053664f, +0.005920f, +0.003678f, + -0.014750f, -0.022877f, +0.006649f, +0.006565f, -0.018447f, +0.000648f, +0.014339f, +0.018671f, +0.017323f, -0.013286f, + -0.007226f, -0.005307f, +0.008458f, -0.006456f, -0.001625f, +0.009949f, +0.009120f, -0.002680f, +0.000151f, -0.002993f, + -0.002966f, -0.006268f, -0.003415f, -0.005846f, +0.001506f, -0.000259f, -0.000644f, -0.004624f, -0.000954f, +0.004511f, + -0.002300f, -0.005805f, +0.000577f, -0.002535f, +0.001416f, +0.000758f, -0.000291f, -0.001519f, -0.002162f, +0.002265f, + -0.000432f, -0.002808f, -0.002353f, -0.002583f, +0.002218f, +0.002993f, +0.002527f, +0.000606f, +0.001391f, +0.000897f, + -0.000016f, -0.001238f, +0.002098f, -0.000363f, +0.001791f, -0.003268f, -0.001766f, +0.000500f, +0.001522f, +0.003116f, + +0.000452f, -0.001946f, -0.002379f, -0.000041f, -0.000822f, +0.000417f + }, + { + -0.001389f, -0.021550f, +0.002172f, -0.015177f, -0.000359f, +0.000319f, +0.000466f, +0.001474f, -0.005473f, -0.001484f, + -0.002180f, +0.000762f, -0.007418f, +0.023905f, +0.075064f, -0.022182f, +0.011133f, +0.002903f, -0.001654f, +0.026774f, + +0.014517f, -0.004375f, +0.020426f, -0.013838f, -0.020935f, +0.020072f, +0.028322f, -0.007384f, +0.028124f, +0.016301f, + +0.021270f, -0.014350f, -0.012324f, +0.011125f, -0.003280f, -0.019702f, +0.024785f, +0.020897f, +0.009689f, +0.000044f, + +0.012424f, +0.005149f, +0.010532f, -0.006643f, -0.006931f, -0.004233f, -0.003576f, -0.009575f, -0.013275f, -0.012330f, + +0.001184f, +0.006804f, +0.005446f, -0.000831f, +0.000993f, -0.001853f, -0.009412f, +0.000881f, -0.007961f, +0.001867f, + +0.000985f, +0.004110f, +0.002699f, -0.001078f, +0.002610f, +0.000619f, +0.002571f, -0.002737f, -0.000806f, +0.003827f, + -0.002239f, -0.002505f, +0.000644f, +0.000475f, -0.001387f, +0.002083f, +0.004282f, +0.003656f, +0.001228f, -0.001470f, + +0.003066f, -0.002014f, -0.002335f, -0.000812f, -0.002912f, -0.001546f, +0.000511f, +0.000693f, -0.000078f, +0.001050f, + +0.001205f, -0.000424f, -0.002319f, -0.000035f, +0.000333f, -0.000696f + }, + { + -0.023276f, -0.611765f, -0.075708f, +0.029662f, +0.043210f, -0.006824f, -0.001197f, -0.022047f, +0.011409f, -0.014189f, + -0.008889f, -0.020879f, -0.000265f, -0.018306f, +0.015260f, -0.005440f, -0.024199f, -0.007253f, +0.002295f, -0.033721f, + -0.003336f, -0.000600f, -0.000785f, -0.004007f, +0.001518f, -0.004970f, +0.005127f, -0.008460f, -0.010995f, -0.003065f, + -0.000746f, +0.010170f, -0.014860f, +0.002925f, +0.008008f, -0.002925f, -0.014759f, -0.013627f, -0.026016f, -0.004479f, + -0.005134f, +0.005865f, -0.001716f, -0.005254f, +0.012841f, +0.006173f, -0.009841f, -0.006101f, +0.000548f, +0.001528f, + -0.005752f, +0.001380f, +0.006929f, -0.003971f, +0.009033f, +0.002502f, +0.006597f, +0.000235f, +0.005602f, +0.006760f, + -0.002180f, +0.001724f, +0.004590f, +0.001493f, -0.001496f, -0.001955f, -0.000605f, -0.000726f, -0.002530f, +0.004362f, + -0.000215f, +0.000617f, +0.001935f, +0.001990f, +0.000898f, -0.000939f, +0.001640f, +0.002738f, -0.000262f, -0.000818f, + +0.001572f, -0.000735f, +0.001710f, -0.000720f, -0.000012f, +0.000097f, -0.003241f, -0.000634f, +0.000322f, -0.000132f, + +0.001136f, +0.002170f, +0.000858f, -0.000265f, -0.000444f, -0.001333f + }, + { + -0.002302f, -0.014503f, -0.019689f, -0.010469f, +0.000880f, -0.000681f, -0.001493f, +0.000615f, -0.012107f, -0.001069f, + -0.003184f, +0.000060f, -0.011956f, -0.023309f, +0.064237f, -0.050436f, +0.015479f, +0.030286f, -0.002215f, +0.001184f, + -0.010984f, +0.012986f, -0.002952f, -0.012744f, +0.004772f, -0.001077f, +0.004852f, +0.041636f, -0.042499f, +0.031905f, + -0.024333f, -0.006079f, -0.026810f, -0.018759f, +0.020464f, +0.003003f, +0.005182f, -0.003737f, +0.010290f, +0.008081f, + +0.012382f, +0.002511f, -0.001763f, -0.019275f, -0.016976f, +0.007840f, +0.006027f, +0.004785f, -0.004800f, +0.004778f, + -0.003893f, -0.005899f, -0.001971f, +0.002722f, +0.006995f, -0.001256f, -0.002578f, -0.001984f, -0.003511f, +0.000638f, + +0.004959f, -0.002009f, -0.000531f, -0.000373f, -0.004082f, -0.004995f, +0.000668f, +0.004121f, -0.005083f, -0.001863f, + -0.002317f, -0.001554f, -0.001793f, +0.000342f, -0.002548f, -0.000036f, +0.000224f, +0.003447f, -0.001896f, +0.001118f, + +0.000834f, -0.000334f, +0.001781f, -0.000029f, +0.001159f, +0.000666f, -0.000408f, -0.001790f, +0.001456f, +0.000294f, + +0.000349f, -0.001343f, -0.001820f, -0.000241f, +0.000547f, +0.001803f + }, + { + +0.103698f, -0.243994f, -0.089203f, +0.007699f, +0.055970f, -0.002233f, +0.000983f, -0.019505f, -0.007726f, +0.014469f, + -0.037414f, -0.019412f, +0.015797f, +0.013351f, -0.000191f, +0.004856f, +0.004672f, +0.004520f, -0.006298f, +0.008605f, + +0.005124f, -0.016803f, -0.000022f, -0.003730f, -0.006005f, +0.008862f, +0.007937f, +0.010427f, +0.010559f, +0.004937f, + +0.004158f, -0.001361f, -0.003817f, -0.006302f, -0.014972f, +0.006357f, +0.005817f, -0.004071f, +0.000331f, +0.015423f, + +0.027111f, +0.000597f, -0.004251f, -0.002129f, -0.004816f, +0.007899f, +0.013425f, +0.006463f, -0.000546f, +0.001687f, + -0.003062f, +0.003395f, +0.003687f, +0.009653f, +0.010427f, -0.003718f, +0.001386f, -0.000615f, +0.001903f, -0.001395f, + +0.004341f, -0.000319f, +0.001533f, +0.000226f, +0.003847f, -0.000387f, -0.000892f, +0.002208f, -0.001663f, -0.003438f, + +0.000370f, +0.002485f, +0.000325f, +0.001142f, +0.005137f, -0.000419f, +0.001364f, -0.000277f, -0.001605f, +0.002174f, + +0.002368f, +0.001313f, -0.000995f, +0.001196f, +0.000697f, -0.001681f, +0.001818f, -0.001202f, -0.000199f, +0.001836f, + +0.000626f, -0.002273f, -0.001337f, +0.001602f, +0.000857f, -0.001807f + }, + { + -0.003943f, +0.034798f, +0.023899f, -0.038661f, +0.004360f, -0.009683f, +0.022942f, -0.001734f, -0.001002f, +0.005445f, + +0.008132f, +0.020271f, +0.006596f, -0.026315f, +0.064534f, -0.005287f, +0.025935f, +0.019195f, +0.025675f, -0.012376f, + -0.001633f, +0.022224f, +0.010530f, +0.001679f, +0.007443f, +0.003351f, +0.033167f, +0.003972f, +0.001118f, +0.014804f, + +0.016865f, -0.002986f, -0.003290f, -0.016058f, -0.005937f, -0.008070f, -0.005556f, +0.006761f, +0.011645f, -0.007975f, + -0.014289f, +0.006719f, +0.006233f, -0.000675f, -0.005054f, +0.012691f, +0.002535f, +0.000780f, -0.006666f, +0.003470f, + -0.001543f, +0.001864f, -0.003262f, +0.004306f, -0.003039f, -0.001135f, +0.002769f, +0.006649f, +0.008216f, -0.002392f, + -0.004220f, +0.001886f, -0.003598f, -0.008969f, +0.000291f, -0.001550f, -0.000334f, +0.003538f, +0.003897f, -0.003456f, + -0.002608f, -0.003318f, +0.003409f, +0.005743f, +0.003248f, +0.000540f, +0.003510f, +0.000036f, +0.000394f, +0.001424f, + -0.000710f, +0.000415f, +0.000638f, +0.000860f, -0.005522f, -0.003438f, +0.001312f, +0.000538f, +0.001408f, -0.001202f, + +0.000898f, +0.001408f, +0.000469f, -0.000352f, -0.000343f, +0.000809f + }, + { + +0.041241f, -0.239305f, -0.049526f, -0.033275f, -0.013919f, +0.033893f, -0.037738f, +0.010255f, +0.011648f, -0.008807f, + -0.001090f, +0.000035f, +0.022528f, -0.011463f, +0.005390f, +0.018350f, +0.019709f, -0.003103f, -0.000288f, -0.015292f, + -0.045097f, +0.005248f, -0.009166f, -0.003489f, +0.000322f, -0.003689f, -0.003808f, +0.014937f, -0.004416f, -0.006222f, + +0.008523f, -0.005376f, -0.002960f, -0.006807f, -0.010251f, -0.005002f, +0.008567f, +0.005300f, -0.018867f, +0.004501f, + +0.001762f, -0.008140f, +0.003684f, +0.011128f, +0.013442f, +0.003935f, -0.002898f, +0.010755f, +0.000173f, +0.000866f, + +0.002185f, +0.008630f, -0.003483f, -0.000360f, -0.004062f, -0.006805f, +0.002052f, +0.000780f, +0.005977f, +0.001185f, + +0.012113f, +0.001699f, +0.003639f, -0.005105f, +0.001267f, -0.000716f, -0.001070f, -0.004472f, -0.000054f, -0.002436f, + +0.000578f, +0.002832f, -0.000569f, -0.001435f, +0.000270f, +0.004193f, +0.000699f, +0.000315f, -0.000532f, -0.000494f, + -0.000426f, -0.002117f, +0.001502f, +0.000299f, -0.002329f, +0.000128f, -0.001692f, +0.000222f, -0.000362f, -0.001301f, + -0.000221f, -0.000556f, -0.001591f, -0.000767f, -0.001567f, -0.000577f + }, + { + -0.005700f, -0.052324f, +0.013349f, +0.003760f, -0.010448f, -0.007867f, -0.011998f, +0.009468f, +0.006310f, +0.006855f, + +0.002886f, -0.009771f, -0.006195f, -0.020492f, -0.055444f, +0.042932f, +0.022178f, -0.003891f, -0.018541f, +0.027447f, + -0.030121f, -0.024559f, +0.017764f, -0.007749f, -0.006398f, -0.003252f, +0.010877f, +0.009569f, +0.004754f, +0.015690f, + -0.012924f, -0.015171f, -0.011123f, +0.006235f, -0.005975f, +0.008526f, -0.007558f, +0.014060f, +0.004730f, -0.001041f, + -0.002326f, +0.006613f, -0.012208f, +0.002567f, -0.002360f, -0.009479f, +0.012571f, +0.002185f, +0.004082f, -0.009246f, + -0.000001f, +0.002851f, -0.000870f, +0.001904f, +0.001928f, -0.000040f, -0.000839f, -0.003443f, +0.003197f, -0.009808f, + +0.001347f, +0.002756f, -0.011074f, -0.003977f, +0.000172f, +0.000261f, +0.003080f, +0.004753f, -0.003129f, +0.003965f, + +0.003586f, -0.005927f, -0.002024f, -0.002214f, -0.005124f, +0.001325f, +0.005035f, +0.000434f, -0.000968f, -0.003009f, + -0.000398f, +0.000268f, -0.004497f, -0.001584f, -0.001877f, -0.002827f, -0.005182f, -0.002272f, -0.000667f, -0.001608f, + +0.002238f, +0.000236f, +0.001664f, -0.000743f, +0.000006f, +0.001671f + }, + { + +0.028170f, +0.443481f, +0.052738f, +0.031704f, +0.055632f, +0.063672f, +0.029775f, +0.018372f, +0.005659f, +0.018960f, + +0.029101f, +0.003610f, -0.003180f, -0.021330f, +0.014566f, +0.031703f, -0.032509f, +0.012358f, -0.024398f, -0.012334f, + -0.025354f, -0.018325f, +0.000090f, +0.000195f, +0.009480f, +0.012885f, -0.025377f, -0.000257f, -0.003982f, -0.002271f, + +0.005461f, +0.010335f, +0.010201f, +0.000367f, +0.003185f, +0.008082f, +0.005677f, +0.000415f, +0.000891f, +0.006122f, + +0.007005f, -0.005470f, +0.011877f, +0.001225f, +0.008733f, -0.006858f, -0.000220f, -0.018515f, -0.023878f, -0.014758f, + -0.002609f, -0.011360f, +0.003181f, +0.010283f, +0.007918f, +0.004053f, +0.005806f, -0.009705f, -0.004782f, -0.003463f, + +0.002897f, +0.000115f, -0.001281f, +0.000835f, -0.000755f, -0.005343f, -0.006076f, -0.002278f, -0.000000f, -0.001994f, + -0.006922f, +0.001349f, -0.002878f, -0.003442f, +0.002670f, +0.001575f, +0.000722f, -0.000275f, -0.000584f, -0.005085f, + -0.000075f, -0.001252f, +0.000990f, -0.000865f, -0.001187f, -0.003914f, -0.001540f, -0.000102f, +0.000988f, -0.002885f, + -0.002941f, -0.000263f, -0.000215f, -0.000022f, -0.000640f, -0.000793f + }, + { + -0.001217f, -0.116855f, -0.003782f, -0.005846f, +0.000236f, -0.010071f, -0.008898f, -0.006162f, +0.006074f, +0.005505f, + +0.017047f, +0.014950f, +0.026071f, -0.019274f, +0.154294f, -0.004877f, +0.013044f, -0.014577f, +0.033255f, -0.040182f, + -0.027412f, -0.030630f, -0.028630f, -0.029247f, -0.010025f, -0.019827f, -0.032227f, -0.006575f, -0.027476f, +0.008436f, + +0.014025f, -0.010689f, +0.018075f, +0.000774f, +0.000277f, -0.006134f, +0.007532f, -0.004415f, -0.000781f, +0.006990f, + +0.010685f, +0.000744f, -0.000265f, -0.018701f, -0.004349f, +0.003526f, +0.020245f, +0.005318f, -0.003034f, -0.000308f, + -0.000346f, +0.007597f, +0.000476f, -0.006589f, -0.003901f, -0.006471f, +0.001665f, +0.000128f, +0.001997f, -0.000133f, + +0.004978f, +0.001759f, -0.001762f, -0.006774f, -0.003215f, -0.000874f, -0.001312f, +0.002896f, -0.000117f, +0.000763f, + -0.004199f, -0.009778f, -0.001714f, +0.001018f, +0.004241f, -0.002157f, -0.003905f, +0.000633f, +0.004194f, +0.002250f, + +0.003043f, -0.000175f, +0.000968f, +0.002218f, -0.000902f, -0.000099f, -0.001442f, +0.000967f, +0.003653f, +0.003335f, + +0.000932f, +0.000160f, -0.000400f, +0.000741f, +0.000359f, +0.001439f + }, + { + -0.035979f, +0.260265f, +0.010535f, +0.058886f, +0.048701f, +0.001147f, +0.008272f, +0.002554f, +0.014733f, +0.007370f, + -0.012025f, +0.006598f, +0.006239f, +0.026456f, +0.004964f, -0.003777f, +0.012387f, -0.017912f, -0.038292f, -0.004655f, + -0.001036f, +0.005620f, +0.003879f, -0.006657f, +0.008235f, +0.000837f, -0.010590f, -0.010832f, +0.020655f, +0.007281f, + +0.010674f, +0.004752f, +0.016985f, +0.001313f, +0.001366f, -0.014922f, -0.008637f, -0.000196f, +0.000057f, -0.014035f, + +0.002898f, -0.014284f, +0.003020f, +0.019202f, -0.010028f, -0.003163f, -0.002958f, +0.004089f, -0.001421f, -0.003024f, + +0.004164f, +0.002340f, -0.000125f, +0.000715f, +0.005169f, +0.002161f, -0.000481f, -0.006521f, -0.002681f, +0.000587f, + +0.000359f, +0.002449f, +0.000809f, -0.006584f, +0.002070f, -0.000682f, +0.000257f, +0.004099f, +0.002668f, -0.002878f, + -0.001649f, -0.002841f, -0.003605f, +0.000185f, -0.001082f, +0.001183f, +0.002821f, -0.000849f, -0.000502f, -0.002005f, + -0.004327f, +0.001486f, -0.001728f, +0.004036f, -0.001348f, +0.000407f, +0.001516f, +0.000128f, -0.001162f, +0.002103f, + -0.000721f, -0.003404f, -0.001847f, +0.000873f, +0.000079f, -0.000331f + } + }, + { + { + +0.002178f, -0.012052f, +0.018461f, -0.028448f, +0.014607f, -0.000363f, -0.003940f, +0.004568f, +0.000569f, +0.000663f, + -0.013744f, +0.022319f, +0.012097f, -0.024065f, +0.005546f, -0.043245f, +0.006952f, +0.012753f, +0.000141f, +0.000399f, + -0.052357f, +0.001493f, -0.020711f, +0.002435f, +0.040137f, +0.020445f, +0.013271f, -0.024544f, +0.006373f, -0.006744f, + +0.001367f, -0.013415f, -0.006043f, +0.011906f, +0.011933f, +0.002301f, -0.000250f, +0.011003f, +0.004173f, +0.003949f, + -0.000420f, -0.009598f, +0.002179f, +0.009611f, +0.003262f, -0.001552f, +0.003867f, +0.007481f, -0.004525f, +0.005883f, + +0.003840f, -0.008903f, +0.004515f, -0.003183f, -0.001411f, +0.000761f, +0.000496f, -0.002233f, +0.003482f, -0.001033f, + +0.002321f, +0.003333f, +0.000181f, +0.002097f, +0.004955f, -0.001619f, -0.000908f, +0.000730f, -0.000256f, -0.001249f, + +0.001367f, +0.000466f, +0.001163f, +0.000605f, -0.003010f, -0.001190f, -0.001307f, +0.000288f, -0.002146f, -0.000607f, + -0.001629f, +0.001496f, +0.000317f, +0.001145f, +0.000541f, -0.002540f, -0.000094f, -0.000250f, -0.000086f, -0.001179f, + +0.001123f, -0.000038f, +0.000062f, +0.000690f, +0.000387f, +0.000234f + }, + { + +0.008567f, -0.289920f, +0.100177f, -0.009776f, -0.004973f, +0.007158f, +0.003418f, -0.020652f, +0.027951f, +0.000907f, + -0.032180f, +0.009064f, +0.008358f, -0.009722f, -0.007937f, +0.005188f, -0.010927f, +0.014627f, -0.006027f, +0.006476f, + -0.005018f, +0.010033f, -0.003022f, -0.002826f, +0.007035f, +0.004673f, +0.003244f, +0.004547f, -0.003974f, +0.002335f, + -0.000507f, -0.006903f, +0.003500f, -0.006949f, +0.002806f, -0.011471f, -0.000578f, +0.005705f, +0.002857f, +0.004302f, + +0.003040f, +0.001395f, +0.003533f, -0.000791f, +0.000950f, -0.003828f, -0.007626f, -0.004985f, +0.005475f, -0.000343f, + +0.002348f, -0.000152f, +0.004333f, +0.001846f, -0.001857f, +0.002185f, -0.000628f, -0.005322f, +0.002420f, -0.001275f, + -0.001549f, +0.001483f, +0.000724f, +0.000832f, -0.001915f, +0.003035f, +0.002355f, +0.003406f, -0.001357f, -0.000372f, + +0.001704f, +0.002010f, -0.000609f, +0.001111f, -0.002661f, +0.001786f, -0.000888f, +0.000499f, +0.000937f, +0.001203f, + -0.002981f, +0.000058f, -0.000341f, -0.000153f, +0.000388f, -0.000260f, +0.000754f, -0.001543f, +0.000139f, +0.000545f, + -0.001056f, -0.000234f, +0.000249f, -0.000318f, +0.000928f, -0.000099f + }, + { + +0.002682f, -0.019565f, +0.035110f, -0.031363f, +0.011324f, -0.000422f, -0.004103f, +0.008655f, -0.006384f, -0.002974f, + +0.026803f, -0.005020f, -0.018519f, +0.043118f, -0.002872f, -0.022928f, -0.008792f, -0.025045f, -0.025400f, +0.005024f, + -0.011282f, +0.009772f, +0.013687f, -0.006254f, -0.001731f, -0.000000f, -0.006854f, +0.000852f, +0.002140f, +0.006090f, + +0.000687f, -0.005073f, +0.011713f, -0.003496f, +0.004647f, +0.002590f, +0.005030f, +0.001703f, -0.004950f, -0.006618f, + +0.012626f, +0.004654f, -0.003221f, -0.002561f, +0.002170f, +0.003521f, -0.001476f, -0.003200f, -0.002567f, +0.004689f, + +0.000482f, -0.000206f, +0.000916f, +0.000499f, +0.004084f, -0.006613f, +0.001251f, -0.002046f, -0.005536f, -0.004439f, + -0.001067f, -0.000428f, -0.004144f, +0.001948f, -0.001151f, +0.000885f, -0.004550f, +0.000441f, -0.000022f, +0.001316f, + -0.000205f, +0.000066f, +0.002525f, +0.000545f, -0.001008f, -0.002478f, +0.003436f, -0.000891f, -0.001573f, +0.000575f, + -0.000377f, +0.001431f, -0.001830f, -0.002534f, -0.000146f, -0.000329f, -0.001321f, +0.001207f, -0.001341f, -0.000065f, + +0.000230f, -0.000896f, -0.001150f, +0.000104f, +0.000779f, +0.000555f + }, + { + +0.002836f, -0.043753f, -0.004679f, +0.008075f, -0.000714f, +0.000394f, -0.000304f, -0.000032f, -0.001593f, -0.002359f, + -0.002116f, +0.004684f, +0.001586f, +0.015029f, +0.054821f, -0.016801f, +0.001676f, -0.000611f, +0.042920f, -0.001047f, + -0.003659f, +0.019109f, -0.011065f, +0.005417f, +0.017577f, -0.018260f, +0.003782f, -0.000708f, -0.009578f, +0.008179f, + -0.009957f, -0.003980f, -0.009302f, -0.004395f, +0.000402f, +0.020801f, -0.015914f, +0.001972f, +0.008079f, -0.000280f, + +0.001994f, -0.010106f, +0.000011f, +0.009866f, +0.005154f, -0.005531f, +0.002585f, -0.004013f, +0.006470f, +0.004540f, + -0.002254f, -0.000296f, +0.000424f, +0.000105f, +0.000289f, -0.002143f, +0.000204f, +0.008278f, -0.003643f, +0.000778f, + +0.001577f, -0.001162f, -0.002766f, -0.001384f, +0.004244f, -0.006294f, +0.003637f, -0.001962f, +0.000974f, -0.001166f, + +0.000717f, -0.001713f, +0.000348f, -0.001132f, -0.000860f, -0.000459f, +0.001168f, -0.000815f, -0.000548f, -0.002493f, + +0.001362f, -0.000343f, -0.001990f, +0.001345f, +0.000304f, -0.002102f, +0.000737f, +0.000155f, +0.000403f, -0.000776f, + -0.001402f, +0.000056f, +0.000806f, -0.001945f, +0.000200f, -0.000615f + }, + { + +0.011501f, -0.306944f, +0.069632f, -0.037924f, -0.006455f, +0.001605f, -0.007381f, -0.010403f, +0.006364f, +0.006221f, + +0.003251f, -0.023547f, +0.014967f, -0.016105f, +0.015379f, -0.003458f, +0.012896f, -0.002221f, +0.015415f, -0.009124f, + -0.007123f, +0.021113f, -0.017713f, -0.012375f, +0.013588f, +0.002373f, +0.013836f, +0.020880f, -0.019175f, +0.004873f, + -0.000751f, -0.003474f, +0.010972f, +0.004685f, -0.008980f, +0.005296f, -0.006436f, +0.008522f, +0.014977f, -0.008113f, + +0.005698f, -0.004787f, +0.009149f, -0.004985f, +0.003103f, +0.002613f, +0.000160f, +0.000322f, +0.000640f, -0.003998f, + +0.004223f, -0.005192f, +0.001976f, -0.000321f, +0.002513f, +0.001563f, -0.004843f, -0.000923f, +0.007530f, +0.004809f, + -0.002051f, -0.004712f, +0.000446f, +0.001269f, +0.004818f, -0.000225f, -0.001471f, +0.001632f, -0.000047f, +0.001034f, + -0.001054f, -0.001321f, -0.001055f, +0.001906f, +0.002136f, +0.001684f, +0.002654f, -0.002014f, +0.000380f, +0.000109f, + +0.000364f, -0.000764f, +0.001497f, -0.000351f, +0.001562f, -0.001671f, -0.000107f, +0.000432f, +0.000802f, +0.001272f, + +0.000063f, -0.000412f, +0.000188f, +0.000817f, -0.000656f, +0.000062f + }, + { + +0.000108f, -0.007908f, +0.004688f, -0.001790f, +0.005209f, -0.001483f, -0.000323f, +0.005546f, -0.002301f, +0.001987f, + +0.001564f, -0.002724f, -0.009804f, +0.002704f, +0.078061f, -0.020533f, +0.001180f, +0.014991f, -0.006867f, +0.010899f, + -0.001203f, -0.022241f, +0.009190f, -0.007871f, +0.018549f, +0.013414f, -0.006277f, -0.012093f, +0.006091f, -0.029183f, + +0.003293f, -0.007052f, +0.003041f, +0.009589f, -0.003878f, -0.019571f, +0.003580f, -0.004445f, -0.000949f, +0.002523f, + +0.004000f, -0.015928f, +0.001810f, -0.002423f, +0.000141f, -0.000048f, +0.002270f, +0.002121f, +0.004943f, +0.003879f, + +0.000715f, -0.000576f, +0.004538f, +0.003618f, +0.000523f, -0.001190f, -0.005235f, +0.005369f, -0.003321f, +0.002018f, + -0.002387f, +0.000820f, +0.000851f, +0.000563f, +0.001970f, -0.003278f, +0.002598f, -0.002423f, -0.002987f, +0.001196f, + -0.002266f, -0.002204f, -0.000075f, +0.000256f, -0.001856f, -0.000250f, +0.001572f, +0.000641f, +0.000279f, -0.002365f, + +0.001306f, -0.001773f, +0.000101f, -0.000619f, -0.000544f, +0.000466f, +0.000176f, -0.000069f, -0.000059f, +0.000960f, + -0.000009f, +0.000761f, -0.000415f, -0.000480f, +0.000655f, -0.000570f + }, + { + +0.061308f, -0.358616f, +0.055074f, +0.003856f, -0.001251f, -0.003877f, +0.005355f, -0.032091f, -0.005225f, +0.008883f, + +0.013687f, -0.002746f, +0.010163f, -0.011706f, +0.006561f, -0.014450f, -0.019605f, -0.008672f, +0.007998f, -0.018842f, + +0.000863f, +0.004871f, +0.005600f, -0.001816f, +0.002415f, -0.002300f, +0.003885f, -0.004258f, -0.000361f, -0.004343f, + -0.002612f, +0.006527f, -0.012062f, +0.001944f, +0.001078f, +0.001520f, -0.004065f, +0.007277f, -0.009110f, -0.009756f, + -0.004022f, +0.009780f, +0.001451f, -0.003775f, +0.005358f, +0.009355f, -0.005511f, +0.002529f, +0.008639f, -0.002152f, + -0.003936f, +0.005202f, +0.005688f, -0.012157f, +0.005560f, +0.000428f, +0.004095f, -0.006046f, -0.002235f, +0.002675f, + -0.002889f, +0.001870f, +0.001870f, -0.001826f, -0.001134f, +0.001016f, -0.000044f, -0.000666f, -0.002412f, +0.001333f, + -0.001830f, -0.000371f, +0.000972f, -0.000073f, -0.000523f, -0.001840f, -0.000047f, -0.000414f, -0.000579f, -0.000427f, + +0.000712f, -0.001493f, +0.001177f, -0.000372f, -0.001050f, +0.001202f, -0.000667f, -0.000729f, -0.000393f, -0.000569f, + +0.001433f, +0.000668f, -0.001134f, -0.001398f, -0.000695f, -0.000392f + }, + { + +0.000755f, +0.017524f, -0.005048f, -0.010109f, +0.002748f, -0.000370f, +0.000855f, +0.002083f, -0.008578f, +0.000500f, + -0.008322f, -0.000943f, +0.010206f, -0.004161f, +0.063996f, -0.026737f, +0.022662f, +0.015657f, -0.008050f, -0.007251f, + +0.000649f, +0.031035f, +0.002020f, +0.005634f, +0.018595f, -0.009543f, -0.014608f, +0.029534f, -0.038063f, +0.033466f, + -0.017634f, +0.015245f, -0.004367f, -0.012855f, +0.017342f, +0.003533f, +0.006869f, -0.011819f, +0.000999f, -0.008190f, + +0.007719f, +0.004603f, +0.000237f, -0.006117f, -0.005760f, +0.005087f, -0.005380f, +0.002461f, -0.002931f, -0.001638f, + -0.006934f, -0.003376f, -0.000471f, +0.000142f, -0.000018f, -0.004128f, -0.001893f, -0.000563f, +0.001316f, +0.000050f, + +0.000833f, -0.001601f, -0.001918f, -0.001373f, -0.002168f, -0.001544f, +0.001546f, +0.002706f, -0.000154f, +0.002215f, + -0.001477f, -0.000512f, -0.000086f, +0.002505f, -0.001332f, +0.000881f, -0.000152f, +0.001038f, -0.003160f, +0.000401f, + -0.002524f, -0.001162f, +0.001280f, +0.001542f, +0.002423f, -0.000618f, +0.001505f, -0.000909f, +0.001320f, -0.000489f, + -0.000799f, -0.000770f, -0.001590f, -0.000974f, -0.000236f, -0.000189f + }, + { + -0.050564f, -0.309953f, +0.058386f, -0.019412f, +0.005357f, +0.004218f, +0.008953f, -0.005008f, -0.002103f, +0.011106f, + -0.017426f, -0.018654f, +0.000305f, +0.005462f, +0.004047f, +0.008705f, +0.010988f, +0.017515f, -0.007358f, +0.005925f, + +0.006907f, +0.000230f, +0.011992f, -0.001255f, -0.004925f, +0.013550f, +0.002229f, +0.000396f, +0.009307f, +0.003985f, + -0.000168f, -0.002783f, +0.000455f, +0.000094f, -0.005561f, -0.001632f, -0.001769f, +0.004011f, +0.004186f, +0.001800f, + +0.016832f, -0.002931f, -0.000134f, +0.001023f, -0.003203f, +0.005067f, +0.005785f, -0.002715f, -0.003507f, +0.006397f, + +0.000813f, -0.000734f, -0.003047f, +0.000234f, +0.004427f, -0.006432f, +0.000748f, -0.001461f, +0.000987f, -0.004525f, + +0.000692f, -0.001889f, +0.002067f, -0.001114f, +0.001667f, +0.001747f, +0.002565f, +0.001330f, +0.000700f, -0.001195f, + -0.001565f, -0.000316f, -0.000801f, -0.000920f, +0.003454f, -0.000778f, +0.000535f, -0.000281f, +0.000940f, +0.002917f, + -0.001702f, -0.000773f, -0.000116f, +0.000554f, +0.000503f, -0.000276f, +0.003633f, -0.000516f, -0.001366f, +0.000677f, + +0.000476f, -0.002445f, -0.001089f, +0.001766f, +0.000191f, -0.000458f + }, + { + +0.005521f, -0.011096f, -0.007666f, -0.024821f, +0.002027f, -0.011020f, +0.021318f, -0.003240f, -0.001544f, +0.003379f, + -0.012256f, -0.000351f, +0.009359f, -0.035129f, +0.020939f, -0.013868f, +0.029695f, +0.011947f, +0.038943f, -0.000163f, + -0.000591f, +0.025737f, +0.004527f, -0.003856f, +0.001154f, -0.003366f, +0.021308f, -0.016023f, -0.021752f, -0.000976f, + +0.003139f, -0.011210f, -0.000162f, -0.008465f, -0.003171f, -0.005746f, -0.009831f, -0.001544f, +0.000278f, -0.007204f, + -0.000695f, +0.011055f, -0.002442f, -0.002001f, -0.002536f, +0.003680f, -0.005244f, -0.002331f, -0.007511f, +0.002973f, + +0.000113f, +0.002392f, -0.002205f, +0.003596f, -0.001853f, -0.001981f, -0.003129f, +0.002133f, +0.005068f, -0.006859f, + -0.003767f, +0.001298f, -0.003295f, -0.006069f, -0.001633f, -0.001725f, +0.001005f, +0.001933f, +0.002422f, -0.002697f, + +0.001861f, -0.001864f, +0.001547f, +0.001964f, +0.001703f, +0.001887f, +0.001336f, -0.001486f, +0.002197f, +0.002312f, + +0.000131f, +0.000658f, +0.000552f, +0.003038f, -0.001333f, -0.001092f, +0.000702f, -0.000049f, +0.001524f, -0.001698f, + -0.000666f, +0.000607f, +0.000025f, -0.000382f, -0.000809f, -0.000062f + }, + { + -0.033735f, -0.202946f, +0.065766f, +0.003585f, -0.005361f, +0.040879f, -0.045668f, +0.011427f, +0.017297f, -0.005980f, + -0.000327f, -0.007312f, +0.018259f, -0.006215f, -0.004434f, +0.007676f, +0.001608f, -0.000996f, +0.015705f, +0.017414f, + -0.020102f, +0.016583f, -0.006714f, -0.003004f, +0.003989f, -0.005608f, -0.016943f, +0.003705f, +0.004125f, -0.005763f, + +0.003675f, -0.003760f, -0.004573f, +0.000833f, -0.008795f, -0.009266f, +0.006317f, +0.003807f, -0.011439f, +0.004710f, + +0.003067f, -0.010179f, -0.000857f, +0.002695f, +0.002436f, -0.000377f, -0.005716f, +0.004109f, -0.002268f, -0.000002f, + -0.002736f, +0.006257f, -0.002217f, +0.002278f, +0.003564f, -0.001686f, +0.001973f, +0.002169f, +0.001678f, -0.004060f, + +0.005385f, -0.002736f, +0.000835f, -0.002326f, +0.004586f, -0.000274f, -0.002661f, -0.004782f, +0.001926f, -0.002303f, + +0.001424f, +0.003991f, -0.000143f, -0.000589f, +0.000039f, +0.001894f, +0.000248f, +0.001061f, +0.001612f, +0.001277f, + -0.000444f, -0.001234f, +0.002176f, +0.001631f, -0.001814f, +0.001642f, -0.000547f, +0.001028f, +0.000142f, -0.000636f, + +0.000303f, -0.000159f, -0.001426f, +0.000477f, -0.000341f, +0.001065f + }, + { + +0.004791f, -0.064656f, -0.005109f, +0.000200f, +0.000530f, +0.004507f, -0.004652f, +0.003064f, +0.002319f, +0.005314f, + +0.006597f, -0.001811f, +0.011237f, -0.020594f, -0.063772f, +0.026430f, -0.001469f, +0.020328f, -0.021509f, +0.004350f, + +0.007937f, +0.008449f, -0.010275f, -0.027567f, -0.005672f, +0.014882f, +0.010660f, +0.010329f, +0.004784f, +0.007473f, + -0.014294f, +0.001906f, +0.003999f, +0.008765f, -0.009826f, +0.005836f, -0.009262f, +0.006551f, -0.001123f, +0.004447f, + -0.006094f, +0.010380f, -0.006443f, -0.002962f, +0.001766f, -0.002817f, +0.010878f, +0.001395f, +0.003029f, -0.000369f, + +0.005241f, -0.001906f, -0.003742f, -0.002125f, +0.000474f, -0.001706f, +0.001089f, -0.002721f, +0.001659f, -0.006755f, + +0.003433f, +0.000536f, -0.006860f, +0.003913f, +0.002660f, -0.000665f, -0.001377f, -0.000072f, -0.004669f, +0.001396f, + +0.001287f, -0.003206f, +0.001116f, +0.001600f, -0.001260f, -0.000693f, -0.000512f, -0.003034f, +0.000006f, +0.000141f, + +0.000665f, -0.001590f, -0.002191f, +0.002700f, +0.000685f, -0.000705f, -0.001936f, -0.000778f, +0.000404f, -0.001147f, + +0.000092f, -0.001480f, +0.000754f, -0.000177f, -0.000202f, +0.001069f + }, + { + -0.083502f, +0.257166f, +0.008855f, -0.016928f, +0.008505f, +0.023732f, -0.000291f, -0.002417f, +0.009865f, +0.016770f, + +0.015826f, +0.000428f, +0.007488f, -0.013827f, -0.005739f, +0.024294f, -0.029300f, +0.019893f, -0.000738f, +0.010957f, + -0.013448f, -0.003881f, +0.007818f, -0.000252f, +0.012677f, +0.034084f, -0.006969f, +0.019839f, -0.001581f, -0.011600f, + -0.002401f, +0.000243f, -0.000310f, -0.001843f, +0.008999f, +0.000526f, -0.003580f, -0.000744f, +0.006084f, +0.003024f, + +0.007545f, -0.000644f, +0.009407f, -0.004424f, +0.008210f, -0.012056f, +0.002318f, +0.001250f, -0.004082f, -0.002693f, + +0.007572f, +0.004054f, +0.004717f, +0.004220f, -0.003060f, -0.005010f, +0.004405f, -0.002721f, +0.000383f, -0.002547f, + +0.000925f, -0.003125f, +0.000476f, +0.000870f, -0.005353f, -0.002499f, -0.000297f, -0.001248f, -0.001775f, -0.000827f, + -0.001378f, +0.001037f, -0.002614f, -0.001109f, +0.001415f, -0.000386f, +0.002582f, +0.002391f, +0.000707f, -0.002780f, + +0.000645f, -0.000625f, +0.001169f, +0.000544f, +0.000835f, -0.002104f, -0.000056f, +0.000198f, +0.000550f, -0.000973f, + -0.000009f, +0.000162f, -0.000279f, +0.000567f, -0.000168f, -0.000208f + }, + { + +0.000054f, -0.104799f, +0.009045f, +0.003323f, +0.004477f, -0.002545f, +0.002959f, -0.002299f, +0.008619f, -0.005620f, + +0.002663f, -0.001755f, +0.007774f, -0.040495f, +0.122681f, -0.020084f, +0.017879f, -0.027421f, +0.024278f, -0.009801f, + -0.004461f, -0.009445f, -0.001432f, -0.015844f, +0.000974f, -0.008336f, -0.002003f, +0.014386f, -0.025949f, +0.002379f, + +0.008369f, -0.008766f, +0.021801f, +0.001108f, -0.008998f, -0.001031f, +0.004327f, -0.010362f, +0.006526f, +0.006412f, + +0.010928f, -0.005243f, -0.004656f, -0.006639f, +0.002779f, -0.005030f, +0.010822f, +0.002606f, -0.004299f, -0.002618f, + +0.000322f, +0.004282f, -0.003759f, -0.003591f, +0.001737f, -0.004879f, +0.003500f, -0.000494f, +0.001005f, -0.002889f, + +0.002564f, -0.001900f, +0.001765f, -0.000044f, -0.000619f, +0.002706f, +0.001316f, -0.002376f, -0.002498f, +0.002824f, + -0.000889f, -0.003759f, +0.003552f, +0.000069f, +0.000469f, +0.000830f, +0.000898f, +0.001494f, +0.001204f, -0.002023f, + +0.000723f, -0.001262f, -0.000142f, +0.001401f, -0.001250f, +0.000549f, -0.001934f, -0.000641f, +0.000078f, +0.000558f, + +0.000393f, -0.000436f, -0.001379f, +0.000660f, -0.000322f, -0.000161f + }, + { + -0.005483f, +0.261057f, -0.024098f, +0.013438f, -0.000260f, -0.047108f, -0.014051f, -0.002762f, +0.004866f, +0.000204f, + +0.008354f, +0.005559f, -0.014488f, +0.011127f, +0.001063f, +0.002106f, +0.017287f, +0.010998f, -0.009752f, +0.004788f, + -0.005504f, -0.000346f, +0.013124f, +0.000951f, -0.000872f, +0.004590f, +0.008444f, -0.012966f, +0.011122f, -0.009093f, + +0.012315f, -0.001547f, +0.002025f, +0.001767f, +0.006428f, -0.007270f, +0.004234f, +0.003883f, +0.005218f, -0.008142f, + +0.006049f, -0.016535f, -0.002428f, +0.016361f, -0.001276f, +0.002839f, +0.001972f, +0.003625f, -0.002661f, -0.006320f, + +0.000427f, +0.002854f, -0.001854f, -0.003848f, -0.001444f, +0.000644f, +0.001411f, -0.003576f, +0.003136f, +0.003244f, + -0.003104f, -0.001122f, +0.002956f, -0.001043f, +0.004871f, -0.000636f, -0.000702f, +0.002103f, +0.002563f, -0.000930f, + -0.000680f, +0.001705f, +0.001749f, +0.001811f, +0.001124f, +0.000248f, -0.000100f, -0.000514f, +0.001566f, +0.000437f, + -0.003057f, +0.001384f, -0.001494f, +0.003813f, -0.001038f, +0.000228f, +0.000638f, +0.001413f, -0.000646f, +0.002344f, + +0.001177f, -0.000328f, -0.000425f, +0.001013f, -0.000003f, -0.001039f + } + }, + { + { + -0.001252f, +0.015087f, -0.003216f, +0.007172f, -0.011113f, +0.002080f, +0.000201f, -0.003833f, +0.002425f, -0.002846f, + -0.008614f, +0.009736f, +0.016326f, -0.004828f, -0.007148f, -0.016755f, -0.001573f, +0.006480f, -0.019113f, +0.003949f, + -0.027741f, -0.011999f, -0.015156f, +0.023168f, +0.018362f, +0.024231f, +0.004110f, -0.015409f, -0.003784f, +0.009952f, + +0.003771f, -0.007407f, -0.005342f, +0.013271f, +0.008925f, -0.003510f, +0.002442f, +0.014134f, +0.004001f, +0.000918f, + +0.002395f, -0.002545f, +0.001100f, +0.003627f, +0.000932f, +0.005779f, +0.005367f, +0.005410f, +0.000244f, -0.003061f, + +0.002969f, -0.000635f, +0.001694f, -0.001941f, -0.002622f, -0.000698f, -0.000586f, +0.002012f, -0.000450f, -0.000308f, + +0.004211f, +0.001294f, -0.000219f, +0.002942f, +0.002634f, -0.003034f, +0.001835f, -0.001691f, +0.000859f, +0.000751f, + +0.000042f, +0.000737f, +0.000389f, +0.000350f, -0.001611f, -0.000184f, -0.001035f, +0.000173f, -0.000214f, -0.002250f, + -0.000024f, +0.001176f, +0.000703f, -0.000194f, -0.000889f, -0.000101f, -0.000660f, -0.000454f, +0.000545f, -0.000788f, + +0.001146f, -0.000458f, -0.000687f, +0.000320f, +0.001265f, -0.000135f + }, + { + -0.002609f, -0.110806f, -0.020799f, +0.022890f, -0.008075f, +0.000764f, -0.003091f, +0.009367f, +0.000849f, -0.000937f, + -0.005012f, -0.006991f, +0.007384f, -0.002178f, -0.008537f, +0.007526f, -0.004412f, +0.005316f, +0.007662f, -0.000402f, + -0.003238f, +0.009167f, -0.000985f, +0.012585f, -0.009463f, +0.009167f, +0.005944f, -0.003479f, +0.002750f, -0.003530f, + +0.000172f, -0.003712f, +0.006463f, -0.003390f, -0.002745f, -0.009180f, +0.005960f, +0.000319f, +0.001210f, +0.006947f, + +0.001895f, +0.004639f, -0.004432f, +0.002763f, -0.001337f, +0.001987f, -0.009095f, +0.003815f, +0.000889f, +0.002467f, + -0.000382f, -0.003747f, +0.001631f, +0.005060f, +0.001407f, -0.001865f, -0.004133f, -0.000835f, +0.000592f, -0.001582f, + -0.001081f, +0.002959f, -0.000381f, -0.001590f, +0.002852f, +0.002199f, +0.003409f, +0.000227f, +0.002676f, -0.000664f, + +0.002108f, +0.000913f, +0.001932f, -0.001401f, +0.000569f, +0.000413f, -0.000565f, -0.000209f, +0.002336f, +0.000202f, + -0.000571f, -0.001077f, +0.000291f, -0.001400f, -0.000022f, -0.000195f, +0.001011f, -0.000659f, -0.000075f, -0.000651f, + -0.000326f, -0.000207f, -0.000009f, +0.000537f, -0.000343f, -0.000075f + }, + { + +0.000239f, +0.036346f, -0.003985f, +0.009143f, -0.012033f, -0.001688f, -0.001138f, +0.004366f, -0.001844f, +0.001533f, + +0.003470f, -0.003668f, +0.009595f, +0.018985f, +0.006627f, -0.016224f, -0.016852f, -0.020028f, -0.017841f, -0.011247f, + -0.003765f, +0.006700f, +0.000884f, +0.005664f, -0.005513f, -0.001109f, -0.007497f, +0.008439f, +0.004058f, -0.001482f, + -0.005394f, +0.003717f, +0.006943f, -0.006150f, +0.004219f, -0.001343f, +0.005528f, +0.003611f, -0.002951f, -0.006146f, + +0.005728f, +0.003067f, +0.000137f, -0.000593f, -0.000464f, +0.003609f, +0.005125f, -0.007384f, +0.000956f, +0.001863f, + +0.003413f, +0.000628f, +0.001450f, +0.001370f, +0.000092f, -0.003072f, -0.002188f, -0.002906f, -0.002158f, -0.002048f, + -0.000841f, -0.001634f, -0.004177f, +0.003832f, -0.001105f, -0.001554f, -0.002456f, -0.000393f, -0.001008f, +0.000278f, + +0.001241f, +0.000032f, +0.000827f, -0.000037f, +0.000224f, +0.000259f, -0.001096f, -0.000591f, -0.001208f, +0.000405f, + +0.000220f, +0.001103f, -0.001345f, -0.001987f, -0.000311f, -0.000130f, +0.000404f, -0.000034f, -0.001047f, -0.000457f, + -0.000564f, -0.000023f, -0.000396f, -0.000279f, +0.000351f, +0.000527f + }, + { + -0.002893f, -0.043871f, +0.004471f, +0.004852f, -0.001024f, +0.000667f, +0.000568f, -0.002535f, -0.002889f, -0.002146f, + +0.002670f, +0.002004f, +0.002102f, +0.005989f, +0.016782f, +0.012595f, +0.014215f, -0.007458f, +0.032676f, -0.000639f, + -0.017304f, +0.012737f, +0.000892f, +0.010385f, -0.006207f, +0.003257f, -0.003685f, -0.004962f, -0.006560f, +0.005913f, + +0.004452f, -0.016261f, -0.021344f, +0.003852f, +0.003645f, +0.006820f, -0.012196f, +0.005614f, +0.003305f, -0.001796f, + -0.002973f, -0.003197f, +0.002239f, +0.006051f, +0.003557f, -0.003690f, +0.000446f, +0.000139f, +0.001425f, +0.002582f, + +0.002261f, -0.002855f, -0.001988f, +0.001306f, -0.000290f, -0.000578f, +0.002708f, +0.002227f, +0.001816f, -0.000732f, + -0.002821f, +0.000533f, -0.001886f, -0.001705f, -0.000132f, -0.001381f, -0.000048f, -0.001509f, +0.001055f, -0.000070f, + -0.000239f, +0.000160f, -0.002593f, -0.000406f, -0.001184f, +0.000173f, -0.000367f, -0.000273f, -0.000953f, -0.001308f, + -0.000276f, +0.000260f, -0.001136f, +0.000422f, -0.000092f, -0.000180f, +0.000387f, -0.000634f, +0.000116f, -0.000474f, + -0.000811f, -0.000407f, -0.000294f, -0.000795f, -0.000188f, -0.000183f + }, + { + -0.035669f, -0.164718f, +0.000755f, -0.043841f, +0.011884f, +0.001623f, -0.004075f, -0.002848f, -0.003134f, +0.003570f, + -0.015227f, -0.000711f, +0.009045f, -0.006390f, +0.002183f, +0.004930f, +0.004686f, +0.016095f, +0.000556f, -0.002819f, + +0.006418f, -0.001683f, +0.000850f, -0.006376f, +0.002798f, +0.011461f, +0.010549f, -0.003153f, -0.004410f, -0.000688f, + -0.000608f, +0.007409f, +0.003728f, +0.000767f, -0.000165f, +0.001887f, +0.001460f, +0.000399f, +0.009282f, -0.002194f, + +0.001876f, +0.002161f, +0.000511f, +0.004470f, +0.003663f, -0.004223f, +0.001951f, +0.001851f, +0.000752f, -0.003719f, + +0.002158f, -0.003117f, +0.001968f, +0.001373f, -0.000013f, -0.001820f, -0.000304f, +0.000262f, +0.003893f, +0.004226f, + -0.001470f, -0.002160f, +0.000675f, +0.003216f, +0.002541f, -0.000934f, +0.000172f, +0.002055f, -0.000047f, +0.001039f, + -0.000672f, -0.000739f, -0.000109f, +0.001760f, +0.001428f, +0.001396f, +0.001019f, -0.000762f, +0.000616f, -0.000317f, + +0.000213f, -0.000331f, +0.000048f, +0.000486f, +0.001443f, -0.001116f, +0.000356f, -0.000044f, +0.000617f, +0.000432f, + +0.000545f, -0.000058f, +0.001034f, +0.000240f, -0.000480f, +0.000561f + }, + { + +0.001960f, +0.001933f, -0.007880f, +0.006362f, -0.000348f, -0.000853f, +0.000914f, +0.003651f, -0.001979f, +0.000179f, + +0.002566f, +0.000394f, -0.005511f, +0.004813f, +0.059592f, -0.010451f, +0.008265f, +0.007398f, -0.005201f, +0.009265f, + -0.007004f, -0.005911f, -0.000447f, -0.011758f, +0.016230f, +0.016386f, -0.022237f, +0.002420f, -0.006890f, -0.022081f, + -0.002721f, -0.003540f, +0.004631f, +0.004955f, -0.001712f, -0.008261f, -0.008748f, -0.009360f, -0.003486f, +0.005285f, + +0.001479f, -0.010373f, -0.004017f, -0.001469f, -0.002687f, +0.000040f, +0.004336f, +0.003500f, +0.003668f, +0.003819f, + +0.000670f, +0.001642f, +0.001279f, +0.003834f, -0.000442f, -0.001764f, +0.000642f, +0.002561f, +0.000332f, +0.000949f, + -0.000757f, -0.001933f, -0.000358f, -0.001838f, +0.001467f, -0.000806f, +0.001484f, -0.001086f, -0.001904f, -0.002535f, + -0.001112f, -0.000875f, -0.000242f, -0.001840f, -0.000909f, +0.001494f, -0.000500f, -0.000949f, +0.000646f, -0.000004f, + -0.001105f, +0.000247f, -0.000402f, -0.000872f, +0.000025f, +0.000271f, +0.000351f, +0.000798f, -0.000270f, +0.000087f, + +0.000375f, +0.000306f, +0.000205f, -0.001061f, +0.000737f, +0.000144f + }, + { + -0.069384f, -0.088555f, -0.025450f, +0.011015f, +0.009506f, -0.001403f, -0.003980f, -0.006828f, -0.019788f, +0.015984f, + +0.002269f, +0.009386f, -0.005467f, +0.007357f, -0.001513f, -0.011634f, -0.023431f, -0.000381f, +0.000511f, +0.000388f, + +0.004499f, -0.004607f, +0.009581f, -0.005667f, -0.002911f, -0.000874f, -0.003150f, +0.004254f, +0.002271f, -0.003024f, + -0.005221f, +0.000560f, -0.001046f, -0.007913f, +0.002077f, +0.004011f, +0.001027f, +0.000546f, -0.002237f, -0.004509f, + -0.007487f, +0.006758f, +0.004387f, -0.001613f, +0.003870f, +0.001172f, +0.002470f, +0.003253f, +0.006741f, -0.002252f, + -0.002907f, -0.000561f, +0.006802f, -0.006558f, +0.001243f, -0.000723f, +0.000729f, -0.002712f, -0.002049f, -0.000715f, + +0.000362f, +0.001604f, -0.000253f, -0.000302f, -0.000369f, +0.000374f, -0.000419f, -0.000941f, +0.001343f, -0.003595f, + +0.000011f, +0.000434f, -0.000796f, +0.000120f, -0.000539f, +0.000368f, -0.000849f, -0.002585f, +0.000033f, +0.001196f, + -0.001831f, -0.000132f, -0.000453f, -0.000830f, +0.000445f, +0.000067f, +0.000562f, -0.000310f, -0.000961f, +0.000149f, + +0.000653f, -0.000730f, -0.000745f, -0.000715f, -0.000475f, -0.000303f + }, + { + +0.001885f, +0.009795f, +0.001229f, -0.002409f, -0.001735f, +0.000354f, +0.001128f, +0.000624f, -0.004072f, -0.001221f, + -0.002894f, -0.001918f, +0.009154f, +0.010463f, +0.032900f, +0.030409f, +0.008799f, -0.011329f, -0.010124f, -0.020016f, + +0.023389f, +0.023661f, -0.004032f, +0.007930f, +0.003996f, +0.009542f, -0.008762f, +0.013222f, -0.014543f, -0.002152f, + +0.011761f, +0.003071f, +0.001703f, -0.002771f, +0.004859f, +0.007685f, +0.002846f, -0.010575f, -0.004953f, -0.001475f, + +0.002690f, +0.004948f, -0.003388f, +0.001671f, -0.000576f, -0.002085f, -0.008936f, +0.002087f, +0.001161f, -0.002310f, + -0.008485f, -0.002488f, -0.001502f, -0.000642f, +0.001447f, -0.007028f, +0.001500f, +0.000494f, -0.000391f, -0.001646f, + -0.000250f, -0.001360f, -0.002664f, -0.000561f, -0.001083f, +0.000183f, -0.000492f, +0.000122f, +0.001131f, +0.001796f, + -0.000688f, -0.000253f, -0.000065f, +0.001549f, -0.000340f, +0.000265f, -0.000368f, +0.000222f, -0.002606f, -0.000486f, + -0.002104f, -0.000121f, +0.000886f, +0.001570f, +0.000744f, +0.000342f, -0.000333f, +0.001002f, +0.000039f, -0.000735f, + +0.000026f, -0.000655f, -0.000375f, -0.001483f, -0.000722f, -0.000317f + }, + { + -0.001398f, -0.287156f, -0.024284f, -0.006410f, +0.009638f, +0.007504f, +0.002538f, +0.002562f, -0.000102f, -0.006720f, + +0.006180f, -0.012397f, -0.003761f, -0.014332f, +0.007201f, +0.012274f, +0.006466f, +0.012143f, -0.007925f, +0.007616f, + +0.004154f, +0.013534f, -0.000915f, +0.001994f, -0.001717f, +0.002814f, +0.009533f, +0.001971f, +0.002767f, +0.003471f, + -0.003355f, +0.000662f, -0.002680f, +0.005324f, -0.004022f, -0.001345f, -0.007502f, +0.002154f, +0.004386f, +0.004810f, + +0.011012f, -0.003817f, +0.000870f, +0.001282f, +0.000722f, +0.000824f, +0.003336f, -0.002458f, -0.000228f, +0.001597f, + +0.002087f, -0.001414f, -0.002354f, +0.003904f, -0.001169f, -0.003528f, -0.000029f, -0.001130f, -0.000168f, -0.000508f, + -0.002783f, -0.000277f, -0.000614f, +0.000900f, +0.001331f, +0.001799f, +0.002985f, -0.000223f, +0.000367f, -0.000127f, + +0.000578f, -0.002827f, -0.000176f, -0.000599f, +0.000440f, +0.001193f, -0.000403f, +0.000289f, +0.000742f, +0.002033f, + -0.001775f, +0.000037f, +0.000757f, -0.001404f, +0.001176f, +0.000982f, +0.001618f, +0.000140f, -0.000842f, +0.000158f, + -0.000151f, -0.001417f, -0.000113f, +0.000012f, +0.000151f, +0.000855f + }, + { + -0.006485f, -0.025973f, -0.004124f, +0.008033f, -0.003028f, -0.006111f, +0.009161f, -0.002287f, +0.000197f, -0.001247f, + -0.010643f, +0.001522f, -0.008185f, -0.009793f, -0.003250f, +0.004381f, +0.020014f, +0.013656f, +0.018731f, +0.009169f, + +0.004980f, +0.023170f, -0.007382f, +0.005027f, -0.004909f, +0.014523f, -0.005119f, -0.016895f, -0.010452f, -0.006347f, + +0.003523f, -0.008212f, -0.005223f, +0.001054f, -0.009840f, -0.003613f, -0.010226f, -0.004918f, -0.001245f, -0.003539f, + -0.000438f, +0.006718f, +0.003547f, -0.007081f, -0.000479f, -0.002243f, -0.004746f, -0.000175f, -0.000189f, -0.004480f, + +0.001048f, -0.002628f, +0.004124f, -0.002946f, -0.000012f, +0.002815f, -0.005805f, +0.002636f, -0.000842f, -0.004383f, + -0.001064f, -0.001505f, -0.000302f, -0.003863f, -0.003401f, -0.000495f, -0.000040f, +0.000098f, +0.001415f, -0.001071f, + +0.001689f, +0.000135f, -0.000092f, +0.001183f, +0.001640f, +0.000432f, +0.002054f, +0.000630f, +0.001480f, +0.001117f, + +0.001756f, +0.000052f, -0.000059f, +0.001478f, -0.000415f, +0.001592f, -0.000275f, -0.000200f, +0.000599f, -0.001081f, + -0.001392f, +0.000006f, -0.000064f, -0.000057f, -0.000118f, -0.000590f + }, + { + +0.025090f, -0.201293f, -0.000988f, +0.006277f, +0.006425f, -0.005305f, -0.000039f, +0.000711f, +0.009397f, -0.005769f, + -0.001961f, +0.002757f, -0.001528f, +0.003362f, +0.005854f, -0.006889f, +0.008557f, -0.001082f, +0.016908f, +0.010033f, + -0.000211f, +0.003697f, -0.002309f, +0.001352f, -0.009656f, -0.000860f, -0.010933f, -0.001511f, +0.002248f, -0.006343f, + -0.000943f, -0.000515f, -0.001661f, -0.002756f, -0.004713f, -0.003654f, +0.002278f, +0.000281f, +0.000624f, -0.003887f, + +0.001208f, -0.006277f, +0.001194f, +0.000364f, -0.000874f, -0.000403f, -0.002870f, -0.000006f, -0.001615f, +0.003379f, + +0.001380f, +0.001757f, -0.002599f, -0.001439f, +0.003595f, +0.002524f, +0.003394f, +0.000905f, -0.000837f, +0.000258f, + -0.000939f, -0.000311f, -0.000368f, -0.000389f, +0.001572f, -0.001748f, -0.002426f, +0.000871f, -0.002182f, -0.002444f, + +0.002835f, +0.001252f, +0.001476f, -0.000139f, +0.000947f, -0.000123f, +0.000071f, +0.001168f, +0.001618f, +0.000830f, + -0.000543f, +0.000909f, +0.000223f, +0.001345f, -0.000142f, +0.001060f, +0.000097f, -0.000372f, +0.000451f, -0.000090f, + -0.000247f, -0.000584f, -0.000281f, +0.000581f, +0.000439f, +0.000625f + }, + { + -0.003454f, -0.065734f, +0.005207f, -0.003682f, -0.000253f, +0.000717f, +0.005409f, -0.000890f, +0.001779f, +0.004638f, + +0.006758f, +0.003725f, -0.002322f, -0.037407f, -0.021318f, +0.012839f, -0.000154f, -0.003260f, -0.010935f, -0.003038f, + +0.016322f, +0.003844f, -0.014519f, -0.022001f, +0.001680f, +0.022301f, +0.008032f, -0.008357f, +0.012897f, -0.000630f, + -0.004409f, +0.007153f, +0.017395f, -0.003789f, -0.001054f, -0.007960f, +0.006036f, +0.001333f, -0.001514f, +0.001616f, + -0.003044f, +0.003333f, +0.002291f, -0.003810f, +0.000300f, +0.000207f, +0.007593f, +0.001935f, +0.001872f, +0.003709f, + +0.003983f, -0.003553f, -0.001779f, -0.000659f, -0.003089f, -0.001473f, +0.001185f, -0.002029f, +0.002000f, -0.002798f, + -0.000658f, -0.000284f, -0.000059f, +0.001566f, +0.000864f, +0.000005f, -0.001734f, -0.002328f, -0.000490f, -0.001666f, + +0.001163f, -0.001409f, -0.000591f, +0.000931f, +0.001094f, -0.001729f, -0.002358f, -0.001159f, -0.000125f, -0.000238f, + +0.001528f, -0.002330f, +0.000021f, +0.000550f, +0.000826f, +0.000444f, -0.000249f, -0.000494f, -0.000485f, -0.000955f, + -0.000568f, -0.000406f, +0.000200f, +0.000718f, -0.000345f, +0.000483f + }, + { + +0.101952f, +0.010906f, -0.006288f, -0.021925f, +0.003011f, -0.022170f, +0.024229f, +0.016045f, +0.004467f, +0.014644f, + +0.006182f, +0.007930f, -0.011807f, +0.013675f, -0.007654f, +0.006675f, -0.007217f, +0.002888f, +0.001257f, +0.012371f, + +0.001650f, -0.000303f, -0.005366f, +0.007600f, +0.006712f, +0.021560f, +0.018939f, +0.004970f, -0.005540f, -0.004667f, + +0.003160f, -0.004382f, -0.005135f, +0.000095f, +0.005070f, -0.003572f, -0.003085f, +0.000141f, +0.006202f, +0.000703f, + +0.009285f, +0.000706f, +0.003482f, +0.003015f, +0.003149f, -0.008074f, -0.001162f, +0.006471f, -0.001407f, +0.004916f, + +0.003134f, +0.011052f, +0.000621f, -0.000665f, -0.004126f, -0.003112f, +0.000231f, +0.001545f, -0.000861f, -0.001200f, + -0.000784f, -0.000637f, +0.000710f, -0.001050f, -0.006191f, -0.000973f, -0.002113f, +0.002024f, -0.002684f, -0.002101f, + +0.002167f, -0.001357f, -0.001665f, +0.001127f, +0.000230f, -0.001451f, +0.002671f, +0.002552f, +0.000157f, +0.000474f, + -0.000573f, +0.000572f, -0.000149f, +0.001517f, +0.000587f, -0.001163f, +0.000489f, -0.000045f, +0.000351f, +0.000123f, + +0.000126f, -0.000508f, -0.000438f, +0.000616f, +0.000048f, -0.000083f + }, + { + +0.000353f, -0.088462f, -0.002842f, -0.000404f, +0.005743f, -0.000310f, +0.004584f, +0.002871f, +0.004698f, -0.003567f, + -0.002869f, -0.015154f, +0.009230f, -0.003437f, +0.060992f, -0.008814f, +0.004323f, +0.001022f, -0.000714f, +0.014767f, + -0.007442f, -0.012539f, +0.007095f, -0.009838f, +0.000163f, -0.006026f, +0.013267f, -0.008562f, +0.007304f, -0.007825f, + -0.004410f, +0.005356f, +0.009724f, +0.003038f, -0.006120f, +0.003758f, -0.000040f, -0.009132f, +0.009038f, +0.007575f, + +0.003885f, -0.001464f, -0.007974f, -0.001824f, +0.004281f, -0.002081f, +0.002426f, +0.000378f, -0.002987f, -0.001922f, + +0.003292f, -0.001881f, +0.001013f, -0.003132f, +0.000256f, +0.001212f, -0.002095f, +0.003665f, +0.000154f, -0.004614f, + +0.001372f, -0.000680f, +0.002547f, +0.000157f, -0.000936f, +0.002407f, +0.000750f, -0.001851f, -0.001547f, +0.000873f, + -0.000733f, -0.000484f, +0.001487f, +0.000725f, +0.000729f, -0.000442f, +0.003136f, +0.001319f, +0.000061f, -0.001044f, + -0.000931f, +0.000147f, -0.000143f, +0.000734f, -0.000808f, -0.000277f, +0.000097f, -0.001636f, +0.000243f, +0.000577f, + -0.000614f, -0.000233f, -0.000607f, -0.000206f, +0.000032f, -0.001296f + }, + { + +0.041458f, +0.151156f, +0.031011f, -0.019178f, -0.016562f, -0.038871f, +0.004207f, -0.010546f, +0.008062f, +0.006296f, + -0.000777f, +0.009160f, -0.015217f, +0.011732f, -0.001561f, +0.008715f, +0.001922f, +0.002801f, -0.006506f, +0.010333f, + +0.006667f, -0.008176f, +0.009325f, -0.003632f, +0.010323f, -0.002369f, +0.014562f, -0.006408f, -0.001239f, -0.003592f, + +0.009455f, -0.000695f, -0.006970f, +0.010373f, +0.001535f, -0.000629f, +0.000371f, +0.003294f, +0.009438f, -0.002343f, + -0.010270f, -0.003313f, +0.000841f, +0.006529f, +0.010025f, +0.001166f, +0.005365f, -0.004758f, -0.001993f, +0.003357f, + -0.003944f, +0.000103f, -0.003915f, -0.001274f, -0.003034f, +0.001802f, +0.000031f, -0.001608f, +0.004122f, -0.000159f, + -0.002835f, +0.003501f, +0.000668f, +0.002575f, +0.000292f, -0.000227f, +0.001452f, +0.001915f, +0.000554f, -0.001414f, + +0.001700f, +0.001917f, +0.002115f, +0.001611f, +0.002202f, -0.000367f, -0.000409f, +0.001190f, +0.000174f, +0.000157f, + -0.002151f, +0.000358f, +0.001882f, +0.000021f, +0.000985f, -0.000320f, +0.000216f, +0.000066f, +0.000539f, +0.001664f, + +0.001234f, +0.000478f, +0.000158f, +0.000300f, -0.000278f, -0.000513f + } + }, + { + { + +0.000631f, +0.021361f, -0.000159f, +0.023536f, -0.003921f, +0.001508f, +0.000702f, -0.005872f, +0.004194f, +0.004573f, + -0.004539f, -0.009018f, +0.004472f, -0.004773f, +0.004024f, +0.006612f, +0.008595f, +0.014722f, -0.021854f, +0.017780f, + +0.000430f, -0.005252f, -0.007239f, +0.014315f, +0.004384f, +0.023225f, -0.002188f, -0.004764f, +0.006786f, +0.009953f, + +0.000638f, -0.000442f, -0.006063f, -0.002604f, -0.001076f, -0.009142f, -0.001049f, +0.006936f, +0.001781f, -0.000275f, + +0.006315f, +0.002247f, -0.002801f, -0.002180f, -0.003693f, +0.003939f, +0.002591f, +0.001335f, -0.000471f, -0.004888f, + +0.001006f, +0.002240f, +0.002882f, -0.002631f, -0.002018f, +0.000412f, -0.002347f, +0.001006f, -0.000909f, -0.000119f, + +0.003029f, -0.001618f, -0.001269f, +0.002169f, +0.000476f, -0.003340f, +0.001882f, -0.001580f, -0.000332f, -0.000460f, + -0.001297f, +0.000062f, -0.001159f, +0.000117f, +0.000872f, +0.001678f, -0.000329f, +0.000582f, +0.000920f, -0.000938f, + +0.000741f, +0.000682f, +0.000486f, +0.000375f, -0.000250f, +0.000507f, -0.000124f, -0.000174f, +0.000567f, -0.000259f, + +0.000597f, -0.000330f, -0.000583f, -0.000346f, +0.000693f, -0.000135f + }, + { + -0.006554f, -0.029139f, +0.013403f, +0.015156f, -0.001181f, +0.002733f, -0.005715f, +0.005818f, -0.008736f, -0.003809f, + +0.004784f, -0.002457f, +0.007656f, +0.001719f, -0.004707f, +0.004940f, -0.005003f, +0.009052f, +0.011205f, +0.005579f, + +0.000246f, +0.010129f, -0.004372f, -0.005629f, -0.008566f, +0.013516f, +0.005390f, -0.006202f, +0.002422f, +0.002306f, + +0.001437f, -0.001234f, +0.008381f, -0.009896f, -0.001341f, -0.001198f, +0.007532f, -0.001671f, -0.004980f, -0.004420f, + -0.001178f, +0.007175f, -0.003901f, +0.003379f, -0.000511f, +0.000986f, -0.008256f, +0.001986f, -0.002849f, +0.004612f, + +0.003502f, -0.002178f, -0.001029f, +0.001803f, +0.002256f, -0.001746f, -0.002061f, +0.001156f, +0.000070f, +0.000966f, + +0.000449f, +0.001491f, -0.001111f, -0.000088f, +0.003727f, +0.000743f, +0.001651f, -0.001505f, +0.001757f, -0.000229f, + +0.000319f, -0.000847f, +0.001046f, -0.001100f, +0.001713f, +0.000180f, -0.000570f, -0.001361f, +0.001272f, -0.000077f, + +0.001218f, -0.000480f, +0.000338f, -0.001128f, +0.001033f, +0.000638f, +0.000325f, -0.000229f, +0.000452f, +0.000366f, + +0.000205f, -0.000047f, -0.000438f, +0.000432f, -0.000628f, -0.000336f + }, + { + -0.001139f, +0.031601f, -0.006240f, +0.050468f, +0.012818f, -0.000100f, -0.002876f, -0.002265f, -0.002594f, -0.000267f, + -0.004235f, -0.007781f, -0.000787f, +0.005202f, +0.011325f, +0.001165f, +0.000049f, +0.002133f, -0.005411f, +0.002946f, + +0.008286f, -0.000219f, -0.007882f, +0.001754f, -0.006583f, -0.002158f, -0.003914f, +0.007313f, +0.005980f, -0.001783f, + -0.007100f, -0.002000f, -0.000942f, -0.003204f, +0.005678f, -0.010190f, -0.000902f, +0.005317f, +0.001843f, -0.006358f, + +0.001153f, +0.003350f, +0.000044f, -0.002302f, -0.000756f, -0.000009f, +0.003277f, -0.004151f, +0.002463f, +0.000477f, + +0.002386f, +0.000924f, +0.002064f, +0.000047f, -0.000235f, -0.001159f, -0.001432f, +0.000799f, +0.002663f, +0.000636f, + +0.000232f, +0.000234f, -0.002318f, +0.001231f, -0.002968f, +0.000164f, +0.000303f, -0.001432f, -0.003058f, -0.000781f, + +0.000032f, -0.001116f, +0.001035f, +0.001501f, +0.001578f, +0.001012f, -0.000707f, +0.000873f, -0.000120f, +0.000960f, + +0.001142f, +0.000392f, -0.001362f, +0.000055f, +0.000319f, -0.001015f, +0.000325f, -0.000200f, -0.001056f, -0.000081f, + -0.000147f, +0.000616f, +0.000140f, -0.000050f, +0.000129f, +0.000526f + }, + { + +0.001177f, -0.040975f, +0.000693f, +0.002093f, -0.000965f, -0.000222f, +0.000412f, -0.002431f, -0.005064f, +0.000097f, + +0.004178f, -0.001963f, -0.002497f, +0.006976f, -0.011023f, -0.026560f, +0.001475f, -0.006399f, +0.007584f, +0.015222f, + -0.007363f, +0.002503f, -0.003983f, +0.001909f, -0.015330f, +0.016821f, +0.005356f, +0.000158f, +0.000933f, -0.002520f, + +0.000231f, -0.006784f, -0.013107f, +0.001979f, -0.003092f, -0.001635f, -0.006671f, +0.005604f, +0.001853f, -0.001317f, + -0.004032f, -0.003587f, -0.003572f, +0.000414f, +0.004345f, -0.002806f, +0.003546f, -0.001337f, -0.001923f, +0.000101f, + +0.000880f, -0.003533f, -0.001025f, +0.002872f, -0.000050f, +0.001239f, +0.002564f, -0.000562f, +0.001581f, -0.000168f, + -0.001475f, +0.000767f, -0.000901f, -0.000238f, +0.000917f, +0.001117f, +0.000258f, -0.002838f, -0.000151f, -0.000622f, + -0.001427f, +0.000387f, -0.000607f, +0.001641f, +0.000377f, +0.000954f, -0.001079f, -0.000571f, +0.000108f, +0.000621f, + -0.000362f, +0.000247f, +0.000070f, +0.000632f, +0.000297f, +0.000642f, +0.000187f, -0.000884f, -0.000750f, -0.000422f, + +0.000160f, -0.000044f, +0.000369f, +0.000011f, -0.000232f, +0.000008f + }, + { + +0.040979f, -0.065364f, +0.006996f, -0.040753f, -0.003544f, +0.002879f, +0.005167f, +0.004927f, -0.008633f, -0.005310f, + -0.005057f, +0.012006f, +0.013922f, -0.002284f, -0.005686f, -0.006705f, -0.009935f, +0.010960f, -0.001970f, -0.002534f, + +0.003523f, -0.008500f, +0.005741f, -0.000296f, -0.004787f, +0.002635f, +0.006899f, -0.005806f, -0.006243f, -0.003798f, + -0.006493f, +0.003721f, -0.003026f, -0.002471f, +0.002263f, +0.000786f, +0.007359f, +0.002362f, +0.004714f, -0.003132f, + -0.004311f, -0.001663f, -0.002869f, +0.003394f, +0.000546f, -0.003878f, +0.005708f, +0.002265f, +0.000538f, -0.002846f, + -0.000399f, -0.001578f, +0.000799f, -0.001972f, -0.001078f, -0.002067f, +0.001531f, -0.002782f, -0.002053f, +0.001760f, + -0.000787f, -0.000979f, +0.000617f, +0.001515f, +0.000343f, -0.001148f, +0.000148f, +0.001014f, -0.000527f, +0.000299f, + +0.001020f, +0.000808f, +0.000869f, +0.000278f, +0.000603f, +0.001699f, +0.000706f, -0.000180f, -0.000429f, -0.001490f, + -0.000668f, +0.000014f, -0.000099f, -0.000323f, +0.000093f, -0.000747f, +0.000715f, -0.000401f, -0.000026f, +0.000133f, + +0.000558f, -0.000284f, +0.000120f, -0.000291f, -0.000259f, +0.000579f + }, + { + -0.000826f, +0.004562f, +0.004455f, +0.004613f, -0.002718f, -0.000247f, +0.000163f, +0.002608f, +0.000124f, +0.001448f, + +0.001174f, +0.002764f, -0.004265f, +0.001013f, +0.032336f, -0.016219f, +0.014624f, +0.003873f, -0.011991f, +0.007180f, + +0.008399f, +0.008129f, +0.000732f, -0.021001f, +0.004429f, +0.020857f, -0.034092f, -0.008120f, -0.005603f, +0.004712f, + +0.017901f, -0.003065f, -0.000642f, -0.003292f, -0.005793f, +0.000895f, +0.001088f, +0.000950f, -0.001805f, +0.000048f, + +0.001109f, -0.005725f, -0.003624f, -0.000463f, -0.000704f, +0.001424f, +0.001437f, -0.002206f, -0.000969f, +0.001880f, + -0.001058f, +0.000213f, +0.000570f, -0.000096f, -0.001553f, +0.000235f, +0.001136f, +0.000653f, -0.000123f, +0.000893f, + -0.000178f, -0.002814f, -0.000255f, -0.001722f, -0.001691f, -0.001995f, +0.001272f, +0.000252f, +0.000782f, -0.001203f, + +0.000797f, +0.002411f, +0.001077f, -0.001309f, -0.000466f, +0.000642f, -0.001069f, -0.000310f, -0.000047f, +0.000257f, + -0.000044f, +0.001785f, +0.000806f, -0.000235f, -0.000468f, -0.000189f, +0.000618f, +0.001160f, -0.000101f, +0.000131f, + +0.000244f, -0.000600f, +0.000564f, -0.000020f, +0.000889f, +0.000377f + }, + { + +0.047506f, +0.111960f, +0.019853f, +0.019490f, -0.009139f, +0.002914f, +0.004713f, +0.013173f, -0.013656f, +0.006643f, + -0.006758f, +0.015686f, -0.001382f, +0.009802f, -0.001966f, -0.007536f, -0.009289f, +0.008301f, +0.002379f, -0.005271f, + -0.002176f, -0.002880f, +0.006381f, -0.010587f, -0.003652f, -0.003510f, -0.002759f, +0.005214f, +0.000271f, -0.001667f, + -0.005257f, +0.001730f, +0.004048f, -0.005472f, +0.000577f, -0.000657f, +0.002115f, +0.000895f, +0.001977f, +0.004924f, + -0.004763f, +0.002682f, -0.002713f, -0.005710f, +0.000214f, -0.003127f, +0.008754f, -0.000391f, +0.001875f, -0.003417f, + -0.001382f, +0.000912f, +0.003626f, -0.003225f, -0.001088f, -0.003806f, -0.000912f, +0.000526f, +0.000460f, +0.000026f, + +0.003533f, +0.001491f, +0.001046f, +0.002258f, -0.000934f, +0.000256f, +0.001616f, +0.000567f, +0.000832f, -0.003255f, + +0.000767f, -0.000201f, -0.001252f, +0.000243f, -0.000118f, +0.001694f, -0.000362f, -0.001905f, +0.000577f, +0.002073f, + -0.000939f, +0.000383f, -0.000468f, -0.001224f, +0.000352f, -0.000382f, +0.000280f, +0.000053f, -0.000221f, +0.000298f, + -0.000141f, -0.000219f, +0.000230f, +0.000050f, +0.000257f, -0.000105f + }, + { + -0.000453f, -0.001761f, +0.007672f, +0.005596f, +0.000891f, +0.001428f, +0.000328f, +0.000957f, -0.002814f, +0.003283f, + +0.003408f, -0.005802f, -0.004166f, +0.004894f, +0.021119f, +0.018246f, -0.001263f, -0.015794f, -0.001761f, -0.024170f, + -0.007519f, -0.005279f, -0.012870f, +0.006113f, +0.000411f, +0.014167f, -0.004092f, +0.012190f, -0.005777f, -0.010690f, + +0.001307f, -0.014655f, +0.002952f, +0.005461f, -0.006357f, -0.003024f, -0.004958f, -0.008264f, +0.003031f, +0.001090f, + -0.000230f, +0.002010f, -0.002782f, -0.000817f, -0.002303f, +0.001571f, -0.005618f, +0.005233f, +0.000119f, +0.000391f, + -0.003709f, -0.000733f, -0.002221f, -0.003033f, +0.003358f, -0.004820f, +0.003277f, +0.002609f, +0.000563f, -0.001764f, + -0.003356f, -0.003883f, -0.001458f, +0.001403f, +0.000203f, -0.000090f, -0.001072f, -0.001953f, -0.001728f, +0.001415f, + +0.000622f, -0.000589f, -0.001222f, +0.001012f, -0.000161f, -0.000833f, -0.001990f, -0.000379f, -0.000895f, +0.000257f, + -0.000356f, +0.000372f, -0.000167f, +0.000091f, -0.001143f, +0.000058f, -0.001044f, +0.000502f, -0.000550f, -0.000284f, + +0.001015f, +0.000021f, +0.000416f, -0.000184f, -0.000513f, -0.000258f + }, + { + +0.037579f, -0.193603f, +0.027441f, +0.013520f, -0.009866f, +0.000176f, -0.004153f, +0.000581f, -0.001421f, -0.011329f, + +0.005950f, -0.007194f, +0.002778f, -0.013479f, -0.005520f, -0.007407f, -0.008157f, -0.006230f, -0.013551f, +0.003002f, + -0.002418f, +0.007909f, -0.008628f, -0.001629f, +0.001768f, +0.001834f, +0.005664f, -0.002945f, +0.000957f, +0.005106f, + -0.004328f, +0.001425f, -0.003623f, +0.006666f, -0.002560f, +0.007055f, -0.004876f, +0.000082f, -0.000549f, +0.002542f, + +0.006909f, -0.005377f, -0.001917f, -0.002319f, +0.001705f, -0.001484f, -0.003037f, -0.002786f, -0.000297f, -0.005651f, + +0.002775f, +0.000583f, -0.001020f, +0.006648f, -0.003365f, -0.002001f, +0.001355f, +0.002692f, +0.002308f, -0.000783f, + -0.003054f, +0.001221f, -0.001122f, -0.000793f, -0.000935f, -0.002025f, -0.000453f, -0.000546f, -0.001430f, -0.000837f, + +0.002023f, -0.000717f, +0.000526f, -0.000745f, -0.000559f, -0.000044f, -0.000808f, +0.000962f, +0.000693f, +0.001158f, + -0.001920f, +0.000623f, +0.001404f, -0.001074f, +0.000649f, -0.000733f, -0.000753f, -0.000660f, -0.000359f, +0.000834f, + +0.000441f, -0.000474f, +0.000165f, -0.000662f, -0.000033f, +0.000709f + }, + { + +0.005367f, -0.020868f, -0.014177f, +0.008040f, -0.007105f, -0.014427f, -0.000378f, +0.002574f, +0.002614f, -0.002024f, + -0.001543f, +0.006935f, +0.002769f, +0.007312f, +0.013994f, +0.014076f, +0.002842f, +0.003229f, -0.001861f, +0.003149f, + +0.002990f, +0.008618f, -0.006728f, +0.015560f, +0.000618f, +0.010750f, -0.009151f, -0.006324f, +0.001051f, -0.010723f, + +0.001446f, -0.000815f, -0.004726f, +0.003195f, -0.003966f, +0.004162f, +0.002802f, +0.003016f, +0.000549f, +0.004120f, + -0.000196f, -0.000597f, +0.005862f, -0.002244f, +0.002670f, -0.000374f, -0.004131f, -0.000123f, +0.002857f, -0.002243f, + +0.001647f, -0.002131f, +0.005007f, -0.004441f, +0.000207f, +0.002577f, -0.006388f, +0.001342f, -0.001001f, +0.000244f, + +0.002437f, -0.000797f, +0.002036f, -0.001608f, -0.002371f, +0.000004f, -0.001213f, -0.001241f, +0.000619f, -0.000062f, + +0.000083f, +0.000530f, +0.000632f, -0.000257f, +0.000193f, -0.000668f, +0.001569f, +0.000520f, -0.000363f, -0.000284f, + +0.001120f, -0.000123f, -0.000884f, +0.000166f, -0.001266f, +0.001194f, -0.000095f, -0.000744f, -0.000427f, -0.000510f, + -0.000245f, +0.000652f, +0.001129f, +0.000288f, +0.000125f, +0.000072f + }, + { + -0.015995f, -0.228278f, +0.013865f, -0.001427f, -0.007200f, -0.028106f, +0.016840f, -0.003688f, -0.003905f, -0.006498f, + +0.009538f, +0.006558f, -0.010387f, -0.000697f, +0.020684f, -0.004495f, +0.009447f, +0.000426f, +0.013689f, +0.001422f, + -0.003799f, -0.001771f, -0.005734f, -0.001075f, -0.007814f, +0.003513f, -0.003215f, +0.006936f, -0.003054f, -0.008347f, + -0.000909f, +0.001628f, +0.000619f, -0.003021f, +0.008652f, +0.008984f, +0.000422f, -0.001258f, +0.003822f, -0.002811f, + +0.002470f, -0.000186f, +0.005657f, +0.000527f, -0.001390f, +0.001989f, -0.000688f, -0.000236f, +0.001896f, +0.004233f, + +0.000965f, -0.000334f, -0.003387f, -0.001149f, +0.001277f, +0.000100f, +0.002160f, -0.000594f, +0.002390f, +0.000772f, + -0.004106f, -0.001095f, -0.001262f, -0.001088f, +0.001394f, +0.000102f, -0.000244f, +0.001111f, -0.001866f, -0.001480f, + +0.000666f, -0.001081f, -0.000082f, -0.002160f, -0.000656f, -0.000557f, +0.000660f, -0.000860f, -0.000805f, +0.000777f, + -0.000612f, +0.000660f, -0.000508f, +0.000478f, +0.000586f, -0.000409f, -0.000097f, +0.000167f, +0.000375f, -0.000657f, + -0.000749f, -0.000497f, +0.000029f, +0.000130f, +0.000133f, +0.000306f + }, + { + +0.001128f, -0.064215f, -0.000831f, -0.001152f, +0.000715f, -0.006049f, -0.001143f, -0.004684f, -0.003105f, -0.002436f, + +0.000122f, +0.001158f, -0.005401f, -0.007521f, +0.019881f, +0.004639f, -0.005120f, -0.006649f, -0.008428f, -0.007810f, + -0.011720f, -0.015454f, -0.007950f, -0.020334f, +0.011817f, +0.014160f, -0.015114f, -0.015760f, +0.006902f, -0.003913f, + +0.011691f, +0.010905f, +0.010796f, -0.008309f, -0.000711f, -0.001784f, +0.015884f, +0.005344f, +0.001296f, -0.000781f, + -0.001470f, +0.000806f, -0.000358f, -0.003000f, +0.003243f, +0.004073f, +0.003823f, -0.003219f, +0.005121f, +0.003943f, + +0.000454f, -0.002146f, -0.001797f, +0.000338f, -0.002359f, -0.001799f, +0.001942f, -0.000110f, +0.003680f, -0.000185f, + -0.001796f, +0.000003f, -0.000128f, -0.001220f, +0.001080f, -0.000249f, -0.001763f, -0.001037f, +0.002338f, -0.001378f, + -0.000206f, -0.001135f, -0.001436f, +0.000074f, +0.001757f, +0.000134f, -0.000476f, -0.000192f, +0.000772f, -0.000736f, + +0.000342f, -0.000859f, +0.001262f, -0.000445f, -0.000727f, -0.000545f, -0.000242f, -0.000485f, -0.000112f, -0.000244f, + -0.000159f, +0.000001f, -0.000112f, +0.000141f, -0.000958f, -0.000120f + }, + { + -0.077811f, -0.244827f, -0.000149f, +0.013592f, +0.020904f, -0.041144f, +0.007104f, +0.015484f, +0.013200f, +0.015031f, + -0.007558f, +0.003175f, -0.014598f, +0.021524f, -0.001590f, -0.004614f, -0.009465f, -0.004226f, -0.004405f, +0.009057f, + +0.004638f, +0.004854f, +0.003724f, +0.007051f, -0.013722f, -0.001833f, +0.007053f, -0.007511f, -0.002149f, +0.000981f, + -0.001645f, -0.009694f, -0.005689f, -0.006588f, -0.003691f, -0.005500f, +0.004273f, +0.005848f, -0.001512f, -0.007340f, + -0.000698f, -0.007603f, +0.003318f, +0.003241f, +0.002258f, -0.002197f, -0.002140f, +0.006246f, +0.002869f, +0.007072f, + -0.001234f, +0.008528f, +0.000773f, -0.005865f, -0.005335f, -0.002231f, -0.002135f, +0.002429f, +0.000261f, +0.001369f, + +0.000370f, -0.001432f, -0.001680f, -0.000898f, -0.001742f, +0.001285f, -0.001440f, +0.003931f, +0.000601f, -0.000568f, + +0.001512f, -0.000484f, -0.001501f, +0.000005f, +0.000011f, -0.001305f, +0.001138f, +0.000057f, -0.000137f, +0.000837f, + +0.000142f, +0.001130f, -0.000954f, +0.001083f, +0.000399f, -0.000188f, +0.001326f, -0.000055f, +0.000175f, -0.000195f, + -0.000343f, -0.000955f, -0.001111f, +0.000415f, -0.000323f, -0.000193f + }, + { + -0.001276f, -0.087759f, -0.005329f, -0.000749f, +0.001817f, -0.000745f, +0.003044f, -0.002693f, +0.001649f, +0.002512f, + +0.004156f, -0.002361f, +0.006640f, -0.019800f, +0.032100f, -0.009676f, -0.007050f, -0.001642f, -0.005801f, +0.024524f, + +0.008524f, -0.005609f, +0.007071f, -0.001600f, +0.011633f, +0.000429f, +0.015935f, -0.013386f, +0.016748f, -0.002055f, + +0.002903f, +0.003333f, -0.006391f, +0.001222f, +0.000209f, +0.000670f, +0.003070f, -0.009904f, +0.002081f, +0.005569f, + +0.000915f, +0.002986f, -0.002108f, -0.000393f, +0.004053f, -0.002288f, -0.000082f, +0.001652f, +0.000954f, -0.000377f, + +0.000300f, -0.003615f, +0.004486f, +0.000753f, +0.003591f, +0.001564f, -0.002565f, +0.003498f, +0.000060f, -0.001712f, + +0.003107f, +0.002740f, +0.002810f, -0.000669f, -0.002057f, -0.000133f, +0.000216f, +0.000688f, -0.001044f, +0.000220f, + +0.001285f, +0.001030f, -0.000140f, -0.000414f, -0.000099f, -0.001593f, +0.001576f, -0.001360f, -0.000758f, -0.000133f, + +0.000509f, +0.001473f, +0.000201f, +0.000641f, -0.000660f, +0.000701f, +0.000916f, -0.001175f, +0.001057f, +0.000265f, + -0.000366f, +0.000162f, -0.000242f, +0.000244f, +0.000270f, -0.000881f + }, + { + -0.057711f, +0.001207f, +0.035056f, -0.001933f, -0.011082f, -0.009915f, +0.028519f, -0.001835f, +0.015924f, +0.011410f, + -0.010572f, +0.003134f, -0.009600f, +0.004862f, -0.007872f, +0.010400f, -0.012294f, -0.010325f, -0.009190f, +0.012665f, + +0.005155f, -0.014240f, +0.006356f, +0.000549f, +0.011248f, -0.009164f, +0.004025f, -0.004699f, -0.001141f, -0.003789f, + +0.001384f, -0.004152f, -0.009310f, +0.008780f, +0.003704f, +0.001303f, +0.000088f, +0.003000f, +0.005942f, +0.001298f, + -0.009248f, +0.001437f, +0.004359f, -0.000874f, +0.004071f, +0.003893f, +0.006408f, -0.003830f, -0.000738f, +0.004900f, + -0.001621f, -0.000368f, -0.004016f, +0.001821f, -0.001163f, +0.000589f, -0.000662f, -0.000721f, +0.003545f, -0.000960f, + -0.002676f, +0.002730f, -0.000989f, +0.001748f, -0.000597f, -0.000966f, +0.000680f, +0.001561f, +0.000857f, -0.001947f, + -0.000422f, -0.000333f, +0.000022f, -0.001005f, +0.000869f, +0.000206f, -0.000681f, +0.000776f, -0.000654f, -0.000265f, + -0.001336f, -0.000617f, +0.001351f, -0.000554f, +0.001223f, -0.000766f, +0.000429f, -0.000128f, -0.000384f, -0.000014f, + -0.000073f, -0.000017f, +0.000229f, +0.000092f, -0.000702f, -0.000045f + } + }, + { + { + -0.000973f, +0.017293f, +0.000352f, -0.001860f, +0.016338f, +0.000010f, +0.003004f, -0.002471f, -0.001330f, +0.005912f, + -0.003827f, -0.004653f, -0.007870f, -0.007764f, +0.005155f, +0.005197f, +0.011032f, +0.004662f, +0.009447f, -0.001661f, + +0.001724f, +0.003240f, -0.008783f, +0.007828f, +0.004879f, +0.018418f, +0.001860f, -0.005210f, +0.004582f, +0.002066f, + -0.000556f, -0.000340f, -0.004555f, -0.004078f, -0.005754f, -0.004611f, +0.002187f, -0.000515f, -0.001459f, -0.001223f, + +0.009161f, +0.004824f, -0.006005f, -0.002966f, -0.003901f, +0.002047f, +0.002166f, -0.001868f, +0.001548f, -0.002010f, + -0.000277f, +0.003032f, -0.000936f, +0.000032f, -0.000637f, -0.000100f, -0.001396f, -0.000412f, -0.001020f, +0.001381f, + +0.000239f, -0.000758f, -0.000129f, +0.001519f, -0.001286f, +0.001081f, -0.001050f, +0.000425f, -0.001035f, -0.000133f, + -0.001302f, +0.000410f, -0.001168f, +0.000010f, +0.000556f, +0.000405f, +0.000855f, +0.000351f, +0.000647f, -0.000512f, + +0.000945f, +0.000581f, -0.000101f, +0.001388f, +0.000040f, +0.000400f, -0.000324f, +0.000297f, -0.000367f, +0.000526f, + -0.000227f, -0.000376f, -0.000210f, -0.000081f, -0.000211f, +0.000190f + }, + { + +0.009763f, +0.004454f, -0.034351f, -0.018608f, +0.016159f, -0.000144f, +0.000234f, -0.005902f, -0.002649f, +0.005296f, + -0.008636f, +0.001683f, +0.005663f, +0.001229f, -0.001300f, -0.003418f, -0.005309f, +0.009072f, +0.006164f, +0.003134f, + +0.001791f, +0.012477f, +0.000292f, -0.011256f, +0.008059f, +0.001602f, +0.000261f, -0.004599f, +0.004050f, +0.005592f, + +0.001246f, -0.006871f, +0.002575f, -0.004830f, +0.000663f, +0.000300f, +0.000570f, -0.000308f, -0.003393f, -0.005693f, + +0.000229f, +0.002155f, +0.002937f, -0.000867f, +0.003095f, -0.004861f, -0.000172f, -0.006154f, -0.001405f, +0.004710f, + +0.003651f, +0.001214f, -0.000083f, -0.000854f, +0.000571f, -0.002675f, +0.003413f, -0.001110f, +0.000114f, +0.002887f, + -0.000772f, +0.001588f, -0.000809f, +0.000189f, +0.001123f, +0.001391f, +0.000226f, +0.000812f, +0.000211f, +0.001036f, + -0.000600f, -0.001631f, -0.000239f, -0.000174f, +0.000726f, -0.000002f, +0.000393f, -0.001519f, +0.000221f, +0.000493f, + +0.000759f, -0.000171f, +0.000310f, -0.000693f, +0.001344f, +0.000431f, -0.000165f, +0.000152f, +0.000384f, +0.000822f, + -0.000046f, +0.000006f, -0.000365f, +0.000418f, -0.000226f, -0.000086f + }, + { + -0.001096f, +0.022313f, -0.004648f, +0.036195f, +0.016938f, +0.000861f, -0.002972f, -0.003099f, -0.001159f, +0.000544f, + -0.005685f, +0.007919f, -0.016394f, +0.008968f, +0.000305f, +0.008267f, +0.000170f, +0.002546f, -0.003156f, +0.011450f, + +0.015241f, -0.005330f, -0.017237f, +0.003558f, +0.000452f, -0.009852f, +0.012480f, -0.003109f, +0.006475f, -0.002289f, + -0.001475f, -0.003500f, -0.006414f, +0.000576f, +0.003587f, -0.005415f, +0.002834f, -0.000711f, -0.001607f, -0.000637f, + +0.003545f, +0.002445f, +0.001064f, -0.004704f, +0.000139f, -0.000935f, +0.001266f, +0.000155f, +0.000030f, +0.000048f, + -0.000040f, +0.001571f, +0.003306f, -0.000390f, -0.000523f, -0.000753f, -0.000540f, +0.000865f, +0.002198f, +0.001500f, + -0.000796f, +0.000698f, -0.000625f, -0.001983f, -0.001337f, -0.000781f, +0.001802f, -0.001302f, -0.002002f, -0.001176f, + -0.000292f, -0.000700f, +0.000623f, +0.002168f, +0.000834f, +0.001414f, +0.000440f, +0.000464f, +0.000328f, +0.000124f, + +0.001609f, -0.000406f, -0.000951f, +0.000342f, +0.000065f, -0.000772f, -0.000494f, +0.000242f, -0.000739f, -0.000295f, + +0.000315f, +0.000686f, -0.000124f, +0.000329f, +0.000039f, -0.000138f + }, + { + +0.001129f, -0.051037f, +0.005440f, +0.002638f, -0.000638f, +0.000794f, -0.001314f, +0.001625f, -0.005840f, +0.003220f, + +0.000222f, -0.004674f, -0.008826f, +0.013927f, -0.024110f, -0.011530f, -0.012142f, +0.026837f, -0.036461f, +0.032834f, + -0.003450f, +0.001357f, +0.000850f, -0.003213f, -0.001174f, +0.003654f, +0.011294f, +0.004884f, +0.001911f, -0.004996f, + -0.001521f, -0.004507f, -0.007145f, +0.000394f, -0.002642f, -0.005366f, +0.008311f, -0.004279f, +0.005295f, -0.001872f, + -0.002038f, -0.004355f, -0.002292f, -0.003412f, +0.004816f, -0.002460f, +0.004662f, -0.000648f, -0.000998f, -0.000883f, + -0.001577f, +0.001020f, -0.002195f, +0.002355f, +0.001704f, +0.002786f, -0.000159f, +0.000117f, +0.000014f, -0.000274f, + -0.000488f, +0.001225f, -0.000264f, +0.000272f, +0.000581f, +0.002108f, +0.001050f, -0.002120f, -0.001619f, +0.000698f, + -0.001430f, -0.000895f, +0.000885f, +0.000677f, +0.000698f, +0.001912f, -0.001119f, -0.000912f, +0.000044f, +0.000663f, + -0.000097f, +0.000478f, -0.000273f, +0.000915f, -0.000038f, +0.000430f, -0.000415f, +0.000052f, -0.000500f, -0.000994f, + +0.000163f, +0.000080f, +0.000454f, +0.000348f, -0.000055f, +0.000100f + }, + { + -0.028478f, +0.008696f, +0.002069f, -0.047326f, +0.014084f, +0.003024f, +0.008180f, +0.000785f, +0.002763f, -0.014122f, + +0.009982f, +0.002187f, +0.011877f, +0.002001f, -0.002959f, -0.008782f, -0.010356f, -0.003530f, -0.000308f, +0.008026f, + -0.004985f, -0.006035f, +0.006968f, -0.004802f, -0.006153f, +0.001570f, +0.000586f, +0.001456f, -0.004596f, -0.006207f, + -0.004321f, +0.000997f, -0.008076f, -0.001141f, +0.004803f, +0.005120f, +0.002410f, +0.003199f, +0.001205f, -0.002583f, + -0.004719f, +0.000482f, +0.001461f, -0.001346f, -0.003129f, +0.002009f, +0.005848f, -0.000235f, +0.000250f, -0.003508f, + -0.004041f, +0.003176f, -0.000849f, -0.002803f, -0.000510f, -0.001715f, +0.001000f, -0.001280f, -0.002865f, -0.000838f, + +0.002052f, -0.001115f, -0.000488f, +0.001463f, -0.000087f, -0.001935f, +0.000138f, -0.000062f, +0.000462f, +0.000450f, + +0.000747f, -0.000739f, +0.001501f, +0.000021f, +0.001406f, +0.000372f, +0.000614f, +0.000631f, -0.001338f, -0.000122f, + -0.001311f, +0.000054f, +0.000537f, -0.000450f, -0.000715f, -0.000086f, -0.000150f, +0.000457f, -0.000936f, +0.000195f, + +0.000055f, -0.000038f, -0.000334f, +0.000082f, -0.000187f, -0.000009f + }, + { + -0.001346f, +0.019723f, -0.000836f, -0.002422f, +0.000419f, -0.001402f, +0.001410f, +0.002104f, -0.001715f, +0.003476f, + -0.000098f, +0.002418f, -0.005293f, +0.003895f, +0.016771f, -0.008781f, -0.007015f, +0.010681f, +0.005818f, -0.003336f, + +0.002709f, +0.008355f, +0.004256f, -0.005528f, -0.010140f, +0.010294f, -0.016610f, -0.009766f, -0.000524f, +0.017874f, + +0.007051f, -0.004353f, -0.004571f, -0.001322f, -0.002126f, +0.004693f, +0.003077f, +0.004233f, -0.002614f, -0.003267f, + +0.003773f, -0.005148f, -0.001282f, -0.000532f, +0.001080f, +0.003930f, -0.002385f, -0.003654f, -0.001653f, +0.003472f, + +0.000307f, -0.001499f, +0.001727f, -0.002549f, -0.000493f, +0.001544f, +0.000097f, -0.000159f, -0.000785f, +0.000290f, + -0.001564f, -0.001262f, -0.000837f, +0.000078f, -0.003199f, -0.001011f, -0.000108f, +0.000327f, +0.001642f, -0.001123f, + +0.000920f, +0.002322f, +0.000988f, +0.000207f, -0.000260f, -0.000227f, +0.000054f, +0.000596f, -0.000221f, -0.000454f, + +0.001537f, +0.000679f, +0.000776f, -0.000647f, -0.000003f, -0.000281f, +0.000516f, +0.000643f, +0.000429f, +0.000074f, + -0.000030f, -0.000195f, -0.000052f, +0.000610f, +0.000385f, +0.000259f + }, + { + -0.008571f, +0.188020f, -0.008568f, +0.031091f, +0.010201f, +0.000318f, +0.000859f, +0.019666f, -0.008434f, -0.001519f, + +0.002451f, +0.011166f, +0.007019f, -0.000628f, -0.002804f, -0.011806f, +0.003709f, +0.002190f, +0.000004f, -0.006312f, + +0.000951f, +0.003666f, -0.006096f, -0.006252f, +0.001642f, -0.002885f, -0.000996f, -0.001704f, +0.002720f, -0.000240f, + -0.006532f, +0.001471f, +0.004781f, +0.000030f, -0.002238f, +0.000023f, +0.001062f, +0.002288f, -0.002375f, +0.005553f, + +0.002617f, -0.004832f, -0.001349f, -0.003629f, -0.001992f, -0.001746f, +0.008741f, -0.006230f, +0.002006f, -0.003751f, + +0.001559f, +0.002556f, -0.003613f, +0.000646f, -0.001215f, -0.001062f, -0.001790f, +0.002349f, +0.000854f, -0.000102f, + +0.003139f, +0.001762f, +0.001587f, +0.001941f, -0.000194f, -0.000385f, +0.001496f, +0.001835f, -0.000888f, -0.000874f, + -0.000870f, -0.000692f, -0.000478f, +0.000016f, +0.000101f, +0.001855f, -0.000356f, -0.000722f, +0.000295f, +0.001069f, + -0.000027f, +0.000813f, +0.000439f, -0.000902f, -0.000732f, -0.000642f, +0.000764f, +0.000379f, -0.001071f, +0.000013f, + +0.000045f, +0.000354f, +0.000511f, -0.000141f, +0.000886f, -0.000690f + }, + { + -0.001736f, +0.005523f, +0.005937f, +0.001971f, +0.002739f, +0.001216f, -0.000302f, -0.002417f, -0.000360f, +0.003120f, + +0.003847f, -0.006112f, -0.005254f, +0.005452f, +0.019622f, -0.020173f, +0.001896f, +0.007850f, -0.005185f, -0.020293f, + -0.008009f, -0.007788f, -0.008812f, +0.010854f, -0.009308f, +0.000172f, +0.016028f, +0.005816f, -0.002416f, -0.011589f, + -0.001844f, -0.007956f, -0.000571f, +0.003916f, -0.006938f, -0.005900f, -0.007300f, -0.005176f, +0.009968f, +0.002648f, + -0.004649f, -0.002446f, +0.002342f, -0.001545f, -0.001979f, -0.002098f, -0.001384f, +0.004999f, -0.001133f, -0.001156f, + -0.001662f, +0.002400f, -0.004285f, -0.000549f, +0.001121f, -0.001074f, +0.000296f, +0.002032f, +0.000042f, -0.000040f, + -0.002156f, -0.003663f, -0.001012f, -0.000212f, +0.001747f, -0.000097f, -0.001179f, -0.001092f, -0.002123f, -0.000483f, + +0.001182f, +0.001618f, -0.001917f, -0.000222f, -0.000051f, -0.000890f, -0.000884f, -0.000500f, -0.000439f, -0.000103f, + +0.000195f, -0.000049f, +0.000153f, -0.000655f, -0.000590f, +0.000256f, -0.000824f, -0.000355f, -0.000573f, +0.000685f, + -0.000068f, +0.000552f, +0.000412f, -0.000135f, -0.000508f, -0.000148f + }, + { + -0.049888f, -0.081645f, +0.005626f, +0.032198f, +0.005603f, -0.004636f, -0.001105f, -0.007612f, +0.001004f, +0.002377f, + -0.000860f, -0.013526f, +0.007968f, -0.002669f, -0.019305f, -0.003603f, -0.005844f, -0.017577f, +0.000785f, -0.007369f, + +0.006901f, -0.002120f, -0.001879f, -0.002643f, +0.002444f, +0.002094f, +0.004077f, +0.000503f, -0.001977f, +0.005059f, + -0.000669f, +0.000715f, -0.006837f, +0.005837f, -0.004752f, +0.007603f, -0.000915f, +0.000041f, -0.001207f, +0.004641f, + -0.002821f, -0.000265f, -0.001505f, -0.001210f, +0.000338f, -0.003379f, +0.000875f, -0.003087f, +0.002604f, -0.009498f, + +0.002756f, +0.000343f, -0.000839f, +0.003474f, -0.001887f, -0.000854f, -0.000479f, +0.003555f, +0.003147f, -0.001730f, + -0.002776f, +0.000470f, +0.001068f, -0.001590f, -0.002674f, -0.000917f, -0.002981f, +0.000690f, -0.001563f, -0.001155f, + +0.001055f, +0.000185f, +0.000331f, +0.000093f, +0.000050f, -0.001017f, +0.000007f, +0.000831f, +0.000786f, +0.000591f, + -0.000482f, +0.000330f, +0.000405f, -0.000374f, +0.000360f, -0.000560f, -0.001699f, -0.000569f, +0.000301f, +0.000722f, + +0.000142f, -0.000242f, -0.000190f, -0.000073f, +0.000068f, +0.000406f + }, + { + -0.002803f, -0.020361f, +0.001513f, -0.015564f, +0.003679f, +0.000142f, -0.018963f, +0.011190f, +0.001410f, -0.003742f, + -0.002071f, +0.001210f, +0.010752f, +0.003973f, +0.026532f, +0.007620f, -0.006805f, +0.009636f, -0.008173f, +0.003691f, + +0.003501f, -0.001057f, +0.003653f, +0.009766f, +0.001978f, +0.008220f, -0.005422f, -0.004007f, +0.002086f, -0.005176f, + -0.005655f, +0.003729f, -0.006433f, +0.008923f, -0.001581f, -0.001692f, +0.011517f, +0.004702f, +0.001975f, +0.002050f, + +0.003565f, -0.002904f, +0.007178f, -0.003788f, +0.002754f, -0.002148f, +0.001493f, -0.003288f, +0.001391f, -0.000241f, + +0.003030f, -0.000247f, +0.003558f, -0.003498f, -0.000410f, -0.002223f, -0.000114f, +0.000402f, -0.002087f, +0.000525f, + +0.002078f, -0.000075f, -0.000786f, +0.000824f, -0.002689f, +0.000504f, -0.000919f, +0.000464f, -0.000745f, +0.000618f, + -0.000916f, +0.001016f, +0.000193f, -0.000024f, -0.000082f, -0.000364f, +0.000185f, +0.000139f, -0.000266f, -0.000479f, + +0.000052f, +0.001113f, -0.000954f, -0.000070f, -0.000896f, -0.000148f, +0.000282f, -0.000248f, -0.000880f, +0.000103f, + +0.000123f, +0.000944f, +0.001277f, -0.000356f, +0.000525f, -0.000143f + }, + { + +0.009682f, -0.238430f, -0.006568f, -0.013793f, -0.008123f, +0.000096f, +0.007677f, -0.006038f, -0.004406f, -0.008444f, + +0.009419f, +0.002497f, -0.000295f, -0.004510f, +0.021770f, -0.008543f, +0.006271f, +0.018505f, +0.002431f, +0.003953f, + -0.002857f, -0.009451f, -0.010249f, +0.002939f, -0.006476f, +0.001385f, -0.001245f, +0.006136f, -0.001289f, -0.001695f, + -0.000550f, +0.001074f, +0.001810f, -0.003727f, +0.012236f, +0.008244f, -0.004901f, +0.001946f, +0.003526f, -0.002041f, + +0.003453f, -0.001644f, +0.003018f, +0.001454f, +0.002131f, +0.000998f, -0.000129f, -0.001386f, +0.003455f, +0.000837f, + +0.001624f, +0.000269f, -0.002125f, +0.001200f, -0.001817f, -0.001699f, -0.000093f, +0.001118f, +0.004267f, -0.000423f, + -0.003848f, -0.001415f, -0.000357f, -0.000530f, +0.001338f, -0.000042f, +0.001868f, -0.002482f, +0.000706f, -0.001604f, + -0.000204f, -0.000683f, -0.001749f, -0.000469f, -0.001092f, -0.001057f, +0.000879f, -0.000867f, -0.000738f, +0.000057f, + -0.000371f, -0.000213f, +0.000183f, +0.000129f, +0.001020f, -0.001070f, +0.000094f, +0.000738f, +0.000042f, -0.000876f, + -0.000333f, -0.000313f, -0.000460f, +0.000112f, +0.000186f, -0.000156f + }, + { + +0.001324f, -0.065339f, +0.004474f, -0.005516f, -0.003283f, -0.002870f, -0.007421f, -0.004432f, +0.008554f, -0.004634f, + -0.004422f, +0.001055f, -0.001431f, +0.007396f, +0.013676f, +0.000638f, -0.007760f, -0.000169f, -0.002555f, -0.012673f, + -0.010242f, -0.022724f, -0.007092f, -0.011509f, +0.004113f, +0.007105f, -0.026385f, -0.007078f, +0.009305f, +0.008630f, + -0.005617f, +0.014559f, -0.006729f, +0.001310f, -0.005919f, +0.008498f, +0.005130f, +0.013817f, +0.004084f, -0.007987f, + +0.002362f, +0.004887f, -0.004542f, +0.001999f, -0.002727f, +0.004622f, +0.002006f, -0.004251f, +0.006119f, +0.002013f, + +0.000648f, -0.000551f, +0.000985f, -0.000696f, -0.001592f, -0.002851f, +0.001958f, +0.000692f, +0.002065f, +0.000215f, + -0.000793f, -0.000676f, -0.001508f, -0.002471f, +0.002710f, -0.000777f, -0.001738f, +0.000692f, +0.000019f, +0.000981f, + +0.000396f, -0.001659f, -0.001667f, +0.000473f, +0.000548f, +0.000988f, +0.000988f, -0.001027f, +0.000343f, -0.000230f, + -0.000560f, +0.000618f, +0.000522f, -0.000667f, -0.000452f, -0.000866f, -0.001011f, -0.000065f, -0.000108f, -0.000909f, + +0.000264f, +0.000113f, -0.000354f, -0.000109f, -0.000513f, -0.000142f + }, + { + +0.022673f, -0.373714f, -0.009900f, +0.000787f, +0.031600f, -0.011753f, -0.004965f, +0.006388f, +0.016903f, -0.003656f, + -0.003702f, +0.003070f, +0.000890f, +0.006249f, +0.003489f, -0.007214f, -0.009668f, +0.004944f, -0.008892f, +0.002053f, + +0.009269f, +0.003200f, +0.006554f, -0.003087f, -0.004379f, -0.006768f, -0.003242f, -0.005920f, -0.000886f, +0.004239f, + -0.005837f, -0.006988f, -0.000558f, -0.009018f, -0.004618f, -0.000498f, +0.000690f, +0.006971f, -0.007279f, -0.006664f, + +0.002403f, -0.013085f, +0.003745f, +0.003581f, -0.004515f, +0.002040f, +0.004104f, -0.000864f, +0.006531f, +0.003953f, + +0.000012f, +0.000679f, +0.003156f, -0.005156f, -0.002966f, +0.000727f, -0.004063f, +0.000487f, -0.000567f, +0.003850f, + -0.000017f, -0.001827f, -0.001141f, -0.001633f, +0.000539f, -0.000262f, -0.000980f, +0.001795f, +0.001469f, +0.000823f, + +0.000070f, -0.000356f, -0.000352f, -0.000417f, +0.000794f, -0.000062f, -0.000074f, -0.001417f, +0.001318f, -0.000212f, + +0.000362f, +0.000134f, -0.000208f, +0.000128f, +0.000425f, +0.000469f, +0.000344f, +0.000429f, +0.000570f, -0.000976f, + -0.001189f, -0.000051f, -0.000622f, -0.000365f, -0.000378f, -0.000069f + }, + { + +0.002352f, -0.084206f, -0.018370f, +0.006025f, -0.001206f, +0.005765f, -0.009887f, +0.001233f, -0.000063f, +0.005906f, + +0.003403f, +0.004337f, +0.002363f, +0.000296f, +0.001308f, +0.001091f, -0.009172f, -0.006848f, +0.002657f, +0.018814f, + +0.003671f, +0.001674f, +0.007495f, +0.004074f, -0.001058f, +0.009945f, -0.001318f, -0.008001f, +0.009480f, +0.011477f, + +0.011904f, -0.008254f, -0.006438f, -0.002200f, +0.006423f, -0.007371f, +0.005342f, -0.002001f, -0.000016f, +0.000273f, + +0.004074f, +0.003913f, +0.001567f, -0.002044f, +0.002993f, -0.006046f, +0.002369f, +0.003117f, +0.003568f, -0.002257f, + +0.000247f, -0.002526f, +0.003920f, -0.000888f, +0.003464f, +0.000751f, -0.001607f, +0.002713f, +0.000303f, +0.001037f, + +0.004483f, +0.001427f, +0.002043f, -0.000026f, -0.000980f, -0.001909f, +0.000422f, +0.000585f, +0.000037f, +0.000365f, + +0.000896f, +0.000440f, -0.001503f, +0.000603f, -0.000397f, -0.000591f, -0.000720f, -0.000757f, -0.001398f, -0.000029f, + +0.002183f, +0.000437f, +0.000136f, +0.000661f, -0.000519f, +0.000312f, -0.000049f, +0.000123f, +0.000442f, +0.000336f, + +0.000350f, +0.000122f, -0.000414f, +0.000320f, +0.000227f, -0.000289f + }, + { + +0.048070f, -0.124361f, +0.003022f, +0.002885f, -0.002167f, +0.007516f, +0.018385f, +0.005566f, +0.013320f, -0.001483f, + +0.005198f, +0.002602f, -0.011035f, +0.004164f, -0.014522f, +0.011422f, -0.005623f, -0.000757f, -0.010522f, +0.004080f, + -0.008987f, +0.005383f, -0.006829f, +0.010129f, -0.002215f, -0.007726f, -0.002009f, -0.000838f, +0.005311f, -0.003898f, + -0.001223f, -0.002654f, -0.009798f, +0.003346f, +0.006477f, +0.001259f, +0.000131f, +0.005089f, +0.000676f, +0.005190f, + -0.004129f, -0.003805f, +0.007151f, -0.004399f, -0.001745f, +0.006336f, +0.002098f, -0.001634f, +0.001339f, -0.000291f, + +0.002872f, -0.000190f, -0.001002f, -0.000335f, -0.000537f, -0.000520f, -0.000853f, +0.002425f, -0.001307f, -0.000330f, + -0.000704f, +0.000680f, +0.001975f, -0.001738f, +0.000084f, -0.001402f, +0.000663f, +0.000872f, +0.000518f, -0.000661f, + -0.001194f, -0.000727f, -0.000181f, -0.001732f, +0.000823f, +0.000444f, -0.000069f, -0.000306f, +0.000299f, -0.001517f, + -0.000088f, -0.000053f, -0.000566f, +0.000278f, +0.001211f, -0.000273f, +0.000061f, -0.000227f, -0.000228f, +0.000011f, + -0.000757f, +0.000227f, +0.000074f, -0.000150f, -0.000755f, +0.000155f + } + }, + { + { + +0.001187f, -0.003202f, -0.018527f, -0.033678f, -0.007379f, -0.000161f, +0.007330f, +0.001660f, -0.006333f, +0.002357f, + -0.007882f, +0.000756f, -0.005939f, -0.005538f, +0.011401f, -0.003452f, -0.003868f, -0.003607f, +0.015925f, -0.002938f, + +0.001504f, +0.004899f, -0.015837f, -0.014167f, -0.016724f, -0.003881f, -0.002751f, -0.002193f, +0.006168f, -0.009803f, + -0.015372f, -0.002942f, -0.006785f, -0.002938f, -0.006081f, -0.002543f, +0.000105f, -0.008130f, -0.005807f, +0.000046f, + +0.006655f, +0.003211f, -0.002759f, +0.002408f, -0.001203f, -0.000500f, +0.001986f, -0.002197f, +0.002884f, +0.003596f, + -0.000331f, -0.001858f, -0.002702f, +0.002318f, +0.002410f, +0.003146f, +0.001362f, +0.000196f, -0.000820f, +0.000494f, + -0.000921f, +0.000019f, -0.000395f, +0.000609f, -0.000078f, +0.003065f, -0.001763f, +0.001436f, +0.000789f, +0.001688f, + -0.000207f, +0.000108f, -0.000062f, +0.000274f, -0.000724f, -0.000668f, +0.000258f, -0.000246f, +0.001099f, +0.000275f, + +0.001065f, +0.000624f, -0.000092f, +0.001821f, -0.000575f, -0.000544f, -0.000646f, +0.000208f, -0.001173f, +0.000089f, + +0.000037f, -0.000451f, -0.000256f, -0.000155f, -0.000339f, +0.000399f + }, + { + -0.007757f, +0.027969f, +0.004724f, -0.034436f, +0.005908f, -0.001564f, +0.000998f, -0.004299f, +0.002790f, +0.005644f, + -0.006651f, +0.007075f, +0.003870f, +0.004148f, -0.008697f, -0.014095f, -0.006400f, +0.007574f, -0.000162f, -0.002671f, + -0.007864f, +0.001578f, +0.005912f, -0.003074f, +0.012284f, +0.005909f, -0.005211f, -0.004863f, +0.010867f, +0.004991f, + -0.005022f, -0.009094f, +0.004726f, +0.002234f, +0.008440f, +0.001418f, -0.004635f, -0.001686f, -0.002616f, -0.002426f, + -0.000417f, +0.000372f, +0.004345f, -0.001054f, +0.004181f, -0.003462f, +0.004021f, -0.005075f, -0.000852f, +0.002537f, + -0.001184f, +0.001346f, +0.001072f, -0.003912f, -0.000916f, -0.001749f, +0.004479f, -0.002283f, -0.000831f, +0.000667f, + -0.002175f, +0.000192f, -0.000721f, +0.000793f, -0.000452f, +0.001047f, -0.000591f, +0.001070f, +0.000090f, -0.000292f, + -0.000692f, -0.000851f, +0.000283f, -0.000097f, -0.000369f, +0.000260f, +0.000746f, -0.000940f, +0.000523f, +0.000125f, + +0.000140f, -0.000127f, +0.000600f, -0.000327f, +0.000717f, -0.000651f, -0.000376f, -0.000274f, +0.000302f, +0.000485f, + -0.000017f, +0.000575f, +0.000098f, +0.000398f, -0.000073f, +0.000122f + }, + { + +0.004862f, +0.051467f, -0.000038f, -0.059997f, -0.047661f, +0.003732f, +0.004369f, +0.006185f, +0.003385f, +0.004908f, + +0.004003f, +0.020579f, -0.007347f, +0.015821f, -0.014782f, -0.004573f, -0.005119f, -0.005901f, -0.003071f, +0.008900f, + +0.007586f, -0.002999f, -0.008113f, +0.008462f, +0.005042f, -0.008360f, +0.012760f, -0.005986f, +0.003455f, -0.001134f, + +0.002775f, +0.007148f, -0.000566f, -0.002196f, +0.005481f, -0.000076f, +0.006168f, +0.000143f, -0.001388f, -0.001467f, + +0.003727f, +0.003638f, +0.002270f, -0.002813f, +0.002637f, -0.000181f, +0.002924f, +0.002862f, +0.000181f, +0.000109f, + +0.001003f, +0.000174f, -0.000752f, -0.002184f, +0.001345f, +0.002619f, +0.001753f, -0.000716f, -0.000220f, -0.000119f, + -0.002471f, +0.000999f, -0.000968f, -0.001431f, +0.000580f, -0.000384f, +0.001804f, +0.000178f, -0.000450f, -0.001686f, + -0.000219f, -0.000189f, +0.000595f, +0.000982f, -0.000487f, +0.001419f, +0.000674f, +0.000349f, +0.000504f, -0.000455f, + +0.000551f, -0.000604f, -0.001048f, +0.000210f, +0.000214f, -0.000230f, -0.000155f, +0.001065f, +0.000065f, +0.000199f, + +0.000066f, -0.000018f, -0.000081f, -0.000004f, -0.000406f, -0.000500f + }, + { + -0.002207f, -0.067160f, -0.005098f, +0.000931f, -0.002571f, +0.002061f, +0.001176f, +0.005398f, -0.002647f, +0.005792f, + +0.003234f, -0.000878f, -0.003541f, +0.013047f, -0.016996f, +0.015675f, -0.008134f, +0.013088f, -0.036938f, +0.021014f, + -0.003107f, +0.005797f, +0.007805f, +0.005046f, +0.009553f, +0.004057f, +0.008050f, -0.002985f, +0.002366f, +0.002726f, + -0.000991f, +0.002263f, -0.001647f, -0.002967f, +0.000588f, +0.001324f, +0.006587f, -0.008156f, +0.004487f, -0.001290f, + +0.002913f, -0.002098f, +0.001099f, -0.001023f, +0.004182f, -0.002976f, +0.001582f, -0.000332f, +0.000275f, +0.000656f, + -0.000634f, +0.002475f, -0.001948f, +0.001162f, +0.000475f, +0.002574f, +0.000260f, +0.000639f, -0.001628f, -0.000056f, + -0.000211f, +0.001556f, +0.001147f, +0.001866f, +0.000018f, +0.000497f, +0.000569f, -0.000986f, -0.000475f, +0.001399f, + -0.000791f, -0.000530f, +0.000351f, -0.000788f, -0.000385f, +0.001065f, -0.000409f, -0.000444f, -0.000606f, -0.000368f, + -0.000644f, +0.000043f, -0.000647f, -0.000091f, -0.001188f, +0.000327f, +0.000196f, +0.000065f, -0.000288f, -0.000496f, + -0.000013f, +0.000022f, +0.000087f, -0.000155f, +0.000129f, +0.000029f + }, + { + +0.002370f, +0.018066f, -0.012417f, -0.060047f, -0.011080f, -0.000393f, -0.000692f, -0.003000f, +0.010921f, -0.000255f, + +0.013079f, -0.009443f, +0.008426f, +0.003281f, +0.012254f, -0.002407f, -0.018790f, -0.007453f, +0.004196f, +0.010023f, + -0.002574f, +0.000365f, +0.003912f, -0.009080f, -0.009856f, -0.005684f, -0.002015f, +0.007412f, -0.001325f, -0.002440f, + -0.001560f, +0.000105f, -0.002846f, +0.000403f, +0.004968f, +0.009756f, -0.002795f, -0.000427f, -0.000587f, -0.007075f, + -0.005832f, +0.000153f, +0.006996f, -0.001822f, -0.003182f, +0.004364f, +0.002636f, -0.006006f, -0.000013f, +0.002219f, + -0.000248f, +0.002845f, -0.000859f, -0.000786f, +0.000685f, +0.000658f, +0.000731f, +0.000140f, -0.000514f, +0.001226f, + +0.001834f, -0.001689f, +0.000428f, +0.000663f, +0.000583f, -0.000656f, -0.001407f, -0.000729f, -0.000406f, -0.001414f, + +0.000678f, -0.000752f, +0.000869f, -0.000960f, +0.000159f, -0.001079f, -0.000516f, -0.000121f, -0.000362f, +0.001057f, + -0.000687f, +0.000735f, +0.000857f, -0.000756f, -0.000539f, -0.000475f, -0.000667f, +0.000609f, -0.000313f, +0.000557f, + -0.000423f, +0.000075f, +0.000094f, +0.000157f, -0.000439f, -0.000317f + }, + { + +0.000737f, +0.032727f, +0.000981f, -0.003429f, +0.001196f, -0.000110f, +0.001082f, +0.001035f, -0.002814f, -0.000262f, + -0.000800f, +0.004193f, -0.003990f, -0.008128f, +0.009258f, -0.011611f, -0.025394f, +0.001647f, -0.001108f, -0.013683f, + -0.009777f, +0.001968f, +0.009518f, +0.009096f, -0.007580f, +0.002677f, +0.020336f, +0.020383f, -0.000989f, +0.014830f, + +0.002252f, -0.007863f, +0.003627f, +0.003251f, -0.004912f, +0.002704f, +0.000560f, +0.002137f, -0.004530f, -0.002953f, + +0.005928f, -0.000554f, +0.004940f, +0.000655f, +0.000978f, +0.004524f, -0.000976f, +0.000155f, +0.001949f, +0.004418f, + -0.000606f, -0.001369f, +0.001529f, -0.001519f, +0.001530f, +0.001994f, -0.000865f, -0.001219f, -0.000819f, -0.000404f, + -0.001101f, +0.000200f, -0.000782f, +0.000876f, -0.001820f, -0.000788f, -0.000560f, -0.000466f, +0.001164f, -0.000472f, + +0.000380f, +0.000440f, -0.000289f, -0.000535f, -0.000103f, +0.000636f, -0.000404f, -0.000088f, -0.000092f, -0.000059f, + +0.001916f, -0.000962f, -0.000165f, -0.000476f, +0.000199f, -0.000320f, -0.000050f, -0.000318f, +0.000055f, -0.000644f, + -0.000164f, +0.000401f, -0.000023f, +0.000243f, -0.000417f, -0.000104f + }, + { + -0.030346f, +0.134082f, -0.002187f, +0.027020f, -0.010595f, -0.001053f, -0.002105f, +0.015737f, -0.004751f, +0.006875f, + +0.006302f, +0.003048f, +0.002625f, -0.003971f, +0.002127f, -0.005172f, +0.001787f, -0.002063f, +0.001161f, +0.001678f, + +0.004341f, +0.000415f, -0.005287f, +0.002507f, +0.005358f, -0.000623f, -0.000365f, -0.005631f, +0.003598f, +0.001495f, + -0.000165f, +0.005659f, +0.004171f, +0.002101f, -0.002126f, -0.001475f, -0.003636f, +0.001617f, +0.000226f, +0.005369f, + +0.002603f, -0.003225f, +0.001436f, -0.004182f, -0.002303f, -0.002081f, +0.002983f, -0.007194f, +0.002159f, -0.004146f, + +0.003107f, +0.003265f, -0.000602f, +0.003172f, +0.001768f, +0.002434f, -0.000859f, +0.003112f, +0.001078f, -0.001174f, + +0.000798f, +0.000339f, +0.000363f, +0.000212f, +0.000368f, +0.000622f, +0.000838f, +0.000324f, -0.000713f, +0.000958f, + -0.000103f, -0.000532f, -0.000847f, -0.000073f, -0.001101f, -0.000052f, -0.000132f, +0.000555f, +0.000899f, +0.000647f, + -0.000096f, +0.000602f, +0.000784f, -0.000234f, -0.000775f, -0.000312f, +0.000170f, -0.000391f, -0.001203f, -0.000134f, + -0.000015f, -0.000325f, +0.000044f, -0.000321f, +0.000861f, -0.000348f + }, + { + +0.000094f, +0.006424f, -0.002427f, -0.002685f, -0.000143f, -0.000594f, -0.001244f, +0.001627f, +0.002195f, +0.000555f, + +0.000437f, -0.004958f, +0.000874f, +0.005058f, +0.012933f, -0.038656f, +0.000337f, +0.016852f, -0.006869f, -0.007737f, + +0.011627f, +0.001481f, -0.005700f, +0.011829f, -0.007781f, -0.007188f, +0.015074f, +0.014136f, +0.005627f, -0.006455f, + -0.000793f, +0.005761f, -0.000594f, +0.000509f, +0.000645f, +0.003043f, -0.004489f, -0.005164f, +0.008323f, +0.005502f, + -0.000377f, -0.000496f, +0.000212f, -0.004304f, -0.000245f, +0.000476f, +0.001152f, +0.005643f, -0.001089f, -0.003612f, + -0.002908f, +0.003365f, -0.001748f, -0.000118f, -0.000364f, -0.000124f, -0.000667f, -0.000286f, -0.000088f, +0.001188f, + +0.000316f, -0.001280f, -0.000958f, +0.000825f, +0.001433f, -0.000606f, -0.000155f, -0.000358f, -0.000525f, +0.000689f, + +0.000065f, +0.001582f, -0.000357f, +0.000386f, +0.000290f, +0.000006f, -0.000365f, +0.000135f, +0.000697f, +0.000331f, + -0.000298f, +0.000451f, +0.000531f, -0.000570f, +0.000279f, +0.000388f, -0.000295f, -0.000328f, -0.000530f, +0.000110f, + -0.001328f, +0.000230f, +0.000041f, +0.000368f, +0.000445f, +0.000288f + }, + { + +0.037299f, +0.002424f, -0.001450f, +0.026346f, -0.015979f, -0.006415f, +0.002118f, -0.007413f, +0.001098f, +0.002424f, + +0.002628f, -0.000334f, +0.019764f, +0.004572f, -0.014916f, +0.006464f, +0.002622f, -0.007694f, +0.014143f, +0.001202f, + +0.007105f, -0.005404f, +0.003940f, -0.000071f, +0.000514f, +0.002364f, +0.001562f, -0.000207f, -0.004686f, +0.000811f, + -0.003319f, -0.004227f, -0.005367f, +0.009229f, -0.005332f, +0.004020f, +0.002345f, +0.000523f, -0.003281f, +0.000086f, + -0.003524f, +0.000953f, -0.002499f, -0.000553f, -0.001262f, -0.003428f, +0.000860f, -0.002314f, +0.003488f, -0.009205f, + +0.003051f, -0.001273f, -0.003049f, -0.000961f, -0.001112f, +0.000894f, -0.000216f, -0.000196f, +0.001581f, -0.000515f, + -0.001562f, +0.000200f, +0.000976f, -0.000485f, -0.002057f, +0.001242f, -0.000985f, +0.000516f, -0.000380f, -0.000662f, + +0.000318f, +0.000406f, +0.000289f, -0.000155f, +0.001037f, +0.000576f, +0.001144f, +0.000193f, +0.000239f, +0.000143f, + -0.000182f, +0.000610f, +0.000219f, -0.000730f, +0.000010f, -0.000022f, -0.000727f, +0.000027f, +0.000560f, +0.000084f, + -0.000566f, -0.000462f, -0.000051f, +0.000506f, +0.000138f, +0.000342f + }, + { + +0.000676f, -0.042817f, -0.020600f, -0.010351f, +0.019446f, +0.013730f, -0.017605f, +0.005559f, -0.007490f, -0.007386f, + -0.004239f, +0.003357f, +0.011369f, -0.003904f, +0.012914f, -0.006353f, -0.013810f, +0.005661f, -0.018950f, -0.021188f, + -0.005948f, -0.006813f, +0.005274f, +0.006072f, -0.006120f, +0.004867f, -0.004075f, -0.004153f, +0.006772f, +0.007051f, + -0.008668f, +0.000551f, -0.009817f, +0.001821f, +0.004793f, +0.002265f, +0.010769f, +0.004165f, +0.000245f, +0.002524f, + +0.003793f, -0.004496f, +0.003616f, -0.008557f, +0.000666f, -0.001827f, +0.002075f, -0.002425f, +0.003278f, +0.000491f, + +0.001015f, +0.000398f, +0.003357f, -0.002845f, +0.000826f, -0.001990f, +0.002027f, +0.001338f, -0.002263f, -0.002180f, + -0.001841f, -0.001694f, -0.000700f, +0.002018f, -0.001967f, +0.001253f, -0.000233f, +0.001734f, -0.000494f, -0.000356f, + -0.000678f, -0.001252f, -0.001077f, -0.000089f, -0.000231f, -0.000668f, -0.001148f, -0.000775f, +0.000045f, +0.000041f, + -0.000295f, +0.001076f, -0.001015f, +0.000090f, -0.000370f, -0.000739f, -0.000145f, +0.000432f, +0.000201f, +0.000583f, + -0.000031f, +0.000583f, +0.000530f, -0.000232f, +0.000375f, -0.000695f + }, + { + -0.007393f, -0.268351f, -0.003347f, -0.006154f, -0.009009f, +0.020645f, -0.003380f, -0.007489f, +0.004113f, -0.004464f, + +0.007436f, -0.002139f, +0.004635f, +0.001737f, +0.003838f, -0.014382f, +0.001470f, +0.014360f, -0.006538f, +0.003801f, + +0.007408f, -0.003057f, -0.006448f, +0.004765f, -0.001241f, +0.004560f, -0.004781f, +0.007255f, +0.004860f, +0.002172f, + +0.004385f, +0.001702f, -0.001312f, -0.000542f, +0.003754f, -0.007142f, -0.007118f, -0.001176f, -0.001570f, -0.002395f, + +0.005340f, -0.002311f, -0.002988f, -0.002092f, -0.000586f, -0.000239f, -0.001399f, -0.003805f, +0.000850f, -0.004452f, + +0.000479f, +0.003781f, -0.000941f, +0.000807f, -0.000294f, +0.000350f, -0.000826f, +0.000781f, +0.001029f, -0.000755f, + -0.001072f, -0.000336f, +0.000747f, +0.000450f, +0.001350f, -0.001100f, +0.001416f, -0.001638f, +0.002184f, -0.000625f, + +0.000464f, -0.000652f, -0.001244f, +0.000637f, -0.001982f, -0.001310f, -0.000171f, -0.000597f, +0.000920f, +0.000081f, + +0.000118f, -0.000096f, +0.000098f, -0.000245f, -0.000151f, -0.000699f, +0.000027f, +0.000411f, +0.000141f, +0.000217f, + +0.000526f, +0.000030f, -0.000301f, +0.000012f, +0.000057f, -0.000314f + }, + { + -0.002560f, -0.058642f, +0.018257f, +0.002580f, +0.000598f, +0.001432f, -0.002759f, -0.006456f, +0.009917f, +0.000645f, + -0.004762f, +0.001598f, -0.001434f, +0.003362f, +0.002276f, -0.002717f, -0.003396f, +0.002334f, +0.004029f, -0.002307f, + -0.001910f, -0.009342f, +0.002880f, -0.001705f, -0.012668f, -0.003457f, -0.017660f, -0.008373f, -0.001047f, +0.006241f, + -0.013944f, +0.004255f, -0.015424f, +0.003449f, -0.005349f, +0.008204f, +0.003050f, +0.013400f, +0.001556f, -0.001846f, + +0.009171f, +0.008014f, -0.004004f, +0.003854f, -0.004199f, -0.001946f, -0.004262f, -0.002271f, +0.005889f, -0.000378f, + +0.002710f, +0.001984f, +0.003916f, -0.002759f, -0.001775f, -0.002848f, +0.001325f, +0.001070f, +0.000791f, -0.001412f, + +0.001740f, -0.000154f, -0.002813f, -0.001397f, +0.002831f, +0.000488f, -0.000082f, +0.001499f, -0.001411f, +0.000737f, + +0.002188f, -0.000355f, -0.000858f, +0.001873f, +0.000574f, +0.000321f, +0.000950f, -0.000639f, +0.000052f, -0.000403f, + -0.000267f, -0.000034f, -0.000281f, -0.000470f, +0.000215f, -0.000679f, -0.000585f, +0.000521f, -0.000056f, -0.000749f, + +0.000990f, +0.000527f, -0.000227f, -0.000020f, +0.000177f, +0.000713f + }, + { + +0.037973f, -0.335646f, -0.000300f, -0.009042f, +0.017104f, -0.006782f, +0.002363f, -0.006789f, -0.005202f, -0.017698f, + -0.007507f, -0.002089f, -0.006617f, -0.007528f, -0.005421f, -0.004634f, -0.004646f, +0.002873f, -0.006079f, +0.004668f, + +0.006256f, +0.006524f, +0.003402f, -0.005950f, +0.000847f, -0.003467f, +0.001202f, -0.000216f, -0.002706f, +0.005279f, + -0.001376f, -0.001550f, +0.004061f, +0.000337f, +0.002236f, +0.002384f, -0.003321f, +0.000938f, -0.007959f, -0.004731f, + +0.007169f, -0.007514f, +0.007416f, +0.003113f, -0.006865f, -0.003087f, -0.000367f, -0.002750f, +0.004620f, -0.001904f, + -0.002185f, -0.001187f, +0.000733f, -0.003992f, -0.002728f, -0.000087f, -0.002455f, -0.000784f, -0.001926f, +0.003056f, + +0.000798f, +0.000077f, +0.000566f, -0.000969f, +0.000177f, -0.000155f, -0.000374f, +0.001158f, +0.001285f, +0.001204f, + -0.000338f, -0.000331f, +0.001091f, -0.000313f, +0.001339f, +0.000900f, +0.000537f, -0.001252f, +0.000525f, -0.000536f, + +0.000279f, +0.000011f, +0.000668f, +0.000512f, +0.000036f, +0.000176f, -0.000183f, +0.000085f, +0.000250f, -0.000877f, + -0.000601f, +0.000093f, -0.000712f, -0.000618f, -0.000089f, +0.000125f + }, + { + -0.002512f, -0.078673f, -0.007571f, +0.006640f, +0.004497f, +0.013430f, -0.011635f, +0.001631f, -0.001705f, -0.006650f, + -0.005667f, +0.000206f, -0.005302f, +0.018025f, +0.032457f, -0.005892f, -0.012831f, -0.003797f, +0.008908f, +0.006230f, + -0.012571f, -0.004462f, +0.006330f, +0.000056f, -0.000474f, +0.014473f, +0.007011f, +0.006606f, -0.002483f, +0.006221f, + +0.007019f, -0.003436f, +0.009323f, +0.002511f, +0.004483f, -0.001593f, +0.008009f, +0.000951f, -0.000483f, -0.004390f, + +0.005435f, +0.005507f, +0.002154f, -0.001552f, +0.002512f, -0.005503f, +0.004622f, +0.001594f, -0.000255f, -0.001978f, + +0.000790f, -0.005125f, -0.000488f, -0.003084f, +0.001993f, -0.001167f, -0.000087f, +0.004259f, +0.001156f, +0.000160f, + +0.002455f, -0.001583f, -0.000290f, +0.000313f, +0.001177f, -0.000392f, +0.001060f, +0.000719f, -0.000597f, -0.000429f, + -0.000604f, +0.000397f, +0.000712f, +0.000397f, -0.000778f, -0.000173f, -0.001416f, -0.000222f, -0.000883f, -0.000577f, + +0.001183f, -0.001084f, -0.000762f, -0.000040f, -0.001012f, -0.000203f, -0.000922f, +0.000280f, -0.000157f, -0.000296f, + +0.000444f, -0.000055f, -0.000574f, +0.000618f, +0.000308f, -0.000354f + }, + { + -0.017620f, -0.210453f, -0.017072f, -0.013864f, +0.003972f, -0.004726f, +0.002532f, +0.001787f, +0.008051f, +0.001035f, + +0.011323f, +0.007732f, -0.011975f, +0.005655f, -0.001362f, +0.003172f, -0.001278f, +0.014742f, -0.005104f, +0.000188f, + -0.002471f, +0.013302f, -0.009880f, +0.010124f, -0.003309f, -0.009715f, -0.006523f, -0.000029f, +0.015522f, -0.001841f, + -0.002506f, +0.000244f, -0.000807f, -0.003542f, -0.005826f, -0.003067f, -0.002112f, +0.000473f, -0.001628f, +0.001400f, + -0.002035f, -0.001853f, +0.006260f, -0.002699f, -0.001546f, +0.002126f, +0.000124f, -0.002408f, +0.000815f, -0.000856f, + +0.003255f, -0.004042f, -0.003235f, -0.001475f, -0.001227f, -0.000958f, -0.001130f, +0.001985f, -0.002034f, +0.002388f, + +0.003680f, +0.001670f, +0.001099f, -0.000737f, +0.001289f, -0.000811f, +0.000796f, -0.000994f, +0.000340f, +0.000357f, + -0.000331f, +0.000453f, -0.000130f, -0.001031f, +0.000779f, +0.000283f, +0.000608f, +0.000836f, +0.001031f, -0.001064f, + +0.001217f, +0.000313f, -0.001273f, +0.000164f, +0.000513f, -0.000116f, +0.000483f, +0.000396f, +0.000267f, +0.000995f, + -0.000503f, +0.000003f, +0.000031f, -0.000215f, -0.000439f, +0.000286f + } + }, + { + { + +0.000417f, -0.037139f, +0.013902f, -0.020689f, -0.022905f, -0.000886f, +0.007081f, +0.002082f, -0.009551f, +0.012125f, + -0.005929f, -0.009166f, -0.010357f, +0.007458f, +0.001593f, +0.002385f, +0.001371f, -0.011728f, +0.017293f, +0.007120f, + -0.003762f, -0.001026f, -0.006422f, -0.020809f, -0.010103f, -0.011854f, +0.002763f, -0.006761f, +0.004527f, -0.017194f, + -0.009956f, -0.002665f, -0.008152f, +0.001850f, -0.008211f, +0.001659f, -0.005685f, -0.005795f, -0.002676f, +0.000743f, + +0.000165f, +0.009616f, -0.003597f, -0.001455f, +0.004187f, -0.000117f, +0.001430f, +0.002694f, -0.002821f, +0.005410f, + +0.001530f, -0.005102f, -0.000275f, +0.001224f, +0.000424f, +0.003502f, +0.001358f, +0.002093f, -0.002072f, -0.000365f, + +0.000727f, -0.001102f, -0.000387f, -0.000226f, +0.001114f, +0.002364f, +0.000073f, +0.000455f, -0.000281f, +0.001544f, + +0.001460f, -0.001982f, +0.001226f, +0.000950f, -0.000820f, -0.000673f, -0.000284f, +0.000319f, +0.000920f, +0.001166f, + -0.000104f, +0.000863f, -0.000381f, +0.001157f, -0.000733f, -0.000369f, -0.000440f, -0.000067f, -0.000673f, -0.000038f, + +0.000160f, -0.000419f, -0.000347f, -0.000416f, -0.000070f, +0.000382f + }, + { + +0.010658f, +0.033874f, -0.007677f, +0.000115f, -0.019925f, -0.003000f, -0.006487f, +0.007604f, -0.000741f, +0.002182f, + +0.002626f, +0.004466f, -0.004665f, +0.007375f, +0.002342f, -0.009126f, -0.012900f, +0.001294f, +0.004124f, -0.008227f, + -0.007952f, -0.002855f, +0.010643f, +0.005759f, -0.001063f, +0.011749f, -0.007454f, +0.005124f, +0.008014f, -0.000135f, + -0.000484f, -0.010344f, +0.005122f, +0.006613f, +0.004580f, +0.004174f, -0.008612f, +0.000026f, -0.003089f, +0.000483f, + -0.000376f, -0.003117f, +0.004405f, -0.000477f, +0.000792f, -0.000784f, +0.004147f, +0.000720f, -0.000376f, +0.000220f, + -0.000569f, +0.000544f, -0.002129f, -0.002801f, +0.000278f, -0.001312f, +0.001321f, -0.001705f, -0.000180f, -0.001524f, + -0.000817f, -0.001080f, +0.001151f, -0.000733f, -0.000274f, +0.001988f, -0.000546f, +0.000089f, +0.000448f, -0.000747f, + +0.000423f, +0.000055f, -0.000063f, -0.000441f, +0.000221f, +0.000665f, +0.000023f, +0.000691f, -0.000658f, +0.000785f, + -0.000836f, +0.000482f, +0.000182f, -0.000609f, +0.000291f, -0.000368f, -0.000001f, -0.000213f, +0.000100f, -0.000111f, + +0.000603f, +0.000156f, +0.000436f, -0.000232f, +0.000088f, +0.000178f + }, + { + -0.008153f, +0.095831f, -0.021118f, -0.100559f, -0.008404f, -0.004598f, +0.005337f, +0.008560f, +0.004044f, +0.009377f, + -0.000884f, +0.013119f, +0.004761f, +0.018191f, -0.013561f, -0.005630f, -0.010481f, -0.015693f, +0.010929f, +0.004423f, + +0.005056f, -0.008707f, +0.000983f, +0.006909f, +0.001489f, -0.006762f, +0.002572f, +0.006208f, -0.002589f, +0.002647f, + +0.004056f, +0.003566f, +0.001690f, -0.000670f, +0.001219f, +0.005906f, +0.001631f, -0.002649f, +0.000008f, -0.000998f, + +0.003887f, -0.000778f, +0.005302f, -0.000442f, -0.000106f, +0.000126f, +0.002958f, +0.001252f, +0.001809f, -0.001069f, + +0.003786f, +0.001817f, -0.003478f, -0.001485f, +0.000040f, +0.003118f, +0.001748f, -0.000333f, -0.000277f, +0.000007f, + -0.002717f, -0.000536f, -0.000679f, -0.000056f, +0.000181f, +0.000811f, +0.000069f, +0.000192f, -0.000205f, -0.001260f, + -0.000029f, -0.000096f, +0.000962f, -0.000065f, -0.000141f, +0.001486f, +0.000557f, -0.000022f, -0.000189f, -0.000038f, + -0.000386f, -0.000197f, -0.000567f, +0.000017f, +0.000236f, +0.000456f, -0.000337f, +0.000918f, +0.000171f, +0.000364f, + -0.000371f, -0.000456f, +0.000161f, +0.000137f, -0.000544f, -0.000027f + }, + { + +0.002608f, -0.062255f, -0.015283f, -0.001437f, +0.000682f, +0.001145f, +0.001846f, +0.001833f, +0.000498f, +0.004092f, + +0.005127f, -0.000760f, +0.000090f, +0.004980f, -0.008916f, +0.004473f, +0.021438f, -0.029977f, -0.002470f, +0.006446f, + -0.003501f, +0.009102f, +0.005340f, +0.012449f, +0.002284f, +0.002038f, +0.003002f, +0.002578f, -0.002479f, -0.001965f, + +0.007019f, +0.003621f, -0.005137f, -0.004608f, +0.005931f, +0.001909f, +0.000171f, -0.008082f, +0.001607f, -0.003938f, + +0.004764f, -0.002285f, -0.001162f, +0.002049f, +0.003722f, -0.000913f, -0.002371f, -0.000201f, -0.000109f, +0.000141f, + +0.002212f, +0.001278f, -0.001168f, +0.000877f, -0.000058f, +0.001747f, +0.001051f, +0.001320f, -0.000892f, -0.001372f, + +0.000732f, -0.000992f, +0.001539f, +0.001201f, +0.001168f, +0.000596f, -0.001945f, +0.001382f, -0.000776f, -0.000668f, + +0.000823f, +0.000103f, -0.001230f, -0.000834f, -0.000218f, +0.000423f, -0.000044f, -0.000407f, -0.000227f, -0.001202f, + -0.000117f, -0.000190f, -0.000446f, -0.000443f, -0.000715f, -0.000254f, +0.000249f, +0.000023f, -0.000103f, +0.000010f, + -0.000287f, +0.000171f, -0.000199f, -0.000189f, +0.000009f, -0.000331f + }, + { + +0.028795f, -0.023407f, -0.011631f, -0.070495f, -0.002435f, -0.002064f, +0.000667f, +0.001783f, +0.001034f, +0.014728f, + +0.001644f, -0.002264f, -0.010333f, +0.003792f, +0.023144f, -0.010272f, -0.010809f, -0.007359f, +0.014958f, -0.001461f, + +0.003941f, -0.000420f, -0.008996f, +0.006342f, -0.011267f, -0.003715f, -0.000730f, -0.001978f, -0.002016f, +0.001341f, + -0.007568f, +0.005109f, +0.001103f, -0.002388f, +0.005673f, +0.007028f, -0.000162f, -0.002704f, +0.000144f, -0.004999f, + -0.002541f, -0.003399f, +0.004769f, -0.000804f, +0.000080f, +0.000501f, +0.001583f, -0.002828f, -0.001760f, +0.004466f, + -0.000897f, +0.001931f, -0.002266f, +0.000020f, +0.000441f, +0.002565f, +0.000522f, +0.000095f, -0.000213f, +0.002147f, + +0.001225f, -0.001173f, +0.000294f, +0.001012f, +0.000173f, -0.000085f, -0.001496f, +0.000482f, -0.000662f, -0.001563f, + +0.000982f, +0.000620f, +0.000418f, -0.001163f, -0.000287f, -0.001068f, -0.000954f, -0.000625f, +0.000737f, +0.000593f, + -0.000177f, +0.000182f, +0.000480f, -0.000916f, +0.000582f, -0.000794f, -0.000688f, +0.000390f, +0.000386f, +0.000459f, + -0.000503f, +0.000014f, +0.000304f, +0.000432f, -0.000358f, -0.000366f + }, + { + +0.000978f, +0.016417f, +0.008579f, +0.002831f, -0.001489f, +0.000202f, +0.000677f, -0.000462f, -0.001575f, -0.003016f, + +0.003461f, +0.004497f, -0.003820f, -0.005118f, +0.001689f, +0.000769f, -0.031538f, -0.008478f, +0.000914f, -0.010378f, + -0.007589f, +0.003747f, -0.001569f, +0.014282f, +0.002568f, -0.012506f, +0.024316f, +0.020987f, +0.009549f, +0.007675f, + -0.002635f, +0.000029f, +0.002957f, +0.002140f, -0.010973f, +0.004545f, -0.001265f, +0.002226f, -0.005831f, +0.002943f, + -0.000427f, -0.001437f, +0.007078f, +0.001488f, +0.000935f, +0.002993f, -0.000300f, +0.002694f, +0.002749f, +0.001968f, + -0.002921f, +0.000665f, +0.002420f, -0.000852f, +0.001928f, +0.001800f, -0.000758f, -0.001773f, +0.001707f, -0.002770f, + -0.000842f, -0.000878f, -0.000042f, +0.001166f, -0.000771f, -0.000709f, -0.000845f, -0.000127f, +0.000214f, +0.000521f, + -0.000511f, +0.000511f, -0.000107f, -0.000846f, -0.000630f, +0.001462f, -0.001174f, -0.000962f, -0.000105f, +0.000728f, + +0.000870f, -0.000334f, -0.000194f, -0.000459f, +0.000444f, -0.000459f, -0.000039f, -0.000387f, +0.000103f, -0.000697f, + -0.000062f, +0.000492f, -0.000076f, -0.000100f, -0.000677f, +0.000376f + }, + { + +0.055329f, -0.022012f, +0.008629f, +0.015740f, +0.012924f, +0.000427f, +0.003810f, +0.001475f, +0.002705f, +0.003262f, + +0.008805f, -0.001052f, -0.000224f, -0.001177f, +0.000139f, +0.005810f, -0.008173f, -0.000750f, +0.002151f, +0.006575f, + +0.003597f, -0.003374f, -0.001232f, +0.004387f, +0.003611f, -0.004644f, -0.000896f, -0.000059f, -0.000593f, -0.001521f, + +0.004294f, +0.001931f, +0.001431f, +0.002367f, -0.003129f, -0.000270f, +0.000141f, -0.002798f, +0.003187f, +0.005127f, + -0.000879f, +0.001235f, -0.001551f, -0.004580f, -0.001598f, +0.000156f, +0.002041f, -0.003822f, -0.000355f, -0.003972f, + +0.005475f, +0.000779f, +0.000867f, +0.002509f, +0.000739f, +0.001111f, +0.001372f, +0.002692f, -0.000093f, -0.000424f, + -0.000858f, +0.000169f, +0.000483f, -0.000692f, +0.000420f, +0.000315f, +0.000929f, +0.000415f, -0.000073f, +0.000633f, + -0.000385f, -0.000219f, -0.001517f, -0.000048f, -0.000666f, -0.000586f, -0.000231f, +0.000512f, +0.001316f, -0.000023f, + -0.000590f, +0.000458f, +0.000749f, -0.000145f, -0.000555f, +0.000100f, -0.000579f, -0.000458f, -0.000066f, -0.000414f, + -0.000492f, -0.000164f, -0.000333f, -0.000059f, +0.000095f, +0.000384f + }, + { + +0.001966f, -0.012274f, +0.009257f, -0.003281f, -0.001275f, -0.001753f, +0.000604f, +0.000850f, +0.002311f, +0.000015f, + -0.001904f, -0.005621f, +0.009054f, +0.006680f, +0.007130f, -0.008166f, +0.002341f, -0.013645f, -0.014542f, +0.023452f, + -0.000129f, -0.002001f, +0.003821f, +0.006484f, -0.005042f, +0.003377f, +0.004025f, +0.011941f, -0.010612f, +0.007510f, + -0.007565f, +0.008590f, +0.000057f, -0.002008f, +0.005537f, +0.005382f, -0.007815f, +0.002828f, +0.000249f, +0.005917f, + +0.002025f, -0.000233f, -0.003063f, +0.000167f, +0.001103f, +0.000198f, -0.001573f, +0.002624f, +0.004740f, -0.007091f, + -0.001911f, +0.001476f, +0.002188f, -0.002095f, -0.000817f, +0.000199f, +0.000093f, -0.001678f, -0.000363f, -0.000793f, + +0.002973f, -0.000199f, -0.002887f, +0.001538f, +0.001359f, -0.000375f, +0.000346f, -0.001126f, -0.000059f, +0.001324f, + -0.000671f, +0.000819f, +0.000145f, +0.000531f, +0.000279f, +0.001098f, -0.000586f, +0.000050f, -0.000357f, -0.000235f, + +0.000487f, +0.000358f, +0.000581f, -0.000164f, +0.000363f, -0.000207f, -0.000774f, +0.000802f, -0.000140f, -0.000559f, + -0.000751f, -0.000070f, -0.000056f, +0.000679f, -0.000139f, +0.000285f + }, + { + -0.005768f, +0.039682f, +0.003054f, -0.004978f, +0.017214f, -0.007196f, +0.004886f, -0.001734f, -0.003412f, -0.006010f, + +0.004340f, +0.013842f, +0.011302f, -0.011849f, -0.002998f, +0.013654f, +0.001752f, +0.006297f, +0.003055f, -0.001276f, + +0.005240f, +0.000652f, +0.001076f, -0.000059f, -0.000424f, +0.003009f, -0.001759f, +0.001793f, -0.000070f, -0.001768f, + -0.002673f, -0.008627f, -0.000690f, +0.007348f, -0.003215f, +0.001569f, +0.003267f, -0.001106f, -0.000478f, -0.003705f, + -0.000406f, -0.000665f, +0.000124f, +0.000338f, -0.003718f, -0.000129f, -0.000201f, -0.002214f, +0.001913f, -0.002480f, + -0.002736f, -0.001413f, -0.001211f, -0.002585f, -0.000255f, +0.000519f, +0.001938f, -0.001985f, +0.001284f, -0.000939f, + +0.000834f, +0.000168f, -0.001205f, +0.000297f, +0.000194f, +0.000540f, +0.000229f, -0.000868f, +0.000202f, +0.000491f, + +0.000093f, -0.000344f, +0.000766f, -0.000951f, -0.000152f, +0.002163f, +0.001233f, -0.000501f, +0.000255f, +0.000614f, + -0.000142f, +0.000105f, +0.000330f, -0.000232f, -0.000541f, +0.000052f, +0.000318f, -0.000010f, +0.000344f, -0.000904f, + +0.000260f, -0.000454f, -0.000054f, +0.000354f, -0.000137f, +0.000385f + }, + { + +0.000542f, -0.066836f, -0.013850f, +0.014562f, +0.015060f, -0.001830f, -0.001504f, +0.000614f, -0.007895f, -0.000868f, + -0.005190f, +0.009569f, +0.008843f, +0.000499f, -0.004517f, -0.002813f, -0.003456f, -0.012134f, -0.012841f, -0.022137f, + +0.003964f, -0.001064f, -0.006903f, -0.002009f, +0.007292f, +0.001348f, -0.021300f, +0.011400f, +0.002177f, +0.007738f, + -0.007137f, -0.004931f, -0.004318f, -0.000800f, +0.001940f, +0.006411f, +0.001123f, +0.001412f, +0.004785f, +0.000118f, + -0.000118f, +0.000712f, +0.001555f, -0.005857f, -0.003939f, +0.002028f, -0.001241f, -0.000549f, +0.002936f, -0.000668f, + -0.000670f, +0.003841f, -0.000635f, -0.000868f, +0.001083f, -0.000012f, +0.000205f, -0.000198f, -0.000148f, -0.002480f, + -0.002533f, -0.001000f, -0.000156f, +0.001169f, -0.001422f, +0.001362f, -0.000186f, +0.000463f, -0.000291f, -0.001555f, + +0.000285f, -0.001238f, -0.001032f, -0.000939f, -0.000219f, -0.000118f, -0.000685f, -0.001068f, +0.000259f, +0.001659f, + -0.000671f, +0.000151f, -0.000820f, +0.000283f, -0.000107f, -0.001011f, +0.000201f, +0.000271f, +0.000552f, +0.000052f, + +0.000579f, +0.000168f, -0.000054f, -0.000028f, -0.000021f, -0.000230f + }, + { + +0.006745f, -0.297007f, +0.003031f, +0.004533f, -0.023128f, +0.024387f, -0.009222f, -0.000300f, +0.000169f, -0.002919f, + +0.004090f, -0.001666f, -0.002712f, +0.015131f, -0.015139f, +0.000853f, -0.003791f, +0.004138f, -0.006062f, -0.003761f, + +0.018909f, -0.001629f, +0.002054f, +0.000058f, -0.003384f, +0.001809f, +0.000057f, +0.004257f, +0.004712f, +0.001839f, + +0.000765f, +0.000286f, +0.000553f, -0.001383f, -0.006215f, -0.000725f, -0.004634f, -0.006510f, +0.001239f, -0.003214f, + +0.003541f, -0.000380f, -0.005452f, +0.001185f, -0.004566f, -0.000636f, -0.001367f, -0.000526f, -0.002324f, -0.003509f, + +0.003079f, +0.002868f, -0.001752f, +0.002192f, -0.000700f, +0.001638f, +0.000324f, +0.000061f, -0.000562f, -0.001325f, + -0.000053f, -0.000634f, +0.001468f, +0.001053f, -0.000487f, +0.000250f, -0.001497f, +0.000670f, +0.000923f, +0.000957f, + -0.000148f, -0.000941f, -0.000671f, +0.000112f, -0.001108f, -0.001116f, -0.001148f, +0.000041f, +0.000521f, +0.000218f, + +0.000349f, -0.000066f, +0.000356f, +0.000035f, -0.000616f, -0.000332f, -0.000579f, +0.000373f, +0.000322f, +0.000503f, + +0.000153f, +0.000073f, -0.000274f, +0.000258f, +0.000236f, -0.000214f + }, + { + +0.002723f, -0.043809f, +0.002951f, +0.014531f, -0.006100f, +0.000617f, -0.000575f, -0.004065f, +0.000623f, +0.006050f, + -0.005680f, +0.005155f, -0.001525f, -0.007395f, -0.000958f, +0.009002f, -0.011027f, +0.010977f, -0.009754f, +0.014999f, + -0.003698f, -0.005106f, +0.002110f, -0.002691f, -0.007390f, -0.004174f, -0.008198f, -0.017266f, +0.007941f, -0.006580f, + -0.002613f, -0.005580f, -0.006308f, -0.004216f, +0.001034f, +0.004239f, +0.005152f, +0.013238f, -0.001334f, +0.003017f, + +0.004812f, +0.010749f, +0.000123f, -0.001486f, -0.000975f, -0.001704f, -0.005297f, +0.000036f, +0.001471f, -0.000187f, + +0.004010f, +0.000458f, +0.005082f, -0.003080f, -0.000229f, -0.003005f, -0.000387f, +0.002260f, -0.000022f, +0.000612f, + +0.001298f, -0.000166f, -0.001553f, +0.000462f, +0.000132f, +0.001322f, -0.000829f, +0.001935f, -0.001418f, +0.000142f, + +0.002380f, -0.000145f, -0.000126f, +0.000679f, +0.000108f, +0.000027f, +0.000428f, -0.000245f, +0.001020f, -0.000784f, + -0.000109f, -0.000178f, -0.000589f, +0.000339f, -0.000017f, -0.000085f, +0.000091f, +0.000066f, +0.000106f, -0.000117f, + +0.000753f, +0.000271f, -0.000578f, +0.000426f, +0.000498f, +0.000310f + }, + { + -0.076065f, -0.175709f, -0.004256f, -0.004919f, -0.000651f, +0.016759f, -0.015012f, +0.005472f, -0.000456f, -0.019795f, + -0.021141f, -0.000023f, -0.003270f, +0.000261f, -0.014571f, +0.000620f, -0.013386f, +0.004857f, +0.007257f, -0.004074f, + +0.009607f, -0.004130f, +0.007476f, -0.004351f, +0.004213f, -0.006494f, +0.001044f, +0.008284f, -0.007255f, +0.006316f, + +0.001552f, +0.003439f, -0.001067f, +0.005000f, -0.000581f, +0.007388f, -0.006881f, -0.001794f, -0.001594f, -0.006386f, + +0.001600f, +0.001819f, +0.002399f, +0.007978f, -0.003759f, -0.006755f, -0.002682f, +0.002675f, +0.001685f, +0.000532f, + -0.003915f, -0.000907f, -0.001004f, -0.004444f, +0.000271f, -0.005186f, +0.000413f, -0.002096f, +0.000273f, +0.001039f, + +0.000821f, +0.000082f, -0.000005f, +0.000085f, +0.000116f, +0.000395f, -0.000856f, +0.001507f, +0.001609f, +0.000457f, + +0.000457f, -0.000445f, +0.000501f, +0.000051f, +0.001274f, -0.000166f, +0.000781f, +0.000402f, -0.000009f, +0.000079f, + -0.000204f, -0.000324f, +0.001183f, +0.000250f, -0.000597f, +0.000968f, -0.000305f, -0.000234f, +0.000061f, -0.000400f, + -0.000337f, -0.000789f, -0.000051f, -0.000565f, +0.000115f, +0.000158f + }, + { + +0.002225f, -0.066716f, -0.016644f, -0.000059f, +0.011543f, +0.005510f, -0.001345f, -0.002649f, +0.001484f, -0.000833f, + -0.008780f, -0.002109f, -0.008016f, -0.018779f, +0.066718f, -0.004659f, -0.002800f, +0.002570f, +0.008183f, -0.005186f, + -0.015648f, -0.003451f, +0.009346f, +0.007236f, -0.003206f, +0.011239f, +0.010122f, +0.012778f, -0.007048f, +0.003671f, + +0.004764f, +0.000325f, +0.011679f, +0.006973f, +0.000004f, +0.001741f, -0.000314f, +0.003683f, -0.000042f, -0.000241f, + +0.005938f, +0.002499f, -0.000224f, +0.002439f, -0.004366f, +0.001556f, +0.003087f, -0.001573f, -0.002806f, +0.002147f, + -0.001926f, -0.003426f, -0.001290f, -0.000199f, -0.001422f, -0.000333f, +0.000249f, +0.002787f, +0.002454f, -0.000568f, + -0.000551f, -0.001410f, +0.000665f, -0.000796f, -0.000686f, +0.003206f, -0.000273f, +0.000308f, -0.000586f, -0.000896f, + -0.000563f, +0.001268f, +0.001687f, -0.000930f, -0.000915f, -0.000607f, +0.000267f, -0.000241f, -0.000496f, -0.000742f, + -0.000292f, -0.000590f, -0.000542f, -0.000828f, -0.000252f, -0.000420f, -0.000498f, -0.000072f, +0.000095f, -0.000528f, + +0.000070f, -0.000536f, +0.000099f, +0.000257f, +0.000043f, -0.000375f + }, + { + -0.018221f, -0.204943f, -0.011791f, -0.024148f, -0.001526f, -0.013854f, -0.004959f, +0.013051f, +0.001021f, +0.002726f, + +0.013390f, -0.000028f, -0.001742f, -0.008734f, +0.015936f, +0.001007f, +0.001364f, +0.001787f, +0.008680f, -0.007696f, + +0.013602f, +0.004100f, -0.007148f, +0.001162f, +0.008110f, -0.011294f, -0.006673f, +0.001257f, +0.009352f, +0.000749f, + +0.001091f, -0.006098f, +0.008237f, -0.001734f, -0.009605f, -0.004725f, +0.000707f, -0.005100f, +0.001100f, -0.002974f, + -0.001416f, +0.004542f, +0.003177f, +0.000386f, +0.000304f, -0.002532f, +0.002913f, -0.001306f, -0.001407f, +0.001365f, + -0.000469f, -0.004537f, -0.000845f, -0.001233f, -0.002153f, -0.001145f, +0.000920f, -0.001666f, +0.000726f, +0.002129f, + +0.003656f, +0.001811f, -0.000170f, +0.000093f, +0.000884f, +0.001263f, -0.000231f, -0.000372f, +0.000480f, -0.001145f, + +0.000924f, +0.000653f, -0.000066f, +0.000548f, -0.000471f, +0.001436f, +0.000385f, +0.000825f, +0.000958f, -0.000561f, + +0.000382f, +0.000747f, -0.000043f, -0.000558f, +0.000335f, +0.000021f, +0.000381f, +0.000190f, +0.000252f, +0.001201f, + -0.000229f, +0.000339f, +0.000147f, -0.000437f, -0.000156f, -0.000131f + } + }, + { + { + -0.002995f, -0.075268f, -0.003420f, +0.013466f, +0.001737f, +0.000870f, +0.000965f, +0.003042f, -0.003428f, +0.015917f, + -0.000665f, -0.009873f, -0.009694f, +0.014518f, +0.012838f, +0.009195f, +0.009399f, -0.005796f, +0.003010f, -0.000703f, + +0.002009f, +0.015670f, +0.011420f, -0.001296f, -0.004973f, -0.013524f, +0.002063f, -0.009055f, -0.002876f, -0.016438f, + -0.003109f, +0.003391f, -0.001893f, -0.000901f, -0.002705f, +0.007380f, -0.002226f, -0.003841f, -0.006568f, -0.001115f, + -0.000318f, +0.007701f, +0.000807f, +0.006101f, +0.004845f, -0.001988f, -0.000283f, +0.001346f, -0.006707f, +0.002975f, + +0.005077f, -0.000972f, -0.000015f, -0.000484f, -0.001296f, +0.000429f, +0.000377f, +0.002649f, -0.003756f, -0.001210f, + +0.001210f, -0.001147f, -0.001020f, +0.000023f, +0.001684f, -0.000288f, -0.001097f, -0.001581f, -0.001251f, +0.001509f, + +0.001298f, -0.002001f, +0.001406f, +0.001292f, -0.000032f, -0.000157f, -0.000001f, -0.000065f, +0.000027f, +0.000554f, + -0.001390f, +0.000189f, -0.000317f, +0.000712f, -0.000809f, -0.000291f, -0.000531f, -0.000216f, -0.000053f, +0.000437f, + +0.000404f, -0.000080f, -0.000328f, -0.000435f, +0.000160f, +0.000537f + }, + { + -0.019113f, -0.011094f, -0.017962f, +0.035001f, +0.005855f, -0.000193f, -0.004455f, +0.004522f, -0.007210f, +0.001242f, + -0.003885f, +0.008554f, +0.009187f, +0.009554f, +0.004687f, -0.003793f, -0.010742f, -0.003724f, +0.004851f, -0.006285f, + -0.007584f, -0.008994f, -0.001849f, +0.001779f, -0.005514f, +0.010502f, -0.002922f, +0.004864f, +0.004472f, -0.001475f, + +0.004534f, -0.005537f, +0.002959f, -0.001119f, -0.001098f, +0.005649f, -0.007379f, -0.001022f, -0.005197f, -0.003533f, + -0.002945f, -0.001724f, +0.000739f, -0.004928f, +0.000706f, +0.000318f, +0.004130f, +0.005134f, +0.002378f, +0.000776f, + -0.000740f, -0.000469f, -0.002092f, -0.000152f, +0.001838f, -0.001852f, +0.001794f, -0.000339f, -0.001702f, -0.002859f, + -0.001144f, -0.000924f, +0.001113f, -0.000383f, +0.000984f, +0.001944f, -0.000466f, +0.000233f, +0.000637f, -0.001414f, + +0.000445f, +0.001244f, +0.000847f, -0.000316f, +0.000097f, -0.000367f, -0.000201f, +0.000911f, -0.001329f, -0.000289f, + -0.000776f, +0.000828f, -0.000279f, -0.000575f, +0.000554f, -0.000509f, -0.000055f, +0.000313f, -0.000099f, -0.000117f, + +0.000458f, -0.000215f, -0.000032f, -0.000239f, +0.000102f, +0.000163f + }, + { + +0.010561f, +0.101631f, -0.037004f, -0.027033f, +0.054884f, -0.003884f, +0.003473f, +0.004047f, +0.000129f, -0.001813f, + -0.012025f, +0.005446f, +0.002617f, +0.027689f, -0.001433f, -0.004544f, -0.014976f, -0.017188f, +0.006732f, -0.006577f, + -0.005174f, -0.007858f, +0.015566f, +0.009318f, +0.008325f, -0.000800f, -0.004480f, +0.002662f, -0.004246f, +0.001923f, + +0.003098f, -0.000024f, +0.001039f, -0.000568f, -0.006356f, -0.001529f, -0.004172f, -0.004185f, +0.000946f, +0.000039f, + -0.001940f, -0.005174f, +0.003623f, -0.001370f, -0.000841f, -0.000663f, -0.000939f, -0.000676f, +0.005227f, +0.001105f, + +0.002769f, +0.000218f, -0.003717f, -0.001111f, -0.000996f, +0.002683f, +0.001062f, -0.000430f, +0.001276f, +0.002742f, + -0.001349f, +0.001288f, +0.001166f, -0.000007f, +0.000280f, +0.000937f, -0.000838f, -0.000762f, -0.000222f, -0.000897f, + +0.000118f, +0.000680f, +0.001143f, +0.000166f, -0.000327f, +0.000707f, +0.000016f, -0.000681f, -0.001225f, -0.000267f, + -0.000307f, +0.000020f, -0.000320f, +0.000073f, +0.000667f, +0.000732f, -0.000547f, +0.000172f, -0.000152f, +0.000201f, + -0.000722f, -0.000634f, +0.000063f, +0.000070f, -0.000079f, +0.000786f + }, + { + -0.003593f, -0.040893f, +0.007710f, -0.000629f, +0.001028f, -0.001057f, -0.001943f, +0.000134f, -0.002120f, -0.000801f, + +0.009536f, +0.002570f, +0.002426f, -0.001832f, -0.023880f, -0.008382f, +0.017885f, -0.014895f, +0.012807f, +0.003623f, + -0.013173f, +0.000119f, +0.004883f, +0.008262f, -0.008487f, -0.002302f, -0.007610f, +0.000389f, -0.002223f, -0.005665f, + +0.004552f, +0.005601f, +0.000844f, -0.006396f, -0.002396f, -0.007472f, -0.005629f, -0.009746f, -0.000666f, -0.005941f, + +0.000274f, -0.004350f, +0.001621f, +0.003540f, +0.001034f, -0.002782f, -0.001249f, +0.000640f, -0.000396f, -0.000904f, + +0.001444f, -0.000903f, -0.001335f, +0.000587f, +0.000158f, +0.002212f, +0.001098f, +0.001260f, +0.000041f, -0.002141f, + -0.000492f, -0.001810f, +0.001199f, -0.000106f, +0.000519f, +0.000923f, -0.001417f, +0.001141f, -0.001190f, -0.001165f, + -0.000067f, -0.000348f, -0.001625f, -0.000406f, -0.000064f, +0.000080f, -0.000495f, -0.000092f, +0.001234f, +0.000087f, + +0.000219f, -0.000370f, +0.000060f, +0.000342f, -0.000005f, +0.000071f, +0.000196f, +0.000057f, +0.000099f, +0.000607f, + -0.000207f, +0.000135f, +0.000269f, +0.000144f, -0.000195f, -0.000295f + }, + { + -0.051955f, -0.131513f, +0.002624f, -0.058790f, -0.003867f, -0.007034f, -0.004605f, -0.004199f, -0.009237f, +0.007636f, + -0.004215f, +0.000909f, -0.013318f, -0.008381f, +0.011427f, -0.001864f, -0.001969f, -0.004091f, +0.023423f, -0.011394f, + -0.003109f, +0.003720f, -0.007017f, +0.012405f, -0.003953f, -0.003527f, -0.008252f, -0.011349f, -0.006130f, -0.000098f, + -0.008336f, +0.002921f, +0.004347f, +0.001399f, +0.002203f, +0.004754f, -0.007403f, -0.007493f, +0.004401f, -0.001870f, + -0.000736f, -0.001822f, +0.003630f, +0.001654f, -0.001887f, -0.002856f, +0.003183f, +0.000124f, -0.002928f, +0.002332f, + -0.000611f, +0.002662f, -0.001966f, -0.001408f, -0.002425f, +0.001100f, +0.001889f, +0.000193f, -0.000037f, +0.000108f, + -0.000757f, +0.000710f, +0.002335f, +0.001521f, +0.000421f, +0.000342f, -0.000810f, +0.000655f, -0.000187f, +0.000243f, + +0.001681f, -0.000273f, +0.000216f, -0.000664f, +0.000760f, -0.000050f, -0.001191f, +0.000475f, +0.000773f, -0.000230f, + -0.000024f, +0.000258f, +0.000596f, -0.000452f, +0.000686f, -0.000481f, -0.000305f, +0.000694f, +0.000122f, +0.000121f, + +0.000320f, +0.000083f, -0.000169f, +0.000574f, +0.000010f, +0.000069f + }, + { + -0.000368f, -0.015221f, -0.007219f, +0.001987f, -0.002706f, +0.000467f, -0.000050f, +0.001273f, +0.000568f, +0.003950f, + +0.008192f, +0.000672f, +0.000988f, -0.007386f, -0.022436f, -0.004927f, -0.007157f, +0.007428f, -0.006126f, +0.003598f, + +0.015842f, -0.000964f, -0.015542f, +0.002444f, -0.003175f, -0.020111f, +0.001753f, +0.008072f, +0.005530f, +0.008004f, + -0.003583f, +0.005662f, +0.005046f, +0.005137f, +0.000352f, +0.009750f, -0.004961f, -0.000589f, -0.005436f, +0.003672f, + -0.004470f, -0.005120f, +0.000971f, -0.001612f, -0.000412f, +0.002753f, +0.003235f, +0.002069f, -0.000751f, -0.000494f, + -0.001546f, +0.002467f, +0.003418f, +0.000767f, +0.001771f, +0.000413f, -0.001318f, -0.000381f, +0.003658f, -0.002553f, + -0.000050f, -0.000194f, +0.000026f, +0.000900f, +0.000082f, +0.001411f, +0.000035f, +0.000605f, -0.000447f, -0.000248f, + -0.000008f, +0.000881f, +0.000473f, -0.000708f, -0.000993f, +0.001164f, -0.001072f, -0.000484f, +0.000206f, +0.001286f, + +0.000258f, +0.000185f, +0.000237f, -0.000022f, +0.000262f, -0.000164f, +0.000623f, -0.000277f, +0.000383f, -0.000176f, + +0.000151f, +0.000155f, -0.000091f, +0.000432f, -0.000095f, +0.000361f + }, + { + -0.056417f, -0.222638f, -0.016158f, -0.008353f, -0.019717f, +0.000915f, -0.002731f, -0.005178f, -0.000571f, -0.012721f, + -0.001917f, -0.002126f, +0.003009f, +0.001781f, +0.002853f, +0.009223f, -0.005379f, -0.001609f, -0.001107f, -0.003693f, + -0.002390f, -0.000392f, -0.004426f, -0.011263f, -0.006606f, -0.004641f, +0.001694f, +0.007871f, -0.001328f, -0.002697f, + +0.005120f, -0.003936f, -0.002043f, +0.000445f, -0.004510f, -0.002494f, +0.001359f, -0.005707f, -0.002709f, +0.007705f, + -0.000888f, -0.001434f, -0.001246f, -0.002557f, +0.001241f, +0.001760f, -0.000449f, -0.004489f, -0.000234f, -0.005291f, + +0.001368f, +0.000299f, +0.002416f, +0.003528f, +0.000434f, +0.000642f, +0.000107f, +0.001932f, +0.001728f, +0.001393f, + -0.000208f, -0.003147f, -0.002487f, -0.000642f, +0.000603f, +0.000289f, +0.000328f, +0.000089f, -0.000234f, -0.000107f, + -0.000880f, -0.000760f, -0.001672f, +0.000110f, -0.000129f, -0.000763f, -0.000778f, +0.000282f, +0.000870f, -0.000317f, + -0.001249f, +0.000044f, +0.000579f, -0.000072f, -0.000467f, -0.000108f, -0.000152f, +0.000448f, +0.001166f, +0.000307f, + -0.000357f, +0.000304f, +0.000101f, -0.000134f, -0.000278f, +0.000412f + }, + { + -0.000080f, -0.022385f, +0.006423f, -0.001780f, +0.004440f, +0.001289f, +0.000563f, -0.001845f, -0.000211f, +0.001088f, + +0.002995f, +0.000546f, +0.007973f, -0.001999f, +0.000868f, +0.011294f, +0.016198f, -0.009012f, -0.013749f, +0.028794f, + -0.009420f, -0.012295f, -0.000893f, +0.001893f, -0.007414f, -0.001699f, -0.019841f, -0.007872f, -0.019751f, -0.001966f, + -0.009995f, +0.005238f, -0.003243f, -0.007917f, -0.007318f, -0.004217f, -0.005171f, +0.005955f, +0.001090f, +0.001198f, + +0.000481f, +0.002688f, -0.004147f, +0.000759f, +0.003482f, +0.002266f, -0.004635f, -0.001090f, +0.003875f, -0.005175f, + +0.001065f, +0.001824f, +0.004058f, -0.000714f, -0.001584f, -0.000403f, +0.001123f, -0.000841f, +0.001845f, -0.000007f, + +0.004352f, +0.001217f, -0.003875f, -0.000351f, -0.000251f, -0.000406f, +0.001302f, -0.001154f, -0.000698f, +0.000752f, + -0.000340f, -0.000304f, +0.000239f, +0.001203f, +0.000229f, +0.001238f, +0.000021f, +0.000187f, -0.000783f, -0.000359f, + +0.000408f, -0.000536f, +0.000379f, -0.000004f, -0.000025f, -0.000141f, -0.000680f, +0.001287f, +0.000281f, +0.000096f, + -0.000101f, -0.000580f, -0.000585f, +0.000036f, -0.000772f, -0.000086f + }, + { + -0.032697f, +0.024421f, +0.024741f, -0.037219f, -0.020884f, -0.007194f, +0.001297f, -0.007501f, -0.005506f, -0.012687f, + +0.002572f, +0.011624f, -0.006528f, -0.019924f, +0.008736f, +0.014758f, +0.002503f, +0.009018f, -0.006796f, -0.009625f, + -0.004054f, -0.000924f, -0.002708f, -0.000880f, +0.000060f, +0.002044f, +0.000197f, +0.002105f, +0.000782f, +0.000077f, + +0.003055f, +0.001885f, +0.005398f, +0.006484f, -0.004545f, +0.006677f, +0.007613f, -0.002614f, +0.002422f, +0.002802f, + +0.003574f, +0.002300f, +0.005108f, +0.005201f, +0.000760f, +0.000927f, +0.002878f, +0.001420f, -0.001155f, -0.002576f, + -0.003063f, -0.002166f, +0.001385f, +0.000749f, +0.000822f, -0.000496f, -0.000503f, -0.001674f, +0.002205f, -0.000165f, + +0.000725f, +0.000640f, -0.001822f, -0.000800f, -0.000055f, -0.000137f, +0.000968f, -0.000074f, -0.000310f, +0.001053f, + +0.000950f, -0.000775f, +0.000018f, -0.001430f, -0.001978f, +0.000384f, +0.000133f, -0.000652f, -0.000244f, -0.000077f, + -0.000379f, -0.000034f, +0.000392f, -0.000103f, -0.000259f, +0.000120f, +0.000345f, +0.000350f, +0.000492f, -0.000634f, + +0.000294f, -0.000515f, -0.000267f, +0.000132f, +0.000430f, +0.000181f + }, + { + -0.001672f, -0.073155f, -0.003502f, +0.028508f, +0.007425f, +0.007476f, +0.020846f, +0.001375f, -0.005602f, +0.003253f, + +0.009000f, +0.014743f, +0.011361f, -0.003222f, -0.006705f, +0.011732f, -0.004455f, -0.017489f, +0.001603f, +0.003327f, + +0.004834f, +0.003780f, +0.000695f, +0.006367f, +0.013452f, -0.000061f, -0.023136f, +0.015401f, +0.007795f, +0.012254f, + -0.005190f, -0.005011f, -0.000727f, -0.001974f, -0.005983f, +0.000008f, -0.010124f, -0.006795f, +0.004050f, +0.000038f, + +0.000210f, +0.001753f, +0.002316f, -0.005268f, -0.003044f, +0.006126f, -0.001430f, -0.003094f, +0.002180f, -0.000091f, + -0.001186f, +0.003083f, -0.002742f, +0.000735f, +0.001847f, +0.000003f, -0.001517f, -0.001116f, +0.001091f, +0.000290f, + +0.001018f, +0.001577f, +0.000305f, -0.000780f, -0.002722f, +0.000271f, -0.002214f, -0.000880f, +0.000610f, -0.000439f, + +0.000297f, -0.000052f, -0.000031f, -0.000423f, +0.000604f, +0.000734f, +0.000341f, -0.000127f, +0.000365f, +0.002265f, + -0.000422f, +0.000028f, -0.000517f, +0.000287f, -0.000000f, -0.000668f, +0.000127f, -0.000296f, +0.000206f, +0.000358f, + +0.001169f, -0.000412f, -0.000637f, -0.000085f, +0.000095f, +0.000210f + }, + { + -0.005743f, -0.333773f, -0.013506f, +0.021276f, -0.003896f, +0.012003f, -0.006036f, -0.000329f, -0.008212f, -0.003769f, + +0.001766f, +0.001171f, +0.001848f, +0.010762f, -0.020090f, +0.003781f, -0.004740f, -0.003047f, -0.004071f, -0.011043f, + +0.011160f, -0.003705f, +0.006349f, +0.002144f, -0.004197f, +0.000042f, -0.002513f, -0.005285f, -0.006046f, -0.004768f, + -0.005723f, -0.006752f, +0.000268f, -0.001835f, -0.007571f, +0.001933f, +0.000355f, -0.002837f, +0.002220f, -0.004170f, + +0.001833f, +0.004535f, -0.000463f, +0.004046f, -0.006204f, -0.002050f, -0.000266f, +0.003016f, +0.000567f, -0.000154f, + +0.003197f, +0.000106f, -0.000104f, +0.003633f, -0.000809f, -0.000724f, -0.000163f, +0.001450f, +0.001494f, +0.000473f, + -0.000760f, -0.001613f, +0.001285f, +0.000345f, -0.001084f, -0.000368f, -0.002351f, +0.001077f, -0.000236f, +0.000263f, + -0.000511f, -0.001117f, -0.000776f, +0.000417f, +0.000449f, +0.000316f, -0.000303f, +0.000318f, +0.000275f, -0.000009f, + -0.000047f, +0.000043f, +0.000689f, +0.000036f, -0.000306f, -0.000447f, -0.000067f, +0.000010f, +0.000144f, +0.000028f, + -0.000663f, +0.000297f, +0.000160f, +0.000304f, +0.000045f, -0.000274f + }, + { + -0.002908f, -0.012995f, +0.036247f, +0.020010f, -0.003589f, +0.000548f, -0.007597f, -0.007488f, -0.005169f, +0.000268f, + -0.009378f, +0.004712f, +0.006515f, +0.008604f, +0.012418f, +0.018334f, -0.002085f, +0.019880f, -0.010069f, +0.019370f, + -0.004085f, -0.004888f, +0.009362f, +0.003144f, +0.011924f, +0.003355f, -0.005510f, -0.013298f, +0.003499f, -0.007925f, + +0.010859f, -0.002408f, +0.000203f, -0.004188f, -0.004793f, +0.001136f, +0.000455f, +0.006309f, +0.004107f, +0.005161f, + -0.000921f, +0.004952f, +0.002731f, +0.000758f, +0.000809f, -0.000268f, -0.000108f, +0.004145f, +0.000023f, -0.000054f, + +0.003026f, -0.002261f, +0.004810f, -0.001085f, +0.001077f, +0.000659f, +0.001271f, +0.001442f, -0.000131f, +0.001289f, + +0.000477f, +0.001283f, +0.000136f, +0.000085f, -0.001532f, -0.000401f, -0.001899f, +0.001188f, -0.001274f, -0.000549f, + +0.001263f, -0.000109f, -0.000530f, -0.000662f, -0.000093f, -0.000319f, -0.000383f, +0.000185f, +0.001779f, +0.000251f, + +0.000467f, -0.000151f, -0.000380f, +0.000204f, +0.000037f, +0.000583f, +0.000332f, -0.000345f, +0.000087f, +0.000329f, + +0.000737f, +0.000154f, -0.000651f, +0.000079f, +0.000226f, +0.000034f + }, + { + +0.077732f, -0.004763f, -0.025311f, +0.027683f, -0.010491f, +0.008647f, -0.001810f, +0.009028f, +0.007631f, -0.002713f, + +0.000435f, +0.017693f, -0.000250f, +0.013796f, +0.000606f, +0.002353f, -0.023364f, -0.006912f, +0.006474f, -0.001810f, + +0.010372f, -0.005705f, +0.011113f, -0.000617f, +0.002389f, -0.007349f, +0.001713f, +0.015367f, -0.003483f, +0.002046f, + +0.007682f, +0.009574f, -0.001242f, +0.003124f, +0.000540f, +0.010811f, +0.001627f, +0.002038f, -0.001941f, -0.004957f, + -0.001598f, +0.002625f, +0.002024f, +0.008438f, +0.001212f, -0.000625f, -0.002614f, +0.002318f, +0.000391f, +0.002057f, + -0.003924f, -0.000993f, -0.002257f, -0.005071f, +0.004607f, -0.001586f, +0.000023f, -0.002334f, -0.000266f, -0.001138f, + -0.001624f, +0.000113f, +0.000323f, +0.000909f, +0.001472f, +0.000917f, -0.001874f, -0.000275f, -0.000374f, +0.000402f, + +0.000640f, -0.001068f, -0.001218f, -0.000200f, +0.000979f, -0.000563f, +0.000630f, -0.000077f, -0.000086f, +0.000213f, + +0.000376f, -0.000502f, -0.000163f, -0.000467f, -0.000833f, +0.000864f, -0.000570f, -0.000797f, -0.000270f, +0.000180f, + +0.000203f, -0.001099f, +0.000209f, +0.000528f, +0.000497f, +0.000359f + }, + { + -0.002486f, -0.038689f, +0.014708f, -0.000512f, +0.003724f, +0.006932f, +0.011617f, +0.004504f, +0.003347f, +0.004246f, + +0.000031f, -0.005065f, -0.010775f, -0.026671f, +0.034336f, -0.005045f, +0.010610f, +0.013139f, +0.008254f, -0.005418f, + -0.006761f, +0.001148f, +0.009236f, +0.007917f, -0.006755f, +0.007302f, +0.003749f, +0.010294f, +0.003607f, +0.001516f, + +0.003604f, -0.002039f, +0.004408f, +0.000494f, -0.007951f, -0.002256f, -0.005183f, +0.001251f, +0.003310f, +0.003268f, + +0.001530f, -0.003508f, -0.004574f, -0.000036f, -0.004350f, -0.001452f, -0.003499f, -0.002317f, -0.000211f, +0.002998f, + -0.000684f, +0.000606f, -0.001401f, +0.000048f, -0.000613f, -0.000558f, -0.001461f, -0.001061f, +0.000208f, -0.002090f, + -0.002611f, -0.000707f, +0.000976f, -0.000817f, -0.001392f, +0.002224f, -0.002114f, -0.000326f, -0.000056f, -0.000088f, + +0.000589f, +0.000504f, +0.000548f, +0.000194f, +0.000092f, -0.000705f, +0.000343f, -0.000783f, +0.000366f, -0.000121f, + -0.000639f, +0.000237f, -0.000086f, -0.000773f, +0.000333f, -0.000029f, -0.000225f, -0.000323f, -0.000039f, -0.000729f, + -0.000376f, -0.000642f, +0.000278f, +0.000063f, -0.000415f, -0.000416f + }, + { + +0.042167f, -0.118793f, -0.009581f, -0.016056f, +0.005768f, -0.014166f, -0.004677f, +0.006725f, -0.003897f, +0.004666f, + +0.015438f, -0.000949f, -0.008111f, -0.012532f, +0.014811f, +0.000410f, -0.010512f, -0.009770f, +0.014945f, +0.001495f, + +0.005930f, -0.001405f, -0.001396f, -0.002260f, +0.012329f, +0.001710f, -0.000144f, -0.006666f, +0.003910f, +0.002250f, + +0.004725f, +0.004705f, +0.010447f, -0.005503f, -0.013078f, -0.005402f, -0.002979f, -0.006754f, +0.007006f, -0.000406f, + -0.001789f, +0.006543f, +0.001576f, -0.000257f, -0.000390f, -0.002838f, +0.005380f, +0.000493f, -0.002328f, +0.001488f, + -0.003293f, -0.004342f, +0.002307f, +0.002008f, +0.001305f, +0.000433f, -0.000079f, -0.002869f, +0.001339f, +0.001292f, + +0.000744f, +0.001096f, -0.001065f, -0.001742f, +0.000056f, +0.001602f, +0.000070f, +0.000084f, +0.000374f, -0.000410f, + +0.001662f, +0.000200f, +0.000836f, +0.002497f, +0.000394f, +0.001164f, -0.000366f, +0.000420f, +0.000213f, -0.000657f, + +0.000294f, +0.000524f, +0.000699f, +0.000057f, +0.000120f, -0.001104f, -0.000473f, -0.000547f, +0.000076f, +0.000666f, + -0.000076f, +0.000762f, +0.000355f, -0.000150f, -0.000259f, -0.000522f + } + }, + { + { + +0.003458f, -0.086758f, -0.006690f, +0.020108f, +0.004724f, -0.001056f, -0.001798f, -0.000868f, +0.008115f, +0.012169f, + -0.001848f, +0.004630f, -0.012530f, +0.002873f, +0.023556f, +0.014609f, -0.000803f, +0.005204f, +0.001696f, -0.022429f, + +0.007318f, +0.020479f, +0.000321f, +0.020155f, -0.015804f, -0.008589f, -0.003681f, -0.001775f, -0.017485f, -0.006429f, + +0.008578f, -0.000644f, +0.000220f, -0.006911f, -0.006067f, +0.006684f, +0.000708f, -0.008233f, +0.000062f, -0.002318f, + +0.001514f, +0.005350f, +0.002159f, +0.004889f, +0.002470f, +0.003750f, -0.001317f, -0.002418f, -0.003490f, -0.001827f, + +0.005614f, +0.001111f, +0.000089f, -0.001357f, +0.000840f, -0.001540f, +0.000489f, +0.000008f, -0.000750f, -0.001187f, + +0.000240f, +0.001626f, -0.003345f, +0.000745f, +0.001588f, -0.001819f, +0.000365f, -0.001670f, +0.000008f, +0.000159f, + +0.000309f, -0.000698f, +0.000759f, +0.000689f, +0.001587f, -0.000277f, -0.000437f, -0.000213f, +0.000233f, +0.000099f, + -0.001615f, -0.000309f, +0.000723f, +0.000438f, -0.000422f, -0.000662f, -0.000168f, -0.000426f, +0.000461f, +0.000302f, + +0.000350f, -0.000419f, -0.000527f, -0.000165f, +0.000203f, +0.000365f + }, + { + +0.022095f, -0.050248f, -0.034219f, +0.040914f, -0.003428f, +0.003293f, -0.002746f, -0.001458f, -0.008755f, +0.002349f, + -0.002197f, +0.010726f, +0.012630f, -0.002342f, +0.008870f, +0.002938f, -0.009683f, +0.000366f, -0.006595f, -0.000277f, + -0.016918f, +0.001418f, -0.007291f, -0.000368f, -0.001076f, +0.003107f, -0.000008f, +0.001056f, +0.007146f, +0.000586f, + -0.006338f, -0.003695f, +0.011125f, -0.003754f, -0.006525f, +0.003087f, -0.000128f, -0.006685f, +0.000154f, -0.007922f, + +0.001317f, +0.003654f, -0.008331f, -0.003292f, +0.000845f, +0.000586f, +0.000541f, +0.003405f, +0.002756f, -0.000132f, + +0.001030f, +0.002143f, -0.000922f, -0.003059f, +0.002196f, -0.001342f, +0.000793f, -0.000329f, -0.000478f, -0.001055f, + -0.001092f, -0.000637f, +0.001008f, +0.000098f, +0.000679f, +0.001190f, +0.000331f, -0.000141f, +0.000702f, -0.000770f, + +0.000386f, +0.000030f, +0.001642f, -0.000687f, -0.000964f, +0.000449f, -0.000511f, -0.000382f, -0.000346f, -0.001328f, + +0.000666f, +0.000642f, -0.000817f, +0.000111f, +0.000499f, -0.000488f, -0.000273f, +0.000598f, +0.000108f, +0.000321f, + -0.000548f, -0.000089f, -0.000133f, -0.000030f, +0.000081f, +0.000238f + }, + { + -0.011540f, +0.068826f, +0.008736f, +0.047143f, +0.004466f, -0.006130f, +0.004649f, -0.002189f, +0.001780f, -0.002604f, + -0.006497f, +0.006328f, -0.009057f, +0.026997f, -0.001430f, -0.008015f, -0.002894f, -0.012777f, +0.000453f, -0.007901f, + -0.000372f, +0.001327f, +0.013275f, -0.009144f, +0.014028f, +0.006438f, -0.007496f, +0.002220f, +0.000256f, -0.003991f, + -0.000088f, +0.008065f, -0.004512f, -0.000317f, -0.004617f, -0.004554f, -0.008222f, +0.004919f, -0.001396f, -0.001956f, + -0.001850f, -0.002420f, +0.000370f, -0.000470f, +0.000912f, -0.004802f, +0.000737f, -0.000495f, +0.003394f, +0.003859f, + -0.001200f, +0.000799f, -0.003442f, -0.001573f, +0.001361f, +0.002876f, -0.000121f, +0.000250f, +0.002013f, +0.000802f, + +0.000339f, +0.000707f, +0.002467f, +0.000717f, -0.000707f, -0.000327f, +0.000195f, -0.001196f, -0.000267f, -0.001160f, + +0.000639f, +0.000532f, -0.000234f, +0.001091f, +0.000441f, +0.000500f, -0.000024f, -0.000008f, -0.002108f, -0.000061f, + -0.000273f, -0.000109f, -0.000183f, +0.000297f, +0.000407f, +0.000131f, +0.000020f, -0.000623f, +0.000388f, -0.000347f, + -0.000246f, -0.000341f, -0.000029f, +0.000068f, +0.000115f, +0.000440f + }, + { + +0.004472f, -0.013345f, -0.018119f, -0.000823f, +0.000446f, -0.000997f, -0.001678f, -0.001841f, +0.000180f, -0.000487f, + +0.007222f, +0.003246f, +0.003903f, +0.013403f, -0.036054f, -0.008885f, -0.007388f, +0.008199f, -0.000312f, +0.011132f, + -0.010258f, +0.001311f, -0.000429f, +0.006151f, -0.000919f, -0.004552f, -0.007894f, +0.005110f, -0.001068f, -0.003961f, + +0.009417f, -0.006629f, +0.003544f, -0.000523f, -0.006266f, -0.007585f, -0.006808f, -0.001889f, -0.005530f, -0.002616f, + -0.001080f, -0.001941f, +0.001525f, +0.000566f, +0.000397f, -0.003183f, +0.001930f, -0.001917f, +0.000012f, +0.000221f, + +0.000551f, -0.002377f, +0.002077f, -0.000027f, -0.000887f, +0.001705f, +0.001681f, +0.000605f, +0.001154f, -0.002338f, + -0.001628f, +0.000614f, -0.000291f, -0.001124f, +0.001300f, +0.000386f, +0.000803f, +0.000027f, -0.001632f, +0.001207f, + -0.001740f, -0.000930f, -0.000670f, +0.000120f, -0.000518f, +0.000003f, -0.000221f, +0.000141f, +0.000655f, +0.000869f, + -0.000068f, -0.000042f, -0.000138f, +0.000805f, +0.000176f, +0.000124f, -0.000172f, +0.000184f, +0.000010f, +0.000400f, + +0.000164f, +0.000166f, +0.000275f, +0.000287f, -0.000119f, -0.000105f + }, + { + +0.056654f, -0.248414f, -0.025365f, -0.043915f, -0.003992f, -0.006391f, -0.007953f, -0.003677f, -0.010777f, +0.000464f, + +0.011075f, -0.006334f, -0.015391f, +0.008779f, -0.000859f, -0.004342f, +0.002004f, -0.015018f, +0.012052f, -0.001557f, + +0.003972f, -0.005272f, +0.008071f, +0.004058f, +0.002145f, -0.016199f, -0.007460f, -0.005168f, -0.005894f, +0.003255f, + -0.005420f, -0.004314f, +0.000774f, +0.006271f, +0.000696f, +0.005159f, -0.016265f, +0.000677f, +0.002297f, -0.003313f, + -0.000490f, +0.003204f, -0.004166f, +0.004777f, -0.001260f, -0.000112f, +0.001981f, +0.000394f, -0.003698f, +0.000852f, + +0.003633f, +0.000876f, -0.001289f, -0.001899f, -0.004219f, +0.001466f, +0.002550f, -0.001083f, +0.001453f, -0.001949f, + +0.000178f, +0.000689f, +0.000897f, +0.000851f, +0.001604f, +0.000020f, -0.000585f, +0.000950f, +0.000282f, -0.000002f, + -0.000126f, +0.000506f, -0.000935f, +0.000525f, +0.000623f, +0.000149f, -0.000282f, +0.000574f, +0.000143f, -0.000541f, + +0.001171f, +0.000795f, -0.000882f, -0.000049f, -0.000054f, +0.000374f, -0.000089f, +0.000234f, +0.000084f, -0.000586f, + +0.000963f, +0.000167f, -0.000387f, +0.000282f, -0.000213f, +0.000202f + }, + { + -0.001257f, -0.030837f, +0.013128f, -0.004376f, -0.002515f, +0.000319f, -0.000034f, +0.001871f, +0.001224f, +0.002022f, + +0.010089f, +0.001464f, -0.005558f, -0.007540f, -0.019108f, -0.006428f, +0.005717f, +0.006868f, -0.001523f, -0.002486f, + +0.007109f, +0.002156f, -0.006195f, +0.004821f, -0.024095f, -0.001787f, -0.006208f, +0.003334f, -0.000913f, +0.018341f, + -0.006840f, +0.006240f, -0.001640f, +0.001833f, +0.004446f, +0.009652f, +0.000593f, -0.000769f, -0.006214f, +0.002431f, + -0.000532f, -0.002962f, -0.002838f, -0.000941f, +0.001228f, +0.001184f, +0.005018f, -0.001029f, -0.001051f, -0.000413f, + +0.000080f, +0.002521f, +0.002059f, +0.000758f, +0.002870f, +0.000365f, -0.003338f, +0.002564f, +0.000992f, -0.002446f, + -0.001359f, +0.001957f, +0.000459f, -0.000773f, -0.000006f, +0.001656f, +0.000508f, +0.000741f, -0.000661f, +0.000896f, + +0.000049f, -0.000757f, +0.001673f, -0.000040f, +0.000236f, -0.000612f, -0.000516f, +0.000577f, -0.000617f, +0.001366f, + +0.000136f, +0.000275f, +0.000066f, +0.000442f, -0.000360f, -0.000099f, +0.000477f, +0.000196f, +0.000765f, -0.000100f, + -0.000392f, +0.000442f, +0.000193f, -0.000138f, -0.000125f, +0.000293f + }, + { + +0.029486f, -0.384550f, -0.005855f, -0.018316f, +0.002108f, +0.001622f, +0.001854f, -0.006069f, -0.000714f, -0.019183f, + -0.005215f, -0.004757f, +0.012779f, +0.001335f, +0.002877f, +0.000085f, +0.009174f, -0.007652f, +0.003177f, -0.008118f, + -0.005588f, +0.000903f, -0.005176f, -0.011397f, -0.011839f, -0.004270f, +0.003610f, +0.008193f, +0.003034f, -0.000106f, + +0.003113f, -0.001595f, -0.003122f, -0.001808f, -0.002751f, -0.004648f, +0.000495f, -0.003116f, -0.001586f, +0.004119f, + +0.000534f, +0.000985f, -0.003335f, -0.002193f, -0.001746f, +0.005530f, -0.006498f, -0.001616f, -0.001084f, -0.000806f, + -0.002920f, +0.001280f, +0.002603f, +0.001920f, +0.002028f, -0.000139f, +0.001555f, +0.001751f, +0.002434f, +0.000884f, + +0.001170f, -0.002773f, -0.003167f, +0.001080f, -0.001329f, +0.001059f, +0.000311f, -0.000403f, +0.000062f, -0.000949f, + -0.000059f, -0.001824f, -0.001183f, +0.000384f, -0.000217f, -0.000414f, -0.000799f, +0.000026f, +0.000356f, -0.000323f, + -0.000718f, +0.000405f, +0.000387f, +0.000368f, -0.000493f, -0.000772f, +0.000589f, -0.000044f, +0.001074f, +0.000455f, + +0.000272f, +0.000230f, +0.000368f, -0.000453f, -0.000005f, +0.000117f + }, + { + -0.002246f, +0.002043f, -0.012119f, +0.005507f, +0.004356f, +0.001439f, -0.002008f, -0.000496f, -0.000264f, +0.000609f, + -0.002959f, +0.003420f, +0.004335f, +0.006917f, -0.006468f, +0.016492f, -0.003470f, +0.001717f, -0.007939f, +0.015624f, + -0.017133f, +0.009575f, -0.014387f, +0.003756f, +0.004491f, -0.015836f, -0.016820f, -0.022265f, -0.002211f, -0.005065f, + -0.006426f, -0.001259f, -0.008744f, -0.000903f, -0.008963f, -0.012005f, +0.000870f, -0.000508f, +0.003322f, +0.001139f, + +0.003786f, -0.003701f, -0.001045f, +0.003851f, -0.003149f, +0.000647f, +0.000119f, -0.004000f, +0.001569f, +0.000377f, + +0.000676f, +0.003130f, -0.000287f, +0.000453f, +0.000380f, -0.002401f, +0.003621f, +0.000942f, +0.000935f, +0.000866f, + +0.002767f, +0.000863f, -0.003205f, -0.001118f, -0.000195f, +0.000035f, +0.000388f, -0.000480f, +0.000185f, -0.001489f, + +0.001011f, -0.001412f, +0.001522f, +0.001153f, +0.000407f, +0.001159f, -0.000348f, +0.000014f, -0.000438f, +0.000183f, + -0.000052f, -0.000828f, +0.000043f, +0.000379f, -0.000051f, +0.000058f, -0.000103f, +0.000501f, -0.000073f, +0.000774f, + -0.000141f, -0.000714f, -0.000191f, -0.000201f, -0.000613f, -0.000253f + }, + { + +0.065067f, -0.013794f, -0.067041f, -0.038840f, -0.006233f, +0.000447f, +0.003151f, -0.011173f, -0.004761f, -0.003343f, + -0.003793f, -0.004105f, -0.002227f, -0.009938f, +0.008963f, -0.001395f, +0.001940f, +0.010790f, -0.008583f, -0.002723f, + -0.005010f, -0.005225f, -0.006531f, +0.001769f, +0.005137f, -0.001146f, +0.001291f, +0.003328f, -0.000436f, +0.000347f, + +0.004028f, +0.008912f, +0.003355f, +0.003568f, -0.003602f, +0.001435f, +0.010138f, +0.004416f, -0.002041f, +0.001058f, + +0.005074f, +0.004230f, +0.007283f, +0.001382f, +0.003839f, -0.001356f, +0.003002f, +0.000141f, -0.000880f, +0.000939f, + -0.002227f, -0.003440f, +0.000021f, +0.002181f, +0.000922f, -0.001005f, -0.004102f, +0.000521f, +0.001111f, +0.000152f, + -0.000038f, +0.001535f, -0.001364f, -0.000224f, -0.001341f, -0.001742f, +0.000514f, +0.001120f, -0.000551f, +0.000639f, + +0.001762f, -0.000297f, -0.001316f, -0.000136f, -0.000896f, -0.001830f, -0.000241f, +0.000480f, -0.000570f, -0.000479f, + +0.000128f, +0.000005f, -0.000027f, -0.000644f, +0.000229f, -0.000389f, +0.000776f, +0.000572f, -0.000615f, +0.000535f, + -0.000246f, -0.000368f, -0.000429f, +0.000352f, +0.000492f, +0.000295f + }, + { + +0.002786f, -0.052853f, -0.002646f, +0.002260f, +0.008593f, +0.014348f, +0.020683f, -0.005162f, +0.000014f, -0.003752f, + +0.014084f, +0.010555f, +0.009338f, +0.006402f, -0.006439f, +0.004781f, -0.005783f, +0.005593f, +0.001977f, -0.000411f, + -0.017724f, +0.018279f, +0.003540f, +0.016537f, +0.015331f, -0.007169f, -0.010560f, +0.000137f, +0.012618f, +0.002097f, + -0.001831f, +0.002761f, -0.002542f, -0.000126f, -0.001907f, +0.001757f, -0.013466f, -0.006359f, +0.000824f, +0.002097f, + -0.000726f, +0.000873f, -0.000999f, -0.003864f, +0.000928f, +0.004871f, +0.000998f, -0.003502f, -0.002187f, +0.001508f, + +0.001023f, +0.003052f, -0.001103f, +0.002189f, -0.002992f, +0.001159f, -0.004277f, +0.000967f, +0.000866f, +0.001243f, + +0.001841f, +0.001447f, +0.000307f, -0.001236f, -0.002299f, -0.001037f, -0.000489f, -0.000341f, -0.000329f, +0.000116f, + -0.000088f, +0.000229f, +0.000564f, -0.000359f, +0.000917f, +0.001066f, -0.001030f, +0.000718f, -0.000118f, +0.001479f, + +0.000175f, -0.000003f, +0.000117f, -0.000122f, -0.000166f, -0.000035f, -0.000694f, +0.000253f, -0.000462f, +0.000891f, + +0.000967f, -0.000118f, -0.000494f, -0.000587f, +0.000384f, +0.000891f + }, + { + +0.005703f, -0.307829f, -0.038576f, -0.004004f, +0.033788f, -0.025020f, +0.022184f, -0.009556f, -0.010706f, -0.000450f, + -0.000245f, +0.008570f, +0.005659f, -0.009140f, -0.014123f, +0.011474f, -0.002748f, -0.001664f, -0.005990f, -0.004159f, + -0.001384f, +0.002166f, +0.002142f, +0.002165f, -0.002397f, +0.000996f, -0.001702f, -0.009495f, -0.005595f, -0.003222f, + -0.003374f, -0.008427f, +0.004066f, -0.007054f, -0.000247f, -0.001558f, -0.002950f, +0.005040f, -0.002743f, +0.001173f, + +0.000539f, +0.001847f, +0.000668f, +0.002127f, -0.003398f, -0.000551f, -0.001078f, +0.003174f, +0.000666f, +0.002121f, + -0.000432f, +0.000378f, +0.001559f, +0.001388f, -0.000835f, -0.002922f, +0.001079f, +0.001664f, +0.000075f, +0.002290f, + -0.000525f, -0.001528f, -0.000031f, +0.001150f, +0.000436f, -0.002309f, -0.001017f, -0.000298f, -0.000542f, +0.000012f, + -0.000539f, -0.000228f, -0.001448f, +0.000548f, +0.000817f, +0.000887f, -0.000123f, -0.000386f, +0.000220f, +0.000316f, + -0.000113f, +0.000426f, +0.000371f, +0.000048f, -0.000124f, -0.000971f, +0.000359f, +0.000192f, +0.000444f, -0.000428f, + -0.000378f, +0.000265f, -0.000079f, +0.000339f, -0.000218f, +0.000127f + }, + { + +0.003213f, +0.028185f, -0.007983f, +0.008620f, +0.008664f, +0.002647f, -0.006540f, -0.009229f, -0.004066f, -0.002579f, + -0.011806f, +0.003474f, +0.001138f, +0.034499f, +0.011886f, -0.001092f, +0.013564f, +0.010059f, +0.004991f, +0.006089f, + -0.003577f, -0.003798f, +0.009933f, +0.002395f, +0.011872f, +0.009891f, -0.013580f, -0.002645f, -0.002552f, -0.006993f, + +0.010981f, -0.002490f, -0.002040f, -0.003405f, -0.003112f, -0.004403f, -0.002856f, +0.005094f, +0.008565f, +0.005685f, + +0.000348f, -0.001135f, +0.004765f, +0.002325f, +0.001124f, -0.002387f, +0.002230f, +0.003032f, -0.000983f, +0.002755f, + +0.000466f, -0.000277f, +0.000684f, +0.002787f, -0.001466f, +0.004973f, -0.000311f, -0.002100f, +0.000437f, +0.001370f, + +0.000823f, +0.001528f, +0.002046f, -0.002344f, -0.001687f, -0.000785f, -0.000765f, +0.000421f, -0.000562f, -0.000045f, + -0.001711f, +0.001141f, +0.000360f, -0.001644f, +0.000038f, +0.000230f, +0.000457f, +0.000014f, +0.001563f, +0.000410f, + +0.000552f, -0.000222f, -0.000517f, +0.000294f, -0.000707f, +0.000579f, +0.000599f, -0.000701f, -0.000184f, +0.000203f, + +0.000405f, +0.000141f, +0.000048f, -0.000432f, +0.000259f, +0.000062f + }, + { + -0.049774f, +0.158774f, -0.006751f, +0.003716f, +0.006378f, -0.000419f, -0.003581f, +0.015551f, +0.002154f, -0.000368f, + +0.010467f, +0.013062f, -0.005600f, +0.029012f, -0.007666f, +0.000699f, -0.010011f, -0.012213f, +0.007123f, -0.002930f, + -0.000262f, -0.002790f, +0.015119f, +0.005245f, -0.009780f, -0.005278f, +0.002034f, +0.011027f, +0.003396f, -0.007380f, + +0.010913f, +0.004824f, +0.003733f, +0.004720f, +0.007308f, -0.001507f, +0.005026f, +0.006230f, -0.008022f, +0.002152f, + -0.004670f, +0.001476f, +0.002327f, +0.005935f, +0.002192f, -0.000024f, -0.002535f, -0.000928f, +0.000977f, +0.004228f, + -0.003547f, -0.000176f, -0.004224f, -0.000095f, +0.000307f, +0.003306f, -0.003594f, -0.001830f, +0.000003f, -0.000057f, + -0.002227f, +0.001467f, -0.001001f, +0.000562f, +0.001017f, +0.000713f, -0.002190f, +0.000114f, -0.001714f, +0.000562f, + +0.001144f, -0.000851f, -0.001517f, +0.000688f, +0.000050f, -0.000357f, +0.000970f, -0.001187f, +0.000297f, +0.001239f, + -0.000698f, -0.000704f, -0.000213f, +0.000058f, -0.001025f, -0.000122f, -0.000208f, -0.000691f, -0.000092f, +0.000267f, + -0.000472f, -0.000713f, +0.000245f, +0.000583f, +0.000112f, +0.000651f + }, + { + +0.002833f, -0.022580f, -0.005014f, +0.008855f, +0.001263f, +0.001849f, +0.013244f, +0.006153f, +0.005796f, -0.002821f, + +0.006327f, -0.011553f, -0.005807f, +0.036800f, -0.060972f, +0.003248f, +0.018780f, +0.008465f, +0.002095f, +0.005893f, + -0.013076f, +0.018187f, -0.001802f, +0.010344f, -0.002227f, +0.002491f, +0.006394f, +0.003947f, +0.003778f, -0.003415f, + +0.004961f, +0.002127f, -0.005012f, -0.000439f, -0.005061f, -0.006619f, +0.000011f, -0.002521f, +0.004862f, -0.000287f, + +0.000230f, -0.000698f, -0.004704f, -0.003577f, -0.000655f, -0.001604f, -0.002245f, -0.004683f, +0.004509f, +0.001640f, + -0.000560f, +0.002572f, -0.002501f, -0.001622f, +0.000351f, -0.000039f, -0.000278f, -0.003006f, -0.000031f, -0.002727f, + -0.001272f, +0.001918f, +0.000513f, -0.001543f, -0.001202f, +0.000598f, -0.000607f, -0.000475f, +0.000521f, -0.000769f, + +0.000879f, +0.000258f, -0.000766f, -0.000032f, +0.001130f, +0.000657f, -0.000690f, +0.000103f, -0.001188f, +0.000324f, + +0.000374f, -0.000513f, +0.000055f, -0.000089f, -0.000616f, +0.000228f, -0.000058f, -0.000323f, -0.000158f, -0.000252f, + -0.000574f, -0.000090f, -0.000220f, +0.000231f, -0.000494f, -0.000296f + }, + { + -0.045036f, +0.000567f, -0.003553f, -0.012887f, -0.003685f, -0.003185f, +0.001616f, +0.002145f, +0.000302f, +0.002280f, + +0.013991f, +0.000061f, -0.007620f, +0.021062f, -0.034713f, +0.000844f, -0.018604f, +0.004955f, +0.015780f, +0.005287f, + -0.008206f, -0.001141f, -0.001495f, +0.001216f, +0.004302f, +0.001052f, +0.009258f, -0.009337f, +0.002309f, +0.000187f, + +0.007584f, +0.009102f, +0.001339f, -0.004982f, -0.010060f, -0.006362f, -0.005227f, -0.001080f, +0.001765f, +0.002911f, + -0.001759f, +0.007134f, -0.000972f, +0.001965f, -0.001482f, +0.000047f, +0.001501f, +0.000074f, -0.001904f, -0.001705f, + -0.002920f, -0.000078f, +0.002058f, +0.001687f, +0.001512f, -0.001339f, -0.000446f, -0.001110f, -0.000466f, +0.001554f, + -0.000333f, +0.001361f, -0.000554f, -0.001737f, -0.000799f, +0.000950f, +0.000299f, +0.000456f, +0.000165f, -0.000296f, + +0.001196f, +0.000879f, +0.000681f, +0.001154f, +0.001179f, +0.000577f, -0.000402f, -0.000156f, -0.000126f, -0.000213f, + +0.000969f, -0.000449f, +0.000656f, +0.000038f, +0.000222f, -0.000217f, -0.000896f, -0.000799f, -0.000327f, +0.000233f, + +0.000333f, +0.000327f, +0.000350f, +0.000282f, -0.000587f, -0.000426f + } + }, + { + { + -0.001021f, -0.035151f, +0.031154f, +0.009273f, +0.000709f, +0.001359f, -0.000323f, -0.000731f, +0.005478f, +0.005102f, + -0.009841f, +0.002629f, -0.009119f, -0.000864f, +0.016410f, +0.006431f, -0.001063f, +0.017091f, +0.005215f, -0.034280f, + -0.003674f, +0.004206f, -0.014855f, -0.000102f, -0.019594f, +0.003558f, -0.000819f, +0.007078f, -0.004555f, +0.002173f, + +0.011563f, +0.006281f, -0.001936f, -0.007630f, -0.002559f, +0.007219f, +0.004145f, -0.005738f, +0.001070f, +0.000230f, + +0.000681f, +0.001078f, -0.000897f, +0.002320f, +0.003719f, +0.004255f, -0.001221f, +0.002095f, +0.003808f, -0.002644f, + +0.002154f, -0.000871f, -0.000965f, -0.002591f, +0.000460f, -0.001166f, -0.000676f, -0.000863f, -0.000427f, -0.002415f, + -0.000985f, +0.003102f, -0.002046f, +0.000896f, +0.001274f, -0.001067f, +0.001424f, +0.000890f, +0.001168f, -0.000020f, + +0.000073f, -0.000187f, +0.000824f, +0.000022f, +0.001477f, +0.000242f, +0.000239f, +0.000188f, -0.000029f, -0.000173f, + -0.000891f, +0.000129f, +0.000738f, +0.000230f, -0.000547f, -0.000340f, +0.000158f, +0.000224f, +0.000634f, -0.000281f, + +0.000053f, -0.000326f, -0.000072f, +0.000053f, -0.000040f, +0.000345f + }, + { + -0.016432f, +0.044654f, +0.076273f, +0.022946f, -0.011185f, +0.002311f, -0.004396f, -0.000445f, -0.002182f, +0.002819f, + -0.008658f, +0.007367f, +0.008538f, -0.007502f, +0.004702f, +0.009812f, +0.000299f, -0.002791f, -0.010308f, +0.007691f, + -0.011973f, +0.012599f, -0.000204f, -0.004332f, -0.001617f, +0.004163f, +0.003913f, -0.000453f, +0.000738f, -0.002875f, + -0.008156f, -0.005445f, +0.003085f, -0.005806f, -0.003535f, +0.000518f, +0.003165f, -0.003741f, +0.009111f, -0.001944f, + -0.002363f, +0.001056f, -0.006096f, -0.000735f, +0.000851f, -0.000000f, -0.002635f, -0.003129f, -0.000346f, +0.000313f, + +0.002653f, +0.003281f, -0.002487f, -0.003549f, +0.001915f, -0.000888f, +0.000340f, -0.002011f, +0.001435f, +0.000241f, + +0.001157f, +0.001148f, +0.001175f, +0.000133f, +0.000116f, +0.001128f, +0.000740f, +0.000050f, +0.001284f, +0.000393f, + +0.000481f, -0.001612f, +0.000312f, -0.000821f, -0.000906f, -0.000028f, -0.000982f, +0.000054f, +0.000292f, -0.000830f, + +0.000313f, +0.000396f, -0.000316f, +0.000589f, +0.000437f, -0.000292f, +0.000125f, +0.000279f, +0.000153f, +0.000501f, + -0.000450f, -0.000100f, -0.000314f, -0.000213f, -0.000077f, -0.000015f + }, + { + +0.009487f, -0.016250f, -0.067291f, +0.051262f, -0.001033f, -0.004451f, +0.001324f, -0.006923f, -0.000282f, +0.004264f, + -0.000284f, +0.007420f, -0.005929f, +0.023360f, -0.003158f, -0.000953f, +0.014155f, -0.006233f, -0.009310f, -0.007803f, + +0.001749f, +0.004372f, +0.013386f, -0.017049f, +0.006120f, +0.003099f, -0.002906f, +0.004431f, -0.000759f, -0.006748f, + -0.002920f, +0.003255f, -0.009567f, +0.000810f, -0.001919f, -0.000472f, -0.003342f, +0.004431f, -0.002177f, -0.000050f, + +0.005263f, +0.001871f, -0.001359f, -0.002832f, +0.002012f, -0.004559f, +0.003407f, +0.002766f, +0.001630f, -0.000664f, + -0.004273f, +0.002433f, -0.002026f, -0.002877f, +0.002424f, +0.004097f, -0.000945f, -0.001546f, +0.000736f, -0.000756f, + -0.000382f, -0.001173f, +0.000611f, +0.000943f, +0.000051f, -0.000346f, +0.000411f, -0.000147f, +0.000173f, -0.001588f, + +0.000080f, +0.000006f, -0.000816f, +0.000037f, -0.000232f, +0.000554f, -0.000079f, +0.000769f, -0.000952f, +0.000216f, + +0.000006f, +0.000586f, -0.000141f, -0.000468f, -0.000138f, -0.000455f, -0.000552f, -0.000643f, +0.000612f, -0.000076f, + +0.000297f, -0.000148f, +0.000190f, +0.000234f, -0.000437f, -0.000537f + }, + { + -0.004026f, +0.018848f, +0.013290f, +0.000010f, +0.001596f, -0.001108f, -0.000561f, +0.000318f, +0.000629f, -0.001611f, + +0.008736f, -0.001319f, -0.002047f, +0.014250f, -0.026634f, +0.001472f, -0.002820f, +0.014867f, -0.004965f, +0.012886f, + -0.005916f, +0.012656f, +0.001439f, +0.002995f, +0.010566f, +0.006110f, +0.004053f, +0.008474f, -0.001383f, -0.004314f, + +0.008541f, -0.008907f, +0.006345f, +0.004292f, -0.002926f, +0.006127f, +0.003368f, +0.003853f, -0.002157f, -0.002349f, + +0.001045f, -0.001431f, +0.001554f, +0.001131f, +0.001597f, -0.000717f, +0.000304f, -0.002573f, +0.000402f, -0.001933f, + +0.000691f, -0.001160f, +0.000285f, -0.001859f, -0.001008f, +0.000437f, -0.000807f, -0.000810f, +0.000168f, -0.001127f, + +0.000144f, +0.001162f, -0.001208f, -0.000218f, +0.001117f, -0.000137f, +0.001664f, +0.001026f, -0.001062f, +0.001196f, + -0.001087f, +0.000030f, +0.000646f, +0.000573f, -0.000674f, +0.000104f, +0.000140f, -0.000266f, -0.000547f, +0.000126f, + -0.000301f, -0.000084f, +0.000117f, +0.001019f, -0.000569f, -0.000153f, +0.000017f, -0.000037f, -0.000281f, +0.000026f, + -0.000010f, +0.000055f, -0.000153f, -0.000105f, -0.000131f, -0.000018f + }, + { + -0.042747f, -0.309007f, +0.046999f, -0.021969f, +0.003538f, -0.001877f, -0.001997f, -0.001239f, -0.003045f, +0.004534f, + +0.007404f, -0.007200f, -0.011017f, +0.003898f, -0.000538f, +0.004180f, -0.001210f, -0.017514f, +0.011194f, -0.000606f, + +0.001870f, -0.002851f, +0.010020f, -0.002495f, +0.010016f, -0.008384f, -0.003383f, +0.007062f, +0.000706f, +0.004375f, + -0.000119f, -0.003019f, -0.001787f, +0.002102f, -0.000081f, +0.003870f, -0.010451f, +0.008884f, -0.001712f, -0.005856f, + +0.003637f, +0.003871f, -0.006297f, +0.003325f, +0.000340f, +0.002025f, +0.001648f, -0.001354f, -0.004186f, +0.000019f, + +0.001610f, +0.001489f, +0.001070f, +0.002346f, -0.001426f, +0.001120f, +0.001993f, -0.000307f, +0.002304f, -0.000518f, + +0.000663f, +0.000838f, +0.000202f, -0.001723f, +0.000583f, +0.000021f, -0.001526f, -0.001126f, -0.001363f, -0.000246f, + -0.001341f, +0.000696f, -0.000036f, +0.000396f, +0.000038f, +0.000854f, +0.001251f, +0.000454f, +0.000503f, -0.000316f, + +0.000830f, +0.001051f, -0.000930f, -0.000176f, -0.000020f, +0.000637f, +0.000553f, +0.000128f, -0.000417f, -0.000355f, + +0.000445f, -0.000645f, -0.000569f, +0.000484f, +0.000131f, +0.000181f + }, + { + +0.000862f, -0.016833f, +0.016473f, -0.004416f, +0.000008f, +0.000475f, +0.000366f, +0.001111f, -0.003293f, -0.001393f, + +0.006736f, -0.001588f, +0.002022f, +0.009676f, +0.001154f, +0.001835f, +0.004493f, +0.011994f, -0.008029f, -0.013021f, + +0.007593f, -0.000227f, -0.012273f, +0.011795f, +0.001837f, +0.012881f, -0.007690f, -0.002064f, -0.008965f, +0.011520f, + -0.005382f, +0.002781f, -0.011965f, -0.004175f, +0.000481f, +0.005176f, -0.000300f, +0.000499f, -0.001256f, +0.002275f, + +0.001613f, -0.000110f, -0.000945f, +0.000604f, +0.001308f, -0.001855f, +0.002172f, +0.001112f, +0.000807f, -0.000762f, + -0.000342f, -0.000573f, -0.000529f, +0.001005f, +0.000960f, -0.000695f, -0.004003f, +0.000652f, -0.001052f, -0.001564f, + -0.001193f, +0.001215f, -0.000113f, -0.000864f, -0.000676f, +0.000644f, +0.000807f, +0.000781f, -0.001285f, +0.001150f, + +0.000723f, -0.001474f, +0.001079f, +0.000745f, +0.001148f, -0.000423f, +0.000014f, +0.000084f, -0.001020f, +0.000069f, + -0.000239f, +0.000505f, -0.000157f, +0.000244f, -0.000122f, -0.000067f, +0.000610f, +0.000214f, +0.000377f, -0.000095f, + -0.000529f, +0.000024f, +0.000005f, -0.000033f, -0.000259f, +0.000114f + }, + { + +0.017844f, -0.414556f, +0.001874f, -0.011060f, -0.000003f, +0.006328f, +0.005688f, -0.001935f, +0.014281f, +0.002919f, + -0.002523f, -0.016576f, +0.000760f, -0.002678f, -0.002507f, -0.011583f, +0.011221f, -0.005499f, +0.004025f, -0.002760f, + +0.003212f, +0.004812f, -0.002499f, +0.002030f, -0.005274f, -0.005451f, +0.005011f, +0.006969f, +0.010240f, +0.006977f, + +0.003273f, +0.000392f, +0.000373f, +0.000898f, -0.002983f, -0.002611f, -0.000303f, +0.000284f, +0.004488f, +0.000549f, + -0.002899f, -0.004330f, -0.001177f, +0.004094f, -0.004521f, +0.002474f, -0.008175f, +0.000382f, +0.002199f, +0.001411f, + -0.001137f, +0.003554f, +0.002165f, -0.002944f, -0.000032f, +0.000108f, +0.001989f, +0.000867f, +0.001095f, +0.000703f, + +0.002198f, -0.000017f, -0.000961f, +0.001551f, -0.000875f, +0.001453f, -0.000710f, -0.001411f, -0.000211f, -0.000943f, + +0.000348f, -0.000077f, -0.000527f, +0.000162f, +0.000659f, -0.000400f, -0.001173f, -0.000064f, +0.000206f, -0.000393f, + -0.000261f, +0.000773f, +0.000311f, +0.000063f, +0.000029f, -0.000095f, +0.000566f, -0.000532f, -0.000184f, +0.000052f, + +0.000482f, -0.000283f, +0.000110f, -0.000431f, +0.000165f, +0.000063f + }, + { + +0.000478f, +0.027919f, +0.001765f, +0.006045f, +0.000442f, -0.000366f, -0.001966f, +0.001801f, +0.001773f, -0.000354f, + -0.001923f, +0.000623f, +0.002807f, +0.003399f, +0.001418f, +0.012290f, -0.015541f, +0.012143f, +0.002848f, -0.001112f, + -0.027709f, +0.011665f, -0.008073f, +0.014646f, +0.014968f, -0.012289f, -0.001945f, -0.007050f, -0.001561f, +0.001290f, + -0.000110f, -0.003648f, -0.011980f, +0.001873f, -0.001167f, -0.010809f, -0.005109f, -0.004436f, +0.000553f, -0.000779f, + +0.002443f, -0.002710f, +0.002191f, +0.000542f, -0.007956f, -0.002282f, +0.001955f, -0.002523f, +0.000449f, -0.000509f, + -0.001700f, +0.002006f, -0.001167f, -0.000188f, -0.000486f, -0.003129f, +0.001574f, -0.000953f, +0.001551f, +0.000220f, + -0.000233f, -0.000155f, -0.002043f, -0.000001f, +0.000017f, -0.000199f, -0.000088f, +0.000707f, +0.000688f, -0.000823f, + +0.001391f, -0.001742f, +0.001465f, +0.000941f, -0.000510f, -0.000188f, -0.000167f, +0.000749f, -0.000254f, -0.000085f, + -0.000744f, -0.000824f, +0.000254f, +0.000174f, -0.000148f, -0.000003f, +0.000143f, -0.000040f, -0.000764f, +0.000372f, + -0.000190f, +0.000141f, +0.000781f, +0.000348f, -0.000272f, -0.000251f + }, + { + -0.083125f, -0.089545f, +0.041181f, -0.018209f, -0.000614f, -0.000103f, +0.006647f, -0.003621f, +0.008020f, +0.003677f, + -0.001882f, -0.001177f, +0.004342f, -0.006987f, -0.006098f, -0.010029f, -0.003883f, +0.009708f, +0.000342f, +0.001603f, + -0.004103f, -0.005052f, -0.001407f, +0.001324f, +0.004147f, +0.001709f, -0.000024f, +0.001610f, -0.002957f, +0.002055f, + +0.002850f, +0.001817f, +0.000672f, +0.004042f, -0.002132f, -0.003599f, +0.007873f, +0.005830f, -0.001045f, +0.000434f, + +0.002420f, -0.001787f, +0.000302f, -0.005229f, -0.003568f, -0.002504f, +0.005628f, -0.001017f, -0.002068f, +0.001190f, + +0.000332f, -0.001115f, -0.000834f, -0.002043f, -0.002965f, -0.000486f, -0.001752f, -0.000367f, +0.000047f, +0.000586f, + -0.000110f, +0.000792f, -0.001633f, -0.000726f, -0.002645f, -0.002393f, +0.000270f, +0.001375f, +0.000429f, +0.001445f, + +0.001605f, -0.000280f, -0.000606f, +0.000825f, -0.000476f, -0.002034f, -0.000125f, +0.000429f, -0.000040f, +0.000550f, + +0.000208f, -0.000779f, -0.000372f, -0.000179f, +0.000662f, -0.000625f, +0.000199f, +0.000310f, -0.000796f, +0.000456f, + +0.000057f, +0.000444f, +0.000315f, +0.000532f, +0.000000f, +0.000304f + }, + { + -0.003192f, -0.006834f, +0.033781f, -0.009293f, +0.003971f, +0.002397f, +0.009481f, -0.008440f, -0.003070f, -0.006760f, + +0.003643f, -0.008623f, -0.003538f, +0.001864f, -0.019531f, -0.000752f, -0.000677f, +0.010745f, +0.015921f, +0.002680f, + -0.014503f, +0.011270f, -0.002603f, +0.016048f, -0.001689f, -0.006355f, +0.004924f, -0.009518f, +0.005161f, +0.000250f, + -0.004215f, +0.008021f, +0.002561f, -0.001262f, -0.000664f, +0.006217f, -0.006716f, -0.005777f, -0.006605f, -0.000856f, + -0.004071f, -0.004521f, +0.000715f, +0.000810f, +0.000406f, -0.002597f, +0.002452f, +0.002187f, -0.000749f, +0.000876f, + +0.000741f, +0.000744f, -0.001814f, +0.001572f, -0.004896f, +0.002052f, -0.001987f, +0.002078f, -0.001007f, -0.001417f, + +0.000571f, -0.000571f, -0.000424f, +0.000368f, -0.000344f, +0.000194f, +0.001244f, +0.000987f, -0.000230f, -0.000808f, + -0.000209f, -0.000198f, +0.000721f, +0.000165f, +0.001357f, +0.001404f, -0.000537f, +0.000780f, -0.000899f, +0.000796f, + -0.000220f, -0.000062f, +0.000216f, -0.000007f, -0.000297f, +0.000262f, -0.000522f, +0.000540f, -0.000546f, +0.000117f, + +0.000364f, +0.000300f, -0.000167f, -0.000675f, -0.000045f, +0.000473f + }, + { + -0.008210f, -0.276835f, +0.010031f, -0.002507f, +0.024499f, -0.014640f, +0.027695f, -0.015995f, -0.004477f, -0.001892f, + -0.008942f, +0.003986f, +0.003039f, -0.004337f, -0.008730f, +0.010432f, -0.004701f, +0.006242f, +0.001461f, +0.003862f, + -0.000309f, +0.000791f, -0.004559f, -0.001081f, -0.001283f, +0.006729f, +0.006851f, -0.003565f, -0.000985f, -0.003158f, + +0.000206f, -0.004658f, +0.005264f, -0.001135f, +0.003972f, -0.003618f, -0.003998f, +0.007085f, -0.003025f, +0.002406f, + +0.002062f, +0.002353f, +0.000102f, -0.001262f, +0.001868f, +0.003404f, -0.003927f, -0.001609f, -0.002017f, +0.000640f, + -0.002575f, -0.001268f, -0.001310f, -0.000187f, -0.002409f, -0.002359f, +0.001196f, -0.000641f, -0.003046f, +0.000637f, + +0.001768f, -0.000117f, -0.001259f, +0.000113f, +0.000073f, -0.001242f, +0.000162f, -0.000337f, -0.000089f, -0.000278f, + -0.000407f, +0.000780f, -0.001266f, +0.000091f, +0.000266f, +0.000532f, +0.000144f, +0.000226f, +0.000299f, +0.000191f, + +0.000033f, +0.000075f, +0.000043f, +0.000475f, -0.000027f, -0.000625f, +0.000270f, +0.000373f, +0.000456f, -0.000159f, + +0.000037f, +0.000095f, -0.000360f, +0.000209f, -0.000261f, +0.000152f + }, + { + -0.002817f, +0.041968f, +0.002990f, +0.000088f, -0.000912f, -0.001304f, -0.001858f, -0.001943f, +0.004060f, +0.002755f, + -0.006701f, -0.004549f, -0.013533f, +0.031122f, +0.022030f, -0.006102f, +0.001448f, -0.004101f, -0.001256f, -0.004665f, + -0.008327f, -0.003161f, +0.004508f, -0.003891f, +0.000955f, +0.006162f, -0.003384f, +0.003865f, -0.002201f, -0.012250f, + +0.006350f, +0.002569f, -0.005684f, -0.003770f, -0.004764f, -0.006399f, -0.005068f, +0.005610f, +0.003071f, -0.002763f, + +0.002753f, +0.001532f, +0.002467f, +0.002878f, +0.003138f, -0.003393f, -0.000112f, -0.000115f, -0.003917f, +0.003021f, + -0.000117f, -0.001643f, -0.002831f, +0.002071f, -0.001770f, +0.004882f, +0.001589f, -0.001508f, +0.000540f, -0.000499f, + +0.001467f, +0.001329f, +0.001579f, -0.001291f, -0.000583f, -0.000860f, -0.000782f, +0.000819f, +0.000465f, +0.000885f, + -0.000760f, +0.000814f, -0.000046f, -0.000969f, +0.000318f, +0.000757f, +0.000679f, -0.000088f, +0.000905f, -0.000064f, + +0.000234f, +0.000114f, -0.000171f, -0.000158f, -0.000906f, -0.000378f, +0.000145f, -0.000723f, -0.000645f, -0.000212f, + +0.000099f, -0.000081f, +0.000103f, -0.000407f, +0.000129f, +0.000068f + }, + { + +0.010162f, +0.218556f, -0.029875f, -0.005793f, +0.004306f, -0.031914f, -0.032049f, +0.012582f, +0.004456f, +0.008851f, + +0.009218f, -0.000939f, -0.003661f, +0.037875f, -0.008428f, +0.008356f, +0.015102f, -0.000128f, +0.001733f, -0.008293f, + -0.005209f, -0.005052f, +0.000876f, -0.009532f, -0.012176f, +0.000676f, +0.003140f, +0.009068f, -0.002526f, -0.016966f, + +0.000245f, +0.003111f, +0.007641f, +0.001020f, +0.006722f, -0.007456f, -0.006472f, +0.007463f, -0.005163f, +0.000175f, + -0.000505f, +0.004045f, -0.002725f, -0.003946f, +0.000038f, +0.002523f, -0.000658f, -0.001397f, +0.002373f, +0.003999f, + -0.003462f, -0.000424f, -0.003007f, +0.004859f, +0.001445f, +0.004742f, -0.001970f, -0.001324f, +0.000626f, +0.000613f, + -0.002228f, +0.001410f, -0.001443f, -0.000773f, +0.000075f, +0.001111f, -0.002135f, -0.000248f, -0.001514f, +0.000346f, + +0.001119f, +0.001572f, -0.000217f, -0.000085f, +0.000088f, -0.000459f, +0.000002f, -0.001754f, +0.000765f, +0.001277f, + -0.000941f, -0.000972f, -0.000236f, +0.000597f, -0.000660f, -0.000075f, +0.000198f, -0.000032f, +0.000108f, -0.000155f, + -0.000352f, +0.000090f, +0.000559f, +0.000011f, -0.000530f, -0.000027f + }, + { + -0.002388f, -0.008793f, +0.012419f, +0.008809f, -0.004471f, -0.006399f, +0.001045f, -0.003884f, +0.004038f, -0.003927f, + +0.000185f, -0.013615f, -0.008860f, +0.048265f, -0.048252f, -0.019540f, +0.003257f, +0.005788f, -0.009281f, +0.009714f, + -0.006103f, +0.010803f, -0.010069f, +0.006598f, -0.005387f, -0.000595f, -0.002294f, -0.001970f, -0.003830f, -0.000659f, + +0.007348f, -0.005579f, -0.006341f, -0.000852f, -0.002391f, +0.004564f, +0.006844f, +0.000660f, +0.004175f, -0.006349f, + -0.001898f, +0.000337f, -0.000888f, -0.002354f, +0.001048f, +0.002422f, +0.002742f, -0.003078f, +0.004473f, +0.000715f, + +0.001338f, +0.002106f, -0.003101f, +0.000046f, +0.002440f, +0.001561f, +0.002435f, -0.001598f, +0.000083f, -0.000103f, + +0.000317f, +0.001940f, +0.001465f, -0.001650f, -0.000709f, +0.000243f, +0.000088f, +0.000252f, +0.001056f, -0.000984f, + +0.000436f, -0.000172f, -0.001071f, -0.000637f, +0.000624f, +0.000601f, -0.001318f, +0.001227f, -0.000637f, +0.000350f, + +0.000737f, -0.000441f, +0.000177f, -0.000115f, -0.000683f, +0.000373f, +0.000209f, +0.000199f, -0.000319f, +0.000009f, + +0.000085f, +0.000324f, -0.000195f, +0.000473f, -0.000244f, -0.000214f + }, + { + +0.028834f, +0.099985f, -0.002873f, -0.005679f, -0.000495f, -0.000255f, +0.006957f, -0.000163f, -0.001393f, -0.004241f, + +0.004221f, +0.001992f, -0.006760f, -0.010990f, -0.074253f, +0.001919f, -0.013468f, +0.002362f, +0.006737f, -0.000452f, + -0.008301f, +0.000247f, -0.001978f, +0.002635f, +0.003103f, -0.003462f, -0.002333f, -0.014294f, +0.005281f, -0.000253f, + -0.000016f, -0.002017f, -0.006433f, -0.003451f, -0.000599f, +0.002950f, +0.001532f, +0.004947f, -0.000294f, +0.000472f, + -0.000564f, -0.000121f, -0.008671f, +0.001770f, +0.003304f, +0.005176f, -0.000283f, -0.003568f, -0.002491f, -0.002020f, + -0.000828f, +0.001696f, -0.002311f, -0.001016f, +0.000727f, -0.002838f, +0.000759f, -0.000185f, -0.002565f, +0.001007f, + -0.001339f, +0.000865f, +0.002300f, +0.000421f, +0.000615f, +0.001542f, -0.000236f, -0.000024f, -0.000611f, -0.000951f, + +0.000347f, +0.000435f, -0.000077f, -0.000251f, -0.000122f, -0.000622f, -0.000538f, -0.000016f, +0.000299f, -0.000562f, + +0.000209f, -0.000990f, -0.000174f, -0.000852f, +0.000229f, +0.000411f, -0.000274f, -0.000089f, -0.000294f, +0.000052f, + -0.000245f, -0.000351f, +0.000105f, +0.000442f, -0.000252f, +0.000167f + } + }, + { + { + -0.001039f, +0.061699f, -0.032324f, +0.001053f, +0.001570f, +0.002327f, -0.001407f, +0.004097f, -0.001822f, -0.000829f, + +0.000548f, -0.009178f, +0.003065f, +0.008565f, -0.005407f, -0.000623f, +0.009748f, +0.012173f, -0.002352f, -0.025430f, + +0.004046f, -0.012267f, -0.003544f, -0.014867f, -0.006739f, +0.015090f, -0.003934f, +0.001144f, +0.004757f, +0.010342f, + -0.009315f, +0.013079f, -0.004526f, -0.003071f, -0.003635f, +0.004334f, +0.001354f, -0.004854f, +0.004319f, +0.002568f, + +0.000987f, -0.000045f, +0.001419f, -0.000590f, +0.004672f, +0.001443f, +0.001548f, +0.000389f, +0.005427f, -0.002556f, + +0.000503f, +0.000146f, -0.001713f, -0.002100f, -0.001482f, +0.001623f, -0.000959f, -0.000994f, -0.001593f, -0.000872f, + -0.001252f, +0.000876f, -0.000893f, +0.001026f, -0.000149f, +0.001169f, -0.000019f, +0.002524f, -0.000260f, +0.000722f, + +0.000041f, +0.000486f, +0.000037f, +0.001021f, +0.000630f, -0.000067f, +0.000634f, +0.000194f, +0.000170f, -0.000580f, + +0.000228f, +0.000230f, +0.000005f, +0.000140f, -0.000625f, -0.000052f, +0.000333f, +0.000312f, -0.000134f, +0.000155f, + -0.000451f, +0.000284f, -0.000220f, +0.000104f, -0.000118f, +0.000306f + }, + { + +0.012637f, +0.242424f, -0.091859f, +0.009160f, +0.009116f, -0.000191f, -0.006097f, +0.006296f, -0.000015f, +0.005261f, + -0.006701f, -0.004057f, -0.001767f, +0.014753f, -0.001265f, +0.002090f, +0.007416f, -0.020441f, +0.005068f, +0.007502f, + -0.008566f, +0.009439f, -0.001668f, -0.000397f, -0.001862f, +0.002930f, -0.000477f, +0.003303f, +0.001263f, -0.007362f, + -0.002716f, -0.003982f, -0.001556f, -0.005791f, +0.004173f, -0.006801f, +0.005927f, -0.003510f, +0.007823f, +0.006680f, + -0.003595f, -0.004939f, -0.000454f, -0.000021f, -0.001114f, +0.002409f, -0.004991f, -0.000712f, +0.000417f, -0.002345f, + +0.001324f, +0.004202f, -0.003034f, +0.000202f, -0.001833f, +0.000735f, -0.000657f, -0.002391f, +0.000960f, -0.000422f, + +0.003118f, -0.000152f, +0.001987f, -0.000619f, +0.000820f, +0.000738f, +0.000105f, +0.001424f, -0.000600f, +0.001648f, + -0.000113f, -0.001644f, +0.000414f, -0.000419f, -0.000652f, -0.000473f, -0.000984f, +0.001348f, -0.000761f, +0.000134f, + -0.000134f, +0.000224f, -0.000054f, +0.000326f, -0.000251f, +0.000695f, -0.000184f, +0.000031f, +0.000312f, +0.000008f, + +0.000206f, -0.000265f, -0.000211f, -0.000366f, -0.000074f, -0.000013f + }, + { + -0.004820f, -0.184847f, +0.071400f, +0.032891f, +0.007128f, +0.005074f, -0.005327f, -0.000266f, -0.000244f, +0.003663f, + +0.000843f, +0.003808f, +0.003877f, +0.011458f, -0.000681f, -0.005250f, +0.013525f, +0.006359f, -0.025071f, +0.001881f, + -0.004238f, +0.006575f, +0.006298f, -0.009063f, +0.012363f, -0.009738f, +0.007209f, -0.000714f, +0.001104f, -0.009453f, + +0.002052f, -0.005804f, -0.006319f, +0.003316f, -0.005248f, -0.001739f, +0.003579f, -0.002282f, +0.000092f, +0.003124f, + +0.002193f, +0.000148f, -0.002870f, -0.001929f, +0.003414f, -0.003445f, +0.003170f, +0.002692f, +0.001138f, -0.001435f, + -0.001711f, +0.000258f, +0.001018f, -0.004645f, +0.004550f, +0.001981f, -0.001551f, +0.000093f, -0.002360f, -0.000354f, + +0.001421f, -0.001455f, -0.001581f, +0.001277f, +0.000926f, +0.000599f, -0.000568f, +0.000382f, -0.000556f, -0.001281f, + -0.000217f, -0.000048f, -0.000423f, -0.000109f, +0.000057f, +0.000133f, -0.000100f, +0.000437f, +0.000038f, -0.000267f, + +0.000055f, +0.000322f, -0.000004f, -0.000601f, +0.000113f, -0.000381f, -0.000510f, -0.000376f, +0.000640f, -0.000031f, + +0.000031f, +0.000096f, -0.000045f, +0.000067f, -0.000507f, -0.000578f + }, + { + +0.002893f, +0.046494f, -0.012065f, +0.000429f, -0.000490f, -0.000167f, -0.000861f, +0.001206f, +0.000665f, -0.000794f, + +0.004238f, -0.000948f, +0.004492f, -0.003481f, +0.003097f, -0.003240f, -0.002757f, +0.014688f, -0.009692f, +0.005764f, + +0.009341f, +0.001876f, -0.001451f, +0.000567f, +0.011552f, +0.008548f, +0.003891f, +0.008627f, -0.000168f, +0.000808f, + -0.004156f, -0.005669f, +0.004819f, +0.000644f, +0.005747f, +0.005112f, +0.004589f, +0.001561f, -0.002012f, -0.001324f, + -0.000210f, +0.001983f, -0.002237f, +0.002415f, -0.000291f, +0.000287f, +0.000426f, +0.000788f, -0.002327f, -0.001433f, + +0.001115f, -0.001868f, -0.000715f, -0.000269f, -0.003140f, +0.001631f, -0.001267f, -0.001257f, -0.000117f, +0.000455f, + -0.000140f, +0.000551f, -0.001420f, +0.000480f, +0.000066f, -0.000301f, +0.001411f, +0.000023f, +0.000599f, -0.000651f, + +0.000539f, +0.000545f, -0.000206f, +0.000221f, +0.000100f, -0.000393f, +0.000420f, -0.000847f, -0.000368f, -0.000348f, + -0.000371f, +0.000762f, +0.000177f, -0.000095f, -0.000336f, +0.000237f, +0.000458f, -0.000498f, -0.000384f, -0.000116f, + +0.000130f, +0.000022f, -0.000440f, -0.000225f, -0.000133f, +0.000025f + }, + { + +0.018170f, -0.336924f, +0.012598f, -0.024417f, +0.003036f, +0.000758f, -0.001395f, -0.003599f, +0.000451f, +0.009895f, + -0.015551f, +0.004652f, -0.003388f, +0.001627f, +0.011097f, +0.000161f, +0.004006f, -0.026483f, +0.011389f, +0.000970f, + +0.000804f, -0.005338f, +0.010956f, -0.001193f, +0.007789f, -0.000815f, -0.003137f, +0.010259f, -0.004778f, +0.005377f, + -0.004280f, +0.002671f, -0.005074f, +0.004917f, +0.000965f, -0.003239f, +0.008560f, -0.003549f, -0.003283f, -0.000268f, + +0.002520f, -0.002115f, -0.001544f, -0.000937f, +0.000046f, +0.004737f, -0.001539f, -0.001208f, -0.000367f, +0.000559f, + -0.001212f, +0.002076f, +0.001163f, +0.002738f, -0.000377f, +0.000614f, +0.001453f, +0.000580f, +0.002400f, +0.001608f, + -0.000499f, +0.000970f, -0.000495f, -0.001077f, -0.000167f, +0.000166f, -0.001921f, -0.000795f, -0.000956f, -0.000185f, + -0.001632f, +0.001166f, +0.001251f, +0.000326f, -0.000756f, +0.000980f, +0.001455f, +0.000061f, +0.000590f, -0.000064f, + +0.000430f, +0.000552f, -0.000648f, -0.000138f, +0.000220f, +0.000153f, +0.001070f, -0.000324f, -0.000628f, +0.000404f, + -0.000506f, -0.000210f, -0.000230f, +0.000366f, +0.000278f, +0.000227f + }, + { + +0.000621f, -0.000172f, -0.004786f, +0.002951f, +0.000395f, +0.000196f, +0.000830f, -0.001361f, -0.004258f, +0.001710f, + +0.004622f, +0.002844f, -0.002580f, +0.003486f, +0.012435f, +0.004563f, -0.005977f, +0.013441f, -0.000276f, -0.010524f, + +0.003676f, -0.000690f, -0.009554f, +0.018404f, +0.001997f, +0.003168f, +0.002133f, -0.000305f, -0.008321f, +0.003104f, + -0.001299f, -0.003573f, -0.006273f, -0.007405f, +0.003015f, -0.001174f, +0.005278f, -0.002519f, +0.000065f, -0.000647f, + +0.004090f, +0.000446f, +0.000121f, -0.002017f, -0.000600f, +0.000760f, -0.001490f, +0.004099f, -0.000037f, +0.001178f, + -0.000303f, -0.001016f, -0.001312f, +0.000426f, +0.000952f, -0.002222f, -0.002784f, -0.000428f, -0.000335f, -0.000671f, + -0.001903f, +0.001414f, -0.000267f, -0.001008f, -0.000304f, +0.000539f, +0.000065f, +0.001859f, -0.001212f, +0.000414f, + +0.000349f, -0.001052f, +0.000397f, +0.001453f, +0.000024f, -0.000740f, +0.000984f, -0.000941f, -0.000160f, -0.001357f, + +0.000619f, +0.000472f, -0.000444f, +0.000377f, -0.000015f, -0.000033f, +0.000593f, +0.000019f, -0.000234f, +0.000343f, + -0.000410f, +0.000109f, -0.000204f, +0.000026f, -0.000517f, -0.000016f + }, + { + -0.066580f, -0.300457f, +0.001690f, +0.007060f, -0.001986f, +0.005321f, +0.001947f, +0.002285f, +0.011548f, +0.007030f, + +0.003256f, -0.013605f, -0.003264f, -0.009484f, -0.005878f, -0.004745f, +0.004313f, -0.004818f, +0.005086f, +0.001375f, + +0.008880f, +0.001053f, +0.000904f, -0.000193f, -0.005950f, +0.000272f, +0.003870f, +0.006451f, +0.009004f, +0.005433f, + +0.006254f, -0.001369f, +0.000407f, +0.000583f, -0.003200f, -0.000528f, +0.002516f, -0.000087f, +0.004782f, -0.004824f, + -0.003444f, -0.002860f, +0.003453f, +0.003545f, -0.007093f, +0.001046f, -0.003948f, -0.000721f, +0.001409f, +0.001086f, + +0.003062f, +0.000359f, +0.002065f, -0.002858f, -0.000702f, +0.000245f, +0.001505f, +0.000336f, +0.000194f, +0.000587f, + +0.001462f, +0.000946f, -0.000296f, +0.000180f, +0.000881f, -0.000495f, -0.000852f, +0.000282f, -0.001333f, +0.000119f, + -0.000106f, +0.000227f, -0.000656f, -0.000201f, +0.000362f, -0.000228f, -0.000590f, -0.000171f, +0.000491f, -0.000299f, + -0.000644f, +0.000153f, +0.000310f, -0.000732f, +0.000910f, +0.000298f, -0.000086f, +0.000217f, -0.000684f, -0.000167f, + +0.000252f, -0.000068f, -0.000254f, -0.000002f, -0.000080f, -0.000008f + }, + { + +0.002161f, +0.014557f, +0.010708f, +0.000681f, -0.000324f, +0.000018f, -0.001518f, -0.000132f, +0.004294f, -0.001328f, + +0.000499f, +0.000284f, +0.004710f, -0.004760f, +0.030721f, -0.005807f, -0.000630f, +0.003491f, +0.008171f, -0.018776f, + +0.002669f, -0.008728f, -0.001575f, +0.001959f, +0.020795f, +0.000726f, -0.012878f, +0.006831f, -0.010415f, +0.003386f, + -0.003334f, +0.002689f, -0.011133f, +0.002693f, -0.003083f, -0.005940f, -0.004343f, -0.004955f, -0.005360f, +0.003465f, + +0.001980f, -0.002079f, +0.002618f, -0.001998f, -0.004853f, -0.003542f, +0.001737f, +0.000119f, -0.001459f, -0.002234f, + +0.000872f, -0.001449f, +0.000431f, -0.000080f, -0.001703f, -0.001159f, +0.000896f, -0.001549f, +0.001067f, -0.001843f, + +0.000478f, -0.000599f, -0.001619f, +0.000215f, +0.000614f, +0.000917f, -0.001438f, +0.001090f, +0.001220f, +0.000235f, + -0.001063f, -0.000651f, +0.001516f, +0.000216f, -0.000554f, -0.000210f, -0.000320f, +0.000194f, -0.000492f, +0.000072f, + -0.000313f, +0.000059f, -0.000326f, +0.000240f, +0.000336f, -0.000239f, +0.000035f, -0.000446f, -0.000171f, -0.000264f, + +0.000037f, +0.000232f, +0.000794f, +0.000145f, +0.000155f, -0.000326f + }, + { + +0.083885f, -0.219985f, -0.035348f, -0.001634f, +0.004458f, -0.002859f, +0.003017f, +0.001221f, +0.005935f, +0.000917f, + +0.005036f, -0.000411f, +0.009879f, -0.014479f, -0.012412f, -0.000308f, -0.007511f, +0.011228f, +0.004497f, -0.007401f, + -0.001663f, -0.001031f, +0.004060f, -0.004895f, +0.003709f, +0.006245f, -0.006576f, +0.004075f, -0.005246f, +0.001612f, + +0.007862f, -0.004903f, +0.002560f, +0.000933f, -0.001258f, +0.000034f, +0.002199f, +0.003708f, +0.002955f, -0.003414f, + -0.000088f, +0.004567f, -0.005100f, -0.006603f, -0.000498f, -0.001244f, +0.001543f, +0.001395f, -0.002395f, +0.000156f, + +0.000186f, -0.000315f, -0.000317f, -0.003666f, -0.003534f, +0.000060f, +0.000426f, -0.000074f, -0.000975f, +0.000573f, + -0.000358f, +0.000864f, -0.000675f, -0.001903f, -0.001299f, -0.000541f, -0.000592f, +0.001016f, +0.001100f, +0.000860f, + +0.000529f, +0.001053f, -0.000611f, +0.000233f, -0.000674f, -0.001028f, -0.000589f, +0.000436f, -0.000513f, +0.000987f, + +0.000131f, -0.000522f, -0.000357f, +0.000016f, -0.000095f, +0.000749f, -0.000426f, +0.000077f, -0.000222f, -0.000200f, + +0.000403f, +0.000333f, +0.000784f, +0.000387f, -0.000054f, +0.000244f + }, + { + +0.002911f, +0.033235f, -0.004451f, -0.002579f, +0.001804f, -0.000751f, +0.005824f, -0.004148f, -0.005834f, -0.002904f, + -0.008011f, -0.001280f, -0.010182f, +0.007886f, -0.022773f, -0.008731f, +0.013142f, -0.006012f, +0.019284f, -0.004688f, + -0.001802f, -0.000500f, +0.000504f, +0.015916f, -0.009692f, +0.000350f, +0.006125f, -0.006257f, -0.000425f, -0.004377f, + +0.004560f, +0.005131f, +0.003604f, -0.004267f, +0.001331f, -0.003227f, +0.000701f, -0.007225f, -0.008647f, +0.001201f, + -0.004308f, -0.003122f, -0.001676f, +0.001183f, +0.001801f, -0.004401f, +0.004024f, +0.001649f, +0.001249f, -0.001262f, + +0.001270f, -0.002723f, -0.000338f, -0.000109f, -0.000533f, -0.000522f, +0.000206f, +0.001181f, +0.000634f, -0.002933f, + -0.000460f, -0.001452f, +0.001048f, +0.000084f, +0.000462f, +0.000775f, +0.000907f, -0.000410f, +0.001334f, -0.001842f, + -0.000057f, -0.000083f, +0.001046f, +0.000632f, +0.000816f, +0.000460f, +0.000339f, +0.000149f, +0.000183f, +0.000153f, + -0.000717f, +0.000596f, -0.000463f, +0.000750f, -0.000730f, +0.000369f, -0.000664f, +0.000255f, +0.000095f, -0.000302f, + +0.000367f, -0.000096f, -0.000204f, -0.000233f, -0.000308f, -0.000183f + }, + { + +0.011319f, -0.272942f, +0.000407f, -0.014047f, -0.000156f, +0.019496f, +0.002251f, -0.012001f, +0.005360f, -0.010485f, + +0.000250f, -0.001875f, -0.004595f, +0.002618f, -0.008107f, +0.009262f, -0.010517f, +0.015485f, +0.006606f, -0.001461f, + +0.001621f, -0.003512f, +0.002448f, -0.006837f, -0.000423f, +0.007476f, +0.004851f, +0.000188f, -0.002516f, -0.000899f, + -0.001819f, -0.000348f, -0.000641f, +0.003999f, -0.002043f, -0.002069f, -0.001854f, +0.007616f, +0.000467f, -0.000490f, + +0.002021f, +0.001613f, +0.000713f, -0.001819f, +0.003211f, +0.000233f, -0.000033f, -0.001381f, -0.002429f, -0.001913f, + -0.002183f, -0.001448f, -0.001996f, +0.002146f, -0.001720f, -0.001733f, +0.001037f, -0.002481f, -0.002119f, +0.000167f, + +0.000541f, +0.000028f, -0.000931f, +0.000186f, -0.000374f, -0.000065f, -0.000541f, +0.000328f, -0.001026f, -0.000386f, + +0.000617f, +0.000601f, -0.001031f, -0.000346f, -0.000102f, +0.000071f, -0.000024f, +0.001105f, +0.000211f, -0.000131f, + +0.000248f, -0.000070f, +0.000012f, +0.000560f, -0.000238f, +0.000144f, -0.000232f, +0.000198f, +0.000351f, +0.000329f, + -0.000087f, -0.000164f, +0.000041f, +0.000050f, +0.000071f, -0.000141f + }, + { + +0.001622f, +0.043357f, -0.002970f, -0.004250f, -0.003476f, +0.000966f, +0.002883f, -0.000199f, +0.005107f, -0.000276f, + -0.003185f, -0.007842f, +0.019077f, -0.011394f, +0.016174f, -0.005691f, +0.003760f, -0.012605f, +0.001842f, -0.010287f, + +0.007327f, -0.015573f, +0.001249f, +0.001508f, +0.002413f, +0.000128f, +0.000257f, +0.000922f, +0.005009f, -0.013919f, + +0.006038f, +0.002351f, -0.005904f, +0.001632f, -0.002498f, -0.004672f, -0.000625f, -0.001111f, +0.001567f, -0.003329f, + +0.003200f, +0.003053f, +0.001819f, +0.001281f, +0.001382f, -0.001131f, -0.000958f, -0.001056f, -0.001545f, +0.000863f, + -0.000007f, -0.000681f, -0.003438f, -0.000735f, +0.003239f, +0.001065f, +0.002002f, -0.000513f, +0.000369f, -0.000625f, + +0.002340f, +0.000597f, +0.000427f, +0.000261f, +0.000186f, -0.001558f, -0.000018f, +0.000676f, +0.000104f, +0.000325f, + +0.000737f, +0.000122f, -0.000973f, +0.000099f, +0.000387f, +0.000555f, +0.000591f, -0.000004f, +0.000402f, +0.000207f, + +0.000262f, -0.000133f, +0.000137f, +0.000045f, -0.000483f, -0.000643f, +0.000407f, -0.000414f, -0.000924f, -0.000237f, + +0.000320f, -0.000228f, -0.000342f, +0.000169f, -0.000180f, +0.000118f + }, + { + +0.023947f, +0.192144f, -0.027057f, -0.010272f, +0.000053f, -0.017815f, -0.029821f, +0.008266f, +0.006571f, -0.003494f, + +0.006914f, -0.007100f, +0.001855f, +0.039285f, -0.015245f, +0.010676f, +0.014902f, +0.008054f, +0.001943f, -0.007484f, + -0.006289f, -0.000759f, -0.001526f, -0.014278f, -0.003958f, -0.003645f, +0.002288f, +0.006218f, -0.004378f, -0.008817f, + -0.005156f, +0.004714f, +0.003551f, +0.004784f, +0.001980f, -0.005350f, -0.003878f, +0.001803f, -0.002163f, -0.006991f, + +0.004486f, +0.001909f, +0.003033f, -0.001929f, -0.002959f, +0.003221f, -0.004127f, +0.001630f, +0.002954f, +0.003886f, + -0.003315f, -0.000830f, -0.000193f, +0.001842f, -0.000536f, +0.002826f, -0.001296f, +0.000512f, +0.000854f, -0.001595f, + +0.001394f, -0.000069f, -0.001731f, -0.000454f, -0.000210f, +0.001460f, -0.000283f, -0.001268f, -0.001103f, -0.000626f, + +0.000669f, +0.001943f, -0.000391f, +0.000488f, +0.000017f, -0.000657f, +0.000269f, -0.001183f, +0.000590f, +0.000009f, + +0.000210f, -0.000371f, -0.000703f, +0.000201f, -0.000450f, +0.000393f, +0.000153f, +0.000463f, -0.000285f, -0.000212f, + +0.000168f, +0.000004f, +0.000443f, -0.000142f, -0.000371f, -0.000187f + }, + { + +0.001595f, -0.001882f, +0.007246f, +0.006047f, -0.008012f, -0.001609f, -0.005746f, -0.003286f, +0.001676f, -0.001107f, + -0.008498f, -0.006443f, -0.010292f, -0.055410f, +0.088452f, -0.025624f, -0.002024f, +0.009976f, -0.011637f, +0.012484f, + -0.004004f, +0.002532f, -0.000532f, +0.005076f, -0.015939f, +0.003973f, -0.001012f, -0.000325f, -0.005450f, +0.001408f, + +0.003342f, -0.006757f, +0.000243f, -0.000318f, -0.001210f, +0.003830f, +0.009966f, +0.002206f, -0.005277f, -0.001356f, + -0.001481f, -0.002022f, -0.001080f, +0.002368f, -0.000215f, +0.003855f, +0.000977f, -0.002382f, +0.001775f, +0.002412f, + +0.002277f, -0.001846f, -0.001115f, +0.001238f, +0.002610f, +0.002615f, +0.001004f, +0.000874f, -0.001649f, +0.001343f, + -0.000392f, -0.000172f, +0.002153f, -0.001337f, -0.000030f, +0.000101f, +0.000707f, -0.000622f, -0.000307f, +0.000643f, + +0.000252f, -0.001000f, +0.000409f, -0.001127f, +0.000077f, -0.000060f, -0.000519f, +0.000881f, +0.000461f, -0.000050f, + +0.000267f, +0.000011f, -0.000237f, +0.000084f, -0.000426f, +0.000483f, +0.000106f, +0.000101f, -0.000254f, -0.000134f, + +0.000031f, +0.000026f, +0.000319f, +0.000143f, +0.000006f, -0.000050f + }, + { + -0.003144f, +0.139956f, -0.004022f, +0.007111f, -0.008603f, -0.007066f, +0.005477f, +0.000748f, -0.000848f, -0.006959f, + +0.004853f, -0.009670f, +0.007022f, -0.037868f, -0.046899f, -0.006608f, +0.006364f, +0.004429f, -0.001989f, -0.003700f, + -0.002147f, +0.003261f, -0.004237f, +0.006028f, -0.001642f, -0.002506f, -0.005548f, -0.005922f, -0.000141f, -0.000112f, + -0.002297f, -0.003988f, -0.008825f, -0.002272f, +0.003240f, +0.006387f, +0.003411f, +0.002094f, -0.000508f, -0.005684f, + +0.002584f, -0.000425f, -0.004711f, +0.000025f, +0.002774f, +0.008215f, -0.003264f, -0.004066f, -0.001923f, -0.000642f, + -0.002781f, +0.001283f, -0.002473f, -0.001029f, -0.000763f, +0.001419f, +0.000377f, -0.000988f, -0.001882f, +0.001711f, + -0.000679f, -0.000428f, +0.001905f, +0.001641f, +0.001626f, +0.001108f, -0.000534f, -0.000205f, -0.000240f, -0.000475f, + +0.000366f, +0.000512f, -0.000521f, -0.000093f, -0.000893f, -0.000692f, +0.000062f, -0.000080f, +0.000827f, -0.000171f, + -0.000155f, -0.001002f, -0.000211f, -0.000416f, -0.000050f, -0.000301f, +0.000437f, -0.000214f, -0.000191f, -0.000079f, + -0.000297f, -0.000423f, +0.000280f, +0.000136f, +0.000444f, -0.000138f + } + }, + { + { + +0.000123f, +0.142952f, +0.026987f, -0.008724f, -0.005549f, +0.002947f, -0.004739f, -0.003582f, -0.007232f, -0.000290f, + +0.000197f, -0.012098f, +0.008867f, +0.002246f, -0.012814f, -0.006526f, -0.002110f, +0.009250f, +0.000040f, -0.017142f, + +0.009997f, -0.001492f, +0.012120f, +0.002629f, +0.002239f, +0.015006f, +0.005111f, +0.004275f, +0.001975f, +0.015864f, + -0.004432f, +0.012370f, -0.002482f, -0.004447f, -0.013023f, -0.005417f, -0.001181f, -0.002326f, +0.004059f, +0.001141f, + +0.000418f, -0.001515f, +0.003651f, +0.001326f, +0.000079f, -0.002058f, +0.000841f, -0.000350f, +0.002207f, -0.005442f, + -0.000650f, +0.000670f, -0.001718f, -0.001684f, -0.001413f, +0.001343f, -0.001959f, -0.001053f, -0.001690f, -0.000030f, + -0.000145f, +0.000569f, +0.000014f, +0.000148f, -0.000458f, +0.001002f, -0.000477f, +0.002702f, -0.000382f, +0.001005f, + +0.000445f, +0.000362f, -0.000621f, +0.000868f, +0.000689f, -0.000140f, +0.001035f, -0.000154f, -0.000574f, -0.000080f, + +0.000522f, +0.000081f, -0.000107f, +0.000263f, +0.000051f, +0.000269f, -0.000213f, -0.000427f, +0.000024f, +0.000753f, + -0.000285f, +0.000438f, -0.000423f, -0.000263f, -0.000094f, +0.000183f + }, + { + -0.016247f, +0.419941f, +0.050334f, -0.015271f, +0.000093f, -0.000938f, -0.004700f, +0.001626f, -0.011155f, +0.002542f, + -0.003192f, -0.008462f, -0.008931f, +0.012403f, -0.005799f, -0.016270f, -0.000700f, -0.003231f, +0.023931f, +0.008740f, + -0.004152f, -0.001551f, -0.009669f, -0.000052f, -0.004729f, +0.004728f, -0.002916f, -0.001404f, +0.001829f, -0.003800f, + +0.003263f, +0.002001f, +0.004536f, -0.003908f, +0.005147f, -0.001101f, +0.009157f, -0.002361f, +0.002592f, +0.002794f, + -0.005125f, -0.004370f, +0.006552f, +0.005554f, -0.002488f, +0.001990f, -0.000366f, +0.005938f, +0.003005f, -0.003137f, + -0.001681f, +0.002070f, -0.002796f, +0.000365f, -0.000555f, +0.002488f, -0.002276f, -0.004422f, +0.000069f, -0.000734f, + +0.002109f, +0.000126f, +0.001852f, -0.001700f, -0.001330f, -0.000670f, +0.000073f, +0.000954f, -0.002038f, +0.001776f, + +0.000646f, -0.001051f, +0.000150f, -0.000152f, +0.000567f, +0.000371f, -0.000598f, +0.000982f, -0.000574f, +0.000530f, + -0.000732f, -0.000311f, -0.000082f, +0.000323f, -0.000494f, +0.000466f, -0.000509f, -0.000009f, +0.000372f, -0.000074f, + +0.000635f, +0.000269f, -0.000332f, -0.000640f, -0.000178f, +0.000221f + }, + { + +0.001022f, -0.319421f, -0.033222f, +0.018208f, +0.005700f, +0.008929f, -0.000630f, +0.001225f, -0.002704f, -0.001917f, + -0.008722f, -0.005792f, +0.000613f, +0.003334f, +0.001974f, -0.003870f, -0.002259f, +0.006924f, -0.015819f, +0.002629f, + -0.017983f, -0.005750f, +0.008875f, -0.005852f, +0.006332f, -0.010650f, +0.002497f, -0.010074f, +0.001805f, +0.000221f, + +0.006379f, -0.012180f, -0.008531f, +0.001622f, -0.008308f, -0.000387f, +0.003327f, -0.005454f, -0.003710f, -0.001746f, + -0.002822f, -0.004991f, -0.000286f, +0.001468f, +0.003754f, +0.000229f, -0.000342f, -0.001663f, +0.001454f, +0.002255f, + +0.001641f, +0.000432f, +0.000793f, -0.004818f, +0.003460f, +0.000698f, -0.001097f, +0.002835f, -0.000356f, -0.000803f, + +0.001107f, +0.000459f, -0.000994f, +0.000743f, +0.000515f, +0.000314f, -0.000739f, +0.000816f, -0.000218f, -0.000077f, + +0.001334f, +0.001295f, +0.000136f, -0.000616f, +0.000439f, +0.000760f, +0.000238f, +0.000198f, +0.000084f, -0.000357f, + -0.000276f, -0.000262f, -0.000029f, +0.000205f, +0.000426f, +0.000008f, +0.000200f, -0.000340f, +0.000313f, -0.000354f, + -0.000638f, +0.000095f, -0.000135f, -0.000217f, -0.000251f, -0.000297f + }, + { + -0.002306f, +0.060494f, +0.000488f, -0.000709f, +0.001396f, +0.000242f, -0.000473f, -0.001273f, -0.000801f, -0.001493f, + +0.004118f, +0.002480f, -0.000543f, -0.003596f, +0.010904f, -0.007774f, -0.011542f, -0.005520f, -0.015523f, +0.002551f, + +0.000623f, -0.005934f, -0.002943f, -0.002254f, +0.004602f, +0.003911f, -0.003264f, +0.004901f, -0.005196f, -0.000634f, + -0.007123f, -0.008488f, -0.000444f, -0.005485f, +0.002485f, +0.000473f, +0.001506f, -0.001863f, -0.002816f, +0.003323f, + +0.000628f, +0.000500f, -0.005392f, +0.000381f, -0.000779f, +0.000413f, +0.000647f, +0.000944f, -0.002780f, +0.000780f, + +0.002962f, -0.002549f, -0.000068f, +0.000942f, -0.000991f, +0.002294f, -0.001634f, -0.001285f, -0.001235f, -0.000449f, + -0.001376f, -0.000853f, +0.000031f, +0.000569f, -0.000721f, -0.000919f, -0.000030f, -0.000248f, +0.000667f, -0.000456f, + +0.001008f, +0.000206f, -0.000956f, +0.000103f, +0.000413f, -0.000177f, +0.000702f, -0.000409f, -0.000167f, -0.000165f, + -0.000204f, +0.000715f, +0.000141f, -0.000119f, +0.000302f, +0.000205f, +0.000313f, +0.000030f, +0.000044f, +0.000232f, + +0.000211f, -0.000068f, -0.000105f, +0.000003f, -0.000353f, -0.000030f + }, + { + +0.009364f, -0.361754f, +0.011426f, -0.019713f, -0.001227f, -0.001155f, -0.000824f, -0.001387f, +0.000305f, +0.009368f, + -0.015138f, +0.009953f, +0.001059f, +0.002343f, +0.008462f, -0.003551f, +0.004815f, -0.036192f, +0.007442f, -0.002992f, + -0.000330f, -0.007804f, +0.000929f, -0.003057f, +0.005476f, +0.002245f, -0.003613f, -0.002501f, -0.011855f, +0.007432f, + -0.008717f, +0.002431f, -0.004484f, +0.004123f, +0.002673f, -0.005496f, +0.015365f, +0.002690f, -0.003311f, -0.000383f, + +0.000799f, -0.004879f, -0.000991f, +0.002638f, -0.000169f, +0.000787f, -0.002613f, +0.001375f, +0.000269f, -0.001404f, + -0.003742f, +0.000636f, +0.000548f, +0.001336f, +0.000438f, +0.000378f, +0.000637f, -0.001900f, -0.000170f, +0.001460f, + -0.001106f, +0.000516f, +0.000648f, -0.000677f, -0.000936f, +0.001365f, -0.000788f, +0.000540f, +0.000463f, +0.000708f, + -0.000566f, +0.000367f, +0.000127f, +0.000017f, -0.000373f, -0.000063f, +0.000318f, +0.000623f, +0.000793f, -0.000132f, + +0.000387f, +0.000184f, -0.000554f, -0.000153f, -0.000185f, -0.000174f, +0.000363f, -0.000538f, -0.000240f, +0.000186f, + -0.000783f, +0.000111f, -0.000037f, +0.000297f, +0.000186f, +0.000203f + }, + { + -0.000699f, +0.001617f, -0.002950f, +0.002968f, +0.000081f, -0.000148f, +0.000106f, -0.003292f, -0.006146f, -0.000966f, + -0.000261f, +0.000020f, -0.011763f, -0.007155f, +0.002060f, -0.000005f, -0.003977f, +0.008145f, -0.012466f, -0.004054f, + +0.024767f, +0.001725f, -0.006057f, +0.024870f, +0.003701f, -0.000548f, +0.003065f, +0.006467f, -0.012194f, +0.002092f, + +0.008365f, +0.001644f, -0.002620f, -0.003790f, +0.006790f, -0.001724f, +0.003177f, -0.004405f, +0.001899f, +0.003329f, + +0.004378f, -0.000831f, -0.000698f, -0.004394f, -0.004116f, -0.000945f, -0.003104f, +0.003222f, -0.000034f, -0.001209f, + -0.001599f, +0.000811f, -0.001350f, -0.001337f, +0.001719f, -0.001001f, -0.000287f, +0.000968f, +0.002010f, +0.001325f, + -0.002343f, +0.000043f, -0.001825f, -0.000957f, +0.000193f, +0.000531f, -0.001375f, +0.001065f, -0.000219f, -0.000205f, + +0.000055f, -0.000227f, +0.000464f, +0.001181f, -0.000172f, -0.000678f, +0.000479f, -0.001137f, +0.000217f, -0.001017f, + -0.000085f, +0.000353f, -0.000255f, +0.000476f, -0.000108f, -0.000581f, +0.000008f, -0.000094f, -0.000656f, +0.000035f, + -0.000251f, -0.000005f, -0.000522f, -0.000096f, -0.000648f, +0.000033f + }, + { + +0.098114f, -0.114412f, -0.027310f, +0.014385f, -0.005241f, +0.000071f, -0.000452f, -0.000001f, +0.001655f, -0.000990f, + +0.003801f, -0.004639f, +0.006556f, -0.000967f, -0.004397f, -0.001533f, +0.001164f, -0.005134f, +0.006894f, +0.000585f, + +0.007743f, -0.001225f, +0.001743f, +0.003040f, +0.002835f, +0.002243f, -0.001199f, +0.000172f, -0.003608f, -0.003458f, + +0.004418f, +0.002230f, +0.002188f, -0.002938f, -0.003439f, -0.000474f, +0.002890f, -0.003913f, +0.001708f, -0.001382f, + -0.000706f, -0.002862f, +0.001629f, +0.005216f, -0.002334f, +0.001967f, -0.000209f, -0.001805f, -0.002241f, -0.000907f, + -0.001432f, -0.003982f, -0.001290f, -0.003400f, +0.000556f, -0.001443f, -0.000651f, -0.000545f, -0.000535f, +0.001059f, + +0.002120f, -0.000288f, -0.000920f, +0.000066f, +0.000164f, -0.001252f, -0.000539f, +0.001533f, -0.000663f, +0.000343f, + -0.000245f, -0.000505f, -0.000829f, +0.000083f, +0.000547f, +0.000476f, +0.000199f, +0.000498f, +0.000374f, -0.000519f, + -0.000680f, -0.000586f, +0.000045f, -0.000646f, +0.000370f, -0.000422f, -0.000116f, +0.000540f, -0.000853f, -0.000536f, + -0.000011f, +0.000169f, -0.000294f, -0.000086f, -0.000146f, -0.000185f + }, + { + -0.000928f, -0.019440f, -0.010863f, -0.002719f, -0.000540f, -0.000191f, -0.000899f, +0.000009f, +0.002275f, -0.000693f, + +0.004231f, +0.006087f, +0.009571f, +0.002759f, +0.034449f, +0.009372f, +0.022566f, -0.004130f, +0.004692f, -0.016477f, + -0.006358f, -0.019801f, -0.011608f, -0.024437f, +0.009797f, +0.004474f, -0.007287f, +0.010368f, -0.011167f, +0.001381f, + -0.005181f, +0.005189f, -0.008330f, +0.002363f, -0.001139f, -0.000491f, +0.001306f, -0.002100f, -0.005958f, +0.001371f, + -0.000367f, +0.000148f, +0.003572f, -0.001904f, -0.001950f, +0.000024f, +0.002486f, +0.002747f, +0.001145f, -0.002506f, + +0.000032f, -0.003468f, -0.000697f, +0.001506f, -0.000519f, -0.000335f, +0.001228f, -0.001863f, +0.000709f, -0.001933f, + +0.003525f, +0.002065f, -0.000113f, +0.000366f, +0.000670f, +0.000041f, -0.002070f, +0.001648f, +0.000622f, -0.000029f, + +0.000370f, -0.000703f, +0.000064f, -0.000366f, -0.000468f, +0.000146f, +0.000228f, +0.000124f, +0.000382f, +0.000913f, + +0.000121f, +0.000748f, -0.000585f, -0.000500f, +0.000594f, -0.000338f, -0.000213f, +0.000648f, +0.000303f, -0.000377f, + +0.000233f, +0.000006f, +0.000539f, +0.000014f, +0.000192f, -0.000093f + }, + { + -0.067216f, -0.353023f, +0.032833f, +0.008466f, +0.006282f, -0.004780f, +0.001871f, +0.000938f, +0.000210f, -0.002899f, + +0.002878f, -0.001344f, +0.011291f, -0.007321f, -0.004555f, +0.001106f, +0.000065f, +0.015910f, -0.001014f, -0.011321f, + +0.000241f, +0.001951f, +0.003215f, -0.009752f, -0.001107f, +0.005516f, -0.006572f, +0.003581f, -0.005606f, +0.001828f, + +0.005766f, -0.007631f, +0.000489f, -0.002626f, -0.004059f, +0.001637f, +0.001296f, -0.002102f, +0.003484f, +0.000628f, + -0.007044f, +0.003507f, +0.000427f, -0.003287f, +0.003240f, -0.000653f, -0.001052f, +0.002847f, -0.002321f, -0.003301f, + -0.001072f, -0.000086f, +0.000981f, +0.001444f, -0.001379f, +0.000248f, +0.000088f, +0.000141f, +0.001273f, +0.001909f, + +0.000703f, +0.001776f, +0.000357f, -0.000000f, +0.000979f, +0.001206f, -0.000603f, +0.000342f, -0.000158f, -0.001018f, + -0.000030f, +0.001169f, -0.000499f, +0.000628f, -0.000012f, -0.000280f, -0.000825f, -0.000073f, -0.001147f, +0.000688f, + +0.000228f, -0.000247f, -0.000331f, +0.000128f, -0.000108f, +0.000691f, -0.000304f, +0.000415f, +0.000112f, -0.000095f, + +0.000516f, -0.000035f, +0.000055f, -0.000091f, -0.000173f, +0.000114f + }, + { + -0.002552f, +0.062496f, +0.015504f, -0.004599f, +0.001462f, +0.000603f, +0.008615f, +0.001405f, -0.001425f, +0.002508f, + -0.004484f, +0.002709f, -0.012803f, +0.002778f, -0.027767f, -0.007299f, +0.017157f, -0.017077f, +0.006777f, -0.009455f, + +0.002569f, -0.000259f, -0.009217f, +0.013887f, -0.001997f, -0.001082f, -0.002789f, +0.000578f, +0.005177f, +0.005553f, + +0.007570f, -0.005271f, -0.000364f, -0.003854f, +0.001178f, -0.002562f, +0.005822f, +0.000541f, -0.001618f, +0.003864f, + +0.000982f, +0.001115f, -0.002085f, -0.001450f, +0.002230f, -0.001203f, +0.001736f, +0.001448f, +0.001538f, -0.001979f, + +0.002808f, -0.003296f, +0.000586f, +0.002055f, +0.000507f, -0.001464f, +0.001548f, +0.000961f, +0.000222f, -0.000775f, + +0.001947f, -0.001289f, +0.000498f, -0.000938f, +0.000151f, +0.000089f, +0.000276f, -0.001273f, +0.000619f, -0.000790f, + +0.000743f, -0.000409f, +0.000134f, +0.000217f, +0.000061f, -0.000176f, +0.000024f, +0.000275f, +0.000210f, +0.000340f, + -0.000136f, +0.000741f, -0.000477f, +0.000363f, -0.000738f, +0.000563f, -0.000773f, +0.000072f, +0.000213f, -0.000193f, + +0.000430f, -0.000171f, +0.000013f, +0.000149f, -0.000184f, -0.000075f + }, + { + -0.011564f, -0.282379f, +0.015674f, -0.017090f, -0.005489f, -0.001808f, -0.024378f, -0.013157f, +0.008955f, -0.005776f, + +0.002190f, -0.003575f, -0.002300f, +0.008156f, -0.007567f, +0.003678f, -0.002392f, +0.023745f, +0.007071f, +0.000099f, + +0.009653f, -0.002714f, +0.001493f, -0.003621f, -0.002485f, -0.003160f, -0.000335f, -0.001164f, +0.000773f, +0.005926f, + +0.000766f, -0.002041f, -0.005685f, +0.001108f, -0.000360f, +0.002243f, -0.000184f, +0.007784f, +0.005853f, +0.004604f, + +0.005029f, +0.003221f, +0.000426f, +0.000301f, +0.001396f, -0.002268f, +0.001198f, +0.000478f, -0.001118f, +0.000181f, + +0.001140f, +0.000391f, -0.000278f, +0.002611f, +0.000523f, -0.000207f, +0.001755f, -0.001366f, -0.000222f, +0.000174f, + -0.000900f, -0.000498f, -0.000794f, +0.000205f, -0.000254f, -0.000090f, -0.000545f, +0.000457f, -0.001796f, -0.000307f, + +0.000309f, -0.000210f, -0.000896f, -0.000232f, +0.000034f, +0.000305f, -0.000100f, +0.000347f, +0.000006f, +0.000190f, + +0.000001f, -0.000063f, -0.000511f, -0.000429f, +0.000223f, +0.000530f, -0.000038f, +0.000383f, +0.000125f, -0.000003f, + -0.000238f, +0.000086f, +0.000692f, +0.000148f, -0.000023f, -0.000081f + }, + { + -0.000435f, +0.037225f, -0.007835f, -0.008322f, -0.004280f, +0.003940f, +0.002490f, -0.001974f, +0.001904f, -0.001453f, + +0.001259f, -0.006546f, -0.004100f, -0.051732f, +0.000459f, -0.004570f, +0.011976f, -0.002376f, +0.001497f, -0.007015f, + +0.007466f, -0.023083f, -0.002438f, -0.006123f, +0.017464f, +0.013780f, +0.000563f, -0.000218f, +0.010169f, -0.007364f, + +0.004893f, -0.001766f, +0.002018f, +0.006877f, +0.006811f, +0.006263f, +0.005463f, -0.001656f, +0.000775f, -0.001155f, + +0.002799f, +0.000104f, -0.002239f, -0.002122f, +0.001906f, +0.001457f, -0.000610f, -0.000075f, -0.000647f, -0.000119f, + +0.001281f, +0.001831f, -0.000689f, -0.000581f, +0.001719f, -0.001889f, -0.000705f, -0.002582f, -0.000197f, +0.001095f, + +0.002939f, +0.000256f, -0.000497f, -0.000231f, +0.001071f, -0.000779f, +0.000215f, +0.000167f, +0.000266f, +0.000533f, + +0.000906f, +0.000563f, -0.000699f, +0.000904f, +0.000811f, -0.000054f, +0.000173f, +0.000238f, +0.000444f, +0.000218f, + +0.000320f, -0.000343f, -0.000354f, -0.000136f, +0.000096f, -0.000064f, +0.000247f, -0.000389f, -0.000451f, +0.000020f, + +0.000271f, -0.000065f, -0.000172f, +0.000325f, -0.000014f, +0.000250f + }, + { + -0.040843f, +0.092334f, -0.018926f, +0.013172f, +0.006240f, +0.011029f, -0.009845f, +0.004877f, +0.004370f, -0.008758f, + -0.001742f, -0.016356f, -0.014593f, +0.024970f, -0.018757f, -0.008193f, +0.002713f, +0.013116f, +0.007796f, -0.000430f, + -0.002486f, -0.000581f, +0.006351f, -0.001840f, +0.006256f, -0.001484f, -0.000331f, -0.000025f, -0.000169f, +0.002694f, + +0.003946f, +0.003991f, -0.002391f, +0.000200f, -0.005841f, -0.004775f, -0.001785f, -0.000369f, -0.001205f, -0.006215f, + +0.000608f, +0.000999f, +0.007103f, -0.000709f, -0.002498f, +0.005167f, -0.003645f, +0.000349f, -0.000879f, +0.004367f, + +0.000628f, +0.002027f, +0.000372f, -0.002074f, -0.003279f, +0.000657f, +0.000014f, +0.002451f, -0.001405f, -0.003676f, + +0.001135f, -0.000384f, -0.000461f, +0.000308f, -0.000234f, +0.002183f, +0.000316f, -0.001129f, -0.000683f, +0.000047f, + +0.000051f, +0.001142f, -0.000250f, -0.000036f, -0.000311f, -0.000302f, +0.000325f, -0.000982f, -0.000114f, -0.000255f, + +0.001127f, -0.000081f, -0.001077f, +0.000171f, +0.000104f, +0.000426f, -0.000279f, +0.000293f, -0.000468f, +0.000073f, + +0.000542f, -0.000041f, +0.000064f, -0.000211f, -0.000096f, +0.000010f + }, + { + -0.001225f, -0.000043f, +0.010986f, +0.005578f, -0.004547f, +0.003995f, -0.004301f, -0.005573f, +0.000850f, +0.001809f, + -0.005234f, -0.002978f, -0.017517f, +0.006827f, +0.183056f, -0.016162f, -0.000092f, +0.017951f, +0.000513f, +0.007562f, + -0.000538f, +0.000357f, -0.000086f, +0.012937f, -0.010330f, +0.004360f, -0.003487f, -0.005610f, +0.003772f, +0.007976f, + +0.003005f, -0.005217f, -0.000395f, -0.000523f, +0.000740f, +0.001953f, +0.002931f, -0.002255f, -0.005108f, -0.001441f, + -0.005039f, +0.000718f, -0.000284f, +0.004498f, +0.000087f, +0.000957f, -0.003898f, -0.003307f, +0.000864f, +0.002010f, + +0.000986f, -0.001598f, +0.001963f, +0.002128f, +0.000710f, +0.000677f, +0.000987f, +0.001292f, -0.001893f, +0.001892f, + -0.001625f, -0.001772f, +0.001640f, -0.001813f, -0.001278f, -0.000637f, -0.000389f, -0.000875f, -0.000425f, +0.001149f, + +0.000932f, -0.000362f, +0.001071f, -0.000993f, -0.000612f, -0.000505f, -0.000124f, +0.000366f, +0.000824f, +0.000068f, + +0.000315f, +0.000835f, -0.000116f, +0.000080f, +0.000116f, +0.000064f, -0.000597f, -0.000138f, -0.000072f, -0.000398f, + -0.000239f, +0.000013f, +0.000458f, -0.000077f, +0.000058f, +0.000056f + }, + { + -0.020146f, +0.131110f, +0.002686f, +0.007301f, -0.008243f, -0.009391f, +0.004518f, -0.003537f, -0.004342f, -0.005797f, + +0.001873f, -0.014729f, +0.009485f, +0.024816f, +0.033745f, +0.003773f, +0.014147f, +0.001394f, +0.002329f, +0.003140f, + +0.006401f, +0.005336f, -0.005198f, +0.002864f, -0.002465f, -0.003468f, -0.012539f, -0.001589f, +0.002177f, -0.004453f, + -0.000433f, +0.002185f, -0.000235f, +0.002219f, +0.001641f, +0.000094f, -0.003317f, +0.001025f, +0.000413f, -0.003131f, + +0.004959f, +0.003193f, -0.001252f, +0.001737f, +0.002860f, +0.004393f, -0.005339f, -0.002798f, -0.000240f, +0.001051f, + -0.003313f, +0.000272f, -0.000008f, +0.001500f, +0.000197f, +0.003103f, +0.002549f, +0.000810f, -0.001747f, +0.000940f, + -0.000310f, -0.000877f, +0.001382f, +0.002436f, +0.001401f, -0.000171f, -0.000384f, +0.001840f, +0.000865f, -0.000660f, + +0.000649f, -0.000394f, -0.000854f, +0.000979f, +0.000055f, +0.000727f, +0.000544f, +0.000283f, +0.001030f, +0.000102f, + -0.000194f, -0.000466f, +0.000451f, -0.000466f, +0.000150f, -0.000018f, +0.000734f, -0.000249f, +0.000226f, -0.000032f, + -0.000323f, -0.000336f, +0.000167f, -0.000199f, +0.000328f, -0.000507f + } + }, + { + { + +0.001585f, +0.124613f, +0.026275f, -0.007861f, +0.001809f, +0.000322f, -0.006680f, -0.002755f, -0.005568f, +0.004644f, + -0.007797f, -0.010054f, +0.005780f, -0.004817f, +0.004759f, -0.009021f, -0.003546f, +0.011993f, -0.006929f, -0.013649f, + +0.013878f, +0.005450f, +0.001756f, +0.003188f, +0.010945f, +0.005974f, +0.016716f, +0.003267f, +0.000388f, +0.008841f, + -0.002999f, +0.015662f, -0.006920f, -0.004696f, -0.009301f, -0.007243f, +0.000673f, -0.008511f, +0.004599f, +0.002256f, + -0.001961f, +0.002294f, +0.000409f, +0.004161f, -0.002338f, -0.002709f, -0.001630f, +0.002636f, -0.002330f, -0.003533f, + -0.000299f, +0.000288f, -0.001496f, +0.000377f, -0.001040f, -0.000538f, -0.002032f, -0.001795f, +0.001325f, -0.001341f, + -0.000619f, +0.000510f, +0.000726f, +0.000403f, +0.000139f, -0.000670f, +0.000750f, +0.000986f, +0.000153f, +0.000693f, + +0.001022f, +0.000257f, -0.000588f, +0.000298f, +0.000941f, -0.000610f, +0.001337f, -0.000049f, -0.000618f, -0.000013f, + +0.000198f, -0.000206f, +0.000721f, -0.000018f, +0.000445f, +0.000025f, -0.000207f, -0.000413f, +0.000164f, +0.000325f, + +0.000586f, -0.000171f, -0.000199f, -0.000294f, -0.000057f, -0.000223f + }, + { + +0.018453f, +0.413372f, +0.000494f, -0.006272f, -0.000116f, -0.002677f, -0.002479f, -0.003819f, -0.007959f, -0.000016f, + +0.007110f, -0.010563f, -0.008829f, +0.003808f, +0.001648f, -0.024649f, -0.004925f, +0.013308f, +0.016816f, -0.000230f, + +0.001610f, -0.012877f, -0.004807f, +0.001273f, +0.001326f, -0.003501f, -0.003963f, +0.001997f, +0.000479f, -0.000005f, + -0.001245f, +0.006968f, +0.001680f, -0.001131f, +0.000163f, +0.003891f, +0.002713f, +0.001024f, +0.001049f, -0.000507f, + -0.003708f, -0.001205f, +0.006845f, +0.001518f, +0.000704f, +0.001153f, +0.001317f, +0.004311f, +0.001733f, -0.000385f, + -0.000759f, -0.000167f, -0.001332f, -0.000329f, +0.000651f, +0.001055f, -0.001589f, -0.001415f, -0.001677f, +0.000345f, + +0.000093f, +0.001040f, +0.000703f, -0.000571f, -0.001452f, -0.000921f, -0.001224f, +0.001092f, -0.000865f, +0.000894f, + +0.000396f, -0.000306f, -0.001045f, +0.000456f, -0.000011f, +0.000069f, +0.000798f, -0.000371f, +0.000193f, -0.000319f, + -0.000428f, -0.000067f, -0.000375f, +0.000517f, -0.000126f, -0.000112f, +0.000099f, -0.000028f, +0.000229f, +0.000033f, + +0.000386f, +0.000282f, -0.000333f, -0.000612f, +0.000033f, +0.000105f + }, + { + +0.000360f, -0.320014f, -0.020574f, -0.006910f, +0.018747f, +0.004227f, +0.000810f, -0.002389f, -0.001501f, -0.004291f, + -0.004735f, -0.001579f, -0.006409f, -0.008846f, -0.000145f, +0.011769f, -0.013403f, +0.010348f, -0.002887f, -0.002547f, + -0.018448f, -0.008650f, -0.002399f, +0.002255f, -0.000496f, +0.000687f, -0.002958f, -0.003894f, -0.006107f, +0.000199f, + +0.003516f, -0.007985f, -0.004835f, -0.005755f, -0.009034f, +0.004356f, +0.001364f, -0.009189f, +0.000285f, -0.001961f, + -0.003442f, -0.003624f, -0.003869f, +0.005416f, +0.003678f, +0.002731f, -0.005796f, -0.000246f, -0.000035f, +0.004788f, + +0.001926f, +0.001169f, -0.000588f, -0.004338f, +0.000125f, +0.002819f, +0.000981f, +0.001299f, +0.001512f, -0.002499f, + +0.000189f, +0.002011f, +0.000338f, -0.000139f, -0.000260f, +0.000599f, +0.000174f, -0.000579f, -0.000124f, +0.000272f, + +0.001738f, +0.001609f, -0.000210f, +0.000053f, +0.001174f, +0.000394f, +0.000276f, +0.000213f, -0.000576f, -0.000234f, + -0.000161f, -0.000295f, +0.000164f, +0.000093f, -0.000083f, +0.000633f, +0.000093f, -0.000545f, +0.000075f, -0.000526f, + -0.000247f, +0.000089f, -0.000104f, -0.000339f, -0.000101f, -0.000126f + }, + { + +0.001878f, +0.050123f, +0.003940f, +0.000507f, +0.000097f, +0.000240f, -0.000247f, -0.001058f, -0.002302f, +0.000302f, + +0.002096f, +0.005077f, -0.004628f, -0.010621f, +0.009649f, -0.006318f, -0.003684f, +0.006797f, -0.025118f, -0.006476f, + +0.003945f, -0.001149f, -0.005935f, -0.000758f, -0.007380f, +0.003198f, -0.004272f, +0.010702f, -0.005817f, -0.001788f, + -0.004961f, -0.004009f, -0.008561f, +0.001296f, -0.003705f, -0.000118f, -0.000880f, -0.000180f, -0.000404f, +0.002548f, + -0.000522f, -0.000268f, -0.002926f, -0.002611f, +0.000007f, +0.001814f, +0.001223f, -0.001937f, -0.000949f, +0.001593f, + +0.000620f, +0.000869f, +0.000614f, -0.000510f, +0.000740f, -0.000509f, -0.000096f, +0.000094f, -0.002891f, -0.000737f, + -0.000455f, -0.001736f, +0.001299f, -0.000527f, -0.000782f, -0.000309f, -0.000023f, +0.000702f, -0.000622f, +0.001106f, + -0.000023f, +0.000113f, -0.001493f, +0.001072f, -0.000036f, +0.000106f, +0.000362f, +0.000151f, -0.000106f, +0.000462f, + -0.000573f, +0.000247f, -0.000064f, +0.000214f, +0.000420f, +0.000128f, +0.000060f, +0.000252f, +0.000291f, -0.000064f, + +0.000331f, -0.000168f, +0.000220f, +0.000074f, -0.000299f, +0.000175f + }, + { + -0.034534f, -0.345404f, +0.041495f, -0.034385f, +0.007162f, +0.001211f, -0.004747f, +0.005884f, -0.007028f, +0.000634f, + +0.007409f, -0.005378f, +0.003556f, -0.000485f, -0.000065f, +0.002055f, +0.006743f, -0.042359f, +0.022384f, -0.010686f, + -0.009894f, +0.004625f, -0.009787f, -0.004937f, +0.004526f, +0.003002f, +0.001157f, -0.011610f, -0.008145f, +0.005877f, + -0.007060f, +0.004862f, -0.001123f, -0.001343f, +0.000121f, -0.004773f, +0.008966f, +0.006820f, -0.002811f, +0.000623f, + -0.002987f, -0.001665f, +0.000668f, +0.001044f, -0.000808f, +0.000001f, -0.000419f, +0.000590f, +0.001407f, -0.004115f, + -0.004107f, +0.001217f, +0.001107f, -0.001270f, +0.002271f, +0.000159f, +0.001130f, -0.002102f, -0.001334f, +0.000219f, + -0.000492f, +0.000613f, +0.000569f, -0.000739f, -0.000795f, +0.000737f, -0.000055f, +0.000233f, +0.001045f, +0.000512f, + -0.000186f, -0.000823f, +0.000326f, -0.000358f, -0.000136f, -0.000287f, -0.000174f, +0.001086f, +0.000837f, -0.000107f, + +0.000391f, -0.000505f, +0.000308f, -0.000252f, -0.000096f, -0.000109f, -0.000100f, -0.000296f, -0.000292f, -0.000083f, + -0.000651f, +0.000229f, -0.000195f, +0.000263f, -0.000012f, +0.000128f + }, + { + +0.000000f, +0.008197f, -0.008120f, -0.001549f, +0.001366f, +0.000154f, +0.000070f, -0.004014f, -0.001971f, -0.000849f, + -0.002699f, +0.000246f, -0.011109f, -0.014788f, +0.000041f, -0.000038f, +0.002712f, +0.002470f, +0.006631f, -0.011420f, + +0.005383f, +0.003971f, +0.010207f, +0.009961f, +0.004261f, +0.004840f, -0.012434f, +0.018723f, -0.010860f, +0.002709f, + +0.005339f, +0.003593f, -0.001089f, -0.007155f, +0.007461f, -0.000228f, +0.000190f, +0.001032f, +0.002869f, -0.000546f, + +0.004802f, +0.000375f, -0.001434f, -0.002939f, -0.004383f, -0.002145f, +0.000324f, -0.001082f, +0.000374f, -0.001972f, + -0.000805f, -0.000106f, +0.001633f, -0.002431f, +0.002144f, -0.001446f, +0.000264f, +0.000723f, +0.002054f, +0.000314f, + -0.001537f, +0.001170f, -0.003265f, -0.000668f, +0.000284f, +0.000298f, -0.000916f, -0.000074f, +0.000867f, -0.000766f, + -0.000099f, +0.000446f, +0.001016f, +0.000167f, +0.000330f, +0.000429f, -0.000753f, -0.000250f, -0.000514f, +0.000063f, + -0.000379f, -0.000313f, +0.000425f, +0.000311f, -0.000327f, -0.000139f, -0.000559f, -0.000361f, -0.000258f, +0.000016f, + -0.000215f, -0.000197f, -0.000351f, -0.000229f, -0.000104f, -0.000147f + }, + { + -0.105303f, +0.027846f, +0.057243f, +0.006262f, +0.010544f, -0.001158f, -0.000350f, +0.003125f, -0.003309f, -0.006996f, + +0.001317f, +0.007265f, +0.002759f, -0.000186f, -0.006237f, +0.007577f, -0.004828f, -0.001880f, +0.004956f, -0.000276f, + +0.002815f, +0.001618f, +0.001565f, +0.002370f, +0.004552f, -0.003314f, +0.000710f, -0.002685f, -0.002094f, -0.005054f, + +0.001917f, +0.009030f, -0.000678f, -0.004156f, -0.000330f, -0.000255f, -0.000904f, -0.002801f, -0.000479f, -0.000197f, + +0.000812f, -0.002468f, -0.000438f, +0.003277f, +0.001988f, -0.000424f, -0.000211f, -0.001856f, -0.005364f, +0.002383f, + -0.003379f, -0.003876f, -0.000620f, -0.003143f, +0.002335f, -0.003836f, -0.000530f, -0.000204f, +0.000395f, +0.000890f, + +0.001971f, -0.000924f, -0.000139f, +0.000206f, -0.000324f, -0.000845f, -0.000959f, +0.001340f, -0.000586f, +0.000527f, + -0.000314f, -0.001329f, -0.000369f, +0.000493f, +0.000384f, +0.000341f, +0.000470f, +0.000712f, +0.000173f, -0.000692f, + -0.000463f, +0.000241f, -0.000483f, -0.000134f, -0.000508f, -0.000022f, -0.000013f, +0.000063f, -0.000423f, -0.000490f, + -0.000097f, +0.000164f, +0.000001f, -0.000172f, -0.000227f, +0.000149f + }, + { + -0.001684f, -0.019988f, -0.011971f, +0.000615f, -0.000164f, +0.000260f, -0.000021f, +0.000784f, -0.000609f, +0.000754f, + +0.002955f, +0.005536f, +0.004423f, -0.002356f, +0.014700f, +0.021891f, +0.025866f, -0.000956f, -0.003925f, +0.000396f, + -0.027457f, -0.006200f, -0.012747f, -0.015178f, +0.008307f, -0.011430f, +0.002878f, +0.001906f, -0.004084f, -0.006918f, + -0.002477f, -0.001283f, +0.000025f, -0.005204f, +0.003666f, -0.003403f, +0.003656f, -0.004730f, -0.002734f, +0.000194f, + +0.000707f, +0.002027f, -0.002185f, +0.001446f, -0.003523f, +0.003893f, +0.001401f, +0.001882f, +0.001419f, -0.002813f, + +0.000744f, -0.002874f, -0.001468f, +0.003499f, -0.000670f, +0.001463f, -0.000519f, -0.001219f, +0.000628f, -0.001731f, + +0.003126f, +0.001190f, +0.002299f, -0.000603f, +0.000186f, -0.000290f, -0.000015f, -0.000110f, +0.000912f, -0.000827f, + +0.001598f, -0.000385f, -0.000922f, -0.000371f, -0.000123f, -0.000659f, +0.001546f, +0.000048f, +0.000585f, +0.000768f, + +0.000373f, +0.000146f, -0.000522f, -0.000189f, +0.000313f, -0.000313f, -0.000088f, +0.001131f, -0.000136f, -0.000158f, + +0.000245f, +0.000085f, +0.000134f, +0.000147f, +0.000206f, +0.000010f + }, + { + +0.037362f, -0.446193f, -0.000069f, +0.005772f, +0.006837f, -0.001605f, +0.001176f, +0.001393f, -0.001992f, -0.000797f, + +0.001284f, -0.001159f, +0.004544f, +0.001798f, -0.005634f, -0.001178f, +0.004214f, +0.004152f, -0.002473f, -0.001387f, + -0.000964f, -0.001090f, -0.001921f, -0.002264f, +0.000790f, +0.001145f, -0.000418f, -0.001188f, +0.001825f, -0.004724f, + +0.002978f, +0.003133f, -0.004425f, -0.003622f, -0.003476f, +0.001811f, -0.000499f, -0.000236f, -0.000999f, +0.002963f, + -0.006172f, +0.001327f, +0.000696f, +0.001785f, +0.001579f, +0.000251f, -0.001695f, +0.002017f, -0.002323f, -0.001294f, + -0.002582f, +0.001322f, -0.000784f, +0.001837f, -0.000822f, +0.000602f, -0.000608f, +0.000344f, +0.000979f, +0.001715f, + +0.001181f, +0.001267f, -0.000440f, +0.001454f, +0.000144f, +0.001316f, +0.000212f, -0.000621f, -0.000011f, -0.001049f, + +0.000250f, +0.000049f, +0.000277f, +0.000293f, +0.000665f, -0.000738f, -0.000809f, -0.000256f, +0.000056f, -0.000307f, + +0.000333f, +0.000037f, -0.000143f, -0.000251f, -0.000175f, -0.000046f, +0.000130f, +0.000222f, +0.000419f, +0.000098f, + +0.000077f, +0.000106f, -0.000102f, -0.000097f, -0.000170f, -0.000158f + }, + { + +0.002073f, +0.070053f, -0.006156f, +0.005188f, +0.001481f, +0.005032f, +0.002152f, +0.000982f, +0.002127f, +0.006668f, + -0.000064f, -0.006588f, -0.000508f, -0.001302f, -0.024037f, -0.000352f, -0.002386f, -0.006957f, -0.009327f, -0.001157f, + +0.006471f, -0.000888f, -0.005910f, +0.010379f, +0.003144f, +0.002468f, -0.009371f, +0.004058f, +0.002162f, +0.009981f, + +0.000344f, -0.001281f, -0.002033f, +0.003911f, -0.003614f, -0.002106f, +0.009625f, -0.000580f, +0.001538f, +0.002360f, + +0.002844f, -0.000724f, -0.001811f, -0.002349f, +0.001785f, +0.004172f, +0.000362f, -0.000557f, +0.002613f, -0.001891f, + +0.001851f, -0.001466f, +0.001206f, +0.000677f, +0.000983f, -0.000849f, +0.001080f, +0.000029f, +0.000381f, +0.000075f, + +0.000451f, -0.000769f, +0.000965f, -0.001191f, -0.000909f, +0.000067f, +0.000293f, -0.000546f, +0.000082f, +0.000094f, + +0.000813f, -0.000710f, -0.000734f, +0.000784f, -0.000629f, +0.000570f, -0.000084f, +0.000132f, -0.000463f, +0.000812f, + +0.000220f, -0.000222f, +0.000381f, -0.000432f, +0.000054f, +0.000125f, -0.000380f, -0.000098f, +0.000212f, +0.000410f, + +0.000048f, +0.000171f, -0.000061f, +0.000198f, -0.000054f, +0.000194f + }, + { + +0.008727f, -0.259163f, -0.009385f, -0.019733f, -0.005082f, -0.003087f, -0.030274f, -0.001495f, -0.005340f, -0.003801f, + +0.003382f, +0.003684f, -0.004031f, +0.004989f, +0.001294f, -0.008146f, +0.017995f, -0.000802f, +0.014220f, -0.000184f, + +0.006503f, +0.001752f, +0.002044f, +0.000399f, -0.004702f, -0.004640f, -0.003823f, -0.001651f, +0.005686f, +0.008210f, + -0.003137f, -0.007593f, -0.004054f, -0.000038f, +0.004736f, -0.000107f, +0.002366f, +0.008954f, +0.002094f, +0.005493f, + +0.005704f, +0.005711f, -0.000332f, +0.002810f, -0.001859f, -0.002687f, +0.000931f, +0.000706f, +0.001582f, +0.000533f, + +0.000609f, -0.000944f, +0.002799f, +0.000255f, +0.001780f, -0.001435f, +0.001381f, -0.000774f, +0.000697f, -0.000075f, + -0.001193f, -0.000114f, +0.000340f, -0.000448f, -0.000110f, -0.000018f, -0.000814f, -0.000059f, -0.001122f, +0.000006f, + -0.000209f, -0.000656f, -0.000661f, +0.000375f, +0.000632f, -0.000033f, +0.000287f, -0.000474f, +0.000251f, +0.000036f, + -0.000213f, +0.000240f, -0.000778f, -0.000463f, +0.000353f, +0.000253f, +0.000275f, +0.000277f, +0.000335f, -0.000104f, + -0.000320f, -0.000054f, +0.000589f, +0.000066f, +0.000112f, +0.000204f + }, + { + -0.000310f, +0.028686f, +0.004547f, -0.013839f, -0.002029f, +0.003528f, -0.003184f, +0.001273f, +0.000507f, -0.002958f, + +0.003691f, -0.005613f, -0.024181f, -0.021349f, -0.008865f, -0.000214f, +0.005556f, +0.006628f, -0.009236f, +0.003433f, + +0.008329f, -0.027913f, +0.005314f, -0.007737f, +0.014268f, +0.012012f, -0.005706f, +0.005402f, +0.005924f, -0.000985f, + +0.003571f, -0.006371f, +0.000987f, +0.010124f, +0.003411f, +0.007648f, +0.005612f, -0.001274f, +0.004437f, +0.001287f, + -0.004115f, -0.001266f, +0.000646f, -0.000496f, +0.002299f, +0.000742f, -0.001678f, -0.001198f, +0.000860f, +0.000793f, + +0.000944f, +0.000081f, +0.002379f, -0.000344f, +0.000163f, -0.002512f, -0.001867f, -0.001981f, -0.000668f, +0.001285f, + +0.003243f, +0.000006f, +0.000297f, -0.000983f, +0.000029f, -0.000372f, +0.000291f, +0.000338f, -0.000380f, +0.001187f, + +0.000562f, +0.000578f, -0.000339f, +0.000321f, +0.000649f, +0.000316f, +0.000586f, +0.000119f, +0.000149f, +0.000319f, + +0.000224f, -0.000200f, -0.000264f, -0.000439f, +0.000061f, -0.000059f, -0.000423f, -0.000383f, -0.000126f, +0.000172f, + +0.000023f, +0.000103f, +0.000092f, +0.000012f, +0.000116f, +0.000258f + }, + { + +0.036915f, -0.009512f, -0.011914f, -0.000598f, -0.001338f, +0.023592f, +0.002919f, -0.002080f, -0.002877f, -0.002008f, + -0.004334f, -0.014268f, +0.011602f, -0.020047f, -0.004280f, -0.003932f, -0.006926f, +0.007339f, +0.004902f, +0.010152f, + -0.006296f, -0.002438f, +0.005274f, +0.006774f, +0.002619f, +0.004614f, -0.004221f, -0.001367f, +0.002784f, -0.000453f, + +0.008845f, -0.000789f, -0.000902f, -0.003006f, -0.004353f, -0.001281f, -0.004259f, +0.002879f, -0.002435f, -0.002088f, + -0.003366f, -0.002173f, +0.006613f, +0.000243f, +0.001379f, -0.000093f, -0.000822f, -0.000606f, -0.000240f, -0.000090f, + +0.005268f, +0.001491f, -0.002569f, -0.000451f, -0.001818f, +0.002125f, -0.001891f, +0.001984f, -0.001110f, -0.001654f, + -0.000677f, -0.000707f, -0.001026f, +0.001411f, -0.000898f, +0.002288f, +0.001041f, -0.001556f, +0.000049f, -0.000018f, + -0.000395f, +0.000552f, -0.000144f, -0.000103f, -0.000690f, +0.000621f, -0.001306f, +0.000540f, -0.000317f, -0.000237f, + +0.000529f, -0.000071f, -0.000599f, -0.000283f, +0.000263f, +0.000096f, -0.000528f, +0.000134f, -0.000089f, +0.000012f, + +0.000493f, -0.000068f, -0.000081f, -0.000237f, +0.000268f, -0.000049f + }, + { + +0.000905f, -0.000615f, +0.005862f, +0.004756f, -0.000902f, +0.000541f, +0.000405f, -0.002385f, +0.001036f, -0.002245f, + -0.001879f, -0.001391f, -0.014876f, +0.064780f, +0.103135f, +0.004309f, +0.002724f, +0.004261f, +0.004838f, -0.005741f, + +0.014921f, -0.003559f, +0.002828f, +0.004613f, +0.000848f, -0.001254f, -0.001345f, -0.000790f, +0.000207f, +0.003629f, + +0.004797f, -0.000609f, -0.002553f, -0.003742f, -0.003361f, -0.000083f, +0.004484f, -0.002579f, -0.004364f, +0.000043f, + -0.008094f, +0.005933f, -0.001523f, +0.003005f, +0.000683f, +0.000634f, -0.005945f, -0.002695f, +0.001003f, +0.003317f, + +0.000691f, -0.001094f, +0.002337f, +0.001073f, +0.000263f, -0.000709f, +0.001992f, -0.000236f, -0.000790f, +0.001313f, + -0.001300f, -0.000706f, +0.001297f, -0.001944f, -0.001302f, +0.000307f, -0.002358f, -0.000098f, +0.000215f, +0.001129f, + +0.000505f, -0.000156f, +0.000281f, -0.000576f, -0.000620f, -0.000247f, -0.000021f, -0.000110f, +0.000102f, +0.000266f, + +0.000719f, +0.000948f, +0.000159f, -0.000015f, +0.000411f, -0.000503f, -0.000894f, -0.000229f, +0.000299f, -0.000359f, + -0.000103f, +0.000039f, +0.000335f, -0.000051f, +0.000180f, +0.000019f + }, + { + +0.031851f, +0.086029f, -0.014072f, -0.000616f, -0.004129f, +0.007288f, -0.011684f, -0.002239f, -0.005223f, -0.005655f, + +0.005794f, -0.004404f, -0.000507f, -0.014480f, +0.099322f, +0.008908f, +0.012540f, -0.009954f, +0.003554f, +0.004091f, + +0.006914f, +0.004891f, -0.004767f, -0.001981f, -0.001372f, -0.004658f, -0.008717f, +0.007932f, -0.005967f, -0.003418f, + -0.001384f, +0.001017f, +0.006346f, -0.000541f, -0.000653f, -0.001277f, -0.004635f, +0.002058f, +0.001850f, +0.000104f, + +0.000643f, +0.005064f, +0.001447f, +0.001707f, +0.002617f, +0.000042f, -0.004422f, +0.000139f, +0.000440f, -0.001472f, + -0.000902f, -0.001785f, +0.003300f, -0.000511f, +0.001353f, +0.003060f, +0.001039f, +0.002455f, -0.001848f, -0.001732f, + +0.001046f, +0.000209f, +0.000941f, +0.001039f, +0.001523f, -0.001206f, -0.000210f, +0.001466f, +0.000957f, -0.000279f, + +0.000107f, -0.000290f, -0.000533f, +0.001429f, -0.000259f, +0.000914f, +0.000131f, +0.000947f, +0.000121f, +0.000603f, + -0.000209f, -0.000282f, -0.000033f, +0.000130f, +0.000265f, +0.000059f, +0.000491f, -0.000155f, +0.000142f, -0.000279f, + -0.000028f, -0.000261f, +0.000030f, -0.000100f, +0.000048f, -0.000363f + } + }, + { + { + -0.000497f, +0.008506f, -0.070354f, -0.005849f, +0.004905f, -0.002152f, -0.003559f, +0.002629f, -0.000037f, +0.004739f, + -0.009322f, -0.002592f, -0.000705f, -0.019499f, +0.017505f, +0.010457f, +0.001361f, +0.000949f, -0.010488f, +0.000458f, + +0.023691f, +0.004460f, -0.002429f, -0.004555f, +0.000648f, -0.009852f, +0.004700f, +0.000599f, -0.006425f, +0.003421f, + -0.005021f, +0.006656f, -0.007520f, +0.006536f, +0.006496f, +0.002227f, +0.005345f, -0.009915f, +0.001635f, -0.000021f, + -0.004353f, +0.001035f, -0.001337f, +0.002119f, -0.002881f, -0.002455f, -0.003093f, +0.000745f, -0.001733f, -0.001135f, + -0.000313f, +0.000766f, +0.000635f, +0.001447f, -0.000324f, +0.000097f, -0.000682f, -0.000596f, +0.002706f, -0.000450f, + -0.001430f, -0.000104f, +0.000682f, -0.000392f, +0.000085f, -0.000258f, +0.000667f, +0.000849f, +0.000210f, -0.000607f, + +0.000055f, +0.000390f, +0.000022f, -0.000170f, +0.000178f, -0.000845f, +0.000740f, -0.000064f, -0.000080f, -0.000084f, + +0.000182f, -0.000198f, +0.000463f, -0.000183f, +0.000422f, -0.000042f, -0.000155f, -0.000200f, +0.000117f, -0.000331f, + +0.000477f, -0.000337f, +0.000170f, +0.000244f, +0.000153f, -0.000190f + }, + { + -0.012304f, +0.285445f, -0.062787f, -0.002972f, +0.002357f, -0.000109f, -0.002491f, +0.002002f, +0.001730f, +0.004030f, + +0.010219f, -0.006096f, -0.006342f, -0.004919f, +0.007119f, -0.003982f, +0.002355f, -0.008682f, -0.005155f, -0.004259f, + -0.003349f, -0.007253f, +0.001966f, +0.005197f, +0.000673f, -0.005704f, -0.000056f, +0.003486f, -0.000031f, -0.000635f, + -0.004704f, +0.003205f, -0.002288f, +0.001156f, +0.001183f, -0.000711f, +0.000355f, +0.002634f, +0.001564f, -0.000342f, + +0.001054f, +0.000664f, +0.002237f, -0.001909f, -0.002687f, -0.002427f, -0.001471f, +0.001343f, +0.001325f, +0.000153f, + +0.001446f, +0.001998f, -0.001357f, -0.000924f, -0.000176f, +0.000135f, +0.000299f, +0.000621f, +0.000362f, +0.000396f, + -0.001541f, +0.000008f, +0.000748f, +0.000067f, -0.001476f, -0.000771f, -0.001924f, +0.000712f, -0.000460f, +0.000113f, + -0.000155f, -0.000379f, -0.000414f, +0.000588f, -0.000591f, -0.000043f, +0.000390f, -0.001023f, +0.000546f, +0.000214f, + -0.000119f, +0.000105f, -0.000014f, +0.000616f, -0.000045f, -0.000099f, +0.000581f, -0.000208f, -0.000051f, -0.000264f, + +0.000016f, +0.000240f, +0.000017f, -0.000352f, +0.000177f, +0.000078f + }, + { + -0.002674f, -0.193308f, +0.070324f, -0.034935f, -0.013867f, -0.004919f, +0.002095f, -0.000422f, +0.001550f, -0.003769f, + +0.000246f, +0.000509f, -0.006882f, -0.002846f, -0.006680f, +0.010585f, -0.006864f, +0.005357f, -0.005246f, +0.001833f, + -0.009270f, -0.000576f, -0.000922f, +0.002951f, -0.001015f, +0.003716f, -0.001006f, +0.004499f, +0.001213f, -0.003333f, + -0.001852f, -0.005249f, -0.004020f, -0.005858f, -0.005817f, +0.001511f, -0.001107f, -0.000837f, +0.004032f, -0.000391f, + -0.000300f, -0.001394f, -0.001897f, +0.002845f, -0.001076f, +0.001494f, -0.004862f, +0.002031f, +0.001875f, +0.001857f, + -0.001973f, +0.000224f, -0.001162f, -0.002980f, +0.000411f, +0.001294f, +0.001043f, +0.001888f, +0.001828f, -0.001959f, + -0.000065f, +0.001014f, -0.000616f, -0.000935f, +0.000469f, +0.000121f, -0.000504f, -0.000604f, -0.000750f, +0.000102f, + +0.001414f, +0.000590f, -0.000183f, -0.000037f, +0.000431f, +0.000430f, +0.000179f, -0.000304f, -0.000225f, +0.000555f, + -0.000247f, -0.000321f, +0.000422f, -0.000143f, -0.000589f, +0.000338f, -0.000059f, -0.000340f, +0.000202f, -0.000604f, + -0.000071f, +0.000053f, -0.000079f, -0.000152f, +0.000227f, +0.000092f + }, + { + -0.000693f, +0.026931f, -0.009738f, +0.000242f, -0.001041f, -0.000556f, +0.000646f, +0.001140f, -0.001550f, +0.000316f, + +0.001285f, +0.004150f, -0.009373f, -0.007476f, +0.015473f, -0.005867f, -0.006160f, +0.008993f, -0.019000f, -0.003487f, + +0.000671f, +0.003487f, +0.000925f, +0.000903f, -0.003431f, +0.008462f, +0.003338f, +0.012668f, -0.004809f, +0.003088f, + -0.000915f, -0.001227f, -0.004965f, +0.005462f, -0.002141f, -0.000966f, -0.001289f, +0.001248f, -0.000325f, +0.001772f, + -0.001402f, -0.001638f, -0.000121f, +0.001210f, +0.001578f, +0.001403f, +0.001072f, +0.000291f, +0.000076f, -0.000571f, + -0.001408f, +0.001307f, +0.000319f, -0.001415f, +0.000081f, -0.001331f, +0.000820f, +0.001445f, -0.002036f, +0.000401f, + +0.000376f, -0.001131f, +0.000961f, -0.000743f, -0.000952f, +0.000362f, +0.000848f, +0.000683f, -0.001011f, +0.001314f, + -0.000420f, +0.000634f, -0.000212f, +0.000701f, -0.000539f, +0.000159f, +0.000418f, +0.000182f, -0.000274f, +0.000347f, + -0.000871f, +0.000108f, -0.000270f, +0.000083f, +0.000031f, -0.000194f, +0.000040f, -0.000068f, +0.000027f, -0.000365f, + +0.000140f, -0.000070f, +0.000136f, +0.000085f, -0.000067f, +0.000258f + }, + { + +0.050777f, -0.293171f, -0.004898f, -0.021263f, +0.005091f, -0.002158f, -0.008296f, +0.003316f, -0.006103f, +0.000455f, + +0.010101f, -0.006270f, +0.005463f, +0.003548f, -0.013792f, -0.011744f, +0.002578f, -0.048138f, +0.010897f, -0.009578f, + -0.005113f, +0.008546f, -0.008185f, -0.004139f, +0.001792f, -0.002615f, +0.001816f, -0.002391f, +0.000283f, +0.006269f, + -0.001436f, +0.003613f, -0.002098f, -0.002882f, -0.000045f, -0.000044f, -0.001734f, +0.000513f, -0.000199f, +0.001004f, + -0.000666f, -0.001829f, +0.000548f, -0.000389f, -0.002322f, -0.000218f, +0.001284f, +0.001204f, +0.000405f, -0.004213f, + -0.003498f, +0.000721f, -0.000024f, -0.002337f, +0.001930f, -0.000773f, -0.000403f, -0.001084f, +0.000044f, -0.000614f, + -0.000766f, +0.000496f, +0.000317f, -0.000282f, -0.000990f, +0.000266f, -0.000051f, -0.000502f, +0.000035f, -0.000704f, + -0.000391f, -0.001036f, +0.000029f, -0.000033f, +0.000008f, -0.000029f, -0.000174f, -0.000021f, +0.000449f, -0.000083f, + +0.000194f, -0.000314f, +0.000375f, -0.000433f, +0.000184f, +0.000274f, +0.000231f, -0.000028f, -0.000332f, -0.000109f, + -0.000380f, +0.000458f, -0.000125f, +0.000094f, -0.000061f, +0.000102f + }, + { + -0.000206f, +0.008921f, -0.009376f, -0.002893f, +0.000013f, +0.000398f, +0.001096f, -0.002217f, +0.002236f, +0.000202f, + -0.003868f, +0.000478f, -0.007984f, -0.001800f, +0.007780f, -0.005080f, -0.002236f, +0.002421f, -0.007369f, -0.029819f, + +0.004203f, +0.002817f, +0.002591f, +0.004733f, +0.001859f, +0.001540f, -0.003900f, +0.026780f, -0.002918f, +0.001280f, + -0.004385f, +0.003107f, -0.001014f, -0.008627f, +0.002969f, -0.004690f, -0.001629f, +0.001264f, +0.002956f, -0.001837f, + +0.001354f, -0.001168f, +0.001275f, -0.000542f, -0.001726f, -0.000089f, +0.000540f, -0.002697f, +0.002005f, +0.001510f, + +0.001184f, -0.000414f, +0.001349f, -0.002211f, +0.000851f, -0.001889f, +0.000198f, -0.000539f, +0.000235f, -0.000852f, + -0.001437f, +0.001768f, -0.001958f, -0.000228f, +0.000657f, +0.000260f, -0.000980f, -0.000069f, +0.001023f, -0.000787f, + -0.000081f, +0.000155f, +0.000434f, +0.000102f, +0.000845f, +0.000035f, -0.001292f, +0.000433f, -0.000457f, -0.000152f, + -0.000106f, -0.000470f, +0.000218f, -0.000116f, -0.000239f, +0.000362f, -0.000578f, -0.000242f, +0.000045f, +0.000075f, + -0.000063f, +0.000124f, -0.000040f, -0.000506f, -0.000073f, +0.000182f + }, + { + +0.091408f, +0.083147f, -0.102340f, -0.009627f, -0.000832f, -0.001898f, +0.000888f, +0.001581f, -0.000605f, -0.001698f, + -0.002375f, +0.001008f, -0.001159f, -0.000211f, -0.012122f, +0.009192f, +0.003769f, -0.002801f, +0.003941f, +0.000910f, + +0.000388f, -0.002928f, -0.005395f, +0.000865f, +0.002115f, -0.006678f, +0.004320f, +0.002843f, +0.003526f, -0.001889f, + -0.000276f, +0.004432f, -0.005827f, -0.004799f, +0.003414f, +0.001153f, +0.001298f, +0.001713f, +0.000126f, -0.000402f, + +0.001644f, -0.003222f, -0.002355f, +0.002343f, -0.000907f, -0.000194f, +0.001266f, -0.001036f, -0.004622f, +0.001736f, + -0.000571f, +0.000299f, +0.001902f, -0.002046f, +0.003158f, -0.004223f, -0.001554f, +0.001054f, +0.000362f, -0.000073f, + +0.001827f, -0.001214f, -0.000214f, +0.000384f, -0.000549f, -0.000440f, -0.001109f, +0.000400f, -0.001073f, -0.000171f, + +0.000063f, -0.000729f, -0.000363f, +0.000363f, +0.000291f, +0.000146f, +0.000501f, +0.000198f, -0.000100f, -0.000320f, + -0.000188f, +0.000750f, +0.000128f, +0.000297f, -0.000285f, +0.000527f, +0.000024f, -0.000165f, -0.000069f, -0.000173f, + +0.000170f, +0.000182f, +0.000218f, +0.000037f, +0.000038f, +0.000534f + }, + { + +0.001089f, +0.007004f, +0.000301f, -0.000225f, -0.000139f, +0.000104f, +0.000527f, +0.000329f, -0.001066f, -0.000853f, + -0.000483f, +0.003071f, +0.001619f, +0.003133f, -0.007072f, -0.021702f, +0.000944f, +0.002854f, -0.007618f, +0.012033f, + -0.000436f, +0.010088f, -0.003215f, -0.005903f, +0.006211f, -0.018874f, -0.003101f, +0.000513f, -0.006259f, -0.006732f, + +0.001448f, -0.003327f, +0.006082f, -0.000777f, +0.002229f, -0.006500f, +0.003546f, -0.000511f, +0.001428f, +0.001592f, + +0.000526f, +0.000416f, -0.003880f, +0.001366f, -0.003219f, +0.003585f, -0.000215f, -0.000832f, +0.002394f, -0.000475f, + +0.000534f, -0.000513f, -0.000346f, +0.002114f, -0.002087f, +0.000202f, -0.000440f, -0.000317f, +0.001355f, +0.000426f, + +0.002003f, -0.001048f, +0.000776f, -0.001661f, +0.000209f, +0.000419f, +0.000741f, -0.001196f, -0.000189f, -0.001571f, + +0.000792f, +0.000149f, -0.000148f, -0.000186f, -0.000035f, -0.000759f, +0.001185f, -0.000189f, +0.000611f, -0.000018f, + -0.000214f, +0.000323f, -0.000035f, +0.000456f, +0.000338f, -0.000446f, -0.000089f, +0.000489f, -0.000414f, +0.000139f, + -0.000051f, -0.000160f, -0.000115f, -0.000060f, +0.000144f, +0.000068f + }, + { + -0.005057f, -0.416340f, +0.073874f, +0.007108f, -0.003215f, -0.000068f, +0.003791f, +0.003687f, +0.000469f, +0.000338f, + +0.002446f, -0.000959f, +0.000296f, -0.000426f, -0.006306f, +0.002583f, -0.003219f, -0.007247f, -0.000458f, +0.005717f, + +0.000860f, -0.001517f, -0.000665f, +0.001072f, +0.004161f, +0.003441f, +0.002038f, -0.000793f, +0.002873f, -0.004158f, + +0.003754f, +0.003981f, -0.001653f, +0.000598f, -0.000842f, +0.000204f, -0.001757f, +0.001158f, -0.003425f, -0.002294f, + -0.010506f, -0.000571f, +0.002186f, +0.001878f, -0.000595f, +0.000638f, -0.001394f, +0.000533f, -0.002004f, -0.000177f, + -0.002807f, +0.000835f, +0.000065f, +0.002806f, -0.000340f, -0.000157f, -0.000889f, -0.000137f, -0.000578f, +0.000343f, + -0.000230f, -0.000234f, -0.000756f, +0.001027f, -0.000356f, +0.000730f, -0.000277f, -0.000619f, +0.000631f, -0.000616f, + +0.000042f, -0.000513f, +0.000064f, +0.000167f, +0.000666f, -0.000348f, +0.000514f, +0.000042f, +0.000430f, -0.000474f, + +0.000091f, -0.000250f, -0.000141f, -0.000116f, -0.000180f, -0.000294f, -0.000264f, -0.000261f, +0.000169f, -0.000195f, + -0.000194f, +0.000177f, -0.000085f, -0.000004f, -0.000240f, +0.000061f + }, + { + -0.001041f, +0.047189f, -0.025051f, +0.002951f, +0.003987f, -0.003295f, -0.009502f, +0.001360f, +0.000944f, +0.004018f, + +0.000797f, -0.001193f, +0.005176f, +0.001601f, -0.010705f, +0.012264f, -0.003548f, -0.006909f, -0.008197f, -0.007736f, + -0.000104f, +0.001593f, -0.009170f, +0.003021f, +0.004650f, +0.004457f, -0.008521f, +0.000486f, -0.001624f, +0.000572f, + -0.003675f, +0.005354f, +0.000278f, +0.003497f, -0.000710f, +0.001402f, +0.007021f, -0.003030f, +0.000386f, +0.000851f, + +0.002444f, -0.001415f, -0.000927f, -0.001344f, +0.000800f, +0.001818f, -0.001379f, -0.001930f, +0.000568f, -0.002459f, + +0.002143f, -0.000592f, +0.001587f, -0.000631f, -0.000081f, -0.000563f, +0.000001f, -0.000334f, +0.000847f, +0.000095f, + -0.000765f, -0.000675f, +0.001031f, -0.000041f, -0.000562f, -0.000506f, +0.000598f, -0.000412f, -0.000218f, -0.000249f, + +0.000573f, -0.000630f, -0.000699f, +0.000842f, -0.000408f, +0.000864f, -0.000320f, +0.000039f, -0.000346f, +0.000476f, + -0.000214f, -0.000037f, +0.000780f, -0.000494f, -0.000010f, +0.000145f, +0.000221f, +0.000315f, +0.000176f, +0.000408f, + -0.000217f, +0.000320f, +0.000183f, +0.000245f, -0.000024f, +0.000190f + }, + { + -0.005748f, -0.183614f, +0.075395f, -0.007765f, -0.003738f, +0.003002f, -0.021591f, +0.000363f, -0.004052f, +0.003246f, + -0.001389f, +0.000132f, -0.000979f, -0.001528f, +0.004301f, -0.003980f, +0.017602f, -0.007882f, +0.003674f, +0.000089f, + +0.007147f, +0.001613f, -0.000075f, +0.000751f, -0.000996f, -0.002368f, -0.002861f, -0.001734f, +0.004067f, +0.003987f, + -0.006072f, -0.001737f, +0.002358f, -0.001874f, +0.005168f, +0.001427f, +0.001532f, +0.000987f, -0.004435f, +0.003097f, + +0.000977f, +0.002152f, +0.000212f, +0.002961f, -0.001470f, -0.002015f, -0.000878f, +0.000285f, +0.001397f, +0.000087f, + +0.000939f, -0.000085f, +0.001912f, -0.001388f, +0.001342f, -0.001179f, +0.000220f, -0.001043f, +0.000433f, +0.000324f, + +0.001128f, +0.001193f, +0.001051f, +0.000155f, +0.000406f, +0.000366f, -0.000169f, +0.000230f, -0.000696f, +0.000069f, + +0.000062f, -0.000029f, -0.000044f, +0.000640f, +0.000420f, -0.000313f, -0.000289f, -0.000815f, +0.000152f, +0.000023f, + -0.000132f, +0.000103f, -0.000484f, +0.000191f, +0.000227f, -0.000046f, -0.000060f, -0.000255f, -0.000154f, -0.000114f, + -0.000128f, -0.000168f, +0.000162f, -0.000070f, +0.000100f, +0.000047f + }, + { + +0.000869f, +0.011068f, -0.005559f, -0.005058f, +0.003790f, +0.002200f, -0.003172f, +0.000880f, -0.000686f, -0.001781f, + +0.002675f, -0.000564f, +0.014339f, +0.021816f, -0.008799f, -0.007099f, -0.002463f, +0.009389f, -0.008409f, -0.004035f, + +0.012366f, -0.011886f, +0.001888f, -0.019257f, -0.003671f, +0.005871f, -0.012288f, +0.000664f, +0.005285f, +0.000973f, + +0.001540f, -0.005414f, -0.003010f, +0.003383f, -0.003141f, +0.001620f, +0.003625f, +0.000706f, +0.003361f, -0.000668f, + -0.005771f, -0.000405f, +0.003307f, -0.000016f, +0.001816f, +0.000717f, -0.000726f, +0.000013f, -0.001285f, -0.001966f, + -0.000823f, -0.001149f, +0.001636f, -0.000276f, +0.000505f, -0.001250f, -0.000169f, -0.000866f, -0.000546f, +0.000235f, + +0.001503f, -0.001047f, +0.000898f, -0.001503f, +0.000090f, +0.000409f, -0.000345f, -0.000281f, -0.001282f, +0.000811f, + +0.000034f, -0.000333f, -0.000089f, +0.000576f, +0.000107f, -0.000021f, +0.000117f, -0.000446f, -0.000034f, -0.000047f, + -0.000187f, -0.000199f, +0.000260f, +0.000020f, +0.000146f, -0.000308f, -0.000506f, -0.000029f, +0.000135f, +0.000004f, + -0.000162f, +0.000170f, +0.000069f, -0.000141f, +0.000109f, +0.000118f + }, + { + -0.019635f, -0.071124f, -0.005288f, -0.011708f, -0.013112f, +0.001754f, -0.004902f, -0.000330f, -0.000252f, -0.000316f, + +0.002692f, -0.010256f, -0.003904f, -0.032996f, +0.002662f, +0.003434f, -0.003026f, -0.000305f, +0.000478f, +0.008564f, + -0.007764f, -0.002626f, +0.002005f, +0.001929f, -0.004424f, +0.002323f, -0.005011f, -0.000901f, +0.000161f, -0.005038f, + +0.003502f, -0.008032f, -0.001860f, +0.001458f, -0.000668f, +0.002977f, -0.002082f, +0.002533f, -0.000818f, +0.002122f, + +0.000808f, -0.003227f, +0.003381f, +0.000869f, +0.003756f, -0.001140f, -0.002482f, -0.001142f, +0.001146f, -0.001530f, + +0.003960f, -0.001565f, -0.003487f, +0.001832f, -0.000103f, +0.003932f, -0.001964f, -0.000048f, -0.002035f, -0.000046f, + +0.000730f, +0.000407f, -0.000539f, +0.001362f, -0.001838f, +0.000813f, -0.000227f, -0.001576f, +0.000515f, +0.000243f, + -0.000638f, +0.000017f, -0.000044f, +0.000446f, -0.000414f, +0.000370f, -0.001081f, +0.000639f, -0.000378f, +0.000024f, + -0.000169f, -0.000179f, +0.000246f, +0.000296f, +0.000092f, -0.000244f, -0.000559f, +0.000286f, +0.000102f, -0.000138f, + +0.000411f, +0.000027f, -0.000118f, -0.000539f, +0.000080f, -0.000176f + }, + { + -0.000161f, -0.004751f, +0.000202f, +0.001969f, -0.001547f, +0.001010f, +0.001853f, -0.000291f, +0.004215f, +0.000268f, + +0.004867f, +0.003486f, -0.007852f, -0.005197f, -0.034657f, -0.013499f, +0.009967f, -0.002274f, +0.002300f, -0.009461f, + +0.003682f, -0.009227f, +0.005628f, +0.000570f, -0.002812f, -0.002182f, -0.002260f, +0.000791f, -0.004767f, -0.003551f, + +0.000736f, +0.002417f, -0.001578f, -0.005701f, -0.000898f, +0.000673f, +0.001933f, -0.000563f, -0.001577f, +0.003277f, + -0.004198f, +0.003195f, -0.001799f, +0.003268f, -0.000664f, +0.000534f, -0.003883f, -0.001019f, +0.001174f, +0.000529f, + +0.000244f, -0.000880f, +0.002077f, +0.000058f, +0.000636f, -0.000814f, +0.000155f, -0.000953f, -0.000702f, +0.001236f, + -0.000532f, -0.000315f, +0.001105f, -0.001311f, -0.000400f, +0.000185f, -0.001210f, +0.001036f, -0.000322f, -0.000681f, + +0.000004f, +0.000645f, +0.000006f, -0.000628f, +0.000436f, +0.000780f, +0.000206f, +0.000175f, -0.000640f, -0.000343f, + +0.000402f, +0.000028f, -0.000105f, +0.000028f, +0.000372f, +0.000056f, -0.000519f, -0.000001f, +0.000297f, -0.000058f, + +0.000181f, -0.000256f, -0.000003f, +0.000102f, +0.000196f, -0.000030f + }, + { + -0.029582f, +0.022097f, -0.000396f, -0.000003f, +0.002748f, +0.004000f, -0.012684f, +0.005169f, -0.000327f, -0.004615f, + +0.003584f, -0.001628f, +0.000432f, -0.020033f, +0.081533f, -0.004452f, +0.005179f, -0.008153f, +0.002716f, +0.000528f, + +0.002006f, +0.002955f, -0.001444f, -0.002175f, +0.002233f, +0.002033f, -0.003070f, +0.007033f, -0.003321f, +0.001388f, + -0.001490f, +0.000685f, +0.004388f, +0.000606f, +0.001002f, -0.000211f, -0.000319f, +0.002337f, +0.002650f, +0.003347f, + +0.000019f, +0.001769f, -0.001969f, +0.001590f, +0.002396f, -0.000916f, -0.001949f, +0.001369f, -0.000018f, -0.001997f, + +0.000669f, -0.002745f, +0.000098f, -0.001608f, +0.000638f, +0.000236f, -0.000813f, +0.002517f, -0.000797f, -0.002279f, + +0.000575f, +0.000729f, +0.000586f, -0.000343f, +0.000159f, -0.000835f, -0.000023f, -0.000486f, +0.000391f, -0.000032f, + -0.000387f, +0.000496f, +0.000018f, +0.000836f, -0.000654f, +0.000000f, -0.000329f, +0.000894f, -0.000571f, +0.000125f, + +0.000347f, +0.000075f, -0.000297f, +0.000119f, +0.000022f, +0.000027f, +0.000225f, -0.000230f, -0.000225f, -0.000283f, + +0.000282f, -0.000067f, +0.000027f, -0.000044f, +0.000196f, -0.000117f + } + }, + { + { + -0.002652f, -0.065558f, -0.011734f, -0.000658f, -0.005829f, -0.001869f, -0.000182f, +0.000527f, +0.005120f, -0.001493f, + -0.004381f, -0.000265f, -0.005697f, -0.003855f, +0.011298f, -0.000088f, +0.009009f, -0.007838f, +0.005609f, +0.000506f, + +0.019178f, -0.003087f, -0.004488f, -0.006450f, +0.001739f, -0.006500f, -0.003696f, -0.000768f, +0.000126f, -0.001883f, + -0.002308f, -0.001684f, +0.001482f, +0.006031f, +0.008475f, +0.003184f, +0.002667f, -0.003985f, -0.002072f, -0.000751f, + -0.000338f, -0.001661f, -0.000943f, +0.001022f, -0.000992f, -0.003483f, -0.002002f, -0.000208f, -0.000152f, -0.001187f, + -0.000404f, +0.000649f, +0.001587f, +0.000186f, -0.000259f, +0.000301f, -0.000069f, +0.000491f, +0.001131f, -0.000753f, + +0.000069f, -0.001051f, -0.000006f, +0.000093f, -0.000248f, -0.000070f, +0.000260f, +0.001110f, +0.000165f, -0.000416f, + -0.000071f, -0.000114f, +0.000518f, -0.000123f, -0.000125f, -0.000244f, -0.000153f, +0.000331f, +0.000364f, -0.000099f, + -0.000060f, -0.000148f, +0.000186f, -0.000148f, -0.000003f, +0.000127f, -0.000176f, -0.000043f, -0.000154f, +0.000008f, + +0.000178f, -0.000119f, +0.000043f, +0.000237f, +0.000188f, +0.000047f + }, + { + +0.004757f, +0.191307f, -0.006897f, -0.004699f, +0.002865f, -0.000330f, +0.002268f, +0.001233f, +0.003877f, +0.001009f, + +0.005018f, -0.001494f, +0.000209f, -0.003782f, +0.004604f, +0.000872f, +0.000627f, -0.002820f, -0.016716f, -0.002985f, + -0.001948f, -0.002145f, +0.000143f, +0.003771f, +0.001486f, -0.002529f, +0.000407f, +0.002949f, -0.000599f, -0.003387f, + -0.001293f, -0.001192f, -0.001468f, +0.000835f, +0.004374f, -0.004066f, -0.000304f, +0.003286f, +0.002955f, +0.001185f, + +0.000751f, +0.002113f, -0.001487f, -0.001235f, -0.001358f, -0.001221f, -0.003465f, +0.000847f, +0.001390f, +0.000667f, + +0.000065f, +0.001790f, -0.001030f, -0.001349f, +0.001084f, -0.000408f, +0.000632f, -0.000386f, +0.000814f, -0.000448f, + -0.000906f, +0.000150f, +0.000357f, -0.000090f, -0.000867f, -0.000975f, -0.000521f, -0.000585f, +0.000010f, -0.000357f, + +0.000231f, -0.000368f, +0.000096f, +0.000232f, -0.000260f, -0.000594f, +0.000030f, -0.000245f, +0.000568f, +0.000113f, + +0.000026f, +0.000044f, +0.000090f, +0.000269f, -0.000087f, +0.000354f, +0.000309f, -0.000386f, -0.000023f, +0.000067f, + +0.000039f, +0.000105f, -0.000089f, -0.000117f, -0.000065f, +0.000062f + }, + { + +0.008422f, -0.030570f, -0.068697f, -0.041163f, -0.010868f, -0.000685f, +0.001510f, +0.000196f, -0.000042f, +0.002684f, + -0.003034f, -0.002699f, -0.003492f, -0.000466f, -0.005825f, +0.003426f, +0.004901f, -0.002338f, -0.002879f, +0.003041f, + -0.002681f, +0.000987f, -0.002465f, +0.002849f, -0.000790f, -0.002560f, +0.001009f, +0.004542f, +0.003464f, -0.002168f, + -0.001679f, -0.002400f, -0.004944f, -0.005254f, -0.003705f, -0.000546f, -0.001896f, +0.004213f, +0.000759f, -0.001178f, + +0.000420f, +0.000802f, -0.000490f, -0.000554f, -0.000520f, +0.000163f, -0.001093f, +0.000808f, +0.001600f, +0.000888f, + -0.001115f, -0.000519f, -0.001735f, +0.000052f, -0.000029f, +0.000584f, +0.000132f, +0.001243f, +0.001150f, -0.000087f, + -0.000470f, -0.001080f, -0.000756f, -0.000244f, +0.000166f, +0.000360f, -0.000769f, -0.000294f, -0.000475f, -0.000556f, + +0.000844f, +0.000059f, +0.000232f, +0.000013f, +0.000276f, +0.000235f, +0.000202f, -0.000331f, +0.000159f, +0.000254f, + -0.000012f, -0.000226f, +0.000051f, +0.000024f, -0.000147f, -0.000213f, -0.000027f, -0.000030f, -0.000051f, -0.000151f, + -0.000140f, -0.000080f, -0.000124f, -0.000054f, +0.000190f, -0.000039f + }, + { + -0.000662f, +0.009136f, +0.003753f, -0.001396f, -0.000478f, -0.000059f, +0.000959f, +0.001644f, -0.001979f, +0.001186f, + +0.002113f, -0.001691f, -0.001635f, -0.004419f, +0.007840f, -0.002912f, -0.003614f, +0.009410f, -0.015589f, -0.001528f, + -0.001215f, -0.000443f, +0.008436f, -0.001697f, +0.002733f, +0.004999f, +0.007290f, +0.004019f, +0.002174f, +0.000375f, + -0.000694f, -0.001013f, -0.001593f, +0.001974f, +0.001042f, -0.001019f, -0.001438f, +0.000832f, +0.000327f, +0.000001f, + -0.000786f, -0.002211f, +0.001528f, +0.000665f, +0.001332f, +0.002938f, +0.000009f, +0.000439f, +0.000025f, -0.000879f, + -0.000741f, -0.000114f, -0.000723f, -0.000386f, -0.000794f, -0.000297f, +0.000816f, +0.000583f, -0.000946f, +0.000293f, + +0.000619f, -0.000533f, -0.000290f, -0.000252f, -0.000480f, +0.000032f, +0.000379f, +0.000283f, +0.000058f, +0.000371f, + +0.000359f, +0.000107f, +0.000943f, -0.000397f, -0.000410f, +0.000221f, +0.000257f, -0.000033f, -0.000220f, -0.000235f, + +0.000012f, -0.000436f, -0.000108f, -0.000099f, -0.000207f, +0.000100f, +0.000086f, -0.000149f, -0.000171f, -0.000237f, + -0.000012f, -0.000014f, -0.000139f, +0.000050f, -0.000004f, +0.000036f + }, + { + -0.051672f, -0.141833f, -0.014933f, -0.013450f, -0.004972f, -0.001994f, -0.005677f, +0.001337f, -0.002480f, +0.001440f, + +0.000626f, +0.003761f, +0.000525f, -0.006116f, -0.012049f, +0.001575f, -0.005767f, -0.027712f, -0.010281f, -0.000224f, + -0.004332f, +0.002329f, -0.002453f, -0.001096f, +0.001373f, -0.002249f, -0.003921f, +0.004041f, +0.001187f, +0.002015f, + +0.004388f, -0.001018f, -0.000074f, -0.000483f, -0.000824f, +0.000080f, -0.003447f, +0.000968f, +0.001715f, -0.000068f, + +0.000484f, -0.000671f, +0.000105f, -0.002270f, -0.001274f, +0.000842f, +0.001235f, -0.000426f, -0.001654f, -0.002732f, + -0.001611f, -0.001363f, +0.000452f, -0.000560f, +0.000054f, -0.000089f, +0.000031f, +0.000466f, -0.001078f, +0.000166f, + -0.000029f, -0.000031f, -0.000177f, -0.000534f, -0.000436f, +0.000081f, -0.000200f, -0.000482f, -0.000211f, -0.000403f, + -0.000446f, -0.000636f, +0.000020f, +0.000075f, -0.000131f, -0.000140f, -0.000002f, -0.000156f, +0.000071f, +0.000040f, + +0.000093f, -0.000060f, +0.000081f, -0.000191f, +0.000207f, +0.000242f, +0.000173f, +0.000155f, -0.000152f, -0.000159f, + -0.000162f, +0.000272f, +0.000121f, +0.000098f, +0.000078f, -0.000092f + }, + { + +0.000492f, +0.004518f, -0.004111f, -0.004243f, -0.000521f, +0.000784f, -0.000164f, +0.000342f, +0.000422f, +0.000272f, + -0.002011f, -0.000638f, -0.003050f, +0.002389f, -0.000485f, -0.000421f, +0.000783f, +0.004959f, -0.001654f, -0.020362f, + -0.014174f, +0.003788f, +0.002919f, +0.001573f, +0.000394f, +0.000849f, +0.010592f, +0.006433f, +0.002710f, +0.001558f, + -0.004395f, -0.001673f, +0.000234f, -0.003328f, -0.003411f, -0.001192f, -0.003037f, -0.001164f, +0.001549f, +0.000067f, + +0.000998f, -0.002274f, +0.001961f, -0.000637f, -0.000191f, +0.000305f, -0.000848f, -0.001025f, +0.001161f, +0.002760f, + +0.001094f, -0.000799f, +0.000818f, -0.001057f, -0.000895f, +0.000152f, -0.001559f, +0.000093f, -0.000797f, -0.001461f, + +0.000442f, -0.000122f, -0.000412f, -0.000514f, +0.000892f, -0.000253f, -0.000294f, -0.000134f, +0.000704f, +0.000171f, + -0.000364f, +0.000023f, -0.000197f, +0.000259f, +0.000152f, -0.000256f, -0.000487f, -0.000087f, -0.000031f, -0.000637f, + +0.000035f, -0.000526f, +0.000218f, -0.000097f, -0.000113f, -0.000024f, -0.000091f, -0.000303f, +0.000072f, +0.000046f, + -0.000074f, +0.000180f, -0.000020f, -0.000424f, -0.000087f, +0.000131f + }, + { + -0.062941f, +0.101190f, +0.042811f, -0.011274f, +0.002850f, -0.000136f, +0.000800f, -0.000164f, -0.000747f, +0.002498f, + -0.002262f, +0.000867f, -0.002919f, -0.002162f, -0.006950f, +0.006362f, +0.002730f, -0.001379f, +0.001813f, +0.001787f, + -0.000024f, -0.001883f, -0.004854f, +0.001478f, -0.000914f, -0.002109f, +0.002082f, +0.001692f, +0.004613f, -0.000456f, + +0.001873f, -0.001491f, -0.003469f, -0.000787f, +0.001547f, -0.000605f, +0.000449f, +0.003900f, +0.001411f, -0.001693f, + -0.001275f, -0.001941f, +0.000823f, +0.000565f, -0.002201f, -0.000309f, +0.001190f, +0.000276f, -0.001576f, +0.000056f, + +0.000627f, +0.000551f, +0.000497f, -0.000685f, +0.000653f, -0.002076f, -0.000517f, +0.000401f, -0.000441f, -0.000391f, + +0.000393f, +0.000590f, -0.000570f, -0.000316f, -0.000046f, -0.000693f, -0.000233f, -0.000673f, -0.000514f, -0.000181f, + -0.000247f, +0.000046f, -0.000160f, -0.000534f, +0.000145f, +0.000242f, +0.000388f, -0.000085f, +0.000059f, -0.000248f, + +0.000051f, +0.000580f, +0.000268f, +0.000028f, +0.000124f, +0.000249f, +0.000053f, -0.000256f, +0.000070f, +0.000106f, + +0.000008f, +0.000043f, +0.000171f, +0.000080f, +0.000215f, +0.000306f + }, + { + +0.001057f, +0.012164f, -0.003599f, -0.001023f, +0.000428f, +0.000846f, +0.001102f, -0.001021f, -0.000099f, -0.000131f, + -0.001275f, +0.000833f, +0.002185f, -0.002521f, -0.009958f, -0.009328f, -0.009235f, +0.006489f, -0.008814f, +0.008319f, + +0.010749f, +0.008054f, +0.002646f, +0.001303f, -0.002535f, -0.012859f, -0.011013f, +0.007903f, -0.002734f, -0.005704f, + -0.001505f, +0.001167f, +0.003898f, +0.001643f, -0.000762f, -0.001185f, -0.000944f, +0.001220f, +0.000269f, +0.002647f, + +0.000186f, -0.000352f, -0.002143f, +0.000018f, -0.000407f, -0.000059f, -0.000343f, -0.001149f, +0.001579f, +0.001333f, + -0.000388f, -0.000730f, +0.001065f, -0.000267f, -0.001217f, -0.000541f, -0.000084f, +0.000408f, +0.001172f, +0.000724f, + +0.000044f, -0.000092f, -0.000448f, -0.000456f, -0.000045f, +0.000495f, -0.000041f, -0.000335f, -0.001006f, -0.000699f, + +0.000272f, +0.000261f, +0.000021f, -0.000412f, -0.000045f, -0.000176f, -0.000106f, +0.000321f, +0.000133f, +0.000032f, + -0.000424f, +0.000228f, +0.000476f, +0.000322f, +0.000156f, -0.000360f, +0.000137f, -0.000138f, -0.000173f, +0.000164f, + -0.000254f, -0.000051f, -0.000054f, -0.000084f, +0.000163f, +0.000134f + }, + { + -0.017843f, -0.277277f, -0.029246f, +0.007513f, +0.002543f, +0.002504f, +0.002716f, +0.002594f, +0.000834f, -0.001892f, + +0.001372f, +0.003337f, +0.001582f, +0.000151f, -0.006302f, +0.000213f, -0.000111f, -0.005050f, -0.001431f, +0.004107f, + +0.000006f, -0.001372f, +0.001448f, +0.001837f, +0.003597f, +0.003266f, +0.000144f, +0.001262f, -0.001422f, -0.000233f, + +0.001150f, +0.002001f, +0.000775f, +0.001899f, -0.000797f, -0.001397f, -0.001214f, +0.001614f, -0.002241f, -0.003786f, + -0.008492f, -0.001747f, +0.002329f, +0.000616f, -0.001400f, -0.000739f, +0.000402f, +0.000572f, -0.001992f, -0.001186f, + -0.000848f, -0.000158f, +0.001384f, +0.000368f, +0.000529f, +0.000234f, -0.000648f, -0.000356f, -0.000213f, +0.000551f, + -0.000990f, -0.000637f, -0.000162f, +0.000402f, +0.000392f, +0.000205f, -0.000433f, -0.000381f, +0.000361f, +0.000063f, + +0.000222f, -0.000372f, -0.000057f, -0.000135f, +0.000018f, +0.000040f, +0.000725f, +0.000160f, +0.000354f, -0.000234f, + -0.000289f, +0.000033f, -0.000128f, +0.000069f, -0.000194f, -0.000157f, -0.000335f, -0.000288f, -0.000141f, -0.000265f, + +0.000003f, +0.000099f, +0.000094f, +0.000020f, -0.000269f, +0.000087f + }, + { + -0.000242f, +0.016097f, +0.000181f, +0.002446f, +0.000548f, -0.000669f, -0.011530f, -0.002241f, +0.000838f, +0.002221f, + +0.001750f, +0.001125f, +0.002358f, -0.000308f, +0.001235f, -0.001189f, -0.003218f, -0.005485f, -0.007430f, -0.007477f, + +0.004092f, -0.004380f, -0.001627f, -0.004924f, +0.003659f, +0.001700f, +0.001391f, -0.006828f, -0.000128f, -0.003388f, + -0.000785f, +0.003727f, +0.000825f, +0.000958f, +0.001047f, +0.002499f, +0.000836f, -0.000817f, -0.001133f, +0.000079f, + +0.001042f, -0.001895f, +0.000777f, +0.000680f, -0.000076f, -0.000799f, -0.001139f, -0.000104f, -0.001860f, -0.000007f, + -0.000547f, +0.000095f, +0.000080f, -0.000033f, +0.000414f, +0.000470f, -0.000520f, -0.000066f, -0.000070f, +0.000121f, + -0.000981f, +0.000002f, +0.000485f, +0.000908f, +0.000045f, -0.000117f, -0.000095f, -0.000529f, -0.000490f, -0.000353f, + +0.000164f, -0.000117f, -0.000213f, -0.000002f, +0.000197f, +0.000300f, +0.000122f, +0.000195f, -0.000228f, +0.000295f, + -0.000006f, +0.000126f, +0.000178f, +0.000106f, -0.000139f, -0.000029f, +0.000348f, +0.000300f, +0.000158f, +0.000046f, + -0.000072f, +0.000238f, +0.000067f, +0.000197f, -0.000012f, -0.000006f + }, + { + +0.004101f, -0.112845f, +0.002408f, +0.001477f, -0.000269f, -0.006105f, -0.005956f, -0.005285f, +0.003003f, -0.002990f, + -0.001074f, -0.002030f, +0.001634f, -0.003112f, +0.005024f, -0.000618f, +0.005337f, -0.000938f, +0.000894f, +0.000541f, + +0.006061f, +0.001092f, -0.000870f, +0.000712f, -0.000527f, -0.001029f, +0.000385f, -0.003350f, +0.005860f, +0.000257f, + -0.003906f, -0.001053f, -0.000604f, +0.001574f, +0.001859f, +0.001432f, +0.003132f, -0.001168f, -0.002092f, -0.000677f, + +0.001384f, +0.000576f, +0.001197f, +0.001455f, +0.000994f, -0.000806f, -0.001817f, +0.000446f, -0.000073f, +0.000417f, + -0.000343f, +0.000657f, +0.000605f, +0.000038f, -0.000553f, +0.000707f, -0.001062f, -0.000400f, -0.000165f, +0.000597f, + +0.001578f, +0.001168f, +0.000053f, +0.001259f, +0.000212f, +0.000078f, +0.000397f, -0.000205f, +0.000174f, -0.000169f, + -0.000013f, +0.000219f, -0.000051f, +0.000231f, -0.000070f, +0.000043f, -0.000623f, -0.000358f, -0.000021f, +0.000093f, + -0.000066f, -0.000035f, -0.000025f, +0.000145f, -0.000021f, -0.000175f, -0.000194f, -0.000243f, -0.000330f, +0.000110f, + -0.000026f, -0.000168f, +0.000014f, +0.000055f, -0.000022f, -0.000016f + }, + { + -0.001324f, -0.001771f, +0.004698f, -0.000106f, +0.001052f, +0.000638f, +0.000121f, +0.000761f, -0.000070f, +0.000399f, + -0.001423f, +0.000910f, +0.002843f, +0.025638f, +0.005683f, -0.006114f, -0.003127f, +0.001241f, -0.000209f, -0.002964f, + -0.001946f, -0.000083f, -0.001492f, -0.010171f, -0.009860f, -0.001550f, -0.006162f, -0.000806f, +0.002442f, +0.001658f, + +0.001041f, +0.000684f, -0.001050f, -0.001341f, -0.000896f, -0.001252f, +0.002552f, +0.000388f, +0.000394f, -0.001561f, + -0.001188f, +0.000166f, +0.001019f, +0.000610f, +0.000871f, +0.000500f, -0.000914f, +0.000334f, -0.001167f, -0.002563f, + -0.000457f, -0.000637f, +0.000583f, -0.000712f, +0.000181f, -0.000442f, +0.000714f, -0.000029f, +0.000316f, +0.000380f, + +0.000073f, -0.000420f, +0.000308f, -0.000023f, -0.000119f, +0.000117f, -0.000440f, -0.000348f, -0.000939f, -0.000095f, + -0.000102f, +0.000042f, +0.000143f, +0.000189f, +0.000044f, -0.000078f, -0.000316f, -0.000172f, -0.000107f, -0.000177f, + -0.000114f, -0.000233f, +0.000318f, +0.000231f, +0.000021f, -0.000060f, -0.000264f, +0.000173f, +0.000127f, -0.000175f, + -0.000071f, +0.000052f, +0.000011f, +0.000069f, +0.000077f, +0.000014f + }, + { + +0.002845f, -0.065287f, -0.023732f, -0.022200f, -0.007847f, -0.012297f, -0.005305f, +0.002231f, +0.001676f, -0.004084f, + +0.003220f, -0.005178f, -0.008444f, -0.026691f, -0.001722f, +0.008115f, +0.002558f, -0.001833f, +0.000496f, -0.002087f, + -0.001124f, -0.001564f, -0.000621f, +0.000446f, -0.003574f, -0.001857f, -0.002666f, +0.002127f, -0.002923f, -0.005029f, + -0.002723f, -0.001201f, -0.003063f, -0.000769f, +0.000048f, +0.003077f, -0.000462f, -0.000849f, -0.000590f, +0.001314f, + +0.002898f, +0.000640f, +0.001085f, +0.002409f, +0.000758f, -0.000693f, -0.000296f, -0.000123f, +0.001392f, -0.000793f, + +0.001655f, -0.002256f, -0.001859f, +0.000126f, +0.000975f, +0.002073f, -0.000983f, -0.000704f, -0.000882f, +0.000979f, + +0.000109f, +0.000137f, -0.000215f, +0.000303f, -0.000631f, -0.000244f, -0.000485f, +0.000096f, -0.000342f, -0.000197f, + +0.000077f, -0.000022f, +0.000159f, -0.000348f, -0.000058f, +0.000233f, -0.000072f, -0.000286f, -0.000230f, +0.000263f, + -0.000406f, +0.000138f, +0.000329f, +0.000059f, -0.000215f, -0.000100f, +0.000144f, +0.000033f, +0.000301f, -0.000060f, + +0.000247f, -0.000008f, -0.000205f, -0.000376f, -0.000296f, -0.000151f + }, + { + -0.000391f, +0.001723f, -0.003340f, -0.000620f, -0.002276f, +0.001882f, +0.000054f, +0.000399f, +0.003838f, +0.000976f, + +0.006455f, +0.001677f, +0.000429f, -0.019253f, -0.061641f, +0.009162f, -0.001269f, +0.000775f, +0.000631f, -0.004857f, + -0.008357f, -0.003566f, +0.003318f, -0.001451f, +0.001086f, -0.001323f, -0.006074f, -0.003014f, +0.000594f, -0.002089f, + -0.001062f, +0.002454f, -0.001349f, -0.002718f, -0.001262f, -0.000243f, +0.002450f, -0.001563f, +0.001313f, +0.001577f, + +0.000464f, -0.001344f, +0.000014f, +0.001118f, +0.000843f, -0.001039f, -0.000637f, -0.000385f, +0.000079f, +0.000542f, + -0.000500f, -0.000121f, +0.000693f, +0.000439f, +0.001167f, -0.000460f, -0.001103f, -0.000139f, -0.000351f, +0.000538f, + -0.000680f, -0.000086f, -0.000017f, -0.000523f, -0.000262f, -0.000098f, +0.000219f, +0.000057f, -0.000176f, -0.000725f, + -0.000027f, +0.000580f, +0.000050f, -0.000149f, +0.000149f, +0.000564f, +0.000452f, +0.000260f, -0.000367f, -0.000268f, + -0.000118f, -0.000175f, -0.000090f, +0.000094f, +0.000163f, +0.000327f, -0.000024f, -0.000107f, +0.000050f, +0.000117f, + -0.000074f, -0.000311f, +0.000038f, +0.000160f, +0.000058f, +0.000007f + }, + { + +0.018019f, -0.026436f, -0.003664f, -0.009753f, -0.003034f, -0.003891f, -0.000290f, +0.003138f, +0.000859f, -0.004236f, + -0.002231f, -0.000733f, -0.001856f, +0.017317f, +0.019255f, +0.002154f, +0.002799f, +0.003480f, -0.001076f, -0.001726f, + +0.002644f, +0.002315f, +0.001849f, -0.004137f, +0.001458f, +0.002082f, +0.000342f, +0.001027f, +0.000808f, +0.001278f, + -0.001691f, -0.001056f, +0.004360f, +0.002134f, +0.001358f, -0.000134f, +0.002067f, +0.001066f, +0.001320f, +0.004152f, + -0.002664f, +0.000277f, +0.000126f, +0.000814f, +0.001185f, -0.000098f, -0.000078f, +0.000029f, +0.000208f, -0.001865f, + +0.000064f, -0.001751f, -0.001901f, -0.000320f, +0.000198f, -0.000724f, +0.000001f, +0.000922f, +0.000196f, -0.000539f, + +0.000007f, +0.000530f, +0.000483f, -0.000276f, -0.000189f, +0.000134f, -0.000002f, -0.000789f, +0.000054f, +0.000312f, + -0.000468f, +0.000847f, -0.000044f, -0.000046f, -0.000162f, -0.000472f, -0.000094f, +0.000702f, -0.000163f, -0.000055f, + +0.000436f, +0.000144f, -0.000303f, -0.000000f, -0.000127f, +0.000070f, -0.000043f, -0.000318f, -0.000356f, -0.000025f, + +0.000173f, +0.000149f, +0.000159f, -0.000018f, -0.000038f, +0.000073f + } + }, + { + { + +0.003839f, -0.065261f, -0.001397f, +0.010974f, -0.003229f, +0.000505f, +0.001134f, -0.001269f, +0.001977f, -0.001223f, + +0.000545f, -0.000098f, +0.000562f, +0.002084f, +0.003528f, -0.005820f, +0.006537f, -0.006117f, +0.010682f, +0.002922f, + +0.013852f, -0.005521f, +0.000696f, -0.000481f, +0.002726f, -0.004085f, -0.000794f, +0.001397f, -0.000613f, -0.001334f, + +0.000997f, -0.004158f, +0.002385f, +0.003358f, +0.005295f, +0.000239f, -0.001428f, -0.002340f, +0.000573f, +0.000057f, + +0.000826f, -0.000593f, +0.000173f, +0.000126f, +0.000171f, -0.001296f, +0.000106f, +0.000609f, -0.000090f, -0.000447f, + +0.000303f, +0.000744f, +0.001355f, -0.000750f, -0.000878f, +0.000189f, -0.000278f, +0.000425f, +0.000414f, -0.000667f, + +0.000761f, -0.000498f, -0.000004f, -0.000081f, -0.000136f, +0.000015f, +0.000178f, +0.000516f, -0.000251f, +0.000089f, + -0.000052f, -0.000320f, +0.000250f, -0.000305f, -0.000030f, +0.000120f, -0.000049f, +0.000276f, +0.000073f, -0.000153f, + +0.000006f, -0.000253f, -0.000053f, +0.000041f, +0.000002f, +0.000030f, -0.000176f, -0.000034f, -0.000138f, +0.000085f, + -0.000100f, -0.000032f, -0.000085f, -0.000000f, +0.000056f, +0.000062f + }, + { + -0.004169f, +0.146469f, -0.019017f, -0.005048f, -0.004639f, -0.001332f, +0.001947f, -0.001046f, +0.000563f, -0.004164f, + +0.001697f, +0.001205f, +0.001766f, -0.001864f, +0.001274f, -0.002257f, +0.000219f, +0.005397f, -0.005972f, -0.000593f, + +0.001808f, +0.000014f, -0.000018f, +0.003355f, +0.001016f, -0.000280f, -0.000568f, +0.000229f, -0.000109f, -0.002298f, + +0.000806f, -0.000483f, -0.001372f, -0.000629f, +0.002336f, -0.005214f, -0.000047f, +0.000618f, +0.000334f, +0.000842f, + -0.000835f, +0.002051f, +0.001458f, +0.000870f, -0.000838f, +0.000485f, -0.002034f, +0.001303f, +0.000076f, +0.000036f, + -0.000818f, -0.000131f, -0.001075f, -0.000245f, +0.001373f, -0.000582f, +0.000115f, -0.000333f, +0.000327f, -0.000471f, + +0.000175f, +0.000240f, -0.000175f, +0.000098f, +0.000093f, -0.000235f, +0.000491f, -0.000368f, -0.000010f, -0.000007f, + +0.000654f, -0.000038f, -0.000026f, +0.000119f, +0.000220f, -0.000594f, +0.000104f, +0.000091f, +0.000125f, -0.000258f, + +0.000085f, +0.000193f, -0.000168f, -0.000180f, -0.000150f, +0.000501f, +0.000086f, -0.000193f, +0.000095f, +0.000131f, + +0.000058f, +0.000055f, -0.000115f, -0.000010f, -0.000111f, +0.000088f + }, + { + -0.013682f, +0.048836f, +0.012006f, -0.019695f, +0.006377f, +0.000656f, -0.000657f, -0.000873f, -0.000935f, +0.003498f, + -0.002164f, +0.001073f, +0.004653f, +0.001490f, -0.003854f, +0.001131f, +0.004111f, +0.001312f, +0.000370f, +0.001046f, + -0.003053f, +0.002683f, -0.003995f, +0.001087f, -0.000443f, -0.002960f, +0.001291f, -0.000062f, +0.000441f, +0.000228f, + +0.003450f, +0.000978f, +0.000107f, +0.000639f, +0.000343f, +0.001329f, +0.000205f, +0.003296f, -0.000126f, -0.000040f, + +0.000379f, +0.001023f, +0.000400f, -0.000524f, +0.000209f, +0.000587f, +0.000158f, +0.000411f, +0.000282f, +0.000734f, + +0.000155f, +0.000249f, -0.000589f, +0.000619f, -0.000023f, +0.000250f, -0.001052f, -0.000184f, +0.000302f, +0.000102f, + -0.000345f, -0.000849f, -0.000272f, +0.000539f, +0.000181f, +0.000379f, -0.000778f, +0.000160f, +0.000022f, -0.000445f, + +0.000236f, -0.000326f, +0.000227f, +0.000004f, +0.000031f, -0.000059f, +0.000323f, -0.000176f, +0.000063f, -0.000049f, + +0.000022f, -0.000218f, -0.000199f, -0.000028f, +0.000015f, -0.000230f, +0.000104f, +0.000119f, +0.000031f, -0.000004f, + -0.000192f, -0.000044f, -0.000072f, +0.000046f, +0.000100f, -0.000120f + }, + { + +0.001069f, +0.005479f, -0.000317f, -0.001837f, -0.000159f, -0.000072f, +0.000067f, +0.000399f, -0.001923f, +0.000829f, + +0.001455f, +0.000261f, +0.001614f, -0.005966f, +0.001005f, -0.000947f, +0.001677f, +0.004962f, -0.009276f, +0.004145f, + -0.001605f, -0.002916f, +0.007253f, +0.000354f, +0.002739f, +0.001128f, +0.002627f, -0.000655f, +0.000595f, -0.002531f, + -0.001399f, +0.001063f, +0.000257f, +0.000646f, +0.000934f, -0.000962f, +0.000871f, +0.000629f, -0.000811f, -0.000650f, + -0.000510f, -0.000689f, +0.001335f, -0.000436f, -0.000682f, +0.000494f, -0.000826f, -0.000004f, +0.000032f, -0.000465f, + -0.000409f, -0.000094f, -0.000463f, -0.000085f, -0.000409f, +0.000389f, +0.000335f, -0.000271f, -0.000100f, +0.000002f, + +0.000058f, -0.000302f, +0.000064f, +0.000191f, -0.000129f, -0.000038f, +0.000077f, -0.000046f, +0.000034f, -0.000040f, + +0.000230f, -0.000115f, +0.000697f, -0.000307f, +0.000024f, -0.000035f, -0.000104f, -0.000065f, +0.000027f, -0.000276f, + +0.000165f, -0.000261f, +0.000119f, -0.000155f, -0.000116f, +0.000161f, +0.000038f, -0.000131f, -0.000062f, +0.000037f, + +0.000031f, -0.000040f, -0.000085f, +0.000086f, -0.000060f, -0.000025f + }, + { + +0.037846f, -0.006540f, -0.008373f, -0.006370f, +0.000845f, +0.001657f, -0.000166f, +0.002310f, -0.001050f, +0.000613f, + -0.006545f, +0.003817f, -0.000487f, -0.003832f, -0.003334f, +0.006412f, -0.000633f, -0.014458f, -0.006114f, +0.005011f, + -0.000226f, +0.000903f, -0.000340f, +0.001694f, +0.001695f, +0.002358f, -0.000205f, +0.003290f, -0.001872f, -0.000767f, + +0.001197f, -0.000779f, +0.002391f, +0.002324f, -0.001448f, -0.000368f, +0.000329f, -0.000602f, +0.000072f, -0.000407f, + +0.000275f, -0.000309f, -0.000148f, +0.000231f, +0.000442f, -0.000296f, +0.000793f, -0.000582f, -0.000602f, +0.000754f, + -0.000192f, -0.001695f, +0.001688f, +0.001101f, -0.000417f, -0.000437f, +0.000469f, +0.000981f, -0.000818f, +0.000231f, + +0.000189f, +0.000168f, -0.000314f, -0.000291f, -0.000036f, -0.000114f, -0.000241f, +0.000230f, -0.000057f, -0.000111f, + +0.000073f, +0.000032f, +0.000225f, -0.000124f, +0.000009f, +0.000059f, +0.000105f, +0.000163f, +0.000005f, -0.000064f, + -0.000034f, -0.000216f, -0.000019f, +0.000090f, +0.000073f, +0.000020f, +0.000144f, +0.000094f, +0.000164f, +0.000036f, + -0.000143f, +0.000081f, -0.000040f, +0.000031f, -0.000042f, -0.000088f + }, + { + +0.000245f, +0.004007f, +0.001995f, -0.001270f, -0.000181f, +0.000424f, -0.000804f, -0.000383f, -0.000898f, +0.001020f, + -0.000532f, +0.000061f, -0.000903f, +0.005530f, -0.002502f, +0.003900f, +0.002643f, +0.004087f, -0.005500f, -0.009557f, + -0.000300f, +0.001210f, -0.002683f, +0.000164f, +0.002182f, -0.004044f, +0.004561f, -0.004301f, -0.002100f, +0.000077f, + -0.001024f, -0.001109f, +0.001255f, +0.001222f, -0.001120f, +0.000863f, -0.001474f, -0.001688f, +0.000458f, -0.000304f, + +0.000459f, -0.001585f, +0.001532f, -0.000745f, +0.000753f, +0.000792f, -0.000773f, -0.000881f, -0.000329f, +0.000929f, + +0.000068f, -0.000657f, +0.000357f, -0.000508f, -0.000529f, +0.001155f, -0.000974f, +0.000124f, -0.000084f, -0.000775f, + +0.000503f, -0.000740f, +0.000472f, -0.000107f, +0.000500f, -0.000144f, +0.000052f, +0.000016f, +0.000314f, +0.000254f, + -0.000166f, +0.000166f, -0.000265f, -0.000010f, -0.000396f, -0.000092f, -0.000023f, -0.000139f, +0.000275f, -0.000362f, + +0.000044f, -0.000113f, +0.000247f, +0.000001f, -0.000038f, +0.000060f, +0.000293f, -0.000111f, +0.000057f, -0.000051f, + -0.000083f, +0.000054f, -0.000012f, -0.000091f, -0.000010f, +0.000067f + }, + { + +0.027632f, +0.141924f, -0.006869f, -0.004110f, +0.001276f, -0.000949f, -0.000060f, +0.000953f, -0.000318f, +0.001271f, + -0.001923f, +0.000593f, -0.002157f, +0.001985f, -0.002886f, +0.002316f, -0.001060f, -0.000498f, +0.001368f, +0.000505f, + -0.000221f, -0.000804f, -0.001623f, +0.001476f, -0.000099f, -0.000200f, -0.000137f, -0.001396f, +0.000600f, -0.000951f, + +0.000827f, -0.002469f, +0.000708f, +0.000859f, +0.001011f, -0.001710f, -0.001656f, +0.000880f, +0.000147f, -0.001153f, + -0.001059f, +0.001086f, +0.001668f, -0.000887f, -0.000427f, +0.000054f, +0.000013f, +0.000506f, +0.000249f, +0.000452f, + +0.000415f, -0.000633f, +0.000292f, +0.000286f, -0.000084f, -0.000697f, +0.000333f, -0.000023f, -0.000084f, -0.000394f, + -0.000498f, +0.000308f, -0.000354f, -0.000179f, +0.000184f, -0.000425f, +0.000205f, -0.000069f, +0.000168f, +0.000089f, + -0.000133f, +0.000080f, -0.000085f, -0.000291f, +0.000064f, -0.000168f, -0.000009f, -0.000035f, +0.000129f, -0.000001f, + +0.000193f, +0.000067f, -0.000063f, -0.000097f, +0.000217f, -0.000220f, -0.000105f, +0.000019f, +0.000193f, +0.000091f, + -0.000145f, +0.000026f, +0.000036f, +0.000049f, +0.000056f, +0.000104f + }, + { + -0.000818f, +0.000326f, -0.002478f, +0.001545f, +0.000003f, +0.000465f, +0.000588f, -0.000849f, +0.000597f, +0.000032f, + -0.000990f, -0.001307f, -0.000467f, +0.000513f, -0.003504f, -0.002989f, -0.006222f, +0.007001f, -0.001592f, +0.003532f, + +0.002756f, -0.000872f, +0.003400f, +0.003197f, +0.001603f, +0.002135f, -0.003942f, +0.009141f, -0.001430f, +0.001320f, + +0.001707f, -0.001123f, +0.000022f, +0.001627f, -0.001198f, +0.001999f, -0.000527f, +0.000577f, -0.001408f, +0.000992f, + -0.000365f, +0.000412f, -0.000744f, +0.000301f, +0.000508f, -0.000629f, -0.000103f, +0.000175f, +0.000654f, -0.000280f, + +0.000107f, -0.000614f, +0.000526f, -0.000703f, +0.000352f, +0.000302f, -0.000507f, -0.000044f, +0.000348f, -0.000122f, + -0.000405f, -0.000248f, +0.000205f, +0.000492f, +0.000001f, +0.000120f, -0.000526f, +0.000238f, +0.000082f, +0.000289f, + +0.000028f, -0.000225f, -0.000109f, -0.000371f, +0.000069f, +0.000285f, -0.000314f, +0.000091f, -0.000077f, +0.000064f, + -0.000214f, +0.000014f, +0.000077f, -0.000069f, +0.000057f, -0.000234f, +0.000095f, -0.000047f, -0.000128f, +0.000002f, + -0.000080f, -0.000042f, +0.000050f, -0.000012f, +0.000063f, +0.000110f + }, + { + +0.027157f, -0.158117f, +0.001380f, +0.000063f, -0.003632f, -0.000401f, -0.001325f, +0.000830f, -0.001525f, -0.002826f, + +0.000587f, +0.003139f, +0.000019f, +0.002991f, +0.001051f, -0.000166f, +0.004952f, +0.000802f, -0.001998f, +0.000791f, + -0.001436f, -0.001691f, +0.001507f, +0.001267f, +0.000477f, +0.001186f, -0.000722f, +0.001830f, +0.000265f, +0.001610f, + -0.001473f, +0.000846f, +0.000979f, -0.000480f, -0.001799f, -0.001017f, -0.002012f, +0.002594f, +0.000844f, -0.000687f, + -0.002231f, +0.003120f, +0.000513f, -0.000659f, +0.000036f, +0.000927f, +0.001225f, +0.000532f, -0.001393f, +0.000130f, + +0.000536f, +0.000657f, +0.001029f, -0.000525f, +0.000699f, +0.000374f, -0.000266f, +0.000316f, +0.000727f, +0.000947f, + -0.000649f, -0.000021f, -0.000163f, +0.000067f, +0.000147f, +0.000021f, -0.000009f, +0.000101f, -0.000003f, +0.000134f, + +0.000632f, +0.000157f, -0.000236f, -0.000323f, +0.000052f, +0.000271f, +0.000131f, -0.000229f, +0.000073f, +0.000106f, + -0.000175f, +0.000024f, -0.000097f, +0.000097f, -0.000071f, +0.000236f, -0.000080f, -0.000103f, -0.000017f, -0.000033f, + +0.000141f, +0.000006f, +0.000024f, +0.000009f, -0.000066f, -0.000012f + }, + { + +0.001020f, +0.003254f, -0.008058f, -0.002846f, -0.004291f, +0.000517f, -0.003582f, -0.000413f, -0.000880f, +0.002395f, + +0.001816f, +0.000338f, -0.000630f, -0.004763f, +0.003451f, -0.001647f, -0.002765f, -0.002001f, -0.004718f, -0.005013f, + +0.006531f, -0.004446f, -0.001369f, -0.003906f, +0.002510f, -0.000950f, +0.001943f, -0.003503f, +0.002092f, -0.001647f, + -0.000855f, -0.001203f, -0.000671f, -0.001257f, +0.000457f, +0.000701f, -0.002280f, +0.000378f, -0.000076f, -0.001608f, + +0.000543f, -0.000103f, +0.000826f, -0.000207f, -0.000821f, -0.000981f, -0.000480f, +0.000692f, -0.002277f, -0.000517f, + -0.000662f, +0.000513f, +0.000361f, +0.000571f, +0.000982f, +0.000872f, -0.000470f, -0.000177f, -0.000227f, +0.000362f, + -0.000246f, +0.000055f, -0.000060f, +0.000374f, +0.000188f, +0.000034f, -0.000262f, -0.000237f, +0.000181f, +0.000330f, + -0.000004f, +0.000109f, +0.000185f, -0.000152f, +0.000047f, -0.000028f, +0.000007f, +0.000117f, -0.000051f, +0.000321f, + -0.000056f, +0.000093f, -0.000093f, +0.000164f, -0.000074f, -0.000087f, +0.000090f, -0.000010f, -0.000005f, -0.000179f, + -0.000074f, -0.000056f, -0.000110f, +0.000106f, -0.000094f, -0.000056f + }, + { + -0.002072f, -0.091008f, +0.002892f, -0.004628f, +0.002823f, -0.000017f, +0.013349f, -0.001578f, +0.002303f, -0.005028f, + +0.000986f, -0.002238f, -0.000565f, -0.002457f, +0.003420f, +0.000438f, +0.000057f, -0.006502f, +0.000293f, -0.000234f, + +0.003494f, -0.001193f, -0.000674f, +0.000579f, -0.000006f, +0.000214f, +0.001707f, -0.003853f, +0.003205f, -0.000354f, + -0.000313f, +0.003450f, +0.000971f, +0.000193f, -0.000774f, +0.000375f, +0.000635f, -0.000736f, +0.001727f, -0.001077f, + +0.000277f, +0.000215f, +0.000900f, +0.001606f, +0.001638f, +0.000985f, -0.000734f, +0.000618f, -0.000234f, +0.000285f, + -0.000544f, +0.000341f, +0.000562f, +0.000353f, -0.000917f, +0.000723f, -0.000256f, -0.000066f, -0.000074f, +0.000119f, + +0.000308f, +0.000146f, -0.000807f, +0.000389f, -0.000399f, -0.000008f, +0.000331f, -0.000019f, +0.000030f, -0.000234f, + -0.000151f, +0.000049f, +0.000069f, -0.000037f, -0.000194f, +0.000094f, -0.000281f, +0.000178f, -0.000119f, +0.000068f, + -0.000033f, +0.000040f, +0.000146f, -0.000036f, -0.000036f, -0.000204f, -0.000017f, -0.000094f, -0.000107f, +0.000205f, + +0.000009f, -0.000010f, +0.000047f, +0.000045f, -0.000079f, +0.000047f + }, + { + +0.001396f, -0.006326f, -0.000455f, +0.003551f, +0.000308f, +0.000098f, +0.001600f, +0.000812f, +0.000395f, -0.000040f, + -0.002840f, -0.001009f, -0.009667f, +0.006910f, +0.007048f, -0.000828f, +0.000198f, -0.000960f, +0.001653f, -0.000343f, + -0.002206f, -0.001014f, -0.000668f, -0.000789f, -0.002519f, +0.000662f, +0.001099f, +0.002432f, +0.003281f, -0.000152f, + +0.001945f, +0.001523f, +0.001763f, -0.001465f, -0.000315f, -0.001837f, +0.000512f, -0.001811f, +0.000518f, -0.000465f, + +0.000484f, -0.000248f, -0.000366f, +0.000271f, -0.000270f, +0.000071f, +0.000576f, +0.000618f, +0.000211f, +0.000069f, + +0.000655f, -0.000243f, -0.000042f, -0.001069f, +0.000270f, -0.000354f, +0.000709f, +0.000241f, +0.000531f, +0.000024f, + -0.000391f, +0.000359f, +0.000170f, +0.000035f, -0.000312f, +0.000140f, -0.000043f, -0.000038f, -0.000072f, +0.000157f, + +0.000034f, +0.000188f, +0.000117f, -0.000114f, +0.000014f, +0.000163f, -0.000167f, +0.000136f, -0.000068f, -0.000143f, + -0.000084f, -0.000237f, +0.000206f, +0.000078f, -0.000014f, +0.000181f, -0.000056f, +0.000179f, -0.000015f, -0.000191f, + -0.000002f, -0.000044f, -0.000037f, +0.000144f, -0.000012f, -0.000030f + }, + { + +0.005058f, -0.033415f, +0.011270f, -0.002712f, -0.000549f, -0.004645f, -0.000126f, +0.002076f, +0.001849f, -0.006186f, + +0.002058f, -0.000169f, +0.007449f, -0.001332f, -0.001547f, +0.002325f, +0.002244f, -0.001255f, +0.002501f, -0.001645f, + +0.002375f, -0.000063f, +0.000732f, +0.002123f, -0.001993f, -0.002178f, +0.000084f, +0.003029f, -0.002168f, -0.001456f, + -0.002622f, +0.000970f, -0.001308f, -0.001837f, -0.001272f, +0.002193f, +0.000189f, -0.001151f, -0.001314f, -0.000652f, + +0.002454f, +0.001624f, -0.001551f, -0.000582f, -0.000030f, -0.000048f, -0.000680f, +0.000246f, +0.000834f, -0.000249f, + +0.001011f, -0.001165f, +0.000138f, -0.000224f, +0.000078f, +0.000299f, +0.000037f, +0.000922f, +0.000155f, +0.000632f, + -0.000057f, +0.000133f, -0.000596f, -0.000299f, -0.000019f, -0.000133f, -0.000435f, +0.000579f, -0.000369f, -0.000108f, + +0.000428f, -0.000060f, -0.000084f, -0.000454f, -0.000040f, +0.000196f, +0.000252f, -0.000139f, -0.000110f, +0.000147f, + -0.000045f, +0.000197f, -0.000055f, -0.000074f, -0.000111f, +0.000173f, +0.000138f, -0.000192f, +0.000095f, -0.000127f, + +0.000052f, -0.000088f, -0.000121f, -0.000058f, -0.000078f, +0.000019f + }, + { + +0.000248f, +0.002328f, -0.004935f, +0.000670f, -0.000652f, +0.001099f, +0.000214f, -0.000499f, +0.002372f, -0.000129f, + +0.003261f, -0.000986f, -0.003459f, +0.026860f, +0.009168f, +0.004359f, -0.010263f, -0.000238f, +0.000397f, -0.001097f, + -0.006501f, -0.000782f, +0.001972f, -0.001199f, +0.000910f, -0.000724f, -0.000072f, +0.001165f, +0.004981f, +0.000064f, + -0.001450f, +0.001120f, -0.001093f, -0.001092f, +0.000786f, +0.000246f, +0.002186f, -0.002356f, +0.000855f, +0.000832f, + +0.000413f, -0.000756f, +0.000631f, -0.000129f, +0.000401f, +0.000775f, +0.000804f, +0.000374f, -0.000207f, +0.000570f, + -0.000440f, +0.000111f, -0.000054f, +0.000322f, +0.001451f, -0.000425f, -0.000744f, +0.000381f, -0.000519f, +0.000590f, + -0.001124f, -0.000225f, -0.000092f, +0.000004f, +0.000124f, +0.000276f, +0.000411f, -0.000176f, -0.000002f, -0.000182f, + +0.000058f, +0.000150f, +0.000119f, +0.000092f, -0.000387f, -0.000034f, +0.000568f, +0.000101f, +0.000143f, +0.000043f, + -0.000261f, -0.000001f, -0.000123f, +0.000021f, +0.000049f, +0.000189f, -0.000021f, -0.000189f, +0.000107f, -0.000005f, + -0.000121f, -0.000182f, +0.000157f, +0.000049f, -0.000085f, +0.000007f + }, + { + -0.004649f, -0.047338f, +0.006990f, -0.005321f, -0.004887f, -0.002004f, +0.004652f, -0.002510f, -0.002215f, -0.000733f, + +0.000272f, -0.001184f, -0.001998f, -0.003038f, -0.017307f, +0.004537f, +0.005744f, +0.000216f, -0.002454f, -0.001704f, + +0.001711f, +0.000396f, +0.001256f, -0.003035f, +0.002630f, +0.000802f, -0.001064f, -0.001939f, -0.002320f, +0.000723f, + -0.000774f, -0.001942f, +0.000338f, +0.000559f, +0.000425f, -0.001663f, +0.000583f, -0.000495f, -0.000423f, +0.001388f, + -0.003269f, -0.000118f, -0.000383f, +0.000298f, +0.001093f, +0.001209f, +0.000303f, -0.000796f, -0.000222f, -0.000737f, + +0.000022f, -0.000866f, +0.000230f, +0.001745f, +0.000225f, -0.000323f, +0.000149f, -0.000166f, -0.000154f, -0.000293f, + +0.000056f, +0.000115f, +0.000162f, +0.000119f, +0.000026f, +0.000086f, -0.000043f, -0.000583f, -0.000120f, +0.000264f, + -0.000349f, +0.000535f, -0.000414f, -0.000103f, -0.000014f, -0.000109f, +0.000012f, +0.000224f, +0.000134f, +0.000034f, + +0.000038f, +0.000063f, -0.000079f, +0.000032f, -0.000148f, +0.000058f, +0.000018f, -0.000285f, +0.000007f, +0.000118f, + -0.000006f, +0.000042f, +0.000083f, -0.000056f, -0.000050f, -0.000003f + } + }, + { + { + -0.001741f, -0.044785f, -0.000431f, +0.003188f, +0.001784f, +0.001020f, -0.000647f, -0.000638f, -0.000164f, +0.001948f, + -0.000840f, -0.001193f, +0.002658f, +0.000278f, +0.000855f, -0.002555f, -0.002276f, +0.001836f, +0.006476f, +0.006087f, + +0.005539f, +0.000927f, +0.002155f, +0.003055f, +0.001139f, +0.000644f, -0.001244f, +0.000262f, +0.000515f, -0.002202f, + -0.001386f, +0.000367f, +0.003927f, -0.000763f, +0.002432f, -0.000678f, -0.000673f, -0.003678f, +0.000700f, +0.000148f, + +0.000784f, +0.000404f, -0.000141f, -0.000736f, +0.000535f, -0.000044f, -0.000554f, -0.000019f, +0.000000f, -0.000833f, + +0.000934f, +0.001257f, +0.000063f, -0.000086f, -0.000484f, -0.000126f, -0.000459f, +0.000041f, +0.000077f, +0.000186f, + +0.000039f, +0.000182f, +0.000186f, -0.000207f, +0.000026f, +0.000187f, +0.000061f, +0.000112f, -0.000038f, +0.000341f, + -0.000175f, -0.000240f, -0.000002f, -0.000226f, -0.000041f, +0.000020f, +0.000058f, +0.000068f, +0.000092f, -0.000058f, + -0.000144f, -0.000083f, +0.000045f, +0.000271f, +0.000118f, -0.000137f, -0.000155f, -0.000157f, +0.000029f, -0.000075f, + -0.000081f, +0.000074f, -0.000100f, -0.000061f, -0.000040f, -0.000031f + }, + { + +0.007179f, +0.094494f, +0.014308f, -0.013822f, -0.003837f, -0.001176f, -0.000112f, -0.001835f, -0.001909f, -0.001318f, + -0.002097f, +0.002147f, +0.000731f, -0.000610f, +0.000538f, -0.003924f, -0.001967f, -0.000902f, +0.007147f, -0.001686f, + +0.001012f, +0.000191f, -0.001068f, +0.000984f, +0.002257f, +0.000328f, -0.000873f, -0.000912f, -0.000087f, -0.000604f, + -0.000361f, +0.000186f, -0.000221f, -0.001078f, -0.001031f, -0.001735f, +0.001735f, -0.001524f, -0.001772f, -0.000017f, + +0.000362f, +0.000965f, +0.002743f, +0.000337f, +0.000098f, -0.000261f, -0.000119f, +0.000096f, -0.000704f, -0.000024f, + -0.000380f, -0.000424f, -0.000095f, +0.000299f, +0.000674f, -0.000080f, -0.000469f, +0.000593f, -0.000141f, -0.000254f, + +0.000561f, +0.000048f, +0.000033f, -0.000071f, +0.000126f, -0.000187f, +0.000007f, +0.000200f, -0.000055f, +0.000199f, + +0.000397f, -0.000095f, +0.000061f, +0.000014f, -0.000154f, -0.000221f, +0.000055f, +0.000131f, -0.000192f, -0.000121f, + +0.000151f, +0.000096f, -0.000142f, -0.000174f, +0.000144f, +0.000159f, -0.000052f, +0.000122f, -0.000006f, +0.000164f, + +0.000047f, -0.000115f, +0.000073f, -0.000053f, -0.000001f, +0.000046f + }, + { + +0.013096f, +0.045993f, -0.011551f, +0.005121f, -0.003019f, +0.001171f, -0.000779f, -0.000495f, -0.000947f, -0.000025f, + -0.001382f, +0.001007f, +0.004086f, -0.000147f, +0.001024f, -0.000738f, +0.002367f, -0.000788f, +0.001253f, +0.001486f, + -0.004479f, +0.000041f, -0.001711f, -0.001233f, -0.000320f, -0.000538f, +0.001435f, +0.000145f, -0.000227f, -0.000365f, + +0.002532f, +0.000635f, +0.003130f, +0.000416f, +0.002464f, -0.001018f, +0.002412f, +0.001386f, -0.000293f, -0.000266f, + -0.000365f, +0.001459f, +0.000446f, +0.000102f, +0.000668f, -0.000683f, +0.000867f, +0.000033f, +0.000417f, +0.001024f, + +0.000203f, -0.000171f, +0.000430f, -0.000225f, -0.000105f, +0.000462f, -0.000477f, -0.000346f, +0.000323f, -0.000139f, + -0.000092f, -0.000036f, +0.000066f, +0.000290f, +0.000106f, +0.000194f, -0.000124f, +0.000038f, +0.000042f, +0.000057f, + +0.000051f, -0.000265f, -0.000033f, +0.000299f, +0.000121f, -0.000017f, +0.000044f, -0.000016f, -0.000083f, -0.000224f, + +0.000013f, -0.000029f, -0.000168f, -0.000022f, +0.000040f, -0.000134f, -0.000028f, -0.000006f, -0.000039f, +0.000016f, + -0.000117f, -0.000057f, +0.000074f, +0.000086f, -0.000039f, -0.000017f + }, + { + -0.000781f, +0.005294f, +0.001256f, -0.000710f, +0.000044f, -0.000651f, -0.000284f, -0.000047f, -0.000599f, -0.000021f, + +0.001314f, -0.000563f, +0.002016f, +0.001979f, -0.010265f, -0.002031f, +0.004504f, -0.000401f, -0.004837f, +0.000547f, + +0.000969f, -0.003794f, +0.003316f, +0.004216f, +0.001532f, -0.000137f, -0.000386f, -0.000133f, +0.000522f, -0.003508f, + -0.001538f, +0.002012f, +0.000978f, +0.000414f, -0.000803f, -0.000489f, +0.002147f, +0.000072f, -0.001163f, -0.001093f, + -0.000012f, +0.000599f, +0.000374f, -0.000384f, -0.001198f, -0.000230f, +0.000336f, -0.000360f, -0.000334f, +0.000047f, + +0.000030f, -0.000433f, +0.000045f, +0.000277f, +0.000150f, -0.000041f, +0.000202f, -0.000594f, +0.000241f, -0.000132f, + -0.000405f, +0.000063f, +0.000325f, +0.000047f, -0.000043f, +0.000087f, +0.000046f, +0.000095f, -0.000040f, +0.000120f, + -0.000232f, -0.000110f, +0.000043f, +0.000189f, +0.000048f, -0.000099f, +0.000036f, +0.000120f, +0.000053f, -0.000096f, + -0.000083f, -0.000006f, +0.000115f, -0.000118f, +0.000028f, +0.000024f, -0.000039f, +0.000021f, +0.000088f, +0.000073f, + -0.000056f, +0.000029f, +0.000123f, +0.000103f, -0.000072f, +0.000064f + }, + { + -0.017977f, +0.062642f, +0.003276f, -0.006835f, +0.001186f, +0.000648f, +0.001142f, +0.000134f, +0.000539f, -0.000911f, + -0.000439f, -0.000438f, -0.000830f, -0.004671f, -0.001120f, +0.005999f, -0.001394f, -0.011363f, -0.002789f, +0.002321f, + +0.000757f, +0.000530f, +0.000181f, +0.000208f, +0.001388f, +0.001228f, +0.002621f, +0.001330f, -0.002377f, -0.001317f, + -0.001201f, +0.000776f, +0.001745f, +0.002798f, -0.001058f, -0.000629f, +0.000178f, -0.002333f, +0.000189f, +0.000102f, + +0.000002f, +0.000316f, -0.001709f, +0.001183f, +0.000150f, -0.000299f, +0.000720f, +0.000443f, -0.001015f, +0.001450f, + -0.000088f, -0.000328f, +0.000704f, +0.000872f, -0.000435f, +0.000070f, +0.000383f, -0.000244f, -0.000543f, +0.000172f, + +0.000002f, +0.000267f, -0.000246f, -0.000328f, +0.000045f, -0.000087f, -0.000161f, +0.000317f, -0.000153f, +0.000041f, + +0.000054f, -0.000086f, -0.000197f, +0.000025f, +0.000099f, +0.000040f, +0.000141f, +0.000315f, -0.000002f, -0.000097f, + -0.000014f, -0.000062f, +0.000049f, +0.000041f, -0.000189f, +0.000075f, +0.000034f, +0.000087f, +0.000124f, -0.000076f, + +0.000037f, -0.000132f, -0.000140f, -0.000001f, -0.000123f, -0.000019f + }, + { + -0.000731f, +0.002680f, +0.004533f, +0.000403f, -0.000564f, -0.000154f, -0.000453f, -0.000028f, -0.000912f, +0.000105f, + -0.000001f, -0.000235f, -0.000189f, +0.000984f, -0.002429f, +0.002606f, +0.001652f, +0.002837f, +0.005157f, -0.011546f, + -0.002233f, -0.001759f, -0.001150f, -0.000861f, +0.001630f, -0.005086f, +0.003539f, -0.005243f, -0.001279f, -0.000414f, + +0.001246f, -0.000033f, +0.000616f, +0.001568f, +0.000007f, +0.000022f, -0.000147f, -0.000761f, +0.000681f, -0.000477f, + +0.000481f, +0.000376f, +0.000059f, -0.000373f, +0.000359f, +0.000499f, -0.000551f, -0.001387f, +0.000051f, -0.000093f, + +0.000410f, -0.000047f, -0.000761f, +0.000224f, -0.000013f, +0.000561f, -0.000234f, -0.000309f, +0.000051f, -0.000265f, + -0.000204f, +0.000020f, +0.000093f, +0.000027f, +0.000253f, +0.000059f, +0.000006f, +0.000102f, +0.000016f, -0.000021f, + +0.000095f, +0.000165f, +0.000109f, +0.000025f, -0.000439f, -0.000065f, +0.000390f, +0.000101f, +0.000142f, -0.000121f, + -0.000192f, +0.000248f, -0.000025f, -0.000059f, +0.000029f, +0.000099f, +0.000223f, -0.000023f, +0.000012f, -0.000061f, + -0.000074f, -0.000093f, +0.000057f, +0.000116f, +0.000008f, -0.000093f + }, + { + +0.004219f, +0.152101f, +0.005273f, -0.000510f, +0.001043f, -0.000167f, -0.000280f, +0.001183f, +0.000221f, -0.002366f, + -0.000504f, +0.000634f, +0.001326f, -0.000336f, +0.000341f, -0.001366f, -0.000884f, +0.000911f, +0.000188f, -0.001057f, + -0.001287f, -0.000646f, +0.000967f, -0.000263f, +0.000266f, -0.000140f, +0.000150f, -0.001875f, -0.001202f, -0.001027f, + +0.000288f, -0.000156f, +0.000183f, +0.001166f, -0.000692f, -0.001754f, +0.000592f, -0.000417f, -0.001560f, +0.000270f, + -0.000564f, +0.001986f, -0.000445f, -0.000631f, +0.000573f, -0.000487f, +0.000231f, -0.000205f, +0.000204f, +0.000358f, + +0.000191f, -0.000916f, -0.000588f, +0.000660f, +0.000214f, +0.000181f, -0.000130f, -0.000114f, +0.000545f, +0.000044f, + -0.000735f, +0.000097f, +0.000082f, -0.000334f, -0.000069f, -0.000090f, +0.000281f, +0.000194f, +0.000047f, +0.000094f, + -0.000090f, -0.000341f, +0.000255f, -0.000012f, -0.000004f, -0.000165f, -0.000005f, +0.000187f, -0.000114f, +0.000219f, + +0.000175f, -0.000146f, +0.000090f, +0.000016f, -0.000122f, -0.000204f, -0.000072f, +0.000196f, +0.000111f, +0.000001f, + -0.000036f, +0.000104f, -0.000028f, -0.000024f, +0.000030f, +0.000036f + }, + { + -0.000700f, -0.004634f, +0.004527f, -0.000632f, +0.000840f, +0.000002f, -0.000075f, +0.000311f, -0.000193f, +0.000354f, + -0.001174f, -0.001459f, -0.000617f, -0.000793f, -0.001680f, -0.004121f, +0.000646f, -0.001675f, +0.003945f, +0.000589f, + -0.000403f, -0.002946f, +0.002251f, +0.001530f, -0.001141f, +0.004410f, +0.001215f, +0.004402f, -0.000244f, +0.002061f, + -0.000484f, -0.000267f, -0.000433f, -0.000079f, -0.001052f, +0.002186f, -0.000167f, -0.000208f, +0.000264f, +0.000640f, + -0.000065f, -0.000462f, -0.000007f, +0.000020f, +0.000223f, -0.000358f, +0.000466f, +0.000418f, -0.000637f, +0.000057f, + +0.000790f, -0.000596f, -0.000233f, +0.000245f, +0.001140f, +0.000246f, -0.000453f, -0.000147f, -0.000363f, +0.000167f, + -0.000052f, +0.000004f, +0.000633f, +0.000605f, -0.000076f, -0.000119f, -0.000428f, +0.000211f, +0.000385f, +0.000364f, + -0.000038f, -0.000177f, -0.000458f, -0.000057f, +0.000310f, +0.000122f, -0.000093f, +0.000161f, +0.000028f, +0.000032f, + +0.000021f, -0.000266f, -0.000002f, -0.000169f, +0.000022f, -0.000083f, +0.000047f, +0.000023f, -0.000020f, -0.000044f, + +0.000077f, -0.000052f, -0.000017f, +0.000016f, -0.000028f, +0.000073f + }, + { + -0.026819f, -0.071304f, -0.008270f, -0.004000f, -0.000684f, +0.000007f, -0.001408f, -0.001227f, -0.002610f, +0.000854f, + +0.000065f, -0.001427f, +0.001464f, +0.000903f, +0.001615f, +0.000794f, +0.004245f, +0.002170f, -0.000688f, -0.001930f, + -0.001470f, -0.000629f, +0.000544f, +0.000630f, +0.000842f, +0.000546f, -0.000751f, +0.001947f, +0.002550f, +0.001128f, + -0.001468f, +0.000676f, +0.000538f, -0.001005f, -0.002265f, +0.000120f, -0.002019f, +0.002248f, +0.000535f, +0.001147f, + -0.000152f, +0.002660f, +0.000164f, +0.000067f, +0.000437f, +0.001520f, +0.000345f, -0.000753f, +0.000218f, -0.000033f, + +0.001203f, +0.000332f, -0.000185f, +0.000748f, -0.000099f, +0.000347f, +0.000020f, +0.000326f, +0.001094f, +0.000302f, + -0.000041f, +0.000237f, -0.000290f, +0.000110f, -0.000393f, -0.000286f, +0.000121f, +0.000515f, -0.000282f, +0.000318f, + +0.000255f, +0.000193f, -0.000083f, -0.000194f, +0.000127f, +0.000248f, -0.000375f, +0.000205f, -0.000189f, +0.000142f, + +0.000065f, -0.000190f, -0.000162f, -0.000116f, +0.000009f, +0.000073f, -0.000045f, +0.000066f, +0.000111f, +0.000112f, + +0.000039f, -0.000048f, -0.000064f, +0.000005f, +0.000028f, -0.000031f + }, + { + -0.001158f, -0.000132f, +0.003906f, -0.014033f, -0.000880f, -0.000408f, +0.003687f, -0.000949f, -0.000576f, +0.001298f, + +0.003105f, -0.001396f, -0.001737f, -0.000096f, +0.003996f, -0.004833f, -0.003147f, -0.002070f, -0.003379f, -0.001076f, + +0.000861f, -0.000500f, -0.000653f, -0.000462f, +0.001313f, -0.000415f, -0.000885f, +0.001072f, +0.000693f, -0.000398f, + -0.001228f, -0.001860f, -0.000925f, -0.000392f, -0.000128f, +0.000719f, -0.001132f, +0.001035f, +0.000483f, -0.000705f, + -0.000188f, +0.001599f, -0.000009f, -0.000690f, -0.000118f, -0.000795f, +0.000216f, -0.000373f, -0.001200f, -0.000735f, + +0.000294f, +0.000224f, +0.000966f, +0.000503f, +0.000266f, -0.000041f, +0.000134f, +0.000040f, -0.000131f, +0.000370f, + +0.000292f, +0.000011f, -0.000347f, -0.000232f, -0.000034f, -0.000254f, -0.000060f, +0.000233f, +0.000517f, +0.000352f, + +0.000022f, +0.000230f, -0.000103f, +0.000118f, -0.000142f, -0.000148f, -0.000100f, -0.000003f, +0.000027f, +0.000062f, + -0.000144f, +0.000072f, +0.000056f, +0.000073f, +0.000097f, +0.000024f, -0.000090f, -0.000043f, -0.000082f, -0.000058f, + +0.000059f, -0.000117f, -0.000036f, +0.000038f, +0.000006f, +0.000083f + }, + { + -0.001760f, -0.077741f, -0.015828f, +0.001445f, +0.003042f, +0.002412f, +0.012859f, -0.003857f, -0.000341f, -0.002450f, + +0.000513f, -0.000596f, -0.001808f, +0.001376f, -0.002216f, -0.000376f, -0.000711f, -0.003001f, +0.002044f, +0.001242f, + +0.000259f, -0.001048f, +0.000674f, +0.000547f, -0.000231f, -0.000006f, +0.000975f, -0.001190f, +0.000636f, +0.000274f, + +0.000552f, +0.003915f, +0.001373f, -0.001410f, -0.001211f, +0.001596f, -0.001605f, +0.000025f, +0.002275f, +0.000375f, + +0.000820f, +0.000304f, +0.000599f, +0.001284f, +0.001232f, +0.000863f, -0.000083f, +0.000511f, +0.000904f, -0.000341f, + +0.000111f, +0.000197f, +0.001017f, -0.000309f, -0.000358f, -0.000410f, -0.000155f, +0.000132f, +0.000450f, +0.000167f, + -0.000450f, +0.000019f, -0.000341f, -0.000531f, +0.000000f, +0.000026f, +0.000037f, +0.000055f, -0.000192f, -0.000132f, + -0.000142f, +0.000012f, +0.000060f, +0.000135f, +0.000017f, +0.000114f, +0.000068f, -0.000178f, -0.000087f, -0.000006f, + -0.000100f, +0.000228f, +0.000031f, -0.000072f, -0.000015f, -0.000003f, +0.000054f, -0.000000f, +0.000060f, -0.000014f, + +0.000049f, +0.000080f, -0.000058f, -0.000034f, +0.000001f, +0.000084f + }, + { + -0.001072f, -0.006721f, +0.003235f, +0.003314f, -0.001852f, +0.000900f, +0.001282f, -0.000383f, +0.000876f, -0.000695f, + -0.002319f, -0.002752f, -0.000894f, -0.007232f, +0.004062f, +0.004240f, +0.001225f, +0.000290f, +0.000767f, +0.002739f, + -0.002906f, -0.005664f, -0.001066f, +0.002551f, +0.002494f, -0.001645f, +0.002059f, +0.001113f, +0.003050f, +0.001014f, + +0.003395f, -0.000709f, +0.000177f, +0.000444f, -0.000579f, -0.000611f, -0.001221f, -0.000301f, +0.000730f, -0.000015f, + +0.000564f, -0.000808f, -0.000746f, +0.000973f, -0.000276f, +0.000364f, +0.000579f, +0.000356f, +0.000525f, +0.001070f, + +0.000227f, -0.000329f, -0.000119f, -0.000266f, +0.000280f, -0.000345f, -0.000199f, +0.000058f, +0.000251f, -0.000386f, + -0.000005f, +0.000290f, -0.000058f, -0.000124f, -0.000441f, +0.000254f, +0.000080f, +0.000026f, +0.000252f, +0.000032f, + +0.000322f, +0.000172f, -0.000097f, -0.000041f, +0.000091f, +0.000194f, +0.000247f, +0.000082f, -0.000147f, -0.000134f, + -0.000097f, -0.000066f, -0.000103f, -0.000098f, +0.000024f, +0.000027f, -0.000076f, -0.000031f, -0.000010f, -0.000075f, + -0.000031f, +0.000012f, +0.000022f, +0.000032f, -0.000056f, +0.000050f + }, + { + -0.005859f, -0.021042f, +0.009810f, +0.010058f, -0.003803f, +0.000974f, +0.002741f, +0.002015f, -0.001526f, -0.002333f, + -0.000371f, +0.002433f, -0.003653f, +0.010967f, +0.003578f, -0.002310f, +0.000393f, +0.000766f, +0.000860f, +0.001211f, + +0.002262f, +0.000650f, +0.001154f, +0.001954f, -0.000753f, -0.000690f, +0.000462f, +0.001030f, -0.001188f, -0.000598f, + -0.000678f, +0.000248f, -0.000385f, -0.001803f, -0.000528f, +0.001095f, +0.000924f, -0.001355f, -0.000941f, +0.000881f, + +0.000445f, +0.000083f, -0.000440f, -0.001445f, -0.000815f, -0.000696f, -0.000076f, -0.000654f, -0.000402f, +0.000084f, + +0.000477f, +0.000210f, +0.000248f, +0.000169f, +0.000265f, +0.000235f, +0.000624f, +0.000545f, +0.000176f, +0.000028f, + +0.000521f, -0.000477f, -0.000370f, -0.000297f, +0.000035f, +0.000061f, -0.000403f, -0.000031f, -0.000023f, +0.000287f, + +0.000062f, -0.000300f, +0.000099f, -0.000242f, -0.000003f, +0.000084f, +0.000175f, +0.000060f, -0.000112f, +0.000039f, + +0.000054f, +0.000043f, -0.000043f, -0.000038f, +0.000018f, +0.000163f, -0.000303f, -0.000122f, -0.000150f, -0.000111f, + -0.000119f, -0.000060f, +0.000058f, +0.000026f, +0.000106f, +0.000083f + }, + { + -0.000107f, -0.001873f, -0.000580f, +0.000018f, +0.000321f, +0.000669f, +0.001552f, -0.000025f, +0.001322f, -0.000429f, + +0.001419f, -0.000243f, -0.005055f, +0.004978f, +0.054047f, -0.000137f, -0.008447f, -0.002313f, +0.000681f, +0.005344f, + -0.005567f, -0.002368f, -0.002828f, +0.003473f, +0.001379f, -0.001816f, +0.001916f, +0.002605f, +0.003187f, +0.001183f, + -0.002659f, -0.000297f, -0.000772f, -0.000797f, +0.000386f, -0.000514f, +0.001230f, -0.001420f, +0.000473f, -0.000199f, + +0.000424f, +0.000573f, +0.000639f, -0.000296f, -0.000224f, +0.000611f, +0.000460f, +0.000831f, +0.000496f, +0.000057f, + -0.000162f, +0.000784f, -0.000215f, -0.000075f, +0.000656f, -0.000347f, -0.000384f, +0.000305f, +0.000051f, -0.000438f, + +0.000049f, +0.000084f, -0.000339f, -0.000046f, +0.000215f, +0.000282f, +0.000020f, -0.000071f, +0.000052f, +0.000301f, + -0.000238f, -0.000148f, +0.000050f, +0.000193f, -0.000238f, +0.000001f, +0.000304f, -0.000080f, +0.000207f, +0.000076f, + +0.000027f, +0.000169f, -0.000121f, -0.000118f, -0.000006f, -0.000041f, -0.000130f, -0.000114f, +0.000147f, -0.000125f, + +0.000054f, +0.000028f, +0.000067f, -0.000034f, +0.000039f, +0.000005f + }, + { + -0.004765f, -0.039106f, -0.008777f, +0.004586f, -0.002714f, +0.003316f, +0.001562f, -0.003118f, -0.001714f, +0.000715f, + +0.001168f, -0.000531f, +0.001122f, -0.007013f, -0.011719f, +0.006526f, +0.003834f, -0.002205f, -0.001904f, +0.000793f, + -0.000908f, +0.000639f, -0.000892f, +0.001095f, +0.001027f, -0.001023f, -0.000219f, -0.000965f, -0.001077f, -0.001115f, + -0.001416f, +0.000541f, -0.001439f, +0.000676f, -0.001628f, -0.001176f, -0.000756f, -0.000172f, +0.000898f, -0.000909f, + -0.000154f, -0.000307f, -0.000555f, +0.000008f, +0.000501f, +0.000977f, +0.000019f, -0.000873f, -0.000363f, +0.000377f, + -0.000739f, +0.000084f, +0.000967f, +0.001775f, -0.000041f, +0.000531f, -0.000462f, -0.000489f, -0.000243f, -0.000096f, + -0.000042f, -0.000193f, -0.000078f, +0.000010f, +0.000326f, -0.000423f, -0.000228f, +0.000003f, -0.000204f, -0.000060f, + +0.000089f, -0.000251f, -0.000438f, +0.000313f, +0.000063f, +0.000047f, +0.000000f, -0.000108f, +0.000381f, -0.000043f, + -0.000253f, +0.000169f, +0.000159f, -0.000098f, +0.000017f, +0.000054f, +0.000033f, -0.000115f, +0.000121f, +0.000029f, + -0.000083f, +0.000012f, +0.000030f, -0.000108f, -0.000008f, +0.000020f + } + }, + { + { + -0.000784f, -0.025572f, +0.007801f, -0.003085f, +0.000486f, -0.000120f, -0.001020f, +0.000438f, -0.000604f, +0.000805f, + -0.003372f, -0.001568f, -0.002434f, -0.004570f, +0.003965f, -0.003849f, -0.005103f, +0.001788f, +0.000469f, +0.002589f, + +0.002673f, -0.000284f, +0.000337f, +0.000218f, -0.001010f, +0.001593f, +0.000224f, -0.000657f, -0.000695f, -0.002249f, + -0.001538f, -0.000544f, +0.000033f, -0.001883f, +0.000533f, -0.000842f, +0.000301f, -0.003446f, +0.001109f, -0.000234f, + +0.000249f, -0.000188f, -0.000480f, -0.000277f, +0.001119f, +0.000369f, -0.000572f, -0.000130f, +0.000195f, -0.000690f, + +0.000075f, +0.000216f, -0.000413f, +0.000494f, -0.000037f, -0.000099f, -0.000414f, -0.000201f, +0.000464f, +0.000332f, + +0.000044f, +0.000446f, +0.000156f, -0.000220f, +0.000071f, -0.000017f, -0.000410f, -0.000074f, -0.000103f, +0.000014f, + -0.000234f, -0.000074f, +0.000070f, -0.000116f, +0.000117f, -0.000054f, -0.000050f, -0.000043f, +0.000032f, -0.000088f, + -0.000074f, +0.000101f, +0.000152f, +0.000216f, +0.000052f, -0.000195f, -0.000082f, -0.000079f, +0.000119f, -0.000078f, + +0.000094f, +0.000055f, +0.000050f, -0.000024f, -0.000081f, +0.000012f + }, + { + -0.006996f, +0.057143f, +0.006871f, -0.006472f, +0.001360f, +0.000787f, +0.000058f, -0.000307f, +0.000828f, +0.001425f, + -0.000187f, +0.002178f, -0.000553f, -0.001016f, +0.000882f, -0.002462f, +0.002230f, -0.000862f, +0.005786f, -0.002257f, + -0.000481f, -0.000073f, -0.001189f, +0.000237f, +0.001412f, -0.000076f, -0.000164f, -0.000316f, +0.001114f, +0.001505f, + -0.000427f, -0.000482f, +0.000949f, +0.000498f, -0.000461f, -0.001159f, +0.000862f, -0.000685f, -0.000917f, -0.000229f, + +0.001397f, +0.000707f, +0.000761f, -0.000130f, +0.000335f, -0.000486f, +0.000496f, -0.000743f, -0.000898f, +0.000138f, + -0.000074f, -0.000025f, +0.000332f, +0.000280f, +0.000256f, -0.000363f, -0.000098f, +0.000508f, -0.000104f, +0.000146f, + +0.000396f, -0.000105f, +0.000355f, +0.000036f, +0.000053f, -0.000062f, -0.000162f, +0.000458f, -0.000008f, -0.000184f, + +0.000173f, -0.000250f, -0.000018f, +0.000000f, -0.000217f, +0.000098f, +0.000076f, +0.000030f, -0.000100f, +0.000036f, + +0.000045f, -0.000096f, +0.000047f, +0.000035f, +0.000055f, -0.000112f, +0.000085f, +0.000064f, -0.000036f, +0.000085f, + -0.000032f, -0.000119f, +0.000117f, -0.000079f, +0.000088f, -0.000028f + }, + { + -0.008038f, +0.052943f, +0.019580f, +0.013208f, -0.000612f, -0.000174f, -0.000301f, -0.000215f, -0.000390f, -0.000760f, + +0.000060f, +0.000101f, +0.001615f, +0.000670f, -0.000915f, -0.004580f, -0.000338f, -0.000788f, -0.000378f, +0.000731f, + -0.005226f, -0.001227f, -0.000860f, +0.000700f, +0.000949f, -0.000584f, +0.000936f, -0.000090f, -0.001192f, -0.000455f, + +0.001324f, +0.000246f, +0.001558f, -0.001429f, +0.002156f, -0.000550f, +0.000739f, -0.000719f, -0.000170f, -0.000112f, + -0.000912f, +0.000458f, +0.000824f, +0.000379f, +0.001036f, +0.000111f, +0.001166f, -0.000136f, +0.000280f, +0.000141f, + -0.000812f, -0.000041f, +0.000872f, -0.000195f, -0.000492f, +0.000170f, +0.000172f, -0.000003f, +0.000271f, -0.000510f, + +0.000380f, +0.000694f, -0.000048f, -0.000330f, -0.000002f, +0.000074f, -0.000021f, -0.000156f, -0.000062f, +0.000055f, + -0.000100f, -0.000189f, +0.000015f, +0.000234f, +0.000007f, -0.000080f, -0.000049f, +0.000084f, -0.000050f, -0.000210f, + -0.000004f, +0.000091f, -0.000020f, -0.000068f, +0.000080f, +0.000051f, -0.000075f, -0.000008f, -0.000022f, -0.000020f, + +0.000040f, -0.000033f, +0.000083f, +0.000010f, -0.000027f, +0.000062f + }, + { + +0.000729f, +0.005057f, -0.000004f, +0.000066f, -0.000005f, -0.000459f, +0.000110f, +0.000680f, -0.000057f, -0.000586f, + +0.000140f, -0.001349f, +0.000972f, -0.000236f, -0.008938f, -0.000208f, +0.001494f, +0.002951f, -0.003130f, -0.002883f, + +0.001527f, -0.001767f, -0.000207f, +0.000711f, +0.000022f, +0.000341f, +0.001733f, -0.000732f, -0.000342f, -0.001448f, + -0.000234f, +0.001852f, -0.000009f, +0.000799f, -0.001372f, -0.000727f, -0.000300f, +0.000139f, +0.000509f, -0.000597f, + +0.000573f, +0.000393f, +0.000257f, +0.000042f, -0.000595f, +0.000314f, -0.000120f, -0.000622f, +0.000155f, +0.000160f, + -0.000116f, +0.000090f, +0.000150f, +0.000154f, +0.000334f, -0.000599f, +0.000103f, -0.000144f, +0.000305f, +0.000113f, + -0.000229f, +0.000256f, -0.000064f, -0.000174f, +0.000003f, +0.000037f, -0.000039f, +0.000222f, -0.000115f, +0.000122f, + -0.000344f, -0.000100f, -0.000128f, +0.000135f, -0.000164f, -0.000058f, +0.000206f, +0.000094f, -0.000113f, -0.000038f, + -0.000087f, +0.000071f, +0.000087f, +0.000032f, +0.000003f, -0.000051f, -0.000066f, +0.000078f, +0.000114f, -0.000010f, + -0.000024f, +0.000061f, +0.000060f, +0.000012f, -0.000022f, +0.000079f + }, + { + +0.001099f, +0.079827f, -0.000383f, -0.006837f, +0.001699f, -0.000473f, -0.000502f, -0.000584f, -0.000181f, -0.000298f, + +0.003575f, -0.001223f, +0.001397f, -0.000333f, -0.000451f, +0.003150f, +0.001080f, -0.008090f, -0.001587f, +0.001828f, + +0.001149f, -0.000332f, -0.002545f, -0.002081f, +0.000682f, -0.000586f, +0.001531f, +0.000442f, -0.001362f, -0.000013f, + -0.000620f, -0.000813f, -0.000501f, +0.001286f, -0.000113f, +0.001294f, -0.000042f, -0.000869f, +0.000767f, -0.000152f, + +0.000204f, +0.000439f, -0.000690f, +0.000757f, -0.000473f, -0.000217f, +0.000112f, +0.000462f, -0.000462f, +0.001084f, + +0.000242f, +0.000217f, +0.000034f, -0.000244f, -0.000747f, +0.000525f, +0.000151f, -0.000771f, -0.000466f, +0.000258f, + -0.000080f, +0.000198f, +0.000116f, -0.000280f, -0.000134f, -0.000007f, -0.000342f, -0.000029f, -0.000280f, -0.000043f, + +0.000029f, -0.000201f, -0.000221f, +0.000271f, +0.000113f, -0.000105f, +0.000059f, +0.000011f, -0.000046f, -0.000099f, + -0.000026f, -0.000053f, +0.000059f, -0.000086f, -0.000191f, +0.000088f, +0.000001f, -0.000005f, -0.000073f, -0.000065f, + +0.000125f, -0.000059f, -0.000096f, +0.000029f, +0.000023f, +0.000072f + }, + { + -0.000021f, -0.001403f, -0.003886f, -0.001099f, -0.000194f, -0.000023f, +0.000140f, +0.000415f, -0.000472f, -0.000436f, + -0.000190f, +0.000220f, -0.000446f, +0.003512f, +0.003761f, -0.002498f, -0.004863f, +0.000377f, -0.003177f, -0.013348f, + +0.004929f, -0.000299f, +0.002784f, -0.002016f, +0.000145f, -0.003258f, +0.002488f, -0.002059f, +0.001338f, +0.001136f, + +0.002243f, -0.000005f, -0.000415f, +0.001322f, +0.000127f, -0.000600f, +0.000319f, +0.000024f, +0.000931f, -0.000643f, + +0.001319f, +0.000342f, +0.000363f, +0.000361f, +0.000054f, +0.000429f, +0.000090f, -0.000501f, +0.000456f, +0.000095f, + +0.000323f, -0.000396f, -0.000403f, +0.000689f, +0.000280f, -0.000010f, -0.000224f, -0.000164f, +0.000209f, +0.000112f, + -0.000256f, +0.000534f, -0.000062f, -0.000545f, -0.000076f, +0.000033f, +0.000101f, +0.000044f, -0.000099f, -0.000082f, + +0.000307f, +0.000149f, +0.000185f, +0.000217f, +0.000008f, -0.000054f, +0.000256f, +0.000122f, -0.000004f, -0.000085f, + -0.000048f, +0.000107f, -0.000151f, -0.000047f, +0.000105f, -0.000008f, +0.000006f, -0.000058f, +0.000009f, -0.000017f, + -0.000032f, -0.000052f, +0.000082f, +0.000042f, -0.000036f, -0.000123f + }, + { + -0.022967f, +0.115758f, +0.003593f, -0.002072f, -0.000203f, -0.000067f, -0.000039f, -0.000613f, -0.001187f, -0.001742f, + -0.000431f, +0.000407f, +0.002229f, -0.001965f, -0.000802f, -0.002302f, -0.000167f, +0.000810f, -0.000729f, -0.000463f, + -0.000380f, +0.000280f, +0.000556f, -0.000629f, +0.000056f, -0.000329f, +0.000722f, -0.001929f, -0.001354f, -0.001170f, + +0.001015f, +0.001665f, +0.000252f, +0.000271f, -0.001314f, -0.000934f, +0.000382f, +0.000061f, -0.000461f, +0.001013f, + -0.000156f, +0.000977f, -0.000528f, +0.000224f, +0.000650f, -0.000004f, -0.000144f, +0.000401f, +0.000216f, -0.000365f, + -0.000019f, -0.000646f, -0.000109f, +0.000523f, +0.000615f, +0.000292f, -0.000220f, +0.000039f, +0.000664f, +0.000072f, + -0.000674f, +0.000133f, +0.000352f, -0.000162f, -0.000219f, -0.000025f, +0.000288f, +0.000138f, +0.000002f, -0.000014f, + -0.000075f, -0.000270f, +0.000206f, +0.000060f, +0.000156f, -0.000033f, -0.000014f, +0.000146f, -0.000026f, +0.000109f, + -0.000104f, -0.000117f, +0.000215f, -0.000007f, -0.000267f, +0.000064f, +0.000024f, +0.000100f, -0.000036f, -0.000056f, + +0.000018f, +0.000043f, +0.000077f, -0.000028f, +0.000014f, +0.000050f + }, + { + +0.000435f, -0.000346f, +0.001023f, -0.001556f, +0.000804f, -0.000109f, +0.000222f, +0.000144f, -0.000807f, +0.000174f, + -0.000883f, -0.000710f, -0.000104f, -0.002824f, -0.002321f, -0.002076f, +0.003524f, -0.000938f, +0.001621f, -0.001118f, + +0.000358f, +0.001731f, +0.000840f, -0.000579f, -0.002047f, +0.002440f, -0.000224f, -0.000807f, -0.000639f, +0.001890f, + -0.000672f, +0.001244f, +0.000535f, -0.000713f, -0.001028f, +0.000858f, +0.000386f, -0.000114f, +0.000197f, +0.000445f, + +0.000125f, -0.000334f, +0.000278f, +0.000215f, +0.000102f, -0.000293f, +0.000573f, +0.000151f, -0.000982f, -0.000287f, + +0.000331f, -0.000193f, -0.000606f, +0.000220f, +0.000576f, -0.000265f, -0.000334f, -0.000154f, -0.000414f, +0.000877f, + +0.000398f, +0.000393f, +0.000561f, +0.000313f, +0.000023f, +0.000179f, +0.000016f, +0.000056f, -0.000002f, -0.000030f, + +0.000161f, +0.000123f, -0.000135f, +0.000071f, +0.000077f, +0.000005f, +0.000147f, +0.000080f, -0.000039f, +0.000039f, + -0.000067f, -0.000221f, +0.000071f, -0.000041f, +0.000120f, -0.000061f, +0.000125f, -0.000033f, +0.000023f, +0.000070f, + +0.000057f, +0.000077f, -0.000015f, +0.000003f, -0.000024f, +0.000024f + }, + { + +0.021497f, -0.016968f, -0.008415f, +0.001035f, -0.001349f, -0.000257f, -0.000410f, -0.001047f, -0.000288f, +0.001934f, + -0.000774f, -0.002291f, +0.000502f, +0.000426f, +0.000633f, +0.000411f, +0.000217f, -0.001314f, -0.000709f, -0.000451f, + -0.000511f, -0.001077f, +0.000562f, +0.000405f, +0.000182f, +0.000179f, +0.000348f, +0.001248f, +0.002055f, +0.000796f, + -0.001244f, -0.000779f, -0.000392f, -0.000022f, -0.000820f, +0.001595f, -0.000053f, +0.000988f, -0.002803f, -0.000200f, + +0.000563f, +0.001335f, -0.000586f, +0.000846f, -0.000532f, +0.000413f, -0.000283f, -0.001442f, +0.000319f, -0.000237f, + +0.000374f, -0.000301f, -0.000382f, +0.000495f, -0.000337f, +0.000054f, -0.000253f, -0.000264f, +0.000279f, -0.000097f, + +0.000453f, +0.000591f, -0.000312f, +0.000226f, -0.000160f, +0.000215f, +0.000347f, +0.000427f, -0.000158f, -0.000020f, + -0.000240f, +0.000089f, +0.000031f, -0.000167f, +0.000178f, -0.000021f, -0.000237f, +0.000437f, +0.000017f, -0.000005f, + +0.000079f, -0.000203f, -0.000108f, -0.000198f, -0.000005f, -0.000029f, -0.000006f, +0.000089f, +0.000113f, +0.000042f, + -0.000127f, -0.000058f, -0.000076f, +0.000084f, -0.000010f, +0.000009f + }, + { + +0.001037f, +0.002351f, +0.007964f, -0.006410f, +0.003154f, +0.003263f, +0.004973f, -0.001213f, -0.000323f, -0.000353f, + +0.000269f, -0.002244f, +0.002057f, +0.000496f, +0.004050f, -0.002878f, -0.002564f, -0.000533f, -0.002930f, -0.001935f, + -0.000496f, +0.001750f, -0.000362f, +0.000298f, +0.001206f, +0.000227f, -0.000234f, +0.000956f, -0.000888f, +0.000934f, + +0.000108f, -0.000525f, -0.000673f, +0.000513f, +0.001032f, +0.001508f, -0.000306f, +0.001172f, +0.000342f, +0.000064f, + -0.000428f, +0.000508f, -0.000288f, -0.000255f, +0.000737f, -0.000930f, +0.000449f, -0.000314f, -0.000443f, -0.000256f, + +0.000702f, -0.000014f, +0.000301f, -0.000422f, -0.000502f, -0.000563f, -0.000156f, -0.000018f, -0.000069f, +0.000125f, + -0.000010f, +0.000282f, -0.000030f, -0.000066f, -0.000063f, -0.000251f, +0.000121f, +0.000383f, +0.000269f, -0.000068f, + +0.000049f, -0.000041f, -0.000297f, +0.000173f, -0.000167f, -0.000012f, -0.000181f, -0.000046f, -0.000044f, -0.000053f, + -0.000131f, +0.000034f, +0.000088f, -0.000027f, +0.000098f, -0.000029f, -0.000056f, +0.000073f, -0.000040f, +0.000087f, + +0.000021f, -0.000001f, +0.000026f, +0.000059f, +0.000041f, +0.000049f + }, + { + +0.005877f, -0.056500f, +0.002816f, +0.006700f, +0.001876f, -0.004413f, -0.002997f, -0.004858f, +0.000613f, +0.000293f, + +0.000169f, +0.000113f, -0.000976f, +0.001524f, -0.001192f, -0.002006f, -0.002870f, -0.002598f, +0.001438f, +0.000335f, + -0.000430f, -0.000021f, -0.000455f, +0.000313f, +0.000303f, +0.000243f, +0.001100f, -0.000613f, +0.000807f, +0.000497f, + -0.000576f, +0.001241f, -0.000497f, -0.000954f, -0.000384f, +0.000436f, -0.001302f, -0.000768f, +0.000202f, +0.000656f, + +0.000573f, -0.000713f, +0.000221f, +0.000143f, +0.000252f, +0.000027f, -0.000791f, +0.000289f, +0.000909f, -0.000418f, + +0.000263f, -0.000010f, +0.000511f, -0.000459f, -0.000100f, -0.000750f, -0.000048f, +0.000530f, +0.000335f, -0.000143f, + -0.000612f, +0.000104f, -0.000012f, -0.000194f, +0.000407f, +0.000070f, -0.000007f, -0.000137f, -0.000192f, -0.000022f, + -0.000035f, +0.000045f, +0.000157f, +0.000191f, -0.000105f, +0.000041f, +0.000107f, -0.000250f, -0.000053f, -0.000028f, + +0.000093f, +0.000172f, -0.000100f, +0.000141f, -0.000030f, +0.000102f, -0.000004f, +0.000057f, +0.000048f, -0.000065f, + +0.000073f, +0.000031f, -0.000126f, +0.000011f, +0.000073f, +0.000033f + }, + { + +0.000691f, -0.009124f, -0.002606f, +0.001524f, -0.000041f, -0.000186f, -0.000166f, -0.000699f, +0.000563f, -0.000398f, + -0.001084f, -0.001493f, +0.002742f, -0.004618f, -0.003227f, +0.002893f, +0.001082f, +0.000297f, -0.001061f, +0.000887f, + -0.000265f, -0.002933f, -0.000525f, +0.000818f, +0.002138f, +0.000524f, +0.000201f, -0.001916f, -0.000013f, +0.000166f, + +0.000370f, -0.001507f, -0.000969f, +0.001975f, -0.000583f, -0.000032f, -0.000426f, +0.000860f, +0.000389f, -0.000039f, + +0.000234f, -0.000379f, +0.000119f, +0.000571f, -0.000471f, +0.000497f, +0.000200f, +0.000196f, -0.000091f, +0.000534f, + -0.000051f, -0.000178f, +0.000412f, -0.000001f, +0.000173f, -0.000217f, -0.000266f, +0.000014f, +0.000508f, -0.000349f, + +0.000467f, +0.000108f, -0.000135f, -0.000188f, -0.000222f, +0.000524f, +0.000107f, +0.000180f, +0.000032f, -0.000099f, + +0.000301f, +0.000095f, -0.000124f, -0.000048f, -0.000065f, +0.000028f, +0.000096f, -0.000149f, -0.000101f, -0.000108f, + -0.000054f, +0.000025f, -0.000129f, -0.000155f, +0.000025f, -0.000080f, -0.000089f, -0.000011f, +0.000060f, -0.000014f, + -0.000022f, +0.000073f, +0.000028f, -0.000076f, -0.000048f, +0.000073f + }, + { + +0.004403f, -0.015490f, -0.002756f, +0.001344f, -0.002619f, +0.003416f, -0.000868f, +0.000433f, -0.001082f, +0.000486f, + -0.000895f, +0.001094f, -0.001390f, +0.009125f, +0.001932f, -0.001869f, +0.001686f, -0.000430f, -0.002353f, +0.001915f, + +0.000550f, -0.000580f, -0.000210f, +0.001131f, -0.000390f, +0.002224f, -0.000320f, +0.000071f, +0.000758f, -0.000025f, + -0.000561f, +0.000216f, +0.001517f, -0.000137f, +0.000295f, +0.001062f, +0.001038f, -0.000656f, +0.000156f, +0.000569f, + -0.000935f, -0.000526f, +0.000708f, -0.000266f, -0.000154f, -0.000528f, +0.000373f, -0.000960f, +0.000056f, -0.000412f, + -0.000124f, +0.000132f, +0.000218f, +0.000655f, -0.000083f, -0.000066f, -0.000195f, -0.000075f, -0.000039f, +0.000118f, + +0.000318f, -0.000395f, -0.000033f, -0.000079f, -0.000118f, +0.000074f, -0.000182f, -0.000107f, +0.000283f, +0.000270f, + -0.000231f, -0.000131f, +0.000283f, -0.000154f, +0.000023f, +0.000092f, +0.000105f, +0.000170f, -0.000012f, +0.000055f, + -0.000167f, +0.000046f, +0.000154f, +0.000011f, -0.000099f, -0.000086f, -0.000334f, +0.000038f, -0.000076f, +0.000012f, + -0.000018f, +0.000003f, +0.000131f, -0.000053f, +0.000079f, -0.000009f + }, + { + +0.000528f, -0.001415f, +0.001135f, -0.000480f, -0.000412f, -0.000509f, -0.000087f, -0.000750f, +0.000432f, -0.002128f, + +0.000498f, -0.000579f, -0.002609f, -0.011920f, +0.018061f, -0.004564f, -0.003033f, +0.000009f, +0.002524f, +0.005250f, + -0.002003f, +0.001230f, -0.001636f, +0.002599f, +0.000410f, +0.000582f, +0.002584f, +0.000746f, -0.002586f, +0.000936f, + -0.000554f, +0.000430f, +0.000600f, -0.000302f, -0.000741f, -0.001023f, +0.000097f, -0.001022f, +0.000747f, -0.000663f, + +0.001108f, +0.000269f, -0.000467f, -0.000482f, -0.000401f, -0.000362f, -0.000085f, -0.000132f, +0.000081f, -0.000456f, + -0.000070f, +0.000516f, -0.000343f, -0.000156f, +0.000292f, -0.000403f, -0.000024f, +0.000498f, +0.000459f, -0.000246f, + +0.000496f, +0.000041f, -0.000165f, -0.000107f, +0.000120f, -0.000196f, -0.000172f, +0.000095f, +0.000089f, +0.000216f, + -0.000179f, +0.000094f, +0.000079f, +0.000144f, -0.000067f, +0.000138f, +0.000002f, +0.000075f, -0.000055f, +0.000003f, + +0.000138f, +0.000011f, +0.000045f, -0.000060f, -0.000107f, -0.000045f, -0.000034f, +0.000084f, +0.000052f, -0.000099f, + +0.000110f, -0.000044f, -0.000076f, +0.000011f, +0.000052f, -0.000062f + }, + { + +0.007737f, -0.014121f, +0.000270f, +0.009152f, -0.000532f, +0.001949f, -0.002082f, -0.001105f, +0.000796f, +0.000654f, + +0.002619f, +0.000382f, -0.000377f, +0.002796f, +0.006061f, +0.003961f, -0.000854f, -0.000490f, -0.000772f, -0.000166f, + -0.002525f, +0.001692f, -0.000463f, +0.001276f, +0.000712f, -0.001381f, +0.001583f, +0.002366f, +0.000284f, -0.001116f, + -0.000657f, +0.000887f, -0.001403f, +0.000404f, -0.001282f, +0.000702f, +0.000579f, +0.000447f, +0.001226f, +0.000277f, + +0.002178f, +0.000358f, -0.000620f, +0.000389f, +0.000478f, -0.000031f, +0.000389f, +0.000345f, +0.000323f, +0.000627f, + -0.000595f, -0.000086f, +0.000260f, +0.000458f, -0.000445f, +0.000212f, -0.000317f, -0.000238f, -0.000613f, -0.000095f, + -0.000005f, -0.000402f, -0.000195f, -0.000031f, +0.000335f, -0.000404f, -0.000031f, +0.000112f, -0.000073f, -0.000008f, + +0.000084f, -0.000080f, -0.000080f, +0.000162f, -0.000057f, +0.000028f, -0.000047f, -0.000059f, +0.000181f, -0.000174f, + -0.000095f, +0.000174f, +0.000057f, -0.000023f, +0.000090f, +0.000093f, +0.000029f, +0.000040f, -0.000009f, -0.000029f, + -0.000012f, -0.000003f, +0.000035f, -0.000016f, +0.000016f, +0.000008f + } + }, + { + { + +0.001334f, -0.007753f, -0.011840f, -0.002263f, +0.000256f, -0.000754f, -0.000088f, +0.000316f, -0.000266f, -0.001733f, + -0.002848f, -0.001427f, -0.003560f, -0.002394f, +0.002613f, -0.002694f, +0.000317f, -0.002351f, -0.001326f, +0.003025f, + +0.001833f, -0.001321f, -0.002479f, -0.002113f, -0.001298f, +0.001282f, +0.002356f, -0.000616f, -0.000758f, -0.001688f, + -0.001629f, -0.000453f, -0.003791f, +0.000910f, -0.000265f, +0.000462f, +0.000105f, -0.001771f, +0.001633f, -0.001135f, + +0.000437f, -0.001156f, +0.000387f, -0.000581f, +0.000971f, +0.000475f, +0.000156f, +0.000595f, +0.000230f, -0.000520f, + -0.000665f, +0.000199f, -0.000278f, +0.000119f, -0.000111f, -0.000145f, +0.000030f, -0.000133f, +0.000914f, -0.000127f, + +0.000051f, +0.000022f, +0.000032f, +0.000021f, -0.000028f, -0.000296f, -0.000283f, +0.000010f, -0.000216f, -0.000185f, + -0.000255f, -0.000019f, +0.000079f, +0.000034f, +0.000025f, +0.000078f, +0.000007f, +0.000026f, -0.000109f, -0.000064f, + -0.000049f, +0.000119f, -0.000019f, -0.000027f, -0.000072f, -0.000065f, +0.000085f, -0.000046f, -0.000003f, +0.000044f, + +0.000129f, -0.000022f, +0.000037f, +0.000045f, +0.000009f, +0.000076f + }, + { + +0.005304f, +0.074682f, -0.018461f, -0.000582f, +0.001260f, +0.000091f, +0.000903f, +0.002273f, +0.001638f, +0.001318f, + +0.001262f, +0.000378f, +0.000282f, -0.000711f, +0.000464f, +0.001425f, +0.002996f, +0.001349f, -0.000543f, -0.000025f, + -0.001018f, +0.000670f, -0.000368f, -0.000718f, +0.000706f, +0.000247f, +0.000574f, +0.000369f, +0.000810f, +0.000540f, + +0.000282f, -0.000028f, +0.001121f, +0.001079f, -0.000489f, -0.001734f, +0.000449f, +0.000363f, +0.000408f, +0.000661f, + +0.001344f, +0.000441f, -0.000816f, -0.000198f, +0.000236f, -0.000203f, +0.000489f, -0.000281f, -0.000199f, -0.000336f, + +0.000034f, +0.000148f, -0.000142f, -0.000087f, +0.000154f, -0.000134f, +0.000025f, -0.000416f, +0.000159f, +0.000151f, + -0.000016f, -0.000106f, +0.000280f, -0.000009f, +0.000245f, +0.000077f, +0.000146f, +0.000115f, -0.000240f, -0.000040f, + +0.000004f, -0.000058f, +0.000143f, -0.000087f, -0.000078f, +0.000207f, -0.000145f, +0.000064f, +0.000200f, -0.000044f, + -0.000025f, -0.000058f, +0.000059f, +0.000011f, -0.000103f, +0.000010f, +0.000126f, -0.000086f, +0.000028f, -0.000005f, + +0.000023f, -0.000016f, -0.000007f, -0.000031f, +0.000041f, -0.000040f + }, + { + +0.004429f, +0.076451f, -0.006205f, +0.006976f, -0.005058f, -0.000151f, +0.000297f, -0.000226f, +0.000290f, +0.000027f, + +0.000786f, +0.000682f, -0.000909f, +0.001815f, -0.001017f, -0.002541f, -0.003012f, +0.000638f, -0.000346f, -0.001462f, + -0.000624f, -0.001197f, -0.000399f, +0.000518f, -0.000077f, -0.001165f, +0.000661f, +0.000985f, +0.000206f, -0.000663f, + -0.001553f, +0.001628f, -0.000531f, -0.000135f, +0.001615f, -0.000082f, -0.000254f, +0.000400f, -0.000780f, +0.000160f, + -0.000745f, -0.000104f, +0.001426f, -0.000335f, +0.000300f, +0.001221f, +0.001158f, -0.000229f, -0.000074f, -0.000494f, + -0.000367f, +0.000418f, +0.000541f, -0.000493f, +0.000463f, -0.000555f, +0.000049f, -0.000195f, +0.000043f, +0.000004f, + +0.000188f, +0.000188f, -0.000053f, -0.000332f, -0.000242f, -0.000013f, -0.000229f, -0.000177f, +0.000005f, -0.000139f, + -0.000243f, -0.000063f, -0.000016f, -0.000066f, +0.000112f, -0.000098f, -0.000045f, -0.000002f, +0.000150f, -0.000050f, + -0.000033f, -0.000040f, -0.000002f, -0.000085f, -0.000001f, +0.000166f, -0.000039f, +0.000073f, +0.000023f, +0.000061f, + +0.000011f, -0.000067f, -0.000009f, -0.000035f, -0.000009f, +0.000027f + }, + { + -0.000885f, +0.005728f, +0.001165f, -0.000029f, -0.000495f, +0.000213f, +0.000078f, +0.000448f, +0.000285f, -0.000336f, + -0.000096f, -0.000418f, +0.000539f, -0.002426f, +0.000213f, -0.002681f, -0.000932f, +0.002836f, -0.000504f, -0.002729f, + +0.001703f, +0.000976f, -0.000892f, +0.000570f, -0.000937f, +0.000121f, +0.004260f, -0.001513f, -0.001365f, +0.002217f, + -0.000811f, -0.000117f, -0.000033f, +0.000913f, -0.000874f, -0.000114f, -0.001255f, +0.000479f, +0.000311f, -0.000295f, + +0.000554f, -0.000193f, +0.000557f, +0.000371f, +0.000090f, +0.000212f, -0.000951f, -0.000235f, +0.000008f, -0.000322f, + +0.000133f, +0.000269f, -0.000337f, +0.000000f, +0.000058f, -0.000618f, +0.000196f, +0.000180f, -0.000079f, +0.000471f, + +0.000114f, -0.000209f, -0.000108f, -0.000030f, -0.000134f, -0.000129f, -0.000000f, +0.000151f, -0.000203f, -0.000056f, + +0.000016f, +0.000110f, +0.000073f, -0.000253f, -0.000001f, -0.000078f, +0.000010f, -0.000025f, -0.000242f, +0.000022f, + +0.000019f, -0.000022f, -0.000026f, +0.000016f, -0.000051f, +0.000058f, -0.000003f, -0.000017f, -0.000042f, -0.000022f, + +0.000054f, -0.000005f, -0.000095f, -0.000071f, +0.000022f, -0.000050f + }, + { + +0.009158f, +0.062902f, +0.002527f, -0.004743f, +0.000216f, -0.000164f, -0.001178f, -0.001082f, +0.000721f, +0.000437f, + +0.000840f, -0.001016f, +0.002398f, +0.000584f, -0.000119f, +0.001497f, -0.002836f, -0.005021f, +0.000900f, +0.000819f, + +0.001514f, -0.000164f, -0.001599f, -0.001076f, +0.000705f, -0.000491f, -0.000115f, +0.000781f, +0.000438f, +0.000021f, + -0.000106f, -0.000906f, -0.000572f, -0.000198f, +0.000672f, +0.002183f, -0.000633f, +0.001162f, +0.000163f, -0.000182f, + +0.001010f, -0.000092f, +0.000661f, -0.000709f, +0.000183f, -0.000409f, -0.000243f, -0.000052f, +0.000061f, +0.000332f, + +0.000217f, +0.000298f, -0.000184f, -0.000382f, +0.000117f, +0.000066f, -0.000130f, -0.000537f, +0.000296f, -0.000110f, + -0.000019f, +0.000397f, +0.000113f, -0.000229f, -0.000134f, -0.000253f, -0.000092f, -0.000133f, -0.000197f, -0.000197f, + +0.000011f, -0.000004f, +0.000125f, +0.000289f, -0.000051f, -0.000052f, -0.000126f, -0.000257f, +0.000060f, -0.000110f, + -0.000022f, -0.000075f, -0.000012f, -0.000155f, +0.000089f, +0.000061f, -0.000090f, +0.000072f, -0.000005f, -0.000003f, + +0.000065f, +0.000033f, +0.000046f, +0.000066f, +0.000078f, +0.000019f + }, + { + +0.000500f, -0.008590f, -0.000997f, -0.000664f, +0.000082f, +0.000196f, +0.000134f, -0.000038f, -0.000442f, -0.000514f, + +0.000355f, +0.000178f, +0.000116f, +0.003629f, +0.011167f, -0.005710f, -0.004163f, -0.001295f, -0.000834f, -0.008892f, + -0.002704f, +0.001411f, +0.001392f, -0.003466f, +0.001288f, +0.001432f, -0.001464f, +0.002449f, -0.001156f, +0.000821f, + +0.001177f, +0.001043f, -0.000519f, -0.000424f, +0.000341f, -0.000252f, -0.000567f, -0.000148f, +0.000517f, +0.000143f, + +0.000120f, +0.000360f, +0.000732f, +0.000657f, -0.000433f, +0.000179f, +0.000333f, +0.000361f, +0.000525f, +0.000270f, + -0.000315f, -0.000391f, -0.000114f, +0.000700f, +0.000174f, -0.000290f, -0.000117f, -0.000053f, +0.000166f, +0.000126f, + -0.000207f, +0.000419f, -0.000153f, -0.000387f, -0.000171f, -0.000156f, +0.000173f, +0.000111f, -0.000038f, +0.000101f, + +0.000261f, -0.000042f, +0.000176f, +0.000128f, +0.000066f, -0.000166f, -0.000076f, -0.000096f, -0.000031f, +0.000067f, + -0.000016f, -0.000087f, +0.000023f, -0.000070f, +0.000098f, -0.000003f, -0.000038f, +0.000007f, -0.000079f, -0.000035f, + +0.000094f, +0.000043f, -0.000019f, -0.000075f, -0.000077f, -0.000024f + }, + { + +0.025753f, +0.064043f, -0.009729f, -0.001034f, +0.000151f, -0.000295f, +0.000233f, -0.001118f, -0.001201f, +0.000226f, + -0.000981f, +0.000199f, +0.000548f, -0.001147f, -0.001485f, -0.001932f, +0.000936f, -0.000977f, +0.000142f, +0.000528f, + +0.001126f, +0.000388f, -0.000726f, +0.000511f, -0.000437f, +0.000219f, -0.000271f, -0.001478f, -0.000271f, -0.000341f, + +0.001063f, +0.000667f, +0.000291f, -0.000394f, -0.001038f, +0.000164f, -0.000508f, +0.000475f, -0.000363f, +0.000746f, + +0.000555f, -0.000150f, +0.000324f, +0.000536f, +0.000050f, +0.000179f, +0.000385f, +0.001008f, -0.000329f, +0.000037f, + +0.000138f, -0.000192f, +0.000561f, -0.000069f, +0.000461f, -0.000019f, -0.000392f, +0.000266f, -0.000073f, -0.000185f, + -0.000187f, +0.000046f, +0.000092f, -0.000026f, -0.000047f, -0.000042f, -0.000238f, +0.000227f, +0.000117f, -0.000242f, + +0.000077f, +0.000165f, -0.000126f, -0.000070f, +0.000042f, +0.000070f, -0.000020f, -0.000012f, +0.000093f, -0.000074f, + -0.000070f, +0.000010f, +0.000030f, -0.000118f, +0.000026f, +0.000050f, -0.000018f, -0.000013f, +0.000024f, +0.000031f, + -0.000071f, -0.000003f, +0.000035f, +0.000051f, +0.000088f, +0.000083f + }, + { + +0.000619f, +0.001377f, -0.004807f, +0.000464f, +0.000037f, +0.000305f, +0.000291f, +0.000014f, -0.000252f, -0.000547f, + +0.000285f, -0.000319f, +0.001111f, +0.000566f, +0.000167f, -0.003353f, -0.000980f, +0.001734f, +0.000306f, -0.000812f, + +0.003744f, +0.002023f, +0.000909f, +0.001551f, -0.000151f, +0.001089f, -0.001902f, -0.000031f, -0.001134f, +0.000790f, + +0.000354f, +0.001523f, +0.001513f, -0.001413f, +0.000380f, -0.000089f, +0.000241f, -0.000095f, -0.000301f, +0.000203f, + +0.000285f, +0.000185f, -0.000413f, +0.000570f, +0.000181f, -0.000206f, -0.000156f, -0.000185f, +0.000156f, -0.000631f, + -0.000309f, -0.000146f, -0.000204f, -0.000224f, -0.000079f, -0.000438f, -0.000660f, -0.000083f, +0.000307f, +0.000392f, + +0.000396f, +0.000216f, +0.000206f, +0.000183f, +0.000136f, +0.000452f, +0.000097f, -0.000141f, -0.000083f, -0.000154f, + +0.000153f, +0.000152f, +0.000106f, -0.000035f, -0.000150f, -0.000005f, +0.000071f, -0.000066f, -0.000087f, -0.000088f, + -0.000026f, +0.000005f, +0.000035f, +0.000131f, +0.000052f, -0.000067f, +0.000047f, -0.000020f, +0.000006f, +0.000013f, + -0.000022f, +0.000123f, -0.000008f, +0.000036f, +0.000023f, +0.000001f + }, + { + -0.013345f, +0.011591f, +0.009666f, +0.001906f, -0.001908f, -0.000902f, +0.000171f, +0.000151f, +0.000619f, -0.000534f, + +0.000430f, +0.001176f, +0.001230f, -0.001838f, +0.000308f, +0.001069f, -0.002715f, -0.000284f, -0.000210f, +0.000092f, + -0.000684f, -0.000484f, +0.000453f, +0.000287f, +0.000789f, -0.000584f, +0.000457f, +0.000992f, +0.001703f, -0.000799f, + -0.000356f, -0.000840f, -0.000191f, -0.000345f, +0.000767f, -0.000589f, +0.001708f, +0.000903f, -0.002773f, -0.001132f, + +0.001301f, -0.001085f, -0.000656f, +0.000065f, -0.000070f, -0.000330f, -0.000709f, -0.001098f, +0.000402f, +0.000384f, + -0.000394f, -0.000392f, +0.000293f, -0.000134f, -0.000121f, -0.000177f, -0.000135f, -0.000343f, -0.000313f, +0.000229f, + +0.000719f, +0.000226f, -0.000007f, +0.000156f, +0.000324f, +0.000515f, +0.000252f, +0.000066f, -0.000054f, -0.000225f, + -0.000033f, +0.000156f, -0.000095f, -0.000294f, -0.000065f, +0.000098f, +0.000201f, +0.000094f, +0.000164f, -0.000076f, + +0.000031f, -0.000039f, -0.000022f, -0.000021f, +0.000102f, +0.000003f, -0.000076f, +0.000016f, +0.000030f, -0.000042f, + -0.000093f, -0.000027f, +0.000024f, +0.000038f, -0.000063f, +0.000042f + }, + { + -0.000808f, +0.008320f, -0.002440f, +0.006085f, +0.000946f, +0.000261f, +0.001660f, +0.001069f, +0.000377f, -0.000530f, + -0.002198f, +0.000320f, +0.001663f, +0.001121f, +0.001054f, -0.001139f, -0.001281f, -0.001860f, -0.004317f, -0.002238f, + +0.001921f, +0.000876f, -0.001049f, -0.000402f, -0.000080f, +0.000627f, +0.000658f, -0.000802f, -0.001111f, +0.001195f, + +0.000219f, -0.000280f, +0.000410f, -0.000811f, +0.000872f, +0.001895f, -0.000080f, -0.000707f, +0.000100f, -0.000458f, + -0.000105f, -0.000690f, -0.000129f, +0.000075f, +0.000342f, -0.000566f, -0.000093f, -0.000322f, +0.000231f, -0.000293f, + +0.000176f, -0.000618f, +0.000032f, -0.000400f, -0.000096f, -0.000105f, -0.000369f, +0.000066f, -0.000218f, -0.000287f, + -0.000099f, +0.000089f, +0.000422f, +0.000272f, +0.000063f, +0.000157f, -0.000081f, +0.000109f, -0.000198f, -0.000257f, + +0.000189f, -0.000106f, -0.000092f, -0.000049f, -0.000050f, +0.000058f, -0.000026f, +0.000033f, -0.000025f, +0.000017f, + +0.000039f, +0.000055f, -0.000026f, -0.000083f, +0.000006f, -0.000057f, +0.000016f, +0.000093f, +0.000007f, +0.000011f, + -0.000079f, +0.000068f, -0.000010f, -0.000012f, -0.000017f, -0.000062f + }, + { + -0.008020f, -0.039874f, +0.013333f, +0.003285f, +0.000289f, +0.003033f, -0.016329f, +0.000544f, -0.001403f, +0.001355f, + +0.000040f, -0.000281f, -0.000029f, -0.002265f, +0.002558f, -0.002534f, -0.003157f, -0.002701f, -0.001040f, +0.001185f, + +0.000630f, -0.000129f, +0.000006f, -0.000462f, +0.000382f, +0.000382f, +0.000134f, +0.000263f, +0.000424f, +0.000115f, + -0.001182f, +0.000072f, +0.000146f, -0.000510f, +0.000077f, -0.000706f, -0.000181f, -0.000992f, -0.000001f, -0.000111f, + -0.001033f, -0.000578f, +0.000687f, -0.000147f, +0.000159f, -0.000291f, -0.000041f, -0.000430f, +0.000178f, +0.000025f, + +0.000062f, +0.000348f, -0.000432f, -0.000101f, +0.000365f, -0.000463f, +0.000362f, +0.000022f, -0.000173f, -0.000074f, + -0.000107f, +0.000010f, +0.000014f, +0.000161f, +0.000298f, +0.000005f, +0.000083f, -0.000062f, -0.000019f, -0.000053f, + -0.000003f, +0.000115f, +0.000201f, -0.000159f, -0.000141f, -0.000128f, -0.000016f, -0.000103f, +0.000058f, -0.000048f, + +0.000193f, -0.000027f, +0.000043f, +0.000112f, -0.000060f, -0.000034f, -0.000118f, +0.000031f, -0.000025f, +0.000088f, + +0.000020f, -0.000038f, -0.000022f, +0.000074f, +0.000038f, -0.000056f + }, + { + -0.000434f, -0.010560f, +0.000917f, -0.000686f, +0.000684f, -0.000548f, +0.000234f, +0.000133f, +0.000149f, -0.000106f, + -0.000990f, -0.001070f, -0.003201f, +0.006164f, -0.005613f, +0.002056f, +0.002078f, -0.001847f, -0.002582f, -0.000571f, + +0.001656f, +0.001295f, -0.001470f, -0.000726f, -0.000590f, +0.002384f, +0.000594f, -0.002653f, -0.000426f, -0.000086f, + -0.001799f, +0.000739f, -0.000503f, +0.001855f, -0.000531f, -0.000136f, -0.000296f, +0.000549f, -0.000555f, -0.000305f, + +0.000205f, +0.000421f, +0.000011f, -0.000077f, -0.000086f, -0.000053f, +0.000624f, +0.000288f, -0.000669f, -0.000192f, + +0.000206f, -0.000069f, +0.000294f, -0.000204f, +0.000196f, +0.000244f, +0.000035f, +0.000579f, +0.000356f, +0.000128f, + +0.000274f, -0.000166f, +0.000189f, -0.000049f, +0.000260f, +0.000206f, +0.000110f, +0.000087f, -0.000053f, -0.000012f, + +0.000065f, -0.000008f, -0.000090f, -0.000111f, -0.000158f, -0.000134f, -0.000128f, -0.000217f, -0.000009f, -0.000012f, + -0.000038f, -0.000041f, +0.000020f, +0.000015f, +0.000043f, -0.000030f, +0.000086f, +0.000095f, +0.000033f, +0.000013f, + -0.000045f, -0.000013f, -0.000004f, -0.000010f, +0.000033f, -0.000068f + }, + { + -0.002315f, -0.001648f, -0.005339f, -0.006079f, +0.000308f, -0.001397f, -0.005273f, +0.001362f, +0.001483f, +0.000593f, + -0.001526f, -0.000105f, +0.004530f, +0.001890f, +0.000164f, +0.000951f, +0.001986f, -0.001161f, -0.002044f, -0.000528f, + +0.000518f, -0.000240f, -0.000459f, +0.000077f, -0.000746f, +0.001093f, +0.000304f, -0.000107f, -0.000848f, +0.000300f, + +0.000108f, -0.000259f, +0.000505f, +0.000850f, +0.000487f, +0.000674f, +0.000104f, -0.000129f, +0.000698f, -0.000087f, + -0.000374f, +0.000319f, -0.000351f, +0.001329f, +0.000133f, +0.000223f, +0.000172f, +0.000281f, +0.000245f, -0.000504f, + -0.000222f, -0.000093f, -0.000512f, +0.000324f, -0.000369f, -0.000183f, -0.000110f, -0.000077f, +0.000217f, +0.000107f, + -0.000192f, -0.000020f, +0.000189f, -0.000291f, -0.000058f, -0.000081f, +0.000148f, +0.000033f, +0.000203f, -0.000018f, + -0.000075f, +0.000170f, +0.000074f, -0.000018f, -0.000136f, +0.000197f, +0.000075f, -0.000019f, +0.000116f, -0.000064f, + -0.000067f, +0.000161f, +0.000117f, +0.000043f, -0.000240f, -0.000161f, +0.000063f, +0.000141f, -0.000003f, +0.000063f, + +0.000020f, +0.000051f, -0.000028f, -0.000085f, -0.000046f, -0.000132f + }, + { + -0.000839f, +0.002325f, +0.000080f, -0.001401f, +0.000055f, -0.000849f, -0.001116f, -0.000227f, -0.000442f, -0.000931f, + -0.000791f, -0.001176f, +0.001304f, -0.001485f, -0.016081f, +0.000533f, -0.000304f, +0.001190f, +0.001349f, +0.001473f, + +0.000567f, +0.000353f, -0.000485f, +0.001436f, +0.000532f, +0.001702f, +0.000854f, +0.000107f, -0.003856f, +0.001165f, + +0.001009f, +0.001395f, -0.000063f, +0.000598f, -0.000342f, -0.000530f, -0.000428f, +0.000135f, -0.000082f, +0.000446f, + +0.000613f, -0.000888f, -0.000153f, -0.000088f, -0.000520f, -0.000332f, +0.000320f, -0.000596f, -0.000228f, -0.000610f, + +0.000032f, -0.000152f, -0.000039f, +0.000086f, +0.000181f, -0.000040f, +0.000234f, +0.000182f, +0.000076f, +0.000514f, + -0.000056f, -0.000403f, +0.000086f, -0.000061f, -0.000113f, -0.000016f, +0.000045f, -0.000091f, -0.000006f, +0.000020f, + -0.000083f, +0.000370f, +0.000066f, +0.000036f, -0.000018f, +0.000110f, +0.000022f, +0.000308f, -0.000107f, -0.000077f, + -0.000023f, -0.000131f, +0.000099f, +0.000014f, +0.000011f, +0.000112f, +0.000070f, +0.000034f, -0.000086f, +0.000058f, + -0.000093f, -0.000131f, -0.000065f, +0.000080f, -0.000009f, -0.000061f + }, + { + -0.005050f, +0.008647f, +0.001695f, +0.002175f, +0.001104f, -0.002890f, -0.002048f, -0.000882f, +0.000948f, +0.001535f, + -0.000365f, +0.002025f, -0.002218f, +0.000708f, +0.011507f, +0.000374f, -0.004569f, +0.003385f, -0.002589f, -0.000669f, + -0.000548f, +0.001065f, +0.000545f, +0.000137f, +0.000859f, -0.000068f, +0.002398f, +0.001266f, -0.000054f, -0.000771f, + -0.000595f, -0.000014f, -0.000292f, -0.001067f, +0.000937f, +0.001077f, +0.001700f, +0.000140f, +0.000510f, +0.000903f, + +0.001002f, +0.000348f, -0.000150f, +0.000513f, +0.000410f, +0.000196f, +0.001217f, +0.000335f, +0.000216f, +0.000032f, + -0.000386f, -0.000128f, -0.000337f, -0.000250f, -0.000302f, -0.000198f, +0.000001f, -0.000140f, -0.000461f, +0.000072f, + -0.000132f, -0.000091f, -0.000058f, +0.000238f, +0.000133f, +0.000061f, +0.000030f, -0.000041f, -0.000083f, +0.000097f, + -0.000000f, +0.000122f, +0.000246f, -0.000285f, -0.000095f, -0.000048f, +0.000090f, +0.000028f, -0.000037f, -0.000087f, + +0.000160f, -0.000028f, +0.000012f, +0.000065f, +0.000002f, +0.000003f, +0.000056f, -0.000062f, -0.000156f, +0.000082f, + +0.000015f, +0.000047f, +0.000036f, +0.000038f, +0.000035f, -0.000062f + } + }, + { + { + -0.000859f, +0.009238f, +0.005591f, +0.000521f, -0.001055f, -0.000420f, +0.000314f, +0.000145f, +0.000133f, -0.001206f, + +0.000445f, +0.000860f, +0.002071f, +0.001420f, -0.001762f, -0.001434f, +0.004912f, -0.001191f, -0.000879f, +0.002460f, + -0.000136f, -0.003493f, -0.000125f, -0.000784f, -0.000978f, +0.000236f, +0.000421f, -0.000372f, +0.000026f, -0.001125f, + -0.000670f, +0.000553f, -0.001433f, +0.002012f, -0.000069f, -0.000348f, +0.000228f, -0.001758f, -0.000210f, -0.001211f, + +0.000492f, -0.000565f, +0.001524f, -0.000398f, +0.000585f, +0.000406f, +0.000369f, +0.000590f, +0.000529f, -0.000197f, + -0.000827f, +0.000180f, -0.000234f, -0.000407f, -0.000015f, +0.000138f, +0.000101f, +0.000065f, +0.000298f, -0.000433f, + +0.000009f, -0.000343f, +0.000131f, +0.000227f, +0.000047f, -0.000103f, +0.000105f, +0.000157f, -0.000233f, +0.000123f, + +0.000012f, -0.000020f, +0.000083f, +0.000108f, -0.000059f, +0.000056f, +0.000026f, +0.000012f, -0.000031f, +0.000068f, + -0.000125f, -0.000056f, -0.000133f, -0.000056f, -0.000026f, +0.000107f, +0.000121f, -0.000035f, +0.000005f, +0.000101f, + +0.000002f, -0.000036f, -0.000036f, +0.000079f, +0.000061f, +0.000051f + }, + { + -0.006875f, +0.113664f, +0.016929f, -0.001482f, +0.001689f, -0.000689f, +0.001401f, +0.001354f, -0.000623f, -0.000064f, + +0.000074f, -0.001145f, +0.000391f, +0.000700f, +0.001716f, +0.003109f, +0.001840f, +0.001093f, -0.000653f, +0.000179f, + -0.000418f, +0.000452f, -0.000203f, -0.000803f, +0.000064f, +0.000347f, +0.000476f, +0.000332f, -0.000470f, -0.000386f, + +0.001321f, +0.000544f, +0.001030f, +0.001091f, +0.000003f, -0.001060f, +0.001019f, +0.000413f, +0.000515f, +0.000394f, + +0.000394f, -0.000017f, -0.000495f, -0.000260f, +0.000138f, +0.000007f, +0.000162f, +0.000521f, -0.000059f, -0.000624f, + +0.000295f, +0.000174f, -0.000258f, -0.000084f, +0.000208f, +0.000031f, -0.000248f, -0.000391f, +0.000128f, -0.000198f, + -0.000237f, -0.000130f, +0.000098f, -0.000093f, +0.000284f, -0.000149f, -0.000075f, -0.000162f, -0.000091f, +0.000229f, + -0.000018f, +0.000031f, +0.000023f, -0.000075f, +0.000140f, -0.000006f, -0.000119f, +0.000071f, +0.000130f, -0.000060f, + -0.000050f, -0.000010f, -0.000009f, -0.000089f, -0.000063f, +0.000161f, -0.000017f, -0.000044f, -0.000021f, -0.000030f, + +0.000087f, +0.000039f, -0.000024f, +0.000016f, -0.000017f, -0.000000f + }, + { + -0.004013f, +0.082676f, +0.000797f, +0.001880f, -0.003681f, +0.000714f, +0.000020f, +0.000118f, +0.000623f, +0.000035f, + -0.001089f, -0.000463f, -0.000924f, +0.001837f, -0.000021f, -0.000482f, -0.002714f, +0.000444f, +0.000327f, -0.000026f, + +0.002062f, -0.000619f, -0.000742f, -0.001274f, -0.000219f, -0.000775f, +0.001080f, +0.000725f, +0.000780f, -0.000054f, + -0.001703f, -0.000055f, -0.001154f, -0.000525f, -0.000203f, +0.000119f, +0.000155f, +0.000842f, +0.000068f, +0.000100f, + -0.000757f, +0.000265f, +0.001079f, -0.000514f, -0.000328f, +0.000972f, +0.000599f, -0.000495f, -0.000302f, -0.000538f, + +0.000118f, +0.000244f, +0.000205f, -0.000306f, +0.001003f, -0.000482f, -0.000239f, +0.000257f, +0.000290f, +0.000019f, + -0.000235f, -0.000249f, +0.000088f, +0.000009f, -0.000252f, -0.000027f, -0.000254f, +0.000094f, -0.000053f, -0.000202f, + -0.000113f, +0.000048f, +0.000041f, -0.000076f, +0.000135f, -0.000082f, +0.000071f, -0.000076f, +0.000155f, -0.000061f, + -0.000122f, -0.000118f, +0.000006f, +0.000024f, -0.000012f, +0.000094f, -0.000006f, +0.000018f, -0.000006f, +0.000059f, + -0.000075f, -0.000001f, -0.000017f, +0.000011f, +0.000016f, -0.000016f + }, + { + +0.000758f, +0.005444f, -0.001330f, -0.000188f, -0.000041f, +0.000349f, -0.000131f, -0.000046f, +0.000060f, -0.000060f, + +0.000494f, +0.000027f, +0.000491f, +0.001539f, +0.009097f, +0.000473f, -0.000749f, +0.001907f, +0.000896f, -0.001878f, + +0.000842f, +0.000267f, +0.001044f, +0.002017f, +0.000260f, +0.001705f, +0.003499f, -0.000393f, +0.000289f, +0.002108f, + -0.001286f, -0.000787f, -0.000597f, +0.000070f, -0.000278f, +0.000538f, +0.000667f, +0.000200f, -0.000368f, -0.000083f, + -0.000116f, -0.000574f, +0.000171f, +0.000535f, +0.000167f, -0.000138f, -0.000756f, +0.000392f, +0.000075f, -0.000453f, + -0.000041f, -0.000467f, -0.000331f, -0.000121f, -0.000022f, -0.000112f, +0.000045f, -0.000118f, +0.000011f, +0.000144f, + -0.000097f, -0.000297f, -0.000074f, -0.000100f, -0.000053f, -0.000019f, -0.000016f, -0.000081f, -0.000187f, +0.000001f, + +0.000212f, +0.000085f, +0.000067f, -0.000192f, +0.000262f, -0.000023f, -0.000095f, -0.000002f, -0.000060f, +0.000047f, + +0.000097f, -0.000049f, -0.000007f, -0.000054f, -0.000024f, +0.000071f, -0.000017f, -0.000044f, -0.000103f, +0.000043f, + +0.000071f, -0.000066f, -0.000081f, -0.000014f, -0.000016f, -0.000062f + }, + { + -0.012567f, +0.029668f, -0.003540f, -0.004273f, +0.000547f, -0.000006f, +0.000098f, +0.000141f, +0.001230f, -0.000683f, + -0.002032f, -0.000512f, +0.000865f, -0.000235f, -0.001160f, +0.000201f, +0.000359f, -0.001655f, -0.000193f, +0.000632f, + +0.000539f, -0.000326f, +0.001021f, +0.001091f, +0.000042f, +0.000081f, -0.000630f, +0.000400f, +0.001347f, +0.000880f, + -0.000248f, -0.000511f, -0.000639f, -0.000422f, -0.000101f, +0.000844f, -0.000678f, +0.000299f, -0.000405f, +0.000132f, + +0.000676f, -0.000505f, +0.000367f, -0.000567f, +0.000367f, -0.000675f, -0.000240f, -0.000268f, -0.000474f, -0.000154f, + -0.000162f, +0.000188f, +0.000198f, -0.000211f, +0.000116f, -0.000149f, +0.000083f, -0.000184f, +0.000327f, -0.000055f, + +0.000324f, +0.000405f, -0.000036f, +0.000045f, +0.000104f, -0.000182f, -0.000057f, +0.000079f, +0.000038f, -0.000059f, + +0.000092f, +0.000065f, +0.000169f, +0.000009f, -0.000149f, +0.000047f, -0.000094f, -0.000095f, +0.000043f, -0.000078f, + +0.000086f, +0.000006f, +0.000017f, -0.000009f, +0.000042f, +0.000003f, +0.000008f, +0.000058f, +0.000059f, +0.000028f, + +0.000033f, +0.000039f, +0.000044f, +0.000019f, -0.000038f, -0.000032f + }, + { + +0.000256f, -0.007825f, +0.003786f, +0.000253f, +0.000152f, +0.000032f, -0.000304f, -0.000078f, -0.000263f, +0.000077f, + +0.000794f, +0.000238f, +0.000040f, +0.001489f, +0.008666f, -0.003043f, +0.000102f, +0.000200f, -0.001957f, -0.003857f, + +0.000504f, -0.000027f, -0.000446f, -0.002383f, +0.002172f, +0.000843f, -0.002552f, +0.001830f, -0.001621f, -0.000059f, + -0.000811f, -0.000563f, +0.000035f, -0.000038f, +0.000382f, +0.000039f, -0.000065f, +0.000167f, +0.000767f, +0.000435f, + -0.000221f, +0.000896f, +0.000236f, -0.000250f, -0.000648f, +0.000043f, +0.000361f, +0.000508f, -0.000207f, -0.000156f, + -0.000253f, -0.000020f, -0.000039f, +0.000285f, -0.000257f, +0.000019f, +0.000288f, +0.000170f, +0.000058f, +0.000039f, + -0.000136f, -0.000031f, +0.000002f, -0.000050f, -0.000073f, -0.000106f, -0.000039f, +0.000048f, +0.000017f, +0.000138f, + +0.000096f, -0.000075f, +0.000123f, -0.000029f, -0.000114f, -0.000131f, -0.000030f, -0.000148f, +0.000040f, +0.000183f, + -0.000065f, -0.000022f, +0.000057f, -0.000078f, +0.000021f, +0.000010f, -0.000001f, +0.000010f, -0.000008f, +0.000006f, + +0.000083f, -0.000034f, -0.000073f, -0.000014f, +0.000010f, +0.000053f + }, + { + -0.017516f, +0.025808f, +0.009796f, +0.000743f, -0.001017f, +0.000106f, -0.000053f, -0.000026f, -0.000148f, +0.001102f, + +0.000199f, +0.000120f, -0.000338f, -0.000055f, -0.000371f, -0.000054f, +0.001123f, -0.000741f, +0.000834f, -0.000285f, + +0.000829f, +0.000092f, -0.000643f, +0.000585f, -0.000167f, -0.000087f, -0.000405f, -0.000355f, +0.000332f, +0.000536f, + +0.000191f, -0.000857f, -0.000192f, -0.000319f, -0.000057f, +0.000761f, -0.000526f, +0.000547f, +0.000020f, +0.000329f, + +0.000571f, -0.000227f, +0.000544f, +0.000730f, -0.000047f, -0.000418f, +0.000484f, +0.000571f, -0.000448f, +0.000396f, + +0.000284f, -0.000118f, +0.000378f, -0.000123f, -0.000126f, -0.000196f, -0.000094f, +0.000159f, -0.000298f, -0.000036f, + +0.000210f, +0.000206f, +0.000067f, -0.000087f, -0.000077f, -0.000140f, -0.000279f, +0.000248f, +0.000161f, -0.000167f, + +0.000162f, +0.000138f, -0.000271f, -0.000048f, -0.000042f, +0.000026f, -0.000028f, -0.000025f, +0.000057f, -0.000100f, + +0.000059f, -0.000001f, -0.000063f, -0.000079f, +0.000195f, -0.000090f, -0.000021f, +0.000019f, +0.000051f, +0.000017f, + -0.000128f, +0.000062f, -0.000020f, +0.000060f, +0.000020f, +0.000006f + }, + { + -0.000159f, -0.001417f, -0.001709f, +0.001439f, +0.000121f, +0.000166f, -0.000149f, +0.000267f, +0.000471f, -0.000005f, + +0.000909f, -0.000045f, +0.000388f, -0.000257f, +0.008103f, +0.005034f, -0.001720f, -0.001130f, -0.000106f, -0.002058f, + +0.001846f, +0.000658f, +0.001225f, -0.000091f, -0.004199f, -0.000048f, -0.002193f, -0.000407f, -0.002019f, +0.000619f, + +0.000373f, +0.000583f, +0.000425f, -0.000948f, +0.000332f, -0.000026f, +0.000103f, -0.000167f, -0.001023f, -0.000188f, + -0.000335f, +0.000205f, -0.000314f, +0.000308f, +0.000030f, -0.000385f, -0.000452f, +0.000036f, +0.000417f, -0.000433f, + -0.000300f, -0.000568f, +0.000218f, -0.000321f, +0.000002f, -0.000167f, -0.000230f, +0.000369f, +0.000390f, -0.000240f, + -0.000007f, -0.000008f, +0.000150f, +0.000076f, +0.000012f, +0.000287f, -0.000048f, -0.000074f, +0.000008f, -0.000084f, + -0.000059f, -0.000036f, +0.000093f, -0.000047f, -0.000158f, +0.000061f, -0.000113f, -0.000143f, -0.000035f, -0.000024f, + +0.000180f, +0.000045f, -0.000060f, +0.000029f, +0.000009f, -0.000004f, -0.000028f, +0.000059f, -0.000008f, -0.000093f, + -0.000011f, +0.000028f, +0.000015f, +0.000052f, -0.000005f, +0.000012f + }, + { + +0.005441f, +0.018446f, -0.006755f, +0.001242f, -0.001224f, -0.000407f, +0.000585f, +0.001355f, -0.000184f, -0.001067f, + +0.001576f, +0.001491f, +0.000069f, -0.003340f, -0.000368f, +0.000161f, -0.000994f, +0.001494f, +0.000327f, +0.000058f, + -0.000363f, +0.000475f, +0.000060f, -0.000502f, +0.000096f, -0.000701f, +0.000128f, -0.000328f, +0.000458f, +0.000008f, + +0.000997f, +0.000512f, +0.000529f, -0.000535f, +0.000138f, -0.001554f, +0.000136f, +0.000611f, -0.000897f, -0.000192f, + +0.001301f, -0.000675f, -0.000619f, -0.000550f, +0.000024f, -0.000289f, +0.000047f, +0.000405f, +0.000103f, -0.000279f, + -0.000363f, +0.000129f, +0.000724f, +0.000020f, -0.000101f, -0.000003f, -0.000120f, -0.000197f, -0.000200f, +0.000099f, + +0.000197f, -0.000118f, +0.000039f, +0.000157f, +0.000373f, +0.000095f, -0.000263f, -0.000127f, -0.000150f, -0.000158f, + +0.000065f, +0.000112f, -0.000100f, -0.000171f, -0.000212f, +0.000225f, +0.000167f, -0.000143f, +0.000052f, +0.000004f, + -0.000021f, +0.000112f, +0.000089f, +0.000123f, +0.000112f, +0.000096f, -0.000087f, -0.000052f, -0.000039f, +0.000041f, + +0.000095f, +0.000008f, +0.000039f, -0.000009f, -0.000002f, +0.000028f + }, + { + +0.000504f, +0.009593f, -0.003974f, +0.007887f, -0.000525f, -0.002458f, +0.000750f, +0.000086f, -0.000240f, +0.000371f, + -0.000860f, +0.001055f, -0.000901f, +0.000467f, +0.002453f, +0.000669f, -0.001688f, -0.001894f, -0.001765f, -0.000078f, + +0.003171f, +0.000012f, -0.001449f, -0.000732f, -0.000097f, +0.000773f, +0.000935f, -0.001082f, -0.000974f, +0.000578f, + +0.000530f, -0.000423f, +0.000535f, -0.000837f, +0.000837f, +0.001216f, -0.000651f, -0.000541f, +0.000479f, -0.000678f, + +0.000040f, -0.000721f, +0.000202f, +0.000388f, +0.000181f, +0.000119f, +0.000015f, +0.000040f, +0.000308f, -0.000456f, + -0.000047f, -0.000395f, -0.000205f, -0.000158f, +0.000424f, +0.000106f, -0.000262f, +0.000112f, -0.000110f, -0.000107f, + +0.000053f, -0.000032f, +0.000221f, -0.000057f, +0.000050f, +0.000204f, -0.000223f, +0.000032f, -0.000126f, -0.000144f, + +0.000075f, +0.000068f, +0.000128f, -0.000101f, -0.000016f, +0.000076f, +0.000044f, +0.000027f, +0.000015f, +0.000068f, + -0.000011f, -0.000007f, -0.000107f, -0.000077f, -0.000020f, +0.000009f, +0.000050f, +0.000002f, -0.000048f, -0.000085f, + -0.000027f, -0.000028f, -0.000039f, +0.000022f, +0.000015f, -0.000036f + }, + { + +0.008173f, -0.021820f, +0.003651f, -0.006115f, -0.003951f, +0.005815f, -0.007016f, +0.003602f, -0.000732f, +0.000560f, + +0.000214f, -0.000482f, +0.000015f, -0.001518f, +0.003331f, -0.003031f, -0.002500f, -0.000419f, -0.000498f, +0.000611f, + +0.001787f, -0.000049f, +0.000583f, -0.000925f, +0.000159f, +0.000279f, -0.000304f, -0.000221f, -0.000108f, -0.000342f, + -0.001186f, +0.000556f, +0.000181f, -0.000603f, +0.000244f, +0.000227f, +0.000388f, -0.000256f, +0.000175f, -0.001751f, + -0.001104f, +0.000353f, +0.000466f, -0.000139f, -0.000017f, -0.000151f, +0.000378f, -0.000708f, -0.000162f, +0.000412f, + +0.000121f, +0.000044f, -0.000303f, +0.000300f, +0.000365f, -0.000223f, +0.000503f, -0.000203f, +0.000051f, +0.000098f, + -0.000014f, +0.000100f, +0.000072f, +0.000105f, +0.000005f, +0.000025f, +0.000092f, +0.000007f, -0.000023f, +0.000087f, + +0.000023f, -0.000045f, +0.000101f, -0.000180f, +0.000041f, -0.000077f, -0.000006f, +0.000034f, +0.000053f, -0.000038f, + +0.000008f, -0.000092f, +0.000061f, -0.000074f, +0.000009f, -0.000092f, -0.000044f, -0.000017f, -0.000022f, +0.000084f, + -0.000059f, +0.000003f, +0.000078f, +0.000014f, -0.000060f, -0.000009f + }, + { + +0.000230f, -0.009636f, +0.001141f, -0.000110f, +0.000267f, -0.000143f, +0.000546f, +0.000005f, +0.000057f, +0.000026f, + +0.000166f, -0.000527f, -0.002935f, +0.007896f, -0.001128f, +0.000987f, -0.000248f, -0.001994f, -0.000533f, +0.001427f, + +0.001745f, +0.001295f, -0.000372f, +0.000013f, +0.000581f, +0.002968f, +0.001709f, -0.001452f, +0.000101f, -0.001536f, + -0.000379f, +0.001136f, +0.000342f, +0.000552f, -0.000567f, -0.000566f, -0.000649f, +0.000603f, +0.000103f, -0.000456f, + +0.000448f, +0.000454f, -0.000425f, -0.000206f, +0.000113f, -0.000245f, +0.000529f, +0.000014f, -0.000701f, -0.000268f, + +0.000154f, -0.000241f, +0.000033f, -0.000211f, +0.000235f, +0.000186f, +0.000056f, +0.000574f, +0.000008f, +0.000044f, + -0.000233f, -0.000153f, +0.000137f, +0.000060f, +0.000065f, -0.000184f, +0.000153f, -0.000149f, +0.000025f, +0.000131f, + -0.000023f, -0.000145f, -0.000147f, -0.000090f, -0.000085f, -0.000058f, -0.000049f, -0.000012f, +0.000075f, +0.000061f, + +0.000009f, -0.000000f, +0.000088f, +0.000060f, +0.000014f, +0.000049f, +0.000087f, +0.000007f, -0.000025f, +0.000035f, + -0.000008f, -0.000031f, -0.000026f, +0.000063f, +0.000049f, -0.000098f + }, + { + +0.000140f, +0.006079f, +0.000181f, -0.002460f, -0.000031f, -0.001807f, -0.003154f, +0.001835f, +0.001250f, +0.000023f, + -0.000440f, +0.000293f, -0.000667f, -0.004871f, -0.000647f, +0.001531f, +0.001452f, +0.000286f, -0.000296f, -0.001624f, + +0.001160f, +0.000224f, +0.000110f, +0.000051f, -0.001484f, -0.000511f, +0.000324f, +0.000286f, -0.000135f, +0.000326f, + -0.000480f, -0.000047f, +0.000329f, +0.000247f, -0.000366f, +0.000233f, +0.000041f, -0.000435f, +0.000023f, -0.000386f, + +0.000031f, +0.000771f, -0.001071f, +0.000748f, -0.000372f, +0.000213f, -0.000458f, +0.000449f, +0.000010f, +0.000003f, + -0.000178f, -0.000193f, -0.000428f, -0.000129f, -0.000132f, -0.000209f, +0.000165f, +0.000246f, +0.000411f, -0.000146f, + -0.000229f, +0.000194f, +0.000403f, -0.000277f, +0.000048f, -0.000036f, +0.000176f, +0.000022f, -0.000141f, -0.000010f, + +0.000213f, +0.000116f, -0.000151f, +0.000034f, -0.000095f, +0.000130f, +0.000062f, -0.000114f, +0.000062f, -0.000060f, + +0.000059f, +0.000053f, -0.000055f, +0.000005f, -0.000106f, +0.000067f, +0.000142f, +0.000107f, +0.000013f, +0.000042f, + +0.000003f, -0.000012f, -0.000127f, -0.000021f, -0.000077f, -0.000089f + }, + { + +0.000491f, +0.002327f, -0.003068f, -0.001254f, +0.000700f, +0.000072f, -0.000293f, +0.000173f, -0.000182f, +0.000282f, + +0.000177f, -0.000058f, +0.000184f, +0.012208f, +0.003394f, +0.000769f, +0.000201f, +0.002247f, +0.001582f, -0.001216f, + -0.000425f, +0.000728f, -0.000036f, +0.000382f, +0.001634f, +0.001586f, -0.000562f, +0.000260f, -0.000438f, +0.001250f, + -0.000348f, +0.000555f, -0.000834f, +0.000051f, +0.000336f, +0.000129f, -0.000234f, +0.000077f, -0.000456f, +0.000389f, + +0.000026f, -0.001118f, -0.000032f, +0.000447f, +0.000122f, +0.000177f, +0.000235f, -0.000014f, +0.000125f, -0.000076f, + +0.000153f, +0.000003f, +0.000184f, +0.000184f, +0.000049f, -0.000079f, +0.000204f, +0.000007f, -0.000226f, +0.000427f, + -0.000442f, -0.000289f, +0.000063f, +0.000037f, -0.000084f, +0.000306f, +0.000108f, -0.000080f, +0.000028f, +0.000054f, + +0.000016f, +0.000254f, -0.000136f, -0.000024f, -0.000058f, +0.000008f, +0.000108f, +0.000040f, +0.000007f, -0.000082f, + -0.000097f, -0.000022f, +0.000068f, +0.000066f, +0.000050f, +0.000053f, +0.000011f, -0.000051f, +0.000017f, +0.000031f, + -0.000150f, -0.000019f, +0.000043f, -0.000000f, -0.000061f, +0.000005f + }, + { + +0.000289f, +0.015173f, -0.003839f, -0.004517f, -0.000604f, -0.002047f, +0.001186f, -0.000317f, +0.000495f, +0.000441f, + -0.004172f, +0.001514f, -0.000467f, -0.003936f, +0.000508f, -0.001122f, -0.002390f, +0.002427f, -0.002444f, +0.000636f, + +0.000185f, +0.000698f, +0.000331f, -0.000618f, +0.000940f, -0.000150f, +0.000947f, -0.000491f, -0.000149f, +0.000475f, + -0.000652f, -0.000451f, -0.000200f, -0.000804f, +0.000878f, +0.000208f, +0.001241f, -0.000448f, +0.000311f, +0.000776f, + -0.000362f, +0.000055f, +0.000541f, +0.000714f, -0.000019f, -0.000004f, +0.000283f, -0.000709f, -0.000528f, +0.000019f, + -0.000331f, +0.000006f, -0.000055f, +0.000216f, -0.000199f, -0.000070f, +0.000078f, -0.000075f, +0.000060f, +0.000235f, + -0.000126f, +0.000061f, +0.000073f, +0.000308f, +0.000065f, +0.000209f, -0.000037f, -0.000061f, -0.000144f, +0.000059f, + -0.000011f, -0.000042f, +0.000085f, -0.000213f, +0.000086f, -0.000044f, +0.000133f, +0.000012f, -0.000075f, +0.000019f, + +0.000082f, -0.000146f, +0.000055f, +0.000062f, -0.000068f, -0.000103f, +0.000012f, -0.000096f, -0.000023f, +0.000052f, + -0.000031f, +0.000028f, -0.000024f, -0.000027f, +0.000042f, -0.000022f + } + }, + { + { + +0.001003f, +0.016549f, +0.001360f, +0.000590f, -0.000599f, -0.000138f, -0.000286f, +0.000023f, +0.000158f, -0.000603f, + +0.001994f, +0.000452f, +0.003645f, +0.001926f, -0.006272f, +0.001344f, +0.001871f, +0.001104f, +0.001742f, -0.000742f, + -0.000571f, +0.000343f, +0.000857f, +0.000040f, -0.000488f, -0.000374f, -0.000850f, +0.000268f, +0.000535f, -0.000365f, + -0.000581f, +0.000405f, +0.002007f, -0.000320f, -0.000289f, -0.000346f, -0.000370f, -0.002064f, -0.001816f, -0.001096f, + +0.000763f, +0.000492f, +0.000153f, +0.000265f, +0.000491f, +0.000431f, -0.000089f, +0.000370f, -0.000146f, +0.000187f, + -0.000036f, -0.000041f, -0.000101f, -0.000257f, +0.000145f, +0.000033f, -0.000338f, +0.000068f, -0.000341f, +0.000075f, + +0.000023f, -0.000058f, +0.000272f, +0.000230f, +0.000064f, +0.000138f, +0.000160f, -0.000118f, +0.000167f, +0.000262f, + +0.000008f, -0.000194f, +0.000034f, +0.000064f, +0.000029f, +0.000009f, -0.000103f, +0.000023f, +0.000106f, +0.000061f, + -0.000140f, -0.000080f, +0.000066f, +0.000119f, +0.000094f, +0.000006f, +0.000007f, -0.000007f, +0.000030f, -0.000006f, + -0.000007f, +0.000003f, -0.000050f, +0.000052f, -0.000004f, -0.000064f + }, + { + +0.009707f, +0.113708f, -0.000805f, -0.001305f, -0.002151f, -0.000155f, +0.000581f, -0.001095f, -0.001610f, -0.000399f, + -0.000299f, -0.000785f, -0.000499f, +0.002095f, +0.002070f, -0.000120f, +0.000230f, +0.000285f, +0.002162f, -0.000217f, + -0.000073f, -0.000475f, -0.000777f, -0.000437f, -0.000092f, +0.001173f, -0.001210f, -0.000066f, -0.000293f, +0.000154f, + +0.000899f, +0.001843f, +0.000167f, -0.000328f, +0.000390f, +0.000134f, +0.000954f, -0.000912f, +0.000419f, -0.000506f, + -0.000287f, +0.000140f, +0.000716f, -0.000011f, +0.000070f, +0.000045f, -0.000102f, +0.000035f, -0.000546f, +0.000047f, + +0.000102f, +0.000186f, +0.000241f, +0.000004f, +0.000223f, -0.000098f, -0.000123f, +0.000036f, -0.000088f, -0.000034f, + +0.000002f, +0.000050f, -0.000124f, +0.000022f, -0.000114f, -0.000183f, -0.000036f, -0.000096f, +0.000199f, +0.000112f, + -0.000039f, -0.000074f, -0.000165f, +0.000052f, +0.000030f, -0.000127f, +0.000076f, -0.000094f, -0.000061f, -0.000054f, + +0.000089f, +0.000019f, -0.000108f, -0.000022f, +0.000132f, -0.000050f, -0.000064f, +0.000118f, -0.000053f, -0.000018f, + +0.000007f, +0.000020f, +0.000057f, +0.000035f, -0.000026f, -0.000000f + }, + { + +0.003454f, +0.061391f, +0.004275f, +0.003763f, +0.003032f, -0.000029f, +0.000424f, -0.000029f, +0.000223f, -0.000660f, + -0.001278f, -0.001341f, -0.000669f, -0.002987f, +0.002527f, +0.000748f, -0.001728f, -0.000576f, +0.000043f, +0.000961f, + -0.000000f, -0.000439f, +0.000216f, -0.002010f, +0.000453f, +0.000509f, +0.000861f, -0.000472f, +0.000396f, +0.000051f, + -0.000714f, -0.001105f, +0.000540f, -0.000099f, -0.001587f, +0.000216f, +0.000226f, +0.001179f, -0.000326f, +0.000039f, + -0.000613f, +0.000444f, +0.000887f, +0.000189f, +0.000211f, +0.000346f, -0.000597f, +0.000107f, -0.000019f, -0.000089f, + +0.000094f, -0.000193f, -0.000057f, +0.000282f, +0.000168f, +0.000147f, -0.000062f, +0.000436f, +0.000118f, -0.000061f, + -0.000122f, +0.000112f, +0.000397f, +0.000000f, -0.000015f, -0.000039f, -0.000029f, -0.000082f, +0.000008f, +0.000082f, + +0.000001f, -0.000050f, +0.000081f, +0.000088f, +0.000100f, -0.000059f, +0.000088f, -0.000040f, -0.000064f, -0.000077f, + -0.000136f, -0.000040f, +0.000057f, +0.000068f, -0.000090f, -0.000013f, -0.000019f, -0.000084f, +0.000025f, -0.000075f, + +0.000001f, +0.000065f, +0.000041f, +0.000033f, +0.000039f, -0.000047f + }, + { + -0.000583f, +0.003263f, +0.000864f, +0.000383f, +0.000471f, -0.000185f, +0.000070f, -0.000237f, -0.000118f, -0.000104f, + +0.000557f, +0.000328f, -0.000551f, +0.000824f, +0.008967f, +0.002790f, -0.002236f, -0.000744f, +0.000453f, -0.000244f, + -0.000685f, +0.000123f, +0.001872f, +0.001003f, +0.001938f, +0.001677f, +0.000859f, +0.001084f, +0.000045f, +0.001979f, + -0.001851f, -0.001864f, +0.001054f, -0.000570f, -0.000583f, -0.000433f, +0.002627f, -0.000482f, -0.000003f, -0.000010f, + -0.000209f, +0.000150f, -0.000277f, +0.000338f, -0.000565f, +0.000169f, -0.000109f, +0.000095f, +0.000306f, +0.000083f, + -0.000434f, -0.000627f, +0.000036f, -0.000141f, +0.000225f, +0.000172f, -0.000269f, -0.000217f, +0.000108f, -0.000128f, + -0.000158f, -0.000203f, -0.000018f, -0.000096f, +0.000078f, +0.000139f, -0.000033f, -0.000189f, +0.000135f, +0.000106f, + -0.000147f, -0.000162f, -0.000007f, +0.000114f, +0.000102f, +0.000057f, +0.000051f, +0.000099f, +0.000157f, -0.000030f, + +0.000039f, +0.000043f, +0.000038f, -0.000038f, +0.000034f, -0.000070f, -0.000058f, +0.000047f, +0.000026f, +0.000065f, + -0.000004f, -0.000004f, +0.000079f, +0.000051f, -0.000032f, +0.000027f + }, + { + +0.009484f, -0.001684f, -0.004088f, -0.002611f, -0.000211f, +0.000287f, +0.000732f, +0.000236f, +0.000391f, -0.001443f, + -0.001129f, +0.000758f, -0.001101f, +0.000285f, -0.001171f, -0.000442f, -0.000479f, -0.000784f, +0.000817f, -0.000028f, + +0.000101f, -0.000163f, +0.000863f, +0.000679f, -0.000806f, +0.000593f, +0.000397f, -0.000249f, +0.001142f, +0.000639f, + -0.000808f, +0.000241f, -0.001120f, +0.000207f, -0.000057f, +0.000312f, -0.001501f, -0.001087f, -0.000239f, +0.000564f, + -0.000432f, -0.000194f, +0.000062f, +0.000267f, -0.000604f, -0.000103f, +0.000129f, -0.000483f, -0.000173f, -0.000256f, + +0.000180f, +0.000151f, +0.000429f, -0.000143f, -0.000232f, -0.000004f, -0.000067f, -0.000232f, -0.000274f, +0.000074f, + +0.000333f, +0.000265f, -0.000026f, +0.000048f, +0.000095f, -0.000004f, -0.000065f, -0.000041f, +0.000024f, +0.000206f, + +0.000017f, -0.000131f, -0.000094f, -0.000085f, -0.000005f, +0.000022f, +0.000062f, +0.000052f, -0.000011f, +0.000020f, + +0.000076f, +0.000112f, +0.000031f, +0.000029f, -0.000098f, -0.000049f, +0.000080f, +0.000002f, -0.000047f, +0.000003f, + +0.000016f, -0.000042f, +0.000002f, -0.000068f, -0.000078f, +0.000006f + }, + { + -0.000646f, -0.000152f, +0.001641f, -0.000463f, +0.000070f, -0.000166f, -0.000059f, -0.000018f, -0.000148f, +0.000417f, + +0.000056f, -0.000163f, -0.000131f, -0.001030f, +0.004321f, -0.000703f, +0.001457f, -0.001242f, +0.001495f, -0.000437f, + -0.001822f, -0.002108f, -0.000312f, +0.000623f, -0.001027f, +0.000479f, -0.001350f, +0.000759f, -0.002058f, -0.002057f, + +0.001179f, -0.000716f, +0.000415f, +0.000634f, +0.001190f, -0.000107f, +0.000484f, +0.001043f, +0.000584f, -0.000203f, + +0.000297f, +0.000863f, -0.000101f, -0.000195f, +0.000047f, +0.000128f, -0.000014f, +0.000295f, -0.000564f, -0.000350f, + +0.000016f, +0.000365f, -0.000257f, -0.000022f, -0.000018f, +0.000078f, +0.000145f, +0.000209f, -0.000043f, +0.000039f, + -0.000122f, -0.000084f, +0.000037f, -0.000011f, -0.000016f, -0.000029f, -0.000055f, -0.000148f, +0.000001f, -0.000033f, + +0.000083f, +0.000227f, +0.000082f, -0.000006f, -0.000076f, +0.000006f, +0.000124f, +0.000094f, +0.000144f, -0.000011f, + -0.000008f, +0.000045f, +0.000002f, -0.000084f, -0.000017f, +0.000032f, +0.000012f, -0.000010f, +0.000024f, +0.000056f, + -0.000034f, -0.000103f, +0.000022f, +0.000057f, +0.000039f, +0.000015f + }, + { + +0.006157f, +0.008677f, -0.001088f, -0.000467f, +0.000094f, +0.000349f, -0.000100f, +0.000442f, +0.000428f, -0.000325f, + +0.000651f, -0.000254f, +0.000173f, +0.000988f, -0.001536f, +0.000716f, +0.000937f, +0.000401f, -0.000003f, -0.001212f, + -0.000353f, +0.000315f, -0.000113f, -0.000227f, +0.000149f, -0.000880f, +0.000180f, -0.000025f, -0.000422f, +0.000056f, + -0.000112f, +0.000081f, -0.000466f, +0.000354f, +0.000416f, +0.000302f, +0.000300f, -0.000238f, -0.000386f, +0.000654f, + +0.000230f, +0.000268f, +0.000285f, +0.000002f, +0.000617f, -0.000737f, +0.000207f, -0.000279f, +0.000323f, +0.000149f, + -0.000125f, -0.000043f, -0.000323f, +0.000043f, -0.000103f, +0.000089f, +0.000229f, +0.000005f, +0.000228f, +0.000164f, + +0.000328f, +0.000049f, +0.000172f, -0.000131f, -0.000120f, -0.000074f, +0.000156f, +0.000050f, +0.000024f, -0.000013f, + +0.000032f, -0.000144f, +0.000008f, +0.000147f, -0.000063f, -0.000067f, +0.000021f, +0.000076f, -0.000023f, +0.000034f, + +0.000062f, -0.000086f, +0.000023f, +0.000060f, -0.000042f, -0.000092f, +0.000117f, +0.000084f, -0.000027f, -0.000084f, + +0.000008f, +0.000078f, -0.000022f, -0.000009f, -0.000035f, -0.000013f + }, + { + -0.000659f, -0.000560f, +0.002251f, +0.000415f, +0.000294f, -0.000226f, -0.000173f, +0.000335f, +0.000404f, +0.000228f, + -0.000085f, -0.000387f, -0.001346f, +0.001979f, +0.011893f, +0.001279f, -0.001687f, -0.004044f, +0.000400f, -0.000522f, + -0.002514f, -0.000374f, +0.000625f, -0.001347f, -0.003867f, -0.000877f, -0.000867f, -0.000861f, -0.001562f, -0.000422f, + +0.000049f, -0.000153f, -0.000583f, -0.000036f, -0.000511f, +0.000360f, +0.000048f, +0.000199f, -0.000814f, -0.000117f, + -0.000347f, -0.000041f, +0.000235f, -0.000217f, -0.000172f, -0.000248f, +0.000435f, -0.000151f, -0.000383f, +0.000059f, + +0.000008f, -0.000529f, +0.000069f, +0.000021f, +0.000234f, +0.000057f, +0.000396f, +0.000448f, -0.000256f, -0.000106f, + +0.000104f, +0.000233f, +0.000242f, +0.000028f, +0.000102f, -0.000135f, -0.000036f, +0.000073f, +0.000076f, -0.000028f, + -0.000011f, -0.000067f, -0.000068f, +0.000017f, -0.000024f, +0.000038f, -0.000021f, +0.000028f, +0.000044f, +0.000095f, + +0.000104f, -0.000087f, -0.000077f, -0.000072f, +0.000019f, +0.000056f, +0.000017f, +0.000087f, -0.000065f, +0.000012f, + +0.000049f, -0.000065f, +0.000016f, -0.000001f, +0.000023f, +0.000010f + }, + { + -0.002308f, +0.008586f, +0.006837f, -0.000021f, -0.000441f, +0.000297f, +0.000141f, +0.000423f, -0.000899f, +0.000851f, + +0.000326f, -0.000515f, -0.000792f, -0.002977f, -0.000741f, -0.000084f, +0.001460f, +0.000753f, +0.000440f, -0.000234f, + +0.000004f, +0.000381f, -0.000465f, -0.000326f, -0.000541f, -0.000119f, +0.000262f, -0.000016f, -0.000046f, +0.000814f, + +0.001203f, +0.001055f, -0.000286f, -0.000522f, -0.000600f, -0.000200f, -0.000896f, -0.000226f, +0.001174f, +0.000678f, + -0.000082f, +0.000736f, -0.000568f, -0.000359f, -0.000145f, +0.000196f, +0.000414f, +0.000781f, -0.000154f, -0.000610f, + -0.000063f, +0.000365f, +0.000063f, +0.000536f, -0.000154f, -0.000004f, -0.000222f, -0.000017f, -0.000120f, +0.000011f, + -0.000083f, -0.000079f, +0.000123f, +0.000064f, -0.000021f, -0.000241f, -0.000116f, -0.000034f, -0.000280f, +0.000013f, + -0.000044f, -0.000010f, -0.000033f, +0.000057f, +0.000027f, +0.000053f, -0.000037f, -0.000036f, -0.000006f, +0.000041f, + -0.000079f, +0.000069f, -0.000002f, +0.000074f, -0.000068f, +0.000001f, +0.000027f, +0.000020f, +0.000061f, +0.000135f, + +0.000020f, -0.000013f, -0.000053f, +0.000027f, +0.000079f, -0.000026f + }, + { + -0.000400f, +0.006138f, +0.002585f, +0.003509f, -0.000845f, +0.000247f, +0.001166f, -0.000513f, -0.000230f, +0.001025f, + +0.000059f, -0.000222f, -0.002036f, +0.001282f, +0.001134f, +0.000795f, -0.001664f, -0.000636f, +0.000741f, +0.001192f, + +0.001068f, -0.000774f, +0.000255f, -0.000172f, +0.000876f, +0.000544f, +0.000111f, +0.000201f, -0.000267f, +0.000197f, + +0.000441f, -0.001338f, +0.001044f, +0.000534f, -0.000127f, +0.000738f, +0.000205f, +0.000556f, +0.000851f, -0.000443f, + -0.000056f, -0.000042f, +0.000429f, -0.000074f, +0.000291f, +0.000896f, -0.000176f, +0.000315f, -0.000301f, -0.000019f, + +0.000254f, +0.000110f, -0.000185f, +0.000153f, -0.000291f, -0.000347f, +0.000047f, +0.000149f, +0.000100f, +0.000244f, + +0.000069f, -0.000125f, -0.000129f, -0.000298f, -0.000061f, -0.000175f, +0.000010f, +0.000196f, +0.000228f, +0.000088f, + -0.000004f, +0.000094f, +0.000000f, -0.000083f, +0.000065f, -0.000062f, -0.000044f, -0.000044f, -0.000080f, -0.000038f, + -0.000112f, -0.000015f, -0.000026f, +0.000013f, +0.000024f, +0.000068f, -0.000004f, -0.000041f, -0.000062f, -0.000029f, + +0.000045f, -0.000029f, +0.000018f, +0.000021f, +0.000074f, +0.000072f + }, + { + -0.007747f, -0.008646f, -0.000044f, -0.002963f, -0.001145f, -0.001322f, +0.008092f, -0.000653f, -0.000840f, +0.000134f, + +0.000379f, -0.000436f, -0.000030f, +0.001769f, -0.000435f, -0.002441f, +0.000059f, +0.000353f, -0.000679f, +0.000722f, + +0.000146f, +0.000484f, +0.001069f, -0.000328f, +0.000171f, -0.000288f, +0.000061f, -0.000948f, -0.000097f, -0.000267f, + +0.000314f, +0.000359f, -0.000158f, -0.000469f, +0.000236f, +0.000103f, +0.000045f, +0.000575f, -0.000154f, -0.001256f, + +0.000223f, +0.000838f, -0.000333f, +0.000038f, -0.000856f, +0.000196f, +0.000182f, +0.000000f, +0.000001f, -0.000052f, + +0.000531f, -0.000051f, +0.000328f, +0.000018f, -0.000044f, -0.000135f, -0.000081f, +0.000231f, +0.000264f, -0.000052f, + -0.000036f, +0.000173f, -0.000012f, -0.000162f, +0.000055f, +0.000067f, -0.000064f, +0.000021f, -0.000069f, +0.000052f, + -0.000038f, -0.000034f, +0.000021f, +0.000163f, +0.000080f, +0.000115f, +0.000013f, -0.000038f, -0.000051f, +0.000032f, + -0.000132f, +0.000041f, -0.000035f, -0.000076f, +0.000059f, +0.000005f, +0.000069f, +0.000016f, +0.000053f, -0.000038f, + -0.000027f, +0.000018f, +0.000038f, -0.000073f, -0.000037f, +0.000047f + }, + { + -0.000051f, -0.007085f, -0.000708f, +0.000526f, -0.000091f, +0.000466f, -0.000411f, -0.000366f, +0.000270f, -0.000192f, + +0.000452f, -0.000929f, +0.002605f, -0.000951f, +0.002057f, -0.000456f, -0.000580f, +0.000098f, +0.001059f, +0.000927f, + +0.000479f, +0.000763f, +0.000283f, +0.001064f, +0.003064f, +0.001316f, +0.000197f, +0.000288f, -0.001794f, -0.000323f, + +0.001386f, -0.000906f, +0.000513f, -0.000594f, +0.000479f, -0.000743f, -0.000538f, +0.000425f, +0.000986f, -0.000010f, + -0.000038f, -0.000065f, -0.000017f, +0.000184f, +0.000238f, -0.000130f, -0.000034f, -0.000219f, -0.000142f, +0.000324f, + +0.000117f, -0.000295f, -0.000141f, +0.000179f, +0.000201f, -0.000064f, -0.000165f, -0.000222f, -0.000253f, -0.000135f, + -0.000172f, +0.000071f, -0.000030f, -0.000152f, -0.000268f, -0.000034f, +0.000157f, -0.000195f, +0.000152f, +0.000125f, + +0.000042f, -0.000030f, -0.000071f, -0.000030f, -0.000034f, +0.000149f, +0.000107f, +0.000022f, +0.000064f, -0.000019f, + -0.000009f, +0.000070f, -0.000084f, -0.000056f, -0.000030f, -0.000042f, -0.000033f, -0.000058f, -0.000034f, +0.000024f, + +0.000013f, +0.000032f, +0.000043f, -0.000000f, -0.000011f, +0.000025f + }, + { + +0.000398f, +0.000771f, +0.004412f, +0.001862f, -0.001596f, +0.000607f, +0.001647f, -0.000204f, -0.000001f, +0.001278f, + +0.000947f, +0.000596f, -0.001231f, -0.004420f, +0.000016f, -0.001012f, +0.000495f, +0.001767f, -0.000526f, +0.000079f, + +0.001246f, -0.000178f, +0.000274f, -0.000023f, -0.000515f, -0.000464f, +0.000693f, +0.000578f, +0.000572f, +0.000654f, + +0.000315f, -0.000091f, +0.000034f, -0.000051f, -0.000427f, +0.000560f, +0.000467f, -0.000586f, +0.000131f, -0.000131f, + -0.000289f, -0.000438f, -0.000335f, -0.000683f, -0.000421f, -0.000527f, -0.000436f, -0.000278f, -0.000282f, -0.000288f, + -0.000003f, +0.000099f, +0.000091f, +0.000254f, +0.000267f, -0.000122f, +0.000371f, +0.000123f, +0.000092f, -0.000300f, + +0.000170f, +0.000039f, +0.000246f, -0.000036f, +0.000100f, -0.000080f, -0.000145f, -0.000024f, -0.000093f, +0.000158f, + +0.000079f, -0.000184f, +0.000004f, +0.000112f, +0.000008f, +0.000091f, -0.000081f, +0.000023f, +0.000027f, +0.000080f, + +0.000086f, -0.000126f, -0.000111f, -0.000004f, +0.000070f, +0.000074f, -0.000139f, -0.000004f, -0.000000f, -0.000079f, + -0.000025f, -0.000053f, +0.000003f, +0.000058f, +0.000011f, +0.000068f + }, + { + -0.000156f, -0.000684f, -0.001024f, +0.000052f, +0.000045f, +0.000707f, +0.000125f, +0.000240f, -0.000252f, +0.000448f, + -0.000106f, +0.000526f, -0.001118f, +0.001366f, +0.028285f, +0.000298f, +0.001219f, +0.000249f, +0.001220f, -0.002074f, + +0.001859f, +0.000071f, +0.000779f, +0.001264f, +0.002229f, +0.000934f, -0.000471f, -0.000604f, +0.002465f, -0.000483f, + -0.000399f, -0.000467f, -0.000290f, -0.000922f, +0.000119f, +0.000031f, -0.000296f, -0.000545f, +0.000108f, -0.000167f, + -0.000690f, +0.000196f, -0.000002f, +0.000483f, +0.000089f, +0.000081f, -0.000107f, +0.000525f, +0.000396f, -0.000050f, + +0.000362f, +0.000375f, +0.000078f, -0.000200f, +0.000067f, -0.000190f, -0.000045f, -0.000034f, -0.000063f, +0.000094f, + -0.000054f, +0.000239f, -0.000157f, -0.000005f, +0.000028f, +0.000154f, -0.000021f, +0.000259f, +0.000024f, +0.000134f, + +0.000109f, -0.000141f, -0.000107f, +0.000072f, -0.000054f, +0.000023f, +0.000017f, -0.000163f, +0.000087f, -0.000053f, + +0.000053f, +0.000160f, -0.000050f, +0.000012f, -0.000060f, -0.000082f, -0.000138f, +0.000032f, +0.000103f, -0.000062f, + -0.000001f, +0.000115f, +0.000004f, -0.000064f, +0.000031f, +0.000017f + }, + { + +0.002517f, +0.006937f, -0.004126f, -0.001446f, -0.000650f, +0.003285f, +0.000913f, -0.000063f, +0.000013f, -0.000651f, + -0.001827f, +0.000786f, +0.000883f, +0.000425f, -0.006411f, -0.000445f, +0.001497f, -0.000774f, +0.000346f, +0.001058f, + -0.000634f, -0.000151f, -0.000098f, +0.000285f, +0.000539f, +0.000067f, -0.001180f, -0.000453f, +0.000543f, +0.000445f, + -0.000158f, -0.000046f, -0.000487f, -0.000375f, -0.000795f, +0.000548f, -0.000009f, -0.000068f, +0.000472f, +0.000429f, + +0.000024f, -0.000031f, +0.000578f, +0.000490f, -0.000142f, -0.000152f, -0.000918f, -0.000454f, -0.000105f, +0.000292f, + -0.000466f, +0.000239f, +0.000545f, +0.000179f, +0.000033f, +0.000133f, -0.000295f, +0.000029f, -0.000067f, +0.000152f, + +0.000068f, -0.000158f, +0.000013f, -0.000066f, +0.000019f, -0.000010f, +0.000000f, -0.000025f, -0.000155f, -0.000020f, + +0.000034f, -0.000259f, -0.000107f, +0.000138f, +0.000184f, +0.000001f, -0.000067f, -0.000000f, +0.000003f, -0.000033f, + -0.000072f, -0.000007f, +0.000078f, +0.000000f, -0.000011f, +0.000008f, +0.000008f, +0.000040f, +0.000080f, -0.000108f, + -0.000052f, -0.000024f, -0.000060f, -0.000012f, +0.000028f, +0.000043f + } + }, + { + { + -0.001314f, +0.011728f, -0.000879f, +0.000016f, +0.000724f, +0.000067f, -0.000202f, -0.000044f, -0.000131f, -0.000142f, + +0.000871f, -0.000354f, +0.000333f, +0.000270f, -0.004773f, +0.000830f, -0.000545f, +0.000581f, +0.001414f, -0.000433f, + +0.000921f, +0.001913f, +0.000251f, -0.000783f, -0.000667f, -0.000646f, -0.000704f, +0.000387f, +0.000874f, -0.000590f, + -0.000797f, +0.000312f, +0.000636f, -0.000601f, -0.000712f, +0.000072f, +0.001003f, -0.001170f, -0.000255f, -0.000182f, + +0.000728f, +0.000316f, -0.000568f, +0.000296f, +0.000394f, +0.000190f, -0.000283f, +0.000576f, -0.000339f, +0.000345f, + +0.000340f, +0.000028f, +0.000325f, +0.000253f, +0.000129f, +0.000053f, -0.000272f, -0.000203f, -0.000070f, +0.000318f, + -0.000100f, +0.000054f, +0.000091f, +0.000056f, +0.000042f, +0.000091f, -0.000073f, -0.000097f, +0.000263f, -0.000032f, + -0.000054f, -0.000046f, +0.000095f, +0.000004f, -0.000021f, +0.000002f, -0.000011f, +0.000074f, +0.000092f, -0.000006f, + +0.000003f, +0.000063f, +0.000084f, +0.000042f, +0.000023f, -0.000076f, -0.000014f, -0.000022f, +0.000017f, -0.000080f, + +0.000054f, -0.000017f, +0.000013f, +0.000010f, -0.000070f, -0.000057f + }, + { + -0.009155f, +0.074733f, -0.005871f, +0.003459f, -0.000183f, -0.000009f, +0.000016f, -0.000871f, -0.000227f, +0.000315f, + +0.000231f, +0.000220f, -0.000502f, +0.000298f, -0.000044f, -0.001872f, -0.000226f, -0.000615f, +0.001350f, +0.000239f, + +0.000311f, -0.000110f, -0.000085f, -0.000047f, -0.000385f, +0.000292f, -0.001494f, -0.000436f, -0.000433f, +0.000033f, + -0.000078f, +0.001088f, -0.000461f, -0.000585f, +0.000101f, -0.000025f, +0.000550f, -0.000921f, -0.000087f, -0.000679f, + +0.000085f, -0.000200f, +0.000085f, -0.000036f, -0.000020f, -0.000306f, -0.000222f, -0.000451f, -0.000256f, +0.000479f, + +0.000041f, +0.000051f, +0.000158f, -0.000240f, -0.000087f, -0.000384f, +0.000089f, +0.000085f, -0.000017f, +0.000265f, + +0.000052f, -0.000122f, -0.000095f, +0.000069f, -0.000201f, +0.000062f, +0.000021f, -0.000021f, +0.000134f, -0.000185f, + -0.000012f, -0.000083f, -0.000105f, +0.000018f, -0.000141f, +0.000048f, +0.000090f, -0.000091f, -0.000001f, -0.000003f, + +0.000078f, -0.000049f, -0.000067f, +0.000034f, +0.000065f, -0.000194f, +0.000078f, +0.000078f, -0.000009f, -0.000012f, + -0.000054f, -0.000003f, +0.000069f, -0.000024f, +0.000008f, -0.000019f + }, + { + -0.001274f, +0.033827f, -0.007787f, +0.003496f, +0.000530f, -0.000634f, +0.000302f, -0.000612f, -0.000192f, -0.000931f, + -0.000270f, -0.000412f, -0.000017f, -0.000894f, +0.003712f, -0.000076f, -0.000074f, +0.000130f, -0.000950f, +0.000435f, + -0.000245f, +0.000075f, +0.000905f, -0.000556f, +0.001158f, +0.000914f, +0.000338f, -0.000686f, -0.000131f, +0.000331f, + +0.000288f, -0.000027f, +0.001148f, +0.000088f, -0.001099f, +0.000591f, -0.000178f, +0.000723f, -0.000230f, -0.000055f, + -0.000014f, +0.000187f, +0.000276f, +0.000213f, -0.000120f, -0.000274f, -0.000499f, +0.000315f, +0.000222f, +0.000174f, + -0.000013f, -0.000069f, +0.000013f, +0.000128f, -0.000133f, +0.000310f, +0.000142f, +0.000077f, -0.000083f, -0.000085f, + +0.000111f, +0.000152f, +0.000233f, -0.000091f, +0.000035f, -0.000106f, +0.000194f, +0.000042f, +0.000127f, +0.000116f, + +0.000036f, -0.000030f, +0.000016f, -0.000006f, +0.000043f, -0.000061f, +0.000002f, -0.000019f, -0.000151f, -0.000003f, + -0.000004f, +0.000058f, +0.000076f, +0.000007f, -0.000064f, -0.000027f, -0.000082f, -0.000052f, +0.000059f, -0.000093f, + +0.000066f, +0.000027f, +0.000065f, -0.000006f, +0.000004f, -0.000035f + }, + { + +0.000759f, +0.001021f, -0.001365f, +0.000506f, +0.000070f, -0.000193f, +0.000306f, -0.000122f, -0.000153f, -0.000051f, + +0.000361f, +0.000132f, -0.000592f, +0.000691f, +0.004401f, -0.000712f, -0.002067f, +0.000051f, +0.000148f, +0.000261f, + -0.000537f, +0.000752f, +0.000299f, -0.000827f, +0.001507f, -0.001318f, -0.002334f, +0.000087f, +0.000896f, +0.002619f, + -0.001448f, -0.000998f, +0.001515f, -0.000435f, -0.000476f, -0.000338f, +0.001345f, -0.000361f, +0.000233f, -0.000361f, + +0.000218f, +0.000589f, -0.000115f, +0.000210f, -0.000636f, +0.000452f, +0.000143f, -0.000030f, +0.000379f, +0.000139f, + -0.000500f, -0.000016f, +0.000136f, -0.000230f, +0.000290f, +0.000072f, -0.000141f, +0.000086f, -0.000021f, -0.000050f, + +0.000052f, +0.000043f, -0.000028f, +0.000012f, +0.000165f, +0.000103f, -0.000025f, -0.000058f, +0.000113f, +0.000025f, + -0.000311f, -0.000045f, +0.000057f, +0.000134f, -0.000046f, +0.000109f, +0.000148f, +0.000052f, +0.000026f, -0.000090f, + -0.000012f, +0.000066f, -0.000011f, +0.000015f, +0.000040f, -0.000046f, -0.000012f, +0.000076f, +0.000044f, -0.000013f, + -0.000024f, +0.000040f, +0.000068f, +0.000020f, -0.000002f, +0.000033f + }, + { + -0.002242f, -0.013632f, +0.002956f, -0.000795f, +0.000607f, -0.000153f, +0.000027f, +0.000262f, +0.000748f, -0.000653f, + +0.000905f, +0.000258f, -0.000074f, +0.000524f, -0.001561f, -0.000260f, +0.000274f, -0.000389f, +0.000119f, -0.000866f, + -0.000185f, +0.000151f, -0.000369f, -0.000252f, +0.000235f, +0.000123f, +0.001016f, +0.000357f, +0.000827f, +0.000338f, + -0.000203f, +0.000840f, -0.000017f, +0.000860f, -0.000032f, +0.000173f, -0.001574f, +0.000415f, +0.000638f, +0.000529f, + -0.000539f, -0.000166f, -0.000053f, +0.000093f, -0.000606f, +0.000347f, +0.000611f, -0.000047f, +0.000186f, -0.000037f, + +0.000514f, -0.000025f, +0.000121f, -0.000004f, -0.000140f, +0.000045f, -0.000186f, -0.000193f, -0.000208f, +0.000065f, + -0.000062f, +0.000021f, +0.000011f, -0.000106f, -0.000005f, +0.000036f, -0.000022f, +0.000020f, -0.000004f, +0.000052f, + -0.000110f, -0.000169f, -0.000064f, +0.000138f, +0.000024f, -0.000027f, +0.000152f, -0.000017f, +0.000020f, +0.000041f, + +0.000056f, +0.000114f, +0.000007f, -0.000047f, -0.000050f, +0.000008f, +0.000022f, -0.000039f, -0.000105f, -0.000036f, + -0.000009f, -0.000042f, -0.000023f, -0.000074f, +0.000011f, +0.000013f + }, + { + -0.000245f, +0.004252f, +0.000840f, -0.001104f, +0.000069f, -0.000063f, +0.000312f, +0.000130f, -0.000078f, -0.000037f, + -0.000336f, -0.000148f, -0.000348f, -0.001297f, +0.006314f, -0.000467f, -0.000579f, -0.000098f, +0.002000f, -0.000303f, + +0.001023f, -0.000465f, +0.002175f, +0.002397f, -0.000896f, +0.002394f, -0.000365f, -0.000122f, -0.000230f, -0.001265f, + +0.000667f, -0.000558f, +0.000161f, +0.000480f, +0.000999f, -0.000413f, +0.000123f, +0.000436f, -0.000001f, -0.000455f, + +0.000650f, +0.000271f, -0.000114f, +0.000164f, +0.000212f, +0.000055f, -0.000157f, +0.000157f, -0.000248f, -0.000007f, + +0.000145f, +0.000182f, -0.000320f, -0.000085f, -0.000028f, -0.000103f, -0.000066f, +0.000117f, -0.000065f, -0.000014f, + -0.000095f, +0.000097f, -0.000131f, -0.000118f, -0.000046f, -0.000021f, +0.000086f, -0.000047f, +0.000113f, -0.000054f, + +0.000145f, +0.000086f, -0.000116f, -0.000021f, +0.000082f, +0.000034f, +0.000096f, +0.000081f, +0.000047f, -0.000103f, + +0.000096f, +0.000014f, +0.000001f, -0.000022f, +0.000036f, +0.000020f, -0.000012f, +0.000004f, +0.000027f, +0.000018f, + -0.000078f, -0.000002f, +0.000089f, +0.000008f, +0.000009f, -0.000028f + }, + { + +0.002021f, +0.012371f, +0.004943f, -0.001976f, +0.000294f, +0.000242f, +0.000031f, -0.000315f, +0.000083f, -0.000435f, + +0.000047f, -0.000801f, +0.000270f, +0.000675f, -0.002542f, -0.001194f, +0.000042f, +0.000040f, -0.000356f, -0.000456f, + -0.000239f, +0.000420f, -0.000182f, -0.000274f, +0.000084f, -0.000597f, +0.000676f, -0.000036f, -0.000161f, -0.000018f, + +0.000090f, +0.000513f, -0.000189f, +0.000528f, +0.000231f, +0.000589f, +0.000249f, +0.000131f, -0.000108f, +0.000201f, + -0.000068f, +0.000312f, +0.000104f, -0.000086f, +0.000719f, -0.000118f, +0.000048f, -0.000311f, +0.000474f, -0.000123f, + -0.000364f, +0.000061f, -0.000147f, -0.000075f, +0.000202f, +0.000122f, +0.000125f, +0.000017f, +0.000234f, +0.000071f, + +0.000075f, -0.000162f, +0.000158f, -0.000017f, +0.000039f, +0.000101f, +0.000145f, -0.000135f, -0.000011f, +0.000091f, + -0.000035f, -0.000170f, +0.000137f, +0.000077f, -0.000058f, +0.000046f, +0.000086f, +0.000024f, +0.000005f, +0.000067f, + -0.000019f, -0.000021f, +0.000066f, +0.000021f, -0.000133f, +0.000054f, +0.000085f, +0.000011f, -0.000042f, -0.000022f, + +0.000086f, -0.000023f, +0.000007f, -0.000021f, +0.000013f, +0.000032f + }, + { + +0.000035f, +0.002503f, +0.000514f, -0.000288f, -0.000061f, -0.000217f, -0.000165f, -0.000017f, +0.000078f, -0.000148f, + -0.000667f, -0.000067f, -0.000816f, +0.001240f, +0.010845f, -0.000989f, -0.000133f, -0.001147f, +0.000326f, +0.000940f, + -0.001801f, +0.000445f, +0.000101f, +0.000064f, -0.000008f, +0.001266f, +0.000241f, -0.000673f, -0.000393f, -0.000761f, + -0.000477f, -0.000386f, -0.000277f, +0.000464f, +0.000428f, +0.000496f, -0.000102f, -0.000166f, +0.000134f, +0.000301f, + -0.000115f, +0.000198f, +0.000245f, -0.000299f, +0.000010f, +0.000299f, +0.000609f, -0.000746f, -0.000476f, +0.000361f, + -0.000065f, -0.000078f, +0.000052f, +0.000222f, +0.000181f, +0.000121f, +0.000281f, +0.000053f, -0.000246f, +0.000146f, + -0.000011f, +0.000259f, +0.000095f, +0.000021f, -0.000007f, -0.000198f, +0.000134f, +0.000107f, +0.000038f, -0.000093f, + +0.000065f, -0.000011f, -0.000075f, +0.000081f, +0.000020f, +0.000017f, +0.000156f, +0.000088f, +0.000012f, +0.000040f, + -0.000081f, -0.000083f, -0.000016f, -0.000012f, +0.000030f, -0.000001f, +0.000063f, -0.000015f, -0.000038f, +0.000087f, + -0.000020f, -0.000017f, -0.000002f, -0.000042f, +0.000028f, -0.000014f + }, + { + +0.004963f, +0.005081f, -0.002134f, -0.000087f, +0.000444f, +0.000456f, -0.000716f, -0.000896f, -0.000292f, +0.001053f, + -0.001415f, -0.001606f, -0.000144f, -0.000030f, +0.000075f, -0.000571f, +0.000263f, -0.000332f, +0.000369f, -0.000169f, + +0.000128f, +0.000185f, +0.000277f, +0.000119f, -0.000519f, -0.000313f, -0.000059f, +0.000325f, -0.000296f, +0.000062f, + +0.000659f, -0.000051f, -0.000648f, -0.000334f, -0.000617f, +0.000848f, +0.000132f, +0.000191f, +0.000769f, +0.000015f, + -0.000300f, +0.000478f, -0.000465f, -0.000001f, -0.000373f, +0.000244f, +0.000100f, +0.000304f, -0.000194f, -0.000448f, + +0.000476f, +0.000136f, -0.000457f, +0.000423f, -0.000188f, -0.000152f, -0.000108f, +0.000038f, -0.000090f, +0.000054f, + -0.000130f, -0.000164f, +0.000043f, -0.000092f, -0.000085f, +0.000094f, +0.000144f, +0.000006f, -0.000069f, +0.000110f, + -0.000100f, -0.000040f, -0.000001f, +0.000079f, +0.000126f, -0.000110f, -0.000020f, -0.000006f, +0.000045f, +0.000018f, + -0.000058f, -0.000021f, -0.000041f, -0.000030f, -0.000108f, -0.000037f, +0.000129f, +0.000061f, +0.000031f, +0.000050f, + -0.000066f, -0.000007f, -0.000076f, +0.000068f, +0.000039f, -0.000021f + }, + { + +0.000595f, +0.002663f, -0.000690f, +0.000425f, -0.000223f, +0.001984f, +0.000553f, -0.000872f, -0.000523f, +0.000046f, + -0.000133f, -0.000199f, -0.001732f, -0.000450f, -0.001886f, -0.000003f, -0.001163f, +0.000777f, +0.001523f, +0.000067f, + +0.000082f, +0.000352f, +0.001814f, +0.000719f, +0.000663f, -0.000349f, -0.000757f, -0.000357f, -0.000523f, +0.000178f, + -0.000055f, -0.000928f, +0.000445f, +0.000551f, -0.000676f, +0.000071f, +0.000491f, +0.000653f, +0.000414f, -0.000246f, + +0.000165f, +0.000014f, +0.000091f, -0.000449f, +0.000225f, +0.000321f, -0.000116f, +0.000165f, -0.000310f, +0.000293f, + +0.000231f, +0.000064f, -0.000009f, -0.000106f, -0.000450f, -0.000153f, +0.000167f, +0.000110f, +0.000121f, +0.000197f, + +0.000002f, -0.000095f, -0.000224f, -0.000138f, -0.000124f, -0.000135f, +0.000172f, +0.000159f, +0.000209f, -0.000079f, + +0.000028f, -0.000010f, -0.000059f, +0.000034f, +0.000060f, -0.000043f, -0.000067f, -0.000050f, -0.000121f, -0.000034f, + -0.000053f, +0.000016f, +0.000052f, +0.000028f, +0.000022f, +0.000005f, -0.000029f, +0.000012f, -0.000032f, +0.000058f, + +0.000025f, +0.000033f, +0.000025f, +0.000003f, +0.000051f, +0.000033f + }, + { + +0.007099f, -0.001117f, -0.006679f, +0.002499f, +0.000990f, -0.000971f, +0.005825f, -0.002270f, -0.000481f, +0.000467f, + -0.000038f, -0.000363f, -0.000015f, +0.001124f, -0.001737f, -0.001075f, +0.001180f, +0.000554f, -0.000437f, +0.000417f, + -0.001724f, +0.000301f, +0.000713f, -0.000274f, -0.000036f, -0.000323f, +0.000054f, -0.001013f, +0.000519f, +0.000026f, + +0.000309f, -0.000081f, -0.000118f, -0.000034f, +0.000025f, -0.000253f, +0.000272f, +0.000346f, +0.000146f, +0.000248f, + +0.000569f, +0.000267f, -0.000589f, +0.000110f, -0.000548f, -0.000023f, -0.000191f, +0.000192f, +0.000120f, -0.000333f, + +0.000256f, -0.000147f, +0.000270f, -0.000295f, -0.000067f, -0.000151f, -0.000206f, +0.000363f, -0.000033f, -0.000089f, + +0.000083f, +0.000125f, -0.000136f, -0.000146f, +0.000047f, -0.000043f, -0.000058f, +0.000006f, +0.000017f, -0.000041f, + -0.000061f, +0.000040f, +0.000031f, +0.000174f, -0.000017f, +0.000128f, -0.000011f, -0.000112f, +0.000008f, +0.000021f, + -0.000083f, +0.000078f, -0.000060f, +0.000051f, -0.000003f, +0.000097f, +0.000013f, +0.000010f, +0.000004f, -0.000055f, + +0.000024f, -0.000021f, -0.000031f, -0.000036f, +0.000028f, +0.000013f + }, + { + -0.000086f, -0.004481f, +0.000617f, -0.000318f, -0.000143f, -0.000002f, -0.000478f, -0.000319f, +0.000572f, +0.000002f, + -0.000296f, -0.001168f, +0.002263f, -0.003994f, -0.001081f, -0.000905f, +0.000237f, +0.001522f, +0.000565f, -0.000880f, + +0.000143f, +0.001058f, +0.000309f, +0.000004f, +0.000608f, -0.000705f, -0.001205f, +0.000491f, -0.001186f, +0.001711f, + +0.000404f, -0.000742f, +0.000091f, -0.000406f, -0.000081f, -0.000327f, -0.000023f, +0.000514f, +0.000377f, +0.000048f, + -0.000284f, -0.000127f, +0.000221f, +0.000092f, +0.000076f, +0.000142f, -0.000119f, -0.000110f, +0.000014f, +0.000273f, + -0.000101f, -0.000222f, +0.000079f, +0.000043f, -0.000097f, -0.000123f, -0.000126f, -0.000393f, -0.000190f, -0.000162f, + +0.000115f, +0.000011f, +0.000011f, -0.000157f, -0.000086f, +0.000177f, +0.000034f, -0.000003f, +0.000138f, +0.000061f, + +0.000071f, +0.000052f, +0.000081f, +0.000081f, -0.000009f, +0.000124f, +0.000066f, -0.000073f, +0.000025f, -0.000070f, + -0.000006f, +0.000058f, -0.000085f, -0.000054f, -0.000009f, -0.000063f, -0.000024f, -0.000008f, +0.000008f, +0.000022f, + +0.000017f, +0.000030f, +0.000037f, -0.000052f, -0.000022f, +0.000053f + }, + { + +0.000612f, -0.002065f, +0.001650f, -0.000913f, -0.001074f, +0.003461f, +0.001992f, -0.001118f, -0.000543f, +0.002144f, + +0.000890f, +0.000064f, +0.001206f, -0.000966f, +0.001768f, -0.000976f, +0.000088f, +0.001424f, -0.000750f, +0.001031f, + +0.000295f, -0.000534f, +0.000062f, +0.000704f, +0.000622f, +0.000297f, -0.000116f, +0.000568f, +0.000554f, -0.000012f, + +0.000030f, -0.000303f, +0.000487f, +0.000373f, -0.000165f, +0.000350f, +0.000604f, +0.000074f, +0.000634f, +0.000006f, + -0.000403f, -0.000460f, +0.000295f, -0.000940f, -0.000129f, -0.000377f, +0.000186f, -0.000348f, +0.000008f, -0.000452f, + +0.000168f, +0.000196f, +0.000062f, +0.000512f, +0.000053f, -0.000047f, +0.000299f, -0.000157f, -0.000123f, -0.000063f, + +0.000105f, -0.000192f, +0.000046f, -0.000119f, -0.000055f, -0.000111f, -0.000100f, +0.000032f, +0.000056f, +0.000048f, + -0.000091f, -0.000125f, +0.000116f, +0.000054f, -0.000009f, +0.000012f, -0.000115f, +0.000142f, +0.000016f, +0.000057f, + -0.000062f, -0.000113f, -0.000019f, +0.000052f, +0.000053f, -0.000038f, -0.000190f, -0.000010f, +0.000005f, -0.000025f, + +0.000003f, -0.000011f, +0.000118f, +0.000027f, +0.000040f, +0.000046f + }, + { + +0.000406f, -0.001450f, -0.000784f, +0.000362f, +0.000198f, +0.000390f, -0.000002f, +0.000485f, -0.000139f, +0.000137f, + -0.000074f, +0.000150f, -0.001030f, -0.010925f, +0.011123f, -0.001174f, +0.000299f, -0.001145f, +0.001350f, +0.000081f, + +0.002455f, +0.000061f, +0.000908f, -0.000214f, -0.000137f, -0.000190f, +0.000147f, +0.000293f, +0.001386f, -0.001597f, + -0.000906f, +0.000241f, +0.000967f, +0.000299f, +0.000069f, +0.000322f, -0.000087f, -0.000315f, +0.000648f, -0.000230f, + -0.000344f, +0.000529f, -0.000106f, +0.000115f, -0.000132f, -0.000304f, -0.000222f, +0.000160f, +0.000295f, -0.000190f, + +0.000320f, +0.000140f, -0.000167f, -0.000194f, +0.000161f, -0.000322f, -0.000022f, +0.000028f, -0.000044f, -0.000098f, + +0.000247f, +0.000161f, -0.000180f, +0.000096f, +0.000146f, -0.000109f, -0.000063f, +0.000258f, +0.000001f, +0.000144f, + +0.000070f, -0.000163f, -0.000078f, +0.000053f, +0.000023f, +0.000035f, -0.000129f, +0.000008f, -0.000003f, +0.000009f, + +0.000126f, +0.000030f, -0.000037f, +0.000014f, -0.000099f, -0.000037f, -0.000085f, +0.000082f, +0.000001f, -0.000006f, + +0.000101f, +0.000073f, -0.000072f, -0.000023f, +0.000039f, -0.000062f + }, + { + -0.002177f, -0.001694f, -0.001290f, +0.003456f, +0.000724f, +0.003709f, -0.000656f, +0.000239f, +0.000253f, -0.000149f, + +0.001988f, +0.001047f, -0.000290f, +0.001444f, -0.002923f, +0.001016f, +0.001482f, -0.001154f, +0.001148f, +0.001374f, + -0.000565f, -0.000115f, -0.000429f, +0.000395f, +0.000064f, +0.000094f, -0.001027f, +0.000076f, +0.000324f, -0.000435f, + +0.000009f, +0.000411f, -0.000027f, -0.000144f, -0.001126f, +0.000539f, -0.000494f, -0.000080f, +0.000356f, +0.000057f, + +0.000268f, -0.000370f, -0.000096f, +0.000272f, +0.000095f, -0.000390f, -0.000699f, +0.000268f, +0.000238f, +0.000182f, + +0.000027f, +0.000264f, +0.000208f, -0.000221f, +0.000038f, -0.000039f, -0.000399f, +0.000243f, -0.000131f, +0.000014f, + -0.000019f, -0.000318f, -0.000060f, -0.000113f, -0.000059f, -0.000130f, +0.000023f, -0.000016f, -0.000058f, -0.000041f, + +0.000057f, -0.000152f, -0.000009f, +0.000161f, +0.000019f, -0.000083f, -0.000096f, +0.000006f, +0.000008f, -0.000060f, + -0.000003f, +0.000067f, +0.000008f, +0.000006f, +0.000062f, +0.000103f, +0.000016f, +0.000086f, +0.000000f, -0.000073f, + -0.000015f, -0.000021f, +0.000001f, +0.000031f, +0.000009f, +0.000011f + } + }, + { + { + +0.000684f, +0.005315f, -0.000710f, +0.000454f, +0.000486f, -0.000110f, +0.000097f, -0.000139f, -0.000371f, +0.000106f, + -0.000568f, +0.000453f, -0.001539f, +0.001115f, -0.002467f, -0.000494f, -0.000074f, +0.000628f, -0.000430f, +0.000081f, + +0.001704f, -0.000571f, -0.001069f, -0.001826f, -0.000345f, -0.000596f, +0.000171f, -0.000215f, +0.000098f, +0.000022f, + -0.000762f, -0.000889f, +0.000073f, +0.000461f, -0.000189f, +0.000367f, +0.000520f, +0.000620f, +0.000735f, -0.000023f, + -0.000054f, +0.000148f, -0.000229f, +0.000305f, -0.000061f, +0.000082f, +0.000361f, +0.000715f, +0.000196f, +0.000187f, + +0.000116f, +0.000085f, +0.000167f, +0.000187f, -0.000349f, +0.000097f, +0.000117f, -0.000046f, +0.000265f, +0.000126f, + -0.000109f, -0.000315f, -0.000174f, +0.000119f, -0.000024f, +0.000026f, -0.000138f, +0.000029f, -0.000003f, -0.000264f, + +0.000064f, +0.000076f, +0.000119f, -0.000007f, +0.000005f, +0.000004f, +0.000064f, +0.000091f, -0.000032f, -0.000034f, + +0.000120f, +0.000002f, -0.000079f, -0.000125f, -0.000111f, +0.000032f, +0.000066f, -0.000019f, -0.000002f, +0.000028f, + +0.000052f, -0.000051f, +0.000031f, -0.000020f, +0.000023f, +0.000050f + }, + { + +0.006428f, +0.050680f, +0.000322f, +0.002705f, +0.001249f, +0.000014f, -0.000190f, +0.001379f, +0.000761f, +0.000320f, + +0.000583f, +0.000124f, -0.000052f, -0.000098f, -0.000680f, -0.000132f, +0.001340f, -0.000229f, -0.000934f, +0.001197f, + +0.000112f, +0.000847f, -0.000296f, +0.000013f, -0.000267f, -0.000586f, -0.000532f, -0.000265f, -0.000311f, -0.000243f, + +0.000047f, +0.000224f, +0.000103f, +0.000397f, -0.000183f, -0.000500f, +0.000166f, -0.000185f, +0.000512f, +0.000032f, + -0.000107f, -0.000454f, -0.000777f, +0.000424f, -0.000525f, -0.000118f, +0.000030f, -0.000084f, +0.000330f, +0.000149f, + +0.000176f, -0.000191f, -0.000387f, -0.000343f, -0.000268f, -0.000266f, -0.000120f, -0.000100f, +0.000045f, +0.000209f, + -0.000271f, -0.000268f, +0.000022f, -0.000037f, +0.000109f, +0.000228f, +0.000031f, -0.000028f, -0.000204f, -0.000107f, + +0.000005f, -0.000008f, +0.000071f, -0.000053f, -0.000017f, +0.000123f, -0.000088f, +0.000053f, +0.000139f, +0.000045f, + -0.000076f, -0.000060f, +0.000019f, -0.000054f, -0.000095f, -0.000020f, +0.000130f, -0.000055f, +0.000030f, -0.000008f, + +0.000001f, -0.000012f, -0.000015f, -0.000022f, +0.000011f, -0.000026f + }, + { + -0.000170f, +0.016323f, +0.006609f, -0.001083f, -0.001984f, -0.000098f, -0.000352f, -0.000528f, -0.000239f, +0.000093f, + +0.000530f, -0.000051f, +0.000532f, +0.001111f, +0.002375f, +0.000175f, +0.000115f, -0.000105f, +0.000477f, -0.000513f, + +0.000167f, +0.000658f, +0.000032f, +0.000854f, +0.000603f, +0.000070f, -0.000305f, +0.000387f, -0.000063f, +0.000525f, + +0.000366f, +0.000312f, -0.000068f, -0.000081f, +0.000494f, +0.000163f, +0.000018f, -0.000102f, +0.000231f, +0.000111f, + +0.000454f, -0.000770f, +0.000125f, +0.000108f, -0.000558f, +0.000254f, +0.000333f, -0.000225f, -0.000052f, -0.000129f, + +0.000238f, +0.000210f, +0.000117f, -0.000006f, -0.000157f, +0.000198f, +0.000069f, -0.000347f, +0.000081f, -0.000030f, + -0.000012f, -0.000045f, -0.000229f, -0.000022f, -0.000056f, -0.000170f, +0.000031f, +0.000024f, +0.000088f, -0.000043f, + +0.000023f, -0.000043f, +0.000003f, -0.000152f, +0.000025f, -0.000026f, -0.000025f, -0.000008f, -0.000066f, +0.000110f, + +0.000034f, +0.000037f, -0.000009f, -0.000066f, +0.000070f, -0.000010f, -0.000027f, +0.000029f, +0.000021f, +0.000022f, + +0.000052f, -0.000055f, -0.000001f, -0.000027f, -0.000007f, -0.000012f + }, + { + -0.000936f, +0.000088f, +0.001964f, -0.000348f, -0.000287f, +0.000325f, +0.000141f, +0.000010f, -0.000305f, +0.000148f, + +0.000006f, +0.000396f, +0.000398f, -0.000676f, +0.002792f, +0.000131f, +0.000034f, +0.000512f, +0.001872f, +0.000090f, + +0.000256f, +0.000415f, -0.000421f, -0.000034f, -0.000425f, +0.000046f, -0.001025f, -0.000623f, +0.000562f, +0.001552f, + +0.000054f, -0.001147f, +0.000496f, -0.000416f, +0.000408f, +0.000187f, -0.000458f, +0.000639f, -0.000070f, -0.000370f, + +0.000348f, -0.000027f, +0.000177f, +0.000200f, +0.000056f, +0.000166f, -0.000066f, +0.000023f, +0.000026f, -0.000169f, + -0.000258f, +0.000277f, -0.000237f, -0.000024f, +0.000058f, -0.000196f, +0.000104f, +0.000211f, -0.000123f, +0.000130f, + +0.000147f, -0.000035f, -0.000004f, +0.000166f, -0.000140f, -0.000108f, +0.000031f, +0.000027f, -0.000104f, -0.000089f, + +0.000057f, +0.000129f, +0.000057f, -0.000009f, +0.000008f, +0.000099f, +0.000021f, -0.000133f, -0.000110f, -0.000003f, + -0.000017f, -0.000013f, -0.000045f, +0.000039f, -0.000015f, +0.000050f, +0.000042f, -0.000019f, -0.000057f, -0.000016f, + +0.000016f, -0.000011f, -0.000100f, -0.000033f, -0.000000f, -0.000039f + }, + { + -0.004282f, -0.007442f, +0.003536f, -0.000637f, +0.000070f, -0.000223f, -0.000220f, +0.000206f, +0.000523f, +0.000261f, + +0.000953f, -0.000712f, +0.000205f, +0.000512f, -0.001009f, -0.000411f, -0.000706f, +0.000136f, +0.000393f, +0.000224f, + +0.000269f, -0.000491f, -0.000514f, +0.000563f, +0.000966f, -0.000192f, +0.000135f, +0.001530f, +0.000855f, +0.000390f, + +0.000443f, +0.000326f, +0.000574f, +0.000324f, -0.000152f, +0.000327f, +0.000329f, +0.001280f, +0.000236f, +0.000403f, + +0.000226f, -0.000348f, -0.000431f, +0.000243f, +0.000238f, -0.000363f, +0.000069f, +0.000371f, -0.000034f, -0.000043f, + +0.000452f, -0.000401f, +0.000097f, +0.000150f, -0.000042f, -0.000104f, -0.000064f, +0.000160f, +0.000091f, +0.000061f, + -0.000120f, -0.000026f, +0.000005f, -0.000094f, +0.000031f, -0.000045f, -0.000119f, +0.000169f, -0.000044f, -0.000090f, + -0.000072f, +0.000038f, +0.000256f, +0.000112f, -0.000123f, +0.000041f, -0.000010f, -0.000091f, +0.000054f, +0.000015f, + -0.000009f, +0.000014f, -0.000032f, -0.000025f, +0.000100f, +0.000022f, -0.000045f, -0.000020f, -0.000010f, +0.000014f, + +0.000002f, +0.000034f, -0.000005f, +0.000043f, +0.000026f, -0.000013f + }, + { + +0.000752f, +0.001995f, -0.002621f, +0.000742f, +0.000171f, +0.000142f, +0.000132f, -0.000131f, -0.000009f, -0.000329f, + +0.000054f, +0.000301f, +0.000175f, +0.002307f, +0.006785f, -0.000539f, -0.000455f, -0.000742f, +0.000112f, +0.001414f, + +0.000569f, +0.000470f, +0.001503f, +0.001341f, +0.001720f, +0.002253f, -0.000118f, -0.000205f, +0.000110f, +0.000236f, + -0.001146f, -0.000065f, -0.000364f, +0.000038f, +0.000119f, -0.000288f, -0.000030f, -0.000475f, -0.000093f, -0.000084f, + +0.000140f, -0.000037f, +0.000156f, +0.000226f, +0.000141f, -0.000322f, +0.000173f, +0.000238f, +0.000085f, +0.000286f, + -0.000146f, -0.000098f, +0.000071f, -0.000183f, -0.000132f, -0.000303f, +0.000100f, -0.000039f, +0.000054f, +0.000055f, + -0.000015f, +0.000096f, -0.000181f, -0.000063f, -0.000116f, -0.000063f, +0.000105f, +0.000143f, +0.000117f, +0.000117f, + +0.000088f, -0.000184f, -0.000138f, -0.000003f, +0.000055f, -0.000074f, -0.000124f, -0.000090f, -0.000092f, +0.000018f, + +0.000080f, -0.000075f, +0.000073f, +0.000086f, +0.000046f, -0.000035f, -0.000008f, +0.000030f, -0.000006f, -0.000028f, + +0.000016f, +0.000100f, -0.000022f, -0.000076f, -0.000026f, +0.000002f + }, + { + -0.003872f, +0.027176f, -0.000406f, -0.001341f, -0.000037f, -0.000088f, -0.000099f, -0.000836f, +0.000018f, +0.000521f, + -0.000420f, -0.000459f, -0.000191f, +0.000581f, -0.002165f, -0.001915f, -0.000284f, -0.000836f, -0.000086f, +0.001084f, + +0.000593f, +0.000214f, -0.000089f, -0.000058f, -0.000020f, +0.000110f, -0.000397f, +0.000413f, +0.000509f, +0.000383f, + +0.000019f, -0.000099f, -0.000070f, +0.000236f, +0.000088f, +0.000302f, +0.000016f, +0.000929f, -0.000024f, -0.000322f, + -0.000162f, +0.000275f, +0.000245f, +0.000532f, +0.000100f, +0.000394f, +0.000210f, +0.000294f, +0.000260f, -0.000071f, + -0.000043f, +0.000246f, +0.000197f, -0.000230f, +0.000138f, -0.000133f, -0.000121f, -0.000000f, -0.000163f, -0.000124f, + -0.000157f, -0.000065f, +0.000094f, +0.000097f, +0.000084f, +0.000011f, -0.000199f, -0.000065f, +0.000116f, -0.000018f, + +0.000018f, +0.000165f, -0.000051f, -0.000221f, +0.000044f, +0.000131f, -0.000014f, +0.000008f, +0.000077f, -0.000049f, + -0.000087f, +0.000071f, -0.000021f, -0.000070f, +0.000057f, +0.000075f, -0.000092f, -0.000036f, +0.000034f, +0.000062f, + -0.000003f, -0.000065f, +0.000046f, +0.000018f, +0.000079f, +0.000029f + }, + { + +0.000669f, +0.000498f, -0.002032f, +0.000150f, -0.000360f, +0.000202f, -0.000066f, -0.000143f, -0.000049f, -0.000317f, + -0.000122f, +0.000647f, +0.000361f, -0.001896f, +0.011427f, -0.000275f, +0.001672f, +0.000740f, -0.000046f, +0.001254f, + +0.001508f, +0.000871f, -0.000762f, +0.001287f, +0.001581f, +0.001344f, +0.000395f, -0.000236f, +0.000149f, -0.000872f, + +0.000608f, +0.000197f, -0.000133f, +0.000588f, +0.000759f, +0.000317f, -0.000028f, -0.000207f, +0.000235f, -0.000361f, + +0.000024f, +0.000208f, +0.000098f, +0.000064f, +0.000143f, +0.000262f, -0.000224f, -0.000497f, +0.000162f, +0.000128f, + -0.000433f, +0.000011f, +0.000023f, -0.000106f, -0.000190f, +0.000123f, +0.000034f, -0.000371f, +0.000177f, +0.000147f, + -0.000056f, +0.000054f, -0.000251f, +0.000131f, -0.000082f, +0.000163f, +0.000117f, -0.000084f, -0.000011f, -0.000021f, + -0.000027f, +0.000020f, +0.000027f, +0.000027f, -0.000077f, +0.000030f, +0.000031f, -0.000051f, -0.000043f, -0.000065f, + -0.000088f, +0.000080f, +0.000078f, +0.000063f, -0.000019f, -0.000041f, -0.000006f, -0.000054f, +0.000046f, -0.000032f, + -0.000039f, +0.000021f, -0.000019f, -0.000009f, +0.000025f, +0.000001f + }, + { + -0.009424f, +0.020441f, +0.002281f, +0.001628f, -0.001197f, -0.000282f, -0.001100f, +0.000062f, +0.000519f, -0.000808f, + -0.000890f, +0.000521f, +0.001489f, +0.000743f, -0.000640f, -0.000845f, -0.001189f, +0.000091f, +0.000269f, +0.000542f, + -0.000174f, +0.000307f, +0.000699f, -0.000484f, -0.000062f, -0.000727f, -0.000113f, +0.000136f, -0.000505f, -0.000019f, + +0.000124f, -0.000632f, -0.000205f, -0.000182f, -0.000386f, +0.000188f, +0.001113f, +0.001017f, -0.000971f, -0.000604f, + +0.000211f, -0.000169f, -0.000321f, -0.000020f, -0.000616f, -0.000235f, +0.000071f, -0.000196f, -0.000084f, +0.000126f, + -0.000023f, -0.000161f, -0.000105f, -0.000077f, +0.000083f, -0.000031f, +0.000064f, -0.000269f, +0.000039f, +0.000120f, + -0.000055f, -0.000056f, +0.000007f, -0.000100f, +0.000305f, +0.000370f, -0.000003f, -0.000079f, +0.000077f, -0.000047f, + -0.000005f, +0.000038f, -0.000045f, -0.000018f, -0.000067f, +0.000002f, +0.000137f, -0.000091f, +0.000045f, +0.000008f, + -0.000006f, -0.000040f, +0.000102f, -0.000006f, +0.000066f, +0.000046f, +0.000070f, -0.000031f, -0.000044f, -0.000064f, + +0.000012f, +0.000008f, +0.000020f, +0.000031f, -0.000050f, +0.000021f + }, + { + -0.000690f, +0.001756f, +0.001419f, -0.000294f, +0.000969f, -0.000559f, -0.000476f, +0.000112f, -0.000082f, -0.001012f, + -0.000182f, +0.000581f, -0.000334f, -0.000886f, -0.002257f, -0.001115f, -0.000397f, +0.001330f, -0.000859f, -0.001540f, + +0.000863f, +0.001151f, +0.001673f, -0.000565f, -0.000310f, -0.000666f, +0.000020f, -0.001009f, -0.000745f, +0.000165f, + -0.000107f, +0.000292f, -0.000610f, -0.000228f, -0.000113f, -0.000064f, +0.000009f, -0.000709f, -0.000197f, +0.000028f, + -0.000223f, -0.000243f, -0.000355f, +0.000068f, -0.000045f, -0.000403f, +0.000045f, +0.000051f, +0.000087f, +0.000025f, + -0.000319f, -0.000122f, -0.000052f, -0.000379f, +0.000222f, +0.000247f, +0.000029f, +0.000053f, -0.000031f, -0.000135f, + -0.000061f, +0.000050f, +0.000011f, +0.000199f, +0.000029f, +0.000102f, +0.000032f, -0.000092f, -0.000202f, -0.000191f, + +0.000056f, -0.000024f, +0.000073f, +0.000066f, -0.000016f, +0.000044f, +0.000063f, +0.000004f, -0.000019f, +0.000069f, + +0.000062f, +0.000042f, -0.000045f, -0.000026f, -0.000044f, -0.000073f, +0.000027f, +0.000018f, +0.000018f, +0.000007f, + -0.000028f, +0.000023f, -0.000016f, -0.000000f, -0.000053f, -0.000044f + }, + { + -0.005602f, +0.009477f, +0.004805f, -0.000488f, +0.000898f, +0.000820f, -0.003045f, +0.000595f, +0.000988f, +0.000011f, + -0.000517f, -0.000025f, -0.000147f, -0.000304f, -0.000758f, -0.000058f, -0.000159f, -0.000583f, -0.000284f, -0.000355f, + -0.000778f, +0.000148f, +0.000012f, -0.000496f, -0.000183f, -0.000029f, +0.000018f, -0.000417f, +0.000177f, -0.000198f, + -0.000595f, -0.000428f, +0.000277f, +0.000413f, -0.000451f, +0.000223f, +0.000501f, -0.000268f, +0.000348f, +0.000236f, + -0.000586f, -0.000358f, +0.000065f, -0.000154f, +0.000232f, -0.000175f, -0.000366f, -0.000059f, -0.000187f, +0.000091f, + -0.000210f, -0.000115f, -0.000152f, -0.000162f, +0.000172f, +0.000195f, +0.000142f, -0.000090f, -0.000283f, +0.000099f, + +0.000122f, -0.000064f, +0.000018f, +0.000173f, -0.000064f, -0.000052f, -0.000017f, +0.000069f, +0.000053f, -0.000059f, + +0.000005f, +0.000091f, -0.000031f, -0.000079f, -0.000070f, -0.000029f, -0.000106f, +0.000056f, +0.000029f, +0.000010f, + +0.000042f, -0.000062f, +0.000025f, +0.000070f, -0.000091f, +0.000033f, -0.000091f, -0.000040f, -0.000051f, +0.000040f, + -0.000004f, -0.000043f, +0.000006f, +0.000069f, -0.000004f, -0.000056f + }, + { + +0.000236f, -0.002978f, -0.000763f, -0.000473f, -0.000324f, -0.000449f, +0.000643f, +0.000147f, -0.000185f, +0.000303f, + -0.000654f, -0.000155f, -0.001265f, -0.002761f, +0.000549f, +0.001685f, -0.000652f, -0.000835f, -0.000604f, -0.000611f, + +0.000933f, +0.001710f, -0.000667f, -0.001224f, -0.000738f, -0.000152f, -0.000745f, -0.000002f, +0.000172f, +0.000018f, + +0.000016f, +0.000843f, -0.000299f, +0.000620f, -0.000921f, +0.000151f, +0.000376f, -0.000205f, -0.000467f, -0.000036f, + +0.000066f, +0.000135f, +0.000162f, -0.000432f, -0.000032f, +0.000147f, +0.000183f, -0.000227f, -0.000169f, -0.000108f, + -0.000365f, +0.000167f, +0.000067f, -0.000244f, -0.000170f, -0.000025f, +0.000198f, +0.000240f, +0.000169f, +0.000054f, + +0.000125f, -0.000182f, +0.000010f, +0.000194f, +0.000256f, -0.000039f, -0.000064f, +0.000112f, +0.000064f, +0.000042f, + -0.000023f, +0.000037f, +0.000033f, -0.000027f, -0.000002f, -0.000116f, -0.000139f, -0.000011f, -0.000003f, +0.000014f, + +0.000027f, -0.000025f, +0.000088f, +0.000065f, +0.000027f, +0.000044f, +0.000084f, +0.000082f, +0.000018f, +0.000010f, + -0.000007f, -0.000040f, -0.000025f, +0.000025f, +0.000005f, -0.000022f + }, + { + -0.000453f, +0.002233f, -0.001187f, -0.003370f, -0.000046f, +0.001272f, -0.001970f, +0.000431f, +0.000078f, +0.001789f, + -0.000449f, -0.000068f, +0.000698f, +0.000554f, +0.001067f, +0.000988f, +0.000895f, -0.000075f, +0.000140f, -0.000697f, + -0.000805f, +0.000203f, -0.000288f, +0.000798f, +0.000536f, +0.000122f, -0.000517f, -0.000076f, -0.000045f, -0.000298f, + -0.000423f, -0.000224f, +0.000222f, +0.000207f, +0.000440f, -0.000132f, +0.000210f, +0.000615f, +0.000096f, -0.000250f, + +0.000336f, -0.000034f, +0.000473f, -0.000229f, +0.000532f, +0.000272f, +0.000305f, +0.000286f, +0.000277f, -0.000309f, + -0.000002f, -0.000141f, -0.000187f, +0.000218f, -0.000493f, -0.000117f, +0.000042f, +0.000005f, +0.000225f, +0.000013f, + -0.000168f, -0.000079f, +0.000025f, -0.000177f, -0.000151f, -0.000038f, +0.000092f, +0.000189f, +0.000035f, -0.000218f, + +0.000075f, +0.000118f, -0.000029f, -0.000099f, +0.000006f, -0.000010f, +0.000024f, +0.000021f, -0.000013f, -0.000059f, + -0.000084f, +0.000098f, +0.000049f, -0.000001f, -0.000113f, -0.000036f, +0.000099f, +0.000083f, +0.000029f, +0.000092f, + +0.000034f, +0.000021f, +0.000001f, -0.000074f, -0.000019f, -0.000098f + }, + { + -0.000640f, +0.000299f, +0.000546f, -0.000229f, +0.000114f, -0.000477f, -0.000012f, +0.000119f, -0.000319f, +0.000354f, + +0.000115f, -0.000142f, +0.000538f, -0.000424f, -0.014313f, +0.000770f, -0.001013f, -0.000485f, +0.000587f, +0.002020f, + -0.000106f, +0.000288f, +0.000566f, -0.001179f, -0.000361f, -0.000559f, -0.000774f, +0.001138f, -0.000905f, -0.000894f, + -0.000078f, +0.000945f, +0.001303f, +0.000825f, +0.000082f, +0.000869f, +0.000312f, +0.000169f, +0.000390f, +0.000022f, + +0.000115f, -0.000156f, -0.000246f, -0.000162f, -0.000060f, -0.000055f, +0.000058f, -0.000467f, -0.000096f, -0.000011f, + -0.000085f, -0.000139f, -0.000093f, +0.000200f, +0.000067f, -0.000053f, +0.000052f, +0.000034f, -0.000104f, -0.000015f, + -0.000102f, -0.000293f, +0.000080f, +0.000052f, +0.000060f, -0.000090f, +0.000173f, -0.000050f, +0.000004f, +0.000070f, + +0.000022f, +0.000107f, -0.000032f, -0.000082f, +0.000060f, -0.000050f, +0.000029f, +0.000152f, -0.000031f, +0.000025f, + -0.000128f, -0.000082f, +0.000083f, +0.000025f, +0.000026f, +0.000085f, +0.000071f, -0.000027f, -0.000052f, +0.000079f, + -0.000033f, -0.000096f, -0.000018f, +0.000041f, -0.000055f, -0.000039f + }, + { + +0.000535f, -0.004818f, +0.001784f, +0.002100f, +0.000791f, -0.002632f, +0.000859f, +0.000432f, -0.000500f, +0.000445f, + +0.002676f, -0.001122f, -0.000570f, -0.001409f, +0.002233f, -0.000979f, -0.000432f, +0.000327f, +0.000261f, +0.000022f, + +0.001573f, +0.000422f, -0.000593f, -0.000527f, +0.000557f, +0.000791f, +0.000622f, +0.000055f, -0.001190f, -0.000579f, + +0.000038f, +0.000049f, +0.000107f, +0.000380f, -0.000256f, +0.000363f, +0.000060f, +0.000105f, +0.000010f, -0.000220f, + -0.000098f, -0.000626f, +0.000107f, +0.000266f, +0.000260f, -0.000087f, +0.000355f, +0.000034f, +0.000126f, -0.000406f, + +0.000542f, -0.000096f, -0.000420f, -0.000176f, -0.000183f, -0.000232f, -0.000015f, +0.000129f, +0.000032f, +0.000089f, + -0.000152f, -0.000034f, +0.000035f, +0.000177f, -0.000077f, -0.000038f, +0.000092f, -0.000014f, -0.000039f, +0.000020f, + +0.000019f, +0.000157f, +0.000060f, -0.000091f, -0.000228f, +0.000000f, +0.000060f, +0.000010f, -0.000060f, +0.000015f, + +0.000090f, +0.000005f, -0.000064f, +0.000054f, +0.000024f, -0.000001f, +0.000035f, -0.000079f, -0.000071f, +0.000077f, + -0.000026f, +0.000048f, +0.000053f, +0.000033f, -0.000021f, -0.000045f + } + }, + { + { + +0.000368f, +0.005727f, +0.000307f, +0.001606f, +0.000154f, -0.000262f, -0.000022f, -0.000204f, -0.000086f, -0.000227f, + -0.000303f, +0.000287f, -0.000170f, +0.002440f, -0.002399f, +0.000913f, +0.001162f, +0.000273f, -0.000798f, -0.000628f, + +0.000822f, -0.001612f, +0.000121f, -0.000537f, +0.000276f, -0.000245f, +0.000330f, -0.000175f, +0.000244f, +0.000374f, + -0.000146f, -0.000905f, -0.000034f, +0.000516f, +0.000312f, +0.000478f, +0.000169f, +0.000738f, +0.000628f, +0.000069f, + -0.000077f, -0.000090f, -0.000064f, -0.000215f, -0.000244f, +0.000038f, +0.000090f, +0.000375f, +0.000111f, +0.000002f, + -0.000095f, -0.000099f, +0.000059f, -0.000078f, -0.000276f, +0.000156f, +0.000127f, +0.000128f, +0.000055f, +0.000025f, + -0.000050f, -0.000393f, -0.000038f, +0.000124f, -0.000167f, -0.000080f, -0.000019f, +0.000020f, -0.000115f, -0.000092f, + +0.000092f, -0.000009f, +0.000069f, -0.000023f, +0.000007f, +0.000042f, +0.000029f, +0.000026f, -0.000046f, -0.000000f, + +0.000077f, -0.000066f, -0.000114f, -0.000079f, -0.000046f, +0.000103f, +0.000041f, -0.000010f, +0.000028f, +0.000064f, + -0.000028f, +0.000004f, +0.000007f, -0.000002f, +0.000062f, +0.000033f + }, + { + -0.005590f, +0.048965f, +0.010437f, +0.003590f, +0.001454f, -0.000471f, -0.000744f, +0.000997f, -0.000227f, -0.000403f, + +0.000246f, -0.000244f, +0.000356f, +0.000581f, -0.000302f, +0.000231f, +0.000741f, -0.000216f, -0.001226f, +0.000254f, + -0.000470f, +0.001115f, -0.000128f, -0.000380f, -0.000182f, +0.000149f, +0.000151f, +0.000095f, -0.000027f, -0.000160f, + +0.000270f, -0.000423f, -0.000101f, +0.000513f, +0.000278f, -0.000208f, +0.000264f, +0.000135f, +0.000504f, -0.000077f, + -0.000325f, -0.000023f, -0.000242f, +0.000386f, -0.000689f, +0.000226f, +0.000140f, +0.000225f, +0.000029f, -0.000026f, + +0.000294f, -0.000337f, -0.000460f, -0.000053f, +0.000059f, -0.000027f, -0.000267f, -0.000131f, -0.000029f, -0.000001f, + -0.000269f, -0.000056f, +0.000071f, -0.000010f, +0.000229f, +0.000106f, -0.000008f, -0.000066f, -0.000169f, +0.000071f, + -0.000003f, +0.000048f, +0.000043f, -0.000018f, +0.000155f, +0.000005f, -0.000071f, +0.000070f, +0.000096f, +0.000002f, + -0.000071f, +0.000006f, -0.000006f, -0.000091f, -0.000044f, +0.000094f, -0.000021f, -0.000039f, +0.000009f, -0.000000f, + +0.000038f, -0.000015f, -0.000047f, +0.000017f, -0.000013f, +0.000002f + }, + { + -0.000160f, +0.009231f, -0.001164f, -0.004206f, -0.001964f, +0.000159f, -0.000336f, +0.000380f, +0.000448f, +0.000510f, + +0.000049f, -0.000269f, +0.000196f, +0.000197f, +0.001311f, +0.000090f, -0.000100f, -0.000030f, +0.001057f, +0.000404f, + +0.000741f, -0.000009f, -0.000410f, +0.000160f, -0.000457f, -0.000653f, -0.000127f, +0.000502f, +0.000288f, +0.000636f, + -0.000032f, -0.000105f, -0.000205f, +0.000152f, +0.000757f, +0.000081f, +0.000095f, -0.000133f, +0.000332f, +0.000115f, + +0.000013f, -0.000648f, +0.000153f, -0.000244f, -0.000401f, +0.000463f, +0.000359f, -0.000168f, -0.000051f, -0.000042f, + +0.000328f, -0.000040f, -0.000200f, -0.000057f, -0.000037f, -0.000110f, -0.000243f, -0.000159f, +0.000279f, +0.000091f, + -0.000192f, -0.000161f, -0.000198f, +0.000097f, -0.000002f, -0.000062f, -0.000037f, +0.000025f, -0.000003f, -0.000078f, + +0.000005f, -0.000026f, +0.000013f, -0.000157f, +0.000037f, -0.000021f, +0.000058f, +0.000007f, +0.000034f, +0.000101f, + -0.000023f, -0.000043f, -0.000076f, -0.000026f, +0.000074f, -0.000023f, +0.000033f, +0.000006f, +0.000011f, +0.000082f, + -0.000002f, -0.000051f, -0.000025f, +0.000012f, +0.000019f, +0.000001f + }, + { + +0.000722f, -0.000884f, -0.001446f, -0.000778f, +0.000109f, +0.000261f, -0.000140f, +0.000100f, +0.000028f, +0.000152f, + +0.000046f, +0.000353f, -0.000029f, -0.002499f, +0.000526f, +0.000792f, +0.002889f, +0.001064f, +0.002997f, +0.000509f, + +0.000288f, -0.000939f, -0.000036f, +0.000848f, -0.001919f, +0.000953f, +0.000507f, -0.000217f, -0.000637f, +0.000102f, + +0.000565f, -0.000807f, +0.000032f, -0.000723f, +0.000535f, +0.000122f, -0.000406f, +0.000294f, -0.000209f, -0.000243f, + +0.000056f, -0.000131f, +0.000030f, +0.000221f, +0.000081f, -0.000233f, -0.000022f, +0.000019f, -0.000314f, -0.000026f, + +0.000251f, +0.000019f, -0.000192f, +0.000187f, +0.000030f, +0.000027f, +0.000185f, -0.000004f, -0.000041f, +0.000078f, + +0.000030f, -0.000153f, -0.000018f, +0.000032f, -0.000162f, -0.000127f, -0.000011f, +0.000004f, -0.000054f, -0.000020f, + +0.000200f, +0.000054f, -0.000018f, -0.000112f, +0.000079f, -0.000020f, -0.000123f, -0.000112f, -0.000024f, +0.000045f, + -0.000001f, -0.000075f, -0.000021f, -0.000010f, -0.000007f, +0.000045f, +0.000004f, -0.000015f, -0.000059f, +0.000035f, + +0.000019f, -0.000074f, -0.000095f, -0.000006f, -0.000036f, -0.000040f + }, + { + +0.006330f, +0.014080f, +0.007341f, -0.000614f, -0.000360f, +0.000079f, +0.000217f, +0.000084f, +0.000311f, +0.000332f, + -0.000035f, -0.000451f, -0.000703f, +0.000637f, -0.000055f, -0.000442f, +0.000082f, +0.000671f, +0.000141f, +0.000500f, + +0.000196f, -0.000617f, -0.000148f, +0.000799f, +0.000121f, -0.000006f, +0.000089f, +0.001407f, +0.000270f, -0.000195f, + +0.000031f, +0.000033f, -0.000131f, -0.000200f, -0.000580f, +0.000154f, +0.000548f, +0.000211f, -0.000154f, +0.000247f, + +0.000418f, +0.000186f, -0.000186f, +0.000396f, +0.000385f, -0.000537f, -0.000200f, +0.000118f, -0.000328f, -0.000160f, + +0.000212f, -0.000421f, +0.000171f, -0.000015f, -0.000062f, +0.000028f, +0.000236f, +0.000217f, +0.000012f, -0.000030f, + -0.000109f, -0.000077f, -0.000097f, -0.000062f, +0.000031f, -0.000106f, -0.000160f, +0.000017f, -0.000141f, +0.000017f, + +0.000030f, +0.000068f, +0.000212f, -0.000099f, -0.000120f, +0.000030f, -0.000113f, +0.000007f, +0.000009f, -0.000046f, + -0.000025f, -0.000014f, -0.000044f, +0.000026f, +0.000057f, +0.000018f, -0.000014f, +0.000004f, +0.000052f, +0.000025f, + +0.000004f, +0.000035f, +0.000023f, +0.000075f, -0.000029f, -0.000016f + }, + { + +0.000049f, -0.000594f, -0.002146f, +0.000465f, +0.000143f, +0.000069f, -0.000162f, -0.000138f, +0.000124f, -0.000011f, + +0.000393f, +0.000246f, -0.000012f, +0.001616f, +0.003326f, -0.000296f, +0.001575f, -0.001279f, -0.000493f, +0.002114f, + +0.000614f, +0.000222f, -0.000590f, -0.000830f, +0.000343f, -0.000125f, -0.001625f, -0.001023f, +0.000251f, +0.001926f, + -0.000731f, +0.000201f, -0.000081f, -0.000562f, -0.000291f, +0.000299f, -0.000019f, -0.000679f, +0.000249f, +0.000140f, + -0.000431f, +0.000053f, +0.000091f, +0.000039f, +0.000083f, -0.000348f, +0.000094f, +0.000227f, +0.000095f, +0.000267f, + -0.000184f, -0.000022f, +0.000170f, +0.000038f, -0.000024f, -0.000274f, +0.000087f, -0.000125f, +0.000082f, +0.000103f, + +0.000027f, +0.000043f, +0.000022f, +0.000057f, -0.000057f, -0.000020f, -0.000028f, +0.000114f, +0.000073f, +0.000079f, + -0.000032f, -0.000100f, -0.000020f, +0.000020f, -0.000053f, -0.000062f, -0.000095f, -0.000091f, -0.000056f, +0.000029f, + -0.000002f, -0.000032f, +0.000053f, +0.000048f, -0.000006f, -0.000038f, -0.000003f, +0.000008f, -0.000022f, -0.000005f, + +0.000065f, +0.000025f, -0.000092f, -0.000045f, -0.000025f, +0.000023f + }, + { + -0.000207f, +0.034850f, +0.000763f, -0.000200f, +0.000011f, -0.000049f, -0.000141f, -0.000065f, +0.000376f, +0.000359f, + -0.000178f, +0.000154f, -0.000030f, +0.001407f, -0.001519f, -0.000803f, +0.000296f, -0.000479f, +0.000370f, +0.000842f, + +0.000537f, -0.000339f, +0.000008f, -0.000148f, -0.000124f, +0.000308f, -0.000757f, +0.000188f, -0.000354f, +0.000373f, + +0.000074f, -0.000303f, -0.000031f, +0.000010f, +0.000157f, -0.000191f, -0.000203f, +0.000762f, +0.000087f, -0.000388f, + -0.000151f, +0.000553f, +0.000024f, -0.000061f, -0.000156f, +0.000184f, +0.000407f, +0.000150f, -0.000005f, +0.000007f, + +0.000032f, +0.000215f, +0.000033f, -0.000110f, -0.000102f, -0.000328f, -0.000079f, +0.000057f, -0.000222f, -0.000110f, + -0.000091f, -0.000087f, +0.000012f, +0.000018f, -0.000050f, -0.000091f, -0.000130f, +0.000111f, +0.000054f, -0.000104f, + +0.000079f, +0.000126f, -0.000112f, -0.000084f, +0.000069f, +0.000051f, -0.000081f, +0.000032f, +0.000038f, -0.000069f, + +0.000005f, +0.000041f, -0.000040f, -0.000044f, +0.000121f, -0.000047f, -0.000067f, +0.000015f, +0.000059f, +0.000026f, + -0.000069f, +0.000013f, -0.000000f, -0.000002f, +0.000040f, -0.000000f + }, + { + +0.000033f, -0.002604f, -0.000505f, +0.000787f, -0.000128f, +0.000219f, -0.000058f, -0.000076f, -0.000024f, +0.000003f, + +0.000372f, +0.000313f, +0.000822f, -0.001664f, +0.009950f, -0.000613f, +0.001177f, -0.000614f, -0.000071f, +0.000019f, + +0.000310f, -0.000236f, -0.000561f, +0.001356f, +0.001315f, +0.001218f, -0.000288f, +0.000417f, +0.000817f, -0.000113f, + +0.000954f, +0.000335f, -0.000490f, +0.000417f, -0.000044f, -0.000051f, +0.000043f, +0.000012f, -0.000058f, -0.000374f, + +0.000013f, +0.000017f, -0.000177f, +0.000070f, -0.000007f, -0.000125f, -0.000348f, +0.000107f, +0.000373f, -0.000007f, + -0.000363f, -0.000217f, +0.000113f, -0.000319f, -0.000212f, -0.000005f, -0.000142f, -0.000245f, +0.000190f, -0.000211f, + -0.000154f, -0.000042f, -0.000163f, +0.000118f, +0.000000f, +0.000198f, -0.000093f, -0.000186f, -0.000055f, +0.000017f, + -0.000106f, -0.000013f, +0.000056f, -0.000031f, -0.000073f, +0.000044f, -0.000088f, -0.000015f, +0.000014f, -0.000023f, + +0.000069f, +0.000075f, +0.000032f, +0.000011f, -0.000058f, -0.000005f, -0.000059f, +0.000011f, +0.000043f, -0.000075f, + +0.000039f, -0.000015f, +0.000004f, +0.000026f, +0.000006f, +0.000012f + }, + { + +0.011710f, +0.040726f, -0.007860f, +0.001920f, +0.000078f, -0.000131f, -0.000676f, +0.000965f, +0.000096f, -0.001017f, + +0.000529f, +0.001414f, +0.000409f, +0.000726f, +0.001753f, -0.000472f, -0.000522f, +0.000278f, -0.000489f, +0.000305f, + +0.000232f, +0.000595f, +0.000586f, +0.000279f, +0.000551f, -0.000435f, +0.000244f, +0.000313f, -0.000838f, -0.000290f, + -0.000183f, -0.000229f, +0.000288f, -0.000044f, -0.000053f, -0.000220f, +0.000130f, +0.000586f, -0.000525f, -0.000359f, + +0.000081f, +0.000125f, -0.000117f, -0.000225f, -0.000300f, -0.000445f, +0.000001f, +0.000161f, +0.000120f, +0.000037f, + -0.000345f, -0.000039f, -0.000008f, -0.000288f, +0.000102f, +0.000142f, +0.000016f, -0.000178f, +0.000216f, +0.000150f, + +0.000004f, +0.000065f, +0.000066f, +0.000013f, +0.000311f, +0.000058f, -0.000174f, -0.000033f, -0.000005f, -0.000103f, + +0.000071f, +0.000013f, -0.000165f, -0.000039f, -0.000141f, +0.000085f, +0.000049f, -0.000105f, +0.000028f, +0.000045f, + -0.000021f, -0.000028f, +0.000105f, +0.000073f, +0.000080f, +0.000062f, -0.000018f, -0.000072f, -0.000025f, -0.000014f, + +0.000062f, +0.000011f, +0.000053f, -0.000040f, -0.000015f, +0.000032f + }, + { + +0.000438f, +0.000668f, -0.000928f, +0.000936f, +0.000677f, -0.001597f, -0.000003f, +0.000178f, +0.000323f, -0.000395f, + +0.000343f, +0.001398f, +0.000149f, -0.000269f, -0.000671f, +0.000341f, -0.000460f, -0.000503f, -0.001115f, +0.000111f, + +0.000727f, -0.001033f, +0.000485f, -0.000507f, +0.000556f, +0.000015f, +0.000504f, -0.000107f, +0.000343f, +0.000472f, + +0.000415f, -0.000049f, -0.000871f, -0.000317f, +0.000095f, -0.000221f, -0.000493f, -0.000753f, -0.000089f, -0.000257f, + -0.000340f, -0.000048f, -0.000061f, +0.000192f, -0.000370f, -0.000270f, -0.000184f, +0.000101f, +0.000047f, -0.000201f, + -0.000272f, -0.000140f, -0.000118f, -0.000004f, +0.000556f, +0.000054f, -0.000174f, +0.000013f, -0.000125f, -0.000043f, + +0.000026f, +0.000037f, +0.000146f, +0.000136f, +0.000103f, +0.000093f, -0.000158f, -0.000138f, -0.000161f, +0.000007f, + +0.000005f, +0.000047f, +0.000161f, -0.000026f, -0.000063f, +0.000029f, +0.000100f, +0.000022f, +0.000043f, +0.000088f, + +0.000013f, -0.000001f, -0.000077f, -0.000015f, -0.000069f, -0.000031f, +0.000054f, -0.000022f, +0.000027f, -0.000052f, + -0.000009f, -0.000027f, -0.000018f, +0.000002f, -0.000065f, -0.000019f + }, + { + +0.003399f, +0.019321f, +0.000578f, -0.004451f, -0.000296f, +0.000795f, -0.002041f, +0.001005f, +0.000615f, -0.000348f, + -0.000229f, +0.000191f, -0.000129f, -0.000061f, +0.000397f, +0.000167f, -0.000296f, -0.000210f, +0.000109f, -0.000804f, + +0.000077f, -0.000312f, -0.000361f, -0.000690f, +0.000330f, +0.000268f, +0.000204f, -0.000236f, -0.000239f, +0.000123f, + -0.000186f, -0.000182f, -0.000072f, -0.000150f, -0.000600f, +0.000232f, +0.000099f, -0.000283f, +0.000504f, -0.000331f, + -0.000752f, -0.000016f, +0.000202f, -0.000132f, +0.000159f, -0.000097f, -0.000194f, -0.000107f, -0.000227f, +0.000263f, + -0.000108f, -0.000009f, -0.000108f, -0.000029f, +0.000066f, +0.000219f, +0.000207f, -0.000330f, -0.000099f, +0.000101f, + +0.000028f, -0.000088f, +0.000080f, +0.000181f, -0.000140f, +0.000018f, -0.000006f, +0.000065f, -0.000026f, +0.000014f, + +0.000044f, +0.000050f, -0.000055f, -0.000115f, -0.000010f, -0.000043f, -0.000050f, +0.000111f, -0.000059f, +0.000020f, + +0.000023f, -0.000052f, +0.000075f, -0.000045f, -0.000049f, -0.000073f, -0.000043f, -0.000030f, -0.000028f, +0.000047f, + -0.000034f, -0.000003f, +0.000035f, +0.000039f, -0.000047f, -0.000029f + }, + { + -0.000373f, -0.002990f, +0.000242f, +0.000567f, -0.000094f, -0.000028f, +0.000887f, -0.000197f, -0.001005f, -0.000043f, + -0.000175f, +0.000255f, -0.000191f, -0.000327f, +0.000998f, +0.001369f, -0.001284f, -0.002315f, -0.000670f, -0.001167f, + +0.000624f, +0.001657f, -0.001152f, -0.001170f, -0.000000f, -0.000242f, -0.000241f, -0.000417f, -0.000284f, -0.001427f, + +0.000625f, +0.000508f, -0.000185f, +0.000516f, -0.000736f, -0.000010f, +0.000294f, -0.000653f, -0.000175f, +0.000045f, + +0.000286f, +0.000067f, -0.000095f, -0.000279f, +0.000092f, +0.000111f, +0.000360f, -0.000126f, -0.000028f, -0.000214f, + -0.000208f, +0.000187f, -0.000047f, -0.000093f, +0.000003f, -0.000001f, +0.000297f, +0.000362f, +0.000010f, +0.000089f, + -0.000046f, -0.000002f, +0.000084f, +0.000281f, +0.000143f, -0.000208f, +0.000051f, -0.000041f, +0.000009f, -0.000005f, + -0.000074f, +0.000053f, -0.000027f, -0.000048f, +0.000042f, -0.000114f, -0.000119f, +0.000037f, -0.000017f, +0.000078f, + +0.000022f, -0.000043f, +0.000080f, +0.000051f, -0.000003f, +0.000074f, +0.000069f, +0.000031f, -0.000017f, +0.000002f, + -0.000007f, -0.000045f, -0.000040f, +0.000055f, +0.000014f, -0.000047f + }, + { + -0.001544f, +0.003171f, +0.000401f, -0.000648f, +0.000305f, -0.002195f, -0.002963f, +0.001609f, +0.000287f, -0.000044f, + -0.001018f, +0.000078f, -0.000387f, -0.000338f, +0.000215f, +0.000416f, +0.000153f, -0.000488f, +0.000288f, -0.001219f, + +0.000173f, +0.000533f, -0.000289f, -0.000041f, -0.000208f, -0.000351f, -0.000197f, -0.000059f, -0.000112f, -0.000207f, + -0.000355f, +0.000097f, -0.000259f, -0.000571f, -0.000066f, -0.000383f, -0.000204f, +0.000087f, -0.000259f, -0.000173f, + +0.000672f, +0.000307f, +0.000565f, +0.000223f, +0.000259f, +0.000517f, -0.000065f, +0.000250f, +0.000166f, -0.000007f, + -0.000179f, -0.000182f, -0.000161f, -0.000102f, -0.000189f, -0.000050f, +0.000097f, +0.000079f, +0.000204f, -0.000129f, + -0.000061f, +0.000047f, +0.000020f, -0.000180f, +0.000054f, +0.000108f, +0.000087f, +0.000118f, -0.000087f, -0.000174f, + +0.000216f, +0.000127f, -0.000144f, -0.000092f, +0.000017f, +0.000008f, +0.000028f, -0.000080f, -0.000037f, -0.000050f, + +0.000062f, +0.000131f, -0.000002f, -0.000031f, -0.000064f, +0.000084f, +0.000137f, +0.000031f, -0.000005f, +0.000054f, + -0.000006f, -0.000003f, -0.000071f, -0.000040f, -0.000032f, -0.000073f + }, + { + +0.000317f, +0.002105f, +0.000409f, +0.000096f, -0.000190f, -0.000360f, -0.000049f, -0.000236f, -0.000420f, +0.000650f, + +0.000180f, -0.000166f, +0.000536f, +0.003499f, -0.006820f, +0.002948f, -0.002610f, +0.000088f, -0.000013f, -0.000284f, + -0.001256f, -0.000400f, +0.000210f, -0.000457f, -0.000368f, -0.001294f, -0.000918f, -0.000014f, -0.000515f, +0.000609f, + +0.000401f, +0.000497f, +0.000146f, -0.000083f, +0.000099f, +0.000229f, +0.000089f, +0.000085f, +0.000015f, +0.000292f, + -0.000008f, -0.000261f, -0.000215f, -0.000029f, +0.000182f, +0.000189f, +0.000082f, -0.000257f, -0.000269f, -0.000003f, + -0.000299f, -0.000014f, +0.000074f, +0.000146f, +0.000010f, +0.000094f, +0.000069f, +0.000019f, -0.000152f, +0.000069f, + -0.000308f, -0.000217f, +0.000044f, -0.000072f, -0.000039f, +0.000098f, +0.000149f, -0.000126f, -0.000004f, +0.000016f, + -0.000033f, +0.000139f, +0.000036f, -0.000057f, +0.000015f, -0.000076f, +0.000135f, -0.000036f, +0.000040f, +0.000001f, + -0.000199f, +0.000021f, +0.000058f, +0.000022f, +0.000082f, +0.000077f, +0.000061f, -0.000091f, +0.000002f, +0.000027f, + -0.000101f, -0.000049f, +0.000061f, +0.000027f, -0.000046f, +0.000034f + }, + { + +0.000519f, -0.003446f, +0.002071f, -0.000910f, -0.001324f, -0.004553f, +0.000435f, +0.000491f, -0.000149f, +0.000692f, + +0.000200f, -0.002034f, +0.000324f, -0.001039f, +0.000840f, -0.001315f, -0.000080f, +0.000164f, -0.000695f, -0.000196f, + +0.001542f, +0.000107f, -0.000039f, -0.000726f, +0.000676f, +0.000677f, +0.000398f, +0.000964f, -0.000442f, -0.000150f, + -0.000023f, -0.000276f, +0.000006f, +0.000320f, +0.000230f, +0.000398f, +0.000344f, +0.000083f, -0.000196f, -0.000130f, + +0.000100f, -0.000079f, +0.000332f, -0.000153f, -0.000071f, +0.000353f, +0.000622f, -0.000191f, -0.000083f, -0.000115f, + +0.000561f, -0.000057f, -0.000253f, +0.000141f, -0.000260f, -0.000065f, +0.000155f, -0.000088f, +0.000134f, +0.000142f, + -0.000022f, +0.000157f, +0.000025f, +0.000205f, -0.000013f, +0.000037f, +0.000079f, +0.000107f, -0.000032f, +0.000005f, + -0.000020f, +0.000133f, +0.000002f, -0.000109f, -0.000122f, +0.000077f, +0.000059f, -0.000033f, -0.000042f, +0.000057f, + +0.000000f, -0.000043f, -0.000009f, +0.000040f, -0.000006f, -0.000061f, +0.000028f, -0.000141f, -0.000005f, +0.000063f, + -0.000042f, +0.000063f, +0.000016f, -0.000003f, -0.000006f, -0.000015f + } + }, + { + { + -0.000621f, +0.010962f, +0.000158f, +0.001124f, -0.000446f, -0.000075f, -0.000381f, +0.000227f, -0.000139f, +0.000066f, + +0.000026f, -0.000229f, +0.001920f, -0.000251f, -0.001364f, +0.000868f, +0.000513f, +0.000197f, +0.001495f, -0.001137f, + +0.000297f, -0.000186f, +0.001435f, +0.000839f, -0.000043f, +0.000030f, -0.000171f, -0.000252f, +0.000653f, +0.000988f, + +0.000109f, -0.000499f, +0.000423f, -0.000628f, +0.000101f, +0.000154f, +0.000162f, +0.000142f, -0.000259f, -0.000478f, + +0.000185f, -0.000087f, +0.000101f, -0.000501f, +0.000143f, -0.000175f, -0.000154f, -0.000211f, +0.000097f, -0.000081f, + +0.000017f, +0.000068f, -0.000029f, +0.000040f, +0.000208f, -0.000140f, -0.000144f, -0.000169f, -0.000062f, +0.000053f, + +0.000115f, +0.000008f, +0.000168f, -0.000003f, -0.000098f, +0.000071f, +0.000008f, -0.000037f, -0.000006f, +0.000165f, + -0.000041f, -0.000054f, -0.000041f, -0.000018f, +0.000029f, +0.000040f, -0.000048f, -0.000002f, +0.000066f, +0.000050f, + -0.000047f, -0.000022f, +0.000070f, +0.000106f, +0.000054f, +0.000005f, -0.000033f, +0.000025f, +0.000016f, -0.000045f, + -0.000046f, +0.000062f, -0.000012f, +0.000023f, -0.000034f, -0.000045f + }, + { + +0.006385f, +0.045511f, +0.001661f, +0.000070f, -0.000466f, -0.000019f, -0.000711f, -0.001856f, -0.001271f, +0.000008f, + -0.000058f, -0.000311f, +0.000746f, +0.000570f, -0.000884f, -0.001229f, -0.000460f, -0.000278f, +0.000661f, -0.000781f, + -0.000698f, +0.000707f, -0.000240f, -0.000590f, +0.000007f, +0.000672f, -0.000760f, -0.000093f, +0.000278f, +0.000155f, + +0.000608f, -0.000270f, -0.000386f, -0.000252f, +0.000307f, +0.000325f, +0.000115f, +0.000170f, -0.000381f, -0.000508f, + -0.000308f, +0.000278f, +0.000304f, +0.000043f, -0.000008f, -0.000028f, -0.000099f, -0.000043f, -0.000625f, +0.000283f, + +0.000131f, -0.000189f, +0.000090f, +0.000292f, +0.000058f, -0.000015f, -0.000123f, +0.000099f, -0.000058f, -0.000081f, + +0.000153f, +0.000050f, +0.000059f, +0.000101f, -0.000010f, -0.000133f, -0.000060f, +0.000073f, +0.000016f, +0.000103f, + -0.000021f, -0.000054f, -0.000050f, +0.000046f, +0.000009f, -0.000094f, +0.000073f, -0.000048f, -0.000062f, -0.000012f, + +0.000078f, -0.000002f, -0.000067f, -0.000002f, +0.000117f, -0.000044f, -0.000102f, +0.000069f, -0.000027f, +0.000017f, + -0.000023f, -0.000001f, +0.000024f, +0.000022f, -0.000010f, +0.000007f + }, + { + +0.000214f, +0.008771f, -0.004188f, -0.002026f, +0.002465f, -0.000160f, +0.000361f, +0.000563f, +0.000154f, -0.000312f, + -0.000722f, -0.000281f, -0.000984f, +0.000082f, +0.000609f, +0.000444f, -0.000530f, +0.000547f, +0.000584f, +0.000161f, + +0.000258f, -0.000554f, -0.000079f, -0.000267f, -0.000670f, -0.000065f, +0.000249f, +0.000544f, -0.000013f, +0.000037f, + -0.000184f, +0.000138f, +0.000468f, -0.000026f, +0.000356f, +0.000020f, -0.000036f, -0.000103f, +0.000510f, -0.000066f, + -0.000483f, +0.000134f, +0.000056f, +0.000076f, +0.000170f, -0.000291f, -0.000343f, +0.000423f, +0.000261f, +0.000401f, + -0.000102f, -0.000342f, -0.000242f, +0.000093f, -0.000088f, -0.000138f, -0.000019f, +0.000199f, +0.000215f, +0.000007f, + -0.000107f, +0.000133f, +0.000165f, +0.000043f, +0.000077f, +0.000085f, +0.000022f, +0.000051f, +0.000013f, +0.000092f, + +0.000041f, -0.000048f, +0.000067f, +0.000005f, -0.000007f, -0.000019f, +0.000084f, -0.000036f, -0.000002f, -0.000054f, + -0.000006f, -0.000042f, +0.000047f, +0.000019f, -0.000096f, -0.000025f, -0.000012f, -0.000050f, +0.000003f, +0.000005f, + +0.000001f, +0.000043f, +0.000026f, +0.000050f, +0.000004f, +0.000012f + }, + { + -0.000476f, -0.003100f, +0.000188f, +0.000247f, +0.000247f, -0.000077f, -0.000100f, -0.000002f, +0.000157f, +0.000115f, + +0.000099f, -0.000099f, -0.000850f, -0.001906f, -0.002344f, +0.003176f, +0.000991f, +0.000883f, +0.001879f, +0.000250f, + +0.000443f, -0.002045f, +0.000235f, +0.000743f, -0.000553f, -0.000318f, +0.000179f, +0.000969f, -0.000744f, -0.001256f, + -0.000227f, +0.001099f, +0.000058f, -0.000827f, -0.000261f, +0.000242f, +0.000228f, -0.000434f, +0.000293f, -0.000048f, + -0.000189f, +0.000087f, +0.000009f, -0.000058f, -0.000212f, -0.000010f, +0.000112f, -0.000018f, -0.000060f, +0.000245f, + +0.000139f, -0.000173f, +0.000233f, +0.000076f, +0.000230f, +0.000212f, -0.000124f, -0.000057f, +0.000167f, -0.000159f, + -0.000117f, -0.000107f, -0.000006f, -0.000072f, +0.000104f, -0.000004f, +0.000013f, -0.000080f, +0.000141f, +0.000068f, + -0.000056f, -0.000173f, -0.000077f, +0.000052f, +0.000051f, -0.000116f, +0.000051f, +0.000110f, +0.000051f, -0.000012f, + -0.000013f, -0.000002f, +0.000032f, -0.000010f, +0.000016f, -0.000065f, -0.000033f, +0.000030f, +0.000070f, +0.000029f, + -0.000009f, -0.000017f, +0.000053f, +0.000038f, -0.000022f, +0.000033f + }, + { + -0.003952f, +0.036933f, -0.002427f, -0.000477f, +0.000492f, +0.000003f, +0.000790f, +0.000048f, -0.000387f, -0.000256f, + +0.000009f, +0.000936f, -0.000667f, -0.000242f, +0.000400f, -0.000166f, +0.000188f, +0.000356f, -0.000280f, +0.000409f, + -0.000394f, -0.000364f, +0.000832f, -0.000823f, -0.000497f, +0.000416f, +0.000499f, -0.000223f, +0.000205f, -0.000252f, + +0.000179f, +0.000290f, -0.000588f, -0.000219f, -0.000354f, -0.000079f, -0.000743f, -0.000988f, +0.000320f, +0.000189f, + -0.000095f, +0.000226f, +0.000162f, +0.000494f, -0.000370f, -0.000118f, +0.000005f, +0.000018f, -0.000067f, -0.000184f, + +0.000068f, +0.000284f, +0.000081f, -0.000198f, -0.000093f, +0.000176f, +0.000146f, -0.000242f, -0.000142f, -0.000115f, + +0.000002f, -0.000187f, -0.000063f, -0.000014f, +0.000018f, -0.000134f, -0.000079f, -0.000201f, -0.000069f, +0.000149f, + +0.000024f, -0.000176f, -0.000116f, -0.000137f, +0.000086f, -0.000010f, +0.000018f, +0.000141f, -0.000107f, -0.000002f, + +0.000053f, +0.000033f, +0.000027f, +0.000021f, -0.000116f, +0.000018f, +0.000023f, -0.000008f, -0.000032f, -0.000034f, + +0.000008f, -0.000042f, +0.000001f, -0.000029f, -0.000048f, +0.000014f + }, + { + -0.000542f, +0.000528f, +0.000678f, -0.000226f, -0.000134f, -0.000106f, -0.000078f, -0.000078f, +0.000364f, +0.000216f, + +0.000150f, -0.000152f, -0.000221f, -0.000506f, -0.001082f, -0.000036f, +0.002458f, -0.000376f, +0.000447f, +0.001531f, + +0.001060f, +0.000687f, -0.000707f, -0.000653f, -0.001783f, -0.001610f, -0.001011f, -0.001292f, -0.000157f, +0.002285f, + -0.000539f, -0.000169f, -0.000128f, +0.000016f, +0.000228f, +0.000388f, +0.000371f, -0.000244f, +0.000502f, -0.000129f, + -0.000126f, +0.000144f, -0.000133f, +0.000211f, +0.000124f, -0.000033f, -0.000002f, -0.000110f, -0.000113f, -0.000029f, + +0.000046f, +0.000241f, -0.000078f, +0.000116f, +0.000051f, +0.000122f, -0.000138f, -0.000146f, +0.000033f, +0.000017f, + +0.000031f, -0.000081f, +0.000182f, +0.000035f, +0.000017f, +0.000033f, -0.000165f, +0.000013f, +0.000050f, -0.000072f, + -0.000076f, +0.000212f, +0.000024f, -0.000043f, +0.000003f, +0.000052f, +0.000124f, +0.000071f, +0.000060f, -0.000061f, + -0.000015f, +0.000079f, -0.000062f, -0.000045f, -0.000027f, +0.000019f, -0.000010f, -0.000009f, -0.000001f, +0.000030f, + -0.000002f, -0.000092f, +0.000011f, +0.000053f, -0.000004f, -0.000006f + }, + { + +0.006696f, +0.025433f, +0.000334f, +0.000749f, -0.000891f, +0.000172f, -0.000081f, +0.000752f, +0.000154f, -0.000245f, + -0.000055f, +0.000448f, -0.000037f, +0.000790f, -0.000748f, +0.000467f, -0.000098f, +0.000303f, +0.000174f, -0.000498f, + -0.000146f, -0.000229f, -0.000033f, -0.000356f, -0.000129f, -0.000108f, -0.000338f, +0.000478f, -0.001046f, -0.000366f, + +0.000224f, -0.000204f, +0.000384f, +0.000166f, +0.000489f, -0.000278f, +0.000079f, +0.000091f, +0.000035f, +0.000010f, + -0.000102f, +0.000318f, -0.000121f, -0.000370f, +0.000214f, -0.000168f, -0.000086f, -0.000367f, +0.000097f, -0.000072f, + -0.000016f, -0.000152f, -0.000100f, +0.000143f, -0.000356f, +0.000050f, +0.000097f, +0.000091f, +0.000151f, +0.000122f, + -0.000007f, -0.000036f, -0.000021f, -0.000062f, -0.000117f, +0.000054f, +0.000163f, +0.000101f, -0.000115f, -0.000004f, + -0.000004f, -0.000190f, +0.000099f, +0.000213f, +0.000017f, -0.000103f, +0.000007f, +0.000060f, -0.000014f, +0.000041f, + +0.000068f, -0.000041f, +0.000051f, +0.000058f, -0.000079f, -0.000081f, +0.000100f, +0.000051f, -0.000010f, -0.000051f, + +0.000014f, +0.000066f, -0.000068f, -0.000024f, -0.000037f, +0.000007f + }, + { + -0.000634f, -0.000596f, +0.002240f, +0.000344f, +0.000215f, -0.000180f, +0.000002f, -0.000276f, +0.000183f, +0.000271f, + -0.000083f, -0.000355f, -0.000722f, -0.000253f, +0.006524f, +0.001625f, -0.001219f, -0.001379f, +0.000057f, -0.001994f, + -0.001138f, -0.000339f, -0.000272f, -0.000377f, +0.001645f, -0.000121f, -0.001109f, +0.000835f, +0.000180f, +0.000256f, + -0.000127f, -0.000203f, -0.000424f, +0.000295f, -0.000696f, +0.000354f, -0.000060f, +0.000288f, -0.000118f, +0.000049f, + -0.000074f, -0.000074f, -0.000012f, -0.000302f, -0.000197f, +0.000007f, +0.000252f, +0.000050f, -0.000323f, +0.000165f, + +0.000171f, -0.000261f, -0.000022f, -0.000050f, +0.000201f, +0.000015f, +0.000049f, +0.000229f, -0.000259f, -0.000305f, + +0.000045f, +0.000067f, +0.000141f, +0.000019f, +0.000029f, -0.000084f, -0.000100f, +0.000001f, -0.000072f, +0.000008f, + -0.000080f, -0.000024f, -0.000025f, -0.000008f, +0.000086f, +0.000018f, -0.000027f, +0.000158f, +0.000101f, +0.000046f, + +0.000090f, -0.000101f, -0.000053f, -0.000086f, -0.000019f, +0.000051f, +0.000033f, +0.000048f, -0.000043f, +0.000042f, + +0.000069f, -0.000057f, +0.000020f, +0.000005f, -0.000004f, -0.000006f + }, + { + -0.011048f, +0.057113f, +0.001622f, +0.002728f, +0.000363f, +0.000178f, +0.000431f, -0.000432f, -0.000689f, +0.000841f, + +0.000209f, -0.000591f, -0.001567f, +0.000284f, +0.002389f, -0.000039f, +0.001213f, -0.000481f, -0.000281f, -0.000106f, + +0.000812f, +0.000342f, +0.000011f, +0.000739f, +0.000192f, +0.000150f, +0.000402f, +0.000391f, -0.000616f, -0.000034f, + +0.000092f, +0.000454f, -0.000139f, -0.000185f, +0.000064f, -0.000386f, -0.000530f, -0.000282f, +0.001058f, +0.000206f, + +0.000194f, +0.000107f, +0.000099f, +0.000121f, -0.000116f, -0.000296f, +0.000548f, +0.000085f, -0.000221f, -0.000099f, + -0.000071f, +0.000012f, -0.000126f, -0.000102f, +0.000173f, -0.000040f, -0.000195f, +0.000138f, +0.000167f, -0.000125f, + +0.000028f, +0.000134f, +0.000078f, +0.000019f, -0.000159f, -0.000249f, +0.000008f, +0.000048f, -0.000107f, +0.000007f, + +0.000015f, -0.000121f, -0.000065f, +0.000055f, +0.000069f, -0.000085f, -0.000117f, +0.000059f, +0.000032f, -0.000006f, + -0.000082f, +0.000036f, -0.000083f, +0.000043f, -0.000078f, -0.000025f, +0.000009f, +0.000040f, +0.000062f, +0.000059f, + +0.000009f, -0.000004f, -0.000031f, -0.000022f, +0.000059f, -0.000007f + }, + { + -0.000171f, -0.001519f, +0.001985f, +0.000210f, -0.000412f, +0.001135f, +0.000668f, -0.000856f, +0.000270f, +0.000487f, + +0.000475f, +0.000008f, -0.000427f, +0.000261f, +0.001261f, +0.000022f, -0.000338f, -0.001547f, +0.001941f, +0.001582f, + -0.000721f, -0.001225f, -0.000092f, +0.000497f, +0.001381f, +0.000306f, +0.000282f, +0.000831f, +0.000208f, +0.000591f, + +0.000503f, -0.001087f, +0.000104f, +0.000246f, -0.000131f, +0.000069f, -0.000114f, +0.000311f, +0.000107f, +0.000086f, + -0.000104f, +0.000246f, -0.000034f, -0.000117f, -0.000104f, +0.000302f, -0.000130f, -0.000007f, -0.000328f, -0.000029f, + +0.000316f, +0.000047f, -0.000040f, +0.000297f, -0.000106f, -0.000286f, -0.000091f, +0.000061f, +0.000075f, +0.000226f, + +0.000039f, -0.000075f, -0.000096f, -0.000121f, -0.000034f, -0.000152f, -0.000044f, +0.000139f, +0.000234f, +0.000142f, + -0.000081f, +0.000089f, +0.000007f, -0.000075f, +0.000043f, -0.000053f, -0.000050f, -0.000028f, -0.000009f, -0.000071f, + -0.000080f, -0.000023f, +0.000018f, +0.000010f, +0.000011f, +0.000061f, -0.000007f, -0.000027f, -0.000012f, -0.000017f, + +0.000034f, +0.000001f, +0.000021f, -0.000002f, +0.000039f, +0.000051f + }, + { + -0.001430f, +0.024775f, -0.001938f, -0.003971f, -0.000201f, +0.002303f, +0.001575f, -0.001009f, -0.000726f, +0.000230f, + -0.000027f, +0.000080f, +0.000580f, +0.000889f, -0.000205f, +0.000427f, +0.000242f, +0.000488f, -0.000096f, -0.000527f, + +0.000295f, -0.000803f, +0.000230f, -0.000388f, +0.000421f, +0.000451f, -0.000188f, -0.000482f, -0.000023f, +0.000391f, + +0.000521f, +0.000077f, -0.000386f, -0.000448f, +0.000022f, -0.000441f, -0.000136f, +0.000446f, -0.000169f, -0.000100f, + +0.000530f, +0.000202f, -0.000189f, -0.000001f, -0.000465f, -0.000063f, +0.000059f, +0.000180f, -0.000129f, -0.000008f, + +0.000184f, +0.000191f, +0.000052f, +0.000018f, -0.000203f, -0.000167f, -0.000048f, -0.000059f, +0.000248f, -0.000155f, + -0.000012f, +0.000033f, -0.000028f, -0.000045f, -0.000033f, +0.000019f, -0.000042f, -0.000014f, -0.000079f, +0.000019f, + +0.000024f, -0.000027f, +0.000017f, +0.000129f, +0.000105f, +0.000047f, +0.000080f, -0.000054f, -0.000077f, -0.000007f, + -0.000061f, +0.000068f, -0.000025f, -0.000041f, +0.000057f, -0.000028f, +0.000086f, -0.000003f, +0.000032f, -0.000047f, + -0.000004f, +0.000036f, -0.000028f, -0.000064f, -0.000010f, +0.000053f + }, + { + +0.000353f, -0.002618f, -0.000011f, +0.000541f, -0.000114f, +0.000221f, -0.000373f, -0.000430f, -0.000798f, -0.000007f, + +0.000246f, -0.000340f, -0.000181f, +0.000993f, -0.000745f, +0.000513f, -0.001044f, -0.001540f, +0.000766f, -0.000422f, + -0.000989f, +0.000554f, +0.000046f, +0.000613f, +0.000542f, -0.001324f, -0.000054f, -0.000740f, -0.000882f, -0.000000f, + +0.000777f, -0.001026f, -0.000052f, -0.000353f, +0.000172f, -0.000462f, +0.000050f, -0.000022f, +0.000431f, +0.000303f, + +0.000124f, -0.000294f, -0.000015f, +0.000348f, +0.000161f, +0.000168f, +0.000027f, -0.000093f, +0.000293f, -0.000009f, + +0.000116f, -0.000191f, -0.000023f, +0.000124f, +0.000184f, -0.000104f, +0.000005f, -0.000351f, -0.000279f, -0.000172f, + +0.000022f, +0.000266f, +0.000035f, -0.000104f, -0.000213f, +0.000008f, +0.000132f, -0.000140f, +0.000008f, +0.000026f, + +0.000038f, +0.000062f, +0.000020f, +0.000054f, +0.000060f, +0.000094f, +0.000086f, +0.000033f, -0.000044f, -0.000004f, + -0.000016f, +0.000035f, -0.000095f, -0.000082f, -0.000022f, -0.000011f, -0.000060f, -0.000056f, -0.000012f, +0.000010f, + -0.000002f, +0.000024f, +0.000025f, -0.000016f, -0.000007f, +0.000026f + }, + { + +0.002371f, -0.004672f, +0.002453f, +0.001896f, +0.000479f, -0.002509f, +0.002409f, +0.000044f, -0.000388f, -0.000253f, + +0.000718f, -0.000016f, +0.000045f, -0.001819f, -0.000150f, -0.000329f, -0.000541f, +0.000254f, -0.000131f, +0.000161f, + +0.000794f, +0.000305f, +0.000016f, -0.000258f, -0.000487f, +0.000385f, +0.000567f, +0.000243f, +0.000241f, -0.000102f, + +0.000103f, +0.000150f, -0.000208f, -0.000808f, +0.000091f, -0.000292f, +0.000203f, -0.000340f, -0.000232f, +0.000584f, + +0.000083f, -0.000158f, -0.000142f, +0.000032f, -0.000473f, -0.000003f, -0.000075f, -0.000421f, -0.000180f, +0.000004f, + -0.000074f, +0.000089f, +0.000010f, +0.000184f, +0.000445f, +0.000141f, +0.000062f, +0.000123f, -0.000231f, -0.000062f, + +0.000196f, -0.000039f, -0.000066f, -0.000048f, +0.000109f, +0.000034f, -0.000104f, -0.000087f, -0.000041f, +0.000150f, + -0.000016f, -0.000070f, -0.000024f, +0.000093f, +0.000019f, +0.000004f, -0.000081f, -0.000018f, +0.000017f, +0.000062f, + +0.000101f, -0.000082f, -0.000057f, +0.000022f, +0.000122f, +0.000071f, -0.000137f, -0.000073f, -0.000038f, -0.000065f, + -0.000039f, -0.000014f, +0.000026f, +0.000070f, +0.000013f, +0.000072f + }, + { + +0.000022f, +0.003232f, -0.001671f, +0.000526f, -0.000243f, +0.000316f, -0.000154f, -0.000176f, +0.000301f, +0.000188f, + +0.000344f, -0.000064f, -0.000958f, +0.001960f, +0.010069f, -0.001807f, -0.002023f, +0.000244f, -0.000058f, -0.000216f, + -0.000390f, -0.000607f, -0.000118f, +0.000782f, -0.000318f, -0.000469f, -0.000171f, -0.000300f, +0.000630f, +0.000384f, + +0.000115f, -0.001083f, -0.000825f, +0.000137f, +0.000111f, -0.000815f, +0.000062f, -0.000095f, -0.000284f, +0.000149f, + -0.000021f, +0.000273f, +0.000041f, +0.000019f, +0.000176f, -0.000033f, -0.000005f, +0.000194f, -0.000140f, -0.000050f, + +0.000164f, +0.000109f, +0.000024f, -0.000096f, -0.000089f, +0.000025f, -0.000052f, -0.000065f, -0.000074f, +0.000047f, + +0.000059f, +0.000185f, -0.000152f, -0.000125f, +0.000017f, +0.000113f, -0.000114f, +0.000158f, +0.000086f, +0.000024f, + -0.000016f, -0.000100f, +0.000008f, +0.000063f, -0.000038f, +0.000057f, -0.000030f, -0.000161f, +0.000072f, -0.000048f, + +0.000091f, +0.000107f, -0.000062f, -0.000010f, -0.000018f, -0.000078f, -0.000071f, +0.000031f, +0.000033f, -0.000068f, + +0.000046f, +0.000107f, +0.000018f, -0.000034f, +0.000058f, +0.000021f + }, + { + -0.000720f, -0.003142f, +0.001107f, -0.001534f, -0.000847f, +0.001990f, -0.001406f, +0.000161f, +0.000177f, +0.000628f, + -0.001086f, +0.000551f, +0.000405f, +0.001910f, -0.003870f, +0.000310f, +0.000765f, +0.000084f, -0.000376f, +0.000586f, + -0.000529f, -0.000277f, +0.000192f, +0.000417f, +0.000273f, -0.000264f, -0.000292f, +0.001669f, +0.000257f, -0.000478f, + +0.000085f, +0.000197f, -0.000313f, -0.000153f, +0.000235f, +0.000056f, -0.000199f, -0.000074f, +0.000142f, +0.000223f, + +0.000018f, +0.000545f, -0.000097f, -0.000380f, -0.000216f, +0.000290f, -0.000187f, +0.000036f, +0.000111f, +0.000267f, + +0.000154f, +0.000304f, +0.000270f, +0.000220f, -0.000006f, -0.000060f, -0.000069f, -0.000153f, +0.000121f, +0.000038f, + +0.000067f, +0.000031f, -0.000134f, -0.000055f, -0.000006f, -0.000030f, -0.000052f, +0.000090f, -0.000025f, +0.000024f, + -0.000041f, -0.000095f, -0.000077f, +0.000139f, +0.000133f, -0.000023f, -0.000067f, -0.000059f, +0.000030f, -0.000019f, + -0.000081f, -0.000014f, +0.000065f, -0.000003f, +0.000036f, +0.000027f, -0.000005f, +0.000041f, +0.000046f, -0.000082f, + -0.000000f, -0.000021f, -0.000022f, -0.000005f, +0.000032f, +0.000039f + } + }, + { + { + +0.000191f, +0.010921f, -0.000497f, +0.000252f, -0.000582f, +0.000144f, -0.000336f, +0.000316f, -0.000117f, +0.000301f, + -0.000402f, +0.000187f, +0.000714f, -0.001152f, +0.000196f, -0.000139f, -0.000339f, +0.000450f, +0.002407f, -0.000790f, + +0.000804f, +0.001194f, +0.000821f, +0.000336f, -0.000144f, -0.000149f, +0.000190f, -0.000153f, +0.000172f, +0.000602f, + +0.000190f, -0.000113f, +0.000481f, -0.000357f, -0.000395f, +0.000036f, +0.000030f, -0.000494f, -0.000548f, -0.000543f, + +0.000092f, -0.000145f, +0.000052f, -0.000138f, +0.000499f, -0.000219f, -0.000244f, -0.000248f, -0.000103f, -0.000110f, + -0.000000f, -0.000048f, -0.000097f, +0.000079f, +0.000069f, -0.000176f, -0.000040f, -0.000255f, +0.000039f, +0.000061f, + +0.000081f, +0.000157f, +0.000118f, +0.000023f, -0.000004f, +0.000061f, -0.000102f, -0.000017f, +0.000103f, +0.000092f, + -0.000063f, -0.000028f, -0.000045f, +0.000036f, +0.000024f, -0.000037f, -0.000056f, +0.000019f, +0.000041f, -0.000012f, + -0.000037f, +0.000025f, +0.000090f, +0.000065f, +0.000016f, -0.000061f, -0.000050f, +0.000009f, +0.000003f, -0.000075f, + +0.000020f, +0.000014f, -0.000005f, +0.000006f, -0.000060f, -0.000027f + }, + { + -0.006133f, +0.029145f, +0.005433f, +0.000148f, -0.000964f, +0.000366f, -0.000427f, -0.001732f, -0.000359f, +0.000702f, + +0.000525f, -0.000027f, +0.000440f, -0.000398f, -0.001222f, -0.000933f, -0.000124f, -0.000258f, +0.000772f, -0.000792f, + -0.000718f, +0.000292f, -0.000085f, -0.000047f, +0.000125f, +0.000202f, -0.000658f, +0.000216f, -0.000084f, -0.000113f, + +0.000123f, +0.000018f, -0.000053f, -0.000150f, +0.000229f, +0.000680f, +0.000320f, +0.000183f, -0.000595f, -0.000332f, + +0.000114f, +0.000289f, +0.000268f, -0.000149f, +0.000003f, -0.000231f, +0.000119f, -0.000251f, -0.000400f, +0.000470f, + -0.000244f, +0.000026f, +0.000369f, +0.000165f, -0.000102f, -0.000041f, +0.000180f, +0.000187f, -0.000077f, -0.000084f, + +0.000219f, -0.000018f, +0.000058f, +0.000128f, -0.000164f, -0.000094f, -0.000041f, +0.000113f, +0.000074f, -0.000008f, + -0.000064f, -0.000078f, +0.000003f, +0.000013f, -0.000115f, +0.000006f, +0.000048f, -0.000087f, -0.000042f, +0.000009f, + +0.000061f, -0.000031f, +0.000010f, +0.000047f, +0.000079f, -0.000121f, +0.000007f, +0.000049f, +0.000000f, +0.000012f, + -0.000036f, +0.000014f, +0.000037f, -0.000022f, +0.000014f, -0.000000f + }, + { + +0.000890f, +0.020136f, +0.006962f, +0.000669f, +0.002199f, -0.000493f, +0.000241f, -0.000105f, -0.000106f, -0.000461f, + -0.000088f, +0.000543f, -0.000504f, -0.000759f, -0.000487f, +0.001449f, +0.000559f, +0.000554f, +0.000225f, +0.000025f, + +0.000076f, -0.000315f, -0.000304f, -0.000115f, -0.000087f, +0.000391f, -0.000064f, -0.000065f, -0.000369f, +0.000491f, + +0.000122f, -0.000132f, +0.000146f, -0.000289f, -0.000077f, -0.000176f, -0.000006f, +0.000068f, +0.000074f, -0.000576f, + -0.000220f, +0.000527f, +0.000149f, +0.000199f, +0.000223f, -0.000613f, -0.000399f, +0.000461f, -0.000050f, +0.000107f, + -0.000004f, +0.000186f, -0.000042f, +0.000011f, -0.000040f, +0.000050f, +0.000116f, +0.000031f, +0.000084f, +0.000009f, + +0.000074f, +0.000172f, +0.000158f, +0.000038f, +0.000096f, -0.000042f, -0.000003f, -0.000036f, +0.000032f, +0.000083f, + -0.000008f, -0.000101f, +0.000031f, +0.000025f, +0.000006f, +0.000027f, +0.000044f, +0.000009f, +0.000004f, -0.000093f, + -0.000000f, +0.000021f, +0.000067f, -0.000027f, -0.000079f, +0.000007f, -0.000056f, -0.000024f, +0.000029f, -0.000032f, + +0.000035f, +0.000036f, +0.000029f, +0.000010f, -0.000008f, +0.000019f + }, + { + +0.000547f, -0.004959f, -0.001480f, +0.000409f, -0.000091f, -0.000211f, -0.000020f, -0.000048f, -0.000063f, +0.000036f, + +0.000062f, -0.000219f, -0.000868f, -0.001034f, -0.004573f, -0.000546f, -0.001174f, +0.000522f, +0.000318f, +0.000214f, + -0.000427f, -0.001801f, +0.000239f, -0.000118f, +0.000057f, -0.001845f, -0.000904f, +0.001427f, -0.000399f, -0.000899f, + -0.000068f, +0.001283f, +0.000220f, -0.000610f, -0.000474f, +0.000143f, -0.000204f, -0.000187f, +0.000299f, -0.000281f, + +0.000039f, +0.000009f, -0.000108f, -0.000225f, -0.000127f, +0.000232f, -0.000080f, +0.000086f, +0.000232f, +0.000130f, + -0.000103f, -0.000067f, +0.000095f, -0.000041f, +0.000226f, -0.000048f, -0.000156f, +0.000094f, +0.000011f, -0.000167f, + -0.000024f, +0.000054f, +0.000003f, -0.000036f, +0.000094f, +0.000004f, +0.000039f, -0.000077f, +0.000078f, +0.000006f, + -0.000153f, -0.000081f, -0.000022f, +0.000075f, -0.000022f, -0.000035f, +0.000144f, +0.000105f, -0.000023f, -0.000049f, + -0.000027f, +0.000036f, +0.000003f, +0.000018f, -0.000000f, -0.000062f, -0.000005f, +0.000051f, +0.000091f, -0.000029f, + +0.000000f, +0.000052f, +0.000078f, +0.000030f, +0.000008f, +0.000040f + }, + { + -0.000935f, +0.045161f, +0.000476f, -0.000970f, -0.000420f, -0.000129f, +0.000625f, +0.000075f, -0.000521f, -0.000480f, + +0.000487f, +0.000394f, -0.000187f, +0.000441f, +0.001047f, +0.000664f, -0.000020f, +0.000211f, +0.000405f, +0.000281f, + -0.000362f, -0.000032f, +0.000831f, -0.001039f, +0.000293f, +0.000245f, +0.000362f, -0.002208f, -0.001286f, +0.000296f, + +0.000659f, +0.000242f, -0.000018f, +0.000125f, +0.000011f, +0.000141f, -0.000715f, -0.000001f, +0.000197f, +0.000053f, + +0.000045f, +0.000071f, -0.000044f, -0.000102f, -0.000436f, +0.000329f, +0.000020f, +0.000023f, +0.000230f, -0.000022f, + +0.000205f, +0.000205f, -0.000125f, -0.000107f, -0.000045f, +0.000178f, -0.000045f, -0.000218f, -0.000086f, -0.000113f, + -0.000032f, -0.000147f, +0.000044f, -0.000068f, -0.000025f, -0.000058f, +0.000020f, -0.000130f, -0.000015f, +0.000069f, + -0.000022f, -0.000165f, -0.000103f, +0.000012f, +0.000072f, -0.000050f, +0.000059f, +0.000068f, -0.000050f, +0.000018f, + +0.000021f, +0.000058f, +0.000050f, -0.000010f, -0.000079f, +0.000032f, +0.000010f, -0.000022f, -0.000062f, -0.000029f, + -0.000013f, -0.000046f, +0.000002f, -0.000050f, +0.000002f, +0.000016f + }, + { + -0.000139f, +0.002463f, +0.000305f, -0.000320f, -0.000149f, -0.000089f, +0.000104f, -0.000153f, +0.000240f, +0.000003f, + -0.000061f, -0.000045f, -0.000474f, -0.001621f, -0.000133f, -0.000756f, +0.000375f, +0.000756f, +0.001912f, +0.000958f, + +0.000310f, +0.000950f, +0.000693f, -0.000654f, -0.002538f, -0.000601f, +0.000066f, -0.000627f, -0.001030f, +0.000605f, + -0.000916f, +0.000012f, -0.000046f, +0.000148f, +0.000258f, -0.000243f, +0.000317f, -0.000096f, +0.000294f, -0.000111f, + +0.000365f, +0.000104f, -0.000013f, +0.000274f, +0.000102f, -0.000064f, -0.000052f, -0.000003f, -0.000012f, -0.000101f, + +0.000106f, +0.000110f, -0.000185f, +0.000055f, -0.000004f, +0.000098f, -0.000132f, -0.000042f, -0.000050f, -0.000078f, + -0.000101f, -0.000051f, +0.000192f, +0.000015f, -0.000022f, +0.000012f, -0.000060f, -0.000011f, +0.000024f, -0.000099f, + +0.000035f, +0.000166f, -0.000071f, -0.000044f, +0.000080f, +0.000050f, +0.000136f, +0.000073f, +0.000025f, -0.000084f, + +0.000040f, +0.000005f, -0.000112f, -0.000049f, +0.000005f, +0.000021f, -0.000011f, +0.000001f, +0.000009f, +0.000009f, + -0.000052f, -0.000034f, +0.000069f, +0.000032f, +0.000006f, -0.000021f + }, + { + -0.011167f, -0.000806f, -0.000532f, +0.001783f, +0.001241f, +0.000135f, +0.000130f, +0.000175f, -0.000623f, -0.000231f, + -0.000189f, +0.000059f, -0.000053f, +0.000314f, -0.000576f, +0.000476f, -0.000279f, +0.000176f, +0.000236f, -0.000372f, + -0.000123f, +0.000254f, +0.000066f, -0.000056f, -0.000006f, +0.000322f, +0.000340f, +0.000184f, -0.000637f, -0.000212f, + +0.000360f, +0.000226f, +0.000280f, -0.000245f, +0.000171f, -0.000369f, -0.000188f, +0.000076f, -0.000006f, +0.000112f, + -0.000129f, -0.000063f, -0.000206f, -0.000188f, +0.000191f, -0.000261f, -0.000498f, -0.000345f, +0.000193f, -0.000132f, + +0.000032f, -0.000028f, +0.000035f, +0.000121f, -0.000090f, +0.000260f, +0.000131f, +0.000008f, +0.000117f, +0.000073f, + -0.000063f, +0.000012f, +0.000017f, -0.000035f, -0.000049f, +0.000134f, +0.000122f, -0.000069f, -0.000138f, +0.000033f, + -0.000067f, -0.000191f, +0.000170f, +0.000123f, -0.000038f, -0.000054f, +0.000017f, +0.000004f, +0.000012f, +0.000055f, + +0.000013f, -0.000010f, +0.000081f, +0.000032f, -0.000130f, +0.000012f, +0.000074f, +0.000012f, -0.000038f, -0.000030f, + +0.000070f, +0.000016f, -0.000034f, -0.000015f, -0.000032f, +0.000011f + }, + { + -0.000110f, +0.001754f, +0.001444f, +0.000572f, -0.000099f, -0.000245f, +0.000082f, -0.000306f, +0.000150f, +0.000050f, + -0.000471f, -0.000304f, -0.000818f, -0.001489f, +0.001809f, -0.002115f, -0.001729f, -0.000333f, -0.000340f, -0.001071f, + +0.000100f, +0.000289f, -0.000395f, -0.000813f, +0.000002f, -0.001102f, -0.000448f, +0.000230f, -0.000017f, +0.000565f, + -0.000526f, -0.000389f, -0.000144f, +0.000181f, -0.000252f, +0.000482f, -0.000125f, +0.000340f, +0.000327f, +0.000369f, + +0.000132f, -0.000188f, +0.000019f, -0.000332f, -0.000333f, +0.000061f, +0.000476f, -0.000159f, -0.000291f, +0.000386f, + +0.000226f, -0.000014f, -0.000026f, +0.000149f, +0.000143f, +0.000077f, +0.000209f, +0.000245f, -0.000287f, -0.000060f, + +0.000132f, +0.000117f, +0.000083f, +0.000030f, -0.000002f, -0.000092f, +0.000016f, +0.000043f, -0.000037f, +0.000020f, + +0.000019f, +0.000028f, -0.000006f, +0.000047f, +0.000074f, -0.000012f, +0.000036f, +0.000113f, +0.000040f, -0.000007f, + -0.000038f, -0.000084f, -0.000025f, -0.000057f, +0.000019f, +0.000028f, +0.000074f, +0.000001f, -0.000025f, +0.000082f, + +0.000010f, -0.000020f, +0.000005f, -0.000019f, -0.000003f, -0.000019f + }, + { + +0.007496f, +0.073055f, -0.001509f, +0.004104f, +0.000938f, +0.000186f, +0.000616f, -0.000744f, -0.000505f, +0.000879f, + -0.000785f, -0.001222f, -0.001037f, +0.000405f, +0.001220f, -0.000376f, +0.000610f, -0.000686f, +0.000201f, +0.000011f, + +0.000604f, -0.000247f, -0.000251f, +0.000141f, -0.000407f, +0.000151f, +0.000198f, +0.000506f, +0.000150f, +0.000449f, + +0.000016f, +0.000013f, -0.000433f, -0.000018f, +0.000239f, -0.000139f, +0.000314f, -0.000450f, +0.000755f, +0.000640f, + +0.000594f, +0.000001f, -0.000102f, +0.000240f, -0.000110f, +0.000253f, +0.000404f, -0.000370f, -0.000231f, -0.000100f, + +0.000060f, -0.000046f, -0.000047f, +0.000050f, +0.000122f, -0.000136f, -0.000197f, -0.000001f, -0.000096f, -0.000163f, + +0.000079f, +0.000051f, +0.000070f, -0.000034f, -0.000268f, -0.000037f, +0.000179f, -0.000002f, -0.000019f, +0.000020f, + -0.000059f, -0.000060f, +0.000046f, +0.000056f, +0.000106f, -0.000184f, -0.000077f, +0.000089f, +0.000014f, -0.000073f, + -0.000019f, +0.000033f, -0.000099f, -0.000011f, -0.000108f, -0.000035f, +0.000049f, +0.000059f, +0.000037f, -0.000003f, + -0.000034f, +0.000003f, -0.000050f, +0.000025f, +0.000024f, -0.000027f + }, + { + +0.000161f, -0.002932f, +0.001081f, -0.001114f, -0.000543f, +0.001501f, -0.000427f, -0.000907f, +0.000013f, -0.000071f, + -0.000147f, -0.000714f, +0.000202f, +0.000455f, +0.001655f, +0.001139f, +0.001350f, +0.000270f, +0.002122f, +0.000142f, + -0.001190f, +0.000040f, +0.000064f, -0.000095f, +0.000669f, -0.000130f, -0.000099f, +0.000329f, +0.000170f, +0.000507f, + +0.000034f, -0.000414f, +0.000618f, +0.000408f, -0.000191f, +0.000209f, +0.000070f, +0.000422f, -0.000248f, +0.000236f, + +0.000139f, +0.000245f, -0.000136f, -0.000130f, +0.000265f, +0.000284f, +0.000116f, -0.000004f, -0.000204f, +0.000249f, + +0.000489f, +0.000106f, -0.000000f, +0.000083f, -0.000337f, -0.000075f, +0.000102f, +0.000046f, +0.000137f, +0.000173f, + -0.000019f, -0.000043f, -0.000157f, -0.000085f, -0.000111f, -0.000115f, +0.000079f, +0.000158f, +0.000187f, -0.000039f, + -0.000049f, +0.000023f, -0.000079f, -0.000029f, +0.000043f, -0.000056f, -0.000097f, -0.000047f, -0.000039f, -0.000089f, + -0.000049f, +0.000007f, +0.000058f, +0.000011f, +0.000034f, +0.000013f, -0.000042f, +0.000007f, -0.000012f, +0.000034f, + -0.000000f, +0.000034f, +0.000022f, -0.000005f, +0.000047f, +0.000030f + }, + { + +0.000038f, +0.025670f, +0.000437f, +0.000694f, +0.000964f, +0.000510f, -0.001779f, -0.001790f, -0.001001f, +0.000422f, + +0.000199f, +0.000295f, +0.000727f, +0.000373f, -0.000733f, +0.000975f, +0.000676f, +0.000729f, +0.000169f, +0.000419f, + -0.000054f, -0.000516f, +0.000136f, -0.000290f, -0.000075f, -0.000138f, -0.000367f, -0.000224f, +0.000288f, +0.000007f, + +0.000008f, -0.000113f, -0.000190f, -0.000269f, +0.000415f, -0.000390f, +0.000110f, +0.000348f, -0.000304f, +0.000275f, + +0.000412f, -0.000126f, -0.000243f, +0.000045f, -0.000292f, -0.000011f, +0.000001f, +0.000171f, -0.000084f, -0.000034f, + +0.000219f, +0.000212f, -0.000023f, -0.000108f, -0.000141f, -0.000243f, -0.000117f, +0.000162f, +0.000165f, -0.000144f, + +0.000046f, +0.000073f, -0.000086f, -0.000115f, +0.000037f, -0.000020f, -0.000027f, -0.000031f, -0.000018f, +0.000011f, + +0.000024f, -0.000003f, +0.000056f, +0.000160f, +0.000032f, +0.000057f, +0.000035f, -0.000130f, -0.000005f, +0.000018f, + -0.000019f, +0.000054f, -0.000061f, +0.000052f, +0.000026f, +0.000060f, +0.000044f, +0.000004f, +0.000039f, -0.000038f, + +0.000023f, +0.000004f, -0.000054f, -0.000033f, +0.000037f, +0.000030f + }, + { + -0.000217f, -0.000853f, +0.001940f, +0.000351f, -0.000018f, -0.000275f, -0.000738f, -0.000213f, -0.000309f, +0.000133f, + +0.000011f, -0.000346f, -0.000275f, -0.001391f, -0.003126f, +0.001757f, +0.000216f, -0.000912f, +0.000455f, +0.000644f, + -0.000268f, +0.000568f, -0.000049f, +0.000168f, -0.000102f, -0.000957f, +0.000024f, -0.000239f, +0.000224f, +0.001442f, + +0.000124f, -0.000545f, -0.000403f, -0.000282f, +0.000431f, -0.000348f, -0.000073f, +0.000234f, +0.000311f, +0.000347f, + -0.000011f, -0.000139f, +0.000236f, +0.000197f, -0.000117f, +0.000071f, -0.000225f, -0.000060f, +0.000346f, +0.000127f, + +0.000202f, -0.000231f, -0.000021f, -0.000074f, -0.000010f, -0.000167f, -0.000159f, -0.000524f, -0.000124f, -0.000133f, + +0.000186f, +0.000106f, -0.000023f, -0.000218f, -0.000151f, +0.000167f, +0.000031f, -0.000067f, -0.000044f, +0.000022f, + +0.000073f, -0.000002f, +0.000047f, +0.000056f, -0.000017f, +0.000081f, +0.000053f, -0.000025f, -0.000014f, -0.000028f, + -0.000008f, +0.000060f, -0.000107f, -0.000091f, -0.000005f, -0.000041f, -0.000047f, -0.000023f, +0.000020f, +0.000007f, + -0.000002f, +0.000033f, +0.000026f, -0.000042f, -0.000012f, +0.000041f + }, + { + -0.000257f, -0.007456f, +0.005324f, +0.000879f, +0.000626f, +0.000377f, +0.002779f, -0.001406f, -0.000639f, +0.000241f, + +0.000614f, +0.000002f, +0.001279f, -0.001897f, -0.000400f, -0.000325f, -0.000384f, +0.000530f, -0.000345f, +0.001074f, + +0.000353f, +0.000201f, -0.000097f, +0.000199f, +0.000094f, +0.000811f, +0.000134f, -0.000120f, +0.000165f, +0.000014f, + +0.000230f, -0.000130f, +0.000051f, -0.000232f, +0.000517f, -0.000102f, +0.000402f, +0.000088f, +0.000032f, +0.000267f, + -0.000251f, -0.000169f, -0.000055f, -0.000242f, -0.000355f, -0.000191f, +0.000028f, -0.000533f, -0.000060f, -0.000139f, + +0.000073f, -0.000009f, -0.000042f, +0.000411f, +0.000259f, +0.000093f, -0.000040f, -0.000010f, -0.000228f, +0.000178f, + +0.000228f, -0.000078f, -0.000068f, -0.000013f, -0.000017f, -0.000028f, -0.000088f, -0.000058f, +0.000046f, +0.000123f, + -0.000139f, -0.000066f, +0.000099f, +0.000097f, -0.000040f, -0.000023f, -0.000040f, +0.000064f, +0.000010f, +0.000053f, + -0.000021f, -0.000102f, +0.000017f, +0.000047f, +0.000064f, -0.000042f, -0.000169f, -0.000031f, -0.000018f, -0.000046f, + -0.000015f, +0.000004f, +0.000085f, +0.000054f, +0.000030f, +0.000055f + }, + { + +0.000121f, +0.002431f, -0.001378f, +0.001121f, -0.000060f, +0.000181f, -0.000042f, +0.000044f, -0.000144f, -0.000382f, + +0.000566f, -0.000010f, -0.000033f, -0.002141f, +0.004210f, -0.001285f, -0.001190f, -0.000425f, +0.000148f, +0.000823f, + +0.000495f, -0.000325f, -0.000255f, +0.000681f, +0.000106f, +0.000280f, -0.000151f, +0.000100f, +0.000106f, -0.000256f, + +0.000489f, -0.000345f, -0.000547f, +0.000292f, -0.000203f, -0.000424f, +0.000044f, -0.000305f, -0.000224f, -0.000201f, + +0.000009f, +0.000313f, +0.000090f, -0.000022f, +0.000087f, -0.000212f, +0.000054f, +0.000254f, +0.000106f, -0.000014f, + +0.000405f, -0.000037f, -0.000168f, -0.000085f, -0.000094f, -0.000092f, -0.000060f, -0.000034f, -0.000004f, +0.000007f, + +0.000283f, +0.000064f, -0.000187f, -0.000053f, +0.000033f, -0.000067f, -0.000142f, +0.000174f, +0.000046f, -0.000012f, + -0.000028f, -0.000084f, +0.000002f, +0.000050f, +0.000009f, +0.000117f, -0.000109f, -0.000020f, +0.000002f, -0.000012f, + +0.000158f, -0.000005f, -0.000045f, -0.000005f, -0.000069f, -0.000065f, -0.000043f, +0.000087f, -0.000011f, -0.000010f, + +0.000105f, +0.000060f, -0.000056f, -0.000023f, +0.000057f, -0.000042f + }, + { + +0.000284f, -0.001294f, +0.000128f, -0.002775f, +0.000260f, +0.004861f, -0.000481f, +0.000220f, -0.000240f, +0.000144f, + -0.000693f, +0.000569f, -0.000252f, +0.000638f, -0.004172f, +0.000711f, +0.000200f, -0.000182f, -0.000045f, +0.000078f, + -0.001018f, -0.000207f, +0.000142f, +0.000661f, -0.000187f, -0.000318f, +0.000124f, +0.001059f, -0.000270f, -0.000432f, + +0.000371f, +0.000420f, -0.000451f, -0.000462f, -0.000142f, +0.000226f, -0.000077f, +0.000130f, +0.000055f, +0.000017f, + -0.000109f, +0.000300f, -0.000548f, -0.000363f, -0.000079f, +0.000048f, -0.000275f, +0.000115f, +0.000223f, +0.000128f, + -0.000054f, +0.000143f, +0.000164f, +0.000083f, +0.000217f, -0.000023f, +0.000010f, +0.000040f, -0.000015f, -0.000121f, + -0.000033f, -0.000036f, -0.000122f, -0.000090f, -0.000009f, -0.000086f, -0.000028f, +0.000011f, -0.000010f, +0.000098f, + -0.000026f, -0.000079f, +0.000046f, +0.000175f, +0.000035f, -0.000097f, -0.000051f, -0.000005f, +0.000062f, -0.000031f, + -0.000030f, +0.000009f, +0.000031f, -0.000019f, +0.000051f, +0.000068f, -0.000021f, +0.000103f, -0.000019f, -0.000072f, + +0.000029f, -0.000049f, -0.000017f, +0.000000f, +0.000011f, +0.000015f + } + }, + { + { + -0.000077f, +0.003609f, +0.003220f, -0.000319f, +0.000223f, +0.000100f, -0.000143f, -0.000117f, +0.000000f, -0.000224f, + -0.000329f, +0.000091f, -0.001023f, -0.000067f, +0.002864f, -0.001933f, +0.000500f, -0.000271f, +0.000612f, +0.000548f, + +0.000887f, +0.000162f, -0.000977f, -0.000548f, +0.000264f, +0.000361f, -0.000014f, -0.000079f, +0.000199f, -0.000719f, + -0.000446f, +0.000473f, -0.000468f, +0.000754f, -0.000103f, +0.000180f, -0.000330f, +0.000469f, +0.000254f, -0.000110f, + -0.000180f, -0.000161f, -0.000039f, +0.000168f, +0.000140f, -0.000014f, +0.000114f, +0.000175f, -0.000164f, -0.000051f, + -0.000284f, -0.000071f, +0.000021f, -0.000222f, -0.000220f, +0.000068f, +0.000095f, +0.000078f, +0.000128f, +0.000048f, + -0.000123f, -0.000098f, -0.000158f, +0.000072f, +0.000020f, -0.000119f, -0.000086f, +0.000064f, -0.000056f, -0.000154f, + +0.000025f, +0.000063f, -0.000019f, +0.000063f, -0.000001f, -0.000011f, +0.000023f, +0.000022f, -0.000070f, -0.000062f, + +0.000034f, -0.000021f, -0.000067f, -0.000125f, -0.000074f, +0.000017f, +0.000056f, -0.000023f, -0.000019f, +0.000050f, + +0.000032f, -0.000038f, +0.000001f, -0.000011f, +0.000036f, +0.000052f + }, + { + +0.005100f, +0.009659f, +0.006781f, +0.004477f, +0.000438f, +0.000092f, -0.000270f, +0.000958f, +0.001097f, +0.000125f, + +0.001046f, +0.000029f, -0.000146f, +0.000021f, -0.001169f, +0.000860f, +0.000673f, -0.000131f, -0.000303f, -0.000635f, + -0.000324f, -0.000133f, +0.000739f, -0.000115f, +0.000208f, -0.000341f, +0.000158f, +0.000586f, -0.000158f, -0.000147f, + -0.000437f, +0.000036f, -0.000080f, +0.000922f, +0.000106f, -0.000042f, +0.000235f, +0.000497f, +0.000268f, +0.000106f, + +0.000294f, -0.000081f, -0.000215f, -0.000115f, -0.000256f, -0.000052f, +0.000342f, +0.000050f, +0.000307f, +0.000002f, + -0.000156f, +0.000016f, -0.000157f, -0.000106f, -0.000067f, -0.000029f, -0.000080f, -0.000072f, -0.000029f, -0.000021f, + -0.000127f, -0.000123f, +0.000076f, +0.000058f, +0.000047f, +0.000128f, +0.000060f, -0.000052f, -0.000109f, -0.000101f, + +0.000025f, +0.000016f, +0.000107f, -0.000069f, +0.000011f, +0.000121f, -0.000102f, +0.000026f, +0.000098f, +0.000016f, + -0.000091f, -0.000026f, +0.000068f, -0.000035f, -0.000082f, +0.000054f, +0.000070f, -0.000066f, +0.000046f, -0.000006f, + +0.000011f, +0.000020f, -0.000017f, -0.000031f, +0.000011f, -0.000016f + }, + { + -0.001405f, +0.034769f, +0.003445f, -0.001748f, -0.002786f, -0.000060f, -0.000219f, -0.000611f, -0.000040f, +0.000394f, + +0.000814f, +0.000410f, +0.001051f, +0.000945f, -0.001250f, +0.001032f, +0.000794f, -0.000364f, +0.000956f, +0.000386f, + +0.000277f, +0.000558f, -0.000709f, +0.000196f, +0.000045f, -0.000319f, -0.000533f, +0.000078f, +0.000428f, +0.000259f, + +0.000348f, -0.000179f, -0.000573f, +0.000162f, +0.000198f, -0.000280f, -0.000031f, -0.000035f, -0.000369f, +0.000044f, + -0.000000f, -0.000166f, +0.000075f, +0.000055f, -0.000362f, +0.000017f, +0.000223f, -0.000033f, -0.000369f, -0.000287f, + +0.000364f, +0.000417f, +0.000137f, -0.000147f, +0.000120f, +0.000105f, -0.000134f, -0.000284f, +0.000054f, +0.000129f, + +0.000107f, -0.000291f, -0.000018f, -0.000009f, -0.000013f, -0.000168f, -0.000084f, -0.000077f, -0.000027f, -0.000069f, + -0.000032f, -0.000065f, -0.000033f, -0.000063f, -0.000027f, +0.000079f, -0.000007f, +0.000034f, +0.000091f, +0.000026f, + -0.000008f, +0.000020f, -0.000038f, -0.000070f, +0.000085f, +0.000007f, -0.000015f, +0.000068f, +0.000015f, +0.000036f, + +0.000011f, -0.000040f, -0.000021f, -0.000021f, +0.000009f, -0.000016f + }, + { + -0.000574f, -0.006177f, +0.001704f, -0.000326f, -0.000221f, +0.000162f, +0.000114f, +0.000013f, -0.000392f, -0.000017f, + +0.000142f, +0.000043f, -0.000290f, -0.000764f, -0.004546f, -0.000650f, -0.000401f, +0.002820f, -0.001331f, -0.000075f, + +0.000637f, -0.000787f, -0.000444f, -0.000759f, -0.000015f, -0.001663f, -0.000299f, +0.000374f, +0.000378f, +0.000618f, + -0.000394f, +0.000311f, -0.000161f, -0.000371f, +0.000157f, -0.000214f, -0.000409f, +0.000221f, -0.000205f, -0.000296f, + -0.000033f, -0.000345f, +0.000104f, +0.000100f, +0.000114f, +0.000003f, -0.000220f, +0.000049f, -0.000013f, -0.000190f, + +0.000162f, +0.000111f, -0.000237f, -0.000018f, -0.000040f, -0.000221f, +0.000160f, +0.000116f, -0.000118f, +0.000082f, + +0.000099f, -0.000021f, -0.000023f, +0.000079f, -0.000145f, -0.000101f, +0.000038f, -0.000012f, -0.000181f, -0.000080f, + +0.000109f, +0.000185f, +0.000001f, -0.000065f, -0.000021f, +0.000101f, -0.000041f, -0.000104f, -0.000096f, -0.000036f, + +0.000017f, -0.000009f, -0.000053f, -0.000007f, -0.000026f, +0.000070f, +0.000044f, -0.000043f, -0.000020f, -0.000022f, + +0.000038f, -0.000001f, -0.000069f, -0.000016f, +0.000014f, -0.000041f + }, + { + +0.006773f, +0.042829f, -0.003922f, -0.002646f, -0.000106f, +0.000034f, +0.000042f, +0.000263f, -0.000124f, +0.000162f, + -0.000343f, -0.000652f, +0.000528f, +0.000339f, +0.001276f, +0.001113f, -0.000409f, +0.000477f, +0.000731f, +0.000231f, + +0.000087f, +0.000173f, -0.000047f, +0.000517f, +0.001058f, -0.000497f, -0.000110f, -0.002357f, -0.000115f, +0.000876f, + +0.000253f, +0.000163f, +0.000353f, +0.000036f, -0.000072f, +0.000220f, +0.000980f, +0.000922f, -0.000295f, -0.000050f, + +0.000647f, +0.000128f, -0.000338f, -0.000341f, +0.000173f, +0.000097f, -0.000248f, -0.000101f, +0.000182f, +0.000322f, + -0.000117f, -0.000331f, -0.000118f, +0.000128f, +0.000105f, -0.000102f, +0.000083f, +0.000202f, +0.000064f, -0.000098f, + -0.000103f, +0.000060f, +0.000012f, -0.000100f, -0.000054f, -0.000008f, -0.000110f, +0.000079f, +0.000026f, -0.000102f, + -0.000042f, +0.000138f, +0.000167f, +0.000059f, -0.000095f, -0.000026f, -0.000043f, -0.000094f, +0.000068f, -0.000041f, + -0.000071f, +0.000038f, -0.000006f, +0.000004f, +0.000089f, +0.000009f, -0.000015f, -0.000002f, +0.000013f, +0.000016f, + -0.000010f, +0.000048f, +0.000014f, +0.000022f, +0.000048f, -0.000017f + }, + { + +0.000471f, -0.000357f, -0.000604f, +0.000384f, +0.000015f, +0.000074f, +0.000012f, -0.000228f, -0.000183f, -0.000071f, + +0.000287f, +0.000181f, +0.000180f, +0.000647f, +0.002355f, -0.000885f, -0.001390f, +0.001386f, +0.000215f, +0.002267f, + +0.000034f, +0.001063f, -0.000915f, -0.000280f, +0.000333f, +0.000216f, -0.000240f, -0.000005f, -0.000650f, -0.000723f, + -0.000419f, +0.000197f, +0.000051f, -0.000674f, -0.000437f, -0.000112f, -0.000142f, -0.000219f, -0.000110f, +0.000290f, + +0.000022f, -0.000127f, +0.000384f, +0.000013f, -0.000198f, +0.000048f, +0.000098f, +0.000227f, +0.000151f, -0.000049f, + -0.000064f, -0.000175f, +0.000158f, +0.000045f, -0.000210f, -0.000114f, -0.000089f, +0.000126f, +0.000038f, -0.000092f, + -0.000010f, -0.000019f, +0.000045f, +0.000029f, -0.000005f, -0.000065f, +0.000110f, +0.000015f, +0.000045f, +0.000085f, + +0.000013f, -0.000100f, -0.000101f, +0.000008f, +0.000040f, -0.000058f, -0.000097f, -0.000114f, -0.000044f, +0.000008f, + +0.000027f, -0.000108f, +0.000007f, +0.000037f, +0.000026f, -0.000043f, +0.000025f, +0.000000f, -0.000020f, -0.000015f, + +0.000012f, +0.000091f, -0.000034f, -0.000075f, +0.000004f, +0.000008f + }, + { + +0.010880f, -0.034645f, +0.002087f, +0.003608f, +0.000346f, -0.000309f, -0.000061f, -0.000311f, -0.000376f, +0.000154f, + -0.000179f, -0.000396f, -0.000006f, -0.000538f, +0.000379f, -0.000419f, -0.000466f, -0.000356f, +0.000534f, +0.000913f, + +0.000524f, +0.000478f, -0.000197f, +0.000305f, +0.000316f, +0.000441f, +0.000060f, -0.000389f, +0.000467f, +0.000138f, + +0.000147f, -0.000103f, +0.000071f, -0.000251f, -0.000428f, -0.000396f, -0.000313f, +0.000963f, -0.000058f, -0.000437f, + -0.000078f, -0.000260f, +0.000039f, +0.000373f, -0.000185f, +0.000043f, -0.000146f, +0.000072f, -0.000028f, +0.000171f, + +0.000121f, +0.000206f, +0.000236f, -0.000092f, +0.000067f, -0.000019f, -0.000108f, -0.000107f, -0.000123f, -0.000198f, + -0.000139f, +0.000042f, +0.000017f, +0.000031f, +0.000065f, -0.000052f, -0.000175f, -0.000098f, +0.000080f, -0.000059f, + -0.000052f, +0.000169f, -0.000023f, -0.000188f, -0.000005f, +0.000086f, -0.000082f, -0.000033f, +0.000068f, -0.000075f, + -0.000017f, +0.000075f, -0.000030f, -0.000067f, +0.000074f, +0.000052f, -0.000107f, -0.000019f, +0.000022f, +0.000059f, + +0.000002f, -0.000045f, +0.000045f, +0.000008f, +0.000033f, -0.000004f + }, + { + +0.000600f, +0.000519f, -0.001859f, +0.000540f, -0.000149f, +0.000173f, +0.000008f, -0.000194f, +0.000004f, -0.000182f, + -0.000072f, +0.000369f, +0.000182f, -0.000567f, -0.001359f, -0.002143f, +0.000514f, +0.001473f, -0.000966f, +0.000344f, + +0.001695f, +0.001178f, -0.000312f, +0.000628f, -0.000346f, +0.000303f, +0.000052f, +0.000058f, +0.000299f, +0.000184f, + -0.000104f, +0.000416f, +0.000275f, -0.000040f, +0.000179f, +0.000350f, -0.000009f, +0.000207f, -0.000078f, +0.000186f, + +0.000280f, -0.000293f, +0.000189f, -0.000123f, -0.000079f, -0.000087f, -0.000244f, -0.000057f, +0.000572f, -0.000008f, + -0.000144f, +0.000169f, +0.000042f, -0.000067f, -0.000291f, +0.000028f, -0.000035f, -0.000114f, +0.000099f, +0.000074f, + -0.000039f, -0.000091f, -0.000091f, +0.000016f, +0.000048f, +0.000159f, -0.000001f, -0.000076f, -0.000045f, +0.000053f, + +0.000008f, +0.000068f, +0.000025f, +0.000019f, -0.000079f, +0.000028f, -0.000017f, -0.000094f, -0.000037f, -0.000070f, + -0.000051f, +0.000101f, +0.000021f, +0.000043f, -0.000011f, -0.000024f, -0.000000f, -0.000041f, +0.000052f, -0.000015f, + -0.000054f, +0.000041f, -0.000014f, +0.000000f, -0.000007f, +0.000007f + }, + { + -0.000535f, +0.078144f, +0.006253f, +0.004030f, -0.000199f, -0.000162f, -0.000071f, +0.000315f, +0.000290f, -0.000954f, + -0.000322f, +0.000558f, +0.000932f, +0.000260f, +0.001180f, -0.000530f, -0.001553f, +0.000351f, +0.000192f, +0.000212f, + -0.000178f, +0.000174f, +0.000711f, -0.001086f, -0.000174f, -0.000125f, -0.000119f, +0.000408f, +0.000009f, +0.000267f, + -0.000352f, -0.000457f, +0.000080f, +0.000401f, -0.000157f, +0.000497f, +0.000182f, +0.000260f, -0.000653f, +0.000387f, + +0.000440f, -0.000474f, +0.000006f, -0.000182f, +0.000004f, +0.000482f, -0.000492f, -0.000351f, +0.000201f, +0.000158f, + -0.000208f, +0.000037f, -0.000085f, -0.000121f, -0.000031f, +0.000103f, +0.000019f, -0.000216f, -0.000244f, +0.000094f, + +0.000148f, +0.000006f, -0.000005f, +0.000017f, +0.000149f, +0.000224f, +0.000049f, -0.000110f, +0.000059f, -0.000040f, + -0.000047f, +0.000091f, -0.000001f, -0.000084f, -0.000063f, +0.000005f, +0.000048f, -0.000047f, -0.000018f, -0.000034f, + +0.000059f, -0.000016f, +0.000056f, +0.000047f, +0.000033f, +0.000059f, +0.000010f, -0.000065f, -0.000041f, -0.000076f, + +0.000007f, +0.000038f, +0.000028f, +0.000008f, -0.000058f, +0.000005f + }, + { + -0.000167f, -0.001751f, -0.000782f, -0.000196f, +0.000821f, -0.001153f, -0.001375f, +0.000357f, -0.000304f, -0.000505f, + -0.000607f, +0.000370f, +0.000697f, +0.000538f, +0.001246f, -0.000271f, +0.002357f, +0.001474f, -0.001407f, -0.001303f, + +0.000747f, +0.001012f, -0.001118f, -0.001221f, +0.000228f, -0.000425f, +0.000104f, -0.000685f, +0.000772f, +0.000123f, + +0.000060f, +0.000490f, -0.000384f, +0.000133f, -0.000046f, -0.000121f, -0.000264f, -0.000490f, -0.000444f, -0.000036f, + -0.000101f, -0.000126f, -0.000332f, +0.000181f, +0.000250f, -0.000338f, +0.000190f, +0.000075f, +0.000218f, +0.000006f, + -0.000199f, -0.000037f, -0.000043f, -0.000171f, +0.000317f, +0.000328f, +0.000046f, -0.000062f, -0.000038f, -0.000166f, + +0.000020f, +0.000095f, +0.000104f, +0.000150f, -0.000016f, +0.000129f, +0.000000f, -0.000128f, -0.000188f, -0.000156f, + +0.000030f, -0.000032f, +0.000049f, +0.000058f, -0.000076f, +0.000033f, +0.000052f, -0.000007f, +0.000007f, +0.000068f, + +0.000038f, +0.000024f, -0.000014f, -0.000032f, -0.000044f, -0.000072f, +0.000015f, +0.000027f, +0.000014f, -0.000010f, + -0.000043f, +0.000022f, -0.000026f, -0.000013f, -0.000042f, -0.000041f + }, + { + +0.001114f, +0.022684f, +0.005198f, +0.000971f, +0.000406f, -0.002543f, -0.004531f, +0.000296f, -0.000030f, +0.000060f, + +0.000266f, +0.000462f, -0.000169f, -0.000638f, +0.000222f, +0.000865f, +0.000027f, +0.000124f, -0.000009f, +0.000522f, + -0.000239f, -0.000258f, -0.000331f, -0.000107f, -0.000741f, -0.000120f, -0.000080f, +0.000047f, +0.000344f, -0.000585f, + -0.000626f, -0.000265f, -0.000077f, +0.000421f, -0.000120f, +0.000089f, +0.000439f, -0.000489f, +0.000149f, -0.000080f, + -0.000759f, -0.000192f, +0.000084f, +0.000146f, +0.000241f, +0.000028f, -0.000051f, -0.000440f, +0.000000f, +0.000132f, + +0.000011f, -0.000031f, -0.000193f, -0.000140f, +0.000216f, +0.000127f, +0.000119f, -0.000086f, -0.000190f, +0.000103f, + +0.000057f, -0.000026f, -0.000008f, +0.000066f, +0.000004f, -0.000032f, +0.000074f, +0.000027f, -0.000011f, +0.000008f, + +0.000052f, +0.000042f, -0.000002f, -0.000087f, -0.000085f, -0.000023f, -0.000100f, +0.000036f, +0.000047f, +0.000011f, + +0.000068f, -0.000063f, +0.000035f, +0.000040f, -0.000053f, -0.000006f, -0.000086f, -0.000020f, -0.000002f, +0.000046f, + +0.000004f, -0.000033f, +0.000007f, +0.000052f, +0.000004f, -0.000045f + }, + { + +0.000198f, +0.001514f, -0.000152f, +0.000158f, -0.000414f, -0.000344f, +0.000156f, -0.000159f, -0.000083f, +0.000128f, + -0.000475f, +0.000349f, -0.000915f, -0.002350f, -0.000118f, +0.001718f, -0.000051f, -0.001303f, -0.001348f, +0.000541f, + +0.001573f, +0.000898f, -0.001381f, -0.000908f, -0.001826f, +0.000971f, +0.000240f, +0.000121f, +0.000963f, -0.000045f, + -0.000464f, +0.000890f, +0.000124f, +0.000312f, +0.000048f, -0.000015f, -0.000103f, -0.000477f, -0.000194f, +0.000051f, + +0.000191f, +0.000256f, +0.000050f, -0.000220f, -0.000328f, +0.000026f, +0.000146f, -0.000100f, +0.000129f, -0.000127f, + -0.000097f, +0.000063f, -0.000058f, -0.000247f, -0.000200f, -0.000077f, +0.000037f, +0.000180f, +0.000294f, +0.000104f, + +0.000092f, -0.000125f, +0.000027f, +0.000058f, +0.000180f, -0.000065f, -0.000019f, +0.000070f, -0.000078f, +0.000022f, + -0.000038f, -0.000034f, -0.000001f, -0.000041f, -0.000072f, -0.000104f, -0.000149f, -0.000015f, +0.000025f, +0.000041f, + +0.000026f, -0.000021f, +0.000067f, +0.000031f, +0.000029f, +0.000050f, +0.000079f, +0.000053f, +0.000025f, -0.000009f, + -0.000011f, -0.000030f, -0.000037f, +0.000013f, +0.000014f, -0.000021f + }, + { + -0.002635f, -0.002299f, +0.004759f, -0.001108f, +0.000147f, +0.000864f, -0.002084f, -0.000804f, +0.000461f, +0.000654f, + -0.000910f, +0.000047f, -0.000364f, +0.001101f, -0.000517f, +0.000615f, +0.000236f, -0.000408f, +0.000113f, -0.000187f, + -0.000314f, +0.000427f, -0.000202f, +0.000257f, +0.000418f, +0.000120f, -0.000310f, -0.000719f, -0.000493f, +0.000015f, + -0.000022f, -0.000291f, +0.000096f, +0.000143f, +0.000138f, -0.000173f, +0.000010f, +0.000396f, +0.000024f, -0.000289f, + +0.000196f, +0.000398f, +0.000158f, +0.000215f, +0.000326f, +0.000395f, +0.000005f, +0.000164f, +0.000284f, -0.000333f, + -0.000019f, -0.000190f, -0.000206f, -0.000036f, -0.000219f, -0.000196f, -0.000026f, -0.000017f, +0.000242f, +0.000131f, + +0.000001f, +0.000036f, -0.000083f, +0.000003f, -0.000143f, +0.000041f, +0.000124f, +0.000099f, +0.000036f, -0.000149f, + +0.000028f, +0.000096f, -0.000001f, -0.000084f, -0.000025f, -0.000040f, +0.000083f, -0.000001f, -0.000044f, -0.000068f, + -0.000059f, +0.000099f, +0.000071f, -0.000008f, -0.000113f, -0.000053f, +0.000113f, +0.000068f, +0.000027f, +0.000068f, + +0.000022f, +0.000026f, -0.000023f, -0.000061f, -0.000017f, -0.000085f + }, + { + -0.000284f, +0.001839f, +0.001399f, +0.000622f, -0.000158f, -0.000339f, -0.000107f, -0.000035f, -0.000357f, -0.000236f, + +0.000134f, +0.000176f, +0.001382f, -0.002719f, -0.009241f, +0.003123f, -0.001089f, -0.000924f, +0.001147f, +0.000527f, + -0.000753f, -0.000201f, -0.000981f, -0.000217f, +0.000324f, -0.000088f, -0.000258f, -0.000070f, -0.000861f, +0.000310f, + +0.000672f, +0.000859f, +0.000231f, +0.000123f, +0.000054f, +0.000374f, +0.000178f, -0.000018f, -0.000243f, -0.000044f, + +0.000278f, -0.000482f, -0.000161f, +0.000190f, -0.000078f, +0.000160f, +0.000083f, -0.000147f, -0.000134f, +0.000098f, + +0.000061f, -0.000313f, -0.000034f, +0.000181f, -0.000003f, -0.000017f, +0.000062f, -0.000059f, -0.000005f, +0.000060f, + -0.000117f, -0.000278f, +0.000017f, -0.000013f, -0.000106f, -0.000025f, +0.000064f, -0.000091f, -0.000062f, -0.000055f, + -0.000031f, +0.000158f, +0.000002f, -0.000046f, +0.000057f, -0.000018f, +0.000045f, +0.000144f, -0.000053f, +0.000028f, + -0.000077f, -0.000126f, +0.000078f, +0.000019f, +0.000024f, +0.000096f, +0.000076f, -0.000023f, -0.000042f, +0.000083f, + -0.000042f, -0.000085f, -0.000020f, +0.000034f, -0.000050f, -0.000034f + }, + { + +0.000689f, -0.001625f, +0.000533f, -0.001349f, +0.000063f, -0.000468f, +0.000674f, +0.000388f, +0.000228f, +0.000104f, + -0.000557f, -0.001091f, -0.000773f, -0.002706f, +0.000680f, -0.000573f, -0.000507f, -0.000607f, +0.000142f, -0.000370f, + +0.000181f, +0.000144f, +0.000271f, -0.000414f, -0.000134f, +0.000982f, +0.000008f, -0.000591f, +0.000330f, -0.000218f, + +0.000342f, +0.000181f, -0.000491f, +0.000154f, +0.000023f, +0.000795f, +0.000334f, -0.000003f, -0.000433f, -0.000295f, + -0.000240f, -0.000143f, -0.000247f, +0.000099f, -0.000001f, +0.000097f, +0.000485f, -0.000013f, -0.000008f, -0.000161f, + -0.000014f, -0.000192f, -0.000296f, -0.000069f, +0.000163f, +0.000009f, +0.000274f, +0.000073f, -0.000114f, -0.000013f, + -0.000077f, +0.000083f, +0.000084f, +0.000133f, -0.000007f, +0.000010f, +0.000076f, -0.000051f, +0.000100f, +0.000040f, + +0.000014f, +0.000136f, +0.000115f, -0.000091f, -0.000182f, -0.000023f, +0.000060f, +0.000050f, +0.000017f, -0.000007f, + +0.000097f, -0.000050f, -0.000058f, +0.000030f, +0.000014f, -0.000007f, -0.000005f, -0.000047f, -0.000100f, +0.000065f, + +0.000009f, +0.000004f, +0.000030f, -0.000002f, -0.000020f, -0.000045f + } + }, + { + { + +0.000409f, -0.005816f, -0.004258f, -0.000036f, -0.000062f, -0.000070f, -0.000146f, -0.000026f, +0.000346f, -0.000203f, + +0.000074f, -0.000481f, -0.000670f, -0.000172f, +0.002292f, -0.000473f, +0.000657f, -0.001613f, -0.001398f, +0.000489f, + +0.001110f, -0.000828f, -0.000689f, -0.000653f, +0.000572f, +0.000810f, +0.000077f, +0.000336f, +0.000315f, -0.000731f, + -0.000897f, +0.000000f, -0.000049f, +0.000875f, -0.000045f, +0.000007f, +0.000132f, +0.000981f, +0.000227f, +0.000116f, + -0.000247f, -0.000069f, +0.000003f, +0.000058f, +0.000002f, -0.000181f, +0.000002f, +0.000197f, -0.000045f, +0.000020f, + -0.000294f, -0.000059f, +0.000081f, -0.000227f, -0.000067f, +0.000190f, +0.000060f, +0.000232f, +0.000016f, -0.000077f, + -0.000113f, -0.000171f, -0.000109f, +0.000068f, -0.000034f, -0.000105f, -0.000004f, +0.000011f, -0.000144f, -0.000058f, + +0.000078f, +0.000049f, -0.000027f, +0.000020f, -0.000028f, +0.000025f, +0.000028f, -0.000030f, -0.000087f, -0.000004f, + +0.000043f, -0.000057f, -0.000083f, -0.000086f, -0.000040f, +0.000072f, +0.000060f, -0.000016f, +0.000005f, +0.000079f, + -0.000039f, -0.000016f, -0.000014f, -0.000005f, +0.000059f, +0.000041f + }, + { + -0.005029f, -0.002707f, +0.001174f, +0.000798f, +0.000178f, +0.000002f, +0.000222f, +0.001403f, +0.000546f, -0.000431f, + +0.000606f, -0.000094f, +0.000015f, +0.001038f, -0.000242f, +0.001295f, +0.000256f, -0.000400f, -0.000410f, -0.000474f, + +0.000197f, -0.000287f, +0.000468f, -0.000455f, +0.000068f, -0.000146f, +0.000426f, +0.000662f, +0.000016f, +0.000065f, + -0.000308f, -0.000013f, -0.000002f, +0.000549f, -0.000292f, -0.000523f, +0.000217f, +0.000791f, +0.000466f, -0.000054f, + +0.000007f, -0.000168f, -0.000025f, +0.000070f, -0.000182f, +0.000171f, +0.000166f, +0.000356f, +0.000310f, -0.000031f, + +0.000041f, -0.000166f, -0.000273f, -0.000041f, +0.000038f, +0.000041f, -0.000244f, -0.000077f, -0.000044f, -0.000011f, + -0.000126f, -0.000019f, +0.000077f, -0.000024f, +0.000133f, +0.000072f, +0.000029f, -0.000086f, -0.000091f, +0.000051f, + +0.000025f, +0.000012f, +0.000056f, -0.000067f, +0.000109f, +0.000015f, -0.000103f, +0.000046f, +0.000052f, +0.000002f, + -0.000069f, -0.000003f, +0.000024f, -0.000064f, -0.000050f, +0.000117f, -0.000017f, -0.000039f, +0.000017f, -0.000003f, + +0.000026f, +0.000007f, -0.000029f, +0.000004f, -0.000006f, -0.000010f + }, + { + +0.000715f, +0.032996f, -0.001619f, -0.000290f, -0.001334f, +0.000201f, -0.000340f, -0.000158f, +0.000299f, +0.000272f, + +0.000396f, +0.000022f, +0.001291f, +0.001380f, -0.001868f, -0.000139f, -0.000145f, -0.000013f, +0.001516f, +0.000213f, + +0.000365f, +0.000731f, -0.000206f, +0.000286f, -0.000279f, -0.000720f, -0.000491f, +0.000153f, +0.000715f, +0.000161f, + +0.000218f, -0.000330f, -0.000203f, +0.000500f, +0.000084f, -0.000440f, -0.000179f, -0.000061f, -0.000014f, +0.000586f, + +0.000097f, -0.000338f, -0.000019f, -0.000004f, -0.000272f, +0.000332f, +0.000005f, -0.000379f, -0.000214f, -0.000102f, + +0.000318f, +0.000066f, +0.000059f, -0.000049f, +0.000124f, -0.000023f, -0.000111f, -0.000064f, +0.000069f, +0.000032f, + -0.000091f, -0.000276f, -0.000040f, -0.000096f, -0.000013f, -0.000070f, -0.000078f, +0.000006f, -0.000027f, -0.000051f, + +0.000016f, -0.000017f, -0.000026f, -0.000039f, +0.000008f, +0.000031f, +0.000011f, -0.000017f, +0.000078f, +0.000053f, + +0.000002f, +0.000002f, -0.000031f, -0.000017f, +0.000090f, +0.000008f, +0.000039f, +0.000053f, -0.000013f, +0.000035f, + -0.000049f, -0.000038f, -0.000031f, +0.000001f, +0.000016f, -0.000023f + }, + { + +0.000262f, -0.005693f, +0.000844f, -0.000769f, -0.000101f, +0.000200f, +0.000106f, +0.000042f, -0.000320f, +0.000011f, + +0.000120f, +0.000352f, +0.000092f, -0.001651f, -0.003207f, +0.001362f, +0.000523f, +0.001262f, -0.002172f, +0.000498f, + +0.000751f, -0.001194f, -0.000491f, -0.000236f, +0.000097f, +0.000616f, +0.001519f, +0.000531f, +0.000085f, +0.000326f, + -0.000535f, +0.000339f, +0.000100f, -0.000010f, +0.000632f, -0.000299f, +0.000347f, +0.000488f, -0.000334f, +0.000061f, + +0.000097f, -0.000368f, +0.000264f, +0.000218f, +0.000138f, +0.000082f, -0.000037f, -0.000052f, -0.000260f, -0.000190f, + +0.000256f, -0.000040f, -0.000055f, +0.000159f, -0.000056f, -0.000075f, +0.000200f, -0.000054f, -0.000095f, +0.000023f, + +0.000051f, -0.000058f, -0.000026f, +0.000007f, -0.000110f, -0.000057f, +0.000020f, -0.000017f, -0.000131f, -0.000023f, + +0.000162f, +0.000099f, -0.000034f, -0.000090f, +0.000029f, +0.000031f, -0.000136f, -0.000085f, -0.000005f, -0.000004f, + +0.000020f, -0.000041f, -0.000032f, -0.000020f, +0.000002f, +0.000058f, +0.000016f, -0.000050f, -0.000055f, -0.000001f, + +0.000034f, -0.000035f, -0.000077f, -0.000012f, -0.000015f, -0.000050f + }, + { + -0.011604f, +0.023544f, +0.001028f, -0.002815f, -0.000735f, +0.000043f, +0.000142f, +0.000328f, -0.000109f, +0.000402f, + -0.000775f, -0.000132f, +0.000297f, -0.000255f, +0.000275f, +0.000305f, -0.000550f, +0.000111f, +0.000083f, +0.000077f, + +0.000070f, +0.000047f, +0.000004f, +0.000866f, +0.000543f, -0.000233f, -0.000192f, -0.000399f, +0.001480f, +0.000510f, + -0.000083f, +0.000091f, +0.000161f, -0.000022f, -0.000075f, +0.000433f, +0.001316f, +0.000013f, -0.000608f, -0.000020f, + +0.000206f, -0.000182f, -0.000189f, +0.000060f, +0.000396f, -0.000121f, -0.000201f, +0.000065f, +0.000172f, +0.000316f, + -0.000389f, -0.000379f, +0.000085f, +0.000112f, -0.000002f, -0.000201f, +0.000071f, +0.000076f, +0.000039f, -0.000035f, + -0.000016f, +0.000033f, -0.000063f, -0.000075f, -0.000005f, +0.000033f, -0.000083f, +0.000067f, -0.000033f, -0.000106f, + -0.000004f, +0.000198f, +0.000176f, -0.000029f, -0.000062f, +0.000025f, -0.000057f, -0.000025f, +0.000053f, -0.000027f, + -0.000052f, -0.000005f, -0.000031f, +0.000036f, +0.000066f, -0.000001f, +0.000001f, +0.000010f, +0.000046f, +0.000030f, + +0.000012f, +0.000041f, +0.000006f, +0.000036f, +0.000013f, -0.000008f + }, + { + +0.000250f, -0.001412f, +0.000479f, +0.000473f, +0.000098f, +0.000067f, -0.000019f, -0.000110f, -0.000166f, -0.000013f, + +0.000295f, +0.000336f, +0.000431f, +0.000982f, +0.001300f, -0.000836f, -0.000473f, +0.000026f, +0.000003f, +0.003887f, + -0.000161f, +0.000185f, -0.002263f, +0.000125f, +0.001489f, +0.000511f, -0.000022f, +0.000303f, +0.000915f, +0.000664f, + -0.000260f, -0.000056f, +0.000131f, -0.000518f, -0.000176f, +0.000192f, -0.000266f, -0.000004f, -0.000023f, +0.000362f, + -0.000141f, -0.000037f, +0.000154f, -0.000211f, -0.000123f, +0.000138f, +0.000100f, +0.000087f, +0.000009f, +0.000056f, + -0.000118f, -0.000126f, +0.000208f, +0.000001f, -0.000161f, -0.000073f, +0.000038f, +0.000194f, +0.000077f, +0.000036f, + +0.000111f, -0.000103f, +0.000005f, -0.000024f, -0.000027f, -0.000013f, +0.000055f, +0.000016f, +0.000066f, +0.000086f, + -0.000072f, -0.000055f, +0.000008f, +0.000026f, -0.000036f, -0.000058f, -0.000128f, -0.000129f, +0.000003f, +0.000046f, + -0.000019f, -0.000045f, +0.000062f, +0.000049f, -0.000011f, -0.000036f, +0.000053f, -0.000006f, -0.000021f, +0.000008f, + +0.000039f, +0.000041f, -0.000079f, -0.000048f, +0.000012f, +0.000023f + }, + { + -0.005647f, -0.060554f, -0.001078f, +0.002771f, -0.000788f, -0.000208f, -0.000366f, -0.000103f, +0.000390f, +0.000066f, + -0.000087f, +0.000051f, +0.000099f, -0.000317f, +0.000689f, -0.000298f, -0.000727f, -0.000281f, +0.000377f, +0.000517f, + +0.000374f, -0.000166f, -0.000324f, +0.000230f, +0.000263f, -0.000046f, -0.000323f, +0.000018f, +0.000256f, +0.000045f, + +0.000214f, -0.000196f, -0.000049f, -0.000150f, -0.000357f, -0.000215f, +0.000183f, +0.000738f, -0.000275f, -0.000447f, + -0.000128f, -0.000150f, +0.000183f, +0.000397f, -0.000291f, +0.000149f, +0.000325f, +0.000135f, -0.000193f, +0.000172f, + +0.000048f, +0.000030f, +0.000049f, -0.000121f, -0.000135f, -0.000159f, -0.000021f, -0.000025f, -0.000157f, -0.000143f, + -0.000047f, +0.000028f, +0.000011f, +0.000039f, +0.000035f, -0.000125f, -0.000121f, +0.000023f, +0.000105f, -0.000035f, + +0.000031f, +0.000152f, -0.000133f, -0.000153f, +0.000019f, +0.000088f, -0.000074f, +0.000004f, +0.000022f, -0.000087f, + +0.000040f, +0.000019f, -0.000083f, -0.000034f, +0.000143f, -0.000022f, -0.000092f, +0.000026f, +0.000059f, +0.000042f, + -0.000047f, +0.000001f, +0.000028f, +0.000012f, +0.000030f, -0.000019f + }, + { + +0.000185f, -0.001320f, -0.000880f, +0.000543f, -0.000078f, +0.000196f, -0.000077f, -0.000238f, -0.000156f, +0.000008f, + +0.000310f, +0.000469f, +0.000422f, +0.000124f, -0.001240f, -0.001440f, +0.000191f, -0.000027f, -0.000399f, +0.001458f, + +0.001325f, +0.000219f, +0.000877f, +0.001902f, +0.000703f, +0.002038f, -0.000039f, -0.000167f, -0.000078f, -0.000060f, + -0.000026f, +0.000726f, +0.000462f, +0.000074f, +0.000213f, +0.000185f, -0.000355f, +0.000080f, -0.000505f, -0.000172f, + +0.000217f, -0.000097f, +0.000339f, +0.000064f, +0.000042f, -0.000056f, -0.000268f, +0.000206f, +0.000563f, -0.000218f, + -0.000160f, +0.000068f, +0.000085f, -0.000272f, -0.000260f, +0.000017f, -0.000149f, -0.000061f, +0.000204f, -0.000124f, + -0.000158f, -0.000198f, -0.000129f, -0.000083f, +0.000003f, +0.000138f, -0.000063f, -0.000028f, +0.000010f, +0.000083f, + -0.000015f, +0.000012f, +0.000016f, -0.000027f, -0.000090f, +0.000065f, -0.000086f, -0.000079f, -0.000008f, -0.000058f, + +0.000009f, +0.000065f, +0.000015f, +0.000049f, -0.000021f, -0.000008f, -0.000057f, +0.000006f, +0.000041f, -0.000071f, + -0.000019f, +0.000016f, +0.000000f, +0.000022f, -0.000012f, +0.000008f + }, + { + -0.008367f, +0.065609f, +0.001349f, +0.002586f, -0.000258f, -0.000297f, -0.000192f, +0.000622f, +0.000022f, -0.001082f, + +0.000583f, +0.001087f, +0.000989f, -0.000080f, +0.001527f, +0.000142f, -0.001374f, +0.000242f, +0.000370f, +0.000450f, + -0.000412f, +0.000045f, +0.000434f, -0.000667f, +0.000348f, -0.000228f, -0.000136f, +0.000395f, -0.000341f, -0.000208f, + -0.000566f, -0.000143f, +0.000331f, +0.000062f, -0.000320f, +0.000494f, -0.000384f, -0.000025f, -0.000999f, +0.000131f, + +0.000487f, -0.000008f, +0.000139f, -0.000301f, +0.000271f, +0.000157f, -0.000491f, +0.000146f, +0.000212f, +0.000185f, + -0.000147f, +0.000159f, -0.000071f, -0.000050f, -0.000045f, +0.000158f, +0.000058f, -0.000128f, -0.000035f, +0.000099f, + +0.000073f, +0.000034f, -0.000021f, +0.000085f, +0.000309f, +0.000113f, -0.000102f, -0.000069f, +0.000027f, -0.000024f, + +0.000016f, +0.000076f, -0.000039f, -0.000095f, -0.000097f, +0.000132f, +0.000033f, -0.000077f, -0.000017f, +0.000029f, + +0.000047f, -0.000001f, +0.000065f, +0.000074f, +0.000045f, +0.000054f, -0.000045f, -0.000078f, -0.000016f, -0.000031f, + +0.000040f, +0.000026f, +0.000047f, -0.000019f, -0.000022f, +0.000027f + }, + { + +0.000024f, +0.001894f, +0.001080f, +0.000748f, +0.000742f, -0.001454f, -0.000215f, +0.000445f, -0.000235f, -0.000114f, + +0.000027f, +0.000521f, -0.000254f, -0.000102f, +0.000522f, -0.001180f, +0.000994f, +0.000114f, -0.002434f, -0.001012f, + +0.000918f, +0.000202f, -0.001216f, -0.000748f, +0.000706f, -0.000021f, +0.000165f, -0.000844f, +0.000614f, -0.000578f, + -0.000025f, +0.000483f, -0.000396f, +0.000202f, +0.000010f, -0.000148f, -0.000263f, -0.000447f, -0.000042f, -0.000114f, + -0.000240f, -0.000155f, -0.000170f, +0.000210f, -0.000083f, -0.000316f, -0.000042f, -0.000006f, +0.000157f, -0.000192f, + -0.000262f, -0.000072f, -0.000119f, +0.000019f, +0.000449f, +0.000146f, -0.000083f, -0.000131f, -0.000095f, -0.000134f, + +0.000050f, +0.000065f, +0.000159f, +0.000090f, +0.000048f, +0.000126f, -0.000062f, -0.000135f, -0.000189f, -0.000010f, + +0.000025f, +0.000026f, +0.000091f, +0.000009f, -0.000062f, +0.000057f, +0.000099f, +0.000008f, +0.000026f, +0.000085f, + +0.000020f, +0.000007f, -0.000039f, -0.000028f, -0.000044f, -0.000021f, +0.000046f, -0.000002f, +0.000016f, -0.000043f, + -0.000020f, -0.000012f, -0.000019f, -0.000007f, -0.000045f, -0.000019f + }, + { + -0.001974f, +0.015606f, +0.001130f, -0.001510f, -0.000279f, -0.000662f, -0.000883f, +0.001020f, -0.000064f, -0.000378f, + +0.000086f, +0.000196f, -0.000438f, -0.000525f, +0.001264f, +0.000650f, -0.000695f, +0.000025f, +0.000187f, +0.000281f, + +0.000287f, -0.000250f, -0.000110f, +0.000042f, -0.000290f, +0.000272f, +0.000212f, +0.000014f, +0.000043f, -0.000292f, + -0.000241f, +0.000257f, +0.000278f, +0.000397f, -0.000350f, +0.000204f, +0.000092f, -0.000502f, +0.000299f, -0.000425f, + -0.000680f, +0.000112f, +0.000149f, +0.000178f, +0.000099f, -0.000096f, +0.000051f, -0.000336f, +0.000127f, +0.000130f, + -0.000172f, -0.000080f, -0.000046f, +0.000026f, +0.000216f, +0.000123f, +0.000142f, -0.000178f, -0.000052f, +0.000095f, + +0.000024f, -0.000025f, +0.000036f, +0.000105f, -0.000029f, -0.000018f, +0.000025f, +0.000025f, -0.000040f, +0.000014f, + +0.000006f, -0.000004f, -0.000055f, -0.000136f, -0.000039f, -0.000020f, -0.000059f, +0.000109f, -0.000004f, -0.000010f, + +0.000026f, -0.000062f, +0.000075f, -0.000041f, -0.000028f, -0.000063f, -0.000045f, -0.000022f, +0.000001f, +0.000041f, + -0.000019f, +0.000001f, +0.000039f, +0.000031f, -0.000029f, -0.000023f + }, + { + -0.000299f, +0.002241f, +0.000335f, +0.000212f, -0.000209f, +0.000033f, +0.000347f, -0.000092f, -0.000229f, -0.000159f, + -0.000358f, +0.000188f, -0.000533f, +0.000840f, +0.004864f, +0.001421f, -0.000491f, -0.001095f, -0.000692f, +0.000220f, + +0.000622f, +0.000759f, -0.001402f, -0.000518f, -0.001073f, +0.000952f, +0.000060f, -0.000288f, +0.000346f, -0.001128f, + -0.000126f, +0.000364f, +0.000535f, +0.000214f, -0.000020f, +0.000244f, +0.000039f, -0.000651f, -0.000116f, -0.000197f, + +0.000227f, +0.000272f, -0.000200f, -0.000205f, -0.000010f, +0.000095f, +0.000251f, -0.000121f, +0.000079f, -0.000259f, + -0.000080f, +0.000136f, -0.000142f, -0.000096f, -0.000047f, +0.000014f, +0.000178f, +0.000371f, +0.000175f, +0.000066f, + -0.000149f, -0.000156f, +0.000033f, +0.000183f, +0.000175f, -0.000147f, +0.000027f, +0.000013f, -0.000021f, -0.000014f, + -0.000047f, +0.000015f, -0.000036f, -0.000044f, -0.000039f, -0.000091f, -0.000113f, +0.000040f, +0.000017f, +0.000053f, + +0.000002f, -0.000050f, +0.000084f, +0.000055f, +0.000014f, +0.000058f, +0.000055f, +0.000022f, -0.000001f, -0.000008f, + -0.000011f, -0.000046f, -0.000039f, +0.000043f, +0.000018f, -0.000029f + }, + { + +0.003935f, +0.004871f, +0.001348f, -0.000581f, -0.000414f, -0.000280f, -0.001906f, +0.000135f, +0.000550f, -0.000116f, + -0.000815f, +0.000150f, +0.000010f, +0.003006f, -0.000288f, +0.000634f, +0.000184f, -0.000276f, +0.000349f, -0.000806f, + +0.000172f, +0.000311f, -0.000314f, -0.000468f, +0.000194f, -0.000286f, -0.000400f, -0.000841f, -0.000760f, -0.000309f, + -0.000232f, +0.000003f, +0.000036f, -0.000155f, -0.000367f, -0.000264f, -0.000053f, +0.000139f, -0.000168f, -0.000344f, + +0.000168f, +0.000285f, -0.000109f, +0.000228f, +0.000114f, +0.000244f, -0.000280f, +0.000401f, +0.000256f, -0.000083f, + -0.000185f, -0.000234f, -0.000173f, -0.000321f, -0.000104f, -0.000111f, +0.000071f, +0.000048f, +0.000216f, -0.000074f, + -0.000032f, +0.000090f, -0.000026f, -0.000016f, -0.000079f, +0.000064f, +0.000133f, +0.000128f, -0.000020f, -0.000121f, + +0.000120f, +0.000050f, -0.000121f, -0.000084f, +0.000026f, -0.000013f, +0.000087f, -0.000047f, -0.000046f, -0.000059f, + +0.000037f, +0.000097f, +0.000007f, -0.000037f, -0.000078f, +0.000038f, +0.000148f, +0.000031f, +0.000014f, +0.000067f, + +0.000016f, +0.000010f, -0.000071f, -0.000036f, -0.000026f, -0.000061f + }, + { + +0.000060f, +0.002822f, +0.000958f, -0.000047f, -0.000116f, -0.000120f, +0.000210f, -0.000215f, -0.000126f, +0.000247f, + -0.000261f, +0.000037f, +0.000841f, +0.004131f, -0.001651f, +0.003653f, +0.000398f, -0.000119f, +0.000428f, -0.000128f, + -0.000671f, -0.000055f, -0.000473f, +0.000201f, +0.000253f, -0.000317f, -0.000002f, -0.000012f, -0.000618f, -0.000047f, + +0.000132f, +0.000472f, +0.000045f, -0.000078f, +0.000453f, +0.000214f, -0.000157f, -0.000175f, -0.000179f, +0.000176f, + +0.000035f, -0.000479f, -0.000093f, +0.000226f, -0.000181f, +0.000212f, -0.000017f, -0.000089f, -0.000176f, +0.000072f, + -0.000214f, -0.000193f, +0.000172f, +0.000196f, +0.000007f, +0.000051f, +0.000072f, -0.000002f, -0.000045f, +0.000047f, + -0.000272f, -0.000183f, +0.000072f, -0.000028f, -0.000125f, +0.000103f, +0.000079f, -0.000117f, -0.000068f, -0.000038f, + -0.000028f, +0.000111f, -0.000025f, -0.000022f, +0.000023f, -0.000090f, +0.000100f, +0.000040f, +0.000018f, -0.000008f, + -0.000140f, -0.000029f, +0.000061f, +0.000012f, +0.000065f, +0.000079f, +0.000062f, -0.000065f, +0.000001f, +0.000042f, + -0.000092f, -0.000049f, +0.000034f, +0.000017f, -0.000053f, +0.000026f + }, + { + -0.001303f, -0.005272f, +0.000080f, -0.000253f, +0.000005f, -0.003269f, +0.000123f, +0.000345f, +0.000289f, +0.000216f, + -0.000130f, +0.000110f, -0.000236f, +0.000814f, +0.004882f, -0.000852f, -0.000046f, +0.000252f, +0.000683f, -0.000054f, + +0.000617f, -0.000073f, -0.000043f, -0.000735f, +0.000271f, +0.001164f, +0.000058f, -0.001328f, -0.000030f, +0.000137f, + +0.000069f, +0.000143f, -0.000225f, +0.000252f, +0.000230f, +0.000537f, -0.000031f, -0.000294f, -0.000267f, -0.000191f, + -0.000292f, -0.000110f, +0.000121f, +0.000226f, -0.000228f, +0.000048f, +0.000467f, -0.000067f, -0.000106f, -0.000148f, + -0.000102f, -0.000229f, -0.000243f, +0.000010f, -0.000031f, -0.000001f, +0.000288f, -0.000032f, -0.000006f, +0.000040f, + -0.000066f, +0.000160f, +0.000065f, +0.000141f, -0.000034f, -0.000009f, +0.000051f, -0.000042f, +0.000015f, -0.000016f, + +0.000026f, +0.000076f, -0.000028f, -0.000125f, -0.000092f, +0.000060f, +0.000059f, -0.000006f, -0.000001f, +0.000018f, + +0.000030f, -0.000060f, -0.000010f, +0.000045f, -0.000009f, -0.000058f, -0.000009f, -0.000089f, -0.000031f, +0.000065f, + -0.000015f, +0.000023f, +0.000025f, -0.000024f, -0.000020f, -0.000020f + } + }, + { + { + -0.000510f, -0.009470f, +0.000918f, -0.000441f, -0.000285f, +0.000012f, -0.000297f, +0.000367f, +0.000131f, +0.000365f, + +0.000169f, -0.000236f, +0.000597f, -0.000829f, +0.000797f, +0.000541f, -0.000784f, -0.000661f, -0.001711f, +0.000469f, + +0.001209f, +0.000261f, +0.001071f, -0.000031f, +0.000772f, -0.000635f, +0.000273f, +0.000105f, +0.000759f, +0.000502f, + -0.000745f, -0.000222f, +0.000785f, -0.000072f, -0.000257f, -0.000053f, +0.000150f, +0.000234f, -0.000705f, +0.000001f, + -0.000128f, +0.000124f, -0.000089f, -0.000070f, -0.000013f, -0.000098f, -0.000447f, -0.000210f, +0.000027f, -0.000234f, + +0.000116f, +0.000063f, -0.000020f, +0.000083f, +0.000327f, -0.000094f, -0.000074f, -0.000025f, -0.000218f, -0.000027f, + +0.000087f, +0.000099f, +0.000181f, -0.000021f, -0.000092f, +0.000159f, -0.000003f, -0.000066f, +0.000024f, +0.000150f, + -0.000026f, -0.000002f, -0.000025f, -0.000077f, +0.000001f, +0.000010f, -0.000029f, -0.000051f, +0.000047f, +0.000034f, + -0.000031f, -0.000007f, +0.000070f, +0.000113f, +0.000050f, -0.000005f, -0.000037f, +0.000018f, +0.000024f, -0.000056f, + -0.000063f, +0.000039f, -0.000006f, +0.000006f, -0.000034f, -0.000046f + }, + { + +0.005441f, -0.011229f, -0.006782f, -0.000063f, -0.000403f, -0.000184f, +0.000084f, -0.000647f, -0.001105f, +0.000486f, + -0.000120f, +0.000063f, +0.000064f, -0.000106f, +0.000664f, -0.000260f, -0.000638f, -0.000478f, +0.000751f, -0.000457f, + +0.000136f, -0.000392f, -0.000248f, -0.000204f, +0.000006f, +0.000358f, -0.000267f, -0.000072f, +0.000712f, +0.000096f, + -0.000043f, -0.000125f, -0.000194f, -0.000492f, -0.000106f, +0.000007f, +0.000253f, +0.000171f, -0.000214f, -0.000403f, + -0.000044f, +0.000262f, +0.000231f, -0.000054f, +0.000304f, +0.000135f, -0.000213f, +0.000010f, -0.000230f, +0.000126f, + +0.000040f, +0.000070f, +0.000160f, +0.000249f, +0.000053f, +0.000036f, -0.000134f, +0.000130f, -0.000067f, +0.000040f, + +0.000168f, +0.000111f, +0.000013f, +0.000032f, +0.000010f, -0.000230f, -0.000046f, +0.000113f, +0.000080f, +0.000131f, + -0.000045f, -0.000082f, -0.000054f, +0.000015f, -0.000016f, -0.000116f, +0.000042f, -0.000064f, -0.000082f, -0.000014f, + +0.000077f, +0.000013f, -0.000054f, +0.000030f, +0.000094f, -0.000054f, -0.000070f, +0.000065f, -0.000034f, +0.000017f, + -0.000011f, -0.000011f, +0.000028f, +0.000031f, -0.000006f, -0.000010f + }, + { + -0.000510f, +0.017772f, +0.006170f, +0.003004f, +0.001758f, -0.000172f, +0.000115f, +0.000517f, +0.000243f, -0.000461f, + -0.000587f, -0.000243f, -0.000497f, +0.000884f, -0.001425f, -0.000442f, -0.000449f, +0.000228f, +0.001093f, -0.000097f, + +0.000188f, +0.000289f, +0.000341f, +0.000198f, -0.000294f, +0.000035f, -0.000035f, -0.000164f, -0.000046f, +0.000031f, + +0.000256f, -0.000183f, +0.000498f, +0.000204f, -0.000487f, -0.000429f, -0.000188f, +0.000252f, +0.000337f, +0.000059f, + +0.000049f, +0.000085f, -0.000073f, +0.000267f, +0.000170f, -0.000123f, -0.000463f, -0.000173f, +0.000365f, +0.000178f, + -0.000197f, -0.000256f, -0.000031f, +0.000145f, -0.000031f, -0.000023f, +0.000192f, +0.000285f, -0.000010f, -0.000139f, + -0.000057f, +0.000180f, +0.000104f, -0.000072f, +0.000060f, +0.000112f, -0.000007f, +0.000074f, -0.000016f, +0.000100f, + +0.000070f, -0.000024f, +0.000023f, +0.000069f, +0.000072f, -0.000055f, +0.000030f, -0.000032f, -0.000033f, -0.000054f, + +0.000021f, -0.000006f, +0.000067f, +0.000047f, -0.000058f, -0.000005f, +0.000010f, -0.000033f, -0.000007f, -0.000041f, + -0.000016f, +0.000036f, +0.000006f, +0.000043f, -0.000014f, +0.000003f + }, + { + +0.000011f, -0.005947f, -0.000096f, +0.000191f, +0.000176f, -0.000185f, +0.000011f, -0.000026f, +0.000033f, +0.000142f, + +0.000047f, -0.000335f, -0.000190f, +0.000768f, -0.002939f, -0.001659f, +0.000895f, +0.000181f, -0.003150f, +0.000733f, + -0.000249f, -0.002108f, -0.000346f, +0.001113f, -0.000484f, +0.001418f, +0.000474f, +0.001659f, -0.000537f, -0.000595f, + -0.000344f, +0.000884f, +0.000368f, +0.000154f, -0.000034f, +0.000194f, +0.000658f, -0.000063f, +0.000238f, +0.000214f, + +0.000034f, -0.000087f, +0.000185f, +0.000032f, -0.000086f, +0.000068f, +0.000399f, -0.000178f, -0.000050f, +0.000176f, + -0.000001f, -0.000157f, +0.000307f, +0.000133f, +0.000145f, +0.000104f, -0.000187f, -0.000092f, +0.000132f, -0.000167f, + -0.000147f, +0.000050f, -0.000012f, -0.000026f, +0.000082f, +0.000021f, -0.000002f, -0.000030f, +0.000128f, +0.000029f, + -0.000102f, -0.000172f, +0.000004f, +0.000018f, +0.000002f, -0.000071f, +0.000025f, +0.000116f, +0.000079f, -0.000004f, + -0.000047f, +0.000015f, +0.000024f, +0.000001f, +0.000019f, -0.000068f, -0.000021f, +0.000029f, +0.000033f, +0.000024f, + -0.000019f, +0.000019f, +0.000064f, +0.000021f, -0.000009f, +0.000035f + }, + { + +0.012865f, -0.007933f, -0.002449f, -0.003101f, +0.000532f, +0.000358f, -0.000033f, +0.000037f, -0.000208f, -0.000103f, + +0.000160f, +0.000484f, -0.000128f, +0.000539f, -0.001057f, -0.000238f, +0.000517f, -0.000735f, -0.000519f, -0.000014f, + -0.000113f, +0.000261f, +0.000255f, -0.000184f, -0.000286f, +0.000210f, -0.000187f, +0.001552f, +0.000091f, -0.000207f, + +0.000101f, -0.000027f, -0.000249f, +0.000419f, -0.000229f, +0.000042f, -0.000007f, -0.000923f, +0.000030f, -0.000152f, + -0.000415f, -0.000149f, +0.000159f, +0.000129f, +0.000056f, +0.000028f, +0.000138f, +0.000203f, +0.000078f, +0.000161f, + -0.000306f, +0.000209f, +0.000227f, -0.000129f, -0.000115f, -0.000055f, -0.000096f, -0.000327f, -0.000161f, -0.000050f, + +0.000136f, -0.000200f, +0.000063f, +0.000026f, -0.000049f, +0.000010f, -0.000016f, -0.000155f, -0.000019f, +0.000049f, + -0.000010f, -0.000055f, -0.000127f, -0.000067f, +0.000103f, +0.000016f, +0.000057f, +0.000095f, -0.000053f, +0.000038f, + +0.000067f, -0.000008f, +0.000046f, +0.000028f, -0.000094f, -0.000009f, +0.000016f, +0.000010f, -0.000024f, -0.000021f, + +0.000007f, -0.000028f, -0.000020f, -0.000034f, -0.000033f, +0.000026f + }, + { + -0.000510f, +0.001064f, +0.002271f, -0.000544f, -0.000038f, -0.000121f, +0.000053f, +0.000120f, +0.000180f, +0.000180f, + -0.000112f, -0.000174f, +0.000071f, -0.000926f, -0.002416f, -0.000463f, +0.002966f, -0.001567f, -0.000311f, +0.005465f, + +0.000095f, -0.000949f, -0.001014f, -0.001028f, +0.000420f, -0.000303f, +0.000076f, +0.000098f, +0.001038f, +0.000957f, + +0.000258f, -0.000359f, +0.000070f, +0.000500f, +0.000193f, +0.000424f, -0.000110f, +0.000358f, +0.000191f, +0.000012f, + +0.000311f, +0.000050f, -0.000219f, +0.000085f, +0.000137f, +0.000134f, -0.000095f, -0.000235f, -0.000155f, +0.000135f, + -0.000028f, +0.000149f, -0.000121f, -0.000100f, +0.000143f, +0.000091f, +0.000075f, -0.000041f, +0.000038f, +0.000082f, + -0.000003f, -0.000095f, +0.000046f, -0.000009f, +0.000028f, +0.000095f, -0.000085f, -0.000049f, -0.000015f, -0.000046f, + -0.000027f, +0.000150f, +0.000071f, -0.000021f, +0.000016f, +0.000059f, +0.000077f, +0.000080f, +0.000048f, -0.000025f, + -0.000044f, +0.000077f, -0.000017f, -0.000064f, -0.000019f, +0.000024f, +0.000017f, -0.000016f, +0.000029f, +0.000022f, + -0.000036f, -0.000078f, +0.000021f, +0.000062f, +0.000019f, -0.000008f + }, + { + -0.002646f, -0.067888f, -0.000235f, +0.001657f, -0.000188f, +0.000131f, -0.000139f, +0.000398f, +0.000684f, -0.000806f, + +0.000261f, +0.000158f, -0.000037f, +0.000491f, -0.000066f, +0.000266f, -0.000354f, +0.000568f, -0.000190f, -0.000735f, + -0.000232f, -0.000356f, +0.000067f, -0.000206f, -0.000002f, -0.000548f, -0.000219f, +0.000454f, -0.000318f, -0.000223f, + +0.000132f, +0.000298f, +0.000161f, +0.000129f, -0.000191f, -0.000144f, +0.000140f, +0.000157f, -0.000023f, -0.000038f, + +0.000151f, -0.000148f, -0.000231f, -0.000036f, -0.000009f, +0.000059f, -0.000112f, -0.000238f, +0.000012f, -0.000084f, + -0.000201f, -0.000042f, -0.000175f, -0.000050f, -0.000153f, +0.000116f, +0.000156f, +0.000020f, +0.000203f, +0.000031f, + +0.000162f, -0.000034f, +0.000020f, -0.000043f, -0.000051f, +0.000058f, +0.000195f, +0.000029f, -0.000099f, +0.000059f, + -0.000012f, -0.000139f, +0.000032f, +0.000147f, -0.000027f, -0.000029f, +0.000021f, +0.000042f, -0.000065f, +0.000072f, + +0.000049f, -0.000063f, +0.000034f, +0.000071f, -0.000061f, -0.000050f, +0.000092f, +0.000025f, -0.000000f, -0.000027f, + +0.000011f, +0.000048f, -0.000037f, -0.000017f, -0.000023f, -0.000007f + }, + { + -0.000565f, +0.000889f, +0.001817f, -0.000020f, +0.000219f, -0.000240f, -0.000076f, -0.000175f, -0.000093f, +0.000233f, + -0.000066f, -0.000396f, +0.000140f, +0.000454f, -0.002129f, +0.000725f, -0.002474f, -0.001790f, +0.000356f, +0.001320f, + -0.001148f, -0.000281f, +0.000372f, +0.000980f, +0.000281f, +0.000770f, +0.000892f, -0.000238f, -0.000347f, -0.000536f, + -0.000195f, -0.000023f, +0.000259f, +0.000177f, -0.000111f, -0.000115f, -0.000090f, +0.000184f, -0.000279f, +0.000112f, + -0.000080f, +0.000123f, +0.000168f, -0.000125f, -0.000100f, +0.000081f, +0.000339f, +0.000212f, -0.000226f, -0.000019f, + +0.000213f, +0.000046f, -0.000068f, +0.000046f, +0.000158f, +0.000049f, +0.000065f, +0.000164f, -0.000119f, -0.000198f, + -0.000045f, +0.000022f, +0.000071f, -0.000108f, -0.000055f, -0.000153f, -0.000021f, +0.000129f, +0.000099f, -0.000025f, + +0.000043f, -0.000040f, -0.000051f, -0.000009f, +0.000070f, +0.000017f, -0.000012f, +0.000115f, +0.000051f, +0.000027f, + +0.000014f, -0.000124f, -0.000042f, -0.000024f, +0.000020f, +0.000026f, +0.000011f, +0.000059f, -0.000047f, +0.000030f, + +0.000034f, -0.000042f, +0.000024f, -0.000005f, -0.000005f, -0.000010f + }, + { + +0.015244f, +0.036921f, -0.005314f, +0.002303f, +0.000499f, +0.000271f, +0.000237f, -0.000147f, -0.000652f, +0.000764f, + +0.000130f, -0.000681f, -0.000865f, +0.000336f, +0.000796f, +0.000794f, +0.000163f, -0.000006f, +0.000173f, +0.000276f, + +0.000406f, -0.000196f, -0.000472f, +0.000578f, -0.000096f, -0.000178f, +0.000637f, -0.000079f, +0.000190f, -0.000296f, + -0.000060f, -0.000093f, +0.000233f, -0.000411f, +0.000136f, +0.000318f, -0.000917f, -0.000397f, +0.000233f, +0.000142f, + +0.000609f, +0.000167f, +0.000377f, +0.000074f, +0.000381f, +0.000001f, +0.000243f, +0.000159f, -0.000423f, +0.000019f, + +0.000290f, +0.000124f, -0.000135f, +0.000198f, -0.000032f, -0.000098f, -0.000084f, +0.000118f, +0.000061f, -0.000200f, + +0.000017f, +0.000092f, +0.000049f, +0.000027f, -0.000078f, -0.000180f, +0.000059f, +0.000037f, -0.000059f, +0.000035f, + +0.000041f, -0.000102f, +0.000012f, +0.000046f, +0.000075f, -0.000032f, -0.000064f, +0.000021f, +0.000019f, -0.000005f, + +0.000001f, -0.000015f, -0.000042f, -0.000023f, -0.000066f, -0.000053f, -0.000017f, +0.000038f, +0.000075f, +0.000048f, + -0.000010f, -0.000010f, -0.000027f, +0.000005f, +0.000053f, -0.000004f + }, + { + -0.000021f, +0.005476f, -0.001241f, +0.001035f, -0.000607f, +0.000787f, +0.001186f, -0.000556f, +0.000231f, +0.000333f, + +0.000187f, -0.000871f, -0.001081f, +0.000747f, +0.000605f, +0.000365f, -0.000904f, -0.000953f, +0.000602f, +0.000406f, + -0.000447f, -0.000970f, -0.000230f, +0.000741f, +0.000846f, +0.000530f, -0.000069f, +0.000131f, -0.000469f, -0.000247f, + +0.000031f, -0.000025f, +0.000236f, +0.000594f, -0.000014f, -0.000036f, +0.000346f, +0.000343f, +0.000384f, +0.000037f, + +0.000015f, +0.000066f, +0.000141f, -0.000218f, -0.000058f, +0.000323f, -0.000189f, -0.000038f, -0.000099f, -0.000149f, + +0.000374f, +0.000098f, -0.000026f, +0.000219f, -0.000162f, -0.000273f, -0.000042f, -0.000045f, +0.000068f, +0.000111f, + -0.000000f, -0.000023f, -0.000070f, -0.000142f, -0.000070f, -0.000165f, +0.000053f, +0.000159f, +0.000200f, +0.000126f, + -0.000043f, +0.000036f, -0.000044f, -0.000062f, +0.000057f, -0.000020f, -0.000039f, -0.000034f, -0.000019f, -0.000065f, + -0.000065f, -0.000015f, +0.000023f, +0.000031f, +0.000031f, +0.000068f, -0.000008f, -0.000022f, -0.000015f, -0.000002f, + +0.000037f, -0.000005f, +0.000024f, -0.000003f, +0.000056f, +0.000043f + }, + { + +0.002119f, +0.007949f, -0.001306f, -0.001389f, -0.000100f, +0.002490f, +0.002238f, -0.000689f, -0.001069f, -0.000382f, + +0.000129f, -0.000023f, +0.000168f, +0.000548f, +0.000896f, +0.000112f, +0.000375f, +0.000182f, +0.000608f, +0.000197f, + +0.000362f, -0.000249f, +0.000261f, +0.000137f, +0.000294f, +0.000186f, +0.000088f, -0.000076f, -0.000373f, +0.000422f, + +0.000739f, +0.000158f, +0.000102f, +0.000088f, +0.000278f, -0.000497f, -0.000272f, +0.000185f, -0.000201f, -0.000017f, + +0.000367f, +0.000324f, -0.000217f, -0.000077f, -0.000263f, -0.000120f, +0.000063f, +0.000233f, +0.000199f, -0.000108f, + -0.000003f, +0.000063f, +0.000244f, -0.000025f, -0.000205f, -0.000116f, -0.000081f, +0.000098f, +0.000233f, -0.000109f, + +0.000023f, +0.000009f, -0.000039f, -0.000078f, +0.000029f, +0.000023f, -0.000087f, -0.000033f, -0.000065f, +0.000014f, + -0.000035f, -0.000043f, +0.000007f, +0.000114f, +0.000081f, +0.000054f, +0.000085f, -0.000041f, -0.000060f, -0.000022f, + -0.000058f, +0.000055f, -0.000023f, -0.000025f, +0.000039f, +0.000014f, +0.000081f, +0.000023f, +0.000015f, -0.000035f, + +0.000003f, +0.000037f, -0.000015f, -0.000062f, +0.000008f, +0.000051f + }, + { + +0.000264f, +0.001628f, +0.000349f, +0.000013f, +0.000200f, +0.000253f, -0.000486f, -0.000273f, -0.000002f, -0.000272f, + -0.000012f, -0.000642f, +0.001108f, -0.000920f, +0.006823f, -0.001280f, -0.000157f, +0.000662f, +0.000896f, -0.000262f, + -0.002307f, +0.000690f, +0.000824f, +0.000789f, +0.000257f, -0.000812f, -0.000021f, -0.000605f, -0.000720f, +0.000059f, + +0.000062f, -0.000649f, -0.000171f, -0.000059f, +0.000249f, +0.000117f, +0.000023f, +0.000192f, +0.000289f, -0.000083f, + +0.000099f, -0.000259f, -0.000001f, +0.000370f, +0.000178f, +0.000088f, -0.000153f, -0.000025f, +0.000194f, +0.000027f, + +0.000202f, -0.000133f, -0.000057f, +0.000115f, +0.000010f, +0.000059f, -0.000117f, -0.000280f, -0.000255f, -0.000072f, + -0.000178f, +0.000092f, +0.000001f, -0.000078f, -0.000180f, +0.000078f, +0.000027f, -0.000085f, +0.000047f, -0.000030f, + +0.000090f, +0.000031f, +0.000019f, +0.000066f, +0.000025f, +0.000092f, +0.000093f, +0.000002f, -0.000016f, -0.000025f, + -0.000026f, +0.000016f, -0.000083f, -0.000055f, -0.000032f, -0.000025f, -0.000074f, -0.000052f, -0.000011f, +0.000002f, + +0.000006f, +0.000024f, +0.000025f, -0.000017f, -0.000004f, +0.000035f + }, + { + -0.003685f, +0.012899f, +0.001319f, +0.001701f, -0.000147f, +0.000212f, +0.001531f, -0.000584f, -0.000247f, -0.000526f, + +0.000832f, -0.000093f, +0.000258f, +0.001919f, +0.000327f, -0.000805f, -0.000364f, +0.000513f, +0.000210f, +0.000173f, + +0.001039f, -0.000151f, +0.000043f, -0.000852f, +0.000032f, +0.000066f, +0.000033f, -0.000162f, +0.000073f, -0.000304f, + -0.000125f, +0.000255f, -0.000202f, -0.000457f, -0.000413f, +0.000400f, +0.000185f, -0.000306f, +0.000001f, +0.000050f, + -0.000195f, -0.000470f, -0.000265f, -0.000227f, -0.000548f, -0.000484f, -0.000178f, -0.000146f, -0.000349f, +0.000203f, + -0.000268f, +0.000234f, +0.000003f, +0.000061f, +0.000327f, +0.000207f, +0.000046f, +0.000055f, -0.000256f, -0.000060f, + +0.000195f, -0.000012f, -0.000037f, +0.000043f, +0.000059f, -0.000069f, -0.000046f, -0.000059f, +0.000010f, +0.000137f, + -0.000036f, -0.000147f, -0.000013f, +0.000080f, +0.000009f, +0.000027f, -0.000048f, +0.000019f, +0.000032f, +0.000065f, + +0.000065f, -0.000093f, -0.000064f, +0.000022f, +0.000114f, +0.000031f, -0.000116f, -0.000074f, -0.000031f, -0.000041f, + -0.000007f, -0.000019f, +0.000040f, +0.000059f, +0.000025f, +0.000087f + }, + { + +0.000118f, +0.003612f, -0.001266f, -0.000085f, +0.000318f, +0.000170f, +0.000286f, +0.000063f, +0.000471f, -0.000186f, + -0.000091f, -0.000371f, -0.000448f, +0.004953f, +0.009447f, +0.001516f, +0.001044f, +0.000422f, -0.000271f, +0.000005f, + +0.000199f, +0.000189f, +0.000767f, +0.000973f, -0.000383f, -0.000165f, +0.000929f, -0.000183f, +0.000294f, -0.000433f, + -0.000351f, -0.000496f, -0.000329f, -0.000264f, -0.000034f, -0.000233f, -0.000477f, -0.000507f, -0.000030f, +0.000037f, + -0.000271f, +0.000286f, +0.000125f, -0.000012f, -0.000014f, -0.000118f, +0.000062f, +0.000199f, +0.000091f, -0.000017f, + -0.000090f, +0.000247f, +0.000105f, -0.000127f, -0.000074f, -0.000008f, -0.000123f, +0.000027f, -0.000001f, -0.000095f, + +0.000168f, +0.000160f, -0.000088f, -0.000135f, +0.000093f, +0.000031f, -0.000128f, +0.000137f, +0.000050f, +0.000034f, + -0.000077f, -0.000123f, -0.000003f, +0.000061f, -0.000019f, +0.000033f, -0.000028f, -0.000128f, +0.000048f, -0.000020f, + +0.000070f, +0.000105f, -0.000060f, -0.000020f, -0.000024f, -0.000093f, -0.000056f, +0.000040f, +0.000035f, -0.000045f, + +0.000042f, +0.000099f, +0.000006f, -0.000038f, +0.000057f, +0.000014f + }, + { + +0.000335f, -0.010967f, +0.001080f, +0.000018f, +0.000236f, -0.000154f, +0.000617f, -0.000179f, +0.000222f, -0.000007f, + +0.001104f, +0.001178f, -0.000238f, +0.000943f, +0.004132f, +0.001499f, +0.000241f, +0.000718f, +0.000716f, -0.000043f, + -0.000425f, -0.000363f, -0.000160f, +0.000288f, +0.000330f, +0.000072f, -0.000359f, -0.000926f, +0.000680f, -0.000013f, + -0.000044f, +0.000275f, +0.000077f, -0.000294f, +0.000087f, -0.000352f, -0.000153f, -0.000310f, +0.000272f, -0.000049f, + -0.000031f, +0.000072f, +0.000239f, -0.000292f, -0.000192f, -0.000078f, -0.000247f, +0.000097f, +0.000153f, +0.000126f, + -0.000193f, -0.000011f, +0.000244f, +0.000172f, +0.000026f, +0.000041f, -0.000063f, -0.000126f, +0.000006f, +0.000002f, + +0.000023f, -0.000039f, -0.000093f, -0.000030f, -0.000127f, -0.000095f, -0.000056f, +0.000007f, -0.000068f, +0.000007f, + +0.000003f, -0.000158f, -0.000095f, +0.000144f, +0.000120f, +0.000012f, -0.000091f, -0.000030f, +0.000042f, -0.000053f, + -0.000097f, +0.000049f, +0.000072f, +0.000003f, +0.000001f, +0.000025f, -0.000020f, +0.000052f, +0.000055f, -0.000054f, + -0.000007f, -0.000038f, -0.000025f, -0.000011f, +0.000001f, +0.000050f + } + }, + { + { + +0.000225f, -0.007398f, +0.001796f, -0.000312f, +0.000283f, +0.000047f, -0.000158f, +0.000426f, +0.000001f, +0.000305f, + -0.000546f, +0.000128f, +0.000548f, -0.001737f, +0.001359f, +0.001480f, -0.000543f, +0.000145f, -0.001382f, +0.000430f, + +0.000550f, +0.000255f, +0.000815f, -0.000758f, +0.000205f, -0.000949f, -0.000453f, -0.000510f, +0.001063f, +0.001017f, + -0.000170f, +0.000188f, +0.000512f, -0.000609f, -0.000214f, +0.000471f, +0.000118f, -0.000405f, -0.000859f, +0.000013f, + -0.000218f, -0.000069f, -0.000209f, +0.000041f, +0.000032f, -0.000007f, -0.000356f, -0.000182f, +0.000069f, -0.000110f, + +0.000320f, +0.000078f, -0.000060f, +0.000182f, +0.000189f, -0.000206f, -0.000023f, -0.000113f, -0.000105f, +0.000059f, + +0.000153f, +0.000205f, +0.000117f, -0.000063f, -0.000056f, +0.000162f, -0.000069f, -0.000017f, +0.000089f, +0.000044f, + -0.000062f, +0.000009f, -0.000030f, -0.000064f, +0.000036f, +0.000005f, -0.000039f, -0.000024f, +0.000048f, -0.000008f, + -0.000018f, +0.000033f, +0.000092f, +0.000089f, +0.000016f, -0.000049f, -0.000041f, +0.000009f, +0.000002f, -0.000065f, + +0.000009f, +0.000025f, +0.000015f, +0.000000f, -0.000054f, -0.000035f + }, + { + -0.005217f, -0.013473f, +0.006871f, -0.001004f, -0.001062f, +0.000352f, -0.000323f, -0.001210f, -0.000791f, +0.000436f, + -0.000276f, +0.000259f, -0.000101f, -0.000220f, +0.000781f, -0.001310f, -0.000734f, +0.000247f, +0.001532f, +0.000252f, + +0.000398f, -0.000001f, -0.000188f, -0.000213f, -0.000225f, -0.000096f, -0.000469f, -0.000012f, +0.000643f, +0.000049f, + -0.000221f, -0.000539f, -0.000569f, -0.000485f, +0.000136f, +0.000250f, -0.000333f, -0.000515f, -0.000596f, -0.000367f, + +0.000068f, +0.000322f, +0.000202f, -0.000139f, +0.000315f, -0.000081f, -0.000171f, -0.000117f, -0.000099f, +0.000181f, + -0.000040f, +0.000240f, +0.000212f, +0.000194f, +0.000060f, +0.000028f, -0.000037f, +0.000212f, -0.000030f, -0.000018f, + +0.000098f, -0.000003f, -0.000015f, -0.000030f, -0.000119f, -0.000155f, +0.000011f, +0.000157f, +0.000072f, +0.000033f, + -0.000054f, -0.000106f, -0.000020f, +0.000020f, -0.000117f, -0.000055f, +0.000053f, -0.000067f, -0.000050f, +0.000004f, + +0.000064f, +0.000003f, -0.000030f, +0.000032f, +0.000054f, -0.000119f, +0.000006f, +0.000038f, -0.000034f, +0.000006f, + -0.000017f, -0.000005f, +0.000026f, +0.000002f, +0.000008f, -0.000017f + }, + { + +0.001333f, -0.001695f, -0.008771f, +0.002746f, +0.001204f, -0.000358f, +0.000052f, +0.000505f, +0.000153f, -0.000734f, + -0.000456f, +0.000052f, -0.000965f, +0.000896f, -0.000494f, +0.000221f, +0.000072f, -0.000120f, +0.000164f, -0.000365f, + +0.000251f, +0.000453f, +0.000350f, +0.000157f, +0.000064f, +0.000905f, +0.000189f, -0.000483f, -0.000863f, -0.000219f, + +0.000489f, +0.000200f, +0.000144f, -0.000393f, -0.000510f, -0.000070f, +0.000062f, +0.000026f, -0.000198f, -0.000175f, + +0.000204f, +0.000067f, -0.000163f, +0.000176f, +0.000018f, -0.000209f, -0.000149f, +0.000058f, +0.000206f, -0.000127f, + -0.000291f, -0.000128f, -0.000031f, +0.000150f, -0.000095f, +0.000064f, +0.000250f, +0.000160f, -0.000009f, -0.000072f, + +0.000128f, +0.000298f, +0.000138f, -0.000066f, +0.000070f, +0.000092f, +0.000042f, +0.000071f, -0.000016f, +0.000062f, + +0.000018f, -0.000031f, +0.000042f, +0.000060f, +0.000029f, -0.000064f, +0.000005f, +0.000010f, -0.000029f, -0.000073f, + +0.000012f, +0.000014f, +0.000063f, -0.000004f, -0.000072f, +0.000018f, -0.000005f, -0.000029f, -0.000001f, -0.000042f, + +0.000044f, +0.000047f, +0.000016f, +0.000015f, -0.000027f, +0.000009f + }, + { + +0.000020f, -0.006424f, -0.000306f, +0.000536f, +0.000088f, -0.000241f, -0.000015f, +0.000075f, +0.000113f, +0.000012f, + -0.000195f, -0.000414f, -0.000159f, -0.000579f, -0.001040f, +0.001221f, -0.001387f, -0.001097f, -0.002736f, +0.000883f, + -0.000854f, -0.001959f, -0.000824f, +0.001436f, -0.000268f, -0.000804f, -0.000666f, +0.001469f, -0.001639f, -0.000083f, + +0.000458f, +0.001089f, +0.000429f, -0.000032f, -0.000282f, +0.000446f, +0.000354f, -0.000137f, +0.000417f, +0.000180f, + +0.000211f, +0.000068f, +0.000077f, -0.000082f, -0.000163f, +0.000016f, +0.000328f, -0.000173f, +0.000068f, +0.000140f, + -0.000090f, -0.000016f, +0.000171f, +0.000032f, +0.000253f, +0.000031f, -0.000203f, +0.000060f, +0.000105f, -0.000124f, + -0.000147f, +0.000085f, -0.000028f, +0.000034f, +0.000161f, +0.000044f, -0.000002f, -0.000012f, +0.000166f, +0.000045f, + -0.000151f, -0.000120f, +0.000070f, +0.000076f, -0.000043f, -0.000025f, +0.000105f, +0.000101f, +0.000003f, -0.000045f, + -0.000061f, +0.000062f, +0.000024f, +0.000015f, -0.000003f, -0.000077f, -0.000003f, +0.000037f, +0.000044f, -0.000008f, + -0.000036f, +0.000039f, +0.000069f, +0.000007f, +0.000007f, +0.000034f + }, + { + -0.009791f, -0.037136f, +0.000148f, -0.002456f, +0.000472f, +0.000335f, -0.000044f, -0.000007f, -0.000156f, +0.000038f, + +0.000654f, -0.000112f, -0.000325f, +0.001280f, -0.000398f, -0.000137f, +0.000003f, -0.001114f, -0.000145f, +0.000024f, + -0.000099f, +0.000235f, +0.000106f, -0.000526f, +0.000077f, -0.000062f, -0.000169f, +0.002313f, -0.000018f, -0.000473f, + +0.000136f, -0.000209f, -0.000129f, +0.000408f, -0.000246f, -0.000061f, -0.000340f, -0.000360f, +0.000392f, +0.000068f, + -0.000207f, +0.000025f, +0.000301f, +0.000040f, -0.000055f, +0.000220f, +0.000309f, +0.000148f, -0.000041f, +0.000213f, + -0.000010f, +0.000243f, +0.000121f, -0.000146f, -0.000073f, +0.000085f, -0.000103f, -0.000228f, -0.000072f, +0.000001f, + +0.000133f, -0.000146f, +0.000165f, +0.000006f, -0.000067f, -0.000046f, -0.000032f, -0.000094f, +0.000082f, +0.000041f, + -0.000076f, -0.000129f, -0.000136f, +0.000030f, +0.000095f, -0.000011f, +0.000064f, +0.000013f, -0.000039f, +0.000046f, + +0.000045f, -0.000017f, +0.000025f, -0.000029f, -0.000071f, +0.000017f, +0.000016f, -0.000001f, -0.000061f, -0.000021f, + +0.000009f, -0.000014f, -0.000012f, -0.000042f, +0.000003f, +0.000020f + }, + { + -0.000246f, +0.001178f, +0.000768f, -0.000525f, -0.000089f, -0.000101f, +0.000146f, +0.000110f, +0.000165f, +0.000045f, + -0.000264f, -0.000302f, -0.000107f, +0.000134f, -0.000603f, +0.000110f, +0.003292f, -0.001104f, +0.000809f, +0.005358f, + -0.000224f, -0.000445f, +0.001033f, -0.000286f, -0.000662f, -0.000098f, +0.000621f, +0.000364f, -0.000246f, -0.000582f, + +0.000386f, +0.000107f, +0.000146f, +0.000583f, +0.000134f, +0.000272f, -0.000109f, +0.000268f, +0.000124f, -0.000178f, + +0.000417f, -0.000080f, -0.000126f, +0.000274f, +0.000170f, +0.000017f, -0.000133f, -0.000175f, -0.000084f, +0.000170f, + +0.000149f, +0.000053f, -0.000326f, -0.000065f, +0.000157f, -0.000007f, -0.000029f, -0.000118f, -0.000022f, +0.000102f, + +0.000030f, -0.000006f, +0.000042f, +0.000022f, +0.000065f, +0.000079f, -0.000058f, -0.000038f, +0.000006f, -0.000027f, + +0.000051f, +0.000111f, +0.000037f, +0.000006f, +0.000073f, +0.000060f, +0.000087f, +0.000081f, +0.000006f, -0.000061f, + -0.000006f, +0.000039f, -0.000039f, -0.000054f, +0.000008f, +0.000023f, -0.000008f, -0.000021f, +0.000022f, -0.000004f, + -0.000057f, -0.000036f, +0.000060f, +0.000042f, +0.000008f, -0.000029f + }, + { + +0.010774f, -0.054038f, -0.003484f, +0.000674f, +0.000023f, +0.000335f, +0.000289f, +0.000136f, +0.000352f, -0.000358f, + +0.000387f, -0.000084f, +0.000054f, +0.000101f, -0.000723f, +0.000132f, -0.000077f, +0.000611f, -0.000292f, -0.000525f, + -0.000449f, -0.000237f, +0.000217f, -0.000016f, -0.000284f, -0.000564f, +0.000408f, +0.000644f, -0.000368f, -0.000264f, + +0.000222f, +0.000158f, +0.000003f, +0.000315f, +0.000063f, +0.000093f, -0.000123f, +0.000098f, +0.000177f, +0.000243f, + +0.000352f, +0.000020f, -0.000060f, -0.000039f, +0.000092f, +0.000039f, -0.000304f, -0.000142f, -0.000042f, -0.000350f, + -0.000149f, +0.000083f, -0.000063f, -0.000010f, +0.000056f, +0.000199f, +0.000118f, +0.000048f, +0.000258f, +0.000056f, + +0.000182f, -0.000001f, +0.000048f, -0.000035f, +0.000014f, +0.000136f, +0.000171f, -0.000015f, -0.000070f, +0.000088f, + -0.000049f, -0.000122f, +0.000124f, +0.000130f, -0.000058f, -0.000049f, +0.000013f, +0.000001f, -0.000048f, +0.000066f, + -0.000019f, -0.000028f, +0.000082f, +0.000059f, -0.000118f, +0.000015f, +0.000076f, -0.000016f, -0.000037f, -0.000028f, + +0.000035f, -0.000001f, -0.000022f, -0.000022f, -0.000025f, +0.000011f + }, + { + -0.000269f, +0.001446f, +0.000262f, -0.000234f, +0.000047f, -0.000226f, +0.000061f, -0.000052f, -0.000059f, +0.000138f, + -0.000244f, -0.000459f, -0.000507f, +0.000609f, -0.001491f, +0.002325f, +0.000569f, +0.000031f, -0.000031f, +0.000083f, + -0.001049f, +0.001240f, -0.001061f, -0.001151f, -0.000219f, -0.000785f, +0.000851f, -0.000307f, -0.000137f, -0.000409f, + -0.000262f, -0.000178f, +0.000185f, +0.000049f, -0.000092f, -0.000103f, +0.000089f, +0.000255f, -0.000003f, +0.000080f, + -0.000103f, +0.000079f, -0.000012f, -0.000032f, -0.000014f, +0.000140f, +0.000374f, -0.000079f, -0.000265f, +0.000133f, + +0.000191f, +0.000155f, -0.000128f, +0.000091f, +0.000142f, +0.000094f, +0.000124f, +0.000225f, -0.000126f, -0.000011f, + +0.000071f, +0.000147f, +0.000080f, -0.000015f, +0.000011f, -0.000181f, +0.000038f, +0.000139f, +0.000059f, -0.000084f, + +0.000072f, -0.000015f, -0.000054f, -0.000003f, +0.000066f, -0.000011f, +0.000048f, +0.000100f, -0.000005f, +0.000019f, + -0.000001f, -0.000096f, -0.000034f, -0.000004f, +0.000045f, +0.000012f, +0.000048f, +0.000016f, -0.000044f, +0.000065f, + +0.000002f, -0.000015f, +0.000011f, -0.000027f, +0.000012f, -0.000008f + }, + { + -0.017487f, +0.000881f, +0.003524f, +0.002022f, -0.000091f, +0.000268f, +0.000307f, -0.000451f, -0.000268f, +0.000960f, + -0.000621f, -0.001129f, -0.000530f, +0.000672f, +0.000317f, +0.001027f, +0.000622f, +0.000329f, +0.000380f, +0.000219f, + +0.000612f, -0.000581f, -0.000375f, +0.001063f, -0.000119f, +0.000039f, +0.000482f, -0.000581f, +0.000284f, +0.000052f, + +0.000085f, -0.000182f, +0.000293f, -0.000154f, +0.000075f, -0.000011f, -0.000490f, +0.000068f, +0.000515f, -0.000038f, + +0.000663f, +0.000134f, +0.000435f, +0.000205f, +0.000315f, +0.000139f, +0.000177f, -0.000250f, -0.000590f, -0.000138f, + +0.000230f, +0.000055f, -0.000112f, +0.000182f, +0.000014f, -0.000141f, -0.000120f, +0.000076f, -0.000015f, -0.000223f, + -0.000017f, +0.000062f, +0.000063f, -0.000079f, -0.000186f, -0.000083f, +0.000095f, -0.000012f, -0.000010f, +0.000026f, + +0.000001f, -0.000096f, +0.000035f, +0.000054f, +0.000124f, -0.000112f, +0.000009f, +0.000087f, +0.000012f, -0.000066f, + +0.000007f, -0.000033f, -0.000059f, -0.000071f, -0.000071f, -0.000056f, +0.000022f, +0.000059f, +0.000048f, +0.000019f, + -0.000035f, -0.000005f, -0.000044f, +0.000024f, +0.000034f, -0.000007f + }, + { + +0.000284f, +0.008835f, +0.000940f, -0.000138f, -0.000658f, +0.001291f, +0.000402f, -0.000747f, +0.000307f, +0.000386f, + +0.000163f, -0.000803f, +0.000061f, +0.001409f, +0.001126f, +0.001320f, -0.000573f, -0.000490f, +0.001454f, +0.000452f, + -0.000181f, +0.000004f, -0.000092f, +0.000286f, +0.000175f, +0.000476f, +0.000156f, +0.000109f, -0.000485f, +0.000500f, + +0.000007f, -0.000021f, +0.000055f, +0.000395f, -0.000074f, +0.000155f, +0.000509f, +0.000298f, +0.000138f, +0.000160f, + +0.000239f, +0.000241f, +0.000133f, -0.000262f, +0.000163f, +0.000331f, +0.000028f, -0.000059f, -0.000096f, +0.000035f, + +0.000427f, +0.000039f, -0.000023f, +0.000003f, -0.000385f, -0.000182f, +0.000052f, +0.000005f, +0.000123f, +0.000063f, + -0.000076f, -0.000008f, -0.000126f, -0.000145f, -0.000113f, -0.000115f, +0.000116f, +0.000153f, +0.000197f, +0.000055f, + -0.000019f, -0.000025f, -0.000081f, -0.000026f, +0.000072f, -0.000031f, -0.000071f, -0.000016f, -0.000023f, -0.000076f, + -0.000031f, +0.000004f, +0.000035f, +0.000036f, +0.000054f, +0.000026f, -0.000043f, -0.000001f, -0.000013f, +0.000035f, + +0.000018f, +0.000024f, +0.000028f, +0.000000f, +0.000061f, +0.000026f + }, + { + -0.001692f, +0.002117f, -0.001466f, -0.000853f, -0.000013f, +0.001316f, +0.000452f, -0.000672f, -0.000533f, +0.000386f, + +0.000053f, -0.000100f, +0.000258f, +0.000505f, +0.000456f, -0.000383f, +0.000698f, +0.000594f, +0.000583f, +0.000232f, + -0.000003f, +0.000160f, +0.000217f, +0.000275f, +0.000326f, +0.000027f, -0.000296f, -0.000206f, -0.000175f, +0.000461f, + +0.000577f, -0.000302f, -0.000154f, -0.000073f, +0.000312f, -0.000805f, -0.000225f, +0.000151f, -0.000291f, +0.000435f, + +0.000380f, +0.000081f, -0.000230f, -0.000133f, -0.000240f, -0.000105f, +0.000016f, +0.000275f, +0.000072f, -0.000208f, + +0.000045f, +0.000041f, +0.000178f, -0.000082f, -0.000174f, -0.000073f, -0.000025f, +0.000226f, +0.000129f, -0.000126f, + +0.000001f, -0.000020f, -0.000045f, -0.000092f, +0.000017f, -0.000006f, -0.000043f, -0.000017f, -0.000005f, +0.000004f, + -0.000023f, -0.000012f, +0.000038f, +0.000139f, +0.000049f, +0.000070f, +0.000053f, -0.000106f, -0.000019f, -0.000011f, + -0.000033f, +0.000056f, -0.000057f, +0.000029f, +0.000016f, +0.000066f, +0.000053f, +0.000032f, +0.000006f, -0.000035f, + +0.000019f, +0.000012f, -0.000037f, -0.000040f, +0.000029f, +0.000026f + }, + { + -0.000067f, +0.001211f, +0.000443f, -0.000276f, +0.000245f, +0.000024f, -0.000583f, -0.000109f, +0.000302f, +0.000119f, + +0.000286f, -0.000467f, +0.000878f, -0.004021f, +0.003002f, -0.001515f, +0.000367f, +0.001458f, +0.000979f, +0.000035f, + -0.001431f, +0.000517f, +0.000738f, +0.000717f, +0.000140f, -0.000772f, -0.000603f, -0.000626f, -0.000645f, +0.000845f, + -0.000201f, -0.000462f, -0.000489f, -0.000134f, +0.000013f, -0.000259f, -0.000038f, +0.000606f, +0.000250f, -0.000014f, + -0.000125f, -0.000289f, +0.000137f, +0.000330f, -0.000000f, -0.000040f, -0.000237f, +0.000041f, +0.000185f, +0.000101f, + +0.000162f, -0.000176f, +0.000019f, +0.000126f, +0.000033f, +0.000096f, -0.000105f, -0.000361f, -0.000167f, -0.000069f, + -0.000008f, +0.000063f, -0.000038f, -0.000158f, -0.000142f, +0.000183f, -0.000014f, +0.000004f, +0.000054f, -0.000030f, + +0.000091f, +0.000004f, +0.000046f, +0.000074f, +0.000003f, +0.000104f, +0.000099f, -0.000023f, -0.000015f, -0.000042f, + -0.000007f, +0.000016f, -0.000105f, -0.000066f, -0.000021f, -0.000046f, -0.000075f, -0.000037f, +0.000003f, +0.000011f, + +0.000013f, +0.000031f, +0.000029f, -0.000040f, -0.000012f, +0.000041f + }, + { + +0.002025f, +0.020677f, +0.002066f, +0.001219f, +0.000135f, +0.000367f, +0.001326f, -0.000790f, -0.000390f, -0.000077f, + +0.000849f, -0.000383f, -0.000212f, +0.000066f, +0.000035f, -0.000826f, -0.000462f, +0.000275f, -0.000116f, +0.000570f, + +0.000328f, -0.000534f, -0.000024f, -0.000339f, +0.000158f, +0.000100f, +0.000096f, +0.000142f, +0.000406f, -0.000045f, + -0.000082f, +0.000096f, -0.000104f, -0.000249f, -0.000303f, +0.000328f, +0.000134f, -0.000053f, +0.000215f, +0.000182f, + -0.000095f, -0.000577f, -0.000044f, -0.000275f, -0.000455f, -0.000380f, +0.000120f, -0.000188f, -0.000231f, +0.000175f, + -0.000113f, +0.000342f, +0.000068f, +0.000232f, +0.000144f, +0.000172f, -0.000051f, -0.000007f, -0.000265f, +0.000118f, + +0.000181f, -0.000099f, -0.000084f, +0.000059f, +0.000050f, -0.000082f, -0.000089f, -0.000086f, +0.000058f, +0.000102f, + -0.000114f, -0.000092f, +0.000094f, +0.000082f, -0.000028f, +0.000001f, -0.000086f, +0.000040f, +0.000030f, +0.000055f, + -0.000024f, -0.000110f, -0.000023f, +0.000042f, +0.000075f, -0.000041f, -0.000145f, -0.000046f, -0.000013f, -0.000042f, + -0.000004f, -0.000011f, +0.000083f, +0.000041f, +0.000032f, +0.000069f + }, + { + +0.000059f, +0.003258f, -0.000925f, +0.000260f, +0.000159f, +0.000043f, +0.000205f, +0.000282f, +0.000252f, -0.000389f, + +0.000077f, -0.000527f, -0.000117f, +0.000711f, +0.001027f, -0.001401f, +0.000528f, +0.000059f, +0.000309f, +0.000752f, + +0.000281f, -0.000164f, +0.000799f, +0.000915f, +0.000136f, +0.000625f, +0.000217f, +0.000024f, +0.000842f, -0.000148f, + +0.000126f, -0.000113f, +0.000229f, +0.000017f, -0.000701f, -0.000156f, -0.000316f, -0.000568f, +0.000080f, -0.000064f, + -0.000183f, +0.000276f, +0.000039f, -0.000235f, -0.000099f, -0.000187f, +0.000130f, +0.000141f, +0.000196f, -0.000083f, + +0.000033f, +0.000153f, -0.000104f, -0.000172f, -0.000112f, -0.000153f, -0.000153f, +0.000005f, -0.000011f, -0.000130f, + +0.000305f, +0.000083f, -0.000095f, -0.000077f, +0.000152f, -0.000061f, -0.000122f, +0.000168f, +0.000042f, +0.000035f, + -0.000079f, -0.000101f, +0.000034f, +0.000053f, +0.000007f, +0.000076f, -0.000093f, -0.000049f, -0.000010f, +0.000007f, + +0.000122f, +0.000045f, -0.000058f, -0.000030f, -0.000058f, -0.000085f, -0.000056f, +0.000066f, -0.000007f, -0.000019f, + +0.000083f, +0.000070f, -0.000032f, -0.000017f, +0.000067f, -0.000029f + }, + { + +0.001820f, -0.010752f, -0.000802f, -0.000895f, +0.000935f, +0.001515f, +0.000648f, -0.000396f, -0.000274f, -0.000253f, + +0.000884f, +0.000389f, -0.000372f, -0.000818f, +0.001176f, +0.001005f, -0.000529f, -0.000182f, +0.000036f, -0.000371f, + -0.000741f, +0.000061f, +0.000042f, +0.000477f, -0.000011f, -0.000086f, +0.000005f, -0.000242f, +0.000665f, -0.000178f, + +0.000067f, +0.000417f, +0.000156f, -0.000366f, -0.000203f, -0.000397f, +0.000290f, +0.000187f, +0.000369f, +0.000173f, + +0.000133f, +0.000083f, +0.000115f, -0.000248f, +0.000158f, -0.000101f, -0.000307f, +0.000243f, +0.000261f, +0.000240f, + +0.000039f, +0.000022f, +0.000145f, +0.000038f, +0.000074f, -0.000031f, -0.000071f, +0.000004f, -0.000046f, -0.000007f, + +0.000001f, -0.000195f, -0.000148f, -0.000068f, -0.000076f, -0.000037f, -0.000059f, -0.000059f, -0.000026f, +0.000037f, + -0.000023f, -0.000138f, -0.000014f, +0.000185f, +0.000071f, -0.000042f, -0.000080f, +0.000005f, +0.000042f, -0.000056f, + -0.000030f, +0.000065f, +0.000027f, -0.000021f, +0.000010f, +0.000056f, -0.000010f, +0.000095f, -0.000006f, -0.000058f, + +0.000011f, -0.000046f, -0.000007f, +0.000021f, +0.000004f, +0.000029f + } + } +}; + +const float fastconvReverberationTimes[60] = +{ + 0.429201f, 0.205110f, 0.202338f, 0.208383f, 0.215664f, 0.236545f, 0.230598f, 0.228400f, 0.227467f, 0.218956f, 0.226083f, 0.220702f, 0.221501f, 0.223471f, 0.223705f, 0.227063f, 0.227899f, 0.223071f, 0.220000f, 0.218583f, 0.220417f, 0.218250f, 0.213250f, 0.210333f, 0.207417f, 0.198750f, 0.196250f, 0.194917f, 0.190333f, 0.184500f, 0.180333f, 0.176167f, 0.176500f, 0.177583f, 0.183583f, 0.195917f, 0.203250f, 0.208417f, 0.214667f, 0.220000f, 0.222917f, 0.230417f, 0.233928f, 0.233647f, 0.236333f, 0.237428f, 0.241629f, 0.241118f, 0.238847f, 0.242384f, 0.246292f, 0.245948f, 0.246100f, 0.245396f, 0.243951f, 0.244123f, 0.239270f, 0.241474f, 0.234824f, 0.253040f, +}; + + +const float fastconvReverberationEneCorrections[60] = +{ + 0.000584f, 0.000210f, 0.000233f, 0.000212f, 0.000257f, 0.001518f, 0.001154f, 0.001097f, 0.001265f, 0.001298f, 0.002320f, 0.002432f, 0.002686f, 0.002702f, 0.002632f, 0.002564f, 0.002732f, 0.002727f, 0.002609f, 0.002524f, 0.003417f, 0.001783f, 0.000987f, 0.000699f, 0.000606f, 0.000536f, 0.000511f, 0.000569f, 0.000600f, 0.000543f, 0.001257f, 0.001209f, 0.000957f, 0.000601f, 0.000274f, 0.000106f, 0.000072f, 0.000051f, 0.000040f, 0.000030f, 0.000024f, 0.000018f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000007f, 0.000006f, 0.000005f, 0.000003f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000000f, 0.000000f, +}; + + +const float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX] = { + 0.345494f, 0.319454f, 0.332961f, 0.360923f, 0.374299f, 0.370777f, 0.358625f, 0.348103f, 0.343109f, 0.331351f, + 0.316502f, 0.304975f, 0.294855f, 0.287549f, 0.279920f, 0.270277f, 0.264042f, 0.256404f, 0.249899f, 0.242040f, + 0.235074f, 0.229647f, 0.223730f, 0.218795f, 0.212599f, 0.207689f, 0.202082f, 0.198094f, 0.193907f, 0.185908f, + 0.182677f, 0.181960f, 0.179788f, 0.179081f, 0.176542f, 0.172328f, 0.171103f, 0.167951f, 0.167974f, 0.169209f, + 0.167340f, 0.165926f, 0.163565f, 0.161558f, 0.158405f, 0.156651f, 0.155351f, 0.153580f, 0.151576f, 0.149963f, + 0.148204f, 0.146446f, 0.144688f, 0.142930f, 0.141172f, 0.139414f, 0.137655f, 0.135897f, 0.134139f, 0.132381f +}; + + +const float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX] = { + 0.191981f, 0.143739f, 0.113528f, 0.093836f, 0.090147f, 0.079961f, 0.066594f, 0.072700f, 0.076491f, 0.082065f, + 0.085265f, 0.093864f, 0.101901f, 0.113728f, 0.117646f, 0.113494f, 0.126125f, 0.126304f, 0.123928f, 0.116067f, + 0.098528f, 0.051482f, 0.029950f, 0.025223f, 0.021143f, 0.019358f, 0.016707f, 0.016227f, 0.018416f, 0.018419f, + 0.017097f, 0.015219f, 0.014214f, 0.009693f, 0.003996f, 0.001613f, 0.000965f, 0.000643f, 0.000498f, 0.000417f, + 0.000304f, 0.000181f, 0.000116f, 0.000113f, 0.000102f, 0.000078f, 0.000064f, 0.000060f, 0.000063f, 0.000062f, + 0.000061f, 0.000052f, 0.000040f, 0.000030f, 0.000014f, 0.000007f, 0.000003f, 0.000001f, 0.000000f, 0.000000f +}; + + +const float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX] = { + 0.595541f, 0.684107f, 1.041399f, 0.880102f, 0.726599f, 0.529105f, 0.456758f, 0.383174f, 0.331734f, 0.330565f, + 0.436469f, 0.592478f, 0.767344f, 1.110786f, 1.548546f, 1.946089f, 2.550005f, 3.382855f, 4.235532f, 4.688064f, + 3.328668f, 1.312207f, 0.376543f, 0.176443f, 0.149840f, 0.130307f, 0.137089f, 0.292711f, 0.580265f, 0.733105f, + 0.734631f, 0.765035f, 0.759859f, 0.551234f, 0.257650f, 0.090947f, 0.052208f, 0.054891f, 0.050681f, 0.035657f, + 0.022300f, 0.015935f, 0.012629f, 0.010668f, 0.009082f, 0.007769f, 0.008032f, 0.010972f, 0.014774f, 0.016790f, + 0.016350f, 0.042709f, 0.077337f, 0.066238f, 0.042046f, 0.020017f, 0.007896f, 0.002947f, 0.000932f, 0.000152f +}; + +/* clang-format on */ diff --git a/lib_dec/ivas_rom_binauralRenderer.h b/lib_dec/ivas_rom_binauralRenderer.h new file mode 100644 index 0000000000..3bed3c5ec9 --- /dev/null +++ b/lib_dec/ivas_rom_binauralRenderer.h @@ -0,0 +1,77 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" + +/*------------------------------------------------------------------------- + * Binaural rendering related ROM tables + *------------------------------------------------------------------------*/ + +/* Binaural rendering data set based on HRIRs */ +extern const float FASTCONV_HRIR_latency_s; +extern const float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][16][7]; +extern const float leftHRIRImag_HOA3[BINAURAL_CONVBANDS][16][7]; +extern const float rightHRIRReal_HOA3[BINAURAL_CONVBANDS][16][7]; +extern const float rightHRIRImag_HOA3[BINAURAL_CONVBANDS][16][7]; + +extern const float leftHRIRReal[BINAURAL_CONVBANDS][15][7]; +extern const float leftHRIRImag[BINAURAL_CONVBANDS][15][7]; +extern const float rightHRIRReal[BINAURAL_CONVBANDS][15][7]; +extern const float rightHRIRImag[BINAURAL_CONVBANDS][15][7]; + +extern const float FASTCONV_HOA3_latency_s; +extern const float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; +extern const float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; + +/* Binaural rendering data set based on BRIRs */ +extern const float FASTCONV_BRIR_latency_s; +extern const float leftBRIRReal[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]; +extern const float leftBRIRImag[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]; +extern const float rightBRIRReal[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]; +extern const float rightBRIRImag[BINAURAL_CONVBANDS][15][BINAURAL_NTAPS_MAX]; + +/* Reverberation parameters based on BRIRs for fastconv */ +extern float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX]; +extern float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; + +/* Binaural rendering data set based on BRIRs, to be used in a combined manner + * with the above binaural rendering data set based on HRIRs for parametric + * renderer */ +extern const float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX]; +extern const float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; +extern const float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; diff --git a/lib_dec/ivas_rom_binaural_crend_head.c b/lib_dec/ivas_rom_binaural_crend_head.c new file mode 100644 index 0000000000..ac4216ef77 --- /dev/null +++ b/lib_dec/ivas_rom_binaural_crend_head.c @@ -0,0 +1,6911 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* clang-format off */ + +/*------------------------------------------------------------------------- + * Binaural rendering related ROM tables + *------------------------------------------------------------------------*/ + +/* Binaural rendering data set based on HRIRs */ +/* Tables generated by the exe at "scripts/binauralRenderer_interface/generate_cren_ivas_tables*.* */ +/* Can be replaced by your own generated HRIR or BRIRI tables */ + + + +#include +#include +#include "cnst.h" +#include "ivas_cnst.h" + + +/********************** Sample Rate = 48000 **********************/ + +const float CRendBin_Combined_HRIR_latency_s_48kHz = 0.000020833333110f; +const int16_t CRendBin_Combined_HRIR_max_num_iterations_48kHz = 1; +const uint16_t CRendBin_Combined_HRIR_num_iterations_48kHz[15][BINAURAL_CHANNELS]={{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1} }; +const uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS] = {0, 0}; +const uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][1]={{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}}}; +const uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz = 0; +const float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[15]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; +const uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float CRendBin_Combined_HRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][240]={ + { + {1.101488f, 1.121686f, 1.165024f, 1.224338f, 1.257855f, 1.220486f, 1.149240f, 1.140890f, 1.185728f, 1.128055f, 0.902355f, 0.707875f, 0.788108f, 1.099541f, 1.375119f, 1.484928f, 1.549978f, 1.695559f, 1.876431f, 1.995635f, 2.041427f, 2.028898f, 1.921455f, 1.700966f, 1.448293f, 1.277519f, 1.224020f, 1.244684f, 1.297952f, 1.382592f, 1.515360f, 1.701068f, 1.918656f, 2.122718f, 2.265994f, 2.329628f, 2.329558f, 2.294332f, 2.241762f, 2.173492f, 2.084598f, 1.978110f, 1.871591f, 1.786593f, 1.731800f, 1.700143f, 1.679095f, 1.656899f, 1.622424f, 1.569381f, 1.502234f, 1.432448f, 1.368773f, 1.314020f, 1.268340f, 1.231321f, 1.202278f, 1.180534f, 1.163747f, 1.146145f, 1.121645f, 1.087903f, 1.043613f, 0.983612f, 0.901864f, 0.798972f, 0.683390f, 0.566766f, 0.461005f, 0.376682f, 0.319308f, 0.287365f, 0.275856f, 0.280196f, 0.295624f, 0.315889f, 0.334947f, 0.349113f, 0.357350f, 0.360958f, 0.362742f, 0.364984f, 0.368682f, 0.375343f, 0.387569f, 0.406700f, 0.431922f, 0.462716f, 0.499762f, 0.542220f, 0.586337f, 0.627805f, 0.663761f, 0.692071f, 0.710593f, 0.717887f, + 0.713731f, 0.699041f, 0.675854f, 0.646711f, 0.613681f, 0.578765f, 0.544708f, 0.513648f, 0.485423f, 0.459267f, 0.436523f, 0.419581f, 0.409130f, 0.404828f, 0.407589f, 0.418787f, 0.438090f, 0.464110f, 0.496246f, 0.534436f, 0.578397f, 0.628210f, 0.684323f, 0.746531f, 0.814569f, 0.889456f, 0.972140f, 1.061353f, 1.155269f, 1.254322f, 1.359452f, 1.468434f, 1.577080f, 1.683222f, 1.786114f, 1.882169f, 1.964521f, 2.027143f, 2.066756f, 2.079988f, 2.061244f, 2.005565f, 1.912874f, 1.787215f, 1.631793f, 1.447687f, 1.238656f, 1.013433f, 0.779817f, 0.539619f, 0.293632f, 0.048036f, -0.190045f, -0.420433f, -0.646524f, -0.866314f, -1.074294f, -1.270685f, -1.460857f, -1.646046f, -1.822195f, -1.988192f, -2.148163f, -2.304337f, -2.453363f, -2.591452f, -2.718826f, -2.836782f, -2.942783f, -3.031068f, -3.097979f, -3.144348f, -3.170915f, -3.173977f, -3.149931f, -3.102115f, -3.036603f, -2.952834f, -2.846787f, -2.721688f, -2.584617f, -2.433723f, -2.261283f, -2.067770f, -1.858490f, -1.628464f, -1.366934f, -1.074068f, -0.755851f, -0.407743f, -0.023711f, 0.384421f, 0.796944f, 1.204825f, 1.594892f, 1.931022f, + 2.176602f, 2.317416f, 2.335553f, 2.191195f, 1.867100f, 1.394310f, 0.795503f, 0.073196f, -0.660345f, -1.115477f, -1.048547f, -0.566404f, -0.073872f, 0.126575f, 0.081506f, 0.007169f, -0.000212f, 0.010105f, -0.000437f, -0.007848f, 0.001481f, 0.006032f, -0.001850f, -0.004621f, 0.002044f, 0.003718f, -0.001908f, -0.002879f, 0.001815f, 0.002240f, -0.001726f, -0.001819f, 0.001470f, 0.001293f, -0.001428f, -0.001063f, 0.001166f, 0.000684f, -0.001078f, -0.000479f, 0.000904f, 0.000264f, -0.000723f, -0.000016f, 0.000645f, -0.000071f, -0.000388f, 0.000349f}, + {0.968441f, 0.987234f, 0.869596f, 0.596073f, 0.334483f, 0.171136f, 0.017776f, -0.161778f, -0.245721f, -0.155540f, 0.006522f, 0.093937f, 0.049496f, -0.140506f, -0.468985f, -0.824439f, -1.026403f, -1.016121f, -0.905691f, -0.796722f, -0.670406f, -0.503266f, -0.362411f, -0.307750f, -0.295462f, -0.254770f, -0.185996f, -0.113263f, -0.005954f, 0.176006f, 0.400292f, 0.595777f, 0.744307f, 0.877077f, 0.990030f, 1.022653f, 0.934836f, 0.765351f, 0.591919f, 0.455498f, 0.344908f, 0.238899f, 0.133289f, 0.027739f, -0.086033f, -0.210079f, -0.329871f, -0.429681f, -0.507904f, -0.568659f, -0.608760f, -0.622380f, -0.610718f, -0.579218f, -0.531546f, -0.471669f, -0.405261f, -0.334310f, -0.255734f, -0.168133f, -0.074958f, 0.019479f, 0.110900f, 0.191660f, 0.253073f, 0.292584f, 0.314355f, 0.323012f, 0.320972f, 0.311128f, 0.297794f, 0.284665f, 0.273984f, 0.266907f, 0.262951f, 0.259722f, 0.253926f, 0.242085f, 0.221157f, 0.190535f, 0.153092f, 0.112713f, 0.071225f, 0.028184f, -0.018416f, -0.072225f, -0.136625f, -0.210590f, -0.287552f, -0.358747f, -0.416020f, -0.451958f, -0.460910f, -0.441509f, -0.397130f, -0.334256f, + -0.261823f, -0.190493f, -0.129257f, -0.082184f, -0.049250f, -0.028772f, -0.017399f, -0.009448f, 0.001351f, 0.020052f, 0.051375f, 0.100649f, 0.171779f, 0.264460f, 0.373677f, 0.490520f, 0.602599f, 0.695221f, 0.754355f, 0.769527f, 0.734768f, 0.648370f, 0.512977f, 0.335735f, 0.127409f, -0.099262f, -0.330468f, -0.551239f, -0.746022f, -0.900770f, -1.004813f, -1.051193f, -1.036965f, -0.964527f, -0.841753f, -0.679493f, -0.489227f, -0.282948f, -0.072808f, 0.131140f, 0.321905f, 0.493472f, 0.639377f, 0.754179f, 0.834298f, 0.876384f, 0.876941f, 0.834703f, 0.751683f, 0.631609f, 0.479801f, 0.305136f, 0.119699f, -0.064323f, -0.235835f, -0.383842f, -0.498638f, -0.574816f, -0.611505f, -0.610195f, -0.574481f, -0.511148f, -0.428865f, -0.335564f, -0.238096f, -0.143043f, -0.055734f, 0.021001f, 0.085880f, 0.137914f, 0.176979f, 0.204394f, 0.221855f, 0.230580f, 0.231755f, 0.226643f, 0.215971f, 0.200107f, 0.179730f, 0.155526f, 0.127749f, 0.096849f, 0.063819f, 0.029377f, -0.006197f, -0.042042f, -0.076719f, -0.109157f, -0.138085f, -0.160825f, -0.174403f, -0.177268f, -0.168206f, -0.145199f, -0.107970f, -0.060190f, + -0.006824f, 0.048104f, 0.098363f, 0.134090f, 0.147833f, 0.138301f, 0.104724f, 0.045824f, -0.026274f, -0.078996f, -0.083091f, -0.045128f, -0.003292f, 0.012791f, 0.007249f, 0.000493f, 0.000789f, 0.002389f, 0.001492f, 0.000972f, 0.002319f, 0.003080f, 0.002368f, 0.002183f, 0.003054f, 0.003303f, 0.002617f, 0.002416f, 0.002859f, 0.002736f, 0.002007f, 0.001718f, 0.001826f, 0.001446f, 0.000707f, 0.000373f, 0.000270f, -0.000226f, -0.000879f, -0.001162f, -0.001335f, -0.001802f, -0.002255f, -0.002384f, -0.002506f, -0.002821f, -0.002986f, -0.002896f} + }, + { + {0.968441f, 0.987234f, 0.869596f, 0.596073f, 0.334483f, 0.171136f, 0.017776f, -0.161778f, -0.245721f, -0.155540f, 0.006522f, 0.093937f, 0.049496f, -0.140506f, -0.468985f, -0.824439f, -1.026403f, -1.016121f, -0.905691f, -0.796722f, -0.670406f, -0.503266f, -0.362411f, -0.307750f, -0.295462f, -0.254770f, -0.185996f, -0.113263f, -0.005954f, 0.176006f, 0.400292f, 0.595777f, 0.744307f, 0.877077f, 0.990030f, 1.022653f, 0.934836f, 0.765351f, 0.591919f, 0.455498f, 0.344908f, 0.238899f, 0.133289f, 0.027739f, -0.086033f, -0.210079f, -0.329871f, -0.429681f, -0.507904f, -0.568659f, -0.608760f, -0.622380f, -0.610718f, -0.579218f, -0.531546f, -0.471669f, -0.405261f, -0.334310f, -0.255734f, -0.168133f, -0.074958f, 0.019479f, 0.110900f, 0.191660f, 0.253073f, 0.292584f, 0.314355f, 0.323012f, 0.320972f, 0.311128f, 0.297794f, 0.284665f, 0.273984f, 0.266907f, 0.262951f, 0.259722f, 0.253926f, 0.242085f, 0.221157f, 0.190535f, 0.153092f, 0.112713f, 0.071225f, 0.028184f, -0.018416f, -0.072225f, -0.136625f, -0.210590f, -0.287552f, -0.358747f, -0.416020f, -0.451958f, -0.460910f, -0.441509f, -0.397130f, -0.334256f, + -0.261823f, -0.190493f, -0.129257f, -0.082184f, -0.049250f, -0.028772f, -0.017399f, -0.009448f, 0.001351f, 0.020052f, 0.051375f, 0.100649f, 0.171779f, 0.264460f, 0.373677f, 0.490520f, 0.602599f, 0.695221f, 0.754355f, 0.769527f, 0.734768f, 0.648370f, 0.512977f, 0.335735f, 0.127409f, -0.099262f, -0.330468f, -0.551239f, -0.746022f, -0.900770f, -1.004813f, -1.051193f, -1.036965f, -0.964527f, -0.841753f, -0.679493f, -0.489227f, -0.282948f, -0.072808f, 0.131140f, 0.321905f, 0.493472f, 0.639377f, 0.754179f, 0.834298f, 0.876384f, 0.876941f, 0.834703f, 0.751683f, 0.631609f, 0.479801f, 0.305136f, 0.119699f, -0.064323f, -0.235835f, -0.383842f, -0.498638f, -0.574816f, -0.611505f, -0.610195f, -0.574481f, -0.511148f, -0.428865f, -0.335564f, -0.238096f, -0.143043f, -0.055734f, 0.021001f, 0.085880f, 0.137914f, 0.176979f, 0.204394f, 0.221855f, 0.230580f, 0.231755f, 0.226643f, 0.215971f, 0.200107f, 0.179730f, 0.155526f, 0.127749f, 0.096849f, 0.063819f, 0.029377f, -0.006197f, -0.042042f, -0.076719f, -0.109157f, -0.138085f, -0.160825f, -0.174403f, -0.177268f, -0.168206f, -0.145199f, -0.107970f, -0.060190f, + -0.006824f, 0.048104f, 0.098363f, 0.134090f, 0.147833f, 0.138301f, 0.104724f, 0.045824f, -0.026274f, -0.078996f, -0.083091f, -0.045128f, -0.003292f, 0.012791f, 0.007249f, 0.000493f, 0.000789f, 0.002389f, 0.001492f, 0.000972f, 0.002319f, 0.003080f, 0.002368f, 0.002183f, 0.003054f, 0.003303f, 0.002617f, 0.002416f, 0.002859f, 0.002736f, 0.002007f, 0.001718f, 0.001826f, 0.001446f, 0.000707f, 0.000373f, 0.000270f, -0.000226f, -0.000879f, -0.001162f, -0.001335f, -0.001802f, -0.002255f, -0.002384f, -0.002506f, -0.002821f, -0.002986f, -0.002896f}, + {1.101488f, 1.121686f, 1.165024f, 1.224338f, 1.257855f, 1.220486f, 1.149240f, 1.140890f, 1.185728f, 1.128055f, 0.902355f, 0.707875f, 0.788108f, 1.099541f, 1.375119f, 1.484928f, 1.549978f, 1.695559f, 1.876431f, 1.995635f, 2.041427f, 2.028898f, 1.921455f, 1.700966f, 1.448293f, 1.277519f, 1.224020f, 1.244684f, 1.297952f, 1.382592f, 1.515360f, 1.701068f, 1.918656f, 2.122718f, 2.265994f, 2.329628f, 2.329558f, 2.294332f, 2.241762f, 2.173492f, 2.084598f, 1.978110f, 1.871591f, 1.786593f, 1.731800f, 1.700143f, 1.679095f, 1.656899f, 1.622424f, 1.569381f, 1.502234f, 1.432448f, 1.368773f, 1.314020f, 1.268340f, 1.231321f, 1.202278f, 1.180534f, 1.163747f, 1.146145f, 1.121645f, 1.087903f, 1.043613f, 0.983612f, 0.901864f, 0.798972f, 0.683390f, 0.566766f, 0.461005f, 0.376682f, 0.319308f, 0.287365f, 0.275856f, 0.280196f, 0.295624f, 0.315889f, 0.334947f, 0.349113f, 0.357350f, 0.360958f, 0.362742f, 0.364984f, 0.368682f, 0.375343f, 0.387569f, 0.406700f, 0.431922f, 0.462716f, 0.499762f, 0.542220f, 0.586337f, 0.627805f, 0.663761f, 0.692071f, 0.710593f, 0.717887f, + 0.713731f, 0.699041f, 0.675854f, 0.646711f, 0.613681f, 0.578765f, 0.544708f, 0.513648f, 0.485423f, 0.459267f, 0.436523f, 0.419581f, 0.409130f, 0.404828f, 0.407589f, 0.418787f, 0.438090f, 0.464110f, 0.496246f, 0.534436f, 0.578397f, 0.628210f, 0.684323f, 0.746531f, 0.814569f, 0.889456f, 0.972140f, 1.061353f, 1.155269f, 1.254322f, 1.359452f, 1.468434f, 1.577080f, 1.683222f, 1.786114f, 1.882169f, 1.964521f, 2.027143f, 2.066756f, 2.079988f, 2.061244f, 2.005565f, 1.912874f, 1.787215f, 1.631793f, 1.447687f, 1.238656f, 1.013433f, 0.779817f, 0.539619f, 0.293632f, 0.048036f, -0.190045f, -0.420433f, -0.646524f, -0.866314f, -1.074294f, -1.270685f, -1.460857f, -1.646046f, -1.822195f, -1.988192f, -2.148163f, -2.304337f, -2.453363f, -2.591452f, -2.718826f, -2.836782f, -2.942783f, -3.031068f, -3.097979f, -3.144348f, -3.170915f, -3.173977f, -3.149931f, -3.102115f, -3.036603f, -2.952834f, -2.846787f, -2.721688f, -2.584617f, -2.433723f, -2.261283f, -2.067770f, -1.858490f, -1.628464f, -1.366934f, -1.074068f, -0.755851f, -0.407743f, -0.023711f, 0.384421f, 0.796944f, 1.204825f, 1.594892f, 1.931022f, + 2.176602f, 2.317416f, 2.335553f, 2.191195f, 1.867100f, 1.394310f, 0.795503f, 0.073196f, -0.660345f, -1.115477f, -1.048547f, -0.566404f, -0.073872f, 0.126575f, 0.081506f, 0.007169f, -0.000212f, 0.010105f, -0.000437f, -0.007848f, 0.001481f, 0.006032f, -0.001850f, -0.004621f, 0.002044f, 0.003718f, -0.001908f, -0.002879f, 0.001815f, 0.002240f, -0.001726f, -0.001819f, 0.001470f, 0.001293f, -0.001428f, -0.001063f, 0.001166f, 0.000684f, -0.001078f, -0.000479f, 0.000904f, 0.000264f, -0.000723f, -0.000016f, 0.000645f, -0.000071f, -0.000388f, 0.000349f} + }, + { + {1.038216f, 1.104846f, 1.163927f, 1.102788f, 0.923912f, 0.819249f, 0.926472f, 1.059186f, 0.908605f, 0.521079f, 0.320389f, 0.567071f, 1.017483f, 1.260167f, 1.219416f, 1.154021f, 1.266485f, 1.495235f, 1.659357f, 1.659964f, 1.521679f, 1.331268f, 1.173102f, 1.086498f, 1.062729f, 1.084446f, 1.154530f, 1.278122f, 1.436340f, 1.590950f, 1.702153f, 1.739769f, 1.697847f, 1.603508f, 1.493099f, 1.376523f, 1.241975f, 1.094803f, 0.970109f, 0.902161f, 0.896629f, 0.934468f, 0.987453f, 1.027530f, 1.036809f, 1.016896f, 0.982652f, 0.944071f, 0.898806f, 0.841885f, 0.776112f, 0.710836f, 0.654027f, 0.607313f, 0.567432f, 0.531208f, 0.497948f, 0.466697f, 0.434013f, 0.397715f, 0.361295f, 0.330786f, 0.307633f, 0.288052f, 0.269263f, 0.253095f, 0.242705f, 0.238292f, 0.237335f, 0.237844f, 0.240377f, 0.247162f, 0.259729f, 0.277460f, 0.298273f, 0.320255f, 0.342464f, 0.364784f, 0.387656f, 0.411614f, 0.436401f, 0.460723f, 0.483419f, 0.504828f, 0.526542f, 0.549671f, 0.573590f, 0.596528f, 0.617075f, 0.634482f, 0.647342f, 0.652773f, 0.647722f, 0.630886f, 0.603055f, 0.566478f, + 0.524993f, 0.484080f, 0.449179f, 0.423543f, 0.408382f, 0.404761f, 0.414320f, 0.438121f, 0.475810f, 0.526417f, 0.589717f, 0.666444f, 0.756971f, 0.859702f, 0.971057f, 1.087009f, 1.203748f, 1.316495f, 1.419260f, 1.507289f, 1.578795f, 1.632867f, 1.667033f, 1.679088f, 1.670086f, 1.642553f, 1.596178f, 1.528297f, 1.438394f, 1.328645f, 1.199676f, 1.049815f, 0.880200f, 0.697091f, 0.506741f, 0.310961f, 0.110587f, -0.089623f, -0.283659f, -0.470268f, -0.652095f, -0.829533f, -0.999868f, -1.162742f, -1.321790f, -1.479081f, -1.631784f, -1.776619f, -1.914009f, -2.044530f, -2.163955f, -2.265828f, -2.347346f, -2.408663f, -2.447423f, -2.458570f, -2.440006f, -2.394433f, -2.324575f, -2.230407f, -2.112872f, -1.976957f, -1.828529f, -1.670564f, -1.505122f, -1.337013f, -1.172529f, -1.015633f, -0.868055f, -0.732334f, -0.611993f, -0.508636f, -0.421038f, -0.347478f, -0.287300f, -0.239640f, -0.202007f, -0.171116f, -0.144652f, -0.121529f, -0.100585f, -0.079881f, -0.057816f, -0.034356f, -0.010170f, 0.015158f, 0.042807f, 0.072857f, 0.104483f, 0.137917f, 0.174070f, 0.211993f, 0.249072f, 0.283815f, 0.315644f, 0.341936f, + 0.358772f, 0.364654f, 0.359571f, 0.340892f, 0.305378f, 0.254287f, 0.189565f, 0.107161f, 0.007129f, -0.086814f, -0.133950f, -0.115538f, -0.059105f, -0.011956f, 0.004169f, 0.001902f, -0.000382f, 0.000624f, 0.000524f, -0.000621f, -0.000315f, 0.000592f, 0.000256f, -0.000424f, -0.000092f, 0.000403f, 0.000056f, -0.000345f, -0.000050f, 0.000231f, -0.000053f, -0.000269f, -0.000023f, 0.000132f, -0.000078f, -0.000176f, 0.000015f, 0.000089f, -0.000053f, -0.000079f, 0.000051f, 0.000072f, -0.000010f, 0.000002f, 0.000067f, 0.000056f, 0.000030f, 0.000052f}, + {1.038216f, 1.104846f, 1.163927f, 1.102788f, 0.923912f, 0.819249f, 0.926472f, 1.059186f, 0.908605f, 0.521079f, 0.320389f, 0.567071f, 1.017483f, 1.260167f, 1.219416f, 1.154021f, 1.266485f, 1.495235f, 1.659357f, 1.659964f, 1.521679f, 1.331268f, 1.173102f, 1.086498f, 1.062729f, 1.084446f, 1.154530f, 1.278122f, 1.436340f, 1.590950f, 1.702153f, 1.739769f, 1.697847f, 1.603508f, 1.493099f, 1.376523f, 1.241975f, 1.094803f, 0.970109f, 0.902161f, 0.896629f, 0.934468f, 0.987453f, 1.027530f, 1.036809f, 1.016896f, 0.982652f, 0.944071f, 0.898806f, 0.841885f, 0.776112f, 0.710836f, 0.654027f, 0.607313f, 0.567432f, 0.531208f, 0.497948f, 0.466697f, 0.434013f, 0.397715f, 0.361295f, 0.330786f, 0.307633f, 0.288052f, 0.269263f, 0.253095f, 0.242705f, 0.238292f, 0.237335f, 0.237844f, 0.240377f, 0.247162f, 0.259729f, 0.277460f, 0.298273f, 0.320255f, 0.342464f, 0.364784f, 0.387656f, 0.411614f, 0.436401f, 0.460723f, 0.483419f, 0.504828f, 0.526542f, 0.549671f, 0.573590f, 0.596528f, 0.617075f, 0.634482f, 0.647342f, 0.652773f, 0.647722f, 0.630886f, 0.603055f, 0.566478f, + 0.524993f, 0.484080f, 0.449179f, 0.423543f, 0.408382f, 0.404761f, 0.414320f, 0.438121f, 0.475810f, 0.526417f, 0.589717f, 0.666444f, 0.756971f, 0.859702f, 0.971057f, 1.087009f, 1.203748f, 1.316495f, 1.419260f, 1.507289f, 1.578795f, 1.632867f, 1.667033f, 1.679088f, 1.670086f, 1.642553f, 1.596178f, 1.528297f, 1.438394f, 1.328645f, 1.199676f, 1.049815f, 0.880200f, 0.697091f, 0.506741f, 0.310961f, 0.110587f, -0.089623f, -0.283659f, -0.470268f, -0.652095f, -0.829533f, -0.999868f, -1.162742f, -1.321790f, -1.479081f, -1.631784f, -1.776619f, -1.914009f, -2.044530f, -2.163955f, -2.265828f, -2.347346f, -2.408663f, -2.447423f, -2.458570f, -2.440006f, -2.394433f, -2.324575f, -2.230407f, -2.112872f, -1.976957f, -1.828529f, -1.670564f, -1.505122f, -1.337013f, -1.172529f, -1.015633f, -0.868055f, -0.732334f, -0.611993f, -0.508636f, -0.421038f, -0.347478f, -0.287300f, -0.239640f, -0.202007f, -0.171116f, -0.144652f, -0.121529f, -0.100585f, -0.079881f, -0.057816f, -0.034356f, -0.010170f, 0.015158f, 0.042807f, 0.072857f, 0.104483f, 0.137917f, 0.174070f, 0.211993f, 0.249072f, 0.283815f, 0.315644f, 0.341936f, + 0.358772f, 0.364654f, 0.359571f, 0.340892f, 0.305378f, 0.254287f, 0.189565f, 0.107161f, 0.007129f, -0.086814f, -0.133950f, -0.115538f, -0.059105f, -0.011956f, 0.004169f, 0.001902f, -0.000382f, 0.000624f, 0.000524f, -0.000621f, -0.000315f, 0.000592f, 0.000256f, -0.000424f, -0.000092f, 0.000403f, 0.000056f, -0.000345f, -0.000050f, 0.000231f, -0.000053f, -0.000269f, -0.000023f, 0.000132f, -0.000078f, -0.000176f, 0.000015f, 0.000089f, -0.000053f, -0.000079f, 0.000051f, 0.000072f, -0.000010f, 0.000002f, 0.000067f, 0.000056f, 0.000030f, 0.000052f} + }, + { + {0.984080f, 0.970476f, 1.006906f, 1.104260f, 1.216794f, 1.335635f, 1.464294f, 1.533054f, 1.477510f, 1.373694f, 1.348288f, 1.379970f, 1.341218f, 1.215083f, 1.111544f, 1.076764f, 1.041682f, 0.966496f, 0.893479f, 0.840686f, 0.769350f, 0.677157f, 0.617786f, 0.610740f, 0.620021f, 0.628332f, 0.649967f, 0.668214f, 0.639094f, 0.564000f, 0.493341f, 0.454442f, 0.430784f, 0.411315f, 0.408973f, 0.429006f, 0.460805f, 0.502650f, 0.562459f, 0.634539f, 0.699920f, 0.747237f, 0.776345f, 0.788052f, 0.785425f, 0.779422f, 0.782268f, 0.799652f, 0.833592f, 0.884572f, 0.946592f, 1.007188f, 1.054930f, 1.082330f, 1.083817f, 1.058335f, 1.012691f, 0.956250f, 0.893651f, 0.826213f, 0.756564f, 0.687438f, 0.619177f, 0.552166f, 0.489247f, 0.433687f, 0.387315f, 0.351696f, 0.328352f, 0.317105f, 0.316219f, 0.324077f, 0.339216f, 0.359831f, 0.385071f, 0.416020f, 0.454311f, 0.500915f, 0.557014f, 0.624731f, 0.706142f, 0.802040f, 0.911693f, 1.033446f, 1.165920f, 1.308336f, 1.458725f, 1.612356f, 1.763090f, 1.904749f, 2.029174f, 2.125343f, 2.184253f, 2.203656f, 2.185203f, 2.129319f, + 2.037039f, 1.914643f, 1.771288f, 1.612832f, 1.442204f, 1.264496f, 1.086482f, 0.911185f, 0.737532f, 0.566210f, 0.402309f, 0.251448f, 0.116550f, -0.000376f, -0.096273f, -0.169242f, -0.221428f, -0.257657f, -0.281475f, -0.293927f, -0.295924f, -0.289877f, -0.278242f, -0.261940f, -0.241537f, -0.219109f, -0.197455f, -0.177735f, -0.159025f, -0.140026f, -0.120145f, -0.098893f, -0.075279f, -0.048418f, -0.018567f, 0.012653f, 0.043076f, 0.070995f, 0.095137f, 0.113713f, 0.124275f, 0.125072f, 0.115890f, 0.096669f, 0.065855f, 0.021420f, -0.036755f, -0.106849f, -0.187293f, -0.277135f, -0.373714f, -0.471889f, -0.566991f, -0.657229f, -0.741912f, -0.818969f, -0.886425f, -0.945214f, -0.997930f, -1.045205f, -1.085732f, -1.119527f, -1.148452f, -1.173231f, -1.192402f, -1.204919f, -1.211832f, -1.214558f, -1.212985f, -1.206284f, -1.194921f, -1.180840f, -1.165524f, -1.148636f, -1.129578f, -1.109786f, -1.091431f, -1.073946f, -1.054811f, -1.033994f, -1.013549f, -0.992185f, -0.965310f, -0.931378f, -0.892025f, -0.844815f, -0.783136f, -0.704366f, -0.609651f, -0.494994f, -0.352963f, -0.184110f, 0.004235f, 0.209198f, 0.428300f, 0.646026f, + 0.840500f, 0.999858f, 1.113448f, 1.155053f, 1.100378f, 0.951048f, 0.711125f, 0.363726f, -0.066699f, -0.436902f, -0.559600f, -0.399070f, -0.132866f, 0.029384f, 0.043765f, 0.007950f, -0.001756f, 0.005023f, 0.001749f, -0.004233f, -0.000749f, 0.003458f, 0.000224f, -0.002740f, 0.000175f, 0.002291f, -0.000296f, -0.001833f, 0.000392f, 0.001448f, -0.000493f, -0.001223f, 0.000422f, 0.000882f, -0.000505f, -0.000755f, 0.000403f, 0.000509f, -0.000413f, -0.000382f, 0.000355f, 0.000254f, -0.000271f, -0.000091f, 0.000266f, 0.000059f, -0.000112f, 0.000122f}, + {0.883975f, 0.742747f, 0.483914f, 0.188904f, -0.047459f, -0.209233f, -0.344855f, -0.459879f, -0.499939f, -0.451850f, -0.382284f, -0.347274f, -0.330209f, -0.301172f, -0.273988f, -0.260328f, -0.215778f, -0.082603f, 0.135261f, 0.371525f, 0.553401f, 0.638210f, 0.619076f, 0.521305f, 0.383817f, 0.230837f, 0.070028f, -0.082040f, -0.195461f, -0.256180f, -0.280452f, -0.291260f, -0.295978f, -0.293653f, -0.286459f, -0.272643f, -0.239767f, -0.175784f, -0.082109f, 0.027789f, 0.135803f, 0.222618f, 0.272015f, 0.278079f, 0.246877f, 0.190947f, 0.124821f, 0.063584f, 0.018967f, -0.005841f, -0.015723f, -0.017984f, -0.018340f, -0.020401f, -0.025556f, -0.032860f, -0.040363f, -0.046742f, -0.051655f, -0.055748f, -0.060851f, -0.069127f, -0.081442f, -0.096777f, -0.112463f, -0.123699f, -0.123450f, -0.104852f, -0.064843f, -0.005816f, 0.065155f, 0.137891f, 0.201213f, 0.245836f, 0.266654f, 0.262765f, 0.235893f, 0.188819f, 0.124475f, 0.045794f, -0.043343f, -0.136558f, -0.224279f, -0.294747f, -0.336348f, -0.340593f, -0.304985f, -0.234374f, -0.139779f, -0.035298f, 0.065161f, 0.150165f, 0.211935f, 0.246636f, 0.254039f, 0.236891f, + 0.200185f, 0.150350f, 0.094455f, 0.039464f, -0.008619f, -0.045731f, -0.070400f, -0.083602f, -0.087939f, -0.086661f, -0.082872f, -0.078985f, -0.076432f, -0.075622f, -0.076068f, -0.076524f, -0.075078f, -0.069344f, -0.056965f, -0.036414f, -0.007704f, 0.027321f, 0.065163f, 0.101267f, 0.130992f, 0.150629f, 0.157941f, 0.152138f, 0.133674f, 0.104033f, 0.065396f, 0.020338f, -0.028149f, -0.076464f, -0.120497f, -0.155961f, -0.178741f, -0.185412f, -0.174114f, -0.145315f, -0.101960f, -0.049135f, 0.006550f, 0.058125f, 0.099789f, 0.127948f, 0.141382f, 0.140988f, 0.129340f, 0.109801f, 0.085494f, 0.058877f, 0.031865f, 0.005795f, -0.018626f, -0.040919f, -0.060327f, -0.075887f, -0.086696f, -0.091841f, -0.090471f, -0.082358f, -0.068247f, -0.049554f, -0.028075f, -0.006021f, 0.014334f, 0.031377f, 0.044342f, 0.052977f, 0.057575f, 0.059084f, 0.058543f, 0.056491f, 0.053219f, 0.048980f, 0.043403f, 0.035343f, 0.023794f, 0.008214f, -0.012079f, -0.037401f, -0.066035f, -0.094144f, -0.117200f, -0.129987f, -0.126089f, -0.100443f, -0.053216f, 0.010034f, 0.080385f, 0.145063f, 0.187642f, 0.194442f, 0.161633f, 0.094675f, + 0.005067f, -0.087812f, -0.157659f, -0.183614f, -0.160959f, -0.096474f, -0.003389f, 0.088590f, 0.132728f, 0.101387f, 0.023921f, -0.034469f, -0.038942f, -0.013063f, 0.003237f, 0.001212f, -0.002961f, -0.001216f, 0.000276f, -0.001620f, -0.002467f, -0.000772f, -0.000058f, -0.001118f, -0.001152f, 0.000189f, 0.000633f, 0.000071f, 0.000304f, 0.001243f, 0.001427f, 0.001031f, 0.001189f, 0.001646f, 0.001521f, 0.001094f, 0.001029f, 0.001052f, 0.000696f, 0.000238f, 0.000016f, -0.000186f, -0.000559f, -0.000907f, -0.001097f, -0.001249f, -0.001412f, -0.001512f} + }, + { + {0.883975f, 0.742747f, 0.483914f, 0.188904f, -0.047459f, -0.209233f, -0.344855f, -0.459879f, -0.499939f, -0.451850f, -0.382284f, -0.347274f, -0.330209f, -0.301172f, -0.273988f, -0.260328f, -0.215778f, -0.082603f, 0.135261f, 0.371525f, 0.553401f, 0.638210f, 0.619076f, 0.521305f, 0.383817f, 0.230837f, 0.070028f, -0.082040f, -0.195461f, -0.256180f, -0.280452f, -0.291260f, -0.295978f, -0.293653f, -0.286459f, -0.272643f, -0.239767f, -0.175784f, -0.082109f, 0.027789f, 0.135803f, 0.222618f, 0.272015f, 0.278079f, 0.246877f, 0.190947f, 0.124821f, 0.063584f, 0.018967f, -0.005841f, -0.015723f, -0.017984f, -0.018340f, -0.020401f, -0.025556f, -0.032860f, -0.040363f, -0.046742f, -0.051655f, -0.055748f, -0.060851f, -0.069127f, -0.081442f, -0.096777f, -0.112463f, -0.123699f, -0.123450f, -0.104852f, -0.064843f, -0.005816f, 0.065155f, 0.137891f, 0.201213f, 0.245836f, 0.266654f, 0.262765f, 0.235893f, 0.188819f, 0.124475f, 0.045794f, -0.043343f, -0.136558f, -0.224279f, -0.294747f, -0.336348f, -0.340593f, -0.304985f, -0.234374f, -0.139779f, -0.035298f, 0.065161f, 0.150165f, 0.211935f, 0.246636f, 0.254039f, 0.236891f, + 0.200185f, 0.150350f, 0.094455f, 0.039464f, -0.008619f, -0.045731f, -0.070400f, -0.083602f, -0.087939f, -0.086661f, -0.082872f, -0.078985f, -0.076432f, -0.075622f, -0.076068f, -0.076524f, -0.075078f, -0.069344f, -0.056965f, -0.036414f, -0.007704f, 0.027321f, 0.065163f, 0.101267f, 0.130992f, 0.150629f, 0.157941f, 0.152138f, 0.133674f, 0.104033f, 0.065396f, 0.020338f, -0.028149f, -0.076464f, -0.120497f, -0.155961f, -0.178741f, -0.185412f, -0.174114f, -0.145315f, -0.101960f, -0.049135f, 0.006550f, 0.058125f, 0.099789f, 0.127948f, 0.141382f, 0.140988f, 0.129340f, 0.109801f, 0.085494f, 0.058877f, 0.031865f, 0.005795f, -0.018626f, -0.040919f, -0.060327f, -0.075887f, -0.086696f, -0.091841f, -0.090471f, -0.082358f, -0.068247f, -0.049554f, -0.028075f, -0.006021f, 0.014334f, 0.031377f, 0.044342f, 0.052977f, 0.057575f, 0.059084f, 0.058543f, 0.056491f, 0.053219f, 0.048980f, 0.043403f, 0.035343f, 0.023794f, 0.008214f, -0.012079f, -0.037401f, -0.066035f, -0.094144f, -0.117200f, -0.129987f, -0.126089f, -0.100443f, -0.053216f, 0.010034f, 0.080385f, 0.145063f, 0.187642f, 0.194442f, 0.161633f, 0.094675f, + 0.005067f, -0.087812f, -0.157659f, -0.183614f, -0.160959f, -0.096474f, -0.003389f, 0.088590f, 0.132728f, 0.101387f, 0.023921f, -0.034469f, -0.038942f, -0.013063f, 0.003237f, 0.001212f, -0.002961f, -0.001216f, 0.000276f, -0.001620f, -0.002467f, -0.000772f, -0.000058f, -0.001118f, -0.001152f, 0.000189f, 0.000633f, 0.000071f, 0.000304f, 0.001243f, 0.001427f, 0.001031f, 0.001189f, 0.001646f, 0.001521f, 0.001094f, 0.001029f, 0.001052f, 0.000696f, 0.000238f, 0.000016f, -0.000186f, -0.000559f, -0.000907f, -0.001097f, -0.001249f, -0.001412f, -0.001512f}, + {0.984080f, 0.970476f, 1.006906f, 1.104260f, 1.216794f, 1.335635f, 1.464294f, 1.533054f, 1.477510f, 1.373694f, 1.348288f, 1.379970f, 1.341218f, 1.215083f, 1.111544f, 1.076764f, 1.041682f, 0.966496f, 0.893479f, 0.840686f, 0.769350f, 0.677157f, 0.617786f, 0.610740f, 0.620021f, 0.628332f, 0.649967f, 0.668214f, 0.639094f, 0.564000f, 0.493341f, 0.454442f, 0.430784f, 0.411315f, 0.408973f, 0.429006f, 0.460805f, 0.502650f, 0.562459f, 0.634539f, 0.699920f, 0.747237f, 0.776345f, 0.788052f, 0.785425f, 0.779422f, 0.782268f, 0.799652f, 0.833592f, 0.884572f, 0.946592f, 1.007188f, 1.054930f, 1.082330f, 1.083817f, 1.058335f, 1.012691f, 0.956250f, 0.893651f, 0.826213f, 0.756564f, 0.687438f, 0.619177f, 0.552166f, 0.489247f, 0.433687f, 0.387315f, 0.351696f, 0.328352f, 0.317105f, 0.316219f, 0.324077f, 0.339216f, 0.359831f, 0.385071f, 0.416020f, 0.454311f, 0.500915f, 0.557014f, 0.624731f, 0.706142f, 0.802040f, 0.911693f, 1.033446f, 1.165920f, 1.308336f, 1.458725f, 1.612356f, 1.763090f, 1.904749f, 2.029174f, 2.125343f, 2.184253f, 2.203656f, 2.185203f, 2.129319f, + 2.037039f, 1.914643f, 1.771288f, 1.612832f, 1.442204f, 1.264496f, 1.086482f, 0.911185f, 0.737532f, 0.566210f, 0.402309f, 0.251448f, 0.116550f, -0.000376f, -0.096273f, -0.169242f, -0.221428f, -0.257657f, -0.281475f, -0.293927f, -0.295924f, -0.289877f, -0.278242f, -0.261940f, -0.241537f, -0.219109f, -0.197455f, -0.177735f, -0.159025f, -0.140026f, -0.120145f, -0.098893f, -0.075279f, -0.048418f, -0.018567f, 0.012653f, 0.043076f, 0.070995f, 0.095137f, 0.113713f, 0.124275f, 0.125072f, 0.115890f, 0.096669f, 0.065855f, 0.021420f, -0.036755f, -0.106849f, -0.187293f, -0.277135f, -0.373714f, -0.471889f, -0.566991f, -0.657229f, -0.741912f, -0.818969f, -0.886425f, -0.945214f, -0.997930f, -1.045205f, -1.085732f, -1.119527f, -1.148452f, -1.173231f, -1.192402f, -1.204919f, -1.211832f, -1.214558f, -1.212985f, -1.206284f, -1.194921f, -1.180840f, -1.165524f, -1.148636f, -1.129578f, -1.109786f, -1.091431f, -1.073946f, -1.054811f, -1.033994f, -1.013549f, -0.992185f, -0.965310f, -0.931378f, -0.892025f, -0.844815f, -0.783136f, -0.704366f, -0.609651f, -0.494994f, -0.352963f, -0.184110f, 0.004235f, 0.209198f, 0.428300f, 0.646026f, + 0.840500f, 0.999858f, 1.113448f, 1.155053f, 1.100378f, 0.951048f, 0.711125f, 0.363726f, -0.066699f, -0.436902f, -0.559600f, -0.399070f, -0.132866f, 0.029384f, 0.043765f, 0.007950f, -0.001756f, 0.005023f, 0.001749f, -0.004233f, -0.000749f, 0.003458f, 0.000224f, -0.002740f, 0.000175f, 0.002291f, -0.000296f, -0.001833f, 0.000392f, 0.001448f, -0.000493f, -0.001223f, 0.000422f, 0.000882f, -0.000505f, -0.000755f, 0.000403f, 0.000509f, -0.000413f, -0.000382f, 0.000355f, 0.000254f, -0.000271f, -0.000091f, 0.000266f, 0.000059f, -0.000112f, 0.000122f} + }, + { + {1.063474f, 1.043131f, 1.080672f, 1.214000f, 1.381928f, 1.505441f, 1.571766f, 1.596869f, 1.559288f, 1.443460f, 1.315432f, 1.264794f, 1.275827f, 1.246689f, 1.147952f, 1.067945f, 1.069330f, 1.093255f, 1.060696f, 0.991275f, 0.952308f, 0.947628f, 0.931450f, 0.896088f, 0.875184f, 0.877635f, 0.877306f, 0.862455f, 0.851114f, 0.858664f, 0.880945f, 0.907411f, 0.929244f, 0.938406f, 0.935115f, 0.932668f, 0.945105f, 0.975372f, 1.020051f, 1.076159f, 1.138482f, 1.199314f, 1.255133f, 1.306848f, 1.352586f, 1.387511f, 1.411062f, 1.428044f, 1.442949f, 1.457837f, 1.473867f, 1.490422f, 1.504141f, 1.511326f, 1.509565f, 1.496836f, 1.472407f, 1.438435f, 1.397187f, 1.347911f, 1.289991f, 1.226763f, 1.162058f, 1.095742f, 1.026740f, 0.957251f, 0.889862f, 0.823884f, 0.758601f, 0.697267f, 0.644668f, 0.603523f, 0.575533f, 0.562861f, 0.566399f, 0.584922f, 0.616971f, 0.661507f, 0.716950f, 0.782071f, 0.857272f, 0.942702f, 1.036381f, 1.136549f, 1.244199f, 1.360630f, 1.484022f, 1.610883f, 1.739254f, 1.867675f, 1.991785f, 2.104459f, 2.199314f, 2.272351f, 2.319839f, 2.336536f, + 2.318055f, 2.264616f, 2.180165f, 2.067426f, 1.926830f, 1.761394f, 1.578694f, 1.385256f, 1.182714f, 0.972923f, 0.762994f, 0.560921f, 0.369676f, 0.190476f, 0.028730f, -0.108777f, -0.220619f, -0.309841f, -0.378087f, -0.425236f, -0.453644f, -0.468415f, -0.473457f, -0.470028f, -0.459061f, -0.442865f, -0.424328f, -0.405395f, -0.386539f, -0.367682f, -0.349391f, -0.332184f, -0.314542f, -0.293369f, -0.267138f, -0.236981f, -0.204194f, -0.168837f, -0.131697f, -0.095649f, -0.064007f, -0.038874f, -0.021740f, -0.014608f, -0.020128f, -0.040959f, -0.078587f, -0.132851f, -0.203536f, -0.291705f, -0.397394f, -0.516941f, -0.645343f, -0.780070f, -0.919041f, -1.056337f, -1.184558f, -1.300520f, -1.404186f, -1.493222f, -1.563734f, -1.615600f, -1.652081f, -1.674537f, -1.681849f, -1.674638f, -1.656140f, -1.629030f, -1.594189f, -1.552486f, -1.506033f, -1.457814f, -1.410294f, -1.363968f, -1.318341f, -1.274920f, -1.236490f, -1.202485f, -1.169363f, -1.136833f, -1.107851f, -1.080975f, -1.050211f, -1.014006f, -0.975256f, -0.930779f, -0.871463f, -0.793938f, -0.699614f, -0.581833f, -0.428980f, -0.240611f, -0.024812f, 0.217463f, 0.485342f, 0.758970f, + 1.009742f, 1.222711f, 1.383022f, 1.452948f, 1.397393f, 1.216786f, 0.913966f, 0.463363f, -0.102253f, -0.587837f, -0.741210f, -0.518203f, -0.161231f, 0.049607f, 0.061391f, 0.009945f, -0.002758f, 0.007110f, 0.002413f, -0.005996f, -0.001010f, 0.004903f, 0.000261f, -0.003925f, 0.000280f, 0.003284f, -0.000470f, -0.002645f, 0.000624f, 0.002115f, -0.000763f, -0.001772f, 0.000700f, 0.001304f, -0.000805f, -0.001090f, 0.000689f, 0.000741f, -0.000698f, -0.000535f, 0.000618f, 0.000330f, -0.000506f, -0.000092f, 0.000475f, 0.000007f, -0.000267f, 0.000243f}, + {0.905512f, 0.678641f, 0.311373f, -0.074151f, -0.391473f, -0.617374f, -0.746262f, -0.740996f, -0.564331f, -0.254460f, 0.070978f, 0.303423f, 0.417282f, 0.449447f, 0.432211f, 0.367816f, 0.255977f, 0.119310f, -0.009037f, -0.114250f, -0.203912f, -0.281083f, -0.325135f, -0.311110f, -0.241931f, -0.146174f, -0.046109f, 0.054859f, 0.151966f, 0.226035f, 0.259397f, 0.251854f, 0.213115f, 0.150155f, 0.069211f, -0.018634f, -0.100791f, -0.166658f, -0.205638f, -0.209754f, -0.181909f, -0.135245f, -0.081451f, -0.024331f, 0.034856f, 0.091963f, 0.141052f, 0.175632f, 0.187911f, 0.171589f, 0.127151f, 0.062454f, -0.011149f, -0.081170f, -0.135073f, -0.163849f, -0.165675f, -0.145034f, -0.109098f, -0.065479f, -0.020785f, 0.021411f, 0.060865f, 0.097933f, 0.130852f, 0.155355f, 0.165308f, 0.153592f, 0.114488f, 0.047274f, -0.041250f, -0.136303f, -0.216742f, -0.259900f, -0.249627f, -0.183769f, -0.076421f, 0.046233f, 0.154456f, 0.224564f, 0.245543f, 0.219702f, 0.158367f, 0.076598f, -0.010361f, -0.088906f, -0.147863f, -0.178885f, -0.177527f, -0.145152f, -0.089784f, -0.024237f, 0.037621f, 0.084404f, 0.109576f, 0.112370f, + 0.096930f, 0.070039f, 0.038778f, 0.009027f, -0.015303f, -0.032497f, -0.042624f, -0.046771f, -0.046440f, -0.043125f, -0.037867f, -0.031014f, -0.022391f, -0.011633f, 0.001488f, 0.016579f, 0.032114f, 0.045463f, 0.053594f, 0.054013f, 0.045545f, 0.028883f, 0.006695f, -0.016938f, -0.037553f, -0.051342f, -0.055978f, -0.051160f, -0.038603f, -0.021347f, -0.002781f, 0.014142f, 0.027341f, 0.035751f, 0.039167f, 0.037897f, 0.032496f, 0.023714f, 0.012505f, 0.000000f, -0.012486f, -0.023459f, -0.031401f, -0.035090f, -0.033864f, -0.027773f, -0.017676f, -0.005222f, 0.007471f, 0.018343f, 0.025831f, 0.029082f, 0.028059f, 0.023474f, 0.016464f, 0.008192f, -0.000309f, -0.008120f, -0.014522f, -0.019089f, -0.021594f, -0.021867f, -0.019862f, -0.015729f, -0.009742f, -0.002298f, 0.005904f, 0.013865f, 0.020516f, 0.024843f, 0.025909f, 0.023153f, 0.016760f, 0.007563f, -0.003225f, -0.014006f, -0.022916f, -0.028476f, -0.029983f, -0.027181f, -0.020128f, -0.009670f, 0.002656f, 0.015448f, 0.027375f, 0.036285f, 0.039574f, 0.035702f, 0.024364f, 0.005813f, -0.017861f, -0.040900f, -0.055655f, -0.056646f, -0.041947f, -0.012939f, + 0.023511f, 0.054222f, 0.066227f, 0.054969f, 0.024437f, -0.016387f, -0.051673f, -0.060245f, -0.033060f, 0.009957f, 0.033887f, 0.024885f, 0.002528f, -0.007913f, -0.003871f, 0.001012f, 0.000170f, -0.001482f, -0.000477f, 0.000417f, -0.000514f, -0.001048f, -0.000134f, 0.000401f, -0.000132f, -0.000249f, 0.000462f, 0.000732f, 0.000295f, 0.000193f, 0.000558f, 0.000516f, 0.000036f, -0.000136f, -0.000008f, -0.000166f, -0.000521f, -0.000566f, -0.000402f, -0.000420f, -0.000486f, -0.000304f, -0.000043f, 0.000060f, 0.000153f, 0.000366f, 0.000506f, 0.000491f} + }, + { + {0.905512f, 0.678641f, 0.311373f, -0.074151f, -0.391473f, -0.617374f, -0.746262f, -0.740996f, -0.564331f, -0.254460f, 0.070978f, 0.303423f, 0.417282f, 0.449447f, 0.432211f, 0.367816f, 0.255977f, 0.119310f, -0.009037f, -0.114250f, -0.203912f, -0.281083f, -0.325135f, -0.311110f, -0.241931f, -0.146174f, -0.046109f, 0.054859f, 0.151966f, 0.226035f, 0.259397f, 0.251854f, 0.213115f, 0.150155f, 0.069211f, -0.018634f, -0.100791f, -0.166658f, -0.205638f, -0.209754f, -0.181909f, -0.135245f, -0.081451f, -0.024331f, 0.034856f, 0.091963f, 0.141052f, 0.175632f, 0.187911f, 0.171589f, 0.127151f, 0.062454f, -0.011149f, -0.081170f, -0.135073f, -0.163849f, -0.165675f, -0.145034f, -0.109098f, -0.065479f, -0.020785f, 0.021411f, 0.060865f, 0.097933f, 0.130852f, 0.155355f, 0.165308f, 0.153592f, 0.114488f, 0.047274f, -0.041250f, -0.136303f, -0.216742f, -0.259900f, -0.249627f, -0.183769f, -0.076421f, 0.046233f, 0.154456f, 0.224564f, 0.245543f, 0.219702f, 0.158367f, 0.076598f, -0.010361f, -0.088906f, -0.147863f, -0.178885f, -0.177527f, -0.145152f, -0.089784f, -0.024237f, 0.037621f, 0.084404f, 0.109576f, 0.112370f, + 0.096930f, 0.070039f, 0.038778f, 0.009027f, -0.015303f, -0.032497f, -0.042624f, -0.046771f, -0.046440f, -0.043125f, -0.037867f, -0.031014f, -0.022391f, -0.011633f, 0.001488f, 0.016579f, 0.032114f, 0.045463f, 0.053594f, 0.054013f, 0.045545f, 0.028883f, 0.006695f, -0.016938f, -0.037553f, -0.051342f, -0.055978f, -0.051160f, -0.038603f, -0.021347f, -0.002781f, 0.014142f, 0.027341f, 0.035751f, 0.039167f, 0.037897f, 0.032496f, 0.023714f, 0.012505f, 0.000000f, -0.012486f, -0.023459f, -0.031401f, -0.035090f, -0.033864f, -0.027773f, -0.017676f, -0.005222f, 0.007471f, 0.018343f, 0.025831f, 0.029082f, 0.028059f, 0.023474f, 0.016464f, 0.008192f, -0.000309f, -0.008120f, -0.014522f, -0.019089f, -0.021594f, -0.021867f, -0.019862f, -0.015729f, -0.009742f, -0.002298f, 0.005904f, 0.013865f, 0.020516f, 0.024843f, 0.025909f, 0.023153f, 0.016760f, 0.007563f, -0.003225f, -0.014006f, -0.022916f, -0.028476f, -0.029983f, -0.027181f, -0.020128f, -0.009670f, 0.002656f, 0.015448f, 0.027375f, 0.036285f, 0.039574f, 0.035702f, 0.024364f, 0.005813f, -0.017861f, -0.040900f, -0.055655f, -0.056646f, -0.041947f, -0.012939f, + 0.023511f, 0.054222f, 0.066227f, 0.054969f, 0.024437f, -0.016387f, -0.051673f, -0.060245f, -0.033060f, 0.009957f, 0.033887f, 0.024885f, 0.002528f, -0.007913f, -0.003871f, 0.001012f, 0.000170f, -0.001482f, -0.000477f, 0.000417f, -0.000514f, -0.001048f, -0.000134f, 0.000401f, -0.000132f, -0.000249f, 0.000462f, 0.000732f, 0.000295f, 0.000193f, 0.000558f, 0.000516f, 0.000036f, -0.000136f, -0.000008f, -0.000166f, -0.000521f, -0.000566f, -0.000402f, -0.000420f, -0.000486f, -0.000304f, -0.000043f, 0.000060f, 0.000153f, 0.000366f, 0.000506f, 0.000491f}, + {1.063474f, 1.043131f, 1.080672f, 1.214000f, 1.381928f, 1.505441f, 1.571766f, 1.596869f, 1.559288f, 1.443460f, 1.315432f, 1.264794f, 1.275827f, 1.246689f, 1.147952f, 1.067945f, 1.069330f, 1.093255f, 1.060696f, 0.991275f, 0.952308f, 0.947628f, 0.931450f, 0.896088f, 0.875184f, 0.877635f, 0.877306f, 0.862455f, 0.851114f, 0.858664f, 0.880945f, 0.907411f, 0.929244f, 0.938406f, 0.935115f, 0.932668f, 0.945105f, 0.975372f, 1.020051f, 1.076159f, 1.138482f, 1.199314f, 1.255133f, 1.306848f, 1.352586f, 1.387511f, 1.411062f, 1.428044f, 1.442949f, 1.457837f, 1.473867f, 1.490422f, 1.504141f, 1.511326f, 1.509565f, 1.496836f, 1.472407f, 1.438435f, 1.397187f, 1.347911f, 1.289991f, 1.226763f, 1.162058f, 1.095742f, 1.026740f, 0.957251f, 0.889862f, 0.823884f, 0.758601f, 0.697267f, 0.644668f, 0.603523f, 0.575533f, 0.562861f, 0.566399f, 0.584922f, 0.616971f, 0.661507f, 0.716950f, 0.782071f, 0.857272f, 0.942702f, 1.036381f, 1.136549f, 1.244199f, 1.360630f, 1.484022f, 1.610883f, 1.739254f, 1.867675f, 1.991785f, 2.104459f, 2.199314f, 2.272351f, 2.319839f, 2.336536f, + 2.318055f, 2.264616f, 2.180165f, 2.067426f, 1.926830f, 1.761394f, 1.578694f, 1.385256f, 1.182714f, 0.972923f, 0.762994f, 0.560921f, 0.369676f, 0.190476f, 0.028730f, -0.108777f, -0.220619f, -0.309841f, -0.378087f, -0.425236f, -0.453644f, -0.468415f, -0.473457f, -0.470028f, -0.459061f, -0.442865f, -0.424328f, -0.405395f, -0.386539f, -0.367682f, -0.349391f, -0.332184f, -0.314542f, -0.293369f, -0.267138f, -0.236981f, -0.204194f, -0.168837f, -0.131697f, -0.095649f, -0.064007f, -0.038874f, -0.021740f, -0.014608f, -0.020128f, -0.040959f, -0.078587f, -0.132851f, -0.203536f, -0.291705f, -0.397394f, -0.516941f, -0.645343f, -0.780070f, -0.919041f, -1.056337f, -1.184558f, -1.300520f, -1.404186f, -1.493222f, -1.563734f, -1.615600f, -1.652081f, -1.674537f, -1.681849f, -1.674638f, -1.656140f, -1.629030f, -1.594189f, -1.552486f, -1.506033f, -1.457814f, -1.410294f, -1.363968f, -1.318341f, -1.274920f, -1.236490f, -1.202485f, -1.169363f, -1.136833f, -1.107851f, -1.080975f, -1.050211f, -1.014006f, -0.975256f, -0.930779f, -0.871463f, -0.793938f, -0.699614f, -0.581833f, -0.428980f, -0.240611f, -0.024812f, 0.217463f, 0.485342f, 0.758970f, + 1.009742f, 1.222711f, 1.383022f, 1.452948f, 1.397393f, 1.216786f, 0.913966f, 0.463363f, -0.102253f, -0.587837f, -0.741210f, -0.518203f, -0.161231f, 0.049607f, 0.061391f, 0.009945f, -0.002758f, 0.007110f, 0.002413f, -0.005996f, -0.001010f, 0.004903f, 0.000261f, -0.003925f, 0.000280f, 0.003284f, -0.000470f, -0.002645f, 0.000624f, 0.002115f, -0.000763f, -0.001772f, 0.000700f, 0.001304f, -0.000805f, -0.001090f, 0.000689f, 0.000741f, -0.000698f, -0.000535f, 0.000618f, 0.000330f, -0.000506f, -0.000092f, 0.000475f, 0.000007f, -0.000267f, 0.000243f} + }, + { + {1.090612f, 1.124607f, 1.168203f, 1.251890f, 1.418329f, 1.597546f, 1.655179f, 1.582145f, 1.504210f, 1.475289f, 1.403668f, 1.239120f, 1.093260f, 1.081569f, 1.155447f, 1.196594f, 1.194813f, 1.219751f, 1.274331f, 1.294266f, 1.269910f, 1.263313f, 1.300588f, 1.329007f, 1.297460f, 1.221672f, 1.152041f, 1.117220f, 1.113599f, 1.121528f, 1.121547f, 1.114494f, 1.129257f, 1.193632f, 1.297545f, 1.400895f, 1.475605f, 1.523950f, 1.558278f, 1.581891f, 1.594396f, 1.602121f, 1.615403f, 1.640470f, 1.677097f, 1.720927f, 1.766581f, 1.810296f, 1.849698f, 1.880635f, 1.896590f, 1.893026f, 1.870641f, 1.833225f, 1.784630f, 1.729383f, 1.673762f, 1.623245f, 1.579086f, 1.538579f, 1.497829f, 1.452657f, 1.397429f, 1.325606f, 1.233180f, 1.121272f, 0.995053f, 0.861250f, 0.727628f, 0.603189f, 0.495955f, 0.409941f, 0.345638f, 0.303340f, 0.284212f, 0.287909f, 0.311238f, 0.350209f, 0.402431f, 0.467015f, 0.543153f, 0.629394f, 0.723639f, 0.823272f, 0.925269f, 1.026136f, 1.122298f, 1.211920f, 1.296779f, 1.380918f, 1.466626f, 1.552846f, 1.637734f, 1.720181f, 1.796938f, 1.860399f, + 1.901996f, 1.916706f, 1.901778f, 1.852697f, 1.764610f, 1.638066f, 1.479859f, 1.297511f, 1.096512f, 0.884132f, 0.671480f, 0.468197f, 0.277415f, 0.098866f, -0.065566f, -0.213245f, -0.345768f, -0.467783f, -0.580825f, -0.682112f, -0.769567f, -0.844138f, -0.906188f, -0.953219f, -0.983275f, -0.998322f, -1.002195f, -0.996823f, -0.982433f, -0.960340f, -0.933166f, -0.902260f, -0.866678f, -0.825449f, -0.779784f, -0.732273f, -0.684647f, -0.637476f, -0.591811f, -0.549903f, -0.513900f, -0.484651f, -0.462485f, -0.448846f, -0.446501f, -0.458060f, -0.484778f, -0.527243f, -0.586726f, -0.664534f, -0.759541f, -0.867568f, -0.984007f, -1.105517f, -1.227820f, -1.343849f, -1.446666f, -1.533071f, -1.601920f, -1.650494f, -1.675782f, -1.678279f, -1.660970f, -1.625102f, -1.570297f, -1.498421f, -1.413974f, -1.320639f, -1.220302f, -1.115550f, -1.010636f, -0.909518f, -0.814469f, -0.726777f, -0.647886f, -0.579631f, -0.523222f, -0.477897f, -0.441703f, -0.414045f, -0.395476f, -0.384365f, -0.376980f, -0.371994f, -0.370648f, -0.371074f, -0.367650f, -0.357359f, -0.340112f, -0.311253f, -0.261890f, -0.188496f, -0.093373f, 0.024718f, 0.168335f, 0.328881f, + 0.489510f, 0.639645f, 0.770221f, 0.857680f, 0.874965f, 0.814834f, 0.675130f, 0.433231f, 0.090010f, -0.252149f, -0.424257f, -0.353241f, -0.152103f, -0.001328f, 0.031000f, 0.007695f, -0.002042f, 0.003578f, 0.002256f, -0.003204f, -0.001309f, 0.002742f, 0.000775f, -0.002211f, -0.000307f, 0.001911f, 0.000119f, -0.001567f, 0.000027f, 0.001244f, -0.000202f, -0.001092f, 0.000170f, 0.000778f, -0.000312f, -0.000692f, 0.000244f, 0.000463f, -0.000292f, -0.000352f, 0.000267f, 0.000241f, -0.000201f, -0.000080f, 0.000227f, 0.000070f, -0.000076f, 0.000114f}, + {0.917276f, 0.651543f, 0.241263f, -0.179200f, -0.536810f, -0.786529f, -0.861095f, -0.706896f, -0.361415f, 0.046576f, 0.387107f, 0.602460f, 0.691808f, 0.656249f, 0.487165f, 0.202283f, -0.131443f, -0.423124f, -0.603354f, -0.645005f, -0.551682f, -0.342497f, -0.055403f, 0.244110f, 0.476519f, 0.583184f, 0.550153f, 0.400664f, 0.174562f, -0.080033f, -0.307236f, -0.454647f, -0.492004f, -0.418390f, -0.256044f, -0.044660f, 0.162619f, 0.313362f, 0.377265f, 0.354834f, 0.266128f, 0.135954f, -0.009977f, -0.143596f, -0.238634f, -0.278506f, -0.259780f, -0.190547f, -0.088270f, 0.022745f, 0.117338f, 0.177563f, 0.197090f, 0.179340f, 0.132881f, 0.068619f, -0.001036f, -0.063710f, -0.109881f, -0.134545f, -0.136594f, -0.117710f, -0.082176f, -0.036408f, 0.012762f, 0.059536f, 0.098989f, 0.126240f, 0.136203f, 0.123860f, 0.085609f, 0.022846f, -0.054001f, -0.125717f, -0.170830f, -0.174541f, -0.134647f, -0.062373f, 0.021510f, 0.094181f, 0.139095f, 0.150662f, 0.132927f, 0.094500f, 0.044027f, -0.011484f, -0.065806f, -0.111701f, -0.140080f, -0.141689f, -0.111311f, -0.052311f, 0.021787f, 0.090808f, 0.135451f, 0.144793f, + 0.119617f, 0.070364f, 0.011865f, -0.041957f, -0.081346f, -0.101583f, -0.102258f, -0.086016f, -0.057310f, -0.021283f, 0.016947f, 0.052401f, 0.080081f, 0.095197f, 0.093880f, 0.074223f, 0.037586f, -0.010223f, -0.059028f, -0.096507f, -0.111982f, -0.100221f, -0.063756f, -0.012589f, 0.039076f, 0.077825f, 0.095266f, 0.089753f, 0.065616f, 0.030843f, -0.005738f, -0.036776f, -0.057529f, -0.065952f, -0.062341f, -0.048736f, -0.028162f, -0.004067f, 0.019866f, 0.039922f, 0.052856f, 0.056438f, 0.049836f, 0.033935f, 0.011469f, -0.013398f, -0.035916f, -0.051598f, -0.057074f, -0.050971f, -0.034395f, -0.010676f, 0.015312f, 0.037984f, 0.052292f, 0.055175f, 0.046354f, 0.028123f, 0.004662f, -0.018844f, -0.037452f, -0.047700f, -0.048091f, -0.039003f, -0.022561f, -0.002299f, 0.017721f, 0.033814f, 0.043099f, 0.043847f, 0.035955f, 0.020985f, 0.001707f, -0.018215f, -0.034574f, -0.043678f, -0.043517f, -0.034017f, -0.016874f, 0.004283f, 0.024420f, 0.038946f, 0.045076f, 0.041570f, 0.028591f, 0.008573f, -0.013985f, -0.034323f, -0.048076f, -0.050638f, -0.038773f, -0.014129f, 0.016384f, 0.043822f, 0.059238f, 0.054834f, + 0.028889f, -0.009231f, -0.043019f, -0.058834f, -0.050365f, -0.018436f, 0.024349f, 0.051843f, 0.042557f, 0.005228f, -0.025317f, -0.025348f, -0.006082f, 0.006509f, 0.004601f, -0.000170f, 0.000455f, 0.002497f, 0.001552f, 0.000003f, 0.000353f, 0.000671f, -0.000593f, -0.001643f, -0.001255f, -0.000846f, -0.001219f, -0.001146f, -0.000127f, 0.000663f, 0.000752f, 0.000985f, 0.001528f, 0.001552f, 0.000946f, 0.000436f, 0.000126f, -0.000453f, -0.001159f, -0.001450f, -0.001371f, -0.001268f, -0.001021f, -0.000425f, 0.000257f, 0.000753f, 0.001163f, 0.001494f} + }, + { + {0.917276f, 0.651543f, 0.241263f, -0.179200f, -0.536810f, -0.786529f, -0.861095f, -0.706896f, -0.361415f, 0.046576f, 0.387107f, 0.602460f, 0.691808f, 0.656249f, 0.487165f, 0.202283f, -0.131443f, -0.423124f, -0.603354f, -0.645005f, -0.551682f, -0.342497f, -0.055403f, 0.244110f, 0.476519f, 0.583184f, 0.550153f, 0.400664f, 0.174562f, -0.080033f, -0.307236f, -0.454647f, -0.492004f, -0.418390f, -0.256044f, -0.044660f, 0.162619f, 0.313362f, 0.377265f, 0.354834f, 0.266128f, 0.135954f, -0.009977f, -0.143596f, -0.238634f, -0.278506f, -0.259780f, -0.190547f, -0.088270f, 0.022745f, 0.117338f, 0.177563f, 0.197090f, 0.179340f, 0.132881f, 0.068619f, -0.001036f, -0.063710f, -0.109881f, -0.134545f, -0.136594f, -0.117710f, -0.082176f, -0.036408f, 0.012762f, 0.059536f, 0.098989f, 0.126240f, 0.136203f, 0.123860f, 0.085609f, 0.022846f, -0.054001f, -0.125717f, -0.170830f, -0.174541f, -0.134647f, -0.062373f, 0.021510f, 0.094181f, 0.139095f, 0.150662f, 0.132927f, 0.094500f, 0.044027f, -0.011484f, -0.065806f, -0.111701f, -0.140080f, -0.141689f, -0.111311f, -0.052311f, 0.021787f, 0.090808f, 0.135451f, 0.144793f, + 0.119617f, 0.070364f, 0.011865f, -0.041957f, -0.081346f, -0.101583f, -0.102258f, -0.086016f, -0.057310f, -0.021283f, 0.016947f, 0.052401f, 0.080081f, 0.095197f, 0.093880f, 0.074223f, 0.037586f, -0.010223f, -0.059028f, -0.096507f, -0.111982f, -0.100221f, -0.063756f, -0.012589f, 0.039076f, 0.077825f, 0.095266f, 0.089753f, 0.065616f, 0.030843f, -0.005738f, -0.036776f, -0.057529f, -0.065952f, -0.062341f, -0.048736f, -0.028162f, -0.004067f, 0.019866f, 0.039922f, 0.052856f, 0.056438f, 0.049836f, 0.033935f, 0.011469f, -0.013398f, -0.035916f, -0.051598f, -0.057074f, -0.050971f, -0.034395f, -0.010676f, 0.015312f, 0.037984f, 0.052292f, 0.055175f, 0.046354f, 0.028123f, 0.004662f, -0.018844f, -0.037452f, -0.047700f, -0.048091f, -0.039003f, -0.022561f, -0.002299f, 0.017721f, 0.033814f, 0.043099f, 0.043847f, 0.035955f, 0.020985f, 0.001707f, -0.018215f, -0.034574f, -0.043678f, -0.043517f, -0.034017f, -0.016874f, 0.004283f, 0.024420f, 0.038946f, 0.045076f, 0.041570f, 0.028591f, 0.008573f, -0.013985f, -0.034323f, -0.048076f, -0.050638f, -0.038773f, -0.014129f, 0.016384f, 0.043822f, 0.059238f, 0.054834f, + 0.028889f, -0.009231f, -0.043019f, -0.058834f, -0.050365f, -0.018436f, 0.024349f, 0.051843f, 0.042557f, 0.005228f, -0.025317f, -0.025348f, -0.006082f, 0.006509f, 0.004601f, -0.000170f, 0.000455f, 0.002497f, 0.001552f, 0.000003f, 0.000353f, 0.000671f, -0.000593f, -0.001643f, -0.001255f, -0.000846f, -0.001219f, -0.001146f, -0.000127f, 0.000663f, 0.000752f, 0.000985f, 0.001528f, 0.001552f, 0.000946f, 0.000436f, 0.000126f, -0.000453f, -0.001159f, -0.001450f, -0.001371f, -0.001268f, -0.001021f, -0.000425f, 0.000257f, 0.000753f, 0.001163f, 0.001494f}, + {1.090612f, 1.124607f, 1.168203f, 1.251890f, 1.418329f, 1.597546f, 1.655179f, 1.582145f, 1.504210f, 1.475289f, 1.403668f, 1.239120f, 1.093260f, 1.081569f, 1.155447f, 1.196594f, 1.194813f, 1.219751f, 1.274331f, 1.294266f, 1.269910f, 1.263313f, 1.300588f, 1.329007f, 1.297460f, 1.221672f, 1.152041f, 1.117220f, 1.113599f, 1.121528f, 1.121547f, 1.114494f, 1.129257f, 1.193632f, 1.297545f, 1.400895f, 1.475605f, 1.523950f, 1.558278f, 1.581891f, 1.594396f, 1.602121f, 1.615403f, 1.640470f, 1.677097f, 1.720927f, 1.766581f, 1.810296f, 1.849698f, 1.880635f, 1.896590f, 1.893026f, 1.870641f, 1.833225f, 1.784630f, 1.729383f, 1.673762f, 1.623245f, 1.579086f, 1.538579f, 1.497829f, 1.452657f, 1.397429f, 1.325606f, 1.233180f, 1.121272f, 0.995053f, 0.861250f, 0.727628f, 0.603189f, 0.495955f, 0.409941f, 0.345638f, 0.303340f, 0.284212f, 0.287909f, 0.311238f, 0.350209f, 0.402431f, 0.467015f, 0.543153f, 0.629394f, 0.723639f, 0.823272f, 0.925269f, 1.026136f, 1.122298f, 1.211920f, 1.296779f, 1.380918f, 1.466626f, 1.552846f, 1.637734f, 1.720181f, 1.796938f, 1.860399f, + 1.901996f, 1.916706f, 1.901778f, 1.852697f, 1.764610f, 1.638066f, 1.479859f, 1.297511f, 1.096512f, 0.884132f, 0.671480f, 0.468197f, 0.277415f, 0.098866f, -0.065566f, -0.213245f, -0.345768f, -0.467783f, -0.580825f, -0.682112f, -0.769567f, -0.844138f, -0.906188f, -0.953219f, -0.983275f, -0.998322f, -1.002195f, -0.996823f, -0.982433f, -0.960340f, -0.933166f, -0.902260f, -0.866678f, -0.825449f, -0.779784f, -0.732273f, -0.684647f, -0.637476f, -0.591811f, -0.549903f, -0.513900f, -0.484651f, -0.462485f, -0.448846f, -0.446501f, -0.458060f, -0.484778f, -0.527243f, -0.586726f, -0.664534f, -0.759541f, -0.867568f, -0.984007f, -1.105517f, -1.227820f, -1.343849f, -1.446666f, -1.533071f, -1.601920f, -1.650494f, -1.675782f, -1.678279f, -1.660970f, -1.625102f, -1.570297f, -1.498421f, -1.413974f, -1.320639f, -1.220302f, -1.115550f, -1.010636f, -0.909518f, -0.814469f, -0.726777f, -0.647886f, -0.579631f, -0.523222f, -0.477897f, -0.441703f, -0.414045f, -0.395476f, -0.384365f, -0.376980f, -0.371994f, -0.370648f, -0.371074f, -0.367650f, -0.357359f, -0.340112f, -0.311253f, -0.261890f, -0.188496f, -0.093373f, 0.024718f, 0.168335f, 0.328881f, + 0.489510f, 0.639645f, 0.770221f, 0.857680f, 0.874965f, 0.814834f, 0.675130f, 0.433231f, 0.090010f, -0.252149f, -0.424257f, -0.353241f, -0.152103f, -0.001328f, 0.031000f, 0.007695f, -0.002042f, 0.003578f, 0.002256f, -0.003204f, -0.001309f, 0.002742f, 0.000775f, -0.002211f, -0.000307f, 0.001911f, 0.000119f, -0.001567f, 0.000027f, 0.001244f, -0.000202f, -0.001092f, 0.000170f, 0.000778f, -0.000312f, -0.000692f, 0.000244f, 0.000463f, -0.000292f, -0.000352f, 0.000267f, 0.000241f, -0.000201f, -0.000080f, 0.000227f, 0.000070f, -0.000076f, 0.000114f} + }, + { + {1.112397f, 1.111335f, 1.098541f, 1.066221f, 1.017869f, 0.956090f, 0.875304f, 0.794051f, 0.783469f, 0.912714f, 1.154418f, 1.390208f, 1.523919f, 1.546110f, 1.485727f, 1.366225f, 1.230008f, 1.138792f, 1.115300f, 1.133121f, 1.181544f, 1.281430f, 1.418100f, 1.522549f, 1.547535f, 1.511683f, 1.451956f, 1.387778f, 1.346726f, 1.365986f, 1.445028f, 1.543010f, 1.636980f, 1.737911f, 1.841344f, 1.911123f, 1.925970f, 1.902958f, 1.864891f, 1.818149f, 1.768283f, 1.725885f, 1.690633f, 1.652687f, 1.611399f, 1.574846f, 1.545035f, 1.519441f, 1.500076f, 1.487021f, 1.471806f, 1.449320f, 1.426872f, 1.411941f, 1.401090f, 1.388324f, 1.373527f, 1.356198f, 1.331235f, 1.296699f, 1.257813f, 1.219852f, 1.183552f, 1.148414f, 1.114230f, 1.078765f, 1.038071f, 0.988570f, 0.927224f, 0.852801f, 0.768254f, 0.678135f, 0.583726f, 0.485145f, 0.386694f, 0.294105f, 0.207911f, 0.125603f, 0.048642f, -0.018544f, -0.074526f, -0.120226f, -0.154508f, -0.175796f, -0.186470f, -0.191357f, -0.193244f, -0.192820f, -0.191313f, -0.190742f, -0.192655f, -0.197592f, -0.204686f, -0.211940f, -0.218191f, -0.223996f, + -0.229614f, -0.234043f, -0.237357f, -0.241595f, -0.247842f, -0.254765f, -0.261227f, -0.267732f, -0.274126f, -0.278339f, -0.278541f, -0.274550f, -0.266501f, -0.253999f, -0.237013f, -0.216199f, -0.192291f, -0.166066f, -0.138455f, -0.109952f, -0.080598f, -0.050885f, -0.021663f, 0.007056f, 0.036069f, 0.065697f, 0.095709f, 0.126372f, 0.158482f, 0.192519f, 0.228577f, 0.266713f, 0.306680f, 0.347771f, 0.389146f, 0.429545f, 0.466699f, 0.498178f, 0.522837f, 0.540306f, 0.549440f, 0.548884f, 0.538969f, 0.521289f, 0.496435f, 0.463906f, 0.424432f, 0.380495f, 0.333949f, 0.284714f, 0.232690f, 0.179455f, 0.126660f, 0.073750f, 0.018927f, -0.038141f, -0.096401f, -0.156100f, -0.219366f, -0.287580f, -0.359934f, -0.435593f, -0.515692f, -0.601760f, -0.693176f, -0.787894f, -0.885348f, -0.986812f, -1.092377f, -1.199339f, -1.304999f, -1.409414f, -1.512886f, -1.612037f, -1.701983f, -1.781517f, -1.851454f, -1.908356f, -1.945802f, -1.961831f, -1.958173f, -1.932021f, -1.876786f, -1.791263f, -1.678747f, -1.537128f, -1.360504f, -1.150068f, -0.911518f, -0.643518f, -0.342730f, -0.017884f, 0.315739f, 0.650088f, 0.975129f, 1.264156f, + 1.488607f, 1.636372f, 1.693967f, 1.630407f, 1.428523f, 1.107711f, 0.682977f, 0.150519f, -0.414826f, -0.794658f, -0.785457f, -0.443271f, -0.068780f, 0.093541f, 0.063908f, 0.005868f, -0.000970f, 0.007761f, 0.000201f, -0.006097f, 0.000758f, 0.004704f, -0.001139f, -0.003615f, 0.001333f, 0.002891f, -0.001274f, -0.002236f, 0.001223f, 0.001737f, -0.001161f, -0.001399f, 0.000983f, 0.001007f, -0.000943f, -0.000823f, 0.000756f, 0.000549f, -0.000686f, -0.000398f, 0.000560f, 0.000246f, -0.000432f, -0.000077f, 0.000374f, 0.000016f, -0.000200f, 0.000171f}, + {1.079532f, 0.998235f, 0.850285f, 0.632018f, 0.357346f, 0.123599f, 0.061032f, 0.193395f, 0.396567f, 0.503127f, 0.416351f, 0.150118f, -0.179415f, -0.415063f, -0.477564f, -0.429570f, -0.389527f, -0.407796f, -0.468131f, -0.564318f, -0.698134f, -0.821601f, -0.860464f, -0.802613f, -0.711179f, -0.646626f, -0.616838f, -0.600835f, -0.578635f, -0.531502f, -0.444474f, -0.319603f, -0.174456f, -0.029034f, 0.098083f, 0.192379f, 0.255844f, 0.309193f, 0.371530f, 0.443415f, 0.513712f, 0.573199f, 0.617309f, 0.645288f, 0.661423f, 0.670890f, 0.673012f, 0.663713f, 0.642750f, 0.612720f, 0.573583f, 0.523581f, 0.462385f, 0.389021f, 0.300903f, 0.198899f, 0.089326f, -0.021841f, -0.132388f, -0.239961f, -0.339980f, -0.429136f, -0.506573f, -0.570849f, -0.620035f, -0.654986f, -0.678245f, -0.689440f, -0.685055f, -0.662509f, -0.621947f, -0.565149f, -0.495302f, -0.416936f, -0.333854f, -0.247460f, -0.158080f, -0.067051f, 0.023100f, 0.109595f, 0.190031f, 0.262592f, 0.325631f, 0.377009f, 0.414640f, 0.437919f, 0.447796f, 0.445623f, 0.433020f, 0.412348f, 0.385712f, 0.353870f, 0.317429f, 0.278358f, 0.238872f, 0.199766f, + 0.161294f, 0.124650f, 0.091143f, 0.061005f, 0.034231f, 0.011511f, -0.006807f, -0.021643f, -0.034229f, -0.045190f, -0.055109f, -0.065027f, -0.075849f, -0.087949f, -0.101562f, -0.117035f, -0.134702f, -0.154843f, -0.177496f, -0.202093f, -0.227631f, -0.253106f, -0.277270f, -0.298322f, -0.314656f, -0.325557f, -0.330409f, -0.327905f, -0.316927f, -0.297427f, -0.269514f, -0.232668f, -0.186868f, -0.133498f, -0.074069f, -0.009081f, 0.060877f, 0.133983f, 0.208161f, 0.282088f, 0.354192f, 0.421685f, 0.481644f, 0.532174f, 0.571494f, 0.596761f, 0.604942f, 0.594297f, 0.564069f, 0.513440f, 0.442118f, 0.351723f, 0.245530f, 0.127080f, 0.000223f, -0.129716f, -0.256333f, -0.374029f, -0.478501f, -0.565544f, -0.631076f, -0.672761f, -0.690270f, -0.683689f, -0.653190f, -0.600488f, -0.528942f, -0.441782f, -0.341626f, -0.231834f, -0.116682f, 0.000025f, 0.115102f, 0.224739f, 0.324534f, 0.410755f, 0.480542f, 0.531232f, 0.560568f, 0.567324f, 0.551195f, 0.512675f, 0.453339f, 0.375548f, 0.282095f, 0.176868f, 0.064992f, -0.048667f, -0.159757f, -0.262283f, -0.348547f, -0.412313f, -0.449169f, -0.453477f, -0.420000f, -0.349978f, + -0.250616f, -0.128884f, 0.006377f, 0.136800f, 0.239873f, 0.302094f, 0.314297f, 0.258860f, 0.129198f, -0.029823f, -0.132433f, -0.129413f, -0.059728f, -0.002602f, 0.007785f, -0.003487f, -0.007105f, -0.003815f, -0.004401f, -0.007051f, -0.005952f, -0.003689f, -0.004348f, -0.005493f, -0.004189f, -0.002643f, -0.003012f, -0.003342f, -0.002058f, -0.000889f, -0.000982f, -0.000846f, 0.000322f, 0.001228f, 0.001317f, 0.001678f, 0.002649f, 0.003310f, 0.003474f, 0.003877f, 0.004575f, 0.004982f, 0.005126f, 0.005431f, 0.005798f, 0.005946f, 0.006011f, 0.006127f} + }, + { + {1.079532f, 0.998235f, 0.850285f, 0.632018f, 0.357346f, 0.123599f, 0.061032f, 0.193395f, 0.396567f, 0.503127f, 0.416351f, 0.150118f, -0.179415f, -0.415063f, -0.477564f, -0.429570f, -0.389527f, -0.407796f, -0.468131f, -0.564318f, -0.698134f, -0.821601f, -0.860464f, -0.802613f, -0.711179f, -0.646626f, -0.616838f, -0.600835f, -0.578635f, -0.531502f, -0.444474f, -0.319603f, -0.174456f, -0.029034f, 0.098083f, 0.192379f, 0.255844f, 0.309193f, 0.371530f, 0.443415f, 0.513712f, 0.573199f, 0.617309f, 0.645288f, 0.661423f, 0.670890f, 0.673012f, 0.663713f, 0.642750f, 0.612720f, 0.573583f, 0.523581f, 0.462385f, 0.389021f, 0.300903f, 0.198899f, 0.089326f, -0.021841f, -0.132388f, -0.239961f, -0.339980f, -0.429136f, -0.506573f, -0.570849f, -0.620035f, -0.654986f, -0.678245f, -0.689440f, -0.685055f, -0.662509f, -0.621947f, -0.565149f, -0.495302f, -0.416936f, -0.333854f, -0.247460f, -0.158080f, -0.067051f, 0.023100f, 0.109595f, 0.190031f, 0.262592f, 0.325631f, 0.377009f, 0.414640f, 0.437919f, 0.447796f, 0.445623f, 0.433020f, 0.412348f, 0.385712f, 0.353870f, 0.317429f, 0.278358f, 0.238872f, 0.199766f, + 0.161294f, 0.124650f, 0.091143f, 0.061005f, 0.034231f, 0.011511f, -0.006807f, -0.021643f, -0.034229f, -0.045190f, -0.055109f, -0.065027f, -0.075849f, -0.087949f, -0.101562f, -0.117035f, -0.134702f, -0.154843f, -0.177496f, -0.202093f, -0.227631f, -0.253106f, -0.277270f, -0.298322f, -0.314656f, -0.325557f, -0.330409f, -0.327905f, -0.316927f, -0.297427f, -0.269514f, -0.232668f, -0.186868f, -0.133498f, -0.074069f, -0.009081f, 0.060877f, 0.133983f, 0.208161f, 0.282088f, 0.354192f, 0.421685f, 0.481644f, 0.532174f, 0.571494f, 0.596761f, 0.604942f, 0.594297f, 0.564069f, 0.513440f, 0.442118f, 0.351723f, 0.245530f, 0.127080f, 0.000223f, -0.129716f, -0.256333f, -0.374029f, -0.478501f, -0.565544f, -0.631076f, -0.672761f, -0.690270f, -0.683689f, -0.653190f, -0.600488f, -0.528942f, -0.441782f, -0.341626f, -0.231834f, -0.116682f, 0.000025f, 0.115102f, 0.224739f, 0.324534f, 0.410755f, 0.480542f, 0.531232f, 0.560568f, 0.567324f, 0.551195f, 0.512675f, 0.453339f, 0.375548f, 0.282095f, 0.176868f, 0.064992f, -0.048667f, -0.159757f, -0.262283f, -0.348547f, -0.412313f, -0.449169f, -0.453477f, -0.420000f, -0.349978f, + -0.250616f, -0.128884f, 0.006377f, 0.136800f, 0.239873f, 0.302094f, 0.314297f, 0.258860f, 0.129198f, -0.029823f, -0.132433f, -0.129413f, -0.059728f, -0.002602f, 0.007785f, -0.003487f, -0.007105f, -0.003815f, -0.004401f, -0.007051f, -0.005952f, -0.003689f, -0.004348f, -0.005493f, -0.004189f, -0.002643f, -0.003012f, -0.003342f, -0.002058f, -0.000889f, -0.000982f, -0.000846f, 0.000322f, 0.001228f, 0.001317f, 0.001678f, 0.002649f, 0.003310f, 0.003474f, 0.003877f, 0.004575f, 0.004982f, 0.005126f, 0.005431f, 0.005798f, 0.005946f, 0.006011f, 0.006127f}, + {1.112397f, 1.111335f, 1.098541f, 1.066221f, 1.017869f, 0.956090f, 0.875304f, 0.794051f, 0.783469f, 0.912714f, 1.154418f, 1.390208f, 1.523919f, 1.546110f, 1.485727f, 1.366225f, 1.230008f, 1.138792f, 1.115300f, 1.133121f, 1.181544f, 1.281430f, 1.418100f, 1.522549f, 1.547535f, 1.511683f, 1.451956f, 1.387778f, 1.346726f, 1.365986f, 1.445028f, 1.543010f, 1.636980f, 1.737911f, 1.841344f, 1.911123f, 1.925970f, 1.902958f, 1.864891f, 1.818149f, 1.768283f, 1.725885f, 1.690633f, 1.652687f, 1.611399f, 1.574846f, 1.545035f, 1.519441f, 1.500076f, 1.487021f, 1.471806f, 1.449320f, 1.426872f, 1.411941f, 1.401090f, 1.388324f, 1.373527f, 1.356198f, 1.331235f, 1.296699f, 1.257813f, 1.219852f, 1.183552f, 1.148414f, 1.114230f, 1.078765f, 1.038071f, 0.988570f, 0.927224f, 0.852801f, 0.768254f, 0.678135f, 0.583726f, 0.485145f, 0.386694f, 0.294105f, 0.207911f, 0.125603f, 0.048642f, -0.018544f, -0.074526f, -0.120226f, -0.154508f, -0.175796f, -0.186470f, -0.191357f, -0.193244f, -0.192820f, -0.191313f, -0.190742f, -0.192655f, -0.197592f, -0.204686f, -0.211940f, -0.218191f, -0.223996f, + -0.229614f, -0.234043f, -0.237357f, -0.241595f, -0.247842f, -0.254765f, -0.261227f, -0.267732f, -0.274126f, -0.278339f, -0.278541f, -0.274550f, -0.266501f, -0.253999f, -0.237013f, -0.216199f, -0.192291f, -0.166066f, -0.138455f, -0.109952f, -0.080598f, -0.050885f, -0.021663f, 0.007056f, 0.036069f, 0.065697f, 0.095709f, 0.126372f, 0.158482f, 0.192519f, 0.228577f, 0.266713f, 0.306680f, 0.347771f, 0.389146f, 0.429545f, 0.466699f, 0.498178f, 0.522837f, 0.540306f, 0.549440f, 0.548884f, 0.538969f, 0.521289f, 0.496435f, 0.463906f, 0.424432f, 0.380495f, 0.333949f, 0.284714f, 0.232690f, 0.179455f, 0.126660f, 0.073750f, 0.018927f, -0.038141f, -0.096401f, -0.156100f, -0.219366f, -0.287580f, -0.359934f, -0.435593f, -0.515692f, -0.601760f, -0.693176f, -0.787894f, -0.885348f, -0.986812f, -1.092377f, -1.199339f, -1.304999f, -1.409414f, -1.512886f, -1.612037f, -1.701983f, -1.781517f, -1.851454f, -1.908356f, -1.945802f, -1.961831f, -1.958173f, -1.932021f, -1.876786f, -1.791263f, -1.678747f, -1.537128f, -1.360504f, -1.150068f, -0.911518f, -0.643518f, -0.342730f, -0.017884f, 0.315739f, 0.650088f, 0.975129f, 1.264156f, + 1.488607f, 1.636372f, 1.693967f, 1.630407f, 1.428523f, 1.107711f, 0.682977f, 0.150519f, -0.414826f, -0.794658f, -0.785457f, -0.443271f, -0.068780f, 0.093541f, 0.063908f, 0.005868f, -0.000970f, 0.007761f, 0.000201f, -0.006097f, 0.000758f, 0.004704f, -0.001139f, -0.003615f, 0.001333f, 0.002891f, -0.001274f, -0.002236f, 0.001223f, 0.001737f, -0.001161f, -0.001399f, 0.000983f, 0.001007f, -0.000943f, -0.000823f, 0.000756f, 0.000549f, -0.000686f, -0.000398f, 0.000560f, 0.000246f, -0.000432f, -0.000077f, 0.000374f, 0.000016f, -0.000200f, 0.000171f} + }, + { + {1.075228f, 1.074217f, 1.098140f, 1.181350f, 1.301845f, 1.357285f, 1.275591f, 1.128376f, 1.051750f, 1.070717f, 1.096449f, 1.090338f, 1.120506f, 1.232710f, 1.365528f, 1.439321f, 1.453889f, 1.448913f, 1.426184f, 1.363771f, 1.270441f, 1.179270f, 1.105288f, 1.040796f, 0.980197f, 0.926868f, 0.882359f, 0.842806f, 0.803055f, 0.760151f, 0.717484f, 0.684947f, 0.668443f, 0.661086f, 0.651027f, 0.635243f, 0.620475f, 0.614727f, 0.622795f, 0.645718f, 0.679665f, 0.718175f, 0.758038f, 0.800110f, 0.844051f, 0.886529f, 0.924692f, 0.957013f, 0.980790f, 0.992993f, 0.994090f, 0.988656f, 0.982771f, 0.982211f, 0.991140f, 1.010513f, 1.038521f, 1.072547f, 1.108778f, 1.140961f, 1.163036f, 1.172913f, 1.171176f, 1.157532f, 1.131991f, 1.098142f, 1.061279f, 1.023708f, 0.984783f, 0.944459f, 0.903598f, 0.861374f, 0.815358f, 0.764360f, 0.709449f, 0.652291f, 0.594010f, 0.536028f, 0.481101f, 0.432577f, 0.392126f, 0.358508f, 0.329185f, 0.302679f, 0.278373f, 0.255008f, 0.231647f, 0.210110f, 0.194471f, 0.187914f, 0.191535f, 0.205810f, 0.231239f, 0.267417f, 0.313051f, 0.367052f, + 0.428780f, 0.497528f, 0.572254f, 0.650956f, 0.729921f, 0.804741f, 0.872337f, 0.930763f, 0.977405f, 1.009536f, 1.026754f, 1.030560f, 1.021257f, 0.997590f, 0.959821f, 0.910708f, 0.852633f, 0.785962f, 0.711354f, 0.631836f, 0.551033f, 0.470413f, 0.389791f, 0.309952f, 0.232974f, 0.159655f, 0.088252f, 0.016873f, -0.054104f, -0.123545f, -0.192358f, -0.262428f, -0.333151f, -0.401582f, -0.466079f, -0.527128f, -0.584149f, -0.634249f, -0.675298f, -0.707980f, -0.733621f, -0.751956f, -0.762482f, -0.766603f, -0.766968f, -0.765342f, -0.762185f, -0.758077f, -0.754691f, -0.753935f, -0.756401f, -0.761422f, -0.768926f, -0.780180f, -0.795912f, -0.814860f, -0.835536f, -0.858323f, -0.884145f, -0.912038f, -0.940032f, -0.967764f, -0.996212f, -1.025203f, -1.053082f, -1.078812f, -1.102840f, -1.125506f, -1.145684f, -1.161599f, -1.172538f, -1.178913f, -1.180387f, -1.174972f, -1.161052f, -1.139243f, -1.110357f, -1.072659f, -1.023765f, -0.964129f, -0.895301f, -0.815955f, -0.723787f, -0.620170f, -0.508278f, -0.387981f, -0.257793f, -0.120228f, 0.020407f, 0.163291f, 0.307901f, 0.448205f, 0.576448f, 0.689077f, 0.782089f, 0.845678f, + 0.871365f, 0.858316f, 0.804990f, 0.704160f, 0.556014f, 0.373959f, 0.167059f, -0.061388f, -0.274981f, -0.389171f, -0.341539f, -0.176854f, -0.021227f, 0.039404f, 0.025278f, 0.002978f, 0.000409f, 0.002891f, -0.000311f, -0.002218f, 0.000555f, 0.001691f, -0.000622f, -0.001274f, 0.000673f, 0.001036f, -0.000604f, -0.000793f, 0.000565f, 0.000609f, -0.000540f, -0.000507f, 0.000441f, 0.000341f, -0.000443f, -0.000297f, 0.000346f, 0.000177f, -0.000328f, -0.000127f, 0.000272f, 0.000068f, -0.000213f, 0.000010f, 0.000202f, -0.000020f, -0.000110f, 0.000118f}, + {0.960164f, 0.815843f, 0.531669f, 0.162241f, -0.177975f, -0.386498f, -0.458945f, -0.483857f, -0.540697f, -0.614327f, -0.622418f, -0.516530f, -0.334536f, -0.152125f, -0.004747f, 0.127804f, 0.271853f, 0.415700f, 0.517397f, 0.544153f, 0.497988f, 0.408320f, 0.305313f, 0.199510f, 0.083932f, -0.046923f, -0.183178f, -0.304770f, -0.395308f, -0.446238f, -0.451453f, -0.406776f, -0.317346f, -0.200175f, -0.075711f, 0.041366f, 0.142528f, 0.221292f, 0.272837f, 0.296528f, 0.295977f, 0.276382f, 0.242550f, 0.198393f, 0.146578f, 0.088571f, 0.025674f, -0.040051f, -0.105991f, -0.169238f, -0.225788f, -0.269676f, -0.293768f, -0.292136f, -0.262445f, -0.206810f, -0.130729f, -0.041117f, 0.054787f, 0.149042f, 0.232461f, 0.295490f, 0.330311f, 0.332628f, 0.302198f, 0.242289f, 0.158692f, 0.058771f, -0.048931f, -0.154433f, -0.246059f, -0.311363f, -0.339768f, -0.325985f, -0.272328f, -0.188549f, -0.089389f, 0.009037f, 0.093008f, 0.154155f, 0.190458f, 0.204754f, 0.201895f, 0.186430f, 0.161684f, 0.129742f, 0.091813f, 0.048922f, 0.002809f, -0.043495f, -0.085773f, -0.119474f, -0.141000f, -0.148803f, -0.143583f, -0.127578f, + -0.103627f, -0.074551f, -0.042812f, -0.010339f, 0.021376f, 0.050997f, 0.077158f, 0.098471f, 0.113527f, 0.120939f, 0.119561f, 0.108808f, 0.088872f, 0.060853f, 0.026832f, -0.010246f, -0.046936f, -0.079690f, -0.105211f, -0.120885f, -0.125248f, -0.118175f, -0.100717f, -0.074832f, -0.043111f, -0.008423f, 0.026401f, 0.058658f, 0.085759f, 0.105330f, 0.115404f, 0.114607f, 0.102460f, 0.079827f, 0.049121f, 0.014021f, -0.021124f, -0.052008f, -0.075132f, -0.088436f, -0.091490f, -0.085272f, -0.071781f, -0.053587f, -0.033279f, -0.013025f, 0.005554f, 0.021381f, 0.033930f, 0.043117f, 0.049029f, 0.051772f, 0.051505f, 0.048423f, 0.042645f, 0.034289f, 0.023665f, 0.011301f, -0.002140f, -0.015816f, -0.028671f, -0.039612f, -0.047707f, -0.052177f, -0.052427f, -0.048237f, -0.039850f, -0.027849f, -0.013136f, 0.003001f, 0.019065f, 0.033635f, 0.045427f, 0.053308f, 0.056554f, 0.054950f, 0.048521f, 0.037482f, 0.022572f, 0.005028f, -0.013904f, -0.032933f, -0.050205f, -0.063494f, -0.070939f, -0.070952f, -0.061845f, -0.042817f, -0.015369f, 0.017025f, 0.049963f, 0.077740f, 0.093374f, 0.091532f, 0.071535f, 0.036751f, + -0.006902f, -0.049951f, -0.080077f, -0.088199f, -0.073181f, -0.039187f, 0.006496f, 0.048670f, 0.065160f, 0.045077f, 0.005480f, -0.021584f, -0.021385f, -0.007456f, 0.000767f, 0.000082f, -0.001293f, 0.000161f, 0.001281f, 0.000763f, 0.000790f, 0.001871f, 0.002246f, 0.001673f, 0.001523f, 0.001855f, 0.001581f, 0.000775f, 0.000337f, 0.000178f, -0.000363f, -0.001094f, -0.001446f, -0.001566f, -0.001845f, -0.002088f, -0.001986f, -0.001712f, -0.001491f, -0.001185f, -0.000679f, -0.000134f, 0.000334f, 0.000795f, 0.001259f, 0.001626f, 0.001858f, 0.001978f} + }, + { + {0.960164f, 0.815843f, 0.531669f, 0.162241f, -0.177975f, -0.386498f, -0.458945f, -0.483857f, -0.540697f, -0.614327f, -0.622418f, -0.516530f, -0.334536f, -0.152125f, -0.004747f, 0.127804f, 0.271853f, 0.415700f, 0.517397f, 0.544153f, 0.497988f, 0.408320f, 0.305313f, 0.199510f, 0.083932f, -0.046923f, -0.183178f, -0.304770f, -0.395308f, -0.446238f, -0.451453f, -0.406776f, -0.317346f, -0.200175f, -0.075711f, 0.041366f, 0.142528f, 0.221292f, 0.272837f, 0.296528f, 0.295977f, 0.276382f, 0.242550f, 0.198393f, 0.146578f, 0.088571f, 0.025674f, -0.040051f, -0.105991f, -0.169238f, -0.225788f, -0.269676f, -0.293768f, -0.292136f, -0.262445f, -0.206810f, -0.130729f, -0.041117f, 0.054787f, 0.149042f, 0.232461f, 0.295490f, 0.330311f, 0.332628f, 0.302198f, 0.242289f, 0.158692f, 0.058771f, -0.048931f, -0.154433f, -0.246059f, -0.311363f, -0.339768f, -0.325985f, -0.272328f, -0.188549f, -0.089389f, 0.009037f, 0.093008f, 0.154155f, 0.190458f, 0.204754f, 0.201895f, 0.186430f, 0.161684f, 0.129742f, 0.091813f, 0.048922f, 0.002809f, -0.043495f, -0.085773f, -0.119474f, -0.141000f, -0.148803f, -0.143583f, -0.127578f, + -0.103627f, -0.074551f, -0.042812f, -0.010339f, 0.021376f, 0.050997f, 0.077158f, 0.098471f, 0.113527f, 0.120939f, 0.119561f, 0.108808f, 0.088872f, 0.060853f, 0.026832f, -0.010246f, -0.046936f, -0.079690f, -0.105211f, -0.120885f, -0.125248f, -0.118175f, -0.100717f, -0.074832f, -0.043111f, -0.008423f, 0.026401f, 0.058658f, 0.085759f, 0.105330f, 0.115404f, 0.114607f, 0.102460f, 0.079827f, 0.049121f, 0.014021f, -0.021124f, -0.052008f, -0.075132f, -0.088436f, -0.091490f, -0.085272f, -0.071781f, -0.053587f, -0.033279f, -0.013025f, 0.005554f, 0.021381f, 0.033930f, 0.043117f, 0.049029f, 0.051772f, 0.051505f, 0.048423f, 0.042645f, 0.034289f, 0.023665f, 0.011301f, -0.002140f, -0.015816f, -0.028671f, -0.039612f, -0.047707f, -0.052177f, -0.052427f, -0.048237f, -0.039850f, -0.027849f, -0.013136f, 0.003001f, 0.019065f, 0.033635f, 0.045427f, 0.053308f, 0.056554f, 0.054950f, 0.048521f, 0.037482f, 0.022572f, 0.005028f, -0.013904f, -0.032933f, -0.050205f, -0.063494f, -0.070939f, -0.070952f, -0.061845f, -0.042817f, -0.015369f, 0.017025f, 0.049963f, 0.077740f, 0.093374f, 0.091532f, 0.071535f, 0.036751f, + -0.006902f, -0.049951f, -0.080077f, -0.088199f, -0.073181f, -0.039187f, 0.006496f, 0.048670f, 0.065160f, 0.045077f, 0.005480f, -0.021584f, -0.021385f, -0.007456f, 0.000767f, 0.000082f, -0.001293f, 0.000161f, 0.001281f, 0.000763f, 0.000790f, 0.001871f, 0.002246f, 0.001673f, 0.001523f, 0.001855f, 0.001581f, 0.000775f, 0.000337f, 0.000178f, -0.000363f, -0.001094f, -0.001446f, -0.001566f, -0.001845f, -0.002088f, -0.001986f, -0.001712f, -0.001491f, -0.001185f, -0.000679f, -0.000134f, 0.000334f, 0.000795f, 0.001259f, 0.001626f, 0.001858f, 0.001978f}, + {1.075228f, 1.074217f, 1.098140f, 1.181350f, 1.301845f, 1.357285f, 1.275591f, 1.128376f, 1.051750f, 1.070717f, 1.096449f, 1.090338f, 1.120506f, 1.232710f, 1.365528f, 1.439321f, 1.453889f, 1.448913f, 1.426184f, 1.363771f, 1.270441f, 1.179270f, 1.105288f, 1.040796f, 0.980197f, 0.926868f, 0.882359f, 0.842806f, 0.803055f, 0.760151f, 0.717484f, 0.684947f, 0.668443f, 0.661086f, 0.651027f, 0.635243f, 0.620475f, 0.614727f, 0.622795f, 0.645718f, 0.679665f, 0.718175f, 0.758038f, 0.800110f, 0.844051f, 0.886529f, 0.924692f, 0.957013f, 0.980790f, 0.992993f, 0.994090f, 0.988656f, 0.982771f, 0.982211f, 0.991140f, 1.010513f, 1.038521f, 1.072547f, 1.108778f, 1.140961f, 1.163036f, 1.172913f, 1.171176f, 1.157532f, 1.131991f, 1.098142f, 1.061279f, 1.023708f, 0.984783f, 0.944459f, 0.903598f, 0.861374f, 0.815358f, 0.764360f, 0.709449f, 0.652291f, 0.594010f, 0.536028f, 0.481101f, 0.432577f, 0.392126f, 0.358508f, 0.329185f, 0.302679f, 0.278373f, 0.255008f, 0.231647f, 0.210110f, 0.194471f, 0.187914f, 0.191535f, 0.205810f, 0.231239f, 0.267417f, 0.313051f, 0.367052f, + 0.428780f, 0.497528f, 0.572254f, 0.650956f, 0.729921f, 0.804741f, 0.872337f, 0.930763f, 0.977405f, 1.009536f, 1.026754f, 1.030560f, 1.021257f, 0.997590f, 0.959821f, 0.910708f, 0.852633f, 0.785962f, 0.711354f, 0.631836f, 0.551033f, 0.470413f, 0.389791f, 0.309952f, 0.232974f, 0.159655f, 0.088252f, 0.016873f, -0.054104f, -0.123545f, -0.192358f, -0.262428f, -0.333151f, -0.401582f, -0.466079f, -0.527128f, -0.584149f, -0.634249f, -0.675298f, -0.707980f, -0.733621f, -0.751956f, -0.762482f, -0.766603f, -0.766968f, -0.765342f, -0.762185f, -0.758077f, -0.754691f, -0.753935f, -0.756401f, -0.761422f, -0.768926f, -0.780180f, -0.795912f, -0.814860f, -0.835536f, -0.858323f, -0.884145f, -0.912038f, -0.940032f, -0.967764f, -0.996212f, -1.025203f, -1.053082f, -1.078812f, -1.102840f, -1.125506f, -1.145684f, -1.161599f, -1.172538f, -1.178913f, -1.180387f, -1.174972f, -1.161052f, -1.139243f, -1.110357f, -1.072659f, -1.023765f, -0.964129f, -0.895301f, -0.815955f, -0.723787f, -0.620170f, -0.508278f, -0.387981f, -0.257793f, -0.120228f, 0.020407f, 0.163291f, 0.307901f, 0.448205f, 0.576448f, 0.689077f, 0.782089f, 0.845678f, + 0.871365f, 0.858316f, 0.804990f, 0.704160f, 0.556014f, 0.373959f, 0.167059f, -0.061388f, -0.274981f, -0.389171f, -0.341539f, -0.176854f, -0.021227f, 0.039404f, 0.025278f, 0.002978f, 0.000409f, 0.002891f, -0.000311f, -0.002218f, 0.000555f, 0.001691f, -0.000622f, -0.001274f, 0.000673f, 0.001036f, -0.000604f, -0.000793f, 0.000565f, 0.000609f, -0.000540f, -0.000507f, 0.000441f, 0.000341f, -0.000443f, -0.000297f, 0.000346f, 0.000177f, -0.000328f, -0.000127f, 0.000272f, 0.000068f, -0.000213f, 0.000010f, 0.000202f, -0.000020f, -0.000110f, 0.000118f} + }, + { + {1.021118f, 1.014910f, 1.036512f, 1.109450f, 1.204226f, 1.254141f, 1.223089f, 1.142720f, 1.068123f, 1.016578f, 0.975926f, 0.954919f, 0.983672f, 1.063545f, 1.153044f, 1.213027f, 1.237971f, 1.233999f, 1.196080f, 1.125290f, 1.047108f, 0.990282f, 0.956619f, 0.926662f, 0.887517f, 0.841653f, 0.794073f, 0.744757f, 0.693536f, 0.642684f, 0.592748f, 0.541229f, 0.486646f, 0.430740f, 0.376755f, 0.328893f, 0.293662f, 0.278018f, 0.283983f, 0.306520f, 0.338100f, 0.374086f, 0.412476f, 0.450359f, 0.483567f, 0.509814f, 0.530051f, 0.546442f, 0.560626f, 0.574155f, 0.588962f, 0.606627f, 0.627670f, 0.651329f, 0.675291f, 0.696162f, 0.711078f, 0.718475f, 0.717171f, 0.706200f, 0.686489f, 0.661160f, 0.632776f, 0.601270f, 0.565406f, 0.524818f, 0.479490f, 0.428872f, 0.373329f, 0.315884f, 0.261284f, 0.213734f, 0.176015f, 0.149705f, 0.134833f, 0.129330f, 0.129603f, 0.132071f, 0.134448f, 0.136068f, 0.137347f, 0.139019f, 0.141860f, 0.146786f, 0.154663f, 0.165925f, 0.180699f, 0.199281f, 0.222198f, 0.249879f, 0.282596f, 0.320651f, 0.364436f, 0.414340f, 0.470445f, 0.531869f, + 0.596501f, 0.661789f, 0.725419f, 0.784674f, 0.835991f, 0.876590f, 0.906270f, 0.926283f, 0.936909f, 0.937627f, 0.929116f, 0.912880f, 0.888746f, 0.854774f, 0.810155f, 0.756417f, 0.695219f, 0.626853f, 0.552031f, 0.473598f, 0.394918f, 0.317399f, 0.241080f, 0.167093f, 0.097815f, 0.034452f, -0.023969f, -0.078570f, -0.129051f, -0.175206f, -0.218772f, -0.262100f, -0.305551f, -0.347761f, -0.388005f, -0.426424f, -0.461940f, -0.491922f, -0.514586f, -0.530358f, -0.540303f, -0.544523f, -0.542936f, -0.536632f, -0.527481f, -0.516766f, -0.504935f, -0.492597f, -0.481194f, -0.472371f, -0.466907f, -0.464739f, -0.466171f, -0.472327f, -0.483927f, -0.500294f, -0.520400f, -0.544289f, -0.572382f, -0.603846f, -0.636952f, -0.670869f, -0.705849f, -0.741580f, -0.776574f, -0.809529f, -0.840302f, -0.868901f, -0.894171f, -0.914324f, -0.928590f, -0.937355f, -0.940432f, -0.936302f, -0.923833f, -0.903621f, -0.876334f, -0.840853f, -0.795869f, -0.742277f, -0.681702f, -0.613656f, -0.536857f, -0.452385f, -0.362495f, -0.267339f, -0.166250f, -0.061247f, 0.044313f, 0.149203f, 0.252532f, 0.350093f, 0.436582f, 0.509400f, 0.566085f, 0.600989f, + 0.609355f, 0.591229f, 0.546669f, 0.472573f, 0.370152f, 0.248355f, 0.113420f, -0.032320f, -0.167420f, -0.241605f, -0.216790f, -0.118416f, -0.021888f, 0.019213f, 0.014252f, 0.002063f, 0.000356f, 0.001651f, -0.000178f, -0.001272f, 0.000312f, 0.000978f, -0.000340f, -0.000724f, 0.000386f, 0.000598f, -0.000340f, -0.000457f, 0.000315f, 0.000344f, -0.000311f, -0.000299f, 0.000239f, 0.000188f, -0.000255f, -0.000177f, 0.000187f, 0.000099f, -0.000183f, -0.000075f, 0.000150f, 0.000044f, -0.000112f, 0.000008f, 0.000116f, 0.000000f, -0.000050f, 0.000071f}, + {0.932869f, 0.856258f, 0.680407f, 0.416625f, 0.148250f, -0.023842f, -0.087329f, -0.134616f, -0.244970f, -0.385661f, -0.472057f, -0.492517f, -0.512116f, -0.566410f, -0.616657f, -0.615445f, -0.560005f, -0.465857f, -0.336299f, -0.181373f, -0.031918f, 0.089726f, 0.191616f, 0.288900f, 0.377689f, 0.445599f, 0.491647f, 0.521680f, 0.534170f, 0.520833f, 0.475573f, 0.398359f, 0.296291f, 0.183195f, 0.072397f, -0.031357f, -0.128599f, -0.215418f, -0.282840f, -0.325105f, -0.343724f, -0.344232f, -0.333025f, -0.316310f, -0.298291f, -0.280189f, -0.262083f, -0.243767f, -0.222388f, -0.191534f, -0.144792f, -0.079668f, 0.001605f, 0.092568f, 0.183421f, 0.264250f, 0.329320f, 0.377813f, 0.410523f, 0.426997f, 0.425395f, 0.403296f, 0.358510f, 0.290739f, 0.203333f, 0.103082f, -0.001851f, -0.103927f, -0.197351f, -0.278599f, -0.345998f, -0.398008f, -0.431539f, -0.442137f, -0.426030f, -0.382422f, -0.314691f, -0.230120f, -0.138182f, -0.047827f, 0.034784f, 0.106607f, 0.166405f, 0.213658f, 0.248572f, 0.272118f, 0.285359f, 0.288978f, 0.283693f, 0.270537f, 0.250312f, 0.223174f, 0.189058f, 0.147974f, 0.099746f, 0.044338f, + -0.016931f, -0.080937f, -0.143711f, -0.201320f, -0.249848f, -0.285671f, -0.306377f, -0.311000f, -0.299308f, -0.271640f, -0.229566f, -0.175890f, -0.113809f, -0.046630f, 0.021800f, 0.087296f, 0.146188f, 0.195525f, 0.232719f, 0.255849f, 0.264337f, 0.258789f, 0.240297f, 0.210412f, 0.171477f, 0.126248f, 0.077212f, 0.026681f, -0.022772f, -0.068516f, -0.108321f, -0.140285f, -0.162670f, -0.174396f, -0.175576f, -0.167308f, -0.151206f, -0.129367f, -0.104330f, -0.078497f, -0.053556f, -0.030522f, -0.009982f, 0.007997f, 0.023907f, 0.038407f, 0.051943f, 0.064781f, 0.077079f, 0.088652f, 0.098819f, 0.106630f, 0.111137f, 0.111402f, 0.106532f, 0.095979f, 0.079769f, 0.058428f, 0.032870f, 0.004435f, -0.025130f, -0.053924f, -0.080127f, -0.102059f, -0.118226f, -0.127532f, -0.129459f, -0.124022f, -0.111628f, -0.093061f, -0.069546f, -0.042640f, -0.013957f, 0.014961f, 0.042540f, 0.067210f, 0.087700f, 0.103130f, 0.112745f, 0.115879f, 0.112351f, 0.102521f, 0.086750f, 0.065291f, 0.038932f, 0.009166f, -0.022462f, -0.054340f, -0.083825f, -0.107324f, -0.121750f, -0.124985f, -0.115062f, -0.090926f, -0.054663f, -0.011365f, + 0.033369f, 0.073724f, 0.102131f, 0.111537f, 0.100187f, 0.071073f, 0.027749f, -0.022644f, -0.062293f, -0.069966f, -0.043033f, -0.005541f, 0.014414f, 0.011811f, 0.002483f, -0.000779f, 0.000451f, 0.000500f, -0.000541f, -0.000273f, 0.000562f, 0.000328f, -0.000217f, 0.000101f, 0.000578f, 0.000346f, 0.000033f, 0.000279f, 0.000535f, 0.000325f, 0.000122f, 0.000275f, 0.000385f, 0.000200f, 0.000054f, 0.000128f, 0.000148f, -0.000006f, -0.000113f, -0.000089f, -0.000108f, -0.000221f, -0.000290f, -0.000280f, -0.000300f, -0.000368f, -0.000392f, -0.000365f} + }, + { + {0.932869f, 0.856258f, 0.680407f, 0.416625f, 0.148250f, -0.023842f, -0.087329f, -0.134616f, -0.244970f, -0.385661f, -0.472057f, -0.492517f, -0.512116f, -0.566410f, -0.616657f, -0.615445f, -0.560005f, -0.465857f, -0.336299f, -0.181373f, -0.031918f, 0.089726f, 0.191616f, 0.288900f, 0.377689f, 0.445599f, 0.491647f, 0.521680f, 0.534170f, 0.520833f, 0.475573f, 0.398359f, 0.296291f, 0.183195f, 0.072397f, -0.031357f, -0.128599f, -0.215418f, -0.282840f, -0.325105f, -0.343724f, -0.344232f, -0.333025f, -0.316310f, -0.298291f, -0.280189f, -0.262083f, -0.243767f, -0.222388f, -0.191534f, -0.144792f, -0.079668f, 0.001605f, 0.092568f, 0.183421f, 0.264250f, 0.329320f, 0.377813f, 0.410523f, 0.426997f, 0.425395f, 0.403296f, 0.358510f, 0.290739f, 0.203333f, 0.103082f, -0.001851f, -0.103927f, -0.197351f, -0.278599f, -0.345998f, -0.398008f, -0.431539f, -0.442137f, -0.426030f, -0.382422f, -0.314691f, -0.230120f, -0.138182f, -0.047827f, 0.034784f, 0.106607f, 0.166405f, 0.213658f, 0.248572f, 0.272118f, 0.285359f, 0.288978f, 0.283693f, 0.270537f, 0.250312f, 0.223174f, 0.189058f, 0.147974f, 0.099746f, 0.044338f, + -0.016931f, -0.080937f, -0.143711f, -0.201320f, -0.249848f, -0.285671f, -0.306377f, -0.311000f, -0.299308f, -0.271640f, -0.229566f, -0.175890f, -0.113809f, -0.046630f, 0.021800f, 0.087296f, 0.146188f, 0.195525f, 0.232719f, 0.255849f, 0.264337f, 0.258789f, 0.240297f, 0.210412f, 0.171477f, 0.126248f, 0.077212f, 0.026681f, -0.022772f, -0.068516f, -0.108321f, -0.140285f, -0.162670f, -0.174396f, -0.175576f, -0.167308f, -0.151206f, -0.129367f, -0.104330f, -0.078497f, -0.053556f, -0.030522f, -0.009982f, 0.007997f, 0.023907f, 0.038407f, 0.051943f, 0.064781f, 0.077079f, 0.088652f, 0.098819f, 0.106630f, 0.111137f, 0.111402f, 0.106532f, 0.095979f, 0.079769f, 0.058428f, 0.032870f, 0.004435f, -0.025130f, -0.053924f, -0.080127f, -0.102059f, -0.118226f, -0.127532f, -0.129459f, -0.124022f, -0.111628f, -0.093061f, -0.069546f, -0.042640f, -0.013957f, 0.014961f, 0.042540f, 0.067210f, 0.087700f, 0.103130f, 0.112745f, 0.115879f, 0.112351f, 0.102521f, 0.086750f, 0.065291f, 0.038932f, 0.009166f, -0.022462f, -0.054340f, -0.083825f, -0.107324f, -0.121750f, -0.124985f, -0.115062f, -0.090926f, -0.054663f, -0.011365f, + 0.033369f, 0.073724f, 0.102131f, 0.111537f, 0.100187f, 0.071073f, 0.027749f, -0.022644f, -0.062293f, -0.069966f, -0.043033f, -0.005541f, 0.014414f, 0.011811f, 0.002483f, -0.000779f, 0.000451f, 0.000500f, -0.000541f, -0.000273f, 0.000562f, 0.000328f, -0.000217f, 0.000101f, 0.000578f, 0.000346f, 0.000033f, 0.000279f, 0.000535f, 0.000325f, 0.000122f, 0.000275f, 0.000385f, 0.000200f, 0.000054f, 0.000128f, 0.000148f, -0.000006f, -0.000113f, -0.000089f, -0.000108f, -0.000221f, -0.000290f, -0.000280f, -0.000300f, -0.000368f, -0.000392f, -0.000365f}, + {1.021118f, 1.014910f, 1.036512f, 1.109450f, 1.204226f, 1.254141f, 1.223089f, 1.142720f, 1.068123f, 1.016578f, 0.975926f, 0.954919f, 0.983672f, 1.063545f, 1.153044f, 1.213027f, 1.237971f, 1.233999f, 1.196080f, 1.125290f, 1.047108f, 0.990282f, 0.956619f, 0.926662f, 0.887517f, 0.841653f, 0.794073f, 0.744757f, 0.693536f, 0.642684f, 0.592748f, 0.541229f, 0.486646f, 0.430740f, 0.376755f, 0.328893f, 0.293662f, 0.278018f, 0.283983f, 0.306520f, 0.338100f, 0.374086f, 0.412476f, 0.450359f, 0.483567f, 0.509814f, 0.530051f, 0.546442f, 0.560626f, 0.574155f, 0.588962f, 0.606627f, 0.627670f, 0.651329f, 0.675291f, 0.696162f, 0.711078f, 0.718475f, 0.717171f, 0.706200f, 0.686489f, 0.661160f, 0.632776f, 0.601270f, 0.565406f, 0.524818f, 0.479490f, 0.428872f, 0.373329f, 0.315884f, 0.261284f, 0.213734f, 0.176015f, 0.149705f, 0.134833f, 0.129330f, 0.129603f, 0.132071f, 0.134448f, 0.136068f, 0.137347f, 0.139019f, 0.141860f, 0.146786f, 0.154663f, 0.165925f, 0.180699f, 0.199281f, 0.222198f, 0.249879f, 0.282596f, 0.320651f, 0.364436f, 0.414340f, 0.470445f, 0.531869f, + 0.596501f, 0.661789f, 0.725419f, 0.784674f, 0.835991f, 0.876590f, 0.906270f, 0.926283f, 0.936909f, 0.937627f, 0.929116f, 0.912880f, 0.888746f, 0.854774f, 0.810155f, 0.756417f, 0.695219f, 0.626853f, 0.552031f, 0.473598f, 0.394918f, 0.317399f, 0.241080f, 0.167093f, 0.097815f, 0.034452f, -0.023969f, -0.078570f, -0.129051f, -0.175206f, -0.218772f, -0.262100f, -0.305551f, -0.347761f, -0.388005f, -0.426424f, -0.461940f, -0.491922f, -0.514586f, -0.530358f, -0.540303f, -0.544523f, -0.542936f, -0.536632f, -0.527481f, -0.516766f, -0.504935f, -0.492597f, -0.481194f, -0.472371f, -0.466907f, -0.464739f, -0.466171f, -0.472327f, -0.483927f, -0.500294f, -0.520400f, -0.544289f, -0.572382f, -0.603846f, -0.636952f, -0.670869f, -0.705849f, -0.741580f, -0.776574f, -0.809529f, -0.840302f, -0.868901f, -0.894171f, -0.914324f, -0.928590f, -0.937355f, -0.940432f, -0.936302f, -0.923833f, -0.903621f, -0.876334f, -0.840853f, -0.795869f, -0.742277f, -0.681702f, -0.613656f, -0.536857f, -0.452385f, -0.362495f, -0.267339f, -0.166250f, -0.061247f, 0.044313f, 0.149203f, 0.252532f, 0.350093f, 0.436582f, 0.509400f, 0.566085f, 0.600989f, + 0.609355f, 0.591229f, 0.546669f, 0.472573f, 0.370152f, 0.248355f, 0.113420f, -0.032320f, -0.167420f, -0.241605f, -0.216790f, -0.118416f, -0.021888f, 0.019213f, 0.014252f, 0.002063f, 0.000356f, 0.001651f, -0.000178f, -0.001272f, 0.000312f, 0.000978f, -0.000340f, -0.000724f, 0.000386f, 0.000598f, -0.000340f, -0.000457f, 0.000315f, 0.000344f, -0.000311f, -0.000299f, 0.000239f, 0.000188f, -0.000255f, -0.000177f, 0.000187f, 0.000099f, -0.000183f, -0.000075f, 0.000150f, 0.000044f, -0.000112f, 0.000008f, 0.000116f, 0.000000f, -0.000050f, 0.000071f} + } +}; +const float CRendBin_Combined_HRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][240]={ + { + {0.021740f, 0.062265f, 0.089497f, 0.079979f, 0.019873f, -0.044423f, -0.038634f, 0.014329f, -0.006309f, -0.113590f, -0.115115f, 0.141366f, 0.508608f, 0.696113f, 0.638660f, 0.530885f, 0.513220f, 0.511265f, 0.413104f, 0.233094f, 0.033856f, -0.178208f, -0.394112f, -0.532465f, -0.516289f, -0.373221f, -0.199312f, -0.054469f, 0.064669f, 0.175334f, 0.270929f, 0.322634f, 0.297348f, 0.180897f, -0.005107f, -0.214019f, -0.406250f, -0.568975f, -0.708995f, -0.834425f, -0.942413f, -1.020169f, -1.058870f, -1.066737f, -1.064744f, -1.070779f, -1.092413f, -1.130543f, -1.180471f, -1.230349f, -1.267218f, -1.286478f, -1.292217f, -1.290295f, -1.284789f, -1.278764f, -1.274804f, -1.275839f, -1.285956f, -1.307719f, -1.339100f, -1.376367f, -1.418521f, -1.464319f, -1.506155f, -1.531614f, -1.530826f, -1.499868f, -1.440010f, -1.357948f, -1.265010f, -1.172182f, -1.086077f, -1.010355f, -0.948076f, -0.900542f, -0.865729f, -0.839379f, -0.816783f, -0.793921f, -0.768744f, -0.741295f, -0.711733f, -0.679567f, -0.645630f, -0.612730f, -0.583124f, -0.557524f, -0.537573f, -0.526798f, -0.527799f, -0.540308f, -0.562652f, -0.593201f, -0.629808f, -0.669386f, + -0.708515f, -0.743933f, -0.773005f, -0.794365f, -0.807476f, -0.811721f, -0.807186f, -0.795749f, -0.779350f, -0.757689f, -0.729622f, -0.695999f, -0.658877f, -0.618992f, -0.576449f, -0.532906f, -0.490747f, -0.450976f, -0.413608f, -0.379004f, -0.347546f, -0.319332f, -0.295027f, -0.275613f, -0.261247f, -0.252274f, -0.250937f, -0.259815f, -0.279334f, -0.309493f, -0.353092f, -0.414158f, -0.493999f, -0.592040f, -0.709860f, -0.850917f, -1.016122f, -1.202501f, -1.406580f, -1.626368f, -1.858539f, -2.095454f, -2.327361f, -2.547430f, -2.752372f, -2.937831f, -3.096805f, -3.225146f, -3.325214f, -3.400274f, -3.448580f, -3.467955f, -3.462820f, -3.440091f, -3.400547f, -3.341377f, -3.265259f, -3.179036f, -3.084322f, -2.977173f, -2.856905f, -2.727864f, -2.591707f, -2.444451f, -2.282751f, -2.108111f, -1.922919f, -1.725836f, -1.513704f, -1.286797f, -1.049763f, -0.806612f, -0.557242f, -0.301864f, -0.046431f, 0.201936f, 0.443240f, 0.681014f, 0.912264f, 1.130667f, 1.338214f, 1.541861f, 1.739858f, 1.924684f, 2.097432f, 2.263703f, 2.417459f, 2.545568f, 2.644263f, 2.712279f, 2.733362f, 2.686342f, 2.565077f, 2.367465f, 2.078112f, 1.688067f, + 1.216823f, 0.689229f, 0.115322f, -0.475183f, -1.011572f, -1.432585f, -1.708631f, -1.762445f, -1.452538f, -0.765837f, 0.007791f, 0.454087f, 0.430600f, 0.177956f, 0.006027f, -0.013234f, 0.008162f, 0.000516f, -0.008800f, 0.001070f, 0.006785f, -0.001814f, -0.005338f, 0.001955f, 0.004159f, -0.001933f, -0.003203f, 0.001947f, 0.002621f, -0.001703f, -0.001961f, 0.001637f, 0.001565f, -0.001450f, -0.001190f, 0.001261f, 0.000818f, -0.001182f, -0.000645f, 0.000918f, 0.000295f, -0.000884f, -0.000203f, 0.000626f, -0.000076f, -0.000552f, 0.000190f, 0.000362f}, + {-0.080378f, -0.311517f, -0.607575f, -0.791939f, -0.801056f, -0.760728f, -0.739137f, -0.646344f, -0.447365f, -0.280582f, -0.279360f, -0.423325f, -0.622662f, -0.804319f, -0.867760f, -0.711139f, -0.374564f, -0.036973f, 0.187009f, 0.339438f, 0.474054f, 0.550709f, 0.537533f, 0.502849f, 0.524124f, 0.586937f, 0.644423f, 0.705382f, 0.790305f, 0.855034f, 0.834070f, 0.729675f, 0.593377f, 0.437006f, 0.224113f, -0.048481f, -0.312373f, -0.491566f, -0.576209f, -0.612643f, -0.640544f, -0.665031f, -0.680052f, -0.687657f, -0.686406f, -0.662500f, -0.605999f, -0.524271f, -0.429884f, -0.325685f, -0.210684f, -0.091141f, 0.023275f, 0.127676f, 0.220049f, 0.297836f, 0.361429f, 0.414922f, 0.459421f, 0.490535f, 0.503997f, 0.498318f, 0.471835f, 0.423949f, 0.360378f, 0.291632f, 0.225381f, 0.164098f, 0.109185f, 0.062781f, 0.025528f, -0.004197f, -0.028936f, -0.051742f, -0.076082f, -0.104578f, -0.138150f, -0.176078f, -0.215537f, -0.251862f, -0.281392f, -0.303940f, -0.321624f, -0.336474f, -0.349673f, -0.360447f, -0.363977f, -0.352405f, -0.319580f, -0.263976f, -0.187632f, -0.095277f, 0.004941f, 0.102546f, 0.187832f, 0.253454f, + 0.294802f, 0.311762f, 0.309781f, 0.297062f, 0.280794f, 0.266708f, 0.259989f, 0.264021f, 0.278984f, 0.303091f, 0.333931f, 0.367038f, 0.394275f, 0.405176f, 0.389668f, 0.339645f, 0.250213f, 0.121655f, -0.039539f, -0.222071f, -0.412200f, -0.595202f, -0.756231f, -0.881758f, -0.961227f, -0.987631f, -0.957056f, -0.868780f, -0.726460f, -0.538670f, -0.317638f, -0.077771f, 0.164807f, 0.393406f, 0.593707f, 0.755810f, 0.873499f, 0.943326f, 0.965432f, 0.943420f, 0.881696f, 0.783870f, 0.654305f, 0.499177f, 0.324930f, 0.137677f, -0.054836f, -0.242668f, -0.415940f, -0.565859f, -0.683493f, -0.760474f, -0.792077f, -0.778024f, -0.720589f, -0.624483f, -0.498476f, -0.354312f, -0.203363f, -0.055601f, 0.079448f, 0.193754f, 0.282950f, 0.345938f, 0.383039f, 0.396039f, 0.388837f, 0.366082f, 0.331570f, 0.288732f, 0.241345f, 0.192568f, 0.144151f, 0.097195f, 0.052704f, 0.011148f, -0.027394f, -0.062510f, -0.093642f, -0.120625f, -0.143214f, -0.160685f, -0.172569f, -0.178917f, -0.179375f, -0.173102f, -0.159797f, -0.139499f, -0.111633f, -0.075980f, -0.034252f, 0.010916f, 0.057404f, 0.101926f, 0.138613f, 0.161970f, + 0.169562f, 0.159632f, 0.129698f, 0.081381f, 0.023065f, -0.036010f, -0.088771f, -0.122396f, -0.117183f, -0.067536f, -0.000965f, 0.039915f, 0.038373f, 0.015920f, 0.001538f, 0.001251f, 0.003701f, 0.002572f, 0.001346f, 0.002248f, 0.002607f, 0.001294f, 0.000524f, 0.000987f, 0.000860f, -0.000262f, -0.000829f, -0.000606f, -0.000896f, -0.001788f, -0.002153f, -0.001988f, -0.002250f, -0.002848f, -0.002957f, -0.002725f, -0.002844f, -0.003107f, -0.002939f, -0.002590f, -0.002528f, -0.002470f, -0.002063f, -0.001626f, -0.001418f, -0.001114f, -0.000569f, -0.000134f} + }, + { + {-0.080378f, -0.311517f, -0.607575f, -0.791939f, -0.801056f, -0.760728f, -0.739137f, -0.646344f, -0.447365f, -0.280582f, -0.279360f, -0.423325f, -0.622662f, -0.804319f, -0.867760f, -0.711139f, -0.374564f, -0.036973f, 0.187009f, 0.339438f, 0.474054f, 0.550709f, 0.537533f, 0.502849f, 0.524124f, 0.586937f, 0.644423f, 0.705382f, 0.790305f, 0.855034f, 0.834070f, 0.729675f, 0.593377f, 0.437006f, 0.224113f, -0.048481f, -0.312373f, -0.491566f, -0.576209f, -0.612643f, -0.640544f, -0.665031f, -0.680052f, -0.687657f, -0.686406f, -0.662500f, -0.605999f, -0.524271f, -0.429884f, -0.325685f, -0.210684f, -0.091141f, 0.023275f, 0.127676f, 0.220049f, 0.297836f, 0.361429f, 0.414922f, 0.459421f, 0.490535f, 0.503997f, 0.498318f, 0.471835f, 0.423949f, 0.360378f, 0.291632f, 0.225381f, 0.164098f, 0.109185f, 0.062781f, 0.025528f, -0.004197f, -0.028936f, -0.051742f, -0.076082f, -0.104578f, -0.138150f, -0.176078f, -0.215537f, -0.251862f, -0.281392f, -0.303940f, -0.321624f, -0.336474f, -0.349673f, -0.360447f, -0.363977f, -0.352405f, -0.319580f, -0.263976f, -0.187632f, -0.095277f, 0.004941f, 0.102546f, 0.187832f, 0.253454f, + 0.294802f, 0.311762f, 0.309781f, 0.297062f, 0.280794f, 0.266708f, 0.259989f, 0.264021f, 0.278984f, 0.303091f, 0.333931f, 0.367038f, 0.394275f, 0.405176f, 0.389668f, 0.339645f, 0.250213f, 0.121655f, -0.039539f, -0.222071f, -0.412200f, -0.595202f, -0.756231f, -0.881758f, -0.961227f, -0.987631f, -0.957056f, -0.868780f, -0.726460f, -0.538670f, -0.317638f, -0.077771f, 0.164807f, 0.393406f, 0.593707f, 0.755810f, 0.873499f, 0.943326f, 0.965432f, 0.943420f, 0.881696f, 0.783870f, 0.654305f, 0.499177f, 0.324930f, 0.137677f, -0.054836f, -0.242668f, -0.415940f, -0.565859f, -0.683493f, -0.760474f, -0.792077f, -0.778024f, -0.720589f, -0.624483f, -0.498476f, -0.354312f, -0.203363f, -0.055601f, 0.079448f, 0.193754f, 0.282950f, 0.345938f, 0.383039f, 0.396039f, 0.388837f, 0.366082f, 0.331570f, 0.288732f, 0.241345f, 0.192568f, 0.144151f, 0.097195f, 0.052704f, 0.011148f, -0.027394f, -0.062510f, -0.093642f, -0.120625f, -0.143214f, -0.160685f, -0.172569f, -0.178917f, -0.179375f, -0.173102f, -0.159797f, -0.139499f, -0.111633f, -0.075980f, -0.034252f, 0.010916f, 0.057404f, 0.101926f, 0.138613f, 0.161970f, + 0.169562f, 0.159632f, 0.129698f, 0.081381f, 0.023065f, -0.036010f, -0.088771f, -0.122396f, -0.117183f, -0.067536f, -0.000965f, 0.039915f, 0.038373f, 0.015920f, 0.001538f, 0.001251f, 0.003701f, 0.002572f, 0.001346f, 0.002248f, 0.002607f, 0.001294f, 0.000524f, 0.000987f, 0.000860f, -0.000262f, -0.000829f, -0.000606f, -0.000896f, -0.001788f, -0.002153f, -0.001988f, -0.002250f, -0.002848f, -0.002957f, -0.002725f, -0.002844f, -0.003107f, -0.002939f, -0.002590f, -0.002528f, -0.002470f, -0.002063f, -0.001626f, -0.001418f, -0.001114f, -0.000569f, -0.000134f}, + {0.021740f, 0.062265f, 0.089497f, 0.079979f, 0.019873f, -0.044423f, -0.038634f, 0.014329f, -0.006309f, -0.113590f, -0.115115f, 0.141366f, 0.508608f, 0.696113f, 0.638660f, 0.530885f, 0.513220f, 0.511265f, 0.413104f, 0.233094f, 0.033856f, -0.178208f, -0.394112f, -0.532465f, -0.516289f, -0.373221f, -0.199312f, -0.054469f, 0.064669f, 0.175334f, 0.270929f, 0.322634f, 0.297348f, 0.180897f, -0.005107f, -0.214019f, -0.406250f, -0.568975f, -0.708995f, -0.834425f, -0.942413f, -1.020169f, -1.058870f, -1.066737f, -1.064744f, -1.070779f, -1.092413f, -1.130543f, -1.180471f, -1.230349f, -1.267218f, -1.286478f, -1.292217f, -1.290295f, -1.284789f, -1.278764f, -1.274804f, -1.275839f, -1.285956f, -1.307719f, -1.339100f, -1.376367f, -1.418521f, -1.464319f, -1.506155f, -1.531614f, -1.530826f, -1.499868f, -1.440010f, -1.357948f, -1.265010f, -1.172182f, -1.086077f, -1.010355f, -0.948076f, -0.900542f, -0.865729f, -0.839379f, -0.816783f, -0.793921f, -0.768744f, -0.741295f, -0.711733f, -0.679567f, -0.645630f, -0.612730f, -0.583124f, -0.557524f, -0.537573f, -0.526798f, -0.527799f, -0.540308f, -0.562652f, -0.593201f, -0.629808f, -0.669386f, + -0.708515f, -0.743933f, -0.773005f, -0.794365f, -0.807476f, -0.811721f, -0.807186f, -0.795749f, -0.779350f, -0.757689f, -0.729622f, -0.695999f, -0.658877f, -0.618992f, -0.576449f, -0.532906f, -0.490747f, -0.450976f, -0.413608f, -0.379004f, -0.347546f, -0.319332f, -0.295027f, -0.275613f, -0.261247f, -0.252274f, -0.250937f, -0.259815f, -0.279334f, -0.309493f, -0.353092f, -0.414158f, -0.493999f, -0.592040f, -0.709860f, -0.850917f, -1.016122f, -1.202501f, -1.406580f, -1.626368f, -1.858539f, -2.095454f, -2.327361f, -2.547430f, -2.752372f, -2.937831f, -3.096805f, -3.225146f, -3.325214f, -3.400274f, -3.448580f, -3.467955f, -3.462820f, -3.440091f, -3.400547f, -3.341377f, -3.265259f, -3.179036f, -3.084322f, -2.977173f, -2.856905f, -2.727864f, -2.591707f, -2.444451f, -2.282751f, -2.108111f, -1.922919f, -1.725836f, -1.513704f, -1.286797f, -1.049763f, -0.806612f, -0.557242f, -0.301864f, -0.046431f, 0.201936f, 0.443240f, 0.681014f, 0.912264f, 1.130667f, 1.338214f, 1.541861f, 1.739858f, 1.924684f, 2.097432f, 2.263703f, 2.417459f, 2.545568f, 2.644263f, 2.712279f, 2.733362f, 2.686342f, 2.565077f, 2.367465f, 2.078112f, 1.688067f, + 1.216823f, 0.689229f, 0.115322f, -0.475183f, -1.011572f, -1.432585f, -1.708631f, -1.762445f, -1.452538f, -0.765837f, 0.007791f, 0.454087f, 0.430600f, 0.177956f, 0.006027f, -0.013234f, 0.008162f, 0.000516f, -0.008800f, 0.001070f, 0.006785f, -0.001814f, -0.005338f, 0.001955f, 0.004159f, -0.001933f, -0.003203f, 0.001947f, 0.002621f, -0.001703f, -0.001961f, 0.001637f, 0.001565f, -0.001450f, -0.001190f, 0.001261f, 0.000818f, -0.001182f, -0.000645f, 0.000918f, 0.000295f, -0.000884f, -0.000203f, 0.000626f, -0.000076f, -0.000552f, 0.000190f, 0.000362f} + }, + { + {0.020843f, 0.021772f, -0.074620f, -0.219246f, -0.250987f, -0.107501f, 0.010495f, -0.117159f, -0.350087f, -0.299453f, 0.133095f, 0.571464f, 0.635503f, 0.397361f, 0.214127f, 0.251024f, 0.351688f, 0.309346f, 0.096268f, -0.170755f, -0.368550f, -0.441001f, -0.403762f, -0.312694f, -0.213644f, -0.118863f, -0.033052f, 0.019339f, 0.006766f, -0.084398f, -0.244267f, -0.442069f, -0.632048f, -0.778310f, -0.879952f, -0.956019f, -1.006298f, -1.007224f, -0.948454f, -0.854412f, -0.765413f, -0.711451f, -0.704679f, -0.740188f, -0.797729f, -0.853597f, -0.897547f, -0.934478f, -0.969795f, -0.999408f, -1.014937f, -1.013415f, -0.999640f, -0.981235f, -0.962830f, -0.944810f, -0.926848f, -0.910262f, -0.894988f, -0.876689f, -0.850723f, -0.818230f, -0.784731f, -0.753005f, -0.720667f, -0.685021f, -0.647235f, -0.610640f, -0.576758f, -0.544244f, -0.511073f, -0.477026f, -0.444129f, -0.414956f, -0.390763f, -0.371204f, -0.355270f, -0.342030f, -0.331009f, -0.322541f, -0.317554f, -0.316405f, -0.318065f, -0.320982f, -0.324817f, -0.330999f, -0.341429f, -0.356903f, -0.377097f, -0.401882f, -0.431767f, -0.466439f, -0.503289f, -0.537982f, -0.566063f, -0.583561f, + -0.587138f, -0.575315f, -0.549603f, -0.513357f, -0.469423f, -0.419580f, -0.365934f, -0.311618f, -0.259754f, -0.212337f, -0.170616f, -0.136551f, -0.113765f, -0.106742f, -0.118986f, -0.152388f, -0.208330f, -0.287999f, -0.390564f, -0.512325f, -0.649221f, -0.799131f, -0.960097f, -1.127778f, -1.297417f, -1.467538f, -1.638728f, -1.809064f, -1.973949f, -2.130414f, -2.277763f, -2.413033f, -2.529737f, -2.623312f, -2.694688f, -2.746001f, -2.775857f, -2.782337f, -2.768361f, -2.739709f, -2.698669f, -2.643816f, -2.575709f, -2.498064f, -2.412212f, -2.314661f, -2.202237f, -2.076018f, -1.937466f, -1.784021f, -1.612358f, -1.423970f, -1.223605f, -1.013553f, -0.793839f, -0.567739f, -0.342670f, -0.124736f, 0.083821f, 0.280550f, 0.459977f, 0.617159f, 0.751201f, 0.862726f, 0.950153f, 1.011333f, 1.047323f, 1.061710f, 1.057110f, 1.035001f, 0.998567f, 0.953069f, 0.903025f, 0.850779f, 0.798188f, 0.748048f, 0.702999f, 0.663889f, 0.630078f, 0.601056f, 0.577007f, 0.557689f, 0.541546f, 0.526776f, 0.512917f, 0.500274f, 0.488072f, 0.474647f, 0.459326f, 0.442142f, 0.421629f, 0.395188f, 0.361846f, 0.322187f, 0.275584f, 0.220730f, + 0.158999f, 0.093656f, 0.025970f, -0.043388f, -0.109763f, -0.167134f, -0.213607f, -0.244943f, -0.243677f, -0.190704f, -0.096080f, -0.005466f, 0.037995f, 0.033141f, 0.012469f, 0.001728f, 0.000979f, 0.000762f, -0.000671f, -0.000492f, 0.000547f, 0.000254f, -0.000496f, -0.000131f, 0.000467f, 0.000134f, -0.000309f, 0.000007f, 0.000336f, 0.000034f, -0.000227f, 0.000024f, 0.000194f, -0.000047f, -0.000184f, 0.000006f, 0.000083f, -0.000088f, -0.000140f, -0.000006f, 0.000018f, -0.000084f, -0.000083f, -0.000003f, -0.000007f, -0.000044f, -0.000017f, 0.000006f}, + {0.020843f, 0.021772f, -0.074620f, -0.219246f, -0.250987f, -0.107501f, 0.010495f, -0.117159f, -0.350087f, -0.299453f, 0.133095f, 0.571464f, 0.635503f, 0.397361f, 0.214127f, 0.251024f, 0.351688f, 0.309346f, 0.096268f, -0.170755f, -0.368550f, -0.441001f, -0.403762f, -0.312694f, -0.213644f, -0.118863f, -0.033052f, 0.019339f, 0.006766f, -0.084398f, -0.244267f, -0.442069f, -0.632048f, -0.778310f, -0.879952f, -0.956019f, -1.006298f, -1.007224f, -0.948454f, -0.854412f, -0.765413f, -0.711451f, -0.704679f, -0.740188f, -0.797729f, -0.853597f, -0.897547f, -0.934478f, -0.969795f, -0.999408f, -1.014937f, -1.013415f, -0.999640f, -0.981235f, -0.962830f, -0.944810f, -0.926848f, -0.910262f, -0.894988f, -0.876689f, -0.850723f, -0.818230f, -0.784731f, -0.753005f, -0.720667f, -0.685021f, -0.647235f, -0.610640f, -0.576758f, -0.544244f, -0.511073f, -0.477026f, -0.444129f, -0.414956f, -0.390763f, -0.371204f, -0.355270f, -0.342030f, -0.331009f, -0.322541f, -0.317554f, -0.316405f, -0.318065f, -0.320982f, -0.324817f, -0.330999f, -0.341429f, -0.356903f, -0.377097f, -0.401882f, -0.431767f, -0.466439f, -0.503289f, -0.537982f, -0.566063f, -0.583561f, + -0.587138f, -0.575315f, -0.549603f, -0.513357f, -0.469423f, -0.419580f, -0.365934f, -0.311618f, -0.259754f, -0.212337f, -0.170616f, -0.136551f, -0.113765f, -0.106742f, -0.118986f, -0.152388f, -0.208330f, -0.287999f, -0.390564f, -0.512325f, -0.649221f, -0.799131f, -0.960097f, -1.127778f, -1.297417f, -1.467538f, -1.638728f, -1.809064f, -1.973949f, -2.130414f, -2.277763f, -2.413033f, -2.529737f, -2.623312f, -2.694688f, -2.746001f, -2.775857f, -2.782337f, -2.768361f, -2.739709f, -2.698669f, -2.643816f, -2.575709f, -2.498064f, -2.412212f, -2.314661f, -2.202237f, -2.076018f, -1.937466f, -1.784021f, -1.612358f, -1.423970f, -1.223605f, -1.013553f, -0.793839f, -0.567739f, -0.342670f, -0.124736f, 0.083821f, 0.280550f, 0.459977f, 0.617159f, 0.751201f, 0.862726f, 0.950153f, 1.011333f, 1.047323f, 1.061710f, 1.057110f, 1.035001f, 0.998567f, 0.953069f, 0.903025f, 0.850779f, 0.798188f, 0.748048f, 0.702999f, 0.663889f, 0.630078f, 0.601056f, 0.577007f, 0.557689f, 0.541546f, 0.526776f, 0.512917f, 0.500274f, 0.488072f, 0.474647f, 0.459326f, 0.442142f, 0.421629f, 0.395188f, 0.361846f, 0.322187f, 0.275584f, 0.220730f, + 0.158999f, 0.093656f, 0.025970f, -0.043388f, -0.109763f, -0.167134f, -0.213607f, -0.244943f, -0.243677f, -0.190704f, -0.096080f, -0.005466f, 0.037995f, 0.033141f, 0.012469f, 0.001728f, 0.000979f, 0.000762f, -0.000671f, -0.000492f, 0.000547f, 0.000254f, -0.000496f, -0.000131f, 0.000467f, 0.000134f, -0.000309f, 0.000007f, 0.000336f, 0.000034f, -0.000227f, 0.000024f, 0.000194f, -0.000047f, -0.000184f, 0.000006f, 0.000083f, -0.000088f, -0.000140f, -0.000006f, 0.000018f, -0.000084f, -0.000083f, -0.000003f, -0.000007f, -0.000044f, -0.000017f, 0.000006f} + }, + { + {0.011569f, 0.065153f, 0.150153f, 0.203635f, 0.205376f, 0.173096f, 0.078721f, -0.099478f, -0.273114f, -0.336729f, -0.337980f, -0.407198f, -0.542930f, -0.623111f, -0.612944f, -0.602716f, -0.639352f, -0.670207f, -0.665746f, -0.663210f, -0.669807f, -0.639016f, -0.563037f, -0.492634f, -0.453350f, -0.425831f, -0.411451f, -0.435590f, -0.481467f, -0.493772f, -0.454614f, -0.397179f, -0.343898f, -0.284417f, -0.214324f, -0.148331f, -0.092876f, -0.042119f, -0.001362f, 0.013895f, 0.000977f, -0.028018f, -0.062315f, -0.094962f, -0.116574f, -0.120585f, -0.110386f, -0.094260f, -0.079595f, -0.075577f, -0.092822f, -0.135978f, -0.201707f, -0.283621f, -0.373297f, -0.458913f, -0.530510f, -0.586050f, -0.628047f, -0.657110f, -0.672676f, -0.676154f, -0.668940f, -0.650025f, -0.618410f, -0.575398f, -0.523084f, -0.463279f, -0.398758f, -0.333031f, -0.268412f, -0.205886f, -0.146127f, -0.088932f, -0.032678f, 0.024059f, 0.081192f, 0.138116f, 0.194573f, 0.249639f, 0.300758f, 0.344246f, 0.376397f, 0.394340f, 0.395940f, 0.378322f, 0.336985f, 0.267596f, 0.167862f, 0.036412f, -0.127823f, -0.321958f, -0.536530f, -0.759956f, -0.984191f, -1.203033f, + -1.407738f, -1.589491f, -1.745039f, -1.875334f, -1.979759f, -2.056311f, -2.106550f, -2.135185f, -2.144138f, -2.131027f, -2.094254f, -2.036298f, -1.961129f, -1.871617f, -1.771308f, -1.666459f, -1.563804f, -1.466752f, -1.375328f, -1.289465f, -1.210671f, -1.140298f, -1.077990f, -1.023002f, -0.975880f, -0.937424f, -0.906552f, -0.880558f, -0.857370f, -0.836543f, -0.818233f, -0.802387f, -0.789314f, -0.780403f, -0.777788f, -0.783208f, -0.797242f, -0.819642f, -0.850299f, -0.889299f, -0.935805f, -0.987623f, -1.042663f, -1.100181f, -1.159526f, -1.218087f, -1.271834f, -1.317746f, -1.354190f, -1.378859f, -1.388441f, -1.381422f, -1.359724f, -1.326229f, -1.282128f, -1.228339f, -1.167951f, -1.104670f, -1.039474f, -0.971238f, -0.900258f, -0.828583f, -0.756941f, -0.684007f, -0.609260f, -0.534389f, -0.461087f, -0.389218f, -0.318074f, -0.248322f, -0.181644f, -0.118710f, -0.058387f, 0.000515f, 0.057409f, 0.111358f, 0.163934f, 0.218134f, 0.274375f, 0.331038f, 0.389352f, 0.453139f, 0.522861f, 0.595488f, 0.671219f, 0.753543f, 0.841415f, 0.929099f, 1.014516f, 1.098177f, 1.173021f, 1.225991f, 1.249730f, 1.240661f, 1.187460f, 1.077175f, + 0.910930f, 0.697192f, 0.435982f, 0.132198f, -0.183809f, -0.475682f, -0.724582f, -0.891658f, -0.880755f, -0.621256f, -0.207028f, 0.126680f, 0.218186f, 0.126237f, 0.023051f, -0.005289f, 0.003972f, 0.002567f, -0.004554f, -0.001212f, 0.003755f, 0.000381f, -0.003113f, 0.000002f, 0.002534f, -0.000198f, -0.001991f, 0.000414f, 0.001690f, -0.000399f, -0.001292f, 0.000483f, 0.001055f, -0.000473f, -0.000835f, 0.000423f, 0.000587f, -0.000458f, -0.000496f, 0.000328f, 0.000259f, -0.000368f, -0.000220f, 0.000227f, 0.000038f, -0.000216f, 0.000017f, 0.000113f}, + {-0.169685f, -0.479052f, -0.687718f, -0.745489f, -0.686580f, -0.594247f, -0.494277f, -0.350304f, -0.167242f, -0.017921f, 0.055447f, 0.093676f, 0.144873f, 0.201507f, 0.248863f, 0.316742f, 0.432390f, 0.556193f, 0.607823f, 0.540609f, 0.367689f, 0.137632f, -0.092198f, -0.276561f, -0.400357f, -0.471390f, -0.492220f, -0.455722f, -0.371284f, -0.272306f, -0.186944f, -0.117169f, -0.053347f, 0.007736f, 0.067806f, 0.134068f, 0.208872f, 0.279806f, 0.327290f, 0.337195f, 0.304321f, 0.232209f, 0.134659f, 0.032521f, -0.055207f, -0.116778f, -0.147170f, -0.148130f, -0.129185f, -0.103778f, -0.082038f, -0.067724f, -0.060382f, -0.057666f, -0.056328f, -0.053688f, -0.048964f, -0.042853f, -0.036531f, -0.031221f, -0.027425f, -0.023816f, -0.017450f, -0.005051f, 0.016360f, 0.048944f, 0.092045f, 0.140182f, 0.183898f, 0.212996f, 0.219429f, 0.199052f, 0.152798f, 0.086601f, 0.009223f, -0.070626f, -0.145890f, -0.211261f, -0.262537f, -0.295616f, -0.305743f, -0.288061f, -0.239616f, -0.161593f, -0.060644f, 0.051193f, 0.158413f, 0.245651f, 0.301519f, 0.320779f, 0.304347f, 0.257927f, 0.190207f, 0.111091f, 0.030284f, -0.043708f, + -0.104254f, -0.147026f, -0.170155f, -0.174264f, -0.162372f, -0.139375f, -0.110912f, -0.082026f, -0.056260f, -0.035389f, -0.019595f, -0.007861f, 0.001522f, 0.010463f, 0.020713f, 0.033631f, 0.049942f, 0.069377f, 0.090322f, 0.109823f, 0.124132f, 0.129578f, 0.123456f, 0.104770f, 0.074585f, 0.035726f, -0.008012f, -0.052580f, -0.094098f, -0.129167f, -0.155076f, -0.169720f, -0.171437f, -0.159175f, -0.132888f, -0.093787f, -0.044490f, 0.010781f, 0.066337f, 0.115819f, 0.153314f, 0.174321f, 0.176622f, 0.160923f, 0.130685f, 0.091034f, 0.047547f, 0.005359f, -0.031604f, -0.061171f, -0.082725f, -0.096493f, -0.103137f, -0.103621f, -0.098835f, -0.089236f, -0.075087f, -0.056903f, -0.035467f, -0.011778f, 0.012643f, 0.035685f, 0.055241f, 0.069703f, 0.077958f, 0.079528f, 0.074957f, 0.065658f, 0.053228f, 0.039180f, 0.025001f, 0.011729f, -0.000451f, -0.011772f, -0.022406f, -0.032763f, -0.043533f, -0.054817f, -0.065772f, -0.075306f, -0.082031f, -0.083268f, -0.075551f, -0.056593f, -0.025842f, 0.016050f, 0.065745f, 0.115218f, 0.153630f, 0.171432f, 0.161627f, 0.120156f, 0.050082f, -0.035140f, -0.116350f, -0.176001f, + -0.199580f, -0.176780f, -0.109811f, -0.018038f, 0.072290f, 0.139214f, 0.162279f, 0.123993f, 0.034014f, -0.055650f, -0.086819f, -0.053222f, -0.004112f, 0.015109f, 0.006552f, -0.002295f, -0.000894f, 0.001475f, -0.000301f, -0.001224f, 0.000780f, 0.001739f, 0.000548f, 0.000335f, 0.001638f, 0.001930f, 0.000993f, 0.000852f, 0.001510f, 0.001347f, 0.000509f, 0.000293f, 0.000490f, 0.000108f, -0.000571f, -0.000767f, -0.000749f, -0.001070f, -0.001443f, -0.001463f, -0.001373f, -0.001433f, -0.001436f, -0.001227f, -0.000969f, -0.000757f, -0.000502f, -0.000175f} + }, + { + {-0.169685f, -0.479052f, -0.687718f, -0.745489f, -0.686580f, -0.594247f, -0.494277f, -0.350304f, -0.167242f, -0.017921f, 0.055447f, 0.093676f, 0.144873f, 0.201507f, 0.248863f, 0.316742f, 0.432390f, 0.556193f, 0.607823f, 0.540609f, 0.367689f, 0.137632f, -0.092198f, -0.276561f, -0.400357f, -0.471390f, -0.492220f, -0.455722f, -0.371284f, -0.272306f, -0.186944f, -0.117169f, -0.053347f, 0.007736f, 0.067806f, 0.134068f, 0.208872f, 0.279806f, 0.327290f, 0.337195f, 0.304321f, 0.232209f, 0.134659f, 0.032521f, -0.055207f, -0.116778f, -0.147170f, -0.148130f, -0.129185f, -0.103778f, -0.082038f, -0.067724f, -0.060382f, -0.057666f, -0.056328f, -0.053688f, -0.048964f, -0.042853f, -0.036531f, -0.031221f, -0.027425f, -0.023816f, -0.017450f, -0.005051f, 0.016360f, 0.048944f, 0.092045f, 0.140182f, 0.183898f, 0.212996f, 0.219429f, 0.199052f, 0.152798f, 0.086601f, 0.009223f, -0.070626f, -0.145890f, -0.211261f, -0.262537f, -0.295616f, -0.305743f, -0.288061f, -0.239616f, -0.161593f, -0.060644f, 0.051193f, 0.158413f, 0.245651f, 0.301519f, 0.320779f, 0.304347f, 0.257927f, 0.190207f, 0.111091f, 0.030284f, -0.043708f, + -0.104254f, -0.147026f, -0.170155f, -0.174264f, -0.162372f, -0.139375f, -0.110912f, -0.082026f, -0.056260f, -0.035389f, -0.019595f, -0.007861f, 0.001522f, 0.010463f, 0.020713f, 0.033631f, 0.049942f, 0.069377f, 0.090322f, 0.109823f, 0.124132f, 0.129578f, 0.123456f, 0.104770f, 0.074585f, 0.035726f, -0.008012f, -0.052580f, -0.094098f, -0.129167f, -0.155076f, -0.169720f, -0.171437f, -0.159175f, -0.132888f, -0.093787f, -0.044490f, 0.010781f, 0.066337f, 0.115819f, 0.153314f, 0.174321f, 0.176622f, 0.160923f, 0.130685f, 0.091034f, 0.047547f, 0.005359f, -0.031604f, -0.061171f, -0.082725f, -0.096493f, -0.103137f, -0.103621f, -0.098835f, -0.089236f, -0.075087f, -0.056903f, -0.035467f, -0.011778f, 0.012643f, 0.035685f, 0.055241f, 0.069703f, 0.077958f, 0.079528f, 0.074957f, 0.065658f, 0.053228f, 0.039180f, 0.025001f, 0.011729f, -0.000451f, -0.011772f, -0.022406f, -0.032763f, -0.043533f, -0.054817f, -0.065772f, -0.075306f, -0.082031f, -0.083268f, -0.075551f, -0.056593f, -0.025842f, 0.016050f, 0.065745f, 0.115218f, 0.153630f, 0.171432f, 0.161627f, 0.120156f, 0.050082f, -0.035140f, -0.116350f, -0.176001f, + -0.199580f, -0.176780f, -0.109811f, -0.018038f, 0.072290f, 0.139214f, 0.162279f, 0.123993f, 0.034014f, -0.055650f, -0.086819f, -0.053222f, -0.004112f, 0.015109f, 0.006552f, -0.002295f, -0.000894f, 0.001475f, -0.000301f, -0.001224f, 0.000780f, 0.001739f, 0.000548f, 0.000335f, 0.001638f, 0.001930f, 0.000993f, 0.000852f, 0.001510f, 0.001347f, 0.000509f, 0.000293f, 0.000490f, 0.000108f, -0.000571f, -0.000767f, -0.000749f, -0.001070f, -0.001443f, -0.001463f, -0.001373f, -0.001433f, -0.001436f, -0.001227f, -0.000969f, -0.000757f, -0.000502f, -0.000175f}, + {0.011569f, 0.065153f, 0.150153f, 0.203635f, 0.205376f, 0.173096f, 0.078721f, -0.099478f, -0.273114f, -0.336729f, -0.337980f, -0.407198f, -0.542930f, -0.623111f, -0.612944f, -0.602716f, -0.639352f, -0.670207f, -0.665746f, -0.663210f, -0.669807f, -0.639016f, -0.563037f, -0.492634f, -0.453350f, -0.425831f, -0.411451f, -0.435590f, -0.481467f, -0.493772f, -0.454614f, -0.397179f, -0.343898f, -0.284417f, -0.214324f, -0.148331f, -0.092876f, -0.042119f, -0.001362f, 0.013895f, 0.000977f, -0.028018f, -0.062315f, -0.094962f, -0.116574f, -0.120585f, -0.110386f, -0.094260f, -0.079595f, -0.075577f, -0.092822f, -0.135978f, -0.201707f, -0.283621f, -0.373297f, -0.458913f, -0.530510f, -0.586050f, -0.628047f, -0.657110f, -0.672676f, -0.676154f, -0.668940f, -0.650025f, -0.618410f, -0.575398f, -0.523084f, -0.463279f, -0.398758f, -0.333031f, -0.268412f, -0.205886f, -0.146127f, -0.088932f, -0.032678f, 0.024059f, 0.081192f, 0.138116f, 0.194573f, 0.249639f, 0.300758f, 0.344246f, 0.376397f, 0.394340f, 0.395940f, 0.378322f, 0.336985f, 0.267596f, 0.167862f, 0.036412f, -0.127823f, -0.321958f, -0.536530f, -0.759956f, -0.984191f, -1.203033f, + -1.407738f, -1.589491f, -1.745039f, -1.875334f, -1.979759f, -2.056311f, -2.106550f, -2.135185f, -2.144138f, -2.131027f, -2.094254f, -2.036298f, -1.961129f, -1.871617f, -1.771308f, -1.666459f, -1.563804f, -1.466752f, -1.375328f, -1.289465f, -1.210671f, -1.140298f, -1.077990f, -1.023002f, -0.975880f, -0.937424f, -0.906552f, -0.880558f, -0.857370f, -0.836543f, -0.818233f, -0.802387f, -0.789314f, -0.780403f, -0.777788f, -0.783208f, -0.797242f, -0.819642f, -0.850299f, -0.889299f, -0.935805f, -0.987623f, -1.042663f, -1.100181f, -1.159526f, -1.218087f, -1.271834f, -1.317746f, -1.354190f, -1.378859f, -1.388441f, -1.381422f, -1.359724f, -1.326229f, -1.282128f, -1.228339f, -1.167951f, -1.104670f, -1.039474f, -0.971238f, -0.900258f, -0.828583f, -0.756941f, -0.684007f, -0.609260f, -0.534389f, -0.461087f, -0.389218f, -0.318074f, -0.248322f, -0.181644f, -0.118710f, -0.058387f, 0.000515f, 0.057409f, 0.111358f, 0.163934f, 0.218134f, 0.274375f, 0.331038f, 0.389352f, 0.453139f, 0.522861f, 0.595488f, 0.671219f, 0.753543f, 0.841415f, 0.929099f, 1.014516f, 1.098177f, 1.173021f, 1.225991f, 1.249730f, 1.240661f, 1.187460f, 1.077175f, + 0.910930f, 0.697192f, 0.435982f, 0.132198f, -0.183809f, -0.475682f, -0.724582f, -0.891658f, -0.880755f, -0.621256f, -0.207028f, 0.126680f, 0.218186f, 0.126237f, 0.023051f, -0.005289f, 0.003972f, 0.002567f, -0.004554f, -0.001212f, 0.003755f, 0.000381f, -0.003113f, 0.000002f, 0.002534f, -0.000198f, -0.001991f, 0.000414f, 0.001690f, -0.000399f, -0.001292f, 0.000483f, 0.001055f, -0.000473f, -0.000835f, 0.000423f, 0.000587f, -0.000458f, -0.000496f, 0.000328f, 0.000259f, -0.000368f, -0.000220f, 0.000227f, 0.000038f, -0.000216f, 0.000017f, 0.000113f} + }, + { + {0.014162f, 0.079119f, 0.192373f, 0.273045f, 0.251924f, 0.149637f, 0.020926f, -0.122502f, -0.278057f, -0.388982f, -0.399742f, -0.356867f, -0.363688f, -0.430590f, -0.461817f, -0.411004f, -0.354648f, -0.367414f, -0.410842f, -0.409099f, -0.367287f, -0.341672f, -0.339623f, -0.322888f, -0.283709f, -0.252116f, -0.238516f, -0.220734f, -0.185306f, -0.144497f, -0.113533f, -0.096567f, -0.091951f, -0.092389f, -0.083826f, -0.057563f, -0.019655f, 0.018077f, 0.048708f, 0.067918f, 0.071323f, 0.059246f, 0.036544f, 0.005242f, -0.035854f, -0.084054f, -0.132500f, -0.177134f, -0.218733f, -0.259382f, -0.301515f, -0.348575f, -0.402779f, -0.463490f, -0.528869f, -0.596495f, -0.662478f, -0.723615f, -0.779891f, -0.831486f, -0.875283f, -0.908241f, -0.931583f, -0.947488f, -0.954629f, -0.951018f, -0.937871f, -0.916524f, -0.884692f, -0.839543f, -0.781782f, -0.714062f, -0.638421f, -0.557458f, -0.475213f, -0.395089f, -0.318909f, -0.248274f, -0.184492f, -0.127606f, -0.077917f, -0.037597f, -0.008569f, 0.009628f, 0.017312f, 0.011628f, -0.011443f, -0.053626f, -0.115452f, -0.199369f, -0.308884f, -0.444843f, -0.604506f, -0.784300f, -0.981549f, -1.192357f, + -1.409125f, -1.622569f, -1.826460f, -2.017987f, -2.192991f, -2.344549f, -2.468303f, -2.565362f, -2.636848f, -2.679384f, -2.689877f, -2.671088f, -2.627835f, -2.561060f, -2.470869f, -2.362808f, -2.245776f, -2.125343f, -2.003654f, -1.884247f, -1.772264f, -1.670297f, -1.577576f, -1.493238f, -1.418065f, -1.353009f, -1.297583f, -1.249988f, -1.208402f, -1.171974f, -1.140140f, -1.111192f, -1.083035f, -1.055899f, -1.032625f, -1.015658f, -1.005579f, -1.003175f, -1.010700f, -1.029943f, -1.060636f, -1.101560f, -1.151968f, -1.211363f, -1.278569f, -1.351093f, -1.425253f, -1.497653f, -1.566149f, -1.627979f, -1.677910f, -1.710781f, -1.724954f, -1.720277f, -1.694168f, -1.643923f, -1.571750f, -1.482954f, -1.380137f, -1.263897f, -1.138026f, -1.008765f, -0.879318f, -0.749674f, -0.621380f, -0.498272f, -0.382754f, -0.274712f, -0.174008f, -0.081729f, 0.000918f, 0.073950f, 0.139119f, 0.198670f, 0.253061f, 0.301763f, 0.347006f, 0.393182f, 0.441347f, 0.489362f, 0.538806f, 0.595052f, 0.658904f, 0.726443f, 0.798707f, 0.881537f, 0.974294f, 1.070091f, 1.167737f, 1.269490f, 1.366474f, 1.441595f, 1.485849f, 1.494333f, 1.449955f, 1.333119f, + 1.143665f, 0.890490f, 0.570130f, 0.186750f, -0.219462f, -0.600083f, -0.930100f, -1.155403f, -1.143394f, -0.798347f, -0.249038f, 0.187134f, 0.296878f, 0.165312f, 0.025951f, -0.009102f, 0.005434f, 0.003510f, -0.006460f, -0.001638f, 0.005342f, 0.000501f, -0.004432f, 0.000038f, 0.003617f, -0.000337f, -0.002882f, 0.000630f, 0.002437f, -0.000642f, -0.001890f, 0.000764f, 0.001542f, -0.000762f, -0.001213f, 0.000714f, 0.000864f, -0.000752f, -0.000696f, 0.000595f, 0.000364f, -0.000627f, -0.000266f, 0.000442f, 0.000006f, -0.000404f, 0.000101f, 0.000251f}, + {-0.227017f, -0.610853f, -0.818539f, -0.827113f, -0.686898f, -0.457087f, -0.160740f, 0.181063f, 0.492006f, 0.663270f, 0.645501f, 0.491623f, 0.296597f, 0.115853f, -0.045972f, -0.190366f, -0.298151f, -0.347926f, -0.342693f, -0.305048f, -0.248107f, -0.163349f, -0.044348f, 0.087150f, 0.193393f, 0.255393f, 0.280153f, 0.274932f, 0.233779f, 0.155052f, 0.055515f, -0.042313f, -0.126031f, -0.190062f, -0.227345f, -0.232206f, -0.205038f, -0.149865f, -0.073744f, 0.009150f, 0.080879f, 0.131334f, 0.161815f, 0.176140f, 0.173876f, 0.153042f, 0.113606f, 0.057194f, -0.011688f, -0.082861f, -0.142578f, -0.179538f, -0.187757f, -0.166078f, -0.118901f, -0.056731f, 0.007389f, 0.063005f, 0.104104f, 0.128523f, 0.137613f, 0.134941f, 0.123116f, 0.101857f, 0.069275f, 0.024158f, -0.032605f, -0.096564f, -0.158344f, -0.204423f, -0.220368f, -0.195089f, -0.125489f, -0.020636f, 0.097710f, 0.200646f, 0.261717f, 0.265867f, 0.214146f, 0.122474f, 0.014892f, -0.085103f, -0.160437f, -0.201917f, -0.207135f, -0.178873f, -0.123758f, -0.051585f, 0.024949f, 0.091673f, 0.136311f, 0.152061f, 0.139120f, 0.103823f, 0.056376f, 0.007840f, + -0.032834f, -0.060514f, -0.073885f, -0.074522f, -0.065753f, -0.051457f, -0.035012f, -0.018814f, -0.004264f, 0.008156f, 0.018669f, 0.027701f, 0.035397f, 0.041400f, 0.044773f, 0.044029f, 0.037643f, 0.024948f, 0.006808f, -0.014330f, -0.034848f, -0.050700f, -0.058465f, -0.056356f, -0.044689f, -0.025767f, -0.003347f, 0.018238f, 0.035205f, 0.045211f, 0.047611f, 0.043172f, 0.033577f, 0.020863f, 0.006937f, -0.006651f, -0.018658f, -0.028044f, -0.033981f, -0.035885f, -0.033444f, -0.026747f, -0.016470f, -0.003905f, 0.009212f, 0.020942f, 0.029423f, 0.033278f, 0.032010f, 0.026116f, 0.016859f, 0.005952f, -0.004786f, -0.013832f, -0.020263f, -0.023725f, -0.024216f, -0.022003f, -0.017612f, -0.011677f, -0.004775f, 0.002521f, 0.009563f, 0.015703f, 0.020359f, 0.022925f, 0.022827f, 0.019784f, 0.013935f, 0.005753f, -0.003874f, -0.013545f, -0.021660f, -0.026897f, -0.028311f, -0.025374f, -0.018350f, -0.008412f, 0.002946f, 0.014306f, 0.024069f, 0.030568f, 0.032809f, 0.030492f, 0.023239f, 0.010889f, -0.005219f, -0.022346f, -0.037579f, -0.047634f, -0.048151f, -0.035867f, -0.012072f, 0.017486f, 0.045290f, 0.062856f, + 0.061692f, 0.038856f, 0.001862f, -0.035283f, -0.059860f, -0.062195f, -0.036787f, 0.007937f, 0.044601f, 0.046634f, 0.017252f, -0.012271f, -0.017935f, -0.006337f, 0.002146f, 0.001029f, -0.001521f, -0.000459f, 0.000817f, -0.000067f, -0.000660f, 0.000353f, 0.000950f, 0.000276f, -0.000030f, 0.000569f, 0.000705f, 0.000053f, -0.000227f, 0.000069f, -0.000002f, -0.000506f, -0.000627f, -0.000349f, -0.000332f, -0.000528f, -0.000394f, -0.000037f, 0.000086f, 0.000082f, 0.000281f, 0.000519f, 0.000524f, 0.000449f, 0.000475f, 0.000435f, 0.000230f, 0.000050f} + }, + { + {-0.227017f, -0.610853f, -0.818539f, -0.827113f, -0.686898f, -0.457087f, -0.160740f, 0.181063f, 0.492006f, 0.663270f, 0.645501f, 0.491623f, 0.296597f, 0.115853f, -0.045972f, -0.190366f, -0.298151f, -0.347926f, -0.342693f, -0.305048f, -0.248107f, -0.163349f, -0.044348f, 0.087150f, 0.193393f, 0.255393f, 0.280153f, 0.274932f, 0.233779f, 0.155052f, 0.055515f, -0.042313f, -0.126031f, -0.190062f, -0.227345f, -0.232206f, -0.205038f, -0.149865f, -0.073744f, 0.009150f, 0.080879f, 0.131334f, 0.161815f, 0.176140f, 0.173876f, 0.153042f, 0.113606f, 0.057194f, -0.011688f, -0.082861f, -0.142578f, -0.179538f, -0.187757f, -0.166078f, -0.118901f, -0.056731f, 0.007389f, 0.063005f, 0.104104f, 0.128523f, 0.137613f, 0.134941f, 0.123116f, 0.101857f, 0.069275f, 0.024158f, -0.032605f, -0.096564f, -0.158344f, -0.204423f, -0.220368f, -0.195089f, -0.125489f, -0.020636f, 0.097710f, 0.200646f, 0.261717f, 0.265867f, 0.214146f, 0.122474f, 0.014892f, -0.085103f, -0.160437f, -0.201917f, -0.207135f, -0.178873f, -0.123758f, -0.051585f, 0.024949f, 0.091673f, 0.136311f, 0.152061f, 0.139120f, 0.103823f, 0.056376f, 0.007840f, + -0.032834f, -0.060514f, -0.073885f, -0.074522f, -0.065753f, -0.051457f, -0.035012f, -0.018814f, -0.004264f, 0.008156f, 0.018669f, 0.027701f, 0.035397f, 0.041400f, 0.044773f, 0.044029f, 0.037643f, 0.024948f, 0.006808f, -0.014330f, -0.034848f, -0.050700f, -0.058465f, -0.056356f, -0.044689f, -0.025767f, -0.003347f, 0.018238f, 0.035205f, 0.045211f, 0.047611f, 0.043172f, 0.033577f, 0.020863f, 0.006937f, -0.006651f, -0.018658f, -0.028044f, -0.033981f, -0.035885f, -0.033444f, -0.026747f, -0.016470f, -0.003905f, 0.009212f, 0.020942f, 0.029423f, 0.033278f, 0.032010f, 0.026116f, 0.016859f, 0.005952f, -0.004786f, -0.013832f, -0.020263f, -0.023725f, -0.024216f, -0.022003f, -0.017612f, -0.011677f, -0.004775f, 0.002521f, 0.009563f, 0.015703f, 0.020359f, 0.022925f, 0.022827f, 0.019784f, 0.013935f, 0.005753f, -0.003874f, -0.013545f, -0.021660f, -0.026897f, -0.028311f, -0.025374f, -0.018350f, -0.008412f, 0.002946f, 0.014306f, 0.024069f, 0.030568f, 0.032809f, 0.030492f, 0.023239f, 0.010889f, -0.005219f, -0.022346f, -0.037579f, -0.047634f, -0.048151f, -0.035867f, -0.012072f, 0.017486f, 0.045290f, 0.062856f, + 0.061692f, 0.038856f, 0.001862f, -0.035283f, -0.059860f, -0.062195f, -0.036787f, 0.007937f, 0.044601f, 0.046634f, 0.017252f, -0.012271f, -0.017935f, -0.006337f, 0.002146f, 0.001029f, -0.001521f, -0.000459f, 0.000817f, -0.000067f, -0.000660f, 0.000353f, 0.000950f, 0.000276f, -0.000030f, 0.000569f, 0.000705f, 0.000053f, -0.000227f, 0.000069f, -0.000002f, -0.000506f, -0.000627f, -0.000349f, -0.000332f, -0.000528f, -0.000394f, -0.000037f, 0.000086f, 0.000082f, 0.000281f, 0.000519f, 0.000524f, 0.000449f, 0.000475f, 0.000435f, 0.000230f, 0.000050f}, + {0.014162f, 0.079119f, 0.192373f, 0.273045f, 0.251924f, 0.149637f, 0.020926f, -0.122502f, -0.278057f, -0.388982f, -0.399742f, -0.356867f, -0.363688f, -0.430590f, -0.461817f, -0.411004f, -0.354648f, -0.367414f, -0.410842f, -0.409099f, -0.367287f, -0.341672f, -0.339623f, -0.322888f, -0.283709f, -0.252116f, -0.238516f, -0.220734f, -0.185306f, -0.144497f, -0.113533f, -0.096567f, -0.091951f, -0.092389f, -0.083826f, -0.057563f, -0.019655f, 0.018077f, 0.048708f, 0.067918f, 0.071323f, 0.059246f, 0.036544f, 0.005242f, -0.035854f, -0.084054f, -0.132500f, -0.177134f, -0.218733f, -0.259382f, -0.301515f, -0.348575f, -0.402779f, -0.463490f, -0.528869f, -0.596495f, -0.662478f, -0.723615f, -0.779891f, -0.831486f, -0.875283f, -0.908241f, -0.931583f, -0.947488f, -0.954629f, -0.951018f, -0.937871f, -0.916524f, -0.884692f, -0.839543f, -0.781782f, -0.714062f, -0.638421f, -0.557458f, -0.475213f, -0.395089f, -0.318909f, -0.248274f, -0.184492f, -0.127606f, -0.077917f, -0.037597f, -0.008569f, 0.009628f, 0.017312f, 0.011628f, -0.011443f, -0.053626f, -0.115452f, -0.199369f, -0.308884f, -0.444843f, -0.604506f, -0.784300f, -0.981549f, -1.192357f, + -1.409125f, -1.622569f, -1.826460f, -2.017987f, -2.192991f, -2.344549f, -2.468303f, -2.565362f, -2.636848f, -2.679384f, -2.689877f, -2.671088f, -2.627835f, -2.561060f, -2.470869f, -2.362808f, -2.245776f, -2.125343f, -2.003654f, -1.884247f, -1.772264f, -1.670297f, -1.577576f, -1.493238f, -1.418065f, -1.353009f, -1.297583f, -1.249988f, -1.208402f, -1.171974f, -1.140140f, -1.111192f, -1.083035f, -1.055899f, -1.032625f, -1.015658f, -1.005579f, -1.003175f, -1.010700f, -1.029943f, -1.060636f, -1.101560f, -1.151968f, -1.211363f, -1.278569f, -1.351093f, -1.425253f, -1.497653f, -1.566149f, -1.627979f, -1.677910f, -1.710781f, -1.724954f, -1.720277f, -1.694168f, -1.643923f, -1.571750f, -1.482954f, -1.380137f, -1.263897f, -1.138026f, -1.008765f, -0.879318f, -0.749674f, -0.621380f, -0.498272f, -0.382754f, -0.274712f, -0.174008f, -0.081729f, 0.000918f, 0.073950f, 0.139119f, 0.198670f, 0.253061f, 0.301763f, 0.347006f, 0.393182f, 0.441347f, 0.489362f, 0.538806f, 0.595052f, 0.658904f, 0.726443f, 0.798707f, 0.881537f, 0.974294f, 1.070091f, 1.167737f, 1.269490f, 1.366474f, 1.441595f, 1.485849f, 1.494333f, 1.449955f, 1.333119f, + 1.143665f, 0.890490f, 0.570130f, 0.186750f, -0.219462f, -0.600083f, -0.930100f, -1.155403f, -1.143394f, -0.798347f, -0.249038f, 0.187134f, 0.296878f, 0.165312f, 0.025951f, -0.009102f, 0.005434f, 0.003510f, -0.006460f, -0.001638f, 0.005342f, 0.000501f, -0.004432f, 0.000038f, 0.003617f, -0.000337f, -0.002882f, 0.000630f, 0.002437f, -0.000642f, -0.001890f, 0.000764f, 0.001542f, -0.000762f, -0.001213f, 0.000714f, 0.000864f, -0.000752f, -0.000696f, 0.000595f, 0.000364f, -0.000627f, -0.000266f, 0.000442f, 0.000006f, -0.000404f, 0.000101f, 0.000251f} + }, + { + {0.042732f, 0.113314f, 0.176202f, 0.252685f, 0.281884f, 0.174262f, -0.028902f, -0.180587f, -0.233986f, -0.287382f, -0.386130f, -0.425463f, -0.325835f, -0.178382f, -0.114461f, -0.125567f, -0.120866f, -0.091304f, -0.099788f, -0.149408f, -0.175401f, -0.160079f, -0.161819f, -0.218211f, -0.289828f, -0.318343f, -0.292465f, -0.240485f, -0.191978f, -0.159418f, -0.133666f, -0.090469f, -0.019098f, 0.054253f, 0.088015f, 0.069071f, 0.020080f, -0.033141f, -0.083529f, -0.132397f, -0.175396f, -0.206306f, -0.226074f, -0.242406f, -0.263892f, -0.296267f, -0.341457f, -0.399032f, -0.469188f, -0.552919f, -0.648193f, -0.748197f, -0.845109f, -0.933962f, -1.011947f, -1.076813f, -1.128569f, -1.171494f, -1.212173f, -1.255672f, -1.304491f, -1.359954f, -1.422038f, -1.487064f, -1.547033f, -1.592617f, -1.616640f, -1.614662f, -1.584205f, -1.525739f, -1.444021f, -1.346192f, -1.237997f, -1.123060f, -1.005499f, -0.890943f, -0.784138f, -0.686938f, -0.599442f, -0.522145f, -0.456501f, -0.404312f, -0.367214f, -0.346412f, -0.342532f, -0.355339f, -0.382875f, -0.421110f, -0.466097f, -0.517365f, -0.578173f, -0.651999f, -0.740613f, -0.846331f, -0.973383f, -1.124324f, + -1.296390f, -1.483783f, -1.682030f, -1.886821f, -2.089453f, -2.277670f, -2.441976f, -2.578074f, -2.682664f, -2.751303f, -2.783009f, -2.783561f, -2.760778f, -2.718619f, -2.658947f, -2.586450f, -2.507126f, -2.422614f, -2.330300f, -2.229205f, -2.122072f, -2.011250f, -1.896456f, -1.778273f, -1.660862f, -1.549002f, -1.444261f, -1.345971f, -1.254532f, -1.171530f, -1.097176f, -1.029833f, -0.968588f, -0.914945f, -0.871217f, -0.838134f, -0.814965f, -0.801436f, -0.798271f, -0.805721f, -0.822625f, -0.847489f, -0.879927f, -0.920297f, -0.968011f, -1.020724f, -1.075381f, -1.129486f, -1.180488f, -1.223986f, -1.253993f, -1.265791f, -1.257367f, -1.227234f, -1.172823f, -1.093165f, -0.991598f, -0.873296f, -0.741394f, -0.598215f, -0.448782f, -0.299472f, -0.153850f, -0.013150f, 0.119688f, 0.239921f, 0.344752f, 0.434094f, 0.507626f, 0.563828f, 0.602225f, 0.624544f, 0.633321f, 0.630521f, 0.617681f, 0.596899f, 0.571519f, 0.545119f, 0.519474f, 0.494984f, 0.473597f, 0.458663f, 0.451052f, 0.449131f, 0.453874f, 0.469249f, 0.496098f, 0.531445f, 0.575166f, 0.629762f, 0.691627f, 0.750864f, 0.800872f, 0.837878f, 0.850653f, 0.823774f, + 0.751946f, 0.637275f, 0.475061f, 0.262253f, 0.017602f, -0.229919f, -0.464480f, -0.657131f, -0.724380f, -0.581353f, -0.268217f, 0.032040f, 0.155663f, 0.110828f, 0.028755f, -0.002038f, 0.003059f, 0.003053f, -0.003352f, -0.001791f, 0.002885f, 0.000944f, -0.002489f, -0.000503f, 0.002099f, 0.000264f, -0.001661f, 0.000033f, 0.001463f, -0.000069f, -0.001127f, 0.000210f, 0.000935f, -0.000257f, -0.000759f, 0.000241f, 0.000524f, -0.000328f, -0.000468f, 0.000216f, 0.000230f, -0.000297f, -0.000215f, 0.000167f, 0.000034f, -0.000183f, 0.000005f, 0.000090f}, + {-0.250909f, -0.661336f, -0.861225f, -0.846916f, -0.664218f, -0.342701f, 0.076872f, 0.488737f, 0.753326f, 0.794678f, 0.644668f, 0.387694f, 0.087110f, -0.222402f, -0.495680f, -0.664775f, -0.675318f, -0.525707f, -0.265768f, 0.036302f, 0.319925f, 0.533105f, 0.627711f, 0.573382f, 0.381856f, 0.110168f, -0.167080f, -0.388791f, -0.515916f, -0.526706f, -0.420116f, -0.223812f, 0.011549f, 0.230567f, 0.386430f, 0.446123f, 0.398575f, 0.263648f, 0.086018f, -0.086830f, -0.222117f, -0.302172f, -0.318170f, -0.270419f, -0.172076f, -0.047006f, 0.077560f, 0.176959f, 0.232529f, 0.235587f, 0.190743f, 0.114082f, 0.026025f, -0.055703f, -0.118661f, -0.155078f, -0.161686f, -0.140558f, -0.098598f, -0.044962f, 0.011333f, 0.062126f, 0.100520f, 0.122077f, 0.125459f, 0.111411f, 0.081471f, 0.037876f, -0.015751f, -0.073456f, -0.125593f, -0.158578f, -0.158714f, -0.119549f, -0.047405f, 0.039448f, 0.117161f, 0.164530f, 0.170112f, 0.135882f, 0.075272f, 0.006299f, -0.055781f, -0.101955f, -0.128540f, -0.134431f, -0.119079f, -0.082497f, -0.027309f, 0.038596f, 0.101279f, 0.143737f, 0.152211f, 0.122702f, 0.063597f, -0.007521f, + -0.071051f, -0.112331f, -0.125169f, -0.111443f, -0.078301f, -0.034928f, 0.009839f, 0.048818f, 0.077025f, 0.091668f, 0.091678f, 0.077234f, 0.049800f, 0.012550f, -0.029326f, -0.068680f, -0.097051f, -0.106411f, -0.092004f, -0.054995f, -0.003302f, 0.050087f, 0.090874f, 0.108187f, 0.098374f, 0.065929f, 0.021166f, -0.023770f, -0.058591f, -0.077199f, -0.078302f, -0.064504f, -0.040631f, -0.012245f, 0.015405f, 0.038112f, 0.053035f, 0.058570f, 0.054242f, 0.040853f, 0.020584f, -0.003249f, -0.026598f, -0.045207f, -0.055424f, -0.055094f, -0.044048f, -0.024168f, 0.000785f, 0.025763f, 0.045560f, 0.056006f, 0.054767f, 0.041927f, 0.020280f, -0.005230f, -0.028930f, -0.045847f, -0.052644f, -0.048279f, -0.034253f, -0.014018f, 0.008118f, 0.027817f, 0.041328f, 0.046258f, 0.042077f, 0.029925f, 0.012195f, -0.007720f, -0.025950f, -0.039008f, -0.044357f, -0.040660f, -0.028307f, -0.009797f, 0.010916f, 0.029525f, 0.041957f, 0.045064f, 0.037975f, 0.022610f, 0.002456f, -0.018582f, -0.036115f, -0.045810f, -0.045173f, -0.034131f, -0.014018f, 0.012025f, 0.037399f, 0.053505f, 0.054220f, 0.038177f, 0.008264f, -0.027360f, + -0.054784f, -0.060832f, -0.042426f, -0.007657f, 0.030216f, 0.055369f, 0.051860f, 0.017076f, -0.025749f, -0.042575f, -0.023699f, 0.005650f, 0.016563f, 0.008110f, -0.000864f, -0.000797f, 0.001703f, 0.000500f, -0.001538f, -0.001141f, -0.000404f, -0.001262f, -0.001848f, -0.000816f, 0.000201f, 0.000154f, 0.000304f, 0.001238f, 0.001720f, 0.001244f, 0.000819f, 0.000784f, 0.000347f, -0.000573f, -0.001141f, -0.001202f, -0.001315f, -0.001446f, -0.001099f, -0.000403f, 0.000147f, 0.000578f, 0.001107f, 0.001494f, 0.001472f, 0.001216f, 0.000888f, 0.000349f} + }, + { + {-0.250909f, -0.661336f, -0.861225f, -0.846916f, -0.664218f, -0.342701f, 0.076872f, 0.488737f, 0.753326f, 0.794678f, 0.644668f, 0.387694f, 0.087110f, -0.222402f, -0.495680f, -0.664775f, -0.675318f, -0.525707f, -0.265768f, 0.036302f, 0.319925f, 0.533105f, 0.627711f, 0.573382f, 0.381856f, 0.110168f, -0.167080f, -0.388791f, -0.515916f, -0.526706f, -0.420116f, -0.223812f, 0.011549f, 0.230567f, 0.386430f, 0.446123f, 0.398575f, 0.263648f, 0.086018f, -0.086830f, -0.222117f, -0.302172f, -0.318170f, -0.270419f, -0.172076f, -0.047006f, 0.077560f, 0.176959f, 0.232529f, 0.235587f, 0.190743f, 0.114082f, 0.026025f, -0.055703f, -0.118661f, -0.155078f, -0.161686f, -0.140558f, -0.098598f, -0.044962f, 0.011333f, 0.062126f, 0.100520f, 0.122077f, 0.125459f, 0.111411f, 0.081471f, 0.037876f, -0.015751f, -0.073456f, -0.125593f, -0.158578f, -0.158714f, -0.119549f, -0.047405f, 0.039448f, 0.117161f, 0.164530f, 0.170112f, 0.135882f, 0.075272f, 0.006299f, -0.055781f, -0.101955f, -0.128540f, -0.134431f, -0.119079f, -0.082497f, -0.027309f, 0.038596f, 0.101279f, 0.143737f, 0.152211f, 0.122702f, 0.063597f, -0.007521f, + -0.071051f, -0.112331f, -0.125169f, -0.111443f, -0.078301f, -0.034928f, 0.009839f, 0.048818f, 0.077025f, 0.091668f, 0.091678f, 0.077234f, 0.049800f, 0.012550f, -0.029326f, -0.068680f, -0.097051f, -0.106411f, -0.092004f, -0.054995f, -0.003302f, 0.050087f, 0.090874f, 0.108187f, 0.098374f, 0.065929f, 0.021166f, -0.023770f, -0.058591f, -0.077199f, -0.078302f, -0.064504f, -0.040631f, -0.012245f, 0.015405f, 0.038112f, 0.053035f, 0.058570f, 0.054242f, 0.040853f, 0.020584f, -0.003249f, -0.026598f, -0.045207f, -0.055424f, -0.055094f, -0.044048f, -0.024168f, 0.000785f, 0.025763f, 0.045560f, 0.056006f, 0.054767f, 0.041927f, 0.020280f, -0.005230f, -0.028930f, -0.045847f, -0.052644f, -0.048279f, -0.034253f, -0.014018f, 0.008118f, 0.027817f, 0.041328f, 0.046258f, 0.042077f, 0.029925f, 0.012195f, -0.007720f, -0.025950f, -0.039008f, -0.044357f, -0.040660f, -0.028307f, -0.009797f, 0.010916f, 0.029525f, 0.041957f, 0.045064f, 0.037975f, 0.022610f, 0.002456f, -0.018582f, -0.036115f, -0.045810f, -0.045173f, -0.034131f, -0.014018f, 0.012025f, 0.037399f, 0.053505f, 0.054220f, 0.038177f, 0.008264f, -0.027360f, + -0.054784f, -0.060832f, -0.042426f, -0.007657f, 0.030216f, 0.055369f, 0.051860f, 0.017076f, -0.025749f, -0.042575f, -0.023699f, 0.005650f, 0.016563f, 0.008110f, -0.000864f, -0.000797f, 0.001703f, 0.000500f, -0.001538f, -0.001141f, -0.000404f, -0.001262f, -0.001848f, -0.000816f, 0.000201f, 0.000154f, 0.000304f, 0.001238f, 0.001720f, 0.001244f, 0.000819f, 0.000784f, 0.000347f, -0.000573f, -0.001141f, -0.001202f, -0.001315f, -0.001446f, -0.001099f, -0.000403f, 0.000147f, 0.000578f, 0.001107f, 0.001494f, 0.001472f, 0.001216f, 0.000888f, 0.000349f}, + {0.042732f, 0.113314f, 0.176202f, 0.252685f, 0.281884f, 0.174262f, -0.028902f, -0.180587f, -0.233986f, -0.287382f, -0.386130f, -0.425463f, -0.325835f, -0.178382f, -0.114461f, -0.125567f, -0.120866f, -0.091304f, -0.099788f, -0.149408f, -0.175401f, -0.160079f, -0.161819f, -0.218211f, -0.289828f, -0.318343f, -0.292465f, -0.240485f, -0.191978f, -0.159418f, -0.133666f, -0.090469f, -0.019098f, 0.054253f, 0.088015f, 0.069071f, 0.020080f, -0.033141f, -0.083529f, -0.132397f, -0.175396f, -0.206306f, -0.226074f, -0.242406f, -0.263892f, -0.296267f, -0.341457f, -0.399032f, -0.469188f, -0.552919f, -0.648193f, -0.748197f, -0.845109f, -0.933962f, -1.011947f, -1.076813f, -1.128569f, -1.171494f, -1.212173f, -1.255672f, -1.304491f, -1.359954f, -1.422038f, -1.487064f, -1.547033f, -1.592617f, -1.616640f, -1.614662f, -1.584205f, -1.525739f, -1.444021f, -1.346192f, -1.237997f, -1.123060f, -1.005499f, -0.890943f, -0.784138f, -0.686938f, -0.599442f, -0.522145f, -0.456501f, -0.404312f, -0.367214f, -0.346412f, -0.342532f, -0.355339f, -0.382875f, -0.421110f, -0.466097f, -0.517365f, -0.578173f, -0.651999f, -0.740613f, -0.846331f, -0.973383f, -1.124324f, + -1.296390f, -1.483783f, -1.682030f, -1.886821f, -2.089453f, -2.277670f, -2.441976f, -2.578074f, -2.682664f, -2.751303f, -2.783009f, -2.783561f, -2.760778f, -2.718619f, -2.658947f, -2.586450f, -2.507126f, -2.422614f, -2.330300f, -2.229205f, -2.122072f, -2.011250f, -1.896456f, -1.778273f, -1.660862f, -1.549002f, -1.444261f, -1.345971f, -1.254532f, -1.171530f, -1.097176f, -1.029833f, -0.968588f, -0.914945f, -0.871217f, -0.838134f, -0.814965f, -0.801436f, -0.798271f, -0.805721f, -0.822625f, -0.847489f, -0.879927f, -0.920297f, -0.968011f, -1.020724f, -1.075381f, -1.129486f, -1.180488f, -1.223986f, -1.253993f, -1.265791f, -1.257367f, -1.227234f, -1.172823f, -1.093165f, -0.991598f, -0.873296f, -0.741394f, -0.598215f, -0.448782f, -0.299472f, -0.153850f, -0.013150f, 0.119688f, 0.239921f, 0.344752f, 0.434094f, 0.507626f, 0.563828f, 0.602225f, 0.624544f, 0.633321f, 0.630521f, 0.617681f, 0.596899f, 0.571519f, 0.545119f, 0.519474f, 0.494984f, 0.473597f, 0.458663f, 0.451052f, 0.449131f, 0.453874f, 0.469249f, 0.496098f, 0.531445f, 0.575166f, 0.629762f, 0.691627f, 0.750864f, 0.800872f, 0.837878f, 0.850653f, 0.823774f, + 0.751946f, 0.637275f, 0.475061f, 0.262253f, 0.017602f, -0.229919f, -0.464480f, -0.657131f, -0.724380f, -0.581353f, -0.268217f, 0.032040f, 0.155663f, 0.110828f, 0.028755f, -0.002038f, 0.003059f, 0.003053f, -0.003352f, -0.001791f, 0.002885f, 0.000944f, -0.002489f, -0.000503f, 0.002099f, 0.000264f, -0.001661f, 0.000033f, 0.001463f, -0.000069f, -0.001127f, 0.000210f, 0.000935f, -0.000257f, -0.000759f, 0.000241f, 0.000524f, -0.000328f, -0.000468f, 0.000216f, 0.000230f, -0.000297f, -0.000215f, 0.000167f, 0.000034f, -0.000183f, 0.000005f, 0.000090f} + }, + { + {-0.008117f, -0.029088f, -0.057048f, -0.081735f, -0.092189f, -0.085100f, -0.046258f, 0.061013f, 0.247665f, 0.439587f, 0.518097f, 0.436893f, 0.258432f, 0.069209f, -0.085972f, -0.179131f, -0.182780f, -0.110632f, -0.018595f, 0.061348f, 0.137561f, 0.195698f, 0.184660f, 0.090981f, -0.029833f, -0.119427f, -0.163497f, -0.160991f, -0.107102f, -0.026915f, 0.027637f, 0.034786f, 0.014084f, -0.027320f, -0.111107f, -0.240023f, -0.378923f, -0.496585f, -0.591277f, -0.668375f, -0.726093f, -0.769534f, -0.811105f, -0.852336f, -0.884973f, -0.908307f, -0.928671f, -0.947596f, -0.965411f, -0.988396f, -1.019242f, -1.049599f, -1.072930f, -1.095057f, -1.123669f, -1.157984f, -1.195511f, -1.238117f, -1.285188f, -1.330071f, -1.368128f, -1.401405f, -1.433429f, -1.465837f, -1.500686f, -1.540528f, -1.585844f, -1.634999f, -1.684816f, -1.729881f, -1.764985f, -1.789120f, -1.803259f, -1.805236f, -1.792176f, -1.766414f, -1.732839f, -1.691843f, -1.640852f, -1.580948f, -1.516199f, -1.448521f, -1.378711f, -1.310591f, -1.249109f, -1.195647f, -1.148671f, -1.107399f, -1.072096f, -1.042222f, -1.016132f, -0.991629f, -0.966575f, -0.940263f, -0.913765f, -0.887830f, + -0.861818f, -0.835753f, -0.811153f, -0.788325f, -0.765201f, -0.740195f, -0.713773f, -0.686076f, -0.655627f, -0.621644f, -0.585391f, -0.548400f, -0.511253f, -0.474595f, -0.439641f, -0.407373f, -0.378310f, -0.352841f, -0.330952f, -0.312187f, -0.296447f, -0.283965f, -0.274268f, -0.266290f, -0.259673f, -0.254827f, -0.251774f, -0.250098f, -0.249925f, -0.251995f, -0.257051f, -0.265902f, -0.279634f, -0.299233f, -0.325552f, -0.359646f, -0.402100f, -0.451970f, -0.507511f, -0.567748f, -0.632019f, -0.698338f, -0.763997f, -0.827724f, -0.889545f, -0.948515f, -1.002452f, -1.050350f, -1.093294f, -1.132284f, -1.166691f, -1.195985f, -1.221676f, -1.245932f, -1.269000f, -1.289688f, -1.308062f, -1.325687f, -1.342928f, -1.357937f, -1.369096f, -1.376762f, -1.381406f, -1.381343f, -1.373935f, -1.358365f, -1.335436f, -1.304589f, -1.262934f, -1.208217f, -1.141032f, -1.062204f, -0.969496f, -0.859997f, -0.734719f, -0.596717f, -0.445375f, -0.277897f, -0.096215f, 0.094002f, 0.291185f, 0.497134f, 0.708325f, 0.916667f, 1.119036f, 1.316063f, 1.501707f, 1.665244f, 1.802397f, 1.911586f, 1.981297f, 1.995663f, 1.949047f, 1.839685f, 1.656456f, 1.391696f, + 1.058526f, 0.675467f, 0.249613f, -0.199264f, -0.619582f, -0.963618f, -1.208061f, -1.294816f, -1.109269f, -0.622127f, -0.037804f, 0.321944f, 0.325104f, 0.139499f, 0.005477f, -0.011392f, 0.006042f, 0.001000f, -0.006817f, 0.000382f, 0.005296f, -0.001059f, -0.004165f, 0.001245f, 0.003241f, -0.001280f, -0.002498f, 0.001306f, 0.002025f, -0.001148f, -0.001520f, 0.001099f, 0.001208f, -0.000964f, -0.000921f, 0.000826f, 0.000648f, -0.000761f, -0.000515f, 0.000575f, 0.000271f, -0.000542f, -0.000203f, 0.000365f, 0.000014f, -0.000310f, 0.000064f, 0.000181f}, + {-0.129981f, -0.372476f, -0.578529f, -0.729243f, -0.764475f, -0.635793f, -0.411234f, -0.258736f, -0.302102f, -0.525369f, -0.805126f, -0.991322f, -0.983991f, -0.803176f, -0.584723f, -0.458600f, -0.436987f, -0.451679f, -0.459616f, -0.451677f, -0.395154f, -0.251867f, -0.050784f, 0.123344f, 0.221870f, 0.269667f, 0.313652f, 0.376737f, 0.462841f, 0.567567f, 0.673170f, 0.754338f, 0.795107f, 0.792591f, 0.752470f, 0.691691f, 0.634947f, 0.595069f, 0.562305f, 0.519235f, 0.458575f, 0.383012f, 0.298227f, 0.211056f, 0.126529f, 0.043347f, -0.042514f, -0.130277f, -0.215859f, -0.298302f, -0.378918f, -0.456881f, -0.530468f, -0.598896f, -0.658825f, -0.703316f, -0.727822f, -0.733246f, -0.721133f, -0.690755f, -0.642644f, -0.580117f, -0.505916f, -0.421525f, -0.330087f, -0.235562f, -0.138750f, -0.037980f, 0.066169f, 0.169625f, 0.267531f, 0.355691f, 0.430568f, 0.490492f, 0.536392f, 0.569778f, 0.590566f, 0.597566f, 0.590084f, 0.568477f, 0.533880f, 0.487697f, 0.431144f, 0.365726f, 0.294260f, 0.220525f, 0.147743f, 0.078228f, 0.014043f, -0.043456f, -0.094326f, -0.138832f, -0.176068f, -0.205120f, -0.226671f, -0.241986f, + -0.251293f, -0.254596f, -0.252994f, -0.247846f, -0.239708f, -0.229246f, -0.218093f, -0.207780f, -0.198730f, -0.190983f, -0.184906f, -0.180621f, -0.177602f, -0.175210f, -0.173034f, -0.170646f, -0.167447f, -0.162637f, -0.155080f, -0.143537f, -0.127170f, -0.105418f, -0.077693f, -0.043897f, -0.004918f, 0.038190f, 0.084983f, 0.134821f, 0.186035f, 0.236843f, 0.286214f, 0.332895f, 0.374623f, 0.409400f, 0.436550f, 0.455532f, 0.464788f, 0.462789f, 0.449137f, 0.423624f, 0.385300f, 0.333570f, 0.269292f, 0.193801f, 0.107779f, 0.012194f, -0.090333f, -0.196122f, -0.301746f, -0.403692f, -0.497310f, -0.577424f, -0.639930f, -0.681870f, -0.700365f, -0.693007f, -0.659496f, -0.601723f, -0.522170f, -0.423547f, -0.310025f, -0.187155f, -0.060052f, 0.067102f, 0.189708f, 0.302691f, 0.402232f, 0.486145f, 0.552331f, 0.598446f, 0.623264f, 0.626838f, 0.609193f, 0.570294f, 0.511336f, 0.434835f, 0.343621f, 0.240782f, 0.130231f, 0.016430f, -0.096110f, -0.202773f, -0.299055f, -0.381032f, -0.445029f, -0.487486f, -0.506123f, -0.500243f, -0.469027f, -0.411517f, -0.329438f, -0.227615f, -0.111000f, 0.014761f, 0.139062f, 0.247906f, + 0.330788f, 0.380428f, 0.386990f, 0.342751f, 0.253257f, 0.133183f, -0.006044f, -0.145689f, -0.238420f, -0.230859f, -0.127035f, -0.005841f, 0.051207f, 0.037489f, 0.006530f, -0.003104f, 0.001464f, 0.002113f, -0.000555f, 0.000795f, 0.003689f, 0.003262f, 0.002035f, 0.003451f, 0.005181f, 0.004704f, 0.004097f, 0.005202f, 0.006175f, 0.005667f, 0.005284f, 0.005991f, 0.006394f, 0.005824f, 0.005470f, 0.005772f, 0.005730f, 0.005088f, 0.004674f, 0.004609f, 0.004237f, 0.003551f, 0.003059f, 0.002698f, 0.002121f, 0.001454f, 0.000907f, 0.000332f} + }, + { + {-0.129981f, -0.372476f, -0.578529f, -0.729243f, -0.764475f, -0.635793f, -0.411234f, -0.258736f, -0.302102f, -0.525369f, -0.805126f, -0.991322f, -0.983991f, -0.803176f, -0.584723f, -0.458600f, -0.436987f, -0.451679f, -0.459616f, -0.451677f, -0.395154f, -0.251867f, -0.050784f, 0.123344f, 0.221870f, 0.269667f, 0.313652f, 0.376737f, 0.462841f, 0.567567f, 0.673170f, 0.754338f, 0.795107f, 0.792591f, 0.752470f, 0.691691f, 0.634947f, 0.595069f, 0.562305f, 0.519235f, 0.458575f, 0.383012f, 0.298227f, 0.211056f, 0.126529f, 0.043347f, -0.042514f, -0.130277f, -0.215859f, -0.298302f, -0.378918f, -0.456881f, -0.530468f, -0.598896f, -0.658825f, -0.703316f, -0.727822f, -0.733246f, -0.721133f, -0.690755f, -0.642644f, -0.580117f, -0.505916f, -0.421525f, -0.330087f, -0.235562f, -0.138750f, -0.037980f, 0.066169f, 0.169625f, 0.267531f, 0.355691f, 0.430568f, 0.490492f, 0.536392f, 0.569778f, 0.590566f, 0.597566f, 0.590084f, 0.568477f, 0.533880f, 0.487697f, 0.431144f, 0.365726f, 0.294260f, 0.220525f, 0.147743f, 0.078228f, 0.014043f, -0.043456f, -0.094326f, -0.138832f, -0.176068f, -0.205120f, -0.226671f, -0.241986f, + -0.251293f, -0.254596f, -0.252994f, -0.247846f, -0.239708f, -0.229246f, -0.218093f, -0.207780f, -0.198730f, -0.190983f, -0.184906f, -0.180621f, -0.177602f, -0.175210f, -0.173034f, -0.170646f, -0.167447f, -0.162637f, -0.155080f, -0.143537f, -0.127170f, -0.105418f, -0.077693f, -0.043897f, -0.004918f, 0.038190f, 0.084983f, 0.134821f, 0.186035f, 0.236843f, 0.286214f, 0.332895f, 0.374623f, 0.409400f, 0.436550f, 0.455532f, 0.464788f, 0.462789f, 0.449137f, 0.423624f, 0.385300f, 0.333570f, 0.269292f, 0.193801f, 0.107779f, 0.012194f, -0.090333f, -0.196122f, -0.301746f, -0.403692f, -0.497310f, -0.577424f, -0.639930f, -0.681870f, -0.700365f, -0.693007f, -0.659496f, -0.601723f, -0.522170f, -0.423547f, -0.310025f, -0.187155f, -0.060052f, 0.067102f, 0.189708f, 0.302691f, 0.402232f, 0.486145f, 0.552331f, 0.598446f, 0.623264f, 0.626838f, 0.609193f, 0.570294f, 0.511336f, 0.434835f, 0.343621f, 0.240782f, 0.130231f, 0.016430f, -0.096110f, -0.202773f, -0.299055f, -0.381032f, -0.445029f, -0.487486f, -0.506123f, -0.500243f, -0.469027f, -0.411517f, -0.329438f, -0.227615f, -0.111000f, 0.014761f, 0.139062f, 0.247906f, + 0.330788f, 0.380428f, 0.386990f, 0.342751f, 0.253257f, 0.133183f, -0.006044f, -0.145689f, -0.238420f, -0.230859f, -0.127035f, -0.005841f, 0.051207f, 0.037489f, 0.006530f, -0.003104f, 0.001464f, 0.002113f, -0.000555f, 0.000795f, 0.003689f, 0.003262f, 0.002035f, 0.003451f, 0.005181f, 0.004704f, 0.004097f, 0.005202f, 0.006175f, 0.005667f, 0.005284f, 0.005991f, 0.006394f, 0.005824f, 0.005470f, 0.005772f, 0.005730f, 0.005088f, 0.004674f, 0.004609f, 0.004237f, 0.003551f, 0.003059f, 0.002698f, 0.002121f, 0.001454f, 0.000907f, 0.000332f}, + {-0.008117f, -0.029088f, -0.057048f, -0.081735f, -0.092189f, -0.085100f, -0.046258f, 0.061013f, 0.247665f, 0.439587f, 0.518097f, 0.436893f, 0.258432f, 0.069209f, -0.085972f, -0.179131f, -0.182780f, -0.110632f, -0.018595f, 0.061348f, 0.137561f, 0.195698f, 0.184660f, 0.090981f, -0.029833f, -0.119427f, -0.163497f, -0.160991f, -0.107102f, -0.026915f, 0.027637f, 0.034786f, 0.014084f, -0.027320f, -0.111107f, -0.240023f, -0.378923f, -0.496585f, -0.591277f, -0.668375f, -0.726093f, -0.769534f, -0.811105f, -0.852336f, -0.884973f, -0.908307f, -0.928671f, -0.947596f, -0.965411f, -0.988396f, -1.019242f, -1.049599f, -1.072930f, -1.095057f, -1.123669f, -1.157984f, -1.195511f, -1.238117f, -1.285188f, -1.330071f, -1.368128f, -1.401405f, -1.433429f, -1.465837f, -1.500686f, -1.540528f, -1.585844f, -1.634999f, -1.684816f, -1.729881f, -1.764985f, -1.789120f, -1.803259f, -1.805236f, -1.792176f, -1.766414f, -1.732839f, -1.691843f, -1.640852f, -1.580948f, -1.516199f, -1.448521f, -1.378711f, -1.310591f, -1.249109f, -1.195647f, -1.148671f, -1.107399f, -1.072096f, -1.042222f, -1.016132f, -0.991629f, -0.966575f, -0.940263f, -0.913765f, -0.887830f, + -0.861818f, -0.835753f, -0.811153f, -0.788325f, -0.765201f, -0.740195f, -0.713773f, -0.686076f, -0.655627f, -0.621644f, -0.585391f, -0.548400f, -0.511253f, -0.474595f, -0.439641f, -0.407373f, -0.378310f, -0.352841f, -0.330952f, -0.312187f, -0.296447f, -0.283965f, -0.274268f, -0.266290f, -0.259673f, -0.254827f, -0.251774f, -0.250098f, -0.249925f, -0.251995f, -0.257051f, -0.265902f, -0.279634f, -0.299233f, -0.325552f, -0.359646f, -0.402100f, -0.451970f, -0.507511f, -0.567748f, -0.632019f, -0.698338f, -0.763997f, -0.827724f, -0.889545f, -0.948515f, -1.002452f, -1.050350f, -1.093294f, -1.132284f, -1.166691f, -1.195985f, -1.221676f, -1.245932f, -1.269000f, -1.289688f, -1.308062f, -1.325687f, -1.342928f, -1.357937f, -1.369096f, -1.376762f, -1.381406f, -1.381343f, -1.373935f, -1.358365f, -1.335436f, -1.304589f, -1.262934f, -1.208217f, -1.141032f, -1.062204f, -0.969496f, -0.859997f, -0.734719f, -0.596717f, -0.445375f, -0.277897f, -0.096215f, 0.094002f, 0.291185f, 0.497134f, 0.708325f, 0.916667f, 1.119036f, 1.316063f, 1.501707f, 1.665244f, 1.802397f, 1.911586f, 1.981297f, 1.995663f, 1.949047f, 1.839685f, 1.656456f, 1.391696f, + 1.058526f, 0.675467f, 0.249613f, -0.199264f, -0.619582f, -0.963618f, -1.208061f, -1.294816f, -1.109269f, -0.622127f, -0.037804f, 0.321944f, 0.325104f, 0.139499f, 0.005477f, -0.011392f, 0.006042f, 0.001000f, -0.006817f, 0.000382f, 0.005296f, -0.001059f, -0.004165f, 0.001245f, 0.003241f, -0.001280f, -0.002498f, 0.001306f, 0.002025f, -0.001148f, -0.001520f, 0.001099f, 0.001208f, -0.000964f, -0.000921f, 0.000826f, 0.000648f, -0.000761f, -0.000515f, 0.000575f, 0.000271f, -0.000542f, -0.000203f, 0.000365f, 0.000014f, -0.000310f, 0.000064f, 0.000181f} + }, + { + {0.008190f, 0.034888f, 0.081874f, 0.116453f, 0.067094f, -0.082555f, -0.227904f, -0.249422f, -0.166350f, -0.098117f, -0.087469f, -0.065513f, 0.001855f, 0.042159f, -0.012688f, -0.131557f, -0.247601f, -0.349249f, -0.457508f, -0.561835f, -0.630448f, -0.658599f, -0.667824f, -0.671646f, -0.668196f, -0.656704f, -0.642420f, -0.629382f, -0.617003f, -0.600360f, -0.572717f, -0.533674f, -0.493429f, -0.462386f, -0.438760f, -0.412139f, -0.375853f, -0.330971f, -0.282717f, -0.238117f, -0.203462f, -0.180067f, -0.164967f, -0.156908f, -0.157974f, -0.169237f, -0.189236f, -0.216716f, -0.250505f, -0.286503f, -0.318305f, -0.341119f, -0.353602f, -0.357480f, -0.357254f, -0.358766f, -0.366736f, -0.384550f, -0.415390f, -0.460458f, -0.516507f, -0.578128f, -0.641870f, -0.705454f, -0.764761f, -0.815673f, -0.858195f, -0.895392f, -0.928966f, -0.958784f, -0.985672f, -1.011344f, -1.035621f, -1.056027f, -1.070215f, -1.077265f, -1.076660f, -1.067391f, -1.048879f, -1.022623f, -0.992247f, -0.961199f, -0.930579f, -0.899824f, -0.868625f, -0.836503f, -0.801127f, -0.759410f, -0.710653f, -0.657040f, -0.601236f, -0.545210f, -0.491176f, -0.441730f, -0.398758f, -0.363349f, + -0.336665f, -0.320266f, -0.316119f, -0.326652f, -0.353697f, -0.396932f, -0.454447f, -0.524739f, -0.606457f, -0.696467f, -0.790534f, -0.886232f, -0.982956f, -1.078838f, -1.170101f, -1.254114f, -1.330746f, -1.399796f, -1.459170f, -1.506984f, -1.544018f, -1.572526f, -1.593450f, -1.606422f, -1.612266f, -1.613693f, -1.612687f, -1.608581f, -1.599998f, -1.587506f, -1.572353f, -1.553391f, -1.527791f, -1.494748f, -1.455923f, -1.412055f, -1.361940f, -1.305585f, -1.245838f, -1.185662f, -1.125860f, -1.066742f, -1.010255f, -0.958897f, -0.913497f, -0.873308f, -0.837820f, -0.807504f, -0.782697f, -0.762352f, -0.744553f, -0.728283f, -0.713809f, -0.700821f, -0.687346f, -0.671620f, -0.653905f, -0.634922f, -0.613574f, -0.588053f, -0.558390f, -0.525864f, -0.490403f, -0.450535f, -0.405710f, -0.356898f, -0.304721f, -0.248343f, -0.186701f, -0.120081f, -0.049746f, 0.023859f, 0.101582f, 0.183602f, 0.268055f, 0.353082f, 0.439140f, 0.527019f, 0.614682f, 0.699065f, 0.779803f, 0.857431f, 0.929095f, 0.990466f, 1.040682f, 1.080471f, 1.106909f, 1.115475f, 1.105390f, 1.077041f, 1.026573f, 0.949561f, 0.847139f, 0.722093f, 0.573442f, 0.402441f, + 0.218506f, 0.031580f, -0.153644f, -0.327407f, -0.469724f, -0.565679f, -0.610055f, -0.583192f, -0.449188f, -0.214263f, 0.027773f, 0.156235f, 0.139393f, 0.057497f, 0.003774f, -0.003113f, 0.002375f, -0.000038f, -0.002481f, 0.000451f, 0.001892f, -0.000644f, -0.001493f, 0.000649f, 0.001158f, -0.000616f, -0.000874f, 0.000622f, 0.000731f, -0.000522f, -0.000530f, 0.000507f, 0.000429f, -0.000443f, -0.000326f, 0.000378f, 0.000213f, -0.000364f, -0.000182f, 0.000267f, 0.000064f, -0.000275f, -0.000058f, 0.000182f, -0.000037f, -0.000172f, 0.000059f, 0.000111f}, + {-0.185552f, -0.533696f, -0.795197f, -0.893542f, -0.804694f, -0.602960f, -0.410567f, -0.289207f, -0.193943f, -0.044154f, 0.172404f, 0.382927f, 0.509981f, 0.545225f, 0.535614f, 0.515453f, 0.471712f, 0.372577f, 0.213012f, 0.026048f, -0.142991f, -0.267749f, -0.350655f, -0.407879f, -0.446665f, -0.457344f, -0.425810f, -0.349287f, -0.237376f, -0.102660f, 0.042599f, 0.181681f, 0.293768f, 0.363653f, 0.388804f, 0.375465f, 0.331172f, 0.263138f, 0.180465f, 0.093512f, 0.010635f, -0.063321f, -0.126103f, -0.177013f, -0.216204f, -0.243567f, -0.258067f, -0.258312f, -0.243240f, -0.211844f, -0.162993f, -0.096687f, -0.016030f, 0.071984f, 0.157709f, 0.231389f, 0.285400f, 0.314867f, 0.316825f, 0.289600f, 0.233632f, 0.152889f, 0.055165f, -0.049222f, -0.149371f, -0.235386f, -0.299246f, -0.334965f, -0.338337f, -0.307007f, -0.241511f, -0.147028f, -0.034470f, 0.080542f, 0.180988f, 0.252633f, 0.287299f, 0.284302f, 0.249915f, 0.194921f, 0.130906f, 0.066951f, 0.008345f, -0.042679f, -0.085530f, -0.120133f, -0.146148f, -0.162494f, -0.167472f, -0.159538f, -0.138348f, -0.105550f, -0.064858f, -0.021185f, 0.020732f, 0.057343f, + 0.086513f, 0.107283f, 0.119553f, 0.123700f, 0.120200f, 0.109487f, 0.092076f, 0.068684f, 0.040301f, 0.008337f, -0.025230f, -0.057916f, -0.086954f, -0.109551f, -0.123233f, -0.126275f, -0.118020f, -0.098962f, -0.070752f, -0.036148f, 0.001325f, 0.037957f, 0.070371f, 0.095805f, 0.112323f, 0.118906f, 0.115335f, 0.102001f, 0.079886f, 0.050640f, 0.016580f, -0.019334f, -0.053532f, -0.082149f, -0.101715f, -0.109891f, -0.105925f, -0.090814f, -0.067155f, -0.038578f, -0.008949f, 0.018297f, 0.040562f, 0.056348f, 0.065287f, 0.067860f, 0.065030f, 0.058014f, 0.048082f, 0.036305f, 0.023471f, 0.010221f, -0.002870f, -0.015342f, -0.026773f, -0.036614f, -0.044221f, -0.049020f, -0.050549f, -0.048442f, -0.042587f, -0.033275f, -0.021107f, -0.006895f, 0.008283f, 0.023113f, 0.036282f, 0.046616f, 0.053077f, 0.054911f, 0.051880f, 0.044235f, 0.032557f, 0.017817f, 0.001348f, -0.015481f, -0.031425f, -0.045128f, -0.055171f, -0.060547f, -0.060691f, -0.055031f, -0.043176f, -0.025610f, -0.003626f, 0.021182f, 0.046431f, 0.068218f, 0.082097f, 0.084759f, 0.074213f, 0.049725f, 0.013674f, -0.027125f, -0.063792f, -0.088620f, + -0.095442f, -0.080235f, -0.045136f, -0.000219f, 0.041813f, 0.070718f, 0.077187f, 0.054136f, 0.008482f, -0.033225f, -0.044133f, -0.024284f, 0.000669f, 0.009571f, 0.005114f, 0.001035f, 0.001842f, 0.002776f, 0.001639f, 0.000950f, 0.001513f, 0.001381f, 0.000219f, -0.000400f, -0.000314f, -0.000719f, -0.001578f, -0.001885f, -0.001710f, -0.001817f, -0.002061f, -0.001831f, -0.001308f, -0.000982f, -0.000701f, -0.000138f, 0.000498f, 0.000915f, 0.001247f, 0.001644f, 0.001936f, 0.001998f, 0.001941f, 0.001829f, 0.001581f, 0.001190f, 0.000735f, 0.000251f} + }, + { + {-0.185552f, -0.533696f, -0.795197f, -0.893542f, -0.804694f, -0.602960f, -0.410567f, -0.289207f, -0.193943f, -0.044154f, 0.172404f, 0.382927f, 0.509981f, 0.545225f, 0.535614f, 0.515453f, 0.471712f, 0.372577f, 0.213012f, 0.026048f, -0.142991f, -0.267749f, -0.350655f, -0.407879f, -0.446665f, -0.457344f, -0.425810f, -0.349287f, -0.237376f, -0.102660f, 0.042599f, 0.181681f, 0.293768f, 0.363653f, 0.388804f, 0.375465f, 0.331172f, 0.263138f, 0.180465f, 0.093512f, 0.010635f, -0.063321f, -0.126103f, -0.177013f, -0.216204f, -0.243567f, -0.258067f, -0.258312f, -0.243240f, -0.211844f, -0.162993f, -0.096687f, -0.016030f, 0.071984f, 0.157709f, 0.231389f, 0.285400f, 0.314867f, 0.316825f, 0.289600f, 0.233632f, 0.152889f, 0.055165f, -0.049222f, -0.149371f, -0.235386f, -0.299246f, -0.334965f, -0.338337f, -0.307007f, -0.241511f, -0.147028f, -0.034470f, 0.080542f, 0.180988f, 0.252633f, 0.287299f, 0.284302f, 0.249915f, 0.194921f, 0.130906f, 0.066951f, 0.008345f, -0.042679f, -0.085530f, -0.120133f, -0.146148f, -0.162494f, -0.167472f, -0.159538f, -0.138348f, -0.105550f, -0.064858f, -0.021185f, 0.020732f, 0.057343f, + 0.086513f, 0.107283f, 0.119553f, 0.123700f, 0.120200f, 0.109487f, 0.092076f, 0.068684f, 0.040301f, 0.008337f, -0.025230f, -0.057916f, -0.086954f, -0.109551f, -0.123233f, -0.126275f, -0.118020f, -0.098962f, -0.070752f, -0.036148f, 0.001325f, 0.037957f, 0.070371f, 0.095805f, 0.112323f, 0.118906f, 0.115335f, 0.102001f, 0.079886f, 0.050640f, 0.016580f, -0.019334f, -0.053532f, -0.082149f, -0.101715f, -0.109891f, -0.105925f, -0.090814f, -0.067155f, -0.038578f, -0.008949f, 0.018297f, 0.040562f, 0.056348f, 0.065287f, 0.067860f, 0.065030f, 0.058014f, 0.048082f, 0.036305f, 0.023471f, 0.010221f, -0.002870f, -0.015342f, -0.026773f, -0.036614f, -0.044221f, -0.049020f, -0.050549f, -0.048442f, -0.042587f, -0.033275f, -0.021107f, -0.006895f, 0.008283f, 0.023113f, 0.036282f, 0.046616f, 0.053077f, 0.054911f, 0.051880f, 0.044235f, 0.032557f, 0.017817f, 0.001348f, -0.015481f, -0.031425f, -0.045128f, -0.055171f, -0.060547f, -0.060691f, -0.055031f, -0.043176f, -0.025610f, -0.003626f, 0.021182f, 0.046431f, 0.068218f, 0.082097f, 0.084759f, 0.074213f, 0.049725f, 0.013674f, -0.027125f, -0.063792f, -0.088620f, + -0.095442f, -0.080235f, -0.045136f, -0.000219f, 0.041813f, 0.070718f, 0.077187f, 0.054136f, 0.008482f, -0.033225f, -0.044133f, -0.024284f, 0.000669f, 0.009571f, 0.005114f, 0.001035f, 0.001842f, 0.002776f, 0.001639f, 0.000950f, 0.001513f, 0.001381f, 0.000219f, -0.000400f, -0.000314f, -0.000719f, -0.001578f, -0.001885f, -0.001710f, -0.001817f, -0.002061f, -0.001831f, -0.001308f, -0.000982f, -0.000701f, -0.000138f, 0.000498f, 0.000915f, 0.001247f, 0.001644f, 0.001936f, 0.001998f, 0.001941f, 0.001829f, 0.001581f, 0.001190f, 0.000735f, 0.000251f}, + {0.008190f, 0.034888f, 0.081874f, 0.116453f, 0.067094f, -0.082555f, -0.227904f, -0.249422f, -0.166350f, -0.098117f, -0.087469f, -0.065513f, 0.001855f, 0.042159f, -0.012688f, -0.131557f, -0.247601f, -0.349249f, -0.457508f, -0.561835f, -0.630448f, -0.658599f, -0.667824f, -0.671646f, -0.668196f, -0.656704f, -0.642420f, -0.629382f, -0.617003f, -0.600360f, -0.572717f, -0.533674f, -0.493429f, -0.462386f, -0.438760f, -0.412139f, -0.375853f, -0.330971f, -0.282717f, -0.238117f, -0.203462f, -0.180067f, -0.164967f, -0.156908f, -0.157974f, -0.169237f, -0.189236f, -0.216716f, -0.250505f, -0.286503f, -0.318305f, -0.341119f, -0.353602f, -0.357480f, -0.357254f, -0.358766f, -0.366736f, -0.384550f, -0.415390f, -0.460458f, -0.516507f, -0.578128f, -0.641870f, -0.705454f, -0.764761f, -0.815673f, -0.858195f, -0.895392f, -0.928966f, -0.958784f, -0.985672f, -1.011344f, -1.035621f, -1.056027f, -1.070215f, -1.077265f, -1.076660f, -1.067391f, -1.048879f, -1.022623f, -0.992247f, -0.961199f, -0.930579f, -0.899824f, -0.868625f, -0.836503f, -0.801127f, -0.759410f, -0.710653f, -0.657040f, -0.601236f, -0.545210f, -0.491176f, -0.441730f, -0.398758f, -0.363349f, + -0.336665f, -0.320266f, -0.316119f, -0.326652f, -0.353697f, -0.396932f, -0.454447f, -0.524739f, -0.606457f, -0.696467f, -0.790534f, -0.886232f, -0.982956f, -1.078838f, -1.170101f, -1.254114f, -1.330746f, -1.399796f, -1.459170f, -1.506984f, -1.544018f, -1.572526f, -1.593450f, -1.606422f, -1.612266f, -1.613693f, -1.612687f, -1.608581f, -1.599998f, -1.587506f, -1.572353f, -1.553391f, -1.527791f, -1.494748f, -1.455923f, -1.412055f, -1.361940f, -1.305585f, -1.245838f, -1.185662f, -1.125860f, -1.066742f, -1.010255f, -0.958897f, -0.913497f, -0.873308f, -0.837820f, -0.807504f, -0.782697f, -0.762352f, -0.744553f, -0.728283f, -0.713809f, -0.700821f, -0.687346f, -0.671620f, -0.653905f, -0.634922f, -0.613574f, -0.588053f, -0.558390f, -0.525864f, -0.490403f, -0.450535f, -0.405710f, -0.356898f, -0.304721f, -0.248343f, -0.186701f, -0.120081f, -0.049746f, 0.023859f, 0.101582f, 0.183602f, 0.268055f, 0.353082f, 0.439140f, 0.527019f, 0.614682f, 0.699065f, 0.779803f, 0.857431f, 0.929095f, 0.990466f, 1.040682f, 1.080471f, 1.106909f, 1.115475f, 1.105390f, 1.077041f, 1.026573f, 0.949561f, 0.847139f, 0.722093f, 0.573442f, 0.402441f, + 0.218506f, 0.031580f, -0.153644f, -0.327407f, -0.469724f, -0.565679f, -0.610055f, -0.583192f, -0.449188f, -0.214263f, 0.027773f, 0.156235f, 0.139393f, 0.057497f, 0.003774f, -0.003113f, 0.002375f, -0.000038f, -0.002481f, 0.000451f, 0.001892f, -0.000644f, -0.001493f, 0.000649f, 0.001158f, -0.000616f, -0.000874f, 0.000622f, 0.000731f, -0.000522f, -0.000530f, 0.000507f, 0.000429f, -0.000443f, -0.000326f, 0.000378f, 0.000213f, -0.000364f, -0.000182f, 0.000267f, 0.000064f, -0.000275f, -0.000058f, 0.000182f, -0.000037f, -0.000172f, 0.000059f, 0.000111f} + }, + { + {0.000548f, 0.016581f, 0.053765f, 0.073281f, 0.025961f, -0.087700f, -0.207119f, -0.273414f, -0.285064f, -0.274298f, -0.250255f, -0.200671f, -0.140017f, -0.114239f, -0.149921f, -0.229225f, -0.323553f, -0.423074f, -0.520572f, -0.593892f, -0.626821f, -0.633223f, -0.641666f, -0.663565f, -0.689675f, -0.710438f, -0.725598f, -0.736662f, -0.742149f, -0.741673f, -0.737421f, -0.729820f, -0.715763f, -0.691715f, -0.655607f, -0.606006f, -0.543295f, -0.472954f, -0.404984f, -0.347908f, -0.304206f, -0.272432f, -0.251856f, -0.242831f, -0.243698f, -0.250172f, -0.258244f, -0.266093f, -0.273123f, -0.278938f, -0.283885f, -0.289531f, -0.298203f, -0.312469f, -0.334435f, -0.364557f, -0.401392f, -0.442943f, -0.487333f, -0.531807f, -0.572843f, -0.608619f, -0.640227f, -0.669360f, -0.695931f, -0.718798f, -0.737129f, -0.749510f, -0.752911f, -0.744271f, -0.722888f, -0.690591f, -0.650434f, -0.606110f, -0.561850f, -0.521475f, -0.486993f, -0.458126f, -0.433048f, -0.409626f, -0.386312f, -0.362259f, -0.336987f, -0.310333f, -0.282627f, -0.254475f, -0.226254f, -0.198128f, -0.170462f, -0.143899f, -0.119124f, -0.096842f, -0.077957f, -0.063776f, -0.056222f, -0.057684f, + -0.070113f, -0.094371f, -0.130791f, -0.179633f, -0.239941f, -0.308585f, -0.381898f, -0.458052f, -0.536571f, -0.616164f, -0.694955f, -0.772624f, -0.850111f, -0.926782f, -0.999760f, -1.066559f, -1.126570f, -1.179184f, -1.222302f, -1.254125f, -1.275290f, -1.287722f, -1.292081f, -1.287917f, -1.276087f, -1.259277f, -1.239681f, -1.217607f, -1.193156f, -1.167869f, -1.143244f, -1.118482f, -1.091357f, -1.060859f, -1.027345f, -0.990451f, -0.948918f, -0.902895f, -0.854755f, -0.806966f, -0.760446f, -0.715619f, -0.673842f, -0.636793f, -0.605072f, -0.578270f, -0.556179f, -0.539266f, -0.527859f, -0.521263f, -0.518112f, -0.517554f, -0.519483f, -0.523339f, -0.527397f, -0.529962f, -0.530623f, -0.529392f, -0.525185f, -0.516374f, -0.502523f, -0.484304f, -0.461738f, -0.433778f, -0.399827f, -0.360530f, -0.316583f, -0.267592f, -0.212873f, -0.152952f, -0.089351f, -0.022879f, 0.046836f, 0.119626f, 0.193722f, 0.267453f, 0.340856f, 0.414052f, 0.485116f, 0.551637f, 0.613347f, 0.670732f, 0.722013f, 0.764382f, 0.797237f, 0.820973f, 0.833604f, 0.832100f, 0.815925f, 0.785566f, 0.739077f, 0.674193f, 0.592209f, 0.495751f, 0.385312f, 0.262580f, + 0.134060f, 0.006641f, -0.116089f, -0.227998f, -0.317292f, -0.375423f, -0.399942f, -0.380080f, -0.295089f, -0.148552f, 0.003715f, 0.088509f, 0.084442f, 0.037741f, 0.004798f, -0.000952f, 0.001504f, 0.000011f, -0.001418f, 0.000239f, 0.001076f, -0.000365f, -0.000858f, 0.000368f, 0.000671f, -0.000340f, -0.000494f, 0.000359f, 0.000427f, -0.000288f, -0.000300f, 0.000287f, 0.000246f, -0.000250f, -0.000191f, 0.000205f, 0.000117f, -0.000209f, -0.000114f, 0.000138f, 0.000031f, -0.000158f, -0.000043f, 0.000092f, -0.000022f, -0.000096f, 0.000027f, 0.000057f}, + {-0.132877f, -0.397611f, -0.632915f, -0.770285f, -0.762715f, -0.657573f, -0.569424f, -0.556718f, -0.559329f, -0.492160f, -0.364513f, -0.254027f, -0.187319f, -0.112359f, 0.013869f, 0.171586f, 0.321788f, 0.450390f, 0.550169f, 0.601920f, 0.599231f, 0.564879f, 0.522168f, 0.469068f, 0.394550f, 0.302090f, 0.202848f, 0.098985f, -0.013558f, -0.133110f, -0.250310f, -0.352539f, -0.427473f, -0.468674f, -0.479833f, -0.468872f, -0.438208f, -0.385801f, -0.314336f, -0.233571f, -0.153994f, -0.082221f, -0.021254f, 0.029103f, 0.071856f, 0.110418f, 0.147141f, 0.184866f, 0.227200f, 0.274979f, 0.323626f, 0.364907f, 0.390119f, 0.392168f, 0.367889f, 0.319988f, 0.255281f, 0.180008f, 0.097315f, 0.008624f, -0.084265f, -0.178270f, -0.268396f, -0.347509f, -0.407904f, -0.443969f, -0.453626f, -0.437976f, -0.400261f, -0.344545f, -0.274131f, -0.190824f, -0.096114f, 0.006594f, 0.110784f, 0.207596f, 0.287902f, 0.344723f, 0.375140f, 0.380738f, 0.366034f, 0.336036f, 0.294883f, 0.246060f, 0.192748f, 0.137428f, 0.081636f, 0.026552f, -0.026567f, -0.076804f, -0.123861f, -0.167467f, -0.206909f, -0.241250f, -0.269252f, -0.288705f, + -0.296573f, -0.290377f, -0.269166f, -0.233229f, -0.183841f, -0.123651f, -0.056479f, 0.013719f, 0.083262f, 0.148262f, 0.204724f, 0.249465f, 0.280399f, 0.296003f, 0.295349f, 0.278768f, 0.247829f, 0.204674f, 0.151948f, 0.093150f, 0.032213f, -0.027384f, -0.082725f, -0.131073f, -0.170143f, -0.198644f, -0.216046f, -0.222008f, -0.216506f, -0.200271f, -0.174654f, -0.141292f, -0.102339f, -0.060692f, -0.019479f, 0.018647f, 0.051612f, 0.077849f, 0.096642f, 0.108377f, 0.114133f, 0.115126f, 0.112602f, 0.107828f, 0.101742f, 0.094680f, 0.086589f, 0.077282f, 0.066381f, 0.053290f, 0.037528f, 0.019026f, -0.001919f, -0.024735f, -0.048435f, -0.071577f, -0.092532f, -0.109764f, -0.121883f, -0.127706f, -0.126482f, -0.118056f, -0.102791f, -0.081468f, -0.055311f, -0.025990f, 0.004604f, 0.034617f, 0.062318f, 0.086086f, 0.104528f, 0.116707f, 0.122180f, 0.120819f, 0.112758f, 0.098561f, 0.079222f, 0.055839f, 0.029513f, 0.001623f, -0.026174f, -0.052450f, -0.076110f, -0.095839f, -0.109976f, -0.117213f, -0.116756f, -0.107640f, -0.088934f, -0.061097f, -0.026291f, 0.012728f, 0.052593f, 0.088103f, 0.113109f, 0.123416f, + 0.117418f, 0.094520f, 0.056280f, 0.009387f, -0.036193f, -0.072454f, -0.092836f, -0.088360f, -0.054153f, -0.003640f, 0.033648f, 0.037891f, 0.018462f, 0.000482f, -0.003500f, -0.000290f, 0.000806f, -0.000263f, -0.000070f, 0.000856f, 0.000579f, -0.000126f, 0.000123f, 0.000593f, 0.000279f, -0.000154f, 0.000040f, 0.000275f, 0.000000f, -0.000274f, -0.000137f, -0.000025f, -0.000233f, -0.000394f, -0.000293f, -0.000233f, -0.000362f, -0.000433f, -0.000345f, -0.000295f, -0.000349f, -0.000351f, -0.000262f, -0.000205f, -0.000205f, -0.000164f, -0.000070f, -0.000011f} + }, + { + {-0.132877f, -0.397611f, -0.632915f, -0.770285f, -0.762715f, -0.657573f, -0.569424f, -0.556718f, -0.559329f, -0.492160f, -0.364513f, -0.254027f, -0.187319f, -0.112359f, 0.013869f, 0.171586f, 0.321788f, 0.450390f, 0.550169f, 0.601920f, 0.599231f, 0.564879f, 0.522168f, 0.469068f, 0.394550f, 0.302090f, 0.202848f, 0.098985f, -0.013558f, -0.133110f, -0.250310f, -0.352539f, -0.427473f, -0.468674f, -0.479833f, -0.468872f, -0.438208f, -0.385801f, -0.314336f, -0.233571f, -0.153994f, -0.082221f, -0.021254f, 0.029103f, 0.071856f, 0.110418f, 0.147141f, 0.184866f, 0.227200f, 0.274979f, 0.323626f, 0.364907f, 0.390119f, 0.392168f, 0.367889f, 0.319988f, 0.255281f, 0.180008f, 0.097315f, 0.008624f, -0.084265f, -0.178270f, -0.268396f, -0.347509f, -0.407904f, -0.443969f, -0.453626f, -0.437976f, -0.400261f, -0.344545f, -0.274131f, -0.190824f, -0.096114f, 0.006594f, 0.110784f, 0.207596f, 0.287902f, 0.344723f, 0.375140f, 0.380738f, 0.366034f, 0.336036f, 0.294883f, 0.246060f, 0.192748f, 0.137428f, 0.081636f, 0.026552f, -0.026567f, -0.076804f, -0.123861f, -0.167467f, -0.206909f, -0.241250f, -0.269252f, -0.288705f, + -0.296573f, -0.290377f, -0.269166f, -0.233229f, -0.183841f, -0.123651f, -0.056479f, 0.013719f, 0.083262f, 0.148262f, 0.204724f, 0.249465f, 0.280399f, 0.296003f, 0.295349f, 0.278768f, 0.247829f, 0.204674f, 0.151948f, 0.093150f, 0.032213f, -0.027384f, -0.082725f, -0.131073f, -0.170143f, -0.198644f, -0.216046f, -0.222008f, -0.216506f, -0.200271f, -0.174654f, -0.141292f, -0.102339f, -0.060692f, -0.019479f, 0.018647f, 0.051612f, 0.077849f, 0.096642f, 0.108377f, 0.114133f, 0.115126f, 0.112602f, 0.107828f, 0.101742f, 0.094680f, 0.086589f, 0.077282f, 0.066381f, 0.053290f, 0.037528f, 0.019026f, -0.001919f, -0.024735f, -0.048435f, -0.071577f, -0.092532f, -0.109764f, -0.121883f, -0.127706f, -0.126482f, -0.118056f, -0.102791f, -0.081468f, -0.055311f, -0.025990f, 0.004604f, 0.034617f, 0.062318f, 0.086086f, 0.104528f, 0.116707f, 0.122180f, 0.120819f, 0.112758f, 0.098561f, 0.079222f, 0.055839f, 0.029513f, 0.001623f, -0.026174f, -0.052450f, -0.076110f, -0.095839f, -0.109976f, -0.117213f, -0.116756f, -0.107640f, -0.088934f, -0.061097f, -0.026291f, 0.012728f, 0.052593f, 0.088103f, 0.113109f, 0.123416f, + 0.117418f, 0.094520f, 0.056280f, 0.009387f, -0.036193f, -0.072454f, -0.092836f, -0.088360f, -0.054153f, -0.003640f, 0.033648f, 0.037891f, 0.018462f, 0.000482f, -0.003500f, -0.000290f, 0.000806f, -0.000263f, -0.000070f, 0.000856f, 0.000579f, -0.000126f, 0.000123f, 0.000593f, 0.000279f, -0.000154f, 0.000040f, 0.000275f, 0.000000f, -0.000274f, -0.000137f, -0.000025f, -0.000233f, -0.000394f, -0.000293f, -0.000233f, -0.000362f, -0.000433f, -0.000345f, -0.000295f, -0.000349f, -0.000351f, -0.000262f, -0.000205f, -0.000205f, -0.000164f, -0.000070f, -0.000011f}, + {0.000548f, 0.016581f, 0.053765f, 0.073281f, 0.025961f, -0.087700f, -0.207119f, -0.273414f, -0.285064f, -0.274298f, -0.250255f, -0.200671f, -0.140017f, -0.114239f, -0.149921f, -0.229225f, -0.323553f, -0.423074f, -0.520572f, -0.593892f, -0.626821f, -0.633223f, -0.641666f, -0.663565f, -0.689675f, -0.710438f, -0.725598f, -0.736662f, -0.742149f, -0.741673f, -0.737421f, -0.729820f, -0.715763f, -0.691715f, -0.655607f, -0.606006f, -0.543295f, -0.472954f, -0.404984f, -0.347908f, -0.304206f, -0.272432f, -0.251856f, -0.242831f, -0.243698f, -0.250172f, -0.258244f, -0.266093f, -0.273123f, -0.278938f, -0.283885f, -0.289531f, -0.298203f, -0.312469f, -0.334435f, -0.364557f, -0.401392f, -0.442943f, -0.487333f, -0.531807f, -0.572843f, -0.608619f, -0.640227f, -0.669360f, -0.695931f, -0.718798f, -0.737129f, -0.749510f, -0.752911f, -0.744271f, -0.722888f, -0.690591f, -0.650434f, -0.606110f, -0.561850f, -0.521475f, -0.486993f, -0.458126f, -0.433048f, -0.409626f, -0.386312f, -0.362259f, -0.336987f, -0.310333f, -0.282627f, -0.254475f, -0.226254f, -0.198128f, -0.170462f, -0.143899f, -0.119124f, -0.096842f, -0.077957f, -0.063776f, -0.056222f, -0.057684f, + -0.070113f, -0.094371f, -0.130791f, -0.179633f, -0.239941f, -0.308585f, -0.381898f, -0.458052f, -0.536571f, -0.616164f, -0.694955f, -0.772624f, -0.850111f, -0.926782f, -0.999760f, -1.066559f, -1.126570f, -1.179184f, -1.222302f, -1.254125f, -1.275290f, -1.287722f, -1.292081f, -1.287917f, -1.276087f, -1.259277f, -1.239681f, -1.217607f, -1.193156f, -1.167869f, -1.143244f, -1.118482f, -1.091357f, -1.060859f, -1.027345f, -0.990451f, -0.948918f, -0.902895f, -0.854755f, -0.806966f, -0.760446f, -0.715619f, -0.673842f, -0.636793f, -0.605072f, -0.578270f, -0.556179f, -0.539266f, -0.527859f, -0.521263f, -0.518112f, -0.517554f, -0.519483f, -0.523339f, -0.527397f, -0.529962f, -0.530623f, -0.529392f, -0.525185f, -0.516374f, -0.502523f, -0.484304f, -0.461738f, -0.433778f, -0.399827f, -0.360530f, -0.316583f, -0.267592f, -0.212873f, -0.152952f, -0.089351f, -0.022879f, 0.046836f, 0.119626f, 0.193722f, 0.267453f, 0.340856f, 0.414052f, 0.485116f, 0.551637f, 0.613347f, 0.670732f, 0.722013f, 0.764382f, 0.797237f, 0.820973f, 0.833604f, 0.832100f, 0.815925f, 0.785566f, 0.739077f, 0.674193f, 0.592209f, 0.495751f, 0.385312f, 0.262580f, + 0.134060f, 0.006641f, -0.116089f, -0.227998f, -0.317292f, -0.375423f, -0.399942f, -0.380080f, -0.295089f, -0.148552f, 0.003715f, 0.088509f, 0.084442f, 0.037741f, 0.004798f, -0.000952f, 0.001504f, 0.000011f, -0.001418f, 0.000239f, 0.001076f, -0.000365f, -0.000858f, 0.000368f, 0.000671f, -0.000340f, -0.000494f, 0.000359f, 0.000427f, -0.000288f, -0.000300f, 0.000287f, 0.000246f, -0.000250f, -0.000191f, 0.000205f, 0.000117f, -0.000209f, -0.000114f, 0.000138f, 0.000031f, -0.000158f, -0.000043f, 0.000092f, -0.000022f, -0.000096f, 0.000027f, 0.000057f} + } +}; +const float *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float *CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; + +/********************** Sample Rate = 32000 **********************/ + +const float CRendBin_Combined_HRIR_latency_s_32kHz = 0.000020833333110f; +const int16_t CRendBin_Combined_HRIR_max_num_iterations_32kHz = 1; +const uint16_t CRendBin_Combined_HRIR_num_iterations_32kHz[15][BINAURAL_CHANNELS]={{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1} }; +const uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS] = {0, 0}; +const uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][1]={{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}}}; +const uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz = 0; +const float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[15]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; +const uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float CRendBin_Combined_HRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][160]={ + { + {1.274160f, 1.294020f, 1.337410f, 1.397007f, 1.430345f, 1.392644f, 1.321540f, 1.313359f, 1.357865f, 1.299918f, 1.074412f, 0.879944f, 0.959736f, 1.270988f, 1.546758f, 1.656396f, 1.720956f, 1.866458f, 2.047459f, 2.166309f, 2.211621f, 2.199100f, 2.091661f, 1.870665f, 1.617573f, 1.446851f, 1.393188f, 1.413236f, 1.466179f, 1.550859f, 1.683267f, 1.868310f, 2.085674f, 2.289697f, 2.432421f, 2.495403f, 2.495189f, 2.459782f, 2.406497f, 2.337636f, 2.248632f, 2.141773f, 2.034425f, 1.948929f, 1.893998f, 1.861756f, 1.839825f, 1.817228f, 1.782513f, 1.728672f, 1.660650f, 1.590534f, 1.526449f, 1.470717f, 1.424223f, 1.386891f, 1.357216f, 1.334362f, 1.316849f, 1.298879f, 1.273497f, 1.238579f, 1.193651f, 1.133144f, 1.050266f, 0.946198f, 0.830030f, 0.712686f, 0.605579f, 0.520129f, 0.462158f, 0.429220f, 0.416204f, 0.419491f, 0.434223f, 0.453184f, 0.470641f, 0.483821f, 0.491166f, 0.493159f, 0.493315f, 0.494589f, 0.497104f, 0.501870f, 0.512491f, 0.530588f, 0.554259f, 0.582935f, 0.618415f, 0.659661f, 0.701812f, 0.741007f, 0.775413f, 0.802205f, 0.818331f, 0.823262f, + 0.817499f, 0.800855f, 0.774865f, 0.743310f, 0.708492f, 0.671074f, 0.633855f, 0.600330f, 0.569970f, 0.540678f, 0.514469f, 0.494946f, 0.481818f, 0.473694f, 0.472732f, 0.481094f, 0.496964f, 0.518455f, 0.546609f, 0.581486f, 0.621040f, 0.665611f, 0.717402f, 0.775509f, 0.837954f, 0.906864f, 0.984687f, 1.068602f, 1.155523f, 1.247778f, 1.347134f, 1.449104f, 1.549101f, 1.647389f, 1.742972f, 1.829635f, 1.901324f, 1.954515f, 1.984287f, 1.984824f, 1.952760f, 1.885002f, 1.778297f, 1.635195f, 1.462468f, 1.261420f, 1.031242f, 0.781118f, 0.523064f, 0.255971f, -0.024648f, -0.309222f, -0.588359f, -0.870855f, -1.164972f, -1.466926f, -1.790488f, -2.153822f, -2.486393f, -2.616851f, -2.448223f, -2.105871f, -1.817613f, -1.687068f}, + {0.970276f, 0.989255f, 0.871577f, 0.597876f, 0.336366f, 0.173178f, 0.019706f, -0.159984f, -0.243784f, -0.153498f, 0.008399f, 0.095745f, 0.051486f, -0.138486f, -0.467152f, -0.822595f, -1.024373f, -1.014141f, -0.903886f, -0.794827f, -0.668354f, -0.501337f, -0.360612f, -0.305798f, -0.293410f, -0.252892f, -0.184179f, -0.111256f, -0.003926f, 0.177841f, 0.402150f, 0.597826f, 0.746294f, 0.878887f, 0.991944f, 1.024725f, 0.936772f, 0.767161f, 0.593896f, 0.457569f, 0.346793f, 0.240733f, 0.135325f, 0.029786f, -0.084188f, -0.208198f, -0.327790f, -0.427675f, -0.506080f, -0.566715f, -0.606654f, -0.620426f, -0.608890f, -0.577204f, -0.529440f, -0.469766f, -0.403401f, -0.332230f, -0.253653f, -0.166268f, -0.073041f, 0.021610f, 0.112939f, 0.193509f, 0.255064f, 0.294744f, 0.316342f, 0.324872f, 0.323044f, 0.313291f, 0.299731f, 0.286569f, 0.276133f, 0.269047f, 0.264854f, 0.261697f, 0.256138f, 0.244182f, 0.223051f, 0.192601f, 0.155342f, 0.114760f, 0.073144f, 0.030352f, -0.016156f, -0.070224f, -0.134644f, -0.208324f, -0.285309f, -0.356772f, -0.413944f, -0.449609f, -0.458703f, -0.439528f, -0.394930f, -0.331849f, + -0.259659f, -0.188462f, -0.126919f, -0.079747f, -0.047119f, -0.026644f, -0.014920f, -0.007007f, 0.003477f, 0.022326f, 0.053985f, 0.103077f, 0.173949f, 0.266925f, 0.376398f, 0.492936f, 0.604875f, 0.697909f, 0.757166f, 0.771956f, 0.737231f, 0.651307f, 0.515864f, 0.338233f, 0.130148f, -0.096058f, -0.327499f, -0.548579f, -0.742907f, -0.897278f, -1.001720f, -1.048233f, -1.033356f, -0.960708f, -0.838436f, -0.676033f, -0.484975f, -0.278710f, -0.069071f, 0.135392f, 0.327026f, 0.498327f, 0.643893f, 0.759696f, 0.840685f, 0.882278f, 0.882920f, 0.842334f, 0.760127f, 0.639470f, 0.488681f, 0.316680f, 0.131973f, -0.052258f, -0.220428f, -0.364266f, -0.478726f, -0.543965f, -0.528700f, -0.427785f, -0.288213f, -0.179234f, -0.133783f, -0.129365f} + }, + { + {0.970276f, 0.989255f, 0.871577f, 0.597876f, 0.336366f, 0.173178f, 0.019706f, -0.159984f, -0.243784f, -0.153498f, 0.008399f, 0.095745f, 0.051486f, -0.138486f, -0.467152f, -0.822595f, -1.024373f, -1.014141f, -0.903886f, -0.794827f, -0.668354f, -0.501337f, -0.360612f, -0.305798f, -0.293410f, -0.252892f, -0.184179f, -0.111256f, -0.003926f, 0.177841f, 0.402150f, 0.597826f, 0.746294f, 0.878887f, 0.991944f, 1.024725f, 0.936772f, 0.767161f, 0.593896f, 0.457569f, 0.346793f, 0.240733f, 0.135325f, 0.029786f, -0.084188f, -0.208198f, -0.327790f, -0.427675f, -0.506080f, -0.566715f, -0.606654f, -0.620426f, -0.608890f, -0.577204f, -0.529440f, -0.469766f, -0.403401f, -0.332230f, -0.253653f, -0.166268f, -0.073041f, 0.021610f, 0.112939f, 0.193509f, 0.255064f, 0.294744f, 0.316342f, 0.324872f, 0.323044f, 0.313291f, 0.299731f, 0.286569f, 0.276133f, 0.269047f, 0.264854f, 0.261697f, 0.256138f, 0.244182f, 0.223051f, 0.192601f, 0.155342f, 0.114760f, 0.073144f, 0.030352f, -0.016156f, -0.070224f, -0.134644f, -0.208324f, -0.285309f, -0.356772f, -0.413944f, -0.449609f, -0.458703f, -0.439528f, -0.394930f, -0.331849f, + -0.259659f, -0.188462f, -0.126919f, -0.079747f, -0.047119f, -0.026644f, -0.014920f, -0.007007f, 0.003477f, 0.022326f, 0.053985f, 0.103077f, 0.173949f, 0.266925f, 0.376398f, 0.492936f, 0.604875f, 0.697909f, 0.757166f, 0.771956f, 0.737231f, 0.651307f, 0.515864f, 0.338233f, 0.130148f, -0.096058f, -0.327499f, -0.548579f, -0.742907f, -0.897278f, -1.001720f, -1.048233f, -1.033356f, -0.960708f, -0.838436f, -0.676033f, -0.484975f, -0.278710f, -0.069071f, 0.135392f, 0.327026f, 0.498327f, 0.643893f, 0.759696f, 0.840685f, 0.882278f, 0.882920f, 0.842334f, 0.760127f, 0.639470f, 0.488681f, 0.316680f, 0.131973f, -0.052258f, -0.220428f, -0.364266f, -0.478726f, -0.543965f, -0.528700f, -0.427785f, -0.288213f, -0.179234f, -0.133783f, -0.129365f}, + {1.274160f, 1.294020f, 1.337410f, 1.397007f, 1.430345f, 1.392644f, 1.321540f, 1.313359f, 1.357865f, 1.299918f, 1.074412f, 0.879944f, 0.959736f, 1.270988f, 1.546758f, 1.656396f, 1.720956f, 1.866458f, 2.047459f, 2.166309f, 2.211621f, 2.199100f, 2.091661f, 1.870665f, 1.617573f, 1.446851f, 1.393188f, 1.413236f, 1.466179f, 1.550859f, 1.683267f, 1.868310f, 2.085674f, 2.289697f, 2.432421f, 2.495403f, 2.495189f, 2.459782f, 2.406497f, 2.337636f, 2.248632f, 2.141773f, 2.034425f, 1.948929f, 1.893998f, 1.861756f, 1.839825f, 1.817228f, 1.782513f, 1.728672f, 1.660650f, 1.590534f, 1.526449f, 1.470717f, 1.424223f, 1.386891f, 1.357216f, 1.334362f, 1.316849f, 1.298879f, 1.273497f, 1.238579f, 1.193651f, 1.133144f, 1.050266f, 0.946198f, 0.830030f, 0.712686f, 0.605579f, 0.520129f, 0.462158f, 0.429220f, 0.416204f, 0.419491f, 0.434223f, 0.453184f, 0.470641f, 0.483821f, 0.491166f, 0.493159f, 0.493315f, 0.494589f, 0.497104f, 0.501870f, 0.512491f, 0.530588f, 0.554259f, 0.582935f, 0.618415f, 0.659661f, 0.701812f, 0.741007f, 0.775413f, 0.802205f, 0.818331f, 0.823262f, + 0.817499f, 0.800855f, 0.774865f, 0.743310f, 0.708492f, 0.671074f, 0.633855f, 0.600330f, 0.569970f, 0.540678f, 0.514469f, 0.494946f, 0.481818f, 0.473694f, 0.472732f, 0.481094f, 0.496964f, 0.518455f, 0.546609f, 0.581486f, 0.621040f, 0.665611f, 0.717402f, 0.775509f, 0.837954f, 0.906864f, 0.984687f, 1.068602f, 1.155523f, 1.247778f, 1.347134f, 1.449104f, 1.549101f, 1.647389f, 1.742972f, 1.829635f, 1.901324f, 1.954515f, 1.984287f, 1.984824f, 1.952760f, 1.885002f, 1.778297f, 1.635195f, 1.462468f, 1.261420f, 1.031242f, 0.781118f, 0.523064f, 0.255971f, -0.024648f, -0.309222f, -0.588359f, -0.870855f, -1.164972f, -1.466926f, -1.790488f, -2.153822f, -2.486393f, -2.616851f, -2.448223f, -2.105871f, -1.817613f, -1.687068f} + }, + { + {1.085267f, 1.152261f, 1.211254f, 1.149749f, 0.971009f, 0.866642f, 0.973613f, 1.106024f, 0.955689f, 0.568331f, 0.367265f, 0.613757f, 1.064472f, 1.307157f, 1.265967f, 1.200519f, 1.313280f, 1.541852f, 1.705537f, 1.706229f, 1.568164f, 1.377410f, 1.218876f, 1.132463f, 1.108780f, 1.130031f, 1.199863f, 1.323700f, 1.481829f, 1.635911f, 1.747006f, 1.784852f, 1.742653f, 1.647793f, 1.537415f, 1.420984f, 1.285988f, 1.138370f, 1.013812f, 0.945860f, 0.939755f, 0.977271f, 1.030441f, 1.070328f, 1.078971f, 1.058884f, 1.024800f, 0.985828f, 0.939938f, 0.882986f, 0.817274f, 0.751424f, 0.694070f, 0.647432f, 0.607447f, 0.570514f, 0.536843f, 0.505711f, 0.472714f, 0.435641f, 0.398968f, 0.368542f, 0.344855f, 0.324511f, 0.305620f, 0.289416f, 0.278288f, 0.273203f, 0.272251f, 0.272533f, 0.274178f, 0.280435f, 0.293045f, 0.310308f, 0.330160f, 0.351786f, 0.373986f, 0.395582f, 0.417508f, 0.441271f, 0.465902f, 0.489267f, 0.511114f, 0.532441f, 0.553769f, 0.575766f, 0.598998f, 0.621885f, 0.641757f, 0.657943f, 0.670310f, 0.675616f, 0.669581f, 0.651537f, 0.623393f, 0.586505f, + 0.543751f, 0.501741f, 0.466651f, 0.440414f, 0.423767f, 0.419239f, 0.428634f, 0.451471f, 0.487558f, 0.537488f, 0.600521f, 0.675890f, 0.764826f, 0.867101f, 0.977943f, 1.092168f, 1.207453f, 1.319899f, 1.421773f, 1.507786f, 1.578085f, 1.631894f, 1.664687f, 1.674570f, 1.664682f, 1.636762f, 1.588484f, 1.518454f, 1.428003f, 1.317560f, 1.186183f, 1.034404f, 0.864540f, 0.680250f, 0.487109f, 0.289870f, 0.089451f, -0.112563f, -0.309528f, -0.496881f, -0.678674f, -0.858573f, -1.031550f, -1.194122f, -1.353146f, -1.513379f, -1.667664f, -1.810571f, -1.947846f, -2.081093f, -2.199345f, -2.296286f, -2.376795f, -2.438015f, -2.467707f, -2.466689f, -2.437081f, -2.336441f, -2.091727f, -1.697365f, -1.271170f, -0.969067f, -0.847236f, -0.833407f}, + {1.085267f, 1.152261f, 1.211254f, 1.149749f, 0.971009f, 0.866642f, 0.973613f, 1.106024f, 0.955689f, 0.568331f, 0.367265f, 0.613757f, 1.064472f, 1.307157f, 1.265967f, 1.200519f, 1.313280f, 1.541852f, 1.705537f, 1.706229f, 1.568164f, 1.377410f, 1.218876f, 1.132463f, 1.108780f, 1.130031f, 1.199863f, 1.323700f, 1.481829f, 1.635911f, 1.747006f, 1.784852f, 1.742653f, 1.647793f, 1.537415f, 1.420984f, 1.285988f, 1.138370f, 1.013812f, 0.945860f, 0.939755f, 0.977271f, 1.030441f, 1.070328f, 1.078971f, 1.058884f, 1.024800f, 0.985828f, 0.939938f, 0.882986f, 0.817274f, 0.751424f, 0.694070f, 0.647432f, 0.607447f, 0.570514f, 0.536843f, 0.505711f, 0.472714f, 0.435641f, 0.398968f, 0.368542f, 0.344855f, 0.324511f, 0.305620f, 0.289416f, 0.278288f, 0.273203f, 0.272251f, 0.272533f, 0.274178f, 0.280435f, 0.293045f, 0.310308f, 0.330160f, 0.351786f, 0.373986f, 0.395582f, 0.417508f, 0.441271f, 0.465902f, 0.489267f, 0.511114f, 0.532441f, 0.553769f, 0.575766f, 0.598998f, 0.621885f, 0.641757f, 0.657943f, 0.670310f, 0.675616f, 0.669581f, 0.651537f, 0.623393f, 0.586505f, + 0.543751f, 0.501741f, 0.466651f, 0.440414f, 0.423767f, 0.419239f, 0.428634f, 0.451471f, 0.487558f, 0.537488f, 0.600521f, 0.675890f, 0.764826f, 0.867101f, 0.977943f, 1.092168f, 1.207453f, 1.319899f, 1.421773f, 1.507786f, 1.578085f, 1.631894f, 1.664687f, 1.674570f, 1.664682f, 1.636762f, 1.588484f, 1.518454f, 1.428003f, 1.317560f, 1.186183f, 1.034404f, 0.864540f, 0.680250f, 0.487109f, 0.289870f, 0.089451f, -0.112563f, -0.309528f, -0.496881f, -0.678674f, -0.858573f, -1.031550f, -1.194122f, -1.353146f, -1.513379f, -1.667664f, -1.810571f, -1.947846f, -2.081093f, -2.199345f, -2.296286f, -2.376795f, -2.438015f, -2.467707f, -2.466689f, -2.437081f, -2.336441f, -2.091727f, -1.697365f, -1.271170f, -0.969067f, -0.847236f, -0.833407f} + }, + { + {1.063637f, 1.049948f, 1.086384f, 1.183797f, 1.296273f, 1.415018f, 1.543693f, 1.612469f, 1.556818f, 1.452907f, 1.427515f, 1.459162f, 1.420264f, 1.294044f, 1.190504f, 1.155630f, 1.120377f, 1.045118f, 0.972069f, 0.919124f, 0.847607f, 0.755348f, 0.695900f, 0.688650f, 0.697752f, 0.705992f, 0.727492f, 0.745497f, 0.716209f, 0.641022f, 0.570166f, 0.531001f, 0.507183f, 0.487583f, 0.484983f, 0.504740f, 0.536379f, 0.578041f, 0.637538f, 0.709342f, 0.774552f, 0.821621f, 0.850375f, 0.861813f, 0.858985f, 0.852665f, 0.855130f, 0.872248f, 0.905940f, 0.956533f, 1.018160f, 1.078485f, 1.125914f, 1.152867f, 1.153957f, 1.128181f, 1.082146f, 1.025211f, 0.962215f, 0.894440f, 0.824318f, 0.754663f, 0.686000f, 0.618588f, 0.555115f, 0.499006f, 0.452213f, 0.416110f, 0.392138f, 0.380331f, 0.378985f, 0.386260f, 0.400712f, 0.420754f, 0.445470f, 0.475732f, 0.513289f, 0.559298f, 0.614782f, 0.681710f, 0.762351f, 0.857613f, 0.966535f, 1.087403f, 1.219077f, 1.360788f, 1.510315f, 1.662975f, 1.812873f, 1.953724f, 2.077144f, 2.172270f, 2.230289f, 2.248747f, 2.229143f, 2.172148f, + 2.078893f, 1.955382f, 1.810735f, 1.651097f, 1.479367f, 1.300345f, 1.120903f, 0.944335f, 0.769404f, 0.596549f, 0.431085f, 0.278829f, 0.142420f, 0.023726f, -0.073876f, -0.148420f, -0.202406f, -0.240652f, -0.266342f, -0.280625f, -0.284772f, -0.281007f, -0.271464f, -0.257350f, -0.239505f, -0.219653f, -0.200403f, -0.183348f, -0.167670f, -0.151607f, -0.134585f, -0.116624f, -0.096605f, -0.073157f, -0.046830f, -0.019722f, 0.006408f, 0.030219f, 0.049849f, 0.063222f, 0.068554f, 0.064149f, 0.048963f, 0.023015f, -0.014445f, -0.065932f, -0.132497f, -0.211661f, -0.301246f, -0.401651f, -0.510888f, -0.622490f, -0.732373f, -0.841490f, -0.948993f, -1.053059f, -1.159075f, -1.265357f, -1.332750f, -1.299989f, -1.156448f, -0.976901f, -0.852061f, -0.803729f}, + {0.884083f, 0.742870f, 0.484034f, 0.189010f, -0.047347f, -0.209107f, -0.344738f, -0.459774f, -0.499823f, -0.451724f, -0.382172f, -0.347168f, -0.330087f, -0.301047f, -0.273879f, -0.260219f, -0.215653f, -0.082482f, 0.135367f, 0.371639f, 0.553528f, 0.638327f, 0.619182f, 0.521423f, 0.383944f, 0.230950f, 0.070136f, -0.081916f, -0.195335f, -0.256069f, -0.280341f, -0.291132f, -0.295855f, -0.293544f, -0.286342f, -0.272513f, -0.239647f, -0.175676f, -0.081987f, 0.027920f, 0.135920f, 0.222729f, 0.272143f, 0.278209f, 0.246991f, 0.191063f, 0.124955f, 0.063713f, 0.019080f, -0.005719f, -0.015586f, -0.017859f, -0.018227f, -0.020272f, -0.025418f, -0.032738f, -0.040246f, -0.046606f, -0.051516f, -0.055628f, -0.060728f, -0.068985f, -0.081305f, -0.096657f, -0.112333f, -0.123552f, -0.123315f, -0.104730f, -0.064704f, -0.005665f, 0.065287f, 0.138018f, 0.201361f, 0.245987f, 0.266784f, 0.262900f, 0.236050f, 0.188970f, 0.124607f, 0.045940f, -0.043179f, -0.136409f, -0.224142f, -0.294589f, -0.336178f, -0.340444f, -0.304841f, -0.234204f, -0.139606f, -0.035148f, 0.065318f, 0.150348f, 0.212111f, 0.246790f, 0.254210f, 0.237086f, + 0.200362f, 0.150513f, 0.094645f, 0.039670f, -0.008438f, -0.045554f, -0.070189f, -0.083386f, -0.087751f, -0.086464f, -0.082639f, -0.078760f, -0.076232f, -0.075397f, -0.075811f, -0.076287f, -0.074859f, -0.069085f, -0.056682f, -0.036162f, -0.007454f, 0.027621f, 0.065474f, 0.101542f, 0.131285f, 0.150979f, 0.158284f, 0.152450f, 0.134029f, 0.104444f, 0.065783f, 0.020707f, -0.027709f, -0.075976f, -0.120047f, -0.155502f, -0.178183f, -0.184820f, -0.173566f, -0.144714f, -0.101232f, -0.048394f, 0.007260f, 0.058957f, 0.100774f, 0.128927f, 0.142378f, 0.142213f, 0.130754f, 0.111206f, 0.087043f, 0.060849f, 0.034081f, 0.008064f, -0.015849f, -0.037361f, -0.056513f, -0.070516f, -0.073401f, -0.061979f, -0.041900f, -0.024640f, -0.017159f, -0.016562f} + }, + { + {0.884083f, 0.742870f, 0.484034f, 0.189010f, -0.047347f, -0.209107f, -0.344738f, -0.459774f, -0.499823f, -0.451724f, -0.382172f, -0.347168f, -0.330087f, -0.301047f, -0.273879f, -0.260219f, -0.215653f, -0.082482f, 0.135367f, 0.371639f, 0.553528f, 0.638327f, 0.619182f, 0.521423f, 0.383944f, 0.230950f, 0.070136f, -0.081916f, -0.195335f, -0.256069f, -0.280341f, -0.291132f, -0.295855f, -0.293544f, -0.286342f, -0.272513f, -0.239647f, -0.175676f, -0.081987f, 0.027920f, 0.135920f, 0.222729f, 0.272143f, 0.278209f, 0.246991f, 0.191063f, 0.124955f, 0.063713f, 0.019080f, -0.005719f, -0.015586f, -0.017859f, -0.018227f, -0.020272f, -0.025418f, -0.032738f, -0.040246f, -0.046606f, -0.051516f, -0.055628f, -0.060728f, -0.068985f, -0.081305f, -0.096657f, -0.112333f, -0.123552f, -0.123315f, -0.104730f, -0.064704f, -0.005665f, 0.065287f, 0.138018f, 0.201361f, 0.245987f, 0.266784f, 0.262900f, 0.236050f, 0.188970f, 0.124607f, 0.045940f, -0.043179f, -0.136409f, -0.224142f, -0.294589f, -0.336178f, -0.340444f, -0.304841f, -0.234204f, -0.139606f, -0.035148f, 0.065318f, 0.150348f, 0.212111f, 0.246790f, 0.254210f, 0.237086f, + 0.200362f, 0.150513f, 0.094645f, 0.039670f, -0.008438f, -0.045554f, -0.070189f, -0.083386f, -0.087751f, -0.086464f, -0.082639f, -0.078760f, -0.076232f, -0.075397f, -0.075811f, -0.076287f, -0.074859f, -0.069085f, -0.056682f, -0.036162f, -0.007454f, 0.027621f, 0.065474f, 0.101542f, 0.131285f, 0.150979f, 0.158284f, 0.152450f, 0.134029f, 0.104444f, 0.065783f, 0.020707f, -0.027709f, -0.075976f, -0.120047f, -0.155502f, -0.178183f, -0.184820f, -0.173566f, -0.144714f, -0.101232f, -0.048394f, 0.007260f, 0.058957f, 0.100774f, 0.128927f, 0.142378f, 0.142213f, 0.130754f, 0.111206f, 0.087043f, 0.060849f, 0.034081f, 0.008064f, -0.015849f, -0.037361f, -0.056513f, -0.070516f, -0.073401f, -0.061979f, -0.041900f, -0.024640f, -0.017159f, -0.016562f}, + {1.063637f, 1.049948f, 1.086384f, 1.183797f, 1.296273f, 1.415018f, 1.543693f, 1.612469f, 1.556818f, 1.452907f, 1.427515f, 1.459162f, 1.420264f, 1.294044f, 1.190504f, 1.155630f, 1.120377f, 1.045118f, 0.972069f, 0.919124f, 0.847607f, 0.755348f, 0.695900f, 0.688650f, 0.697752f, 0.705992f, 0.727492f, 0.745497f, 0.716209f, 0.641022f, 0.570166f, 0.531001f, 0.507183f, 0.487583f, 0.484983f, 0.504740f, 0.536379f, 0.578041f, 0.637538f, 0.709342f, 0.774552f, 0.821621f, 0.850375f, 0.861813f, 0.858985f, 0.852665f, 0.855130f, 0.872248f, 0.905940f, 0.956533f, 1.018160f, 1.078485f, 1.125914f, 1.152867f, 1.153957f, 1.128181f, 1.082146f, 1.025211f, 0.962215f, 0.894440f, 0.824318f, 0.754663f, 0.686000f, 0.618588f, 0.555115f, 0.499006f, 0.452213f, 0.416110f, 0.392138f, 0.380331f, 0.378985f, 0.386260f, 0.400712f, 0.420754f, 0.445470f, 0.475732f, 0.513289f, 0.559298f, 0.614782f, 0.681710f, 0.762351f, 0.857613f, 0.966535f, 1.087403f, 1.219077f, 1.360788f, 1.510315f, 1.662975f, 1.812873f, 1.953724f, 2.077144f, 2.172270f, 2.230289f, 2.248747f, 2.229143f, 2.172148f, + 2.078893f, 1.955382f, 1.810735f, 1.651097f, 1.479367f, 1.300345f, 1.120903f, 0.944335f, 0.769404f, 0.596549f, 0.431085f, 0.278829f, 0.142420f, 0.023726f, -0.073876f, -0.148420f, -0.202406f, -0.240652f, -0.266342f, -0.280625f, -0.284772f, -0.281007f, -0.271464f, -0.257350f, -0.239505f, -0.219653f, -0.200403f, -0.183348f, -0.167670f, -0.151607f, -0.134585f, -0.116624f, -0.096605f, -0.073157f, -0.046830f, -0.019722f, 0.006408f, 0.030219f, 0.049849f, 0.063222f, 0.068554f, 0.064149f, 0.048963f, 0.023015f, -0.014445f, -0.065932f, -0.132497f, -0.211661f, -0.301246f, -0.401651f, -0.510888f, -0.622490f, -0.732373f, -0.841490f, -0.948993f, -1.053059f, -1.159075f, -1.265357f, -1.332750f, -1.299989f, -1.156448f, -0.976901f, -0.852061f, -0.803729f} + }, + { + {1.162181f, 1.141798f, 1.179331f, 1.312669f, 1.480555f, 1.604003f, 1.670306f, 1.695382f, 1.657718f, 1.541807f, 1.413737f, 1.363031f, 1.373945f, 1.344708f, 1.245904f, 1.165785f, 1.167020f, 1.190832f, 1.158172f, 1.088594f, 1.049454f, 1.044643f, 1.028324f, 0.992763f, 0.971665f, 0.973963f, 0.973448f, 0.958360f, 0.946807f, 0.954173f, 0.976219f, 1.002416f, 1.024019f, 1.032959f, 1.029383f, 1.026640f, 1.038825f, 1.068822f, 1.113169f, 1.168957f, 1.230999f, 1.291508f, 1.346952f, 1.398324f, 1.443741f, 1.478287f, 1.501426f, 1.518040f, 1.532576f, 1.547027f, 1.562611f, 1.578765f, 1.592058f, 1.598749f, 1.596511f, 1.583342f, 1.558420f, 1.523901f, 1.482143f, 1.432374f, 1.373890f, 1.310066f, 1.244815f, 1.177941f, 1.108302f, 1.038172f, 0.970189f, 0.903576f, 0.837584f, 0.775562f, 0.722310f, 0.680443f, 0.651673f, 0.638265f, 0.641074f, 0.658779f, 0.689980f, 0.733722f, 0.788343f, 0.852546f, 0.926831f, 1.011394f, 1.104140f, 1.203288f, 1.309951f, 1.425422f, 1.547756f, 1.673494f, 1.800797f, 1.928139f, 2.051052f, 2.162499f, 2.256187f, 2.328001f, 2.374142f, 2.389503f, + 2.369730f, 2.314896f, 2.228939f, 2.114741f, 1.972694f, 1.805661f, 1.621289f, 1.426246f, 1.222051f, 1.010434f, 0.798653f, 0.594793f, 0.401641f, 0.220362f, 0.056562f, -0.082970f, -0.197029f, -0.288612f, -0.359153f, -0.408639f, -0.439636f, -0.457088f, -0.464729f, -0.464047f, -0.456113f, -0.442968f, -0.427436f, -0.411786f, -0.396493f, -0.381143f, -0.366415f, -0.353190f, -0.339754f, -0.322693f, -0.300816f, -0.275555f, -0.247788f, -0.217400f, -0.185761f, -0.155837f, -0.130316f, -0.111467f, -0.101559f, -0.102274f, -0.115577f, -0.144891f, -0.192498f, -0.257270f, -0.338656f, -0.439477f, -0.560090f, -0.695118f, -0.840907f, -0.998289f, -1.164095f, -1.332994f, -1.508120f, -1.680480f, -1.788383f, -1.743468f, -1.535858f, -1.279623f, -1.106724f, -1.043498f}, + {0.905588f, 0.678721f, 0.311452f, -0.074075f, -0.391395f, -0.617293f, -0.746184f, -0.740920f, -0.564252f, -0.254379f, 0.071055f, 0.303498f, 0.417361f, 0.449527f, 0.432288f, 0.367893f, 0.256058f, 0.119389f, -0.008961f, -0.114172f, -0.203831f, -0.281005f, -0.325060f, -0.311031f, -0.241850f, -0.146096f, -0.046032f, 0.054939f, 0.152046f, 0.226111f, 0.259475f, 0.251935f, 0.213195f, 0.150231f, 0.069290f, -0.018553f, -0.100712f, -0.166582f, -0.205558f, -0.209673f, -0.181832f, -0.135168f, -0.081370f, -0.024250f, 0.034933f, 0.092041f, 0.141134f, 0.175712f, 0.187987f, 0.171668f, 0.127233f, 0.062532f, -0.011072f, -0.081089f, -0.134991f, -0.163771f, -0.165597f, -0.144952f, -0.109017f, -0.065402f, -0.020706f, 0.021494f, 0.060945f, 0.098011f, 0.130933f, 0.155438f, 0.165387f, 0.153670f, 0.114571f, 0.047357f, -0.041172f, -0.136224f, -0.216658f, -0.259817f, -0.249548f, -0.183688f, -0.076336f, 0.046314f, 0.154535f, 0.224647f, 0.245627f, 0.219783f, 0.158447f, 0.076683f, -0.010276f, -0.088825f, -0.147781f, -0.178799f, -0.177443f, -0.145071f, -0.089700f, -0.024150f, 0.037705f, 0.084486f, 0.109662f, 0.112458f, + 0.097013f, 0.070123f, 0.038867f, 0.009115f, -0.015219f, -0.032411f, -0.042533f, -0.046682f, -0.046354f, -0.043035f, -0.037774f, -0.030925f, -0.022303f, -0.011540f, 0.001583f, 0.016669f, 0.032205f, 0.045559f, 0.053690f, 0.054105f, 0.045640f, 0.028983f, 0.006793f, -0.016842f, -0.037453f, -0.051237f, -0.055876f, -0.051059f, -0.038496f, -0.021237f, -0.002673f, 0.014251f, 0.027456f, 0.035870f, 0.039284f, 0.038016f, 0.032623f, 0.023845f, 0.012634f, 0.000134f, -0.012341f, -0.023309f, -0.031253f, -0.034934f, -0.033690f, -0.027594f, -0.017500f, -0.005027f, 0.007694f, 0.018568f, 0.026056f, 0.029352f, 0.028366f, 0.023762f, 0.016767f, 0.008566f, -0.000041f, -0.007969f, -0.013188f, -0.013852f, -0.010529f, -0.006339f, -0.004049f, -0.003641f} + }, + { + {0.905588f, 0.678721f, 0.311452f, -0.074075f, -0.391395f, -0.617293f, -0.746184f, -0.740920f, -0.564252f, -0.254379f, 0.071055f, 0.303498f, 0.417361f, 0.449527f, 0.432288f, 0.367893f, 0.256058f, 0.119389f, -0.008961f, -0.114172f, -0.203831f, -0.281005f, -0.325060f, -0.311031f, -0.241850f, -0.146096f, -0.046032f, 0.054939f, 0.152046f, 0.226111f, 0.259475f, 0.251935f, 0.213195f, 0.150231f, 0.069290f, -0.018553f, -0.100712f, -0.166582f, -0.205558f, -0.209673f, -0.181832f, -0.135168f, -0.081370f, -0.024250f, 0.034933f, 0.092041f, 0.141134f, 0.175712f, 0.187987f, 0.171668f, 0.127233f, 0.062532f, -0.011072f, -0.081089f, -0.134991f, -0.163771f, -0.165597f, -0.144952f, -0.109017f, -0.065402f, -0.020706f, 0.021494f, 0.060945f, 0.098011f, 0.130933f, 0.155438f, 0.165387f, 0.153670f, 0.114571f, 0.047357f, -0.041172f, -0.136224f, -0.216658f, -0.259817f, -0.249548f, -0.183688f, -0.076336f, 0.046314f, 0.154535f, 0.224647f, 0.245627f, 0.219783f, 0.158447f, 0.076683f, -0.010276f, -0.088825f, -0.147781f, -0.178799f, -0.177443f, -0.145071f, -0.089700f, -0.024150f, 0.037705f, 0.084486f, 0.109662f, 0.112458f, + 0.097013f, 0.070123f, 0.038867f, 0.009115f, -0.015219f, -0.032411f, -0.042533f, -0.046682f, -0.046354f, -0.043035f, -0.037774f, -0.030925f, -0.022303f, -0.011540f, 0.001583f, 0.016669f, 0.032205f, 0.045559f, 0.053690f, 0.054105f, 0.045640f, 0.028983f, 0.006793f, -0.016842f, -0.037453f, -0.051237f, -0.055876f, -0.051059f, -0.038496f, -0.021237f, -0.002673f, 0.014251f, 0.027456f, 0.035870f, 0.039284f, 0.038016f, 0.032623f, 0.023845f, 0.012634f, 0.000134f, -0.012341f, -0.023309f, -0.031253f, -0.034934f, -0.033690f, -0.027594f, -0.017500f, -0.005027f, 0.007694f, 0.018568f, 0.026056f, 0.029352f, 0.028366f, 0.023762f, 0.016767f, 0.008566f, -0.000041f, -0.007969f, -0.013188f, -0.013852f, -0.010529f, -0.006339f, -0.004049f, -0.003641f}, + {1.162181f, 1.141798f, 1.179331f, 1.312669f, 1.480555f, 1.604003f, 1.670306f, 1.695382f, 1.657718f, 1.541807f, 1.413737f, 1.363031f, 1.373945f, 1.344708f, 1.245904f, 1.165785f, 1.167020f, 1.190832f, 1.158172f, 1.088594f, 1.049454f, 1.044643f, 1.028324f, 0.992763f, 0.971665f, 0.973963f, 0.973448f, 0.958360f, 0.946807f, 0.954173f, 0.976219f, 1.002416f, 1.024019f, 1.032959f, 1.029383f, 1.026640f, 1.038825f, 1.068822f, 1.113169f, 1.168957f, 1.230999f, 1.291508f, 1.346952f, 1.398324f, 1.443741f, 1.478287f, 1.501426f, 1.518040f, 1.532576f, 1.547027f, 1.562611f, 1.578765f, 1.592058f, 1.598749f, 1.596511f, 1.583342f, 1.558420f, 1.523901f, 1.482143f, 1.432374f, 1.373890f, 1.310066f, 1.244815f, 1.177941f, 1.108302f, 1.038172f, 0.970189f, 0.903576f, 0.837584f, 0.775562f, 0.722310f, 0.680443f, 0.651673f, 0.638265f, 0.641074f, 0.658779f, 0.689980f, 0.733722f, 0.788343f, 0.852546f, 0.926831f, 1.011394f, 1.104140f, 1.203288f, 1.309951f, 1.425422f, 1.547756f, 1.673494f, 1.800797f, 1.928139f, 2.051052f, 2.162499f, 2.256187f, 2.328001f, 2.374142f, 2.389503f, + 2.369730f, 2.314896f, 2.228939f, 2.114741f, 1.972694f, 1.805661f, 1.621289f, 1.426246f, 1.222051f, 1.010434f, 0.798653f, 0.594793f, 0.401641f, 0.220362f, 0.056562f, -0.082970f, -0.197029f, -0.288612f, -0.359153f, -0.408639f, -0.439636f, -0.457088f, -0.464729f, -0.464047f, -0.456113f, -0.442968f, -0.427436f, -0.411786f, -0.396493f, -0.381143f, -0.366415f, -0.353190f, -0.339754f, -0.322693f, -0.300816f, -0.275555f, -0.247788f, -0.217400f, -0.185761f, -0.155837f, -0.130316f, -0.111467f, -0.101559f, -0.102274f, -0.115577f, -0.144891f, -0.192498f, -0.257270f, -0.338656f, -0.439477f, -0.560090f, -0.695118f, -0.840907f, -0.998289f, -1.164095f, -1.332994f, -1.508120f, -1.680480f, -1.788383f, -1.743468f, -1.535858f, -1.279623f, -1.106724f, -1.043498f} + }, + { + {1.159622f, 1.193691f, 1.237258f, 1.320849f, 1.487298f, 1.666553f, 1.724102f, 1.650966f, 1.573042f, 1.544114f, 1.472362f, 1.307714f, 1.161858f, 1.150104f, 1.223815f, 1.264871f, 1.263073f, 1.287888f, 1.342278f, 1.362131f, 1.337721f, 1.330944f, 1.368021f, 1.396360f, 1.364710f, 1.288691f, 1.218865f, 1.183954f, 1.180171f, 1.187830f, 1.187661f, 1.180495f, 1.195032f, 1.259113f, 1.362844f, 1.466040f, 1.540461f, 1.588501f, 1.622646f, 1.646051f, 1.658212f, 1.665631f, 1.678718f, 1.703510f, 1.739748f, 1.783278f, 1.828707f, 1.872076f, 1.911060f, 1.941699f, 1.957382f, 1.953400f, 1.930581f, 1.892863f, 1.843933f, 1.788203f, 1.732141f, 1.681303f, 1.636732f, 1.595689f, 1.554498f, 1.508967f, 1.453241f, 1.380844f, 1.287974f, 1.175649f, 1.048847f, 0.914443f, 0.780366f, 0.655432f, 0.547534f, 0.460905f, 0.396117f, 0.353230f, 0.333368f, 0.336440f, 0.359235f, 0.397509f, 0.448944f, 0.512890f, 0.588417f, 0.673852f, 0.767268f, 0.866240f, 0.967523f, 1.067477f, 1.162781f, 1.251696f, 1.335718f, 1.418848f, 1.503672f, 1.589111f, 1.673021f, 1.754375f, 1.830218f, 1.892793f, + 1.933260f, 1.946807f, 1.930919f, 1.880810f, 1.791440f, 1.663674f, 1.504434f, 1.320882f, 1.118452f, 0.904794f, 0.690996f, 0.486304f, 0.293952f, 0.114062f, -0.051677f, -0.200995f, -0.335215f, -0.458659f, -0.573224f, -0.676398f, -0.765669f, -0.841798f, -0.905649f, -0.954822f, -0.986818f, -1.003613f, -1.009628f, -1.006662f, -0.994352f, -0.974281f, -0.949658f, -0.921427f, -0.888107f, -0.849284f, -0.806653f, -0.762102f, -0.716996f, -0.672764f, -0.630702f, -0.592073f, -0.558976f, -0.533407f, -0.515537f, -0.505563f, -0.506735f, -0.523053f, -0.554958f, -0.601619f, -0.665696f, -0.750024f, -0.851507f, -0.964704f, -1.088238f, -1.219977f, -1.351507f, -1.477464f, -1.598506f, -1.692749f, -1.695051f, -1.547196f, -1.283387f, -1.029223f, -0.886823f, -0.846926f}, + {0.917530f, 0.651778f, 0.241502f, -0.178942f, -0.536560f, -0.786296f, -0.860850f, -0.706638f, -0.361171f, 0.046809f, 0.387357f, 0.602717f, 0.692047f, 0.656485f, 0.487419f, 0.202537f, -0.131209f, -0.422884f, -0.603096f, -0.644757f, -0.551449f, -0.342251f, -0.055144f, 0.244353f, 0.476752f, 0.583435f, 0.550410f, 0.400902f, 0.174798f, -0.079777f, -0.306983f, -0.454414f, -0.491763f, -0.418131f, -0.255796f, -0.044428f, 0.162865f, 0.313621f, 0.377506f, 0.355066f, 0.266380f, 0.136211f, -0.009740f, -0.143360f, -0.238377f, -0.278253f, -0.259547f, -0.190305f, -0.088010f, 0.022991f, 0.117569f, 0.177810f, 0.197350f, 0.179580f, 0.133113f, 0.068872f, -0.000779f, -0.063476f, -0.109645f, -0.134287f, -0.136342f, -0.117479f, -0.081934f, -0.036147f, 0.013007f, 0.059765f, 0.099237f, 0.126500f, 0.136441f, 0.124091f, 0.085864f, 0.023102f, -0.053770f, -0.125481f, -0.170570f, -0.174290f, -0.134420f, -0.062132f, 0.021772f, 0.094424f, 0.139321f, 0.150911f, 0.133188f, 0.094735f, 0.044256f, -0.011227f, -0.065550f, -0.111473f, -0.139846f, -0.141427f, -0.111062f, -0.052088f, 0.022029f, 0.091072f, 0.135690f, 0.145016f, + 0.119868f, 0.070626f, 0.012094f, -0.041731f, -0.081087f, -0.101328f, -0.102037f, -0.085784f, -0.057045f, -0.021038f, 0.017163f, 0.052643f, 0.080347f, 0.095430f, 0.094095f, 0.074476f, 0.037848f, -0.010003f, -0.058809f, -0.096245f, -0.111730f, -0.100012f, -0.063528f, -0.012321f, 0.039313f, 0.078026f, 0.095507f, 0.090021f, 0.065833f, 0.031042f, -0.005483f, -0.036519f, -0.057334f, -0.065748f, -0.062075f, -0.048499f, -0.027988f, -0.003851f, 0.020134f, 0.040124f, 0.053012f, 0.056670f, 0.050087f, 0.034085f, 0.011613f, -0.013157f, -0.035718f, -0.051525f, -0.056944f, -0.050760f, -0.034341f, -0.010740f, 0.015371f, 0.037961f, 0.051881f, 0.054631f, 0.045371f, 0.025148f, 0.000589f, -0.016591f, -0.019315f, -0.012675f, -0.006967f, -0.005603f} + }, + { + {0.917530f, 0.651778f, 0.241502f, -0.178942f, -0.536560f, -0.786296f, -0.860850f, -0.706638f, -0.361171f, 0.046809f, 0.387357f, 0.602717f, 0.692047f, 0.656485f, 0.487419f, 0.202537f, -0.131209f, -0.422884f, -0.603096f, -0.644757f, -0.551449f, -0.342251f, -0.055144f, 0.244353f, 0.476752f, 0.583435f, 0.550410f, 0.400902f, 0.174798f, -0.079777f, -0.306983f, -0.454414f, -0.491763f, -0.418131f, -0.255796f, -0.044428f, 0.162865f, 0.313621f, 0.377506f, 0.355066f, 0.266380f, 0.136211f, -0.009740f, -0.143360f, -0.238377f, -0.278253f, -0.259547f, -0.190305f, -0.088010f, 0.022991f, 0.117569f, 0.177810f, 0.197350f, 0.179580f, 0.133113f, 0.068872f, -0.000779f, -0.063476f, -0.109645f, -0.134287f, -0.136342f, -0.117479f, -0.081934f, -0.036147f, 0.013007f, 0.059765f, 0.099237f, 0.126500f, 0.136441f, 0.124091f, 0.085864f, 0.023102f, -0.053770f, -0.125481f, -0.170570f, -0.174290f, -0.134420f, -0.062132f, 0.021772f, 0.094424f, 0.139321f, 0.150911f, 0.133188f, 0.094735f, 0.044256f, -0.011227f, -0.065550f, -0.111473f, -0.139846f, -0.141427f, -0.111062f, -0.052088f, 0.022029f, 0.091072f, 0.135690f, 0.145016f, + 0.119868f, 0.070626f, 0.012094f, -0.041731f, -0.081087f, -0.101328f, -0.102037f, -0.085784f, -0.057045f, -0.021038f, 0.017163f, 0.052643f, 0.080347f, 0.095430f, 0.094095f, 0.074476f, 0.037848f, -0.010003f, -0.058809f, -0.096245f, -0.111730f, -0.100012f, -0.063528f, -0.012321f, 0.039313f, 0.078026f, 0.095507f, 0.090021f, 0.065833f, 0.031042f, -0.005483f, -0.036519f, -0.057334f, -0.065748f, -0.062075f, -0.048499f, -0.027988f, -0.003851f, 0.020134f, 0.040124f, 0.053012f, 0.056670f, 0.050087f, 0.034085f, 0.011613f, -0.013157f, -0.035718f, -0.051525f, -0.056944f, -0.050760f, -0.034341f, -0.010740f, 0.015371f, 0.037961f, 0.051881f, 0.054631f, 0.045371f, 0.025148f, 0.000589f, -0.016591f, -0.019315f, -0.012675f, -0.006967f, -0.005603f}, + {1.159622f, 1.193691f, 1.237258f, 1.320849f, 1.487298f, 1.666553f, 1.724102f, 1.650966f, 1.573042f, 1.544114f, 1.472362f, 1.307714f, 1.161858f, 1.150104f, 1.223815f, 1.264871f, 1.263073f, 1.287888f, 1.342278f, 1.362131f, 1.337721f, 1.330944f, 1.368021f, 1.396360f, 1.364710f, 1.288691f, 1.218865f, 1.183954f, 1.180171f, 1.187830f, 1.187661f, 1.180495f, 1.195032f, 1.259113f, 1.362844f, 1.466040f, 1.540461f, 1.588501f, 1.622646f, 1.646051f, 1.658212f, 1.665631f, 1.678718f, 1.703510f, 1.739748f, 1.783278f, 1.828707f, 1.872076f, 1.911060f, 1.941699f, 1.957382f, 1.953400f, 1.930581f, 1.892863f, 1.843933f, 1.788203f, 1.732141f, 1.681303f, 1.636732f, 1.595689f, 1.554498f, 1.508967f, 1.453241f, 1.380844f, 1.287974f, 1.175649f, 1.048847f, 0.914443f, 0.780366f, 0.655432f, 0.547534f, 0.460905f, 0.396117f, 0.353230f, 0.333368f, 0.336440f, 0.359235f, 0.397509f, 0.448944f, 0.512890f, 0.588417f, 0.673852f, 0.767268f, 0.866240f, 0.967523f, 1.067477f, 1.162781f, 1.251696f, 1.335718f, 1.418848f, 1.503672f, 1.589111f, 1.673021f, 1.754375f, 1.830218f, 1.892793f, + 1.933260f, 1.946807f, 1.930919f, 1.880810f, 1.791440f, 1.663674f, 1.504434f, 1.320882f, 1.118452f, 0.904794f, 0.690996f, 0.486304f, 0.293952f, 0.114062f, -0.051677f, -0.200995f, -0.335215f, -0.458659f, -0.573224f, -0.676398f, -0.765669f, -0.841798f, -0.905649f, -0.954822f, -0.986818f, -1.003613f, -1.009628f, -1.006662f, -0.994352f, -0.974281f, -0.949658f, -0.921427f, -0.888107f, -0.849284f, -0.806653f, -0.762102f, -0.716996f, -0.672764f, -0.630702f, -0.592073f, -0.558976f, -0.533407f, -0.515537f, -0.505563f, -0.506735f, -0.523053f, -0.554958f, -0.601619f, -0.665696f, -0.750024f, -0.851507f, -0.964704f, -1.088238f, -1.219977f, -1.351507f, -1.477464f, -1.598506f, -1.692749f, -1.695051f, -1.547196f, -1.283387f, -1.029223f, -0.886823f, -0.846926f} + }, + { + {1.204534f, 1.203210f, 1.190459f, 1.158364f, 1.109879f, 1.047847f, 0.967182f, 0.886071f, 0.875240f, 1.004287f, 1.246157f, 1.481970f, 1.615355f, 1.637426f, 1.577214f, 1.457598f, 1.321024f, 1.229774f, 1.206408f, 1.223980f, 1.272061f, 1.371986f, 1.508691f, 1.612777f, 1.637477f, 1.601706f, 1.541886f, 1.477270f, 1.436013f, 1.455349f, 1.534155f, 1.631670f, 1.725521f, 1.826471f, 1.929526f, 1.998858f, 2.013654f, 1.990557f, 1.951995f, 1.904864f, 1.854980f, 1.812358f, 1.776533f, 1.738280f, 1.696957f, 1.660023f, 1.629610f, 1.603794f, 1.584323f, 1.570732f, 1.554937f, 1.532291f, 1.509613f, 1.494021f, 1.482648f, 1.469744f, 1.454557f, 1.436482f, 1.411078f, 1.376370f, 1.336916f, 1.298175f, 1.261515f, 1.226108f, 1.191183f, 1.154956f, 1.113954f, 1.064034f, 1.001800f, 0.926672f, 0.841820f, 0.751089f, 0.655693f, 0.556482f, 0.457666f, 0.364250f, 0.277024f, 0.194155f, 0.116696f, 0.048473f, -0.008535f, -0.054762f, -0.089740f, -0.112245f, -0.123899f, -0.129341f, -0.132173f, -0.133099f, -0.132513f, -0.132606f, -0.135739f, -0.142102f, -0.150075f, -0.158190f, -0.165938f, -0.173194f, + -0.179698f, -0.185269f, -0.190331f, -0.196010f, -0.203236f, -0.211655f, -0.220071f, -0.228003f, -0.235580f, -0.241688f, -0.244000f, -0.241462f, -0.234924f, -0.224740f, -0.209975f, -0.190727f, -0.168794f, -0.145304f, -0.120014f, -0.093330f, -0.066541f, -0.039964f, -0.013201f, 0.013257f, 0.038995f, 0.065097f, 0.092403f, 0.120117f, 0.148133f, 0.178226f, 0.211116f, 0.245318f, 0.280246f, 0.316864f, 0.354258f, 0.389361f, 0.420350f, 0.446556f, 0.465866f, 0.476164f, 0.477674f, 0.470479f, 0.452941f, 0.425418f, 0.390777f, 0.349073f, 0.298093f, 0.240144f, 0.179989f, 0.116389f, 0.045546f, -0.029475f, -0.104553f, -0.184802f, -0.276288f, -0.377633f, -0.495071f, -0.645493f, -0.815390f, -0.936731f, -0.946277f, -0.861930f, -0.763516f, -0.709030f}, + {1.086199f, 1.004862f, 0.856920f, 0.638693f, 0.364003f, 0.130220f, 0.067679f, 0.200071f, 0.403211f, 0.509750f, 0.423010f, 0.156791f, -0.172783f, -0.408435f, -0.470895f, -0.422906f, -0.382903f, -0.401158f, -0.461457f, -0.557666f, -0.691515f, -0.814952f, -0.853789f, -0.795975f, -0.704559f, -0.639966f, -0.610169f, -0.594209f, -0.572008f, -0.524834f, -0.437816f, -0.312986f, -0.167818f, -0.022362f, 0.104727f, 0.198993f, 0.262493f, 0.315863f, 0.378159f, 0.450032f, 0.520371f, 0.579860f, 0.623926f, 0.651912f, 0.668089f, 0.677538f, 0.679621f, 0.670347f, 0.649417f, 0.619352f, 0.580188f, 0.530227f, 0.469047f, 0.395638f, 0.307512f, 0.205554f, 0.095977f, -0.015238f, -0.125770f, -0.233301f, -0.333345f, -0.422540f, -0.499945f, -0.564191f, -0.613419f, -0.648393f, -0.671605f, -0.682790f, -0.678457f, -0.655912f, -0.615299f, -0.558515f, -0.488718f, -0.410330f, -0.327205f, -0.240846f, -0.151506f, -0.060435f, 0.029743f, 0.116185f, 0.196603f, 0.269218f, 0.332259f, 0.383578f, 0.421216f, 0.444550f, 0.454402f, 0.452174f, 0.439605f, 0.418976f, 0.392290f, 0.360410f, 0.324023f, 0.284973f, 0.245420f, 0.206302f, + 0.167896f, 0.131240f, 0.097662f, 0.067544f, 0.040831f, 0.018067f, -0.000312f, -0.015097f, -0.027643f, -0.038677f, -0.048631f, -0.058475f, -0.069291f, -0.081482f, -0.095092f, -0.110486f, -0.128190f, -0.148421f, -0.171029f, -0.195562f, -0.221182f, -0.246725f, -0.270807f, -0.291832f, -0.308285f, -0.319211f, -0.323959f, -0.321487f, -0.310646f, -0.291111f, -0.263101f, -0.226361f, -0.180686f, -0.127219f, -0.067738f, -0.002935f, 0.066945f, 0.140199f, 0.214330f, 0.288003f, 0.360118f, 0.427762f, 0.487507f, 0.537747f, 0.577193f, 0.602502f, 0.610203f, 0.599283f, 0.569254f, 0.518270f, 0.446010f, 0.355357f, 0.248976f, 0.128708f, -0.000380f, -0.132271f, -0.265471f, -0.391680f, -0.476715f, -0.476959f, -0.392112f, -0.282972f, -0.214100f, -0.193429f} + }, + { + {1.086199f, 1.004862f, 0.856920f, 0.638693f, 0.364003f, 0.130220f, 0.067679f, 0.200071f, 0.403211f, 0.509750f, 0.423010f, 0.156791f, -0.172783f, -0.408435f, -0.470895f, -0.422906f, -0.382903f, -0.401158f, -0.461457f, -0.557666f, -0.691515f, -0.814952f, -0.853789f, -0.795975f, -0.704559f, -0.639966f, -0.610169f, -0.594209f, -0.572008f, -0.524834f, -0.437816f, -0.312986f, -0.167818f, -0.022362f, 0.104727f, 0.198993f, 0.262493f, 0.315863f, 0.378159f, 0.450032f, 0.520371f, 0.579860f, 0.623926f, 0.651912f, 0.668089f, 0.677538f, 0.679621f, 0.670347f, 0.649417f, 0.619352f, 0.580188f, 0.530227f, 0.469047f, 0.395638f, 0.307512f, 0.205554f, 0.095977f, -0.015238f, -0.125770f, -0.233301f, -0.333345f, -0.422540f, -0.499945f, -0.564191f, -0.613419f, -0.648393f, -0.671605f, -0.682790f, -0.678457f, -0.655912f, -0.615299f, -0.558515f, -0.488718f, -0.410330f, -0.327205f, -0.240846f, -0.151506f, -0.060435f, 0.029743f, 0.116185f, 0.196603f, 0.269218f, 0.332259f, 0.383578f, 0.421216f, 0.444550f, 0.454402f, 0.452174f, 0.439605f, 0.418976f, 0.392290f, 0.360410f, 0.324023f, 0.284973f, 0.245420f, 0.206302f, + 0.167896f, 0.131240f, 0.097662f, 0.067544f, 0.040831f, 0.018067f, -0.000312f, -0.015097f, -0.027643f, -0.038677f, -0.048631f, -0.058475f, -0.069291f, -0.081482f, -0.095092f, -0.110486f, -0.128190f, -0.148421f, -0.171029f, -0.195562f, -0.221182f, -0.246725f, -0.270807f, -0.291832f, -0.308285f, -0.319211f, -0.323959f, -0.321487f, -0.310646f, -0.291111f, -0.263101f, -0.226361f, -0.180686f, -0.127219f, -0.067738f, -0.002935f, 0.066945f, 0.140199f, 0.214330f, 0.288003f, 0.360118f, 0.427762f, 0.487507f, 0.537747f, 0.577193f, 0.602502f, 0.610203f, 0.599283f, 0.569254f, 0.518270f, 0.446010f, 0.355357f, 0.248976f, 0.128708f, -0.000380f, -0.132271f, -0.265471f, -0.391680f, -0.476715f, -0.476959f, -0.392112f, -0.282972f, -0.214100f, -0.193429f}, + {1.204534f, 1.203210f, 1.190459f, 1.158364f, 1.109879f, 1.047847f, 0.967182f, 0.886071f, 0.875240f, 1.004287f, 1.246157f, 1.481970f, 1.615355f, 1.637426f, 1.577214f, 1.457598f, 1.321024f, 1.229774f, 1.206408f, 1.223980f, 1.272061f, 1.371986f, 1.508691f, 1.612777f, 1.637477f, 1.601706f, 1.541886f, 1.477270f, 1.436013f, 1.455349f, 1.534155f, 1.631670f, 1.725521f, 1.826471f, 1.929526f, 1.998858f, 2.013654f, 1.990557f, 1.951995f, 1.904864f, 1.854980f, 1.812358f, 1.776533f, 1.738280f, 1.696957f, 1.660023f, 1.629610f, 1.603794f, 1.584323f, 1.570732f, 1.554937f, 1.532291f, 1.509613f, 1.494021f, 1.482648f, 1.469744f, 1.454557f, 1.436482f, 1.411078f, 1.376370f, 1.336916f, 1.298175f, 1.261515f, 1.226108f, 1.191183f, 1.154956f, 1.113954f, 1.064034f, 1.001800f, 0.926672f, 0.841820f, 0.751089f, 0.655693f, 0.556482f, 0.457666f, 0.364250f, 0.277024f, 0.194155f, 0.116696f, 0.048473f, -0.008535f, -0.054762f, -0.089740f, -0.112245f, -0.123899f, -0.129341f, -0.132173f, -0.133099f, -0.132513f, -0.132606f, -0.135739f, -0.142102f, -0.150075f, -0.158190f, -0.165938f, -0.173194f, + -0.179698f, -0.185269f, -0.190331f, -0.196010f, -0.203236f, -0.211655f, -0.220071f, -0.228003f, -0.235580f, -0.241688f, -0.244000f, -0.241462f, -0.234924f, -0.224740f, -0.209975f, -0.190727f, -0.168794f, -0.145304f, -0.120014f, -0.093330f, -0.066541f, -0.039964f, -0.013201f, 0.013257f, 0.038995f, 0.065097f, 0.092403f, 0.120117f, 0.148133f, 0.178226f, 0.211116f, 0.245318f, 0.280246f, 0.316864f, 0.354258f, 0.389361f, 0.420350f, 0.446556f, 0.465866f, 0.476164f, 0.477674f, 0.470479f, 0.452941f, 0.425418f, 0.390777f, 0.349073f, 0.298093f, 0.240144f, 0.179989f, 0.116389f, 0.045546f, -0.029475f, -0.104553f, -0.184802f, -0.276288f, -0.377633f, -0.495071f, -0.645493f, -0.815390f, -0.936731f, -0.946277f, -0.861930f, -0.763516f, -0.709030f} + }, + { + {1.136670f, 1.135642f, 1.159558f, 1.242764f, 1.363234f, 1.418639f, 1.336924f, 1.189682f, 1.113008f, 1.131924f, 1.157617f, 1.151455f, 1.181552f, 1.293689f, 1.426449f, 1.500166f, 1.514642f, 1.509585f, 1.486776f, 1.424261f, 1.330820f, 1.239551f, 1.165466f, 1.100846f, 1.040119f, 0.986673f, 0.942034f, 0.902330f, 0.862433f, 0.819391f, 0.776566f, 0.743854f, 0.727187f, 0.719668f, 0.709421f, 0.693441f, 0.678491f, 0.672553f, 0.680404f, 0.703111f, 0.736854f, 0.775141f, 0.814760f, 0.856596f, 0.900306f, 0.942530f, 0.980421f, 1.012484f, 1.035999f, 1.047912f, 1.048713f, 1.042995f, 1.036815f, 1.035930f, 1.044536f, 1.063597f, 1.091269f, 1.124936f, 1.160818f, 1.192654f, 1.214352f, 1.223836f, 1.221719f, 1.207688f, 1.181727f, 1.147450f, 1.110173f, 1.072170f, 1.032778f, 0.991992f, 0.950676f, 0.907968f, 0.861440f, 0.809940f, 0.754528f, 0.696829f, 0.637989f, 0.579463f, 0.523977f, 0.474852f, 0.433794f, 0.399580f, 0.369634f, 0.342464f, 0.317497f, 0.293477f, 0.269419f, 0.247151f, 0.230793f, 0.223510f, 0.226350f, 0.239825f, 0.264468f, 0.299833f, 0.344597f, 0.397722f, + 0.458584f, 0.526418f, 0.600176f, 0.677918f, 0.755919f, 0.829709f, 0.896231f, 0.953601f, 0.999158f, 1.030126f, 1.046156f, 1.048788f, 1.038255f, 1.013274f, 0.974186f, 0.923755f, 0.864275f, 0.796121f, 0.720041f, 0.639023f, 0.556603f, 0.474308f, 0.392028f, 0.310457f, 0.231609f, 0.156391f, 0.083091f, 0.009683f, -0.063465f, -0.135078f, -0.206105f, -0.278586f, -0.351844f, -0.422799f, -0.489943f, -0.553901f, -0.613917f, -0.667023f, -0.711334f, -0.747585f, -0.776837f, -0.798893f, -0.813586f, -0.822199f, -0.827084f, -0.830337f, -0.832774f, -0.834571f, -0.837262f, -0.843529f, -0.854126f, -0.867669f, -0.884714f, -0.908029f, -0.937931f, -0.973595f, -1.017808f, -1.066008f, -1.087268f, -1.038917f, -0.917834f, -0.780429f, -0.689733f, -0.656403f}, + {0.960640f, 0.816300f, 0.532130f, 0.162721f, -0.177503f, -0.386043f, -0.458478f, -0.483376f, -0.540231f, -0.613871f, -0.621946f, -0.516051f, -0.334075f, -0.151666f, -0.004270f, 0.128279f, 0.272309f, 0.416162f, 0.517877f, 0.544624f, 0.498443f, 0.408788f, 0.305793f, 0.199974f, 0.084387f, -0.046450f, -0.182699f, -0.304310f, -0.394850f, -0.445761f, -0.450978f, -0.406320f, -0.316884f, -0.199695f, -0.075242f, 0.041820f, 0.142995f, 0.221772f, 0.273300f, 0.296982f, 0.296450f, 0.276859f, 0.243007f, 0.198850f, 0.147055f, 0.089044f, 0.026127f, -0.039590f, -0.105511f, -0.168772f, -0.225337f, -0.269209f, -0.293289f, -0.291676f, -0.261993f, -0.206338f, -0.130253f, -0.040664f, 0.055241f, 0.149519f, 0.232931f, 0.295939f, 0.330770f, 0.333107f, 0.302661f, 0.242736f, 0.159157f, 0.059248f, -0.048476f, -0.153986f, -0.245588f, -0.310890f, -0.339319f, -0.325534f, -0.271853f, -0.188083f, -0.088946f, 0.009493f, 0.093484f, 0.154613f, 0.190898f, 0.205217f, 0.202369f, 0.186878f, 0.162125f, 0.130210f, 0.092281f, 0.049362f, 0.003253f, -0.043024f, -0.085315f, -0.119041f, -0.140550f, -0.148332f, -0.143136f, -0.127149f, + -0.103171f, -0.074084f, -0.042377f, -0.009910f, 0.021838f, 0.051455f, 0.077582f, 0.098903f, 0.113990f, 0.121384f, 0.119975f, 0.109245f, 0.089333f, 0.061281f, 0.027240f, -0.009804f, -0.046484f, -0.079281f, -0.104807f, -0.120441f, -0.124813f, -0.117785f, -0.100313f, -0.074391f, -0.042701f, -0.008052f, 0.026806f, 0.059088f, 0.086138f, 0.105684f, 0.115807f, 0.115012f, 0.102800f, 0.080165f, 0.049512f, 0.014383f, -0.020831f, -0.051690f, -0.074772f, -0.088141f, -0.091258f, -0.084989f, -0.071486f, -0.053399f, -0.033132f, -0.012815f, 0.005713f, 0.021390f, 0.033926f, 0.043146f, 0.048887f, 0.051423f, 0.051133f, 0.047899f, 0.041642f, 0.032825f, 0.021467f, 0.007161f, -0.008032f, -0.018531f, -0.020230f, -0.015601f, -0.010789f, -0.008773f} + }, + { + {0.960640f, 0.816300f, 0.532130f, 0.162721f, -0.177503f, -0.386043f, -0.458478f, -0.483376f, -0.540231f, -0.613871f, -0.621946f, -0.516051f, -0.334075f, -0.151666f, -0.004270f, 0.128279f, 0.272309f, 0.416162f, 0.517877f, 0.544624f, 0.498443f, 0.408788f, 0.305793f, 0.199974f, 0.084387f, -0.046450f, -0.182699f, -0.304310f, -0.394850f, -0.445761f, -0.450978f, -0.406320f, -0.316884f, -0.199695f, -0.075242f, 0.041820f, 0.142995f, 0.221772f, 0.273300f, 0.296982f, 0.296450f, 0.276859f, 0.243007f, 0.198850f, 0.147055f, 0.089044f, 0.026127f, -0.039590f, -0.105511f, -0.168772f, -0.225337f, -0.269209f, -0.293289f, -0.291676f, -0.261993f, -0.206338f, -0.130253f, -0.040664f, 0.055241f, 0.149519f, 0.232931f, 0.295939f, 0.330770f, 0.333107f, 0.302661f, 0.242736f, 0.159157f, 0.059248f, -0.048476f, -0.153986f, -0.245588f, -0.310890f, -0.339319f, -0.325534f, -0.271853f, -0.188083f, -0.088946f, 0.009493f, 0.093484f, 0.154613f, 0.190898f, 0.205217f, 0.202369f, 0.186878f, 0.162125f, 0.130210f, 0.092281f, 0.049362f, 0.003253f, -0.043024f, -0.085315f, -0.119041f, -0.140550f, -0.148332f, -0.143136f, -0.127149f, + -0.103171f, -0.074084f, -0.042377f, -0.009910f, 0.021838f, 0.051455f, 0.077582f, 0.098903f, 0.113990f, 0.121384f, 0.119975f, 0.109245f, 0.089333f, 0.061281f, 0.027240f, -0.009804f, -0.046484f, -0.079281f, -0.104807f, -0.120441f, -0.124813f, -0.117785f, -0.100313f, -0.074391f, -0.042701f, -0.008052f, 0.026806f, 0.059088f, 0.086138f, 0.105684f, 0.115807f, 0.115012f, 0.102800f, 0.080165f, 0.049512f, 0.014383f, -0.020831f, -0.051690f, -0.074772f, -0.088141f, -0.091258f, -0.084989f, -0.071486f, -0.053399f, -0.033132f, -0.012815f, 0.005713f, 0.021390f, 0.033926f, 0.043146f, 0.048887f, 0.051423f, 0.051133f, 0.047899f, 0.041642f, 0.032825f, 0.021467f, 0.007161f, -0.008032f, -0.018531f, -0.020230f, -0.015601f, -0.010789f, -0.008773f}, + {1.136670f, 1.135642f, 1.159558f, 1.242764f, 1.363234f, 1.418639f, 1.336924f, 1.189682f, 1.113008f, 1.131924f, 1.157617f, 1.151455f, 1.181552f, 1.293689f, 1.426449f, 1.500166f, 1.514642f, 1.509585f, 1.486776f, 1.424261f, 1.330820f, 1.239551f, 1.165466f, 1.100846f, 1.040119f, 0.986673f, 0.942034f, 0.902330f, 0.862433f, 0.819391f, 0.776566f, 0.743854f, 0.727187f, 0.719668f, 0.709421f, 0.693441f, 0.678491f, 0.672553f, 0.680404f, 0.703111f, 0.736854f, 0.775141f, 0.814760f, 0.856596f, 0.900306f, 0.942530f, 0.980421f, 1.012484f, 1.035999f, 1.047912f, 1.048713f, 1.042995f, 1.036815f, 1.035930f, 1.044536f, 1.063597f, 1.091269f, 1.124936f, 1.160818f, 1.192654f, 1.214352f, 1.223836f, 1.221719f, 1.207688f, 1.181727f, 1.147450f, 1.110173f, 1.072170f, 1.032778f, 0.991992f, 0.950676f, 0.907968f, 0.861440f, 0.809940f, 0.754528f, 0.696829f, 0.637989f, 0.579463f, 0.523977f, 0.474852f, 0.433794f, 0.399580f, 0.369634f, 0.342464f, 0.317497f, 0.293477f, 0.269419f, 0.247151f, 0.230793f, 0.223510f, 0.226350f, 0.239825f, 0.264468f, 0.299833f, 0.344597f, 0.397722f, + 0.458584f, 0.526418f, 0.600176f, 0.677918f, 0.755919f, 0.829709f, 0.896231f, 0.953601f, 0.999158f, 1.030126f, 1.046156f, 1.048788f, 1.038255f, 1.013274f, 0.974186f, 0.923755f, 0.864275f, 0.796121f, 0.720041f, 0.639023f, 0.556603f, 0.474308f, 0.392028f, 0.310457f, 0.231609f, 0.156391f, 0.083091f, 0.009683f, -0.063465f, -0.135078f, -0.206105f, -0.278586f, -0.351844f, -0.422799f, -0.489943f, -0.553901f, -0.613917f, -0.667023f, -0.711334f, -0.747585f, -0.776837f, -0.798893f, -0.813586f, -0.822199f, -0.827084f, -0.830337f, -0.832774f, -0.834571f, -0.837262f, -0.843529f, -0.854126f, -0.867669f, -0.884714f, -0.908029f, -0.937931f, -0.973595f, -1.017808f, -1.066008f, -1.087268f, -1.038917f, -0.917834f, -0.780429f, -0.689733f, -0.656403f} + }, + { + {1.068324f, 1.062066f, 1.083672f, 1.156642f, 1.251383f, 1.301241f, 1.270195f, 1.189834f, 1.115171f, 1.063568f, 1.022919f, 1.001888f, 1.030552f, 1.110370f, 1.199864f, 1.259787f, 1.284625f, 1.280603f, 1.242659f, 1.171775f, 1.093479f, 1.036606f, 1.002891f, 0.972808f, 0.933548f, 0.887633f, 0.839967f, 0.790500f, 0.739167f, 0.688251f, 0.638192f, 0.586505f, 0.531813f, 0.475822f, 0.421676f, 0.373637f, 0.338297f, 0.322536f, 0.328305f, 0.350663f, 0.382129f, 0.417959f, 0.456126f, 0.493831f, 0.526907f, 0.552956f, 0.572952f, 0.589166f, 0.603191f, 0.616479f, 0.631032f, 0.648516f, 0.669363f, 0.692743f, 0.716446f, 0.737125f, 0.751798f, 0.758883f, 0.757319f, 0.746131f, 0.726128f, 0.700462f, 0.671814f, 0.640056f, 0.603849f, 0.562908f, 0.517307f, 0.466388f, 0.410454f, 0.352646f, 0.297752f, 0.249844f, 0.211692f, 0.185011f, 0.169810f, 0.163886f, 0.163694f, 0.165778f, 0.167776f, 0.168909f, 0.169698f, 0.170965f, 0.173362f, 0.177738f, 0.185104f, 0.195926f, 0.210178f, 0.228154f, 0.250538f, 0.277725f, 0.309833f, 0.347232f, 0.390456f, 0.439791f, 0.495196f, 0.555920f, + 0.619949f, 0.684571f, 0.747409f, 0.805924f, 0.856574f, 0.896391f, 0.925191f, 0.944416f, 0.954283f, 0.954087f, 0.944612f, 0.927526f, 0.902506f, 0.867475f, 0.821809f, 0.767132f, 0.704886f, 0.635309f, 0.559349f, 0.479847f, 0.399919f, 0.321030f, 0.243461f, 0.168221f, 0.097457f, 0.032552f, -0.027272f, -0.083379f, -0.135625f, -0.183518f, -0.228709f, -0.273886f, -0.319427f, -0.363620f, -0.405822f, -0.446545f, -0.484543f, -0.516852f, -0.541980f, -0.560664f, -0.573598f, -0.580683f, -0.582341f, -0.579795f, -0.574373f, -0.567446f, -0.560136f, -0.552846f, -0.546452f, -0.543218f, -0.544596f, -0.549853f, -0.559220f, -0.575373f, -0.599427f, -0.630547f, -0.671011f, -0.720096f, -0.756779f, -0.745171f, -0.674094f, -0.580065f, -0.512363f, -0.485247f}, + {0.934518f, 0.857858f, 0.682018f, 0.418282f, 0.149886f, -0.022248f, -0.085705f, -0.132956f, -0.243348f, -0.384067f, -0.470420f, -0.490862f, -0.510507f, -0.564810f, -0.615008f, -0.613799f, -0.558408f, -0.464246f, -0.334644f, -0.179741f, -0.030327f, 0.091349f, 0.193272f, 0.290516f, 0.379280f, 0.447234f, 0.493298f, 0.523281f, 0.535766f, 0.522478f, 0.477212f, 0.399948f, 0.297897f, 0.184846f, 0.074020f, -0.029775f, -0.126981f, -0.213768f, -0.281234f, -0.323523f, -0.342095f, -0.342589f, -0.331435f, -0.314724f, -0.296652f, -0.278561f, -0.260507f, -0.242171f, -0.220746f, -0.189924f, -0.143224f, -0.078060f, 0.003244f, 0.094157f, 0.184987f, 0.265868f, 0.330948f, 0.379383f, 0.412093f, 0.428623f, 0.427005f, 0.404850f, 0.360089f, 0.292366f, 0.204920f, 0.104626f, -0.000261f, -0.102308f, -0.195788f, -0.277059f, -0.344399f, -0.396403f, -0.430000f, -0.440595f, -0.424427f, -0.380841f, -0.313172f, -0.228570f, -0.136582f, -0.046276f, 0.036288f, 0.108164f, 0.167991f, 0.215177f, 0.250068f, 0.273681f, 0.286922f, 0.290465f, 0.285187f, 0.272099f, 0.251841f, 0.224631f, 0.190554f, 0.149524f, 0.101233f, 0.045772f, + -0.015434f, -0.079411f, -0.142271f, -0.199904f, -0.248354f, -0.284186f, -0.304987f, -0.309598f, -0.297829f, -0.270211f, -0.228225f, -0.174500f, -0.112362f, -0.045271f, 0.023093f, 0.088668f, 0.147582f, 0.196800f, 0.233966f, 0.257190f, 0.265649f, 0.259970f, 0.241494f, 0.211697f, 0.172676f, 0.127321f, 0.078348f, 0.027873f, -0.021726f, -0.067568f, -0.107275f, -0.139243f, -0.161825f, -0.173602f, -0.174673f, -0.166498f, -0.150627f, -0.128782f, -0.103666f, -0.078044f, -0.053346f, -0.030259f, -0.009734f, 0.007887f, 0.023557f, 0.038115f, 0.051436f, 0.063720f, 0.075766f, 0.087264f, 0.096795f, 0.103721f, 0.107784f, 0.107330f, 0.100689f, 0.088113f, 0.069180f, 0.041288f, 0.006332f, -0.023956f, -0.037070f, -0.033441f, -0.024607f, -0.019448f} + }, + { + {0.934518f, 0.857858f, 0.682018f, 0.418282f, 0.149886f, -0.022248f, -0.085705f, -0.132956f, -0.243348f, -0.384067f, -0.470420f, -0.490862f, -0.510507f, -0.564810f, -0.615008f, -0.613799f, -0.558408f, -0.464246f, -0.334644f, -0.179741f, -0.030327f, 0.091349f, 0.193272f, 0.290516f, 0.379280f, 0.447234f, 0.493298f, 0.523281f, 0.535766f, 0.522478f, 0.477212f, 0.399948f, 0.297897f, 0.184846f, 0.074020f, -0.029775f, -0.126981f, -0.213768f, -0.281234f, -0.323523f, -0.342095f, -0.342589f, -0.331435f, -0.314724f, -0.296652f, -0.278561f, -0.260507f, -0.242171f, -0.220746f, -0.189924f, -0.143224f, -0.078060f, 0.003244f, 0.094157f, 0.184987f, 0.265868f, 0.330948f, 0.379383f, 0.412093f, 0.428623f, 0.427005f, 0.404850f, 0.360089f, 0.292366f, 0.204920f, 0.104626f, -0.000261f, -0.102308f, -0.195788f, -0.277059f, -0.344399f, -0.396403f, -0.430000f, -0.440595f, -0.424427f, -0.380841f, -0.313172f, -0.228570f, -0.136582f, -0.046276f, 0.036288f, 0.108164f, 0.167991f, 0.215177f, 0.250068f, 0.273681f, 0.286922f, 0.290465f, 0.285187f, 0.272099f, 0.251841f, 0.224631f, 0.190554f, 0.149524f, 0.101233f, 0.045772f, + -0.015434f, -0.079411f, -0.142271f, -0.199904f, -0.248354f, -0.284186f, -0.304987f, -0.309598f, -0.297829f, -0.270211f, -0.228225f, -0.174500f, -0.112362f, -0.045271f, 0.023093f, 0.088668f, 0.147582f, 0.196800f, 0.233966f, 0.257190f, 0.265649f, 0.259970f, 0.241494f, 0.211697f, 0.172676f, 0.127321f, 0.078348f, 0.027873f, -0.021726f, -0.067568f, -0.107275f, -0.139243f, -0.161825f, -0.173602f, -0.174673f, -0.166498f, -0.150627f, -0.128782f, -0.103666f, -0.078044f, -0.053346f, -0.030259f, -0.009734f, 0.007887f, 0.023557f, 0.038115f, 0.051436f, 0.063720f, 0.075766f, 0.087264f, 0.096795f, 0.103721f, 0.107784f, 0.107330f, 0.100689f, 0.088113f, 0.069180f, 0.041288f, 0.006332f, -0.023956f, -0.037070f, -0.033441f, -0.024607f, -0.019448f}, + {1.068324f, 1.062066f, 1.083672f, 1.156642f, 1.251383f, 1.301241f, 1.270195f, 1.189834f, 1.115171f, 1.063568f, 1.022919f, 1.001888f, 1.030552f, 1.110370f, 1.199864f, 1.259787f, 1.284625f, 1.280603f, 1.242659f, 1.171775f, 1.093479f, 1.036606f, 1.002891f, 0.972808f, 0.933548f, 0.887633f, 0.839967f, 0.790500f, 0.739167f, 0.688251f, 0.638192f, 0.586505f, 0.531813f, 0.475822f, 0.421676f, 0.373637f, 0.338297f, 0.322536f, 0.328305f, 0.350663f, 0.382129f, 0.417959f, 0.456126f, 0.493831f, 0.526907f, 0.552956f, 0.572952f, 0.589166f, 0.603191f, 0.616479f, 0.631032f, 0.648516f, 0.669363f, 0.692743f, 0.716446f, 0.737125f, 0.751798f, 0.758883f, 0.757319f, 0.746131f, 0.726128f, 0.700462f, 0.671814f, 0.640056f, 0.603849f, 0.562908f, 0.517307f, 0.466388f, 0.410454f, 0.352646f, 0.297752f, 0.249844f, 0.211692f, 0.185011f, 0.169810f, 0.163886f, 0.163694f, 0.165778f, 0.167776f, 0.168909f, 0.169698f, 0.170965f, 0.173362f, 0.177738f, 0.185104f, 0.195926f, 0.210178f, 0.228154f, 0.250538f, 0.277725f, 0.309833f, 0.347232f, 0.390456f, 0.439791f, 0.495196f, 0.555920f, + 0.619949f, 0.684571f, 0.747409f, 0.805924f, 0.856574f, 0.896391f, 0.925191f, 0.944416f, 0.954283f, 0.954087f, 0.944612f, 0.927526f, 0.902506f, 0.867475f, 0.821809f, 0.767132f, 0.704886f, 0.635309f, 0.559349f, 0.479847f, 0.399919f, 0.321030f, 0.243461f, 0.168221f, 0.097457f, 0.032552f, -0.027272f, -0.083379f, -0.135625f, -0.183518f, -0.228709f, -0.273886f, -0.319427f, -0.363620f, -0.405822f, -0.446545f, -0.484543f, -0.516852f, -0.541980f, -0.560664f, -0.573598f, -0.580683f, -0.582341f, -0.579795f, -0.574373f, -0.567446f, -0.560136f, -0.552846f, -0.546452f, -0.543218f, -0.544596f, -0.549853f, -0.559220f, -0.575373f, -0.599427f, -0.630547f, -0.671011f, -0.720096f, -0.756779f, -0.745171f, -0.674094f, -0.580065f, -0.512363f, -0.485247f} + } +}; +const float CRendBin_Combined_HRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][160]={ + { + {0.022597f, 0.065202f, 0.094800f, 0.087222f, 0.028863f, -0.033215f, -0.025115f, 0.029670f, 0.010871f, -0.094080f, -0.093395f, 0.164837f, 0.534054f, 0.723953f, 0.668586f, 0.562550f, 0.547018f, 0.547467f, 0.451265f, 0.273050f, 0.076100f, -0.133607f, -0.347652f, -0.484095f, -0.465506f, -0.320173f, -0.144456f, 0.002459f, 0.124086f, 0.236901f, 0.334318f, 0.388275f, 0.365496f, 0.251083f, 0.066984f, -0.139501f, -0.329262f, -0.490031f, -0.628003f, -0.750861f, -0.856460f, -0.932287f, -0.968749f, -0.973950f, -0.969671f, -0.973735f, -0.992918f, -1.028350f, -1.076088f, -1.123879f, -1.158091f, -1.174678f, -1.178288f, -1.174093f, -1.165759f, -1.157129f, -1.151037f, -1.149567f, -1.156736f, -1.175982f, -1.205151f, -1.239655f, -1.278806f, -1.322162f, -1.361620f, -1.384066f, -1.380279f, -1.346908f, -1.284430f, -1.199139f, -1.103249f, -1.007963f, -0.918939f, -0.839828f, -0.774659f, -0.724527f, -0.686467f, -0.656634f, -0.631187f, -0.605488f, -0.576739f, -0.545772f, -0.513340f, -0.478002f, -0.440201f, -0.403792f, -0.371197f, -0.342018f, -0.317969f, -0.303696f, -0.301471f, -0.309948f, -0.328028f, -0.355049f, -0.388060f, -0.423148f, + -0.457901f, -0.489672f, -0.514648f, -0.531085f, -0.539738f, -0.540079f, -0.530837f, -0.514091f, -0.493133f, -0.467135f, -0.433667f, -0.394405f, -0.352537f, -0.307676f, -0.258996f, -0.209516f, -0.162264f, -0.116664f, -0.072404f, -0.031550f, 0.005591f, 0.040704f, 0.072658f, 0.098740f, 0.119709f, 0.136856f, 0.146623f, 0.145056f, 0.133481f, 0.112977f, 0.078684f, 0.025978f, -0.044059f, -0.130730f, -0.238118f, -0.369115f, -0.521997f, -0.694951f, -0.886933f, -1.093940f, -1.310375f, -1.531202f, -1.748254f, -1.951169f, -2.135588f, -2.301024f, -2.440136f, -2.544008f, -2.616201f, -2.664228f, -2.682466f, -2.663745f, -2.617014f, -2.550432f, -2.454397f, -2.322601f, -2.151953f, -1.890105f, -1.449852f, -0.850895f, -0.291398f, 0.021597f, 0.081084f, 0.031473f}, + {-0.080276f, -0.311417f, -0.607640f, -0.791927f, -0.800857f, -0.760608f, -0.739148f, -0.646209f, -0.447092f, -0.280447f, -0.279295f, -0.423068f, -0.622336f, -0.804161f, -0.867594f, -0.710767f, -0.374205f, -0.036779f, 0.187292f, 0.339906f, 0.474434f, 0.550962f, 0.537943f, 0.503393f, 0.524522f, 0.587272f, 0.644960f, 0.705979f, 0.790728f, 0.855477f, 0.834725f, 0.730307f, 0.593843f, 0.437574f, 0.224869f, -0.047825f, -0.311841f, -0.490861f, -0.575373f, -0.611964f, -0.639917f, -0.664189f, -0.679158f, -0.686945f, -0.685661f, -0.661531f, -0.605064f, -0.523507f, -0.428999f, -0.324606f, -0.209719f, -0.090298f, 0.024311f, 0.128844f, 0.221046f, 0.298789f, 0.362618f, 0.416158f, 0.460462f, 0.491627f, 0.505331f, 0.499605f, 0.472944f, 0.425203f, 0.361839f, 0.292961f, 0.226591f, 0.165529f, 0.110752f, 0.064158f, 0.026873f, -0.002586f, -0.027283f, -0.050301f, -0.074568f, -0.102794f, -0.136426f, -0.174543f, -0.213824f, -0.249920f, -0.279603f, -0.302272f, -0.319692f, -0.334393f, -0.347809f, -0.358600f, -0.361817f, -0.350205f, -0.317616f, -0.261906f, -0.185247f, -0.092969f, 0.007045f, 0.104879f, 0.190432f, 0.255872f, + 0.297100f, 0.314390f, 0.312581f, 0.299610f, 0.283349f, 0.269653f, 0.262979f, 0.266740f, 0.281862f, 0.306365f, 0.337110f, 0.369991f, 0.397544f, 0.408784f, 0.393056f, 0.342920f, 0.253936f, 0.125604f, -0.035892f, -0.218368f, -0.407961f, -0.590892f, -0.752239f, -0.877499f, -0.956409f, -0.982915f, -0.952586f, -0.863813f, -0.720987f, -0.533454f, -0.312498f, -0.071910f, 0.171049f, 0.399293f, 0.599797f, 0.762809f, 0.880702f, 0.950183f, 0.972884f, 0.951927f, 0.890214f, 0.792224f, 0.663786f, 0.509824f, 0.335460f, 0.148522f, -0.042097f, -0.228597f, -0.401857f, -0.550339f, -0.664707f, -0.739759f, -0.770184f, -0.751394f, -0.686776f, -0.584706f, -0.445967f, -0.269185f, -0.078301f, 0.070423f, 0.128885f, 0.103757f, 0.049358f, 0.011607f} + }, + { + {-0.080276f, -0.311417f, -0.607640f, -0.791927f, -0.800857f, -0.760608f, -0.739148f, -0.646209f, -0.447092f, -0.280447f, -0.279295f, -0.423068f, -0.622336f, -0.804161f, -0.867594f, -0.710767f, -0.374205f, -0.036779f, 0.187292f, 0.339906f, 0.474434f, 0.550962f, 0.537943f, 0.503393f, 0.524522f, 0.587272f, 0.644960f, 0.705979f, 0.790728f, 0.855477f, 0.834725f, 0.730307f, 0.593843f, 0.437574f, 0.224869f, -0.047825f, -0.311841f, -0.490861f, -0.575373f, -0.611964f, -0.639917f, -0.664189f, -0.679158f, -0.686945f, -0.685661f, -0.661531f, -0.605064f, -0.523507f, -0.428999f, -0.324606f, -0.209719f, -0.090298f, 0.024311f, 0.128844f, 0.221046f, 0.298789f, 0.362618f, 0.416158f, 0.460462f, 0.491627f, 0.505331f, 0.499605f, 0.472944f, 0.425203f, 0.361839f, 0.292961f, 0.226591f, 0.165529f, 0.110752f, 0.064158f, 0.026873f, -0.002586f, -0.027283f, -0.050301f, -0.074568f, -0.102794f, -0.136426f, -0.174543f, -0.213824f, -0.249920f, -0.279603f, -0.302272f, -0.319692f, -0.334393f, -0.347809f, -0.358600f, -0.361817f, -0.350205f, -0.317616f, -0.261906f, -0.185247f, -0.092969f, 0.007045f, 0.104879f, 0.190432f, 0.255872f, + 0.297100f, 0.314390f, 0.312581f, 0.299610f, 0.283349f, 0.269653f, 0.262979f, 0.266740f, 0.281862f, 0.306365f, 0.337110f, 0.369991f, 0.397544f, 0.408784f, 0.393056f, 0.342920f, 0.253936f, 0.125604f, -0.035892f, -0.218368f, -0.407961f, -0.590892f, -0.752239f, -0.877499f, -0.956409f, -0.982915f, -0.952586f, -0.863813f, -0.720987f, -0.533454f, -0.312498f, -0.071910f, 0.171049f, 0.399293f, 0.599797f, 0.762809f, 0.880702f, 0.950183f, 0.972884f, 0.951927f, 0.890214f, 0.792224f, 0.663786f, 0.509824f, 0.335460f, 0.148522f, -0.042097f, -0.228597f, -0.401857f, -0.550339f, -0.664707f, -0.739759f, -0.770184f, -0.751394f, -0.686776f, -0.584706f, -0.445967f, -0.269185f, -0.078301f, 0.070423f, 0.128885f, 0.103757f, 0.049358f, 0.011607f}, + {0.022597f, 0.065202f, 0.094800f, 0.087222f, 0.028863f, -0.033215f, -0.025115f, 0.029670f, 0.010871f, -0.094080f, -0.093395f, 0.164837f, 0.534054f, 0.723953f, 0.668586f, 0.562550f, 0.547018f, 0.547467f, 0.451265f, 0.273050f, 0.076100f, -0.133607f, -0.347652f, -0.484095f, -0.465506f, -0.320173f, -0.144456f, 0.002459f, 0.124086f, 0.236901f, 0.334318f, 0.388275f, 0.365496f, 0.251083f, 0.066984f, -0.139501f, -0.329262f, -0.490031f, -0.628003f, -0.750861f, -0.856460f, -0.932287f, -0.968749f, -0.973950f, -0.969671f, -0.973735f, -0.992918f, -1.028350f, -1.076088f, -1.123879f, -1.158091f, -1.174678f, -1.178288f, -1.174093f, -1.165759f, -1.157129f, -1.151037f, -1.149567f, -1.156736f, -1.175982f, -1.205151f, -1.239655f, -1.278806f, -1.322162f, -1.361620f, -1.384066f, -1.380279f, -1.346908f, -1.284430f, -1.199139f, -1.103249f, -1.007963f, -0.918939f, -0.839828f, -0.774659f, -0.724527f, -0.686467f, -0.656634f, -0.631187f, -0.605488f, -0.576739f, -0.545772f, -0.513340f, -0.478002f, -0.440201f, -0.403792f, -0.371197f, -0.342018f, -0.317969f, -0.303696f, -0.301471f, -0.309948f, -0.328028f, -0.355049f, -0.388060f, -0.423148f, + -0.457901f, -0.489672f, -0.514648f, -0.531085f, -0.539738f, -0.540079f, -0.530837f, -0.514091f, -0.493133f, -0.467135f, -0.433667f, -0.394405f, -0.352537f, -0.307676f, -0.258996f, -0.209516f, -0.162264f, -0.116664f, -0.072404f, -0.031550f, 0.005591f, 0.040704f, 0.072658f, 0.098740f, 0.119709f, 0.136856f, 0.146623f, 0.145056f, 0.133481f, 0.112977f, 0.078684f, 0.025978f, -0.044059f, -0.130730f, -0.238118f, -0.369115f, -0.521997f, -0.694951f, -0.886933f, -1.093940f, -1.310375f, -1.531202f, -1.748254f, -1.951169f, -2.135588f, -2.301024f, -2.440136f, -2.544008f, -2.616201f, -2.664228f, -2.682466f, -2.663745f, -2.617014f, -2.550432f, -2.454397f, -2.322601f, -2.151953f, -1.890105f, -1.449852f, -0.850895f, -0.291398f, 0.021597f, 0.081084f, 0.031473f} + }, + { + {0.021336f, 0.022839f, -0.073302f, -0.217195f, -0.247984f, -0.104075f, 0.014239f, -0.112545f, -0.344615f, -0.293672f, 0.139315f, 0.578646f, 0.643404f, 0.405511f, 0.222872f, 0.260763f, 0.361987f, 0.319901f, 0.107580f, -0.158487f, -0.355870f, -0.427989f, -0.389853f, -0.297927f, -0.198578f, -0.103336f, -0.016535f, 0.036571f, 0.024244f, -0.066294f, -0.225146f, -0.422394f, -0.612111f, -0.757578f, -0.858245f, -0.933908f, -0.983839f, -0.983826f, -0.924185f, -0.829851f, -0.740362f, -0.685366f, -0.677873f, -0.713138f, -0.770012f, -0.824820f, -0.868218f, -0.904879f, -0.939349f, -0.967949f, -0.983081f, -0.981192f, -0.966416f, -0.947112f, -0.928422f, -0.909876f, -0.890814f, -0.873490f, -0.857977f, -0.838957f, -0.811865f, -0.778815f, -0.745042f, -0.712396f, -0.678987f, -0.642950f, -0.604773f, -0.567091f, -0.532266f, -0.499479f, -0.465735f, -0.430492f, -0.396831f, -0.367428f, -0.342441f, -0.321661f, -0.305164f, -0.291646f, -0.279605f, -0.269981f, -0.264614f, -0.263048f, -0.263497f, -0.265405f, -0.268988f, -0.274537f, -0.283634f, -0.298307f, -0.318291f, -0.342181f, -0.370706f, -0.404808f, -0.441384f, -0.474914f, -0.501713f, -0.518854f, + -0.521982f, -0.508767f, -0.481950f, -0.445493f, -0.400843f, -0.349459f, -0.294957f, -0.240473f, -0.187566f, -0.138571f, -0.096275f, -0.061952f, -0.037779f, -0.029269f, -0.041199f, -0.074110f, -0.128361f, -0.206759f, -0.309186f, -0.430094f, -0.565083f, -0.714033f, -0.874899f, -1.041263f, -1.208909f, -1.378424f, -1.549363f, -1.717858f, -1.880821f, -2.037000f, -2.183716f, -2.316614f, -2.431612f, -2.525085f, -2.595175f, -2.643617f, -2.672077f, -2.678363f, -2.662123f, -2.630131f, -2.587965f, -2.532325f, -2.460515f, -2.378974f, -2.291916f, -2.192016f, -2.073566f, -1.942343f, -1.801293f, -1.641629f, -1.459200f, -1.262257f, -1.053445f, -0.825148f, -0.579571f, -0.325028f, -0.046466f, 0.276154f, 0.595944f, 0.788105f, 0.756992f, 0.541774f, 0.282133f, 0.080550f}, + {0.021336f, 0.022839f, -0.073302f, -0.217195f, -0.247984f, -0.104075f, 0.014239f, -0.112545f, -0.344615f, -0.293672f, 0.139315f, 0.578646f, 0.643404f, 0.405511f, 0.222872f, 0.260763f, 0.361987f, 0.319901f, 0.107580f, -0.158487f, -0.355870f, -0.427989f, -0.389853f, -0.297927f, -0.198578f, -0.103336f, -0.016535f, 0.036571f, 0.024244f, -0.066294f, -0.225146f, -0.422394f, -0.612111f, -0.757578f, -0.858245f, -0.933908f, -0.983839f, -0.983826f, -0.924185f, -0.829851f, -0.740362f, -0.685366f, -0.677873f, -0.713138f, -0.770012f, -0.824820f, -0.868218f, -0.904879f, -0.939349f, -0.967949f, -0.983081f, -0.981192f, -0.966416f, -0.947112f, -0.928422f, -0.909876f, -0.890814f, -0.873490f, -0.857977f, -0.838957f, -0.811865f, -0.778815f, -0.745042f, -0.712396f, -0.678987f, -0.642950f, -0.604773f, -0.567091f, -0.532266f, -0.499479f, -0.465735f, -0.430492f, -0.396831f, -0.367428f, -0.342441f, -0.321661f, -0.305164f, -0.291646f, -0.279605f, -0.269981f, -0.264614f, -0.263048f, -0.263497f, -0.265405f, -0.268988f, -0.274537f, -0.283634f, -0.298307f, -0.318291f, -0.342181f, -0.370706f, -0.404808f, -0.441384f, -0.474914f, -0.501713f, -0.518854f, + -0.521982f, -0.508767f, -0.481950f, -0.445493f, -0.400843f, -0.349459f, -0.294957f, -0.240473f, -0.187566f, -0.138571f, -0.096275f, -0.061952f, -0.037779f, -0.029269f, -0.041199f, -0.074110f, -0.128361f, -0.206759f, -0.309186f, -0.430094f, -0.565083f, -0.714033f, -0.874899f, -1.041263f, -1.208909f, -1.378424f, -1.549363f, -1.717858f, -1.880821f, -2.037000f, -2.183716f, -2.316614f, -2.431612f, -2.525085f, -2.595175f, -2.643617f, -2.672077f, -2.678363f, -2.662123f, -2.630131f, -2.587965f, -2.532325f, -2.460515f, -2.378974f, -2.291916f, -2.192016f, -2.073566f, -1.942343f, -1.801293f, -1.641629f, -1.459200f, -1.262257f, -1.053445f, -0.825148f, -0.579571f, -0.325028f, -0.046466f, 0.276154f, 0.595944f, 0.788105f, 0.756992f, 0.541774f, 0.282133f, 0.080550f} + }, + { + {0.012018f, 0.066586f, 0.152639f, 0.207071f, 0.209717f, 0.178456f, 0.085121f, -0.092155f, -0.264863f, -0.327430f, -0.327666f, -0.395977f, -0.530744f, -0.609862f, -0.598708f, -0.587572f, -0.623204f, -0.652992f, -0.647573f, -0.644111f, -0.649663f, -0.617816f, -0.540898f, -0.469537f, -0.429175f, -0.400620f, -0.385308f, -0.408445f, -0.453223f, -0.464516f, -0.424417f, -0.365930f, -0.311545f, -0.251073f, -0.180010f, -0.112919f, -0.056366f, -0.004630f, 0.037141f, 0.053534f, 0.041699f, 0.013687f, -0.019541f, -0.051027f, -0.071574f, -0.074580f, -0.063254f, -0.045955f, -0.030239f, -0.025174f, -0.041237f, -0.083221f, -0.147899f, -0.228711f, -0.317157f, -0.401610f, -0.472141f, -0.526510f, -0.567243f, -0.595153f, -0.609617f, -0.611851f, -0.603354f, -0.583289f, -0.550511f, -0.506187f, -0.452584f, -0.391616f, -0.325856f, -0.258757f, -0.192849f, -0.129124f, -0.068038f, -0.009425f, 0.048121f, 0.106115f, 0.164670f, 0.223043f, 0.280807f, 0.337215f, 0.389845f, 0.434804f, 0.468298f, 0.487689f, 0.490882f, 0.474753f, 0.434821f, 0.367002f, 0.268928f, 0.138992f, -0.023741f, -0.216176f, -0.429032f, -0.650898f, -0.873502f, -1.090516f, + -1.293455f, -1.473572f, -1.627329f, -1.755674f, -1.858280f, -1.933078f, -1.981344f, -2.007913f, -2.014974f, -1.999942f, -1.960994f, -1.900865f, -1.823692f, -1.732040f, -1.629346f, -1.522206f, -1.417380f, -1.317914f, -1.223887f, -1.135589f, -1.054380f, -0.981265f, -0.916122f, -0.858499f, -0.808619f, -0.767042f, -0.733071f, -0.704146f, -0.677737f, -0.653344f, -0.631604f, -0.612382f, -0.595471f, -0.582461f, -0.575952f, -0.577320f, -0.586697f, -0.604312f, -0.630361f, -0.664275f, -0.705000f, -0.751057f, -0.800298f, -0.851098f, -0.903010f, -0.954211f, -0.999996f, -1.036419f, -1.062657f, -1.076833f, -1.073963f, -1.051969f, -1.014117f, -0.961872f, -0.892965f, -0.807931f, -0.703595f, -0.557881f, -0.349467f, -0.110075f, 0.071803f, 0.131434f, 0.094014f, 0.030195f}, + {-0.169676f, -0.479045f, -0.687725f, -0.745490f, -0.686566f, -0.594240f, -0.494282f, -0.350297f, -0.167225f, -0.017915f, 0.055446f, 0.093690f, 0.144892f, 0.201511f, 0.248867f, 0.316763f, 0.432409f, 0.556198f, 0.607835f, 0.540635f, 0.367708f, 0.137640f, -0.092179f, -0.276530f, -0.400339f, -0.471378f, -0.492192f, -0.455690f, -0.371267f, -0.272288f, -0.186910f, -0.117137f, -0.053329f, 0.007761f, 0.067846f, 0.134100f, 0.208892f, 0.279839f, 0.327334f, 0.337226f, 0.304345f, 0.232251f, 0.134706f, 0.032552f, -0.055175f, -0.116728f, -0.147122f, -0.148098f, -0.129145f, -0.103722f, -0.081991f, -0.067689f, -0.060332f, -0.057605f, -0.056281f, -0.053648f, -0.048905f, -0.042789f, -0.036484f, -0.031173f, -0.027357f, -0.023751f, -0.017402f, -0.004993f, 0.016436f, 0.049010f, 0.092097f, 0.140251f, 0.183980f, 0.213061f, 0.219488f, 0.199132f, 0.152883f, 0.086666f, 0.009291f, -0.070535f, -0.145803f, -0.211193f, -0.262456f, -0.295515f, -0.305654f, -0.287987f, -0.239522f, -0.161484f, -0.060555f, 0.051276f, 0.158521f, 0.245765f, 0.301610f, 0.320874f, 0.304470f, 0.258046f, 0.190303f, 0.111202f, 0.030420f, -0.043586f, + -0.104149f, -0.146895f, -0.170006f, -0.174138f, -0.162254f, -0.139224f, -0.110752f, -0.081894f, -0.056123f, -0.035216f, -0.019427f, -0.007720f, 0.001684f, 0.010659f, 0.020891f, 0.033788f, 0.050134f, 0.069595f, 0.090510f, 0.110004f, 0.124360f, 0.129820f, 0.123661f, 0.104987f, 0.074856f, 0.035992f, -0.007782f, -0.052315f, -0.093778f, -0.128870f, -0.154804f, -0.169387f, -0.171057f, -0.158834f, -0.132551f, -0.093363f, -0.044033f, 0.011189f, 0.066780f, 0.116375f, 0.153882f, 0.174846f, 0.177241f, 0.161682f, 0.131436f, 0.091780f, 0.048485f, 0.006475f, -0.030495f, -0.059949f, -0.081115f, -0.094605f, -0.101136f, -0.101084f, -0.095319f, -0.084867f, -0.069049f, -0.046151f, -0.018205f, 0.006293f, 0.017960f, 0.015621f, 0.007434f, 0.001653f} + }, + { + {-0.169676f, -0.479045f, -0.687725f, -0.745490f, -0.686566f, -0.594240f, -0.494282f, -0.350297f, -0.167225f, -0.017915f, 0.055446f, 0.093690f, 0.144892f, 0.201511f, 0.248867f, 0.316763f, 0.432409f, 0.556198f, 0.607835f, 0.540635f, 0.367708f, 0.137640f, -0.092179f, -0.276530f, -0.400339f, -0.471378f, -0.492192f, -0.455690f, -0.371267f, -0.272288f, -0.186910f, -0.117137f, -0.053329f, 0.007761f, 0.067846f, 0.134100f, 0.208892f, 0.279839f, 0.327334f, 0.337226f, 0.304345f, 0.232251f, 0.134706f, 0.032552f, -0.055175f, -0.116728f, -0.147122f, -0.148098f, -0.129145f, -0.103722f, -0.081991f, -0.067689f, -0.060332f, -0.057605f, -0.056281f, -0.053648f, -0.048905f, -0.042789f, -0.036484f, -0.031173f, -0.027357f, -0.023751f, -0.017402f, -0.004993f, 0.016436f, 0.049010f, 0.092097f, 0.140251f, 0.183980f, 0.213061f, 0.219488f, 0.199132f, 0.152883f, 0.086666f, 0.009291f, -0.070535f, -0.145803f, -0.211193f, -0.262456f, -0.295515f, -0.305654f, -0.287987f, -0.239522f, -0.161484f, -0.060555f, 0.051276f, 0.158521f, 0.245765f, 0.301610f, 0.320874f, 0.304470f, 0.258046f, 0.190303f, 0.111202f, 0.030420f, -0.043586f, + -0.104149f, -0.146895f, -0.170006f, -0.174138f, -0.162254f, -0.139224f, -0.110752f, -0.081894f, -0.056123f, -0.035216f, -0.019427f, -0.007720f, 0.001684f, 0.010659f, 0.020891f, 0.033788f, 0.050134f, 0.069595f, 0.090510f, 0.110004f, 0.124360f, 0.129820f, 0.123661f, 0.104987f, 0.074856f, 0.035992f, -0.007782f, -0.052315f, -0.093778f, -0.128870f, -0.154804f, -0.169387f, -0.171057f, -0.158834f, -0.132551f, -0.093363f, -0.044033f, 0.011189f, 0.066780f, 0.116375f, 0.153882f, 0.174846f, 0.177241f, 0.161682f, 0.131436f, 0.091780f, 0.048485f, 0.006475f, -0.030495f, -0.059949f, -0.081115f, -0.094605f, -0.101136f, -0.101084f, -0.095319f, -0.084867f, -0.069049f, -0.046151f, -0.018205f, 0.006293f, 0.017960f, 0.015621f, 0.007434f, 0.001653f}, + {0.012018f, 0.066586f, 0.152639f, 0.207071f, 0.209717f, 0.178456f, 0.085121f, -0.092155f, -0.264863f, -0.327430f, -0.327666f, -0.395977f, -0.530744f, -0.609862f, -0.598708f, -0.587572f, -0.623204f, -0.652992f, -0.647573f, -0.644111f, -0.649663f, -0.617816f, -0.540898f, -0.469537f, -0.429175f, -0.400620f, -0.385308f, -0.408445f, -0.453223f, -0.464516f, -0.424417f, -0.365930f, -0.311545f, -0.251073f, -0.180010f, -0.112919f, -0.056366f, -0.004630f, 0.037141f, 0.053534f, 0.041699f, 0.013687f, -0.019541f, -0.051027f, -0.071574f, -0.074580f, -0.063254f, -0.045955f, -0.030239f, -0.025174f, -0.041237f, -0.083221f, -0.147899f, -0.228711f, -0.317157f, -0.401610f, -0.472141f, -0.526510f, -0.567243f, -0.595153f, -0.609617f, -0.611851f, -0.603354f, -0.583289f, -0.550511f, -0.506187f, -0.452584f, -0.391616f, -0.325856f, -0.258757f, -0.192849f, -0.129124f, -0.068038f, -0.009425f, 0.048121f, 0.106115f, 0.164670f, 0.223043f, 0.280807f, 0.337215f, 0.389845f, 0.434804f, 0.468298f, 0.487689f, 0.490882f, 0.474753f, 0.434821f, 0.367002f, 0.268928f, 0.138992f, -0.023741f, -0.216176f, -0.429032f, -0.650898f, -0.873502f, -1.090516f, + -1.293455f, -1.473572f, -1.627329f, -1.755674f, -1.858280f, -1.933078f, -1.981344f, -2.007913f, -2.014974f, -1.999942f, -1.960994f, -1.900865f, -1.823692f, -1.732040f, -1.629346f, -1.522206f, -1.417380f, -1.317914f, -1.223887f, -1.135589f, -1.054380f, -0.981265f, -0.916122f, -0.858499f, -0.808619f, -0.767042f, -0.733071f, -0.704146f, -0.677737f, -0.653344f, -0.631604f, -0.612382f, -0.595471f, -0.582461f, -0.575952f, -0.577320f, -0.586697f, -0.604312f, -0.630361f, -0.664275f, -0.705000f, -0.751057f, -0.800298f, -0.851098f, -0.903010f, -0.954211f, -0.999996f, -1.036419f, -1.062657f, -1.076833f, -1.073963f, -1.051969f, -1.014117f, -0.961872f, -0.892965f, -0.807931f, -0.703595f, -0.557881f, -0.349467f, -0.110075f, 0.071803f, 0.131434f, 0.094014f, 0.030195f} + }, + { + {0.014752f, 0.080926f, 0.195425f, 0.277300f, 0.257363f, 0.156308f, 0.028839f, -0.113396f, -0.267755f, -0.377434f, -0.386960f, -0.342896f, -0.348502f, -0.414148f, -0.444149f, -0.392144f, -0.334551f, -0.346055f, -0.388264f, -0.385314f, -0.342243f, -0.315364f, -0.312098f, -0.294136f, -0.253677f, -0.220820f, -0.205998f, -0.186961f, -0.150236f, -0.108165f, -0.075965f, -0.057714f, -0.051787f, -0.050962f, -0.041140f, -0.013561f, 0.025666f, 0.064669f, 0.096591f, 0.117146f, 0.121878f, 0.111088f, 0.089713f, 0.059784f, 0.020022f, -0.026868f, -0.073943f, -0.117183f, -0.157438f, -0.196739f, -0.237459f, -0.283107f, -0.335948f, -0.395266f, -0.459191f, -0.525388f, -0.589979f, -0.649670f, -0.704454f, -0.754602f, -0.796966f, -0.828420f, -0.850237f, -0.864670f, -0.870324f, -0.865150f, -0.850447f, -0.827593f, -0.794208f, -0.747439f, -0.688089f, -0.618815f, -0.541545f, -0.458906f, -0.375037f, -0.293293f, -0.215404f, -0.143040f, -0.077588f, -0.019000f, 0.032484f, 0.074585f, 0.105344f, 0.125342f, 0.134906f, 0.131058f, 0.109800f, 0.069531f, 0.009669f, -0.072345f, -0.179941f, -0.313863f, -0.471475f, -0.649282f, -0.844479f, -1.053119f, + -1.267745f, -1.479091f, -1.680773f, -1.869994f, -2.042752f, -2.192065f, -2.313426f, -2.408035f, -2.477146f, -2.517248f, -2.525139f, -2.503743f, -2.457948f, -2.388501f, -2.295477f, -2.184628f, -2.064830f, -1.941431f, -1.816649f, -1.694232f, -1.579181f, -1.473891f, -1.377781f, -1.290140f, -1.211493f, -1.142683f, -1.083511f, -1.032207f, -0.986607f, -0.945898f, -0.909860f, -0.876620f, -0.843723f, -0.811646f, -0.783525f, -0.761406f, -0.745602f, -0.737373f, -0.739078f, -0.751862f, -0.775439f, -0.809243f, -0.852230f, -0.903080f, -0.961061f, -1.024309f, -1.088143f, -1.148390f, -1.204010f, -1.252283f, -1.285794f, -1.299183f, -1.292421f, -1.262728f, -1.203108f, -1.111036f, -0.979245f, -0.776277f, -0.476453f, -0.132899f, 0.122319f, 0.197804f, 0.136024f, 0.042576f}, + {-0.227014f, -0.610850f, -0.818539f, -0.827111f, -0.686892f, -0.457083f, -0.160737f, 0.181068f, 0.492015f, 0.663276f, 0.645507f, 0.491632f, 0.296608f, 0.115861f, -0.045963f, -0.190352f, -0.298137f, -0.347915f, -0.342680f, -0.305031f, -0.248092f, -0.163336f, -0.044330f, 0.087170f, 0.193410f, 0.255410f, 0.280175f, 0.274955f, 0.233799f, 0.155072f, 0.055541f, -0.042288f, -0.126009f, -0.190037f, -0.227316f, -0.232179f, -0.205012f, -0.149836f, -0.073712f, 0.009179f, 0.080908f, 0.131368f, 0.161850f, 0.176172f, 0.173910f, 0.153080f, 0.113644f, 0.057229f, -0.011649f, -0.082819f, -0.142538f, -0.179500f, -0.187713f, -0.166032f, -0.118858f, -0.056688f, 0.007437f, 0.063054f, 0.104150f, 0.128571f, 0.137667f, 0.134993f, 0.123166f, 0.101911f, 0.069333f, 0.024214f, -0.032551f, -0.096504f, -0.158282f, -0.204364f, -0.220307f, -0.195023f, -0.125423f, -0.020573f, 0.097777f, 0.200718f, 0.261787f, 0.265935f, 0.214220f, 0.122551f, 0.014966f, -0.085028f, -0.160356f, -0.201834f, -0.207055f, -0.178791f, -0.123669f, -0.051497f, 0.025035f, 0.091764f, 0.136407f, 0.152155f, 0.139214f, 0.103923f, 0.056479f, 0.007941f, + -0.032731f, -0.060404f, -0.073774f, -0.074412f, -0.065640f, -0.051337f, -0.034892f, -0.018694f, -0.004139f, 0.008287f, 0.018799f, 0.027833f, 0.035535f, 0.041544f, 0.044915f, 0.044175f, 0.037797f, 0.025105f, 0.006966f, -0.014167f, -0.034676f, -0.050526f, -0.058290f, -0.056172f, -0.044497f, -0.025572f, -0.003149f, 0.018446f, 0.035422f, 0.045432f, 0.047837f, 0.043411f, 0.033825f, 0.021117f, 0.007200f, -0.006372f, -0.018366f, -0.027745f, -0.033669f, -0.035551f, -0.033093f, -0.026384f, -0.016086f, -0.003488f, 0.009653f, 0.021402f, 0.029923f, 0.033831f, 0.032600f, 0.026745f, 0.017574f, 0.006768f, -0.003896f, -0.012818f, -0.019007f, -0.022208f, -0.022305f, -0.018895f, -0.012232f, -0.004535f, 0.000825f, 0.002230f, 0.001220f, 0.000243f} + }, + { + {-0.227014f, -0.610850f, -0.818539f, -0.827111f, -0.686892f, -0.457083f, -0.160737f, 0.181068f, 0.492015f, 0.663276f, 0.645507f, 0.491632f, 0.296608f, 0.115861f, -0.045963f, -0.190352f, -0.298137f, -0.347915f, -0.342680f, -0.305031f, -0.248092f, -0.163336f, -0.044330f, 0.087170f, 0.193410f, 0.255410f, 0.280175f, 0.274955f, 0.233799f, 0.155072f, 0.055541f, -0.042288f, -0.126009f, -0.190037f, -0.227316f, -0.232179f, -0.205012f, -0.149836f, -0.073712f, 0.009179f, 0.080908f, 0.131368f, 0.161850f, 0.176172f, 0.173910f, 0.153080f, 0.113644f, 0.057229f, -0.011649f, -0.082819f, -0.142538f, -0.179500f, -0.187713f, -0.166032f, -0.118858f, -0.056688f, 0.007437f, 0.063054f, 0.104150f, 0.128571f, 0.137667f, 0.134993f, 0.123166f, 0.101911f, 0.069333f, 0.024214f, -0.032551f, -0.096504f, -0.158282f, -0.204364f, -0.220307f, -0.195023f, -0.125423f, -0.020573f, 0.097777f, 0.200718f, 0.261787f, 0.265935f, 0.214220f, 0.122551f, 0.014966f, -0.085028f, -0.160356f, -0.201834f, -0.207055f, -0.178791f, -0.123669f, -0.051497f, 0.025035f, 0.091764f, 0.136407f, 0.152155f, 0.139214f, 0.103923f, 0.056479f, 0.007941f, + -0.032731f, -0.060404f, -0.073774f, -0.074412f, -0.065640f, -0.051337f, -0.034892f, -0.018694f, -0.004139f, 0.008287f, 0.018799f, 0.027833f, 0.035535f, 0.041544f, 0.044915f, 0.044175f, 0.037797f, 0.025105f, 0.006966f, -0.014167f, -0.034676f, -0.050526f, -0.058290f, -0.056172f, -0.044497f, -0.025572f, -0.003149f, 0.018446f, 0.035422f, 0.045432f, 0.047837f, 0.043411f, 0.033825f, 0.021117f, 0.007200f, -0.006372f, -0.018366f, -0.027745f, -0.033669f, -0.035551f, -0.033093f, -0.026384f, -0.016086f, -0.003488f, 0.009653f, 0.021402f, 0.029923f, 0.033831f, 0.032600f, 0.026745f, 0.017574f, 0.006768f, -0.003896f, -0.012818f, -0.019007f, -0.022208f, -0.022305f, -0.018895f, -0.012232f, -0.004535f, 0.000825f, 0.002230f, 0.001220f, 0.000243f}, + {0.014752f, 0.080926f, 0.195425f, 0.277300f, 0.257363f, 0.156308f, 0.028839f, -0.113396f, -0.267755f, -0.377434f, -0.386960f, -0.342896f, -0.348502f, -0.414148f, -0.444149f, -0.392144f, -0.334551f, -0.346055f, -0.388264f, -0.385314f, -0.342243f, -0.315364f, -0.312098f, -0.294136f, -0.253677f, -0.220820f, -0.205998f, -0.186961f, -0.150236f, -0.108165f, -0.075965f, -0.057714f, -0.051787f, -0.050962f, -0.041140f, -0.013561f, 0.025666f, 0.064669f, 0.096591f, 0.117146f, 0.121878f, 0.111088f, 0.089713f, 0.059784f, 0.020022f, -0.026868f, -0.073943f, -0.117183f, -0.157438f, -0.196739f, -0.237459f, -0.283107f, -0.335948f, -0.395266f, -0.459191f, -0.525388f, -0.589979f, -0.649670f, -0.704454f, -0.754602f, -0.796966f, -0.828420f, -0.850237f, -0.864670f, -0.870324f, -0.865150f, -0.850447f, -0.827593f, -0.794208f, -0.747439f, -0.688089f, -0.618815f, -0.541545f, -0.458906f, -0.375037f, -0.293293f, -0.215404f, -0.143040f, -0.077588f, -0.019000f, 0.032484f, 0.074585f, 0.105344f, 0.125342f, 0.134906f, 0.131058f, 0.109800f, 0.069531f, 0.009669f, -0.072345f, -0.179941f, -0.313863f, -0.471475f, -0.649282f, -0.844479f, -1.053119f, + -1.267745f, -1.479091f, -1.680773f, -1.869994f, -2.042752f, -2.192065f, -2.313426f, -2.408035f, -2.477146f, -2.517248f, -2.525139f, -2.503743f, -2.457948f, -2.388501f, -2.295477f, -2.184628f, -2.064830f, -1.941431f, -1.816649f, -1.694232f, -1.579181f, -1.473891f, -1.377781f, -1.290140f, -1.211493f, -1.142683f, -1.083511f, -1.032207f, -0.986607f, -0.945898f, -0.909860f, -0.876620f, -0.843723f, -0.811646f, -0.783525f, -0.761406f, -0.745602f, -0.737373f, -0.739078f, -0.751862f, -0.775439f, -0.809243f, -0.852230f, -0.903080f, -0.961061f, -1.024309f, -1.088143f, -1.148390f, -1.204010f, -1.252283f, -1.285794f, -1.299183f, -1.292421f, -1.262728f, -1.203108f, -1.111036f, -0.979245f, -0.776277f, -0.476453f, -0.132899f, 0.122319f, 0.197804f, 0.136024f, 0.042576f} + }, + { + {0.043211f, 0.114663f, 0.178350f, 0.255737f, 0.285888f, 0.179104f, -0.023247f, -0.173997f, -0.226462f, -0.279044f, -0.376950f, -0.415326f, -0.314791f, -0.166534f, -0.101737f, -0.111875f, -0.106297f, -0.075928f, -0.083496f, -0.132151f, -0.157295f, -0.141147f, -0.141935f, -0.197377f, -0.268166f, -0.295822f, -0.268965f, -0.216058f, -0.166730f, -0.133269f, -0.106523f, -0.062428f, 0.009773f, 0.084069f, 0.118826f, 0.100756f, 0.052619f, 0.000385f, -0.049019f, -0.097030f, -0.139136f, -0.169026f, -0.187831f, -0.203308f, -0.223852f, -0.255186f, -0.299437f, -0.356144f, -0.425306f, -0.507990f, -0.602347f, -0.701452f, -0.797320f, -0.885133f, -0.962214f, -1.026134f, -1.076805f, -1.118706f, -1.158479f, -1.200974f, -1.248680f, -1.303141f, -1.364299f, -1.428256f, -1.487099f, -1.531700f, -1.554756f, -1.551648f, -1.520065f, -1.460625f, -1.377882f, -1.278869f, -1.169561f, -1.053641f, -0.934981f, -0.819203f, -0.711302f, -0.613088f, -0.524413f, -0.445870f, -0.379143f, -0.325887f, -0.287530f, -0.265472f, -0.260511f, -0.272174f, -0.298377f, -0.335361f, -0.379247f, -0.429275f, -0.488690f, -0.561273f, -0.648741f, -0.753109f, -0.878725f, -1.028425f, + -1.199267f, -1.385196f, -1.581978f, -1.785517f, -1.986815f, -2.173455f, -2.336281f, -2.471087f, -2.574200f, -2.641158f, -2.671370f, -2.670549f, -2.646120f, -2.602190f, -2.540998f, -2.466998f, -2.385837f, -2.299472f, -2.205584f, -2.102795f, -1.993617f, -1.880860f, -1.764387f, -1.644251f, -1.524566f, -1.410674f, -1.304067f, -1.203483f, -1.109515f, -1.024333f, -0.947806f, -0.877724f, -0.813643f, -0.757572f, -0.711183f, -0.674763f, -0.648343f, -0.631942f, -0.625338f, -0.628602f, -0.641609f, -0.662782f, -0.690486f, -0.725337f, -0.767997f, -0.815397f, -0.862958f, -0.909125f, -0.952637f, -0.987183f, -1.004998f, -1.003395f, -0.980880f, -0.931098f, -0.849216f, -0.736166f, -0.582560f, -0.362530f, -0.077132f, 0.196027f, 0.339834f, 0.309726f, 0.180471f, 0.053468f}, + {-0.250917f, -0.661339f, -0.861207f, -0.846902f, -0.664218f, -0.342690f, 0.076900f, 0.488755f, 0.753334f, 0.794704f, 0.644706f, 0.387716f, 0.087130f, -0.222361f, -0.495635f, -0.664747f, -0.675285f, -0.525652f, -0.265718f, 0.036337f, 0.319974f, 0.533170f, 0.627765f, 0.573427f, 0.381921f, 0.110243f, -0.167021f, -0.388733f, -0.515836f, -0.526623f, -0.420050f, -0.223739f, 0.011644f, 0.230655f, 0.386504f, 0.446212f, 0.398682f, 0.263741f, 0.086103f, -0.086723f, -0.222001f, -0.302073f, -0.318070f, -0.270296f, -0.171952f, -0.046899f, 0.077676f, 0.177097f, 0.232660f, 0.235704f, 0.190877f, 0.114233f, 0.026162f, -0.055573f, -0.118508f, -0.154916f, -0.161542f, -0.140412f, -0.098426f, -0.044790f, 0.011487f, 0.062292f, 0.100710f, 0.122257f, 0.125625f, 0.111599f, 0.081676f, 0.038064f, -0.015568f, -0.073246f, -0.125374f, -0.158379f, -0.158510f, -0.119317f, -0.047174f, 0.039659f, 0.117388f, 0.164783f, 0.170354f, 0.136110f, 0.075525f, 0.006572f, -0.055527f, -0.101705f, -0.128258f, -0.134141f, -0.118811f, -0.082220f, -0.026999f, 0.038902f, 0.101566f, 0.144045f, 0.152550f, 0.123025f, 0.063907f, -0.007177f, + -0.070685f, -0.111988f, -0.124827f, -0.111060f, -0.077909f, -0.034563f, 0.010220f, 0.049241f, 0.077443f, 0.092064f, 0.092106f, 0.077698f, 0.050246f, 0.012985f, -0.028844f, -0.068172f, -0.096572f, -0.105925f, -0.091461f, -0.054444f, -0.002780f, 0.050639f, 0.091484f, 0.108787f, 0.098953f, 0.066563f, 0.021850f, -0.023112f, -0.057935f, -0.076466f, -0.077535f, -0.063771f, -0.039868f, -0.011391f, 0.016269f, 0.038948f, 0.053942f, 0.059572f, 0.055230f, 0.041838f, 0.021689f, -0.002057f, -0.025436f, -0.043993f, -0.054036f, -0.053641f, -0.042616f, -0.022580f, 0.002601f, 0.027618f, 0.047483f, 0.058276f, 0.057322f, 0.044558f, 0.023331f, -0.001451f, -0.024710f, -0.039879f, -0.040348f, -0.026668f, -0.009522f, -0.000100f, 0.000909f, 0.000035f} + }, + { + {-0.250917f, -0.661339f, -0.861207f, -0.846902f, -0.664218f, -0.342690f, 0.076900f, 0.488755f, 0.753334f, 0.794704f, 0.644706f, 0.387716f, 0.087130f, -0.222361f, -0.495635f, -0.664747f, -0.675285f, -0.525652f, -0.265718f, 0.036337f, 0.319974f, 0.533170f, 0.627765f, 0.573427f, 0.381921f, 0.110243f, -0.167021f, -0.388733f, -0.515836f, -0.526623f, -0.420050f, -0.223739f, 0.011644f, 0.230655f, 0.386504f, 0.446212f, 0.398682f, 0.263741f, 0.086103f, -0.086723f, -0.222001f, -0.302073f, -0.318070f, -0.270296f, -0.171952f, -0.046899f, 0.077676f, 0.177097f, 0.232660f, 0.235704f, 0.190877f, 0.114233f, 0.026162f, -0.055573f, -0.118508f, -0.154916f, -0.161542f, -0.140412f, -0.098426f, -0.044790f, 0.011487f, 0.062292f, 0.100710f, 0.122257f, 0.125625f, 0.111599f, 0.081676f, 0.038064f, -0.015568f, -0.073246f, -0.125374f, -0.158379f, -0.158510f, -0.119317f, -0.047174f, 0.039659f, 0.117388f, 0.164783f, 0.170354f, 0.136110f, 0.075525f, 0.006572f, -0.055527f, -0.101705f, -0.128258f, -0.134141f, -0.118811f, -0.082220f, -0.026999f, 0.038902f, 0.101566f, 0.144045f, 0.152550f, 0.123025f, 0.063907f, -0.007177f, + -0.070685f, -0.111988f, -0.124827f, -0.111060f, -0.077909f, -0.034563f, 0.010220f, 0.049241f, 0.077443f, 0.092064f, 0.092106f, 0.077698f, 0.050246f, 0.012985f, -0.028844f, -0.068172f, -0.096572f, -0.105925f, -0.091461f, -0.054444f, -0.002780f, 0.050639f, 0.091484f, 0.108787f, 0.098953f, 0.066563f, 0.021850f, -0.023112f, -0.057935f, -0.076466f, -0.077535f, -0.063771f, -0.039868f, -0.011391f, 0.016269f, 0.038948f, 0.053942f, 0.059572f, 0.055230f, 0.041838f, 0.021689f, -0.002057f, -0.025436f, -0.043993f, -0.054036f, -0.053641f, -0.042616f, -0.022580f, 0.002601f, 0.027618f, 0.047483f, 0.058276f, 0.057322f, 0.044558f, 0.023331f, -0.001451f, -0.024710f, -0.039879f, -0.040348f, -0.026668f, -0.009522f, -0.000100f, 0.000909f, 0.000035f}, + {0.043211f, 0.114663f, 0.178350f, 0.255737f, 0.285888f, 0.179104f, -0.023247f, -0.173997f, -0.226462f, -0.279044f, -0.376950f, -0.415326f, -0.314791f, -0.166534f, -0.101737f, -0.111875f, -0.106297f, -0.075928f, -0.083496f, -0.132151f, -0.157295f, -0.141147f, -0.141935f, -0.197377f, -0.268166f, -0.295822f, -0.268965f, -0.216058f, -0.166730f, -0.133269f, -0.106523f, -0.062428f, 0.009773f, 0.084069f, 0.118826f, 0.100756f, 0.052619f, 0.000385f, -0.049019f, -0.097030f, -0.139136f, -0.169026f, -0.187831f, -0.203308f, -0.223852f, -0.255186f, -0.299437f, -0.356144f, -0.425306f, -0.507990f, -0.602347f, -0.701452f, -0.797320f, -0.885133f, -0.962214f, -1.026134f, -1.076805f, -1.118706f, -1.158479f, -1.200974f, -1.248680f, -1.303141f, -1.364299f, -1.428256f, -1.487099f, -1.531700f, -1.554756f, -1.551648f, -1.520065f, -1.460625f, -1.377882f, -1.278869f, -1.169561f, -1.053641f, -0.934981f, -0.819203f, -0.711302f, -0.613088f, -0.524413f, -0.445870f, -0.379143f, -0.325887f, -0.287530f, -0.265472f, -0.260511f, -0.272174f, -0.298377f, -0.335361f, -0.379247f, -0.429275f, -0.488690f, -0.561273f, -0.648741f, -0.753109f, -0.878725f, -1.028425f, + -1.199267f, -1.385196f, -1.581978f, -1.785517f, -1.986815f, -2.173455f, -2.336281f, -2.471087f, -2.574200f, -2.641158f, -2.671370f, -2.670549f, -2.646120f, -2.602190f, -2.540998f, -2.466998f, -2.385837f, -2.299472f, -2.205584f, -2.102795f, -1.993617f, -1.880860f, -1.764387f, -1.644251f, -1.524566f, -1.410674f, -1.304067f, -1.203483f, -1.109515f, -1.024333f, -0.947806f, -0.877724f, -0.813643f, -0.757572f, -0.711183f, -0.674763f, -0.648343f, -0.631942f, -0.625338f, -0.628602f, -0.641609f, -0.662782f, -0.690486f, -0.725337f, -0.767997f, -0.815397f, -0.862958f, -0.909125f, -0.952637f, -0.987183f, -1.004998f, -1.003395f, -0.980880f, -0.931098f, -0.849216f, -0.736166f, -0.582560f, -0.362530f, -0.077132f, 0.196027f, 0.339834f, 0.309726f, 0.180471f, 0.053468f} + }, + { + {-0.007685f, -0.027507f, -0.054095f, -0.077744f, -0.087310f, -0.078964f, -0.038795f, 0.069420f, 0.257031f, 0.450295f, 0.530050f, 0.449733f, 0.272335f, 0.084500f, -0.069538f, -0.161822f, -0.164288f, -0.090752f, 0.002325f, 0.083182f, 0.160693f, 0.220174f, 0.210093f, 0.117413f, -0.002015f, -0.090343f, -0.133503f, -0.129881f, -0.074554f, 0.006798f, 0.062262f, 0.070660f, 0.051397f, 0.011062f, -0.071757f, -0.199300f, -0.336804f, -0.453472f, -0.547094f, -0.622722f, -0.679122f, -0.721601f, -0.761966f, -0.801674f, -0.833087f, -0.855441f, -0.874451f, -0.891846f, -0.908530f, -0.930458f, -0.959812f, -0.988680f, -1.010943f, -1.031888f, -1.058899f, -1.091801f, -1.128278f, -1.169543f, -1.214950f, -1.258511f, -1.295477f, -1.327242f, -1.357589f, -1.388759f, -1.422413f, -1.460583f, -1.504259f, -1.552224f, -1.600690f, -1.643955f, -1.677490f, -1.700431f, -1.713026f, -1.713123f, -1.698577f, -1.671550f, -1.636224f, -1.593323f, -1.540916f, -1.479604f, -1.412906f, -1.343349f, -1.272152f, -1.202419f, -1.138827f, -1.083544f, -1.035142f, -0.992009f, -0.954485f, -0.922860f, -0.895223f, -0.868589f, -0.841261f, -0.813242f, -0.784990f, -0.756664f, + -0.728377f, -0.700591f, -0.673949f, -0.648504f, -0.623136f, -0.596307f, -0.567494f, -0.537004f, -0.504339f, -0.468321f, -0.429292f, -0.389390f, -0.350011f, -0.310984f, -0.272863f, -0.237613f, -0.206211f, -0.177918f, -0.152490f, -0.130688f, -0.112365f, -0.096494f, -0.082923f, -0.071818f, -0.062192f, -0.053302f, -0.046074f, -0.041079f, -0.037253f, -0.034551f, -0.035132f, -0.040283f, -0.049461f, -0.063497f, -0.084978f, -0.114685f, -0.151385f, -0.194815f, -0.244968f, -0.299672f, -0.356620f, -0.415455f, -0.474774f, -0.531119f, -0.583532f, -0.633601f, -0.679431f, -0.716947f, -0.747534f, -0.775310f, -0.798076f, -0.811775f, -0.820314f, -0.828412f, -0.831431f, -0.825479f, -0.812449f, -0.774419f, -0.665729f, -0.468389f, -0.242150f, -0.078143f, -0.008766f, 0.002106f}, + {-0.129968f, -0.372393f, -0.578340f, -0.729002f, -0.764205f, -0.635435f, -0.410779f, -0.258243f, -0.301569f, -0.524734f, -0.804408f, -0.990576f, -0.983187f, -0.802264f, -0.583745f, -0.457595f, -0.435905f, -0.450492f, -0.458378f, -0.450407f, -0.393789f, -0.250404f, -0.049285f, 0.124891f, 0.223524f, 0.271404f, 0.315417f, 0.378570f, 0.464787f, 0.569578f, 0.675212f, 0.756468f, 0.797347f, 0.794880f, 0.754800f, 0.694127f, 0.637483f, 0.597643f, 0.564937f, 0.521985f, 0.461410f, 0.385881f, 0.301177f, 0.214129f, 0.129669f, 0.046526f, -0.039231f, -0.126876f, -0.212405f, -0.294795f, -0.375289f, -0.453145f, -0.526688f, -0.595041f, -0.654835f, -0.699235f, -0.723697f, -0.729022f, -0.716770f, -0.686317f, -0.638153f, -0.575500f, -0.501166f, -0.416714f, -0.325202f, -0.230531f, -0.133598f, -0.032773f, 0.071477f, 0.175093f, 0.273102f, 0.361324f, 0.436332f, 0.496419f, 0.542408f, 0.575872f, 0.596821f, 0.603979f, 0.596576f, 0.575075f, 0.540663f, 0.494625f, 0.438152f, 0.372876f, 0.301611f, 0.228007f, 0.155318f, 0.085985f, 0.022006f, -0.035375f, -0.086123f, -0.130408f, -0.167443f, -0.196380f, -0.217766f, -0.232828f, + -0.241945f, -0.245120f, -0.243300f, -0.237878f, -0.229559f, -0.218937f, -0.207509f, -0.196911f, -0.187682f, -0.179723f, -0.173313f, -0.168740f, -0.165527f, -0.162849f, -0.160290f, -0.157612f, -0.154177f, -0.148993f, -0.141009f, -0.129167f, -0.112488f, -0.090258f, -0.062070f, -0.027942f, 0.011466f, 0.055164f, 0.102457f, 0.152703f, 0.204508f, 0.256025f, 0.305953f, 0.353184f, 0.395721f, 0.431341f, 0.459153f, 0.478929f, 0.489277f, 0.488292f, 0.475516f, 0.451198f, 0.414350f, 0.363901f, 0.300928f, 0.227294f, 0.143319f, 0.049531f, -0.050798f, -0.153561f, -0.256130f, -0.355063f, -0.444423f, -0.519082f, -0.576123f, -0.611242f, -0.619307f, -0.598890f, -0.546613f, -0.447912f, -0.293914f, -0.116818f, 0.014790f, 0.058050f, 0.038715f, 0.010517f} + }, + { + {-0.129968f, -0.372393f, -0.578340f, -0.729002f, -0.764205f, -0.635435f, -0.410779f, -0.258243f, -0.301569f, -0.524734f, -0.804408f, -0.990576f, -0.983187f, -0.802264f, -0.583745f, -0.457595f, -0.435905f, -0.450492f, -0.458378f, -0.450407f, -0.393789f, -0.250404f, -0.049285f, 0.124891f, 0.223524f, 0.271404f, 0.315417f, 0.378570f, 0.464787f, 0.569578f, 0.675212f, 0.756468f, 0.797347f, 0.794880f, 0.754800f, 0.694127f, 0.637483f, 0.597643f, 0.564937f, 0.521985f, 0.461410f, 0.385881f, 0.301177f, 0.214129f, 0.129669f, 0.046526f, -0.039231f, -0.126876f, -0.212405f, -0.294795f, -0.375289f, -0.453145f, -0.526688f, -0.595041f, -0.654835f, -0.699235f, -0.723697f, -0.729022f, -0.716770f, -0.686317f, -0.638153f, -0.575500f, -0.501166f, -0.416714f, -0.325202f, -0.230531f, -0.133598f, -0.032773f, 0.071477f, 0.175093f, 0.273102f, 0.361324f, 0.436332f, 0.496419f, 0.542408f, 0.575872f, 0.596821f, 0.603979f, 0.596576f, 0.575075f, 0.540663f, 0.494625f, 0.438152f, 0.372876f, 0.301611f, 0.228007f, 0.155318f, 0.085985f, 0.022006f, -0.035375f, -0.086123f, -0.130408f, -0.167443f, -0.196380f, -0.217766f, -0.232828f, + -0.241945f, -0.245120f, -0.243300f, -0.237878f, -0.229559f, -0.218937f, -0.207509f, -0.196911f, -0.187682f, -0.179723f, -0.173313f, -0.168740f, -0.165527f, -0.162849f, -0.160290f, -0.157612f, -0.154177f, -0.148993f, -0.141009f, -0.129167f, -0.112488f, -0.090258f, -0.062070f, -0.027942f, 0.011466f, 0.055164f, 0.102457f, 0.152703f, 0.204508f, 0.256025f, 0.305953f, 0.353184f, 0.395721f, 0.431341f, 0.459153f, 0.478929f, 0.489277f, 0.488292f, 0.475516f, 0.451198f, 0.414350f, 0.363901f, 0.300928f, 0.227294f, 0.143319f, 0.049531f, -0.050798f, -0.153561f, -0.256130f, -0.355063f, -0.444423f, -0.519082f, -0.576123f, -0.611242f, -0.619307f, -0.598890f, -0.546613f, -0.447912f, -0.293914f, -0.116818f, 0.014790f, 0.058050f, 0.038715f, 0.010517f}, + {-0.007685f, -0.027507f, -0.054095f, -0.077744f, -0.087310f, -0.078964f, -0.038795f, 0.069420f, 0.257031f, 0.450295f, 0.530050f, 0.449733f, 0.272335f, 0.084500f, -0.069538f, -0.161822f, -0.164288f, -0.090752f, 0.002325f, 0.083182f, 0.160693f, 0.220174f, 0.210093f, 0.117413f, -0.002015f, -0.090343f, -0.133503f, -0.129881f, -0.074554f, 0.006798f, 0.062262f, 0.070660f, 0.051397f, 0.011062f, -0.071757f, -0.199300f, -0.336804f, -0.453472f, -0.547094f, -0.622722f, -0.679122f, -0.721601f, -0.761966f, -0.801674f, -0.833087f, -0.855441f, -0.874451f, -0.891846f, -0.908530f, -0.930458f, -0.959812f, -0.988680f, -1.010943f, -1.031888f, -1.058899f, -1.091801f, -1.128278f, -1.169543f, -1.214950f, -1.258511f, -1.295477f, -1.327242f, -1.357589f, -1.388759f, -1.422413f, -1.460583f, -1.504259f, -1.552224f, -1.600690f, -1.643955f, -1.677490f, -1.700431f, -1.713026f, -1.713123f, -1.698577f, -1.671550f, -1.636224f, -1.593323f, -1.540916f, -1.479604f, -1.412906f, -1.343349f, -1.272152f, -1.202419f, -1.138827f, -1.083544f, -1.035142f, -0.992009f, -0.954485f, -0.922860f, -0.895223f, -0.868589f, -0.841261f, -0.813242f, -0.784990f, -0.756664f, + -0.728377f, -0.700591f, -0.673949f, -0.648504f, -0.623136f, -0.596307f, -0.567494f, -0.537004f, -0.504339f, -0.468321f, -0.429292f, -0.389390f, -0.350011f, -0.310984f, -0.272863f, -0.237613f, -0.206211f, -0.177918f, -0.152490f, -0.130688f, -0.112365f, -0.096494f, -0.082923f, -0.071818f, -0.062192f, -0.053302f, -0.046074f, -0.041079f, -0.037253f, -0.034551f, -0.035132f, -0.040283f, -0.049461f, -0.063497f, -0.084978f, -0.114685f, -0.151385f, -0.194815f, -0.244968f, -0.299672f, -0.356620f, -0.415455f, -0.474774f, -0.531119f, -0.583532f, -0.633601f, -0.679431f, -0.716947f, -0.747534f, -0.775310f, -0.798076f, -0.811775f, -0.820314f, -0.828412f, -0.831431f, -0.825479f, -0.812449f, -0.774419f, -0.665729f, -0.468389f, -0.242150f, -0.078143f, -0.008766f, 0.002106f} + }, + { + {0.008569f, 0.036036f, 0.083803f, 0.119148f, 0.070548f, -0.078326f, -0.222894f, -0.243650f, -0.159814f, -0.090800f, -0.079375f, -0.056656f, 0.011482f, 0.052573f, -0.001498f, -0.119602f, -0.234866f, -0.335723f, -0.443207f, -0.546764f, -0.614586f, -0.641944f, -0.650393f, -0.653434f, -0.649185f, -0.636897f, -0.621833f, -0.608002f, -0.594814f, -0.577373f, -0.548943f, -0.509093f, -0.468031f, -0.436187f, -0.411762f, -0.384320f, -0.347210f, -0.301521f, -0.252453f, -0.207016f, -0.171531f, -0.147319f, -0.131387f, -0.122478f, -0.122706f, -0.133139f, -0.152285f, -0.178903f, -0.211845f, -0.246994f, -0.277923f, -0.299862f, -0.311486f, -0.314495f, -0.313374f, -0.313999f, -0.321093f, -0.338012f, -0.367937f, -0.412103f, -0.467256f, -0.527953f, -0.590760f, -0.653426f, -0.711811f, -0.761768f, -0.803336f, -0.839595f, -0.872213f, -0.901047f, -0.926960f, -0.951668f, -0.974952f, -0.994343f, -1.007533f, -1.013586f, -1.011948f, -1.001634f, -0.982097f, -0.954803f, -0.923350f, -0.891226f, -0.859546f, -0.827704f, -0.795383f, -0.762152f, -0.725674f, -0.682815f, -0.632889f, -0.578128f, -0.521168f, -0.463936f, -0.408686f, -0.358044f, -0.313851f, -0.277169f, + -0.249216f, -0.231562f, -0.226114f, -0.235302f, -0.261018f, -0.302923f, -0.359045f, -0.427912f, -0.508230f, -0.596814f, -0.689382f, -0.783568f, -0.878803f, -0.973138f, -1.062782f, -1.145182f, -1.220206f, -1.287561f, -1.345176f, -1.391256f, -1.426524f, -1.453153f, -1.472158f, -1.483234f, -1.487105f, -1.486427f, -1.483303f, -1.477082f, -1.466245f, -1.451366f, -1.433837f, -1.412447f, -1.384210f, -1.348415f, -1.306852f, -1.260094f, -1.206810f, -1.147202f, -1.084167f, -1.020388f, -0.956644f, -0.893519f, -0.832832f, -0.776711f, -0.726155f, -0.680677f, -0.639318f, -0.602179f, -0.570035f, -0.541815f, -0.514590f, -0.487168f, -0.460379f, -0.432551f, -0.399491f, -0.358843f, -0.305118f, -0.220990f, -0.093402f, 0.051282f, 0.149376f, 0.158777f, 0.102510f, 0.032573f}, + {-0.185559f, -0.533696f, -0.795174f, -0.893521f, -0.804685f, -0.602937f, -0.410524f, -0.289172f, -0.193916f, -0.044106f, 0.172466f, 0.382975f, 0.510029f, 0.545297f, 0.535692f, 0.515516f, 0.471783f, 0.372671f, 0.213104f, 0.026128f, -0.142895f, -0.267633f, -0.350549f, -0.407779f, -0.446543f, -0.457210f, -0.425690f, -0.349165f, -0.237230f, -0.102509f, 0.042736f, 0.181828f, 0.293938f, 0.363819f, 0.388959f, 0.375638f, 0.331364f, 0.263320f, 0.180641f, 0.093713f, 0.010848f, -0.063123f, -0.125901f, -0.176786f, -0.215972f, -0.243350f, -0.257838f, -0.258058f, -0.242990f, -0.211605f, -0.162734f, -0.096408f, -0.015762f, 0.072248f, 0.157999f, 0.231691f, 0.285687f, 0.315159f, 0.317146f, 0.289924f, 0.233942f, 0.153214f, 0.055517f, -0.048876f, -0.149035f, -0.235026f, -0.298865f, -0.334596f, -0.337970f, -0.306610f, -0.241101f, -0.146635f, -0.034068f, 0.080977f, 0.181425f, 0.253055f, 0.287741f, 0.284775f, 0.250380f, 0.195377f, 0.131392f, 0.067461f, 0.008841f, -0.042182f, -0.084996f, -0.119586f, -0.145618f, -0.161950f, -0.166889f, -0.158953f, -0.137777f, -0.104952f, -0.064224f, -0.020560f, 0.021350f, 0.058000f, + 0.087198f, 0.107952f, 0.120229f, 0.124423f, 0.120940f, 0.110209f, 0.092820f, 0.069478f, 0.041098f, 0.009121f, -0.024406f, -0.057046f, -0.086092f, -0.108691f, -0.122317f, -0.125322f, -0.117083f, -0.098008f, -0.069732f, -0.035104f, 0.002352f, 0.039025f, 0.071510f, 0.096953f, 0.113464f, 0.120114f, 0.116611f, 0.103273f, 0.081173f, 0.052018f, 0.018016f, -0.017906f, -0.052056f, -0.080561f, -0.100082f, -0.108258f, -0.104200f, -0.088962f, -0.065272f, -0.036665f, -0.006887f, 0.020495f, 0.042788f, 0.058666f, 0.067823f, 0.070539f, 0.067767f, 0.060956f, 0.051331f, 0.039723f, 0.027058f, 0.014228f, 0.001590f, -0.010580f, -0.021471f, -0.030400f, -0.037058f, -0.039808f, -0.035582f, -0.024114f, -0.010855f, -0.002418f, 0.000057f, 0.000072f} + }, + { + {-0.185559f, -0.533696f, -0.795174f, -0.893521f, -0.804685f, -0.602937f, -0.410524f, -0.289172f, -0.193916f, -0.044106f, 0.172466f, 0.382975f, 0.510029f, 0.545297f, 0.535692f, 0.515516f, 0.471783f, 0.372671f, 0.213104f, 0.026128f, -0.142895f, -0.267633f, -0.350549f, -0.407779f, -0.446543f, -0.457210f, -0.425690f, -0.349165f, -0.237230f, -0.102509f, 0.042736f, 0.181828f, 0.293938f, 0.363819f, 0.388959f, 0.375638f, 0.331364f, 0.263320f, 0.180641f, 0.093713f, 0.010848f, -0.063123f, -0.125901f, -0.176786f, -0.215972f, -0.243350f, -0.257838f, -0.258058f, -0.242990f, -0.211605f, -0.162734f, -0.096408f, -0.015762f, 0.072248f, 0.157999f, 0.231691f, 0.285687f, 0.315159f, 0.317146f, 0.289924f, 0.233942f, 0.153214f, 0.055517f, -0.048876f, -0.149035f, -0.235026f, -0.298865f, -0.334596f, -0.337970f, -0.306610f, -0.241101f, -0.146635f, -0.034068f, 0.080977f, 0.181425f, 0.253055f, 0.287741f, 0.284775f, 0.250380f, 0.195377f, 0.131392f, 0.067461f, 0.008841f, -0.042182f, -0.084996f, -0.119586f, -0.145618f, -0.161950f, -0.166889f, -0.158953f, -0.137777f, -0.104952f, -0.064224f, -0.020560f, 0.021350f, 0.058000f, + 0.087198f, 0.107952f, 0.120229f, 0.124423f, 0.120940f, 0.110209f, 0.092820f, 0.069478f, 0.041098f, 0.009121f, -0.024406f, -0.057046f, -0.086092f, -0.108691f, -0.122317f, -0.125322f, -0.117083f, -0.098008f, -0.069732f, -0.035104f, 0.002352f, 0.039025f, 0.071510f, 0.096953f, 0.113464f, 0.120114f, 0.116611f, 0.103273f, 0.081173f, 0.052018f, 0.018016f, -0.017906f, -0.052056f, -0.080561f, -0.100082f, -0.108258f, -0.104200f, -0.088962f, -0.065272f, -0.036665f, -0.006887f, 0.020495f, 0.042788f, 0.058666f, 0.067823f, 0.070539f, 0.067767f, 0.060956f, 0.051331f, 0.039723f, 0.027058f, 0.014228f, 0.001590f, -0.010580f, -0.021471f, -0.030400f, -0.037058f, -0.039808f, -0.035582f, -0.024114f, -0.010855f, -0.002418f, 0.000057f, 0.000072f}, + {0.008569f, 0.036036f, 0.083803f, 0.119148f, 0.070548f, -0.078326f, -0.222894f, -0.243650f, -0.159814f, -0.090800f, -0.079375f, -0.056656f, 0.011482f, 0.052573f, -0.001498f, -0.119602f, -0.234866f, -0.335723f, -0.443207f, -0.546764f, -0.614586f, -0.641944f, -0.650393f, -0.653434f, -0.649185f, -0.636897f, -0.621833f, -0.608002f, -0.594814f, -0.577373f, -0.548943f, -0.509093f, -0.468031f, -0.436187f, -0.411762f, -0.384320f, -0.347210f, -0.301521f, -0.252453f, -0.207016f, -0.171531f, -0.147319f, -0.131387f, -0.122478f, -0.122706f, -0.133139f, -0.152285f, -0.178903f, -0.211845f, -0.246994f, -0.277923f, -0.299862f, -0.311486f, -0.314495f, -0.313374f, -0.313999f, -0.321093f, -0.338012f, -0.367937f, -0.412103f, -0.467256f, -0.527953f, -0.590760f, -0.653426f, -0.711811f, -0.761768f, -0.803336f, -0.839595f, -0.872213f, -0.901047f, -0.926960f, -0.951668f, -0.974952f, -0.994343f, -1.007533f, -1.013586f, -1.011948f, -1.001634f, -0.982097f, -0.954803f, -0.923350f, -0.891226f, -0.859546f, -0.827704f, -0.795383f, -0.762152f, -0.725674f, -0.682815f, -0.632889f, -0.578128f, -0.521168f, -0.463936f, -0.408686f, -0.358044f, -0.313851f, -0.277169f, + -0.249216f, -0.231562f, -0.226114f, -0.235302f, -0.261018f, -0.302923f, -0.359045f, -0.427912f, -0.508230f, -0.596814f, -0.689382f, -0.783568f, -0.878803f, -0.973138f, -1.062782f, -1.145182f, -1.220206f, -1.287561f, -1.345176f, -1.391256f, -1.426524f, -1.453153f, -1.472158f, -1.483234f, -1.487105f, -1.486427f, -1.483303f, -1.477082f, -1.466245f, -1.451366f, -1.433837f, -1.412447f, -1.384210f, -1.348415f, -1.306852f, -1.260094f, -1.206810f, -1.147202f, -1.084167f, -1.020388f, -0.956644f, -0.893519f, -0.832832f, -0.776711f, -0.726155f, -0.680677f, -0.639318f, -0.602179f, -0.570035f, -0.541815f, -0.514590f, -0.487168f, -0.460379f, -0.432551f, -0.399491f, -0.358843f, -0.305118f, -0.220990f, -0.093402f, 0.051282f, 0.149376f, 0.158777f, 0.102510f, 0.032573f} + }, + { + {0.000818f, 0.017444f, 0.055261f, 0.075350f, 0.028576f, -0.084474f, -0.203267f, -0.269006f, -0.280096f, -0.268702f, -0.244047f, -0.193916f, -0.132682f, -0.106266f, -0.141353f, -0.220111f, -0.313836f, -0.412717f, -0.509637f, -0.582401f, -0.614704f, -0.620470f, -0.628348f, -0.649673f, -0.675138f, -0.695278f, -0.709877f, -0.720342f, -0.725172f, -0.724086f, -0.719270f, -0.711043f, -0.696324f, -0.671680f, -0.634992f, -0.584739f, -0.521369f, -0.450440f, -0.381867f, -0.324115f, -0.279763f, -0.247402f, -0.226194f, -0.216476f, -0.216704f, -0.222582f, -0.229987f, -0.237137f, -0.243538f, -0.248735f, -0.252984f, -0.257930f, -0.265977f, -0.279595f, -0.300835f, -0.330262f, -0.366467f, -0.407332f, -0.450975f, -0.494762f, -0.535151f, -0.570200f, -0.601049f, -0.629499f, -0.655394f, -0.677493f, -0.695060f, -0.706757f, -0.709441f, -0.699998f, -0.677852f, -0.644857f, -0.603934f, -0.558778f, -0.513757f, -0.472656f, -0.437355f, -0.407636f, -0.381795f, -0.357605f, -0.333418f, -0.308502f, -0.282455f, -0.254976f, -0.226350f, -0.197326f, -0.168302f, -0.139286f, -0.110657f, -0.083214f, -0.057592f, -0.034344f, -0.014464f, 0.000612f, 0.009079f, 0.008658f, + -0.002748f, -0.026081f, -0.061503f, -0.109231f, -0.168492f, -0.236158f, -0.308371f, -0.383343f, -0.460785f, -0.539319f, -0.616894f, -0.693318f, -0.769682f, -0.845181f, -0.916820f, -0.982312f, -1.041125f, -1.092420f, -1.134068f, -1.164515f, -1.184365f, -1.195293f, -1.198046f, -1.192412f, -1.179094f, -1.160558f, -1.139207f, -1.115521f, -1.089332f, -1.062057f, -1.035496f, -1.008900f, -0.979692f, -0.946885f, -0.911190f, -0.872108f, -0.828013f, -0.779273f, -0.728569f, -0.678022f, -0.628266f, -0.580141f, -0.535147f, -0.494398f, -0.458425f, -0.427379f, -0.400841f, -0.378568f, -0.361181f, -0.348470f, -0.338233f, -0.328932f, -0.321152f, -0.313945f, -0.303478f, -0.287185f, -0.261552f, -0.213238f, -0.127665f, -0.018184f, 0.068083f, 0.092632f, 0.064838f, 0.021246f}, + {-0.132893f, -0.397605f, -0.632845f, -0.770213f, -0.762671f, -0.657487f, -0.569283f, -0.556594f, -0.559219f, -0.491993f, -0.364307f, -0.253849f, -0.187137f, -0.112112f, 0.014136f, 0.171821f, 0.322049f, 0.450715f, 0.550492f, 0.602217f, 0.599573f, 0.565276f, 0.522546f, 0.469434f, 0.394977f, 0.302555f, 0.203283f, 0.099429f, -0.013047f, -0.132581f, -0.249813f, -0.352012f, -0.426880f, -0.468084f, -0.479268f, -0.468257f, -0.437536f, -0.385150f, -0.313695f, -0.232864f, -0.153248f, -0.081508f, -0.020528f, 0.029902f, 0.072671f, 0.111201f, 0.147960f, 0.185756f, 0.228084f, 0.275839f, 0.324544f, 0.365884f, 0.391073f, 0.393116f, 0.368911f, 0.321050f, 0.256310f, 0.181056f, 0.098444f, 0.009769f, -0.083153f, -0.177113f, -0.267162f, -0.346282f, -0.406698f, -0.442695f, -0.452288f, -0.436663f, -0.398947f, -0.343145f, -0.272690f, -0.189417f, -0.094678f, 0.008122f, 0.112328f, 0.209109f, 0.289473f, 0.346381f, 0.376791f, 0.382372f, 0.367753f, 0.337827f, 0.296648f, 0.247834f, 0.194626f, 0.139355f, 0.083528f, 0.028486f, -0.024521f, -0.074738f, -0.121823f, -0.165351f, -0.204687f, -0.239035f, -0.267045f, -0.286388f, + -0.294167f, -0.287997f, -0.266762f, -0.230689f, -0.181240f, -0.121082f, -0.053843f, 0.016500f, 0.086073f, 0.151052f, 0.207628f, 0.252510f, 0.283443f, 0.299057f, 0.298561f, 0.282101f, 0.251143f, 0.208046f, 0.155513f, 0.096805f, 0.035848f, -0.023629f, -0.078756f, -0.127050f, -0.166116f, -0.194424f, -0.211611f, -0.217549f, -0.211988f, -0.195487f, -0.169671f, -0.136297f, -0.097197f, -0.055217f, -0.013832f, 0.024328f, 0.057561f, 0.084189f, 0.103126f, 0.114971f, 0.121155f, 0.122583f, 0.120200f, 0.115693f, 0.110234f, 0.103651f, 0.095767f, 0.087016f, 0.077007f, 0.064469f, 0.049153f, 0.031743f, 0.012078f, -0.009949f, -0.032469f, -0.053467f, -0.072429f, -0.086119f, -0.086097f, -0.067552f, -0.038975f, -0.015688f, -0.004466f, -0.000879f} + }, + { + {-0.132893f, -0.397605f, -0.632845f, -0.770213f, -0.762671f, -0.657487f, -0.569283f, -0.556594f, -0.559219f, -0.491993f, -0.364307f, -0.253849f, -0.187137f, -0.112112f, 0.014136f, 0.171821f, 0.322049f, 0.450715f, 0.550492f, 0.602217f, 0.599573f, 0.565276f, 0.522546f, 0.469434f, 0.394977f, 0.302555f, 0.203283f, 0.099429f, -0.013047f, -0.132581f, -0.249813f, -0.352012f, -0.426880f, -0.468084f, -0.479268f, -0.468257f, -0.437536f, -0.385150f, -0.313695f, -0.232864f, -0.153248f, -0.081508f, -0.020528f, 0.029902f, 0.072671f, 0.111201f, 0.147960f, 0.185756f, 0.228084f, 0.275839f, 0.324544f, 0.365884f, 0.391073f, 0.393116f, 0.368911f, 0.321050f, 0.256310f, 0.181056f, 0.098444f, 0.009769f, -0.083153f, -0.177113f, -0.267162f, -0.346282f, -0.406698f, -0.442695f, -0.452288f, -0.436663f, -0.398947f, -0.343145f, -0.272690f, -0.189417f, -0.094678f, 0.008122f, 0.112328f, 0.209109f, 0.289473f, 0.346381f, 0.376791f, 0.382372f, 0.367753f, 0.337827f, 0.296648f, 0.247834f, 0.194626f, 0.139355f, 0.083528f, 0.028486f, -0.024521f, -0.074738f, -0.121823f, -0.165351f, -0.204687f, -0.239035f, -0.267045f, -0.286388f, + -0.294167f, -0.287997f, -0.266762f, -0.230689f, -0.181240f, -0.121082f, -0.053843f, 0.016500f, 0.086073f, 0.151052f, 0.207628f, 0.252510f, 0.283443f, 0.299057f, 0.298561f, 0.282101f, 0.251143f, 0.208046f, 0.155513f, 0.096805f, 0.035848f, -0.023629f, -0.078756f, -0.127050f, -0.166116f, -0.194424f, -0.211611f, -0.217549f, -0.211988f, -0.195487f, -0.169671f, -0.136297f, -0.097197f, -0.055217f, -0.013832f, 0.024328f, 0.057561f, 0.084189f, 0.103126f, 0.114971f, 0.121155f, 0.122583f, 0.120200f, 0.115693f, 0.110234f, 0.103651f, 0.095767f, 0.087016f, 0.077007f, 0.064469f, 0.049153f, 0.031743f, 0.012078f, -0.009949f, -0.032469f, -0.053467f, -0.072429f, -0.086119f, -0.086097f, -0.067552f, -0.038975f, -0.015688f, -0.004466f, -0.000879f}, + {0.000818f, 0.017444f, 0.055261f, 0.075350f, 0.028576f, -0.084474f, -0.203267f, -0.269006f, -0.280096f, -0.268702f, -0.244047f, -0.193916f, -0.132682f, -0.106266f, -0.141353f, -0.220111f, -0.313836f, -0.412717f, -0.509637f, -0.582401f, -0.614704f, -0.620470f, -0.628348f, -0.649673f, -0.675138f, -0.695278f, -0.709877f, -0.720342f, -0.725172f, -0.724086f, -0.719270f, -0.711043f, -0.696324f, -0.671680f, -0.634992f, -0.584739f, -0.521369f, -0.450440f, -0.381867f, -0.324115f, -0.279763f, -0.247402f, -0.226194f, -0.216476f, -0.216704f, -0.222582f, -0.229987f, -0.237137f, -0.243538f, -0.248735f, -0.252984f, -0.257930f, -0.265977f, -0.279595f, -0.300835f, -0.330262f, -0.366467f, -0.407332f, -0.450975f, -0.494762f, -0.535151f, -0.570200f, -0.601049f, -0.629499f, -0.655394f, -0.677493f, -0.695060f, -0.706757f, -0.709441f, -0.699998f, -0.677852f, -0.644857f, -0.603934f, -0.558778f, -0.513757f, -0.472656f, -0.437355f, -0.407636f, -0.381795f, -0.357605f, -0.333418f, -0.308502f, -0.282455f, -0.254976f, -0.226350f, -0.197326f, -0.168302f, -0.139286f, -0.110657f, -0.083214f, -0.057592f, -0.034344f, -0.014464f, 0.000612f, 0.009079f, 0.008658f, + -0.002748f, -0.026081f, -0.061503f, -0.109231f, -0.168492f, -0.236158f, -0.308371f, -0.383343f, -0.460785f, -0.539319f, -0.616894f, -0.693318f, -0.769682f, -0.845181f, -0.916820f, -0.982312f, -1.041125f, -1.092420f, -1.134068f, -1.164515f, -1.184365f, -1.195293f, -1.198046f, -1.192412f, -1.179094f, -1.160558f, -1.139207f, -1.115521f, -1.089332f, -1.062057f, -1.035496f, -1.008900f, -0.979692f, -0.946885f, -0.911190f, -0.872108f, -0.828013f, -0.779273f, -0.728569f, -0.678022f, -0.628266f, -0.580141f, -0.535147f, -0.494398f, -0.458425f, -0.427379f, -0.400841f, -0.378568f, -0.361181f, -0.348470f, -0.338233f, -0.328932f, -0.321152f, -0.313945f, -0.303478f, -0.287185f, -0.261552f, -0.213238f, -0.127665f, -0.018184f, 0.068083f, 0.092632f, 0.064838f, 0.021246f} + } +}; +const float *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float *CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; + +/********************** Sample Rate = 16000 **********************/ + +const float CRendBin_Combined_HRIR_latency_s_16kHz = 0.000020833333110f; +const int16_t CRendBin_Combined_HRIR_max_num_iterations_16kHz = 1; +const uint16_t CRendBin_Combined_HRIR_num_iterations_16kHz[15][BINAURAL_CHANNELS]={{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1} }; +const uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS] = {0, 0}; +const uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][1]={{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}}}; +const uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz = 0; +const float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[15]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; +const uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float CRendBin_Combined_HRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][80]={ + { + { 1.239183f, 1.256884f, 1.300573f, 1.362041f, 1.394364f, 1.354510f, 1.284249f, 1.277360f, 1.319933f, 1.260104f, 1.035831f, 0.841818f, 0.918943f, 1.228789f, 1.505938f, 1.615001f, 1.676409f, 1.821102f, 2.003314f, 2.120456f, 2.162423f, 2.149697f, 2.042953f, 1.819108f, 1.562774f, 1.392343f, 1.338502f, 1.354661f, 1.404734f, 1.489962f, 1.620994f, 1.801308f, 2.016368f, 2.220843f, 2.360726f, 2.418417f, 2.416549f, 2.381039f, 2.323273f, 2.248889f, 2.158818f, 2.050759f, 1.937222f, 1.846306f, 1.790643f, 1.755504f, 1.725726f, 1.698099f, 1.662521f, 1.603450f, 1.526080f, 1.451493f, 1.385684f, 1.321724f, 1.264611f, 1.223329f, 1.190008f, 1.155210f, 1.126054f, 1.104272f, 1.071790f, 1.020334f, 0.962879f, 0.897728f, 0.801926f, 0.675382f, 0.545582f, 0.420598f, 0.290433f, 0.173783f, 0.099765f, 0.050651f, -0.006501f, -0.051832f, -0.062025f, -0.095855f, -0.220501f, -0.379318f, -0.456547f, -0.451019f}, + { 0.976240f, 0.994260f, 0.876770f, 0.603987f, 0.342097f, 0.178057f, 0.025122f, -0.153833f, -0.238337f, -0.148669f, 0.014037f, 0.101818f, 0.056629f, -0.133626f, -0.461333f, -0.816719f, -1.019518f, -1.009183f, -0.897964f, -0.789252f, -0.663741f, -0.496239f, -0.354698f, -0.300607f, -0.288976f, -0.247649f, -0.178409f, -0.106503f, 0.000399f, 0.183189f, 0.407624f, 0.602115f, 0.750568f, 0.884249f, 0.996966f, 1.028551f, 0.941028f, 0.772393f, 0.598310f, 0.460945f, 0.351012f, 0.245637f, 0.138980f, 0.032720f, -0.080090f, -0.203879f, -0.325054f, -0.425206f, -0.502279f, -0.563310f, -0.605020f, -0.618514f, -0.605694f, -0.575144f, -0.529166f, -0.468635f, -0.401310f, -0.332120f, -0.255156f, -0.166385f, -0.072884f, 0.018825f, 0.108885f, 0.191215f, 0.251825f, 0.287375f, 0.308166f, 0.318458f, 0.313465f, 0.297736f, 0.283754f, 0.271359f, 0.252697f, 0.235107f, 0.229934f, 0.221035f, 0.178105f, 0.103282f, 0.033631f, -0.002717f} + }, + { + { 0.976240f, 0.994260f, 0.876770f, 0.603987f, 0.342097f, 0.178057f, 0.025122f, -0.153833f, -0.238337f, -0.148669f, 0.014037f, 0.101818f, 0.056629f, -0.133626f, -0.461333f, -0.816719f, -1.019518f, -1.009183f, -0.897964f, -0.789252f, -0.663741f, -0.496239f, -0.354698f, -0.300607f, -0.288976f, -0.247649f, -0.178409f, -0.106503f, 0.000399f, 0.183189f, 0.407624f, 0.602115f, 0.750568f, 0.884249f, 0.996966f, 1.028551f, 0.941028f, 0.772393f, 0.598310f, 0.460945f, 0.351012f, 0.245637f, 0.138980f, 0.032720f, -0.080090f, -0.203879f, -0.325054f, -0.425206f, -0.502279f, -0.563310f, -0.605020f, -0.618514f, -0.605694f, -0.575144f, -0.529166f, -0.468635f, -0.401310f, -0.332120f, -0.255156f, -0.166385f, -0.072884f, 0.018825f, 0.108885f, 0.191215f, 0.251825f, 0.287375f, 0.308166f, 0.318458f, 0.313465f, 0.297736f, 0.283754f, 0.271359f, 0.252697f, 0.235107f, 0.229934f, 0.221035f, 0.178105f, 0.103282f, 0.033631f, -0.002717f}, + { 1.239183f, 1.256884f, 1.300573f, 1.362041f, 1.394364f, 1.354510f, 1.284249f, 1.277360f, 1.319933f, 1.260104f, 1.035831f, 0.841818f, 0.918943f, 1.228789f, 1.505938f, 1.615001f, 1.676409f, 1.821102f, 2.003314f, 2.120456f, 2.162423f, 2.149697f, 2.042953f, 1.819108f, 1.562774f, 1.392343f, 1.338502f, 1.354661f, 1.404734f, 1.489962f, 1.620994f, 1.801308f, 2.016368f, 2.220843f, 2.360726f, 2.418417f, 2.416549f, 2.381039f, 2.323273f, 2.248889f, 2.158818f, 2.050759f, 1.937222f, 1.846306f, 1.790643f, 1.755504f, 1.725726f, 1.698099f, 1.662521f, 1.603450f, 1.526080f, 1.451493f, 1.385684f, 1.321724f, 1.264611f, 1.223329f, 1.190008f, 1.155210f, 1.126054f, 1.104272f, 1.071790f, 1.020334f, 0.962879f, 0.897728f, 0.801926f, 0.675382f, 0.545582f, 0.420598f, 0.290433f, 0.173783f, 0.099765f, 0.050651f, -0.006501f, -0.051832f, -0.062025f, -0.095855f, -0.220501f, -0.379318f, -0.456547f, -0.451019f} + }, + { + { 1.122002f, 1.187509f, 1.246713f, 1.186481f, 1.007012f, 0.901165f, 1.008728f, 1.141977f, 0.990263f, 0.601633f, 0.401412f, 0.648122f, 1.096958f, 1.338723f, 1.298435f, 1.232461f, 1.343043f, 1.571111f, 1.735520f, 1.734892f, 1.594568f, 1.403703f, 1.245465f, 1.156974f, 1.131157f, 1.152575f, 1.222042f, 1.343151f, 1.499436f, 1.653765f, 1.763643f, 1.798287f, 1.754626f, 1.659827f, 1.547259f, 1.427359f, 1.291280f, 1.143229f, 1.015463f, 0.943988f, 0.937070f, 0.973335f, 1.022309f, 1.058798f, 1.066678f, 1.044204f, 1.005034f, 0.962902f, 0.915965f, 0.855193f, 0.783640f, 0.714878f, 0.655748f, 0.603582f, 0.557141f, 0.517413f, 0.480665f, 0.442018f, 0.402043f, 0.361971f, 0.320178f, 0.279891f, 0.248672f, 0.224537f, 0.197411f, 0.168385f, 0.148883f, 0.138139f, 0.123963f, 0.107044f, 0.098600f, 0.095015f, 0.084669f, 0.075757f, 0.080895f, 0.078392f, 0.031664f, -0.052589f, -0.126934f, -0.162192f}, + { 1.122002f, 1.187509f, 1.246713f, 1.186481f, 1.007012f, 0.901165f, 1.008728f, 1.141977f, 0.990263f, 0.601633f, 0.401412f, 0.648122f, 1.096958f, 1.338723f, 1.298435f, 1.232461f, 1.343043f, 1.571111f, 1.735520f, 1.734892f, 1.594568f, 1.403703f, 1.245465f, 1.156974f, 1.131157f, 1.152575f, 1.222042f, 1.343151f, 1.499436f, 1.653765f, 1.763643f, 1.798287f, 1.754626f, 1.659827f, 1.547259f, 1.427359f, 1.291280f, 1.143229f, 1.015463f, 0.943988f, 0.937070f, 0.973335f, 1.022309f, 1.058798f, 1.066678f, 1.044204f, 1.005034f, 0.962902f, 0.915965f, 0.855193f, 0.783640f, 0.714878f, 0.655748f, 0.603582f, 0.557141f, 0.517413f, 0.480665f, 0.442018f, 0.402043f, 0.361971f, 0.320178f, 0.279891f, 0.248672f, 0.224537f, 0.197411f, 0.168385f, 0.148883f, 0.138139f, 0.123963f, 0.107044f, 0.098600f, 0.095015f, 0.084669f, 0.075757f, 0.080895f, 0.078392f, 0.031664f, -0.052589f, -0.126934f, -0.162192f} + }, + { + { 1.032458f, 1.019232f, 1.055503f, 1.152346f, 1.264895f, 1.383916f, 1.512110f, 1.580287f, 1.524747f, 1.420851f, 1.394704f, 1.425779f, 1.386971f, 1.260446f, 1.155939f, 1.120555f, 1.085289f, 1.009371f, 0.935215f, 0.881823f, 0.810096f, 0.716819f, 0.656194f, 0.648528f, 0.657128f, 0.664016f, 0.684330f, 0.701881f, 0.671714f, 0.594887f, 0.522873f, 0.483118f, 0.457983f, 0.436517f, 0.432787f, 0.451700f, 0.481548f, 0.521185f, 0.579543f, 0.650119f, 0.713051f, 0.757998f, 0.785521f, 0.795209f, 0.789636f, 0.781137f, 0.782151f, 0.796868f, 0.827388f, 0.875753f, 0.935530f, 0.992686f, 1.036578f, 1.061213f, 1.059833f, 1.030025f, 0.980163f, 0.920722f, 0.854362f, 0.781629f, 0.707493f, 0.634976f, 0.561728f, 0.488448f, 0.420947f, 0.361366f, 0.308394f, 0.265774f, 0.238195f, 0.221960f, 0.212568f, 0.214004f, 0.226821f, 0.241055f, 0.257494f, 0.292604f, 0.336204f, 0.334653f, 0.260903f, 0.178438f}, + { 0.889328f, 0.746996f, 0.488378f, 0.194430f, -0.042359f, -0.205117f, -0.340122f, -0.454284f, -0.495140f, -0.447770f, -0.377268f, -0.341727f, -0.325720f, -0.297022f, -0.268715f, -0.254946f, -0.211569f, -0.078288f, 0.140726f, 0.376638f, 0.557395f, 0.642762f, 0.624635f, 0.526071f, 0.387689f, 0.235666f, 0.075552f, -0.077664f, -0.191603f, -0.251078f, -0.275106f, -0.287280f, -0.292024f, -0.288334f, -0.281437f, -0.269025f, -0.235621f, -0.170355f, -0.077550f, 0.031117f, 0.140203f, 0.228000f, 0.275992f, 0.281213f, 0.251542f, 0.196072f, 0.128119f, 0.066628f, 0.023837f, -0.001236f, -0.013179f, -0.014941f, -0.013424f, -0.016640f, -0.023836f, -0.029784f, -0.035699f, -0.044247f, -0.050866f, -0.052722f, -0.056962f, -0.068512f, -0.081828f, -0.094138f, -0.110312f, -0.126037f, -0.125656f, -0.103544f, -0.066475f, -0.013511f, 0.059218f, 0.135030f, 0.189944f, 0.225062f, 0.249597f, 0.241962f, 0.175370f, 0.075689f, 0.002323f, -0.024232f} + }, + { + { 0.889328f, 0.746996f, 0.488378f, 0.194430f, -0.042359f, -0.205117f, -0.340122f, -0.454284f, -0.495140f, -0.447770f, -0.377268f, -0.341727f, -0.325720f, -0.297022f, -0.268715f, -0.254946f, -0.211569f, -0.078288f, 0.140726f, 0.376638f, 0.557395f, 0.642762f, 0.624635f, 0.526071f, 0.387689f, 0.235666f, 0.075552f, -0.077664f, -0.191603f, -0.251078f, -0.275106f, -0.287280f, -0.292024f, -0.288334f, -0.281437f, -0.269025f, -0.235621f, -0.170355f, -0.077550f, 0.031117f, 0.140203f, 0.228000f, 0.275992f, 0.281213f, 0.251542f, 0.196072f, 0.128119f, 0.066628f, 0.023837f, -0.001236f, -0.013179f, -0.014941f, -0.013424f, -0.016640f, -0.023836f, -0.029784f, -0.035699f, -0.044247f, -0.050866f, -0.052722f, -0.056962f, -0.068512f, -0.081828f, -0.094138f, -0.110312f, -0.126037f, -0.125656f, -0.103544f, -0.066475f, -0.013511f, 0.059218f, 0.135030f, 0.189944f, 0.225062f, 0.249597f, 0.241962f, 0.175370f, 0.075689f, 0.002323f, -0.024232f}, + { 1.032458f, 1.019232f, 1.055503f, 1.152346f, 1.264895f, 1.383916f, 1.512110f, 1.580287f, 1.524747f, 1.420851f, 1.394704f, 1.425779f, 1.386971f, 1.260446f, 1.155939f, 1.120555f, 1.085289f, 1.009371f, 0.935215f, 0.881823f, 0.810096f, 0.716819f, 0.656194f, 0.648528f, 0.657128f, 0.664016f, 0.684330f, 0.701881f, 0.671714f, 0.594887f, 0.522873f, 0.483118f, 0.457983f, 0.436517f, 0.432787f, 0.451700f, 0.481548f, 0.521185f, 0.579543f, 0.650119f, 0.713051f, 0.757998f, 0.785521f, 0.795209f, 0.789636f, 0.781137f, 0.782151f, 0.796868f, 0.827388f, 0.875753f, 0.935530f, 0.992686f, 1.036578f, 1.061213f, 1.059833f, 1.030025f, 0.980163f, 0.920722f, 0.854362f, 0.781629f, 0.707493f, 0.634976f, 0.561728f, 0.488448f, 0.420947f, 0.361366f, 0.308394f, 0.265774f, 0.238195f, 0.221960f, 0.212568f, 0.214004f, 0.226821f, 0.241055f, 0.257494f, 0.292604f, 0.336204f, 0.334653f, 0.260903f, 0.178438f} + }, + { + { 1.158112f, 1.137057f, 1.174613f, 1.308407f, 1.475864f, 1.598510f, 1.664862f, 1.690093f, 1.651597f, 1.534827f, 1.406784f, 1.355852f, 1.365578f, 1.335480f, 1.236605f, 1.155816f, 1.155572f, 1.178545f, 1.145617f, 1.074884f, 1.034046f, 1.028410f, 1.011514f, 0.974296f, 0.951351f, 0.952791f, 0.951270f, 0.934033f, 0.920539f, 0.926929f, 0.947425f, 0.971010f, 0.990610f, 0.998330f, 0.992556f, 0.986782f, 0.996893f, 1.025270f, 1.066679f, 1.119066f, 1.178909f, 1.237203f, 1.288894f, 1.336531f, 1.379512f, 1.411025f, 1.429533f, 1.442089f, 1.453763f, 1.464108f, 1.474121f, 1.485855f, 1.495586f, 1.496799f, 1.487971f, 1.469903f, 1.440331f, 1.398591f, 1.349095f, 1.293717f, 1.228938f, 1.155645f, 1.081269f, 1.007672f, 0.929250f, 0.846598f, 0.767662f, 0.692536f, 0.613816f, 0.534651f, 0.467779f, 0.414464f, 0.365611f, 0.326004f, 0.311159f, 0.311495f, 0.285175f, 0.203678f, 0.091850f, 0.011559f}, + { 0.901656f, 0.675975f, 0.308472f, -0.078196f, -0.395054f, -0.619898f, -0.749461f, -0.745121f, -0.567593f, -0.256959f, 0.067459f, 0.299340f, 0.414342f, 0.446852f, 0.428396f, 0.363898f, 0.253318f, 0.116508f, -0.013083f, -0.117898f, -0.206372f, -0.284180f, -0.329308f, -0.314412f, -0.244304f, -0.149614f, -0.050276f, 0.051936f, 0.149545f, 0.222247f, 0.255380f, 0.249297f, 0.210511f, 0.146069f, 0.065487f, -0.020890f, -0.103702f, -0.170940f, -0.208945f, -0.211820f, -0.185220f, -0.139572f, -0.084250f, -0.026357f, 0.031102f, 0.087784f, 0.138807f, 0.173470f, 0.183734f, 0.167784f, 0.125449f, 0.059969f, -0.015648f, -0.084348f, -0.136303f, -0.166828f, -0.170290f, -0.147307f, -0.109984f, -0.069086f, -0.025167f, 0.020371f, 0.060146f, 0.093657f, 0.127308f, 0.156007f, 0.164553f, 0.148834f, 0.112994f, 0.050508f, -0.042163f, -0.140492f, -0.212717f, -0.251404f, -0.249732f, -0.178192f, -0.041065f, 0.077068f, 0.097809f, 0.059914f} + }, + { + { 0.901656f, 0.675975f, 0.308472f, -0.078196f, -0.395054f, -0.619898f, -0.749461f, -0.745121f, -0.567593f, -0.256959f, 0.067459f, 0.299340f, 0.414342f, 0.446852f, 0.428396f, 0.363898f, 0.253318f, 0.116508f, -0.013083f, -0.117898f, -0.206372f, -0.284180f, -0.329308f, -0.314412f, -0.244304f, -0.149614f, -0.050276f, 0.051936f, 0.149545f, 0.222247f, 0.255380f, 0.249297f, 0.210511f, 0.146069f, 0.065487f, -0.020890f, -0.103702f, -0.170940f, -0.208945f, -0.211820f, -0.185220f, -0.139572f, -0.084250f, -0.026357f, 0.031102f, 0.087784f, 0.138807f, 0.173470f, 0.183734f, 0.167784f, 0.125449f, 0.059969f, -0.015648f, -0.084348f, -0.136303f, -0.166828f, -0.170290f, -0.147307f, -0.109984f, -0.069086f, -0.025167f, 0.020371f, 0.060146f, 0.093657f, 0.127308f, 0.156007f, 0.164553f, 0.148834f, 0.112994f, 0.050508f, -0.042163f, -0.140492f, -0.212717f, -0.251404f, -0.249732f, -0.178192f, -0.041065f, 0.077068f, 0.097809f, 0.059914f}, + { 1.158112f, 1.137057f, 1.174613f, 1.308407f, 1.475864f, 1.598510f, 1.664862f, 1.690093f, 1.651597f, 1.534827f, 1.406784f, 1.355852f, 1.365578f, 1.335480f, 1.236605f, 1.155816f, 1.155572f, 1.178545f, 1.145617f, 1.074884f, 1.034046f, 1.028410f, 1.011514f, 0.974296f, 0.951351f, 0.952791f, 0.951270f, 0.934033f, 0.920539f, 0.926929f, 0.947425f, 0.971010f, 0.990610f, 0.998330f, 0.992556f, 0.986782f, 0.996893f, 1.025270f, 1.066679f, 1.119066f, 1.178909f, 1.237203f, 1.288894f, 1.336531f, 1.379512f, 1.411025f, 1.429533f, 1.442089f, 1.453763f, 1.464108f, 1.474121f, 1.485855f, 1.495586f, 1.496799f, 1.487971f, 1.469903f, 1.440331f, 1.398591f, 1.349095f, 1.293717f, 1.228938f, 1.155645f, 1.081269f, 1.007672f, 0.929250f, 0.846598f, 0.767662f, 0.692536f, 0.613816f, 0.534651f, 0.467779f, 0.414464f, 0.365611f, 0.326004f, 0.311159f, 0.311495f, 0.285175f, 0.203678f, 0.091850f, 0.011559f} + }, + { + { 1.235520f, 1.267745f, 1.311533f, 1.396643f, 1.562142f, 1.739490f, 1.797650f, 1.725448f, 1.645715f, 1.615047f, 1.544151f, 1.379627f, 1.231268f, 1.218112f, 1.292699f, 1.332906f, 1.328133f, 1.351971f, 1.406972f, 1.424922f, 1.397315f, 1.389969f, 1.427081f, 1.452470f, 1.417648f, 1.341339f, 1.270667f, 1.231859f, 1.225126f, 1.232539f, 1.230373f, 1.218536f, 1.230471f, 1.294017f, 1.394390f, 1.492369f, 1.564549f, 1.611356f, 1.640653f, 1.658539f, 1.668696f, 1.673718f, 1.680425f, 1.699615f, 1.733804f, 1.773278f, 1.810830f, 1.848659f, 1.885086f, 1.909496f, 1.915897f, 1.906449f, 1.879898f, 1.833243f, 1.773732f, 1.712413f, 1.650523f, 1.587448f, 1.531042f, 1.483778f, 1.433378f, 1.371553f, 1.302603f, 1.222332f, 1.114931f, 0.981061f, 0.839087f, 0.693154f, 0.535784f, 0.381622f, 0.254990f, 0.148531f, 0.043270f, -0.043620f, -0.091644f, -0.138174f, -0.231231f, -0.338131f, -0.386098f, -0.378792f}, + { 0.914782f, 0.650055f, 0.239576f, -0.181854f, -0.539073f, -0.787899f, -0.863032f, -0.709618f, -0.363410f, 0.045228f, 0.384901f, 0.599773f, 0.690085f, 0.654823f, 0.484709f, 0.199734f, -0.132928f, -0.424723f, -0.606004f, -0.647328f, -0.552997f, -0.344341f, -0.058161f, 0.242078f, 0.475279f, 0.581052f, 0.547396f, 0.398952f, 0.173288f, -0.082456f, -0.309870f, -0.456050f, -0.493427f, -0.421065f, -0.258435f, -0.045804f, 0.160944f, 0.310519f, 0.375222f, 0.353858f, 0.264124f, 0.133068f, -0.011592f, -0.144525f, -0.241005f, -0.281276f, -0.260926f, -0.191571f, -0.090994f, 0.020279f, 0.116661f, 0.176292f, 0.194091f, 0.177389f, 0.132627f, 0.066960f, -0.004147f, -0.064907f, -0.109797f, -0.136697f, -0.139536f, -0.117862f, -0.081864f, -0.039087f, 0.010472f, 0.060857f, 0.099437f, 0.123178f, 0.135545f, 0.127536f, 0.086281f, 0.020181f, -0.050211f, -0.116826f, -0.168642f, -0.170590f, -0.104626f, -0.017451f, 0.025994f, 0.025448f} + }, + { + { 0.914782f, 0.650055f, 0.239576f, -0.181854f, -0.539073f, -0.787899f, -0.863032f, -0.709618f, -0.363410f, 0.045228f, 0.384901f, 0.599773f, 0.690085f, 0.654823f, 0.484709f, 0.199734f, -0.132928f, -0.424723f, -0.606004f, -0.647328f, -0.552997f, -0.344341f, -0.058161f, 0.242078f, 0.475279f, 0.581052f, 0.547396f, 0.398952f, 0.173288f, -0.082456f, -0.309870f, -0.456050f, -0.493427f, -0.421065f, -0.258435f, -0.045804f, 0.160944f, 0.310519f, 0.375222f, 0.353858f, 0.264124f, 0.133068f, -0.011592f, -0.144525f, -0.241005f, -0.281276f, -0.260926f, -0.191571f, -0.090994f, 0.020279f, 0.116661f, 0.176292f, 0.194091f, 0.177389f, 0.132627f, 0.066960f, -0.004147f, -0.064907f, -0.109797f, -0.136697f, -0.139536f, -0.117862f, -0.081864f, -0.039087f, 0.010472f, 0.060857f, 0.099437f, 0.123178f, 0.135545f, 0.127536f, 0.086281f, 0.020181f, -0.050211f, -0.116826f, -0.168642f, -0.170590f, -0.104626f, -0.017451f, 0.025994f, 0.025448f}, + { 1.235520f, 1.267745f, 1.311533f, 1.396643f, 1.562142f, 1.739490f, 1.797650f, 1.725448f, 1.645715f, 1.615047f, 1.544151f, 1.379627f, 1.231268f, 1.218112f, 1.292699f, 1.332906f, 1.328133f, 1.351971f, 1.406972f, 1.424922f, 1.397315f, 1.389969f, 1.427081f, 1.452470f, 1.417648f, 1.341339f, 1.270667f, 1.231859f, 1.225126f, 1.232539f, 1.230373f, 1.218536f, 1.230471f, 1.294017f, 1.394390f, 1.492369f, 1.564549f, 1.611356f, 1.640653f, 1.658539f, 1.668696f, 1.673718f, 1.680425f, 1.699615f, 1.733804f, 1.773278f, 1.810830f, 1.848659f, 1.885086f, 1.909496f, 1.915897f, 1.906449f, 1.879898f, 1.833243f, 1.773732f, 1.712413f, 1.650523f, 1.587448f, 1.531042f, 1.483778f, 1.433378f, 1.371553f, 1.302603f, 1.222332f, 1.114931f, 0.981061f, 0.839087f, 0.693154f, 0.535784f, 0.381622f, 0.254990f, 0.148531f, 0.043270f, -0.043620f, -0.091644f, -0.138174f, -0.231231f, -0.338131f, -0.386098f, -0.378792f} + }, + { + { 1.300965f, 1.294750f, 1.282817f, 1.255178f, 1.204577f, 1.137923f, 1.059580f, 0.981805f, 0.966983f, 1.092308f, 1.337634f, 1.575073f, 1.703047f, 1.722782f, 1.666581f, 1.546456f, 1.403671f, 1.311746f, 1.292222f, 1.306949f, 1.348731f, 1.449654f, 1.589237f, 1.688195f, 1.707228f, 1.673858f, 1.615172f, 1.543456f, 1.497797f, 1.520390f, 1.597903f, 1.686893f, 1.778063f, 1.882324f, 1.981161f, 2.041271f, 2.055297f, 2.034562f, 1.988601f, 1.932387f, 1.883493f, 1.841147f, 1.794770f, 1.748405f, 1.709284f, 1.669343f, 1.625551f, 1.593305f, 1.576244f, 1.555177f, 1.523771f, 1.496823f, 1.475255f, 1.446578f, 1.418163f, 1.403084f, 1.385586f, 1.347706f, 1.304713f, 1.269256f, 1.221100f, 1.154593f, 1.100549f, 1.063945f, 1.009439f, 0.935611f, 0.877621f, 0.821786f, 0.720980f, 0.594304f, 0.491179f, 0.378481f, 0.204744f, 0.026392f, -0.103932f, -0.295951f, -0.642665f, -0.968133f, -1.033163f, -0.924785f}, + { 1.056881f, 0.977664f, 0.829309f, 0.609050f, 0.335194f, 0.103305f, 0.039580f, 0.170337f, 0.375031f, 0.482951f, 0.394424f, 0.127225f, -0.200288f, -0.435291f, -0.499884f, -0.452044f, -0.409762f, -0.428220f, -0.490681f, -0.586139f, -0.717818f, -0.842320f, -0.883008f, -0.823590f, -0.730446f, -0.667660f, -0.639081f, -0.620834f, -0.597634f, -0.552777f, -0.466079f, -0.338552f, -0.193325f, -0.050363f, 0.077475f, 0.174494f, 0.237020f, 0.288121f, 0.352285f, 0.426567f, 0.494946f, 0.552824f, 0.599792f, 0.629446f, 0.642872f, 0.651801f, 0.657595f, 0.648892f, 0.624781f, 0.595680f, 0.560679f, 0.509928f, 0.445668f, 0.375032f, 0.291050f, 0.186825f, 0.074986f, -0.031392f, -0.138355f, -0.249537f, -0.350061f, -0.432142f, -0.507157f, -0.576005f, -0.622512f, -0.647800f, -0.670394f, -0.686010f, -0.673194f, -0.637570f, -0.598466f, -0.542641f, -0.451741f, -0.353357f, -0.271891f, -0.162755f, 0.010957f, 0.173137f, 0.221085f, 0.187717f} + }, + { + { 1.056881f, 0.977664f, 0.829309f, 0.609050f, 0.335194f, 0.103305f, 0.039580f, 0.170337f, 0.375031f, 0.482951f, 0.394424f, 0.127225f, -0.200288f, -0.435291f, -0.499884f, -0.452044f, -0.409762f, -0.428220f, -0.490681f, -0.586139f, -0.717818f, -0.842320f, -0.883008f, -0.823590f, -0.730446f, -0.667660f, -0.639081f, -0.620834f, -0.597634f, -0.552777f, -0.466079f, -0.338552f, -0.193325f, -0.050363f, 0.077475f, 0.174494f, 0.237020f, 0.288121f, 0.352285f, 0.426567f, 0.494946f, 0.552824f, 0.599792f, 0.629446f, 0.642872f, 0.651801f, 0.657595f, 0.648892f, 0.624781f, 0.595680f, 0.560679f, 0.509928f, 0.445668f, 0.375032f, 0.291050f, 0.186825f, 0.074986f, -0.031392f, -0.138355f, -0.249537f, -0.350061f, -0.432142f, -0.507157f, -0.576005f, -0.622512f, -0.647800f, -0.670394f, -0.686010f, -0.673194f, -0.637570f, -0.598466f, -0.542641f, -0.451741f, -0.353357f, -0.271891f, -0.162755f, 0.010957f, 0.173137f, 0.221085f, 0.187717f}, + { 1.300965f, 1.294750f, 1.282817f, 1.255178f, 1.204577f, 1.137923f, 1.059580f, 0.981805f, 0.966983f, 1.092308f, 1.337634f, 1.575073f, 1.703047f, 1.722782f, 1.666581f, 1.546456f, 1.403671f, 1.311746f, 1.292222f, 1.306949f, 1.348731f, 1.449654f, 1.589237f, 1.688195f, 1.707228f, 1.673858f, 1.615172f, 1.543456f, 1.497797f, 1.520390f, 1.597903f, 1.686893f, 1.778063f, 1.882324f, 1.981161f, 2.041271f, 2.055297f, 2.034562f, 1.988601f, 1.932387f, 1.883493f, 1.841147f, 1.794770f, 1.748405f, 1.709284f, 1.669343f, 1.625551f, 1.593305f, 1.576244f, 1.555177f, 1.523771f, 1.496823f, 1.475255f, 1.446578f, 1.418163f, 1.403084f, 1.385586f, 1.347706f, 1.304713f, 1.269256f, 1.221100f, 1.154593f, 1.100549f, 1.063945f, 1.009439f, 0.935611f, 0.877621f, 0.821786f, 0.720980f, 0.594304f, 0.491179f, 0.378481f, 0.204744f, 0.026392f, -0.103932f, -0.295951f, -0.642665f, -0.968133f, -1.033163f, -0.924785f} + }, + { + { 1.199748f, 1.195187f, 1.219693f, 1.306113f, 1.425047f, 1.477111f, 1.397070f, 1.252223f, 1.172655f, 1.188882f, 1.217061f, 1.212048f, 1.238227f, 1.348679f, 1.484315f, 1.557633f, 1.567620f, 1.562073f, 1.542003f, 1.477405f, 1.379422f, 1.288860f, 1.216806f, 1.148467f, 1.083662f, 1.031921f, 0.988049f, 0.943225f, 0.900165f, 0.859424f, 0.815628f, 0.776796f, 0.758198f, 0.753004f, 0.739708f, 0.717133f, 0.701610f, 0.697315f, 0.699875f, 0.716105f, 0.750519f, 0.788979f, 0.821105f, 0.857164f, 0.902405f, 0.942513f, 0.970953f, 0.998437f, 1.023655f, 1.030364f, 1.020180f, 1.011394f, 1.006072f, 0.996138f, 0.992784f, 1.010311f, 1.036592f, 1.056629f, 1.080188f, 1.111608f, 1.127724f, 1.118163f, 1.103894f, 1.089439f, 1.050792f, 0.990760f, 0.941697f, 0.900735f, 0.836298f, 0.760105f, 0.706490f, 0.651720f, 0.554145f, 0.447475f, 0.372905f, 0.259179f, 0.022580f, -0.250587f, -0.394385f, -0.405028f}, + { 0.954653f, 0.811443f, 0.527050f, 0.156554f, -0.183229f, -0.390764f, -0.463838f, -0.489615f, -0.545649f, -0.618563f, -0.627603f, -0.522242f, -0.339179f, -0.156441f, -0.010199f, 0.122255f, 0.267483f, 0.411203f, 0.511742f, 0.538871f, 0.493820f, 0.403566f, 0.299556f, 0.194567f, 0.079866f, -0.051976f, -0.188907f, -0.309334f, -0.399390f, -0.451587f, -0.457014f, -0.410966f, -0.321563f, -0.205765f, -0.080962f, 0.037500f, 0.138072f, 0.215566f, 0.268025f, 0.292898f, 0.291211f, 0.270674f, 0.238281f, 0.194880f, 0.141481f, 0.083085f, 0.022016f, -0.043580f, -0.111370f, -0.174259f, -0.228801f, -0.273350f, -0.299289f, -0.296400f, -0.264810f, -0.210717f, -0.136124f, -0.044272f, 0.053064f, 0.144902f, 0.227652f, 0.293924f, 0.329277f, 0.328445f, 0.298807f, 0.243094f, 0.158591f, 0.055206f, -0.049168f, -0.149592f, -0.244281f, -0.312080f, -0.331894f, -0.311981f, -0.264235f, -0.173081f, -0.039856f, 0.070126f, 0.093737f, 0.064463f} + }, + { + { 0.954653f, 0.811443f, 0.527050f, 0.156554f, -0.183229f, -0.390764f, -0.463838f, -0.489615f, -0.545649f, -0.618563f, -0.627603f, -0.522242f, -0.339179f, -0.156441f, -0.010199f, 0.122255f, 0.267483f, 0.411203f, 0.511742f, 0.538871f, 0.493820f, 0.403566f, 0.299556f, 0.194567f, 0.079866f, -0.051976f, -0.188907f, -0.309334f, -0.399390f, -0.451587f, -0.457014f, -0.410966f, -0.321563f, -0.205765f, -0.080962f, 0.037500f, 0.138072f, 0.215566f, 0.268025f, 0.292898f, 0.291211f, 0.270674f, 0.238281f, 0.194880f, 0.141481f, 0.083085f, 0.022016f, -0.043580f, -0.111370f, -0.174259f, -0.228801f, -0.273350f, -0.299289f, -0.296400f, -0.264810f, -0.210717f, -0.136124f, -0.044272f, 0.053064f, 0.144902f, 0.227652f, 0.293924f, 0.329277f, 0.328445f, 0.298807f, 0.243094f, 0.158591f, 0.055206f, -0.049168f, -0.149592f, -0.244281f, -0.312080f, -0.331894f, -0.311981f, -0.264235f, -0.173081f, -0.039856f, 0.070126f, 0.093737f, 0.064463f}, + { 1.199748f, 1.195187f, 1.219693f, 1.306113f, 1.425047f, 1.477111f, 1.397070f, 1.252223f, 1.172655f, 1.188882f, 1.217061f, 1.212048f, 1.238227f, 1.348679f, 1.484315f, 1.557633f, 1.567620f, 1.562073f, 1.542003f, 1.477405f, 1.379422f, 1.288860f, 1.216806f, 1.148467f, 1.083662f, 1.031921f, 0.988049f, 0.943225f, 0.900165f, 0.859424f, 0.815628f, 0.776796f, 0.758198f, 0.753004f, 0.739708f, 0.717133f, 0.701610f, 0.697315f, 0.699875f, 0.716105f, 0.750519f, 0.788979f, 0.821105f, 0.857164f, 0.902405f, 0.942513f, 0.970953f, 0.998437f, 1.023655f, 1.030364f, 1.020180f, 1.011394f, 1.006072f, 0.996138f, 0.992784f, 1.010311f, 1.036592f, 1.056629f, 1.080188f, 1.111608f, 1.127724f, 1.118163f, 1.103894f, 1.089439f, 1.050792f, 0.990760f, 0.941697f, 0.900735f, 0.836298f, 0.760105f, 0.706490f, 0.651720f, 0.554145f, 0.447475f, 0.372905f, 0.259179f, 0.022580f, -0.250587f, -0.394385f, -0.405028f} + }, + { + { 1.095196f, 1.087659f, 1.109446f, 1.183526f, 1.277660f, 1.326248f, 1.295715f, 1.216113f, 1.140298f, 1.087599f, 1.047695f, 1.026918f, 1.054001f, 1.133020f, 1.223338f, 1.282899f, 1.305886f, 1.301427f, 1.264195f, 1.192277f, 1.112040f, 1.055091f, 1.021765f, 0.989986f, 0.948874f, 0.903167f, 0.855360f, 0.803610f, 0.750668f, 0.700093f, 0.649182f, 0.594756f, 0.538805f, 0.483071f, 0.427223f, 0.376166f, 0.339951f, 0.324096f, 0.327235f, 0.346493f, 0.377413f, 0.412489f, 0.447089f, 0.481805f, 0.514503f, 0.538815f, 0.554366f, 0.567855f, 0.581390f, 0.591629f, 0.600978f, 0.616082f, 0.635914f, 0.654604f, 0.672499f, 0.691101f, 0.703654f, 0.704072f, 0.696257f, 0.683064f, 0.659027f, 0.624315f, 0.589073f, 0.554838f, 0.511458f, 0.458475f, 0.405848f, 0.350815f, 0.282369f, 0.208212f, 0.145223f, 0.088601f, 0.027005f, -0.024496f, -0.052219f, -0.086724f, -0.160473f, -0.239945f, -0.266704f, -0.251269f}, + { 0.923781f, 0.848774f, 0.672610f, 0.407285f, 0.139533f, -0.031128f, -0.095513f, -0.144050f, -0.253242f, -0.392890f, -0.480646f, -0.501871f, -0.519927f, -0.573731f, -0.625609f, -0.624544f, -0.567395f, -0.473405f, -0.345515f, -0.190062f, -0.038979f, 0.081850f, 0.182290f, 0.280740f, 0.370828f, 0.437344f, 0.482403f, 0.514120f, 0.527356f, 0.512218f, 0.466630f, 0.391413f, 0.289373f, 0.174311f, 0.063977f, -0.037733f, -0.135747f, -0.224401f, -0.290520f, -0.330999f, -0.351174f, -0.353060f, -0.339776f, -0.321845f, -0.306033f, -0.288531f, -0.267741f, -0.249068f, -0.230297f, -0.198972f, -0.149214f, -0.084819f, -0.006186f, 0.086559f, 0.180387f, 0.259264f, 0.322166f, 0.373929f, 0.409115f, 0.422408f, 0.419773f, 0.402555f, 0.359218f, 0.287224f, 0.200865f, 0.107257f, 0.002147f, -0.104650f, -0.193281f, -0.265652f, -0.335513f, -0.391102f, -0.411622f, -0.408716f, -0.397569f, -0.345739f, -0.220230f, -0.069285f, 0.021400f, 0.041382f} + }, + { + { 0.923781f, 0.848774f, 0.672610f, 0.407285f, 0.139533f, -0.031128f, -0.095513f, -0.144050f, -0.253242f, -0.392890f, -0.480646f, -0.501871f, -0.519927f, -0.573731f, -0.625609f, -0.624544f, -0.567395f, -0.473405f, -0.345515f, -0.190062f, -0.038979f, 0.081850f, 0.182290f, 0.280740f, 0.370828f, 0.437344f, 0.482403f, 0.514120f, 0.527356f, 0.512218f, 0.466630f, 0.391413f, 0.289373f, 0.174311f, 0.063977f, -0.037733f, -0.135747f, -0.224401f, -0.290520f, -0.330999f, -0.351174f, -0.353060f, -0.339776f, -0.321845f, -0.306033f, -0.288531f, -0.267741f, -0.249068f, -0.230297f, -0.198972f, -0.149214f, -0.084819f, -0.006186f, 0.086559f, 0.180387f, 0.259264f, 0.322166f, 0.373929f, 0.409115f, 0.422408f, 0.419773f, 0.402555f, 0.359218f, 0.287224f, 0.200865f, 0.107257f, 0.002147f, -0.104650f, -0.193281f, -0.265652f, -0.335513f, -0.391102f, -0.411622f, -0.408716f, -0.397569f, -0.345739f, -0.220230f, -0.069285f, 0.021400f, 0.041382f}, + { 1.095196f, 1.087659f, 1.109446f, 1.183526f, 1.277660f, 1.326248f, 1.295715f, 1.216113f, 1.140298f, 1.087599f, 1.047695f, 1.026918f, 1.054001f, 1.133020f, 1.223338f, 1.282899f, 1.305886f, 1.301427f, 1.264195f, 1.192277f, 1.112040f, 1.055091f, 1.021765f, 0.989986f, 0.948874f, 0.903167f, 0.855360f, 0.803610f, 0.750668f, 0.700093f, 0.649182f, 0.594756f, 0.538805f, 0.483071f, 0.427223f, 0.376166f, 0.339951f, 0.324096f, 0.327235f, 0.346493f, 0.377413f, 0.412489f, 0.447089f, 0.481805f, 0.514503f, 0.538815f, 0.554366f, 0.567855f, 0.581390f, 0.591629f, 0.600978f, 0.616082f, 0.635914f, 0.654604f, 0.672499f, 0.691101f, 0.703654f, 0.704072f, 0.696257f, 0.683064f, 0.659027f, 0.624315f, 0.589073f, 0.554838f, 0.511458f, 0.458475f, 0.405848f, 0.350815f, 0.282369f, 0.208212f, 0.145223f, 0.088601f, 0.027005f, -0.024496f, -0.052219f, -0.086724f, -0.160473f, -0.239945f, -0.266704f, -0.251269f} + } +}; +const float CRendBin_Combined_HRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][80]={ + { + { 0.022378f, 0.066864f, 0.100220f, 0.093715f, 0.035070f, -0.024338f, -0.012768f, 0.042367f, 0.023721f, -0.077890f, -0.074274f, 0.183759f, 0.553809f, 0.747512f, 0.694343f, 0.587820f, 0.573964f, 0.578407f, 0.483568f, 0.304887f, 0.110523f, -0.095311f, -0.308826f, -0.445379f, -0.423336f, -0.274568f, -0.099040f, 0.048443f, 0.174236f, 0.289760f, 0.386501f, 0.441979f, 0.423813f, 0.311166f, 0.126234f, -0.077587f, -0.262644f, -0.422706f, -0.561257f, -0.680234f, -0.781458f, -0.857623f, -0.893951f, -0.894126f, -0.886249f, -0.891524f, -0.909393f, -0.938889f, -0.984242f, -1.033780f, -1.065068f, -1.075220f, -1.078048f, -1.075622f, -1.062402f, -1.047450f, -1.042480f, -1.042105f, -1.042212f, -1.056085f, -1.088475f, -1.122510f, -1.152405f, -1.192513f, -1.237398f, -1.256660f, -1.241724f, -1.209120f, -1.154430f, -1.061585f, -0.953719f, -0.867433f, -0.789453f, -0.695255f, -0.622912f, -0.610275f, -0.589097f, -0.460324f, -0.251406f, -0.070859f}, + { -0.080681f, -0.311575f, -0.606702f, -0.791121f, -0.800787f, -0.759923f, -0.737510f, -0.645040f, -0.446445f, -0.278883f, -0.277043f, -0.421529f, -0.620997f, -0.801710f, -0.864807f, -0.708809f, -0.372056f, -0.033461f, 0.190558f, 0.342379f, 0.477503f, 0.555106f, 0.541666f, 0.506512f, 0.528602f, 0.592193f, 0.649163f, 0.709906f, 0.795888f, 0.861129f, 0.839487f, 0.735222f, 0.600129f, 0.443934f, 0.230326f, -0.041733f, -0.304398f, -0.483776f, -0.569025f, -0.604499f, -0.631290f, -0.656305f, -0.671663f, -0.677909f, -0.675805f, -0.652694f, -0.596100f, -0.512689f, -0.417832f, -0.314565f, -0.198891f, -0.077460f, 0.036945f, 0.140466f, 0.234222f, 0.313941f, 0.376985f, 0.429901f, 0.476606f, 0.509493f, 0.521856f, 0.516234f, 0.492881f, 0.446350f, 0.381165f, 0.313562f, 0.251474f, 0.190729f, 0.133710f, 0.090238f, 0.058310f, 0.027284f, -0.000482f, -0.017253f, -0.035696f, -0.074905f, -0.120974f, -0.134483f, -0.099419f, -0.035389f} + }, + { + { -0.080681f, -0.311575f, -0.606702f, -0.791121f, -0.800787f, -0.759923f, -0.737510f, -0.645040f, -0.446445f, -0.278883f, -0.277043f, -0.421529f, -0.620997f, -0.801710f, -0.864807f, -0.708809f, -0.372056f, -0.033461f, 0.190558f, 0.342379f, 0.477503f, 0.555106f, 0.541666f, 0.506512f, 0.528602f, 0.592193f, 0.649163f, 0.709906f, 0.795888f, 0.861129f, 0.839487f, 0.735222f, 0.600129f, 0.443934f, 0.230326f, -0.041733f, -0.304398f, -0.483776f, -0.569025f, -0.604499f, -0.631290f, -0.656305f, -0.671663f, -0.677909f, -0.675805f, -0.652694f, -0.596100f, -0.512689f, -0.417832f, -0.314565f, -0.198891f, -0.077460f, 0.036945f, 0.140466f, 0.234222f, 0.313941f, 0.376985f, 0.429901f, 0.476606f, 0.509493f, 0.521856f, 0.516234f, 0.492881f, 0.446350f, 0.381165f, 0.313562f, 0.251474f, 0.190729f, 0.133710f, 0.090238f, 0.058310f, 0.027284f, -0.000482f, -0.017253f, -0.035696f, -0.074905f, -0.120974f, -0.134483f, -0.099419f, -0.035389f}, + { 0.022378f, 0.066864f, 0.100220f, 0.093715f, 0.035070f, -0.024338f, -0.012768f, 0.042367f, 0.023721f, -0.077890f, -0.074274f, 0.183759f, 0.553809f, 0.747512f, 0.694343f, 0.587820f, 0.573964f, 0.578407f, 0.483568f, 0.304887f, 0.110523f, -0.095311f, -0.308826f, -0.445379f, -0.423336f, -0.274568f, -0.099040f, 0.048443f, 0.174236f, 0.289760f, 0.386501f, 0.441979f, 0.423813f, 0.311166f, 0.126234f, -0.077587f, -0.262644f, -0.422706f, -0.561257f, -0.680234f, -0.781458f, -0.857623f, -0.893951f, -0.894126f, -0.886249f, -0.891524f, -0.909393f, -0.938889f, -0.984242f, -1.033780f, -1.065068f, -1.075220f, -1.078048f, -1.075622f, -1.062402f, -1.047450f, -1.042480f, -1.042105f, -1.042212f, -1.056085f, -1.088475f, -1.122510f, -1.152405f, -1.192513f, -1.237398f, -1.256660f, -1.241724f, -1.209120f, -1.154430f, -1.061585f, -0.953719f, -0.867433f, -0.789453f, -0.695255f, -0.622912f, -0.610275f, -0.589097f, -0.460324f, -0.251406f, -0.070859f} + }, + { + { 0.021476f, 0.024861f, -0.068116f, -0.210706f, -0.241100f, -0.094748f, 0.026510f, -0.099482f, -0.330829f, -0.276985f, 0.158539f, 0.598292f, 0.664270f, 0.429569f, 0.248929f, 0.287073f, 0.390113f, 0.351295f, 0.140379f, -0.125369f, -0.320323f, -0.389331f, -0.350352f, -0.257811f, -0.155492f, -0.057513f, 0.029687f, 0.083907f, 0.074937f, -0.013414f, -0.172122f, -0.367613f, -0.553803f, -0.697739f, -0.798279f, -0.871482f, -0.917974f, -0.917107f, -0.857095f, -0.759630f, -0.667061f, -0.611822f, -0.603464f, -0.635057f, -0.689467f, -0.744489f, -0.786319f, -0.818993f, -0.851830f, -0.880879f, -0.893605f, -0.887722f, -0.872310f, -0.853424f, -0.831447f, -0.809294f, -0.790708f, -0.773489f, -0.753887f, -0.732134f, -0.706732f, -0.673217f, -0.634788f, -0.600942f, -0.570621f, -0.533372f, -0.490462f, -0.454214f, -0.424442f, -0.389736f, -0.352307f, -0.323871f, -0.299518f, -0.268423f, -0.245492f, -0.252120f, -0.267604f, -0.242741f, -0.162571f, -0.055414f}, + { 0.021476f, 0.024861f, -0.068116f, -0.210706f, -0.241100f, -0.094748f, 0.026510f, -0.099482f, -0.330829f, -0.276985f, 0.158539f, 0.598292f, 0.664270f, 0.429569f, 0.248929f, 0.287073f, 0.390113f, 0.351295f, 0.140379f, -0.125369f, -0.320323f, -0.389331f, -0.350352f, -0.257811f, -0.155492f, -0.057513f, 0.029687f, 0.083907f, 0.074937f, -0.013414f, -0.172122f, -0.367613f, -0.553803f, -0.697739f, -0.798279f, -0.871482f, -0.917974f, -0.917107f, -0.857095f, -0.759630f, -0.667061f, -0.611822f, -0.603464f, -0.635057f, -0.689467f, -0.744489f, -0.786319f, -0.818993f, -0.851830f, -0.880879f, -0.893605f, -0.887722f, -0.872310f, -0.853424f, -0.831447f, -0.809294f, -0.790708f, -0.773489f, -0.753887f, -0.732134f, -0.706732f, -0.673217f, -0.634788f, -0.600942f, -0.570621f, -0.533372f, -0.490462f, -0.454214f, -0.424442f, -0.389736f, -0.352307f, -0.323871f, -0.299518f, -0.268423f, -0.245492f, -0.252120f, -0.267604f, -0.242741f, -0.162571f, -0.055414f} + }, + { + { 0.012550f, 0.067634f, 0.153766f, 0.208915f, 0.212582f, 0.181638f, 0.088456f, -0.087931f, -0.259740f, -0.322157f, -0.322103f, -0.389409f, -0.523465f, -0.602542f, -0.590922f, -0.578743f, -0.613891f, -0.643676f, -0.637605f, -0.633153f, -0.638458f, -0.606573f, -0.528838f, -0.456632f, -0.416245f, -0.387548f, -0.371313f, -0.393834f, -0.438762f, -0.449766f, -0.408723f, -0.349918f, -0.295796f, -0.234874f, -0.162960f, -0.095890f, -0.039645f, 0.012676f, 0.055074f, 0.071089f, 0.058963f, 0.031594f, -0.001372f, -0.033590f, -0.054377f, -0.056813f, -0.045737f, -0.029510f, -0.013991f, -0.008625f, -0.025610f, -0.068996f, -0.133912f, -0.214970f, -0.305196f, -0.391408f, -0.462418f, -0.517985f, -0.561601f, -0.591744f, -0.607334f, -0.612344f, -0.608226f, -0.591190f, -0.561003f, -0.522128f, -0.475155f, -0.418857f, -0.358993f, -0.302348f, -0.247114f, -0.192269f, -0.145964f, -0.109859f, -0.073493f, -0.044166f, -0.054356f, -0.104447f, -0.126755f, -0.059336f}, + { -0.170186f, -0.479342f, -0.686815f, -0.744803f, -0.686817f, -0.593855f, -0.492851f, -0.349481f, -0.167107f, -0.016808f, 0.057296f, 0.094634f, 0.145504f, 0.203344f, 0.251038f, 0.317878f, 0.433639f, 0.558726f, 0.610245f, 0.542010f, 0.369670f, 0.140805f, -0.089577f, -0.274767f, -0.397554f, -0.467654f, -0.489404f, -0.453378f, -0.367597f, -0.268088f, -0.183887f, -0.114096f, -0.048744f, 0.012366f, 0.071213f, 0.138060f, 0.214392f, 0.284810f, 0.331220f, 0.342296f, 0.310739f, 0.237599f, 0.139351f, 0.038916f, -0.047914f, -0.110918f, -0.141407f, -0.140257f, -0.121022f, -0.097260f, -0.074818f, -0.058184f, -0.051302f, -0.050167f, -0.047162f, -0.042256f, -0.038820f, -0.033860f, -0.024785f, -0.017581f, -0.015893f, -0.012525f, -0.002230f, 0.011304f, 0.029908f, 0.063841f, 0.112146f, 0.160147f, 0.200633f, 0.233829f, 0.246965f, 0.224183f, 0.174767f, 0.118281f, 0.049361f, -0.041130f, -0.119607f, -0.135637f, -0.090349f, -0.028741f} + }, + { + { -0.170186f, -0.479342f, -0.686815f, -0.744803f, -0.686817f, -0.593855f, -0.492851f, -0.349481f, -0.167107f, -0.016808f, 0.057296f, 0.094634f, 0.145504f, 0.203344f, 0.251038f, 0.317878f, 0.433639f, 0.558726f, 0.610245f, 0.542010f, 0.369670f, 0.140805f, -0.089577f, -0.274767f, -0.397554f, -0.467654f, -0.489404f, -0.453378f, -0.367597f, -0.268088f, -0.183887f, -0.114096f, -0.048744f, 0.012366f, 0.071213f, 0.138060f, 0.214392f, 0.284810f, 0.331220f, 0.342296f, 0.310739f, 0.237599f, 0.139351f, 0.038916f, -0.047914f, -0.110918f, -0.141407f, -0.140257f, -0.121022f, -0.097260f, -0.074818f, -0.058184f, -0.051302f, -0.050167f, -0.047162f, -0.042256f, -0.038820f, -0.033860f, -0.024785f, -0.017581f, -0.015893f, -0.012525f, -0.002230f, 0.011304f, 0.029908f, 0.063841f, 0.112146f, 0.160147f, 0.200633f, 0.233829f, 0.246965f, 0.224183f, 0.174767f, 0.118281f, 0.049361f, -0.041130f, -0.119607f, -0.135637f, -0.090349f, -0.028741f}, + { 0.012550f, 0.067634f, 0.153766f, 0.208915f, 0.212582f, 0.181638f, 0.088456f, -0.087931f, -0.259740f, -0.322157f, -0.322103f, -0.389409f, -0.523465f, -0.602542f, -0.590922f, -0.578743f, -0.613891f, -0.643676f, -0.637605f, -0.633153f, -0.638458f, -0.606573f, -0.528838f, -0.456632f, -0.416245f, -0.387548f, -0.371313f, -0.393834f, -0.438762f, -0.449766f, -0.408723f, -0.349918f, -0.295796f, -0.234874f, -0.162960f, -0.095890f, -0.039645f, 0.012676f, 0.055074f, 0.071089f, 0.058963f, 0.031594f, -0.001372f, -0.033590f, -0.054377f, -0.056813f, -0.045737f, -0.029510f, -0.013991f, -0.008625f, -0.025610f, -0.068996f, -0.133912f, -0.214970f, -0.305196f, -0.391408f, -0.462418f, -0.517985f, -0.561601f, -0.591744f, -0.607334f, -0.612344f, -0.608226f, -0.591190f, -0.561003f, -0.522128f, -0.475155f, -0.418857f, -0.358993f, -0.302348f, -0.247114f, -0.192269f, -0.145964f, -0.109859f, -0.073493f, -0.044166f, -0.054356f, -0.104447f, -0.126755f, -0.059336f} + }, + { + { 0.015207f, 0.082976f, 0.199626f, 0.282859f, 0.263873f, 0.164643f, 0.039240f, -0.101852f, -0.255135f, -0.362796f, -0.370418f, -0.325378f, -0.329716f, -0.393214f, -0.421530f, -0.368644f, -0.309548f, -0.318855f, -0.359634f, -0.355814f, -0.310990f, -0.281959f, -0.277523f, -0.258612f, -0.216166f, -0.181301f, -0.165545f, -0.145397f, -0.106504f, -0.062660f, -0.029709f, -0.010119f, -0.001929f, 0.000359f, 0.010822f, 0.040007f, 0.081478f, 0.121574f, 0.154115f, 0.176543f, 0.183358f, 0.173258f, 0.152571f, 0.124730f, 0.086728f, 0.040116f, -0.006130f, -0.047172f, -0.086178f, -0.125612f, -0.165320f, -0.208844f, -0.261164f, -0.321029f, -0.383783f, -0.448219f, -0.513294f, -0.573993f, -0.627582f, -0.676780f, -0.721051f, -0.754143f, -0.775079f, -0.790142f, -0.799884f, -0.797462f, -0.782973f, -0.763866f, -0.738491f, -0.696980f, -0.640957f, -0.582720f, -0.523012f, -0.453255f, -0.384196f, -0.344834f, -0.339145f, -0.323832f, -0.245458f, -0.092605f}, + { -0.226452f, -0.610474f, -0.819401f, -0.827692f, -0.686438f, -0.457267f, -0.161985f, 0.180520f, 0.492244f, 0.662493f, 0.643987f, 0.491123f, 0.296483f, 0.114481f, -0.047643f, -0.190865f, -0.298744f, -0.349852f, -0.344425f, -0.305636f, -0.249293f, -0.165753f, -0.046077f, 0.086344f, 0.191530f, 0.252611f, 0.278443f, 0.273750f, 0.231193f, 0.152001f, 0.053787f, -0.044048f, -0.129347f, -0.193281f, -0.229191f, -0.234673f, -0.209049f, -0.153181f, -0.075871f, 0.005780f, 0.076238f, 0.127944f, 0.159180f, 0.171718f, 0.168690f, 0.149525f, 0.110173f, 0.051594f, -0.017343f, -0.086655f, -0.147164f, -0.186425f, -0.193841f, -0.170433f, -0.125073f, -0.065012f, 0.000827f, 0.057616f, 0.095796f, 0.118697f, 0.130362f, 0.127750f, 0.111905f, 0.090197f, 0.060794f, 0.013835f, -0.047969f, -0.110704f, -0.169346f, -0.220565f, -0.242402f, -0.213355f, -0.142698f, -0.050054f, 0.062130f, 0.172554f, 0.213346f, 0.146844f, 0.042880f, -0.001215f} + }, + { + { -0.226452f, -0.610474f, -0.819401f, -0.827692f, -0.686438f, -0.457267f, -0.161985f, 0.180520f, 0.492244f, 0.662493f, 0.643987f, 0.491123f, 0.296483f, 0.114481f, -0.047643f, -0.190865f, -0.298744f, -0.349852f, -0.344425f, -0.305636f, -0.249293f, -0.165753f, -0.046077f, 0.086344f, 0.191530f, 0.252611f, 0.278443f, 0.273750f, 0.231193f, 0.152001f, 0.053787f, -0.044048f, -0.129347f, -0.193281f, -0.229191f, -0.234673f, -0.209049f, -0.153181f, -0.075871f, 0.005780f, 0.076238f, 0.127944f, 0.159180f, 0.171718f, 0.168690f, 0.149525f, 0.110173f, 0.051594f, -0.017343f, -0.086655f, -0.147164f, -0.186425f, -0.193841f, -0.170433f, -0.125073f, -0.065012f, 0.000827f, 0.057616f, 0.095796f, 0.118697f, 0.130362f, 0.127750f, 0.111905f, 0.090197f, 0.060794f, 0.013835f, -0.047969f, -0.110704f, -0.169346f, -0.220565f, -0.242402f, -0.213355f, -0.142698f, -0.050054f, 0.062130f, 0.172554f, 0.213346f, 0.146844f, 0.042880f, -0.001215f}, + { 0.015207f, 0.082976f, 0.199626f, 0.282859f, 0.263873f, 0.164643f, 0.039240f, -0.101852f, -0.255135f, -0.362796f, -0.370418f, -0.325378f, -0.329716f, -0.393214f, -0.421530f, -0.368644f, -0.309548f, -0.318855f, -0.359634f, -0.355814f, -0.310990f, -0.281959f, -0.277523f, -0.258612f, -0.216166f, -0.181301f, -0.165545f, -0.145397f, -0.106504f, -0.062660f, -0.029709f, -0.010119f, -0.001929f, 0.000359f, 0.010822f, 0.040007f, 0.081478f, 0.121574f, 0.154115f, 0.176543f, 0.183358f, 0.173258f, 0.152571f, 0.124730f, 0.086728f, 0.040116f, -0.006130f, -0.047172f, -0.086178f, -0.125612f, -0.165320f, -0.208844f, -0.261164f, -0.321029f, -0.383783f, -0.448219f, -0.513294f, -0.573993f, -0.627582f, -0.676780f, -0.721051f, -0.754143f, -0.775079f, -0.790142f, -0.799884f, -0.797462f, -0.782973f, -0.763866f, -0.738491f, -0.696980f, -0.640957f, -0.582720f, -0.523012f, -0.453255f, -0.384196f, -0.344834f, -0.339145f, -0.323832f, -0.245458f, -0.092605f} + }, + { + { 0.043874f, 0.118615f, 0.187170f, 0.267150f, 0.298762f, 0.195948f, -0.001786f, -0.150558f, -0.201169f, -0.249208f, -0.342968f, -0.379815f, -0.276823f, -0.123637f, -0.055321f, -0.064144f, -0.055372f, -0.019931f, -0.024681f, -0.071956f, -0.093125f, -0.072032f, -0.070681f, -0.124387f, -0.190477f, -0.213583f, -0.185140f, -0.129878f, -0.075285f, -0.037892f, -0.009897f, 0.037383f, 0.115172f, 0.192625f, 0.228584f, 0.214650f, 0.172116f, 0.122202f, 0.074293f, 0.031381f, -0.005454f, -0.033813f, -0.050480f, -0.060008f, -0.075967f, -0.106394f, -0.147540f, -0.197695f, -0.263287f, -0.345414f, -0.435440f, -0.527778f, -0.621378f, -0.708615f, -0.779992f, -0.837472f, -0.887412f, -0.928280f, -0.960992f, -0.998110f, -1.046834f, -1.099343f, -1.152347f, -1.213052f, -1.274952f, -1.316249f, -1.330774f, -1.328349f, -1.302567f, -1.238211f, -1.148431f, -1.058310f, -0.960029f, -0.838091f, -0.721675f, -0.643318f, -0.563976f, -0.420296f, -0.230992f, -0.067404f}, + { -0.250425f, -0.660993f, -0.861916f, -0.847354f, -0.663762f, -0.342769f, 0.075917f, 0.488389f, 0.753654f, 0.794167f, 0.643546f, 0.387442f, 0.087205f, -0.223353f, -0.496873f, -0.664962f, -0.675562f, -0.527061f, -0.266948f, 0.036108f, 0.319252f, 0.531415f, 0.626600f, 0.573077f, 0.380686f, 0.108230f, -0.168101f, -0.389333f, -0.517617f, -0.528794f, -0.421069f, -0.224730f, 0.009319f, 0.228421f, 0.385471f, 0.444687f, 0.395852f, 0.261516f, 0.084932f, -0.088913f, -0.225266f, -0.304256f, -0.319554f, -0.273259f, -0.175564f, -0.049060f, 0.075661f, 0.173276f, 0.228789f, 0.233471f, 0.188067f, 0.109495f, 0.022104f, -0.058067f, -0.122426f, -0.160617f, -0.165769f, -0.143482f, -0.103837f, -0.051510f, 0.007014f, 0.058136f, 0.093287f, 0.114398f, 0.120649f, 0.105501f, 0.071425f, 0.028778f, -0.021679f, -0.082945f, -0.140051f, -0.169785f, -0.167405f, -0.136951f, -0.070323f, 0.025342f, 0.097572f, 0.097658f, 0.048524f, 0.010072f} + }, + { + { -0.250425f, -0.660993f, -0.861916f, -0.847354f, -0.663762f, -0.342769f, 0.075917f, 0.488389f, 0.753654f, 0.794167f, 0.643546f, 0.387442f, 0.087205f, -0.223353f, -0.496873f, -0.664962f, -0.675562f, -0.527061f, -0.266948f, 0.036108f, 0.319252f, 0.531415f, 0.626600f, 0.573077f, 0.380686f, 0.108230f, -0.168101f, -0.389333f, -0.517617f, -0.528794f, -0.421069f, -0.224730f, 0.009319f, 0.228421f, 0.385471f, 0.444687f, 0.395852f, 0.261516f, 0.084932f, -0.088913f, -0.225266f, -0.304256f, -0.319554f, -0.273259f, -0.175564f, -0.049060f, 0.075661f, 0.173276f, 0.228789f, 0.233471f, 0.188067f, 0.109495f, 0.022104f, -0.058067f, -0.122426f, -0.160617f, -0.165769f, -0.143482f, -0.103837f, -0.051510f, 0.007014f, 0.058136f, 0.093287f, 0.114398f, 0.120649f, 0.105501f, 0.071425f, 0.028778f, -0.021679f, -0.082945f, -0.140051f, -0.169785f, -0.167405f, -0.136951f, -0.070323f, 0.025342f, 0.097572f, 0.097658f, 0.048524f, 0.010072f}, + { 0.043874f, 0.118615f, 0.187170f, 0.267150f, 0.298762f, 0.195948f, -0.001786f, -0.150558f, -0.201169f, -0.249208f, -0.342968f, -0.379815f, -0.276823f, -0.123637f, -0.055321f, -0.064144f, -0.055372f, -0.019931f, -0.024681f, -0.071956f, -0.093125f, -0.072032f, -0.070681f, -0.124387f, -0.190477f, -0.213583f, -0.185140f, -0.129878f, -0.075285f, -0.037892f, -0.009897f, 0.037383f, 0.115172f, 0.192625f, 0.228584f, 0.214650f, 0.172116f, 0.122202f, 0.074293f, 0.031381f, -0.005454f, -0.033813f, -0.050480f, -0.060008f, -0.075967f, -0.106394f, -0.147540f, -0.197695f, -0.263287f, -0.345414f, -0.435440f, -0.527778f, -0.621378f, -0.708615f, -0.779992f, -0.837472f, -0.887412f, -0.928280f, -0.960992f, -0.998110f, -1.046834f, -1.099343f, -1.152347f, -1.213052f, -1.274952f, -1.316249f, -1.330774f, -1.328349f, -1.302567f, -1.238211f, -1.148431f, -1.058310f, -0.960029f, -0.838091f, -0.721675f, -0.643318f, -0.563976f, -0.420296f, -0.230992f, -0.067404f} + }, + { + { -0.008249f, -0.023875f, -0.041979f, -0.063309f, -0.073640f, -0.059262f, -0.011284f, 0.097582f, 0.285477f, 0.486324f, 0.572624f, 0.491726f, 0.316227f, 0.137033f, -0.012156f, -0.105624f, -0.104202f, -0.021615f, 0.074402f, 0.154222f, 0.237747f, 0.305961f, 0.296964f, 0.204183f, 0.092769f, 0.012136f, -0.031471f, -0.026266f, 0.038678f, 0.126072f, 0.180148f, 0.192426f, 0.183756f, 0.147374f, 0.063045f, -0.057919f, -0.184667f, -0.299635f, -0.393907f, -0.460136f, -0.506533f, -0.549402f, -0.588487f, -0.616178f, -0.639266f, -0.663562f, -0.678297f, -0.681604f, -0.692468f, -0.716955f, -0.738071f, -0.751671f, -0.771237f, -0.794008f, -0.808030f, -0.825704f, -0.862898f, -0.903459f, -0.930585f, -0.960504f, -1.001446f, -1.027630f, -1.034152f, -1.055212f, -1.095329f, -1.119803f, -1.134174f, -1.178290f, -1.233939f, -1.250091f, -1.249470f, -1.280087f, -1.296222f, -1.243131f, -1.194568f, -1.207898f, -1.128089f, -0.791051f, -0.344783f, -0.068924f}, + { -0.129176f, -0.372355f, -0.580936f, -0.731519f, -0.765299f, -0.638093f, -0.415763f, -0.262408f, -0.304775f, -0.530180f, -0.811605f, -0.996409f, -0.988773f, -0.810534f, -0.593000f, -0.465223f, -0.444154f, -0.461572f, -0.469589f, -0.460057f, -0.404974f, -0.264243f, -0.062429f, 0.112893f, 0.209151f, 0.254875f, 0.300256f, 0.363823f, 0.447014f, 0.550411f, 0.657817f, 0.738504f, 0.775995f, 0.773071f, 0.734806f, 0.672431f, 0.612396f, 0.573088f, 0.541817f, 0.496000f, 0.432424f, 0.358322f, 0.274224f, 0.183255f, 0.096563f, 0.015492f, -0.070928f, -0.163303f, -0.249973f, -0.330065f, -0.412884f, -0.495910f, -0.569287f, -0.635706f, -0.699812f, -0.749341f, -0.772273f, -0.776809f, -0.771105f, -0.745172f, -0.694274f, -0.633019f, -0.567658f, -0.486467f, -0.391507f, -0.301919f, -0.216594f, -0.116973f, -0.009649f, 0.082575f, 0.165971f, 0.256392f, 0.331306f, 0.367070f, 0.395334f, 0.440161f, 0.436284f, 0.315312f, 0.139811f, 0.028354f} + }, + { + { -0.129176f, -0.372355f, -0.580936f, -0.731519f, -0.765299f, -0.638093f, -0.415763f, -0.262408f, -0.304775f, -0.530180f, -0.811605f, -0.996409f, -0.988773f, -0.810534f, -0.593000f, -0.465223f, -0.444154f, -0.461572f, -0.469589f, -0.460057f, -0.404974f, -0.264243f, -0.062429f, 0.112893f, 0.209151f, 0.254875f, 0.300256f, 0.363823f, 0.447014f, 0.550411f, 0.657817f, 0.738504f, 0.775995f, 0.773071f, 0.734806f, 0.672431f, 0.612396f, 0.573088f, 0.541817f, 0.496000f, 0.432424f, 0.358322f, 0.274224f, 0.183255f, 0.096563f, 0.015492f, -0.070928f, -0.163303f, -0.249973f, -0.330065f, -0.412884f, -0.495910f, -0.569287f, -0.635706f, -0.699812f, -0.749341f, -0.772273f, -0.776809f, -0.771105f, -0.745172f, -0.694274f, -0.633019f, -0.567658f, -0.486467f, -0.391507f, -0.301919f, -0.216594f, -0.116973f, -0.009649f, 0.082575f, 0.165971f, 0.256392f, 0.331306f, 0.367070f, 0.395334f, 0.440161f, 0.436284f, 0.315312f, 0.139811f, 0.028354f}, + { -0.008249f, -0.023875f, -0.041979f, -0.063309f, -0.073640f, -0.059262f, -0.011284f, 0.097582f, 0.285477f, 0.486324f, 0.572624f, 0.491726f, 0.316227f, 0.137033f, -0.012156f, -0.105624f, -0.104202f, -0.021615f, 0.074402f, 0.154222f, 0.237747f, 0.305961f, 0.296964f, 0.204183f, 0.092769f, 0.012136f, -0.031471f, -0.026266f, 0.038678f, 0.126072f, 0.180148f, 0.192426f, 0.183756f, 0.147374f, 0.063045f, -0.057919f, -0.184667f, -0.299635f, -0.393907f, -0.460136f, -0.506533f, -0.549402f, -0.588487f, -0.616178f, -0.639266f, -0.663562f, -0.678297f, -0.681604f, -0.692468f, -0.716955f, -0.738071f, -0.751671f, -0.771237f, -0.794008f, -0.808030f, -0.825704f, -0.862898f, -0.903459f, -0.930585f, -0.960504f, -1.001446f, -1.027630f, -1.034152f, -1.055212f, -1.095329f, -1.119803f, -1.134174f, -1.178290f, -1.233939f, -1.250091f, -1.249470f, -1.280087f, -1.296222f, -1.243131f, -1.194568f, -1.207898f, -1.128089f, -0.791051f, -0.344783f, -0.068924f} + }, + { + { 0.008075f, 0.038401f, 0.092119f, 0.128962f, 0.079637f, -0.065053f, -0.204165f, -0.224635f, -0.140768f, -0.066458f, -0.050504f, -0.028394f, 0.040936f, 0.088066f, 0.037282f, -0.081872f, -0.194521f, -0.289072f, -0.394663f, -0.499173f, -0.562874f, -0.584190f, -0.592102f, -0.595436f, -0.585667f, -0.568122f, -0.553640f, -0.538921f, -0.519114f, -0.497646f, -0.470495f, -0.428155f, -0.379841f, -0.345508f, -0.322485f, -0.290690f, -0.246286f, -0.199763f, -0.151541f, -0.099834f, -0.057672f, -0.034172f, -0.017802f, -0.000878f, 0.004292f, -0.008040f, -0.024761f, -0.042033f, -0.071452f, -0.109073f, -0.134965f, -0.146883f, -0.157322f, -0.162505f, -0.153258f, -0.144070f, -0.152591f, -0.170264f, -0.188683f, -0.224375f, -0.283614f, -0.342228f, -0.390085f, -0.447088f, -0.512027f, -0.555207f, -0.578613f, -0.614251f, -0.655544f, -0.670096f, -0.675523f, -0.709585f, -0.743735f, -0.735534f, -0.731747f, -0.782838f, -0.795910f, -0.638017f, -0.353740f, -0.100737f}, + { -0.185046f, -0.533405f, -0.796105f, -0.894228f, -0.804452f, -0.603356f, -0.412000f, -0.290027f, -0.194076f, -0.045276f, 0.170549f, 0.381975f, 0.509347f, 0.543373f, 0.533437f, 0.514324f, 0.470452f, 0.370026f, 0.210592f, 0.024650f, -0.144992f, -0.270937f, -0.353268f, -0.409676f, -0.449497f, -0.461092f, -0.428614f, -0.351647f, -0.241101f, -0.106882f, 0.039551f, 0.178574f, 0.289123f, 0.359025f, 0.385395f, 0.371418f, 0.325610f, 0.258144f, 0.176512f, 0.088334f, 0.004181f, -0.068701f, -0.130850f, -0.183510f, -0.223524f, -0.249431f, -0.263934f, -0.266307f, -0.251421f, -0.218401f, -0.170386f, -0.106369f, -0.025129f, 0.064373f, 0.148277f, 0.219795f, 0.275208f, 0.305623f, 0.304678f, 0.275767f, 0.221954f, 0.141085f, 0.039338f, -0.065853f, -0.163340f, -0.251323f, -0.320332f, -0.355470f, -0.356285f, -0.330135f, -0.270928f, -0.173746f, -0.060564f, 0.042406f, 0.135600f, 0.213726f, 0.231029f, 0.159392f, 0.057068f, 0.005821f} + }, + { + { -0.185046f, -0.533405f, -0.796105f, -0.894228f, -0.804452f, -0.603356f, -0.412000f, -0.290027f, -0.194076f, -0.045276f, 0.170549f, 0.381975f, 0.509347f, 0.543373f, 0.533437f, 0.514324f, 0.470452f, 0.370026f, 0.210592f, 0.024650f, -0.144992f, -0.270937f, -0.353268f, -0.409676f, -0.449497f, -0.461092f, -0.428614f, -0.351647f, -0.241101f, -0.106882f, 0.039551f, 0.178574f, 0.289123f, 0.359025f, 0.385395f, 0.371418f, 0.325610f, 0.258144f, 0.176512f, 0.088334f, 0.004181f, -0.068701f, -0.130850f, -0.183510f, -0.223524f, -0.249431f, -0.263934f, -0.266307f, -0.251421f, -0.218401f, -0.170386f, -0.106369f, -0.025129f, 0.064373f, 0.148277f, 0.219795f, 0.275208f, 0.305623f, 0.304678f, 0.275767f, 0.221954f, 0.141085f, 0.039338f, -0.065853f, -0.163340f, -0.251323f, -0.320332f, -0.355470f, -0.356285f, -0.330135f, -0.270928f, -0.173746f, -0.060564f, 0.042406f, 0.135600f, 0.213726f, 0.231029f, 0.159392f, 0.057068f, 0.005821f}, + { 0.008075f, 0.038401f, 0.092119f, 0.128962f, 0.079637f, -0.065053f, -0.204165f, -0.224635f, -0.140768f, -0.066458f, -0.050504f, -0.028394f, 0.040936f, 0.088066f, 0.037282f, -0.081872f, -0.194521f, -0.289072f, -0.394663f, -0.499173f, -0.562874f, -0.584190f, -0.592102f, -0.595436f, -0.585667f, -0.568122f, -0.553640f, -0.538921f, -0.519114f, -0.497646f, -0.470495f, -0.428155f, -0.379841f, -0.345508f, -0.322485f, -0.290690f, -0.246286f, -0.199763f, -0.151541f, -0.099834f, -0.057672f, -0.034172f, -0.017802f, -0.000878f, 0.004292f, -0.008040f, -0.024761f, -0.042033f, -0.071452f, -0.109073f, -0.134965f, -0.146883f, -0.157322f, -0.162505f, -0.153258f, -0.144070f, -0.152591f, -0.170264f, -0.188683f, -0.224375f, -0.283614f, -0.342228f, -0.390085f, -0.447088f, -0.512027f, -0.555207f, -0.578613f, -0.614251f, -0.655544f, -0.670096f, -0.675523f, -0.709585f, -0.743735f, -0.735534f, -0.731747f, -0.782838f, -0.795910f, -0.638017f, -0.353740f, -0.100737f} + }, + { + { 0.000904f, 0.019079f, 0.059553f, 0.080705f, 0.034196f, -0.076830f, -0.193142f, -0.258252f, -0.268806f, -0.254990f, -0.228184f, -0.177744f, -0.115561f, -0.086453f, -0.119832f, -0.198441f, -0.290706f, -0.386796f, -0.482507f, -0.555089f, -0.585391f, -0.588459f, -0.595614f, -0.616524f, -0.639482f, -0.657203f, -0.671485f, -0.681113f, -0.683039f, -0.679975f, -0.675099f, -0.665460f, -0.647607f, -0.621543f, -0.584847f, -0.532515f, -0.465996f, -0.394252f, -0.325482f, -0.264963f, -0.217691f, -0.185088f, -0.163233f, -0.150126f, -0.147912f, -0.154002f, -0.160060f, -0.163355f, -0.168022f, -0.173673f, -0.175655f, -0.176533f, -0.183744f, -0.197756f, -0.215649f, -0.241146f, -0.277541f, -0.318350f, -0.357489f, -0.397941f, -0.439603f, -0.473662f, -0.498885f, -0.525211f, -0.553450f, -0.573005f, -0.584023f, -0.595757f, -0.601812f, -0.587350f, -0.558307f, -0.529550f, -0.493088f, -0.438500f, -0.389008f, -0.365560f, -0.332967f, -0.244399f, -0.123587f, -0.032071f}, + { -0.132162f, -0.397236f, -0.634303f, -0.771385f, -0.762505f, -0.658311f, -0.571695f, -0.558140f, -0.559785f, -0.494070f, -0.367521f, -0.255768f, -0.188621f, -0.115450f, 0.010262f, 0.169458f, 0.319455f, 0.446157f, 0.546073f, 0.599271f, 0.595696f, 0.559582f, 0.517646f, 0.465704f, 0.389674f, 0.295832f, 0.197897f, 0.094666f, -0.019874f, -0.140220f, -0.255773f, -0.358086f, -0.435284f, -0.476549f, -0.485983f, -0.475938f, -0.447530f, -0.394402f, -0.321446f, -0.242452f, -0.164819f, -0.091592f, -0.029697f, 0.018115f, 0.059537f, 0.100122f, 0.136881f, 0.171477f, 0.213363f, 0.263443f, 0.310946f, 0.348805f, 0.374651f, 0.378869f, 0.352030f, 0.300800f, 0.237909f, 0.164126f, 0.077292f, -0.014164f, -0.104092f, -0.197998f, -0.293956f, -0.374701f, -0.431205f, -0.469564f, -0.486835f, -0.470926f, -0.428871f, -0.379532f, -0.318676f, -0.231739f, -0.133210f, -0.045037f, 0.047998f, 0.159994f, 0.240253f, 0.223460f, 0.130155f, 0.037254f} + }, + { + { -0.132162f, -0.397236f, -0.634303f, -0.771385f, -0.762505f, -0.658311f, -0.571695f, -0.558140f, -0.559785f, -0.494070f, -0.367521f, -0.255768f, -0.188621f, -0.115450f, 0.010262f, 0.169458f, 0.319455f, 0.446157f, 0.546073f, 0.599271f, 0.595696f, 0.559582f, 0.517646f, 0.465704f, 0.389674f, 0.295832f, 0.197897f, 0.094666f, -0.019874f, -0.140220f, -0.255773f, -0.358086f, -0.435284f, -0.476549f, -0.485983f, -0.475938f, -0.447530f, -0.394402f, -0.321446f, -0.242452f, -0.164819f, -0.091592f, -0.029697f, 0.018115f, 0.059537f, 0.100122f, 0.136881f, 0.171477f, 0.213363f, 0.263443f, 0.310946f, 0.348805f, 0.374651f, 0.378869f, 0.352030f, 0.300800f, 0.237909f, 0.164126f, 0.077292f, -0.014164f, -0.104092f, -0.197998f, -0.293956f, -0.374701f, -0.431205f, -0.469564f, -0.486835f, -0.470926f, -0.428871f, -0.379532f, -0.318676f, -0.231739f, -0.133210f, -0.045037f, 0.047998f, 0.159994f, 0.240253f, 0.223460f, 0.130155f, 0.037254f}, + { 0.000904f, 0.019079f, 0.059553f, 0.080705f, 0.034196f, -0.076830f, -0.193142f, -0.258252f, -0.268806f, -0.254990f, -0.228184f, -0.177744f, -0.115561f, -0.086453f, -0.119832f, -0.198441f, -0.290706f, -0.386796f, -0.482507f, -0.555089f, -0.585391f, -0.588459f, -0.595614f, -0.616524f, -0.639482f, -0.657203f, -0.671485f, -0.681113f, -0.683039f, -0.679975f, -0.675099f, -0.665460f, -0.647607f, -0.621543f, -0.584847f, -0.532515f, -0.465996f, -0.394252f, -0.325482f, -0.264963f, -0.217691f, -0.185088f, -0.163233f, -0.150126f, -0.147912f, -0.154002f, -0.160060f, -0.163355f, -0.168022f, -0.173673f, -0.175655f, -0.176533f, -0.183744f, -0.197756f, -0.215649f, -0.241146f, -0.277541f, -0.318350f, -0.357489f, -0.397941f, -0.439603f, -0.473662f, -0.498885f, -0.525211f, -0.553450f, -0.573005f, -0.584023f, -0.595757f, -0.601812f, -0.587350f, -0.558307f, -0.529550f, -0.493088f, -0.438500f, -0.389008f, -0.365560f, -0.332967f, -0.244399f, -0.123587f, -0.032071f} + } +}; +const float *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float *CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; + +/********************** Sample Rate = 48000 **********************/ + +const float CRendBin_HOA3_HRIR_latency_s_48kHz = 0.001333333319053f; +const int16_t CRendBin_HOA3_HRIR_max_num_iterations_48kHz = 2; +const uint16_t CRendBin_HOA3_HRIR_num_iterations_48kHz[16][BINAURAL_CHANNELS]={{2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2} }; +const uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS] = {0, 0}; +const uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[16][BINAURAL_CHANNELS][2]={{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}},{{240, 240},{240, 240}}}; +const uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz = 0; +const float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[16]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; +const uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][BINAURAL_CHANNELS][480]={ + { + {-0.007743f, -0.007558f, -0.007195f, -0.006666f, -0.005988f, -0.005184f, -0.004281f, -0.003308f, -0.002297f, -0.001282f, -0.000295f, 0.000632f, 0.001470f, 0.002193f, 0.002779f, 0.003212f, 0.003480f, 0.003577f, 0.003506f, 0.003272f, 0.002887f, 0.002371f, 0.001744f, 0.001033f, 0.000266f, -0.000524f, -0.001308f, -0.002054f, -0.002731f, -0.003314f, -0.003778f, -0.004105f, -0.004278f, -0.004290f, -0.004136f, -0.003818f, -0.003346f, -0.002730f, -0.001990f, -0.001147f, -0.000226f, 0.000744f, 0.001734f, 0.002716f, 0.003658f, 0.004535f, 0.005321f, 0.005993f, 0.006535f, 0.006932f, 0.007177f, 0.007266f, 0.007200f, 0.006986f, 0.006636f, 0.006164f, 0.005590f, 0.004934f, 0.004220f, 0.003472f, 0.002715f, 0.001972f, 0.001265f, 0.000614f, 0.000036f, -0.000456f, -0.000852f, -0.001146f, -0.001339f, -0.001431f, -0.001430f, -0.001345f, -0.001189f, -0.000977f, -0.000725f, -0.000450f, -0.000171f, 0.000097f, 0.000338f, 0.000538f, 0.000686f, 0.000774f, 0.000798f, 0.000755f, 0.000647f, 0.000478f, 0.000258f, -0.000005f, -0.000297f, -0.000604f, -0.000913f, -0.001206f, -0.001471f, -0.001692f, -0.001859f, -0.001960f, + -0.001990f, -0.001944f, -0.001821f, -0.001623f, -0.001356f, -0.001028f, -0.000650f, -0.000236f, 0.000198f, 0.000637f, 0.001062f, 0.001458f, 0.001807f, 0.002094f, 0.002307f, 0.002436f, 0.002471f, 0.002410f, 0.002250f, 0.001996f, 0.001651f, 0.001227f, 0.000734f, 0.000187f, -0.000397f, -0.001000f, -0.001604f, -0.002189f, -0.002738f, -0.003233f, -0.003660f, -0.004005f, -0.004258f, -0.004412f, -0.004464f, -0.004414f, -0.004263f, -0.004019f, -0.003691f, -0.003290f, -0.002831f, -0.002328f, -0.001799f, -0.001260f, -0.000729f, -0.000219f, 0.000253f, 0.000676f, 0.001039f, 0.001336f, 0.001560f, 0.001710f, 0.001787f, 0.001795f, 0.001740f, 0.001631f, 0.001477f, 0.001291f, 0.001084f, 0.000869f, 0.000659f, 0.000464f, 0.000294f, 0.000159f, 0.000065f, 0.000015f, 0.000012f, 0.000054f, 0.000139f, 0.000261f, 0.000413f, 0.000585f, 0.000768f, 0.000951f, 0.001122f, 0.001271f, 0.001387f, 0.001462f, 0.001487f, 0.001458f, 0.001371f, 0.001226f, 0.001024f, 0.000770f, 0.000469f, 0.000130f, -0.000237f, -0.000619f, -0.001004f, -0.001379f, -0.001731f, -0.002048f, -0.002318f, -0.002532f, -0.002681f, -0.002760f, + -0.002766f, -0.002698f, -0.002559f, -0.002353f, -0.002087f, -0.001772f, -0.001418f, -0.001038f, -0.000646f, -0.000256f, 0.000117f, 0.000461f, 0.000764f, 0.001013f, 0.001202f, 0.001322f, 0.001371f, 0.001348f, 0.001254f, 0.001093f, 0.000873f, 0.000602f, 0.000291f, -0.000048f, -0.000400f, -0.000753f, -0.001092f, -0.001406f, -0.001680f, -0.001907f, -0.002076f, -0.002182f, -0.002222f, -0.002195f, -0.002102f, -0.001947f, -0.001739f, -0.001485f, -0.001196f, -0.000885f, -0.000563f, -0.000245f, 0.000056f, 0.000329f, 0.000561f, 0.000745f, 0.000871f, 0.000936f, 0.874744f, 0.116038f, -0.662441f, -0.827243f, -0.402995f, 0.289219f, 0.777716f, 0.685468f, 0.185590f, -0.493054f, -0.845543f, -0.701112f, -0.169822f, 0.554816f, 0.803711f, 0.562077f, -0.069675f, -0.622495f, -0.781014f, -0.389092f, 0.215356f, 0.699522f, 0.690218f, 0.204725f, -0.389698f, -0.710518f, -0.532733f, -0.008668f, 0.516164f, 0.684794f, 0.399502f, -0.157365f, -0.611437f, -0.649130f, -0.248718f, 0.314094f, 0.667438f, 0.566124f, 0.102008f, -0.423539f, -0.611442f, -0.605219f, -0.119896f, 0.439049f, 0.716128f, 0.472981f, -0.083944f, -0.590980f, + -0.676140f, -0.304134f, 0.279336f, 0.670561f, 0.602354f, 0.111260f, -0.451186f, -0.697564f, -0.455095f, 0.073426f, 0.529809f, 0.615436f, 0.268620f, -0.258841f, -0.598350f, -0.541586f, -0.093143f, 0.452635f, 0.668540f, 0.437278f, -0.106588f, -0.567294f, -0.653630f, -0.294182f, 0.267007f, 0.638346f, 0.582978f, 0.123374f, -0.429176f, -0.700189f, -0.473598f, 0.049201f, 0.530224f, 0.600061f, 0.268114f, -0.222115f, -0.603516f, -0.549236f, -0.121190f, 0.409789f, 0.654206f, 0.450342f, -0.058339f, -0.539424f, -0.638139f, -0.303548f, 0.210202f, 0.613552f, 0.586286f, 0.181245f, -0.311242f, -0.603267f, -0.500979f, -0.070766f, 0.392784f, 0.575899f, 0.388449f, -0.079622f, -0.471543f, -0.550515f, -0.252483f, 0.225112f, 0.560233f, 0.501195f, 0.088979f, -0.389568f, -0.616564f, -0.388516f, 0.087457f, 0.516491f, 0.603478f, 0.270287f, -0.264257f, -0.628381f, -0.544418f, -0.085427f, 0.417717f, 0.625695f, 0.396777f, -0.104381f, -0.518951f, -0.566067f, -0.223737f, 0.251795f, 0.549033f, 0.465643f, 0.054492f, -0.371032f, -0.544392f, -0.348233f, 0.081606f, 0.465192f, 0.525950f, 0.228049f, -0.225864f, -0.513316f, + -0.444995f, -0.072351f, 0.338365f, 0.508348f, 0.313193f, -0.092672f, -0.444725f, -0.474146f, -0.170556f, 0.255870f, 0.483517f, 0.367405f, -0.019046f, -0.360357f, -0.458396f, -0.219427f, 0.183072f, 0.464582f, 0.399087f, 0.054445f, -0.355513f, -0.503123f, -0.266677f, 0.157341f, 0.472099f, 0.437246f, 0.064651f, -0.376213f, -0.543538f, -0.285626f, 0.200362f, 0.539895f, 0.464228f, 0.014684f, -0.447591f, -0.531674f, -0.222697f, 0.271333f, 0.544990f, 0.362913f, -0.136141f, -0.527405f, -0.465809f, 0.013651f, 0.482914f, 0.505125f, 0.046413f, -0.453673f, -0.499113f, -0.044012f, 0.432176f, 0.428347f, -0.038277f, -0.425444f, -0.285800f, 0.182464f, 0.345587f, -0.006216f, -0.239016f, -0.030037f, 0.092603f, 0.007249f, -0.019244f, -0.003579f, -0.000623f, -0.001458f, -0.001441f, -0.001327f, -0.002820f, -0.002466f, -0.001718f, -0.002159f, -0.001581f, -0.001010f, -0.001896f, -0.001492f, -0.002548f, -0.001642f, -0.001386f, -0.001124f, -0.000852f, -0.002251f, -0.001420f, -0.000767f, -0.002070f, -0.002048f, -0.001322f, -0.001390f, -0.001647f, -0.001369f, -0.002590f, -0.001041f, -0.001429f, -0.001899f, -0.000935f, -0.002037f}, + {-0.007743f, -0.007558f, -0.007195f, -0.006666f, -0.005988f, -0.005184f, -0.004281f, -0.003308f, -0.002297f, -0.001282f, -0.000295f, 0.000632f, 0.001470f, 0.002193f, 0.002779f, 0.003212f, 0.003480f, 0.003577f, 0.003506f, 0.003272f, 0.002887f, 0.002371f, 0.001744f, 0.001033f, 0.000266f, -0.000524f, -0.001308f, -0.002054f, -0.002731f, -0.003314f, -0.003778f, -0.004105f, -0.004278f, -0.004290f, -0.004136f, -0.003818f, -0.003346f, -0.002730f, -0.001990f, -0.001147f, -0.000226f, 0.000744f, 0.001734f, 0.002716f, 0.003658f, 0.004535f, 0.005321f, 0.005993f, 0.006535f, 0.006932f, 0.007177f, 0.007266f, 0.007200f, 0.006986f, 0.006636f, 0.006164f, 0.005590f, 0.004934f, 0.004220f, 0.003472f, 0.002715f, 0.001972f, 0.001265f, 0.000614f, 0.000036f, -0.000456f, -0.000852f, -0.001146f, -0.001339f, -0.001431f, -0.001430f, -0.001345f, -0.001189f, -0.000977f, -0.000725f, -0.000450f, -0.000171f, 0.000097f, 0.000338f, 0.000538f, 0.000686f, 0.000774f, 0.000798f, 0.000755f, 0.000647f, 0.000478f, 0.000258f, -0.000005f, -0.000297f, -0.000604f, -0.000913f, -0.001206f, -0.001471f, -0.001692f, -0.001859f, -0.001960f, + -0.001990f, -0.001944f, -0.001821f, -0.001623f, -0.001356f, -0.001028f, -0.000650f, -0.000236f, 0.000198f, 0.000637f, 0.001062f, 0.001458f, 0.001807f, 0.002094f, 0.002307f, 0.002436f, 0.002471f, 0.002410f, 0.002250f, 0.001996f, 0.001651f, 0.001227f, 0.000734f, 0.000187f, -0.000397f, -0.001000f, -0.001604f, -0.002189f, -0.002738f, -0.003233f, -0.003660f, -0.004005f, -0.004258f, -0.004412f, -0.004464f, -0.004414f, -0.004263f, -0.004019f, -0.003691f, -0.003290f, -0.002831f, -0.002328f, -0.001799f, -0.001260f, -0.000729f, -0.000219f, 0.000253f, 0.000676f, 0.001039f, 0.001336f, 0.001560f, 0.001710f, 0.001787f, 0.001795f, 0.001740f, 0.001631f, 0.001477f, 0.001291f, 0.001084f, 0.000869f, 0.000659f, 0.000464f, 0.000294f, 0.000159f, 0.000065f, 0.000015f, 0.000012f, 0.000054f, 0.000139f, 0.000261f, 0.000413f, 0.000585f, 0.000768f, 0.000951f, 0.001122f, 0.001271f, 0.001387f, 0.001462f, 0.001487f, 0.001458f, 0.001371f, 0.001226f, 0.001024f, 0.000770f, 0.000469f, 0.000130f, -0.000237f, -0.000619f, -0.001004f, -0.001379f, -0.001731f, -0.002048f, -0.002318f, -0.002532f, -0.002681f, -0.002760f, + -0.002766f, -0.002698f, -0.002559f, -0.002353f, -0.002087f, -0.001772f, -0.001418f, -0.001038f, -0.000646f, -0.000256f, 0.000117f, 0.000461f, 0.000764f, 0.001013f, 0.001202f, 0.001322f, 0.001371f, 0.001348f, 0.001254f, 0.001093f, 0.000873f, 0.000602f, 0.000291f, -0.000048f, -0.000400f, -0.000753f, -0.001092f, -0.001406f, -0.001680f, -0.001907f, -0.002076f, -0.002182f, -0.002222f, -0.002195f, -0.002102f, -0.001947f, -0.001739f, -0.001485f, -0.001196f, -0.000885f, -0.000563f, -0.000245f, 0.000056f, 0.000329f, 0.000561f, 0.000745f, 0.000871f, 0.000936f, 0.874744f, 0.116038f, -0.662441f, -0.827243f, -0.402995f, 0.289219f, 0.777716f, 0.685468f, 0.185590f, -0.493054f, -0.845543f, -0.701112f, -0.169822f, 0.554816f, 0.803711f, 0.562077f, -0.069675f, -0.622495f, -0.781014f, -0.389092f, 0.215356f, 0.699522f, 0.690218f, 0.204725f, -0.389698f, -0.710518f, -0.532733f, -0.008668f, 0.516164f, 0.684794f, 0.399502f, -0.157365f, -0.611437f, -0.649130f, -0.248718f, 0.314094f, 0.667438f, 0.566124f, 0.102008f, -0.423539f, -0.611442f, -0.605219f, -0.119896f, 0.439049f, 0.716128f, 0.472981f, -0.083944f, -0.590980f, + -0.676140f, -0.304134f, 0.279336f, 0.670561f, 0.602354f, 0.111260f, -0.451186f, -0.697564f, -0.455095f, 0.073426f, 0.529809f, 0.615436f, 0.268620f, -0.258841f, -0.598350f, -0.541586f, -0.093143f, 0.452635f, 0.668540f, 0.437278f, -0.106588f, -0.567294f, -0.653630f, -0.294182f, 0.267007f, 0.638346f, 0.582978f, 0.123374f, -0.429176f, -0.700189f, -0.473598f, 0.049201f, 0.530224f, 0.600061f, 0.268114f, -0.222115f, -0.603516f, -0.549236f, -0.121190f, 0.409789f, 0.654206f, 0.450342f, -0.058339f, -0.539424f, -0.638139f, -0.303548f, 0.210202f, 0.613552f, 0.586286f, 0.181245f, -0.311242f, -0.603267f, -0.500979f, -0.070766f, 0.392784f, 0.575899f, 0.388449f, -0.079622f, -0.471543f, -0.550515f, -0.252483f, 0.225112f, 0.560233f, 0.501195f, 0.088979f, -0.389568f, -0.616564f, -0.388516f, 0.087457f, 0.516491f, 0.603478f, 0.270287f, -0.264257f, -0.628381f, -0.544418f, -0.085427f, 0.417717f, 0.625695f, 0.396777f, -0.104381f, -0.518951f, -0.566067f, -0.223737f, 0.251795f, 0.549033f, 0.465643f, 0.054492f, -0.371032f, -0.544392f, -0.348233f, 0.081606f, 0.465192f, 0.525950f, 0.228049f, -0.225864f, -0.513316f, + -0.444995f, -0.072351f, 0.338365f, 0.508348f, 0.313193f, -0.092672f, -0.444725f, -0.474146f, -0.170556f, 0.255870f, 0.483517f, 0.367405f, -0.019046f, -0.360357f, -0.458396f, -0.219427f, 0.183072f, 0.464582f, 0.399087f, 0.054445f, -0.355513f, -0.503123f, -0.266677f, 0.157341f, 0.472099f, 0.437246f, 0.064651f, -0.376213f, -0.543538f, -0.285626f, 0.200362f, 0.539895f, 0.464228f, 0.014684f, -0.447591f, -0.531674f, -0.222697f, 0.271333f, 0.544990f, 0.362913f, -0.136141f, -0.527405f, -0.465809f, 0.013651f, 0.482914f, 0.505125f, 0.046413f, -0.453673f, -0.499113f, -0.044012f, 0.432176f, 0.428347f, -0.038277f, -0.425444f, -0.285800f, 0.182464f, 0.345587f, -0.006216f, -0.239016f, -0.030037f, 0.092603f, 0.007249f, -0.019244f, -0.003579f, -0.000623f, -0.001458f, -0.001441f, -0.001327f, -0.002820f, -0.002466f, -0.001718f, -0.002159f, -0.001581f, -0.001010f, -0.001896f, -0.001492f, -0.002548f, -0.001642f, -0.001386f, -0.001124f, -0.000852f, -0.002251f, -0.001420f, -0.000767f, -0.002070f, -0.002048f, -0.001322f, -0.001390f, -0.001647f, -0.001369f, -0.002590f, -0.001041f, -0.001429f, -0.001899f, -0.000935f, -0.002037f} + }, + { + {-0.000037f, -0.000125f, -0.000295f, -0.000533f, -0.000818f, -0.001126f, -0.001426f, -0.001686f, -0.001873f, -0.001953f, -0.001893f, -0.001665f, -0.001246f, -0.000616f, 0.000234f, 0.001309f, 0.002601f, 0.004098f, 0.005777f, 0.007606f, 0.009548f, 0.011558f, 0.013587f, 0.015580f, 0.017483f, 0.019242f, 0.020802f, 0.022115f, 0.023135f, 0.023826f, 0.024158f, 0.024112f, 0.023679f, 0.022860f, 0.021667f, 0.020125f, 0.018265f, 0.016132f, 0.013774f, 0.011251f, 0.008623f, 0.005956f, 0.003315f, 0.000767f, -0.001627f, -0.003810f, -0.005730f, -0.007346f, -0.008623f, -0.009538f, -0.010079f, -0.010244f, -0.010044f, -0.009498f, -0.008635f, -0.007496f, -0.006125f, -0.004574f, -0.002898f, -0.001155f, 0.000596f, 0.002300f, 0.003903f, 0.005356f, 0.006618f, 0.007653f, 0.008436f, 0.008949f, 0.009183f, 0.009140f, 0.008829f, 0.008268f, 0.007483f, 0.006506f, 0.005372f, 0.004123f, 0.002800f, 0.001448f, 0.000107f, -0.001182f, -0.002383f, -0.003463f, -0.004396f, -0.005161f, -0.005746f, -0.006142f, -0.006349f, -0.006372f, -0.006224f, -0.005920f, -0.005481f, -0.004930f, -0.004295f, -0.003601f, -0.002875f, -0.002144f, + -0.001432f, -0.000759f, -0.000144f, 0.000400f, 0.000863f, 0.001239f, 0.001527f, 0.001729f, 0.001852f, 0.001905f, 0.001897f, 0.001844f, 0.001757f, 0.001651f, 0.001538f, 0.001430f, 0.001336f, 0.001264f, 0.001219f, 0.001201f, 0.001209f, 0.001240f, 0.001287f, 0.001341f, 0.001392f, 0.001429f, 0.001440f, 0.001414f, 0.001341f, 0.001213f, 0.001024f, 0.000769f, 0.000449f, 0.000067f, -0.000372f, -0.000859f, -0.001380f, -0.001922f, -0.002467f, -0.002996f, -0.003492f, -0.003934f, -0.004305f, -0.004588f, -0.004769f, -0.004837f, -0.004783f, -0.004606f, -0.004304f, -0.003885f, -0.003356f, -0.002733f, -0.002032f, -0.001275f, -0.000484f, 0.000315f, 0.001096f, 0.001834f, 0.002503f, 0.003081f, 0.003548f, 0.003887f, 0.004087f, 0.004138f, 0.004040f, 0.003796f, 0.003412f, 0.002903f, 0.002285f, 0.001582f, 0.000816f, 0.000016f, -0.000791f, -0.001574f, -0.002307f, -0.002963f, -0.003518f, -0.003951f, -0.004247f, -0.004395f, -0.004389f, -0.004228f, -0.003918f, -0.003469f, -0.002898f, -0.002223f, -0.001468f, -0.000659f, 0.000175f, 0.001005f, 0.001803f, 0.002542f, 0.003197f, 0.003745f, 0.004170f, 0.004457f, + 0.004599f, 0.004593f, 0.004441f, 0.004153f, 0.003740f, 0.003220f, 0.002614f, 0.001946f, 0.001242f, 0.000529f, -0.000165f, -0.000816f, -0.001399f, -0.001893f, -0.002282f, -0.002551f, -0.002692f, -0.002704f, -0.002586f, -0.002347f, -0.001998f, -0.001555f, -0.001036f, -0.000465f, 0.000136f, 0.000741f, 0.001325f, 0.001865f, 0.002340f, 0.002729f, 0.003019f, 0.003197f, 0.003258f, 0.003199f, 0.003023f, 0.002738f, 0.002356f, 0.001893f, 0.001368f, 0.000803f, 0.000221f, -0.000355f, -0.000900f, -0.001394f, -0.001815f, -0.002146f, -0.002375f, -0.002492f, 0.102067f, 0.340374f, 0.253576f, -0.392824f, -0.863480f, -0.541285f, 0.348747f, 0.908338f, 0.675127f, 0.029763f, -0.332153f, -0.699319f, -0.237615f, 0.263874f, 0.599313f, 0.464551f, 0.108943f, -0.429287f, -0.590275f, -0.410124f, 0.075999f, 0.451859f, 0.602381f, 0.261955f, -0.272532f, -0.611835f, -0.494864f, -0.123053f, 0.374729f, 0.621529f, 0.458242f, 0.034874f, -0.487088f, -0.663934f, -0.416264f, 0.141788f, 0.610468f, 0.748296f, 0.313634f, -0.331232f, -0.814857f, -0.565392f, 0.019484f, 0.617619f, 0.797305f, 0.434767f, -0.248637f, -0.751056f, + -0.724588f, -0.188109f, 0.430504f, 0.771733f, 0.576749f, 0.008453f, -0.604160f, -0.760334f, -0.426276f, 0.190034f, 0.626999f, 0.665805f, 0.215852f, -0.370023f, -0.714810f, -0.578496f, -0.065875f, 0.452677f, 0.808784f, 0.610411f, -0.009182f, -0.639069f, -0.817950f, -0.473376f, 0.228548f, 0.746920f, 0.794849f, 0.274199f, -0.440060f, -0.846523f, -0.713642f, -0.056773f, 0.601525f, 0.786555f, 0.464751f, -0.138588f, -0.713334f, -0.747887f, -0.263577f, 0.412564f, 0.819784f, 0.649608f, 0.052727f, -0.553307f, -0.819208f, -0.502275f, 0.100429f, 0.679034f, 0.756242f, 0.347214f, -0.301781f, -0.727920f, -0.654618f, -0.125292f, 0.484910f, 0.738531f, 0.520485f, -0.083904f, -0.617421f, -0.729817f, -0.287874f, 0.330201f, 0.740371f, 0.602818f, 0.067640f, -0.527236f, -0.755411f, -0.426334f, 0.208118f, 0.688928f, 0.733810f, 0.282400f, -0.391717f, -0.764435f, -0.614978f, -0.059433f, 0.532077f, 0.757324f, 0.440711f, -0.155543f, -0.625442f, -0.635152f, -0.221708f, 0.327142f, 0.664040f, 0.523697f, 0.026158f, -0.479470f, -0.651830f, -0.387733f, 0.140806f, 0.584307f, 0.618295f, 0.236836f, -0.300408f, -0.633192f, + -0.514642f, -0.027482f, 0.456828f, 0.622653f, 0.365466f, -0.159245f, -0.572755f, -0.570376f, -0.176307f, 0.353824f, 0.612098f, 0.441220f, -0.055421f, -0.467380f, -0.571616f, -0.254627f, 0.252806f, 0.617633f, 0.502197f, 0.048927f, -0.469973f, -0.648555f, -0.325167f, 0.222546f, 0.618981f, 0.552694f, 0.073944f, -0.489228f, -0.693035f, -0.373494f, 0.256126f, 0.688764f, 0.589141f, 0.010161f, -0.569339f, -0.768008f, -0.278704f, 0.453206f, 0.830687f, 0.518906f, -0.222511f, -0.778247f, -0.654275f, 0.052124f, 0.715401f, 0.722228f, 0.066974f, -0.638539f, -0.706863f, -0.078273f, 0.610052f, 0.635849f, -0.009045f, -0.598320f, -0.447012f, 0.239234f, 0.532691f, 0.030543f, -0.354172f, -0.057609f, 0.147463f, 0.024064f, -0.022992f, -0.000013f, 0.004885f, 0.003122f, 0.002322f, 0.001677f, 0.002744f, 0.004802f, 0.004419f, 0.003188f, 0.002682f, 0.001137f, 0.001908f, 0.002869f, 0.003807f, 0.001619f, 0.002752f, 0.001867f, 0.003558f, 0.003116f, 0.000532f, 0.003231f, 0.001722f, 0.002239f, 0.004198f, 0.001317f, 0.004158f, 0.002167f, 0.003823f, 0.002629f, 0.002598f, 0.003009f, 0.002802f, 0.005357f}, + {0.000037f, 0.000125f, 0.000295f, 0.000533f, 0.000818f, 0.001126f, 0.001426f, 0.001686f, 0.001873f, 0.001953f, 0.001893f, 0.001665f, 0.001246f, 0.000616f, -0.000234f, -0.001309f, -0.002601f, -0.004098f, -0.005777f, -0.007606f, -0.009548f, -0.011558f, -0.013587f, -0.015580f, -0.017483f, -0.019242f, -0.020802f, -0.022115f, -0.023135f, -0.023826f, -0.024158f, -0.024112f, -0.023679f, -0.022860f, -0.021667f, -0.020125f, -0.018265f, -0.016132f, -0.013774f, -0.011251f, -0.008623f, -0.005956f, -0.003315f, -0.000767f, 0.001627f, 0.003810f, 0.005730f, 0.007346f, 0.008623f, 0.009538f, 0.010079f, 0.010244f, 0.010044f, 0.009498f, 0.008635f, 0.007496f, 0.006125f, 0.004574f, 0.002898f, 0.001155f, -0.000596f, -0.002300f, -0.003903f, -0.005356f, -0.006618f, -0.007653f, -0.008436f, -0.008949f, -0.009183f, -0.009140f, -0.008829f, -0.008268f, -0.007483f, -0.006506f, -0.005372f, -0.004123f, -0.002800f, -0.001448f, -0.000107f, 0.001182f, 0.002383f, 0.003463f, 0.004396f, 0.005161f, 0.005746f, 0.006142f, 0.006349f, 0.006372f, 0.006224f, 0.005920f, 0.005481f, 0.004930f, 0.004295f, 0.003601f, 0.002875f, 0.002144f, + 0.001432f, 0.000759f, 0.000144f, -0.000400f, -0.000863f, -0.001239f, -0.001527f, -0.001729f, -0.001852f, -0.001905f, -0.001897f, -0.001844f, -0.001757f, -0.001651f, -0.001538f, -0.001430f, -0.001336f, -0.001264f, -0.001219f, -0.001201f, -0.001209f, -0.001240f, -0.001287f, -0.001341f, -0.001392f, -0.001429f, -0.001440f, -0.001414f, -0.001341f, -0.001213f, -0.001024f, -0.000769f, -0.000449f, -0.000067f, 0.000372f, 0.000859f, 0.001380f, 0.001922f, 0.002467f, 0.002996f, 0.003492f, 0.003934f, 0.004305f, 0.004588f, 0.004769f, 0.004837f, 0.004783f, 0.004606f, 0.004304f, 0.003885f, 0.003356f, 0.002733f, 0.002032f, 0.001275f, 0.000484f, -0.000315f, -0.001096f, -0.001834f, -0.002503f, -0.003081f, -0.003548f, -0.003887f, -0.004087f, -0.004138f, -0.004040f, -0.003796f, -0.003412f, -0.002903f, -0.002285f, -0.001582f, -0.000816f, -0.000016f, 0.000791f, 0.001574f, 0.002307f, 0.002963f, 0.003518f, 0.003951f, 0.004247f, 0.004395f, 0.004389f, 0.004228f, 0.003918f, 0.003469f, 0.002898f, 0.002223f, 0.001468f, 0.000659f, -0.000175f, -0.001005f, -0.001803f, -0.002542f, -0.003197f, -0.003745f, -0.004170f, -0.004457f, + -0.004599f, -0.004593f, -0.004441f, -0.004153f, -0.003740f, -0.003220f, -0.002614f, -0.001946f, -0.001242f, -0.000529f, 0.000165f, 0.000816f, 0.001399f, 0.001893f, 0.002282f, 0.002551f, 0.002692f, 0.002704f, 0.002586f, 0.002347f, 0.001998f, 0.001555f, 0.001036f, 0.000465f, -0.000136f, -0.000741f, -0.001325f, -0.001865f, -0.002340f, -0.002729f, -0.003019f, -0.003197f, -0.003258f, -0.003199f, -0.003023f, -0.002738f, -0.002356f, -0.001893f, -0.001368f, -0.000803f, -0.000221f, 0.000355f, 0.000900f, 0.001394f, 0.001815f, 0.002146f, 0.002375f, 0.002492f, -0.102067f, -0.340374f, -0.253576f, 0.392824f, 0.863480f, 0.541285f, -0.348747f, -0.908338f, -0.675127f, -0.029763f, 0.332153f, 0.699319f, 0.237615f, -0.263874f, -0.599313f, -0.464551f, -0.108943f, 0.429287f, 0.590275f, 0.410124f, -0.075999f, -0.451859f, -0.602381f, -0.261955f, 0.272532f, 0.611835f, 0.494864f, 0.123053f, -0.374729f, -0.621529f, -0.458242f, -0.034874f, 0.487088f, 0.663934f, 0.416264f, -0.141788f, -0.610468f, -0.748296f, -0.313634f, 0.331232f, 0.814857f, 0.565392f, -0.019484f, -0.617619f, -0.797305f, -0.434767f, 0.248637f, 0.751056f, + 0.724588f, 0.188109f, -0.430504f, -0.771733f, -0.576749f, -0.008453f, 0.604160f, 0.760334f, 0.426276f, -0.190034f, -0.626999f, -0.665805f, -0.215852f, 0.370023f, 0.714810f, 0.578496f, 0.065875f, -0.452677f, -0.808784f, -0.610411f, 0.009182f, 0.639069f, 0.817950f, 0.473376f, -0.228548f, -0.746920f, -0.794849f, -0.274199f, 0.440060f, 0.846523f, 0.713642f, 0.056773f, -0.601525f, -0.786555f, -0.464751f, 0.138588f, 0.713334f, 0.747887f, 0.263577f, -0.412564f, -0.819784f, -0.649608f, -0.052727f, 0.553307f, 0.819208f, 0.502275f, -0.100429f, -0.679034f, -0.756242f, -0.347214f, 0.301781f, 0.727920f, 0.654618f, 0.125292f, -0.484910f, -0.738531f, -0.520485f, 0.083904f, 0.617421f, 0.729817f, 0.287874f, -0.330201f, -0.740371f, -0.602818f, -0.067640f, 0.527236f, 0.755411f, 0.426334f, -0.208118f, -0.688928f, -0.733810f, -0.282400f, 0.391717f, 0.764435f, 0.614978f, 0.059433f, -0.532077f, -0.757324f, -0.440711f, 0.155543f, 0.625442f, 0.635152f, 0.221708f, -0.327142f, -0.664040f, -0.523697f, -0.026158f, 0.479470f, 0.651830f, 0.387733f, -0.140806f, -0.584307f, -0.618295f, -0.236836f, 0.300408f, 0.633192f, + 0.514642f, 0.027482f, -0.456828f, -0.622653f, -0.365466f, 0.159245f, 0.572755f, 0.570376f, 0.176307f, -0.353824f, -0.612098f, -0.441220f, 0.055421f, 0.467380f, 0.571616f, 0.254627f, -0.252806f, -0.617633f, -0.502197f, -0.048927f, 0.469973f, 0.648555f, 0.325167f, -0.222546f, -0.618981f, -0.552694f, -0.073944f, 0.489228f, 0.693035f, 0.373494f, -0.256126f, -0.688764f, -0.589141f, -0.010161f, 0.569339f, 0.768008f, 0.278704f, -0.453206f, -0.830687f, -0.518906f, 0.222511f, 0.778247f, 0.654275f, -0.052124f, -0.715401f, -0.722228f, -0.066974f, 0.638539f, 0.706863f, 0.078273f, -0.610052f, -0.635849f, 0.009045f, 0.598320f, 0.447012f, -0.239234f, -0.532691f, -0.030543f, 0.354172f, 0.057609f, -0.147463f, -0.024064f, 0.022992f, 0.000013f, -0.004885f, -0.003122f, -0.002322f, -0.001677f, -0.002744f, -0.004802f, -0.004419f, -0.003188f, -0.002682f, -0.001137f, -0.001908f, -0.002869f, -0.003807f, -0.001619f, -0.002752f, -0.001867f, -0.003558f, -0.003116f, -0.000532f, -0.003231f, -0.001722f, -0.002239f, -0.004198f, -0.001317f, -0.004158f, -0.002167f, -0.003823f, -0.002629f, -0.002598f, -0.003009f, -0.002802f, -0.005357f} + }, + { + {0.057990f, 0.057551f, 0.056676f, 0.055371f, 0.053644f, 0.051507f, 0.048977f, 0.046072f, 0.042817f, 0.039239f, 0.035373f, 0.031256f, 0.026931f, 0.022447f, 0.017856f, 0.013215f, 0.008585f, 0.004028f, -0.000390f, -0.004604f, -0.008549f, -0.012161f, -0.015382f, -0.018157f, -0.020438f, -0.022185f, -0.023367f, -0.023963f, -0.023964f, -0.023372f, -0.022202f, -0.020480f, -0.018246f, -0.015550f, -0.012453f, -0.009027f, -0.005348f, -0.001502f, 0.002422f, 0.006333f, 0.010141f, 0.013758f, 0.017100f, 0.020090f, 0.022660f, 0.024752f, 0.026322f, 0.027338f, 0.027781f, 0.027647f, 0.026950f, 0.025713f, 0.023975f, 0.021790f, 0.019218f, 0.016332f, 0.013210f, 0.009937f, 0.006599f, 0.003282f, 0.000072f, -0.002950f, -0.005713f, -0.008148f, -0.010202f, -0.011830f, -0.013001f, -0.013695f, -0.013909f, -0.013649f, -0.012937f, -0.011804f, -0.010294f, -0.008458f, -0.006355f, -0.004051f, -0.001614f, 0.000887f, 0.003382f, 0.005806f, 0.008094f, 0.010193f, 0.012051f, 0.013630f, 0.014897f, 0.015832f, 0.016424f, 0.016670f, 0.016581f, 0.016172f, 0.015469f, 0.014504f, 0.013315f, 0.011944f, 0.010435f, 0.008834f, + 0.007186f, 0.005535f, 0.003922f, 0.002385f, 0.000955f, -0.000341f, -0.001482f, -0.002453f, -0.003245f, -0.003857f, -0.004292f, -0.004558f, -0.004668f, -0.004638f, -0.004488f, -0.004237f, -0.003909f, -0.003524f, -0.003104f, -0.002668f, -0.002234f, -0.001816f, -0.001426f, -0.001073f, -0.000762f, -0.000497f, -0.000277f, -0.000099f, 0.000041f, 0.000150f, 0.000234f, 0.000301f, 0.000359f, 0.000415f, 0.000474f, 0.000542f, 0.000621f, 0.000713f, 0.000817f, 0.000931f, 0.001050f, 0.001170f, 0.001285f, 0.001386f, 0.001467f, 0.001521f, 0.001540f, 0.001520f, 0.001457f, 0.001347f, 0.001191f, 0.000991f, 0.000749f, 0.000474f, 0.000172f, -0.000147f, -0.000470f, -0.000786f, -0.001081f, -0.001342f, -0.001557f, -0.001713f, -0.001800f, -0.001808f, -0.001733f, -0.001568f, -0.001314f, -0.000971f, -0.000544f, -0.000040f, 0.000530f, 0.001156f, 0.001823f, 0.002515f, 0.003216f, 0.003911f, 0.004581f, 0.005211f, 0.005787f, 0.006296f, 0.006726f, 0.007071f, 0.007323f, 0.007481f, 0.007545f, 0.007518f, 0.007406f, 0.007217f, 0.006961f, 0.006651f, 0.006300f, 0.005922f, 0.005531f, 0.005141f, 0.004765f, 0.004415f, + 0.004100f, 0.003830f, 0.003610f, 0.003444f, 0.003334f, 0.003277f, 0.003271f, 0.003311f, 0.003390f, 0.003499f, 0.003630f, 0.003772f, 0.003916f, 0.004053f, 0.004174f, 0.004271f, 0.004338f, 0.004371f, 0.004367f, 0.004324f, 0.004246f, 0.004133f, 0.003990f, 0.003824f, 0.003641f, 0.003450f, 0.003257f, 0.003073f, 0.002903f, 0.002757f, 0.002639f, 0.002555f, 0.002508f, 0.002500f, 0.002531f, 0.002600f, 0.002703f, 0.002835f, 0.002991f, 0.003163f, 0.003343f, 0.003525f, 0.003698f, 0.003857f, 0.003993f, 0.004101f, 0.004175f, 0.004213f, 0.025493f, -0.047455f, -0.206540f, -0.180737f, 0.076698f, 0.007288f, -0.166173f, -0.202836f, -0.244911f, -0.225975f, -0.104465f, 0.272194f, 0.125062f, 0.081907f, 0.216402f, -0.010589f, -0.079220f, -0.139664f, -0.034890f, -0.030574f, 0.087613f, 0.152898f, 0.252140f, 0.072496f, -0.131820f, -0.186218f, 0.030134f, 0.161903f, 0.228954f, 0.120766f, -0.019227f, -0.224895f, -0.167825f, -0.058346f, 0.178973f, 0.240116f, 0.161527f, -0.083111f, -0.165331f, -0.176407f, 0.041491f, -0.197156f, -0.142013f, -0.004267f, 0.188880f, 0.191319f, 0.081722f, -0.127133f, + -0.228454f, -0.207586f, 0.057983f, 0.248368f, 0.308434f, 0.142332f, -0.137033f, -0.397708f, -0.321202f, 0.011995f, 0.416821f, 0.511799f, 0.290059f, -0.186803f, -0.492613f, -0.494386f, -0.057184f, 0.388077f, 0.468303f, 0.122035f, -0.298587f, -0.493250f, -0.282021f, 0.102010f, 0.381789f, 0.379117f, 0.065081f, -0.263329f, -0.364143f, -0.234270f, 0.158247f, 0.329315f, 0.263075f, 0.012767f, -0.234963f, -0.319959f, -0.150808f, 0.078276f, 0.254248f, 0.216596f, 0.039173f, -0.127683f, -0.202735f, -0.151174f, -0.029901f, 0.045948f, 0.133607f, 0.107376f, -0.003139f, -0.091457f, -0.149897f, -0.078458f, 0.129406f, 0.250965f, 0.193469f, -0.015697f, -0.286780f, -0.327940f, -0.123900f, 0.166658f, 0.337032f, 0.283810f, 0.025301f, -0.238622f, -0.299722f, -0.161796f, 0.128558f, 0.255374f, 0.237808f, 0.030703f, -0.148637f, -0.247569f, -0.123435f, 0.005753f, 0.131947f, 0.168550f, 0.092217f, -0.010030f, -0.064929f, -0.098678f, -0.091864f, -0.053448f, 0.029236f, 0.072744f, 0.087151f, 0.035778f, -0.028064f, -0.088679f, -0.082291f, -0.042768f, 0.033241f, 0.094467f, 0.076939f, 0.019309f, -0.045104f, -0.073694f, + -0.046734f, -0.009283f, 0.052709f, 0.072200f, 0.025338f, -0.010891f, -0.047185f, -0.046494f, -0.008576f, 0.031316f, 0.055596f, 0.012706f, -0.012001f, -0.047642f, -0.041810f, -0.002784f, 0.043247f, 0.027354f, 0.016670f, -0.016791f, -0.046652f, -0.032431f, -0.010611f, 0.027002f, 0.032900f, 0.008735f, -0.024343f, -0.040507f, -0.015884f, 0.019326f, 0.016809f, -0.008429f, -0.037666f, -0.036170f, -0.016857f, -0.024047f, 0.089287f, 0.114137f, 0.047188f, -0.081205f, -0.128577f, -0.055059f, 0.088676f, 0.143960f, 0.052069f, -0.101950f, -0.145637f, -0.031726f, 0.118112f, 0.128265f, -0.007591f, -0.128859f, -0.086502f, 0.055411f, 0.113541f, 0.010025f, -0.092906f, -0.036297f, 0.057924f, 0.017587f, -0.023888f, -0.005725f, 0.005014f, -0.001565f, -0.000171f, -0.000855f, 0.000693f, 0.000005f, -0.000326f, -0.002626f, -0.001412f, -0.001083f, -0.001205f, -0.000870f, -0.000136f, -0.001613f, -0.000940f, -0.003150f, -0.001555f, -0.000591f, 0.000728f, 0.000136f, -0.000155f, -0.000405f, -0.000913f, -0.001417f, -0.001185f, -0.001152f, -0.000419f, -0.000418f, -0.000787f, -0.000272f, -0.000412f, -0.000635f, -0.001489f, -0.001892f}, + {0.057990f, 0.057551f, 0.056676f, 0.055371f, 0.053644f, 0.051507f, 0.048977f, 0.046072f, 0.042817f, 0.039239f, 0.035373f, 0.031256f, 0.026931f, 0.022447f, 0.017856f, 0.013215f, 0.008585f, 0.004028f, -0.000390f, -0.004604f, -0.008549f, -0.012161f, -0.015382f, -0.018157f, -0.020438f, -0.022185f, -0.023367f, -0.023963f, -0.023964f, -0.023372f, -0.022202f, -0.020480f, -0.018246f, -0.015550f, -0.012453f, -0.009027f, -0.005348f, -0.001502f, 0.002422f, 0.006333f, 0.010141f, 0.013758f, 0.017100f, 0.020090f, 0.022660f, 0.024752f, 0.026322f, 0.027338f, 0.027781f, 0.027647f, 0.026950f, 0.025713f, 0.023975f, 0.021790f, 0.019218f, 0.016332f, 0.013210f, 0.009937f, 0.006599f, 0.003282f, 0.000072f, -0.002950f, -0.005713f, -0.008148f, -0.010202f, -0.011830f, -0.013001f, -0.013695f, -0.013909f, -0.013649f, -0.012937f, -0.011804f, -0.010294f, -0.008458f, -0.006355f, -0.004051f, -0.001614f, 0.000887f, 0.003382f, 0.005806f, 0.008094f, 0.010193f, 0.012051f, 0.013630f, 0.014897f, 0.015832f, 0.016424f, 0.016670f, 0.016581f, 0.016172f, 0.015469f, 0.014504f, 0.013315f, 0.011944f, 0.010435f, 0.008834f, + 0.007186f, 0.005535f, 0.003922f, 0.002385f, 0.000955f, -0.000341f, -0.001482f, -0.002453f, -0.003245f, -0.003857f, -0.004292f, -0.004558f, -0.004668f, -0.004638f, -0.004488f, -0.004237f, -0.003909f, -0.003524f, -0.003104f, -0.002668f, -0.002234f, -0.001816f, -0.001426f, -0.001073f, -0.000762f, -0.000497f, -0.000277f, -0.000099f, 0.000041f, 0.000150f, 0.000234f, 0.000301f, 0.000359f, 0.000415f, 0.000474f, 0.000542f, 0.000621f, 0.000713f, 0.000817f, 0.000931f, 0.001050f, 0.001170f, 0.001285f, 0.001386f, 0.001467f, 0.001521f, 0.001540f, 0.001520f, 0.001457f, 0.001347f, 0.001191f, 0.000991f, 0.000749f, 0.000474f, 0.000172f, -0.000147f, -0.000470f, -0.000786f, -0.001081f, -0.001342f, -0.001557f, -0.001713f, -0.001800f, -0.001808f, -0.001733f, -0.001568f, -0.001314f, -0.000971f, -0.000544f, -0.000040f, 0.000530f, 0.001156f, 0.001823f, 0.002515f, 0.003216f, 0.003911f, 0.004581f, 0.005211f, 0.005787f, 0.006296f, 0.006726f, 0.007071f, 0.007323f, 0.007481f, 0.007545f, 0.007518f, 0.007406f, 0.007217f, 0.006961f, 0.006651f, 0.006300f, 0.005922f, 0.005531f, 0.005141f, 0.004765f, 0.004415f, + 0.004100f, 0.003830f, 0.003610f, 0.003444f, 0.003334f, 0.003277f, 0.003271f, 0.003311f, 0.003390f, 0.003499f, 0.003630f, 0.003772f, 0.003916f, 0.004053f, 0.004174f, 0.004271f, 0.004338f, 0.004371f, 0.004367f, 0.004324f, 0.004246f, 0.004133f, 0.003990f, 0.003824f, 0.003641f, 0.003450f, 0.003257f, 0.003073f, 0.002903f, 0.002757f, 0.002639f, 0.002555f, 0.002508f, 0.002500f, 0.002531f, 0.002600f, 0.002703f, 0.002835f, 0.002991f, 0.003163f, 0.003343f, 0.003525f, 0.003698f, 0.003857f, 0.003993f, 0.004101f, 0.004175f, 0.004213f, 0.025493f, -0.047455f, -0.206540f, -0.180737f, 0.076698f, 0.007288f, -0.166173f, -0.202836f, -0.244911f, -0.225975f, -0.104465f, 0.272194f, 0.125062f, 0.081907f, 0.216402f, -0.010589f, -0.079220f, -0.139664f, -0.034890f, -0.030574f, 0.087613f, 0.152898f, 0.252140f, 0.072496f, -0.131820f, -0.186218f, 0.030134f, 0.161903f, 0.228954f, 0.120766f, -0.019227f, -0.224895f, -0.167825f, -0.058346f, 0.178973f, 0.240116f, 0.161527f, -0.083111f, -0.165331f, -0.176407f, 0.041491f, -0.197156f, -0.142013f, -0.004267f, 0.188880f, 0.191319f, 0.081722f, -0.127133f, + -0.228454f, -0.207586f, 0.057983f, 0.248368f, 0.308434f, 0.142332f, -0.137033f, -0.397708f, -0.321202f, 0.011995f, 0.416821f, 0.511799f, 0.290059f, -0.186803f, -0.492613f, -0.494386f, -0.057184f, 0.388077f, 0.468303f, 0.122035f, -0.298587f, -0.493250f, -0.282021f, 0.102010f, 0.381789f, 0.379117f, 0.065081f, -0.263329f, -0.364143f, -0.234270f, 0.158247f, 0.329315f, 0.263075f, 0.012767f, -0.234963f, -0.319959f, -0.150808f, 0.078276f, 0.254248f, 0.216596f, 0.039173f, -0.127683f, -0.202735f, -0.151174f, -0.029901f, 0.045948f, 0.133607f, 0.107376f, -0.003139f, -0.091457f, -0.149897f, -0.078458f, 0.129406f, 0.250965f, 0.193469f, -0.015697f, -0.286780f, -0.327940f, -0.123900f, 0.166658f, 0.337032f, 0.283810f, 0.025301f, -0.238622f, -0.299722f, -0.161796f, 0.128558f, 0.255374f, 0.237808f, 0.030703f, -0.148637f, -0.247569f, -0.123435f, 0.005753f, 0.131947f, 0.168550f, 0.092217f, -0.010030f, -0.064929f, -0.098678f, -0.091864f, -0.053448f, 0.029236f, 0.072744f, 0.087151f, 0.035778f, -0.028064f, -0.088679f, -0.082291f, -0.042768f, 0.033241f, 0.094467f, 0.076939f, 0.019309f, -0.045104f, -0.073694f, + -0.046734f, -0.009283f, 0.052709f, 0.072200f, 0.025338f, -0.010891f, -0.047185f, -0.046494f, -0.008576f, 0.031316f, 0.055596f, 0.012706f, -0.012001f, -0.047642f, -0.041810f, -0.002784f, 0.043247f, 0.027354f, 0.016670f, -0.016791f, -0.046652f, -0.032431f, -0.010611f, 0.027002f, 0.032900f, 0.008735f, -0.024343f, -0.040507f, -0.015884f, 0.019326f, 0.016809f, -0.008429f, -0.037666f, -0.036170f, -0.016857f, -0.024047f, 0.089287f, 0.114137f, 0.047188f, -0.081205f, -0.128577f, -0.055059f, 0.088676f, 0.143960f, 0.052069f, -0.101950f, -0.145637f, -0.031726f, 0.118112f, 0.128265f, -0.007591f, -0.128859f, -0.086502f, 0.055411f, 0.113541f, 0.010025f, -0.092906f, -0.036297f, 0.057924f, 0.017587f, -0.023888f, -0.005725f, 0.005014f, -0.001565f, -0.000171f, -0.000855f, 0.000693f, 0.000005f, -0.000326f, -0.002626f, -0.001412f, -0.001083f, -0.001205f, -0.000870f, -0.000136f, -0.001613f, -0.000940f, -0.003150f, -0.001555f, -0.000591f, 0.000728f, 0.000136f, -0.000155f, -0.000405f, -0.000913f, -0.001417f, -0.001185f, -0.001152f, -0.000419f, -0.000418f, -0.000787f, -0.000272f, -0.000412f, -0.000635f, -0.001489f, -0.001892f} + }, + { + {0.053939f, 0.053168f, 0.051645f, 0.049411f, 0.046524f, 0.043059f, 0.039106f, 0.034766f, 0.030149f, 0.025371f, 0.020548f, 0.015798f, 0.011232f, 0.006952f, 0.003053f, -0.000388f, -0.003306f, -0.005656f, -0.007410f, -0.008558f, -0.009110f, -0.009095f, -0.008557f, -0.007556f, -0.006164f, -0.004465f, -0.002548f, -0.000510f, 0.001554f, 0.003549f, 0.005387f, 0.006984f, 0.008271f, 0.009189f, 0.009693f, 0.009755f, 0.009362f, 0.008518f, 0.007244f, 0.005576f, 0.003562f, 0.001266f, -0.001241f, -0.003880f, -0.006567f, -0.009216f, -0.011741f, -0.014061f, -0.016102f, -0.017797f, -0.019091f, -0.019942f, -0.020323f, -0.020220f, -0.019635f, -0.018586f, -0.017105f, -0.015237f, -0.013041f, -0.010583f, -0.007940f, -0.005192f, -0.002424f, 0.000280f, 0.002838f, 0.005173f, 0.007216f, 0.008906f, 0.010194f, 0.011044f, 0.011434f, 0.011355f, 0.010813f, 0.009828f, 0.008434f, 0.006676f, 0.004611f, 0.002303f, -0.000174f, -0.002746f, -0.005333f, -0.007857f, -0.010242f, -0.012419f, -0.014323f, -0.015899f, -0.017103f, -0.017903f, -0.018277f, -0.018217f, -0.017730f, -0.016832f, -0.015553f, -0.013933f, -0.012022f, -0.009877f, + -0.007561f, -0.005142f, -0.002689f, -0.000270f, 0.002046f, 0.004198f, 0.006129f, 0.007788f, 0.009135f, 0.010139f, 0.010778f, 0.011044f, 0.010935f, 0.010465f, 0.009654f, 0.008534f, 0.007142f, 0.005525f, 0.003734f, 0.001824f, -0.000148f, -0.002124f, -0.004047f, -0.005864f, -0.007524f, -0.008982f, -0.010201f, -0.011149f, -0.011804f, -0.012151f, -0.012183f, -0.011904f, -0.011324f, -0.010460f, -0.009340f, -0.007993f, -0.006456f, -0.004770f, -0.002977f, -0.001123f, 0.000747f, 0.002589f, 0.004361f, 0.006022f, 0.007538f, 0.008876f, 0.010011f, 0.010923f, 0.011596f, 0.012024f, 0.012203f, 0.012138f, 0.011837f, 0.011315f, 0.010592f, 0.009691f, 0.008638f, 0.007461f, 0.006193f, 0.004863f, 0.003505f, 0.002149f, 0.000826f, -0.000436f, -0.001612f, -0.002679f, -0.003617f, -0.004412f, -0.005051f, -0.005526f, -0.005834f, -0.005975f, -0.005953f, -0.005775f, -0.005453f, -0.005000f, -0.004431f, -0.003766f, -0.003024f, -0.002226f, -0.001392f, -0.000545f, 0.000295f, 0.001109f, 0.001878f, 0.002584f, 0.003215f, 0.003756f, 0.004200f, 0.004538f, 0.004768f, 0.004887f, 0.004897f, 0.004804f, 0.004613f, 0.004333f, + 0.003977f, 0.003556f, 0.003085f, 0.002579f, 0.002053f, 0.001523f, 0.001003f, 0.000508f, 0.000051f, -0.000356f, -0.000703f, -0.000982f, -0.001188f, -0.001317f, -0.001369f, -0.001344f, -0.001246f, -0.001082f, -0.000859f, -0.000586f, -0.000274f, 0.000064f, 0.000418f, 0.000774f, 0.001120f, 0.001444f, 0.001735f, 0.001983f, 0.002182f, 0.002323f, 0.002403f, 0.002420f, 0.002374f, 0.002268f, 0.002104f, 0.001890f, 0.001633f, 0.001342f, 0.001028f, 0.000702f, 0.000375f, 0.000059f, -0.000236f, -0.000499f, -0.000722f, -0.000895f, -0.001015f, -0.001075f, 0.049892f, 0.047990f, -0.033258f, -0.133611f, -0.052183f, 0.061542f, -0.066189f, -0.089403f, -0.087291f, -0.054690f, -0.271607f, 0.096603f, -0.267726f, -0.264256f, 0.129132f, 0.545913f, 0.617339f, 0.272794f, -0.174907f, -0.533748f, -0.554207f, -0.047609f, 0.546477f, 0.739049f, 0.437232f, -0.183155f, -0.701637f, -0.783026f, -0.180038f, 0.530674f, 0.909066f, 0.571940f, -0.135388f, -0.739667f, -0.743880f, -0.233864f, 0.430650f, 0.757264f, 0.447132f, -0.114267f, -0.697564f, -0.285638f, 0.199784f, 0.551573f, 0.527110f, 0.166839f, -0.279615f, -0.511378f, + -0.414597f, -0.035481f, 0.341233f, 0.439039f, 0.261439f, -0.073149f, -0.320806f, -0.349659f, -0.137619f, 0.104207f, 0.286915f, 0.269047f, 0.082840f, -0.149283f, -0.281998f, -0.208006f, -0.019203f, 0.101892f, 0.320901f, 0.235951f, 0.042155f, -0.220082f, -0.218070f, -0.072821f, 0.123239f, 0.178973f, 0.115959f, -0.050898f, -0.138270f, -0.074258f, 0.036054f, 0.153232f, 0.152791f, 0.013746f, -0.140713f, -0.160471f, -0.062189f, 0.111791f, 0.259895f, 0.179835f, 0.030866f, -0.155186f, -0.163893f, -0.024727f, 0.057868f, 0.095150f, 0.048223f, -0.039504f, -0.025509f, -0.025762f, 0.060861f, 0.031466f, -0.120354f, -0.222981f, -0.180983f, 0.016892f, 0.223071f, 0.273060f, 0.085555f, -0.173778f, -0.344302f, -0.229392f, 0.091982f, 0.346138f, 0.343015f, 0.091762f, -0.246905f, -0.397401f, -0.330364f, 0.031457f, 0.369990f, 0.427005f, 0.131021f, -0.260986f, -0.436361f, -0.310050f, 0.029087f, 0.323590f, 0.385483f, 0.170781f, -0.141240f, -0.359812f, -0.310507f, -0.043287f, 0.254955f, 0.384213f, 0.215259f, -0.062184f, -0.327732f, -0.348448f, -0.119290f, 0.201937f, 0.353261f, 0.283515f, -0.011811f, -0.252592f, + -0.339514f, -0.211221f, 0.051300f, 0.280752f, 0.283220f, 0.092064f, -0.144765f, -0.288062f, -0.208872f, 0.005855f, 0.237021f, 0.313554f, 0.130575f, -0.114179f, -0.277431f, -0.250920f, -0.032791f, 0.225855f, 0.278421f, 0.137232f, -0.080003f, -0.245236f, -0.213592f, -0.037867f, 0.158155f, 0.242168f, 0.125690f, -0.102714f, -0.254825f, -0.211195f, 0.003451f, 0.225300f, 0.258602f, 0.103888f, -0.159026f, -0.337059f, -0.112344f, 0.196349f, 0.357577f, 0.198215f, -0.126973f, -0.336837f, -0.230151f, 0.083405f, 0.320534f, 0.248317f, -0.055685f, -0.288169f, -0.219367f, 0.063406f, 0.263101f, 0.170224f, -0.090796f, -0.222565f, -0.079326f, 0.141957f, 0.144276f, -0.049174f, -0.100479f, 0.016247f, 0.040632f, -0.004263f, -0.004172f, 0.001039f, 0.002231f, -0.000104f, 0.003192f, 0.001874f, 0.000180f, 0.001159f, 0.001815f, 0.000130f, 0.000856f, 0.001144f, 0.001903f, 0.000931f, 0.000960f, 0.001644f, 0.001821f, 0.000738f, -0.000514f, 0.000766f, 0.002281f, 0.002899f, 0.001980f, 0.001944f, 0.000363f, 0.002092f, -0.000780f, -0.002933f, 0.002161f, 0.003171f, 0.003051f, 0.001162f, 0.000614f, 0.001346f}, + {0.053939f, 0.053168f, 0.051645f, 0.049411f, 0.046524f, 0.043059f, 0.039106f, 0.034766f, 0.030149f, 0.025371f, 0.020548f, 0.015798f, 0.011232f, 0.006952f, 0.003053f, -0.000388f, -0.003306f, -0.005656f, -0.007410f, -0.008558f, -0.009110f, -0.009095f, -0.008557f, -0.007556f, -0.006164f, -0.004465f, -0.002548f, -0.000510f, 0.001554f, 0.003549f, 0.005387f, 0.006984f, 0.008271f, 0.009189f, 0.009693f, 0.009755f, 0.009362f, 0.008518f, 0.007244f, 0.005576f, 0.003562f, 0.001266f, -0.001241f, -0.003880f, -0.006567f, -0.009216f, -0.011741f, -0.014061f, -0.016102f, -0.017797f, -0.019091f, -0.019942f, -0.020323f, -0.020220f, -0.019635f, -0.018586f, -0.017105f, -0.015237f, -0.013041f, -0.010583f, -0.007940f, -0.005192f, -0.002424f, 0.000280f, 0.002838f, 0.005173f, 0.007216f, 0.008906f, 0.010194f, 0.011044f, 0.011434f, 0.011355f, 0.010813f, 0.009828f, 0.008434f, 0.006676f, 0.004611f, 0.002303f, -0.000174f, -0.002746f, -0.005333f, -0.007857f, -0.010242f, -0.012419f, -0.014323f, -0.015899f, -0.017103f, -0.017903f, -0.018277f, -0.018217f, -0.017730f, -0.016832f, -0.015553f, -0.013933f, -0.012022f, -0.009877f, + -0.007561f, -0.005142f, -0.002689f, -0.000270f, 0.002046f, 0.004198f, 0.006129f, 0.007788f, 0.009135f, 0.010139f, 0.010778f, 0.011044f, 0.010935f, 0.010465f, 0.009654f, 0.008534f, 0.007142f, 0.005525f, 0.003734f, 0.001824f, -0.000148f, -0.002124f, -0.004047f, -0.005864f, -0.007524f, -0.008982f, -0.010201f, -0.011149f, -0.011804f, -0.012151f, -0.012183f, -0.011904f, -0.011324f, -0.010460f, -0.009340f, -0.007993f, -0.006456f, -0.004770f, -0.002977f, -0.001123f, 0.000747f, 0.002589f, 0.004361f, 0.006022f, 0.007538f, 0.008876f, 0.010011f, 0.010923f, 0.011596f, 0.012024f, 0.012203f, 0.012138f, 0.011837f, 0.011315f, 0.010592f, 0.009691f, 0.008638f, 0.007461f, 0.006193f, 0.004863f, 0.003505f, 0.002149f, 0.000826f, -0.000436f, -0.001612f, -0.002679f, -0.003617f, -0.004412f, -0.005051f, -0.005526f, -0.005834f, -0.005975f, -0.005953f, -0.005775f, -0.005453f, -0.005000f, -0.004431f, -0.003766f, -0.003024f, -0.002226f, -0.001392f, -0.000545f, 0.000295f, 0.001109f, 0.001878f, 0.002584f, 0.003215f, 0.003756f, 0.004200f, 0.004538f, 0.004768f, 0.004887f, 0.004897f, 0.004804f, 0.004613f, 0.004333f, + 0.003977f, 0.003556f, 0.003085f, 0.002579f, 0.002053f, 0.001523f, 0.001003f, 0.000508f, 0.000051f, -0.000356f, -0.000703f, -0.000982f, -0.001188f, -0.001317f, -0.001369f, -0.001344f, -0.001246f, -0.001082f, -0.000859f, -0.000586f, -0.000274f, 0.000064f, 0.000418f, 0.000774f, 0.001120f, 0.001444f, 0.001735f, 0.001983f, 0.002182f, 0.002323f, 0.002403f, 0.002420f, 0.002374f, 0.002268f, 0.002104f, 0.001890f, 0.001633f, 0.001342f, 0.001028f, 0.000702f, 0.000375f, 0.000059f, -0.000236f, -0.000499f, -0.000722f, -0.000895f, -0.001015f, -0.001075f, 0.049892f, 0.047990f, -0.033258f, -0.133611f, -0.052183f, 0.061542f, -0.066189f, -0.089403f, -0.087291f, -0.054690f, -0.271607f, 0.096603f, -0.267726f, -0.264256f, 0.129132f, 0.545913f, 0.617339f, 0.272794f, -0.174907f, -0.533748f, -0.554207f, -0.047609f, 0.546477f, 0.739049f, 0.437232f, -0.183155f, -0.701637f, -0.783026f, -0.180038f, 0.530674f, 0.909066f, 0.571940f, -0.135388f, -0.739667f, -0.743880f, -0.233864f, 0.430650f, 0.757264f, 0.447132f, -0.114267f, -0.697564f, -0.285638f, 0.199784f, 0.551573f, 0.527110f, 0.166839f, -0.279615f, -0.511378f, + -0.414597f, -0.035481f, 0.341233f, 0.439039f, 0.261439f, -0.073149f, -0.320806f, -0.349659f, -0.137619f, 0.104207f, 0.286915f, 0.269047f, 0.082840f, -0.149283f, -0.281998f, -0.208006f, -0.019203f, 0.101892f, 0.320901f, 0.235951f, 0.042155f, -0.220082f, -0.218070f, -0.072821f, 0.123239f, 0.178973f, 0.115959f, -0.050898f, -0.138270f, -0.074258f, 0.036054f, 0.153232f, 0.152791f, 0.013746f, -0.140713f, -0.160471f, -0.062189f, 0.111791f, 0.259895f, 0.179835f, 0.030866f, -0.155186f, -0.163893f, -0.024727f, 0.057868f, 0.095150f, 0.048223f, -0.039504f, -0.025509f, -0.025762f, 0.060861f, 0.031466f, -0.120354f, -0.222981f, -0.180983f, 0.016892f, 0.223071f, 0.273060f, 0.085555f, -0.173778f, -0.344302f, -0.229392f, 0.091982f, 0.346138f, 0.343015f, 0.091762f, -0.246905f, -0.397401f, -0.330364f, 0.031457f, 0.369990f, 0.427005f, 0.131021f, -0.260986f, -0.436361f, -0.310050f, 0.029087f, 0.323590f, 0.385483f, 0.170781f, -0.141240f, -0.359812f, -0.310507f, -0.043287f, 0.254955f, 0.384213f, 0.215259f, -0.062184f, -0.327732f, -0.348448f, -0.119290f, 0.201937f, 0.353261f, 0.283515f, -0.011811f, -0.252592f, + -0.339514f, -0.211221f, 0.051300f, 0.280752f, 0.283220f, 0.092064f, -0.144765f, -0.288062f, -0.208872f, 0.005855f, 0.237021f, 0.313554f, 0.130575f, -0.114179f, -0.277431f, -0.250920f, -0.032791f, 0.225855f, 0.278421f, 0.137232f, -0.080003f, -0.245236f, -0.213592f, -0.037867f, 0.158155f, 0.242168f, 0.125690f, -0.102714f, -0.254825f, -0.211195f, 0.003451f, 0.225300f, 0.258602f, 0.103888f, -0.159026f, -0.337059f, -0.112344f, 0.196349f, 0.357577f, 0.198215f, -0.126973f, -0.336837f, -0.230151f, 0.083405f, 0.320534f, 0.248317f, -0.055685f, -0.288169f, -0.219367f, 0.063406f, 0.263101f, 0.170224f, -0.090796f, -0.222565f, -0.079326f, 0.141957f, 0.144276f, -0.049174f, -0.100479f, 0.016247f, 0.040632f, -0.004263f, -0.004172f, 0.001039f, 0.002231f, -0.000104f, 0.003192f, 0.001874f, 0.000180f, 0.001159f, 0.001815f, 0.000130f, 0.000856f, 0.001144f, 0.001903f, 0.000931f, 0.000960f, 0.001644f, 0.001821f, 0.000738f, -0.000514f, 0.000766f, 0.002281f, 0.002899f, 0.001980f, 0.001944f, 0.000363f, 0.002092f, -0.000780f, -0.002933f, 0.002161f, 0.003171f, 0.003051f, 0.001162f, 0.000614f, 0.001346f} + }, + { + {0.041901f, 0.041644f, 0.041132f, 0.040369f, 0.039360f, 0.038115f, 0.036644f, 0.034960f, 0.033080f, 0.031023f, 0.028809f, 0.026466f, 0.024020f, 0.021503f, 0.018948f, 0.016390f, 0.013868f, 0.011418f, 0.009081f, 0.006893f, 0.004891f, 0.003110f, 0.001579f, 0.000327f, -0.000627f, -0.001266f, -0.001584f, -0.001578f, -0.001255f, -0.000629f, 0.000275f, 0.001430f, 0.002798f, 0.004334f, 0.005991f, 0.007715f, 0.009451f, 0.011139f, 0.012723f, 0.014147f, 0.015357f, 0.016306f, 0.016952f, 0.017258f, 0.017201f, 0.016763f, 0.015936f, 0.014726f, 0.013146f, 0.011220f, 0.008981f, 0.006473f, 0.003744f, 0.000852f, -0.002144f, -0.005180f, -0.008192f, -0.011115f, -0.013889f, -0.016456f, -0.018766f, -0.020774f, -0.022445f, -0.023754f, -0.024685f, -0.025231f, -0.025398f, -0.025201f, -0.024663f, -0.023818f, -0.022705f, -0.021370f, -0.019863f, -0.018236f, -0.016543f, -0.014836f, -0.013165f, -0.011578f, -0.010113f, -0.008805f, -0.007681f, -0.006758f, -0.006047f, -0.005549f, -0.005257f, -0.005155f, -0.005223f, -0.005432f, -0.005751f, -0.006144f, -0.006574f, -0.007004f, -0.007397f, -0.007720f, -0.007944f, -0.008045f, + -0.008005f, -0.007812f, -0.007463f, -0.006961f, -0.006316f, -0.005545f, -0.004673f, -0.003728f, -0.002743f, -0.001752f, -0.000794f, 0.000097f, 0.000883f, 0.001533f, 0.002019f, 0.002318f, 0.002414f, 0.002298f, 0.001968f, 0.001430f, 0.000700f, -0.000203f, -0.001249f, -0.002404f, -0.003629f, -0.004882f, -0.006117f, -0.007289f, -0.008353f, -0.009267f, -0.009993f, -0.010497f, -0.010752f, -0.010739f, -0.010447f, -0.009872f, -0.009020f, -0.007906f, -0.006552f, -0.004990f, -0.003255f, -0.001391f, 0.000554f, 0.002531f, 0.004488f, 0.006374f, 0.008138f, 0.009735f, 0.011121f, 0.012261f, 0.013125f, 0.013691f, 0.013945f, 0.013883f, 0.013507f, 0.012829f, 0.011869f, 0.010655f, 0.009219f, 0.007599f, 0.005840f, 0.003986f, 0.002083f, 0.000180f, -0.001679f, -0.003450f, -0.005094f, -0.006576f, -0.007867f, -0.008943f, -0.009788f, -0.010393f, -0.010753f, -0.010873f, -0.010762f, -0.010435f, -0.009913f, -0.009219f, -0.008380f, -0.007427f, -0.006389f, -0.005298f, -0.004184f, -0.003075f, -0.001998f, -0.000976f, -0.000030f, 0.000825f, 0.001575f, 0.002213f, 0.002733f, 0.003136f, 0.003424f, 0.003602f, 0.003680f, 0.003668f, + 0.003577f, 0.003421f, 0.003213f, 0.002966f, 0.002694f, 0.002407f, 0.002117f, 0.001833f, 0.001562f, 0.001310f, 0.001082f, 0.000879f, 0.000704f, 0.000555f, 0.000431f, 0.000331f, 0.000251f, 0.000189f, 0.000142f, 0.000107f, 0.000082f, 0.000064f, 0.000052f, 0.000046f, 0.000044f, 0.000047f, 0.000055f, 0.000071f, 0.000094f, 0.000127f, 0.000170f, 0.000224f, 0.000290f, 0.000369f, 0.000459f, 0.000561f, 0.000672f, 0.000790f, 0.000912f, 0.001037f, 0.001159f, 0.001277f, 0.001386f, 0.001482f, 0.001564f, 0.001627f, 0.001671f, 0.001693f, -0.008589f, -0.013706f, -0.011480f, -0.019507f, -0.084522f, -0.068258f, -0.074407f, 0.006022f, -0.067948f, -0.035105f, -0.113541f, 0.025271f, -0.099929f, -0.161352f, 0.090732f, 0.307217f, 0.230926f, 0.193524f, -0.085241f, -0.256383f, -0.088475f, -0.069444f, 0.162221f, 0.143857f, 0.081764f, -0.108640f, -0.218760f, -0.183481f, 0.035748f, 0.217219f, 0.277907f, 0.149093f, -0.077173f, -0.379104f, -0.268807f, 0.110869f, 0.337248f, 0.322414f, 0.116275f, -0.214108f, -0.405948f, -0.119559f, 0.205668f, 0.360167f, 0.308288f, 0.030463f, -0.224371f, -0.290891f, + -0.230312f, -0.083689f, 0.192198f, 0.256347f, 0.249895f, 0.006398f, -0.133492f, -0.289328f, -0.121189f, -0.013016f, 0.252580f, 0.282690f, 0.023350f, 0.006112f, -0.200784f, -0.265022f, -0.097706f, 0.187679f, 0.257554f, 0.123191f, -0.143874f, -0.318190f, -0.222703f, -0.006171f, 0.175978f, 0.299184f, 0.196664f, -0.081596f, -0.264277f, -0.266021f, 0.041392f, 0.221364f, 0.275588f, 0.198585f, -0.143864f, -0.297232f, -0.244483f, 0.042519f, 0.230431f, 0.266412f, 0.069441f, -0.176026f, -0.242817f, -0.105670f, 0.058095f, 0.091494f, -0.006481f, -0.079556f, -0.051063f, -0.011345f, 0.063851f, 0.023359f, -0.117032f, -0.175189f, -0.150623f, 0.008055f, 0.146025f, 0.202026f, 0.075495f, -0.077481f, -0.244727f, -0.212741f, -0.061630f, 0.111017f, 0.269495f, 0.230027f, -0.040848f, -0.229507f, -0.203636f, -0.057604f, 0.188787f, 0.209641f, 0.097030f, 0.012440f, -0.228649f, -0.213129f, -0.114776f, 0.056545f, 0.171551f, 0.135038f, -0.008104f, -0.094644f, -0.109245f, -0.031083f, 0.042358f, 0.096241f, 0.061876f, 0.001161f, -0.066020f, -0.132764f, -0.071367f, 0.033501f, 0.081855f, 0.092746f, 0.018466f, -0.045010f, + -0.086509f, -0.101242f, -0.042110f, 0.028859f, 0.063454f, 0.029496f, -0.012907f, -0.044474f, -0.028225f, -0.015706f, 0.043059f, 0.082143f, 0.044775f, -0.036787f, -0.083370f, -0.092755f, -0.025675f, 0.110962f, 0.136245f, 0.074590f, -0.022154f, -0.107603f, -0.096543f, -0.032923f, 0.041587f, 0.074610f, 0.043238f, -0.031976f, -0.114357f, -0.096251f, -0.011309f, 0.075988f, 0.137679f, 0.023208f, -0.078534f, -0.307022f, -0.159274f, 0.170167f, 0.368532f, 0.258626f, -0.077972f, -0.339673f, -0.285783f, 0.038908f, 0.323796f, 0.299487f, -0.011876f, -0.295894f, -0.273170f, 0.028462f, 0.279003f, 0.220583f, -0.071685f, -0.249678f, -0.118577f, 0.142453f, 0.181962f, -0.040878f, -0.131885f, 0.009338f, 0.051482f, -0.002209f, -0.009751f, -0.000868f, 0.001002f, 0.000512f, 0.002613f, -0.001675f, -0.000713f, -0.001351f, -0.000432f, -0.000353f, 0.001025f, 0.000304f, -0.001145f, -0.000262f, 0.001746f, -0.000411f, -0.000323f, -0.001006f, 0.000548f, -0.000515f, -0.001958f, -0.000622f, -0.000196f, 0.001542f, 0.001213f, -0.002762f, -0.000766f, -0.003663f, -0.000140f, -0.000560f, 0.000919f, 0.000676f, -0.001502f, -0.002685f}, + {-0.041901f, -0.041644f, -0.041132f, -0.040369f, -0.039360f, -0.038115f, -0.036644f, -0.034960f, -0.033080f, -0.031023f, -0.028809f, -0.026466f, -0.024020f, -0.021503f, -0.018948f, -0.016390f, -0.013868f, -0.011418f, -0.009081f, -0.006893f, -0.004891f, -0.003110f, -0.001579f, -0.000327f, 0.000627f, 0.001266f, 0.001584f, 0.001578f, 0.001255f, 0.000629f, -0.000275f, -0.001430f, -0.002798f, -0.004334f, -0.005991f, -0.007715f, -0.009451f, -0.011139f, -0.012723f, -0.014147f, -0.015357f, -0.016306f, -0.016952f, -0.017258f, -0.017201f, -0.016763f, -0.015936f, -0.014726f, -0.013146f, -0.011220f, -0.008981f, -0.006473f, -0.003744f, -0.000852f, 0.002144f, 0.005180f, 0.008192f, 0.011115f, 0.013889f, 0.016456f, 0.018766f, 0.020774f, 0.022445f, 0.023754f, 0.024685f, 0.025231f, 0.025398f, 0.025201f, 0.024663f, 0.023818f, 0.022705f, 0.021370f, 0.019863f, 0.018236f, 0.016543f, 0.014836f, 0.013165f, 0.011578f, 0.010113f, 0.008805f, 0.007681f, 0.006758f, 0.006047f, 0.005549f, 0.005257f, 0.005155f, 0.005223f, 0.005432f, 0.005751f, 0.006144f, 0.006574f, 0.007004f, 0.007397f, 0.007720f, 0.007944f, 0.008045f, + 0.008005f, 0.007812f, 0.007463f, 0.006961f, 0.006316f, 0.005545f, 0.004673f, 0.003728f, 0.002743f, 0.001752f, 0.000794f, -0.000097f, -0.000883f, -0.001533f, -0.002019f, -0.002318f, -0.002414f, -0.002298f, -0.001968f, -0.001430f, -0.000700f, 0.000203f, 0.001249f, 0.002404f, 0.003629f, 0.004882f, 0.006117f, 0.007289f, 0.008353f, 0.009267f, 0.009993f, 0.010497f, 0.010752f, 0.010739f, 0.010447f, 0.009872f, 0.009020f, 0.007906f, 0.006552f, 0.004990f, 0.003255f, 0.001391f, -0.000554f, -0.002531f, -0.004488f, -0.006374f, -0.008138f, -0.009735f, -0.011121f, -0.012261f, -0.013125f, -0.013691f, -0.013945f, -0.013883f, -0.013507f, -0.012829f, -0.011869f, -0.010655f, -0.009219f, -0.007599f, -0.005840f, -0.003986f, -0.002083f, -0.000180f, 0.001679f, 0.003450f, 0.005094f, 0.006576f, 0.007867f, 0.008943f, 0.009788f, 0.010393f, 0.010753f, 0.010873f, 0.010762f, 0.010435f, 0.009913f, 0.009219f, 0.008380f, 0.007427f, 0.006389f, 0.005298f, 0.004184f, 0.003075f, 0.001998f, 0.000976f, 0.000030f, -0.000825f, -0.001575f, -0.002213f, -0.002733f, -0.003136f, -0.003424f, -0.003602f, -0.003680f, -0.003668f, + -0.003577f, -0.003421f, -0.003213f, -0.002966f, -0.002694f, -0.002407f, -0.002117f, -0.001833f, -0.001562f, -0.001310f, -0.001082f, -0.000879f, -0.000704f, -0.000555f, -0.000431f, -0.000331f, -0.000251f, -0.000189f, -0.000142f, -0.000107f, -0.000082f, -0.000064f, -0.000052f, -0.000046f, -0.000044f, -0.000047f, -0.000055f, -0.000071f, -0.000094f, -0.000127f, -0.000170f, -0.000224f, -0.000290f, -0.000369f, -0.000459f, -0.000561f, -0.000672f, -0.000790f, -0.000912f, -0.001037f, -0.001159f, -0.001277f, -0.001386f, -0.001482f, -0.001564f, -0.001627f, -0.001671f, -0.001693f, 0.008589f, 0.013706f, 0.011480f, 0.019507f, 0.084522f, 0.068258f, 0.074407f, -0.006022f, 0.067948f, 0.035105f, 0.113541f, -0.025271f, 0.099929f, 0.161352f, -0.090732f, -0.307217f, -0.230926f, -0.193524f, 0.085241f, 0.256383f, 0.088475f, 0.069444f, -0.162221f, -0.143857f, -0.081764f, 0.108640f, 0.218760f, 0.183481f, -0.035748f, -0.217219f, -0.277907f, -0.149093f, 0.077173f, 0.379104f, 0.268807f, -0.110869f, -0.337248f, -0.322414f, -0.116275f, 0.214108f, 0.405948f, 0.119559f, -0.205668f, -0.360167f, -0.308288f, -0.030463f, 0.224371f, 0.290891f, + 0.230312f, 0.083689f, -0.192198f, -0.256347f, -0.249895f, -0.006398f, 0.133492f, 0.289328f, 0.121189f, 0.013016f, -0.252580f, -0.282690f, -0.023350f, -0.006112f, 0.200784f, 0.265022f, 0.097706f, -0.187679f, -0.257554f, -0.123191f, 0.143874f, 0.318190f, 0.222703f, 0.006171f, -0.175978f, -0.299184f, -0.196664f, 0.081596f, 0.264277f, 0.266021f, -0.041392f, -0.221364f, -0.275588f, -0.198585f, 0.143864f, 0.297232f, 0.244483f, -0.042519f, -0.230431f, -0.266412f, -0.069441f, 0.176026f, 0.242817f, 0.105670f, -0.058095f, -0.091494f, 0.006481f, 0.079556f, 0.051063f, 0.011345f, -0.063851f, -0.023359f, 0.117032f, 0.175189f, 0.150623f, -0.008055f, -0.146025f, -0.202026f, -0.075495f, 0.077481f, 0.244727f, 0.212741f, 0.061630f, -0.111017f, -0.269495f, -0.230027f, 0.040848f, 0.229507f, 0.203636f, 0.057604f, -0.188787f, -0.209641f, -0.097030f, -0.012440f, 0.228649f, 0.213129f, 0.114776f, -0.056545f, -0.171551f, -0.135038f, 0.008104f, 0.094644f, 0.109245f, 0.031083f, -0.042358f, -0.096241f, -0.061876f, -0.001161f, 0.066020f, 0.132764f, 0.071367f, -0.033501f, -0.081855f, -0.092746f, -0.018466f, 0.045010f, + 0.086509f, 0.101242f, 0.042110f, -0.028859f, -0.063454f, -0.029496f, 0.012907f, 0.044474f, 0.028225f, 0.015706f, -0.043059f, -0.082143f, -0.044775f, 0.036787f, 0.083370f, 0.092755f, 0.025675f, -0.110962f, -0.136245f, -0.074590f, 0.022154f, 0.107603f, 0.096543f, 0.032923f, -0.041587f, -0.074610f, -0.043238f, 0.031976f, 0.114357f, 0.096251f, 0.011309f, -0.075988f, -0.137679f, -0.023208f, 0.078534f, 0.307022f, 0.159274f, -0.170167f, -0.368532f, -0.258626f, 0.077972f, 0.339673f, 0.285783f, -0.038908f, -0.323796f, -0.299487f, 0.011876f, 0.295894f, 0.273170f, -0.028462f, -0.279003f, -0.220583f, 0.071685f, 0.249678f, 0.118577f, -0.142453f, -0.181962f, 0.040878f, 0.131885f, -0.009338f, -0.051482f, 0.002209f, 0.009751f, 0.000868f, -0.001002f, -0.000512f, -0.002613f, 0.001675f, 0.000713f, 0.001351f, 0.000432f, 0.000353f, -0.001025f, -0.000304f, 0.001145f, 0.000262f, -0.001746f, 0.000411f, 0.000323f, 0.001006f, -0.000548f, 0.000515f, 0.001958f, 0.000622f, 0.000196f, -0.001542f, -0.001213f, 0.002762f, 0.000766f, 0.003663f, 0.000140f, 0.000560f, -0.000919f, -0.000676f, 0.001502f, 0.002685f} + }, + { + {0.027990f, 0.028005f, 0.028028f, 0.028053f, 0.028063f, 0.028043f, 0.027973f, 0.027831f, 0.027596f, 0.027246f, 0.026761f, 0.026124f, 0.025322f, 0.024348f, 0.023197f, 0.021873f, 0.020385f, 0.018748f, 0.016984f, 0.015119f, 0.013185f, 0.011218f, 0.009255f, 0.007337f, 0.005503f, 0.003793f, 0.002242f, 0.000883f, -0.000256f, -0.001156f, -0.001801f, -0.002185f, -0.002310f, -0.002185f, -0.001828f, -0.001262f, -0.000520f, 0.000362f, 0.001343f, 0.002380f, 0.003425f, 0.004436f, 0.005367f, 0.006178f, 0.006835f, 0.007307f, 0.007572f, 0.007615f, 0.007429f, 0.007017f, 0.006390f, 0.005566f, 0.004572f, 0.003442f, 0.002214f, 0.000931f, -0.000362f, -0.001619f, -0.002794f, -0.003844f, -0.004729f, -0.005417f, -0.005879f, -0.006096f, -0.006056f, -0.005756f, -0.005203f, -0.004411f, -0.003403f, -0.002210f, -0.000868f, 0.000582f, 0.002093f, 0.003620f, 0.005113f, 0.006526f, 0.007817f, 0.008944f, 0.009876f, 0.010585f, 0.011052f, 0.011267f, 0.011226f, 0.010937f, 0.010415f, 0.009680f, 0.008763f, 0.007699f, 0.006527f, 0.005289f, 0.004029f, 0.002790f, 0.001615f, 0.000542f, -0.000394f, -0.001166f, + -0.001750f, -0.002132f, -0.002305f, -0.002271f, -0.002036f, -0.001618f, -0.001038f, -0.000325f, 0.000488f, 0.001367f, 0.002273f, 0.003169f, 0.004016f, 0.004780f, 0.005430f, 0.005940f, 0.006287f, 0.006458f, 0.006444f, 0.006245f, 0.005866f, 0.005321f, 0.004627f, 0.003808f, 0.002892f, 0.001910f, 0.000895f, -0.000121f, -0.001103f, -0.002021f, -0.002849f, -0.003561f, -0.004139f, -0.004570f, -0.004847f, -0.004968f, -0.004939f, -0.004770f, -0.004477f, -0.004080f, -0.003603f, -0.003074f, -0.002519f, -0.001968f, -0.001447f, -0.000983f, -0.000597f, -0.000309f, -0.000133f, -0.000077f, -0.000145f, -0.000334f, -0.000637f, -0.001041f, -0.001528f, -0.002076f, -0.002662f, -0.003258f, -0.003837f, -0.004372f, -0.004836f, -0.005204f, -0.005458f, -0.005580f, -0.005557f, -0.005385f, -0.005060f, -0.004589f, -0.003981f, -0.003251f, -0.002419f, -0.001509f, -0.000546f, 0.000440f, 0.001420f, 0.002365f, 0.003247f, 0.004040f, 0.004721f, 0.005271f, 0.005678f, 0.005931f, 0.006028f, 0.005970f, 0.005766f, 0.005426f, 0.004969f, 0.004416f, 0.003789f, 0.003114f, 0.002420f, 0.001732f, 0.001076f, 0.000478f, -0.000043f, -0.000468f, + -0.000783f, -0.000980f, -0.001055f, -0.001009f, -0.000847f, -0.000579f, -0.000221f, 0.000211f, 0.000697f, 0.001213f, 0.001738f, 0.002249f, 0.002723f, 0.003140f, 0.003485f, 0.003741f, 0.003899f, 0.003954f, 0.003903f, 0.003749f, 0.003500f, 0.003166f, 0.002762f, 0.002305f, 0.001813f, 0.001308f, 0.000810f, 0.000340f, -0.000084f, -0.000445f, -0.000728f, -0.000924f, -0.001023f, -0.001025f, -0.000930f, -0.000742f, -0.000472f, -0.000131f, 0.000265f, 0.000698f, 0.001151f, 0.001602f, 0.002033f, 0.002424f, 0.002760f, 0.003025f, 0.003208f, 0.003302f, -0.032158f, -0.046833f, -0.027272f, -0.016391f, -0.081230f, -0.040334f, -0.044233f, -0.101522f, -0.273682f, -0.111065f, 0.010397f, 0.201649f, -0.125347f, -0.213447f, 0.130225f, 0.239388f, 0.175666f, 0.076501f, -0.046882f, -0.188087f, -0.040587f, -0.052777f, 0.136348f, 0.108998f, 0.071914f, -0.078411f, 0.045397f, -0.025762f, 0.050736f, -0.061556f, -0.071913f, 0.045355f, 0.114936f, 0.162979f, 0.108390f, -0.007783f, -0.125580f, -0.119828f, -0.037017f, 0.054773f, 0.129187f, 0.087269f, 0.057169f, 0.039024f, -0.049536f, -0.025118f, -0.030408f, 0.015725f, + 0.014511f, -0.054591f, 0.039370f, 0.037187f, 0.051297f, 0.003383f, -0.048966f, -0.114383f, -0.048045f, 0.074534f, 0.218755f, 0.143640f, 0.038173f, -0.095445f, -0.194052f, -0.153489f, 0.019498f, 0.123819f, 0.178131f, 0.009808f, -0.137529f, -0.191101f, 0.004305f, 0.185018f, 0.250203f, 0.051325f, -0.212989f, -0.330886f, -0.161339f, 0.151261f, 0.362329f, 0.321536f, 0.032559f, -0.246685f, -0.404872f, -0.251175f, 0.091372f, 0.306711f, 0.310470f, 0.099365f, -0.202046f, -0.326032f, -0.218682f, 0.036550f, 0.204057f, 0.201308f, 0.102938f, -0.067942f, -0.154368f, -0.121237f, -0.025975f, 0.115722f, 0.134627f, 0.085124f, 0.012716f, -0.032068f, -0.114969f, -0.153559f, -0.113738f, 0.035265f, 0.140270f, 0.195745f, 0.081435f, -0.058531f, -0.181768f, -0.164670f, -0.051989f, 0.061720f, 0.209701f, 0.162171f, 0.046233f, -0.137134f, -0.169130f, -0.078092f, -0.023700f, 0.073608f, 0.104920f, 0.089401f, 0.026370f, -0.049912f, -0.109171f, -0.100252f, -0.030372f, 0.043768f, 0.094858f, 0.073096f, -0.005715f, -0.114473f, -0.092123f, -0.033089f, 0.022771f, 0.051720f, 0.027033f, -0.004410f, -0.027660f, -0.007557f, + 0.027030f, 0.040251f, 0.030178f, 0.001408f, -0.064907f, -0.059277f, -0.034878f, -0.000683f, 0.038725f, 0.067961f, 0.032636f, -0.049619f, -0.082172f, -0.062792f, -0.004106f, 0.059555f, 0.079096f, -0.021453f, -0.069399f, -0.083642f, -0.036959f, 0.020946f, 0.051561f, 0.063735f, 0.038631f, -0.019134f, -0.069186f, -0.066851f, 0.020319f, 0.047934f, 0.055697f, 0.006777f, -0.062843f, -0.056647f, -0.069231f, -0.023056f, 0.100717f, 0.119971f, 0.035186f, -0.092918f, -0.130130f, -0.047746f, 0.082491f, 0.122115f, 0.041456f, -0.078171f, -0.114526f, -0.039584f, 0.073601f, 0.096201f, 0.018784f, -0.079570f, -0.080645f, 0.002115f, 0.071886f, 0.041651f, -0.042178f, -0.050420f, 0.017227f, 0.025339f, -0.007606f, -0.011025f, 0.000787f, -0.002242f, -0.003983f, -0.003079f, 0.001395f, -0.000121f, -0.002287f, -0.003160f, -0.002294f, -0.002673f, -0.001601f, -0.002908f, -0.003412f, -0.001842f, -0.000148f, -0.002231f, -0.002496f, -0.003088f, -0.001460f, -0.001897f, -0.001890f, -0.000061f, -0.002011f, -0.002058f, -0.002790f, -0.001119f, -0.001602f, -0.004154f, -0.003795f, -0.001532f, -0.000538f, -0.001093f, -0.001079f, -0.003076f}, + {-0.027990f, -0.028005f, -0.028028f, -0.028053f, -0.028063f, -0.028043f, -0.027973f, -0.027831f, -0.027596f, -0.027246f, -0.026761f, -0.026124f, -0.025322f, -0.024348f, -0.023197f, -0.021873f, -0.020385f, -0.018748f, -0.016984f, -0.015119f, -0.013185f, -0.011218f, -0.009255f, -0.007337f, -0.005503f, -0.003793f, -0.002242f, -0.000883f, 0.000256f, 0.001156f, 0.001801f, 0.002185f, 0.002310f, 0.002185f, 0.001828f, 0.001262f, 0.000520f, -0.000362f, -0.001343f, -0.002380f, -0.003425f, -0.004436f, -0.005367f, -0.006178f, -0.006835f, -0.007307f, -0.007572f, -0.007615f, -0.007429f, -0.007017f, -0.006390f, -0.005566f, -0.004572f, -0.003442f, -0.002214f, -0.000931f, 0.000362f, 0.001619f, 0.002794f, 0.003844f, 0.004729f, 0.005417f, 0.005879f, 0.006096f, 0.006056f, 0.005756f, 0.005203f, 0.004411f, 0.003403f, 0.002210f, 0.000868f, -0.000582f, -0.002093f, -0.003620f, -0.005113f, -0.006526f, -0.007817f, -0.008944f, -0.009876f, -0.010585f, -0.011052f, -0.011267f, -0.011226f, -0.010937f, -0.010415f, -0.009680f, -0.008763f, -0.007699f, -0.006527f, -0.005289f, -0.004029f, -0.002790f, -0.001615f, -0.000542f, 0.000394f, 0.001166f, + 0.001750f, 0.002132f, 0.002305f, 0.002271f, 0.002036f, 0.001618f, 0.001038f, 0.000325f, -0.000488f, -0.001367f, -0.002273f, -0.003169f, -0.004016f, -0.004780f, -0.005430f, -0.005940f, -0.006287f, -0.006458f, -0.006444f, -0.006245f, -0.005866f, -0.005321f, -0.004627f, -0.003808f, -0.002892f, -0.001910f, -0.000895f, 0.000121f, 0.001103f, 0.002021f, 0.002849f, 0.003561f, 0.004139f, 0.004570f, 0.004847f, 0.004968f, 0.004939f, 0.004770f, 0.004477f, 0.004080f, 0.003603f, 0.003074f, 0.002519f, 0.001968f, 0.001447f, 0.000983f, 0.000597f, 0.000309f, 0.000133f, 0.000077f, 0.000145f, 0.000334f, 0.000637f, 0.001041f, 0.001528f, 0.002076f, 0.002662f, 0.003258f, 0.003837f, 0.004372f, 0.004836f, 0.005204f, 0.005458f, 0.005580f, 0.005557f, 0.005385f, 0.005060f, 0.004589f, 0.003981f, 0.003251f, 0.002419f, 0.001509f, 0.000546f, -0.000440f, -0.001420f, -0.002365f, -0.003247f, -0.004040f, -0.004721f, -0.005271f, -0.005678f, -0.005931f, -0.006028f, -0.005970f, -0.005766f, -0.005426f, -0.004969f, -0.004416f, -0.003789f, -0.003114f, -0.002420f, -0.001732f, -0.001076f, -0.000478f, 0.000043f, 0.000468f, + 0.000783f, 0.000980f, 0.001055f, 0.001009f, 0.000847f, 0.000579f, 0.000221f, -0.000211f, -0.000697f, -0.001213f, -0.001738f, -0.002249f, -0.002723f, -0.003140f, -0.003485f, -0.003741f, -0.003899f, -0.003954f, -0.003903f, -0.003749f, -0.003500f, -0.003166f, -0.002762f, -0.002305f, -0.001813f, -0.001308f, -0.000810f, -0.000340f, 0.000084f, 0.000445f, 0.000728f, 0.000924f, 0.001023f, 0.001025f, 0.000930f, 0.000742f, 0.000472f, 0.000131f, -0.000265f, -0.000698f, -0.001151f, -0.001602f, -0.002033f, -0.002424f, -0.002760f, -0.003025f, -0.003208f, -0.003302f, 0.032158f, 0.046833f, 0.027272f, 0.016391f, 0.081230f, 0.040334f, 0.044233f, 0.101522f, 0.273682f, 0.111065f, -0.010397f, -0.201649f, 0.125347f, 0.213447f, -0.130225f, -0.239388f, -0.175666f, -0.076501f, 0.046882f, 0.188087f, 0.040587f, 0.052777f, -0.136348f, -0.108998f, -0.071914f, 0.078411f, -0.045397f, 0.025762f, -0.050736f, 0.061556f, 0.071913f, -0.045355f, -0.114936f, -0.162979f, -0.108390f, 0.007783f, 0.125580f, 0.119828f, 0.037017f, -0.054773f, -0.129187f, -0.087269f, -0.057169f, -0.039024f, 0.049536f, 0.025118f, 0.030408f, -0.015725f, + -0.014511f, 0.054591f, -0.039370f, -0.037187f, -0.051297f, -0.003383f, 0.048966f, 0.114383f, 0.048045f, -0.074534f, -0.218755f, -0.143640f, -0.038173f, 0.095445f, 0.194052f, 0.153489f, -0.019498f, -0.123819f, -0.178131f, -0.009808f, 0.137529f, 0.191101f, -0.004305f, -0.185018f, -0.250203f, -0.051325f, 0.212989f, 0.330886f, 0.161339f, -0.151261f, -0.362329f, -0.321536f, -0.032559f, 0.246685f, 0.404872f, 0.251175f, -0.091372f, -0.306711f, -0.310470f, -0.099365f, 0.202046f, 0.326032f, 0.218682f, -0.036550f, -0.204057f, -0.201308f, -0.102938f, 0.067942f, 0.154368f, 0.121237f, 0.025975f, -0.115722f, -0.134627f, -0.085124f, -0.012716f, 0.032068f, 0.114969f, 0.153559f, 0.113738f, -0.035265f, -0.140270f, -0.195745f, -0.081435f, 0.058531f, 0.181768f, 0.164670f, 0.051989f, -0.061720f, -0.209701f, -0.162171f, -0.046233f, 0.137134f, 0.169130f, 0.078092f, 0.023700f, -0.073608f, -0.104920f, -0.089401f, -0.026370f, 0.049912f, 0.109171f, 0.100252f, 0.030372f, -0.043768f, -0.094858f, -0.073096f, 0.005715f, 0.114473f, 0.092123f, 0.033089f, -0.022771f, -0.051720f, -0.027033f, 0.004410f, 0.027660f, 0.007557f, + -0.027030f, -0.040251f, -0.030178f, -0.001408f, 0.064907f, 0.059277f, 0.034878f, 0.000683f, -0.038725f, -0.067961f, -0.032636f, 0.049619f, 0.082172f, 0.062792f, 0.004106f, -0.059555f, -0.079096f, 0.021453f, 0.069399f, 0.083642f, 0.036959f, -0.020946f, -0.051561f, -0.063735f, -0.038631f, 0.019134f, 0.069186f, 0.066851f, -0.020319f, -0.047934f, -0.055697f, -0.006777f, 0.062843f, 0.056647f, 0.069231f, 0.023056f, -0.100717f, -0.119971f, -0.035186f, 0.092918f, 0.130130f, 0.047746f, -0.082491f, -0.122115f, -0.041456f, 0.078171f, 0.114526f, 0.039584f, -0.073601f, -0.096201f, -0.018784f, 0.079570f, 0.080645f, -0.002115f, -0.071886f, -0.041651f, 0.042178f, 0.050420f, -0.017227f, -0.025339f, 0.007606f, 0.011025f, -0.000787f, 0.002242f, 0.003983f, 0.003079f, -0.001395f, 0.000121f, 0.002287f, 0.003160f, 0.002294f, 0.002673f, 0.001601f, 0.002908f, 0.003412f, 0.001842f, 0.000148f, 0.002231f, 0.002496f, 0.003088f, 0.001460f, 0.001897f, 0.001890f, 0.000061f, 0.002011f, 0.002058f, 0.002790f, 0.001119f, 0.001602f, 0.004154f, 0.003795f, 0.001532f, 0.000538f, 0.001093f, 0.001079f, 0.003076f} + }, + { + {0.025610f, 0.025966f, 0.026661f, 0.027659f, 0.028909f, 0.030346f, 0.031894f, 0.033470f, 0.034985f, 0.036349f, 0.037476f, 0.038287f, 0.038710f, 0.038690f, 0.038186f, 0.037173f, 0.035647f, 0.033624f, 0.031139f, 0.028244f, 0.025013f, 0.021529f, 0.017890f, 0.014204f, 0.010581f, 0.007134f, 0.003970f, 0.001193f, -0.001109f, -0.002859f, -0.003998f, -0.004489f, -0.004315f, -0.003483f, -0.002021f, 0.000018f, 0.002563f, 0.005523f, 0.008791f, 0.012247f, 0.015764f, 0.019211f, 0.022455f, 0.025371f, 0.027839f, 0.029756f, 0.031033f, 0.031602f, 0.031415f, 0.030452f, 0.028713f, 0.026225f, 0.023040f, 0.019230f, 0.014888f, 0.010125f, 0.005062f, -0.000166f, -0.005423f, -0.010571f, -0.015474f, -0.020008f, -0.024058f, -0.027526f, -0.030333f, -0.032420f, -0.033753f, -0.034319f, -0.034130f, -0.033220f, -0.031645f, -0.029479f, -0.026815f, -0.023755f, -0.020413f, -0.016907f, -0.013358f, -0.009882f, -0.006589f, -0.003579f, -0.000938f, 0.001262f, 0.002970f, 0.004152f, 0.004794f, 0.004902f, 0.004503f, 0.003637f, 0.002365f, 0.000756f, -0.001107f, -0.003138f, -0.005245f, -0.007337f, -0.009326f, -0.011131f, + -0.012679f, -0.013911f, -0.014781f, -0.015257f, -0.015323f, -0.014980f, -0.014243f, -0.013143f, -0.011724f, -0.010039f, -0.008152f, -0.006131f, -0.004050f, -0.001979f, 0.000009f, 0.001850f, 0.003486f, 0.004868f, 0.005959f, 0.006734f, 0.007179f, 0.007297f, 0.007101f, 0.006614f, 0.005874f, 0.004926f, 0.003819f, 0.002613f, 0.001364f, 0.000132f, -0.001026f, -0.002059f, -0.002919f, -0.003571f, -0.003985f, -0.004144f, -0.004040f, -0.003677f, -0.003070f, -0.002242f, -0.001225f, -0.000058f, 0.001213f, 0.002541f, 0.003876f, 0.005170f, 0.006377f, 0.007455f, 0.008368f, 0.009087f, 0.009593f, 0.009873f, 0.009925f, 0.009757f, 0.009381f, 0.008822f, 0.008109f, 0.007275f, 0.006358f, 0.005397f, 0.004431f, 0.003499f, 0.002634f, 0.001865f, 0.001217f, 0.000706f, 0.000341f, 0.000123f, 0.000045f, 0.000094f, 0.000248f, 0.000483f, 0.000766f, 0.001064f, 0.001343f, 0.001568f, 0.001707f, 0.001730f, 0.001613f, 0.001339f, 0.000896f, 0.000281f, -0.000500f, -0.001435f, -0.002504f, -0.003679f, -0.004926f, -0.006208f, -0.007483f, -0.008708f, -0.009840f, -0.010839f, -0.011667f, -0.012292f, -0.012687f, -0.012836f, + -0.012728f, -0.012362f, -0.011747f, -0.010900f, -0.009847f, -0.008622f, -0.007264f, -0.005817f, -0.004330f, -0.002852f, -0.001433f, -0.000118f, 0.001048f, 0.002029f, 0.002793f, 0.003319f, 0.003593f, 0.003610f, 0.003377f, 0.002907f, 0.002226f, 0.001363f, 0.000358f, -0.000748f, -0.001907f, -0.003072f, -0.004195f, -0.005231f, -0.006137f, -0.006877f, -0.007423f, -0.007752f, -0.007852f, -0.007721f, -0.007363f, -0.006795f, -0.006040f, -0.005128f, -0.004097f, -0.002990f, -0.001850f, -0.000725f, 0.000341f, 0.001304f, 0.002126f, 0.002773f, 0.003220f, 0.003448f, -0.062172f, -0.091515f, -0.072763f, 0.070171f, -0.008941f, -0.099493f, -0.108939f, -0.147460f, -0.248276f, -0.178114f, -0.034602f, 0.058273f, -0.136470f, -0.217398f, 0.034715f, -0.063726f, -0.030817f, 0.068934f, 0.197802f, 0.101927f, -0.063032f, 0.004692f, -0.071259f, -0.096027f, -0.035763f, 0.098619f, 0.375310f, 0.252493f, 0.089705f, -0.043696f, -0.173499f, -0.130961f, -0.135621f, 0.295667f, 0.451114f, 0.238014f, -0.127549f, -0.279218f, -0.349355f, -0.078250f, 0.363353f, 0.168766f, 0.174663f, -0.032703f, -0.169587f, -0.097054f, 0.223490f, 0.428374f, + 0.231674f, -0.343396f, -0.481211f, -0.423973f, 0.047945f, 0.399053f, 0.562478f, 0.255866f, -0.070070f, -0.423145f, -0.236500f, -0.018686f, -0.046020f, 0.340138f, 0.153029f, -0.135824f, -0.140186f, 0.214839f, -0.119183f, -0.258816f, -0.374971f, -0.158821f, -0.013087f, 0.153132f, 0.104243f, 0.158932f, 0.044119f, -0.046752f, -0.113389f, -0.220468f, -0.152913f, 0.054289f, 0.156006f, 0.099701f, -0.178202f, -0.297953f, -0.100918f, 0.255658f, 0.470123f, 0.279739f, -0.145172f, -0.515016f, -0.514805f, -0.096374f, 0.448823f, 0.583482f, 0.312449f, -0.142389f, -0.399044f, -0.480280f, -0.057314f, 0.187400f, 0.276702f, 0.141990f, -0.082796f, -0.258281f, -0.248877f, -0.048325f, 0.214102f, 0.309213f, 0.187387f, -0.075422f, -0.272167f, -0.307918f, -0.178783f, 0.017618f, 0.249229f, 0.359000f, 0.148202f, -0.155440f, -0.409498f, -0.358952f, 0.002647f, 0.262971f, 0.388537f, 0.274792f, -0.088734f, -0.362447f, -0.397575f, -0.155395f, 0.151434f, 0.411319f, 0.362653f, 0.063857f, -0.326209f, -0.457817f, -0.329221f, 0.056563f, 0.384616f, 0.475754f, 0.182653f, -0.249120f, -0.487117f, -0.387725f, -0.025216f, 0.349249f, + 0.481058f, 0.269217f, -0.158897f, -0.449593f, -0.425922f, -0.091493f, 0.271958f, 0.425929f, 0.250062f, -0.106214f, -0.344123f, -0.310552f, -0.025361f, 0.232261f, 0.363327f, 0.161035f, -0.124671f, -0.269196f, -0.227176f, -0.012995f, 0.217935f, 0.279720f, 0.129086f, -0.129026f, -0.289828f, -0.227366f, 0.023489f, 0.232246f, 0.260926f, 0.106217f, -0.139601f, -0.247048f, -0.130607f, 0.058323f, 0.220883f, 0.327093f, -0.092404f, -0.398289f, -0.395170f, -0.061263f, 0.279569f, 0.361623f, 0.113971f, -0.221012f, -0.353200f, -0.168261f, 0.140828f, 0.292861f, 0.150711f, -0.131760f, -0.261245f, -0.124104f, 0.114667f, 0.191874f, 0.040400f, -0.139259f, -0.123195f, 0.038250f, 0.082579f, -0.012815f, -0.041801f, -0.007158f, -0.000334f, -0.005782f, -0.007424f, -0.006915f, -0.006995f, -0.005584f, -0.005366f, -0.006011f, -0.006448f, -0.006286f, -0.007543f, -0.005083f, -0.006372f, -0.005205f, -0.007209f, -0.007291f, -0.006362f, -0.005063f, -0.005453f, -0.008310f, -0.005609f, -0.004844f, -0.006088f, -0.005906f, -0.005358f, -0.006688f, -0.004550f, -0.004954f, -0.007725f, -0.006471f, -0.004609f, -0.004685f, -0.004876f, -0.007015f}, + {0.025610f, 0.025966f, 0.026661f, 0.027659f, 0.028909f, 0.030346f, 0.031894f, 0.033470f, 0.034985f, 0.036349f, 0.037476f, 0.038287f, 0.038710f, 0.038690f, 0.038186f, 0.037173f, 0.035647f, 0.033624f, 0.031139f, 0.028244f, 0.025013f, 0.021529f, 0.017890f, 0.014204f, 0.010581f, 0.007134f, 0.003970f, 0.001193f, -0.001109f, -0.002859f, -0.003998f, -0.004489f, -0.004315f, -0.003483f, -0.002021f, 0.000018f, 0.002563f, 0.005523f, 0.008791f, 0.012247f, 0.015764f, 0.019211f, 0.022455f, 0.025371f, 0.027839f, 0.029756f, 0.031033f, 0.031602f, 0.031415f, 0.030452f, 0.028713f, 0.026225f, 0.023040f, 0.019230f, 0.014888f, 0.010125f, 0.005062f, -0.000166f, -0.005423f, -0.010571f, -0.015474f, -0.020008f, -0.024058f, -0.027526f, -0.030333f, -0.032420f, -0.033753f, -0.034319f, -0.034130f, -0.033220f, -0.031645f, -0.029479f, -0.026815f, -0.023755f, -0.020413f, -0.016907f, -0.013358f, -0.009882f, -0.006589f, -0.003579f, -0.000938f, 0.001262f, 0.002970f, 0.004152f, 0.004794f, 0.004902f, 0.004503f, 0.003637f, 0.002365f, 0.000756f, -0.001107f, -0.003138f, -0.005245f, -0.007337f, -0.009326f, -0.011131f, + -0.012679f, -0.013911f, -0.014781f, -0.015257f, -0.015323f, -0.014980f, -0.014243f, -0.013143f, -0.011724f, -0.010039f, -0.008152f, -0.006131f, -0.004050f, -0.001979f, 0.000009f, 0.001850f, 0.003486f, 0.004868f, 0.005959f, 0.006734f, 0.007179f, 0.007297f, 0.007101f, 0.006614f, 0.005874f, 0.004926f, 0.003819f, 0.002613f, 0.001364f, 0.000132f, -0.001026f, -0.002059f, -0.002919f, -0.003571f, -0.003985f, -0.004144f, -0.004040f, -0.003677f, -0.003070f, -0.002242f, -0.001225f, -0.000058f, 0.001213f, 0.002541f, 0.003876f, 0.005170f, 0.006377f, 0.007455f, 0.008368f, 0.009087f, 0.009593f, 0.009873f, 0.009925f, 0.009757f, 0.009381f, 0.008822f, 0.008109f, 0.007275f, 0.006358f, 0.005397f, 0.004431f, 0.003499f, 0.002634f, 0.001865f, 0.001217f, 0.000706f, 0.000341f, 0.000123f, 0.000045f, 0.000094f, 0.000248f, 0.000483f, 0.000766f, 0.001064f, 0.001343f, 0.001568f, 0.001707f, 0.001730f, 0.001613f, 0.001339f, 0.000896f, 0.000281f, -0.000500f, -0.001435f, -0.002504f, -0.003679f, -0.004926f, -0.006208f, -0.007483f, -0.008708f, -0.009840f, -0.010839f, -0.011667f, -0.012292f, -0.012687f, -0.012836f, + -0.012728f, -0.012362f, -0.011747f, -0.010900f, -0.009847f, -0.008622f, -0.007264f, -0.005817f, -0.004330f, -0.002852f, -0.001433f, -0.000118f, 0.001048f, 0.002029f, 0.002793f, 0.003319f, 0.003593f, 0.003610f, 0.003377f, 0.002907f, 0.002226f, 0.001363f, 0.000358f, -0.000748f, -0.001907f, -0.003072f, -0.004195f, -0.005231f, -0.006137f, -0.006877f, -0.007423f, -0.007752f, -0.007852f, -0.007721f, -0.007363f, -0.006795f, -0.006040f, -0.005128f, -0.004097f, -0.002990f, -0.001850f, -0.000725f, 0.000341f, 0.001304f, 0.002126f, 0.002773f, 0.003220f, 0.003448f, -0.062172f, -0.091515f, -0.072763f, 0.070171f, -0.008941f, -0.099493f, -0.108939f, -0.147460f, -0.248276f, -0.178114f, -0.034602f, 0.058273f, -0.136470f, -0.217398f, 0.034715f, -0.063726f, -0.030817f, 0.068934f, 0.197802f, 0.101927f, -0.063032f, 0.004692f, -0.071259f, -0.096027f, -0.035763f, 0.098619f, 0.375310f, 0.252493f, 0.089705f, -0.043696f, -0.173499f, -0.130961f, -0.135621f, 0.295667f, 0.451114f, 0.238014f, -0.127549f, -0.279218f, -0.349355f, -0.078250f, 0.363353f, 0.168766f, 0.174663f, -0.032703f, -0.169587f, -0.097054f, 0.223490f, 0.428374f, + 0.231674f, -0.343396f, -0.481211f, -0.423973f, 0.047945f, 0.399053f, 0.562478f, 0.255866f, -0.070070f, -0.423145f, -0.236500f, -0.018686f, -0.046020f, 0.340138f, 0.153029f, -0.135824f, -0.140186f, 0.214839f, -0.119183f, -0.258816f, -0.374971f, -0.158821f, -0.013087f, 0.153132f, 0.104243f, 0.158932f, 0.044119f, -0.046752f, -0.113389f, -0.220468f, -0.152913f, 0.054289f, 0.156006f, 0.099701f, -0.178202f, -0.297953f, -0.100918f, 0.255658f, 0.470123f, 0.279739f, -0.145172f, -0.515016f, -0.514805f, -0.096374f, 0.448823f, 0.583482f, 0.312449f, -0.142389f, -0.399044f, -0.480280f, -0.057314f, 0.187400f, 0.276702f, 0.141990f, -0.082796f, -0.258281f, -0.248877f, -0.048325f, 0.214102f, 0.309213f, 0.187387f, -0.075422f, -0.272167f, -0.307918f, -0.178783f, 0.017618f, 0.249229f, 0.359000f, 0.148202f, -0.155440f, -0.409498f, -0.358952f, 0.002647f, 0.262971f, 0.388537f, 0.274792f, -0.088734f, -0.362447f, -0.397575f, -0.155395f, 0.151434f, 0.411319f, 0.362653f, 0.063857f, -0.326209f, -0.457817f, -0.329221f, 0.056563f, 0.384616f, 0.475754f, 0.182653f, -0.249120f, -0.487117f, -0.387725f, -0.025216f, 0.349249f, + 0.481058f, 0.269217f, -0.158897f, -0.449593f, -0.425922f, -0.091493f, 0.271958f, 0.425929f, 0.250062f, -0.106214f, -0.344123f, -0.310552f, -0.025361f, 0.232261f, 0.363327f, 0.161035f, -0.124671f, -0.269196f, -0.227176f, -0.012995f, 0.217935f, 0.279720f, 0.129086f, -0.129026f, -0.289828f, -0.227366f, 0.023489f, 0.232246f, 0.260926f, 0.106217f, -0.139601f, -0.247048f, -0.130607f, 0.058323f, 0.220883f, 0.327093f, -0.092404f, -0.398289f, -0.395170f, -0.061263f, 0.279569f, 0.361623f, 0.113971f, -0.221012f, -0.353200f, -0.168261f, 0.140828f, 0.292861f, 0.150711f, -0.131760f, -0.261245f, -0.124104f, 0.114667f, 0.191874f, 0.040400f, -0.139259f, -0.123195f, 0.038250f, 0.082579f, -0.012815f, -0.041801f, -0.007158f, -0.000334f, -0.005782f, -0.007424f, -0.006915f, -0.006995f, -0.005584f, -0.005366f, -0.006011f, -0.006448f, -0.006286f, -0.007543f, -0.005083f, -0.006372f, -0.005205f, -0.007209f, -0.007291f, -0.006362f, -0.005063f, -0.005453f, -0.008310f, -0.005609f, -0.004844f, -0.006088f, -0.005906f, -0.005358f, -0.006688f, -0.004550f, -0.004954f, -0.007725f, -0.006471f, -0.004609f, -0.004685f, -0.004876f, -0.007015f} + }, + { + {0.047152f, 0.046419f, 0.044975f, 0.042863f, 0.040145f, 0.036900f, 0.033224f, 0.029222f, 0.025009f, 0.020704f, 0.016426f, 0.012291f, 0.008408f, 0.004875f, 0.001776f, -0.000820f, -0.002863f, -0.004323f, -0.005190f, -0.005475f, -0.005207f, -0.004435f, -0.003223f, -0.001648f, 0.000201f, 0.002228f, 0.004334f, 0.006419f, 0.008387f, 0.010150f, 0.011629f, 0.012757f, 0.013484f, 0.013775f, 0.013613f, 0.013002f, 0.011961f, 0.010526f, 0.008751f, 0.006702f, 0.004456f, 0.002098f, -0.000281f, -0.002589f, -0.004736f, -0.006636f, -0.008212f, -0.009397f, -0.010137f, -0.010395f, -0.010148f, -0.009391f, -0.008135f, -0.006409f, -0.004258f, -0.001740f, 0.001075f, 0.004108f, 0.007272f, 0.010478f, 0.013635f, 0.016655f, 0.019455f, 0.021961f, 0.024107f, 0.025844f, 0.027131f, 0.027947f, 0.028283f, 0.028147f, 0.027560f, 0.026559f, 0.025189f, 0.023509f, 0.021583f, 0.019480f, 0.017274f, 0.015037f, 0.012837f, 0.010740f, 0.008803f, 0.007073f, 0.005589f, 0.004377f, 0.003450f, 0.002810f, 0.002447f, 0.002341f, 0.002460f, 0.002767f, 0.003215f, 0.003756f, 0.004338f, 0.004910f, 0.005423f, 0.005832f, + 0.006099f, 0.006192f, 0.006090f, 0.005779f, 0.005258f, 0.004533f, 0.003622f, 0.002551f, 0.001353f, 0.000070f, -0.001256f, -0.002575f, -0.003840f, -0.005004f, -0.006021f, -0.006853f, -0.007466f, -0.007835f, -0.007943f, -0.007781f, -0.007353f, -0.006669f, -0.005750f, -0.004625f, -0.003331f, -0.001908f, -0.000405f, 0.001131f, 0.002649f, 0.004102f, 0.005442f, 0.006629f, 0.007626f, 0.008406f, 0.008947f, 0.009238f, 0.009276f, 0.009066f, 0.008622f, 0.007967f, 0.007129f, 0.006142f, 0.005045f, 0.003878f, 0.002683f, 0.001502f, 0.000374f, -0.000666f, -0.001588f, -0.002367f, -0.002985f, -0.003431f, -0.003702f, -0.003802f, -0.003741f, -0.003538f, -0.003215f, -0.002797f, -0.002316f, -0.001801f, -0.001286f, -0.000799f, -0.000370f, -0.000021f, 0.000228f, 0.000362f, 0.000375f, 0.000264f, 0.000034f, -0.000302f, -0.000729f, -0.001224f, -0.001762f, -0.002315f, -0.002853f, -0.003344f, -0.003760f, -0.004075f, -0.004263f, -0.004307f, -0.004193f, -0.003914f, -0.003467f, -0.002860f, -0.002103f, -0.001214f, -0.000217f, 0.000860f, 0.001987f, 0.003130f, 0.004254f, 0.005325f, 0.006310f, 0.007179f, 0.007908f, 0.008474f, + 0.008862f, 0.009065f, 0.009080f, 0.008910f, 0.008569f, 0.008071f, 0.007441f, 0.006704f, 0.005891f, 0.005035f, 0.004169f, 0.003326f, 0.002538f, 0.001833f, 0.001236f, 0.000767f, 0.000440f, 0.000265f, 0.000243f, 0.000370f, 0.000636f, 0.001026f, 0.001519f, 0.002091f, 0.002714f, 0.003360f, 0.004000f, 0.004604f, 0.005146f, 0.005601f, 0.005950f, 0.006177f, 0.006272f, 0.006232f, 0.006057f, 0.005755f, 0.005338f, 0.004825f, 0.004237f, 0.003598f, 0.002936f, 0.002278f, 0.001651f, 0.001083f, 0.000598f, 0.000214f, -0.000051f, -0.000186f, -0.014399f, -0.088918f, -0.104568f, 0.033774f, 0.006889f, -0.014211f, -0.339412f, -0.200382f, -0.197825f, -0.256243f, -0.049747f, 0.153723f, 0.189341f, 0.030845f, 0.049345f, 0.023389f, 0.124600f, -0.055314f, 0.034364f, 0.042592f, 0.009443f, 0.028243f, 0.002752f, -0.002188f, 0.008221f, -0.011938f, -0.027058f, 0.014048f, 0.003354f, -0.058375f, -0.073083f, -0.034868f, 0.005558f, -0.010350f, -0.046182f, -0.010972f, 0.053029f, 0.157632f, 0.016291f, -0.057067f, -0.213388f, 0.018673f, 0.169634f, 0.193574f, 0.145085f, -0.084971f, -0.237624f, -0.226809f, + -0.110297f, 0.096854f, 0.213419f, 0.198516f, 0.019172f, -0.167969f, -0.238403f, -0.157229f, -0.008594f, 0.166266f, 0.146397f, 0.056850f, 0.078227f, -0.230405f, -0.182536f, -0.000273f, 0.081119f, -0.082448f, 0.310260f, 0.369648f, 0.327330f, -0.054515f, -0.303985f, -0.330843f, 0.023930f, 0.249376f, 0.283462f, 0.082354f, -0.210615f, -0.253664f, -0.298859f, -0.051273f, 0.258919f, 0.344791f, 0.212825f, -0.062716f, -0.254123f, -0.228433f, 0.024020f, 0.174971f, 0.169038f, -0.016732f, -0.152145f, -0.181161f, -0.026750f, 0.108313f, 0.105190f, 0.005511f, -0.080886f, -0.175720f, -0.053616f, 0.124221f, 0.328626f, 0.269120f, -0.012363f, -0.366991f, -0.418201f, -0.179777f, 0.226324f, 0.502263f, 0.469250f, 0.157321f, -0.343881f, -0.631262f, -0.403278f, 0.113845f, 0.477319f, 0.374508f, -0.060622f, -0.349411f, -0.409097f, -0.083539f, 0.217155f, 0.263939f, 0.250254f, -0.057498f, -0.154273f, -0.182069f, -0.042848f, 0.108637f, 0.149146f, 0.048201f, -0.034839f, -0.113656f, -0.076942f, 0.021116f, 0.113304f, 0.085027f, 0.004350f, -0.092580f, -0.102413f, -0.029857f, 0.069689f, 0.114991f, 0.094846f, -0.030280f, + -0.136362f, -0.139061f, -0.036977f, 0.094935f, 0.173700f, 0.157429f, 0.014736f, -0.146953f, -0.191168f, -0.145844f, -0.001188f, 0.157952f, 0.198629f, 0.089918f, -0.075089f, -0.194002f, -0.170286f, -0.047141f, 0.122563f, 0.190138f, 0.123703f, -0.025843f, -0.186317f, -0.197764f, -0.034739f, 0.119741f, 0.200216f, 0.110432f, -0.010105f, -0.153690f, -0.166144f, -0.039158f, 0.099676f, 0.143215f, 0.059367f, -0.190863f, -0.163854f, 0.031416f, 0.208956f, 0.221929f, 0.042610f, -0.164837f, -0.219071f, -0.058930f, 0.162295f, 0.234901f, 0.081855f, -0.143458f, -0.211225f, -0.049183f, 0.162727f, 0.191917f, 0.007000f, -0.167170f, -0.118384f, 0.082358f, 0.149077f, -0.009682f, -0.097921f, 0.005018f, 0.046167f, 0.000346f, -0.005773f, 0.003501f, 0.005151f, 0.002723f, 0.003190f, 0.002225f, 0.003858f, 0.003725f, 0.004658f, 0.004453f, 0.001746f, 0.003153f, 0.002864f, 0.003655f, 0.003188f, 0.003292f, 0.001931f, 0.002658f, 0.001276f, 0.002184f, 0.003202f, 0.006402f, 0.002000f, 0.002265f, 0.000766f, 0.003939f, 0.004158f, 0.002916f, 0.002643f, 0.001368f, 0.002446f, 0.003088f, 0.003033f, 0.003336f}, + {0.047152f, 0.046419f, 0.044975f, 0.042863f, 0.040145f, 0.036900f, 0.033224f, 0.029222f, 0.025009f, 0.020704f, 0.016426f, 0.012291f, 0.008408f, 0.004875f, 0.001776f, -0.000820f, -0.002863f, -0.004323f, -0.005190f, -0.005475f, -0.005207f, -0.004435f, -0.003223f, -0.001648f, 0.000201f, 0.002228f, 0.004334f, 0.006419f, 0.008387f, 0.010150f, 0.011629f, 0.012757f, 0.013484f, 0.013775f, 0.013613f, 0.013002f, 0.011961f, 0.010526f, 0.008751f, 0.006702f, 0.004456f, 0.002098f, -0.000281f, -0.002589f, -0.004736f, -0.006636f, -0.008212f, -0.009397f, -0.010137f, -0.010395f, -0.010148f, -0.009391f, -0.008135f, -0.006409f, -0.004258f, -0.001740f, 0.001075f, 0.004108f, 0.007272f, 0.010478f, 0.013635f, 0.016655f, 0.019455f, 0.021961f, 0.024107f, 0.025844f, 0.027131f, 0.027947f, 0.028283f, 0.028147f, 0.027560f, 0.026559f, 0.025189f, 0.023509f, 0.021583f, 0.019480f, 0.017274f, 0.015037f, 0.012837f, 0.010740f, 0.008803f, 0.007073f, 0.005589f, 0.004377f, 0.003450f, 0.002810f, 0.002447f, 0.002341f, 0.002460f, 0.002767f, 0.003215f, 0.003756f, 0.004338f, 0.004910f, 0.005423f, 0.005832f, + 0.006099f, 0.006192f, 0.006090f, 0.005779f, 0.005258f, 0.004533f, 0.003622f, 0.002551f, 0.001353f, 0.000070f, -0.001256f, -0.002575f, -0.003840f, -0.005004f, -0.006021f, -0.006853f, -0.007466f, -0.007835f, -0.007943f, -0.007781f, -0.007353f, -0.006669f, -0.005750f, -0.004625f, -0.003331f, -0.001908f, -0.000405f, 0.001131f, 0.002649f, 0.004102f, 0.005442f, 0.006629f, 0.007626f, 0.008406f, 0.008947f, 0.009238f, 0.009276f, 0.009066f, 0.008622f, 0.007967f, 0.007129f, 0.006142f, 0.005045f, 0.003878f, 0.002683f, 0.001502f, 0.000374f, -0.000666f, -0.001588f, -0.002367f, -0.002985f, -0.003431f, -0.003702f, -0.003802f, -0.003741f, -0.003538f, -0.003215f, -0.002797f, -0.002316f, -0.001801f, -0.001286f, -0.000799f, -0.000370f, -0.000021f, 0.000228f, 0.000362f, 0.000375f, 0.000264f, 0.000034f, -0.000302f, -0.000729f, -0.001224f, -0.001762f, -0.002315f, -0.002853f, -0.003344f, -0.003760f, -0.004075f, -0.004263f, -0.004307f, -0.004193f, -0.003914f, -0.003467f, -0.002860f, -0.002103f, -0.001214f, -0.000217f, 0.000860f, 0.001987f, 0.003130f, 0.004254f, 0.005325f, 0.006310f, 0.007179f, 0.007908f, 0.008474f, + 0.008862f, 0.009065f, 0.009080f, 0.008910f, 0.008569f, 0.008071f, 0.007441f, 0.006704f, 0.005891f, 0.005035f, 0.004169f, 0.003326f, 0.002538f, 0.001833f, 0.001236f, 0.000767f, 0.000440f, 0.000265f, 0.000243f, 0.000370f, 0.000636f, 0.001026f, 0.001519f, 0.002091f, 0.002714f, 0.003360f, 0.004000f, 0.004604f, 0.005146f, 0.005601f, 0.005950f, 0.006177f, 0.006272f, 0.006232f, 0.006057f, 0.005755f, 0.005338f, 0.004825f, 0.004237f, 0.003598f, 0.002936f, 0.002278f, 0.001651f, 0.001083f, 0.000598f, 0.000214f, -0.000051f, -0.000186f, -0.014399f, -0.088918f, -0.104568f, 0.033774f, 0.006889f, -0.014211f, -0.339412f, -0.200382f, -0.197825f, -0.256243f, -0.049747f, 0.153723f, 0.189341f, 0.030845f, 0.049345f, 0.023389f, 0.124600f, -0.055314f, 0.034364f, 0.042592f, 0.009443f, 0.028243f, 0.002752f, -0.002188f, 0.008221f, -0.011938f, -0.027058f, 0.014048f, 0.003354f, -0.058375f, -0.073083f, -0.034868f, 0.005558f, -0.010350f, -0.046182f, -0.010972f, 0.053029f, 0.157632f, 0.016291f, -0.057067f, -0.213388f, 0.018673f, 0.169634f, 0.193574f, 0.145085f, -0.084971f, -0.237624f, -0.226809f, + -0.110297f, 0.096854f, 0.213419f, 0.198516f, 0.019172f, -0.167969f, -0.238403f, -0.157229f, -0.008594f, 0.166266f, 0.146397f, 0.056850f, 0.078227f, -0.230405f, -0.182536f, -0.000273f, 0.081119f, -0.082448f, 0.310260f, 0.369648f, 0.327330f, -0.054515f, -0.303985f, -0.330843f, 0.023930f, 0.249376f, 0.283462f, 0.082354f, -0.210615f, -0.253664f, -0.298859f, -0.051273f, 0.258919f, 0.344791f, 0.212825f, -0.062716f, -0.254123f, -0.228433f, 0.024020f, 0.174971f, 0.169038f, -0.016732f, -0.152145f, -0.181161f, -0.026750f, 0.108313f, 0.105190f, 0.005511f, -0.080886f, -0.175720f, -0.053616f, 0.124221f, 0.328626f, 0.269120f, -0.012363f, -0.366991f, -0.418201f, -0.179777f, 0.226324f, 0.502263f, 0.469250f, 0.157321f, -0.343881f, -0.631262f, -0.403278f, 0.113845f, 0.477319f, 0.374508f, -0.060622f, -0.349411f, -0.409097f, -0.083539f, 0.217155f, 0.263939f, 0.250254f, -0.057498f, -0.154273f, -0.182069f, -0.042848f, 0.108637f, 0.149146f, 0.048201f, -0.034839f, -0.113656f, -0.076942f, 0.021116f, 0.113304f, 0.085027f, 0.004350f, -0.092580f, -0.102413f, -0.029857f, 0.069689f, 0.114991f, 0.094846f, -0.030280f, + -0.136362f, -0.139061f, -0.036977f, 0.094935f, 0.173700f, 0.157429f, 0.014736f, -0.146953f, -0.191168f, -0.145844f, -0.001188f, 0.157952f, 0.198629f, 0.089918f, -0.075089f, -0.194002f, -0.170286f, -0.047141f, 0.122563f, 0.190138f, 0.123703f, -0.025843f, -0.186317f, -0.197764f, -0.034739f, 0.119741f, 0.200216f, 0.110432f, -0.010105f, -0.153690f, -0.166144f, -0.039158f, 0.099676f, 0.143215f, 0.059367f, -0.190863f, -0.163854f, 0.031416f, 0.208956f, 0.221929f, 0.042610f, -0.164837f, -0.219071f, -0.058930f, 0.162295f, 0.234901f, 0.081855f, -0.143458f, -0.211225f, -0.049183f, 0.162727f, 0.191917f, 0.007000f, -0.167170f, -0.118384f, 0.082358f, 0.149077f, -0.009682f, -0.097921f, 0.005018f, 0.046167f, 0.000346f, -0.005773f, 0.003501f, 0.005151f, 0.002723f, 0.003190f, 0.002225f, 0.003858f, 0.003725f, 0.004658f, 0.004453f, 0.001746f, 0.003153f, 0.002864f, 0.003655f, 0.003188f, 0.003292f, 0.001931f, 0.002658f, 0.001276f, 0.002184f, 0.003202f, 0.006402f, 0.002000f, 0.002265f, 0.000766f, 0.003939f, 0.004158f, 0.002916f, 0.002643f, 0.001368f, 0.002446f, 0.003088f, 0.003033f, 0.003336f} + }, + { + {0.020127f, 0.019564f, 0.018453f, 0.016824f, 0.014720f, 0.012199f, 0.009327f, 0.006183f, 0.002851f, -0.000580f, -0.004016f, -0.007366f, -0.010538f, -0.013447f, -0.016013f, -0.018166f, -0.019846f, -0.021005f, -0.021609f, -0.021638f, -0.021086f, -0.019962f, -0.018288f, -0.016102f, -0.013452f, -0.010398f, -0.007010f, -0.003364f, 0.000457f, 0.004367f, 0.008280f, 0.012111f, 0.015777f, 0.019202f, 0.022315f, 0.025057f, 0.027376f, 0.029232f, 0.030599f, 0.031461f, 0.031816f, 0.031671f, 0.031050f, 0.029982f, 0.028509f, 0.026681f, 0.024553f, 0.022187f, 0.019647f, 0.016999f, 0.014309f, 0.011639f, 0.009051f, 0.006600f, 0.004335f, 0.002298f, 0.000523f, -0.000965f, -0.002147f, -0.003018f, -0.003575f, -0.003830f, -0.003796f, -0.003497f, -0.002961f, -0.002220f, -0.001310f, -0.000270f, 0.000862f, 0.002046f, 0.003247f, 0.004427f, 0.005556f, 0.006605f, 0.007551f, 0.008374f, 0.009061f, 0.009603f, 0.009995f, 0.010239f, 0.010340f, 0.010305f, 0.010146f, 0.009877f, 0.009513f, 0.009072f, 0.008569f, 0.008021f, 0.007443f, 0.006849f, 0.006250f, 0.005657f, 0.005077f, 0.004514f, 0.003972f, 0.003449f, + 0.002944f, 0.002455f, 0.001975f, 0.001500f, 0.001023f, 0.000538f, 0.000041f, -0.000474f, -0.001008f, -0.001565f, -0.002143f, -0.002739f, -0.003350f, -0.003968f, -0.004586f, -0.005194f, -0.005780f, -0.006332f, -0.006838f, -0.007285f, -0.007661f, -0.007955f, -0.008158f, -0.008261f, -0.008260f, -0.008152f, -0.007935f, -0.007614f, -0.007193f, -0.006682f, -0.006092f, -0.005437f, -0.004733f, -0.003998f, -0.003250f, -0.002510f, -0.001797f, -0.001131f, -0.000530f, -0.000012f, 0.000409f, 0.000721f, 0.000914f, 0.000981f, 0.000920f, 0.000730f, 0.000417f, -0.000014f, -0.000552f, -0.001183f, -0.001893f, -0.002664f, -0.003477f, -0.004313f, -0.005151f, -0.005971f, -0.006755f, -0.007484f, -0.008143f, -0.008718f, -0.009198f, -0.009574f, -0.009842f, -0.009998f, -0.010043f, -0.009981f, -0.009818f, -0.009564f, -0.009227f, -0.008823f, -0.008363f, -0.007862f, -0.007336f, -0.006799f, -0.006264f, -0.005746f, -0.005254f, -0.004800f, -0.004392f, -0.004034f, -0.003731f, -0.003483f, -0.003291f, -0.003151f, -0.003060f, -0.003010f, -0.002994f, -0.003005f, -0.003033f, -0.003070f, -0.003107f, -0.003136f, -0.003149f, -0.003140f, -0.003105f, -0.003039f, + -0.002942f, -0.002813f, -0.002654f, -0.002466f, -0.002256f, -0.002028f, -0.001789f, -0.001546f, -0.001306f, -0.001077f, -0.000865f, -0.000678f, -0.000522f, -0.000401f, -0.000319f, -0.000279f, -0.000280f, -0.000323f, -0.000404f, -0.000522f, -0.000670f, -0.000842f, -0.001033f, -0.001235f, -0.001440f, -0.001639f, -0.001827f, -0.001996f, -0.002139f, -0.002251f, -0.002329f, -0.002369f, -0.002371f, -0.002334f, -0.002261f, -0.002154f, -0.002017f, -0.001856f, -0.001677f, -0.001488f, -0.001294f, -0.001105f, -0.000927f, -0.000766f, -0.000630f, -0.000523f, -0.000449f, -0.000412f, -0.014151f, 0.039337f, -0.009261f, -0.048279f, -0.015075f, 0.009931f, 0.016956f, 0.126611f, 0.199676f, 0.247669f, -0.052009f, -0.166393f, -0.248453f, -0.100524f, 0.104113f, 0.332347f, 0.192038f, 0.074604f, -0.098523f, -0.080987f, -0.048782f, 0.050214f, -0.015708f, -0.046663f, -0.035120f, -0.020731f, 0.024618f, 0.126910f, 0.109013f, 0.139900f, -0.066775f, -0.193711f, -0.186368f, -0.061481f, 0.134857f, 0.271718f, 0.167815f, -0.028485f, -0.220587f, -0.176122f, 0.052869f, 0.014749f, 0.044216f, 0.024563f, 0.012979f, -0.046201f, -0.072822f, 0.081452f, + 0.084678f, -0.086224f, -0.090877f, -0.104086f, -0.040794f, 0.029843f, 0.143701f, 0.103193f, 0.063207f, -0.055107f, -0.065673f, -0.095260f, -0.027833f, 0.096659f, 0.166484f, 0.103337f, 0.012089f, -0.106923f, -0.226200f, -0.244058f, -0.041068f, 0.180731f, 0.277362f, 0.277711f, 0.158361f, -0.095499f, -0.346798f, -0.338543f, -0.124445f, 0.158028f, 0.304308f, 0.289049f, 0.048713f, -0.175475f, -0.299394f, -0.229171f, 0.044670f, 0.173668f, 0.073384f, -0.087531f, -0.142934f, -0.123168f, 0.004141f, 0.079146f, 0.121943f, 0.095298f, 0.028484f, -0.076227f, -0.146192f, -0.055801f, 0.023663f, 0.107204f, 0.137803f, 0.026475f, -0.075617f, -0.157564f, -0.101773f, 0.032719f, 0.182020f, 0.145379f, -0.064918f, -0.190720f, -0.146656f, -0.008983f, 0.178396f, 0.219287f, 0.110936f, -0.157996f, -0.400782f, -0.284468f, 0.057294f, 0.286167f, 0.308590f, 0.056655f, -0.173065f, -0.257245f, -0.177888f, 0.080312f, 0.201813f, 0.215213f, 0.086871f, -0.098072f, -0.204441f, -0.162266f, -0.022601f, 0.186823f, 0.214745f, 0.125103f, -0.102279f, -0.251245f, -0.218701f, -0.022069f, 0.125565f, 0.222139f, 0.159612f, 0.010752f, + -0.169728f, -0.206679f, -0.085379f, 0.106638f, 0.118277f, 0.089598f, -0.024958f, -0.122614f, -0.092495f, -0.005718f, 0.053518f, 0.032109f, 0.013678f, -0.011855f, -0.023277f, -0.026915f, -0.025700f, -0.048447f, -0.015780f, 0.028899f, 0.060556f, 0.037983f, -0.004137f, -0.049395f, -0.051257f, -0.028121f, 0.004230f, 0.040847f, 0.064514f, 0.017160f, -0.019601f, -0.059654f, -0.043605f, 0.021966f, 0.007920f, -0.021072f, -0.040672f, 0.003927f, 0.038201f, 0.043360f, -0.010796f, -0.047209f, -0.039646f, 0.022779f, 0.053054f, 0.024522f, -0.037072f, -0.052419f, -0.009074f, 0.045387f, 0.042043f, -0.007891f, -0.054910f, -0.031857f, 0.030133f, 0.051439f, -0.008864f, -0.052426f, -0.007621f, 0.030137f, -0.000197f, -0.009380f, -0.000042f, -0.000829f, -0.002167f, -0.000541f, -0.000478f, -0.000541f, -0.000586f, 0.000333f, -0.001820f, -0.001863f, -0.001979f, -0.000635f, -0.001398f, -0.000042f, -0.001265f, -0.001653f, -0.001439f, -0.001095f, -0.003172f, -0.001245f, -0.000398f, 0.000360f, -0.000036f, -0.002032f, -0.000729f, -0.002114f, -0.001880f, -0.001614f, -0.001210f, 0.000266f, -0.000904f, -0.001292f, -0.000951f, -0.001328f}, + {0.020127f, 0.019564f, 0.018453f, 0.016824f, 0.014720f, 0.012199f, 0.009327f, 0.006183f, 0.002851f, -0.000580f, -0.004016f, -0.007366f, -0.010538f, -0.013447f, -0.016013f, -0.018166f, -0.019846f, -0.021005f, -0.021609f, -0.021638f, -0.021086f, -0.019962f, -0.018288f, -0.016102f, -0.013452f, -0.010398f, -0.007010f, -0.003364f, 0.000457f, 0.004367f, 0.008280f, 0.012111f, 0.015777f, 0.019202f, 0.022315f, 0.025057f, 0.027376f, 0.029232f, 0.030599f, 0.031461f, 0.031816f, 0.031671f, 0.031050f, 0.029982f, 0.028509f, 0.026681f, 0.024553f, 0.022187f, 0.019647f, 0.016999f, 0.014309f, 0.011639f, 0.009051f, 0.006600f, 0.004335f, 0.002298f, 0.000523f, -0.000965f, -0.002147f, -0.003018f, -0.003575f, -0.003830f, -0.003796f, -0.003497f, -0.002961f, -0.002220f, -0.001310f, -0.000270f, 0.000862f, 0.002046f, 0.003247f, 0.004427f, 0.005556f, 0.006605f, 0.007551f, 0.008374f, 0.009061f, 0.009603f, 0.009995f, 0.010239f, 0.010340f, 0.010305f, 0.010146f, 0.009877f, 0.009513f, 0.009072f, 0.008569f, 0.008021f, 0.007443f, 0.006849f, 0.006250f, 0.005657f, 0.005077f, 0.004514f, 0.003972f, 0.003449f, + 0.002944f, 0.002455f, 0.001975f, 0.001500f, 0.001023f, 0.000538f, 0.000041f, -0.000474f, -0.001008f, -0.001565f, -0.002143f, -0.002739f, -0.003350f, -0.003968f, -0.004586f, -0.005194f, -0.005780f, -0.006332f, -0.006838f, -0.007285f, -0.007661f, -0.007955f, -0.008158f, -0.008261f, -0.008260f, -0.008152f, -0.007935f, -0.007614f, -0.007193f, -0.006682f, -0.006092f, -0.005437f, -0.004733f, -0.003998f, -0.003250f, -0.002510f, -0.001797f, -0.001131f, -0.000530f, -0.000012f, 0.000409f, 0.000721f, 0.000914f, 0.000981f, 0.000920f, 0.000730f, 0.000417f, -0.000014f, -0.000552f, -0.001183f, -0.001893f, -0.002664f, -0.003477f, -0.004313f, -0.005151f, -0.005971f, -0.006755f, -0.007484f, -0.008143f, -0.008718f, -0.009198f, -0.009574f, -0.009842f, -0.009998f, -0.010043f, -0.009981f, -0.009818f, -0.009564f, -0.009227f, -0.008823f, -0.008363f, -0.007862f, -0.007336f, -0.006799f, -0.006264f, -0.005746f, -0.005254f, -0.004800f, -0.004392f, -0.004034f, -0.003731f, -0.003483f, -0.003291f, -0.003151f, -0.003060f, -0.003010f, -0.002994f, -0.003005f, -0.003033f, -0.003070f, -0.003107f, -0.003136f, -0.003149f, -0.003140f, -0.003105f, -0.003039f, + -0.002942f, -0.002813f, -0.002654f, -0.002466f, -0.002256f, -0.002028f, -0.001789f, -0.001546f, -0.001306f, -0.001077f, -0.000865f, -0.000678f, -0.000522f, -0.000401f, -0.000319f, -0.000279f, -0.000280f, -0.000323f, -0.000404f, -0.000522f, -0.000670f, -0.000842f, -0.001033f, -0.001235f, -0.001440f, -0.001639f, -0.001827f, -0.001996f, -0.002139f, -0.002251f, -0.002329f, -0.002369f, -0.002371f, -0.002334f, -0.002261f, -0.002154f, -0.002017f, -0.001856f, -0.001677f, -0.001488f, -0.001294f, -0.001105f, -0.000927f, -0.000766f, -0.000630f, -0.000523f, -0.000449f, -0.000412f, -0.014151f, 0.039337f, -0.009261f, -0.048279f, -0.015075f, 0.009931f, 0.016956f, 0.126611f, 0.199676f, 0.247669f, -0.052009f, -0.166393f, -0.248453f, -0.100524f, 0.104113f, 0.332347f, 0.192038f, 0.074604f, -0.098523f, -0.080987f, -0.048782f, 0.050214f, -0.015708f, -0.046663f, -0.035120f, -0.020731f, 0.024618f, 0.126910f, 0.109013f, 0.139900f, -0.066775f, -0.193711f, -0.186368f, -0.061481f, 0.134857f, 0.271718f, 0.167815f, -0.028485f, -0.220587f, -0.176122f, 0.052869f, 0.014749f, 0.044216f, 0.024563f, 0.012979f, -0.046201f, -0.072822f, 0.081452f, + 0.084678f, -0.086224f, -0.090877f, -0.104086f, -0.040794f, 0.029843f, 0.143701f, 0.103193f, 0.063207f, -0.055107f, -0.065673f, -0.095260f, -0.027833f, 0.096659f, 0.166484f, 0.103337f, 0.012089f, -0.106923f, -0.226200f, -0.244058f, -0.041068f, 0.180731f, 0.277362f, 0.277711f, 0.158361f, -0.095499f, -0.346798f, -0.338543f, -0.124445f, 0.158028f, 0.304308f, 0.289049f, 0.048713f, -0.175475f, -0.299394f, -0.229171f, 0.044670f, 0.173668f, 0.073384f, -0.087531f, -0.142934f, -0.123168f, 0.004141f, 0.079146f, 0.121943f, 0.095298f, 0.028484f, -0.076227f, -0.146192f, -0.055801f, 0.023663f, 0.107204f, 0.137803f, 0.026475f, -0.075617f, -0.157564f, -0.101773f, 0.032719f, 0.182020f, 0.145379f, -0.064918f, -0.190720f, -0.146656f, -0.008983f, 0.178396f, 0.219287f, 0.110936f, -0.157996f, -0.400782f, -0.284468f, 0.057294f, 0.286167f, 0.308590f, 0.056655f, -0.173065f, -0.257245f, -0.177888f, 0.080312f, 0.201813f, 0.215213f, 0.086871f, -0.098072f, -0.204441f, -0.162266f, -0.022601f, 0.186823f, 0.214745f, 0.125103f, -0.102279f, -0.251245f, -0.218701f, -0.022069f, 0.125565f, 0.222139f, 0.159612f, 0.010752f, + -0.169728f, -0.206679f, -0.085379f, 0.106638f, 0.118277f, 0.089598f, -0.024958f, -0.122614f, -0.092495f, -0.005718f, 0.053518f, 0.032109f, 0.013678f, -0.011855f, -0.023277f, -0.026915f, -0.025700f, -0.048447f, -0.015780f, 0.028899f, 0.060556f, 0.037983f, -0.004137f, -0.049395f, -0.051257f, -0.028121f, 0.004230f, 0.040847f, 0.064514f, 0.017160f, -0.019601f, -0.059654f, -0.043605f, 0.021966f, 0.007920f, -0.021072f, -0.040672f, 0.003927f, 0.038201f, 0.043360f, -0.010796f, -0.047209f, -0.039646f, 0.022779f, 0.053054f, 0.024522f, -0.037072f, -0.052419f, -0.009074f, 0.045387f, 0.042043f, -0.007891f, -0.054910f, -0.031857f, 0.030133f, 0.051439f, -0.008864f, -0.052426f, -0.007621f, 0.030137f, -0.000197f, -0.009380f, -0.000042f, -0.000829f, -0.002167f, -0.000541f, -0.000478f, -0.000541f, -0.000586f, 0.000333f, -0.001820f, -0.001863f, -0.001979f, -0.000635f, -0.001398f, -0.000042f, -0.001265f, -0.001653f, -0.001439f, -0.001095f, -0.003172f, -0.001245f, -0.000398f, 0.000360f, -0.000036f, -0.002032f, -0.000729f, -0.002114f, -0.001880f, -0.001614f, -0.001210f, 0.000266f, -0.000904f, -0.001292f, -0.000951f, -0.001328f} + }, + { + {0.011383f, 0.011186f, 0.010798f, 0.010228f, 0.009495f, 0.008617f, 0.007619f, 0.006530f, 0.005379f, 0.004198f, 0.003020f, 0.001877f, 0.000801f, -0.000180f, -0.001039f, -0.001754f, -0.002305f, -0.002679f, -0.002866f, -0.002863f, -0.002671f, -0.002297f, -0.001751f, -0.001049f, -0.000213f, 0.000736f, 0.001769f, 0.002860f, 0.003977f, 0.005090f, 0.006167f, 0.007180f, 0.008098f, 0.008897f, 0.009550f, 0.010038f, 0.010342f, 0.010448f, 0.010346f, 0.010029f, 0.009494f, 0.008744f, 0.007781f, 0.006616f, 0.005259f, 0.003724f, 0.002030f, 0.000194f, -0.001760f, -0.003810f, -0.005932f, -0.008100f, -0.010287f, -0.012466f, -0.014611f, -0.016694f, -0.018689f, -0.020570f, -0.022310f, -0.023887f, -0.025276f, -0.026459f, -0.027414f, -0.028127f, -0.028584f, -0.028773f, -0.028687f, -0.028323f, -0.027682f, -0.026767f, -0.025588f, -0.024158f, -0.022495f, -0.020621f, -0.018562f, -0.016349f, -0.014016f, -0.011601f, -0.009142f, -0.006681f, -0.004261f, -0.001924f, 0.000288f, 0.002333f, 0.004175f, 0.005779f, 0.007115f, 0.008157f, 0.008887f, 0.009291f, 0.009362f, 0.009103f, 0.008519f, 0.007627f, 0.006447f, 0.005008f, + 0.003342f, 0.001488f, -0.000513f, -0.002614f, -0.004769f, -0.006931f, -0.009053f, -0.011090f, -0.012999f, -0.014742f, -0.016286f, -0.017602f, -0.018670f, -0.019473f, -0.020004f, -0.020262f, -0.020253f, -0.019988f, -0.019486f, -0.018769f, -0.017865f, -0.016804f, -0.015621f, -0.014348f, -0.013021f, -0.011673f, -0.010336f, -0.009039f, -0.007807f, -0.006662f, -0.005620f, -0.004694f, -0.003891f, -0.003213f, -0.002657f, -0.002218f, -0.001887f, -0.001650f, -0.001494f, -0.001403f, -0.001361f, -0.001353f, -0.001366f, -0.001388f, -0.001409f, -0.001423f, -0.001429f, -0.001427f, -0.001421f, -0.001419f, -0.001432f, -0.001474f, -0.001558f, -0.001701f, -0.001918f, -0.002226f, -0.002637f, -0.003164f, -0.003813f, -0.004590f, -0.005495f, -0.006523f, -0.007664f, -0.008904f, -0.010222f, -0.011597f, -0.012999f, -0.014398f, -0.015761f, -0.017054f, -0.018242f, -0.019293f, -0.020174f, -0.020858f, -0.021319f, -0.021540f, -0.021508f, -0.021214f, -0.020661f, -0.019854f, -0.018808f, -0.017544f, -0.016088f, -0.014473f, -0.012735f, -0.010915f, -0.009056f, -0.007200f, -0.005391f, -0.003671f, -0.002079f, -0.000649f, 0.000588f, 0.001610f, 0.002400f, 0.002946f, + 0.003247f, 0.003307f, 0.003139f, 0.002759f, 0.002194f, 0.001472f, 0.000626f, -0.000308f, -0.001292f, -0.002288f, -0.003259f, -0.004171f, -0.004993f, -0.005697f, -0.006262f, -0.006673f, -0.006919f, -0.006999f, -0.006914f, -0.006675f, -0.006296f, -0.005798f, -0.005204f, -0.004543f, -0.003843f, -0.003135f, -0.002447f, -0.001809f, -0.001247f, -0.000781f, -0.000432f, -0.000211f, -0.000127f, -0.000181f, -0.000371f, -0.000686f, -0.001113f, -0.001634f, -0.002227f, -0.002866f, -0.003526f, -0.004179f, -0.004798f, -0.005358f, -0.005836f, -0.006213f, -0.006472f, -0.006605f, -0.006998f, -0.007302f, -0.009285f, 0.001946f, -0.011202f, 0.010434f, 0.038234f, 0.047188f, -0.002116f, -0.058181f, -0.008719f, 0.080501f, 0.166412f, 0.130947f, -0.065633f, -0.225874f, -0.117186f, -0.107285f, 0.050453f, 0.030896f, 0.014089f, 0.071935f, 0.123050f, -0.050048f, -0.131004f, -0.054090f, -0.035697f, 0.042958f, 0.121916f, 0.060453f, 0.081295f, 0.027237f, -0.106500f, -0.090785f, 0.011481f, 0.130883f, 0.113592f, -0.013612f, -0.075622f, -0.126169f, -0.000034f, 0.128718f, 0.118850f, 0.055358f, -0.030814f, -0.126930f, -0.098443f, -0.013206f, + 0.018041f, 0.043026f, 0.047928f, 0.037975f, 0.072457f, 0.009024f, -0.006488f, -0.029939f, -0.004033f, -0.046866f, 0.070776f, 0.124386f, -0.027794f, 0.103948f, -0.013067f, -0.156957f, -0.037500f, 0.088757f, -0.010331f, -0.103131f, -0.114647f, -0.056834f, 0.032948f, 0.110615f, 0.105636f, 0.060598f, -0.099175f, -0.162321f, -0.043659f, 0.147583f, 0.177857f, 0.058867f, -0.097171f, -0.095133f, -0.074913f, 0.003973f, 0.109863f, 0.126805f, -0.001215f, -0.145587f, -0.148811f, -0.063469f, 0.092143f, 0.033766f, 0.070635f, -0.014765f, -0.100284f, -0.089819f, -0.043569f, 0.207105f, 0.117878f, 0.040455f, -0.028645f, 0.085072f, 0.048328f, -0.025363f, -0.123722f, -0.096264f, -0.020690f, 0.122851f, 0.058308f, -0.063702f, -0.178735f, -0.082291f, 0.092825f, 0.204646f, 0.098992f, -0.009351f, -0.211555f, -0.163706f, 0.059042f, 0.248569f, 0.221289f, 0.081352f, -0.128114f, -0.192953f, -0.174097f, 0.017787f, 0.113572f, 0.193936f, 0.059321f, -0.062213f, -0.151698f, -0.104186f, -0.003643f, 0.200419f, 0.139390f, 0.049724f, -0.128159f, -0.239877f, -0.153039f, 0.088733f, 0.245812f, 0.272284f, 0.112405f, -0.061009f, + -0.183121f, -0.122927f, -0.031436f, 0.095909f, 0.145585f, 0.070347f, -0.057318f, -0.123796f, -0.075604f, 0.118445f, 0.162034f, 0.039343f, -0.068750f, -0.141701f, -0.113409f, -0.023384f, 0.063457f, 0.098375f, 0.066934f, -0.001273f, -0.103206f, -0.120582f, -0.057365f, 0.041736f, 0.106670f, 0.098947f, 0.033093f, -0.058760f, -0.120056f, -0.095522f, -0.028166f, 0.051268f, 0.123035f, 0.071960f, -0.077613f, -0.397179f, -0.228099f, 0.207627f, 0.479767f, 0.380003f, -0.052829f, -0.415736f, -0.418186f, -0.015359f, 0.398178f, 0.458893f, 0.078948f, -0.354241f, -0.424500f, -0.050655f, 0.355875f, 0.371308f, -0.011293f, -0.334910f, -0.239494f, 0.144311f, 0.290245f, 0.014109f, -0.190746f, -0.022066f, 0.084360f, 0.014742f, -0.009296f, 0.002098f, 0.004677f, 0.006425f, 0.003394f, 0.005549f, 0.002100f, 0.002641f, 0.002453f, 0.001752f, 0.003888f, 0.004496f, 0.000021f, 0.003081f, 0.002653f, 0.005549f, 0.001527f, 0.004676f, 0.003669f, 0.002300f, 0.003097f, 0.003088f, 0.003046f, 0.005155f, 0.004289f, 0.004373f, 0.002084f, 0.002798f, 0.003251f, 0.003214f, 0.005724f, 0.003667f, 0.004292f, 0.004786f}, + {-0.011383f, -0.011186f, -0.010798f, -0.010228f, -0.009495f, -0.008617f, -0.007619f, -0.006530f, -0.005379f, -0.004198f, -0.003020f, -0.001877f, -0.000801f, 0.000180f, 0.001039f, 0.001754f, 0.002305f, 0.002679f, 0.002866f, 0.002863f, 0.002671f, 0.002297f, 0.001751f, 0.001049f, 0.000213f, -0.000736f, -0.001769f, -0.002860f, -0.003977f, -0.005090f, -0.006167f, -0.007180f, -0.008098f, -0.008897f, -0.009550f, -0.010038f, -0.010342f, -0.010448f, -0.010346f, -0.010029f, -0.009494f, -0.008744f, -0.007781f, -0.006616f, -0.005259f, -0.003724f, -0.002030f, -0.000194f, 0.001760f, 0.003810f, 0.005932f, 0.008100f, 0.010287f, 0.012466f, 0.014611f, 0.016694f, 0.018689f, 0.020570f, 0.022310f, 0.023887f, 0.025276f, 0.026459f, 0.027414f, 0.028127f, 0.028584f, 0.028773f, 0.028687f, 0.028323f, 0.027682f, 0.026767f, 0.025588f, 0.024158f, 0.022495f, 0.020621f, 0.018562f, 0.016349f, 0.014016f, 0.011601f, 0.009142f, 0.006681f, 0.004261f, 0.001924f, -0.000288f, -0.002333f, -0.004175f, -0.005779f, -0.007115f, -0.008157f, -0.008887f, -0.009291f, -0.009362f, -0.009103f, -0.008519f, -0.007627f, -0.006447f, -0.005008f, + -0.003342f, -0.001488f, 0.000513f, 0.002614f, 0.004769f, 0.006931f, 0.009053f, 0.011090f, 0.012999f, 0.014742f, 0.016286f, 0.017602f, 0.018670f, 0.019473f, 0.020004f, 0.020262f, 0.020253f, 0.019988f, 0.019486f, 0.018769f, 0.017865f, 0.016804f, 0.015621f, 0.014348f, 0.013021f, 0.011673f, 0.010336f, 0.009039f, 0.007807f, 0.006662f, 0.005620f, 0.004694f, 0.003891f, 0.003213f, 0.002657f, 0.002218f, 0.001887f, 0.001650f, 0.001494f, 0.001403f, 0.001361f, 0.001353f, 0.001366f, 0.001388f, 0.001409f, 0.001423f, 0.001429f, 0.001427f, 0.001421f, 0.001419f, 0.001432f, 0.001474f, 0.001558f, 0.001701f, 0.001918f, 0.002226f, 0.002637f, 0.003164f, 0.003813f, 0.004590f, 0.005495f, 0.006523f, 0.007664f, 0.008904f, 0.010222f, 0.011597f, 0.012999f, 0.014398f, 0.015761f, 0.017054f, 0.018242f, 0.019293f, 0.020174f, 0.020858f, 0.021319f, 0.021540f, 0.021508f, 0.021214f, 0.020661f, 0.019854f, 0.018808f, 0.017544f, 0.016088f, 0.014473f, 0.012735f, 0.010915f, 0.009056f, 0.007200f, 0.005391f, 0.003671f, 0.002079f, 0.000649f, -0.000588f, -0.001610f, -0.002400f, -0.002946f, + -0.003247f, -0.003307f, -0.003139f, -0.002759f, -0.002194f, -0.001472f, -0.000626f, 0.000308f, 0.001292f, 0.002288f, 0.003259f, 0.004171f, 0.004993f, 0.005697f, 0.006262f, 0.006673f, 0.006919f, 0.006999f, 0.006914f, 0.006675f, 0.006296f, 0.005798f, 0.005204f, 0.004543f, 0.003843f, 0.003135f, 0.002447f, 0.001809f, 0.001247f, 0.000781f, 0.000432f, 0.000211f, 0.000127f, 0.000181f, 0.000371f, 0.000686f, 0.001113f, 0.001634f, 0.002227f, 0.002866f, 0.003526f, 0.004179f, 0.004798f, 0.005358f, 0.005836f, 0.006213f, 0.006472f, 0.006605f, 0.006998f, 0.007302f, 0.009285f, -0.001946f, 0.011202f, -0.010434f, -0.038234f, -0.047188f, 0.002116f, 0.058181f, 0.008719f, -0.080501f, -0.166412f, -0.130947f, 0.065633f, 0.225874f, 0.117186f, 0.107285f, -0.050453f, -0.030896f, -0.014089f, -0.071935f, -0.123050f, 0.050048f, 0.131004f, 0.054090f, 0.035697f, -0.042958f, -0.121916f, -0.060453f, -0.081295f, -0.027237f, 0.106500f, 0.090785f, -0.011481f, -0.130883f, -0.113592f, 0.013612f, 0.075622f, 0.126169f, 0.000034f, -0.128718f, -0.118850f, -0.055358f, 0.030814f, 0.126930f, 0.098443f, 0.013206f, + -0.018041f, -0.043026f, -0.047928f, -0.037975f, -0.072457f, -0.009024f, 0.006488f, 0.029939f, 0.004033f, 0.046866f, -0.070776f, -0.124386f, 0.027794f, -0.103948f, 0.013067f, 0.156957f, 0.037500f, -0.088757f, 0.010331f, 0.103131f, 0.114647f, 0.056834f, -0.032948f, -0.110615f, -0.105636f, -0.060598f, 0.099175f, 0.162321f, 0.043659f, -0.147583f, -0.177857f, -0.058867f, 0.097171f, 0.095133f, 0.074913f, -0.003973f, -0.109863f, -0.126805f, 0.001215f, 0.145587f, 0.148811f, 0.063469f, -0.092143f, -0.033766f, -0.070635f, 0.014765f, 0.100284f, 0.089819f, 0.043569f, -0.207105f, -0.117878f, -0.040455f, 0.028645f, -0.085072f, -0.048328f, 0.025363f, 0.123722f, 0.096264f, 0.020690f, -0.122851f, -0.058308f, 0.063702f, 0.178735f, 0.082291f, -0.092825f, -0.204646f, -0.098992f, 0.009351f, 0.211555f, 0.163706f, -0.059042f, -0.248569f, -0.221289f, -0.081352f, 0.128114f, 0.192953f, 0.174097f, -0.017787f, -0.113572f, -0.193936f, -0.059321f, 0.062213f, 0.151698f, 0.104186f, 0.003643f, -0.200419f, -0.139390f, -0.049724f, 0.128159f, 0.239877f, 0.153039f, -0.088733f, -0.245812f, -0.272284f, -0.112405f, 0.061009f, + 0.183121f, 0.122927f, 0.031436f, -0.095909f, -0.145585f, -0.070347f, 0.057318f, 0.123796f, 0.075604f, -0.118445f, -0.162034f, -0.039343f, 0.068750f, 0.141701f, 0.113409f, 0.023384f, -0.063457f, -0.098375f, -0.066934f, 0.001273f, 0.103206f, 0.120582f, 0.057365f, -0.041736f, -0.106670f, -0.098947f, -0.033093f, 0.058760f, 0.120056f, 0.095522f, 0.028166f, -0.051268f, -0.123035f, -0.071960f, 0.077613f, 0.397179f, 0.228099f, -0.207627f, -0.479767f, -0.380003f, 0.052829f, 0.415736f, 0.418186f, 0.015359f, -0.398178f, -0.458893f, -0.078948f, 0.354241f, 0.424500f, 0.050655f, -0.355875f, -0.371308f, 0.011293f, 0.334910f, 0.239494f, -0.144311f, -0.290245f, -0.014109f, 0.190746f, 0.022066f, -0.084360f, -0.014742f, 0.009296f, -0.002098f, -0.004677f, -0.006425f, -0.003394f, -0.005549f, -0.002100f, -0.002641f, -0.002453f, -0.001752f, -0.003888f, -0.004496f, -0.000021f, -0.003081f, -0.002653f, -0.005549f, -0.001527f, -0.004676f, -0.003669f, -0.002300f, -0.003097f, -0.003088f, -0.003046f, -0.005155f, -0.004289f, -0.004373f, -0.002084f, -0.002798f, -0.003251f, -0.003214f, -0.005724f, -0.003667f, -0.004292f, -0.004786f} + }, + { + {0.004457f, 0.004803f, 0.005482f, 0.006472f, 0.007739f, 0.009242f, 0.010928f, 0.012742f, 0.014622f, 0.016505f, 0.018326f, 0.020024f, 0.021540f, 0.022823f, 0.023827f, 0.024516f, 0.024865f, 0.024857f, 0.024487f, 0.023764f, 0.022702f, 0.021331f, 0.019685f, 0.017808f, 0.015751f, 0.013567f, 0.011312f, 0.009044f, 0.006818f, 0.004688f, 0.002701f, 0.000900f, -0.000681f, -0.002014f, -0.003083f, -0.003877f, -0.004396f, -0.004649f, -0.004651f, -0.004424f, -0.003997f, -0.003402f, -0.002673f, -0.001845f, -0.000955f, -0.000035f, 0.000883f, 0.001776f, 0.002621f, 0.003406f, 0.004122f, 0.004769f, 0.005351f, 0.005881f, 0.006376f, 0.006856f, 0.007348f, 0.007876f, 0.008469f, 0.009152f, 0.009951f, 0.010886f, 0.011973f, 0.013223f, 0.014638f, 0.016216f, 0.017947f, 0.019811f, 0.021784f, 0.023835f, 0.025926f, 0.028015f, 0.030057f, 0.032006f, 0.033814f, 0.035436f, 0.036827f, 0.037950f, 0.038769f, 0.039260f, 0.039401f, 0.039184f, 0.038605f, 0.037672f, 0.036400f, 0.034814f, 0.032946f, 0.030833f, 0.028519f, 0.026053f, 0.023486f, 0.020868f, 0.018251f, 0.015685f, 0.013215f, 0.010884f, + 0.008726f, 0.006771f, 0.005041f, 0.003550f, 0.002304f, 0.001302f, 0.000536f, -0.000009f, -0.000353f, -0.000522f, -0.000543f, -0.000448f, -0.000269f, -0.000037f, 0.000218f, 0.000468f, 0.000688f, 0.000859f, 0.000966f, 0.000998f, 0.000950f, 0.000823f, 0.000622f, 0.000355f, 0.000037f, -0.000316f, -0.000687f, -0.001057f, -0.001407f, -0.001718f, -0.001974f, -0.002160f, -0.002268f, -0.002288f, -0.002220f, -0.002063f, -0.001823f, -0.001509f, -0.001134f, -0.000713f, -0.000264f, 0.000194f, 0.000641f, 0.001059f, 0.001430f, 0.001737f, 0.001967f, 0.002112f, 0.002164f, 0.002123f, 0.001991f, 0.001774f, 0.001484f, 0.001134f, 0.000742f, 0.000328f, -0.000088f, -0.000484f, -0.000839f, -0.001133f, -0.001349f, -0.001470f, -0.001486f, -0.001391f, -0.001180f, -0.000856f, -0.000427f, 0.000098f, 0.000702f, 0.001366f, 0.002069f, 0.002786f, 0.003493f, 0.004165f, 0.004776f, 0.005304f, 0.005731f, 0.006038f, 0.006215f, 0.006253f, 0.006152f, 0.005915f, 0.005548f, 0.005068f, 0.004490f, 0.003838f, 0.003135f, 0.002410f, 0.001691f, 0.001006f, 0.000382f, -0.000155f, -0.000582f, -0.000882f, -0.001040f, -0.001049f, + -0.000904f, -0.000608f, -0.000171f, 0.000394f, 0.001069f, 0.001831f, 0.002653f, 0.003506f, 0.004360f, 0.005185f, 0.005952f, 0.006632f, 0.007202f, 0.007642f, 0.007935f, 0.008072f, 0.008047f, 0.007864f, 0.007529f, 0.007055f, 0.006461f, 0.005769f, 0.005006f, 0.004202f, 0.003387f, 0.002591f, 0.001847f, 0.001180f, 0.000619f, 0.000183f, -0.000111f, -0.000251f, -0.000231f, -0.000053f, 0.000277f, 0.000747f, 0.001339f, 0.002030f, 0.002795f, 0.003604f, 0.004428f, 0.005234f, 0.005992f, 0.006673f, 0.007253f, 0.007707f, 0.008020f, 0.008180f, -0.023080f, 0.017255f, 0.009678f, -0.011088f, -0.020983f, -0.001735f, -0.031981f, -0.037461f, -0.201735f, -0.238518f, 0.004204f, 0.076735f, -0.004756f, -0.025361f, 0.027211f, -0.019033f, -0.058846f, 0.013061f, 0.041154f, -0.003229f, 0.085427f, -0.052678f, -0.014999f, -0.044477f, -0.016524f, 0.051942f, 0.048424f, 0.116574f, -0.062608f, -0.053412f, -0.032905f, 0.028786f, 0.000561f, -0.050637f, -0.047139f, -0.023233f, -0.032433f, 0.069848f, 0.044266f, -0.030568f, -0.045929f, -0.046424f, 0.023603f, 0.074502f, 0.070463f, -0.006424f, -0.108626f, -0.071322f, + -0.065093f, -0.085552f, -0.010056f, 0.075042f, 0.070567f, -0.019741f, -0.089702f, -0.097700f, -0.063491f, 0.066151f, 0.096163f, 0.062052f, 0.045207f, -0.175419f, -0.159971f, -0.014387f, 0.038870f, 0.002240f, 0.236593f, 0.087543f, 0.026099f, -0.086112f, -0.066294f, 0.050274f, 0.187045f, 0.211058f, 0.034819f, -0.105354f, -0.116580f, -0.240834f, -0.192060f, 0.078708f, 0.199071f, 0.082504f, -0.059802f, -0.031618f, -0.213500f, -0.340961f, -0.088397f, 0.032796f, 0.193430f, 0.127659f, 0.018922f, -0.218201f, -0.213684f, -0.116907f, 0.089426f, 0.147526f, 0.155369f, -0.095128f, -0.145553f, -0.076523f, 0.099395f, 0.167693f, 0.163064f, -0.059897f, -0.186886f, -0.196185f, 0.021562f, 0.203422f, 0.303995f, 0.158257f, -0.137884f, -0.372733f, -0.355944f, -0.040808f, 0.262717f, 0.219980f, 0.026477f, -0.109705f, -0.250266f, -0.199136f, 0.000263f, 0.170630f, 0.232540f, 0.046589f, -0.047705f, -0.178808f, -0.204458f, -0.049330f, 0.114216f, 0.180834f, 0.138758f, -0.029559f, -0.178497f, -0.209665f, -0.022738f, 0.159440f, 0.212599f, 0.085953f, -0.080565f, -0.190275f, -0.193684f, -0.061446f, 0.104574f, 0.120742f, + 0.040625f, -0.046597f, -0.077670f, -0.083227f, -0.093542f, -0.005046f, 0.070144f, 0.088945f, 0.023759f, -0.074423f, -0.140730f, -0.082456f, 0.043191f, 0.076740f, 0.089912f, 0.022335f, -0.065760f, -0.120857f, -0.075501f, 0.019147f, 0.067641f, 0.067659f, 0.025161f, -0.039109f, -0.032581f, -0.025880f, 0.021715f, 0.001680f, 0.027937f, -0.033921f, -0.038421f, -0.045726f, 0.025639f, 0.023107f, 0.040383f, -0.095445f, -0.189905f, -0.084207f, 0.077202f, 0.183977f, 0.127790f, -0.042108f, -0.183065f, -0.152692f, 0.018627f, 0.170712f, 0.153600f, -0.027257f, -0.179305f, -0.143176f, 0.046629f, 0.169116f, 0.086310f, -0.100029f, -0.154624f, -0.007877f, 0.127514f, 0.040025f, -0.086180f, -0.030789f, 0.034832f, -0.000504f, -0.015469f, -0.005420f, -0.004356f, -0.003216f, -0.001101f, -0.003867f, -0.002833f, -0.004278f, -0.004491f, -0.003796f, -0.003657f, -0.005810f, -0.005043f, -0.007314f, -0.003679f, -0.003831f, -0.004629f, -0.007485f, -0.004645f, -0.006691f, -0.002879f, -0.005852f, -0.006690f, -0.006330f, -0.008273f, -0.004149f, -0.005079f, -0.003481f, -0.008020f, -0.004895f, -0.004774f, -0.003941f, -0.002730f, -0.007628f}, + {-0.004457f, -0.004803f, -0.005482f, -0.006472f, -0.007739f, -0.009242f, -0.010928f, -0.012742f, -0.014622f, -0.016505f, -0.018326f, -0.020024f, -0.021540f, -0.022823f, -0.023827f, -0.024516f, -0.024865f, -0.024857f, -0.024487f, -0.023764f, -0.022702f, -0.021331f, -0.019685f, -0.017808f, -0.015751f, -0.013567f, -0.011312f, -0.009044f, -0.006818f, -0.004688f, -0.002701f, -0.000900f, 0.000681f, 0.002014f, 0.003083f, 0.003877f, 0.004396f, 0.004649f, 0.004651f, 0.004424f, 0.003997f, 0.003402f, 0.002673f, 0.001845f, 0.000955f, 0.000035f, -0.000883f, -0.001776f, -0.002621f, -0.003406f, -0.004122f, -0.004769f, -0.005351f, -0.005881f, -0.006376f, -0.006856f, -0.007348f, -0.007876f, -0.008469f, -0.009152f, -0.009951f, -0.010886f, -0.011973f, -0.013223f, -0.014638f, -0.016216f, -0.017947f, -0.019811f, -0.021784f, -0.023835f, -0.025926f, -0.028015f, -0.030057f, -0.032006f, -0.033814f, -0.035436f, -0.036827f, -0.037950f, -0.038769f, -0.039260f, -0.039401f, -0.039184f, -0.038605f, -0.037672f, -0.036400f, -0.034814f, -0.032946f, -0.030833f, -0.028519f, -0.026053f, -0.023486f, -0.020868f, -0.018251f, -0.015685f, -0.013215f, -0.010884f, + -0.008726f, -0.006771f, -0.005041f, -0.003550f, -0.002304f, -0.001302f, -0.000536f, 0.000009f, 0.000353f, 0.000522f, 0.000543f, 0.000448f, 0.000269f, 0.000037f, -0.000218f, -0.000468f, -0.000688f, -0.000859f, -0.000966f, -0.000998f, -0.000950f, -0.000823f, -0.000622f, -0.000355f, -0.000037f, 0.000316f, 0.000687f, 0.001057f, 0.001407f, 0.001718f, 0.001974f, 0.002160f, 0.002268f, 0.002288f, 0.002220f, 0.002063f, 0.001823f, 0.001509f, 0.001134f, 0.000713f, 0.000264f, -0.000194f, -0.000641f, -0.001059f, -0.001430f, -0.001737f, -0.001967f, -0.002112f, -0.002164f, -0.002123f, -0.001991f, -0.001774f, -0.001484f, -0.001134f, -0.000742f, -0.000328f, 0.000088f, 0.000484f, 0.000839f, 0.001133f, 0.001349f, 0.001470f, 0.001486f, 0.001391f, 0.001180f, 0.000856f, 0.000427f, -0.000098f, -0.000702f, -0.001366f, -0.002069f, -0.002786f, -0.003493f, -0.004165f, -0.004776f, -0.005304f, -0.005731f, -0.006038f, -0.006215f, -0.006253f, -0.006152f, -0.005915f, -0.005548f, -0.005068f, -0.004490f, -0.003838f, -0.003135f, -0.002410f, -0.001691f, -0.001006f, -0.000382f, 0.000155f, 0.000582f, 0.000882f, 0.001040f, 0.001049f, + 0.000904f, 0.000608f, 0.000171f, -0.000394f, -0.001069f, -0.001831f, -0.002653f, -0.003506f, -0.004360f, -0.005185f, -0.005952f, -0.006632f, -0.007202f, -0.007642f, -0.007935f, -0.008072f, -0.008047f, -0.007864f, -0.007529f, -0.007055f, -0.006461f, -0.005769f, -0.005006f, -0.004202f, -0.003387f, -0.002591f, -0.001847f, -0.001180f, -0.000619f, -0.000183f, 0.000111f, 0.000251f, 0.000231f, 0.000053f, -0.000277f, -0.000747f, -0.001339f, -0.002030f, -0.002795f, -0.003604f, -0.004428f, -0.005234f, -0.005992f, -0.006673f, -0.007253f, -0.007707f, -0.008020f, -0.008180f, 0.023080f, -0.017255f, -0.009678f, 0.011088f, 0.020983f, 0.001735f, 0.031981f, 0.037461f, 0.201735f, 0.238518f, -0.004204f, -0.076735f, 0.004756f, 0.025361f, -0.027211f, 0.019033f, 0.058846f, -0.013061f, -0.041154f, 0.003229f, -0.085427f, 0.052678f, 0.014999f, 0.044477f, 0.016524f, -0.051942f, -0.048424f, -0.116574f, 0.062608f, 0.053412f, 0.032905f, -0.028786f, -0.000561f, 0.050637f, 0.047139f, 0.023233f, 0.032433f, -0.069848f, -0.044266f, 0.030568f, 0.045929f, 0.046424f, -0.023603f, -0.074502f, -0.070463f, 0.006424f, 0.108626f, 0.071322f, + 0.065093f, 0.085552f, 0.010056f, -0.075042f, -0.070567f, 0.019741f, 0.089702f, 0.097700f, 0.063491f, -0.066151f, -0.096163f, -0.062052f, -0.045207f, 0.175419f, 0.159971f, 0.014387f, -0.038870f, -0.002240f, -0.236593f, -0.087543f, -0.026099f, 0.086112f, 0.066294f, -0.050274f, -0.187045f, -0.211058f, -0.034819f, 0.105354f, 0.116580f, 0.240834f, 0.192060f, -0.078708f, -0.199071f, -0.082504f, 0.059802f, 0.031618f, 0.213500f, 0.340961f, 0.088397f, -0.032796f, -0.193430f, -0.127659f, -0.018922f, 0.218201f, 0.213684f, 0.116907f, -0.089426f, -0.147526f, -0.155369f, 0.095128f, 0.145553f, 0.076523f, -0.099395f, -0.167693f, -0.163064f, 0.059897f, 0.186886f, 0.196185f, -0.021562f, -0.203422f, -0.303995f, -0.158257f, 0.137884f, 0.372733f, 0.355944f, 0.040808f, -0.262717f, -0.219980f, -0.026477f, 0.109705f, 0.250266f, 0.199136f, -0.000263f, -0.170630f, -0.232540f, -0.046589f, 0.047705f, 0.178808f, 0.204458f, 0.049330f, -0.114216f, -0.180834f, -0.138758f, 0.029559f, 0.178497f, 0.209665f, 0.022738f, -0.159440f, -0.212599f, -0.085953f, 0.080565f, 0.190275f, 0.193684f, 0.061446f, -0.104574f, -0.120742f, + -0.040625f, 0.046597f, 0.077670f, 0.083227f, 0.093542f, 0.005046f, -0.070144f, -0.088945f, -0.023759f, 0.074423f, 0.140730f, 0.082456f, -0.043191f, -0.076740f, -0.089912f, -0.022335f, 0.065760f, 0.120857f, 0.075501f, -0.019147f, -0.067641f, -0.067659f, -0.025161f, 0.039109f, 0.032581f, 0.025880f, -0.021715f, -0.001680f, -0.027937f, 0.033921f, 0.038421f, 0.045726f, -0.025639f, -0.023107f, -0.040383f, 0.095445f, 0.189905f, 0.084207f, -0.077202f, -0.183977f, -0.127790f, 0.042108f, 0.183065f, 0.152692f, -0.018627f, -0.170712f, -0.153600f, 0.027257f, 0.179305f, 0.143176f, -0.046629f, -0.169116f, -0.086310f, 0.100029f, 0.154624f, 0.007877f, -0.127514f, -0.040025f, 0.086180f, 0.030789f, -0.034832f, 0.000504f, 0.015469f, 0.005420f, 0.004356f, 0.003216f, 0.001101f, 0.003867f, 0.002833f, 0.004278f, 0.004491f, 0.003796f, 0.003657f, 0.005810f, 0.005043f, 0.007314f, 0.003679f, 0.003831f, 0.004629f, 0.007485f, 0.004645f, 0.006691f, 0.002879f, 0.005852f, 0.006690f, 0.006330f, 0.008273f, 0.004149f, 0.005079f, 0.003481f, 0.008020f, 0.004895f, 0.004774f, 0.003941f, 0.002730f, 0.007628f} + }, + { + {-0.040881f, -0.039965f, -0.038159f, -0.035521f, -0.032131f, -0.028094f, -0.023534f, -0.018587f, -0.013405f, -0.008140f, -0.002948f, 0.002020f, 0.006624f, 0.010739f, 0.014255f, 0.017086f, 0.019171f, 0.020472f, 0.020982f, 0.020716f, 0.019718f, 0.018055f, 0.015816f, 0.013106f, 0.010045f, 0.006761f, 0.003390f, 0.000064f, -0.003089f, -0.005948f, -0.008409f, -0.010382f, -0.011799f, -0.012613f, -0.012801f, -0.012364f, -0.011328f, -0.009738f, -0.007662f, -0.005186f, -0.002408f, 0.000561f, 0.003605f, 0.006606f, 0.009449f, 0.012024f, 0.014233f, 0.015990f, 0.017228f, 0.017899f, 0.017975f, 0.017451f, 0.016342f, 0.014686f, 0.012538f, 0.009971f, 0.007074f, 0.003945f, 0.000690f, -0.002582f, -0.005762f, -0.008746f, -0.011438f, -0.013752f, -0.015620f, -0.016988f, -0.017820f, -0.018103f, -0.017839f, -0.017054f, -0.015789f, -0.014103f, -0.012067f, -0.009765f, -0.007288f, -0.004733f, -0.002195f, 0.000231f, 0.002457f, 0.004404f, 0.006007f, 0.007212f, 0.007983f, 0.008300f, 0.008161f, 0.007579f, 0.006588f, 0.005231f, 0.003568f, 0.001667f, -0.000396f, -0.002539f, -0.004681f, -0.006741f, -0.008644f, -0.010323f, + -0.011721f, -0.012791f, -0.013503f, -0.013841f, -0.013802f, -0.013400f, -0.012664f, -0.011633f, -0.010359f, -0.008904f, -0.007334f, -0.005721f, -0.004135f, -0.002648f, -0.001324f, -0.000220f, 0.000614f, 0.001141f, 0.001337f, 0.001191f, 0.000706f, -0.000101f, -0.001202f, -0.002555f, -0.004110f, -0.005806f, -0.007579f, -0.009361f, -0.011084f, -0.012681f, -0.014090f, -0.015257f, -0.016136f, -0.016692f, -0.016901f, -0.016753f, -0.016251f, -0.015410f, -0.014257f, -0.012832f, -0.011182f, -0.009364f, -0.007438f, -0.005469f, -0.003522f, -0.001662f, 0.000053f, 0.001569f, 0.002840f, 0.003830f, 0.004514f, 0.004877f, 0.004918f, 0.004647f, 0.004082f, 0.003255f, 0.002204f, 0.000975f, -0.000380f, -0.001809f, -0.003256f, -0.004668f, -0.005995f, -0.007191f, -0.008219f, -0.009049f, -0.009660f, -0.010039f, -0.010187f, -0.010111f, -0.009828f, -0.009363f, -0.008750f, -0.008025f, -0.007229f, -0.006407f, -0.005599f, -0.004849f, -0.004192f, -0.003661f, -0.003282f, -0.003074f, -0.003046f, -0.003199f, -0.003528f, -0.004016f, -0.004641f, -0.005375f, -0.006183f, -0.007027f, -0.007870f, -0.008669f, -0.009389f, -0.009992f, -0.010450f, -0.010736f, + -0.010834f, -0.010735f, -0.010435f, -0.009943f, -0.009273f, -0.008447f, -0.007494f, -0.006448f, -0.005347f, -0.004233f, -0.003147f, -0.002130f, -0.001219f, -0.000448f, 0.000152f, 0.000562f, 0.000766f, 0.000758f, 0.000540f, 0.000123f, -0.000475f, -0.001229f, -0.002106f, -0.003070f, -0.004081f, -0.005098f, -0.006077f, -0.006980f, -0.007769f, -0.008411f, -0.008879f, -0.009156f, -0.009228f, -0.009093f, -0.008755f, -0.008228f, -0.007533f, -0.006698f, -0.005756f, -0.004745f, -0.003705f, -0.002679f, -0.001707f, -0.000829f, -0.000080f, 0.000510f, 0.000916f, 0.001124f, 0.001405f, -0.011307f, 0.023755f, 0.010060f, 0.007247f, 0.047340f, 0.037354f, -0.162787f, -0.162415f, -0.105082f, -0.018683f, 0.015858f, -0.054927f, -0.017871f, 0.216992f, 0.114575f, 0.071094f, -0.102642f, -0.015053f, 0.038868f, 0.109641f, 0.010900f, 0.003695f, -0.044931f, -0.067549f, -0.039879f, -0.028640f, -0.006825f, 0.044025f, 0.074633f, 0.068953f, -0.006513f, -0.131510f, -0.149665f, 0.005649f, 0.072184f, 0.101365f, 0.070488f, -0.005129f, -0.102374f, 0.162843f, -0.036980f, -0.071588f, -0.127539f, -0.101807f, 0.021461f, 0.192087f, 0.205971f, + 0.044353f, -0.202735f, -0.313378f, -0.270330f, 0.048024f, 0.305831f, 0.370715f, 0.273108f, -0.081253f, -0.352290f, -0.324178f, -0.071810f, -0.027099f, 0.314215f, 0.189838f, 0.005054f, -0.042232f, 0.088868f, -0.150193f, -0.020693f, -0.082737f, -0.035341f, -0.169353f, -0.150333f, -0.116398f, 0.089213f, 0.131883f, 0.177783f, -0.001054f, -0.186749f, -0.416386f, -0.157525f, 0.096505f, 0.311886f, 0.111138f, -0.093343f, -0.115374f, -0.089440f, 0.106927f, 0.135966f, 0.024655f, -0.177522f, -0.242578f, -0.118012f, 0.125475f, 0.314922f, 0.181500f, -0.073097f, -0.316649f, -0.389086f, -0.057635f, 0.169788f, 0.266739f, 0.089674f, -0.167879f, -0.348737f, -0.247511f, 0.018748f, 0.266828f, 0.312541f, 0.131098f, -0.088081f, -0.234146f, -0.241476f, -0.075798f, 0.114267f, 0.186007f, 0.028598f, -0.153952f, -0.128974f, -0.105816f, -0.012368f, 0.052341f, 0.051225f, -0.011653f, 0.005902f, -0.056305f, -0.040576f, -0.060932f, -0.026504f, -0.033534f, 0.068671f, 0.128337f, 0.085491f, -0.065497f, -0.180343f, -0.213819f, -0.063258f, 0.184496f, 0.324874f, 0.192777f, -0.044238f, -0.270100f, -0.311131f, -0.130907f, 0.119784f, + 0.260308f, 0.222679f, -0.025611f, -0.265754f, -0.246170f, -0.017878f, 0.155285f, 0.223147f, 0.105955f, -0.073536f, -0.160483f, -0.117929f, -0.026936f, 0.080816f, 0.141065f, 0.069388f, -0.056032f, -0.104513f, -0.097304f, 0.017071f, 0.108282f, 0.136150f, 0.050768f, -0.085694f, -0.150248f, -0.106420f, 0.039844f, 0.128671f, 0.141846f, 0.032064f, -0.075533f, -0.108401f, -0.077053f, 0.017857f, 0.086372f, 0.144167f, -0.054317f, -0.187772f, -0.175366f, 0.016080f, 0.171246f, 0.163549f, -0.024564f, -0.177619f, -0.155765f, 0.026498f, 0.149948f, 0.106725f, -0.054458f, -0.135474f, -0.071082f, 0.057778f, 0.089388f, 0.013412f, -0.071645f, -0.058854f, 0.017501f, 0.047369f, -0.015272f, -0.026602f, -0.001780f, 0.000565f, -0.007389f, -0.005318f, -0.006795f, -0.004696f, -0.006953f, -0.003315f, -0.004558f, -0.001633f, -0.005423f, -0.005203f, -0.007470f, -0.004443f, -0.007558f, -0.005285f, -0.006401f, -0.005032f, -0.005035f, -0.001361f, -0.006098f, -0.005330f, -0.005546f, -0.003775f, -0.005107f, -0.005011f, -0.005249f, -0.004569f, -0.006403f, -0.004169f, -0.004055f, -0.005732f, -0.005934f, -0.005591f, -0.004628f, -0.004699f}, + {0.040881f, 0.039965f, 0.038159f, 0.035521f, 0.032131f, 0.028094f, 0.023534f, 0.018587f, 0.013405f, 0.008140f, 0.002948f, -0.002020f, -0.006624f, -0.010739f, -0.014255f, -0.017086f, -0.019171f, -0.020472f, -0.020982f, -0.020716f, -0.019718f, -0.018055f, -0.015816f, -0.013106f, -0.010045f, -0.006761f, -0.003390f, -0.000064f, 0.003089f, 0.005948f, 0.008409f, 0.010382f, 0.011799f, 0.012613f, 0.012801f, 0.012364f, 0.011328f, 0.009738f, 0.007662f, 0.005186f, 0.002408f, -0.000561f, -0.003605f, -0.006606f, -0.009449f, -0.012024f, -0.014233f, -0.015990f, -0.017228f, -0.017899f, -0.017975f, -0.017451f, -0.016342f, -0.014686f, -0.012538f, -0.009971f, -0.007074f, -0.003945f, -0.000690f, 0.002582f, 0.005762f, 0.008746f, 0.011438f, 0.013752f, 0.015620f, 0.016988f, 0.017820f, 0.018103f, 0.017839f, 0.017054f, 0.015789f, 0.014103f, 0.012067f, 0.009765f, 0.007288f, 0.004733f, 0.002195f, -0.000231f, -0.002457f, -0.004404f, -0.006007f, -0.007212f, -0.007983f, -0.008300f, -0.008161f, -0.007579f, -0.006588f, -0.005231f, -0.003568f, -0.001667f, 0.000396f, 0.002539f, 0.004681f, 0.006741f, 0.008644f, 0.010323f, + 0.011721f, 0.012791f, 0.013503f, 0.013841f, 0.013802f, 0.013400f, 0.012664f, 0.011633f, 0.010359f, 0.008904f, 0.007334f, 0.005721f, 0.004135f, 0.002648f, 0.001324f, 0.000220f, -0.000614f, -0.001141f, -0.001337f, -0.001191f, -0.000706f, 0.000101f, 0.001202f, 0.002555f, 0.004110f, 0.005806f, 0.007579f, 0.009361f, 0.011084f, 0.012681f, 0.014090f, 0.015257f, 0.016136f, 0.016692f, 0.016901f, 0.016753f, 0.016251f, 0.015410f, 0.014257f, 0.012832f, 0.011182f, 0.009364f, 0.007438f, 0.005469f, 0.003522f, 0.001662f, -0.000053f, -0.001569f, -0.002840f, -0.003830f, -0.004514f, -0.004877f, -0.004918f, -0.004647f, -0.004082f, -0.003255f, -0.002204f, -0.000975f, 0.000380f, 0.001809f, 0.003256f, 0.004668f, 0.005995f, 0.007191f, 0.008219f, 0.009049f, 0.009660f, 0.010039f, 0.010187f, 0.010111f, 0.009828f, 0.009363f, 0.008750f, 0.008025f, 0.007229f, 0.006407f, 0.005599f, 0.004849f, 0.004192f, 0.003661f, 0.003282f, 0.003074f, 0.003046f, 0.003199f, 0.003528f, 0.004016f, 0.004641f, 0.005375f, 0.006183f, 0.007027f, 0.007870f, 0.008669f, 0.009389f, 0.009992f, 0.010450f, 0.010736f, + 0.010834f, 0.010735f, 0.010435f, 0.009943f, 0.009273f, 0.008447f, 0.007494f, 0.006448f, 0.005347f, 0.004233f, 0.003147f, 0.002130f, 0.001219f, 0.000448f, -0.000152f, -0.000562f, -0.000766f, -0.000758f, -0.000540f, -0.000123f, 0.000475f, 0.001229f, 0.002106f, 0.003070f, 0.004081f, 0.005098f, 0.006077f, 0.006980f, 0.007769f, 0.008411f, 0.008879f, 0.009156f, 0.009228f, 0.009093f, 0.008755f, 0.008228f, 0.007533f, 0.006698f, 0.005756f, 0.004745f, 0.003705f, 0.002679f, 0.001707f, 0.000829f, 0.000080f, -0.000510f, -0.000916f, -0.001124f, -0.001405f, 0.011307f, -0.023755f, -0.010060f, -0.007247f, -0.047340f, -0.037354f, 0.162787f, 0.162415f, 0.105082f, 0.018683f, -0.015858f, 0.054927f, 0.017871f, -0.216992f, -0.114575f, -0.071094f, 0.102642f, 0.015053f, -0.038868f, -0.109641f, -0.010900f, -0.003695f, 0.044931f, 0.067549f, 0.039879f, 0.028640f, 0.006825f, -0.044025f, -0.074633f, -0.068953f, 0.006513f, 0.131510f, 0.149665f, -0.005649f, -0.072184f, -0.101365f, -0.070488f, 0.005129f, 0.102374f, -0.162843f, 0.036980f, 0.071588f, 0.127539f, 0.101807f, -0.021461f, -0.192087f, -0.205971f, + -0.044353f, 0.202735f, 0.313378f, 0.270330f, -0.048024f, -0.305831f, -0.370715f, -0.273108f, 0.081253f, 0.352290f, 0.324178f, 0.071810f, 0.027099f, -0.314215f, -0.189838f, -0.005054f, 0.042232f, -0.088868f, 0.150193f, 0.020693f, 0.082737f, 0.035341f, 0.169353f, 0.150333f, 0.116398f, -0.089213f, -0.131883f, -0.177783f, 0.001054f, 0.186749f, 0.416386f, 0.157525f, -0.096505f, -0.311886f, -0.111138f, 0.093343f, 0.115374f, 0.089440f, -0.106927f, -0.135966f, -0.024655f, 0.177522f, 0.242578f, 0.118012f, -0.125475f, -0.314922f, -0.181500f, 0.073097f, 0.316649f, 0.389086f, 0.057635f, -0.169788f, -0.266739f, -0.089674f, 0.167879f, 0.348737f, 0.247511f, -0.018748f, -0.266828f, -0.312541f, -0.131098f, 0.088081f, 0.234146f, 0.241476f, 0.075798f, -0.114267f, -0.186007f, -0.028598f, 0.153952f, 0.128974f, 0.105816f, 0.012368f, -0.052341f, -0.051225f, 0.011653f, -0.005902f, 0.056305f, 0.040576f, 0.060932f, 0.026504f, 0.033534f, -0.068671f, -0.128337f, -0.085491f, 0.065497f, 0.180343f, 0.213819f, 0.063258f, -0.184496f, -0.324874f, -0.192777f, 0.044238f, 0.270100f, 0.311131f, 0.130907f, -0.119784f, + -0.260308f, -0.222679f, 0.025611f, 0.265754f, 0.246170f, 0.017878f, -0.155285f, -0.223147f, -0.105955f, 0.073536f, 0.160483f, 0.117929f, 0.026936f, -0.080816f, -0.141065f, -0.069388f, 0.056032f, 0.104513f, 0.097304f, -0.017071f, -0.108282f, -0.136150f, -0.050768f, 0.085694f, 0.150248f, 0.106420f, -0.039844f, -0.128671f, -0.141846f, -0.032064f, 0.075533f, 0.108401f, 0.077053f, -0.017857f, -0.086372f, -0.144167f, 0.054317f, 0.187772f, 0.175366f, -0.016080f, -0.171246f, -0.163549f, 0.024564f, 0.177619f, 0.155765f, -0.026498f, -0.149948f, -0.106725f, 0.054458f, 0.135474f, 0.071082f, -0.057778f, -0.089388f, -0.013412f, 0.071645f, 0.058854f, -0.017501f, -0.047369f, 0.015272f, 0.026602f, 0.001780f, -0.000565f, 0.007389f, 0.005318f, 0.006795f, 0.004696f, 0.006953f, 0.003315f, 0.004558f, 0.001633f, 0.005423f, 0.005203f, 0.007470f, 0.004443f, 0.007558f, 0.005285f, 0.006401f, 0.005032f, 0.005035f, 0.001361f, 0.006098f, 0.005330f, 0.005546f, 0.003775f, 0.005107f, 0.005011f, 0.005249f, 0.004569f, 0.006403f, 0.004169f, 0.004055f, 0.005732f, 0.005934f, 0.005591f, 0.004628f, 0.004699f} + }, + { + {-0.029892f, -0.029542f, -0.028856f, -0.027857f, -0.026583f, -0.025079f, -0.023399f, -0.021600f, -0.019744f, -0.017891f, -0.016098f, -0.014418f, -0.012895f, -0.011561f, -0.010440f, -0.009540f, -0.008855f, -0.008369f, -0.008049f, -0.007854f, -0.007730f, -0.007616f, -0.007448f, -0.007158f, -0.006680f, -0.005952f, -0.004918f, -0.003536f, -0.001775f, 0.000383f, 0.002934f, 0.005861f, 0.009126f, 0.012674f, 0.016434f, 0.020319f, 0.024230f, 0.028058f, 0.031689f, 0.035007f, 0.037898f, 0.040252f, 0.041972f, 0.042973f, 0.043189f, 0.042572f, 0.041100f, 0.038772f, 0.035614f, 0.031677f, 0.027035f, 0.021787f, 0.016048f, 0.009953f, 0.003650f, -0.002707f, -0.008959f, -0.014945f, -0.020515f, -0.025524f, -0.029848f, -0.033376f, -0.036023f, -0.037728f, -0.038458f, -0.038206f, -0.036995f, -0.034872f, -0.031914f, -0.028218f, -0.023902f, -0.019098f, -0.013952f, -0.008616f, -0.003243f, 0.002016f, 0.007018f, 0.011632f, 0.015743f, 0.019255f, 0.022095f, 0.024213f, 0.025584f, 0.026207f, 0.026107f, 0.025331f, 0.023946f, 0.022036f, 0.019699f, 0.017044f, 0.014184f, 0.011235f, 0.008308f, 0.005510f, 0.002935f, 0.000663f, + -0.001242f, -0.002733f, -0.003786f, -0.004393f, -0.004571f, -0.004350f, -0.003782f, -0.002930f, -0.001872f, -0.000690f, 0.000525f, 0.001683f, 0.002699f, 0.003490f, 0.003986f, 0.004128f, 0.003872f, 0.003192f, 0.002077f, 0.000537f, -0.001401f, -0.003695f, -0.006286f, -0.009104f, -0.012065f, -0.015083f, -0.018065f, -0.020919f, -0.023555f, -0.025891f, -0.027854f, -0.029383f, -0.030432f, -0.030969f, -0.030982f, -0.030475f, -0.029468f, -0.027999f, -0.026120f, -0.023894f, -0.021395f, -0.018706f, -0.015911f, -0.013097f, -0.010347f, -0.007739f, -0.005344f, -0.003220f, -0.001415f, 0.000040f, 0.001127f, 0.001844f, 0.002204f, 0.002235f, 0.001976f, 0.001478f, 0.000801f, 0.000009f, -0.000830f, -0.001647f, -0.002379f, -0.002965f, -0.003354f, -0.003506f, -0.003391f, -0.002992f, -0.002309f, -0.001353f, -0.000149f, 0.001265f, 0.002842f, 0.004523f, 0.006247f, 0.007944f, 0.009546f, 0.010988f, 0.012205f, 0.013144f, 0.013759f, 0.014014f, 0.013888f, 0.013374f, 0.012478f, 0.011219f, 0.009633f, 0.007766f, 0.005674f, 0.003424f, 0.001085f, -0.001265f, -0.003552f, -0.005703f, -0.007649f, -0.009329f, -0.010692f, -0.011698f, + -0.012321f, -0.012549f, -0.012384f, -0.011842f, -0.010953f, -0.009760f, -0.008315f, -0.006679f, -0.004921f, -0.003112f, -0.001323f, 0.000375f, 0.001917f, 0.003245f, 0.004311f, 0.005076f, 0.005514f, 0.005615f, 0.005380f, 0.004824f, 0.003975f, 0.002872f, 0.001564f, 0.000109f, -0.001431f, -0.002990f, -0.004504f, -0.005909f, -0.007146f, -0.008165f, -0.008925f, -0.009393f, -0.009551f, -0.009394f, -0.008928f, -0.008172f, -0.007159f, -0.005929f, -0.004534f, -0.003031f, -0.001480f, 0.000053f, 0.001507f, 0.002823f, 0.003946f, 0.004831f, 0.005442f, 0.005753f, 0.036056f, 0.021124f, 0.026973f, 0.002853f, 0.025504f, -0.036759f, 0.120369f, 0.068962f, -0.020475f, -0.006364f, 0.082802f, -0.095240f, 0.015746f, 0.112186f, -0.049374f, -0.361187f, -0.225574f, -0.127324f, 0.157493f, 0.116115f, -0.176209f, -0.033021f, 0.133424f, 0.235411f, 0.062228f, -0.044699f, -0.116768f, -0.191572f, -0.051900f, 0.128522f, 0.226795f, 0.159784f, 0.002433f, -0.116993f, -0.146142f, -0.075191f, 0.062285f, 0.165989f, 0.094672f, 0.046845f, -0.069561f, -0.120506f, -0.054545f, 0.095776f, 0.175229f, 0.142224f, -0.009731f, -0.071782f, + -0.077554f, -0.112175f, -0.041778f, 0.011164f, 0.128118f, 0.208308f, 0.235745f, 0.111922f, -0.132997f, -0.259796f, -0.113422f, 0.074893f, -0.038254f, 0.238270f, 0.168505f, 0.082608f, -0.031260f, 0.116822f, -0.233589f, -0.185223f, -0.173442f, 0.043233f, 0.021947f, 0.054493f, -0.126625f, 0.023288f, 0.105875f, 0.198739f, 0.250896f, -0.249375f, -0.448407f, -0.145145f, 0.106279f, 0.302558f, 0.246126f, 0.196574f, -0.235638f, -0.653698f, -0.528796f, -0.090020f, 0.349899f, 0.436636f, 0.195874f, -0.175564f, -0.414966f, -0.390250f, -0.051659f, 0.151280f, 0.221583f, 0.036830f, -0.113118f, -0.102813f, 0.129464f, 0.150724f, 0.030080f, -0.103389f, -0.144849f, -0.060319f, 0.117822f, 0.184830f, 0.123875f, -0.015875f, -0.102409f, -0.076583f, -0.014518f, 0.191465f, 0.143807f, -0.120737f, -0.168517f, -0.104127f, -0.043151f, 0.037230f, 0.046696f, -0.021623f, -0.120959f, -0.067850f, -0.039591f, -0.013026f, -0.008023f, 0.001913f, -0.040271f, -0.073136f, 0.018257f, 0.059690f, 0.043106f, -0.031780f, -0.123499f, -0.075675f, -0.003068f, 0.069011f, 0.094692f, 0.066325f, -0.067325f, -0.140321f, -0.080914f, 0.095344f, + 0.192658f, 0.148638f, -0.039963f, -0.225561f, -0.285811f, -0.131370f, 0.112440f, 0.338432f, 0.285997f, 0.056425f, -0.307868f, -0.433614f, -0.250132f, 0.100298f, 0.381305f, 0.396289f, 0.121852f, -0.230055f, -0.398159f, -0.299296f, -0.003885f, 0.316878f, 0.413720f, 0.151302f, -0.177576f, -0.366316f, -0.264946f, 0.003264f, 0.196150f, 0.209733f, 0.039209f, -0.155458f, -0.213414f, -0.109735f, 0.103263f, 0.311253f, 0.159213f, -0.165452f, -0.350194f, -0.227372f, 0.093303f, 0.300425f, 0.213728f, -0.091342f, -0.300816f, -0.218461f, 0.065816f, 0.244071f, 0.162550f, -0.092415f, -0.238137f, -0.128252f, 0.100712f, 0.181651f, 0.030990f, -0.157017f, -0.115265f, 0.070998f, 0.081800f, -0.046351f, -0.044295f, 0.008006f, 0.002149f, -0.009225f, -0.006588f, -0.009025f, -0.006800f, -0.005616f, -0.005679f, -0.009525f, -0.008407f, -0.006958f, -0.003893f, -0.006852f, -0.008169f, -0.007599f, -0.008781f, -0.005618f, -0.005729f, -0.006583f, -0.011031f, -0.006071f, -0.008584f, -0.006814f, -0.003493f, -0.006068f, -0.008759f, -0.010555f, -0.008607f, -0.005921f, -0.007738f, -0.005798f, -0.007830f, -0.004725f, -0.005808f, -0.010209f}, + {-0.029892f, -0.029542f, -0.028856f, -0.027857f, -0.026583f, -0.025079f, -0.023399f, -0.021600f, -0.019744f, -0.017891f, -0.016098f, -0.014418f, -0.012895f, -0.011561f, -0.010440f, -0.009540f, -0.008855f, -0.008369f, -0.008049f, -0.007854f, -0.007730f, -0.007616f, -0.007448f, -0.007158f, -0.006680f, -0.005952f, -0.004918f, -0.003536f, -0.001775f, 0.000383f, 0.002934f, 0.005861f, 0.009126f, 0.012674f, 0.016434f, 0.020319f, 0.024230f, 0.028058f, 0.031689f, 0.035007f, 0.037898f, 0.040252f, 0.041972f, 0.042973f, 0.043189f, 0.042572f, 0.041100f, 0.038772f, 0.035614f, 0.031677f, 0.027035f, 0.021787f, 0.016048f, 0.009953f, 0.003650f, -0.002707f, -0.008959f, -0.014945f, -0.020515f, -0.025524f, -0.029848f, -0.033376f, -0.036023f, -0.037728f, -0.038458f, -0.038206f, -0.036995f, -0.034872f, -0.031914f, -0.028218f, -0.023902f, -0.019098f, -0.013952f, -0.008616f, -0.003243f, 0.002016f, 0.007018f, 0.011632f, 0.015743f, 0.019255f, 0.022095f, 0.024213f, 0.025584f, 0.026207f, 0.026107f, 0.025331f, 0.023946f, 0.022036f, 0.019699f, 0.017044f, 0.014184f, 0.011235f, 0.008308f, 0.005510f, 0.002935f, 0.000663f, + -0.001242f, -0.002733f, -0.003786f, -0.004393f, -0.004571f, -0.004350f, -0.003782f, -0.002930f, -0.001872f, -0.000690f, 0.000525f, 0.001683f, 0.002699f, 0.003490f, 0.003986f, 0.004128f, 0.003872f, 0.003192f, 0.002077f, 0.000537f, -0.001401f, -0.003695f, -0.006286f, -0.009104f, -0.012065f, -0.015083f, -0.018065f, -0.020919f, -0.023555f, -0.025891f, -0.027854f, -0.029383f, -0.030432f, -0.030969f, -0.030982f, -0.030475f, -0.029468f, -0.027999f, -0.026120f, -0.023894f, -0.021395f, -0.018706f, -0.015911f, -0.013097f, -0.010347f, -0.007739f, -0.005344f, -0.003220f, -0.001415f, 0.000040f, 0.001127f, 0.001844f, 0.002204f, 0.002235f, 0.001976f, 0.001478f, 0.000801f, 0.000009f, -0.000830f, -0.001647f, -0.002379f, -0.002965f, -0.003354f, -0.003506f, -0.003391f, -0.002992f, -0.002309f, -0.001353f, -0.000149f, 0.001265f, 0.002842f, 0.004523f, 0.006247f, 0.007944f, 0.009546f, 0.010988f, 0.012205f, 0.013144f, 0.013759f, 0.014014f, 0.013888f, 0.013374f, 0.012478f, 0.011219f, 0.009633f, 0.007766f, 0.005674f, 0.003424f, 0.001085f, -0.001265f, -0.003552f, -0.005703f, -0.007649f, -0.009329f, -0.010692f, -0.011698f, + -0.012321f, -0.012549f, -0.012384f, -0.011842f, -0.010953f, -0.009760f, -0.008315f, -0.006679f, -0.004921f, -0.003112f, -0.001323f, 0.000375f, 0.001917f, 0.003245f, 0.004311f, 0.005076f, 0.005514f, 0.005615f, 0.005380f, 0.004824f, 0.003975f, 0.002872f, 0.001564f, 0.000109f, -0.001431f, -0.002990f, -0.004504f, -0.005909f, -0.007146f, -0.008165f, -0.008925f, -0.009393f, -0.009551f, -0.009394f, -0.008928f, -0.008172f, -0.007159f, -0.005929f, -0.004534f, -0.003031f, -0.001480f, 0.000053f, 0.001507f, 0.002823f, 0.003946f, 0.004831f, 0.005442f, 0.005753f, 0.036056f, 0.021124f, 0.026973f, 0.002853f, 0.025504f, -0.036759f, 0.120369f, 0.068962f, -0.020475f, -0.006364f, 0.082802f, -0.095240f, 0.015746f, 0.112186f, -0.049374f, -0.361187f, -0.225574f, -0.127324f, 0.157493f, 0.116115f, -0.176209f, -0.033021f, 0.133424f, 0.235411f, 0.062228f, -0.044699f, -0.116768f, -0.191572f, -0.051900f, 0.128522f, 0.226795f, 0.159784f, 0.002433f, -0.116993f, -0.146142f, -0.075191f, 0.062285f, 0.165989f, 0.094672f, 0.046845f, -0.069561f, -0.120506f, -0.054545f, 0.095776f, 0.175229f, 0.142224f, -0.009731f, -0.071782f, + -0.077554f, -0.112175f, -0.041778f, 0.011164f, 0.128118f, 0.208308f, 0.235745f, 0.111922f, -0.132997f, -0.259796f, -0.113422f, 0.074893f, -0.038254f, 0.238270f, 0.168505f, 0.082608f, -0.031260f, 0.116822f, -0.233589f, -0.185223f, -0.173442f, 0.043233f, 0.021947f, 0.054493f, -0.126625f, 0.023288f, 0.105875f, 0.198739f, 0.250896f, -0.249375f, -0.448407f, -0.145145f, 0.106279f, 0.302558f, 0.246126f, 0.196574f, -0.235638f, -0.653698f, -0.528796f, -0.090020f, 0.349899f, 0.436636f, 0.195874f, -0.175564f, -0.414966f, -0.390250f, -0.051659f, 0.151280f, 0.221583f, 0.036830f, -0.113118f, -0.102813f, 0.129464f, 0.150724f, 0.030080f, -0.103389f, -0.144849f, -0.060319f, 0.117822f, 0.184830f, 0.123875f, -0.015875f, -0.102409f, -0.076583f, -0.014518f, 0.191465f, 0.143807f, -0.120737f, -0.168517f, -0.104127f, -0.043151f, 0.037230f, 0.046696f, -0.021623f, -0.120959f, -0.067850f, -0.039591f, -0.013026f, -0.008023f, 0.001913f, -0.040271f, -0.073136f, 0.018257f, 0.059690f, 0.043106f, -0.031780f, -0.123499f, -0.075675f, -0.003068f, 0.069011f, 0.094692f, 0.066325f, -0.067325f, -0.140321f, -0.080914f, 0.095344f, + 0.192658f, 0.148638f, -0.039963f, -0.225561f, -0.285811f, -0.131370f, 0.112440f, 0.338432f, 0.285997f, 0.056425f, -0.307868f, -0.433614f, -0.250132f, 0.100298f, 0.381305f, 0.396289f, 0.121852f, -0.230055f, -0.398159f, -0.299296f, -0.003885f, 0.316878f, 0.413720f, 0.151302f, -0.177576f, -0.366316f, -0.264946f, 0.003264f, 0.196150f, 0.209733f, 0.039209f, -0.155458f, -0.213414f, -0.109735f, 0.103263f, 0.311253f, 0.159213f, -0.165452f, -0.350194f, -0.227372f, 0.093303f, 0.300425f, 0.213728f, -0.091342f, -0.300816f, -0.218461f, 0.065816f, 0.244071f, 0.162550f, -0.092415f, -0.238137f, -0.128252f, 0.100712f, 0.181651f, 0.030990f, -0.157017f, -0.115265f, 0.070998f, 0.081800f, -0.046351f, -0.044295f, 0.008006f, 0.002149f, -0.009225f, -0.006588f, -0.009025f, -0.006800f, -0.005616f, -0.005679f, -0.009525f, -0.008407f, -0.006958f, -0.003893f, -0.006852f, -0.008169f, -0.007599f, -0.008781f, -0.005618f, -0.005729f, -0.006583f, -0.011031f, -0.006071f, -0.008584f, -0.006814f, -0.003493f, -0.006068f, -0.008759f, -0.010555f, -0.008607f, -0.005921f, -0.007738f, -0.005798f, -0.007830f, -0.004725f, -0.005808f, -0.010209f} + }, + { + {-0.014853f, -0.014704f, -0.014411f, -0.013990f, -0.013461f, -0.012849f, -0.012185f, -0.011500f, -0.010831f, -0.010211f, -0.009675f, -0.009252f, -0.008968f, -0.008844f, -0.008893f, -0.009121f, -0.009525f, -0.010095f, -0.010810f, -0.011644f, -0.012561f, -0.013520f, -0.014474f, -0.015372f, -0.016163f, -0.016793f, -0.017211f, -0.017371f, -0.017230f, -0.016755f, -0.015919f, -0.014708f, -0.013117f, -0.011153f, -0.008836f, -0.006199f, -0.003284f, -0.000147f, 0.003149f, 0.006531f, 0.009921f, 0.013235f, 0.016389f, 0.019297f, 0.021880f, 0.024059f, 0.025766f, 0.026943f, 0.027540f, 0.027524f, 0.026875f, 0.025588f, 0.023674f, 0.021160f, 0.018087f, 0.014513f, 0.010507f, 0.006150f, 0.001532f, -0.003249f, -0.008091f, -0.012889f, -0.017541f, -0.021946f, -0.026010f, -0.029648f, -0.032785f, -0.035358f, -0.037320f, -0.038638f, -0.039295f, -0.039291f, -0.038643f, -0.037382f, -0.035555f, -0.033222f, -0.030454f, -0.027331f, -0.023942f, -0.020380f, -0.016738f, -0.013112f, -0.009591f, -0.006263f, -0.003205f, -0.000485f, 0.001839f, 0.003724f, 0.005139f, 0.006068f, 0.006509f, 0.006473f, 0.005989f, 0.005093f, 0.003835f, 0.002275f, + 0.000479f, -0.001479f, -0.003525f, -0.005581f, -0.007571f, -0.009421f, -0.011066f, -0.012443f, -0.013502f, -0.014201f, -0.014508f, -0.014406f, -0.013888f, -0.012960f, -0.011639f, -0.009953f, -0.007944f, -0.005657f, -0.003151f, -0.000486f, 0.002270f, 0.005050f, 0.007783f, 0.010401f, 0.012840f, 0.015038f, 0.016941f, 0.018502f, 0.019684f, 0.020458f, 0.020805f, 0.020716f, 0.020195f, 0.019253f, 0.017912f, 0.016203f, 0.014165f, 0.011845f, 0.009293f, 0.006565f, 0.003720f, 0.000819f, -0.002080f, -0.004917f, -0.007637f, -0.010188f, -0.012524f, -0.014605f, -0.016397f, -0.017873f, -0.019017f, -0.019817f, -0.020271f, -0.020385f, -0.020172f, -0.019650f, -0.018847f, -0.017792f, -0.016521f, -0.015073f, -0.013489f, -0.011811f, -0.010081f, -0.008343f, -0.006635f, -0.004996f, -0.003461f, -0.002058f, -0.000816f, 0.000247f, 0.001113f, 0.001773f, 0.002222f, 0.002460f, 0.002493f, 0.002331f, 0.001987f, 0.001482f, 0.000834f, 0.000069f, -0.000788f, -0.001710f, -0.002671f, -0.003644f, -0.004603f, -0.005524f, -0.006384f, -0.007165f, -0.007850f, -0.008424f, -0.008879f, -0.009209f, -0.009409f, -0.009481f, -0.009429f, -0.009260f, + -0.008984f, -0.008613f, -0.008161f, -0.007645f, -0.007081f, -0.006485f, -0.005876f, -0.005271f, -0.004684f, -0.004131f, -0.003625f, -0.003177f, -0.002795f, -0.002486f, -0.002254f, -0.002099f, -0.002022f, -0.002019f, -0.002085f, -0.002212f, -0.002392f, -0.002614f, -0.002869f, -0.003143f, -0.003427f, -0.003708f, -0.003977f, -0.004223f, -0.004439f, -0.004617f, -0.004752f, -0.004840f, -0.004880f, -0.004873f, -0.004819f, -0.004724f, -0.004591f, -0.004428f, -0.004241f, -0.004040f, -0.003832f, -0.003627f, -0.003433f, -0.003257f, -0.003107f, -0.002990f, -0.002908f, -0.002867f, -0.021142f, -0.012772f, 0.041782f, 0.011461f, -0.023324f, -0.048552f, 0.083324f, 0.128741f, 0.163210f, 0.022466f, -0.073034f, -0.164555f, -0.008334f, 0.027284f, -0.094363f, -0.135137f, -0.128155f, -0.159423f, 0.082480f, 0.276145f, 0.024414f, 0.012123f, -0.073510f, -0.075878f, -0.059393f, 0.141106f, 0.094630f, 0.252383f, 0.019271f, 0.006408f, -0.120424f, -0.077277f, -0.046363f, 0.087579f, 0.149186f, 0.113399f, -0.009919f, -0.070191f, -0.072746f, -0.074360f, -0.034070f, 0.050165f, 0.105453f, 0.054835f, -0.023624f, -0.052217f, -0.043143f, 0.060931f, + 0.037146f, -0.077516f, -0.101350f, -0.030535f, 0.010477f, 0.027091f, 0.106609f, -0.004045f, 0.035518f, -0.038627f, 0.027477f, -0.009505f, -0.146818f, 0.148435f, 0.115373f, -0.024588f, -0.084493f, 0.082609f, -0.189595f, -0.023110f, -0.024360f, 0.019452f, -0.139658f, -0.250359f, -0.312635f, 0.005022f, 0.285309f, 0.301526f, 0.106997f, -0.150844f, -0.259924f, -0.206224f, 0.000870f, 0.241643f, 0.281995f, 0.062769f, -0.089250f, -0.041351f, 0.002812f, 0.054198f, 0.045527f, 0.040906f, -0.053555f, -0.145768f, -0.138296f, -0.016220f, 0.154665f, 0.237434f, 0.194321f, 0.016704f, -0.203386f, -0.280457f, -0.244762f, 0.079565f, 0.301006f, 0.366981f, 0.209383f, -0.097659f, -0.290700f, -0.270046f, -0.115097f, 0.058905f, 0.086002f, 0.106486f, 0.028261f, -0.094005f, -0.005879f, 0.130444f, 0.200986f, -0.052487f, -0.121960f, -0.124044f, 0.042045f, 0.084948f, 0.176359f, 0.093919f, -0.040256f, -0.179410f, -0.211577f, -0.091507f, 0.129094f, 0.291859f, 0.261148f, 0.052084f, -0.248293f, -0.365230f, -0.303634f, 0.002162f, 0.338277f, 0.428645f, 0.233104f, -0.079498f, -0.326450f, -0.334632f, -0.092269f, 0.060237f, + 0.159157f, 0.139104f, 0.076327f, -0.011701f, -0.089277f, -0.092387f, -0.028372f, 0.036030f, 0.113183f, 0.072351f, 0.020929f, -0.031411f, -0.112913f, -0.067827f, -0.012575f, 0.118199f, 0.122719f, 0.053657f, -0.066424f, -0.129719f, -0.134491f, -0.023484f, 0.111408f, 0.114918f, 0.026332f, 0.015100f, -0.020594f, -0.043328f, -0.065491f, -0.008995f, 0.028595f, 0.063051f, 0.066698f, 0.020313f, -0.018236f, 0.019814f, -0.129555f, -0.137360f, -0.047141f, 0.080344f, 0.098521f, 0.034005f, -0.063626f, -0.085019f, -0.038896f, 0.031129f, 0.050531f, 0.026089f, -0.021032f, -0.038992f, -0.035237f, 0.003396f, 0.028927f, 0.029184f, -0.008887f, -0.036009f, -0.020577f, 0.026326f, 0.015104f, -0.015360f, -0.013356f, 0.007853f, -0.001375f, -0.000048f, -0.004307f, 0.001124f, -0.000891f, -0.000933f, -0.002570f, 0.000851f, -0.002801f, -0.000454f, -0.000990f, -0.000218f, -0.001979f, 0.003152f, -0.001396f, -0.001332f, 0.003680f, 0.001222f, 0.000151f, -0.000306f, -0.001812f, -0.001295f, -0.002856f, 0.000203f, -0.004890f, 0.002523f, 0.000903f, 0.002135f, -0.002393f, -0.001312f, 0.000310f, -0.002222f, -0.000223f, -0.000378f}, + {-0.014853f, -0.014704f, -0.014411f, -0.013990f, -0.013461f, -0.012849f, -0.012185f, -0.011500f, -0.010831f, -0.010211f, -0.009675f, -0.009252f, -0.008968f, -0.008844f, -0.008893f, -0.009121f, -0.009525f, -0.010095f, -0.010810f, -0.011644f, -0.012561f, -0.013520f, -0.014474f, -0.015372f, -0.016163f, -0.016793f, -0.017211f, -0.017371f, -0.017230f, -0.016755f, -0.015919f, -0.014708f, -0.013117f, -0.011153f, -0.008836f, -0.006199f, -0.003284f, -0.000147f, 0.003149f, 0.006531f, 0.009921f, 0.013235f, 0.016389f, 0.019297f, 0.021880f, 0.024059f, 0.025766f, 0.026943f, 0.027540f, 0.027524f, 0.026875f, 0.025588f, 0.023674f, 0.021160f, 0.018087f, 0.014513f, 0.010507f, 0.006150f, 0.001532f, -0.003249f, -0.008091f, -0.012889f, -0.017541f, -0.021946f, -0.026010f, -0.029648f, -0.032785f, -0.035358f, -0.037320f, -0.038638f, -0.039295f, -0.039291f, -0.038643f, -0.037382f, -0.035555f, -0.033222f, -0.030454f, -0.027331f, -0.023942f, -0.020380f, -0.016738f, -0.013112f, -0.009591f, -0.006263f, -0.003205f, -0.000485f, 0.001839f, 0.003724f, 0.005139f, 0.006068f, 0.006509f, 0.006473f, 0.005989f, 0.005093f, 0.003835f, 0.002275f, + 0.000479f, -0.001479f, -0.003525f, -0.005581f, -0.007571f, -0.009421f, -0.011066f, -0.012443f, -0.013502f, -0.014201f, -0.014508f, -0.014406f, -0.013888f, -0.012960f, -0.011639f, -0.009953f, -0.007944f, -0.005657f, -0.003151f, -0.000486f, 0.002270f, 0.005050f, 0.007783f, 0.010401f, 0.012840f, 0.015038f, 0.016941f, 0.018502f, 0.019684f, 0.020458f, 0.020805f, 0.020716f, 0.020195f, 0.019253f, 0.017912f, 0.016203f, 0.014165f, 0.011845f, 0.009293f, 0.006565f, 0.003720f, 0.000819f, -0.002080f, -0.004917f, -0.007637f, -0.010188f, -0.012524f, -0.014605f, -0.016397f, -0.017873f, -0.019017f, -0.019817f, -0.020271f, -0.020385f, -0.020172f, -0.019650f, -0.018847f, -0.017792f, -0.016521f, -0.015073f, -0.013489f, -0.011811f, -0.010081f, -0.008343f, -0.006635f, -0.004996f, -0.003461f, -0.002058f, -0.000816f, 0.000247f, 0.001113f, 0.001773f, 0.002222f, 0.002460f, 0.002493f, 0.002331f, 0.001987f, 0.001482f, 0.000834f, 0.000069f, -0.000788f, -0.001710f, -0.002671f, -0.003644f, -0.004603f, -0.005524f, -0.006384f, -0.007165f, -0.007850f, -0.008424f, -0.008879f, -0.009209f, -0.009409f, -0.009481f, -0.009429f, -0.009260f, + -0.008984f, -0.008613f, -0.008161f, -0.007645f, -0.007081f, -0.006485f, -0.005876f, -0.005271f, -0.004684f, -0.004131f, -0.003625f, -0.003177f, -0.002795f, -0.002486f, -0.002254f, -0.002099f, -0.002022f, -0.002019f, -0.002085f, -0.002212f, -0.002392f, -0.002614f, -0.002869f, -0.003143f, -0.003427f, -0.003708f, -0.003977f, -0.004223f, -0.004439f, -0.004617f, -0.004752f, -0.004840f, -0.004880f, -0.004873f, -0.004819f, -0.004724f, -0.004591f, -0.004428f, -0.004241f, -0.004040f, -0.003832f, -0.003627f, -0.003433f, -0.003257f, -0.003107f, -0.002990f, -0.002908f, -0.002867f, -0.021142f, -0.012772f, 0.041782f, 0.011461f, -0.023324f, -0.048552f, 0.083324f, 0.128741f, 0.163210f, 0.022466f, -0.073034f, -0.164555f, -0.008334f, 0.027284f, -0.094363f, -0.135137f, -0.128155f, -0.159423f, 0.082480f, 0.276145f, 0.024414f, 0.012123f, -0.073510f, -0.075878f, -0.059393f, 0.141106f, 0.094630f, 0.252383f, 0.019271f, 0.006408f, -0.120424f, -0.077277f, -0.046363f, 0.087579f, 0.149186f, 0.113399f, -0.009919f, -0.070191f, -0.072746f, -0.074360f, -0.034070f, 0.050165f, 0.105453f, 0.054835f, -0.023624f, -0.052217f, -0.043143f, 0.060931f, + 0.037146f, -0.077516f, -0.101350f, -0.030535f, 0.010477f, 0.027091f, 0.106609f, -0.004045f, 0.035518f, -0.038627f, 0.027477f, -0.009505f, -0.146818f, 0.148435f, 0.115373f, -0.024588f, -0.084493f, 0.082609f, -0.189595f, -0.023110f, -0.024360f, 0.019452f, -0.139658f, -0.250359f, -0.312635f, 0.005022f, 0.285309f, 0.301526f, 0.106997f, -0.150844f, -0.259924f, -0.206224f, 0.000870f, 0.241643f, 0.281995f, 0.062769f, -0.089250f, -0.041351f, 0.002812f, 0.054198f, 0.045527f, 0.040906f, -0.053555f, -0.145768f, -0.138296f, -0.016220f, 0.154665f, 0.237434f, 0.194321f, 0.016704f, -0.203386f, -0.280457f, -0.244762f, 0.079565f, 0.301006f, 0.366981f, 0.209383f, -0.097659f, -0.290700f, -0.270046f, -0.115097f, 0.058905f, 0.086002f, 0.106486f, 0.028261f, -0.094005f, -0.005879f, 0.130444f, 0.200986f, -0.052487f, -0.121960f, -0.124044f, 0.042045f, 0.084948f, 0.176359f, 0.093919f, -0.040256f, -0.179410f, -0.211577f, -0.091507f, 0.129094f, 0.291859f, 0.261148f, 0.052084f, -0.248293f, -0.365230f, -0.303634f, 0.002162f, 0.338277f, 0.428645f, 0.233104f, -0.079498f, -0.326450f, -0.334632f, -0.092269f, 0.060237f, + 0.159157f, 0.139104f, 0.076327f, -0.011701f, -0.089277f, -0.092387f, -0.028372f, 0.036030f, 0.113183f, 0.072351f, 0.020929f, -0.031411f, -0.112913f, -0.067827f, -0.012575f, 0.118199f, 0.122719f, 0.053657f, -0.066424f, -0.129719f, -0.134491f, -0.023484f, 0.111408f, 0.114918f, 0.026332f, 0.015100f, -0.020594f, -0.043328f, -0.065491f, -0.008995f, 0.028595f, 0.063051f, 0.066698f, 0.020313f, -0.018236f, 0.019814f, -0.129555f, -0.137360f, -0.047141f, 0.080344f, 0.098521f, 0.034005f, -0.063626f, -0.085019f, -0.038896f, 0.031129f, 0.050531f, 0.026089f, -0.021032f, -0.038992f, -0.035237f, 0.003396f, 0.028927f, 0.029184f, -0.008887f, -0.036009f, -0.020577f, 0.026326f, 0.015104f, -0.015360f, -0.013356f, 0.007853f, -0.001375f, -0.000048f, -0.004307f, 0.001124f, -0.000891f, -0.000933f, -0.002570f, 0.000851f, -0.002801f, -0.000454f, -0.000990f, -0.000218f, -0.001979f, 0.003152f, -0.001396f, -0.001332f, 0.003680f, 0.001222f, 0.000151f, -0.000306f, -0.001812f, -0.001295f, -0.002856f, 0.000203f, -0.004890f, 0.002523f, 0.000903f, 0.002135f, -0.002393f, -0.001312f, 0.000310f, -0.002222f, -0.000223f, -0.000378f} + }, + { + {0.030630f, 0.029886f, 0.028419f, 0.026269f, 0.023494f, 0.020171f, 0.016388f, 0.012248f, 0.007859f, 0.003338f, -0.001200f, -0.005641f, -0.009876f, -0.013804f, -0.017337f, -0.020400f, -0.022935f, -0.024898f, -0.026269f, -0.027040f, -0.027226f, -0.026858f, -0.025979f, -0.024651f, -0.022944f, -0.020937f, -0.018715f, -0.016365f, -0.013975f, -0.011627f, -0.009400f, -0.007362f, -0.005571f, -0.004073f, -0.002900f, -0.002071f, -0.001588f, -0.001443f, -0.001612f, -0.002061f, -0.002744f, -0.003610f, -0.004601f, -0.005654f, -0.006709f, -0.007705f, -0.008586f, -0.009302f, -0.009810f, -0.010078f, -0.010084f, -0.009816f, -0.009274f, -0.008469f, -0.007422f, -0.006164f, -0.004732f, -0.003171f, -0.001530f, 0.000141f, 0.001791f, 0.003371f, 0.004836f, 0.006146f, 0.007269f, 0.008179f, 0.008862f, 0.009311f, 0.009530f, 0.009530f, 0.009332f, 0.008965f, 0.008463f, 0.007863f, 0.007208f, 0.006538f, 0.005896f, 0.005319f, 0.004841f, 0.004491f, 0.004289f, 0.004247f, 0.004371f, 0.004656f, 0.005087f, 0.005645f, 0.006301f, 0.007019f, 0.007762f, 0.008485f, 0.009148f, 0.009706f, 0.010119f, 0.010352f, 0.010375f, 0.010165f, + 0.009708f, 0.009001f, 0.008046f, 0.006861f, 0.005470f, 0.003906f, 0.002212f, 0.000436f, -0.001369f, -0.003144f, -0.004831f, -0.006373f, -0.007713f, -0.008801f, -0.009593f, -0.010051f, -0.010149f, -0.009870f, -0.009208f, -0.008168f, -0.006767f, -0.005033f, -0.003004f, -0.000725f, 0.001749f, 0.004359f, 0.007042f, 0.009732f, 0.012365f, 0.014878f, 0.017212f, 0.019314f, 0.021138f, 0.022648f, 0.023816f, 0.024624f, 0.025066f, 0.025145f, 0.024873f, 0.024274f, 0.023376f, 0.022217f, 0.020840f, 0.019289f, 0.017613f, 0.015860f, 0.014077f, 0.012308f, 0.010594f, 0.008969f, 0.007461f, 0.006094f, 0.004882f, 0.003833f, 0.002948f, 0.002223f, 0.001646f, 0.001203f, 0.000875f, 0.000640f, 0.000476f, 0.000360f, 0.000273f, 0.000194f, 0.000108f, 0.000003f, -0.000128f, -0.000288f, -0.000476f, -0.000686f, -0.000906f, -0.001125f, -0.001324f, -0.001488f, -0.001596f, -0.001630f, -0.001575f, -0.001415f, -0.001139f, -0.000741f, -0.000217f, 0.000429f, 0.001189f, 0.002051f, 0.002998f, 0.004006f, 0.005050f, 0.006102f, 0.007132f, 0.008110f, 0.009004f, 0.009788f, 0.010435f, 0.010925f, 0.011241f, 0.011371f, + 0.011312f, 0.011064f, 0.010635f, 0.010040f, 0.009298f, 0.008435f, 0.007480f, 0.006465f, 0.005424f, 0.004394f, 0.003408f, 0.002500f, 0.001700f, 0.001033f, 0.000520f, 0.000176f, 0.000009f, 0.000021f, 0.000206f, 0.000552f, 0.001043f, 0.001654f, 0.002358f, 0.003124f, 0.003918f, 0.004707f, 0.005455f, 0.006132f, 0.006708f, 0.007158f, 0.007462f, 0.007606f, 0.007583f, 0.007391f, 0.007036f, 0.006531f, 0.005894f, 0.005148f, 0.004321f, 0.003444f, 0.002551f, 0.001675f, 0.000851f, 0.000109f, -0.000522f, -0.001018f, -0.001359f, -0.001533f, -0.013588f, -0.039467f, -0.037901f, -0.021588f, 0.011313f, 0.000789f, -0.055494f, 0.005170f, -0.073707f, -0.098420f, -0.068258f, -0.001448f, -0.054406f, 0.005726f, -0.020404f, -0.008435f, -0.065711f, -0.030719f, 0.136399f, 0.158010f, -0.089710f, -0.028559f, 0.013863f, 0.105298f, 0.066637f, 0.035608f, 0.039413f, -0.028561f, -0.059565f, -0.060206f, 0.033290f, 0.092845f, -0.009329f, -0.065797f, -0.068659f, -0.005349f, 0.042261f, 0.099630f, 0.025256f, -0.005513f, -0.041187f, 0.031916f, 0.017488f, 0.091830f, 0.037378f, 0.014187f, -0.023848f, -0.000482f, + -0.050457f, -0.055721f, -0.058509f, 0.077087f, 0.048546f, 0.027771f, -0.043394f, -0.103564f, -0.084214f, 0.008461f, 0.031071f, 0.040095f, 0.097907f, -0.095014f, -0.111959f, -0.069063f, 0.011158f, -0.025619f, 0.173890f, 0.126003f, 0.099104f, -0.033678f, -0.044920f, -0.097036f, 0.056543f, 0.058742f, 0.064084f, 0.051523f, 0.013651f, -0.166152f, -0.244119f, -0.147183f, 0.090228f, 0.235326f, 0.281570f, 0.040560f, -0.139487f, -0.269164f, -0.126385f, 0.045203f, 0.226480f, 0.214837f, 0.079560f, -0.049083f, -0.283805f, -0.236087f, 0.000289f, 0.173246f, 0.206911f, 0.015769f, -0.144701f, -0.163731f, -0.050881f, 0.084700f, 0.150058f, 0.014995f, -0.147567f, -0.221592f, -0.110711f, 0.103520f, 0.274064f, 0.143869f, -0.128538f, -0.312151f, -0.225086f, -0.092757f, 0.300536f, 0.418715f, 0.127606f, -0.230029f, -0.341479f, -0.195968f, 0.122780f, 0.284097f, 0.358943f, 0.123112f, -0.127152f, -0.283415f, -0.196468f, 0.014572f, 0.231089f, 0.266968f, 0.093281f, -0.111264f, -0.201375f, -0.113465f, 0.096944f, 0.219131f, 0.117782f, -0.054741f, -0.153716f, -0.120550f, 0.107774f, 0.195634f, 0.116388f, -0.062415f, + -0.192398f, -0.210544f, -0.029201f, 0.201855f, 0.249644f, 0.100840f, -0.102094f, -0.237392f, -0.208560f, -0.069246f, 0.169403f, 0.299624f, 0.217982f, -0.028703f, -0.265906f, -0.319232f, -0.125647f, 0.173379f, 0.338687f, 0.240591f, -0.008976f, -0.264023f, -0.333698f, -0.135412f, 0.048295f, 0.226408f, 0.212682f, 0.097199f, -0.085554f, -0.155354f, -0.131984f, -0.011196f, 0.083124f, 0.107153f, 0.036576f, -0.152611f, 0.004281f, 0.119319f, 0.165601f, 0.066304f, -0.049091f, -0.120765f, -0.070825f, 0.028825f, 0.109023f, 0.094864f, 0.018672f, -0.068787f, -0.085827f, -0.030428f, 0.063047f, 0.093016f, 0.044563f, -0.052808f, -0.080650f, -0.006784f, 0.083424f, 0.041339f, -0.039872f, -0.022357f, 0.024608f, 0.013488f, 0.000998f, 0.003189f, 0.007823f, 0.002533f, 0.003391f, 0.000901f, 0.002675f, 0.003156f, 0.003914f, 0.004147f, 0.003899f, -0.001965f, 0.005109f, 0.006066f, 0.003780f, 0.002728f, 0.005253f, 0.005267f, 0.004289f, 0.002943f, 0.005577f, 0.000016f, 0.002358f, 0.001586f, 0.006119f, 0.001132f, 0.000415f, 0.003371f, 0.002974f, 0.001878f, 0.008552f, 0.005038f, 0.004298f, 0.003232f}, + {0.030630f, 0.029886f, 0.028419f, 0.026269f, 0.023494f, 0.020171f, 0.016388f, 0.012248f, 0.007859f, 0.003338f, -0.001200f, -0.005641f, -0.009876f, -0.013804f, -0.017337f, -0.020400f, -0.022935f, -0.024898f, -0.026269f, -0.027040f, -0.027226f, -0.026858f, -0.025979f, -0.024651f, -0.022944f, -0.020937f, -0.018715f, -0.016365f, -0.013975f, -0.011627f, -0.009400f, -0.007362f, -0.005571f, -0.004073f, -0.002900f, -0.002071f, -0.001588f, -0.001443f, -0.001612f, -0.002061f, -0.002744f, -0.003610f, -0.004601f, -0.005654f, -0.006709f, -0.007705f, -0.008586f, -0.009302f, -0.009810f, -0.010078f, -0.010084f, -0.009816f, -0.009274f, -0.008469f, -0.007422f, -0.006164f, -0.004732f, -0.003171f, -0.001530f, 0.000141f, 0.001791f, 0.003371f, 0.004836f, 0.006146f, 0.007269f, 0.008179f, 0.008862f, 0.009311f, 0.009530f, 0.009530f, 0.009332f, 0.008965f, 0.008463f, 0.007863f, 0.007208f, 0.006538f, 0.005896f, 0.005319f, 0.004841f, 0.004491f, 0.004289f, 0.004247f, 0.004371f, 0.004656f, 0.005087f, 0.005645f, 0.006301f, 0.007019f, 0.007762f, 0.008485f, 0.009148f, 0.009706f, 0.010119f, 0.010352f, 0.010375f, 0.010165f, + 0.009708f, 0.009001f, 0.008046f, 0.006861f, 0.005470f, 0.003906f, 0.002212f, 0.000436f, -0.001369f, -0.003144f, -0.004831f, -0.006373f, -0.007713f, -0.008801f, -0.009593f, -0.010051f, -0.010149f, -0.009870f, -0.009208f, -0.008168f, -0.006767f, -0.005033f, -0.003004f, -0.000725f, 0.001749f, 0.004359f, 0.007042f, 0.009732f, 0.012365f, 0.014878f, 0.017212f, 0.019314f, 0.021138f, 0.022648f, 0.023816f, 0.024624f, 0.025066f, 0.025145f, 0.024873f, 0.024274f, 0.023376f, 0.022217f, 0.020840f, 0.019289f, 0.017613f, 0.015860f, 0.014077f, 0.012308f, 0.010594f, 0.008969f, 0.007461f, 0.006094f, 0.004882f, 0.003833f, 0.002948f, 0.002223f, 0.001646f, 0.001203f, 0.000875f, 0.000640f, 0.000476f, 0.000360f, 0.000273f, 0.000194f, 0.000108f, 0.000003f, -0.000128f, -0.000288f, -0.000476f, -0.000686f, -0.000906f, -0.001125f, -0.001324f, -0.001488f, -0.001596f, -0.001630f, -0.001575f, -0.001415f, -0.001139f, -0.000741f, -0.000217f, 0.000429f, 0.001189f, 0.002051f, 0.002998f, 0.004006f, 0.005050f, 0.006102f, 0.007132f, 0.008110f, 0.009004f, 0.009788f, 0.010435f, 0.010925f, 0.011241f, 0.011371f, + 0.011312f, 0.011064f, 0.010635f, 0.010040f, 0.009298f, 0.008435f, 0.007480f, 0.006465f, 0.005424f, 0.004394f, 0.003408f, 0.002500f, 0.001700f, 0.001033f, 0.000520f, 0.000176f, 0.000009f, 0.000021f, 0.000206f, 0.000552f, 0.001043f, 0.001654f, 0.002358f, 0.003124f, 0.003918f, 0.004707f, 0.005455f, 0.006132f, 0.006708f, 0.007158f, 0.007462f, 0.007606f, 0.007583f, 0.007391f, 0.007036f, 0.006531f, 0.005894f, 0.005148f, 0.004321f, 0.003444f, 0.002551f, 0.001675f, 0.000851f, 0.000109f, -0.000522f, -0.001018f, -0.001359f, -0.001533f, -0.013588f, -0.039467f, -0.037901f, -0.021588f, 0.011313f, 0.000789f, -0.055494f, 0.005170f, -0.073707f, -0.098420f, -0.068258f, -0.001448f, -0.054406f, 0.005726f, -0.020404f, -0.008435f, -0.065711f, -0.030719f, 0.136399f, 0.158010f, -0.089710f, -0.028559f, 0.013863f, 0.105298f, 0.066637f, 0.035608f, 0.039413f, -0.028561f, -0.059565f, -0.060206f, 0.033290f, 0.092845f, -0.009329f, -0.065797f, -0.068659f, -0.005349f, 0.042261f, 0.099630f, 0.025256f, -0.005513f, -0.041187f, 0.031916f, 0.017488f, 0.091830f, 0.037378f, 0.014187f, -0.023848f, -0.000482f, + -0.050457f, -0.055721f, -0.058509f, 0.077087f, 0.048546f, 0.027771f, -0.043394f, -0.103564f, -0.084214f, 0.008461f, 0.031071f, 0.040095f, 0.097907f, -0.095014f, -0.111959f, -0.069063f, 0.011158f, -0.025619f, 0.173890f, 0.126003f, 0.099104f, -0.033678f, -0.044920f, -0.097036f, 0.056543f, 0.058742f, 0.064084f, 0.051523f, 0.013651f, -0.166152f, -0.244119f, -0.147183f, 0.090228f, 0.235326f, 0.281570f, 0.040560f, -0.139487f, -0.269164f, -0.126385f, 0.045203f, 0.226480f, 0.214837f, 0.079560f, -0.049083f, -0.283805f, -0.236087f, 0.000289f, 0.173246f, 0.206911f, 0.015769f, -0.144701f, -0.163731f, -0.050881f, 0.084700f, 0.150058f, 0.014995f, -0.147567f, -0.221592f, -0.110711f, 0.103520f, 0.274064f, 0.143869f, -0.128538f, -0.312151f, -0.225086f, -0.092757f, 0.300536f, 0.418715f, 0.127606f, -0.230029f, -0.341479f, -0.195968f, 0.122780f, 0.284097f, 0.358943f, 0.123112f, -0.127152f, -0.283415f, -0.196468f, 0.014572f, 0.231089f, 0.266968f, 0.093281f, -0.111264f, -0.201375f, -0.113465f, 0.096944f, 0.219131f, 0.117782f, -0.054741f, -0.153716f, -0.120550f, 0.107774f, 0.195634f, 0.116388f, -0.062415f, + -0.192398f, -0.210544f, -0.029201f, 0.201855f, 0.249644f, 0.100840f, -0.102094f, -0.237392f, -0.208560f, -0.069246f, 0.169403f, 0.299624f, 0.217982f, -0.028703f, -0.265906f, -0.319232f, -0.125647f, 0.173379f, 0.338687f, 0.240591f, -0.008976f, -0.264023f, -0.333698f, -0.135412f, 0.048295f, 0.226408f, 0.212682f, 0.097199f, -0.085554f, -0.155354f, -0.131984f, -0.011196f, 0.083124f, 0.107153f, 0.036576f, -0.152611f, 0.004281f, 0.119319f, 0.165601f, 0.066304f, -0.049091f, -0.120765f, -0.070825f, 0.028825f, 0.109023f, 0.094864f, 0.018672f, -0.068787f, -0.085827f, -0.030428f, 0.063047f, 0.093016f, 0.044563f, -0.052808f, -0.080650f, -0.006784f, 0.083424f, 0.041339f, -0.039872f, -0.022357f, 0.024608f, 0.013488f, 0.000998f, 0.003189f, 0.007823f, 0.002533f, 0.003391f, 0.000901f, 0.002675f, 0.003156f, 0.003914f, 0.004147f, 0.003899f, -0.001965f, 0.005109f, 0.006066f, 0.003780f, 0.002728f, 0.005253f, 0.005267f, 0.004289f, 0.002943f, 0.005577f, 0.000016f, 0.002358f, 0.001586f, 0.006119f, 0.001132f, 0.000415f, 0.003371f, 0.002974f, 0.001878f, 0.008552f, 0.005038f, 0.004298f, 0.003232f} + }, + { + {0.014266f, 0.014099f, 0.013769f, 0.013283f, 0.012652f, 0.011891f, 0.011016f, 0.010046f, 0.009002f, 0.007906f, 0.006780f, 0.005647f, 0.004528f, 0.003444f, 0.002411f, 0.001448f, 0.000565f, -0.000225f, -0.000916f, -0.001505f, -0.001991f, -0.002377f, -0.002669f, -0.002875f, -0.003006f, -0.003074f, -0.003092f, -0.003075f, -0.003035f, -0.002988f, -0.002943f, -0.002912f, -0.002903f, -0.002920f, -0.002967f, -0.003043f, -0.003143f, -0.003262f, -0.003388f, -0.003509f, -0.003610f, -0.003674f, -0.003683f, -0.003618f, -0.003460f, -0.003192f, -0.002798f, -0.002262f, -0.001574f, -0.000725f, 0.000287f, 0.001462f, 0.002796f, 0.004279f, 0.005895f, 0.007626f, 0.009448f, 0.011333f, 0.013252f, 0.015170f, 0.017054f, 0.018868f, 0.020575f, 0.022141f, 0.023533f, 0.024722f, 0.025682f, 0.026391f, 0.026832f, 0.026996f, 0.026878f, 0.026480f, 0.025810f, 0.024882f, 0.023717f, 0.022341f, 0.020783f, 0.019079f, 0.017266f, 0.015382f, 0.013469f, 0.011568f, 0.009715f, 0.007950f, 0.006304f, 0.004808f, 0.003484f, 0.002353f, 0.001426f, 0.000710f, 0.000204f, -0.000098f, -0.000208f, -0.000146f, 0.000067f, 0.000404f, + 0.000834f, 0.001326f, 0.001846f, 0.002362f, 0.002842f, 0.003256f, 0.003578f, 0.003787f, 0.003865f, 0.003802f, 0.003590f, 0.003231f, 0.002731f, 0.002102f, 0.001361f, 0.000532f, -0.000359f, -0.001283f, -0.002207f, -0.003099f, -0.003926f, -0.004655f, -0.005258f, -0.005708f, -0.005983f, -0.006067f, -0.005949f, -0.005623f, -0.005091f, -0.004362f, -0.003450f, -0.002375f, -0.001163f, 0.000154f, 0.001544f, 0.002968f, 0.004388f, 0.005765f, 0.007059f, 0.008236f, 0.009260f, 0.010103f, 0.010741f, 0.011154f, 0.011332f, 0.011269f, 0.010966f, 0.010433f, 0.009686f, 0.008745f, 0.007638f, 0.006399f, 0.005062f, 0.003666f, 0.002253f, 0.000862f, -0.000467f, -0.001695f, -0.002788f, -0.003716f, -0.004452f, -0.004977f, -0.005277f, -0.005346f, -0.005184f, -0.004796f, -0.004196f, -0.003401f, -0.002437f, -0.001331f, -0.000115f, 0.001176f, 0.002508f, 0.003843f, 0.005147f, 0.006387f, 0.007532f, 0.008555f, 0.009434f, 0.010150f, 0.010693f, 0.011055f, 0.011234f, 0.011236f, 0.011070f, 0.010750f, 0.010293f, 0.009722f, 0.009059f, 0.008331f, 0.007563f, 0.006782f, 0.006013f, 0.005278f, 0.004598f, 0.003992f, + 0.003473f, 0.003051f, 0.002733f, 0.002520f, 0.002411f, 0.002400f, 0.002478f, 0.002634f, 0.002854f, 0.003121f, 0.003421f, 0.003735f, 0.004047f, 0.004342f, 0.004607f, 0.004828f, 0.004998f, 0.005109f, 0.005157f, 0.005142f, 0.005066f, 0.004933f, 0.004750f, 0.004527f, 0.004273f, 0.004001f, 0.003723f, 0.003450f, 0.003194f, 0.002966f, 0.002774f, 0.002627f, 0.002529f, 0.002482f, 0.002488f, 0.002545f, 0.002649f, 0.002793f, 0.002970f, 0.003171f, 0.003386f, 0.003604f, 0.003815f, 0.004009f, 0.004176f, 0.004308f, 0.004400f, 0.004447f, -0.008117f, -0.004781f, -0.006598f, -0.018545f, -0.025597f, 0.042077f, -0.015089f, -0.029318f, -0.005835f, -0.008171f, 0.065454f, 0.017045f, -0.029551f, 0.007135f, -0.076603f, -0.157012f, -0.066141f, -0.026523f, 0.057249f, 0.043034f, -0.070796f, -0.020043f, 0.023324f, 0.089411f, 0.084758f, 0.035790f, 0.023783f, 0.033177f, -0.041975f, -0.060794f, -0.142789f, 0.008082f, 0.042334f, 0.010198f, 0.030540f, 0.037254f, -0.074155f, -0.097473f, -0.048026f, 0.009435f, 0.067059f, 0.102453f, 0.072618f, 0.019962f, -0.034514f, -0.021699f, -0.024063f, 0.049352f, + 0.036632f, 0.016999f, -0.031435f, 0.004227f, -0.113697f, -0.018912f, 0.056030f, 0.016169f, 0.091707f, 0.078866f, -0.054679f, -0.123760f, 0.051217f, -0.068318f, 0.096888f, 0.072978f, 0.072757f, -0.076411f, -0.090509f, -0.010835f, 0.057468f, 0.075408f, 0.063779f, 0.025827f, 0.041213f, -0.078705f, -0.097994f, -0.030170f, 0.123951f, 0.082740f, -0.042369f, -0.048554f, -0.066582f, -0.106656f, -0.039913f, 0.054512f, 0.049807f, -0.114358f, -0.215607f, -0.205969f, 0.041956f, 0.234425f, 0.265590f, 0.103549f, -0.087024f, -0.245732f, -0.151602f, 0.030550f, 0.142402f, 0.082910f, 0.004883f, -0.071084f, -0.045589f, -0.014730f, 0.027929f, 0.030718f, 0.062894f, -0.059104f, -0.059472f, -0.132011f, -0.061556f, -0.023570f, 0.124157f, 0.172644f, 0.122441f, -0.128672f, -0.148254f, -0.044770f, -0.080031f, 0.032261f, 0.085118f, 0.136007f, 0.037226f, -0.130449f, -0.059001f, -0.056811f, 0.088079f, 0.162189f, 0.121557f, 0.038020f, -0.016111f, -0.151295f, -0.181267f, -0.100758f, 0.108348f, 0.272622f, 0.281771f, 0.067561f, -0.207803f, -0.273469f, -0.163158f, 0.051822f, 0.244010f, 0.261897f, 0.080929f, -0.137511f, + -0.268044f, -0.175537f, 0.052243f, 0.301171f, 0.208899f, -0.013515f, -0.180532f, -0.265725f, -0.153590f, 0.052063f, 0.197927f, 0.187255f, 0.049341f, -0.083697f, -0.144994f, -0.126802f, -0.006250f, 0.055872f, 0.085810f, 0.031950f, -0.047777f, -0.119150f, -0.105607f, -0.004721f, 0.108134f, 0.123686f, 0.054182f, -0.053034f, -0.105318f, -0.096349f, -0.017170f, 0.093395f, 0.062758f, 0.028064f, -0.071315f, -0.075505f, 0.101127f, 0.140895f, 0.070198f, -0.086650f, -0.148540f, -0.081551f, 0.076697f, 0.146288f, 0.071101f, -0.088899f, -0.135306f, -0.039831f, 0.097748f, 0.110281f, -0.006700f, -0.108368f, -0.068172f, 0.050684f, 0.087551f, -0.007703f, -0.072486f, -0.013393f, 0.050897f, 0.004567f, -0.024493f, -0.002029f, 0.006294f, -0.004220f, -0.002998f, -0.002927f, -0.000138f, -0.002606f, 0.002296f, 0.000322f, 0.001175f, -0.000720f, 0.000056f, -0.006301f, -0.001237f, -0.005921f, 0.002369f, 0.000285f, -0.003134f, -0.000816f, 0.002985f, -0.001983f, 0.000990f, -0.001084f, -0.003292f, -0.003434f, -0.002880f, 0.000129f, -0.001524f, 0.000604f, 0.001678f, -0.002724f, -0.002961f, 0.000212f, -0.001253f, -0.001810f}, + {0.014266f, 0.014099f, 0.013769f, 0.013283f, 0.012652f, 0.011891f, 0.011016f, 0.010046f, 0.009002f, 0.007906f, 0.006780f, 0.005647f, 0.004528f, 0.003444f, 0.002411f, 0.001448f, 0.000565f, -0.000225f, -0.000916f, -0.001505f, -0.001991f, -0.002377f, -0.002669f, -0.002875f, -0.003006f, -0.003074f, -0.003092f, -0.003075f, -0.003035f, -0.002988f, -0.002943f, -0.002912f, -0.002903f, -0.002920f, -0.002967f, -0.003043f, -0.003143f, -0.003262f, -0.003388f, -0.003509f, -0.003610f, -0.003674f, -0.003683f, -0.003618f, -0.003460f, -0.003192f, -0.002798f, -0.002262f, -0.001574f, -0.000725f, 0.000287f, 0.001462f, 0.002796f, 0.004279f, 0.005895f, 0.007626f, 0.009448f, 0.011333f, 0.013252f, 0.015170f, 0.017054f, 0.018868f, 0.020575f, 0.022141f, 0.023533f, 0.024722f, 0.025682f, 0.026391f, 0.026832f, 0.026996f, 0.026878f, 0.026480f, 0.025810f, 0.024882f, 0.023717f, 0.022341f, 0.020783f, 0.019079f, 0.017266f, 0.015382f, 0.013469f, 0.011568f, 0.009715f, 0.007950f, 0.006304f, 0.004808f, 0.003484f, 0.002353f, 0.001426f, 0.000710f, 0.000204f, -0.000098f, -0.000208f, -0.000146f, 0.000067f, 0.000404f, + 0.000834f, 0.001326f, 0.001846f, 0.002362f, 0.002842f, 0.003256f, 0.003578f, 0.003787f, 0.003865f, 0.003802f, 0.003590f, 0.003231f, 0.002731f, 0.002102f, 0.001361f, 0.000532f, -0.000359f, -0.001283f, -0.002207f, -0.003099f, -0.003926f, -0.004655f, -0.005258f, -0.005708f, -0.005983f, -0.006067f, -0.005949f, -0.005623f, -0.005091f, -0.004362f, -0.003450f, -0.002375f, -0.001163f, 0.000154f, 0.001544f, 0.002968f, 0.004388f, 0.005765f, 0.007059f, 0.008236f, 0.009260f, 0.010103f, 0.010741f, 0.011154f, 0.011332f, 0.011269f, 0.010966f, 0.010433f, 0.009686f, 0.008745f, 0.007638f, 0.006399f, 0.005062f, 0.003666f, 0.002253f, 0.000862f, -0.000467f, -0.001695f, -0.002788f, -0.003716f, -0.004452f, -0.004977f, -0.005277f, -0.005346f, -0.005184f, -0.004796f, -0.004196f, -0.003401f, -0.002437f, -0.001331f, -0.000115f, 0.001176f, 0.002508f, 0.003843f, 0.005147f, 0.006387f, 0.007532f, 0.008555f, 0.009434f, 0.010150f, 0.010693f, 0.011055f, 0.011234f, 0.011236f, 0.011070f, 0.010750f, 0.010293f, 0.009722f, 0.009059f, 0.008331f, 0.007563f, 0.006782f, 0.006013f, 0.005278f, 0.004598f, 0.003992f, + 0.003473f, 0.003051f, 0.002733f, 0.002520f, 0.002411f, 0.002400f, 0.002478f, 0.002634f, 0.002854f, 0.003121f, 0.003421f, 0.003735f, 0.004047f, 0.004342f, 0.004607f, 0.004828f, 0.004998f, 0.005109f, 0.005157f, 0.005142f, 0.005066f, 0.004933f, 0.004750f, 0.004527f, 0.004273f, 0.004001f, 0.003723f, 0.003450f, 0.003194f, 0.002966f, 0.002774f, 0.002627f, 0.002529f, 0.002482f, 0.002488f, 0.002545f, 0.002649f, 0.002793f, 0.002970f, 0.003171f, 0.003386f, 0.003604f, 0.003815f, 0.004009f, 0.004176f, 0.004308f, 0.004400f, 0.004447f, -0.008117f, -0.004781f, -0.006598f, -0.018545f, -0.025597f, 0.042077f, -0.015089f, -0.029318f, -0.005835f, -0.008171f, 0.065454f, 0.017045f, -0.029551f, 0.007135f, -0.076603f, -0.157012f, -0.066141f, -0.026523f, 0.057249f, 0.043034f, -0.070796f, -0.020043f, 0.023324f, 0.089411f, 0.084758f, 0.035790f, 0.023783f, 0.033177f, -0.041975f, -0.060794f, -0.142789f, 0.008082f, 0.042334f, 0.010198f, 0.030540f, 0.037254f, -0.074155f, -0.097473f, -0.048026f, 0.009435f, 0.067059f, 0.102453f, 0.072618f, 0.019962f, -0.034514f, -0.021699f, -0.024063f, 0.049352f, + 0.036632f, 0.016999f, -0.031435f, 0.004227f, -0.113697f, -0.018912f, 0.056030f, 0.016169f, 0.091707f, 0.078866f, -0.054679f, -0.123760f, 0.051217f, -0.068318f, 0.096888f, 0.072978f, 0.072757f, -0.076411f, -0.090509f, -0.010835f, 0.057468f, 0.075408f, 0.063779f, 0.025827f, 0.041213f, -0.078705f, -0.097994f, -0.030170f, 0.123951f, 0.082740f, -0.042369f, -0.048554f, -0.066582f, -0.106656f, -0.039913f, 0.054512f, 0.049807f, -0.114358f, -0.215607f, -0.205969f, 0.041956f, 0.234425f, 0.265590f, 0.103549f, -0.087024f, -0.245732f, -0.151602f, 0.030550f, 0.142402f, 0.082910f, 0.004883f, -0.071084f, -0.045589f, -0.014730f, 0.027929f, 0.030718f, 0.062894f, -0.059104f, -0.059472f, -0.132011f, -0.061556f, -0.023570f, 0.124157f, 0.172644f, 0.122441f, -0.128672f, -0.148254f, -0.044770f, -0.080031f, 0.032261f, 0.085118f, 0.136007f, 0.037226f, -0.130449f, -0.059001f, -0.056811f, 0.088079f, 0.162189f, 0.121557f, 0.038020f, -0.016111f, -0.151295f, -0.181267f, -0.100758f, 0.108348f, 0.272622f, 0.281771f, 0.067561f, -0.207803f, -0.273469f, -0.163158f, 0.051822f, 0.244010f, 0.261897f, 0.080929f, -0.137511f, + -0.268044f, -0.175537f, 0.052243f, 0.301171f, 0.208899f, -0.013515f, -0.180532f, -0.265725f, -0.153590f, 0.052063f, 0.197927f, 0.187255f, 0.049341f, -0.083697f, -0.144994f, -0.126802f, -0.006250f, 0.055872f, 0.085810f, 0.031950f, -0.047777f, -0.119150f, -0.105607f, -0.004721f, 0.108134f, 0.123686f, 0.054182f, -0.053034f, -0.105318f, -0.096349f, -0.017170f, 0.093395f, 0.062758f, 0.028064f, -0.071315f, -0.075505f, 0.101127f, 0.140895f, 0.070198f, -0.086650f, -0.148540f, -0.081551f, 0.076697f, 0.146288f, 0.071101f, -0.088899f, -0.135306f, -0.039831f, 0.097748f, 0.110281f, -0.006700f, -0.108368f, -0.068172f, 0.050684f, 0.087551f, -0.007703f, -0.072486f, -0.013393f, 0.050897f, 0.004567f, -0.024493f, -0.002029f, 0.006294f, -0.004220f, -0.002998f, -0.002927f, -0.000138f, -0.002606f, 0.002296f, 0.000322f, 0.001175f, -0.000720f, 0.000056f, -0.006301f, -0.001237f, -0.005921f, 0.002369f, 0.000285f, -0.003134f, -0.000816f, 0.002985f, -0.001983f, 0.000990f, -0.001084f, -0.003292f, -0.003434f, -0.002880f, 0.000129f, -0.001524f, 0.000604f, 0.001678f, -0.002724f, -0.002961f, 0.000212f, -0.001253f, -0.001810f} + } +}; +const float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][BINAURAL_CHANNELS][480]={ + { + {0.000549f, 0.001631f, 0.002663f, 0.003615f, 0.004457f, 0.005166f, 0.005720f, 0.006107f, 0.006315f, 0.006343f, 0.006195f, 0.005878f, 0.005408f, 0.004806f, 0.004094f, 0.003303f, 0.002461f, 0.001602f, 0.000756f, -0.000043f, -0.000768f, -0.001390f, -0.001888f, -0.002243f, -0.002443f, -0.002479f, -0.002352f, -0.002064f, -0.001626f, -0.001054f, -0.000369f, 0.000407f, 0.001245f, 0.002115f, 0.002988f, 0.003833f, 0.004619f, 0.005320f, 0.005911f, 0.006370f, 0.006682f, 0.006834f, 0.006822f, 0.006644f, 0.006305f, 0.005815f, 0.005189f, 0.004445f, 0.003606f, 0.002698f, 0.001746f, 0.000779f, -0.000176f, -0.001093f, -0.001948f, -0.002718f, -0.003385f, -0.003937f, -0.004361f, -0.004654f, -0.004815f, -0.004847f, -0.004759f, -0.004562f, -0.004272f, -0.003906f, -0.003484f, -0.003026f, -0.002552f, -0.002084f, -0.001639f, -0.001234f, -0.000884f, -0.000600f, -0.000389f, -0.000255f, -0.000199f, -0.000217f, -0.000303f, -0.000448f, -0.000640f, -0.000865f, -0.001108f, -0.001354f, -0.001587f, -0.001793f, -0.001958f, -0.002073f, -0.002127f, -0.002116f, -0.002037f, -0.001890f, -0.001680f, -0.001413f, -0.001098f, -0.000749f, + -0.000378f, -0.000000f, 0.000367f, 0.000709f, 0.001010f, 0.001257f, 0.001436f, 0.001539f, 0.001559f, 0.001491f, 0.001336f, 0.001096f, 0.000777f, 0.000389f, -0.000057f, -0.000545f, -0.001059f, -0.001582f, -0.002095f, -0.002580f, -0.003020f, -0.003398f, -0.003701f, -0.003916f, -0.004034f, -0.004051f, -0.003962f, -0.003771f, -0.003482f, -0.003102f, -0.002643f, -0.002118f, -0.001543f, -0.000936f, -0.000313f, 0.000306f, 0.000903f, 0.001462f, 0.001967f, 0.002405f, 0.002765f, 0.003039f, 0.003223f, 0.003314f, 0.003315f, 0.003231f, 0.003067f, 0.002836f, 0.002547f, 0.002215f, 0.001853f, 0.001477f, 0.001101f, 0.000738f, 0.000401f, 0.000100f, -0.000155f, -0.000359f, -0.000508f, -0.000601f, -0.000639f, -0.000628f, -0.000572f, -0.000481f, -0.000363f, -0.000230f, -0.000092f, 0.000039f, 0.000152f, 0.000238f, 0.000289f, 0.000298f, 0.000260f, 0.000174f, 0.000039f, -0.000141f, -0.000362f, -0.000616f, -0.000895f, -0.001188f, -0.001484f, -0.001771f, -0.002037f, -0.002270f, -0.002460f, -0.002598f, -0.002675f, -0.002688f, -0.002633f, -0.002510f, -0.002320f, -0.002070f, -0.001765f, -0.001416f, -0.001033f, -0.000628f, + -0.000217f, 0.000189f, 0.000575f, 0.000927f, 0.001235f, 0.001487f, 0.001674f, 0.001792f, 0.001836f, 0.001806f, 0.001703f, 0.001532f, 0.001300f, 0.001017f, 0.000693f, 0.000341f, -0.000025f, -0.000392f, -0.000744f, -0.001069f, -0.001355f, -0.001591f, -0.001768f, -0.001881f, -0.001924f, -0.001898f, -0.001803f, -0.001645f, -0.001429f, -0.001165f, -0.000863f, -0.000536f, -0.000196f, 0.000143f, 0.000468f, 0.000765f, 0.001024f, 0.001235f, 0.001389f, 0.001482f, 0.001510f, 0.001472f, 0.001370f, 0.001211f, 0.000999f, 0.000746f, 0.000460f, 0.000156f, -0.459988f, -0.951364f, -0.610488f, 0.138856f, 0.698197f, 0.756538f, 0.243251f, -0.421561f, -0.809017f, -0.723124f, -0.130978f, 0.462606f, 0.869329f, 0.668927f, 0.030586f, -0.563056f, -0.788995f, -0.467552f, 0.152083f, 0.679937f, 0.729245f, 0.338703f, -0.322545f, -0.698697f, -0.615539f, -0.094425f, 0.456741f, 0.704130f, 0.460061f, -0.071586f, -0.567986f, -0.669722f, -0.335589f, 0.246636f, 0.632875f, 0.618595f, 0.155702f, -0.373707f, -0.695337f, -0.504141f, -0.123673f, 0.357714f, 0.720972f, 0.555961f, 0.039481f, -0.524585f, -0.688642f, -0.391594f, + 0.199571f, 0.632368f, 0.653497f, 0.212242f, -0.363710f, -0.698362f, -0.533969f, -0.013174f, 0.510447f, 0.654537f, 0.374430f, -0.161899f, -0.563497f, -0.567399f, -0.172138f, 0.340047f, 0.661268f, 0.495634f, -0.012328f, -0.517845f, -0.669687f, -0.364384f, 0.180465f, 0.612619f, 0.618588f, 0.208082f, -0.346706f, -0.674587f, -0.546981f, -0.034491f, 0.493899f, 0.663842f, 0.384299f, -0.161248f, -0.530011f, -0.571216f, -0.199479f, 0.330839f, 0.641365f, 0.517783f, 0.029365f, -0.469162f, -0.650912f, -0.382365f, 0.162567f, 0.572309f, 0.620024f, 0.258968f, -0.286565f, -0.604121f, -0.539109f, -0.134658f, 0.351582f, 0.601150f, 0.439245f, 0.005804f, -0.429748f, -0.570360f, -0.309470f, 0.144957f, 0.518672f, 0.532375f, 0.181912f, -0.316777f, -0.582908f, -0.462849f, 0.006490f, 0.467799f, 0.600352f, 0.338467f, -0.171078f, -0.576634f, -0.591189f, -0.184358f, 0.357559f, 0.635154f, 0.475979f, -0.006956f, -0.474676f, -0.603798f, -0.308351f, 0.187600f, 0.541923f, 0.513726f, 0.151033f, -0.322051f, -0.548969f, -0.399484f, 0.016445f, 0.417020f, 0.542622f, 0.294498f, -0.155090f, -0.498546f, -0.492820f, -0.152761f, + 0.286108f, 0.512682f, 0.385987f, -0.014018f, -0.390285f, -0.496220f, -0.247561f, 0.178302f, 0.478161f, 0.429657f, 0.081502f, -0.320164f, -0.471944f, -0.286304f, 0.091236f, 0.417376f, 0.439153f, 0.136549f, -0.272420f, -0.487026f, -0.361011f, 0.059105f, 0.421041f, 0.473316f, 0.174411f, -0.265012f, -0.518633f, -0.380817f, 0.063996f, 0.474638f, 0.521219f, 0.163071f, -0.331621f, -0.576037f, -0.349084f, 0.134778f, 0.496984f, 0.477692f, 0.054462f, -0.415126f, -0.543009f, -0.197895f, 0.324273f, 0.569567f, 0.294501f, -0.250950f, -0.561133f, -0.322396f, 0.225841f, 0.532439f, 0.278501f, -0.248472f, -0.474949f, -0.151682f, 0.312118f, 0.347247f, -0.075374f, -0.303858f, -0.026373f, 0.162830f, 0.018239f, -0.044566f, -0.004146f, 0.006047f, 0.000605f, 0.000729f, -0.000193f, 0.000013f, -0.000995f, 0.001505f, -0.000002f, 0.001062f, 0.000599f, 0.000661f, -0.000421f, 0.000596f, -0.000387f, 0.001767f, -0.000116f, 0.001335f, -0.000958f, 0.000380f, 0.000386f, 0.000219f, -0.001087f, 0.000999f, -0.000098f, 0.000362f, -0.000387f, 0.000100f, -0.000422f, 0.001448f, -0.001190f, 0.001039f, -0.000707f, -0.000023f}, + {0.000549f, 0.001631f, 0.002663f, 0.003615f, 0.004457f, 0.005166f, 0.005720f, 0.006107f, 0.006315f, 0.006343f, 0.006195f, 0.005878f, 0.005408f, 0.004806f, 0.004094f, 0.003303f, 0.002461f, 0.001602f, 0.000756f, -0.000043f, -0.000768f, -0.001390f, -0.001888f, -0.002243f, -0.002443f, -0.002479f, -0.002352f, -0.002064f, -0.001626f, -0.001054f, -0.000369f, 0.000407f, 0.001245f, 0.002115f, 0.002988f, 0.003833f, 0.004619f, 0.005320f, 0.005911f, 0.006370f, 0.006682f, 0.006834f, 0.006822f, 0.006644f, 0.006305f, 0.005815f, 0.005189f, 0.004445f, 0.003606f, 0.002698f, 0.001746f, 0.000779f, -0.000176f, -0.001093f, -0.001948f, -0.002718f, -0.003385f, -0.003937f, -0.004361f, -0.004654f, -0.004815f, -0.004847f, -0.004759f, -0.004562f, -0.004272f, -0.003906f, -0.003484f, -0.003026f, -0.002552f, -0.002084f, -0.001639f, -0.001234f, -0.000884f, -0.000600f, -0.000389f, -0.000255f, -0.000199f, -0.000217f, -0.000303f, -0.000448f, -0.000640f, -0.000865f, -0.001108f, -0.001354f, -0.001587f, -0.001793f, -0.001958f, -0.002073f, -0.002127f, -0.002116f, -0.002037f, -0.001890f, -0.001680f, -0.001413f, -0.001098f, -0.000749f, + -0.000378f, -0.000000f, 0.000367f, 0.000709f, 0.001010f, 0.001257f, 0.001436f, 0.001539f, 0.001559f, 0.001491f, 0.001336f, 0.001096f, 0.000777f, 0.000389f, -0.000057f, -0.000545f, -0.001059f, -0.001582f, -0.002095f, -0.002580f, -0.003020f, -0.003398f, -0.003701f, -0.003916f, -0.004034f, -0.004051f, -0.003962f, -0.003771f, -0.003482f, -0.003102f, -0.002643f, -0.002118f, -0.001543f, -0.000936f, -0.000313f, 0.000306f, 0.000903f, 0.001462f, 0.001967f, 0.002405f, 0.002765f, 0.003039f, 0.003223f, 0.003314f, 0.003315f, 0.003231f, 0.003067f, 0.002836f, 0.002547f, 0.002215f, 0.001853f, 0.001477f, 0.001101f, 0.000738f, 0.000401f, 0.000100f, -0.000155f, -0.000359f, -0.000508f, -0.000601f, -0.000639f, -0.000628f, -0.000572f, -0.000481f, -0.000363f, -0.000230f, -0.000092f, 0.000039f, 0.000152f, 0.000238f, 0.000289f, 0.000298f, 0.000260f, 0.000174f, 0.000039f, -0.000141f, -0.000362f, -0.000616f, -0.000895f, -0.001188f, -0.001484f, -0.001771f, -0.002037f, -0.002270f, -0.002460f, -0.002598f, -0.002675f, -0.002688f, -0.002633f, -0.002510f, -0.002320f, -0.002070f, -0.001765f, -0.001416f, -0.001033f, -0.000628f, + -0.000217f, 0.000189f, 0.000575f, 0.000927f, 0.001235f, 0.001487f, 0.001674f, 0.001792f, 0.001836f, 0.001806f, 0.001703f, 0.001532f, 0.001300f, 0.001017f, 0.000693f, 0.000341f, -0.000025f, -0.000392f, -0.000744f, -0.001069f, -0.001355f, -0.001591f, -0.001768f, -0.001881f, -0.001924f, -0.001898f, -0.001803f, -0.001645f, -0.001429f, -0.001165f, -0.000863f, -0.000536f, -0.000196f, 0.000143f, 0.000468f, 0.000765f, 0.001024f, 0.001235f, 0.001389f, 0.001482f, 0.001510f, 0.001472f, 0.001370f, 0.001211f, 0.000999f, 0.000746f, 0.000460f, 0.000156f, -0.459988f, -0.951364f, -0.610488f, 0.138856f, 0.698197f, 0.756538f, 0.243251f, -0.421561f, -0.809017f, -0.723124f, -0.130978f, 0.462606f, 0.869329f, 0.668927f, 0.030586f, -0.563056f, -0.788995f, -0.467552f, 0.152083f, 0.679937f, 0.729245f, 0.338703f, -0.322545f, -0.698697f, -0.615539f, -0.094425f, 0.456741f, 0.704130f, 0.460061f, -0.071586f, -0.567986f, -0.669722f, -0.335589f, 0.246636f, 0.632875f, 0.618595f, 0.155702f, -0.373707f, -0.695337f, -0.504141f, -0.123673f, 0.357714f, 0.720972f, 0.555961f, 0.039481f, -0.524585f, -0.688642f, -0.391594f, + 0.199571f, 0.632368f, 0.653497f, 0.212242f, -0.363710f, -0.698362f, -0.533969f, -0.013174f, 0.510447f, 0.654537f, 0.374430f, -0.161899f, -0.563497f, -0.567399f, -0.172138f, 0.340047f, 0.661268f, 0.495634f, -0.012328f, -0.517845f, -0.669687f, -0.364384f, 0.180465f, 0.612619f, 0.618588f, 0.208082f, -0.346706f, -0.674587f, -0.546981f, -0.034491f, 0.493899f, 0.663842f, 0.384299f, -0.161248f, -0.530011f, -0.571216f, -0.199479f, 0.330839f, 0.641365f, 0.517783f, 0.029365f, -0.469162f, -0.650912f, -0.382365f, 0.162567f, 0.572309f, 0.620024f, 0.258968f, -0.286565f, -0.604121f, -0.539109f, -0.134658f, 0.351582f, 0.601150f, 0.439245f, 0.005804f, -0.429748f, -0.570360f, -0.309470f, 0.144957f, 0.518672f, 0.532375f, 0.181912f, -0.316777f, -0.582908f, -0.462849f, 0.006490f, 0.467799f, 0.600352f, 0.338467f, -0.171078f, -0.576634f, -0.591189f, -0.184358f, 0.357559f, 0.635154f, 0.475979f, -0.006956f, -0.474676f, -0.603798f, -0.308351f, 0.187600f, 0.541923f, 0.513726f, 0.151033f, -0.322051f, -0.548969f, -0.399484f, 0.016445f, 0.417020f, 0.542622f, 0.294498f, -0.155090f, -0.498546f, -0.492820f, -0.152761f, + 0.286108f, 0.512682f, 0.385987f, -0.014018f, -0.390285f, -0.496220f, -0.247561f, 0.178302f, 0.478161f, 0.429657f, 0.081502f, -0.320164f, -0.471944f, -0.286304f, 0.091236f, 0.417376f, 0.439153f, 0.136549f, -0.272420f, -0.487026f, -0.361011f, 0.059105f, 0.421041f, 0.473316f, 0.174411f, -0.265012f, -0.518633f, -0.380817f, 0.063996f, 0.474638f, 0.521219f, 0.163071f, -0.331621f, -0.576037f, -0.349084f, 0.134778f, 0.496984f, 0.477692f, 0.054462f, -0.415126f, -0.543009f, -0.197895f, 0.324273f, 0.569567f, 0.294501f, -0.250950f, -0.561133f, -0.322396f, 0.225841f, 0.532439f, 0.278501f, -0.248472f, -0.474949f, -0.151682f, 0.312118f, 0.347247f, -0.075374f, -0.303858f, -0.026373f, 0.162830f, 0.018239f, -0.044566f, -0.004146f, 0.006047f, 0.000605f, 0.000729f, -0.000193f, 0.000013f, -0.000995f, 0.001505f, -0.000002f, 0.001062f, 0.000599f, 0.000661f, -0.000421f, 0.000596f, -0.000387f, 0.001767f, -0.000116f, 0.001335f, -0.000958f, 0.000380f, 0.000386f, 0.000219f, -0.001087f, 0.000999f, -0.000098f, 0.000362f, -0.000387f, 0.000100f, -0.000422f, 0.001448f, -0.001190f, 0.001039f, -0.000707f, -0.000023f} + }, + { + {0.000033f, 0.000115f, 0.000241f, 0.000437f, 0.000727f, 0.001129f, 0.001655f, 0.002311f, 0.003095f, 0.003997f, 0.005000f, 0.006080f, 0.007207f, 0.008344f, 0.009452f, 0.010488f, 0.011408f, 0.012168f, 0.012727f, 0.013047f, 0.013096f, 0.012849f, 0.012289f, 0.011407f, 0.010204f, 0.008692f, 0.006891f, 0.004833f, 0.002557f, 0.000110f, -0.002454f, -0.005076f, -0.007695f, -0.010247f, -0.012669f, -0.014902f, -0.016890f, -0.018583f, -0.019939f, -0.020927f, -0.021524f, -0.021719f, -0.021511f, -0.020913f, -0.019945f, -0.018640f, -0.017040f, -0.015194f, -0.013159f, -0.010993f, -0.008762f, -0.006527f, -0.004353f, -0.002298f, -0.000417f, 0.001242f, 0.002639f, 0.003742f, 0.004530f, 0.004993f, 0.005128f, 0.004945f, 0.004462f, 0.003708f, 0.002717f, 0.001530f, 0.000194f, -0.001242f, -0.002728f, -0.004213f, -0.005648f, -0.006988f, -0.008193f, -0.009228f, -0.010064f, -0.010683f, -0.011072f, -0.011225f, -0.011147f, -0.010848f, -0.010345f, -0.009663f, -0.008828f, -0.007874f, -0.006833f, -0.005740f, -0.004631f, -0.003539f, -0.002495f, -0.001526f, -0.000655f, 0.000100f, 0.000726f, 0.001215f, 0.001564f, 0.001777f, + 0.001862f, 0.001828f, 0.001693f, 0.001472f, 0.001184f, 0.000850f, 0.000488f, 0.000116f, -0.000248f, -0.000591f, -0.000901f, -0.001170f, -0.001394f, -0.001571f, -0.001703f, -0.001795f, -0.001854f, -0.001888f, -0.001908f, -0.001924f, -0.001948f, -0.001988f, -0.002054f, -0.002152f, -0.002286f, -0.002457f, -0.002663f, -0.002901f, -0.003162f, -0.003438f, -0.003715f, -0.003981f, -0.004221f, -0.004421f, -0.004565f, -0.004641f, -0.004636f, -0.004542f, -0.004353f, -0.004066f, -0.003682f, -0.003206f, -0.002647f, -0.002017f, -0.001331f, -0.000609f, 0.000129f, 0.000860f, 0.001562f, 0.002212f, 0.002787f, 0.003268f, 0.003637f, 0.003881f, 0.003990f, 0.003958f, 0.003786f, 0.003477f, 0.003040f, 0.002489f, 0.001844f, 0.001124f, 0.000354f, -0.000438f, -0.001225f, -0.001980f, -0.002675f, -0.003285f, -0.003789f, -0.004167f, -0.004406f, -0.004495f, -0.004431f, -0.004215f, -0.003854f, -0.003359f, -0.002748f, -0.002040f, -0.001261f, -0.000438f, 0.000402f, 0.001229f, 0.002013f, 0.002729f, 0.003351f, 0.003858f, 0.004232f, 0.004463f, 0.004541f, 0.004466f, 0.004242f, 0.003877f, 0.003386f, 0.002787f, 0.002103f, 0.001359f, + 0.000583f, -0.000199f, -0.000957f, -0.001665f, -0.002299f, -0.002836f, -0.003258f, -0.003553f, -0.003712f, -0.003732f, -0.003614f, -0.003366f, -0.002999f, -0.002531f, -0.001981f, -0.001373f, -0.000730f, -0.000078f, 0.000556f, 0.001147f, 0.001674f, 0.002116f, 0.002456f, 0.002683f, 0.002788f, 0.002770f, 0.002631f, 0.002377f, 0.002020f, 0.001577f, 0.001065f, 0.000507f, -0.000074f, -0.000653f, -0.001208f, -0.001715f, -0.002153f, -0.002504f, -0.002755f, -0.002894f, -0.002917f, -0.002822f, -0.002613f, -0.002299f, -0.001892f, -0.001409f, -0.000869f, -0.000293f, 0.049131f, -0.015616f, -0.522292f, -0.600258f, -0.029599f, 0.813772f, 0.895386f, 0.289781f, -0.543579f, -0.625267f, -0.515360f, 0.034943f, 0.575737f, 0.501286f, 0.121036f, -0.361330f, -0.606864f, -0.495434f, 0.005356f, 0.414851f, 0.580779f, 0.318371f, -0.123311f, -0.593897f, -0.557451f, -0.169763f, 0.347590f, 0.571183f, 0.524966f, 0.030215f, -0.384597f, -0.656131f, -0.441995f, 0.048106f, 0.566672f, 0.677656f, 0.404255f, -0.224061f, -0.700876f, -0.731566f, -0.152888f, 0.531724f, 0.760169f, 0.501596f, -0.144728f, -0.704601f, -0.795966f, -0.330431f, + 0.353769f, 0.753201f, 0.632239f, 0.089246f, -0.518902f, -0.792079f, -0.525313f, 0.104648f, 0.617031f, 0.707476f, 0.314736f, -0.260498f, -0.691655f, -0.601412f, -0.141066f, 0.463251f, 0.710407f, 0.595793f, 0.079532f, -0.566041f, -0.843219f, -0.546416f, 0.105977f, 0.689965f, 0.809491f, 0.360253f, -0.318746f, -0.836742f, -0.743698f, -0.190055f, 0.522132f, 0.866911f, 0.580073f, -0.073123f, -0.601450f, -0.773098f, -0.387519f, 0.305634f, 0.768200f, 0.716101f, 0.158541f, -0.513838f, -0.804112f, -0.591068f, 0.032888f, 0.617203f, 0.790415f, 0.449739f, -0.218370f, -0.690069f, -0.721129f, -0.227665f, 0.387618f, 0.763053f, 0.570480f, 0.034747f, -0.545742f, -0.740702f, -0.422311f, 0.218477f, 0.693095f, 0.673995f, 0.183893f, -0.441957f, -0.734538f, -0.536156f, 0.074688f, 0.632881f, 0.739209f, 0.338747f, -0.278687f, -0.756625f, -0.698729f, -0.160207f, 0.460456f, 0.758172f, 0.544559f, -0.052809f, -0.595830f, -0.706044f, -0.331895f, 0.255145f, 0.628821f, 0.584354f, 0.128971f, -0.420826f, -0.663711f, -0.453743f, 0.061328f, 0.526863f, 0.647273f, 0.317473f, -0.228324f, -0.609292f, -0.576534f, -0.146893f, + 0.392392f, 0.635176f, 0.429766f, -0.061573f, -0.513517f, -0.617936f, -0.268287f, 0.255404f, 0.606177f, 0.516536f, 0.065794f, -0.428316f, -0.592311f, -0.336865f, 0.139531f, 0.539778f, 0.555964f, 0.157542f, -0.382310f, -0.625238f, -0.458078f, 0.099422f, 0.550784f, 0.609096f, 0.201930f, -0.351519f, -0.671711f, -0.479070f, 0.078702f, 0.611679f, 0.668634f, 0.215243f, -0.430488f, -0.717891f, -0.470740f, 0.197954f, 0.766795f, 0.682469f, 0.044272f, -0.648601f, -0.791369f, -0.268294f, 0.498422f, 0.820191f, 0.406963f, -0.377448f, -0.799427f, -0.464122f, 0.311450f, 0.753181f, 0.422651f, -0.330904f, -0.685414f, -0.265079f, 0.430938f, 0.533296f, -0.072866f, -0.462007f, -0.064815f, 0.243788f, 0.040393f, -0.070903f, -0.008836f, 0.006176f, 0.000743f, -0.001883f, -0.000500f, -0.000516f, 0.001860f, 0.000220f, -0.001136f, -0.001868f, -0.001613f, -0.001259f, 0.000712f, 0.000443f, -0.000560f, -0.001141f, 0.000506f, -0.000510f, 0.001301f, -0.002347f, 0.000487f, 0.000658f, -0.000408f, 0.001931f, -0.000180f, 0.000240f, 0.001278f, -0.000570f, 0.001468f, -0.001239f, 0.001603f, -0.000209f, 0.002269f, 0.000913f}, + {-0.000033f, -0.000115f, -0.000241f, -0.000437f, -0.000727f, -0.001129f, -0.001655f, -0.002311f, -0.003095f, -0.003997f, -0.005000f, -0.006080f, -0.007207f, -0.008344f, -0.009452f, -0.010488f, -0.011408f, -0.012168f, -0.012727f, -0.013047f, -0.013096f, -0.012849f, -0.012289f, -0.011407f, -0.010204f, -0.008692f, -0.006891f, -0.004833f, -0.002557f, -0.000110f, 0.002454f, 0.005076f, 0.007695f, 0.010247f, 0.012669f, 0.014902f, 0.016890f, 0.018583f, 0.019939f, 0.020927f, 0.021524f, 0.021719f, 0.021511f, 0.020913f, 0.019945f, 0.018640f, 0.017040f, 0.015194f, 0.013159f, 0.010993f, 0.008762f, 0.006527f, 0.004353f, 0.002298f, 0.000417f, -0.001242f, -0.002639f, -0.003742f, -0.004530f, -0.004993f, -0.005128f, -0.004945f, -0.004462f, -0.003708f, -0.002717f, -0.001530f, -0.000194f, 0.001242f, 0.002728f, 0.004213f, 0.005648f, 0.006988f, 0.008193f, 0.009228f, 0.010064f, 0.010683f, 0.011072f, 0.011225f, 0.011147f, 0.010848f, 0.010345f, 0.009663f, 0.008828f, 0.007874f, 0.006833f, 0.005740f, 0.004631f, 0.003539f, 0.002495f, 0.001526f, 0.000655f, -0.000100f, -0.000726f, -0.001215f, -0.001564f, -0.001777f, + -0.001862f, -0.001828f, -0.001693f, -0.001472f, -0.001184f, -0.000850f, -0.000488f, -0.000116f, 0.000248f, 0.000591f, 0.000901f, 0.001170f, 0.001394f, 0.001571f, 0.001703f, 0.001795f, 0.001854f, 0.001888f, 0.001908f, 0.001924f, 0.001948f, 0.001988f, 0.002054f, 0.002152f, 0.002286f, 0.002457f, 0.002663f, 0.002901f, 0.003162f, 0.003438f, 0.003715f, 0.003981f, 0.004221f, 0.004421f, 0.004565f, 0.004641f, 0.004636f, 0.004542f, 0.004353f, 0.004066f, 0.003682f, 0.003206f, 0.002647f, 0.002017f, 0.001331f, 0.000609f, -0.000129f, -0.000860f, -0.001562f, -0.002212f, -0.002787f, -0.003268f, -0.003637f, -0.003881f, -0.003990f, -0.003958f, -0.003786f, -0.003477f, -0.003040f, -0.002489f, -0.001844f, -0.001124f, -0.000354f, 0.000438f, 0.001225f, 0.001980f, 0.002675f, 0.003285f, 0.003789f, 0.004167f, 0.004406f, 0.004495f, 0.004431f, 0.004215f, 0.003854f, 0.003359f, 0.002748f, 0.002040f, 0.001261f, 0.000438f, -0.000402f, -0.001229f, -0.002013f, -0.002729f, -0.003351f, -0.003858f, -0.004232f, -0.004463f, -0.004541f, -0.004466f, -0.004242f, -0.003877f, -0.003386f, -0.002787f, -0.002103f, -0.001359f, + -0.000583f, 0.000199f, 0.000957f, 0.001665f, 0.002299f, 0.002836f, 0.003258f, 0.003553f, 0.003712f, 0.003732f, 0.003614f, 0.003366f, 0.002999f, 0.002531f, 0.001981f, 0.001373f, 0.000730f, 0.000078f, -0.000556f, -0.001147f, -0.001674f, -0.002116f, -0.002456f, -0.002683f, -0.002788f, -0.002770f, -0.002631f, -0.002377f, -0.002020f, -0.001577f, -0.001065f, -0.000507f, 0.000074f, 0.000653f, 0.001208f, 0.001715f, 0.002153f, 0.002504f, 0.002755f, 0.002894f, 0.002917f, 0.002822f, 0.002613f, 0.002299f, 0.001892f, 0.001409f, 0.000869f, 0.000293f, -0.049131f, 0.015616f, 0.522292f, 0.600258f, 0.029599f, -0.813772f, -0.895386f, -0.289781f, 0.543579f, 0.625267f, 0.515360f, -0.034943f, -0.575737f, -0.501286f, -0.121036f, 0.361330f, 0.606864f, 0.495434f, -0.005356f, -0.414851f, -0.580779f, -0.318371f, 0.123311f, 0.593897f, 0.557451f, 0.169763f, -0.347590f, -0.571183f, -0.524966f, -0.030215f, 0.384597f, 0.656131f, 0.441995f, -0.048106f, -0.566672f, -0.677656f, -0.404255f, 0.224061f, 0.700876f, 0.731566f, 0.152888f, -0.531724f, -0.760169f, -0.501596f, 0.144728f, 0.704601f, 0.795966f, 0.330431f, + -0.353769f, -0.753201f, -0.632239f, -0.089246f, 0.518902f, 0.792079f, 0.525313f, -0.104648f, -0.617031f, -0.707476f, -0.314736f, 0.260498f, 0.691655f, 0.601412f, 0.141066f, -0.463251f, -0.710407f, -0.595793f, -0.079532f, 0.566041f, 0.843219f, 0.546416f, -0.105977f, -0.689965f, -0.809491f, -0.360253f, 0.318746f, 0.836742f, 0.743698f, 0.190055f, -0.522132f, -0.866911f, -0.580073f, 0.073123f, 0.601450f, 0.773098f, 0.387519f, -0.305634f, -0.768200f, -0.716101f, -0.158541f, 0.513838f, 0.804112f, 0.591068f, -0.032888f, -0.617203f, -0.790415f, -0.449739f, 0.218370f, 0.690069f, 0.721129f, 0.227665f, -0.387618f, -0.763053f, -0.570480f, -0.034747f, 0.545742f, 0.740702f, 0.422311f, -0.218477f, -0.693095f, -0.673995f, -0.183893f, 0.441957f, 0.734538f, 0.536156f, -0.074688f, -0.632881f, -0.739209f, -0.338747f, 0.278687f, 0.756625f, 0.698729f, 0.160207f, -0.460456f, -0.758172f, -0.544559f, 0.052809f, 0.595830f, 0.706044f, 0.331895f, -0.255145f, -0.628821f, -0.584354f, -0.128971f, 0.420826f, 0.663711f, 0.453743f, -0.061328f, -0.526863f, -0.647273f, -0.317473f, 0.228324f, 0.609292f, 0.576534f, 0.146893f, + -0.392392f, -0.635176f, -0.429766f, 0.061573f, 0.513517f, 0.617936f, 0.268287f, -0.255404f, -0.606177f, -0.516536f, -0.065794f, 0.428316f, 0.592311f, 0.336865f, -0.139531f, -0.539778f, -0.555964f, -0.157542f, 0.382310f, 0.625238f, 0.458078f, -0.099422f, -0.550784f, -0.609096f, -0.201930f, 0.351519f, 0.671711f, 0.479070f, -0.078702f, -0.611679f, -0.668634f, -0.215243f, 0.430488f, 0.717891f, 0.470740f, -0.197954f, -0.766795f, -0.682469f, -0.044272f, 0.648601f, 0.791369f, 0.268294f, -0.498422f, -0.820191f, -0.406963f, 0.377448f, 0.799427f, 0.464122f, -0.311450f, -0.753181f, -0.422651f, 0.330904f, 0.685414f, 0.265079f, -0.430938f, -0.533296f, 0.072866f, 0.462007f, 0.064815f, -0.243788f, -0.040393f, 0.070903f, 0.008836f, -0.006176f, -0.000743f, 0.001883f, 0.000500f, 0.000516f, -0.001860f, -0.000220f, 0.001136f, 0.001868f, 0.001613f, 0.001259f, -0.000712f, -0.000443f, 0.000560f, 0.001141f, -0.000506f, 0.000510f, -0.001301f, 0.002347f, -0.000487f, -0.000658f, 0.000408f, -0.001931f, 0.000180f, -0.000240f, -0.001278f, 0.000570f, -0.001468f, 0.001239f, -0.001603f, 0.000209f, -0.002269f, -0.000913f} + }, + { + {-0.002272f, -0.006795f, -0.011257f, -0.015617f, -0.019835f, -0.023870f, -0.027681f, -0.031227f, -0.034468f, -0.037367f, -0.039885f, -0.041987f, -0.043643f, -0.044825f, -0.045510f, -0.045682f, -0.045329f, -0.044450f, -0.043050f, -0.041143f, -0.038752f, -0.035909f, -0.032657f, -0.029046f, -0.025134f, -0.020989f, -0.016682f, -0.012291f, -0.007898f, -0.003585f, 0.000565f, 0.004471f, 0.008056f, 0.011249f, 0.013987f, 0.016216f, 0.017893f, 0.018988f, 0.019483f, 0.019374f, 0.018672f, 0.017402f, 0.015600f, 0.013318f, 0.010618f, 0.007572f, 0.004259f, 0.000766f, -0.002818f, -0.006400f, -0.009890f, -0.013202f, -0.016252f, -0.018968f, -0.021285f, -0.023149f, -0.024521f, -0.025372f, -0.025691f, -0.025479f, -0.024751f, -0.023537f, -0.021877f, -0.019824f, -0.017440f, -0.014795f, -0.011964f, -0.009025f, -0.006057f, -0.003140f, -0.000347f, 0.002250f, 0.004591f, 0.006621f, 0.008296f, 0.009584f, 0.010463f, 0.010925f, 0.010971f, 0.010616f, 0.009883f, 0.008806f, 0.007428f, 0.005795f, 0.003963f, 0.001987f, -0.000073f, -0.002162f, -0.004221f, -0.006199f, -0.008049f, -0.009728f, -0.011202f, -0.012444f, -0.013434f, -0.014163f, + -0.014628f, -0.014832f, -0.014789f, -0.014516f, -0.014036f, -0.013377f, -0.012571f, -0.011648f, -0.010644f, -0.009589f, -0.008516f, -0.007453f, -0.006427f, -0.005458f, -0.004566f, -0.003762f, -0.003057f, -0.002455f, -0.001955f, -0.001554f, -0.001247f, -0.001022f, -0.000870f, -0.000777f, -0.000731f, -0.000719f, -0.000729f, -0.000749f, -0.000770f, -0.000785f, -0.000788f, -0.000777f, -0.000751f, -0.000710f, -0.000659f, -0.000600f, -0.000539f, -0.000482f, -0.000436f, -0.000405f, -0.000395f, -0.000409f, -0.000449f, -0.000517f, -0.000610f, -0.000725f, -0.000858f, -0.001002f, -0.001149f, -0.001288f, -0.001412f, -0.001508f, -0.001568f, -0.001582f, -0.001542f, -0.001441f, -0.001274f, -0.001038f, -0.000734f, -0.000365f, 0.000066f, 0.000550f, 0.001078f, 0.001638f, 0.002216f, 0.002797f, 0.003367f, 0.003909f, 0.004408f, 0.004850f, 0.005222f, 0.005512f, 0.005712f, 0.005815f, 0.005818f, 0.005721f, 0.005526f, 0.005238f, 0.004865f, 0.004419f, 0.003912f, 0.003358f, 0.002773f, 0.002172f, 0.001572f, 0.000989f, 0.000436f, -0.000072f, -0.000525f, -0.000914f, -0.001232f, -0.001476f, -0.001643f, -0.001736f, -0.001759f, -0.001718f, + -0.001620f, -0.001476f, -0.001297f, -0.001095f, -0.000880f, -0.000665f, -0.000460f, -0.000275f, -0.000118f, 0.000004f, 0.000088f, 0.000129f, 0.000129f, 0.000089f, 0.000012f, -0.000096f, -0.000228f, -0.000378f, -0.000536f, -0.000694f, -0.000843f, -0.000975f, -0.001084f, -0.001163f, -0.001208f, -0.001215f, -0.001183f, -0.001114f, -0.001009f, -0.000872f, -0.000709f, -0.000526f, -0.000331f, -0.000131f, 0.000065f, 0.000250f, 0.000415f, 0.000555f, 0.000663f, 0.000736f, 0.000771f, 0.000767f, 0.000725f, 0.000648f, 0.000540f, 0.000405f, 0.000251f, 0.000085f, -0.059789f, -0.102829f, -0.092753f, 0.169252f, 0.093765f, -0.110248f, -0.095322f, 0.009461f, 0.074713f, 0.221773f, 0.387343f, 0.304712f, -0.048022f, 0.160610f, -0.081762f, -0.113382f, -0.081985f, 0.078842f, 0.099060f, 0.161641f, 0.146515f, 0.134489f, -0.053092f, -0.199125f, -0.154658f, 0.111864f, 0.191718f, 0.134431f, -0.053547f, -0.160212f, -0.247981f, -0.088622f, 0.085153f, 0.222292f, 0.162242f, -0.013458f, -0.238175f, -0.220659f, -0.130588f, 0.083230f, -0.006207f, -0.064393f, 0.177034f, 0.211256f, 0.150919f, -0.065328f, -0.180990f, -0.183912f, + -0.016825f, 0.198157f, 0.309640f, 0.155162f, -0.070330f, -0.296548f, -0.324287f, -0.090291f, 0.289213f, 0.471930f, 0.310026f, -0.111317f, -0.473323f, -0.533542f, -0.208394f, 0.244730f, 0.540629f, 0.312600f, -0.147136f, -0.472310f, -0.372218f, 0.003398f, 0.387393f, 0.428112f, 0.198046f, -0.184664f, -0.399299f, -0.269342f, 0.015118f, 0.323212f, 0.361407f, 0.070727f, -0.185849f, -0.326405f, -0.211415f, 0.043730f, 0.263641f, 0.263832f, 0.112385f, -0.133428f, -0.218343f, -0.175736f, -0.025087f, 0.111237f, 0.154633f, 0.126215f, 0.065378f, -0.077963f, -0.105330f, -0.075156f, 0.037828f, 0.184245f, 0.203843f, 0.017538f, -0.180532f, -0.306739f, -0.183135f, 0.120400f, 0.329952f, 0.313537f, 0.081923f, -0.191752f, -0.341449f, -0.208336f, 0.036696f, 0.273900f, 0.269394f, 0.080001f, -0.140039f, -0.256785f, -0.187831f, -0.003402f, 0.168854f, 0.171834f, 0.130938f, -0.020893f, -0.112005f, -0.126611f, -0.078294f, -0.032492f, 0.036975f, 0.085114f, 0.097007f, 0.040828f, -0.017462f, -0.082045f, -0.077678f, -0.040142f, 0.042448f, 0.078425f, 0.102311f, 0.029889f, -0.039703f, -0.081530f, -0.060571f, -0.006374f, + 0.047472f, 0.063504f, 0.059607f, -0.017375f, -0.048996f, -0.050657f, -0.024905f, 0.023163f, 0.046934f, 0.038970f, -0.010564f, -0.045341f, -0.037140f, -0.022486f, 0.030092f, 0.047710f, 0.024071f, -0.021430f, -0.024707f, -0.047456f, -0.005417f, 0.018754f, 0.040895f, 0.026417f, -0.007848f, -0.034097f, -0.027195f, 0.003021f, 0.035275f, 0.019933f, -0.011997f, -0.023716f, -0.011194f, 0.030116f, 0.027922f, 0.075121f, 0.083562f, -0.036478f, -0.111375f, -0.108350f, 0.022050f, 0.120270f, 0.118130f, -0.027445f, -0.135747f, -0.117002f, 0.042730f, 0.142848f, 0.094614f, -0.070999f, -0.137432f, -0.050371f, 0.099772f, 0.104817f, -0.015100f, -0.110045f, -0.026105f, 0.072741f, 0.032957f, -0.043118f, -0.006230f, 0.008846f, 0.005076f, -0.004781f, 0.004484f, -0.003187f, 0.004079f, -0.004361f, 0.001958f, -0.004392f, 0.004279f, -0.003276f, 0.003650f, -0.002566f, 0.002882f, -0.003588f, 0.002789f, -0.003288f, 0.005494f, -0.001615f, 0.004485f, -0.003597f, 0.003197f, -0.003885f, 0.002673f, -0.003492f, 0.003498f, -0.002798f, 0.003864f, -0.003417f, 0.003344f, -0.003215f, 0.002718f, -0.004054f, 0.002212f, -0.003445f}, + {-0.002272f, -0.006795f, -0.011257f, -0.015617f, -0.019835f, -0.023870f, -0.027681f, -0.031227f, -0.034468f, -0.037367f, -0.039885f, -0.041987f, -0.043643f, -0.044825f, -0.045510f, -0.045682f, -0.045329f, -0.044450f, -0.043050f, -0.041143f, -0.038752f, -0.035909f, -0.032657f, -0.029046f, -0.025134f, -0.020989f, -0.016682f, -0.012291f, -0.007898f, -0.003585f, 0.000565f, 0.004471f, 0.008056f, 0.011249f, 0.013987f, 0.016216f, 0.017893f, 0.018988f, 0.019483f, 0.019374f, 0.018672f, 0.017402f, 0.015600f, 0.013318f, 0.010618f, 0.007572f, 0.004259f, 0.000766f, -0.002818f, -0.006400f, -0.009890f, -0.013202f, -0.016252f, -0.018968f, -0.021285f, -0.023149f, -0.024521f, -0.025372f, -0.025691f, -0.025479f, -0.024751f, -0.023537f, -0.021877f, -0.019824f, -0.017440f, -0.014795f, -0.011964f, -0.009025f, -0.006057f, -0.003140f, -0.000347f, 0.002250f, 0.004591f, 0.006621f, 0.008296f, 0.009584f, 0.010463f, 0.010925f, 0.010971f, 0.010616f, 0.009883f, 0.008806f, 0.007428f, 0.005795f, 0.003963f, 0.001987f, -0.000073f, -0.002162f, -0.004221f, -0.006199f, -0.008049f, -0.009728f, -0.011202f, -0.012444f, -0.013434f, -0.014163f, + -0.014628f, -0.014832f, -0.014789f, -0.014516f, -0.014036f, -0.013377f, -0.012571f, -0.011648f, -0.010644f, -0.009589f, -0.008516f, -0.007453f, -0.006427f, -0.005458f, -0.004566f, -0.003762f, -0.003057f, -0.002455f, -0.001955f, -0.001554f, -0.001247f, -0.001022f, -0.000870f, -0.000777f, -0.000731f, -0.000719f, -0.000729f, -0.000749f, -0.000770f, -0.000785f, -0.000788f, -0.000777f, -0.000751f, -0.000710f, -0.000659f, -0.000600f, -0.000539f, -0.000482f, -0.000436f, -0.000405f, -0.000395f, -0.000409f, -0.000449f, -0.000517f, -0.000610f, -0.000725f, -0.000858f, -0.001002f, -0.001149f, -0.001288f, -0.001412f, -0.001508f, -0.001568f, -0.001582f, -0.001542f, -0.001441f, -0.001274f, -0.001038f, -0.000734f, -0.000365f, 0.000066f, 0.000550f, 0.001078f, 0.001638f, 0.002216f, 0.002797f, 0.003367f, 0.003909f, 0.004408f, 0.004850f, 0.005222f, 0.005512f, 0.005712f, 0.005815f, 0.005818f, 0.005721f, 0.005526f, 0.005238f, 0.004865f, 0.004419f, 0.003912f, 0.003358f, 0.002773f, 0.002172f, 0.001572f, 0.000989f, 0.000436f, -0.000072f, -0.000525f, -0.000914f, -0.001232f, -0.001476f, -0.001643f, -0.001736f, -0.001759f, -0.001718f, + -0.001620f, -0.001476f, -0.001297f, -0.001095f, -0.000880f, -0.000665f, -0.000460f, -0.000275f, -0.000118f, 0.000004f, 0.000088f, 0.000129f, 0.000129f, 0.000089f, 0.000012f, -0.000096f, -0.000228f, -0.000378f, -0.000536f, -0.000694f, -0.000843f, -0.000975f, -0.001084f, -0.001163f, -0.001208f, -0.001215f, -0.001183f, -0.001114f, -0.001009f, -0.000872f, -0.000709f, -0.000526f, -0.000331f, -0.000131f, 0.000065f, 0.000250f, 0.000415f, 0.000555f, 0.000663f, 0.000736f, 0.000771f, 0.000767f, 0.000725f, 0.000648f, 0.000540f, 0.000405f, 0.000251f, 0.000085f, -0.059789f, -0.102829f, -0.092753f, 0.169252f, 0.093765f, -0.110248f, -0.095322f, 0.009461f, 0.074713f, 0.221773f, 0.387343f, 0.304712f, -0.048022f, 0.160610f, -0.081762f, -0.113382f, -0.081985f, 0.078842f, 0.099060f, 0.161641f, 0.146515f, 0.134489f, -0.053092f, -0.199125f, -0.154658f, 0.111864f, 0.191718f, 0.134431f, -0.053547f, -0.160212f, -0.247981f, -0.088622f, 0.085153f, 0.222292f, 0.162242f, -0.013458f, -0.238175f, -0.220659f, -0.130588f, 0.083230f, -0.006207f, -0.064393f, 0.177034f, 0.211256f, 0.150919f, -0.065328f, -0.180990f, -0.183912f, + -0.016825f, 0.198157f, 0.309640f, 0.155162f, -0.070330f, -0.296548f, -0.324287f, -0.090291f, 0.289213f, 0.471930f, 0.310026f, -0.111317f, -0.473323f, -0.533542f, -0.208394f, 0.244730f, 0.540629f, 0.312600f, -0.147136f, -0.472310f, -0.372218f, 0.003398f, 0.387393f, 0.428112f, 0.198046f, -0.184664f, -0.399299f, -0.269342f, 0.015118f, 0.323212f, 0.361407f, 0.070727f, -0.185849f, -0.326405f, -0.211415f, 0.043730f, 0.263641f, 0.263832f, 0.112385f, -0.133428f, -0.218343f, -0.175736f, -0.025087f, 0.111237f, 0.154633f, 0.126215f, 0.065378f, -0.077963f, -0.105330f, -0.075156f, 0.037828f, 0.184245f, 0.203843f, 0.017538f, -0.180532f, -0.306739f, -0.183135f, 0.120400f, 0.329952f, 0.313537f, 0.081923f, -0.191752f, -0.341449f, -0.208336f, 0.036696f, 0.273900f, 0.269394f, 0.080001f, -0.140039f, -0.256785f, -0.187831f, -0.003402f, 0.168854f, 0.171834f, 0.130938f, -0.020893f, -0.112005f, -0.126611f, -0.078294f, -0.032492f, 0.036975f, 0.085114f, 0.097007f, 0.040828f, -0.017462f, -0.082045f, -0.077678f, -0.040142f, 0.042448f, 0.078425f, 0.102311f, 0.029889f, -0.039703f, -0.081530f, -0.060571f, -0.006374f, + 0.047472f, 0.063504f, 0.059607f, -0.017375f, -0.048996f, -0.050657f, -0.024905f, 0.023163f, 0.046934f, 0.038970f, -0.010564f, -0.045341f, -0.037140f, -0.022486f, 0.030092f, 0.047710f, 0.024071f, -0.021430f, -0.024707f, -0.047456f, -0.005417f, 0.018754f, 0.040895f, 0.026417f, -0.007848f, -0.034097f, -0.027195f, 0.003021f, 0.035275f, 0.019933f, -0.011997f, -0.023716f, -0.011194f, 0.030116f, 0.027922f, 0.075121f, 0.083562f, -0.036478f, -0.111375f, -0.108350f, 0.022050f, 0.120270f, 0.118130f, -0.027445f, -0.135747f, -0.117002f, 0.042730f, 0.142848f, 0.094614f, -0.070999f, -0.137432f, -0.050371f, 0.099772f, 0.104817f, -0.015100f, -0.110045f, -0.026105f, 0.072741f, 0.032957f, -0.043118f, -0.006230f, 0.008846f, 0.005076f, -0.004781f, 0.004484f, -0.003187f, 0.004079f, -0.004361f, 0.001958f, -0.004392f, 0.004279f, -0.003276f, 0.003650f, -0.002566f, 0.002882f, -0.003588f, 0.002789f, -0.003288f, 0.005494f, -0.001615f, 0.004485f, -0.003597f, 0.003197f, -0.003885f, 0.002673f, -0.003492f, 0.003498f, -0.002798f, 0.003864f, -0.003417f, 0.003344f, -0.003215f, 0.002718f, -0.004054f, 0.002212f, -0.003445f} + }, + { + {-0.002789f, -0.008307f, -0.013643f, -0.018683f, -0.023322f, -0.027463f, -0.031025f, -0.033946f, -0.036178f, -0.037694f, -0.038488f, -0.038572f, -0.037978f, -0.036756f, -0.034972f, -0.032707f, -0.030052f, -0.027107f, -0.023977f, -0.020770f, -0.017592f, -0.014544f, -0.011719f, -0.009201f, -0.007061f, -0.005352f, -0.004116f, -0.003373f, -0.003127f, -0.003367f, -0.004062f, -0.005167f, -0.006623f, -0.008359f, -0.010298f, -0.012354f, -0.014437f, -0.016461f, -0.018337f, -0.019988f, -0.021340f, -0.022333f, -0.022918f, -0.023060f, -0.022740f, -0.021955f, -0.020718f, -0.019054f, -0.017008f, -0.014632f, -0.011993f, -0.009166f, -0.006230f, -0.003272f, -0.000376f, 0.002375f, 0.004901f, 0.007130f, 0.008999f, 0.010457f, 0.011466f, 0.012000f, 0.012051f, 0.011622f, 0.010733f, 0.009419f, 0.007726f, 0.005712f, 0.003444f, 0.000997f, -0.001550f, -0.004114f, -0.006615f, -0.008973f, -0.011113f, -0.012969f, -0.014483f, -0.015610f, -0.016313f, -0.016573f, -0.016380f, -0.015743f, -0.014678f, -0.013220f, -0.011411f, -0.009304f, -0.006962f, -0.004452f, -0.001847f, 0.000778f, 0.003351f, 0.005800f, 0.008057f, 0.010062f, 0.011763f, 0.013118f, + 0.014095f, 0.014673f, 0.014843f, 0.014609f, 0.013987f, 0.013001f, 0.011687f, 0.010091f, 0.008264f, 0.006264f, 0.004152f, 0.001991f, -0.000154f, -0.002222f, -0.004154f, -0.005897f, -0.007404f, -0.008635f, -0.009559f, -0.010155f, -0.010410f, -0.010323f, -0.009900f, -0.009158f, -0.008122f, -0.006824f, -0.005303f, -0.003604f, -0.001774f, 0.000137f, 0.002076f, 0.003992f, 0.005837f, 0.007562f, 0.009127f, 0.010494f, 0.011632f, 0.012516f, 0.013128f, 0.013459f, 0.013506f, 0.013272f, 0.012769f, 0.012014f, 0.011030f, 0.009846f, 0.008492f, 0.007005f, 0.005422f, 0.003780f, 0.002118f, 0.000474f, -0.001116f, -0.002619f, -0.004005f, -0.005246f, -0.006321f, -0.007211f, -0.007906f, -0.008396f, -0.008678f, -0.008756f, -0.008634f, -0.008326f, -0.007844f, -0.007207f, -0.006436f, -0.005554f, -0.004585f, -0.003556f, -0.002492f, -0.001419f, -0.000362f, 0.000657f, 0.001614f, 0.002490f, 0.003269f, 0.003937f, 0.004482f, 0.004898f, 0.005180f, 0.005327f, 0.005341f, 0.005228f, 0.004995f, 0.004654f, 0.004217f, 0.003699f, 0.003116f, 0.002486f, 0.001826f, 0.001153f, 0.000487f, -0.000158f, -0.000764f, -0.001317f, + -0.001807f, -0.002221f, -0.002553f, -0.002796f, -0.002948f, -0.003009f, -0.002981f, -0.002868f, -0.002678f, -0.002419f, -0.002101f, -0.001738f, -0.001341f, -0.000924f, -0.000501f, -0.000085f, 0.000310f, 0.000672f, 0.000991f, 0.001258f, 0.001466f, 0.001608f, 0.001683f, 0.001690f, 0.001630f, 0.001506f, 0.001325f, 0.001094f, 0.000823f, 0.000520f, 0.000198f, -0.000132f, -0.000458f, -0.000769f, -0.001053f, -0.001301f, -0.001504f, -0.001654f, -0.001748f, -0.001781f, -0.001753f, -0.001665f, -0.001519f, -0.001321f, -0.001078f, -0.000798f, -0.000490f, -0.000165f, 0.017176f, -0.095187f, -0.084606f, -0.066811f, 0.125559f, -0.055178f, -0.043647f, -0.055244f, 0.072692f, -0.100566f, 0.144466f, 0.115529f, -0.073006f, 0.428083f, 0.536602f, 0.361472f, -0.187950f, -0.504191f, -0.536616f, -0.209228f, 0.324262f, 0.717470f, 0.478981f, -0.076945f, -0.630505f, -0.733172f, -0.375303f, 0.361746f, 0.851780f, 0.698445f, 0.037438f, -0.675581f, -0.833947f, -0.418577f, 0.332675f, 0.737928f, 0.682865f, 0.031743f, -0.473913f, -0.676649f, -0.117154f, 0.532501f, 0.479968f, 0.217465f, -0.301848f, -0.549401f, -0.506875f, -0.111072f, + 0.270243f, 0.498796f, 0.300719f, -0.032138f, -0.355314f, -0.392730f, -0.221885f, 0.107243f, 0.283997f, 0.295613f, 0.107448f, -0.126633f, -0.290794f, -0.236983f, -0.062118f, 0.192882f, 0.217201f, 0.246534f, 0.077800f, -0.182329f, -0.291132f, -0.187252f, 0.073341f, 0.190753f, 0.164380f, -0.004872f, -0.127444f, -0.163991f, -0.015512f, 0.092454f, 0.131975f, 0.055603f, -0.096848f, -0.186120f, -0.110515f, 0.053529f, 0.167286f, 0.194905f, 0.025435f, -0.166737f, -0.232992f, -0.166609f, 0.041217f, 0.101374f, 0.059077f, -0.013888f, -0.098945f, -0.070482f, -0.025854f, -0.002388f, -0.004873f, -0.144900f, -0.143526f, -0.024917f, 0.174840f, 0.253184f, 0.159423f, -0.101731f, -0.281333f, -0.266236f, -0.020673f, 0.276208f, 0.361017f, 0.143252f, -0.173068f, -0.399336f, -0.321599f, -0.051770f, 0.281296f, 0.447241f, 0.242085f, -0.149283f, -0.440122f, -0.363316f, -0.037746f, 0.303052f, 0.419547f, 0.243804f, -0.087344f, -0.340480f, -0.342191f, -0.114542f, 0.211909f, 0.363800f, 0.284290f, -0.029414f, -0.291687f, -0.360590f, -0.187496f, 0.133136f, 0.356109f, 0.307411f, 0.052787f, -0.239933f, -0.364350f, -0.224866f, + 0.017593f, 0.263960f, 0.324224f, 0.167012f, -0.114450f, -0.267339f, -0.247516f, -0.036651f, 0.195931f, 0.291766f, 0.198195f, -0.068327f, -0.278376f, -0.265980f, -0.093008f, 0.159531f, 0.300914f, 0.205936f, -0.054356f, -0.225104f, -0.255082f, -0.090307f, 0.125451f, 0.237868f, 0.175738f, -0.017821f, -0.216213f, -0.228798f, -0.061587f, 0.173951f, 0.277154f, 0.171367f, -0.077741f, -0.239995f, -0.256539f, 0.042831f, 0.319227f, 0.274893f, -0.000013f, -0.298031f, -0.323092f, -0.070354f, 0.245828f, 0.321677f, 0.100790f, -0.219246f, -0.313970f, -0.105338f, 0.193433f, 0.273140f, 0.068388f, -0.193449f, -0.221340f, -0.006955f, 0.190425f, 0.125486f, -0.090515f, -0.132627f, 0.025865f, 0.066881f, -0.010202f, -0.019306f, 0.001199f, -0.000057f, -0.000712f, -0.001216f, 0.000966f, -0.003512f, -0.000585f, -0.000861f, -0.000802f, -0.001826f, 0.000550f, -0.000723f, 0.000118f, -0.001682f, 0.000548f, -0.000821f, -0.000305f, -0.002193f, 0.000435f, 0.000823f, 0.001605f, -0.000919f, -0.000456f, -0.001958f, -0.000591f, -0.001151f, -0.002830f, 0.001704f, 0.003810f, 0.000403f, -0.000276f, -0.001902f, 0.000440f, -0.000242f}, + {-0.002789f, -0.008307f, -0.013643f, -0.018683f, -0.023322f, -0.027463f, -0.031025f, -0.033946f, -0.036178f, -0.037694f, -0.038488f, -0.038572f, -0.037978f, -0.036756f, -0.034972f, -0.032707f, -0.030052f, -0.027107f, -0.023977f, -0.020770f, -0.017592f, -0.014544f, -0.011719f, -0.009201f, -0.007061f, -0.005352f, -0.004116f, -0.003373f, -0.003127f, -0.003367f, -0.004062f, -0.005167f, -0.006623f, -0.008359f, -0.010298f, -0.012354f, -0.014437f, -0.016461f, -0.018337f, -0.019988f, -0.021340f, -0.022333f, -0.022918f, -0.023060f, -0.022740f, -0.021955f, -0.020718f, -0.019054f, -0.017008f, -0.014632f, -0.011993f, -0.009166f, -0.006230f, -0.003272f, -0.000376f, 0.002375f, 0.004901f, 0.007130f, 0.008999f, 0.010457f, 0.011466f, 0.012000f, 0.012051f, 0.011622f, 0.010733f, 0.009419f, 0.007726f, 0.005712f, 0.003444f, 0.000997f, -0.001550f, -0.004114f, -0.006615f, -0.008973f, -0.011113f, -0.012969f, -0.014483f, -0.015610f, -0.016313f, -0.016573f, -0.016380f, -0.015743f, -0.014678f, -0.013220f, -0.011411f, -0.009304f, -0.006962f, -0.004452f, -0.001847f, 0.000778f, 0.003351f, 0.005800f, 0.008057f, 0.010062f, 0.011763f, 0.013118f, + 0.014095f, 0.014673f, 0.014843f, 0.014609f, 0.013987f, 0.013001f, 0.011687f, 0.010091f, 0.008264f, 0.006264f, 0.004152f, 0.001991f, -0.000154f, -0.002222f, -0.004154f, -0.005897f, -0.007404f, -0.008635f, -0.009559f, -0.010155f, -0.010410f, -0.010323f, -0.009900f, -0.009158f, -0.008122f, -0.006824f, -0.005303f, -0.003604f, -0.001774f, 0.000137f, 0.002076f, 0.003992f, 0.005837f, 0.007562f, 0.009127f, 0.010494f, 0.011632f, 0.012516f, 0.013128f, 0.013459f, 0.013506f, 0.013272f, 0.012769f, 0.012014f, 0.011030f, 0.009846f, 0.008492f, 0.007005f, 0.005422f, 0.003780f, 0.002118f, 0.000474f, -0.001116f, -0.002619f, -0.004005f, -0.005246f, -0.006321f, -0.007211f, -0.007906f, -0.008396f, -0.008678f, -0.008756f, -0.008634f, -0.008326f, -0.007844f, -0.007207f, -0.006436f, -0.005554f, -0.004585f, -0.003556f, -0.002492f, -0.001419f, -0.000362f, 0.000657f, 0.001614f, 0.002490f, 0.003269f, 0.003937f, 0.004482f, 0.004898f, 0.005180f, 0.005327f, 0.005341f, 0.005228f, 0.004995f, 0.004654f, 0.004217f, 0.003699f, 0.003116f, 0.002486f, 0.001826f, 0.001153f, 0.000487f, -0.000158f, -0.000764f, -0.001317f, + -0.001807f, -0.002221f, -0.002553f, -0.002796f, -0.002948f, -0.003009f, -0.002981f, -0.002868f, -0.002678f, -0.002419f, -0.002101f, -0.001738f, -0.001341f, -0.000924f, -0.000501f, -0.000085f, 0.000310f, 0.000672f, 0.000991f, 0.001258f, 0.001466f, 0.001608f, 0.001683f, 0.001690f, 0.001630f, 0.001506f, 0.001325f, 0.001094f, 0.000823f, 0.000520f, 0.000198f, -0.000132f, -0.000458f, -0.000769f, -0.001053f, -0.001301f, -0.001504f, -0.001654f, -0.001748f, -0.001781f, -0.001753f, -0.001665f, -0.001519f, -0.001321f, -0.001078f, -0.000798f, -0.000490f, -0.000165f, 0.017176f, -0.095187f, -0.084606f, -0.066811f, 0.125559f, -0.055178f, -0.043647f, -0.055244f, 0.072692f, -0.100566f, 0.144466f, 0.115529f, -0.073006f, 0.428083f, 0.536602f, 0.361472f, -0.187950f, -0.504191f, -0.536616f, -0.209228f, 0.324262f, 0.717470f, 0.478981f, -0.076945f, -0.630505f, -0.733172f, -0.375303f, 0.361746f, 0.851780f, 0.698445f, 0.037438f, -0.675581f, -0.833947f, -0.418577f, 0.332675f, 0.737928f, 0.682865f, 0.031743f, -0.473913f, -0.676649f, -0.117154f, 0.532501f, 0.479968f, 0.217465f, -0.301848f, -0.549401f, -0.506875f, -0.111072f, + 0.270243f, 0.498796f, 0.300719f, -0.032138f, -0.355314f, -0.392730f, -0.221885f, 0.107243f, 0.283997f, 0.295613f, 0.107448f, -0.126633f, -0.290794f, -0.236983f, -0.062118f, 0.192882f, 0.217201f, 0.246534f, 0.077800f, -0.182329f, -0.291132f, -0.187252f, 0.073341f, 0.190753f, 0.164380f, -0.004872f, -0.127444f, -0.163991f, -0.015512f, 0.092454f, 0.131975f, 0.055603f, -0.096848f, -0.186120f, -0.110515f, 0.053529f, 0.167286f, 0.194905f, 0.025435f, -0.166737f, -0.232992f, -0.166609f, 0.041217f, 0.101374f, 0.059077f, -0.013888f, -0.098945f, -0.070482f, -0.025854f, -0.002388f, -0.004873f, -0.144900f, -0.143526f, -0.024917f, 0.174840f, 0.253184f, 0.159423f, -0.101731f, -0.281333f, -0.266236f, -0.020673f, 0.276208f, 0.361017f, 0.143252f, -0.173068f, -0.399336f, -0.321599f, -0.051770f, 0.281296f, 0.447241f, 0.242085f, -0.149283f, -0.440122f, -0.363316f, -0.037746f, 0.303052f, 0.419547f, 0.243804f, -0.087344f, -0.340480f, -0.342191f, -0.114542f, 0.211909f, 0.363800f, 0.284290f, -0.029414f, -0.291687f, -0.360590f, -0.187496f, 0.133136f, 0.356109f, 0.307411f, 0.052787f, -0.239933f, -0.364350f, -0.224866f, + 0.017593f, 0.263960f, 0.324224f, 0.167012f, -0.114450f, -0.267339f, -0.247516f, -0.036651f, 0.195931f, 0.291766f, 0.198195f, -0.068327f, -0.278376f, -0.265980f, -0.093008f, 0.159531f, 0.300914f, 0.205936f, -0.054356f, -0.225104f, -0.255082f, -0.090307f, 0.125451f, 0.237868f, 0.175738f, -0.017821f, -0.216213f, -0.228798f, -0.061587f, 0.173951f, 0.277154f, 0.171367f, -0.077741f, -0.239995f, -0.256539f, 0.042831f, 0.319227f, 0.274893f, -0.000013f, -0.298031f, -0.323092f, -0.070354f, 0.245828f, 0.321677f, 0.100790f, -0.219246f, -0.313970f, -0.105338f, 0.193433f, 0.273140f, 0.068388f, -0.193449f, -0.221340f, -0.006955f, 0.190425f, 0.125486f, -0.090515f, -0.132627f, 0.025865f, 0.066881f, -0.010202f, -0.019306f, 0.001199f, -0.000057f, -0.000712f, -0.001216f, 0.000966f, -0.003512f, -0.000585f, -0.000861f, -0.000802f, -0.001826f, 0.000550f, -0.000723f, 0.000118f, -0.001682f, 0.000548f, -0.000821f, -0.000305f, -0.002193f, 0.000435f, 0.000823f, 0.001605f, -0.000919f, -0.000456f, -0.001958f, -0.000591f, -0.001151f, -0.002830f, 0.001704f, 0.003810f, 0.000403f, -0.000276f, -0.001902f, 0.000440f, -0.000242f} + }, + { + {-0.001398f, -0.004182f, -0.006929f, -0.009613f, -0.012210f, -0.014694f, -0.017042f, -0.019228f, -0.021231f, -0.023026f, -0.024594f, -0.025915f, -0.026973f, -0.027753f, -0.028247f, -0.028448f, -0.028355f, -0.027972f, -0.027307f, -0.026377f, -0.025200f, -0.023805f, -0.022221f, -0.020487f, -0.018643f, -0.016735f, -0.014809f, -0.012916f, -0.011104f, -0.009424f, -0.007923f, -0.006643f, -0.005625f, -0.004901f, -0.004498f, -0.004433f, -0.004717f, -0.005350f, -0.006323f, -0.007618f, -0.009207f, -0.011054f, -0.013115f, -0.015340f, -0.017673f, -0.020053f, -0.022418f, -0.024705f, -0.026852f, -0.028801f, -0.030496f, -0.031889f, -0.032939f, -0.033615f, -0.033894f, -0.033763f, -0.033221f, -0.032277f, -0.030951f, -0.029271f, -0.027277f, -0.025014f, -0.022533f, -0.019893f, -0.017153f, -0.014374f, -0.011616f, -0.008939f, -0.006395f, -0.004034f, -0.001897f, -0.000018f, 0.001578f, 0.002877f, 0.003871f, 0.004566f, 0.004972f, 0.005112f, 0.005014f, 0.004712f, 0.004245f, 0.003655f, 0.002988f, 0.002286f, 0.001593f, 0.000947f, 0.000384f, -0.000067f, -0.000383f, -0.000548f, -0.000555f, -0.000403f, -0.000100f, 0.000340f, 0.000896f, 0.001542f, + 0.002248f, 0.002979f, 0.003701f, 0.004380f, 0.004981f, 0.005473f, 0.005830f, 0.006030f, 0.006058f, 0.005906f, 0.005571f, 0.005060f, 0.004387f, 0.003572f, 0.002642f, 0.001628f, 0.000567f, -0.000503f, -0.001539f, -0.002501f, -0.003351f, -0.004051f, -0.004568f, -0.004877f, -0.004957f, -0.004794f, -0.004384f, -0.003731f, -0.002845f, -0.001746f, -0.000463f, 0.000972f, 0.002517f, 0.004130f, 0.005761f, 0.007363f, 0.008885f, 0.010280f, 0.011503f, 0.012513f, 0.013275f, 0.013762f, 0.013953f, 0.013836f, 0.013408f, 0.012675f, 0.011652f, 0.010360f, 0.008831f, 0.007102f, 0.005214f, 0.003214f, 0.001153f, -0.000919f, -0.002950f, -0.004893f, -0.006699f, -0.008327f, -0.009741f, -0.010910f, -0.011810f, -0.012426f, -0.012750f, -0.012782f, -0.012530f, -0.012007f, -0.011237f, -0.010245f, -0.009064f, -0.007730f, -0.006280f, -0.004755f, -0.003194f, -0.001637f, -0.000119f, 0.001324f, 0.002663f, 0.003873f, 0.004931f, 0.005824f, 0.006540f, 0.007076f, 0.007431f, 0.007611f, 0.007626f, 0.007489f, 0.007217f, 0.006829f, 0.006346f, 0.005788f, 0.005178f, 0.004536f, 0.003883f, 0.003236f, 0.002612f, 0.002024f, + 0.001483f, 0.000998f, 0.000574f, 0.000214f, -0.000082f, -0.000314f, -0.000487f, -0.000605f, -0.000674f, -0.000702f, -0.000694f, -0.000659f, -0.000603f, -0.000532f, -0.000452f, -0.000367f, -0.000280f, -0.000196f, -0.000114f, -0.000037f, 0.000037f, 0.000107f, 0.000173f, 0.000238f, 0.000303f, 0.000367f, 0.000433f, 0.000499f, 0.000567f, 0.000636f, 0.000704f, 0.000769f, 0.000831f, 0.000886f, 0.000932f, 0.000966f, 0.000987f, 0.000992f, 0.000979f, 0.000947f, 0.000896f, 0.000825f, 0.000735f, 0.000628f, 0.000505f, 0.000370f, 0.000226f, 0.000076f, 0.009537f, -0.025098f, 0.002786f, -0.063195f, -0.011454f, -0.003229f, 0.064313f, 0.015733f, 0.011226f, 0.012941f, 0.058888f, 0.091003f, -0.032689f, 0.214915f, 0.315019f, 0.133084f, -0.086255f, -0.175700f, -0.329061f, 0.007385f, 0.076743f, 0.172848f, 0.129603f, -0.050093f, -0.147751f, -0.174632f, -0.016302f, 0.183859f, 0.275204f, 0.164708f, -0.046160f, -0.231085f, -0.305367f, -0.102624f, 0.318419f, 0.373301f, 0.151958f, -0.142073f, -0.327602f, -0.316282f, 0.056588f, 0.374551f, 0.289291f, 0.067277f, -0.238822f, -0.368754f, -0.260695f, -0.020030f, + 0.130222f, 0.304065f, 0.227394f, 0.048681f, -0.170527f, -0.268830f, -0.199083f, -0.018513f, 0.202927f, 0.204249f, 0.217268f, -0.177928f, -0.183146f, -0.198042f, -0.177634f, 0.058768f, 0.262191f, 0.200701f, -0.052419f, -0.252923f, -0.275988f, -0.049426f, 0.207429f, 0.273299f, 0.208886f, 0.013765f, -0.244023f, -0.286224f, -0.113709f, 0.172389f, 0.313132f, 0.124798f, -0.017737f, -0.298624f, -0.315803f, -0.087124f, 0.189075f, 0.280196f, 0.123507f, -0.110427f, -0.296829f, -0.222220f, -0.002989f, 0.148554f, 0.108602f, -0.027102f, -0.095315f, -0.032799f, 0.026530f, 0.041807f, 0.008194f, -0.121200f, -0.101256f, -0.003539f, 0.143894f, 0.201917f, 0.134308f, -0.044255f, -0.179498f, -0.196896f, -0.077737f, 0.144113f, 0.232885f, 0.232204f, 0.078859f, -0.184195f, -0.281655f, -0.102618f, 0.100404f, 0.234960f, 0.179685f, -0.069331f, -0.132755f, -0.230639f, -0.151544f, 0.074729f, 0.170532f, 0.204106f, 0.063404f, -0.088652f, -0.140248f, -0.063267f, 0.029244f, 0.099832f, 0.076021f, 0.020095f, -0.072666f, -0.081413f, -0.089380f, 0.004151f, 0.105303f, 0.104567f, 0.041334f, -0.033844f, -0.099053f, -0.068595f, + -0.043828f, 0.039783f, 0.086204f, 0.084819f, 0.014423f, -0.026491f, -0.038131f, 0.002549f, 0.027963f, 0.054907f, 0.060903f, 0.000251f, -0.073438f, -0.075337f, -0.024455f, 0.050430f, 0.132453f, 0.105391f, -0.027614f, -0.100381f, -0.131174f, -0.056092f, 0.032895f, 0.085088f, 0.063533f, 0.003182f, -0.071345f, -0.087193f, -0.040483f, 0.081616f, 0.100384f, 0.102589f, -0.046386f, -0.122259f, -0.163890f, -0.009890f, 0.324037f, 0.313620f, 0.065158f, -0.273810f, -0.351656f, -0.129786f, 0.227440f, 0.356748f, 0.161216f, -0.193691f, -0.342080f, -0.158923f, 0.181586f, 0.312851f, 0.119461f, -0.188232f, -0.260462f, -0.037299f, 0.204803f, 0.166662f, -0.082503f, -0.167438f, 0.019261f, 0.089158f, -0.004467f, -0.024844f, 0.000708f, 0.003341f, 0.001287f, 0.000897f, -0.000649f, -0.002509f, 0.000959f, -0.000583f, 0.001758f, 0.000265f, 0.001482f, -0.001572f, 0.000488f, 0.000974f, 0.000454f, -0.001844f, 0.000233f, -0.000726f, 0.000899f, -0.002310f, 0.000677f, 0.000363f, 0.001329f, 0.000209f, -0.002589f, -0.001986f, -0.000225f, -0.000729f, 0.002987f, -0.000728f, 0.001898f, -0.002967f, -0.000898f, -0.001951f}, + {0.001398f, 0.004182f, 0.006929f, 0.009613f, 0.012210f, 0.014694f, 0.017042f, 0.019228f, 0.021231f, 0.023026f, 0.024594f, 0.025915f, 0.026973f, 0.027753f, 0.028247f, 0.028448f, 0.028355f, 0.027972f, 0.027307f, 0.026377f, 0.025200f, 0.023805f, 0.022221f, 0.020487f, 0.018643f, 0.016735f, 0.014809f, 0.012916f, 0.011104f, 0.009424f, 0.007923f, 0.006643f, 0.005625f, 0.004901f, 0.004498f, 0.004433f, 0.004717f, 0.005350f, 0.006323f, 0.007618f, 0.009207f, 0.011054f, 0.013115f, 0.015340f, 0.017673f, 0.020053f, 0.022418f, 0.024705f, 0.026852f, 0.028801f, 0.030496f, 0.031889f, 0.032939f, 0.033615f, 0.033894f, 0.033763f, 0.033221f, 0.032277f, 0.030951f, 0.029271f, 0.027277f, 0.025014f, 0.022533f, 0.019893f, 0.017153f, 0.014374f, 0.011616f, 0.008939f, 0.006395f, 0.004034f, 0.001897f, 0.000018f, -0.001578f, -0.002877f, -0.003871f, -0.004566f, -0.004972f, -0.005112f, -0.005014f, -0.004712f, -0.004245f, -0.003655f, -0.002988f, -0.002286f, -0.001593f, -0.000947f, -0.000384f, 0.000067f, 0.000383f, 0.000548f, 0.000555f, 0.000403f, 0.000100f, -0.000340f, -0.000896f, -0.001542f, + -0.002248f, -0.002979f, -0.003701f, -0.004380f, -0.004981f, -0.005473f, -0.005830f, -0.006030f, -0.006058f, -0.005906f, -0.005571f, -0.005060f, -0.004387f, -0.003572f, -0.002642f, -0.001628f, -0.000567f, 0.000503f, 0.001539f, 0.002501f, 0.003351f, 0.004051f, 0.004568f, 0.004877f, 0.004957f, 0.004794f, 0.004384f, 0.003731f, 0.002845f, 0.001746f, 0.000463f, -0.000972f, -0.002517f, -0.004130f, -0.005761f, -0.007363f, -0.008885f, -0.010280f, -0.011503f, -0.012513f, -0.013275f, -0.013762f, -0.013953f, -0.013836f, -0.013408f, -0.012675f, -0.011652f, -0.010360f, -0.008831f, -0.007102f, -0.005214f, -0.003214f, -0.001153f, 0.000919f, 0.002950f, 0.004893f, 0.006699f, 0.008327f, 0.009741f, 0.010910f, 0.011810f, 0.012426f, 0.012750f, 0.012782f, 0.012530f, 0.012007f, 0.011237f, 0.010245f, 0.009064f, 0.007730f, 0.006280f, 0.004755f, 0.003194f, 0.001637f, 0.000119f, -0.001324f, -0.002663f, -0.003873f, -0.004931f, -0.005824f, -0.006540f, -0.007076f, -0.007431f, -0.007611f, -0.007626f, -0.007489f, -0.007217f, -0.006829f, -0.006346f, -0.005788f, -0.005178f, -0.004536f, -0.003883f, -0.003236f, -0.002612f, -0.002024f, + -0.001483f, -0.000998f, -0.000574f, -0.000214f, 0.000082f, 0.000314f, 0.000487f, 0.000605f, 0.000674f, 0.000702f, 0.000694f, 0.000659f, 0.000603f, 0.000532f, 0.000452f, 0.000367f, 0.000280f, 0.000196f, 0.000114f, 0.000037f, -0.000037f, -0.000107f, -0.000173f, -0.000238f, -0.000303f, -0.000367f, -0.000433f, -0.000499f, -0.000567f, -0.000636f, -0.000704f, -0.000769f, -0.000831f, -0.000886f, -0.000932f, -0.000966f, -0.000987f, -0.000992f, -0.000979f, -0.000947f, -0.000896f, -0.000825f, -0.000735f, -0.000628f, -0.000505f, -0.000370f, -0.000226f, -0.000076f, -0.009537f, 0.025098f, -0.002786f, 0.063195f, 0.011454f, 0.003229f, -0.064313f, -0.015733f, -0.011226f, -0.012941f, -0.058888f, -0.091003f, 0.032689f, -0.214915f, -0.315019f, -0.133084f, 0.086255f, 0.175700f, 0.329061f, -0.007385f, -0.076743f, -0.172848f, -0.129603f, 0.050093f, 0.147751f, 0.174632f, 0.016302f, -0.183859f, -0.275204f, -0.164708f, 0.046160f, 0.231085f, 0.305367f, 0.102624f, -0.318419f, -0.373301f, -0.151958f, 0.142073f, 0.327602f, 0.316282f, -0.056588f, -0.374551f, -0.289291f, -0.067277f, 0.238822f, 0.368754f, 0.260695f, 0.020030f, + -0.130222f, -0.304065f, -0.227394f, -0.048681f, 0.170527f, 0.268830f, 0.199083f, 0.018513f, -0.202927f, -0.204249f, -0.217268f, 0.177928f, 0.183146f, 0.198042f, 0.177634f, -0.058768f, -0.262191f, -0.200701f, 0.052419f, 0.252923f, 0.275988f, 0.049426f, -0.207429f, -0.273299f, -0.208886f, -0.013765f, 0.244023f, 0.286224f, 0.113709f, -0.172389f, -0.313132f, -0.124798f, 0.017737f, 0.298624f, 0.315803f, 0.087124f, -0.189075f, -0.280196f, -0.123507f, 0.110427f, 0.296829f, 0.222220f, 0.002989f, -0.148554f, -0.108602f, 0.027102f, 0.095315f, 0.032799f, -0.026530f, -0.041807f, -0.008194f, 0.121200f, 0.101256f, 0.003539f, -0.143894f, -0.201917f, -0.134308f, 0.044255f, 0.179498f, 0.196896f, 0.077737f, -0.144113f, -0.232885f, -0.232204f, -0.078859f, 0.184195f, 0.281655f, 0.102618f, -0.100404f, -0.234960f, -0.179685f, 0.069331f, 0.132755f, 0.230639f, 0.151544f, -0.074729f, -0.170532f, -0.204106f, -0.063404f, 0.088652f, 0.140248f, 0.063267f, -0.029244f, -0.099832f, -0.076021f, -0.020095f, 0.072666f, 0.081413f, 0.089380f, -0.004151f, -0.105303f, -0.104567f, -0.041334f, 0.033844f, 0.099053f, 0.068595f, + 0.043828f, -0.039783f, -0.086204f, -0.084819f, -0.014423f, 0.026491f, 0.038131f, -0.002549f, -0.027963f, -0.054907f, -0.060903f, -0.000251f, 0.073438f, 0.075337f, 0.024455f, -0.050430f, -0.132453f, -0.105391f, 0.027614f, 0.100381f, 0.131174f, 0.056092f, -0.032895f, -0.085088f, -0.063533f, -0.003182f, 0.071345f, 0.087193f, 0.040483f, -0.081616f, -0.100384f, -0.102589f, 0.046386f, 0.122259f, 0.163890f, 0.009890f, -0.324037f, -0.313620f, -0.065158f, 0.273810f, 0.351656f, 0.129786f, -0.227440f, -0.356748f, -0.161216f, 0.193691f, 0.342080f, 0.158923f, -0.181586f, -0.312851f, -0.119461f, 0.188232f, 0.260462f, 0.037299f, -0.204803f, -0.166662f, 0.082503f, 0.167438f, -0.019261f, -0.089158f, 0.004467f, 0.024844f, -0.000708f, -0.003341f, -0.001287f, -0.000897f, 0.000649f, 0.002509f, -0.000959f, 0.000583f, -0.001758f, -0.000265f, -0.001482f, 0.001572f, -0.000488f, -0.000974f, -0.000454f, 0.001844f, -0.000233f, 0.000726f, -0.000899f, 0.002310f, -0.000677f, -0.000363f, -0.001329f, -0.000209f, 0.002589f, 0.001986f, 0.000225f, 0.000729f, -0.002987f, 0.000728f, -0.001898f, 0.002967f, 0.000898f, 0.001951f} + }, + { + {-0.000465f, -0.001404f, -0.002369f, -0.003376f, -0.004436f, -0.005561f, -0.006755f, -0.008017f, -0.009344f, -0.010725f, -0.012145f, -0.013583f, -0.015015f, -0.016415f, -0.017751f, -0.018992f, -0.020108f, -0.021068f, -0.021845f, -0.022413f, -0.022755f, -0.022856f, -0.022709f, -0.022314f, -0.021677f, -0.020814f, -0.019744f, -0.018496f, -0.017103f, -0.015602f, -0.014037f, -0.012450f, -0.010886f, -0.009389f, -0.008001f, -0.006759f, -0.005696f, -0.004839f, -0.004207f, -0.003813f, -0.003660f, -0.003742f, -0.004047f, -0.004552f, -0.005231f, -0.006048f, -0.006964f, -0.007936f, -0.008918f, -0.009866f, -0.010735f, -0.011484f, -0.012075f, -0.012477f, -0.012666f, -0.012624f, -0.012343f, -0.011823f, -0.011072f, -0.010110f, -0.008959f, -0.007654f, -0.006231f, -0.004734f, -0.003209f, -0.001703f, -0.000262f, 0.001067f, 0.002243f, 0.003228f, 0.003993f, 0.004514f, 0.004775f, 0.004770f, 0.004501f, 0.003977f, 0.003219f, 0.002253f, 0.001113f, -0.000163f, -0.001532f, -0.002948f, -0.004365f, -0.005736f, -0.007019f, -0.008174f, -0.009165f, -0.009964f, -0.010550f, -0.010909f, -0.011035f, -0.010933f, -0.010612f, -0.010091f, -0.009396f, -0.008557f, + -0.007610f, -0.006595f, -0.005550f, -0.004518f, -0.003538f, -0.002646f, -0.001875f, -0.001254f, -0.000804f, -0.000539f, -0.000468f, -0.000591f, -0.000900f, -0.001382f, -0.002016f, -0.002776f, -0.003634f, -0.004554f, -0.005503f, -0.006443f, -0.007341f, -0.008162f, -0.008878f, -0.009463f, -0.009896f, -0.010164f, -0.010259f, -0.010179f, -0.009929f, -0.009520f, -0.008970f, -0.008299f, -0.007535f, -0.006704f, -0.005838f, -0.004967f, -0.004121f, -0.003328f, -0.002614f, -0.002000f, -0.001501f, -0.001130f, -0.000892f, -0.000788f, -0.000810f, -0.000948f, -0.001186f, -0.001503f, -0.001875f, -0.002277f, -0.002682f, -0.003063f, -0.003393f, -0.003648f, -0.003808f, -0.003856f, -0.003779f, -0.003570f, -0.003229f, -0.002759f, -0.002169f, -0.001474f, -0.000694f, 0.000148f, 0.001028f, 0.001916f, 0.002785f, 0.003605f, 0.004349f, 0.004992f, 0.005513f, 0.005894f, 0.006122f, 0.006190f, 0.006096f, 0.005843f, 0.005440f, 0.004902f, 0.004247f, 0.003499f, 0.002682f, 0.001824f, 0.000955f, 0.000103f, -0.000705f, -0.001443f, -0.002088f, -0.002622f, -0.003029f, -0.003302f, -0.003435f, -0.003429f, -0.003292f, -0.003032f, -0.002666f, -0.002213f, + -0.001695f, -0.001134f, -0.000556f, 0.000015f, 0.000554f, 0.001039f, 0.001452f, 0.001777f, 0.002000f, 0.002116f, 0.002120f, 0.002014f, 0.001806f, 0.001504f, 0.001123f, 0.000681f, 0.000196f, -0.000310f, -0.000816f, -0.001299f, -0.001741f, -0.002123f, -0.002428f, -0.002646f, -0.002766f, -0.002786f, -0.002704f, -0.002524f, -0.002255f, -0.001909f, -0.001499f, -0.001043f, -0.000561f, -0.000072f, 0.000403f, 0.000846f, 0.001238f, 0.001564f, 0.001811f, 0.001970f, 0.002035f, 0.002005f, 0.001881f, 0.001672f, 0.001386f, 0.001037f, 0.000642f, 0.000217f, -0.001771f, -0.006509f, 0.021218f, -0.038823f, -0.011955f, 0.006621f, -0.022612f, -0.091329f, 0.050131f, 0.231275f, 0.216905f, 0.058289f, -0.170730f, 0.265267f, 0.272061f, 0.108026f, -0.098152f, -0.093782f, -0.191434f, 0.041068f, 0.077779f, 0.153635f, 0.115409f, 0.000412f, -0.091943f, -0.012296f, 0.033729f, -0.008604f, 0.021260f, -0.062307f, 0.115324f, 0.113905f, 0.093298f, -0.017337f, -0.112194f, -0.159297f, -0.075821f, 0.053020f, 0.117890f, 0.118754f, 0.040959f, -0.045215f, -0.040676f, -0.088463f, -0.062670f, -0.000527f, -0.003547f, 0.037605f, + -0.048673f, 0.027213f, 0.042369f, 0.001320f, -0.030588f, -0.064022f, -0.062636f, 0.020981f, 0.124786f, 0.158579f, 0.031542f, -0.138539f, -0.178898f, -0.174371f, -0.050201f, 0.125858f, 0.166937f, 0.095657f, -0.065029f, -0.187046f, -0.105766f, 0.076904f, 0.222051f, 0.114834f, -0.090380f, -0.301362f, -0.214266f, 0.032387f, 0.318904f, 0.313672f, 0.105259f, -0.239403f, -0.380528f, -0.301328f, -0.009186f, 0.307860f, 0.362465f, 0.142829f, -0.125570f, -0.338388f, -0.275916f, -0.027072f, 0.226341f, 0.279907f, 0.133181f, -0.048681f, -0.163439f, -0.178024f, -0.037065f, 0.068988f, 0.155843f, 0.101329f, -0.013498f, -0.095146f, -0.105885f, -0.112835f, -0.080862f, 0.011656f, 0.137496f, 0.173189f, 0.102717f, -0.040418f, -0.178866f, -0.172001f, -0.085014f, 0.094635f, 0.149504f, 0.179765f, 0.058294f, -0.115007f, -0.196490f, -0.164638f, 0.021371f, 0.081504f, 0.111317f, 0.091809f, 0.009121f, -0.059923f, -0.110283f, -0.101207f, -0.044888f, 0.048637f, 0.090221f, 0.082468f, 0.012110f, -0.067582f, -0.120570f, -0.062062f, 0.046498f, 0.069486f, 0.067465f, 0.012578f, -0.021644f, -0.029169f, -0.000807f, 0.027809f, + 0.023619f, -0.010232f, -0.035235f, -0.068464f, -0.045281f, 0.016621f, 0.036291f, 0.053031f, 0.035968f, -0.007885f, -0.080731f, -0.071418f, -0.014221f, 0.050538f, 0.070548f, 0.051202f, -0.049188f, -0.087715f, -0.035265f, 0.020442f, 0.077010f, 0.066420f, 0.037202f, -0.007388f, -0.055334f, -0.066451f, -0.030671f, 0.050953f, 0.069560f, 0.017126f, -0.021652f, -0.078683f, -0.039305f, 0.003748f, 0.034086f, 0.112302f, 0.082916f, -0.042044f, -0.124954f, -0.099556f, 0.027331f, 0.122032f, 0.101599f, -0.023147f, -0.113462f, -0.092581f, 0.020670f, 0.105113f, 0.079967f, -0.029626f, -0.096065f, -0.059540f, 0.044136f, 0.081574f, 0.027577f, -0.058395f, -0.048951f, 0.026629f, 0.040829f, -0.012841f, -0.015365f, 0.001796f, 0.004625f, -0.003680f, 0.001891f, 0.001369f, 0.003418f, -0.003678f, -0.000207f, -0.002016f, 0.001498f, -0.001351f, 0.001518f, -0.002317f, 0.002310f, 0.000464f, 0.001450f, -0.002586f, 0.001277f, -0.001014f, 0.002699f, -0.001753f, 0.002854f, -0.001710f, 0.000280f, -0.001913f, 0.001334f, -0.000786f, -0.000541f, -0.002219f, 0.002868f, 0.000858f, 0.001782f, -0.001423f, 0.000322f, -0.002513f}, + {0.000465f, 0.001404f, 0.002369f, 0.003376f, 0.004436f, 0.005561f, 0.006755f, 0.008017f, 0.009344f, 0.010725f, 0.012145f, 0.013583f, 0.015015f, 0.016415f, 0.017751f, 0.018992f, 0.020108f, 0.021068f, 0.021845f, 0.022413f, 0.022755f, 0.022856f, 0.022709f, 0.022314f, 0.021677f, 0.020814f, 0.019744f, 0.018496f, 0.017103f, 0.015602f, 0.014037f, 0.012450f, 0.010886f, 0.009389f, 0.008001f, 0.006759f, 0.005696f, 0.004839f, 0.004207f, 0.003813f, 0.003660f, 0.003742f, 0.004047f, 0.004552f, 0.005231f, 0.006048f, 0.006964f, 0.007936f, 0.008918f, 0.009866f, 0.010735f, 0.011484f, 0.012075f, 0.012477f, 0.012666f, 0.012624f, 0.012343f, 0.011823f, 0.011072f, 0.010110f, 0.008959f, 0.007654f, 0.006231f, 0.004734f, 0.003209f, 0.001703f, 0.000262f, -0.001067f, -0.002243f, -0.003228f, -0.003993f, -0.004514f, -0.004775f, -0.004770f, -0.004501f, -0.003977f, -0.003219f, -0.002253f, -0.001113f, 0.000163f, 0.001532f, 0.002948f, 0.004365f, 0.005736f, 0.007019f, 0.008174f, 0.009165f, 0.009964f, 0.010550f, 0.010909f, 0.011035f, 0.010933f, 0.010612f, 0.010091f, 0.009396f, 0.008557f, + 0.007610f, 0.006595f, 0.005550f, 0.004518f, 0.003538f, 0.002646f, 0.001875f, 0.001254f, 0.000804f, 0.000539f, 0.000468f, 0.000591f, 0.000900f, 0.001382f, 0.002016f, 0.002776f, 0.003634f, 0.004554f, 0.005503f, 0.006443f, 0.007341f, 0.008162f, 0.008878f, 0.009463f, 0.009896f, 0.010164f, 0.010259f, 0.010179f, 0.009929f, 0.009520f, 0.008970f, 0.008299f, 0.007535f, 0.006704f, 0.005838f, 0.004967f, 0.004121f, 0.003328f, 0.002614f, 0.002000f, 0.001501f, 0.001130f, 0.000892f, 0.000788f, 0.000810f, 0.000948f, 0.001186f, 0.001503f, 0.001875f, 0.002277f, 0.002682f, 0.003063f, 0.003393f, 0.003648f, 0.003808f, 0.003856f, 0.003779f, 0.003570f, 0.003229f, 0.002759f, 0.002169f, 0.001474f, 0.000694f, -0.000148f, -0.001028f, -0.001916f, -0.002785f, -0.003605f, -0.004349f, -0.004992f, -0.005513f, -0.005894f, -0.006122f, -0.006190f, -0.006096f, -0.005843f, -0.005440f, -0.004902f, -0.004247f, -0.003499f, -0.002682f, -0.001824f, -0.000955f, -0.000103f, 0.000705f, 0.001443f, 0.002088f, 0.002622f, 0.003029f, 0.003302f, 0.003435f, 0.003429f, 0.003292f, 0.003032f, 0.002666f, 0.002213f, + 0.001695f, 0.001134f, 0.000556f, -0.000015f, -0.000554f, -0.001039f, -0.001452f, -0.001777f, -0.002000f, -0.002116f, -0.002120f, -0.002014f, -0.001806f, -0.001504f, -0.001123f, -0.000681f, -0.000196f, 0.000310f, 0.000816f, 0.001299f, 0.001741f, 0.002123f, 0.002428f, 0.002646f, 0.002766f, 0.002786f, 0.002704f, 0.002524f, 0.002255f, 0.001909f, 0.001499f, 0.001043f, 0.000561f, 0.000072f, -0.000403f, -0.000846f, -0.001238f, -0.001564f, -0.001811f, -0.001970f, -0.002035f, -0.002005f, -0.001881f, -0.001672f, -0.001386f, -0.001037f, -0.000642f, -0.000217f, 0.001771f, 0.006509f, -0.021218f, 0.038823f, 0.011955f, -0.006621f, 0.022612f, 0.091329f, -0.050131f, -0.231275f, -0.216905f, -0.058289f, 0.170730f, -0.265267f, -0.272061f, -0.108026f, 0.098152f, 0.093782f, 0.191434f, -0.041068f, -0.077779f, -0.153635f, -0.115409f, -0.000412f, 0.091943f, 0.012296f, -0.033729f, 0.008604f, -0.021260f, 0.062307f, -0.115324f, -0.113905f, -0.093298f, 0.017337f, 0.112194f, 0.159297f, 0.075821f, -0.053020f, -0.117890f, -0.118754f, -0.040959f, 0.045215f, 0.040676f, 0.088463f, 0.062670f, 0.000527f, 0.003547f, -0.037605f, + 0.048673f, -0.027213f, -0.042369f, -0.001320f, 0.030588f, 0.064022f, 0.062636f, -0.020981f, -0.124786f, -0.158579f, -0.031542f, 0.138539f, 0.178898f, 0.174371f, 0.050201f, -0.125858f, -0.166937f, -0.095657f, 0.065029f, 0.187046f, 0.105766f, -0.076904f, -0.222051f, -0.114834f, 0.090380f, 0.301362f, 0.214266f, -0.032387f, -0.318904f, -0.313672f, -0.105259f, 0.239403f, 0.380528f, 0.301328f, 0.009186f, -0.307860f, -0.362465f, -0.142829f, 0.125570f, 0.338388f, 0.275916f, 0.027072f, -0.226341f, -0.279907f, -0.133181f, 0.048681f, 0.163439f, 0.178024f, 0.037065f, -0.068988f, -0.155843f, -0.101329f, 0.013498f, 0.095146f, 0.105885f, 0.112835f, 0.080862f, -0.011656f, -0.137496f, -0.173189f, -0.102717f, 0.040418f, 0.178866f, 0.172001f, 0.085014f, -0.094635f, -0.149504f, -0.179765f, -0.058294f, 0.115007f, 0.196490f, 0.164638f, -0.021371f, -0.081504f, -0.111317f, -0.091809f, -0.009121f, 0.059923f, 0.110283f, 0.101207f, 0.044888f, -0.048637f, -0.090221f, -0.082468f, -0.012110f, 0.067582f, 0.120570f, 0.062062f, -0.046498f, -0.069486f, -0.067465f, -0.012578f, 0.021644f, 0.029169f, 0.000807f, -0.027809f, + -0.023619f, 0.010232f, 0.035235f, 0.068464f, 0.045281f, -0.016621f, -0.036291f, -0.053031f, -0.035968f, 0.007885f, 0.080731f, 0.071418f, 0.014221f, -0.050538f, -0.070548f, -0.051202f, 0.049188f, 0.087715f, 0.035265f, -0.020442f, -0.077010f, -0.066420f, -0.037202f, 0.007388f, 0.055334f, 0.066451f, 0.030671f, -0.050953f, -0.069560f, -0.017126f, 0.021652f, 0.078683f, 0.039305f, -0.003748f, -0.034086f, -0.112302f, -0.082916f, 0.042044f, 0.124954f, 0.099556f, -0.027331f, -0.122032f, -0.101599f, 0.023147f, 0.113462f, 0.092581f, -0.020670f, -0.105113f, -0.079967f, 0.029626f, 0.096065f, 0.059540f, -0.044136f, -0.081574f, -0.027577f, 0.058395f, 0.048951f, -0.026629f, -0.040829f, 0.012841f, 0.015365f, -0.001796f, -0.004625f, 0.003680f, -0.001891f, -0.001369f, -0.003418f, 0.003678f, 0.000207f, 0.002016f, -0.001498f, 0.001351f, -0.001518f, 0.002317f, -0.002310f, -0.000464f, -0.001450f, 0.002586f, -0.001277f, 0.001014f, -0.002699f, 0.001753f, -0.002854f, 0.001710f, -0.000280f, 0.001913f, -0.001334f, 0.000786f, 0.000541f, 0.002219f, -0.002868f, -0.000858f, -0.001782f, 0.001423f, -0.000322f, 0.002513f} + }, + { + {0.000351f, 0.001011f, 0.001545f, 0.001875f, 0.001932f, 0.001659f, 0.001012f, -0.000033f, -0.001487f, -0.003338f, -0.005558f, -0.008100f, -0.010904f, -0.013893f, -0.016979f, -0.020069f, -0.023061f, -0.025858f, -0.028363f, -0.030486f, -0.032151f, -0.033292f, -0.033863f, -0.033835f, -0.033202f, -0.031977f, -0.030196f, -0.027913f, -0.025203f, -0.022158f, -0.018881f, -0.015488f, -0.012100f, -0.008840f, -0.005830f, -0.003184f, -0.001006f, 0.000613f, 0.001602f, 0.001907f, 0.001499f, 0.000373f, -0.001454f, -0.003940f, -0.007021f, -0.010610f, -0.014606f, -0.018889f, -0.023331f, -0.027797f, -0.032147f, -0.036248f, -0.039969f, -0.043192f, -0.045815f, -0.047752f, -0.048938f, -0.049333f, -0.048920f, -0.047705f, -0.045721f, -0.043022f, -0.039685f, -0.035803f, -0.031487f, -0.026859f, -0.022046f, -0.017180f, -0.012393f, -0.007810f, -0.003547f, 0.000292f, 0.003620f, 0.006370f, 0.008492f, 0.009960f, 0.010770f, 0.010938f, 0.010503f, 0.009520f, 0.008062f, 0.006214f, 0.004073f, 0.001741f, -0.000678f, -0.003079f, -0.005364f, -0.007440f, -0.009229f, -0.010664f, -0.011694f, -0.012284f, -0.012420f, -0.012102f, -0.011349f, -0.010196f, + -0.008692f, -0.006898f, -0.004886f, -0.002731f, -0.000515f, 0.001682f, 0.003781f, 0.005709f, 0.007403f, 0.008808f, 0.009882f, 0.010597f, 0.010939f, 0.010907f, 0.010517f, 0.009795f, 0.008781f, 0.007523f, 0.006079f, 0.004510f, 0.002881f, 0.001259f, -0.000294f, -0.001719f, -0.002965f, -0.003988f, -0.004756f, -0.005248f, -0.005452f, -0.005372f, -0.005020f, -0.004421f, -0.003609f, -0.002625f, -0.001517f, -0.000336f, 0.000863f, 0.002027f, 0.003105f, 0.004050f, 0.004821f, 0.005386f, 0.005721f, 0.005810f, 0.005649f, 0.005244f, 0.004608f, 0.003765f, 0.002746f, 0.001588f, 0.000331f, -0.000980f, -0.002301f, -0.003588f, -0.004801f, -0.005903f, -0.006865f, -0.007662f, -0.008280f, -0.008711f, -0.008955f, -0.009022f, -0.008930f, -0.008699f, -0.008361f, -0.007945f, -0.007489f, -0.007026f, -0.006592f, -0.006220f, -0.005936f, -0.005763f, -0.005719f, -0.005812f, -0.006044f, -0.006408f, -0.006890f, -0.007470f, -0.008121f, -0.008811f, -0.009505f, -0.010165f, -0.010753f, -0.011232f, -0.011568f, -0.011733f, -0.011702f, -0.011459f, -0.010995f, -0.010310f, -0.009413f, -0.008318f, -0.007052f, -0.005647f, -0.004140f, -0.002574f, + -0.000995f, 0.000550f, 0.002013f, 0.003350f, 0.004519f, 0.005485f, 0.006220f, 0.006702f, 0.006920f, 0.006871f, 0.006562f, 0.006009f, 0.005237f, 0.004279f, 0.003174f, 0.001966f, 0.000702f, -0.000568f, -0.001795f, -0.002932f, -0.003936f, -0.004770f, -0.005403f, -0.005812f, -0.005985f, -0.005916f, -0.005611f, -0.005085f, -0.004360f, -0.003467f, -0.002444f, -0.001332f, -0.000177f, 0.000974f, 0.002075f, 0.003082f, 0.003955f, 0.004659f, 0.005166f, 0.005457f, 0.005521f, 0.005356f, 0.004970f, 0.004378f, 0.003607f, 0.002688f, 0.001658f, 0.000560f, 0.001365f, -0.005282f, 0.091386f, 0.027096f, -0.110470f, -0.072853f, -0.047053f, -0.060849f, 0.019689f, 0.179100f, 0.180847f, 0.052269f, -0.078928f, 0.202594f, 0.182531f, 0.087056f, 0.204108f, 0.200376f, 0.111086f, -0.098967f, -0.003997f, 0.037594f, 0.006320f, 0.130559f, 0.198318f, 0.306011f, 0.137971f, -0.168854f, -0.168012f, -0.202469f, -0.028656f, 0.059362f, 0.277224f, 0.354088f, -0.072346f, -0.351328f, -0.377967f, -0.122179f, 0.080254f, 0.468769f, 0.159139f, -0.071262f, -0.114378f, -0.217912f, -0.030676f, 0.193918f, 0.235601f, -0.074225f, + -0.515604f, -0.464563f, -0.047118f, 0.323559f, 0.559021f, 0.307643f, -0.066844f, -0.469425f, -0.435315f, -0.253431f, 0.245073f, 0.044140f, 0.250680f, 0.056655f, -0.264860f, -0.252830f, 0.108479f, -0.098469f, -0.316136f, -0.153824f, 0.050116f, 0.266847f, 0.233378f, 0.153505f, 0.013379f, -0.016834f, -0.179006f, -0.104367f, -0.135727f, 0.001192f, 0.165036f, 0.202483f, 0.030499f, -0.143798f, -0.194432f, 0.118753f, 0.340240f, 0.354315f, -0.026860f, -0.389394f, -0.510589f, -0.197218f, 0.271761f, 0.631820f, 0.425170f, -0.058408f, -0.484943f, -0.476308f, -0.263813f, 0.177632f, 0.410086f, 0.219180f, 0.010928f, -0.226147f, -0.235120f, -0.102069f, 0.152772f, 0.293250f, 0.231404f, -0.031223f, -0.254637f, -0.322474f, -0.160527f, 0.057017f, 0.248437f, 0.294002f, 0.228441f, -0.081658f, -0.331972f, -0.349940f, -0.117661f, 0.271573f, 0.421057f, 0.257790f, 0.016894f, -0.327288f, -0.407511f, -0.211055f, 0.144184f, 0.365284f, 0.381074f, 0.127687f, -0.233440f, -0.455060f, -0.340202f, 0.005594f, 0.347046f, 0.479449f, 0.269346f, -0.124816f, -0.469715f, -0.425124f, -0.091510f, 0.310163f, 0.488578f, 0.338187f, + -0.048840f, -0.409422f, -0.465075f, -0.172028f, 0.226861f, 0.462260f, 0.345374f, 0.015127f, -0.324667f, -0.362308f, -0.137012f, 0.203355f, 0.345099f, 0.251686f, -0.032658f, -0.306335f, -0.272934f, -0.081282f, 0.159200f, 0.275533f, 0.181888f, -0.065405f, -0.261459f, -0.271706f, -0.062225f, 0.187779f, 0.293385f, 0.144842f, -0.073625f, -0.262863f, -0.225519f, -0.024463f, 0.184510f, 0.178295f, 0.124958f, -0.226115f, -0.448434f, -0.171999f, 0.191953f, 0.423991f, 0.259954f, -0.078384f, -0.350027f, -0.275698f, 0.018586f, 0.296410f, 0.273919f, 0.024354f, -0.241972f, -0.234854f, -0.008607f, 0.211595f, 0.180961f, -0.024704f, -0.177770f, -0.092307f, 0.083111f, 0.115066f, -0.020591f, -0.057406f, -0.000249f, 0.020003f, -0.000291f, 0.001135f, -0.001590f, 0.003310f, -0.000324f, 0.003949f, -0.001306f, 0.002062f, -0.001281f, 0.001886f, -0.000542f, 0.003265f, -0.001631f, 0.002411f, -0.002831f, 0.003455f, -0.000559f, 0.003497f, -0.003104f, 0.002614f, 0.000646f, 0.002225f, -0.001745f, 0.002795f, -0.001764f, 0.002432f, -0.000396f, 0.000214f, -0.002129f, 0.003695f, -0.000641f, 0.001720f, -0.002786f, 0.000426f}, + {0.000351f, 0.001011f, 0.001545f, 0.001875f, 0.001932f, 0.001659f, 0.001012f, -0.000033f, -0.001487f, -0.003338f, -0.005558f, -0.008100f, -0.010904f, -0.013893f, -0.016979f, -0.020069f, -0.023061f, -0.025858f, -0.028363f, -0.030486f, -0.032151f, -0.033292f, -0.033863f, -0.033835f, -0.033202f, -0.031977f, -0.030196f, -0.027913f, -0.025203f, -0.022158f, -0.018881f, -0.015488f, -0.012100f, -0.008840f, -0.005830f, -0.003184f, -0.001006f, 0.000613f, 0.001602f, 0.001907f, 0.001499f, 0.000373f, -0.001454f, -0.003940f, -0.007021f, -0.010610f, -0.014606f, -0.018889f, -0.023331f, -0.027797f, -0.032147f, -0.036248f, -0.039969f, -0.043192f, -0.045815f, -0.047752f, -0.048938f, -0.049333f, -0.048920f, -0.047705f, -0.045721f, -0.043022f, -0.039685f, -0.035803f, -0.031487f, -0.026859f, -0.022046f, -0.017180f, -0.012393f, -0.007810f, -0.003547f, 0.000292f, 0.003620f, 0.006370f, 0.008492f, 0.009960f, 0.010770f, 0.010938f, 0.010503f, 0.009520f, 0.008062f, 0.006214f, 0.004073f, 0.001741f, -0.000678f, -0.003079f, -0.005364f, -0.007440f, -0.009229f, -0.010664f, -0.011694f, -0.012284f, -0.012420f, -0.012102f, -0.011349f, -0.010196f, + -0.008692f, -0.006898f, -0.004886f, -0.002731f, -0.000515f, 0.001682f, 0.003781f, 0.005709f, 0.007403f, 0.008808f, 0.009882f, 0.010597f, 0.010939f, 0.010907f, 0.010517f, 0.009795f, 0.008781f, 0.007523f, 0.006079f, 0.004510f, 0.002881f, 0.001259f, -0.000294f, -0.001719f, -0.002965f, -0.003988f, -0.004756f, -0.005248f, -0.005452f, -0.005372f, -0.005020f, -0.004421f, -0.003609f, -0.002625f, -0.001517f, -0.000336f, 0.000863f, 0.002027f, 0.003105f, 0.004050f, 0.004821f, 0.005386f, 0.005721f, 0.005810f, 0.005649f, 0.005244f, 0.004608f, 0.003765f, 0.002746f, 0.001588f, 0.000331f, -0.000980f, -0.002301f, -0.003588f, -0.004801f, -0.005903f, -0.006865f, -0.007662f, -0.008280f, -0.008711f, -0.008955f, -0.009022f, -0.008930f, -0.008699f, -0.008361f, -0.007945f, -0.007489f, -0.007026f, -0.006592f, -0.006220f, -0.005936f, -0.005763f, -0.005719f, -0.005812f, -0.006044f, -0.006408f, -0.006890f, -0.007470f, -0.008121f, -0.008811f, -0.009505f, -0.010165f, -0.010753f, -0.011232f, -0.011568f, -0.011733f, -0.011702f, -0.011459f, -0.010995f, -0.010310f, -0.009413f, -0.008318f, -0.007052f, -0.005647f, -0.004140f, -0.002574f, + -0.000995f, 0.000550f, 0.002013f, 0.003350f, 0.004519f, 0.005485f, 0.006220f, 0.006702f, 0.006920f, 0.006871f, 0.006562f, 0.006009f, 0.005237f, 0.004279f, 0.003174f, 0.001966f, 0.000702f, -0.000568f, -0.001795f, -0.002932f, -0.003936f, -0.004770f, -0.005403f, -0.005812f, -0.005985f, -0.005916f, -0.005611f, -0.005085f, -0.004360f, -0.003467f, -0.002444f, -0.001332f, -0.000177f, 0.000974f, 0.002075f, 0.003082f, 0.003955f, 0.004659f, 0.005166f, 0.005457f, 0.005521f, 0.005356f, 0.004970f, 0.004378f, 0.003607f, 0.002688f, 0.001658f, 0.000560f, 0.001365f, -0.005282f, 0.091386f, 0.027096f, -0.110470f, -0.072853f, -0.047053f, -0.060849f, 0.019689f, 0.179100f, 0.180847f, 0.052269f, -0.078928f, 0.202594f, 0.182531f, 0.087056f, 0.204108f, 0.200376f, 0.111086f, -0.098967f, -0.003997f, 0.037594f, 0.006320f, 0.130559f, 0.198318f, 0.306011f, 0.137971f, -0.168854f, -0.168012f, -0.202469f, -0.028656f, 0.059362f, 0.277224f, 0.354088f, -0.072346f, -0.351328f, -0.377967f, -0.122179f, 0.080254f, 0.468769f, 0.159139f, -0.071262f, -0.114378f, -0.217912f, -0.030676f, 0.193918f, 0.235601f, -0.074225f, + -0.515604f, -0.464563f, -0.047118f, 0.323559f, 0.559021f, 0.307643f, -0.066844f, -0.469425f, -0.435315f, -0.253431f, 0.245073f, 0.044140f, 0.250680f, 0.056655f, -0.264860f, -0.252830f, 0.108479f, -0.098469f, -0.316136f, -0.153824f, 0.050116f, 0.266847f, 0.233378f, 0.153505f, 0.013379f, -0.016834f, -0.179006f, -0.104367f, -0.135727f, 0.001192f, 0.165036f, 0.202483f, 0.030499f, -0.143798f, -0.194432f, 0.118753f, 0.340240f, 0.354315f, -0.026860f, -0.389394f, -0.510589f, -0.197218f, 0.271761f, 0.631820f, 0.425170f, -0.058408f, -0.484943f, -0.476308f, -0.263813f, 0.177632f, 0.410086f, 0.219180f, 0.010928f, -0.226147f, -0.235120f, -0.102069f, 0.152772f, 0.293250f, 0.231404f, -0.031223f, -0.254637f, -0.322474f, -0.160527f, 0.057017f, 0.248437f, 0.294002f, 0.228441f, -0.081658f, -0.331972f, -0.349940f, -0.117661f, 0.271573f, 0.421057f, 0.257790f, 0.016894f, -0.327288f, -0.407511f, -0.211055f, 0.144184f, 0.365284f, 0.381074f, 0.127687f, -0.233440f, -0.455060f, -0.340202f, 0.005594f, 0.347046f, 0.479449f, 0.269346f, -0.124816f, -0.469715f, -0.425124f, -0.091510f, 0.310163f, 0.488578f, 0.338187f, + -0.048840f, -0.409422f, -0.465075f, -0.172028f, 0.226861f, 0.462260f, 0.345374f, 0.015127f, -0.324667f, -0.362308f, -0.137012f, 0.203355f, 0.345099f, 0.251686f, -0.032658f, -0.306335f, -0.272934f, -0.081282f, 0.159200f, 0.275533f, 0.181888f, -0.065405f, -0.261459f, -0.271706f, -0.062225f, 0.187779f, 0.293385f, 0.144842f, -0.073625f, -0.262863f, -0.225519f, -0.024463f, 0.184510f, 0.178295f, 0.124958f, -0.226115f, -0.448434f, -0.171999f, 0.191953f, 0.423991f, 0.259954f, -0.078384f, -0.350027f, -0.275698f, 0.018586f, 0.296410f, 0.273919f, 0.024354f, -0.241972f, -0.234854f, -0.008607f, 0.211595f, 0.180961f, -0.024704f, -0.177770f, -0.092307f, 0.083111f, 0.115066f, -0.020591f, -0.057406f, -0.000249f, 0.020003f, -0.000291f, 0.001135f, -0.001590f, 0.003310f, -0.000324f, 0.003949f, -0.001306f, 0.002062f, -0.001281f, 0.001886f, -0.000542f, 0.003265f, -0.001631f, 0.002411f, -0.002831f, 0.003455f, -0.000559f, 0.003497f, -0.003104f, 0.002614f, 0.000646f, 0.002225f, -0.001745f, 0.002795f, -0.001764f, 0.002432f, -0.000396f, 0.000214f, -0.002129f, 0.003695f, -0.000641f, 0.001720f, -0.002786f, 0.000426f} + }, + { + {-0.002431f, -0.007230f, -0.011846f, -0.016163f, -0.020075f, -0.023489f, -0.026328f, -0.028532f, -0.030062f, -0.030900f, -0.031050f, -0.030535f, -0.029400f, -0.027708f, -0.025538f, -0.022979f, -0.020135f, -0.017113f, -0.014022f, -0.010971f, -0.008064f, -0.005397f, -0.003053f, -0.001100f, 0.000408f, 0.001437f, 0.001971f, 0.002014f, 0.001588f, 0.000734f, -0.000493f, -0.002024f, -0.003777f, -0.005666f, -0.007596f, -0.009476f, -0.011214f, -0.012724f, -0.013931f, -0.014771f, -0.015193f, -0.015163f, -0.014664f, -0.013695f, -0.012275f, -0.010438f, -0.008235f, -0.005728f, -0.002995f, -0.000117f, 0.002813f, 0.005705f, 0.008466f, 0.011009f, 0.013252f, 0.015123f, 0.016564f, 0.017529f, 0.017987f, 0.017924f, 0.017342f, 0.016259f, 0.014711f, 0.012743f, 0.010417f, 0.007803f, 0.004976f, 0.002021f, -0.000980f, -0.003945f, -0.006793f, -0.009453f, -0.011861f, -0.013964f, -0.015721f, -0.017104f, -0.018099f, -0.018706f, -0.018937f, -0.018819f, -0.018387f, -0.017687f, -0.016771f, -0.015698f, -0.014527f, -0.013319f, -0.012131f, -0.011018f, -0.010028f, -0.009198f, -0.008560f, -0.008133f, -0.007926f, -0.007937f, -0.008154f, -0.008554f, + -0.009107f, -0.009775f, -0.010516f, -0.011281f, -0.012025f, -0.012699f, -0.013258f, -0.013664f, -0.013882f, -0.013885f, -0.013656f, -0.013188f, -0.012481f, -0.011546f, -0.010405f, -0.009086f, -0.007625f, -0.006066f, -0.004454f, -0.002839f, -0.001270f, 0.000203f, 0.001535f, 0.002685f, 0.003619f, 0.004308f, 0.004735f, 0.004889f, 0.004771f, 0.004389f, 0.003761f, 0.002914f, 0.001880f, 0.000698f, -0.000588f, -0.001932f, -0.003288f, -0.004610f, -0.005853f, -0.006978f, -0.007951f, -0.008744f, -0.009336f, -0.009715f, -0.009876f, -0.009823f, -0.009567f, -0.009128f, -0.008529f, -0.007799f, -0.006974f, -0.006086f, -0.005174f, -0.004272f, -0.003414f, -0.002628f, -0.001941f, -0.001371f, -0.000933f, -0.000631f, -0.000467f, -0.000433f, -0.000517f, -0.000699f, -0.000958f, -0.001266f, -0.001594f, -0.001914f, -0.002196f, -0.002413f, -0.002540f, -0.002557f, -0.002450f, -0.002208f, -0.001827f, -0.001312f, -0.000671f, 0.000079f, 0.000920f, 0.001824f, 0.002763f, 0.003706f, 0.004620f, 0.005473f, 0.006233f, 0.006873f, 0.007367f, 0.007696f, 0.007847f, 0.007811f, 0.007587f, 0.007181f, 0.006606f, 0.005878f, 0.005023f, 0.004067f, + 0.003043f, 0.001984f, 0.000926f, -0.000098f, -0.001055f, -0.001913f, -0.002648f, -0.003238f, -0.003668f, -0.003928f, -0.004016f, -0.003935f, -0.003696f, -0.003313f, -0.002809f, -0.002209f, -0.001541f, -0.000835f, -0.000123f, 0.000563f, 0.001196f, 0.001749f, 0.002198f, 0.002527f, 0.002723f, 0.002779f, 0.002695f, 0.002476f, 0.002133f, 0.001683f, 0.001146f, 0.000546f, -0.000089f, -0.000732f, -0.001354f, -0.001929f, -0.002430f, -0.002836f, -0.003130f, -0.003297f, -0.003331f, -0.003229f, -0.002996f, -0.002639f, -0.002175f, -0.001620f, -0.001000f, -0.000338f, -0.018290f, -0.062542f, 0.075373f, 0.023942f, -0.043869f, -0.192620f, -0.125258f, 0.151248f, 0.025188f, 0.252837f, 0.330054f, 0.289273f, 0.019560f, 0.027911f, 0.021279f, 0.080888f, -0.016728f, -0.037625f, 0.082546f, -0.021887f, 0.015778f, -0.008822f, -0.010483f, -0.001995f, -0.001428f, -0.021831f, 0.015079f, 0.012810f, -0.034509f, -0.033014f, 0.031136f, 0.059442f, 0.050913f, 0.004466f, 0.051857f, 0.078859f, 0.120192f, -0.015399f, -0.108147f, -0.094294f, 0.046426f, 0.262133f, 0.079013f, -0.001468f, -0.210725f, -0.235095f, -0.104065f, 0.105383f, + 0.215871f, 0.245890f, 0.063137f, -0.094421f, -0.246703f, -0.137069f, -0.002323f, 0.198470f, 0.210950f, 0.182676f, -0.069049f, 0.003720f, -0.182436f, -0.097736f, 0.145036f, 0.243565f, 0.045020f, 0.222209f, 0.277898f, -0.033674f, -0.277553f, -0.438511f, -0.182238f, 0.138761f, 0.347199f, 0.116233f, -0.089010f, -0.345756f, -0.215789f, -0.056986f, 0.155095f, 0.380138f, 0.258245f, -0.011012f, -0.261045f, -0.300396f, -0.131265f, 0.144730f, 0.224700f, 0.088212f, -0.110429f, -0.191985f, -0.100833f, 0.068341f, 0.174078f, 0.092212f, -0.046042f, -0.089726f, -0.082558f, 0.053932f, 0.209877f, 0.224859f, 0.062561f, -0.248984f, -0.397906f, -0.249788f, 0.149703f, 0.422700f, 0.454342f, 0.129361f, -0.262008f, -0.568459f, -0.523737f, -0.060849f, 0.446629f, 0.537808f, 0.189092f, -0.301296f, -0.429567f, -0.206890f, 0.150223f, 0.422084f, 0.238417f, 0.070144f, -0.187961f, -0.253082f, -0.085001f, 0.047626f, 0.184962f, 0.118252f, -0.017623f, -0.111506f, -0.092764f, -0.032066f, 0.088418f, 0.108586f, 0.046415f, -0.070387f, -0.099868f, -0.069341f, 0.047191f, 0.104158f, 0.095540f, 0.005518f, -0.089450f, -0.148444f, + -0.055762f, 0.065694f, 0.163000f, 0.133901f, 0.035208f, -0.117751f, -0.205851f, -0.144787f, 0.002520f, 0.129263f, 0.208158f, 0.130617f, -0.038862f, -0.176770f, -0.182205f, -0.062025f, 0.102914f, 0.194411f, 0.164397f, 0.004247f, -0.132913f, -0.191209f, -0.100734f, 0.103360f, 0.206840f, 0.161036f, 0.006662f, -0.133314f, -0.164263f, -0.103104f, 0.072983f, 0.163216f, 0.116373f, -0.011197f, -0.164415f, -0.108598f, 0.159688f, 0.216945f, 0.128949f, -0.106626f, -0.222040f, -0.161871f, 0.069665f, 0.219679f, 0.180035f, -0.048692f, -0.211565f, -0.174812f, 0.054405f, 0.204882f, 0.143031f, -0.084741f, -0.191758f, -0.077955f, 0.131194f, 0.141344f, -0.034264f, -0.132219f, 0.006956f, 0.067337f, 0.001168f, -0.024976f, 0.005599f, 0.000442f, 0.003906f, -0.003997f, 0.004107f, -0.002965f, 0.005384f, -0.003211f, 0.004713f, -0.005429f, 0.003167f, -0.003119f, 0.003858f, -0.003361f, 0.003274f, -0.004298f, 0.003072f, -0.003647f, 0.003571f, -0.001956f, 0.005858f, -0.003621f, 0.000852f, -0.003328f, 0.003440f, -0.000548f, 0.001963f, -0.003313f, 0.001772f, -0.002875f, 0.003917f, -0.002348f, 0.003217f, -0.002608f}, + {-0.002431f, -0.007230f, -0.011846f, -0.016163f, -0.020075f, -0.023489f, -0.026328f, -0.028532f, -0.030062f, -0.030900f, -0.031050f, -0.030535f, -0.029400f, -0.027708f, -0.025538f, -0.022979f, -0.020135f, -0.017113f, -0.014022f, -0.010971f, -0.008064f, -0.005397f, -0.003053f, -0.001100f, 0.000408f, 0.001437f, 0.001971f, 0.002014f, 0.001588f, 0.000734f, -0.000493f, -0.002024f, -0.003777f, -0.005666f, -0.007596f, -0.009476f, -0.011214f, -0.012724f, -0.013931f, -0.014771f, -0.015193f, -0.015163f, -0.014664f, -0.013695f, -0.012275f, -0.010438f, -0.008235f, -0.005728f, -0.002995f, -0.000117f, 0.002813f, 0.005705f, 0.008466f, 0.011009f, 0.013252f, 0.015123f, 0.016564f, 0.017529f, 0.017987f, 0.017924f, 0.017342f, 0.016259f, 0.014711f, 0.012743f, 0.010417f, 0.007803f, 0.004976f, 0.002021f, -0.000980f, -0.003945f, -0.006793f, -0.009453f, -0.011861f, -0.013964f, -0.015721f, -0.017104f, -0.018099f, -0.018706f, -0.018937f, -0.018819f, -0.018387f, -0.017687f, -0.016771f, -0.015698f, -0.014527f, -0.013319f, -0.012131f, -0.011018f, -0.010028f, -0.009198f, -0.008560f, -0.008133f, -0.007926f, -0.007937f, -0.008154f, -0.008554f, + -0.009107f, -0.009775f, -0.010516f, -0.011281f, -0.012025f, -0.012699f, -0.013258f, -0.013664f, -0.013882f, -0.013885f, -0.013656f, -0.013188f, -0.012481f, -0.011546f, -0.010405f, -0.009086f, -0.007625f, -0.006066f, -0.004454f, -0.002839f, -0.001270f, 0.000203f, 0.001535f, 0.002685f, 0.003619f, 0.004308f, 0.004735f, 0.004889f, 0.004771f, 0.004389f, 0.003761f, 0.002914f, 0.001880f, 0.000698f, -0.000588f, -0.001932f, -0.003288f, -0.004610f, -0.005853f, -0.006978f, -0.007951f, -0.008744f, -0.009336f, -0.009715f, -0.009876f, -0.009823f, -0.009567f, -0.009128f, -0.008529f, -0.007799f, -0.006974f, -0.006086f, -0.005174f, -0.004272f, -0.003414f, -0.002628f, -0.001941f, -0.001371f, -0.000933f, -0.000631f, -0.000467f, -0.000433f, -0.000517f, -0.000699f, -0.000958f, -0.001266f, -0.001594f, -0.001914f, -0.002196f, -0.002413f, -0.002540f, -0.002557f, -0.002450f, -0.002208f, -0.001827f, -0.001312f, -0.000671f, 0.000079f, 0.000920f, 0.001824f, 0.002763f, 0.003706f, 0.004620f, 0.005473f, 0.006233f, 0.006873f, 0.007367f, 0.007696f, 0.007847f, 0.007811f, 0.007587f, 0.007181f, 0.006606f, 0.005878f, 0.005023f, 0.004067f, + 0.003043f, 0.001984f, 0.000926f, -0.000098f, -0.001055f, -0.001913f, -0.002648f, -0.003238f, -0.003668f, -0.003928f, -0.004016f, -0.003935f, -0.003696f, -0.003313f, -0.002809f, -0.002209f, -0.001541f, -0.000835f, -0.000123f, 0.000563f, 0.001196f, 0.001749f, 0.002198f, 0.002527f, 0.002723f, 0.002779f, 0.002695f, 0.002476f, 0.002133f, 0.001683f, 0.001146f, 0.000546f, -0.000089f, -0.000732f, -0.001354f, -0.001929f, -0.002430f, -0.002836f, -0.003130f, -0.003297f, -0.003331f, -0.003229f, -0.002996f, -0.002639f, -0.002175f, -0.001620f, -0.001000f, -0.000338f, -0.018290f, -0.062542f, 0.075373f, 0.023942f, -0.043869f, -0.192620f, -0.125258f, 0.151248f, 0.025188f, 0.252837f, 0.330054f, 0.289273f, 0.019560f, 0.027911f, 0.021279f, 0.080888f, -0.016728f, -0.037625f, 0.082546f, -0.021887f, 0.015778f, -0.008822f, -0.010483f, -0.001995f, -0.001428f, -0.021831f, 0.015079f, 0.012810f, -0.034509f, -0.033014f, 0.031136f, 0.059442f, 0.050913f, 0.004466f, 0.051857f, 0.078859f, 0.120192f, -0.015399f, -0.108147f, -0.094294f, 0.046426f, 0.262133f, 0.079013f, -0.001468f, -0.210725f, -0.235095f, -0.104065f, 0.105383f, + 0.215871f, 0.245890f, 0.063137f, -0.094421f, -0.246703f, -0.137069f, -0.002323f, 0.198470f, 0.210950f, 0.182676f, -0.069049f, 0.003720f, -0.182436f, -0.097736f, 0.145036f, 0.243565f, 0.045020f, 0.222209f, 0.277898f, -0.033674f, -0.277553f, -0.438511f, -0.182238f, 0.138761f, 0.347199f, 0.116233f, -0.089010f, -0.345756f, -0.215789f, -0.056986f, 0.155095f, 0.380138f, 0.258245f, -0.011012f, -0.261045f, -0.300396f, -0.131265f, 0.144730f, 0.224700f, 0.088212f, -0.110429f, -0.191985f, -0.100833f, 0.068341f, 0.174078f, 0.092212f, -0.046042f, -0.089726f, -0.082558f, 0.053932f, 0.209877f, 0.224859f, 0.062561f, -0.248984f, -0.397906f, -0.249788f, 0.149703f, 0.422700f, 0.454342f, 0.129361f, -0.262008f, -0.568459f, -0.523737f, -0.060849f, 0.446629f, 0.537808f, 0.189092f, -0.301296f, -0.429567f, -0.206890f, 0.150223f, 0.422084f, 0.238417f, 0.070144f, -0.187961f, -0.253082f, -0.085001f, 0.047626f, 0.184962f, 0.118252f, -0.017623f, -0.111506f, -0.092764f, -0.032066f, 0.088418f, 0.108586f, 0.046415f, -0.070387f, -0.099868f, -0.069341f, 0.047191f, 0.104158f, 0.095540f, 0.005518f, -0.089450f, -0.148444f, + -0.055762f, 0.065694f, 0.163000f, 0.133901f, 0.035208f, -0.117751f, -0.205851f, -0.144787f, 0.002520f, 0.129263f, 0.208158f, 0.130617f, -0.038862f, -0.176770f, -0.182205f, -0.062025f, 0.102914f, 0.194411f, 0.164397f, 0.004247f, -0.132913f, -0.191209f, -0.100734f, 0.103360f, 0.206840f, 0.161036f, 0.006662f, -0.133314f, -0.164263f, -0.103104f, 0.072983f, 0.163216f, 0.116373f, -0.011197f, -0.164415f, -0.108598f, 0.159688f, 0.216945f, 0.128949f, -0.106626f, -0.222040f, -0.161871f, 0.069665f, 0.219679f, 0.180035f, -0.048692f, -0.211565f, -0.174812f, 0.054405f, 0.204882f, 0.143031f, -0.084741f, -0.191758f, -0.077955f, 0.131194f, 0.141344f, -0.034264f, -0.132219f, 0.006956f, 0.067337f, 0.001168f, -0.024976f, 0.005599f, 0.000442f, 0.003906f, -0.003997f, 0.004107f, -0.002965f, 0.005384f, -0.003211f, 0.004713f, -0.005429f, 0.003167f, -0.003119f, 0.003858f, -0.003361f, 0.003274f, -0.004298f, 0.003072f, -0.003647f, 0.003571f, -0.001956f, 0.005858f, -0.003621f, 0.000852f, -0.003328f, 0.003440f, -0.000548f, 0.001963f, -0.003313f, 0.001772f, -0.002875f, 0.003917f, -0.002348f, 0.003217f, -0.002608f} + }, + { + {-0.001645f, -0.004889f, -0.007994f, -0.010872f, -0.013441f, -0.015627f, -0.017366f, -0.018606f, -0.019309f, -0.019449f, -0.019017f, -0.018018f, -0.016473f, -0.014415f, -0.011894f, -0.008968f, -0.005708f, -0.002193f, 0.001492f, 0.005258f, 0.009013f, 0.012668f, 0.016133f, 0.019327f, 0.022174f, 0.024608f, 0.026572f, 0.028024f, 0.028931f, 0.029277f, 0.029057f, 0.028283f, 0.026975f, 0.025171f, 0.022916f, 0.020266f, 0.017286f, 0.014047f, 0.010624f, 0.007094f, 0.003535f, 0.000024f, -0.003366f, -0.006569f, -0.009523f, -0.012176f, -0.014484f, -0.016413f, -0.017941f, -0.019056f, -0.019756f, -0.020049f, -0.019954f, -0.019497f, -0.018714f, -0.017645f, -0.016336f, -0.014838f, -0.013201f, -0.011478f, -0.009722f, -0.007980f, -0.006300f, -0.004722f, -0.003284f, -0.002015f, -0.000939f, -0.000073f, 0.000573f, 0.000994f, 0.001195f, 0.001184f, 0.000974f, 0.000585f, 0.000037f, -0.000645f, -0.001434f, -0.002304f, -0.003228f, -0.004180f, -0.005136f, -0.006074f, -0.006975f, -0.007823f, -0.008607f, -0.009317f, -0.009947f, -0.010497f, -0.010966f, -0.011359f, -0.011681f, -0.011939f, -0.012142f, -0.012299f, -0.012420f, -0.012512f, + -0.012584f, -0.012641f, -0.012688f, -0.012728f, -0.012762f, -0.012789f, -0.012806f, -0.012808f, -0.012789f, -0.012743f, -0.012661f, -0.012535f, -0.012358f, -0.012123f, -0.011825f, -0.011457f, -0.011019f, -0.010510f, -0.009931f, -0.009287f, -0.008586f, -0.007835f, -0.007048f, -0.006237f, -0.005417f, -0.004604f, -0.003816f, -0.003069f, -0.002380f, -0.001765f, -0.001239f, -0.000814f, -0.000500f, -0.000304f, -0.000232f, -0.000285f, -0.000460f, -0.000753f, -0.001155f, -0.001654f, -0.002236f, -0.002885f, -0.003582f, -0.004308f, -0.005042f, -0.005763f, -0.006450f, -0.007084f, -0.007647f, -0.008124f, -0.008499f, -0.008763f, -0.008907f, -0.008927f, -0.008822f, -0.008594f, -0.008248f, -0.007793f, -0.007239f, -0.006599f, -0.005890f, -0.005128f, -0.004330f, -0.003514f, -0.002698f, -0.001899f, -0.001133f, -0.000414f, 0.000244f, 0.000833f, 0.001344f, 0.001771f, 0.002114f, 0.002371f, 0.002545f, 0.002642f, 0.002667f, 0.002630f, 0.002541f, 0.002410f, 0.002249f, 0.002069f, 0.001881f, 0.001696f, 0.001524f, 0.001371f, 0.001246f, 0.001152f, 0.001093f, 0.001070f, 0.001082f, 0.001127f, 0.001201f, 0.001298f, 0.001412f, 0.001537f, + 0.001664f, 0.001786f, 0.001896f, 0.001986f, 0.002051f, 0.002085f, 0.002084f, 0.002047f, 0.001972f, 0.001859f, 0.001712f, 0.001533f, 0.001327f, 0.001100f, 0.000859f, 0.000610f, 0.000363f, 0.000124f, -0.000099f, -0.000300f, -0.000472f, -0.000610f, -0.000710f, -0.000770f, -0.000790f, -0.000768f, -0.000708f, -0.000612f, -0.000486f, -0.000334f, -0.000164f, 0.000018f, 0.000204f, 0.000386f, 0.000558f, 0.000711f, 0.000840f, 0.000940f, 0.001007f, 0.001037f, 0.001030f, 0.000985f, 0.000904f, 0.000790f, 0.000647f, 0.000480f, 0.000295f, 0.000100f, 0.051440f, -0.017404f, -0.015031f, -0.006631f, 0.084912f, 0.030042f, 0.126303f, 0.077667f, 0.061283f, -0.206804f, -0.266513f, -0.146299f, 0.048463f, 0.221834f, 0.276928f, 0.058618f, -0.164883f, -0.206521f, -0.157245f, -0.019971f, 0.022484f, 0.009127f, -0.074832f, -0.003766f, 0.011558f, 0.046388f, 0.084463f, 0.035029f, -0.041705f, -0.135144f, -0.247107f, -0.068341f, 0.062401f, 0.215002f, 0.182115f, 0.017813f, -0.224853f, -0.242217f, -0.154143f, 0.140675f, 0.085035f, 0.013789f, 0.004699f, -0.030640f, -0.048520f, -0.053992f, 0.042938f, 0.077860f, + -0.122612f, -0.094380f, -0.021180f, 0.048656f, 0.098990f, 0.131997f, 0.049407f, -0.051469f, -0.107798f, -0.102519f, -0.027519f, 0.017002f, 0.121854f, 0.099067f, -0.012549f, -0.136986f, -0.168680f, -0.174574f, -0.066879f, 0.136946f, 0.301285f, 0.218697f, 0.064603f, -0.129712f, -0.295903f, -0.372101f, -0.176103f, 0.125151f, 0.321045f, 0.280827f, 0.079868f, -0.182004f, -0.337718f, -0.255048f, -0.075833f, 0.186080f, 0.229930f, 0.034094f, -0.137032f, -0.117218f, -0.015998f, 0.102881f, 0.148584f, 0.090919f, 0.023247f, -0.071571f, -0.111685f, -0.117527f, 0.010460f, 0.106725f, 0.099762f, 0.070302f, -0.064238f, -0.141554f, -0.120835f, -0.020430f, 0.117272f, 0.156353f, 0.059997f, -0.155890f, -0.200814f, -0.054347f, 0.108571f, 0.190060f, 0.124766f, -0.081814f, -0.251485f, -0.318244f, -0.060085f, 0.291755f, 0.371072f, 0.175054f, -0.113281f, -0.303607f, -0.187642f, -0.017714f, 0.224460f, 0.243779f, 0.102581f, -0.074083f, -0.204041f, -0.200559f, -0.040905f, 0.108675f, 0.223579f, 0.138661f, -0.050251f, -0.213777f, -0.246007f, -0.079520f, 0.144106f, 0.230220f, 0.169662f, 0.026378f, -0.146485f, -0.219150f, + -0.151349f, 0.038709f, 0.179876f, 0.134576f, -0.009275f, -0.077913f, -0.144363f, -0.041473f, 0.052335f, 0.093512f, 0.027278f, -0.011454f, -0.031205f, -0.026190f, -0.019791f, -0.000507f, -0.007044f, 0.020804f, 0.056088f, 0.052051f, 0.007688f, -0.040209f, -0.055811f, -0.032228f, 0.014392f, 0.040408f, 0.049053f, 0.038043f, -0.015223f, -0.058610f, -0.047302f, -0.026520f, 0.045780f, 0.026105f, -0.013310f, -0.017261f, 0.022633f, 0.048770f, 0.024043f, -0.024744f, -0.049378f, -0.012487f, 0.038986f, 0.054117f, 0.000389f, -0.046756f, -0.042967f, 0.017333f, 0.052966f, 0.029892f, -0.029762f, -0.051009f, -0.014580f, 0.046694f, 0.043299f, -0.016820f, -0.055613f, 0.000172f, 0.042298f, 0.006846f, -0.019183f, 0.002989f, 0.001877f, 0.000899f, -0.000117f, 0.002684f, -0.000509f, 0.001446f, -0.000408f, 0.000453f, -0.002198f, 0.001084f, -0.000278f, 0.001686f, -0.000636f, 0.001433f, -0.002012f, 0.001090f, -0.000798f, 0.000549f, -0.000918f, 0.003335f, -0.000223f, 0.001920f, -0.002619f, 0.000713f, -0.001257f, 0.000292f, -0.000361f, 0.001446f, 0.000380f, 0.001368f, -0.001780f, 0.001050f, -0.001139f, 0.000807f}, + {-0.001645f, -0.004889f, -0.007994f, -0.010872f, -0.013441f, -0.015627f, -0.017366f, -0.018606f, -0.019309f, -0.019449f, -0.019017f, -0.018018f, -0.016473f, -0.014415f, -0.011894f, -0.008968f, -0.005708f, -0.002193f, 0.001492f, 0.005258f, 0.009013f, 0.012668f, 0.016133f, 0.019327f, 0.022174f, 0.024608f, 0.026572f, 0.028024f, 0.028931f, 0.029277f, 0.029057f, 0.028283f, 0.026975f, 0.025171f, 0.022916f, 0.020266f, 0.017286f, 0.014047f, 0.010624f, 0.007094f, 0.003535f, 0.000024f, -0.003366f, -0.006569f, -0.009523f, -0.012176f, -0.014484f, -0.016413f, -0.017941f, -0.019056f, -0.019756f, -0.020049f, -0.019954f, -0.019497f, -0.018714f, -0.017645f, -0.016336f, -0.014838f, -0.013201f, -0.011478f, -0.009722f, -0.007980f, -0.006300f, -0.004722f, -0.003284f, -0.002015f, -0.000939f, -0.000073f, 0.000573f, 0.000994f, 0.001195f, 0.001184f, 0.000974f, 0.000585f, 0.000037f, -0.000645f, -0.001434f, -0.002304f, -0.003228f, -0.004180f, -0.005136f, -0.006074f, -0.006975f, -0.007823f, -0.008607f, -0.009317f, -0.009947f, -0.010497f, -0.010966f, -0.011359f, -0.011681f, -0.011939f, -0.012142f, -0.012299f, -0.012420f, -0.012512f, + -0.012584f, -0.012641f, -0.012688f, -0.012728f, -0.012762f, -0.012789f, -0.012806f, -0.012808f, -0.012789f, -0.012743f, -0.012661f, -0.012535f, -0.012358f, -0.012123f, -0.011825f, -0.011457f, -0.011019f, -0.010510f, -0.009931f, -0.009287f, -0.008586f, -0.007835f, -0.007048f, -0.006237f, -0.005417f, -0.004604f, -0.003816f, -0.003069f, -0.002380f, -0.001765f, -0.001239f, -0.000814f, -0.000500f, -0.000304f, -0.000232f, -0.000285f, -0.000460f, -0.000753f, -0.001155f, -0.001654f, -0.002236f, -0.002885f, -0.003582f, -0.004308f, -0.005042f, -0.005763f, -0.006450f, -0.007084f, -0.007647f, -0.008124f, -0.008499f, -0.008763f, -0.008907f, -0.008927f, -0.008822f, -0.008594f, -0.008248f, -0.007793f, -0.007239f, -0.006599f, -0.005890f, -0.005128f, -0.004330f, -0.003514f, -0.002698f, -0.001899f, -0.001133f, -0.000414f, 0.000244f, 0.000833f, 0.001344f, 0.001771f, 0.002114f, 0.002371f, 0.002545f, 0.002642f, 0.002667f, 0.002630f, 0.002541f, 0.002410f, 0.002249f, 0.002069f, 0.001881f, 0.001696f, 0.001524f, 0.001371f, 0.001246f, 0.001152f, 0.001093f, 0.001070f, 0.001082f, 0.001127f, 0.001201f, 0.001298f, 0.001412f, 0.001537f, + 0.001664f, 0.001786f, 0.001896f, 0.001986f, 0.002051f, 0.002085f, 0.002084f, 0.002047f, 0.001972f, 0.001859f, 0.001712f, 0.001533f, 0.001327f, 0.001100f, 0.000859f, 0.000610f, 0.000363f, 0.000124f, -0.000099f, -0.000300f, -0.000472f, -0.000610f, -0.000710f, -0.000770f, -0.000790f, -0.000768f, -0.000708f, -0.000612f, -0.000486f, -0.000334f, -0.000164f, 0.000018f, 0.000204f, 0.000386f, 0.000558f, 0.000711f, 0.000840f, 0.000940f, 0.001007f, 0.001037f, 0.001030f, 0.000985f, 0.000904f, 0.000790f, 0.000647f, 0.000480f, 0.000295f, 0.000100f, 0.051440f, -0.017404f, -0.015031f, -0.006631f, 0.084912f, 0.030042f, 0.126303f, 0.077667f, 0.061283f, -0.206804f, -0.266513f, -0.146299f, 0.048463f, 0.221834f, 0.276928f, 0.058618f, -0.164883f, -0.206521f, -0.157245f, -0.019971f, 0.022484f, 0.009127f, -0.074832f, -0.003766f, 0.011558f, 0.046388f, 0.084463f, 0.035029f, -0.041705f, -0.135144f, -0.247107f, -0.068341f, 0.062401f, 0.215002f, 0.182115f, 0.017813f, -0.224853f, -0.242217f, -0.154143f, 0.140675f, 0.085035f, 0.013789f, 0.004699f, -0.030640f, -0.048520f, -0.053992f, 0.042938f, 0.077860f, + -0.122612f, -0.094380f, -0.021180f, 0.048656f, 0.098990f, 0.131997f, 0.049407f, -0.051469f, -0.107798f, -0.102519f, -0.027519f, 0.017002f, 0.121854f, 0.099067f, -0.012549f, -0.136986f, -0.168680f, -0.174574f, -0.066879f, 0.136946f, 0.301285f, 0.218697f, 0.064603f, -0.129712f, -0.295903f, -0.372101f, -0.176103f, 0.125151f, 0.321045f, 0.280827f, 0.079868f, -0.182004f, -0.337718f, -0.255048f, -0.075833f, 0.186080f, 0.229930f, 0.034094f, -0.137032f, -0.117218f, -0.015998f, 0.102881f, 0.148584f, 0.090919f, 0.023247f, -0.071571f, -0.111685f, -0.117527f, 0.010460f, 0.106725f, 0.099762f, 0.070302f, -0.064238f, -0.141554f, -0.120835f, -0.020430f, 0.117272f, 0.156353f, 0.059997f, -0.155890f, -0.200814f, -0.054347f, 0.108571f, 0.190060f, 0.124766f, -0.081814f, -0.251485f, -0.318244f, -0.060085f, 0.291755f, 0.371072f, 0.175054f, -0.113281f, -0.303607f, -0.187642f, -0.017714f, 0.224460f, 0.243779f, 0.102581f, -0.074083f, -0.204041f, -0.200559f, -0.040905f, 0.108675f, 0.223579f, 0.138661f, -0.050251f, -0.213777f, -0.246007f, -0.079520f, 0.144106f, 0.230220f, 0.169662f, 0.026378f, -0.146485f, -0.219150f, + -0.151349f, 0.038709f, 0.179876f, 0.134576f, -0.009275f, -0.077913f, -0.144363f, -0.041473f, 0.052335f, 0.093512f, 0.027278f, -0.011454f, -0.031205f, -0.026190f, -0.019791f, -0.000507f, -0.007044f, 0.020804f, 0.056088f, 0.052051f, 0.007688f, -0.040209f, -0.055811f, -0.032228f, 0.014392f, 0.040408f, 0.049053f, 0.038043f, -0.015223f, -0.058610f, -0.047302f, -0.026520f, 0.045780f, 0.026105f, -0.013310f, -0.017261f, 0.022633f, 0.048770f, 0.024043f, -0.024744f, -0.049378f, -0.012487f, 0.038986f, 0.054117f, 0.000389f, -0.046756f, -0.042967f, 0.017333f, 0.052966f, 0.029892f, -0.029762f, -0.051009f, -0.014580f, 0.046694f, 0.043299f, -0.016820f, -0.055613f, 0.000172f, 0.042298f, 0.006846f, -0.019183f, 0.002989f, 0.001877f, 0.000899f, -0.000117f, 0.002684f, -0.000509f, 0.001446f, -0.000408f, 0.000453f, -0.002198f, 0.001084f, -0.000278f, 0.001686f, -0.000636f, 0.001433f, -0.002012f, 0.001090f, -0.000798f, 0.000549f, -0.000918f, 0.003335f, -0.000223f, 0.001920f, -0.002619f, 0.000713f, -0.001257f, 0.000292f, -0.000361f, 0.001446f, 0.000380f, 0.001368f, -0.001780f, 0.001050f, -0.001139f, 0.000807f} + }, + { + {-0.000690f, -0.002053f, -0.003367f, -0.004601f, -0.005728f, -0.006720f, -0.007557f, -0.008222f, -0.008701f, -0.008989f, -0.009083f, -0.008987f, -0.008711f, -0.008268f, -0.007678f, -0.006963f, -0.006150f, -0.005268f, -0.004347f, -0.003420f, -0.002518f, -0.001673f, -0.000914f, -0.000269f, 0.000238f, 0.000585f, 0.000757f, 0.000739f, 0.000525f, 0.000111f, -0.000501f, -0.001306f, -0.002292f, -0.003446f, -0.004750f, -0.006182f, -0.007719f, -0.009334f, -0.011001f, -0.012691f, -0.014375f, -0.016025f, -0.017613f, -0.019112f, -0.020496f, -0.021743f, -0.022829f, -0.023737f, -0.024449f, -0.024952f, -0.025234f, -0.025286f, -0.025103f, -0.024683f, -0.024026f, -0.023135f, -0.022016f, -0.020679f, -0.019136f, -0.017401f, -0.015492f, -0.013430f, -0.011237f, -0.008940f, -0.006565f, -0.004143f, -0.001704f, 0.000718f, 0.003089f, 0.005377f, 0.007546f, 0.009564f, 0.011399f, 0.013020f, 0.014400f, 0.015515f, 0.016344f, 0.016871f, 0.017086f, 0.016982f, 0.016561f, 0.015827f, 0.014793f, 0.013478f, 0.011905f, 0.010103f, 0.008109f, 0.005959f, 0.003697f, 0.001368f, -0.000981f, -0.003304f, -0.005551f, -0.007679f, -0.009644f, -0.011407f, + -0.012933f, -0.014192f, -0.015163f, -0.015828f, -0.016178f, -0.016213f, -0.015936f, -0.015362f, -0.014509f, -0.013404f, -0.012076f, -0.010562f, -0.008900f, -0.007133f, -0.005302f, -0.003450f, -0.001619f, 0.000153f, 0.001828f, 0.003374f, 0.004765f, 0.005979f, 0.006999f, 0.007816f, 0.008426f, 0.008831f, 0.009037f, 0.009057f, 0.008907f, 0.008608f, 0.008181f, 0.007650f, 0.007040f, 0.006375f, 0.005679f, 0.004971f, 0.004271f, 0.003593f, 0.002949f, 0.002346f, 0.001788f, 0.001275f, 0.000803f, 0.000365f, -0.000047f, -0.000445f, -0.000840f, -0.001245f, -0.001672f, -0.002130f, -0.002627f, -0.003169f, -0.003757f, -0.004391f, -0.005063f, -0.005765f, -0.006483f, -0.007200f, -0.007896f, -0.008548f, -0.009133f, -0.009624f, -0.009999f, -0.010233f, -0.010305f, -0.010196f, -0.009892f, -0.009383f, -0.008666f, -0.007741f, -0.006616f, -0.005305f, -0.003827f, -0.002207f, -0.000476f, 0.001333f, 0.003180f, 0.005028f, 0.006833f, 0.008555f, 0.010155f, 0.011596f, 0.012844f, 0.013871f, 0.014654f, 0.015176f, 0.015429f, 0.015411f, 0.015126f, 0.014589f, 0.013818f, 0.012839f, 0.011683f, 0.010388f, 0.008990f, 0.007533f, + 0.006057f, 0.004604f, 0.003214f, 0.001923f, 0.000764f, -0.000238f, -0.001059f, -0.001686f, -0.002112f, -0.002334f, -0.002360f, -0.002202f, -0.001877f, -0.001411f, -0.000830f, -0.000166f, 0.000549f, 0.001282f, 0.001998f, 0.002668f, 0.003262f, 0.003756f, 0.004130f, 0.004368f, 0.004463f, 0.004411f, 0.004214f, 0.003882f, 0.003429f, 0.002872f, 0.002235f, 0.001542f, 0.000822f, 0.000102f, -0.000590f, -0.001227f, -0.001786f, -0.002246f, -0.002591f, -0.002809f, -0.002893f, -0.002843f, -0.002662f, -0.002362f, -0.001955f, -0.001462f, -0.000904f, -0.000306f, 0.000296f, 0.003937f, 0.009648f, 0.012419f, 0.011267f, 0.040238f, 0.015703f, -0.011552f, -0.058160f, 0.013046f, 0.072824f, 0.088627f, -0.015958f, -0.160738f, -0.254131f, -0.050171f, 0.053966f, 0.110719f, 0.126033f, 0.010242f, 0.054476f, 0.047715f, -0.060406f, -0.155297f, 0.013718f, 0.062056f, 0.089206f, 0.119108f, 0.035385f, -0.029856f, -0.021391f, -0.127605f, -0.058302f, 0.063474f, 0.126353f, 0.057306f, -0.086294f, -0.115687f, -0.061619f, 0.036661f, 0.157767f, 0.060098f, -0.043304f, -0.112367f, -0.120737f, -0.060150f, 0.071453f, 0.076516f, + 0.063806f, 0.039984f, 0.012824f, 0.010209f, -0.018528f, -0.064632f, -0.023531f, -0.020034f, 0.014198f, 0.015704f, 0.120472f, -0.088570f, -0.026549f, -0.032296f, -0.172561f, -0.040071f, 0.109757f, -0.008742f, -0.101366f, -0.055359f, 0.046352f, 0.103096f, 0.129563f, 0.047553f, -0.024178f, -0.125148f, -0.117219f, 0.036596f, 0.186238f, 0.123714f, -0.045137f, -0.171506f, -0.106041f, -0.002482f, 0.055770f, 0.107032f, 0.059515f, -0.077665f, -0.169167f, -0.091629f, 0.046448f, 0.144953f, 0.091318f, -0.011980f, 0.009144f, -0.117581f, 0.016691f, 0.032711f, 0.218095f, 0.098833f, -0.062401f, -0.088608f, -0.001681f, 0.001069f, -0.093855f, -0.119791f, -0.048200f, 0.050228f, 0.123198f, 0.041732f, -0.097033f, -0.117008f, 0.012802f, 0.172574f, 0.184757f, 0.009102f, -0.120569f, -0.172745f, -0.076288f, 0.177154f, 0.250881f, 0.099183f, -0.107409f, -0.237621f, -0.190393f, -0.046260f, 0.129260f, 0.187136f, 0.116149f, -0.021548f, -0.160583f, -0.126560f, -0.027619f, 0.100470f, 0.179752f, 0.093998f, -0.109599f, -0.153948f, -0.181134f, 0.020372f, 0.217498f, 0.277900f, 0.121373f, -0.074423f, -0.234906f, -0.205704f, + -0.082379f, 0.085297f, 0.116048f, 0.117933f, -0.030242f, -0.117081f, -0.129572f, -0.010412f, 0.112942f, 0.131377f, -0.076372f, -0.144450f, -0.141864f, -0.036980f, 0.060290f, 0.118163f, 0.075497f, 0.007247f, -0.076572f, -0.106067f, -0.084042f, 0.039064f, 0.097812f, 0.118444f, 0.030211f, -0.043478f, -0.118658f, -0.097851f, -0.039008f, 0.070489f, 0.085911f, 0.105045f, -0.013103f, -0.109826f, -0.234591f, -0.026291f, 0.411073f, 0.430086f, 0.115483f, -0.325910f, -0.478239f, -0.221265f, 0.238392f, 0.486933f, 0.281713f, -0.180712f, -0.476652f, -0.295784f, 0.161026f, 0.445223f, 0.244443f, -0.190672f, -0.395177f, -0.136553f, 0.241464f, 0.292475f, -0.052163f, -0.246516f, -0.033780f, 0.137826f, 0.013441f, -0.035850f, -0.009276f, 0.005239f, -0.002221f, 0.001268f, -0.004987f, 0.001142f, -0.006533f, 0.002459f, -0.004739f, 0.003077f, -0.001965f, 0.000451f, -0.003766f, 0.004415f, -0.001868f, 0.003175f, -0.004095f, 0.005067f, -0.005135f, 0.003633f, -0.002886f, 0.003814f, -0.001883f, 0.004380f, -0.003811f, 0.002574f, -0.004489f, 0.004757f, -0.003096f, 0.005553f, -0.002642f, 0.002949f, -0.002289f, 0.003374f}, + {0.000690f, 0.002053f, 0.003367f, 0.004601f, 0.005728f, 0.006720f, 0.007557f, 0.008222f, 0.008701f, 0.008989f, 0.009083f, 0.008987f, 0.008711f, 0.008268f, 0.007678f, 0.006963f, 0.006150f, 0.005268f, 0.004347f, 0.003420f, 0.002518f, 0.001673f, 0.000914f, 0.000269f, -0.000238f, -0.000585f, -0.000757f, -0.000739f, -0.000525f, -0.000111f, 0.000501f, 0.001306f, 0.002292f, 0.003446f, 0.004750f, 0.006182f, 0.007719f, 0.009334f, 0.011001f, 0.012691f, 0.014375f, 0.016025f, 0.017613f, 0.019112f, 0.020496f, 0.021743f, 0.022829f, 0.023737f, 0.024449f, 0.024952f, 0.025234f, 0.025286f, 0.025103f, 0.024683f, 0.024026f, 0.023135f, 0.022016f, 0.020679f, 0.019136f, 0.017401f, 0.015492f, 0.013430f, 0.011237f, 0.008940f, 0.006565f, 0.004143f, 0.001704f, -0.000718f, -0.003089f, -0.005377f, -0.007546f, -0.009564f, -0.011399f, -0.013020f, -0.014400f, -0.015515f, -0.016344f, -0.016871f, -0.017086f, -0.016982f, -0.016561f, -0.015827f, -0.014793f, -0.013478f, -0.011905f, -0.010103f, -0.008109f, -0.005959f, -0.003697f, -0.001368f, 0.000981f, 0.003304f, 0.005551f, 0.007679f, 0.009644f, 0.011407f, + 0.012933f, 0.014192f, 0.015163f, 0.015828f, 0.016178f, 0.016213f, 0.015936f, 0.015362f, 0.014509f, 0.013404f, 0.012076f, 0.010562f, 0.008900f, 0.007133f, 0.005302f, 0.003450f, 0.001619f, -0.000153f, -0.001828f, -0.003374f, -0.004765f, -0.005979f, -0.006999f, -0.007816f, -0.008426f, -0.008831f, -0.009037f, -0.009057f, -0.008907f, -0.008608f, -0.008181f, -0.007650f, -0.007040f, -0.006375f, -0.005679f, -0.004971f, -0.004271f, -0.003593f, -0.002949f, -0.002346f, -0.001788f, -0.001275f, -0.000803f, -0.000365f, 0.000047f, 0.000445f, 0.000840f, 0.001245f, 0.001672f, 0.002130f, 0.002627f, 0.003169f, 0.003757f, 0.004391f, 0.005063f, 0.005765f, 0.006483f, 0.007200f, 0.007896f, 0.008548f, 0.009133f, 0.009624f, 0.009999f, 0.010233f, 0.010305f, 0.010196f, 0.009892f, 0.009383f, 0.008666f, 0.007741f, 0.006616f, 0.005305f, 0.003827f, 0.002207f, 0.000476f, -0.001333f, -0.003180f, -0.005028f, -0.006833f, -0.008555f, -0.010155f, -0.011596f, -0.012844f, -0.013871f, -0.014654f, -0.015176f, -0.015429f, -0.015411f, -0.015126f, -0.014589f, -0.013818f, -0.012839f, -0.011683f, -0.010388f, -0.008990f, -0.007533f, + -0.006057f, -0.004604f, -0.003214f, -0.001923f, -0.000764f, 0.000238f, 0.001059f, 0.001686f, 0.002112f, 0.002334f, 0.002360f, 0.002202f, 0.001877f, 0.001411f, 0.000830f, 0.000166f, -0.000549f, -0.001282f, -0.001998f, -0.002668f, -0.003262f, -0.003756f, -0.004130f, -0.004368f, -0.004463f, -0.004411f, -0.004214f, -0.003882f, -0.003429f, -0.002872f, -0.002235f, -0.001542f, -0.000822f, -0.000102f, 0.000590f, 0.001227f, 0.001786f, 0.002246f, 0.002591f, 0.002809f, 0.002893f, 0.002843f, 0.002662f, 0.002362f, 0.001955f, 0.001462f, 0.000904f, 0.000306f, -0.000296f, -0.003937f, -0.009648f, -0.012419f, -0.011267f, -0.040238f, -0.015703f, 0.011552f, 0.058160f, -0.013046f, -0.072824f, -0.088627f, 0.015958f, 0.160738f, 0.254131f, 0.050171f, -0.053966f, -0.110719f, -0.126033f, -0.010242f, -0.054476f, -0.047715f, 0.060406f, 0.155297f, -0.013718f, -0.062056f, -0.089206f, -0.119108f, -0.035385f, 0.029856f, 0.021391f, 0.127605f, 0.058302f, -0.063474f, -0.126353f, -0.057306f, 0.086294f, 0.115687f, 0.061619f, -0.036661f, -0.157767f, -0.060098f, 0.043304f, 0.112367f, 0.120737f, 0.060150f, -0.071453f, -0.076516f, + -0.063806f, -0.039984f, -0.012824f, -0.010209f, 0.018528f, 0.064632f, 0.023531f, 0.020034f, -0.014198f, -0.015704f, -0.120472f, 0.088570f, 0.026549f, 0.032296f, 0.172561f, 0.040071f, -0.109757f, 0.008742f, 0.101366f, 0.055359f, -0.046352f, -0.103096f, -0.129563f, -0.047553f, 0.024178f, 0.125148f, 0.117219f, -0.036596f, -0.186238f, -0.123714f, 0.045137f, 0.171506f, 0.106041f, 0.002482f, -0.055770f, -0.107032f, -0.059515f, 0.077665f, 0.169167f, 0.091629f, -0.046448f, -0.144953f, -0.091318f, 0.011980f, -0.009144f, 0.117581f, -0.016691f, -0.032711f, -0.218095f, -0.098833f, 0.062401f, 0.088608f, 0.001681f, -0.001069f, 0.093855f, 0.119791f, 0.048200f, -0.050228f, -0.123198f, -0.041732f, 0.097033f, 0.117008f, -0.012802f, -0.172574f, -0.184757f, -0.009102f, 0.120569f, 0.172745f, 0.076288f, -0.177154f, -0.250881f, -0.099183f, 0.107409f, 0.237621f, 0.190393f, 0.046260f, -0.129260f, -0.187136f, -0.116149f, 0.021548f, 0.160583f, 0.126560f, 0.027619f, -0.100470f, -0.179752f, -0.093998f, 0.109599f, 0.153948f, 0.181134f, -0.020372f, -0.217498f, -0.277900f, -0.121373f, 0.074423f, 0.234906f, 0.205704f, + 0.082379f, -0.085297f, -0.116048f, -0.117933f, 0.030242f, 0.117081f, 0.129572f, 0.010412f, -0.112942f, -0.131377f, 0.076372f, 0.144450f, 0.141864f, 0.036980f, -0.060290f, -0.118163f, -0.075497f, -0.007247f, 0.076572f, 0.106067f, 0.084042f, -0.039064f, -0.097812f, -0.118444f, -0.030211f, 0.043478f, 0.118658f, 0.097851f, 0.039008f, -0.070489f, -0.085911f, -0.105045f, 0.013103f, 0.109826f, 0.234591f, 0.026291f, -0.411073f, -0.430086f, -0.115483f, 0.325910f, 0.478239f, 0.221265f, -0.238392f, -0.486933f, -0.281713f, 0.180712f, 0.476652f, 0.295784f, -0.161026f, -0.445223f, -0.244443f, 0.190672f, 0.395177f, 0.136553f, -0.241464f, -0.292475f, 0.052163f, 0.246516f, 0.033780f, -0.137826f, -0.013441f, 0.035850f, 0.009276f, -0.005239f, 0.002221f, -0.001268f, 0.004987f, -0.001142f, 0.006533f, -0.002459f, 0.004739f, -0.003077f, 0.001965f, -0.000451f, 0.003766f, -0.004415f, 0.001868f, -0.003175f, 0.004095f, -0.005067f, 0.005135f, -0.003633f, 0.002886f, -0.003814f, 0.001883f, -0.004380f, 0.003811f, -0.002574f, 0.004489f, -0.004757f, 0.003096f, -0.005553f, 0.002642f, -0.002949f, 0.002289f, -0.003374f} + }, + { + {0.000859f, 0.002546f, 0.004137f, 0.005573f, 0.006798f, 0.007766f, 0.008436f, 0.008779f, 0.008777f, 0.008421f, 0.007715f, 0.006676f, 0.005329f, 0.003711f, 0.001866f, -0.000155f, -0.002292f, -0.004487f, -0.006677f, -0.008800f, -0.010797f, -0.012613f, -0.014199f, -0.015515f, -0.016527f, -0.017213f, -0.017560f, -0.017564f, -0.017234f, -0.016584f, -0.015642f, -0.014439f, -0.013015f, -0.011413f, -0.009678f, -0.007859f, -0.006004f, -0.004156f, -0.002357f, -0.000644f, 0.000952f, 0.002409f, 0.003709f, 0.004844f, 0.005813f, 0.006621f, 0.007281f, 0.007810f, 0.008230f, 0.008566f, 0.008846f, 0.009095f, 0.009341f, 0.009606f, 0.009911f, 0.010269f, 0.010690f, 0.011177f, 0.011727f, 0.012329f, 0.012965f, 0.013615f, 0.014250f, 0.014838f, 0.015346f, 0.015737f, 0.015976f, 0.016028f, 0.015860f, 0.015447f, 0.014766f, 0.013801f, 0.012546f, 0.010999f, 0.009171f, 0.007076f, 0.004742f, 0.002199f, -0.000513f, -0.003349f, -0.006259f, -0.009193f, -0.012095f, -0.014913f, -0.017595f, -0.020094f, -0.022364f, -0.024369f, -0.026078f, -0.027468f, -0.028525f, -0.029243f, -0.029625f, -0.029682f, -0.029434f, -0.028905f, + -0.028130f, -0.027144f, -0.025987f, -0.024703f, -0.023333f, -0.021921f, -0.020506f, -0.019125f, -0.017811f, -0.016591f, -0.015486f, -0.014511f, -0.013675f, -0.012980f, -0.012422f, -0.011993f, -0.011678f, -0.011460f, -0.011317f, -0.011228f, -0.011169f, -0.011117f, -0.011051f, -0.010951f, -0.010802f, -0.010592f, -0.010311f, -0.009957f, -0.009530f, -0.009035f, -0.008482f, -0.007882f, -0.007252f, -0.006607f, -0.005968f, -0.005352f, -0.004777f, -0.004260f, -0.003816f, -0.003455f, -0.003186f, -0.003012f, -0.002933f, -0.002945f, -0.003039f, -0.003203f, -0.003423f, -0.003681f, -0.003957f, -0.004231f, -0.004482f, -0.004693f, -0.004843f, -0.004920f, -0.004909f, -0.004804f, -0.004600f, -0.004297f, -0.003901f, -0.003419f, -0.002867f, -0.002259f, -0.001617f, -0.000961f, -0.000314f, 0.000300f, 0.000859f, 0.001341f, 0.001728f, 0.002005f, 0.002161f, 0.002188f, 0.002085f, 0.001854f, 0.001504f, 0.001048f, 0.000501f, -0.000114f, -0.000775f, -0.001455f, -0.002127f, -0.002765f, -0.003342f, -0.003835f, -0.004222f, -0.004485f, -0.004613f, -0.004596f, -0.004433f, -0.004127f, -0.003686f, -0.003124f, -0.002460f, -0.001716f, -0.000917f, -0.000093f, + 0.000728f, 0.001515f, 0.002241f, 0.002879f, 0.003406f, 0.003801f, 0.004051f, 0.004146f, 0.004082f, 0.003861f, 0.003492f, 0.002988f, 0.002368f, 0.001654f, 0.000873f, 0.000055f, -0.000770f, -0.001572f, -0.002319f, -0.002985f, -0.003543f, -0.003974f, -0.004260f, -0.004391f, -0.004362f, -0.004174f, -0.003834f, -0.003355f, -0.002754f, -0.002054f, -0.001281f, -0.000466f, 0.000363f, 0.001173f, 0.001934f, 0.002618f, 0.003198f, 0.003654f, 0.003967f, 0.004127f, 0.004128f, 0.003969f, 0.003658f, 0.003206f, 0.002631f, 0.001955f, 0.001204f, 0.000406f, 0.017226f, 0.012013f, -0.028321f, -0.030423f, -0.022893f, -0.033501f, -0.060821f, -0.088080f, -0.112243f, 0.154253f, 0.203443f, 0.058316f, -0.012445f, 0.055654f, 0.021804f, -0.008967f, 0.035061f, 0.095283f, -0.000718f, 0.050392f, -0.018996f, -0.055789f, 0.032982f, -0.007091f, 0.094774f, 0.026985f, 0.048263f, -0.071591f, -0.107635f, 0.011283f, 0.017843f, 0.025335f, -0.054642f, -0.015553f, 0.014738f, 0.028520f, 0.050245f, 0.062858f, -0.068352f, -0.030551f, -0.019679f, 0.052072f, 0.057232f, 0.021821f, -0.070286f, -0.113515f, -0.071628f, 0.027134f, + -0.012002f, 0.068095f, 0.094405f, 0.068474f, -0.058745f, -0.073551f, -0.048971f, 0.047774f, 0.095484f, 0.136276f, -0.020782f, -0.008228f, -0.156104f, -0.089359f, 0.090499f, 0.174599f, 0.045334f, 0.164127f, 0.055132f, -0.122527f, -0.092643f, -0.072552f, 0.080633f, 0.116478f, 0.056780f, -0.140743f, -0.260926f, -0.168795f, -0.133615f, -0.060155f, 0.178317f, 0.217051f, -0.005971f, -0.165801f, -0.140198f, -0.114298f, -0.209628f, 0.119419f, 0.231336f, 0.219009f, 0.076439f, -0.087801f, -0.201419f, -0.123932f, 0.079096f, 0.213570f, 0.193245f, 0.071682f, -0.105801f, -0.155119f, 0.036797f, 0.147391f, 0.158791f, 0.027849f, -0.132063f, -0.217392f, -0.063462f, 0.120396f, 0.255590f, 0.137794f, -0.053665f, -0.330210f, -0.344688f, -0.158570f, 0.200625f, 0.367654f, 0.189377f, -0.125986f, -0.191932f, -0.177880f, -0.044655f, 0.177784f, 0.243707f, 0.166341f, -0.059203f, -0.181411f, -0.141760f, -0.105250f, 0.101497f, 0.204489f, 0.162081f, 0.018700f, -0.128499f, -0.199396f, -0.101125f, 0.091973f, 0.230468f, 0.135103f, -0.041913f, -0.203133f, -0.185174f, -0.090538f, 0.079898f, 0.180571f, 0.130038f, -0.027597f, + -0.089495f, -0.090417f, -0.024452f, -0.007223f, 0.068041f, 0.110296f, 0.065420f, -0.023719f, -0.095513f, -0.089005f, 0.002369f, 0.124344f, 0.110889f, 0.042596f, -0.026849f, -0.096845f, -0.081131f, -0.002341f, 0.095227f, 0.102042f, 0.044684f, -0.010971f, -0.063710f, -0.034114f, -0.001677f, 0.030173f, 0.013740f, -0.000268f, -0.021227f, -0.043999f, -0.001913f, 0.026924f, 0.041319f, -0.015041f, -0.054437f, -0.130356f, 0.047521f, 0.167756f, 0.184390f, 0.033196f, -0.121109f, -0.184845f, -0.054031f, 0.118381f, 0.199260f, 0.079203f, -0.103129f, -0.191235f, -0.059463f, 0.122197f, 0.182977f, 0.024420f, -0.135288f, -0.134242f, 0.050368f, 0.146347f, 0.040904f, -0.109526f, -0.032549f, 0.056726f, 0.019439f, -0.025118f, 0.005572f, 0.001777f, 0.007640f, 0.000271f, 0.005556f, -0.003630f, 0.004957f, -0.004408f, 0.004800f, -0.003228f, 0.002972f, -0.004344f, 0.003459f, -0.002986f, 0.006276f, -0.004350f, 0.002435f, -0.004030f, 0.004971f, -0.003604f, 0.005546f, -0.007147f, 0.005138f, -0.005555f, 0.006601f, -0.002204f, 0.005298f, -0.004820f, 0.003456f, -0.001146f, 0.004085f, -0.002134f, 0.001776f, -0.006348f}, + {-0.000859f, -0.002546f, -0.004137f, -0.005573f, -0.006798f, -0.007766f, -0.008436f, -0.008779f, -0.008777f, -0.008421f, -0.007715f, -0.006676f, -0.005329f, -0.003711f, -0.001866f, 0.000155f, 0.002292f, 0.004487f, 0.006677f, 0.008800f, 0.010797f, 0.012613f, 0.014199f, 0.015515f, 0.016527f, 0.017213f, 0.017560f, 0.017564f, 0.017234f, 0.016584f, 0.015642f, 0.014439f, 0.013015f, 0.011413f, 0.009678f, 0.007859f, 0.006004f, 0.004156f, 0.002357f, 0.000644f, -0.000952f, -0.002409f, -0.003709f, -0.004844f, -0.005813f, -0.006621f, -0.007281f, -0.007810f, -0.008230f, -0.008566f, -0.008846f, -0.009095f, -0.009341f, -0.009606f, -0.009911f, -0.010269f, -0.010690f, -0.011177f, -0.011727f, -0.012329f, -0.012965f, -0.013615f, -0.014250f, -0.014838f, -0.015346f, -0.015737f, -0.015976f, -0.016028f, -0.015860f, -0.015447f, -0.014766f, -0.013801f, -0.012546f, -0.010999f, -0.009171f, -0.007076f, -0.004742f, -0.002199f, 0.000513f, 0.003349f, 0.006259f, 0.009193f, 0.012095f, 0.014913f, 0.017595f, 0.020094f, 0.022364f, 0.024369f, 0.026078f, 0.027468f, 0.028525f, 0.029243f, 0.029625f, 0.029682f, 0.029434f, 0.028905f, + 0.028130f, 0.027144f, 0.025987f, 0.024703f, 0.023333f, 0.021921f, 0.020506f, 0.019125f, 0.017811f, 0.016591f, 0.015486f, 0.014511f, 0.013675f, 0.012980f, 0.012422f, 0.011993f, 0.011678f, 0.011460f, 0.011317f, 0.011228f, 0.011169f, 0.011117f, 0.011051f, 0.010951f, 0.010802f, 0.010592f, 0.010311f, 0.009957f, 0.009530f, 0.009035f, 0.008482f, 0.007882f, 0.007252f, 0.006607f, 0.005968f, 0.005352f, 0.004777f, 0.004260f, 0.003816f, 0.003455f, 0.003186f, 0.003012f, 0.002933f, 0.002945f, 0.003039f, 0.003203f, 0.003423f, 0.003681f, 0.003957f, 0.004231f, 0.004482f, 0.004693f, 0.004843f, 0.004920f, 0.004909f, 0.004804f, 0.004600f, 0.004297f, 0.003901f, 0.003419f, 0.002867f, 0.002259f, 0.001617f, 0.000961f, 0.000314f, -0.000300f, -0.000859f, -0.001341f, -0.001728f, -0.002005f, -0.002161f, -0.002188f, -0.002085f, -0.001854f, -0.001504f, -0.001048f, -0.000501f, 0.000114f, 0.000775f, 0.001455f, 0.002127f, 0.002765f, 0.003342f, 0.003835f, 0.004222f, 0.004485f, 0.004613f, 0.004596f, 0.004433f, 0.004127f, 0.003686f, 0.003124f, 0.002460f, 0.001716f, 0.000917f, 0.000093f, + -0.000728f, -0.001515f, -0.002241f, -0.002879f, -0.003406f, -0.003801f, -0.004051f, -0.004146f, -0.004082f, -0.003861f, -0.003492f, -0.002988f, -0.002368f, -0.001654f, -0.000873f, -0.000055f, 0.000770f, 0.001572f, 0.002319f, 0.002985f, 0.003543f, 0.003974f, 0.004260f, 0.004391f, 0.004362f, 0.004174f, 0.003834f, 0.003355f, 0.002754f, 0.002054f, 0.001281f, 0.000466f, -0.000363f, -0.001173f, -0.001934f, -0.002618f, -0.003198f, -0.003654f, -0.003967f, -0.004127f, -0.004128f, -0.003969f, -0.003658f, -0.003206f, -0.002631f, -0.001955f, -0.001204f, -0.000406f, -0.017226f, -0.012013f, 0.028321f, 0.030423f, 0.022893f, 0.033501f, 0.060821f, 0.088080f, 0.112243f, -0.154253f, -0.203443f, -0.058316f, 0.012445f, -0.055654f, -0.021804f, 0.008967f, -0.035061f, -0.095283f, 0.000718f, -0.050392f, 0.018996f, 0.055789f, -0.032982f, 0.007091f, -0.094774f, -0.026985f, -0.048263f, 0.071591f, 0.107635f, -0.011283f, -0.017843f, -0.025335f, 0.054642f, 0.015553f, -0.014738f, -0.028520f, -0.050245f, -0.062858f, 0.068352f, 0.030551f, 0.019679f, -0.052072f, -0.057232f, -0.021821f, 0.070286f, 0.113515f, 0.071628f, -0.027134f, + 0.012002f, -0.068095f, -0.094405f, -0.068474f, 0.058745f, 0.073551f, 0.048971f, -0.047774f, -0.095484f, -0.136276f, 0.020782f, 0.008228f, 0.156104f, 0.089359f, -0.090499f, -0.174599f, -0.045334f, -0.164127f, -0.055132f, 0.122527f, 0.092643f, 0.072552f, -0.080633f, -0.116478f, -0.056780f, 0.140743f, 0.260926f, 0.168795f, 0.133615f, 0.060155f, -0.178317f, -0.217051f, 0.005971f, 0.165801f, 0.140198f, 0.114298f, 0.209628f, -0.119419f, -0.231336f, -0.219009f, -0.076439f, 0.087801f, 0.201419f, 0.123932f, -0.079096f, -0.213570f, -0.193245f, -0.071682f, 0.105801f, 0.155119f, -0.036797f, -0.147391f, -0.158791f, -0.027849f, 0.132063f, 0.217392f, 0.063462f, -0.120396f, -0.255590f, -0.137794f, 0.053665f, 0.330210f, 0.344688f, 0.158570f, -0.200625f, -0.367654f, -0.189377f, 0.125986f, 0.191932f, 0.177880f, 0.044655f, -0.177784f, -0.243707f, -0.166341f, 0.059203f, 0.181411f, 0.141760f, 0.105250f, -0.101497f, -0.204489f, -0.162081f, -0.018700f, 0.128499f, 0.199396f, 0.101125f, -0.091973f, -0.230468f, -0.135103f, 0.041913f, 0.203133f, 0.185174f, 0.090538f, -0.079898f, -0.180571f, -0.130038f, 0.027597f, + 0.089495f, 0.090417f, 0.024452f, 0.007223f, -0.068041f, -0.110296f, -0.065420f, 0.023719f, 0.095513f, 0.089005f, -0.002369f, -0.124344f, -0.110889f, -0.042596f, 0.026849f, 0.096845f, 0.081131f, 0.002341f, -0.095227f, -0.102042f, -0.044684f, 0.010971f, 0.063710f, 0.034114f, 0.001677f, -0.030173f, -0.013740f, 0.000268f, 0.021227f, 0.043999f, 0.001913f, -0.026924f, -0.041319f, 0.015041f, 0.054437f, 0.130356f, -0.047521f, -0.167756f, -0.184390f, -0.033196f, 0.121109f, 0.184845f, 0.054031f, -0.118381f, -0.199260f, -0.079203f, 0.103129f, 0.191235f, 0.059463f, -0.122197f, -0.182977f, -0.024420f, 0.135288f, 0.134242f, -0.050368f, -0.146347f, -0.040904f, 0.109526f, 0.032549f, -0.056726f, -0.019439f, 0.025118f, -0.005572f, -0.001777f, -0.007640f, -0.000271f, -0.005556f, 0.003630f, -0.004957f, 0.004408f, -0.004800f, 0.003228f, -0.002972f, 0.004344f, -0.003459f, 0.002986f, -0.006276f, 0.004350f, -0.002435f, 0.004030f, -0.004971f, 0.003604f, -0.005546f, 0.007147f, -0.005138f, 0.005555f, -0.006601f, 0.002204f, -0.005298f, 0.004820f, -0.003456f, 0.001146f, -0.004085f, 0.002134f, -0.001776f, 0.006348f} + }, + { + {0.002823f, 0.008389f, 0.013718f, 0.018663f, 0.023087f, 0.026869f, 0.029913f, 0.032143f, 0.033511f, 0.033996f, 0.033606f, 0.032375f, 0.030364f, 0.027658f, 0.024363f, 0.020601f, 0.016506f, 0.012223f, 0.007896f, 0.003669f, -0.000321f, -0.003949f, -0.007105f, -0.009700f, -0.011666f, -0.012957f, -0.013555f, -0.013467f, -0.012723f, -0.011378f, -0.009508f, -0.007205f, -0.004577f, -0.001742f, 0.001176f, 0.004055f, 0.006772f, 0.009215f, 0.011282f, 0.012888f, 0.013963f, 0.014463f, 0.014361f, 0.013656f, 0.012367f, 0.010538f, 0.008230f, 0.005521f, 0.002507f, -0.000709f, -0.004016f, -0.007300f, -0.010448f, -0.013354f, -0.015920f, -0.018061f, -0.019709f, -0.020812f, -0.021339f, -0.021280f, -0.020645f, -0.019465f, -0.017788f, -0.015681f, -0.013224f, -0.010508f, -0.007634f, -0.004703f, -0.001820f, 0.000915f, 0.003409f, 0.005581f, 0.007360f, 0.008693f, 0.009542f, 0.009890f, 0.009735f, 0.009098f, 0.008012f, 0.006530f, 0.004715f, 0.002644f, 0.000400f, -0.001930f, -0.004255f, -0.006490f, -0.008552f, -0.010368f, -0.011876f, -0.013026f, -0.013783f, -0.014130f, -0.014062f, -0.013593f, -0.012752f, -0.011581f, + -0.010133f, -0.008474f, -0.006673f, -0.004805f, -0.002947f, -0.001172f, 0.000449f, 0.001855f, 0.002993f, 0.003823f, 0.004317f, 0.004461f, 0.004257f, 0.003718f, 0.002874f, 0.001765f, 0.000442f, -0.001035f, -0.002601f, -0.004187f, -0.005723f, -0.007142f, -0.008382f, -0.009387f, -0.010111f, -0.010518f, -0.010586f, -0.010304f, -0.009677f, -0.008721f, -0.007466f, -0.005953f, -0.004231f, -0.002360f, -0.000403f, 0.001572f, 0.003499f, 0.005312f, 0.006948f, 0.008354f, 0.009484f, 0.010301f, 0.010781f, 0.010912f, 0.010694f, 0.010139f, 0.009271f, 0.008126f, 0.006747f, 0.005185f, 0.003497f, 0.001744f, -0.000014f, -0.001718f, -0.003312f, -0.004745f, -0.005974f, -0.006966f, -0.007695f, -0.008148f, -0.008322f, -0.008224f, -0.007872f, -0.007293f, -0.006522f, -0.005599f, -0.004569f, -0.003480f, -0.002381f, -0.001318f, -0.000335f, 0.000531f, 0.001246f, 0.001787f, 0.002138f, 0.002292f, 0.002251f, 0.002026f, 0.001637f, 0.001110f, 0.000477f, -0.000225f, -0.000958f, -0.001679f, -0.002351f, -0.002936f, -0.003401f, -0.003718f, -0.003867f, -0.003834f, -0.003615f, -0.003212f, -0.002637f, -0.001909f, -0.001054f, -0.000104f, + 0.000904f, 0.001932f, 0.002939f, 0.003884f, 0.004730f, 0.005443f, 0.005992f, 0.006355f, 0.006517f, 0.006469f, 0.006213f, 0.005757f, 0.005118f, 0.004320f, 0.003395f, 0.002378f, 0.001308f, 0.000226f, -0.000824f, -0.001802f, -0.002672f, -0.003398f, -0.003953f, -0.004317f, -0.004477f, -0.004427f, -0.004171f, -0.003721f, -0.003096f, -0.002324f, -0.001436f, -0.000471f, 0.000533f, 0.001532f, 0.002486f, 0.003354f, 0.004101f, 0.004694f, 0.005110f, 0.005330f, 0.005344f, 0.005150f, 0.004755f, 0.004175f, 0.003431f, 0.002551f, 0.001572f, 0.000531f, -0.025688f, 0.026915f, -0.008551f, -0.003691f, -0.022601f, -0.000660f, -0.156528f, -0.111393f, 0.028493f, 0.108824f, 0.104758f, 0.065063f, 0.026530f, 0.213562f, 0.082655f, -0.061031f, -0.117392f, -0.066242f, 0.072011f, 0.041473f, -0.014914f, -0.097632f, -0.041251f, -0.081319f, 0.004432f, 0.010078f, 0.037392f, 0.044746f, 0.051890f, -0.005366f, -0.064750f, -0.128326f, -0.085975f, 0.083484f, 0.137437f, 0.073582f, 0.001098f, -0.053269f, -0.120250f, 0.054962f, 0.016628f, -0.181935f, -0.023235f, -0.049819f, 0.135352f, 0.140517f, 0.115850f, -0.150025f, + -0.246660f, -0.254713f, 0.010057f, 0.217888f, 0.425324f, 0.170587f, -0.000894f, -0.366132f, -0.390544f, -0.248375f, 0.184205f, 0.154963f, 0.288394f, 0.122914f, -0.153765f, -0.193585f, -0.006970f, -0.150889f, -0.112666f, -0.021523f, -0.064199f, -0.061539f, -0.070544f, 0.060940f, 0.154890f, 0.167767f, 0.034782f, -0.101531f, -0.250810f, -0.230540f, 0.019017f, 0.347077f, 0.277001f, 0.085076f, -0.242863f, -0.095458f, -0.042193f, 0.130637f, 0.092155f, -0.057397f, -0.199128f, -0.145930f, 0.044730f, 0.234143f, 0.243780f, 0.023978f, -0.278476f, -0.308623f, -0.219451f, 0.162768f, 0.334214f, 0.210667f, -0.033177f, -0.258524f, -0.246503f, -0.028790f, 0.263949f, 0.345040f, 0.216509f, -0.075180f, -0.255710f, -0.257503f, -0.115401f, 0.083209f, 0.221638f, 0.156401f, -0.024868f, -0.200868f, -0.087228f, 0.018970f, 0.088801f, 0.115951f, 0.072505f, -0.017732f, -0.009354f, -0.023435f, -0.018067f, 0.014657f, 0.031956f, 0.057493f, 0.079698f, 0.112267f, 0.000138f, -0.113165f, -0.157296f, -0.056569f, 0.107155f, 0.278913f, 0.245623f, 0.007285f, -0.245854f, -0.298588f, -0.180016f, 0.096249f, 0.281524f, 0.268503f, + 0.076388f, -0.160191f, -0.288207f, -0.124868f, 0.152759f, 0.261110f, 0.166910f, -0.006599f, -0.177852f, -0.162466f, -0.039010f, 0.089040f, 0.132594f, 0.118348f, 0.001736f, -0.111109f, -0.102237f, -0.018782f, 0.077950f, 0.136106f, 0.067304f, -0.033510f, -0.146148f, -0.119064f, -0.014996f, 0.123470f, 0.149227f, 0.065867f, -0.056608f, -0.146168f, -0.095006f, -0.020288f, 0.077417f, 0.084737f, 0.060939f, -0.093503f, -0.197415f, -0.057628f, 0.116799f, 0.213634f, 0.084091f, -0.102030f, -0.200069f, -0.070761f, 0.108761f, 0.181640f, 0.047338f, -0.102865f, -0.140615f, -0.008568f, 0.099425f, 0.097485f, -0.022045f, -0.079000f, -0.045199f, 0.048425f, 0.054467f, -0.007508f, -0.041201f, 0.012327f, 0.007542f, 0.002916f, -0.005532f, 0.005379f, -0.002943f, 0.005489f, -0.002093f, 0.006741f, -0.002504f, 0.004367f, -0.005957f, 0.003284f, -0.003766f, 0.004741f, -0.004155f, 0.006042f, -0.003084f, 0.006195f, -0.001465f, 0.004644f, -0.006098f, 0.005356f, -0.003579f, 0.005223f, -0.004932f, 0.004642f, -0.004095f, 0.004139f, -0.004242f, 0.005984f, -0.005431f, 0.003672f, -0.004344f, 0.005198f, -0.003723f, 0.004351f}, + {-0.002823f, -0.008389f, -0.013718f, -0.018663f, -0.023087f, -0.026869f, -0.029913f, -0.032143f, -0.033511f, -0.033996f, -0.033606f, -0.032375f, -0.030364f, -0.027658f, -0.024363f, -0.020601f, -0.016506f, -0.012223f, -0.007896f, -0.003669f, 0.000321f, 0.003949f, 0.007105f, 0.009700f, 0.011666f, 0.012957f, 0.013555f, 0.013467f, 0.012723f, 0.011378f, 0.009508f, 0.007205f, 0.004577f, 0.001742f, -0.001176f, -0.004055f, -0.006772f, -0.009215f, -0.011282f, -0.012888f, -0.013963f, -0.014463f, -0.014361f, -0.013656f, -0.012367f, -0.010538f, -0.008230f, -0.005521f, -0.002507f, 0.000709f, 0.004016f, 0.007300f, 0.010448f, 0.013354f, 0.015920f, 0.018061f, 0.019709f, 0.020812f, 0.021339f, 0.021280f, 0.020645f, 0.019465f, 0.017788f, 0.015681f, 0.013224f, 0.010508f, 0.007634f, 0.004703f, 0.001820f, -0.000915f, -0.003409f, -0.005581f, -0.007360f, -0.008693f, -0.009542f, -0.009890f, -0.009735f, -0.009098f, -0.008012f, -0.006530f, -0.004715f, -0.002644f, -0.000400f, 0.001930f, 0.004255f, 0.006490f, 0.008552f, 0.010368f, 0.011876f, 0.013026f, 0.013783f, 0.014130f, 0.014062f, 0.013593f, 0.012752f, 0.011581f, + 0.010133f, 0.008474f, 0.006673f, 0.004805f, 0.002947f, 0.001172f, -0.000449f, -0.001855f, -0.002993f, -0.003823f, -0.004317f, -0.004461f, -0.004257f, -0.003718f, -0.002874f, -0.001765f, -0.000442f, 0.001035f, 0.002601f, 0.004187f, 0.005723f, 0.007142f, 0.008382f, 0.009387f, 0.010111f, 0.010518f, 0.010586f, 0.010304f, 0.009677f, 0.008721f, 0.007466f, 0.005953f, 0.004231f, 0.002360f, 0.000403f, -0.001572f, -0.003499f, -0.005312f, -0.006948f, -0.008354f, -0.009484f, -0.010301f, -0.010781f, -0.010912f, -0.010694f, -0.010139f, -0.009271f, -0.008126f, -0.006747f, -0.005185f, -0.003497f, -0.001744f, 0.000014f, 0.001718f, 0.003312f, 0.004745f, 0.005974f, 0.006966f, 0.007695f, 0.008148f, 0.008322f, 0.008224f, 0.007872f, 0.007293f, 0.006522f, 0.005599f, 0.004569f, 0.003480f, 0.002381f, 0.001318f, 0.000335f, -0.000531f, -0.001246f, -0.001787f, -0.002138f, -0.002292f, -0.002251f, -0.002026f, -0.001637f, -0.001110f, -0.000477f, 0.000225f, 0.000958f, 0.001679f, 0.002351f, 0.002936f, 0.003401f, 0.003718f, 0.003867f, 0.003834f, 0.003615f, 0.003212f, 0.002637f, 0.001909f, 0.001054f, 0.000104f, + -0.000904f, -0.001932f, -0.002939f, -0.003884f, -0.004730f, -0.005443f, -0.005992f, -0.006355f, -0.006517f, -0.006469f, -0.006213f, -0.005757f, -0.005118f, -0.004320f, -0.003395f, -0.002378f, -0.001308f, -0.000226f, 0.000824f, 0.001802f, 0.002672f, 0.003398f, 0.003953f, 0.004317f, 0.004477f, 0.004427f, 0.004171f, 0.003721f, 0.003096f, 0.002324f, 0.001436f, 0.000471f, -0.000533f, -0.001532f, -0.002486f, -0.003354f, -0.004101f, -0.004694f, -0.005110f, -0.005330f, -0.005344f, -0.005150f, -0.004755f, -0.004175f, -0.003431f, -0.002551f, -0.001572f, -0.000531f, 0.025688f, -0.026915f, 0.008551f, 0.003691f, 0.022601f, 0.000660f, 0.156528f, 0.111393f, -0.028493f, -0.108824f, -0.104758f, -0.065063f, -0.026530f, -0.213562f, -0.082655f, 0.061031f, 0.117392f, 0.066242f, -0.072011f, -0.041473f, 0.014914f, 0.097632f, 0.041251f, 0.081319f, -0.004432f, -0.010078f, -0.037392f, -0.044746f, -0.051890f, 0.005366f, 0.064750f, 0.128326f, 0.085975f, -0.083484f, -0.137437f, -0.073582f, -0.001098f, 0.053269f, 0.120250f, -0.054962f, -0.016628f, 0.181935f, 0.023235f, 0.049819f, -0.135352f, -0.140517f, -0.115850f, 0.150025f, + 0.246660f, 0.254713f, -0.010057f, -0.217888f, -0.425324f, -0.170587f, 0.000894f, 0.366132f, 0.390544f, 0.248375f, -0.184205f, -0.154963f, -0.288394f, -0.122914f, 0.153765f, 0.193585f, 0.006970f, 0.150889f, 0.112666f, 0.021523f, 0.064199f, 0.061539f, 0.070544f, -0.060940f, -0.154890f, -0.167767f, -0.034782f, 0.101531f, 0.250810f, 0.230540f, -0.019017f, -0.347077f, -0.277001f, -0.085076f, 0.242863f, 0.095458f, 0.042193f, -0.130637f, -0.092155f, 0.057397f, 0.199128f, 0.145930f, -0.044730f, -0.234143f, -0.243780f, -0.023978f, 0.278476f, 0.308623f, 0.219451f, -0.162768f, -0.334214f, -0.210667f, 0.033177f, 0.258524f, 0.246503f, 0.028790f, -0.263949f, -0.345040f, -0.216509f, 0.075180f, 0.255710f, 0.257503f, 0.115401f, -0.083209f, -0.221638f, -0.156401f, 0.024868f, 0.200868f, 0.087228f, -0.018970f, -0.088801f, -0.115951f, -0.072505f, 0.017732f, 0.009354f, 0.023435f, 0.018067f, -0.014657f, -0.031956f, -0.057493f, -0.079698f, -0.112267f, -0.000138f, 0.113165f, 0.157296f, 0.056569f, -0.107155f, -0.278913f, -0.245623f, -0.007285f, 0.245854f, 0.298588f, 0.180016f, -0.096249f, -0.281524f, -0.268503f, + -0.076388f, 0.160191f, 0.288207f, 0.124868f, -0.152759f, -0.261110f, -0.166910f, 0.006599f, 0.177852f, 0.162466f, 0.039010f, -0.089040f, -0.132594f, -0.118348f, -0.001736f, 0.111109f, 0.102237f, 0.018782f, -0.077950f, -0.136106f, -0.067304f, 0.033510f, 0.146148f, 0.119064f, 0.014996f, -0.123470f, -0.149227f, -0.065867f, 0.056608f, 0.146168f, 0.095006f, 0.020288f, -0.077417f, -0.084737f, -0.060939f, 0.093503f, 0.197415f, 0.057628f, -0.116799f, -0.213634f, -0.084091f, 0.102030f, 0.200069f, 0.070761f, -0.108761f, -0.181640f, -0.047338f, 0.102865f, 0.140615f, 0.008568f, -0.099425f, -0.097485f, 0.022045f, 0.079000f, 0.045199f, -0.048425f, -0.054467f, 0.007508f, 0.041201f, -0.012327f, -0.007542f, -0.002916f, 0.005532f, -0.005379f, 0.002943f, -0.005489f, 0.002093f, -0.006741f, 0.002504f, -0.004367f, 0.005957f, -0.003284f, 0.003766f, -0.004741f, 0.004155f, -0.006042f, 0.003084f, -0.006195f, 0.001465f, -0.004644f, 0.006098f, -0.005356f, 0.003579f, -0.005223f, 0.004932f, -0.004642f, 0.004095f, -0.004139f, 0.004242f, -0.005984f, 0.005431f, -0.003672f, 0.004344f, -0.005198f, 0.003723f, -0.004351f} + }, + { + {0.001322f, 0.003935f, 0.006454f, 0.008823f, 0.010990f, 0.012913f, 0.014559f, 0.015910f, 0.016958f, 0.017708f, 0.018180f, 0.018402f, 0.018417f, 0.018273f, 0.018026f, 0.017734f, 0.017457f, 0.017253f, 0.017173f, 0.017263f, 0.017556f, 0.018075f, 0.018827f, 0.019806f, 0.020989f, 0.022340f, 0.023806f, 0.025324f, 0.026820f, 0.028211f, 0.029412f, 0.030333f, 0.030889f, 0.031000f, 0.030596f, 0.029620f, 0.028029f, 0.025801f, 0.022932f, 0.019439f, 0.015364f, 0.010767f, 0.005729f, 0.000352f, -0.005250f, -0.010946f, -0.016601f, -0.022070f, -0.027213f, -0.031890f, -0.035972f, -0.039343f, -0.041903f, -0.043576f, -0.044305f, -0.044062f, -0.042844f, -0.040677f, -0.037614f, -0.033732f, -0.029132f, -0.023937f, -0.018286f, -0.012331f, -0.006230f, -0.000148f, 0.005754f, 0.011323f, 0.016416f, 0.020904f, 0.024682f, 0.027663f, 0.029787f, 0.031022f, 0.031361f, 0.030824f, 0.029458f, 0.027331f, 0.024536f, 0.021179f, 0.017383f, 0.013279f, 0.009000f, 0.004684f, 0.000460f, -0.003551f, -0.007238f, -0.010511f, -0.013294f, -0.015534f, -0.017202f, -0.018289f, -0.018808f, -0.018794f, -0.018299f, -0.017394f, + -0.016159f, -0.014687f, -0.013074f, -0.011419f, -0.009818f, -0.008360f, -0.007125f, -0.006182f, -0.005580f, -0.005356f, -0.005525f, -0.006084f, -0.007015f, -0.008277f, -0.009817f, -0.011568f, -0.013452f, -0.015384f, -0.017274f, -0.019033f, -0.020574f, -0.021819f, -0.022695f, -0.023147f, -0.023132f, -0.022623f, -0.021611f, -0.020105f, -0.018133f, -0.015736f, -0.012973f, -0.009914f, -0.006640f, -0.003239f, 0.000198f, 0.003579f, 0.006813f, 0.009818f, 0.012520f, 0.014855f, 0.016775f, 0.018244f, 0.019247f, 0.019780f, 0.019859f, 0.019513f, 0.018788f, 0.017739f, 0.016430f, 0.014934f, 0.013327f, 0.011684f, 0.010080f, 0.008584f, 0.007256f, 0.006146f, 0.005294f, 0.004724f, 0.004447f, 0.004460f, 0.004745f, 0.005272f, 0.005999f, 0.006873f, 0.007837f, 0.008825f, 0.009773f, 0.010616f, 0.011293f, 0.011749f, 0.011938f, 0.011825f, 0.011387f, 0.010615f, 0.009512f, 0.008099f, 0.006405f, 0.004475f, 0.002364f, 0.000133f, -0.002148f, -0.004406f, -0.006569f, -0.008566f, -0.010332f, -0.011806f, -0.012942f, -0.013701f, -0.014060f, -0.014009f, -0.013554f, -0.012712f, -0.011516f, -0.010013f, -0.008257f, -0.006312f, + -0.004251f, -0.002146f, -0.000073f, 0.001895f, 0.003690f, 0.005252f, 0.006529f, 0.007482f, 0.008083f, 0.008319f, 0.008192f, 0.007716f, 0.006918f, 0.005840f, 0.004531f, 0.003050f, 0.001461f, -0.000167f, -0.001766f, -0.003271f, -0.004619f, -0.005755f, -0.006635f, -0.007225f, -0.007501f, -0.007454f, -0.007090f, -0.006424f, -0.005486f, -0.004316f, -0.002964f, -0.001486f, 0.000056f, 0.001598f, 0.003076f, 0.004430f, 0.005603f, 0.006548f, 0.007227f, 0.007610f, 0.007683f, 0.007443f, 0.006899f, 0.006074f, 0.005002f, 0.003726f, 0.002298f, 0.000777f, -0.030696f, 0.010079f, -0.038675f, 0.012582f, -0.040801f, 0.045322f, 0.035278f, -0.097745f, -0.078951f, 0.014559f, -0.086888f, -0.091152f, 0.053565f, -0.108519f, -0.285451f, -0.115492f, 0.174039f, 0.213796f, 0.243672f, -0.145965f, 0.017388f, 0.185458f, 0.179834f, -0.035021f, -0.162928f, -0.117639f, -0.077068f, 0.058654f, 0.229831f, 0.175223f, 0.046760f, -0.150464f, -0.165831f, -0.118794f, 0.039510f, 0.116700f, 0.173975f, 0.016928f, -0.057488f, -0.115028f, -0.092878f, 0.005873f, 0.141806f, 0.125902f, 0.030814f, -0.131927f, -0.150309f, -0.081015f, + -0.030206f, 0.022789f, 0.121464f, 0.113373f, 0.153768f, 0.011404f, -0.081105f, -0.307289f, -0.230855f, -0.079987f, 0.219398f, 0.020953f, 0.139568f, 0.076876f, -0.106696f, -0.202691f, -0.072874f, -0.212543f, -0.238707f, 0.008286f, 0.086439f, 0.133956f, -0.003077f, -0.030179f, -0.044500f, 0.169272f, 0.012399f, 0.043748f, -0.335844f, -0.427871f, 0.029599f, 0.301234f, 0.250250f, 0.067467f, -0.179678f, -0.363815f, -0.593776f, -0.157676f, 0.327665f, 0.584992f, 0.348499f, -0.048251f, -0.391810f, -0.372665f, -0.160141f, 0.241420f, 0.352707f, 0.236621f, -0.001022f, -0.134055f, -0.053121f, 0.141937f, 0.146798f, -0.055752f, -0.132145f, -0.096131f, 0.042013f, 0.164349f, 0.158217f, 0.000641f, -0.119515f, -0.161831f, -0.052040f, 0.024591f, 0.117203f, 0.055545f, -0.216649f, -0.214301f, -0.030497f, 0.038761f, 0.075765f, 0.040536f, -0.036389f, -0.103000f, -0.034191f, 0.044298f, 0.034372f, 0.036930f, 0.015048f, 0.003259f, -0.027983f, 0.049992f, 0.082727f, 0.012939f, -0.043868f, -0.091831f, -0.011452f, 0.085173f, 0.104380f, 0.071771f, 0.001449f, -0.092150f, -0.112132f, 0.005303f, 0.141831f, 0.155707f, + 0.010751f, -0.163970f, -0.245046f, -0.148464f, 0.078076f, 0.270186f, 0.300173f, 0.099280f, -0.205232f, -0.380479f, -0.317213f, 0.056430f, 0.345089f, 0.427063f, 0.189260f, -0.159506f, -0.416259f, -0.340820f, -0.060319f, 0.260954f, 0.388964f, 0.267633f, -0.113508f, -0.379353f, -0.350004f, -0.086303f, 0.208950f, 0.285451f, 0.142200f, -0.078494f, -0.215562f, -0.149965f, 0.034041f, 0.192228f, 0.234471f, 0.017520f, -0.298944f, -0.295611f, -0.045851f, 0.268164f, 0.308789f, 0.082452f, -0.227730f, -0.294581f, -0.082215f, 0.211627f, 0.266252f, 0.067987f, -0.185676f, -0.223757f, -0.027744f, 0.188095f, 0.173846f, -0.024262f, -0.178182f, -0.080763f, 0.112276f, 0.111610f, -0.054879f, -0.058273f, 0.025991f, 0.023344f, -0.007588f, 0.000557f, -0.001454f, 0.002463f, 0.000901f, 0.003014f, -0.002952f, 0.000982f, 0.000588f, 0.004419f, -0.000529f, -0.000775f, -0.001110f, 0.001083f, 0.000192f, 0.003196f, -0.001687f, -0.001023f, -0.001387f, 0.003966f, -0.002321f, 0.005528f, -0.002013f, -0.000908f, -0.004451f, 0.001728f, 0.001047f, 0.002773f, -0.001200f, 0.002569f, -0.001884f, 0.003416f, -0.005666f, 0.000214f}, + {0.001322f, 0.003935f, 0.006454f, 0.008823f, 0.010990f, 0.012913f, 0.014559f, 0.015910f, 0.016958f, 0.017708f, 0.018180f, 0.018402f, 0.018417f, 0.018273f, 0.018026f, 0.017734f, 0.017457f, 0.017253f, 0.017173f, 0.017263f, 0.017556f, 0.018075f, 0.018827f, 0.019806f, 0.020989f, 0.022340f, 0.023806f, 0.025324f, 0.026820f, 0.028211f, 0.029412f, 0.030333f, 0.030889f, 0.031000f, 0.030596f, 0.029620f, 0.028029f, 0.025801f, 0.022932f, 0.019439f, 0.015364f, 0.010767f, 0.005729f, 0.000352f, -0.005250f, -0.010946f, -0.016601f, -0.022070f, -0.027213f, -0.031890f, -0.035972f, -0.039343f, -0.041903f, -0.043576f, -0.044305f, -0.044062f, -0.042844f, -0.040677f, -0.037614f, -0.033732f, -0.029132f, -0.023937f, -0.018286f, -0.012331f, -0.006230f, -0.000148f, 0.005754f, 0.011323f, 0.016416f, 0.020904f, 0.024682f, 0.027663f, 0.029787f, 0.031022f, 0.031361f, 0.030824f, 0.029458f, 0.027331f, 0.024536f, 0.021179f, 0.017383f, 0.013279f, 0.009000f, 0.004684f, 0.000460f, -0.003551f, -0.007238f, -0.010511f, -0.013294f, -0.015534f, -0.017202f, -0.018289f, -0.018808f, -0.018794f, -0.018299f, -0.017394f, + -0.016159f, -0.014687f, -0.013074f, -0.011419f, -0.009818f, -0.008360f, -0.007125f, -0.006182f, -0.005580f, -0.005356f, -0.005525f, -0.006084f, -0.007015f, -0.008277f, -0.009817f, -0.011568f, -0.013452f, -0.015384f, -0.017274f, -0.019033f, -0.020574f, -0.021819f, -0.022695f, -0.023147f, -0.023132f, -0.022623f, -0.021611f, -0.020105f, -0.018133f, -0.015736f, -0.012973f, -0.009914f, -0.006640f, -0.003239f, 0.000198f, 0.003579f, 0.006813f, 0.009818f, 0.012520f, 0.014855f, 0.016775f, 0.018244f, 0.019247f, 0.019780f, 0.019859f, 0.019513f, 0.018788f, 0.017739f, 0.016430f, 0.014934f, 0.013327f, 0.011684f, 0.010080f, 0.008584f, 0.007256f, 0.006146f, 0.005294f, 0.004724f, 0.004447f, 0.004460f, 0.004745f, 0.005272f, 0.005999f, 0.006873f, 0.007837f, 0.008825f, 0.009773f, 0.010616f, 0.011293f, 0.011749f, 0.011938f, 0.011825f, 0.011387f, 0.010615f, 0.009512f, 0.008099f, 0.006405f, 0.004475f, 0.002364f, 0.000133f, -0.002148f, -0.004406f, -0.006569f, -0.008566f, -0.010332f, -0.011806f, -0.012942f, -0.013701f, -0.014060f, -0.014009f, -0.013554f, -0.012712f, -0.011516f, -0.010013f, -0.008257f, -0.006312f, + -0.004251f, -0.002146f, -0.000073f, 0.001895f, 0.003690f, 0.005252f, 0.006529f, 0.007482f, 0.008083f, 0.008319f, 0.008192f, 0.007716f, 0.006918f, 0.005840f, 0.004531f, 0.003050f, 0.001461f, -0.000167f, -0.001766f, -0.003271f, -0.004619f, -0.005755f, -0.006635f, -0.007225f, -0.007501f, -0.007454f, -0.007090f, -0.006424f, -0.005486f, -0.004316f, -0.002964f, -0.001486f, 0.000056f, 0.001598f, 0.003076f, 0.004430f, 0.005603f, 0.006548f, 0.007227f, 0.007610f, 0.007683f, 0.007443f, 0.006899f, 0.006074f, 0.005002f, 0.003726f, 0.002298f, 0.000777f, -0.030696f, 0.010079f, -0.038675f, 0.012582f, -0.040801f, 0.045322f, 0.035278f, -0.097745f, -0.078951f, 0.014559f, -0.086888f, -0.091152f, 0.053565f, -0.108519f, -0.285451f, -0.115492f, 0.174039f, 0.213796f, 0.243672f, -0.145965f, 0.017388f, 0.185458f, 0.179834f, -0.035021f, -0.162928f, -0.117639f, -0.077068f, 0.058654f, 0.229831f, 0.175223f, 0.046760f, -0.150464f, -0.165831f, -0.118794f, 0.039510f, 0.116700f, 0.173975f, 0.016928f, -0.057488f, -0.115028f, -0.092878f, 0.005873f, 0.141806f, 0.125902f, 0.030814f, -0.131927f, -0.150309f, -0.081015f, + -0.030206f, 0.022789f, 0.121464f, 0.113373f, 0.153768f, 0.011404f, -0.081105f, -0.307289f, -0.230855f, -0.079987f, 0.219398f, 0.020953f, 0.139568f, 0.076876f, -0.106696f, -0.202691f, -0.072874f, -0.212543f, -0.238707f, 0.008286f, 0.086439f, 0.133956f, -0.003077f, -0.030179f, -0.044500f, 0.169272f, 0.012399f, 0.043748f, -0.335844f, -0.427871f, 0.029599f, 0.301234f, 0.250250f, 0.067467f, -0.179678f, -0.363815f, -0.593776f, -0.157676f, 0.327665f, 0.584992f, 0.348499f, -0.048251f, -0.391810f, -0.372665f, -0.160141f, 0.241420f, 0.352707f, 0.236621f, -0.001022f, -0.134055f, -0.053121f, 0.141937f, 0.146798f, -0.055752f, -0.132145f, -0.096131f, 0.042013f, 0.164349f, 0.158217f, 0.000641f, -0.119515f, -0.161831f, -0.052040f, 0.024591f, 0.117203f, 0.055545f, -0.216649f, -0.214301f, -0.030497f, 0.038761f, 0.075765f, 0.040536f, -0.036389f, -0.103000f, -0.034191f, 0.044298f, 0.034372f, 0.036930f, 0.015048f, 0.003259f, -0.027983f, 0.049992f, 0.082727f, 0.012939f, -0.043868f, -0.091831f, -0.011452f, 0.085173f, 0.104380f, 0.071771f, 0.001449f, -0.092150f, -0.112132f, 0.005303f, 0.141831f, 0.155707f, + 0.010751f, -0.163970f, -0.245046f, -0.148464f, 0.078076f, 0.270186f, 0.300173f, 0.099280f, -0.205232f, -0.380479f, -0.317213f, 0.056430f, 0.345089f, 0.427063f, 0.189260f, -0.159506f, -0.416259f, -0.340820f, -0.060319f, 0.260954f, 0.388964f, 0.267633f, -0.113508f, -0.379353f, -0.350004f, -0.086303f, 0.208950f, 0.285451f, 0.142200f, -0.078494f, -0.215562f, -0.149965f, 0.034041f, 0.192228f, 0.234471f, 0.017520f, -0.298944f, -0.295611f, -0.045851f, 0.268164f, 0.308789f, 0.082452f, -0.227730f, -0.294581f, -0.082215f, 0.211627f, 0.266252f, 0.067987f, -0.185676f, -0.223757f, -0.027744f, 0.188095f, 0.173846f, -0.024262f, -0.178182f, -0.080763f, 0.112276f, 0.111610f, -0.054879f, -0.058273f, 0.025991f, 0.023344f, -0.007588f, 0.000557f, -0.001454f, 0.002463f, 0.000901f, 0.003014f, -0.002952f, 0.000982f, 0.000588f, 0.004419f, -0.000529f, -0.000775f, -0.001110f, 0.001083f, 0.000192f, 0.003196f, -0.001687f, -0.001023f, -0.001387f, 0.003966f, -0.002321f, 0.005528f, -0.002013f, -0.000908f, -0.004451f, 0.001728f, 0.001047f, 0.002773f, -0.001200f, 0.002569f, -0.001884f, 0.003416f, -0.005666f, 0.000214f} + }, + { + {0.000429f, 0.001272f, 0.002066f, 0.002781f, 0.003390f, 0.003873f, 0.004214f, 0.004402f, 0.004438f, 0.004326f, 0.004079f, 0.003719f, 0.003271f, 0.002769f, 0.002248f, 0.001749f, 0.001312f, 0.000979f, 0.000788f, 0.000775f, 0.000970f, 0.001397f, 0.002072f, 0.003001f, 0.004181f, 0.005599f, 0.007231f, 0.009046f, 0.010999f, 0.013041f, 0.015114f, 0.017154f, 0.019095f, 0.020868f, 0.022405f, 0.023641f, 0.024517f, 0.024978f, 0.024980f, 0.024489f, 0.023484f, 0.021955f, 0.019907f, 0.017361f, 0.014349f, 0.010918f, 0.007130f, 0.003053f, -0.001229f, -0.005629f, -0.010052f, -0.014400f, -0.018576f, -0.022483f, -0.026031f, -0.029135f, -0.031720f, -0.033725f, -0.035098f, -0.035806f, -0.035830f, -0.035166f, -0.033829f, -0.031849f, -0.029272f, -0.026158f, -0.022579f, -0.018619f, -0.014370f, -0.009930f, -0.005400f, -0.000884f, 0.003519f, 0.007712f, 0.011607f, 0.015122f, 0.018190f, 0.020756f, 0.022777f, 0.024227f, 0.025095f, 0.025387f, 0.025121f, 0.024332f, 0.023068f, 0.021387f, 0.019357f, 0.017056f, 0.014564f, 0.011967f, 0.009348f, 0.006792f, 0.004377f, 0.002175f, 0.000251f, -0.001340f, + -0.002556f, -0.003366f, -0.003753f, -0.003712f, -0.003251f, -0.002392f, -0.001169f, 0.000375f, 0.002186f, 0.004204f, 0.006362f, 0.008589f, 0.010814f, 0.012965f, 0.014971f, 0.016768f, 0.018295f, 0.019503f, 0.020346f, 0.020793f, 0.020821f, 0.020419f, 0.019587f, 0.018337f, 0.016691f, 0.014681f, 0.012349f, 0.009745f, 0.006923f, 0.003944f, 0.000874f, -0.002223f, -0.005280f, -0.008234f, -0.011022f, -0.013590f, -0.015885f, -0.017865f, -0.019493f, -0.020743f, -0.021597f, -0.022046f, -0.022090f, -0.021739f, -0.021012f, -0.019933f, -0.018535f, -0.016859f, -0.014948f, -0.012849f, -0.010613f, -0.008293f, -0.005939f, -0.003602f, -0.001332f, 0.000828f, 0.002836f, 0.004656f, 0.006259f, 0.007619f, 0.008720f, 0.009550f, 0.010106f, 0.010389f, 0.010407f, 0.010175f, 0.009711f, 0.009040f, 0.008189f, 0.007188f, 0.006069f, 0.004866f, 0.003613f, 0.002344f, 0.001092f, -0.000114f, -0.001245f, -0.002277f, -0.003189f, -0.003963f, -0.004586f, -0.005050f, -0.005351f, -0.005489f, -0.005468f, -0.005296f, -0.004984f, -0.004547f, -0.004003f, -0.003369f, -0.002667f, -0.001918f, -0.001143f, -0.000364f, 0.000399f, 0.001128f, + 0.001804f, 0.002412f, 0.002941f, 0.003381f, 0.003724f, 0.003967f, 0.004108f, 0.004150f, 0.004096f, 0.003954f, 0.003734f, 0.003444f, 0.003099f, 0.002712f, 0.002295f, 0.001864f, 0.001431f, 0.001011f, 0.000614f, 0.000253f, -0.000065f, -0.000333f, -0.000544f, -0.000697f, -0.000789f, -0.000823f, -0.000802f, -0.000729f, -0.000612f, -0.000459f, -0.000277f, -0.000077f, 0.000132f, 0.000340f, 0.000538f, 0.000717f, 0.000871f, 0.000991f, 0.001075f, 0.001117f, 0.001116f, 0.001073f, 0.000988f, 0.000866f, 0.000710f, 0.000528f, 0.000325f, 0.000110f, 0.004325f, 0.038062f, 0.020580f, -0.024641f, -0.010812f, 0.065193f, 0.106067f, 0.011613f, -0.082134f, -0.198732f, -0.130452f, -0.044671f, 0.099718f, -0.096835f, -0.057591f, -0.027115f, 0.073916f, 0.130933f, 0.339398f, -0.032221f, -0.083327f, -0.075477f, -0.011526f, 0.011000f, 0.186231f, 0.095079f, 0.087461f, -0.057836f, -0.177390f, -0.100523f, -0.090915f, 0.056568f, 0.079578f, 0.127256f, -0.011849f, -0.101805f, -0.152564f, -0.064817f, -0.032282f, 0.024912f, 0.071233f, 0.080544f, -0.003501f, -0.087247f, -0.076317f, -0.035437f, 0.035623f, 0.024788f, + -0.091994f, -0.079745f, 0.020901f, 0.074127f, 0.043623f, 0.064571f, -0.010169f, -0.064132f, -0.009114f, -0.068800f, 0.047633f, -0.142630f, 0.105867f, 0.093698f, -0.096038f, -0.167419f, 0.026841f, -0.110855f, -0.091647f, 0.073117f, -0.032957f, -0.056334f, -0.156696f, -0.014605f, 0.194360f, 0.437939f, 0.198456f, -0.047092f, -0.274072f, -0.198778f, -0.026182f, 0.206621f, 0.301615f, 0.217354f, -0.072622f, -0.197400f, -0.081358f, 0.030432f, 0.033997f, 0.021622f, -0.034318f, -0.063383f, -0.118311f, -0.018524f, 0.101311f, 0.212623f, 0.162632f, 0.016773f, -0.165046f, -0.273346f, -0.193594f, -0.000947f, 0.245901f, 0.378040f, 0.174211f, -0.055126f, -0.339109f, -0.345752f, -0.166324f, 0.090062f, 0.198502f, 0.178359f, 0.053506f, 0.023101f, -0.108601f, 0.021106f, 0.102141f, 0.119987f, -0.125830f, -0.180442f, -0.053532f, 0.089257f, 0.129860f, 0.068003f, -0.005655f, -0.170720f, -0.174745f, -0.116848f, 0.079347f, 0.218131f, 0.247059f, 0.053708f, -0.177930f, -0.357342f, -0.276339f, -0.023190f, 0.259482f, 0.433787f, 0.279328f, -0.065102f, -0.348322f, -0.387358f, -0.207420f, 0.119153f, 0.252331f, 0.194574f, + 0.095594f, -0.038457f, -0.090909f, -0.118740f, -0.055565f, 0.031000f, 0.086467f, 0.084120f, 0.031550f, -0.075907f, -0.066799f, -0.104845f, -0.014430f, 0.057053f, 0.115622f, 0.073755f, -0.050623f, -0.130727f, -0.127212f, -0.045579f, 0.068296f, 0.153761f, 0.099787f, -0.039918f, -0.060346f, -0.051542f, -0.052361f, -0.034906f, 0.018428f, 0.057516f, 0.043171f, 0.014680f, -0.035625f, -0.083127f, -0.036201f, -0.088496f, -0.099303f, 0.059697f, 0.122499f, 0.100904f, -0.025937f, -0.084272f, -0.077960f, 0.016659f, 0.062050f, 0.062134f, -0.001570f, -0.034258f, -0.042715f, -0.004483f, 0.021577f, 0.044006f, 0.013080f, -0.014641f, -0.038426f, -0.002938f, 0.029375f, 0.025165f, -0.023109f, -0.009682f, 0.008798f, 0.010358f, -0.006268f, 0.004481f, -0.003225f, 0.007309f, -0.004619f, 0.004374f, -0.002460f, 0.005010f, -0.003899f, 0.006250f, -0.002826f, 0.004784f, -0.001410f, 0.005846f, -0.006009f, 0.007681f, -0.002530f, 0.001607f, -0.004596f, 0.001338f, -0.004160f, 0.002091f, -0.002249f, 0.002802f, -0.001929f, 0.007748f, -0.004506f, 0.003110f, -0.007015f, 0.005977f, -0.005323f, 0.004130f, -0.003102f, 0.003839f}, + {0.000429f, 0.001272f, 0.002066f, 0.002781f, 0.003390f, 0.003873f, 0.004214f, 0.004402f, 0.004438f, 0.004326f, 0.004079f, 0.003719f, 0.003271f, 0.002769f, 0.002248f, 0.001749f, 0.001312f, 0.000979f, 0.000788f, 0.000775f, 0.000970f, 0.001397f, 0.002072f, 0.003001f, 0.004181f, 0.005599f, 0.007231f, 0.009046f, 0.010999f, 0.013041f, 0.015114f, 0.017154f, 0.019095f, 0.020868f, 0.022405f, 0.023641f, 0.024517f, 0.024978f, 0.024980f, 0.024489f, 0.023484f, 0.021955f, 0.019907f, 0.017361f, 0.014349f, 0.010918f, 0.007130f, 0.003053f, -0.001229f, -0.005629f, -0.010052f, -0.014400f, -0.018576f, -0.022483f, -0.026031f, -0.029135f, -0.031720f, -0.033725f, -0.035098f, -0.035806f, -0.035830f, -0.035166f, -0.033829f, -0.031849f, -0.029272f, -0.026158f, -0.022579f, -0.018619f, -0.014370f, -0.009930f, -0.005400f, -0.000884f, 0.003519f, 0.007712f, 0.011607f, 0.015122f, 0.018190f, 0.020756f, 0.022777f, 0.024227f, 0.025095f, 0.025387f, 0.025121f, 0.024332f, 0.023068f, 0.021387f, 0.019357f, 0.017056f, 0.014564f, 0.011967f, 0.009348f, 0.006792f, 0.004377f, 0.002175f, 0.000251f, -0.001340f, + -0.002556f, -0.003366f, -0.003753f, -0.003712f, -0.003251f, -0.002392f, -0.001169f, 0.000375f, 0.002186f, 0.004204f, 0.006362f, 0.008589f, 0.010814f, 0.012965f, 0.014971f, 0.016768f, 0.018295f, 0.019503f, 0.020346f, 0.020793f, 0.020821f, 0.020419f, 0.019587f, 0.018337f, 0.016691f, 0.014681f, 0.012349f, 0.009745f, 0.006923f, 0.003944f, 0.000874f, -0.002223f, -0.005280f, -0.008234f, -0.011022f, -0.013590f, -0.015885f, -0.017865f, -0.019493f, -0.020743f, -0.021597f, -0.022046f, -0.022090f, -0.021739f, -0.021012f, -0.019933f, -0.018535f, -0.016859f, -0.014948f, -0.012849f, -0.010613f, -0.008293f, -0.005939f, -0.003602f, -0.001332f, 0.000828f, 0.002836f, 0.004656f, 0.006259f, 0.007619f, 0.008720f, 0.009550f, 0.010106f, 0.010389f, 0.010407f, 0.010175f, 0.009711f, 0.009040f, 0.008189f, 0.007188f, 0.006069f, 0.004866f, 0.003613f, 0.002344f, 0.001092f, -0.000114f, -0.001245f, -0.002277f, -0.003189f, -0.003963f, -0.004586f, -0.005050f, -0.005351f, -0.005489f, -0.005468f, -0.005296f, -0.004984f, -0.004547f, -0.004003f, -0.003369f, -0.002667f, -0.001918f, -0.001143f, -0.000364f, 0.000399f, 0.001128f, + 0.001804f, 0.002412f, 0.002941f, 0.003381f, 0.003724f, 0.003967f, 0.004108f, 0.004150f, 0.004096f, 0.003954f, 0.003734f, 0.003444f, 0.003099f, 0.002712f, 0.002295f, 0.001864f, 0.001431f, 0.001011f, 0.000614f, 0.000253f, -0.000065f, -0.000333f, -0.000544f, -0.000697f, -0.000789f, -0.000823f, -0.000802f, -0.000729f, -0.000612f, -0.000459f, -0.000277f, -0.000077f, 0.000132f, 0.000340f, 0.000538f, 0.000717f, 0.000871f, 0.000991f, 0.001075f, 0.001117f, 0.001116f, 0.001073f, 0.000988f, 0.000866f, 0.000710f, 0.000528f, 0.000325f, 0.000110f, 0.004325f, 0.038062f, 0.020580f, -0.024641f, -0.010812f, 0.065193f, 0.106067f, 0.011613f, -0.082134f, -0.198732f, -0.130452f, -0.044671f, 0.099718f, -0.096835f, -0.057591f, -0.027115f, 0.073916f, 0.130933f, 0.339398f, -0.032221f, -0.083327f, -0.075477f, -0.011526f, 0.011000f, 0.186231f, 0.095079f, 0.087461f, -0.057836f, -0.177390f, -0.100523f, -0.090915f, 0.056568f, 0.079578f, 0.127256f, -0.011849f, -0.101805f, -0.152564f, -0.064817f, -0.032282f, 0.024912f, 0.071233f, 0.080544f, -0.003501f, -0.087247f, -0.076317f, -0.035437f, 0.035623f, 0.024788f, + -0.091994f, -0.079745f, 0.020901f, 0.074127f, 0.043623f, 0.064571f, -0.010169f, -0.064132f, -0.009114f, -0.068800f, 0.047633f, -0.142630f, 0.105867f, 0.093698f, -0.096038f, -0.167419f, 0.026841f, -0.110855f, -0.091647f, 0.073117f, -0.032957f, -0.056334f, -0.156696f, -0.014605f, 0.194360f, 0.437939f, 0.198456f, -0.047092f, -0.274072f, -0.198778f, -0.026182f, 0.206621f, 0.301615f, 0.217354f, -0.072622f, -0.197400f, -0.081358f, 0.030432f, 0.033997f, 0.021622f, -0.034318f, -0.063383f, -0.118311f, -0.018524f, 0.101311f, 0.212623f, 0.162632f, 0.016773f, -0.165046f, -0.273346f, -0.193594f, -0.000947f, 0.245901f, 0.378040f, 0.174211f, -0.055126f, -0.339109f, -0.345752f, -0.166324f, 0.090062f, 0.198502f, 0.178359f, 0.053506f, 0.023101f, -0.108601f, 0.021106f, 0.102141f, 0.119987f, -0.125830f, -0.180442f, -0.053532f, 0.089257f, 0.129860f, 0.068003f, -0.005655f, -0.170720f, -0.174745f, -0.116848f, 0.079347f, 0.218131f, 0.247059f, 0.053708f, -0.177930f, -0.357342f, -0.276339f, -0.023190f, 0.259482f, 0.433787f, 0.279328f, -0.065102f, -0.348322f, -0.387358f, -0.207420f, 0.119153f, 0.252331f, 0.194574f, + 0.095594f, -0.038457f, -0.090909f, -0.118740f, -0.055565f, 0.031000f, 0.086467f, 0.084120f, 0.031550f, -0.075907f, -0.066799f, -0.104845f, -0.014430f, 0.057053f, 0.115622f, 0.073755f, -0.050623f, -0.130727f, -0.127212f, -0.045579f, 0.068296f, 0.153761f, 0.099787f, -0.039918f, -0.060346f, -0.051542f, -0.052361f, -0.034906f, 0.018428f, 0.057516f, 0.043171f, 0.014680f, -0.035625f, -0.083127f, -0.036201f, -0.088496f, -0.099303f, 0.059697f, 0.122499f, 0.100904f, -0.025937f, -0.084272f, -0.077960f, 0.016659f, 0.062050f, 0.062134f, -0.001570f, -0.034258f, -0.042715f, -0.004483f, 0.021577f, 0.044006f, 0.013080f, -0.014641f, -0.038426f, -0.002938f, 0.029375f, 0.025165f, -0.023109f, -0.009682f, 0.008798f, 0.010358f, -0.006268f, 0.004481f, -0.003225f, 0.007309f, -0.004619f, 0.004374f, -0.002460f, 0.005010f, -0.003899f, 0.006250f, -0.002826f, 0.004784f, -0.001410f, 0.005846f, -0.006009f, 0.007681f, -0.002530f, 0.001607f, -0.004596f, 0.001338f, -0.004160f, 0.002091f, -0.002249f, 0.002802f, -0.001929f, 0.007748f, -0.004506f, 0.003110f, -0.007015f, 0.005977f, -0.005323f, 0.004130f, -0.003102f, 0.003839f} + }, + { + {-0.002413f, -0.007177f, -0.011763f, -0.016054f, -0.019947f, -0.023348f, -0.026178f, -0.028375f, -0.029895f, -0.030714f, -0.030827f, -0.030250f, -0.029018f, -0.027181f, -0.024809f, -0.021981f, -0.018790f, -0.015333f, -0.011714f, -0.008037f, -0.004401f, -0.000904f, 0.002368f, 0.005338f, 0.007945f, 0.010139f, 0.011889f, 0.013178f, 0.014007f, 0.014391f, 0.014362f, 0.013961f, 0.013244f, 0.012273f, 0.011117f, 0.009849f, 0.008539f, 0.007259f, 0.006075f, 0.005045f, 0.004218f, 0.003634f, 0.003320f, 0.003292f, 0.003551f, 0.004089f, 0.004883f, 0.005903f, 0.007108f, 0.008451f, 0.009879f, 0.011338f, 0.012772f, 0.014126f, 0.015352f, 0.016405f, 0.017248f, 0.017852f, 0.018199f, 0.018280f, 0.018097f, 0.017660f, 0.016992f, 0.016120f, 0.015081f, 0.013916f, 0.012669f, 0.011387f, 0.010116f, 0.008899f, 0.007777f, 0.006782f, 0.005944f, 0.005281f, 0.004804f, 0.004514f, 0.004406f, 0.004463f, 0.004663f, 0.004976f, 0.005367f, 0.005799f, 0.006230f, 0.006622f, 0.006935f, 0.007134f, 0.007190f, 0.007081f, 0.006789f, 0.006309f, 0.005642f, 0.004801f, 0.003804f, 0.002681f, 0.001468f, 0.000206f, + -0.001057f, -0.002273f, -0.003391f, -0.004362f, -0.005139f, -0.005679f, -0.005949f, -0.005920f, -0.005574f, -0.004904f, -0.003912f, -0.002610f, -0.001024f, 0.000814f, 0.002859f, 0.005061f, 0.007363f, 0.009703f, 0.012018f, 0.014242f, 0.016313f, 0.018172f, 0.019765f, 0.021045f, 0.021975f, 0.022526f, 0.022681f, 0.022434f, 0.021790f, 0.020765f, 0.019385f, 0.017686f, 0.015712f, 0.013513f, 0.011145f, 0.008666f, 0.006135f, 0.003611f, 0.001151f, -0.001192f, -0.003373f, -0.005351f, -0.007095f, -0.008580f, -0.009793f, -0.010727f, -0.011384f, -0.011776f, -0.011920f, -0.011840f, -0.011563f, -0.011123f, -0.010552f, -0.009886f, -0.009157f, -0.008398f, -0.007636f, -0.006896f, -0.006197f, -0.005553f, -0.004972f, -0.004458f, -0.004008f, -0.003616f, -0.003271f, -0.002959f, -0.002665f, -0.002371f, -0.002061f, -0.001720f, -0.001334f, -0.000894f, -0.000392f, 0.000174f, 0.000801f, 0.001483f, 0.002208f, 0.002960f, 0.003721f, 0.004468f, 0.005178f, 0.005827f, 0.006389f, 0.006842f, 0.007166f, 0.007342f, 0.007358f, 0.007206f, 0.006882f, 0.006391f, 0.005742f, 0.004949f, 0.004032f, 0.003017f, 0.001932f, 0.000809f, + -0.000319f, -0.001416f, -0.002451f, -0.003390f, -0.004206f, -0.004874f, -0.005375f, -0.005695f, -0.005827f, -0.005770f, -0.005531f, -0.005123f, -0.004563f, -0.003876f, -0.003091f, -0.002239f, -0.001355f, -0.000473f, 0.000372f, 0.001148f, 0.001824f, 0.002375f, 0.002781f, 0.003027f, 0.003104f, 0.003011f, 0.002753f, 0.002342f, 0.001795f, 0.001137f, 0.000393f, -0.000404f, -0.001221f, -0.002025f, -0.002782f, -0.003461f, -0.004032f, -0.004472f, -0.004761f, -0.004886f, -0.004839f, -0.004619f, -0.004235f, -0.003697f, -0.003026f, -0.002244f, -0.001380f, -0.000466f, -0.000615f, -0.021191f, 0.027880f, 0.012174f, 0.032338f, -0.054992f, 0.011160f, -0.023717f, -0.040512f, 0.010908f, 0.085733f, 0.035783f, 0.048874f, 0.056802f, 0.031973f, 0.031169f, 0.042248f, 0.148670f, 0.144374f, -0.094051f, -0.074670f, 0.080443f, 0.071192f, 0.060975f, -0.051582f, -0.011649f, -0.064562f, -0.058762f, -0.021654f, 0.049947f, 0.086487f, -0.021086f, -0.079879f, -0.023443f, 0.046919f, 0.080546f, 0.076935f, 0.005172f, -0.051518f, -0.030896f, 0.017684f, 0.041659f, 0.021894f, 0.015478f, -0.074044f, -0.043204f, -0.052144f, -0.021901f, + -0.054245f, 0.013077f, 0.053051f, 0.081595f, -0.063261f, -0.031584f, -0.113133f, 0.008047f, 0.038664f, 0.118693f, -0.004410f, 0.077017f, -0.103930f, -0.081495f, 0.003826f, 0.124312f, 0.050884f, 0.151746f, 0.094586f, -0.030841f, -0.107123f, -0.098013f, -0.055043f, 0.042530f, 0.084145f, -0.010977f, -0.026112f, -0.073697f, -0.151197f, -0.145617f, 0.038560f, 0.236814f, 0.255649f, 0.130794f, -0.120527f, -0.269751f, -0.195657f, -0.007831f, 0.208284f, 0.211839f, 0.124481f, -0.119691f, -0.185847f, -0.250728f, -0.124480f, 0.172273f, 0.240133f, 0.139943f, -0.084784f, -0.203705f, -0.115258f, 0.048286f, 0.137808f, 0.117562f, -0.045046f, -0.165917f, -0.125860f, 0.050754f, 0.210969f, 0.243112f, 0.023364f, -0.223044f, -0.264048f, -0.023971f, 0.182798f, 0.357620f, 0.336762f, -0.089491f, -0.361557f, -0.268941f, 0.033550f, 0.314113f, 0.336011f, 0.169341f, -0.085608f, -0.318431f, -0.253429f, -0.064344f, 0.199461f, 0.264282f, 0.179393f, -0.083483f, -0.222066f, -0.192701f, -0.004908f, 0.165831f, 0.198551f, 0.012269f, -0.158841f, -0.161697f, -0.044380f, 0.138979f, 0.174485f, -0.016049f, -0.161850f, -0.203848f, + -0.080865f, 0.100964f, 0.260636f, 0.163338f, -0.061272f, -0.230647f, -0.219669f, -0.071659f, 0.126849f, 0.250508f, 0.243999f, 0.015787f, -0.212824f, -0.321049f, -0.177592f, 0.088023f, 0.321437f, 0.290189f, 0.050094f, -0.234798f, -0.321695f, -0.226345f, 0.084210f, 0.251862f, 0.265496f, 0.138093f, -0.064518f, -0.178604f, -0.172685f, -0.030430f, 0.079900f, 0.157663f, 0.077999f, 0.015414f, -0.124574f, 0.006968f, 0.164962f, 0.085234f, -0.024024f, -0.142999f, -0.114214f, -0.029137f, 0.091986f, 0.101595f, 0.046692f, -0.061337f, -0.097706f, -0.072977f, 0.023678f, 0.081482f, 0.076747f, -0.015231f, -0.078642f, -0.077566f, 0.025165f, 0.081296f, 0.034390f, -0.067929f, -0.030864f, 0.025283f, 0.020473f, -0.015586f, -0.001156f, -0.003147f, 0.001510f, -0.008340f, 0.001776f, -0.006130f, 0.004503f, -0.004098f, 0.003664f, -0.004185f, 0.000306f, -0.003483f, 0.008412f, -0.004797f, 0.002505f, -0.003378f, 0.004609f, -0.004696f, 0.001396f, -0.003903f, 0.001049f, -0.006249f, 0.004345f, -0.002750f, 0.004282f, -0.007419f, 0.006100f, -0.002088f, 0.004488f, -0.000247f, 0.006924f, -0.006715f, 0.004240f, -0.005750f}, + {-0.002413f, -0.007177f, -0.011763f, -0.016054f, -0.019947f, -0.023348f, -0.026178f, -0.028375f, -0.029895f, -0.030714f, -0.030827f, -0.030250f, -0.029018f, -0.027181f, -0.024809f, -0.021981f, -0.018790f, -0.015333f, -0.011714f, -0.008037f, -0.004401f, -0.000904f, 0.002368f, 0.005338f, 0.007945f, 0.010139f, 0.011889f, 0.013178f, 0.014007f, 0.014391f, 0.014362f, 0.013961f, 0.013244f, 0.012273f, 0.011117f, 0.009849f, 0.008539f, 0.007259f, 0.006075f, 0.005045f, 0.004218f, 0.003634f, 0.003320f, 0.003292f, 0.003551f, 0.004089f, 0.004883f, 0.005903f, 0.007108f, 0.008451f, 0.009879f, 0.011338f, 0.012772f, 0.014126f, 0.015352f, 0.016405f, 0.017248f, 0.017852f, 0.018199f, 0.018280f, 0.018097f, 0.017660f, 0.016992f, 0.016120f, 0.015081f, 0.013916f, 0.012669f, 0.011387f, 0.010116f, 0.008899f, 0.007777f, 0.006782f, 0.005944f, 0.005281f, 0.004804f, 0.004514f, 0.004406f, 0.004463f, 0.004663f, 0.004976f, 0.005367f, 0.005799f, 0.006230f, 0.006622f, 0.006935f, 0.007134f, 0.007190f, 0.007081f, 0.006789f, 0.006309f, 0.005642f, 0.004801f, 0.003804f, 0.002681f, 0.001468f, 0.000206f, + -0.001057f, -0.002273f, -0.003391f, -0.004362f, -0.005139f, -0.005679f, -0.005949f, -0.005920f, -0.005574f, -0.004904f, -0.003912f, -0.002610f, -0.001024f, 0.000814f, 0.002859f, 0.005061f, 0.007363f, 0.009703f, 0.012018f, 0.014242f, 0.016313f, 0.018172f, 0.019765f, 0.021045f, 0.021975f, 0.022526f, 0.022681f, 0.022434f, 0.021790f, 0.020765f, 0.019385f, 0.017686f, 0.015712f, 0.013513f, 0.011145f, 0.008666f, 0.006135f, 0.003611f, 0.001151f, -0.001192f, -0.003373f, -0.005351f, -0.007095f, -0.008580f, -0.009793f, -0.010727f, -0.011384f, -0.011776f, -0.011920f, -0.011840f, -0.011563f, -0.011123f, -0.010552f, -0.009886f, -0.009157f, -0.008398f, -0.007636f, -0.006896f, -0.006197f, -0.005553f, -0.004972f, -0.004458f, -0.004008f, -0.003616f, -0.003271f, -0.002959f, -0.002665f, -0.002371f, -0.002061f, -0.001720f, -0.001334f, -0.000894f, -0.000392f, 0.000174f, 0.000801f, 0.001483f, 0.002208f, 0.002960f, 0.003721f, 0.004468f, 0.005178f, 0.005827f, 0.006389f, 0.006842f, 0.007166f, 0.007342f, 0.007358f, 0.007206f, 0.006882f, 0.006391f, 0.005742f, 0.004949f, 0.004032f, 0.003017f, 0.001932f, 0.000809f, + -0.000319f, -0.001416f, -0.002451f, -0.003390f, -0.004206f, -0.004874f, -0.005375f, -0.005695f, -0.005827f, -0.005770f, -0.005531f, -0.005123f, -0.004563f, -0.003876f, -0.003091f, -0.002239f, -0.001355f, -0.000473f, 0.000372f, 0.001148f, 0.001824f, 0.002375f, 0.002781f, 0.003027f, 0.003104f, 0.003011f, 0.002753f, 0.002342f, 0.001795f, 0.001137f, 0.000393f, -0.000404f, -0.001221f, -0.002025f, -0.002782f, -0.003461f, -0.004032f, -0.004472f, -0.004761f, -0.004886f, -0.004839f, -0.004619f, -0.004235f, -0.003697f, -0.003026f, -0.002244f, -0.001380f, -0.000466f, -0.000615f, -0.021191f, 0.027880f, 0.012174f, 0.032338f, -0.054992f, 0.011160f, -0.023717f, -0.040512f, 0.010908f, 0.085733f, 0.035783f, 0.048874f, 0.056802f, 0.031973f, 0.031169f, 0.042248f, 0.148670f, 0.144374f, -0.094051f, -0.074670f, 0.080443f, 0.071192f, 0.060975f, -0.051582f, -0.011649f, -0.064562f, -0.058762f, -0.021654f, 0.049947f, 0.086487f, -0.021086f, -0.079879f, -0.023443f, 0.046919f, 0.080546f, 0.076935f, 0.005172f, -0.051518f, -0.030896f, 0.017684f, 0.041659f, 0.021894f, 0.015478f, -0.074044f, -0.043204f, -0.052144f, -0.021901f, + -0.054245f, 0.013077f, 0.053051f, 0.081595f, -0.063261f, -0.031584f, -0.113133f, 0.008047f, 0.038664f, 0.118693f, -0.004410f, 0.077017f, -0.103930f, -0.081495f, 0.003826f, 0.124312f, 0.050884f, 0.151746f, 0.094586f, -0.030841f, -0.107123f, -0.098013f, -0.055043f, 0.042530f, 0.084145f, -0.010977f, -0.026112f, -0.073697f, -0.151197f, -0.145617f, 0.038560f, 0.236814f, 0.255649f, 0.130794f, -0.120527f, -0.269751f, -0.195657f, -0.007831f, 0.208284f, 0.211839f, 0.124481f, -0.119691f, -0.185847f, -0.250728f, -0.124480f, 0.172273f, 0.240133f, 0.139943f, -0.084784f, -0.203705f, -0.115258f, 0.048286f, 0.137808f, 0.117562f, -0.045046f, -0.165917f, -0.125860f, 0.050754f, 0.210969f, 0.243112f, 0.023364f, -0.223044f, -0.264048f, -0.023971f, 0.182798f, 0.357620f, 0.336762f, -0.089491f, -0.361557f, -0.268941f, 0.033550f, 0.314113f, 0.336011f, 0.169341f, -0.085608f, -0.318431f, -0.253429f, -0.064344f, 0.199461f, 0.264282f, 0.179393f, -0.083483f, -0.222066f, -0.192701f, -0.004908f, 0.165831f, 0.198551f, 0.012269f, -0.158841f, -0.161697f, -0.044380f, 0.138979f, 0.174485f, -0.016049f, -0.161850f, -0.203848f, + -0.080865f, 0.100964f, 0.260636f, 0.163338f, -0.061272f, -0.230647f, -0.219669f, -0.071659f, 0.126849f, 0.250508f, 0.243999f, 0.015787f, -0.212824f, -0.321049f, -0.177592f, 0.088023f, 0.321437f, 0.290189f, 0.050094f, -0.234798f, -0.321695f, -0.226345f, 0.084210f, 0.251862f, 0.265496f, 0.138093f, -0.064518f, -0.178604f, -0.172685f, -0.030430f, 0.079900f, 0.157663f, 0.077999f, 0.015414f, -0.124574f, 0.006968f, 0.164962f, 0.085234f, -0.024024f, -0.142999f, -0.114214f, -0.029137f, 0.091986f, 0.101595f, 0.046692f, -0.061337f, -0.097706f, -0.072977f, 0.023678f, 0.081482f, 0.076747f, -0.015231f, -0.078642f, -0.077566f, 0.025165f, 0.081296f, 0.034390f, -0.067929f, -0.030864f, 0.025283f, 0.020473f, -0.015586f, -0.001156f, -0.003147f, 0.001510f, -0.008340f, 0.001776f, -0.006130f, 0.004503f, -0.004098f, 0.003664f, -0.004185f, 0.000306f, -0.003483f, 0.008412f, -0.004797f, 0.002505f, -0.003378f, 0.004609f, -0.004696f, 0.001396f, -0.003903f, 0.001049f, -0.006249f, 0.004345f, -0.002750f, 0.004282f, -0.007419f, 0.006100f, -0.002088f, 0.004488f, -0.000247f, 0.006924f, -0.006715f, 0.004240f, -0.005750f} + }, + { + {-0.000629f, -0.001876f, -0.003086f, -0.004238f, -0.005309f, -0.006281f, -0.007137f, -0.007864f, -0.008450f, -0.008890f, -0.009180f, -0.009320f, -0.009315f, -0.009171f, -0.008900f, -0.008514f, -0.008029f, -0.007460f, -0.006826f, -0.006145f, -0.005435f, -0.004713f, -0.003994f, -0.003292f, -0.002620f, -0.001986f, -0.001396f, -0.000854f, -0.000358f, 0.000093f, 0.000506f, 0.000888f, 0.001251f, 0.001607f, 0.001968f, 0.002348f, 0.002760f, 0.003218f, 0.003733f, 0.004313f, 0.004966f, 0.005696f, 0.006502f, 0.007382f, 0.008328f, 0.009330f, 0.010372f, 0.011438f, 0.012504f, 0.013549f, 0.014546f, 0.015468f, 0.016288f, 0.016979f, 0.017514f, 0.017870f, 0.018024f, 0.017960f, 0.017664f, 0.017126f, 0.016343f, 0.015318f, 0.014057f, 0.012575f, 0.010890f, 0.009026f, 0.007012f, 0.004880f, 0.002668f, 0.000413f, -0.001845f, -0.004064f, -0.006205f, -0.008229f, -0.010102f, -0.011790f, -0.013267f, -0.014510f, -0.015503f, -0.016234f, -0.016701f, -0.016906f, -0.016859f, -0.016573f, -0.016072f, -0.015380f, -0.014527f, -0.013548f, -0.012477f, -0.011352f, -0.010209f, -0.009085f, -0.008012f, -0.007022f, -0.006141f, -0.005391f, + -0.004787f, -0.004341f, -0.004057f, -0.003932f, -0.003959f, -0.004124f, -0.004408f, -0.004789f, -0.005239f, -0.005729f, -0.006227f, -0.006703f, -0.007125f, -0.007464f, -0.007694f, -0.007791f, -0.007738f, -0.007521f, -0.007133f, -0.006573f, -0.005847f, -0.004964f, -0.003944f, -0.002806f, -0.001580f, -0.000296f, 0.001013f, 0.002311f, 0.003562f, 0.004729f, 0.005778f, 0.006679f, 0.007404f, 0.007929f, 0.008238f, 0.008319f, 0.008169f, 0.007789f, 0.007189f, 0.006385f, 0.005397f, 0.004255f, 0.002989f, 0.001637f, 0.000237f, -0.001170f, -0.002545f, -0.003846f, -0.005036f, -0.006080f, -0.006947f, -0.007613f, -0.008058f, -0.008269f, -0.008240f, -0.007971f, -0.007471f, -0.006754f, -0.005840f, -0.004756f, -0.003532f, -0.002203f, -0.000807f, 0.000619f, 0.002035f, 0.003402f, 0.004684f, 0.005848f, 0.006865f, 0.007710f, 0.008363f, 0.008811f, 0.009047f, 0.009069f, 0.008884f, 0.008501f, 0.007938f, 0.007215f, 0.006357f, 0.005391f, 0.004350f, 0.003262f, 0.002161f, 0.001077f, 0.000037f, -0.000931f, -0.001804f, -0.002565f, -0.003197f, -0.003693f, -0.004045f, -0.004256f, -0.004328f, -0.004271f, -0.004097f, -0.003821f, + -0.003462f, -0.003040f, -0.002574f, -0.002087f, -0.001599f, -0.001129f, -0.000694f, -0.000309f, 0.000014f, 0.000266f, 0.000442f, 0.000539f, 0.000560f, 0.000508f, 0.000391f, 0.000219f, 0.000002f, -0.000245f, -0.000509f, -0.000777f, -0.001035f, -0.001269f, -0.001471f, -0.001629f, -0.001737f, -0.001790f, -0.001787f, -0.001728f, -0.001616f, -0.001456f, -0.001255f, -0.001023f, -0.000770f, -0.000505f, -0.000242f, 0.000010f, 0.000241f, 0.000440f, 0.000602f, 0.000719f, 0.000789f, 0.000810f, 0.000782f, 0.000710f, 0.000598f, 0.000452f, 0.000281f, 0.000096f, 0.003833f, -0.002393f, -0.001550f, -0.010768f, 0.032629f, 0.011306f, -0.044284f, 0.018314f, 0.003978f, 0.038048f, 0.006921f, -0.071210f, -0.029689f, -0.044542f, -0.099327f, 0.020127f, 0.098187f, 0.091075f, 0.086575f, -0.042671f, 0.007877f, 0.078891f, 0.084995f, 0.054082f, -0.021638f, -0.048082f, -0.022392f, -0.071858f, -0.067982f, -0.059163f, 0.033391f, 0.127379f, 0.007895f, 0.018223f, 0.005708f, -0.047327f, -0.074037f, 0.045486f, 0.080097f, 0.109529f, 0.075418f, 0.024993f, -0.049446f, -0.061939f, -0.038186f, 0.006499f, 0.027318f, 0.040559f, + -0.033439f, -0.035134f, -0.033588f, -0.020991f, -0.034200f, 0.145024f, 0.003104f, 0.062410f, -0.002398f, -0.055186f, -0.153519f, 0.085516f, 0.013526f, 0.050198f, 0.080210f, -0.026815f, -0.080563f, -0.105866f, 0.039693f, 0.079955f, 0.053818f, 0.007022f, -0.049899f, -0.040756f, -0.090243f, -0.096030f, 0.014919f, 0.099631f, 0.049712f, -0.117783f, -0.104527f, -0.047732f, -0.058681f, 0.011162f, 0.071316f, 0.042627f, -0.104107f, -0.123039f, -0.013747f, 0.203720f, 0.300154f, 0.163747f, -0.071562f, -0.218673f, -0.226938f, -0.051208f, 0.155922f, 0.185269f, 0.051669f, -0.059647f, -0.090049f, -0.032626f, 0.023640f, 0.050562f, 0.020662f, 0.021180f, -0.064624f, -0.074480f, -0.033960f, 0.015714f, 0.109849f, 0.132771f, 0.140950f, -0.014645f, -0.158302f, -0.188966f, 0.057032f, 0.035205f, 0.090630f, 0.127866f, 0.070389f, -0.005047f, -0.151082f, -0.039095f, 0.060604f, 0.101319f, 0.155564f, 0.015911f, -0.077633f, -0.120064f, -0.128551f, -0.103619f, 0.069509f, 0.194971f, 0.254877f, 0.084847f, -0.134256f, -0.334629f, -0.222454f, 0.004266f, 0.210033f, 0.251997f, 0.137596f, -0.119336f, -0.256430f, -0.239825f, + -0.025960f, 0.182839f, 0.278925f, 0.086432f, -0.206817f, -0.257206f, -0.181695f, 0.010354f, 0.202964f, 0.229244f, 0.098833f, -0.087026f, -0.181307f, -0.141921f, -0.048110f, 0.075799f, 0.114635f, 0.060613f, -0.007091f, -0.085373f, -0.082937f, -0.027346f, 0.088356f, 0.139427f, 0.092503f, -0.030368f, -0.103502f, -0.107065f, -0.020528f, 0.052644f, 0.128449f, 0.060539f, -0.024419f, -0.053943f, -0.053067f, 0.104894f, 0.110330f, -0.030292f, -0.137751f, -0.137278f, 0.001888f, 0.123472f, 0.133148f, -0.007019f, -0.129875f, -0.123791f, 0.026745f, 0.121553f, 0.087812f, -0.059539f, -0.115914f, -0.041189f, 0.084327f, 0.080379f, -0.023472f, -0.085842f, -0.004187f, 0.058332f, 0.012800f, -0.041715f, -0.000345f, 0.009540f, 0.000671f, -0.007229f, 0.003356f, -0.001562f, 0.003583f, -0.001390f, 0.004748f, -0.004077f, 0.001544f, -0.004733f, -0.001209f, -0.004578f, 0.003593f, -0.002046f, 0.008076f, -0.006694f, 0.003824f, -0.000642f, 0.003010f, -0.005633f, 0.003952f, -0.007572f, 0.002614f, -0.004205f, 0.006070f, -0.002496f, 0.004053f, -0.001677f, 0.001551f, -0.006302f, 0.004819f, -0.002902f, 0.002256f, -0.003500f}, + {-0.000629f, -0.001876f, -0.003086f, -0.004238f, -0.005309f, -0.006281f, -0.007137f, -0.007864f, -0.008450f, -0.008890f, -0.009180f, -0.009320f, -0.009315f, -0.009171f, -0.008900f, -0.008514f, -0.008029f, -0.007460f, -0.006826f, -0.006145f, -0.005435f, -0.004713f, -0.003994f, -0.003292f, -0.002620f, -0.001986f, -0.001396f, -0.000854f, -0.000358f, 0.000093f, 0.000506f, 0.000888f, 0.001251f, 0.001607f, 0.001968f, 0.002348f, 0.002760f, 0.003218f, 0.003733f, 0.004313f, 0.004966f, 0.005696f, 0.006502f, 0.007382f, 0.008328f, 0.009330f, 0.010372f, 0.011438f, 0.012504f, 0.013549f, 0.014546f, 0.015468f, 0.016288f, 0.016979f, 0.017514f, 0.017870f, 0.018024f, 0.017960f, 0.017664f, 0.017126f, 0.016343f, 0.015318f, 0.014057f, 0.012575f, 0.010890f, 0.009026f, 0.007012f, 0.004880f, 0.002668f, 0.000413f, -0.001845f, -0.004064f, -0.006205f, -0.008229f, -0.010102f, -0.011790f, -0.013267f, -0.014510f, -0.015503f, -0.016234f, -0.016701f, -0.016906f, -0.016859f, -0.016573f, -0.016072f, -0.015380f, -0.014527f, -0.013548f, -0.012477f, -0.011352f, -0.010209f, -0.009085f, -0.008012f, -0.007022f, -0.006141f, -0.005391f, + -0.004787f, -0.004341f, -0.004057f, -0.003932f, -0.003959f, -0.004124f, -0.004408f, -0.004789f, -0.005239f, -0.005729f, -0.006227f, -0.006703f, -0.007125f, -0.007464f, -0.007694f, -0.007791f, -0.007738f, -0.007521f, -0.007133f, -0.006573f, -0.005847f, -0.004964f, -0.003944f, -0.002806f, -0.001580f, -0.000296f, 0.001013f, 0.002311f, 0.003562f, 0.004729f, 0.005778f, 0.006679f, 0.007404f, 0.007929f, 0.008238f, 0.008319f, 0.008169f, 0.007789f, 0.007189f, 0.006385f, 0.005397f, 0.004255f, 0.002989f, 0.001637f, 0.000237f, -0.001170f, -0.002545f, -0.003846f, -0.005036f, -0.006080f, -0.006947f, -0.007613f, -0.008058f, -0.008269f, -0.008240f, -0.007971f, -0.007471f, -0.006754f, -0.005840f, -0.004756f, -0.003532f, -0.002203f, -0.000807f, 0.000619f, 0.002035f, 0.003402f, 0.004684f, 0.005848f, 0.006865f, 0.007710f, 0.008363f, 0.008811f, 0.009047f, 0.009069f, 0.008884f, 0.008501f, 0.007938f, 0.007215f, 0.006357f, 0.005391f, 0.004350f, 0.003262f, 0.002161f, 0.001077f, 0.000037f, -0.000931f, -0.001804f, -0.002565f, -0.003197f, -0.003693f, -0.004045f, -0.004256f, -0.004328f, -0.004271f, -0.004097f, -0.003821f, + -0.003462f, -0.003040f, -0.002574f, -0.002087f, -0.001599f, -0.001129f, -0.000694f, -0.000309f, 0.000014f, 0.000266f, 0.000442f, 0.000539f, 0.000560f, 0.000508f, 0.000391f, 0.000219f, 0.000002f, -0.000245f, -0.000509f, -0.000777f, -0.001035f, -0.001269f, -0.001471f, -0.001629f, -0.001737f, -0.001790f, -0.001787f, -0.001728f, -0.001616f, -0.001456f, -0.001255f, -0.001023f, -0.000770f, -0.000505f, -0.000242f, 0.000010f, 0.000241f, 0.000440f, 0.000602f, 0.000719f, 0.000789f, 0.000810f, 0.000782f, 0.000710f, 0.000598f, 0.000452f, 0.000281f, 0.000096f, 0.003833f, -0.002393f, -0.001550f, -0.010768f, 0.032629f, 0.011306f, -0.044284f, 0.018314f, 0.003978f, 0.038048f, 0.006921f, -0.071210f, -0.029689f, -0.044542f, -0.099327f, 0.020127f, 0.098187f, 0.091075f, 0.086575f, -0.042671f, 0.007877f, 0.078891f, 0.084995f, 0.054082f, -0.021638f, -0.048082f, -0.022392f, -0.071858f, -0.067982f, -0.059163f, 0.033391f, 0.127379f, 0.007895f, 0.018223f, 0.005708f, -0.047327f, -0.074037f, 0.045486f, 0.080097f, 0.109529f, 0.075418f, 0.024993f, -0.049446f, -0.061939f, -0.038186f, 0.006499f, 0.027318f, 0.040559f, + -0.033439f, -0.035134f, -0.033588f, -0.020991f, -0.034200f, 0.145024f, 0.003104f, 0.062410f, -0.002398f, -0.055186f, -0.153519f, 0.085516f, 0.013526f, 0.050198f, 0.080210f, -0.026815f, -0.080563f, -0.105866f, 0.039693f, 0.079955f, 0.053818f, 0.007022f, -0.049899f, -0.040756f, -0.090243f, -0.096030f, 0.014919f, 0.099631f, 0.049712f, -0.117783f, -0.104527f, -0.047732f, -0.058681f, 0.011162f, 0.071316f, 0.042627f, -0.104107f, -0.123039f, -0.013747f, 0.203720f, 0.300154f, 0.163747f, -0.071562f, -0.218673f, -0.226938f, -0.051208f, 0.155922f, 0.185269f, 0.051669f, -0.059647f, -0.090049f, -0.032626f, 0.023640f, 0.050562f, 0.020662f, 0.021180f, -0.064624f, -0.074480f, -0.033960f, 0.015714f, 0.109849f, 0.132771f, 0.140950f, -0.014645f, -0.158302f, -0.188966f, 0.057032f, 0.035205f, 0.090630f, 0.127866f, 0.070389f, -0.005047f, -0.151082f, -0.039095f, 0.060604f, 0.101319f, 0.155564f, 0.015911f, -0.077633f, -0.120064f, -0.128551f, -0.103619f, 0.069509f, 0.194971f, 0.254877f, 0.084847f, -0.134256f, -0.334629f, -0.222454f, 0.004266f, 0.210033f, 0.251997f, 0.137596f, -0.119336f, -0.256430f, -0.239825f, + -0.025960f, 0.182839f, 0.278925f, 0.086432f, -0.206817f, -0.257206f, -0.181695f, 0.010354f, 0.202964f, 0.229244f, 0.098833f, -0.087026f, -0.181307f, -0.141921f, -0.048110f, 0.075799f, 0.114635f, 0.060613f, -0.007091f, -0.085373f, -0.082937f, -0.027346f, 0.088356f, 0.139427f, 0.092503f, -0.030368f, -0.103502f, -0.107065f, -0.020528f, 0.052644f, 0.128449f, 0.060539f, -0.024419f, -0.053943f, -0.053067f, 0.104894f, 0.110330f, -0.030292f, -0.137751f, -0.137278f, 0.001888f, 0.123472f, 0.133148f, -0.007019f, -0.129875f, -0.123791f, 0.026745f, 0.121553f, 0.087812f, -0.059539f, -0.115914f, -0.041189f, 0.084327f, 0.080379f, -0.023472f, -0.085842f, -0.004187f, 0.058332f, 0.012800f, -0.041715f, -0.000345f, 0.009540f, 0.000671f, -0.007229f, 0.003356f, -0.001562f, 0.003583f, -0.001390f, 0.004748f, -0.004077f, 0.001544f, -0.004733f, -0.001209f, -0.004578f, 0.003593f, -0.002046f, 0.008076f, -0.006694f, 0.003824f, -0.000642f, 0.003010f, -0.005633f, 0.003952f, -0.007572f, 0.002614f, -0.004205f, 0.006070f, -0.002496f, 0.004053f, -0.001677f, 0.001551f, -0.006302f, 0.004819f, -0.002902f, 0.002256f, -0.003500f} + } +}; +const float *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; + +/********************** Sample Rate = 32000 **********************/ + +const float CRendBin_HOA3_HRIR_latency_s_32kHz = 0.001333333319053f; +const int16_t CRendBin_HOA3_HRIR_max_num_iterations_32kHz = 2; +const uint16_t CRendBin_HOA3_HRIR_num_iterations_32kHz[16][BINAURAL_CHANNELS]={{2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2} }; +const uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS] = {0, 0}; +const uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[16][BINAURAL_CHANNELS][2]={{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}},{{160, 160},{160, 160}}}; +const uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz = 0; +const float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[16]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; +const uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float CRendBin_HOA3_HRIR_coeff_re_32kHz[16][BINAURAL_CHANNELS][320]={ + { + {-0.008122f, -0.007933f, -0.007561f, -0.007019f, -0.006325f, -0.005502f, -0.004578f, -0.003583f, -0.002551f, -0.001514f, -0.000508f, 0.000436f, 0.001287f, 0.002019f, 0.002609f, 0.003042f, 0.003305f, 0.003394f, 0.003309f, 0.003059f, 0.002655f, 0.002117f, 0.001467f, 0.000733f, -0.000055f, -0.000865f, -0.001666f, -0.002426f, -0.003114f, -0.003702f, -0.004167f, -0.004490f, -0.004655f, -0.004654f, -0.004483f, -0.004147f, -0.003653f, -0.003014f, -0.002251f, -0.001386f, -0.000446f, 0.000542f, 0.001546f, 0.002537f, 0.003485f, 0.004362f, 0.005143f, 0.005806f, 0.006334f, 0.006713f, 0.006936f, 0.007001f, 0.006910f, 0.006671f, 0.006296f, 0.005802f, 0.005207f, 0.004535f, 0.003809f, 0.003054f, 0.002295f, 0.001555f, 0.000857f, 0.000219f, -0.000341f, -0.000811f, -0.001184f, -0.001453f, -0.001620f, -0.001687f, -0.001663f, -0.001559f, -0.001387f, -0.001163f, -0.000906f, -0.000631f, -0.000358f, -0.000102f, 0.000122f, 0.000300f, 0.000422f, 0.000482f, 0.000474f, 0.000400f, 0.000261f, 0.000064f, -0.000182f, -0.000465f, -0.000773f, -0.001091f, -0.001403f, -0.001693f, -0.001948f, -0.002154f, -0.002299f, -0.002376f, + -0.002377f, -0.002299f, -0.002145f, -0.001916f, -0.001620f, -0.001268f, -0.000871f, -0.000444f, -0.000003f, 0.000433f, 0.000849f, 0.001227f, 0.001551f, 0.001806f, 0.001982f, 0.002068f, 0.002059f, 0.001952f, 0.001747f, 0.001450f, 0.001067f, 0.000611f, 0.000093f, -0.000470f, -0.001062f, -0.001662f, -0.002254f, -0.002818f, -0.003338f, -0.003797f, -0.004183f, -0.004483f, -0.004691f, -0.004802f, -0.004815f, -0.004731f, -0.004556f, -0.004299f, -0.003971f, -0.003585f, -0.003155f, -0.002698f, -0.002230f, -0.001767f, -0.001324f, -0.000916f, -0.000554f, -0.000247f, -0.000004f, 0.000173f, 0.000281f, 0.000321f, 0.000299f, 0.000222f, 0.000097f, -0.000064f, -0.000250f, -0.000449f, -0.000647f, -0.000833f, -0.000997f, -0.001128f, -0.001220f, -0.001267f, 0.875363f, 0.116654f, -0.661817f, -0.826629f, -0.402369f, 0.289829f, 0.778345f, 0.686075f, 0.186222f, -0.492450f, -0.844907f, -0.700511f, -0.169182f, 0.555413f, 0.804353f, 0.562671f, -0.069029f, -0.621903f, -0.780365f, -0.388504f, 0.216008f, 0.700107f, 0.690873f, 0.205307f, -0.389038f, -0.709940f, -0.532071f, -0.008092f, 0.516830f, 0.685366f, 0.400172f, -0.156796f, + -0.610764f, -0.648564f, -0.248041f, 0.314656f, 0.668118f, 0.566683f, 0.102692f, -0.422984f, -0.610754f, -0.604667f, -0.119204f, 0.439597f, 0.716823f, 0.473525f, -0.083245f, -0.590438f, -0.675436f, -0.303597f, 0.280043f, 0.671094f, 0.603066f, 0.111790f, -0.450470f, -0.697038f, -0.454375f, 0.073947f, 0.530533f, 0.615953f, 0.269348f, -0.258327f, -0.597617f, -0.541078f, -0.092406f, 0.453139f, 0.669282f, 0.437777f, -0.105841f, -0.566799f, -0.652878f, -0.293692f, 0.267762f, 0.638830f, 0.583739f, 0.123852f, -0.428410f, -0.699716f, -0.472827f, 0.049668f, 0.530999f, 0.600521f, 0.268894f, -0.221661f, -0.602731f, -0.548789f, -0.120400f, 0.410229f, 0.655002f, 0.450774f, -0.057538f, -0.539000f, -0.637333f, -0.303133f, 0.211013f, 0.613957f, 0.587101f, 0.181641f, -0.310422f, -0.602883f, -0.500154f, -0.070393f, 0.393613f, 0.576259f, 0.389283f, -0.079276f, -0.470705f, -0.550184f, -0.251642f, 0.225426f, 0.561077f, 0.501491f, 0.089824f, -0.389292f, -0.615716f, -0.388263f, 0.088304f, 0.516718f, 0.604324f, 0.270485f, -0.263414f, -0.628216f, -0.543581f, -0.085300f, 0.418545f, 0.625778f, 0.397591f, -0.104349f, + -0.518155f, -0.566096f, -0.222967f, 0.251693f, 0.549767f, 0.465451f, 0.055175f, -0.371335f, -0.543778f, -0.348676f, 0.082121f, 0.464566f, 0.526323f, 0.227178f, -0.225699f, -0.514528f, -0.445148f, -0.074063f, 0.337702f, 0.505853f, 0.311651f, -0.096507f, -0.447922f, -0.480465f, -0.176267f, 0.237952f, 0.407723f, 0.224503f, -0.015059f, -0.056214f, -0.018457f, -0.003490f}, + {-0.008122f, -0.007933f, -0.007561f, -0.007019f, -0.006325f, -0.005502f, -0.004578f, -0.003583f, -0.002551f, -0.001514f, -0.000508f, 0.000436f, 0.001287f, 0.002019f, 0.002609f, 0.003042f, 0.003305f, 0.003394f, 0.003309f, 0.003059f, 0.002655f, 0.002117f, 0.001467f, 0.000733f, -0.000055f, -0.000865f, -0.001666f, -0.002426f, -0.003114f, -0.003702f, -0.004167f, -0.004490f, -0.004655f, -0.004654f, -0.004483f, -0.004147f, -0.003653f, -0.003014f, -0.002251f, -0.001386f, -0.000446f, 0.000542f, 0.001546f, 0.002537f, 0.003485f, 0.004362f, 0.005143f, 0.005806f, 0.006334f, 0.006713f, 0.006936f, 0.007001f, 0.006910f, 0.006671f, 0.006296f, 0.005802f, 0.005207f, 0.004535f, 0.003809f, 0.003054f, 0.002295f, 0.001555f, 0.000857f, 0.000219f, -0.000341f, -0.000811f, -0.001184f, -0.001453f, -0.001620f, -0.001687f, -0.001663f, -0.001559f, -0.001387f, -0.001163f, -0.000906f, -0.000631f, -0.000358f, -0.000102f, 0.000122f, 0.000300f, 0.000422f, 0.000482f, 0.000474f, 0.000400f, 0.000261f, 0.000064f, -0.000182f, -0.000465f, -0.000773f, -0.001091f, -0.001403f, -0.001693f, -0.001948f, -0.002154f, -0.002299f, -0.002376f, + -0.002377f, -0.002299f, -0.002145f, -0.001916f, -0.001620f, -0.001268f, -0.000871f, -0.000444f, -0.000003f, 0.000433f, 0.000849f, 0.001227f, 0.001551f, 0.001806f, 0.001982f, 0.002068f, 0.002059f, 0.001952f, 0.001747f, 0.001450f, 0.001067f, 0.000611f, 0.000093f, -0.000470f, -0.001062f, -0.001662f, -0.002254f, -0.002818f, -0.003338f, -0.003797f, -0.004183f, -0.004483f, -0.004691f, -0.004802f, -0.004815f, -0.004731f, -0.004556f, -0.004299f, -0.003971f, -0.003585f, -0.003155f, -0.002698f, -0.002230f, -0.001767f, -0.001324f, -0.000916f, -0.000554f, -0.000247f, -0.000004f, 0.000173f, 0.000281f, 0.000321f, 0.000299f, 0.000222f, 0.000097f, -0.000064f, -0.000250f, -0.000449f, -0.000647f, -0.000833f, -0.000997f, -0.001128f, -0.001220f, -0.001267f, 0.875363f, 0.116654f, -0.661817f, -0.826629f, -0.402369f, 0.289829f, 0.778345f, 0.686075f, 0.186222f, -0.492450f, -0.844907f, -0.700511f, -0.169182f, 0.555413f, 0.804353f, 0.562671f, -0.069029f, -0.621903f, -0.780365f, -0.388504f, 0.216008f, 0.700107f, 0.690873f, 0.205307f, -0.389038f, -0.709940f, -0.532071f, -0.008092f, 0.516830f, 0.685366f, 0.400172f, -0.156796f, + -0.610764f, -0.648564f, -0.248041f, 0.314656f, 0.668118f, 0.566683f, 0.102692f, -0.422984f, -0.610754f, -0.604667f, -0.119204f, 0.439597f, 0.716823f, 0.473525f, -0.083245f, -0.590438f, -0.675436f, -0.303597f, 0.280043f, 0.671094f, 0.603066f, 0.111790f, -0.450470f, -0.697038f, -0.454375f, 0.073947f, 0.530533f, 0.615953f, 0.269348f, -0.258327f, -0.597617f, -0.541078f, -0.092406f, 0.453139f, 0.669282f, 0.437777f, -0.105841f, -0.566799f, -0.652878f, -0.293692f, 0.267762f, 0.638830f, 0.583739f, 0.123852f, -0.428410f, -0.699716f, -0.472827f, 0.049668f, 0.530999f, 0.600521f, 0.268894f, -0.221661f, -0.602731f, -0.548789f, -0.120400f, 0.410229f, 0.655002f, 0.450774f, -0.057538f, -0.539000f, -0.637333f, -0.303133f, 0.211013f, 0.613957f, 0.587101f, 0.181641f, -0.310422f, -0.602883f, -0.500154f, -0.070393f, 0.393613f, 0.576259f, 0.389283f, -0.079276f, -0.470705f, -0.550184f, -0.251642f, 0.225426f, 0.561077f, 0.501491f, 0.089824f, -0.389292f, -0.615716f, -0.388263f, 0.088304f, 0.516718f, 0.604324f, 0.270485f, -0.263414f, -0.628216f, -0.543581f, -0.085300f, 0.418545f, 0.625778f, 0.397591f, -0.104349f, + -0.518155f, -0.566096f, -0.222967f, 0.251693f, 0.549767f, 0.465451f, 0.055175f, -0.371335f, -0.543778f, -0.348676f, 0.082121f, 0.464566f, 0.526323f, 0.227178f, -0.225699f, -0.514528f, -0.445148f, -0.074063f, 0.337702f, 0.505853f, 0.311651f, -0.096507f, -0.447922f, -0.480465f, -0.176267f, 0.237952f, 0.407723f, 0.224503f, -0.015059f, -0.056214f, -0.018457f, -0.003490f} + }, + { + {-0.000273f, -0.000358f, -0.000520f, -0.000746f, -0.001017f, -0.001307f, -0.001588f, -0.001829f, -0.001995f, -0.002055f, -0.001978f, -0.001734f, -0.001302f, -0.000663f, 0.000193f, 0.001268f, 0.002558f, 0.004048f, 0.005715f, 0.007530f, 0.009455f, 0.011446f, 0.013453f, 0.015426f, 0.017308f, 0.019047f, 0.020590f, 0.021887f, 0.022896f, 0.023579f, 0.023907f, 0.023862f, 0.023434f, 0.022624f, 0.021445f, 0.019919f, 0.018078f, 0.015965f, 0.013629f, 0.011127f, 0.008519f, 0.005871f, 0.003246f, 0.000710f, -0.001675f, -0.003854f, -0.005775f, -0.007396f, -0.008683f, -0.009612f, -0.010172f, -0.010358f, -0.010181f, -0.009660f, -0.008823f, -0.007708f, -0.006360f, -0.004829f, -0.003170f, -0.001440f, 0.000303f, 0.002004f, 0.003609f, 0.005069f, 0.006343f, 0.007396f, 0.008199f, 0.008735f, 0.008995f, 0.008977f, 0.008692f, 0.008155f, 0.007392f, 0.006432f, 0.005312f, 0.004071f, 0.002750f, 0.001393f, 0.000042f, -0.001263f, -0.002485f, -0.003591f, -0.004554f, -0.005353f, -0.005972f, -0.006402f, -0.006643f, -0.006697f, -0.006575f, -0.006293f, -0.005870f, -0.005329f, -0.004695f, -0.003995f, -0.003257f, -0.002507f, + -0.001769f, -0.001065f, -0.000415f, 0.000165f, 0.000666f, 0.001078f, 0.001399f, 0.001631f, 0.001776f, 0.001844f, 0.001843f, 0.001787f, 0.001687f, 0.001558f, 0.001413f, 0.001264f, 0.001122f, 0.000996f, 0.000892f, 0.000814f, 0.000763f, 0.000737f, 0.000731f, 0.000741f, 0.000757f, 0.000769f, 0.000769f, 0.000746f, 0.000689f, 0.000591f, 0.000444f, 0.000243f, -0.000014f, -0.000327f, -0.000694f, -0.001108f, -0.001561f, -0.002042f, -0.002539f, -0.003036f, -0.003519f, -0.003972f, -0.004378f, -0.004724f, -0.004996f, -0.005184f, -0.005280f, -0.005277f, -0.005175f, -0.004976f, -0.004683f, -0.004307f, -0.003859f, -0.003353f, -0.002807f, -0.002238f, -0.001667f, -0.001113f, -0.000596f, -0.000133f, 0.000259f, 0.000565f, 0.000776f, 0.000883f, 0.102988f, 0.341294f, 0.254497f, -0.391906f, -0.862557f, -0.540368f, 0.349671f, 0.909254f, 0.676052f, 0.030677f, -0.331228f, -0.698406f, -0.236689f, 0.264785f, 0.600240f, 0.465461f, 0.109871f, -0.428379f, -0.589347f, -0.409218f, 0.076928f, 0.452763f, 0.603311f, 0.262857f, -0.271601f, -0.610935f, -0.493932f, -0.122155f, 0.375662f, 0.622425f, 0.459174f, 0.035767f, + -0.486155f, -0.663043f, -0.415330f, 0.142677f, 0.611402f, 0.749182f, 0.314569f, -0.330349f, -0.813922f, -0.564511f, 0.020420f, 0.618496f, 0.798240f, 0.435640f, -0.247700f, -0.750185f, -0.723652f, -0.187242f, 0.431441f, 0.772596f, 0.577686f, 0.009311f, -0.603223f, -0.759479f, -0.425338f, 0.190884f, 0.627938f, 0.666650f, 0.216790f, -0.369183f, -0.713871f, -0.577661f, -0.064936f, 0.453506f, 0.809723f, 0.611234f, -0.008242f, -0.638253f, -0.817010f, -0.472566f, 0.229487f, 0.747722f, 0.795789f, 0.274994f, -0.439120f, -0.845736f, -0.712702f, -0.055994f, 0.602465f, 0.787324f, 0.465691f, -0.137828f, -0.712394f, -0.747138f, -0.262637f, 0.413301f, 0.820724f, 0.650333f, 0.053666f, -0.552595f, -0.818269f, -0.501577f, 0.101368f, 0.679716f, 0.757179f, 0.347880f, -0.300844f, -0.727271f, -0.653682f, -0.124663f, 0.485844f, 0.739138f, 0.521417f, -0.083320f, -0.616491f, -0.729258f, -0.286947f, 0.330731f, 0.741294f, 0.603318f, 0.068560f, -0.526770f, -0.754496f, -0.425907f, 0.209026f, 0.689311f, 0.734710f, 0.282736f, -0.390827f, -0.764154f, -0.614101f, -0.059215f, 0.532938f, 0.757470f, 0.441552f, -0.155480f, + -0.624627f, -0.635188f, -0.220928f, 0.326989f, 0.664776f, 0.523404f, 0.026833f, -0.479936f, -0.651236f, -0.388414f, 0.141286f, 0.583351f, 0.618613f, 0.235517f, -0.300328f, -0.635007f, -0.514926f, -0.030010f, 0.455951f, 0.619030f, 0.363555f, -0.164710f, -0.576657f, -0.579246f, -0.183449f, 0.328783f, 0.516179f, 0.267201f, -0.030584f, -0.073694f, -0.023572f, -0.004919f}, + {0.000273f, 0.000358f, 0.000520f, 0.000746f, 0.001017f, 0.001307f, 0.001588f, 0.001829f, 0.001995f, 0.002055f, 0.001978f, 0.001734f, 0.001302f, 0.000663f, -0.000193f, -0.001268f, -0.002558f, -0.004048f, -0.005715f, -0.007530f, -0.009455f, -0.011446f, -0.013453f, -0.015426f, -0.017308f, -0.019047f, -0.020590f, -0.021887f, -0.022896f, -0.023579f, -0.023907f, -0.023862f, -0.023434f, -0.022624f, -0.021445f, -0.019919f, -0.018078f, -0.015965f, -0.013629f, -0.011127f, -0.008519f, -0.005871f, -0.003246f, -0.000710f, 0.001675f, 0.003854f, 0.005775f, 0.007396f, 0.008683f, 0.009612f, 0.010172f, 0.010358f, 0.010181f, 0.009660f, 0.008823f, 0.007708f, 0.006360f, 0.004829f, 0.003170f, 0.001440f, -0.000303f, -0.002004f, -0.003609f, -0.005069f, -0.006343f, -0.007396f, -0.008199f, -0.008735f, -0.008995f, -0.008977f, -0.008692f, -0.008155f, -0.007392f, -0.006432f, -0.005312f, -0.004071f, -0.002750f, -0.001393f, -0.000042f, 0.001263f, 0.002485f, 0.003591f, 0.004554f, 0.005353f, 0.005972f, 0.006402f, 0.006643f, 0.006697f, 0.006575f, 0.006293f, 0.005870f, 0.005329f, 0.004695f, 0.003995f, 0.003257f, 0.002507f, + 0.001769f, 0.001065f, 0.000415f, -0.000165f, -0.000666f, -0.001078f, -0.001399f, -0.001631f, -0.001776f, -0.001844f, -0.001843f, -0.001787f, -0.001687f, -0.001558f, -0.001413f, -0.001264f, -0.001122f, -0.000996f, -0.000892f, -0.000814f, -0.000763f, -0.000737f, -0.000731f, -0.000741f, -0.000757f, -0.000769f, -0.000769f, -0.000746f, -0.000689f, -0.000591f, -0.000444f, -0.000243f, 0.000014f, 0.000327f, 0.000694f, 0.001108f, 0.001561f, 0.002042f, 0.002539f, 0.003036f, 0.003519f, 0.003972f, 0.004378f, 0.004724f, 0.004996f, 0.005184f, 0.005280f, 0.005277f, 0.005175f, 0.004976f, 0.004683f, 0.004307f, 0.003859f, 0.003353f, 0.002807f, 0.002238f, 0.001667f, 0.001113f, 0.000596f, 0.000133f, -0.000259f, -0.000565f, -0.000776f, -0.000883f, -0.102988f, -0.341294f, -0.254497f, 0.391906f, 0.862557f, 0.540368f, -0.349671f, -0.909254f, -0.676052f, -0.030677f, 0.331228f, 0.698406f, 0.236689f, -0.264785f, -0.600240f, -0.465461f, -0.109871f, 0.428379f, 0.589347f, 0.409218f, -0.076928f, -0.452763f, -0.603311f, -0.262857f, 0.271601f, 0.610935f, 0.493932f, 0.122155f, -0.375662f, -0.622425f, -0.459174f, -0.035767f, + 0.486155f, 0.663043f, 0.415330f, -0.142677f, -0.611402f, -0.749182f, -0.314569f, 0.330349f, 0.813922f, 0.564511f, -0.020420f, -0.618496f, -0.798240f, -0.435640f, 0.247700f, 0.750185f, 0.723652f, 0.187242f, -0.431441f, -0.772596f, -0.577686f, -0.009311f, 0.603223f, 0.759479f, 0.425338f, -0.190884f, -0.627938f, -0.666650f, -0.216790f, 0.369183f, 0.713871f, 0.577661f, 0.064936f, -0.453506f, -0.809723f, -0.611234f, 0.008242f, 0.638253f, 0.817010f, 0.472566f, -0.229487f, -0.747722f, -0.795789f, -0.274994f, 0.439120f, 0.845736f, 0.712702f, 0.055994f, -0.602465f, -0.787324f, -0.465691f, 0.137828f, 0.712394f, 0.747138f, 0.262637f, -0.413301f, -0.820724f, -0.650333f, -0.053666f, 0.552595f, 0.818269f, 0.501577f, -0.101368f, -0.679716f, -0.757179f, -0.347880f, 0.300844f, 0.727271f, 0.653682f, 0.124663f, -0.485844f, -0.739138f, -0.521417f, 0.083320f, 0.616491f, 0.729258f, 0.286947f, -0.330731f, -0.741294f, -0.603318f, -0.068560f, 0.526770f, 0.754496f, 0.425907f, -0.209026f, -0.689311f, -0.734710f, -0.282736f, 0.390827f, 0.764154f, 0.614101f, 0.059215f, -0.532938f, -0.757470f, -0.441552f, 0.155480f, + 0.624627f, 0.635188f, 0.220928f, -0.326989f, -0.664776f, -0.523404f, -0.026833f, 0.479936f, 0.651236f, 0.388414f, -0.141286f, -0.583351f, -0.618613f, -0.235517f, 0.300328f, 0.635007f, 0.514926f, 0.030010f, -0.455951f, -0.619030f, -0.363555f, 0.164710f, 0.576657f, 0.579246f, 0.183449f, -0.328783f, -0.516179f, -0.267201f, 0.030584f, 0.073694f, 0.023572f, 0.004919f} + }, + { + {0.059356f, 0.058918f, 0.058045f, 0.056742f, 0.055018f, 0.052885f, 0.050359f, 0.047458f, 0.044207f, 0.040633f, 0.036770f, 0.032655f, 0.028332f, 0.023848f, 0.019257f, 0.014615f, 0.009983f, 0.005423f, 0.001002f, -0.003216f, -0.007164f, -0.010780f, -0.014005f, -0.016783f, -0.019066f, -0.020814f, -0.021996f, -0.022592f, -0.022591f, -0.021996f, -0.020822f, -0.019095f, -0.016856f, -0.014154f, -0.011051f, -0.007618f, -0.003934f, -0.000083f, 0.003845f, 0.007760f, 0.011570f, 0.015188f, 0.018529f, 0.021517f, 0.024084f, 0.026173f, 0.027739f, 0.028749f, 0.029187f, 0.029049f, 0.028346f, 0.027106f, 0.025366f, 0.023179f, 0.020608f, 0.017724f, 0.014606f, 0.011338f, 0.008007f, 0.004699f, 0.001498f, -0.001515f, -0.004266f, -0.006691f, -0.008735f, -0.010354f, -0.011517f, -0.012206f, -0.012415f, -0.012153f, -0.011440f, -0.010309f, -0.008803f, -0.006972f, -0.004877f, -0.002581f, -0.000152f, 0.002341f, 0.004829f, 0.007246f, 0.009530f, 0.011626f, 0.013485f, 0.015066f, 0.016339f, 0.017283f, 0.017887f, 0.018148f, 0.018075f, 0.017685f, 0.017001f, 0.016057f, 0.014888f, 0.013535f, 0.012042f, 0.010455f, + 0.008818f, 0.007174f, 0.005564f, 0.004026f, 0.002591f, 0.001287f, 0.000135f, -0.000850f, -0.001658f, -0.002286f, -0.002736f, -0.003016f, -0.003136f, -0.003113f, -0.002964f, -0.002710f, -0.002371f, -0.001969f, -0.001525f, -0.001059f, -0.000589f, -0.000130f, 0.000304f, 0.000704f, 0.001062f, 0.001373f, 0.001636f, 0.001852f, 0.002023f, 0.002155f, 0.002253f, 0.002324f, 0.002376f, 0.002416f, 0.002450f, 0.002485f, 0.002527f, 0.002578f, 0.002641f, 0.002719f, 0.002809f, 0.002912f, 0.003026f, 0.003145f, 0.003268f, 0.003390f, 0.003507f, 0.003615f, 0.003711f, 0.003791f, 0.003854f, 0.003899f, 0.003925f, 0.003934f, 0.003926f, 0.003905f, 0.003874f, 0.003835f, 0.003793f, 0.003751f, 0.003712f, 0.003681f, 0.003658f, 0.003646f, 0.025435f, -0.047501f, -0.206609f, -0.180773f, 0.076618f, 0.007264f, -0.166264f, -0.202849f, -0.245013f, -0.225976f, -0.104578f, 0.272204f, 0.124939f, 0.081930f, 0.216268f, -0.010555f, -0.079365f, -0.139618f, -0.035045f, -0.030516f, 0.087447f, 0.152968f, 0.251964f, 0.072578f, -0.132006f, -0.186124f, 0.029938f, 0.162010f, 0.228747f, 0.120886f, -0.019444f, -0.224763f, + -0.168052f, -0.058201f, 0.178736f, 0.240274f, 0.161280f, -0.082940f, -0.165587f, -0.176223f, 0.041225f, -0.196959f, -0.142288f, -0.004056f, 0.188594f, 0.191543f, 0.081427f, -0.126895f, -0.228758f, -0.207334f, 0.057669f, 0.248634f, 0.308111f, 0.142612f, -0.137366f, -0.397413f, -0.321543f, 0.012304f, 0.416471f, 0.512123f, 0.289699f, -0.186465f, -0.492982f, -0.494032f, -0.057562f, 0.388446f, 0.467916f, 0.122419f, -0.298982f, -0.492849f, -0.282425f, 0.102427f, 0.381377f, 0.379549f, 0.064660f, -0.262880f, -0.364571f, -0.233805f, 0.157811f, 0.329797f, 0.262631f, 0.013266f, -0.235415f, -0.319442f, -0.151267f, 0.078810f, 0.253781f, 0.217149f, 0.038698f, -0.127112f, -0.203217f, -0.150585f, -0.030391f, 0.046557f, 0.133111f, 0.108005f, -0.003642f, -0.090809f, -0.150407f, -0.077790f, 0.128890f, 0.251654f, 0.192947f, -0.014988f, -0.287307f, -0.327209f, -0.124433f, 0.167411f, 0.336493f, 0.284586f, 0.024757f, -0.237824f, -0.300271f, -0.160975f, 0.128004f, 0.256220f, 0.237250f, 0.031573f, -0.149200f, -0.246673f, -0.124003f, 0.006675f, 0.131374f, 0.169499f, 0.091640f, -0.009052f, -0.065511f, -0.097672f, + -0.092451f, -0.052411f, 0.028642f, 0.073811f, 0.086550f, 0.036878f, -0.028675f, -0.087544f, -0.082915f, -0.041597f, 0.032600f, 0.095675f, 0.076272f, 0.020556f, -0.045808f, -0.072406f, -0.047495f, -0.007953f, 0.051857f, 0.073567f, 0.024330f, -0.009503f, -0.048483f, -0.045138f, -0.010428f, 0.031531f, 0.045241f, 0.008668f, -0.006942f, -0.007100f, -0.002881f, -0.000993f}, + {0.059356f, 0.058918f, 0.058045f, 0.056742f, 0.055018f, 0.052885f, 0.050359f, 0.047458f, 0.044207f, 0.040633f, 0.036770f, 0.032655f, 0.028332f, 0.023848f, 0.019257f, 0.014615f, 0.009983f, 0.005423f, 0.001002f, -0.003216f, -0.007164f, -0.010780f, -0.014005f, -0.016783f, -0.019066f, -0.020814f, -0.021996f, -0.022592f, -0.022591f, -0.021996f, -0.020822f, -0.019095f, -0.016856f, -0.014154f, -0.011051f, -0.007618f, -0.003934f, -0.000083f, 0.003845f, 0.007760f, 0.011570f, 0.015188f, 0.018529f, 0.021517f, 0.024084f, 0.026173f, 0.027739f, 0.028749f, 0.029187f, 0.029049f, 0.028346f, 0.027106f, 0.025366f, 0.023179f, 0.020608f, 0.017724f, 0.014606f, 0.011338f, 0.008007f, 0.004699f, 0.001498f, -0.001515f, -0.004266f, -0.006691f, -0.008735f, -0.010354f, -0.011517f, -0.012206f, -0.012415f, -0.012153f, -0.011440f, -0.010309f, -0.008803f, -0.006972f, -0.004877f, -0.002581f, -0.000152f, 0.002341f, 0.004829f, 0.007246f, 0.009530f, 0.011626f, 0.013485f, 0.015066f, 0.016339f, 0.017283f, 0.017887f, 0.018148f, 0.018075f, 0.017685f, 0.017001f, 0.016057f, 0.014888f, 0.013535f, 0.012042f, 0.010455f, + 0.008818f, 0.007174f, 0.005564f, 0.004026f, 0.002591f, 0.001287f, 0.000135f, -0.000850f, -0.001658f, -0.002286f, -0.002736f, -0.003016f, -0.003136f, -0.003113f, -0.002964f, -0.002710f, -0.002371f, -0.001969f, -0.001525f, -0.001059f, -0.000589f, -0.000130f, 0.000304f, 0.000704f, 0.001062f, 0.001373f, 0.001636f, 0.001852f, 0.002023f, 0.002155f, 0.002253f, 0.002324f, 0.002376f, 0.002416f, 0.002450f, 0.002485f, 0.002527f, 0.002578f, 0.002641f, 0.002719f, 0.002809f, 0.002912f, 0.003026f, 0.003145f, 0.003268f, 0.003390f, 0.003507f, 0.003615f, 0.003711f, 0.003791f, 0.003854f, 0.003899f, 0.003925f, 0.003934f, 0.003926f, 0.003905f, 0.003874f, 0.003835f, 0.003793f, 0.003751f, 0.003712f, 0.003681f, 0.003658f, 0.003646f, 0.025435f, -0.047501f, -0.206609f, -0.180773f, 0.076618f, 0.007264f, -0.166264f, -0.202849f, -0.245013f, -0.225976f, -0.104578f, 0.272204f, 0.124939f, 0.081930f, 0.216268f, -0.010555f, -0.079365f, -0.139618f, -0.035045f, -0.030516f, 0.087447f, 0.152968f, 0.251964f, 0.072578f, -0.132006f, -0.186124f, 0.029938f, 0.162010f, 0.228747f, 0.120886f, -0.019444f, -0.224763f, + -0.168052f, -0.058201f, 0.178736f, 0.240274f, 0.161280f, -0.082940f, -0.165587f, -0.176223f, 0.041225f, -0.196959f, -0.142288f, -0.004056f, 0.188594f, 0.191543f, 0.081427f, -0.126895f, -0.228758f, -0.207334f, 0.057669f, 0.248634f, 0.308111f, 0.142612f, -0.137366f, -0.397413f, -0.321543f, 0.012304f, 0.416471f, 0.512123f, 0.289699f, -0.186465f, -0.492982f, -0.494032f, -0.057562f, 0.388446f, 0.467916f, 0.122419f, -0.298982f, -0.492849f, -0.282425f, 0.102427f, 0.381377f, 0.379549f, 0.064660f, -0.262880f, -0.364571f, -0.233805f, 0.157811f, 0.329797f, 0.262631f, 0.013266f, -0.235415f, -0.319442f, -0.151267f, 0.078810f, 0.253781f, 0.217149f, 0.038698f, -0.127112f, -0.203217f, -0.150585f, -0.030391f, 0.046557f, 0.133111f, 0.108005f, -0.003642f, -0.090809f, -0.150407f, -0.077790f, 0.128890f, 0.251654f, 0.192947f, -0.014988f, -0.287307f, -0.327209f, -0.124433f, 0.167411f, 0.336493f, 0.284586f, 0.024757f, -0.237824f, -0.300271f, -0.160975f, 0.128004f, 0.256220f, 0.237250f, 0.031573f, -0.149200f, -0.246673f, -0.124003f, 0.006675f, 0.131374f, 0.169499f, 0.091640f, -0.009052f, -0.065511f, -0.097672f, + -0.092451f, -0.052411f, 0.028642f, 0.073811f, 0.086550f, 0.036878f, -0.028675f, -0.087544f, -0.082915f, -0.041597f, 0.032600f, 0.095675f, 0.076272f, 0.020556f, -0.045808f, -0.072406f, -0.047495f, -0.007953f, 0.051857f, 0.073567f, 0.024330f, -0.009503f, -0.048483f, -0.045138f, -0.010428f, 0.031531f, 0.045241f, 0.008668f, -0.006942f, -0.007100f, -0.002881f, -0.000993f} + }, + { + {0.053625f, 0.052866f, 0.051368f, 0.049170f, 0.046329f, 0.042918f, 0.039023f, 0.034745f, 0.030190f, 0.025471f, 0.020704f, 0.016002f, 0.011474f, 0.007223f, 0.003339f, -0.000098f, -0.003026f, -0.005398f, -0.007185f, -0.008378f, -0.008983f, -0.009027f, -0.008552f, -0.007615f, -0.006285f, -0.004645f, -0.002780f, -0.000785f, 0.001246f, 0.003222f, 0.005052f, 0.006656f, 0.007962f, 0.008912f, 0.009459f, 0.009574f, 0.009241f, 0.008462f, 0.007255f, 0.005653f, 0.003703f, 0.001463f, -0.000996f, -0.003599f, -0.006261f, -0.008899f, -0.011428f, -0.013766f, -0.015839f, -0.017578f, -0.018928f, -0.019844f, -0.020294f, -0.020265f, -0.019753f, -0.018775f, -0.017358f, -0.015546f, -0.013394f, -0.010967f, -0.008340f, -0.005593f, -0.002809f, -0.000075f, 0.002529f, 0.004922f, 0.007034f, 0.008800f, 0.010169f, 0.011101f, 0.011570f, 0.011564f, 0.011086f, 0.010152f, 0.008795f, 0.007057f, 0.004995f, 0.002671f, 0.000160f, -0.002463f, -0.005116f, -0.007719f, -0.010194f, -0.012465f, -0.014467f, -0.016138f, -0.017432f, -0.018311f, -0.018750f, -0.018740f, -0.018282f, -0.017393f, -0.016100f, -0.014445f, -0.012478f, -0.010258f, + -0.007851f, -0.005328f, -0.002762f, -0.000228f, 0.002203f, 0.004463f, 0.006489f, 0.008228f, 0.009634f, 0.010673f, 0.011321f, 0.011567f, 0.011411f, 0.010866f, 0.009955f, 0.008712f, 0.007181f, 0.005413f, 0.003464f, 0.001397f, -0.000724f, -0.002835f, -0.004872f, -0.006776f, -0.008491f, -0.009969f, -0.011170f, -0.012061f, -0.012620f, -0.012835f, -0.012705f, -0.012239f, -0.011454f, -0.010378f, -0.009045f, -0.007498f, -0.005785f, -0.003955f, -0.002062f, -0.000161f, 0.001697f, 0.003461f, 0.005087f, 0.006533f, 0.007766f, 0.008761f, 0.009499f, 0.009972f, 0.010178f, 0.010127f, 0.009834f, 0.009323f, 0.008624f, 0.007772f, 0.006808f, 0.005773f, 0.004712f, 0.003667f, 0.002682f, 0.001795f, 0.001040f, 0.000447f, 0.000039f, -0.000170f, 0.050249f, 0.048348f, -0.032902f, -0.133252f, -0.051827f, 0.061902f, -0.065834f, -0.089043f, -0.086938f, -0.054330f, -0.271254f, 0.096964f, -0.267374f, -0.263896f, 0.129482f, 0.546273f, 0.617687f, 0.273155f, -0.174560f, -0.533387f, -0.553862f, -0.047249f, 0.546821f, 0.739409f, 0.437574f, -0.182795f, -0.701297f, -0.782666f, -0.179700f, 0.531033f, 0.909401f, 0.572299f, + -0.135054f, -0.739309f, -0.743548f, -0.233507f, 0.430979f, 0.757620f, 0.447458f, -0.113912f, -0.697241f, -0.285283f, 0.200104f, 0.551926f, 0.527428f, 0.167191f, -0.279300f, -0.511028f, -0.414285f, -0.035132f, 0.341541f, 0.439386f, 0.261744f, -0.072803f, -0.320505f, -0.349316f, -0.137322f, 0.104548f, 0.287208f, 0.269386f, 0.083129f, -0.148946f, -0.281713f, -0.207672f, -0.018923f, 0.102224f, 0.321176f, 0.236280f, 0.042425f, -0.219756f, -0.217805f, -0.072498f, 0.123498f, 0.179293f, 0.116213f, -0.050582f, -0.138022f, -0.073945f, 0.036296f, 0.153541f, 0.153026f, 0.014050f, -0.140485f, -0.160171f, -0.061968f, 0.112086f, 0.260109f, 0.180126f, 0.031071f, -0.154900f, -0.163696f, -0.024447f, 0.058056f, 0.095424f, 0.048401f, -0.039236f, -0.025341f, -0.025501f, 0.061017f, 0.031721f, -0.120208f, -0.222734f, -0.180850f, 0.017131f, 0.223191f, 0.273290f, 0.085660f, -0.173557f, -0.344212f, -0.229181f, 0.092056f, 0.346337f, 0.343069f, 0.091950f, -0.246870f, -0.397226f, -0.330350f, 0.031617f, 0.369979f, 0.427147f, 0.130983f, -0.260862f, -0.436429f, -0.309947f, 0.028984f, 0.323668f, 0.385342f, 0.170831f, + -0.141426f, -0.359796f, -0.310746f, -0.043311f, 0.254655f, 0.384138f, 0.214884f, -0.062321f, -0.328198f, -0.348665f, -0.119870f, 0.201613f, 0.352533f, 0.283046f, -0.012735f, -0.253267f, -0.340710f, -0.212202f, 0.049709f, 0.279291f, 0.281016f, 0.089799f, -0.147975f, -0.291692f, -0.212827f, 0.000441f, 0.200148f, 0.196099f, 0.046973f, -0.016103f, -0.005004f, 0.002778f}, + {0.053625f, 0.052866f, 0.051368f, 0.049170f, 0.046329f, 0.042918f, 0.039023f, 0.034745f, 0.030190f, 0.025471f, 0.020704f, 0.016002f, 0.011474f, 0.007223f, 0.003339f, -0.000098f, -0.003026f, -0.005398f, -0.007185f, -0.008378f, -0.008983f, -0.009027f, -0.008552f, -0.007615f, -0.006285f, -0.004645f, -0.002780f, -0.000785f, 0.001246f, 0.003222f, 0.005052f, 0.006656f, 0.007962f, 0.008912f, 0.009459f, 0.009574f, 0.009241f, 0.008462f, 0.007255f, 0.005653f, 0.003703f, 0.001463f, -0.000996f, -0.003599f, -0.006261f, -0.008899f, -0.011428f, -0.013766f, -0.015839f, -0.017578f, -0.018928f, -0.019844f, -0.020294f, -0.020265f, -0.019753f, -0.018775f, -0.017358f, -0.015546f, -0.013394f, -0.010967f, -0.008340f, -0.005593f, -0.002809f, -0.000075f, 0.002529f, 0.004922f, 0.007034f, 0.008800f, 0.010169f, 0.011101f, 0.011570f, 0.011564f, 0.011086f, 0.010152f, 0.008795f, 0.007057f, 0.004995f, 0.002671f, 0.000160f, -0.002463f, -0.005116f, -0.007719f, -0.010194f, -0.012465f, -0.014467f, -0.016138f, -0.017432f, -0.018311f, -0.018750f, -0.018740f, -0.018282f, -0.017393f, -0.016100f, -0.014445f, -0.012478f, -0.010258f, + -0.007851f, -0.005328f, -0.002762f, -0.000228f, 0.002203f, 0.004463f, 0.006489f, 0.008228f, 0.009634f, 0.010673f, 0.011321f, 0.011567f, 0.011411f, 0.010866f, 0.009955f, 0.008712f, 0.007181f, 0.005413f, 0.003464f, 0.001397f, -0.000724f, -0.002835f, -0.004872f, -0.006776f, -0.008491f, -0.009969f, -0.011170f, -0.012061f, -0.012620f, -0.012835f, -0.012705f, -0.012239f, -0.011454f, -0.010378f, -0.009045f, -0.007498f, -0.005785f, -0.003955f, -0.002062f, -0.000161f, 0.001697f, 0.003461f, 0.005087f, 0.006533f, 0.007766f, 0.008761f, 0.009499f, 0.009972f, 0.010178f, 0.010127f, 0.009834f, 0.009323f, 0.008624f, 0.007772f, 0.006808f, 0.005773f, 0.004712f, 0.003667f, 0.002682f, 0.001795f, 0.001040f, 0.000447f, 0.000039f, -0.000170f, 0.050249f, 0.048348f, -0.032902f, -0.133252f, -0.051827f, 0.061902f, -0.065834f, -0.089043f, -0.086938f, -0.054330f, -0.271254f, 0.096964f, -0.267374f, -0.263896f, 0.129482f, 0.546273f, 0.617687f, 0.273155f, -0.174560f, -0.533387f, -0.553862f, -0.047249f, 0.546821f, 0.739409f, 0.437574f, -0.182795f, -0.701297f, -0.782666f, -0.179700f, 0.531033f, 0.909401f, 0.572299f, + -0.135054f, -0.739309f, -0.743548f, -0.233507f, 0.430979f, 0.757620f, 0.447458f, -0.113912f, -0.697241f, -0.285283f, 0.200104f, 0.551926f, 0.527428f, 0.167191f, -0.279300f, -0.511028f, -0.414285f, -0.035132f, 0.341541f, 0.439386f, 0.261744f, -0.072803f, -0.320505f, -0.349316f, -0.137322f, 0.104548f, 0.287208f, 0.269386f, 0.083129f, -0.148946f, -0.281713f, -0.207672f, -0.018923f, 0.102224f, 0.321176f, 0.236280f, 0.042425f, -0.219756f, -0.217805f, -0.072498f, 0.123498f, 0.179293f, 0.116213f, -0.050582f, -0.138022f, -0.073945f, 0.036296f, 0.153541f, 0.153026f, 0.014050f, -0.140485f, -0.160171f, -0.061968f, 0.112086f, 0.260109f, 0.180126f, 0.031071f, -0.154900f, -0.163696f, -0.024447f, 0.058056f, 0.095424f, 0.048401f, -0.039236f, -0.025341f, -0.025501f, 0.061017f, 0.031721f, -0.120208f, -0.222734f, -0.180850f, 0.017131f, 0.223191f, 0.273290f, 0.085660f, -0.173557f, -0.344212f, -0.229181f, 0.092056f, 0.346337f, 0.343069f, 0.091950f, -0.246870f, -0.397226f, -0.330350f, 0.031617f, 0.369979f, 0.427147f, 0.130983f, -0.260862f, -0.436429f, -0.309947f, 0.028984f, 0.323668f, 0.385342f, 0.170831f, + -0.141426f, -0.359796f, -0.310746f, -0.043311f, 0.254655f, 0.384138f, 0.214884f, -0.062321f, -0.328198f, -0.348665f, -0.119870f, 0.201613f, 0.352533f, 0.283046f, -0.012735f, -0.253267f, -0.340710f, -0.212202f, 0.049709f, 0.279291f, 0.281016f, 0.089799f, -0.147975f, -0.291692f, -0.212827f, 0.000441f, 0.200148f, 0.196099f, 0.046973f, -0.016103f, -0.005004f, 0.002778f} + }, + { + {0.041404f, 0.041181f, 0.040735f, 0.040068f, 0.039181f, 0.038078f, 0.036763f, 0.035243f, 0.033527f, 0.031627f, 0.029558f, 0.027339f, 0.024993f, 0.022545f, 0.020028f, 0.017474f, 0.014920f, 0.012407f, 0.009975f, 0.007665f, 0.005521f, 0.003582f, 0.001885f, 0.000465f, -0.000651f, -0.001440f, -0.001887f, -0.001986f, -0.001739f, -0.001156f, -0.000259f, 0.000924f, 0.002354f, 0.003985f, 0.005764f, 0.007634f, 0.009531f, 0.011392f, 0.013150f, 0.014743f, 0.016111f, 0.017197f, 0.017955f, 0.018344f, 0.018334f, 0.017906f, 0.017053f, 0.015780f, 0.014102f, 0.012048f, 0.009657f, 0.006977f, 0.004066f, 0.000987f, -0.002192f, -0.005397f, -0.008559f, -0.011606f, -0.014472f, -0.017094f, -0.019419f, -0.021403f, -0.023011f, -0.024218f, -0.025013f, -0.025397f, -0.025380f, -0.024986f, -0.024246f, -0.023202f, -0.021903f, -0.020403f, -0.018758f, -0.017029f, -0.015274f, -0.013548f, -0.011903f, -0.010384f, -0.009031f, -0.007873f, -0.006930f, -0.006214f, -0.005725f, -0.005456f, -0.005389f, -0.005500f, -0.005758f, -0.006126f, -0.006565f, -0.007033f, -0.007489f, -0.007894f, -0.008211f, -0.008410f, -0.008465f, -0.008359f, + -0.008083f, -0.007635f, -0.007021f, -0.006257f, -0.005365f, -0.004374f, -0.003317f, -0.002232f, -0.001159f, -0.000140f, 0.000786f, 0.001581f, 0.002214f, 0.002656f, 0.002888f, 0.002895f, 0.002675f, 0.002230f, 0.001573f, 0.000725f, -0.000284f, -0.001422f, -0.002646f, -0.003913f, -0.005176f, -0.006389f, -0.007505f, -0.008481f, -0.009279f, -0.009864f, -0.010212f, -0.010304f, -0.010130f, -0.009691f, -0.008994f, -0.008057f, -0.006906f, -0.005572f, -0.004093f, -0.002513f, -0.000877f, 0.000768f, 0.002376f, 0.003903f, 0.005308f, 0.006555f, 0.007615f, 0.008468f, 0.009098f, 0.009501f, 0.009680f, 0.009647f, 0.009419f, 0.009023f, 0.008491f, 0.007857f, 0.007161f, 0.006441f, 0.005737f, 0.005085f, 0.004520f, 0.004069f, 0.003756f, 0.003595f, -0.008836f, -0.013947f, -0.011734f, -0.019741f, -0.084781f, -0.068486f, -0.074672f, 0.005801f, -0.068220f, -0.035320f, -0.113818f, 0.025063f, -0.100212f, -0.161553f, 0.090443f, 0.307023f, 0.230631f, 0.193338f, -0.085542f, -0.256562f, -0.088782f, -0.069616f, 0.161908f, 0.143692f, 0.081446f, -0.108797f, -0.219084f, -0.183631f, 0.035419f, 0.217078f, 0.277572f, 0.148960f, + -0.077514f, -0.379229f, -0.269153f, 0.110752f, 0.336897f, 0.322305f, 0.115919f, -0.214207f, -0.406310f, -0.119649f, 0.205301f, 0.360085f, 0.307915f, 0.030391f, -0.224748f, -0.290953f, -0.230695f, -0.083741f, 0.191810f, 0.256304f, 0.249502f, 0.006366f, -0.133890f, -0.289349f, -0.121593f, -0.013026f, 0.252172f, 0.282690f, 0.022936f, 0.006124f, -0.201204f, -0.264997f, -0.098130f, 0.187715f, 0.257124f, 0.123241f, -0.144308f, -0.318128f, -0.223143f, -0.006095f, 0.175533f, 0.299275f, 0.196213f, -0.081491f, -0.264732f, -0.265901f, 0.040931f, 0.221500f, 0.275122f, 0.198737f, -0.144336f, -0.297062f, -0.244960f, 0.042707f, 0.229949f, 0.266618f, 0.068954f, -0.175800f, -0.243310f, -0.105423f, 0.057597f, 0.091762f, -0.006985f, -0.079265f, -0.051572f, -0.011031f, 0.063336f, 0.023698f, -0.117553f, -0.174823f, -0.151150f, 0.008448f, 0.145491f, 0.202448f, 0.074955f, -0.077028f, -0.245274f, -0.212254f, -0.062183f, 0.111539f, 0.268934f, 0.230586f, -0.041415f, -0.228907f, -0.204211f, -0.056961f, 0.188204f, 0.210330f, 0.096438f, 0.013180f, -0.229251f, -0.212336f, -0.115388f, 0.057396f, 0.170929f, 0.135953f, + -0.008739f, -0.093660f, -0.109893f, -0.030024f, 0.041695f, 0.097382f, 0.061194f, 0.002393f, -0.066722f, -0.131433f, -0.072092f, 0.034941f, 0.081100f, 0.094303f, 0.017674f, -0.043325f, -0.087348f, -0.099424f, -0.043012f, 0.030806f, 0.062464f, 0.031543f, -0.014017f, -0.042408f, -0.029252f, -0.013344f, 0.037483f, 0.053543f, 0.019193f, -0.004597f, 0.000627f, 0.001527f}, + {-0.041404f, -0.041181f, -0.040735f, -0.040068f, -0.039181f, -0.038078f, -0.036763f, -0.035243f, -0.033527f, -0.031627f, -0.029558f, -0.027339f, -0.024993f, -0.022545f, -0.020028f, -0.017474f, -0.014920f, -0.012407f, -0.009975f, -0.007665f, -0.005521f, -0.003582f, -0.001885f, -0.000465f, 0.000651f, 0.001440f, 0.001887f, 0.001986f, 0.001739f, 0.001156f, 0.000259f, -0.000924f, -0.002354f, -0.003985f, -0.005764f, -0.007634f, -0.009531f, -0.011392f, -0.013150f, -0.014743f, -0.016111f, -0.017197f, -0.017955f, -0.018344f, -0.018334f, -0.017906f, -0.017053f, -0.015780f, -0.014102f, -0.012048f, -0.009657f, -0.006977f, -0.004066f, -0.000987f, 0.002192f, 0.005397f, 0.008559f, 0.011606f, 0.014472f, 0.017094f, 0.019419f, 0.021403f, 0.023011f, 0.024218f, 0.025013f, 0.025397f, 0.025380f, 0.024986f, 0.024246f, 0.023202f, 0.021903f, 0.020403f, 0.018758f, 0.017029f, 0.015274f, 0.013548f, 0.011903f, 0.010384f, 0.009031f, 0.007873f, 0.006930f, 0.006214f, 0.005725f, 0.005456f, 0.005389f, 0.005500f, 0.005758f, 0.006126f, 0.006565f, 0.007033f, 0.007489f, 0.007894f, 0.008211f, 0.008410f, 0.008465f, 0.008359f, + 0.008083f, 0.007635f, 0.007021f, 0.006257f, 0.005365f, 0.004374f, 0.003317f, 0.002232f, 0.001159f, 0.000140f, -0.000786f, -0.001581f, -0.002214f, -0.002656f, -0.002888f, -0.002895f, -0.002675f, -0.002230f, -0.001573f, -0.000725f, 0.000284f, 0.001422f, 0.002646f, 0.003913f, 0.005176f, 0.006389f, 0.007505f, 0.008481f, 0.009279f, 0.009864f, 0.010212f, 0.010304f, 0.010130f, 0.009691f, 0.008994f, 0.008057f, 0.006906f, 0.005572f, 0.004093f, 0.002513f, 0.000877f, -0.000768f, -0.002376f, -0.003903f, -0.005308f, -0.006555f, -0.007615f, -0.008468f, -0.009098f, -0.009501f, -0.009680f, -0.009647f, -0.009419f, -0.009023f, -0.008491f, -0.007857f, -0.007161f, -0.006441f, -0.005737f, -0.005085f, -0.004520f, -0.004069f, -0.003756f, -0.003595f, 0.008836f, 0.013947f, 0.011734f, 0.019741f, 0.084781f, 0.068486f, 0.074672f, -0.005801f, 0.068220f, 0.035320f, 0.113818f, -0.025063f, 0.100212f, 0.161553f, -0.090443f, -0.307023f, -0.230631f, -0.193338f, 0.085542f, 0.256562f, 0.088782f, 0.069616f, -0.161908f, -0.143692f, -0.081446f, 0.108797f, 0.219084f, 0.183631f, -0.035419f, -0.217078f, -0.277572f, -0.148960f, + 0.077514f, 0.379229f, 0.269153f, -0.110752f, -0.336897f, -0.322305f, -0.115919f, 0.214207f, 0.406310f, 0.119649f, -0.205301f, -0.360085f, -0.307915f, -0.030391f, 0.224748f, 0.290953f, 0.230695f, 0.083741f, -0.191810f, -0.256304f, -0.249502f, -0.006366f, 0.133890f, 0.289349f, 0.121593f, 0.013026f, -0.252172f, -0.282690f, -0.022936f, -0.006124f, 0.201204f, 0.264997f, 0.098130f, -0.187715f, -0.257124f, -0.123241f, 0.144308f, 0.318128f, 0.223143f, 0.006095f, -0.175533f, -0.299275f, -0.196213f, 0.081491f, 0.264732f, 0.265901f, -0.040931f, -0.221500f, -0.275122f, -0.198737f, 0.144336f, 0.297062f, 0.244960f, -0.042707f, -0.229949f, -0.266618f, -0.068954f, 0.175800f, 0.243310f, 0.105423f, -0.057597f, -0.091762f, 0.006985f, 0.079265f, 0.051572f, 0.011031f, -0.063336f, -0.023698f, 0.117553f, 0.174823f, 0.151150f, -0.008448f, -0.145491f, -0.202448f, -0.074955f, 0.077028f, 0.245274f, 0.212254f, 0.062183f, -0.111539f, -0.268934f, -0.230586f, 0.041415f, 0.228907f, 0.204211f, 0.056961f, -0.188204f, -0.210330f, -0.096438f, -0.013180f, 0.229251f, 0.212336f, 0.115388f, -0.057396f, -0.170929f, -0.135953f, + 0.008739f, 0.093660f, 0.109893f, 0.030024f, -0.041695f, -0.097382f, -0.061194f, -0.002393f, 0.066722f, 0.131433f, 0.072092f, -0.034941f, -0.081100f, -0.094303f, -0.017674f, 0.043325f, 0.087348f, 0.099424f, 0.043012f, -0.030806f, -0.062464f, -0.031543f, 0.014017f, 0.042408f, 0.029252f, 0.013344f, -0.037483f, -0.053543f, -0.019193f, 0.004597f, -0.000627f, -0.001527f} + }, + { + {0.028626f, 0.028642f, 0.028671f, 0.028702f, 0.028721f, 0.028711f, 0.028652f, 0.028521f, 0.028297f, 0.027957f, 0.027481f, 0.026852f, 0.026056f, 0.025086f, 0.023936f, 0.022611f, 0.021120f, 0.019477f, 0.017705f, 0.015831f, 0.013886f, 0.011907f, 0.009933f, 0.008003f, 0.006159f, 0.004439f, 0.002881f, 0.001516f, 0.000373f, -0.000527f, -0.001171f, -0.001551f, -0.001670f, -0.001537f, -0.001170f, -0.000593f, 0.000160f, 0.001054f, 0.002046f, 0.003092f, 0.004146f, 0.005163f, 0.006098f, 0.006912f, 0.007567f, 0.008036f, 0.008294f, 0.008328f, 0.008132f, 0.007708f, 0.007068f, 0.006231f, 0.005225f, 0.004082f, 0.002843f, 0.001551f, 0.000250f, -0.001011f, -0.002187f, -0.003236f, -0.004118f, -0.004799f, -0.005252f, -0.005458f, -0.005406f, -0.005094f, -0.004528f, -0.003723f, -0.002704f, -0.001502f, -0.000152f, 0.001302f, 0.002815f, 0.004339f, 0.005828f, 0.007233f, 0.008513f, 0.009628f, 0.010545f, 0.011238f, 0.011688f, 0.011887f, 0.011831f, 0.011528f, 0.010994f, 0.010251f, 0.009329f, 0.008264f, 0.007093f, 0.005861f, 0.004610f, 0.003383f, 0.002222f, 0.001165f, 0.000245f, -0.000509f, + -0.001078f, -0.001446f, -0.001608f, -0.001565f, -0.001327f, -0.000908f, -0.000334f, 0.000370f, 0.001171f, 0.002033f, 0.002919f, 0.003791f, 0.004615f, 0.005355f, 0.005983f, 0.006471f, 0.006801f, 0.006959f, 0.006937f, 0.006736f, 0.006361f, 0.005825f, 0.005147f, 0.004348f, 0.003458f, 0.002504f, 0.001519f, 0.000534f, -0.000420f, -0.001312f, -0.002119f, -0.002816f, -0.003387f, -0.003819f, -0.004106f, -0.004247f, -0.004246f, -0.004112f, -0.003861f, -0.003510f, -0.003082f, -0.002598f, -0.002086f, -0.001569f, -0.001071f, -0.000615f, -0.000219f, 0.000100f, 0.000330f, 0.000465f, 0.000501f, 0.000441f, 0.000291f, 0.000061f, -0.000235f, -0.000579f, -0.000954f, -0.001339f, -0.001715f, -0.002062f, -0.002363f, -0.002603f, -0.002770f, -0.002856f, -0.031883f, -0.046548f, -0.027006f, -0.016097f, -0.080974f, -0.040031f, -0.043987f, -0.101210f, -0.273445f, -0.110743f, 0.010624f, 0.201980f, -0.125129f, -0.213107f, 0.130433f, 0.239737f, 0.175863f, 0.076859f, -0.046694f, -0.187719f, -0.040409f, -0.052401f, 0.136515f, 0.109383f, 0.072071f, -0.078017f, 0.045544f, -0.025358f, 0.050872f, -0.061143f, -0.071787f, 0.045776f, + 0.115052f, 0.163409f, 0.108495f, -0.007344f, -0.125486f, -0.119381f, -0.036933f, 0.055229f, 0.129259f, 0.087735f, 0.057230f, 0.039498f, -0.049486f, -0.024636f, -0.030369f, 0.016216f, 0.014539f, -0.054091f, 0.039386f, 0.037695f, 0.051301f, 0.003901f, -0.048974f, -0.113857f, -0.048065f, 0.075069f, 0.218723f, 0.144183f, 0.038129f, -0.094893f, -0.194108f, -0.152929f, 0.019428f, 0.124388f, 0.178049f, 0.010386f, -0.137624f, -0.190515f, 0.004197f, 0.185613f, 0.250081f, 0.051928f, -0.213124f, -0.330274f, -0.161489f, 0.151882f, 0.362165f, 0.322165f, 0.032381f, -0.246047f, -0.405064f, -0.250528f, 0.091165f, 0.307366f, 0.310248f, 0.100028f, -0.202284f, -0.325360f, -0.218936f, 0.037230f, 0.203787f, 0.201997f, 0.102652f, -0.067244f, -0.154671f, -0.120531f, -0.026295f, 0.116436f, 0.134289f, 0.085847f, 0.012360f, -0.031336f, -0.115344f, -0.152819f, -0.114131f, 0.036014f, 0.139857f, 0.196502f, 0.081002f, -0.057765f, -0.182221f, -0.163896f, -0.052464f, 0.062503f, 0.209205f, 0.162963f, 0.045714f, -0.136333f, -0.169673f, -0.077282f, -0.024267f, 0.074428f, 0.104327f, 0.090231f, 0.025751f, -0.049072f, + -0.109818f, -0.099401f, -0.031049f, 0.044631f, 0.094151f, 0.073971f, -0.006456f, -0.113584f, -0.092900f, -0.032184f, 0.021955f, 0.052643f, 0.026174f, -0.003465f, -0.028569f, -0.006586f, 0.026063f, 0.041254f, 0.029136f, 0.002444f, -0.066057f, -0.058221f, -0.036227f, 0.000289f, 0.036723f, 0.066118f, 0.024742f, -0.034124f, -0.035054f, -0.014016f, -0.006304f, -0.005896f}, + {-0.028626f, -0.028642f, -0.028671f, -0.028702f, -0.028721f, -0.028711f, -0.028652f, -0.028521f, -0.028297f, -0.027957f, -0.027481f, -0.026852f, -0.026056f, -0.025086f, -0.023936f, -0.022611f, -0.021120f, -0.019477f, -0.017705f, -0.015831f, -0.013886f, -0.011907f, -0.009933f, -0.008003f, -0.006159f, -0.004439f, -0.002881f, -0.001516f, -0.000373f, 0.000527f, 0.001171f, 0.001551f, 0.001670f, 0.001537f, 0.001170f, 0.000593f, -0.000160f, -0.001054f, -0.002046f, -0.003092f, -0.004146f, -0.005163f, -0.006098f, -0.006912f, -0.007567f, -0.008036f, -0.008294f, -0.008328f, -0.008132f, -0.007708f, -0.007068f, -0.006231f, -0.005225f, -0.004082f, -0.002843f, -0.001551f, -0.000250f, 0.001011f, 0.002187f, 0.003236f, 0.004118f, 0.004799f, 0.005252f, 0.005458f, 0.005406f, 0.005094f, 0.004528f, 0.003723f, 0.002704f, 0.001502f, 0.000152f, -0.001302f, -0.002815f, -0.004339f, -0.005828f, -0.007233f, -0.008513f, -0.009628f, -0.010545f, -0.011238f, -0.011688f, -0.011887f, -0.011831f, -0.011528f, -0.010994f, -0.010251f, -0.009329f, -0.008264f, -0.007093f, -0.005861f, -0.004610f, -0.003383f, -0.002222f, -0.001165f, -0.000245f, 0.000509f, + 0.001078f, 0.001446f, 0.001608f, 0.001565f, 0.001327f, 0.000908f, 0.000334f, -0.000370f, -0.001171f, -0.002033f, -0.002919f, -0.003791f, -0.004615f, -0.005355f, -0.005983f, -0.006471f, -0.006801f, -0.006959f, -0.006937f, -0.006736f, -0.006361f, -0.005825f, -0.005147f, -0.004348f, -0.003458f, -0.002504f, -0.001519f, -0.000534f, 0.000420f, 0.001312f, 0.002119f, 0.002816f, 0.003387f, 0.003819f, 0.004106f, 0.004247f, 0.004246f, 0.004112f, 0.003861f, 0.003510f, 0.003082f, 0.002598f, 0.002086f, 0.001569f, 0.001071f, 0.000615f, 0.000219f, -0.000100f, -0.000330f, -0.000465f, -0.000501f, -0.000441f, -0.000291f, -0.000061f, 0.000235f, 0.000579f, 0.000954f, 0.001339f, 0.001715f, 0.002062f, 0.002363f, 0.002603f, 0.002770f, 0.002856f, 0.031883f, 0.046548f, 0.027006f, 0.016097f, 0.080974f, 0.040031f, 0.043987f, 0.101210f, 0.273445f, 0.110743f, -0.010624f, -0.201980f, 0.125129f, 0.213107f, -0.130433f, -0.239737f, -0.175863f, -0.076859f, 0.046694f, 0.187719f, 0.040409f, 0.052401f, -0.136515f, -0.109383f, -0.072071f, 0.078017f, -0.045544f, 0.025358f, -0.050872f, 0.061143f, 0.071787f, -0.045776f, + -0.115052f, -0.163409f, -0.108495f, 0.007344f, 0.125486f, 0.119381f, 0.036933f, -0.055229f, -0.129259f, -0.087735f, -0.057230f, -0.039498f, 0.049486f, 0.024636f, 0.030369f, -0.016216f, -0.014539f, 0.054091f, -0.039386f, -0.037695f, -0.051301f, -0.003901f, 0.048974f, 0.113857f, 0.048065f, -0.075069f, -0.218723f, -0.144183f, -0.038129f, 0.094893f, 0.194108f, 0.152929f, -0.019428f, -0.124388f, -0.178049f, -0.010386f, 0.137624f, 0.190515f, -0.004197f, -0.185613f, -0.250081f, -0.051928f, 0.213124f, 0.330274f, 0.161489f, -0.151882f, -0.362165f, -0.322165f, -0.032381f, 0.246047f, 0.405064f, 0.250528f, -0.091165f, -0.307366f, -0.310248f, -0.100028f, 0.202284f, 0.325360f, 0.218936f, -0.037230f, -0.203787f, -0.201997f, -0.102652f, 0.067244f, 0.154671f, 0.120531f, 0.026295f, -0.116436f, -0.134289f, -0.085847f, -0.012360f, 0.031336f, 0.115344f, 0.152819f, 0.114131f, -0.036014f, -0.139857f, -0.196502f, -0.081002f, 0.057765f, 0.182221f, 0.163896f, 0.052464f, -0.062503f, -0.209205f, -0.162963f, -0.045714f, 0.136333f, 0.169673f, 0.077282f, 0.024267f, -0.074428f, -0.104327f, -0.090231f, -0.025751f, 0.049072f, + 0.109818f, 0.099401f, 0.031049f, -0.044631f, -0.094151f, -0.073971f, 0.006456f, 0.113584f, 0.092900f, 0.032184f, -0.021955f, -0.052643f, -0.026174f, 0.003465f, 0.028569f, 0.006586f, -0.026063f, -0.041254f, -0.029136f, -0.002444f, 0.066057f, 0.058221f, 0.036227f, -0.000289f, -0.036723f, -0.066118f, -0.024742f, 0.034124f, 0.035054f, 0.014016f, 0.006304f, 0.005896f} + }, + { + {0.025310f, 0.025687f, 0.026423f, 0.027479f, 0.028803f, 0.030327f, 0.031971f, 0.033646f, 0.035260f, 0.036719f, 0.037934f, 0.038819f, 0.039302f, 0.039323f, 0.038839f, 0.037826f, 0.036279f, 0.034214f, 0.031669f, 0.028699f, 0.025378f, 0.021796f, 0.018055f, 0.014265f, 0.010543f, 0.007004f, 0.003761f, 0.000920f, -0.001427f, -0.003202f, -0.004345f, -0.004818f, -0.004606f, -0.003716f, -0.002180f, -0.000053f, 0.002590f, 0.005652f, 0.009022f, 0.012578f, 0.016186f, 0.019711f, 0.023017f, 0.025976f, 0.028466f, 0.030383f, 0.031636f, 0.032159f, 0.031907f, 0.030860f, 0.029023f, 0.026427f, 0.023127f, 0.019201f, 0.014747f, 0.009880f, 0.004727f, -0.000576f, -0.005887f, -0.011066f, -0.015978f, -0.020496f, -0.024506f, -0.027913f, -0.030640f, -0.032632f, -0.033857f, -0.034310f, -0.034006f, -0.032985f, -0.031308f, -0.029055f, -0.026321f, -0.023213f, -0.019849f, -0.016346f, -0.012827f, -0.009407f, -0.006194f, -0.003285f, -0.000764f, 0.001304f, 0.002872f, 0.003912f, 0.004415f, 0.004395f, 0.003882f, 0.002923f, 0.001580f, -0.000071f, -0.001949f, -0.003965f, -0.006027f, -0.008047f, -0.009940f, -0.011630f, + -0.013049f, -0.014143f, -0.014873f, -0.015213f, -0.015155f, -0.014706f, -0.013887f, -0.012733f, -0.011291f, -0.009618f, -0.007779f, -0.005841f, -0.003874f, -0.001948f, -0.000129f, 0.001525f, 0.002963f, 0.004143f, 0.005037f, 0.005626f, 0.005908f, 0.005888f, 0.005586f, 0.005033f, 0.004268f, 0.003335f, 0.002288f, 0.001178f, 0.000062f, -0.001008f, -0.001982f, -0.002818f, -0.003480f, -0.003940f, -0.004181f, -0.004195f, -0.003984f, -0.003562f, -0.002948f, -0.002172f, -0.001269f, -0.000279f, 0.000755f, 0.001790f, 0.002784f, 0.003696f, 0.004492f, 0.005144f, 0.005628f, 0.005932f, 0.006051f, 0.005986f, 0.005752f, 0.005365f, 0.004852f, 0.004244f, 0.003576f, 0.002883f, 0.002204f, 0.001575f, 0.001027f, 0.000590f, 0.000286f, 0.000130f, -0.062719f, -0.092049f, -0.073323f, 0.069649f, -0.009513f, -0.100002f, -0.109524f, -0.147956f, -0.248873f, -0.178598f, -0.035212f, 0.057802f, -0.137092f, -0.217856f, 0.034081f, -0.064171f, -0.031464f, 0.068502f, 0.197143f, 0.101509f, -0.063704f, 0.004287f, -0.071943f, -0.096419f, -0.036460f, 0.098240f, 0.374600f, 0.252128f, 0.088983f, -0.044047f, -0.174233f, -0.131298f, + -0.136368f, 0.295343f, 0.450354f, 0.237705f, -0.128321f, -0.279512f, -0.350140f, -0.078530f, 0.362555f, 0.168500f, 0.173851f, -0.032953f, -0.170410f, -0.097289f, 0.222653f, 0.428155f, 0.230823f, -0.343600f, -0.482075f, -0.424160f, 0.047068f, 0.398882f, 0.561588f, 0.255711f, -0.070975f, -0.423283f, -0.237417f, -0.018807f, -0.046951f, 0.340034f, 0.152083f, -0.135910f, -0.141146f, 0.214772f, -0.120158f, -0.258864f, -0.375960f, -0.158851f, -0.014091f, 0.153122f, 0.103225f, 0.158943f, 0.043085f, -0.046721f, -0.114438f, -0.220415f, -0.153978f, 0.054363f, 0.154925f, 0.099798f, -0.179298f, -0.297833f, -0.102031f, 0.255803f, 0.468993f, 0.279909f, -0.146318f, -0.514820f, -0.515969f, -0.096151f, 0.447641f, 0.583733f, 0.311249f, -0.142109f, -0.400262f, -0.479969f, -0.058551f, 0.187743f, 0.275447f, 0.142366f, -0.084071f, -0.257869f, -0.250172f, -0.047876f, 0.212787f, 0.309702f, 0.186050f, -0.074890f, -0.273524f, -0.307341f, -0.180162f, 0.018243f, 0.247828f, 0.359676f, 0.146780f, -0.154708f, -0.410942f, -0.358159f, 0.001180f, 0.263830f, 0.387048f, 0.275723f, -0.090244f, -0.361436f, -0.399106f, -0.154295f, + 0.149885f, 0.412521f, 0.361088f, 0.065173f, -0.327785f, -0.456368f, -0.330803f, 0.058165f, 0.383040f, 0.477541f, 0.181098f, -0.247109f, -0.488622f, -0.385433f, -0.026630f, 0.351904f, 0.479808f, 0.272364f, -0.159846f, -0.445736f, -0.426307f, -0.086532f, 0.272691f, 0.432691f, 0.252161f, -0.094124f, -0.290550f, -0.191220f, -0.001330f, 0.035416f, 0.015705f, 0.002131f}, + {0.025310f, 0.025687f, 0.026423f, 0.027479f, 0.028803f, 0.030327f, 0.031971f, 0.033646f, 0.035260f, 0.036719f, 0.037934f, 0.038819f, 0.039302f, 0.039323f, 0.038839f, 0.037826f, 0.036279f, 0.034214f, 0.031669f, 0.028699f, 0.025378f, 0.021796f, 0.018055f, 0.014265f, 0.010543f, 0.007004f, 0.003761f, 0.000920f, -0.001427f, -0.003202f, -0.004345f, -0.004818f, -0.004606f, -0.003716f, -0.002180f, -0.000053f, 0.002590f, 0.005652f, 0.009022f, 0.012578f, 0.016186f, 0.019711f, 0.023017f, 0.025976f, 0.028466f, 0.030383f, 0.031636f, 0.032159f, 0.031907f, 0.030860f, 0.029023f, 0.026427f, 0.023127f, 0.019201f, 0.014747f, 0.009880f, 0.004727f, -0.000576f, -0.005887f, -0.011066f, -0.015978f, -0.020496f, -0.024506f, -0.027913f, -0.030640f, -0.032632f, -0.033857f, -0.034310f, -0.034006f, -0.032985f, -0.031308f, -0.029055f, -0.026321f, -0.023213f, -0.019849f, -0.016346f, -0.012827f, -0.009407f, -0.006194f, -0.003285f, -0.000764f, 0.001304f, 0.002872f, 0.003912f, 0.004415f, 0.004395f, 0.003882f, 0.002923f, 0.001580f, -0.000071f, -0.001949f, -0.003965f, -0.006027f, -0.008047f, -0.009940f, -0.011630f, + -0.013049f, -0.014143f, -0.014873f, -0.015213f, -0.015155f, -0.014706f, -0.013887f, -0.012733f, -0.011291f, -0.009618f, -0.007779f, -0.005841f, -0.003874f, -0.001948f, -0.000129f, 0.001525f, 0.002963f, 0.004143f, 0.005037f, 0.005626f, 0.005908f, 0.005888f, 0.005586f, 0.005033f, 0.004268f, 0.003335f, 0.002288f, 0.001178f, 0.000062f, -0.001008f, -0.001982f, -0.002818f, -0.003480f, -0.003940f, -0.004181f, -0.004195f, -0.003984f, -0.003562f, -0.002948f, -0.002172f, -0.001269f, -0.000279f, 0.000755f, 0.001790f, 0.002784f, 0.003696f, 0.004492f, 0.005144f, 0.005628f, 0.005932f, 0.006051f, 0.005986f, 0.005752f, 0.005365f, 0.004852f, 0.004244f, 0.003576f, 0.002883f, 0.002204f, 0.001575f, 0.001027f, 0.000590f, 0.000286f, 0.000130f, -0.062719f, -0.092049f, -0.073323f, 0.069649f, -0.009513f, -0.100002f, -0.109524f, -0.147956f, -0.248873f, -0.178598f, -0.035212f, 0.057802f, -0.137092f, -0.217856f, 0.034081f, -0.064171f, -0.031464f, 0.068502f, 0.197143f, 0.101509f, -0.063704f, 0.004287f, -0.071943f, -0.096419f, -0.036460f, 0.098240f, 0.374600f, 0.252128f, 0.088983f, -0.044047f, -0.174233f, -0.131298f, + -0.136368f, 0.295343f, 0.450354f, 0.237705f, -0.128321f, -0.279512f, -0.350140f, -0.078530f, 0.362555f, 0.168500f, 0.173851f, -0.032953f, -0.170410f, -0.097289f, 0.222653f, 0.428155f, 0.230823f, -0.343600f, -0.482075f, -0.424160f, 0.047068f, 0.398882f, 0.561588f, 0.255711f, -0.070975f, -0.423283f, -0.237417f, -0.018807f, -0.046951f, 0.340034f, 0.152083f, -0.135910f, -0.141146f, 0.214772f, -0.120158f, -0.258864f, -0.375960f, -0.158851f, -0.014091f, 0.153122f, 0.103225f, 0.158943f, 0.043085f, -0.046721f, -0.114438f, -0.220415f, -0.153978f, 0.054363f, 0.154925f, 0.099798f, -0.179298f, -0.297833f, -0.102031f, 0.255803f, 0.468993f, 0.279909f, -0.146318f, -0.514820f, -0.515969f, -0.096151f, 0.447641f, 0.583733f, 0.311249f, -0.142109f, -0.400262f, -0.479969f, -0.058551f, 0.187743f, 0.275447f, 0.142366f, -0.084071f, -0.257869f, -0.250172f, -0.047876f, 0.212787f, 0.309702f, 0.186050f, -0.074890f, -0.273524f, -0.307341f, -0.180162f, 0.018243f, 0.247828f, 0.359676f, 0.146780f, -0.154708f, -0.410942f, -0.358159f, 0.001180f, 0.263830f, 0.387048f, 0.275723f, -0.090244f, -0.361436f, -0.399106f, -0.154295f, + 0.149885f, 0.412521f, 0.361088f, 0.065173f, -0.327785f, -0.456368f, -0.330803f, 0.058165f, 0.383040f, 0.477541f, 0.181098f, -0.247109f, -0.488622f, -0.385433f, -0.026630f, 0.351904f, 0.479808f, 0.272364f, -0.159846f, -0.445736f, -0.426307f, -0.086532f, 0.272691f, 0.432691f, 0.252161f, -0.094124f, -0.290550f, -0.191220f, -0.001330f, 0.035416f, 0.015705f, 0.002131f} + }, + { + {0.049252f, 0.048505f, 0.047032f, 0.044879f, 0.042109f, 0.038804f, 0.035061f, 0.030990f, 0.026708f, 0.022336f, 0.017998f, 0.013811f, 0.009887f, 0.006325f, 0.003212f, 0.000616f, -0.001412f, -0.002843f, -0.003669f, -0.003901f, -0.003572f, -0.002732f, -0.001448f, 0.000197f, 0.002114f, 0.004204f, 0.006363f, 0.008491f, 0.010489f, 0.012268f, 0.013747f, 0.014860f, 0.015558f, 0.015807f, 0.015592f, 0.014918f, 0.013808f, 0.012301f, 0.010453f, 0.008334f, 0.006024f, 0.003612f, 0.001190f, -0.001148f, -0.003310f, -0.005209f, -0.006768f, -0.007922f, -0.008617f, -0.008817f, -0.008503f, -0.007671f, -0.006338f, -0.004534f, -0.002308f, 0.000279f, 0.003153f, 0.006233f, 0.009431f, 0.012654f, 0.015812f, 0.018815f, 0.021583f, 0.024042f, 0.026129f, 0.027795f, 0.029005f, 0.029740f, 0.029994f, 0.029780f, 0.029122f, 0.028059f, 0.026641f, 0.024928f, 0.022987f, 0.020887f, 0.018702f, 0.016503f, 0.014358f, 0.012331f, 0.010474f, 0.008833f, 0.007442f, 0.006322f, 0.005484f, 0.004926f, 0.004634f, 0.004584f, 0.004742f, 0.005069f, 0.005517f, 0.006037f, 0.006579f, 0.007092f, 0.007531f, 0.007854f, + 0.008025f, 0.008018f, 0.007815f, 0.007408f, 0.006800f, 0.006002f, 0.005035f, 0.003927f, 0.002715f, 0.001441f, 0.000148f, -0.001115f, -0.002303f, -0.003371f, -0.004279f, -0.004990f, -0.005478f, -0.005721f, -0.005708f, -0.005438f, -0.004916f, -0.004159f, -0.003191f, -0.002043f, -0.000754f, 0.000634f, 0.002076f, 0.003525f, 0.004935f, 0.006261f, 0.007464f, 0.008508f, 0.009363f, 0.010009f, 0.010432f, 0.010625f, 0.010593f, 0.010344f, 0.009898f, 0.009277f, 0.008512f, 0.007636f, 0.006683f, 0.005691f, 0.004696f, 0.003732f, 0.002830f, 0.002016f, 0.001311f, 0.000731f, 0.000286f, -0.000024f, -0.000201f, -0.000255f, -0.000199f, -0.000054f, 0.000159f, 0.000418f, 0.000696f, 0.000971f, 0.001220f, 0.001425f, 0.001571f, 0.001646f, -0.014926f, -0.089426f, -0.105113f, 0.033285f, 0.006325f, -0.014680f, -0.339995f, -0.200832f, -0.198426f, -0.256673f, -0.050366f, 0.153312f, 0.188704f, 0.030454f, 0.048690f, 0.023019f, 0.123926f, -0.055664f, 0.033674f, 0.042263f, 0.008735f, 0.027934f, 0.002027f, -0.002475f, 0.007478f, -0.012204f, -0.027819f, 0.013803f, 0.002576f, -0.058598f, -0.073877f, -0.035068f, + 0.004746f, -0.010529f, -0.047010f, -0.011128f, 0.052184f, 0.157500f, 0.015430f, -0.057176f, -0.214266f, 0.018587f, 0.168739f, 0.193512f, 0.144175f, -0.085009f, -0.238551f, -0.226822f, -0.111240f, 0.096866f, 0.212460f, 0.198553f, 0.018198f, -0.167907f, -0.239394f, -0.157140f, -0.009600f, 0.166381f, 0.145376f, 0.056992f, 0.077190f, -0.230234f, -0.183588f, -0.000075f, 0.080051f, -0.082221f, 0.309177f, 0.369904f, 0.326232f, -0.054229f, -0.305098f, -0.330527f, 0.022802f, 0.249722f, 0.282320f, 0.082731f, -0.211771f, -0.253254f, -0.300030f, -0.050831f, 0.257734f, 0.345267f, 0.211626f, -0.062206f, -0.255335f, -0.227888f, 0.022794f, 0.175552f, 0.167798f, -0.016114f, -0.153397f, -0.180506f, -0.028015f, 0.109007f, 0.103911f, 0.006245f, -0.082177f, -0.174945f, -0.054919f, 0.125037f, 0.327312f, 0.269979f, -0.013689f, -0.366086f, -0.419537f, -0.178826f, 0.224978f, 0.503260f, 0.467893f, 0.158368f, -0.345247f, -0.630165f, -0.404654f, 0.114994f, 0.475935f, 0.375711f, -0.062013f, -0.348152f, -0.410496f, -0.082221f, 0.215751f, 0.265317f, 0.248844f, -0.056057f, -0.155688f, -0.180562f, -0.044266f, 0.110211f, + 0.147724f, 0.049847f, -0.036263f, -0.111937f, -0.078368f, 0.022911f, 0.111876f, 0.086901f, 0.002921f, -0.090624f, -0.103845f, -0.027816f, 0.068250f, 0.117116f, 0.093396f, -0.028071f, -0.137833f, -0.136771f, -0.038484f, 0.097302f, 0.172137f, 0.159891f, 0.013142f, -0.144177f, -0.191770f, -0.136983f, -0.000232f, 0.108200f, 0.075797f, 0.020524f, 0.004679f, 0.007371f}, + {0.049252f, 0.048505f, 0.047032f, 0.044879f, 0.042109f, 0.038804f, 0.035061f, 0.030990f, 0.026708f, 0.022336f, 0.017998f, 0.013811f, 0.009887f, 0.006325f, 0.003212f, 0.000616f, -0.001412f, -0.002843f, -0.003669f, -0.003901f, -0.003572f, -0.002732f, -0.001448f, 0.000197f, 0.002114f, 0.004204f, 0.006363f, 0.008491f, 0.010489f, 0.012268f, 0.013747f, 0.014860f, 0.015558f, 0.015807f, 0.015592f, 0.014918f, 0.013808f, 0.012301f, 0.010453f, 0.008334f, 0.006024f, 0.003612f, 0.001190f, -0.001148f, -0.003310f, -0.005209f, -0.006768f, -0.007922f, -0.008617f, -0.008817f, -0.008503f, -0.007671f, -0.006338f, -0.004534f, -0.002308f, 0.000279f, 0.003153f, 0.006233f, 0.009431f, 0.012654f, 0.015812f, 0.018815f, 0.021583f, 0.024042f, 0.026129f, 0.027795f, 0.029005f, 0.029740f, 0.029994f, 0.029780f, 0.029122f, 0.028059f, 0.026641f, 0.024928f, 0.022987f, 0.020887f, 0.018702f, 0.016503f, 0.014358f, 0.012331f, 0.010474f, 0.008833f, 0.007442f, 0.006322f, 0.005484f, 0.004926f, 0.004634f, 0.004584f, 0.004742f, 0.005069f, 0.005517f, 0.006037f, 0.006579f, 0.007092f, 0.007531f, 0.007854f, + 0.008025f, 0.008018f, 0.007815f, 0.007408f, 0.006800f, 0.006002f, 0.005035f, 0.003927f, 0.002715f, 0.001441f, 0.000148f, -0.001115f, -0.002303f, -0.003371f, -0.004279f, -0.004990f, -0.005478f, -0.005721f, -0.005708f, -0.005438f, -0.004916f, -0.004159f, -0.003191f, -0.002043f, -0.000754f, 0.000634f, 0.002076f, 0.003525f, 0.004935f, 0.006261f, 0.007464f, 0.008508f, 0.009363f, 0.010009f, 0.010432f, 0.010625f, 0.010593f, 0.010344f, 0.009898f, 0.009277f, 0.008512f, 0.007636f, 0.006683f, 0.005691f, 0.004696f, 0.003732f, 0.002830f, 0.002016f, 0.001311f, 0.000731f, 0.000286f, -0.000024f, -0.000201f, -0.000255f, -0.000199f, -0.000054f, 0.000159f, 0.000418f, 0.000696f, 0.000971f, 0.001220f, 0.001425f, 0.001571f, 0.001646f, -0.014926f, -0.089426f, -0.105113f, 0.033285f, 0.006325f, -0.014680f, -0.339995f, -0.200832f, -0.198426f, -0.256673f, -0.050366f, 0.153312f, 0.188704f, 0.030454f, 0.048690f, 0.023019f, 0.123926f, -0.055664f, 0.033674f, 0.042263f, 0.008735f, 0.027934f, 0.002027f, -0.002475f, 0.007478f, -0.012204f, -0.027819f, 0.013803f, 0.002576f, -0.058598f, -0.073877f, -0.035068f, + 0.004746f, -0.010529f, -0.047010f, -0.011128f, 0.052184f, 0.157500f, 0.015430f, -0.057176f, -0.214266f, 0.018587f, 0.168739f, 0.193512f, 0.144175f, -0.085009f, -0.238551f, -0.226822f, -0.111240f, 0.096866f, 0.212460f, 0.198553f, 0.018198f, -0.167907f, -0.239394f, -0.157140f, -0.009600f, 0.166381f, 0.145376f, 0.056992f, 0.077190f, -0.230234f, -0.183588f, -0.000075f, 0.080051f, -0.082221f, 0.309177f, 0.369904f, 0.326232f, -0.054229f, -0.305098f, -0.330527f, 0.022802f, 0.249722f, 0.282320f, 0.082731f, -0.211771f, -0.253254f, -0.300030f, -0.050831f, 0.257734f, 0.345267f, 0.211626f, -0.062206f, -0.255335f, -0.227888f, 0.022794f, 0.175552f, 0.167798f, -0.016114f, -0.153397f, -0.180506f, -0.028015f, 0.109007f, 0.103911f, 0.006245f, -0.082177f, -0.174945f, -0.054919f, 0.125037f, 0.327312f, 0.269979f, -0.013689f, -0.366086f, -0.419537f, -0.178826f, 0.224978f, 0.503260f, 0.467893f, 0.158368f, -0.345247f, -0.630165f, -0.404654f, 0.114994f, 0.475935f, 0.375711f, -0.062013f, -0.348152f, -0.410496f, -0.082221f, 0.215751f, 0.265317f, 0.248844f, -0.056057f, -0.155688f, -0.180562f, -0.044266f, 0.110211f, + 0.147724f, 0.049847f, -0.036263f, -0.111937f, -0.078368f, 0.022911f, 0.111876f, 0.086901f, 0.002921f, -0.090624f, -0.103845f, -0.027816f, 0.068250f, 0.117116f, 0.093396f, -0.028071f, -0.137833f, -0.136771f, -0.038484f, 0.097302f, 0.172137f, 0.159891f, 0.013142f, -0.144177f, -0.191770f, -0.136983f, -0.000232f, 0.108200f, 0.075797f, 0.020524f, 0.004679f, 0.007371f} + }, + { + {0.020524f, 0.019954f, 0.018829f, 0.017179f, 0.015049f, 0.012498f, 0.009593f, 0.006414f, 0.003047f, -0.000417f, -0.003884f, -0.007261f, -0.010454f, -0.013378f, -0.015953f, -0.018107f, -0.019780f, -0.020927f, -0.021512f, -0.021516f, -0.020934f, -0.019777f, -0.018070f, -0.015849f, -0.013166f, -0.010083f, -0.006669f, -0.003003f, 0.000831f, 0.004749f, 0.008661f, 0.012484f, 0.016134f, 0.019537f, 0.022622f, 0.025331f, 0.027614f, 0.029432f, 0.030761f, 0.031586f, 0.031906f, 0.031731f, 0.031085f, 0.029999f, 0.028515f, 0.026683f, 0.024560f, 0.022205f, 0.019684f, 0.017061f, 0.014399f, 0.011763f, 0.009210f, 0.006795f, 0.004564f, 0.002558f, 0.000810f, -0.000657f, -0.001825f, -0.002689f, -0.003249f, -0.003513f, -0.003498f, -0.003225f, -0.002722f, -0.002019f, -0.001152f, -0.000157f, 0.000930f, 0.002070f, 0.003228f, 0.004372f, 0.005470f, 0.006495f, 0.007424f, 0.008241f, 0.008929f, 0.009482f, 0.009893f, 0.010163f, 0.010295f, 0.010296f, 0.010175f, 0.009946f, 0.009620f, 0.009213f, 0.008740f, 0.008214f, 0.007651f, 0.007062f, 0.006460f, 0.005852f, 0.005247f, 0.004650f, 0.004064f, 0.003492f, + 0.002932f, 0.002383f, 0.001843f, 0.001308f, 0.000775f, 0.000239f, -0.000302f, -0.000852f, -0.001413f, -0.001984f, -0.002566f, -0.003155f, -0.003747f, -0.004338f, -0.004921f, -0.005487f, -0.006028f, -0.006534f, -0.006994f, -0.007400f, -0.007741f, -0.008010f, -0.008197f, -0.008298f, -0.008307f, -0.008224f, -0.008047f, -0.007779f, -0.007425f, -0.006992f, -0.006489f, -0.005928f, -0.005323f, -0.004687f, -0.004037f, -0.003390f, -0.002763f, -0.002172f, -0.001634f, -0.001164f, -0.000775f, -0.000480f, -0.000288f, -0.000207f, -0.000239f, -0.000386f, -0.000648f, -0.001019f, -0.001491f, -0.002055f, -0.002698f, -0.003404f, -0.004157f, -0.004940f, -0.005733f, -0.006516f, -0.007271f, -0.007979f, -0.008622f, -0.009185f, -0.009653f, -0.010015f, -0.010262f, -0.010386f, -0.013960f, 0.039538f, -0.009080f, -0.048067f, -0.014905f, 0.010152f, 0.017116f, 0.126842f, 0.199826f, 0.247910f, -0.051869f, -0.166142f, -0.248324f, -0.100263f, 0.104231f, 0.332617f, 0.192145f, 0.074884f, -0.098427f, -0.080697f, -0.048697f, 0.050512f, -0.015635f, -0.046354f, -0.035057f, -0.020414f, 0.024669f, 0.127237f, 0.109052f, 0.140236f, -0.066748f, -0.193365f, + -0.186352f, -0.061126f, 0.134861f, 0.272082f, 0.167805f, -0.028111f, -0.220608f, -0.175739f, 0.052834f, 0.015141f, 0.044169f, 0.024964f, 0.012918f, -0.045790f, -0.072895f, 0.081872f, 0.084591f, -0.085795f, -0.090978f, -0.103647f, -0.040909f, 0.030292f, 0.143571f, 0.103650f, 0.063063f, -0.054640f, -0.065832f, -0.094783f, -0.028008f, 0.097145f, 0.166294f, 0.103833f, 0.011883f, -0.106418f, -0.226422f, -0.243543f, -0.041307f, 0.181256f, 0.277106f, 0.278246f, 0.158088f, -0.094954f, -0.347089f, -0.337988f, -0.124755f, 0.158593f, 0.303979f, 0.289625f, 0.048365f, -0.174889f, -0.299761f, -0.228573f, 0.044282f, 0.174276f, 0.072975f, -0.086911f, -0.143364f, -0.122536f, 0.003688f, 0.079789f, 0.121467f, 0.095954f, 0.027984f, -0.075559f, -0.146718f, -0.055121f, 0.023112f, 0.107898f, 0.137225f, 0.027182f, -0.076223f, -0.156842f, -0.102407f, 0.033455f, 0.181355f, 0.146131f, -0.065615f, -0.189951f, -0.147386f, -0.008197f, 0.177630f, 0.220091f, 0.110133f, -0.157173f, -0.401624f, -0.283624f, 0.056410f, 0.287032f, 0.307662f, 0.057544f, -0.174041f, -0.256330f, -0.178914f, 0.081254f, 0.200731f, 0.216187f, + 0.085729f, -0.097065f, -0.205649f, -0.161221f, -0.023881f, 0.187910f, 0.213384f, 0.126237f, -0.103732f, -0.250056f, -0.220258f, -0.020818f, 0.123885f, 0.223463f, 0.157788f, 0.012163f, -0.171729f, -0.205165f, -0.087605f, 0.108279f, 0.115753f, 0.091401f, -0.027898f, -0.120550f, -0.095680f, -0.003018f, 0.042296f, 0.022227f, 0.001533f, -0.002457f, -0.002996f, -0.001826f}, + {0.020524f, 0.019954f, 0.018829f, 0.017179f, 0.015049f, 0.012498f, 0.009593f, 0.006414f, 0.003047f, -0.000417f, -0.003884f, -0.007261f, -0.010454f, -0.013378f, -0.015953f, -0.018107f, -0.019780f, -0.020927f, -0.021512f, -0.021516f, -0.020934f, -0.019777f, -0.018070f, -0.015849f, -0.013166f, -0.010083f, -0.006669f, -0.003003f, 0.000831f, 0.004749f, 0.008661f, 0.012484f, 0.016134f, 0.019537f, 0.022622f, 0.025331f, 0.027614f, 0.029432f, 0.030761f, 0.031586f, 0.031906f, 0.031731f, 0.031085f, 0.029999f, 0.028515f, 0.026683f, 0.024560f, 0.022205f, 0.019684f, 0.017061f, 0.014399f, 0.011763f, 0.009210f, 0.006795f, 0.004564f, 0.002558f, 0.000810f, -0.000657f, -0.001825f, -0.002689f, -0.003249f, -0.003513f, -0.003498f, -0.003225f, -0.002722f, -0.002019f, -0.001152f, -0.000157f, 0.000930f, 0.002070f, 0.003228f, 0.004372f, 0.005470f, 0.006495f, 0.007424f, 0.008241f, 0.008929f, 0.009482f, 0.009893f, 0.010163f, 0.010295f, 0.010296f, 0.010175f, 0.009946f, 0.009620f, 0.009213f, 0.008740f, 0.008214f, 0.007651f, 0.007062f, 0.006460f, 0.005852f, 0.005247f, 0.004650f, 0.004064f, 0.003492f, + 0.002932f, 0.002383f, 0.001843f, 0.001308f, 0.000775f, 0.000239f, -0.000302f, -0.000852f, -0.001413f, -0.001984f, -0.002566f, -0.003155f, -0.003747f, -0.004338f, -0.004921f, -0.005487f, -0.006028f, -0.006534f, -0.006994f, -0.007400f, -0.007741f, -0.008010f, -0.008197f, -0.008298f, -0.008307f, -0.008224f, -0.008047f, -0.007779f, -0.007425f, -0.006992f, -0.006489f, -0.005928f, -0.005323f, -0.004687f, -0.004037f, -0.003390f, -0.002763f, -0.002172f, -0.001634f, -0.001164f, -0.000775f, -0.000480f, -0.000288f, -0.000207f, -0.000239f, -0.000386f, -0.000648f, -0.001019f, -0.001491f, -0.002055f, -0.002698f, -0.003404f, -0.004157f, -0.004940f, -0.005733f, -0.006516f, -0.007271f, -0.007979f, -0.008622f, -0.009185f, -0.009653f, -0.010015f, -0.010262f, -0.010386f, -0.013960f, 0.039538f, -0.009080f, -0.048067f, -0.014905f, 0.010152f, 0.017116f, 0.126842f, 0.199826f, 0.247910f, -0.051869f, -0.166142f, -0.248324f, -0.100263f, 0.104231f, 0.332617f, 0.192145f, 0.074884f, -0.098427f, -0.080697f, -0.048697f, 0.050512f, -0.015635f, -0.046354f, -0.035057f, -0.020414f, 0.024669f, 0.127237f, 0.109052f, 0.140236f, -0.066748f, -0.193365f, + -0.186352f, -0.061126f, 0.134861f, 0.272082f, 0.167805f, -0.028111f, -0.220608f, -0.175739f, 0.052834f, 0.015141f, 0.044169f, 0.024964f, 0.012918f, -0.045790f, -0.072895f, 0.081872f, 0.084591f, -0.085795f, -0.090978f, -0.103647f, -0.040909f, 0.030292f, 0.143571f, 0.103650f, 0.063063f, -0.054640f, -0.065832f, -0.094783f, -0.028008f, 0.097145f, 0.166294f, 0.103833f, 0.011883f, -0.106418f, -0.226422f, -0.243543f, -0.041307f, 0.181256f, 0.277106f, 0.278246f, 0.158088f, -0.094954f, -0.347089f, -0.337988f, -0.124755f, 0.158593f, 0.303979f, 0.289625f, 0.048365f, -0.174889f, -0.299761f, -0.228573f, 0.044282f, 0.174276f, 0.072975f, -0.086911f, -0.143364f, -0.122536f, 0.003688f, 0.079789f, 0.121467f, 0.095954f, 0.027984f, -0.075559f, -0.146718f, -0.055121f, 0.023112f, 0.107898f, 0.137225f, 0.027182f, -0.076223f, -0.156842f, -0.102407f, 0.033455f, 0.181355f, 0.146131f, -0.065615f, -0.189951f, -0.147386f, -0.008197f, 0.177630f, 0.220091f, 0.110133f, -0.157173f, -0.401624f, -0.283624f, 0.056410f, 0.287032f, 0.307662f, 0.057544f, -0.174041f, -0.256330f, -0.178914f, 0.081254f, 0.200731f, 0.216187f, + 0.085729f, -0.097065f, -0.205649f, -0.161221f, -0.023881f, 0.187910f, 0.213384f, 0.126237f, -0.103732f, -0.250056f, -0.220258f, -0.020818f, 0.123885f, 0.223463f, 0.157788f, 0.012163f, -0.171729f, -0.205165f, -0.087605f, 0.108279f, 0.115753f, 0.091401f, -0.027898f, -0.120550f, -0.095680f, -0.003018f, 0.042296f, 0.022227f, 0.001533f, -0.002457f, -0.002996f, -0.001826f} + }, + { + {0.009644f, 0.009468f, 0.009121f, 0.008611f, 0.007953f, 0.007163f, 0.006262f, 0.005274f, 0.004225f, 0.003142f, 0.002054f, 0.000988f, -0.000027f, -0.000965f, -0.001801f, -0.002514f, -0.003085f, -0.003500f, -0.003747f, -0.003820f, -0.003717f, -0.003442f, -0.003001f, -0.002405f, -0.001670f, -0.000816f, 0.000135f, 0.001158f, 0.002227f, 0.003311f, 0.004383f, 0.005411f, 0.006366f, 0.007221f, 0.007949f, 0.008525f, 0.008928f, 0.009139f, 0.009144f, 0.008931f, 0.008492f, 0.007825f, 0.006931f, 0.005815f, 0.004486f, 0.002956f, 0.001243f, -0.000633f, -0.002650f, -0.004782f, -0.007002f, -0.009278f, -0.011582f, -0.013881f, -0.016142f, -0.018335f, -0.020427f, -0.022388f, -0.024190f, -0.025805f, -0.027209f, -0.028381f, -0.029301f, -0.029955f, -0.030332f, -0.030425f, -0.030229f, -0.029747f, -0.028983f, -0.027949f, -0.026658f, -0.025129f, -0.023384f, -0.021450f, -0.019356f, -0.017135f, -0.014821f, -0.012453f, -0.010068f, -0.007705f, -0.005403f, -0.003199f, -0.001132f, 0.000765f, 0.002459f, 0.003923f, 0.005133f, 0.006068f, 0.006714f, 0.007061f, 0.007107f, 0.006853f, 0.006307f, 0.005483f, 0.004398f, 0.003078f, + 0.001550f, -0.000154f, -0.001998f, -0.003945f, -0.005954f, -0.007986f, -0.010000f, -0.011957f, -0.013820f, -0.015553f, -0.017125f, -0.018509f, -0.019682f, -0.020625f, -0.021326f, -0.021779f, -0.021981f, -0.021937f, -0.021655f, -0.021150f, -0.020440f, -0.019547f, -0.018497f, -0.017318f, -0.016038f, -0.014690f, -0.013303f, -0.011907f, -0.010533f, -0.009205f, -0.007950f, -0.006788f, -0.005737f, -0.004812f, -0.004024f, -0.003378f, -0.002878f, -0.002524f, -0.002310f, -0.002231f, -0.002277f, -0.002435f, -0.002693f, -0.003035f, -0.003447f, -0.003913f, -0.004418f, -0.004947f, -0.005487f, -0.006026f, -0.006553f, -0.007060f, -0.007537f, -0.007981f, -0.008386f, -0.008750f, -0.009072f, -0.009351f, -0.009586f, -0.009780f, -0.009933f, -0.010047f, -0.010122f, -0.010159f, -0.006381f, -0.006690f, -0.008662f, 0.002553f, -0.010574f, 0.011035f, 0.038869f, 0.047782f, -0.001476f, -0.057592f, -0.008074f, 0.081084f, 0.167063f, 0.131524f, -0.064977f, -0.225303f, -0.116524f, -0.106720f, 0.051120f, 0.031455f, 0.014761f, 0.072488f, 0.123728f, -0.049501f, -0.130322f, -0.053549f, -0.035009f, 0.043494f, 0.122608f, 0.060982f, 0.081993f, 0.027759f, + -0.105798f, -0.090269f, 0.012188f, 0.131393f, 0.114304f, -0.013108f, -0.074906f, -0.125671f, 0.000687f, 0.129210f, 0.119575f, 0.055843f, -0.030085f, -0.126451f, -0.097710f, -0.012733f, 0.018779f, 0.043493f, 0.048670f, 0.038435f, 0.073203f, 0.009477f, -0.005739f, -0.029491f, -0.003281f, -0.046425f, 0.071531f, 0.124820f, -0.027036f, 0.104377f, -0.012306f, -0.156535f, -0.036736f, 0.089173f, -0.009564f, -0.102722f, -0.113879f, -0.056432f, 0.033718f, 0.111011f, 0.106408f, 0.060987f, -0.098402f, -0.161937f, -0.042886f, 0.147960f, 0.178631f, 0.059238f, -0.096398f, -0.094768f, -0.074140f, 0.004331f, 0.110634f, 0.127157f, -0.000446f, -0.145241f, -0.148045f, -0.063129f, 0.092906f, 0.034099f, 0.071394f, -0.014437f, -0.099531f, -0.089497f, -0.042822f, 0.207421f, 0.118617f, 0.040766f, -0.027915f, 0.085377f, 0.049048f, -0.025063f, -0.123015f, -0.095969f, -0.019997f, 0.123141f, 0.058986f, -0.063417f, -0.178076f, -0.082010f, 0.093463f, 0.204923f, 0.099605f, -0.009078f, -0.210971f, -0.163437f, 0.059593f, 0.248835f, 0.221802f, 0.081614f, -0.127644f, -0.192694f, -0.173678f, 0.018043f, 0.113932f, 0.194188f, + 0.059613f, -0.061966f, -0.151487f, -0.103943f, -0.003527f, 0.200654f, 0.139393f, 0.049949f, -0.128293f, -0.239667f, -0.153340f, 0.088918f, 0.245305f, 0.272430f, 0.111636f, -0.060927f, -0.184231f, -0.122958f, -0.033009f, 0.095671f, 0.143342f, 0.069690f, -0.060631f, -0.125431f, -0.080599f, 0.110443f, 0.131602f, 0.016236f, -0.033800f, -0.029587f, -0.011078f, -0.007853f}, + {-0.009644f, -0.009468f, -0.009121f, -0.008611f, -0.007953f, -0.007163f, -0.006262f, -0.005274f, -0.004225f, -0.003142f, -0.002054f, -0.000988f, 0.000027f, 0.000965f, 0.001801f, 0.002514f, 0.003085f, 0.003500f, 0.003747f, 0.003820f, 0.003717f, 0.003442f, 0.003001f, 0.002405f, 0.001670f, 0.000816f, -0.000135f, -0.001158f, -0.002227f, -0.003311f, -0.004383f, -0.005411f, -0.006366f, -0.007221f, -0.007949f, -0.008525f, -0.008928f, -0.009139f, -0.009144f, -0.008931f, -0.008492f, -0.007825f, -0.006931f, -0.005815f, -0.004486f, -0.002956f, -0.001243f, 0.000633f, 0.002650f, 0.004782f, 0.007002f, 0.009278f, 0.011582f, 0.013881f, 0.016142f, 0.018335f, 0.020427f, 0.022388f, 0.024190f, 0.025805f, 0.027209f, 0.028381f, 0.029301f, 0.029955f, 0.030332f, 0.030425f, 0.030229f, 0.029747f, 0.028983f, 0.027949f, 0.026658f, 0.025129f, 0.023384f, 0.021450f, 0.019356f, 0.017135f, 0.014821f, 0.012453f, 0.010068f, 0.007705f, 0.005403f, 0.003199f, 0.001132f, -0.000765f, -0.002459f, -0.003923f, -0.005133f, -0.006068f, -0.006714f, -0.007061f, -0.007107f, -0.006853f, -0.006307f, -0.005483f, -0.004398f, -0.003078f, + -0.001550f, 0.000154f, 0.001998f, 0.003945f, 0.005954f, 0.007986f, 0.010000f, 0.011957f, 0.013820f, 0.015553f, 0.017125f, 0.018509f, 0.019682f, 0.020625f, 0.021326f, 0.021779f, 0.021981f, 0.021937f, 0.021655f, 0.021150f, 0.020440f, 0.019547f, 0.018497f, 0.017318f, 0.016038f, 0.014690f, 0.013303f, 0.011907f, 0.010533f, 0.009205f, 0.007950f, 0.006788f, 0.005737f, 0.004812f, 0.004024f, 0.003378f, 0.002878f, 0.002524f, 0.002310f, 0.002231f, 0.002277f, 0.002435f, 0.002693f, 0.003035f, 0.003447f, 0.003913f, 0.004418f, 0.004947f, 0.005487f, 0.006026f, 0.006553f, 0.007060f, 0.007537f, 0.007981f, 0.008386f, 0.008750f, 0.009072f, 0.009351f, 0.009586f, 0.009780f, 0.009933f, 0.010047f, 0.010122f, 0.010159f, 0.006381f, 0.006690f, 0.008662f, -0.002553f, 0.010574f, -0.011035f, -0.038869f, -0.047782f, 0.001476f, 0.057592f, 0.008074f, -0.081084f, -0.167063f, -0.131524f, 0.064977f, 0.225303f, 0.116524f, 0.106720f, -0.051120f, -0.031455f, -0.014761f, -0.072488f, -0.123728f, 0.049501f, 0.130322f, 0.053549f, 0.035009f, -0.043494f, -0.122608f, -0.060982f, -0.081993f, -0.027759f, + 0.105798f, 0.090269f, -0.012188f, -0.131393f, -0.114304f, 0.013108f, 0.074906f, 0.125671f, -0.000687f, -0.129210f, -0.119575f, -0.055843f, 0.030085f, 0.126451f, 0.097710f, 0.012733f, -0.018779f, -0.043493f, -0.048670f, -0.038435f, -0.073203f, -0.009477f, 0.005739f, 0.029491f, 0.003281f, 0.046425f, -0.071531f, -0.124820f, 0.027036f, -0.104377f, 0.012306f, 0.156535f, 0.036736f, -0.089173f, 0.009564f, 0.102722f, 0.113879f, 0.056432f, -0.033718f, -0.111011f, -0.106408f, -0.060987f, 0.098402f, 0.161937f, 0.042886f, -0.147960f, -0.178631f, -0.059238f, 0.096398f, 0.094768f, 0.074140f, -0.004331f, -0.110634f, -0.127157f, 0.000446f, 0.145241f, 0.148045f, 0.063129f, -0.092906f, -0.034099f, -0.071394f, 0.014437f, 0.099531f, 0.089497f, 0.042822f, -0.207421f, -0.118617f, -0.040766f, 0.027915f, -0.085377f, -0.049048f, 0.025063f, 0.123015f, 0.095969f, 0.019997f, -0.123141f, -0.058986f, 0.063417f, 0.178076f, 0.082010f, -0.093463f, -0.204923f, -0.099605f, 0.009078f, 0.210971f, 0.163437f, -0.059593f, -0.248835f, -0.221802f, -0.081614f, 0.127644f, 0.192694f, 0.173678f, -0.018043f, -0.113932f, -0.194188f, + -0.059613f, 0.061966f, 0.151487f, 0.103943f, 0.003527f, -0.200654f, -0.139393f, -0.049949f, 0.128293f, 0.239667f, 0.153340f, -0.088918f, -0.245305f, -0.272430f, -0.111636f, 0.060927f, 0.184231f, 0.122958f, 0.033009f, -0.095671f, -0.143342f, -0.069690f, 0.060631f, 0.125431f, 0.080599f, -0.110443f, -0.131602f, -0.016236f, 0.033800f, 0.029587f, 0.011078f, 0.007853f} + }, + { + {0.006688f, 0.007032f, 0.007708f, 0.008693f, 0.009955f, 0.011450f, 0.013128f, 0.014934f, 0.016805f, 0.018680f, 0.020493f, 0.022184f, 0.023695f, 0.024974f, 0.025975f, 0.026664f, 0.027013f, 0.027007f, 0.026642f, 0.025924f, 0.024870f, 0.023506f, 0.021869f, 0.020002f, 0.017953f, 0.015777f, 0.013530f, 0.011269f, 0.009049f, 0.006923f, 0.004938f, 0.003137f, 0.001555f, 0.000218f, -0.000856f, -0.001656f, -0.002184f, -0.002445f, -0.002456f, -0.002239f, -0.001822f, -0.001235f, -0.000513f, 0.000308f, 0.001194f, 0.002110f, 0.003028f, 0.003922f, 0.004771f, 0.005561f, 0.006284f, 0.006939f, 0.007531f, 0.008072f, 0.008578f, 0.009070f, 0.009572f, 0.010110f, 0.010711f, 0.011402f, 0.012205f, 0.013143f, 0.014230f, 0.015478f, 0.016889f, 0.018460f, 0.020182f, 0.022036f, 0.023998f, 0.026036f, 0.028115f, 0.030192f, 0.032223f, 0.034162f, 0.035962f, 0.037578f, 0.038966f, 0.040089f, 0.040911f, 0.041407f, 0.041557f, 0.041350f, 0.040785f, 0.039867f, 0.038611f, 0.037042f, 0.035190f, 0.033093f, 0.030793f, 0.028340f, 0.025782f, 0.023170f, 0.020557f, 0.017990f, 0.015516f, 0.013176f, + 0.011007f, 0.009038f, 0.007291f, 0.005781f, 0.004515f, 0.003494f, 0.002709f, 0.002148f, 0.001790f, 0.001611f, 0.001583f, 0.001676f, 0.001859f, 0.002099f, 0.002368f, 0.002637f, 0.002880f, 0.003079f, 0.003215f, 0.003278f, 0.003263f, 0.003167f, 0.002995f, 0.002754f, 0.002457f, 0.002119f, 0.001756f, 0.001388f, 0.001032f, 0.000707f, 0.000430f, 0.000215f, 0.000074f, 0.000016f, 0.000045f, 0.000162f, 0.000364f, 0.000643f, 0.000991f, 0.001393f, 0.001834f, 0.002298f, 0.002766f, 0.003220f, 0.003643f, 0.004020f, 0.004337f, 0.004582f, 0.004748f, 0.004831f, 0.004830f, 0.004748f, 0.004591f, 0.004369f, 0.004094f, 0.003781f, 0.003445f, 0.003103f, 0.002773f, 0.002468f, 0.002206f, 0.001997f, 0.001852f, 0.001778f, -0.023727f, 0.016634f, 0.009006f, -0.011685f, -0.021680f, -0.002306f, -0.032702f, -0.038006f, -0.202481f, -0.239038f, 0.003434f, 0.076241f, -0.005551f, -0.025828f, 0.026393f, -0.019474f, -0.059689f, 0.012646f, 0.040288f, -0.003617f, 0.084536f, -0.053039f, -0.015912f, -0.044810f, -0.017461f, 0.051636f, 0.047463f, 0.116297f, -0.063592f, -0.053661f, -0.033912f, 0.028565f, + -0.000470f, -0.050829f, -0.048193f, -0.023396f, -0.033510f, 0.069715f, 0.043166f, -0.030671f, -0.047051f, -0.046498f, 0.022457f, 0.074459f, 0.069295f, -0.006436f, -0.109817f, -0.071303f, -0.066306f, -0.085501f, -0.011291f, 0.075125f, 0.069309f, -0.019625f, -0.090982f, -0.097550f, -0.064793f, 0.066334f, 0.094839f, 0.062269f, 0.043861f, -0.175167f, -0.161338f, -0.014099f, 0.037481f, 0.002564f, 0.235182f, 0.087904f, 0.024666f, -0.085714f, -0.067747f, 0.050710f, 0.185571f, 0.211533f, 0.033323f, -0.104839f, -0.118096f, -0.240279f, -0.193597f, 0.079305f, 0.197514f, 0.083143f, -0.061378f, -0.030936f, -0.215096f, -0.340234f, -0.090012f, 0.033569f, 0.191795f, 0.128478f, 0.017269f, -0.217333f, -0.215355f, -0.115990f, 0.087738f, 0.148494f, 0.153664f, -0.094107f, -0.147274f, -0.075449f, 0.097659f, 0.168823f, 0.161313f, -0.058709f, -0.188651f, -0.194937f, 0.019785f, 0.204732f, 0.302206f, 0.159633f, -0.139682f, -0.371291f, -0.357750f, -0.039294f, 0.260904f, 0.221567f, 0.024660f, -0.108040f, -0.252084f, -0.197389f, -0.001554f, 0.172462f, 0.230729f, 0.048514f, -0.049506f, -0.176786f, -0.206245f, -0.047202f, + 0.112449f, 0.183076f, 0.137019f, -0.027194f, -0.180198f, -0.207164f, -0.024390f, 0.162092f, 0.211010f, 0.088774f, -0.082070f, -0.187258f, -0.195080f, -0.058200f, 0.103324f, 0.124264f, 0.039575f, -0.042726f, -0.078431f, -0.078889f, -0.093859f, -0.000030f, 0.070585f, 0.095080f, 0.025593f, -0.064250f, -0.117292f, -0.045434f, 0.019444f, 0.013527f, 0.004283f, 0.000702f}, + {-0.006688f, -0.007032f, -0.007708f, -0.008693f, -0.009955f, -0.011450f, -0.013128f, -0.014934f, -0.016805f, -0.018680f, -0.020493f, -0.022184f, -0.023695f, -0.024974f, -0.025975f, -0.026664f, -0.027013f, -0.027007f, -0.026642f, -0.025924f, -0.024870f, -0.023506f, -0.021869f, -0.020002f, -0.017953f, -0.015777f, -0.013530f, -0.011269f, -0.009049f, -0.006923f, -0.004938f, -0.003137f, -0.001555f, -0.000218f, 0.000856f, 0.001656f, 0.002184f, 0.002445f, 0.002456f, 0.002239f, 0.001822f, 0.001235f, 0.000513f, -0.000308f, -0.001194f, -0.002110f, -0.003028f, -0.003922f, -0.004771f, -0.005561f, -0.006284f, -0.006939f, -0.007531f, -0.008072f, -0.008578f, -0.009070f, -0.009572f, -0.010110f, -0.010711f, -0.011402f, -0.012205f, -0.013143f, -0.014230f, -0.015478f, -0.016889f, -0.018460f, -0.020182f, -0.022036f, -0.023998f, -0.026036f, -0.028115f, -0.030192f, -0.032223f, -0.034162f, -0.035962f, -0.037578f, -0.038966f, -0.040089f, -0.040911f, -0.041407f, -0.041557f, -0.041350f, -0.040785f, -0.039867f, -0.038611f, -0.037042f, -0.035190f, -0.033093f, -0.030793f, -0.028340f, -0.025782f, -0.023170f, -0.020557f, -0.017990f, -0.015516f, -0.013176f, + -0.011007f, -0.009038f, -0.007291f, -0.005781f, -0.004515f, -0.003494f, -0.002709f, -0.002148f, -0.001790f, -0.001611f, -0.001583f, -0.001676f, -0.001859f, -0.002099f, -0.002368f, -0.002637f, -0.002880f, -0.003079f, -0.003215f, -0.003278f, -0.003263f, -0.003167f, -0.002995f, -0.002754f, -0.002457f, -0.002119f, -0.001756f, -0.001388f, -0.001032f, -0.000707f, -0.000430f, -0.000215f, -0.000074f, -0.000016f, -0.000045f, -0.000162f, -0.000364f, -0.000643f, -0.000991f, -0.001393f, -0.001834f, -0.002298f, -0.002766f, -0.003220f, -0.003643f, -0.004020f, -0.004337f, -0.004582f, -0.004748f, -0.004831f, -0.004830f, -0.004748f, -0.004591f, -0.004369f, -0.004094f, -0.003781f, -0.003445f, -0.003103f, -0.002773f, -0.002468f, -0.002206f, -0.001997f, -0.001852f, -0.001778f, 0.023727f, -0.016634f, -0.009006f, 0.011685f, 0.021680f, 0.002306f, 0.032702f, 0.038006f, 0.202481f, 0.239038f, -0.003434f, -0.076241f, 0.005551f, 0.025828f, -0.026393f, 0.019474f, 0.059689f, -0.012646f, -0.040288f, 0.003617f, -0.084536f, 0.053039f, 0.015912f, 0.044810f, 0.017461f, -0.051636f, -0.047463f, -0.116297f, 0.063592f, 0.053661f, 0.033912f, -0.028565f, + 0.000470f, 0.050829f, 0.048193f, 0.023396f, 0.033510f, -0.069715f, -0.043166f, 0.030671f, 0.047051f, 0.046498f, -0.022457f, -0.074459f, -0.069295f, 0.006436f, 0.109817f, 0.071303f, 0.066306f, 0.085501f, 0.011291f, -0.075125f, -0.069309f, 0.019625f, 0.090982f, 0.097550f, 0.064793f, -0.066334f, -0.094839f, -0.062269f, -0.043861f, 0.175167f, 0.161338f, 0.014099f, -0.037481f, -0.002564f, -0.235182f, -0.087904f, -0.024666f, 0.085714f, 0.067747f, -0.050710f, -0.185571f, -0.211533f, -0.033323f, 0.104839f, 0.118096f, 0.240279f, 0.193597f, -0.079305f, -0.197514f, -0.083143f, 0.061378f, 0.030936f, 0.215096f, 0.340234f, 0.090012f, -0.033569f, -0.191795f, -0.128478f, -0.017269f, 0.217333f, 0.215355f, 0.115990f, -0.087738f, -0.148494f, -0.153664f, 0.094107f, 0.147274f, 0.075449f, -0.097659f, -0.168823f, -0.161313f, 0.058709f, 0.188651f, 0.194937f, -0.019785f, -0.204732f, -0.302206f, -0.159633f, 0.139682f, 0.371291f, 0.357750f, 0.039294f, -0.260904f, -0.221567f, -0.024660f, 0.108040f, 0.252084f, 0.197389f, 0.001554f, -0.172462f, -0.230729f, -0.048514f, 0.049506f, 0.176786f, 0.206245f, 0.047202f, + -0.112449f, -0.183076f, -0.137019f, 0.027194f, 0.180198f, 0.207164f, 0.024390f, -0.162092f, -0.211010f, -0.088774f, 0.082070f, 0.187258f, 0.195080f, 0.058200f, -0.103324f, -0.124264f, -0.039575f, 0.042726f, 0.078431f, 0.078889f, 0.093859f, 0.000030f, -0.070585f, -0.095080f, -0.025593f, 0.064250f, 0.117292f, 0.045434f, -0.019444f, -0.013527f, -0.004283f, -0.000702f} + }, + { + {-0.042673f, -0.041730f, -0.039874f, -0.037163f, -0.033680f, -0.029535f, -0.024856f, -0.019785f, -0.014478f, -0.009095f, -0.003795f, 0.001267f, 0.005945f, 0.010111f, 0.013653f, 0.016485f, 0.018543f, 0.019793f, 0.020227f, 0.019867f, 0.018758f, 0.016974f, 0.014606f, 0.011768f, 0.008583f, 0.005187f, 0.001718f, -0.001687f, -0.004895f, -0.007785f, -0.010249f, -0.012198f, -0.013566f, -0.014306f, -0.014401f, -0.013853f, -0.012694f, -0.010976f, -0.008770f, -0.006170f, -0.003278f, -0.000211f, 0.002912f, 0.005967f, 0.008838f, 0.011412f, 0.013592f, 0.015292f, 0.016449f, 0.017016f, 0.016970f, 0.016311f, 0.015061f, 0.013261f, 0.010975f, 0.008281f, 0.005272f, 0.002053f, -0.001267f, -0.004575f, -0.007762f, -0.010723f, -0.013361f, -0.015596f, -0.017360f, -0.018605f, -0.019301f, -0.019439f, -0.019030f, -0.018105f, -0.016711f, -0.014913f, -0.012790f, -0.010428f, -0.007922f, -0.005370f, -0.002870f, -0.000514f, 0.001612f, 0.003434f, 0.004888f, 0.005930f, 0.006527f, 0.006669f, 0.006361f, 0.005623f, 0.004494f, 0.003025f, 0.001281f, -0.000667f, -0.002739f, -0.004855f, -0.006933f, -0.008895f, -0.010671f, -0.012198f, + -0.013427f, -0.014318f, -0.014850f, -0.015013f, -0.014816f, -0.014280f, -0.013438f, -0.012339f, -0.011038f, -0.009599f, -0.008090f, -0.006582f, -0.005142f, -0.003835f, -0.002722f, -0.001851f, -0.001261f, -0.000981f, -0.001023f, -0.001390f, -0.002068f, -0.003032f, -0.004245f, -0.005661f, -0.007225f, -0.008877f, -0.010553f, -0.012188f, -0.013720f, -0.015092f, -0.016251f, -0.017156f, -0.017772f, -0.018079f, -0.018067f, -0.017739f, -0.017110f, -0.016205f, -0.015061f, -0.013722f, -0.012239f, -0.010666f, -0.009062f, -0.007482f, -0.005982f, -0.004610f, -0.003411f, -0.002418f, -0.001657f, -0.001143f, -0.000880f, -0.000862f, -0.001071f, -0.001483f, -0.002062f, -0.002769f, -0.003559f, -0.004386f, -0.005202f, -0.005962f, -0.006625f, -0.007155f, -0.007525f, -0.007715f, 0.000703f, -0.012014f, 0.023058f, 0.009347f, 0.006556f, 0.046623f, 0.036669f, -0.163509f, -0.163094f, -0.105808f, -0.019357f, 0.015128f, -0.055594f, -0.018606f, 0.216331f, 0.113836f, 0.070440f, -0.103385f, -0.015700f, 0.038121f, 0.109001f, 0.010150f, 0.003061f, -0.045685f, -0.068175f, -0.040635f, -0.029258f, -0.007584f, 0.043414f, 0.073871f, 0.068350f, -0.007277f, + -0.132105f, -0.150432f, 0.005063f, 0.071415f, 0.100787f, 0.069717f, -0.005698f, -0.103146f, 0.162283f, -0.037753f, -0.072138f, -0.128314f, -0.102348f, 0.020686f, 0.191555f, 0.205195f, 0.043832f, -0.203511f, -0.313890f, -0.271106f, 0.047523f, 0.305055f, 0.370226f, 0.272333f, -0.081732f, -0.353064f, -0.324645f, -0.072582f, -0.027554f, 0.313444f, 0.189395f, 0.004285f, -0.042663f, 0.088102f, -0.150611f, -0.021456f, -0.083142f, -0.036100f, -0.169744f, -0.151088f, -0.116774f, 0.088463f, 0.131521f, 0.177038f, -0.001401f, -0.187488f, -0.416717f, -0.158257f, 0.096190f, 0.311161f, 0.110840f, -0.094059f, -0.115655f, -0.090147f, 0.106664f, 0.135269f, 0.024411f, -0.178208f, -0.242803f, -0.118685f, 0.125271f, 0.314262f, 0.181317f, -0.073741f, -0.316811f, -0.389714f, -0.057773f, 0.169178f, 0.266624f, 0.089083f, -0.167968f, -0.349306f, -0.247575f, 0.018203f, 0.266792f, 0.312023f, 0.131091f, -0.088570f, -0.234122f, -0.241933f, -0.075741f, 0.113846f, 0.186098f, 0.028217f, -0.153824f, -0.129312f, -0.105649f, -0.012657f, 0.052550f, 0.050992f, -0.011399f, 0.005730f, -0.056003f, -0.040678f, -0.060576f, -0.026527f, + -0.033121f, 0.068738f, 0.128814f, 0.085662f, -0.064948f, -0.180050f, -0.213189f, -0.062824f, 0.185219f, 0.325475f, 0.193610f, -0.043435f, -0.269135f, -0.310078f, -0.129779f, 0.121151f, 0.261649f, 0.224457f, -0.023976f, -0.263413f, -0.244097f, -0.014710f, 0.158079f, 0.227605f, 0.109615f, -0.065107f, -0.132971f, -0.069191f, -0.004626f, 0.014712f, 0.007118f, 0.001950f}, + {0.042673f, 0.041730f, 0.039874f, 0.037163f, 0.033680f, 0.029535f, 0.024856f, 0.019785f, 0.014478f, 0.009095f, 0.003795f, -0.001267f, -0.005945f, -0.010111f, -0.013653f, -0.016485f, -0.018543f, -0.019793f, -0.020227f, -0.019867f, -0.018758f, -0.016974f, -0.014606f, -0.011768f, -0.008583f, -0.005187f, -0.001718f, 0.001687f, 0.004895f, 0.007785f, 0.010249f, 0.012198f, 0.013566f, 0.014306f, 0.014401f, 0.013853f, 0.012694f, 0.010976f, 0.008770f, 0.006170f, 0.003278f, 0.000211f, -0.002912f, -0.005967f, -0.008838f, -0.011412f, -0.013592f, -0.015292f, -0.016449f, -0.017016f, -0.016970f, -0.016311f, -0.015061f, -0.013261f, -0.010975f, -0.008281f, -0.005272f, -0.002053f, 0.001267f, 0.004575f, 0.007762f, 0.010723f, 0.013361f, 0.015596f, 0.017360f, 0.018605f, 0.019301f, 0.019439f, 0.019030f, 0.018105f, 0.016711f, 0.014913f, 0.012790f, 0.010428f, 0.007922f, 0.005370f, 0.002870f, 0.000514f, -0.001612f, -0.003434f, -0.004888f, -0.005930f, -0.006527f, -0.006669f, -0.006361f, -0.005623f, -0.004494f, -0.003025f, -0.001281f, 0.000667f, 0.002739f, 0.004855f, 0.006933f, 0.008895f, 0.010671f, 0.012198f, + 0.013427f, 0.014318f, 0.014850f, 0.015013f, 0.014816f, 0.014280f, 0.013438f, 0.012339f, 0.011038f, 0.009599f, 0.008090f, 0.006582f, 0.005142f, 0.003835f, 0.002722f, 0.001851f, 0.001261f, 0.000981f, 0.001023f, 0.001390f, 0.002068f, 0.003032f, 0.004245f, 0.005661f, 0.007225f, 0.008877f, 0.010553f, 0.012188f, 0.013720f, 0.015092f, 0.016251f, 0.017156f, 0.017772f, 0.018079f, 0.018067f, 0.017739f, 0.017110f, 0.016205f, 0.015061f, 0.013722f, 0.012239f, 0.010666f, 0.009062f, 0.007482f, 0.005982f, 0.004610f, 0.003411f, 0.002418f, 0.001657f, 0.001143f, 0.000880f, 0.000862f, 0.001071f, 0.001483f, 0.002062f, 0.002769f, 0.003559f, 0.004386f, 0.005202f, 0.005962f, 0.006625f, 0.007155f, 0.007525f, 0.007715f, -0.000703f, 0.012014f, -0.023058f, -0.009347f, -0.006556f, -0.046623f, -0.036669f, 0.163509f, 0.163094f, 0.105808f, 0.019357f, -0.015128f, 0.055594f, 0.018606f, -0.216331f, -0.113836f, -0.070440f, 0.103385f, 0.015700f, -0.038121f, -0.109001f, -0.010150f, -0.003061f, 0.045685f, 0.068175f, 0.040635f, 0.029258f, 0.007584f, -0.043414f, -0.073871f, -0.068350f, 0.007277f, + 0.132105f, 0.150432f, -0.005063f, -0.071415f, -0.100787f, -0.069717f, 0.005698f, 0.103146f, -0.162283f, 0.037753f, 0.072138f, 0.128314f, 0.102348f, -0.020686f, -0.191555f, -0.205195f, -0.043832f, 0.203511f, 0.313890f, 0.271106f, -0.047523f, -0.305055f, -0.370226f, -0.272333f, 0.081732f, 0.353064f, 0.324645f, 0.072582f, 0.027554f, -0.313444f, -0.189395f, -0.004285f, 0.042663f, -0.088102f, 0.150611f, 0.021456f, 0.083142f, 0.036100f, 0.169744f, 0.151088f, 0.116774f, -0.088463f, -0.131521f, -0.177038f, 0.001401f, 0.187488f, 0.416717f, 0.158257f, -0.096190f, -0.311161f, -0.110840f, 0.094059f, 0.115655f, 0.090147f, -0.106664f, -0.135269f, -0.024411f, 0.178208f, 0.242803f, 0.118685f, -0.125271f, -0.314262f, -0.181317f, 0.073741f, 0.316811f, 0.389714f, 0.057773f, -0.169178f, -0.266624f, -0.089083f, 0.167968f, 0.349306f, 0.247575f, -0.018203f, -0.266792f, -0.312023f, -0.131091f, 0.088570f, 0.234122f, 0.241933f, 0.075741f, -0.113846f, -0.186098f, -0.028217f, 0.153824f, 0.129312f, 0.105649f, 0.012657f, -0.052550f, -0.050992f, 0.011399f, -0.005730f, 0.056003f, 0.040678f, 0.060576f, 0.026527f, + 0.033121f, -0.068738f, -0.128814f, -0.085662f, 0.064948f, 0.180050f, 0.213189f, 0.062824f, -0.185219f, -0.325475f, -0.193610f, 0.043435f, 0.269135f, 0.310078f, 0.129779f, -0.121151f, -0.261649f, -0.224457f, 0.023976f, 0.263413f, 0.244097f, 0.014710f, -0.158079f, -0.227605f, -0.109615f, 0.065107f, 0.132971f, 0.069191f, 0.004626f, -0.014712f, -0.007118f, -0.001950f} + }, + { + {-0.031658f, -0.031297f, -0.030589f, -0.029558f, -0.028244f, -0.026693f, -0.024961f, -0.023108f, -0.021197f, -0.019293f, -0.017453f, -0.015733f, -0.014178f, -0.012823f, -0.011691f, -0.010791f, -0.010119f, -0.009655f, -0.009369f, -0.009215f, -0.009139f, -0.009079f, -0.008966f, -0.008732f, -0.008307f, -0.007627f, -0.006635f, -0.005285f, -0.003546f, -0.001400f, 0.001151f, 0.004090f, 0.007378f, 0.010960f, 0.014762f, 0.018696f, 0.022660f, 0.026545f, 0.030233f, 0.033604f, 0.036543f, 0.038939f, 0.040691f, 0.041714f, 0.041939f, 0.041320f, 0.039833f, 0.037479f, 0.034284f, 0.030301f, 0.025606f, 0.020299f, 0.014499f, 0.008344f, 0.001982f, -0.004428f, -0.010724f, -0.016746f, -0.022339f, -0.027361f, -0.031682f, -0.035196f, -0.037817f, -0.039484f, -0.040166f, -0.039858f, -0.038586f, -0.036401f, -0.033380f, -0.029624f, -0.025254f, -0.020406f, -0.015225f, -0.009867f, -0.004485f, 0.000768f, 0.005751f, 0.010331f, 0.014397f, 0.017853f, 0.020629f, 0.022677f, 0.023976f, 0.024528f, 0.024360f, 0.023523f, 0.022087f, 0.020138f, 0.017775f, 0.015110f, 0.012256f, 0.009328f, 0.006438f, 0.003689f, 0.001175f, -0.001027f, + -0.002856f, -0.004270f, -0.005245f, -0.005781f, -0.005894f, -0.005621f, -0.005015f, -0.004141f, -0.003077f, -0.001909f, -0.000724f, 0.000387f, 0.001340f, 0.002056f, 0.002467f, 0.002519f, 0.002172f, 0.001402f, 0.000205f, -0.001407f, -0.003403f, -0.005737f, -0.008349f, -0.011165f, -0.014104f, -0.017078f, -0.019996f, -0.022768f, -0.025309f, -0.027538f, -0.029388f, -0.030804f, -0.031742f, -0.032179f, -0.032105f, -0.031528f, -0.030472f, -0.028978f, -0.027098f, -0.024896f, -0.022445f, -0.019824f, -0.017114f, -0.014397f, -0.011749f, -0.009244f, -0.006944f, -0.004900f, -0.003155f, -0.001732f, -0.000646f, 0.000106f, 0.000538f, 0.000677f, 0.000562f, 0.000237f, -0.000245f, -0.000829f, -0.001459f, -0.002081f, -0.002644f, -0.003107f, -0.003436f, -0.003606f, 0.035933f, 0.020984f, 0.026867f, 0.002696f, 0.025415f, -0.036934f, 0.120298f, 0.068769f, -0.020529f, -0.006575f, 0.082765f, -0.095468f, 0.015725f, 0.111940f, -0.049377f, -0.361451f, -0.225560f, -0.127606f, 0.157523f, 0.115815f, -0.176161f, -0.033340f, 0.133488f, 0.235074f, 0.062310f, -0.045055f, -0.116670f, -0.191947f, -0.051784f, 0.128127f, 0.226928f, 0.159370f, + 0.002583f, -0.117427f, -0.145975f, -0.075645f, 0.062470f, 0.165515f, 0.094874f, 0.046350f, -0.069340f, -0.121021f, -0.054308f, 0.095239f, 0.175485f, 0.141666f, -0.009457f, -0.072362f, -0.077262f, -0.112777f, -0.041468f, 0.010540f, 0.128448f, 0.207661f, 0.236093f, 0.111252f, -0.132629f, -0.260489f, -0.113035f, 0.074176f, -0.037847f, 0.237528f, 0.168932f, 0.081841f, -0.030812f, 0.116029f, -0.233120f, -0.186041f, -0.172953f, 0.042388f, 0.022458f, 0.053621f, -0.126092f, 0.022388f, 0.106431f, 0.197811f, 0.251476f, -0.250332f, -0.447804f, -0.146131f, 0.106907f, 0.301541f, 0.246779f, 0.195526f, -0.234959f, -0.654778f, -0.528090f, -0.091133f, 0.350633f, 0.435490f, 0.196637f, -0.176745f, -0.414173f, -0.391466f, -0.050836f, 0.150028f, 0.222439f, 0.035540f, -0.112228f, -0.104142f, 0.130390f, 0.149355f, 0.031043f, -0.104799f, -0.143846f, -0.061771f, 0.118866f, 0.183334f, 0.124964f, -0.017414f, -0.101273f, -0.078169f, -0.013332f, 0.189832f, 0.145048f, -0.122418f, -0.167217f, -0.105858f, -0.041787f, 0.035448f, 0.048130f, -0.023457f, -0.119449f, -0.069736f, -0.037997f, -0.014965f, -0.006334f, -0.000078f, + -0.038475f, -0.075177f, 0.020174f, 0.057602f, 0.045164f, -0.033911f, -0.121277f, -0.077838f, -0.000650f, 0.066829f, 0.097348f, 0.064148f, -0.064369f, -0.142455f, -0.077573f, 0.093315f, 0.196517f, 0.146823f, -0.035371f, -0.226970f, -0.280115f, -0.132018f, 0.119916f, 0.339091f, 0.295249f, 0.056229f, -0.254791f, -0.278626f, -0.087325f, 0.007573f, 0.004968f, -0.008294f}, + {-0.031658f, -0.031297f, -0.030589f, -0.029558f, -0.028244f, -0.026693f, -0.024961f, -0.023108f, -0.021197f, -0.019293f, -0.017453f, -0.015733f, -0.014178f, -0.012823f, -0.011691f, -0.010791f, -0.010119f, -0.009655f, -0.009369f, -0.009215f, -0.009139f, -0.009079f, -0.008966f, -0.008732f, -0.008307f, -0.007627f, -0.006635f, -0.005285f, -0.003546f, -0.001400f, 0.001151f, 0.004090f, 0.007378f, 0.010960f, 0.014762f, 0.018696f, 0.022660f, 0.026545f, 0.030233f, 0.033604f, 0.036543f, 0.038939f, 0.040691f, 0.041714f, 0.041939f, 0.041320f, 0.039833f, 0.037479f, 0.034284f, 0.030301f, 0.025606f, 0.020299f, 0.014499f, 0.008344f, 0.001982f, -0.004428f, -0.010724f, -0.016746f, -0.022339f, -0.027361f, -0.031682f, -0.035196f, -0.037817f, -0.039484f, -0.040166f, -0.039858f, -0.038586f, -0.036401f, -0.033380f, -0.029624f, -0.025254f, -0.020406f, -0.015225f, -0.009867f, -0.004485f, 0.000768f, 0.005751f, 0.010331f, 0.014397f, 0.017853f, 0.020629f, 0.022677f, 0.023976f, 0.024528f, 0.024360f, 0.023523f, 0.022087f, 0.020138f, 0.017775f, 0.015110f, 0.012256f, 0.009328f, 0.006438f, 0.003689f, 0.001175f, -0.001027f, + -0.002856f, -0.004270f, -0.005245f, -0.005781f, -0.005894f, -0.005621f, -0.005015f, -0.004141f, -0.003077f, -0.001909f, -0.000724f, 0.000387f, 0.001340f, 0.002056f, 0.002467f, 0.002519f, 0.002172f, 0.001402f, 0.000205f, -0.001407f, -0.003403f, -0.005737f, -0.008349f, -0.011165f, -0.014104f, -0.017078f, -0.019996f, -0.022768f, -0.025309f, -0.027538f, -0.029388f, -0.030804f, -0.031742f, -0.032179f, -0.032105f, -0.031528f, -0.030472f, -0.028978f, -0.027098f, -0.024896f, -0.022445f, -0.019824f, -0.017114f, -0.014397f, -0.011749f, -0.009244f, -0.006944f, -0.004900f, -0.003155f, -0.001732f, -0.000646f, 0.000106f, 0.000538f, 0.000677f, 0.000562f, 0.000237f, -0.000245f, -0.000829f, -0.001459f, -0.002081f, -0.002644f, -0.003107f, -0.003436f, -0.003606f, 0.035933f, 0.020984f, 0.026867f, 0.002696f, 0.025415f, -0.036934f, 0.120298f, 0.068769f, -0.020529f, -0.006575f, 0.082765f, -0.095468f, 0.015725f, 0.111940f, -0.049377f, -0.361451f, -0.225560f, -0.127606f, 0.157523f, 0.115815f, -0.176161f, -0.033340f, 0.133488f, 0.235074f, 0.062310f, -0.045055f, -0.116670f, -0.191947f, -0.051784f, 0.128127f, 0.226928f, 0.159370f, + 0.002583f, -0.117427f, -0.145975f, -0.075645f, 0.062470f, 0.165515f, 0.094874f, 0.046350f, -0.069340f, -0.121021f, -0.054308f, 0.095239f, 0.175485f, 0.141666f, -0.009457f, -0.072362f, -0.077262f, -0.112777f, -0.041468f, 0.010540f, 0.128448f, 0.207661f, 0.236093f, 0.111252f, -0.132629f, -0.260489f, -0.113035f, 0.074176f, -0.037847f, 0.237528f, 0.168932f, 0.081841f, -0.030812f, 0.116029f, -0.233120f, -0.186041f, -0.172953f, 0.042388f, 0.022458f, 0.053621f, -0.126092f, 0.022388f, 0.106431f, 0.197811f, 0.251476f, -0.250332f, -0.447804f, -0.146131f, 0.106907f, 0.301541f, 0.246779f, 0.195526f, -0.234959f, -0.654778f, -0.528090f, -0.091133f, 0.350633f, 0.435490f, 0.196637f, -0.176745f, -0.414173f, -0.391466f, -0.050836f, 0.150028f, 0.222439f, 0.035540f, -0.112228f, -0.104142f, 0.130390f, 0.149355f, 0.031043f, -0.104799f, -0.143846f, -0.061771f, 0.118866f, 0.183334f, 0.124964f, -0.017414f, -0.101273f, -0.078169f, -0.013332f, 0.189832f, 0.145048f, -0.122418f, -0.167217f, -0.105858f, -0.041787f, 0.035448f, 0.048130f, -0.023457f, -0.119449f, -0.069736f, -0.037997f, -0.014965f, -0.006334f, -0.000078f, + -0.038475f, -0.075177f, 0.020174f, 0.057602f, 0.045164f, -0.033911f, -0.121277f, -0.077838f, -0.000650f, 0.066829f, 0.097348f, 0.064148f, -0.064369f, -0.142455f, -0.077573f, 0.093315f, 0.196517f, 0.146823f, -0.035371f, -0.226970f, -0.280115f, -0.132018f, 0.119916f, 0.339091f, 0.295249f, 0.056229f, -0.254791f, -0.278626f, -0.087325f, 0.007573f, 0.004968f, -0.008294f} + }, + { + {-0.015408f, -0.015285f, -0.015045f, -0.014699f, -0.014264f, -0.013763f, -0.013221f, -0.012665f, -0.012125f, -0.011630f, -0.011207f, -0.010883f, -0.010680f, -0.010613f, -0.010695f, -0.010928f, -0.011312f, -0.011835f, -0.012479f, -0.013221f, -0.014029f, -0.014866f, -0.015690f, -0.016456f, -0.017119f, -0.017630f, -0.017943f, -0.018017f, -0.017814f, -0.017300f, -0.016454f, -0.015260f, -0.013714f, -0.011820f, -0.009596f, -0.007071f, -0.004283f, -0.001282f, 0.001874f, 0.005119f, 0.008379f, 0.011578f, 0.014635f, 0.017470f, 0.020005f, 0.022165f, 0.023883f, 0.025098f, 0.025763f, 0.025840f, 0.025305f, 0.024148f, 0.022376f, 0.020009f, 0.017083f, 0.013647f, 0.009766f, 0.005515f, 0.000979f, -0.003748f, -0.008566f, -0.013374f, -0.018066f, -0.022543f, -0.026708f, -0.030471f, -0.033752f, -0.036484f, -0.038612f, -0.040097f, -0.040914f, -0.041057f, -0.040536f, -0.039377f, -0.037621f, -0.035325f, -0.032558f, -0.029401f, -0.025942f, -0.022276f, -0.018502f, -0.014719f, -0.011026f, -0.007514f, -0.004270f, -0.001371f, 0.001119f, 0.003148f, 0.004679f, 0.005688f, 0.006171f, 0.006137f, 0.005610f, 0.004629f, 0.003246f, 0.001525f, + -0.000461f, -0.002632f, -0.004905f, -0.007193f, -0.009411f, -0.011474f, -0.013307f, -0.014840f, -0.016015f, -0.016782f, -0.017108f, -0.016971f, -0.016366f, -0.015300f, -0.013795f, -0.011888f, -0.009625f, -0.007066f, -0.004279f, -0.001337f, 0.001679f, 0.004689f, 0.007611f, 0.010367f, 0.012881f, 0.015088f, 0.016929f, 0.018356f, 0.019333f, 0.019837f, 0.019856f, 0.019395f, 0.018467f, 0.017103f, 0.015340f, 0.013228f, 0.010824f, 0.008193f, 0.005403f, 0.002524f, -0.000374f, -0.003221f, -0.005953f, -0.008511f, -0.010844f, -0.012909f, -0.014675f, -0.016119f, -0.017231f, -0.018011f, -0.018470f, -0.018628f, -0.018516f, -0.018171f, -0.017635f, -0.016957f, -0.016187f, -0.015375f, -0.014571f, -0.013822f, -0.013169f, -0.012646f, -0.012282f, -0.012095f, -0.020686f, -0.012326f, 0.042249f, 0.011897f, -0.022847f, -0.048127f, 0.083811f, 0.129155f, 0.163708f, 0.022869f, -0.072526f, -0.164162f, -0.007816f, 0.027666f, -0.093836f, -0.134766f, -0.127618f, -0.159064f, 0.083027f, 0.276492f, 0.024970f, 0.012459f, -0.072943f, -0.075554f, -0.058818f, 0.141418f, 0.095215f, 0.252683f, 0.019866f, 0.006696f, -0.119821f, -0.077002f, + -0.045750f, 0.087841f, 0.149808f, 0.113649f, -0.009288f, -0.069954f, -0.072106f, -0.074136f, -0.033421f, 0.050376f, 0.106111f, 0.055032f, -0.022958f, -0.052034f, -0.042467f, 0.061100f, 0.037831f, -0.077361f, -0.100657f, -0.030394f, 0.011179f, 0.027216f, 0.107319f, -0.003935f, 0.036237f, -0.038532f, 0.028205f, -0.009426f, -0.146082f, 0.148498f, 0.116117f, -0.024541f, -0.083741f, 0.082639f, -0.188835f, -0.023098f, -0.023592f, 0.019447f, -0.138882f, -0.250382f, -0.311850f, 0.004980f, 0.286101f, 0.301464f, 0.107797f, -0.150925f, -0.259117f, -0.206325f, 0.001685f, 0.241522f, 0.282817f, 0.062626f, -0.088421f, -0.041516f, 0.003648f, 0.054010f, 0.046370f, 0.040694f, -0.052706f, -0.146004f, -0.137439f, -0.016482f, 0.155527f, 0.237146f, 0.195189f, 0.016389f, -0.202511f, -0.280801f, -0.243882f, 0.079192f, 0.301892f, 0.366577f, 0.210273f, -0.098096f, -0.289805f, -0.270517f, -0.114198f, 0.058399f, 0.086904f, 0.105942f, 0.029166f, -0.094588f, -0.004971f, 0.129819f, 0.201895f, -0.053156f, -0.121050f, -0.124760f, 0.042954f, 0.084181f, 0.177267f, 0.093099f, -0.039351f, -0.180287f, -0.210676f, -0.092445f, + 0.129987f, 0.290854f, 0.262032f, 0.051008f, -0.247422f, -0.366382f, -0.302780f, 0.000925f, 0.339108f, 0.427318f, 0.233903f, -0.080922f, -0.325694f, -0.336162f, -0.091573f, 0.058594f, 0.159764f, 0.137345f, 0.076793f, -0.013573f, -0.089058f, -0.094353f, -0.028671f, 0.034008f, 0.110977f, 0.068440f, 0.011509f, -0.020070f, -0.051275f, -0.009802f, -0.008549f, -0.003679f}, + {-0.015408f, -0.015285f, -0.015045f, -0.014699f, -0.014264f, -0.013763f, -0.013221f, -0.012665f, -0.012125f, -0.011630f, -0.011207f, -0.010883f, -0.010680f, -0.010613f, -0.010695f, -0.010928f, -0.011312f, -0.011835f, -0.012479f, -0.013221f, -0.014029f, -0.014866f, -0.015690f, -0.016456f, -0.017119f, -0.017630f, -0.017943f, -0.018017f, -0.017814f, -0.017300f, -0.016454f, -0.015260f, -0.013714f, -0.011820f, -0.009596f, -0.007071f, -0.004283f, -0.001282f, 0.001874f, 0.005119f, 0.008379f, 0.011578f, 0.014635f, 0.017470f, 0.020005f, 0.022165f, 0.023883f, 0.025098f, 0.025763f, 0.025840f, 0.025305f, 0.024148f, 0.022376f, 0.020009f, 0.017083f, 0.013647f, 0.009766f, 0.005515f, 0.000979f, -0.003748f, -0.008566f, -0.013374f, -0.018066f, -0.022543f, -0.026708f, -0.030471f, -0.033752f, -0.036484f, -0.038612f, -0.040097f, -0.040914f, -0.041057f, -0.040536f, -0.039377f, -0.037621f, -0.035325f, -0.032558f, -0.029401f, -0.025942f, -0.022276f, -0.018502f, -0.014719f, -0.011026f, -0.007514f, -0.004270f, -0.001371f, 0.001119f, 0.003148f, 0.004679f, 0.005688f, 0.006171f, 0.006137f, 0.005610f, 0.004629f, 0.003246f, 0.001525f, + -0.000461f, -0.002632f, -0.004905f, -0.007193f, -0.009411f, -0.011474f, -0.013307f, -0.014840f, -0.016015f, -0.016782f, -0.017108f, -0.016971f, -0.016366f, -0.015300f, -0.013795f, -0.011888f, -0.009625f, -0.007066f, -0.004279f, -0.001337f, 0.001679f, 0.004689f, 0.007611f, 0.010367f, 0.012881f, 0.015088f, 0.016929f, 0.018356f, 0.019333f, 0.019837f, 0.019856f, 0.019395f, 0.018467f, 0.017103f, 0.015340f, 0.013228f, 0.010824f, 0.008193f, 0.005403f, 0.002524f, -0.000374f, -0.003221f, -0.005953f, -0.008511f, -0.010844f, -0.012909f, -0.014675f, -0.016119f, -0.017231f, -0.018011f, -0.018470f, -0.018628f, -0.018516f, -0.018171f, -0.017635f, -0.016957f, -0.016187f, -0.015375f, -0.014571f, -0.013822f, -0.013169f, -0.012646f, -0.012282f, -0.012095f, -0.020686f, -0.012326f, 0.042249f, 0.011897f, -0.022847f, -0.048127f, 0.083811f, 0.129155f, 0.163708f, 0.022869f, -0.072526f, -0.164162f, -0.007816f, 0.027666f, -0.093836f, -0.134766f, -0.127618f, -0.159064f, 0.083027f, 0.276492f, 0.024970f, 0.012459f, -0.072943f, -0.075554f, -0.058818f, 0.141418f, 0.095215f, 0.252683f, 0.019866f, 0.006696f, -0.119821f, -0.077002f, + -0.045750f, 0.087841f, 0.149808f, 0.113649f, -0.009288f, -0.069954f, -0.072106f, -0.074136f, -0.033421f, 0.050376f, 0.106111f, 0.055032f, -0.022958f, -0.052034f, -0.042467f, 0.061100f, 0.037831f, -0.077361f, -0.100657f, -0.030394f, 0.011179f, 0.027216f, 0.107319f, -0.003935f, 0.036237f, -0.038532f, 0.028205f, -0.009426f, -0.146082f, 0.148498f, 0.116117f, -0.024541f, -0.083741f, 0.082639f, -0.188835f, -0.023098f, -0.023592f, 0.019447f, -0.138882f, -0.250382f, -0.311850f, 0.004980f, 0.286101f, 0.301464f, 0.107797f, -0.150925f, -0.259117f, -0.206325f, 0.001685f, 0.241522f, 0.282817f, 0.062626f, -0.088421f, -0.041516f, 0.003648f, 0.054010f, 0.046370f, 0.040694f, -0.052706f, -0.146004f, -0.137439f, -0.016482f, 0.155527f, 0.237146f, 0.195189f, 0.016389f, -0.202511f, -0.280801f, -0.243882f, 0.079192f, 0.301892f, 0.366577f, 0.210273f, -0.098096f, -0.289805f, -0.270517f, -0.114198f, 0.058399f, 0.086904f, 0.105942f, 0.029166f, -0.094588f, -0.004971f, 0.129819f, 0.201895f, -0.053156f, -0.121050f, -0.124760f, 0.042954f, 0.084181f, 0.177267f, 0.093099f, -0.039351f, -0.180287f, -0.210676f, -0.092445f, + 0.129987f, 0.290854f, 0.262032f, 0.051008f, -0.247422f, -0.366382f, -0.302780f, 0.000925f, 0.339108f, 0.427318f, 0.233903f, -0.080922f, -0.325694f, -0.336162f, -0.091573f, 0.058594f, 0.159764f, 0.137345f, 0.076793f, -0.013573f, -0.089058f, -0.094353f, -0.028671f, 0.034008f, 0.110977f, 0.068440f, 0.011509f, -0.020070f, -0.051275f, -0.009802f, -0.008549f, -0.003679f} + }, + { + {0.032299f, 0.031544f, 0.030055f, 0.027873f, 0.025059f, 0.021690f, 0.017856f, 0.013663f, 0.009222f, 0.004650f, 0.000066f, -0.004415f, -0.008680f, -0.012630f, -0.016174f, -0.019236f, -0.021759f, -0.023700f, -0.025037f, -0.025768f, -0.025906f, -0.025484f, -0.024551f, -0.023167f, -0.021406f, -0.019350f, -0.017085f, -0.014701f, -0.012287f, -0.009926f, -0.007696f, -0.005667f, -0.003897f, -0.002429f, -0.001295f, -0.000512f, -0.000081f, 0.000010f, -0.000213f, -0.000713f, -0.001443f, -0.002350f, -0.003372f, -0.004446f, -0.005511f, -0.006505f, -0.007372f, -0.008061f, -0.008533f, -0.008755f, -0.008706f, -0.008379f, -0.007775f, -0.006907f, -0.005800f, -0.004486f, -0.003005f, -0.001405f, 0.000266f, 0.001954f, 0.003609f, 0.005181f, 0.006625f, 0.007903f, 0.008984f, 0.009845f, 0.010472f, 0.010863f, 0.011022f, 0.010966f, 0.010717f, 0.010306f, 0.009770f, 0.009148f, 0.008484f, 0.007820f, 0.007197f, 0.006653f, 0.006221f, 0.005927f, 0.005791f, 0.005822f, 0.006022f, 0.006383f, 0.006889f, 0.007515f, 0.008231f, 0.009000f, 0.009779f, 0.010525f, 0.011195f, 0.011745f, 0.012135f, 0.012331f, 0.012304f, 0.012035f, + 0.011513f, 0.010735f, 0.009710f, 0.008458f, 0.007006f, 0.005391f, 0.003659f, 0.001860f, 0.000049f, -0.001714f, -0.003372f, -0.004865f, -0.006142f, -0.007151f, -0.007852f, -0.008212f, -0.008206f, -0.007822f, -0.007059f, -0.005925f, -0.004442f, -0.002640f, -0.000561f, 0.001749f, 0.004233f, 0.006831f, 0.009481f, 0.012119f, 0.014683f, 0.017113f, 0.019354f, 0.021358f, 0.023083f, 0.024499f, 0.025582f, 0.026320f, 0.026709f, 0.026758f, 0.026480f, 0.025901f, 0.025050f, 0.023964f, 0.022684f, 0.021252f, 0.019712f, 0.018108f, 0.016481f, 0.014870f, 0.013308f, 0.011825f, 0.010443f, 0.009182f, 0.008051f, 0.007056f, 0.006199f, 0.005475f, 0.004876f, 0.004392f, 0.004010f, 0.003717f, 0.003501f, 0.003350f, 0.003255f, 0.003210f, -0.013680f, -0.039550f, -0.038004f, -0.021661f, 0.011200f, 0.000727f, -0.055616f, 0.005118f, -0.073839f, -0.098462f, -0.068399f, -0.001479f, -0.054556f, 0.005705f, -0.020564f, -0.008444f, -0.065880f, -0.030718f, 0.136221f, 0.158023f, -0.089897f, -0.028536f, 0.013666f, 0.105333f, 0.066431f, 0.035655f, 0.039198f, -0.028502f, -0.059788f, -0.060135f, 0.033058f, 0.092928f, + -0.009570f, -0.065701f, -0.068909f, -0.005240f, 0.042002f, 0.099751f, 0.024988f, -0.005379f, -0.041463f, 0.032064f, 0.017203f, 0.091991f, 0.037084f, 0.014363f, -0.024151f, -0.000292f, -0.050768f, -0.055517f, -0.058829f, 0.077306f, 0.048217f, 0.028005f, -0.043731f, -0.103314f, -0.084560f, 0.008726f, 0.030716f, 0.040377f, 0.097543f, -0.094716f, -0.112332f, -0.068748f, 0.010776f, -0.025287f, 0.173500f, 0.126353f, 0.098705f, -0.033310f, -0.045328f, -0.096649f, 0.056125f, 0.059148f, 0.063656f, 0.051949f, 0.013214f, -0.165706f, -0.244565f, -0.146717f, 0.089772f, 0.235814f, 0.281104f, 0.041070f, -0.139964f, -0.268631f, -0.126872f, 0.045759f, 0.225982f, 0.215417f, 0.079051f, -0.048478f, -0.284325f, -0.235456f, -0.000243f, 0.173903f, 0.206366f, 0.016453f, -0.145258f, -0.163019f, -0.051451f, 0.085441f, 0.149474f, 0.015766f, -0.148167f, -0.220790f, -0.111326f, 0.104355f, 0.273432f, 0.144737f, -0.129187f, -0.311249f, -0.225754f, -0.091820f, 0.299847f, 0.419689f, 0.126895f, -0.229018f, -0.342215f, -0.194918f, 0.122016f, 0.285187f, 0.358148f, 0.124243f, -0.127982f, -0.282243f, -0.197338f, 0.015785f, + 0.230173f, 0.268222f, 0.092309f, -0.109969f, -0.202412f, -0.112134f, 0.095827f, 0.220495f, 0.116567f, -0.053352f, -0.155056f, -0.119150f, 0.106271f, 0.197023f, 0.114667f, -0.061074f, -0.194423f, -0.209315f, -0.031668f, 0.202858f, 0.246496f, 0.101415f, -0.106340f, -0.237504f, -0.213684f, -0.067325f, 0.140445f, 0.193717f, 0.078110f, 0.001223f, -0.002604f, 0.006252f}, + {0.032299f, 0.031544f, 0.030055f, 0.027873f, 0.025059f, 0.021690f, 0.017856f, 0.013663f, 0.009222f, 0.004650f, 0.000066f, -0.004415f, -0.008680f, -0.012630f, -0.016174f, -0.019236f, -0.021759f, -0.023700f, -0.025037f, -0.025768f, -0.025906f, -0.025484f, -0.024551f, -0.023167f, -0.021406f, -0.019350f, -0.017085f, -0.014701f, -0.012287f, -0.009926f, -0.007696f, -0.005667f, -0.003897f, -0.002429f, -0.001295f, -0.000512f, -0.000081f, 0.000010f, -0.000213f, -0.000713f, -0.001443f, -0.002350f, -0.003372f, -0.004446f, -0.005511f, -0.006505f, -0.007372f, -0.008061f, -0.008533f, -0.008755f, -0.008706f, -0.008379f, -0.007775f, -0.006907f, -0.005800f, -0.004486f, -0.003005f, -0.001405f, 0.000266f, 0.001954f, 0.003609f, 0.005181f, 0.006625f, 0.007903f, 0.008984f, 0.009845f, 0.010472f, 0.010863f, 0.011022f, 0.010966f, 0.010717f, 0.010306f, 0.009770f, 0.009148f, 0.008484f, 0.007820f, 0.007197f, 0.006653f, 0.006221f, 0.005927f, 0.005791f, 0.005822f, 0.006022f, 0.006383f, 0.006889f, 0.007515f, 0.008231f, 0.009000f, 0.009779f, 0.010525f, 0.011195f, 0.011745f, 0.012135f, 0.012331f, 0.012304f, 0.012035f, + 0.011513f, 0.010735f, 0.009710f, 0.008458f, 0.007006f, 0.005391f, 0.003659f, 0.001860f, 0.000049f, -0.001714f, -0.003372f, -0.004865f, -0.006142f, -0.007151f, -0.007852f, -0.008212f, -0.008206f, -0.007822f, -0.007059f, -0.005925f, -0.004442f, -0.002640f, -0.000561f, 0.001749f, 0.004233f, 0.006831f, 0.009481f, 0.012119f, 0.014683f, 0.017113f, 0.019354f, 0.021358f, 0.023083f, 0.024499f, 0.025582f, 0.026320f, 0.026709f, 0.026758f, 0.026480f, 0.025901f, 0.025050f, 0.023964f, 0.022684f, 0.021252f, 0.019712f, 0.018108f, 0.016481f, 0.014870f, 0.013308f, 0.011825f, 0.010443f, 0.009182f, 0.008051f, 0.007056f, 0.006199f, 0.005475f, 0.004876f, 0.004392f, 0.004010f, 0.003717f, 0.003501f, 0.003350f, 0.003255f, 0.003210f, -0.013680f, -0.039550f, -0.038004f, -0.021661f, 0.011200f, 0.000727f, -0.055616f, 0.005118f, -0.073839f, -0.098462f, -0.068399f, -0.001479f, -0.054556f, 0.005705f, -0.020564f, -0.008444f, -0.065880f, -0.030718f, 0.136221f, 0.158023f, -0.089897f, -0.028536f, 0.013666f, 0.105333f, 0.066431f, 0.035655f, 0.039198f, -0.028502f, -0.059788f, -0.060135f, 0.033058f, 0.092928f, + -0.009570f, -0.065701f, -0.068909f, -0.005240f, 0.042002f, 0.099751f, 0.024988f, -0.005379f, -0.041463f, 0.032064f, 0.017203f, 0.091991f, 0.037084f, 0.014363f, -0.024151f, -0.000292f, -0.050768f, -0.055517f, -0.058829f, 0.077306f, 0.048217f, 0.028005f, -0.043731f, -0.103314f, -0.084560f, 0.008726f, 0.030716f, 0.040377f, 0.097543f, -0.094716f, -0.112332f, -0.068748f, 0.010776f, -0.025287f, 0.173500f, 0.126353f, 0.098705f, -0.033310f, -0.045328f, -0.096649f, 0.056125f, 0.059148f, 0.063656f, 0.051949f, 0.013214f, -0.165706f, -0.244565f, -0.146717f, 0.089772f, 0.235814f, 0.281104f, 0.041070f, -0.139964f, -0.268631f, -0.126872f, 0.045759f, 0.225982f, 0.215417f, 0.079051f, -0.048478f, -0.284325f, -0.235456f, -0.000243f, 0.173903f, 0.206366f, 0.016453f, -0.145258f, -0.163019f, -0.051451f, 0.085441f, 0.149474f, 0.015766f, -0.148167f, -0.220790f, -0.111326f, 0.104355f, 0.273432f, 0.144737f, -0.129187f, -0.311249f, -0.225754f, -0.091820f, 0.299847f, 0.419689f, 0.126895f, -0.229018f, -0.342215f, -0.194918f, 0.122016f, 0.285187f, 0.358148f, 0.124243f, -0.127982f, -0.282243f, -0.197338f, 0.015785f, + 0.230173f, 0.268222f, 0.092309f, -0.109969f, -0.202412f, -0.112134f, 0.095827f, 0.220495f, 0.116567f, -0.053352f, -0.155056f, -0.119150f, 0.106271f, 0.197023f, 0.114667f, -0.061074f, -0.194423f, -0.209315f, -0.031668f, 0.202858f, 0.246496f, 0.101415f, -0.106340f, -0.237504f, -0.213684f, -0.067325f, 0.140445f, 0.193717f, 0.078110f, 0.001223f, -0.002604f, 0.006252f} + }, + { + {0.015793f, 0.015614f, 0.015261f, 0.014743f, 0.014070f, 0.013261f, 0.012332f, 0.011307f, 0.010207f, 0.009057f, 0.007883f, 0.006708f, 0.005555f, 0.004447f, 0.003403f, 0.002438f, 0.001568f, 0.000800f, 0.000142f, -0.000404f, -0.000841f, -0.001172f, -0.001407f, -0.001555f, -0.001630f, -0.001646f, -0.001620f, -0.001566f, -0.001501f, -0.001438f, -0.001391f, -0.001369f, -0.001381f, -0.001430f, -0.001519f, -0.001643f, -0.001798f, -0.001974f, -0.002158f, -0.002335f, -0.002488f, -0.002597f, -0.002642f, -0.002603f, -0.002459f, -0.002192f, -0.001786f, -0.001226f, -0.000503f, 0.000391f, 0.001457f, 0.002693f, 0.004091f, 0.005638f, 0.007317f, 0.009107f, 0.010980f, 0.012909f, 0.014859f, 0.016797f, 0.018687f, 0.020493f, 0.022179f, 0.023712f, 0.025060f, 0.026196f, 0.027096f, 0.027741f, 0.028118f, 0.028219f, 0.028042f, 0.027592f, 0.026880f, 0.025923f, 0.024741f, 0.023363f, 0.021819f, 0.020143f, 0.018371f, 0.016542f, 0.014694f, 0.012864f, 0.011089f, 0.009403f, 0.007835f, 0.006412f, 0.005154f, 0.004078f, 0.003193f, 0.002504f, 0.002009f, 0.001702f, 0.001570f, 0.001595f, 0.001757f, 0.002031f, + 0.002389f, 0.002802f, 0.003242f, 0.003679f, 0.004085f, 0.004434f, 0.004704f, 0.004875f, 0.004933f, 0.004867f, 0.004674f, 0.004352f, 0.003909f, 0.003354f, 0.002702f, 0.001973f, 0.001191f, 0.000379f, -0.000434f, -0.001219f, -0.001948f, -0.002594f, -0.003131f, -0.003534f, -0.003786f, -0.003869f, -0.003775f, -0.003496f, -0.003032f, -0.002390f, -0.001580f, -0.000618f, 0.000476f, 0.001676f, 0.002954f, 0.004278f, 0.005615f, 0.006931f, 0.008192f, 0.009366f, 0.010421f, 0.011330f, 0.012069f, 0.012618f, 0.012963f, 0.013095f, 0.013013f, 0.012718f, 0.012221f, 0.011536f, 0.010683f, 0.009688f, 0.008580f, 0.007390f, 0.006154f, 0.004907f, 0.003686f, 0.002526f, 0.001461f, 0.000522f, -0.000265f, -0.000876f, -0.001293f, -0.001505f, -0.007783f, -0.004437f, -0.006273f, -0.018191f, -0.025282f, 0.042441f, -0.014784f, -0.028944f, -0.005539f, -0.007788f, 0.065740f, 0.017438f, -0.029275f, 0.007538f, -0.076337f, -0.156600f, -0.065884f, -0.026101f, 0.057496f, 0.043466f, -0.070559f, -0.019601f, 0.023551f, 0.089863f, 0.084975f, 0.036251f, 0.023990f, 0.033648f, -0.041778f, -0.060314f, -0.142602f, 0.008572f, + 0.042511f, 0.010698f, 0.030706f, 0.037763f, -0.073999f, -0.096953f, -0.047880f, 0.009965f, 0.067194f, 0.102992f, 0.072743f, 0.020511f, -0.034400f, -0.021139f, -0.023958f, 0.049921f, 0.036726f, 0.017578f, -0.031352f, 0.004816f, -0.113625f, -0.018313f, 0.056091f, 0.016778f, 0.091757f, 0.079485f, -0.054640f, -0.123131f, 0.051245f, -0.067679f, 0.096904f, 0.073628f, 0.072762f, -0.075751f, -0.090515f, -0.010165f, 0.057450f, 0.076087f, 0.063748f, 0.026516f, 0.041170f, -0.078005f, -0.098049f, -0.029460f, 0.123883f, 0.083460f, -0.042449f, -0.047824f, -0.066676f, -0.105916f, -0.040019f, 0.055262f, 0.049687f, -0.113598f, -0.215741f, -0.205199f, 0.041807f, 0.235204f, 0.265427f, 0.104337f, -0.087201f, -0.244934f, -0.151795f, 0.031357f, 0.142193f, 0.083725f, 0.004657f, -0.070260f, -0.045831f, -0.013898f, 0.027669f, 0.031559f, 0.062616f, -0.058257f, -0.059770f, -0.131156f, -0.061874f, -0.022709f, 0.123818f, 0.173510f, 0.122079f, -0.127801f, -0.148640f, -0.043896f, -0.080444f, 0.033137f, 0.084677f, 0.136884f, 0.036755f, -0.129573f, -0.059507f, -0.055939f, 0.087536f, 0.163054f, 0.120972f, 0.038874f, + -0.016745f, -0.150456f, -0.181956f, -0.099941f, 0.107594f, 0.273411f, 0.280940f, 0.068309f, -0.208727f, -0.272775f, -0.164199f, 0.052441f, 0.242820f, 0.262410f, 0.079543f, -0.137148f, -0.269699f, -0.175399f, 0.050200f, 0.300957f, 0.206259f, -0.014310f, -0.184154f, -0.267489f, -0.158250f, 0.047583f, 0.164514f, 0.116695f, 0.013346f, -0.013466f, -0.005674f, -0.000653f}, + {0.015793f, 0.015614f, 0.015261f, 0.014743f, 0.014070f, 0.013261f, 0.012332f, 0.011307f, 0.010207f, 0.009057f, 0.007883f, 0.006708f, 0.005555f, 0.004447f, 0.003403f, 0.002438f, 0.001568f, 0.000800f, 0.000142f, -0.000404f, -0.000841f, -0.001172f, -0.001407f, -0.001555f, -0.001630f, -0.001646f, -0.001620f, -0.001566f, -0.001501f, -0.001438f, -0.001391f, -0.001369f, -0.001381f, -0.001430f, -0.001519f, -0.001643f, -0.001798f, -0.001974f, -0.002158f, -0.002335f, -0.002488f, -0.002597f, -0.002642f, -0.002603f, -0.002459f, -0.002192f, -0.001786f, -0.001226f, -0.000503f, 0.000391f, 0.001457f, 0.002693f, 0.004091f, 0.005638f, 0.007317f, 0.009107f, 0.010980f, 0.012909f, 0.014859f, 0.016797f, 0.018687f, 0.020493f, 0.022179f, 0.023712f, 0.025060f, 0.026196f, 0.027096f, 0.027741f, 0.028118f, 0.028219f, 0.028042f, 0.027592f, 0.026880f, 0.025923f, 0.024741f, 0.023363f, 0.021819f, 0.020143f, 0.018371f, 0.016542f, 0.014694f, 0.012864f, 0.011089f, 0.009403f, 0.007835f, 0.006412f, 0.005154f, 0.004078f, 0.003193f, 0.002504f, 0.002009f, 0.001702f, 0.001570f, 0.001595f, 0.001757f, 0.002031f, + 0.002389f, 0.002802f, 0.003242f, 0.003679f, 0.004085f, 0.004434f, 0.004704f, 0.004875f, 0.004933f, 0.004867f, 0.004674f, 0.004352f, 0.003909f, 0.003354f, 0.002702f, 0.001973f, 0.001191f, 0.000379f, -0.000434f, -0.001219f, -0.001948f, -0.002594f, -0.003131f, -0.003534f, -0.003786f, -0.003869f, -0.003775f, -0.003496f, -0.003032f, -0.002390f, -0.001580f, -0.000618f, 0.000476f, 0.001676f, 0.002954f, 0.004278f, 0.005615f, 0.006931f, 0.008192f, 0.009366f, 0.010421f, 0.011330f, 0.012069f, 0.012618f, 0.012963f, 0.013095f, 0.013013f, 0.012718f, 0.012221f, 0.011536f, 0.010683f, 0.009688f, 0.008580f, 0.007390f, 0.006154f, 0.004907f, 0.003686f, 0.002526f, 0.001461f, 0.000522f, -0.000265f, -0.000876f, -0.001293f, -0.001505f, -0.007783f, -0.004437f, -0.006273f, -0.018191f, -0.025282f, 0.042441f, -0.014784f, -0.028944f, -0.005539f, -0.007788f, 0.065740f, 0.017438f, -0.029275f, 0.007538f, -0.076337f, -0.156600f, -0.065884f, -0.026101f, 0.057496f, 0.043466f, -0.070559f, -0.019601f, 0.023551f, 0.089863f, 0.084975f, 0.036251f, 0.023990f, 0.033648f, -0.041778f, -0.060314f, -0.142602f, 0.008572f, + 0.042511f, 0.010698f, 0.030706f, 0.037763f, -0.073999f, -0.096953f, -0.047880f, 0.009965f, 0.067194f, 0.102992f, 0.072743f, 0.020511f, -0.034400f, -0.021139f, -0.023958f, 0.049921f, 0.036726f, 0.017578f, -0.031352f, 0.004816f, -0.113625f, -0.018313f, 0.056091f, 0.016778f, 0.091757f, 0.079485f, -0.054640f, -0.123131f, 0.051245f, -0.067679f, 0.096904f, 0.073628f, 0.072762f, -0.075751f, -0.090515f, -0.010165f, 0.057450f, 0.076087f, 0.063748f, 0.026516f, 0.041170f, -0.078005f, -0.098049f, -0.029460f, 0.123883f, 0.083460f, -0.042449f, -0.047824f, -0.066676f, -0.105916f, -0.040019f, 0.055262f, 0.049687f, -0.113598f, -0.215741f, -0.205199f, 0.041807f, 0.235204f, 0.265427f, 0.104337f, -0.087201f, -0.244934f, -0.151795f, 0.031357f, 0.142193f, 0.083725f, 0.004657f, -0.070260f, -0.045831f, -0.013898f, 0.027669f, 0.031559f, 0.062616f, -0.058257f, -0.059770f, -0.131156f, -0.061874f, -0.022709f, 0.123818f, 0.173510f, 0.122079f, -0.127801f, -0.148640f, -0.043896f, -0.080444f, 0.033137f, 0.084677f, 0.136884f, 0.036755f, -0.129573f, -0.059507f, -0.055939f, 0.087536f, 0.163054f, 0.120972f, 0.038874f, + -0.016745f, -0.150456f, -0.181956f, -0.099941f, 0.107594f, 0.273411f, 0.280940f, 0.068309f, -0.208727f, -0.272775f, -0.164199f, 0.052441f, 0.242820f, 0.262410f, 0.079543f, -0.137148f, -0.269699f, -0.175399f, 0.050200f, 0.300957f, 0.206259f, -0.014310f, -0.184154f, -0.267489f, -0.158250f, 0.047583f, 0.164514f, 0.116695f, 0.013346f, -0.013466f, -0.005674f, -0.000653f} + } +}; +const float CRendBin_HOA3_HRIR_coeff_im_32kHz[16][BINAURAL_CHANNELS][320]={ + { + {0.000560f, 0.001661f, 0.002712f, 0.003680f, 0.004535f, 0.005253f, 0.005813f, 0.006200f, 0.006405f, 0.006425f, 0.006264f, 0.005931f, 0.005442f, 0.004817f, 0.004083f, 0.003268f, 0.002403f, 0.001521f, 0.000656f, -0.000161f, -0.000898f, -0.001530f, -0.002032f, -0.002387f, -0.002582f, -0.002609f, -0.002468f, -0.002164f, -0.001707f, -0.001115f, -0.000408f, 0.000388f, 0.001245f, 0.002133f, 0.003020f, 0.003875f, 0.004668f, 0.005370f, 0.005957f, 0.006408f, 0.006706f, 0.006842f, 0.006809f, 0.006608f, 0.006244f, 0.005728f, 0.005076f, 0.004308f, 0.003448f, 0.002521f, 0.001554f, 0.000577f, -0.000384f, -0.001302f, -0.002151f, -0.002912f, -0.003566f, -0.004099f, -0.004503f, -0.004774f, -0.004911f, -0.004920f, -0.004810f, -0.004594f, -0.004288f, -0.003910f, -0.003481f, -0.003021f, -0.002551f, -0.002092f, -0.001662f, -0.001277f, -0.000951f, -0.000694f, -0.000513f, -0.000409f, -0.000383f, -0.000431f, -0.000544f, -0.000712f, -0.000922f, -0.001160f, -0.001410f, -0.001657f, -0.001886f, -0.002081f, -0.002230f, -0.002324f, -0.002354f, -0.002316f, -0.002208f, -0.002033f, -0.001796f, -0.001505f, -0.001171f, -0.000807f, + -0.000428f, -0.000050f, 0.000312f, 0.000641f, 0.000922f, 0.001141f, 0.001289f, 0.001355f, 0.001334f, 0.001225f, 0.001028f, 0.000748f, 0.000392f, -0.000029f, -0.000500f, -0.001007f, -0.001533f, -0.002058f, -0.002566f, -0.003037f, -0.003455f, -0.003805f, -0.004073f, -0.004251f, -0.004330f, -0.004307f, -0.004182f, -0.003958f, -0.003643f, -0.003245f, -0.002778f, -0.002256f, -0.001695f, -0.001114f, -0.000530f, 0.000039f, 0.000576f, 0.001067f, 0.001497f, 0.001857f, 0.002137f, 0.002333f, 0.002443f, 0.002469f, 0.002415f, 0.002288f, 0.002098f, 0.001857f, 0.001577f, 0.001272f, 0.000957f, 0.000645f, 0.000350f, 0.000083f, -0.000146f, -0.000329f, -0.000461f, -0.000540f, -0.000566f, -0.000541f, -0.000472f, -0.000365f, -0.000231f, -0.000079f, -0.460259f, -0.951079f, -0.610747f, 0.139152f, 0.697949f, 0.756847f, 0.243016f, -0.421240f, -0.809240f, -0.722790f, -0.131189f, 0.462952f, 0.869130f, 0.669286f, 0.030399f, -0.562684f, -0.789169f, -0.467168f, 0.151920f, 0.680335f, 0.729095f, 0.339114f, -0.322683f, -0.698273f, -0.615664f, -0.093987f, 0.456628f, 0.704581f, 0.459961f, -0.071120f, -0.568074f, -0.669242f, + -0.335663f, 0.247131f, 0.632814f, 0.619104f, 0.155654f, -0.373183f, -0.695371f, -0.503600f, -0.123694f, 0.358269f, 0.720965f, 0.556532f, 0.039488f, -0.523997f, -0.688621f, -0.390989f, 0.199606f, 0.632990f, 0.653547f, 0.212882f, -0.363644f, -0.697704f, -0.533888f, -0.012498f, 0.510544f, 0.655232f, 0.374543f, -0.161184f, -0.563367f, -0.566663f, -0.171992f, 0.340804f, 0.661432f, 0.496413f, -0.012145f, -0.517044f, -0.669485f, -0.363559f, 0.180685f, 0.613468f, 0.618828f, 0.208956f, -0.346445f, -0.673686f, -0.546699f, -0.033563f, 0.494204f, 0.664797f, 0.384626f, -0.160262f, -0.529660f, -0.570199f, -0.199102f, 0.331888f, 0.641768f, 0.518867f, 0.029795f, -0.468042f, -0.650452f, -0.381207f, 0.163056f, 0.573507f, 0.620545f, 0.260207f, -0.286010f, -0.602836f, -0.538518f, -0.133326f, 0.352210f, 0.602532f, 0.439914f, 0.007239f, -0.429036f, -0.568867f, -0.308712f, 0.146511f, 0.519479f, 0.533995f, 0.182772f, -0.315085f, -0.581991f, -0.461079f, 0.007470f, 0.469652f, 0.601398f, 0.340411f, -0.169957f, -0.574590f, -0.589987f, -0.182204f, 0.358851f, 0.637429f, 0.477370f, -0.004546f, -0.473175f, -0.601238f, + -0.306724f, 0.190330f, 0.543690f, 0.516648f, 0.152960f, -0.318909f, -0.546856f, -0.396088f, 0.018774f, 0.420713f, 0.545205f, 0.298542f, -0.152204f, -0.494079f, -0.489567f, -0.147781f, 0.289809f, 0.518298f, 0.390240f, -0.007614f, -0.385375f, -0.488880f, -0.242032f, 0.186344f, 0.481677f, 0.422991f, 0.071320f, -0.202729f, -0.173620f, -0.040696f, -0.001221f, 0.001660f}, + {0.000560f, 0.001661f, 0.002712f, 0.003680f, 0.004535f, 0.005253f, 0.005813f, 0.006200f, 0.006405f, 0.006425f, 0.006264f, 0.005931f, 0.005442f, 0.004817f, 0.004083f, 0.003268f, 0.002403f, 0.001521f, 0.000656f, -0.000161f, -0.000898f, -0.001530f, -0.002032f, -0.002387f, -0.002582f, -0.002609f, -0.002468f, -0.002164f, -0.001707f, -0.001115f, -0.000408f, 0.000388f, 0.001245f, 0.002133f, 0.003020f, 0.003875f, 0.004668f, 0.005370f, 0.005957f, 0.006408f, 0.006706f, 0.006842f, 0.006809f, 0.006608f, 0.006244f, 0.005728f, 0.005076f, 0.004308f, 0.003448f, 0.002521f, 0.001554f, 0.000577f, -0.000384f, -0.001302f, -0.002151f, -0.002912f, -0.003566f, -0.004099f, -0.004503f, -0.004774f, -0.004911f, -0.004920f, -0.004810f, -0.004594f, -0.004288f, -0.003910f, -0.003481f, -0.003021f, -0.002551f, -0.002092f, -0.001662f, -0.001277f, -0.000951f, -0.000694f, -0.000513f, -0.000409f, -0.000383f, -0.000431f, -0.000544f, -0.000712f, -0.000922f, -0.001160f, -0.001410f, -0.001657f, -0.001886f, -0.002081f, -0.002230f, -0.002324f, -0.002354f, -0.002316f, -0.002208f, -0.002033f, -0.001796f, -0.001505f, -0.001171f, -0.000807f, + -0.000428f, -0.000050f, 0.000312f, 0.000641f, 0.000922f, 0.001141f, 0.001289f, 0.001355f, 0.001334f, 0.001225f, 0.001028f, 0.000748f, 0.000392f, -0.000029f, -0.000500f, -0.001007f, -0.001533f, -0.002058f, -0.002566f, -0.003037f, -0.003455f, -0.003805f, -0.004073f, -0.004251f, -0.004330f, -0.004307f, -0.004182f, -0.003958f, -0.003643f, -0.003245f, -0.002778f, -0.002256f, -0.001695f, -0.001114f, -0.000530f, 0.000039f, 0.000576f, 0.001067f, 0.001497f, 0.001857f, 0.002137f, 0.002333f, 0.002443f, 0.002469f, 0.002415f, 0.002288f, 0.002098f, 0.001857f, 0.001577f, 0.001272f, 0.000957f, 0.000645f, 0.000350f, 0.000083f, -0.000146f, -0.000329f, -0.000461f, -0.000540f, -0.000566f, -0.000541f, -0.000472f, -0.000365f, -0.000231f, -0.000079f, -0.460259f, -0.951079f, -0.610747f, 0.139152f, 0.697949f, 0.756847f, 0.243016f, -0.421240f, -0.809240f, -0.722790f, -0.131189f, 0.462952f, 0.869130f, 0.669286f, 0.030399f, -0.562684f, -0.789169f, -0.467168f, 0.151920f, 0.680335f, 0.729095f, 0.339114f, -0.322683f, -0.698273f, -0.615664f, -0.093987f, 0.456628f, 0.704581f, 0.459961f, -0.071120f, -0.568074f, -0.669242f, + -0.335663f, 0.247131f, 0.632814f, 0.619104f, 0.155654f, -0.373183f, -0.695371f, -0.503600f, -0.123694f, 0.358269f, 0.720965f, 0.556532f, 0.039488f, -0.523997f, -0.688621f, -0.390989f, 0.199606f, 0.632990f, 0.653547f, 0.212882f, -0.363644f, -0.697704f, -0.533888f, -0.012498f, 0.510544f, 0.655232f, 0.374543f, -0.161184f, -0.563367f, -0.566663f, -0.171992f, 0.340804f, 0.661432f, 0.496413f, -0.012145f, -0.517044f, -0.669485f, -0.363559f, 0.180685f, 0.613468f, 0.618828f, 0.208956f, -0.346445f, -0.673686f, -0.546699f, -0.033563f, 0.494204f, 0.664797f, 0.384626f, -0.160262f, -0.529660f, -0.570199f, -0.199102f, 0.331888f, 0.641768f, 0.518867f, 0.029795f, -0.468042f, -0.650452f, -0.381207f, 0.163056f, 0.573507f, 0.620545f, 0.260207f, -0.286010f, -0.602836f, -0.538518f, -0.133326f, 0.352210f, 0.602532f, 0.439914f, 0.007239f, -0.429036f, -0.568867f, -0.308712f, 0.146511f, 0.519479f, 0.533995f, 0.182772f, -0.315085f, -0.581991f, -0.461079f, 0.007470f, 0.469652f, 0.601398f, 0.340411f, -0.169957f, -0.574590f, -0.589987f, -0.182204f, 0.358851f, 0.637429f, 0.477370f, -0.004546f, -0.473175f, -0.601238f, + -0.306724f, 0.190330f, 0.543690f, 0.516648f, 0.152960f, -0.318909f, -0.546856f, -0.396088f, 0.018774f, 0.420713f, 0.545205f, 0.298542f, -0.152204f, -0.494079f, -0.489567f, -0.147781f, 0.289809f, 0.518298f, 0.390240f, -0.007614f, -0.385375f, -0.488880f, -0.242032f, 0.186344f, 0.481677f, 0.422991f, 0.071320f, -0.202729f, -0.173620f, -0.040696f, -0.001221f, 0.001660f} + }, + { + {0.000043f, 0.000144f, 0.000288f, 0.000500f, 0.000803f, 0.001215f, 0.001748f, 0.002406f, 0.003188f, 0.004083f, 0.005077f, 0.006143f, 0.007254f, 0.008372f, 0.009460f, 0.010475f, 0.011374f, 0.012114f, 0.012655f, 0.012959f, 0.012996f, 0.012740f, 0.012174f, 0.011291f, 0.010092f, 0.008588f, 0.006799f, 0.004755f, 0.002496f, 0.000069f, -0.002475f, -0.005077f, -0.007675f, -0.010209f, -0.012615f, -0.014835f, -0.016813f, -0.018501f, -0.019856f, -0.020848f, -0.021453f, -0.021661f, -0.021469f, -0.020890f, -0.019943f, -0.018662f, -0.017086f, -0.015264f, -0.013251f, -0.011106f, -0.008892f, -0.006671f, -0.004506f, -0.002455f, -0.000574f, 0.001091f, 0.002497f, 0.003615f, 0.004422f, 0.004905f, 0.005063f, 0.004904f, 0.004446f, 0.003715f, 0.002745f, 0.001576f, 0.000254f, -0.001173f, -0.002655f, -0.004142f, -0.005584f, -0.006937f, -0.008160f, -0.009218f, -0.010081f, -0.010730f, -0.011149f, -0.011334f, -0.011287f, -0.011017f, -0.010541f, -0.009880f, -0.009063f, -0.008119f, -0.007082f, -0.005988f, -0.004870f, -0.003763f, -0.002698f, -0.001703f, -0.000803f, -0.000016f, 0.000642f, 0.001163f, 0.001543f, 0.001783f, + 0.001888f, 0.001871f, 0.001743f, 0.001522f, 0.001226f, 0.000875f, 0.000487f, 0.000082f, -0.000322f, -0.000711f, -0.001071f, -0.001392f, -0.001669f, -0.001897f, -0.002077f, -0.002211f, -0.002304f, -0.002364f, -0.002399f, -0.002421f, -0.002438f, -0.002462f, -0.002500f, -0.002561f, -0.002650f, -0.002771f, -0.002924f, -0.003107f, -0.003317f, -0.003546f, -0.003785f, -0.004025f, -0.004252f, -0.004455f, -0.004621f, -0.004737f, -0.004793f, -0.004780f, -0.004690f, -0.004518f, -0.004265f, -0.003930f, -0.003519f, -0.003041f, -0.002505f, -0.001925f, -0.001317f, -0.000698f, -0.000087f, 0.000500f, 0.001043f, 0.001526f, 0.001935f, 0.002255f, 0.002479f, 0.002599f, 0.002613f, 0.002521f, 0.002329f, 0.002045f, 0.001680f, 0.001249f, 0.000769f, 0.000260f, 0.048997f, -0.015463f, -0.522407f, -0.600085f, -0.029695f, 0.813964f, 0.895309f, 0.289993f, -0.543636f, -0.625036f, -0.515398f, 0.035194f, 0.575718f, 0.501556f, 0.121036f, -0.361039f, -0.606845f, -0.495123f, 0.005394f, 0.415183f, 0.580837f, 0.318723f, -0.123234f, -0.593524f, -0.557355f, -0.169369f, 0.347707f, 0.571599f, 0.525102f, 0.030652f, -0.384441f, -0.655672f, + -0.441819f, 0.048587f, 0.566868f, 0.678160f, 0.404472f, -0.223534f, -0.700639f, -0.731015f, -0.152629f, 0.532299f, 0.760448f, 0.502195f, -0.144427f, -0.703978f, -0.795643f, -0.329782f, 0.354114f, 0.753876f, 0.632607f, 0.089946f, -0.518511f, -0.791351f, -0.524899f, 0.105404f, 0.617469f, 0.708260f, 0.315198f, -0.259685f, -0.691168f, -0.600568f, -0.140553f, 0.464125f, 0.710946f, 0.596699f, 0.080098f, -0.565102f, -0.842626f, -0.545444f, 0.106598f, 0.690972f, 0.810141f, 0.361296f, -0.318065f, -0.835661f, -0.742986f, -0.188936f, 0.522876f, 0.868070f, 0.580850f, -0.071922f, -0.600638f, -0.771853f, -0.386671f, 0.306924f, 0.769086f, 0.717438f, 0.159465f, -0.512452f, -0.803147f, -0.589629f, 0.033897f, 0.618695f, 0.791468f, 0.451289f, -0.217270f, -0.688459f, -0.719979f, -0.225991f, 0.388821f, 0.764794f, 0.571738f, 0.036560f, -0.544424f, -0.738813f, -0.420931f, 0.220447f, 0.694543f, 0.676052f, 0.185413f, -0.439806f, -0.732939f, -0.533904f, 0.076370f, 0.635241f, 0.740983f, 0.341226f, -0.276814f, -0.754017f, -0.696747f, -0.157458f, 0.462557f, 0.761077f, 0.546792f, -0.049733f, -0.593449f, -0.702775f, + -0.329350f, 0.258630f, 0.631552f, 0.588083f, 0.131914f, -0.416817f, -0.660524f, -0.449411f, 0.064797f, 0.531572f, 0.651073f, 0.322630f, -0.224129f, -0.603598f, -0.571861f, -0.140543f, 0.397649f, 0.642342f, 0.435744f, -0.053386f, -0.506667f, -0.608518f, -0.260578f, 0.265807f, 0.611486f, 0.509185f, 0.058931f, -0.271691f, -0.217337f, -0.048702f, -0.000227f, 0.001508f}, + {-0.000043f, -0.000144f, -0.000288f, -0.000500f, -0.000803f, -0.001215f, -0.001748f, -0.002406f, -0.003188f, -0.004083f, -0.005077f, -0.006143f, -0.007254f, -0.008372f, -0.009460f, -0.010475f, -0.011374f, -0.012114f, -0.012655f, -0.012959f, -0.012996f, -0.012740f, -0.012174f, -0.011291f, -0.010092f, -0.008588f, -0.006799f, -0.004755f, -0.002496f, -0.000069f, 0.002475f, 0.005077f, 0.007675f, 0.010209f, 0.012615f, 0.014835f, 0.016813f, 0.018501f, 0.019856f, 0.020848f, 0.021453f, 0.021661f, 0.021469f, 0.020890f, 0.019943f, 0.018662f, 0.017086f, 0.015264f, 0.013251f, 0.011106f, 0.008892f, 0.006671f, 0.004506f, 0.002455f, 0.000574f, -0.001091f, -0.002497f, -0.003615f, -0.004422f, -0.004905f, -0.005063f, -0.004904f, -0.004446f, -0.003715f, -0.002745f, -0.001576f, -0.000254f, 0.001173f, 0.002655f, 0.004142f, 0.005584f, 0.006937f, 0.008160f, 0.009218f, 0.010081f, 0.010730f, 0.011149f, 0.011334f, 0.011287f, 0.011017f, 0.010541f, 0.009880f, 0.009063f, 0.008119f, 0.007082f, 0.005988f, 0.004870f, 0.003763f, 0.002698f, 0.001703f, 0.000803f, 0.000016f, -0.000642f, -0.001163f, -0.001543f, -0.001783f, + -0.001888f, -0.001871f, -0.001743f, -0.001522f, -0.001226f, -0.000875f, -0.000487f, -0.000082f, 0.000322f, 0.000711f, 0.001071f, 0.001392f, 0.001669f, 0.001897f, 0.002077f, 0.002211f, 0.002304f, 0.002364f, 0.002399f, 0.002421f, 0.002438f, 0.002462f, 0.002500f, 0.002561f, 0.002650f, 0.002771f, 0.002924f, 0.003107f, 0.003317f, 0.003546f, 0.003785f, 0.004025f, 0.004252f, 0.004455f, 0.004621f, 0.004737f, 0.004793f, 0.004780f, 0.004690f, 0.004518f, 0.004265f, 0.003930f, 0.003519f, 0.003041f, 0.002505f, 0.001925f, 0.001317f, 0.000698f, 0.000087f, -0.000500f, -0.001043f, -0.001526f, -0.001935f, -0.002255f, -0.002479f, -0.002599f, -0.002613f, -0.002521f, -0.002329f, -0.002045f, -0.001680f, -0.001249f, -0.000769f, -0.000260f, -0.048997f, 0.015463f, 0.522407f, 0.600085f, 0.029695f, -0.813964f, -0.895309f, -0.289993f, 0.543636f, 0.625036f, 0.515398f, -0.035194f, -0.575718f, -0.501556f, -0.121036f, 0.361039f, 0.606845f, 0.495123f, -0.005394f, -0.415183f, -0.580837f, -0.318723f, 0.123234f, 0.593524f, 0.557355f, 0.169369f, -0.347707f, -0.571599f, -0.525102f, -0.030652f, 0.384441f, 0.655672f, + 0.441819f, -0.048587f, -0.566868f, -0.678160f, -0.404472f, 0.223534f, 0.700639f, 0.731015f, 0.152629f, -0.532299f, -0.760448f, -0.502195f, 0.144427f, 0.703978f, 0.795643f, 0.329782f, -0.354114f, -0.753876f, -0.632607f, -0.089946f, 0.518511f, 0.791351f, 0.524899f, -0.105404f, -0.617469f, -0.708260f, -0.315198f, 0.259685f, 0.691168f, 0.600568f, 0.140553f, -0.464125f, -0.710946f, -0.596699f, -0.080098f, 0.565102f, 0.842626f, 0.545444f, -0.106598f, -0.690972f, -0.810141f, -0.361296f, 0.318065f, 0.835661f, 0.742986f, 0.188936f, -0.522876f, -0.868070f, -0.580850f, 0.071922f, 0.600638f, 0.771853f, 0.386671f, -0.306924f, -0.769086f, -0.717438f, -0.159465f, 0.512452f, 0.803147f, 0.589629f, -0.033897f, -0.618695f, -0.791468f, -0.451289f, 0.217270f, 0.688459f, 0.719979f, 0.225991f, -0.388821f, -0.764794f, -0.571738f, -0.036560f, 0.544424f, 0.738813f, 0.420931f, -0.220447f, -0.694543f, -0.676052f, -0.185413f, 0.439806f, 0.732939f, 0.533904f, -0.076370f, -0.635241f, -0.740983f, -0.341226f, 0.276814f, 0.754017f, 0.696747f, 0.157458f, -0.462557f, -0.761077f, -0.546792f, 0.049733f, 0.593449f, 0.702775f, + 0.329350f, -0.258630f, -0.631552f, -0.588083f, -0.131914f, 0.416817f, 0.660524f, 0.449411f, -0.064797f, -0.531572f, -0.651073f, -0.322630f, 0.224129f, 0.603598f, 0.571861f, 0.140543f, -0.397649f, -0.642342f, -0.435744f, 0.053386f, 0.506667f, 0.608518f, 0.260578f, -0.265807f, -0.611486f, -0.509185f, -0.058931f, 0.271691f, 0.217337f, 0.048702f, 0.000227f, -0.001508f} + }, + { + {-0.002267f, -0.006781f, -0.011234f, -0.015586f, -0.019796f, -0.023824f, -0.027628f, -0.031169f, -0.034406f, -0.037301f, -0.039816f, -0.041916f, -0.043571f, -0.044751f, -0.045434f, -0.045604f, -0.045249f, -0.044368f, -0.042964f, -0.041052f, -0.038655f, -0.035806f, -0.032547f, -0.028927f, -0.025007f, -0.020851f, -0.016534f, -0.012133f, -0.007730f, -0.003407f, 0.000753f, 0.004667f, 0.008260f, 0.011460f, 0.014203f, 0.016436f, 0.018117f, 0.019214f, 0.019710f, 0.019602f, 0.018900f, 0.017629f, 0.015828f, 0.013547f, 0.010848f, 0.007803f, 0.004494f, 0.001006f, -0.002572f, -0.006146f, -0.009627f, -0.012928f, -0.015967f, -0.018670f, -0.020974f, -0.022825f, -0.024183f, -0.025023f, -0.025330f, -0.025107f, -0.024370f, -0.023148f, -0.021482f, -0.019425f, -0.017039f, -0.014394f, -0.011564f, -0.008627f, -0.005663f, -0.002749f, 0.000039f, 0.002634f, 0.004973f, 0.007002f, 0.008679f, 0.009970f, 0.010856f, 0.011326f, 0.011383f, 0.011041f, 0.010324f, 0.009265f, 0.007905f, 0.006292f, 0.004479f, 0.002522f, 0.000479f, -0.001593f, -0.003639f, -0.005606f, -0.007448f, -0.009123f, -0.010596f, -0.011841f, -0.012837f, -0.013575f, + -0.014049f, -0.014265f, -0.014234f, -0.013972f, -0.013503f, -0.012852f, -0.012050f, -0.011128f, -0.010119f, -0.009056f, -0.007969f, -0.006887f, -0.005837f, -0.004840f, -0.003916f, -0.003079f, -0.002339f, -0.001702f, -0.001168f, -0.000738f, -0.000404f, -0.000159f, 0.000006f, 0.000105f, 0.000149f, 0.000151f, 0.000123f, 0.000078f, 0.000026f, -0.000024f, -0.000065f, -0.000092f, -0.000102f, -0.000092f, -0.000064f, -0.000018f, 0.000041f, 0.000110f, 0.000185f, 0.000260f, 0.000331f, 0.000394f, 0.000444f, 0.000479f, 0.000497f, 0.000497f, 0.000480f, 0.000446f, 0.000397f, 0.000337f, 0.000269f, 0.000197f, 0.000124f, 0.000055f, -0.000008f, -0.000060f, -0.000100f, -0.000126f, -0.000138f, -0.000136f, -0.000121f, -0.000095f, -0.000060f, -0.000021f, -0.058407f, -0.104213f, -0.091374f, 0.167866f, 0.095142f, -0.111637f, -0.093947f, 0.008070f, 0.076086f, 0.220379f, 0.388714f, 0.303315f, -0.046653f, 0.159210f, -0.080395f, -0.114785f, -0.080619f, 0.077435f, 0.100425f, 0.160232f, 0.147878f, 0.133076f, -0.051730f, -0.200541f, -0.153297f, 0.110444f, 0.193077f, 0.133008f, -0.052189f, -0.161640f, -0.246623f, -0.090053f, + 0.086510f, 0.220857f, 0.163599f, -0.014898f, -0.236818f, -0.222103f, -0.129232f, 0.081782f, -0.004850f, -0.065845f, 0.178391f, 0.209799f, 0.152276f, -0.066789f, -0.179632f, -0.185378f, -0.015467f, 0.196687f, 0.310999f, 0.153687f, -0.068969f, -0.298029f, -0.322925f, -0.091777f, 0.290577f, 0.470439f, 0.311392f, -0.112813f, -0.471956f, -0.535044f, -0.207024f, 0.243222f, 0.542002f, 0.311086f, -0.145760f, -0.473830f, -0.370839f, 0.001872f, 0.388776f, 0.426580f, 0.199433f, -0.186202f, -0.397908f, -0.270887f, 0.016514f, 0.321660f, 0.362808f, 0.069168f, -0.184442f, -0.327971f, -0.210001f, 0.042157f, 0.265061f, 0.262252f, 0.113813f, -0.135017f, -0.216907f, -0.177332f, -0.023642f, 0.109633f, 0.156087f, 0.124602f, 0.066843f, -0.079584f, -0.103854f, -0.076786f, 0.039317f, 0.182606f, 0.205344f, 0.015890f, -0.179015f, -0.308396f, -0.181602f, 0.118732f, 0.331502f, 0.311859f, 0.083492f, -0.193440f, -0.339859f, -0.210035f, 0.038309f, 0.272190f, 0.271032f, 0.078279f, -0.138374f, -0.258518f, -0.186134f, -0.005147f, 0.170585f, 0.170076f, 0.132706f, -0.022662f, -0.110194f, -0.128394f, -0.076436f, -0.034288f, + 0.038887f, 0.083304f, 0.098979f, 0.039004f, -0.015421f, -0.083882f, -0.075557f, -0.041993f, 0.044662f, 0.076560f, 0.104634f, 0.028010f, -0.037251f, -0.083421f, -0.057962f, -0.008276f, 0.050276f, 0.061592f, 0.062659f, -0.019294f, -0.045618f, -0.052590f, -0.021082f, 0.021156f, 0.051217f, 0.035327f, -0.003896f, -0.032706f, -0.007792f, -0.007871f, 0.005964f, -0.004716f}, + {-0.002267f, -0.006781f, -0.011234f, -0.015586f, -0.019796f, -0.023824f, -0.027628f, -0.031169f, -0.034406f, -0.037301f, -0.039816f, -0.041916f, -0.043571f, -0.044751f, -0.045434f, -0.045604f, -0.045249f, -0.044368f, -0.042964f, -0.041052f, -0.038655f, -0.035806f, -0.032547f, -0.028927f, -0.025007f, -0.020851f, -0.016534f, -0.012133f, -0.007730f, -0.003407f, 0.000753f, 0.004667f, 0.008260f, 0.011460f, 0.014203f, 0.016436f, 0.018117f, 0.019214f, 0.019710f, 0.019602f, 0.018900f, 0.017629f, 0.015828f, 0.013547f, 0.010848f, 0.007803f, 0.004494f, 0.001006f, -0.002572f, -0.006146f, -0.009627f, -0.012928f, -0.015967f, -0.018670f, -0.020974f, -0.022825f, -0.024183f, -0.025023f, -0.025330f, -0.025107f, -0.024370f, -0.023148f, -0.021482f, -0.019425f, -0.017039f, -0.014394f, -0.011564f, -0.008627f, -0.005663f, -0.002749f, 0.000039f, 0.002634f, 0.004973f, 0.007002f, 0.008679f, 0.009970f, 0.010856f, 0.011326f, 0.011383f, 0.011041f, 0.010324f, 0.009265f, 0.007905f, 0.006292f, 0.004479f, 0.002522f, 0.000479f, -0.001593f, -0.003639f, -0.005606f, -0.007448f, -0.009123f, -0.010596f, -0.011841f, -0.012837f, -0.013575f, + -0.014049f, -0.014265f, -0.014234f, -0.013972f, -0.013503f, -0.012852f, -0.012050f, -0.011128f, -0.010119f, -0.009056f, -0.007969f, -0.006887f, -0.005837f, -0.004840f, -0.003916f, -0.003079f, -0.002339f, -0.001702f, -0.001168f, -0.000738f, -0.000404f, -0.000159f, 0.000006f, 0.000105f, 0.000149f, 0.000151f, 0.000123f, 0.000078f, 0.000026f, -0.000024f, -0.000065f, -0.000092f, -0.000102f, -0.000092f, -0.000064f, -0.000018f, 0.000041f, 0.000110f, 0.000185f, 0.000260f, 0.000331f, 0.000394f, 0.000444f, 0.000479f, 0.000497f, 0.000497f, 0.000480f, 0.000446f, 0.000397f, 0.000337f, 0.000269f, 0.000197f, 0.000124f, 0.000055f, -0.000008f, -0.000060f, -0.000100f, -0.000126f, -0.000138f, -0.000136f, -0.000121f, -0.000095f, -0.000060f, -0.000021f, -0.058407f, -0.104213f, -0.091374f, 0.167866f, 0.095142f, -0.111637f, -0.093947f, 0.008070f, 0.076086f, 0.220379f, 0.388714f, 0.303315f, -0.046653f, 0.159210f, -0.080395f, -0.114785f, -0.080619f, 0.077435f, 0.100425f, 0.160232f, 0.147878f, 0.133076f, -0.051730f, -0.200541f, -0.153297f, 0.110444f, 0.193077f, 0.133008f, -0.052189f, -0.161640f, -0.246623f, -0.090053f, + 0.086510f, 0.220857f, 0.163599f, -0.014898f, -0.236818f, -0.222103f, -0.129232f, 0.081782f, -0.004850f, -0.065845f, 0.178391f, 0.209799f, 0.152276f, -0.066789f, -0.179632f, -0.185378f, -0.015467f, 0.196687f, 0.310999f, 0.153687f, -0.068969f, -0.298029f, -0.322925f, -0.091777f, 0.290577f, 0.470439f, 0.311392f, -0.112813f, -0.471956f, -0.535044f, -0.207024f, 0.243222f, 0.542002f, 0.311086f, -0.145760f, -0.473830f, -0.370839f, 0.001872f, 0.388776f, 0.426580f, 0.199433f, -0.186202f, -0.397908f, -0.270887f, 0.016514f, 0.321660f, 0.362808f, 0.069168f, -0.184442f, -0.327971f, -0.210001f, 0.042157f, 0.265061f, 0.262252f, 0.113813f, -0.135017f, -0.216907f, -0.177332f, -0.023642f, 0.109633f, 0.156087f, 0.124602f, 0.066843f, -0.079584f, -0.103854f, -0.076786f, 0.039317f, 0.182606f, 0.205344f, 0.015890f, -0.179015f, -0.308396f, -0.181602f, 0.118732f, 0.331502f, 0.311859f, 0.083492f, -0.193440f, -0.339859f, -0.210035f, 0.038309f, 0.272190f, 0.271032f, 0.078279f, -0.138374f, -0.258518f, -0.186134f, -0.005147f, 0.170585f, 0.170076f, 0.132706f, -0.022662f, -0.110194f, -0.128394f, -0.076436f, -0.034288f, + 0.038887f, 0.083304f, 0.098979f, 0.039004f, -0.015421f, -0.083882f, -0.075557f, -0.041993f, 0.044662f, 0.076560f, 0.104634f, 0.028010f, -0.037251f, -0.083421f, -0.057962f, -0.008276f, 0.050276f, 0.061592f, 0.062659f, -0.019294f, -0.045618f, -0.052590f, -0.021082f, 0.021156f, 0.051217f, 0.035327f, -0.003896f, -0.032706f, -0.007792f, -0.007871f, 0.005964f, -0.004716f} + }, + { + {-0.002758f, -0.008214f, -0.013493f, -0.018483f, -0.023078f, -0.027187f, -0.030729f, -0.033641f, -0.035877f, -0.037411f, -0.038233f, -0.038357f, -0.037811f, -0.036645f, -0.034921f, -0.032719f, -0.030125f, -0.027239f, -0.024162f, -0.021001f, -0.017858f, -0.014833f, -0.012020f, -0.009500f, -0.007345f, -0.005609f, -0.004333f, -0.003542f, -0.003240f, -0.003417f, -0.004046f, -0.005086f, -0.006478f, -0.008157f, -0.010046f, -0.012060f, -0.014115f, -0.016122f, -0.017997f, -0.019659f, -0.021036f, -0.022066f, -0.022699f, -0.022899f, -0.022644f, -0.021928f, -0.020760f, -0.019164f, -0.017180f, -0.014860f, -0.012267f, -0.009473f, -0.006558f, -0.003605f, -0.000699f, 0.002077f, 0.004641f, 0.006922f, 0.008853f, 0.010382f, 0.011466f, 0.012078f, 0.012205f, 0.011848f, 0.011025f, 0.009765f, 0.008114f, 0.006127f, 0.003869f, 0.001416f, -0.001155f, -0.003759f, -0.006314f, -0.008739f, -0.010956f, -0.012896f, -0.014498f, -0.015712f, -0.016499f, -0.016833f, -0.016705f, -0.016117f, -0.015086f, -0.013642f, -0.011827f, -0.009695f, -0.007308f, -0.004735f, -0.002052f, 0.000665f, 0.003338f, 0.005892f, 0.008256f, 0.010363f, 0.012159f, 0.013595f, + 0.014636f, 0.015258f, 0.015451f, 0.015215f, 0.014566f, 0.013529f, 0.012142f, 0.010452f, 0.008514f, 0.006391f, 0.004149f, 0.001856f, -0.000417f, -0.002603f, -0.004637f, -0.006461f, -0.008024f, -0.009281f, -0.010200f, -0.010759f, -0.010943f, -0.010755f, -0.010202f, -0.009307f, -0.008100f, -0.006621f, -0.004914f, -0.003034f, -0.001036f, 0.001021f, 0.003077f, 0.005075f, 0.006958f, 0.008677f, 0.010187f, 0.011449f, 0.012435f, 0.013124f, 0.013504f, 0.013575f, 0.013342f, 0.012823f, 0.012043f, 0.011032f, 0.009830f, 0.008478f, 0.007023f, 0.005512f, 0.003994f, 0.002515f, 0.001120f, -0.000151f, -0.001265f, -0.002191f, -0.002911f, -0.003409f, -0.003681f, -0.003730f, -0.003567f, -0.003209f, -0.002683f, -0.002019f, -0.001253f, -0.000425f, 0.017164f, -0.095166f, -0.084610f, -0.066781f, 0.125564f, -0.055140f, -0.043633f, -0.055197f, 0.072714f, -0.100511f, 0.144497f, 0.115593f, -0.072967f, 0.428156f, 0.536649f, 0.361553f, -0.187894f, -0.504100f, -0.536552f, -0.209129f, 0.324334f, 0.717579f, 0.479062f, -0.076828f, -0.630415f, -0.733045f, -0.375205f, 0.361882f, 0.851886f, 0.698590f, 0.037553f, -0.675426f, + -0.833824f, -0.418413f, 0.332807f, 0.738102f, 0.683005f, 0.031927f, -0.473763f, -0.676455f, -0.116995f, 0.532705f, 0.480135f, 0.217679f, -0.301672f, -0.549176f, -0.506689f, -0.110837f, 0.270437f, 0.499041f, 0.300922f, -0.031881f, -0.355101f, -0.392462f, -0.221663f, 0.107522f, 0.284228f, 0.295903f, 0.107689f, -0.126331f, -0.290544f, -0.236669f, -0.061858f, 0.193208f, 0.217471f, 0.246872f, 0.078080f, -0.181977f, -0.290841f, -0.186887f, 0.073642f, 0.191131f, 0.164691f, -0.004480f, -0.127122f, -0.163585f, -0.015179f, 0.092875f, 0.132319f, 0.056038f, -0.096492f, -0.185668f, -0.110148f, 0.053996f, 0.167665f, 0.195388f, 0.025827f, -0.166236f, -0.232588f, -0.166091f, 0.041634f, 0.101911f, 0.059508f, -0.013331f, -0.098501f, -0.069904f, -0.025396f, -0.001789f, -0.004400f, -0.144278f, -0.143038f, -0.024272f, 0.175344f, 0.253854f, 0.159944f, -0.101035f, -0.280794f, -0.265512f, -0.020116f, 0.276962f, 0.361592f, 0.144039f, -0.172472f, -0.398515f, -0.320982f, -0.050912f, 0.281935f, 0.448140f, 0.242748f, -0.148340f, -0.439433f, -0.362324f, -0.037030f, 0.304097f, 0.420291f, 0.244908f, -0.086568f, -0.339309f, + -0.341381f, -0.113297f, 0.212756f, 0.365130f, 0.285176f, -0.027987f, -0.290757f, -0.359049f, -0.186519f, 0.134808f, 0.357137f, 0.309240f, 0.053867f, -0.237918f, -0.363218f, -0.222627f, 0.018767f, 0.266466f, 0.325402f, 0.169829f, -0.113374f, -0.264223f, -0.246908f, -0.033550f, 0.194119f, 0.284522f, 0.165400f, -0.044492f, -0.108267f, -0.038686f, -0.008172f, 0.001053f}, + {-0.002758f, -0.008214f, -0.013493f, -0.018483f, -0.023078f, -0.027187f, -0.030729f, -0.033641f, -0.035877f, -0.037411f, -0.038233f, -0.038357f, -0.037811f, -0.036645f, -0.034921f, -0.032719f, -0.030125f, -0.027239f, -0.024162f, -0.021001f, -0.017858f, -0.014833f, -0.012020f, -0.009500f, -0.007345f, -0.005609f, -0.004333f, -0.003542f, -0.003240f, -0.003417f, -0.004046f, -0.005086f, -0.006478f, -0.008157f, -0.010046f, -0.012060f, -0.014115f, -0.016122f, -0.017997f, -0.019659f, -0.021036f, -0.022066f, -0.022699f, -0.022899f, -0.022644f, -0.021928f, -0.020760f, -0.019164f, -0.017180f, -0.014860f, -0.012267f, -0.009473f, -0.006558f, -0.003605f, -0.000699f, 0.002077f, 0.004641f, 0.006922f, 0.008853f, 0.010382f, 0.011466f, 0.012078f, 0.012205f, 0.011848f, 0.011025f, 0.009765f, 0.008114f, 0.006127f, 0.003869f, 0.001416f, -0.001155f, -0.003759f, -0.006314f, -0.008739f, -0.010956f, -0.012896f, -0.014498f, -0.015712f, -0.016499f, -0.016833f, -0.016705f, -0.016117f, -0.015086f, -0.013642f, -0.011827f, -0.009695f, -0.007308f, -0.004735f, -0.002052f, 0.000665f, 0.003338f, 0.005892f, 0.008256f, 0.010363f, 0.012159f, 0.013595f, + 0.014636f, 0.015258f, 0.015451f, 0.015215f, 0.014566f, 0.013529f, 0.012142f, 0.010452f, 0.008514f, 0.006391f, 0.004149f, 0.001856f, -0.000417f, -0.002603f, -0.004637f, -0.006461f, -0.008024f, -0.009281f, -0.010200f, -0.010759f, -0.010943f, -0.010755f, -0.010202f, -0.009307f, -0.008100f, -0.006621f, -0.004914f, -0.003034f, -0.001036f, 0.001021f, 0.003077f, 0.005075f, 0.006958f, 0.008677f, 0.010187f, 0.011449f, 0.012435f, 0.013124f, 0.013504f, 0.013575f, 0.013342f, 0.012823f, 0.012043f, 0.011032f, 0.009830f, 0.008478f, 0.007023f, 0.005512f, 0.003994f, 0.002515f, 0.001120f, -0.000151f, -0.001265f, -0.002191f, -0.002911f, -0.003409f, -0.003681f, -0.003730f, -0.003567f, -0.003209f, -0.002683f, -0.002019f, -0.001253f, -0.000425f, 0.017164f, -0.095166f, -0.084610f, -0.066781f, 0.125564f, -0.055140f, -0.043633f, -0.055197f, 0.072714f, -0.100511f, 0.144497f, 0.115593f, -0.072967f, 0.428156f, 0.536649f, 0.361553f, -0.187894f, -0.504100f, -0.536552f, -0.209129f, 0.324334f, 0.717579f, 0.479062f, -0.076828f, -0.630415f, -0.733045f, -0.375205f, 0.361882f, 0.851886f, 0.698590f, 0.037553f, -0.675426f, + -0.833824f, -0.418413f, 0.332807f, 0.738102f, 0.683005f, 0.031927f, -0.473763f, -0.676455f, -0.116995f, 0.532705f, 0.480135f, 0.217679f, -0.301672f, -0.549176f, -0.506689f, -0.110837f, 0.270437f, 0.499041f, 0.300922f, -0.031881f, -0.355101f, -0.392462f, -0.221663f, 0.107522f, 0.284228f, 0.295903f, 0.107689f, -0.126331f, -0.290544f, -0.236669f, -0.061858f, 0.193208f, 0.217471f, 0.246872f, 0.078080f, -0.181977f, -0.290841f, -0.186887f, 0.073642f, 0.191131f, 0.164691f, -0.004480f, -0.127122f, -0.163585f, -0.015179f, 0.092875f, 0.132319f, 0.056038f, -0.096492f, -0.185668f, -0.110148f, 0.053996f, 0.167665f, 0.195388f, 0.025827f, -0.166236f, -0.232588f, -0.166091f, 0.041634f, 0.101911f, 0.059508f, -0.013331f, -0.098501f, -0.069904f, -0.025396f, -0.001789f, -0.004400f, -0.144278f, -0.143038f, -0.024272f, 0.175344f, 0.253854f, 0.159944f, -0.101035f, -0.280794f, -0.265512f, -0.020116f, 0.276962f, 0.361592f, 0.144039f, -0.172472f, -0.398515f, -0.320982f, -0.050912f, 0.281935f, 0.448140f, 0.242748f, -0.148340f, -0.439433f, -0.362324f, -0.037030f, 0.304097f, 0.420291f, 0.244908f, -0.086568f, -0.339309f, + -0.341381f, -0.113297f, 0.212756f, 0.365130f, 0.285176f, -0.027987f, -0.290757f, -0.359049f, -0.186519f, 0.134808f, 0.357137f, 0.309240f, 0.053867f, -0.237918f, -0.363218f, -0.222627f, 0.018767f, 0.266466f, 0.325402f, 0.169829f, -0.113374f, -0.264223f, -0.246908f, -0.033550f, 0.194119f, 0.284522f, 0.165400f, -0.044492f, -0.108267f, -0.038686f, -0.008172f, 0.001053f} + }, + { + {-0.001314f, -0.003934f, -0.006527f, -0.009075f, -0.011558f, -0.013956f, -0.016248f, -0.018413f, -0.020427f, -0.022268f, -0.023913f, -0.025340f, -0.026526f, -0.027454f, -0.028106f, -0.028470f, -0.028537f, -0.028304f, -0.027773f, -0.026955f, -0.025863f, -0.024520f, -0.022957f, -0.021207f, -0.019313f, -0.017322f, -0.015285f, -0.013255f, -0.011288f, -0.009439f, -0.007763f, -0.006312f, -0.005130f, -0.004258f, -0.003730f, -0.003568f, -0.003786f, -0.004389f, -0.005367f, -0.006704f, -0.008368f, -0.010323f, -0.012518f, -0.014897f, -0.017398f, -0.019954f, -0.022494f, -0.024947f, -0.027245f, -0.029320f, -0.031114f, -0.032572f, -0.033651f, -0.034317f, -0.034547f, -0.034331f, -0.033669f, -0.032576f, -0.031078f, -0.029210f, -0.027019f, -0.024559f, -0.021890f, -0.019077f, -0.016188f, -0.013291f, -0.010451f, -0.007730f, -0.005185f, -0.002865f, -0.000810f, 0.000949f, 0.002393f, 0.003513f, 0.004311f, 0.004798f, 0.004996f, 0.004935f, 0.004654f, 0.004194f, 0.003603f, 0.002930f, 0.002222f, 0.001527f, 0.000888f, 0.000344f, -0.000075f, -0.000343f, -0.000446f, -0.000376f, -0.000134f, 0.000269f, 0.000815f, 0.001479f, 0.002231f, 0.003035f, + 0.003854f, 0.004647f, 0.005377f, 0.006008f, 0.006506f, 0.006844f, 0.007003f, 0.006967f, 0.006731f, 0.006299f, 0.005681f, 0.004897f, 0.003971f, 0.002939f, 0.001836f, 0.000705f, -0.000411f, -0.001468f, -0.002422f, -0.003233f, -0.003867f, -0.004293f, -0.004488f, -0.004438f, -0.004136f, -0.003585f, -0.002797f, -0.001792f, -0.000597f, 0.000752f, 0.002215f, 0.003748f, 0.005303f, 0.006831f, 0.008286f, 0.009623f, 0.010799f, 0.011781f, 0.012539f, 0.013052f, 0.013308f, 0.013303f, 0.013043f, 0.012540f, 0.011816f, 0.010901f, 0.009827f, 0.008635f, 0.007366f, 0.006064f, 0.004771f, 0.003528f, 0.002374f, 0.001341f, 0.000455f, -0.000264f, -0.000804f, -0.001161f, -0.001340f, -0.001352f, -0.001217f, -0.000961f, -0.000614f, -0.000211f, 0.009824f, -0.025392f, 0.003068f, -0.063495f, -0.011179f, -0.003535f, 0.064582f, 0.015421f, 0.011489f, 0.012622f, 0.059145f, 0.090678f, -0.032440f, 0.214585f, 0.315262f, 0.132747f, -0.086018f, -0.176043f, -0.328831f, 0.007037f, 0.076966f, 0.172493f, 0.129820f, -0.050454f, -0.147541f, -0.174998f, -0.016099f, 0.183486f, 0.275400f, 0.164329f, -0.045971f, -0.231470f, + -0.305185f, -0.103015f, 0.318594f, 0.372904f, 0.152126f, -0.142477f, -0.327441f, -0.316692f, 0.056741f, 0.374135f, 0.289437f, 0.066855f, -0.238684f, -0.369182f, -0.260565f, -0.020464f, 0.130344f, 0.303624f, 0.227508f, 0.048235f, -0.170420f, -0.269283f, -0.198985f, -0.018973f, 0.203016f, 0.203783f, 0.217349f, -0.178400f, -0.183073f, -0.198521f, -0.177570f, 0.058283f, 0.262246f, 0.200208f, -0.052373f, -0.253422f, -0.275952f, -0.049932f, 0.207456f, 0.272786f, 0.208903f, 0.013245f, -0.244016f, -0.286750f, -0.113712f, 0.171855f, 0.313119f, 0.124258f, -0.017760f, -0.299172f, -0.315837f, -0.087679f, 0.189029f, 0.279633f, 0.123450f, -0.110997f, -0.296898f, -0.222798f, -0.003069f, 0.147969f, 0.108509f, -0.027695f, -0.095420f, -0.033400f, 0.026412f, 0.041198f, 0.008063f, -0.121817f, -0.101401f, -0.004164f, 0.143735f, 0.201285f, 0.134135f, -0.044895f, -0.179687f, -0.197544f, -0.077941f, 0.143457f, 0.232665f, 0.231540f, 0.078622f, -0.184865f, -0.281909f, -0.103295f, 0.100131f, 0.234276f, 0.179393f, -0.070021f, -0.133067f, -0.231333f, -0.151877f, 0.074031f, 0.170175f, 0.203405f, 0.063023f, -0.089352f, + -0.140655f, -0.063965f, 0.028808f, 0.099140f, 0.075553f, 0.019414f, -0.073169f, -0.082078f, -0.089922f, 0.003511f, 0.104713f, 0.103963f, 0.040688f, -0.034396f, -0.099769f, -0.069072f, -0.044637f, 0.039414f, 0.085266f, 0.084605f, 0.013281f, -0.026480f, -0.039645f, 0.002861f, 0.025499f, 0.053876f, 0.048795f, 0.001223f, -0.029655f, -0.009701f, -0.002193f, 0.000621f}, + {0.001314f, 0.003934f, 0.006527f, 0.009075f, 0.011558f, 0.013956f, 0.016248f, 0.018413f, 0.020427f, 0.022268f, 0.023913f, 0.025340f, 0.026526f, 0.027454f, 0.028106f, 0.028470f, 0.028537f, 0.028304f, 0.027773f, 0.026955f, 0.025863f, 0.024520f, 0.022957f, 0.021207f, 0.019313f, 0.017322f, 0.015285f, 0.013255f, 0.011288f, 0.009439f, 0.007763f, 0.006312f, 0.005130f, 0.004258f, 0.003730f, 0.003568f, 0.003786f, 0.004389f, 0.005367f, 0.006704f, 0.008368f, 0.010323f, 0.012518f, 0.014897f, 0.017398f, 0.019954f, 0.022494f, 0.024947f, 0.027245f, 0.029320f, 0.031114f, 0.032572f, 0.033651f, 0.034317f, 0.034547f, 0.034331f, 0.033669f, 0.032576f, 0.031078f, 0.029210f, 0.027019f, 0.024559f, 0.021890f, 0.019077f, 0.016188f, 0.013291f, 0.010451f, 0.007730f, 0.005185f, 0.002865f, 0.000810f, -0.000949f, -0.002393f, -0.003513f, -0.004311f, -0.004798f, -0.004996f, -0.004935f, -0.004654f, -0.004194f, -0.003603f, -0.002930f, -0.002222f, -0.001527f, -0.000888f, -0.000344f, 0.000075f, 0.000343f, 0.000446f, 0.000376f, 0.000134f, -0.000269f, -0.000815f, -0.001479f, -0.002231f, -0.003035f, + -0.003854f, -0.004647f, -0.005377f, -0.006008f, -0.006506f, -0.006844f, -0.007003f, -0.006967f, -0.006731f, -0.006299f, -0.005681f, -0.004897f, -0.003971f, -0.002939f, -0.001836f, -0.000705f, 0.000411f, 0.001468f, 0.002422f, 0.003233f, 0.003867f, 0.004293f, 0.004488f, 0.004438f, 0.004136f, 0.003585f, 0.002797f, 0.001792f, 0.000597f, -0.000752f, -0.002215f, -0.003748f, -0.005303f, -0.006831f, -0.008286f, -0.009623f, -0.010799f, -0.011781f, -0.012539f, -0.013052f, -0.013308f, -0.013303f, -0.013043f, -0.012540f, -0.011816f, -0.010901f, -0.009827f, -0.008635f, -0.007366f, -0.006064f, -0.004771f, -0.003528f, -0.002374f, -0.001341f, -0.000455f, 0.000264f, 0.000804f, 0.001161f, 0.001340f, 0.001352f, 0.001217f, 0.000961f, 0.000614f, 0.000211f, -0.009824f, 0.025392f, -0.003068f, 0.063495f, 0.011179f, 0.003535f, -0.064582f, -0.015421f, -0.011489f, -0.012622f, -0.059145f, -0.090678f, 0.032440f, -0.214585f, -0.315262f, -0.132747f, 0.086018f, 0.176043f, 0.328831f, -0.007037f, -0.076966f, -0.172493f, -0.129820f, 0.050454f, 0.147541f, 0.174998f, 0.016099f, -0.183486f, -0.275400f, -0.164329f, 0.045971f, 0.231470f, + 0.305185f, 0.103015f, -0.318594f, -0.372904f, -0.152126f, 0.142477f, 0.327441f, 0.316692f, -0.056741f, -0.374135f, -0.289437f, -0.066855f, 0.238684f, 0.369182f, 0.260565f, 0.020464f, -0.130344f, -0.303624f, -0.227508f, -0.048235f, 0.170420f, 0.269283f, 0.198985f, 0.018973f, -0.203016f, -0.203783f, -0.217349f, 0.178400f, 0.183073f, 0.198521f, 0.177570f, -0.058283f, -0.262246f, -0.200208f, 0.052373f, 0.253422f, 0.275952f, 0.049932f, -0.207456f, -0.272786f, -0.208903f, -0.013245f, 0.244016f, 0.286750f, 0.113712f, -0.171855f, -0.313119f, -0.124258f, 0.017760f, 0.299172f, 0.315837f, 0.087679f, -0.189029f, -0.279633f, -0.123450f, 0.110997f, 0.296898f, 0.222798f, 0.003069f, -0.147969f, -0.108509f, 0.027695f, 0.095420f, 0.033400f, -0.026412f, -0.041198f, -0.008063f, 0.121817f, 0.101401f, 0.004164f, -0.143735f, -0.201285f, -0.134135f, 0.044895f, 0.179687f, 0.197544f, 0.077941f, -0.143457f, -0.232665f, -0.231540f, -0.078622f, 0.184865f, 0.281909f, 0.103295f, -0.100131f, -0.234276f, -0.179393f, 0.070021f, 0.133067f, 0.231333f, 0.151877f, -0.074031f, -0.170175f, -0.203405f, -0.063023f, 0.089352f, + 0.140655f, 0.063965f, -0.028808f, -0.099140f, -0.075553f, -0.019414f, 0.073169f, 0.082078f, 0.089922f, -0.003511f, -0.104713f, -0.103963f, -0.040688f, 0.034396f, 0.099769f, 0.069072f, 0.044637f, -0.039414f, -0.085266f, -0.084605f, -0.013281f, 0.026480f, 0.039645f, -0.002861f, -0.025499f, -0.053876f, -0.048795f, -0.001223f, 0.029655f, 0.009701f, 0.002193f, -0.000621f} + }, + { + {-0.000457f, -0.001380f, -0.002330f, -0.003323f, -0.004372f, -0.005487f, -0.006672f, -0.007930f, -0.009253f, -0.010633f, -0.012054f, -0.013496f, -0.014933f, -0.016338f, -0.017681f, -0.018929f, -0.020051f, -0.021016f, -0.021796f, -0.022367f, -0.022709f, -0.022807f, -0.022655f, -0.022253f, -0.021607f, -0.020731f, -0.019647f, -0.018384f, -0.016975f, -0.015458f, -0.013877f, -0.012274f, -0.010695f, -0.009185f, -0.007786f, -0.006535f, -0.005466f, -0.004605f, -0.003973f, -0.003580f, -0.003429f, -0.003517f, -0.003828f, -0.004340f, -0.005026f, -0.005850f, -0.006772f, -0.007748f, -0.008734f, -0.009682f, -0.010549f, -0.011293f, -0.011876f, -0.012268f, -0.012444f, -0.012387f, -0.012090f, -0.011552f, -0.010783f, -0.009802f, -0.008634f, -0.007312f, -0.005875f, -0.004365f, -0.002830f, -0.001317f, 0.000128f, 0.001458f, 0.002632f, 0.003614f, 0.004372f, 0.004886f, 0.005138f, 0.005124f, 0.004845f, 0.004314f, 0.003551f, 0.002581f, 0.001440f, 0.000167f, -0.001196f, -0.002603f, -0.004007f, -0.005363f, -0.006627f, -0.007761f, -0.008730f, -0.009507f, -0.010070f, -0.010408f, -0.010515f, -0.010395f, -0.010059f, -0.009528f, -0.008825f, -0.007983f, + -0.007038f, -0.006026f, -0.004990f, -0.003968f, -0.003000f, -0.002121f, -0.001364f, -0.000755f, -0.000315f, -0.000058f, 0.000009f, -0.000112f, -0.000416f, -0.000886f, -0.001505f, -0.002244f, -0.003076f, -0.003968f, -0.004884f, -0.005791f, -0.006655f, -0.007444f, -0.008130f, -0.008688f, -0.009100f, -0.009352f, -0.009438f, -0.009356f, -0.009111f, -0.008715f, -0.008183f, -0.007536f, -0.006798f, -0.005996f, -0.005158f, -0.004312f, -0.003487f, -0.002708f, -0.001998f, -0.001376f, -0.000858f, -0.000454f, -0.000169f, -0.000004f, 0.000047f, -0.000006f, -0.000151f, -0.000371f, -0.000645f, -0.000953f, -0.001272f, -0.001581f, -0.001860f, -0.002091f, -0.002257f, -0.002346f, -0.002352f, -0.002269f, -0.002099f, -0.001846f, -0.001520f, -0.001132f, -0.000698f, -0.000236f, -0.001082f, -0.007192f, 0.021913f, -0.039500f, -0.011254f, 0.005951f, -0.021905f, -0.091993f, 0.050845f, 0.230618f, 0.217625f, 0.057638f, -0.170004f, 0.264623f, 0.272793f, 0.107389f, -0.097414f, -0.094413f, -0.190690f, 0.040445f, 0.078529f, 0.153019f, 0.116165f, -0.000198f, -0.091181f, -0.012899f, 0.034497f, -0.009199f, 0.022034f, -0.062895f, 0.116104f, 0.113324f, + 0.094084f, -0.017911f, -0.111402f, -0.159862f, -0.075024f, 0.052462f, 0.118694f, 0.118204f, 0.041768f, -0.045757f, -0.039860f, -0.088998f, -0.061848f, -0.001053f, -0.002719f, 0.037087f, -0.047839f, 0.026704f, 0.043210f, 0.000819f, -0.029741f, -0.064514f, -0.061783f, 0.020498f, 0.125645f, 0.158106f, 0.032407f, -0.139003f, -0.178026f, -0.174825f, -0.049323f, 0.125413f, 0.167822f, 0.095223f, -0.064137f, -0.187470f, -0.104867f, 0.076490f, 0.222956f, 0.114431f, -0.089468f, -0.301755f, -0.213346f, 0.032006f, 0.319832f, 0.313302f, 0.106194f, -0.239761f, -0.379586f, -0.301674f, -0.008235f, 0.307527f, 0.363424f, 0.142509f, -0.124602f, -0.338695f, -0.274940f, -0.027364f, 0.227327f, 0.279629f, 0.134176f, -0.048945f, -0.162434f, -0.178272f, -0.036050f, 0.068756f, 0.156869f, 0.101113f, -0.012461f, -0.095345f, -0.104836f, -0.113016f, -0.079800f, 0.011494f, 0.138572f, 0.173046f, 0.103807f, -0.040540f, -0.177760f, -0.172102f, -0.083891f, 0.094557f, 0.150645f, 0.179711f, 0.059456f, -0.115036f, -0.195307f, -0.164640f, 0.022578f, 0.081531f, 0.112551f, 0.091867f, 0.010385f, -0.059832f, -0.108985f, -0.101079f, + -0.043551f, 0.048804f, 0.091602f, 0.082680f, 0.013543f, -0.067321f, -0.119076f, -0.061746f, 0.048065f, 0.069868f, 0.069122f, 0.013037f, -0.019875f, -0.028618f, 0.001104f, 0.028477f, 0.025717f, -0.009408f, -0.032878f, -0.067421f, -0.042545f, 0.018003f, 0.039629f, 0.054995f, 0.040191f, -0.004595f, -0.064461f, -0.041332f, -0.001837f, 0.010840f, 0.002272f, 0.002112f}, + {0.000457f, 0.001380f, 0.002330f, 0.003323f, 0.004372f, 0.005487f, 0.006672f, 0.007930f, 0.009253f, 0.010633f, 0.012054f, 0.013496f, 0.014933f, 0.016338f, 0.017681f, 0.018929f, 0.020051f, 0.021016f, 0.021796f, 0.022367f, 0.022709f, 0.022807f, 0.022655f, 0.022253f, 0.021607f, 0.020731f, 0.019647f, 0.018384f, 0.016975f, 0.015458f, 0.013877f, 0.012274f, 0.010695f, 0.009185f, 0.007786f, 0.006535f, 0.005466f, 0.004605f, 0.003973f, 0.003580f, 0.003429f, 0.003517f, 0.003828f, 0.004340f, 0.005026f, 0.005850f, 0.006772f, 0.007748f, 0.008734f, 0.009682f, 0.010549f, 0.011293f, 0.011876f, 0.012268f, 0.012444f, 0.012387f, 0.012090f, 0.011552f, 0.010783f, 0.009802f, 0.008634f, 0.007312f, 0.005875f, 0.004365f, 0.002830f, 0.001317f, -0.000128f, -0.001458f, -0.002632f, -0.003614f, -0.004372f, -0.004886f, -0.005138f, -0.005124f, -0.004845f, -0.004314f, -0.003551f, -0.002581f, -0.001440f, -0.000167f, 0.001196f, 0.002603f, 0.004007f, 0.005363f, 0.006627f, 0.007761f, 0.008730f, 0.009507f, 0.010070f, 0.010408f, 0.010515f, 0.010395f, 0.010059f, 0.009528f, 0.008825f, 0.007983f, + 0.007038f, 0.006026f, 0.004990f, 0.003968f, 0.003000f, 0.002121f, 0.001364f, 0.000755f, 0.000315f, 0.000058f, -0.000009f, 0.000112f, 0.000416f, 0.000886f, 0.001505f, 0.002244f, 0.003076f, 0.003968f, 0.004884f, 0.005791f, 0.006655f, 0.007444f, 0.008130f, 0.008688f, 0.009100f, 0.009352f, 0.009438f, 0.009356f, 0.009111f, 0.008715f, 0.008183f, 0.007536f, 0.006798f, 0.005996f, 0.005158f, 0.004312f, 0.003487f, 0.002708f, 0.001998f, 0.001376f, 0.000858f, 0.000454f, 0.000169f, 0.000004f, -0.000047f, 0.000006f, 0.000151f, 0.000371f, 0.000645f, 0.000953f, 0.001272f, 0.001581f, 0.001860f, 0.002091f, 0.002257f, 0.002346f, 0.002352f, 0.002269f, 0.002099f, 0.001846f, 0.001520f, 0.001132f, 0.000698f, 0.000236f, 0.001082f, 0.007192f, -0.021913f, 0.039500f, 0.011254f, -0.005951f, 0.021905f, 0.091993f, -0.050845f, -0.230618f, -0.217625f, -0.057638f, 0.170004f, -0.264623f, -0.272793f, -0.107389f, 0.097414f, 0.094413f, 0.190690f, -0.040445f, -0.078529f, -0.153019f, -0.116165f, 0.000198f, 0.091181f, 0.012899f, -0.034497f, 0.009199f, -0.022034f, 0.062895f, -0.116104f, -0.113324f, + -0.094084f, 0.017911f, 0.111402f, 0.159862f, 0.075024f, -0.052462f, -0.118694f, -0.118204f, -0.041768f, 0.045757f, 0.039860f, 0.088998f, 0.061848f, 0.001053f, 0.002719f, -0.037087f, 0.047839f, -0.026704f, -0.043210f, -0.000819f, 0.029741f, 0.064514f, 0.061783f, -0.020498f, -0.125645f, -0.158106f, -0.032407f, 0.139003f, 0.178026f, 0.174825f, 0.049323f, -0.125413f, -0.167822f, -0.095223f, 0.064137f, 0.187470f, 0.104867f, -0.076490f, -0.222956f, -0.114431f, 0.089468f, 0.301755f, 0.213346f, -0.032006f, -0.319832f, -0.313302f, -0.106194f, 0.239761f, 0.379586f, 0.301674f, 0.008235f, -0.307527f, -0.363424f, -0.142509f, 0.124602f, 0.338695f, 0.274940f, 0.027364f, -0.227327f, -0.279629f, -0.134176f, 0.048945f, 0.162434f, 0.178272f, 0.036050f, -0.068756f, -0.156869f, -0.101113f, 0.012461f, 0.095345f, 0.104836f, 0.113016f, 0.079800f, -0.011494f, -0.138572f, -0.173046f, -0.103807f, 0.040540f, 0.177760f, 0.172102f, 0.083891f, -0.094557f, -0.150645f, -0.179711f, -0.059456f, 0.115036f, 0.195307f, 0.164640f, -0.022578f, -0.081531f, -0.112551f, -0.091867f, -0.010385f, 0.059832f, 0.108985f, 0.101079f, + 0.043551f, -0.048804f, -0.091602f, -0.082680f, -0.013543f, 0.067321f, 0.119076f, 0.061746f, -0.048065f, -0.069868f, -0.069122f, -0.013037f, 0.019875f, 0.028618f, -0.001104f, -0.028477f, -0.025717f, 0.009408f, 0.032878f, 0.067421f, 0.042545f, -0.018003f, -0.039629f, -0.054995f, -0.040191f, 0.004595f, 0.064461f, 0.041332f, 0.001837f, -0.010840f, -0.002272f, -0.002112f} + }, + { + {0.000405f, 0.001169f, 0.001801f, 0.002218f, 0.002349f, 0.002132f, 0.001524f, 0.000495f, -0.000962f, -0.002837f, -0.005100f, -0.007704f, -0.010583f, -0.013657f, -0.016836f, -0.020020f, -0.023105f, -0.025989f, -0.028570f, -0.030756f, -0.032466f, -0.033633f, -0.034209f, -0.034166f, -0.033496f, -0.032215f, -0.030359f, -0.027987f, -0.025177f, -0.022024f, -0.018637f, -0.015135f, -0.011644f, -0.008292f, -0.005203f, -0.002496f, -0.000277f, 0.001362f, 0.002349f, 0.002630f, 0.002178f, 0.000989f, -0.000917f, -0.003494f, -0.006672f, -0.010363f, -0.014459f, -0.018836f, -0.023361f, -0.027895f, -0.032296f, -0.036426f, -0.040154f, -0.043362f, -0.045945f, -0.047820f, -0.048926f, -0.049223f, -0.048698f, -0.047363f, -0.045255f, -0.042434f, -0.038981f, -0.034994f, -0.030589f, -0.025889f, -0.021028f, -0.016138f, -0.011351f, -0.006794f, -0.002581f, 0.001187f, 0.004427f, 0.007072f, 0.009081f, 0.010432f, 0.011126f, 0.011185f, 0.010652f, 0.009589f, 0.008072f, 0.006189f, 0.004040f, 0.001728f, -0.000642f, -0.002969f, -0.005154f, -0.007111f, -0.008763f, -0.010050f, -0.010927f, -0.011366f, -0.011356f, -0.010906f, -0.010040f, -0.008798f, + -0.007232f, -0.005406f, -0.003393f, -0.001270f, 0.000884f, 0.002991f, 0.004977f, 0.006773f, 0.008322f, 0.009576f, 0.010501f, 0.011075f, 0.011292f, 0.011158f, 0.010694f, 0.009932f, 0.008913f, 0.007690f, 0.006319f, 0.004861f, 0.003379f, 0.001932f, 0.000579f, -0.000630f, -0.001651f, -0.002450f, -0.003003f, -0.003297f, -0.003332f, -0.003115f, -0.002668f, -0.002019f, -0.001204f, -0.000266f, 0.000749f, 0.001793f, 0.002817f, 0.003776f, 0.004628f, 0.005337f, 0.005874f, 0.006220f, 0.006362f, 0.006300f, 0.006038f, 0.005594f, 0.004990f, 0.004255f, 0.003425f, 0.002538f, 0.001633f, 0.000750f, -0.000074f, -0.000806f, -0.001416f, -0.001882f, -0.002190f, -0.002332f, -0.002309f, -0.002132f, -0.001816f, -0.001384f, -0.000866f, -0.000295f, 0.001541f, -0.005469f, 0.091550f, 0.026897f, -0.110318f, -0.073062f, -0.046913f, -0.061069f, 0.019816f, 0.178869f, 0.180961f, 0.052028f, -0.078827f, 0.202343f, 0.182619f, 0.086795f, 0.204182f, 0.200105f, 0.111146f, -0.099247f, -0.003951f, 0.037305f, 0.006350f, 0.130261f, 0.198333f, 0.305704f, 0.137971f, -0.169170f, -0.168028f, -0.202794f, -0.028688f, 0.059029f, + 0.277175f, 0.353746f, -0.072412f, -0.351677f, -0.378052f, -0.122537f, 0.080151f, 0.468403f, 0.159017f, -0.071636f, -0.114519f, -0.218293f, -0.030837f, 0.193529f, 0.235419f, -0.074620f, -0.515807f, -0.464965f, -0.047342f, 0.323149f, 0.558774f, 0.307225f, -0.067114f, -0.469849f, -0.435609f, -0.253862f, 0.244754f, 0.043703f, 0.250335f, 0.056211f, -0.265231f, -0.253281f, 0.108080f, -0.098926f, -0.316563f, -0.154288f, 0.049659f, 0.266377f, 0.232891f, 0.153029f, 0.012859f, -0.017317f, -0.179558f, -0.104856f, -0.136314f, 0.000697f, 0.164413f, 0.201981f, 0.029839f, -0.144306f, -0.195132f, 0.118239f, 0.339500f, 0.353795f, -0.027643f, -0.389921f, -0.511417f, -0.197752f, 0.270887f, 0.631279f, 0.424246f, -0.058956f, -0.485919f, -0.476863f, -0.264843f, 0.177069f, 0.408998f, 0.218609f, 0.009780f, -0.226727f, -0.236332f, -0.102657f, 0.151492f, 0.292652f, 0.230052f, -0.031832f, -0.256067f, -0.323093f, -0.162039f, 0.056385f, 0.246837f, 0.293356f, 0.226747f, -0.082319f, -0.333768f, -0.350618f, -0.119567f, 0.270876f, 0.419031f, 0.257070f, 0.014739f, -0.328034f, -0.409808f, -0.211830f, 0.141731f, 0.364473f, + 0.378449f, 0.126836f, -0.236256f, -0.455961f, -0.343232f, 0.004634f, 0.343774f, 0.478417f, 0.265800f, -0.125937f, -0.473577f, -0.426358f, -0.095738f, 0.308788f, 0.483920f, 0.336634f, -0.054008f, -0.411204f, -0.470853f, -0.174093f, 0.220369f, 0.459898f, 0.338166f, 0.012781f, -0.330932f, -0.351817f, -0.123505f, 0.133013f, 0.122591f, 0.039645f, -0.001385f, 0.002204f}, + {0.000405f, 0.001169f, 0.001801f, 0.002218f, 0.002349f, 0.002132f, 0.001524f, 0.000495f, -0.000962f, -0.002837f, -0.005100f, -0.007704f, -0.010583f, -0.013657f, -0.016836f, -0.020020f, -0.023105f, -0.025989f, -0.028570f, -0.030756f, -0.032466f, -0.033633f, -0.034209f, -0.034166f, -0.033496f, -0.032215f, -0.030359f, -0.027987f, -0.025177f, -0.022024f, -0.018637f, -0.015135f, -0.011644f, -0.008292f, -0.005203f, -0.002496f, -0.000277f, 0.001362f, 0.002349f, 0.002630f, 0.002178f, 0.000989f, -0.000917f, -0.003494f, -0.006672f, -0.010363f, -0.014459f, -0.018836f, -0.023361f, -0.027895f, -0.032296f, -0.036426f, -0.040154f, -0.043362f, -0.045945f, -0.047820f, -0.048926f, -0.049223f, -0.048698f, -0.047363f, -0.045255f, -0.042434f, -0.038981f, -0.034994f, -0.030589f, -0.025889f, -0.021028f, -0.016138f, -0.011351f, -0.006794f, -0.002581f, 0.001187f, 0.004427f, 0.007072f, 0.009081f, 0.010432f, 0.011126f, 0.011185f, 0.010652f, 0.009589f, 0.008072f, 0.006189f, 0.004040f, 0.001728f, -0.000642f, -0.002969f, -0.005154f, -0.007111f, -0.008763f, -0.010050f, -0.010927f, -0.011366f, -0.011356f, -0.010906f, -0.010040f, -0.008798f, + -0.007232f, -0.005406f, -0.003393f, -0.001270f, 0.000884f, 0.002991f, 0.004977f, 0.006773f, 0.008322f, 0.009576f, 0.010501f, 0.011075f, 0.011292f, 0.011158f, 0.010694f, 0.009932f, 0.008913f, 0.007690f, 0.006319f, 0.004861f, 0.003379f, 0.001932f, 0.000579f, -0.000630f, -0.001651f, -0.002450f, -0.003003f, -0.003297f, -0.003332f, -0.003115f, -0.002668f, -0.002019f, -0.001204f, -0.000266f, 0.000749f, 0.001793f, 0.002817f, 0.003776f, 0.004628f, 0.005337f, 0.005874f, 0.006220f, 0.006362f, 0.006300f, 0.006038f, 0.005594f, 0.004990f, 0.004255f, 0.003425f, 0.002538f, 0.001633f, 0.000750f, -0.000074f, -0.000806f, -0.001416f, -0.001882f, -0.002190f, -0.002332f, -0.002309f, -0.002132f, -0.001816f, -0.001384f, -0.000866f, -0.000295f, 0.001541f, -0.005469f, 0.091550f, 0.026897f, -0.110318f, -0.073062f, -0.046913f, -0.061069f, 0.019816f, 0.178869f, 0.180961f, 0.052028f, -0.078827f, 0.202343f, 0.182619f, 0.086795f, 0.204182f, 0.200105f, 0.111146f, -0.099247f, -0.003951f, 0.037305f, 0.006350f, 0.130261f, 0.198333f, 0.305704f, 0.137971f, -0.169170f, -0.168028f, -0.202794f, -0.028688f, 0.059029f, + 0.277175f, 0.353746f, -0.072412f, -0.351677f, -0.378052f, -0.122537f, 0.080151f, 0.468403f, 0.159017f, -0.071636f, -0.114519f, -0.218293f, -0.030837f, 0.193529f, 0.235419f, -0.074620f, -0.515807f, -0.464965f, -0.047342f, 0.323149f, 0.558774f, 0.307225f, -0.067114f, -0.469849f, -0.435609f, -0.253862f, 0.244754f, 0.043703f, 0.250335f, 0.056211f, -0.265231f, -0.253281f, 0.108080f, -0.098926f, -0.316563f, -0.154288f, 0.049659f, 0.266377f, 0.232891f, 0.153029f, 0.012859f, -0.017317f, -0.179558f, -0.104856f, -0.136314f, 0.000697f, 0.164413f, 0.201981f, 0.029839f, -0.144306f, -0.195132f, 0.118239f, 0.339500f, 0.353795f, -0.027643f, -0.389921f, -0.511417f, -0.197752f, 0.270887f, 0.631279f, 0.424246f, -0.058956f, -0.485919f, -0.476863f, -0.264843f, 0.177069f, 0.408998f, 0.218609f, 0.009780f, -0.226727f, -0.236332f, -0.102657f, 0.151492f, 0.292652f, 0.230052f, -0.031832f, -0.256067f, -0.323093f, -0.162039f, 0.056385f, 0.246837f, 0.293356f, 0.226747f, -0.082319f, -0.333768f, -0.350618f, -0.119567f, 0.270876f, 0.419031f, 0.257070f, 0.014739f, -0.328034f, -0.409808f, -0.211830f, 0.141731f, 0.364473f, + 0.378449f, 0.126836f, -0.236256f, -0.455961f, -0.343232f, 0.004634f, 0.343774f, 0.478417f, 0.265800f, -0.125937f, -0.473577f, -0.426358f, -0.095738f, 0.308788f, 0.483920f, 0.336634f, -0.054008f, -0.411204f, -0.470853f, -0.174093f, 0.220369f, 0.459898f, 0.338166f, 0.012781f, -0.330932f, -0.351817f, -0.123505f, 0.133013f, 0.122591f, 0.039645f, -0.001385f, 0.002204f} + }, + { + {-0.002461f, -0.007319f, -0.011989f, -0.016353f, -0.020303f, -0.023742f, -0.026593f, -0.028795f, -0.030308f, -0.031115f, -0.031221f, -0.030650f, -0.029449f, -0.027683f, -0.025434f, -0.022796f, -0.019873f, -0.016777f, -0.013619f, -0.010512f, -0.007560f, -0.004861f, -0.002499f, -0.000544f, 0.000952f, 0.001954f, 0.002451f, 0.002445f, 0.001964f, 0.001049f, -0.000241f, -0.001833f, -0.003643f, -0.005580f, -0.007550f, -0.009456f, -0.011206f, -0.012715f, -0.013904f, -0.014711f, -0.015087f, -0.014997f, -0.014427f, -0.013380f, -0.011877f, -0.009954f, -0.007667f, -0.005081f, -0.002276f, 0.000663f, 0.003642f, 0.006568f, 0.009347f, 0.011892f, 0.014121f, 0.015964f, 0.017363f, 0.018274f, 0.018670f, 0.018540f, 0.017888f, 0.016738f, 0.015126f, 0.013104f, 0.010735f, 0.008091f, 0.005250f, 0.002298f, -0.000683f, -0.003610f, -0.006404f, -0.008995f, -0.011322f, -0.013335f, -0.014995f, -0.016280f, -0.017178f, -0.017693f, -0.017841f, -0.017653f, -0.017165f, -0.016427f, -0.015491f, -0.014417f, -0.013264f, -0.012092f, -0.010957f, -0.009910f, -0.008995f, -0.008247f, -0.007694f, -0.007349f, -0.007219f, -0.007296f, -0.007564f, -0.007999f, + -0.008567f, -0.009229f, -0.009941f, -0.010657f, -0.011330f, -0.011914f, -0.012370f, -0.012659f, -0.012754f, -0.012631f, -0.012279f, -0.011694f, -0.010882f, -0.009860f, -0.008651f, -0.007287f, -0.005807f, -0.004253f, -0.002672f, -0.001112f, 0.000380f, 0.001759f, 0.002984f, 0.004018f, 0.004833f, 0.005408f, 0.005731f, 0.005796f, 0.005610f, 0.005186f, 0.004544f, 0.003715f, 0.002732f, 0.001634f, 0.000462f, -0.000742f, -0.001933f, -0.003073f, -0.004125f, -0.005055f, -0.005838f, -0.006454f, -0.006889f, -0.007139f, -0.007205f, -0.007096f, -0.006827f, -0.006419f, -0.005896f, -0.005285f, -0.004616f, -0.003919f, -0.003222f, -0.002553f, -0.001934f, -0.001383f, -0.000915f, -0.000539f, -0.000256f, -0.000064f, 0.000046f, 0.000086f, 0.000073f, 0.000028f, -0.016524f, -0.064320f, 0.077125f, 0.022151f, -0.042129f, -0.194424f, -0.123531f, 0.149430f, 0.026902f, 0.251006f, 0.331756f, 0.287429f, 0.021249f, 0.026054f, 0.022955f, 0.079017f, -0.015064f, -0.039510f, 0.084197f, -0.023785f, 0.017416f, -0.010733f, -0.008857f, -0.003921f, 0.000185f, -0.023770f, 0.016679f, 0.010856f, -0.032920f, -0.034982f, 0.032712f, 0.057460f, + 0.052476f, 0.002469f, 0.053407f, 0.076847f, 0.121729f, -0.017425f, -0.106622f, -0.096335f, 0.047938f, 0.260077f, 0.080512f, -0.003540f, -0.209238f, -0.237182f, -0.102591f, 0.103280f, 0.217333f, 0.243771f, 0.064586f, -0.096557f, -0.245267f, -0.139221f, -0.000900f, 0.196301f, 0.212360f, 0.180491f, -0.067653f, 0.001517f, -0.181052f, -0.099956f, 0.146406f, 0.241327f, 0.046377f, 0.219953f, 0.279241f, -0.035949f, -0.276223f, -0.440805f, -0.180922f, 0.136448f, 0.348502f, 0.113900f, -0.087721f, -0.348109f, -0.214514f, -0.059360f, 0.156355f, 0.377743f, 0.259491f, -0.013428f, -0.259813f, -0.302835f, -0.130048f, 0.142268f, 0.225902f, 0.085727f, -0.109242f, -0.194494f, -0.099661f, 0.065807f, 0.175235f, 0.089653f, -0.044902f, -0.092312f, -0.081433f, 0.051319f, 0.210985f, 0.222219f, 0.063654f, -0.251653f, -0.396830f, -0.252488f, 0.150761f, 0.419968f, 0.455384f, 0.126597f, -0.260984f, -0.571256f, -0.522732f, -0.063682f, 0.447615f, 0.534938f, 0.190059f, -0.304205f, -0.428620f, -0.209841f, 0.151149f, 0.419089f, 0.239321f, 0.067103f, -0.187080f, -0.256172f, -0.084144f, 0.044483f, 0.185793f, 0.115053f, + -0.016819f, -0.114767f, -0.091989f, -0.035395f, 0.089159f, 0.105183f, 0.047119f, -0.073873f, -0.099207f, -0.072923f, 0.047801f, 0.100466f, 0.096086f, 0.001693f, -0.088988f, -0.152437f, -0.055419f, 0.061478f, 0.163163f, 0.129363f, 0.035064f, -0.122817f, -0.206598f, -0.150847f, 0.000562f, 0.117664f, 0.176597f, 0.075677f, -0.015394f, -0.030687f, -0.004427f, -0.004042f}, + {-0.002461f, -0.007319f, -0.011989f, -0.016353f, -0.020303f, -0.023742f, -0.026593f, -0.028795f, -0.030308f, -0.031115f, -0.031221f, -0.030650f, -0.029449f, -0.027683f, -0.025434f, -0.022796f, -0.019873f, -0.016777f, -0.013619f, -0.010512f, -0.007560f, -0.004861f, -0.002499f, -0.000544f, 0.000952f, 0.001954f, 0.002451f, 0.002445f, 0.001964f, 0.001049f, -0.000241f, -0.001833f, -0.003643f, -0.005580f, -0.007550f, -0.009456f, -0.011206f, -0.012715f, -0.013904f, -0.014711f, -0.015087f, -0.014997f, -0.014427f, -0.013380f, -0.011877f, -0.009954f, -0.007667f, -0.005081f, -0.002276f, 0.000663f, 0.003642f, 0.006568f, 0.009347f, 0.011892f, 0.014121f, 0.015964f, 0.017363f, 0.018274f, 0.018670f, 0.018540f, 0.017888f, 0.016738f, 0.015126f, 0.013104f, 0.010735f, 0.008091f, 0.005250f, 0.002298f, -0.000683f, -0.003610f, -0.006404f, -0.008995f, -0.011322f, -0.013335f, -0.014995f, -0.016280f, -0.017178f, -0.017693f, -0.017841f, -0.017653f, -0.017165f, -0.016427f, -0.015491f, -0.014417f, -0.013264f, -0.012092f, -0.010957f, -0.009910f, -0.008995f, -0.008247f, -0.007694f, -0.007349f, -0.007219f, -0.007296f, -0.007564f, -0.007999f, + -0.008567f, -0.009229f, -0.009941f, -0.010657f, -0.011330f, -0.011914f, -0.012370f, -0.012659f, -0.012754f, -0.012631f, -0.012279f, -0.011694f, -0.010882f, -0.009860f, -0.008651f, -0.007287f, -0.005807f, -0.004253f, -0.002672f, -0.001112f, 0.000380f, 0.001759f, 0.002984f, 0.004018f, 0.004833f, 0.005408f, 0.005731f, 0.005796f, 0.005610f, 0.005186f, 0.004544f, 0.003715f, 0.002732f, 0.001634f, 0.000462f, -0.000742f, -0.001933f, -0.003073f, -0.004125f, -0.005055f, -0.005838f, -0.006454f, -0.006889f, -0.007139f, -0.007205f, -0.007096f, -0.006827f, -0.006419f, -0.005896f, -0.005285f, -0.004616f, -0.003919f, -0.003222f, -0.002553f, -0.001934f, -0.001383f, -0.000915f, -0.000539f, -0.000256f, -0.000064f, 0.000046f, 0.000086f, 0.000073f, 0.000028f, -0.016524f, -0.064320f, 0.077125f, 0.022151f, -0.042129f, -0.194424f, -0.123531f, 0.149430f, 0.026902f, 0.251006f, 0.331756f, 0.287429f, 0.021249f, 0.026054f, 0.022955f, 0.079017f, -0.015064f, -0.039510f, 0.084197f, -0.023785f, 0.017416f, -0.010733f, -0.008857f, -0.003921f, 0.000185f, -0.023770f, 0.016679f, 0.010856f, -0.032920f, -0.034982f, 0.032712f, 0.057460f, + 0.052476f, 0.002469f, 0.053407f, 0.076847f, 0.121729f, -0.017425f, -0.106622f, -0.096335f, 0.047938f, 0.260077f, 0.080512f, -0.003540f, -0.209238f, -0.237182f, -0.102591f, 0.103280f, 0.217333f, 0.243771f, 0.064586f, -0.096557f, -0.245267f, -0.139221f, -0.000900f, 0.196301f, 0.212360f, 0.180491f, -0.067653f, 0.001517f, -0.181052f, -0.099956f, 0.146406f, 0.241327f, 0.046377f, 0.219953f, 0.279241f, -0.035949f, -0.276223f, -0.440805f, -0.180922f, 0.136448f, 0.348502f, 0.113900f, -0.087721f, -0.348109f, -0.214514f, -0.059360f, 0.156355f, 0.377743f, 0.259491f, -0.013428f, -0.259813f, -0.302835f, -0.130048f, 0.142268f, 0.225902f, 0.085727f, -0.109242f, -0.194494f, -0.099661f, 0.065807f, 0.175235f, 0.089653f, -0.044902f, -0.092312f, -0.081433f, 0.051319f, 0.210985f, 0.222219f, 0.063654f, -0.251653f, -0.396830f, -0.252488f, 0.150761f, 0.419968f, 0.455384f, 0.126597f, -0.260984f, -0.571256f, -0.522732f, -0.063682f, 0.447615f, 0.534938f, 0.190059f, -0.304205f, -0.428620f, -0.209841f, 0.151149f, 0.419089f, 0.239321f, 0.067103f, -0.187080f, -0.256172f, -0.084144f, 0.044483f, 0.185793f, 0.115053f, + -0.016819f, -0.114767f, -0.091989f, -0.035395f, 0.089159f, 0.105183f, 0.047119f, -0.073873f, -0.099207f, -0.072923f, 0.047801f, 0.100466f, 0.096086f, 0.001693f, -0.088988f, -0.152437f, -0.055419f, 0.061478f, 0.163163f, 0.129363f, 0.035064f, -0.122817f, -0.206598f, -0.150847f, 0.000562f, 0.117664f, 0.176597f, 0.075677f, -0.015394f, -0.030687f, -0.004427f, -0.004042f} + }, + { + {-0.001660f, -0.004932f, -0.008064f, -0.010965f, -0.013553f, -0.015751f, -0.017496f, -0.018735f, -0.019429f, -0.019553f, -0.019099f, -0.018072f, -0.016493f, -0.014399f, -0.011839f, -0.008873f, -0.005574f, -0.002021f, 0.001698f, 0.005493f, 0.009271f, 0.012942f, 0.016417f, 0.019613f, 0.022455f, 0.024877f, 0.026823f, 0.028252f, 0.029132f, 0.029448f, 0.029198f, 0.028393f, 0.027058f, 0.025229f, 0.022955f, 0.020291f, 0.017305f, 0.014067f, 0.010652f, 0.007138f, 0.003602f, 0.000120f, -0.003235f, -0.006399f, -0.009311f, -0.011921f, -0.014186f, -0.016075f, -0.017566f, -0.018649f, -0.019323f, -0.019597f, -0.019490f, -0.019031f, -0.018252f, -0.017195f, -0.015906f, -0.014432f, -0.012824f, -0.011134f, -0.009410f, -0.007702f, -0.006052f, -0.004502f, -0.003085f, -0.001832f, -0.000764f, 0.000103f, 0.000757f, 0.001197f, 0.001424f, 0.001446f, 0.001276f, 0.000931f, 0.000432f, -0.000200f, -0.000939f, -0.001761f, -0.002641f, -0.003554f, -0.004478f, -0.005392f, -0.006279f, -0.007122f, -0.007909f, -0.008632f, -0.009284f, -0.009861f, -0.010364f, -0.010794f, -0.011155f, -0.011452f, -0.011692f, -0.011882f, -0.012029f, -0.012139f, + -0.012220f, -0.012275f, -0.012311f, -0.012328f, -0.012329f, -0.012313f, -0.012278f, -0.012222f, -0.012140f, -0.012027f, -0.011879f, -0.011688f, -0.011451f, -0.011162f, -0.010818f, -0.010415f, -0.009952f, -0.009431f, -0.008851f, -0.008219f, -0.007540f, -0.006822f, -0.006075f, -0.005309f, -0.004538f, -0.003774f, -0.003033f, -0.002327f, -0.001671f, -0.001078f, -0.000561f, -0.000131f, 0.000205f, 0.000438f, 0.000564f, 0.000582f, 0.000493f, 0.000300f, 0.000009f, -0.000370f, -0.000827f, -0.001347f, -0.001915f, -0.002514f, -0.003127f, -0.003734f, -0.004318f, -0.004859f, -0.005342f, -0.005749f, -0.006067f, -0.006284f, -0.006390f, -0.006379f, -0.006246f, -0.005992f, -0.005619f, -0.005131f, -0.004538f, -0.003851f, -0.003083f, -0.002250f, -0.001370f, -0.000460f, 0.051673f, -0.017632f, -0.014793f, -0.006854f, 0.085155f, 0.029825f, 0.126550f, 0.077456f, 0.061534f, -0.207009f, -0.266257f, -0.146498f, 0.048723f, 0.221641f, 0.277191f, 0.058431f, -0.164615f, -0.206701f, -0.156974f, -0.020143f, 0.022758f, 0.008961f, -0.074555f, -0.003925f, 0.011839f, 0.046237f, 0.084746f, 0.034886f, -0.041420f, -0.135279f, -0.246819f, -0.068468f, + 0.062692f, 0.214884f, 0.182407f, 0.017704f, -0.224559f, -0.242317f, -0.153848f, 0.140584f, 0.085332f, 0.013707f, 0.004997f, -0.030712f, -0.048221f, -0.054054f, 0.043237f, 0.077808f, -0.122313f, -0.094422f, -0.020880f, 0.048625f, 0.099290f, 0.131977f, 0.049706f, -0.051476f, -0.107499f, -0.102515f, -0.027222f, 0.017018f, 0.122150f, 0.099096f, -0.012255f, -0.136944f, -0.168388f, -0.174519f, -0.066589f, 0.137016f, 0.301572f, 0.218780f, 0.064888f, -0.129614f, -0.295622f, -0.371987f, -0.175825f, 0.125281f, 0.321318f, 0.280973f, 0.080136f, -0.181841f, -0.337455f, -0.254867f, -0.075576f, 0.186279f, 0.230182f, 0.034312f, -0.136787f, -0.116980f, -0.015761f, 0.103139f, 0.148813f, 0.091199f, 0.023468f, -0.071270f, -0.111474f, -0.117202f, 0.010661f, 0.107073f, 0.099952f, 0.070676f, -0.064059f, -0.141154f, -0.120669f, -0.020003f, 0.117424f, 0.156810f, 0.060135f, -0.155403f, -0.200692f, -0.053828f, 0.108676f, 0.190613f, 0.124853f, -0.081226f, -0.251418f, -0.317618f, -0.060039f, 0.292421f, 0.371096f, 0.175763f, -0.113281f, -0.302853f, -0.187668f, -0.016911f, 0.224405f, 0.244635f, 0.102496f, -0.073172f, + -0.204158f, -0.199586f, -0.041058f, 0.109714f, 0.223389f, 0.139773f, -0.050482f, -0.212584f, -0.246282f, -0.078238f, 0.143784f, 0.231603f, 0.169289f, 0.027874f, -0.146913f, -0.217525f, -0.151836f, 0.040485f, 0.179321f, 0.136528f, -0.009910f, -0.075759f, -0.145118f, -0.039104f, 0.051169f, 0.093606f, 0.021532f, -0.001614f, -0.016184f, 0.004221f, -0.007703f, 0.007556f}, + {-0.001660f, -0.004932f, -0.008064f, -0.010965f, -0.013553f, -0.015751f, -0.017496f, -0.018735f, -0.019429f, -0.019553f, -0.019099f, -0.018072f, -0.016493f, -0.014399f, -0.011839f, -0.008873f, -0.005574f, -0.002021f, 0.001698f, 0.005493f, 0.009271f, 0.012942f, 0.016417f, 0.019613f, 0.022455f, 0.024877f, 0.026823f, 0.028252f, 0.029132f, 0.029448f, 0.029198f, 0.028393f, 0.027058f, 0.025229f, 0.022955f, 0.020291f, 0.017305f, 0.014067f, 0.010652f, 0.007138f, 0.003602f, 0.000120f, -0.003235f, -0.006399f, -0.009311f, -0.011921f, -0.014186f, -0.016075f, -0.017566f, -0.018649f, -0.019323f, -0.019597f, -0.019490f, -0.019031f, -0.018252f, -0.017195f, -0.015906f, -0.014432f, -0.012824f, -0.011134f, -0.009410f, -0.007702f, -0.006052f, -0.004502f, -0.003085f, -0.001832f, -0.000764f, 0.000103f, 0.000757f, 0.001197f, 0.001424f, 0.001446f, 0.001276f, 0.000931f, 0.000432f, -0.000200f, -0.000939f, -0.001761f, -0.002641f, -0.003554f, -0.004478f, -0.005392f, -0.006279f, -0.007122f, -0.007909f, -0.008632f, -0.009284f, -0.009861f, -0.010364f, -0.010794f, -0.011155f, -0.011452f, -0.011692f, -0.011882f, -0.012029f, -0.012139f, + -0.012220f, -0.012275f, -0.012311f, -0.012328f, -0.012329f, -0.012313f, -0.012278f, -0.012222f, -0.012140f, -0.012027f, -0.011879f, -0.011688f, -0.011451f, -0.011162f, -0.010818f, -0.010415f, -0.009952f, -0.009431f, -0.008851f, -0.008219f, -0.007540f, -0.006822f, -0.006075f, -0.005309f, -0.004538f, -0.003774f, -0.003033f, -0.002327f, -0.001671f, -0.001078f, -0.000561f, -0.000131f, 0.000205f, 0.000438f, 0.000564f, 0.000582f, 0.000493f, 0.000300f, 0.000009f, -0.000370f, -0.000827f, -0.001347f, -0.001915f, -0.002514f, -0.003127f, -0.003734f, -0.004318f, -0.004859f, -0.005342f, -0.005749f, -0.006067f, -0.006284f, -0.006390f, -0.006379f, -0.006246f, -0.005992f, -0.005619f, -0.005131f, -0.004538f, -0.003851f, -0.003083f, -0.002250f, -0.001370f, -0.000460f, 0.051673f, -0.017632f, -0.014793f, -0.006854f, 0.085155f, 0.029825f, 0.126550f, 0.077456f, 0.061534f, -0.207009f, -0.266257f, -0.146498f, 0.048723f, 0.221641f, 0.277191f, 0.058431f, -0.164615f, -0.206701f, -0.156974f, -0.020143f, 0.022758f, 0.008961f, -0.074555f, -0.003925f, 0.011839f, 0.046237f, 0.084746f, 0.034886f, -0.041420f, -0.135279f, -0.246819f, -0.068468f, + 0.062692f, 0.214884f, 0.182407f, 0.017704f, -0.224559f, -0.242317f, -0.153848f, 0.140584f, 0.085332f, 0.013707f, 0.004997f, -0.030712f, -0.048221f, -0.054054f, 0.043237f, 0.077808f, -0.122313f, -0.094422f, -0.020880f, 0.048625f, 0.099290f, 0.131977f, 0.049706f, -0.051476f, -0.107499f, -0.102515f, -0.027222f, 0.017018f, 0.122150f, 0.099096f, -0.012255f, -0.136944f, -0.168388f, -0.174519f, -0.066589f, 0.137016f, 0.301572f, 0.218780f, 0.064888f, -0.129614f, -0.295622f, -0.371987f, -0.175825f, 0.125281f, 0.321318f, 0.280973f, 0.080136f, -0.181841f, -0.337455f, -0.254867f, -0.075576f, 0.186279f, 0.230182f, 0.034312f, -0.136787f, -0.116980f, -0.015761f, 0.103139f, 0.148813f, 0.091199f, 0.023468f, -0.071270f, -0.111474f, -0.117202f, 0.010661f, 0.107073f, 0.099952f, 0.070676f, -0.064059f, -0.141154f, -0.120669f, -0.020003f, 0.117424f, 0.156810f, 0.060135f, -0.155403f, -0.200692f, -0.053828f, 0.108676f, 0.190613f, 0.124853f, -0.081226f, -0.251418f, -0.317618f, -0.060039f, 0.292421f, 0.371096f, 0.175763f, -0.113281f, -0.302853f, -0.187668f, -0.016911f, 0.224405f, 0.244635f, 0.102496f, -0.073172f, + -0.204158f, -0.199586f, -0.041058f, 0.109714f, 0.223389f, 0.139773f, -0.050482f, -0.212584f, -0.246282f, -0.078238f, 0.143784f, 0.231603f, 0.169289f, 0.027874f, -0.146913f, -0.217525f, -0.151836f, 0.040485f, 0.179321f, 0.136528f, -0.009910f, -0.075759f, -0.145118f, -0.039104f, 0.051169f, 0.093606f, 0.021532f, -0.001614f, -0.016184f, 0.004221f, -0.007703f, 0.007556f} + }, + { + {-0.000640f, -0.001906f, -0.003129f, -0.004283f, -0.005343f, -0.006287f, -0.007094f, -0.007750f, -0.008242f, -0.008562f, -0.008709f, -0.008684f, -0.008492f, -0.008146f, -0.007659f, -0.007050f, -0.006342f, -0.005558f, -0.004726f, -0.003873f, -0.003029f, -0.002222f, -0.001480f, -0.000831f, -0.000298f, 0.000096f, 0.000332f, 0.000394f, 0.000272f, -0.000042f, -0.000551f, -0.001253f, -0.002142f, -0.003209f, -0.004440f, -0.005816f, -0.007316f, -0.008917f, -0.010592f, -0.012312f, -0.014048f, -0.015769f, -0.017444f, -0.019044f, -0.020538f, -0.021899f, -0.023099f, -0.024116f, -0.024927f, -0.025514f, -0.025863f, -0.025961f, -0.025802f, -0.025381f, -0.024700f, -0.023761f, -0.022573f, -0.021149f, -0.019504f, -0.017657f, -0.015630f, -0.013450f, -0.011145f, -0.008744f, -0.006281f, -0.003789f, -0.001304f, 0.001141f, 0.003510f, 0.005768f, 0.007883f, 0.009822f, 0.011558f, 0.013064f, 0.014316f, 0.015297f, 0.015991f, 0.016388f, 0.016483f, 0.016275f, 0.015770f, 0.014978f, 0.013912f, 0.012595f, 0.011049f, 0.009305f, 0.007394f, 0.005352f, 0.003217f, 0.001030f, -0.001169f, -0.003339f, -0.005439f, -0.007430f, -0.009275f, -0.010942f, + -0.012399f, -0.013621f, -0.014588f, -0.015285f, -0.015701f, -0.015833f, -0.015683f, -0.015258f, -0.014573f, -0.013645f, -0.012499f, -0.011161f, -0.009662f, -0.008036f, -0.006319f, -0.004547f, -0.002757f, -0.000984f, 0.000736f, 0.002371f, 0.003893f, 0.005274f, 0.006494f, 0.007535f, 0.008384f, 0.009033f, 0.009480f, 0.009726f, 0.009778f, 0.009644f, 0.009340f, 0.008882f, 0.008290f, 0.007585f, 0.006789f, 0.005927f, 0.005020f, 0.004093f, 0.003166f, 0.002259f, 0.001389f, 0.000573f, -0.000176f, -0.000850f, -0.001440f, -0.001942f, -0.002354f, -0.002676f, -0.002910f, -0.003060f, -0.003133f, -0.003134f, -0.003072f, -0.002953f, -0.002786f, -0.002579f, -0.002337f, -0.002069f, -0.001780f, -0.001475f, -0.001158f, -0.000832f, -0.000502f, -0.000168f, -0.000950f, 0.005196f, 0.008415f, 0.013691f, 0.010046f, 0.041524f, 0.014494f, -0.010253f, -0.059357f, 0.014360f, 0.071639f, 0.089955f, -0.017131f, -0.159396f, -0.255292f, -0.048815f, 0.052816f, 0.112090f, 0.124895f, 0.011629f, 0.053349f, 0.049117f, -0.061521f, -0.153878f, 0.012614f, 0.063490f, 0.088113f, 0.120559f, 0.034303f, -0.028388f, -0.022463f, -0.126119f, + -0.059362f, 0.064977f, 0.125303f, 0.058828f, -0.087333f, -0.114147f, -0.062648f, 0.038220f, 0.156749f, 0.061676f, -0.044312f, -0.110768f, -0.121734f, -0.058530f, 0.070467f, 0.078156f, 0.062830f, 0.041647f, 0.011858f, 0.011894f, -0.019483f, -0.062924f, -0.024475f, -0.018302f, 0.013264f, 0.017461f, 0.119548f, -0.086788f, -0.027462f, -0.030487f, -0.173463f, -0.038236f, 0.108866f, -0.006879f, -0.102246f, -0.053467f, 0.045483f, 0.105019f, 0.128705f, 0.049507f, -0.025025f, -0.123162f, -0.118054f, 0.038616f, 0.185415f, 0.125769f, -0.045948f, -0.169415f, -0.106840f, -0.000353f, 0.054983f, 0.109200f, 0.058742f, -0.075455f, -0.169927f, -0.089376f, 0.045702f, 0.147251f, 0.090587f, -0.009634f, 0.008427f, -0.115185f, 0.015990f, 0.035158f, 0.217410f, 0.101335f, -0.063069f, -0.086048f, -0.002331f, 0.003691f, -0.094486f, -0.117104f, -0.048811f, 0.052984f, 0.122608f, 0.044561f, -0.097600f, -0.114101f, 0.012259f, 0.175564f, 0.184240f, 0.012182f, -0.121057f, -0.169569f, -0.076746f, 0.180433f, 0.250457f, 0.102575f, -0.107796f, -0.234107f, -0.190740f, -0.042613f, 0.128958f, 0.190930f, 0.115898f, -0.017594f, + -0.160777f, -0.122426f, -0.027748f, 0.104804f, 0.179697f, 0.098558f, -0.109567f, -0.149131f, -0.181002f, 0.025485f, 0.217751f, 0.283358f, 0.121772f, -0.068555f, -0.234328f, -0.199341f, -0.081574f, 0.092274f, 0.117148f, 0.125694f, -0.028746f, -0.108284f, -0.127547f, -0.000233f, 0.115058f, 0.139202f, -0.065825f, -0.078859f, -0.059174f, 0.008264f, -0.010895f, 0.013050f}, + {0.000640f, 0.001906f, 0.003129f, 0.004283f, 0.005343f, 0.006287f, 0.007094f, 0.007750f, 0.008242f, 0.008562f, 0.008709f, 0.008684f, 0.008492f, 0.008146f, 0.007659f, 0.007050f, 0.006342f, 0.005558f, 0.004726f, 0.003873f, 0.003029f, 0.002222f, 0.001480f, 0.000831f, 0.000298f, -0.000096f, -0.000332f, -0.000394f, -0.000272f, 0.000042f, 0.000551f, 0.001253f, 0.002142f, 0.003209f, 0.004440f, 0.005816f, 0.007316f, 0.008917f, 0.010592f, 0.012312f, 0.014048f, 0.015769f, 0.017444f, 0.019044f, 0.020538f, 0.021899f, 0.023099f, 0.024116f, 0.024927f, 0.025514f, 0.025863f, 0.025961f, 0.025802f, 0.025381f, 0.024700f, 0.023761f, 0.022573f, 0.021149f, 0.019504f, 0.017657f, 0.015630f, 0.013450f, 0.011145f, 0.008744f, 0.006281f, 0.003789f, 0.001304f, -0.001141f, -0.003510f, -0.005768f, -0.007883f, -0.009822f, -0.011558f, -0.013064f, -0.014316f, -0.015297f, -0.015991f, -0.016388f, -0.016483f, -0.016275f, -0.015770f, -0.014978f, -0.013912f, -0.012595f, -0.011049f, -0.009305f, -0.007394f, -0.005352f, -0.003217f, -0.001030f, 0.001169f, 0.003339f, 0.005439f, 0.007430f, 0.009275f, 0.010942f, + 0.012399f, 0.013621f, 0.014588f, 0.015285f, 0.015701f, 0.015833f, 0.015683f, 0.015258f, 0.014573f, 0.013645f, 0.012499f, 0.011161f, 0.009662f, 0.008036f, 0.006319f, 0.004547f, 0.002757f, 0.000984f, -0.000736f, -0.002371f, -0.003893f, -0.005274f, -0.006494f, -0.007535f, -0.008384f, -0.009033f, -0.009480f, -0.009726f, -0.009778f, -0.009644f, -0.009340f, -0.008882f, -0.008290f, -0.007585f, -0.006789f, -0.005927f, -0.005020f, -0.004093f, -0.003166f, -0.002259f, -0.001389f, -0.000573f, 0.000176f, 0.000850f, 0.001440f, 0.001942f, 0.002354f, 0.002676f, 0.002910f, 0.003060f, 0.003133f, 0.003134f, 0.003072f, 0.002953f, 0.002786f, 0.002579f, 0.002337f, 0.002069f, 0.001780f, 0.001475f, 0.001158f, 0.000832f, 0.000502f, 0.000168f, 0.000950f, -0.005196f, -0.008415f, -0.013691f, -0.010046f, -0.041524f, -0.014494f, 0.010253f, 0.059357f, -0.014360f, -0.071639f, -0.089955f, 0.017131f, 0.159396f, 0.255292f, 0.048815f, -0.052816f, -0.112090f, -0.124895f, -0.011629f, -0.053349f, -0.049117f, 0.061521f, 0.153878f, -0.012614f, -0.063490f, -0.088113f, -0.120559f, -0.034303f, 0.028388f, 0.022463f, 0.126119f, + 0.059362f, -0.064977f, -0.125303f, -0.058828f, 0.087333f, 0.114147f, 0.062648f, -0.038220f, -0.156749f, -0.061676f, 0.044312f, 0.110768f, 0.121734f, 0.058530f, -0.070467f, -0.078156f, -0.062830f, -0.041647f, -0.011858f, -0.011894f, 0.019483f, 0.062924f, 0.024475f, 0.018302f, -0.013264f, -0.017461f, -0.119548f, 0.086788f, 0.027462f, 0.030487f, 0.173463f, 0.038236f, -0.108866f, 0.006879f, 0.102246f, 0.053467f, -0.045483f, -0.105019f, -0.128705f, -0.049507f, 0.025025f, 0.123162f, 0.118054f, -0.038616f, -0.185415f, -0.125769f, 0.045948f, 0.169415f, 0.106840f, 0.000353f, -0.054983f, -0.109200f, -0.058742f, 0.075455f, 0.169927f, 0.089376f, -0.045702f, -0.147251f, -0.090587f, 0.009634f, -0.008427f, 0.115185f, -0.015990f, -0.035158f, -0.217410f, -0.101335f, 0.063069f, 0.086048f, 0.002331f, -0.003691f, 0.094486f, 0.117104f, 0.048811f, -0.052984f, -0.122608f, -0.044561f, 0.097600f, 0.114101f, -0.012259f, -0.175564f, -0.184240f, -0.012182f, 0.121057f, 0.169569f, 0.076746f, -0.180433f, -0.250457f, -0.102575f, 0.107796f, 0.234107f, 0.190740f, 0.042613f, -0.128958f, -0.190930f, -0.115898f, 0.017594f, + 0.160777f, 0.122426f, 0.027748f, -0.104804f, -0.179697f, -0.098558f, 0.109567f, 0.149131f, 0.181002f, -0.025485f, -0.217751f, -0.283358f, -0.121772f, 0.068555f, 0.234328f, 0.199341f, 0.081574f, -0.092274f, -0.117148f, -0.125694f, 0.028746f, 0.108284f, 0.127547f, 0.000233f, -0.115058f, -0.139202f, 0.065825f, 0.078859f, 0.059174f, -0.008264f, 0.010895f, -0.013050f} + }, + { + {0.000861f, 0.002552f, 0.004148f, 0.005589f, 0.006822f, 0.007797f, 0.008477f, 0.008831f, 0.008842f, 0.008500f, 0.007811f, 0.006790f, 0.005462f, 0.003864f, 0.002039f, 0.000040f, -0.002076f, -0.004250f, -0.006419f, -0.008523f, -0.010502f, -0.012301f, -0.013872f, -0.015175f, -0.016176f, -0.016852f, -0.017190f, -0.017188f, -0.016852f, -0.016198f, -0.015252f, -0.014045f, -0.012617f, -0.011010f, -0.009271f, -0.007445f, -0.005582f, -0.003724f, -0.001914f, -0.000187f, 0.001425f, 0.002899f, 0.004218f, 0.005374f, 0.006365f, 0.007196f, 0.007880f, 0.008432f, 0.008875f, 0.009235f, 0.009536f, 0.009806f, 0.010070f, 0.010351f, 0.010670f, 0.011041f, 0.011472f, 0.011967f, 0.012523f, 0.013129f, 0.013770f, 0.014422f, 0.015059f, 0.015651f, 0.016162f, 0.016557f, 0.016802f, 0.016862f, 0.016705f, 0.016305f, 0.015639f, 0.014693f, 0.013459f, 0.011936f, 0.010133f, 0.008066f, 0.005760f, 0.003247f, 0.000565f, -0.002242f, -0.005124f, -0.008031f, -0.010909f, -0.013705f, -0.016369f, -0.018851f, -0.021109f, -0.023105f, -0.024807f, -0.026193f, -0.027249f, -0.027967f, -0.028350f, -0.028408f, -0.028160f, -0.027632f, + -0.026853f, -0.025862f, -0.024696f, -0.023399f, -0.022012f, -0.020579f, -0.019138f, -0.017726f, -0.016378f, -0.015120f, -0.013974f, -0.012957f, -0.012077f, -0.011339f, -0.010740f, -0.010271f, -0.009920f, -0.009670f, -0.009501f, -0.009391f, -0.009317f, -0.009256f, -0.009187f, -0.009090f, -0.008949f, -0.008749f, -0.008483f, -0.008144f, -0.007732f, -0.007250f, -0.006705f, -0.006108f, -0.005474f, -0.004817f, -0.004156f, -0.003507f, -0.002889f, -0.002319f, -0.001811f, -0.001378f, -0.001028f, -0.000769f, -0.000601f, -0.000524f, -0.000532f, -0.000617f, -0.000767f, -0.000968f, -0.001205f, -0.001459f, -0.001714f, -0.001952f, -0.002157f, -0.002315f, -0.002413f, -0.002443f, -0.002398f, -0.002277f, -0.002080f, -0.001812f, -0.001480f, -0.001097f, -0.000674f, -0.000228f, 0.019411f, 0.009812f, -0.026151f, -0.032640f, -0.020738f, -0.035733f, -0.058682f, -0.090327f, -0.110120f, 0.151989f, 0.205551f, 0.056037f, -0.010353f, 0.053360f, 0.023881f, -0.011277f, 0.037123f, 0.092957f, 0.001328f, 0.048049f, -0.016966f, -0.058148f, 0.034997f, -0.009466f, 0.096773f, 0.024594f, 0.050246f, -0.073998f, -0.105668f, 0.008860f, 0.019794f, 0.022894f, + -0.052707f, -0.018010f, 0.016656f, 0.026045f, 0.052147f, 0.060366f, -0.066466f, -0.033060f, -0.017809f, 0.049546f, 0.059084f, 0.019277f, -0.068450f, -0.116077f, -0.069810f, 0.024554f, -0.010201f, 0.065496f, 0.096188f, 0.065856f, -0.056979f, -0.076188f, -0.047224f, 0.045117f, 0.097213f, 0.133600f, -0.019070f, -0.010924f, -0.154412f, -0.092075f, 0.092172f, 0.171862f, 0.046988f, 0.161369f, 0.056767f, -0.125307f, -0.091028f, -0.075354f, 0.082227f, 0.113654f, 0.058354f, -0.143590f, -0.259374f, -0.171666f, -0.132084f, -0.063050f, 0.179825f, 0.214131f, -0.004485f, -0.168746f, -0.138735f, -0.117269f, -0.208188f, 0.116421f, 0.232751f, 0.215983f, 0.077830f, -0.090856f, -0.200054f, -0.127017f, 0.080435f, 0.210455f, 0.194556f, 0.068536f, -0.104517f, -0.158299f, 0.038053f, 0.144177f, 0.160016f, 0.024600f, -0.130868f, -0.220678f, -0.062299f, 0.117071f, 0.256720f, 0.134429f, -0.052569f, -0.333617f, -0.343628f, -0.162022f, 0.201648f, 0.364155f, 0.190360f, -0.129535f, -0.190990f, -0.181481f, -0.043755f, 0.174126f, 0.244561f, 0.162623f, -0.058397f, -0.185193f, -0.141005f, -0.109101f, 0.102198f, 0.200563f, + 0.162725f, 0.014693f, -0.127916f, -0.203493f, -0.100609f, 0.087777f, 0.230913f, 0.130797f, -0.041546f, -0.207563f, -0.184892f, -0.095109f, 0.080087f, 0.175837f, 0.130124f, -0.032520f, -0.089523f, -0.095566f, -0.024602f, -0.012643f, 0.067768f, 0.104563f, 0.065081f, -0.029704f, -0.095207f, -0.091501f, 0.004209f, 0.077510f, 0.045222f, 0.005480f, 0.003975f, -0.002531f}, + {-0.000861f, -0.002552f, -0.004148f, -0.005589f, -0.006822f, -0.007797f, -0.008477f, -0.008831f, -0.008842f, -0.008500f, -0.007811f, -0.006790f, -0.005462f, -0.003864f, -0.002039f, -0.000040f, 0.002076f, 0.004250f, 0.006419f, 0.008523f, 0.010502f, 0.012301f, 0.013872f, 0.015175f, 0.016176f, 0.016852f, 0.017190f, 0.017188f, 0.016852f, 0.016198f, 0.015252f, 0.014045f, 0.012617f, 0.011010f, 0.009271f, 0.007445f, 0.005582f, 0.003724f, 0.001914f, 0.000187f, -0.001425f, -0.002899f, -0.004218f, -0.005374f, -0.006365f, -0.007196f, -0.007880f, -0.008432f, -0.008875f, -0.009235f, -0.009536f, -0.009806f, -0.010070f, -0.010351f, -0.010670f, -0.011041f, -0.011472f, -0.011967f, -0.012523f, -0.013129f, -0.013770f, -0.014422f, -0.015059f, -0.015651f, -0.016162f, -0.016557f, -0.016802f, -0.016862f, -0.016705f, -0.016305f, -0.015639f, -0.014693f, -0.013459f, -0.011936f, -0.010133f, -0.008066f, -0.005760f, -0.003247f, -0.000565f, 0.002242f, 0.005124f, 0.008031f, 0.010909f, 0.013705f, 0.016369f, 0.018851f, 0.021109f, 0.023105f, 0.024807f, 0.026193f, 0.027249f, 0.027967f, 0.028350f, 0.028408f, 0.028160f, 0.027632f, + 0.026853f, 0.025862f, 0.024696f, 0.023399f, 0.022012f, 0.020579f, 0.019138f, 0.017726f, 0.016378f, 0.015120f, 0.013974f, 0.012957f, 0.012077f, 0.011339f, 0.010740f, 0.010271f, 0.009920f, 0.009670f, 0.009501f, 0.009391f, 0.009317f, 0.009256f, 0.009187f, 0.009090f, 0.008949f, 0.008749f, 0.008483f, 0.008144f, 0.007732f, 0.007250f, 0.006705f, 0.006108f, 0.005474f, 0.004817f, 0.004156f, 0.003507f, 0.002889f, 0.002319f, 0.001811f, 0.001378f, 0.001028f, 0.000769f, 0.000601f, 0.000524f, 0.000532f, 0.000617f, 0.000767f, 0.000968f, 0.001205f, 0.001459f, 0.001714f, 0.001952f, 0.002157f, 0.002315f, 0.002413f, 0.002443f, 0.002398f, 0.002277f, 0.002080f, 0.001812f, 0.001480f, 0.001097f, 0.000674f, 0.000228f, -0.019411f, -0.009812f, 0.026151f, 0.032640f, 0.020738f, 0.035733f, 0.058682f, 0.090327f, 0.110120f, -0.151989f, -0.205551f, -0.056037f, 0.010353f, -0.053360f, -0.023881f, 0.011277f, -0.037123f, -0.092957f, -0.001328f, -0.048049f, 0.016966f, 0.058148f, -0.034997f, 0.009466f, -0.096773f, -0.024594f, -0.050246f, 0.073998f, 0.105668f, -0.008860f, -0.019794f, -0.022894f, + 0.052707f, 0.018010f, -0.016656f, -0.026045f, -0.052147f, -0.060366f, 0.066466f, 0.033060f, 0.017809f, -0.049546f, -0.059084f, -0.019277f, 0.068450f, 0.116077f, 0.069810f, -0.024554f, 0.010201f, -0.065496f, -0.096188f, -0.065856f, 0.056979f, 0.076188f, 0.047224f, -0.045117f, -0.097213f, -0.133600f, 0.019070f, 0.010924f, 0.154412f, 0.092075f, -0.092172f, -0.171862f, -0.046988f, -0.161369f, -0.056767f, 0.125307f, 0.091028f, 0.075354f, -0.082227f, -0.113654f, -0.058354f, 0.143590f, 0.259374f, 0.171666f, 0.132084f, 0.063050f, -0.179825f, -0.214131f, 0.004485f, 0.168746f, 0.138735f, 0.117269f, 0.208188f, -0.116421f, -0.232751f, -0.215983f, -0.077830f, 0.090856f, 0.200054f, 0.127017f, -0.080435f, -0.210455f, -0.194556f, -0.068536f, 0.104517f, 0.158299f, -0.038053f, -0.144177f, -0.160016f, -0.024600f, 0.130868f, 0.220678f, 0.062299f, -0.117071f, -0.256720f, -0.134429f, 0.052569f, 0.333617f, 0.343628f, 0.162022f, -0.201648f, -0.364155f, -0.190360f, 0.129535f, 0.190990f, 0.181481f, 0.043755f, -0.174126f, -0.244561f, -0.162623f, 0.058397f, 0.185193f, 0.141005f, 0.109101f, -0.102198f, -0.200563f, + -0.162725f, -0.014693f, 0.127916f, 0.203493f, 0.100609f, -0.087777f, -0.230913f, -0.130797f, 0.041546f, 0.207563f, 0.184892f, 0.095109f, -0.080087f, -0.175837f, -0.130124f, 0.032520f, 0.089523f, 0.095566f, 0.024602f, 0.012643f, -0.067768f, -0.104563f, -0.065081f, 0.029704f, 0.095207f, 0.091501f, -0.004209f, -0.077510f, -0.045222f, -0.005480f, -0.003975f, 0.002531f} + }, + { + {0.002884f, 0.008570f, 0.014011f, 0.019055f, 0.023559f, 0.027402f, 0.030483f, 0.032723f, 0.034076f, 0.034520f, 0.034065f, 0.032748f, 0.030633f, 0.027810f, 0.024389f, 0.020498f, 0.016277f, 0.011875f, 0.007442f, 0.003127f, -0.000930f, -0.004601f, -0.007775f, -0.010361f, -0.012290f, -0.013521f, -0.014037f, -0.013848f, -0.012990f, -0.011521f, -0.009524f, -0.007097f, -0.004352f, -0.001413f, 0.001592f, 0.004536f, 0.007293f, 0.009749f, 0.011801f, 0.013365f, 0.014373f, 0.014782f, 0.014571f, 0.013741f, 0.012318f, 0.010350f, 0.007906f, 0.005069f, 0.001940f, -0.001373f, -0.004754f, -0.008086f, -0.011254f, -0.014150f, -0.016677f, -0.018753f, -0.020310f, -0.021302f, -0.021702f, -0.021505f, -0.020727f, -0.019406f, -0.017597f, -0.015372f, -0.012816f, -0.010026f, -0.007106f, -0.004159f, -0.001292f, 0.001396f, 0.003814f, 0.005882f, 0.007534f, 0.008722f, 0.009416f, 0.009603f, 0.009290f, 0.008502f, 0.007282f, 0.005686f, 0.003785f, 0.001659f, -0.000607f, -0.002923f, -0.005200f, -0.007353f, -0.009303f, -0.010981f, -0.012332f, -0.013311f, -0.013892f, -0.014064f, -0.013831f, -0.013215f, -0.012252f, -0.010988f, + -0.009484f, -0.007806f, -0.006027f, -0.004222f, -0.002464f, -0.000825f, 0.000631f, 0.001849f, 0.002785f, 0.003405f, 0.003693f, 0.003643f, 0.003265f, 0.002583f, 0.001633f, 0.000460f, -0.000880f, -0.002326f, -0.003811f, -0.005270f, -0.006636f, -0.007849f, -0.008855f, -0.009608f, -0.010071f, -0.010222f, -0.010049f, -0.009554f, -0.008750f, -0.007665f, -0.006335f, -0.004806f, -0.003133f, -0.001372f, 0.000414f, 0.002164f, 0.003820f, 0.005325f, 0.006633f, 0.007703f, 0.008506f, 0.009022f, 0.009245f, 0.009177f, 0.008834f, 0.008242f, 0.007434f, 0.006452f, 0.005344f, 0.004160f, 0.002952f, 0.001771f, 0.000666f, -0.000321f, -0.001155f, -0.001806f, -0.002258f, -0.002501f, -0.002538f, -0.002380f, -0.002048f, -0.001572f, -0.000988f, -0.000337f, -0.026889f, 0.028099f, -0.009768f, -0.002524f, -0.023835f, 0.000490f, -0.157780f, -0.110259f, 0.027223f, 0.109942f, 0.103470f, 0.066165f, 0.025224f, 0.214648f, 0.081330f, -0.059959f, -0.118736f, -0.065186f, 0.070648f, 0.042514f, -0.016296f, -0.096606f, -0.042653f, -0.080307f, 0.003010f, 0.011074f, 0.035949f, 0.045728f, 0.050427f, -0.004399f, -0.066235f, -0.127373f, + -0.087482f, 0.084423f, 0.135908f, 0.074507f, -0.000454f, -0.052359f, -0.121824f, 0.055859f, 0.015029f, -0.181052f, -0.024857f, -0.048949f, 0.133705f, 0.141373f, 0.114178f, -0.149183f, -0.248358f, -0.253884f, 0.008334f, 0.218703f, 0.423573f, 0.171390f, -0.002672f, -0.365342f, -0.392351f, -0.247599f, 0.182369f, 0.155726f, 0.286528f, 0.123664f, -0.155661f, -0.192848f, -0.008898f, -0.150165f, -0.114626f, -0.020812f, -0.066192f, -0.060841f, -0.072571f, 0.061626f, 0.152827f, 0.168440f, 0.032683f, -0.100871f, -0.252947f, -0.229892f, 0.016842f, 0.347712f, 0.274786f, 0.085698f, -0.245119f, -0.094849f, -0.044493f, 0.131234f, 0.089811f, -0.056813f, -0.201518f, -0.145359f, 0.042291f, 0.234702f, 0.241292f, 0.024524f, -0.281017f, -0.308090f, -0.222045f, 0.163288f, 0.331563f, 0.211175f, -0.035887f, -0.258029f, -0.249274f, -0.028308f, 0.261113f, 0.345509f, 0.213605f, -0.074724f, -0.258686f, -0.257060f, -0.118453f, 0.083639f, 0.218506f, 0.156818f, -0.028084f, -0.200464f, -0.090533f, 0.019360f, 0.085401f, 0.116327f, 0.069003f, -0.017370f, -0.012965f, -0.023087f, -0.021796f, 0.014991f, 0.028101f, 0.057813f, + 0.075705f, 0.112571f, -0.004005f, -0.112876f, -0.161603f, -0.056295f, 0.102665f, 0.279171f, 0.240931f, 0.007528f, -0.250775f, -0.298360f, -0.185196f, 0.096465f, 0.276045f, 0.268710f, 0.070561f, -0.159979f, -0.294447f, -0.124619f, 0.146034f, 0.261495f, 0.159653f, -0.005708f, -0.184892f, -0.154563f, -0.041142f, 0.064629f, 0.040595f, 0.027037f, -0.007256f, 0.008844f}, + {-0.002884f, -0.008570f, -0.014011f, -0.019055f, -0.023559f, -0.027402f, -0.030483f, -0.032723f, -0.034076f, -0.034520f, -0.034065f, -0.032748f, -0.030633f, -0.027810f, -0.024389f, -0.020498f, -0.016277f, -0.011875f, -0.007442f, -0.003127f, 0.000930f, 0.004601f, 0.007775f, 0.010361f, 0.012290f, 0.013521f, 0.014037f, 0.013848f, 0.012990f, 0.011521f, 0.009524f, 0.007097f, 0.004352f, 0.001413f, -0.001592f, -0.004536f, -0.007293f, -0.009749f, -0.011801f, -0.013365f, -0.014373f, -0.014782f, -0.014571f, -0.013741f, -0.012318f, -0.010350f, -0.007906f, -0.005069f, -0.001940f, 0.001373f, 0.004754f, 0.008086f, 0.011254f, 0.014150f, 0.016677f, 0.018753f, 0.020310f, 0.021302f, 0.021702f, 0.021505f, 0.020727f, 0.019406f, 0.017597f, 0.015372f, 0.012816f, 0.010026f, 0.007106f, 0.004159f, 0.001292f, -0.001396f, -0.003814f, -0.005882f, -0.007534f, -0.008722f, -0.009416f, -0.009603f, -0.009290f, -0.008502f, -0.007282f, -0.005686f, -0.003785f, -0.001659f, 0.000607f, 0.002923f, 0.005200f, 0.007353f, 0.009303f, 0.010981f, 0.012332f, 0.013311f, 0.013892f, 0.014064f, 0.013831f, 0.013215f, 0.012252f, 0.010988f, + 0.009484f, 0.007806f, 0.006027f, 0.004222f, 0.002464f, 0.000825f, -0.000631f, -0.001849f, -0.002785f, -0.003405f, -0.003693f, -0.003643f, -0.003265f, -0.002583f, -0.001633f, -0.000460f, 0.000880f, 0.002326f, 0.003811f, 0.005270f, 0.006636f, 0.007849f, 0.008855f, 0.009608f, 0.010071f, 0.010222f, 0.010049f, 0.009554f, 0.008750f, 0.007665f, 0.006335f, 0.004806f, 0.003133f, 0.001372f, -0.000414f, -0.002164f, -0.003820f, -0.005325f, -0.006633f, -0.007703f, -0.008506f, -0.009022f, -0.009245f, -0.009177f, -0.008834f, -0.008242f, -0.007434f, -0.006452f, -0.005344f, -0.004160f, -0.002952f, -0.001771f, -0.000666f, 0.000321f, 0.001155f, 0.001806f, 0.002258f, 0.002501f, 0.002538f, 0.002380f, 0.002048f, 0.001572f, 0.000988f, 0.000337f, 0.026889f, -0.028099f, 0.009768f, 0.002524f, 0.023835f, -0.000490f, 0.157780f, 0.110259f, -0.027223f, -0.109942f, -0.103470f, -0.066165f, -0.025224f, -0.214648f, -0.081330f, 0.059959f, 0.118736f, 0.065186f, -0.070648f, -0.042514f, 0.016296f, 0.096606f, 0.042653f, 0.080307f, -0.003010f, -0.011074f, -0.035949f, -0.045728f, -0.050427f, 0.004399f, 0.066235f, 0.127373f, + 0.087482f, -0.084423f, -0.135908f, -0.074507f, 0.000454f, 0.052359f, 0.121824f, -0.055859f, -0.015029f, 0.181052f, 0.024857f, 0.048949f, -0.133705f, -0.141373f, -0.114178f, 0.149183f, 0.248358f, 0.253884f, -0.008334f, -0.218703f, -0.423573f, -0.171390f, 0.002672f, 0.365342f, 0.392351f, 0.247599f, -0.182369f, -0.155726f, -0.286528f, -0.123664f, 0.155661f, 0.192848f, 0.008898f, 0.150165f, 0.114626f, 0.020812f, 0.066192f, 0.060841f, 0.072571f, -0.061626f, -0.152827f, -0.168440f, -0.032683f, 0.100871f, 0.252947f, 0.229892f, -0.016842f, -0.347712f, -0.274786f, -0.085698f, 0.245119f, 0.094849f, 0.044493f, -0.131234f, -0.089811f, 0.056813f, 0.201518f, 0.145359f, -0.042291f, -0.234702f, -0.241292f, -0.024524f, 0.281017f, 0.308090f, 0.222045f, -0.163288f, -0.331563f, -0.211175f, 0.035887f, 0.258029f, 0.249274f, 0.028308f, -0.261113f, -0.345509f, -0.213605f, 0.074724f, 0.258686f, 0.257060f, 0.118453f, -0.083639f, -0.218506f, -0.156818f, 0.028084f, 0.200464f, 0.090533f, -0.019360f, -0.085401f, -0.116327f, -0.069003f, 0.017370f, 0.012965f, 0.023087f, 0.021796f, -0.014991f, -0.028101f, -0.057813f, + -0.075705f, -0.112571f, 0.004005f, 0.112876f, 0.161603f, 0.056295f, -0.102665f, -0.279171f, -0.240931f, -0.007528f, 0.250775f, 0.298360f, 0.185196f, -0.096465f, -0.276045f, -0.268710f, -0.070561f, 0.159979f, 0.294447f, 0.124619f, -0.146034f, -0.261495f, -0.159653f, 0.005708f, 0.184892f, 0.154563f, 0.041142f, -0.064629f, -0.040595f, -0.027037f, 0.007256f, -0.008844f} + }, + { + {0.001345f, 0.004002f, 0.006562f, 0.008966f, 0.011161f, 0.013102f, 0.014757f, 0.016105f, 0.017138f, 0.017863f, 0.018298f, 0.018475f, 0.018437f, 0.018234f, 0.017924f, 0.017569f, 0.017230f, 0.016967f, 0.016834f, 0.016878f, 0.017136f, 0.017629f, 0.018367f, 0.019343f, 0.020535f, 0.021905f, 0.023400f, 0.024955f, 0.026493f, 0.027930f, 0.029178f, 0.030145f, 0.030743f, 0.030890f, 0.030514f, 0.029556f, 0.027972f, 0.025739f, 0.022853f, 0.019332f, 0.015217f, 0.010571f, 0.005476f, 0.000035f, -0.005633f, -0.011399f, -0.017120f, -0.022653f, -0.027852f, -0.032578f, -0.036698f, -0.040096f, -0.042672f, -0.044346f, -0.045065f, -0.044800f, -0.043551f, -0.041344f, -0.038234f, -0.034302f, -0.029651f, -0.024407f, -0.018711f, -0.012717f, -0.006588f, -0.000489f, 0.005419f, 0.010980f, 0.016050f, 0.020504f, 0.024233f, 0.027155f, 0.029211f, 0.030371f, 0.030631f, 0.030014f, 0.028569f, 0.026369f, 0.023508f, 0.020095f, 0.016255f, 0.012120f, 0.007825f, 0.003507f, -0.000704f, -0.004688f, -0.008338f, -0.011562f, -0.014291f, -0.016474f, -0.018083f, -0.019114f, -0.019583f, -0.019528f, -0.019005f, -0.018085f, + -0.016852f, -0.015398f, -0.013821f, -0.012219f, -0.010685f, -0.009309f, -0.008167f, -0.007324f, -0.006827f, -0.006708f, -0.006979f, -0.007635f, -0.008650f, -0.009983f, -0.011579f, -0.013367f, -0.015270f, -0.017202f, -0.019073f, -0.020797f, -0.022290f, -0.023474f, -0.024284f, -0.024666f, -0.024583f, -0.024012f, -0.022950f, -0.021410f, -0.019422f, -0.017031f, -0.014298f, -0.011294f, -0.008100f, -0.004803f, -0.001491f, 0.001745f, 0.004821f, 0.007659f, 0.010188f, 0.012352f, 0.014108f, 0.015425f, 0.016291f, 0.016708f, 0.016693f, 0.016278f, 0.015506f, 0.014430f, 0.013112f, 0.011619f, 0.010018f, 0.008378f, 0.006763f, 0.005232f, 0.003834f, 0.002610f, 0.001587f, 0.000782f, 0.000198f, -0.000174f, -0.000355f, -0.000376f, -0.000276f, -0.000100f, -0.032205f, 0.011586f, -0.040186f, 0.014088f, -0.042313f, 0.046827f, 0.033764f, -0.096242f, -0.080467f, 0.016061f, -0.088406f, -0.089652f, 0.052045f, -0.107020f, -0.286973f, -0.113994f, 0.172515f, 0.215293f, 0.242145f, -0.144469f, 0.015859f, 0.186953f, 0.178302f, -0.033527f, -0.164463f, -0.116146f, -0.078606f, 0.060146f, 0.228290f, 0.176714f, 0.045216f, -0.148974f, + -0.167378f, -0.117306f, 0.037959f, 0.118187f, 0.172420f, 0.018415f, -0.059047f, -0.113543f, -0.094441f, 0.007358f, 0.140239f, 0.127385f, 0.029243f, -0.130445f, -0.151885f, -0.079534f, -0.031788f, 0.024268f, 0.119878f, 0.114851f, 0.152176f, 0.012880f, -0.082703f, -0.305814f, -0.232458f, -0.078515f, 0.217788f, 0.022424f, 0.137951f, 0.078344f, -0.108319f, -0.201225f, -0.074505f, -0.211080f, -0.240345f, 0.009746f, 0.084793f, 0.135413f, -0.004733f, -0.028726f, -0.046164f, 0.170722f, 0.010726f, 0.045193f, -0.337527f, -0.426429f, 0.027906f, 0.302670f, 0.248545f, 0.068898f, -0.181394f, -0.362390f, -0.595504f, -0.156258f, 0.325924f, 0.586403f, 0.346745f, -0.046848f, -0.393579f, -0.371270f, -0.161925f, 0.242804f, 0.350908f, 0.237995f, -0.002838f, -0.132692f, -0.054955f, 0.143286f, 0.144945f, -0.054418f, -0.134018f, -0.094813f, 0.040119f, 0.165650f, 0.156301f, 0.001921f, -0.121456f, -0.160572f, -0.054007f, 0.025824f, 0.115209f, 0.056750f, -0.218672f, -0.213128f, -0.032553f, 0.039900f, 0.073676f, 0.041634f, -0.038515f, -0.101947f, -0.036357f, 0.045300f, 0.032164f, 0.037874f, 0.012793f, 0.004136f, + -0.030288f, 0.050791f, 0.080366f, 0.013649f, -0.046289f, -0.091225f, -0.013940f, 0.085658f, 0.101820f, 0.072115f, -0.001188f, -0.091973f, -0.114852f, 0.005284f, 0.139027f, 0.155460f, 0.007874f, -0.164472f, -0.247952f, -0.149218f, 0.075276f, 0.269313f, 0.297946f, 0.099007f, -0.204590f, -0.365654f, -0.268602f, 0.045711f, 0.130835f, 0.071040f, 0.007248f, 0.006140f}, + {0.001345f, 0.004002f, 0.006562f, 0.008966f, 0.011161f, 0.013102f, 0.014757f, 0.016105f, 0.017138f, 0.017863f, 0.018298f, 0.018475f, 0.018437f, 0.018234f, 0.017924f, 0.017569f, 0.017230f, 0.016967f, 0.016834f, 0.016878f, 0.017136f, 0.017629f, 0.018367f, 0.019343f, 0.020535f, 0.021905f, 0.023400f, 0.024955f, 0.026493f, 0.027930f, 0.029178f, 0.030145f, 0.030743f, 0.030890f, 0.030514f, 0.029556f, 0.027972f, 0.025739f, 0.022853f, 0.019332f, 0.015217f, 0.010571f, 0.005476f, 0.000035f, -0.005633f, -0.011399f, -0.017120f, -0.022653f, -0.027852f, -0.032578f, -0.036698f, -0.040096f, -0.042672f, -0.044346f, -0.045065f, -0.044800f, -0.043551f, -0.041344f, -0.038234f, -0.034302f, -0.029651f, -0.024407f, -0.018711f, -0.012717f, -0.006588f, -0.000489f, 0.005419f, 0.010980f, 0.016050f, 0.020504f, 0.024233f, 0.027155f, 0.029211f, 0.030371f, 0.030631f, 0.030014f, 0.028569f, 0.026369f, 0.023508f, 0.020095f, 0.016255f, 0.012120f, 0.007825f, 0.003507f, -0.000704f, -0.004688f, -0.008338f, -0.011562f, -0.014291f, -0.016474f, -0.018083f, -0.019114f, -0.019583f, -0.019528f, -0.019005f, -0.018085f, + -0.016852f, -0.015398f, -0.013821f, -0.012219f, -0.010685f, -0.009309f, -0.008167f, -0.007324f, -0.006827f, -0.006708f, -0.006979f, -0.007635f, -0.008650f, -0.009983f, -0.011579f, -0.013367f, -0.015270f, -0.017202f, -0.019073f, -0.020797f, -0.022290f, -0.023474f, -0.024284f, -0.024666f, -0.024583f, -0.024012f, -0.022950f, -0.021410f, -0.019422f, -0.017031f, -0.014298f, -0.011294f, -0.008100f, -0.004803f, -0.001491f, 0.001745f, 0.004821f, 0.007659f, 0.010188f, 0.012352f, 0.014108f, 0.015425f, 0.016291f, 0.016708f, 0.016693f, 0.016278f, 0.015506f, 0.014430f, 0.013112f, 0.011619f, 0.010018f, 0.008378f, 0.006763f, 0.005232f, 0.003834f, 0.002610f, 0.001587f, 0.000782f, 0.000198f, -0.000174f, -0.000355f, -0.000376f, -0.000276f, -0.000100f, -0.032205f, 0.011586f, -0.040186f, 0.014088f, -0.042313f, 0.046827f, 0.033764f, -0.096242f, -0.080467f, 0.016061f, -0.088406f, -0.089652f, 0.052045f, -0.107020f, -0.286973f, -0.113994f, 0.172515f, 0.215293f, 0.242145f, -0.144469f, 0.015859f, 0.186953f, 0.178302f, -0.033527f, -0.164463f, -0.116146f, -0.078606f, 0.060146f, 0.228290f, 0.176714f, 0.045216f, -0.148974f, + -0.167378f, -0.117306f, 0.037959f, 0.118187f, 0.172420f, 0.018415f, -0.059047f, -0.113543f, -0.094441f, 0.007358f, 0.140239f, 0.127385f, 0.029243f, -0.130445f, -0.151885f, -0.079534f, -0.031788f, 0.024268f, 0.119878f, 0.114851f, 0.152176f, 0.012880f, -0.082703f, -0.305814f, -0.232458f, -0.078515f, 0.217788f, 0.022424f, 0.137951f, 0.078344f, -0.108319f, -0.201225f, -0.074505f, -0.211080f, -0.240345f, 0.009746f, 0.084793f, 0.135413f, -0.004733f, -0.028726f, -0.046164f, 0.170722f, 0.010726f, 0.045193f, -0.337527f, -0.426429f, 0.027906f, 0.302670f, 0.248545f, 0.068898f, -0.181394f, -0.362390f, -0.595504f, -0.156258f, 0.325924f, 0.586403f, 0.346745f, -0.046848f, -0.393579f, -0.371270f, -0.161925f, 0.242804f, 0.350908f, 0.237995f, -0.002838f, -0.132692f, -0.054955f, 0.143286f, 0.144945f, -0.054418f, -0.134018f, -0.094813f, 0.040119f, 0.165650f, 0.156301f, 0.001921f, -0.121456f, -0.160572f, -0.054007f, 0.025824f, 0.115209f, 0.056750f, -0.218672f, -0.213128f, -0.032553f, 0.039900f, 0.073676f, 0.041634f, -0.038515f, -0.101947f, -0.036357f, 0.045300f, 0.032164f, 0.037874f, 0.012793f, 0.004136f, + -0.030288f, 0.050791f, 0.080366f, 0.013649f, -0.046289f, -0.091225f, -0.013940f, 0.085658f, 0.101820f, 0.072115f, -0.001188f, -0.091973f, -0.114852f, 0.005284f, 0.139027f, 0.155460f, 0.007874f, -0.164472f, -0.247952f, -0.149218f, 0.075276f, 0.269313f, 0.297946f, 0.099007f, -0.204590f, -0.365654f, -0.268602f, 0.045711f, 0.130835f, 0.071040f, 0.007248f, 0.006140f} + }, + { + {0.000362f, 0.001073f, 0.001744f, 0.002349f, 0.002866f, 0.003277f, 0.003570f, 0.003738f, 0.003779f, 0.003698f, 0.003508f, 0.003226f, 0.002876f, 0.002485f, 0.002085f, 0.001710f, 0.001397f, 0.001181f, 0.001094f, 0.001169f, 0.001431f, 0.001901f, 0.002592f, 0.003510f, 0.004653f, 0.006007f, 0.007553f, 0.009260f, 0.011090f, 0.012998f, 0.014931f, 0.016831f, 0.018638f, 0.020289f, 0.021720f, 0.022871f, 0.023686f, 0.024113f, 0.024109f, 0.023641f, 0.022686f, 0.021232f, 0.019283f, 0.016852f, 0.013969f, 0.010675f, 0.007023f, 0.003079f, -0.001081f, -0.005376f, -0.009714f, -0.014004f, -0.018149f, -0.022056f, -0.025634f, -0.028799f, -0.031473f, -0.033592f, -0.035100f, -0.035957f, -0.036140f, -0.035639f, -0.034460f, -0.032629f, -0.030184f, -0.027179f, -0.023683f, -0.019776f, -0.015546f, -0.011091f, -0.006513f, -0.001916f, 0.002596f, 0.006922f, 0.010968f, 0.014648f, 0.017885f, 0.020617f, 0.022794f, 0.024383f, 0.025367f, 0.025744f, 0.025530f, 0.024755f, 0.023465f, 0.021719f, 0.019588f, 0.017150f, 0.014493f, 0.011706f, 0.008882f, 0.006113f, 0.003485f, 0.001081f, -0.001026f, -0.002775f, + -0.004115f, -0.005009f, -0.005435f, -0.005387f, -0.004872f, -0.003914f, -0.002548f, -0.000824f, 0.001197f, 0.003446f, 0.005846f, 0.008317f, 0.010775f, 0.013138f, 0.015324f, 0.017260f, 0.018878f, 0.020119f, 0.020938f, 0.021298f, 0.021179f, 0.020573f, 0.019487f, 0.017941f, 0.015968f, 0.013612f, 0.010929f, 0.007984f, 0.004847f, 0.001593f, -0.001699f, -0.004952f, -0.008089f, -0.011040f, -0.013738f, -0.016128f, -0.018162f, -0.019804f, -0.021028f, -0.021822f, -0.022185f, -0.022130f, -0.021678f, -0.020863f, -0.019726f, -0.018317f, -0.016691f, -0.014906f, -0.013022f, -0.011101f, -0.009198f, -0.007369f, -0.005660f, -0.004113f, -0.002759f, -0.001622f, -0.000713f, -0.000037f, 0.000414f, 0.000657f, 0.000717f, 0.000625f, 0.000421f, 0.000148f, 0.003153f, 0.039246f, 0.019417f, -0.023447f, -0.011964f, 0.066398f, 0.104926f, 0.012829f, -0.083265f, -0.197505f, -0.131572f, -0.043432f, 0.098608f, -0.095586f, -0.058691f, -0.025854f, 0.072826f, 0.132206f, 0.338317f, -0.030937f, -0.084397f, -0.074181f, -0.012587f, 0.012308f, 0.185180f, 0.096400f, 0.086420f, -0.056502f, -0.178421f, -0.099177f, -0.091937f, 0.057927f, + 0.078566f, 0.128628f, -0.012851f, -0.100419f, -0.153556f, -0.063418f, -0.033265f, 0.026325f, 0.070259f, 0.081971f, -0.004465f, -0.085805f, -0.077271f, -0.033981f, 0.034679f, 0.026259f, -0.092928f, -0.078258f, 0.019976f, 0.075629f, 0.042707f, 0.066090f, -0.011075f, -0.062597f, -0.010010f, -0.067249f, 0.046747f, -0.141062f, 0.104991f, 0.095284f, -0.096905f, -0.165815f, 0.025985f, -0.109232f, -0.092494f, 0.074759f, -0.033794f, -0.054673f, -0.157522f, -0.012924f, 0.193544f, 0.439641f, 0.197651f, -0.045368f, -0.274867f, -0.197032f, -0.026967f, 0.208389f, 0.300841f, 0.219146f, -0.073385f, -0.195584f, -0.082110f, 0.032274f, 0.033256f, 0.023490f, -0.035048f, -0.061489f, -0.119029f, -0.016601f, 0.100604f, 0.214575f, 0.161937f, 0.018756f, -0.165729f, -0.271331f, -0.194265f, 0.001101f, 0.245243f, 0.380123f, 0.173566f, -0.053007f, -0.339741f, -0.343594f, -0.166942f, 0.092259f, 0.197898f, 0.180599f, 0.052916f, 0.025386f, -0.109175f, 0.023439f, 0.101582f, 0.122370f, -0.126372f, -0.178005f, -0.054058f, 0.091751f, 0.129352f, 0.070559f, -0.006143f, -0.168099f, -0.175214f, -0.114156f, 0.078900f, 0.220900f, + 0.246636f, 0.056560f, -0.178328f, -0.354397f, -0.276709f, -0.020144f, 0.259144f, 0.436947f, 0.279027f, -0.061814f, -0.348580f, -0.383924f, -0.207627f, 0.122758f, 0.252189f, 0.198382f, 0.095538f, -0.034397f, -0.090844f, -0.114349f, -0.055317f, 0.035860f, 0.087028f, 0.089706f, 0.032524f, -0.067118f, -0.056800f, -0.060686f, -0.007022f, 0.013520f, -0.000301f, 0.004991f}, + {0.000362f, 0.001073f, 0.001744f, 0.002349f, 0.002866f, 0.003277f, 0.003570f, 0.003738f, 0.003779f, 0.003698f, 0.003508f, 0.003226f, 0.002876f, 0.002485f, 0.002085f, 0.001710f, 0.001397f, 0.001181f, 0.001094f, 0.001169f, 0.001431f, 0.001901f, 0.002592f, 0.003510f, 0.004653f, 0.006007f, 0.007553f, 0.009260f, 0.011090f, 0.012998f, 0.014931f, 0.016831f, 0.018638f, 0.020289f, 0.021720f, 0.022871f, 0.023686f, 0.024113f, 0.024109f, 0.023641f, 0.022686f, 0.021232f, 0.019283f, 0.016852f, 0.013969f, 0.010675f, 0.007023f, 0.003079f, -0.001081f, -0.005376f, -0.009714f, -0.014004f, -0.018149f, -0.022056f, -0.025634f, -0.028799f, -0.031473f, -0.033592f, -0.035100f, -0.035957f, -0.036140f, -0.035639f, -0.034460f, -0.032629f, -0.030184f, -0.027179f, -0.023683f, -0.019776f, -0.015546f, -0.011091f, -0.006513f, -0.001916f, 0.002596f, 0.006922f, 0.010968f, 0.014648f, 0.017885f, 0.020617f, 0.022794f, 0.024383f, 0.025367f, 0.025744f, 0.025530f, 0.024755f, 0.023465f, 0.021719f, 0.019588f, 0.017150f, 0.014493f, 0.011706f, 0.008882f, 0.006113f, 0.003485f, 0.001081f, -0.001026f, -0.002775f, + -0.004115f, -0.005009f, -0.005435f, -0.005387f, -0.004872f, -0.003914f, -0.002548f, -0.000824f, 0.001197f, 0.003446f, 0.005846f, 0.008317f, 0.010775f, 0.013138f, 0.015324f, 0.017260f, 0.018878f, 0.020119f, 0.020938f, 0.021298f, 0.021179f, 0.020573f, 0.019487f, 0.017941f, 0.015968f, 0.013612f, 0.010929f, 0.007984f, 0.004847f, 0.001593f, -0.001699f, -0.004952f, -0.008089f, -0.011040f, -0.013738f, -0.016128f, -0.018162f, -0.019804f, -0.021028f, -0.021822f, -0.022185f, -0.022130f, -0.021678f, -0.020863f, -0.019726f, -0.018317f, -0.016691f, -0.014906f, -0.013022f, -0.011101f, -0.009198f, -0.007369f, -0.005660f, -0.004113f, -0.002759f, -0.001622f, -0.000713f, -0.000037f, 0.000414f, 0.000657f, 0.000717f, 0.000625f, 0.000421f, 0.000148f, 0.003153f, 0.039246f, 0.019417f, -0.023447f, -0.011964f, 0.066398f, 0.104926f, 0.012829f, -0.083265f, -0.197505f, -0.131572f, -0.043432f, 0.098608f, -0.095586f, -0.058691f, -0.025854f, 0.072826f, 0.132206f, 0.338317f, -0.030937f, -0.084397f, -0.074181f, -0.012587f, 0.012308f, 0.185180f, 0.096400f, 0.086420f, -0.056502f, -0.178421f, -0.099177f, -0.091937f, 0.057927f, + 0.078566f, 0.128628f, -0.012851f, -0.100419f, -0.153556f, -0.063418f, -0.033265f, 0.026325f, 0.070259f, 0.081971f, -0.004465f, -0.085805f, -0.077271f, -0.033981f, 0.034679f, 0.026259f, -0.092928f, -0.078258f, 0.019976f, 0.075629f, 0.042707f, 0.066090f, -0.011075f, -0.062597f, -0.010010f, -0.067249f, 0.046747f, -0.141062f, 0.104991f, 0.095284f, -0.096905f, -0.165815f, 0.025985f, -0.109232f, -0.092494f, 0.074759f, -0.033794f, -0.054673f, -0.157522f, -0.012924f, 0.193544f, 0.439641f, 0.197651f, -0.045368f, -0.274867f, -0.197032f, -0.026967f, 0.208389f, 0.300841f, 0.219146f, -0.073385f, -0.195584f, -0.082110f, 0.032274f, 0.033256f, 0.023490f, -0.035048f, -0.061489f, -0.119029f, -0.016601f, 0.100604f, 0.214575f, 0.161937f, 0.018756f, -0.165729f, -0.271331f, -0.194265f, 0.001101f, 0.245243f, 0.380123f, 0.173566f, -0.053007f, -0.339741f, -0.343594f, -0.166942f, 0.092259f, 0.197898f, 0.180599f, 0.052916f, 0.025386f, -0.109175f, 0.023439f, 0.101582f, 0.122370f, -0.126372f, -0.178005f, -0.054058f, 0.091751f, 0.129352f, 0.070559f, -0.006143f, -0.168099f, -0.175214f, -0.114156f, 0.078900f, 0.220900f, + 0.246636f, 0.056560f, -0.178328f, -0.354397f, -0.276709f, -0.020144f, 0.259144f, 0.436947f, 0.279027f, -0.061814f, -0.348580f, -0.383924f, -0.207627f, 0.122758f, 0.252189f, 0.198382f, 0.095538f, -0.034397f, -0.090844f, -0.114349f, -0.055317f, 0.035860f, 0.087028f, 0.089706f, 0.032524f, -0.067118f, -0.056800f, -0.060686f, -0.007022f, 0.013520f, -0.000301f, 0.004991f} + }, + { + {-0.002437f, -0.007249f, -0.011878f, -0.016208f, -0.020132f, -0.023555f, -0.026396f, -0.028594f, -0.030103f, -0.030901f, -0.030982f, -0.030365f, -0.029084f, -0.027193f, -0.024763f, -0.021877f, -0.018627f, -0.015116f, -0.011448f, -0.007729f, -0.004061f, -0.000542f, 0.002741f, 0.005712f, 0.008307f, 0.010480f, 0.012198f, 0.013448f, 0.014232f, 0.014568f, 0.014488f, 0.014039f, 0.013276f, 0.012265f, 0.011077f, 0.009785f, 0.008463f, 0.007182f, 0.006009f, 0.005001f, 0.004208f, 0.003667f, 0.003405f, 0.003434f, 0.003755f, 0.004356f, 0.005213f, 0.006292f, 0.007550f, 0.008939f, 0.010403f, 0.011886f, 0.013333f, 0.014688f, 0.015902f, 0.016932f, 0.017741f, 0.018302f, 0.018600f, 0.018628f, 0.018389f, 0.017899f, 0.017180f, 0.016263f, 0.015189f, 0.013998f, 0.012738f, 0.011455f, 0.010197f, 0.009007f, 0.007923f, 0.006979f, 0.006200f, 0.005604f, 0.005199f, 0.004984f, 0.004949f, 0.005075f, 0.005338f, 0.005705f, 0.006139f, 0.006600f, 0.007047f, 0.007439f, 0.007738f, 0.007910f, 0.007927f, 0.007767f, 0.007417f, 0.006874f, 0.006142f, 0.005236f, 0.004179f, 0.003004f, 0.001749f, 0.000459f, + -0.000818f, -0.002032f, -0.003131f, -0.004065f, -0.004790f, -0.005264f, -0.005455f, -0.005338f, -0.004898f, -0.004130f, -0.003042f, -0.001649f, 0.000020f, 0.001928f, 0.004029f, 0.006271f, 0.008594f, 0.010936f, 0.013233f, 0.015422f, 0.017441f, 0.019234f, 0.020751f, 0.021948f, 0.022792f, 0.023260f, 0.023339f, 0.023028f, 0.022334f, 0.021278f, 0.019890f, 0.018206f, 0.016271f, 0.014137f, 0.011857f, 0.009488f, 0.007087f, 0.004707f, 0.002402f, 0.000219f, -0.001802f, -0.003625f, -0.005223f, -0.006579f, -0.007681f, -0.008525f, -0.009118f, -0.009470f, -0.009597f, -0.009522f, -0.009269f, -0.008865f, -0.008338f, -0.007716f, -0.007025f, -0.006287f, -0.005524f, -0.004752f, -0.003983f, -0.003226f, -0.002485f, -0.001761f, -0.001050f, -0.000349f, 0.000798f, -0.022608f, 0.029290f, 0.010754f, 0.033745f, -0.056416f, 0.012564f, -0.025145f, -0.039111f, 0.009475f, 0.087132f, 0.034345f, 0.050271f, 0.055360f, 0.033369f, 0.029722f, 0.043641f, 0.147217f, 0.145766f, -0.095509f, -0.073279f, 0.078979f, 0.072582f, 0.059506f, -0.050192f, -0.013124f, -0.063172f, -0.060244f, -0.020264f, 0.048458f, 0.087877f, -0.022581f, + -0.078489f, -0.024945f, 0.048310f, 0.079037f, 0.078327f, 0.003655f, -0.050125f, -0.032420f, 0.019079f, 0.040126f, 0.023291f, 0.013937f, -0.072645f, -0.044753f, -0.050742f, -0.023459f, -0.052839f, 0.011511f, 0.054459f, 0.080019f, -0.061848f, -0.033169f, -0.111716f, 0.006452f, 0.040085f, 0.117089f, -0.002984f, 0.075402f, -0.102498f, -0.083120f, 0.005264f, 0.122676f, 0.052329f, 0.150099f, 0.096037f, -0.032499f, -0.105663f, -0.099683f, -0.053576f, 0.040849f, 0.085621f, -0.012670f, -0.024627f, -0.075403f, -0.149701f, -0.147335f, 0.040066f, 0.235083f, 0.257166f, 0.129050f, -0.118997f, -0.271508f, -0.194114f, -0.009602f, 0.209841f, 0.210054f, 0.126052f, -0.121489f, -0.184259f, -0.252540f, -0.122876f, 0.170446f, 0.241755f, 0.138102f, -0.083143f, -0.205561f, -0.113596f, 0.046416f, 0.139492f, 0.115677f, -0.043339f, -0.167817f, -0.124128f, 0.048838f, 0.212727f, 0.241182f, 0.025151f, -0.224988f, -0.262230f, -0.025929f, 0.184648f, 0.355649f, 0.338647f, -0.091475f, -0.359634f, -0.270936f, 0.035513f, 0.312107f, 0.338017f, 0.167326f, -0.083554f, -0.320453f, -0.251326f, -0.066371f, 0.201620f, 0.262253f, + 0.181611f, -0.085509f, -0.219784f, -0.194721f, -0.002556f, 0.163824f, 0.200978f, 0.010282f, -0.156332f, -0.163656f, -0.041784f, 0.137059f, 0.177173f, -0.017919f, -0.159069f, -0.205658f, -0.078000f, 0.099218f, 0.263550f, 0.161633f, -0.058418f, -0.232437f, -0.217229f, -0.074059f, 0.127299f, 0.238100f, 0.208174f, 0.001426f, -0.078885f, -0.054832f, -0.003657f, -0.006916f}, + {-0.002437f, -0.007249f, -0.011878f, -0.016208f, -0.020132f, -0.023555f, -0.026396f, -0.028594f, -0.030103f, -0.030901f, -0.030982f, -0.030365f, -0.029084f, -0.027193f, -0.024763f, -0.021877f, -0.018627f, -0.015116f, -0.011448f, -0.007729f, -0.004061f, -0.000542f, 0.002741f, 0.005712f, 0.008307f, 0.010480f, 0.012198f, 0.013448f, 0.014232f, 0.014568f, 0.014488f, 0.014039f, 0.013276f, 0.012265f, 0.011077f, 0.009785f, 0.008463f, 0.007182f, 0.006009f, 0.005001f, 0.004208f, 0.003667f, 0.003405f, 0.003434f, 0.003755f, 0.004356f, 0.005213f, 0.006292f, 0.007550f, 0.008939f, 0.010403f, 0.011886f, 0.013333f, 0.014688f, 0.015902f, 0.016932f, 0.017741f, 0.018302f, 0.018600f, 0.018628f, 0.018389f, 0.017899f, 0.017180f, 0.016263f, 0.015189f, 0.013998f, 0.012738f, 0.011455f, 0.010197f, 0.009007f, 0.007923f, 0.006979f, 0.006200f, 0.005604f, 0.005199f, 0.004984f, 0.004949f, 0.005075f, 0.005338f, 0.005705f, 0.006139f, 0.006600f, 0.007047f, 0.007439f, 0.007738f, 0.007910f, 0.007927f, 0.007767f, 0.007417f, 0.006874f, 0.006142f, 0.005236f, 0.004179f, 0.003004f, 0.001749f, 0.000459f, + -0.000818f, -0.002032f, -0.003131f, -0.004065f, -0.004790f, -0.005264f, -0.005455f, -0.005338f, -0.004898f, -0.004130f, -0.003042f, -0.001649f, 0.000020f, 0.001928f, 0.004029f, 0.006271f, 0.008594f, 0.010936f, 0.013233f, 0.015422f, 0.017441f, 0.019234f, 0.020751f, 0.021948f, 0.022792f, 0.023260f, 0.023339f, 0.023028f, 0.022334f, 0.021278f, 0.019890f, 0.018206f, 0.016271f, 0.014137f, 0.011857f, 0.009488f, 0.007087f, 0.004707f, 0.002402f, 0.000219f, -0.001802f, -0.003625f, -0.005223f, -0.006579f, -0.007681f, -0.008525f, -0.009118f, -0.009470f, -0.009597f, -0.009522f, -0.009269f, -0.008865f, -0.008338f, -0.007716f, -0.007025f, -0.006287f, -0.005524f, -0.004752f, -0.003983f, -0.003226f, -0.002485f, -0.001761f, -0.001050f, -0.000349f, 0.000798f, -0.022608f, 0.029290f, 0.010754f, 0.033745f, -0.056416f, 0.012564f, -0.025145f, -0.039111f, 0.009475f, 0.087132f, 0.034345f, 0.050271f, 0.055360f, 0.033369f, 0.029722f, 0.043641f, 0.147217f, 0.145766f, -0.095509f, -0.073279f, 0.078979f, 0.072582f, 0.059506f, -0.050192f, -0.013124f, -0.063172f, -0.060244f, -0.020264f, 0.048458f, 0.087877f, -0.022581f, + -0.078489f, -0.024945f, 0.048310f, 0.079037f, 0.078327f, 0.003655f, -0.050125f, -0.032420f, 0.019079f, 0.040126f, 0.023291f, 0.013937f, -0.072645f, -0.044753f, -0.050742f, -0.023459f, -0.052839f, 0.011511f, 0.054459f, 0.080019f, -0.061848f, -0.033169f, -0.111716f, 0.006452f, 0.040085f, 0.117089f, -0.002984f, 0.075402f, -0.102498f, -0.083120f, 0.005264f, 0.122676f, 0.052329f, 0.150099f, 0.096037f, -0.032499f, -0.105663f, -0.099683f, -0.053576f, 0.040849f, 0.085621f, -0.012670f, -0.024627f, -0.075403f, -0.149701f, -0.147335f, 0.040066f, 0.235083f, 0.257166f, 0.129050f, -0.118997f, -0.271508f, -0.194114f, -0.009602f, 0.209841f, 0.210054f, 0.126052f, -0.121489f, -0.184259f, -0.252540f, -0.122876f, 0.170446f, 0.241755f, 0.138102f, -0.083143f, -0.205561f, -0.113596f, 0.046416f, 0.139492f, 0.115677f, -0.043339f, -0.167817f, -0.124128f, 0.048838f, 0.212727f, 0.241182f, 0.025151f, -0.224988f, -0.262230f, -0.025929f, 0.184648f, 0.355649f, 0.338647f, -0.091475f, -0.359634f, -0.270936f, 0.035513f, 0.312107f, 0.338017f, 0.167326f, -0.083554f, -0.320453f, -0.251326f, -0.066371f, 0.201620f, 0.262253f, + 0.181611f, -0.085509f, -0.219784f, -0.194721f, -0.002556f, 0.163824f, 0.200978f, 0.010282f, -0.156332f, -0.163656f, -0.041784f, 0.137059f, 0.177173f, -0.017919f, -0.159069f, -0.205658f, -0.078000f, 0.099218f, 0.263550f, 0.161633f, -0.058418f, -0.232437f, -0.217229f, -0.074059f, 0.127299f, 0.238100f, 0.208174f, 0.001426f, -0.078885f, -0.054832f, -0.003657f, -0.006916f} + }, + { + {-0.000655f, -0.001951f, -0.003209f, -0.004401f, -0.005506f, -0.006501f, -0.007370f, -0.008098f, -0.008674f, -0.009092f, -0.009349f, -0.009447f, -0.009392f, -0.009192f, -0.008861f, -0.008413f, -0.007867f, -0.007241f, -0.006556f, -0.005831f, -0.005086f, -0.004340f, -0.003609f, -0.002907f, -0.002246f, -0.001635f, -0.001078f, -0.000576f, -0.000128f, 0.000272f, 0.000631f, 0.000961f, 0.001275f, 0.001587f, 0.001912f, 0.002266f, 0.002663f, 0.003117f, 0.003641f, 0.004243f, 0.004929f, 0.005702f, 0.006561f, 0.007500f, 0.008510f, 0.009577f, 0.010685f, 0.011813f, 0.012936f, 0.014030f, 0.015066f, 0.016015f, 0.016850f, 0.017543f, 0.018067f, 0.018399f, 0.018519f, 0.018410f, 0.018062f, 0.017467f, 0.016625f, 0.015540f, 0.014224f, 0.012691f, 0.010964f, 0.009068f, 0.007035f, 0.004897f, 0.002693f, 0.000460f, -0.001761f, -0.003932f, -0.006014f, -0.007971f, -0.009770f, -0.011382f, -0.012783f, -0.013952f, -0.014877f, -0.015550f, -0.015970f, -0.016141f, -0.016074f, -0.015786f, -0.015296f, -0.014631f, -0.013819f, -0.012893f, -0.011885f, -0.010830f, -0.009761f, -0.008710f, -0.007708f, -0.006783f, -0.005956f, -0.005247f, + -0.004670f, -0.004234f, -0.003942f, -0.003791f, -0.003774f, -0.003880f, -0.004090f, -0.004385f, -0.004740f, -0.005131f, -0.005529f, -0.005908f, -0.006240f, -0.006500f, -0.006665f, -0.006715f, -0.006634f, -0.006411f, -0.006038f, -0.005514f, -0.004844f, -0.004035f, -0.003103f, -0.002066f, -0.000946f, 0.000230f, 0.001433f, 0.002634f, 0.003800f, 0.004900f, 0.005904f, 0.006784f, 0.007514f, 0.008074f, 0.008446f, 0.008617f, 0.008582f, 0.008340f, 0.007894f, 0.007257f, 0.006443f, 0.005474f, 0.004377f, 0.003179f, 0.001914f, 0.000616f, -0.000680f, -0.001937f, -0.003122f, -0.004202f, -0.005146f, -0.005929f, -0.006530f, -0.006932f, -0.007125f, -0.007104f, -0.006870f, -0.006432f, -0.005803f, -0.005002f, -0.004053f, -0.002984f, -0.001826f, -0.000615f, 0.005093f, -0.003646f, -0.000283f, -0.012014f, 0.033903f, 0.010066f, -0.043003f, 0.017081f, 0.005267f, 0.036821f, 0.008218f, -0.072431f, -0.028385f, -0.045756f, -0.098015f, 0.018919f, 0.099508f, 0.089873f, 0.087904f, -0.043867f, 0.009214f, 0.077701f, 0.086341f, 0.052898f, -0.020283f, -0.049260f, -0.021028f, -0.073031f, -0.066609f, -0.060330f, 0.034773f, 0.126218f, + 0.009288f, 0.017068f, 0.007110f, -0.048477f, -0.072624f, 0.044341f, 0.081520f, 0.108391f, 0.076852f, 0.023860f, -0.048001f, -0.063067f, -0.036730f, 0.005377f, 0.028787f, 0.039442f, -0.031959f, -0.036245f, -0.032095f, -0.022097f, -0.032694f, 0.143925f, 0.004623f, 0.061316f, -0.000865f, -0.056275f, -0.151972f, 0.084433f, 0.015088f, 0.049121f, 0.081787f, -0.027886f, -0.078970f, -0.106931f, 0.041302f, 0.078896f, 0.055445f, 0.005969f, -0.048255f, -0.041803f, -0.088581f, -0.097071f, 0.016601f, 0.098597f, 0.051414f, -0.118811f, -0.102804f, -0.048753f, -0.056937f, 0.010149f, 0.073083f, 0.041621f, -0.102317f, -0.124038f, -0.011932f, 0.202729f, 0.301995f, 0.162765f, -0.069694f, -0.219647f, -0.225042f, -0.052172f, 0.157848f, 0.184314f, 0.053627f, -0.060592f, -0.088058f, -0.033560f, 0.025667f, 0.049639f, 0.022726f, 0.020269f, -0.062520f, -0.075378f, -0.031814f, 0.014830f, 0.112040f, 0.131902f, 0.143188f, -0.015498f, -0.156012f, -0.189801f, 0.059376f, 0.034389f, 0.093034f, 0.127071f, 0.072857f, -0.005818f, -0.148545f, -0.039841f, 0.063216f, 0.100603f, 0.158258f, 0.015227f, -0.074849f, -0.120711f, + -0.125667f, -0.104225f, 0.072503f, 0.194413f, 0.257993f, 0.084344f, -0.131001f, -0.335068f, -0.219043f, 0.003901f, 0.213622f, 0.251721f, 0.141389f, -0.119509f, -0.252400f, -0.239874f, -0.021656f, 0.182933f, 0.283543f, 0.086681f, -0.201864f, -0.256839f, -0.176503f, 0.010550f, 0.207102f, 0.221211f, 0.088061f, -0.058597f, -0.064795f, -0.023744f, -0.001035f, -0.002587f}, + {-0.000655f, -0.001951f, -0.003209f, -0.004401f, -0.005506f, -0.006501f, -0.007370f, -0.008098f, -0.008674f, -0.009092f, -0.009349f, -0.009447f, -0.009392f, -0.009192f, -0.008861f, -0.008413f, -0.007867f, -0.007241f, -0.006556f, -0.005831f, -0.005086f, -0.004340f, -0.003609f, -0.002907f, -0.002246f, -0.001635f, -0.001078f, -0.000576f, -0.000128f, 0.000272f, 0.000631f, 0.000961f, 0.001275f, 0.001587f, 0.001912f, 0.002266f, 0.002663f, 0.003117f, 0.003641f, 0.004243f, 0.004929f, 0.005702f, 0.006561f, 0.007500f, 0.008510f, 0.009577f, 0.010685f, 0.011813f, 0.012936f, 0.014030f, 0.015066f, 0.016015f, 0.016850f, 0.017543f, 0.018067f, 0.018399f, 0.018519f, 0.018410f, 0.018062f, 0.017467f, 0.016625f, 0.015540f, 0.014224f, 0.012691f, 0.010964f, 0.009068f, 0.007035f, 0.004897f, 0.002693f, 0.000460f, -0.001761f, -0.003932f, -0.006014f, -0.007971f, -0.009770f, -0.011382f, -0.012783f, -0.013952f, -0.014877f, -0.015550f, -0.015970f, -0.016141f, -0.016074f, -0.015786f, -0.015296f, -0.014631f, -0.013819f, -0.012893f, -0.011885f, -0.010830f, -0.009761f, -0.008710f, -0.007708f, -0.006783f, -0.005956f, -0.005247f, + -0.004670f, -0.004234f, -0.003942f, -0.003791f, -0.003774f, -0.003880f, -0.004090f, -0.004385f, -0.004740f, -0.005131f, -0.005529f, -0.005908f, -0.006240f, -0.006500f, -0.006665f, -0.006715f, -0.006634f, -0.006411f, -0.006038f, -0.005514f, -0.004844f, -0.004035f, -0.003103f, -0.002066f, -0.000946f, 0.000230f, 0.001433f, 0.002634f, 0.003800f, 0.004900f, 0.005904f, 0.006784f, 0.007514f, 0.008074f, 0.008446f, 0.008617f, 0.008582f, 0.008340f, 0.007894f, 0.007257f, 0.006443f, 0.005474f, 0.004377f, 0.003179f, 0.001914f, 0.000616f, -0.000680f, -0.001937f, -0.003122f, -0.004202f, -0.005146f, -0.005929f, -0.006530f, -0.006932f, -0.007125f, -0.007104f, -0.006870f, -0.006432f, -0.005803f, -0.005002f, -0.004053f, -0.002984f, -0.001826f, -0.000615f, 0.005093f, -0.003646f, -0.000283f, -0.012014f, 0.033903f, 0.010066f, -0.043003f, 0.017081f, 0.005267f, 0.036821f, 0.008218f, -0.072431f, -0.028385f, -0.045756f, -0.098015f, 0.018919f, 0.099508f, 0.089873f, 0.087904f, -0.043867f, 0.009214f, 0.077701f, 0.086341f, 0.052898f, -0.020283f, -0.049260f, -0.021028f, -0.073031f, -0.066609f, -0.060330f, 0.034773f, 0.126218f, + 0.009288f, 0.017068f, 0.007110f, -0.048477f, -0.072624f, 0.044341f, 0.081520f, 0.108391f, 0.076852f, 0.023860f, -0.048001f, -0.063067f, -0.036730f, 0.005377f, 0.028787f, 0.039442f, -0.031959f, -0.036245f, -0.032095f, -0.022097f, -0.032694f, 0.143925f, 0.004623f, 0.061316f, -0.000865f, -0.056275f, -0.151972f, 0.084433f, 0.015088f, 0.049121f, 0.081787f, -0.027886f, -0.078970f, -0.106931f, 0.041302f, 0.078896f, 0.055445f, 0.005969f, -0.048255f, -0.041803f, -0.088581f, -0.097071f, 0.016601f, 0.098597f, 0.051414f, -0.118811f, -0.102804f, -0.048753f, -0.056937f, 0.010149f, 0.073083f, 0.041621f, -0.102317f, -0.124038f, -0.011932f, 0.202729f, 0.301995f, 0.162765f, -0.069694f, -0.219647f, -0.225042f, -0.052172f, 0.157848f, 0.184314f, 0.053627f, -0.060592f, -0.088058f, -0.033560f, 0.025667f, 0.049639f, 0.022726f, 0.020269f, -0.062520f, -0.075378f, -0.031814f, 0.014830f, 0.112040f, 0.131902f, 0.143188f, -0.015498f, -0.156012f, -0.189801f, 0.059376f, 0.034389f, 0.093034f, 0.127071f, 0.072857f, -0.005818f, -0.148545f, -0.039841f, 0.063216f, 0.100603f, 0.158258f, 0.015227f, -0.074849f, -0.120711f, + -0.125667f, -0.104225f, 0.072503f, 0.194413f, 0.257993f, 0.084344f, -0.131001f, -0.335068f, -0.219043f, 0.003901f, 0.213622f, 0.251721f, 0.141389f, -0.119509f, -0.252400f, -0.239874f, -0.021656f, 0.182933f, 0.283543f, 0.086681f, -0.201864f, -0.256839f, -0.176503f, 0.010550f, 0.207102f, 0.221211f, 0.088061f, -0.058597f, -0.064795f, -0.023744f, -0.001035f, -0.002587f} + } +}; +const float *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float *CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; + +/********************** Sample Rate = 16000 **********************/ + +const float CRendBin_HOA3_HRIR_latency_s_16kHz = 0.001333333319053f; +const int16_t CRendBin_HOA3_HRIR_max_num_iterations_16kHz = 2; +const uint16_t CRendBin_HOA3_HRIR_num_iterations_16kHz[16][BINAURAL_CHANNELS]={{2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2} }; +const uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS] = {0, 0}; +const uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[16][BINAURAL_CHANNELS][2]={{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}},{{80, 80},{80, 80}}}; +const uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz = 0; +const float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[16]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; +const uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float CRendBin_HOA3_HRIR_coeff_re_16kHz[16][BINAURAL_CHANNELS][160]={ + { + {-0.007698f, -0.007490f, -0.007083f, -0.006489f, -0.005730f, -0.004832f, -0.003826f, -0.002746f, -0.001630f, -0.000515f, 0.000560f, 0.001561f, 0.002454f, 0.003210f, 0.003807f, 0.004225f, 0.004456f, 0.004495f, 0.004344f, 0.004015f, 0.003524f, 0.002893f, 0.002150f, 0.001327f, 0.000457f, -0.000424f, -0.001279f, -0.002075f, -0.002778f, -0.003360f, -0.003797f, -0.004070f, -0.004166f, -0.004079f, -0.003811f, -0.003367f, -0.002762f, -0.002015f, -0.001149f, -0.000193f, 0.000821f, 0.001862f, 0.002895f, 0.003887f, 0.004808f, 0.005630f, 0.006328f, 0.006883f, 0.007281f, 0.007514f, 0.007580f, 0.007483f, 0.007232f, 0.006843f, 0.006334f, 0.005728f, 0.005052f, 0.004333f, 0.003600f, 0.002879f, 0.002198f, 0.001579f, 0.001044f, 0.000609f, 0.000284f, 0.000076f, -0.000012f, 0.000014f, 0.000147f, 0.000373f, 0.000677f, 0.001039f, 0.001437f, 0.001850f, 0.002254f, 0.002628f, 0.002954f, 0.003214f, 0.003395f, 0.003487f, 0.873088f, 0.114402f, -0.664115f, -0.828857f, -0.404687f, 0.287627f, 0.776007f, 0.683901f, 0.183866f, -0.494594f, -0.847280f, -0.702624f, -0.171571f, 0.553333f, 0.801950f, 0.560626f, + -0.071445f, -0.623912f, -0.782793f, -0.390473f, 0.213570f, 0.698180f, 0.688426f, 0.203425f, -0.391493f, -0.711773f, -0.534531f, -0.009874f, 0.514367f, 0.683640f, 0.397707f, -0.158462f, -0.613228f, -0.650165f, -0.250501f, 0.313126f, 0.665665f, 0.565230f, 0.100249f, -0.424351f, -0.613182f, -0.605940f, -0.121612f, 0.438429f, 0.714441f, 0.472475f, -0.085594f, -0.591355f, -0.677742f, -0.304361f, 0.277793f, 0.670506f, 0.600885f, 0.111407f, -0.452561f, -0.697177f, -0.456348f, 0.074105f, 0.528714f, 0.616475f, 0.267734f, -0.257343f, -0.598948f, -0.539488f, -0.093337f, 0.455552f, 0.668938f, 0.441368f, -0.105273f, -0.561401f, -0.650789f, -0.285248f, 0.272664f, 0.653204f, 0.594723f, 0.152718f, -0.397975f, -0.501182f, -0.136747f, -0.047847f}, + {-0.007698f, -0.007490f, -0.007083f, -0.006489f, -0.005730f, -0.004832f, -0.003826f, -0.002746f, -0.001630f, -0.000515f, 0.000560f, 0.001561f, 0.002454f, 0.003210f, 0.003807f, 0.004225f, 0.004456f, 0.004495f, 0.004344f, 0.004015f, 0.003524f, 0.002893f, 0.002150f, 0.001327f, 0.000457f, -0.000424f, -0.001279f, -0.002075f, -0.002778f, -0.003360f, -0.003797f, -0.004070f, -0.004166f, -0.004079f, -0.003811f, -0.003367f, -0.002762f, -0.002015f, -0.001149f, -0.000193f, 0.000821f, 0.001862f, 0.002895f, 0.003887f, 0.004808f, 0.005630f, 0.006328f, 0.006883f, 0.007281f, 0.007514f, 0.007580f, 0.007483f, 0.007232f, 0.006843f, 0.006334f, 0.005728f, 0.005052f, 0.004333f, 0.003600f, 0.002879f, 0.002198f, 0.001579f, 0.001044f, 0.000609f, 0.000284f, 0.000076f, -0.000012f, 0.000014f, 0.000147f, 0.000373f, 0.000677f, 0.001039f, 0.001437f, 0.001850f, 0.002254f, 0.002628f, 0.002954f, 0.003214f, 0.003395f, 0.003487f, 0.873088f, 0.114402f, -0.664115f, -0.828857f, -0.404687f, 0.287627f, 0.776007f, 0.683901f, 0.183866f, -0.494594f, -0.847280f, -0.702624f, -0.171571f, 0.553333f, 0.801950f, 0.560626f, + -0.071445f, -0.623912f, -0.782793f, -0.390473f, 0.213570f, 0.698180f, 0.688426f, 0.203425f, -0.391493f, -0.711773f, -0.534531f, -0.009874f, 0.514367f, 0.683640f, 0.397707f, -0.158462f, -0.613228f, -0.650165f, -0.250501f, 0.313126f, 0.665665f, 0.565230f, 0.100249f, -0.424351f, -0.613182f, -0.605940f, -0.121612f, 0.438429f, 0.714441f, 0.472475f, -0.085594f, -0.591355f, -0.677742f, -0.304361f, 0.277793f, 0.670506f, 0.600885f, 0.111407f, -0.452561f, -0.697177f, -0.456348f, 0.074105f, 0.528714f, 0.616475f, 0.267734f, -0.257343f, -0.598948f, -0.539488f, -0.093337f, 0.455552f, 0.668938f, 0.441368f, -0.105273f, -0.561401f, -0.650789f, -0.285248f, 0.272664f, 0.653204f, 0.594723f, 0.152718f, -0.397975f, -0.501182f, -0.136747f, -0.047847f} + }, + { + {0.000979f, 0.000859f, 0.000628f, 0.000303f, -0.000093f, -0.000529f, -0.000968f, -0.001372f, -0.001699f, -0.001911f, -0.001967f, -0.001834f, -0.001483f, -0.000892f, -0.000050f, 0.001049f, 0.002396f, 0.003976f, 0.005761f, 0.007716f, 0.009796f, 0.011949f, 0.014118f, 0.016243f, 0.018261f, 0.020110f, 0.021733f, 0.023075f, 0.024089f, 0.024736f, 0.024990f, 0.024832f, 0.024257f, 0.023273f, 0.021899f, 0.020167f, 0.018118f, 0.015803f, 0.013282f, 0.010620f, 0.007886f, 0.005150f, 0.002483f, -0.000050f, -0.002385f, -0.004470f, -0.006257f, -0.007712f, -0.008809f, -0.009536f, -0.009892f, -0.009888f, -0.009546f, -0.008897f, -0.007982f, -0.006849f, -0.005551f, -0.004142f, -0.002679f, -0.001219f, 0.000187f, 0.001491f, 0.002652f, 0.003637f, 0.004422f, 0.004992f, 0.005341f, 0.005476f, 0.005408f, 0.005160f, 0.004761f, 0.004243f, 0.003646f, 0.003008f, 0.002371f, 0.001772f, 0.001246f, 0.000823f, 0.000528f, 0.000376f, 0.101304f, 0.339648f, 0.252777f, -0.393513f, -0.864314f, -0.541937f, 0.347878f, 0.907725f, 0.674223f, 0.029188f, -0.333092f, -0.699853f, -0.238588f, 0.263380f, 0.598306f, 0.464099f, + 0.107903f, -0.429695f, -0.591349f, -0.410488f, 0.074892f, 0.451542f, 0.601242f, 0.261686f, -0.273703f, -0.612053f, -0.496067f, -0.123218f, 0.373495f, 0.621420f, 0.456977f, 0.034825f, -0.488382f, -0.663918f, -0.417587f, 0.141872f, 0.609117f, 0.748454f, 0.312259f, -0.330994f, -0.816255f, -0.565065f, 0.018068f, 0.618044f, 0.795873f, 0.435300f, -0.250077f, -0.750399f, -0.726031f, -0.187310f, 0.429070f, 0.772695f, 0.575337f, 0.009608f, -0.605531f, -0.758946f, -0.427578f, 0.191705f, 0.625802f, 0.667829f, 0.214816f, -0.367542f, -0.715600f, -0.575407f, -0.066289f, 0.456607f, 0.808964f, 0.615571f, -0.008032f, -0.631988f, -0.815117f, -0.462997f, 0.234557f, 0.763803f, 0.807672f, 0.306931f, -0.408833f, -0.618503f, -0.218248f, -0.076060f}, + {-0.000979f, -0.000859f, -0.000628f, -0.000303f, 0.000093f, 0.000529f, 0.000968f, 0.001372f, 0.001699f, 0.001911f, 0.001967f, 0.001834f, 0.001483f, 0.000892f, 0.000050f, -0.001049f, -0.002396f, -0.003976f, -0.005761f, -0.007716f, -0.009796f, -0.011949f, -0.014118f, -0.016243f, -0.018261f, -0.020110f, -0.021733f, -0.023075f, -0.024089f, -0.024736f, -0.024990f, -0.024832f, -0.024257f, -0.023273f, -0.021899f, -0.020167f, -0.018118f, -0.015803f, -0.013282f, -0.010620f, -0.007886f, -0.005150f, -0.002483f, 0.000050f, 0.002385f, 0.004470f, 0.006257f, 0.007712f, 0.008809f, 0.009536f, 0.009892f, 0.009888f, 0.009546f, 0.008897f, 0.007982f, 0.006849f, 0.005551f, 0.004142f, 0.002679f, 0.001219f, -0.000187f, -0.001491f, -0.002652f, -0.003637f, -0.004422f, -0.004992f, -0.005341f, -0.005476f, -0.005408f, -0.005160f, -0.004761f, -0.004243f, -0.003646f, -0.003008f, -0.002371f, -0.001772f, -0.001246f, -0.000823f, -0.000528f, -0.000376f, -0.101304f, -0.339648f, -0.252777f, 0.393513f, 0.864314f, 0.541937f, -0.347878f, -0.907725f, -0.674223f, -0.029188f, 0.333092f, 0.699853f, 0.238588f, -0.263380f, -0.598306f, -0.464099f, + -0.107903f, 0.429695f, 0.591349f, 0.410488f, -0.074892f, -0.451542f, -0.601242f, -0.261686f, 0.273703f, 0.612053f, 0.496067f, 0.123218f, -0.373495f, -0.621420f, -0.456977f, -0.034825f, 0.488382f, 0.663918f, 0.417587f, -0.141872f, -0.609117f, -0.748454f, -0.312259f, 0.330994f, 0.816255f, 0.565065f, -0.018068f, -0.618044f, -0.795873f, -0.435300f, 0.250077f, 0.750399f, 0.726031f, 0.187310f, -0.429070f, -0.772695f, -0.575337f, -0.009608f, 0.605531f, 0.758946f, 0.427578f, -0.191705f, -0.625802f, -0.667829f, -0.214816f, 0.367542f, 0.715600f, 0.575407f, 0.066289f, -0.456607f, -0.808964f, -0.615571f, 0.008032f, 0.631988f, 0.815117f, 0.462997f, -0.234557f, -0.763803f, -0.807672f, -0.306931f, 0.408833f, 0.618503f, 0.218248f, 0.076060f} + }, + { + {0.062484f, 0.062132f, 0.061426f, 0.060364f, 0.058943f, 0.057161f, 0.055018f, 0.052514f, 0.049655f, 0.046449f, 0.042913f, 0.039069f, 0.034946f, 0.030583f, 0.026026f, 0.021329f, 0.016555f, 0.011772f, 0.007057f, 0.002488f, -0.001854f, -0.005886f, -0.009530f, -0.012711f, -0.015360f, -0.017419f, -0.018840f, -0.019589f, -0.019649f, -0.019014f, -0.017700f, -0.015738f, -0.013176f, -0.010076f, -0.006518f, -0.002592f, 0.001601f, 0.005953f, 0.010350f, 0.014679f, 0.018826f, 0.022686f, 0.026161f, 0.029164f, 0.031622f, 0.033479f, 0.034699f, 0.035260f, 0.035166f, 0.034435f, 0.033108f, 0.031239f, 0.028902f, 0.026180f, 0.023168f, 0.019967f, 0.016682f, 0.013417f, 0.010273f, 0.007344f, 0.004715f, 0.002454f, 0.000620f, -0.000749f, -0.001632f, -0.002024f, -0.001940f, -0.001411f, -0.000486f, 0.000776f, 0.002302f, 0.004012f, 0.005822f, 0.007645f, 0.009395f, 0.010992f, 0.012364f, 0.013450f, 0.014202f, 0.014586f, 0.022958f, -0.049893f, -0.209171f, -0.183077f, 0.073972f, 0.005048f, -0.168993f, -0.204974f, -0.247823f, -0.228010f, -0.107469f, 0.270264f, 0.121968f, 0.080084f, 0.213218f, -0.012303f, + -0.082492f, -0.141268f, -0.038249f, -0.032065f, 0.084166f, 0.151523f, 0.248608f, 0.071240f, -0.135437f, -0.187353f, 0.026434f, 0.160893f, 0.225170f, 0.119884f, -0.023092f, -0.225645f, -0.171771f, -0.058959f, 0.174948f, 0.239644f, 0.157424f, -0.083437f, -0.169510f, -0.176581f, 0.037238f, -0.197171f, -0.146337f, -0.004115f, 0.184486f, 0.191645f, 0.077263f, -0.126621f, -0.232975f, -0.206877f, 0.053405f, 0.249289f, 0.303806f, 0.143482f, -0.141705f, -0.396307f, -0.325906f, 0.013674f, 0.412100f, 0.513794f, 0.285338f, -0.184442f, -0.497306f, -0.491586f, -0.061807f, 0.391423f, 0.463816f, 0.126103f, -0.302822f, -0.488148f, -0.285776f, 0.108766f, 0.379058f, 0.389034f, 0.065148f, -0.245125f, -0.346104f, -0.137250f, 0.068615f, 0.025104f}, + {0.062484f, 0.062132f, 0.061426f, 0.060364f, 0.058943f, 0.057161f, 0.055018f, 0.052514f, 0.049655f, 0.046449f, 0.042913f, 0.039069f, 0.034946f, 0.030583f, 0.026026f, 0.021329f, 0.016555f, 0.011772f, 0.007057f, 0.002488f, -0.001854f, -0.005886f, -0.009530f, -0.012711f, -0.015360f, -0.017419f, -0.018840f, -0.019589f, -0.019649f, -0.019014f, -0.017700f, -0.015738f, -0.013176f, -0.010076f, -0.006518f, -0.002592f, 0.001601f, 0.005953f, 0.010350f, 0.014679f, 0.018826f, 0.022686f, 0.026161f, 0.029164f, 0.031622f, 0.033479f, 0.034699f, 0.035260f, 0.035166f, 0.034435f, 0.033108f, 0.031239f, 0.028902f, 0.026180f, 0.023168f, 0.019967f, 0.016682f, 0.013417f, 0.010273f, 0.007344f, 0.004715f, 0.002454f, 0.000620f, -0.000749f, -0.001632f, -0.002024f, -0.001940f, -0.001411f, -0.000486f, 0.000776f, 0.002302f, 0.004012f, 0.005822f, 0.007645f, 0.009395f, 0.010992f, 0.012364f, 0.013450f, 0.014202f, 0.014586f, 0.022958f, -0.049893f, -0.209171f, -0.183077f, 0.073972f, 0.005048f, -0.168993f, -0.204974f, -0.247823f, -0.228010f, -0.107469f, 0.270264f, 0.121968f, 0.080084f, 0.213218f, -0.012303f, + -0.082492f, -0.141268f, -0.038249f, -0.032065f, 0.084166f, 0.151523f, 0.248608f, 0.071240f, -0.135437f, -0.187353f, 0.026434f, 0.160893f, 0.225170f, 0.119884f, -0.023092f, -0.225645f, -0.171771f, -0.058959f, 0.174948f, 0.239644f, 0.157424f, -0.083437f, -0.169510f, -0.176581f, 0.037238f, -0.197171f, -0.146337f, -0.004115f, 0.184486f, 0.191645f, 0.077263f, -0.126621f, -0.232975f, -0.206877f, 0.053405f, 0.249289f, 0.303806f, 0.143482f, -0.141705f, -0.396307f, -0.325906f, 0.013674f, 0.412100f, 0.513794f, 0.285338f, -0.184442f, -0.497306f, -0.491586f, -0.061807f, 0.391423f, 0.463816f, 0.126103f, -0.302822f, -0.488148f, -0.285776f, 0.108766f, 0.379058f, 0.389034f, 0.065148f, -0.245125f, -0.346104f, -0.137250f, 0.068615f, 0.025104f} + }, + { + {0.057111f, 0.056250f, 0.054553f, 0.052067f, 0.048864f, 0.045033f, 0.040682f, 0.035931f, 0.030910f, 0.025755f, 0.020601f, 0.015580f, 0.010819f, 0.006430f, 0.002512f, -0.000855f, -0.003609f, -0.005712f, -0.007148f, -0.007921f, -0.008060f, -0.007613f, -0.006645f, -0.005236f, -0.003482f, -0.001483f, 0.000655f, 0.002823f, 0.004917f, 0.006840f, 0.008502f, 0.009830f, 0.010762f, 0.011256f, 0.011286f, 0.010845f, 0.009946f, 0.008617f, 0.006903f, 0.004863f, 0.002566f, 0.000091f, -0.002479f, -0.005057f, -0.007559f, -0.009903f, -0.012017f, -0.013836f, -0.015308f, -0.016394f, -0.017068f, -0.017319f, -0.017154f, -0.016589f, -0.015656f, -0.014398f, -0.012866f, -0.011118f, -0.009219f, -0.007232f, -0.005221f, -0.003248f, -0.001369f, 0.000369f, 0.001925f, 0.003271f, 0.004388f, 0.005268f, 0.005913f, 0.006336f, 0.006558f, 0.006608f, 0.006518f, 0.006326f, 0.006071f, 0.005790f, 0.005517f, 0.005284f, 0.005115f, 0.005026f, 0.050263f, 0.048416f, -0.032945f, -0.133132f, -0.051928f, 0.062074f, -0.065995f, -0.088821f, -0.087160f, -0.054059f, -0.271541f, 0.097281f, -0.267727f, -0.263532f, 0.129059f, 0.546682f, + 0.617193f, 0.273608f, -0.175130f, -0.532891f, -0.554510f, -0.046712f, 0.546091f, 0.739987f, 0.436759f, -0.182178f, -0.702202f, -0.782010f, -0.180699f, 0.531728f, 0.908302f, 0.573031f, -0.136258f, -0.738541f, -0.744864f, -0.232703f, 0.429545f, 0.758458f, 0.445898f, -0.113039f, -0.698934f, -0.284378f, 0.198267f, 0.552864f, 0.525436f, 0.168161f, -0.281458f, -0.510027f, -0.416623f, -0.034099f, 0.339007f, 0.440450f, 0.258996f, -0.071709f, -0.323488f, -0.348190f, -0.140564f, 0.105708f, 0.283677f, 0.270582f, 0.079276f, -0.147708f, -0.285929f, -0.206381f, -0.023550f, 0.103586f, 0.316081f, 0.237749f, 0.036797f, -0.218107f, -0.224030f, -0.070507f, 0.116657f, 0.182062f, 0.109038f, -0.045436f, -0.141025f, -0.044537f, 0.014158f, 0.007622f}, + {0.057111f, 0.056250f, 0.054553f, 0.052067f, 0.048864f, 0.045033f, 0.040682f, 0.035931f, 0.030910f, 0.025755f, 0.020601f, 0.015580f, 0.010819f, 0.006430f, 0.002512f, -0.000855f, -0.003609f, -0.005712f, -0.007148f, -0.007921f, -0.008060f, -0.007613f, -0.006645f, -0.005236f, -0.003482f, -0.001483f, 0.000655f, 0.002823f, 0.004917f, 0.006840f, 0.008502f, 0.009830f, 0.010762f, 0.011256f, 0.011286f, 0.010845f, 0.009946f, 0.008617f, 0.006903f, 0.004863f, 0.002566f, 0.000091f, -0.002479f, -0.005057f, -0.007559f, -0.009903f, -0.012017f, -0.013836f, -0.015308f, -0.016394f, -0.017068f, -0.017319f, -0.017154f, -0.016589f, -0.015656f, -0.014398f, -0.012866f, -0.011118f, -0.009219f, -0.007232f, -0.005221f, -0.003248f, -0.001369f, 0.000369f, 0.001925f, 0.003271f, 0.004388f, 0.005268f, 0.005913f, 0.006336f, 0.006558f, 0.006608f, 0.006518f, 0.006326f, 0.006071f, 0.005790f, 0.005517f, 0.005284f, 0.005115f, 0.005026f, 0.050263f, 0.048416f, -0.032945f, -0.133132f, -0.051928f, 0.062074f, -0.065995f, -0.088821f, -0.087160f, -0.054059f, -0.271541f, 0.097281f, -0.267727f, -0.263532f, 0.129059f, 0.546682f, + 0.617193f, 0.273608f, -0.175130f, -0.532891f, -0.554510f, -0.046712f, 0.546091f, 0.739987f, 0.436759f, -0.182178f, -0.702202f, -0.782010f, -0.180699f, 0.531728f, 0.908302f, 0.573031f, -0.136258f, -0.738541f, -0.744864f, -0.232703f, 0.429545f, 0.758458f, 0.445898f, -0.113039f, -0.698934f, -0.284378f, 0.198267f, 0.552864f, 0.525436f, 0.168161f, -0.281458f, -0.510027f, -0.416623f, -0.034099f, 0.339007f, 0.440450f, 0.258996f, -0.071709f, -0.323488f, -0.348190f, -0.140564f, 0.105708f, 0.283677f, 0.270582f, 0.079276f, -0.147708f, -0.285929f, -0.206381f, -0.023550f, 0.103586f, 0.316081f, 0.237749f, 0.036797f, -0.218107f, -0.224030f, -0.070507f, 0.116657f, 0.182062f, 0.109038f, -0.045436f, -0.141025f, -0.044537f, 0.014158f, 0.007622f} + }, + { + {0.041602f, 0.041394f, 0.040978f, 0.040354f, 0.039522f, 0.038480f, 0.037231f, 0.035778f, 0.034126f, 0.032282f, 0.030260f, 0.028074f, 0.025746f, 0.023299f, 0.020763f, 0.018173f, 0.015566f, 0.012983f, 0.010468f, 0.008068f, 0.005826f, 0.003789f, 0.001998f, 0.000491f, -0.000698f, -0.001545f, -0.002030f, -0.002144f, -0.001888f, -0.001272f, -0.000319f, 0.000942f, 0.002468f, 0.004209f, 0.006108f, 0.008100f, 0.010117f, 0.012086f, 0.013937f, 0.015600f, 0.017007f, 0.018100f, 0.018826f, 0.019144f, 0.019023f, 0.018444f, 0.017404f, 0.015911f, 0.013989f, 0.011673f, 0.009011f, 0.006063f, 0.002897f, -0.000411f, -0.003783f, -0.007135f, -0.010385f, -0.013456f, -0.016272f, -0.018768f, -0.020890f, -0.022592f, -0.023845f, -0.024631f, -0.024949f, -0.024813f, -0.024248f, -0.023296f, -0.022008f, -0.020448f, -0.018686f, -0.016797f, -0.014860f, -0.012953f, -0.011154f, -0.009534f, -0.008154f, -0.007071f, -0.006324f, -0.005944f, -0.009138f, -0.014208f, -0.012076f, -0.019963f, -0.085166f, -0.068669f, -0.075100f, 0.005656f, -0.068692f, -0.035429f, -0.114336f, 0.024991f, -0.100777f, -0.161590f, 0.089829f, 0.307021f, + 0.229967f, 0.193370f, -0.086257f, -0.256496f, -0.089551f, -0.069518f, 0.161084f, 0.143823f, 0.080564f, -0.108634f, -0.220026f, -0.183436f, 0.034413f, 0.217304f, 0.276501f, 0.149216f, -0.078653f, -0.378943f, -0.270365f, 0.111069f, 0.335609f, 0.322652f, 0.114550f, -0.213831f, -0.407765f, -0.119243f, 0.203755f, 0.360522f, 0.306272f, 0.030860f, -0.226497f, -0.290452f, -0.232556f, -0.083205f, 0.189825f, 0.256878f, 0.247384f, 0.006984f, -0.136156f, -0.288681f, -0.124020f, -0.012294f, 0.249563f, 0.283504f, 0.020125f, 0.007048f, -0.204243f, -0.263916f, -0.101428f, 0.189034f, 0.253534f, 0.124939f, -0.148221f, -0.315778f, -0.227382f, -0.002516f, 0.171087f, 0.305535f, 0.192294f, -0.067680f, -0.259825f, -0.171751f, 0.014589f, 0.007614f}, + {-0.041602f, -0.041394f, -0.040978f, -0.040354f, -0.039522f, -0.038480f, -0.037231f, -0.035778f, -0.034126f, -0.032282f, -0.030260f, -0.028074f, -0.025746f, -0.023299f, -0.020763f, -0.018173f, -0.015566f, -0.012983f, -0.010468f, -0.008068f, -0.005826f, -0.003789f, -0.001998f, -0.000491f, 0.000698f, 0.001545f, 0.002030f, 0.002144f, 0.001888f, 0.001272f, 0.000319f, -0.000942f, -0.002468f, -0.004209f, -0.006108f, -0.008100f, -0.010117f, -0.012086f, -0.013937f, -0.015600f, -0.017007f, -0.018100f, -0.018826f, -0.019144f, -0.019023f, -0.018444f, -0.017404f, -0.015911f, -0.013989f, -0.011673f, -0.009011f, -0.006063f, -0.002897f, 0.000411f, 0.003783f, 0.007135f, 0.010385f, 0.013456f, 0.016272f, 0.018768f, 0.020890f, 0.022592f, 0.023845f, 0.024631f, 0.024949f, 0.024813f, 0.024248f, 0.023296f, 0.022008f, 0.020448f, 0.018686f, 0.016797f, 0.014860f, 0.012953f, 0.011154f, 0.009534f, 0.008154f, 0.007071f, 0.006324f, 0.005944f, 0.009138f, 0.014208f, 0.012076f, 0.019963f, 0.085166f, 0.068669f, 0.075100f, -0.005656f, 0.068692f, 0.035429f, 0.114336f, -0.024991f, 0.100777f, 0.161590f, -0.089829f, -0.307021f, + -0.229967f, -0.193370f, 0.086257f, 0.256496f, 0.089551f, 0.069518f, -0.161084f, -0.143823f, -0.080564f, 0.108634f, 0.220026f, 0.183436f, -0.034413f, -0.217304f, -0.276501f, -0.149216f, 0.078653f, 0.378943f, 0.270365f, -0.111069f, -0.335609f, -0.322652f, -0.114550f, 0.213831f, 0.407765f, 0.119243f, -0.203755f, -0.360522f, -0.306272f, -0.030860f, 0.226497f, 0.290452f, 0.232556f, 0.083205f, -0.189825f, -0.256878f, -0.247384f, -0.006984f, 0.136156f, 0.288681f, 0.124020f, 0.012294f, -0.249563f, -0.283504f, -0.020125f, -0.007048f, 0.204243f, 0.263916f, 0.101428f, -0.189034f, -0.253534f, -0.124939f, 0.148221f, 0.315778f, 0.227382f, 0.002516f, -0.171087f, -0.305535f, -0.192294f, 0.067680f, 0.259825f, 0.171751f, -0.014589f, -0.007614f} + }, + { + {0.030389f, 0.030416f, 0.030464f, 0.030522f, 0.030576f, 0.030605f, 0.030589f, 0.030503f, 0.030321f, 0.030021f, 0.029580f, 0.028978f, 0.028201f, 0.027239f, 0.026088f, 0.024750f, 0.023236f, 0.021562f, 0.019750f, 0.017829f, 0.015834f, 0.013803f, 0.011776f, 0.009798f, 0.007909f, 0.006153f, 0.004567f, 0.003185f, 0.002036f, 0.001142f, 0.000515f, 0.000162f, 0.000080f, 0.000257f, 0.000673f, 0.001300f, 0.002104f, 0.003045f, 0.004077f, 0.005154f, 0.006229f, 0.007252f, 0.008179f, 0.008970f, 0.009587f, 0.010003f, 0.010196f, 0.010154f, 0.009874f, 0.009362f, 0.008633f, 0.007711f, 0.006626f, 0.005417f, 0.004125f, 0.002798f, 0.001483f, 0.000229f, -0.000919f, -0.001917f, -0.002728f, -0.003322f, -0.003675f, -0.003772f, -0.003608f, -0.003188f, -0.002524f, -0.001640f, -0.000566f, 0.000660f, 0.001995f, 0.003391f, 0.004799f, 0.006169f, 0.007450f, 0.008597f, 0.009568f, 0.010329f, 0.010852f, 0.011119f, -0.032862f, -0.047478f, -0.028036f, -0.016979f, -0.082054f, -0.040865f, -0.045119f, -0.101997f, -0.274631f, -0.111485f, 0.009384f, 0.201284f, -0.126425f, -0.213759f, 0.129081f, 0.239129f, + 0.174454f, 0.076294f, -0.048163f, -0.188243f, -0.041938f, -0.052883f, 0.134924f, 0.108941f, 0.070416f, -0.078420f, 0.043823f, -0.025724f, 0.049083f, -0.061473f, -0.073646f, 0.045482f, 0.113120f, 0.163148f, 0.106488f, -0.007573f, -0.127571f, -0.119581f, -0.039101f, 0.055057f, 0.127006f, 0.087586f, 0.054887f, 0.039371f, -0.051924f, -0.024746f, -0.032908f, 0.016118f, 0.011892f, -0.054182f, 0.036623f, 0.037604f, 0.048414f, 0.003800f, -0.051998f, -0.113977f, -0.051239f, 0.074915f, 0.215380f, 0.143978f, 0.034595f, -0.095172f, -0.197864f, -0.153315f, 0.015408f, 0.123852f, 0.173705f, 0.009635f, -0.142381f, -0.191574f, -0.001107f, 0.184099f, 0.244045f, 0.049760f, -0.219899f, -0.332838f, -0.161023f, 0.133641f, 0.124055f, 0.045424f}, + {-0.030389f, -0.030416f, -0.030464f, -0.030522f, -0.030576f, -0.030605f, -0.030589f, -0.030503f, -0.030321f, -0.030021f, -0.029580f, -0.028978f, -0.028201f, -0.027239f, -0.026088f, -0.024750f, -0.023236f, -0.021562f, -0.019750f, -0.017829f, -0.015834f, -0.013803f, -0.011776f, -0.009798f, -0.007909f, -0.006153f, -0.004567f, -0.003185f, -0.002036f, -0.001142f, -0.000515f, -0.000162f, -0.000080f, -0.000257f, -0.000673f, -0.001300f, -0.002104f, -0.003045f, -0.004077f, -0.005154f, -0.006229f, -0.007252f, -0.008179f, -0.008970f, -0.009587f, -0.010003f, -0.010196f, -0.010154f, -0.009874f, -0.009362f, -0.008633f, -0.007711f, -0.006626f, -0.005417f, -0.004125f, -0.002798f, -0.001483f, -0.000229f, 0.000919f, 0.001917f, 0.002728f, 0.003322f, 0.003675f, 0.003772f, 0.003608f, 0.003188f, 0.002524f, 0.001640f, 0.000566f, -0.000660f, -0.001995f, -0.003391f, -0.004799f, -0.006169f, -0.007450f, -0.008597f, -0.009568f, -0.010329f, -0.010852f, -0.011119f, 0.032862f, 0.047478f, 0.028036f, 0.016979f, 0.082054f, 0.040865f, 0.045119f, 0.101997f, 0.274631f, 0.111485f, -0.009384f, -0.201284f, 0.126425f, 0.213759f, -0.129081f, -0.239129f, + -0.174454f, -0.076294f, 0.048163f, 0.188243f, 0.041938f, 0.052883f, -0.134924f, -0.108941f, -0.070416f, 0.078420f, -0.043823f, 0.025724f, -0.049083f, 0.061473f, 0.073646f, -0.045482f, -0.113120f, -0.163148f, -0.106488f, 0.007573f, 0.127571f, 0.119581f, 0.039101f, -0.055057f, -0.127006f, -0.087586f, -0.054887f, -0.039371f, 0.051924f, 0.024746f, 0.032908f, -0.016118f, -0.011892f, 0.054182f, -0.036623f, -0.037604f, -0.048414f, -0.003800f, 0.051998f, 0.113977f, 0.051239f, -0.074915f, -0.215380f, -0.143978f, -0.034595f, 0.095172f, 0.197864f, 0.153315f, -0.015408f, -0.123852f, -0.173705f, -0.009635f, 0.142381f, 0.191574f, 0.001107f, -0.184099f, -0.244045f, -0.049760f, 0.219899f, 0.332838f, 0.161023f, -0.133641f, -0.124055f, -0.045424f} + }, + { + {0.023099f, 0.023530f, 0.024370f, 0.025577f, 0.027089f, 0.028829f, 0.030707f, 0.032622f, 0.034469f, 0.036142f, 0.037540f, 0.038568f, 0.039146f, 0.039207f, 0.038706f, 0.037618f, 0.035941f, 0.033696f, 0.030927f, 0.027701f, 0.024104f, 0.020238f, 0.016218f, 0.012169f, 0.008218f, 0.004495f, 0.001120f, -0.001794f, -0.004149f, -0.005867f, -0.006891f, -0.007188f, -0.006750f, -0.005597f, -0.003775f, -0.001352f, 0.001577f, 0.004902f, 0.008495f, 0.012218f, 0.015926f, 0.019473f, 0.022718f, 0.025528f, 0.027784f, 0.029386f, 0.030256f, 0.030338f, 0.029605f, 0.028057f, 0.025720f, 0.022647f, 0.018917f, 0.014627f, 0.009896f, 0.004852f, -0.000365f, -0.005613f, -0.010750f, -0.015640f, -0.020162f, -0.024206f, -0.027684f, -0.030528f, -0.032697f, -0.034173f, -0.034963f, -0.035103f, -0.034646f, -0.033669f, -0.032266f, -0.030541f, -0.028610f, -0.026591f, -0.024599f, -0.022746f, -0.021131f, -0.019841f, -0.018942f, -0.018481f, -0.062673f, -0.091999f, -0.073281f, 0.069704f, -0.009475f, -0.099943f, -0.109490f, -0.147892f, -0.248842f, -0.178530f, -0.035184f, 0.057875f, -0.137067f, -0.217779f, 0.034105f, -0.064091f, + -0.031441f, 0.068585f, 0.197166f, 0.101594f, -0.063679f, 0.004375f, -0.071916f, -0.096329f, -0.036429f, 0.098331f, 0.374637f, 0.252218f, 0.089028f, -0.043957f, -0.174179f, -0.131210f, -0.136302f, 0.295429f, 0.450436f, 0.237787f, -0.128220f, -0.279436f, -0.350015f, -0.078461f, 0.362708f, 0.168562f, 0.174039f, -0.032901f, -0.170182f, -0.097249f, 0.222931f, 0.428182f, 0.231161f, -0.343587f, -0.481664f, -0.424163f, 0.047567f, 0.398863f, 0.562194f, 0.255677f, -0.070235f, -0.423328f, -0.236512f, -0.018858f, -0.045838f, 0.339990f, 0.153464f, -0.135925f, -0.139416f, 0.214827f, -0.117956f, -0.258660f, -0.373100f, -0.158343f, -0.010260f, 0.154267f, 0.108609f, 0.161556f, 0.051308f, -0.039987f, -0.098993f, -0.159335f, -0.044951f, -0.017591f}, + {0.023099f, 0.023530f, 0.024370f, 0.025577f, 0.027089f, 0.028829f, 0.030707f, 0.032622f, 0.034469f, 0.036142f, 0.037540f, 0.038568f, 0.039146f, 0.039207f, 0.038706f, 0.037618f, 0.035941f, 0.033696f, 0.030927f, 0.027701f, 0.024104f, 0.020238f, 0.016218f, 0.012169f, 0.008218f, 0.004495f, 0.001120f, -0.001794f, -0.004149f, -0.005867f, -0.006891f, -0.007188f, -0.006750f, -0.005597f, -0.003775f, -0.001352f, 0.001577f, 0.004902f, 0.008495f, 0.012218f, 0.015926f, 0.019473f, 0.022718f, 0.025528f, 0.027784f, 0.029386f, 0.030256f, 0.030338f, 0.029605f, 0.028057f, 0.025720f, 0.022647f, 0.018917f, 0.014627f, 0.009896f, 0.004852f, -0.000365f, -0.005613f, -0.010750f, -0.015640f, -0.020162f, -0.024206f, -0.027684f, -0.030528f, -0.032697f, -0.034173f, -0.034963f, -0.035103f, -0.034646f, -0.033669f, -0.032266f, -0.030541f, -0.028610f, -0.026591f, -0.024599f, -0.022746f, -0.021131f, -0.019841f, -0.018942f, -0.018481f, -0.062673f, -0.091999f, -0.073281f, 0.069704f, -0.009475f, -0.099943f, -0.109490f, -0.147892f, -0.248842f, -0.178530f, -0.035184f, 0.057875f, -0.137067f, -0.217779f, 0.034105f, -0.064091f, + -0.031441f, 0.068585f, 0.197166f, 0.101594f, -0.063679f, 0.004375f, -0.071916f, -0.096329f, -0.036429f, 0.098331f, 0.374637f, 0.252218f, 0.089028f, -0.043957f, -0.174179f, -0.131210f, -0.136302f, 0.295429f, 0.450436f, 0.237787f, -0.128220f, -0.279436f, -0.350015f, -0.078461f, 0.362708f, 0.168562f, 0.174039f, -0.032901f, -0.170182f, -0.097249f, 0.222931f, 0.428182f, 0.231161f, -0.343587f, -0.481664f, -0.424163f, 0.047567f, 0.398863f, 0.562194f, 0.255677f, -0.070235f, -0.423328f, -0.236512f, -0.018858f, -0.045838f, 0.339990f, 0.153464f, -0.135925f, -0.139416f, 0.214827f, -0.117956f, -0.258660f, -0.373100f, -0.158343f, -0.010260f, 0.154267f, 0.108609f, 0.161556f, 0.051308f, -0.039987f, -0.098993f, -0.159335f, -0.044951f, -0.017591f} + }, + { + {0.054691f, 0.053876f, 0.052270f, 0.049925f, 0.046914f, 0.043330f, 0.039284f, 0.034900f, 0.030310f, 0.025651f, 0.021061f, 0.016669f, 0.012598f, 0.008954f, 0.005830f, 0.003295f, 0.001396f, 0.000158f, -0.000418f, -0.000357f, 0.000297f, 0.001475f, 0.003097f, 0.005063f, 0.007266f, 0.009593f, 0.011929f, 0.014162f, 0.016187f, 0.017911f, 0.019255f, 0.020157f, 0.020575f, 0.020488f, 0.019896f, 0.018820f, 0.017302f, 0.015401f, 0.013194f, 0.010768f, 0.008221f, 0.005655f, 0.003174f, 0.000878f, -0.001139f, -0.002793f, -0.004014f, -0.004750f, -0.004964f, -0.004641f, -0.003785f, -0.002420f, -0.000589f, 0.001650f, 0.004224f, 0.007046f, 0.010023f, 0.013059f, 0.016054f, 0.018914f, 0.021549f, 0.023883f, 0.025849f, 0.027397f, 0.028495f, 0.029128f, 0.029299f, 0.029030f, 0.028360f, 0.027343f, 0.026044f, 0.024540f, 0.022913f, 0.021249f, 0.019632f, 0.018143f, 0.016856f, 0.015832f, 0.015121f, 0.014756f, -0.015374f, -0.089788f, -0.105645f, 0.033011f, 0.005709f, -0.014866f, -0.340692f, -0.200927f, -0.199203f, -0.256675f, -0.051222f, 0.153406f, 0.187770f, 0.030644f, 0.047679f, 0.023308f, + 0.122841f, -0.055274f, 0.032513f, 0.042757f, 0.007501f, 0.028536f, 0.000722f, -0.001765f, 0.006102f, -0.011380f, -0.029264f, 0.014743f, 0.001064f, -0.057539f, -0.075456f, -0.033885f, 0.003103f, -0.009218f, -0.048717f, -0.009685f, 0.050417f, 0.159080f, 0.013605f, -0.055453f, -0.216146f, 0.020459f, 0.166808f, 0.195538f, 0.142197f, -0.082820f, -0.240570f, -0.224463f, -0.113294f, 0.099404f, 0.210380f, 0.201281f, 0.016103f, -0.164977f, -0.241489f, -0.153995f, -0.011674f, 0.169760f, 0.143349f, 0.060626f, 0.075250f, -0.226318f, -0.185383f, 0.004166f, 0.078487f, -0.077596f, 0.307982f, 0.375011f, 0.325637f, -0.048462f, -0.304667f, -0.323737f, 0.025128f, 0.258415f, 0.288636f, 0.095959f, -0.193941f, -0.184479f, -0.080809f, -0.026990f}, + {0.054691f, 0.053876f, 0.052270f, 0.049925f, 0.046914f, 0.043330f, 0.039284f, 0.034900f, 0.030310f, 0.025651f, 0.021061f, 0.016669f, 0.012598f, 0.008954f, 0.005830f, 0.003295f, 0.001396f, 0.000158f, -0.000418f, -0.000357f, 0.000297f, 0.001475f, 0.003097f, 0.005063f, 0.007266f, 0.009593f, 0.011929f, 0.014162f, 0.016187f, 0.017911f, 0.019255f, 0.020157f, 0.020575f, 0.020488f, 0.019896f, 0.018820f, 0.017302f, 0.015401f, 0.013194f, 0.010768f, 0.008221f, 0.005655f, 0.003174f, 0.000878f, -0.001139f, -0.002793f, -0.004014f, -0.004750f, -0.004964f, -0.004641f, -0.003785f, -0.002420f, -0.000589f, 0.001650f, 0.004224f, 0.007046f, 0.010023f, 0.013059f, 0.016054f, 0.018914f, 0.021549f, 0.023883f, 0.025849f, 0.027397f, 0.028495f, 0.029128f, 0.029299f, 0.029030f, 0.028360f, 0.027343f, 0.026044f, 0.024540f, 0.022913f, 0.021249f, 0.019632f, 0.018143f, 0.016856f, 0.015832f, 0.015121f, 0.014756f, -0.015374f, -0.089788f, -0.105645f, 0.033011f, 0.005709f, -0.014866f, -0.340692f, -0.200927f, -0.199203f, -0.256675f, -0.051222f, 0.153406f, 0.187770f, 0.030644f, 0.047679f, 0.023308f, + 0.122841f, -0.055274f, 0.032513f, 0.042757f, 0.007501f, 0.028536f, 0.000722f, -0.001765f, 0.006102f, -0.011380f, -0.029264f, 0.014743f, 0.001064f, -0.057539f, -0.075456f, -0.033885f, 0.003103f, -0.009218f, -0.048717f, -0.009685f, 0.050417f, 0.159080f, 0.013605f, -0.055453f, -0.216146f, 0.020459f, 0.166808f, 0.195538f, 0.142197f, -0.082820f, -0.240570f, -0.224463f, -0.113294f, 0.099404f, 0.210380f, 0.201281f, 0.016103f, -0.164977f, -0.241489f, -0.153995f, -0.011674f, 0.169760f, 0.143349f, 0.060626f, 0.075250f, -0.226318f, -0.185383f, 0.004166f, 0.078487f, -0.077596f, 0.307982f, 0.375011f, 0.325637f, -0.048462f, -0.304667f, -0.323737f, 0.025128f, 0.258415f, 0.288636f, 0.095959f, -0.193941f, -0.184479f, -0.080809f, -0.026990f} + }, + { + {0.021533f, 0.020944f, 0.019781f, 0.018078f, 0.015881f, 0.013252f, 0.010263f, 0.006997f, 0.003545f, 0.000002f, -0.003535f, -0.006968f, -0.010202f, -0.013148f, -0.015726f, -0.017864f, -0.019504f, -0.020599f, -0.021119f, -0.021047f, -0.020383f, -0.019141f, -0.017351f, -0.015054f, -0.012307f, -0.009174f, -0.005728f, -0.002052f, 0.001771f, 0.005653f, 0.009509f, 0.013254f, 0.016809f, 0.020102f, 0.023067f, 0.025651f, 0.027810f, 0.029509f, 0.030730f, 0.031463f, 0.031710f, 0.031486f, 0.030816f, 0.029732f, 0.028278f, 0.026500f, 0.024452f, 0.022192f, 0.019777f, 0.017267f, 0.014720f, 0.012191f, 0.009732f, 0.007390f, 0.005205f, 0.003213f, 0.001442f, -0.000087f, -0.001360f, -0.002371f, -0.003117f, -0.003606f, -0.003849f, -0.003862f, -0.003667f, -0.003286f, -0.002748f, -0.002081f, -0.001316f, -0.000483f, 0.000388f, 0.001267f, 0.002127f, 0.002940f, 0.003683f, 0.004336f, 0.004881f, 0.005302f, 0.005589f, 0.005735f, -0.013971f, 0.039564f, -0.009130f, -0.048006f, -0.014996f, 0.010247f, 0.016980f, 0.126968f, 0.199644f, 0.248065f, -0.052099f, -0.165961f, -0.248606f, -0.100058f, 0.103896f, 0.332845f, + 0.191755f, 0.075132f, -0.098877f, -0.080432f, -0.049208f, 0.050792f, -0.016211f, -0.046062f, -0.035703f, -0.020113f, 0.023951f, 0.127544f, 0.108258f, 0.140546f, -0.067622f, -0.193057f, -0.187311f, -0.060823f, 0.133812f, 0.272375f, 0.166661f, -0.027833f, -0.221854f, -0.175482f, 0.051480f, 0.015371f, 0.042700f, 0.025158f, 0.011325f, -0.045641f, -0.074621f, 0.081967f, 0.082721f, -0.085767f, -0.093004f, -0.103701f, -0.043105f, 0.030138f, 0.141188f, 0.103375f, 0.060473f, -0.055064f, -0.068653f, -0.095392f, -0.031089f, 0.096306f, 0.162914f, 0.102703f, 0.008155f, -0.107921f, -0.230563f, -0.245539f, -0.045950f, 0.178590f, 0.271838f, 0.274633f, 0.152049f, -0.099951f, -0.353791f, -0.344662f, -0.124481f, 0.130436f, 0.105403f, 0.035328f}, + {0.021533f, 0.020944f, 0.019781f, 0.018078f, 0.015881f, 0.013252f, 0.010263f, 0.006997f, 0.003545f, 0.000002f, -0.003535f, -0.006968f, -0.010202f, -0.013148f, -0.015726f, -0.017864f, -0.019504f, -0.020599f, -0.021119f, -0.021047f, -0.020383f, -0.019141f, -0.017351f, -0.015054f, -0.012307f, -0.009174f, -0.005728f, -0.002052f, 0.001771f, 0.005653f, 0.009509f, 0.013254f, 0.016809f, 0.020102f, 0.023067f, 0.025651f, 0.027810f, 0.029509f, 0.030730f, 0.031463f, 0.031710f, 0.031486f, 0.030816f, 0.029732f, 0.028278f, 0.026500f, 0.024452f, 0.022192f, 0.019777f, 0.017267f, 0.014720f, 0.012191f, 0.009732f, 0.007390f, 0.005205f, 0.003213f, 0.001442f, -0.000087f, -0.001360f, -0.002371f, -0.003117f, -0.003606f, -0.003849f, -0.003862f, -0.003667f, -0.003286f, -0.002748f, -0.002081f, -0.001316f, -0.000483f, 0.000388f, 0.001267f, 0.002127f, 0.002940f, 0.003683f, 0.004336f, 0.004881f, 0.005302f, 0.005589f, 0.005735f, -0.013971f, 0.039564f, -0.009130f, -0.048006f, -0.014996f, 0.010247f, 0.016980f, 0.126968f, 0.199644f, 0.248065f, -0.052099f, -0.165961f, -0.248606f, -0.100058f, 0.103896f, 0.332845f, + 0.191755f, 0.075132f, -0.098877f, -0.080432f, -0.049208f, 0.050792f, -0.016211f, -0.046062f, -0.035703f, -0.020113f, 0.023951f, 0.127544f, 0.108258f, 0.140546f, -0.067622f, -0.193057f, -0.187311f, -0.060823f, 0.133812f, 0.272375f, 0.166661f, -0.027833f, -0.221854f, -0.175482f, 0.051480f, 0.015371f, 0.042700f, 0.025158f, 0.011325f, -0.045641f, -0.074621f, 0.081967f, 0.082721f, -0.085767f, -0.093004f, -0.103701f, -0.043105f, 0.030138f, 0.141188f, 0.103375f, 0.060473f, -0.055064f, -0.068653f, -0.095392f, -0.031089f, 0.096306f, 0.162914f, 0.102703f, 0.008155f, -0.107921f, -0.230563f, -0.245539f, -0.045950f, 0.178590f, 0.271838f, 0.274633f, 0.152049f, -0.099951f, -0.353791f, -0.344662f, -0.124481f, 0.130436f, 0.105403f, 0.035328f} + }, + { + {0.006034f, 0.005898f, 0.005630f, 0.005234f, 0.004718f, 0.004092f, 0.003369f, 0.002564f, 0.001693f, 0.000774f, -0.000172f, -0.001126f, -0.002064f, -0.002966f, -0.003810f, -0.004574f, -0.005239f, -0.005786f, -0.006198f, -0.006462f, -0.006568f, -0.006509f, -0.006281f, -0.005886f, -0.005329f, -0.004620f, -0.003775f, -0.002811f, -0.001754f, -0.000629f, 0.000533f, 0.001699f, 0.002833f, 0.003900f, 0.004862f, 0.005685f, 0.006333f, 0.006776f, 0.006986f, 0.006938f, 0.006615f, 0.006005f, 0.005102f, 0.003908f, 0.002430f, 0.000685f, -0.001305f, -0.003512f, -0.005899f, -0.008426f, -0.011049f, -0.013719f, -0.016387f, -0.019002f, -0.021513f, -0.023872f, -0.026034f, -0.027958f, -0.029610f, -0.030961f, -0.031991f, -0.032686f, -0.033043f, -0.033065f, -0.032768f, -0.032170f, -0.031303f, -0.030202f, -0.028910f, -0.027472f, -0.025940f, -0.024365f, -0.022801f, -0.021298f, -0.019907f, -0.018671f, -0.017632f, -0.016821f, -0.016267f, -0.015985f, -0.007218f, -0.007566f, -0.009460f, 0.001637f, -0.011333f, 0.010080f, 0.038148f, 0.046788f, -0.002158f, -0.058626f, -0.008716f, 0.080009f, 0.166461f, 0.130407f, -0.065540f, -0.226461f, + -0.117046f, -0.107922f, 0.050639f, 0.030209f, 0.014323f, 0.071197f, 0.123332f, -0.050839f, -0.130673f, -0.054935f, -0.035316f, 0.042057f, 0.122348f, 0.059493f, 0.081780f, 0.026216f, -0.105960f, -0.091869f, 0.012077f, 0.129733f, 0.114245f, -0.014831f, -0.074909f, -0.127461f, 0.000742f, 0.127348f, 0.119691f, 0.053906f, -0.029906f, -0.128471f, -0.097463f, -0.014842f, 0.019096f, 0.041287f, 0.049061f, 0.036122f, 0.073673f, 0.007047f, -0.005184f, -0.032054f, -0.002638f, -0.049137f, 0.072268f, 0.121937f, -0.026202f, 0.101295f, -0.011372f, -0.159853f, -0.035704f, 0.085567f, -0.008444f, -0.106689f, -0.112697f, -0.060874f, 0.034895f, 0.105899f, 0.107430f, 0.054834f, -0.097858f, -0.169880f, -0.041617f, 0.114684f, 0.055230f, 0.021408f}, + {-0.006034f, -0.005898f, -0.005630f, -0.005234f, -0.004718f, -0.004092f, -0.003369f, -0.002564f, -0.001693f, -0.000774f, 0.000172f, 0.001126f, 0.002064f, 0.002966f, 0.003810f, 0.004574f, 0.005239f, 0.005786f, 0.006198f, 0.006462f, 0.006568f, 0.006509f, 0.006281f, 0.005886f, 0.005329f, 0.004620f, 0.003775f, 0.002811f, 0.001754f, 0.000629f, -0.000533f, -0.001699f, -0.002833f, -0.003900f, -0.004862f, -0.005685f, -0.006333f, -0.006776f, -0.006986f, -0.006938f, -0.006615f, -0.006005f, -0.005102f, -0.003908f, -0.002430f, -0.000685f, 0.001305f, 0.003512f, 0.005899f, 0.008426f, 0.011049f, 0.013719f, 0.016387f, 0.019002f, 0.021513f, 0.023872f, 0.026034f, 0.027958f, 0.029610f, 0.030961f, 0.031991f, 0.032686f, 0.033043f, 0.033065f, 0.032768f, 0.032170f, 0.031303f, 0.030202f, 0.028910f, 0.027472f, 0.025940f, 0.024365f, 0.022801f, 0.021298f, 0.019907f, 0.018671f, 0.017632f, 0.016821f, 0.016267f, 0.015985f, 0.007218f, 0.007566f, 0.009460f, -0.001637f, 0.011333f, -0.010080f, -0.038148f, -0.046788f, 0.002158f, 0.058626f, 0.008716f, -0.080009f, -0.166461f, -0.130407f, 0.065540f, 0.226461f, + 0.117046f, 0.107922f, -0.050639f, -0.030209f, -0.014323f, -0.071197f, -0.123332f, 0.050839f, 0.130673f, 0.054935f, 0.035316f, -0.042057f, -0.122348f, -0.059493f, -0.081780f, -0.026216f, 0.105960f, 0.091869f, -0.012077f, -0.129733f, -0.114245f, 0.014831f, 0.074909f, 0.127461f, -0.000742f, -0.127348f, -0.119691f, -0.053906f, 0.029906f, 0.128471f, 0.097463f, 0.014842f, -0.019096f, -0.041287f, -0.049061f, -0.036122f, -0.073673f, -0.007047f, 0.005184f, 0.032054f, 0.002638f, 0.049137f, -0.072268f, -0.121937f, 0.026202f, -0.101295f, 0.011372f, 0.159853f, 0.035704f, -0.085567f, 0.008444f, 0.106689f, 0.112697f, 0.060874f, -0.034895f, -0.105899f, -0.107430f, -0.054834f, 0.097858f, 0.169880f, 0.041617f, -0.114684f, -0.055230f, -0.021408f} + }, + { + {0.010863f, 0.011200f, 0.011864f, 0.012832f, 0.014071f, 0.015541f, 0.017191f, 0.018966f, 0.020807f, 0.022651f, 0.024437f, 0.026104f, 0.027595f, 0.028860f, 0.029854f, 0.030542f, 0.030898f, 0.030907f, 0.030563f, 0.029873f, 0.028853f, 0.027528f, 0.025934f, 0.024111f, 0.022107f, 0.019975f, 0.017769f, 0.015543f, 0.013353f, 0.011248f, 0.009277f, 0.007480f, 0.005891f, 0.004538f, 0.003438f, 0.002603f, 0.002033f, 0.001724f, 0.001661f, 0.001826f, 0.002194f, 0.002735f, 0.003419f, 0.004213f, 0.005084f, 0.006003f, 0.006940f, 0.007871f, 0.008778f, 0.009645f, 0.010463f, 0.011230f, 0.011947f, 0.012622f, 0.013268f, 0.013899f, 0.014533f, 0.015191f, 0.015893f, 0.016657f, 0.017502f, 0.018441f, 0.019485f, 0.020639f, 0.021904f, 0.023275f, 0.024740f, 0.026284f, 0.027885f, 0.029517f, 0.031150f, 0.032753f, 0.034291f, 0.035730f, 0.037036f, 0.038179f, 0.039130f, 0.039865f, 0.040366f, 0.040620f, -0.022267f, 0.018161f, 0.010400f, -0.010091f, -0.020353f, -0.000646f, -0.031444f, -0.036280f, -0.201290f, -0.237245f, 0.004557f, 0.078100f, -0.004496f, -0.023904f, 0.027379f, -0.017484f, + -0.058772f, 0.014702f, 0.041136f, -0.001496f, 0.085314f, -0.050852f, -0.015205f, -0.042559f, -0.016824f, 0.053952f, 0.048029f, 0.118676f, -0.063098f, -0.051219f, -0.033491f, 0.031069f, -0.000121f, -0.048264f, -0.047918f, -0.020772f, -0.033309f, 0.072396f, 0.043293f, -0.027935f, -0.046999f, -0.043709f, 0.022435f, 0.077296f, 0.069198f, -0.003554f, -0.109988f, -0.068384f, -0.066551f, -0.082551f, -0.011608f, 0.078097f, 0.068922f, -0.016644f, -0.091435f, -0.094576f, -0.065306f, 0.069282f, 0.094273f, 0.065165f, 0.043257f, -0.172358f, -0.161959f, -0.011422f, 0.036877f, 0.005049f, 0.234653f, 0.090119f, 0.024315f, -0.083867f, -0.067721f, 0.052087f, 0.186407f, 0.212440f, 0.036082f, -0.103702f, -0.109180f, -0.194275f, -0.062967f, -0.034265f}, + {-0.010863f, -0.011200f, -0.011864f, -0.012832f, -0.014071f, -0.015541f, -0.017191f, -0.018966f, -0.020807f, -0.022651f, -0.024437f, -0.026104f, -0.027595f, -0.028860f, -0.029854f, -0.030542f, -0.030898f, -0.030907f, -0.030563f, -0.029873f, -0.028853f, -0.027528f, -0.025934f, -0.024111f, -0.022107f, -0.019975f, -0.017769f, -0.015543f, -0.013353f, -0.011248f, -0.009277f, -0.007480f, -0.005891f, -0.004538f, -0.003438f, -0.002603f, -0.002033f, -0.001724f, -0.001661f, -0.001826f, -0.002194f, -0.002735f, -0.003419f, -0.004213f, -0.005084f, -0.006003f, -0.006940f, -0.007871f, -0.008778f, -0.009645f, -0.010463f, -0.011230f, -0.011947f, -0.012622f, -0.013268f, -0.013899f, -0.014533f, -0.015191f, -0.015893f, -0.016657f, -0.017502f, -0.018441f, -0.019485f, -0.020639f, -0.021904f, -0.023275f, -0.024740f, -0.026284f, -0.027885f, -0.029517f, -0.031150f, -0.032753f, -0.034291f, -0.035730f, -0.037036f, -0.038179f, -0.039130f, -0.039865f, -0.040366f, -0.040620f, 0.022267f, -0.018161f, -0.010400f, 0.010091f, 0.020353f, 0.000646f, 0.031444f, 0.036280f, 0.201290f, 0.237245f, -0.004557f, -0.078100f, 0.004496f, 0.023904f, -0.027379f, 0.017484f, + 0.058772f, -0.014702f, -0.041136f, 0.001496f, -0.085314f, 0.050852f, 0.015205f, 0.042559f, 0.016824f, -0.053952f, -0.048029f, -0.118676f, 0.063098f, 0.051219f, 0.033491f, -0.031069f, 0.000121f, 0.048264f, 0.047918f, 0.020772f, 0.033309f, -0.072396f, -0.043293f, 0.027935f, 0.046999f, 0.043709f, -0.022435f, -0.077296f, -0.069198f, 0.003554f, 0.109988f, 0.068384f, 0.066551f, 0.082551f, 0.011608f, -0.078097f, -0.068922f, 0.016644f, 0.091435f, 0.094576f, 0.065306f, -0.069282f, -0.094273f, -0.065165f, -0.043257f, 0.172358f, 0.161959f, 0.011422f, -0.036877f, -0.005049f, -0.234653f, -0.090119f, -0.024315f, 0.083867f, 0.067721f, -0.052087f, -0.186407f, -0.212440f, -0.036082f, 0.103702f, 0.109180f, 0.194275f, 0.062967f, 0.034265f} + }, + { + {-0.047822f, -0.046886f, -0.045043f, -0.042352f, -0.038896f, -0.034783f, -0.030142f, -0.025115f, -0.019857f, -0.014526f, -0.009281f, -0.004276f, 0.000345f, 0.004455f, 0.007945f, 0.010729f, 0.012746f, 0.013964f, 0.014376f, 0.014004f, 0.012896f, 0.011125f, 0.008784f, 0.005982f, 0.002846f, -0.000495f, -0.003902f, -0.007243f, -0.010387f, -0.013218f, -0.015632f, -0.017545f, -0.018893f, -0.019635f, -0.019754f, -0.019258f, -0.018178f, -0.016565f, -0.014493f, -0.012051f, -0.009339f, -0.006467f, -0.003552f, -0.000709f, 0.001952f, 0.004327f, 0.006325f, 0.007870f, 0.008902f, 0.009381f, 0.009288f, 0.008624f, 0.007411f, 0.005688f, 0.003513f, 0.000955f, -0.001902f, -0.004970f, -0.008152f, -0.011356f, -0.014490f, -0.017469f, -0.020219f, -0.022676f, -0.024792f, -0.026535f, -0.027888f, -0.028851f, -0.029440f, -0.029684f, -0.029627f, -0.029319f, -0.028823f, -0.028200f, -0.027516f, -0.026834f, -0.026211f, -0.025697f, -0.025331f, -0.025141f, 0.002437f, -0.010385f, 0.024897f, 0.010871f, 0.008500f, 0.048040f, 0.038717f, -0.162200f, -0.160942f, -0.104608f, -0.017099f, 0.016216f, -0.053230f, -0.017630f, 0.218802f, 0.114696f, + 0.073019f, -0.102643f, -0.013011f, 0.038742f, 0.111803f, 0.010647f, 0.005978f, -0.045316f, -0.065141f, -0.040399f, -0.026103f, -0.007485f, 0.046694f, 0.073828f, 0.071760f, -0.007469f, -0.128561f, -0.150778f, 0.008746f, 0.070907f, 0.104617f, 0.069038f, -0.001713f, -0.104005f, 0.166432f, -0.038802f, -0.067815f, -0.129565f, -0.097838f, 0.019219f, 0.196267f, 0.203497f, 0.048762f, -0.205457f, -0.308719f, -0.273321f, 0.052960f, 0.302549f, 0.375961f, 0.269508f, -0.075659f, -0.356239f, -0.318182f, -0.076143f, -0.020635f, 0.309454f, 0.196861f, -0.000183f, -0.034524f, 0.083096f, -0.141618f, -0.027066f, -0.073019f, -0.042380f, -0.158044f, -0.158085f, -0.102720f, 0.080799f, 0.149340f, 0.168961f, 0.019283f, -0.165627f, -0.131561f, -0.049136f}, + {0.047822f, 0.046886f, 0.045043f, 0.042352f, 0.038896f, 0.034783f, 0.030142f, 0.025115f, 0.019857f, 0.014526f, 0.009281f, 0.004276f, -0.000345f, -0.004455f, -0.007945f, -0.010729f, -0.012746f, -0.013964f, -0.014376f, -0.014004f, -0.012896f, -0.011125f, -0.008784f, -0.005982f, -0.002846f, 0.000495f, 0.003902f, 0.007243f, 0.010387f, 0.013218f, 0.015632f, 0.017545f, 0.018893f, 0.019635f, 0.019754f, 0.019258f, 0.018178f, 0.016565f, 0.014493f, 0.012051f, 0.009339f, 0.006467f, 0.003552f, 0.000709f, -0.001952f, -0.004327f, -0.006325f, -0.007870f, -0.008902f, -0.009381f, -0.009288f, -0.008624f, -0.007411f, -0.005688f, -0.003513f, -0.000955f, 0.001902f, 0.004970f, 0.008152f, 0.011356f, 0.014490f, 0.017469f, 0.020219f, 0.022676f, 0.024792f, 0.026535f, 0.027888f, 0.028851f, 0.029440f, 0.029684f, 0.029627f, 0.029319f, 0.028823f, 0.028200f, 0.027516f, 0.026834f, 0.026211f, 0.025697f, 0.025331f, 0.025141f, -0.002437f, 0.010385f, -0.024897f, -0.010871f, -0.008500f, -0.048040f, -0.038717f, 0.162200f, 0.160942f, 0.104608f, 0.017099f, -0.016216f, 0.053230f, 0.017630f, -0.218802f, -0.114696f, + -0.073019f, 0.102643f, 0.013011f, -0.038742f, -0.111803f, -0.010647f, -0.005978f, 0.045316f, 0.065141f, 0.040399f, 0.026103f, 0.007485f, -0.046694f, -0.073828f, -0.071760f, 0.007469f, 0.128561f, 0.150778f, -0.008746f, -0.070907f, -0.104617f, -0.069038f, 0.001713f, 0.104005f, -0.166432f, 0.038802f, 0.067815f, 0.129565f, 0.097838f, -0.019219f, -0.196267f, -0.203497f, -0.048762f, 0.205457f, 0.308719f, 0.273321f, -0.052960f, -0.302549f, -0.375961f, -0.269508f, 0.075659f, 0.356239f, 0.318182f, 0.076143f, 0.020635f, -0.309454f, -0.196861f, 0.000183f, 0.034524f, -0.083096f, 0.141618f, 0.027066f, 0.073019f, 0.042380f, 0.158044f, 0.158085f, 0.102720f, -0.080799f, -0.149340f, -0.168961f, -0.019283f, 0.165627f, 0.131561f, 0.049136f} + }, + { + {-0.037392f, -0.036989f, -0.036200f, -0.035053f, -0.033593f, -0.031874f, -0.029959f, -0.027919f, -0.025825f, -0.023751f, -0.021765f, -0.019928f, -0.018293f, -0.016899f, -0.015772f, -0.014922f, -0.014343f, -0.014013f, -0.013895f, -0.013936f, -0.014074f, -0.014236f, -0.014345f, -0.014321f, -0.014085f, -0.013563f, -0.012691f, -0.011417f, -0.009706f, -0.007538f, -0.004915f, -0.001859f, 0.001586f, 0.005357f, 0.009371f, 0.013529f, 0.017716f, 0.021811f, 0.025682f, 0.029200f, 0.032238f, 0.034675f, 0.036406f, 0.037341f, 0.037412f, 0.036574f, 0.034809f, 0.032127f, 0.028567f, 0.024194f, 0.019101f, 0.013404f, 0.007241f, 0.000766f, -0.005857f, -0.012455f, -0.018856f, -0.024892f, -0.030405f, -0.035254f, -0.039318f, -0.042501f, -0.044733f, -0.045978f, -0.046230f, -0.045514f, -0.043889f, -0.041441f, -0.038284f, -0.034554f, -0.030404f, -0.026000f, -0.021517f, -0.017126f, -0.012997f, -0.009288f, -0.006137f, -0.003664f, -0.001963f, -0.001095f, 0.040016f, 0.024974f, 0.031039f, 0.006591f, 0.029674f, -0.033138f, 0.124640f, 0.072462f, -0.016105f, -0.002988f, 0.087269f, -0.091992f, 0.020306f, 0.115300f, -0.044722f, -0.358212f, + -0.220831f, -0.124493f, 0.162324f, 0.118796f, -0.171291f, -0.030497f, 0.138427f, 0.237770f, 0.067315f, -0.042512f, -0.111599f, -0.189566f, -0.046650f, 0.130336f, 0.232124f, 0.161396f, 0.007841f, -0.115595f, -0.140657f, -0.074020f, 0.067847f, 0.166918f, 0.100309f, 0.047515f, -0.063850f, -0.120113f, -0.048761f, 0.095869f, 0.181085f, 0.141993f, -0.003804f, -0.072366f, -0.071557f, -0.113145f, -0.035713f, 0.009771f, 0.134251f, 0.206445f, 0.241944f, 0.109536f, -0.126733f, -0.262770f, -0.107096f, 0.071251f, -0.031866f, 0.233860f, 0.174952f, 0.077308f, -0.024756f, 0.110470f, -0.227029f, -0.192836f, -0.166829f, 0.034076f, 0.028605f, 0.043400f, -0.119984f, 0.009704f, 0.111958f, 0.181593f, 0.244586f, -0.232359f, -0.167522f, -0.065493f}, + {-0.037392f, -0.036989f, -0.036200f, -0.035053f, -0.033593f, -0.031874f, -0.029959f, -0.027919f, -0.025825f, -0.023751f, -0.021765f, -0.019928f, -0.018293f, -0.016899f, -0.015772f, -0.014922f, -0.014343f, -0.014013f, -0.013895f, -0.013936f, -0.014074f, -0.014236f, -0.014345f, -0.014321f, -0.014085f, -0.013563f, -0.012691f, -0.011417f, -0.009706f, -0.007538f, -0.004915f, -0.001859f, 0.001586f, 0.005357f, 0.009371f, 0.013529f, 0.017716f, 0.021811f, 0.025682f, 0.029200f, 0.032238f, 0.034675f, 0.036406f, 0.037341f, 0.037412f, 0.036574f, 0.034809f, 0.032127f, 0.028567f, 0.024194f, 0.019101f, 0.013404f, 0.007241f, 0.000766f, -0.005857f, -0.012455f, -0.018856f, -0.024892f, -0.030405f, -0.035254f, -0.039318f, -0.042501f, -0.044733f, -0.045978f, -0.046230f, -0.045514f, -0.043889f, -0.041441f, -0.038284f, -0.034554f, -0.030404f, -0.026000f, -0.021517f, -0.017126f, -0.012997f, -0.009288f, -0.006137f, -0.003664f, -0.001963f, -0.001095f, 0.040016f, 0.024974f, 0.031039f, 0.006591f, 0.029674f, -0.033138f, 0.124640f, 0.072462f, -0.016105f, -0.002988f, 0.087269f, -0.091992f, 0.020306f, 0.115300f, -0.044722f, -0.358212f, + -0.220831f, -0.124493f, 0.162324f, 0.118796f, -0.171291f, -0.030497f, 0.138427f, 0.237770f, 0.067315f, -0.042512f, -0.111599f, -0.189566f, -0.046650f, 0.130336f, 0.232124f, 0.161396f, 0.007841f, -0.115595f, -0.140657f, -0.074020f, 0.067847f, 0.166918f, 0.100309f, 0.047515f, -0.063850f, -0.120113f, -0.048761f, 0.095869f, 0.181085f, 0.141993f, -0.003804f, -0.072366f, -0.071557f, -0.113145f, -0.035713f, 0.009771f, 0.134251f, 0.206445f, 0.241944f, 0.109536f, -0.126733f, -0.262770f, -0.107096f, 0.071251f, -0.031866f, 0.233860f, 0.174952f, 0.077308f, -0.024756f, 0.110470f, -0.227029f, -0.192836f, -0.166829f, 0.034076f, 0.028605f, 0.043400f, -0.119984f, 0.009704f, 0.111958f, 0.181593f, 0.244586f, -0.232359f, -0.167522f, -0.065493f} + }, + { + {-0.023121f, -0.022852f, -0.022326f, -0.021568f, -0.020616f, -0.019513f, -0.018315f, -0.017079f, -0.015867f, -0.014739f, -0.013755f, -0.012965f, -0.012415f, -0.012138f, -0.012157f, -0.012480f, -0.013101f, -0.014001f, -0.015146f, -0.016488f, -0.017970f, -0.019524f, -0.021074f, -0.022542f, -0.023848f, -0.024913f, -0.025665f, -0.026038f, -0.025979f, -0.025447f, -0.024416f, -0.022879f, -0.020843f, -0.018337f, -0.015404f, -0.012105f, -0.008515f, -0.004723f, -0.000825f, 0.003074f, 0.006867f, 0.010447f, 0.013710f, 0.016561f, 0.018913f, 0.020695f, 0.021850f, 0.022338f, 0.022141f, 0.021257f, 0.019706f, 0.017525f, 0.014769f, 0.011510f, 0.007830f, 0.003824f, -0.000408f, -0.004762f, -0.009133f, -0.013422f, -0.017535f, -0.021387f, -0.024907f, -0.028038f, -0.030737f, -0.032980f, -0.034759f, -0.036082f, -0.036974f, -0.037472f, -0.037625f, -0.037494f, -0.037141f, -0.036637f, -0.036049f, -0.035443f, -0.034879f, -0.034408f, -0.034071f, -0.033895f, -0.021504f, -0.013236f, 0.041524f, 0.010894f, -0.023477f, -0.049221f, 0.083276f, 0.127970f, 0.163269f, 0.021594f, -0.072866f, -0.165528f, -0.008057f, 0.026210f, -0.093974f, -0.136312f, + -0.127652f, -0.160700f, 0.083099f, 0.274765f, 0.025151f, 0.010641f, -0.072650f, -0.077463f, -0.058408f, 0.139417f, 0.095744f, 0.250590f, 0.020518f, 0.004510f, -0.119040f, -0.079281f, -0.044836f, 0.085468f, 0.150862f, 0.111181f, -0.008086f, -0.072516f, -0.070749f, -0.076794f, -0.031900f, 0.047623f, 0.107806f, 0.052183f, -0.021076f, -0.054978f, -0.040386f, 0.058062f, 0.040128f, -0.080490f, -0.098124f, -0.033613f, 0.013971f, 0.023914f, 0.110398f, -0.007314f, 0.039636f, -0.041975f, 0.031967f, -0.012918f, -0.141902f, 0.144984f, 0.120785f, -0.028039f, -0.078491f, 0.079219f, -0.182873f, -0.026340f, -0.016735f, 0.016552f, -0.130854f, -0.252620f, -0.302233f, 0.004013f, 0.297833f, 0.302971f, 0.117143f, -0.118876f, -0.080972f, -0.022568f}, + {-0.023121f, -0.022852f, -0.022326f, -0.021568f, -0.020616f, -0.019513f, -0.018315f, -0.017079f, -0.015867f, -0.014739f, -0.013755f, -0.012965f, -0.012415f, -0.012138f, -0.012157f, -0.012480f, -0.013101f, -0.014001f, -0.015146f, -0.016488f, -0.017970f, -0.019524f, -0.021074f, -0.022542f, -0.023848f, -0.024913f, -0.025665f, -0.026038f, -0.025979f, -0.025447f, -0.024416f, -0.022879f, -0.020843f, -0.018337f, -0.015404f, -0.012105f, -0.008515f, -0.004723f, -0.000825f, 0.003074f, 0.006867f, 0.010447f, 0.013710f, 0.016561f, 0.018913f, 0.020695f, 0.021850f, 0.022338f, 0.022141f, 0.021257f, 0.019706f, 0.017525f, 0.014769f, 0.011510f, 0.007830f, 0.003824f, -0.000408f, -0.004762f, -0.009133f, -0.013422f, -0.017535f, -0.021387f, -0.024907f, -0.028038f, -0.030737f, -0.032980f, -0.034759f, -0.036082f, -0.036974f, -0.037472f, -0.037625f, -0.037494f, -0.037141f, -0.036637f, -0.036049f, -0.035443f, -0.034879f, -0.034408f, -0.034071f, -0.033895f, -0.021504f, -0.013236f, 0.041524f, 0.010894f, -0.023477f, -0.049221f, 0.083276f, 0.127970f, 0.163269f, 0.021594f, -0.072866f, -0.165528f, -0.008057f, 0.026210f, -0.093974f, -0.136312f, + -0.127652f, -0.160700f, 0.083099f, 0.274765f, 0.025151f, 0.010641f, -0.072650f, -0.077463f, -0.058408f, 0.139417f, 0.095744f, 0.250590f, 0.020518f, 0.004510f, -0.119040f, -0.079281f, -0.044836f, 0.085468f, 0.150862f, 0.111181f, -0.008086f, -0.072516f, -0.070749f, -0.076794f, -0.031900f, 0.047623f, 0.107806f, 0.052183f, -0.021076f, -0.054978f, -0.040386f, 0.058062f, 0.040128f, -0.080490f, -0.098124f, -0.033613f, 0.013971f, 0.023914f, 0.110398f, -0.007314f, 0.039636f, -0.041975f, 0.031967f, -0.012918f, -0.141902f, 0.144984f, 0.120785f, -0.028039f, -0.078491f, 0.079219f, -0.182873f, -0.026340f, -0.016735f, 0.016552f, -0.130854f, -0.252620f, -0.302233f, 0.004013f, 0.297833f, 0.302971f, 0.117143f, -0.118876f, -0.080972f, -0.022568f} + }, + { + {0.034688f, 0.033944f, 0.032478f, 0.030329f, 0.027557f, 0.024237f, 0.020459f, 0.016325f, 0.011946f, 0.007436f, 0.002911f, -0.001515f, -0.005731f, -0.009639f, -0.013151f, -0.016191f, -0.018701f, -0.020640f, -0.021987f, -0.022735f, -0.022900f, -0.022511f, -0.021615f, -0.020272f, -0.018551f, -0.016532f, -0.014299f, -0.011939f, -0.009537f, -0.007177f, -0.004934f, -0.002876f, -0.001059f, 0.000471f, 0.001684f, 0.002562f, 0.003102f, 0.003313f, 0.003219f, 0.002853f, 0.002260f, 0.001489f, 0.000598f, -0.000354f, -0.001308f, -0.002205f, -0.002992f, -0.003619f, -0.004046f, -0.004242f, -0.004184f, -0.003860f, -0.003268f, -0.002418f, -0.001327f, -0.000022f, 0.001465f, 0.003095f, 0.004825f, 0.006610f, 0.008407f, 0.010173f, 0.011868f, 0.013457f, 0.014912f, 0.016210f, 0.017337f, 0.018284f, 0.019051f, 0.019646f, 0.020080f, 0.020372f, 0.020542f, 0.020616f, 0.020619f, 0.020575f, 0.020509f, 0.020440f, 0.020384f, 0.020353f, -0.013744f, -0.039606f, -0.038073f, -0.021709f, 0.011125f, 0.000688f, -0.055696f, 0.005090f, -0.073923f, -0.098478f, -0.068486f, -0.001483f, -0.054646f, 0.005715f, -0.020655f, -0.008419f, + -0.065972f, -0.030677f, 0.136130f, 0.158082f, -0.089988f, -0.028457f, 0.013578f, 0.105433f, 0.066346f, 0.035777f, 0.039117f, -0.028355f, -0.059865f, -0.059961f, 0.032987f, 0.093131f, -0.009634f, -0.065466f, -0.068966f, -0.004971f, 0.041955f, 0.100058f, 0.024953f, -0.005031f, -0.041486f, 0.032456f, 0.017195f, 0.092432f, 0.037094f, 0.014858f, -0.024121f, 0.000262f, -0.050715f, -0.054897f, -0.058748f, 0.078000f, 0.048332f, 0.028781f, -0.043575f, -0.102444f, -0.084352f, 0.009705f, 0.030990f, 0.041481f, 0.097902f, -0.093464f, -0.111859f, -0.067315f, 0.011407f, -0.023626f, 0.174361f, 0.128315f, 0.099916f, -0.030923f, -0.043553f, -0.093602f, 0.058886f, 0.063368f, 0.068266f, 0.058630f, 0.019437f, -0.126861f, -0.076242f, -0.027872f}, + {0.034688f, 0.033944f, 0.032478f, 0.030329f, 0.027557f, 0.024237f, 0.020459f, 0.016325f, 0.011946f, 0.007436f, 0.002911f, -0.001515f, -0.005731f, -0.009639f, -0.013151f, -0.016191f, -0.018701f, -0.020640f, -0.021987f, -0.022735f, -0.022900f, -0.022511f, -0.021615f, -0.020272f, -0.018551f, -0.016532f, -0.014299f, -0.011939f, -0.009537f, -0.007177f, -0.004934f, -0.002876f, -0.001059f, 0.000471f, 0.001684f, 0.002562f, 0.003102f, 0.003313f, 0.003219f, 0.002853f, 0.002260f, 0.001489f, 0.000598f, -0.000354f, -0.001308f, -0.002205f, -0.002992f, -0.003619f, -0.004046f, -0.004242f, -0.004184f, -0.003860f, -0.003268f, -0.002418f, -0.001327f, -0.000022f, 0.001465f, 0.003095f, 0.004825f, 0.006610f, 0.008407f, 0.010173f, 0.011868f, 0.013457f, 0.014912f, 0.016210f, 0.017337f, 0.018284f, 0.019051f, 0.019646f, 0.020080f, 0.020372f, 0.020542f, 0.020616f, 0.020619f, 0.020575f, 0.020509f, 0.020440f, 0.020384f, 0.020353f, -0.013744f, -0.039606f, -0.038073f, -0.021709f, 0.011125f, 0.000688f, -0.055696f, 0.005090f, -0.073923f, -0.098478f, -0.068486f, -0.001483f, -0.054646f, 0.005715f, -0.020655f, -0.008419f, + -0.065972f, -0.030677f, 0.136130f, 0.158082f, -0.089988f, -0.028457f, 0.013578f, 0.105433f, 0.066346f, 0.035777f, 0.039117f, -0.028355f, -0.059865f, -0.059961f, 0.032987f, 0.093131f, -0.009634f, -0.065466f, -0.068966f, -0.004971f, 0.041955f, 0.100058f, 0.024953f, -0.005031f, -0.041486f, 0.032456f, 0.017195f, 0.092432f, 0.037094f, 0.014858f, -0.024121f, 0.000262f, -0.050715f, -0.054897f, -0.058748f, 0.078000f, 0.048332f, 0.028781f, -0.043575f, -0.102444f, -0.084352f, 0.009705f, 0.030990f, 0.041481f, 0.097902f, -0.093464f, -0.111859f, -0.067315f, 0.011407f, -0.023626f, 0.174361f, 0.128315f, 0.099916f, -0.030923f, -0.043553f, -0.093602f, 0.058886f, 0.063368f, 0.068266f, 0.058630f, 0.019437f, -0.126861f, -0.076242f, -0.027872f} + }, + { + {0.020864f, 0.020628f, 0.020162f, 0.019480f, 0.018603f, 0.017556f, 0.016370f, 0.015079f, 0.013718f, 0.012325f, 0.010936f, 0.009588f, 0.008311f, 0.007135f, 0.006083f, 0.005172f, 0.004415f, 0.003816f, 0.003374f, 0.003082f, 0.002927f, 0.002891f, 0.002953f, 0.003086f, 0.003264f, 0.003461f, 0.003649f, 0.003803f, 0.003904f, 0.003932f, 0.003877f, 0.003730f, 0.003492f, 0.003167f, 0.002768f, 0.002310f, 0.001816f, 0.001313f, 0.000830f, 0.000398f, 0.000050f, -0.000182f, -0.000270f, -0.000186f, 0.000092f, 0.000581f, 0.001290f, 0.002224f, 0.003379f, 0.004744f, 0.006300f, 0.008023f, 0.009882f, 0.011841f, 0.013860f, 0.015896f, 0.017906f, 0.019847f, 0.021676f, 0.023356f, 0.024853f, 0.026138f, 0.027190f, 0.027995f, 0.028547f, 0.028848f, 0.028908f, 0.028744f, 0.028381f, 0.027849f, 0.027185f, 0.026425f, 0.025613f, 0.024788f, 0.023992f, 0.023264f, 0.022636f, 0.022138f, 0.021793f, 0.021617f, -0.006798f, -0.003380f, -0.005360f, -0.017063f, -0.024441f, 0.043640f, -0.014016f, -0.027673f, -0.004845f, -0.006445f, 0.066361f, 0.018852f, -0.028729f, 0.009025f, -0.075865f, -0.155041f, + -0.065489f, -0.024469f, 0.057814f, 0.045172f, -0.070320f, -0.017821f, 0.023709f, 0.091718f, 0.085051f, 0.038182f, 0.023982f, 0.035655f, -0.041871f, -0.058230f, -0.142784f, 0.010733f, 0.042238f, 0.012938f, 0.030339f, 0.040082f, -0.074463f, -0.094555f, -0.048446f, 0.012442f, 0.066522f, 0.105550f, 0.071961f, 0.023148f, -0.035299f, -0.018424f, -0.024981f, 0.052714f, 0.035572f, 0.020446f, -0.032645f, 0.007755f, -0.115069f, -0.015310f, 0.054485f, 0.019836f, 0.089972f, 0.082585f, -0.056621f, -0.120010f, 0.049043f, -0.064568f, 0.094450f, 0.076680f, 0.070013f, -0.072832f, -0.093618f, -0.007507f, 0.053902f, 0.078265f, 0.059600f, 0.027789f, 0.036114f, -0.078578f, -0.104827f, -0.034592f, 0.110081f, 0.044529f, -0.025476f, -0.014728f}, + {0.020864f, 0.020628f, 0.020162f, 0.019480f, 0.018603f, 0.017556f, 0.016370f, 0.015079f, 0.013718f, 0.012325f, 0.010936f, 0.009588f, 0.008311f, 0.007135f, 0.006083f, 0.005172f, 0.004415f, 0.003816f, 0.003374f, 0.003082f, 0.002927f, 0.002891f, 0.002953f, 0.003086f, 0.003264f, 0.003461f, 0.003649f, 0.003803f, 0.003904f, 0.003932f, 0.003877f, 0.003730f, 0.003492f, 0.003167f, 0.002768f, 0.002310f, 0.001816f, 0.001313f, 0.000830f, 0.000398f, 0.000050f, -0.000182f, -0.000270f, -0.000186f, 0.000092f, 0.000581f, 0.001290f, 0.002224f, 0.003379f, 0.004744f, 0.006300f, 0.008023f, 0.009882f, 0.011841f, 0.013860f, 0.015896f, 0.017906f, 0.019847f, 0.021676f, 0.023356f, 0.024853f, 0.026138f, 0.027190f, 0.027995f, 0.028547f, 0.028848f, 0.028908f, 0.028744f, 0.028381f, 0.027849f, 0.027185f, 0.026425f, 0.025613f, 0.024788f, 0.023992f, 0.023264f, 0.022636f, 0.022138f, 0.021793f, 0.021617f, -0.006798f, -0.003380f, -0.005360f, -0.017063f, -0.024441f, 0.043640f, -0.014016f, -0.027673f, -0.004845f, -0.006445f, 0.066361f, 0.018852f, -0.028729f, 0.009025f, -0.075865f, -0.155041f, + -0.065489f, -0.024469f, 0.057814f, 0.045172f, -0.070320f, -0.017821f, 0.023709f, 0.091718f, 0.085051f, 0.038182f, 0.023982f, 0.035655f, -0.041871f, -0.058230f, -0.142784f, 0.010733f, 0.042238f, 0.012938f, 0.030339f, 0.040082f, -0.074463f, -0.094555f, -0.048446f, 0.012442f, 0.066522f, 0.105550f, 0.071961f, 0.023148f, -0.035299f, -0.018424f, -0.024981f, 0.052714f, 0.035572f, 0.020446f, -0.032645f, 0.007755f, -0.115069f, -0.015310f, 0.054485f, 0.019836f, 0.089972f, 0.082585f, -0.056621f, -0.120010f, 0.049043f, -0.064568f, 0.094450f, 0.076680f, 0.070013f, -0.072832f, -0.093618f, -0.007507f, 0.053902f, 0.078265f, 0.059600f, 0.027789f, 0.036114f, -0.078578f, -0.104827f, -0.034592f, 0.110081f, 0.044529f, -0.025476f, -0.014728f} + } +}; +const float CRendBin_HOA3_HRIR_coeff_im_16kHz[16][BINAURAL_CHANNELS][160]={ + { + {0.000607f, 0.001803f, 0.002941f, 0.003987f, 0.004908f, 0.005676f, 0.006269f, 0.006670f, 0.006871f, 0.006869f, 0.006669f, 0.006284f, 0.005731f, 0.005035f, 0.004225f, 0.003335f, 0.002399f, 0.001456f, 0.000541f, -0.000310f, -0.001064f, -0.001692f, -0.002171f, -0.002481f, -0.002612f, -0.002559f, -0.002323f, -0.001912f, -0.001343f, -0.000635f, 0.000185f, 0.001087f, 0.002039f, 0.003006f, 0.003952f, 0.004845f, 0.005652f, 0.006344f, 0.006897f, 0.007292f, 0.007516f, 0.007561f, 0.007426f, 0.007117f, 0.006645f, 0.006027f, 0.005286f, 0.004447f, 0.003538f, 0.002591f, 0.001637f, 0.000706f, -0.000172f, -0.000971f, -0.001669f, -0.002246f, -0.002689f, -0.002991f, -0.003148f, -0.003164f, -0.003048f, -0.002812f, -0.002473f, -0.002053f, -0.001575f, -0.001062f, -0.000541f, -0.000035f, 0.000433f, 0.000842f, 0.001176f, 0.001423f, 0.001573f, 0.001623f, 0.001574f, 0.001432f, 0.001208f, 0.000914f, 0.000570f, 0.000194f, -0.459479f, -0.951950f, -0.610059f, 0.138191f, 0.698547f, 0.755794f, 0.243522f, -0.422384f, -0.808827f, -0.724027f, -0.130870f, 0.461622f, 0.869354f, 0.667862f, 0.030528f, -0.564204f, + -0.789139f, -0.468785f, 0.151851f, 0.678618f, 0.728923f, 0.337296f, -0.322960f, -0.700194f, -0.616049f, -0.096016f, 0.456132f, 0.702443f, 0.459349f, -0.073372f, -0.568805f, -0.671612f, -0.336520f, 0.244638f, 0.631826f, 0.616483f, 0.154529f, -0.375939f, -0.696641f, -0.506498f, -0.125118f, 0.355222f, 0.719377f, 0.553326f, 0.037725f, -0.527374f, -0.690573f, -0.394549f, 0.197449f, 0.629232f, 0.651166f, 0.208908f, -0.366272f, -0.701915f, -0.536790f, -0.016971f, 0.507334f, 0.650466f, 0.370984f, -0.166281f, -0.567325f, -0.572139f, -0.176415f, 0.334892f, 0.656461f, 0.489993f, -0.017768f, -0.524054f, -0.675884f, -0.371239f, 0.173392f, 0.605124f, 0.610706f, 0.200456f, -0.353918f, -0.678277f, -0.528640f, 0.011060f, 0.178932f, 0.016192f}, + {0.000607f, 0.001803f, 0.002941f, 0.003987f, 0.004908f, 0.005676f, 0.006269f, 0.006670f, 0.006871f, 0.006869f, 0.006669f, 0.006284f, 0.005731f, 0.005035f, 0.004225f, 0.003335f, 0.002399f, 0.001456f, 0.000541f, -0.000310f, -0.001064f, -0.001692f, -0.002171f, -0.002481f, -0.002612f, -0.002559f, -0.002323f, -0.001912f, -0.001343f, -0.000635f, 0.000185f, 0.001087f, 0.002039f, 0.003006f, 0.003952f, 0.004845f, 0.005652f, 0.006344f, 0.006897f, 0.007292f, 0.007516f, 0.007561f, 0.007426f, 0.007117f, 0.006645f, 0.006027f, 0.005286f, 0.004447f, 0.003538f, 0.002591f, 0.001637f, 0.000706f, -0.000172f, -0.000971f, -0.001669f, -0.002246f, -0.002689f, -0.002991f, -0.003148f, -0.003164f, -0.003048f, -0.002812f, -0.002473f, -0.002053f, -0.001575f, -0.001062f, -0.000541f, -0.000035f, 0.000433f, 0.000842f, 0.001176f, 0.001423f, 0.001573f, 0.001623f, 0.001574f, 0.001432f, 0.001208f, 0.000914f, 0.000570f, 0.000194f, -0.459479f, -0.951950f, -0.610059f, 0.138191f, 0.698547f, 0.755794f, 0.243522f, -0.422384f, -0.808827f, -0.724027f, -0.130870f, 0.461622f, 0.869354f, 0.667862f, 0.030528f, -0.564204f, + -0.789139f, -0.468785f, 0.151851f, 0.678618f, 0.728923f, 0.337296f, -0.322960f, -0.700194f, -0.616049f, -0.096016f, 0.456132f, 0.702443f, 0.459349f, -0.073372f, -0.568805f, -0.671612f, -0.336520f, 0.244638f, 0.631826f, 0.616483f, 0.154529f, -0.375939f, -0.696641f, -0.506498f, -0.125118f, 0.355222f, 0.719377f, 0.553326f, 0.037725f, -0.527374f, -0.690573f, -0.394549f, 0.197449f, 0.629232f, 0.651166f, 0.208908f, -0.366272f, -0.701915f, -0.536790f, -0.016971f, 0.507334f, 0.650466f, 0.370984f, -0.166281f, -0.567325f, -0.572139f, -0.176415f, 0.334892f, 0.656461f, 0.489993f, -0.017768f, -0.524054f, -0.675884f, -0.371239f, 0.173392f, 0.605124f, 0.610706f, 0.200456f, -0.353918f, -0.678277f, -0.528640f, 0.011060f, 0.178932f, 0.016192f} + }, + { + {-0.000028f, -0.000064f, -0.000047f, 0.000057f, 0.000277f, 0.000636f, 0.001148f, 0.001820f, 0.002652f, 0.003632f, 0.004741f, 0.005950f, 0.007223f, 0.008519f, 0.009791f, 0.010988f, 0.012060f, 0.012957f, 0.013630f, 0.014038f, 0.014144f, 0.013921f, 0.013351f, 0.012427f, 0.011152f, 0.009542f, 0.007624f, 0.005434f, 0.003019f, 0.000435f, -0.002256f, -0.004988f, -0.007692f, -0.010299f, -0.012741f, -0.014955f, -0.016883f, -0.018478f, -0.019699f, -0.020520f, -0.020923f, -0.020906f, -0.020476f, -0.019656f, -0.018475f, -0.016978f, -0.015215f, -0.013244f, -0.011126f, -0.008927f, -0.006712f, -0.004545f, -0.002485f, -0.000587f, 0.001104f, 0.002550f, 0.003724f, 0.004610f, 0.005201f, 0.005502f, 0.005529f, 0.005305f, 0.004864f, 0.004243f, 0.003487f, 0.002642f, 0.001754f, 0.000870f, 0.000034f, -0.000716f, -0.001348f, -0.001837f, -0.002165f, -0.002323f, -0.002313f, -0.002143f, -0.001829f, -0.001397f, -0.000875f, -0.000298f, 0.049516f, -0.016037f, -0.521945f, -0.600714f, -0.029292f, 0.813281f, 0.895652f, 0.289258f, -0.543355f, -0.625823f, -0.515181f, 0.034355f, 0.575869f, 0.500667f, 0.121120f, -0.361979f, + -0.606832f, -0.496113f, 0.005333f, 0.414143f, 0.580698f, 0.317632f, -0.123453f, -0.594664f, -0.557657f, -0.170560f, 0.347315f, 0.570357f, 0.524617f, 0.029358f, -0.385025f, -0.657018f, -0.442508f, 0.047188f, 0.566067f, 0.676706f, 0.403551f, -0.225043f, -0.701688f, -0.732583f, -0.153816f, 0.530671f, 0.759112f, 0.500505f, -0.145926f, -0.705732f, -0.797320f, -0.331604f, 0.352242f, 0.751981f, 0.630519f, 0.087976f, -0.520840f, -0.793402f, -0.527497f, 0.103267f, 0.614565f, 0.706032f, 0.311946f, -0.262008f, -0.694822f, -0.602989f, -0.144676f, 0.461612f, 0.706272f, 0.594113f, 0.074776f, -0.567699f, -0.848702f, -0.547886f, 0.099706f, 0.689166f, 0.802677f, 0.361753f, -0.323913f, -0.825131f, -0.715404f, -0.075227f, 0.194978f, 0.028869f}, + {0.000028f, 0.000064f, 0.000047f, -0.000057f, -0.000277f, -0.000636f, -0.001148f, -0.001820f, -0.002652f, -0.003632f, -0.004741f, -0.005950f, -0.007223f, -0.008519f, -0.009791f, -0.010988f, -0.012060f, -0.012957f, -0.013630f, -0.014038f, -0.014144f, -0.013921f, -0.013351f, -0.012427f, -0.011152f, -0.009542f, -0.007624f, -0.005434f, -0.003019f, -0.000435f, 0.002256f, 0.004988f, 0.007692f, 0.010299f, 0.012741f, 0.014955f, 0.016883f, 0.018478f, 0.019699f, 0.020520f, 0.020923f, 0.020906f, 0.020476f, 0.019656f, 0.018475f, 0.016978f, 0.015215f, 0.013244f, 0.011126f, 0.008927f, 0.006712f, 0.004545f, 0.002485f, 0.000587f, -0.001104f, -0.002550f, -0.003724f, -0.004610f, -0.005201f, -0.005502f, -0.005529f, -0.005305f, -0.004864f, -0.004243f, -0.003487f, -0.002642f, -0.001754f, -0.000870f, -0.000034f, 0.000716f, 0.001348f, 0.001837f, 0.002165f, 0.002323f, 0.002313f, 0.002143f, 0.001829f, 0.001397f, 0.000875f, 0.000298f, -0.049516f, 0.016037f, 0.521945f, 0.600714f, 0.029292f, -0.813281f, -0.895652f, -0.289258f, 0.543355f, 0.625823f, 0.515181f, -0.034355f, -0.575869f, -0.500667f, -0.121120f, 0.361979f, + 0.606832f, 0.496113f, -0.005333f, -0.414143f, -0.580698f, -0.317632f, 0.123453f, 0.594664f, 0.557657f, 0.170560f, -0.347315f, -0.570357f, -0.524617f, -0.029358f, 0.385025f, 0.657018f, 0.442508f, -0.047188f, -0.566067f, -0.676706f, -0.403551f, 0.225043f, 0.701688f, 0.732583f, 0.153816f, -0.530671f, -0.759112f, -0.500505f, 0.145926f, 0.705732f, 0.797320f, 0.331604f, -0.352242f, -0.751981f, -0.630519f, -0.087976f, 0.520840f, 0.793402f, 0.527497f, -0.103267f, -0.614565f, -0.706032f, -0.311946f, 0.262008f, 0.694822f, 0.602989f, 0.144676f, -0.461612f, -0.706272f, -0.594113f, -0.074776f, 0.567699f, 0.848702f, 0.547886f, -0.099706f, -0.689166f, -0.802677f, -0.361753f, 0.323913f, 0.825131f, 0.715404f, 0.075227f, -0.194978f, -0.028869f} + }, + { + {-0.002049f, -0.006137f, -0.010191f, -0.014189f, -0.018104f, -0.021908f, -0.025569f, -0.029052f, -0.032317f, -0.035324f, -0.038027f, -0.040382f, -0.042343f, -0.043866f, -0.044911f, -0.045440f, -0.045425f, -0.044844f, -0.043685f, -0.041947f, -0.039643f, -0.036797f, -0.033448f, -0.029645f, -0.025454f, -0.020950f, -0.016218f, -0.011354f, -0.006457f, -0.001632f, 0.003016f, 0.007386f, 0.011379f, 0.014907f, 0.017890f, 0.020262f, 0.021975f, 0.022994f, 0.023306f, 0.022916f, 0.021846f, 0.020138f, 0.017854f, 0.015067f, 0.011866f, 0.008351f, 0.004630f, 0.000813f, -0.002986f, -0.006656f, -0.010095f, -0.013206f, -0.015906f, -0.018127f, -0.019817f, -0.020943f, -0.021489f, -0.021460f, -0.020879f, -0.019786f, -0.018238f, -0.016306f, -0.014069f, -0.011618f, -0.009046f, -0.006448f, -0.003917f, -0.001539f, 0.000606f, 0.002452f, 0.003945f, 0.005047f, 0.005737f, 0.006012f, 0.005883f, 0.005383f, 0.004554f, 0.003455f, 0.002156f, 0.000733f, -0.053532f, -0.109196f, -0.086606f, 0.162774f, 0.099803f, -0.116839f, -0.089392f, 0.002755f, 0.080534f, 0.214951f, 0.393055f, 0.297771f, -0.042420f, 0.153547f, -0.076270f, -0.120569f, + -0.076604f, 0.071527f, 0.104329f, 0.154195f, 0.151670f, 0.126907f, -0.048054f, -0.206848f, -0.149739f, 0.103995f, 0.196515f, 0.126410f, -0.048876f, -0.168393f, -0.243439f, -0.096971f, 0.089561f, 0.213767f, 0.166510f, -0.022170f, -0.234052f, -0.229570f, -0.126619f, 0.074107f, -0.002399f, -0.073743f, 0.180669f, 0.201660f, 0.154371f, -0.075191f, -0.177736f, -0.194067f, -0.013786f, 0.187680f, 0.312445f, 0.144326f, -0.067784f, -0.307789f, -0.322030f, -0.101992f, 0.291143f, 0.459699f, 0.311581f, -0.124169f, -0.472205f, -0.547137f, -0.207796f, 0.230226f, 0.540592f, 0.296952f, -0.147969f, -0.489454f, -0.374088f, -0.015802f, 0.384106f, 0.405885f, 0.192708f, -0.211852f, -0.407725f, -0.306114f, 0.005897f, 0.206910f, 0.112954f, -0.018858f}, + {-0.002049f, -0.006137f, -0.010191f, -0.014189f, -0.018104f, -0.021908f, -0.025569f, -0.029052f, -0.032317f, -0.035324f, -0.038027f, -0.040382f, -0.042343f, -0.043866f, -0.044911f, -0.045440f, -0.045425f, -0.044844f, -0.043685f, -0.041947f, -0.039643f, -0.036797f, -0.033448f, -0.029645f, -0.025454f, -0.020950f, -0.016218f, -0.011354f, -0.006457f, -0.001632f, 0.003016f, 0.007386f, 0.011379f, 0.014907f, 0.017890f, 0.020262f, 0.021975f, 0.022994f, 0.023306f, 0.022916f, 0.021846f, 0.020138f, 0.017854f, 0.015067f, 0.011866f, 0.008351f, 0.004630f, 0.000813f, -0.002986f, -0.006656f, -0.010095f, -0.013206f, -0.015906f, -0.018127f, -0.019817f, -0.020943f, -0.021489f, -0.021460f, -0.020879f, -0.019786f, -0.018238f, -0.016306f, -0.014069f, -0.011618f, -0.009046f, -0.006448f, -0.003917f, -0.001539f, 0.000606f, 0.002452f, 0.003945f, 0.005047f, 0.005737f, 0.006012f, 0.005883f, 0.005383f, 0.004554f, 0.003455f, 0.002156f, 0.000733f, -0.053532f, -0.109196f, -0.086606f, 0.162774f, 0.099803f, -0.116839f, -0.089392f, 0.002755f, 0.080534f, 0.214951f, 0.393055f, 0.297771f, -0.042420f, 0.153547f, -0.076270f, -0.120569f, + -0.076604f, 0.071527f, 0.104329f, 0.154195f, 0.151670f, 0.126907f, -0.048054f, -0.206848f, -0.149739f, 0.103995f, 0.196515f, 0.126410f, -0.048876f, -0.168393f, -0.243439f, -0.096971f, 0.089561f, 0.213767f, 0.166510f, -0.022170f, -0.234052f, -0.229570f, -0.126619f, 0.074107f, -0.002399f, -0.073743f, 0.180669f, 0.201660f, 0.154371f, -0.075191f, -0.177736f, -0.194067f, -0.013786f, 0.187680f, 0.312445f, 0.144326f, -0.067784f, -0.307789f, -0.322030f, -0.101992f, 0.291143f, 0.459699f, 0.311581f, -0.124169f, -0.472205f, -0.547137f, -0.207796f, 0.230226f, 0.540592f, 0.296952f, -0.147969f, -0.489454f, -0.374088f, -0.015802f, 0.384106f, 0.405885f, 0.192708f, -0.211852f, -0.407725f, -0.306114f, 0.005897f, 0.206910f, 0.112954f, -0.018858f} + }, + { + {-0.002979f, -0.008865f, -0.014542f, -0.019875f, -0.024743f, -0.029039f, -0.032672f, -0.035573f, -0.037694f, -0.039013f, -0.039531f, -0.039270f, -0.038279f, -0.036624f, -0.034392f, -0.031683f, -0.028609f, -0.025289f, -0.021845f, -0.018401f, -0.015072f, -0.011968f, -0.009183f, -0.006800f, -0.004881f, -0.003472f, -0.002596f, -0.002257f, -0.002438f, -0.003104f, -0.004203f, -0.005666f, -0.007416f, -0.009364f, -0.011416f, -0.013477f, -0.015454f, -0.017259f, -0.018811f, -0.020042f, -0.020895f, -0.021330f, -0.021323f, -0.020864f, -0.019962f, -0.018642f, -0.016942f, -0.014912f, -0.012615f, -0.010120f, -0.007501f, -0.004836f, -0.002200f, 0.000335f, 0.002701f, 0.004842f, 0.006707f, 0.008262f, 0.009481f, 0.010354f, 0.010882f, 0.011077f, 0.010965f, 0.010580f, 0.009961f, 0.009156f, 0.008215f, 0.007188f, 0.006125f, 0.005072f, 0.004069f, 0.003150f, 0.002341f, 0.001658f, 0.001109f, 0.000692f, 0.000396f, 0.000204f, 0.000089f, 0.000024f, 0.018537f, -0.096517f, -0.083216f, -0.068111f, 0.126978f, -0.056448f, -0.042199f, -0.056482f, 0.074167f, -0.101773f, 0.145968f, 0.114355f, -0.071478f, 0.426941f, 0.538155f, 0.360363f, + -0.186372f, -0.505267f, -0.535014f, -0.210270f, 0.325886f, 0.716462f, 0.480627f, -0.077920f, -0.628838f, -0.734112f, -0.373618f, 0.360840f, 0.853482f, 0.697573f, 0.039156f, -0.676419f, -0.832215f, -0.419382f, 0.334418f, 0.737157f, 0.684616f, 0.031005f, -0.472156f, -0.677356f, -0.115395f, 0.531824f, 0.481723f, 0.216816f, -0.300102f, -0.550024f, -0.505144f, -0.111673f, 0.271949f, 0.498213f, 0.302390f, -0.032707f, -0.353690f, -0.393293f, -0.220326f, 0.106674f, 0.285470f, 0.295027f, 0.108805f, -0.127253f, -0.289592f, -0.237662f, -0.061127f, 0.192110f, 0.217903f, 0.245619f, 0.078096f, -0.183461f, -0.291423f, -0.188723f, 0.072156f, 0.188735f, 0.161749f, -0.007838f, -0.132645f, -0.168727f, -0.025125f, 0.068325f, 0.026307f, 0.002243f}, + {-0.002979f, -0.008865f, -0.014542f, -0.019875f, -0.024743f, -0.029039f, -0.032672f, -0.035573f, -0.037694f, -0.039013f, -0.039531f, -0.039270f, -0.038279f, -0.036624f, -0.034392f, -0.031683f, -0.028609f, -0.025289f, -0.021845f, -0.018401f, -0.015072f, -0.011968f, -0.009183f, -0.006800f, -0.004881f, -0.003472f, -0.002596f, -0.002257f, -0.002438f, -0.003104f, -0.004203f, -0.005666f, -0.007416f, -0.009364f, -0.011416f, -0.013477f, -0.015454f, -0.017259f, -0.018811f, -0.020042f, -0.020895f, -0.021330f, -0.021323f, -0.020864f, -0.019962f, -0.018642f, -0.016942f, -0.014912f, -0.012615f, -0.010120f, -0.007501f, -0.004836f, -0.002200f, 0.000335f, 0.002701f, 0.004842f, 0.006707f, 0.008262f, 0.009481f, 0.010354f, 0.010882f, 0.011077f, 0.010965f, 0.010580f, 0.009961f, 0.009156f, 0.008215f, 0.007188f, 0.006125f, 0.005072f, 0.004069f, 0.003150f, 0.002341f, 0.001658f, 0.001109f, 0.000692f, 0.000396f, 0.000204f, 0.000089f, 0.000024f, 0.018537f, -0.096517f, -0.083216f, -0.068111f, 0.126978f, -0.056448f, -0.042199f, -0.056482f, 0.074167f, -0.101773f, 0.145968f, 0.114355f, -0.071478f, 0.426941f, 0.538155f, 0.360363f, + -0.186372f, -0.505267f, -0.535014f, -0.210270f, 0.325886f, 0.716462f, 0.480627f, -0.077920f, -0.628838f, -0.734112f, -0.373618f, 0.360840f, 0.853482f, 0.697573f, 0.039156f, -0.676419f, -0.832215f, -0.419382f, 0.334418f, 0.737157f, 0.684616f, 0.031005f, -0.472156f, -0.677356f, -0.115395f, 0.531824f, 0.481723f, 0.216816f, -0.300102f, -0.550024f, -0.505144f, -0.111673f, 0.271949f, 0.498213f, 0.302390f, -0.032707f, -0.353690f, -0.393293f, -0.220326f, 0.106674f, 0.285470f, 0.295027f, 0.108805f, -0.127253f, -0.289592f, -0.237662f, -0.061127f, 0.192110f, 0.217903f, 0.245619f, 0.078096f, -0.183461f, -0.291423f, -0.188723f, 0.072156f, 0.188735f, 0.161749f, -0.007838f, -0.132645f, -0.168727f, -0.025125f, 0.068325f, 0.026307f, 0.002243f} + }, + { + {-0.001271f, -0.003806f, -0.006319f, -0.008795f, -0.011219f, -0.013571f, -0.015834f, -0.017985f, -0.020002f, -0.021861f, -0.023538f, -0.025008f, -0.026245f, -0.027228f, -0.027936f, -0.028352f, -0.028464f, -0.028264f, -0.027752f, -0.026933f, -0.025823f, -0.024440f, -0.022816f, -0.020986f, -0.018994f, -0.016889f, -0.014727f, -0.012565f, -0.010464f, -0.008486f, -0.006689f, -0.005131f, -0.003862f, -0.002926f, -0.002361f, -0.002191f, -0.002431f, -0.003086f, -0.004144f, -0.005586f, -0.007376f, -0.009470f, -0.011811f, -0.014337f, -0.016976f, -0.019652f, -0.022285f, -0.024798f, -0.027114f, -0.029160f, -0.030872f, -0.032194f, -0.033081f, -0.033500f, -0.033433f, -0.032875f, -0.031837f, -0.030342f, -0.028429f, -0.026147f, -0.023558f, -0.020731f, -0.017743f, -0.014674f, -0.011606f, -0.008619f, -0.005791f, -0.003191f, -0.000880f, 0.001090f, 0.002682f, 0.003872f, 0.004648f, 0.005017f, 0.004998f, 0.004624f, 0.003939f, 0.003003f, 0.001878f, 0.000639f, 0.010287f, -0.025862f, 0.003522f, -0.063971f, -0.010736f, -0.004017f, 0.065013f, 0.014935f, 0.011906f, 0.012134f, 0.059546f, 0.090188f, -0.032056f, 0.214094f, 0.315625f, 0.132257f, + -0.085677f, -0.176533f, -0.328515f, 0.006548f, 0.077254f, 0.172006f, 0.130077f, -0.050939f, -0.147319f, -0.175481f, -0.015915f, 0.183005f, 0.275542f, 0.163849f, -0.045876f, -0.231947f, -0.305143f, -0.103493f, 0.318577f, 0.372426f, 0.152045f, -0.142956f, -0.327595f, -0.317176f, 0.056505f, 0.373643f, 0.289109f, 0.066352f, -0.239115f, -0.369703f, -0.261113f, -0.021009f, 0.129663f, 0.303046f, 0.226674f, 0.047611f, -0.171431f, -0.269969f, -0.200202f, -0.019742f, 0.201558f, 0.202901f, 0.215602f, -0.179436f, -0.185167f, -0.199768f, -0.180089f, 0.056742f, 0.259194f, 0.198250f, -0.056107f, -0.255992f, -0.280588f, -0.053432f, 0.201582f, 0.267791f, 0.201270f, 0.005637f, -0.254080f, -0.299426f, -0.121162f, 0.120114f, 0.089266f, -0.000746f}, + {0.001271f, 0.003806f, 0.006319f, 0.008795f, 0.011219f, 0.013571f, 0.015834f, 0.017985f, 0.020002f, 0.021861f, 0.023538f, 0.025008f, 0.026245f, 0.027228f, 0.027936f, 0.028352f, 0.028464f, 0.028264f, 0.027752f, 0.026933f, 0.025823f, 0.024440f, 0.022816f, 0.020986f, 0.018994f, 0.016889f, 0.014727f, 0.012565f, 0.010464f, 0.008486f, 0.006689f, 0.005131f, 0.003862f, 0.002926f, 0.002361f, 0.002191f, 0.002431f, 0.003086f, 0.004144f, 0.005586f, 0.007376f, 0.009470f, 0.011811f, 0.014337f, 0.016976f, 0.019652f, 0.022285f, 0.024798f, 0.027114f, 0.029160f, 0.030872f, 0.032194f, 0.033081f, 0.033500f, 0.033433f, 0.032875f, 0.031837f, 0.030342f, 0.028429f, 0.026147f, 0.023558f, 0.020731f, 0.017743f, 0.014674f, 0.011606f, 0.008619f, 0.005791f, 0.003191f, 0.000880f, -0.001090f, -0.002682f, -0.003872f, -0.004648f, -0.005017f, -0.004998f, -0.004624f, -0.003939f, -0.003003f, -0.001878f, -0.000639f, -0.010287f, 0.025862f, -0.003522f, 0.063971f, 0.010736f, 0.004017f, -0.065013f, -0.014935f, -0.011906f, -0.012134f, -0.059546f, -0.090188f, 0.032056f, -0.214094f, -0.315625f, -0.132257f, + 0.085677f, 0.176533f, 0.328515f, -0.006548f, -0.077254f, -0.172006f, -0.130077f, 0.050939f, 0.147319f, 0.175481f, 0.015915f, -0.183005f, -0.275542f, -0.163849f, 0.045876f, 0.231947f, 0.305143f, 0.103493f, -0.318577f, -0.372426f, -0.152045f, 0.142956f, 0.327595f, 0.317176f, -0.056505f, -0.373643f, -0.289109f, -0.066352f, 0.239115f, 0.369703f, 0.261113f, 0.021009f, -0.129663f, -0.303046f, -0.226674f, -0.047611f, 0.171431f, 0.269969f, 0.200202f, 0.019742f, -0.201558f, -0.202901f, -0.215602f, 0.179436f, 0.185167f, 0.199768f, 0.180089f, -0.056742f, -0.259194f, -0.198250f, 0.056107f, 0.255992f, 0.280588f, 0.053432f, -0.201582f, -0.267791f, -0.201270f, -0.005637f, 0.254080f, 0.299426f, 0.121162f, -0.120114f, -0.089266f, 0.000746f} + }, + { + {-0.000422f, -0.001277f, -0.002162f, -0.003095f, -0.004091f, -0.005161f, -0.006311f, -0.007544f, -0.008852f, -0.010227f, -0.011651f, -0.013103f, -0.014557f, -0.015982f, -0.017346f, -0.018615f, -0.019755f, -0.020732f, -0.021517f, -0.022084f, -0.022411f, -0.022485f, -0.022297f, -0.021847f, -0.021144f, -0.020204f, -0.019048f, -0.017708f, -0.016220f, -0.014625f, -0.012968f, -0.011295f, -0.009655f, -0.008093f, -0.006653f, -0.005373f, -0.004289f, -0.003426f, -0.002802f, -0.002429f, -0.002307f, -0.002428f, -0.002776f, -0.003325f, -0.004044f, -0.004894f, -0.005832f, -0.006811f, -0.007785f, -0.008704f, -0.009524f, -0.010204f, -0.010706f, -0.011001f, -0.011067f, -0.010890f, -0.010467f, -0.009803f, -0.008912f, -0.007818f, -0.006551f, -0.005150f, -0.003656f, -0.002118f, -0.000584f, 0.000896f, 0.002275f, 0.003508f, 0.004556f, 0.005386f, 0.005974f, 0.006302f, 0.006362f, 0.006159f, 0.005703f, 0.005015f, 0.004125f, 0.003070f, 0.001892f, 0.000639f, 0.000874f, -0.009172f, 0.023843f, -0.041505f, -0.009350f, 0.003922f, -0.020028f, -0.094046f, 0.052693f, 0.228541f, 0.219444f, 0.055538f, -0.168216f, 0.262500f, 0.274549f, 0.105242f, + -0.095691f, -0.096583f, -0.189003f, 0.038250f, 0.080178f, 0.150798f, 0.117774f, -0.002444f, -0.089614f, -0.015171f, 0.036019f, -0.011500f, 0.023508f, -0.065226f, 0.117525f, 0.110962f, 0.095450f, -0.020307f, -0.110097f, -0.162295f, -0.073784f, 0.049988f, 0.119861f, 0.115686f, 0.042856f, -0.048324f, -0.038860f, -0.091620f, -0.060945f, -0.003739f, -0.001925f, 0.034329f, -0.047167f, 0.023862f, 0.043742f, -0.002122f, -0.029370f, -0.067574f, -0.061597f, 0.017295f, 0.125612f, 0.154726f, 0.032113f, -0.142604f, -0.178638f, -0.178711f, -0.050331f, 0.121150f, 0.166307f, 0.090444f, -0.066326f, -0.192987f, -0.107998f, 0.069844f, 0.218412f, 0.105896f, -0.096378f, -0.313954f, -0.225068f, 0.010541f, 0.290160f, 0.197862f, 0.008664f, -0.018292f}, + {0.000422f, 0.001277f, 0.002162f, 0.003095f, 0.004091f, 0.005161f, 0.006311f, 0.007544f, 0.008852f, 0.010227f, 0.011651f, 0.013103f, 0.014557f, 0.015982f, 0.017346f, 0.018615f, 0.019755f, 0.020732f, 0.021517f, 0.022084f, 0.022411f, 0.022485f, 0.022297f, 0.021847f, 0.021144f, 0.020204f, 0.019048f, 0.017708f, 0.016220f, 0.014625f, 0.012968f, 0.011295f, 0.009655f, 0.008093f, 0.006653f, 0.005373f, 0.004289f, 0.003426f, 0.002802f, 0.002429f, 0.002307f, 0.002428f, 0.002776f, 0.003325f, 0.004044f, 0.004894f, 0.005832f, 0.006811f, 0.007785f, 0.008704f, 0.009524f, 0.010204f, 0.010706f, 0.011001f, 0.011067f, 0.010890f, 0.010467f, 0.009803f, 0.008912f, 0.007818f, 0.006551f, 0.005150f, 0.003656f, 0.002118f, 0.000584f, -0.000896f, -0.002275f, -0.003508f, -0.004556f, -0.005386f, -0.005974f, -0.006302f, -0.006362f, -0.006159f, -0.005703f, -0.005015f, -0.004125f, -0.003070f, -0.001892f, -0.000639f, -0.000874f, 0.009172f, -0.023843f, 0.041505f, 0.009350f, -0.003922f, 0.020028f, 0.094046f, -0.052693f, -0.228541f, -0.219444f, -0.055538f, 0.168216f, -0.262500f, -0.274549f, -0.105242f, + 0.095691f, 0.096583f, 0.189003f, -0.038250f, -0.080178f, -0.150798f, -0.117774f, 0.002444f, 0.089614f, 0.015171f, -0.036019f, 0.011500f, -0.023508f, 0.065226f, -0.117525f, -0.110962f, -0.095450f, 0.020307f, 0.110097f, 0.162295f, 0.073784f, -0.049988f, -0.119861f, -0.115686f, -0.042856f, 0.048324f, 0.038860f, 0.091620f, 0.060945f, 0.003739f, 0.001925f, -0.034329f, 0.047167f, -0.023862f, -0.043742f, 0.002122f, 0.029370f, 0.067574f, 0.061597f, -0.017295f, -0.125612f, -0.154726f, -0.032113f, 0.142604f, 0.178638f, 0.178711f, 0.050331f, -0.121150f, -0.166307f, -0.090444f, 0.066326f, 0.192987f, 0.107998f, -0.069844f, -0.218412f, -0.105896f, 0.096378f, 0.313954f, 0.225068f, -0.010541f, -0.290160f, -0.197862f, -0.008664f, 0.018292f} + }, + { + {0.000526f, 0.001528f, 0.002380f, 0.002988f, 0.003270f, 0.003158f, 0.002603f, 0.001572f, 0.000058f, -0.001926f, -0.004346f, -0.007147f, -0.010252f, -0.013572f, -0.017003f, -0.020433f, -0.023745f, -0.026825f, -0.029561f, -0.031852f, -0.033611f, -0.034767f, -0.035272f, -0.035100f, -0.034248f, -0.032740f, -0.030623f, -0.027968f, -0.024868f, -0.021431f, -0.017782f, -0.014055f, -0.010386f, -0.006916f, -0.003776f, -0.001091f, 0.001031f, 0.002501f, 0.003251f, 0.003239f, 0.002447f, 0.000887f, -0.001404f, -0.004360f, -0.007895f, -0.011901f, -0.016251f, -0.020809f, -0.025429f, -0.029963f, -0.034266f, -0.038199f, -0.041639f, -0.044477f, -0.046626f, -0.048022f, -0.048626f, -0.048426f, -0.047439f, -0.045703f, -0.043285f, -0.040270f, -0.036762f, -0.032879f, -0.028747f, -0.024497f, -0.020259f, -0.016157f, -0.012304f, -0.008801f, -0.005727f, -0.003143f, -0.001085f, 0.000434f, 0.001426f, 0.001925f, 0.001988f, 0.001692f, 0.001126f, 0.000394f, 0.000377f, -0.004315f, 0.090374f, 0.028043f, -0.111509f, -0.071921f, -0.048123f, -0.059930f, 0.018585f, 0.180009f, 0.179706f, 0.053170f, -0.080109f, 0.203490f, 0.181306f, 0.087950f, + 0.202835f, 0.201270f, 0.109761f, -0.098069f, -0.005379f, 0.038498f, 0.004876f, 0.131472f, 0.196808f, 0.306935f, 0.136389f, -0.167915f, -0.169671f, -0.201512f, -0.030400f, 0.060340f, 0.275389f, 0.355090f, -0.074280f, -0.350298f, -0.380008f, -0.121118f, 0.078095f, 0.469865f, 0.156853f, -0.070127f, -0.116803f, -0.216734f, -0.033254f, 0.195144f, 0.232857f, -0.072946f, -0.518533f, -0.463226f, -0.050250f, 0.324958f, 0.555663f, 0.309110f, -0.070454f, -0.467882f, -0.439207f, -0.251808f, 0.240861f, 0.045852f, 0.246108f, 0.058463f, -0.269844f, -0.250916f, 0.103022f, -0.096435f, -0.322138f, -0.151651f, 0.043486f, 0.269199f, 0.226042f, 0.156135f, 0.005328f, -0.013613f, -0.187280f, -0.099045f, -0.136306f, 0.023148f, 0.048837f, 0.021336f}, + {0.000526f, 0.001528f, 0.002380f, 0.002988f, 0.003270f, 0.003158f, 0.002603f, 0.001572f, 0.000058f, -0.001926f, -0.004346f, -0.007147f, -0.010252f, -0.013572f, -0.017003f, -0.020433f, -0.023745f, -0.026825f, -0.029561f, -0.031852f, -0.033611f, -0.034767f, -0.035272f, -0.035100f, -0.034248f, -0.032740f, -0.030623f, -0.027968f, -0.024868f, -0.021431f, -0.017782f, -0.014055f, -0.010386f, -0.006916f, -0.003776f, -0.001091f, 0.001031f, 0.002501f, 0.003251f, 0.003239f, 0.002447f, 0.000887f, -0.001404f, -0.004360f, -0.007895f, -0.011901f, -0.016251f, -0.020809f, -0.025429f, -0.029963f, -0.034266f, -0.038199f, -0.041639f, -0.044477f, -0.046626f, -0.048022f, -0.048626f, -0.048426f, -0.047439f, -0.045703f, -0.043285f, -0.040270f, -0.036762f, -0.032879f, -0.028747f, -0.024497f, -0.020259f, -0.016157f, -0.012304f, -0.008801f, -0.005727f, -0.003143f, -0.001085f, 0.000434f, 0.001426f, 0.001925f, 0.001988f, 0.001692f, 0.001126f, 0.000394f, 0.000377f, -0.004315f, 0.090374f, 0.028043f, -0.111509f, -0.071921f, -0.048123f, -0.059930f, 0.018585f, 0.180009f, 0.179706f, 0.053170f, -0.080109f, 0.203490f, 0.181306f, 0.087950f, + 0.202835f, 0.201270f, 0.109761f, -0.098069f, -0.005379f, 0.038498f, 0.004876f, 0.131472f, 0.196808f, 0.306935f, 0.136389f, -0.167915f, -0.169671f, -0.201512f, -0.030400f, 0.060340f, 0.275389f, 0.355090f, -0.074280f, -0.350298f, -0.380008f, -0.121118f, 0.078095f, 0.469865f, 0.156853f, -0.070127f, -0.116803f, -0.216734f, -0.033254f, 0.195144f, 0.232857f, -0.072946f, -0.518533f, -0.463226f, -0.050250f, 0.324958f, 0.555663f, 0.309110f, -0.070454f, -0.467882f, -0.439207f, -0.251808f, 0.240861f, 0.045852f, 0.246108f, 0.058463f, -0.269844f, -0.250916f, 0.103022f, -0.096435f, -0.322138f, -0.151651f, 0.043486f, 0.269199f, 0.226042f, 0.156135f, 0.005328f, -0.013613f, -0.187280f, -0.099045f, -0.136306f, 0.023148f, 0.048837f, 0.021336f} + }, + { + {-0.002594f, -0.007712f, -0.012620f, -0.017185f, -0.021288f, -0.024824f, -0.027705f, -0.029870f, -0.031276f, -0.031910f, -0.031781f, -0.030924f, -0.029396f, -0.027276f, -0.024661f, -0.021660f, -0.018394f, -0.014987f, -0.011567f, -0.008255f, -0.005167f, -0.002405f, -0.000055f, 0.001814f, 0.003156f, 0.003943f, 0.004175f, 0.003871f, 0.003071f, 0.001837f, 0.000245f, -0.001616f, -0.003644f, -0.005734f, -0.007780f, -0.009677f, -0.011328f, -0.012647f, -0.013560f, -0.014012f, -0.013966f, -0.013404f, -0.012331f, -0.010768f, -0.008761f, -0.006369f, -0.003667f, -0.000745f, 0.002303f, 0.005375f, 0.008369f, 0.011187f, 0.013736f, 0.015934f, 0.017713f, 0.019021f, 0.019821f, 0.020099f, 0.019857f, 0.019117f, 0.017919f, 0.016319f, 0.014386f, 0.012201f, 0.009851f, 0.007428f, 0.005024f, 0.002726f, 0.000617f, -0.001232f, -0.002763f, -0.003932f, -0.004714f, -0.005098f, -0.005093f, -0.004726f, -0.004038f, -0.003084f, -0.001932f, -0.000658f, -0.012474f, -0.068409f, 0.081137f, 0.018024f, -0.038156f, -0.198590f, -0.119597f, 0.145225f, 0.030798f, 0.246762f, 0.335612f, 0.283146f, 0.025065f, 0.021730f, 0.026732f, 0.074654f, + -0.011328f, -0.043913f, 0.087894f, -0.028229f, 0.021072f, -0.015218f, -0.005244f, -0.008447f, 0.003756f, -0.028338f, 0.020207f, 0.006246f, -0.029437f, -0.039636f, 0.036150f, 0.052762f, 0.055867f, -0.002273f, 0.056749f, 0.072060f, 0.125021f, -0.022258f, -0.103383f, -0.101215f, 0.051122f, 0.255149f, 0.083638f, -0.008516f, -0.206175f, -0.242208f, -0.099596f, 0.098204f, 0.220255f, 0.238644f, 0.067428f, -0.101735f, -0.242515f, -0.144450f, 0.001750f, 0.191021f, 0.214892f, 0.175162f, -0.065258f, -0.003858f, -0.178822f, -0.105369f, 0.148433f, 0.235889f, 0.048148f, 0.214517f, 0.280683f, -0.041329f, -0.275217f, -0.446013f, -0.180500f, 0.131700f, 0.348173f, 0.110471f, -0.088639f, -0.346427f, -0.207886f, -0.015941f, 0.061582f, 0.008943f}, + {-0.002594f, -0.007712f, -0.012620f, -0.017185f, -0.021288f, -0.024824f, -0.027705f, -0.029870f, -0.031276f, -0.031910f, -0.031781f, -0.030924f, -0.029396f, -0.027276f, -0.024661f, -0.021660f, -0.018394f, -0.014987f, -0.011567f, -0.008255f, -0.005167f, -0.002405f, -0.000055f, 0.001814f, 0.003156f, 0.003943f, 0.004175f, 0.003871f, 0.003071f, 0.001837f, 0.000245f, -0.001616f, -0.003644f, -0.005734f, -0.007780f, -0.009677f, -0.011328f, -0.012647f, -0.013560f, -0.014012f, -0.013966f, -0.013404f, -0.012331f, -0.010768f, -0.008761f, -0.006369f, -0.003667f, -0.000745f, 0.002303f, 0.005375f, 0.008369f, 0.011187f, 0.013736f, 0.015934f, 0.017713f, 0.019021f, 0.019821f, 0.020099f, 0.019857f, 0.019117f, 0.017919f, 0.016319f, 0.014386f, 0.012201f, 0.009851f, 0.007428f, 0.005024f, 0.002726f, 0.000617f, -0.001232f, -0.002763f, -0.003932f, -0.004714f, -0.005098f, -0.005093f, -0.004726f, -0.004038f, -0.003084f, -0.001932f, -0.000658f, -0.012474f, -0.068409f, 0.081137f, 0.018024f, -0.038156f, -0.198590f, -0.119597f, 0.145225f, 0.030798f, 0.246762f, 0.335612f, 0.283146f, 0.025065f, 0.021730f, 0.026732f, 0.074654f, + -0.011328f, -0.043913f, 0.087894f, -0.028229f, 0.021072f, -0.015218f, -0.005244f, -0.008447f, 0.003756f, -0.028338f, 0.020207f, 0.006246f, -0.029437f, -0.039636f, 0.036150f, 0.052762f, 0.055867f, -0.002273f, 0.056749f, 0.072060f, 0.125021f, -0.022258f, -0.103383f, -0.101215f, 0.051122f, 0.255149f, 0.083638f, -0.008516f, -0.206175f, -0.242208f, -0.099596f, 0.098204f, 0.220255f, 0.238644f, 0.067428f, -0.101735f, -0.242515f, -0.144450f, 0.001750f, 0.191021f, 0.214892f, 0.175162f, -0.065258f, -0.003858f, -0.178822f, -0.105369f, 0.148433f, 0.235889f, 0.048148f, 0.214517f, 0.280683f, -0.041329f, -0.275217f, -0.446013f, -0.180500f, 0.131700f, 0.348173f, 0.110471f, -0.088639f, -0.346427f, -0.207886f, -0.015941f, 0.061582f, 0.008943f} + }, + { + {-0.001692f, -0.005028f, -0.008216f, -0.011163f, -0.013784f, -0.015999f, -0.017743f, -0.018963f, -0.019618f, -0.019685f, -0.019158f, -0.018044f, -0.016368f, -0.014170f, -0.011503f, -0.008432f, -0.005034f, -0.001394f, 0.002400f, 0.006252f, 0.010069f, 0.013758f, 0.017231f, 0.020405f, 0.023206f, 0.025572f, 0.027450f, 0.028802f, 0.029603f, 0.029841f, 0.029520f, 0.028655f, 0.027275f, 0.025421f, 0.023143f, 0.020501f, 0.017560f, 0.014391f, 0.011068f, 0.007665f, 0.004257f, 0.000915f, -0.002296f, -0.005315f, -0.008088f, -0.010571f, -0.012727f, -0.014530f, -0.015961f, -0.017015f, -0.017691f, -0.018000f, -0.017960f, -0.017595f, -0.016937f, -0.016020f, -0.014885f, -0.013572f, -0.012124f, -0.010586f, -0.008998f, -0.007401f, -0.005833f, -0.004328f, -0.002917f, -0.001626f, -0.000476f, 0.000517f, 0.001341f, 0.001989f, 0.002459f, 0.002753f, 0.002880f, 0.002848f, 0.002672f, 0.002368f, 0.001958f, 0.001461f, 0.000902f, 0.000305f, 0.052321f, -0.018258f, -0.014124f, -0.007458f, 0.085842f, 0.029245f, 0.127256f, 0.076902f, 0.062256f, -0.207538f, -0.265521f, -0.146999f, 0.049472f, 0.221169f, 0.277951f, 0.057988f, + -0.163846f, -0.207114f, -0.156198f, -0.020525f, 0.023538f, 0.008611f, -0.073772f, -0.004242f, 0.012621f, 0.045953f, 0.085524f, 0.034636f, -0.040649f, -0.135494f, -0.246060f, -0.068648f, 0.063436f, 0.214739f, 0.183131f, 0.017595f, -0.223861f, -0.242391f, -0.153182f, 0.140545f, 0.085957f, 0.013702f, 0.005574f, -0.030685f, -0.047703f, -0.053997f, 0.043684f, 0.077892f, -0.121951f, -0.094316f, -0.020622f, 0.048746f, 0.099422f, 0.132104f, 0.049686f, -0.051357f, -0.107707f, -0.102422f, -0.027663f, 0.017056f, 0.121416f, 0.099038f, -0.013366f, -0.137160f, -0.169993f, -0.174993f, -0.068867f, 0.136114f, 0.298336f, 0.217147f, 0.060197f, -0.132593f, -0.302768f, -0.377783f, -0.187963f, 0.111969f, 0.290674f, 0.187006f, -0.004044f, -0.005747f}, + {-0.001692f, -0.005028f, -0.008216f, -0.011163f, -0.013784f, -0.015999f, -0.017743f, -0.018963f, -0.019618f, -0.019685f, -0.019158f, -0.018044f, -0.016368f, -0.014170f, -0.011503f, -0.008432f, -0.005034f, -0.001394f, 0.002400f, 0.006252f, 0.010069f, 0.013758f, 0.017231f, 0.020405f, 0.023206f, 0.025572f, 0.027450f, 0.028802f, 0.029603f, 0.029841f, 0.029520f, 0.028655f, 0.027275f, 0.025421f, 0.023143f, 0.020501f, 0.017560f, 0.014391f, 0.011068f, 0.007665f, 0.004257f, 0.000915f, -0.002296f, -0.005315f, -0.008088f, -0.010571f, -0.012727f, -0.014530f, -0.015961f, -0.017015f, -0.017691f, -0.018000f, -0.017960f, -0.017595f, -0.016937f, -0.016020f, -0.014885f, -0.013572f, -0.012124f, -0.010586f, -0.008998f, -0.007401f, -0.005833f, -0.004328f, -0.002917f, -0.001626f, -0.000476f, 0.000517f, 0.001341f, 0.001989f, 0.002459f, 0.002753f, 0.002880f, 0.002848f, 0.002672f, 0.002368f, 0.001958f, 0.001461f, 0.000902f, 0.000305f, 0.052321f, -0.018258f, -0.014124f, -0.007458f, 0.085842f, 0.029245f, 0.127256f, 0.076902f, 0.062256f, -0.207538f, -0.265521f, -0.146999f, 0.049472f, 0.221169f, 0.277951f, 0.057988f, + -0.163846f, -0.207114f, -0.156198f, -0.020525f, 0.023538f, 0.008611f, -0.073772f, -0.004242f, 0.012621f, 0.045953f, 0.085524f, 0.034636f, -0.040649f, -0.135494f, -0.246060f, -0.068648f, 0.063436f, 0.214739f, 0.183131f, 0.017595f, -0.223861f, -0.242391f, -0.153182f, 0.140545f, 0.085957f, 0.013702f, 0.005574f, -0.030685f, -0.047703f, -0.053997f, 0.043684f, 0.077892f, -0.121951f, -0.094316f, -0.020622f, 0.048746f, 0.099422f, 0.132104f, 0.049686f, -0.051357f, -0.107707f, -0.102422f, -0.027663f, 0.017056f, 0.121416f, 0.099038f, -0.013366f, -0.137160f, -0.169993f, -0.174993f, -0.068867f, 0.136114f, 0.298336f, 0.217147f, 0.060197f, -0.132593f, -0.302768f, -0.377783f, -0.187963f, 0.111969f, 0.290674f, 0.187006f, -0.004044f, -0.005747f} + }, + { + {-0.000558f, -0.001666f, -0.002744f, -0.003775f, -0.004741f, -0.005625f, -0.006412f, -0.007089f, -0.007643f, -0.008067f, -0.008352f, -0.008496f, -0.008497f, -0.008358f, -0.008085f, -0.007687f, -0.007176f, -0.006567f, -0.005880f, -0.005135f, -0.004356f, -0.003569f, -0.002801f, -0.002080f, -0.001434f, -0.000891f, -0.000478f, -0.000218f, -0.000135f, -0.000246f, -0.000566f, -0.001105f, -0.001866f, -0.002850f, -0.004049f, -0.005450f, -0.007035f, -0.008780f, -0.010654f, -0.012624f, -0.014652f, -0.016695f, -0.018712f, -0.020655f, -0.022482f, -0.024149f, -0.025614f, -0.026839f, -0.027792f, -0.028446f, -0.028779f, -0.028778f, -0.028436f, -0.027756f, -0.026748f, -0.025430f, -0.023827f, -0.021974f, -0.019908f, -0.017674f, -0.015321f, -0.012901f, -0.010465f, -0.008068f, -0.005760f, -0.003590f, -0.001603f, 0.000163f, 0.001675f, 0.002908f, 0.003846f, 0.004482f, 0.004816f, 0.004858f, 0.004627f, 0.004150f, 0.003460f, 0.002599f, 0.001611f, 0.000546f, -0.003770f, 0.007996f, 0.005573f, 0.016472f, 0.007182f, 0.044288f, 0.011606f, -0.007505f, -0.062271f, 0.017093f, 0.068697f, 0.092675f, -0.020103f, -0.156687f, -0.258295f, -0.046116f, + 0.049780f, 0.114779f, 0.121823f, 0.014310f, 0.050240f, 0.051792f, -0.064670f, -0.151209f, 0.009424f, 0.066156f, 0.084879f, 0.123221f, 0.031022f, -0.025727f, -0.025793f, -0.123459f, -0.062745f, 0.067638f, 0.121865f, 0.061490f, -0.090830f, -0.111481f, -0.066207f, 0.040890f, 0.153123f, 0.064350f, -0.048007f, -0.108089f, -0.125505f, -0.055847f, 0.066616f, 0.080845f, 0.058894f, 0.044339f, 0.007831f, 0.014588f, -0.023608f, -0.060232f, -0.028704f, -0.015617f, 0.008922f, 0.020130f, 0.115085f, -0.084148f, -0.032057f, -0.027896f, -0.178202f, -0.035726f, 0.103966f, -0.004503f, -0.107328f, -0.051314f, 0.040183f, 0.106784f, 0.123118f, 0.050550f, -0.031071f, -0.123654f, -0.125188f, 0.033855f, 0.170898f, 0.080395f, -0.029415f, 0.001535f}, + {0.000558f, 0.001666f, 0.002744f, 0.003775f, 0.004741f, 0.005625f, 0.006412f, 0.007089f, 0.007643f, 0.008067f, 0.008352f, 0.008496f, 0.008497f, 0.008358f, 0.008085f, 0.007687f, 0.007176f, 0.006567f, 0.005880f, 0.005135f, 0.004356f, 0.003569f, 0.002801f, 0.002080f, 0.001434f, 0.000891f, 0.000478f, 0.000218f, 0.000135f, 0.000246f, 0.000566f, 0.001105f, 0.001866f, 0.002850f, 0.004049f, 0.005450f, 0.007035f, 0.008780f, 0.010654f, 0.012624f, 0.014652f, 0.016695f, 0.018712f, 0.020655f, 0.022482f, 0.024149f, 0.025614f, 0.026839f, 0.027792f, 0.028446f, 0.028779f, 0.028778f, 0.028436f, 0.027756f, 0.026748f, 0.025430f, 0.023827f, 0.021974f, 0.019908f, 0.017674f, 0.015321f, 0.012901f, 0.010465f, 0.008068f, 0.005760f, 0.003590f, 0.001603f, -0.000163f, -0.001675f, -0.002908f, -0.003846f, -0.004482f, -0.004816f, -0.004858f, -0.004627f, -0.004150f, -0.003460f, -0.002599f, -0.001611f, -0.000546f, 0.003770f, -0.007996f, -0.005573f, -0.016472f, -0.007182f, -0.044288f, -0.011606f, 0.007505f, 0.062271f, -0.017093f, -0.068697f, -0.092675f, 0.020103f, 0.156687f, 0.258295f, 0.046116f, + -0.049780f, -0.114779f, -0.121823f, -0.014310f, -0.050240f, -0.051792f, 0.064670f, 0.151209f, -0.009424f, -0.066156f, -0.084879f, -0.123221f, -0.031022f, 0.025727f, 0.025793f, 0.123459f, 0.062745f, -0.067638f, -0.121865f, -0.061490f, 0.090830f, 0.111481f, 0.066207f, -0.040890f, -0.153123f, -0.064350f, 0.048007f, 0.108089f, 0.125505f, 0.055847f, -0.066616f, -0.080845f, -0.058894f, -0.044339f, -0.007831f, -0.014588f, 0.023608f, 0.060232f, 0.028704f, 0.015617f, -0.008922f, -0.020130f, -0.115085f, 0.084148f, 0.032057f, 0.027896f, 0.178202f, 0.035726f, -0.103966f, 0.004503f, 0.107328f, 0.051314f, -0.040183f, -0.106784f, -0.123118f, -0.050550f, 0.031071f, 0.123654f, 0.125188f, -0.033855f, -0.170898f, -0.080395f, 0.029415f, -0.001535f} + }, + { + {0.000862f, 0.002556f, 0.004157f, 0.005606f, 0.006850f, 0.007842f, 0.008545f, 0.008928f, 0.008973f, 0.008674f, 0.008032f, 0.007065f, 0.005796f, 0.004261f, 0.002503f, 0.000572f, -0.001476f, -0.003582f, -0.005686f, -0.007728f, -0.009650f, -0.011400f, -0.012929f, -0.014196f, -0.015171f, -0.015829f, -0.016158f, -0.016154f, -0.015822f, -0.015178f, -0.014245f, -0.013053f, -0.011640f, -0.010045f, -0.008313f, -0.006489f, -0.004618f, -0.002742f, -0.000902f, 0.000867f, 0.002535f, 0.004078f, 0.005479f, 0.006727f, 0.007819f, 0.008758f, 0.009553f, 0.010216f, 0.010766f, 0.011222f, 0.011608f, 0.011945f, 0.012255f, 0.012557f, 0.012867f, 0.013199f, 0.013560f, 0.013952f, 0.014374f, 0.014816f, 0.015268f, 0.015710f, 0.016124f, 0.016484f, 0.016766f, 0.016942f, 0.016989f, 0.016882f, 0.016600f, 0.016127f, 0.015449f, 0.014561f, 0.013461f, 0.012156f, 0.010657f, 0.008982f, 0.007154f, 0.005202f, 0.003159f, 0.001059f, 0.023448f, 0.005825f, -0.022065f, -0.036579f, -0.016601f, -0.039625f, -0.054493f, -0.094171f, -0.105878f, 0.148193f, 0.209846f, 0.052288f, -0.006002f, 0.049658f, 0.028289f, -0.014931f, + 0.041590f, 0.089350f, 0.005856f, 0.044491f, -0.012375f, -0.061657f, 0.039654f, -0.012926f, 0.101497f, 0.021184f, 0.055042f, -0.077356f, -0.100797f, 0.005554f, 0.024743f, 0.019643f, -0.047675f, -0.021206f, 0.021776f, 0.022907f, 0.057359f, 0.057288f, -0.061156f, -0.036074f, -0.012394f, 0.046598f, 0.064612f, 0.016399f, -0.062802f, -0.118880f, -0.064031f, 0.021831f, -0.004281f, 0.062860f, 0.102262f, 0.063315f, -0.050738f, -0.078626f, -0.040798f, 0.042795f, 0.103842f, 0.131407f, -0.012216f, -0.012968f, -0.147305f, -0.093946f, 0.099562f, 0.170198f, 0.054699f, 0.159959f, 0.064843f, -0.126388f, -0.082527f, -0.075983f, 0.091236f, 0.113720f, 0.068035f, -0.142226f, -0.248413f, -0.166680f, -0.111711f, -0.032544f, 0.089623f, -0.019143f}, + {-0.000862f, -0.002556f, -0.004157f, -0.005606f, -0.006850f, -0.007842f, -0.008545f, -0.008928f, -0.008973f, -0.008674f, -0.008032f, -0.007065f, -0.005796f, -0.004261f, -0.002503f, -0.000572f, 0.001476f, 0.003582f, 0.005686f, 0.007728f, 0.009650f, 0.011400f, 0.012929f, 0.014196f, 0.015171f, 0.015829f, 0.016158f, 0.016154f, 0.015822f, 0.015178f, 0.014245f, 0.013053f, 0.011640f, 0.010045f, 0.008313f, 0.006489f, 0.004618f, 0.002742f, 0.000902f, -0.000867f, -0.002535f, -0.004078f, -0.005479f, -0.006727f, -0.007819f, -0.008758f, -0.009553f, -0.010216f, -0.010766f, -0.011222f, -0.011608f, -0.011945f, -0.012255f, -0.012557f, -0.012867f, -0.013199f, -0.013560f, -0.013952f, -0.014374f, -0.014816f, -0.015268f, -0.015710f, -0.016124f, -0.016484f, -0.016766f, -0.016942f, -0.016989f, -0.016882f, -0.016600f, -0.016127f, -0.015449f, -0.014561f, -0.013461f, -0.012156f, -0.010657f, -0.008982f, -0.007154f, -0.005202f, -0.003159f, -0.001059f, -0.023448f, -0.005825f, 0.022065f, 0.036579f, 0.016601f, 0.039625f, 0.054493f, 0.094171f, 0.105878f, -0.148193f, -0.209846f, -0.052288f, 0.006002f, -0.049658f, -0.028289f, 0.014931f, + -0.041590f, -0.089350f, -0.005856f, -0.044491f, 0.012375f, 0.061657f, -0.039654f, 0.012926f, -0.101497f, -0.021184f, -0.055042f, 0.077356f, 0.100797f, -0.005554f, -0.024743f, -0.019643f, 0.047675f, 0.021206f, -0.021776f, -0.022907f, -0.057359f, -0.057288f, 0.061156f, 0.036074f, 0.012394f, -0.046598f, -0.064612f, -0.016399f, 0.062802f, 0.118880f, 0.064031f, -0.021831f, 0.004281f, -0.062860f, -0.102262f, -0.063315f, 0.050738f, 0.078626f, 0.040798f, -0.042795f, -0.103842f, -0.131407f, 0.012216f, 0.012968f, 0.147305f, 0.093946f, -0.099562f, -0.170198f, -0.054699f, -0.159959f, -0.064843f, 0.126388f, 0.082527f, 0.075983f, -0.091236f, -0.113720f, -0.068035f, 0.142226f, 0.248413f, 0.166680f, 0.111711f, 0.032544f, -0.089623f, 0.019143f} + }, + { + {0.002838f, 0.008432f, 0.013783f, 0.018737f, 0.023156f, 0.026916f, 0.029917f, 0.032084f, 0.033369f, 0.033752f, 0.033243f, 0.031880f, 0.029728f, 0.026877f, 0.023436f, 0.019533f, 0.015308f, 0.010907f, 0.006479f, 0.002172f, -0.001878f, -0.005545f, -0.008720f, -0.011315f, -0.013266f, -0.014533f, -0.015101f, -0.014982f, -0.014214f, -0.012856f, -0.010989f, -0.008711f, -0.006132f, -0.003373f, -0.000558f, 0.002190f, 0.004751f, 0.007016f, 0.008888f, 0.010286f, 0.011150f, 0.011440f, 0.011137f, 0.010247f, 0.008796f, 0.006831f, 0.004417f, 0.001634f, -0.001424f, -0.004656f, -0.007955f, -0.011217f, -0.014336f, -0.017218f, -0.019776f, -0.021940f, -0.023652f, -0.024875f, -0.025587f, -0.025788f, -0.025492f, -0.024734f, -0.023560f, -0.022031f, -0.020217f, -0.018193f, -0.016039f, -0.013833f, -0.011651f, -0.009559f, -0.007617f, -0.005872f, -0.004357f, -0.003092f, -0.002082f, -0.001315f, -0.000769f, -0.000408f, -0.000187f, -0.000052f, -0.032260f, 0.033530f, -0.015083f, 0.002969f, -0.029097f, 0.006049f, -0.162991f, -0.104632f, 0.022061f, 0.115641f, 0.098353f, 0.071940f, 0.020150f, 0.220503f, 0.076297f, -0.054021f, + -0.123732f, -0.059160f, 0.065687f, 0.048633f, -0.021224f, -0.090388f, -0.047552f, -0.073986f, -0.001862f, 0.017505f, 0.031101f, 0.052275f, 0.045599f, 0.002273f, -0.071046f, -0.120569f, -0.092279f, 0.091367f, 0.131120f, 0.081603f, -0.005236f, -0.045101f, -0.126606f, 0.063292f, 0.010243f, -0.173430f, -0.029654f, -0.041122f, 0.128891f, 0.149425f, 0.109340f, -0.140884f, -0.253227f, -0.245313f, 0.003423f, 0.227577f, 0.418611f, 0.180603f, -0.007698f, -0.355744f, -0.397453f, -0.237559f, 0.177173f, 0.166279f, 0.281223f, 0.134825f, -0.161094f, -0.180949f, -0.014477f, -0.137344f, -0.120363f, -0.006787f, -0.072081f, -0.045147f, -0.078544f, 0.079862f, 0.147038f, 0.191205f, 0.028206f, -0.067228f, -0.245851f, -0.108712f, 0.005946f, 0.041767f}, + {-0.002838f, -0.008432f, -0.013783f, -0.018737f, -0.023156f, -0.026916f, -0.029917f, -0.032084f, -0.033369f, -0.033752f, -0.033243f, -0.031880f, -0.029728f, -0.026877f, -0.023436f, -0.019533f, -0.015308f, -0.010907f, -0.006479f, -0.002172f, 0.001878f, 0.005545f, 0.008720f, 0.011315f, 0.013266f, 0.014533f, 0.015101f, 0.014982f, 0.014214f, 0.012856f, 0.010989f, 0.008711f, 0.006132f, 0.003373f, 0.000558f, -0.002190f, -0.004751f, -0.007016f, -0.008888f, -0.010286f, -0.011150f, -0.011440f, -0.011137f, -0.010247f, -0.008796f, -0.006831f, -0.004417f, -0.001634f, 0.001424f, 0.004656f, 0.007955f, 0.011217f, 0.014336f, 0.017218f, 0.019776f, 0.021940f, 0.023652f, 0.024875f, 0.025587f, 0.025788f, 0.025492f, 0.024734f, 0.023560f, 0.022031f, 0.020217f, 0.018193f, 0.016039f, 0.013833f, 0.011651f, 0.009559f, 0.007617f, 0.005872f, 0.004357f, 0.003092f, 0.002082f, 0.001315f, 0.000769f, 0.000408f, 0.000187f, 0.000052f, 0.032260f, -0.033530f, 0.015083f, -0.002969f, 0.029097f, -0.006049f, 0.162991f, 0.104632f, -0.022061f, -0.115641f, -0.098353f, -0.071940f, -0.020150f, -0.220503f, -0.076297f, 0.054021f, + 0.123732f, 0.059160f, -0.065687f, -0.048633f, 0.021224f, 0.090388f, 0.047552f, 0.073986f, 0.001862f, -0.017505f, -0.031101f, -0.052275f, -0.045599f, -0.002273f, 0.071046f, 0.120569f, 0.092279f, -0.091367f, -0.131120f, -0.081603f, 0.005236f, 0.045101f, 0.126606f, -0.063292f, -0.010243f, 0.173430f, 0.029654f, 0.041122f, -0.128891f, -0.149425f, -0.109340f, 0.140884f, 0.253227f, 0.245313f, -0.003423f, -0.227577f, -0.418611f, -0.180603f, 0.007698f, 0.355744f, 0.397453f, 0.237559f, -0.177173f, -0.166279f, -0.281223f, -0.134825f, 0.161094f, 0.180949f, 0.014477f, 0.137344f, 0.120363f, 0.006787f, 0.072081f, 0.045147f, 0.078544f, -0.079862f, -0.147038f, -0.191205f, -0.028206f, 0.067228f, 0.245851f, 0.108712f, -0.005946f, -0.041767f} + }, + { + {0.001417f, 0.004213f, 0.006899f, 0.009406f, 0.011674f, 0.013652f, 0.015305f, 0.016608f, 0.017553f, 0.018149f, 0.018418f, 0.018397f, 0.018136f, 0.017694f, 0.017137f, 0.016538f, 0.015967f, 0.015493f, 0.015180f, 0.015080f, 0.015235f, 0.015670f, 0.016397f, 0.017407f, 0.018674f, 0.020154f, 0.021789f, 0.023502f, 0.025209f, 0.026812f, 0.028212f, 0.029308f, 0.030000f, 0.030198f, 0.029822f, 0.028808f, 0.027110f, 0.024706f, 0.021593f, 0.017795f, 0.013362f, 0.008367f, 0.002904f, -0.002910f, -0.008943f, -0.015050f, -0.021075f, -0.026863f, -0.032258f, -0.037112f, -0.041288f, -0.044668f, -0.047156f, -0.048678f, -0.049192f, -0.048682f, -0.047166f, -0.044690f, -0.041333f, -0.037198f, -0.032413f, -0.027126f, -0.021500f, -0.015708f, -0.009928f, -0.004333f, 0.000909f, 0.005646f, 0.009741f, 0.013084f, 0.015591f, 0.017208f, 0.017913f, 0.017715f, 0.016657f, 0.014812f, 0.012282f, 0.009191f, 0.005685f, 0.001924f, -0.037055f, 0.016619f, -0.044855f, 0.019307f, -0.046802f, 0.052235f, 0.029452f, -0.090642f, -0.084602f, 0.021858f, -0.092365f, -0.083654f, 0.048261f, -0.100817f, -0.290582f, -0.107580f, + 0.169082f, 0.221924f, 0.238889f, -0.137615f, 0.012779f, 0.194037f, 0.175402f, -0.026204f, -0.167182f, -0.108575f, -0.081142f, 0.067975f, 0.225941f, 0.184811f, 0.043057f, -0.140596f, -0.169342f, -0.108633f, 0.036195f, 0.127169f, 0.170863f, 0.027724f, -0.060391f, -0.103888f, -0.095562f, 0.017380f, 0.139349f, 0.137799f, 0.028598f, -0.119610f, -0.152271f, -0.068246f, -0.031898f, 0.036047f, 0.120064f, 0.127166f, 0.152684f, 0.025783f, -0.081842f, -0.292260f, -0.231206f, -0.064232f, 0.219482f, 0.037531f, 0.140152f, 0.094400f, -0.105524f, -0.184059f, -0.070996f, -0.192582f, -0.235947f, 0.029902f, 0.090350f, 0.157738f, 0.002441f, -0.003316f, -0.036480f, 0.201197f, 0.025254f, 0.086645f, -0.302854f, -0.271850f, 0.039836f, 0.008343f}, + {0.001417f, 0.004213f, 0.006899f, 0.009406f, 0.011674f, 0.013652f, 0.015305f, 0.016608f, 0.017553f, 0.018149f, 0.018418f, 0.018397f, 0.018136f, 0.017694f, 0.017137f, 0.016538f, 0.015967f, 0.015493f, 0.015180f, 0.015080f, 0.015235f, 0.015670f, 0.016397f, 0.017407f, 0.018674f, 0.020154f, 0.021789f, 0.023502f, 0.025209f, 0.026812f, 0.028212f, 0.029308f, 0.030000f, 0.030198f, 0.029822f, 0.028808f, 0.027110f, 0.024706f, 0.021593f, 0.017795f, 0.013362f, 0.008367f, 0.002904f, -0.002910f, -0.008943f, -0.015050f, -0.021075f, -0.026863f, -0.032258f, -0.037112f, -0.041288f, -0.044668f, -0.047156f, -0.048678f, -0.049192f, -0.048682f, -0.047166f, -0.044690f, -0.041333f, -0.037198f, -0.032413f, -0.027126f, -0.021500f, -0.015708f, -0.009928f, -0.004333f, 0.000909f, 0.005646f, 0.009741f, 0.013084f, 0.015591f, 0.017208f, 0.017913f, 0.017715f, 0.016657f, 0.014812f, 0.012282f, 0.009191f, 0.005685f, 0.001924f, -0.037055f, 0.016619f, -0.044855f, 0.019307f, -0.046802f, 0.052235f, 0.029452f, -0.090642f, -0.084602f, 0.021858f, -0.092365f, -0.083654f, 0.048261f, -0.100817f, -0.290582f, -0.107580f, + 0.169082f, 0.221924f, 0.238889f, -0.137615f, 0.012779f, 0.194037f, 0.175402f, -0.026204f, -0.167182f, -0.108575f, -0.081142f, 0.067975f, 0.225941f, 0.184811f, 0.043057f, -0.140596f, -0.169342f, -0.108633f, 0.036195f, 0.127169f, 0.170863f, 0.027724f, -0.060391f, -0.103888f, -0.095562f, 0.017380f, 0.139349f, 0.137799f, 0.028598f, -0.119610f, -0.152271f, -0.068246f, -0.031898f, 0.036047f, 0.120064f, 0.127166f, 0.152684f, 0.025783f, -0.081842f, -0.292260f, -0.231206f, -0.064232f, 0.219482f, 0.037531f, 0.140152f, 0.094400f, -0.105524f, -0.184059f, -0.070996f, -0.192582f, -0.235947f, 0.029902f, 0.090350f, 0.157738f, 0.002441f, -0.003316f, -0.036480f, 0.201197f, 0.025254f, 0.086645f, -0.302854f, -0.271850f, 0.039836f, 0.008343f} + }, + { + {0.000678f, 0.002005f, 0.003245f, 0.004342f, 0.005251f, 0.005932f, 0.006358f, 0.006511f, 0.006390f, 0.006004f, 0.005376f, 0.004542f, 0.003548f, 0.002449f, 0.001309f, 0.000193f, -0.000829f, -0.001692f, -0.002332f, -0.002695f, -0.002734f, -0.002415f, -0.001719f, -0.000640f, 0.000810f, 0.002605f, 0.004701f, 0.007042f, 0.009559f, 0.012171f, 0.014789f, 0.017321f, 0.019670f, 0.021745f, 0.023456f, 0.024724f, 0.025479f, 0.025666f, 0.025247f, 0.024200f, 0.022524f, 0.020235f, 0.017369f, 0.013981f, 0.010140f, 0.005932f, 0.001453f, -0.003193f, -0.007894f, -0.012539f, -0.017017f, -0.021225f, -0.025065f, -0.028453f, -0.031320f, -0.033611f, -0.035290f, -0.036339f, -0.036761f, -0.036573f, -0.035812f, -0.034531f, -0.032792f, -0.030672f, -0.028253f, -0.025620f, -0.022861f, -0.020061f, -0.017297f, -0.014642f, -0.012154f, -0.009880f, -0.007853f, -0.006092f, -0.004597f, -0.003358f, -0.002349f, -0.001532f, -0.000859f, -0.000276f, -0.001478f, 0.043843f, 0.014752f, -0.018881f, -0.016664f, 0.070932f, 0.100190f, 0.017333f, -0.088039f, -0.193031f, -0.136385f, -0.038987f, 0.093755f, -0.091169f, -0.063585f, -0.021465f, + 0.067888f, 0.136567f, 0.333335f, -0.026602f, -0.089426f, -0.069872f, -0.017664f, 0.016592f, 0.180053f, 0.100658f, 0.081240f, -0.052269f, -0.183656f, -0.094968f, -0.097229f, 0.062112f, 0.073215f, 0.132789f, -0.018266f, -0.096281f, -0.159036f, -0.059303f, -0.038813f, 0.030417f, 0.064639f, 0.086041f, -0.010160f, -0.081758f, -0.083045f, -0.029956f, 0.028823f, 0.030263f, -0.098869f, -0.074274f, 0.013947f, 0.079593f, 0.036589f, 0.070035f, -0.017284f, -0.058669f, -0.016308f, -0.063333f, 0.040365f, -0.137154f, 0.098537f, 0.099193f, -0.103408f, -0.161889f, 0.019474f, -0.105259f, -0.098933f, 0.078835f, -0.040012f, -0.050375f, -0.163213f, -0.008125f, 0.189076f, 0.445716f, 0.196394f, -0.035165f, -0.260981f, -0.127357f, -0.001061f, 0.023980f}, + {0.000678f, 0.002005f, 0.003245f, 0.004342f, 0.005251f, 0.005932f, 0.006358f, 0.006511f, 0.006390f, 0.006004f, 0.005376f, 0.004542f, 0.003548f, 0.002449f, 0.001309f, 0.000193f, -0.000829f, -0.001692f, -0.002332f, -0.002695f, -0.002734f, -0.002415f, -0.001719f, -0.000640f, 0.000810f, 0.002605f, 0.004701f, 0.007042f, 0.009559f, 0.012171f, 0.014789f, 0.017321f, 0.019670f, 0.021745f, 0.023456f, 0.024724f, 0.025479f, 0.025666f, 0.025247f, 0.024200f, 0.022524f, 0.020235f, 0.017369f, 0.013981f, 0.010140f, 0.005932f, 0.001453f, -0.003193f, -0.007894f, -0.012539f, -0.017017f, -0.021225f, -0.025065f, -0.028453f, -0.031320f, -0.033611f, -0.035290f, -0.036339f, -0.036761f, -0.036573f, -0.035812f, -0.034531f, -0.032792f, -0.030672f, -0.028253f, -0.025620f, -0.022861f, -0.020061f, -0.017297f, -0.014642f, -0.012154f, -0.009880f, -0.007853f, -0.006092f, -0.004597f, -0.003358f, -0.002349f, -0.001532f, -0.000859f, -0.000276f, -0.001478f, 0.043843f, 0.014752f, -0.018881f, -0.016664f, 0.070932f, 0.100190f, 0.017333f, -0.088039f, -0.193031f, -0.136385f, -0.038987f, 0.093755f, -0.091169f, -0.063585f, -0.021465f, + 0.067888f, 0.136567f, 0.333335f, -0.026602f, -0.089426f, -0.069872f, -0.017664f, 0.016592f, 0.180053f, 0.100658f, 0.081240f, -0.052269f, -0.183656f, -0.094968f, -0.097229f, 0.062112f, 0.073215f, 0.132789f, -0.018266f, -0.096281f, -0.159036f, -0.059303f, -0.038813f, 0.030417f, 0.064639f, 0.086041f, -0.010160f, -0.081758f, -0.083045f, -0.029956f, 0.028823f, 0.030263f, -0.098869f, -0.074274f, 0.013947f, 0.079593f, 0.036589f, 0.070035f, -0.017284f, -0.058669f, -0.016308f, -0.063333f, 0.040365f, -0.137154f, 0.098537f, 0.099193f, -0.103408f, -0.161889f, 0.019474f, -0.105259f, -0.098933f, 0.078835f, -0.040012f, -0.050375f, -0.163213f, -0.008125f, 0.189076f, 0.445716f, 0.196394f, -0.035165f, -0.260981f, -0.127357f, -0.001061f, 0.023980f} + }, + { + {-0.002408f, -0.007164f, -0.011740f, -0.016022f, -0.019904f, -0.023293f, -0.026111f, -0.028295f, -0.029802f, -0.030607f, -0.030708f, -0.030118f, -0.028874f, -0.027028f, -0.024647f, -0.021813f, -0.018618f, -0.015159f, -0.011540f, -0.007865f, -0.004233f, -0.000740f, 0.002528f, 0.005496f, 0.008101f, 0.010297f, 0.012051f, 0.013349f, 0.014191f, 0.014593f, 0.014587f, 0.014214f, 0.013529f, 0.012594f, 0.011477f, 0.010247f, 0.008977f, 0.007734f, 0.006583f, 0.005581f, 0.004776f, 0.004206f, 0.003897f, 0.003865f, 0.004111f, 0.004627f, 0.005393f, 0.006379f, 0.007547f, 0.008852f, 0.010246f, 0.011676f, 0.013091f, 0.014440f, 0.015676f, 0.016757f, 0.017647f, 0.018320f, 0.018756f, 0.018945f, 0.018885f, 0.018584f, 0.018055f, 0.017321f, 0.016409f, 0.015350f, 0.014179f, 0.012929f, 0.011636f, 0.010331f, 0.009044f, 0.007799f, 0.006615f, 0.005505f, 0.004475f, 0.003527f, 0.002653f, 0.001845f, 0.001086f, 0.000359f, 0.003451f, -0.025273f, 0.031934f, 0.008073f, 0.036383f, -0.059115f, 0.015201f, -0.027867f, -0.036472f, 0.006728f, 0.089776f, 0.031569f, 0.052924f, 0.052550f, 0.036035f, 0.026876f, + 0.046325f, 0.144330f, 0.148471f, -0.098440f, -0.070547f, 0.075999f, 0.075345f, 0.056472f, -0.047392f, -0.016216f, -0.060330f, -0.063398f, -0.017374f, 0.045235f, 0.090822f, -0.025879f, -0.075482f, -0.028323f, 0.051387f, 0.075571f, 0.081483f, 0.000095f, -0.046879f, -0.036083f, 0.022425f, 0.036351f, 0.026749f, 0.010041f, -0.069061f, -0.048783f, -0.047015f, -0.027634f, -0.048952f, 0.007175f, 0.058529f, 0.075508f, -0.057571f, -0.037875f, -0.107202f, 0.001530f, 0.044873f, 0.111928f, 0.002121f, 0.069973f, -0.097021f, -0.088849f, 0.011183f, 0.116610f, 0.058783f, 0.143659f, 0.103156f, -0.039348f, -0.097690f, -0.106951f, -0.044435f, 0.033247f, 0.096534f, -0.020143f, -0.010372f, -0.080353f, -0.122396f, -0.107125f, 0.051493f, -0.012680f}, + {-0.002408f, -0.007164f, -0.011740f, -0.016022f, -0.019904f, -0.023293f, -0.026111f, -0.028295f, -0.029802f, -0.030607f, -0.030708f, -0.030118f, -0.028874f, -0.027028f, -0.024647f, -0.021813f, -0.018618f, -0.015159f, -0.011540f, -0.007865f, -0.004233f, -0.000740f, 0.002528f, 0.005496f, 0.008101f, 0.010297f, 0.012051f, 0.013349f, 0.014191f, 0.014593f, 0.014587f, 0.014214f, 0.013529f, 0.012594f, 0.011477f, 0.010247f, 0.008977f, 0.007734f, 0.006583f, 0.005581f, 0.004776f, 0.004206f, 0.003897f, 0.003865f, 0.004111f, 0.004627f, 0.005393f, 0.006379f, 0.007547f, 0.008852f, 0.010246f, 0.011676f, 0.013091f, 0.014440f, 0.015676f, 0.016757f, 0.017647f, 0.018320f, 0.018756f, 0.018945f, 0.018885f, 0.018584f, 0.018055f, 0.017321f, 0.016409f, 0.015350f, 0.014179f, 0.012929f, 0.011636f, 0.010331f, 0.009044f, 0.007799f, 0.006615f, 0.005505f, 0.004475f, 0.003527f, 0.002653f, 0.001845f, 0.001086f, 0.000359f, 0.003451f, -0.025273f, 0.031934f, 0.008073f, 0.036383f, -0.059115f, 0.015201f, -0.027867f, -0.036472f, 0.006728f, 0.089776f, 0.031569f, 0.052924f, 0.052550f, 0.036035f, 0.026876f, + 0.046325f, 0.144330f, 0.148471f, -0.098440f, -0.070547f, 0.075999f, 0.075345f, 0.056472f, -0.047392f, -0.016216f, -0.060330f, -0.063398f, -0.017374f, 0.045235f, 0.090822f, -0.025879f, -0.075482f, -0.028323f, 0.051387f, 0.075571f, 0.081483f, 0.000095f, -0.046879f, -0.036083f, 0.022425f, 0.036351f, 0.026749f, 0.010041f, -0.069061f, -0.048783f, -0.047015f, -0.027634f, -0.048952f, 0.007175f, 0.058529f, 0.075508f, -0.057571f, -0.037875f, -0.107202f, 0.001530f, 0.044873f, 0.111928f, 0.002121f, 0.069973f, -0.097021f, -0.088849f, 0.011183f, 0.116610f, 0.058783f, 0.143659f, 0.103156f, -0.039348f, -0.097690f, -0.106951f, -0.044435f, 0.033247f, 0.096534f, -0.020143f, -0.010372f, -0.080353f, -0.122396f, -0.107125f, 0.051493f, -0.012680f} + }, + { + {-0.000769f, -0.002289f, -0.003749f, -0.005115f, -0.006352f, -0.007430f, -0.008327f, -0.009024f, -0.009511f, -0.009782f, -0.009840f, -0.009694f, -0.009361f, -0.008859f, -0.008215f, -0.007457f, -0.006616f, -0.005724f, -0.004812f, -0.003911f, -0.003047f, -0.002244f, -0.001520f, -0.000889f, -0.000357f, 0.000073f, 0.000406f, 0.000654f, 0.000831f, 0.000957f, 0.001057f, 0.001156f, 0.001281f, 0.001459f, 0.001716f, 0.002074f, 0.002553f, 0.003168f, 0.003926f, 0.004831f, 0.005879f, 0.007059f, 0.008354f, 0.009742f, 0.011192f, 0.012674f, 0.014150f, 0.015581f, 0.016930f, 0.018156f, 0.019224f, 0.020100f, 0.020757f, 0.021171f, 0.021326f, 0.021214f, 0.020833f, 0.020192f, 0.019304f, 0.018191f, 0.016883f, 0.015413f, 0.013821f, 0.012147f, 0.010437f, 0.008733f, 0.007078f, 0.005512f, 0.004070f, 0.002782f, 0.001673f, 0.000758f, 0.000045f, -0.000464f, -0.000778f, -0.000910f, -0.000885f, -0.000730f, -0.000477f, -0.000166f, 0.008996f, -0.007501f, 0.003669f, -0.015821f, 0.037905f, 0.006306f, -0.038948f, 0.013367f, 0.009375f, 0.033153f, 0.012381f, -0.076053f, -0.024165f, -0.049333f, -0.093735f, 0.015389f, + 0.103849f, 0.086389f, 0.092310f, -0.047303f, 0.013689f, 0.074313f, 0.090886f, 0.049559f, -0.015663f, -0.052549f, -0.016329f, -0.076266f, -0.061826f, -0.063511f, 0.039646f, 0.123095f, 0.014255f, 0.014006f, 0.012179f, -0.051475f, -0.067447f, 0.041413f, 0.086814f, 0.105537f, 0.082272f, 0.021088f, -0.042444f, -0.065750f, -0.031024f, 0.002792f, 0.034656f, 0.036967f, -0.025911f, -0.038597f, -0.025850f, -0.024307f, -0.026230f, 0.141877f, 0.011333f, 0.059458f, 0.006121f, -0.057907f, -0.144673f, 0.083071f, 0.022746f, 0.048092f, 0.089863f, -0.028500f, -0.070405f, -0.107009f, 0.050452f, 0.079530f, 0.065303f, 0.007590f, -0.037520f, -0.038727f, -0.076749f, -0.091653f, 0.029711f, 0.108371f, 0.063467f, -0.081410f, -0.017582f, -0.012313f}, + {-0.000769f, -0.002289f, -0.003749f, -0.005115f, -0.006352f, -0.007430f, -0.008327f, -0.009024f, -0.009511f, -0.009782f, -0.009840f, -0.009694f, -0.009361f, -0.008859f, -0.008215f, -0.007457f, -0.006616f, -0.005724f, -0.004812f, -0.003911f, -0.003047f, -0.002244f, -0.001520f, -0.000889f, -0.000357f, 0.000073f, 0.000406f, 0.000654f, 0.000831f, 0.000957f, 0.001057f, 0.001156f, 0.001281f, 0.001459f, 0.001716f, 0.002074f, 0.002553f, 0.003168f, 0.003926f, 0.004831f, 0.005879f, 0.007059f, 0.008354f, 0.009742f, 0.011192f, 0.012674f, 0.014150f, 0.015581f, 0.016930f, 0.018156f, 0.019224f, 0.020100f, 0.020757f, 0.021171f, 0.021326f, 0.021214f, 0.020833f, 0.020192f, 0.019304f, 0.018191f, 0.016883f, 0.015413f, 0.013821f, 0.012147f, 0.010437f, 0.008733f, 0.007078f, 0.005512f, 0.004070f, 0.002782f, 0.001673f, 0.000758f, 0.000045f, -0.000464f, -0.000778f, -0.000910f, -0.000885f, -0.000730f, -0.000477f, -0.000166f, 0.008996f, -0.007501f, 0.003669f, -0.015821f, 0.037905f, 0.006306f, -0.038948f, 0.013367f, 0.009375f, 0.033153f, 0.012381f, -0.076053f, -0.024165f, -0.049333f, -0.093735f, 0.015389f, + 0.103849f, 0.086389f, 0.092310f, -0.047303f, 0.013689f, 0.074313f, 0.090886f, 0.049559f, -0.015663f, -0.052549f, -0.016329f, -0.076266f, -0.061826f, -0.063511f, 0.039646f, 0.123095f, 0.014255f, 0.014006f, 0.012179f, -0.051475f, -0.067447f, 0.041413f, 0.086814f, 0.105537f, 0.082272f, 0.021088f, -0.042444f, -0.065750f, -0.031024f, 0.002792f, 0.034656f, 0.036967f, -0.025911f, -0.038597f, -0.025850f, -0.024307f, -0.026230f, 0.141877f, 0.011333f, 0.059458f, 0.006121f, -0.057907f, -0.144673f, 0.083071f, 0.022746f, 0.048092f, 0.089863f, -0.028500f, -0.070405f, -0.107009f, 0.050452f, 0.079530f, 0.065303f, 0.007590f, -0.037520f, -0.038727f, -0.076749f, -0.091653f, 0.029711f, 0.108371f, 0.063467f, -0.081410f, -0.017582f, -0.012313f} + } +}; +const float *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; +const float *CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; + +/********************** Sample Rate = 48000 **********************/ + +const float CRendBin_Combined_BRIR_latency_s_48kHz = 0.000145833328133f; +const int16_t CRendBin_Combined_BRIR_max_num_iterations_48kHz = 22; +const uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][BINAURAL_CHANNELS]={{22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22} }; +const uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS] = {40, 40}; +const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][22]={{{116, 118, 117, 121, 112, 119, 121, 131, 134, 131, 137, 127, 134, 135, 134, 135, 129, 139, 135, 130, 128, 240},{116, 118, 117, 121, 112, 119, 121, 131, 134, 131, 137, 127, 134, 135, 134, 135, 129, 139, 135, 130, 128, 240}},{{122, 106, 121, 114, 121, 123, 119, 126, 123, 126, 127, 130, 128, 136, 132, 131, 129, 141, 137, 131, 129, 240},{122, 106, 121, 114, 121, 123, 119, 126, 123, 126, 127, 130, 128, 136, 132, 131, 129, 141, 137, 131, 129, 240}},{{118, 104, 116, 104, 123, 123, 122, 125, 130, 128, 132, 135, 131, 132, 131, 132, 135, 137, 144, 129, 129, 240},{118, 104, 116, 104, 123, 123, 122, 125, 130, 128, 132, 135, 131, 132, 131, 132, 135, 137, 144, 129, 129, 240}},{{102, 117, 116, 121, 117, 114, 115, 125, 126, 124, 125, 142, 133, 124, 129, 132, 134, 137, 143, 125, 125, 240},{102, 117, 116, 121, 117, 114, 115, 125, 126, 124, 125, 142, 133, 124, 129, 132, 134, 137, 143, 125, 125, 240}},{{116, 115, 117, 120, 121, 119, 125, 129, 123, 129, 124, 127, 128, 143, 133, 131, 136, 141, 158, 127, 131, 240},{116, 115, 117, 120, 121, 119, 125, 129, 123, 129, 124, 127, 128, 143, 133, 131, 136, 141, 158, 127, 131, 240}},{{112, 106, 118, 123, 115, 120, 129, 123, 130, 127, 130, 130, 131, 131, 131, 135, 134, 153, 138, 132, 127, 240},{112, 106, 118, 123, 115, 120, 129, 123, 130, 127, 130, 130, 131, 131, 131, 135, 134, 153, 138, 132, 127, 240}},{{107, 112, 111, 120, 115, 125, 122, 123, 132, 123, 133, 138, 125, 134, 130, 131, 135, 137, 136, 127, 121, 240},{107, 112, 111, 120, 115, 125, 122, 123, 132, 123, 133, 138, 125, 134, 130, 131, 135, 137, 136, 127, 121, 240}},{{111, 113, 132, 115, 121, 123, 121, 127, 135, 128, 129, 128, 133, 130, 133, 138, 134, 137, 152, 138, 124, 240},{111, 113, 132, 115, 121, 123, 121, 127, 135, 128, 129, 128, 133, 130, 133, 138, 134, 137, 152, 138, 124, 240}},{{114, 104, 114, 117, 125, 127, 123, 129, 123, 127, 144, 131, 138, 132, 129, 129, 132, 134, 136, 127, 121, 240},{114, 104, 114, 117, 125, 127, 123, 129, 123, 127, 144, 131, 138, 132, 129, 129, 132, 134, 136, 127, 121, 240}},{{100, 102, 112, 118, 115, 116, 118, 116, 121, 124, 125, 121, 125, 130, 127, 132, 133, 134, 134, 129, 132, 240},{100, 102, 112, 118, 115, 116, 118, 116, 121, 124, 125, 121, 125, 130, 127, 132, 133, 134, 134, 129, 132, 240}},{{106, 93, 103, 108, 124, 111, 114, 115, 120, 121, 119, 123, 131, 130, 132, 132, 132, 131, 140, 129, 131, 240},{106, 93, 103, 108, 124, 111, 114, 115, 120, 121, 119, 123, 131, 130, 132, 132, 132, 131, 140, 129, 131, 240}},{{108, 101, 115, 115, 115, 110, 121, 124, 124, 120, 122, 129, 124, 128, 125, 132, 135, 133, 138, 160, 119, 240},{108, 101, 115, 115, 115, 110, 121, 124, 124, 120, 122, 129, 124, 128, 125, 132, 135, 133, 138, 160, 119, 240}},{{112, 106, 114, 110, 128, 117, 120, 126, 124, 128, 126, 132, 129, 127, 133, 134, 136, 133, 154, 197, 129, 240},{112, 106, 114, 110, 128, 117, 120, 126, 124, 128, 126, 132, 129, 127, 133, 134, 136, 133, 154, 197, 129, 240}},{{102, 107, 111, 116, 116, 120, 118, 115, 120, 119, 128, 131, 131, 130, 128, 126, 126, 132, 145, 136, 133, 240},{102, 107, 111, 116, 116, 120, 118, 115, 120, 119, 128, 131, 131, 130, 128, 126, 126, 132, 145, 136, 133, 240}},{{111, 117, 106, 120, 123, 121, 125, 125, 130, 125, 123, 123, 127, 131, 125, 131, 135, 134, 148, 134, 132, 240},{111, 117, 106, 120, 123, 121, 125, 125, 130, 125, 123, 123, 127, 131, 125, 131, 135, 134, 148, 134, 132, 240}}}; +const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz = 98; +const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]={0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f}; +const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98},{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98}}; +const float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955]={ + { + {-0.009093f, 0.009357f, -0.003453f, 0.000012f, 0.008747f, -0.004985f, 0.003413f, -0.000634f, 0.001224f, -0.005937f, -0.012436f, -0.002558f, 0.004885f, -0.003188f, 0.002971f, 0.004317f, 0.003658f, -0.002726f, 0.002070f, -0.007687f, -0.001416f, 0.001935f, 0.003177f, -0.000251f, -0.000183f, 0.000966f, 0.001890f, -0.006432f, -0.005361f, 0.002269f, 0.004446f, -0.002213f, 0.004654f, 0.008920f, -0.011982f, 0.001718f, -0.005741f, -0.003864f, 0.002657f, -0.001469f, 0.007339f, -0.002261f, 0.006608f, 0.003502f, 0.001066f, -0.000452f, 0.003522f, 0.000236f, -0.000743f, -0.003707f, 0.010716f, -0.007427f, -0.002282f, 0.003802f, 0.004147f, -0.000158f, -0.003653f, 0.002094f, -0.004039f, 0.004196f, 0.000776f, 0.001549f, -0.000111f, -0.001391f, -0.001353f, 0.005598f, -0.014358f, 0.003399f, -0.001873f, -0.008279f, -0.001439f, 0.007045f, 0.003361f, 0.004391f, -0.006305f, 0.005087f, -0.002217f, 0.003215f, 0.001901f, 0.002512f, -0.002684f, 0.001092f, 0.003738f, -0.002456f, -0.005636f, 0.002331f, -0.005235f, 0.001052f, 0.003778f, 0.000046f, -0.001918f, -0.002121f, 0.000983f, 0.002093f, -0.000885f, 0.002506f, + 0.000072f, 0.001810f, 0.001468f, -0.000633f, -0.000400f, 0.000722f, -0.000855f, -0.000439f, -0.000674f, 0.000736f, -0.001170f, 0.000615f, -0.001693f, -0.000356f, -0.001593f, -0.000167f, -0.000536f, -0.001693f, -0.000430f, 0.000869f, -0.016548f, 0.013099f, -0.006110f, 0.003024f, 0.002545f, 0.000530f, -0.003448f, -0.000153f, -0.009247f, -0.011535f, 0.003315f, -0.002100f, 0.003770f, 0.003820f, 0.010643f, -0.008458f, 0.001381f, 0.007304f, 0.007055f, -0.006833f, -0.007323f, -0.003795f, -0.006343f, 0.000756f, -0.002040f, -0.004870f, -0.003752f, 0.000195f, -0.011680f, -0.011100f, -0.002255f, 0.002419f, -0.000896f, 0.001112f, -0.001224f, 0.002740f, -0.006075f, 0.007338f, -0.002398f, 0.004255f, -0.000762f, 0.003059f, -0.005530f, 0.002101f, 0.004053f, 0.004914f, 0.002178f, 0.001088f, 0.001822f, -0.001847f, -0.004563f, 0.009718f, 0.007337f, 0.003204f, -0.003443f, 0.012008f, 0.008134f, -0.003185f, 0.007655f, -0.000423f, -0.005762f, -0.001269f, -0.002000f, -0.005077f, 0.003548f, 0.004120f, 0.002022f, -0.003855f, 0.008485f, -0.005344f, 0.005024f, 0.007247f, -0.001229f, 0.000911f, -0.010281f, -0.004429f, + -0.011074f, 0.001827f, 0.005457f, -0.005184f, -0.001478f, 0.002281f, -0.004939f, -0.001227f, 0.002601f, -0.000101f, 0.001903f, -0.000963f, -0.002567f, -0.007177f, -0.003478f, -0.001127f, -0.001641f, -0.000406f, -0.000022f, 0.000663f, -0.000778f, -0.001037f, -0.002571f, -0.001026f, 0.000215f, 0.000803f, 0.000720f, -0.001278f, -0.000114f, 0.000175f, 0.000535f, -0.000117f, 0.000549f, 0.000069f, 0.000886f, 0.000094f, -0.001187f, -0.001996f, -0.002159f, 0.000001f, -0.001221f, -0.001584f, 0.000446f, 0.014016f, 0.006425f, -0.005359f, 0.002405f, 0.001850f, 0.022319f, -0.006555f, 0.006402f, 0.010902f, -0.002095f, 0.009925f, 0.004039f, 0.006766f, -0.008829f, -0.003238f, -0.010349f, -0.004751f, 0.006972f, -0.000161f, -0.004927f, 0.001222f, -0.007261f, -0.000524f, -0.004758f, 0.006675f, -0.002917f, -0.000866f, -0.002631f, 0.003572f, 0.001537f, 0.000128f, -0.000865f, 0.002945f, -0.010921f, -0.008350f, 0.003731f, 0.001053f, -0.001082f, -0.005474f, 0.012960f, 0.003783f, -0.001700f, 0.004347f, 0.005112f, 0.000067f, 0.002512f, 0.001279f, -0.006453f, 0.005877f, -0.007677f, -0.005716f, 0.006812f, -0.008090f, + 0.006993f, 0.003218f, -0.006206f, 0.010649f, 0.005668f, 0.004133f, -0.002939f, 0.009660f, 0.002181f, -0.001241f, -0.002847f, 0.002993f, 0.001057f, -0.001603f, -0.011385f, -0.001565f, -0.002282f, 0.003532f, -0.006724f, 0.009045f, -0.003204f, 0.007427f, -0.007772f, 0.000337f, -0.000894f, 0.009233f, -0.004361f, -0.002925f, 0.001575f, 0.003488f, -0.000206f, 0.001881f, -0.001494f, -0.008342f, -0.001040f, -0.000510f, -0.000534f, -0.001062f, -0.000260f, 0.000129f, -0.001250f, -0.001530f, -0.001832f, -0.001890f, 0.000054f, -0.000683f, -0.000057f, 0.001245f, -0.001510f, 0.000996f, 0.001024f, 0.002591f, -0.003097f, 0.002064f, 0.000803f, 0.001625f, -0.000282f, 0.002410f, 0.000776f, -0.001022f, -0.001925f, -0.000436f, -0.000968f, 0.023325f, -0.019306f, -0.016942f, -0.005439f, 0.017868f, -0.002462f, -0.009634f, 0.012241f, -0.008104f, 0.005797f, -0.000413f, -0.013267f, -0.009008f, 0.011237f, -0.007228f, 0.005580f, -0.007543f, 0.007434f, -0.003262f, -0.002029f, -0.000807f, -0.007304f, 0.003910f, 0.005393f, -0.007325f, 0.001832f, -0.003702f, 0.001545f, 0.003411f, -0.001050f, 0.004873f, 0.001485f, 0.003997f, + 0.006281f, -0.007979f, -0.005878f, 0.007304f, 0.000399f, 0.005685f, 0.005521f, -0.005039f, -0.007557f, -0.002961f, 0.001340f, 0.010043f, -0.010754f, 0.004517f, -0.012012f, -0.014604f, -0.003423f, -0.008320f, -0.001375f, -0.009869f, -0.018881f, -0.009944f, 0.008808f, 0.008277f, 0.005352f, -0.006220f, 0.018133f, -0.005491f, 0.003081f, -0.009929f, -0.009417f, 0.002570f, 0.000024f, -0.000836f, -0.011895f, -0.003811f, -0.000660f, -0.002326f, -0.002293f, -0.006335f, -0.005144f, 0.001409f, -0.001630f, -0.003435f, 0.000421f, -0.006134f, 0.001131f, 0.003632f, 0.006207f, 0.003542f, -0.005212f, 0.005585f, -0.003592f, -0.000254f, 0.006173f, 0.002704f, 0.000919f, -0.001927f, 0.003182f, 0.003724f, 0.002853f, 0.000722f, -0.001581f, 0.000634f, 0.004389f, 0.002350f, 0.002829f, 0.001301f, -0.001639f, 0.002440f, 0.000455f, -0.000174f, 0.000668f, -0.001151f, 0.000416f, 0.000739f, -0.001306f, 0.002502f, 0.003576f, 0.004317f, -0.000284f, -0.000226f, 0.000603f, -0.002627f, 0.003921f, -0.000167f, 0.002439f, -0.000508f, 0.029790f, -0.009842f, 0.013902f, -0.003772f, 0.018702f, -0.003686f, -0.002977f, 0.003132f, + 0.003710f, -0.003211f, -0.021663f, 0.002097f, -0.002175f, -0.005768f, -0.000428f, -0.001053f, 0.007575f, -0.002481f, 0.018260f, -0.002442f, 0.001965f, -0.001328f, 0.010280f, -0.002051f, 0.003472f, -0.008595f, -0.000446f, -0.005904f, -0.006278f, -0.001760f, -0.001909f, 0.000078f, 0.006534f, -0.011787f, -0.003635f, 0.004008f, -0.001515f, 0.008164f, 0.001712f, -0.002058f, -0.005580f, -0.005368f, -0.005921f, -0.010776f, 0.003886f, 0.004581f, 0.003849f, -0.018788f, -0.002952f, 0.013285f, 0.007260f, -0.002999f, -0.000788f, -0.005808f, -0.013110f, -0.013676f, 0.013454f, -0.004205f, -0.009379f, -0.005110f, 0.007211f, 0.005925f, 0.000467f, 0.006641f, 0.002531f, 0.006423f, -0.003376f, -0.013407f, -0.004790f, -0.006033f, -0.007063f, 0.009888f, 0.006315f, -0.001088f, 0.010780f, 0.016463f, -0.004137f, 0.006981f, -0.006579f, -0.000806f, -0.000109f, 0.007173f, -0.000773f, 0.001801f, 0.001419f, 0.002230f, 0.005473f, -0.005651f, 0.004245f, -0.002935f, 0.000241f, -0.003598f, 0.000405f, 0.001902f, 0.003837f, 0.002941f, -0.000289f, 0.001056f, 0.000049f, -0.000439f, 0.001885f, -0.005330f, -0.000951f, -0.004254f, + 0.000783f, -0.000763f, -0.000882f, -0.001862f, -0.001319f, -0.002219f, 0.002179f, 0.001122f, -0.044640f, 0.024578f, 0.008968f, -0.002035f, -0.001961f, 0.000146f, -0.006776f, -0.012418f, -0.002677f, 0.006108f, 0.018934f, 0.012733f, -0.017209f, -0.003263f, -0.010228f, 0.007041f, -0.000849f, -0.023249f, -0.006842f, 0.014321f, 0.008855f, 0.004920f, 0.012144f, 0.007375f, -0.001209f, -0.001495f, 0.003609f, -0.008824f, -0.005206f, 0.002081f, 0.010599f, -0.004410f, -0.008856f, -0.012822f, -0.006446f, 0.006469f, 0.020852f, 0.001493f, -0.003611f, 0.004461f, -0.004254f, -0.015388f, 0.001188f, -0.010848f, -0.008535f, -0.010120f, 0.006377f, -0.000572f, -0.014431f, 0.002752f, 0.005525f, 0.005708f, -0.015616f, -0.008641f, -0.005789f, -0.003843f, -0.001664f, -0.005745f, -0.002756f, -0.007440f, -0.015155f, -0.001734f, -0.012864f, -0.015458f, -0.009559f, -0.002702f, 0.002716f, -0.009187f, -0.013573f, 0.004052f, 0.010970f, -0.000537f, -0.001964f, -0.001263f, 0.007992f, -0.011854f, 0.008926f, 0.014062f, 0.013680f, 0.010778f, 0.018384f, 0.000263f, -0.007515f, 0.004972f, 0.000865f, -0.001910f, -0.001665f, 0.000051f, + -0.004143f, 0.006098f, 0.000355f, 0.000488f, -0.003686f, -0.000994f, 0.002039f, 0.002320f, -0.002129f, -0.001951f, 0.001203f, 0.006291f, -0.000773f, 0.002412f, 0.002154f, 0.005383f, -0.004299f, 0.000310f, -0.000049f, -0.004794f, 0.000773f, 0.000705f, 0.004133f, 0.000483f, 0.000886f, 0.003550f, 0.002265f, -0.005983f, 0.002297f, -0.002121f, 0.001952f, -0.018436f, 0.007010f, -0.009100f, -0.001536f, 0.002449f, 0.005495f, -0.000728f, 0.009596f, 0.000270f, -0.001880f, -0.025882f, 0.012058f, -0.004784f, -0.005461f, 0.009329f, -0.014975f, -0.020625f, 0.008476f, -0.007210f, -0.009636f, -0.003032f, 0.018696f, 0.011751f, -0.006774f, -0.004002f, 0.008726f, -0.002562f, -0.000880f, 0.002531f, 0.008519f, 0.015559f, 0.009946f, 0.012592f, -0.001877f, -0.000528f, 0.000359f, -0.008271f, 0.002170f, -0.003478f, 0.021215f, -0.016166f, -0.009319f, -0.008546f, -0.007956f, 0.005102f, 0.002926f, 0.007590f, -0.001203f, -0.010679f, -0.014253f, -0.004132f, -0.017758f, -0.024815f, -0.004920f, 0.000677f, 0.019342f, 0.003826f, -0.015229f, -0.003924f, 0.014516f, -0.006128f, 0.004904f, 0.004351f, 0.008175f, -0.011492f, + -0.017167f, -0.007626f, -0.008707f, 0.027802f, 0.003168f, -0.008923f, 0.006115f, 0.004632f, -0.001987f, 0.003496f, 0.006426f, -0.000781f, 0.012407f, -0.016352f, -0.014570f, 0.004738f, -0.006694f, 0.014812f, -0.006787f, -0.000395f, 0.008041f, -0.002460f, 0.007133f, -0.000444f, -0.000290f, -0.000504f, -0.002336f, -0.000275f, 0.006427f, 0.002344f, 0.006247f, 0.003451f, 0.003154f, 0.000202f, -0.002190f, -0.001028f, 0.002660f, -0.000830f, 0.000859f, -0.001285f, 0.004510f, -0.003695f, 0.002659f, -0.003314f, 0.004550f, -0.004294f, 0.000488f, -0.000437f, -0.000378f, 0.003158f, 0.004297f, -0.004494f, 0.003209f, 0.001692f, -0.001413f, 0.006530f, 0.015738f, 0.004848f, -0.001499f, 0.010820f, -0.002271f, -0.013880f, -0.002738f, -0.001394f, 0.013303f, -0.007799f, -0.002015f, -0.004304f, 0.001985f, -0.004358f, 0.000635f, 0.004235f, 0.006176f, 0.009030f, 0.005826f, 0.002742f, 0.023469f, 0.009163f, 0.007576f, -0.001182f, -0.018879f, 0.001056f, -0.015763f, 0.004578f, -0.010757f, 0.002411f, -0.000172f, 0.005842f, 0.028904f, 0.008101f, -0.004743f, 0.010302f, -0.008456f, 0.008753f, -0.005334f, 0.015015f, + -0.008521f, -0.000255f, -0.011645f, 0.006769f, 0.011330f, -0.013723f, 0.027150f, -0.006901f, 0.001789f, -0.004392f, -0.007578f, 0.002759f, -0.008429f, -0.023649f, 0.003772f, -0.006067f, -0.001500f, -0.014674f, 0.003248f, -0.005309f, -0.024350f, -0.011118f, -0.006936f, -0.021534f, 0.011936f, 0.030608f, 0.037116f, -0.035716f, -0.027328f, -0.015217f, 0.001328f, 0.008689f, -0.011150f, 0.004922f, -0.012629f, 0.003114f, 0.017041f, 0.026401f, -0.018473f, 0.029583f, 0.009362f, 0.003328f, 0.004910f, 0.005218f, -0.006758f, 0.010055f, 0.009244f, 0.011222f, 0.008578f, 0.003518f, 0.013087f, -0.000087f, 0.004000f, -0.000390f, -0.000189f, 0.007035f, -0.002272f, -0.008820f, -0.002503f, 0.005534f, 0.004248f, 0.001651f, -0.000220f, -0.000691f, -0.000895f, 0.005580f, 0.004420f, 0.001880f, -0.005254f, 0.001162f, 0.001288f, -0.000046f, 0.005955f, 0.002525f, 0.003644f, -0.000159f, 0.004421f, 0.002508f, 0.004472f, 0.006260f, 0.006518f, 0.000295f, 0.000107f, -0.003478f, 0.007204f, 0.006436f, -0.000909f, -0.002150f, 0.000595f, 0.004603f, -0.001873f, 0.013170f, -0.025585f, 0.036484f, 0.000490f, 0.021254f, + 0.007512f, -0.007821f, -0.008090f, 0.019678f, -0.012038f, 0.012336f, 0.015245f, -0.002264f, -0.011217f, 0.000363f, 0.015775f, 0.008799f, 0.007964f, 0.006925f, -0.001733f, 0.002337f, 0.005102f, 0.020129f, 0.014051f, -0.011134f, -0.009596f, -0.001906f, -0.005017f, -0.002503f, -0.011000f, -0.007377f, 0.009926f, 0.017728f, 0.004282f, 0.026867f, -0.007877f, 0.029403f, 0.001034f, 0.013719f, 0.032341f, 0.022888f, 0.007100f, 0.006436f, 0.014441f, -0.003464f, -0.013518f, -0.000319f, 0.013568f, -0.008247f, -0.015466f, 0.000325f, -0.002732f, 0.029612f, 0.023657f, -0.000539f, 0.033418f, -0.003241f, 0.017810f, 0.009343f, 0.014013f, -0.002117f, -0.011989f, 0.014908f, -0.003396f, 0.017482f, 0.011784f, 0.037214f, -0.021291f, -0.003837f, -0.042636f, 0.008759f, -0.021146f, -0.003060f, 0.019104f, -0.008208f, 0.007637f, -0.003704f, 0.022392f, -0.006213f, -0.016219f, -0.001415f, -0.005759f, 0.006597f, -0.001387f, 0.010818f, 0.012572f, 0.003220f, -0.003775f, 0.010049f, -0.002634f, 0.004236f, -0.000321f, -0.006995f, 0.004295f, 0.004583f, 0.008624f, 0.004492f, 0.009707f, 0.004332f, -0.000568f, 0.000212f, + -0.003502f, -0.000059f, 0.009503f, -0.003710f, -0.007839f, 0.004116f, -0.000922f, 0.001297f, 0.007706f, 0.001681f, 0.001593f, 0.003223f, 0.004989f, -0.001861f, -0.001383f, 0.003435f, 0.006163f, 0.010409f, 0.009295f, -0.000154f, 0.004195f, -0.000041f, -0.000856f, 0.004478f, 0.006414f, 0.005775f, -0.003665f, -0.000020f, -0.001469f, 0.007704f, 0.001097f, -0.001569f, 0.000934f, -0.024552f, -0.018036f, 0.008784f, -0.014588f, 0.008267f, -0.008828f, 0.002357f, 0.022468f, -0.003896f, -0.021338f, 0.005692f, -0.009009f, 0.021635f, -0.022804f, -0.015929f, 0.009165f, 0.010390f, 0.015753f, 0.000494f, -0.001668f, 0.010157f, -0.006324f, -0.015611f, 0.009548f, -0.006463f, -0.012510f, 0.003641f, 0.012027f, -0.008978f, 0.022708f, 0.009170f, -0.000957f, 0.002923f, 0.011049f, 0.004816f, -0.039128f, 0.015859f, -0.004142f, -0.004195f, -0.006882f, 0.020665f, -0.000037f, 0.022011f, 0.000756f, 0.001864f, 0.002260f, -0.005905f, -0.002550f, 0.010662f, -0.012671f, 0.002900f, 0.035255f, 0.003060f, 0.025872f, 0.001965f, -0.005497f, -0.002910f, -0.017751f, -0.036503f, -0.026753f, 0.012011f, 0.016527f, -0.007261f, + 0.027691f, 0.011887f, -0.020133f, -0.011641f, 0.025335f, 0.018124f, 0.016724f, 0.005166f, -0.008057f, 0.000204f, -0.001607f, -0.015725f, -0.005055f, -0.009202f, -0.043097f, -0.018465f, -0.001207f, 0.028785f, 0.006199f, -0.006678f, 0.002873f, 0.024716f, -0.006359f, 0.001247f, -0.000079f, 0.006261f, -0.008351f, -0.003894f, -0.006302f, -0.003485f, -0.002383f, 0.005950f, -0.000531f, -0.001057f, -0.000621f, 0.004668f, 0.003476f, 0.007279f, -0.005393f, -0.008021f, 0.002640f, -0.008485f, -0.004962f, 0.001100f, 0.002822f, 0.001023f, -0.001764f, 0.008932f, -0.004423f, -0.002607f, -0.010568f, 0.003960f, -0.009586f, 0.007395f, 0.002948f, 0.004931f, -0.008171f, 0.000768f, -0.001663f, 0.003905f, -0.004852f, 0.003065f, -0.004379f, 0.004979f, -0.009061f, 0.000398f, -0.010574f, 0.011377f, 0.010704f, 0.023178f, 0.008746f, 0.007682f, 0.026630f, 0.022243f, 0.018543f, 0.000602f, 0.006817f, 0.001308f, -0.004482f, -0.005361f, 0.004252f, -0.002273f, -0.016173f, 0.003364f, 0.015595f, -0.000333f, -0.004672f, 0.004715f, -0.039324f, 0.012890f, -0.015748f, 0.009572f, 0.013137f, 0.011826f, -0.014856f, 0.007778f, + -0.001657f, -0.000476f, 0.023062f, 0.016816f, 0.000088f, 0.008939f, 0.006587f, -0.003294f, -0.013393f, 0.003085f, 0.011185f, 0.000080f, 0.016388f, 0.004813f, 0.014811f, 0.029339f, 0.001398f, 0.011763f, 0.012481f, 0.015673f, -0.000806f, -0.010252f, 0.025327f, -0.009984f, 0.020421f, -0.024344f, -0.020055f, 0.027788f, -0.001540f, 0.009103f, 0.016319f, 0.024235f, 0.031365f, 0.013164f, 0.004202f, -0.015496f, 0.006801f, -0.003265f, -0.028293f, 0.023789f, 0.014762f, -0.023162f, -0.001490f, 0.001328f, -0.028995f, 0.009601f, 0.022840f, 0.013463f, -0.000311f, 0.008723f, 0.006167f, -0.013550f, 0.025011f, 0.002314f, -0.005038f, 0.012852f, 0.024739f, 0.009665f, -0.001109f, -0.008777f, -0.006920f, -0.003075f, 0.004142f, 0.006918f, 0.010163f, 0.003260f, 0.001673f, 0.003120f, 0.011895f, 0.010632f, 0.013236f, -0.000259f, -0.001512f, 0.005210f, 0.011320f, -0.000044f, 0.000962f, -0.002373f, 0.005178f, 0.000857f, -0.001413f, -0.004391f, 0.002629f, -0.008311f, -0.014783f, -0.000749f, 0.008154f, -0.000290f, 0.005738f, -0.007079f, 0.004385f, 0.000243f, 0.004993f, 0.000722f, -0.004063f, 0.003264f, + -0.002777f, -0.002240f, -0.001037f, -0.008956f, 0.006200f, -0.003339f, 0.002505f, 0.004866f, 0.000148f, -0.001335f, -0.004229f, -0.005820f, -0.001313f, -0.064905f, -0.040358f, 0.013209f, 0.013829f, 0.026697f, 0.044132f, -0.012127f, -0.006897f, -0.014033f, -0.013015f, -0.016558f, -0.017756f, 0.001466f, 0.007120f, 0.005609f, 0.027838f, 0.001241f, 0.027315f, -0.001354f, 0.009394f, 0.012673f, 0.009704f, 0.020363f, 0.014483f, 0.001059f, 0.017894f, -0.000192f, -0.002136f, -0.010280f, 0.012099f, -0.001593f, -0.026693f, -0.023027f, 0.014459f, -0.003300f, 0.031788f, 0.019039f, 0.020432f, 0.007617f, -0.040047f, 0.009694f, 0.025137f, -0.003810f, 0.007291f, -0.006080f, 0.004962f, 0.031664f, -0.001134f, 0.026548f, 0.044123f, 0.002541f, -0.016705f, -0.000413f, 0.000425f, -0.027658f, 0.037446f, 0.017924f, -0.005019f, -0.002075f, 0.027118f, 0.012866f, -0.032960f, -0.026741f, 0.010520f, -0.011601f, 0.015693f, 0.011422f, 0.004941f, -0.012970f, -0.023431f, -0.001066f, 0.005880f, 0.004457f, 0.025257f, -0.033926f, 0.004923f, -0.002270f, -0.028847f, -0.013684f, -0.029012f, 0.025343f, -0.008648f, 0.035018f, + -0.027547f, 0.002610f, -0.013282f, 0.019925f, 0.008599f, -0.008544f, -0.001710f, 0.018370f, 0.001098f, 0.005778f, -0.010652f, -0.005580f, -0.009017f, 0.016298f, 0.008014f, 0.000005f, 0.004269f, 0.004936f, -0.014927f, 0.001077f, -0.004241f, 0.005291f, 0.003055f, -0.003144f, -0.015255f, -0.005226f, -0.011283f, 0.013494f, -0.010036f, 0.002265f, -0.002739f, 0.013368f, -0.002866f, -0.002236f, -0.004785f, -0.008188f, -0.000549f, -0.005400f, 0.005226f, 0.014752f, 0.012713f, -0.000800f, -0.013439f, 0.017093f, 0.046032f, -0.054794f, -0.015331f, -0.026713f, -0.001126f, 0.008684f, 0.001450f, 0.036733f, -0.037912f, 0.017922f, -0.005176f, 0.007318f, -0.004590f, 0.020169f, -0.011123f, -0.018777f, -0.001568f, -0.005476f, 0.014262f, -0.001193f, 0.009644f, 0.021366f, -0.004444f, -0.016025f, -0.002139f, 0.024028f, -0.014136f, 0.005722f, 0.005413f, 0.000945f, -0.002176f, 0.023862f, -0.000895f, -0.006168f, -0.039862f, 0.012816f, -0.009857f, -0.025193f, -0.021900f, -0.005832f, -0.024277f, -0.014324f, -0.021080f, 0.009993f, -0.024879f, 0.024822f, -0.022833f, 0.015384f, -0.011792f, 0.030095f, -0.029155f, -0.016960f, + -0.004380f, 0.017430f, 0.007197f, 0.000132f, -0.011990f, -0.023916f, 0.002444f, 0.009324f, 0.034138f, 0.017874f, 0.007464f, -0.019534f, 0.011628f, -0.017331f, -0.019507f, 0.017018f, -0.018936f, 0.009012f, 0.022133f, 0.018430f, -0.004899f, -0.007071f, -0.015933f, 0.026588f, 0.002625f, 0.025445f, 0.041189f, -0.008079f, -0.021577f, -0.009671f, -0.007167f, -0.014855f, 0.006542f, -0.024641f, 0.010749f, 0.008005f, 0.007424f, 0.019442f, -0.013733f, 0.000696f, -0.002477f, 0.004910f, 0.017736f, 0.000490f, 0.013955f, -0.005078f, -0.000302f, 0.001722f, -0.007862f, -0.002851f, 0.008398f, 0.004393f, -0.011249f, -0.014766f, -0.006970f, 0.006476f, 0.005872f, -0.006503f, 0.021092f, 0.006139f, -0.015352f, 0.007728f, 0.011294f, 0.028037f, 0.022845f, 0.012760f, 0.004772f, 0.002682f, -0.011734f, -0.009255f, -0.000338f, -0.009375f, 0.001826f, -0.005447f, -0.017151f, 0.009472f, -0.005636f, -0.002419f, 0.002098f, 0.009343f, 0.000289f, -0.007943f, 0.029788f, 0.041520f, -0.045380f, 0.032131f, 0.022176f, 0.000420f, 0.015762f, 0.055412f, -0.016501f, -0.016850f, 0.004602f, 0.015825f, 0.022574f, 0.006991f, + -0.022626f, 0.024100f, -0.009835f, 0.048887f, -0.002033f, -0.008865f, 0.015312f, 0.012348f, 0.012166f, -0.001210f, 0.045807f, -0.039335f, 0.008707f, -0.001377f, 0.012050f, -0.016799f, -0.032908f, 0.015341f, 0.011901f, 0.012391f, -0.011990f, -0.009236f, 0.038173f, 0.013924f, 0.048158f, 0.003805f, -0.018806f, -0.002605f, 0.010141f, -0.004912f, 0.050020f, -0.007045f, 0.026906f, -0.005578f, 0.044807f, 0.015946f, 0.011561f, -0.011700f, -0.003280f, 0.024415f, -0.000249f, 0.026191f, 0.019542f, 0.023072f, -0.032212f, 0.004414f, 0.021787f, 0.026422f, 0.019491f, 0.014859f, 0.035705f, 0.044062f, -0.034808f, -0.004717f, 0.067220f, -0.016960f, -0.019111f, 0.043344f, 0.058567f, 0.000502f, -0.001305f, -0.032693f, -0.027105f, -0.002343f, 0.029061f, -0.004960f, -0.006319f, 0.000751f, -0.002984f, -0.008860f, -0.023556f, -0.008939f, -0.002432f, -0.014115f, 0.000228f, 0.013255f, -0.008422f, 0.017119f, -0.018588f, 0.015026f, -0.004319f, 0.013017f, -0.014099f, -0.000119f, 0.009390f, 0.005338f, 0.016548f, -0.003613f, -0.009750f, -0.004574f, 0.004469f, 0.015183f, 0.004009f, -0.006178f, 0.021093f, -0.007320f, + 0.010822f, 0.010956f, -0.002616f, -0.002968f, -0.005545f, 0.031203f, -0.012213f, 0.003547f, 0.007484f, 0.011278f, -0.006355f, -0.021104f, -0.012542f, -0.004104f, 0.023392f, 0.011105f, -0.002389f, 0.000925f, 0.007955f, -0.002048f, -0.000280f, 0.007984f, 0.003941f, 0.001668f, -0.000340f, 0.018615f, 0.041915f, -0.002587f, 0.013050f, -0.035855f, 0.034085f, -0.018185f, -0.011258f, -0.031389f, -0.020417f, 0.064293f, 0.000813f, -0.045302f, -0.020286f, -0.001367f, 0.000081f, -0.005996f, 0.049624f, 0.023208f, -0.004361f, -0.020786f, -0.002098f, 0.013060f, -0.006290f, 0.066225f, 0.013943f, 0.029109f, 0.009896f, -0.014938f, -0.037665f, 0.008805f, -0.000591f, 0.005862f, -0.029232f, -0.003093f, -0.019804f, 0.022325f, -0.000049f, 0.003652f, 0.022998f, -0.021006f, -0.015584f, 0.004566f, 0.000818f, 0.006879f, -0.032303f, -0.025228f, -0.055204f, -0.028777f, 0.002147f, -0.031415f, 0.003988f, -0.022797f, -0.013882f, 0.040829f, 0.012602f, -0.019866f, 0.011985f, 0.004628f, -0.000423f, 0.039282f, -0.006995f, 0.047589f, 0.017937f, -0.020485f, -0.058369f, 0.010128f, 0.008972f, 0.032174f, -0.017684f, -0.041731f, + -0.015177f, 0.012102f, 0.001764f, -0.009953f, -0.030360f, -0.009645f, -0.042773f, -0.048350f, 0.014768f, -0.002687f, 0.049196f, -0.015844f, -0.030552f, -0.026238f, -0.002791f, 0.035039f, -0.002271f, 0.012915f, 0.022088f, 0.017228f, -0.008090f, 0.011436f, 0.014959f, 0.005152f, 0.015331f, 0.015483f, -0.011373f, -0.001561f, 0.021624f, -0.004345f, 0.002634f, 0.021020f, -0.004437f, 0.012490f, -0.015960f, 0.006099f, 0.011589f, -0.007036f, 0.006724f, 0.006956f, -0.014971f, 0.019290f, -0.018670f, 0.009355f, 0.009149f, 0.015332f, -0.004306f, -0.010448f, 0.019988f, -0.002653f, 0.014632f, -0.021831f, -0.011204f, -0.016011f, -0.014106f, 0.002105f, -0.011728f, 0.008406f, 0.000562f, 0.003561f, -0.022526f, 0.002490f, -0.006828f, 0.030597f, -0.032992f, -0.001584f, 0.051234f, -0.010509f, 0.015475f, 0.005703f, 0.007173f, -0.047189f, 0.039991f, -0.003535f, -0.037651f, -0.021927f, 0.020452f, -0.005312f, 0.010474f, 0.000138f, -0.015327f, -0.011410f, 0.007340f, -0.011432f, -0.002267f, -0.000310f, -0.054748f, -0.014093f, -0.036546f, 0.008540f, 0.013657f, 0.000010f, -0.015811f, 0.006896f, -0.007305f, 0.022005f, + -0.048382f, 0.003613f, 0.009023f, 0.028304f, -0.020783f, 0.026392f, -0.020463f, 0.016913f, 0.004940f, 0.020605f, -0.031410f, 0.010099f, -0.015306f, -0.033604f, 0.022561f, -0.027132f, -0.054668f, 0.008430f, -0.004666f, 0.043828f, -0.020487f, 0.006411f, 0.020505f, 0.029188f, 0.033191f, 0.003845f, -0.010684f, -0.020249f, 0.001170f, 0.015894f, 0.022038f, -0.042670f, 0.048701f, -0.000044f, -0.032009f, -0.023989f, -0.042761f, 0.017958f, 0.011034f, 0.017567f, 0.008146f, 0.046240f, -0.015778f, 0.050227f, -0.026550f, 0.012020f, -0.010475f, -0.022842f, -0.068997f, 0.039581f, 0.008046f, -0.018095f, -0.046666f, -0.002400f, 0.009290f, -0.003696f, 0.017811f, -0.012383f, -0.014637f, -0.002106f, 0.007896f, -0.012902f, -0.012542f, -0.008018f, -0.001905f, 0.007666f, -0.003571f, -0.003855f, -0.018178f, 0.014249f, 0.000977f, -0.009888f, 0.009107f, -0.007075f, 0.014983f, -0.004110f, 0.007766f, 0.009944f, 0.018389f, -0.005793f, 0.016750f, 0.002170f, 0.001449f, -0.017128f, -0.013198f, 0.004653f, 0.007134f, 0.002796f, 0.001481f, -0.003017f, -0.010903f, -0.005979f, -0.004880f, -0.012123f, -0.005187f, 0.022236f, + -0.010375f, -0.012046f, 0.007364f, -0.026903f, 0.000463f, -0.006774f, -0.040861f, -0.000101f, 0.022625f, -0.008911f, -0.044268f, -0.006999f, -0.064720f, 0.031437f, -0.071535f, 0.042793f, -0.049447f, -0.043128f, 0.012348f, 0.037136f, 0.027728f, -0.024544f, 0.026013f, 0.046704f, 0.008320f, 0.007027f, 0.011002f, 0.004265f, -0.027463f, 0.033519f, -0.056135f, -0.034830f, 0.003173f, -0.003418f, -0.003588f, -0.007405f, -0.013979f, 0.007558f, 0.051693f, 0.013428f, 0.007193f, 0.004906f, -0.024311f, 0.030076f, -0.005423f, -0.051933f, -0.008006f, 0.001185f, 0.001117f, -0.035504f, -0.025137f, 0.027443f, -0.008925f, 0.047044f, 0.008706f, 0.000110f, -0.038233f, -0.020875f, 0.014078f, 0.006148f, -0.010434f, 0.040329f, -0.031866f, -0.019263f, -0.001406f, -0.002264f, 0.037964f, 0.003184f, 0.044412f, 0.000111f, -0.036330f, 0.009145f, -0.030978f, 0.023694f, -0.004370f, 0.032252f, 0.060776f, -0.093463f, 0.031853f, 0.013075f, 0.017109f, 0.035552f, 0.008754f, -0.042789f, -0.009992f, -0.003759f, -0.007798f, 0.022076f, -0.043991f, 0.004316f, -0.011550f, -0.006105f, -0.030327f, -0.016120f, -0.045861f, 0.005274f, + -0.002932f, 0.004895f, 0.012574f, -0.018416f, -0.003415f, 0.022446f, -0.013758f, 0.004563f, -0.007688f, -0.022380f, 0.010434f, 0.013854f, -0.015894f, -0.001452f, -0.025079f, -0.001247f, -0.036256f, 0.013235f, 0.008808f, -0.004280f, 0.003793f, -0.008892f, 0.001432f, 0.007606f, -0.005894f, -0.006503f, 0.020568f, 0.025520f, -0.005783f, 0.008643f, 0.003964f, 0.026199f, 0.011414f, -0.032365f, 0.004209f, 0.019017f, -0.010778f, 0.019219f, 0.005970f, 0.008417f, 0.076525f, 0.066123f, -0.018987f, -0.025646f, -0.001568f, -0.050395f, 0.029348f, -0.002924f, 0.011040f, 0.003868f, -0.025504f, 0.076345f, -0.032877f, -0.134797f, -0.019775f, 0.026845f, -0.090768f, -0.015592f, 0.028336f, -0.076890f, 0.010609f, 0.049985f, -0.035378f, 0.049866f, -0.047981f, 0.042836f, 0.053146f, -0.034027f, 0.014434f, -0.004948f, 0.001100f, -0.014442f, -0.021104f, -0.003927f, 0.032691f, -0.021152f, -0.035188f, -0.019237f, -0.028346f, -0.003041f, -0.022262f, -0.003675f, 0.011678f, -0.005330f, 0.031931f, -0.028269f, -0.034726f, 0.027586f, -0.036729f, -0.054458f, -0.069821f, -0.024353f, -0.001711f, 0.013527f, 0.038828f, -0.016282f, + 0.017377f, 0.018174f, -0.012848f, -0.006056f, 0.064015f, -0.042399f, -0.001683f, 0.043808f, 0.013549f, 0.034439f, -0.008663f, 0.012531f, 0.048598f, 0.024972f, -0.002688f, -0.005970f, -0.030026f, 0.012259f, 0.048888f, -0.045533f, 0.034570f, -0.045059f, 0.013104f, 0.063629f, 0.014641f, -0.035792f, 0.036167f, 0.005721f, -0.022880f, -0.017867f, 0.043776f, 0.014394f, 0.018868f, -0.002664f, 0.003291f, 0.011994f, 0.014347f, -0.001327f, -0.004409f, 0.018614f, 0.016236f, 0.003409f, -0.021667f, 0.023819f, 0.002933f, -0.008234f, 0.005850f, 0.008159f, -0.015776f, -0.004190f, 0.012150f, 0.002342f, 0.020246f, -0.025012f, 0.037615f, 0.029149f, -0.005183f, -0.023852f, -0.009692f, 0.025081f, 0.028674f, 0.046261f, -0.001430f, 0.008910f, 0.007570f, 0.025366f, -0.038591f, -0.020583f, 0.038716f, 0.024227f, 0.002625f, -0.006248f, 0.003327f, 0.010707f, -0.020200f, -0.015846f, -0.013588f, 0.002842f, 0.012347f, -0.006228f, -0.000051f, 0.020115f, -0.021484f, -0.015235f, 0.067707f, 0.046008f, -0.064473f, -0.012697f, 0.058355f, -0.017249f, -0.035470f, -0.024944f, -0.035591f, -0.020860f, 0.058915f, 0.036068f, + -0.004308f, 0.026942f, -0.005981f, 0.032756f, -0.019958f, -0.010937f, 0.065418f, -0.026686f, 0.012161f, -0.018446f, -0.006613f, -0.000376f, 0.018196f, 0.053252f, 0.020800f, -0.035489f, -0.010092f, -0.001296f, -0.005005f, 0.030126f, 0.004408f, 0.053613f, -0.015268f, 0.009555f, -0.005061f, 0.015898f, -0.044210f, 0.027181f, -0.040744f, 0.028237f, -0.001738f, 0.041281f, -0.010229f, 0.030699f, -0.013545f, 0.009904f, 0.017872f, -0.017326f, 0.018505f, 0.041668f, 0.052073f, -0.026996f, 0.053351f, 0.022572f, 0.063210f, -0.017680f, 0.012305f, -0.002012f, -0.007248f, -0.011703f, -0.003853f, -0.020453f, -0.102366f, -0.064438f, -0.019438f, -0.000991f, 0.015089f, 0.007552f, 0.024266f, 0.039038f, -0.056095f, -0.002893f, -0.022350f, 0.085959f, -0.005477f, -0.025809f, -0.006923f, -0.074914f, -0.062353f, 0.094967f, 0.039060f, 0.021427f, -0.014054f, 0.029919f, 0.003019f, -0.068600f, 0.014643f, 0.004901f, -0.025607f, -0.026640f, 0.004921f, 0.000601f, 0.007931f, -0.014201f, -0.006715f, -0.033527f, -0.027911f, 0.012281f, 0.015643f, 0.013242f, 0.010706f, -0.017366f, -0.025114f, -0.015545f, -0.032675f, 0.021251f, + 0.007874f, -0.059147f, -0.006330f, -0.017063f, -0.003393f, 0.029122f, -0.026590f, -0.038252f, -0.007706f, 0.024884f, 0.009130f, -0.026547f, 0.016649f, 0.034352f, -0.062980f, -0.017095f, 0.023516f, -0.001109f, -0.004029f, -0.012138f, -0.001735f, 0.011134f, 0.019928f, 0.004504f, -0.007963f, 0.050811f, -0.073927f, 0.069237f, -0.020439f, -0.020914f, 0.017699f, 0.032128f, -0.057924f, -0.011756f, 0.000846f, 0.011342f, 0.002944f, -0.001850f, 0.028809f, -0.017781f, 0.003557f, 0.015018f, 0.016706f, 0.023949f, 0.019838f, 0.006462f, -0.031849f, -0.006611f, 0.042954f, -0.042104f, -0.035958f, 0.044436f, 0.015104f, 0.031322f, 0.048688f, 0.075473f, -0.017319f, -0.048413f, 0.063914f, -0.026129f, -0.010956f, 0.066505f, 0.020841f, -0.024773f, -0.069806f, -0.046265f, -0.007131f, -0.026007f, 0.032644f, 0.065522f, 0.033598f, -0.022870f, 0.067467f, 0.022449f, -0.024608f, 0.018352f, 0.075312f, 0.021533f, 0.014506f, -0.016212f, -0.060535f, -0.081424f, -0.064582f, -0.004958f, 0.048790f, 0.014641f, 0.030796f, 0.115326f, 0.056896f, -0.069527f, -0.046705f, 0.030367f, -0.095896f, -0.044339f, 0.082554f, 0.029202f, + -0.106530f, -0.089167f, -0.041275f, -0.068348f, -0.063982f, -0.038587f, 0.057886f, -0.016832f, -0.012191f, 0.150840f, 0.025374f, -0.043864f, -0.012098f, -0.047372f, 0.080301f, -0.017300f, 0.017419f, 0.005182f, 0.001121f, -0.044380f, -0.017043f, -0.003842f, -0.022316f, 0.004903f, 0.017204f, 0.038931f, 0.005093f, -0.027155f, -0.001183f, -0.000560f, -0.017665f, 0.007701f, 0.011387f, 0.012887f, -0.034888f, 0.008507f, -0.032320f, 0.005162f, 0.016925f, -0.002370f, 0.025750f, -0.006726f, -0.001709f, 0.025600f, -0.005371f, 0.014089f, 0.028919f, -0.010343f, 0.008604f, 0.019461f, 0.021740f, 0.017356f, 0.003573f, 0.003940f, 0.015125f, -0.016530f, -0.006164f, 0.009856f, 0.028580f, -0.103351f, 0.071450f, 0.030622f, 0.023055f, 0.028664f, -0.011176f, 0.035193f, 0.028874f, 0.041274f, -0.007956f, 0.056636f, -0.035758f, 0.042940f, -0.015794f, -0.033051f, -0.010581f, -0.054157f, 0.005487f, -0.019946f, 0.018975f, -0.013814f, -0.021076f, 0.051769f, -0.059732f, 0.038350f, -0.002194f, -0.026057f, -0.010564f, 0.022882f, 0.025819f, 0.018672f, 0.048922f, 0.039478f, -0.028609f, -0.006033f, -0.025618f, 0.021963f, + -0.022731f, 0.017110f, 0.023460f, 0.010730f, 0.013075f, 0.008700f, -0.014199f, 0.054104f, -0.005288f, 0.016021f, 0.005195f, 0.024887f, 0.013631f, -0.064894f, 0.003970f, -0.038854f, 0.009651f, 0.028529f, -0.005548f, -0.027532f, -0.025406f, 0.060319f, -0.064083f, -0.051705f, 0.094521f, -0.040347f, 0.024321f, 0.009350f, 0.030175f, -0.014377f, 0.015659f, -0.066040f, 0.004241f, 0.064000f, -0.034596f, -0.025972f, 0.054946f, -0.003837f, -0.046090f, -0.033972f, 0.020068f, -0.018020f, -0.010946f, 0.034203f, -0.025555f, 0.008474f, 0.042380f, -0.048144f, 0.002860f, 0.028101f, -0.015915f, -0.009617f, -0.012874f, 0.017281f, 0.004471f, 0.006950f, -0.006633f, 0.009802f, 0.007084f, -0.009489f, 0.000412f, 0.001673f, 0.025144f, 0.012809f, -0.024204f, 0.029187f, 0.006981f, -0.014889f, 0.008199f, 0.008908f, -0.002976f, -0.008717f, 0.020608f, 0.000025f, 0.006726f, 0.002620f, 0.026745f, -0.012574f, -0.010529f, 0.016448f, -0.024659f, 0.030616f, -0.002641f, -0.017284f, -0.003194f, -0.001834f, 0.003337f, -0.000330f, -0.012113f, -0.001741f, 0.015603f, 0.032804f, -0.060728f, -0.247440f, -0.266964f, -0.009373f, + -0.152999f, 0.136082f, 0.491099f, 0.214250f, 0.296300f, 0.374162f, -0.140874f, -0.099518f, -0.039432f, -0.335401f, -0.234506f, -0.075788f, -0.367831f, -0.160096f, -0.032443f, -0.150136f, 0.036191f, 0.345953f, 0.314286f, 0.340132f, 0.440719f, 0.265742f, -0.023546f, 0.099373f, -0.098396f, -0.391457f, -0.212567f, -0.157138f, -0.325270f, -0.222848f, 0.012765f, -0.250289f, -0.082199f, 0.055725f, -0.250154f, -0.128048f, 0.187708f, 0.073094f, 0.203540f, 0.506634f, 0.411855f, 0.333199f, 0.599070f, 0.435013f, -0.007100f, 0.062911f, -0.111641f, -0.536124f, -0.512556f, -0.528650f, -0.823762f, -0.557788f, -0.344723f, -0.337332f, 0.004290f, 0.267937f, 0.301636f, 0.422757f, 0.639735f, 0.592167f, 0.499866f, 0.493642f, 0.282719f, 0.099655f, 0.015906f, -0.030029f, -0.223960f, -0.385477f, -0.473491f, -0.506858f, -0.684593f, -0.568956f, -0.438846f, -0.214529f, 0.229665f, 0.677771f, 0.631170f, 0.691713f, 0.485037f, 0.059447f, -0.065749f, -0.207268f, -0.285190f, -0.192637f, -0.094550f, -0.095223f, -0.042199f, -0.043528f, -0.069386f, 0.000769f, 0.010108f, 0.050653f, 0.157730f, 0.143380f, 0.105595f, 0.145263f, + -0.013673f, -0.093455f, -0.012573f, -0.109789f, -0.095175f, 0.059193f, 0.063877f, 0.014978f, 0.014640f, -0.167476f, -0.428838f, -0.405934f, -0.345853f, -0.260419f, 0.126834f, 0.391364f, 0.478427f, 0.604473f, 0.541737f, 0.334285f, 0.231952f, 0.082443f, -0.096313f, -0.201737f, -0.240818f, -0.312155f, -0.383224f, -0.432066f, -0.504758f, -0.448724f, -0.155351f, 0.110437f, 0.259758f, 0.336945f, 0.366055f, 0.274733f, 0.190447f, 0.095387f, -0.003870f, -0.011298f, 0.046171f, 0.073964f, 0.080819f, 0.087884f, 0.072513f, 0.005335f, -0.062352f, -0.133103f, -0.237092f, -0.228699f, -0.186267f, -0.155753f, -0.087364f, -0.013190f, 0.043910f, 0.062959f, 0.066431f, 0.041791f, 0.026004f, 0.037812f, 0.060081f, 0.084366f, 0.114700f, 0.136351f, 0.131398f, 0.095680f, 0.047714f, -0.010570f, -0.053639f, -0.070819f, -0.094044f, -0.117777f, -0.116368f, -0.090168f, -0.068798f, -0.049685f, -0.037634f, -0.022670f, 0.004563f, 0.040293f, 0.060239f, 0.055420f, 0.051638f, 0.044296f, 0.025907f, 0.021948f, 0.018517f, 0.007794f, 0.016103f, 0.032527f, 0.030579f, 0.027152f, 0.027979f, 0.006233f, -0.020024f, -0.037287f, + -0.062881f, -0.075621f, -0.063897f, -0.049148f, -0.035477f, -0.005117f, 0.014548f, 0.020899f, 0.027328f, 0.020490f, 0.008036f, 0.008750f, 0.019930f, 0.024352f, 0.037876f, 0.041461f, 0.035193f, 0.028640f, 0.011212f, -0.012704f, -0.033126f, -0.044366f, -0.047763f, -0.042241f, -0.028241f, -0.010037f, 0.006465f, 0.014136f, 0.015423f, 0.011579f, 0.008794f, 0.008063f, 0.008134f, 0.007167f, 0.005495f, 0.002511f, -0.000251f, -0.002134f, -0.003068f, -0.002913f, -0.002223f, -0.001145f, -0.000476f}, + {-0.014413f, 0.007078f, -0.016398f, 0.003284f, 0.001257f, 0.001089f, -0.011168f, -0.003924f, 0.003153f, -0.002406f, 0.003722f, 0.005905f, 0.003594f, -0.000097f, 0.004673f, -0.012640f, 0.000371f, -0.000441f, -0.000248f, 0.007028f, 0.010675f, -0.011076f, -0.002432f, -0.006699f, -0.002135f, 0.004012f, 0.007347f, 0.001229f, 0.001872f, -0.002693f, -0.003559f, -0.002905f, -0.002185f, -0.005019f, 0.002837f, -0.005060f, -0.003381f, 0.005857f, -0.004895f, 0.004216f, 0.000757f, -0.012519f, -0.004190f, -0.006880f, -0.001592f, 0.005380f, -0.003647f, -0.001057f, -0.003585f, -0.003737f, -0.002574f, 0.005259f, 0.008003f, 0.001503f, 0.004480f, 0.003545f, -0.004144f, -0.007950f, 0.004358f, 0.003570f, -0.001677f, -0.006837f, -0.005667f, 0.005216f, 0.001118f, 0.003910f, 0.001916f, -0.010533f, -0.003419f, -0.003898f, 0.005903f, 0.002395f, -0.010559f, 0.002832f, -0.005563f, -0.001710f, -0.000481f, -0.003820f, 0.003104f, -0.003483f, 0.000887f, 0.004089f, 0.004260f, 0.002605f, 0.002960f, 0.001920f, -0.000265f, 0.002048f, 0.002557f, 0.000267f, -0.001990f, 0.002869f, 0.000662f, 0.000054f, -0.000763f, -0.001877f, + 0.000990f, 0.001819f, 0.000399f, 0.001496f, -0.000490f, -0.000945f, 0.000054f, -0.001467f, 0.001645f, -0.000251f, 0.001931f, -0.000334f, 0.000437f, -0.000157f, 0.001801f, 0.000928f, -0.000012f, -0.000704f, 0.001170f, -0.000796f, -0.020558f, 0.013402f, -0.009891f, 0.001231f, -0.001427f, -0.003852f, 0.010238f, -0.009237f, -0.006185f, -0.000126f, 0.010828f, -0.004185f, -0.000753f, -0.001295f, 0.008936f, -0.005584f, -0.014643f, -0.003344f, -0.007590f, -0.010265f, 0.000258f, -0.000923f, 0.001558f, 0.005755f, 0.009547f, 0.005915f, 0.000814f, 0.014673f, 0.005636f, 0.000389f, 0.010424f, 0.010951f, -0.001011f, -0.006070f, 0.000298f, 0.004778f, 0.003783f, -0.000194f, -0.002258f, -0.008692f, -0.007696f, -0.003826f, 0.008334f, 0.003397f, 0.014445f, 0.008145f, -0.000782f, 0.004773f, 0.005806f, 0.001882f, -0.009193f, 0.009703f, -0.004025f, 0.005025f, -0.000526f, 0.003003f, -0.010937f, -0.001825f, -0.003572f, 0.003720f, -0.003436f, -0.004177f, 0.011133f, -0.000877f, -0.008604f, 0.003249f, -0.006582f, 0.005167f, -0.003775f, 0.008354f, 0.007141f, 0.008009f, 0.002586f, -0.007901f, 0.004152f, -0.001277f, + 0.004090f, -0.003471f, 0.001063f, 0.011009f, -0.004426f, 0.005301f, 0.007153f, -0.001185f, 0.000296f, -0.000421f, -0.001479f, -0.003038f, 0.001692f, -0.000261f, 0.002623f, -0.000145f, 0.002089f, 0.000059f, 0.000029f, 0.001518f, 0.002546f, 0.001046f, 0.002437f, 0.002810f, -0.000707f, -0.002189f, 0.003597f, 0.000334f, -0.000267f, 0.000216f, 0.002129f, -0.000691f, -0.002227f, 0.001020f, -0.000662f, 0.000523f, -0.000086f, 0.002185f, 0.000568f, 0.001157f, 0.000574f, -0.001960f, 0.004112f, 0.004616f, 0.000263f, -0.003950f, 0.004312f, 0.001697f, 0.001327f, 0.002052f, -0.016141f, 0.005263f, -0.010276f, 0.001731f, 0.003366f, 0.003529f, -0.004700f, 0.008605f, 0.001390f, -0.003164f, -0.001454f, 0.010038f, 0.007222f, -0.004351f, -0.005584f, -0.004594f, 0.003905f, 0.007122f, -0.004274f, -0.004692f, 0.001416f, -0.018324f, -0.000020f, -0.007817f, -0.003065f, -0.007777f, -0.010180f, -0.001251f, 0.009312f, 0.002562f, -0.008291f, -0.002206f, 0.007976f, 0.002407f, -0.005078f, 0.008998f, -0.003891f, -0.012549f, -0.003713f, 0.007045f, -0.003086f, 0.008335f, 0.015964f, 0.012886f, 0.001812f, -0.000182f, + 0.004534f, -0.001961f, -0.009375f, 0.000092f, 0.003576f, -0.006745f, 0.005711f, -0.013370f, -0.001966f, 0.000820f, -0.005639f, -0.004375f, 0.005855f, 0.011636f, -0.009091f, -0.009545f, 0.005961f, 0.005946f, 0.011006f, 0.003519f, -0.006365f, 0.008744f, 0.007602f, -0.002537f, 0.008473f, -0.009347f, 0.009490f, 0.002271f, 0.006448f, 0.001273f, -0.004975f, -0.002901f, -0.000864f, 0.002057f, 0.000246f, -0.004614f, 0.001630f, 0.000022f, -0.002634f, -0.002231f, 0.000673f, -0.000710f, 0.002114f, 0.000089f, 0.003491f, -0.002522f, -0.001761f, -0.000161f, 0.000500f, 0.002940f, -0.001448f, -0.003007f, 0.001414f, 0.000073f, -0.000562f, 0.001985f, -0.000392f, 0.001187f, -0.001272f, 0.001195f, 0.001874f, 0.000193f, 0.002995f, 0.027504f, -0.010731f, -0.004744f, -0.001797f, 0.019821f, -0.002009f, 0.014983f, -0.010951f, 0.013199f, -0.013129f, -0.011522f, 0.002729f, 0.006234f, -0.007765f, -0.001931f, 0.003916f, -0.001043f, 0.005117f, -0.008004f, 0.009169f, 0.003298f, -0.009901f, -0.000405f, 0.003928f, 0.003061f, 0.001732f, 0.018647f, 0.014854f, 0.011617f, -0.000033f, 0.007531f, 0.000677f, 0.002152f, + 0.005562f, -0.017264f, -0.002666f, 0.010476f, 0.006805f, 0.008126f, -0.000224f, -0.003082f, 0.003774f, -0.000706f, 0.021035f, -0.003216f, 0.003522f, 0.002089f, 0.001000f, -0.006257f, 0.012603f, -0.001461f, 0.013105f, -0.007261f, -0.007618f, 0.005419f, -0.005085f, -0.017557f, -0.008107f, 0.003508f, -0.001694f, -0.012564f, 0.003472f, 0.000015f, 0.016292f, 0.001409f, 0.001388f, -0.005009f, 0.005913f, 0.006006f, -0.001367f, -0.000971f, 0.014308f, 0.010519f, 0.010438f, -0.006930f, -0.009867f, -0.008606f, -0.016837f, 0.001383f, -0.011928f, -0.004034f, 0.000723f, -0.006502f, -0.007432f, -0.004140f, -0.000864f, -0.002540f, 0.003929f, 0.007366f, -0.001408f, -0.000866f, -0.003341f, 0.001699f, -0.002427f, -0.002781f, 0.001155f, 0.002013f, 0.000005f, 0.002597f, -0.001546f, 0.000086f, -0.001494f, -0.000994f, -0.000827f, 0.001512f, -0.000934f, -0.000915f, -0.000568f, -0.002393f, -0.002744f, 0.000164f, -0.000326f, -0.003288f, 0.002769f, 0.002800f, 0.003381f, -0.000064f, -0.002405f, -0.001390f, 0.002652f, 0.000710f, 0.020386f, -0.015901f, -0.000264f, -0.016639f, -0.010883f, -0.006398f, 0.014696f, 0.008677f, + -0.020129f, -0.027575f, -0.010525f, 0.009914f, 0.007097f, -0.004019f, 0.009637f, 0.000226f, -0.002217f, 0.001213f, -0.014426f, 0.004520f, -0.001774f, 0.001348f, 0.004751f, 0.001117f, 0.000095f, 0.006251f, 0.005521f, -0.009551f, -0.009504f, 0.011150f, -0.003341f, -0.005292f, 0.006901f, -0.018826f, 0.004671f, 0.004087f, -0.017313f, 0.006486f, 0.018234f, 0.011081f, 0.012566f, 0.002674f, 0.007006f, 0.017295f, 0.003383f, 0.003402f, -0.019528f, 0.010528f, 0.015007f, 0.012276f, 0.002499f, 0.012469f, -0.013864f, 0.013949f, -0.003979f, -0.013670f, -0.021100f, -0.000078f, -0.013359f, -0.010781f, -0.004508f, -0.012833f, -0.032157f, 0.001535f, 0.001860f, -0.000950f, 0.005210f, 0.016040f, 0.006162f, 0.006550f, 0.004424f, -0.011419f, 0.001874f, 0.005537f, 0.004821f, 0.004236f, 0.004889f, -0.011722f, -0.003330f, -0.014811f, -0.006554f, -0.000940f, 0.003681f, -0.005329f, 0.005505f, 0.001200f, 0.001138f, -0.003607f, -0.000399f, -0.001850f, 0.000240f, -0.002011f, 0.002214f, 0.000786f, 0.001731f, -0.000411f, -0.002513f, -0.002141f, -0.002026f, 0.002435f, 0.001702f, 0.000136f, -0.000824f, -0.001927f, + -0.002008f, -0.002040f, -0.006498f, 0.001156f, 0.001183f, -0.004964f, -0.002422f, -0.001712f, -0.043658f, 0.021565f, 0.002816f, -0.016936f, 0.004167f, -0.001825f, -0.004972f, -0.003424f, -0.009582f, 0.005208f, -0.004896f, 0.001057f, 0.006332f, 0.005850f, 0.018967f, -0.007612f, -0.018060f, 0.009886f, -0.022911f, -0.009850f, 0.003774f, 0.003198f, 0.002645f, 0.007473f, 0.009235f, 0.007973f, -0.000140f, 0.010539f, 0.000710f, -0.004129f, 0.013969f, 0.008681f, -0.004224f, 0.008335f, -0.014400f, 0.027293f, 0.001052f, 0.005112f, -0.002535f, -0.023355f, -0.004031f, -0.008666f, -0.008177f, 0.003674f, 0.019519f, 0.000595f, 0.000836f, -0.002471f, -0.005363f, -0.012583f, 0.004013f, -0.002038f, 0.006999f, -0.015867f, 0.005385f, 0.008525f, 0.003747f, -0.011741f, -0.004172f, 0.003157f, 0.001536f, 0.009603f, 0.001890f, 0.033185f, -0.009445f, -0.014068f, -0.016040f, -0.004800f, 0.000348f, 0.011887f, -0.015979f, -0.002014f, -0.006846f, 0.007369f, -0.023337f, -0.000952f, -0.006319f, -0.009709f, 0.002913f, -0.002768f, 0.006370f, -0.000759f, 0.011700f, 0.007481f, -0.000033f, 0.002564f, 0.000905f, 0.001555f, + 0.013564f, 0.001716f, 0.009698f, 0.003606f, -0.002455f, 0.000341f, 0.000344f, 0.002898f, -0.001790f, 0.001539f, -0.000527f, 0.004209f, 0.000752f, -0.002966f, -0.004472f, 0.003719f, -0.001729f, -0.005206f, -0.002355f, -0.002680f, -0.001248f, -0.001505f, -0.000114f, 0.006702f, 0.000097f, 0.001980f, 0.000778f, 0.002792f, -0.002620f, -0.001312f, -0.004816f, -0.005334f, 0.020007f, -0.006085f, -0.004445f, 0.004512f, 0.006090f, -0.015664f, -0.015805f, -0.014437f, -0.013552f, -0.022338f, 0.014503f, -0.012967f, 0.004256f, 0.005741f, 0.020795f, -0.003145f, -0.004624f, 0.016335f, 0.003984f, 0.003618f, -0.018631f, -0.012129f, 0.009541f, 0.004278f, 0.007638f, 0.011350f, -0.019642f, 0.000463f, 0.008747f, 0.019229f, 0.000057f, 0.002034f, -0.002610f, 0.000251f, -0.012732f, -0.002222f, -0.003788f, -0.023910f, -0.001691f, 0.007615f, -0.013611f, 0.006168f, -0.014829f, 0.000147f, -0.010185f, -0.001913f, -0.003010f, 0.001593f, 0.019716f, -0.005449f, 0.000501f, 0.010207f, -0.005339f, 0.006071f, -0.015920f, -0.028578f, -0.015409f, -0.008510f, -0.003842f, 0.003286f, 0.019450f, -0.008820f, 0.005387f, 0.004894f, + -0.013594f, 0.004885f, -0.010417f, -0.003535f, 0.007264f, 0.019705f, -0.002767f, -0.000839f, 0.006453f, -0.000237f, -0.018086f, -0.017130f, -0.007051f, 0.017502f, -0.001865f, -0.025745f, 0.002051f, -0.016848f, -0.007346f, -0.003343f, -0.001590f, 0.005957f, -0.006351f, -0.001793f, 0.006670f, -0.001634f, 0.007796f, 0.006757f, 0.004959f, -0.002888f, 0.007638f, -0.006433f, -0.004770f, -0.004503f, 0.001329f, -0.000583f, -0.001219f, -0.001381f, -0.001073f, -0.002108f, 0.001683f, -0.000419f, 0.004993f, -0.003131f, -0.001902f, 0.002194f, -0.002676f, -0.001518f, -0.007295f, -0.008892f, -0.000602f, 0.000895f, 0.004661f, 0.000776f, 0.002892f, 0.000387f, 0.019056f, 0.020014f, -0.006343f, 0.001715f, 0.020993f, -0.021684f, -0.019328f, 0.016040f, -0.004054f, 0.002061f, 0.014526f, -0.003055f, -0.004203f, 0.014541f, -0.027392f, 0.011447f, -0.001413f, 0.004463f, 0.013056f, 0.013518f, -0.015427f, 0.002749f, -0.021127f, 0.006303f, -0.006497f, -0.002376f, -0.014767f, -0.000879f, -0.021084f, 0.001892f, -0.018304f, 0.012547f, -0.006558f, 0.002272f, 0.022378f, 0.010353f, 0.009901f, -0.018155f, 0.003106f, 0.020824f, + -0.005172f, -0.029880f, 0.015754f, -0.003749f, 0.002691f, -0.005969f, -0.014027f, 0.019553f, 0.006841f, 0.015915f, 0.003773f, 0.002216f, -0.013451f, -0.017257f, 0.005945f, 0.007932f, 0.008370f, 0.011317f, 0.026100f, -0.000968f, -0.020671f, -0.013386f, 0.015609f, -0.002373f, -0.017810f, -0.004702f, -0.001337f, -0.004868f, -0.022479f, 0.000275f, 0.002773f, 0.005476f, -0.008320f, 0.012737f, -0.000929f, 0.001349f, 0.017941f, 0.009254f, 0.018687f, -0.018723f, -0.008093f, 0.003389f, -0.010551f, 0.008448f, 0.004922f, 0.005157f, -0.001086f, -0.002418f, -0.001876f, -0.000330f, -0.007669f, 0.009361f, -0.003766f, 0.005729f, -0.001851f, 0.006681f, -0.003014f, -0.003362f, 0.000075f, 0.003830f, -0.003660f, -0.000152f, -0.001178f, -0.003729f, -0.002224f, 0.001682f, -0.004441f, -0.001290f, -0.009024f, -0.006771f, 0.003281f, 0.005961f, 0.002726f, 0.002712f, -0.001292f, -0.000715f, -0.004445f, -0.000655f, 0.004055f, -0.005780f, -0.001231f, 0.002667f, -0.001582f, 0.004675f, 0.004107f, -0.003232f, -0.001740f, 0.004184f, 0.002458f, -0.002169f, -0.000145f, 0.015299f, -0.018647f, 0.021817f, -0.004925f, 0.023078f, + -0.018868f, 0.017081f, 0.001867f, -0.001813f, 0.028744f, -0.015030f, 0.001707f, -0.014588f, -0.004359f, 0.043824f, 0.021138f, 0.009302f, 0.006328f, 0.012462f, -0.007018f, -0.000061f, -0.037068f, 0.006881f, -0.001562f, -0.016025f, 0.017753f, 0.013329f, -0.000570f, 0.003165f, -0.021428f, 0.018870f, -0.010016f, 0.020041f, 0.013114f, 0.010702f, -0.015380f, -0.002700f, -0.012934f, 0.019245f, 0.004414f, -0.007003f, 0.034087f, 0.016307f, -0.003865f, 0.001796f, -0.028273f, 0.004803f, 0.001293f, 0.022449f, -0.010100f, -0.028731f, -0.004963f, -0.007945f, -0.005606f, -0.040609f, -0.020261f, -0.043253f, -0.022059f, -0.015452f, 0.005073f, -0.010867f, 0.020406f, 0.002559f, -0.023377f, 0.014106f, -0.015647f, 0.022104f, -0.019714f, -0.015955f, 0.011490f, 0.019693f, 0.019362f, 0.000082f, -0.018198f, -0.014487f, 0.008868f, -0.011877f, 0.000424f, -0.005987f, 0.007298f, -0.008143f, -0.012031f, 0.021196f, 0.009793f, 0.002921f, -0.003397f, 0.008009f, 0.004485f, 0.009852f, -0.000951f, 0.006684f, 0.002326f, 0.011063f, 0.000186f, -0.000481f, 0.000591f, -0.005394f, 0.000160f, 0.002860f, 0.001320f, 0.001252f, + 0.000260f, 0.008537f, 0.003858f, -0.006660f, 0.000707f, 0.003910f, -0.002157f, -0.002511f, -0.001660f, 0.000564f, 0.001583f, 0.004330f, -0.001112f, 0.002972f, 0.004927f, -0.000974f, -0.005082f, -0.000382f, -0.005537f, -0.002351f, -0.005117f, -0.003203f, 0.004359f, 0.000370f, -0.002882f, 0.002906f, 0.001564f, 0.006099f, -0.003597f, -0.001793f, -0.005477f, 0.002421f, 0.001193f, -0.026325f, -0.031353f, -0.020606f, -0.002520f, 0.000111f, -0.003616f, 0.008097f, 0.012050f, 0.008528f, 0.000514f, 0.004815f, -0.009597f, 0.007161f, -0.020015f, -0.028104f, 0.001418f, 0.022469f, 0.004362f, -0.007207f, 0.018080f, 0.010916f, 0.017517f, 0.029135f, 0.004234f, -0.008315f, -0.017716f, -0.014079f, 0.008880f, -0.016214f, -0.011087f, 0.004830f, -0.012727f, -0.028673f, -0.015487f, -0.001093f, -0.002870f, 0.007348f, -0.006047f, 0.016694f, 0.005217f, 0.006658f, 0.022902f, -0.003064f, 0.003176f, 0.005713f, -0.017343f, 0.021597f, 0.003991f, -0.018964f, -0.031365f, 0.008641f, 0.003389f, -0.022644f, 0.025048f, 0.016452f, -0.020957f, 0.007803f, 0.021140f, 0.012131f, 0.006052f, 0.017654f, -0.007309f, -0.006372f, + 0.001822f, -0.008947f, -0.014653f, 0.026517f, -0.022637f, -0.002044f, 0.010219f, 0.002765f, 0.040906f, -0.034510f, 0.011221f, -0.003937f, 0.000363f, 0.011836f, 0.000984f, 0.002966f, -0.008899f, 0.005893f, -0.020265f, -0.043543f, -0.001955f, 0.000016f, -0.022139f, -0.013857f, -0.002632f, 0.008892f, 0.007797f, 0.003666f, 0.002392f, -0.006786f, 0.000301f, -0.009728f, -0.004661f, -0.001433f, -0.005447f, -0.008711f, 0.003705f, -0.001198f, 0.002108f, -0.004181f, -0.002951f, 0.002761f, -0.007039f, -0.015513f, -0.005101f, 0.001659f, -0.003843f, -0.014935f, -0.008138f, 0.007011f, 0.004929f, 0.003631f, -0.002558f, -0.005378f, -0.006918f, -0.000794f, -0.003219f, -0.008218f, -0.006780f, -0.009791f, -0.004908f, -0.006412f, -0.006506f, 0.000388f, -0.001204f, 0.003412f, -0.002236f, 0.003328f, -0.001873f, 0.005791f, -0.007676f, -0.020695f, 0.018420f, -0.037499f, -0.026622f, 0.019926f, -0.000838f, -0.034138f, 0.017649f, -0.019925f, 0.038855f, 0.007874f, -0.050961f, -0.006375f, 0.004711f, -0.012772f, 0.003908f, 0.009018f, 0.018179f, 0.015635f, -0.029586f, -0.001172f, 0.002830f, -0.006019f, -0.027115f, -0.004069f, + -0.005588f, -0.009197f, -0.008240f, -0.000255f, 0.002055f, 0.023265f, 0.025375f, -0.007709f, 0.013682f, 0.011933f, 0.011553f, 0.025400f, 0.000350f, 0.006946f, -0.029058f, -0.009837f, 0.010273f, -0.005587f, 0.014063f, 0.034827f, 0.005124f, -0.030162f, -0.067591f, 0.000024f, -0.020831f, 0.019380f, -0.012770f, -0.006700f, -0.013278f, -0.036331f, 0.015900f, 0.049018f, 0.002862f, 0.012995f, -0.038300f, 0.008133f, -0.004345f, -0.017042f, 0.004394f, 0.018938f, 0.009732f, 0.015326f, -0.016499f, 0.024451f, 0.014202f, -0.028012f, -0.041955f, -0.002442f, -0.031907f, -0.029606f, -0.019032f, -0.021762f, 0.002856f, 0.039574f, 0.015091f, 0.001699f, -0.005270f, 0.025579f, -0.012907f, -0.018593f, -0.003035f, 0.004210f, -0.002981f, 0.004937f, 0.003911f, 0.000510f, 0.003958f, 0.009975f, 0.003547f, -0.000759f, 0.000706f, -0.003458f, -0.003746f, 0.010466f, -0.003094f, 0.010308f, 0.000227f, -0.005355f, 0.001212f, -0.002667f, -0.004242f, 0.012413f, -0.002935f, 0.006868f, -0.014879f, -0.001570f, 0.007209f, 0.000264f, 0.002940f, 0.012696f, -0.009301f, 0.011637f, -0.001159f, 0.001609f, 0.003441f, -0.003441f, + 0.008616f, 0.001619f, 0.000490f, 0.001889f, 0.000398f, 0.004317f, 0.011097f, -0.004264f, 0.003874f, 0.004755f, 0.004291f, 0.005311f, -0.001774f, -0.073766f, -0.046589f, 0.033403f, 0.026896f, 0.043767f, -0.000183f, 0.017224f, 0.004252f, 0.013792f, -0.000580f, 0.008882f, -0.019430f, -0.023303f, -0.014465f, -0.020867f, -0.013461f, -0.014879f, 0.017804f, 0.042065f, 0.009181f, -0.051418f, -0.012219f, 0.008963f, -0.013657f, 0.012509f, -0.029380f, -0.002421f, -0.001001f, 0.001664f, 0.014311f, 0.010810f, 0.002006f, -0.003584f, -0.006567f, 0.011911f, 0.023237f, -0.018677f, -0.028903f, 0.019176f, 0.009152f, 0.025167f, 0.011513f, 0.036609f, -0.025364f, -0.008957f, 0.023407f, 0.034901f, 0.030372f, 0.017924f, 0.008547f, -0.007556f, 0.002299f, -0.004465f, 0.000130f, 0.012053f, -0.045677f, 0.024489f, -0.003604f, 0.006588f, -0.003023f, 0.034617f, -0.010587f, -0.000584f, -0.007610f, 0.021925f, 0.018672f, -0.039039f, 0.027953f, -0.033221f, -0.001679f, -0.016885f, -0.016675f, 0.015060f, 0.002765f, -0.051750f, -0.004581f, -0.004156f, -0.009536f, -0.006097f, -0.001215f, -0.006679f, 0.026845f, 0.002557f, + 0.025680f, -0.008206f, 0.030366f, 0.014240f, -0.015682f, 0.006595f, -0.003916f, 0.001656f, 0.001975f, 0.002775f, 0.004099f, 0.001475f, -0.005881f, -0.009816f, 0.015111f, 0.006605f, 0.012405f, 0.003366f, -0.007367f, 0.014172f, 0.000567f, 0.000654f, 0.010767f, -0.030230f, -0.013959f, -0.013488f, 0.004246f, -0.000504f, -0.020457f, 0.000789f, 0.003454f, -0.001045f, -0.003829f, -0.000152f, 0.007054f, -0.007585f, -0.000282f, 0.008058f, 0.004088f, 0.009842f, -0.008664f, -0.004357f, 0.002500f, 0.010686f, 0.040873f, -0.045597f, -0.001105f, -0.025943f, -0.073072f, -0.008693f, -0.027005f, -0.057691f, 0.011461f, -0.000433f, -0.011256f, 0.003562f, 0.030917f, -0.002065f, -0.032793f, 0.011174f, 0.001268f, -0.010583f, -0.007930f, -0.005900f, 0.001602f, 0.035630f, -0.008064f, -0.001377f, 0.016154f, 0.011915f, -0.005191f, 0.017220f, 0.015765f, -0.007686f, -0.007548f, -0.014404f, 0.019811f, -0.004812f, -0.034250f, 0.005158f, -0.002315f, 0.011687f, 0.044767f, -0.029980f, -0.048033f, -0.030329f, -0.014062f, 0.006569f, 0.015962f, 0.008441f, 0.034068f, 0.016981f, -0.024087f, -0.013951f, -0.032838f, 0.028325f, + 0.017427f, 0.003090f, 0.005987f, -0.018885f, 0.001942f, -0.019978f, 0.034348f, 0.033672f, 0.002369f, -0.015793f, -0.008781f, 0.003259f, 0.031267f, 0.062406f, 0.038414f, -0.005988f, -0.013994f, 0.000789f, 0.019853f, 0.008560f, 0.018322f, 0.025240f, -0.025111f, -0.001245f, -0.048399f, -0.032674f, -0.031111f, -0.020900f, 0.012978f, 0.029618f, 0.020373f, 0.003154f, -0.005945f, -0.002860f, -0.026954f, -0.033930f, -0.008574f, -0.018064f, -0.016991f, 0.003809f, -0.003462f, -0.004407f, 0.000158f, 0.001008f, 0.007708f, -0.008703f, 0.017277f, -0.017665f, 0.007407f, -0.022463f, -0.007524f, -0.000126f, 0.004124f, -0.000757f, 0.003915f, 0.008482f, -0.006094f, 0.000916f, 0.020536f, 0.025005f, 0.030194f, 0.016489f, 0.018907f, 0.008470f, 0.003583f, 0.001312f, 0.000518f, 0.001041f, -0.005304f, -0.016422f, -0.016008f, -0.002759f, 0.012410f, -0.000120f, 0.001899f, -0.006787f, -0.004763f, 0.001804f, 0.015190f, 0.009476f, 0.018132f, 0.014574f, 0.012993f, 0.015663f, -0.035637f, -0.004174f, -0.018448f, 0.026852f, -0.029608f, 0.005760f, 0.002615f, 0.052502f, -0.032449f, -0.009494f, -0.033376f, -0.007204f, + -0.032968f, -0.027698f, -0.019992f, 0.010362f, -0.035465f, -0.025718f, -0.038567f, -0.009834f, -0.005799f, -0.011787f, -0.017428f, -0.042975f, 0.011241f, -0.030372f, 0.012284f, -0.031867f, 0.039299f, 0.006070f, 0.017613f, -0.007569f, -0.037074f, 0.019877f, 0.011496f, -0.012461f, 0.019846f, 0.027789f, -0.015017f, -0.039927f, -0.021398f, 0.053556f, -0.022884f, -0.001730f, 0.001373f, -0.009067f, 0.011762f, 0.034716f, 0.006149f, 0.014775f, -0.011184f, 0.024840f, 0.000338f, 0.019570f, 0.005949f, 0.006653f, -0.000618f, 0.002019f, 0.042439f, 0.012881f, 0.101620f, -0.062024f, 0.039590f, 0.055709f, -0.014733f, 0.001280f, 0.028710f, -0.020810f, -0.006121f, 0.046643f, 0.018452f, -0.007769f, 0.024727f, -0.010590f, -0.045188f, -0.033405f, 0.011306f, 0.001818f, -0.060371f, -0.016793f, -0.006204f, -0.031340f, 0.016066f, 0.009389f, -0.020413f, -0.016690f, -0.012347f, 0.001758f, 0.005506f, 0.012762f, -0.010642f, 0.001491f, 0.007403f, -0.003355f, -0.013472f, 0.003682f, 0.002752f, 0.004206f, 0.012481f, 0.002210f, -0.007714f, 0.000989f, 0.014461f, 0.012855f, 0.006186f, -0.014461f, -0.000401f, 0.026502f, + -0.007668f, -0.005649f, 0.014632f, -0.014471f, -0.025065f, -0.007174f, 0.001255f, -0.003312f, -0.012931f, -0.004012f, -0.000899f, -0.014213f, -0.003066f, 0.001424f, -0.004066f, -0.014764f, -0.024338f, 0.009088f, 0.025840f, 0.009294f, -0.000714f, 0.000814f, -0.005054f, -0.015526f, -0.012493f, 0.056435f, 0.063078f, 0.000804f, 0.045509f, 0.045327f, -0.002599f, 0.020369f, -0.045773f, -0.014227f, 0.040372f, 0.003790f, 0.039860f, 0.055829f, 0.045954f, -0.009307f, 0.029959f, -0.046876f, -0.073098f, -0.031299f, -0.027396f, 0.017549f, 0.000049f, 0.018780f, 0.020288f, 0.043960f, 0.033988f, 0.011836f, -0.034896f, -0.004272f, 0.034737f, 0.011170f, -0.017168f, 0.022369f, 0.047927f, -0.005438f, 0.016628f, -0.039207f, 0.018672f, -0.030959f, -0.008471f, -0.019669f, -0.040713f, 0.024875f, 0.002726f, 0.012112f, 0.048549f, -0.026346f, -0.029661f, 0.017511f, 0.050309f, -0.039651f, -0.026590f, 0.016334f, -0.012881f, 0.071137f, 0.052606f, -0.050147f, -0.019012f, -0.039657f, 0.002025f, 0.043373f, -0.020258f, -0.030232f, -0.013862f, 0.002597f, 0.010351f, -0.036179f, 0.008534f, 0.072494f, 0.005141f, -0.048600f, + -0.074209f, 0.059703f, -0.071591f, -0.060086f, -0.035226f, -0.030778f, -0.051839f, 0.013703f, 0.012985f, 0.083001f, 0.020632f, 0.036407f, -0.018526f, 0.039597f, -0.005032f, -0.017167f, 0.014831f, 0.001645f, -0.004018f, 0.040604f, 0.005006f, 0.020676f, 0.025771f, 0.013848f, 0.030935f, -0.009065f, 0.008214f, -0.006964f, -0.002730f, -0.006931f, -0.026399f, -0.019593f, -0.021836f, 0.024697f, 0.008673f, 0.021967f, 0.027267f, -0.006305f, 0.016254f, 0.035412f, 0.012621f, -0.011770f, 0.018174f, 0.021151f, 0.007134f, -0.005274f, -0.026084f, -0.023473f, 0.022903f, 0.009527f, 0.015166f, 0.030206f, 0.067419f, 0.028833f, 0.016851f, 0.012161f, 0.018932f, -0.010365f, -0.002460f, 0.033828f, -0.022129f, -0.027066f, -0.005459f, 0.012866f, -0.011797f, 0.012195f, 0.007243f, -0.065744f, -0.037990f, -0.049363f, 0.013398f, 0.027864f, 0.009946f, 0.042612f, 0.038220f, 0.053972f, 0.016874f, 0.058914f, 0.026369f, 0.038145f, -0.018402f, -0.006991f, -0.018499f, -0.044816f, -0.032242f, -0.069505f, -0.041285f, -0.013077f, -0.040562f, 0.009350f, -0.001427f, -0.000692f, 0.016846f, 0.014107f, 0.006494f, 0.034211f, + -0.008352f, -0.027638f, 0.040619f, 0.004151f, -0.053418f, -0.022674f, -0.005659f, -0.063925f, -0.048720f, -0.047034f, 0.004513f, 0.023407f, 0.006337f, -0.024243f, -0.003015f, 0.027387f, 0.016666f, 0.064553f, 0.012033f, -0.085642f, -0.028635f, -0.014378f, 0.013825f, 0.013983f, -0.009845f, -0.022308f, 0.031973f, -0.047160f, -0.008811f, -0.037688f, 0.029029f, -0.074605f, -0.046558f, -0.060720f, -0.049249f, 0.002970f, -0.027776f, -0.020823f, -0.049435f, 0.025514f, 0.088794f, -0.001636f, 0.057378f, -0.031181f, 0.014036f, -0.041480f, -0.000231f, 0.063962f, 0.015006f, -0.029187f, 0.003265f, 0.025082f, -0.042829f, -0.065432f, -0.035748f, 0.017683f, -0.051613f, 0.022894f, -0.000913f, -0.000640f, 0.032867f, 0.018053f, -0.009005f, 0.039161f, 0.037977f, 0.031484f, -0.010295f, -0.009692f, -0.006931f, 0.000416f, 0.026353f, 0.020021f, 0.013161f, 0.001590f, 0.027455f, 0.016314f, 0.003960f, 0.004596f, 0.020221f, -0.007595f, -0.007391f, 0.015304f, -0.021756f, 0.020331f, -0.018970f, -0.017241f, -0.022277f, 0.039341f, 0.023382f, 0.036668f, 0.012546f, 0.014526f, 0.002647f, 0.003636f, 0.016851f, -0.025530f, + -0.043546f, 0.004571f, 0.011414f, 0.011968f, 0.015752f, -0.002787f, -0.017288f, 0.049492f, 0.020382f, 0.049929f, -0.080855f, 0.035428f, 0.061142f, -0.005668f, 0.070384f, -0.036930f, -0.106848f, -0.055138f, -0.000547f, -0.010413f, 0.012010f, -0.038079f, 0.037187f, 0.052581f, -0.046914f, 0.041826f, -0.025625f, -0.031292f, -0.074585f, -0.030235f, -0.042795f, -0.028075f, -0.034202f, 0.034013f, 0.005184f, -0.066685f, -0.085621f, 0.065095f, 0.014802f, 0.023535f, -0.019916f, 0.005505f, -0.023078f, 0.000931f, 0.019838f, 0.030217f, 0.027226f, 0.072871f, 0.002453f, -0.051739f, 0.070492f, -0.007121f, -0.018165f, -0.032342f, 0.029814f, -0.057554f, -0.038768f, 0.033189f, -0.030001f, -0.044747f, -0.056486f, -0.049235f, -0.010490f, 0.006981f, 0.005462f, -0.014953f, 0.061117f, 0.052304f, -0.004917f, -0.029248f, -0.050931f, -0.058194f, 0.014545f, 0.012727f, -0.011434f, -0.005340f, 0.083847f, 0.006035f, -0.024354f, 0.036578f, 0.017467f, -0.054809f, 0.044007f, 0.080113f, -0.087323f, 0.141609f, 0.037807f, 0.041177f, 0.015556f, 0.041471f, -0.011135f, -0.086766f, 0.059794f, 0.005508f, -0.010759f, 0.062476f, + -0.073544f, 0.013320f, 0.013011f, 0.000016f, -0.007046f, 0.003534f, -0.005680f, -0.019909f, 0.010929f, 0.022216f, -0.018070f, -0.001880f, -0.026762f, -0.030314f, 0.039960f, -0.008385f, -0.019532f, 0.009609f, -0.010632f, -0.024020f, -0.044338f, -0.009740f, -0.015049f, 0.039311f, -0.037202f, -0.003296f, 0.045778f, -0.009219f, 0.036585f, -0.012587f, -0.031949f, 0.017111f, -0.006427f, -0.014711f, 0.018946f, 0.004964f, 0.050407f, -0.006243f, -0.000771f, 0.032864f, 0.100920f, 0.044152f, 0.002064f, -0.034200f, 0.048062f, -0.001118f, 0.003213f, -0.023532f, 0.043845f, -0.051513f, 0.037100f, 0.035593f, 0.037585f, 0.017984f, -0.014121f, 0.049844f, 0.062683f, -0.013168f, 0.025764f, -0.039344f, 0.063082f, 0.026684f, 0.020976f, -0.040708f, -0.088450f, 0.017249f, -0.027231f, -0.020500f, -0.035984f, -0.045465f, 0.027106f, 0.011900f, -0.022080f, 0.004709f, 0.001986f, -0.024184f, -0.107995f, -0.007072f, -0.023024f, -0.011408f, -0.001771f, 0.075676f, 0.051798f, -0.025698f, 0.019493f, -0.050438f, 0.005500f, 0.037131f, -0.057322f, -0.053456f, -0.043736f, 0.068455f, -0.049547f, 0.013950f, 0.055173f, -0.074859f, + -0.069286f, 0.063366f, 0.050616f, 0.053130f, 0.071396f, 0.026058f, -0.091548f, 0.020248f, 0.026959f, -0.008473f, 0.149277f, -0.015839f, -0.022826f, -0.067897f, -0.058433f, 0.029710f, -0.053862f, 0.034661f, 0.012140f, 0.039254f, 0.081751f, -0.052905f, -0.035874f, 0.099214f, -0.060747f, -0.067424f, 0.043731f, -0.086723f, 0.062712f, -0.066047f, 0.014904f, 0.022141f, -0.047568f, 0.019282f, -0.055210f, 0.037962f, 0.070344f, -0.003318f, 0.012184f, 0.014015f, 0.002589f, -0.021955f, -0.020292f, -0.005064f, 0.020391f, -0.009543f, 0.013761f, -0.014747f, -0.043642f, 0.018245f, 0.003871f, 0.029208f, 0.014729f, 0.025442f, -0.008808f, -0.009124f, -0.043241f, 0.029898f, -0.005794f, -0.040003f, 0.009301f, 0.080877f, 0.022584f, -0.021279f, 0.024018f, 0.043319f, -0.021605f, 0.004286f, 0.033728f, -0.017384f, 0.033648f, 0.010866f, -0.010345f, -0.052866f, 0.009074f, -0.020539f, -0.001061f, 0.064716f, -0.029595f, 0.002900f, 0.012835f, 0.008947f, -0.018428f, 0.021552f, 0.074087f, 0.005396f, -0.064771f, 0.090390f, 0.021328f, -0.006959f, 0.064226f, 0.031363f, 0.051809f, 0.018779f, -0.079047f, -0.018103f, + -0.030048f, 0.035926f, 0.090387f, -0.058695f, 0.013961f, -0.028649f, 0.039846f, 0.045741f, -0.062259f, 0.050430f, -0.050142f, -0.045375f, 0.021894f, 0.041341f, 0.001096f, 0.013105f, 0.032230f, -0.050734f, 0.043289f, 0.002528f, 0.052991f, -0.010444f, -0.014835f, 0.016574f, 0.078808f, -0.036600f, 0.063553f, -0.031994f, 0.012304f, 0.015863f, 0.063523f, -0.004699f, -0.004794f, 0.021148f, 0.096080f, 0.005443f, -0.076202f, -0.007073f, -0.091610f, 0.053721f, -0.000401f, 0.148256f, 0.031350f, -0.044555f, -0.013824f, 0.032043f, -0.033594f, 0.051455f, 0.096784f, 0.065717f, 0.000891f, 0.027381f, 0.041607f, -0.005755f, -0.045875f, -0.007185f, -0.010867f, -0.156708f, 0.096545f, 0.071484f, 0.066279f, 0.015162f, -0.068020f, -0.021176f, 0.050311f, 0.025361f, 0.043749f, 0.022880f, -0.149703f, -0.054333f, 0.091037f, 0.024161f, 0.029018f, 0.077843f, -0.056431f, -0.002875f, -0.008421f, 0.043618f, 0.010731f, -0.005496f, -0.012739f, 0.034130f, -0.009813f, -0.041805f, 0.019607f, -0.020751f, -0.023910f, 0.019994f, 0.030403f, -0.024038f, -0.007752f, -0.001982f, 0.023867f, -0.032463f, 0.024825f, -0.028823f, + 0.012467f, -0.048984f, -0.049495f, 0.047336f, 0.005732f, 0.003093f, -0.006184f, -0.036522f, -0.011439f, 0.031288f, 0.002931f, 0.009830f, 0.053537f, -0.009595f, -0.041624f, -0.005180f, -0.023891f, 0.017228f, 0.019704f, -0.020791f, -0.017130f, 0.020096f, 0.044271f, 0.055425f, -0.002300f, 0.058733f, -0.036234f, 0.059773f, -0.054603f, 0.009285f, 0.028586f, -0.027995f, 0.004016f, 0.011320f, -0.014948f, -0.029215f, -0.055278f, 0.084289f, -0.018900f, -0.016459f, -0.028128f, -0.004581f, -0.011652f, 0.027505f, -0.056674f, -0.016172f, -0.035503f, 0.012322f, -0.035701f, 0.034359f, -0.000334f, 0.017802f, -0.039382f, -0.071355f, 0.003256f, -0.052092f, -0.054773f, 0.024973f, -0.042059f, -0.035236f, 0.068997f, -0.025345f, -0.040606f, 0.005441f, -0.041760f, 0.019785f, 0.025921f, -0.007323f, -0.034167f, -0.009610f, 0.019577f, 0.017739f, -0.015675f, -0.001134f, 0.060732f, -0.010525f, -0.037895f, -0.047446f, -0.007151f, -0.020586f, -0.072249f, 0.067904f, 0.023048f, -0.082232f, 0.050563f, -0.003266f, -0.034977f, 0.159333f, 0.089148f, 0.073608f, 0.038479f, 0.022784f, -0.038098f, 0.006348f, 0.017091f, 0.019209f, + 0.006710f, 0.070077f, 0.015170f, -0.020131f, -0.034708f, -0.140047f, 0.028229f, 0.019014f, -0.001164f, -0.026878f, -0.053442f, -0.009894f, -0.034618f, -0.029954f, -0.002723f, 0.044992f, -0.030970f, 0.077409f, 0.010704f, -0.014686f, -0.005952f, -0.005886f, 0.005526f, 0.032974f, -0.013146f, 0.008782f, 0.022054f, 0.008520f, 0.003724f, 0.018385f, -0.029303f, 0.014663f, 0.004491f, 0.045673f, -0.016303f, -0.010461f, -0.013070f, -0.010570f, -0.036392f, -0.018634f, 0.012272f, -0.038142f, 0.028291f, -0.007059f, -0.019368f, 0.027598f, 0.016218f, 0.023361f, -0.009212f, -0.002665f, 0.002162f, 0.005175f, -0.025464f, 0.013819f, 0.000903f, -0.000244f, -0.003095f, 0.017002f, 0.008048f, -0.073295f, 0.122376f, 0.015164f, 0.039776f, 0.021460f, -0.030962f, 0.022353f, 0.034118f, 0.008132f, -0.004012f, -0.030192f, -0.005691f, 0.007890f, -0.014368f, -0.011038f, 0.004674f, 0.013306f, 0.035271f, -0.025248f, 0.014563f, 0.000967f, 0.028060f, -0.010564f, 0.005185f, 0.008913f, -0.033238f, 0.026163f, 0.003854f, 0.006113f, 0.009108f, 0.009361f, -0.021225f, 0.021658f, -0.018356f, 0.004051f, 0.020757f, -0.012035f, + 0.020345f, -0.009465f, 0.025763f, 0.019842f, 0.011382f, -0.032988f, 0.023868f, 0.017971f, 0.014359f, 0.040013f, -0.039369f, -0.003900f, -0.000777f, -0.008777f, 0.011498f, -0.020618f, -0.032679f, 0.021639f, 0.024622f, 0.012057f, -0.003493f, 0.004820f, -0.003873f, 0.012524f, -0.011717f, 0.004788f, -0.024358f, 0.021316f, -0.037596f, 0.034626f, 0.019206f, -0.012295f, -0.000910f, 0.014083f, 0.000654f, 0.012571f, -0.000119f, 0.000979f, -0.001628f, -0.013125f, 0.017654f, 0.023931f, -0.021926f, -0.005461f, 0.004144f, 0.013051f, -0.010155f, -0.010783f, 0.002493f, 0.003951f, -0.002805f, 0.001937f, -0.008273f, 0.002479f, 0.009716f, -0.008350f, 0.001808f, 0.005402f, -0.008451f, 0.006432f, 0.008486f, -0.001331f, -0.003160f, -0.004723f, 0.001401f, 0.017725f, -0.007181f, 0.001832f, -0.017248f, 0.000474f, 0.018515f, -0.013855f, 0.013715f, -0.007018f, 0.000787f, 0.030591f, -0.005730f, 0.000059f, -0.000917f, -0.010172f, 0.015878f, 0.006036f, 0.006687f, 0.006034f, -0.005324f, 0.003586f, 0.017447f, -0.005733f, 0.011821f, -0.008430f, -0.001531f, 0.023549f, -0.098236f, -0.228574f, -0.036704f, 0.133555f, + 0.121180f, 0.298747f, 0.155881f, -0.080540f, -0.024915f, -0.165594f, -0.281142f, -0.019486f, -0.127889f, -0.017873f, 0.204472f, 0.087337f, 0.157916f, 0.242707f, -0.028484f, -0.035630f, -0.123564f, -0.209759f, -0.166980f, -0.010799f, -0.062907f, -0.023783f, 0.173953f, 0.055209f, 0.113054f, 0.205911f, 0.033463f, -0.000867f, 0.021037f, -0.125286f, -0.189952f, 0.032571f, -0.196283f, -0.128226f, 0.043199f, -0.019715f, 0.031552f, 0.252241f, 0.028628f, 0.096703f, 0.205640f, -0.041025f, 0.006064f, 0.045940f, -0.198894f, -0.165567f, -0.059021f, -0.225959f, -0.087874f, 0.028826f, 0.041451f, 0.155680f, 0.218869f, 0.156312f, 0.109940f, 0.096150f, -0.036891f, -0.132327f, -0.109086f, -0.163606f, -0.172336f, -0.073648f, -0.043962f, 0.001215f, 0.143915f, 0.172230f, 0.053500f, 0.134606f, 0.038836f, -0.042509f, 0.027901f, -0.093675f, -0.130764f, -0.025413f, -0.060971f, -0.040418f, 0.073057f, -0.002616f, 0.050814f, 0.091514f, -0.025516f, -0.001888f, -0.000440f, -0.046135f, -0.014695f, -0.003049f, -0.035146f, 0.038862f, 0.013574f, -0.008857f, 0.062781f, 0.020341f, -0.009534f, 0.060956f, -0.021828f, -0.064945f, + 0.000806f, -0.099302f, -0.070133f, 0.021712f, -0.066704f, 0.014377f, 0.076208f, 0.056608f, 0.104054f, 0.114276f, 0.041012f, 0.040572f, -0.005316f, -0.093760f, -0.131948f, -0.134947f, -0.141785f, -0.089476f, -0.007318f, 0.045621f, 0.096986f, 0.169722f, 0.181201f, 0.151249f, 0.117545f, -0.006725f, -0.111652f, -0.158876f, -0.204182f, -0.207300f, -0.111363f, -0.033024f, 0.086301f, 0.184252f, 0.165885f, 0.100802f, 0.073714f, 0.022102f, -0.016128f, -0.024435f, -0.073975f, -0.084277f, -0.064334f, -0.052776f, -0.038828f, -0.007289f, 0.007141f, 0.031155f, 0.044969f, 0.047224f, 0.044306f, 0.041279f, 0.019895f, 0.001500f, -0.016027f, -0.023973f, -0.035554f, -0.034327f, -0.026423f, -0.013966f, -0.006020f, 0.006553f, 0.011273f, 0.016281f, 0.012833f, 0.011110f, 0.008848f, 0.008733f, 0.002494f, 0.002317f, 0.001898f, 0.000788f, -0.004221f, -0.001229f, -0.006334f, -0.012221f, -0.013283f, -0.012597f, -0.011935f, -0.000495f, 0.001885f, 0.006730f, 0.014221f, 0.017456f, 0.016270f, 0.014737f, 0.004964f, -0.001634f, -0.010073f, -0.015324f, -0.017356f, -0.013108f, -0.009409f, -0.003419f, 0.002670f, 0.007956f, + 0.008734f, 0.010012f, 0.007830f, 0.005363f, 0.002708f, -0.000058f, -0.003891f, -0.002906f, -0.004157f, -0.003304f, -0.002606f, -0.002612f, -0.001274f, 0.000560f, -0.002128f, -0.001271f, -0.000276f, 0.001100f, 0.002595f, 0.002581f, 0.002739f, 0.004468f, 0.002880f, 0.001534f, -0.000136f, -0.002095f, -0.003504f, -0.003484f, -0.003938f, -0.002791f, -0.001602f, -0.000358f, 0.000830f, 0.001864f, 0.001881f, 0.001989f, 0.001631f, 0.001113f, 0.000282f, -0.000081f, -0.000545f, -0.000782f, -0.000868f} + }, + { + {-0.008179f, 0.008688f, 0.002212f, -0.004646f, -0.002042f, -0.010413f, -0.002752f, 0.008817f, -0.004587f, -0.003324f, 0.002749f, -0.001310f, -0.000282f, 0.000613f, -0.002748f, -0.002187f, 0.010671f, 0.005229f, -0.001246f, 0.000583f, -0.001533f, -0.003108f, 0.001510f, 0.003862f, 0.005892f, -0.001427f, 0.002282f, 0.002766f, -0.009359f, -0.002816f, 0.000026f, -0.001798f, 0.005812f, 0.000595f, -0.001936f, 0.005263f, -0.003916f, 0.001826f, 0.008100f, -0.004397f, 0.000553f, 0.001152f, 0.006158f, -0.002284f, 0.008478f, -0.011891f, -0.004328f, 0.005280f, -0.002335f, -0.010066f, 0.000762f, 0.002112f, 0.003410f, 0.003545f, -0.001064f, -0.004293f, 0.000407f, -0.003889f, -0.002665f, 0.001257f, 0.005050f, 0.004698f, -0.006731f, 0.006024f, -0.007369f, 0.006682f, 0.000404f, 0.005869f, -0.002231f, -0.004724f, -0.002101f, 0.003971f, -0.000729f, -0.000911f, -0.001150f, 0.005471f, -0.005795f, 0.003066f, 0.001441f, 0.001526f, 0.001864f, 0.004392f, 0.001397f, -0.002706f, -0.003125f, -0.001663f, 0.002365f, -0.000437f, -0.002292f, 0.000516f, -0.002770f, -0.000542f, -0.000184f, -0.002768f, -0.001127f, -0.001526f, + 0.000383f, 0.001608f, -0.001911f, -0.001302f, 0.000801f, -0.000314f, -0.002737f, 0.000052f, 0.001501f, -0.000987f, -0.000134f, 0.000643f, -0.000251f, 0.001159f, 0.000785f, 0.000165f, -0.002070f, -0.000607f, 0.000078f, -0.000852f, 0.000057f, -0.000140f, -0.001452f, 0.000906f, -0.002461f, -0.000395f, -0.028491f, 0.009336f, -0.010365f, -0.004138f, -0.008489f, -0.008715f, 0.004933f, -0.002916f, -0.007363f, -0.003961f, 0.009981f, 0.014843f, -0.008139f, -0.003037f, -0.000736f, -0.010712f, -0.010069f, 0.000741f, -0.001031f, 0.006524f, 0.002188f, 0.004856f, -0.004304f, -0.002697f, -0.005572f, 0.001553f, 0.009573f, 0.004151f, 0.001848f, -0.006194f, 0.004672f, 0.001405f, 0.002853f, -0.004048f, 0.000340f, 0.001405f, 0.002137f, -0.005495f, -0.004028f, 0.001489f, -0.007587f, -0.007750f, 0.003302f, 0.005858f, -0.006617f, -0.003332f, -0.002563f, 0.000463f, 0.005833f, 0.004706f, 0.002022f, 0.000877f, 0.015114f, 0.005931f, -0.004800f, 0.005880f, 0.004177f, -0.004217f, 0.007129f, -0.002677f, -0.001815f, -0.000052f, -0.003139f, 0.006341f, -0.003600f, 0.001656f, 0.003807f, 0.003056f, -0.005679f, 0.002214f, + 0.001032f, 0.001131f, -0.002002f, -0.002818f, -0.001202f, 0.008862f, 0.000566f, -0.002645f, -0.001929f, 0.002080f, -0.008013f, 0.001532f, 0.004729f, -0.000324f, 0.003052f, -0.001774f, -0.002906f, 0.001915f, 0.001730f, -0.000760f, 0.002964f, 0.001526f, -0.000884f, 0.002108f, 0.002194f, 0.003702f, 0.000453f, -0.000004f, -0.000295f, -0.001137f, -0.001614f, -0.000178f, -0.000317f, -0.001008f, 0.001061f, -0.000372f, 0.003648f, 0.021610f, 0.008577f, -0.001572f, 0.000919f, 0.004904f, 0.002533f, -0.001528f, -0.009429f, 0.000241f, 0.008246f, -0.008587f, -0.001017f, -0.016061f, 0.004135f, 0.006453f, 0.000370f, -0.003873f, 0.011631f, 0.008160f, -0.007601f, 0.003580f, 0.000378f, -0.006672f, 0.010372f, 0.005691f, -0.000745f, 0.004152f, 0.009879f, -0.003147f, -0.002120f, 0.000601f, -0.000006f, 0.000174f, 0.002323f, 0.012148f, 0.002394f, 0.001758f, -0.019810f, -0.001109f, 0.000833f, 0.002294f, -0.009001f, 0.002003f, -0.007274f, -0.005598f, -0.007690f, -0.005047f, -0.000022f, 0.002227f, -0.004726f, 0.004590f, -0.011412f, -0.006583f, -0.000761f, -0.000218f, 0.003570f, -0.004614f, -0.001128f, -0.004185f, + 0.002395f, 0.006074f, -0.003785f, 0.000591f, -0.003287f, -0.000655f, 0.009454f, 0.007390f, -0.003079f, 0.006921f, -0.003421f, -0.006033f, -0.007519f, -0.000632f, -0.000764f, -0.005096f, 0.004466f, -0.000872f, 0.001222f, -0.000631f, -0.001728f, 0.000266f, -0.001144f, -0.004148f, -0.000332f, -0.006565f, 0.000659f, -0.003273f, -0.002162f, -0.005529f, 0.006249f, -0.002018f, 0.002081f, 0.004241f, 0.001636f, -0.002280f, -0.000587f, -0.002552f, -0.000257f, 0.001007f, -0.002509f, 0.002428f, -0.000283f, 0.000191f, 0.000283f, -0.000978f, 0.001396f, 0.000771f, 0.000385f, 0.000100f, 0.003495f, 0.001630f, -0.001234f, -0.002525f, -0.002303f, 0.002070f, 0.002825f, -0.000102f, 0.000658f, 0.002722f, 0.000360f, 0.034068f, -0.015020f, 0.002677f, -0.001386f, -0.006447f, 0.005299f, 0.009453f, -0.006362f, 0.010173f, -0.000703f, 0.010860f, 0.002913f, 0.003746f, -0.004875f, 0.006097f, 0.002274f, 0.006246f, -0.013594f, 0.007074f, -0.008094f, 0.002355f, -0.006819f, 0.008308f, -0.002441f, 0.008370f, -0.005135f, 0.002996f, -0.003413f, -0.000874f, -0.000512f, -0.000994f, 0.003208f, 0.017541f, 0.000646f, 0.005054f, + -0.005029f, -0.008329f, 0.000210f, 0.000023f, 0.000211f, 0.002555f, -0.005814f, 0.011459f, -0.000872f, 0.009585f, 0.000542f, -0.004339f, -0.005452f, -0.014717f, 0.007029f, 0.004615f, -0.006953f, 0.000625f, 0.005709f, 0.002970f, -0.017119f, 0.010008f, -0.000707f, 0.007075f, -0.010336f, -0.011120f, -0.005466f, -0.010835f, -0.002098f, 0.012230f, 0.002439f, -0.004875f, 0.000605f, 0.006858f, -0.002486f, -0.005752f, -0.003050f, -0.006434f, 0.004375f, -0.009684f, -0.001814f, -0.007463f, -0.002931f, -0.000172f, 0.008081f, 0.003723f, 0.000770f, 0.002426f, 0.010179f, 0.005280f, 0.001133f, 0.003632f, -0.003042f, -0.001287f, 0.000563f, 0.000051f, 0.001521f, 0.000723f, -0.001903f, 0.000870f, 0.003512f, -0.000393f, 0.000660f, 0.001217f, -0.001882f, -0.002520f, 0.002158f, -0.002989f, 0.003260f, 0.001860f, 0.003011f, -0.000067f, -0.001324f, 0.001785f, 0.002980f, 0.000670f, -0.001414f, 0.000873f, -0.000214f, 0.008858f, -0.021062f, 0.004192f, -0.006700f, -0.019248f, -0.014861f, 0.007772f, 0.008669f, 0.011447f, -0.005796f, -0.003045f, 0.007845f, 0.003714f, 0.011767f, 0.003785f, -0.001417f, 0.001138f, + 0.007475f, 0.014675f, -0.003873f, 0.004225f, -0.000278f, 0.011878f, 0.002651f, -0.000802f, -0.002497f, -0.009190f, -0.013968f, 0.000081f, -0.002096f, 0.004100f, -0.000889f, 0.003198f, 0.002325f, 0.000780f, 0.000784f, 0.002696f, -0.004842f, 0.000467f, 0.006487f, 0.010253f, -0.005158f, 0.001164f, -0.004559f, -0.005988f, 0.008411f, -0.006601f, -0.016402f, -0.006464f, -0.004287f, 0.007770f, 0.000537f, 0.008579f, 0.007778f, -0.004240f, 0.000230f, -0.006814f, -0.001061f, -0.002955f, 0.009991f, -0.012790f, -0.000493f, 0.004241f, -0.013615f, -0.015233f, 0.000107f, 0.004642f, 0.009486f, -0.006752f, -0.016191f, 0.008337f, -0.014951f, 0.017282f, 0.009659f, 0.002807f, 0.007253f, -0.000219f, -0.007272f, 0.021984f, -0.002143f, 0.010619f, -0.000547f, 0.015366f, 0.010452f, 0.005593f, -0.001713f, -0.003043f, -0.005314f, -0.001943f, 0.002183f, 0.000521f, 0.004110f, -0.004393f, 0.002503f, -0.002350f, -0.001730f, -0.001671f, -0.001935f, 0.002057f, -0.001264f, -0.000071f, -0.003422f, -0.000182f, 0.001856f, 0.003685f, -0.003895f, -0.004597f, 0.000481f, 0.001992f, -0.000195f, 0.002401f, -0.001531f, 0.000258f, + -0.001958f, -0.000604f, 0.001088f, 0.002270f, 0.002643f, 0.001661f, -0.002396f, -0.003356f, -0.046246f, 0.009721f, 0.002508f, -0.023148f, -0.029252f, -0.004572f, -0.022547f, 0.018619f, 0.005449f, -0.013533f, 0.001018f, -0.006215f, 0.002216f, -0.009191f, 0.001360f, -0.000379f, 0.000272f, 0.013169f, -0.004488f, -0.002881f, -0.005264f, -0.004635f, -0.012110f, -0.008076f, 0.012480f, -0.004932f, 0.007953f, -0.006705f, 0.003536f, 0.000360f, 0.007203f, -0.007009f, 0.005496f, -0.007042f, 0.003305f, -0.002601f, -0.004323f, 0.004607f, -0.011307f, 0.004562f, -0.005674f, -0.001948f, -0.008172f, 0.020309f, 0.009765f, 0.017826f, -0.007364f, 0.007606f, 0.006171f, -0.003356f, 0.003319f, -0.008217f, 0.009055f, 0.019532f, 0.015497f, -0.010519f, -0.002682f, 0.004693f, -0.007548f, -0.005037f, -0.013349f, -0.025162f, -0.008407f, 0.013136f, 0.004851f, -0.006094f, 0.002752f, 0.001485f, -0.006714f, -0.011872f, -0.011953f, 0.008784f, 0.001193f, -0.018455f, 0.002169f, 0.001950f, -0.000720f, -0.001238f, 0.006367f, 0.013647f, -0.001180f, 0.000138f, 0.002085f, 0.000140f, -0.003350f, -0.012151f, 0.004273f, 0.004300f, + 0.002733f, 0.005901f, 0.003684f, -0.005113f, 0.001561f, -0.003163f, 0.000892f, -0.002652f, -0.000925f, -0.002951f, 0.000287f, 0.000848f, -0.000165f, -0.002095f, -0.001973f, -0.000510f, 0.001168f, 0.000076f, 0.004734f, 0.001766f, 0.004433f, 0.004718f, 0.005160f, -0.005780f, -0.005806f, -0.002109f, 0.004758f, -0.001397f, 0.001883f, -0.001626f, 0.002726f, 0.002778f, 0.001917f, -0.002743f, -0.001413f, -0.018292f, -0.007686f, -0.004837f, 0.013626f, -0.003741f, 0.003158f, -0.014280f, -0.014884f, 0.000626f, 0.004191f, -0.008763f, -0.005052f, -0.008230f, 0.016734f, 0.003605f, -0.005726f, -0.012382f, -0.012197f, -0.011950f, -0.003376f, 0.005588f, 0.016818f, 0.005379f, 0.009473f, -0.007688f, 0.017920f, 0.010174f, 0.003244f, 0.000101f, 0.018437f, -0.010913f, 0.001701f, 0.005760f, 0.012467f, -0.020365f, -0.010366f, 0.008742f, 0.003515f, -0.002897f, 0.021081f, -0.009332f, 0.005940f, 0.012644f, 0.003930f, 0.002046f, 0.009281f, 0.003688f, 0.004609f, 0.004647f, 0.002002f, 0.005370f, -0.000326f, 0.007956f, -0.001878f, 0.019645f, -0.014360f, 0.016150f, 0.012905f, -0.011340f, 0.012783f, 0.002269f, + 0.010867f, 0.010901f, -0.024130f, -0.000732f, -0.000962f, -0.007361f, 0.003868f, -0.006650f, 0.006700f, -0.002836f, 0.015400f, -0.001772f, 0.002432f, 0.006215f, 0.004340f, 0.006012f, -0.009797f, -0.003388f, -0.010010f, -0.009386f, -0.005309f, 0.014846f, 0.002255f, -0.004851f, 0.004439f, 0.004027f, 0.001930f, -0.002610f, 0.001587f, -0.001873f, 0.005921f, 0.002144f, 0.001904f, -0.002937f, 0.001852f, -0.005696f, -0.000478f, 0.006437f, 0.003441f, -0.001144f, 0.002214f, 0.002226f, -0.001777f, 0.002666f, 0.001902f, 0.006243f, 0.003540f, -0.003605f, -0.001340f, -0.002173f, 0.001993f, -0.005709f, 0.001708f, 0.003013f, 0.001956f, -0.000917f, -0.000217f, -0.000583f, 0.024119f, -0.006457f, -0.003811f, -0.005996f, 0.017163f, 0.008973f, 0.001783f, 0.006499f, -0.011704f, 0.025681f, 0.008478f, -0.002109f, 0.009670f, 0.012362f, -0.021078f, -0.001491f, 0.004929f, 0.002377f, -0.000075f, 0.017710f, -0.008601f, -0.010892f, 0.024445f, 0.003613f, -0.001780f, -0.002526f, 0.012757f, 0.000888f, -0.001897f, -0.002497f, -0.005982f, 0.006285f, -0.003721f, 0.008413f, 0.005956f, -0.015530f, -0.014652f, 0.001730f, + 0.028878f, -0.000448f, 0.005873f, -0.017939f, 0.008778f, 0.011763f, -0.007403f, 0.008691f, 0.010900f, -0.018194f, -0.011059f, -0.002387f, -0.023181f, -0.012411f, -0.013842f, 0.003945f, -0.004755f, -0.005261f, -0.002558f, 0.016163f, -0.022347f, 0.009739f, 0.004843f, -0.007377f, 0.013627f, -0.008863f, 0.001303f, -0.018897f, -0.000399f, 0.011203f, 0.010188f, 0.021209f, -0.025236f, -0.006418f, -0.028015f, -0.006163f, -0.000571f, -0.006820f, 0.003140f, -0.001528f, 0.025485f, 0.019625f, 0.011200f, -0.012850f, 0.000651f, 0.004719f, 0.012423f, 0.015119f, -0.000349f, -0.000109f, -0.002175f, 0.000145f, 0.008696f, -0.000606f, -0.000749f, -0.000538f, 0.000160f, 0.000247f, 0.001062f, 0.003336f, -0.003583f, -0.001327f, 0.003644f, 0.000406f, 0.003369f, -0.000323f, 0.000384f, -0.003139f, 0.004625f, 0.002633f, 0.000074f, 0.004119f, -0.002182f, -0.000498f, 0.004067f, 0.000861f, -0.000672f, -0.005250f, -0.000314f, 0.000899f, 0.000758f, -0.002028f, 0.005218f, 0.008456f, -0.001553f, -0.000487f, -0.003882f, 0.002626f, 0.016334f, -0.018678f, 0.000448f, -0.011511f, 0.031537f, -0.013564f, -0.007854f, 0.027310f, + 0.020559f, 0.003673f, -0.038475f, -0.009510f, 0.017477f, 0.001263f, -0.001992f, -0.005623f, -0.003169f, -0.003155f, 0.002529f, 0.005768f, 0.005266f, 0.004982f, 0.033806f, -0.007253f, -0.005073f, -0.000140f, 0.004288f, -0.010289f, 0.005823f, 0.003437f, -0.001412f, -0.011308f, -0.007146f, 0.012095f, 0.012987f, 0.024690f, 0.006212f, -0.010399f, 0.006139f, -0.000488f, 0.006225f, 0.000295f, 0.013652f, -0.011661f, -0.017286f, -0.017840f, 0.011431f, -0.005208f, 0.002279f, 0.004433f, -0.006456f, -0.001343f, 0.029366f, 0.009904f, -0.025027f, 0.017530f, 0.005519f, 0.029702f, -0.015673f, -0.014821f, 0.008510f, 0.015907f, 0.010980f, 0.006017f, -0.002880f, 0.000759f, 0.007558f, -0.009916f, -0.002923f, 0.000137f, 0.012560f, -0.009381f, 0.025361f, -0.001107f, -0.000473f, -0.013365f, -0.014978f, 0.028952f, 0.008543f, -0.024107f, -0.005716f, 0.019896f, 0.013814f, 0.002584f, 0.004929f, -0.012370f, 0.003697f, 0.003048f, 0.003805f, 0.002031f, 0.004238f, -0.005794f, -0.006915f, 0.000715f, -0.000317f, -0.005806f, -0.001970f, 0.005027f, 0.005020f, -0.007699f, 0.001881f, -0.000195f, 0.003172f, 0.004310f, + -0.001352f, -0.001502f, -0.001948f, 0.002850f, 0.008866f, -0.006670f, 0.004843f, -0.000601f, 0.000125f, -0.003984f, -0.000980f, -0.003011f, -0.002007f, 0.004115f, -0.001575f, -0.002676f, -0.005909f, -0.000379f, -0.003383f, -0.022633f, -0.019190f, -0.007409f, 0.007143f, 0.007330f, 0.035175f, 0.034149f, -0.003867f, 0.002841f, 0.001604f, 0.000348f, -0.000290f, -0.006953f, -0.022764f, -0.017446f, -0.008961f, 0.008181f, -0.006281f, -0.019801f, -0.005541f, 0.003865f, -0.001383f, -0.030403f, -0.008871f, 0.006836f, -0.003028f, 0.002972f, 0.002195f, 0.009248f, 0.013512f, 0.002257f, -0.009640f, 0.009981f, 0.010400f, 0.007334f, -0.000317f, 0.013444f, -0.026650f, 0.009044f, -0.023603f, 0.029611f, -0.020866f, 0.008152f, -0.022145f, -0.003603f, -0.024752f, -0.013044f, -0.015394f, -0.016667f, 0.011573f, -0.014646f, -0.002760f, 0.005268f, -0.000103f, -0.007767f, -0.005573f, -0.002491f, -0.024212f, 0.000885f, 0.001672f, 0.012140f, -0.037845f, 0.000984f, -0.000905f, 0.017781f, 0.021346f, -0.014351f, -0.008792f, 0.000895f, 0.016416f, -0.031270f, 0.020171f, -0.014011f, -0.009254f, 0.001624f, -0.030445f, -0.001488f, + -0.002400f, -0.004686f, -0.005390f, -0.003725f, 0.030667f, 0.012569f, 0.006351f, -0.007243f, -0.006815f, -0.007583f, 0.001017f, 0.007596f, -0.012201f, -0.000251f, -0.002079f, -0.003216f, 0.001690f, 0.009125f, -0.003318f, -0.005714f, 0.005773f, 0.003593f, -0.000073f, 0.006434f, 0.003484f, 0.005405f, -0.003191f, -0.004033f, 0.007746f, -0.005481f, 0.002028f, -0.007211f, -0.001350f, 0.000410f, -0.001437f, -0.002684f, -0.006398f, -0.007005f, -0.007473f, 0.001903f, -0.000366f, -0.001556f, -0.005376f, -0.005043f, -0.002051f, -0.002620f, 0.001738f, 0.007735f, -0.001994f, 0.005941f, -0.017754f, -0.046699f, -0.018493f, -0.008681f, 0.008446f, 0.012937f, -0.015143f, -0.005581f, -0.019115f, -0.016853f, 0.009281f, -0.014780f, 0.015741f, 0.006541f, 0.011381f, -0.001623f, -0.014982f, 0.026860f, 0.010841f, 0.015136f, -0.018788f, 0.008288f, 0.003731f, -0.027546f, 0.017409f, 0.010474f, 0.001269f, -0.018702f, -0.007025f, 0.009500f, 0.010135f, -0.000282f, 0.003657f, 0.013621f, -0.012937f, -0.009586f, 0.016098f, -0.031456f, -0.030929f, -0.040820f, -0.008962f, 0.013295f, -0.035723f, -0.029884f, -0.017974f, 0.000711f, + 0.013165f, 0.004230f, 0.003876f, 0.000720f, -0.010176f, -0.014254f, -0.033724f, 0.018005f, 0.005284f, 0.041235f, -0.009617f, 0.001156f, -0.025255f, -0.030403f, 0.004098f, 0.019745f, 0.001582f, -0.019169f, 0.012916f, 0.005195f, 0.028286f, 0.002801f, 0.003758f, -0.013541f, -0.002350f, 0.011931f, -0.027296f, -0.051392f, -0.014106f, -0.012818f, 0.003006f, 0.013537f, -0.024393f, -0.012451f, 0.008271f, -0.008592f, -0.001759f, 0.008053f, -0.004520f, -0.004127f, 0.010828f, 0.002613f, -0.000709f, 0.005220f, 0.008469f, 0.009182f, 0.002002f, -0.006160f, -0.016103f, -0.001500f, -0.009728f, 0.002702f, 0.002062f, 0.002085f, 0.007031f, -0.005867f, 0.006415f, 0.008418f, 0.005894f, 0.004759f, 0.004984f, -0.012131f, -0.010840f, -0.004217f, -0.009300f, 0.001051f, 0.002991f, 0.003199f, 0.011625f, -0.002687f, 0.007488f, 0.004417f, -0.004511f, -0.002497f, -0.006688f, -0.009424f, -0.002286f, -0.012414f, -0.003752f, -0.002819f, -0.043962f, -0.033782f, -0.015550f, 0.023214f, -0.002036f, 0.039749f, 0.007837f, -0.003426f, -0.022324f, 0.007957f, 0.040921f, -0.042840f, -0.038614f, -0.012727f, -0.006446f, -0.026856f, + 0.025433f, 0.007485f, 0.013761f, 0.016511f, -0.026967f, -0.003180f, 0.010760f, -0.016939f, 0.031715f, 0.000491f, 0.007094f, -0.009222f, 0.007787f, -0.020966f, -0.012031f, -0.007191f, 0.011886f, 0.005696f, 0.019248f, -0.031627f, 0.002770f, -0.000221f, -0.023652f, 0.025772f, -0.015465f, -0.037635f, 0.007370f, 0.013591f, 0.002664f, -0.011227f, -0.002814f, -0.015663f, 0.002507f, 0.012851f, 0.005372f, -0.025720f, 0.009996f, -0.005847f, -0.028682f, -0.016880f, -0.035221f, 0.000801f, -0.005567f, -0.000916f, 0.004458f, 0.021569f, 0.026682f, 0.022299f, -0.011503f, -0.019417f, 0.006318f, -0.004930f, -0.003384f, -0.015007f, 0.027758f, 0.023046f, -0.005062f, 0.042815f, -0.027419f, 0.014284f, 0.026873f, 0.029071f, 0.000664f, 0.018486f, -0.012082f, -0.004706f, -0.024085f, -0.010129f, 0.014202f, -0.004867f, -0.018793f, 0.011652f, -0.010826f, 0.012243f, -0.005594f, -0.012726f, 0.006517f, -0.002511f, -0.007428f, -0.005538f, 0.004744f, -0.006180f, 0.004119f, 0.008648f, -0.009210f, 0.011724f, -0.001579f, -0.006338f, 0.004216f, 0.001436f, 0.000609f, -0.005260f, 0.006691f, -0.010367f, 0.003403f, 0.003952f, + 0.000290f, -0.006906f, -0.000877f, -0.004081f, 0.005142f, 0.009723f, 0.020818f, 0.010682f, 0.016598f, -0.000797f, -0.000304f, 0.008668f, -0.010839f, 0.002941f, -0.014657f, -0.005827f, 0.003040f, -0.000145f, 0.016073f, -0.038074f, 0.004843f, 0.000463f, -0.024067f, 0.003526f, -0.053561f, -0.046323f, -0.011076f, -0.000390f, 0.002015f, -0.001150f, -0.019032f, -0.000650f, -0.005431f, 0.017155f, 0.003360f, -0.001062f, 0.003233f, -0.040459f, 0.014010f, 0.007572f, 0.022483f, 0.009344f, 0.009747f, 0.026415f, 0.013161f, 0.003843f, 0.066049f, 0.014149f, 0.025420f, 0.035064f, 0.001651f, 0.024737f, 0.006205f, -0.013699f, 0.016058f, 0.001162f, 0.007737f, -0.013416f, 0.001014f, -0.008695f, 0.005612f, -0.008667f, 0.018586f, 0.002265f, -0.011547f, -0.014416f, 0.001999f, -0.039156f, 0.022787f, 0.015396f, -0.001987f, -0.003520f, 0.008962f, -0.010387f, -0.008633f, -0.012826f, -0.015510f, 0.012984f, -0.012371f, 0.021436f, 0.024919f, 0.024442f, 0.025974f, -0.005994f, -0.039335f, 0.000662f, 0.016618f, 0.039717f, -0.009196f, -0.001426f, 0.018810f, 0.027751f, 0.040844f, -0.005257f, 0.018000f, -0.012046f, + -0.006993f, -0.032769f, -0.025576f, -0.011143f, -0.011601f, -0.009330f, 0.006862f, 0.001465f, -0.014059f, 0.015981f, 0.010069f, 0.012569f, 0.022469f, 0.009033f, 0.008431f, -0.002631f, 0.000042f, -0.003274f, -0.006412f, 0.000241f, 0.004068f, 0.000071f, 0.011867f, 0.009522f, 0.005811f, -0.000623f, -0.009700f, 0.000619f, -0.006960f, -0.007678f, 0.004966f, 0.006066f, 0.001824f, -0.012053f, -0.002705f, -0.017554f, -0.004266f, 0.005808f, 0.008746f, -0.005584f, 0.007276f, -0.010008f, -0.011684f, -0.005864f, -0.007035f, 0.006574f, 0.003412f, -0.010241f, -0.007057f, 0.008074f, 0.031643f, 0.041274f, -0.031886f, -0.033337f, -0.043821f, 0.038254f, -0.004713f, -0.016321f, 0.012890f, 0.012458f, 0.035788f, 0.029736f, 0.001407f, 0.032664f, 0.046672f, 0.012900f, -0.024582f, 0.022110f, -0.022787f, -0.012965f, -0.005121f, -0.016066f, -0.019204f, 0.009218f, -0.009934f, -0.009755f, -0.023060f, 0.050912f, 0.005949f, -0.027807f, -0.000477f, -0.004159f, 0.022547f, 0.023883f, 0.009140f, -0.016449f, 0.024086f, -0.007098f, 0.014697f, -0.047430f, 0.002020f, 0.019112f, -0.020608f, 0.006333f, -0.022355f, -0.018287f, + 0.048089f, 0.019739f, 0.014202f, -0.003806f, -0.043427f, -0.010861f, 0.012013f, 0.008851f, 0.006526f, -0.010608f, 0.033779f, -0.024463f, 0.018579f, -0.011715f, 0.012145f, 0.013442f, 0.026674f, 0.036208f, -0.042965f, -0.001530f, 0.021439f, 0.010205f, 0.030308f, 0.029381f, -0.042847f, -0.000306f, -0.012172f, -0.022409f, -0.001814f, -0.023418f, 0.009024f, 0.017177f, -0.009009f, 0.031467f, -0.007623f, -0.019501f, -0.023582f, 0.019418f, 0.022352f, 0.022244f, -0.006691f, 0.003502f, -0.001774f, -0.033386f, -0.032327f, -0.030351f, 0.018040f, 0.008842f, 0.005436f, 0.014400f, -0.001474f, -0.008805f, 0.021999f, 0.002604f, -0.000643f, 0.013282f, 0.021287f, 0.012689f, 0.001137f, 0.001883f, -0.006973f, 0.012732f, 0.006081f, 0.027355f, -0.003155f, 0.002848f, 0.019050f, 0.015357f, 0.004911f, -0.003316f, 0.011970f, -0.000948f, -0.003165f, 0.021464f, -0.018222f, 0.000382f, 0.013009f, 0.000511f, -0.004675f, -0.007208f, -0.003972f, -0.000625f, 0.014070f, 0.002180f, 0.000435f, 0.015586f, 0.011167f, -0.011028f, 0.016780f, -0.001383f, 0.032549f, 0.064858f, 0.002771f, -0.031026f, 0.008760f, -0.020763f, + 0.013429f, -0.018055f, -0.019410f, 0.058862f, -0.044694f, 0.073911f, 0.045326f, -0.010952f, 0.014950f, 0.035697f, 0.005235f, -0.055788f, 0.021962f, -0.045186f, 0.010823f, 0.003995f, -0.022224f, 0.000929f, -0.002953f, 0.032230f, -0.016045f, -0.001644f, -0.001144f, -0.009843f, 0.068255f, -0.003942f, -0.010134f, 0.008756f, 0.023066f, -0.023254f, -0.048926f, 0.038675f, -0.006072f, -0.002987f, 0.044243f, -0.025973f, -0.007049f, -0.030919f, 0.008396f, -0.021618f, 0.025055f, 0.022951f, 0.047094f, -0.013489f, 0.013271f, 0.031338f, -0.044363f, 0.005427f, -0.028209f, -0.044829f, -0.057102f, -0.030157f, -0.061751f, -0.069667f, -0.009576f, 0.004474f, -0.032600f, -0.035298f, 0.022014f, -0.002509f, -0.019603f, -0.038054f, 0.027611f, -0.020348f, 0.007325f, 0.034447f, -0.064820f, -0.018804f, -0.011756f, 0.028811f, 0.077943f, -0.036836f, 0.002460f, -0.023401f, -0.034301f, 0.016683f, -0.041085f, 0.033216f, 0.058157f, -0.016581f, -0.026863f, -0.028752f, -0.007031f, -0.006918f, 0.000773f, 0.018748f, 0.014048f, -0.015323f, 0.015572f, -0.001984f, 0.012300f, 0.000635f, -0.013834f, -0.004069f, 0.017212f, -0.028243f, + 0.013468f, -0.014833f, 0.004120f, -0.012092f, -0.004387f, -0.017037f, 0.004102f, -0.016380f, -0.025101f, -0.012270f, 0.006239f, -0.018889f, 0.000201f, 0.005597f, 0.028035f, -0.016137f, -0.009131f, 0.009054f, 0.011699f, -0.020152f, -0.012269f, 0.005625f, -0.005201f, -0.010785f, 0.019650f, 0.003317f, -0.014913f, 0.013465f, 0.004098f, -0.023523f, 0.004108f, -0.018883f, 0.020963f, -0.009331f, -0.030075f, -0.044512f, -0.033763f, 0.037531f, -0.030571f, 0.015214f, 0.035713f, 0.015324f, 0.022958f, -0.042428f, 0.061214f, 0.038562f, 0.033414f, -0.024503f, 0.043886f, -0.004708f, 0.029042f, 0.019144f, 0.006503f, 0.015903f, 0.021332f, 0.013062f, -0.007090f, -0.010797f, -0.009703f, 0.004524f, -0.029404f, -0.034632f, 0.019601f, 0.008745f, 0.011399f, -0.028462f, 0.007839f, 0.008817f, 0.021452f, 0.032020f, 0.048037f, -0.026986f, 0.007310f, 0.068395f, 0.014771f, 0.007449f, 0.006645f, -0.013944f, 0.005055f, 0.068113f, 0.019765f, 0.044168f, 0.012593f, -0.046981f, -0.019588f, -0.034173f, 0.098747f, 0.040248f, -0.038119f, -0.023754f, -0.033997f, 0.005901f, -0.022300f, -0.053486f, 0.012345f, -0.040467f, + 0.060468f, -0.004086f, -0.050015f, 0.066034f, 0.053427f, 0.007790f, -0.014504f, 0.009184f, -0.030439f, 0.040752f, 0.072508f, -0.019212f, 0.034394f, 0.081253f, -0.012751f, -0.012995f, -0.009225f, 0.049557f, -0.003579f, -0.027037f, -0.025580f, -0.025805f, -0.000432f, -0.002987f, -0.022669f, 0.002034f, -0.009503f, 0.025108f, 0.006206f, -0.023679f, -0.015065f, -0.026998f, -0.002951f, 0.003963f, -0.004424f, -0.018828f, -0.021263f, -0.014873f, 0.013346f, 0.022704f, 0.003522f, -0.023108f, -0.003386f, 0.029996f, 0.000246f, 0.027520f, 0.014338f, -0.014983f, -0.001350f, -0.023407f, 0.023298f, 0.010712f, -0.030520f, -0.057180f, 0.005306f, -0.003395f, -0.017404f, 0.019221f, -0.000122f, -0.009693f, -0.008158f, 0.006245f, 0.001595f, -0.001917f, 0.016979f, -0.046512f, 0.018833f, -0.006143f, 0.046648f, -0.096758f, -0.066318f, 0.038670f, 0.018621f, 0.014175f, 0.032846f, -0.032823f, -0.042915f, -0.023476f, -0.035307f, 0.020378f, -0.037904f, 0.011420f, 0.025556f, 0.041899f, 0.001608f, 0.035166f, 0.020528f, 0.006036f, -0.010904f, -0.036165f, -0.025524f, 0.021564f, -0.044395f, 0.023017f, 0.005451f, 0.038308f, + 0.029187f, -0.013894f, -0.055320f, -0.035774f, -0.003166f, -0.002453f, -0.014496f, 0.038324f, -0.066929f, -0.004877f, 0.002519f, -0.069949f, -0.001189f, -0.008326f, -0.005444f, 0.007854f, 0.041307f, -0.039760f, -0.110311f, 0.041572f, 0.045166f, 0.027172f, 0.086308f, -0.070597f, -0.008968f, 0.048208f, 0.036752f, -0.044181f, -0.020561f, -0.011940f, 0.067992f, 0.013703f, 0.064899f, -0.093375f, 0.013783f, -0.111454f, -0.066856f, -0.064467f, 0.076945f, 0.024695f, -0.049480f, 0.045462f, 0.005359f, -0.043138f, 0.044307f, -0.064703f, -0.068206f, 0.010552f, -0.070846f, 0.021389f, -0.121072f, 0.018843f, 0.038277f, -0.051251f, 0.056777f, -0.025382f, -0.013641f, 0.038281f, -0.013063f, -0.010082f, -0.027002f, -0.001635f, 0.008948f, 0.021265f, -0.002488f, 0.019785f, 0.038206f, -0.028417f, -0.003152f, -0.022529f, 0.013587f, -0.014605f, -0.003992f, 0.008660f, 0.004673f, 0.005440f, -0.005073f, 0.039675f, -0.013102f, 0.003497f, 0.016789f, -0.034432f, -0.030628f, -0.033428f, -0.015781f, -0.056511f, -0.026168f, -0.020476f, 0.048856f, 0.009984f, 0.043463f, 0.019052f, 0.008694f, 0.020083f, 0.013686f, 0.002062f, + 0.016363f, 0.003785f, 0.033993f, 0.083726f, 0.030940f, -0.030055f, -0.019657f, 0.011519f, -0.021348f, -0.025003f, -0.003043f, 0.038948f, -0.006845f, 0.007255f, -0.041524f, -0.008598f, 0.057165f, -0.041797f, 0.031582f, 0.074748f, 0.037297f, -0.003189f, -0.014361f, -0.024594f, -0.047909f, -0.035164f, 0.041101f, -0.023474f, 0.038558f, 0.027868f, 0.013163f, 0.001832f, 0.014985f, -0.011911f, -0.060920f, -0.021079f, 0.043394f, 0.034499f, 0.036046f, -0.038449f, 0.066278f, -0.017066f, 0.025700f, -0.049047f, 0.044834f, 0.077403f, -0.015687f, -0.027522f, -0.002975f, 0.002877f, -0.017324f, 0.016947f, 0.033717f, -0.063437f, 0.041546f, 0.040466f, -0.010022f, 0.046906f, 0.024714f, 0.020270f, -0.029850f, 0.006189f, 0.041791f, -0.088469f, -0.078967f, -0.032786f, 0.020756f, -0.040696f, -0.119963f, 0.050272f, 0.032747f, -0.015486f, -0.020471f, 0.000972f, -0.007171f, -0.040985f, -0.110214f, -0.006596f, 0.078022f, 0.019040f, -0.014050f, -0.009283f, 0.016739f, 0.064082f, 0.050837f, -0.075072f, -0.031152f, 0.050207f, -0.010766f, -0.020080f, -0.086057f, -0.004941f, 0.046976f, 0.015729f, -0.013383f, 0.029126f, + -0.010958f, 0.003146f, -0.032517f, -0.005237f, 0.019530f, 0.029635f, -0.016954f, -0.006001f, 0.005924f, 0.017175f, -0.010744f, 0.010607f, 0.001247f, -0.020912f, 0.012460f, 0.036032f, 0.006029f, 0.010823f, 0.006564f, 0.016322f, -0.017078f, -0.029593f, 0.002744f, 0.032209f, -0.026452f, 0.011634f, -0.009031f, 0.002986f, -0.025656f, -0.049047f, -0.026874f, 0.018425f, 0.059705f, -0.005993f, 0.028142f, -0.039500f, -0.017527f, -0.026664f, 0.016460f, 0.011762f, 0.018789f, -0.013384f, -0.020579f, -0.001314f, 0.004238f, 0.004737f, -0.009296f, -0.002038f, 0.040748f, 0.054012f, 0.001203f, -0.060901f, 0.080646f, -0.022658f, -0.056303f, 0.050448f, -0.008104f, -0.030632f, 0.038989f, 0.010435f, -0.008164f, 0.032890f, -0.045099f, 0.042770f, -0.015286f, 0.001436f, -0.013116f, -0.011204f, -0.062872f, 0.024894f, -0.024002f, 0.009903f, -0.025207f, -0.002080f, -0.018793f, 0.018002f, -0.011011f, 0.067945f, 0.012004f, 0.044450f, -0.017298f, 0.011115f, 0.028096f, -0.011933f, 0.019417f, -0.003852f, 0.033936f, -0.001706f, -0.011410f, 0.053657f, -0.047950f, 0.026751f, 0.036666f, -0.021525f, 0.041500f, -0.025410f, + -0.001041f, 0.021353f, -0.016247f, 0.048788f, 0.043680f, 0.009083f, 0.072694f, -0.044806f, -0.102662f, -0.017279f, -0.063480f, -0.041997f, 0.149912f, -0.003820f, 0.045988f, -0.006999f, -0.063280f, -0.001630f, 0.062978f, 0.089197f, 0.054225f, 0.089851f, -0.048343f, -0.014460f, -0.021667f, -0.051302f, 0.034011f, -0.014405f, -0.031674f, -0.003308f, -0.062271f, -0.113803f, 0.028638f, 0.040064f, -0.033690f, 0.022682f, -0.007094f, -0.033950f, 0.036230f, 0.026688f, -0.013272f, 0.037332f, -0.013726f, -0.033333f, 0.017118f, -0.016552f, 0.044263f, 0.004164f, 0.003304f, 0.025008f, 0.008338f, -0.028204f, -0.011832f, 0.014515f, -0.009292f, 0.027556f, -0.038441f, 0.024803f, -0.040304f, -0.010268f, 0.010048f, -0.028608f, 0.018256f, 0.001148f, -0.042937f, -0.006960f, 0.002770f, -0.011534f, -0.000106f, -0.008029f, -0.031501f, 0.012894f, 0.009451f, -0.005021f, 0.031635f, 0.048484f, -0.026427f, -0.037831f, -0.002415f, -0.018051f, 0.052468f, 0.053864f, -0.031746f, -0.020130f, -0.006607f, -0.026716f, 0.000565f, 0.009459f, 0.045293f, -0.048590f, 0.057422f, -0.035329f, 0.007552f, -0.000534f, 0.005593f, -0.044867f, + -0.007281f, -0.040624f, -0.033664f, -0.000307f, -0.013513f, -0.030755f, -0.012498f, 0.021812f, -0.026293f, 0.020066f, -0.012629f, 0.061752f, -0.029192f, 0.018142f, 0.003385f, -0.015894f, -0.050314f, -0.018752f, 0.037654f, 0.006434f, -0.012824f, 0.049419f, -0.037266f, -0.037688f, -0.005453f, 0.047166f, -0.043674f, -0.006504f, 0.008124f, 0.012469f, -0.048594f, 0.014061f, 0.016381f, -0.017699f, -0.050795f, 0.000446f, -0.039525f, 0.016129f, 0.008541f, 0.014556f, -0.077443f, -0.033416f, 0.043601f, 0.118113f, -0.054051f, -0.007890f, 0.009193f, -0.020493f, -0.033846f, -0.001138f, 0.098708f, 0.022350f, -0.010453f, -0.009187f, -0.026541f, -0.006568f, -0.020406f, 0.037944f, 0.001666f, -0.025018f, -0.026694f, 0.000893f, 0.017425f, -0.039991f, 0.030504f, 0.008653f, 0.033288f, 0.000853f, 0.042433f, 0.017481f, -0.030141f, 0.039669f, 0.038003f, 0.094360f, 0.029880f, 0.006870f, 0.009475f, -0.035131f, 0.011286f, 0.030538f, 0.031784f, 0.010589f, -0.002510f, 0.000744f, -0.004127f, 0.011481f, 0.013099f, -0.003623f, 0.017004f, -0.004927f, -0.002017f, 0.032287f, 0.013681f, 0.005157f, -0.010039f, 0.009228f, + 0.024575f, 0.025633f, 0.029772f, 0.010417f, 0.010793f, -0.017285f, -0.000341f, -0.001448f, 0.005285f, 0.016487f, -0.000903f, -0.013901f, 0.015193f, -0.014545f, 0.012612f, -0.001086f, 0.014923f, 0.001802f, -0.012597f, -0.003906f, 0.000832f, 0.003004f, 0.007344f, -0.002258f, 0.005215f, 0.003624f, -0.000366f, -0.075507f, 0.099918f, 0.013667f, 0.022624f, 0.023863f, -0.023275f, -0.026794f, 0.000794f, -0.010416f, 0.014065f, 0.032819f, -0.046469f, 0.015181f, -0.009938f, 0.011894f, 0.011090f, 0.007701f, 0.026206f, 0.020510f, -0.019925f, 0.018428f, 0.015951f, -0.016151f, -0.027837f, 0.008320f, -0.010005f, -0.023060f, 0.013538f, 0.011152f, -0.002141f, -0.015116f, 0.000220f, -0.011051f, -0.005520f, 0.000940f, 0.005750f, 0.010416f, -0.020893f, -0.003189f, 0.016341f, -0.007506f, 0.014640f, 0.002732f, 0.010498f, 0.021628f, 0.006202f, -0.022308f, 0.002092f, 0.020636f, -0.012011f, -0.001193f, 0.009814f, -0.035395f, -0.002387f, -0.008831f, -0.033142f, 0.045390f, -0.011822f, -0.002002f, 0.026746f, 0.004531f, -0.020560f, 0.007915f, -0.019666f, -0.004013f, 0.014755f, -0.018283f, -0.006846f, 0.033543f, + -0.035992f, 0.003729f, 0.002936f, 0.012138f, -0.016154f, 0.010737f, -0.005733f, 0.010004f, -0.013906f, 0.000556f, -0.003585f, 0.033807f, -0.015759f, -0.001601f, 0.008536f, -0.017191f, -0.001953f, 0.023388f, -0.005261f, 0.015055f, -0.010636f, -0.009784f, 0.001434f, 0.009029f, -0.009259f, 0.017244f, -0.000445f, -0.003849f, -0.004093f, -0.005524f, -0.005779f, 0.014707f, -0.012913f, 0.014398f, 0.007566f, -0.019052f, 0.004230f, -0.001976f, -0.001968f, 0.011151f, -0.016175f, -0.006402f, 0.001959f, -0.010587f, 0.010618f, -0.010886f, -0.001957f, 0.017864f, 0.002850f, -0.003385f, 0.007782f, -0.009024f, -0.007535f, -0.004393f, 0.008313f, 0.014903f, -0.004998f, -0.004325f, 0.001235f, -0.012890f, 0.023407f, -0.099192f, -0.201738f, -0.026057f, 0.126480f, 0.097224f, 0.279321f, 0.134339f, -0.065228f, -0.057007f, -0.132565f, -0.232114f, -0.029420f, -0.090047f, -0.028001f, 0.163723f, 0.104348f, 0.111381f, 0.213140f, -0.007567f, -0.047278f, -0.080522f, -0.210946f, -0.116495f, -0.037526f, -0.039278f, 0.005795f, 0.095897f, 0.074273f, 0.078819f, 0.148753f, 0.086984f, -0.054783f, 0.079243f, -0.083425f, -0.194590f, + 0.024825f, -0.130630f, -0.181672f, 0.070738f, -0.015654f, -0.033750f, 0.223255f, 0.073057f, 0.059309f, 0.192379f, -0.020714f, -0.037961f, 0.058533f, -0.129091f, -0.160325f, -0.043208f, -0.137288f, -0.122756f, 0.025949f, 0.026485f, 0.055407f, 0.167830f, 0.148686f, 0.089996f, 0.106634f, 0.020532f, -0.084180f, -0.090712f, -0.112195f, -0.154250f, -0.072021f, -0.039230f, -0.052422f, 0.046484f, 0.148497f, 0.096867f, 0.095739f, 0.078634f, -0.055554f, -0.000712f, 0.015632f, -0.127326f, -0.052485f, -0.031994f, -0.037284f, 0.058242f, 0.029820f, -0.007426f, 0.047671f, -0.011182f, -0.009967f, 0.008047f, -0.034359f, -0.025994f, 0.016908f, -0.021377f, 0.034544f, 0.043378f, -0.016247f, 0.023471f, 0.044292f, -0.025959f, 0.029003f, 0.014413f, -0.086625f, 0.015218f, -0.028142f, -0.094132f, 0.001426f, -0.053804f, -0.048080f, 0.068282f, 0.073998f, 0.071370f, 0.132439f, 0.042129f, 0.042140f, 0.044825f, -0.057982f, -0.115758f, -0.129160f, -0.165421f, -0.123189f, -0.037237f, 0.021551f, 0.100178f, 0.166144f, 0.184020f, 0.143771f, 0.104710f, 0.020689f, -0.097559f, -0.146832f, -0.179351f, -0.166598f, -0.086420f, + -0.005499f, 0.046962f, 0.119345f, 0.110106f, 0.060161f, 0.060414f, 0.023516f, -0.001699f, -0.000347f, -0.018642f, -0.036494f, -0.030270f, -0.037845f, -0.045867f, -0.033640f, -0.024959f, -0.006438f, 0.012844f, 0.031098f, 0.037445f, 0.040544f, 0.035028f, 0.024657f, 0.012553f, -0.000066f, -0.020320f, -0.033856f, -0.031004f, -0.021706f, -0.015118f, -0.011828f, -0.003166f, 0.004313f, 0.014832f, 0.017327f, 0.011533f, 0.010932f, 0.009496f, 0.003914f, 0.005426f, 0.004862f, -0.005781f, -0.007533f, -0.003689f, -0.007172f, -0.006488f, -0.009633f, -0.013004f, -0.006275f, 0.000556f, 0.001292f, 0.006738f, 0.010489f, 0.010657f, 0.012987f, 0.009702f, 0.003548f, -0.001337f, -0.006569f, -0.009259f, -0.009139f, -0.008370f, -0.007669f, -0.003814f, 0.001566f, 0.004153f, 0.003927f, 0.003760f, 0.003350f, 0.003325f, 0.003011f, 0.001067f, 0.000237f, 0.000815f, 0.000590f, 0.000306f, -0.000314f, -0.001851f, -0.002497f, -0.004072f, -0.005493f, -0.004383f, -0.002301f, 0.000386f, 0.002765f, 0.004003f, 0.005075f, 0.005279f, 0.003527f, 0.002153f, 0.001084f, -0.002080f, -0.003428f, -0.003195f, -0.003263f, -0.002818f, + -0.001793f, -0.001461f, -0.000116f, 0.000923f, 0.001244f, 0.001607f, 0.001700f, 0.001091f, 0.000561f, 0.000080f, -0.000439f, -0.000702f}, + {-0.001955f, 0.005019f, 0.008681f, -0.006470f, -0.005597f, -0.008659f, 0.007860f, 0.003921f, 0.000693f, 0.011622f, -0.001153f, -0.000137f, -0.003544f, -0.002866f, 0.002529f, -0.003098f, -0.006044f, 0.003414f, 0.000991f, 0.009708f, 0.013264f, -0.003443f, -0.007791f, -0.009600f, -0.000597f, -0.005486f, -0.005287f, -0.003625f, -0.000730f, -0.007646f, 0.007379f, -0.002733f, -0.002884f, -0.005055f, -0.003725f, 0.001421f, 0.008290f, -0.000855f, -0.002382f, 0.002510f, -0.008128f, 0.006112f, -0.005067f, -0.018238f, 0.009058f, 0.006022f, 0.010061f, 0.010435f, 0.001994f, 0.005499f, -0.005436f, 0.001555f, 0.007911f, 0.000624f, -0.000086f, -0.001895f, -0.001040f, 0.004248f, -0.003844f, -0.002773f, 0.000208f, 0.004039f, -0.003336f, -0.004158f, -0.006092f, 0.007818f, 0.003111f, 0.000972f, -0.001892f, -0.007806f, -0.000260f, 0.005849f, 0.003638f, -0.001105f, -0.001469f, 0.005859f, -0.000700f, -0.000420f, -0.002538f, -0.002400f, -0.003561f, -0.004220f, 0.000275f, 0.000901f, 0.002021f, -0.004343f, -0.001712f, 0.002429f, -0.003003f, 0.002621f, 0.000718f, 0.001180f, -0.001115f, -0.000062f, 0.000580f, 0.001283f, + 0.000333f, -0.000497f, 0.000812f, -0.000545f, -0.001474f, -0.000474f, -0.002449f, 0.001644f, 0.000854f, -0.000694f, 0.000048f, -0.001104f, 0.001482f, 0.001522f, 0.000502f, 0.000160f, 0.000584f, 0.000546f, -0.001517f, 0.000065f, -0.000285f, -0.000364f, -0.000585f, -0.000198f, 0.000874f, 0.000266f, -0.027330f, 0.014303f, -0.001318f, 0.000436f, 0.004993f, 0.007024f, -0.010165f, -0.001266f, -0.001803f, 0.005847f, 0.002240f, -0.006208f, 0.019486f, -0.002056f, -0.001180f, 0.008688f, 0.007134f, 0.002354f, 0.004958f, 0.015914f, -0.007837f, 0.000530f, -0.003983f, 0.001622f, -0.004865f, 0.000429f, 0.000521f, 0.001819f, -0.008794f, 0.000792f, -0.002093f, -0.003283f, -0.000354f, 0.005578f, -0.003031f, 0.005189f, 0.007527f, -0.012908f, 0.001769f, -0.005226f, -0.001407f, -0.007933f, 0.004000f, -0.004693f, -0.000788f, -0.002634f, -0.008074f, 0.003132f, -0.005410f, 0.003731f, 0.002054f, -0.003968f, -0.005872f, 0.000227f, 0.005497f, 0.004158f, 0.009971f, 0.004638f, -0.004279f, -0.012177f, -0.000799f, 0.002195f, 0.015428f, -0.004737f, -0.002319f, -0.000129f, -0.002983f, -0.007989f, -0.003811f, -0.007435f, + -0.000988f, 0.006245f, -0.001384f, 0.007427f, 0.004776f, 0.003859f, 0.005381f, 0.001010f, -0.009618f, -0.002209f, -0.006183f, -0.003899f, -0.010683f, -0.000319f, -0.003032f, 0.001487f, 0.002920f, 0.001312f, -0.001576f, -0.002135f, 0.000384f, 0.002872f, -0.002396f, -0.000619f, 0.000084f, -0.000827f, -0.000208f, -0.000943f, 0.001152f, -0.003635f, -0.001247f, -0.000824f, 0.000126f, -0.000313f, -0.000667f, 0.000056f, -0.005404f, 0.019789f, 0.010229f, -0.003421f, -0.008236f, 0.011246f, -0.013543f, -0.002416f, 0.007232f, -0.005703f, -0.004170f, -0.005940f, 0.012998f, -0.004842f, 0.003880f, 0.000911f, 0.003830f, 0.017825f, -0.018303f, 0.005191f, 0.008870f, -0.006234f, -0.016956f, -0.008939f, -0.001346f, 0.000848f, -0.002578f, -0.003233f, 0.006821f, 0.010007f, -0.001043f, -0.007440f, 0.000345f, -0.009373f, 0.002531f, -0.005962f, 0.003037f, 0.010702f, 0.003797f, -0.011162f, -0.000490f, 0.000467f, 0.016129f, 0.002852f, 0.007974f, -0.002551f, 0.003427f, 0.002661f, -0.019937f, 0.000120f, 0.009158f, 0.004136f, 0.010265f, -0.009458f, -0.005885f, -0.009417f, 0.002311f, 0.005725f, -0.002078f, 0.001825f, + 0.000320f, -0.004818f, 0.001567f, -0.003665f, 0.002953f, 0.002785f, -0.000868f, 0.004650f, 0.000804f, -0.000899f, 0.001945f, 0.011561f, 0.001968f, 0.005950f, 0.007456f, 0.004049f, -0.000007f, -0.000358f, -0.011205f, -0.000198f, 0.011546f, 0.003973f, 0.005015f, -0.000397f, -0.001003f, 0.007208f, -0.005706f, 0.000441f, -0.000697f, 0.003582f, 0.001803f, -0.000132f, -0.004979f, 0.000628f, -0.002612f, -0.000873f, 0.000621f, -0.001699f, -0.001323f, 0.001001f, -0.000334f, 0.003643f, 0.001403f, 0.003318f, 0.001477f, 0.000908f, 0.001691f, -0.001556f, -0.002086f, 0.000074f, 0.000026f, 0.004191f, 0.002468f, 0.000495f, 0.001310f, 0.003979f, -0.000888f, 0.000270f, 0.001090f, 0.001672f, -0.000044f, 0.041102f, -0.010752f, -0.003957f, -0.006364f, 0.008324f, 0.005514f, 0.013918f, 0.005452f, -0.002175f, 0.006605f, -0.000403f, 0.007400f, 0.002804f, 0.010330f, 0.000114f, 0.008649f, 0.011304f, -0.012777f, 0.002164f, 0.003149f, 0.002006f, 0.001870f, 0.002723f, -0.007650f, -0.000123f, -0.008791f, -0.001356f, -0.000441f, -0.014784f, -0.010105f, 0.003574f, -0.000193f, -0.000617f, 0.005714f, 0.005630f, + -0.003119f, -0.012756f, 0.003663f, 0.011312f, 0.007381f, 0.010545f, -0.003002f, 0.005656f, 0.010425f, -0.017685f, 0.005443f, 0.007641f, -0.008830f, 0.010789f, -0.007717f, -0.001686f, 0.000936f, 0.002053f, -0.005996f, 0.005057f, -0.001686f, -0.002073f, -0.006235f, -0.005063f, 0.005954f, 0.006041f, 0.002617f, 0.005947f, 0.009235f, 0.005060f, 0.012895f, -0.002826f, -0.014832f, 0.014130f, 0.002170f, 0.006897f, 0.002801f, -0.002496f, 0.003557f, 0.002637f, 0.000465f, 0.009681f, -0.003137f, 0.009553f, -0.013961f, -0.003240f, 0.001632f, 0.004219f, 0.000781f, -0.007609f, -0.003642f, 0.001196f, 0.000273f, -0.000856f, 0.000303f, 0.002862f, -0.003867f, -0.002166f, -0.002254f, -0.002746f, 0.001414f, -0.000865f, -0.001189f, -0.002244f, -0.001764f, 0.004144f, -0.001170f, -0.001429f, -0.000225f, -0.001516f, -0.001386f, 0.002088f, -0.001015f, 0.002235f, -0.000654f, 0.000148f, 0.001598f, -0.000542f, 0.000039f, 0.018482f, -0.020742f, 0.014159f, 0.003162f, 0.014495f, 0.003523f, -0.007819f, 0.002854f, 0.011222f, -0.012925f, -0.002555f, 0.001718f, -0.014588f, -0.002718f, -0.011158f, -0.006759f, -0.008066f, + -0.008891f, 0.004096f, -0.013942f, -0.008555f, -0.011067f, -0.002642f, 0.011096f, 0.004162f, -0.013358f, -0.005048f, -0.013982f, -0.003272f, 0.003299f, 0.020605f, -0.016202f, 0.006964f, -0.003974f, -0.005776f, -0.012026f, 0.000809f, 0.002285f, 0.013296f, 0.007062f, 0.001882f, -0.010889f, -0.019009f, -0.000087f, 0.005881f, 0.015313f, 0.005510f, 0.005044f, -0.010940f, 0.004270f, 0.009714f, 0.000926f, 0.001714f, -0.005789f, -0.005691f, -0.001809f, 0.005755f, 0.001180f, -0.003600f, 0.000308f, -0.012049f, -0.001567f, -0.010115f, 0.006722f, -0.001930f, 0.006720f, -0.009903f, -0.008402f, -0.013726f, -0.001430f, -0.008739f, -0.003679f, 0.003827f, -0.013374f, -0.005604f, 0.001754f, 0.007726f, -0.016105f, 0.009761f, -0.007481f, -0.007973f, -0.008473f, -0.006978f, 0.005082f, -0.004604f, 0.002454f, 0.003073f, -0.004139f, 0.000883f, 0.003574f, 0.002897f, 0.000357f, -0.003603f, -0.000398f, -0.001593f, -0.004193f, -0.000502f, 0.003413f, 0.002190f, -0.001986f, 0.003233f, -0.002358f, -0.001652f, -0.000305f, 0.001286f, -0.003083f, 0.000506f, -0.000224f, 0.002493f, 0.001909f, 0.003932f, -0.002768f, 0.001152f, + -0.000495f, -0.000964f, 0.001306f, -0.003095f, -0.001021f, 0.002017f, 0.001092f, -0.001290f, -0.050901f, 0.008238f, 0.005839f, -0.014671f, -0.003249f, -0.000030f, 0.000532f, -0.002782f, -0.004866f, -0.003729f, -0.015117f, 0.011687f, -0.007315f, 0.001646f, -0.012592f, -0.004443f, 0.018250f, 0.016566f, -0.010471f, -0.006286f, 0.000536f, -0.000251f, -0.008596f, -0.009991f, -0.007109f, 0.001236f, 0.000784f, 0.000348f, -0.001035f, 0.004298f, -0.012429f, 0.003927f, 0.000422f, -0.021878f, -0.002640f, -0.006513f, 0.010016f, 0.014694f, 0.002278f, -0.002530f, 0.000688f, -0.012799f, -0.016107f, 0.008679f, 0.015903f, 0.017779f, -0.004801f, 0.003286f, 0.010321f, 0.010726f, -0.005551f, 0.009900f, 0.016016f, -0.000616f, 0.013477f, 0.011505f, -0.013486f, 0.004466f, 0.000748f, 0.014535f, -0.008907f, -0.009396f, 0.008306f, 0.011035f, -0.003412f, 0.001046f, -0.015897f, 0.011229f, -0.008912f, 0.011851f, -0.019764f, 0.002211f, 0.004645f, 0.009483f, 0.000598f, -0.008184f, -0.016873f, -0.010244f, 0.014100f, -0.013904f, -0.000710f, 0.001662f, 0.007580f, -0.004150f, -0.003044f, 0.006037f, -0.011305f, -0.009713f, + 0.003957f, 0.002764f, -0.000882f, 0.008131f, -0.003795f, 0.001998f, 0.002010f, 0.002243f, 0.002976f, 0.000748f, -0.003206f, 0.002047f, 0.004078f, -0.001629f, 0.000503f, -0.000746f, -0.002168f, 0.001789f, -0.005284f, -0.000639f, -0.005694f, -0.000976f, -0.001143f, -0.001734f, -0.002966f, 0.001266f, -0.001753f, 0.000025f, -0.004454f, 0.001849f, -0.000884f, 0.001623f, 0.001681f, 0.000772f, 0.000638f, -0.019625f, 0.007107f, -0.017330f, 0.022182f, 0.021335f, 0.000764f, -0.028643f, 0.012020f, 0.001740f, -0.005248f, 0.019950f, 0.000201f, -0.017025f, -0.001706f, 0.021678f, -0.026940f, 0.000963f, -0.006652f, -0.021248f, -0.005821f, 0.000495f, -0.004085f, -0.010831f, 0.006417f, -0.008954f, 0.007487f, -0.007612f, -0.014347f, 0.007818f, -0.000960f, 0.011187f, -0.021421f, 0.008896f, 0.017076f, -0.006713f, 0.001517f, 0.017147f, 0.025047f, -0.006526f, -0.004965f, -0.020901f, 0.001354f, -0.017226f, -0.001288f, -0.011961f, 0.000726f, 0.001790f, 0.010197f, 0.004926f, 0.009331f, -0.006542f, 0.001822f, 0.005802f, -0.000962f, 0.023101f, -0.015138f, -0.007444f, 0.030396f, 0.030495f, -0.005867f, -0.001822f, + -0.018943f, -0.009656f, 0.001105f, -0.005198f, -0.012491f, 0.018455f, 0.005796f, -0.004689f, 0.027079f, 0.005316f, -0.012789f, -0.000264f, -0.024601f, -0.012317f, -0.013886f, -0.011930f, -0.003146f, -0.019225f, -0.013800f, 0.008050f, 0.007502f, -0.001330f, 0.004486f, -0.005643f, 0.006614f, -0.004217f, -0.006176f, 0.001181f, -0.008954f, -0.004071f, 0.011835f, 0.001022f, 0.005973f, -0.003038f, 0.001346f, 0.000981f, 0.002894f, 0.002619f, -0.000359f, -0.000149f, -0.005632f, 0.000017f, 0.001389f, 0.001018f, -0.001475f, -0.001558f, 0.004063f, 0.001245f, -0.000678f, 0.000220f, -0.000837f, 0.000212f, 0.002326f, 0.001443f, -0.000622f, -0.002106f, 0.000761f, -0.001371f, 0.024368f, -0.006577f, -0.000352f, 0.016764f, -0.004100f, 0.009885f, -0.005535f, -0.021424f, -0.001462f, -0.000033f, -0.004469f, -0.012713f, -0.014204f, 0.007303f, -0.011270f, 0.019727f, -0.006163f, -0.014395f, 0.012153f, 0.024777f, -0.006256f, 0.006915f, -0.006764f, 0.014301f, 0.000225f, -0.030208f, 0.010651f, 0.016721f, 0.001577f, -0.005059f, -0.017641f, 0.014678f, 0.009747f, 0.009442f, 0.001830f, 0.005942f, 0.019589f, -0.013928f, + 0.002356f, 0.003826f, -0.011060f, -0.021236f, 0.020099f, 0.011214f, 0.037495f, -0.001941f, 0.016480f, -0.005551f, -0.011925f, 0.001984f, -0.001960f, -0.000557f, -0.003477f, -0.012274f, 0.026887f, 0.000604f, 0.001993f, 0.003802f, -0.003884f, 0.022196f, 0.002704f, 0.018581f, 0.007647f, 0.003110f, 0.019766f, -0.009402f, -0.022415f, -0.004423f, 0.003997f, 0.002862f, -0.009345f, 0.010874f, -0.006727f, -0.031217f, 0.002697f, 0.006178f, -0.017361f, 0.008010f, -0.001918f, 0.003346f, -0.000088f, -0.007104f, -0.007963f, -0.000055f, 0.002821f, 0.009499f, -0.000994f, 0.002649f, -0.003811f, -0.002750f, 0.004167f, 0.002803f, -0.000679f, 0.002890f, -0.003315f, -0.000383f, 0.000078f, -0.004297f, -0.006302f, 0.003821f, -0.007001f, -0.001796f, -0.003136f, -0.006016f, -0.001812f, -0.000820f, -0.002373f, 0.002592f, -0.001172f, -0.002544f, -0.000897f, 0.011449f, 0.004347f, 0.004357f, -0.002469f, 0.001621f, -0.003744f, -0.004682f, -0.001687f, -0.001627f, 0.001837f, -0.003104f, 0.005392f, -0.007211f, -0.002427f, 0.001525f, 0.019647f, -0.032985f, 0.005238f, 0.014548f, 0.021738f, -0.023151f, -0.003462f, 0.015428f, + 0.010716f, 0.013141f, 0.002203f, 0.027916f, 0.005061f, 0.011478f, -0.003634f, 0.001495f, 0.011444f, 0.006186f, 0.013234f, 0.000891f, -0.018708f, -0.027265f, 0.014231f, 0.006782f, -0.005295f, 0.003012f, 0.007946f, -0.025526f, 0.000103f, -0.016175f, 0.007352f, -0.001051f, 0.016484f, -0.005508f, 0.007292f, -0.004022f, 0.004174f, 0.002088f, -0.000834f, 0.009169f, 0.012361f, 0.004286f, 0.007106f, -0.020051f, 0.008094f, -0.003692f, -0.034760f, -0.023204f, 0.005774f, -0.025487f, -0.001866f, 0.020707f, -0.015376f, 0.041327f, 0.014889f, -0.008564f, 0.022414f, 0.000853f, -0.007502f, -0.016965f, -0.016722f, -0.023266f, -0.003706f, 0.013270f, -0.016618f, -0.002262f, 0.014844f, 0.006618f, 0.008332f, 0.030212f, 0.003639f, 0.019675f, 0.000035f, 0.003684f, -0.032778f, 0.008823f, 0.002344f, -0.029956f, -0.028259f, 0.016011f, -0.010849f, 0.001658f, 0.008436f, -0.005084f, -0.007766f, 0.001480f, -0.001813f, -0.002277f, 0.001607f, -0.005562f, 0.004675f, -0.004071f, 0.000959f, -0.009636f, 0.004993f, 0.001324f, 0.001969f, -0.000764f, 0.011482f, -0.009646f, 0.000708f, -0.002892f, -0.002438f, 0.002076f, + 0.002271f, 0.002969f, 0.005477f, 0.009034f, 0.005654f, -0.006259f, 0.001356f, -0.001034f, 0.008382f, -0.003075f, 0.005376f, -0.008969f, -0.006691f, -0.005295f, -0.004301f, -0.000871f, -0.000563f, 0.004012f, 0.004951f, -0.017171f, -0.000556f, 0.010723f, -0.000190f, 0.007513f, -0.017589f, 0.013597f, -0.001116f, 0.003926f, 0.012668f, -0.023728f, -0.016324f, 0.004258f, -0.000360f, 0.012953f, 0.026771f, -0.002533f, 0.006647f, 0.028751f, -0.010734f, -0.019559f, -0.001160f, 0.021053f, -0.004610f, -0.024339f, 0.001911f, 0.008932f, -0.004815f, -0.007642f, -0.001827f, 0.031188f, -0.005987f, 0.026842f, 0.020265f, 0.024488f, 0.001311f, 0.001969f, 0.014286f, 0.004777f, -0.005016f, 0.005023f, -0.019458f, 0.014609f, 0.024520f, 0.015387f, 0.002067f, 0.013680f, -0.010817f, 0.010500f, -0.010525f, 0.015369f, -0.013925f, 0.000241f, -0.001151f, -0.001107f, 0.043646f, -0.006563f, -0.002487f, -0.003830f, 0.006027f, 0.012023f, 0.022960f, 0.026242f, -0.014399f, 0.006271f, 0.026100f, -0.014684f, -0.018249f, 0.010929f, -0.007971f, 0.011269f, 0.049864f, -0.023604f, 0.003334f, 0.004647f, -0.013040f, 0.005605f, + 0.016250f, 0.011400f, 0.001312f, -0.010246f, -0.024626f, 0.011627f, -0.010764f, 0.013455f, -0.009281f, 0.001874f, -0.012213f, -0.002692f, -0.020400f, 0.001719f, -0.006505f, -0.007220f, -0.002575f, 0.002450f, 0.005101f, 0.010078f, 0.004232f, -0.005810f, -0.001490f, 0.010275f, -0.006117f, -0.005354f, 0.000686f, 0.000710f, -0.009311f, -0.000140f, -0.004718f, -0.002319f, -0.001789f, -0.001682f, 0.003518f, 0.002210f, 0.007252f, -0.004682f, -0.004720f, 0.000545f, -0.005645f, 0.002611f, 0.011415f, -0.005748f, -0.006159f, -0.011409f, 0.005794f, -0.002893f, -0.007796f, -0.002802f, -0.016831f, -0.026578f, -0.020449f, -0.027658f, -0.010612f, 0.003214f, 0.022295f, 0.016561f, 0.006035f, 0.023504f, 0.007105f, 0.014401f, 0.013223f, -0.006236f, 0.020357f, 0.022110f, 0.015594f, -0.029574f, -0.016584f, -0.017076f, 0.006530f, -0.011735f, 0.000875f, 0.008583f, -0.008582f, -0.020821f, 0.013599f, -0.009799f, 0.004853f, 0.004647f, 0.021415f, -0.022146f, 0.034695f, -0.034086f, 0.035439f, 0.000074f, 0.017793f, -0.017024f, 0.006277f, -0.038108f, -0.021289f, -0.018456f, 0.016889f, 0.007938f, 0.024475f, -0.002261f, + -0.000075f, -0.012239f, -0.030669f, 0.020211f, -0.016746f, -0.008524f, 0.014600f, 0.034987f, 0.033674f, 0.015985f, -0.002245f, -0.022588f, 0.013402f, -0.034789f, -0.002727f, -0.019663f, 0.011269f, 0.037969f, -0.036247f, 0.013432f, 0.016813f, -0.022313f, -0.002245f, -0.003622f, 0.012624f, -0.014711f, -0.021532f, 0.004516f, -0.008723f, -0.031368f, 0.016023f, -0.002883f, -0.029713f, 0.022293f, 0.029132f, -0.009366f, 0.000952f, 0.004375f, -0.012585f, 0.019201f, 0.008744f, -0.005096f, -0.004749f, -0.012161f, -0.007139f, 0.015468f, 0.008662f, 0.008950f, -0.000703f, -0.013411f, -0.004171f, -0.004359f, -0.015262f, -0.002945f, 0.004524f, -0.000614f, -0.004508f, -0.001076f, -0.010901f, 0.001735f, -0.003745f, 0.007704f, 0.004050f, 0.001867f, -0.012631f, 0.010712f, 0.000904f, -0.005095f, -0.003240f, -0.001720f, -0.000693f, 0.006511f, -0.004702f, -0.001571f, 0.004650f, 0.013132f, 0.006345f, 0.004147f, -0.007795f, 0.010568f, -0.025133f, -0.029404f, -0.008057f, 0.019524f, -0.022436f, 0.015414f, -0.030950f, -0.005241f, -0.011691f, -0.010678f, -0.024467f, -0.001865f, -0.008915f, -0.014559f, 0.012284f, -0.016261f, + 0.018233f, 0.004133f, 0.014317f, -0.021598f, -0.040718f, -0.003056f, 0.008817f, -0.016838f, -0.012245f, 0.007075f, 0.005703f, -0.019753f, -0.009200f, 0.028972f, 0.014237f, -0.003409f, 0.015998f, 0.041452f, 0.001806f, 0.005574f, 0.004555f, -0.002756f, -0.000331f, 0.006422f, 0.005847f, -0.031211f, -0.011140f, -0.038218f, -0.011856f, -0.035617f, -0.016625f, 0.002327f, 0.042382f, 0.019992f, -0.020472f, -0.024068f, 0.016010f, 0.033574f, 0.021326f, -0.014488f, 0.025783f, -0.009322f, -0.001592f, -0.044209f, -0.012934f, -0.005375f, -0.005180f, -0.030120f, -0.048538f, 0.016033f, 0.000199f, -0.035372f, 0.009416f, 0.056292f, 0.007599f, 0.006703f, -0.035020f, -0.002807f, -0.000213f, 0.008198f, -0.039366f, 0.036998f, 0.006079f, 0.010493f, 0.020540f, 0.008199f, 0.022254f, -0.001306f, 0.010596f, -0.008246f, -0.016897f, -0.013926f, 0.007828f, -0.011148f, -0.003382f, -0.015021f, 0.005429f, 0.012952f, 0.000495f, 0.010969f, 0.001440f, -0.003883f, 0.000059f, -0.008477f, 0.006389f, 0.006719f, 0.001370f, 0.001532f, -0.005798f, -0.002092f, 0.003591f, 0.009580f, 0.006909f, -0.007733f, -0.002667f, -0.002974f, + -0.018337f, -0.025353f, -0.018733f, -0.005838f, -0.002186f, 0.003355f, -0.004238f, -0.006922f, -0.007713f, 0.000352f, -0.005119f, -0.006494f, -0.011360f, -0.005897f, 0.018727f, -0.011136f, -0.009919f, -0.002557f, 0.022898f, -0.033934f, -0.006735f, 0.008409f, -0.016214f, 0.039630f, -0.032271f, -0.033197f, -0.026987f, 0.038343f, 0.017226f, -0.021810f, -0.019696f, -0.013011f, -0.003954f, -0.011696f, -0.012120f, 0.002145f, 0.014403f, 0.037901f, -0.003990f, 0.016308f, 0.014132f, 0.013845f, -0.024959f, -0.031078f, -0.022374f, 0.026590f, -0.004408f, 0.032250f, 0.010762f, -0.003253f, -0.043576f, -0.035360f, -0.003549f, 0.003190f, -0.025221f, -0.015572f, -0.011780f, -0.011878f, -0.057220f, -0.012169f, -0.013881f, -0.020372f, -0.009999f, -0.013219f, -0.026200f, 0.018809f, 0.035904f, 0.020200f, 0.001108f, 0.021445f, 0.026990f, -0.009260f, 0.008635f, 0.007159f, 0.002774f, -0.000789f, -0.006728f, 0.019183f, 0.007710f, 0.031950f, -0.007237f, 0.003465f, 0.011384f, 0.062602f, -0.000626f, 0.033446f, 0.041973f, -0.003293f, -0.036395f, 0.003509f, 0.036465f, 0.005712f, -0.030984f, -0.027483f, -0.035534f, 0.023625f, + -0.029012f, -0.007511f, 0.041794f, -0.017543f, -0.027845f, 0.009026f, -0.007565f, 0.001211f, 0.011480f, -0.017100f, -0.007772f, 0.003886f, -0.005148f, -0.007525f, -0.001500f, 0.003619f, 0.020908f, -0.001528f, -0.010744f, -0.008881f, -0.000024f, -0.007578f, -0.006515f, -0.005402f, -0.010445f, -0.004533f, 0.004003f, -0.004556f, -0.000961f, -0.013818f, 0.003704f, -0.000894f, 0.002908f, 0.014745f, 0.008948f, -0.007942f, 0.003902f, 0.003589f, -0.012593f, -0.018695f, 0.007158f, 0.008172f, 0.001073f, -0.019104f, -0.021233f, -0.002835f, -0.014857f, -0.004308f, -0.002235f, -0.018843f, 0.034811f, 0.025273f, -0.059301f, 0.018379f, 0.023183f, -0.010657f, 0.016741f, 0.055714f, 0.004261f, 0.012160f, -0.019923f, 0.012679f, -0.021039f, -0.013521f, -0.011379f, 0.003816f, 0.014056f, 0.019863f, -0.003256f, 0.008019f, -0.006467f, -0.003719f, -0.011189f, 0.014553f, 0.052512f, -0.017552f, -0.017431f, 0.018690f, 0.012991f, 0.001642f, -0.038851f, 0.024668f, -0.031055f, 0.017333f, 0.021681f, 0.002196f, 0.005213f, -0.006605f, 0.035987f, 0.027289f, -0.000077f, 0.018279f, -0.014961f, 0.023117f, 0.003509f, 0.026141f, + 0.038126f, -0.001093f, 0.009366f, -0.005260f, -0.014614f, -0.001211f, 0.016382f, 0.018713f, -0.037225f, -0.022585f, 0.008210f, 0.039770f, -0.019799f, 0.026329f, 0.017354f, 0.004950f, -0.043317f, 0.005007f, 0.006248f, -0.051353f, 0.029718f, -0.028826f, -0.034483f, -0.064937f, 0.015324f, 0.039105f, -0.018236f, -0.036307f, 0.007046f, 0.043370f, 0.027325f, 0.004685f, -0.006133f, 0.000455f, 0.014902f, -0.013471f, 0.020033f, 0.033298f, 0.031404f, -0.002494f, 0.013037f, 0.032955f, -0.005687f, -0.000566f, -0.004147f, 0.028371f, -0.004695f, 0.006896f, -0.013831f, 0.007140f, -0.008711f, 0.001010f, -0.000119f, -0.002319f, -0.006978f, 0.006164f, 0.016253f, 0.005592f, 0.004235f, -0.015218f, 0.003317f, -0.015700f, 0.004206f, 0.024615f, -0.009530f, 0.000353f, 0.002693f, -0.011717f, -0.015812f, -0.017560f, -0.004554f, 0.011140f, -0.005732f, 0.003003f, -0.011199f, -0.001056f, -0.000178f, -0.032451f, -0.008928f, -0.001325f, 0.006243f, 0.008358f, -0.007347f, 0.011613f, 0.005503f, 0.006258f, -0.010244f, -0.009322f, -0.006457f, 0.003022f, 0.014971f, 0.041173f, 0.030002f, -0.009644f, -0.078848f, 0.009861f, + 0.040283f, 0.019494f, 0.009186f, -0.034299f, 0.000341f, -0.023522f, 0.006145f, -0.001804f, 0.007139f, 0.012466f, 0.017204f, 0.007611f, -0.042601f, 0.025504f, -0.005445f, 0.008072f, 0.033345f, 0.013122f, 0.006697f, -0.011244f, 0.041231f, -0.000950f, 0.040987f, -0.048618f, -0.013866f, 0.016141f, -0.028042f, -0.024252f, 0.002308f, -0.005993f, -0.021820f, 0.003085f, 0.036295f, -0.000734f, 0.002953f, -0.018321f, -0.038456f, -0.024442f, -0.010569f, 0.016616f, -0.003712f, 0.004198f, -0.018612f, -0.020456f, -0.009652f, 0.031477f, -0.020770f, 0.018303f, 0.012616f, 0.010480f, 0.004058f, -0.031722f, -0.045215f, -0.003324f, 0.031262f, -0.037657f, 0.018987f, -0.032370f, 0.021129f, -0.034076f, -0.001133f, -0.033593f, 0.048809f, -0.043597f, -0.025660f, 0.011761f, 0.008537f, 0.022471f, 0.019005f, -0.011013f, -0.005446f, -0.011085f, 0.006618f, -0.000094f, 0.029367f, -0.035299f, -0.013493f, -0.045468f, 0.024347f, -0.015915f, 0.002440f, -0.001537f, 0.013165f, -0.009770f, 0.005344f, -0.018382f, -0.027879f, 0.018722f, -0.014090f, 0.000849f, 0.005375f, 0.024746f, 0.010394f, -0.017109f, 0.004408f, -0.005533f, + -0.021859f, -0.003773f, 0.005954f, 0.007502f, -0.019693f, -0.009539f, 0.023158f, -0.001880f, -0.018255f, -0.007891f, 0.027066f, -0.030547f, -0.009830f, 0.006756f, -0.006513f, 0.011477f, -0.001635f, -0.013167f, -0.017644f, -0.005414f, -0.007521f, -0.005232f, -0.005330f, 0.005505f, -0.000728f, 0.011990f, -0.011431f, 0.006885f, 0.002925f, -0.004987f, 0.012256f, -0.067783f, -0.009660f, 0.020216f, 0.004895f, -0.016194f, -0.024242f, 0.002182f, -0.023052f, -0.002195f, -0.035562f, 0.033174f, -0.013366f, 0.020748f, -0.046227f, -0.026225f, -0.001048f, 0.056502f, -0.046385f, -0.004068f, -0.036335f, -0.028873f, -0.008921f, 0.035385f, -0.008360f, 0.015679f, 0.016452f, -0.018860f, -0.040318f, 0.056570f, 0.024505f, -0.032444f, 0.006128f, 0.004115f, 0.015464f, -0.031567f, 0.028103f, -0.002548f, -0.059376f, 0.006216f, 0.011677f, 0.015228f, -0.049237f, -0.011788f, 0.006000f, 0.043177f, 0.008033f, 0.024043f, -0.063484f, -0.038507f, 0.019213f, -0.000030f, 0.041097f, -0.011096f, -0.007186f, 0.003139f, 0.020778f, 0.019212f, 0.007119f, -0.080488f, 0.022443f, -0.009385f, 0.018182f, 0.042878f, -0.013808f, -0.003824f, + -0.049261f, 0.015900f, 0.021913f, -0.025779f, -0.015566f, 0.044386f, 0.069821f, 0.018336f, 0.011152f, -0.019843f, -0.008505f, -0.038274f, 0.002637f, 0.000481f, -0.047557f, 0.017247f, -0.001723f, -0.013823f, -0.003913f, 0.022259f, -0.018418f, -0.012181f, -0.002433f, -0.005040f, -0.002034f, 0.019666f, -0.008813f, 0.000423f, 0.010964f, 0.004537f, 0.015206f, 0.013141f, 0.009604f, 0.007067f, 0.018255f, 0.021846f, -0.029556f, 0.009323f, -0.018601f, 0.014485f, 0.001766f, -0.018416f, -0.012932f, -0.007132f, -0.006534f, -0.012055f, 0.010780f, -0.006113f, -0.012410f, 0.020140f, -0.003618f, -0.006295f, 0.010989f, 0.020749f, -0.000535f, -0.007351f, 0.005234f, 0.019373f, 0.020470f, 0.013271f, -0.007352f, 0.003612f, 0.003388f, 0.017454f, 0.010143f, -0.057210f, -0.037111f, -0.012194f, 0.000294f, -0.032203f, 0.027179f, -0.067771f, 0.004237f, -0.041259f, 0.022769f, -0.014734f, -0.045960f, -0.003251f, -0.011731f, -0.015614f, -0.052476f, -0.038057f, 0.012039f, 0.042968f, -0.027365f, 0.052831f, -0.043381f, -0.028222f, 0.010370f, -0.003450f, 0.024460f, -0.013845f, -0.014570f, -0.020612f, -0.005138f, -0.072058f, + -0.020127f, 0.002969f, -0.002314f, -0.011301f, -0.027854f, 0.023750f, -0.024554f, 0.039795f, -0.011226f, -0.004010f, -0.026777f, -0.024587f, -0.047468f, -0.020185f, 0.018673f, 0.008193f, -0.002079f, 0.004024f, -0.016536f, -0.012267f, -0.021562f, -0.017945f, 0.010674f, 0.015189f, 0.007563f, -0.041115f, 0.048807f, 0.007332f, -0.020034f, 0.039231f, 0.028244f, 0.046594f, -0.007933f, 0.027521f, -0.061974f, -0.033112f, -0.058523f, 0.061101f, -0.018737f, -0.041278f, -0.039765f, -0.085122f, -0.035243f, 0.060237f, -0.003224f, -0.029374f, 0.022421f, -0.057851f, -0.038542f, 0.015488f, -0.002802f, -0.048156f, -0.047145f, 0.000186f, -0.026835f, 0.008096f, 0.010836f, -0.035635f, 0.036073f, -0.020913f, -0.031202f, 0.003506f, -0.018267f, 0.051409f, -0.018952f, 0.023503f, 0.004202f, 0.031532f, -0.015122f, -0.008289f, 0.003521f, -0.013330f, 0.000029f, -0.028833f, -0.021830f, -0.004999f, 0.012842f, 0.001286f, 0.021006f, 0.008952f, 0.015712f, -0.012587f, 0.000424f, -0.025035f, -0.005808f, -0.008609f, 0.008177f, 0.025195f, 0.011803f, 0.010497f, 0.012168f, 0.010797f, 0.003181f, -0.032869f, -0.009491f, -0.022509f, + -0.005313f, 0.004483f, 0.015933f, 0.075588f, 0.096592f, -0.008538f, -0.042142f, -0.009556f, -0.015618f, -0.042502f, 0.019063f, 0.001827f, -0.030756f, 0.092445f, 0.032324f, -0.021092f, -0.063195f, -0.005033f, 0.015795f, 0.017434f, 0.019079f, 0.044614f, -0.012218f, -0.020999f, 0.021032f, -0.078936f, -0.052844f, -0.020069f, -0.005340f, 0.009301f, -0.042177f, -0.038091f, 0.041322f, 0.033366f, -0.024723f, -0.047424f, 0.030922f, 0.001707f, 0.054290f, -0.043124f, -0.009799f, -0.014154f, -0.002456f, -0.033893f, -0.051492f, 0.044340f, -0.031843f, -0.019406f, -0.039315f, -0.007967f, 0.026358f, 0.025446f, -0.015732f, 0.004364f, 0.004804f, 0.033731f, 0.050437f, 0.037934f, -0.064201f, -0.029990f, -0.038026f, -0.008599f, 0.022129f, 0.009011f, -0.043867f, -0.062291f, 0.053786f, 0.004403f, -0.052452f, -0.086249f, 0.044121f, -0.010338f, 0.023781f, 0.022916f, 0.023244f, 0.004133f, 0.017170f, -0.033239f, -0.012927f, 0.024614f, 0.004349f, -0.014975f, 0.009792f, -0.002995f, -0.046226f, 0.024444f, -0.058711f, -0.002723f, -0.002845f, -0.009102f, -0.021078f, -0.007066f, 0.025857f, -0.000614f, -0.005899f, 0.014421f, + -0.018992f, 0.058397f, -0.004521f, 0.006307f, -0.004259f, 0.001758f, 0.014248f, 0.000316f, 0.013718f, -0.027984f, 0.006288f, -0.004122f, -0.020427f, 0.003334f, 0.009689f, 0.020322f, -0.009687f, 0.006602f, -0.048830f, -0.014658f, -0.002771f, -0.024229f, 0.021615f, -0.001606f, -0.006004f, -0.012396f, -0.020213f, -0.028276f, -0.041710f, 0.013952f, -0.004321f, 0.031834f, 0.035976f, 0.024407f, -0.024790f, -0.032819f, -0.043610f, -0.014858f, 0.039684f, 0.034001f, 0.005373f, 0.016678f, -0.014178f, -0.023566f, -0.019309f, 0.001517f, 0.005519f, -0.018174f, 0.008595f, 0.033732f, 0.041789f, -0.051754f, -0.043391f, 0.123456f, -0.009899f, -0.012067f, -0.018467f, -0.038961f, -0.004189f, 0.044539f, 0.071628f, -0.032962f, -0.019846f, -0.007268f, -0.032497f, -0.008115f, -0.018291f, 0.028435f, -0.029356f, 0.032547f, 0.015600f, -0.011197f, -0.040968f, -0.003032f, -0.016829f, 0.061583f, -0.033767f, -0.000856f, 0.000185f, -0.006172f, 0.027955f, -0.017786f, -0.002241f, 0.012775f, -0.008347f, -0.060203f, 0.030781f, -0.027494f, -0.031690f, -0.007366f, -0.033803f, -0.019746f, -0.061492f, 0.058878f, 0.002818f, -0.039327f, + -0.072064f, 0.041955f, -0.042457f, -0.041650f, 0.000687f, -0.032464f, 0.014738f, 0.026565f, 0.082230f, -0.023442f, 0.032286f, -0.007020f, -0.039552f, -0.033846f, -0.009703f, 0.123386f, -0.108784f, -0.008101f, 0.113582f, -0.103917f, -0.039207f, 0.058310f, -0.008458f, -0.047049f, 0.109863f, -0.054459f, -0.022380f, 0.050188f, 0.012675f, 0.021313f, -0.032322f, 0.036178f, 0.051349f, 0.023776f, -0.012878f, -0.003570f, 0.051869f, -0.007741f, 0.029770f, -0.000923f, 0.020848f, -0.029809f, -0.003630f, 0.013388f, 0.008542f, 0.005457f, 0.001606f, 0.001853f, 0.021735f, -0.010130f, 0.005797f, 0.007703f, 0.007523f, -0.046697f, -0.018858f, 0.014593f, -0.039061f, 0.011550f, 0.022713f, -0.016917f, -0.017256f, -0.013838f, 0.009686f, -0.019344f, 0.022792f, 0.018765f, -0.002193f, 0.010731f, -0.013681f, -0.028314f, -0.026958f, 0.053881f, 0.010092f, 0.033474f, 0.007288f, 0.006326f, 0.021787f, -0.018858f, -0.004019f, 0.034014f, -0.020082f, -0.047300f, 0.035544f, -0.005122f, 0.020947f, -0.005821f, -0.013502f, -0.013741f, 0.057643f, -0.074989f, 0.066083f, -0.012042f, -0.042120f, 0.035235f, 0.011950f, -0.007308f, + 0.006867f, 0.004233f, -0.008678f, 0.012443f, -0.015015f, -0.019239f, -0.009129f, -0.026405f, -0.022133f, -0.049029f, -0.019194f, 0.040994f, 0.038577f, -0.060802f, 0.019454f, 0.031306f, 0.026083f, -0.010977f, -0.060088f, -0.006009f, -0.030091f, -0.070190f, 0.043187f, 0.110775f, -0.064636f, -0.007563f, 0.078475f, -0.023119f, -0.028926f, 0.063659f, 0.047043f, 0.022920f, -0.026638f, -0.052443f, 0.016585f, -0.021743f, -0.033446f, 0.115881f, 0.085042f, -0.070930f, -0.052466f, 0.062294f, -0.115486f, -0.041023f, -0.033218f, -0.020443f, 0.079533f, 0.052718f, 0.034378f, 0.037897f, -0.135571f, -0.047695f, 0.127782f, 0.073813f, 0.014514f, -0.034937f, 0.043548f, -0.045891f, -0.092354f, -0.061722f, 0.043965f, -0.034071f, -0.007924f, 0.051250f, 0.095370f, -0.012222f, -0.054879f, 0.006306f, 0.037257f, -0.066172f, -0.025017f, 0.067603f, 0.060656f, 0.060878f, 0.041977f, -0.012915f, -0.039743f, -0.020004f, 0.051430f, 0.014426f, 0.021202f, -0.010688f, 0.005125f, 0.023106f, 0.001350f, -0.010123f, -0.011856f, -0.015576f, 0.010867f, 0.007750f, 0.049282f, 0.013368f, -0.010648f, -0.020609f, 0.004184f, 0.001831f, + -0.008110f, -0.018182f, 0.004209f, 0.038042f, -0.041905f, -0.013000f, 0.036450f, -0.009185f, -0.001736f, 0.024040f, -0.010234f, 0.017606f, 0.006955f, 0.020795f, -0.042380f, -0.006659f, 0.007965f, 0.046691f, 0.010677f, 0.022031f, 0.018994f, 0.010241f, -0.009898f, 0.014942f, 0.021627f, -0.026016f, 0.011690f, -0.114552f, 0.049030f, 0.000197f, -0.012086f, 0.058148f, -0.010344f, -0.044518f, 0.021811f, 0.019904f, 0.056802f, 0.032082f, -0.031352f, 0.001335f, 0.008426f, 0.038875f, 0.008663f, -0.045433f, -0.002170f, -0.002890f, 0.008764f, -0.042272f, -0.046218f, 0.066033f, -0.024355f, -0.069650f, 0.035222f, 0.061286f, -0.035106f, -0.012063f, 0.003570f, 0.041937f, -0.050843f, -0.066405f, 0.017664f, 0.055597f, -0.012605f, -0.024068f, -0.014313f, -0.013864f, 0.023789f, 0.010113f, 0.013998f, 0.140555f, 0.007248f, -0.018223f, 0.001381f, 0.004199f, 0.075493f, 0.002189f, -0.027587f, 0.016922f, -0.060011f, -0.035116f, 0.014839f, 0.000105f, 0.064766f, 0.051693f, -0.034175f, -0.010013f, -0.032351f, 0.001334f, 0.022818f, 0.005780f, 0.006647f, 0.023283f, -0.017468f, -0.069367f, 0.016976f, 0.046578f, + -0.022744f, 0.041097f, -0.064755f, 0.030046f, 0.018647f, -0.056293f, 0.008925f, 0.001007f, -0.025208f, 0.002473f, -0.011199f, 0.027845f, 0.026523f, -0.047150f, -0.029772f, 0.062740f, -0.048699f, 0.023041f, -0.005263f, -0.018472f, 0.012995f, -0.001908f, -0.029011f, 0.016037f, 0.008919f, 0.011484f, -0.001716f, -0.004795f, 0.002275f, 0.008713f, -0.011615f, -0.010182f, 0.007658f, 0.006156f, -0.006843f, -0.000470f, 0.012981f, 0.023443f, -0.014778f, -0.009385f, 0.002039f, -0.004100f, 0.007222f, -0.005699f, -0.004128f, 0.005528f, -0.001285f, 0.014176f, -0.005469f, 0.007075f, -0.019243f, 0.011214f, -0.013766f, 0.011860f, 0.019468f, -0.001641f, -0.000733f, 0.003062f, -0.024804f, 0.019466f, 0.039302f, -0.073742f, -0.242543f, -0.287021f, -0.025813f, -0.199068f, 0.078198f, 0.485279f, 0.261055f, 0.394142f, 0.415395f, -0.045177f, -0.119719f, 0.035481f, -0.302566f, -0.369870f, -0.114275f, -0.407163f, -0.326848f, 0.082859f, -0.235113f, -0.064100f, 0.468651f, 0.169634f, 0.331332f, 0.572377f, 0.340683f, 0.152341f, 0.115971f, 0.040531f, -0.254998f, -0.317498f, -0.104756f, -0.433629f, -0.433884f, 0.057130f, + -0.324475f, -0.266350f, 0.160073f, -0.273095f, -0.280757f, 0.211875f, 0.086105f, -0.038818f, 0.500318f, 0.468430f, 0.299161f, 0.635101f, 0.598584f, 0.204407f, 0.238254f, 0.185600f, -0.301393f, -0.302228f, -0.382071f, -0.756605f, -0.892977f, -0.642365f, -0.639396f, -0.471757f, 0.016163f, 0.043461f, 0.311409f, 0.538353f, 0.663702f, 0.604598f, 0.701783f, 0.601156f, 0.354636f, 0.238298f, 0.079407f, -0.118694f, -0.266361f, -0.379122f, -0.325612f, -0.472333f, -0.528834f, -0.438760f, -0.512748f, -0.384927f, 0.060994f, 0.123170f, 0.298767f, 0.599055f, 0.477186f, 0.367561f, 0.277988f, 0.109289f, -0.090821f, -0.074366f, -0.150196f, -0.188203f, -0.143533f, -0.163540f, -0.157760f, -0.067510f, -0.063844f, 0.003331f, 0.097503f, 0.069097f, 0.136880f, 0.164148f, 0.028701f, 0.119000f, 0.114612f, -0.032054f, 0.038132f, 0.026520f, -0.087121f, 0.003486f, 0.028263f, -0.101148f, -0.110114f, -0.154096f, -0.316325f, -0.354034f, -0.275142f, -0.263315f, -0.086157f, 0.128809f, 0.232825f, 0.378380f, 0.571416f, 0.616519f, 0.572107f, 0.400467f, 0.122356f, -0.129657f, -0.276495f, -0.413281f, -0.509580f, -0.501681f, + -0.391499f, -0.269366f, -0.127788f, -0.039782f, 0.016131f, 0.045868f, 0.116435f, 0.191442f, 0.197952f, 0.183226f, 0.188654f, 0.133623f, 0.120819f, 0.103966f, 0.042284f, 0.008921f, 0.026081f, 0.022028f, 0.013842f, 0.008328f, -0.024186f, -0.065027f, -0.098640f, -0.142233f, -0.180395f, -0.180843f, -0.145537f, -0.111815f, -0.058720f, 0.009760f, 0.061085f, 0.089162f, 0.103775f, 0.091302f, 0.080947f, 0.088441f, 0.085691f, 0.068540f, 0.058678f, 0.048447f, 0.033314f, 0.017205f, 0.000952f, -0.032790f, -0.060462f, -0.066895f, -0.062758f, -0.057149f, -0.053309f, -0.049425f, -0.036711f, -0.013331f, 0.001364f, -0.004970f, -0.016263f, -0.009157f, 0.001259f, 0.007314f, 0.014391f, 0.016688f, 0.022852f, 0.036347f, 0.049537f, 0.048620f, 0.050086f, 0.044194f, 0.028590f, 0.017274f, 0.010009f, -0.003909f, -0.016409f, -0.025412f, -0.045445f, -0.063015f, -0.069153f, -0.071937f, -0.062177f, -0.039726f, -0.010530f, 0.022189f, 0.051452f, 0.065260f, 0.063719f, 0.049769f, 0.032942f, 0.016221f, 0.000861f, -0.008160f, -0.012887f, -0.013630f, -0.011919f, -0.011509f, -0.011268f, -0.010205f, -0.007969f, -0.006186f, + -0.003704f, -0.001284f, 0.000374f, 0.001833f, 0.002580f, 0.002457f, 0.001876f, 0.000938f, 0.000259f, -0.000066f, -0.000117f, -0.000096f} + }, + { + {-0.016487f, -0.019659f, 0.010316f, 0.000747f, 0.015493f, 0.005699f, 0.006919f, 0.004487f, 0.006376f, -0.000046f, -0.000062f, -0.003328f, -0.009927f, -0.005682f, 0.002816f, -0.000374f, -0.001719f, -0.001069f, 0.005492f, 0.004292f, 0.000197f, 0.004954f, -0.004377f, -0.011324f, 0.003784f, -0.002541f, 0.001419f, -0.005716f, 0.004717f, -0.004658f, -0.002257f, -0.001770f, 0.008342f, -0.001817f, 0.000040f, -0.003309f, -0.000812f, -0.009151f, 0.003253f, -0.001453f, 0.005135f, -0.004292f, 0.000719f, -0.001968f, -0.007315f, 0.002474f, -0.000616f, -0.001899f, 0.003435f, 0.006230f, -0.001146f, -0.003639f, -0.010760f, 0.001103f, -0.006349f, 0.003115f, 0.000227f, -0.004081f, -0.000051f, -0.001688f, -0.001403f, -0.007738f, 0.005195f, -0.006849f, 0.003962f, -0.002627f, -0.004532f, -0.003844f, -0.008247f, 0.004721f, 0.000541f, 0.002409f, 0.005143f, -0.005249f, -0.008463f, 0.005610f, -0.008107f, 0.000383f, -0.005367f, 0.001866f, -0.004130f, 0.003849f, -0.002036f, 0.002090f, -0.003551f, 0.000782f, -0.001592f, 0.002318f, -0.001649f, -0.001808f, -0.001765f, -0.001646f, -0.003179f, 0.000598f, 0.000908f, -0.000449f, + -0.002485f, 0.001913f, -0.001854f, 0.000398f, -0.001208f, -0.002112f, -0.000730f, -0.000675f, -0.000266f, -0.000367f, -0.000235f, -0.001720f, -0.000907f, 0.000409f, -0.001016f, -0.000462f, -0.000504f, -0.001174f, -0.000308f, -0.000843f, -0.001121f, -0.000942f, -0.029345f, -0.000378f, -0.003951f, 0.007643f, 0.000081f, 0.002907f, -0.002487f, 0.003776f, 0.000680f, 0.003299f, -0.003455f, 0.018853f, -0.004179f, -0.002708f, -0.008185f, 0.002673f, -0.009869f, -0.003190f, 0.000664f, -0.004806f, -0.000136f, 0.006896f, 0.003902f, 0.002598f, 0.004601f, 0.006701f, -0.008275f, -0.003166f, -0.000233f, 0.004250f, -0.007814f, 0.007516f, -0.006552f, -0.003296f, 0.005968f, -0.001173f, 0.001320f, -0.004833f, 0.005506f, 0.005820f, 0.006191f, -0.009650f, -0.003018f, 0.010387f, -0.000218f, -0.001586f, -0.002413f, 0.011329f, 0.007317f, 0.008762f, 0.000077f, -0.002066f, -0.002706f, -0.000635f, -0.000319f, 0.001279f, 0.003311f, -0.010975f, -0.001075f, -0.005115f, -0.006567f, -0.000855f, 0.001782f, -0.005695f, 0.001433f, -0.004353f, -0.001682f, -0.001761f, -0.000223f, 0.003796f, 0.003425f, -0.001987f, -0.001391f, -0.002486f, + -0.008992f, -0.002107f, -0.005611f, 0.000148f, -0.007373f, 0.001975f, 0.000024f, 0.007358f, -0.002634f, 0.001012f, -0.006473f, 0.000557f, 0.000801f, -0.002973f, -0.003155f, 0.003126f, 0.000007f, 0.000833f, -0.000393f, 0.002195f, -0.000671f, 0.000913f, -0.000467f, -0.000504f, 0.002564f, 0.001223f, 0.001016f, 0.000413f, -0.000391f, 0.001585f, 0.009854f, 0.011688f, -0.008301f, 0.000956f, -0.007095f, 0.010701f, 0.001881f, -0.004566f, -0.006434f, -0.005702f, -0.001277f, 0.001268f, 0.002759f, 0.014270f, -0.008654f, -0.001462f, -0.003502f, 0.005529f, -0.016159f, -0.001983f, 0.010126f, -0.000387f, 0.008491f, 0.003699f, 0.006788f, 0.007074f, 0.003011f, -0.001509f, -0.007648f, 0.002381f, -0.002221f, 0.000851f, 0.011857f, 0.002911f, 0.010157f, -0.005504f, -0.002922f, 0.000677f, -0.013932f, 0.001511f, 0.010209f, -0.003142f, 0.000847f, -0.008744f, 0.006406f, -0.000252f, 0.002780f, -0.010329f, 0.005898f, -0.006973f, -0.003948f, -0.007279f, -0.008545f, 0.004749f, 0.001529f, -0.002838f, -0.004434f, -0.004187f, -0.003122f, -0.002147f, 0.004649f, -0.004834f, -0.008682f, -0.013293f, 0.012079f, 0.009258f, + 0.000383f, -0.013298f, 0.003885f, -0.006432f, 0.005073f, -0.004379f, 0.000821f, -0.008188f, -0.005216f, -0.010634f, -0.004887f, -0.001574f, 0.010158f, 0.006027f, -0.011603f, 0.004878f, 0.000130f, -0.001097f, 0.004895f, -0.000779f, 0.003860f, 0.008071f, 0.000301f, 0.001626f, 0.005289f, 0.001024f, 0.000955f, 0.005260f, -0.001070f, -0.000236f, 0.000282f, 0.000604f, 0.001009f, 0.001238f, -0.001324f, 0.001461f, -0.001250f, 0.000303f, 0.000135f, 0.001283f, 0.000185f, 0.003299f, 0.002828f, 0.000123f, -0.000298f, 0.003235f, 0.001562f, -0.002586f, 0.000339f, 0.001111f, 0.049764f, -0.018523f, 0.022277f, -0.017755f, 0.001489f, 0.005264f, 0.005203f, -0.014663f, -0.005002f, -0.004946f, -0.024532f, -0.000166f, 0.001262f, -0.008861f, -0.001463f, -0.000139f, 0.017482f, 0.003205f, -0.012253f, 0.008889f, 0.009705f, 0.002141f, 0.017723f, -0.013238f, -0.004867f, -0.007091f, 0.003715f, 0.014191f, -0.001067f, 0.000863f, 0.005257f, -0.002578f, 0.006322f, 0.002837f, 0.016218f, -0.002487f, 0.006336f, -0.010681f, 0.009680f, -0.007490f, 0.010812f, -0.000229f, -0.011376f, -0.001738f, 0.016351f, -0.000759f, + 0.011052f, 0.006620f, 0.010628f, 0.000915f, -0.008472f, -0.006899f, 0.000143f, -0.005137f, 0.008720f, 0.005770f, -0.008696f, 0.001162f, -0.006801f, 0.011522f, -0.003175f, 0.009237f, 0.011037f, 0.001906f, 0.011379f, -0.000558f, -0.005563f, -0.001913f, -0.007080f, 0.000292f, 0.014964f, -0.009432f, -0.009655f, -0.003670f, 0.004228f, -0.006618f, -0.004109f, 0.002876f, 0.007176f, -0.003019f, 0.002620f, -0.014567f, 0.003554f, 0.000918f, -0.001065f, 0.005067f, 0.000299f, 0.001346f, 0.003436f, -0.000467f, -0.001905f, 0.001543f, -0.003372f, 0.001028f, -0.001418f, 0.000399f, 0.000613f, -0.000539f, -0.001188f, -0.002929f, -0.000251f, -0.002336f, -0.001465f, -0.000998f, -0.004862f, -0.041355f, 0.004661f, -0.012096f, -0.008612f, -0.013279f, -0.016113f, 0.006517f, 0.014642f, -0.002078f, 0.005770f, 0.002409f, 0.007581f, 0.001799f, 0.000673f, 0.004606f, -0.008760f, 0.020710f, -0.000943f, -0.011893f, 0.013653f, -0.004034f, 0.005871f, -0.013423f, -0.008283f, -0.009484f, 0.004281f, 0.002613f, 0.010715f, 0.000414f, -0.006441f, 0.001197f, -0.005736f, -0.006366f, -0.007025f, -0.002402f, -0.009832f, -0.004968f, + 0.009426f, -0.008565f, -0.000475f, -0.006685f, -0.010441f, -0.004636f, 0.001463f, 0.003466f, 0.006853f, -0.005253f, -0.004746f, 0.006709f, 0.001298f, 0.002568f, 0.001901f, 0.004177f, 0.006367f, -0.010060f, -0.003252f, -0.000966f, -0.014055f, 0.003822f, -0.000862f, 0.008369f, -0.008184f, -0.006301f, -0.007641f, 0.001393f, 0.008940f, 0.006863f, 0.015666f, 0.010469f, -0.009463f, 0.003944f, -0.004215f, 0.007391f, 0.004735f, -0.010339f, 0.007616f, 0.002051f, -0.011383f, 0.001520f, -0.001965f, 0.001021f, -0.002028f, -0.007837f, 0.001574f, -0.005617f, -0.005803f, 0.002202f, -0.003133f, 0.001389f, 0.004355f, -0.002810f, -0.003642f, -0.003906f, -0.005735f, -0.001078f, 0.004655f, -0.001188f, 0.004837f, 0.000048f, 0.003310f, 0.002167f, 0.001785f, -0.002098f, -0.000695f, 0.000807f, -0.001916f, -0.002288f, 0.000668f, -0.002213f, -0.000721f, 0.000592f, -0.003994f, 0.002304f, -0.001982f, -0.000732f, 0.000605f, -0.000164f, 0.000459f, 0.001312f, -0.001708f, 0.001160f, 0.002898f, -0.052614f, 0.014691f, -0.015559f, -0.012927f, -0.009250f, 0.001976f, -0.002560f, 0.031303f, 0.003250f, 0.007642f, -0.003282f, + 0.000320f, -0.012594f, 0.012892f, 0.003889f, -0.001646f, 0.002731f, 0.016772f, -0.008118f, -0.002662f, 0.004004f, 0.001353f, 0.008496f, -0.007035f, -0.003079f, 0.009347f, 0.003533f, 0.008627f, 0.001182f, -0.008731f, -0.005680f, 0.005246f, -0.000699f, -0.002829f, -0.005411f, -0.003016f, -0.000199f, 0.015910f, 0.004133f, -0.002634f, 0.000496f, 0.001368f, -0.004600f, 0.011521f, 0.008824f, -0.002489f, -0.011723f, 0.003183f, -0.006132f, 0.010973f, 0.008522f, -0.008182f, 0.003433f, -0.010655f, -0.009524f, -0.008307f, -0.010528f, -0.003488f, 0.002512f, -0.006222f, 0.000684f, -0.006893f, -0.005862f, 0.012601f, 0.008036f, -0.010304f, -0.014037f, 0.001795f, 0.012231f, -0.009126f, -0.006773f, 0.010410f, 0.008179f, 0.011846f, -0.007366f, -0.000130f, 0.003434f, 0.005002f, 0.013228f, 0.003736f, -0.001573f, -0.000305f, -0.009398f, -0.001235f, -0.000035f, -0.007986f, 0.000735f, -0.002212f, -0.003600f, 0.000360f, -0.000971f, 0.004237f, -0.000835f, -0.001374f, 0.002050f, -0.001025f, -0.003278f, -0.002041f, 0.000847f, 0.003463f, -0.001431f, -0.001017f, 0.000228f, -0.000604f, 0.006260f, 0.001310f, 0.008078f, + -0.005421f, 0.001563f, 0.000615f, -0.003190f, 0.000125f, -0.000151f, -0.004054f, 0.001203f, -0.000610f, -0.004591f, -0.004170f, -0.002167f, -0.003977f, -0.003078f, 0.001314f, -0.001969f, -0.027811f, -0.002758f, 0.004680f, 0.013523f, -0.002638f, -0.007088f, 0.003167f, 0.019873f, -0.025033f, 0.005802f, -0.005084f, -0.004648f, -0.011272f, 0.006771f, -0.020063f, -0.013058f, 0.006891f, -0.010488f, 0.006338f, 0.028576f, -0.005063f, 0.011550f, -0.013445f, 0.013800f, -0.003593f, 0.004116f, -0.012061f, 0.005628f, 0.003415f, -0.006460f, 0.002833f, -0.001303f, -0.006209f, -0.000413f, 0.007840f, 0.012303f, -0.009643f, -0.015364f, -0.012185f, -0.011278f, 0.001451f, 0.009023f, 0.023887f, -0.000272f, 0.016082f, 0.016811f, -0.015650f, 0.012027f, -0.023013f, -0.008407f, 0.001443f, -0.010228f, -0.009549f, 0.006383f, -0.022289f, -0.004398f, 0.015482f, -0.006682f, -0.005845f, 0.002051f, -0.006823f, 0.006340f, -0.006771f, 0.010874f, 0.014020f, -0.003885f, 0.004342f, 0.000589f, -0.014242f, 0.001229f, -0.009227f, -0.006338f, -0.011260f, 0.006396f, 0.004860f, -0.010784f, 0.000845f, 0.008048f, 0.007443f, 0.009533f, + 0.009785f, -0.001494f, -0.009372f, 0.007747f, 0.004012f, 0.004644f, 0.002489f, 0.005606f, -0.000677f, -0.000173f, 0.000776f, 0.002313f, 0.002666f, -0.003812f, -0.001225f, -0.003073f, -0.002102f, 0.004505f, 0.003805f, 0.004349f, -0.007929f, 0.001624f, -0.001043f, -0.003232f, -0.003866f, 0.004076f, -0.002574f, -0.004288f, 0.001024f, 0.001034f, -0.001488f, 0.009594f, 0.003106f, -0.001865f, -0.002196f, -0.004435f, -0.001311f, 0.003931f, 0.005881f, 0.001514f, -0.000072f, 0.006018f, 0.065835f, -0.003256f, -0.026135f, -0.003335f, -0.001214f, 0.002429f, 0.008233f, 0.003320f, -0.003090f, -0.002772f, -0.013195f, -0.006282f, 0.007289f, 0.016040f, -0.013264f, -0.008363f, 0.010684f, 0.000814f, -0.003936f, 0.004249f, -0.001117f, -0.015333f, -0.015621f, 0.021117f, -0.002037f, -0.001400f, -0.003600f, 0.010824f, -0.000905f, 0.001099f, 0.006862f, -0.011645f, 0.012245f, 0.005074f, 0.001947f, 0.004656f, 0.012241f, -0.029620f, -0.013298f, -0.007235f, 0.027202f, 0.003481f, 0.001986f, -0.008431f, -0.009303f, 0.008124f, -0.001282f, 0.009426f, -0.003420f, -0.018937f, 0.001976f, 0.002279f, -0.002914f, 0.009156f, + 0.004075f, 0.002438f, 0.015062f, 0.036806f, -0.002964f, -0.003141f, 0.013980f, 0.004236f, -0.004399f, 0.009611f, 0.028617f, -0.003244f, 0.005439f, 0.010354f, 0.008297f, 0.007433f, 0.007573f, 0.008494f, 0.006521f, -0.007601f, 0.011394f, 0.020422f, -0.004771f, 0.007816f, 0.000069f, -0.002599f, -0.014192f, 0.008800f, 0.003298f, -0.001176f, 0.004243f, 0.004883f, 0.001129f, 0.000545f, -0.004810f, -0.005508f, -0.002202f, -0.010949f, -0.004896f, -0.007427f, 0.009455f, 0.004631f, 0.003570f, -0.001562f, -0.001469f, 0.000538f, -0.006321f, -0.000007f, 0.002271f, -0.008698f, 0.007571f, -0.003802f, 0.001316f, -0.002674f, 0.000378f, 0.002863f, 0.003423f, -0.006781f, -0.006727f, -0.005591f, 0.000718f, -0.001172f, -0.001892f, -0.000533f, 0.004656f, -0.001257f, 0.000455f, -0.002796f, -0.005983f, -0.003260f, -0.000197f, 0.013293f, 0.014802f, -0.018878f, -0.005489f, -0.016025f, 0.015847f, 0.029711f, -0.014249f, -0.003345f, -0.016347f, -0.007101f, -0.019778f, 0.014083f, -0.012084f, -0.004906f, -0.001304f, 0.000141f, -0.007891f, -0.009677f, 0.017710f, -0.016096f, -0.005980f, 0.001847f, 0.012072f, 0.012933f, + -0.018593f, -0.005446f, 0.007101f, -0.015951f, 0.009031f, -0.012650f, -0.005198f, 0.004681f, 0.000334f, -0.006912f, -0.001968f, 0.003834f, 0.020694f, 0.002584f, 0.004640f, 0.000027f, -0.017774f, 0.019395f, -0.009549f, -0.014502f, 0.011578f, -0.010329f, -0.011765f, 0.015298f, -0.006957f, 0.001985f, -0.003429f, 0.002084f, 0.020016f, -0.003400f, 0.004444f, -0.017513f, -0.001435f, 0.020467f, 0.004511f, 0.020280f, 0.017269f, -0.005664f, -0.004498f, -0.023502f, 0.003553f, -0.003914f, 0.015545f, 0.019173f, -0.011063f, 0.004811f, -0.034656f, -0.009411f, 0.011389f, -0.011901f, 0.017852f, 0.001256f, 0.003798f, -0.006295f, -0.001417f, -0.008242f, 0.001390f, -0.005663f, 0.012576f, 0.012504f, -0.000648f, 0.004299f, -0.000276f, 0.007095f, 0.002951f, 0.005158f, 0.010607f, -0.003157f, -0.012123f, 0.005589f, 0.002647f, 0.007693f, -0.002081f, 0.008159f, -0.001750f, -0.002741f, 0.001941f, -0.004797f, -0.003335f, 0.000900f, -0.008561f, 0.002437f, -0.003048f, 0.007575f, 0.003135f, -0.000475f, -0.001704f, -0.004868f, -0.007611f, -0.000520f, 0.000905f, 0.003128f, -0.002869f, 0.001763f, -0.007172f, -0.000010f, + 0.000305f, -0.003639f, 0.004611f, 0.000566f, -0.000012f, 0.002103f, -0.002434f, 0.000462f, -0.000083f, 0.011855f, -0.015229f, 0.005124f, -0.014245f, -0.001613f, -0.019218f, 0.031395f, -0.009328f, 0.002075f, -0.010000f, -0.028762f, 0.016478f, 0.005730f, -0.021482f, 0.013196f, -0.009713f, -0.007167f, 0.007427f, 0.029716f, -0.014928f, 0.028705f, -0.000630f, -0.020282f, 0.000787f, 0.006660f, -0.017853f, 0.019578f, -0.010364f, 0.014481f, 0.031550f, 0.003032f, -0.014826f, -0.004192f, -0.001743f, 0.007188f, -0.012617f, -0.006917f, -0.001752f, 0.015523f, -0.005618f, -0.006315f, -0.020748f, -0.000759f, -0.024519f, -0.004566f, 0.027671f, -0.006275f, 0.015736f, 0.001445f, 0.004162f, -0.036386f, 0.000452f, -0.023300f, 0.018684f, 0.032509f, 0.010002f, 0.008134f, 0.001981f, 0.004834f, -0.019028f, 0.006649f, 0.010108f, -0.008501f, -0.002403f, -0.007539f, -0.004810f, 0.014637f, 0.000303f, 0.017763f, 0.054517f, 0.019889f, 0.005417f, -0.018768f, -0.017439f, -0.011318f, 0.010695f, -0.018582f, -0.001635f, -0.001720f, 0.003775f, 0.010468f, -0.010198f, -0.001946f, 0.010123f, 0.011112f, 0.002275f, 0.001876f, + 0.007557f, 0.009568f, 0.007991f, -0.000112f, -0.001791f, -0.001820f, 0.000831f, -0.003981f, -0.004960f, 0.004328f, -0.002514f, 0.006739f, -0.008279f, -0.002631f, 0.005706f, 0.004847f, -0.000502f, 0.004380f, -0.004266f, 0.001993f, 0.003000f, 0.004069f, -0.004681f, -0.004602f, 0.006464f, 0.004620f, 0.003626f, -0.001674f, -0.003266f, 0.001568f, -0.009214f, -0.002417f, 0.001472f, -0.004904f, 0.002237f, -0.003401f, -0.002399f, 0.001050f, 0.000744f, -0.000768f, -0.001829f, -0.006107f, 0.057718f, -0.030134f, -0.000119f, -0.014606f, -0.028201f, -0.037873f, 0.011411f, -0.011652f, 0.012039f, -0.035809f, 0.007877f, 0.013742f, 0.012422f, -0.014630f, -0.032832f, -0.025696f, -0.021479f, 0.000983f, -0.012212f, -0.023774f, -0.016164f, -0.007872f, -0.019311f, -0.013255f, 0.003980f, 0.025918f, -0.000038f, 0.004269f, -0.000292f, -0.021547f, 0.014273f, -0.001362f, 0.004599f, -0.004302f, -0.014113f, 0.013156f, -0.017749f, -0.024969f, 0.023506f, -0.024344f, 0.005487f, 0.000413f, -0.034484f, -0.020283f, 0.014220f, 0.000009f, 0.017361f, -0.010556f, -0.036677f, 0.000482f, 0.001795f, 0.014509f, 0.015320f, 0.035385f, + -0.019651f, -0.070972f, -0.024562f, -0.023793f, 0.016501f, -0.046022f, -0.015313f, -0.007152f, -0.042296f, -0.013623f, -0.000275f, -0.007513f, -0.007573f, 0.009966f, -0.011087f, -0.000385f, -0.010376f, 0.010684f, -0.024704f, 0.009702f, 0.020645f, -0.024817f, -0.012363f, 0.013176f, 0.010292f, 0.009101f, -0.025628f, 0.006836f, 0.000744f, -0.003040f, 0.014258f, -0.002835f, 0.011801f, 0.010692f, -0.001823f, 0.003772f, 0.002622f, -0.002496f, -0.008244f, 0.014889f, -0.004240f, -0.009363f, 0.000742f, 0.000255f, 0.008053f, 0.003357f, 0.000456f, 0.003032f, -0.007083f, -0.007024f, 0.001296f, 0.003353f, 0.005001f, 0.008820f, -0.000519f, 0.004393f, -0.000374f, 0.003963f, -0.008315f, -0.003134f, -0.005633f, -0.004917f, -0.000480f, -0.000521f, 0.003662f, -0.009252f, -0.004060f, -0.006751f, -0.004820f, -0.009717f, -0.012320f, -0.010672f, -0.000763f, -0.000340f, 0.001849f, -0.006290f, -0.008499f, -0.033016f, 0.013078f, 0.016328f, -0.005426f, -0.006363f, -0.016435f, -0.018173f, 0.042006f, 0.015281f, -0.039129f, 0.013547f, -0.021291f, -0.002050f, -0.019332f, -0.040263f, 0.011888f, -0.020997f, -0.008702f, 0.001637f, + 0.001263f, -0.010279f, -0.033949f, -0.021145f, 0.016802f, -0.020914f, -0.000467f, -0.018511f, -0.028213f, -0.011084f, 0.031584f, 0.004985f, 0.005736f, -0.027493f, -0.009054f, -0.005686f, -0.003424f, 0.011075f, 0.013950f, 0.017696f, 0.022171f, -0.010825f, 0.012578f, 0.004248f, -0.012523f, 0.007710f, -0.021163f, -0.018706f, -0.015882f, 0.006834f, -0.018370f, 0.000788f, -0.027721f, -0.024620f, -0.012397f, 0.028852f, 0.022867f, 0.021891f, 0.024536f, -0.022483f, 0.030690f, 0.000884f, 0.014287f, 0.041708f, -0.008323f, -0.007836f, 0.007100f, -0.020281f, 0.008601f, -0.009602f, -0.025714f, 0.003255f, 0.021568f, -0.025278f, -0.017603f, -0.003223f, 0.023168f, -0.019250f, 0.002511f, 0.006891f, 0.014071f, 0.003292f, -0.005348f, -0.013185f, 0.003840f, 0.009575f, -0.005006f, 0.001077f, -0.006387f, 0.001991f, -0.006050f, 0.002393f, 0.000772f, 0.003424f, -0.002074f, 0.002308f, 0.004982f, 0.011617f, -0.001148f, -0.000447f, 0.001323f, 0.005302f, -0.008405f, -0.003849f, -0.009287f, -0.002907f, -0.001805f, -0.011265f, 0.002447f, 0.009801f, -0.000540f, -0.013390f, -0.001876f, -0.001427f, -0.011086f, -0.013127f, + -0.018454f, -0.008047f, 0.007577f, 0.000923f, 0.005470f, -0.003109f, -0.003011f, -0.007027f, -0.000613f, -0.016818f, -0.002634f, 0.009632f, 0.016143f, -0.001097f, 0.005126f, -0.009685f, 0.001586f, -0.005893f, 0.008465f, 0.003246f, -0.015815f, -0.036873f, 0.042165f, -0.032952f, 0.043663f, 0.024439f, 0.016624f, 0.009346f, 0.017149f, 0.018636f, 0.017220f, 0.046934f, -0.016445f, 0.003308f, -0.003152f, -0.008101f, -0.001442f, 0.005818f, -0.004378f, 0.009029f, -0.003064f, 0.014680f, 0.012296f, -0.002644f, -0.008151f, -0.046783f, -0.016689f, -0.033934f, -0.001590f, 0.017891f, 0.018025f, 0.005742f, 0.009171f, 0.013489f, 0.011119f, 0.013075f, 0.033480f, 0.049977f, 0.033501f, 0.006764f, -0.006386f, -0.009653f, -0.014379f, 0.017488f, 0.017777f, 0.019971f, -0.014884f, -0.011701f, -0.018454f, -0.003041f, 0.024319f, 0.000239f, 0.029148f, -0.017693f, 0.015596f, 0.009421f, 0.026154f, -0.054743f, -0.039245f, -0.016052f, -0.022043f, -0.022504f, 0.006718f, -0.009183f, 0.034421f, 0.010235f, -0.038458f, -0.003161f, 0.062131f, -0.020952f, 0.019350f, -0.009387f, 0.025511f, -0.011894f, -0.007812f, 0.000926f, + -0.010597f, -0.013861f, -0.001039f, 0.010462f, 0.015340f, 0.010736f, -0.004080f, 0.012107f, -0.003261f, 0.005610f, -0.015883f, -0.010765f, 0.010106f, 0.006472f, -0.015971f, -0.006922f, -0.006807f, -0.002115f, 0.003912f, -0.004170f, -0.007857f, 0.003621f, 0.000658f, 0.002634f, -0.001305f, -0.004475f, 0.007018f, 0.002337f, -0.004064f, 0.009388f, -0.001366f, 0.002784f, -0.001803f, 0.011070f, -0.009438f, 0.009864f, 0.004254f, -0.009202f, 0.006043f, 0.000365f, 0.001568f, -0.009593f, -0.028180f, 0.010578f, 0.000176f, 0.002075f, -0.003292f, 0.010755f, -0.002670f, -0.004974f, 0.003357f, 0.008413f, 0.006872f, -0.004109f, 0.008537f, -0.026818f, -0.013343f, 0.022539f, 0.009937f, 0.016671f, 0.043205f, 0.003850f, 0.028921f, 0.042216f, 0.029357f, -0.018860f, -0.042613f, -0.001271f, -0.019485f, 0.046287f, 0.013421f, 0.036201f, -0.005009f, -0.019141f, -0.006982f, -0.020901f, 0.008448f, -0.016042f, 0.002082f, -0.017887f, 0.009523f, -0.013021f, -0.005437f, -0.028828f, -0.028632f, -0.002674f, -0.041070f, 0.022729f, 0.015640f, -0.012142f, 0.021185f, -0.009856f, 0.008294f, 0.023655f, -0.025946f, -0.033941f, + 0.006151f, -0.007271f, 0.057367f, 0.024526f, -0.062802f, -0.016788f, -0.017783f, -0.032249f, -0.034279f, -0.070040f, 0.012432f, -0.024975f, -0.006545f, 0.010260f, 0.002593f, 0.014653f, -0.002755f, -0.008116f, -0.053203f, 0.006528f, -0.024179f, 0.006740f, 0.031227f, 0.006773f, 0.020940f, -0.031509f, -0.042093f, 0.008717f, 0.026103f, 0.017784f, 0.009802f, 0.016910f, 0.027130f, 0.034163f, 0.034901f, -0.030814f, -0.018693f, -0.022134f, -0.016005f, -0.025873f, 0.036808f, 0.021816f, 0.020742f, 0.005914f, 0.015854f, 0.013839f, -0.001325f, 0.019490f, -0.029702f, -0.010193f, -0.003578f, 0.002688f, -0.006462f, -0.020783f, 0.001157f, -0.003996f, 0.002690f, 0.007101f, 0.021460f, 0.001470f, 0.010009f, 0.010370f, 0.001551f, 0.010998f, 0.000289f, -0.006192f, 0.001243f, -0.015839f, -0.006636f, 0.008931f, 0.012326f, 0.004136f, 0.002185f, -0.019414f, -0.002007f, 0.001033f, -0.009595f, -0.006233f, 0.002823f, 0.006688f, -0.018241f, -0.019693f, -0.009267f, 0.007178f, 0.005696f, 0.010626f, 0.002317f, -0.006001f, 0.004355f, -0.020346f, -0.018618f, 0.076054f, 0.050246f, 0.069783f, 0.004561f, -0.013791f, + -0.047348f, -0.013943f, 0.007964f, 0.011032f, -0.011260f, -0.036586f, -0.013200f, 0.060294f, 0.024954f, -0.008303f, 0.018493f, -0.001329f, -0.022104f, -0.006437f, -0.014411f, 0.041117f, -0.003121f, 0.002440f, 0.017771f, 0.001194f, 0.020162f, -0.000182f, 0.028525f, -0.026187f, 0.032862f, 0.006673f, -0.015248f, -0.009224f, -0.016894f, 0.029658f, -0.041020f, -0.044315f, 0.028081f, 0.046395f, 0.002216f, 0.032033f, 0.044064f, -0.049549f, 0.016540f, 0.010150f, -0.002681f, -0.000432f, 0.007402f, -0.018588f, 0.034607f, -0.020959f, -0.016631f, 0.013981f, 0.001803f, -0.003732f, -0.007997f, -0.010319f, 0.005029f, -0.032728f, -0.009763f, 0.026383f, -0.032257f, -0.007429f, -0.021774f, 0.000830f, 0.065410f, -0.020524f, 0.004247f, 0.017500f, 0.000368f, -0.015041f, -0.040785f, 0.039902f, 0.018657f, -0.082230f, 0.020426f, 0.020705f, 0.015350f, -0.018434f, -0.008543f, 0.042016f, 0.001933f, 0.003102f, 0.010819f, -0.029214f, 0.001166f, 0.018599f, -0.007548f, 0.010750f, -0.002289f, -0.009492f, -0.024314f, 0.003718f, -0.003156f, 0.022585f, -0.002057f, -0.000957f, -0.016177f, 0.017893f, -0.005973f, -0.006216f, + -0.025664f, -0.012922f, 0.009086f, -0.016552f, 0.001416f, -0.008158f, 0.010332f, -0.009692f, -0.020636f, 0.010449f, -0.022233f, -0.006110f, -0.010079f, 0.001040f, 0.001405f, -0.008367f, 0.022257f, -0.002751f, 0.029995f, 0.018264f, -0.002962f, 0.003141f, 0.019211f, -0.013289f, 0.003484f, 0.002271f, 0.018442f, -0.016656f, -0.009817f, 0.000846f, -0.033964f, -0.081399f, 0.072416f, 0.043166f, 0.022960f, 0.016146f, 0.035775f, -0.082143f, 0.033728f, 0.037932f, 0.016247f, -0.052587f, 0.029263f, 0.053161f, 0.024643f, 0.058619f, 0.021386f, 0.001002f, -0.002323f, -0.001839f, -0.009981f, 0.024838f, 0.041653f, 0.039667f, 0.013871f, -0.012190f, -0.020685f, 0.004945f, -0.018832f, -0.022055f, 0.023205f, 0.015952f, 0.004422f, -0.022104f, -0.021501f, -0.004728f, -0.018692f, 0.009534f, 0.047872f, -0.008514f, -0.015473f, 0.016153f, 0.008679f, 0.014179f, 0.016721f, -0.003666f, -0.009657f, 0.038456f, 0.025450f, 0.012570f, 0.016976f, -0.003104f, -0.038217f, 0.008862f, 0.025449f, 0.003294f, -0.028444f, 0.038062f, 0.009930f, 0.052947f, 0.001969f, 0.047597f, 0.005093f, -0.015606f, -0.005065f, 0.011414f, + 0.067765f, -0.008564f, 0.024360f, 0.016695f, 0.032020f, 0.016770f, 0.000151f, -0.002060f, 0.020891f, 0.096412f, 0.004514f, 0.038679f, -0.032684f, -0.024415f, 0.012252f, 0.015158f, 0.018797f, 0.007727f, 0.003089f, -0.047387f, -0.018741f, -0.049688f, 0.002716f, -0.008536f, -0.016407f, -0.013897f, -0.005519f, -0.020965f, 0.002639f, -0.002178f, -0.022035f, 0.015757f, -0.025664f, -0.012473f, -0.023171f, -0.015851f, -0.001518f, 0.002547f, -0.018533f, -0.021519f, 0.005181f, 0.013673f, 0.015980f, -0.003255f, -0.006107f, -0.027684f, -0.036178f, 0.003614f, 0.004436f, -0.016498f, 0.032941f, 0.031865f, 0.047168f, 0.016538f, -0.010365f, 0.006441f, 0.014580f, 0.017848f, 0.021442f, 0.003160f, -0.022333f, 0.005635f, 0.028665f, 0.014672f, 0.001496f, 0.011463f, -0.053035f, 0.058165f, -0.000864f, 0.051481f, 0.001295f, 0.003504f, -0.046703f, -0.014357f, -0.020995f, 0.035714f, 0.009120f, 0.015833f, 0.009477f, -0.035880f, 0.003596f, 0.002882f, -0.031466f, -0.045109f, -0.046045f, 0.015615f, -0.017083f, 0.041992f, 0.002473f, -0.013323f, -0.010840f, 0.009053f, -0.016195f, 0.002704f, 0.012378f, -0.017677f, + 0.009994f, 0.014142f, 0.004900f, 0.004029f, 0.031840f, 0.053382f, -0.010380f, -0.000452f, 0.026917f, 0.021937f, 0.032227f, -0.023883f, -0.009254f, 0.009637f, -0.031859f, 0.003065f, 0.002880f, -0.042499f, 0.054813f, -0.002752f, 0.027724f, 0.023756f, 0.016839f, -0.032371f, 0.003188f, 0.027496f, -0.022312f, 0.049002f, 0.013633f, -0.018065f, 0.040759f, 0.030495f, 0.021521f, -0.068494f, -0.013759f, 0.013470f, -0.023168f, 0.003527f, -0.037944f, -0.009709f, -0.057592f, -0.016707f, -0.008636f, -0.016145f, -0.063828f, -0.006625f, -0.017268f, 0.096024f, -0.013631f, 0.019382f, -0.009652f, 0.015171f, -0.007836f, -0.015943f, 0.010652f, -0.013416f, -0.001771f, -0.007339f, 0.026124f, 0.009025f, 0.011648f, -0.041830f, -0.036881f, -0.028050f, -0.011261f, 0.007072f, -0.051940f, -0.008707f, -0.003885f, 0.003612f, 0.019459f, 0.014169f, -0.001222f, 0.019955f, -0.017939f, 0.000091f, 0.001466f, -0.030427f, -0.041183f, 0.007856f, -0.011770f, -0.038912f, -0.010176f, -0.018525f, 0.003043f, -0.041601f, -0.004279f, -0.018386f, 0.024776f, 0.000005f, -0.017146f, -0.006823f, 0.008046f, 0.009204f, -0.003466f, 0.018172f, + -0.018333f, -0.012145f, 0.024614f, 0.022533f, 0.040811f, -0.013944f, -0.002999f, -0.005787f, 0.010933f, 0.029041f, 0.025400f, 0.018685f, -0.015139f, 0.011337f, 0.031944f, 0.030790f, 0.013064f, -0.039193f, -0.045299f, 0.018833f, -0.006978f, 0.013371f, -0.009034f, 0.036802f, -0.028982f, -0.006714f, -0.010550f, 0.031981f, -0.025550f, 0.056744f, 0.070033f, 0.071378f, 0.003624f, -0.014309f, 0.010913f, -0.010297f, 0.016868f, -0.003990f, -0.001214f, -0.022091f, -0.058824f, -0.020239f, -0.056366f, 0.030935f, 0.029181f, -0.035162f, -0.026424f, -0.035252f, -0.016835f, -0.005889f, 0.074967f, -0.000046f, -0.039429f, -0.042464f, -0.003283f, 0.052024f, 0.024539f, -0.107126f, -0.022431f, -0.019727f, 0.013203f, 0.038949f, -0.046871f, -0.015570f, -0.028215f, 0.011095f, -0.063675f, 0.030326f, -0.011242f, -0.002396f, 0.016722f, 0.001618f, -0.031555f, 0.061134f, -0.006958f, 0.028572f, 0.065771f, 0.135328f, 0.081024f, -0.002979f, 0.045205f, 0.068530f, 0.088695f, 0.095919f, 0.027020f, 0.058369f, 0.016279f, -0.000230f, 0.035747f, -0.029680f, 0.059099f, 0.024629f, -0.026681f, -0.090152f, -0.065538f, 0.007449f, + -0.026025f, -0.019298f, -0.017119f, -0.010898f, -0.011601f, -0.037743f, -0.024682f, 0.000343f, -0.006313f, -0.003041f, -0.012182f, -0.004286f, -0.019748f, 0.022728f, -0.040237f, -0.017255f, 0.010893f, 0.006264f, 0.002993f, -0.011277f, -0.012968f, -0.008047f, 0.007429f, -0.007368f, 0.019881f, -0.025058f, -0.030669f, -0.031236f, -0.019144f, 0.021924f, 0.025246f, -0.010723f, -0.005016f, 0.008321f, -0.005437f, 0.041682f, 0.008768f, 0.002687f, 0.033754f, 0.020387f, 0.019106f, 0.047460f, 0.031434f, 0.035432f, 0.010924f, 0.016502f, 0.039622f, 0.014360f, 0.030672f, -0.029720f, 0.016102f, -0.014001f, -0.030893f, 0.034621f, -0.044637f, 0.073519f, -0.009169f, -0.014074f, 0.000944f, 0.058430f, -0.039778f, -0.007468f, -0.002124f, 0.000272f, 0.020989f, -0.015791f, 0.030454f, 0.010162f, -0.006183f, 0.006605f, 0.003169f, 0.023663f, -0.074523f, -0.023964f, -0.002625f, 0.007259f, -0.007684f, -0.054645f, 0.044010f, -0.003073f, 0.005731f, 0.015434f, -0.035589f, -0.016714f, -0.082138f, 0.021021f, -0.019488f, 0.015010f, 0.059431f, -0.017077f, 0.012222f, -0.008402f, 0.028186f, -0.049572f, -0.065657f, 0.056529f, + -0.005669f, 0.004180f, 0.009413f, 0.056839f, 0.041692f, 0.049219f, -0.001138f, -0.067693f, 0.039433f, 0.017850f, -0.016075f, -0.024478f, 0.037697f, -0.007765f, 0.047740f, 0.078556f, 0.061473f, 0.009669f, 0.005149f, 0.057710f, -0.011780f, 0.017119f, 0.047976f, -0.033696f, 0.055516f, 0.033215f, 0.019672f, -0.040297f, -0.019644f, -0.053482f, -0.001703f, 0.017106f, 0.078093f, 0.032020f, -0.072807f, -0.007666f, 0.046863f, -0.007866f, 0.022760f, 0.030496f, -0.051636f, -0.013746f, 0.025078f, 0.005045f, 0.013995f, -0.023547f, 0.016666f, 0.027308f, 0.003644f, -0.000660f, 0.041493f, 0.006833f, -0.008965f, -0.011889f, 0.013783f, -0.004793f, 0.022326f, 0.002374f, 0.016916f, 0.018038f, -0.002869f, -0.021099f, 0.040934f, -0.007078f, -0.012469f, -0.003859f, -0.027665f, -0.029155f, -0.018224f, -0.020597f, 0.013405f, 0.022918f, -0.024190f, -0.022151f, 0.005005f, 0.035039f, -0.052338f, -0.014093f, 0.020472f, -0.007605f, 0.000343f, -0.008550f, -0.005444f, -0.039164f, -0.000273f, -0.011502f, 0.010736f, 0.001446f, 0.006586f, -0.001052f, 0.003603f, -0.009411f, 0.016384f, 0.007721f, -0.004323f, -0.009224f, + 0.006949f, 0.000812f, -0.002926f, -0.102741f, 0.023543f, -0.017005f, -0.004027f, 0.080231f, 0.034495f, -0.025157f, -0.019473f, -0.000305f, -0.051889f, -0.063582f, 0.005387f, 0.000550f, -0.035764f, 0.037960f, 0.004615f, -0.036702f, 0.023208f, 0.069006f, -0.009231f, -0.039771f, 0.024988f, -0.023426f, -0.025502f, 0.012868f, 0.056072f, -0.018264f, 0.008229f, 0.015354f, -0.017266f, -0.041748f, -0.027358f, 0.055331f, 0.019499f, -0.054595f, 0.046707f, 0.018285f, -0.037374f, -0.019576f, 0.076903f, -0.025036f, -0.058974f, -0.030349f, 0.102207f, -0.100910f, -0.046729f, 0.059820f, -0.027065f, -0.032480f, -0.096098f, 0.074945f, -0.061523f, 0.021992f, 0.003222f, -0.011591f, -0.108523f, -0.032135f, 0.092936f, 0.058535f, -0.073412f, -0.020166f, -0.031776f, -0.015105f, 0.015086f, 0.020120f, 0.024218f, -0.128300f, 0.070175f, 0.053719f, 0.056477f, 0.000810f, 0.029581f, -0.062818f, -0.055751f, 0.109683f, 0.045069f, 0.012085f, 0.044232f, -0.059155f, 0.011932f, -0.026219f, 0.028275f, -0.016039f, 0.077056f, -0.031484f, -0.026730f, 0.010594f, 0.009344f, -0.029227f, 0.017589f, 0.008371f, 0.006609f, -0.005594f, + 0.003955f, 0.006094f, 0.006325f, -0.007323f, -0.004112f, 0.016019f, 0.000986f, -0.008672f, 0.033759f, 0.009811f, -0.029901f, 0.003174f, 0.028968f, 0.007405f, -0.028437f, 0.038092f, 0.068705f, -0.033887f, -0.039294f, -0.010827f, -0.008814f, 0.023132f, 0.050354f, 0.015072f, -0.046480f, -0.015677f, -0.006707f, 0.006754f, 0.014218f, -0.008022f, 0.020637f, -0.015057f, -0.001716f, 0.011827f, -0.019864f, -0.084890f, 0.014546f, 0.105676f, 0.032932f, 0.011211f, 0.002749f, 0.007800f, 0.045235f, 0.061977f, -0.014360f, 0.011451f, 0.015920f, -0.010857f, 0.037327f, -0.019921f, -0.005457f, -0.015118f, 0.028642f, 0.021213f, -0.011913f, 0.019488f, -0.028381f, -0.023178f, 0.028601f, -0.018662f, 0.031445f, -0.021243f, -0.009507f, -0.000799f, 0.017120f, -0.001264f, 0.012700f, 0.005019f, 0.032029f, -0.023214f, -0.004758f, 0.000376f, -0.012957f, 0.030882f, 0.026804f, -0.022464f, -0.008056f, -0.013881f, 0.006992f, -0.028927f, 0.015350f, 0.008667f, 0.014079f, -0.011679f, -0.008863f, 0.035175f, -0.042657f, -0.007553f, 0.017789f, -0.011735f, -0.007878f, 0.018302f, -0.052388f, 0.012410f, -0.019055f, 0.002921f, + -0.018661f, 0.044973f, -0.014851f, -0.019718f, 0.018407f, -0.010465f, -0.029755f, 0.057252f, -0.001729f, 0.005683f, -0.012981f, -0.022329f, -0.026214f, 0.028786f, -0.032702f, -0.015901f, 0.033003f, -0.045432f, -0.019839f, 0.005639f, -0.004377f, 0.005358f, -0.000844f, 0.006263f, 0.020012f, -0.007430f, 0.007766f, -0.009413f, 0.021010f, 0.011396f, -0.001024f, 0.001610f, 0.012754f, -0.011493f, 0.009238f, 0.001348f, 0.010175f, -0.004829f, 0.015883f, -0.008327f, 0.004189f, -0.014095f, -0.012133f, -0.019190f, 0.003440f, 0.000953f, 0.006259f, -0.009482f, 0.021176f, -0.007184f, -0.003759f, 0.018098f, 0.015996f, 0.008477f, -0.007580f, -0.012397f, 0.010892f, 0.014415f, 0.009036f, 0.006150f, -0.000283f, 0.013025f, 0.014187f, 0.006181f, 0.012041f, 0.001471f, -0.009484f, -0.000560f, 0.027806f, -0.078766f, -0.222881f, -0.183096f, 0.097003f, 0.027909f, 0.221817f, 0.396187f, 0.058970f, 0.124989f, 0.045574f, -0.315787f, -0.099749f, -0.214194f, -0.258827f, 0.007385f, 0.041511f, -0.107928f, 0.156700f, 0.204987f, 0.115160f, 0.326866f, 0.188615f, -0.041956f, -0.077401f, -0.151555f, -0.294972f, -0.232998f, + -0.068531f, -0.207767f, -0.028793f, 0.179395f, 0.030120f, 0.041805f, 0.271284f, 0.138361f, 0.085733f, 0.282713f, 0.043734f, -0.077985f, 0.110693f, -0.147995f, -0.293031f, -0.122669f, -0.247196f, -0.309583f, -0.004330f, -0.064631f, -0.081297f, 0.206225f, 0.227448f, 0.144625f, 0.343071f, 0.276658f, 0.130714f, 0.118034f, 0.068547f, -0.229108f, -0.210548f, -0.266904f, -0.352188f, -0.282568f, -0.119014f, -0.081923f, 0.007449f, 0.202574f, 0.246576f, 0.257858f, 0.247433f, 0.229054f, 0.049088f, 0.004218f, -0.038686f, -0.174673f, -0.191117f, -0.110626f, -0.200408f, -0.084475f, 0.017728f, -0.043834f, 0.100905f, 0.181115f, 0.055623f, 0.076477f, 0.034271f, -0.049534f, -0.030634f, -0.075793f, -0.098298f, -0.011922f, 0.027937f, 0.000685f, 0.081492f, 0.074912f, 0.008745f, 0.072103f, 0.000250f, -0.091495f, 0.080882f, 0.024171f, -0.081046f, 0.057000f, -0.059974f, -0.122271f, 0.056013f, -0.087067f, -0.215049f, 0.003226f, -0.094546f, -0.062868f, 0.213583f, 0.096355f, 0.101666f, 0.305073f, 0.202613f, 0.112099f, 0.133470f, -0.033472f, -0.192769f, -0.245569f, -0.332876f, -0.368773f, -0.233630f, -0.149725f, + -0.025589f, 0.139843f, 0.312398f, 0.344267f, 0.319715f, 0.332304f, 0.178061f, 0.007648f, -0.084785f, -0.219722f, -0.280258f, -0.182138f, -0.202495f, -0.162070f, -0.032505f, 0.005109f, 0.021393f, 0.078365f, 0.067351f, 0.057841f, 0.104741f, 0.103386f, 0.088057f, 0.102795f, 0.071908f, 0.022892f, -0.008239f, -0.046474f, -0.102257f, -0.113680f, -0.095060f, -0.101783f, -0.074604f, -0.040918f, -0.005836f, 0.030108f, 0.076044f, 0.082254f, 0.076179f, 0.069149f, 0.048776f, 0.017886f, 0.001523f, -0.006888f, -0.029151f, -0.030213f, -0.018243f, -0.022897f, -0.026586f, -0.018826f, -0.029239f, -0.026496f, 0.000461f, 0.002563f, 0.000206f, 0.009942f, 0.004742f, 0.005512f, 0.022852f, 0.023169f, 0.025318f, 0.029101f, 0.015654f, 0.004398f, 0.000986f, -0.008758f, -0.018285f, -0.023681f, -0.026647f, -0.027485f, -0.019415f, -0.008994f, -0.000583f, 0.007448f, 0.015774f, 0.016516f, 0.017612f, 0.017277f, 0.009381f, 0.000331f, -0.001767f, -0.007226f, -0.008463f, -0.006208f, -0.001942f, 0.001610f, 0.004828f, 0.005114f, 0.003933f, 0.000857f, -0.004074f, -0.007610f, -0.008363f, -0.009062f, -0.008766f, -0.006687f, + -0.002614f, 0.003339f, 0.007396f, 0.008558f, 0.010246f, 0.010955f, 0.008545f, 0.005875f, 0.002737f, -0.001285f, -0.003912f, -0.005533f, -0.006673f, -0.006140f, -0.004502f, -0.003017f, -0.001164f, 0.000721f, 0.001849f, 0.002426f}, + {-0.019615f, -0.023891f, 0.012167f, -0.004311f, 0.010651f, -0.005174f, -0.005291f, -0.010646f, 0.002607f, 0.002350f, -0.000400f, 0.000250f, -0.001122f, -0.008126f, -0.000873f, -0.004615f, -0.005314f, -0.005037f, -0.000116f, 0.000691f, -0.000329f, -0.000849f, 0.004148f, -0.001056f, -0.012328f, 0.007794f, 0.003918f, -0.004155f, 0.001320f, -0.000048f, 0.000213f, 0.001815f, 0.008058f, -0.004374f, 0.000552f, -0.013992f, 0.007089f, 0.001454f, 0.003245f, 0.004931f, 0.007978f, -0.004347f, -0.003278f, -0.001529f, -0.006992f, 0.000635f, -0.000984f, 0.006180f, -0.003207f, -0.000352f, -0.003342f, -0.003855f, 0.007525f, -0.005545f, -0.002632f, 0.000764f, -0.005011f, 0.004317f, -0.000108f, -0.002328f, 0.004686f, 0.008509f, 0.000612f, -0.000265f, -0.001103f, 0.007282f, -0.007093f, 0.000125f, -0.001038f, 0.003839f, -0.001683f, -0.003228f, 0.007938f, -0.000080f, 0.001742f, -0.002123f, 0.001715f, 0.004281f, -0.003300f, -0.004678f, 0.000326f, 0.004181f, 0.007012f, -0.003063f, -0.002026f, 0.001760f, 0.000462f, 0.001113f, -0.003090f, -0.000971f, 0.001983f, -0.000375f, 0.001420f, -0.002460f, -0.000693f, -0.001499f, + -0.002078f, -0.001519f, -0.001368f, 0.001151f, 0.000285f, -0.001050f, 0.001196f, 0.000808f, -0.000903f, -0.000262f, -0.000154f, -0.001316f, -0.002355f, -0.000643f, 0.000093f, 0.000549f, 0.001419f, -0.000140f, 0.000951f, 0.000539f, -0.001060f, 0.001017f, -0.028553f, 0.004886f, 0.003403f, 0.010046f, -0.003902f, 0.003065f, 0.011671f, -0.004481f, 0.003207f, -0.007036f, -0.010348f, 0.003826f, -0.007038f, -0.008025f, -0.008064f, 0.002467f, 0.003103f, -0.013758f, 0.008126f, 0.005409f, -0.002329f, -0.005015f, 0.003243f, -0.001219f, -0.003125f, 0.001035f, 0.004587f, 0.003419f, 0.007316f, 0.001448f, -0.002210f, 0.007556f, -0.003769f, 0.016436f, 0.003704f, 0.010143f, 0.003905f, 0.008905f, 0.003957f, 0.006152f, 0.003316f, 0.000775f, 0.000349f, 0.012453f, 0.002113f, -0.001944f, 0.000829f, 0.006600f, 0.004859f, 0.000763f, -0.000549f, -0.002500f, 0.001388f, 0.015188f, 0.004346f, 0.007049f, -0.007310f, -0.003710f, -0.007710f, -0.004822f, -0.007485f, 0.005680f, 0.003554f, -0.004728f, -0.003407f, 0.003429f, -0.003567f, 0.003821f, -0.001679f, -0.001075f, -0.005179f, -0.008672f, 0.003759f, -0.014122f, + -0.002005f, -0.002967f, -0.003591f, 0.000833f, -0.003313f, 0.000728f, 0.005340f, 0.002651f, -0.003642f, 0.000726f, -0.002890f, -0.006111f, -0.001004f, 0.003030f, -0.000308f, -0.004701f, 0.001730f, 0.000944f, 0.001806f, 0.003337f, 0.000122f, 0.000530f, -0.002250f, -0.001286f, -0.000337f, 0.000036f, 0.001169f, -0.002506f, -0.002214f, 0.000241f, 0.015928f, 0.022006f, -0.006950f, 0.005801f, -0.011170f, -0.000742f, 0.000499f, 0.028162f, -0.003055f, -0.007639f, -0.012364f, 0.000130f, 0.007968f, 0.012871f, -0.003095f, -0.017249f, -0.005076f, -0.006672f, -0.004827f, 0.005657f, -0.001412f, 0.010724f, 0.001055f, -0.006305f, -0.013985f, 0.003996f, -0.001454f, 0.003061f, -0.001826f, 0.001410f, 0.006618f, 0.002334f, -0.017555f, 0.001943f, 0.011034f, 0.005354f, 0.001218f, 0.002528f, -0.002954f, 0.007604f, -0.010445f, -0.001155f, 0.008327f, -0.006005f, -0.000158f, 0.013635f, -0.006528f, -0.000803f, -0.004832f, 0.008330f, -0.009080f, -0.006772f, 0.003968f, -0.009403f, -0.004721f, 0.011885f, 0.006917f, -0.010910f, -0.004128f, -0.001769f, -0.002831f, -0.005057f, 0.003704f, -0.004363f, 0.004272f, -0.000286f, + 0.000499f, 0.001787f, 0.008925f, -0.001188f, 0.012365f, 0.006320f, -0.009780f, -0.004587f, -0.004856f, 0.007369f, 0.002081f, -0.000662f, -0.004026f, 0.009920f, 0.003720f, -0.000343f, -0.000379f, -0.002674f, -0.002474f, 0.002835f, 0.000999f, 0.003161f, 0.007699f, 0.002700f, -0.000586f, 0.000359f, 0.000473f, 0.002394f, -0.000684f, 0.000815f, 0.003596f, 0.000661f, 0.004489f, -0.000001f, 0.001485f, 0.002224f, 0.002689f, 0.000867f, 0.001644f, 0.001912f, 0.001541f, 0.002517f, -0.000980f, 0.000667f, 0.001671f, 0.002580f, -0.000397f, -0.002239f, -0.002612f, 0.000446f, 0.052911f, -0.019509f, 0.010762f, -0.014894f, -0.001516f, 0.000553f, -0.001050f, -0.007885f, 0.004370f, 0.006109f, 0.001520f, -0.005731f, -0.012209f, -0.000438f, 0.007529f, 0.005338f, -0.005342f, -0.009206f, -0.000697f, 0.008276f, 0.015132f, -0.008124f, -0.001046f, -0.006131f, -0.013154f, 0.001489f, -0.006592f, 0.004018f, -0.004866f, 0.010280f, -0.017977f, 0.012181f, -0.000746f, -0.010728f, 0.002669f, 0.004524f, -0.001216f, -0.005681f, 0.000408f, 0.014105f, -0.000475f, 0.002323f, -0.001936f, 0.005398f, 0.002547f, -0.003332f, + -0.005237f, -0.011598f, 0.007579f, -0.002432f, -0.003351f, 0.004453f, 0.000141f, -0.019497f, 0.015040f, -0.020986f, -0.012043f, -0.014867f, 0.003267f, -0.001754f, 0.008971f, -0.004879f, 0.004803f, -0.008959f, 0.004369f, -0.002356f, -0.003590f, -0.009885f, 0.006112f, 0.006928f, 0.011946f, -0.002908f, -0.001067f, 0.003198f, -0.003539f, -0.002154f, 0.002358f, 0.006843f, -0.009016f, 0.004469f, 0.006601f, 0.007229f, -0.011442f, -0.009439f, 0.004021f, -0.005913f, 0.003079f, -0.000130f, -0.000614f, 0.000980f, 0.001526f, -0.000524f, 0.002797f, -0.003390f, 0.001711f, -0.001079f, 0.006814f, 0.000362f, 0.001731f, 0.001476f, 0.000513f, -0.002694f, -0.000147f, 0.000616f, -0.000727f, -0.041714f, 0.004256f, 0.000444f, -0.003540f, -0.006432f, 0.007302f, -0.005656f, 0.004860f, -0.001495f, -0.000069f, 0.006748f, 0.008784f, -0.005396f, 0.006471f, -0.001881f, -0.003562f, -0.011697f, -0.000569f, -0.015806f, -0.011604f, 0.013925f, 0.004972f, -0.005382f, -0.001964f, -0.001624f, 0.009666f, 0.005107f, -0.004961f, 0.008817f, 0.005867f, 0.003465f, 0.003055f, 0.003761f, 0.006716f, 0.005787f, 0.005707f, 0.015576f, + 0.014014f, 0.006066f, 0.001562f, -0.009654f, 0.010778f, -0.014351f, 0.002852f, -0.003983f, 0.011675f, -0.008770f, -0.011425f, 0.019682f, -0.004566f, -0.010508f, -0.009380f, 0.014657f, 0.008997f, 0.000565f, 0.007537f, 0.010649f, 0.004887f, 0.017205f, -0.001010f, -0.002681f, 0.009761f, 0.005990f, 0.000587f, 0.000418f, -0.008922f, 0.005392f, 0.005588f, 0.013899f, 0.005658f, 0.008668f, -0.005314f, -0.007090f, -0.015122f, -0.003443f, -0.008173f, -0.006475f, -0.006880f, 0.007683f, -0.000257f, 0.000626f, -0.004419f, -0.005091f, -0.001410f, -0.004474f, 0.001414f, -0.003002f, -0.005003f, 0.002096f, -0.000479f, 0.000226f, -0.004681f, -0.000646f, 0.000210f, -0.005874f, -0.000795f, -0.001369f, 0.000411f, -0.002617f, -0.003055f, -0.001864f, -0.001122f, 0.000147f, -0.000969f, 0.000978f, -0.001365f, 0.001695f, 0.000417f, 0.001504f, 0.003265f, -0.000702f, 0.003448f, 0.000747f, 0.002273f, -0.001526f, 0.000724f, -0.002916f, -0.001079f, -0.000452f, -0.003543f, -0.001056f, -0.001728f, -0.055382f, 0.015137f, -0.011652f, -0.017333f, -0.017136f, 0.010985f, -0.012663f, 0.009729f, -0.015963f, 0.009127f, 0.007827f, + 0.004895f, -0.016816f, 0.011885f, 0.000010f, 0.007280f, -0.013895f, 0.008076f, 0.016912f, 0.012977f, 0.000679f, -0.005765f, 0.002565f, -0.003392f, -0.017782f, -0.003432f, -0.008433f, 0.004333f, -0.011104f, 0.009937f, 0.009753f, -0.003554f, -0.000202f, 0.013592f, -0.002717f, 0.009290f, -0.007087f, -0.011449f, 0.006294f, 0.000010f, 0.006505f, 0.016670f, 0.010233f, -0.000402f, -0.028477f, -0.013545f, -0.003768f, 0.004195f, -0.004198f, 0.016015f, -0.024712f, 0.008103f, 0.003600f, -0.000040f, 0.008032f, -0.003018f, 0.012324f, -0.025922f, -0.011982f, 0.010337f, -0.026049f, -0.004658f, 0.012473f, 0.004601f, -0.005587f, -0.017308f, 0.006721f, 0.011516f, 0.008511f, -0.002918f, -0.018166f, -0.001375f, 0.000354f, -0.001876f, -0.000767f, -0.008791f, 0.004294f, -0.014189f, 0.009069f, 0.001455f, -0.008328f, 0.001898f, -0.010061f, 0.000989f, -0.012076f, -0.003233f, 0.004523f, 0.004739f, 0.000615f, -0.000976f, -0.004022f, -0.002989f, 0.001073f, -0.007017f, 0.006030f, 0.000652f, -0.003281f, 0.000228f, -0.006021f, -0.004713f, 0.001604f, -0.002361f, 0.003594f, -0.003080f, -0.001619f, -0.001949f, -0.002151f, + -0.004016f, -0.000499f, -0.002152f, -0.000724f, 0.001381f, -0.000771f, -0.001701f, 0.001763f, -0.000566f, -0.001416f, -0.001467f, -0.003526f, -0.002422f, 0.000711f, 0.002175f, -0.000355f, -0.026151f, 0.002817f, 0.004350f, 0.020478f, -0.019354f, 0.022363f, 0.006328f, -0.001804f, -0.005268f, -0.002411f, 0.002059f, -0.016351f, -0.003149f, 0.005244f, -0.005392f, -0.009594f, -0.002614f, 0.015474f, -0.016002f, -0.003471f, 0.015985f, 0.000079f, -0.006372f, 0.005654f, -0.007813f, 0.011790f, 0.005151f, -0.000141f, 0.005863f, -0.006828f, -0.010796f, -0.000759f, 0.000791f, 0.008826f, -0.018911f, -0.010168f, -0.008366f, -0.005820f, -0.005629f, -0.005709f, 0.002796f, 0.000939f, 0.001533f, -0.014074f, -0.014506f, -0.011473f, 0.000379f, -0.018083f, -0.010036f, 0.010853f, -0.007371f, 0.002409f, 0.001113f, -0.000327f, 0.004481f, 0.006444f, 0.006082f, 0.007293f, 0.010634f, -0.001874f, 0.011507f, -0.000726f, 0.005796f, -0.000952f, -0.007465f, -0.000426f, -0.012012f, 0.007407f, -0.014052f, 0.013088f, -0.015676f, -0.000225f, -0.016169f, 0.001543f, -0.016248f, -0.015563f, 0.007318f, 0.021462f, 0.006418f, -0.013818f, + 0.009810f, 0.000014f, -0.006172f, -0.003636f, -0.006466f, 0.008546f, 0.007292f, 0.010507f, 0.001828f, 0.008196f, -0.006973f, -0.000727f, 0.007952f, 0.000960f, 0.002411f, 0.001598f, -0.003965f, 0.004822f, -0.000503f, 0.001807f, 0.007036f, 0.002101f, -0.001840f, -0.004228f, -0.002024f, 0.002949f, 0.002829f, 0.002335f, 0.000748f, -0.003291f, 0.000181f, -0.000687f, -0.007520f, 0.007247f, 0.000758f, 0.002661f, 0.000261f, -0.001752f, -0.003604f, 0.002560f, -0.003674f, -0.001704f, 0.072327f, 0.000499f, -0.021341f, 0.002933f, -0.011761f, 0.028616f, -0.005126f, 0.007789f, 0.001737f, 0.001039f, -0.025858f, -0.013419f, 0.013738f, 0.012052f, -0.020461f, -0.003887f, -0.001002f, 0.017504f, 0.008390f, 0.006440f, 0.017119f, 0.002399f, 0.000751f, 0.014849f, -0.005717f, -0.023509f, 0.003023f, 0.017353f, 0.010078f, -0.007057f, -0.000053f, 0.011996f, 0.007121f, 0.003026f, -0.001070f, -0.013341f, 0.005910f, -0.014479f, 0.000992f, -0.026951f, 0.006559f, 0.007847f, -0.002572f, -0.012588f, 0.016470f, 0.008538f, -0.003923f, 0.012793f, 0.005633f, -0.011417f, 0.019852f, 0.001846f, -0.007617f, 0.004369f, + 0.020363f, 0.002900f, -0.000968f, -0.017685f, -0.010553f, 0.002098f, 0.006614f, 0.023365f, -0.008251f, -0.009725f, 0.001616f, 0.012605f, -0.008798f, -0.010604f, -0.001368f, 0.016897f, 0.011887f, -0.004620f, -0.013671f, -0.001018f, 0.014596f, -0.006312f, 0.030795f, 0.006487f, 0.004217f, -0.016314f, 0.013120f, 0.000503f, -0.003912f, -0.008444f, 0.000342f, -0.004855f, 0.000376f, 0.019012f, 0.008349f, 0.006730f, 0.003226f, 0.001929f, -0.000146f, -0.001560f, 0.001321f, 0.003586f, 0.006501f, 0.000779f, 0.000782f, 0.002266f, -0.005769f, -0.000181f, 0.001815f, -0.001486f, 0.005587f, -0.004595f, -0.000607f, -0.002399f, 0.001900f, 0.009975f, 0.003020f, -0.003495f, -0.001260f, 0.002160f, 0.000374f, 0.003143f, -0.001164f, -0.004709f, 0.003590f, 0.003389f, -0.003974f, -0.001218f, 0.008542f, 0.002816f, 0.004139f, 0.016500f, 0.008810f, -0.025746f, -0.002590f, -0.012969f, 0.026060f, -0.009648f, 0.012186f, 0.002419f, 0.016341f, 0.006521f, 0.002481f, -0.001230f, 0.006674f, -0.007320f, -0.010974f, -0.030461f, -0.022566f, 0.007593f, 0.020185f, 0.027133f, -0.009891f, -0.013079f, -0.011565f, 0.006150f, + -0.006321f, -0.001254f, -0.001052f, 0.003766f, 0.004152f, 0.018169f, -0.009576f, 0.001828f, 0.004476f, 0.008947f, -0.008695f, -0.006337f, -0.014370f, -0.009614f, -0.010015f, -0.016991f, -0.043469f, -0.000357f, -0.005811f, -0.018537f, 0.004207f, -0.001953f, -0.023578f, 0.008083f, -0.019996f, 0.005293f, -0.002428f, -0.001472f, 0.010146f, 0.013317f, -0.000383f, -0.019330f, 0.005735f, -0.012064f, -0.013523f, 0.018962f, 0.016944f, 0.019103f, -0.006190f, 0.003258f, 0.002489f, -0.009453f, 0.001472f, -0.004435f, 0.029595f, -0.004687f, -0.003083f, -0.002725f, -0.000249f, -0.017872f, -0.022436f, 0.005545f, -0.001681f, -0.001441f, 0.005013f, 0.032462f, -0.004033f, -0.014871f, -0.006426f, 0.017158f, -0.002525f, -0.005250f, -0.004932f, -0.000101f, -0.013796f, 0.003571f, -0.002707f, 0.002821f, -0.007009f, 0.000563f, -0.008802f, -0.000477f, -0.000635f, 0.003797f, -0.003746f, -0.001525f, -0.005421f, 0.007479f, 0.000366f, -0.005013f, 0.001083f, 0.002665f, -0.005758f, 0.001729f, 0.002128f, 0.009098f, -0.001939f, 0.002326f, 0.006130f, 0.004146f, -0.003339f, 0.004031f, -0.006824f, -0.010653f, 0.001211f, 0.001342f, + -0.004265f, -0.009904f, -0.002222f, -0.002215f, 0.008911f, 0.003657f, 0.005931f, -0.000737f, 0.007432f, 0.008454f, -0.028427f, 0.010528f, 0.003493f, 0.030065f, -0.020196f, -0.011434f, -0.006692f, 0.016061f, -0.015292f, -0.014700f, 0.013317f, 0.008964f, -0.015467f, -0.015610f, -0.015273f, -0.034221f, 0.022503f, 0.021116f, 0.022405f, -0.009620f, 0.007106f, 0.022220f, -0.032148f, 0.000060f, 0.021158f, 0.019601f, 0.008922f, -0.000035f, -0.010266f, 0.002168f, -0.004924f, -0.027827f, 0.003570f, 0.007643f, 0.004129f, 0.018480f, -0.016233f, 0.001767f, -0.030375f, -0.003848f, 0.006058f, -0.016701f, 0.006510f, 0.005145f, 0.013655f, 0.016643f, 0.023189f, -0.004724f, -0.009035f, -0.027925f, -0.019887f, 0.008625f, 0.041091f, -0.012728f, -0.001654f, -0.018910f, -0.009968f, -0.015003f, 0.008896f, 0.009095f, -0.003101f, 0.001347f, -0.029979f, -0.003960f, 0.020384f, -0.016227f, -0.014010f, 0.012061f, -0.005364f, 0.017646f, 0.004422f, -0.012967f, 0.002148f, -0.019591f, -0.005588f, -0.005176f, 0.037846f, -0.003786f, -0.011009f, 0.008272f, 0.007770f, -0.003326f, -0.006373f, -0.001938f, -0.005112f, -0.007034f, + -0.006487f, -0.005015f, 0.002710f, 0.002925f, 0.006148f, -0.001586f, -0.000040f, -0.003658f, 0.003747f, 0.000940f, -0.009643f, 0.002577f, -0.000033f, -0.001071f, 0.003560f, -0.000239f, -0.005242f, -0.005263f, -0.012478f, 0.004153f, -0.003891f, 0.003673f, 0.004839f, -0.005922f, 0.002745f, 0.001679f, -0.001204f, 0.004722f, 0.000071f, 0.013549f, 0.001957f, -0.002499f, 0.000375f, -0.003984f, -0.000660f, 0.002328f, 0.000435f, -0.001223f, 0.001155f, -0.005349f, 0.004297f, -0.017469f, 0.041130f, -0.019949f, -0.010163f, -0.000603f, -0.001134f, -0.028828f, 0.002090f, -0.021171f, 0.015680f, -0.039980f, -0.005635f, -0.012632f, 0.013948f, -0.013607f, -0.013685f, -0.033790f, 0.023149f, -0.013760f, 0.009651f, -0.010716f, 0.007089f, 0.018338f, -0.012919f, -0.022074f, -0.007254f, 0.015494f, 0.031912f, 0.010410f, 0.013505f, 0.001802f, -0.031647f, -0.016846f, -0.016943f, -0.008608f, 0.005831f, 0.029151f, 0.012719f, 0.017076f, 0.016052f, -0.004188f, -0.006475f, -0.009493f, -0.026398f, 0.001682f, -0.018340f, 0.029099f, -0.012931f, 0.020114f, 0.004532f, -0.010173f, 0.006942f, -0.006696f, -0.008761f, -0.015493f, + 0.023999f, 0.006441f, 0.040354f, 0.009001f, -0.042834f, -0.010527f, 0.014121f, 0.011445f, 0.006607f, -0.002214f, 0.004127f, 0.045352f, 0.022878f, -0.007409f, 0.005166f, -0.011933f, 0.033018f, -0.001035f, -0.000968f, 0.012947f, -0.028491f, -0.012220f, -0.009476f, -0.030602f, -0.036180f, 0.007456f, 0.013351f, -0.003202f, -0.017662f, -0.004497f, -0.005399f, -0.013918f, 0.000549f, -0.002676f, -0.010854f, 0.011330f, 0.017399f, -0.003543f, -0.002182f, -0.002374f, -0.006370f, 0.005096f, 0.001480f, -0.001746f, -0.003113f, -0.002774f, -0.001681f, 0.005820f, -0.002955f, -0.007845f, -0.001624f, -0.000199f, 0.002917f, 0.001793f, -0.004568f, 0.012248f, -0.003615f, 0.007512f, -0.001077f, 0.006302f, 0.003579f, -0.001769f, -0.007850f, -0.007698f, 0.003069f, -0.001966f, -0.012036f, -0.004383f, -0.002678f, 0.004735f, 0.001533f, -0.000756f, 0.003854f, 0.005860f, 0.002320f, -0.003227f, -0.004705f, -0.024941f, 0.014911f, 0.033325f, -0.003281f, -0.001458f, -0.000773f, 0.030968f, 0.009597f, 0.007408f, 0.005294f, 0.003640f, 0.005271f, -0.012234f, 0.002274f, -0.038419f, 0.005509f, -0.018532f, 0.016037f, 0.039228f, + -0.005104f, 0.002823f, -0.030980f, 0.041351f, 0.020073f, 0.017544f, -0.005157f, -0.022804f, 0.002738f, -0.007812f, 0.021001f, 0.015015f, -0.018818f, 0.000954f, 0.011081f, 0.007780f, -0.014565f, -0.012988f, 0.060642f, -0.014122f, -0.010570f, 0.012723f, -0.015438f, -0.011322f, 0.019286f, 0.018825f, 0.000750f, 0.007201f, 0.006871f, -0.023542f, -0.011672f, -0.001075f, 0.008002f, 0.020473f, 0.005085f, 0.004774f, -0.026506f, -0.002586f, 0.007830f, -0.036271f, 0.007942f, -0.010153f, -0.003646f, -0.006764f, 0.010653f, -0.010857f, -0.019634f, -0.021096f, -0.033226f, 0.004103f, -0.013459f, -0.006593f, 0.021302f, -0.007320f, 0.006922f, -0.037603f, -0.000055f, 0.034427f, 0.008094f, -0.017553f, -0.010360f, 0.020863f, 0.010774f, -0.023127f, 0.012934f, -0.016785f, -0.012820f, -0.005613f, -0.003198f, 0.007702f, -0.002201f, 0.001217f, -0.003532f, -0.004731f, 0.002810f, 0.004033f, -0.005820f, 0.004826f, 0.015284f, 0.002205f, -0.002047f, 0.006362f, 0.009676f, -0.004273f, 0.006599f, -0.004474f, -0.005877f, 0.001478f, 0.004407f, 0.012475f, 0.003392f, -0.001440f, 0.004663f, -0.002139f, 0.006594f, -0.003910f, + 0.006068f, -0.004803f, 0.002057f, 0.005059f, 0.001602f, -0.009005f, -0.004929f, 0.015833f, -0.006752f, -0.013121f, 0.006411f, 0.003096f, 0.004799f, -0.003667f, 0.020669f, 0.005722f, -0.004708f, -0.002686f, 0.005227f, -0.002322f, -0.019136f, -0.019215f, 0.045801f, -0.027359f, 0.007179f, -0.017478f, 0.053991f, 0.011495f, 0.010015f, -0.017219f, -0.020369f, 0.001994f, 0.015454f, -0.016516f, -0.026336f, -0.015652f, -0.038314f, -0.014922f, -0.022478f, -0.000018f, -0.051507f, 0.003632f, 0.027969f, 0.017215f, 0.022868f, -0.015913f, 0.005997f, 0.024799f, -0.002827f, 0.017986f, 0.006728f, 0.028020f, -0.014004f, 0.023370f, 0.018621f, 0.013293f, 0.030398f, -0.016986f, 0.018127f, -0.009278f, -0.010745f, -0.007155f, 0.006758f, -0.058844f, -0.018772f, -0.036575f, 0.042392f, -0.026681f, -0.030076f, -0.006444f, 0.023942f, 0.000668f, -0.010720f, 0.033304f, -0.011858f, -0.010564f, -0.024127f, -0.059531f, 0.002935f, 0.005525f, 0.024855f, -0.024970f, 0.000119f, -0.015231f, -0.020034f, 0.031819f, -0.006384f, 0.015929f, -0.034576f, -0.033726f, -0.020981f, 0.026511f, -0.002694f, -0.016840f, -0.017801f, -0.000746f, + -0.029325f, -0.020087f, 0.002889f, -0.012359f, -0.021866f, 0.032248f, -0.044296f, -0.042293f, 0.011075f, 0.000121f, 0.018686f, 0.002079f, -0.002015f, -0.013694f, -0.012012f, 0.001908f, -0.020942f, -0.008526f, 0.017872f, 0.002289f, 0.003072f, -0.010452f, 0.010581f, 0.003828f, -0.011444f, 0.005260f, -0.008486f, -0.001849f, -0.008706f, 0.007454f, -0.011587f, -0.003032f, 0.007876f, 0.015225f, 0.001702f, 0.000485f, -0.016746f, -0.005217f, -0.001171f, 0.002266f, -0.002501f, 0.014059f, -0.000633f, -0.005638f, 0.009063f, -0.010812f, -0.009794f, 0.005785f, 0.012951f, -0.003889f, -0.009291f, -0.012781f, 0.009942f, 0.007796f, 0.016050f, -0.021998f, -0.000018f, 0.029800f, 0.004034f, -0.008849f, 0.015450f, -0.023986f, 0.048133f, 0.030242f, -0.000144f, -0.021836f, -0.024680f, 0.010466f, -0.006107f, -0.002141f, -0.001162f, 0.043879f, -0.021342f, 0.000909f, -0.014799f, 0.016208f, -0.027042f, -0.024845f, -0.048915f, 0.011464f, -0.019781f, -0.027506f, -0.003199f, -0.046586f, -0.022756f, 0.013254f, 0.010126f, -0.006326f, 0.024478f, 0.002341f, 0.029636f, -0.012932f, -0.040399f, -0.006100f, -0.029543f, -0.005605f, + -0.008735f, -0.038858f, 0.005292f, 0.031769f, -0.089077f, 0.011367f, 0.000433f, 0.022201f, -0.004216f, -0.027737f, -0.052761f, 0.021174f, -0.006278f, 0.019790f, 0.012052f, -0.006408f, 0.031156f, -0.038414f, 0.054162f, -0.013481f, 0.030327f, 0.062959f, 0.025428f, 0.044808f, 0.017859f, 0.011787f, -0.005848f, 0.023418f, -0.008429f, -0.024434f, -0.032705f, -0.021259f, -0.000832f, 0.018592f, -0.002757f, -0.014372f, -0.020181f, -0.018288f, 0.025207f, -0.011073f, -0.008682f, 0.022364f, 0.004373f, 0.016848f, -0.001428f, -0.002417f, -0.006471f, 0.003979f, 0.008781f, -0.011405f, -0.001523f, -0.027935f, -0.019855f, 0.013759f, -0.006467f, -0.000690f, -0.003725f, -0.000513f, -0.010312f, -0.016717f, 0.012496f, -0.010057f, 0.016134f, -0.016082f, -0.007027f, -0.001775f, -0.010900f, -0.005664f, 0.008330f, 0.003307f, 0.019509f, -0.004793f, -0.011001f, 0.007223f, -0.022406f, 0.000389f, 0.003202f, -0.003538f, 0.001911f, -0.002533f, 0.011664f, 0.016192f, 0.003193f, -0.000569f, -0.007372f, -0.013527f, -0.006111f, 0.000789f, 0.026956f, 0.013289f, -0.012909f, 0.075165f, 0.061233f, 0.055161f, -0.012695f, 0.000027f, + -0.047030f, 0.034957f, 0.043410f, 0.014681f, 0.041933f, 0.016658f, 0.014195f, 0.014627f, -0.007515f, 0.005684f, 0.011542f, -0.010850f, -0.045299f, -0.027588f, -0.001755f, -0.030179f, -0.035090f, -0.082364f, 0.017988f, 0.014062f, 0.021358f, -0.015895f, -0.005696f, -0.011095f, 0.000509f, -0.025873f, -0.000806f, -0.019755f, 0.022696f, 0.018781f, -0.011809f, -0.016112f, -0.043421f, 0.072854f, -0.022867f, 0.014243f, -0.000091f, 0.004523f, 0.011597f, -0.030372f, 0.036359f, -0.018554f, 0.012393f, 0.007972f, -0.027267f, -0.028239f, -0.005245f, -0.002652f, 0.016868f, 0.076877f, -0.006487f, 0.011258f, 0.002512f, 0.023039f, 0.016505f, 0.017107f, -0.013656f, -0.004278f, 0.006631f, -0.037472f, 0.007541f, -0.032103f, -0.050939f, 0.017512f, 0.001590f, 0.003804f, -0.037296f, -0.089818f, 0.038718f, 0.040222f, 0.027865f, -0.051050f, 0.048353f, 0.051151f, 0.019001f, 0.014660f, 0.000443f, -0.015063f, -0.033846f, 0.025068f, -0.023850f, 0.001279f, 0.000414f, -0.013699f, 0.010217f, -0.024574f, -0.002542f, -0.005028f, 0.012024f, -0.007019f, -0.011193f, -0.015386f, 0.023146f, -0.012981f, -0.005515f, 0.005742f, + -0.020800f, 0.011269f, 0.009468f, -0.007502f, -0.007279f, 0.001715f, -0.019318f, 0.017563f, -0.006479f, -0.005145f, -0.001611f, 0.001194f, 0.013183f, -0.010708f, -0.024422f, 0.006941f, -0.013610f, -0.004561f, -0.013948f, -0.012719f, 0.001920f, -0.010360f, -0.004574f, -0.009684f, 0.031388f, -0.014281f, -0.025484f, 0.003642f, -0.009139f, -0.001012f, -0.043991f, -0.087954f, 0.073270f, 0.011913f, 0.013131f, -0.029195f, -0.020980f, -0.093581f, 0.026066f, 0.067196f, 0.020707f, -0.059208f, -0.029553f, 0.009805f, -0.022961f, -0.014507f, 0.027624f, -0.030742f, 0.017411f, 0.015567f, 0.012889f, -0.034241f, 0.012440f, 0.010817f, -0.016002f, -0.032034f, -0.018498f, -0.012229f, -0.008192f, -0.030550f, -0.026354f, -0.014405f, -0.031536f, 0.025147f, -0.011689f, -0.040711f, -0.013984f, 0.025247f, -0.005055f, -0.028179f, -0.015475f, -0.014299f, 0.000028f, -0.022302f, -0.013428f, -0.037066f, -0.035255f, 0.015234f, -0.012466f, 0.046621f, 0.030650f, 0.003154f, 0.027839f, -0.040444f, 0.026372f, -0.038383f, 0.032507f, -0.005387f, 0.016679f, -0.017030f, 0.057669f, -0.014192f, 0.032339f, -0.008088f, 0.047448f, 0.019229f, + 0.011616f, -0.048712f, 0.053101f, 0.042591f, 0.018565f, 0.019874f, -0.038037f, -0.007121f, 0.015681f, 0.026202f, -0.006682f, 0.006442f, -0.042037f, 0.027170f, 0.046252f, -0.000865f, -0.033008f, -0.001779f, -0.021812f, -0.018576f, 0.009096f, 0.000039f, -0.009089f, 0.010819f, -0.024096f, -0.005534f, 0.000963f, 0.007012f, -0.016614f, -0.022708f, 0.008813f, -0.010994f, -0.021551f, -0.038557f, -0.002833f, 0.012138f, -0.003220f, -0.019357f, -0.023494f, -0.007091f, 0.014942f, -0.016039f, 0.006188f, 0.008776f, 0.002421f, 0.006479f, -0.002020f, -0.010287f, -0.008808f, -0.002813f, 0.010756f, 0.003723f, -0.004235f, -0.014424f, 0.019841f, -0.012765f, -0.011305f, -0.009298f, 0.003927f, 0.023225f, -0.015731f, 0.022867f, 0.019145f, -0.007595f, 0.006913f, 0.012204f, -0.062660f, 0.050735f, -0.007528f, 0.023600f, -0.035176f, -0.012335f, -0.009781f, -0.009228f, -0.009249f, 0.029075f, -0.000462f, -0.026693f, 0.019050f, 0.002156f, 0.013379f, 0.024445f, 0.024695f, 0.000018f, -0.023812f, 0.090916f, -0.026624f, 0.069611f, -0.000747f, 0.002914f, -0.041456f, -0.018898f, 0.005406f, 0.033034f, 0.015743f, -0.012477f, + 0.026897f, 0.004444f, -0.040046f, 0.005208f, 0.004480f, 0.038684f, -0.002666f, 0.022655f, -0.030639f, -0.001246f, 0.025867f, 0.012203f, 0.021461f, 0.058773f, 0.046923f, -0.008733f, 0.023790f, -0.004981f, 0.046070f, -0.039088f, 0.030418f, 0.011601f, -0.002800f, 0.027112f, -0.016000f, 0.072310f, -0.013755f, 0.034325f, -0.027789f, -0.024962f, 0.000166f, 0.077127f, 0.024459f, -0.073853f, 0.063404f, -0.002451f, 0.021555f, -0.055939f, 0.017598f, 0.005192f, -0.110789f, 0.044959f, 0.082816f, 0.031107f, -0.036091f, -0.023168f, 0.015954f, 0.081698f, 0.046004f, 0.062033f, -0.023969f, -0.031653f, -0.028990f, 0.012273f, 0.016118f, -0.003810f, -0.032601f, -0.014998f, 0.038153f, 0.006089f, 0.007901f, -0.014408f, 0.016981f, -0.005487f, 0.007158f, -0.009282f, -0.011648f, -0.013452f, 0.022628f, 0.038914f, 0.037420f, 0.007900f, 0.019385f, 0.035721f, 0.023119f, 0.024962f, 0.033946f, 0.019108f, 0.032369f, 0.024755f, 0.008140f, -0.051395f, -0.010977f, -0.024374f, 0.013106f, 0.028908f, -0.034921f, -0.012672f, 0.038769f, 0.021264f, 0.003430f, -0.009889f, 0.032640f, -0.027007f, 0.004994f, 0.034372f, + 0.026291f, 0.014775f, 0.017271f, 0.020807f, 0.011209f, 0.003969f, -0.003427f, 0.004921f, 0.001798f, 0.017800f, 0.021088f, 0.013685f, -0.017350f, -0.008767f, -0.030346f, 0.037255f, 0.005210f, 0.024687f, -0.020828f, 0.049936f, -0.018216f, 0.023096f, 0.007205f, 0.010132f, 0.006766f, 0.004100f, -0.053267f, -0.030779f, -0.000312f, 0.004494f, 0.035325f, 0.029459f, -0.043617f, 0.004141f, -0.024350f, -0.021717f, 0.009883f, 0.002430f, -0.015441f, 0.017559f, 0.068745f, -0.046253f, -0.004432f, 0.106257f, -0.065558f, 0.007454f, 0.037208f, -0.019659f, -0.016479f, 0.021909f, 0.034279f, -0.038377f, 0.018011f, -0.069494f, -0.008319f, 0.103389f, 0.003684f, 0.029233f, -0.011808f, 0.056489f, 0.055982f, -0.015760f, -0.001854f, -0.026901f, 0.005676f, -0.019887f, -0.051361f, -0.032470f, -0.061122f, -0.044451f, 0.066092f, 0.026943f, 0.018897f, 0.089143f, -0.064119f, -0.037378f, 0.010426f, 0.033424f, -0.025772f, 0.016281f, -0.027551f, 0.049400f, 0.028659f, 0.017138f, 0.035313f, 0.129355f, -0.031558f, -0.010048f, -0.037046f, -0.041549f, -0.003588f, 0.054456f, -0.043513f, -0.005426f, 0.037817f, 0.041669f, + 0.048307f, 0.028832f, -0.034171f, 0.008692f, -0.019310f, -0.003795f, 0.027774f, 0.009484f, -0.003363f, 0.021697f, -0.040083f, 0.002864f, -0.000207f, 0.010879f, -0.009705f, -0.009787f, 0.022928f, -0.008486f, -0.006822f, 0.026693f, 0.032927f, 0.027413f, 0.010962f, 0.011872f, 0.021384f, 0.007078f, 0.000760f, 0.015934f, 0.000573f, -0.008354f, 0.005794f, 0.000308f, -0.003388f, -0.043521f, 0.009657f, 0.029017f, 0.045379f, -0.010197f, -0.014239f, -0.014668f, 0.022538f, 0.027374f, -0.060953f, 0.007847f, -0.027790f, -0.003098f, 0.002166f, 0.004620f, 0.016310f, 0.012960f, 0.010595f, -0.014834f, -0.031250f, 0.025569f, -0.007537f, 0.058384f, -0.053023f, 0.013405f, -0.003811f, -0.017008f, -0.015413f, -0.007663f, 0.017924f, 0.011021f, 0.012194f, -0.002811f, 0.032698f, 0.005719f, -0.042669f, -0.033647f, -0.004583f, -0.019774f, -0.024508f, 0.005600f, 0.027073f, -0.003800f, -0.006059f, -0.039167f, 0.019370f, -0.006288f, 0.040164f, -0.013640f, -0.076990f, 0.009427f, -0.022756f, -0.011625f, 0.000221f, -0.062532f, -0.032780f, -0.053719f, 0.001081f, -0.003919f, -0.014957f, -0.071120f, -0.028804f, -0.006230f, + 0.037298f, 0.041085f, 0.003425f, 0.003124f, 0.020148f, 0.004533f, -0.048735f, 0.042823f, 0.058463f, -0.025341f, 0.008953f, -0.025395f, 0.010669f, -0.000231f, 0.044580f, -0.049922f, -0.036066f, -0.114150f, -0.040344f, 0.028730f, 0.046129f, 0.032678f, 0.029833f, -0.028159f, -0.009189f, 0.022722f, 0.021993f, 0.049479f, 0.023630f, 0.021107f, 0.038270f, 0.009581f, -0.041854f, -0.045045f, -0.060868f, 0.025416f, -0.038853f, 0.003354f, -0.034051f, -0.052782f, -0.079723f, 0.011250f, -0.022992f, -0.025064f, 0.007261f, 0.007447f, -0.002890f, -0.011607f, 0.001800f, 0.026215f, 0.018409f, 0.006635f, -0.010033f, 0.018917f, 0.043086f, -0.009604f, -0.023334f, -0.019386f, 0.021209f, -0.011338f, -0.009506f, -0.038466f, -0.036928f, -0.028669f, -0.063208f, -0.003664f, 0.000318f, -0.025530f, 0.011373f, 0.016953f, 0.012639f, 0.031391f, 0.008874f, 0.037075f, 0.002588f, 0.010067f, 0.041224f, -0.020217f, -0.000977f, 0.005929f, -0.000191f, -0.028741f, -0.000906f, -0.005735f, 0.049651f, -0.003416f, -0.020399f, 0.015247f, 0.006325f, 0.014219f, 0.031866f, -0.005742f, -0.000346f, 0.017935f, 0.008308f, 0.000773f, + -0.002232f, -0.009970f, 0.010678f, -0.091511f, 0.038234f, -0.027427f, 0.003283f, 0.064828f, 0.054236f, -0.021687f, -0.009253f, 0.033317f, -0.020993f, -0.022095f, -0.018424f, 0.004347f, -0.006440f, -0.002606f, 0.007606f, -0.007314f, 0.031856f, 0.076163f, -0.032399f, -0.059968f, 0.059538f, -0.046501f, -0.012692f, 0.000255f, 0.074335f, 0.005569f, -0.022747f, 0.021735f, 0.020573f, -0.078180f, -0.023132f, 0.012648f, -0.003247f, -0.037252f, -0.003017f, 0.014420f, -0.114763f, -0.053232f, 0.056489f, -0.056744f, -0.063147f, -0.039087f, 0.046077f, -0.060417f, -0.094455f, 0.094590f, -0.028196f, -0.059600f, -0.003738f, 0.036792f, -0.036609f, -0.063956f, -0.001888f, 0.028752f, -0.003602f, -0.082202f, 0.018962f, -0.001445f, -0.037021f, 0.085933f, 0.080847f, -0.006390f, -0.033360f, -0.064181f, 0.098624f, 0.013550f, 0.017167f, 0.033954f, -0.024649f, -0.096198f, 0.042921f, 0.073174f, 0.058409f, -0.036554f, 0.020876f, 0.079857f, 0.046169f, -0.055568f, -0.012545f, -0.043625f, 0.019199f, 0.011838f, 0.050051f, 0.049571f, -0.060137f, -0.002225f, -0.006594f, 0.008824f, -0.023585f, 0.023871f, -0.015569f, 0.013773f, + 0.012231f, 0.010047f, -0.017192f, 0.012977f, -0.025530f, 0.041546f, -0.021455f, -0.010742f, 0.026175f, 0.023020f, -0.024372f, 0.003752f, -0.011541f, -0.028137f, -0.015304f, 0.011211f, 0.021841f, 0.013471f, -0.022986f, 0.012692f, -0.014874f, -0.034960f, 0.001458f, 0.006208f, -0.005854f, -0.002893f, 0.023518f, 0.001482f, 0.002383f, 0.011171f, -0.003459f, 0.006010f, -0.037680f, 0.028112f, 0.010060f, -0.095256f, 0.009690f, 0.088451f, 0.047825f, 0.011779f, -0.001872f, -0.016826f, 0.022434f, -0.032123f, 0.073298f, -0.006338f, 0.018989f, 0.026666f, -0.026236f, 0.000312f, -0.003976f, -0.028893f, -0.000875f, 0.010026f, 0.040772f, -0.000822f, -0.026547f, 0.012142f, 0.032653f, -0.006201f, 0.052203f, -0.041813f, 0.007819f, 0.011277f, 0.013046f, 0.045270f, -0.025942f, 0.003389f, -0.002521f, -0.060591f, 0.007722f, -0.020251f, -0.033544f, 0.013360f, -0.013263f, 0.046454f, 0.033134f, -0.025356f, -0.054559f, 0.024889f, 0.004384f, 0.010122f, 0.029206f, 0.064736f, -0.011975f, 0.012908f, -0.027385f, 0.036884f, 0.026016f, 0.027416f, -0.032006f, 0.042343f, -0.015599f, -0.019393f, -0.038451f, -0.003994f, + -0.015701f, 0.055023f, -0.042317f, 0.002384f, 0.012928f, -0.013302f, -0.026151f, 0.077087f, -0.004221f, 0.017839f, -0.007953f, 0.008768f, -0.007276f, 0.021194f, -0.003523f, -0.010054f, -0.007059f, -0.008916f, 0.025175f, 0.017480f, 0.023656f, 0.013037f, 0.007054f, -0.017313f, 0.017302f, 0.000871f, 0.009292f, 0.008048f, 0.021220f, -0.003637f, 0.000106f, 0.002993f, 0.006349f, 0.006715f, 0.015656f, -0.014031f, 0.009640f, 0.008452f, 0.007384f, 0.006218f, 0.004928f, 0.015448f, 0.005545f, -0.021460f, 0.012088f, 0.014034f, 0.014607f, 0.006126f, 0.015744f, 0.004009f, -0.001613f, 0.008764f, 0.004741f, 0.011284f, -0.001526f, -0.010912f, 0.002022f, 0.015825f, -0.008816f, 0.006309f, 0.000311f, 0.017284f, 0.015432f, 0.005730f, 0.010701f, 0.016057f, 0.007218f, 0.012961f, 0.031087f, -0.082695f, -0.232030f, -0.220640f, 0.095871f, 0.009357f, 0.212097f, 0.449256f, 0.098392f, 0.181029f, 0.096615f, -0.333341f, -0.149148f, -0.224214f, -0.329144f, -0.022140f, 0.038939f, -0.155588f, 0.138249f, 0.235021f, 0.144015f, 0.404792f, 0.248549f, 0.002185f, -0.037401f, -0.143370f, -0.357559f, -0.289815f, + -0.124772f, -0.274540f, -0.080907f, 0.156780f, 0.046708f, 0.039592f, 0.370947f, 0.142954f, 0.090416f, 0.343124f, 0.016334f, -0.017490f, 0.158333f, -0.078955f, -0.282910f, -0.137167f, -0.282695f, -0.413228f, -0.045664f, -0.187813f, -0.153088f, 0.132061f, 0.256530f, 0.118451f, 0.453226f, 0.360823f, 0.209461f, 0.273977f, 0.093034f, -0.134598f, -0.206975f, -0.276303f, -0.442070f, -0.354739f, -0.237738f, -0.202889f, -0.062913f, 0.153777f, 0.234084f, 0.260496f, 0.350639f, 0.294851f, 0.138458f, 0.050062f, 0.076166f, -0.118621f, -0.181250f, -0.129116f, -0.270886f, -0.204272f, -0.034924f, -0.122081f, 0.048535f, 0.198146f, 0.071120f, 0.100940f, 0.144370f, 0.014994f, 0.008854f, -0.035498f, -0.135583f, -0.071504f, 0.001376f, -0.054618f, 0.042169f, 0.057135f, -0.023120f, 0.072545f, 0.062961f, -0.098763f, 0.075457f, 0.087312f, -0.061628f, 0.142572f, 0.022074f, -0.141200f, 0.098737f, -0.077672f, -0.274756f, -0.045941f, -0.166881f, -0.203450f, 0.125576f, 0.015367f, 0.032157f, 0.264148f, 0.168471f, 0.186712f, 0.301159f, 0.220816f, 0.073625f, 0.031118f, -0.209293f, -0.381608f, -0.378839f, -0.380747f, + -0.359242f, -0.219944f, 0.011548f, 0.206084f, 0.303757f, 0.415214f, 0.386475f, 0.364231f, 0.287825f, 0.048169f, -0.131971f, -0.145671f, -0.305095f, -0.378605f, -0.227073f, -0.204458f, -0.113248f, 0.020250f, 0.054952f, 0.065048f, 0.130243f, 0.113237f, 0.107356f, 0.150626f, 0.125301f, 0.078332f, 0.069206f, 0.014352f, -0.043603f, -0.078146f, -0.094470f, -0.128222f, -0.107662f, -0.085684f, -0.066661f, -0.021990f, 0.022493f, 0.038735f, 0.055992f, 0.065360f, 0.063329f, 0.048301f, 0.038980f, 0.016986f, -0.001333f, -0.008517f, -0.008879f, -0.017315f, -0.013423f, -0.008928f, -0.010153f, -0.010016f, -0.002573f, -0.013925f, -0.016034f, -0.015779f, -0.024451f, -0.027399f, -0.016100f, -0.013751f, 0.007691f, 0.033190f, 0.044303f, 0.045071f, 0.042654f, 0.027796f, 0.020283f, 0.007478f, -0.012682f, -0.033416f, -0.039858f, -0.043462f, -0.038998f, -0.029076f, -0.013268f, 0.001813f, 0.018754f, 0.029477f, 0.030982f, 0.025919f, 0.019412f, 0.007199f, -0.002088f, -0.009524f, -0.013893f, -0.015213f, -0.009683f, -0.005101f, 0.001758f, 0.006569f, 0.010371f, 0.009973f, 0.006672f, -0.001165f, -0.006585f, -0.011091f, + -0.012325f, -0.011015f, -0.007172f, -0.003485f, 0.002128f, 0.005744f, 0.008102f, 0.009010f, 0.008620f, 0.006185f, 0.004208f, 0.002009f, 0.000038f, -0.001753f, -0.002551f, -0.003144f, -0.002776f, -0.002032f, -0.001253f, -0.000919f} + }, + { + {-0.009393f, -0.003611f, 0.002191f, -0.001743f, -0.005411f, -0.000392f, 0.012535f, -0.006434f, 0.001463f, -0.002713f, -0.000141f, -0.004793f, 0.009021f, -0.004679f, -0.004987f, -0.005633f, 0.010749f, -0.006390f, -0.001673f, -0.003019f, 0.003023f, 0.004964f, 0.006290f, -0.008873f, -0.000022f, 0.008498f, 0.003758f, 0.001457f, -0.000470f, -0.001059f, 0.003836f, 0.008665f, 0.002089f, -0.011120f, -0.005737f, -0.005981f, 0.009709f, -0.000990f, 0.007407f, -0.004653f, 0.003431f, 0.009722f, -0.004739f, -0.007313f, 0.002597f, -0.002732f, -0.000495f, -0.006542f, -0.002649f, -0.004887f, 0.001856f, -0.008872f, -0.002935f, -0.002264f, -0.000290f, 0.012027f, -0.003928f, -0.001797f, -0.000434f, -0.003139f, -0.001251f, -0.001123f, 0.007269f, 0.003777f, 0.004455f, -0.006237f, 0.004580f, 0.004832f, -0.004265f, 0.002008f, 0.002850f, -0.003202f, -0.004375f, 0.005127f, -0.007667f, 0.005429f, 0.003264f, 0.001451f, -0.007106f, -0.002441f, 0.002641f, -0.000607f, -0.001481f, -0.001894f, -0.000173f, -0.003786f, -0.004430f, -0.000657f, -0.000735f, 0.000556f, -0.001671f, 0.000063f, 0.002614f, -0.000073f, 0.000969f, 0.000402f, + 0.000510f, 0.000057f, -0.000523f, -0.001887f, -0.001165f, 0.001343f, -0.000609f, 0.000107f, -0.000190f, -0.005832f, 0.006313f, 0.000801f, -0.002624f, -0.003958f, -0.001031f, -0.001979f, 0.000076f, -0.004921f, -0.003764f, 0.002892f, -0.000721f, -0.001851f, -0.008648f, -0.001239f, 0.008173f, -0.005402f, -0.001300f, 0.006168f, -0.003456f, -0.006478f, -0.004924f, 0.004226f, 0.000101f, -0.000578f, -0.001193f, -0.006210f, 0.002175f, -0.002733f, -0.001409f, 0.007148f, -0.003837f, -0.009550f, -0.002801f, 0.000590f, 0.002940f, 0.002581f, 0.000886f, -0.007242f, -0.001624f, -0.008835f, -0.008019f, -0.002122f, 0.008524f, -0.001411f, -0.016672f, -0.000699f, 0.005694f, 0.004947f, -0.003396f, 0.003345f, 0.003656f, 0.000389f, 0.005033f, -0.008961f, -0.006324f, -0.000796f, 0.002672f, 0.000464f, 0.001919f, -0.000920f, 0.002412f, 0.002190f, 0.003535f, -0.000475f, 0.002199f, 0.002092f, -0.001631f, 0.003506f, -0.000806f, -0.008741f, -0.007152f, -0.004619f, -0.003666f, -0.003900f, 0.001249f, -0.001955f, 0.006857f, 0.005676f, -0.000996f, -0.002671f, -0.002323f, -0.001215f, 0.002089f, 0.003261f, 0.000447f, -0.001834f, + 0.000385f, 0.000496f, -0.001823f, 0.002465f, 0.000052f, -0.000512f, -0.000895f, -0.000158f, -0.001350f, 0.001015f, -0.000241f, 0.000230f, -0.001571f, 0.001003f, -0.000980f, 0.000057f, 0.000039f, 0.000709f, -0.000241f, -0.000717f, -0.000285f, -0.001461f, -0.000565f, 0.000200f, -0.000722f, 0.000175f, -0.000468f, -0.001327f, 0.007578f, 0.004198f, 0.011392f, 0.000677f, -0.002342f, -0.001504f, 0.008036f, -0.002305f, 0.004273f, -0.007529f, -0.000874f, -0.000294f, 0.004181f, 0.002870f, 0.007202f, 0.005029f, -0.003829f, -0.007438f, -0.006077f, 0.003995f, -0.002639f, 0.005494f, 0.003437f, 0.000642f, -0.000447f, 0.004548f, 0.003194f, -0.003494f, 0.003752f, -0.008008f, -0.001183f, -0.007433f, -0.006354f, -0.008923f, 0.002486f, 0.004910f, -0.001018f, 0.006874f, -0.005518f, 0.006358f, -0.013197f, 0.004925f, 0.002151f, 0.009581f, 0.002760f, 0.003365f, 0.005151f, -0.000355f, -0.003426f, 0.003502f, 0.008385f, 0.002757f, 0.004022f, -0.001491f, -0.000227f, -0.012130f, -0.000875f, 0.001785f, 0.002236f, -0.001888f, 0.006330f, 0.011905f, -0.004098f, -0.008788f, 0.005695f, 0.001147f, -0.006206f, -0.000230f, + -0.002914f, -0.006311f, 0.000691f, 0.008524f, 0.002099f, 0.003015f, 0.001393f, -0.001060f, 0.003226f, 0.001897f, -0.000235f, 0.002711f, 0.000116f, -0.000925f, -0.000702f, -0.001774f, 0.001617f, -0.002542f, -0.000359f, 0.003879f, -0.000932f, -0.000236f, 0.001480f, -0.001092f, 0.002686f, -0.003977f, -0.001779f, -0.000086f, -0.001584f, -0.001819f, 0.000355f, -0.001087f, 0.001266f, 0.002796f, -0.001158f, 0.001513f, 0.000398f, 0.000023f, -0.000005f, 0.000258f, -0.003352f, -0.001007f, -0.000791f, 0.000495f, 0.002684f, 0.001452f, 0.004234f, 0.006219f, 0.005978f, -0.005968f, 0.009171f, -0.003386f, -0.006251f, -0.009188f, 0.002015f, -0.012122f, -0.000850f, 0.001163f, 0.003230f, -0.007762f, 0.004860f, -0.000210f, 0.001004f, 0.003128f, 0.001873f, 0.002635f, -0.010461f, -0.000779f, -0.002448f, -0.006841f, 0.003846f, 0.001907f, 0.001447f, 0.005717f, 0.020300f, -0.001585f, 0.000941f, 0.002829f, 0.004934f, 0.001918f, -0.016860f, 0.003401f, -0.002894f, -0.002001f, 0.009063f, 0.000193f, 0.004453f, 0.006542f, -0.008377f, -0.004688f, -0.002499f, -0.008094f, -0.017308f, 0.000737f, -0.006598f, -0.001111f, + -0.001617f, -0.000428f, -0.004106f, -0.008487f, 0.002268f, -0.008124f, -0.002679f, 0.001742f, -0.009099f, 0.009220f, 0.003082f, 0.002571f, -0.003898f, -0.000759f, -0.001597f, 0.001778f, -0.003023f, 0.004701f, -0.007493f, 0.002377f, 0.011063f, 0.009205f, -0.003375f, 0.004648f, -0.004544f, 0.001932f, -0.008485f, -0.000343f, 0.005057f, 0.005927f, 0.005223f, -0.000991f, 0.009844f, 0.000846f, 0.004848f, 0.004391f, -0.000319f, 0.002011f, 0.000942f, 0.000308f, -0.001835f, 0.000938f, 0.001407f, -0.000667f, 0.000026f, -0.001191f, -0.002896f, -0.000493f, 0.001722f, -0.001533f, 0.003871f, -0.001179f, -0.002249f, -0.001848f, 0.001254f, -0.001071f, 0.001601f, -0.000402f, -0.001857f, 0.000945f, -0.000635f, 0.002015f, 0.001099f, 0.001157f, 0.000666f, -0.003672f, -0.001023f, 0.000426f, 0.001372f, -0.000009f, 0.000124f, -0.001031f, 0.013690f, -0.017265f, 0.000777f, -0.010616f, 0.005497f, 0.007910f, 0.009637f, -0.001448f, -0.009070f, 0.000272f, 0.009495f, 0.002055f, 0.001852f, -0.007068f, -0.000908f, -0.012406f, 0.016585f, -0.000840f, -0.012690f, 0.013827f, 0.003499f, 0.004125f, -0.000853f, -0.004937f, + -0.001580f, -0.006532f, -0.006434f, 0.005133f, 0.007278f, -0.001437f, 0.006870f, -0.005587f, -0.003466f, 0.000037f, 0.009571f, 0.009052f, -0.002481f, -0.005045f, 0.007463f, 0.004768f, 0.000745f, 0.006314f, 0.001545f, -0.007339f, 0.007812f, 0.004880f, -0.000531f, -0.002526f, 0.002195f, -0.007914f, 0.021235f, -0.001060f, -0.000704f, 0.015821f, -0.001381f, -0.009619f, -0.005184f, -0.001103f, 0.003902f, -0.009998f, 0.006924f, 0.002112f, 0.000295f, -0.009074f, -0.007621f, -0.016066f, -0.001364f, 0.007552f, 0.003798f, 0.009150f, -0.004990f, -0.003536f, 0.019140f, -0.005259f, 0.003252f, -0.002610f, -0.007843f, 0.000651f, 0.003555f, -0.008210f, -0.014568f, 0.000653f, -0.008958f, -0.009062f, -0.004384f, 0.004795f, 0.000493f, -0.001332f, -0.005527f, -0.001873f, 0.000712f, -0.002049f, -0.001486f, 0.001542f, 0.005285f, 0.000779f, 0.001386f, -0.003644f, -0.001808f, -0.000338f, 0.000041f, -0.005160f, -0.003737f, -0.003259f, -0.000117f, 0.001305f, 0.000590f, -0.001650f, 0.000209f, -0.000287f, -0.000443f, -0.002685f, -0.000917f, -0.000349f, -0.000957f, -0.001384f, -0.001807f, -0.018305f, -0.000300f, -0.007757f, + -0.008759f, 0.002523f, -0.010501f, 0.000189f, 0.007017f, 0.003771f, 0.014809f, -0.024973f, 0.015868f, -0.002756f, 0.006883f, -0.004874f, -0.003662f, -0.013179f, 0.011539f, 0.010155f, 0.002482f, -0.011729f, -0.000740f, -0.006834f, -0.000902f, 0.011979f, 0.008322f, 0.001737f, 0.011427f, -0.000283f, 0.000494f, 0.001011f, -0.000500f, -0.008187f, 0.017134f, -0.001850f, 0.000064f, 0.019899f, -0.013016f, 0.004665f, -0.006259f, -0.001426f, 0.006232f, -0.002859f, -0.010287f, 0.019148f, 0.014929f, -0.000667f, 0.004784f, 0.007953f, 0.020724f, -0.002822f, -0.003846f, -0.011422f, 0.001887f, 0.003830f, -0.012046f, -0.012874f, -0.011306f, 0.013324f, 0.000219f, -0.005640f, 0.009151f, 0.006450f, 0.000035f, -0.003314f, 0.002924f, -0.007378f, -0.001936f, -0.008018f, -0.001856f, 0.007358f, -0.014680f, 0.003353f, -0.003141f, -0.010218f, 0.006128f, 0.009638f, 0.004092f, 0.010041f, 0.008728f, -0.007537f, -0.011967f, -0.006035f, 0.005192f, -0.004782f, -0.009208f, 0.005860f, 0.009963f, -0.007349f, 0.001204f, 0.002063f, 0.001084f, -0.006869f, 0.003931f, -0.003097f, -0.002428f, -0.004432f, -0.002310f, -0.003485f, + -0.000363f, -0.000448f, 0.001298f, 0.002038f, -0.001742f, -0.001558f, -0.000682f, -0.002781f, -0.001596f, -0.000798f, -0.001093f, 0.002088f, 0.002693f, 0.000629f, 0.003969f, -0.003618f, 0.002743f, -0.003132f, -0.001389f, 0.002809f, 0.013757f, 0.014593f, 0.002474f, -0.012453f, -0.001655f, -0.011824f, 0.005026f, 0.031348f, 0.007789f, 0.021743f, 0.008033f, 0.000344f, -0.020150f, -0.004897f, 0.003400f, 0.019647f, -0.008588f, -0.004240f, -0.007469f, 0.001951f, 0.015808f, -0.011445f, 0.007777f, 0.013693f, 0.003100f, 0.005087f, -0.008838f, 0.016904f, -0.003532f, 0.021994f, -0.000133f, -0.006625f, -0.020493f, 0.002598f, 0.000151f, 0.024610f, -0.007327f, -0.001920f, 0.015634f, 0.000195f, 0.002138f, -0.004976f, -0.016006f, 0.001806f, 0.009342f, -0.011468f, -0.009027f, 0.002489f, -0.019208f, 0.010670f, 0.010790f, -0.003169f, -0.001172f, 0.005527f, 0.011004f, -0.000839f, -0.006636f, -0.000168f, 0.016123f, -0.001960f, -0.002379f, -0.005976f, 0.020851f, 0.021113f, 0.001513f, -0.003723f, 0.003368f, -0.000807f, 0.005574f, 0.009809f, -0.000708f, 0.014128f, -0.005371f, -0.007703f, -0.011263f, 0.003935f, + -0.000833f, -0.017186f, -0.012365f, -0.007079f, 0.013691f, -0.003880f, -0.006259f, -0.001657f, 0.000110f, -0.005764f, -0.008745f, -0.003011f, -0.002486f, -0.005185f, 0.000977f, -0.003214f, -0.002797f, 0.002890f, -0.005509f, -0.005696f, 0.001943f, 0.004755f, -0.002682f, -0.003629f, -0.002703f, -0.004763f, -0.002210f, 0.001626f, -0.001554f, 0.000946f, 0.002700f, -0.000744f, -0.001307f, -0.004181f, 0.002566f, 0.000292f, -0.013875f, 0.013904f, 0.010561f, 0.000743f, -0.009231f, -0.010359f, -0.004552f, -0.020500f, 0.023635f, 0.017755f, -0.003901f, 0.006528f, 0.002063f, -0.003980f, 0.017904f, -0.001526f, -0.008438f, 0.026531f, -0.028916f, 0.007364f, 0.012349f, -0.000185f, -0.011870f, 0.012599f, 0.001885f, 0.018256f, -0.007172f, -0.002059f, 0.004815f, 0.007241f, 0.001164f, -0.002595f, 0.026611f, 0.011424f, -0.012275f, -0.018514f, 0.012743f, -0.018521f, -0.005425f, -0.021311f, -0.002826f, 0.031681f, 0.012923f, 0.015269f, 0.000036f, -0.016947f, -0.002881f, -0.008328f, -0.003737f, 0.023670f, -0.003777f, -0.026279f, -0.002188f, 0.005047f, -0.016734f, -0.002858f, 0.010671f, 0.008361f, -0.011271f, -0.005945f, + 0.011404f, 0.015093f, -0.004485f, 0.015727f, 0.000212f, 0.003883f, 0.005852f, 0.001246f, 0.006147f, 0.009395f, 0.009117f, 0.008842f, -0.004771f, -0.019096f, -0.021056f, 0.005137f, -0.004284f, 0.014911f, -0.002753f, 0.017713f, 0.005962f, 0.008188f, -0.009552f, -0.008565f, 0.006285f, -0.000429f, 0.001237f, 0.001563f, 0.000728f, -0.008617f, -0.003964f, -0.001419f, -0.007136f, -0.000310f, -0.006138f, 0.000993f, -0.003492f, 0.002522f, -0.000915f, 0.004444f, -0.000058f, 0.002386f, 0.000746f, -0.002390f, -0.002047f, -0.002843f, 0.005578f, 0.000543f, -0.001717f, 0.001685f, 0.002862f, 0.002330f, 0.000501f, -0.004271f, -0.011693f, -0.006707f, 0.000002f, -0.005741f, -0.000181f, -0.001040f, -0.001164f, 0.006900f, -0.001183f, 0.011381f, -0.001783f, 0.010597f, -0.022091f, 0.007511f, 0.005891f, 0.002901f, -0.014572f, -0.012237f, -0.015503f, 0.011549f, 0.005861f, -0.011162f, -0.011146f, 0.014597f, 0.004539f, -0.001495f, -0.009431f, -0.015378f, -0.006460f, 0.005826f, -0.009962f, 0.000845f, -0.018411f, -0.005375f, 0.001801f, 0.005890f, 0.011509f, -0.002221f, 0.007227f, 0.009991f, -0.010834f, -0.025471f, + 0.016985f, 0.000477f, -0.004333f, 0.016163f, -0.002890f, 0.000336f, -0.011457f, 0.014165f, -0.009610f, -0.012084f, -0.004953f, 0.011555f, 0.017666f, 0.014820f, 0.004345f, 0.002728f, -0.032183f, 0.014135f, -0.002304f, 0.005757f, -0.011368f, -0.002404f, -0.012680f, -0.004599f, -0.003399f, -0.016672f, -0.008619f, -0.007025f, -0.009337f, 0.016617f, -0.005842f, 0.021710f, -0.003024f, -0.001566f, 0.013433f, 0.015443f, 0.026181f, 0.017898f, -0.000763f, -0.008943f, -0.001407f, -0.000286f, -0.013146f, 0.002894f, -0.008631f, -0.014308f, 0.026762f, -0.017577f, -0.018729f, -0.002981f, 0.009805f, 0.001179f, 0.002870f, 0.001036f, 0.011089f, -0.000470f, 0.002833f, 0.003772f, -0.004723f, 0.000388f, 0.006708f, -0.004181f, 0.002591f, 0.004778f, 0.003822f, 0.008510f, 0.001670f, -0.000113f, 0.004526f, 0.000613f, -0.001923f, 0.003008f, 0.004694f, 0.001735f, -0.000287f, 0.001297f, 0.000524f, 0.009910f, 0.000546f, 0.008024f, 0.005218f, 0.001017f, 0.008389f, 0.009285f, 0.000685f, -0.000487f, 0.001017f, 0.001103f, 0.000892f, -0.001031f, -0.001400f, 0.002193f, 0.000274f, -0.005603f, -0.008175f, -0.033492f, + 0.007835f, -0.022940f, -0.013594f, 0.022377f, 0.017478f, -0.038288f, -0.035081f, 0.001544f, 0.015461f, -0.008639f, 0.009671f, -0.012406f, -0.001093f, -0.022082f, -0.005523f, -0.019901f, -0.001116f, -0.005197f, 0.000982f, 0.008125f, 0.006708f, 0.012951f, -0.001235f, -0.010406f, 0.009671f, -0.012476f, -0.004813f, 0.004460f, 0.001136f, 0.006881f, 0.013701f, -0.001816f, 0.002008f, 0.003424f, -0.005112f, -0.001073f, -0.019283f, -0.022867f, -0.022160f, 0.000370f, -0.022297f, 0.007923f, 0.003282f, -0.008586f, -0.010212f, -0.004176f, -0.003463f, -0.001596f, -0.013162f, -0.020912f, -0.000914f, 0.034096f, 0.018887f, -0.004415f, -0.019881f, -0.020481f, 0.023573f, -0.021528f, -0.006942f, -0.003551f, -0.014329f, -0.010736f, -0.014613f, -0.017075f, -0.023965f, -0.032439f, -0.004453f, -0.004947f, -0.004409f, 0.011318f, 0.010645f, 0.003056f, 0.009356f, -0.007108f, -0.008858f, 0.030638f, 0.013067f, -0.007760f, -0.022112f, 0.007257f, -0.012995f, -0.015366f, 0.000164f, 0.025743f, -0.004839f, 0.000099f, 0.017698f, -0.001662f, -0.011454f, 0.000802f, 0.004367f, -0.000056f, -0.004578f, -0.004302f, 0.000061f, 0.004597f, + 0.002284f, 0.003168f, 0.001947f, 0.008988f, -0.002373f, 0.004968f, -0.012373f, 0.006096f, 0.003214f, -0.001964f, 0.002835f, -0.002348f, 0.004786f, -0.001984f, -0.003489f, -0.001819f, 0.004358f, 0.003913f, 0.000641f, 0.005141f, -0.006963f, 0.007418f, -0.003395f, -0.004020f, 0.000736f, 0.001898f, -0.028107f, 0.002841f, 0.013680f, 0.014871f, 0.013787f, 0.005609f, 0.027509f, -0.011349f, -0.020581f, -0.005668f, 0.003252f, -0.004478f, 0.008541f, 0.018142f, 0.037084f, 0.023134f, 0.013405f, 0.017028f, -0.014741f, -0.028009f, -0.009781f, -0.021088f, 0.023150f, 0.004898f, -0.005262f, -0.017196f, 0.026319f, 0.022443f, -0.008783f, -0.002137f, -0.000423f, -0.014250f, -0.011818f, -0.021216f, 0.005862f, 0.006689f, 0.011517f, -0.020096f, 0.001497f, 0.005118f, -0.009226f, -0.019552f, 0.000273f, 0.010593f, 0.014362f, 0.001978f, -0.037602f, -0.013842f, -0.018694f, 0.007130f, 0.021971f, -0.000535f, -0.021215f, 0.004463f, -0.020484f, 0.010669f, -0.005177f, 0.001254f, -0.014601f, 0.029558f, 0.023511f, -0.008004f, -0.007220f, -0.017931f, -0.001424f, 0.023501f, 0.005289f, 0.029005f, 0.028278f, 0.023192f, + 0.013746f, 0.004295f, -0.019256f, -0.011196f, -0.025543f, 0.028653f, 0.029188f, -0.002940f, -0.022573f, 0.013822f, 0.033954f, -0.001008f, 0.004190f, -0.008830f, -0.000933f, -0.022987f, 0.003444f, -0.018257f, 0.012010f, 0.003669f, 0.016948f, 0.016378f, 0.009127f, 0.000818f, 0.001438f, 0.009896f, 0.003779f, -0.003054f, -0.006959f, -0.002865f, -0.010581f, 0.001234f, 0.008147f, -0.007548f, -0.003935f, -0.008555f, 0.005760f, -0.002408f, 0.012327f, -0.012326f, 0.003160f, -0.001025f, 0.011757f, -0.006312f, 0.003918f, 0.006490f, 0.001338f, -0.001020f, 0.000487f, 0.001442f, -0.005326f, -0.002810f, 0.007103f, 0.008051f, -0.019282f, -0.005472f, 0.012667f, 0.022691f, -0.025521f, -0.030825f, -0.026737f, 0.027631f, -0.012667f, 0.018184f, -0.001142f, -0.000552f, 0.044991f, -0.006393f, 0.002518f, -0.021159f, -0.032490f, 0.007036f, -0.005573f, 0.007672f, 0.004712f, -0.003398f, -0.018949f, 0.004262f, 0.005916f, 0.002313f, -0.017934f, 0.010454f, 0.007393f, 0.032579f, -0.016263f, 0.001423f, 0.017443f, 0.017826f, -0.000107f, 0.018006f, -0.005597f, -0.000123f, 0.016042f, 0.013371f, 0.002996f, -0.008252f, + -0.027738f, -0.021307f, 0.014976f, -0.001342f, -0.006977f, -0.006254f, 0.003194f, 0.035240f, -0.003040f, -0.013549f, 0.017603f, -0.009804f, 0.016597f, 0.003250f, 0.051355f, -0.011187f, -0.002480f, -0.001105f, 0.006955f, 0.016825f, -0.004274f, -0.007071f, 0.010807f, -0.025482f, 0.019173f, 0.035692f, 0.010085f, -0.008722f, 0.019698f, -0.008838f, -0.001870f, 0.040486f, -0.024771f, 0.008148f, 0.015529f, -0.008024f, 0.033805f, 0.007227f, 0.006646f, -0.014351f, -0.020696f, 0.002468f, 0.008272f, -0.022458f, 0.020967f, -0.001117f, 0.004724f, -0.000983f, 0.005567f, 0.018945f, -0.005333f, 0.019116f, 0.008830f, 0.005540f, 0.010511f, 0.008921f, -0.006658f, 0.011612f, 0.011110f, -0.011576f, 0.003164f, 0.007614f, 0.015429f, 0.002653f, 0.003897f, 0.006893f, 0.008714f, 0.013194f, 0.000699f, -0.000732f, -0.001636f, 0.008627f, 0.007589f, -0.010325f, -0.000918f, 0.005260f, 0.008441f, 0.005957f, -0.006186f, 0.012433f, -0.001155f, 0.003451f, 0.000912f, 0.010011f, 0.005005f, 0.003947f, 0.004657f, 0.006487f, 0.004800f, -0.002493f, -0.001567f, 0.001538f, 0.010277f, 0.002009f, 0.001059f, -0.001544f, + 0.001402f, 0.003253f, 0.004098f, 0.000763f, 0.004818f, 0.005633f, 0.009477f, -0.025653f, -0.007013f, 0.018289f, -0.008189f, -0.013194f, -0.011669f, -0.012052f, 0.002739f, 0.018370f, -0.001775f, -0.039461f, 0.000548f, -0.029892f, 0.012317f, 0.013432f, 0.000793f, 0.006557f, -0.012776f, -0.001314f, 0.016668f, -0.037808f, 0.010287f, -0.007952f, 0.021899f, 0.015148f, 0.010177f, 0.002054f, -0.014632f, -0.034108f, -0.001229f, -0.029768f, 0.019252f, 0.000629f, -0.008482f, 0.032122f, 0.017101f, -0.012292f, -0.009407f, -0.006242f, -0.004192f, -0.008505f, -0.016443f, 0.003449f, 0.005574f, 0.046271f, -0.000873f, -0.032475f, 0.000662f, 0.022780f, 0.002344f, -0.016556f, 0.011367f, -0.025159f, 0.017740f, -0.010438f, 0.012001f, -0.014518f, 0.007585f, -0.025758f, 0.069405f, 0.002916f, 0.048185f, -0.004281f, -0.012265f, 0.012625f, -0.014559f, -0.014742f, 0.027200f, 0.026009f, -0.021764f, -0.059472f, 0.057660f, -0.019682f, -0.014816f, -0.007206f, -0.007199f, 0.007791f, -0.004438f, 0.004656f, 0.025316f, 0.006111f, -0.019020f, -0.015806f, -0.011198f, 0.007540f, -0.011731f, -0.001624f, 0.012239f, -0.030827f, + -0.001827f, 0.002131f, -0.004008f, -0.008958f, 0.004344f, -0.006320f, 0.017777f, -0.006589f, 0.008405f, -0.007472f, -0.004612f, 0.000482f, -0.006960f, 0.004616f, 0.004930f, -0.003207f, 0.005179f, -0.007196f, 0.004471f, -0.001893f, 0.000396f, -0.003242f, 0.001056f, -0.012964f, -0.008514f, -0.001860f, -0.004297f, -0.010638f, -0.013056f, -0.007949f, -0.002412f, -0.005675f, -0.000159f, -0.009482f, 0.001043f, -0.008443f, -0.001342f, -0.010988f, 0.006936f, -0.006165f, -0.003613f, -0.003194f, -0.029172f, -0.010259f, -0.008761f, -0.025067f, -0.044249f, -0.010812f, 0.000866f, -0.023442f, 0.011702f, -0.009949f, 0.019912f, -0.016879f, -0.006952f, -0.024113f, 0.057971f, 0.049030f, -0.010804f, 0.011037f, 0.033756f, -0.035187f, 0.035982f, -0.014771f, -0.014752f, 0.013030f, 0.004903f, 0.006240f, -0.005091f, -0.007669f, 0.001188f, 0.011706f, 0.010197f, -0.015592f, 0.018175f, -0.016813f, -0.027965f, 0.020531f, 0.018169f, -0.023346f, -0.028935f, -0.033577f, -0.004739f, -0.005486f, 0.009622f, -0.021901f, -0.027354f, -0.013987f, 0.046319f, 0.016224f, 0.015895f, -0.019674f, 0.017996f, 0.024349f, -0.018735f, 0.045384f, + 0.008621f, -0.016139f, -0.021036f, 0.012198f, -0.017633f, -0.038679f, 0.009649f, -0.000377f, 0.001083f, 0.021242f, 0.019939f, -0.016970f, 0.003452f, -0.049603f, -0.005953f, -0.019533f, 0.041315f, 0.002501f, 0.006015f, -0.023908f, 0.019661f, -0.042145f, -0.004907f, 0.016541f, 0.004981f, -0.004553f, -0.004590f, 0.005143f, -0.001722f, 0.004784f, -0.006082f, 0.001208f, 0.003731f, 0.010055f, 0.002725f, 0.003214f, -0.002058f, 0.005969f, -0.005952f, 0.001923f, 0.018967f, -0.003679f, 0.001086f, -0.005994f, 0.008590f, 0.003880f, -0.000751f, 0.009797f, -0.010068f, -0.009810f, 0.010897f, -0.008955f, -0.003062f, -0.008210f, 0.004768f, -0.012001f, -0.005144f, -0.003931f, 0.009881f, 0.009613f, -0.015136f, 0.002390f, 0.008148f, -0.005336f, -0.017097f, -0.008433f, 0.013141f, -0.003993f, -0.001909f, -0.008369f, -0.021449f, 0.027250f, 0.028721f, 0.025984f, 0.017549f, -0.000198f, 0.023816f, 0.021581f, 0.003650f, -0.004063f, 0.009628f, 0.000081f, -0.024190f, -0.002870f, 0.009256f, -0.018939f, 0.027125f, -0.028213f, 0.022660f, 0.024622f, -0.007020f, -0.005547f, 0.010499f, 0.032848f, 0.024673f, -0.029682f, + -0.006410f, -0.007945f, -0.002295f, 0.007417f, -0.013771f, -0.014504f, 0.032301f, 0.000802f, 0.046355f, -0.030227f, -0.028575f, 0.023286f, -0.015346f, 0.008391f, -0.018069f, 0.015540f, 0.017846f, 0.011702f, -0.007153f, -0.026567f, 0.002731f, 0.008818f, -0.021979f, -0.040583f, -0.001292f, 0.003685f, -0.023834f, 0.043817f, -0.004885f, -0.012438f, 0.058353f, 0.054834f, 0.005602f, -0.007636f, -0.001917f, -0.011719f, 0.013336f, -0.028776f, 0.027095f, 0.003551f, -0.015503f, 0.032555f, 0.005371f, 0.006587f, -0.009143f, -0.017703f, -0.043582f, 0.009583f, -0.014739f, -0.007230f, 0.020336f, 0.008158f, -0.009433f, -0.028606f, -0.007733f, -0.032573f, 0.014085f, 0.029257f, -0.003955f, -0.022142f, -0.015278f, -0.022083f, 0.000440f, 0.011858f, 0.014433f, -0.003041f, -0.015416f, -0.008167f, -0.008313f, 0.002020f, -0.004518f, -0.007531f, 0.006507f, -0.001222f, -0.004387f, 0.007660f, -0.017423f, 0.004997f, 0.004804f, 0.027240f, 0.002722f, -0.006111f, -0.013716f, 0.011976f, -0.014333f, -0.001975f, 0.010484f, -0.019460f, 0.018353f, 0.003794f, -0.000491f, 0.003629f, 0.012518f, -0.006244f, -0.018855f, 0.000373f, + -0.005381f, -0.002505f, 0.018740f, 0.017465f, -0.001915f, 0.005362f, -0.048007f, -0.111261f, 0.037363f, 0.035404f, -0.012394f, 0.007944f, -0.026749f, 0.048084f, 0.030773f, -0.027182f, 0.007814f, 0.006585f, 0.000745f, -0.012205f, -0.008779f, -0.057358f, 0.024338f, 0.028393f, -0.006494f, 0.000033f, -0.003163f, 0.019124f, -0.014339f, 0.036450f, 0.010844f, -0.043216f, -0.024463f, 0.054995f, 0.036127f, -0.035757f, -0.008368f, -0.012678f, -0.021872f, 0.003476f, -0.008702f, 0.007888f, 0.071437f, 0.019512f, 0.074846f, 0.042779f, 0.048256f, 0.043983f, 0.086200f, -0.005595f, -0.007939f, 0.020664f, -0.006029f, -0.072201f, 0.058640f, -0.025323f, 0.033653f, -0.047706f, -0.037926f, -0.071282f, 0.014227f, -0.006510f, -0.023893f, 0.017467f, -0.033476f, 0.000188f, -0.047848f, -0.047787f, 0.013482f, 0.028008f, -0.038821f, -0.010252f, -0.026898f, -0.037371f, -0.041974f, -0.030137f, 0.023050f, -0.018179f, -0.052421f, 0.075436f, 0.047294f, 0.076057f, -0.009863f, -0.016303f, -0.015070f, -0.026763f, -0.043048f, -0.002702f, -0.009416f, -0.032564f, -0.010831f, 0.009654f, -0.023050f, -0.020786f, 0.002466f, -0.003363f, + -0.010241f, -0.008401f, 0.018811f, 0.020032f, 0.000688f, 0.005094f, 0.014268f, 0.017859f, 0.003681f, -0.001443f, -0.002685f, 0.008426f, -0.003511f, 0.002145f, -0.003226f, -0.012483f, -0.000284f, 0.011877f, -0.012259f, 0.016206f, 0.020467f, 0.008670f, 0.000716f, 0.003379f, 0.002205f, -0.013572f, 0.001170f, 0.007794f, -0.006958f, 0.000142f, -0.003156f, 0.002267f, -0.004813f, 0.001848f, 0.007637f, -0.010398f, -0.008838f, 0.016459f, 0.006742f, -0.002052f, 0.002544f, -0.009109f, -0.040522f, -0.106264f, 0.046029f, 0.054984f, -0.024880f, -0.010832f, -0.002751f, 0.062264f, 0.002018f, 0.013324f, 0.013147f, -0.014628f, 0.012386f, 0.029013f, -0.005800f, -0.027877f, 0.006966f, 0.052963f, -0.028048f, -0.017542f, 0.011615f, -0.007377f, 0.039651f, -0.009908f, 0.017881f, -0.020412f, -0.024525f, -0.024488f, 0.025994f, -0.007806f, 0.023076f, 0.026911f, -0.006937f, 0.003563f, 0.000174f, -0.021948f, 0.007292f, -0.019906f, 0.023536f, 0.057648f, 0.094656f, -0.001156f, -0.002694f, -0.040057f, 0.021662f, 0.030995f, -0.000927f, 0.034807f, 0.049749f, 0.020941f, 0.028290f, -0.043619f, -0.026200f, 0.036274f, + 0.094574f, -0.017306f, -0.055512f, 0.014165f, -0.018452f, -0.000985f, 0.025642f, 0.000498f, -0.025320f, -0.012094f, -0.013068f, -0.064306f, -0.026884f, 0.000436f, 0.010672f, 0.022448f, -0.003694f, -0.024720f, -0.014247f, 0.006082f, -0.010028f, -0.024826f, 0.025596f, 0.061894f, 0.026772f, 0.033346f, 0.003413f, -0.008436f, -0.050331f, -0.011118f, 0.014294f, 0.011145f, -0.011274f, 0.028563f, -0.008077f, 0.015989f, -0.035232f, 0.002053f, -0.012153f, -0.010130f, 0.000333f, 0.009790f, 0.009580f, -0.009930f, -0.019172f, 0.018558f, -0.007275f, 0.015249f, 0.001362f, -0.003841f, 0.001250f, 0.003278f, 0.014096f, 0.000474f, -0.002246f, -0.007290f, -0.008085f, 0.012147f, 0.004017f, 0.011195f, -0.023980f, 0.016690f, 0.009638f, 0.004543f, -0.008697f, -0.003176f, 0.017403f, -0.002096f, 0.000677f, -0.013419f, 0.001245f, -0.020589f, -0.004362f, 0.005958f, 0.017439f, 0.008659f, 0.015403f, 0.003547f, -0.002628f, -0.015069f, 0.033965f, 0.011424f, 0.017906f, 0.007133f, 0.051094f, -0.015844f, -0.006169f, -0.019802f, 0.012018f, -0.012229f, 0.011405f, 0.057920f, 0.011618f, -0.060987f, -0.014715f, -0.017666f, + -0.052119f, 0.033430f, 0.015914f, -0.005888f, 0.007603f, 0.003430f, -0.023291f, -0.000050f, -0.001464f, -0.023170f, -0.006797f, 0.050549f, 0.074271f, 0.035102f, -0.025631f, -0.040684f, 0.019463f, 0.033997f, 0.003970f, 0.027224f, -0.018667f, -0.012918f, 0.028001f, 0.008929f, 0.000573f, -0.062031f, -0.080874f, -0.002488f, -0.047223f, -0.027391f, 0.017132f, 0.067949f, 0.014879f, 0.003495f, -0.019479f, -0.023339f, -0.033814f, -0.029772f, 0.005742f, 0.020574f, -0.007082f, -0.033572f, -0.054068f, 0.021667f, 0.001597f, -0.030091f, -0.050389f, -0.034133f, -0.055483f, -0.100330f, -0.060442f, -0.008961f, -0.011858f, 0.120838f, -0.014599f, -0.004452f, 0.069731f, 0.008231f, 0.004085f, 0.041915f, -0.024810f, -0.061001f, -0.070820f, -0.010962f, -0.033831f, -0.037583f, -0.039849f, -0.043736f, 0.008732f, 0.039601f, 0.062995f, 0.037379f, 0.007886f, 0.004124f, -0.015975f, 0.032463f, 0.006864f, -0.009805f, -0.040334f, 0.008385f, 0.029668f, -0.001403f, 0.000069f, -0.014520f, 0.008325f, 0.016384f, 0.027153f, 0.007629f, 0.011659f, 0.010364f, 0.013688f, 0.016758f, 0.017660f, -0.004895f, 0.013493f, 0.002731f, + -0.009077f, -0.021188f, -0.025075f, 0.002581f, 0.006306f, -0.025246f, -0.012098f, -0.024284f, 0.008233f, 0.012523f, 0.019606f, 0.028315f, 0.048104f, 0.035563f, 0.036773f, 0.021685f, 0.014571f, -0.008718f, 0.004229f, 0.000190f, -0.021894f, -0.034285f, -0.025374f, -0.033190f, -0.020705f, -0.028843f, 0.038163f, -0.054153f, 0.013678f, 0.008595f, -0.023579f, -0.075945f, 0.051670f, 0.015329f, -0.004878f, -0.076901f, 0.020468f, 0.011921f, -0.040595f, 0.006776f, 0.035625f, 0.021874f, 0.010380f, -0.034825f, -0.007087f, -0.013010f, 0.006144f, -0.013125f, 0.003232f, -0.026984f, -0.038775f, 0.042518f, -0.029370f, 0.064623f, -0.039873f, -0.036149f, -0.024459f, -0.045438f, 0.004006f, -0.000907f, 0.067923f, -0.050356f, -0.053055f, 0.027323f, 0.017499f, -0.043975f, -0.058415f, -0.006526f, -0.032911f, 0.037816f, 0.008075f, -0.048424f, 0.031413f, -0.008316f, -0.074353f, 0.048769f, -0.033159f, 0.031809f, -0.055319f, -0.013607f, -0.001531f, -0.023336f, -0.009530f, 0.006301f, 0.069849f, -0.018928f, -0.006529f, -0.020157f, 0.019954f, -0.033142f, 0.025865f, 0.054492f, -0.003349f, 0.054789f, 0.043106f, -0.006646f, + 0.087968f, -0.005248f, 0.010175f, -0.002683f, 0.024837f, 0.088578f, -0.007286f, -0.024626f, -0.094788f, 0.073329f, 0.026200f, 0.062591f, 0.021345f, -0.049345f, 0.021931f, 0.013982f, 0.009043f, -0.043822f, 0.024997f, 0.005028f, 0.007223f, -0.023601f, -0.006847f, 0.029852f, 0.025654f, 0.001045f, -0.003077f, -0.003147f, -0.003430f, 0.007243f, 0.018806f, -0.038506f, -0.011330f, -0.005409f, 0.006149f, -0.007944f, 0.008550f, 0.008195f, 0.012133f, -0.009059f, -0.020403f, 0.031632f, 0.049670f, 0.017304f, -0.025453f, -0.021955f, -0.009395f, -0.007536f, 0.013464f, 0.006683f, -0.004947f, -0.031432f, -0.022442f, -0.025476f, -0.002466f, 0.024293f, 0.010726f, 0.020478f, 0.007870f, -0.034249f, -0.006110f, 0.014917f, 0.033286f, 0.020784f, -0.013949f, -0.010495f, -0.007996f, 0.004775f, 0.005807f, -0.000725f, -0.001989f, -0.006540f, 0.052331f, -0.100001f, 0.004133f, -0.112581f, -0.037533f, -0.018877f, 0.034646f, 0.104533f, 0.088883f, 0.032931f, 0.052595f, -0.033690f, -0.028351f, 0.005343f, -0.007403f, 0.024428f, 0.007931f, -0.023268f, 0.035251f, 0.051790f, 0.043072f, 0.032285f, 0.027321f, -0.000586f, + 0.005099f, -0.017228f, 0.049006f, 0.023040f, -0.009059f, -0.029761f, 0.010321f, 0.020285f, -0.005050f, 0.064063f, 0.066881f, -0.038247f, -0.028230f, 0.001702f, 0.052014f, 0.032544f, 0.008553f, 0.006621f, -0.012108f, -0.023063f, 0.013147f, 0.079840f, -0.031973f, -0.039120f, -0.042616f, 0.041842f, 0.017234f, -0.023595f, -0.036828f, -0.059163f, -0.070118f, 0.007976f, 0.015666f, 0.012952f, -0.015277f, -0.004955f, -0.019118f, 0.014134f, -0.055884f, -0.091970f, -0.041331f, -0.006186f, -0.015446f, -0.035774f, 0.046379f, 0.077347f, -0.017117f, 0.040015f, 0.085370f, 0.055774f, 0.019955f, -0.058493f, 0.009718f, 0.010790f, -0.051731f, -0.028500f, -0.008082f, -0.041138f, 0.045371f, 0.064564f, -0.003672f, -0.014626f, -0.007765f, -0.018552f, -0.010286f, -0.026065f, -0.025590f, -0.009264f, -0.012625f, 0.009470f, -0.005602f, -0.006921f, 0.012834f, -0.038833f, -0.004578f, 0.003414f, 0.039799f, -0.040378f, -0.006459f, -0.009044f, 0.007667f, -0.025637f, -0.008940f, 0.008094f, -0.014007f, -0.023683f, -0.003795f, -0.001626f, -0.023292f, 0.027776f, -0.037661f, -0.004053f, -0.013823f, 0.008596f, -0.003897f, -0.010915f, + -0.021957f, 0.000930f, 0.011182f, -0.007657f, 0.005267f, -0.063779f, 0.051430f, -0.006535f, 0.044187f, 0.026803f, 0.001018f, 0.029303f, -0.012858f, -0.003294f, 0.025234f, 0.030929f, 0.004765f, 0.000156f, -0.001017f, -0.028163f, -0.018296f, 0.007526f, -0.039256f, 0.001054f, -0.014760f, 0.000950f, -0.033285f, 0.005669f, 0.001853f, -0.030288f, 0.025284f, 0.010748f, 0.017112f, -0.038038f, -0.010270f, 0.007163f, -0.001997f, 0.002745f, 0.021812f, 0.004819f, 0.006106f, -0.004376f, -0.008436f, -0.005966f, -0.003127f, 0.014072f, -0.006378f, -0.024293f, 0.019664f, -0.033402f, -0.010492f, -0.011467f, 0.003999f, -0.016357f, -0.019375f, 0.025414f, -0.003247f, -0.025516f, 0.015583f, -0.035581f, 0.028490f, 0.008852f, 0.001338f, 0.029335f, 0.032659f, 0.004523f, 0.009304f, -0.024539f, 0.031680f, -0.015520f, -0.021680f, -0.001886f, 0.004683f, 0.059881f, -0.026921f, -0.044251f, 0.037895f, -0.014438f, 0.037865f, -0.006430f, 0.002483f, -0.016577f, 0.022933f, -0.038460f, -0.031891f, -0.012645f, 0.015064f, 0.008979f, -0.002330f, 0.018403f, -0.022864f, -0.023156f, -0.015367f, 0.005449f, 0.006691f, 0.001348f, + -0.000994f, -0.007020f, 0.003969f, -0.031943f, 0.006466f, 0.006488f, -0.007697f, -0.002980f, 0.009628f, -0.005146f, -0.013641f, 0.016482f, -0.008240f, 0.002013f, -0.000700f, -0.004212f, 0.011146f, 0.004790f, -0.011573f, -0.001359f, -0.002749f, -0.010388f, -0.002228f, -0.003872f, -0.021254f, 0.006448f, 0.012989f, 0.010337f, -0.009647f, 0.009646f, -0.015506f, -0.004890f, 0.000390f, -0.010093f, 0.031719f, -0.013324f, -0.165749f, -0.316541f, -0.112348f, -0.247743f, -0.282386f, 0.069776f, -0.009076f, 0.095418f, 0.367178f, 0.398052f, 0.281204f, 0.400884f, 0.329564f, 0.109705f, 0.115716f, 0.085733f, -0.220535f, -0.227111f, -0.126154f, -0.220447f, -0.238340f, -0.079546f, -0.069957f, -0.200833f, -0.151217f, -0.024182f, -0.089426f, -0.109461f, -0.026897f, -0.083679f, -0.148353f, -0.084302f, 0.028107f, -0.059274f, -0.073171f, 0.087816f, -0.014479f, -0.082335f, 0.075753f, 0.139987f, -0.031941f, 0.035286f, 0.216692f, 0.030191f, -0.069024f, 0.143946f, 0.125765f, -0.123990f, 0.071567f, 0.158598f, -0.049009f, 0.017661f, 0.274500f, 0.209541f, 0.105717f, 0.385436f, 0.429057f, 0.219574f, 0.395169f, 0.510208f, + 0.320332f, 0.302275f, 0.419512f, 0.269859f, 0.171763f, 0.190193f, 0.099098f, -0.114944f, -0.222735f, -0.302167f, -0.516029f, -0.627920f, -0.711975f, -0.805134f, -0.793935f, -0.860520f, -0.768777f, -0.570581f, -0.570605f, -0.449749f, -0.040175f, -0.023079f, 0.011780f, 0.322858f, 0.255042f, 0.085092f, 0.169290f, 0.251902f, 0.093331f, 0.112500f, 0.255737f, 0.186280f, 0.038064f, 0.153537f, 0.216513f, 0.093181f, 0.116693f, 0.266328f, 0.099806f, -0.042059f, 0.122823f, 0.086002f, -0.058888f, 0.116013f, 0.257226f, 0.121192f, 0.189640f, 0.410488f, 0.341370f, 0.323507f, 0.482073f, 0.445259f, 0.306887f, 0.266898f, 0.239240f, 0.089639f, -0.003540f, 0.012859f, -0.050384f, -0.160259f, -0.159609f, -0.183231f, -0.313753f, -0.350936f, -0.336497f, -0.377425f, -0.452919f, -0.396673f, -0.383529f, -0.409111f, -0.316843f, -0.214172f, -0.167653f, -0.105619f, 0.003808f, 0.042392f, 0.035478f, 0.058890f, 0.064649f, 0.033182f, 0.030276f, 0.059382f, 0.051335f, 0.034940f, 0.042030f, 0.049155f, 0.037211f, 0.048372f, 0.074016f, 0.081475f, 0.078305f, 0.091354f, 0.096935f, 0.080220f, 0.091982f, 0.084629f, + 0.052786f, 0.027218f, 0.011784f, -0.000740f, -0.010546f, -0.007754f, -0.007884f, -0.015521f, -0.016698f, -0.006231f, 0.007547f, 0.026962f, 0.038547f, 0.046521f, 0.048299f, 0.043324f, 0.043302f, 0.053653f, 0.051998f, 0.050318f, 0.058087f, 0.055003f, 0.040897f, 0.042497f, 0.040543f, 0.024668f, 0.020157f, 0.024769f, 0.011501f, -0.001319f, -0.004005f, -0.017909f, -0.037855f, -0.040677f, -0.046097f, -0.064018f, -0.071136f, -0.066714f, -0.076121f, -0.081518f, -0.072414f, -0.071566f, -0.074669f, -0.065624f, -0.052803f, -0.050114f, -0.042927f, -0.030458f, -0.030326f, -0.029478f, -0.022296f, -0.014951f, -0.011272f, -0.001026f, 0.008164f, 0.011320f, 0.015603f, 0.025839f, 0.035257f, 0.040661f, 0.047946f, 0.048425f, 0.043437f, 0.037703f, 0.034087f, 0.030710f, 0.026461f, 0.021767f, 0.017134f, 0.013122f, 0.009867f, 0.009183f, 0.008321f, 0.006305f, 0.005285f, 0.004357f, 0.002371f, 0.001046f, 0.000191f, -0.000671f, -0.001368f, -0.001619f}, + {-0.008214f, 0.006698f, 0.007177f, -0.003505f, 0.007203f, -0.004454f, -0.001025f, 0.009607f, -0.004027f, 0.004534f, 0.002744f, -0.010794f, -0.004901f, 0.007987f, -0.003199f, -0.001604f, 0.005007f, 0.003288f, 0.003551f, 0.000901f, 0.012342f, 0.002051f, -0.003245f, 0.002713f, -0.004343f, 0.007616f, -0.002268f, -0.004293f, -0.001891f, -0.010110f, -0.003455f, -0.007466f, 0.002374f, -0.000196f, 0.002665f, -0.003034f, 0.004160f, 0.001919f, -0.000511f, 0.001218f, 0.000627f, 0.000901f, 0.001310f, -0.005382f, 0.013214f, 0.001885f, -0.004880f, 0.009753f, -0.002410f, -0.008553f, -0.009345f, 0.008997f, -0.001852f, -0.000798f, 0.005955f, 0.000602f, -0.001608f, 0.004620f, -0.000550f, 0.002646f, 0.000738f, 0.003382f, -0.001846f, 0.003689f, -0.001741f, 0.004397f, 0.006449f, 0.003459f, -0.003884f, -0.004017f, -0.001983f, 0.001674f, -0.004146f, 0.002821f, -0.002057f, 0.003520f, 0.004638f, -0.005880f, -0.003319f, 0.004993f, 0.001467f, -0.001674f, 0.007772f, 0.004455f, 0.003690f, -0.000462f, 0.002021f, -0.000230f, 0.001006f, -0.000976f, 0.001153f, 0.000389f, 0.000530f, -0.001848f, 0.002861f, 0.000876f, + 0.000174f, -0.000575f, 0.001144f, 0.001818f, -0.001024f, 0.001963f, -0.000146f, 0.008419f, 0.001589f, 0.001850f, 0.007055f, 0.000002f, 0.005071f, 0.002364f, -0.000661f, 0.000460f, -0.005651f, 0.002518f, 0.000373f, 0.008654f, 0.003022f, 0.002779f, 0.000321f, 0.002496f, 0.009522f, -0.009143f, 0.005056f, 0.001265f, -0.006044f, -0.002766f, -0.003770f, -0.001301f, -0.003501f, 0.002339f, 0.011013f, 0.006881f, 0.008211f, 0.006481f, 0.011231f, 0.008135f, -0.010300f, -0.018672f, -0.002408f, 0.000781f, -0.004585f, 0.009702f, -0.000467f, 0.014576f, -0.006898f, -0.006960f, 0.006274f, 0.000256f, 0.000478f, 0.005716f, -0.010759f, 0.002661f, -0.007716f, 0.010061f, 0.005937f, -0.000127f, 0.015378f, 0.000597f, -0.001516f, -0.002000f, -0.002748f, -0.003915f, 0.007263f, 0.003812f, -0.003793f, -0.001320f, -0.010772f, -0.004810f, -0.001453f, 0.011166f, 0.007651f, 0.001289f, 0.005633f, 0.000124f, 0.006002f, -0.000077f, 0.002466f, -0.006533f, -0.004189f, 0.001483f, 0.000813f, -0.000423f, -0.003292f, 0.002940f, 0.003532f, -0.000989f, -0.003379f, -0.000696f, 0.003563f, -0.000648f, 0.001889f, -0.001799f, + -0.001014f, -0.001436f, 0.001126f, -0.001268f, 0.000190f, -0.000167f, 0.001799f, -0.001587f, 0.001738f, 0.002630f, -0.001294f, 0.000559f, 0.000213f, -0.000141f, 0.003254f, -0.001133f, 0.000822f, -0.001304f, 0.001292f, 0.000871f, 0.000553f, -0.000468f, 0.002863f, -0.000228f, 0.000143f, 0.001131f, 0.003223f, 0.006842f, 0.015447f, 0.004595f, 0.000761f, 0.000568f, 0.004413f, 0.004129f, 0.001001f, 0.002519f, 0.003562f, -0.000143f, -0.000242f, 0.004488f, 0.017464f, 0.005911f, 0.013643f, -0.007589f, -0.006191f, -0.002447f, -0.008066f, -0.009438f, -0.003729f, 0.007158f, -0.011685f, -0.001543f, -0.001304f, -0.018402f, 0.003803f, -0.018590f, -0.006133f, -0.002383f, 0.004525f, 0.000170f, 0.003983f, -0.003539f, -0.000101f, -0.012505f, 0.004724f, -0.004069f, -0.006964f, 0.001448f, 0.003634f, -0.000469f, 0.001012f, 0.005520f, 0.009656f, -0.015990f, 0.004494f, 0.001219f, -0.004677f, -0.005006f, -0.000957f, 0.002355f, -0.002073f, -0.009563f, -0.002200f, 0.002772f, 0.005135f, -0.000530f, 0.012109f, 0.001201f, 0.000614f, 0.005059f, -0.007628f, 0.011535f, 0.003708f, 0.006915f, 0.003094f, 0.005812f, + -0.001118f, -0.000933f, 0.003437f, 0.002130f, -0.001523f, -0.003287f, -0.002727f, -0.005531f, -0.000097f, -0.007474f, 0.000570f, 0.004606f, -0.000339f, -0.003089f, -0.005925f, 0.005476f, -0.003130f, 0.002320f, 0.000862f, -0.000776f, -0.005639f, 0.000644f, -0.000492f, 0.001569f, -0.001699f, -0.001477f, 0.000524f, -0.001660f, -0.003088f, -0.001504f, -0.001272f, -0.000129f, -0.002025f, -0.000171f, -0.001140f, 0.002862f, -0.000470f, -0.001260f, -0.000459f, 0.001617f, -0.000550f, -0.002229f, -0.002568f, 0.002962f, 0.000067f, 0.000442f, -0.001619f, 0.009095f, 0.009946f, -0.000390f, 0.010981f, 0.000624f, -0.001505f, 0.001286f, 0.000861f, -0.002117f, -0.000168f, -0.007780f, -0.004459f, 0.006816f, 0.008043f, -0.009551f, -0.002317f, 0.003873f, -0.006375f, -0.018211f, 0.004464f, 0.006642f, 0.007837f, -0.004236f, -0.004858f, -0.006537f, 0.009849f, 0.011215f, 0.001889f, 0.004385f, -0.008905f, -0.007242f, 0.008340f, 0.003102f, -0.006684f, 0.011580f, -0.011718f, 0.001873f, 0.001076f, 0.010854f, 0.003976f, -0.002486f, 0.001745f, -0.003855f, 0.005959f, -0.014318f, -0.004257f, -0.020598f, -0.008995f, 0.010324f, + -0.000901f, 0.015869f, -0.002204f, -0.013378f, 0.008396f, 0.001784f, -0.005470f, -0.000702f, 0.000619f, -0.005458f, 0.003509f, 0.009477f, 0.010729f, 0.000226f, 0.005115f, -0.000563f, 0.012213f, -0.006300f, 0.005268f, -0.001219f, -0.000238f, 0.000330f, 0.004213f, -0.001321f, 0.015290f, 0.001471f, 0.001366f, -0.002432f, 0.009001f, 0.003026f, -0.003063f, -0.006505f, 0.000121f, 0.006108f, 0.002115f, 0.001753f, -0.004016f, -0.000263f, 0.001223f, -0.000669f, -0.001078f, -0.001153f, -0.002150f, 0.001617f, 0.000129f, 0.000680f, 0.001293f, 0.003184f, -0.001277f, -0.003392f, 0.003680f, -0.001038f, 0.000361f, 0.000026f, -0.000443f, -0.000479f, 0.001459f, 0.001295f, 0.001783f, -0.000688f, 0.001664f, -0.000086f, 0.000963f, 0.001615f, -0.000383f, 0.000168f, 0.001414f, 0.002104f, 0.001173f, 0.001313f, 0.000432f, 0.000127f, 0.011045f, -0.015381f, -0.002261f, -0.010477f, -0.010870f, 0.003678f, 0.001923f, 0.022002f, 0.001003f, 0.007998f, -0.018649f, -0.004583f, 0.003937f, -0.009769f, 0.006205f, 0.001695f, 0.001422f, 0.005249f, 0.006114f, 0.014382f, 0.006333f, -0.002457f, 0.004461f, -0.007402f, + 0.001975f, 0.005711f, -0.000539f, 0.001062f, 0.006312f, 0.008181f, 0.019979f, 0.003781f, -0.003127f, -0.013917f, -0.000714f, 0.010299f, -0.016424f, 0.001652f, -0.001329f, 0.004972f, -0.008297f, -0.009773f, 0.017291f, -0.011278f, 0.003467f, -0.000846f, -0.011036f, 0.025030f, 0.006376f, 0.013057f, 0.006991f, 0.014292f, -0.002771f, -0.005571f, 0.009085f, -0.008619f, 0.006959f, -0.006896f, 0.003737f, 0.009813f, 0.005386f, -0.004596f, -0.000867f, 0.004949f, -0.008909f, -0.006650f, 0.000409f, -0.001175f, 0.014794f, -0.008320f, -0.014042f, -0.002218f, 0.007636f, 0.012420f, -0.007884f, -0.013315f, -0.003002f, 0.018212f, 0.002320f, -0.000144f, -0.006657f, 0.000768f, -0.000486f, 0.005536f, 0.005720f, -0.000498f, 0.002684f, 0.002992f, -0.009043f, -0.002188f, 0.002982f, -0.000565f, 0.005126f, 0.001956f, 0.000428f, -0.003915f, -0.000494f, -0.000643f, 0.001910f, -0.000733f, 0.005357f, -0.001186f, -0.000659f, -0.002832f, 0.000510f, -0.003547f, 0.000063f, -0.000503f, 0.001269f, 0.003051f, 0.000019f, 0.002534f, -0.000261f, -0.003336f, -0.000730f, 0.000184f, 0.001745f, -0.005772f, 0.006783f, -0.023996f, + 0.013755f, 0.004116f, -0.005294f, 0.007432f, -0.019599f, -0.016331f, 0.002227f, -0.008009f, 0.018735f, 0.016667f, 0.017696f, -0.011642f, 0.006935f, 0.000371f, 0.017638f, 0.001353f, 0.012495f, 0.005082f, -0.005163f, -0.015682f, -0.014234f, 0.004684f, -0.018997f, -0.000171f, -0.004425f, -0.009155f, -0.012664f, -0.007370f, 0.000191f, 0.015470f, 0.000134f, 0.006105f, -0.021753f, -0.012073f, -0.002247f, -0.013565f, 0.001025f, 0.013821f, -0.014749f, 0.006243f, -0.000114f, -0.004943f, -0.001312f, -0.003053f, 0.015148f, 0.008221f, 0.007580f, -0.003495f, -0.004534f, 0.020899f, -0.006225f, -0.005541f, -0.017072f, 0.012633f, -0.024262f, 0.003454f, -0.007945f, 0.003923f, 0.008688f, -0.005732f, -0.012929f, -0.007899f, 0.000931f, 0.017752f, -0.008816f, -0.001825f, -0.011400f, -0.009091f, 0.005742f, 0.006248f, 0.013966f, -0.016150f, -0.000097f, -0.008496f, -0.005651f, 0.003538f, -0.006401f, -0.012660f, -0.007270f, -0.001008f, 0.011734f, 0.012044f, 0.004152f, 0.000759f, 0.001761f, 0.005559f, 0.000484f, 0.000962f, 0.002490f, -0.003258f, 0.000363f, 0.005053f, -0.001461f, 0.000698f, 0.006039f, -0.001368f, + -0.000216f, 0.001081f, 0.004396f, 0.000086f, 0.000691f, 0.001712f, 0.000753f, 0.003799f, -0.004345f, -0.004700f, -0.000321f, -0.001642f, 0.000050f, 0.002799f, -0.001175f, 0.005073f, 0.003303f, -0.022331f, 0.006164f, 0.002211f, 0.003906f, -0.030800f, 0.027795f, 0.000706f, -0.000464f, -0.000409f, -0.009900f, 0.003387f, 0.000502f, 0.010037f, -0.008522f, 0.011237f, 0.003317f, -0.006781f, -0.011764f, -0.014764f, 0.007623f, 0.001457f, -0.001141f, 0.001157f, -0.008446f, 0.009415f, 0.007080f, 0.017260f, 0.010327f, 0.006905f, 0.009597f, -0.002102f, -0.009309f, -0.006952f, 0.000712f, -0.004848f, 0.007551f, -0.008232f, -0.012513f, -0.013747f, 0.000953f, -0.018854f, 0.008805f, 0.010060f, -0.011212f, 0.011704f, -0.013570f, 0.007009f, -0.020085f, 0.002848f, -0.003584f, 0.001602f, -0.005246f, -0.000182f, -0.018677f, -0.003029f, -0.006346f, -0.011813f, -0.003074f, -0.009203f, 0.003091f, -0.008283f, -0.004715f, -0.011943f, 0.005455f, -0.011416f, -0.000723f, 0.018604f, -0.003027f, 0.000666f, 0.006127f, -0.003998f, -0.018654f, -0.021310f, -0.003449f, -0.014867f, 0.000864f, -0.003976f, 0.014093f, 0.001128f, + 0.005380f, -0.014004f, 0.001370f, -0.003077f, -0.002443f, 0.010305f, 0.002651f, -0.001112f, -0.005433f, 0.002875f, 0.004083f, 0.001535f, 0.005502f, -0.000127f, 0.003126f, -0.001515f, -0.000432f, 0.000892f, 0.001064f, 0.002012f, -0.000391f, 0.006018f, -0.001559f, -0.004970f, 0.002204f, 0.000017f, 0.001654f, 0.002042f, 0.001390f, -0.000654f, -0.002473f, 0.001587f, -0.004441f, 0.001846f, 0.009127f, 0.006329f, -0.019005f, -0.000412f, 0.003617f, -0.017678f, -0.020153f, 0.011329f, -0.019781f, 0.004081f, 0.013517f, -0.009481f, -0.022765f, -0.009629f, 0.000743f, 0.015367f, -0.005951f, 0.026947f, -0.001641f, -0.001889f, -0.015230f, -0.010743f, -0.001623f, 0.005621f, 0.001704f, -0.005296f, -0.004441f, -0.001027f, -0.005562f, -0.011232f, 0.009626f, -0.009269f, -0.005627f, 0.010252f, 0.003159f, -0.015944f, -0.017016f, -0.015604f, 0.013867f, -0.014498f, -0.015710f, 0.026151f, -0.016099f, 0.011661f, -0.002094f, 0.007213f, -0.023221f, 0.010915f, 0.001516f, -0.003600f, -0.000980f, -0.004367f, 0.007730f, 0.005740f, 0.022210f, -0.005364f, -0.004024f, 0.010654f, 0.021465f, 0.006049f, 0.004451f, -0.009901f, + -0.006510f, -0.017377f, -0.003582f, -0.000261f, -0.000040f, 0.012913f, -0.003864f, 0.006991f, 0.022451f, -0.003248f, -0.000681f, -0.002419f, -0.000304f, -0.022500f, -0.025792f, 0.001504f, 0.017239f, 0.000396f, -0.034285f, 0.009180f, -0.011922f, 0.005966f, -0.021367f, -0.013193f, -0.003234f, 0.000806f, -0.007760f, 0.003644f, 0.008053f, -0.000788f, -0.000960f, -0.000575f, -0.003580f, 0.003721f, -0.004099f, 0.003704f, 0.000617f, 0.001326f, -0.003571f, -0.002339f, -0.005025f, 0.002558f, 0.000450f, -0.001422f, -0.004824f, -0.000924f, -0.001401f, -0.002984f, -0.003557f, 0.002373f, -0.004056f, -0.001427f, 0.003573f, 0.001210f, -0.001941f, -0.000151f, 0.000153f, -0.005101f, 0.000601f, -0.003180f, -0.004182f, -0.000303f, -0.001074f, 0.009495f, -0.001609f, 0.011248f, -0.001733f, -0.004783f, -0.006905f, 0.009541f, 0.005886f, -0.005338f, 0.004329f, 0.009709f, -0.005112f, -0.033098f, -0.014406f, -0.006509f, -0.003695f, 0.014757f, -0.025949f, -0.019054f, 0.015902f, 0.009857f, 0.040040f, 0.011277f, 0.009220f, 0.010999f, 0.005065f, -0.007193f, 0.000787f, -0.007576f, 0.012746f, 0.000557f, 0.012867f, 0.000375f, + -0.000382f, -0.017598f, 0.009103f, -0.011944f, 0.009245f, -0.001849f, 0.009697f, 0.003831f, 0.013022f, -0.020362f, 0.002364f, -0.014131f, 0.016958f, 0.001020f, -0.017052f, 0.022498f, 0.016634f, 0.010678f, -0.010222f, -0.034306f, 0.009859f, -0.003739f, -0.004268f, 0.016788f, -0.001636f, 0.007763f, 0.016230f, -0.003601f, -0.020609f, -0.000183f, 0.009231f, 0.006000f, -0.005539f, -0.002304f, -0.015106f, 0.005603f, 0.002061f, 0.003185f, -0.002271f, 0.002130f, 0.012992f, -0.008104f, 0.005928f, -0.002147f, -0.000495f, 0.023400f, -0.006291f, 0.010743f, 0.007722f, -0.007393f, -0.008233f, 0.002906f, 0.001766f, -0.003955f, 0.001973f, -0.004118f, 0.003773f, -0.003681f, 0.008914f, 0.000792f, 0.008523f, 0.001617f, -0.000216f, 0.010708f, 0.003809f, -0.003200f, 0.003016f, -0.002538f, -0.003343f, 0.001532f, 0.004274f, -0.004083f, 0.002727f, -0.002121f, -0.004164f, -0.000217f, 0.004265f, -0.001990f, -0.004636f, 0.001399f, -0.002166f, -0.007212f, 0.003112f, -0.000011f, -0.003666f, -0.002199f, -0.001203f, -0.004100f, -0.000335f, 0.005283f, 0.007638f, -0.007252f, 0.000989f, 0.008455f, -0.009527f, -0.037429f, + 0.007543f, 0.009007f, 0.037767f, -0.008016f, -0.006162f, 0.017833f, 0.023438f, -0.038414f, -0.021948f, 0.020876f, -0.010958f, 0.000632f, 0.008517f, -0.024491f, -0.053571f, -0.021071f, 0.030335f, 0.024112f, 0.020387f, -0.006279f, 0.011399f, -0.006307f, 0.010492f, -0.011209f, 0.003649f, -0.027050f, 0.006544f, -0.009583f, 0.013767f, 0.013395f, 0.000402f, -0.012796f, 0.012529f, 0.007890f, 0.021683f, -0.002301f, -0.013571f, -0.006771f, -0.034339f, -0.017568f, 0.008335f, -0.002339f, -0.023025f, 0.015538f, 0.021289f, -0.030313f, 0.029203f, -0.002837f, -0.003292f, 0.018367f, 0.003715f, 0.017365f, -0.002361f, 0.006185f, -0.006698f, -0.003577f, 0.008736f, 0.034936f, -0.012726f, 0.022230f, -0.001950f, 0.002045f, 0.008299f, 0.019354f, -0.018007f, 0.002046f, 0.028334f, 0.008440f, -0.013111f, 0.007536f, 0.011138f, 0.002585f, 0.022246f, 0.016100f, 0.027986f, -0.002578f, 0.007962f, -0.000294f, 0.000886f, -0.015651f, -0.010933f, -0.012451f, -0.006112f, -0.000063f, -0.002707f, -0.005060f, -0.004546f, 0.008350f, 0.012042f, 0.005531f, -0.006358f, 0.009741f, -0.002951f, -0.001596f, -0.005968f, -0.004739f, + 0.006061f, 0.002018f, -0.002345f, 0.000368f, -0.006614f, -0.005542f, -0.006511f, 0.000126f, -0.003688f, 0.005681f, 0.003385f, -0.002428f, 0.002407f, 0.006659f, -0.004195f, 0.003061f, 0.003774f, -0.003563f, -0.003340f, -0.003791f, -0.000744f, -0.001083f, 0.004019f, -0.001401f, 0.000567f, -0.001740f, -0.024348f, -0.006209f, 0.025112f, 0.015955f, 0.018930f, -0.012289f, -0.006207f, -0.001974f, -0.002660f, 0.026909f, 0.003465f, -0.027680f, -0.012354f, -0.008462f, 0.017743f, 0.003470f, 0.003806f, 0.015087f, 0.033003f, -0.048808f, 0.032353f, -0.006426f, -0.005798f, -0.012614f, 0.009609f, 0.009964f, 0.019001f, 0.002964f, 0.018106f, -0.001875f, -0.004870f, 0.005632f, -0.003063f, 0.009270f, 0.016642f, 0.001980f, -0.001289f, 0.021931f, -0.016339f, -0.003026f, 0.005316f, -0.001906f, 0.019291f, -0.022812f, 0.002042f, -0.019520f, 0.003136f, -0.020695f, -0.002964f, 0.000643f, 0.011309f, 0.028039f, -0.016400f, -0.009008f, -0.017002f, -0.000984f, -0.024831f, -0.016101f, -0.016345f, 0.011004f, 0.020196f, 0.000262f, 0.040062f, -0.025431f, 0.035793f, -0.025269f, -0.005969f, 0.011069f, 0.008093f, 0.035543f, + 0.020421f, -0.026607f, 0.013843f, -0.011153f, -0.036859f, -0.000920f, -0.023393f, 0.029403f, 0.044594f, 0.028428f, -0.005621f, -0.015818f, -0.005905f, 0.024994f, -0.003795f, 0.013030f, 0.001434f, 0.005779f, 0.008745f, 0.002801f, 0.003432f, 0.002955f, -0.010986f, 0.007579f, 0.000047f, 0.003202f, -0.004296f, -0.003588f, -0.010437f, -0.005786f, -0.003655f, 0.006365f, -0.003263f, 0.004269f, 0.005285f, -0.002032f, -0.001418f, 0.000149f, 0.006030f, 0.003896f, 0.002174f, 0.011429f, -0.000271f, 0.011941f, -0.010713f, -0.004679f, 0.007579f, 0.007406f, -0.004545f, 0.002538f, -0.003831f, -0.007748f, 0.000812f, -0.002747f, -0.025451f, -0.016354f, -0.000642f, 0.030624f, -0.006098f, 0.013457f, 0.028429f, -0.024351f, 0.010256f, -0.038846f, 0.023179f, -0.023911f, -0.011810f, 0.037261f, 0.012494f, 0.040184f, -0.017483f, 0.000072f, -0.018521f, 0.011475f, 0.051565f, 0.013103f, 0.017320f, -0.026377f, -0.005265f, 0.001086f, 0.019689f, 0.017406f, 0.032906f, -0.027175f, -0.009627f, -0.029555f, -0.025153f, 0.001642f, 0.001776f, 0.017172f, -0.017252f, 0.011961f, -0.040107f, 0.024777f, 0.018706f, 0.008793f, + -0.007022f, -0.004932f, 0.002321f, 0.011639f, 0.003651f, 0.003122f, -0.000476f, 0.026882f, 0.022949f, 0.009817f, 0.001807f, -0.020738f, -0.020480f, 0.055709f, 0.001797f, 0.006760f, 0.030902f, 0.013578f, -0.009102f, -0.006810f, 0.019559f, 0.040050f, -0.029461f, -0.012383f, -0.033165f, -0.030794f, 0.039129f, 0.017403f, 0.000137f, -0.007966f, 0.012795f, 0.029735f, 0.018859f, 0.030687f, 0.008373f, -0.014035f, 0.022142f, -0.016238f, -0.041252f, 0.011895f, 0.001209f, 0.000460f, -0.000159f, 0.016943f, 0.029414f, -0.006281f, 0.015450f, 0.017235f, 0.015634f, 0.001644f, 0.003273f, 0.015074f, -0.000057f, -0.004984f, -0.003603f, -0.006674f, 0.014705f, -0.008943f, -0.002742f, 0.003505f, 0.008191f, 0.000962f, -0.001639f, 0.015709f, 0.003089f, -0.003658f, 0.011779f, 0.015010f, 0.006789f, -0.006652f, -0.000313f, -0.003139f, 0.004454f, -0.000137f, -0.000195f, -0.000708f, -0.003771f, 0.005036f, 0.001806f, 0.001060f, 0.004943f, 0.006519f, -0.001447f, -0.007703f, -0.003111f, -0.001246f, 0.008775f, 0.002877f, -0.006551f, 0.001953f, 0.003395f, 0.009361f, 0.004059f, -0.000814f, 0.008760f, 0.000142f, + 0.004517f, -0.003669f, -0.000121f, -0.000345f, 0.001515f, -0.001276f, 0.012138f, -0.026092f, -0.019467f, -0.007639f, -0.024251f, 0.027332f, -0.003055f, -0.006974f, -0.023084f, -0.003854f, -0.021487f, -0.053304f, 0.009290f, -0.006577f, -0.016779f, 0.012033f, -0.028229f, -0.001734f, -0.015409f, -0.042748f, -0.009748f, -0.018562f, -0.020199f, 0.034116f, -0.009097f, -0.012363f, -0.006167f, -0.000827f, -0.008621f, -0.012107f, -0.001893f, 0.008960f, 0.028942f, 0.021724f, -0.000783f, -0.001740f, -0.048451f, 0.002901f, 0.006666f, 0.019814f, -0.011154f, -0.010149f, 0.073616f, -0.012717f, -0.035927f, -0.035033f, 0.030558f, -0.020525f, 0.008853f, -0.041517f, 0.010355f, -0.011721f, -0.022116f, -0.019270f, -0.047064f, 0.007457f, 0.013584f, 0.033386f, 0.009916f, -0.018270f, 0.026465f, 0.002992f, 0.024901f, 0.027470f, 0.079609f, 0.021190f, 0.005593f, -0.031085f, -0.034591f, -0.009479f, 0.003772f, -0.004590f, -0.031296f, 0.013918f, 0.036471f, 0.008228f, 0.025967f, 0.039914f, 0.036021f, -0.015452f, -0.028681f, -0.019869f, 0.002624f, 0.006162f, -0.003433f, -0.030753f, 0.005983f, -0.025060f, 0.007690f, -0.011261f, + 0.001720f, -0.013959f, 0.009102f, -0.002535f, 0.005827f, 0.000476f, -0.005749f, -0.014286f, -0.003115f, -0.000634f, 0.008308f, 0.011074f, 0.009085f, 0.012800f, 0.000864f, 0.010898f, 0.019705f, 0.000139f, 0.003827f, 0.010684f, 0.003921f, -0.010279f, -0.005557f, -0.017271f, -0.004884f, 0.009781f, 0.005858f, 0.000862f, -0.002120f, 0.006034f, 0.003729f, -0.003992f, -0.007786f, -0.015206f, 0.002055f, 0.001880f, -0.001990f, -0.005301f, -0.001001f, -0.005700f, 0.002973f, -0.010731f, -0.032188f, -0.013961f, -0.005036f, 0.009848f, -0.011805f, 0.019045f, -0.009982f, -0.013212f, 0.037043f, 0.019234f, 0.042134f, 0.000483f, -0.012315f, -0.016707f, 0.044677f, -0.038477f, -0.014393f, 0.052153f, -0.031555f, 0.010385f, 0.010813f, 0.013495f, 0.003015f, 0.029287f, -0.009206f, 0.026353f, -0.010068f, 0.005726f, 0.006257f, -0.013629f, 0.019562f, -0.029770f, -0.020747f, -0.019336f, -0.008921f, -0.026468f, -0.048748f, -0.008916f, -0.014637f, 0.007696f, -0.012605f, -0.064754f, 0.017931f, 0.040595f, -0.002404f, -0.008698f, 0.063557f, -0.078856f, -0.017111f, 0.043908f, -0.010831f, 0.034063f, -0.025115f, -0.015602f, + 0.011784f, -0.075260f, 0.024275f, -0.025661f, 0.037557f, 0.027587f, -0.040042f, 0.078883f, 0.011596f, 0.004139f, -0.004097f, 0.031055f, -0.057160f, 0.023333f, -0.002736f, -0.009114f, 0.015257f, -0.036960f, 0.052203f, 0.047383f, -0.087702f, 0.012549f, -0.017494f, -0.082323f, -0.014212f, -0.036780f, 0.020205f, 0.005144f, 0.014219f, -0.033268f, 0.051593f, -0.005106f, -0.013902f, 0.023803f, -0.001031f, 0.016894f, -0.003649f, 0.026701f, 0.000607f, 0.013285f, 0.004117f, -0.001231f, -0.002882f, 0.014901f, -0.010860f, -0.012212f, 0.000235f, -0.014337f, 0.021351f, -0.004731f, -0.011118f, 0.001088f, 0.009808f, 0.004663f, 0.010117f, 0.003871f, 0.024780f, 0.005810f, -0.013522f, 0.025657f, -0.013985f, 0.014565f, 0.022121f, -0.006255f, 0.004951f, 0.015467f, -0.010731f, 0.000811f, -0.013987f, 0.015121f, 0.002170f, 0.048046f, -0.021901f, -0.062580f, -0.062786f, 0.004691f, 0.007494f, -0.027753f, 0.016062f, -0.035048f, 0.010909f, -0.016032f, 0.031916f, 0.040953f, 0.001091f, 0.039614f, 0.036023f, -0.020425f, -0.000762f, -0.026055f, -0.006726f, -0.006315f, 0.013757f, -0.002790f, -0.004228f, -0.004581f, + -0.042023f, -0.063430f, -0.025646f, 0.032717f, 0.025246f, -0.027360f, -0.031431f, 0.017959f, 0.018207f, -0.041339f, 0.020485f, -0.027587f, -0.005336f, 0.031545f, 0.043904f, 0.000070f, -0.026401f, 0.016659f, 0.003132f, 0.027273f, 0.004537f, 0.022720f, 0.023468f, -0.006926f, -0.090756f, 0.010028f, 0.002149f, 0.036402f, -0.013561f, 0.037130f, 0.036805f, -0.024994f, -0.122894f, -0.016674f, 0.004805f, -0.014959f, 0.073564f, 0.077190f, 0.053784f, 0.076700f, -0.020114f, 0.035952f, -0.030561f, 0.051193f, 0.035820f, -0.060796f, 0.076333f, -0.079356f, -0.067620f, -0.063754f, 0.019991f, 0.047594f, 0.039595f, 0.013143f, -0.049844f, 0.045617f, 0.006179f, -0.016663f, -0.021461f, 0.002498f, 0.043060f, -0.033683f, -0.013600f, 0.065890f, 0.012016f, 0.030018f, 0.005594f, 0.003002f, 0.016081f, -0.025186f, 0.013253f, -0.010422f, 0.000306f, 0.006555f, -0.006581f, -0.013164f, -0.008734f, -0.011554f, -0.025308f, 0.005399f, 0.023078f, -0.004871f, 0.023600f, 0.018202f, -0.015453f, -0.012309f, -0.011514f, 0.014470f, 0.009019f, -0.030876f, -0.017966f, 0.001339f, 0.001280f, -0.004830f, 0.003844f, 0.019813f, + -0.000717f, 0.015691f, 0.001427f, -0.012117f, 0.007610f, 0.026276f, -0.048731f, -0.091932f, 0.019162f, 0.033696f, -0.005080f, 0.046373f, 0.017676f, -0.058049f, -0.014750f, 0.012163f, 0.014107f, 0.015789f, -0.011844f, 0.026687f, 0.002144f, -0.017428f, -0.008066f, 0.009405f, 0.038039f, 0.049668f, 0.037511f, 0.059595f, -0.057600f, -0.016106f, -0.015056f, -0.058930f, -0.014243f, 0.009953f, 0.002843f, 0.006381f, -0.023576f, -0.026664f, 0.029727f, 0.066987f, -0.031942f, 0.034499f, -0.022847f, 0.008850f, -0.021086f, -0.003753f, -0.052514f, -0.019232f, -0.003165f, -0.072686f, -0.042580f, -0.071142f, -0.060101f, 0.039536f, 0.093394f, 0.074496f, 0.001999f, -0.004880f, 0.000055f, -0.017014f, -0.032382f, -0.113664f, -0.038134f, -0.016470f, 0.009054f, 0.004662f, -0.040251f, -0.028182f, 0.014505f, 0.049738f, 0.029574f, 0.015894f, 0.032438f, 0.055803f, 0.021710f, -0.056273f, 0.042671f, -0.033420f, -0.017622f, 0.033008f, 0.074547f, 0.015874f, 0.095644f, -0.023095f, -0.099923f, -0.011768f, -0.032419f, -0.061366f, 0.091939f, 0.025904f, 0.029742f, -0.000445f, -0.008458f, 0.026404f, 0.021759f, 0.001003f, + -0.003996f, -0.016282f, -0.003494f, -0.005040f, 0.024921f, 0.030129f, 0.036072f, -0.004433f, -0.001624f, -0.001774f, -0.001608f, 0.023509f, -0.010520f, -0.008309f, -0.014296f, -0.011309f, 0.013230f, -0.003113f, -0.000748f, 0.003688f, 0.008312f, 0.013656f, 0.016999f, -0.002778f, -0.010633f, -0.018377f, 0.008661f, 0.003005f, 0.008138f, 0.022119f, 0.019362f, -0.010383f, 0.004603f, 0.009744f, -0.017877f, -0.005777f, -0.004418f, -0.017222f, -0.008151f, -0.001155f, 0.014817f, -0.024764f, -0.038813f, -0.063759f, 0.039940f, -0.005925f, -0.038390f, 0.018964f, 0.042336f, 0.036694f, -0.074540f, -0.064361f, 0.016429f, -0.029753f, 0.007944f, 0.036872f, -0.019617f, -0.014399f, 0.060773f, 0.016691f, -0.008151f, -0.018974f, -0.016898f, 0.022973f, -0.013339f, -0.002404f, -0.001514f, -0.024363f, -0.009252f, -0.040719f, -0.054292f, 0.019739f, 0.030044f, -0.034202f, 0.025445f, 0.017479f, -0.011647f, -0.023655f, 0.003936f, 0.043371f, 0.025084f, 0.008013f, -0.042904f, -0.048027f, -0.023271f, 0.013287f, 0.054293f, -0.040261f, -0.021197f, -0.018174f, 0.032521f, 0.087313f, 0.023293f, -0.084917f, -0.018679f, -0.009781f, + 0.043977f, 0.001225f, 0.022895f, -0.010885f, -0.019958f, -0.018630f, -0.047980f, 0.045177f, 0.047855f, 0.019421f, 0.050581f, -0.015531f, 0.032797f, -0.014856f, -0.036098f, -0.039989f, -0.042759f, 0.007828f, -0.080264f, 0.084638f, -0.003736f, -0.031830f, -0.046309f, -0.037863f, -0.002344f, -0.024716f, -0.007306f, -0.044084f, -0.027134f, -0.078506f, -0.021678f, -0.051649f, 0.019352f, -0.018200f, 0.015556f, 0.017872f, 0.019147f, -0.012792f, 0.043736f, -0.009662f, 0.031744f, 0.001386f, 0.007811f, -0.002240f, 0.013935f, -0.006509f, -0.017217f, 0.003795f, 0.005225f, 0.016420f, -0.025818f, -0.008885f, 0.006949f, -0.025468f, 0.000299f, 0.009630f, -0.031871f, -0.013840f, 0.007877f, -0.004248f, -0.024374f, -0.037788f, -0.022624f, 0.014086f, -0.007032f, 0.017649f, 0.004395f, 0.000884f, 0.025965f, 0.001997f, 0.022354f, 0.008794f, 0.013994f, 0.051932f, 0.031162f, -0.014338f, 0.008047f, -0.017872f, 0.000877f, -0.008373f, 0.065366f, 0.049078f, 0.018798f, 0.009746f, 0.030789f, 0.027908f, -0.044279f, -0.063834f, 0.021788f, 0.049968f, 0.071450f, 0.000455f, -0.015945f, -0.044545f, -0.026179f, 0.030055f, + -0.000833f, -0.038019f, -0.076754f, -0.076706f, 0.016197f, -0.023027f, 0.043072f, -0.088382f, -0.029200f, 0.017251f, 0.012742f, 0.016888f, -0.027981f, 0.012900f, -0.002370f, -0.016554f, -0.003292f, -0.041441f, 0.038292f, 0.047299f, 0.035107f, -0.055811f, -0.029871f, -0.001264f, 0.018949f, 0.028182f, 0.030084f, 0.024213f, -0.006324f, -0.003888f, -0.007577f, 0.040079f, 0.110902f, 0.070158f, -0.057761f, -0.056684f, -0.036129f, -0.073049f, 0.086194f, 0.046122f, -0.026733f, -0.075769f, -0.072756f, 0.082876f, 0.050865f, 0.011246f, 0.063628f, -0.065945f, -0.007340f, 0.004283f, -0.017064f, 0.006641f, -0.024670f, -0.066692f, 0.016578f, -0.050921f, 0.068332f, 0.064871f, -0.024731f, -0.011263f, 0.000691f, 0.007654f, 0.072713f, 0.074710f, -0.118127f, -0.065593f, -0.038007f, 0.015159f, 0.033100f, 0.032388f, -0.045819f, -0.048755f, -0.058033f, -0.006858f, 0.060013f, 0.001666f, 0.011876f, -0.013376f, -0.064192f, 0.015121f, -0.026971f, -0.033190f, 0.014555f, 0.112648f, 0.037867f, -0.020643f, -0.028863f, -0.026517f, -0.022308f, 0.029879f, 0.034961f, 0.040950f, -0.007395f, 0.026576f, -0.039832f, 0.010027f, + 0.014383f, 0.018524f, -0.014410f, 0.008169f, 0.033090f, -0.008169f, -0.009519f, -0.005107f, 0.032656f, 0.021752f, 0.050904f, 0.013317f, -0.018271f, -0.013243f, 0.018777f, 0.063554f, 0.051232f, 0.011193f, -0.037959f, -0.046047f, -0.015116f, -0.010694f, 0.010889f, 0.004998f, -0.018827f, -0.023132f, 0.043477f, -0.070976f, 0.061940f, 0.091320f, 0.099098f, -0.111641f, 0.020553f, -0.003468f, -0.009561f, 0.047314f, -0.020141f, -0.033150f, 0.032761f, 0.016699f, 0.067915f, -0.006918f, -0.053742f, 0.001627f, -0.024518f, 0.040118f, -0.061757f, -0.021872f, -0.029020f, -0.041155f, 0.056401f, -0.041246f, -0.005858f, 0.038841f, 0.022551f, -0.013691f, -0.021575f, -0.057803f, 0.007472f, 0.076148f, 0.046375f, -0.003272f, 0.022644f, -0.017175f, 0.062195f, -0.041922f, 0.028727f, -0.023138f, 0.038632f, 0.064211f, -0.014273f, -0.041704f, 0.020583f, -0.056875f, 0.094196f, 0.011051f, -0.050007f, -0.017116f, -0.078016f, 0.009951f, 0.111712f, -0.020343f, -0.065756f, -0.045914f, 0.068479f, 0.020462f, -0.035987f, -0.001823f, 0.017630f, 0.038442f, 0.094115f, -0.076796f, 0.034186f, 0.077181f, -0.011726f, -0.091195f, + -0.088357f, -0.051699f, 0.154651f, -0.113197f, 0.038310f, -0.119219f, -0.057367f, 0.249089f, 0.023892f, -0.108574f, -0.104412f, -0.120256f, 0.151658f, 0.019580f, -0.028765f, -0.120493f, -0.029030f, 0.037710f, 0.122705f, -0.043972f, 0.013275f, -0.053055f, 0.018159f, 0.074628f, 0.045387f, -0.066666f, 0.031392f, 0.012300f, 0.028800f, 0.025732f, -0.067866f, 0.002384f, -0.016198f, -0.025568f, 0.013309f, -0.024788f, -0.050073f, 0.019242f, -0.014863f, 0.065061f, 0.009530f, -0.059687f, -0.068412f, -0.021640f, 0.001744f, 0.052494f, 0.039247f, 0.009328f, -0.032024f, 0.013611f, -0.001489f, -0.025221f, 0.001642f, 0.033492f, 0.029143f, 0.007403f, -0.050508f, 0.012736f, 0.019429f, 0.032087f, 0.028121f, 0.020731f, -0.009996f, -0.032464f, -0.012538f, -0.007551f, -0.010350f, 0.015763f, -0.026718f, -0.007204f, -0.009649f, -0.012479f, 0.040620f, -0.104876f, 0.018449f, -0.094223f, 0.041685f, 0.044637f, 0.088100f, 0.039022f, 0.020245f, 0.023087f, -0.027388f, -0.067259f, -0.046772f, -0.044152f, 0.018928f, 0.011019f, -0.011422f, 0.040302f, 0.062144f, -0.027739f, -0.038961f, 0.043171f, 0.007712f, -0.057401f, + -0.013172f, 0.026061f, -0.047350f, -0.008332f, 0.010510f, 0.024167f, 0.012899f, 0.034162f, 0.058536f, 0.010368f, -0.037266f, -0.004274f, 0.011307f, -0.029596f, -0.013210f, 0.027383f, -0.020742f, -0.037484f, 0.052216f, -0.012559f, -0.012892f, -0.020736f, -0.020476f, 0.033855f, 0.008652f, 0.007760f, 0.045068f, -0.021496f, -0.034758f, -0.001991f, 0.003384f, -0.014728f, 0.011550f, -0.002423f, -0.012358f, -0.002214f, -0.043841f, 0.009812f, 0.008625f, -0.007437f, 0.023674f, 0.015991f, 0.008296f, 0.010598f, -0.045282f, 0.053681f, -0.020062f, -0.019388f, 0.016470f, -0.049047f, 0.016009f, -0.036725f, 0.004310f, -0.029049f, 0.009477f, 0.012846f, 0.019898f, 0.001799f, 0.017653f, 0.026605f, -0.010230f, -0.005975f, 0.014774f, -0.000877f, -0.009319f, 0.008124f, 0.001909f, -0.006102f, -0.009377f, -0.008521f, -0.005619f, 0.019213f, -0.018317f, 0.018637f, 0.001310f, 0.005068f, 0.009343f, 0.005567f, 0.013594f, -0.000734f, -0.000339f, -0.008271f, -0.001800f, -0.011408f, 0.023102f, 0.001713f, -0.010317f, -0.016860f, -0.005488f, 0.008960f, -0.016468f, 0.021892f, -0.010594f, -0.027769f, 0.001610f, 0.011798f, + -0.001581f, -0.000801f, 0.002882f, -0.013127f, -0.007925f, -0.048981f, 0.078628f, -0.004286f, 0.044421f, -0.040706f, 0.004808f, -0.007539f, 0.013888f, 0.012536f, 0.023710f, -0.012421f, 0.017392f, -0.011151f, 0.009487f, -0.001967f, 0.007460f, 0.018807f, -0.002571f, 0.029281f, -0.012067f, 0.022072f, 0.000951f, -0.001154f, -0.008559f, 0.014058f, -0.011584f, 0.012679f, -0.007811f, 0.000692f, -0.006518f, 0.006847f, -0.005363f, 0.016562f, -0.005458f, -0.011962f, 0.026662f, -0.018805f, 0.013834f, 0.011107f, 0.003913f, 0.012822f, -0.016704f, -0.011652f, 0.012117f, 0.011333f, -0.007476f, -0.001755f, 0.012936f, -0.001387f, -0.018565f, 0.007864f, -0.009544f, 0.009229f, 0.012554f, 0.005815f, 0.004152f, 0.003932f, -0.019966f, 0.009443f, 0.005339f, -0.006170f, 0.007001f, -0.009505f, 0.004282f, -0.004836f, -0.001123f, -0.002700f, 0.006667f, 0.013077f, -0.018640f, 0.016224f, -0.003476f, -0.006702f, 0.009225f, -0.013031f, 0.005853f, 0.008819f, -0.002453f, -0.004865f, 0.006084f, -0.002731f, 0.003481f, -0.001944f, -0.006782f, -0.001232f, 0.006822f, -0.002090f, 0.002498f, -0.001673f, -0.005036f, 0.002891f, + 0.002618f, 0.004745f, -0.007201f, 0.005373f, -0.000709f, -0.003110f, 0.006380f, -0.007613f, 0.011313f, 0.005647f, -0.004557f, 0.011547f, -0.001136f, -0.004882f, 0.000236f, -0.004878f, 0.006808f, -0.007939f, 0.007843f, 0.003032f, 0.004114f, 0.001805f, -0.004877f, 0.003670f, 0.001586f, 0.000690f, 0.000504f, 0.000096f, -0.002121f, 0.001892f, -0.005088f, 0.005679f, 0.002135f, -0.005784f, 0.019568f, -0.066506f, -0.207193f, -0.030512f, 0.100569f, 0.051980f, 0.244495f, 0.045411f, 0.052551f, 0.033019f, -0.065897f, -0.092855f, -0.066122f, -0.119017f, -0.102235f, -0.058069f, -0.023797f, 0.067980f, 0.185695f, 0.147200f, 0.126859f, 0.072014f, -0.057159f, -0.093103f, -0.068433f, -0.128275f, -0.121397f, -0.037350f, -0.017040f, -0.028465f, 0.047065f, 0.073461f, 0.048688f, 0.089613f, 0.069372f, 0.021074f, 0.063812f, 0.012846f, -0.009484f, 0.005715f, -0.038463f, -0.101380f, -0.086031f, -0.073290f, -0.102589f, -0.043154f, 0.029977f, 0.020413f, 0.065706f, 0.074189f, 0.065026f, 0.066529f, 0.068158f, 0.042985f, 0.042243f, 0.004416f, -0.037847f, -0.070942f, -0.048271f, -0.066799f, -0.087993f, -0.043569f, + -0.040356f, -0.033104f, 0.012485f, 0.033163f, 0.031980f, 0.061994f, 0.077798f, 0.037394f, 0.054857f, 0.046566f, -0.012953f, 0.005198f, 0.021084f, -0.026065f, -0.023346f, -0.041678f, -0.074449f, -0.075031f, -0.059336f, -0.061743f, -0.012015f, 0.025649f, 0.017341f, 0.048768f, 0.073563f, 0.057713f, 0.053598f, 0.054776f, 0.036794f, 0.011867f, 0.003559f, -0.017261f, -0.031933f, -0.034663f, -0.051187f, -0.065126f, -0.068944f, -0.059687f, -0.053265f, -0.030725f, 0.007004f, 0.033484f, 0.077224f, 0.101741f, 0.089629f, 0.073953f, 0.063093f, 0.036177f, 0.007752f, -0.031686f, -0.064642f, -0.088631f, -0.092447f, -0.102369f, -0.075146f, -0.031669f, -0.007792f, 0.021155f, 0.060964f, 0.078228f, 0.084859f, 0.086950f, 0.073096f, 0.030664f, -0.002060f, -0.022776f, -0.049376f, -0.064751f, -0.060363f, -0.054082f, -0.038583f, -0.016164f, 0.002173f, 0.021164f, 0.028002f, 0.021071f, 0.023656f, 0.018333f, 0.012928f, 0.009613f, 0.010454f, 0.003037f, 0.003591f, -0.001313f, -0.005058f, -0.006736f, -0.005455f, -0.008649f, -0.009603f, -0.010971f, -0.009258f, -0.009177f, -0.007149f, -0.005247f, 0.000776f, 0.003325f, + 0.006263f, 0.008615f, 0.011742f, 0.010932f, 0.010220f, 0.007746f, 0.006361f, 0.003092f, -0.000415f, -0.004211f, -0.005981f, -0.008723f, -0.010005f, -0.010274f, -0.008481f, -0.008491f, -0.005082f, -0.001777f, 0.001992f, 0.004698f, 0.007817f, 0.007767f, 0.008667f, 0.008481f, 0.008822f, 0.007830f, 0.004259f, -0.001577f, -0.004413f, -0.007544f, -0.008861f, -0.008220f, -0.006475f, -0.006436f, -0.004328f, -0.003244f, -0.000860f, 0.001439f, 0.004124f, 0.005925f, 0.007967f, 0.007781f, 0.006881f, 0.004685f, 0.002195f, -0.000391f, -0.001788f, -0.003967f, -0.005449f, -0.006504f, -0.006288f, -0.005392f, -0.002930f, -0.000960f, 0.001419f, 0.003040f, 0.003989f, 0.004085f, 0.003471f, 0.002029f, 0.001687f, 0.000893f, 0.000351f, -0.000496f, -0.000973f, -0.001431f, -0.001460f, -0.001512f, -0.001200f, -0.000940f, -0.000515f, -0.000295f, -0.000029f, 0.000044f, 0.000248f, 0.000258f, 0.000300f, 0.000187f, 0.000174f, 0.000142f, 0.000133f, 0.000138f} + }, + { + {-0.006635f, 0.004994f, 0.003140f, -0.006549f, -0.001159f, 0.008330f, 0.002469f, 0.002044f, 0.004597f, -0.001107f, 0.001255f, -0.002190f, -0.008730f, -0.003452f, -0.000434f, -0.001948f, 0.002509f, -0.002726f, -0.000845f, -0.007419f, -0.000007f, 0.001247f, -0.005216f, -0.001165f, -0.006585f, -0.002375f, -0.002094f, -0.008009f, -0.003657f, 0.002505f, 0.003483f, 0.008904f, 0.005300f, 0.011383f, -0.001233f, -0.001902f, 0.001680f, -0.003982f, 0.009937f, 0.000542f, 0.004699f, 0.007828f, 0.001389f, -0.003236f, 0.003230f, -0.004257f, -0.005586f, -0.001459f, -0.002411f, -0.003153f, -0.010325f, -0.003402f, 0.000057f, 0.001552f, 0.003091f, 0.000799f, 0.005262f, -0.005930f, 0.004644f, -0.000108f, 0.001163f, 0.003207f, -0.004070f, -0.009209f, -0.003927f, 0.003814f, 0.005721f, 0.004253f, 0.000377f, 0.004335f, 0.003361f, 0.005923f, 0.003031f, 0.002509f, -0.003951f, 0.000225f, -0.000627f, -0.000884f, -0.003360f, -0.004263f, -0.001786f, -0.001056f, -0.000361f, -0.003311f, 0.000048f, 0.000367f, 0.001279f, 0.000204f, 0.002337f, -0.001348f, 0.001077f, -0.002114f, -0.003020f, 0.001408f, -0.000419f, -0.000178f, + 0.002142f, 0.001376f, 0.001881f, 0.000026f, 0.000205f, -0.001871f, 0.001076f, 0.000217f, 0.000651f, -0.000373f, 0.002898f, -0.000731f, 0.000185f, -0.001352f, -0.000973f, -0.001508f, 0.001250f, -0.001062f, -0.002589f, -0.001660f, -0.004699f, 0.004645f, -0.007275f, -0.004436f, 0.011954f, -0.001831f, 0.010579f, -0.005274f, 0.001112f, 0.005278f, 0.002401f, 0.000437f, -0.006948f, -0.009896f, -0.010326f, 0.001213f, 0.000361f, -0.002859f, 0.001508f, -0.009132f, 0.018463f, 0.002167f, -0.010123f, 0.002809f, -0.005258f, -0.005739f, 0.005574f, 0.007878f, -0.000021f, 0.001842f, 0.003815f, -0.000475f, 0.000135f, 0.006204f, -0.003258f, -0.001406f, 0.000461f, 0.011224f, -0.000126f, -0.001215f, -0.004113f, -0.006492f, 0.003526f, -0.001536f, -0.006659f, -0.002964f, -0.008036f, 0.001178f, -0.007280f, 0.000253f, -0.005490f, -0.001759f, -0.004817f, -0.010137f, -0.004096f, -0.000557f, 0.009745f, 0.001505f, -0.002698f, 0.005346f, 0.008931f, 0.001418f, -0.011941f, 0.005627f, 0.000062f, 0.002333f, 0.004048f, -0.002716f, 0.007723f, -0.003723f, -0.006718f, -0.007019f, -0.012484f, 0.001258f, -0.004201f, -0.004383f, + -0.005575f, -0.005856f, -0.000252f, -0.006396f, 0.002143f, -0.000933f, -0.003588f, -0.001285f, -0.004065f, 0.000166f, -0.000093f, -0.004685f, -0.001891f, 0.002008f, -0.000605f, 0.000384f, 0.001158f, 0.000522f, 0.000904f, 0.000679f, -0.001207f, -0.004192f, -0.000682f, -0.001528f, 0.001287f, -0.000474f, 0.000589f, -0.000746f, 0.000120f, 0.000004f, -0.000841f, -0.002609f, -0.002117f, -0.000296f, -0.000888f, -0.000966f, -0.000781f, -0.001942f, -0.000661f, -0.009052f, 0.015615f, -0.003697f, -0.013828f, 0.001254f, 0.004979f, 0.000625f, 0.004606f, 0.003782f, -0.010902f, 0.004146f, -0.002384f, -0.000269f, 0.000657f, -0.001849f, 0.008683f, -0.002438f, -0.005294f, -0.000303f, 0.006986f, 0.004442f, 0.002730f, 0.004160f, 0.016637f, 0.004510f, -0.005415f, 0.007591f, -0.006656f, 0.002451f, -0.005326f, 0.015609f, 0.002632f, -0.004856f, -0.002800f, -0.004870f, -0.001519f, 0.010408f, -0.007947f, -0.006729f, -0.001870f, 0.008645f, 0.005095f, -0.007688f, 0.002451f, 0.001926f, -0.004360f, 0.000381f, -0.016579f, 0.005747f, -0.003638f, -0.003062f, -0.010424f, 0.016306f, 0.001140f, -0.008284f, -0.006387f, -0.008129f, + 0.000870f, -0.001648f, 0.001138f, 0.000084f, -0.009460f, 0.012929f, -0.006994f, -0.006501f, 0.005303f, 0.001496f, 0.005271f, -0.003467f, -0.000515f, -0.007753f, 0.000956f, 0.001842f, -0.009763f, -0.007348f, 0.000978f, -0.006853f, 0.002764f, -0.006119f, -0.001516f, -0.001644f, 0.004703f, -0.007940f, -0.008118f, -0.001600f, -0.001076f, -0.001888f, -0.000285f, -0.003500f, -0.000658f, -0.002520f, -0.001907f, -0.001598f, -0.002348f, -0.003053f, -0.000021f, -0.004136f, 0.001392f, -0.002713f, 0.000259f, 0.000368f, -0.000747f, -0.001500f, 0.000056f, -0.001029f, 0.002466f, -0.000240f, -0.001566f, -0.000018f, -0.002981f, -0.000551f, -0.001714f, 0.000249f, 0.000731f, -0.002155f, -0.002518f, -0.000628f, 0.013471f, 0.000487f, 0.002967f, -0.011011f, 0.003476f, 0.006445f, 0.004714f, -0.000388f, -0.005496f, 0.014490f, 0.002567f, -0.002790f, 0.006973f, 0.005730f, -0.006678f, 0.008915f, -0.005880f, 0.014649f, 0.002120f, 0.013085f, -0.001365f, 0.002383f, -0.005045f, -0.014625f, 0.001643f, 0.000395f, 0.000554f, -0.002449f, 0.003076f, 0.007867f, -0.001905f, -0.007460f, -0.004960f, -0.010650f, -0.002931f, -0.005192f, + -0.005645f, 0.001093f, 0.003743f, 0.005944f, -0.006875f, 0.004931f, -0.004591f, -0.005640f, -0.000743f, 0.005046f, 0.000958f, 0.001337f, -0.010718f, -0.010255f, -0.001937f, -0.002959f, -0.007832f, 0.017248f, 0.007976f, -0.000962f, 0.003326f, 0.007007f, -0.017257f, -0.008617f, 0.011611f, -0.006333f, 0.010891f, 0.002597f, -0.002246f, -0.011464f, -0.008542f, 0.013924f, 0.007321f, 0.013175f, -0.013682f, -0.000811f, -0.009487f, -0.000617f, 0.003387f, -0.004920f, 0.001620f, 0.001160f, -0.008520f, 0.007808f, 0.000862f, 0.001310f, -0.001388f, -0.015033f, 0.001650f, -0.003501f, -0.004780f, -0.004596f, -0.000922f, 0.002801f, -0.002451f, 0.001340f, -0.005349f, -0.000966f, -0.002456f, 0.003582f, -0.000668f, -0.000241f, -0.001746f, 0.000296f, -0.001826f, 0.001343f, -0.003032f, -0.001266f, 0.000979f, -0.000677f, -0.000208f, -0.000005f, -0.000045f, 0.001592f, 0.000852f, -0.000060f, -0.002141f, -0.002005f, -0.002322f, 0.002177f, 0.000873f, 0.003087f, 0.001484f, -0.001071f, 0.001255f, -0.022600f, 0.001169f, -0.002931f, 0.006078f, -0.013689f, 0.004334f, -0.004639f, 0.022778f, -0.006085f, -0.011857f, -0.004360f, + -0.009952f, 0.003058f, 0.008432f, -0.002735f, 0.015909f, 0.001600f, -0.004744f, 0.003810f, 0.001906f, 0.004120f, -0.005690f, -0.001029f, 0.005896f, 0.009327f, 0.003666f, -0.001902f, 0.004453f, -0.008393f, -0.002648f, 0.011738f, 0.008376f, 0.013789f, 0.009768f, -0.000266f, -0.007075f, -0.014777f, 0.010134f, -0.001646f, -0.010795f, 0.005548f, -0.002884f, -0.016547f, 0.000388f, -0.013800f, -0.001137f, 0.012414f, -0.002158f, -0.009291f, -0.004309f, 0.011855f, -0.010349f, -0.016893f, 0.017070f, -0.003256f, -0.004207f, 0.003982f, 0.002126f, 0.001999f, 0.004069f, 0.004097f, 0.002230f, -0.012454f, -0.004769f, 0.009575f, -0.001345f, -0.003711f, 0.002856f, 0.016457f, -0.008406f, -0.009172f, -0.004225f, 0.006727f, 0.003381f, -0.014877f, -0.006652f, -0.005130f, -0.006528f, 0.004864f, -0.000929f, -0.001141f, -0.005571f, -0.004393f, -0.011803f, -0.006780f, 0.002787f, 0.000376f, 0.001821f, -0.000486f, 0.006916f, 0.007198f, 0.001213f, 0.002624f, -0.003669f, 0.000822f, 0.000298f, 0.002940f, -0.004508f, -0.002045f, 0.000507f, 0.000103f, 0.002034f, -0.000087f, -0.002582f, 0.002592f, 0.000915f, -0.004944f, + -0.001016f, 0.001437f, 0.000839f, 0.000851f, -0.001290f, 0.000666f, -0.002459f, -0.002366f, -0.002107f, 0.001267f, -0.001109f, -0.001201f, -0.000412f, -0.019921f, -0.000553f, 0.005160f, 0.018921f, 0.019555f, -0.006475f, 0.009670f, -0.012796f, 0.004031f, 0.008243f, 0.012512f, -0.003817f, 0.018833f, -0.003699f, 0.015953f, -0.008925f, 0.013343f, -0.006907f, -0.022562f, -0.005223f, 0.005459f, -0.007870f, 0.008516f, -0.004986f, -0.005529f, 0.002295f, -0.024721f, -0.008078f, -0.000653f, -0.004405f, -0.001625f, -0.012011f, -0.004252f, -0.004371f, 0.003759f, 0.024923f, 0.014291f, -0.014703f, 0.007815f, 0.019905f, 0.004816f, -0.007161f, 0.004840f, -0.005419f, -0.006122f, 0.014294f, 0.009881f, -0.010161f, -0.001506f, 0.010155f, 0.021336f, -0.007045f, 0.011534f, 0.031783f, 0.013572f, -0.014830f, 0.005784f, 0.003586f, -0.017937f, 0.002542f, -0.014851f, 0.006445f, -0.016170f, -0.003891f, 0.000505f, 0.007456f, -0.010609f, -0.003005f, -0.005340f, -0.009611f, 0.012118f, 0.010437f, -0.000737f, -0.007072f, 0.001742f, 0.001768f, 0.001579f, 0.002860f, 0.008961f, 0.001692f, -0.012289f, -0.000307f, 0.014579f, + 0.000378f, 0.003151f, 0.002889f, 0.004309f, -0.004675f, -0.002302f, -0.007463f, -0.003302f, -0.006871f, -0.000724f, 0.003984f, -0.001045f, -0.003914f, 0.002000f, -0.000838f, 0.000690f, -0.002142f, -0.001602f, 0.002694f, -0.000369f, 0.006518f, 0.001443f, -0.001439f, 0.003300f, -0.000116f, -0.001711f, -0.002506f, -0.003512f, 0.001435f, -0.001940f, -0.000921f, 0.001543f, -0.000186f, 0.002899f, 0.000168f, -0.004197f, 0.008671f, -0.004334f, -0.020043f, 0.004601f, -0.016104f, 0.002577f, -0.005347f, 0.020780f, -0.010577f, 0.002913f, 0.005456f, 0.002040f, 0.007535f, -0.003081f, 0.022753f, 0.001761f, -0.014781f, -0.002772f, -0.010903f, -0.001771f, -0.003558f, -0.010220f, -0.012814f, -0.003313f, -0.008258f, -0.003923f, 0.014553f, 0.005388f, -0.012330f, 0.004776f, -0.014723f, -0.002818f, 0.010686f, -0.020106f, -0.017737f, 0.010053f, 0.009458f, 0.004877f, -0.000621f, -0.012227f, 0.004812f, -0.006049f, -0.011536f, -0.005360f, 0.000601f, 0.003606f, 0.019041f, -0.007558f, -0.002182f, 0.000967f, 0.008864f, 0.004639f, -0.006632f, -0.008568f, -0.015315f, -0.004711f, -0.003417f, -0.008456f, -0.009836f, 0.006201f, + 0.012707f, -0.000111f, -0.008174f, 0.014055f, 0.002680f, -0.007013f, 0.001701f, -0.002116f, -0.001865f, -0.004912f, -0.002783f, 0.009103f, -0.007316f, -0.010973f, -0.006329f, 0.005658f, -0.008479f, 0.014851f, 0.006642f, -0.002523f, -0.006156f, -0.006998f, 0.004201f, 0.009201f, 0.018939f, -0.005546f, 0.009674f, 0.000261f, -0.000073f, 0.000976f, 0.003009f, -0.003560f, 0.000049f, 0.002280f, 0.003955f, -0.002571f, 0.002756f, -0.002219f, 0.009158f, 0.003444f, 0.006876f, 0.000014f, 0.004660f, -0.000320f, 0.004131f, -0.000899f, -0.000421f, 0.004792f, 0.001800f, 0.000518f, 0.002536f, 0.000498f, 0.004765f, -0.003641f, 0.001083f, 0.003209f, 0.004375f, 0.003732f, -0.001515f, -0.004967f, -0.000125f, 0.002990f, 0.000620f, 0.000475f, 0.003921f, 0.010331f, 0.019738f, -0.014773f, -0.000546f, 0.013432f, -0.006472f, -0.009692f, 0.012349f, -0.019561f, -0.001224f, 0.003581f, -0.002571f, -0.007316f, -0.008628f, -0.004165f, 0.003351f, -0.001078f, 0.009322f, 0.004681f, -0.003157f, -0.007471f, -0.005462f, 0.015362f, 0.000573f, -0.018845f, 0.008744f, -0.011932f, -0.011696f, 0.007122f, 0.013524f, 0.013788f, + 0.010458f, -0.000362f, 0.007058f, 0.004794f, 0.006662f, -0.006196f, -0.000341f, -0.005589f, -0.013576f, 0.005669f, -0.003526f, -0.000769f, -0.003017f, 0.001292f, -0.002268f, 0.014939f, 0.027813f, 0.004561f, -0.004857f, -0.000107f, -0.019917f, 0.019277f, -0.013590f, -0.008824f, -0.013079f, -0.016012f, 0.027035f, 0.001458f, -0.015072f, -0.005470f, 0.018646f, 0.009609f, -0.014184f, -0.010599f, 0.021377f, 0.001711f, 0.002182f, 0.027660f, -0.013249f, 0.007587f, -0.009958f, -0.027484f, 0.012880f, 0.013211f, 0.002181f, -0.015872f, -0.002254f, -0.003457f, 0.003255f, -0.006895f, 0.010030f, 0.006182f, -0.021748f, 0.009212f, 0.010382f, 0.013257f, 0.002270f, -0.011624f, 0.019400f, 0.003286f, -0.001747f, -0.001501f, -0.006534f, -0.006859f, -0.002481f, 0.001221f, 0.005844f, -0.000022f, 0.000459f, -0.000632f, -0.005241f, 0.002191f, 0.002335f, 0.001031f, -0.002414f, -0.001445f, 0.003907f, 0.001399f, 0.004453f, -0.002923f, 0.001037f, -0.006811f, 0.000756f, 0.006424f, -0.008629f, 0.001193f, -0.006764f, 0.007856f, -0.003288f, -0.000182f, -0.005270f, -0.000032f, 0.004532f, -0.000542f, 0.006186f, 0.000021f, + -0.001775f, 0.004487f, 0.009478f, 0.012081f, 0.022300f, 0.020432f, -0.000699f, 0.017438f, 0.007898f, 0.017780f, 0.017182f, -0.028263f, 0.010392f, -0.009067f, -0.012163f, -0.008840f, -0.002569f, -0.017980f, -0.003680f, 0.004543f, -0.015360f, -0.031643f, 0.007376f, -0.002116f, -0.028500f, -0.020882f, -0.018631f, -0.010352f, 0.001134f, -0.005254f, 0.006910f, -0.003656f, 0.011490f, 0.022311f, -0.012589f, 0.007670f, -0.004879f, -0.010043f, -0.007282f, 0.001477f, -0.002060f, -0.000795f, 0.016649f, -0.000560f, 0.016782f, 0.021717f, 0.006571f, 0.009420f, 0.014415f, -0.001749f, 0.003016f, -0.021198f, 0.020055f, -0.017266f, -0.005996f, -0.005418f, 0.001891f, -0.004685f, -0.016467f, -0.014500f, -0.031931f, 0.029169f, -0.032620f, -0.031622f, 0.005496f, 0.030584f, 0.010938f, -0.003815f, -0.007532f, 0.014132f, -0.015244f, 0.017646f, -0.004986f, 0.002351f, 0.001938f, -0.011509f, 0.012342f, -0.013619f, -0.011093f, -0.001198f, 0.004532f, -0.013005f, -0.001938f, 0.007167f, -0.000925f, -0.003483f, 0.009518f, -0.006100f, -0.011668f, -0.002605f, 0.006067f, -0.007706f, -0.004451f, -0.005243f, -0.001078f, 0.003658f, + -0.002417f, 0.001170f, -0.001844f, -0.004183f, 0.001334f, -0.002655f, 0.002842f, -0.002781f, 0.004065f, -0.001096f, 0.007490f, -0.000965f, 0.002964f, 0.004118f, -0.002451f, -0.004901f, -0.000418f, -0.001135f, -0.000186f, -0.001455f, 0.003537f, 0.000263f, 0.004542f, -0.003889f, 0.001671f, -0.008440f, 0.000484f, 0.000450f, -0.003027f, 0.002428f, 0.013195f, 0.017217f, 0.017215f, 0.018742f, 0.044324f, 0.019852f, 0.025296f, -0.012644f, 0.041025f, -0.023574f, 0.001045f, 0.008965f, -0.000270f, -0.015564f, 0.005053f, -0.004374f, -0.035127f, 0.013181f, -0.008905f, 0.003662f, -0.003359f, -0.011715f, -0.000051f, 0.010320f, -0.014225f, -0.007452f, -0.002276f, 0.008137f, -0.021447f, 0.013440f, 0.005048f, -0.019705f, -0.001595f, 0.007882f, -0.017818f, 0.006543f, -0.021355f, 0.009718f, -0.001884f, -0.007003f, -0.000883f, -0.014027f, 0.017837f, 0.021027f, -0.020209f, -0.011637f, 0.009094f, -0.007299f, 0.005578f, 0.004981f, 0.001309f, 0.000557f, 0.024352f, -0.006277f, -0.016350f, 0.014983f, -0.000663f, -0.012964f, -0.010822f, -0.020399f, 0.003871f, 0.005399f, 0.010099f, 0.009601f, -0.009403f, -0.015883f, + 0.008780f, 0.004270f, 0.030462f, 0.003076f, -0.003811f, 0.000630f, 0.002009f, -0.009142f, -0.004054f, -0.011426f, 0.012465f, 0.007073f, 0.008110f, -0.002541f, -0.019517f, -0.017922f, -0.005847f, -0.001734f, -0.007023f, -0.012472f, 0.003447f, -0.005552f, 0.008029f, 0.001255f, -0.001321f, 0.004841f, 0.005173f, 0.008095f, 0.007727f, 0.006069f, -0.000063f, -0.002032f, 0.002192f, 0.005378f, 0.004280f, -0.002657f, -0.002356f, -0.001745f, 0.001409f, -0.000201f, -0.001541f, -0.000090f, -0.009602f, 0.000989f, 0.006262f, 0.004613f, -0.007480f, -0.005574f, 0.010715f, 0.005541f, 0.010627f, 0.004001f, -0.007770f, 0.007180f, -0.001899f, -0.006080f, 0.001145f, -0.008592f, -0.004606f, -0.002347f, 0.003214f, -0.001896f, -0.023970f, -0.026941f, 0.044997f, 0.031380f, 0.040228f, 0.002582f, -0.025791f, 0.009108f, 0.021003f, 0.014954f, -0.006567f, -0.016316f, -0.004788f, -0.005991f, -0.007906f, -0.014047f, -0.005622f, -0.011797f, 0.030006f, 0.004804f, 0.004971f, 0.000237f, 0.001767f, 0.003194f, -0.011067f, 0.019857f, 0.011227f, -0.001176f, 0.007238f, -0.002820f, 0.020451f, 0.003773f, -0.001788f, -0.033418f, + -0.002452f, 0.002107f, 0.003207f, -0.006254f, 0.004204f, -0.015827f, 0.027156f, 0.021984f, 0.021236f, 0.018520f, -0.014533f, -0.020151f, 0.015493f, 0.004773f, 0.007589f, -0.001320f, -0.023439f, -0.016967f, 0.001384f, -0.013226f, 0.000185f, -0.011107f, -0.004806f, 0.014085f, 0.004511f, -0.010042f, 0.003629f, -0.025935f, 0.000827f, -0.043975f, -0.022318f, -0.041547f, 0.035917f, 0.032350f, 0.034555f, 0.041845f, 0.020296f, -0.006912f, -0.018520f, -0.005619f, -0.000990f, 0.006018f, 0.033181f, -0.010934f, -0.025142f, 0.019222f, -0.015986f, 0.008380f, -0.003629f, -0.003610f, 0.007815f, -0.007451f, -0.013577f, -0.003839f, -0.016726f, -0.003543f, -0.015035f, -0.003451f, 0.002159f, -0.001315f, -0.001772f, -0.004080f, -0.005215f, -0.010397f, -0.000110f, 0.005484f, 0.000902f, -0.005226f, 0.001883f, 0.009119f, -0.001177f, 0.006105f, 0.003386f, 0.003623f, 0.002607f, -0.012016f, 0.010595f, -0.004630f, -0.003770f, 0.007103f, 0.002493f, 0.007851f, 0.000853f, -0.009991f, -0.001808f, 0.000251f, 0.001800f, -0.006099f, 0.000344f, -0.000398f, -0.015954f, -0.021468f, 0.018934f, 0.024567f, -0.012064f, 0.022809f, + 0.003219f, -0.009684f, 0.009174f, -0.033057f, -0.010255f, 0.009326f, -0.010531f, -0.020272f, -0.038208f, 0.018774f, -0.016418f, 0.004421f, 0.024753f, 0.005942f, 0.028863f, 0.022080f, 0.012553f, 0.004740f, -0.017042f, -0.005000f, -0.008921f, 0.001563f, 0.016074f, 0.008380f, 0.003320f, 0.013724f, 0.039240f, -0.002048f, -0.033372f, -0.014653f, 0.005394f, 0.008014f, -0.001910f, 0.000829f, 0.003161f, -0.014235f, 0.000878f, -0.031411f, 0.007066f, -0.032860f, -0.011982f, -0.025446f, 0.012529f, -0.012694f, -0.020879f, 0.031862f, 0.008936f, 0.002598f, -0.014340f, -0.019114f, 0.004773f, 0.007576f, 0.002807f, 0.010382f, -0.016292f, 0.035820f, -0.043494f, 0.011314f, -0.018130f, -0.026400f, -0.014793f, 0.022797f, 0.006868f, -0.024749f, 0.017482f, -0.019709f, 0.048307f, -0.004504f, -0.005306f, -0.023501f, 0.002809f, -0.031351f, -0.016823f, 0.041823f, -0.016842f, -0.018995f, -0.012409f, 0.012505f, 0.001565f, 0.017727f, 0.008830f, 0.009267f, 0.012914f, 0.007022f, -0.001194f, 0.001333f, 0.006155f, 0.002639f, -0.003426f, 0.010382f, -0.003271f, -0.003620f, -0.007837f, -0.007030f, -0.003169f, 0.003831f, + -0.006174f, 0.000453f, 0.003000f, -0.002544f, 0.002614f, 0.000485f, 0.010232f, 0.005369f, -0.000029f, -0.002092f, 0.000001f, -0.000747f, 0.006106f, -0.005446f, 0.005536f, -0.001538f, 0.002439f, 0.008585f, -0.002740f, 0.000450f, -0.001208f, -0.004320f, 0.010491f, -0.001479f, 0.008178f, 0.045589f, 0.046908f, 0.044251f, 0.009560f, -0.011681f, -0.007228f, -0.028269f, 0.023222f, 0.000824f, 0.013688f, -0.008358f, 0.004502f, -0.010246f, -0.007843f, -0.016287f, 0.009028f, -0.016965f, 0.028245f, -0.073182f, -0.021198f, 0.000667f, -0.022034f, 0.015900f, -0.022653f, 0.004831f, -0.008660f, 0.023200f, 0.004257f, 0.022337f, 0.001763f, -0.005103f, -0.000203f, 0.008262f, -0.025535f, -0.018321f, -0.019828f, -0.002695f, 0.025157f, -0.049187f, 0.017267f, 0.043022f, 0.005427f, -0.031426f, -0.001089f, -0.026449f, -0.025325f, 0.017771f, -0.003185f, -0.021587f, 0.012223f, 0.001929f, -0.007943f, -0.012146f, 0.007171f, 0.017952f, 0.010983f, -0.025101f, -0.018263f, 0.014543f, 0.021893f, -0.017640f, -0.023316f, 0.011679f, 0.024509f, -0.029515f, -0.000879f, -0.026340f, -0.036158f, 0.043292f, -0.007045f, 0.006777f, + -0.007960f, 0.026870f, -0.006172f, 0.006655f, -0.014247f, 0.023382f, 0.013054f, 0.021518f, 0.024899f, -0.024582f, -0.027107f, -0.011005f, -0.005087f, -0.016265f, -0.040857f, 0.004608f, 0.002362f, 0.000066f, -0.002890f, -0.006568f, -0.005387f, 0.011860f, -0.000909f, -0.005001f, 0.010999f, -0.011913f, -0.006258f, 0.004530f, 0.021475f, -0.006409f, -0.006476f, 0.001117f, -0.002584f, 0.007447f, -0.002472f, -0.001125f, -0.003651f, -0.005941f, -0.014893f, -0.021467f, 0.003912f, -0.001470f, -0.016299f, -0.008151f, 0.004412f, -0.005669f, -0.018486f, -0.010301f, -0.001160f, -0.003198f, 0.001567f, 0.005312f, 0.002297f, -0.000014f, 0.015305f, 0.005281f, 0.024043f, -0.007683f, 0.000043f, -0.034336f, -0.015586f, -0.007315f, -0.028988f, -0.041992f, -0.007209f, -0.013535f, 0.041050f, 0.012844f, 0.060661f, 0.011561f, -0.016412f, 0.008652f, 0.012154f, -0.048201f, 0.003600f, 0.043705f, 0.028095f, -0.027777f, 0.004718f, 0.022215f, -0.038500f, -0.005567f, -0.018862f, 0.017446f, -0.014579f, 0.011752f, 0.003496f, -0.007022f, 0.002966f, 0.000650f, -0.011806f, 0.014147f, -0.025871f, -0.009683f, -0.010628f, -0.032785f, + -0.006198f, -0.003669f, 0.001380f, 0.003162f, -0.008295f, -0.009814f, 0.062014f, 0.019150f, -0.022904f, -0.042543f, -0.014845f, 0.005141f, 0.045066f, -0.009970f, -0.004899f, -0.023969f, -0.005735f, -0.016647f, 0.037109f, -0.028737f, 0.033200f, 0.041734f, -0.040577f, 0.028095f, 0.011195f, -0.016857f, -0.014801f, 0.010759f, 0.020043f, -0.089693f, -0.011130f, 0.000552f, -0.011574f, 0.024536f, -0.011394f, -0.066869f, -0.025472f, -0.018993f, -0.029723f, -0.029076f, 0.006060f, 0.006520f, -0.016502f, -0.014678f, -0.027358f, 0.003591f, -0.009651f, 0.003091f, -0.011446f, -0.013607f, -0.015411f, 0.004420f, -0.002501f, 0.010524f, -0.013236f, 0.007528f, -0.000953f, -0.013651f, -0.029107f, -0.006807f, -0.000986f, 0.010347f, -0.003441f, -0.039070f, 0.008913f, 0.019946f, 0.008475f, -0.000210f, -0.013168f, 0.014836f, -0.001216f, -0.003892f, -0.023238f, -0.003406f, -0.007512f, 0.020583f, -0.002256f, 0.003901f, 0.000900f, 0.004996f, 0.013411f, -0.008485f, 0.001546f, 0.001386f, -0.003599f, 0.001805f, 0.006240f, -0.027716f, -0.023634f, -0.008590f, -0.018950f, -0.013059f, -0.004663f, -0.011795f, -0.014943f, -0.014455f, + -0.003522f, -0.003502f, -0.005954f, -0.010448f, -0.004007f, -0.007186f, -0.001262f, -0.003467f, -0.012777f, 0.010302f, 0.060142f, -0.001741f, -0.070021f, -0.039139f, -0.043319f, -0.008059f, -0.023944f, -0.000940f, -0.035541f, 0.058431f, 0.034733f, -0.006172f, 0.045940f, 0.001437f, 0.049528f, 0.011955f, -0.028527f, -0.038855f, -0.024513f, -0.031330f, -0.014007f, 0.007773f, 0.021378f, -0.006867f, 0.007018f, -0.025862f, 0.004466f, -0.037351f, -0.003363f, -0.002051f, 0.012883f, -0.013972f, 0.060009f, 0.007839f, -0.001552f, 0.039902f, -0.015453f, -0.028140f, -0.016562f, 0.024495f, -0.001868f, -0.015937f, 0.006679f, -0.000127f, 0.051029f, 0.012694f, 0.000140f, -0.019712f, -0.030828f, -0.077731f, 0.005019f, -0.061733f, 0.031297f, 0.106152f, -0.075823f, -0.016121f, 0.017149f, -0.012968f, -0.013383f, -0.021148f, 0.017705f, -0.021711f, -0.073360f, -0.019397f, -0.073154f, -0.015204f, -0.002191f, -0.045742f, -0.006547f, -0.065867f, 0.028559f, -0.006518f, -0.041894f, 0.102918f, 0.007912f, 0.042035f, 0.035076f, 0.056839f, -0.034920f, -0.002214f, -0.021096f, -0.007471f, -0.014314f, 0.027074f, 0.017007f, 0.024342f, + -0.050086f, -0.009914f, -0.027311f, -0.034991f, -0.029559f, -0.017902f, -0.004084f, 0.019697f, 0.016014f, 0.011360f, 0.014120f, -0.003817f, 0.004441f, 0.028138f, -0.005362f, 0.027850f, 0.007957f, -0.023825f, -0.006793f, 0.008791f, -0.010620f, -0.003875f, 0.032294f, 0.000741f, -0.010131f, 0.036663f, -0.017127f, -0.002311f, -0.030255f, -0.007057f, -0.021206f, 0.016005f, -0.016293f, -0.006869f, -0.006396f, 0.006299f, -0.007429f, 0.014505f, 0.000006f, 0.014997f, 0.003753f, -0.005219f, -0.010522f, -0.013804f, -0.010859f, -0.021091f, -0.122602f, -0.012117f, -0.030775f, -0.033768f, 0.045690f, 0.036386f, -0.042473f, -0.033431f, 0.085483f, -0.008859f, 0.028251f, 0.005110f, -0.003662f, -0.009033f, -0.008444f, -0.026778f, 0.000464f, 0.010518f, 0.015943f, 0.010977f, 0.031059f, -0.023064f, 0.000194f, -0.022460f, -0.013044f, 0.010116f, 0.043747f, 0.028351f, 0.038720f, 0.034765f, -0.006868f, 0.013041f, 0.021194f, 0.000772f, -0.034061f, -0.005622f, 0.049027f, -0.007918f, -0.068159f, -0.029655f, 0.008324f, -0.057699f, -0.024502f, -0.059149f, -0.040378f, -0.036702f, 0.056067f, 0.038538f, -0.011274f, 0.038570f, + 0.015304f, 0.054117f, 0.036625f, 0.017877f, -0.093258f, -0.020290f, 0.004949f, -0.081913f, -0.059707f, -0.022520f, -0.015356f, -0.096065f, 0.021560f, 0.054179f, 0.072433f, 0.086615f, -0.028211f, -0.055348f, 0.000079f, -0.055850f, -0.041342f, -0.077820f, -0.086582f, -0.060990f, -0.051258f, 0.058467f, 0.003199f, 0.012254f, -0.052153f, -0.054750f, -0.048996f, -0.004351f, 0.076460f, 0.096802f, 0.003179f, -0.034725f, -0.026534f, -0.038236f, -0.100432f, -0.044584f, -0.044433f, -0.011903f, -0.003343f, -0.022409f, 0.026943f, 0.000369f, -0.007417f, -0.035541f, -0.046505f, -0.024117f, -0.026057f, -0.041031f, -0.008819f, -0.010169f, -0.003697f, -0.010764f, -0.018639f, 0.025431f, 0.015801f, -0.002287f, -0.022558f, 0.016863f, 0.027665f, 0.002369f, -0.023165f, -0.012029f, 0.019444f, 0.005510f, -0.004941f, -0.022229f, 0.019421f, -0.004283f, -0.007074f, 0.002464f, 0.015137f, 0.004070f, -0.004023f, 0.002564f, 0.011808f, 0.002167f, -0.039126f, -0.093276f, 0.035109f, 0.003584f, -0.063734f, 0.057834f, 0.028258f, 0.017246f, -0.014594f, -0.057005f, -0.014994f, 0.000868f, 0.053878f, 0.071959f, 0.003435f, 0.018899f, + 0.003894f, 0.001517f, -0.004237f, 0.009089f, -0.031247f, 0.101676f, 0.023797f, -0.034172f, -0.034254f, -0.015617f, 0.003720f, 0.049335f, -0.025027f, -0.008317f, -0.000781f, 0.024619f, -0.025113f, 0.012636f, 0.000926f, -0.006362f, -0.085363f, -0.027209f, 0.026353f, 0.043134f, 0.014805f, -0.010137f, -0.025161f, -0.056538f, -0.006856f, 0.008437f, -0.014027f, 0.000285f, -0.015321f, -0.036682f, 0.035516f, -0.009048f, 0.012230f, -0.039168f, -0.008806f, 0.097799f, 0.006670f, -0.011590f, 0.010775f, 0.012190f, 0.008560f, 0.048929f, -0.018902f, -0.023080f, 0.036260f, -0.004835f, 0.021209f, 0.013056f, 0.031508f, -0.013081f, -0.037328f, 0.017903f, -0.017618f, 0.002305f, 0.138446f, 0.133395f, 0.059485f, -0.012524f, -0.007594f, 0.016377f, 0.062351f, 0.028603f, -0.019481f, -0.002639f, -0.009039f, -0.036112f, -0.038526f, 0.020214f, 0.009688f, 0.004866f, 0.030779f, -0.004701f, -0.018318f, 0.018239f, 0.007186f, 0.027164f, -0.040935f, -0.033209f, -0.041584f, 0.005630f, -0.019099f, 0.001859f, -0.008941f, 0.014355f, 0.015735f, 0.033878f, 0.019129f, -0.036790f, -0.027604f, 0.012692f, -0.023162f, -0.013141f, + 0.002019f, 0.011486f, -0.015845f, -0.036173f, -0.004801f, 0.000900f, -0.003899f, 0.015565f, 0.003427f, -0.029241f, 0.008106f, 0.046451f, 0.052942f, 0.039756f, 0.045061f, 0.032537f, 0.040558f, -0.011461f, -0.003373f, 0.015731f, -0.005335f, 0.015495f, 0.013733f, 0.020924f, 0.038530f, 0.068995f, 0.009966f, -0.071298f, -0.018142f, 0.016682f, 0.011561f, -0.016582f, 0.055219f, 0.027705f, 0.022012f, -0.017341f, 0.064499f, -0.003191f, 0.002470f, -0.016493f, 0.034843f, 0.023087f, -0.047786f, -0.070551f, -0.018944f, 0.012508f, 0.005095f, -0.013043f, -0.064375f, -0.005986f, 0.024369f, 0.005830f, -0.020966f, -0.008516f, -0.018605f, -0.024605f, 0.016441f, 0.019146f, -0.040848f, -0.046455f, -0.015236f, -0.057759f, 0.016936f, 0.051646f, -0.043726f, 0.049666f, -0.021988f, -0.026592f, -0.049197f, -0.069557f, -0.077770f, -0.074087f, -0.037301f, 0.000488f, 0.029424f, 0.013590f, 0.029313f, -0.038845f, -0.086823f, -0.034160f, -0.083395f, -0.147701f, -0.055326f, 0.119949f, 0.205716f, 0.120431f, -0.048982f, -0.039770f, -0.180609f, -0.162705f, 0.114742f, 0.020383f, 0.150364f, 0.155067f, 0.161865f, 0.054671f, + -0.062805f, -0.078930f, -0.087477f, -0.100893f, -0.013455f, 0.101793f, 0.172407f, 0.055389f, 0.019134f, -0.007112f, -0.083927f, -0.124343f, -0.082950f, 0.017067f, 0.119533f, 0.055919f, 0.077938f, 0.063054f, 0.024291f, -0.044035f, -0.048320f, 0.002977f, -0.026108f, 0.010463f, 0.059309f, 0.062220f, 0.046695f, 0.009898f, 0.024545f, 0.001876f, -0.037385f, 0.009239f, 0.017504f, -0.005166f, 0.008315f, -0.010130f, 0.085443f, 0.049674f, 0.054802f, 0.033138f, -0.027249f, -0.072693f, -0.102809f, 0.016874f, 0.038178f, 0.071726f, 0.072836f, 0.092588f, 0.046295f, -0.066423f, -0.082568f, -0.101473f, -0.016248f, 0.001148f, 0.057593f, 0.033371f, 0.019485f, 0.031440f, -0.049310f, -0.150294f, -0.099561f, -0.092080f, -0.019321f, 0.013517f, 0.037131f, -0.007841f, -0.018294f, -0.033339f, -0.039362f, -0.006618f, 0.014239f, -0.046543f, 0.065155f, 0.031277f, 0.057868f, -0.127223f, 0.028854f, 0.017144f, -0.039087f, 0.028451f, -0.029225f, -0.014515f, -0.008689f, -0.018268f, 0.054830f, 0.100840f, -0.029263f, 0.020179f, -0.013992f, 0.024065f, 0.051404f, -0.015833f, -0.009283f, -0.028089f, 0.014840f, -0.017886f, + -0.055583f, 0.040487f, 0.068751f, -0.009212f, -0.035842f, -0.033120f, -0.072211f, -0.020099f, 0.054935f, 0.037051f, 0.019215f, -0.079838f, -0.046111f, -0.034928f, 0.070588f, 0.060965f, 0.053753f, -0.155701f, -0.103374f, -0.012797f, 0.077006f, 0.163960f, 0.000789f, -0.197646f, -0.072380f, 0.006376f, 0.066729f, -0.005663f, 0.036702f, 0.027399f, -0.086070f, -0.038002f, -0.023684f, -0.051955f, 0.003759f, -0.097346f, 0.015374f, 0.038208f, -0.117178f, -0.075376f, -0.036415f, -0.015269f, 0.130078f, -0.001019f, -0.199188f, 0.018915f, 0.028288f, 0.030196f, 0.078741f, 0.036388f, -0.084982f, 0.004042f, -0.003074f, 0.170340f, 0.120545f, -0.100270f, 0.091367f, -0.053569f, 0.036478f, 0.093958f, 0.034086f, -0.051943f, 0.047539f, -0.020924f, 0.012371f, 0.032424f, -0.003272f, -0.035249f, 0.064749f, -0.041736f, 0.047521f, -0.022391f, 0.025678f, -0.007995f, 0.052155f, -0.018405f, 0.041039f, -0.071343f, -0.012038f, -0.001056f, -0.009104f, 0.022657f, 0.044465f, -0.045426f, 0.091421f, -0.035905f, -0.031151f, -0.062389f, 0.045767f, 0.095655f, 0.019178f, -0.126501f, 0.010445f, -0.028615f, 0.061636f, 0.029998f, + 0.027923f, -0.050973f, -0.003261f, -0.032528f, 0.030825f, -0.013377f, -0.020033f, -0.007639f, 0.041717f, -0.010211f, -0.025299f, -0.031475f, 0.023766f, 0.003442f, 0.022660f, -0.014189f, 0.000818f, -0.024280f, -0.001541f, -0.005311f, 0.011643f, 0.003333f, 0.025656f, -0.005588f, -0.007465f, -0.026902f, 0.018298f, 0.006266f, 0.016293f, -0.000091f, -0.015327f, -0.020046f, 0.006036f, 0.004636f, 0.013884f, 0.044069f, -0.105119f, 0.014973f, -0.077171f, 0.014116f, 0.065609f, 0.058008f, 0.019033f, -0.037536f, 0.007577f, -0.022288f, -0.005475f, -0.027667f, -0.020423f, 0.014274f, 0.003886f, -0.040296f, -0.004592f, 0.021024f, -0.004429f, 0.002406f, 0.007655f, -0.025693f, -0.025431f, -0.000631f, 0.016918f, 0.002275f, -0.040961f, 0.003456f, 0.021091f, 0.006641f, 0.004945f, 0.042942f, -0.004673f, -0.011408f, 0.015438f, 0.016461f, -0.028966f, -0.032151f, 0.023920f, 0.004649f, -0.024655f, 0.016624f, 0.007244f, 0.008069f, -0.017231f, 0.006994f, 0.019507f, 0.002375f, -0.024270f, 0.033032f, -0.003950f, -0.036974f, 0.001176f, 0.028980f, 0.009088f, -0.024189f, 0.022094f, 0.007327f, -0.033697f, 0.013906f, + 0.001800f, 0.034493f, -0.031177f, 0.002838f, 0.023812f, -0.054678f, 0.001812f, 0.023643f, -0.000843f, 0.016394f, -0.009029f, -0.034996f, 0.004717f, -0.037033f, 0.034853f, 0.017984f, 0.009876f, -0.013747f, -0.014451f, 0.028760f, -0.024697f, 0.025666f, 0.028239f, -0.040259f, -0.013002f, 0.001747f, 0.031263f, 0.000511f, -0.018006f, 0.011574f, -0.021823f, -0.001292f, 0.003249f, 0.018436f, 0.001338f, 0.003049f, -0.011237f, 0.019186f, -0.006335f, -0.022347f, 0.020423f, -0.009015f, 0.008856f, -0.005051f, 0.014752f, 0.018542f, -0.021190f, 0.003737f, -0.011442f, 0.005027f, -0.011627f, 0.041211f, -0.011555f, -0.023102f, 0.018680f, -0.010401f, -0.003405f, -0.011751f, 0.012249f, 0.011225f, -0.016564f, 0.009330f, 0.016327f, -0.008394f, 0.001186f, -0.022994f, -0.052385f, 0.084997f, 0.011721f, 0.038266f, -0.033526f, 0.014430f, -0.007510f, 0.010008f, 0.009015f, -0.014542f, 0.005426f, 0.015345f, -0.009299f, 0.033738f, 0.001238f, 0.000843f, 0.011279f, 0.010863f, -0.001552f, -0.008922f, 0.014239f, -0.002501f, -0.010310f, -0.002303f, 0.014312f, -0.015987f, 0.003097f, 0.006895f, -0.020308f, 0.024816f, + -0.005243f, -0.012285f, 0.038191f, -0.016045f, -0.022890f, 0.017451f, 0.009525f, -0.010824f, 0.016440f, 0.013141f, -0.004864f, -0.005613f, -0.003213f, 0.004813f, 0.009375f, 0.005419f, -0.000271f, -0.006833f, 0.019598f, -0.021282f, 0.018786f, 0.002778f, -0.002507f, 0.005110f, 0.005828f, 0.005974f, 0.000676f, -0.018959f, 0.005091f, 0.015998f, -0.011692f, -0.000238f, -0.000158f, 0.012144f, -0.001409f, -0.004971f, 0.018456f, -0.009642f, 0.009838f, -0.019473f, -0.007298f, 0.018512f, -0.017935f, 0.017792f, -0.004813f, 0.011655f, 0.014291f, -0.016565f, -0.005713f, 0.020105f, -0.017081f, -0.001070f, 0.001987f, 0.005957f, 0.001375f, -0.002489f, 0.000613f, 0.001335f, 0.009229f, -0.008173f, 0.001930f, 0.005787f, -0.000732f, -0.004317f, 0.000911f, 0.003323f, -0.000939f, 0.001023f, -0.003665f, 0.004036f, 0.005710f, -0.010391f, -0.001753f, 0.017478f, -0.008679f, 0.004859f, -0.001429f, 0.009882f, 0.002727f, -0.005753f, 0.001005f, -0.001285f, -0.006005f, -0.004269f, 0.020706f, -0.003732f, -0.004904f, 0.002796f, 0.002198f, -0.001811f, 0.004303f, 0.008395f, 0.000149f, 0.002044f, 0.000673f, -0.002019f, + 0.001162f, 0.002331f, -0.004093f, 0.002577f, -0.000381f, 0.019954f, -0.070373f, -0.225064f, -0.011432f, 0.121352f, 0.054469f, 0.258473f, 0.022063f, 0.054625f, 0.002292f, -0.075306f, -0.094912f, -0.064242f, -0.115671f, -0.080878f, -0.050892f, 0.001904f, 0.088338f, 0.174069f, 0.128060f, 0.111519f, 0.036302f, -0.060503f, -0.088972f, -0.079914f, -0.094283f, -0.104481f, -0.042387f, -0.019970f, -0.009145f, 0.051105f, 0.067711f, 0.051156f, 0.094663f, 0.061218f, 0.022663f, 0.063615f, 0.001468f, -0.027513f, -0.018270f, -0.056942f, -0.116974f, -0.071002f, -0.068491f, -0.069720f, 0.003628f, 0.032621f, 0.022456f, 0.086051f, 0.070459f, 0.048681f, 0.069299f, 0.073824f, 0.020864f, 0.022208f, -0.007881f, -0.063384f, -0.088276f, -0.067327f, -0.088480f, -0.062788f, -0.021998f, -0.015452f, 0.005420f, 0.048275f, 0.037667f, 0.034143f, 0.067967f, 0.056329f, 0.041286f, 0.070350f, 0.019210f, -0.014291f, -0.002948f, -0.028063f, -0.061070f, -0.035365f, -0.077249f, -0.097455f, -0.057571f, -0.048438f, -0.021149f, 0.056775f, 0.076404f, 0.071429f, 0.082199f, 0.067816f, 0.038425f, 0.037228f, 0.017929f, -0.007827f, + -0.020979f, -0.039119f, -0.058074f, -0.057943f, -0.065720f, -0.068796f, -0.059024f, -0.019960f, -0.007039f, 0.023333f, 0.059195f, 0.066128f, 0.065209f, 0.076425f, 0.060595f, 0.045583f, 0.037708f, 0.012548f, -0.029570f, -0.052383f, -0.085656f, -0.109115f, -0.102402f, -0.080945f, -0.040908f, 0.010492f, 0.054739f, 0.075431f, 0.086543f, 0.090466f, 0.077824f, 0.055237f, 0.027995f, -0.017806f, -0.044430f, -0.058453f, -0.068110f, -0.059359f, -0.044917f, -0.030761f, -0.012914f, 0.014449f, 0.018809f, 0.025950f, 0.029540f, 0.026545f, 0.020874f, 0.016927f, 0.011163f, 0.010075f, 0.004267f, -0.003214f, -0.005838f, -0.005665f, -0.009316f, -0.009925f, -0.013213f, -0.015159f, -0.017098f, -0.013455f, -0.010576f, -0.005470f, -0.000607f, 0.008694f, 0.014142f, 0.016874f, 0.016602f, 0.018668f, 0.016393f, 0.012069f, 0.005088f, -0.002405f, -0.010129f, -0.012578f, -0.014859f, -0.014723f, -0.016372f, -0.014375f, -0.010401f, -0.002729f, 0.002113f, 0.006229f, 0.009658f, 0.012162f, 0.011731f, 0.012770f, 0.011793f, 0.009942f, 0.005895f, 0.001816f, -0.004814f, -0.009107f, -0.012698f, -0.012655f, -0.012119f, -0.009931f, + -0.007027f, -0.001748f, 0.001115f, 0.003704f, 0.006062f, 0.008423f, 0.009276f, 0.009239f, 0.007089f, 0.005394f, 0.002595f, 0.000304f, -0.002385f, -0.004254f, -0.006780f, -0.007349f, -0.007774f, -0.006604f, -0.005133f, -0.002077f, 0.000411f, 0.003399f, 0.005040f, 0.005509f, 0.004606f, 0.004260f, 0.003551f, 0.003122f, 0.001708f, 0.000352f, -0.001368f, -0.002520f, -0.003857f, -0.004211f, -0.004138f, -0.003008f, -0.001787f, -0.000332f, 0.000377f, 0.001244f, 0.001570f, 0.001887f, 0.001717f, 0.001462f, 0.001009f, 0.000753f, 0.000293f, 0.000017f, -0.000263f, -0.000346f, -0.000407f, -0.000421f, -0.000399f}, + {-0.005259f, 0.001130f, 0.005927f, -0.000636f, 0.000436f, -0.009048f, -0.004603f, 0.001217f, 0.011753f, -0.007751f, 0.002373f, -0.012419f, 0.012537f, 0.000730f, 0.004530f, -0.001556f, 0.001901f, -0.002476f, -0.004441f, -0.010809f, 0.004432f, -0.010836f, -0.005117f, -0.006157f, 0.005995f, 0.004745f, 0.002236f, 0.004950f, 0.009427f, 0.000526f, -0.008741f, 0.005591f, 0.000833f, -0.000501f, 0.004566f, -0.001812f, -0.003229f, -0.012732f, 0.001959f, -0.003713f, 0.002674f, 0.005218f, -0.006949f, -0.002821f, 0.006154f, 0.001872f, 0.000652f, -0.006525f, 0.016142f, 0.009695f, 0.001502f, 0.007767f, 0.006368f, 0.006178f, -0.014921f, 0.000843f, -0.001526f, -0.004010f, 0.003554f, 0.002381f, -0.002464f, -0.002850f, -0.000880f, -0.004518f, 0.004296f, -0.001753f, 0.008552f, -0.000395f, -0.002287f, -0.004173f, -0.007635f, -0.001456f, 0.005736f, -0.000326f, 0.001251f, 0.006772f, 0.001790f, 0.007845f, -0.000237f, 0.001128f, -0.000896f, 0.008440f, 0.007478f, 0.007563f, 0.001583f, -0.000080f, 0.003317f, -0.000241f, 0.000971f, 0.000091f, 0.000307f, -0.000706f, -0.002442f, -0.002075f, -0.000516f, -0.002367f, + 0.001012f, 0.001092f, -0.001057f, 0.002426f, -0.001062f, -0.000796f, -0.000590f, 0.000954f, 0.000209f, 0.002161f, 0.000116f, -0.000039f, 0.000103f, 0.002824f, 0.001347f, -0.000291f, -0.000855f, 0.000063f, -0.000484f, 0.001559f, 0.000736f, 0.003012f, 0.000678f, 0.003836f, 0.013427f, -0.006546f, 0.004471f, -0.003737f, -0.005848f, -0.002419f, -0.004054f, 0.007317f, -0.006084f, -0.011288f, -0.002893f, 0.002935f, -0.009400f, -0.005702f, 0.010583f, 0.018279f, -0.003101f, 0.006967f, -0.006293f, -0.006644f, -0.000306f, 0.001897f, -0.000818f, -0.000223f, 0.006785f, -0.011645f, 0.003778f, -0.000892f, -0.002442f, -0.009824f, 0.000844f, 0.000192f, 0.005508f, 0.001613f, -0.007665f, 0.010063f, -0.008046f, 0.009387f, -0.001064f, 0.001670f, 0.003829f, -0.001149f, -0.004720f, 0.007329f, 0.001809f, 0.009806f, 0.001497f, -0.008727f, 0.015746f, 0.012476f, -0.004366f, -0.001329f, -0.003034f, -0.010990f, -0.005919f, -0.001848f, -0.001884f, 0.004374f, -0.006024f, 0.000439f, 0.004318f, -0.000027f, -0.000164f, -0.000745f, -0.001033f, -0.006023f, 0.009524f, 0.000261f, -0.000204f, -0.003048f, -0.001059f, -0.008782f, + -0.007766f, 0.002526f, 0.006359f, -0.000845f, -0.001645f, -0.000051f, -0.000062f, -0.004520f, 0.008537f, 0.001124f, 0.002828f, -0.002262f, 0.002333f, 0.001420f, -0.000349f, -0.000196f, -0.000369f, 0.000076f, 0.002028f, -0.001163f, 0.001287f, 0.001329f, -0.000258f, -0.000385f, 0.001066f, 0.002242f, 0.002045f, -0.001498f, 0.000573f, 0.000663f, -0.001119f, -0.000675f, 0.003212f, -0.000490f, -0.000149f, -0.002553f, -0.002301f, -0.003900f, -0.001421f, -0.013960f, 0.017321f, -0.003705f, -0.001969f, 0.012391f, -0.004762f, 0.006417f, 0.027469f, -0.003233f, 0.000877f, -0.010431f, -0.008409f, -0.013009f, 0.007632f, -0.005342f, 0.003759f, 0.007251f, -0.008167f, -0.006975f, -0.005093f, 0.000641f, 0.002761f, -0.010106f, -0.003921f, 0.004489f, 0.003868f, -0.003978f, -0.001593f, 0.006255f, -0.006345f, 0.001049f, -0.003122f, -0.001108f, -0.004398f, 0.003854f, -0.004030f, 0.001739f, 0.003701f, -0.001628f, 0.011585f, 0.000536f, -0.001501f, -0.008468f, 0.001079f, 0.012371f, 0.001765f, 0.004210f, -0.011213f, -0.016049f, -0.005787f, -0.013800f, -0.012170f, -0.000271f, -0.005216f, -0.000430f, -0.014776f, 0.012745f, + -0.013675f, 0.002071f, 0.009481f, -0.008452f, -0.014291f, -0.010160f, -0.002949f, 0.009587f, 0.008528f, 0.012813f, -0.007444f, -0.006541f, -0.005215f, -0.004471f, 0.009300f, 0.002432f, -0.003748f, -0.001988f, 0.004464f, 0.005058f, 0.001591f, 0.002364f, 0.003275f, -0.000635f, -0.005236f, -0.000802f, -0.003440f, 0.001393f, 0.000536f, 0.001231f, 0.001136f, 0.000346f, 0.002310f, 0.000366f, 0.002682f, 0.000328f, -0.001875f, 0.002725f, -0.002986f, -0.001927f, 0.000707f, -0.000732f, 0.002749f, -0.001540f, -0.001126f, -0.000453f, 0.000445f, -0.000965f, -0.001750f, 0.001784f, -0.000486f, 0.001338f, -0.001461f, -0.001410f, -0.001746f, -0.002050f, -0.001243f, -0.001857f, 0.002891f, -0.002395f, 0.014933f, 0.001545f, -0.006017f, 0.000841f, -0.004983f, -0.001113f, 0.010445f, 0.017534f, -0.006009f, -0.006141f, -0.015928f, 0.002011f, 0.003981f, 0.009052f, -0.006018f, 0.009762f, 0.001529f, 0.015035f, -0.012084f, 0.001932f, -0.022804f, -0.002511f, 0.002702f, -0.005570f, -0.005147f, -0.002014f, 0.008374f, -0.006879f, -0.012002f, 0.003397f, -0.017599f, -0.003833f, -0.008468f, 0.003875f, -0.001898f, 0.005944f, + 0.000754f, -0.013399f, -0.014500f, 0.000396f, 0.007678f, 0.014326f, -0.002876f, -0.005831f, 0.011968f, -0.013234f, -0.007230f, 0.006386f, 0.005672f, 0.009482f, -0.009084f, 0.000337f, 0.003633f, -0.005710f, -0.001958f, 0.005600f, -0.008250f, 0.010702f, -0.004691f, -0.001991f, -0.011456f, -0.009493f, 0.004551f, -0.000024f, 0.000180f, -0.001615f, -0.007046f, 0.006628f, -0.004443f, 0.008243f, -0.000180f, -0.010906f, -0.011480f, 0.004185f, -0.005793f, 0.002043f, -0.016327f, -0.015555f, -0.002522f, 0.014639f, 0.000063f, -0.003020f, 0.000688f, 0.002109f, 0.001522f, -0.000673f, 0.002295f, -0.007635f, 0.001382f, 0.001286f, 0.002272f, 0.002937f, 0.003219f, 0.001717f, -0.004325f, 0.000309f, 0.003729f, 0.001738f, 0.000971f, -0.002137f, -0.002662f, 0.000602f, -0.000055f, -0.000883f, 0.003495f, -0.000077f, -0.000298f, -0.002467f, 0.004372f, 0.003640f, -0.000270f, 0.000311f, -0.002232f, 0.001265f, 0.001325f, 0.000604f, 0.000143f, 0.001445f, -0.002026f, -0.001053f, 0.008842f, -0.024451f, 0.005539f, -0.010683f, 0.008839f, 0.010118f, -0.011618f, -0.021450f, 0.002890f, -0.002959f, 0.013412f, -0.008232f, + 0.019472f, -0.008356f, 0.012846f, -0.016136f, -0.006052f, 0.006587f, 0.009522f, 0.002591f, -0.000182f, -0.009940f, -0.001406f, -0.007844f, -0.009786f, 0.005255f, -0.008369f, 0.003122f, 0.001779f, 0.003872f, -0.004809f, 0.009006f, -0.001828f, 0.007737f, -0.001888f, -0.015123f, -0.002624f, -0.004910f, 0.001399f, 0.014889f, 0.000826f, -0.001396f, -0.000900f, -0.006183f, 0.005069f, -0.005835f, 0.007798f, 0.008463f, 0.002992f, 0.003192f, 0.014988f, -0.003844f, -0.002850f, -0.012190f, 0.008488f, 0.007492f, 0.001478f, 0.001855f, 0.001470f, 0.000533f, 0.004302f, 0.009106f, 0.006031f, 0.003412f, 0.003234f, -0.002442f, 0.011885f, 0.003999f, -0.002595f, -0.009321f, 0.004566f, -0.002835f, 0.017409f, 0.009857f, 0.002095f, -0.008175f, -0.003136f, 0.013266f, -0.005308f, 0.001662f, 0.007625f, -0.004395f, -0.005498f, -0.010692f, 0.001227f, 0.003794f, -0.000959f, 0.005019f, -0.004272f, -0.001638f, -0.003357f, 0.003662f, -0.000444f, -0.001257f, -0.005210f, 0.001146f, 0.001181f, 0.002981f, 0.003479f, -0.001290f, 0.000471f, 0.003909f, -0.000433f, 0.003969f, -0.000410f, 0.001155f, 0.005813f, 0.001167f, + 0.005977f, -0.000525f, -0.001467f, -0.000443f, -0.000667f, 0.000147f, 0.000298f, -0.004665f, 0.001573f, 0.003635f, 0.000248f, 0.001434f, -0.001250f, -0.031380f, -0.017055f, 0.006284f, -0.006146f, 0.012599f, 0.012564f, 0.018980f, 0.007836f, 0.007670f, 0.004661f, -0.022872f, -0.005143f, -0.003176f, 0.002021f, -0.002304f, 0.007082f, 0.005039f, -0.008819f, -0.007031f, 0.005837f, 0.011116f, 0.014005f, 0.012092f, 0.015912f, -0.008755f, -0.008764f, -0.011606f, 0.012258f, -0.007126f, 0.010120f, -0.002586f, -0.000572f, -0.010869f, -0.006549f, -0.006223f, 0.009185f, 0.011364f, 0.001961f, 0.011361f, 0.016231f, -0.006481f, 0.004067f, 0.019093f, -0.009659f, 0.006190f, 0.006428f, 0.000705f, 0.014312f, 0.018399f, 0.013944f, 0.031919f, 0.005876f, -0.004543f, -0.005969f, -0.005483f, -0.000405f, 0.005611f, 0.009622f, -0.001775f, -0.003189f, -0.003386f, -0.008619f, 0.003586f, 0.004561f, 0.008268f, -0.019997f, -0.002742f, 0.004975f, 0.013218f, 0.009154f, -0.017030f, -0.012682f, 0.003213f, 0.003115f, 0.013794f, -0.012221f, 0.000764f, -0.001300f, 0.001459f, -0.017361f, -0.004680f, -0.006029f, -0.004198f, + -0.007180f, -0.002986f, 0.000469f, 0.006638f, -0.000090f, 0.000375f, 0.002511f, 0.003177f, -0.006682f, -0.001041f, 0.000415f, 0.000031f, 0.002280f, -0.002274f, -0.004396f, -0.002922f, -0.003376f, 0.004706f, -0.004600f, -0.002170f, -0.005283f, 0.001313f, -0.001197f, 0.003351f, -0.004844f, 0.002009f, -0.001696f, 0.001975f, 0.001699f, 0.000349f, 0.004043f, -0.003906f, 0.001950f, 0.002283f, 0.000604f, 0.004823f, 0.007554f, 0.015136f, -0.001974f, 0.003081f, 0.012941f, 0.019002f, 0.010698f, -0.021003f, 0.000059f, -0.022345f, -0.015846f, -0.009607f, -0.001864f, -0.013680f, 0.016305f, 0.006018f, 0.009649f, -0.027795f, -0.001999f, 0.018153f, 0.009236f, -0.008169f, -0.011683f, -0.007150f, 0.007081f, -0.021270f, -0.001243f, -0.013676f, 0.020910f, -0.002774f, -0.006117f, 0.002210f, -0.000749f, -0.003605f, 0.003690f, -0.005546f, 0.009710f, 0.006887f, 0.013958f, -0.001055f, 0.000712f, 0.021525f, -0.006818f, 0.014401f, -0.002343f, -0.002556f, 0.037954f, 0.004500f, -0.004070f, -0.008593f, -0.029360f, 0.003073f, -0.030091f, -0.005087f, 0.031683f, -0.008964f, -0.006160f, -0.022041f, -0.006458f, 0.000760f, + -0.011837f, 0.006341f, -0.001152f, -0.016161f, 0.017144f, 0.006111f, 0.005581f, 0.004694f, -0.011942f, 0.013073f, -0.020467f, 0.005894f, 0.007858f, 0.000838f, -0.002713f, -0.008309f, -0.006511f, -0.008463f, -0.002710f, 0.006771f, 0.008743f, -0.002233f, -0.007159f, -0.004263f, 0.009746f, 0.003975f, 0.018659f, -0.000354f, 0.001404f, 0.007571f, -0.000779f, -0.003465f, -0.002589f, -0.002386f, -0.002064f, -0.003106f, 0.002188f, -0.003543f, -0.000140f, 0.003777f, 0.001392f, 0.003851f, 0.003741f, 0.002980f, 0.000330f, 0.005603f, 0.004067f, 0.002400f, 0.001722f, 0.001676f, -0.005895f, -0.005028f, 0.004262f, 0.000578f, -0.003641f, 0.000615f, -0.004140f, 0.001163f, 0.004703f, 0.001689f, -0.000810f, 0.001701f, 0.004029f, 0.000874f, -0.003295f, 0.001592f, 0.012259f, -0.025044f, 0.010640f, -0.008908f, -0.012719f, -0.012129f, 0.009363f, 0.011997f, 0.006947f, 0.020884f, 0.015377f, 0.003022f, 0.006208f, -0.016567f, 0.003227f, 0.007301f, 0.016171f, 0.003042f, -0.007922f, 0.005840f, 0.007496f, -0.014860f, 0.002044f, -0.015239f, 0.011698f, 0.010654f, 0.013743f, -0.013573f, 0.008121f, 0.014729f, + -0.006815f, 0.003721f, 0.019584f, -0.000713f, -0.012296f, -0.009812f, 0.004285f, -0.003366f, -0.012494f, -0.005204f, 0.000131f, 0.002783f, 0.006627f, -0.008646f, 0.013641f, 0.008248f, -0.003242f, 0.016481f, -0.002146f, 0.006185f, 0.021643f, -0.023211f, 0.042546f, -0.019731f, 0.005766f, 0.012755f, -0.004546f, -0.002481f, 0.005304f, 0.028781f, -0.001669f, -0.004100f, -0.000955f, -0.006959f, 0.013941f, 0.015643f, -0.005132f, 0.006636f, 0.005505f, 0.005035f, 0.009547f, 0.012300f, 0.000933f, 0.013310f, 0.002802f, -0.011610f, -0.017811f, 0.004142f, 0.001659f, 0.008036f, 0.003384f, 0.026643f, -0.002783f, 0.014842f, 0.011958f, -0.008375f, -0.015317f, -0.001874f, 0.001646f, 0.003866f, -0.004217f, 0.006794f, 0.003158f, -0.006648f, -0.001876f, -0.006349f, -0.002384f, 0.003823f, -0.002091f, 0.005683f, -0.001535f, 0.001989f, 0.001403f, -0.002754f, 0.002980f, 0.003422f, -0.005392f, 0.003498f, 0.002306f, 0.001044f, 0.001190f, -0.000254f, 0.000961f, 0.006331f, 0.001924f, -0.002332f, 0.001090f, 0.001698f, 0.003101f, 0.003881f, -0.001274f, -0.004481f, -0.001342f, -0.003920f, -0.002962f, 0.004680f, + 0.004289f, 0.005517f, 0.014153f, 0.018640f, 0.011456f, -0.019845f, 0.037986f, -0.011974f, 0.007190f, -0.027905f, 0.011068f, -0.024682f, 0.019085f, 0.001955f, -0.005319f, -0.013978f, 0.018043f, 0.002391f, 0.011507f, 0.011872f, 0.006090f, -0.020798f, 0.010607f, -0.012601f, -0.002317f, 0.009342f, 0.010181f, 0.002342f, -0.003873f, -0.020843f, 0.002892f, 0.019139f, 0.002135f, 0.012378f, 0.013874f, -0.021766f, 0.011966f, -0.011085f, -0.010914f, 0.016001f, 0.017762f, 0.009193f, 0.009995f, 0.002732f, 0.009582f, -0.022438f, -0.009993f, -0.007194f, 0.000645f, 0.023804f, 0.011448f, 0.009404f, -0.001760f, 0.010437f, -0.000531f, 0.026218f, 0.009700f, 0.009912f, 0.004022f, -0.001520f, -0.038854f, 0.014354f, 0.009195f, -0.003653f, -0.002745f, -0.029077f, 0.000276f, -0.011152f, 0.006944f, 0.025213f, -0.004237f, -0.014526f, 0.029478f, -0.001383f, 0.016651f, -0.009886f, 0.000108f, -0.018450f, -0.001696f, 0.000290f, -0.031842f, -0.009537f, -0.005489f, -0.014388f, -0.006639f, -0.002883f, 0.002012f, 0.015891f, 0.001184f, -0.000445f, -0.003078f, -0.008294f, -0.001320f, 0.001412f, -0.003023f, 0.001072f, + 0.000396f, 0.004213f, -0.007467f, -0.003003f, -0.000996f, -0.006940f, 0.000378f, -0.004520f, -0.002810f, -0.002310f, -0.005556f, -0.002918f, 0.006521f, -0.002235f, 0.001165f, -0.001836f, 0.007069f, -0.000372f, 0.003205f, -0.004642f, -0.010337f, -0.003190f, -0.000448f, 0.004418f, 0.001868f, 0.006315f, -0.000422f, -0.002067f, 0.005411f, -0.006645f, 0.007895f, -0.000215f, 0.024871f, -0.021450f, 0.003112f, 0.009039f, 0.011244f, -0.037220f, 0.024682f, 0.006890f, -0.026467f, -0.016928f, 0.014421f, 0.033144f, -0.011690f, -0.006036f, -0.022917f, 0.047457f, 0.018424f, 0.002945f, 0.007893f, -0.024935f, -0.016154f, -0.001057f, 0.002057f, 0.024613f, 0.005327f, 0.018973f, 0.021326f, -0.000939f, 0.001311f, 0.014856f, -0.003930f, -0.015861f, -0.015173f, -0.003864f, 0.021114f, -0.011420f, 0.026714f, -0.012403f, 0.039235f, 0.017449f, 0.031643f, -0.008578f, 0.005110f, 0.025399f, -0.019786f, 0.011838f, 0.011454f, 0.010772f, -0.011335f, 0.013525f, 0.003266f, 0.004312f, 0.011540f, 0.024155f, 0.020304f, -0.020613f, -0.004829f, 0.010613f, -0.020112f, -0.012774f, -0.005316f, -0.041147f, 0.011006f, -0.020340f, + -0.012758f, 0.003968f, -0.005105f, 0.014085f, 0.026223f, 0.016811f, 0.010601f, -0.014163f, -0.003350f, -0.000860f, -0.027841f, 0.005090f, 0.002364f, 0.034416f, 0.007406f, 0.007744f, -0.007458f, 0.026592f, -0.000238f, -0.000758f, 0.000082f, -0.008646f, -0.003953f, 0.001121f, -0.001584f, -0.009368f, 0.000870f, -0.002404f, 0.001701f, -0.011172f, -0.012123f, -0.003972f, 0.009679f, -0.001592f, 0.003776f, 0.003680f, 0.003000f, -0.000776f, -0.002552f, -0.003326f, -0.006706f, -0.011192f, 0.003873f, 0.000617f, -0.002723f, -0.013222f, 0.009794f, 0.006693f, 0.003810f, -0.001055f, 0.000862f, -0.004469f, 0.003367f, -0.002333f, -0.004319f, 0.001611f, 0.005706f, 0.003487f, -0.003447f, -0.000786f, -0.001361f, 0.004246f, -0.029639f, -0.043744f, 0.023676f, -0.017809f, 0.019414f, 0.006353f, 0.009402f, 0.011497f, -0.029384f, -0.053466f, 0.004743f, 0.007739f, 0.030138f, -0.029703f, -0.032564f, 0.028114f, -0.011220f, 0.012790f, -0.006136f, 0.006697f, 0.004465f, 0.007415f, -0.014828f, 0.007168f, -0.002132f, -0.004644f, 0.018581f, 0.006938f, -0.002665f, -0.024122f, -0.003287f, -0.000690f, -0.004438f, -0.001151f, + -0.013049f, -0.031997f, -0.014216f, 0.023488f, -0.009999f, 0.011582f, -0.018134f, 0.013439f, 0.006930f, -0.000241f, -0.009129f, -0.039688f, 0.021945f, 0.021297f, 0.027388f, -0.019151f, -0.008112f, 0.037219f, 0.032901f, 0.015199f, 0.007078f, 0.021035f, 0.007745f, 0.018901f, -0.010139f, 0.016418f, -0.031374f, -0.001994f, 0.008763f, -0.008170f, 0.037353f, 0.001456f, 0.020429f, -0.012177f, -0.020064f, 0.043163f, -0.000719f, 0.017134f, -0.005703f, 0.000611f, -0.050757f, -0.004273f, 0.010808f, -0.019590f, 0.023926f, 0.018139f, 0.004478f, -0.010387f, -0.038661f, -0.000825f, -0.007854f, 0.009638f, 0.011760f, 0.001963f, -0.004698f, 0.009098f, 0.000415f, 0.004470f, -0.002445f, -0.011696f, -0.004266f, -0.010680f, 0.018722f, 0.005742f, -0.000369f, -0.000389f, 0.002353f, 0.017285f, -0.002978f, -0.004141f, 0.002681f, -0.001356f, 0.000230f, 0.007754f, 0.004242f, 0.006970f, -0.004980f, -0.000653f, -0.007984f, 0.001555f, 0.000141f, 0.007299f, 0.007309f, -0.008089f, 0.013062f, 0.013266f, -0.010344f, 0.000808f, 0.001716f, -0.001501f, -0.021933f, -0.028734f, -0.008343f, -0.006731f, -0.049204f, -0.046156f, + -0.012093f, 0.000224f, 0.034741f, 0.028260f, 0.027969f, -0.010817f, -0.004497f, -0.007002f, 0.029864f, 0.012832f, -0.012531f, -0.002217f, -0.009977f, 0.021599f, 0.016764f, -0.012469f, -0.017461f, -0.016026f, -0.032733f, 0.013670f, 0.000912f, 0.000927f, 0.007144f, -0.004896f, 0.012412f, 0.046031f, -0.026204f, 0.013878f, 0.002746f, -0.017744f, -0.010162f, -0.021067f, 0.007986f, -0.009364f, -0.010586f, 0.023834f, 0.002926f, -0.007952f, 0.024065f, -0.003275f, -0.010628f, 0.008374f, 0.017557f, -0.009668f, 0.018868f, 0.033893f, 0.032688f, -0.022347f, -0.000314f, 0.008165f, 0.018419f, -0.028300f, -0.005900f, -0.007817f, 0.035256f, 0.015024f, -0.003806f, -0.021448f, -0.023804f, -0.021162f, 0.031839f, 0.026368f, -0.050454f, -0.042094f, -0.031927f, -0.022486f, 0.007606f, -0.020281f, 0.012307f, 0.003358f, 0.004999f, -0.040589f, -0.013017f, 0.036687f, 0.028293f, -0.012298f, -0.026053f, 0.025342f, 0.013274f, -0.003056f, 0.000412f, -0.003240f, -0.006185f, 0.014400f, -0.012933f, 0.003147f, 0.002203f, -0.000545f, -0.009350f, -0.017051f, 0.003280f, 0.013842f, -0.001372f, 0.001514f, -0.005969f, 0.013145f, + 0.014383f, 0.001406f, -0.001925f, 0.004843f, -0.000533f, 0.005809f, 0.006259f, 0.009054f, -0.012192f, -0.001186f, 0.004438f, -0.000015f, -0.007576f, 0.002012f, 0.015241f, 0.014189f, -0.005437f, 0.010869f, -0.016693f, 0.004159f, -0.005405f, -0.004644f, -0.006704f, -0.010434f, 0.003876f, 0.040742f, 0.032126f, 0.019962f, 0.003159f, -0.026509f, -0.013736f, -0.004043f, 0.011001f, 0.016951f, -0.023446f, 0.006179f, 0.001534f, -0.020029f, -0.009433f, 0.016245f, -0.011869f, 0.012922f, 0.005610f, 0.015186f, -0.018686f, -0.000026f, -0.041815f, 0.006326f, -0.052908f, 0.021842f, 0.021612f, -0.020536f, 0.024393f, 0.029043f, 0.000923f, 0.008296f, -0.034089f, 0.020184f, 0.002080f, -0.014145f, 0.018586f, -0.004340f, 0.000334f, -0.000301f, 0.002337f, 0.035723f, -0.003964f, -0.000032f, 0.043864f, -0.000419f, -0.020163f, -0.057840f, -0.047518f, 0.052899f, 0.032989f, 0.013048f, 0.013368f, -0.022107f, -0.044532f, -0.021888f, 0.007117f, -0.017109f, 0.034922f, -0.001852f, 0.004688f, 0.037635f, -0.007668f, -0.011670f, -0.008405f, -0.023681f, -0.040195f, -0.031943f, 0.091025f, -0.044166f, -0.019952f, 0.026117f, + -0.046021f, -0.033166f, 0.033052f, 0.046292f, 0.015297f, -0.008403f, 0.054504f, 0.026320f, -0.043750f, -0.015179f, -0.024408f, -0.023842f, 0.049560f, 0.003601f, -0.032921f, -0.022766f, -0.025610f, 0.007245f, -0.005236f, 0.015116f, -0.000309f, -0.007593f, -0.011978f, 0.001133f, 0.013766f, -0.007354f, 0.006397f, -0.007163f, 0.006891f, 0.006233f, 0.019149f, -0.007411f, -0.002715f, 0.016397f, 0.001373f, 0.008393f, 0.008597f, 0.011711f, 0.002263f, -0.006808f, -0.003768f, -0.001725f, -0.002669f, 0.007193f, -0.002148f, -0.007627f, 0.015458f, 0.015933f, -0.008698f, 0.004091f, -0.009913f, 0.003655f, 0.003812f, 0.009850f, -0.002412f, -0.000933f, -0.004856f, 0.004716f, 0.011073f, -0.037375f, -0.027590f, -0.019260f, -0.034205f, -0.003102f, 0.032366f, -0.002369f, 0.006641f, 0.015920f, 0.010562f, -0.027539f, -0.013341f, -0.022763f, -0.012195f, 0.029144f, -0.008929f, -0.003203f, -0.004018f, 0.017663f, 0.017618f, 0.052615f, 0.008368f, 0.038725f, -0.002282f, 0.013054f, -0.021123f, -0.015916f, 0.013868f, -0.026878f, -0.029875f, 0.000957f, 0.009391f, -0.015346f, 0.012243f, -0.017963f, 0.005459f, -0.047229f, + 0.026337f, 0.014725f, 0.021539f, 0.002664f, -0.019210f, -0.039575f, -0.014122f, -0.003549f, 0.032594f, -0.024861f, -0.014717f, 0.009087f, 0.074560f, -0.020635f, 0.075797f, -0.046530f, 0.018351f, -0.017171f, 0.033254f, -0.013217f, 0.057506f, -0.054124f, 0.082362f, -0.007814f, 0.016928f, 0.035630f, -0.061104f, 0.054445f, -0.065265f, 0.044016f, -0.106338f, 0.057618f, -0.054672f, 0.048411f, -0.071321f, 0.062664f, 0.002096f, 0.040611f, 0.017573f, -0.033273f, 0.028905f, -0.023832f, 0.072029f, -0.032840f, 0.011844f, -0.043011f, 0.011624f, -0.002903f, 0.007879f, -0.015398f, 0.019980f, -0.019767f, 0.014148f, -0.007019f, 0.004546f, 0.006041f, 0.006345f, 0.008322f, -0.004925f, -0.011382f, -0.009240f, -0.010907f, -0.025024f, 0.014420f, 0.003678f, -0.017206f, -0.008018f, -0.005217f, 0.011107f, -0.019150f, 0.018162f, -0.014674f, 0.003599f, -0.007879f, 0.008819f, 0.002931f, -0.000201f, 0.027595f, -0.024501f, 0.014922f, -0.023674f, 0.035596f, -0.006808f, 0.034776f, -0.013742f, 0.010846f, 0.015694f, 0.005242f, 0.005391f, -0.000053f, 0.016632f, -0.024889f, 0.027231f, -0.018984f, 0.017910f, -0.004050f, + 0.000107f, -0.007211f, 0.000251f, 0.001473f, -0.007056f, 0.003307f, 0.006509f, 0.003191f, -0.032772f, -0.029697f, 0.034486f, 0.059506f, -0.049361f, 0.075444f, -0.004411f, -0.000052f, -0.002928f, 0.013065f, -0.022487f, -0.016547f, -0.033675f, -0.007569f, 0.001056f, 0.000031f, -0.000199f, 0.029627f, 0.005058f, 0.032485f, 0.031821f, -0.020299f, 0.011697f, 0.067801f, 0.022147f, 0.014486f, 0.010158f, -0.058896f, 0.002980f, -0.009586f, -0.007394f, -0.054019f, -0.011434f, 0.030971f, 0.008745f, 0.010267f, 0.015583f, 0.039251f, 0.010237f, -0.012173f, -0.004043f, -0.003435f, 0.014725f, -0.026794f, -0.016473f, 0.040529f, 0.025169f, 0.018846f, 0.031353f, 0.023120f, -0.013666f, -0.006899f, -0.046804f, -0.020609f, 0.019028f, 0.014964f, 0.035328f, -0.025520f, -0.012689f, -0.008988f, 0.025971f, 0.015148f, 0.023316f, 0.009571f, -0.018464f, -0.017195f, 0.058426f, -0.017927f, -0.056767f, 0.013068f, 0.041073f, 0.028087f, -0.000741f, -0.004969f, 0.005080f, 0.009350f, 0.005816f, 0.052128f, -0.062843f, -0.053733f, 0.006254f, 0.021139f, -0.027038f, -0.014020f, 0.004591f, -0.021350f, 0.010104f, -0.010464f, + -0.002663f, 0.005553f, -0.004060f, -0.014363f, 0.000553f, 0.011831f, -0.007626f, 0.000067f, -0.020785f, -0.003691f, -0.018284f, 0.013413f, -0.005797f, 0.012298f, -0.007431f, 0.007668f, 0.003233f, 0.010373f, 0.016321f, -0.016570f, -0.007388f, -0.004979f, 0.012875f, -0.008061f, -0.014906f, -0.027414f, -0.000068f, -0.010981f, -0.004060f, 0.004116f, 0.002766f, 0.000735f, 0.005402f, 0.008921f, -0.001733f, 0.027566f, 0.003441f, -0.002255f, -0.021336f, 0.003658f, -0.003901f, -0.001246f, 0.005254f, -0.022434f, -0.011394f, -0.023171f, -0.119457f, 0.032969f, -0.014586f, -0.007616f, 0.029261f, -0.020277f, 0.031401f, -0.004266f, -0.051789f, -0.009471f, 0.004994f, 0.018136f, 0.023075f, 0.005346f, -0.036714f, 0.036266f, -0.014278f, -0.003334f, -0.022578f, -0.010168f, 0.019424f, -0.003922f, 0.017323f, 0.029238f, -0.006816f, -0.037827f, 0.008346f, 0.041450f, -0.038661f, 0.014180f, 0.032160f, -0.005885f, -0.025586f, -0.047693f, -0.032202f, 0.033599f, 0.086137f, -0.026561f, -0.034417f, 0.097070f, -0.006384f, -0.014004f, 0.069841f, 0.040664f, 0.034684f, 0.028037f, 0.011478f, -0.020565f, 0.035464f, 0.033047f, + 0.022747f, 0.010531f, -0.064289f, 0.040116f, 0.035487f, -0.067852f, -0.039264f, -0.024389f, -0.019031f, -0.018703f, 0.073996f, 0.036947f, -0.042355f, 0.039555f, -0.015697f, -0.039589f, 0.017210f, 0.020127f, -0.017514f, -0.016783f, -0.062120f, 0.006976f, 0.010582f, 0.045413f, 0.021735f, 0.005618f, 0.037954f, -0.030181f, 0.078539f, -0.083514f, -0.097439f, 0.068774f, -0.042064f, -0.002608f, 0.048222f, -0.030397f, -0.020938f, -0.006014f, -0.005759f, 0.006001f, 0.029582f, 0.014535f, -0.024248f, -0.001483f, 0.011514f, -0.002894f, 0.016434f, -0.000647f, 0.009083f, 0.001782f, -0.012871f, 0.006910f, 0.026258f, 0.018095f, -0.001151f, 0.003524f, 0.017560f, -0.002816f, -0.002091f, 0.004464f, 0.040676f, 0.020887f, -0.006530f, 0.008905f, -0.036066f, -0.001566f, 0.009528f, -0.016598f, -0.022354f, 0.021117f, -0.009656f, -0.000607f, 0.021712f, -0.018814f, 0.008366f, -0.003197f, -0.005368f, 0.026947f, -0.015198f, -0.003612f, -0.031593f, -0.129774f, 0.040139f, 0.073469f, -0.045267f, -0.009300f, -0.035163f, 0.075581f, 0.050892f, 0.032000f, -0.005842f, -0.026225f, 0.005593f, 0.030549f, 0.014330f, -0.012976f, + -0.002709f, 0.041731f, -0.002559f, -0.015183f, -0.055548f, -0.026285f, 0.047190f, 0.027463f, -0.029473f, 0.023884f, -0.021291f, -0.006679f, 0.014285f, 0.013358f, -0.012753f, 0.008668f, -0.048669f, 0.014106f, 0.066228f, -0.008276f, -0.012685f, -0.064790f, -0.038826f, 0.031595f, -0.051009f, -0.027706f, 0.011899f, 0.013127f, -0.015647f, 0.042640f, 0.040334f, -0.041240f, 0.015624f, 0.023144f, 0.066741f, 0.061067f, -0.009451f, 0.020045f, -0.001436f, 0.069802f, 0.030486f, 0.028367f, 0.066239f, -0.029393f, -0.042958f, -0.022006f, -0.055045f, 0.046682f, 0.022169f, 0.022856f, 0.012294f, 0.079149f, -0.052142f, -0.012124f, 0.033960f, -0.018572f, 0.037667f, -0.001715f, 0.004588f, 0.017533f, -0.045498f, -0.069207f, 0.008939f, 0.013444f, 0.076436f, 0.058099f, 0.001612f, -0.056138f, -0.008679f, -0.061324f, -0.000142f, -0.001840f, -0.017036f, -0.015634f, 0.008556f, -0.005203f, -0.004406f, -0.015471f, -0.009909f, -0.013728f, -0.008031f, 0.002238f, -0.016230f, -0.014911f, -0.002277f, 0.015450f, 0.008058f, -0.019852f, 0.018381f, -0.009998f, 0.033920f, -0.010423f, -0.029717f, -0.010858f, 0.015152f, -0.009163f, + -0.022481f, 0.026096f, -0.005347f, -0.023550f, -0.036421f, 0.005814f, -0.005647f, 0.004466f, 0.008356f, -0.013931f, -0.011793f, -0.031934f, -0.006871f, -0.008309f, 0.002517f, 0.006124f, 0.012086f, 0.010446f, -0.024188f, 0.000290f, -0.030663f, -0.011128f, 0.003361f, 0.003486f, 0.030125f, 0.051249f, 0.044726f, 0.046081f, 0.059337f, -0.034281f, 0.046719f, -0.091535f, -0.040045f, 0.034530f, 0.008140f, 0.066707f, 0.030410f, 0.056874f, -0.024872f, 0.007451f, -0.049534f, 0.033470f, 0.055317f, 0.050304f, 0.004992f, 0.035625f, -0.087919f, -0.057291f, 0.054432f, 0.015782f, -0.054834f, -0.028380f, 0.006605f, 0.080455f, 0.024783f, -0.032885f, -0.041464f, 0.008098f, -0.012173f, 0.049442f, 0.053395f, -0.005395f, -0.008799f, 0.010515f, -0.015285f, 0.063973f, 0.018307f, -0.015315f, 0.012795f, -0.030618f, -0.018223f, -0.143712f, -0.048938f, 0.025478f, -0.022595f, -0.021612f, -0.000840f, -0.026027f, -0.026082f, 0.065693f, 0.043892f, -0.033271f, 0.059870f, 0.124292f, 0.025424f, 0.088497f, 0.012089f, 0.017889f, 0.064844f, 0.042824f, -0.035190f, -0.039838f, -0.070083f, -0.043574f, -0.004777f, -0.069086f, + 0.025375f, -0.008424f, -0.066968f, -0.048011f, -0.047977f, -0.060159f, -0.036640f, -0.024250f, -0.032139f, 0.009324f, 0.056763f, 0.069442f, 0.036461f, -0.007359f, -0.050951f, -0.006596f, 0.001769f, 0.004197f, -0.024932f, -0.004548f, -0.016910f, 0.013463f, 0.019377f, 0.002042f, 0.014129f, -0.000591f, -0.010083f, 0.016499f, -0.018182f, 0.002134f, 0.015587f, 0.033937f, 0.004449f, -0.000455f, 0.022742f, 0.009588f, 0.061394f, -0.015589f, -0.050405f, -0.002731f, 0.033595f, 0.005890f, -0.013912f, -0.015436f, -0.041048f, -0.038715f, -0.022124f, -0.015503f, -0.007386f, -0.023305f, -0.033738f, -0.035723f, -0.019798f, -0.003030f, 0.004591f, 0.046958f, 0.033770f, -0.012797f, 0.054493f, 0.097313f, 0.067095f, 0.047309f, 0.029295f, 0.018475f, -0.024350f, -0.015692f, -0.024313f, -0.021847f, -0.006087f, -0.001753f, 0.056217f, -0.006760f, 0.047669f, -0.031770f, 0.012290f, -0.107535f, 0.029573f, -0.016809f, 0.054426f, -0.014233f, -0.064547f, 0.063782f, -0.024738f, 0.009299f, 0.036061f, 0.026838f, 0.058341f, -0.009535f, 0.008419f, -0.011752f, 0.066594f, -0.014808f, 0.012206f, 0.046218f, -0.054422f, 0.045568f, + -0.014017f, 0.027670f, 0.044198f, -0.012571f, 0.009528f, 0.006957f, 0.004115f, -0.014949f, 0.019432f, 0.018815f, -0.008359f, -0.026797f, -0.005318f, -0.031149f, -0.010488f, -0.006338f, 0.024612f, -0.013372f, -0.049218f, -0.032597f, 0.050905f, 0.051462f, -0.049551f, -0.041586f, 0.061049f, 0.071874f, -0.028418f, -0.007618f, 0.051644f, 0.001666f, 0.026344f, 0.037490f, -0.088031f, -0.026320f, -0.006411f, 0.084423f, 0.007320f, -0.006455f, -0.083910f, 0.016149f, 0.032317f, 0.021072f, 0.002503f, 0.022045f, 0.008165f, 0.011180f, 0.105921f, -0.003673f, 0.005112f, 0.062238f, -0.038004f, 0.041221f, 0.007309f, 0.031009f, 0.020002f, -0.048663f, -0.016404f, 0.057018f, 0.037527f, 0.021605f, -0.014106f, 0.019683f, 0.009536f, -0.000404f, 0.007141f, 0.014243f, -0.007469f, 0.024646f, -0.016951f, -0.004796f, 0.025341f, 0.014896f, 0.004749f, -0.054516f, 0.004382f, 0.026383f, -0.020818f, 0.009167f, -0.048572f, -0.030849f, 0.033295f, 0.016058f, 0.027295f, 0.023869f, -0.019631f, -0.053032f, -0.015154f, 0.017708f, 0.045430f, 0.027558f, -0.007281f, -0.010460f, -0.016558f, 0.037433f, -0.001151f, -0.007909f, + -0.015847f, 0.019691f, 0.008009f, -0.008547f, -0.038717f, -0.024553f, 0.023837f, 0.023865f, 0.016848f, -0.026687f, -0.037371f, 0.018218f, 0.048443f, 0.022407f, 0.002977f, -0.024840f, -0.006251f, 0.011007f, -0.000929f, 0.000532f, 0.002438f, -0.006451f, -0.011575f, 0.003653f, 0.012376f, 0.003478f, 0.001841f, 0.005732f, 0.001521f, 0.001330f, 0.002253f, 0.006039f, 0.000675f, -0.000534f, 0.004651f, 0.061629f, -0.104142f, -0.007097f, -0.088108f, -0.081625f, 0.020605f, 0.017350f, 0.015026f, 0.002176f, 0.077805f, 0.044440f, 0.100151f, 0.109698f, -0.012015f, -0.053737f, 0.011478f, -0.014481f, -0.009984f, 0.023896f, 0.010632f, -0.008622f, -0.050417f, -0.054992f, 0.059787f, 0.027794f, -0.006790f, 0.009334f, 0.009726f, 0.005669f, 0.011012f, -0.005468f, -0.014314f, -0.081363f, 0.001782f, 0.046979f, -0.013734f, -0.062675f, -0.020635f, 0.051774f, -0.095757f, -0.032757f, 0.060516f, 0.036806f, 0.072271f, -0.001924f, 0.005251f, -0.066499f, -0.067337f, -0.084633f, 0.071374f, 0.101270f, -0.133184f, -0.066190f, -0.006994f, 0.067792f, -0.052854f, -0.008443f, 0.122087f, 0.049842f, 0.030948f, 0.080999f, + 0.059028f, 0.088905f, -0.032082f, 0.088399f, -0.013475f, -0.069029f, -0.101816f, -0.023687f, 0.038943f, -0.080448f, -0.015834f, 0.017537f, -0.017067f, -0.028209f, 0.017149f, 0.015756f, -0.055508f, 0.041513f, 0.020162f, 0.060243f, -0.014514f, -0.058646f, 0.073316f, 0.015030f, -0.066953f, 0.000573f, -0.015626f, 0.028081f, -0.029680f, -0.030182f, -0.015661f, -0.002902f, -0.001038f, -0.022825f, -0.027970f, 0.021887f, -0.029181f, -0.000020f, -0.028842f, 0.016052f, 0.027259f, 0.004548f, 0.040789f, 0.028300f, -0.041237f, -0.015075f, -0.000060f, -0.036772f, 0.006124f, -0.005999f, 0.014637f, -0.009483f, 0.012895f, 0.036059f, 0.000026f, 0.007201f, -0.025163f, 0.038780f, 0.024409f, -0.026911f, -0.008065f, 0.027762f, 0.025737f, -0.003481f, -0.039652f, -0.004807f, -0.077039f, 0.059743f, -0.004824f, 0.018422f, 0.023260f, 0.022529f, 0.000953f, -0.025820f, 0.042436f, 0.010805f, 0.040968f, -0.008548f, -0.086217f, -0.007632f, 0.025176f, -0.028201f, -0.031425f, -0.019155f, -0.028950f, 0.035433f, -0.008831f, -0.030506f, -0.001529f, 0.032980f, -0.043815f, 0.031066f, -0.015061f, 0.016637f, -0.043159f, -0.010580f, + 0.017798f, -0.003490f, -0.003781f, 0.005592f, 0.024567f, -0.004073f, -0.003719f, -0.030070f, 0.015333f, -0.008076f, 0.005104f, 0.009627f, 0.003420f, 0.022723f, -0.032660f, -0.024872f, 0.034689f, 0.029966f, -0.041069f, 0.019958f, -0.033144f, 0.038765f, -0.032015f, 0.014786f, 0.010182f, -0.027048f, 0.060763f, 0.006148f, -0.067097f, 0.031303f, 0.008394f, -0.051813f, 0.029465f, -0.018851f, 0.031366f, -0.044882f, 0.023417f, -0.047557f, 0.022203f, 0.034312f, -0.030566f, 0.017953f, -0.032493f, 0.001427f, 0.001358f, 0.003415f, -0.021265f, 0.000709f, 0.016644f, -0.000625f, -0.029306f, 0.022601f, -0.018266f, -0.039491f, 0.017400f, -0.017366f, 0.008925f, 0.018831f, -0.013820f, -0.008204f, 0.003592f, -0.002305f, 0.012289f, -0.006002f, -0.004131f, 0.011045f, 0.013906f, 0.004900f, -0.013460f, -0.007875f, 0.013439f, 0.008208f, -0.030791f, 0.028673f, -0.003807f, -0.010284f, 0.004216f, -0.001896f, 0.006966f, 0.015536f, -0.003494f, 0.029134f, -0.008241f, -0.012192f, -0.013777f, -0.005299f, 0.003033f, -0.013279f, 0.003892f, -0.004282f, -0.005287f, 0.003824f, 0.004920f, -0.005312f, 0.000131f, -0.001244f, + -0.005761f, 0.006252f, 0.004221f, -0.006288f, 0.018271f, 0.037254f, -0.018987f, -0.208069f, -0.375351f, -0.124866f, -0.290934f, -0.287832f, 0.154824f, 0.032072f, 0.215376f, 0.486779f, 0.438626f, 0.359595f, 0.439263f, 0.268738f, 0.059980f, 0.084416f, -0.062618f, -0.326346f, -0.322506f, -0.241415f, -0.313367f, -0.214957f, -0.044578f, -0.145142f, -0.200130f, -0.086984f, -0.025095f, -0.104131f, -0.049552f, -0.002201f, -0.052072f, -0.092704f, 0.019376f, 0.079762f, -0.027152f, 0.110756f, 0.165610f, 0.003898f, 0.031917f, 0.223886f, 0.110985f, 0.001185f, 0.209898f, 0.171514f, -0.040335f, 0.081127f, 0.195973f, -0.003918f, 0.015978f, 0.276492f, 0.148553f, 0.061616f, 0.334494f, 0.368487f, 0.181235f, 0.349327f, 0.434586f, 0.113804f, 0.058290f, 0.176829f, -0.070841f, -0.210514f, -0.122800f, -0.273866f, -0.485533f, -0.484625f, -0.550011f, -0.732593f, -0.737774f, -0.708088f, -0.724375f, -0.648288f, -0.555758f, -0.445343f, -0.291859f, -0.148722f, 0.071358f, 0.319638f, 0.421728f, 0.514534f, 0.697112f, 0.612889f, 0.547912f, 0.611954f, 0.451737f, 0.210618f, 0.247761f, 0.279865f, 0.103175f, 0.134692f, + 0.280421f, 0.137298f, 0.025453f, 0.119881f, 0.107960f, -0.062617f, -0.000800f, 0.074640f, -0.112292f, -0.143249f, 0.031500f, -0.029387f, -0.047300f, 0.155767f, 0.133752f, 0.012915f, 0.121515f, 0.176477f, 0.030325f, -0.014498f, 0.009072f, -0.183017f, -0.330024f, -0.344864f, -0.439622f, -0.553237f, -0.524176f, -0.469175f, -0.427392f, -0.381368f, -0.280130f, -0.265922f, -0.290288f, -0.194747f, -0.064058f, 0.016634f, 0.070921f, 0.189049f, 0.226895f, 0.256630f, 0.460748f, 0.536986f, 0.496419f, 0.457752f, 0.364811f, 0.230637f, 0.197717f, 0.168021f, 0.102990f, 0.073302f, 0.067900f, 0.026853f, -0.006088f, -0.009228f, -0.019282f, -0.040472f, -0.049963f, -0.041191f, -0.056468f, -0.077643f, -0.074078f, -0.071966f, -0.081459f, -0.082517f, -0.070093f, -0.073771f, -0.068933f, -0.052965f, -0.051126f, -0.054110f, -0.044933f, -0.037111f, -0.035877f, -0.025313f, -0.013576f, -0.009643f, -0.009392f, -0.012899f, -0.013360f, -0.014404f, -0.014888f, -0.012094f, -0.010812f, -0.020667f, -0.032106f, -0.041018f, -0.047219f, -0.050682f, -0.041895f, -0.033450f, -0.032674f, -0.027008f, -0.016057f, -0.012021f, 0.001971f, 0.022736f, + 0.033679f, 0.037027f, 0.048534f, 0.054749f, 0.052446f, 0.058851f, 0.067198f, 0.061452f, 0.061824f, 0.069568f, 0.067815f, 0.064862f, 0.066520f, 0.056487f, 0.040233f, 0.029421f, 0.019618f, 0.005329f, -0.006525f, -0.014046f, -0.024639f, -0.035032f, -0.037513f, -0.038343f, -0.040702f, -0.037578f, -0.036277f, -0.039767f, -0.038639f, -0.036482f, -0.034055f, -0.030026f, -0.025974f, -0.021330f, -0.016894f, -0.013094f, -0.007651f, -0.003968f, -0.001825f, 0.000549f, 0.002646f, 0.003161f, 0.004014f, 0.004906f, 0.005357f, 0.005426f, 0.005701f, 0.005725f, 0.005435f, 0.005114f, 0.005026f, 0.004931f, 0.004839f} + }, + { + {-0.015802f, 0.001738f, 0.010386f, 0.003546f, 0.006765f, -0.009889f, -0.005424f, 0.000440f, -0.001760f, 0.002642f, 0.008223f, -0.019803f, -0.000149f, 0.006503f, 0.003898f, 0.005993f, -0.005743f, -0.008006f, 0.008641f, -0.000150f, 0.002400f, 0.005390f, 0.007147f, 0.002637f, 0.001481f, 0.006437f, -0.000965f, -0.002065f, -0.005579f, 0.002995f, -0.001581f, -0.000908f, -0.002905f, 0.003700f, 0.009403f, 0.000038f, -0.001973f, 0.004432f, -0.006042f, -0.009015f, -0.005000f, -0.001827f, -0.005865f, 0.000527f, -0.001370f, 0.003787f, -0.003667f, 0.001053f, -0.007335f, -0.000702f, -0.006036f, -0.000285f, -0.002775f, -0.002373f, 0.003043f, -0.003468f, -0.000374f, 0.004956f, -0.002625f, 0.005910f, 0.007135f, 0.000525f, 0.009651f, -0.004942f, -0.000353f, 0.004632f, -0.001697f, 0.003128f, 0.004373f, 0.002383f, -0.005113f, 0.002012f, 0.002304f, 0.001646f, 0.000285f, -0.004245f, 0.005619f, -0.001513f, 0.002671f, -0.000918f, -0.001197f, 0.000367f, -0.005903f, -0.000473f, -0.004593f, -0.002116f, -0.000230f, -0.000783f, -0.000186f, -0.000441f, -0.002484f, 0.002935f, 0.000310f, 0.000833f, 0.000173f, 0.001646f, + -0.001028f, 0.002077f, -0.000185f, 0.000895f, -0.000371f, -0.000879f, 0.001127f, 0.000132f, -0.000380f, -0.000006f, 0.001604f, 0.000372f, -0.000323f, 0.001033f, 0.000493f, -0.000189f, 0.026367f, -0.007320f, 0.002632f, -0.005630f, -0.000368f, -0.002296f, 0.003126f, 0.002136f, 0.009107f, 0.002863f, 0.001676f, 0.003582f, -0.002079f, -0.018059f, -0.017273f, -0.005336f, 0.002422f, 0.005410f, -0.004308f, 0.001082f, -0.005548f, -0.001924f, 0.000384f, 0.003168f, -0.007607f, -0.008302f, -0.002382f, -0.000447f, 0.004625f, 0.001577f, -0.001787f, -0.005969f, 0.001167f, -0.003249f, 0.000268f, 0.004328f, -0.006048f, 0.003039f, 0.005557f, -0.004178f, -0.011184f, -0.002858f, 0.004197f, -0.000585f, 0.003426f, -0.000465f, 0.002979f, -0.000438f, 0.003264f, 0.000703f, -0.010432f, 0.002159f, 0.004403f, -0.001577f, 0.003015f, 0.000581f, -0.000514f, -0.001999f, 0.000202f, -0.006115f, -0.000457f, -0.001615f, -0.007734f, -0.001233f, -0.000150f, 0.007042f, -0.006783f, 0.011527f, 0.013402f, 0.010559f, -0.004442f, -0.002037f, -0.002320f, 0.005164f, -0.001830f, -0.002784f, 0.003272f, -0.007447f, -0.006752f, 0.000926f, + 0.006174f, -0.000101f, -0.002977f, -0.006650f, -0.003878f, -0.005049f, -0.002608f, -0.004652f, 0.001874f, -0.002750f, -0.000656f, -0.002890f, -0.001460f, 0.000255f, 0.001687f, 0.000225f, 0.001733f, -0.001005f, 0.000229f, 0.001381f, 0.000784f, 0.001109f, 0.001140f, 0.000697f, -0.001139f, 0.001385f, -0.024788f, -0.000160f, -0.003823f, 0.001713f, -0.000858f, -0.012831f, -0.002458f, -0.002706f, 0.004007f, 0.006241f, -0.008597f, 0.006867f, -0.002194f, 0.004733f, 0.004741f, -0.002578f, 0.010312f, 0.000633f, 0.000448f, -0.001788f, 0.001782f, -0.002558f, 0.001893f, -0.002874f, 0.000372f, -0.006737f, 0.000711f, 0.007441f, -0.000015f, 0.003139f, 0.007814f, -0.007691f, -0.008131f, 0.003396f, -0.003704f, 0.006274f, -0.006356f, -0.001903f, -0.013269f, -0.010204f, -0.008876f, 0.003876f, 0.001118f, 0.004722f, -0.004838f, -0.003415f, -0.001027f, 0.008327f, -0.009226f, 0.003812f, 0.001576f, 0.000698f, 0.004634f, -0.003196f, -0.004246f, -0.005521f, 0.003349f, 0.001815f, -0.008172f, -0.008953f, -0.010466f, -0.000287f, -0.002278f, 0.003416f, -0.000513f, -0.001952f, 0.000937f, 0.001422f, 0.004625f, -0.012447f, + 0.001500f, 0.007119f, 0.010489f, 0.010837f, 0.008893f, -0.001554f, -0.006638f, 0.009717f, 0.002913f, 0.001904f, -0.004890f, 0.002824f, 0.001952f, 0.000320f, -0.001252f, -0.002843f, -0.000477f, 0.003341f, -0.002617f, -0.004213f, -0.001789f, -0.001798f, 0.000657f, -0.000328f, -0.001091f, 0.002918f, 0.000170f, 0.003719f, -0.000405f, 0.001091f, 0.002407f, 0.002349f, 0.001744f, 0.001341f, -0.001538f, -0.001601f, -0.000597f, 0.001494f, -0.000354f, 0.001460f, -0.001075f, 0.002532f, 0.002025f, -0.002144f, 0.000057f, 0.000206f, -0.003632f, 0.002722f, -0.014674f, 0.008792f, -0.007870f, 0.010515f, 0.013750f, 0.008500f, -0.000348f, 0.003945f, 0.000755f, 0.011228f, -0.006425f, -0.006449f, 0.003080f, -0.001931f, 0.004485f, 0.008598f, -0.012754f, 0.003804f, 0.011082f, 0.005128f, -0.001011f, -0.000283f, 0.001171f, -0.005432f, -0.000279f, -0.005142f, -0.007105f, -0.001993f, 0.010487f, -0.004199f, 0.004766f, -0.003893f, -0.006726f, 0.012607f, -0.011355f, 0.008402f, 0.009195f, 0.001671f, 0.005755f, -0.008452f, -0.002464f, -0.003461f, -0.002813f, 0.005778f, 0.001599f, -0.009075f, 0.001242f, -0.001048f, + 0.001479f, -0.002106f, 0.002994f, 0.002885f, 0.010451f, -0.011341f, 0.005162f, 0.004053f, -0.001336f, 0.004025f, 0.000965f, 0.006371f, 0.005924f, 0.003702f, -0.003819f, 0.005038f, 0.009012f, -0.000421f, 0.005191f, -0.004095f, 0.010723f, 0.011104f, 0.012176f, -0.003753f, -0.008902f, 0.002613f, -0.001432f, 0.004233f, 0.002969f, -0.000237f, -0.000881f, -0.012608f, -0.003474f, -0.003070f, -0.001209f, -0.002736f, -0.003954f, 0.004076f, 0.001407f, 0.001158f, 0.004771f, -0.000486f, 0.004826f, 0.003004f, 0.001405f, -0.000897f, 0.000638f, -0.001296f, -0.002355f, 0.001308f, 0.000143f, 0.002262f, -0.000975f, 0.000401f, -0.000402f, -0.001841f, 0.002515f, -0.000294f, -0.002607f, 0.000776f, 0.001989f, 0.000071f, -0.003323f, 0.000577f, -0.001669f, 0.004043f, 0.002854f, 0.002896f, -0.000595f, 0.000763f, 0.002167f, 0.000057f, 0.000993f, 0.001979f, 0.000990f, 0.020285f, -0.001885f, -0.006361f, 0.019292f, -0.007647f, 0.008654f, -0.004659f, -0.018475f, 0.003279f, -0.005329f, 0.000573f, 0.022103f, -0.008576f, -0.010493f, 0.000842f, 0.011611f, -0.018717f, -0.006962f, 0.014034f, -0.004952f, 0.004533f, + 0.006621f, -0.005010f, 0.006024f, -0.003916f, -0.006498f, 0.001305f, -0.001842f, -0.002273f, -0.002415f, 0.007827f, -0.006286f, 0.015240f, 0.003783f, 0.000334f, -0.008753f, -0.002585f, 0.009300f, -0.010682f, 0.002260f, 0.003713f, -0.001684f, -0.014896f, 0.010182f, 0.002724f, 0.002493f, 0.001336f, -0.002070f, 0.007709f, -0.004583f, 0.010536f, 0.005973f, -0.004072f, -0.018184f, 0.008103f, 0.004859f, -0.000431f, -0.005161f, 0.004410f, 0.011714f, 0.011935f, -0.001320f, 0.007071f, -0.010726f, 0.007810f, -0.001911f, -0.003670f, 0.004621f, 0.009243f, -0.006486f, 0.009151f, 0.001620f, -0.003826f, -0.003236f, 0.007473f, -0.006245f, 0.017703f, -0.009108f, 0.007349f, -0.006125f, 0.001624f, -0.005475f, 0.007107f, -0.006356f, 0.000354f, 0.004012f, -0.001185f, 0.000755f, -0.005418f, -0.001879f, -0.000708f, 0.000012f, 0.001535f, -0.002392f, 0.003114f, -0.000324f, -0.002091f, 0.003106f, -0.006217f, -0.006341f, -0.003560f, 0.000089f, -0.000568f, -0.001283f, 0.000234f, -0.004330f, 0.005334f, 0.000324f, -0.000292f, 0.003684f, -0.002979f, -0.000630f, 0.004229f, 0.001777f, 0.001523f, 0.006542f, 0.005844f, + 0.018883f, 0.002334f, -0.004992f, -0.024558f, 0.007358f, 0.013647f, 0.008098f, 0.005225f, -0.002232f, 0.006854f, 0.026351f, -0.003408f, 0.012086f, 0.001016f, 0.006687f, 0.002429f, 0.000318f, 0.005134f, -0.002386f, -0.011518f, -0.003333f, -0.008611f, -0.002356f, -0.012070f, 0.004124f, 0.000162f, 0.013755f, 0.002541f, -0.006635f, 0.004413f, -0.002134f, -0.003590f, 0.008760f, 0.003015f, 0.006508f, 0.003706f, -0.004010f, -0.015714f, 0.000804f, 0.008844f, -0.000772f, -0.003164f, 0.003898f, -0.008390f, -0.003643f, -0.014651f, -0.018071f, 0.009102f, 0.010186f, 0.007892f, -0.002684f, -0.003124f, -0.000014f, -0.000483f, 0.005140f, -0.001093f, 0.005644f, 0.005011f, -0.000318f, 0.005171f, -0.005122f, 0.001264f, -0.002770f, 0.002997f, 0.003751f, 0.016657f, -0.000093f, 0.013599f, -0.005311f, -0.014341f, -0.001421f, -0.002087f, -0.005520f, 0.011119f, -0.001034f, 0.004499f, 0.000922f, -0.008226f, -0.009814f, -0.003584f, -0.002172f, 0.000923f, 0.009842f, 0.003116f, 0.000948f, 0.004059f, 0.006565f, -0.002974f, 0.004926f, -0.000746f, 0.004179f, 0.002542f, 0.000981f, 0.005798f, -0.000739f, 0.003326f, + 0.001894f, 0.001646f, -0.001177f, -0.001723f, -0.003561f, -0.001728f, 0.003408f, 0.005229f, -0.001415f, 0.000316f, -0.003109f, -0.000591f, 0.000134f, -0.003160f, 0.002069f, -0.005811f, 0.000148f, -0.000438f, -0.000085f, 0.003469f, 0.003725f, -0.000575f, 0.008774f, -0.021633f, -0.000713f, 0.022017f, 0.030281f, -0.012595f, 0.003401f, 0.004793f, -0.010520f, -0.006156f, 0.001192f, -0.008796f, -0.009143f, 0.021175f, 0.002968f, -0.014088f, -0.002237f, -0.009207f, -0.005223f, 0.013756f, -0.004328f, -0.006149f, 0.012522f, 0.007692f, 0.012653f, -0.005413f, 0.002614f, 0.012295f, 0.000557f, -0.007457f, 0.003394f, -0.001123f, 0.001555f, -0.015679f, -0.010636f, 0.004616f, -0.001095f, 0.003663f, -0.014372f, 0.006696f, 0.005280f, 0.003303f, -0.025346f, -0.014915f, -0.006411f, -0.003237f, 0.003624f, -0.011160f, -0.007401f, 0.002415f, 0.019459f, 0.012737f, 0.006905f, -0.003519f, -0.002114f, -0.007428f, 0.005635f, -0.002209f, -0.014363f, -0.011069f, -0.001310f, -0.000302f, 0.020388f, 0.011203f, -0.010068f, -0.011352f, 0.014103f, 0.002734f, -0.008472f, 0.000004f, 0.012659f, 0.004712f, 0.000397f, -0.016532f, + 0.018139f, -0.006459f, 0.012101f, 0.015759f, 0.016694f, 0.001394f, -0.006131f, -0.005086f, 0.008589f, 0.009734f, -0.008563f, 0.006819f, 0.009334f, 0.006494f, -0.002818f, -0.002293f, 0.001343f, 0.005569f, 0.004656f, -0.005004f, -0.007595f, -0.007259f, 0.003568f, -0.003531f, -0.002238f, -0.005069f, -0.000967f, -0.003661f, 0.001865f, -0.003039f, 0.002220f, 0.001642f, -0.000555f, -0.000092f, 0.004109f, -0.003078f, -0.006047f, -0.001198f, 0.005608f, -0.003467f, -0.002982f, -0.003288f, -0.002247f, -0.000506f, -0.000095f, -0.003867f, -0.000085f, -0.002847f, -0.001303f, 0.000922f, 0.003761f, -0.002571f, -0.000081f, -0.000916f, -0.001631f, 0.003339f, 0.004070f, -0.005957f, 0.008885f, -0.011556f, 0.013007f, -0.001291f, -0.003630f, 0.006874f, -0.013307f, 0.004423f, 0.007116f, 0.001356f, 0.004947f, 0.006147f, -0.003660f, 0.014500f, -0.006950f, -0.024994f, -0.014898f, -0.003368f, 0.000895f, -0.005368f, -0.010720f, -0.011729f, -0.007977f, 0.024368f, -0.006868f, -0.002023f, 0.003453f, -0.005177f, 0.002843f, 0.019974f, -0.009732f, 0.009432f, -0.006335f, -0.012994f, 0.011483f, 0.008255f, 0.005258f, 0.017891f, + 0.000331f, 0.008377f, -0.000858f, 0.002054f, -0.000775f, -0.006001f, 0.003893f, -0.001462f, 0.012958f, 0.002511f, -0.009045f, -0.002402f, -0.002658f, -0.000708f, -0.014699f, 0.005789f, -0.014492f, 0.003415f, 0.019343f, -0.012749f, -0.024330f, 0.005541f, 0.003299f, 0.011037f, -0.004983f, -0.000316f, 0.011292f, -0.007095f, 0.005503f, 0.008283f, 0.002288f, -0.005180f, 0.011150f, 0.002330f, 0.014337f, 0.002969f, -0.008999f, -0.008559f, 0.009297f, 0.015646f, 0.005476f, -0.000233f, -0.012997f, -0.002702f, -0.004217f, 0.009248f, 0.002310f, -0.017765f, 0.002732f, 0.004609f, 0.001248f, 0.001709f, 0.006825f, -0.003189f, 0.002854f, -0.004905f, 0.002982f, 0.002685f, 0.002176f, 0.003544f, 0.001541f, 0.002319f, 0.002153f, -0.004163f, 0.001296f, -0.001320f, -0.000679f, 0.003935f, 0.001648f, 0.002162f, 0.004485f, -0.001442f, -0.014219f, 0.001311f, -0.000978f, 0.000987f, -0.001314f, -0.000927f, 0.003937f, 0.002552f, -0.002307f, -0.002736f, -0.019322f, 0.044613f, -0.010411f, 0.020045f, 0.001892f, 0.008369f, 0.006060f, -0.000116f, -0.024994f, 0.021276f, -0.031161f, 0.010085f, 0.007485f, 0.028091f, + -0.013162f, 0.012655f, -0.019822f, 0.012944f, -0.006408f, -0.021363f, -0.010226f, 0.005019f, 0.005477f, 0.007791f, 0.003977f, 0.011208f, 0.007355f, 0.016995f, -0.005267f, -0.013944f, -0.012547f, 0.004875f, -0.000146f, -0.006898f, 0.011388f, 0.004951f, -0.002330f, 0.006769f, 0.014096f, -0.001319f, 0.003651f, -0.002127f, 0.006972f, 0.004078f, -0.018037f, -0.007871f, -0.023634f, -0.005467f, -0.004010f, -0.000573f, 0.011352f, 0.010073f, 0.001508f, -0.006556f, -0.000125f, -0.003585f, -0.005609f, 0.003126f, 0.033264f, 0.002960f, -0.000723f, 0.010539f, -0.000791f, 0.012080f, -0.005194f, 0.000119f, -0.007891f, 0.033328f, 0.007875f, -0.013758f, -0.015689f, -0.010532f, 0.001316f, -0.000747f, -0.021329f, 0.001157f, 0.004411f, 0.001429f, 0.023295f, -0.006075f, 0.003435f, -0.014469f, -0.004723f, -0.039262f, -0.006775f, 0.002009f, 0.001509f, -0.015101f, 0.003954f, -0.007276f, 0.004932f, 0.002258f, -0.007122f, -0.000903f, 0.005169f, 0.007943f, 0.014827f, 0.003879f, -0.005378f, -0.005094f, -0.011905f, -0.004654f, 0.001134f, 0.001968f, -0.006839f, -0.002643f, 0.006478f, 0.002273f, -0.001762f, -0.001665f, + -0.005060f, -0.004766f, -0.002281f, 0.001339f, -0.009902f, -0.007041f, 0.001883f, 0.003953f, 0.000068f, -0.002578f, 0.002491f, 0.008119f, 0.001393f, 0.000636f, -0.000653f, -0.003582f, 0.000281f, -0.011633f, 0.004948f, 0.002690f, 0.023343f, 0.002026f, 0.019434f, 0.011799f, 0.019058f, 0.006396f, -0.019269f, 0.018916f, -0.012328f, 0.032720f, -0.021132f, -0.006244f, -0.029233f, -0.006165f, -0.003094f, 0.013013f, -0.013594f, 0.019090f, 0.015395f, -0.009256f, 0.001092f, 0.021826f, 0.030716f, -0.009776f, 0.000782f, -0.004005f, 0.009632f, 0.000150f, -0.003586f, 0.004457f, 0.008422f, -0.014634f, 0.011042f, 0.002101f, 0.012659f, 0.004832f, 0.001936f, -0.024994f, -0.004035f, 0.029004f, -0.003468f, 0.009707f, 0.022237f, 0.006417f, -0.001725f, -0.007761f, -0.010240f, -0.006134f, 0.001020f, -0.009534f, -0.005718f, 0.016812f, 0.015546f, 0.004878f, 0.025816f, 0.017150f, -0.005403f, -0.002575f, 0.003538f, 0.005983f, -0.007886f, -0.020577f, 0.026847f, 0.011818f, -0.005505f, 0.024566f, 0.025693f, 0.028628f, 0.012421f, 0.004318f, -0.010377f, 0.000723f, -0.014523f, -0.011654f, -0.007412f, -0.028717f, + 0.011537f, -0.003641f, 0.024497f, -0.005811f, -0.019242f, -0.003625f, 0.001849f, -0.002856f, -0.025668f, 0.004105f, 0.006851f, 0.011690f, 0.012377f, -0.008672f, 0.003984f, -0.005919f, -0.016692f, 0.003287f, 0.006466f, -0.001277f, -0.004935f, -0.012592f, 0.013214f, 0.007471f, -0.011777f, -0.013359f, -0.007486f, 0.007682f, -0.001360f, -0.003787f, 0.003575f, -0.005929f, 0.003707f, -0.001512f, 0.002287f, 0.005795f, -0.008517f, -0.003954f, 0.003822f, -0.001795f, 0.000159f, 0.017140f, 0.005612f, 0.001167f, -0.001154f, 0.004093f, -0.005685f, -0.003208f, -0.000544f, 0.005633f, -0.003537f, 0.025648f, 0.001586f, 0.004754f, -0.003764f, 0.002197f, -0.003206f, -0.038655f, 0.004563f, -0.000287f, -0.006893f, -0.002800f, -0.018971f, 0.021938f, 0.022476f, 0.025145f, -0.040587f, 0.013220f, 0.008474f, 0.001115f, 0.040162f, 0.016560f, -0.019881f, -0.002225f, 0.039650f, 0.004777f, 0.007126f, 0.008185f, -0.011570f, 0.006720f, 0.008222f, 0.024693f, 0.012537f, -0.018684f, -0.030862f, 0.011815f, 0.007390f, -0.015466f, -0.002873f, 0.001627f, -0.018954f, 0.002291f, 0.023265f, 0.010012f, 0.013065f, 0.018982f, + 0.030590f, 0.003019f, 0.026949f, 0.005448f, -0.010625f, -0.001419f, -0.015864f, -0.008194f, 0.006715f, 0.009247f, 0.007021f, 0.013662f, -0.019088f, -0.008506f, 0.034327f, -0.002390f, -0.007319f, -0.019007f, 0.016303f, 0.014880f, 0.005147f, 0.006308f, -0.000223f, 0.009606f, -0.014863f, 0.024636f, -0.012294f, -0.014449f, -0.011864f, -0.008021f, 0.033227f, 0.009108f, 0.006950f, -0.035954f, -0.019821f, -0.029528f, 0.002196f, -0.003019f, -0.002908f, -0.028003f, -0.039093f, -0.000972f, 0.017605f, -0.009508f, 0.005034f, -0.002421f, -0.002658f, 0.009972f, -0.013605f, -0.005685f, -0.006194f, 0.012014f, 0.001987f, -0.008574f, -0.000123f, -0.001258f, -0.000207f, -0.003990f, -0.008191f, 0.002192f, 0.013094f, -0.006219f, -0.004288f, -0.008235f, -0.003808f, -0.005721f, -0.002875f, 0.005885f, -0.001923f, 0.009215f, -0.002982f, -0.001797f, -0.005186f, -0.003679f, 0.013762f, -0.001250f, -0.000922f, -0.006336f, -0.001042f, 0.008308f, 0.002229f, -0.009825f, 0.002263f, 0.000952f, 0.002909f, 0.036219f, 0.042601f, -0.010864f, 0.011992f, -0.003068f, -0.012415f, 0.002502f, -0.028485f, -0.017576f, -0.001225f, -0.005698f, + 0.057120f, -0.025646f, 0.007339f, -0.036229f, -0.005299f, 0.022188f, -0.009275f, -0.020143f, -0.021155f, -0.007698f, 0.008764f, 0.011332f, -0.001390f, -0.001763f, -0.023783f, 0.005671f, 0.016697f, 0.008474f, 0.010248f, 0.003107f, 0.003756f, -0.013842f, -0.004523f, 0.009382f, 0.003449f, 0.000038f, 0.001082f, -0.016708f, 0.007501f, -0.017586f, -0.002832f, -0.000404f, 0.005163f, -0.019534f, -0.001989f, 0.009666f, 0.014092f, -0.022267f, -0.011682f, 0.039705f, -0.015205f, -0.031196f, 0.026295f, -0.025371f, -0.007989f, -0.011194f, -0.004539f, -0.019466f, -0.013515f, -0.004046f, -0.019641f, -0.028019f, 0.045294f, 0.025031f, 0.020201f, 0.013859f, -0.017559f, -0.006820f, -0.011836f, 0.012774f, -0.021282f, 0.015151f, -0.011346f, 0.006546f, 0.015193f, 0.009945f, 0.003101f, -0.028858f, 0.028358f, -0.034485f, -0.009038f, -0.033431f, -0.013571f, 0.022098f, -0.001259f, 0.012560f, 0.025361f, 0.008108f, -0.002551f, 0.004987f, -0.008829f, 0.000542f, -0.002677f, -0.009533f, 0.011468f, -0.003934f, -0.005278f, 0.013135f, 0.006963f, -0.003429f, 0.000919f, 0.000645f, 0.002108f, -0.005859f, 0.005728f, 0.001835f, + 0.003100f, -0.007021f, 0.004847f, -0.003241f, 0.012439f, -0.005522f, 0.008800f, -0.002622f, -0.004305f, 0.013187f, -0.008773f, -0.003797f, -0.007846f, 0.005332f, 0.013041f, 0.006029f, -0.003685f, 0.006179f, -0.005222f, 0.006311f, 0.009086f, -0.009804f, -0.023649f, -0.001513f, 0.060113f, -0.026521f, 0.026301f, -0.053191f, 0.015002f, -0.033713f, -0.006076f, 0.019232f, -0.001394f, 0.012423f, 0.020156f, 0.016111f, -0.023023f, 0.017657f, 0.003893f, 0.013117f, -0.004707f, 0.018097f, 0.016852f, -0.003398f, 0.003785f, 0.010972f, 0.012417f, -0.016935f, -0.005576f, -0.024810f, -0.002777f, 0.022307f, 0.000920f, -0.010268f, 0.002605f, 0.008387f, 0.001877f, -0.008897f, -0.017520f, 0.004756f, -0.011737f, 0.011757f, -0.011068f, 0.042765f, -0.003654f, -0.022939f, -0.025775f, 0.006091f, -0.013998f, 0.013600f, -0.028945f, -0.022723f, -0.029410f, 0.007046f, -0.024785f, -0.005794f, -0.035718f, 0.025975f, 0.005630f, 0.017541f, 0.011040f, -0.038702f, 0.003324f, -0.003282f, -0.014230f, -0.021544f, -0.005609f, -0.018318f, -0.023012f, -0.012689f, 0.011162f, 0.015580f, 0.022729f, -0.012719f, 0.003471f, 0.009890f, + -0.032338f, 0.015191f, -0.022047f, -0.001851f, 0.018779f, 0.008033f, 0.007794f, 0.003613f, 0.038217f, -0.021511f, -0.007622f, -0.008072f, 0.010282f, -0.032129f, 0.002912f, -0.002441f, 0.000030f, 0.021160f, 0.012531f, 0.010557f, 0.004100f, -0.007694f, 0.001628f, -0.003726f, 0.015606f, -0.005706f, -0.001620f, -0.008419f, 0.017652f, 0.007114f, -0.005722f, 0.004928f, -0.014976f, 0.010730f, 0.005731f, 0.008480f, 0.001692f, -0.002884f, 0.010061f, 0.017815f, 0.006363f, -0.008391f, -0.011346f, -0.004602f, 0.004831f, -0.011749f, -0.002357f, -0.017961f, -0.012864f, -0.006960f, 0.000362f, -0.009794f, 0.007667f, -0.007677f, 0.018181f, -0.013842f, 0.000093f, 0.000113f, -0.049970f, -0.014517f, 0.055882f, 0.049444f, 0.027737f, -0.024049f, 0.024437f, 0.036967f, -0.024615f, 0.032651f, -0.026489f, 0.030145f, 0.007024f, -0.002091f, 0.009855f, -0.000713f, 0.015797f, -0.023932f, -0.006892f, -0.010829f, 0.012004f, -0.022690f, -0.020445f, 0.031772f, -0.003180f, -0.006689f, 0.002893f, -0.030813f, -0.000800f, 0.049431f, 0.026866f, 0.005578f, -0.000589f, 0.010496f, 0.046696f, 0.019935f, 0.000593f, 0.007846f, + -0.013079f, -0.005604f, -0.011277f, 0.020073f, -0.010555f, 0.013395f, 0.002407f, 0.023987f, -0.028598f, -0.000635f, -0.001844f, 0.000698f, -0.008159f, 0.013374f, 0.021444f, -0.005119f, -0.006275f, 0.021745f, 0.002362f, 0.002669f, 0.049209f, 0.007732f, 0.000533f, -0.022641f, 0.009844f, -0.016848f, 0.022712f, -0.026456f, -0.023556f, 0.003559f, -0.023208f, -0.024686f, -0.037797f, 0.010062f, -0.012712f, 0.019403f, -0.006528f, 0.010938f, -0.055143f, 0.011183f, -0.018749f, -0.033385f, 0.017231f, 0.023009f, 0.011914f, 0.007105f, 0.004036f, 0.009640f, 0.014558f, -0.007140f, -0.008664f, -0.010147f, -0.000799f, -0.011126f, 0.006804f, 0.001439f, -0.016034f, -0.010999f, 0.008969f, 0.005408f, 0.000578f, 0.016234f, -0.005825f, -0.001715f, -0.013083f, -0.002758f, -0.000052f, 0.006721f, 0.004124f, -0.010889f, -0.006792f, -0.003020f, -0.013252f, -0.002489f, -0.012454f, 0.004946f, 0.003203f, 0.014622f, 0.009841f, -0.001043f, -0.006058f, -0.000012f, -0.000039f, -0.004180f, -0.001042f, -0.015291f, -0.002859f, 0.006258f, 0.006650f, 0.001934f, -0.002718f, 0.014729f, 0.002314f, 0.041847f, -0.063742f, 0.027114f, + 0.028246f, -0.045234f, -0.004389f, -0.038720f, -0.012615f, -0.034732f, -0.015582f, 0.040301f, -0.013462f, -0.002663f, -0.027911f, -0.005193f, 0.006704f, -0.041459f, -0.001391f, 0.026929f, -0.051294f, 0.002164f, -0.034952f, -0.018721f, 0.000934f, 0.004068f, -0.023075f, -0.018442f, -0.019301f, -0.005353f, -0.016565f, -0.000804f, 0.009160f, -0.004788f, 0.013287f, -0.024857f, -0.015814f, 0.033860f, -0.015500f, 0.018467f, -0.019774f, 0.019203f, 0.017521f, 0.003240f, 0.004825f, 0.017909f, 0.001038f, 0.025401f, 0.031983f, -0.005703f, 0.004906f, 0.047510f, 0.003003f, 0.024557f, -0.001509f, -0.018500f, -0.037035f, 0.006549f, 0.026049f, -0.040782f, 0.000733f, -0.023857f, -0.012501f, -0.052968f, 0.023208f, 0.035451f, -0.009001f, 0.017239f, -0.008442f, 0.038530f, 0.042490f, -0.003095f, -0.041712f, -0.040399f, 0.058236f, -0.044909f, 0.017115f, 0.007013f, 0.006208f, 0.043748f, -0.018322f, 0.071080f, -0.001009f, -0.015735f, -0.018273f, -0.012451f, 0.011487f, -0.004120f, -0.005232f, -0.000112f, 0.018445f, -0.004220f, -0.011330f, 0.015644f, -0.005359f, 0.008053f, -0.013910f, -0.008162f, 0.013542f, 0.001363f, + 0.020156f, -0.006266f, 0.008670f, -0.014379f, -0.004048f, -0.019799f, 0.004322f, 0.008547f, 0.010144f, 0.002282f, 0.010415f, 0.001325f, -0.002993f, 0.011260f, -0.016909f, 0.011639f, -0.014321f, -0.004811f, 0.008928f, -0.017421f, -0.004347f, -0.009845f, -0.029689f, -0.007636f, 0.002098f, 0.011138f, -0.014434f, -0.007233f, -0.012681f, -0.003814f, 0.003257f, 0.022765f, 0.011749f, 0.069519f, 0.078340f, -0.004609f, -0.059067f, 0.058369f, -0.064580f, 0.009124f, 0.027392f, 0.006812f, -0.006913f, -0.029773f, 0.033554f, -0.014994f, -0.012029f, -0.030315f, -0.017658f, -0.009429f, -0.037889f, -0.020807f, -0.016943f, -0.009437f, -0.006239f, 0.026345f, -0.000402f, 0.022780f, 0.000150f, -0.009784f, -0.033202f, -0.036303f, -0.009205f, -0.001278f, -0.000515f, -0.005468f, -0.013619f, -0.015651f, 0.017361f, 0.041924f, -0.022783f, 0.014479f, -0.014241f, -0.014579f, 0.016594f, -0.016155f, -0.026314f, 0.058844f, -0.006536f, 0.005473f, 0.002838f, -0.032771f, -0.007272f, -0.006816f, 0.016598f, -0.042351f, -0.018845f, 0.044959f, 0.007159f, -0.019000f, 0.024331f, 0.045697f, -0.026009f, -0.032040f, 0.016625f, -0.027145f, + 0.000373f, -0.050879f, 0.016385f, 0.043433f, -0.004508f, 0.022700f, 0.013124f, 0.007678f, 0.049640f, 0.015704f, -0.000301f, 0.028769f, -0.004244f, -0.003872f, 0.017461f, 0.018907f, -0.072190f, 0.006699f, -0.031447f, 0.025608f, -0.001268f, 0.001092f, 0.017841f, -0.005312f, -0.006983f, -0.009368f, 0.009562f, 0.003802f, -0.007152f, 0.009754f, -0.010419f, 0.001173f, -0.005580f, -0.013787f, 0.006295f, -0.006836f, 0.015478f, 0.008707f, -0.000360f, 0.000211f, 0.004175f, -0.003993f, 0.009119f, 0.004670f, 0.002779f, 0.003918f, -0.002720f, 0.003567f, -0.006343f, -0.011931f, -0.006745f, -0.002980f, 0.001551f, -0.015561f, 0.012681f, 0.008762f, 0.000520f, 0.004840f, -0.010680f, 0.014907f, 0.001675f, -0.008583f, 0.005228f, 0.006535f, -0.018968f, -0.003723f, 0.001760f, -0.001335f, 0.000136f, 0.003617f, -0.003216f, 0.002950f, -0.094753f, -0.066198f, 0.028426f, -0.027721f, -0.026090f, -0.080516f, -0.022829f, 0.017869f, 0.007276f, -0.015396f, -0.044517f, -0.000003f, 0.023441f, -0.001094f, 0.003688f, 0.024264f, 0.042644f, -0.035903f, 0.096339f, -0.024066f, -0.031210f, -0.009099f, -0.004795f, 0.001014f, + -0.037311f, 0.001446f, -0.006084f, 0.020808f, -0.012211f, 0.029210f, -0.011266f, -0.023784f, 0.010578f, 0.012383f, -0.021171f, 0.024329f, -0.072350f, 0.001159f, -0.005250f, 0.029689f, 0.035783f, -0.024920f, 0.033408f, -0.012024f, 0.009973f, -0.015118f, -0.004677f, -0.009077f, 0.026848f, -0.002943f, 0.035163f, 0.054590f, -0.046432f, -0.012575f, 0.025937f, -0.031110f, 0.019755f, -0.035420f, -0.019280f, -0.017350f, -0.020504f, -0.036172f, -0.018268f, 0.017679f, 0.014549f, 0.028735f, 0.037130f, 0.027122f, -0.043735f, 0.006090f, 0.008757f, 0.011093f, 0.009508f, 0.028862f, -0.013305f, -0.029408f, 0.017701f, -0.007255f, -0.022861f, 0.005107f, -0.039561f, -0.016065f, -0.034392f, 0.003727f, 0.021142f, -0.012202f, 0.020340f, 0.011147f, -0.000649f, -0.007069f, -0.000045f, -0.030622f, -0.011145f, 0.010828f, 0.005724f, 0.007309f, 0.002690f, 0.004000f, 0.003316f, 0.010178f, 0.003155f, -0.020413f, -0.002405f, 0.003640f, -0.001589f, 0.005891f, -0.009066f, -0.008278f, -0.019929f, 0.005733f, 0.018590f, -0.020058f, -0.013935f, 0.011019f, -0.004704f, -0.020484f, 0.014291f, -0.009749f, -0.007906f, 0.012975f, + -0.000467f, -0.003481f, -0.005938f, -0.008868f, -0.011951f, -0.012711f, -0.002945f, -0.010761f, -0.006235f, -0.005347f, 0.009443f, -0.000221f, 0.000098f, 0.014259f, -0.018865f, -0.063980f, 0.049956f, -0.082171f, 0.059370f, -0.007451f, -0.036202f, -0.030800f, -0.034428f, -0.023066f, -0.017684f, 0.002686f, 0.043807f, -0.002576f, -0.034904f, 0.039019f, 0.055040f, -0.082059f, -0.021146f, 0.006654f, -0.005855f, -0.012077f, -0.003141f, -0.010653f, -0.013723f, -0.023263f, 0.031793f, -0.009952f, -0.021998f, -0.038632f, -0.038191f, 0.039469f, 0.011102f, -0.006259f, -0.003233f, 0.000842f, -0.007606f, -0.009725f, 0.009568f, -0.033925f, 0.019971f, 0.040290f, 0.030556f, 0.019172f, 0.038790f, 0.044659f, -0.024165f, 0.010110f, -0.035249f, 0.040019f, -0.021402f, -0.005725f, 0.000852f, -0.056560f, 0.019669f, 0.047884f, 0.009109f, -0.018683f, -0.014683f, 0.062363f, -0.023748f, -0.025942f, 0.018389f, -0.062224f, -0.006265f, -0.030534f, 0.002442f, -0.060847f, 0.026801f, 0.011337f, 0.026294f, -0.099157f, -0.084483f, 0.014619f, -0.028799f, -0.019447f, -0.011280f, -0.066228f, 0.023244f, -0.038916f, -0.041976f, 0.033102f, + -0.027877f, -0.016546f, 0.015005f, -0.006436f, -0.011914f, -0.001850f, -0.002475f, 0.014540f, -0.031808f, -0.015018f, -0.030644f, 0.000601f, -0.012812f, 0.006911f, -0.003391f, -0.024624f, -0.009137f, 0.009361f, -0.000460f, 0.002309f, 0.007897f, -0.027047f, 0.004698f, -0.034411f, 0.017258f, 0.005751f, -0.024126f, 0.008512f, -0.028917f, -0.006057f, -0.009823f, 0.002687f, 0.017168f, -0.011475f, 0.017728f, -0.008412f, 0.029337f, -0.012481f, 0.018892f, -0.009488f, -0.001900f, -0.000543f, -0.002191f, 0.006058f, -0.001673f, 0.000320f, -0.001067f, -0.006071f, 0.001299f, 0.010396f, -0.001577f, -0.004066f, -0.002267f, 0.003494f, -0.002324f, -0.003549f, -0.001439f, -0.001576f, 0.002128f, -0.001591f, 0.000036f, -0.001422f, -0.002178f, -0.001338f, 0.003197f, 0.000068f, -0.003407f, -0.000011f, 0.001033f, -0.004548f, 0.004061f, 0.071937f, -0.103917f, 0.102506f, 0.028966f, -0.005097f, 0.006972f, -0.076733f, 0.013902f, 0.033740f, -0.014845f, 0.087115f, -0.026897f, 0.036806f, -0.032852f, 0.096143f, -0.005143f, -0.014698f, -0.038980f, -0.015200f, 0.012635f, -0.011375f, 0.037990f, 0.029239f, -0.012021f, 0.001128f, + -0.040063f, 0.013148f, 0.037589f, 0.038233f, -0.044945f, 0.016624f, -0.010232f, 0.040940f, -0.013184f, 0.026099f, -0.027323f, -0.021593f, -0.059438f, 0.002403f, -0.038297f, -0.055544f, 0.074986f, -0.035524f, -0.008504f, -0.016127f, -0.020156f, 0.008872f, 0.004598f, 0.025617f, -0.014580f, 0.040165f, 0.002145f, 0.074121f, 0.027268f, 0.082211f, 0.069355f, -0.008605f, 0.045771f, 0.034832f, -0.014334f, 0.041249f, 0.056320f, -0.026473f, -0.059878f, 0.031551f, 0.019597f, 0.046018f, 0.022553f, -0.006186f, -0.002436f, -0.063588f, -0.007756f, -0.019804f, -0.024409f, 0.081066f, -0.011344f, -0.002433f, 0.100676f, 0.067075f, 0.035045f, 0.044311f, 0.021676f, 0.001427f, 0.009827f, 0.058009f, -0.001178f, -0.017102f, 0.015746f, 0.048519f, 0.021613f, 0.027024f, 0.012179f, 0.033130f, -0.003772f, 0.008494f, 0.010970f, 0.022775f, 0.006343f, 0.004702f, 0.002402f, 0.001305f, 0.017665f, 0.028026f, 0.010580f, 0.037512f, 0.000867f, 0.022621f, 0.021890f, 0.042497f, -0.002630f, 0.028664f, 0.024707f, 0.004329f, 0.020529f, -0.000103f, 0.003040f, -0.008771f, 0.007325f, 0.010882f, 0.004085f, 0.005013f, + -0.000359f, -0.006541f, -0.000703f, 0.009000f, -0.007392f, 0.004323f, 0.018005f, -0.005641f, 0.035140f, 0.002781f, 0.007851f, -0.003814f, -0.016729f, 0.009028f, -0.006617f, 0.010377f, 0.031562f, -0.071732f, 0.137032f, -0.018891f, -0.015457f, -0.009048f, 0.099683f, -0.061631f, 0.049938f, -0.067469f, 0.063486f, 0.012519f, -0.012509f, 0.001251f, 0.037175f, -0.016405f, 0.034675f, -0.016558f, -0.000352f, 0.069704f, 0.021487f, -0.018418f, -0.000281f, 0.017034f, 0.013766f, -0.068531f, 0.018161f, -0.025296f, -0.006159f, -0.036386f, 0.034700f, 0.032414f, 0.005172f, 0.015063f, 0.058605f, -0.020012f, -0.093161f, 0.021695f, 0.061103f, -0.024269f, -0.061224f, 0.015661f, 0.043788f, 0.014159f, 0.000107f, -0.074068f, -0.035147f, -0.044135f, 0.040879f, 0.015882f, 0.042117f, -0.089077f, 0.005737f, -0.016995f, -0.097598f, -0.026019f, 0.014455f, 0.043538f, 0.061614f, -0.033454f, 0.115012f, 0.021649f, 0.002091f, -0.024425f, -0.046281f, -0.032826f, 0.021770f, -0.054005f, 0.108456f, -0.035445f, 0.004569f, 0.063341f, -0.042107f, 0.038345f, -0.041118f, -0.024414f, 0.090025f, -0.046317f, 0.059084f, 0.053531f, + 0.019894f, 0.023932f, -0.077715f, -0.010161f, -0.003936f, -0.028089f, 0.036822f, 0.032217f, 0.013589f, 0.009204f, 0.035861f, -0.009377f, 0.014112f, -0.005195f, 0.010857f, -0.016252f, 0.012861f, -0.003572f, 0.010906f, 0.007351f, 0.002585f, -0.027501f, -0.004316f, 0.002677f, -0.009298f, -0.004122f, 0.019175f, 0.009505f, 0.031469f, -0.015187f, 0.006828f, -0.052151f, -0.042699f, -0.007249f, -0.002350f, 0.029395f, 0.023179f, -0.015587f, -0.010399f, -0.041886f, 0.000199f, 0.012955f, -0.006236f, -0.001190f, 0.010126f, -0.014000f, 0.009570f, -0.031257f, 0.002131f, -0.011298f, -0.011324f, 0.018622f, -0.080556f, 0.046167f, 0.029591f, 0.046174f, -0.018257f, -0.012978f, 0.018784f, 0.000236f, 0.005443f, 0.001822f, 0.009242f, 0.002271f, -0.012553f, 0.059680f, -0.013767f, -0.040998f, 0.017515f, -0.000996f, -0.036036f, 0.012678f, 0.008505f, 0.024671f, -0.016547f, -0.027300f, 0.029580f, -0.023596f, -0.003089f, -0.006982f, 0.024307f, -0.041607f, 0.014370f, -0.025790f, 0.021267f, -0.036650f, 0.013194f, -0.012252f, 0.006465f, 0.080525f, -0.055197f, 0.010543f, 0.017851f, -0.049829f, 0.018242f, 0.023040f, + -0.036819f, -0.007655f, -0.014014f, 0.066971f, 0.005779f, -0.077367f, 0.046489f, -0.062534f, 0.011523f, 0.032433f, -0.029891f, 0.037091f, -0.044695f, -0.036937f, 0.051038f, -0.008622f, 0.021775f, -0.076237f, 0.014431f, 0.016518f, -0.003904f, -0.011736f, -0.000490f, 0.030981f, 0.001314f, -0.101402f, 0.061592f, -0.006364f, 0.023747f, -0.026621f, -0.030864f, 0.096745f, -0.002427f, -0.061843f, 0.005509f, 0.031255f, 0.007289f, -0.094032f, 0.003498f, 0.087256f, -0.015819f, -0.040342f, 0.009709f, 0.042216f, -0.005482f, 0.000156f, -0.007274f, -0.004351f, 0.006192f, -0.015255f, -0.008766f, 0.028667f, -0.012288f, -0.000773f, -0.016704f, 0.016819f, 0.025729f, -0.004577f, -0.003685f, 0.027091f, 0.009028f, -0.018598f, -0.004270f, 0.011681f, 0.007973f, -0.015796f, 0.008639f, 0.018646f, -0.015382f, 0.004017f, 0.004835f, 0.012024f, -0.028775f, 0.001860f, 0.018323f, 0.006871f, -0.019995f, 0.001161f, 0.014454f, 0.002383f, -0.014790f, -0.010070f, 0.016202f, 0.039205f, -0.012203f, -0.198398f, -0.423307f, -0.168271f, -0.318447f, -0.388075f, 0.138854f, -0.000553f, 0.142394f, 0.538658f, 0.470555f, 0.268128f, + 0.515540f, 0.287902f, 0.033416f, 0.178789f, 0.110398f, -0.193643f, -0.136570f, -0.039551f, -0.214746f, -0.259921f, -0.085872f, -0.131157f, -0.205542f, -0.050971f, -0.008443f, -0.262005f, -0.180229f, -0.026558f, -0.158883f, -0.205990f, -0.059396f, -0.100656f, -0.224008f, -0.042321f, 0.023775f, -0.125269f, -0.095298f, 0.095947f, -0.033350f, -0.134414f, 0.029253f, 0.090373f, -0.065872f, 0.055724f, 0.197802f, -0.028115f, -0.051695f, 0.195725f, 0.104895f, -0.047881f, 0.324555f, 0.440811f, 0.274714f, 0.464765f, 0.694879f, 0.534678f, 0.508895f, 0.743240f, 0.644465f, 0.474518f, 0.582054f, 0.529168f, 0.336954f, 0.298123f, 0.160860f, -0.054461f, -0.231062f, -0.414142f, -0.588667f, -0.700718f, -0.878768f, -0.938995f, -0.990182f, -1.121921f, -1.121094f, -0.847153f, -0.866839f, -0.789403f, -0.355041f, -0.274584f, -0.267005f, 0.119558f, 0.227515f, 0.005674f, 0.237084f, 0.328666f, 0.113066f, 0.157067f, 0.308308f, 0.230596f, 0.134632f, 0.217821f, 0.269543f, 0.114987f, 0.168108f, 0.334262f, 0.199134f, 0.131334f, 0.308125f, 0.231228f, 0.093851f, 0.200477f, 0.228965f, 0.030042f, 0.118605f, 0.275397f, + 0.158232f, 0.189650f, 0.387962f, 0.364968f, 0.384597f, 0.497744f, 0.501260f, 0.402188f, 0.380469f, 0.324789f, 0.198584f, 0.143325f, 0.076552f, -0.011330f, -0.077597f, -0.211394f, -0.288994f, -0.390849f, -0.520948f, -0.580180f, -0.655585f, -0.763252f, -0.726835f, -0.652822f, -0.576501f, -0.421463f, -0.276197f, -0.146358f, -0.053780f, 0.023031f, 0.048535f, 0.059312f, 0.076451f, 0.081013f, 0.068576f, 0.073246f, 0.080931f, 0.078565f, 0.088071f, 0.113809f, 0.127776f, 0.136701f, 0.152342f, 0.157104f, 0.159309f, 0.167451f, 0.154887f, 0.133191f, 0.099813f, 0.062287f, 0.039627f, 0.011153f, -0.007331f, -0.012760f, -0.019022f, -0.027166f, -0.026654f, -0.022870f, -0.012641f, 0.001513f, 0.016367f, 0.033221f, 0.039017f, 0.042384f, 0.049451f, 0.052960f, 0.052641f, 0.055243f, 0.061005f, 0.058159f, 0.052577f, 0.058617f, 0.052196f, 0.038486f, 0.047405f, 0.048927f, 0.033212f, 0.033507f, 0.029055f, 0.007902f, 0.002252f, -0.000392f, -0.022378f, -0.037020f, -0.042496f, -0.053921f, -0.065511f, -0.068008f, -0.072703f, -0.083698f, -0.085527f, -0.084631f, -0.090764f, -0.095345f, -0.091080f, -0.089181f, + -0.090831f, -0.081983f, -0.070125f, -0.063483f, -0.052002f, -0.032453f, -0.018297f, -0.006254f, 0.011146f, 0.026582f, 0.034293f, 0.041721f, 0.051656f, 0.054324f, 0.052843f, 0.054245f, 0.052521f, 0.047022f, 0.043334f, 0.039931f, 0.034641f, 0.029526f, 0.025677f, 0.020871f, 0.016023f, 0.012755f, 0.010332f, 0.007537f, 0.005696f, 0.003946f, 0.002247f, 0.001195f, 0.000566f, 0.000019f, -0.000229f}, + {-0.013293f, 0.000433f, 0.010653f, 0.007331f, 0.007378f, 0.004654f, 0.002960f, -0.004136f, 0.000209f, -0.004715f, 0.011396f, 0.006986f, 0.002775f, 0.001683f, 0.001689f, -0.000101f, -0.003538f, 0.005611f, 0.007858f, 0.007541f, 0.004649f, -0.005678f, -0.008189f, -0.008988f, -0.008512f, -0.000868f, 0.004527f, -0.008788f, 0.007414f, -0.001745f, 0.012920f, -0.002116f, 0.008229f, 0.000135f, -0.010614f, 0.003079f, -0.001316f, 0.008656f, 0.000654f, -0.000985f, -0.004296f, -0.007284f, 0.000717f, 0.004149f, -0.009310f, -0.012788f, 0.009007f, -0.007399f, -0.006779f, -0.006434f, 0.005103f, -0.005072f, 0.002206f, -0.002257f, -0.000571f, -0.007526f, -0.002217f, -0.005115f, -0.007440f, 0.002489f, 0.005884f, -0.002145f, -0.008190f, -0.001594f, -0.001621f, -0.004125f, -0.007071f, -0.000534f, -0.005740f, -0.006818f, -0.001173f, 0.000488f, 0.001672f, -0.002301f, 0.001068f, -0.001251f, -0.009581f, -0.002114f, 0.001253f, -0.002651f, -0.002411f, -0.003013f, 0.003151f, -0.003683f, 0.003242f, -0.000252f, 0.000615f, 0.001231f, -0.002294f, 0.002330f, 0.000087f, -0.001281f, 0.000641f, -0.000625f, -0.001938f, 0.000334f, + 0.001569f, -0.001026f, -0.000809f, -0.000089f, 0.002494f, 0.001101f, 0.000409f, 0.000378f, 0.001377f, 0.000888f, 0.001588f, 0.000432f, 0.002025f, -0.001632f, -0.000651f, -0.000739f, 0.025061f, -0.008840f, -0.005811f, -0.007887f, -0.005441f, 0.000527f, -0.016876f, 0.002780f, -0.008406f, -0.016516f, -0.003583f, 0.014051f, -0.010212f, 0.002696f, -0.001266f, 0.004679f, 0.007058f, 0.007571f, 0.012253f, -0.002692f, -0.007132f, 0.003091f, 0.002904f, -0.005712f, -0.000891f, -0.003875f, -0.002563f, 0.001466f, -0.006543f, -0.004093f, -0.001016f, -0.008192f, -0.009636f, 0.004837f, 0.007312f, -0.004429f, -0.011064f, -0.001972f, -0.002656f, 0.001510f, 0.008794f, 0.000543f, -0.003759f, -0.000634f, 0.011799f, 0.001439f, -0.007355f, -0.007052f, 0.002991f, 0.002209f, 0.009397f, 0.005345f, -0.000710f, -0.009094f, 0.000418f, -0.000572f, 0.007694f, -0.008372f, -0.002890f, 0.004542f, 0.008954f, -0.002587f, 0.000710f, -0.006888f, -0.003943f, 0.004165f, 0.000165f, 0.000852f, 0.002359f, -0.002698f, 0.003195f, 0.000944f, 0.003930f, 0.002448f, 0.001457f, 0.015698f, 0.004715f, -0.000674f, -0.002225f, -0.004665f, + 0.006639f, 0.004157f, 0.007183f, 0.005166f, 0.001721f, 0.001908f, -0.001633f, 0.001419f, -0.003057f, -0.003170f, -0.002528f, 0.000803f, -0.001229f, -0.000793f, -0.000593f, 0.002516f, 0.000302f, 0.003296f, 0.000193f, -0.001071f, -0.000537f, -0.000337f, -0.000583f, 0.001063f, 0.000653f, 0.001324f, -0.018416f, -0.004308f, -0.008677f, 0.008469f, 0.002165f, 0.000231f, 0.006034f, -0.003537f, -0.014227f, -0.007489f, 0.009505f, -0.000489f, 0.009792f, -0.000696f, -0.005490f, 0.010847f, 0.004099f, 0.023742f, -0.004427f, 0.010325f, 0.001540f, -0.011142f, 0.002852f, -0.009460f, 0.006184f, 0.002206f, 0.002457f, -0.010111f, 0.005115f, -0.001738f, -0.003542f, 0.004191f, 0.016185f, 0.006031f, -0.000049f, -0.012925f, 0.011278f, -0.002339f, 0.000095f, 0.007976f, -0.011739f, -0.002176f, 0.008174f, -0.004793f, -0.004158f, -0.013274f, -0.014479f, -0.001079f, 0.008846f, 0.005206f, -0.005779f, -0.000136f, 0.005781f, 0.007205f, 0.002909f, -0.001451f, -0.002749f, -0.012722f, 0.006045f, 0.015879f, 0.007262f, -0.004552f, -0.002186f, 0.005039f, 0.007617f, -0.000576f, -0.002311f, 0.001906f, -0.010438f, -0.001927f, + -0.007299f, -0.003419f, -0.000628f, -0.004500f, 0.012137f, 0.010549f, -0.003094f, 0.005300f, 0.003965f, -0.002005f, -0.007086f, 0.001692f, -0.005473f, -0.002084f, 0.001686f, -0.007118f, -0.001467f, 0.000718f, -0.002015f, 0.002031f, 0.003104f, -0.004555f, -0.001580f, -0.000301f, 0.000363f, -0.003576f, 0.000999f, -0.001656f, 0.002748f, -0.003173f, 0.003031f, -0.002173f, 0.000772f, 0.000482f, -0.001492f, 0.001193f, 0.000587f, -0.001163f, 0.001100f, 0.001159f, 0.001262f, -0.002363f, -0.001049f, 0.000037f, -0.003277f, 0.000424f, 0.002031f, -0.000676f, -0.013759f, 0.015593f, -0.013242f, 0.014249f, -0.000027f, -0.011171f, -0.026493f, -0.010367f, -0.007529f, 0.004094f, 0.014049f, 0.011024f, -0.003252f, -0.002026f, -0.003135f, -0.007517f, -0.002091f, -0.008461f, 0.003048f, 0.003271f, 0.005392f, 0.008885f, 0.005307f, 0.016891f, 0.000162f, 0.003507f, -0.005799f, -0.001262f, -0.003891f, 0.006285f, 0.001976f, -0.007680f, -0.011174f, 0.000589f, -0.007990f, 0.001142f, 0.007784f, -0.012644f, 0.009115f, -0.021359f, -0.005796f, -0.015810f, 0.002850f, -0.000850f, 0.000397f, -0.006114f, -0.008296f, 0.003115f, + 0.007749f, 0.005596f, 0.002148f, -0.012671f, 0.004045f, -0.008707f, -0.003231f, -0.002398f, -0.017318f, -0.006670f, 0.005372f, 0.006901f, -0.000455f, -0.011874f, 0.002218f, 0.004720f, -0.002177f, -0.002234f, 0.001594f, 0.010631f, 0.003913f, -0.002187f, -0.003206f, 0.002011f, -0.024730f, 0.001959f, 0.006465f, 0.006093f, 0.017692f, 0.002600f, -0.009676f, 0.011190f, -0.003699f, 0.001832f, 0.004032f, 0.003825f, -0.002380f, -0.008021f, 0.000620f, 0.004991f, 0.004755f, 0.007630f, -0.002181f, -0.002268f, 0.001459f, -0.001247f, -0.000787f, 0.001361f, -0.001969f, 0.000875f, 0.001863f, -0.000851f, -0.003853f, -0.002899f, -0.000005f, 0.000644f, 0.001202f, -0.001747f, 0.003942f, -0.001807f, -0.000948f, 0.002619f, 0.003002f, -0.000662f, -0.004289f, -0.002162f, 0.001912f, -0.002082f, -0.001067f, -0.001198f, 0.001095f, 0.003626f, -0.000502f, 0.000879f, 0.003743f, 0.017786f, -0.004510f, 0.000257f, 0.011738f, -0.006050f, -0.005645f, 0.017543f, -0.013354f, -0.031621f, -0.020742f, -0.012227f, 0.019012f, 0.008084f, 0.002646f, -0.018319f, 0.019402f, -0.008366f, 0.005452f, -0.005024f, 0.007633f, 0.009325f, + -0.000749f, 0.000231f, -0.000152f, -0.003161f, -0.010002f, -0.008096f, -0.002440f, 0.001042f, 0.008825f, 0.004975f, 0.013774f, 0.006551f, -0.005974f, -0.003218f, 0.012265f, -0.008829f, 0.015045f, -0.012031f, 0.003260f, 0.006574f, 0.004289f, -0.009763f, 0.013269f, -0.001314f, 0.014256f, 0.018720f, 0.002909f, -0.007515f, -0.007224f, 0.007897f, -0.008976f, -0.019076f, -0.004870f, 0.003969f, -0.012181f, 0.006943f, 0.005704f, -0.004093f, -0.007554f, -0.003280f, -0.002858f, 0.003628f, -0.001417f, -0.010764f, -0.004029f, 0.018479f, 0.014947f, 0.007972f, -0.022005f, -0.021718f, -0.011779f, 0.020749f, 0.010608f, -0.001682f, 0.002970f, -0.010310f, 0.013216f, -0.000644f, -0.010144f, -0.003607f, 0.001441f, -0.001066f, -0.005042f, -0.000806f, -0.003974f, -0.002208f, 0.003978f, 0.005676f, -0.003270f, -0.000120f, 0.000605f, 0.000903f, 0.000919f, -0.005761f, 0.006649f, -0.000518f, -0.006411f, -0.003915f, -0.000802f, -0.002090f, 0.000217f, -0.000540f, -0.000708f, -0.000746f, 0.001664f, 0.000259f, -0.002891f, -0.000261f, 0.001269f, -0.000798f, -0.004548f, -0.003238f, -0.004233f, -0.001590f, 0.003274f, 0.009116f, + 0.013329f, -0.000535f, 0.005258f, -0.020469f, -0.006782f, 0.003577f, 0.007263f, -0.025432f, -0.002646f, 0.011228f, -0.007530f, -0.016478f, 0.010579f, -0.019198f, -0.014040f, -0.007494f, 0.001884f, -0.006847f, -0.004601f, -0.000436f, 0.014599f, -0.012052f, 0.003382f, -0.003690f, -0.004909f, -0.010115f, -0.002666f, -0.014855f, -0.004304f, -0.000254f, 0.003051f, -0.010330f, -0.002044f, -0.006447f, 0.001132f, -0.003196f, -0.004494f, 0.002954f, 0.012033f, 0.003205f, -0.006009f, 0.006086f, -0.008886f, -0.002060f, 0.003641f, -0.003257f, 0.006078f, -0.001739f, -0.000500f, -0.041553f, 0.002937f, -0.014278f, 0.007230f, 0.006230f, 0.009385f, -0.022784f, -0.023278f, 0.003356f, 0.000979f, 0.005668f, 0.000312f, 0.012686f, -0.004909f, 0.006985f, 0.008565f, -0.003813f, 0.019767f, -0.005941f, -0.012621f, -0.002526f, -0.010423f, -0.000170f, -0.020770f, 0.000507f, 0.010493f, 0.005047f, 0.015756f, -0.004128f, -0.004132f, 0.007095f, -0.008118f, 0.002156f, 0.005218f, 0.010281f, -0.005266f, 0.005985f, -0.008063f, 0.001826f, 0.000453f, 0.001289f, -0.003913f, -0.001719f, -0.002888f, 0.003422f, -0.003626f, -0.005750f, + -0.000005f, -0.002605f, -0.003608f, -0.001130f, -0.002805f, -0.001065f, -0.001726f, 0.001913f, -0.002813f, 0.001900f, -0.005789f, -0.000419f, -0.003427f, -0.001286f, 0.000568f, 0.000607f, -0.000743f, -0.002605f, 0.000348f, -0.001867f, 0.000970f, 0.000317f, 0.016155f, -0.032607f, 0.008716f, 0.001386f, 0.009033f, 0.013121f, 0.002359f, -0.012645f, -0.027793f, 0.001982f, -0.011253f, 0.021098f, -0.008617f, 0.004361f, 0.001502f, 0.004518f, 0.015879f, -0.007014f, -0.000524f, -0.007366f, -0.004199f, 0.004177f, -0.004056f, 0.014954f, 0.011078f, 0.003216f, -0.003214f, 0.000235f, 0.009947f, -0.000997f, 0.004775f, -0.000195f, -0.008293f, 0.007322f, -0.002174f, -0.006130f, 0.008770f, 0.014998f, -0.000019f, 0.005894f, 0.000985f, -0.009873f, -0.006253f, 0.018211f, -0.008839f, 0.008742f, 0.013157f, -0.017489f, 0.012445f, 0.006757f, 0.006280f, -0.007725f, 0.012760f, 0.003766f, -0.002300f, 0.016491f, 0.000524f, -0.000128f, -0.007781f, -0.004307f, -0.000096f, -0.007107f, -0.017654f, -0.004543f, 0.017846f, 0.013611f, 0.014663f, -0.001564f, -0.015664f, 0.006546f, 0.018718f, -0.003424f, -0.013431f, -0.000589f, + -0.009523f, -0.002321f, -0.001673f, 0.014755f, -0.001516f, 0.007627f, -0.002042f, 0.000788f, -0.010448f, 0.002841f, -0.001898f, 0.004166f, 0.003891f, -0.006999f, 0.004707f, -0.011141f, 0.000981f, 0.004181f, 0.000165f, -0.002777f, -0.000327f, 0.002368f, -0.007941f, -0.001303f, -0.007484f, 0.002429f, -0.004786f, -0.002776f, -0.004645f, -0.007383f, -0.005118f, -0.001774f, 0.000940f, -0.002146f, -0.000337f, 0.002553f, 0.000642f, -0.001799f, -0.001558f, -0.002081f, 0.004160f, 0.000329f, 0.001397f, 0.002991f, 0.001574f, 0.002166f, -0.001179f, 0.003891f, -0.000731f, 0.000296f, 0.001362f, -0.001231f, -0.002206f, 0.001190f, 0.003712f, -0.015506f, -0.004594f, -0.024982f, -0.007326f, -0.014503f, -0.017098f, -0.016212f, -0.005763f, 0.021744f, 0.023661f, 0.032614f, 0.007268f, -0.012484f, -0.007696f, 0.026990f, -0.000134f, -0.006331f, 0.020667f, -0.002199f, 0.000869f, -0.032374f, 0.014592f, 0.008104f, -0.021617f, 0.029874f, -0.004202f, 0.013403f, -0.003667f, 0.006992f, 0.013258f, -0.000004f, 0.023466f, 0.008979f, 0.006632f, -0.002755f, -0.008372f, 0.002222f, 0.014201f, -0.003853f, 0.004191f, 0.006637f, + 0.018820f, -0.000915f, -0.005747f, 0.012125f, -0.014321f, -0.009005f, 0.006419f, 0.020784f, -0.009268f, -0.011188f, -0.003562f, 0.017124f, 0.000116f, 0.002397f, -0.006449f, -0.002959f, 0.006114f, 0.009020f, 0.000761f, -0.007428f, -0.023765f, 0.002788f, 0.006950f, 0.022561f, 0.006524f, -0.001847f, 0.017308f, 0.030976f, -0.006424f, 0.010837f, 0.007277f, 0.012821f, -0.002539f, -0.010923f, 0.006350f, -0.025723f, -0.007027f, -0.003918f, -0.008376f, -0.005217f, 0.013345f, 0.004600f, -0.016676f, -0.009838f, 0.000438f, -0.005452f, -0.000631f, -0.012750f, -0.000423f, -0.004379f, -0.003244f, -0.001767f, 0.001244f, -0.003563f, -0.000920f, -0.001744f, 0.002694f, -0.001013f, 0.002469f, -0.003493f, -0.000136f, 0.000527f, 0.001128f, 0.005156f, 0.000126f, -0.001991f, 0.004794f, 0.007040f, -0.000592f, -0.004332f, -0.002758f, -0.006099f, -0.005353f, 0.007313f, -0.001268f, 0.001970f, 0.002659f, 0.002588f, 0.002401f, -0.005615f, 0.002722f, -0.002041f, -0.028519f, 0.039304f, -0.020211f, 0.008719f, -0.001727f, -0.013912f, 0.029899f, 0.006836f, 0.003482f, -0.032145f, 0.008014f, -0.012982f, -0.014770f, 0.003274f, + -0.014422f, 0.015860f, 0.009502f, -0.002981f, 0.002975f, -0.008081f, -0.003785f, -0.011857f, -0.007706f, -0.014187f, -0.021743f, -0.005567f, -0.015291f, -0.004310f, 0.007923f, -0.006351f, -0.008349f, 0.016738f, 0.010436f, 0.016800f, -0.014257f, -0.001858f, -0.003069f, -0.015661f, -0.000104f, -0.008459f, -0.038546f, 0.003071f, 0.000436f, -0.006204f, 0.013030f, -0.001672f, 0.014402f, 0.012132f, 0.004327f, 0.022751f, 0.020241f, -0.020528f, -0.005804f, -0.000120f, -0.001004f, 0.006914f, 0.002500f, 0.019295f, -0.004440f, 0.030991f, -0.000299f, -0.018745f, -0.015230f, 0.002098f, 0.005389f, 0.006101f, 0.022482f, 0.005674f, 0.005434f, 0.021075f, 0.028207f, 0.000862f, -0.017724f, -0.016846f, -0.001826f, -0.005857f, -0.004296f, 0.036468f, 0.002375f, -0.017016f, 0.011686f, -0.014939f, 0.013718f, 0.001993f, -0.003167f, -0.004691f, -0.011501f, 0.002808f, 0.003452f, -0.001987f, 0.003020f, 0.005880f, 0.003184f, 0.003901f, -0.001923f, -0.001892f, 0.000134f, -0.002387f, -0.002007f, 0.003835f, 0.001371f, 0.002621f, 0.003441f, 0.006253f, 0.000094f, -0.003438f, 0.005855f, 0.003146f, 0.000901f, 0.001056f, + -0.001558f, 0.000581f, -0.000522f, 0.006213f, 0.009956f, -0.005889f, 0.004595f, -0.001572f, 0.003964f, 0.000192f, 0.000607f, 0.008376f, -0.000760f, 0.000478f, 0.000442f, 0.006809f, 0.004455f, 0.004879f, 0.003148f, 0.000509f, 0.023531f, 0.001612f, 0.015794f, -0.017720f, 0.007629f, 0.001189f, -0.001501f, 0.010350f, 0.024902f, -0.007144f, -0.002478f, 0.022889f, -0.030761f, -0.017261f, -0.013543f, -0.035240f, 0.006685f, -0.011336f, -0.005126f, 0.003969f, -0.024087f, 0.025945f, 0.019557f, 0.027572f, 0.012289f, -0.017560f, 0.001447f, 0.000863f, 0.020621f, -0.004099f, -0.000861f, -0.001064f, -0.013112f, 0.000781f, -0.007789f, 0.011375f, -0.013898f, -0.005449f, -0.004813f, -0.006193f, -0.016244f, 0.007285f, -0.023735f, -0.003866f, -0.001847f, 0.014519f, 0.008570f, 0.001694f, 0.000068f, -0.004405f, 0.001538f, -0.000057f, 0.012095f, 0.002558f, 0.003378f, -0.002251f, -0.037045f, -0.017433f, 0.004096f, 0.014986f, 0.018142f, -0.029179f, 0.019151f, 0.005435f, -0.011547f, 0.002476f, 0.006082f, -0.007152f, 0.027810f, -0.000050f, 0.005199f, -0.006913f, -0.039145f, -0.013689f, -0.017914f, -0.004945f, + 0.000559f, -0.011143f, 0.005455f, 0.007971f, -0.008157f, -0.002007f, 0.024920f, 0.000368f, 0.012627f, -0.015718f, 0.001800f, -0.000600f, 0.014287f, 0.012390f, 0.009046f, -0.003831f, 0.002847f, 0.010100f, 0.006226f, -0.000832f, 0.010904f, 0.010333f, 0.011588f, 0.001140f, 0.004345f, 0.003629f, 0.001787f, -0.001912f, -0.001615f, 0.009719f, 0.001795f, -0.005745f, 0.000796f, -0.001190f, 0.005466f, -0.004304f, 0.001668f, 0.004851f, -0.004211f, 0.007771f, 0.002745f, -0.001565f, 0.000592f, -0.007536f, 0.005125f, 0.004802f, -0.000933f, -0.002039f, -0.004425f, -0.006344f, 0.001618f, 0.036389f, 0.006005f, 0.014858f, -0.021523f, -0.019458f, 0.011578f, 0.019010f, 0.002438f, -0.006384f, 0.034924f, 0.011167f, 0.000373f, -0.009352f, 0.007783f, -0.002433f, -0.003608f, -0.001035f, -0.005737f, 0.001877f, -0.011316f, -0.027252f, 0.009289f, 0.003089f, 0.008610f, 0.002994f, 0.015512f, 0.004920f, -0.016240f, -0.033228f, 0.001092f, 0.002772f, -0.002474f, -0.029043f, -0.014087f, -0.004142f, 0.008426f, -0.006131f, 0.003498f, -0.025367f, 0.001463f, -0.005457f, 0.000378f, 0.002842f, 0.007329f, -0.002493f, + -0.023913f, -0.021916f, -0.013617f, 0.009594f, 0.007098f, -0.005639f, -0.004801f, -0.038405f, -0.021682f, -0.000506f, -0.037516f, 0.034996f, -0.035411f, -0.009507f, -0.022859f, 0.037515f, 0.012140f, -0.025956f, 0.013390f, -0.002767f, 0.014274f, -0.022072f, -0.007208f, 0.001254f, 0.015340f, -0.020938f, -0.008294f, -0.006932f, -0.021386f, 0.001815f, 0.014519f, -0.002419f, -0.003777f, 0.026099f, -0.040722f, 0.032498f, -0.005162f, 0.007092f, -0.018268f, 0.013237f, -0.001895f, 0.010606f, -0.009186f, 0.000818f, 0.008352f, 0.009187f, -0.002390f, -0.004186f, 0.000217f, 0.001209f, 0.001239f, -0.002712f, 0.010246f, 0.010884f, 0.007632f, 0.002248f, 0.007732f, -0.000419f, 0.009467f, -0.003131f, 0.001866f, -0.000101f, -0.003352f, -0.003284f, 0.000795f, -0.007378f, -0.009148f, -0.002392f, -0.000430f, 0.009726f, -0.000423f, -0.001230f, -0.002433f, -0.006182f, 0.004715f, -0.001771f, -0.003257f, -0.002017f, 0.004991f, -0.000707f, -0.010410f, -0.001090f, 0.003877f, 0.001215f, -0.000878f, 0.032126f, 0.069926f, -0.009071f, -0.021415f, -0.020060f, -0.017659f, -0.025488f, 0.004562f, -0.043594f, -0.000081f, -0.033644f, + -0.015374f, 0.010720f, 0.021595f, 0.012472f, -0.014956f, -0.001837f, 0.020562f, -0.001134f, 0.023686f, -0.013677f, -0.013750f, -0.012159f, 0.011340f, -0.007930f, -0.010352f, 0.003990f, -0.012472f, -0.012791f, 0.016169f, 0.037658f, 0.014443f, 0.016241f, 0.007411f, -0.021801f, -0.004900f, -0.017649f, -0.016577f, -0.002456f, -0.002737f, -0.013824f, -0.022173f, -0.044970f, -0.003898f, -0.016185f, 0.006182f, -0.008127f, 0.017261f, 0.015921f, 0.009242f, 0.016652f, 0.011894f, -0.001520f, 0.031987f, 0.045380f, 0.011135f, -0.052671f, 0.011106f, -0.009261f, -0.030630f, 0.004529f, 0.015481f, 0.007733f, 0.001692f, 0.014745f, -0.000525f, -0.024987f, 0.001887f, 0.012159f, -0.024907f, -0.013054f, -0.023313f, -0.043656f, 0.034879f, 0.004988f, -0.002205f, 0.024316f, 0.019176f, 0.001559f, 0.001758f, 0.024034f, -0.032010f, -0.013874f, 0.004010f, 0.017788f, 0.015213f, 0.022805f, 0.016656f, -0.013123f, -0.007350f, -0.002726f, -0.004742f, -0.001697f, -0.002835f, -0.006247f, -0.008081f, -0.012929f, -0.012856f, -0.009252f, -0.004654f, -0.001176f, 0.006963f, -0.003333f, -0.002263f, -0.014842f, -0.009891f, 0.001817f, + 0.008363f, 0.005715f, 0.003710f, 0.003446f, 0.002712f, -0.001863f, -0.007257f, -0.003487f, -0.004352f, -0.004018f, 0.001962f, -0.008042f, 0.002193f, -0.005656f, 0.006781f, -0.000439f, -0.001694f, -0.005401f, 0.005703f, -0.004943f, -0.001160f, 0.010760f, -0.003821f, -0.000045f, 0.051666f, -0.037686f, 0.044709f, -0.003397f, -0.004987f, -0.022270f, -0.008001f, -0.022125f, -0.018721f, 0.024017f, -0.020731f, 0.012565f, 0.053571f, 0.020095f, -0.007521f, -0.023709f, -0.019792f, 0.024043f, -0.019031f, -0.032538f, -0.013150f, 0.003671f, 0.003521f, -0.037196f, 0.003050f, -0.011078f, 0.019953f, -0.011550f, -0.000149f, 0.004641f, 0.056355f, -0.013238f, -0.017461f, 0.027432f, -0.021188f, 0.032893f, -0.018644f, 0.024161f, 0.004430f, -0.016962f, -0.015350f, 0.030589f, -0.038708f, 0.030097f, -0.016434f, 0.003334f, -0.008930f, 0.016565f, -0.013093f, -0.006641f, -0.000085f, -0.011789f, 0.057516f, -0.016142f, 0.039395f, 0.015371f, 0.018315f, -0.000016f, 0.015195f, 0.025240f, 0.028455f, -0.007432f, -0.026690f, 0.000394f, 0.023583f, 0.009557f, -0.003657f, -0.033912f, 0.046132f, -0.009323f, -0.029745f, -0.008142f, + -0.018059f, 0.014517f, 0.020190f, 0.001028f, 0.033533f, -0.008711f, 0.017434f, -0.037345f, -0.006157f, -0.039866f, -0.011997f, -0.014451f, -0.000421f, 0.002438f, -0.007235f, 0.014520f, 0.005198f, -0.010613f, -0.017947f, -0.013491f, -0.003462f, -0.001514f, -0.008736f, -0.001794f, -0.002757f, 0.011514f, -0.002831f, 0.000671f, -0.003765f, -0.017171f, -0.004714f, -0.006795f, 0.002671f, -0.002713f, -0.009201f, -0.014987f, 0.006561f, -0.010080f, 0.005294f, 0.006896f, -0.010043f, -0.025825f, -0.005636f, -0.003918f, -0.006353f, -0.009124f, 0.001647f, -0.004192f, 0.003389f, 0.003187f, -0.011206f, -0.001398f, -0.011277f, 0.011152f, 0.007382f, -0.006114f, 0.003604f, -0.010285f, -0.058291f, -0.024929f, 0.035636f, -0.007130f, -0.014704f, 0.041445f, 0.003901f, -0.021624f, 0.015668f, 0.022542f, 0.019089f, 0.002946f, -0.035895f, -0.014839f, 0.005395f, 0.005253f, 0.018646f, 0.012358f, 0.021042f, -0.018324f, -0.014525f, 0.007070f, -0.005046f, 0.017295f, -0.033756f, -0.005713f, -0.036508f, -0.011787f, 0.006518f, -0.005026f, -0.004653f, 0.038975f, 0.008042f, -0.028885f, -0.004460f, 0.002323f, -0.029594f, -0.003996f, + 0.001370f, 0.017748f, 0.044740f, -0.015897f, 0.014904f, -0.025005f, 0.003688f, -0.014707f, -0.019029f, 0.018280f, 0.039113f, -0.031053f, 0.002917f, 0.034932f, -0.015858f, -0.003210f, -0.013198f, 0.022872f, 0.005421f, -0.028373f, -0.000445f, -0.009902f, -0.009314f, -0.002806f, -0.014051f, 0.021175f, -0.050304f, 0.010656f, 0.004099f, -0.021087f, 0.028012f, 0.043152f, 0.030334f, 0.082179f, 0.024800f, -0.021038f, -0.029295f, -0.024086f, -0.013292f, 0.030195f, -0.011003f, 0.041919f, 0.003716f, 0.051039f, -0.060741f, -0.038827f, 0.018123f, -0.009909f, -0.006411f, 0.024514f, -0.016653f, -0.001825f, 0.025870f, 0.011655f, 0.019149f, 0.028564f, 0.022110f, -0.004758f, 0.008933f, -0.017358f, 0.000463f, -0.000597f, -0.012403f, -0.013307f, 0.008749f, -0.018362f, -0.001750f, 0.027985f, 0.002364f, -0.016562f, -0.021938f, 0.004144f, -0.027521f, -0.009959f, 0.029219f, 0.015394f, -0.005009f, -0.006620f, 0.005462f, -0.005330f, -0.009487f, 0.002109f, -0.006987f, -0.010319f, -0.002013f, -0.014214f, 0.009937f, 0.008976f, 0.009502f, -0.005178f, -0.004063f, 0.006397f, 0.014802f, 0.040494f, -0.096082f, -0.004158f, + 0.054229f, -0.073075f, -0.003664f, 0.013962f, -0.075483f, 0.033294f, 0.008811f, 0.059869f, -0.006367f, 0.020937f, 0.017404f, -0.066448f, -0.055093f, -0.021654f, -0.005656f, -0.033427f, -0.041044f, -0.021862f, 0.037247f, 0.026030f, 0.022427f, 0.002096f, 0.003883f, 0.011548f, 0.001976f, -0.048328f, -0.018325f, -0.061945f, -0.020044f, 0.034124f, 0.009893f, 0.022949f, 0.077129f, 0.019829f, 0.028924f, -0.001543f, 0.015147f, 0.067927f, 0.050961f, 0.013994f, 0.033312f, 0.030596f, 0.067732f, 0.055633f, -0.074558f, 0.046157f, -0.004509f, 0.044162f, 0.044903f, 0.018554f, 0.081390f, 0.071923f, -0.040150f, 0.035448f, -0.000856f, 0.033772f, -0.060066f, 0.005537f, 0.006122f, 0.001953f, -0.013846f, 0.037578f, 0.040658f, -0.039975f, -0.013762f, -0.023589f, 0.014088f, -0.033178f, -0.041187f, 0.038157f, 0.065210f, 0.023787f, 0.067878f, -0.019908f, 0.092349f, 0.090482f, 0.025055f, 0.047335f, -0.014198f, -0.024068f, 0.021024f, 0.020804f, 0.009876f, 0.006971f, 0.005249f, 0.011995f, -0.013238f, -0.023638f, -0.017080f, -0.044188f, -0.046412f, -0.018828f, 0.021166f, -0.000807f, 0.018626f, 0.003119f, + 0.011219f, 0.027784f, 0.034015f, -0.011330f, 0.015429f, -0.001865f, -0.014520f, -0.011980f, -0.010417f, -0.029154f, -0.013646f, 0.000266f, -0.025363f, -0.009068f, -0.022863f, -0.012658f, 0.004547f, 0.031307f, -0.015179f, 0.011150f, 0.008566f, -0.005509f, 0.017068f, 0.009978f, 0.012951f, 0.000198f, 0.022770f, 0.014653f, 0.009735f, -0.009413f, -0.014330f, -0.006170f, -0.030909f, 0.044090f, 0.079629f, -0.011257f, -0.109566f, -0.035225f, 0.010791f, -0.008865f, -0.018459f, -0.024308f, 0.000034f, -0.062810f, -0.037793f, -0.052208f, -0.008694f, -0.015487f, 0.016989f, -0.037362f, -0.010949f, 0.009661f, 0.017060f, -0.000754f, 0.019019f, 0.037427f, 0.007522f, 0.054141f, -0.035359f, 0.012805f, 0.001921f, 0.051635f, 0.013365f, -0.010507f, -0.052595f, 0.034463f, -0.009265f, 0.047076f, -0.040050f, -0.031926f, -0.030391f, -0.016396f, -0.048458f, -0.006956f, -0.008561f, -0.045721f, 0.024802f, 0.051375f, -0.025203f, 0.007346f, -0.067308f, 0.064218f, -0.020528f, -0.035458f, 0.029313f, 0.025460f, -0.038527f, 0.003037f, -0.024050f, 0.008136f, -0.017633f, 0.080470f, -0.003067f, -0.007241f, -0.019979f, 0.142286f, + 0.003600f, -0.019670f, 0.061071f, 0.048729f, -0.051833f, 0.040134f, -0.063489f, -0.035608f, -0.066334f, 0.050369f, -0.045635f, 0.024140f, 0.034882f, 0.027423f, -0.058772f, 0.073908f, -0.013340f, -0.097570f, -0.110827f, -0.044040f, -0.013571f, -0.032561f, 0.025940f, 0.025110f, 0.043975f, 0.006829f, 0.003945f, -0.033344f, 0.033275f, 0.051620f, 0.076392f, 0.019692f, -0.021698f, 0.007018f, 0.065051f, 0.010395f, -0.035637f, -0.009284f, 0.069434f, 0.015448f, -0.040749f, -0.011062f, 0.034391f, 0.019299f, 0.031348f, 0.020485f, 0.044089f, -0.000109f, 0.024338f, 0.008078f, 0.031295f, 0.014199f, 0.049617f, 0.015895f, 0.031459f, -0.006628f, 0.010075f, 0.001796f, -0.003373f, 0.012611f, -0.004067f, 0.016514f, 0.031091f, 0.004099f, 0.018209f, 0.001693f, 0.023583f, -0.053116f, -0.011827f, 0.039939f, 0.003653f, -0.030775f, -0.146883f, 0.010485f, 0.094376f, -0.057040f, -0.038053f, 0.075796f, -0.055171f, -0.003584f, -0.015686f, 0.072753f, -0.124969f, 0.069849f, 0.041434f, -0.035258f, 0.013021f, 0.068243f, 0.048705f, -0.023890f, 0.027861f, 0.012526f, -0.019060f, 0.032101f, -0.000715f, 0.019468f, + 0.029511f, -0.012586f, 0.007111f, -0.003173f, 0.014062f, -0.018065f, -0.014584f, -0.001139f, 0.025322f, -0.074071f, -0.036705f, 0.036874f, -0.008351f, -0.049100f, -0.058052f, 0.010076f, 0.072165f, -0.031290f, -0.046154f, 0.035534f, 0.053821f, -0.011742f, 0.013509f, -0.009476f, 0.050128f, -0.027197f, 0.075178f, -0.010124f, 0.000107f, 0.041266f, 0.000837f, 0.009545f, -0.053462f, 0.084017f, -0.043441f, -0.052514f, 0.039826f, -0.055607f, -0.018448f, 0.009481f, 0.027717f, 0.077646f, -0.027576f, 0.048448f, -0.009909f, 0.025407f, -0.131438f, -0.100398f, -0.018519f, -0.039075f, 0.019998f, 0.018258f, 0.049813f, -0.007765f, -0.010528f, 0.059612f, -0.065230f, -0.001322f, 0.041597f, 0.041287f, -0.015239f, 0.045993f, 0.005699f, -0.009629f, -0.000316f, -0.010031f, 0.043834f, -0.024248f, -0.002587f, 0.042972f, 0.009745f, -0.009539f, 0.016784f, -0.021085f, 0.005388f, -0.001436f, 0.000636f, 0.017493f, 0.007996f, -0.024124f, -0.005670f, 0.007741f, -0.019032f, -0.027558f, -0.000490f, 0.020538f, 0.035605f, -0.029928f, 0.034783f, 0.012182f, -0.035013f, 0.029176f, 0.032986f, -0.016428f, -0.039652f, 0.036600f, + -0.018194f, 0.006975f, 0.019860f, -0.019627f, -0.052483f, 0.017404f, 0.013910f, -0.028658f, -0.027545f, 0.002348f, 0.019605f, -0.022651f, 0.008318f, -0.009783f, -0.048148f, -0.022148f, 0.036772f, -0.060257f, 0.060671f, -0.051183f, -0.064419f, 0.037749f, -0.030723f, -0.020490f, 0.038541f, -0.027505f, 0.032321f, -0.021453f, 0.015458f, 0.074335f, -0.064992f, -0.003954f, -0.009264f, 0.062740f, 0.009146f, 0.006628f, -0.058109f, -0.054494f, -0.018883f, -0.015373f, -0.007835f, -0.017052f, 0.011685f, 0.003996f, -0.005275f, 0.009938f, 0.014029f, 0.007135f, 0.011056f, -0.010604f, 0.029700f, -0.018033f, 0.028450f, -0.051605f, 0.002597f, -0.041659f, -0.054266f, -0.031671f, 0.073875f, -0.030758f, -0.031440f, -0.023151f, 0.017545f, -0.013811f, 0.033285f, 0.048187f, -0.049020f, 0.045317f, 0.008707f, -0.068004f, -0.033720f, 0.142942f, 0.074468f, -0.106986f, -0.019565f, 0.069239f, -0.033996f, -0.038556f, 0.028279f, -0.033216f, -0.073750f, 0.054254f, 0.025109f, -0.100488f, 0.042418f, 0.052105f, -0.058831f, -0.038525f, 0.061178f, -0.014008f, -0.044765f, 0.011179f, 0.030717f, -0.072601f, 0.014614f, 0.013755f, + 0.021819f, -0.055234f, -0.015975f, -0.004094f, -0.017265f, -0.003094f, 0.004328f, 0.006992f, -0.033603f, 0.006159f, 0.051288f, 0.018288f, 0.003862f, 0.017424f, -0.000216f, -0.007657f, -0.027148f, -0.007891f, -0.014393f, -0.019706f, -0.046971f, 0.013430f, -0.026522f, -0.006833f, 0.059139f, -0.051002f, -0.033132f, 0.043802f, -0.030480f, -0.010612f, -0.012809f, 0.020122f, -0.033071f, -0.011561f, 0.054588f, 0.029247f, -0.025632f, 0.030999f, 0.017685f, -0.021755f, -0.013544f, 0.074065f, -0.057895f, -0.044857f, 0.078802f, 0.000270f, -0.061590f, 0.009249f, 0.039165f, -0.036200f, -0.077073f, 0.052632f, 0.007159f, -0.085587f, 0.015591f, 0.024780f, -0.062265f, -0.000656f, 0.043083f, -0.011090f, -0.027263f, 0.022972f, 0.018483f, -0.042687f, -0.003626f, 0.032733f, -0.023917f, -0.030574f, 0.021985f, 0.001985f, 0.088777f, 0.125972f, -0.051134f, 0.141095f, -0.011734f, -0.039268f, -0.030556f, -0.048441f, -0.004623f, 0.023303f, 0.082931f, 0.002403f, 0.025111f, -0.021675f, -0.072683f, 0.000910f, 0.001996f, 0.047047f, 0.008364f, -0.054896f, 0.100595f, -0.043683f, 0.018233f, 0.045088f, -0.051163f, -0.041386f, + -0.072728f, -0.031959f, 0.043773f, 0.055041f, 0.067765f, -0.026263f, -0.168352f, 0.036764f, 0.086757f, 0.111794f, 0.095664f, -0.001889f, -0.048766f, -0.059856f, 0.019482f, 0.056821f, -0.037309f, -0.019709f, -0.149313f, -0.091382f, 0.078988f, 0.133902f, 0.026710f, -0.004093f, -0.033454f, -0.059166f, -0.014635f, 0.036855f, -0.052877f, 0.019976f, -0.008276f, 0.084511f, -0.004532f, 0.032722f, -0.166969f, -0.021494f, 0.001123f, 0.101609f, 0.078118f, -0.002530f, -0.050683f, -0.014108f, 0.120400f, 0.054463f, -0.143383f, -0.176825f, -0.069879f, 0.035086f, 0.272962f, 0.029233f, -0.048578f, 0.037361f, -0.074339f, 0.194263f, 0.058399f, -0.155316f, -0.097959f, -0.019664f, 0.136401f, 0.020305f, -0.058278f, -0.053374f, -0.050109f, 0.038822f, 0.072933f, 0.036796f, -0.080790f, -0.006914f, -0.028496f, 0.065515f, -0.008236f, 0.039527f, -0.015099f, -0.017021f, -0.054000f, 0.020364f, -0.017339f, -0.005864f, 0.039966f, -0.064819f, 0.036604f, -0.009960f, -0.011037f, 0.000095f, 0.028641f, 0.063903f, 0.031180f, 0.004184f, -0.013879f, 0.013414f, -0.001797f, 0.025869f, 0.007306f, 0.028572f, 0.005866f, 0.007137f, + -0.033771f, 0.014975f, 0.015822f, 0.011581f, -0.001090f, 0.009524f, 0.004703f, 0.028354f, 0.032953f, 0.026455f, 0.002418f, -0.018701f, -0.028744f, 0.008104f, 0.012743f, -0.016575f, 0.013974f, -0.023037f, 0.058415f, -0.067342f, 0.002098f, -0.027114f, 0.015567f, -0.041726f, 0.039150f, 0.010778f, -0.022178f, -0.042099f, -0.020626f, -0.008035f, 0.012285f, -0.057448f, 0.013288f, -0.028176f, -0.010883f, -0.045010f, -0.021096f, 0.036344f, -0.038255f, -0.013638f, -0.005189f, 0.017713f, 0.012136f, -0.015028f, 0.020730f, -0.032993f, -0.002509f, 0.000296f, 0.017774f, -0.021658f, 0.031375f, 0.023216f, -0.023642f, -0.027642f, -0.010381f, 0.044323f, -0.031856f, 0.013909f, 0.033178f, 0.007232f, -0.032024f, -0.012463f, 0.014027f, -0.020347f, 0.015182f, 0.001320f, 0.007448f, -0.029878f, 0.006448f, -0.024330f, -0.000842f, 0.022318f, 0.028600f, 0.021932f, -0.016193f, 0.020914f, 0.002904f, -0.026601f, -0.003678f, -0.000240f, 0.031830f, -0.008845f, 0.006919f, 0.027274f, -0.005652f, -0.035936f, 0.050226f, -0.020475f, 0.029831f, 0.021490f, 0.005382f, 0.006804f, -0.020810f, -0.026078f, 0.034713f, 0.005133f, + 0.030582f, 0.009021f, 0.016806f, 0.008283f, -0.000644f, -0.001706f, -0.026153f, 0.002880f, 0.007395f, 0.009224f, 0.010779f, -0.003383f, 0.012506f, 0.001981f, -0.001274f, 0.003234f, 0.001869f, 0.012479f, -0.003130f, 0.009702f, -0.011840f, -0.003229f, 0.000310f, 0.000836f, -0.006519f, -0.004021f, 0.023702f, 0.014588f, -0.003653f, -0.016888f, -0.018608f, -0.007183f, -0.007312f, 0.021223f, 0.002484f, -0.006632f, -0.013794f, -0.007463f, 0.002348f, -0.011943f, 0.025005f, 0.002074f, -0.009656f, 0.003983f, -0.000105f, -0.004708f, 0.007331f, -0.007473f, 0.021782f, -0.020397f, 0.015084f, -0.019867f, -0.054606f, 0.101291f, 0.008928f, 0.005261f, -0.041333f, 0.023275f, -0.003754f, 0.026373f, 0.020024f, 0.030915f, 0.003148f, 0.007663f, -0.017851f, 0.004770f, 0.028302f, -0.003091f, 0.015354f, -0.002774f, 0.004689f, 0.006041f, 0.011308f, -0.012405f, 0.021356f, -0.015029f, 0.001702f, -0.002662f, 0.007056f, -0.002220f, 0.004069f, 0.016175f, 0.017775f, -0.009010f, 0.007687f, 0.003235f, -0.004320f, -0.008044f, 0.023770f, -0.007680f, 0.004812f, -0.007128f, 0.012301f, -0.000363f, -0.011797f, 0.023886f, + -0.015299f, -0.005487f, 0.006139f, -0.011657f, -0.007151f, -0.003817f, 0.000737f, -0.004638f, 0.000148f, -0.002603f, -0.006507f, 0.007932f, -0.015816f, 0.009531f, 0.006403f, -0.005605f, 0.010068f, -0.008117f, 0.011974f, -0.006571f, 0.002110f, 0.002119f, -0.007587f, 0.011765f, -0.000215f, 0.001409f, -0.004025f, 0.015939f, -0.019461f, 0.020250f, -0.014749f, 0.002203f, 0.003321f, -0.000826f, 0.003588f, -0.003526f, 0.011668f, -0.011404f, 0.000595f, 0.009957f, -0.012493f, 0.007472f, 0.006771f, -0.002056f, 0.001331f, 0.006720f, 0.003125f, -0.003473f, 0.004456f, 0.001021f, -0.001758f, 0.000717f, 0.003893f, 0.000240f, -0.005350f, 0.001169f, 0.001948f, -0.002891f, 0.005786f, -0.001549f, 0.004726f, -0.003391f, 0.000640f, 0.003623f, -0.002687f, 0.000388f, 0.002496f, -0.004077f, 0.006368f, -0.000866f, 0.003069f, -0.001081f, 0.006715f, -0.002676f, 0.000666f, 0.006201f, -0.005805f, 0.007211f, -0.004455f, 0.002993f, -0.004575f, 0.007073f, -0.001255f, 0.019449f, -0.092700f, -0.230811f, 0.035894f, 0.175833f, 0.163356f, 0.283393f, -0.072311f, -0.075823f, -0.192923f, -0.263388f, -0.054305f, 0.095298f, + 0.101945f, 0.192024f, 0.104295f, 0.008271f, -0.049856f, -0.133994f, -0.095290f, -0.016413f, -0.014922f, 0.047806f, 0.044297f, 0.025659f, 0.016338f, 0.012925f, -0.007082f, -0.032886f, -0.002572f, 0.038098f, 0.000271f, 0.008059f, -0.002202f, -0.028476f, -0.021869f, -0.048467f, -0.047567f, 0.021615f, 0.019864f, 0.044155f, 0.067027f, 0.050305f, 0.024513f, 0.008942f, -0.072428f, -0.051138f, -0.039653f, -0.039626f, -0.044314f, 0.009311f, 0.028188f, 0.049154f, 0.062658f, 0.051947f, 0.011258f, -0.006056f, -0.041643f, -0.042386f, -0.025287f, -0.012217f, 0.004020f, 0.007078f, 0.014005f, 0.001324f, -0.013643f, 0.004696f, -0.021743f, 0.011406f, 0.018365f, 0.002209f, 0.036826f, 0.044699f, 0.013729f, -0.008374f, -0.049135f, -0.064523f, -0.026096f, -0.011818f, -0.007615f, 0.032986f, 0.025397f, -0.006591f, 0.028811f, 0.031477f, 0.017466f, 0.021786f, -0.012084f, -0.023174f, -0.018820f, -0.026678f, -0.021367f, -0.003827f, -0.020519f, -0.007948f, 0.001013f, 0.016514f, 0.023038f, 0.033507f, 0.028708f, 0.026695f, 0.020981f, -0.010822f, -0.025131f, -0.041843f, -0.051872f, -0.029969f, -0.022585f, 0.003066f, + 0.024554f, 0.036528f, 0.042037f, 0.033495f, 0.030572f, 0.019958f, -0.026277f, -0.046472f, -0.042249f, -0.020427f, -0.006173f, -0.001730f, 0.003006f, 0.018006f, 0.015541f, 0.007701f, 0.003414f, 0.014780f, 0.008110f, 0.012891f, 0.003372f, -0.019324f, -0.021625f, -0.013895f, -0.005864f, 0.006953f, 0.004580f, -0.006837f, -0.004183f, 0.006940f, 0.003304f, 0.003158f, 0.008746f, 0.014615f, 0.006349f, 0.000643f, -0.007362f, -0.007932f, -0.007131f, -0.008100f, -0.011198f, -0.007933f, -0.000840f, 0.006616f, 0.008465f, 0.011794f, 0.012030f, 0.007163f, -0.000620f, -0.005099f, -0.007062f, -0.005913f, -0.006158f, -0.004034f, -0.003257f, -0.000538f, 0.002771f, 0.004977f, 0.003519f, 0.002611f, 0.001592f, 0.002657f, 0.001215f, -0.000728f, -0.004679f, -0.003913f, -0.001699f, 0.001768f, 0.001984f, 0.000962f, -0.002012f, -0.001206f, -0.000540f, 0.000267f, 0.000000f, 0.001409f, 0.001784f, 0.001194f, -0.000917f, -0.000374f, 0.000156f, 0.001117f, 0.000420f, -0.000294f, -0.001483f, -0.001484f, -0.001668f, -0.000346f, 0.000428f, 0.000642f, -0.000055f, 0.000736f, 0.001315f, 0.002168f, 0.001130f, 0.000007f, + -0.001454f, -0.001607f, -0.001675f, -0.000721f, -0.000382f, 0.000006f, 0.000221f, 0.001077f, 0.000745f, 0.000498f, -0.000116f, -0.000016f, -0.000201f, -0.000059f, -0.000154f, 0.000205f, 0.000009f, -0.000194f, -0.000556f, -0.000217f, -0.000075f, 0.000191f, 0.000010f, 0.000074f, -0.000038f, 0.000064f, 0.000024f, 0.000152f, 0.000066f, 0.000093f, 0.000018f, 0.000018f, -0.000053f, -0.000073f, -0.000088f} + }, + { + {-0.010865f, -0.000140f, 0.002388f, 0.001813f, 0.007766f, 0.001027f, -0.000944f, -0.004995f, 0.011409f, 0.007051f, 0.000378f, -0.001398f, 0.011333f, 0.003853f, -0.003612f, -0.009926f, 0.006346f, -0.002854f, 0.004929f, -0.009447f, 0.000616f, -0.002254f, -0.007018f, -0.001898f, -0.003529f, -0.001302f, 0.000544f, 0.000052f, -0.005116f, -0.003139f, -0.000809f, -0.000981f, -0.003180f, 0.003416f, -0.000323f, -0.003403f, 0.006079f, -0.010099f, -0.004788f, 0.004829f, -0.006063f, 0.000841f, -0.003762f, -0.005542f, 0.003776f, 0.003429f, -0.002973f, 0.003798f, 0.007314f, 0.004120f, -0.003789f, -0.004433f, 0.000801f, 0.001441f, -0.004468f, 0.004847f, 0.008065f, -0.006873f, -0.002196f, 0.003972f, 0.002971f, -0.001635f, -0.002103f, -0.003355f, 0.004445f, 0.001356f, -0.005324f, 0.006060f, 0.002950f, -0.004971f, -0.003730f, 0.006372f, -0.004805f, -0.006137f, -0.011571f, -0.010057f, 0.005476f, 0.006338f, 0.000507f, 0.002784f, -0.001100f, 0.002280f, -0.004287f, 0.006501f, -0.000543f, 0.003010f, -0.002982f, 0.001680f, -0.002717f, -0.002117f, 0.000098f, 0.004166f, -0.000924f, -0.001059f, -0.001870f, 0.000622f, + -0.001414f, 0.000289f, 0.000482f, -0.000859f, -0.001019f, 0.000134f, -0.000063f, -0.000337f, -0.001118f, 0.000564f, -0.000418f, 0.014501f, -0.001406f, -0.002944f, -0.005953f, 0.009277f, -0.004956f, -0.000542f, -0.007559f, -0.008068f, -0.010140f, -0.004780f, 0.007933f, -0.008236f, -0.003084f, -0.002908f, 0.002744f, -0.002063f, -0.011294f, 0.005865f, 0.002818f, 0.021922f, -0.002249f, 0.010247f, -0.002056f, -0.000560f, -0.001002f, 0.001116f, -0.004634f, 0.008478f, -0.002239f, -0.001731f, -0.005135f, -0.000959f, -0.001841f, 0.013146f, 0.002438f, -0.001353f, -0.012346f, -0.001283f, -0.002380f, 0.003702f, -0.007848f, -0.002193f, 0.002117f, 0.001747f, -0.002175f, -0.001347f, -0.004878f, -0.001858f, -0.005862f, -0.002661f, 0.011364f, -0.003371f, 0.003595f, 0.006321f, -0.001540f, -0.006205f, -0.008112f, 0.002079f, 0.001900f, 0.002422f, 0.005037f, 0.005946f, 0.004917f, 0.002816f, -0.002255f, -0.002214f, -0.002609f, -0.011445f, -0.002732f, -0.001191f, 0.005528f, 0.004684f, -0.002822f, -0.000308f, 0.006072f, -0.006365f, 0.002496f, 0.000149f, -0.001582f, -0.003697f, -0.005582f, -0.000102f, 0.003323f, 0.003325f, + 0.003540f, -0.001514f, 0.001456f, -0.001358f, 0.000298f, 0.004941f, 0.002020f, 0.000349f, 0.000046f, -0.000797f, -0.000116f, 0.000280f, 0.000994f, -0.000671f, -0.000692f, 0.002120f, 0.001110f, 0.002159f, 0.002259f, 0.000422f, 0.001258f, -0.000365f, 0.000368f, 0.000121f, -0.001004f, -0.002599f, -0.000459f, -0.019172f, -0.004633f, -0.000324f, -0.004052f, -0.002794f, 0.006792f, -0.013453f, -0.011265f, -0.006576f, -0.004364f, 0.001975f, 0.015238f, -0.003246f, 0.000021f, 0.001876f, -0.010832f, -0.002800f, -0.009038f, -0.001360f, 0.016135f, -0.001196f, -0.007772f, -0.005043f, 0.000254f, 0.003326f, 0.003274f, -0.004468f, -0.020320f, -0.009708f, -0.002675f, -0.007821f, 0.000775f, 0.000412f, 0.008301f, -0.005283f, 0.007379f, 0.001831f, -0.003721f, -0.010870f, -0.009088f, 0.012675f, -0.010391f, 0.006982f, 0.002081f, -0.006654f, -0.002459f, -0.005938f, -0.004241f, 0.005990f, -0.011165f, 0.005841f, 0.002022f, -0.000138f, 0.001931f, 0.000828f, -0.001067f, 0.000292f, -0.005632f, -0.007753f, 0.000611f, -0.002334f, -0.005704f, -0.002285f, -0.008848f, 0.010388f, 0.007137f, 0.001830f, 0.008523f, 0.001046f, + -0.003550f, 0.010554f, -0.005497f, -0.003440f, -0.003520f, 0.008042f, -0.007761f, 0.003516f, 0.005678f, 0.000356f, 0.003538f, 0.008754f, 0.003247f, -0.000223f, 0.000608f, 0.001897f, 0.001505f, -0.001677f, -0.000988f, 0.000150f, -0.000392f, 0.002838f, 0.001416f, 0.002998f, 0.002256f, 0.000884f, -0.002613f, -0.003092f, 0.001947f, -0.000072f, -0.000123f, 0.002900f, -0.001940f, -0.001554f, 0.000009f, 0.000724f, 0.000996f, -0.000247f, -0.003161f, 0.002712f, 0.000774f, -0.002361f, -0.013081f, 0.015700f, 0.017832f, 0.004781f, 0.004688f, -0.005291f, 0.008239f, 0.004061f, -0.010657f, 0.003150f, 0.006623f, -0.012700f, -0.011111f, 0.010892f, -0.009753f, -0.001530f, -0.006337f, 0.010981f, 0.002286f, -0.001404f, -0.004231f, -0.000213f, -0.007345f, 0.006563f, -0.003737f, 0.003925f, -0.001875f, -0.000183f, 0.007091f, 0.002720f, 0.000877f, -0.002922f, 0.006944f, 0.004381f, 0.001968f, -0.000727f, 0.007187f, -0.000688f, 0.001197f, -0.004739f, 0.008790f, 0.001895f, 0.003418f, 0.006428f, -0.018092f, -0.005939f, -0.003686f, -0.006533f, -0.006396f, 0.001716f, 0.009863f, -0.004426f, -0.002823f, -0.005585f, + -0.002606f, 0.002064f, 0.004252f, -0.012449f, -0.000897f, 0.004220f, 0.000348f, -0.001073f, 0.005212f, 0.003404f, -0.011735f, -0.003331f, -0.002677f, 0.007076f, -0.007775f, 0.010034f, 0.010791f, 0.005646f, 0.002099f, -0.005193f, -0.000432f, 0.000789f, 0.007158f, -0.002050f, 0.000716f, 0.000795f, 0.000942f, 0.010736f, 0.001015f, 0.011447f, 0.004088f, 0.000082f, -0.005696f, -0.003244f, 0.004552f, -0.001054f, -0.000182f, 0.000375f, 0.000106f, 0.000969f, 0.004632f, 0.001290f, 0.001698f, 0.000102f, 0.001631f, -0.003926f, -0.000513f, 0.001133f, 0.001342f, -0.001067f, -0.000810f, -0.000057f, 0.001334f, -0.001226f, -0.001044f, 0.001526f, 0.001346f, 0.002830f, 0.001146f, 0.002613f, -0.001807f, 0.000133f, 0.000108f, -0.001143f, 0.002334f, 0.003592f, 0.019992f, -0.003616f, -0.000200f, 0.007350f, 0.004793f, 0.003602f, 0.006802f, 0.017759f, -0.004845f, -0.001547f, -0.016948f, 0.000412f, -0.014549f, -0.018499f, 0.000755f, 0.007986f, -0.023893f, 0.008214f, 0.007943f, 0.004372f, -0.007187f, -0.005689f, -0.007845f, -0.002946f, 0.000562f, 0.000573f, 0.007730f, 0.010143f, -0.001277f, -0.009854f, + -0.005914f, 0.007523f, -0.010553f, -0.005242f, -0.008901f, 0.002006f, -0.014451f, 0.007317f, 0.001264f, -0.000926f, 0.002456f, -0.000411f, -0.003216f, 0.000070f, 0.009493f, -0.010765f, 0.013226f, -0.009898f, -0.001039f, 0.002470f, -0.006479f, -0.005343f, 0.005254f, 0.002577f, -0.001963f, -0.005011f, 0.009909f, 0.004129f, -0.006688f, -0.013612f, 0.001716f, 0.003207f, 0.008127f, -0.000287f, -0.003400f, 0.000733f, 0.004371f, -0.003211f, 0.019136f, -0.006318f, -0.002948f, -0.013513f, -0.008838f, 0.021471f, 0.008845f, -0.004726f, -0.001082f, -0.007419f, -0.008197f, -0.000634f, 0.003130f, 0.000601f, -0.003900f, 0.004657f, 0.002699f, 0.006442f, -0.000526f, -0.004614f, 0.002026f, 0.000215f, -0.001962f, 0.001899f, 0.001967f, -0.000466f, 0.000995f, 0.002555f, 0.000999f, -0.000584f, -0.001762f, 0.001078f, 0.000831f, -0.001779f, 0.003692f, 0.002985f, 0.001135f, -0.001741f, -0.004342f, 0.000333f, -0.000179f, -0.000167f, 0.002175f, -0.002227f, 0.001637f, 0.002375f, 0.000753f, -0.001357f, 0.005584f, 0.012920f, -0.017020f, -0.010015f, 0.012078f, -0.008873f, -0.009452f, -0.010392f, -0.012437f, 0.009112f, + -0.003066f, -0.000276f, -0.002782f, 0.000568f, -0.013849f, -0.002690f, 0.006488f, 0.007075f, 0.001690f, -0.007274f, -0.010605f, -0.008794f, -0.011196f, 0.002383f, 0.013582f, 0.001906f, 0.004464f, 0.004710f, 0.004599f, -0.007834f, 0.008409f, 0.005256f, -0.005831f, -0.004687f, -0.018192f, 0.002901f, 0.004185f, -0.014283f, -0.001040f, 0.004504f, -0.002598f, 0.001860f, -0.001198f, -0.015333f, 0.013209f, -0.014279f, 0.011391f, 0.000690f, 0.005788f, -0.016084f, -0.008947f, -0.014395f, -0.011317f, 0.002187f, -0.003975f, -0.005065f, -0.006339f, 0.000031f, 0.007296f, -0.013317f, -0.000137f, 0.003962f, -0.004234f, -0.014859f, -0.009260f, -0.003054f, 0.002904f, 0.007317f, 0.003238f, -0.012229f, 0.013215f, -0.004163f, -0.002779f, 0.013113f, -0.017027f, -0.005568f, -0.003325f, -0.002997f, 0.020573f, -0.007411f, -0.000263f, -0.007694f, -0.006340f, 0.003778f, 0.002907f, -0.000416f, 0.002279f, -0.001587f, -0.002804f, 0.003874f, 0.000138f, 0.001609f, 0.001723f, 0.004994f, -0.001855f, 0.001484f, 0.001185f, 0.000382f, 0.001383f, -0.005595f, 0.007423f, 0.006700f, -0.002189f, -0.001114f, 0.001129f, -0.000931f, + 0.001343f, 0.000246f, -0.000431f, -0.002677f, 0.001746f, -0.001370f, 0.000728f, 0.006514f, 0.004223f, 0.003511f, -0.002588f, 0.004652f, 0.001928f, -0.001848f, 0.002187f, 0.000727f, 0.001639f, 0.000550f, 0.026277f, -0.023674f, -0.012541f, -0.015814f, 0.011197f, 0.004137f, -0.008142f, 0.005191f, -0.000259f, 0.015582f, 0.000854f, 0.000028f, -0.015294f, 0.010572f, 0.017215f, 0.018069f, 0.014998f, -0.008570f, -0.001430f, 0.002206f, -0.009814f, -0.006752f, 0.002404f, 0.000968f, -0.014081f, -0.006964f, -0.006014f, 0.006684f, -0.001192f, -0.010664f, -0.004983f, 0.003334f, 0.008242f, 0.000907f, -0.003057f, 0.000006f, -0.007540f, -0.000335f, -0.000596f, 0.001015f, -0.016084f, 0.009189f, 0.010844f, 0.002142f, 0.005526f, 0.006419f, -0.013046f, 0.018362f, 0.016513f, 0.002968f, -0.011628f, 0.006499f, -0.004198f, -0.017175f, -0.004470f, -0.005482f, -0.000385f, 0.000961f, -0.000444f, -0.010406f, -0.009335f, -0.021305f, -0.017809f, 0.000173f, 0.010610f, -0.009795f, 0.004406f, 0.001318f, -0.006678f, -0.017363f, -0.001826f, 0.010050f, -0.006819f, 0.009015f, 0.017747f, 0.005370f, -0.007479f, 0.010247f, + -0.000141f, -0.001132f, 0.004781f, 0.007969f, -0.000799f, -0.001439f, 0.002125f, 0.005132f, -0.002955f, -0.011671f, 0.000578f, -0.000366f, 0.001141f, 0.001407f, 0.003805f, 0.008478f, -0.003143f, -0.001532f, 0.006342f, 0.005808f, 0.001166f, 0.000814f, -0.004228f, 0.008173f, 0.000837f, -0.000586f, 0.004832f, 0.001507f, 0.001707f, 0.000800f, 0.004350f, 0.003915f, 0.004327f, 0.007218f, 0.000492f, 0.004294f, 0.000530f, 0.004785f, 0.002210f, 0.002700f, 0.001794f, 0.004528f, 0.003945f, 0.003242f, -0.025246f, 0.002584f, -0.009475f, -0.033791f, -0.026012f, 0.006407f, 0.000164f, -0.005892f, 0.005933f, 0.016137f, -0.002653f, 0.009638f, 0.008537f, 0.004925f, -0.002657f, -0.008856f, 0.007096f, -0.007555f, 0.000835f, -0.006500f, 0.010069f, 0.018462f, -0.016745f, -0.004887f, 0.000971f, 0.006657f, 0.001738f, -0.005279f, -0.003093f, -0.006299f, -0.000541f, -0.007777f, 0.009745f, 0.002070f, -0.011785f, 0.012963f, -0.013138f, -0.004274f, 0.015965f, 0.014028f, 0.011856f, -0.013695f, -0.008982f, -0.012281f, 0.014075f, 0.019052f, -0.000336f, -0.004069f, 0.015142f, -0.022480f, 0.002704f, 0.005891f, + -0.002209f, -0.018911f, 0.016871f, 0.005817f, 0.008553f, 0.015766f, 0.000801f, -0.022802f, 0.005914f, 0.009195f, -0.005849f, -0.001811f, 0.015598f, -0.016334f, -0.015253f, -0.013257f, 0.001551f, 0.020026f, 0.010861f, -0.003043f, 0.023042f, -0.030840f, -0.011362f, 0.000224f, 0.014738f, 0.006738f, -0.004472f, -0.024547f, -0.003842f, -0.009937f, 0.002686f, 0.009131f, 0.023748f, 0.003901f, -0.006745f, 0.002959f, -0.004078f, -0.001741f, -0.007893f, -0.000125f, -0.006508f, 0.002058f, 0.006460f, 0.003512f, 0.005945f, 0.006575f, 0.002117f, 0.001276f, 0.000029f, 0.001024f, -0.003283f, -0.003586f, 0.000285f, 0.006934f, 0.002668f, -0.001053f, 0.001244f, 0.002678f, 0.005699f, 0.000575f, -0.001926f, 0.000784f, -0.001880f, 0.004399f, -0.008515f, -0.005353f, -0.003771f, 0.005127f, 0.004598f, -0.007650f, 0.001654f, -0.027200f, 0.027307f, 0.011044f, -0.000761f, -0.002877f, 0.002212f, 0.004615f, 0.014752f, -0.002908f, 0.001548f, -0.004840f, -0.003519f, 0.008283f, 0.004226f, 0.009632f, 0.004189f, 0.005524f, -0.018607f, -0.007765f, 0.030980f, 0.003057f, 0.009145f, 0.012965f, 0.004812f, -0.010620f, + -0.019623f, 0.005993f, -0.008239f, 0.000645f, 0.006782f, -0.009813f, -0.011524f, 0.013842f, 0.016263f, -0.008609f, -0.006142f, 0.012576f, -0.015653f, 0.006726f, -0.012068f, 0.005302f, -0.011682f, 0.016737f, 0.002256f, -0.002321f, 0.005832f, 0.028821f, 0.007887f, 0.011108f, -0.003354f, 0.001377f, 0.004839f, 0.021258f, -0.001941f, 0.030508f, 0.000820f, 0.014444f, -0.000619f, 0.027529f, 0.009689f, 0.020519f, 0.015556f, -0.003577f, -0.009335f, -0.002595f, -0.010651f, -0.011756f, 0.016106f, -0.003377f, -0.006421f, 0.002406f, 0.000145f, -0.008393f, -0.004127f, 0.002413f, 0.007159f, 0.001895f, -0.013949f, -0.013845f, -0.007225f, -0.014134f, -0.000458f, -0.000412f, -0.004210f, 0.003767f, -0.000366f, 0.005582f, -0.000924f, -0.005835f, 0.001094f, -0.002533f, -0.010648f, -0.006781f, 0.001427f, 0.014010f, -0.006038f, 0.005112f, -0.001677f, -0.000273f, 0.006472f, -0.005035f, 0.002149f, 0.003088f, -0.003665f, -0.002571f, -0.001839f, -0.004167f, 0.001920f, -0.005180f, -0.006666f, -0.002639f, -0.007215f, 0.008836f, -0.002583f, 0.000421f, -0.000834f, -0.000659f, 0.000887f, -0.003095f, 0.001265f, 0.002140f, + 0.001109f, 0.003524f, 0.004796f, 0.000729f, 0.003564f, -0.002832f, -0.007779f, 0.001410f, -0.002185f, 0.003107f, -0.003203f, 0.031936f, -0.008191f, -0.000123f, -0.039017f, -0.001237f, 0.021080f, -0.010803f, 0.018334f, -0.024757f, 0.003760f, 0.002660f, -0.000582f, -0.032880f, -0.001353f, -0.054891f, 0.002731f, -0.005913f, -0.022925f, -0.003863f, 0.003218f, -0.011922f, 0.002221f, 0.014075f, 0.002263f, -0.012443f, 0.002462f, -0.003743f, 0.012326f, -0.013390f, 0.000904f, 0.017813f, 0.004091f, 0.001623f, -0.002523f, 0.013690f, -0.008601f, 0.001581f, 0.000052f, 0.010546f, 0.002113f, -0.018416f, -0.009793f, -0.012941f, 0.015462f, -0.034635f, 0.016943f, 0.014016f, 0.011995f, 0.006811f, 0.002690f, -0.015066f, 0.010949f, -0.022391f, -0.005250f, -0.004573f, -0.004588f, -0.000828f, 0.001519f, 0.007416f, -0.017262f, -0.006643f, 0.029357f, 0.012439f, -0.010586f, -0.012233f, 0.003270f, -0.004979f, 0.009007f, -0.005774f, -0.001722f, -0.009295f, 0.026622f, 0.013699f, -0.009028f, 0.001843f, -0.013437f, 0.003318f, -0.010126f, -0.003343f, 0.010615f, 0.010018f, -0.002992f, 0.019556f, -0.007536f, 0.009798f, + -0.012619f, 0.013714f, 0.002045f, -0.007677f, -0.010619f, -0.015712f, 0.004098f, -0.001556f, 0.007311f, -0.001843f, -0.004641f, 0.003114f, 0.003030f, 0.005009f, 0.003937f, 0.009076f, -0.000286f, 0.003054f, -0.006806f, 0.005740f, -0.004874f, -0.002276f, -0.003647f, -0.000529f, -0.008685f, -0.001300f, 0.003453f, 0.008088f, -0.007463f, -0.003420f, -0.005385f, 0.005615f, 0.004201f, -0.003262f, -0.000650f, -0.005626f, 0.004517f, 0.000745f, 0.020072f, 0.020284f, 0.011734f, 0.010472f, -0.010005f, 0.011661f, 0.019490f, -0.014641f, -0.000621f, -0.037855f, 0.021537f, 0.014680f, -0.005484f, 0.008664f, -0.002535f, 0.002936f, 0.013367f, -0.008539f, 0.020968f, -0.019084f, 0.001726f, 0.023653f, 0.010285f, 0.001384f, 0.018207f, -0.006554f, 0.008304f, 0.004756f, 0.009703f, 0.016144f, -0.009693f, -0.002011f, 0.029794f, 0.014885f, -0.000768f, 0.004063f, -0.020377f, 0.027459f, -0.023288f, -0.001522f, 0.023984f, 0.007421f, 0.025830f, -0.016343f, 0.004043f, -0.001110f, -0.006469f, 0.003426f, -0.025185f, -0.017636f, 0.023504f, -0.011819f, -0.005183f, -0.008040f, -0.026778f, 0.018882f, -0.006408f, -0.004461f, + -0.011935f, 0.011601f, 0.026958f, -0.021395f, -0.004474f, 0.018222f, -0.020186f, -0.008789f, 0.016188f, 0.022729f, -0.037761f, -0.010072f, -0.003359f, 0.016026f, -0.000701f, 0.018723f, -0.004688f, -0.013769f, 0.000780f, 0.009956f, 0.024166f, 0.012231f, -0.016467f, -0.000873f, 0.011821f, -0.024245f, -0.014967f, -0.004657f, -0.012543f, -0.012631f, -0.001620f, 0.011482f, -0.011009f, 0.002679f, 0.011845f, 0.003320f, 0.002012f, 0.008371f, -0.002208f, 0.005389f, 0.005073f, 0.005103f, 0.002801f, -0.000957f, -0.007430f, -0.002486f, -0.002164f, -0.006646f, -0.003138f, 0.001036f, 0.000725f, -0.000991f, 0.000910f, 0.007341f, -0.006177f, -0.001950f, -0.004620f, 0.003526f, 0.003317f, -0.001428f, -0.005136f, -0.011072f, 0.005465f, 0.004237f, 0.007084f, 0.001986f, 0.001639f, -0.000769f, -0.007006f, 0.002794f, -0.002885f, -0.003136f, -0.002119f, 0.001923f, -0.001355f, 0.019681f, 0.041719f, 0.008057f, -0.024685f, -0.008801f, 0.008177f, -0.054747f, 0.001709f, 0.000329f, -0.008591f, -0.002690f, 0.025265f, -0.041315f, 0.009063f, 0.019313f, -0.015219f, 0.017118f, 0.031903f, 0.007920f, -0.029534f, 0.007993f, + -0.007460f, -0.000529f, -0.028954f, -0.008728f, 0.026349f, -0.002954f, 0.024155f, -0.006356f, -0.008516f, 0.003971f, -0.020510f, -0.011496f, -0.014777f, -0.010914f, -0.008096f, 0.019757f, -0.021854f, 0.003564f, 0.038056f, 0.025744f, 0.008544f, -0.038713f, 0.006388f, 0.025437f, 0.010583f, 0.001536f, -0.013870f, -0.016794f, -0.041409f, -0.028541f, 0.005848f, -0.014109f, -0.014198f, -0.000785f, 0.017604f, 0.012544f, -0.012499f, 0.000575f, 0.025070f, -0.009645f, -0.004325f, 0.001177f, 0.032976f, 0.001293f, -0.001737f, 0.016845f, 0.005187f, -0.037574f, 0.010471f, 0.010934f, -0.000265f, -0.031108f, 0.013063f, 0.018287f, -0.013777f, -0.009724f, -0.025630f, 0.006844f, -0.009466f, 0.009714f, 0.004768f, -0.005972f, -0.010919f, 0.007096f, 0.003142f, 0.010934f, -0.005511f, 0.017028f, 0.005911f, -0.011605f, 0.001306f, -0.000557f, -0.016097f, 0.000348f, 0.001199f, -0.000007f, -0.000426f, -0.008386f, -0.007399f, -0.003349f, -0.000305f, 0.010696f, 0.003429f, 0.005616f, 0.008516f, -0.003890f, -0.005223f, 0.004141f, -0.008441f, -0.007417f, -0.000425f, -0.000367f, 0.002484f, -0.002421f, 0.001769f, 0.005287f, + 0.005460f, 0.000742f, -0.003429f, -0.000750f, -0.000562f, -0.000894f, -0.000066f, -0.001341f, 0.000533f, -0.000145f, 0.007115f, -0.004125f, -0.005350f, 0.013257f, 0.009315f, -0.001236f, 0.003520f, -0.005941f, 0.002535f, 0.000186f, -0.002506f, -0.012602f, 0.042830f, 0.002079f, -0.008985f, -0.000882f, 0.018773f, -0.009476f, 0.004971f, -0.004923f, 0.004221f, 0.016060f, -0.030077f, 0.031195f, 0.035374f, 0.009754f, 0.014815f, -0.012359f, 0.019946f, 0.046668f, 0.001260f, -0.005651f, -0.008908f, 0.019712f, -0.007338f, -0.011629f, -0.004214f, 0.006819f, -0.023629f, 0.010138f, -0.020840f, 0.023295f, 0.005115f, 0.023461f, -0.015125f, 0.021362f, 0.006206f, 0.028043f, 0.004459f, 0.005701f, -0.010358f, 0.017369f, 0.004192f, -0.005846f, 0.025204f, -0.010161f, -0.018336f, 0.035716f, 0.028471f, 0.010351f, 0.026901f, 0.039106f, 0.047480f, -0.015080f, -0.015165f, -0.017076f, 0.005755f, -0.022149f, 0.025636f, -0.003439f, -0.002566f, -0.036913f, 0.008317f, 0.041376f, 0.042181f, -0.001875f, -0.005752f, -0.029321f, 0.000261f, 0.027392f, -0.014300f, -0.017463f, 0.015435f, 0.002227f, -0.015256f, 0.005123f, + -0.002635f, -0.009423f, -0.002264f, -0.008112f, -0.000502f, 0.015808f, 0.011739f, -0.003480f, 0.002688f, -0.004090f, -0.016187f, -0.021080f, -0.004064f, 0.010187f, 0.004039f, 0.014507f, -0.003134f, -0.014076f, -0.003961f, 0.015054f, -0.007336f, 0.008480f, 0.013892f, -0.014342f, -0.003923f, -0.001577f, 0.003438f, -0.000963f, 0.009229f, 0.006678f, 0.003241f, -0.014288f, 0.003422f, 0.007523f, 0.002197f, 0.002980f, 0.004950f, -0.012695f, -0.005984f, -0.000179f, -0.000782f, -0.006822f, -0.016373f, -0.005449f, 0.001297f, 0.008231f, 0.001722f, -0.006836f, -0.007883f, 0.002918f, -0.056092f, -0.039087f, 0.021112f, 0.008410f, -0.029225f, 0.003409f, 0.013460f, -0.026638f, -0.016602f, -0.011295f, 0.032553f, 0.014759f, 0.010669f, -0.009897f, -0.007473f, -0.007802f, -0.019651f, -0.026410f, -0.046697f, 0.024856f, 0.021410f, -0.009668f, 0.053583f, 0.025872f, 0.051470f, 0.035364f, 0.003686f, -0.016031f, 0.013957f, 0.006594f, 0.023654f, 0.026999f, 0.029920f, -0.003921f, -0.004742f, 0.012882f, -0.012880f, -0.002773f, -0.011295f, -0.021736f, -0.035780f, -0.010255f, 0.037364f, -0.008837f, -0.014268f, -0.020585f, + 0.015153f, 0.022645f, 0.015348f, 0.001767f, 0.022228f, 0.042688f, -0.024801f, -0.011243f, -0.018974f, -0.013832f, -0.040352f, -0.009704f, 0.010829f, -0.018304f, -0.014038f, -0.046761f, -0.066480f, 0.007622f, -0.043624f, -0.069182f, -0.049738f, -0.020871f, 0.045486f, 0.015812f, 0.027968f, 0.020839f, -0.045768f, -0.019289f, 0.004540f, 0.023471f, -0.022462f, -0.027032f, -0.025825f, -0.007964f, 0.014329f, -0.015445f, -0.057149f, -0.036088f, -0.007745f, -0.011465f, -0.003591f, -0.008338f, 0.033154f, 0.029962f, 0.031398f, 0.031654f, 0.011039f, -0.000054f, 0.012402f, 0.003506f, -0.000397f, 0.009496f, -0.025403f, -0.009849f, 0.011896f, 0.015420f, -0.000089f, -0.008280f, -0.008782f, 0.004008f, -0.013532f, -0.020402f, 0.019549f, -0.015161f, -0.007132f, 0.001873f, -0.017255f, -0.016724f, -0.029887f, -0.011764f, -0.006515f, 0.002326f, 0.026180f, -0.006413f, -0.003106f, -0.007948f, 0.013696f, -0.006732f, 0.001397f, 0.012555f, 0.001709f, -0.008658f, 0.006425f, 0.012509f, -0.006889f, -0.001757f, 0.000338f, -0.004219f, 0.007648f, -0.106329f, -0.015787f, 0.035607f, -0.035498f, 0.016099f, -0.013186f, -0.057178f, + -0.017099f, 0.063493f, 0.079633f, -0.040624f, 0.002503f, -0.013272f, -0.063080f, -0.049957f, -0.047222f, -0.050388f, -0.026510f, -0.032519f, -0.001762f, 0.012115f, -0.007958f, 0.014244f, 0.013104f, -0.019966f, -0.004783f, -0.027812f, 0.013126f, -0.044427f, -0.040061f, 0.010959f, 0.008036f, -0.011295f, -0.014094f, 0.036842f, -0.009585f, 0.050730f, 0.011896f, 0.047108f, -0.030217f, 0.021148f, 0.013903f, 0.056829f, 0.030663f, 0.020655f, 0.006206f, 0.009557f, -0.005733f, 0.017495f, 0.023806f, -0.016890f, -0.024294f, 0.040121f, -0.004560f, -0.047802f, -0.093060f, -0.111791f, -0.080606f, 0.014623f, 0.000657f, -0.104026f, 0.034942f, 0.019006f, 0.027094f, -0.034752f, 0.005309f, 0.013469f, 0.005430f, 0.055040f, 0.055708f, 0.110967f, 0.037223f, -0.057495f, -0.074517f, -0.045143f, -0.040861f, -0.047000f, -0.042109f, -0.000406f, 0.024110f, 0.032624f, -0.019651f, 0.042606f, -0.034970f, -0.048621f, -0.038042f, -0.024609f, -0.018718f, -0.037760f, 0.024939f, -0.001621f, 0.023870f, 0.018947f, 0.003262f, 0.041864f, -0.020847f, -0.008278f, -0.040068f, 0.014729f, 0.022151f, -0.002341f, -0.003169f, 0.013329f, + -0.038492f, 0.002478f, -0.013424f, 0.008490f, -0.018346f, -0.025717f, 0.016626f, 0.000261f, -0.010733f, -0.003212f, 0.019453f, -0.013973f, 0.010232f, -0.012937f, 0.011591f, 0.010785f, -0.005165f, -0.012838f, 0.009072f, 0.010584f, -0.028392f, 0.012972f, -0.007015f, -0.007455f, -0.008540f, 0.007170f, -0.019135f, -0.008759f, 0.060236f, -0.016116f, -0.113824f, -0.032520f, 0.093697f, -0.012961f, 0.020889f, 0.013381f, 0.017482f, 0.032855f, 0.026854f, 0.009422f, -0.018594f, -0.006845f, 0.004625f, -0.020202f, -0.004751f, 0.034490f, -0.030854f, -0.018272f, -0.030936f, -0.007316f, 0.005265f, 0.004056f, 0.008127f, 0.016202f, -0.023556f, 0.021057f, 0.051240f, -0.000797f, -0.030018f, 0.002877f, -0.019672f, -0.006601f, 0.030348f, -0.031938f, 0.003541f, 0.010328f, 0.037117f, 0.054096f, -0.034384f, -0.019353f, 0.020767f, 0.003100f, 0.005772f, 0.006492f, -0.022867f, -0.057831f, -0.010519f, -0.026771f, 0.052698f, -0.100076f, -0.066141f, -0.026872f, -0.011109f, 0.029299f, 0.005891f, -0.035110f, -0.006166f, -0.040487f, -0.044295f, -0.015442f, -0.032099f, 0.006169f, 0.025930f, 0.121015f, 0.022110f, -0.017556f, + -0.077889f, -0.063430f, 0.018652f, -0.001559f, -0.073158f, 0.039742f, 0.038814f, -0.073700f, -0.001712f, 0.019710f, 0.021067f, 0.080367f, 0.034756f, 0.017147f, -0.079361f, -0.040275f, -0.054889f, 0.050080f, -0.005394f, -0.015783f, -0.009237f, 0.015967f, 0.051907f, 0.044917f, -0.023837f, -0.046369f, -0.068946f, 0.017130f, 0.040053f, -0.013775f, -0.007500f, 0.036216f, 0.019907f, 0.031642f, 0.007366f, 0.011628f, -0.026906f, -0.007332f, -0.013011f, 0.014009f, 0.013484f, -0.003140f, -0.006685f, -0.003372f, 0.018341f, 0.021819f, -0.031669f, 0.018585f, 0.013035f, 0.026267f, -0.017096f, -0.010842f, 0.015466f, 0.006300f, -0.023117f, -0.001736f, 0.025689f, 0.005617f, -0.020212f, -0.006627f, 0.002671f, -0.038723f, -0.133883f, 0.020337f, 0.022029f, -0.003406f, -0.001092f, -0.009337f, -0.037767f, 0.016305f, -0.007476f, 0.069893f, -0.069966f, -0.013458f, 0.073606f, -0.002310f, -0.047973f, -0.005002f, 0.043860f, 0.053071f, 0.033025f, -0.008335f, 0.038300f, -0.027155f, 0.026210f, -0.010435f, -0.008606f, -0.023368f, 0.041852f, 0.028772f, -0.025625f, -0.011278f, -0.002877f, 0.042390f, -0.002901f, 0.005374f, + -0.025593f, 0.028875f, 0.019119f, -0.029710f, 0.056636f, 0.003445f, -0.049052f, 0.045151f, -0.053376f, -0.027734f, 0.050493f, -0.104717f, -0.066357f, 0.058388f, -0.035508f, 0.043527f, -0.066004f, 0.015874f, 0.025559f, -0.035897f, 0.002394f, -0.001971f, -0.068152f, -0.015115f, 0.072389f, 0.076295f, -0.084755f, -0.027536f, 0.027163f, -0.067820f, 0.089765f, 0.089831f, 0.013732f, -0.126317f, -0.065791f, 0.136247f, -0.070478f, -0.013327f, 0.110761f, -0.063459f, -0.130367f, -0.028542f, 0.119687f, -0.024598f, -0.085592f, -0.020334f, -0.157095f, -0.006260f, 0.129144f, -0.045719f, -0.126774f, -0.012020f, -0.034843f, -0.016246f, 0.039116f, -0.003566f, -0.000429f, -0.045591f, -0.029396f, -0.013849f, 0.052309f, -0.064023f, 0.004293f, 0.011454f, -0.019270f, 0.003317f, 0.062067f, -0.037978f, -0.047912f, -0.005451f, 0.018291f, 0.039295f, -0.014097f, 0.020305f, 0.030272f, 0.004409f, -0.043135f, -0.022541f, 0.002135f, -0.034196f, -0.016010f, 0.068594f, -0.024336f, -0.064762f, -0.016518f, 0.039522f, 0.017036f, -0.003865f, 0.009686f, -0.058431f, -0.033196f, 0.046506f, 0.068356f, 0.009315f, -0.048686f, -0.023161f, + 0.003296f, 0.018981f, 0.034837f, 0.004674f, -0.019098f, -0.074060f, -0.069886f, -0.001558f, -0.088229f, -0.025833f, -0.037505f, -0.035145f, -0.026656f, 0.057729f, -0.006278f, -0.018034f, -0.024219f, 0.011587f, -0.030996f, -0.073268f, 0.057051f, 0.018354f, 0.049280f, 0.015854f, 0.050961f, -0.019845f, -0.031494f, 0.011743f, -0.053302f, 0.041858f, -0.048280f, -0.009750f, 0.031809f, -0.036158f, -0.007741f, -0.021763f, -0.058461f, 0.009301f, -0.044146f, -0.031348f, -0.038524f, -0.028026f, -0.017620f, -0.038675f, 0.006900f, 0.043986f, -0.029414f, -0.009931f, 0.005353f, 0.040595f, -0.018262f, 0.014744f, -0.041081f, 0.067261f, 0.020848f, 0.029175f, 0.018254f, 0.064552f, -0.003776f, -0.074588f, 0.016566f, 0.027903f, -0.020917f, 0.000365f, 0.039554f, -0.051679f, -0.051891f, -0.060067f, 0.052384f, 0.016167f, -0.074688f, 0.029732f, -0.049310f, -0.008980f, -0.069708f, 0.031487f, 0.049448f, 0.010909f, -0.077224f, 0.044006f, 0.035762f, -0.009180f, -0.067892f, 0.018987f, -0.040989f, -0.013336f, -0.003008f, -0.020033f, 0.033545f, -0.029641f, -0.055095f, 0.028017f, -0.012360f, 0.023809f, -0.000389f, -0.001359f, + -0.000453f, -0.014239f, -0.017237f, 0.012337f, 0.049013f, -0.005272f, -0.069511f, -0.018484f, 0.028748f, -0.033576f, -0.014760f, 0.034038f, -0.012712f, -0.004054f, -0.027916f, 0.055162f, 0.031791f, -0.015304f, 0.024284f, -0.003599f, 0.010797f, 0.044914f, -0.008218f, -0.037902f, 0.015938f, 0.025985f, -0.020188f, 0.032608f, -0.005393f, 0.020433f, 0.002012f, -0.013578f, 0.026297f, 0.039482f, -0.022416f, -0.039874f, 0.015654f, 0.025883f, -0.020372f, -0.003199f, 0.022932f, 0.008925f, -0.015958f, -0.015972f, 0.020309f, 0.065400f, 0.123130f, -0.030003f, 0.060919f, 0.011605f, -0.029440f, -0.055476f, -0.032428f, 0.071473f, -0.023797f, 0.013011f, 0.027600f, -0.007582f, 0.065921f, -0.010070f, 0.051685f, 0.053941f, -0.066866f, 0.033992f, -0.017681f, 0.001270f, 0.024211f, 0.019925f, -0.002490f, 0.010468f, 0.019570f, 0.066089f, 0.068127f, 0.052351f, -0.038782f, -0.013531f, -0.091018f, -0.003112f, 0.021274f, 0.040620f, 0.009285f, -0.075531f, 0.032761f, -0.045491f, 0.058154f, -0.053049f, -0.036981f, 0.003416f, -0.044213f, -0.007952f, -0.025578f, 0.089364f, -0.049180f, -0.024415f, -0.094189f, -0.031004f, + -0.049496f, 0.132427f, 0.080655f, -0.028400f, -0.089578f, -0.096358f, -0.057102f, 0.065666f, 0.086152f, 0.043304f, 0.012650f, -0.115551f, -0.053517f, 0.037423f, 0.032266f, 0.004587f, 0.041611f, -0.024313f, -0.075825f, 0.035449f, -0.128607f, 0.139430f, -0.013093f, -0.090836f, 0.210366f, 0.029744f, 0.073213f, 0.125655f, -0.208829f, -0.150900f, 0.041707f, -0.012837f, 0.031964f, 0.045299f, -0.130516f, -0.010107f, 0.026409f, 0.002187f, 0.109442f, 0.007322f, -0.057198f, -0.006423f, 0.058878f, -0.034564f, 0.025783f, 0.029773f, 0.001308f, -0.024363f, 0.028873f, -0.076461f, 0.058155f, -0.015277f, -0.024073f, 0.032310f, 0.008872f, 0.001890f, 0.034534f, -0.008563f, 0.020759f, -0.004652f, 0.013394f, -0.010364f, -0.039742f, 0.023798f, 0.017080f, 0.022484f, -0.000023f, 0.000251f, 0.015924f, 0.008312f, 0.006326f, 0.046064f, 0.051876f, 0.002553f, 0.034089f, -0.032224f, 0.005069f, -0.021293f, 0.039405f, 0.035316f, 0.005808f, -0.010698f, -0.023206f, -0.055517f, -0.024010f, 0.004386f, -0.054830f, 0.036883f, -0.077410f, 0.047707f, -0.031948f, 0.078371f, -0.035554f, -0.003752f, 0.044548f, 0.007855f, + 0.003757f, -0.020321f, -0.017687f, 0.001960f, -0.030231f, 0.033040f, -0.004038f, 0.035097f, -0.027755f, -0.027246f, 0.009066f, 0.001333f, -0.028148f, 0.017573f, -0.003721f, 0.015338f, -0.008784f, -0.007589f, 0.014489f, -0.014049f, -0.001352f, 0.010940f, -0.005914f, -0.006703f, 0.055466f, -0.003828f, -0.018872f, -0.009968f, 0.026213f, -0.002402f, -0.030567f, 0.016124f, 0.032346f, 0.006616f, 0.000535f, -0.019249f, 0.006598f, -0.015575f, 0.014683f, 0.039647f, -0.014318f, 0.018166f, -0.015195f, -0.004380f, -0.016625f, -0.007656f, 0.010164f, 0.012892f, -0.023424f, 0.014039f, 0.003847f, -0.002839f, -0.023434f, 0.004081f, 0.008105f, -0.017027f, 0.024551f, 0.020987f, -0.042116f, 0.010814f, -0.038691f, -0.043460f, 0.029653f, -0.015370f, 0.035878f, 0.019893f, 0.000747f, 0.018732f, -0.006149f, -0.022311f, -0.005747f, 0.001547f, 0.024863f, -0.011175f, 0.007346f, 0.010619f, -0.014904f, -0.002409f, 0.008358f, -0.004139f, -0.003220f, 0.014864f, -0.000598f, 0.005870f, -0.012481f, 0.005309f, -0.001690f, -0.012122f, 0.023049f, 0.002377f, 0.018717f, -0.009057f, 0.015273f, -0.007558f, 0.000604f, -0.012025f, + 0.010021f, -0.005644f, 0.022751f, -0.006870f, 0.021471f, -0.022239f, 0.004451f, 0.001908f, -0.005337f, 0.001221f, 0.002171f, 0.017969f, -0.001386f, -0.020119f, 0.012986f, -0.011112f, 0.001545f, 0.013006f, -0.013432f, 0.022371f, -0.045642f, 0.095849f, 0.017940f, 0.023413f, -0.012393f, 0.008604f, -0.002979f, 0.018015f, 0.005553f, 0.040749f, 0.002629f, -0.022382f, 0.013292f, -0.014666f, 0.006125f, 0.008206f, -0.018968f, 0.000820f, 0.004351f, -0.020478f, 0.018331f, 0.004576f, -0.008513f, 0.024721f, -0.009078f, 0.009664f, -0.007792f, 0.004462f, 0.004573f, 0.002100f, -0.003303f, -0.007538f, -0.003570f, 0.003309f, 0.000447f, -0.004326f, -0.012277f, 0.008863f, -0.008298f, 0.004334f, 0.007788f, -0.008461f, 0.001598f, -0.007915f, 0.002060f, -0.012452f, -0.020058f, 0.020373f, -0.011194f, -0.005503f, 0.008566f, 0.003833f, -0.003662f, 0.002158f, 0.017516f, -0.019657f, 0.008281f, -0.007522f, 0.015158f, -0.016552f, 0.009171f, 0.004405f, -0.003028f, 0.003397f, 0.000248f, 0.000035f, 0.007353f, -0.010540f, 0.005697f, 0.004942f, -0.002939f, -0.001205f, 0.013244f, -0.002251f, 0.004428f, -0.015715f, + 0.020808f, -0.016429f, -0.000373f, 0.010276f, -0.009571f, 0.006951f, 0.002218f, 0.002326f, -0.009999f, 0.007775f, 0.008179f, -0.005414f, 0.003168f, 0.003918f, -0.007155f, 0.002271f, 0.003349f, -0.001733f, 0.007173f, 0.000113f, -0.000274f, -0.000996f, 0.006430f, 0.004827f, -0.004257f, 0.005467f, -0.003030f, 0.002328f, 0.002774f, -0.000935f, 0.008030f, -0.003890f, -0.000040f, 0.004963f, -0.006526f, 0.000285f, -0.000749f, -0.004779f, 0.000549f, 0.004411f, -0.001468f, -0.004059f, 0.008007f, -0.005416f, 0.001132f, 0.018165f, -0.085325f, -0.211813f, 0.045752f, 0.176142f, 0.119061f, 0.248441f, -0.081261f, -0.069451f, -0.142942f, -0.228432f, -0.022590f, 0.071215f, 0.093846f, 0.122512f, 0.061743f, 0.006791f, -0.020044f, -0.052945f, -0.075560f, -0.011424f, -0.020200f, 0.007462f, 0.017317f, -0.000873f, 0.004332f, 0.009162f, 0.004025f, 0.029946f, 0.035494f, 0.022109f, -0.004104f, 0.004139f, -0.026320f, -0.055122f, -0.058814f, -0.028786f, -0.038589f, 0.031791f, 0.058486f, 0.062155f, 0.068155f, 0.037417f, -0.011070f, -0.026886f, -0.050164f, -0.052905f, -0.036837f, -0.020656f, -0.002426f, 0.013419f, + 0.025667f, 0.027654f, 0.023173f, 0.020058f, -0.003483f, 0.005430f, -0.005967f, 0.002707f, -0.004498f, -0.002681f, -0.001643f, -0.018717f, -0.019729f, -0.014194f, -0.029711f, 0.000101f, -0.005639f, 0.003800f, 0.050395f, 0.066527f, 0.022383f, 0.022591f, -0.018284f, -0.036457f, -0.025304f, -0.043912f, -0.035380f, 0.012526f, -0.003088f, -0.021246f, 0.016337f, 0.017637f, 0.020884f, 0.049827f, 0.020648f, 0.021906f, 0.005378f, -0.026699f, -0.026451f, -0.021521f, -0.023634f, -0.029768f, -0.025546f, -0.015096f, 0.004649f, 0.033318f, 0.050024f, 0.046986f, 0.018964f, 0.009573f, -0.012258f, -0.022599f, -0.020461f, -0.022394f, -0.026029f, -0.011777f, -0.010862f, -0.000779f, 0.008726f, 0.006848f, 0.020157f, 0.026923f, 0.019351f, 0.013339f, 0.004618f, -0.001572f, -0.012735f, -0.013008f, -0.020513f, -0.022919f, -0.018148f, -0.016031f, -0.004116f, 0.017345f, 0.025706f, 0.027855f, 0.024611f, 0.010175f, 0.004547f, -0.012228f, -0.019634f, -0.010323f, -0.014508f, -0.019578f, -0.014920f, 0.002872f, 0.013423f, 0.012751f, 0.007099f, 0.008180f, 0.007266f, 0.005720f, 0.001691f, -0.001207f, -0.002027f, -0.005043f, + -0.006661f, -0.006024f, -0.007180f, -0.008322f, -0.004492f, 0.003975f, 0.006968f, 0.009008f, 0.007508f, 0.005505f, 0.001877f, 0.000251f, -0.002197f, -0.003133f, -0.004060f, -0.004411f, -0.005010f, -0.002847f, -0.001115f, 0.001794f, 0.002917f, 0.002928f, 0.002497f, 0.002274f, 0.000469f, 0.000075f, -0.000544f, 0.000361f, 0.000342f, 0.001172f, -0.001653f, -0.002936f, -0.002564f, -0.001400f, -0.001317f, 0.000626f, 0.001798f, 0.002369f, 0.001399f, -0.000753f, -0.001000f, 0.001380f, 0.002198f, 0.001888f, -0.000591f, -0.002317f, -0.002728f, -0.000981f, -0.000071f, 0.000510f, -0.000317f, -0.000506f, -0.000662f, 0.000171f, 0.000655f, 0.001602f, 0.001247f, 0.001221f, 0.000850f, 0.000241f, -0.000803f, -0.001177f, -0.001590f, -0.001340f, -0.001388f, -0.000811f, 0.000289f, 0.001465f, 0.001407f, 0.001348f, 0.000809f, 0.000564f, 0.000339f, -0.000205f, -0.001098f, -0.001007f, -0.000821f, -0.000444f, -0.000162f, 0.000229f, 0.000008f, 0.000038f, 0.000144f, 0.000389f, 0.000446f, 0.000376f, 0.000074f, -0.000104f, -0.000205f, -0.000158f, -0.000098f, -0.000042f, -0.000048f}, + {-0.012004f, 0.001487f, 0.003775f, 0.003656f, 0.018818f, 0.005091f, 0.003952f, -0.005613f, 0.000693f, -0.009588f, 0.002214f, 0.008749f, -0.004481f, 0.000389f, -0.001882f, -0.004734f, -0.007604f, 0.005819f, -0.012700f, -0.006426f, -0.006388f, 0.006841f, 0.007500f, 0.003936f, 0.001773f, 0.005421f, 0.004473f, 0.008974f, -0.003157f, 0.003122f, 0.005573f, 0.001158f, 0.001817f, -0.006598f, -0.002858f, -0.002777f, -0.002500f, 0.006057f, -0.011683f, 0.001919f, -0.004066f, 0.012184f, 0.000264f, -0.002230f, -0.003092f, -0.005066f, -0.001705f, -0.005286f, -0.015400f, -0.004896f, -0.003038f, -0.002514f, -0.003476f, 0.001559f, -0.002909f, -0.000755f, -0.001018f, 0.005352f, 0.002380f, -0.000727f, 0.003411f, -0.003043f, 0.006572f, -0.004356f, -0.007184f, 0.006882f, 0.007220f, -0.003164f, -0.006901f, 0.000628f, 0.003737f, 0.002810f, 0.003244f, -0.003287f, 0.000012f, 0.002625f, 0.003557f, 0.001533f, -0.001014f, 0.000406f, 0.004427f, 0.008553f, 0.004129f, -0.001095f, -0.000133f, -0.002070f, -0.002182f, 0.001759f, -0.002864f, 0.001708f, 0.002090f, -0.000868f, -0.000310f, 0.000901f, 0.000794f, -0.000901f, + 0.000685f, 0.000453f, -0.003974f, 0.000587f, 0.000277f, 0.001185f, 0.000671f, -0.001548f, 0.001395f, 0.001087f, -0.000133f, 0.017010f, -0.003232f, -0.001674f, 0.001789f, 0.004664f, -0.012607f, 0.007784f, -0.014957f, -0.000714f, -0.007262f, -0.001103f, -0.004814f, -0.001167f, -0.001204f, 0.007455f, -0.006361f, 0.008078f, -0.008507f, -0.009287f, 0.003877f, 0.012369f, -0.014671f, -0.004103f, -0.007118f, 0.000063f, -0.003723f, 0.003915f, 0.005205f, 0.002614f, 0.005303f, -0.008540f, 0.000268f, 0.011893f, 0.004645f, 0.001481f, -0.008704f, -0.012412f, -0.007489f, 0.001860f, -0.006373f, -0.003612f, 0.002375f, 0.007998f, -0.007285f, -0.007172f, 0.002849f, -0.005254f, 0.009185f, 0.003054f, -0.000993f, 0.006470f, 0.006136f, -0.000045f, 0.010328f, 0.005094f, 0.003204f, 0.002711f, 0.006755f, 0.010669f, -0.007095f, 0.002010f, 0.002897f, -0.007565f, 0.000624f, 0.006078f, -0.002425f, 0.015425f, -0.004821f, -0.004140f, -0.003266f, 0.005664f, 0.007821f, -0.010065f, -0.004132f, 0.002693f, -0.001868f, 0.002425f, 0.000921f, -0.004432f, 0.001912f, 0.000901f, -0.003287f, -0.005353f, 0.002140f, 0.001452f, + 0.004825f, 0.000372f, 0.001453f, 0.002200f, -0.000270f, -0.001634f, 0.003521f, 0.000175f, -0.000068f, 0.003041f, -0.001725f, 0.001453f, 0.004053f, -0.000385f, -0.000944f, 0.000739f, -0.000670f, 0.001230f, -0.002574f, -0.000828f, -0.001230f, 0.000127f, -0.000441f, 0.001569f, 0.000111f, -0.001614f, 0.000010f, -0.021880f, -0.003523f, -0.004859f, -0.003880f, -0.001937f, -0.002657f, 0.011676f, 0.013953f, -0.003158f, 0.011389f, 0.004360f, -0.006261f, 0.002986f, -0.009500f, 0.001703f, 0.002037f, -0.012778f, -0.001873f, 0.002012f, 0.002259f, 0.008877f, -0.001683f, 0.007714f, -0.005133f, -0.009797f, -0.010347f, -0.002944f, -0.005225f, -0.007842f, 0.008161f, -0.003169f, -0.001554f, -0.001403f, 0.001720f, 0.004454f, -0.012540f, 0.000071f, 0.001772f, -0.005931f, 0.014987f, 0.001194f, -0.003673f, -0.003222f, 0.016001f, -0.001120f, 0.002049f, 0.009476f, 0.000299f, 0.005801f, 0.002268f, 0.000558f, 0.008838f, -0.000027f, -0.006153f, 0.007941f, 0.004265f, 0.005110f, 0.007194f, 0.002397f, -0.005809f, 0.004174f, 0.005906f, 0.005743f, 0.008852f, 0.000079f, -0.008164f, -0.006515f, 0.010378f, 0.014445f, + -0.013143f, 0.002670f, -0.003466f, -0.002293f, 0.003038f, 0.005533f, 0.005302f, -0.004182f, -0.001676f, -0.004040f, -0.006771f, -0.005907f, -0.002163f, -0.003745f, -0.005818f, 0.001358f, -0.001576f, 0.002243f, 0.001900f, -0.001784f, 0.001063f, 0.000386f, -0.004725f, 0.001629f, -0.003190f, -0.005728f, 0.000400f, -0.001669f, -0.002406f, -0.002557f, -0.000722f, 0.001071f, -0.000863f, 0.001689f, -0.001094f, -0.001914f, -0.002658f, -0.002437f, -0.001049f, 0.000472f, 0.001915f, -0.003706f, -0.016129f, 0.017185f, 0.015920f, 0.012002f, -0.008377f, 0.009382f, 0.016941f, -0.004264f, 0.013238f, 0.004982f, 0.001986f, -0.002064f, 0.014597f, 0.006900f, -0.003421f, -0.010472f, 0.006070f, -0.004340f, -0.005602f, 0.005914f, 0.006983f, 0.003064f, -0.010398f, 0.001687f, 0.009332f, -0.004554f, 0.003163f, -0.020448f, 0.002944f, -0.001645f, 0.009850f, 0.002410f, -0.004244f, -0.006165f, 0.012607f, -0.010853f, 0.000878f, -0.008765f, 0.001024f, -0.002684f, 0.007042f, -0.001467f, -0.002297f, -0.010740f, -0.002578f, -0.001893f, 0.013338f, 0.000667f, -0.012202f, -0.000449f, -0.000674f, 0.004174f, 0.006378f, -0.005426f, + 0.000024f, -0.006924f, 0.007394f, -0.001618f, 0.008937f, -0.004818f, 0.013305f, 0.006613f, -0.014684f, 0.015565f, -0.002243f, -0.010745f, 0.001831f, 0.014225f, 0.002889f, 0.002195f, -0.011500f, -0.000744f, -0.004455f, -0.006208f, -0.006024f, 0.000555f, 0.005423f, 0.007010f, 0.003806f, 0.003836f, -0.004488f, 0.003388f, -0.003890f, -0.000432f, -0.000208f, -0.001785f, -0.000747f, 0.004060f, -0.006393f, 0.001756f, -0.000624f, 0.000577f, 0.002149f, 0.001765f, -0.000172f, 0.002799f, 0.000305f, -0.004190f, -0.004557f, 0.002700f, 0.001234f, -0.000160f, -0.003009f, -0.000571f, 0.000727f, -0.000381f, -0.001315f, -0.002906f, 0.001851f, -0.000021f, -0.001828f, 0.002066f, -0.001217f, -0.000771f, -0.002343f, -0.001406f, -0.000884f, -0.002930f, 0.002085f, 0.001699f, 0.018711f, -0.006245f, -0.013294f, -0.000556f, -0.020011f, 0.000120f, -0.017174f, -0.005880f, 0.012055f, -0.012215f, -0.013488f, 0.004225f, 0.001280f, 0.001363f, -0.003047f, -0.004328f, -0.009721f, 0.006820f, -0.019164f, -0.005801f, 0.002109f, 0.012113f, 0.000856f, 0.012287f, 0.004471f, 0.026830f, 0.010377f, -0.000141f, 0.001328f, 0.012852f, + -0.002883f, -0.003665f, -0.002234f, 0.002248f, -0.008258f, -0.004039f, -0.014028f, -0.000851f, -0.006360f, -0.003765f, 0.017629f, 0.000426f, 0.011089f, -0.004237f, 0.004616f, -0.000960f, 0.006681f, -0.002039f, 0.006231f, -0.005859f, -0.007273f, -0.001053f, 0.002263f, -0.007359f, -0.007341f, 0.000807f, 0.004023f, 0.008265f, -0.001006f, -0.003651f, -0.001489f, 0.007850f, 0.013300f, 0.000869f, -0.008779f, -0.012651f, 0.000352f, 0.003661f, 0.001510f, 0.017611f, -0.010777f, -0.000448f, 0.007991f, -0.002744f, -0.008998f, 0.012456f, 0.005811f, 0.002333f, -0.005919f, -0.006427f, -0.010765f, -0.004139f, -0.000996f, -0.005526f, -0.002664f, -0.004766f, 0.001115f, 0.001421f, 0.002917f, 0.000501f, 0.000993f, -0.005951f, -0.002975f, -0.006390f, -0.002089f, -0.001737f, -0.004799f, -0.003015f, 0.001904f, -0.000426f, -0.001918f, -0.000411f, 0.001813f, -0.003940f, 0.002246f, -0.002797f, -0.000143f, -0.001073f, -0.002042f, -0.000627f, 0.000144f, 0.002008f, -0.002688f, -0.004131f, 0.003632f, 0.002219f, 0.001183f, 0.016624f, -0.012710f, -0.002567f, 0.001089f, -0.000965f, -0.000441f, -0.010464f, -0.008042f, -0.001110f, + 0.006995f, 0.002553f, 0.002830f, 0.002952f, 0.007351f, -0.001482f, 0.006727f, 0.005443f, -0.017223f, -0.006612f, -0.020219f, 0.005273f, -0.007097f, 0.010211f, -0.006526f, -0.008929f, -0.006521f, 0.005313f, -0.013461f, -0.011211f, 0.015728f, -0.008556f, 0.017050f, -0.004012f, 0.005158f, -0.005982f, -0.011416f, 0.012630f, -0.009676f, -0.010905f, -0.001052f, -0.005930f, -0.012778f, -0.009869f, -0.016123f, 0.000670f, 0.010433f, 0.005983f, -0.006240f, 0.017955f, 0.006626f, -0.006601f, -0.008300f, -0.012995f, 0.000610f, -0.004874f, -0.009045f, -0.004590f, -0.003811f, -0.006410f, 0.003465f, 0.014355f, -0.000824f, 0.000931f, -0.009685f, 0.004557f, 0.004911f, -0.008482f, -0.006674f, 0.003417f, 0.017512f, 0.006939f, -0.004285f, -0.002336f, -0.003621f, -0.018009f, -0.014108f, -0.011967f, 0.012547f, 0.013251f, -0.001879f, -0.006241f, 0.005861f, -0.003998f, 0.005153f, -0.002687f, 0.002470f, 0.000370f, 0.000319f, -0.005878f, 0.003963f, -0.003461f, -0.002391f, -0.000971f, 0.003555f, 0.002564f, -0.000285f, -0.004929f, 0.003157f, -0.000773f, 0.002337f, -0.001717f, -0.001016f, -0.004369f, -0.001809f, -0.000235f, + -0.000457f, 0.000752f, 0.000906f, -0.000633f, 0.000808f, -0.003654f, 0.001681f, 0.000259f, 0.000597f, -0.001386f, 0.004510f, 0.002717f, -0.000105f, -0.001854f, 0.000521f, -0.002823f, 0.005095f, 0.001041f, 0.023646f, -0.004697f, -0.000231f, -0.004096f, 0.015325f, 0.014525f, 0.004891f, -0.024696f, -0.004265f, -0.029954f, 0.017441f, 0.007270f, 0.000307f, 0.030574f, 0.014360f, -0.002873f, -0.013963f, 0.012506f, -0.006080f, 0.002980f, 0.004120f, 0.001836f, 0.009892f, -0.009115f, 0.017042f, 0.006396f, 0.001494f, -0.005373f, -0.008946f, 0.011528f, 0.009666f, -0.002050f, 0.006222f, -0.014815f, 0.002568f, -0.019730f, 0.007803f, 0.000957f, 0.009807f, -0.016225f, 0.003154f, -0.005395f, 0.003371f, 0.018153f, 0.015318f, 0.000592f, 0.004301f, -0.011508f, 0.014760f, 0.000288f, 0.031619f, 0.033485f, -0.004648f, -0.009101f, -0.009345f, -0.007409f, -0.019679f, -0.005580f, -0.025643f, 0.001415f, -0.002316f, -0.001541f, -0.005379f, 0.008820f, 0.014861f, 0.023462f, 0.021731f, 0.016764f, -0.027949f, -0.019918f, -0.001058f, 0.001279f, 0.028932f, -0.020620f, 0.015457f, -0.001204f, -0.006072f, -0.003113f, + -0.000904f, -0.005874f, -0.016321f, -0.010654f, -0.003230f, 0.004618f, 0.001323f, -0.000505f, -0.004591f, 0.002447f, -0.005910f, -0.000649f, -0.003232f, 0.006087f, 0.006702f, -0.001756f, -0.001505f, 0.006342f, 0.004709f, 0.000741f, -0.001149f, 0.002276f, 0.000217f, 0.000887f, -0.001455f, 0.002700f, -0.000416f, -0.001697f, -0.002795f, 0.000741f, 0.002557f, 0.004049f, 0.008686f, 0.006851f, -0.003573f, 0.000769f, -0.006524f, -0.001256f, 0.002619f, -0.000578f, -0.001460f, 0.000114f, 0.001081f, 0.001383f, -0.008773f, 0.016957f, 0.003526f, -0.012792f, -0.007132f, 0.031975f, 0.031454f, 0.035255f, -0.003619f, -0.001652f, -0.006168f, 0.005800f, 0.017189f, 0.019775f, 0.005655f, -0.008722f, -0.017178f, -0.034834f, 0.010156f, -0.020674f, -0.004624f, -0.002252f, -0.004561f, 0.002182f, -0.001154f, -0.006522f, -0.000881f, -0.020259f, -0.008078f, 0.001051f, -0.003831f, -0.022622f, -0.009585f, 0.001768f, 0.016218f, -0.004769f, 0.000367f, -0.018042f, -0.006136f, 0.000062f, 0.011746f, -0.007412f, 0.007185f, -0.020147f, -0.005663f, 0.004497f, 0.007492f, -0.005633f, 0.026756f, -0.005672f, -0.003494f, -0.014136f, + -0.004700f, 0.010655f, 0.003593f, -0.001383f, 0.013921f, 0.019243f, 0.022547f, -0.004146f, -0.011412f, -0.013004f, 0.000101f, 0.002522f, 0.005229f, -0.009277f, 0.007222f, 0.009475f, 0.008031f, 0.007748f, 0.022557f, 0.015109f, 0.010038f, -0.001379f, 0.005019f, -0.022699f, -0.004295f, 0.002207f, 0.011467f, 0.018081f, -0.003529f, -0.010473f, 0.003148f, 0.006112f, -0.005337f, 0.009180f, 0.007442f, 0.009937f, 0.001506f, 0.004246f, -0.000544f, -0.000980f, -0.007377f, 0.005545f, -0.002345f, 0.003580f, 0.003287f, 0.000880f, 0.005307f, 0.000290f, 0.008578f, 0.005911f, 0.003854f, 0.002250f, 0.002380f, -0.000167f, -0.001162f, 0.000510f, -0.003648f, -0.000448f, -0.004548f, -0.007443f, -0.002928f, 0.001305f, 0.001227f, 0.002954f, -0.001524f, 0.001874f, -0.003020f, 0.001160f, 0.003792f, -0.000365f, 0.000653f, -0.032862f, 0.040851f, -0.001168f, 0.005988f, 0.022335f, 0.000377f, -0.007856f, 0.001153f, -0.039889f, -0.024284f, -0.011418f, 0.006353f, -0.007869f, 0.004537f, -0.018660f, 0.012891f, -0.006527f, -0.000192f, 0.024591f, -0.024010f, -0.015973f, 0.023002f, -0.007228f, -0.033754f, 0.002381f, + -0.020821f, 0.004288f, -0.001751f, 0.012626f, 0.005418f, 0.006361f, 0.002546f, -0.004082f, 0.014969f, -0.001679f, 0.019239f, 0.011770f, -0.006878f, -0.011565f, -0.010866f, 0.005240f, -0.005356f, 0.005274f, 0.003697f, 0.011339f, 0.003279f, -0.021292f, 0.001225f, 0.007235f, -0.007393f, 0.000906f, -0.014718f, -0.003259f, 0.001260f, 0.000963f, 0.033677f, -0.005884f, 0.023918f, 0.028675f, -0.007926f, 0.015355f, -0.004761f, -0.000834f, -0.015992f, 0.010141f, 0.024341f, 0.017056f, 0.003743f, 0.006713f, 0.015068f, -0.000971f, 0.012479f, -0.005080f, -0.007048f, -0.012148f, 0.006586f, 0.031178f, 0.006917f, -0.004005f, 0.002419f, -0.021882f, -0.007466f, 0.000551f, 0.020566f, 0.015080f, 0.006443f, 0.013396f, -0.003896f, 0.013161f, -0.000204f, 0.008296f, 0.000974f, -0.000596f, -0.001649f, 0.009195f, -0.001047f, -0.005717f, -0.003621f, -0.002241f, -0.001474f, -0.002270f, -0.004681f, 0.006663f, -0.004356f, -0.005661f, -0.001736f, -0.007451f, -0.005244f, -0.006349f, -0.003758f, -0.004412f, -0.005829f, 0.002018f, 0.001265f, 0.002525f, 0.001970f, -0.003330f, -0.001853f, -0.005840f, -0.007809f, -0.000622f, + -0.004382f, 0.002602f, -0.002143f, 0.000742f, 0.003695f, 0.004046f, 0.002650f, 0.006891f, -0.001907f, -0.000512f, 0.005094f, 0.039224f, 0.005738f, 0.009809f, -0.009232f, -0.004659f, 0.026649f, -0.017528f, -0.004024f, -0.034532f, 0.032421f, 0.016961f, 0.002366f, -0.011702f, -0.032601f, 0.003348f, -0.008651f, 0.004045f, -0.036561f, 0.013101f, 0.019359f, -0.021214f, -0.005056f, 0.003234f, 0.002282f, 0.007131f, 0.021008f, 0.025871f, 0.000113f, 0.000003f, 0.004868f, 0.001046f, -0.015618f, -0.017835f, -0.011828f, -0.023522f, -0.011574f, 0.020164f, 0.009388f, -0.007448f, -0.009927f, -0.006518f, -0.041424f, 0.009080f, 0.009987f, -0.019332f, 0.031793f, 0.001216f, 0.023721f, -0.008454f, 0.015397f, -0.004992f, -0.020473f, 0.001933f, 0.018902f, -0.010325f, 0.010390f, 0.012205f, 0.033766f, 0.009434f, 0.010630f, 0.032433f, 0.018487f, 0.012342f, -0.044715f, 0.009360f, 0.006877f, 0.008779f, 0.000941f, -0.018157f, 0.032460f, -0.023989f, 0.018527f, 0.019492f, -0.029159f, -0.006272f, 0.039964f, -0.035466f, 0.006063f, -0.008226f, -0.003825f, -0.012702f, 0.015573f, -0.006549f, -0.013256f, -0.011222f, + 0.006975f, 0.015236f, -0.014087f, 0.017677f, -0.014540f, -0.006240f, 0.019982f, 0.007489f, -0.001633f, -0.008646f, -0.009333f, -0.000110f, -0.003697f, -0.015044f, -0.001737f, -0.003083f, -0.004247f, -0.001225f, 0.012004f, -0.000856f, -0.011058f, 0.001194f, 0.004689f, 0.011624f, 0.007169f, 0.009278f, -0.003651f, 0.004989f, -0.006601f, 0.000518f, -0.002244f, 0.004988f, 0.009530f, -0.006838f, 0.004384f, 0.004720f, -0.000513f, -0.005879f, 0.003271f, 0.002791f, -0.020452f, -0.030900f, -0.013571f, -0.012834f, -0.041514f, 0.028446f, 0.004542f, 0.030360f, 0.001834f, 0.004481f, -0.014297f, -0.007356f, 0.014842f, -0.000966f, 0.015344f, -0.014970f, -0.004715f, 0.002884f, -0.006728f, -0.012220f, 0.018278f, -0.018340f, 0.021753f, -0.007395f, 0.007160f, -0.004489f, -0.014568f, -0.013018f, 0.006437f, -0.004596f, -0.000040f, 0.011338f, 0.043426f, 0.003301f, -0.005416f, -0.014417f, 0.006353f, 0.035153f, -0.006299f, -0.005507f, -0.020215f, -0.006819f, 0.003063f, -0.019037f, -0.006892f, -0.027248f, 0.017820f, -0.033403f, -0.060656f, -0.006137f, 0.002109f, 0.029242f, -0.029855f, 0.028090f, 0.018308f, -0.014007f, + -0.028171f, -0.004274f, 0.004841f, 0.008554f, 0.001210f, 0.017873f, -0.011574f, -0.004128f, -0.059826f, -0.007746f, 0.062173f, 0.006346f, -0.010212f, -0.007946f, -0.031922f, 0.024459f, -0.010111f, -0.008838f, -0.007709f, -0.004330f, -0.013684f, -0.020388f, 0.006443f, 0.012244f, -0.000370f, 0.009420f, -0.017213f, -0.031625f, -0.000890f, -0.016501f, -0.004560f, 0.000935f, -0.016389f, 0.004231f, -0.011870f, -0.021074f, -0.015570f, -0.007356f, 0.007216f, 0.010187f, -0.001559f, -0.024987f, -0.006032f, 0.001987f, -0.012175f, -0.005179f, -0.000739f, -0.011237f, -0.006494f, 0.003502f, -0.000177f, -0.008746f, -0.003302f, 0.004591f, 0.001900f, -0.011749f, -0.004472f, 0.000670f, 0.011560f, 0.012824f, 0.003706f, -0.003347f, -0.004150f, -0.001056f, 0.008735f, -0.001389f, -0.000424f, 0.001078f, 0.003554f, -0.009766f, 0.009899f, -0.001659f, 0.006820f, 0.001127f, -0.006776f, 0.028725f, 0.025658f, -0.008323f, -0.010613f, -0.002644f, -0.041404f, 0.027140f, -0.026206f, -0.021646f, -0.016782f, 0.010141f, 0.004097f, 0.025143f, 0.003003f, -0.013937f, -0.016258f, -0.016861f, 0.012935f, -0.006574f, -0.009059f, 0.022950f, + 0.025706f, 0.008626f, -0.017436f, 0.021128f, 0.034230f, -0.013270f, -0.007582f, 0.029533f, 0.007568f, 0.005766f, -0.019430f, -0.000220f, 0.028171f, -0.041848f, 0.028620f, -0.006441f, 0.003829f, 0.016991f, 0.020696f, -0.000385f, 0.010314f, -0.019839f, -0.016073f, 0.010561f, 0.039415f, 0.010348f, 0.009581f, 0.014709f, -0.019957f, 0.003944f, 0.017478f, 0.009889f, -0.003320f, 0.013849f, 0.008732f, -0.023929f, 0.019197f, -0.023335f, 0.005159f, 0.016594f, -0.018359f, 0.013673f, -0.022395f, -0.009198f, 0.004072f, 0.000518f, 0.014275f, -0.009468f, 0.012243f, -0.009682f, 0.001707f, 0.004255f, -0.004189f, -0.009509f, -0.018104f, 0.048005f, 0.005147f, 0.014147f, -0.021090f, -0.049685f, 0.034794f, -0.033906f, -0.014563f, -0.000585f, -0.007768f, -0.005439f, -0.002941f, -0.014278f, 0.008621f, 0.006539f, 0.003713f, -0.013247f, 0.015823f, 0.011723f, -0.005313f, -0.005905f, 0.004661f, -0.004948f, 0.004391f, -0.004998f, 0.016800f, 0.005665f, 0.001571f, 0.011384f, 0.012578f, -0.007836f, 0.000080f, 0.005464f, 0.008750f, 0.003003f, 0.004197f, -0.008494f, -0.010345f, 0.007754f, 0.010865f, 0.015076f, + -0.002141f, -0.014888f, -0.001989f, 0.000734f, 0.007089f, -0.022601f, 0.008331f, -0.007954f, -0.003176f, 0.004488f, 0.005200f, -0.006070f, 0.007687f, -0.000011f, 0.006123f, -0.004179f, 0.014549f, 0.004332f, 0.006080f, -0.002716f, 0.008291f, -0.027357f, 0.028617f, -0.010759f, -0.028638f, -0.037071f, -0.010500f, -0.003910f, 0.021509f, -0.032646f, -0.005409f, -0.003969f, 0.016902f, 0.032132f, 0.026559f, 0.016499f, 0.002361f, -0.008419f, -0.005171f, -0.003461f, 0.022531f, 0.018522f, -0.004582f, 0.002816f, -0.005139f, 0.014485f, -0.035490f, 0.020928f, 0.011418f, 0.016355f, 0.005407f, 0.003670f, 0.030233f, -0.012122f, -0.026090f, 0.000015f, -0.008719f, 0.001647f, -0.036117f, -0.020008f, -0.002309f, 0.029903f, -0.020487f, -0.006534f, 0.004741f, -0.001333f, 0.000673f, 0.029391f, 0.011683f, -0.004697f, 0.002402f, 0.014321f, 0.009334f, 0.034265f, -0.010315f, 0.015589f, 0.017291f, 0.009237f, -0.005775f, 0.005512f, -0.037631f, 0.015885f, -0.007205f, 0.001586f, -0.008797f, -0.020712f, -0.027897f, 0.005518f, -0.013417f, -0.037717f, 0.008815f, -0.032064f, -0.023727f, -0.005641f, -0.048396f, -0.029305f, + 0.006990f, 0.020437f, -0.024286f, 0.005077f, 0.001689f, 0.055230f, 0.052269f, 0.049427f, -0.001738f, 0.002666f, -0.026303f, -0.015838f, 0.020432f, -0.011301f, -0.007587f, 0.003299f, -0.006888f, 0.011498f, -0.014516f, -0.007213f, -0.000793f, 0.004290f, -0.008839f, 0.010532f, 0.010428f, 0.000360f, -0.004863f, 0.002826f, 0.010175f, -0.008614f, -0.011505f, -0.002990f, 0.009114f, -0.012880f, 0.021275f, 0.012286f, -0.001310f, 0.009668f, -0.003771f, -0.009080f, -0.014556f, -0.007847f, -0.012952f, -0.006962f, 0.007049f, 0.001174f, 0.021440f, -0.005201f, -0.007311f, -0.003436f, -0.049101f, -0.054294f, 0.031894f, 0.028630f, 0.009438f, 0.031043f, 0.052168f, 0.014653f, -0.020243f, 0.016661f, -0.008215f, -0.015054f, 0.023719f, 0.001467f, -0.021721f, 0.012918f, 0.017003f, 0.003724f, 0.005819f, 0.001054f, 0.002412f, 0.047740f, -0.001285f, 0.010014f, 0.004224f, 0.029524f, 0.001506f, 0.047352f, -0.000473f, -0.021224f, 0.037841f, 0.007520f, -0.017090f, -0.006218f, 0.019922f, -0.004448f, -0.000598f, 0.015515f, -0.029200f, 0.028627f, -0.006347f, -0.042595f, -0.012093f, 0.003882f, -0.042550f, -0.005017f, + -0.004656f, 0.018333f, 0.017751f, 0.031556f, -0.022556f, 0.004585f, 0.004835f, 0.006349f, 0.013376f, -0.020543f, -0.023071f, 0.011707f, -0.000786f, 0.024059f, 0.019565f, 0.005843f, 0.050609f, -0.008746f, -0.008024f, -0.035014f, 0.051650f, 0.008896f, 0.035780f, 0.021764f, -0.058069f, 0.008031f, 0.005070f, 0.035207f, -0.019006f, 0.014856f, 0.000141f, -0.015662f, -0.002094f, -0.012709f, 0.028407f, -0.055027f, -0.006827f, -0.004197f, 0.000053f, 0.002210f, 0.008637f, 0.013134f, -0.000352f, 0.025013f, -0.001141f, -0.003889f, -0.008263f, -0.005523f, 0.001494f, -0.009063f, 0.002844f, -0.002671f, 0.007503f, 0.005081f, -0.002729f, 0.001841f, -0.003078f, -0.015547f, -0.000938f, 0.000490f, 0.003770f, -0.015874f, 0.008256f, -0.003485f, 0.008684f, 0.006655f, 0.012316f, -0.012913f, 0.014414f, -0.008147f, 0.004617f, 0.010179f, 0.009396f, -0.003518f, 0.000296f, -0.005975f, 0.008153f, -0.000762f, 0.003973f, -0.000468f, -0.001694f, 0.020808f, 0.011833f, 0.000025f, 0.009806f, 0.002655f, 0.010205f, 0.001976f, 0.032021f, -0.067412f, 0.040142f, 0.040830f, -0.017321f, 0.009751f, 0.005747f, 0.011089f, + 0.000363f, 0.032510f, -0.023581f, -0.005059f, -0.025301f, -0.000163f, -0.014262f, 0.002333f, 0.006908f, -0.036974f, 0.016740f, 0.040262f, -0.027589f, -0.026480f, -0.026989f, 0.053588f, -0.023308f, -0.013109f, 0.005072f, -0.018314f, -0.055401f, 0.009789f, 0.040379f, -0.055284f, -0.024968f, 0.019141f, 0.029775f, 0.008081f, -0.008313f, 0.012832f, -0.019525f, -0.009177f, -0.000923f, 0.027410f, -0.037535f, -0.029917f, 0.021353f, 0.034417f, 0.013656f, -0.042978f, -0.013806f, 0.001076f, -0.001882f, -0.007466f, 0.022560f, -0.006665f, 0.033997f, -0.027575f, -0.005897f, -0.000047f, -0.031452f, 0.020013f, -0.036631f, -0.025279f, 0.011855f, -0.016440f, 0.035859f, 0.051667f, 0.030622f, -0.034186f, 0.018243f, -0.010062f, -0.010105f, -0.024137f, -0.007368f, -0.039332f, 0.030211f, 0.022117f, 0.010847f, 0.001167f, -0.018446f, -0.010457f, 0.012311f, -0.041065f, 0.033289f, -0.007852f, -0.005480f, 0.017313f, 0.003258f, 0.015763f, -0.004300f, -0.002507f, -0.013840f, -0.004080f, 0.001522f, 0.002770f, -0.010808f, -0.003898f, -0.005047f, -0.003995f, 0.018818f, 0.001938f, -0.000094f, -0.008952f, 0.007779f, 0.007362f, + -0.006389f, 0.004045f, 0.008754f, 0.001852f, 0.014589f, -0.005199f, -0.009871f, 0.002010f, -0.016239f, 0.008444f, 0.006389f, 0.002050f, -0.000262f, 0.006479f, -0.001146f, 0.010631f, 0.003697f, 0.007539f, -0.012776f, -0.004035f, 0.012423f, 0.000568f, 0.005222f, 0.006108f, -0.011884f, 0.001649f, 0.012528f, 0.039293f, 0.065426f, -0.000361f, -0.049342f, 0.010585f, -0.058897f, 0.010216f, 0.026903f, 0.012707f, 0.003663f, 0.035585f, 0.026336f, -0.001475f, -0.005305f, -0.048666f, -0.026186f, 0.000837f, -0.022728f, 0.066190f, -0.011952f, -0.014866f, -0.028426f, 0.003674f, 0.024954f, 0.017507f, -0.000802f, 0.012894f, 0.019462f, -0.029189f, 0.010134f, 0.056815f, 0.020179f, -0.038786f, -0.027327f, 0.018535f, -0.019137f, -0.002503f, 0.013916f, -0.008496f, -0.032007f, -0.007540f, 0.004004f, 0.054151f, -0.011585f, 0.012134f, -0.014265f, -0.043514f, 0.007749f, 0.054939f, -0.014628f, -0.032714f, 0.009690f, -0.019978f, 0.013534f, -0.011353f, -0.013252f, 0.037809f, -0.009508f, -0.004147f, 0.018554f, -0.032304f, 0.011851f, 0.040012f, -0.016353f, 0.003586f, -0.023216f, 0.070244f, -0.012598f, 0.008521f, + 0.022905f, -0.016112f, -0.003734f, -0.018544f, 0.010000f, -0.020975f, -0.017665f, -0.016508f, 0.027031f, -0.036260f, 0.005541f, -0.005216f, -0.010669f, 0.028505f, 0.000844f, -0.009490f, -0.011814f, 0.001667f, 0.010855f, 0.008458f, -0.015995f, -0.002762f, 0.000968f, -0.004335f, -0.019834f, -0.011880f, -0.003401f, 0.004980f, 0.001877f, 0.001818f, 0.003081f, 0.016557f, -0.016233f, 0.017399f, 0.003683f, 0.005174f, 0.001452f, 0.013843f, -0.007424f, 0.022600f, -0.004608f, -0.000133f, 0.017487f, 0.022710f, -0.011435f, 0.014925f, -0.007005f, 0.005153f, -0.012688f, 0.011597f, 0.009927f, -0.019176f, -0.000584f, -0.007532f, -0.002258f, -0.009467f, 0.007437f, -0.011701f, 0.011185f, -0.002125f, -0.003843f, -0.019434f, -0.108522f, -0.038283f, -0.002365f, 0.034152f, -0.018538f, -0.054511f, -0.020795f, -0.008323f, 0.026097f, 0.006506f, -0.007637f, -0.027154f, 0.027851f, 0.049796f, -0.023198f, 0.037551f, 0.009102f, -0.072233f, 0.026385f, 0.033339f, -0.012254f, -0.029598f, -0.005895f, 0.043896f, 0.046833f, -0.004294f, -0.036253f, 0.002125f, -0.004514f, -0.005011f, -0.030286f, 0.007008f, 0.013200f, -0.047751f, + 0.032278f, 0.027428f, -0.033841f, 0.005826f, -0.037916f, 0.012913f, 0.091195f, -0.082225f, 0.084281f, 0.037965f, 0.003400f, 0.051454f, 0.025323f, -0.053346f, 0.031431f, -0.040197f, -0.009364f, 0.043195f, 0.001614f, 0.012135f, -0.022682f, -0.039147f, 0.117625f, -0.028071f, 0.001283f, 0.046182f, -0.022893f, 0.008750f, 0.003130f, 0.028413f, 0.066077f, 0.062870f, 0.059387f, 0.003411f, -0.001594f, -0.009935f, 0.002611f, -0.016473f, 0.004063f, 0.050443f, -0.013872f, -0.017912f, 0.004644f, 0.006719f, 0.029033f, 0.034024f, 0.009354f, 0.009329f, 0.023954f, 0.010069f, -0.019061f, 0.005788f, -0.010045f, -0.027861f, -0.012821f, 0.014209f, -0.021220f, -0.030214f, -0.023172f, -0.001323f, 0.002300f, -0.017435f, 0.008364f, 0.019148f, 0.002575f, -0.006550f, -0.001605f, -0.022137f, 0.025473f, -0.004071f, -0.006101f, 0.017695f, -0.015291f, 0.011954f, -0.011562f, -0.009135f, 0.030053f, -0.000348f, -0.023106f, 0.028684f, -0.018218f, 0.017206f, 0.007707f, -0.011568f, 0.008247f, -0.004204f, 0.020597f, -0.009862f, 0.006883f, 0.000835f, 0.001290f, -0.002434f, 0.021944f, -0.011707f, -0.003108f, -0.001808f, + 0.003508f, -0.003435f, 0.009291f, 0.017017f, 0.027637f, -0.007359f, -0.079804f, 0.036189f, -0.057985f, 0.081446f, 0.009587f, -0.070921f, 0.015956f, 0.000574f, 0.033249f, 0.015639f, -0.017181f, 0.060240f, 0.014697f, 0.002997f, 0.040248f, -0.032264f, -0.044787f, 0.001389f, 0.023426f, 0.081192f, -0.011445f, 0.000128f, -0.008520f, 0.058486f, 0.006375f, -0.046613f, -0.027499f, 0.008714f, -0.005148f, 0.025833f, -0.045204f, 0.021618f, 0.007387f, 0.013285f, -0.004030f, -0.017777f, 0.010304f, 0.018058f, 0.000202f, 0.054299f, -0.087725f, 0.007548f, -0.030927f, -0.019362f, -0.011299f, -0.064290f, -0.093206f, -0.096641f, -0.070130f, 0.007305f, 0.000383f, -0.056121f, -0.000425f, -0.010350f, 0.006066f, -0.034891f, -0.089790f, 0.088355f, -0.001553f, -0.013238f, 0.018069f, -0.087982f, -0.005996f, -0.022040f, 0.016520f, 0.025610f, 0.120617f, 0.089675f, -0.010035f, -0.001301f, -0.002801f, 0.023482f, 0.036502f, 0.021913f, 0.016679f, -0.003593f, -0.014515f, -0.085652f, 0.016185f, -0.001992f, -0.033269f, -0.015177f, 0.055859f, -0.008090f, -0.010130f, 0.026387f, -0.002206f, 0.028963f, -0.011316f, 0.014410f, + -0.001580f, -0.006380f, 0.020694f, 0.024936f, -0.011455f, 0.003256f, 0.011229f, -0.005012f, 0.005323f, 0.001001f, -0.000256f, 0.016910f, -0.007256f, -0.009074f, 0.014308f, -0.016975f, 0.022118f, -0.000451f, 0.011991f, 0.018045f, -0.009171f, 0.004217f, 0.016067f, -0.004192f, -0.010465f, -0.004246f, 0.001859f, -0.003271f, 0.004442f, -0.022081f, -0.001318f, -0.017573f, 0.018160f, 0.002313f, 0.012249f, 0.008248f, -0.002528f, 0.000144f, -0.001123f, 0.007860f, 0.011338f, 0.008836f, -0.001358f, -0.010966f, -0.001559f, -0.022988f, 0.109432f, -0.104860f, 0.017721f, -0.020362f, 0.003849f, 0.044079f, -0.032520f, 0.010868f, 0.001470f, -0.113433f, 0.002594f, -0.012902f, 0.005283f, 0.012893f, -0.050806f, -0.019058f, -0.083967f, -0.021782f, -0.004311f, 0.004384f, -0.031927f, -0.024024f, -0.036710f, -0.015404f, 0.035960f, 0.007692f, 0.072865f, 0.017702f, -0.024964f, -0.026134f, 0.044675f, -0.050169f, 0.085742f, -0.067394f, 0.019316f, -0.054414f, 0.000861f, 0.051524f, -0.094234f, 0.088323f, 0.015372f, 0.010022f, -0.064799f, -0.013116f, -0.012511f, -0.000213f, 0.030696f, 0.030690f, 0.038705f, -0.074730f, + -0.002161f, -0.029524f, -0.025668f, -0.028913f, -0.040453f, -0.028018f, 0.001116f, 0.042438f, -0.045871f, 0.012032f, -0.084214f, -0.028327f, 0.020922f, 0.024739f, 0.004234f, -0.095729f, -0.051972f, -0.034282f, -0.048952f, -0.040551f, 0.003068f, -0.032010f, 0.050481f, 0.014972f, 0.025133f, -0.017903f, -0.026656f, 0.084856f, -0.028885f, 0.022594f, -0.017450f, 0.006330f, 0.063615f, 0.008262f, 0.011207f, -0.036125f, 0.035995f, 0.020795f, -0.015376f, 0.033429f, -0.025691f, 0.008983f, -0.009763f, 0.022516f, 0.004211f, -0.007966f, 0.012024f, 0.028753f, -0.010330f, 0.008960f, 0.009965f, 0.008352f, -0.003847f, 0.007469f, -0.004557f, 0.019591f, -0.007027f, 0.002936f, 0.018480f, -0.004320f, -0.007788f, 0.005415f, 0.007744f, -0.013435f, -0.003325f, -0.036579f, 0.022200f, 0.015008f, -0.000330f, -0.020515f, -0.008682f, 0.001311f, 0.007075f, 0.027070f, -0.005025f, -0.008061f, 0.009083f, 0.006547f, -0.004686f, 0.027328f, 0.004717f, -0.034588f, 0.008303f, 0.033017f, -0.004396f, 0.047069f, -0.088952f, 0.135338f, -0.102066f, -0.010861f, -0.061624f, 0.012002f, 0.001223f, -0.037319f, -0.052723f, 0.061424f, + 0.041263f, 0.019196f, -0.026961f, 0.027019f, 0.008332f, 0.057978f, -0.046097f, -0.030551f, 0.036028f, 0.060270f, -0.077195f, 0.030964f, -0.002869f, 0.036467f, -0.027905f, 0.010525f, -0.034284f, 0.006822f, -0.064131f, 0.020781f, 0.068539f, -0.002524f, -0.005389f, 0.085075f, 0.014748f, -0.039587f, -0.083450f, 0.071020f, -0.037782f, 0.031887f, -0.030701f, 0.084939f, 0.037485f, -0.009641f, 0.008653f, -0.049595f, 0.006483f, 0.020931f, -0.023926f, 0.023514f, -0.103209f, 0.040168f, 0.093419f, 0.072828f, -0.040570f, -0.042295f, -0.042303f, 0.047030f, 0.003738f, -0.015303f, 0.003744f, 0.120472f, -0.059009f, -0.027812f, 0.046690f, -0.040531f, -0.109120f, 0.046017f, 0.024314f, -0.078240f, 0.043666f, 0.075177f, 0.066537f, -0.020659f, -0.029837f, -0.053470f, 0.028451f, -0.033120f, -0.021063f, 0.048117f, 0.032922f, 0.014662f, 0.042449f, 0.023669f, -0.016500f, -0.015636f, -0.054898f, 0.012491f, -0.023092f, 0.018693f, -0.020377f, 0.038812f, 0.026972f, 0.005661f, -0.007395f, 0.036883f, -0.020389f, -0.003204f, 0.004755f, 0.013960f, 0.008575f, 0.016861f, 0.015723f, 0.000958f, -0.009031f, -0.005673f, + 0.013193f, 0.006652f, 0.005275f, 0.001488f, 0.020798f, 0.067054f, -0.002085f, -0.005667f, 0.010023f, -0.023763f, 0.008252f, 0.023910f, -0.034788f, 0.014933f, 0.017913f, -0.013658f, -0.009794f, 0.015481f, 0.008860f, -0.020414f, -0.087355f, 0.046698f, -0.005087f, 0.012198f, -0.031996f, 0.027989f, 0.000620f, 0.015360f, 0.004683f, 0.005103f, -0.018176f, 0.013937f, 0.047328f, -0.060360f, 0.051931f, -0.008851f, -0.031846f, 0.010683f, -0.021653f, 0.014060f, -0.022184f, -0.018250f, 0.015384f, -0.048149f, -0.004916f, 0.064147f, -0.092587f, 0.026129f, 0.004441f, -0.015495f, -0.028443f, -0.033672f, -0.021876f, 0.067303f, -0.055402f, -0.007939f, 0.021778f, -0.056313f, 0.014314f, 0.030909f, 0.020698f, 0.010584f, 0.009766f, -0.031768f, 0.025038f, -0.082843f, 0.001188f, 0.072529f, -0.030301f, -0.008151f, -0.016246f, -0.020462f, -0.000550f, -0.058638f, 0.031109f, 0.023564f, -0.048453f, 0.045490f, 0.012704f, -0.055272f, 0.022770f, -0.010734f, 0.040129f, 0.034947f, -0.051370f, 0.017953f, 0.057147f, -0.053793f, 0.030144f, -0.038307f, 0.030210f, 0.034931f, -0.054571f, 0.030758f, -0.003893f, -0.028952f, + 0.041728f, 0.002188f, -0.065638f, 0.020185f, 0.029287f, 0.008815f, -0.018204f, 0.003177f, 0.049876f, -0.023041f, -0.046487f, 0.049550f, -0.002008f, 0.003745f, -0.002061f, -0.006265f, 0.030596f, -0.022776f, -0.010795f, 0.021550f, 0.008383f, -0.005340f, -0.022187f, 0.032872f, -0.012366f, -0.021608f, 0.001939f, 0.017272f, -0.010176f, -0.008040f, -0.004985f, 0.025657f, -0.019890f, -0.010440f, 0.002032f, 0.013898f, -0.012179f, 0.009946f, -0.000288f, 0.025424f, -0.015931f, 0.003966f, 0.002356f, 0.002431f, 0.022584f, 0.042331f, -0.018146f, -0.200754f, -0.439449f, -0.174350f, -0.292154f, -0.397812f, 0.150044f, 0.053210f, 0.129529f, 0.591163f, 0.492418f, 0.324493f, 0.507599f, 0.344816f, 0.040809f, 0.085462f, 0.061784f, -0.271376f, -0.175212f, -0.120858f, -0.310388f, -0.316814f, -0.088063f, -0.088990f, -0.197105f, -0.059206f, -0.042892f, -0.237326f, -0.204135f, -0.066779f, -0.112591f, -0.224195f, -0.055195f, -0.038203f, -0.175765f, -0.020993f, 0.121196f, -0.053571f, -0.043352f, 0.179185f, 0.109703f, -0.074134f, 0.158707f, 0.262176f, 0.028673f, 0.147165f, 0.321962f, 0.157086f, 0.080856f, 0.347345f, + 0.253800f, 0.188584f, 0.421923f, 0.571023f, 0.451561f, 0.524531f, 0.679936f, 0.443795f, 0.290278f, 0.380919f, 0.245207f, -0.069125f, -0.017477f, -0.169917f, -0.420215f, -0.593843f, -0.638789f, -0.854841f, -0.972349f, -1.032287f, -0.998641f, -0.959743f, -0.954220f, -0.797126f, -0.610280f, -0.572733f, -0.374029f, 0.029195f, 0.157704f, 0.204749f, 0.621712f, 0.610123f, 0.420615f, 0.619913f, 0.568121f, 0.307968f, 0.299266f, 0.395139f, 0.238773f, 0.112048f, 0.276193f, 0.281807f, 0.126256f, 0.227581f, 0.343869f, 0.227805f, 0.135343f, 0.292481f, 0.242140f, 0.048157f, 0.148094f, 0.214930f, 0.023466f, 0.040260f, 0.235332f, 0.143718f, 0.077084f, 0.249581f, 0.247388f, 0.089970f, 0.197006f, 0.170045f, -0.045004f, -0.124127f, -0.128665f, -0.295443f, -0.399886f, -0.394816f, -0.455679f, -0.502212f, -0.520811f, -0.509820f, -0.523007f, -0.581491f, -0.601585f, -0.575513f, -0.641987f, -0.549727f, -0.374703f, -0.286653f, -0.098090f, 0.165130f, 0.346344f, 0.507586f, 0.655448f, 0.666595f, 0.570826f, 0.518631f, 0.426143f, 0.322839f, 0.260449f, 0.219412f, 0.177545f, 0.139301f, 0.126527f, 0.117637f, + 0.087651f, 0.074576f, 0.066816f, 0.036630f, 0.001759f, -0.018027f, -0.049105f, -0.082996f, -0.104521f, -0.109999f, -0.120887f, -0.116783f, -0.095938f, -0.072418f, -0.053507f, -0.029930f, -0.015011f, -0.003327f, 0.010826f, 0.020482f, 0.020041f, 0.021091f, 0.013651f, 0.001534f, -0.004894f, -0.010768f, -0.022531f, -0.027531f, -0.030317f, -0.038503f, -0.039836f, -0.035311f, -0.042144f, -0.046870f, -0.041780f, -0.045381f, -0.052037f, -0.048520f, -0.057960f, -0.069327f, -0.065817f, -0.066081f, -0.070087f, -0.061295f, -0.052855f, -0.046691f, -0.033070f, -0.015934f, -0.006258f, 0.004827f, 0.020511f, 0.033794f, 0.045581f, 0.058572f, 0.068961f, 0.073316f, 0.078386f, 0.084033f, 0.086441f, 0.088297f, 0.090468f, 0.087365f, 0.080754f, 0.071791f, 0.060073f, 0.046473f, 0.029254f, 0.012017f, -0.004083f, -0.020560f, -0.031439f, -0.036136f, -0.037839f, -0.037081f, -0.032674f, -0.029042f, -0.027257f, -0.024233f, -0.021536f, -0.020404f, -0.018828f, -0.016763f, -0.015244f, -0.014030f, -0.012304f, -0.010521f, -0.009087f, -0.007645f, -0.006164f, -0.004997f, -0.004249f, -0.003704f, -0.003293f} + }, + { + {-0.007426f, 0.004516f, 0.007236f, -0.002557f, 0.006430f, -0.001050f, 0.006787f, 0.003412f, -0.001497f, -0.002664f, 0.006875f, 0.000577f, 0.001368f, -0.007824f, -0.001257f, -0.000567f, -0.000353f, 0.010687f, 0.005220f, -0.000394f, -0.008025f, -0.005837f, -0.003454f, 0.000975f, -0.000187f, 0.002312f, 0.004912f, 0.001493f, 0.001810f, -0.008099f, -0.001249f, -0.007883f, 0.000314f, -0.004361f, 0.005157f, 0.005148f, -0.002057f, -0.004255f, 0.005392f, 0.001152f, -0.002026f, -0.007288f, -0.000991f, -0.004675f, 0.001306f, 0.004452f, -0.007392f, -0.003610f, -0.001237f, -0.002894f, 0.018863f, 0.004492f, 0.010889f, 0.000791f, 0.003572f, -0.000084f, -0.005452f, -0.005059f, -0.006436f, 0.003039f, -0.005310f, 0.003818f, 0.000119f, 0.004662f, 0.004770f, 0.011582f, 0.003495f, -0.000962f, -0.000587f, -0.006881f, 0.011219f, 0.010321f, 0.001806f, 0.003182f, 0.002924f, 0.003194f, -0.000653f, -0.005760f, 0.001716f, 0.003331f, -0.002163f, 0.000964f, -0.001772f, -0.005263f, 0.002506f, -0.004390f, -0.002981f, -0.001367f, 0.000351f, -0.001964f, -0.002131f, -0.002501f, -0.000054f, -0.000137f, -0.000393f, 0.000507f, + -0.000878f, 0.001677f, -0.000932f, -0.001563f, -0.000151f, 0.002104f, 0.000792f, -0.000859f, -0.002823f, -0.000830f, 0.002615f, 0.000179f, 0.001181f, 0.001038f, 0.000735f, 0.026110f, -0.006126f, -0.005412f, -0.002076f, -0.005121f, 0.001237f, -0.012352f, 0.001007f, 0.002510f, 0.000670f, 0.008465f, 0.001004f, -0.001697f, -0.007403f, 0.004809f, -0.010452f, -0.009002f, 0.003305f, -0.004367f, -0.002071f, -0.001520f, 0.001788f, 0.007116f, 0.009716f, 0.000773f, -0.001463f, 0.011549f, 0.004186f, -0.000623f, 0.000457f, -0.004656f, 0.000183f, 0.012674f, 0.000043f, -0.005822f, -0.004709f, -0.001316f, 0.004322f, -0.005796f, -0.007166f, -0.007309f, -0.005983f, 0.005812f, -0.005626f, 0.002205f, -0.006844f, 0.002472f, 0.008368f, 0.000595f, 0.005957f, -0.002466f, -0.004661f, -0.002273f, 0.004144f, -0.000198f, 0.006393f, 0.009349f, 0.001399f, -0.002760f, -0.004773f, -0.000188f, -0.000675f, 0.000480f, 0.000332f, -0.008142f, -0.000830f, -0.003776f, -0.004134f, 0.004028f, 0.000878f, 0.002605f, 0.003054f, -0.009696f, -0.005401f, 0.004100f, -0.001789f, 0.007266f, 0.001346f, 0.006131f, -0.001205f, -0.001489f, + -0.001641f, -0.003472f, -0.000791f, -0.003829f, -0.001527f, 0.000173f, 0.005722f, -0.001309f, -0.000090f, -0.000921f, 0.001839f, 0.000014f, 0.002230f, 0.000503f, -0.000441f, -0.001368f, 0.001804f, -0.002724f, 0.000052f, 0.000214f, -0.001547f, 0.001378f, 0.001712f, -0.002287f, 0.000830f, -0.001092f, 0.001056f, 0.001059f, 0.000034f, 0.001749f, 0.000221f, -0.000795f, -0.018343f, -0.008927f, -0.003765f, -0.012463f, -0.004168f, -0.011954f, 0.003820f, -0.000839f, -0.007360f, -0.008523f, -0.001073f, -0.006921f, 0.000056f, 0.006176f, -0.000219f, -0.010649f, -0.003811f, 0.000391f, -0.004029f, -0.003296f, 0.003375f, 0.010482f, 0.013365f, -0.001887f, -0.003283f, 0.007611f, 0.008617f, -0.002385f, -0.001721f, -0.001441f, -0.005701f, 0.002036f, 0.002961f, -0.005109f, -0.003775f, -0.001012f, 0.005293f, 0.011448f, 0.000959f, -0.003548f, 0.000231f, -0.005425f, -0.001860f, -0.008761f, -0.004007f, -0.003759f, -0.013997f, -0.001281f, -0.006231f, -0.004250f, -0.015389f, 0.009924f, -0.006573f, -0.005796f, 0.003001f, -0.000740f, -0.000901f, 0.002277f, -0.012749f, -0.003138f, -0.004426f, -0.000795f, -0.007267f, -0.000790f, + -0.003305f, 0.003673f, 0.004728f, -0.003989f, -0.002031f, -0.005966f, 0.002422f, -0.000691f, -0.001044f, 0.000256f, -0.009382f, 0.000011f, -0.008458f, 0.001572f, -0.000365f, -0.002495f, 0.002786f, 0.010796f, 0.005255f, -0.002241f, 0.000798f, -0.001603f, -0.003880f, 0.000651f, 0.001860f, -0.001819f, -0.000070f, -0.002311f, 0.000295f, -0.000807f, -0.002955f, 0.001528f, 0.001454f, -0.003105f, -0.001342f, 0.001160f, -0.001181f, 0.000707f, -0.001960f, -0.001456f, -0.001550f, -0.002883f, -0.003166f, -0.000011f, 0.001093f, -0.001481f, -0.001821f, 0.000249f, -0.000740f, -0.000180f, -0.000878f, 0.000230f, -0.000399f, -0.000891f, -0.002573f, 0.001755f, -0.000759f, -0.001096f, -0.001132f, -0.002123f, -0.000144f, 0.000502f, -0.001737f, 0.000330f, 0.000360f, 0.000342f, -0.001370f, 0.000641f, -0.034542f, -0.002821f, -0.017081f, 0.015146f, -0.008947f, 0.027345f, -0.017668f, 0.017206f, -0.015674f, -0.001024f, -0.000344f, -0.012079f, 0.009216f, 0.000260f, -0.004585f, 0.002731f, -0.004030f, -0.001648f, -0.011803f, -0.000182f, -0.008937f, 0.006913f, 0.002318f, 0.008481f, -0.005138f, 0.012688f, 0.011350f, -0.011202f, + 0.003007f, -0.009531f, 0.009953f, 0.000039f, -0.007179f, 0.000539f, -0.001127f, -0.000413f, 0.007263f, 0.001040f, -0.011137f, 0.004496f, 0.007775f, -0.000563f, 0.009204f, -0.004384f, 0.007476f, -0.011438f, -0.005951f, 0.007450f, -0.006710f, 0.001865f, 0.009911f, -0.009185f, 0.014715f, 0.005860f, -0.014847f, 0.003552f, -0.014312f, 0.005074f, 0.007724f, 0.005320f, 0.007428f, 0.010917f, 0.003516f, -0.001351f, -0.001056f, 0.000720f, 0.003283f, 0.007853f, -0.002894f, 0.014842f, 0.002695f, 0.010174f, 0.005336f, 0.002963f, 0.000540f, 0.010215f, 0.001649f, 0.002548f, -0.006041f, -0.007942f, 0.003865f, 0.005528f, 0.000402f, 0.008798f, -0.001239f, -0.000041f, -0.001825f, 0.010448f, 0.002944f, -0.003687f, 0.002155f, 0.001817f, 0.001291f, 0.003593f, 0.000332f, 0.006529f, -0.001232f, 0.002283f, 0.001007f, 0.002533f, -0.001863f, 0.001294f, 0.000387f, 0.000207f, 0.000347f, -0.002144f, -0.002223f, 0.000890f, -0.002686f, -0.001017f, -0.002896f, 0.001772f, -0.000283f, -0.000791f, -0.001107f, 0.022863f, 0.000240f, -0.006077f, -0.001965f, -0.008368f, -0.010021f, 0.016730f, -0.003116f, -0.002300f, + 0.015354f, -0.001061f, -0.002838f, 0.006864f, 0.011970f, 0.003508f, 0.005998f, -0.000180f, -0.012844f, -0.003307f, 0.009837f, -0.014634f, -0.014514f, -0.005355f, 0.003306f, -0.010281f, -0.006152f, 0.000334f, -0.001357f, 0.010353f, -0.003842f, -0.002115f, 0.010883f, 0.015127f, -0.012898f, 0.003527f, -0.003000f, 0.005602f, 0.001594f, -0.005638f, -0.001159f, 0.006369f, 0.009661f, -0.002437f, -0.013403f, -0.002906f, -0.001096f, -0.003430f, -0.006643f, 0.001113f, -0.000765f, 0.002594f, -0.001769f, 0.002012f, 0.012704f, -0.009193f, 0.001296f, -0.006969f, -0.005673f, -0.009629f, -0.002860f, -0.005505f, -0.013417f, -0.000345f, 0.001007f, -0.005116f, -0.000956f, -0.005423f, 0.005287f, 0.006702f, -0.000956f, 0.002095f, -0.004788f, -0.001207f, 0.016374f, -0.002014f, -0.006690f, -0.021989f, -0.010011f, -0.000148f, -0.007498f, 0.005252f, -0.002084f, 0.002049f, 0.000034f, -0.004304f, -0.000783f, 0.006591f, -0.005391f, 0.001412f, -0.001484f, 0.000773f, 0.000062f, -0.004488f, -0.003386f, -0.001804f, -0.003534f, -0.000567f, -0.005624f, -0.001032f, -0.003175f, 0.000777f, -0.002207f, -0.000582f, -0.003023f, -0.003138f, + -0.003208f, -0.000678f, -0.000322f, 0.001314f, 0.000853f, -0.000289f, 0.000939f, 0.000909f, -0.000163f, 0.003320f, 0.002752f, 0.000116f, 0.001631f, -0.001146f, -0.001718f, 0.000551f, 0.029234f, 0.032885f, 0.006051f, -0.012306f, 0.007293f, 0.012817f, 0.012849f, 0.007149f, 0.009642f, 0.004189f, 0.015950f, -0.001884f, -0.002242f, -0.006848f, 0.009915f, -0.006200f, -0.014526f, -0.019895f, 0.002007f, -0.009661f, -0.008372f, 0.006726f, -0.002323f, -0.005457f, 0.016296f, -0.001412f, 0.020307f, -0.000004f, -0.008379f, -0.005777f, 0.006963f, 0.004574f, -0.004302f, -0.016494f, 0.023228f, 0.013362f, -0.000114f, 0.012518f, 0.007352f, 0.008069f, -0.007948f, 0.009139f, 0.004521f, 0.001677f, -0.003084f, -0.004391f, -0.010601f, -0.014806f, 0.003886f, 0.006879f, -0.011628f, 0.004380f, 0.009592f, 0.014481f, 0.003643f, 0.013066f, 0.005913f, 0.011107f, -0.016829f, 0.004752f, 0.001293f, 0.003158f, 0.000185f, -0.001307f, 0.006814f, 0.006234f, 0.005993f, 0.008883f, -0.003220f, 0.004232f, 0.002370f, 0.012856f, 0.015715f, -0.008221f, -0.009675f, 0.001274f, -0.004081f, -0.008626f, 0.003325f, 0.008678f, + -0.005681f, 0.003594f, -0.016177f, -0.011857f, 0.002472f, -0.008225f, -0.004034f, -0.002751f, -0.007477f, -0.000108f, -0.000328f, 0.000790f, -0.000404f, 0.003041f, 0.003526f, -0.000375f, 0.001668f, 0.000533f, 0.002612f, 0.002904f, -0.000191f, 0.000112f, -0.000424f, 0.003191f, 0.001440f, 0.001717f, 0.003849f, -0.000810f, -0.002315f, 0.002975f, -0.001117f, -0.000107f, 0.004452f, 0.002798f, 0.004201f, 0.005980f, 0.000711f, 0.002637f, 0.001399f, 0.003938f, 0.000833f, 0.001623f, 0.001967f, 0.027011f, 0.008492f, 0.011895f, -0.009976f, 0.003867f, -0.024585f, 0.001265f, -0.017782f, 0.013365f, 0.008955f, -0.007511f, 0.011221f, 0.006373f, -0.012068f, -0.003020f, 0.017270f, -0.000607f, 0.011868f, -0.003309f, 0.002326f, 0.013798f, -0.017279f, -0.001359f, 0.002742f, 0.005026f, 0.001075f, 0.005535f, 0.000648f, 0.016751f, -0.007855f, -0.004846f, -0.005148f, 0.012664f, 0.001532f, -0.005979f, 0.007622f, 0.021375f, -0.015020f, 0.002628f, 0.002796f, -0.001313f, 0.008551f, -0.004338f, 0.016257f, 0.005484f, 0.004050f, -0.013409f, -0.001416f, -0.003560f, 0.007490f, 0.005693f, 0.008096f, -0.009209f, + -0.006099f, 0.007783f, -0.016141f, -0.008992f, 0.003552f, 0.017261f, 0.010373f, 0.015266f, -0.016739f, -0.005271f, -0.017011f, -0.004382f, 0.005039f, -0.001442f, -0.016058f, 0.002097f, -0.009878f, -0.000137f, -0.017566f, -0.021168f, -0.008743f, -0.015278f, 0.000778f, 0.005408f, 0.002945f, -0.006531f, 0.008347f, 0.013577f, 0.003708f, 0.004013f, 0.007705f, -0.002446f, -0.013115f, -0.000785f, -0.009055f, 0.004693f, 0.001386f, -0.000868f, 0.002320f, 0.001226f, -0.009640f, -0.004864f, -0.002818f, 0.004794f, 0.000584f, -0.003333f, -0.001254f, -0.000279f, -0.001503f, 0.000802f, -0.002051f, -0.000873f, 0.000561f, 0.004370f, 0.000995f, 0.001429f, 0.000874f, -0.000834f, 0.001174f, 0.002926f, 0.001389f, 0.003803f, 0.001019f, 0.001978f, 0.000111f, 0.003017f, -0.004784f, 0.002983f, -0.031629f, -0.028495f, -0.020421f, 0.006583f, 0.006664f, 0.024158f, -0.010289f, 0.022956f, -0.009005f, -0.037175f, -0.003072f, -0.003222f, -0.014225f, -0.023963f, -0.008587f, -0.000274f, -0.014675f, 0.000126f, -0.022717f, 0.001933f, -0.023963f, 0.014120f, -0.005844f, 0.010354f, -0.004500f, -0.000182f, -0.007278f, -0.008495f, + 0.015205f, 0.003178f, -0.004111f, 0.017209f, 0.002144f, 0.002972f, 0.006069f, 0.015854f, 0.013956f, 0.010696f, 0.000503f, -0.018246f, -0.001692f, 0.009115f, 0.002928f, 0.011563f, -0.005199f, 0.005281f, -0.026909f, 0.008812f, 0.016597f, -0.020326f, 0.012325f, 0.004457f, 0.019588f, 0.015037f, 0.000175f, -0.004893f, -0.000271f, 0.013363f, 0.006683f, -0.017106f, -0.013896f, -0.023739f, -0.011403f, -0.015868f, -0.003457f, -0.019685f, -0.004053f, -0.006470f, 0.020452f, -0.009259f, 0.010198f, -0.005059f, -0.002785f, -0.006413f, -0.013837f, -0.007301f, -0.004328f, -0.004477f, 0.012938f, -0.038163f, -0.008002f, 0.018123f, 0.000993f, 0.003626f, 0.009770f, 0.018348f, -0.011233f, 0.002351f, 0.004989f, -0.000667f, -0.000011f, -0.002484f, 0.005134f, 0.007691f, -0.003125f, 0.000786f, -0.000575f, 0.008571f, -0.002956f, -0.000079f, 0.008614f, 0.001901f, 0.003135f, 0.004084f, 0.004128f, -0.001222f, 0.000867f, -0.002094f, -0.003129f, -0.001694f, -0.005666f, 0.001853f, 0.003975f, 0.002808f, 0.001688f, -0.007406f, 0.000188f, -0.000835f, -0.000197f, -0.003379f, 0.002265f, 0.003566f, -0.001672f, -0.000193f, + 0.004174f, 0.004440f, -0.004469f, -0.042560f, 0.031860f, -0.009558f, 0.018654f, 0.010654f, -0.001225f, -0.028316f, 0.021497f, 0.002518f, -0.002377f, 0.013386f, 0.009382f, -0.011983f, -0.000644f, 0.023151f, 0.007394f, -0.011168f, 0.016326f, -0.009680f, -0.007833f, -0.005569f, 0.004935f, -0.000395f, -0.003512f, 0.001763f, 0.006747f, 0.005915f, 0.006169f, -0.017927f, 0.010309f, -0.014987f, 0.019230f, -0.012771f, 0.019138f, 0.005764f, 0.001423f, -0.019753f, -0.019967f, -0.007021f, -0.006950f, 0.022234f, 0.005998f, 0.017667f, 0.007200f, -0.016847f, 0.000178f, -0.004277f, 0.007372f, -0.000130f, 0.006439f, -0.002617f, -0.011399f, -0.007002f, 0.011125f, 0.028286f, 0.020381f, 0.001740f, 0.006714f, -0.002704f, -0.004491f, 0.014201f, 0.011989f, -0.005934f, 0.017851f, 0.025177f, 0.035635f, 0.000137f, -0.021118f, -0.025553f, 0.008252f, 0.003876f, -0.001478f, 0.005620f, -0.000305f, -0.008633f, -0.001357f, 0.021145f, -0.004396f, -0.010181f, 0.038398f, 0.009148f, -0.006988f, 0.010758f, -0.000150f, -0.001065f, -0.001637f, -0.006816f, -0.001282f, 0.011146f, 0.005453f, -0.004451f, -0.006086f, 0.007617f, + 0.006307f, -0.001208f, 0.015371f, 0.003900f, 0.002583f, 0.001056f, 0.006691f, 0.002069f, 0.006247f, 0.003921f, 0.001941f, 0.000675f, 0.007975f, 0.003987f, 0.004081f, 0.000591f, 0.007918f, -0.001696f, 0.002885f, 0.004307f, 0.003078f, -0.001281f, 0.008895f, 0.009974f, 0.002927f, -0.002307f, 0.010710f, 0.000280f, -0.005412f, -0.001450f, 0.007751f, -0.000120f, -0.000955f, -0.002246f, -0.001728f, -0.000127f, 0.001838f, 0.004694f, 0.007187f, 0.002079f, 0.007603f, -0.002285f, 0.019542f, -0.028581f, 0.024062f, 0.009891f, -0.019502f, 0.045695f, 0.006894f, -0.023334f, 0.005437f, 0.012723f, 0.001256f, 0.009188f, 0.032838f, -0.031372f, 0.020522f, -0.012691f, 0.018214f, -0.006927f, 0.003939f, -0.029063f, 0.005008f, -0.003161f, 0.011754f, -0.011146f, 0.001705f, 0.002223f, 0.000389f, -0.017067f, 0.016459f, 0.001715f, -0.001680f, 0.007705f, -0.003169f, 0.007590f, -0.003959f, 0.023066f, 0.018316f, 0.022831f, 0.022836f, -0.003687f, 0.008055f, 0.009836f, 0.001127f, -0.011951f, 0.016195f, -0.019068f, 0.006012f, 0.018887f, -0.011108f, 0.010002f, -0.020980f, 0.006736f, -0.001703f, -0.005035f, + -0.001683f, 0.001609f, 0.006670f, 0.006272f, 0.022392f, -0.014601f, -0.000559f, 0.014713f, 0.031849f, -0.028106f, 0.007360f, -0.006914f, 0.009796f, -0.005178f, 0.046453f, -0.028504f, 0.010336f, -0.015890f, -0.008634f, 0.004124f, 0.005019f, 0.002551f, -0.040300f, -0.021351f, 0.033629f, 0.018322f, -0.003492f, -0.018095f, -0.020744f, -0.008304f, 0.007667f, -0.022520f, -0.012095f, 0.011079f, 0.006400f, -0.000461f, -0.000442f, -0.015761f, 0.003150f, -0.004586f, -0.005734f, 0.007214f, -0.003666f, -0.004861f, -0.001644f, -0.013788f, 0.004890f, -0.003571f, -0.004470f, -0.005014f, 0.006488f, -0.006650f, 0.007861f, -0.001196f, -0.001756f, 0.002624f, 0.002915f, 0.009902f, -0.009994f, -0.002170f, -0.007557f, -0.001652f, 0.005151f, 0.003759f, 0.013187f, -0.004251f, 0.007360f, 0.001613f, -0.004568f, -0.003111f, -0.001105f, 0.004916f, -0.000593f, 0.002521f, 0.021446f, -0.028081f, -0.005914f, 0.039846f, -0.011889f, -0.000742f, 0.021376f, 0.005060f, 0.013214f, -0.029643f, 0.028550f, 0.001908f, 0.002188f, -0.007487f, -0.017806f, -0.002409f, -0.002705f, -0.019085f, -0.011486f, 0.021269f, -0.006685f, 0.004124f, + -0.010356f, -0.046608f, 0.015859f, 0.002169f, -0.014350f, 0.008958f, 0.018135f, -0.001647f, 0.002061f, -0.003604f, 0.004609f, 0.012293f, 0.003963f, 0.019724f, 0.013542f, 0.003124f, 0.017270f, -0.013820f, -0.013589f, -0.019402f, 0.007410f, 0.011279f, 0.003334f, -0.030802f, 0.008810f, -0.026314f, 0.038246f, -0.009016f, 0.013634f, 0.032612f, -0.012776f, 0.020734f, 0.005230f, 0.022570f, 0.009138f, -0.010840f, -0.033377f, -0.023969f, -0.018646f, -0.002544f, -0.019576f, -0.003889f, -0.017106f, -0.011112f, 0.033694f, 0.007323f, -0.014281f, -0.012699f, 0.006844f, 0.012526f, -0.002865f, 0.004911f, -0.061098f, 0.024648f, 0.004223f, -0.019588f, -0.024058f, -0.006260f, -0.040336f, 0.004391f, 0.020131f, 0.002249f, -0.017303f, 0.010753f, 0.009090f, -0.014234f, 0.007191f, 0.004275f, -0.003509f, 0.000503f, -0.009086f, 0.002431f, 0.003222f, 0.002393f, -0.011858f, -0.006491f, 0.004938f, -0.007434f, 0.001765f, -0.004481f, -0.002834f, 0.002893f, 0.010078f, -0.012702f, 0.004478f, 0.009913f, -0.011807f, -0.011140f, 0.001513f, -0.010224f, 0.002397f, -0.006785f, 0.007107f, 0.003840f, -0.011831f, 0.006666f, + -0.007760f, -0.005040f, 0.008225f, 0.001907f, 0.018465f, 0.005715f, 0.000000f, -0.001151f, 0.001472f, -0.004829f, 0.002070f, 0.013675f, -0.037469f, -0.046020f, 0.028291f, -0.022451f, -0.026167f, -0.007271f, 0.017880f, 0.036470f, -0.023494f, 0.002225f, 0.017545f, -0.004901f, -0.007180f, 0.009590f, 0.006379f, 0.027476f, 0.009430f, -0.025891f, -0.000665f, -0.013004f, -0.000570f, -0.015282f, -0.020160f, 0.003416f, 0.020841f, -0.001246f, 0.009484f, -0.016752f, 0.005328f, 0.020532f, 0.016057f, 0.002632f, 0.001943f, 0.012922f, 0.012366f, 0.007911f, 0.018894f, -0.023228f, 0.026072f, 0.018755f, 0.006676f, -0.019162f, 0.001768f, 0.015192f, -0.015000f, 0.017609f, -0.011840f, 0.019912f, -0.004908f, 0.025924f, -0.040039f, 0.043092f, 0.010388f, 0.040648f, 0.002945f, -0.008334f, -0.002488f, 0.014820f, 0.001294f, -0.033534f, 0.001655f, -0.002182f, -0.034686f, 0.011276f, 0.025213f, -0.033023f, 0.028019f, -0.029049f, 0.009443f, 0.011491f, 0.006396f, -0.036407f, -0.017347f, -0.017776f, 0.003850f, 0.002916f, -0.021064f, -0.031157f, 0.006442f, -0.027383f, 0.019121f, -0.013126f, -0.006914f, 0.009661f, + -0.016896f, -0.013087f, -0.017344f, -0.007081f, -0.009537f, 0.000729f, -0.013813f, -0.010340f, -0.012578f, -0.018865f, -0.008986f, -0.003800f, -0.004021f, -0.004638f, -0.005275f, -0.003518f, -0.008796f, -0.009754f, 0.006862f, -0.011711f, -0.006198f, -0.002869f, 0.009468f, -0.004302f, 0.000574f, -0.015010f, -0.010683f, -0.004775f, -0.000012f, -0.003272f, -0.012711f, -0.001617f, -0.000841f, 0.010735f, 0.007067f, -0.008365f, -0.007747f, 0.001911f, -0.004010f, 0.007971f, -0.004085f, 0.004361f, -0.007758f, -0.021850f, 0.032094f, 0.006151f, 0.020989f, 0.020315f, 0.005428f, -0.016416f, 0.003142f, 0.054426f, -0.038106f, 0.008653f, -0.007018f, -0.021026f, 0.000846f, 0.006934f, 0.008476f, -0.000697f, -0.000237f, -0.011246f, -0.016210f, -0.025102f, -0.012827f, 0.018182f, -0.015985f, -0.025226f, 0.013893f, -0.009333f, 0.005115f, -0.003736f, 0.010726f, -0.011009f, 0.022995f, -0.008883f, 0.002190f, -0.000997f, 0.002136f, 0.021032f, 0.006990f, -0.010458f, 0.011144f, -0.009614f, 0.017303f, -0.011080f, 0.006915f, -0.025702f, -0.018739f, -0.013997f, 0.004103f, -0.013093f, -0.022295f, 0.008767f, 0.016013f, 0.004284f, + -0.011988f, 0.007031f, 0.011235f, 0.012586f, 0.034975f, 0.048140f, 0.065827f, -0.007205f, 0.010271f, 0.015498f, 0.009083f, 0.008466f, 0.010369f, -0.013963f, 0.025978f, -0.004136f, 0.033997f, 0.041826f, 0.030760f, 0.012152f, 0.017216f, 0.005432f, 0.058880f, 0.016605f, -0.011046f, -0.009756f, -0.008621f, -0.003766f, -0.004017f, 0.002777f, -0.004926f, -0.011398f, 0.009685f, -0.017837f, 0.005006f, -0.004286f, 0.005299f, -0.009017f, -0.007138f, -0.005756f, 0.013226f, -0.013340f, -0.012726f, -0.001211f, 0.005361f, -0.006853f, -0.016277f, -0.005631f, 0.000776f, -0.007930f, 0.008460f, 0.016074f, -0.009447f, -0.001292f, 0.003340f, -0.001861f, 0.005367f, 0.009261f, -0.004532f, -0.011464f, -0.001960f, 0.005286f, -0.005581f, 0.014611f, 0.017546f, 0.010605f, -0.005104f, -0.012064f, -0.001602f, 0.017109f, 0.001950f, -0.000603f, 0.007698f, 0.002310f, -0.000154f, -0.003000f, 0.004318f, 0.004285f, -0.011651f, -0.008625f, -0.000449f, 0.066041f, 0.052878f, -0.023009f, -0.010566f, -0.027455f, 0.015865f, 0.007737f, 0.032359f, -0.005677f, -0.013978f, -0.006324f, -0.020926f, 0.004731f, 0.000832f, 0.030500f, + -0.011390f, 0.011372f, -0.041017f, 0.022615f, -0.003186f, 0.015914f, -0.000164f, 0.014418f, 0.002500f, -0.023373f, -0.012017f, -0.020055f, -0.015176f, 0.016870f, 0.040748f, 0.017714f, -0.004789f, -0.012639f, -0.000497f, -0.003443f, 0.010209f, 0.013729f, -0.025966f, -0.000541f, -0.009010f, -0.008738f, -0.028195f, -0.021857f, -0.045731f, 0.000809f, -0.002227f, 0.016471f, -0.013653f, 0.029321f, -0.022224f, -0.009862f, 0.058853f, 0.058156f, -0.040161f, 0.008945f, 0.033843f, -0.019635f, -0.009253f, 0.017310f, -0.006389f, -0.024654f, 0.065469f, -0.016329f, -0.099197f, 0.032984f, -0.001167f, -0.051251f, 0.039281f, 0.041751f, -0.014713f, 0.029211f, 0.037333f, -0.017653f, 0.001435f, 0.023533f, -0.025445f, 0.010638f, 0.020645f, -0.036684f, -0.004903f, -0.012146f, 0.002133f, -0.013474f, 0.000347f, 0.005060f, -0.015334f, 0.012406f, -0.017799f, -0.008341f, 0.008894f, 0.017619f, -0.010046f, 0.000936f, 0.003716f, -0.002737f, 0.006183f, -0.013004f, 0.019194f, -0.009745f, 0.020266f, 0.019387f, -0.000291f, 0.000932f, 0.013387f, -0.009736f, 0.003050f, -0.000593f, 0.016735f, -0.012462f, 0.010226f, 0.002984f, + -0.038541f, 0.007422f, -0.004625f, -0.007351f, 0.002314f, -0.001160f, 0.004368f, -0.021940f, 0.003215f, -0.005763f, -0.019080f, 0.003250f, 0.033385f, -0.031230f, 0.010502f, 0.018130f, -0.026356f, -0.000178f, 0.014991f, -0.023973f, -0.011532f, 0.005336f, 0.012281f, 0.022639f, 0.011354f, -0.017068f, -0.002626f, 0.016923f, -0.017993f, 0.019354f, -0.008650f, -0.023211f, 0.022120f, 0.011752f, 0.011320f, -0.005325f, -0.005403f, -0.007811f, -0.000574f, 0.018718f, -0.036771f, 0.019207f, -0.000204f, 0.031803f, -0.019094f, 0.000699f, -0.023883f, 0.011282f, -0.039231f, 0.005031f, 0.002342f, -0.015201f, -0.011429f, 0.007014f, -0.026233f, -0.045672f, 0.028619f, -0.001974f, 0.009000f, -0.026762f, 0.017353f, -0.003815f, 0.018605f, 0.019952f, 0.010160f, -0.018697f, 0.016531f, -0.008649f, -0.003671f, -0.035171f, 0.005716f, -0.024857f, -0.027372f, -0.040153f, -0.016173f, 0.007139f, 0.011863f, -0.041467f, -0.020240f, 0.002878f, -0.014512f, -0.055898f, -0.044261f, -0.045460f, -0.009003f, -0.026935f, 0.024953f, 0.034984f, 0.009969f, -0.033454f, -0.038961f, -0.045458f, -0.003776f, -0.002810f, 0.025661f, -0.021635f, + -0.037880f, -0.018283f, -0.025058f, 0.009296f, 0.000987f, 0.009686f, 0.005095f, -0.012090f, 0.003232f, 0.009956f, -0.009436f, -0.003621f, -0.007922f, -0.004735f, -0.005594f, -0.011735f, -0.000090f, 0.015759f, 0.000997f, 0.004987f, 0.004915f, -0.002101f, 0.011902f, -0.006893f, 0.018141f, 0.016387f, -0.005795f, -0.013706f, -0.000246f, -0.004937f, -0.007500f, -0.008426f, -0.007493f, 0.013277f, 0.001012f, 0.012537f, -0.012076f, -0.013064f, -0.002044f, 0.007149f, -0.021329f, 0.004274f, 0.002616f, -0.015405f, 0.003913f, -0.012586f, -0.028020f, 0.018064f, -0.006379f, 0.002714f, -0.004318f, 0.003520f, -0.014148f, -0.003253f, -0.001048f, -0.029713f, 0.049285f, 0.054843f, -0.014040f, 0.036739f, -0.011297f, -0.015384f, -0.015219f, 0.035738f, -0.032407f, -0.008004f, -0.015734f, 0.057092f, 0.001608f, 0.020432f, 0.007038f, -0.006125f, 0.028297f, 0.015436f, 0.023084f, 0.006736f, -0.004178f, -0.010825f, 0.022093f, -0.004474f, -0.022624f, 0.026931f, -0.001214f, 0.023490f, -0.027513f, 0.018150f, 0.006270f, -0.028262f, -0.021672f, 0.049517f, 0.032218f, -0.003825f, 0.017617f, 0.014313f, -0.032343f, -0.021703f, + 0.010190f, 0.007290f, 0.021972f, 0.002031f, 0.004544f, 0.007966f, 0.026916f, 0.010462f, 0.006658f, -0.027945f, 0.074823f, 0.049680f, 0.005478f, -0.034593f, 0.016507f, -0.012172f, 0.009065f, -0.008543f, 0.015815f, -0.011878f, 0.002267f, 0.040646f, -0.028992f, -0.014695f, -0.038866f, 0.009948f, -0.010753f, -0.007633f, 0.035069f, 0.010256f, 0.004254f, 0.002175f, -0.014785f, -0.029681f, 0.020619f, -0.000933f, 0.000200f, 0.021477f, 0.022007f, -0.002696f, -0.016548f, -0.019896f, 0.036318f, -0.004757f, -0.002336f, -0.008067f, 0.027267f, -0.003190f, -0.019392f, 0.011596f, 0.010013f, 0.016203f, 0.007648f, 0.005064f, 0.025207f, -0.006214f, -0.009455f, 0.007824f, -0.000814f, -0.000013f, 0.002057f, 0.010603f, -0.006727f, -0.001128f, -0.008524f, 0.001674f, 0.012057f, -0.006775f, 0.002741f, 0.014219f, -0.005562f, 0.002162f, 0.010997f, -0.000364f, -0.003165f, -0.024806f, 0.015242f, -0.014406f, 0.009954f, -0.016993f, -0.003579f, 0.005179f, -0.010080f, -0.005183f, 0.022423f, 0.015138f, 0.001840f, -0.004752f, 0.020970f, 0.002916f, 0.009982f, 0.008042f, 0.004672f, -0.005103f, 0.009007f, 0.003457f, + 0.008919f, -0.018425f, -0.039551f, 0.101616f, -0.114687f, -0.013517f, -0.060517f, 0.073628f, 0.019595f, 0.012768f, -0.029058f, 0.006661f, -0.023776f, 0.065953f, -0.011996f, -0.004495f, 0.006488f, -0.003519f, -0.026193f, 0.009669f, 0.014745f, 0.019803f, -0.044999f, -0.023680f, -0.023326f, 0.008966f, -0.013843f, -0.012232f, -0.001750f, -0.000607f, 0.029012f, -0.015318f, 0.001134f, 0.021981f, -0.003085f, -0.029654f, 0.003382f, 0.023157f, -0.003123f, -0.046633f, 0.034403f, 0.004025f, 0.000298f, -0.000216f, -0.019962f, 0.015189f, -0.086352f, -0.060177f, -0.008734f, -0.021627f, 0.003550f, 0.006462f, -0.040640f, 0.063219f, -0.025450f, 0.087138f, -0.012682f, -0.030644f, 0.029509f, 0.004905f, 0.026295f, 0.040315f, 0.012440f, -0.041576f, -0.011877f, 0.046572f, 0.107885f, 0.003534f, -0.028059f, 0.045066f, 0.003529f, 0.053168f, 0.008234f, 0.072000f, -0.018972f, -0.002924f, -0.002322f, 0.016796f, 0.002107f, 0.027656f, 0.050250f, 0.002984f, -0.011091f, -0.009049f, 0.015744f, -0.013759f, -0.006298f, 0.033041f, 0.023765f, 0.003627f, -0.006566f, -0.012467f, -0.014391f, -0.008564f, -0.011781f, 0.023830f, + -0.015142f, -0.010262f, 0.011397f, 0.004251f, -0.004935f, 0.010679f, 0.011735f, -0.006745f, 0.010005f, 0.016937f, -0.009175f, 0.001127f, -0.024401f, 0.030304f, -0.000568f, 0.024375f, 0.001196f, -0.025396f, -0.000266f, 0.002646f, 0.006246f, 0.002730f, -0.000443f, -0.021816f, -0.020663f, -0.001209f, -0.012211f, 0.016117f, 0.005448f, -0.007447f, -0.001202f, 0.012685f, 0.002135f, -0.007305f, 0.000257f, 0.009199f, -0.000365f, -0.004412f, -0.001399f, 0.004995f, 0.149667f, 0.046811f, 0.017024f, -0.004173f, -0.015495f, -0.020895f, 0.049215f, 0.045171f, -0.050932f, 0.031050f, 0.023700f, 0.005769f, -0.015015f, -0.026851f, -0.069653f, -0.025847f, 0.022965f, 0.007751f, -0.022048f, 0.042825f, -0.013243f, 0.017599f, 0.017490f, -0.009802f, -0.009405f, 0.044670f, 0.001682f, -0.016401f, 0.028138f, -0.023659f, 0.054797f, -0.026179f, -0.015652f, -0.002529f, 0.021680f, 0.011662f, 0.055411f, -0.016466f, -0.032337f, -0.011254f, 0.015017f, 0.004190f, 0.029917f, 0.008496f, 0.003078f, -0.011546f, 0.024200f, 0.103486f, 0.044304f, -0.037892f, 0.033555f, -0.019680f, -0.030810f, 0.025841f, -0.000662f, 0.007827f, + -0.001609f, 0.018731f, -0.026855f, -0.041130f, -0.109667f, -0.028579f, 0.039724f, -0.014146f, -0.037370f, 0.016926f, -0.008390f, 0.016860f, -0.043699f, -0.038256f, -0.017818f, 0.016994f, 0.017948f, 0.052939f, 0.009635f, -0.003301f, -0.040738f, -0.057795f, -0.006863f, -0.025768f, 0.005447f, 0.021381f, -0.027370f, -0.028118f, -0.005771f, -0.035079f, -0.058853f, -0.019293f, -0.015370f, -0.031260f, -0.007019f, 0.017991f, -0.016161f, -0.008317f, -0.018635f, -0.004022f, -0.041824f, -0.026470f, -0.026503f, 0.001176f, 0.004279f, 0.015673f, -0.023230f, 0.013700f, -0.031456f, 0.001751f, -0.018369f, -0.002008f, 0.010233f, -0.009407f, 0.015337f, -0.041417f, -0.007930f, 0.014680f, 0.006337f, 0.013531f, -0.004945f, -0.010995f, 0.020870f, -0.003635f, -0.003891f, 0.014737f, -0.020541f, -0.016186f, -0.002706f, 0.004372f, -0.027370f, -0.012771f, -0.014735f, -0.008025f, -0.001972f, 0.000065f, 0.002758f, -0.012096f, 0.001660f, -0.003428f, -0.024085f, 0.032339f, -0.027229f, 0.090330f, 0.075689f, 0.035103f, -0.021617f, -0.032721f, 0.053886f, 0.046150f, -0.062106f, -0.013097f, -0.038339f, 0.052113f, -0.009668f, -0.075462f, + -0.033339f, 0.026070f, 0.046086f, -0.087123f, 0.034009f, -0.060490f, 0.021480f, -0.035943f, -0.009871f, 0.041090f, -0.014744f, 0.005799f, 0.025889f, 0.054956f, -0.037033f, -0.061457f, 0.012930f, -0.005318f, 0.005919f, 0.056370f, 0.013615f, 0.041945f, -0.054512f, -0.010433f, 0.016540f, -0.048492f, 0.077707f, -0.009642f, 0.046273f, -0.007044f, -0.011746f, 0.038078f, 0.037813f, -0.022634f, 0.085649f, -0.020688f, -0.038327f, 0.041229f, 0.073485f, 0.003774f, 0.012711f, 0.003171f, 0.031998f, -0.035339f, 0.025521f, 0.112243f, 0.051080f, -0.003922f, 0.048467f, 0.060237f, -0.045653f, -0.138202f, 0.009702f, 0.082746f, 0.093208f, 0.025345f, -0.009792f, -0.040959f, 0.048040f, 0.103434f, 0.047715f, 0.024977f, -0.102402f, 0.018876f, -0.058318f, -0.036183f, -0.090364f, 0.075912f, 0.015883f, -0.026557f, -0.036366f, 0.026527f, -0.026471f, 0.014256f, 0.009545f, 0.013279f, -0.033901f, -0.007303f, -0.004794f, 0.017528f, -0.012103f, 0.014799f, 0.012458f, -0.015333f, -0.010429f, 0.020661f, 0.000281f, 0.022205f, -0.010129f, 0.008159f, -0.015282f, 0.007799f, 0.041626f, 0.007832f, 0.007334f, -0.005479f, + -0.045971f, -0.023080f, -0.028592f, 0.014902f, 0.075967f, 0.072037f, 0.064667f, -0.005169f, -0.047962f, -0.044957f, -0.021887f, 0.030244f, 0.033317f, -0.002553f, -0.016258f, -0.024309f, -0.035831f, 0.009324f, 0.019301f, 0.016453f, 0.015006f, 0.012110f, -0.000171f, 0.001234f, -0.006839f, 0.007028f, -0.009898f, 0.006784f, -0.002623f, -0.001455f, -0.000356f, 0.008819f, 0.002077f, 0.003799f, 0.000581f, 0.004180f, -0.007511f, 0.000820f, -0.003524f, -0.001132f, 0.063614f, -0.124830f, 0.095929f, 0.020196f, -0.057020f, 0.001150f, 0.053818f, -0.035229f, 0.001889f, 0.029994f, -0.036891f, 0.003513f, -0.033113f, -0.020930f, 0.035767f, -0.030058f, -0.016902f, -0.063500f, 0.028011f, 0.062342f, 0.017815f, -0.027588f, -0.046984f, -0.007267f, 0.035947f, 0.019546f, -0.040081f, -0.000786f, 0.049088f, -0.006167f, 0.003678f, -0.016344f, -0.011572f, 0.114759f, -0.054602f, -0.013762f, -0.012425f, 0.019494f, 0.053516f, -0.056285f, -0.031405f, 0.075570f, -0.008584f, -0.004606f, -0.089850f, -0.074313f, 0.031491f, 0.050875f, 0.027972f, -0.092122f, 0.063567f, -0.001500f, -0.013867f, 0.013413f, -0.065764f, -0.018120f, + -0.008321f, -0.032553f, 0.059622f, -0.046210f, -0.025531f, -0.049707f, -0.028585f, -0.065598f, 0.020041f, -0.102653f, -0.028618f, 0.012171f, -0.050981f, 0.012755f, 0.028656f, 0.012602f, -0.000559f, -0.018334f, -0.036794f, 0.054484f, -0.011645f, -0.005174f, -0.019408f, 0.033006f, 0.066132f, 0.009967f, -0.089008f, 0.007919f, -0.039574f, 0.005990f, 0.008385f, -0.016237f, 0.006349f, -0.026677f, -0.008899f, -0.002248f, -0.020115f, 0.000381f, -0.005686f, 0.015664f, 0.014068f, -0.004902f, 0.007134f, 0.029148f, -0.013084f, -0.010523f, 0.029919f, -0.021719f, 0.019889f, -0.010575f, -0.009976f, 0.002133f, -0.012611f, -0.006213f, 0.018236f, -0.035487f, 0.010737f, 0.008231f, 0.013197f, 0.025237f, -0.017771f, 0.002923f, 0.019006f, 0.006772f, -0.006403f, -0.016854f, -0.003267f, -0.004184f, 0.000496f, -0.017300f, 0.005195f, -0.003161f, -0.006959f, 0.004064f, 0.002306f, -0.008114f, 0.018222f, -0.007916f, -0.005522f, 0.000289f, 0.004817f, -0.000827f, -0.072158f, 0.043534f, -0.001489f, 0.056399f, -0.011813f, 0.058351f, 0.007154f, -0.007581f, 0.025966f, 0.067742f, 0.032302f, 0.017297f, 0.013357f, 0.008585f, + 0.026478f, -0.034224f, -0.002992f, -0.025677f, -0.027127f, 0.041667f, 0.025726f, 0.015916f, -0.012256f, -0.010534f, -0.005204f, 0.043603f, 0.006417f, -0.019352f, -0.031831f, -0.001465f, -0.007748f, 0.032804f, 0.004700f, 0.027438f, 0.051260f, -0.014377f, -0.130925f, 0.008576f, 0.105837f, 0.011076f, -0.078191f, -0.010082f, 0.029661f, 0.023556f, 0.041364f, 0.037920f, -0.003445f, -0.024630f, -0.025607f, 0.033197f, -0.020546f, 0.003719f, 0.011248f, -0.135630f, -0.023893f, -0.026076f, 0.021153f, 0.106609f, -0.002345f, 0.008569f, -0.025143f, 0.007253f, 0.021574f, 0.044732f, 0.022940f, -0.026423f, -0.014331f, -0.065842f, -0.004428f, 0.045286f, -0.020419f, -0.009387f, 0.016221f, 0.046010f, 0.036816f, -0.009899f, -0.047277f, 0.000310f, 0.016614f, 0.005244f, -0.031586f, 0.003880f, 0.003285f, -0.002315f, -0.027351f, -0.034767f, 0.029729f, 0.024883f, -0.001769f, -0.005385f, -0.026784f, 0.020902f, 0.008092f, 0.004826f, 0.007569f, 0.006731f, 0.011534f, 0.000879f, -0.029645f, 0.016385f, 0.000259f, -0.001701f, 0.001119f, 0.007874f, 0.003136f, -0.003804f, -0.000611f, 0.001283f, -0.010118f, -0.005484f, + -0.040829f, 0.006499f, 0.027870f, -0.019820f, 0.009576f, -0.032405f, 0.017781f, 0.008692f, -0.005431f, -0.008814f, -0.003874f, -0.002993f, 0.003265f, -0.006944f, 0.036741f, -0.004257f, -0.214156f, -0.402827f, -0.161882f, -0.272646f, -0.313345f, 0.194859f, 0.068127f, 0.179035f, 0.538384f, 0.352388f, 0.284362f, 0.426149f, 0.212754f, 0.013740f, 0.168554f, 0.041965f, -0.170537f, -0.119844f, -0.135900f, -0.312287f, -0.253663f, -0.109629f, -0.227143f, -0.250339f, -0.103490f, -0.154091f, -0.258458f, -0.133611f, 0.020000f, -0.162577f, -0.148758f, 0.032787f, -0.032221f, -0.148263f, 0.166110f, 0.108395f, -0.124507f, 0.123184f, 0.186948f, 0.028284f, 0.106885f, 0.375582f, 0.178387f, 0.112558f, 0.441859f, 0.309564f, 0.179259f, 0.435521f, 0.583930f, 0.361452f, 0.523618f, 0.678156f, 0.484649f, 0.321342f, 0.423645f, 0.222930f, -0.215796f, -0.142208f, -0.285043f, -0.664176f, -0.665913f, -0.674587f, -1.018160f, -1.005461f, -1.010098f, -1.052381f, -0.993443f, -0.966495f, -0.760751f, -0.609067f, -0.460508f, -0.189890f, 0.055865f, 0.147591f, 0.375974f, 0.653035f, 0.553406f, 0.741734f, 1.054866f, 0.886555f, + 0.828103f, 1.008114f, 0.746946f, 0.383038f, 0.415220f, 0.389454f, 0.146237f, 0.103970f, 0.209133f, 0.077221f, -0.018260f, 0.069894f, 0.024973f, -0.145449f, -0.129841f, -0.078441f, -0.259877f, -0.298737f, -0.130258f, -0.227317f, -0.312722f, -0.129378f, -0.083017f, -0.170659f, -0.002384f, 0.054884f, -0.056258f, -0.008643f, -0.041490f, -0.238885f, -0.343840f, -0.385701f, -0.481432f, -0.567123f, -0.508762f, -0.465376f, -0.433067f, -0.325365f, -0.206941f, -0.147657f, -0.026661f, 0.114648f, 0.178700f, 0.258603f, 0.426338f, 0.517826f, 0.604353f, 0.647246f, 0.613623f, 0.546554f, 0.418498f, 0.285765f, 0.159905f, 0.022140f, -0.026779f, -0.046326f, -0.074896f, -0.084970f, -0.086127f, -0.100419f, -0.106070f, -0.096441f, -0.086389f, -0.096665f, -0.103215f, -0.099209f, -0.103718f, -0.114163f, -0.109789f, -0.105546f, -0.083311f, -0.056224f, -0.044627f, -0.028670f, 0.001584f, 0.012625f, 0.026688f, 0.056312f, 0.074129f, 0.076971f, 0.075731f, 0.059527f, 0.039774f, 0.023354f, -0.000754f, -0.022135f, -0.033457f, -0.054036f, -0.069369f, -0.075058f, -0.088108f, -0.092490f, -0.084404f, -0.079318f, -0.074181f, -0.062027f, + -0.054229f, -0.043394f, -0.031618f, -0.023236f, -0.011390f, -0.001080f, 0.012101f, 0.020233f, 0.028637f, 0.037675f, 0.047257f, 0.053323f, 0.063115f, 0.073659f, 0.081293f, 0.085400f, 0.088470f, 0.090378f, 0.089132f, 0.086749f, 0.086000f, 0.078153f, 0.068147f, 0.055339f, 0.040841f, 0.026235f, 0.011060f, -0.005600f, -0.019500f, -0.034242f, -0.046454f, -0.058826f, -0.069790f, -0.080921f, -0.085320f, -0.088236f, -0.087486f, -0.080721f, -0.073414f, -0.064516f, -0.050470f, -0.036774f, -0.023837f, -0.008621f, 0.004514f, 0.013188f, 0.020987f, 0.026573f, 0.027162f, 0.025468f, 0.024166f, 0.020895f, 0.016501f, 0.013421f, 0.011578f, 0.009249f, 0.007454f, 0.006435f, 0.005667f, 0.004713f, 0.004350f, 0.004393f}, + {-0.012880f, -0.001138f, 0.012170f, -0.010762f, 0.004232f, -0.018169f, 0.000238f, -0.006540f, 0.007376f, -0.006101f, 0.001715f, -0.004119f, -0.007578f, -0.001903f, -0.000683f, 0.005590f, 0.006971f, -0.006515f, -0.011415f, 0.006062f, 0.002090f, 0.004256f, 0.002571f, 0.004804f, -0.006599f, -0.004925f, 0.001228f, -0.001206f, 0.006012f, 0.004364f, -0.005040f, -0.001033f, 0.004589f, 0.008507f, 0.005234f, 0.000126f, -0.006596f, 0.003625f, -0.001106f, -0.003468f, 0.004692f, 0.002079f, -0.006059f, -0.005032f, -0.004105f, 0.003466f, -0.005937f, -0.003144f, 0.005036f, 0.001996f, -0.000158f, -0.006178f, 0.002319f, -0.005303f, -0.013820f, 0.001432f, -0.004693f, -0.008865f, 0.004120f, -0.002476f, -0.002535f, -0.002997f, 0.000208f, 0.006872f, 0.004116f, 0.002361f, 0.003118f, 0.005205f, -0.010412f, 0.005498f, -0.004135f, -0.003935f, -0.002294f, 0.003529f, 0.000674f, 0.007385f, 0.010656f, 0.004227f, 0.000832f, 0.001279f, -0.000152f, 0.006879f, -0.002871f, -0.000176f, 0.003334f, 0.000311f, -0.002815f, -0.002815f, 0.000971f, -0.000004f, -0.003180f, -0.001522f, 0.001001f, -0.000089f, -0.000421f, -0.001191f, + -0.001575f, 0.001137f, 0.000682f, 0.001226f, -0.000470f, 0.000481f, -0.000327f, -0.002870f, -0.001142f, 0.001428f, 0.002356f, -0.001245f, -0.001569f, 0.000619f, 0.001491f, 0.027652f, -0.002342f, 0.005062f, 0.006081f, -0.002842f, 0.002862f, 0.011009f, -0.008599f, -0.001531f, 0.003145f, -0.004285f, -0.000847f, 0.008083f, -0.002620f, -0.001837f, -0.000566f, 0.003125f, -0.001551f, 0.003885f, -0.002739f, -0.002703f, -0.001242f, -0.006294f, -0.010727f, -0.002035f, -0.003443f, -0.001453f, 0.006314f, -0.011375f, 0.013963f, 0.000069f, 0.000242f, 0.000464f, 0.002636f, -0.000353f, -0.005368f, 0.000828f, 0.004304f, 0.010521f, 0.000526f, -0.000094f, -0.001605f, -0.003571f, 0.007007f, 0.003309f, -0.002558f, 0.003847f, -0.006977f, 0.001172f, 0.002229f, -0.005300f, -0.018141f, -0.005699f, -0.000452f, -0.001087f, -0.000862f, -0.001617f, -0.002309f, -0.001336f, -0.003447f, 0.004425f, 0.013371f, 0.007555f, 0.000588f, -0.000045f, -0.000355f, 0.004652f, -0.002731f, -0.012212f, -0.000419f, -0.006371f, 0.003999f, -0.007226f, 0.004078f, -0.017615f, -0.000106f, -0.002528f, 0.005979f, 0.009565f, -0.001465f, -0.002306f, + 0.001444f, -0.000064f, 0.005159f, 0.001868f, 0.000867f, 0.006956f, -0.005140f, -0.000703f, 0.000891f, 0.002473f, 0.000016f, 0.002522f, 0.000146f, 0.001606f, 0.000749f, -0.000362f, 0.000526f, -0.000652f, -0.000070f, 0.001442f, 0.002224f, 0.000241f, -0.000603f, -0.000891f, 0.000298f, -0.000409f, 0.001263f, 0.000875f, 0.000619f, -0.000439f, 0.000239f, 0.000821f, -0.024368f, -0.023497f, -0.008849f, -0.003489f, -0.003361f, 0.000010f, 0.005932f, 0.001407f, 0.004817f, -0.011040f, 0.005447f, 0.006862f, 0.006634f, 0.007777f, -0.006033f, 0.001663f, 0.018321f, -0.011348f, -0.000407f, -0.008088f, -0.011718f, -0.001414f, -0.000838f, 0.010142f, -0.004931f, 0.001055f, -0.008754f, 0.005595f, 0.003498f, 0.004389f, -0.019616f, 0.003010f, -0.003591f, -0.006893f, -0.001856f, -0.000111f, -0.014554f, -0.009437f, -0.008129f, -0.000670f, 0.012153f, 0.004201f, 0.004023f, 0.005825f, -0.005442f, 0.003422f, -0.004883f, 0.010377f, 0.015989f, -0.001515f, -0.001473f, 0.004530f, 0.001117f, 0.004118f, 0.008984f, -0.004234f, 0.009295f, -0.001473f, -0.000288f, 0.005483f, 0.007528f, -0.002869f, -0.010880f, -0.010027f, + 0.003864f, -0.001387f, -0.001870f, -0.004430f, 0.004937f, -0.008353f, 0.003096f, 0.006227f, 0.010553f, -0.006157f, 0.010119f, 0.006588f, 0.003290f, 0.005036f, 0.001221f, -0.001735f, -0.006817f, 0.004828f, -0.003208f, -0.006388f, -0.008042f, 0.003313f, -0.002651f, 0.004826f, 0.000852f, -0.003121f, -0.003753f, -0.001939f, 0.001600f, -0.002009f, -0.000707f, -0.002576f, -0.001127f, -0.000179f, 0.002474f, 0.001274f, -0.000079f, 0.001410f, 0.004876f, -0.000497f, 0.000015f, 0.002821f, -0.001538f, 0.000774f, -0.001072f, -0.000862f, 0.001404f, 0.002021f, 0.002065f, 0.001291f, -0.000028f, -0.000670f, 0.001524f, 0.000694f, 0.003340f, 0.003967f, -0.003181f, -0.000361f, 0.001758f, 0.000518f, -0.001811f, 0.000572f, 0.002286f, 0.001956f, -0.001037f, 0.000242f, 0.001287f, -0.001164f, -0.026577f, 0.011592f, -0.011862f, 0.021469f, -0.019867f, 0.015723f, 0.008048f, -0.008216f, -0.010285f, -0.005699f, 0.004149f, 0.003744f, -0.005523f, 0.012687f, -0.004474f, -0.012001f, -0.002393f, 0.013119f, 0.009019f, -0.013144f, 0.002183f, -0.001592f, -0.013762f, -0.005668f, -0.008826f, -0.002018f, -0.010518f, -0.002754f, + -0.004344f, -0.014531f, -0.005128f, 0.007471f, 0.010708f, -0.001990f, -0.012429f, -0.002468f, 0.008945f, -0.002663f, 0.000390f, 0.000666f, 0.000282f, -0.012375f, -0.000286f, -0.001427f, -0.003071f, -0.000522f, 0.002281f, -0.008845f, 0.005173f, -0.009474f, -0.000123f, -0.000003f, 0.000284f, 0.007138f, 0.000233f, -0.003227f, 0.002971f, 0.004968f, 0.011781f, 0.005402f, 0.002745f, -0.003325f, -0.007167f, -0.006773f, -0.002759f, -0.007403f, -0.005277f, 0.004463f, 0.007741f, -0.005571f, -0.009349f, -0.006390f, 0.003078f, 0.001714f, -0.008764f, -0.002971f, 0.001188f, -0.007370f, -0.003335f, 0.001095f, 0.002364f, 0.003087f, -0.003350f, -0.004044f, -0.005565f, 0.000280f, -0.000608f, -0.002100f, 0.001829f, -0.001793f, -0.000558f, -0.004238f, -0.000882f, -0.001379f, 0.003862f, 0.001934f, -0.001462f, 0.001924f, -0.000151f, 0.000656f, -0.001768f, 0.000285f, -0.001020f, -0.000021f, -0.001460f, -0.002799f, 0.002138f, -0.000129f, -0.002666f, -0.001644f, -0.000194f, -0.002434f, -0.002841f, 0.002753f, -0.001641f, 0.032546f, 0.012931f, -0.002210f, 0.007356f, -0.005263f, 0.018233f, 0.007692f, 0.032864f, 0.000596f, + -0.031846f, 0.008135f, 0.019278f, -0.011501f, 0.003361f, 0.013263f, -0.010234f, 0.009346f, -0.008300f, -0.001821f, -0.010229f, -0.009749f, -0.003096f, 0.002680f, -0.001075f, 0.004385f, -0.004394f, 0.014082f, -0.008450f, 0.003965f, 0.002586f, 0.009155f, -0.016833f, -0.008788f, -0.006646f, -0.002009f, -0.005969f, 0.001566f, 0.010250f, 0.007307f, 0.016288f, -0.002406f, -0.001224f, -0.009309f, -0.003067f, 0.010269f, -0.010053f, 0.008478f, -0.009405f, -0.003968f, 0.014952f, 0.021589f, 0.015477f, 0.002699f, -0.011411f, 0.007977f, 0.005932f, -0.006090f, 0.012572f, -0.008321f, 0.002474f, 0.001967f, -0.022992f, -0.000222f, -0.021795f, -0.008792f, 0.003468f, -0.005787f, -0.010406f, -0.008905f, 0.001812f, 0.014945f, 0.003729f, -0.006139f, -0.007605f, -0.006712f, 0.001502f, 0.002404f, 0.007156f, -0.011362f, -0.010215f, 0.000674f, -0.001973f, 0.000655f, -0.002938f, -0.001710f, -0.001826f, -0.001006f, 0.003394f, 0.000852f, 0.001558f, -0.001503f, -0.002360f, -0.002331f, 0.000670f, 0.005943f, 0.001992f, 0.004311f, 0.001383f, -0.006875f, 0.005163f, 0.002292f, 0.000944f, 0.000977f, 0.002987f, -0.000713f, + 0.002576f, 0.000476f, -0.000059f, -0.002165f, -0.001571f, -0.002981f, 0.000876f, 0.002816f, -0.000544f, -0.001434f, -0.001599f, -0.009747f, -0.001086f, -0.001223f, 0.000337f, -0.001563f, 0.020098f, 0.040819f, -0.017938f, -0.013363f, -0.003701f, -0.004931f, 0.014156f, -0.013751f, -0.024941f, -0.008734f, 0.001625f, -0.006211f, 0.007019f, 0.003240f, 0.012262f, 0.005053f, -0.005066f, 0.017665f, 0.016575f, -0.007828f, 0.001102f, -0.011622f, -0.002061f, 0.000491f, -0.007181f, -0.001515f, 0.012344f, 0.017725f, 0.000608f, 0.002795f, 0.007243f, 0.004555f, 0.002767f, 0.001074f, -0.006870f, -0.012988f, 0.001373f, -0.018618f, 0.000561f, 0.004090f, -0.005990f, 0.007100f, -0.004783f, -0.010365f, -0.000901f, 0.009783f, 0.004295f, -0.004613f, 0.030059f, -0.000248f, 0.009628f, -0.018116f, -0.004104f, 0.012156f, -0.005873f, -0.013458f, 0.007721f, -0.015744f, -0.014071f, 0.003016f, 0.017011f, -0.014170f, -0.007974f, -0.004306f, 0.000611f, -0.006511f, -0.006416f, 0.022914f, 0.013403f, -0.002263f, 0.001188f, -0.011040f, -0.007883f, -0.004594f, 0.006843f, 0.008952f, 0.000703f, 0.007141f, 0.004635f, -0.001661f, + 0.006700f, -0.006425f, 0.022955f, 0.012881f, 0.002447f, 0.000557f, 0.002033f, -0.004079f, -0.001581f, -0.004062f, -0.004183f, -0.000309f, -0.000239f, -0.003920f, 0.001902f, -0.005821f, -0.001784f, 0.004202f, -0.001663f, 0.004310f, 0.002484f, 0.004066f, 0.000096f, 0.002746f, 0.003276f, 0.002851f, 0.000497f, 0.004858f, 0.001583f, 0.000508f, -0.003736f, 0.000171f, -0.001433f, -0.000250f, 0.000174f, 0.001621f, -0.000321f, 0.001458f, -0.003561f, -0.000349f, 0.001378f, 0.001735f, 0.002647f, 0.016316f, -0.028958f, -0.003804f, -0.021725f, -0.012323f, -0.019672f, -0.004924f, -0.002937f, -0.002860f, -0.007503f, 0.008951f, -0.027765f, 0.014445f, -0.009406f, 0.008641f, 0.003821f, 0.011750f, 0.000748f, 0.004949f, -0.011138f, -0.004637f, 0.005298f, -0.011057f, -0.008027f, 0.013828f, 0.003870f, 0.006338f, 0.005594f, -0.001263f, 0.003775f, 0.020525f, -0.007217f, 0.002106f, -0.009100f, 0.016538f, -0.009810f, -0.036267f, 0.011365f, 0.005882f, 0.015417f, 0.008440f, 0.021212f, -0.014110f, -0.005566f, 0.012910f, -0.005211f, -0.012038f, -0.005676f, 0.006798f, -0.017609f, 0.017654f, -0.000526f, 0.011825f, + -0.014854f, -0.006388f, -0.005337f, -0.016026f, -0.003209f, -0.012704f, -0.005781f, 0.001547f, 0.018742f, 0.015198f, -0.001606f, -0.022694f, -0.012951f, -0.004029f, 0.018205f, 0.015170f, 0.011003f, 0.010283f, -0.006333f, -0.026291f, -0.006687f, -0.000587f, 0.006288f, -0.008173f, -0.002518f, 0.013738f, -0.002504f, 0.016205f, 0.000287f, 0.011287f, 0.004330f, 0.000728f, -0.004005f, -0.000230f, 0.006120f, 0.001809f, -0.002729f, 0.000750f, -0.007235f, -0.001055f, -0.000342f, -0.009586f, -0.005784f, -0.006053f, -0.002976f, 0.002138f, -0.003860f, 0.001792f, -0.005202f, -0.000478f, -0.001471f, -0.002652f, 0.004360f, 0.002287f, -0.000834f, -0.006448f, -0.002514f, 0.002876f, 0.004437f, 0.000294f, -0.006413f, -0.003212f, 0.001537f, 0.003565f, 0.000989f, 0.001841f, 0.000558f, -0.003199f, -0.038034f, -0.045963f, -0.025935f, 0.018984f, 0.001610f, -0.008502f, -0.009670f, -0.014619f, -0.001470f, 0.005086f, -0.025603f, -0.002358f, 0.016316f, -0.009816f, -0.006966f, 0.018231f, 0.004858f, -0.011845f, 0.004658f, -0.011457f, 0.026980f, -0.008573f, -0.006308f, 0.008816f, -0.013901f, -0.008650f, -0.008118f, 0.004673f, + -0.009628f, -0.003513f, 0.004588f, 0.003376f, -0.031494f, 0.014251f, 0.013844f, -0.008963f, 0.024535f, 0.009535f, 0.002417f, 0.023590f, 0.013470f, 0.004331f, 0.003370f, 0.025499f, -0.002442f, -0.004174f, -0.001624f, 0.015732f, 0.008801f, -0.022818f, 0.008990f, 0.007359f, -0.000086f, -0.012073f, -0.036992f, 0.016529f, -0.002358f, -0.008958f, -0.023170f, -0.012945f, 0.014365f, -0.002849f, -0.006693f, -0.015296f, -0.030076f, 0.003246f, -0.004097f, -0.015806f, -0.006661f, -0.028305f, -0.004479f, -0.006201f, -0.005314f, -0.001009f, 0.010304f, 0.022107f, 0.009463f, -0.007105f, -0.015579f, 0.006295f, 0.001174f, 0.009357f, 0.005823f, -0.003306f, 0.006750f, 0.002665f, -0.000647f, -0.008254f, 0.000855f, -0.013579f, -0.000753f, -0.002801f, 0.002367f, -0.005100f, 0.006598f, 0.004090f, -0.001454f, -0.000892f, -0.001247f, 0.001186f, -0.003064f, -0.000557f, 0.003822f, -0.001236f, -0.001308f, 0.007392f, -0.002747f, -0.001576f, 0.005796f, -0.004153f, 0.003525f, -0.011301f, -0.007456f, -0.003989f, -0.006087f, -0.000359f, -0.006050f, -0.007872f, -0.006018f, -0.001454f, -0.001211f, 0.003016f, -0.000245f, -0.004704f, + 0.002927f, 0.001353f, -0.002610f, -0.039542f, 0.031626f, 0.001673f, 0.016119f, -0.003006f, -0.001413f, 0.002873f, 0.017428f, 0.001622f, -0.002263f, -0.023938f, 0.008401f, -0.002730f, -0.018483f, 0.004696f, -0.012099f, -0.009366f, 0.034099f, 0.009593f, 0.010457f, -0.007495f, 0.012178f, 0.014649f, 0.014225f, -0.008413f, 0.012417f, 0.006344f, -0.014430f, 0.009243f, -0.014031f, -0.004963f, 0.008899f, 0.004103f, -0.001481f, -0.007897f, -0.007324f, 0.022586f, -0.006636f, -0.010116f, -0.006409f, 0.004503f, 0.004921f, -0.010998f, -0.018342f, -0.001478f, -0.019676f, -0.002466f, -0.017738f, -0.006838f, -0.004214f, 0.003341f, -0.009038f, -0.015499f, 0.019393f, -0.008164f, -0.021353f, 0.013511f, 0.022800f, -0.011183f, -0.007294f, 0.011389f, 0.008388f, 0.022449f, 0.014631f, 0.002142f, -0.000198f, -0.023374f, 0.005634f, 0.022114f, 0.017931f, -0.015959f, 0.017100f, 0.018331f, -0.012327f, -0.034647f, -0.011091f, -0.031050f, 0.005236f, 0.017576f, 0.008984f, 0.001992f, -0.009230f, -0.012655f, -0.001344f, 0.001475f, 0.005418f, -0.002979f, 0.010165f, -0.004690f, -0.003504f, 0.003807f, 0.010766f, -0.015916f, + -0.002033f, -0.002155f, -0.004741f, -0.000047f, 0.004373f, -0.001043f, -0.000427f, -0.002647f, -0.000240f, -0.002674f, 0.000954f, -0.000363f, -0.000264f, 0.001341f, 0.005672f, -0.005015f, -0.002709f, 0.003038f, 0.003680f, 0.011608f, -0.001058f, 0.004759f, 0.004738f, -0.005228f, 0.004296f, 0.001730f, -0.004321f, 0.000991f, 0.001841f, 0.001225f, 0.004889f, 0.010107f, 0.002303f, -0.003612f, 0.006994f, -0.002309f, -0.003720f, 0.000422f, -0.006542f, -0.002995f, -0.000348f, 0.000199f, 0.007435f, -0.063019f, 0.029978f, 0.008385f, -0.003104f, 0.042261f, -0.002651f, 0.021321f, -0.019101f, -0.004583f, 0.003201f, 0.000127f, 0.024098f, 0.015275f, -0.033064f, 0.020416f, 0.001408f, 0.012203f, -0.029796f, -0.001299f, 0.016992f, -0.029249f, 0.036278f, 0.009727f, -0.000534f, -0.013153f, 0.002033f, 0.015634f, -0.026259f, 0.002267f, 0.006527f, 0.004477f, -0.016247f, -0.006106f, 0.015092f, 0.008479f, -0.001783f, 0.002124f, -0.010736f, -0.018259f, 0.007350f, -0.030770f, -0.001415f, 0.043731f, 0.042688f, -0.013857f, 0.005164f, -0.002032f, 0.012115f, 0.030677f, 0.002449f, 0.014592f, 0.004750f, -0.016353f, + -0.001365f, -0.003254f, -0.046675f, -0.021179f, 0.028650f, 0.001160f, 0.008731f, -0.011410f, -0.003004f, 0.010067f, 0.013794f, -0.001446f, 0.035693f, 0.000338f, 0.027808f, 0.003301f, 0.005746f, 0.003469f, -0.018450f, -0.023176f, 0.028164f, 0.006373f, -0.014918f, 0.020360f, -0.016985f, 0.001336f, 0.017237f, 0.002627f, -0.004603f, 0.007904f, -0.007620f, -0.007367f, 0.008554f, 0.011738f, 0.000701f, -0.016212f, -0.007857f, -0.017452f, -0.006313f, 0.004061f, 0.005405f, 0.002576f, -0.006826f, -0.003342f, -0.012561f, 0.008748f, -0.000298f, -0.005229f, -0.002420f, 0.003551f, 0.001939f, 0.010894f, 0.009808f, 0.006223f, 0.006328f, 0.001969f, 0.007764f, -0.005533f, 0.003499f, 0.004011f, 0.003911f, -0.004867f, 0.007849f, 0.003973f, -0.001321f, -0.001685f, -0.002209f, -0.002224f, -0.003774f, -0.008980f, -0.002659f, -0.000381f, -0.003637f, -0.006644f, 0.021061f, -0.045817f, 0.018415f, 0.028863f, -0.003987f, 0.008579f, 0.013001f, -0.007017f, -0.004423f, 0.017802f, -0.006694f, 0.027017f, -0.025712f, 0.014044f, 0.033442f, -0.035836f, 0.001475f, -0.017058f, 0.021138f, 0.008882f, 0.017539f, -0.018153f, + -0.014123f, -0.000241f, 0.045201f, 0.000485f, 0.022890f, -0.010175f, 0.001426f, -0.003150f, -0.003968f, -0.020092f, -0.000727f, -0.005672f, 0.009251f, -0.009001f, -0.012952f, -0.010976f, -0.000773f, -0.003861f, 0.020463f, 0.003453f, -0.011221f, -0.010291f, -0.010323f, -0.003863f, -0.004882f, 0.033244f, 0.001520f, 0.016663f, 0.001217f, -0.008069f, -0.007215f, 0.027631f, 0.020745f, -0.008049f, -0.026018f, 0.014664f, 0.010222f, -0.057610f, 0.003428f, 0.032383f, 0.031749f, 0.007302f, 0.025268f, -0.034795f, 0.056972f, 0.004905f, 0.010984f, 0.011165f, 0.027234f, -0.002218f, -0.024218f, -0.007486f, -0.028629f, 0.032610f, -0.014347f, -0.009787f, 0.028653f, -0.000953f, -0.011108f, -0.008786f, -0.021342f, 0.020235f, -0.034908f, -0.005247f, 0.003502f, -0.000963f, 0.005120f, -0.007375f, -0.014902f, -0.009684f, 0.004815f, 0.003743f, -0.006964f, 0.001712f, -0.006632f, -0.007428f, -0.005246f, 0.006323f, 0.003522f, -0.008421f, 0.007895f, 0.001452f, -0.009942f, 0.004461f, -0.001684f, -0.003675f, -0.007540f, -0.008873f, 0.001833f, 0.004132f, 0.018312f, -0.008072f, 0.010921f, 0.001193f, -0.003437f, -0.001430f, + -0.001955f, -0.004909f, 0.002961f, -0.000643f, -0.005213f, -0.001940f, -0.003549f, 0.001326f, 0.003877f, 0.002833f, -0.007457f, 0.017622f, -0.033920f, -0.027107f, 0.024352f, 0.020505f, 0.049982f, -0.017551f, -0.013146f, -0.008826f, 0.009469f, -0.021122f, -0.002497f, 0.008357f, -0.001435f, 0.026897f, 0.017338f, -0.021423f, 0.001995f, 0.006349f, 0.015555f, -0.024408f, 0.025748f, -0.000373f, 0.011433f, -0.004281f, -0.011680f, -0.025608f, 0.009106f, -0.004391f, -0.010787f, 0.005219f, -0.015714f, -0.015262f, -0.003401f, 0.008103f, 0.031176f, -0.046306f, -0.028016f, -0.024954f, -0.028062f, -0.007920f, 0.032323f, -0.019052f, -0.000859f, 0.031839f, -0.004645f, -0.014297f, -0.027546f, -0.007401f, -0.011859f, -0.056975f, -0.044237f, -0.012453f, 0.010012f, -0.005412f, 0.009981f, -0.012632f, -0.009118f, 0.027108f, 0.016359f, -0.028479f, -0.014718f, -0.031879f, -0.012680f, 0.002643f, 0.012771f, -0.005692f, 0.003420f, -0.027201f, -0.021783f, -0.019861f, -0.000560f, 0.004669f, 0.001716f, -0.025746f, 0.000841f, 0.034674f, 0.014952f, 0.039578f, -0.031166f, 0.048366f, 0.004278f, -0.030048f, -0.005002f, 0.001398f, + 0.008482f, -0.005036f, 0.013163f, -0.018375f, 0.008723f, -0.016276f, 0.007678f, 0.011131f, -0.003513f, 0.024762f, -0.002075f, 0.005845f, -0.006683f, -0.008944f, -0.005051f, 0.000717f, 0.005592f, -0.009466f, -0.001690f, 0.003178f, -0.002111f, 0.009513f, -0.002853f, -0.004763f, -0.015993f, 0.007068f, 0.001022f, 0.008367f, 0.003557f, -0.005366f, -0.015048f, 0.004849f, -0.019236f, 0.004879f, -0.004999f, -0.000802f, 0.002053f, -0.004144f, 0.001524f, 0.003021f, 0.013371f, 0.005221f, -0.005773f, -0.024395f, 0.004710f, -0.002650f, 0.056310f, 0.006169f, 0.027140f, -0.023441f, -0.015904f, -0.005745f, -0.026462f, -0.016811f, -0.025555f, -0.011889f, -0.016542f, 0.030551f, 0.007726f, 0.007721f, 0.031524f, -0.000825f, -0.001736f, 0.014228f, 0.028380f, 0.044280f, 0.032440f, -0.006641f, -0.011941f, -0.050971f, 0.014131f, 0.015987f, 0.006307f, -0.031785f, 0.036845f, 0.014663f, 0.021690f, -0.006025f, 0.002144f, 0.020889f, 0.046015f, 0.044711f, 0.025891f, 0.005410f, 0.047848f, 0.001238f, -0.014132f, 0.015496f, 0.029069f, 0.023517f, 0.043062f, 0.022684f, 0.001091f, 0.005168f, -0.025776f, 0.011234f, + -0.064619f, -0.011105f, -0.006363f, 0.014356f, 0.051050f, 0.028637f, 0.007658f, 0.036980f, -0.026706f, -0.024360f, 0.005393f, -0.062864f, -0.014860f, 0.002587f, 0.012224f, 0.014554f, 0.016795f, -0.003787f, 0.027764f, 0.003445f, 0.014446f, 0.050935f, -0.031187f, -0.016319f, -0.008485f, 0.009699f, -0.005789f, -0.048095f, -0.008896f, 0.032776f, -0.002190f, 0.041571f, -0.022126f, 0.001128f, 0.017407f, -0.004047f, 0.005032f, -0.017378f, -0.008294f, -0.013499f, -0.008777f, -0.014977f, -0.012056f, 0.003222f, 0.002785f, -0.030029f, -0.013718f, -0.016937f, -0.004293f, 0.005485f, 0.009290f, -0.013423f, -0.000329f, 0.003960f, -0.020874f, 0.003085f, -0.008257f, -0.013888f, -0.007010f, 0.001011f, 0.005398f, -0.009555f, -0.002157f, -0.014584f, -0.000904f, -0.003973f, -0.004472f, -0.010669f, -0.015292f, 0.003838f, 0.005405f, -0.008571f, -0.005650f, -0.006325f, -0.004464f, 0.002707f, 0.010526f, 0.002780f, 0.003518f, -0.003387f, -0.043401f, -0.013694f, 0.007865f, 0.032775f, 0.060233f, -0.024248f, 0.001044f, 0.009931f, -0.011067f, 0.055815f, 0.009885f, -0.027542f, 0.048916f, -0.010123f, -0.016433f, 0.034990f, + -0.031795f, -0.018622f, 0.002126f, 0.003033f, 0.004351f, 0.022903f, 0.012262f, 0.018579f, -0.005708f, 0.009836f, 0.028044f, 0.001671f, 0.019119f, 0.003467f, 0.000729f, 0.030952f, -0.040490f, -0.014760f, -0.013736f, 0.026931f, -0.020644f, -0.005417f, -0.012165f, 0.026667f, -0.011346f, 0.059390f, 0.043469f, -0.040564f, 0.019841f, -0.048731f, 0.006982f, 0.017518f, 0.009469f, 0.010451f, -0.062028f, -0.012108f, -0.059822f, 0.007860f, 0.004935f, 0.007217f, -0.009448f, -0.010925f, 0.028614f, -0.051746f, 0.017768f, -0.022456f, -0.097314f, -0.036528f, -0.031850f, 0.015925f, -0.014175f, 0.014713f, 0.048709f, 0.051832f, 0.029417f, 0.027224f, 0.025362f, 0.007277f, -0.038695f, 0.040529f, 0.000070f, -0.045051f, -0.035766f, -0.056594f, -0.074824f, -0.038699f, -0.007575f, 0.059737f, 0.021574f, 0.003531f, 0.022928f, -0.018398f, -0.000430f, 0.011395f, 0.009563f, -0.004939f, 0.008767f, 0.002711f, 0.006079f, 0.002383f, -0.018509f, 0.014800f, 0.009904f, 0.007202f, 0.002961f, -0.009803f, 0.005239f, -0.014513f, -0.005149f, -0.022473f, 0.018585f, 0.013907f, -0.003092f, 0.001887f, 0.014861f, 0.023492f, + -0.010660f, -0.023209f, -0.007023f, 0.018629f, -0.004201f, -0.013920f, 0.020031f, -0.001892f, -0.011697f, 0.013689f, 0.005512f, 0.000745f, -0.003496f, -0.000677f, -0.009954f, 0.006600f, -0.006377f, -0.003013f, 0.015403f, -0.076942f, -0.035626f, -0.026571f, 0.014492f, -0.058642f, 0.021325f, -0.034967f, 0.050341f, -0.058317f, -0.074003f, -0.015858f, -0.010454f, 0.058448f, 0.028686f, 0.026155f, -0.014691f, 0.007006f, -0.035737f, -0.028716f, 0.006990f, 0.012429f, -0.046132f, -0.042936f, -0.029994f, -0.003636f, 0.023667f, 0.017064f, -0.032305f, -0.040882f, -0.023555f, -0.024048f, -0.055441f, -0.031958f, 0.024951f, -0.015298f, -0.000066f, -0.007451f, 0.018396f, 0.028967f, -0.007261f, -0.083248f, 0.035538f, 0.070053f, 0.026350f, -0.001293f, -0.083448f, -0.019741f, 0.036868f, -0.010174f, 0.093949f, -0.009739f, -0.075150f, 0.012723f, -0.012394f, 0.006522f, 0.002409f, -0.014821f, 0.020598f, 0.025375f, -0.079296f, -0.020976f, 0.004707f, 0.028503f, -0.014462f, -0.040268f, 0.036481f, 0.003931f, -0.026669f, -0.079045f, -0.091706f, -0.047064f, -0.005541f, 0.007123f, 0.074078f, 0.104491f, 0.054013f, 0.041211f, + 0.018203f, -0.060039f, 0.022416f, 0.000113f, -0.031214f, -0.008676f, -0.099146f, -0.020535f, -0.000268f, 0.001202f, 0.003905f, 0.043872f, 0.016696f, 0.013416f, -0.017462f, -0.005247f, 0.038125f, -0.025226f, -0.000015f, -0.001082f, 0.007724f, -0.018585f, -0.030978f, -0.034622f, 0.016012f, -0.015876f, -0.005290f, 0.021087f, 0.001191f, 0.003862f, -0.026330f, 0.009608f, 0.009125f, 0.005197f, -0.021575f, -0.010606f, -0.014041f, -0.022598f, 0.003612f, -0.012871f, 0.025449f, 0.010359f, -0.016507f, 0.003834f, -0.005776f, 0.017820f, -0.022878f, -0.002481f, -0.000469f, 0.012854f, 0.011590f, 0.006275f, 0.013902f, 0.000434f, 0.007894f, 0.006485f, 0.140147f, 0.128707f, -0.054188f, 0.066789f, 0.059232f, -0.016582f, -0.009896f, -0.030676f, -0.016492f, -0.036073f, -0.025247f, 0.106748f, -0.005670f, 0.062192f, 0.000897f, 0.003038f, 0.000977f, -0.042116f, 0.010203f, 0.008724f, -0.092410f, 0.013783f, 0.022591f, -0.048723f, -0.010004f, -0.015036f, -0.006457f, 0.013678f, -0.002570f, 0.002796f, 0.040975f, 0.016502f, -0.019637f, 0.012532f, 0.065215f, 0.001035f, 0.030178f, -0.001649f, 0.024677f, -0.035888f, + -0.043031f, -0.024283f, -0.079196f, 0.021194f, 0.009167f, -0.035385f, -0.096265f, -0.063150f, -0.089967f, 0.065670f, -0.046559f, 0.010173f, 0.016605f, 0.014844f, 0.012879f, 0.070067f, -0.067159f, 0.000290f, -0.037474f, 0.074164f, -0.166238f, 0.034073f, 0.013274f, 0.053179f, 0.048918f, 0.000123f, -0.014945f, -0.025628f, -0.006920f, -0.048552f, 0.036015f, 0.098008f, -0.006989f, 0.020115f, 0.062465f, -0.043415f, 0.025137f, 0.030045f, -0.053963f, -0.037958f, -0.100511f, 0.083556f, -0.015675f, -0.073923f, 0.050096f, -0.012578f, 0.032961f, -0.002454f, 0.028678f, 0.004563f, -0.020983f, 0.034460f, 0.033941f, 0.005167f, 0.019776f, 0.031308f, 0.019524f, -0.021453f, -0.008311f, -0.020964f, -0.008333f, 0.026332f, 0.051743f, -0.002503f, -0.008530f, -0.002372f, 0.033583f, -0.051829f, 0.030487f, -0.014286f, 0.069824f, 0.013334f, -0.039994f, -0.008654f, 0.031591f, -0.016327f, -0.020446f, -0.016404f, -0.011323f, -0.016132f, 0.017910f, 0.011598f, 0.045209f, -0.037126f, 0.003512f, -0.004538f, 0.025351f, 0.001285f, -0.001779f, 0.014034f, 0.018771f, 0.013149f, 0.030086f, 0.003353f, 0.034527f, 0.018610f, + -0.000465f, -0.048559f, -0.046046f, 0.056963f, -0.115981f, 0.079999f, -0.047833f, -0.033407f, -0.021031f, 0.007313f, -0.033591f, -0.026116f, 0.036358f, -0.011134f, -0.079348f, 0.027404f, -0.004883f, 0.014076f, -0.017891f, 0.070566f, -0.057579f, 0.002487f, 0.029240f, -0.019941f, 0.022135f, -0.046923f, 0.003823f, -0.040369f, -0.020517f, 0.043989f, 0.005591f, 0.017653f, -0.025023f, 0.042526f, -0.012292f, -0.019783f, 0.016235f, -0.025973f, -0.021719f, -0.013859f, -0.014381f, -0.043822f, -0.058820f, -0.016310f, 0.032541f, 0.000559f, -0.018470f, -0.058620f, 0.002182f, -0.046325f, -0.003173f, 0.018715f, -0.045968f, -0.011254f, 0.033678f, 0.034327f, 0.024792f, -0.056905f, -0.027072f, 0.039284f, 0.012652f, -0.001066f, 0.031664f, -0.186855f, -0.043388f, -0.020813f, -0.085065f, 0.008380f, 0.023152f, -0.004964f, 0.015478f, 0.040084f, -0.023305f, -0.039716f, 0.009906f, -0.036062f, -0.011162f, 0.038900f, 0.061447f, -0.023409f, -0.074761f, -0.044962f, 0.004534f, -0.039762f, 0.005902f, -0.030858f, -0.029447f, 0.007732f, -0.060036f, 0.000674f, -0.037624f, -0.011487f, -0.020813f, 0.008309f, 0.014660f, -0.005980f, + -0.037420f, 0.008114f, -0.002927f, -0.023407f, 0.028417f, -0.001301f, -0.027765f, -0.009474f, -0.007694f, -0.010384f, -0.019465f, 0.010128f, -0.017858f, 0.014012f, 0.018932f, -0.007833f, 0.001583f, -0.011620f, -0.026523f, -0.036649f, 0.005794f, 0.004713f, 0.016162f, -0.042423f, 0.008081f, -0.000330f, -0.028119f, 0.020859f, -0.012161f, 0.014878f, 0.033463f, -0.076936f, 0.014563f, 0.010615f, 0.021267f, -0.012945f, -0.008847f, 0.025149f, -0.002685f, 0.001862f, 0.125758f, -0.015673f, -0.034483f, 0.004988f, -0.013710f, 0.062388f, 0.011981f, -0.005078f, 0.059334f, 0.060088f, 0.019963f, 0.023348f, 0.033150f, -0.073689f, -0.040548f, 0.061401f, -0.008080f, -0.060485f, -0.030386f, -0.027389f, 0.042073f, 0.022493f, -0.021948f, -0.087442f, 0.027528f, 0.013824f, 0.011927f, 0.014450f, -0.010246f, 0.008951f, -0.065341f, 0.058768f, 0.041090f, 0.021703f, -0.032572f, -0.027902f, 0.000203f, 0.029422f, -0.006097f, 0.030586f, 0.013657f, -0.069236f, -0.030466f, 0.010949f, -0.069373f, 0.004132f, 0.013668f, -0.061341f, -0.086067f, -0.012116f, 0.026432f, -0.050255f, -0.104571f, -0.045983f, -0.027109f, 0.068080f, + -0.041006f, 0.076824f, -0.015463f, 0.003574f, 0.033239f, 0.004455f, -0.117179f, -0.007886f, 0.005326f, 0.054873f, -0.104224f, -0.144696f, 0.010918f, -0.009508f, -0.091731f, 0.051947f, 0.024975f, -0.003551f, 0.000180f, 0.085009f, -0.121320f, 0.099862f, 0.021652f, 0.013256f, 0.041073f, -0.043990f, -0.039185f, -0.007757f, 0.019466f, -0.025101f, -0.001242f, 0.051166f, -0.042896f, -0.035046f, 0.046025f, -0.025867f, -0.012148f, 0.018844f, 0.013178f, -0.051100f, 0.026613f, -0.017257f, -0.003923f, 0.017790f, 0.018413f, -0.054453f, -0.008073f, -0.042403f, 0.024368f, 0.032587f, 0.002969f, -0.070028f, 0.050229f, -0.012358f, -0.000274f, 0.029579f, -0.006643f, -0.025724f, -0.003706f, 0.039147f, -0.058578f, 0.040304f, 0.003154f, -0.004860f, 0.015902f, 0.007461f, -0.036228f, 0.016760f, 0.000846f, 0.001271f, -0.047462f, 0.032874f, -0.030684f, 0.036309f, 0.006617f, -0.044965f, 0.004806f, 0.004998f, -0.011558f, 0.020493f, 0.004933f, 0.057323f, 0.021493f, 0.137062f, -0.059580f, -0.062048f, -0.026636f, -0.003759f, 0.130057f, -0.019560f, 0.107450f, -0.077668f, -0.031481f, 0.044796f, -0.084596f, -0.028677f, + -0.079697f, 0.011673f, 0.077981f, -0.110516f, -0.041572f, -0.010552f, 0.031622f, -0.002070f, 0.010621f, 0.029151f, -0.009267f, -0.070434f, -0.065572f, 0.002116f, 0.043646f, 0.120400f, -0.028559f, 0.031871f, -0.036547f, 0.058908f, 0.000432f, 0.005961f, -0.018416f, -0.072756f, 0.000750f, 0.065094f, -0.012993f, -0.004898f, -0.026317f, -0.063573f, 0.080746f, 0.030362f, 0.053317f, 0.072620f, -0.005279f, 0.003339f, 0.044045f, -0.118589f, 0.038975f, -0.060348f, 0.137545f, -0.014098f, 0.012021f, 0.019958f, -0.042309f, -0.041943f, 0.012295f, -0.060141f, 0.086637f, -0.052572f, -0.066812f, -0.066776f, 0.090652f, 0.030421f, 0.051795f, -0.012804f, 0.051732f, 0.053330f, -0.057083f, -0.016866f, -0.053081f, -0.027956f, 0.094494f, 0.067289f, 0.007251f, 0.017785f, -0.147502f, 0.099019f, 0.129396f, 0.014196f, -0.012335f, -0.025801f, -0.079994f, 0.112362f, -0.008360f, 0.006775f, -0.024053f, 0.002399f, -0.051180f, 0.105124f, -0.027097f, 0.050791f, 0.006458f, -0.019271f, -0.007972f, 0.101240f, -0.058235f, 0.049452f, 0.014972f, -0.044196f, 0.004185f, -0.014788f, 0.026340f, 0.007269f, 0.039524f, -0.018067f, + 0.002501f, 0.006960f, -0.002316f, 0.040142f, 0.068319f, -0.022459f, -0.005429f, 0.007204f, 0.036681f, 0.010209f, -0.055824f, -0.037004f, 0.074072f, 0.013997f, 0.035356f, -0.075323f, -0.091443f, 0.081913f, 0.053003f, 0.025018f, -0.008283f, -0.070160f, -0.003427f, 0.062270f, 0.018299f, 0.002719f, -0.006810f, -0.012353f, 0.010708f, 0.008379f, 0.013019f, -0.010341f, 0.006826f, 0.013364f, 0.008729f, -0.005787f, 0.001912f, 0.002554f, 0.012907f, 0.032804f, 0.012263f, -0.103432f, 0.070724f, -0.073582f, 0.008932f, -0.033945f, 0.027313f, -0.002929f, 0.038926f, -0.006346f, -0.033611f, 0.057859f, -0.020302f, -0.008220f, 0.008979f, -0.024454f, -0.021068f, 0.066776f, -0.015701f, -0.009338f, -0.007735f, -0.003596f, 0.030814f, -0.023582f, 0.007357f, -0.017314f, 0.015464f, -0.015152f, -0.011251f, -0.036099f, 0.052654f, -0.032641f, 0.017581f, 0.008191f, 0.036553f, -0.041101f, 0.009339f, -0.016962f, 0.041463f, 0.005154f, 0.003498f, 0.032371f, 0.009956f, -0.054395f, -0.007762f, -0.009574f, 0.015284f, 0.023383f, 0.020066f, -0.049512f, 0.021337f, -0.037493f, 0.026563f, -0.021528f, 0.005880f, -0.012512f, + 0.026250f, -0.010522f, 0.007833f, -0.055411f, 0.013331f, 0.026342f, -0.024886f, 0.024615f, 0.003765f, 0.008788f, 0.015947f, -0.022611f, 0.038405f, 0.014581f, -0.001759f, -0.012415f, 0.018875f, -0.012046f, 0.034909f, -0.029357f, -0.008204f, -0.027976f, 0.036158f, -0.035850f, 0.032896f, -0.029980f, 0.039922f, -0.034089f, 0.021165f, -0.033628f, 0.029514f, -0.002809f, 0.003513f, -0.010127f, 0.002079f, -0.006324f, -0.004578f, -0.010750f, 0.017796f, 0.006181f, -0.001817f, 0.005070f, -0.004688f, -0.009910f, 0.017915f, 0.002053f, 0.007183f, -0.011829f, 0.001321f, 0.016670f, -0.019318f, -0.005524f, 0.012260f, -0.000409f, -0.005285f, -0.013540f, 0.032073f, -0.010630f, -0.015115f, 0.007453f, 0.003551f, -0.005717f, 0.004087f, -0.002557f, 0.003814f, -0.006116f, 0.005278f, -0.010043f, 0.016187f, -0.013567f, 0.018563f, 0.006934f, -0.012484f, 0.003864f, -0.001870f, 0.001126f, -0.000759f, 0.007607f, 0.000866f, -0.006074f, 0.005342f, -0.006560f, -0.042902f, 0.087155f, 0.007417f, 0.011096f, -0.034640f, -0.025477f, -0.055092f, 0.037190f, -0.015352f, -0.011132f, -0.023863f, -0.000798f, -0.021261f, -0.002522f, + -0.002688f, 0.009851f, 0.010996f, -0.001566f, -0.002435f, -0.015570f, 0.014772f, 0.013817f, -0.012894f, 0.006272f, -0.029442f, 0.011916f, 0.005876f, -0.005050f, -0.004468f, -0.009743f, 0.009541f, 0.002200f, -0.020935f, -0.005533f, -0.006055f, -0.017353f, 0.028788f, 0.003131f, -0.018194f, 0.002925f, -0.007060f, 0.025102f, -0.008549f, -0.011558f, 0.004961f, -0.014781f, 0.029272f, 0.000963f, -0.016005f, 0.004739f, -0.006455f, 0.014382f, -0.018273f, -0.003525f, 0.006181f, -0.006561f, 0.012925f, -0.007172f, 0.003825f, 0.005933f, -0.016472f, 0.002444f, 0.016601f, -0.025079f, -0.001540f, 0.007769f, -0.023275f, 0.042735f, -0.038870f, 0.019582f, 0.007166f, -0.022148f, 0.044173f, -0.029854f, 0.007189f, 0.005745f, -0.018517f, 0.014646f, -0.007497f, -0.014255f, 0.014170f, -0.017007f, 0.011259f, -0.007749f, -0.005688f, 0.012784f, -0.010419f, 0.004193f, -0.004155f, -0.000006f, 0.002589f, -0.005640f, 0.002825f, -0.000197f, -0.005503f, 0.012092f, -0.010071f, 0.009042f, 0.000453f, -0.008256f, 0.008312f, -0.014657f, -0.001303f, 0.004010f, -0.002310f, -0.001922f, 0.002209f, -0.007567f, 0.009537f, -0.004661f, + -0.003223f, 0.001113f, 0.001103f, -0.005882f, -0.000781f, -0.003354f, 0.003381f, 0.004833f, -0.006633f, 0.006007f, -0.006326f, -0.001150f, 0.006369f, -0.004561f, 0.020326f, -0.093165f, -0.215099f, 0.056463f, 0.199122f, 0.168365f, 0.225899f, -0.111336f, -0.144306f, -0.216992f, -0.221810f, 0.015291f, 0.165377f, 0.182626f, 0.200018f, 0.066563f, -0.043527f, -0.158641f, -0.262725f, -0.143886f, 0.066830f, 0.103600f, 0.175215f, 0.132881f, 0.036282f, -0.023475f, -0.055354f, -0.131533f, -0.085281f, -0.081068f, -0.014885f, 0.069426f, 0.106296f, 0.056047f, 0.070957f, 0.035989f, -0.040003f, -0.006143f, -0.085528f, -0.118932f, -0.020388f, -0.027658f, 0.020971f, 0.112410f, 0.064688f, 0.055859f, 0.016442f, -0.041947f, -0.043342f, -0.037202f, -0.061676f, -0.016025f, 0.002699f, 0.026570f, 0.032218f, 0.053844f, 0.015276f, -0.001757f, -0.027160f, -0.049874f, -0.004321f, 0.018143f, 0.018436f, 0.031639f, -0.008081f, -0.024970f, -0.012103f, -0.025000f, -0.019783f, 0.005506f, 0.014115f, 0.040498f, 0.034158f, 0.032841f, 0.001837f, -0.017394f, -0.065618f, -0.060797f, -0.024901f, 0.004063f, 0.050587f, 0.054486f, + 0.022349f, 0.023198f, -0.002645f, -0.043652f, -0.026887f, -0.002998f, -0.010343f, 0.002521f, 0.004538f, 0.010706f, 0.008724f, -0.005493f, -0.014384f, 0.008634f, 0.013123f, 0.011008f, 0.011176f, -0.000849f, -0.008327f, -0.004951f, -0.022334f, -0.008977f, -0.012370f, -0.020741f, 0.012283f, 0.030570f, 0.035347f, 0.011927f, 0.012681f, -0.006716f, -0.008400f, -0.031570f, -0.047290f, -0.018007f, 0.005284f, 0.014934f, 0.018210f, 0.038882f, 0.035859f, 0.017635f, -0.014392f, -0.030089f, -0.034277f, -0.031785f, -0.023774f, -0.001415f, 0.028561f, 0.044605f, 0.035083f, 0.010406f, -0.016889f, -0.019931f, -0.020225f, -0.011450f, -0.007812f, -0.008550f, 0.008559f, 0.020526f, 0.014841f, 0.003427f, -0.002790f, -0.001390f, -0.005385f, -0.005769f, -0.008586f, -0.003532f, 0.004727f, 0.004256f, 0.002339f, 0.002940f, 0.002247f, 0.002110f, -0.004439f, -0.005427f, -0.001756f, 0.002491f, 0.001829f, 0.000758f, 0.000756f, 0.000907f, -0.001770f, -0.001317f, -0.000732f, 0.000439f, 0.000475f, 0.001337f, 0.001139f, 0.000854f, -0.000422f, -0.001517f, -0.002711f, -0.000236f, 0.000459f, 0.000239f, 0.000700f, 0.001878f, + 0.000570f, 0.000583f, 0.001526f, 0.000201f, -0.004208f, -0.003277f, -0.001071f, 0.000912f, 0.001799f, 0.002770f, 0.000916f, 0.000322f, -0.000187f, -0.000070f, -0.001111f, -0.000935f, -0.000574f, -0.000282f, -0.000920f, -0.000136f, 0.000082f, 0.000868f, 0.001243f, 0.001462f, 0.000720f, 0.000634f, -0.000499f, -0.001233f, -0.002141f, -0.001412f, -0.000781f, 0.000413f, 0.001553f, 0.002372f, 0.001548f, 0.000318f, -0.000811f, -0.001022f, -0.001568f, -0.001160f, -0.000120f, 0.000657f, 0.000612f, 0.000582f, 0.000172f, 0.000106f, -0.000084f, 0.000004f, -0.000126f, -0.000104f, -0.000146f, 0.000013f, -0.000038f, -0.000061f, -0.000141f, 0.000009f, 0.000076f, 0.000085f, 0.000045f, 0.000069f, -0.000012f, -0.000032f} + }, + { + {-0.010247f, -0.009027f, 0.011393f, -0.002243f, 0.009110f, 0.002711f, 0.013514f, -0.003060f, -0.006886f, -0.004717f, 0.008282f, 0.000304f, -0.002923f, -0.000721f, 0.009355f, -0.002397f, 0.001752f, 0.003336f, -0.006177f, -0.004673f, -0.001971f, 0.001791f, -0.006415f, 0.001725f, 0.001376f, -0.007426f, -0.002382f, -0.004412f, 0.000690f, -0.003202f, 0.001255f, 0.012318f, 0.006328f, -0.003501f, 0.000633f, -0.005734f, 0.004510f, -0.001485f, 0.007281f, -0.014931f, -0.001602f, 0.002400f, -0.005298f, 0.001040f, 0.007318f, 0.005632f, -0.006716f, -0.004918f, -0.005392f, -0.000930f, -0.004267f, -0.002106f, -0.006558f, 0.002597f, -0.000551f, -0.007547f, -0.003922f, -0.002999f, -0.000359f, 0.001653f, -0.001642f, -0.000711f, 0.003302f, 0.001379f, -0.003580f, 0.001968f, 0.008143f, -0.004089f, -0.001061f, -0.008654f, -0.003316f, -0.000598f, 0.003629f, -0.003612f, 0.001063f, 0.001555f, 0.001224f, 0.002901f, -0.006740f, -0.000145f, -0.003797f, 0.003282f, -0.002429f, -0.006428f, -0.001846f, -0.000123f, -0.000108f, -0.002794f, -0.003024f, 0.003250f, -0.001427f, -0.000503f, 0.001175f, 0.001933f, 0.000089f, -0.000345f, + 0.000360f, 0.001183f, 0.000072f, -0.000640f, 0.001444f, 0.000343f, -0.001264f, -0.001072f, 0.001347f, -0.000397f, 0.000485f, -0.000781f, 0.001214f, -0.001042f, -0.000737f, -0.000102f, -0.000253f, 0.000515f, 0.013969f, -0.005309f, 0.004503f, 0.011671f, -0.009580f, -0.010794f, -0.001640f, -0.002741f, -0.000191f, 0.005916f, 0.003268f, -0.014982f, 0.002271f, -0.008621f, -0.011840f, -0.000819f, 0.004259f, 0.004613f, -0.003904f, -0.000558f, -0.001321f, 0.006353f, -0.001391f, 0.005215f, -0.002527f, 0.000556f, 0.001094f, 0.001548f, -0.007523f, 0.003082f, 0.005706f, -0.002761f, 0.007290f, -0.004128f, -0.000866f, -0.009244f, 0.006468f, 0.001595f, -0.002493f, -0.007179f, -0.007128f, -0.003258f, -0.002479f, 0.003518f, -0.000846f, 0.003031f, 0.002980f, -0.006370f, 0.003871f, -0.008540f, 0.002970f, 0.004900f, 0.009306f, 0.008984f, -0.007852f, 0.003814f, -0.000570f, -0.002100f, 0.005416f, -0.004230f, -0.005073f, -0.003802f, 0.004401f, 0.002191f, 0.005758f, -0.005839f, 0.008708f, -0.002886f, -0.000522f, 0.002611f, 0.001378f, 0.005119f, -0.003980f, 0.007309f, 0.009190f, 0.016187f, 0.007450f, 0.005128f, + -0.009662f, -0.001782f, -0.006335f, -0.004552f, 0.005810f, -0.000801f, 0.007197f, 0.002950f, -0.000665f, -0.001481f, -0.001351f, 0.004181f, -0.003274f, 0.003330f, 0.003879f, -0.003153f, 0.001809f, 0.001431f, 0.000331f, 0.002379f, -0.001575f, -0.000460f, -0.003233f, -0.000186f, 0.000175f, 0.001622f, -0.017281f, -0.018590f, 0.002013f, -0.001615f, 0.004303f, 0.004007f, 0.012120f, 0.005427f, 0.005741f, 0.002858f, -0.006066f, 0.002206f, 0.015340f, -0.010408f, -0.001245f, 0.000380f, 0.012299f, 0.007354f, 0.001641f, 0.005397f, -0.001064f, 0.004147f, 0.005626f, 0.012597f, 0.006953f, 0.007032f, 0.003751f, 0.002960f, 0.006109f, 0.002148f, -0.008924f, 0.005338f, 0.007233f, -0.002694f, 0.005240f, 0.006920f, -0.002518f, 0.002115f, 0.008691f, 0.003146f, -0.002179f, 0.003057f, 0.008874f, -0.000548f, -0.000162f, -0.001852f, 0.002391f, 0.008287f, -0.002536f, -0.004813f, 0.002362f, -0.002991f, 0.004370f, 0.005169f, -0.006292f, 0.001251f, -0.004083f, 0.000235f, 0.002501f, 0.006960f, 0.005750f, -0.014921f, -0.000081f, 0.007174f, -0.003824f, -0.006272f, 0.000787f, 0.001046f, 0.007260f, -0.000701f, + -0.015867f, -0.007009f, 0.005084f, -0.004491f, 0.007416f, -0.002164f, 0.000003f, 0.001801f, 0.009314f, 0.005772f, 0.003931f, -0.004905f, 0.007647f, -0.001013f, 0.004673f, 0.002218f, 0.000901f, 0.001515f, 0.001574f, -0.000214f, -0.001254f, 0.000934f, -0.000688f, -0.003933f, -0.001650f, -0.001674f, -0.000508f, -0.000981f, -0.000033f, -0.001256f, -0.002793f, 0.001283f, 0.000570f, -0.001509f, 0.000301f, 0.002514f, 0.001898f, 0.000805f, -0.000381f, -0.000539f, -0.000286f, -0.000240f, 0.002466f, -0.000031f, -0.031155f, 0.004520f, 0.003368f, 0.014727f, -0.000426f, 0.011527f, 0.005989f, 0.003032f, -0.018194f, 0.000152f, -0.000136f, -0.014102f, 0.002425f, 0.010759f, 0.002170f, -0.000084f, -0.001193f, -0.005556f, -0.006357f, 0.003022f, 0.004350f, -0.000387f, 0.002955f, 0.003385f, 0.012935f, 0.001578f, 0.005817f, 0.006078f, -0.006545f, 0.001559f, -0.001421f, -0.001740f, -0.000696f, 0.004815f, -0.000567f, -0.003097f, -0.004960f, -0.002962f, 0.001804f, -0.008995f, -0.006300f, 0.003936f, -0.007073f, 0.002467f, -0.011723f, -0.014139f, -0.003465f, 0.017706f, -0.004487f, -0.000944f, 0.010563f, 0.003577f, + 0.000938f, 0.011210f, -0.001403f, 0.001333f, -0.001237f, 0.003349f, 0.007320f, -0.002709f, -0.010941f, 0.007189f, -0.006304f, -0.012254f, -0.004738f, -0.003369f, 0.000166f, 0.004618f, 0.013542f, 0.000170f, 0.000049f, -0.005151f, -0.000311f, 0.007960f, -0.003542f, -0.004002f, 0.009718f, -0.007978f, -0.000428f, 0.004432f, -0.009553f, -0.001840f, -0.003184f, -0.003229f, 0.001285f, -0.005155f, -0.007153f, 0.000516f, 0.004764f, -0.002059f, -0.002970f, -0.004107f, -0.004004f, -0.000531f, 0.003249f, 0.001425f, -0.000203f, -0.001180f, -0.003063f, 0.000206f, -0.000880f, -0.003953f, -0.005665f, -0.004976f, 0.000154f, -0.000601f, 0.002604f, -0.003866f, 0.000041f, -0.000531f, 0.002125f, -0.000270f, 0.001048f, -0.001138f, 0.000238f, 0.000640f, -0.001761f, 0.027692f, 0.000740f, -0.001867f, -0.010742f, -0.006258f, 0.014535f, -0.006132f, 0.011311f, 0.009700f, -0.011386f, -0.002009f, 0.008443f, -0.006463f, -0.003196f, -0.003119f, -0.004231f, 0.001663f, 0.002929f, 0.000343f, 0.005218f, -0.002633f, 0.000687f, 0.001841f, -0.002409f, -0.005463f, -0.005653f, -0.006404f, 0.000344f, 0.007063f, 0.003010f, -0.006327f, + 0.000427f, 0.002671f, 0.013697f, -0.004291f, 0.012249f, -0.011473f, 0.004970f, 0.008742f, -0.006031f, -0.003789f, -0.011644f, 0.005242f, -0.000246f, -0.008272f, 0.007877f, -0.010211f, 0.011107f, -0.000809f, 0.015775f, 0.003460f, 0.001612f, 0.003649f, 0.006501f, 0.003334f, -0.005256f, 0.007644f, -0.001575f, -0.008574f, -0.013213f, -0.003770f, 0.005447f, -0.006771f, -0.004369f, 0.004906f, -0.007434f, 0.014160f, -0.013927f, -0.000278f, 0.009139f, -0.008105f, -0.003235f, -0.014714f, -0.001185f, -0.005898f, -0.003278f, -0.004573f, 0.012448f, 0.004712f, 0.001183f, 0.000291f, 0.010729f, 0.000843f, -0.001022f, 0.008443f, 0.007047f, 0.006271f, 0.013354f, -0.003104f, 0.001223f, -0.004025f, 0.003711f, 0.004192f, 0.000817f, 0.001055f, -0.002356f, -0.000336f, -0.003299f, -0.001851f, 0.000228f, 0.000967f, 0.002054f, -0.001312f, -0.000552f, 0.004062f, 0.001926f, -0.001875f, 0.008252f, -0.000719f, -0.002155f, -0.003689f, -0.002322f, 0.002783f, -0.002944f, 0.000011f, -0.000429f, -0.003204f, 0.001208f, 0.000608f, -0.000876f, 0.001823f, 0.002118f, -0.002513f, 0.002201f, 0.003678f, 0.013379f, 0.023736f, + -0.007025f, -0.010434f, 0.002664f, -0.004301f, 0.006503f, 0.021600f, 0.000074f, -0.005058f, 0.006819f, 0.003659f, 0.006360f, 0.003821f, -0.011849f, 0.000371f, -0.010579f, 0.005798f, 0.005040f, 0.003031f, 0.019764f, -0.001018f, 0.014724f, -0.000459f, -0.000409f, 0.004425f, -0.000167f, 0.015475f, 0.002015f, 0.009717f, -0.003656f, 0.013188f, -0.006017f, 0.006998f, 0.026235f, -0.004371f, -0.006667f, 0.018446f, 0.003865f, 0.011990f, -0.000326f, -0.011594f, 0.003561f, -0.006722f, 0.007912f, -0.013955f, -0.001881f, -0.007292f, 0.007804f, -0.001258f, 0.001593f, 0.014228f, -0.006974f, -0.014469f, 0.004013f, -0.001325f, -0.000693f, 0.011553f, 0.002238f, 0.001572f, -0.005259f, -0.009550f, -0.010039f, -0.003442f, -0.008288f, -0.006346f, 0.008573f, -0.004408f, -0.000818f, -0.003226f, 0.001010f, -0.000047f, 0.007660f, 0.004698f, -0.008763f, -0.012750f, -0.002952f, 0.000312f, 0.003500f, -0.003545f, -0.003093f, 0.010307f, 0.005949f, 0.005029f, 0.001531f, -0.008569f, -0.003893f, 0.004488f, 0.000225f, -0.002895f, 0.003735f, -0.001266f, 0.002292f, -0.002853f, 0.000258f, -0.001678f, -0.004770f, -0.005805f, + -0.001472f, -0.005148f, 0.001382f, -0.000850f, 0.000546f, 0.003359f, -0.000868f, -0.002808f, 0.004310f, 0.000816f, 0.002773f, 0.001489f, 0.000331f, -0.001684f, 0.002169f, -0.000630f, -0.000414f, -0.000260f, -0.000390f, 0.000081f, -0.000797f, 0.001082f, 0.002779f, -0.003408f, 0.000982f, -0.004000f, 0.000692f, -0.001991f, 0.004980f, 0.032495f, -0.017324f, 0.011291f, 0.000271f, 0.005479f, -0.008069f, -0.006353f, -0.003774f, 0.006935f, 0.008968f, 0.001776f, -0.005197f, -0.009665f, 0.004782f, 0.008867f, -0.001952f, 0.002671f, -0.005020f, 0.009683f, 0.003461f, -0.018667f, -0.006268f, 0.005795f, -0.001271f, -0.008027f, -0.000564f, 0.008259f, -0.006373f, 0.002698f, -0.012227f, 0.006863f, 0.015021f, -0.006458f, 0.015899f, 0.000389f, -0.003132f, 0.010566f, -0.000665f, 0.000671f, 0.009495f, -0.021102f, 0.002940f, 0.006195f, 0.008704f, 0.005869f, 0.006752f, -0.009553f, -0.007500f, -0.000481f, 0.003126f, -0.010332f, 0.003148f, 0.009744f, 0.008664f, 0.003141f, 0.026902f, -0.008693f, -0.003625f, -0.012427f, -0.005489f, -0.008197f, -0.011519f, 0.013831f, 0.005600f, 0.013506f, -0.002368f, -0.021989f, + 0.012482f, -0.007855f, 0.006751f, 0.006122f, 0.002810f, 0.003627f, -0.017497f, 0.020304f, 0.004217f, -0.009616f, -0.016804f, -0.010514f, -0.010624f, 0.001312f, 0.008200f, -0.007846f, 0.000387f, 0.005062f, 0.004180f, -0.000128f, -0.003857f, 0.000714f, -0.000629f, 0.003093f, 0.003170f, 0.003563f, 0.002302f, 0.002311f, 0.000998f, -0.006151f, -0.005680f, 0.000131f, -0.002268f, 0.001839f, 0.002170f, -0.002928f, 0.003631f, -0.001080f, 0.001138f, 0.003113f, 0.001103f, 0.002388f, 0.000448f, -0.006530f, -0.000748f, -0.000212f, 0.001951f, 0.001537f, 0.000465f, -0.001574f, -0.002041f, 0.003338f, -0.001333f, 0.008309f, 0.001131f, 0.003523f, -0.038766f, -0.032573f, -0.029999f, 0.007169f, 0.006636f, 0.002932f, 0.001759f, -0.001784f, -0.001970f, 0.001198f, -0.004787f, -0.010645f, -0.007267f, -0.018923f, -0.008128f, -0.008990f, 0.011939f, -0.014459f, -0.006166f, -0.008022f, 0.002895f, 0.000545f, -0.003444f, 0.004703f, -0.000881f, -0.015032f, 0.000096f, 0.014509f, 0.002237f, -0.013371f, -0.011736f, 0.005680f, -0.004499f, 0.012234f, 0.008758f, -0.012616f, 0.013235f, 0.020601f, -0.016545f, -0.017008f, + -0.008872f, 0.006748f, 0.016506f, -0.011095f, -0.011426f, 0.006450f, -0.006417f, 0.001615f, -0.001097f, -0.001114f, -0.018024f, 0.003886f, 0.011603f, -0.005376f, 0.006829f, -0.008817f, -0.010477f, -0.010474f, -0.004925f, -0.018303f, 0.032397f, -0.006420f, -0.001716f, 0.005937f, 0.003920f, 0.007163f, 0.004798f, 0.010325f, 0.005000f, 0.009010f, 0.020230f, -0.025178f, 0.018316f, -0.005739f, -0.004400f, -0.000526f, -0.028038f, -0.000954f, 0.009178f, 0.001140f, 0.001584f, 0.008310f, 0.003377f, -0.000358f, 0.005203f, -0.009286f, 0.011622f, -0.003686f, -0.006022f, 0.006400f, -0.003476f, -0.003218f, 0.001618f, 0.005287f, -0.003334f, -0.005704f, 0.002540f, 0.005140f, 0.000674f, -0.001712f, -0.004784f, -0.002556f, 0.001219f, -0.007113f, -0.004486f, -0.002260f, 0.004054f, -0.001346f, 0.000769f, 0.004271f, 0.000572f, -0.007086f, -0.001183f, -0.005984f, -0.005113f, -0.004965f, -0.002760f, -0.005521f, 0.005483f, -0.001413f, 0.000850f, 0.010986f, -0.001596f, -0.002907f, -0.002349f, 0.006098f, 0.001980f, -0.001642f, -0.001588f, -0.038496f, 0.029529f, 0.007827f, 0.006452f, -0.007126f, 0.028910f, -0.004548f, + 0.013636f, -0.000045f, 0.012274f, -0.017202f, 0.006837f, 0.006734f, 0.002666f, -0.008474f, 0.025754f, -0.006990f, 0.007880f, 0.005895f, 0.026734f, -0.018034f, -0.001123f, 0.007396f, -0.004589f, -0.013246f, 0.008030f, -0.012465f, 0.003274f, 0.003364f, -0.014533f, 0.005607f, 0.001262f, 0.000687f, 0.029425f, 0.018304f, -0.002385f, -0.012066f, -0.009311f, 0.006494f, -0.001482f, -0.017665f, 0.005080f, -0.001613f, 0.005273f, 0.013188f, 0.019617f, -0.013481f, 0.013373f, 0.006572f, -0.008704f, 0.006266f, 0.005210f, -0.013952f, -0.007398f, -0.008782f, 0.014088f, -0.015205f, -0.012725f, -0.034735f, -0.025267f, 0.006936f, -0.004649f, -0.005087f, -0.013221f, -0.026985f, 0.010436f, 0.001958f, -0.000664f, 0.013050f, 0.011347f, 0.015715f, 0.009540f, 0.003707f, -0.000312f, 0.002405f, 0.018044f, -0.013354f, 0.024660f, -0.009148f, -0.006791f, -0.022529f, 0.003733f, -0.004256f, -0.011246f, -0.002171f, 0.002900f, -0.005785f, 0.006701f, -0.002864f, 0.000468f, -0.002916f, -0.000701f, -0.002532f, -0.000347f, 0.003875f, 0.006620f, 0.000340f, 0.005506f, -0.006152f, -0.004034f, -0.003212f, 0.002426f, 0.004419f, + -0.005864f, -0.002485f, -0.002609f, 0.000694f, -0.003162f, 0.002538f, -0.000373f, 0.002177f, 0.004299f, -0.000150f, -0.006236f, 0.008960f, 0.009079f, 0.003449f, 0.000327f, -0.004195f, 0.000024f, -0.002302f, -0.000678f, -0.000515f, 0.010036f, -0.046895f, 0.042711f, 0.030582f, -0.012967f, -0.011003f, 0.011278f, -0.000247f, 0.000709f, 0.020199f, 0.014196f, 0.000246f, -0.003375f, 0.007924f, -0.005125f, -0.003326f, 0.005453f, -0.009564f, 0.011223f, 0.007578f, -0.009961f, 0.012121f, -0.001685f, 0.003012f, -0.001250f, -0.020865f, -0.001485f, 0.014581f, 0.015137f, 0.005723f, 0.006291f, 0.007948f, -0.009895f, -0.012440f, 0.004883f, 0.008950f, -0.000725f, -0.005018f, -0.010876f, 0.004030f, -0.003427f, 0.012836f, 0.015190f, -0.002084f, 0.017563f, -0.009660f, 0.019611f, 0.010458f, 0.023706f, 0.001387f, 0.003179f, -0.007269f, -0.010153f, -0.002210f, 0.018119f, 0.029780f, 0.001497f, 0.022616f, -0.010229f, -0.022376f, 0.002621f, 0.007972f, -0.019584f, 0.019726f, -0.006961f, 0.006750f, -0.042749f, -0.018592f, -0.000596f, -0.010539f, 0.007896f, 0.013687f, 0.029150f, 0.005798f, -0.000095f, -0.014775f, + -0.025922f, 0.006269f, 0.000791f, -0.021831f, 0.008500f, 0.004313f, -0.015821f, -0.004746f, 0.003401f, 0.016646f, 0.000080f, 0.004796f, 0.004895f, 0.008514f, 0.006966f, -0.014713f, 0.004818f, -0.000594f, -0.003158f, -0.000024f, -0.001007f, -0.002645f, 0.005817f, 0.005445f, -0.006289f, -0.002808f, -0.000379f, 0.003791f, -0.002590f, 0.005552f, 0.000587f, 0.003952f, 0.003538f, -0.005022f, 0.003240f, 0.003963f, 0.010795f, 0.000669f, 0.006045f, 0.006597f, 0.001427f, 0.007803f, 0.002672f, 0.003860f, 0.001590f, 0.000687f, 0.002669f, 0.009225f, -0.004368f, -0.009158f, 0.001874f, 0.010701f, -0.018852f, 0.030304f, -0.014095f, 0.002982f, 0.022445f, 0.023280f, -0.002551f, -0.014550f, -0.008185f, -0.008062f, 0.000997f, -0.018583f, -0.014947f, 0.014217f, 0.002964f, 0.008882f, 0.010916f, 0.013119f, -0.006992f, 0.008260f, -0.004200f, 0.010036f, 0.043984f, 0.009837f, -0.022408f, 0.020262f, 0.023265f, 0.000343f, -0.004797f, 0.000571f, -0.012743f, -0.017122f, -0.009429f, 0.023865f, 0.015657f, 0.012909f, 0.020046f, 0.003546f, -0.004447f, -0.010288f, -0.027385f, 0.011615f, 0.013136f, 0.007092f, + -0.005069f, -0.003959f, -0.010022f, 0.003020f, 0.020724f, 0.014217f, -0.025630f, 0.015685f, -0.021752f, 0.021339f, 0.003803f, 0.007579f, 0.008937f, -0.004335f, -0.012699f, -0.004239f, 0.007946f, 0.037415f, -0.006977f, 0.018369f, -0.009378f, -0.017853f, 0.019281f, 0.017556f, 0.003681f, 0.003528f, 0.017385f, 0.005780f, 0.000130f, -0.002717f, -0.012609f, -0.004218f, -0.018059f, 0.004870f, -0.014243f, -0.007262f, 0.025997f, -0.002042f, -0.000253f, -0.000076f, 0.011449f, -0.004674f, 0.002711f, 0.007630f, 0.011521f, 0.012944f, 0.010278f, 0.003827f, 0.004909f, 0.005598f, 0.010316f, -0.002349f, -0.010107f, 0.012240f, 0.004044f, 0.006488f, 0.006729f, -0.000254f, -0.001978f, 0.000223f, -0.006741f, 0.002948f, 0.011074f, 0.000794f, 0.000457f, -0.003131f, -0.005636f, 0.009597f, 0.009806f, 0.001559f, 0.018241f, -0.002966f, 0.007212f, 0.014277f, -0.000216f, 0.003566f, -0.003325f, -0.006229f, 0.000337f, 0.002677f, 0.004165f, 0.010141f, 0.003439f, 0.007465f, 0.001738f, 0.001384f, 0.009871f, -0.002325f, 0.000875f, 0.007944f, 0.001320f, 0.002074f, 0.000427f, 0.003411f, 0.000011f, 0.004863f, + -0.001109f, 0.003494f, 0.000432f, 0.015716f, -0.008128f, 0.015983f, 0.020428f, -0.023700f, 0.015739f, 0.009092f, -0.005859f, 0.001377f, 0.010767f, -0.009958f, -0.021011f, 0.031226f, 0.006587f, 0.005924f, 0.005663f, 0.018519f, 0.005220f, -0.018755f, 0.019775f, -0.026864f, -0.031540f, 0.002746f, 0.003550f, -0.017331f, -0.005898f, -0.051263f, -0.036516f, -0.027337f, -0.009475f, -0.028116f, -0.014093f, 0.010663f, -0.025529f, 0.017743f, 0.016044f, -0.020565f, 0.026300f, 0.014204f, -0.005483f, -0.002640f, -0.014045f, 0.000639f, -0.024859f, 0.053946f, 0.015451f, 0.008458f, -0.027217f, 0.006620f, -0.008631f, 0.035816f, -0.007523f, -0.000847f, -0.032961f, 0.032014f, 0.001784f, 0.012604f, 0.010000f, 0.018728f, 0.010183f, -0.007108f, 0.010295f, -0.015767f, 0.015748f, -0.005696f, 0.009114f, -0.025298f, 0.057226f, 0.008949f, -0.027133f, 0.014668f, 0.016409f, 0.013332f, 0.019182f, 0.016925f, -0.026392f, 0.020889f, -0.000965f, 0.016893f, -0.013591f, 0.005176f, -0.033864f, 0.014274f, 0.014077f, 0.004463f, -0.008504f, -0.025011f, -0.002134f, 0.017550f, -0.022929f, -0.002791f, -0.003166f, 0.000174f, + 0.006331f, 0.005497f, -0.005590f, 0.010022f, -0.001113f, -0.004446f, 0.007122f, 0.006236f, -0.007587f, -0.005319f, -0.015228f, -0.000563f, -0.014219f, 0.008553f, 0.001682f, 0.001750f, 0.010102f, 0.016921f, 0.009849f, 0.008186f, 0.004613f, -0.005453f, -0.002952f, 0.000611f, -0.011304f, -0.008333f, -0.003121f, -0.003087f, 0.005062f, 0.013910f, 0.003532f, 0.008997f, -0.002649f, 0.000361f, 0.003519f, 0.000134f, 0.002871f, 0.010729f, -0.041771f, 0.011577f, -0.005815f, -0.004165f, 0.024627f, -0.004661f, -0.004321f, 0.002288f, 0.022040f, -0.005880f, 0.012813f, -0.010928f, -0.012848f, -0.016409f, -0.020756f, 0.035768f, 0.018613f, 0.012903f, -0.011367f, -0.032982f, -0.040422f, 0.019299f, 0.013287f, -0.014429f, 0.009521f, -0.009844f, 0.000873f, 0.035592f, 0.015513f, -0.010241f, 0.019178f, -0.006620f, 0.009913f, -0.012014f, 0.012007f, -0.026491f, -0.038846f, -0.015182f, -0.017371f, -0.003058f, 0.045290f, -0.037048f, 0.021280f, 0.012153f, 0.009199f, -0.008279f, 0.017786f, 0.007856f, -0.035527f, -0.045219f, -0.016119f, -0.020688f, 0.051003f, 0.036904f, -0.012434f, -0.022893f, -0.001961f, -0.023490f, + -0.004999f, 0.037057f, 0.034370f, 0.019415f, -0.030428f, 0.006443f, -0.023780f, 0.037152f, 0.017645f, -0.004057f, 0.000076f, 0.012431f, -0.022069f, 0.004834f, 0.032830f, 0.017745f, -0.029793f, 0.032200f, -0.016540f, 0.019197f, 0.051262f, 0.019473f, -0.012124f, -0.015308f, 0.043869f, 0.004729f, -0.002714f, -0.020060f, 0.007701f, -0.009516f, 0.002792f, -0.005984f, -0.001066f, -0.001414f, -0.021898f, 0.002648f, -0.002748f, -0.006347f, 0.009596f, -0.001809f, -0.007756f, 0.001283f, -0.004615f, 0.001105f, -0.005721f, -0.008631f, 0.007571f, -0.009556f, -0.006047f, 0.004363f, 0.011416f, -0.000681f, 0.008066f, 0.006538f, -0.001512f, -0.000146f, -0.010985f, 0.001397f, 0.003740f, -0.009426f, 0.012514f, 0.006055f, -0.007594f, -0.005224f, -0.005288f, -0.002480f, -0.012239f, 0.007155f, 0.011689f, 0.000428f, -0.009088f, -0.005415f, 0.006111f, -0.002757f, 0.005887f, 0.008107f, 0.000679f, 0.002927f, 0.000115f, -0.000029f, -0.033663f, -0.013525f, 0.054882f, 0.025110f, 0.031391f, 0.007238f, -0.046617f, 0.013678f, -0.037926f, 0.024022f, 0.068735f, 0.024078f, 0.042920f, -0.020128f, 0.012001f, 0.019640f, + -0.002637f, 0.004656f, -0.018327f, 0.003976f, 0.026696f, 0.000885f, -0.007815f, -0.025154f, 0.012993f, 0.009609f, -0.025616f, 0.012525f, -0.010069f, 0.018632f, 0.026839f, 0.028566f, 0.034532f, 0.002974f, -0.027755f, 0.006813f, 0.016027f, -0.000853f, 0.047215f, 0.003658f, -0.055451f, -0.034995f, 0.015073f, -0.014515f, -0.065344f, 0.001807f, 0.027069f, 0.009649f, 0.002347f, -0.006440f, 0.033580f, -0.027361f, -0.033800f, -0.006967f, -0.012457f, -0.032910f, -0.002350f, 0.001823f, -0.019406f, -0.028413f, -0.017624f, 0.000828f, 0.003477f, -0.040802f, 0.011463f, -0.017330f, 0.009228f, 0.045927f, -0.006909f, -0.016701f, 0.031821f, -0.006177f, 0.026398f, -0.026082f, 0.016845f, 0.000596f, -0.030125f, -0.033545f, 0.058990f, 0.005254f, 0.007472f, 0.002280f, -0.000513f, 0.059173f, 0.048215f, 0.014878f, -0.005072f, 0.022873f, -0.012053f, 0.007450f, 0.013375f, -0.003123f, 0.017760f, 0.007349f, 0.004757f, -0.027746f, 0.015598f, 0.008147f, -0.002121f, 0.001933f, -0.009808f, 0.007297f, 0.020474f, -0.004026f, -0.007445f, -0.012234f, -0.013371f, 0.012139f, 0.014343f, 0.000274f, -0.000548f, -0.012061f, + -0.012989f, 0.001677f, -0.018389f, 0.001991f, -0.006536f, 0.018095f, 0.006009f, 0.000271f, -0.012378f, -0.021081f, -0.005312f, -0.010504f, -0.014480f, 0.007452f, 0.007637f, 0.015444f, 0.005668f, 0.001823f, 0.017557f, -0.002688f, 0.047166f, 0.006370f, -0.063920f, -0.028771f, 0.040135f, -0.057159f, 0.032935f, -0.054084f, 0.004723f, -0.008421f, -0.078294f, -0.010104f, 0.035697f, 0.072593f, 0.023362f, -0.010267f, 0.017888f, -0.027510f, -0.008975f, -0.062879f, -0.003178f, -0.042639f, -0.005836f, -0.009165f, -0.029284f, -0.031220f, -0.010094f, 0.018277f, -0.028122f, 0.019826f, 0.036487f, -0.037039f, 0.013862f, 0.012218f, 0.006759f, -0.039443f, -0.005682f, -0.000230f, -0.041140f, 0.011000f, 0.053256f, -0.003847f, -0.076385f, 0.027351f, -0.045981f, -0.118215f, 0.033774f, -0.048805f, -0.060480f, 0.003386f, -0.027476f, 0.008587f, 0.021332f, -0.011535f, 0.031581f, -0.025931f, 0.027642f, -0.021382f, -0.052557f, 0.000420f, 0.038329f, 0.036444f, -0.068410f, 0.010223f, -0.007801f, -0.051157f, -0.013270f, -0.012617f, 0.089612f, 0.044592f, 0.052754f, 0.023897f, 0.023200f, 0.055242f, 0.079732f, -0.018049f, + -0.037101f, -0.040946f, 0.007660f, -0.050890f, -0.015200f, 0.026386f, 0.043299f, 0.006033f, 0.004367f, 0.037191f, -0.008127f, -0.021106f, -0.028219f, 0.022391f, 0.025904f, 0.024942f, 0.006326f, 0.028606f, 0.012379f, -0.017609f, -0.003396f, -0.017068f, 0.026632f, 0.004154f, -0.002540f, -0.029374f, 0.009408f, 0.023390f, 0.003102f, 0.000344f, 0.023470f, -0.018423f, -0.011714f, 0.012573f, 0.001834f, -0.009377f, -0.017092f, -0.005782f, 0.027545f, -0.001468f, -0.059214f, -0.005728f, -0.000918f, -0.013884f, -0.011088f, -0.015992f, -0.009105f, 0.012809f, 0.012234f, 0.006703f, 0.004721f, -0.010074f, -0.001170f, -0.012379f, 0.103806f, 0.112206f, -0.065831f, -0.026084f, 0.050126f, -0.022722f, 0.020246f, -0.031260f, 0.009395f, -0.032124f, -0.060101f, 0.081942f, 0.012005f, 0.025715f, 0.021138f, 0.007645f, 0.010830f, 0.002426f, 0.016677f, 0.020321f, -0.058132f, -0.048037f, -0.041963f, -0.039749f, -0.029653f, -0.018805f, -0.015448f, -0.031280f, -0.017592f, -0.026529f, 0.030165f, 0.022776f, 0.011658f, -0.014673f, 0.006208f, -0.061693f, -0.030843f, 0.016636f, -0.055866f, -0.005300f, 0.027349f, 0.048184f, + 0.007191f, 0.009219f, -0.020561f, -0.036298f, -0.042517f, 0.034082f, -0.004519f, 0.033730f, -0.119410f, 0.007280f, -0.013778f, 0.013564f, 0.073207f, 0.008768f, 0.012321f, 0.008026f, -0.021284f, -0.024851f, 0.000797f, -0.005104f, -0.066979f, 0.014143f, -0.024485f, 0.059926f, 0.004143f, -0.066232f, -0.089645f, -0.056077f, -0.011206f, -0.063356f, -0.061609f, -0.038632f, 0.043669f, -0.011621f, -0.042391f, -0.057689f, 0.048037f, -0.006538f, 0.028475f, -0.032647f, 0.017519f, 0.046829f, -0.031251f, -0.045917f, -0.018989f, -0.023935f, 0.049521f, 0.009947f, -0.021554f, 0.018982f, 0.014603f, 0.042488f, 0.026788f, 0.011988f, -0.038081f, -0.038606f, -0.008272f, 0.003889f, -0.009902f, 0.006289f, 0.026566f, -0.006411f, -0.002146f, -0.019971f, -0.014088f, -0.011212f, -0.020039f, -0.004490f, 0.008318f, 0.011427f, 0.062491f, 0.003418f, -0.015613f, -0.005748f, 0.008388f, 0.018705f, -0.001108f, 0.030056f, 0.012969f, 0.070468f, 0.011052f, -0.001465f, 0.002591f, 0.012088f, 0.003501f, -0.003358f, -0.020419f, -0.031353f, 0.116230f, -0.068400f, 0.043722f, 0.082198f, -0.040356f, 0.011166f, 0.065527f, -0.084293f, + 0.002728f, 0.008875f, 0.040142f, -0.094453f, 0.004608f, 0.005838f, 0.030275f, -0.041484f, -0.000101f, 0.016357f, -0.055887f, 0.007757f, -0.004829f, -0.010790f, 0.029791f, -0.009597f, -0.008980f, 0.012409f, -0.007891f, -0.009847f, 0.029194f, -0.028328f, 0.007573f, -0.011927f, 0.006965f, -0.018298f, -0.010568f, -0.022217f, -0.000358f, 0.003820f, 0.057726f, 0.019002f, 0.027702f, -0.006316f, -0.000019f, 0.042880f, -0.002518f, -0.016777f, 0.023585f, 0.017495f, -0.020206f, -0.057059f, 0.051231f, -0.056866f, 0.008538f, 0.026732f, 0.034894f, -0.055960f, 0.058665f, 0.095060f, -0.052895f, -0.097354f, 0.129086f, 0.045529f, -0.064843f, 0.029298f, -0.062456f, -0.076969f, -0.038952f, -0.014348f, -0.080802f, 0.064473f, -0.112350f, 0.033190f, 0.052494f, -0.044617f, -0.149957f, 0.140792f, -0.025329f, -0.036690f, 0.093240f, -0.094037f, 0.047636f, 0.079955f, -0.024878f, -0.022314f, 0.024100f, 0.027274f, -0.015895f, 0.009651f, 0.007388f, 0.025158f, -0.013408f, -0.009534f, 0.027611f, -0.000347f, 0.005504f, -0.003293f, 0.004458f, 0.022505f, 0.015949f, -0.003363f, -0.021254f, 0.033114f, 0.035172f, -0.007097f, + -0.031979f, -0.003558f, 0.014345f, 0.003053f, 0.021272f, -0.000148f, 0.018477f, 0.007997f, 0.027544f, 0.020857f, 0.022964f, -0.035864f, 0.008127f, -0.000935f, 0.000403f, -0.000105f, -0.022801f, -0.038712f, 0.055223f, -0.009328f, -0.053162f, 0.018693f, 0.011508f, 0.005211f, -0.009722f, -0.036190f, -0.028081f, 0.065155f, -0.042608f, -0.034034f, -0.068144f, -0.031270f, 0.040858f, 0.031738f, -0.018014f, -0.022551f, 0.021871f, 0.054067f, -0.022921f, 0.040833f, 0.048892f, -0.034345f, -0.004728f, 0.029909f, -0.007466f, -0.000001f, -0.009596f, 0.002739f, -0.049474f, 0.013756f, -0.010789f, 0.001811f, 0.012213f, -0.009876f, 0.010497f, -0.020510f, -0.041393f, -0.019588f, -0.072249f, 0.009181f, 0.000090f, -0.010708f, 0.013698f, 0.007014f, -0.004472f, -0.016422f, 0.029398f, 0.046146f, -0.048131f, 0.070849f, -0.007716f, 0.009540f, 0.010518f, 0.062633f, 0.028968f, 0.045853f, -0.057161f, -0.014157f, -0.010499f, 0.081610f, -0.075805f, -0.025912f, 0.037473f, -0.002665f, -0.087575f, 0.006026f, -0.017840f, -0.014954f, 0.040399f, 0.044030f, 0.003378f, -0.032929f, 0.071285f, -0.029845f, 0.118686f, 0.001624f, + -0.054631f, -0.000017f, -0.009237f, -0.062100f, 0.119248f, 0.023955f, -0.017434f, -0.140765f, -0.070060f, 0.039718f, -0.051522f, -0.046611f, 0.055457f, -0.206372f, 0.005522f, 0.040716f, 0.030185f, -0.016661f, 0.058372f, -0.035485f, -0.004284f, 0.000305f, 0.030561f, -0.008559f, 0.006505f, 0.041166f, -0.002543f, -0.010347f, -0.012690f, -0.014775f, -0.000323f, 0.004636f, -0.002410f, -0.006209f, 0.026912f, -0.037203f, -0.008017f, 0.004442f, 0.006543f, -0.022285f, -0.037383f, -0.009589f, -0.011245f, -0.005392f, -0.002810f, 0.007306f, -0.041508f, 0.003216f, 0.032068f, -0.019775f, 0.024598f, 0.018598f, -0.017906f, 0.001130f, -0.013022f, 0.005273f, 0.009252f, -0.019519f, 0.055140f, -0.026632f, -0.024237f, -0.031753f, -0.028803f, -0.014385f, 0.025889f, 0.035353f, 0.021324f, 0.088799f, -0.017828f, 0.019662f, -0.009178f, -0.046719f, 0.022494f, -0.029984f, -0.017199f, 0.017859f, 0.039461f, -0.042863f, 0.045559f, 0.004743f, -0.002978f, 0.093640f, -0.019787f, -0.011025f, 0.069949f, -0.045698f, 0.061711f, 0.026369f, -0.015454f, 0.024334f, 0.025600f, 0.057657f, 0.059827f, 0.017045f, -0.049815f, 0.102282f, + -0.103836f, 0.002949f, 0.093158f, -0.051043f, 0.020082f, -0.011660f, -0.012873f, -0.109250f, 0.073123f, 0.019023f, 0.032057f, 0.034126f, -0.023319f, -0.054627f, -0.041435f, -0.033479f, 0.004409f, 0.102830f, -0.000050f, 0.080555f, -0.027717f, -0.062850f, 0.002666f, 0.022831f, -0.052000f, 0.082693f, 0.033048f, 0.040404f, 0.081342f, 0.052726f, -0.088671f, 0.033073f, -0.126850f, -0.156159f, 0.002449f, 0.130692f, 0.081411f, 0.010180f, -0.093595f, -0.331777f, -0.061764f, 0.102047f, 0.116234f, 0.165526f, -0.009290f, -0.210834f, -0.119566f, -0.110016f, 0.167369f, 0.128215f, -0.024104f, -0.084469f, -0.050098f, -0.102632f, -0.013957f, 0.131384f, -0.013698f, 0.030465f, 0.021079f, -0.021950f, -0.048660f, 0.071466f, -0.030081f, 0.039731f, 0.028415f, -0.003042f, -0.067644f, 0.091129f, -0.037033f, -0.017563f, 0.025489f, 0.023438f, -0.050488f, 0.000549f, -0.016520f, -0.018937f, 0.005284f, -0.002032f, 0.035582f, -0.065633f, 0.033610f, -0.078929f, -0.013497f, -0.013335f, 0.092501f, 0.002589f, 0.024309f, -0.057292f, 0.028764f, -0.021638f, 0.040241f, 0.049317f, -0.025049f, -0.056934f, 0.019328f, 0.014607f, + 0.046725f, 0.039417f, -0.010629f, -0.015546f, -0.008046f, 0.032408f, 0.005087f, 0.032660f, 0.013574f, -0.081110f, 0.068363f, -0.050960f, -0.008691f, -0.032964f, 0.031863f, -0.037050f, -0.001421f, -0.003812f, -0.009912f, 0.007711f, 0.035111f, -0.036824f, 0.016420f, 0.002969f, -0.008356f, 0.000580f, 0.024833f, -0.031138f, -0.008331f, -0.004522f, 0.051380f, -0.051775f, 0.013960f, -0.022675f, 0.034132f, -0.037804f, -0.010530f, 0.012992f, -0.007088f, 0.007194f, -0.024228f, -0.004324f, 0.022385f, -0.006725f, 0.008810f, 0.007012f, 0.004898f, 0.027669f, -0.025374f, 0.017348f, 0.020246f, 0.024686f, -0.003183f, -0.057374f, 0.007640f, 0.006778f, 0.023656f, 0.021292f, -0.003871f, 0.005674f, -0.009351f, -0.026123f, -0.004124f, 0.011895f, -0.004594f, 0.034766f, -0.028029f, -0.009456f, -0.056247f, 0.016820f, 0.006454f, -0.009007f, 0.012987f, 0.010950f, -0.000465f, -0.029322f, 0.009464f, 0.028450f, -0.005198f, -0.004276f, 0.011592f, -0.011644f, 0.021700f, -0.013283f, 0.004002f, -0.026966f, 0.013084f, 0.004930f, -0.003873f, -0.007494f, 0.015939f, -0.007594f, -0.010863f, -0.016347f, 0.017319f, -0.000856f, + -0.008067f, -0.003800f, 0.017253f, -0.006843f, 0.007872f, -0.009521f, -0.005180f, -0.001080f, 0.001052f, -0.000385f, -0.008801f, 0.000796f, 0.000751f, -0.008023f, 0.008441f, -0.007634f, 0.022470f, 0.003247f, 0.003438f, -0.030700f, 0.009097f, -0.000873f, -0.011635f, 0.013522f, 0.026331f, -0.018989f, -0.003675f, -0.001006f, -0.012909f, 0.020152f, -0.002838f, 0.002607f, -0.012914f, 0.006730f, -0.002294f, 0.002173f, -0.008010f, 0.007850f, -0.007987f, -0.046315f, 0.112296f, 0.030612f, 0.027750f, -0.014850f, -0.035945f, -0.034586f, 0.009824f, 0.021803f, 0.003446f, -0.001281f, -0.000114f, -0.016405f, -0.002978f, 0.007885f, -0.004341f, 0.003395f, -0.001748f, -0.016435f, -0.000847f, 0.008139f, 0.012836f, -0.011440f, 0.003160f, 0.008216f, -0.016368f, 0.026879f, -0.016310f, -0.014244f, -0.014136f, 0.003671f, 0.007874f, 0.012469f, -0.013598f, 0.017397f, -0.025056f, 0.016609f, 0.014833f, -0.011045f, -0.001123f, -0.000805f, -0.002864f, 0.012942f, -0.013924f, 0.004058f, -0.004437f, -0.018048f, 0.025582f, -0.014291f, -0.000461f, -0.010591f, -0.003285f, 0.017808f, -0.023237f, 0.009457f, 0.006475f, -0.010174f, + 0.008573f, -0.019861f, 0.005786f, 0.008242f, -0.014716f, 0.000339f, 0.007951f, -0.013654f, 0.013722f, -0.018843f, 0.005256f, 0.019274f, -0.028207f, 0.008107f, -0.010758f, 0.001929f, 0.011126f, -0.008453f, -0.004287f, 0.001975f, 0.002451f, -0.001709f, 0.007964f, -0.006053f, -0.005169f, 0.003848f, -0.004618f, 0.002515f, -0.001758f, 0.003313f, 0.003164f, -0.004583f, 0.002320f, -0.000888f, 0.004137f, -0.003787f, -0.001026f, 0.002744f, 0.000122f, -0.002200f, -0.006532f, 0.004132f, 0.004385f, -0.001006f, -0.004507f, 0.004305f, -0.000193f, -0.002063f, 0.004488f, -0.009374f, -0.001871f, 0.005262f, -0.006714f, 0.009781f, -0.005985f, 0.000434f, 0.016299f, -0.004759f, 0.011749f, -0.006691f, -0.000624f, 0.012912f, -0.009044f, -0.003445f, 0.016848f, -0.086763f, -0.203585f, 0.057642f, 0.199321f, 0.137083f, 0.216741f, -0.120648f, -0.128423f, -0.175122f, -0.202719f, 0.004368f, 0.156435f, 0.161620f, 0.168737f, 0.033138f, -0.055740f, -0.110621f, -0.158778f, -0.134574f, 0.010499f, 0.104567f, 0.124031f, 0.111601f, 0.026714f, -0.030820f, -0.019244f, -0.087116f, -0.097442f, -0.041099f, -0.002642f, 0.037502f, + 0.082192f, 0.040157f, 0.029821f, 0.041176f, -0.020542f, -0.048864f, -0.007992f, -0.078129f, -0.036647f, 0.000874f, 0.012414f, 0.059569f, 0.069356f, 0.006167f, -0.010498f, -0.006502f, -0.051166f, -0.013853f, -0.000710f, -0.010636f, 0.017723f, 0.034278f, -0.007301f, -0.002707f, -0.013444f, -0.021386f, 0.004394f, 0.002124f, -0.002331f, 0.038675f, 0.026180f, 0.009680f, -0.000981f, -0.036456f, -0.052718f, -0.041685f, 0.003014f, 0.039246f, 0.033690f, 0.044215f, 0.006017f, 0.001156f, 0.010058f, -0.054861f, -0.031226f, -0.025795f, -0.004688f, 0.042105f, 0.009524f, 0.014129f, 0.039280f, -0.022664f, -0.032974f, -0.007673f, -0.005627f, 0.012180f, 0.014163f, 0.004432f, 0.007909f, 0.003465f, -0.020240f, -0.020974f, -0.005112f, -0.000004f, 0.015089f, 0.021832f, 0.007168f, -0.003082f, -0.004735f, -0.006210f, 0.005475f, -0.006124f, -0.025737f, -0.004039f, 0.006076f, 0.011932f, 0.025640f, 0.006245f, -0.005308f, -0.012316f, -0.021070f, -0.004609f, 0.002133f, 0.006873f, 0.012066f, 0.015065f, 0.011874f, -0.006080f, -0.018255f, -0.019249f, -0.016790f, -0.001924f, 0.008370f, 0.009260f, 0.024772f, 0.025426f, + 0.012403f, -0.005488f, -0.031250f, -0.033061f, -0.015317f, -0.011587f, 0.011690f, 0.030864f, 0.022879f, 0.009890f, 0.000135f, -0.002457f, -0.004019f, -0.009442f, -0.015520f, -0.014931f, -0.006369f, 0.002190f, 0.006470f, 0.010351f, 0.015042f, 0.014342f, 0.005500f, -0.005569f, -0.012064f, -0.013063f, -0.009696f, -0.003674f, 0.001990f, 0.004618f, 0.004563f, 0.005541f, 0.006380f, 0.004904f, 0.000138f, -0.003747f, -0.006477f, -0.005286f, -0.001929f, 0.001114f, 0.002570f, 0.000444f, -0.000286f, 0.000454f, 0.000666f, 0.001907f, 0.002026f, -0.000068f, -0.002136f, -0.000890f, 0.001664f, 0.000426f, -0.001911f, -0.001569f, -0.000259f, -0.001295f, -0.002131f, -0.000341f, 0.003857f, 0.005222f, 0.001622f, -0.001284f, -0.001952f, -0.001390f, -0.000883f, -0.001504f, -0.002097f, -0.000826f, 0.001474f, 0.002369f, 0.001335f, 0.001086f, 0.001304f, 0.000246f, -0.000836f, -0.001765f, -0.001801f, -0.001266f, -0.000422f, 0.000868f, 0.001458f, 0.001067f, 0.000868f, 0.000435f, -0.000235f, -0.000882f, -0.001221f, -0.000930f, 0.000030f, 0.000634f, 0.000707f, 0.000523f, 0.000157f, -0.000332f, -0.000734f, -0.000520f, + 0.000079f, 0.000364f, 0.000390f, 0.000377f, 0.000165f, -0.000192f, -0.000340f, -0.000213f, -0.000100f, -0.000026f, 0.000056f, 0.000077f, 0.000054f, 0.000025f, -0.000010f, -0.000039f}, + {-0.008210f, -0.005458f, 0.002284f, -0.002113f, -0.002598f, -0.004007f, 0.000965f, 0.007921f, -0.002555f, 0.000017f, 0.000804f, 0.013573f, -0.000274f, 0.002586f, -0.005594f, -0.003900f, -0.001393f, -0.003675f, -0.003934f, -0.003707f, -0.002510f, -0.003524f, -0.004632f, 0.003875f, 0.006456f, -0.003568f, 0.000982f, 0.000243f, -0.007330f, 0.000187f, -0.000163f, -0.005223f, 0.009814f, -0.005037f, 0.005581f, 0.002105f, -0.001504f, -0.005655f, -0.005201f, 0.005024f, -0.002624f, -0.001927f, -0.007750f, -0.002002f, -0.000716f, -0.003685f, 0.010354f, -0.002289f, -0.000646f, 0.004297f, -0.000750f, -0.008655f, -0.004426f, -0.007635f, -0.005101f, 0.011768f, -0.003309f, 0.013090f, -0.000047f, -0.000578f, -0.002372f, 0.001493f, 0.000560f, -0.007840f, -0.008309f, 0.006020f, 0.000700f, 0.004080f, -0.000547f, 0.004757f, 0.002955f, -0.007603f, -0.000038f, 0.002476f, 0.004091f, -0.000055f, 0.003456f, 0.006225f, -0.008343f, 0.002160f, 0.002164f, -0.004230f, 0.000015f, 0.001853f, 0.006015f, 0.003901f, -0.004163f, -0.001316f, -0.000209f, 0.001352f, 0.001927f, 0.001398f, 0.001590f, -0.001154f, 0.000838f, -0.002332f, + -0.001435f, -0.000093f, 0.003078f, 0.001283f, -0.000066f, -0.000282f, -0.002045f, 0.001151f, -0.000132f, -0.000774f, -0.000149f, 0.001015f, 0.000487f, 0.000708f, 0.001999f, -0.000727f, 0.000897f, 0.002294f, 0.017836f, -0.001499f, -0.002267f, -0.004694f, -0.009907f, -0.012198f, -0.011170f, 0.001135f, 0.009765f, 0.003355f, 0.013070f, 0.004428f, -0.006079f, 0.001494f, -0.015780f, -0.013378f, 0.006068f, -0.004764f, 0.008590f, -0.000913f, -0.007070f, -0.003570f, 0.017159f, 0.003755f, 0.007195f, -0.000432f, 0.005485f, -0.002675f, -0.002225f, 0.003318f, -0.002483f, -0.007640f, -0.000660f, 0.002660f, -0.000983f, -0.000553f, 0.010876f, 0.006693f, -0.011909f, 0.000170f, -0.007593f, 0.012340f, 0.007251f, 0.000420f, -0.004524f, -0.004644f, 0.005620f, 0.003093f, 0.009178f, -0.008721f, 0.014631f, 0.017980f, -0.005086f, 0.017515f, -0.000130f, 0.009132f, 0.005633f, -0.003358f, 0.002948f, 0.014019f, -0.001757f, -0.009629f, 0.008054f, 0.002533f, -0.000211f, -0.001196f, -0.001783f, 0.000504f, 0.008134f, -0.005395f, 0.002887f, 0.002109f, 0.004256f, -0.006932f, 0.007661f, 0.001698f, -0.000793f, 0.002356f, + 0.001023f, 0.000653f, -0.000438f, 0.001654f, 0.004457f, -0.003323f, 0.001732f, 0.001109f, 0.001811f, -0.003043f, 0.000098f, -0.004821f, 0.000709f, 0.002112f, -0.002839f, -0.001848f, 0.000514f, 0.001197f, 0.001421f, 0.000321f, 0.001284f, -0.000110f, -0.000091f, 0.002765f, -0.000388f, 0.000613f, -0.015497f, -0.012108f, 0.003863f, -0.006837f, 0.004952f, -0.008555f, -0.012169f, -0.011246f, 0.001618f, -0.008390f, 0.007764f, 0.005701f, -0.010791f, -0.002188f, 0.004458f, 0.001078f, 0.005473f, -0.003152f, 0.005662f, 0.006958f, -0.009570f, 0.003121f, 0.003218f, -0.007684f, 0.004593f, 0.000837f, -0.009062f, 0.006809f, 0.006581f, -0.003200f, 0.007187f, 0.001065f, 0.005877f, 0.005311f, 0.002260f, -0.003388f, -0.000794f, -0.010890f, -0.003236f, -0.005394f, 0.005815f, 0.006099f, 0.002452f, -0.017473f, 0.003407f, 0.007416f, -0.003895f, 0.012349f, -0.010003f, -0.013320f, 0.001083f, -0.003928f, 0.004338f, -0.009502f, 0.017457f, -0.000882f, -0.005751f, 0.001735f, 0.000286f, 0.009932f, -0.000495f, -0.005747f, -0.000314f, -0.003894f, -0.005273f, -0.006740f, 0.003254f, -0.012206f, 0.001328f, 0.000471f, + 0.003665f, 0.008195f, 0.002763f, 0.005837f, 0.009083f, -0.006142f, -0.001013f, 0.002031f, -0.007633f, 0.005283f, -0.002552f, 0.004504f, 0.003656f, -0.002375f, -0.001746f, 0.006619f, -0.002067f, -0.006014f, 0.000931f, -0.000632f, -0.000148f, -0.003245f, 0.004889f, -0.003707f, 0.001908f, 0.001804f, 0.002532f, -0.000958f, -0.000922f, 0.000291f, -0.001769f, 0.000720f, -0.001186f, 0.000111f, -0.000705f, -0.001823f, 0.002439f, -0.000934f, 0.000599f, -0.000336f, 0.000232f, 0.000019f, 0.000509f, -0.003111f, -0.037147f, -0.000533f, -0.004469f, 0.026302f, 0.000649f, 0.001660f, 0.005668f, -0.003580f, 0.013282f, 0.003335f, -0.014055f, -0.007521f, -0.016503f, 0.003018f, -0.001096f, -0.005615f, -0.004732f, -0.005997f, -0.003808f, 0.020480f, -0.009328f, -0.004563f, -0.005258f, -0.015475f, -0.000608f, -0.003745f, 0.005363f, 0.007790f, -0.002472f, -0.000031f, 0.004596f, -0.004694f, -0.001250f, -0.001956f, -0.005582f, 0.006308f, 0.012621f, -0.001433f, -0.002033f, 0.010013f, -0.013107f, 0.008616f, -0.010456f, -0.021111f, -0.013380f, -0.021025f, -0.003167f, -0.011956f, -0.008036f, 0.002297f, 0.008467f, 0.004349f, + 0.006066f, -0.003034f, 0.007348f, -0.008884f, -0.001972f, 0.007731f, 0.000022f, 0.010705f, -0.004379f, 0.003360f, -0.007391f, -0.005537f, 0.005578f, -0.012804f, 0.003514f, 0.009777f, -0.012510f, 0.001411f, -0.003269f, -0.005717f, -0.008185f, -0.007315f, -0.002405f, -0.003142f, 0.002053f, 0.009168f, -0.004300f, 0.002976f, -0.007501f, -0.007944f, -0.006284f, 0.003235f, 0.004381f, 0.001304f, -0.001923f, -0.002190f, -0.003322f, 0.002047f, -0.002806f, -0.002366f, -0.001091f, -0.002181f, -0.000226f, 0.000636f, -0.004032f, -0.000770f, -0.000418f, -0.002921f, -0.000733f, -0.001197f, 0.000088f, -0.000335f, -0.005537f, 0.000894f, 0.002435f, -0.000857f, -0.002136f, -0.000016f, 0.003555f, 0.002015f, -0.001289f, -0.003732f, 0.002212f, -0.000269f, -0.001225f, 0.023859f, 0.000177f, -0.013286f, -0.012763f, -0.004369f, -0.009302f, -0.003583f, -0.006988f, 0.001833f, 0.001179f, -0.010510f, -0.006162f, -0.011546f, 0.021929f, 0.009294f, 0.002051f, -0.001237f, 0.011908f, -0.017722f, -0.000246f, -0.000374f, -0.011166f, -0.014915f, 0.013387f, 0.000270f, 0.009563f, -0.014964f, -0.006507f, -0.005216f, 0.005239f, -0.000537f, + 0.006433f, -0.010326f, 0.003161f, 0.004220f, -0.011128f, -0.010754f, -0.009677f, 0.002319f, -0.003158f, -0.003015f, 0.009483f, -0.002774f, 0.001091f, 0.000166f, -0.001817f, -0.010676f, -0.006456f, -0.001236f, -0.015982f, -0.010483f, -0.008396f, 0.004454f, 0.003120f, 0.006401f, -0.001532f, 0.002796f, -0.000128f, -0.001649f, 0.007513f, -0.005800f, 0.013049f, 0.001814f, 0.003989f, -0.001722f, -0.004236f, 0.005162f, 0.004076f, 0.010254f, -0.003042f, 0.001596f, 0.006325f, -0.003716f, 0.000185f, -0.013572f, 0.006447f, -0.010452f, 0.006674f, -0.007730f, -0.007446f, -0.014637f, -0.002791f, 0.003691f, 0.001666f, -0.002481f, 0.003472f, 0.001462f, 0.006748f, 0.001073f, -0.001964f, 0.005833f, 0.003265f, -0.005227f, 0.001344f, -0.004255f, 0.004668f, -0.001880f, 0.000849f, -0.001184f, -0.000458f, -0.003760f, -0.000066f, 0.000184f, 0.000780f, -0.002219f, 0.001820f, -0.003169f, 0.001311f, -0.000605f, -0.001491f, -0.002817f, 0.000800f, -0.001906f, 0.004020f, 0.001072f, -0.000974f, -0.001774f, -0.001515f, 0.003019f, 0.002124f, 0.002882f, 0.000376f, 0.000273f, 0.001606f, -0.003353f, 0.028271f, 0.026769f, + 0.020010f, -0.006614f, 0.007403f, 0.010184f, 0.006023f, 0.005798f, -0.009781f, -0.008522f, -0.012839f, 0.011643f, -0.012041f, -0.001384f, -0.008732f, 0.015410f, -0.016869f, -0.012564f, -0.006222f, -0.002633f, -0.009247f, -0.013947f, 0.004107f, 0.000842f, 0.000918f, -0.016934f, -0.009295f, 0.004551f, 0.003662f, 0.004937f, -0.004530f, -0.006670f, 0.000624f, 0.005222f, 0.006632f, -0.004699f, 0.006310f, -0.008948f, -0.002319f, -0.022043f, 0.008195f, 0.002759f, -0.003735f, -0.004104f, -0.016252f, -0.007370f, 0.002129f, -0.003871f, -0.022859f, 0.012462f, 0.005174f, 0.000058f, -0.006128f, -0.004730f, -0.009640f, 0.003046f, -0.003385f, 0.006686f, -0.001388f, -0.003219f, -0.012987f, -0.002449f, -0.001259f, -0.007114f, 0.014366f, -0.010317f, 0.000237f, 0.008569f, -0.003532f, -0.011165f, -0.006277f, 0.009725f, 0.014033f, 0.006983f, -0.001038f, -0.000354f, 0.007437f, -0.015034f, 0.006177f, -0.001540f, -0.000709f, 0.000758f, 0.003276f, -0.000812f, -0.000608f, 0.000812f, -0.002934f, -0.009060f, -0.002445f, -0.002734f, 0.002793f, 0.001995f, 0.001067f, -0.003480f, -0.001843f, -0.004028f, -0.005016f, -0.001204f, + -0.000184f, 0.006064f, 0.000576f, 0.000867f, 0.000748f, -0.002051f, -0.001217f, 0.002815f, -0.003160f, -0.000447f, 0.001084f, 0.001778f, -0.003777f, 0.000091f, -0.000339f, 0.002264f, -0.002718f, -0.000604f, -0.001606f, -0.002592f, -0.005809f, -0.002623f, -0.000292f, -0.002483f, -0.000007f, 0.000340f, -0.000294f, -0.003163f, -0.001282f, 0.034059f, 0.011418f, -0.004992f, -0.003983f, 0.011949f, -0.023027f, -0.004349f, 0.018635f, 0.009331f, -0.013000f, -0.000305f, -0.008822f, 0.003583f, 0.014333f, 0.035194f, 0.011621f, 0.027407f, -0.009719f, -0.002057f, -0.026687f, 0.009038f, -0.007786f, 0.007493f, -0.011688f, -0.000635f, 0.001129f, -0.004181f, 0.009582f, -0.004313f, 0.004578f, 0.011770f, -0.009030f, 0.005299f, 0.015064f, -0.004127f, 0.005043f, -0.000005f, 0.006060f, 0.008225f, 0.008484f, -0.045297f, 0.016563f, -0.005257f, -0.021193f, -0.003730f, 0.012957f, 0.003936f, -0.016368f, 0.008811f, 0.012922f, -0.026690f, 0.002154f, -0.007554f, 0.015702f, 0.003555f, 0.012975f, -0.003196f, -0.009314f, -0.018754f, 0.001166f, -0.011356f, 0.035368f, 0.006501f, -0.005787f, 0.011750f, 0.001507f, 0.011368f, + -0.027790f, -0.003696f, 0.004319f, 0.008586f, 0.002075f, -0.013048f, -0.002022f, 0.004718f, 0.012408f, 0.010408f, -0.008600f, 0.000194f, 0.012212f, -0.000570f, 0.005771f, -0.004286f, -0.002056f, 0.008497f, 0.000872f, -0.000710f, -0.001122f, 0.000384f, 0.004233f, -0.004079f, -0.001736f, -0.000563f, 0.003306f, 0.003105f, -0.000359f, -0.001176f, 0.008479f, -0.002735f, -0.001382f, -0.004497f, 0.000652f, 0.002227f, -0.002142f, 0.000096f, 0.002664f, 0.003376f, -0.002927f, -0.001434f, -0.004908f, 0.000306f, 0.004031f, -0.001959f, 0.000823f, 0.001755f, 0.002140f, 0.006717f, 0.000969f, 0.003252f, -0.000105f, -0.003023f, 0.004539f, 0.001010f, -0.040435f, -0.044348f, -0.015184f, -0.003462f, 0.000815f, 0.009421f, -0.018938f, 0.005974f, 0.022330f, -0.012813f, 0.011888f, 0.015455f, -0.010767f, 0.000329f, -0.005242f, 0.018901f, 0.026375f, -0.012637f, -0.014881f, 0.013256f, 0.001283f, -0.012666f, 0.006004f, 0.000206f, 0.003316f, 0.003765f, -0.006758f, -0.004938f, -0.028166f, -0.001456f, -0.008045f, -0.000656f, -0.000819f, 0.019150f, 0.005705f, -0.034399f, 0.000596f, 0.016574f, -0.018788f, 0.004943f, + 0.020252f, -0.004461f, 0.007145f, 0.000398f, -0.005281f, -0.013082f, 0.026034f, 0.021872f, -0.016614f, 0.008700f, -0.006159f, -0.000879f, 0.008127f, -0.005792f, 0.006824f, -0.010316f, -0.001137f, 0.021952f, -0.006203f, 0.004629f, 0.010417f, -0.007524f, -0.018016f, -0.000795f, 0.006246f, 0.003186f, -0.008632f, 0.001123f, 0.004916f, 0.007789f, 0.016117f, 0.009917f, 0.017732f, 0.009317f, 0.003472f, 0.008194f, -0.002846f, 0.015916f, -0.000463f, -0.012631f, -0.016903f, 0.002051f, 0.005571f, -0.003005f, 0.012749f, -0.006592f, -0.006783f, 0.005003f, -0.001529f, 0.001318f, 0.000716f, -0.007887f, -0.001023f, -0.004771f, 0.005843f, 0.002540f, 0.004715f, 0.009003f, 0.001209f, -0.003257f, -0.013049f, -0.001065f, 0.003132f, -0.003412f, -0.001270f, 0.001267f, -0.002834f, 0.002744f, 0.003010f, 0.000310f, -0.003002f, -0.002271f, 0.006524f, -0.000976f, 0.003116f, 0.001528f, 0.002182f, -0.004678f, -0.004778f, -0.002953f, 0.001227f, 0.002139f, 0.003957f, 0.002779f, 0.001996f, 0.001717f, 0.004951f, -0.001346f, -0.004643f, -0.043958f, 0.048180f, -0.003225f, 0.030854f, 0.001982f, -0.018539f, -0.005836f, + -0.010905f, -0.013132f, -0.002058f, 0.000469f, 0.022211f, -0.003976f, 0.015139f, -0.016025f, -0.001219f, 0.003466f, 0.003197f, 0.001390f, 0.019258f, 0.019205f, 0.006779f, 0.002742f, -0.002855f, -0.004193f, -0.001501f, -0.003635f, -0.033101f, -0.011525f, 0.014710f, 0.009381f, -0.004018f, 0.001305f, -0.015859f, 0.007487f, -0.019362f, 0.003805f, 0.029816f, 0.002935f, 0.006189f, -0.025444f, 0.013044f, 0.011356f, 0.002862f, -0.017179f, -0.007727f, -0.008186f, 0.001022f, -0.015451f, 0.015095f, 0.018549f, 0.011041f, -0.001996f, 0.027940f, 0.009713f, 0.041058f, 0.015868f, -0.011424f, 0.034188f, 0.000433f, -0.012889f, 0.024631f, -0.004372f, 0.007903f, 0.015441f, -0.011706f, -0.010026f, 0.022761f, 0.024540f, 0.014332f, -0.020438f, 0.007316f, -0.000484f, -0.009645f, -0.016835f, 0.011943f, 0.021693f, 0.012948f, 0.031629f, 0.004069f, -0.007313f, -0.007443f, -0.019944f, -0.007785f, 0.011911f, 0.001577f, -0.003876f, 0.000460f, -0.012540f, -0.008912f, 0.001451f, 0.002829f, -0.000678f, 0.012890f, 0.010168f, 0.004320f, 0.000161f, 0.003559f, 0.006000f, 0.002921f, -0.006377f, -0.002781f, 0.001540f, + -0.001708f, -0.002359f, 0.005260f, 0.000249f, -0.001867f, 0.004222f, 0.001411f, 0.001183f, 0.001461f, -0.004290f, 0.000736f, 0.011307f, -0.005526f, 0.007039f, 0.003107f, 0.000062f, -0.005488f, -0.006020f, -0.003243f, 0.002208f, 0.010726f, -0.023375f, 0.031113f, -0.008975f, -0.020417f, 0.006846f, 0.013542f, -0.013555f, -0.006854f, -0.028632f, 0.012013f, -0.010500f, -0.003434f, -0.026251f, -0.011516f, -0.008908f, -0.004467f, -0.011844f, 0.006219f, -0.005323f, -0.006440f, 0.006162f, 0.008703f, 0.015270f, 0.015012f, -0.006500f, -0.005383f, -0.021176f, 0.008371f, 0.000379f, 0.013962f, 0.003794f, 0.003770f, -0.004829f, 0.005613f, -0.013262f, -0.011159f, 0.006181f, 0.003216f, 0.006272f, -0.025760f, 0.008586f, 0.016924f, -0.000112f, -0.022681f, -0.023790f, -0.018448f, -0.054785f, 0.007782f, -0.006372f, 0.026532f, -0.013036f, 0.022052f, 0.006987f, 0.001546f, 0.028292f, 0.004369f, -0.003360f, 0.020437f, 0.007463f, -0.027759f, -0.013912f, 0.003370f, -0.008963f, -0.015736f, -0.009697f, 0.035894f, 0.016387f, -0.016825f, -0.002156f, -0.009429f, -0.004745f, 0.005290f, 0.025202f, 0.000511f, -0.006916f, + 0.033546f, -0.012128f, -0.030375f, -0.029160f, -0.034381f, -0.006251f, 0.002690f, -0.001040f, -0.006003f, -0.004357f, -0.014667f, -0.003045f, 0.004368f, -0.004723f, -0.004299f, 0.002748f, 0.002880f, -0.021818f, -0.008839f, -0.017128f, 0.000874f, -0.005924f, -0.005428f, -0.009261f, -0.002774f, 0.002238f, 0.013218f, -0.000060f, 0.016196f, 0.007733f, 0.011916f, 0.001048f, 0.005652f, -0.005747f, 0.010875f, -0.000291f, -0.007693f, -0.011833f, 0.006765f, 0.000820f, 0.003782f, -0.003283f, 0.002210f, -0.003913f, 0.003821f, -0.001582f, 0.004514f, -0.001205f, -0.001809f, 0.002572f, -0.000516f, 0.013551f, -0.022514f, -0.005683f, -0.006052f, -0.002979f, -0.001589f, 0.059709f, 0.009759f, 0.021808f, -0.010622f, 0.019040f, 0.038475f, -0.033032f, 0.049991f, 0.029610f, -0.013400f, 0.000410f, 0.003013f, -0.018023f, -0.030183f, 0.002035f, -0.017508f, -0.026956f, -0.012084f, 0.002349f, 0.000025f, -0.003352f, -0.012118f, -0.002069f, -0.011799f, -0.000867f, -0.013637f, -0.001041f, 0.009315f, -0.021200f, 0.011604f, 0.017763f, -0.013883f, -0.012940f, 0.009179f, 0.006896f, -0.001222f, 0.053590f, 0.004720f, 0.035705f, + -0.025720f, -0.002550f, -0.031182f, -0.022941f, 0.005502f, -0.023011f, -0.031520f, -0.021074f, -0.023942f, -0.005284f, -0.006381f, -0.026645f, -0.028892f, 0.037628f, 0.005914f, 0.002301f, -0.005113f, 0.019456f, 0.010838f, 0.023481f, -0.002338f, 0.022188f, -0.012450f, 0.004995f, -0.041655f, 0.033952f, 0.016456f, 0.002591f, -0.022876f, -0.001811f, 0.010333f, 0.002080f, 0.003984f, 0.016721f, 0.023455f, -0.018260f, -0.023348f, -0.015470f, -0.003650f, -0.000490f, 0.002561f, -0.013823f, 0.001572f, 0.003823f, 0.009670f, 0.012451f, -0.001582f, -0.007879f, 0.013099f, 0.006348f, -0.009765f, -0.000796f, 0.004738f, -0.005968f, -0.010319f, 0.001735f, -0.003495f, -0.003538f, -0.000307f, -0.004669f, 0.012011f, -0.012807f, 0.006975f, -0.000510f, 0.013285f, -0.014020f, -0.003357f, 0.002172f, -0.003511f, -0.005448f, -0.002221f, -0.011162f, -0.012077f, -0.002461f, 0.001276f, 0.003387f, 0.004392f, -0.008389f, 0.008325f, 0.006099f, -0.004939f, 0.007237f, -0.001459f, 0.004068f, 0.000370f, 0.004019f, -0.003355f, -0.002845f, 0.001144f, 0.001989f, 0.004878f, -0.000825f, 0.006692f, -0.003297f, -0.002312f, 0.000001f, + -0.002424f, 0.004223f, 0.004296f, 0.029205f, -0.011777f, -0.009585f, 0.032594f, -0.027251f, -0.020754f, -0.005013f, -0.016487f, -0.002554f, -0.032463f, 0.007399f, -0.019949f, 0.015482f, 0.002272f, 0.005340f, 0.018719f, 0.005443f, 0.013242f, 0.018144f, 0.017241f, 0.014243f, 0.024118f, 0.002940f, 0.016428f, 0.014721f, -0.017420f, 0.030411f, 0.007532f, 0.014104f, -0.016255f, 0.023750f, 0.010773f, 0.016702f, 0.004315f, 0.006011f, -0.002965f, -0.021748f, 0.005663f, 0.012424f, 0.014662f, 0.015978f, 0.003527f, -0.026466f, -0.016678f, 0.019174f, 0.010499f, 0.004423f, -0.009980f, 0.013297f, -0.009541f, -0.026527f, 0.039176f, 0.023934f, 0.017554f, -0.014955f, -0.007284f, -0.019741f, -0.061648f, -0.001791f, -0.008506f, 0.008054f, -0.014310f, -0.015428f, -0.027118f, 0.004897f, 0.008857f, 0.034649f, -0.027139f, 0.011141f, 0.000634f, 0.016000f, -0.023875f, -0.029374f, -0.017813f, 0.019124f, 0.005943f, 0.006048f, 0.010258f, -0.007991f, 0.003519f, 0.022408f, 0.008087f, 0.011400f, 0.014395f, -0.005583f, -0.005029f, -0.009245f, 0.000395f, 0.009861f, 0.012252f, 0.000567f, 0.005183f, 0.002557f, + 0.002140f, 0.009284f, -0.005482f, -0.004744f, -0.007803f, -0.004365f, -0.008077f, -0.000123f, -0.012365f, -0.004934f, -0.013077f, -0.000603f, -0.007778f, -0.002152f, -0.001603f, -0.004458f, 0.004058f, -0.003168f, -0.016828f, -0.002397f, 0.007088f, 0.007629f, 0.014331f, -0.001936f, -0.008091f, 0.004162f, -0.003019f, -0.012260f, 0.011753f, 0.009873f, 0.009619f, 0.021928f, 0.014559f, -0.001013f, 0.001087f, -0.004687f, 0.006095f, 0.001953f, -0.050462f, 0.028102f, 0.029947f, -0.015728f, 0.025458f, 0.008390f, -0.042639f, -0.007998f, 0.054766f, -0.008427f, -0.037339f, -0.006309f, -0.004078f, -0.032527f, 0.021847f, 0.004095f, -0.016658f, 0.023571f, 0.015477f, 0.056490f, 0.032906f, 0.000335f, 0.003672f, 0.053263f, -0.014325f, 0.013070f, -0.022505f, -0.032192f, -0.009953f, -0.022046f, 0.004330f, -0.002118f, 0.010336f, -0.002192f, -0.004368f, -0.009651f, 0.041914f, 0.001511f, -0.033930f, -0.027066f, -0.006540f, -0.007423f, -0.001692f, 0.013308f, 0.038219f, 0.024203f, 0.007688f, -0.024035f, 0.029624f, 0.054498f, -0.012129f, 0.024463f, 0.022910f, 0.065781f, 0.012132f, 0.012113f, 0.019576f, 0.027735f, + 0.015197f, -0.023294f, -0.022364f, 0.014735f, -0.041132f, -0.025016f, -0.029609f, 0.027112f, 0.023716f, 0.016374f, -0.007069f, 0.019851f, 0.042098f, -0.024796f, 0.033443f, 0.033236f, -0.004993f, 0.032663f, -0.031644f, -0.014288f, -0.011326f, 0.069000f, -0.034378f, 0.033653f, 0.020933f, 0.012078f, 0.009284f, -0.031275f, -0.003475f, -0.024701f, 0.025559f, 0.024186f, -0.000808f, 0.001329f, -0.012832f, 0.017961f, -0.007636f, 0.001359f, 0.006552f, 0.007081f, -0.000454f, 0.010777f, -0.008161f, -0.004657f, -0.003484f, -0.008209f, 0.003126f, 0.006319f, -0.006118f, 0.002633f, 0.007620f, 0.013624f, 0.001794f, -0.013462f, 0.005143f, -0.014553f, 0.002163f, 0.012232f, 0.007929f, 0.012966f, -0.002676f, 0.021195f, -0.008926f, 0.015524f, -0.004531f, -0.005661f, -0.003180f, 0.000425f, 0.017147f, -0.013178f, 0.008071f, -0.000853f, 0.008188f, -0.010824f, 0.002416f, 0.003727f, -0.005024f, 0.022475f, -0.012879f, 0.009725f, 0.010618f, 0.037657f, 0.067523f, 0.006850f, -0.007442f, 0.006749f, -0.004047f, -0.011637f, 0.001630f, 0.006642f, -0.016971f, -0.022567f, 0.007134f, -0.011943f, -0.006625f, 0.016844f, + -0.001214f, 0.033536f, -0.018237f, 0.032865f, 0.016049f, 0.002804f, -0.019679f, 0.005817f, 0.032939f, 0.009146f, -0.017198f, 0.006089f, -0.004315f, 0.000452f, 0.019245f, -0.027549f, -0.014591f, 0.029707f, 0.000373f, -0.007957f, 0.025964f, -0.001795f, 0.009030f, 0.005458f, -0.025340f, -0.046257f, -0.009920f, 0.015362f, 0.029101f, 0.005828f, -0.022716f, 0.028768f, -0.009798f, 0.058886f, -0.030273f, 0.039450f, -0.023542f, 0.013779f, 0.034111f, -0.051188f, -0.052524f, -0.000886f, -0.014975f, 0.012996f, 0.016552f, 0.001871f, -0.007845f, -0.031515f, 0.020755f, -0.005030f, 0.037055f, 0.016258f, 0.034504f, 0.008898f, 0.020046f, -0.008996f, 0.026482f, 0.009047f, -0.015991f, 0.002675f, -0.000538f, -0.077150f, -0.002345f, 0.012911f, 0.018460f, 0.031820f, 0.027403f, -0.009527f, 0.002254f, -0.006274f, 0.005087f, -0.000610f, -0.008560f, -0.020902f, 0.008786f, -0.012453f, 0.026533f, 0.002520f, 0.005163f, 0.012433f, 0.007715f, -0.008980f, 0.007662f, 0.018620f, 0.016885f, -0.006385f, -0.003042f, 0.002119f, -0.004056f, -0.003434f, -0.011972f, -0.002835f, -0.025115f, -0.004171f, 0.008692f, -0.021672f, + 0.014636f, -0.016534f, -0.012778f, 0.003069f, -0.012986f, 0.012609f, 0.005274f, -0.005725f, 0.008808f, -0.001736f, -0.001311f, 0.004839f, 0.018621f, -0.013599f, 0.003031f, 0.002005f, 0.008328f, 0.005176f, 0.003902f, -0.007696f, 0.044506f, 0.057512f, -0.012356f, -0.002066f, 0.020396f, 0.076022f, 0.002293f, -0.044734f, -0.017787f, 0.009271f, 0.008807f, -0.014050f, 0.014682f, -0.010112f, 0.023693f, -0.037928f, 0.002185f, 0.023840f, -0.015706f, -0.017042f, 0.003501f, -0.037498f, -0.011400f, -0.012134f, -0.059703f, -0.050461f, -0.029110f, 0.022195f, 0.026187f, -0.004443f, -0.042421f, 0.004910f, 0.001725f, -0.001400f, 0.008759f, -0.021300f, 0.051395f, -0.014508f, 0.006742f, 0.056799f, -0.049407f, 0.024027f, 0.008625f, -0.017223f, 0.020858f, -0.013325f, -0.040004f, 0.000918f, 0.035064f, -0.015500f, -0.025033f, 0.014578f, 0.004951f, 0.033269f, 0.000515f, -0.051103f, 0.004365f, -0.030189f, 0.050691f, -0.018230f, 0.007904f, 0.012451f, 0.006333f, -0.007191f, -0.032437f, 0.013713f, 0.034631f, 0.010016f, 0.035727f, -0.051845f, -0.028251f, -0.008518f, -0.000148f, 0.005616f, -0.039716f, 0.035880f, + -0.004598f, -0.038144f, -0.012397f, 0.024155f, 0.022805f, -0.021123f, -0.029000f, 0.028996f, -0.023007f, -0.014633f, -0.000174f, -0.003589f, -0.002820f, -0.001895f, -0.008161f, -0.001624f, 0.014940f, -0.003311f, 0.013769f, -0.015327f, 0.011035f, 0.013952f, -0.003331f, 0.007529f, 0.002707f, -0.002843f, 0.000628f, 0.001887f, 0.025355f, 0.001294f, -0.004296f, 0.002114f, 0.006016f, -0.012445f, 0.004953f, -0.015913f, -0.000756f, 0.018390f, -0.006086f, -0.014499f, -0.004820f, 0.008239f, 0.000828f, 0.000596f, 0.011432f, 0.000855f, -0.013932f, -0.007560f, 0.027045f, 0.019302f, -0.005754f, -0.001147f, -0.000272f, -0.039359f, 0.057856f, 0.001649f, -0.099097f, 0.039695f, -0.013622f, 0.007723f, 0.010110f, 0.013305f, 0.024325f, 0.008868f, -0.017943f, -0.004334f, 0.024497f, 0.016564f, -0.019678f, -0.001053f, -0.015613f, -0.008095f, -0.048676f, -0.006212f, 0.023425f, 0.029092f, 0.006538f, -0.011547f, 0.032226f, -0.033199f, 0.036719f, -0.021158f, -0.011887f, 0.004376f, -0.011397f, 0.009790f, -0.029297f, -0.039550f, -0.044263f, -0.014168f, 0.022917f, -0.008852f, 0.000221f, 0.026955f, 0.007483f, 0.004710f, + -0.000849f, 0.000915f, -0.009325f, 0.000362f, 0.029048f, 0.017884f, 0.030655f, 0.026003f, 0.030753f, 0.020930f, -0.018291f, -0.011663f, 0.007552f, -0.001960f, -0.035348f, 0.023766f, -0.006401f, -0.033393f, 0.041914f, -0.000474f, 0.006809f, -0.001167f, -0.015252f, -0.005033f, 0.017599f, 0.025501f, 0.021207f, 0.000650f, 0.012987f, -0.042772f, -0.006081f, -0.015243f, 0.023269f, 0.008035f, -0.011928f, -0.013606f, 0.053855f, -0.016420f, -0.018459f, -0.005836f, 0.008679f, -0.013336f, -0.035501f, -0.002003f, -0.006089f, -0.019179f, 0.033256f, 0.006788f, 0.012513f, -0.010223f, -0.001791f, 0.007748f, 0.001988f, 0.009785f, 0.010541f, -0.003456f, 0.006459f, -0.006404f, 0.007321f, 0.002795f, -0.005896f, -0.004453f, 0.005417f, 0.007657f, 0.002066f, -0.006760f, -0.005628f, -0.006076f, -0.004506f, 0.000165f, 0.003787f, -0.005501f, -0.006694f, 0.001599f, -0.000548f, -0.001183f, 0.005755f, -0.002687f, 0.009128f, 0.002798f, 0.026777f, -0.002242f, -0.003387f, -0.005880f, 0.003261f, 0.000167f, -0.011287f, -0.014831f, 0.134985f, -0.132377f, -0.006541f, -0.143935f, -0.022194f, -0.054687f, -0.006570f, 0.035229f, + -0.017758f, -0.039792f, 0.062938f, -0.016936f, -0.010850f, 0.002141f, 0.019467f, -0.002189f, 0.052326f, 0.034632f, 0.020822f, -0.030782f, 0.002152f, -0.020987f, -0.021305f, -0.014262f, 0.000873f, -0.006541f, -0.005680f, -0.017374f, -0.003788f, 0.028907f, 0.003643f, 0.019141f, 0.019163f, -0.001505f, 0.025551f, 0.037136f, 0.002073f, -0.007581f, -0.019287f, -0.023115f, 0.009326f, 0.010152f, -0.019118f, 0.031466f, -0.041490f, -0.042034f, 0.004704f, -0.014705f, 0.022553f, -0.038974f, 0.016702f, -0.074957f, -0.039893f, -0.060008f, -0.005152f, -0.029619f, -0.002637f, -0.018080f, -0.022502f, -0.019615f, -0.001752f, 0.005082f, -0.058595f, 0.006683f, -0.012805f, 0.006727f, 0.000301f, -0.027108f, -0.047667f, 0.032982f, -0.028674f, -0.005125f, 0.029540f, -0.002992f, -0.009229f, 0.019525f, 0.024488f, -0.005048f, 0.024393f, 0.015958f, 0.029471f, 0.016244f, 0.029821f, 0.014115f, -0.017643f, -0.004917f, -0.015540f, 0.000711f, -0.012865f, 0.002756f, 0.010816f, 0.015266f, 0.016741f, -0.007422f, 0.007790f, 0.005581f, 0.010985f, -0.002602f, -0.004167f, 0.005729f, 0.013163f, 0.001733f, 0.003076f, 0.014498f, + 0.007455f, 0.014924f, -0.002112f, 0.000689f, -0.001525f, 0.007280f, 0.010348f, -0.001879f, -0.017160f, 0.009417f, -0.002852f, 0.003658f, -0.005377f, 0.002387f, -0.004867f, -0.002541f, 0.000916f, -0.014314f, 0.000248f, 0.019600f, -0.012239f, -0.012927f, 0.001704f, 0.006690f, 0.006842f, 0.002313f, -0.013545f, 0.109210f, 0.054813f, 0.026489f, -0.026514f, -0.013739f, -0.057128f, 0.012522f, 0.045664f, -0.008978f, -0.010972f, 0.074891f, -0.013526f, -0.016702f, 0.036989f, 0.054821f, 0.009382f, 0.055915f, -0.014115f, 0.008114f, 0.032920f, 0.037278f, 0.058788f, 0.047603f, -0.002646f, -0.021298f, 0.017572f, 0.021426f, 0.020149f, 0.025196f, 0.043922f, 0.021512f, 0.055894f, -0.021789f, -0.001643f, 0.016330f, 0.015053f, 0.047399f, 0.027429f, 0.050804f, -0.036835f, -0.011597f, 0.020132f, -0.039575f, 0.031747f, 0.032355f, 0.030878f, 0.013167f, -0.040005f, -0.014610f, 0.075362f, 0.019389f, 0.050748f, 0.042192f, 0.046145f, -0.009569f, 0.061219f, 0.096081f, 0.032923f, 0.008418f, 0.067256f, 0.046533f, -0.026159f, -0.016055f, -0.032849f, -0.026183f, 0.028191f, 0.032927f, 0.002662f, -0.027872f, + 0.000369f, -0.024928f, -0.001370f, -0.011173f, 0.016054f, -0.058541f, -0.006896f, 0.005843f, -0.029849f, 0.022286f, 0.003725f, -0.018332f, 0.015399f, -0.036866f, -0.024167f, -0.040836f, -0.013867f, -0.019727f, 0.014190f, 0.004437f, -0.019196f, 0.004249f, 0.026418f, 0.007820f, -0.008958f, -0.016231f, -0.025401f, -0.009765f, 0.008115f, -0.035667f, -0.016848f, -0.003075f, 0.028405f, 0.009579f, -0.012401f, 0.005968f, -0.019442f, -0.005282f, -0.006139f, -0.015928f, -0.010504f, 0.026764f, -0.006416f, -0.001895f, -0.006770f, 0.006323f, 0.016879f, 0.012181f, 0.014429f, 0.036934f, -0.000192f, 0.029780f, 0.001152f, 0.003074f, 0.018415f, 0.015997f, -0.024757f, -0.014178f, -0.002162f, 0.005777f, 0.002364f, 0.000258f, -0.002705f, 0.011695f, -0.034366f, 0.017373f, -0.041464f, 0.073195f, 0.103861f, 0.060537f, -0.026366f, -0.056755f, -0.020749f, 0.051442f, -0.014951f, -0.042270f, 0.077492f, -0.053372f, 0.046380f, 0.026208f, -0.060437f, -0.024994f, -0.006121f, -0.100011f, 0.004239f, 0.011663f, -0.048043f, 0.098834f, -0.033635f, 0.091800f, -0.068388f, 0.010332f, 0.004691f, 0.067154f, 0.098998f, -0.007986f, + 0.033821f, 0.046751f, -0.054268f, 0.036769f, -0.073559f, -0.020230f, 0.140692f, -0.007763f, -0.038398f, -0.007444f, -0.078223f, 0.003538f, -0.024392f, 0.087973f, 0.033750f, 0.041029f, -0.013107f, -0.023066f, -0.043362f, -0.040313f, 0.010560f, 0.005747f, 0.000607f, 0.058621f, -0.013810f, 0.011299f, -0.060282f, -0.031320f, 0.040952f, -0.090255f, -0.035210f, -0.027052f, -0.030467f, 0.084541f, 0.006592f, 0.091329f, 0.065843f, 0.029208f, 0.035447f, -0.020317f, -0.047718f, 0.040971f, -0.065111f, -0.039957f, 0.081434f, 0.024708f, -0.048242f, -0.080284f, -0.048141f, -0.057103f, 0.046481f, -0.049281f, 0.026155f, -0.035564f, -0.002569f, -0.030531f, 0.033165f, 0.019126f, 0.003411f, -0.026479f, -0.004372f, -0.018258f, 0.005953f, -0.036048f, -0.024496f, -0.013529f, 0.008520f, 0.020258f, -0.000161f, -0.014649f, -0.020018f, -0.033504f, -0.023455f, 0.021397f, 0.029734f, -0.009117f, 0.020696f, 0.040936f, 0.020126f, -0.037906f, -0.010584f, -0.013904f, 0.024585f, -0.023118f, -0.014656f, -0.005419f, 0.009443f, -0.030406f, -0.040524f, -0.029211f, -0.009160f, 0.016922f, 0.000064f, 0.003839f, -0.005198f, 0.023158f, + 0.007866f, -0.001418f, -0.020721f, -0.007047f, -0.012599f, 0.016292f, -0.003998f, 0.003908f, 0.065455f, -0.109470f, 0.115782f, -0.003239f, 0.008605f, -0.037530f, 0.093424f, 0.021684f, 0.060041f, 0.022489f, -0.039924f, 0.013167f, 0.033192f, -0.057721f, 0.039803f, 0.000379f, 0.026290f, -0.076939f, -0.006330f, 0.018448f, 0.070172f, -0.029756f, -0.058538f, -0.002889f, 0.069784f, 0.036682f, -0.027163f, -0.060811f, -0.003348f, 0.050314f, 0.006262f, 0.003197f, 0.013674f, 0.036493f, 0.092602f, -0.131384f, -0.021984f, 0.012343f, 0.072529f, 0.016001f, -0.040080f, -0.010152f, 0.027406f, 0.066407f, -0.007102f, 0.002940f, -0.126057f, 0.036091f, 0.019285f, 0.033992f, -0.091562f, 0.080367f, 0.069092f, 0.025865f, -0.041619f, -0.004473f, -0.046012f, 0.033854f, 0.059120f, 0.024693f, 0.027475f, -0.005448f, 0.044727f, -0.065964f, 0.061934f, -0.018690f, -0.022585f, 0.072992f, 0.059983f, 0.003669f, -0.023172f, -0.060427f, 0.043729f, 0.048045f, -0.129310f, -0.010429f, 0.073794f, 0.018274f, -0.001176f, -0.046312f, -0.020205f, 0.125864f, -0.010012f, -0.043294f, -0.005814f, -0.023422f, -0.028403f, 0.041751f, + -0.035794f, 0.012631f, 0.018784f, 0.025427f, -0.018054f, 0.002363f, -0.018325f, -0.021724f, -0.014735f, 0.019182f, 0.019009f, -0.019883f, -0.004287f, 0.009540f, -0.016025f, 0.038026f, -0.036958f, 0.009442f, -0.006922f, -0.011962f, 0.013225f, 0.063078f, 0.003821f, 0.000045f, -0.010462f, -0.022299f, -0.000217f, 0.034335f, 0.007881f, -0.001636f, -0.006977f, -0.016215f, 0.028972f, -0.007571f, -0.002013f, -0.017188f, 0.016495f, -0.002695f, -0.008047f, -0.097945f, 0.047007f, 0.008633f, 0.029729f, 0.035991f, 0.052552f, 0.018328f, 0.016526f, -0.025815f, 0.026830f, 0.004557f, 0.062459f, -0.007724f, -0.019354f, 0.049049f, 0.037465f, -0.008783f, 0.002739f, -0.021619f, 0.000116f, 0.015246f, -0.005426f, -0.013079f, 0.027700f, -0.022920f, 0.002366f, 0.037825f, -0.008804f, 0.021663f, -0.039526f, -0.008349f, 0.004661f, -0.016448f, -0.006762f, 0.004074f, 0.027324f, -0.007477f, -0.047170f, 0.001454f, 0.092412f, 0.018896f, -0.050918f, 0.014692f, -0.051904f, -0.035528f, -0.027054f, -0.007549f, 0.058801f, -0.006792f, -0.047782f, 0.095596f, -0.104304f, 0.017298f, 0.105455f, 0.010891f, 0.073987f, -0.057228f, + -0.106703f, 0.033979f, 0.003145f, 0.084348f, 0.003985f, -0.048007f, 0.038808f, -0.010964f, -0.009289f, -0.020564f, -0.003879f, -0.029957f, 0.014346f, 0.003886f, 0.022138f, -0.036508f, -0.031685f, -0.012638f, 0.037048f, 0.048050f, -0.016601f, 0.025486f, -0.004374f, 0.040206f, 0.028105f, -0.051009f, 0.040101f, -0.010584f, 0.005519f, -0.008771f, -0.016294f, -0.000309f, -0.000738f, 0.005386f, -0.004398f, 0.004165f, 0.003125f, 0.002791f, 0.005309f, -0.016846f, 0.000320f, 0.009270f, -0.014560f, -0.001881f, 0.008386f, -0.009024f, 0.011163f, 0.012908f, -0.019718f, 0.023061f, 0.008821f, 0.023896f, -0.005913f, 0.011073f, 0.018670f, -0.036479f, -0.001060f, 0.011157f, 0.020659f, -0.013038f, -0.010311f, -0.012535f, -0.009718f, 0.021238f, 0.042029f, -0.018127f, -0.197592f, -0.454028f, -0.179930f, -0.273278f, -0.400114f, 0.215099f, 0.059490f, 0.123770f, 0.569888f, 0.439263f, 0.256274f, 0.469121f, 0.350061f, 0.059818f, 0.115743f, 0.096285f, -0.222278f, -0.190236f, -0.093165f, -0.340005f, -0.325099f, -0.124510f, -0.167023f, -0.235870f, -0.098585f, -0.084724f, -0.240039f, -0.200375f, -0.016612f, -0.114145f, + -0.194613f, -0.066854f, 0.062117f, -0.141380f, 0.042609f, 0.210442f, -0.015991f, -0.030161f, 0.285844f, 0.228248f, -0.009940f, 0.333917f, 0.386977f, 0.157147f, 0.363586f, 0.510106f, 0.304393f, 0.264399f, 0.612211f, 0.488561f, 0.367376f, 0.435462f, 0.577603f, 0.206511f, 0.081999f, 0.241823f, -0.190641f, -0.547251f, -0.396655f, -0.605251f, -0.980070f, -0.877896f, -0.931663f, -1.083533f, -1.104271f, -0.952234f, -0.829141f, -0.831585f, -0.584560f, -0.258952f, -0.175309f, -0.026563f, 0.283748f, 0.521356f, 0.526374f, 0.653389f, 0.940078f, 0.821705f, 0.751214f, 1.038009f, 0.825067f, 0.466318f, 0.680576f, 0.476537f, 0.185083f, 0.167441f, 0.219931f, 0.022672f, -0.069305f, 0.042708f, 0.006371f, -0.154101f, -0.082037f, 0.013735f, -0.122638f, -0.227397f, -0.109088f, -0.156015f, -0.331123f, -0.208801f, -0.080569f, -0.247568f, -0.166312f, 0.033369f, -0.078556f, -0.115619f, 0.056838f, -0.068398f, -0.272655f, -0.209014f, -0.334706f, -0.566032f, -0.532922f, -0.511181f, -0.530908f, -0.466726f, -0.313499f, -0.245024f, -0.147382f, -0.028614f, 0.124819f, 0.221263f, 0.339596f, 0.428321f, 0.532075f, 0.553545f, + 0.587136f, 0.654107f, 0.620514f, 0.568948f, 0.538260f, 0.356562f, 0.125661f, 0.011914f, -0.053330f, -0.152348f, -0.179600f, -0.156789f, -0.177026f, -0.198825f, -0.175148f, -0.176912f, -0.173356f, -0.146394f, -0.142845f, -0.149888f, -0.144645f, -0.126657f, -0.105013f, -0.089748f, -0.058716f, -0.036427f, -0.007399f, 0.004176f, 0.026671f, 0.040534f, 0.050952f, 0.052874f, 0.055947f, 0.055462f, 0.043629f, 0.025511f, 0.019707f, 0.009943f, -0.002789f, -0.013343f, -0.016992f, -0.037551f, -0.049034f, -0.060562f, -0.080714f, -0.095071f, -0.089087f, -0.085797f, -0.076557f, -0.057424f, -0.040697f, -0.029892f, -0.007506f, 0.015903f, 0.031160f, 0.047355f, 0.073656f, 0.079669f, 0.078998f, 0.085470f, 0.093920f, 0.086919f, 0.090352f, 0.094864f, 0.089928f, 0.086496f, 0.086885f, 0.076861f, 0.066185f, 0.058372f, 0.044862f, 0.025477f, 0.011555f, -0.004888f, -0.026703f, -0.048744f, -0.064824f, -0.084072f, -0.095647f, -0.100697f, -0.099296f, -0.098160f, -0.089942f, -0.077835f, -0.065610f, -0.053128f, -0.037096f, -0.026195f, -0.014104f, -0.003967f, 0.005659f, 0.013649f, 0.020207f, 0.025718f, 0.029687f, 0.029093f, + 0.028530f, 0.025918f, 0.022534f, 0.019172f, 0.016886f, 0.013929f, 0.011336f, 0.008978f, 0.007552f, 0.005980f, 0.005189f, 0.004564f, 0.004154f, 0.003671f, 0.003361f, 0.003232f} + }, + { + {-0.015902f, 0.009482f, -0.012087f, 0.001522f, -0.005098f, -0.001557f, 0.004761f, -0.007472f, -0.013627f, -0.003444f, 0.001194f, -0.007785f, -0.004481f, 0.006680f, -0.003897f, 0.003120f, -0.017078f, -0.001416f, 0.011610f, 0.006221f, -0.019113f, -0.006539f, -0.004993f, -0.005031f, 0.006495f, -0.002738f, -0.009945f, -0.006208f, -0.007103f, -0.007200f, 0.012641f, 0.004002f, 0.008149f, -0.005207f, 0.010695f, 0.009762f, 0.006935f, -0.003779f, -0.009039f, -0.007054f, 0.000771f, 0.001870f, 0.014537f, 0.005212f, 0.002779f, -0.006775f, 0.001593f, 0.000694f, 0.001675f, 0.005823f, 0.003421f, -0.009790f, -0.008372f, -0.004262f, 0.005315f, 0.001307f, -0.001851f, -0.010468f, -0.003216f, 0.004208f, 0.004778f, -0.004179f, -0.001605f, 0.000311f, 0.005056f, -0.001015f, -0.005578f, 0.000083f, 0.000803f, -0.007114f, 0.015309f, 0.001041f, -0.010395f, 0.000063f, -0.001606f, 0.009909f, 0.000784f, 0.006733f, 0.009178f, 0.003525f, -0.000635f, 0.000524f, -0.003347f, -0.002095f, -0.002230f, 0.005916f, -0.001894f, -0.000675f, -0.002648f, 0.002093f, 0.000690f, -0.001051f, -0.000257f, -0.001445f, 0.000290f, -0.000142f, + 0.001166f, 0.001268f, 0.001931f, 0.002478f, -0.010566f, -0.009566f, 0.010754f, 0.009861f, -0.008056f, 0.005922f, 0.000553f, 0.003033f, -0.026355f, 0.010137f, -0.003957f, -0.018004f, -0.023474f, 0.000596f, 0.016891f, 0.000990f, 0.010935f, 0.000377f, -0.021237f, -0.007344f, 0.002394f, 0.007381f, -0.003780f, -0.001842f, -0.008970f, 0.001154f, -0.001669f, 0.014949f, 0.007563f, 0.003157f, 0.002638f, 0.004044f, 0.005151f, 0.013630f, 0.008226f, -0.012087f, -0.001074f, 0.002782f, 0.002869f, -0.014370f, 0.004618f, -0.004288f, -0.009126f, -0.002590f, -0.000435f, 0.009795f, 0.002473f, -0.005506f, 0.009890f, 0.015475f, -0.003334f, -0.005898f, 0.003696f, -0.001129f, 0.008420f, 0.008619f, 0.006711f, -0.010379f, -0.007939f, 0.007413f, -0.003189f, -0.002619f, -0.007999f, 0.000844f, -0.011855f, 0.007012f, 0.006280f, 0.008302f, 0.002085f, 0.009651f, -0.010514f, -0.006588f, 0.013528f, 0.000696f, 0.004984f, 0.016021f, 0.006145f, 0.001564f, -0.006511f, 0.009393f, 0.001079f, -0.004786f, 0.002638f, -0.011352f, 0.000271f, -0.001208f, 0.001638f, 0.003032f, -0.001345f, -0.005066f, -0.002821f, -0.000835f, + 0.002419f, 0.002303f, 0.000731f, -0.001408f, 0.001333f, 0.003191f, 0.000514f, -0.001071f, -0.001035f, 0.000014f, 0.013390f, 0.001185f, 0.005185f, -0.011272f, -0.009573f, 0.005481f, -0.002653f, -0.004123f, -0.005235f, -0.004899f, 0.004070f, -0.013045f, -0.007475f, -0.016110f, -0.019349f, -0.003584f, 0.016113f, 0.010384f, -0.006502f, -0.001816f, -0.002233f, -0.003754f, -0.013933f, 0.010036f, -0.003493f, -0.003585f, 0.000887f, 0.006558f, -0.003134f, 0.000577f, -0.000475f, 0.009499f, -0.008779f, 0.009528f, 0.005212f, 0.011424f, -0.003891f, 0.008837f, 0.003940f, -0.005477f, 0.007981f, -0.005416f, 0.004599f, 0.008466f, -0.006385f, 0.008891f, -0.005304f, -0.004299f, -0.001335f, -0.002644f, 0.004492f, -0.002603f, -0.006758f, 0.002709f, -0.005865f, 0.001277f, 0.000811f, 0.000903f, 0.013432f, 0.002595f, -0.003074f, 0.000062f, -0.005491f, -0.007693f, 0.003981f, -0.001865f, 0.012824f, 0.013048f, 0.005311f, -0.003643f, -0.002004f, -0.000111f, -0.005135f, -0.005976f, 0.006604f, 0.010336f, 0.000348f, -0.001146f, 0.006384f, 0.006852f, -0.000882f, 0.002407f, 0.002223f, -0.005015f, 0.004753f, -0.000929f, + 0.006816f, -0.003394f, -0.001286f, -0.000281f, -0.002814f, -0.000334f, 0.004970f, -0.001109f, 0.001517f, 0.001427f, -0.003486f, 0.001071f, -0.000627f, -0.000734f, 0.001432f, 0.001269f, -0.002225f, 0.002527f, -0.000849f, -0.001128f, 0.000204f, -0.000318f, -0.000404f, -0.002076f, -0.001500f, 0.000659f, 0.025549f, -0.010806f, 0.010476f, -0.013022f, -0.010951f, 0.000055f, -0.003037f, -0.002769f, 0.003563f, -0.005478f, 0.011051f, 0.010781f, 0.009238f, -0.002770f, -0.001201f, -0.004809f, -0.011788f, 0.001845f, -0.007080f, -0.001308f, 0.001297f, -0.003947f, 0.006722f, 0.002544f, -0.000803f, -0.019461f, -0.008121f, -0.012264f, 0.000464f, -0.008023f, -0.012334f, -0.005405f, -0.006814f, -0.007539f, 0.012285f, -0.009812f, 0.008661f, 0.000754f, -0.003481f, 0.004852f, 0.004170f, -0.008795f, -0.002407f, 0.000185f, 0.009488f, -0.000900f, -0.012965f, -0.016450f, -0.017124f, 0.004459f, -0.006254f, 0.000379f, -0.001355f, 0.002480f, 0.005792f, 0.009522f, -0.006574f, -0.003481f, 0.003136f, 0.003276f, 0.001222f, 0.011940f, -0.006678f, 0.007384f, -0.013713f, 0.026882f, 0.003307f, -0.002861f, 0.005228f, 0.002574f, + 0.005141f, -0.007473f, -0.001316f, 0.002041f, -0.000828f, -0.001609f, -0.013565f, -0.004511f, -0.009219f, -0.002745f, -0.001078f, -0.006649f, -0.006498f, 0.004828f, 0.005641f, 0.001718f, 0.001110f, -0.000622f, 0.004766f, 0.002800f, 0.005472f, -0.002742f, 0.000483f, 0.000167f, 0.005028f, -0.002019f, -0.000295f, -0.000309f, 0.000561f, -0.003983f, 0.000980f, -0.002884f, 0.001454f, 0.002004f, -0.000953f, -0.003355f, 0.000670f, 0.001028f, -0.001034f, -0.001159f, -0.003603f, 0.000945f, -0.000422f, -0.001846f, 0.002275f, 0.002610f, -0.000334f, -0.000771f, -0.012581f, 0.001734f, 0.002233f, 0.000748f, -0.002060f, -0.007562f, 0.004365f, 0.003484f, -0.011377f, 0.013181f, -0.016624f, 0.020322f, -0.002092f, 0.006733f, 0.002915f, -0.000492f, -0.002291f, 0.004123f, 0.019024f, 0.021373f, -0.004208f, 0.003790f, -0.002684f, -0.003115f, 0.002742f, 0.004485f, 0.014603f, -0.001933f, 0.004353f, -0.007508f, 0.007958f, 0.001726f, 0.011490f, 0.005554f, 0.010755f, -0.015719f, 0.006497f, 0.005650f, -0.005037f, -0.000219f, 0.011683f, -0.000003f, 0.000816f, 0.003535f, 0.007065f, -0.002484f, -0.001129f, 0.022694f, + 0.010714f, 0.001968f, 0.001961f, -0.004799f, 0.010216f, -0.013788f, -0.020252f, -0.024425f, -0.001613f, 0.012778f, -0.000508f, 0.006351f, 0.017219f, 0.006811f, -0.003185f, -0.006135f, 0.009125f, -0.001831f, 0.022171f, 0.009982f, 0.003187f, 0.003081f, -0.012285f, 0.002553f, 0.009064f, -0.004708f, -0.013819f, 0.002376f, 0.004805f, -0.000625f, -0.004882f, -0.001775f, 0.002206f, -0.004476f, 0.002451f, 0.002513f, 0.002201f, -0.000907f, 0.002559f, -0.004388f, -0.004197f, -0.001361f, -0.002712f, 0.001379f, -0.004214f, 0.002345f, 0.003877f, 0.002619f, 0.002892f, 0.003014f, 0.000822f, 0.001930f, -0.005765f, -0.004766f, -0.001907f, -0.002506f, -0.003077f, -0.000619f, 0.001752f, 0.001038f, -0.000340f, 0.003524f, 0.001778f, -0.000274f, 0.004313f, 0.002764f, -0.000150f, -0.029823f, 0.003066f, -0.002358f, 0.020259f, -0.015365f, 0.008823f, -0.031563f, 0.012259f, -0.003073f, -0.016158f, -0.017716f, -0.012450f, 0.009295f, 0.007210f, 0.023782f, 0.003039f, 0.007861f, 0.022724f, -0.004062f, -0.016761f, 0.002410f, -0.012948f, 0.003049f, 0.018499f, 0.003385f, -0.005362f, -0.002297f, -0.003705f, 0.005404f, + 0.007077f, -0.001609f, 0.004683f, 0.009531f, -0.006137f, 0.002973f, -0.011414f, -0.000940f, -0.014250f, -0.002275f, 0.001776f, -0.006750f, 0.010257f, 0.007048f, 0.008717f, 0.017624f, 0.000977f, 0.021342f, 0.016227f, 0.007869f, -0.011286f, 0.024488f, 0.010401f, 0.004261f, 0.021346f, -0.002408f, 0.000317f, 0.001745f, 0.006971f, -0.004531f, -0.006451f, -0.014782f, -0.014435f, -0.011682f, -0.000046f, -0.009226f, 0.018694f, -0.011417f, 0.007628f, 0.011740f, -0.006797f, 0.000565f, -0.005593f, -0.003204f, -0.018726f, -0.021260f, 0.009518f, -0.003738f, -0.007310f, -0.006331f, 0.001622f, 0.002447f, 0.001242f, 0.004120f, -0.007612f, 0.017321f, 0.001024f, 0.005186f, -0.003758f, 0.000933f, 0.004966f, -0.008492f, 0.002649f, 0.000295f, 0.002719f, 0.003905f, -0.000231f, 0.003045f, 0.005719f, -0.000014f, 0.001496f, 0.004246f, 0.004499f, 0.006117f, -0.000477f, 0.001030f, -0.003365f, -0.000897f, 0.000091f, -0.001488f, -0.004674f, 0.000299f, -0.001511f, -0.001939f, 0.000257f, -0.001812f, -0.002595f, 0.024827f, 0.000906f, 0.000261f, -0.002342f, -0.004900f, 0.004425f, 0.000995f, -0.012732f, -0.016300f, + -0.022082f, -0.011588f, -0.023103f, -0.014701f, -0.007900f, -0.017102f, -0.010837f, -0.007503f, -0.008916f, -0.023106f, 0.015774f, 0.009870f, 0.000537f, 0.008297f, 0.003781f, -0.006450f, 0.028588f, 0.001716f, -0.009947f, -0.005244f, -0.019464f, -0.008398f, 0.021275f, 0.000988f, -0.017947f, -0.017939f, 0.002555f, -0.018158f, 0.005751f, 0.006298f, -0.014158f, 0.000505f, 0.004355f, 0.000947f, 0.020937f, 0.006233f, -0.009639f, 0.002065f, -0.011546f, 0.010540f, 0.001454f, 0.004636f, -0.025722f, 0.017645f, -0.008876f, 0.007318f, 0.000540f, 0.003375f, 0.004159f, 0.000603f, -0.007531f, -0.000650f, -0.010079f, -0.000039f, -0.020293f, -0.000173f, -0.021888f, 0.028720f, -0.004952f, 0.018249f, -0.013524f, -0.006360f, -0.002951f, -0.013960f, -0.007820f, 0.011180f, -0.000464f, -0.000496f, 0.008274f, 0.010743f, 0.001671f, 0.017585f, 0.015217f, 0.021161f, 0.011243f, 0.004444f, 0.002527f, 0.009570f, 0.005084f, 0.003138f, 0.003857f, 0.002113f, 0.004667f, -0.001405f, 0.007665f, 0.001280f, -0.000563f, -0.001697f, 0.005955f, 0.002377f, 0.004219f, 0.002077f, -0.002897f, 0.001983f, 0.002309f, 0.001920f, + -0.004732f, 0.008816f, 0.004724f, -0.000942f, -0.006863f, -0.000824f, -0.001095f, -0.004965f, 0.001705f, 0.000802f, 0.004986f, -0.004249f, -0.009455f, -0.012665f, 0.000039f, 0.009478f, -0.024410f, 0.000085f, -0.010500f, -0.008386f, 0.017443f, -0.028168f, -0.026603f, 0.007052f, 0.035687f, 0.001007f, 0.003477f, 0.002832f, -0.005333f, 0.019587f, 0.019018f, 0.011029f, 0.005462f, -0.005037f, -0.028842f, 0.017247f, 0.000239f, -0.023086f, -0.007387f, 0.005471f, -0.001079f, 0.000289f, 0.002462f, -0.005487f, -0.022734f, -0.001191f, 0.001026f, -0.004078f, -0.009445f, 0.006945f, 0.019891f, -0.025449f, 0.015984f, -0.009482f, -0.004718f, 0.001612f, 0.012702f, 0.041600f, -0.026750f, -0.006671f, 0.002727f, -0.002568f, -0.004821f, 0.001466f, -0.010199f, 0.003675f, -0.009202f, 0.028630f, 0.009905f, 0.005440f, 0.007967f, -0.005937f, -0.001555f, 0.015199f, -0.002281f, 0.006659f, -0.012467f, 0.022001f, 0.001067f, -0.015413f, 0.030731f, -0.019429f, 0.014200f, 0.004115f, 0.007051f, 0.022377f, -0.008788f, 0.009583f, -0.000991f, 0.000139f, 0.002780f, -0.001396f, -0.014947f, -0.007872f, -0.000873f, -0.006552f, + -0.002266f, -0.003527f, -0.009131f, -0.009331f, -0.006986f, 0.004494f, -0.007984f, 0.004754f, -0.002064f, -0.000231f, -0.006993f, -0.004749f, -0.005134f, 0.004271f, -0.009691f, 0.001086f, 0.001045f, 0.006046f, 0.009397f, -0.003542f, -0.001671f, -0.008266f, -0.007051f, 0.000608f, -0.006192f, 0.001878f, -0.001067f, -0.005460f, 0.000205f, -0.001578f, 0.002634f, 0.003460f, -0.002236f, 0.030311f, 0.002326f, 0.007869f, 0.008961f, -0.005129f, -0.017522f, -0.013752f, 0.002055f, 0.030321f, 0.017171f, 0.003691f, -0.027200f, 0.003866f, -0.014979f, 0.000042f, 0.030343f, 0.029174f, 0.014720f, 0.019705f, -0.017862f, -0.036957f, -0.019366f, -0.026650f, 0.014710f, -0.000313f, -0.004536f, -0.000152f, -0.020170f, -0.006027f, 0.006189f, -0.003834f, -0.007688f, -0.007493f, 0.021491f, -0.001443f, 0.005820f, -0.006172f, 0.014078f, 0.002940f, -0.008182f, -0.017174f, -0.013190f, 0.038921f, -0.001715f, -0.008865f, 0.012416f, -0.022324f, 0.006948f, -0.012800f, -0.038949f, -0.008784f, -0.005099f, 0.011723f, 0.004476f, 0.010292f, 0.003250f, 0.015343f, 0.000541f, 0.001014f, 0.008489f, -0.038088f, -0.006044f, -0.010273f, + -0.002752f, 0.003636f, 0.021804f, 0.024071f, 0.008661f, -0.006372f, -0.016672f, -0.021914f, -0.007373f, -0.012918f, 0.002720f, -0.006456f, -0.006849f, -0.015113f, 0.022486f, 0.016170f, 0.006563f, 0.020649f, -0.004966f, 0.008209f, 0.012668f, -0.008152f, 0.007532f, -0.005275f, 0.001622f, 0.007490f, -0.002333f, -0.005074f, -0.002116f, -0.002832f, -0.002001f, -0.000242f, 0.000477f, 0.007417f, 0.000268f, 0.000824f, 0.002267f, -0.004229f, -0.011545f, 0.000393f, -0.002717f, -0.001567f, -0.002116f, -0.006848f, -0.000801f, 0.002183f, 0.010207f, 0.008339f, -0.004782f, 0.001105f, 0.006706f, -0.001505f, 0.001520f, -0.002502f, 0.001515f, 0.006382f, 0.000783f, 0.007009f, -0.043964f, -0.028743f, -0.006650f, -0.010463f, 0.022471f, 0.015438f, -0.003677f, 0.038692f, -0.039090f, -0.009109f, -0.014748f, 0.041327f, 0.019832f, -0.013571f, 0.015242f, 0.005804f, -0.016073f, 0.028545f, -0.031463f, 0.015591f, -0.014484f, 0.002471f, 0.003442f, -0.010495f, 0.027566f, -0.019356f, 0.016932f, -0.008055f, -0.040531f, -0.006715f, 0.028332f, -0.017135f, -0.027669f, 0.000390f, -0.003440f, -0.041407f, -0.007733f, 0.016631f, + 0.007060f, 0.022101f, 0.016256f, -0.004668f, 0.039852f, -0.009523f, -0.012257f, -0.019583f, -0.018233f, -0.017636f, 0.010947f, 0.014888f, -0.012815f, -0.014457f, 0.004783f, -0.012539f, 0.016715f, -0.004592f, 0.009077f, -0.006776f, -0.010349f, -0.007944f, -0.000220f, -0.023438f, 0.006357f, 0.016913f, -0.003946f, 0.007318f, 0.010167f, 0.012010f, 0.021650f, -0.015486f, 0.006968f, 0.016881f, -0.002170f, -0.035949f, -0.038265f, 0.004216f, -0.003634f, 0.002845f, -0.014003f, -0.005817f, 0.002824f, -0.013862f, -0.025147f, -0.007685f, 0.018982f, 0.015398f, -0.007564f, -0.003068f, 0.005842f, 0.005203f, -0.002995f, -0.006114f, 0.000455f, -0.000811f, -0.009889f, -0.003670f, 0.010508f, -0.003029f, 0.008442f, 0.001518f, -0.002630f, -0.005182f, 0.006780f, 0.006680f, 0.007847f, 0.000933f, -0.004411f, 0.004549f, -0.011784f, -0.007077f, 0.005803f, 0.002702f, 0.004978f, 0.009163f, -0.004692f, 0.001890f, 0.003595f, 0.004461f, 0.000851f, -0.005393f, -0.007739f, 0.003444f, -0.004218f, -0.002593f, 0.031254f, -0.020165f, -0.050416f, -0.000046f, 0.035501f, 0.045386f, 0.008278f, -0.017096f, -0.012882f, 0.004428f, + -0.008400f, -0.007475f, 0.019812f, 0.020087f, -0.010222f, 0.019373f, -0.025139f, -0.003308f, 0.017717f, -0.009026f, 0.021506f, 0.009976f, -0.003260f, -0.030183f, 0.011206f, -0.007263f, -0.007353f, 0.001275f, -0.002475f, -0.003448f, 0.040815f, -0.020445f, 0.020716f, 0.034921f, 0.024164f, 0.012580f, 0.000220f, -0.023516f, 0.023025f, -0.013284f, 0.021927f, -0.012768f, 0.004885f, -0.024711f, -0.004943f, -0.023371f, -0.015408f, 0.003228f, -0.021737f, -0.006227f, -0.007728f, -0.001164f, 0.018916f, -0.022838f, -0.019634f, -0.007363f, -0.011374f, -0.004861f, -0.019465f, -0.025136f, -0.031334f, 0.002854f, 0.023896f, -0.001961f, -0.015559f, 0.002295f, 0.004915f, 0.018883f, -0.021323f, -0.012363f, -0.006962f, -0.000825f, 0.014151f, -0.000032f, 0.003803f, -0.014833f, -0.006289f, 0.007308f, 0.028912f, 0.012782f, 0.019916f, 0.023134f, 0.030216f, 0.011581f, -0.004312f, -0.010951f, 0.007235f, 0.009149f, 0.013254f, 0.005566f, 0.001131f, -0.000139f, 0.018292f, 0.006460f, -0.006981f, 0.001331f, 0.010201f, 0.004047f, 0.002368f, -0.006900f, -0.006760f, -0.004847f, -0.009349f, 0.000506f, 0.008579f, 0.008254f, + 0.001713f, -0.005072f, 0.012024f, 0.006915f, 0.015267f, 0.007941f, 0.000333f, 0.010215f, 0.000008f, -0.008102f, 0.011682f, -0.000186f, -0.001724f, -0.004595f, 0.002216f, -0.002918f, -0.000358f, 0.010238f, 0.005946f, -0.084131f, -0.039994f, 0.028073f, -0.068702f, -0.047617f, -0.003074f, -0.028022f, -0.019224f, 0.020975f, 0.023971f, 0.007358f, -0.004413f, 0.008698f, 0.068602f, -0.008394f, 0.010969f, 0.026431f, 0.030094f, -0.031269f, -0.016245f, -0.014796f, 0.025324f, 0.027676f, 0.013884f, 0.005117f, 0.025888f, -0.007581f, -0.012985f, 0.018218f, 0.035039f, 0.002530f, 0.011318f, 0.035683f, 0.026289f, 0.021481f, -0.016007f, 0.006795f, 0.010793f, -0.000024f, -0.000593f, 0.022927f, -0.007507f, -0.000312f, -0.002320f, 0.015332f, 0.000568f, -0.024973f, -0.016754f, 0.005074f, -0.033985f, 0.025802f, -0.007552f, 0.056940f, 0.002264f, 0.031258f, 0.006185f, -0.001300f, -0.018345f, -0.000818f, 0.007290f, -0.023990f, -0.012384f, -0.028034f, -0.003553f, 0.014443f, 0.019581f, -0.008474f, -0.045731f, 0.016635f, -0.007269f, 0.015671f, -0.016399f, -0.019519f, 0.014356f, -0.029552f, -0.022669f, 0.044216f, + 0.000661f, 0.020401f, -0.004160f, -0.019045f, 0.005309f, 0.026072f, 0.006336f, 0.020750f, -0.033499f, -0.001592f, -0.002268f, -0.005480f, -0.028798f, 0.028194f, -0.016766f, 0.002136f, -0.003279f, 0.003468f, -0.010675f, -0.000972f, 0.005916f, 0.008694f, -0.007121f, 0.018500f, -0.004532f, -0.005811f, -0.010781f, -0.009130f, -0.009301f, 0.008938f, -0.003570f, -0.006428f, -0.002718f, 0.002429f, -0.007071f, 0.012969f, -0.003835f, 0.014669f, -0.009118f, 0.006283f, 0.002276f, 0.005920f, 0.009466f, 0.002020f, 0.033962f, -0.015711f, -0.039628f, 0.016776f, -0.020771f, 0.008480f, -0.000680f, -0.019805f, 0.036168f, -0.048732f, -0.002160f, -0.058795f, 0.001277f, 0.047238f, 0.066148f, 0.031216f, -0.011540f, 0.030502f, -0.002480f, -0.004401f, 0.003144f, -0.005346f, 0.016152f, -0.002163f, -0.031182f, 0.001672f, -0.043274f, 0.015039f, -0.013497f, -0.009761f, 0.028768f, -0.000731f, -0.033310f, -0.037215f, 0.008445f, 0.004977f, -0.018624f, -0.015534f, 0.027615f, -0.040331f, -0.000367f, -0.008252f, 0.014033f, -0.010930f, -0.008868f, -0.032293f, -0.013817f, -0.014337f, -0.006151f, 0.023032f, -0.027643f, 0.009751f, + -0.003503f, -0.004912f, 0.003458f, 0.009846f, -0.046689f, -0.005097f, 0.006160f, -0.004256f, 0.017069f, -0.014808f, -0.020716f, -0.009526f, -0.052226f, -0.023120f, -0.022854f, 0.000940f, 0.022082f, 0.033327f, -0.015988f, 0.025181f, -0.043574f, 0.069451f, 0.004624f, -0.012656f, 0.036264f, -0.043345f, 0.036398f, 0.016176f, -0.009925f, 0.000597f, 0.012045f, 0.000804f, 0.005689f, 0.033124f, -0.014388f, 0.014037f, -0.007861f, 0.010108f, 0.016452f, 0.016178f, 0.019831f, -0.007062f, 0.016697f, 0.003796f, 0.002376f, -0.002978f, -0.022577f, 0.000669f, -0.016065f, 0.007147f, 0.010175f, -0.003637f, -0.002646f, 0.002804f, 0.002116f, 0.011025f, 0.005026f, -0.008320f, 0.012015f, -0.000348f, 0.001280f, 0.014839f, 0.010125f, 0.005821f, 0.027141f, -0.022623f, 0.000015f, 0.009790f, -0.000123f, -0.017816f, 0.004125f, -0.011400f, -0.010726f, 0.042748f, 0.002474f, -0.030433f, -0.000629f, -0.004558f, 0.019856f, 0.013112f, -0.018548f, 0.021543f, 0.000446f, -0.047925f, -0.052203f, -0.004937f, -0.015688f, 0.013109f, -0.002192f, -0.018382f, -0.047048f, -0.041013f, 0.022462f, -0.034883f, -0.007794f, 0.002293f, + 0.011116f, 0.002698f, 0.033633f, 0.002902f, -0.016929f, 0.022590f, -0.002941f, 0.003383f, 0.020825f, -0.027281f, -0.001748f, 0.006033f, -0.027889f, 0.017041f, 0.023260f, 0.010222f, 0.020703f, 0.010892f, 0.032038f, 0.008838f, 0.023337f, -0.032616f, -0.010170f, -0.005113f, -0.043877f, -0.000126f, -0.004703f, 0.018498f, -0.002894f, 0.021189f, -0.003466f, -0.025382f, -0.017311f, -0.001202f, -0.040580f, 0.017928f, 0.001169f, -0.007778f, 0.023803f, 0.015166f, 0.019781f, 0.020596f, 0.006314f, -0.002341f, 0.017279f, -0.054968f, 0.016755f, 0.007055f, 0.024710f, -0.009621f, -0.038846f, 0.024611f, -0.005831f, 0.042212f, -0.062042f, -0.021985f, -0.043436f, 0.029872f, -0.012636f, -0.039845f, -0.044509f, -0.029229f, -0.013141f, 0.014319f, 0.011220f, -0.012106f, -0.012622f, -0.006532f, -0.000763f, -0.013382f, -0.005079f, 0.022846f, 0.003566f, -0.002056f, 0.006714f, 0.005088f, 0.004207f, 0.012457f, -0.009531f, -0.012560f, -0.000285f, -0.021907f, 0.000032f, -0.007617f, -0.003110f, -0.014102f, -0.003803f, -0.019287f, -0.017339f, 0.022100f, -0.012260f, -0.000682f, 0.007424f, 0.010701f, -0.001838f, 0.018562f, + -0.015330f, -0.004856f, 0.007656f, -0.017986f, -0.004937f, 0.021278f, 0.007628f, 0.004846f, -0.007225f, -0.010838f, 0.008200f, 0.029075f, 0.026952f, 0.098831f, 0.074660f, 0.010030f, 0.021588f, 0.006180f, 0.057347f, 0.001482f, 0.027874f, -0.026186f, 0.067940f, -0.027044f, 0.061608f, -0.002876f, 0.039329f, -0.004690f, 0.027736f, -0.027763f, 0.006594f, 0.013787f, -0.015231f, -0.005064f, -0.008214f, -0.006490f, 0.018334f, 0.000336f, -0.015943f, -0.021975f, -0.033075f, -0.042085f, -0.020250f, -0.007173f, 0.000194f, 0.013109f, -0.035429f, 0.014891f, -0.019523f, -0.030130f, -0.006301f, -0.022042f, 0.009969f, -0.005449f, -0.046075f, -0.011051f, -0.023450f, -0.027836f, -0.029170f, 0.026351f, 0.035295f, -0.074005f, 0.016725f, 0.006469f, 0.020720f, 0.007227f, -0.009354f, 0.044616f, 0.025123f, 0.023301f, -0.061879f, -0.027776f, -0.000838f, 0.015155f, 0.051187f, 0.001824f, -0.006944f, 0.002386f, 0.043365f, 0.038876f, -0.036943f, 0.041609f, 0.003081f, 0.009270f, -0.007065f, 0.024377f, -0.052641f, -0.018536f, 0.054247f, -0.008426f, -0.003528f, -0.020994f, 0.036176f, 0.023540f, -0.018702f, -0.031756f, + -0.005454f, -0.001461f, 0.003221f, 0.000372f, -0.006762f, -0.029612f, -0.010084f, 0.022909f, 0.030182f, 0.018603f, -0.016645f, -0.004508f, -0.004857f, -0.014376f, 0.004656f, 0.004670f, 0.013972f, -0.003169f, -0.009824f, 0.008624f, 0.003407f, 0.005158f, 0.027345f, 0.003607f, -0.007563f, -0.010484f, 0.004738f, 0.009702f, 0.021311f, 0.004171f, -0.020635f, -0.011156f, -0.015481f, 0.006062f, 0.007977f, -0.017209f, -0.036383f, 0.011685f, -0.002926f, -0.006230f, -0.012678f, -0.022544f, 0.027235f, -0.010672f, 0.023743f, 0.036882f, -0.041508f, 0.012988f, -0.023680f, 0.069425f, -0.040984f, 0.039253f, 0.036202f, -0.013683f, -0.064710f, -0.037649f, -0.004189f, -0.017182f, -0.001842f, -0.029651f, -0.047114f, -0.062747f, -0.035905f, -0.041765f, 0.018138f, -0.035716f, 0.014987f, 0.004300f, -0.004019f, -0.003655f, -0.029358f, -0.009063f, -0.030162f, 0.008923f, 0.027132f, 0.035452f, 0.000740f, -0.009904f, -0.030962f, -0.007365f, 0.003190f, -0.018430f, 0.005372f, -0.025437f, -0.016507f, -0.003608f, -0.025197f, 0.020057f, -0.022242f, -0.065922f, 0.002549f, -0.002002f, -0.021685f, 0.028153f, 0.022124f, 0.032074f, + 0.012392f, 0.025246f, 0.051096f, 0.008619f, -0.050633f, -0.011538f, 0.023972f, -0.011117f, -0.042071f, 0.023608f, 0.033528f, 0.011308f, -0.000135f, -0.056997f, 0.051061f, -0.002387f, 0.041695f, -0.034473f, 0.042223f, 0.103263f, -0.009033f, -0.002912f, -0.050314f, 0.027203f, -0.040909f, 0.034658f, 0.017688f, -0.022521f, -0.004945f, -0.055684f, 0.012950f, -0.030339f, 0.000586f, 0.021513f, 0.021601f, -0.000700f, -0.014300f, -0.012379f, 0.015435f, 0.037794f, -0.018205f, -0.002870f, 0.005912f, -0.016366f, -0.004675f, -0.005110f, 0.008034f, -0.001740f, 0.015963f, -0.007161f, -0.017979f, -0.009957f, 0.005603f, 0.014370f, -0.017794f, -0.005480f, -0.000152f, 0.002569f, 0.013448f, 0.002988f, -0.004376f, 0.004865f, -0.030279f, -0.017306f, -0.001705f, -0.002669f, 0.006492f, 0.001933f, 0.002651f, -0.000422f, -0.005065f, 0.015684f, -0.000633f, 0.011739f, -0.000545f, -0.003177f, -0.011019f, -0.007534f, -0.081289f, 0.027438f, -0.106585f, 0.070183f, 0.025047f, -0.018312f, 0.074797f, -0.007319f, -0.038295f, 0.066343f, -0.025723f, -0.003733f, 0.013919f, 0.023135f, 0.061302f, 0.002395f, -0.005131f, 0.043269f, + 0.018282f, 0.036322f, 0.044461f, 0.032975f, 0.002929f, 0.023022f, 0.003531f, -0.002417f, -0.024539f, 0.015538f, 0.023276f, 0.005569f, -0.001523f, -0.026441f, 0.012537f, -0.024773f, 0.029609f, 0.029256f, 0.004991f, 0.034583f, -0.021452f, 0.022812f, 0.035833f, 0.022863f, -0.048596f, -0.052183f, 0.061154f, -0.005991f, 0.038217f, 0.059431f, 0.001317f, 0.000016f, -0.006283f, 0.011659f, 0.034278f, 0.032616f, 0.003324f, 0.027094f, -0.000067f, -0.030967f, -0.038707f, -0.057233f, 0.000927f, -0.023247f, 0.000742f, 0.032421f, 0.030291f, -0.053528f, 0.004516f, 0.020761f, -0.047024f, 0.007799f, 0.065235f, -0.028320f, -0.032660f, 0.035066f, -0.037757f, 0.008691f, -0.010667f, 0.068511f, -0.019991f, 0.042328f, -0.021068f, 0.035581f, -0.003418f, 0.013239f, 0.028341f, -0.044720f, -0.013706f, 0.017076f, -0.029718f, 0.021765f, -0.026681f, -0.007330f, -0.015102f, -0.013655f, 0.001841f, -0.007313f, -0.012276f, 0.007219f, 0.020284f, -0.010197f, 0.005486f, 0.007495f, -0.017749f, 0.003192f, 0.002335f, -0.004471f, -0.012575f, -0.005076f, -0.009731f, -0.028659f, -0.011495f, 0.006264f, -0.037830f, 0.013771f, + -0.019427f, 0.014681f, -0.008870f, -0.003538f, -0.026554f, -0.013709f, 0.000243f, 0.007452f, -0.011770f, -0.025678f, 0.004224f, 0.001909f, 0.013780f, 0.006110f, -0.000046f, 0.016958f, 0.013395f, 0.001599f, 0.011496f, 0.007974f, -0.036967f, 0.008506f, -0.042863f, 0.088755f, 0.021932f, -0.047068f, 0.018201f, -0.010765f, -0.041887f, -0.049385f, -0.050132f, 0.015117f, -0.002272f, 0.044632f, 0.066079f, 0.031873f, 0.016165f, -0.007767f, 0.022079f, 0.002303f, -0.082698f, 0.036569f, 0.086306f, -0.056168f, -0.059057f, -0.050978f, -0.072232f, 0.052584f, -0.071126f, 0.032299f, 0.000635f, -0.008723f, -0.000298f, -0.022968f, -0.027421f, 0.035582f, -0.073195f, 0.075601f, 0.043421f, 0.010201f, -0.048116f, -0.036281f, -0.031825f, 0.006946f, 0.012729f, -0.031037f, -0.004198f, -0.022869f, 0.052045f, 0.023723f, -0.009265f, -0.001387f, 0.021459f, 0.004981f, 0.024474f, -0.042279f, -0.016724f, -0.003886f, -0.007436f, -0.039316f, -0.027715f, 0.023646f, -0.075044f, -0.044140f, 0.005789f, 0.088004f, 0.042443f, -0.026584f, -0.001737f, -0.066591f, 0.032541f, 0.102047f, 0.003653f, -0.021737f, -0.015267f, -0.047946f, + 0.062793f, -0.020013f, -0.024204f, -0.001949f, 0.037233f, 0.023526f, -0.032226f, -0.028930f, -0.010362f, 0.032928f, -0.008710f, 0.009755f, -0.002528f, -0.025858f, -0.008409f, 0.041675f, 0.023799f, 0.003555f, -0.019245f, -0.002924f, -0.002902f, 0.032530f, 0.026387f, 0.013343f, 0.011929f, -0.038253f, 0.014706f, 0.013977f, -0.005733f, 0.008863f, -0.005994f, -0.005343f, -0.033615f, -0.003425f, -0.001711f, -0.004615f, -0.010721f, 0.009164f, 0.012342f, 0.006621f, -0.039543f, -0.033888f, -0.016764f, 0.000030f, 0.002413f, -0.039755f, 0.014234f, 0.050295f, 0.010112f, -0.013770f, 0.000944f, 0.007918f, 0.000159f, -0.021616f, -0.016582f, -0.005542f, 0.006802f, 0.000358f, -0.040953f, -0.028140f, -0.082122f, 0.018253f, -0.060436f, -0.090512f, 0.021593f, 0.050427f, 0.012622f, 0.013715f, -0.038143f, -0.047813f, -0.012212f, -0.070957f, -0.034712f, 0.018826f, -0.059305f, 0.094087f, 0.018553f, -0.022840f, 0.020462f, -0.044763f, -0.088624f, -0.029608f, -0.067715f, 0.011002f, 0.020150f, -0.024741f, -0.048078f, -0.024330f, -0.029552f, 0.026276f, -0.035192f, -0.012761f, -0.004317f, 0.040348f, -0.028764f, -0.005135f, + -0.013298f, 0.010433f, 0.017077f, 0.003221f, -0.011721f, 0.041600f, 0.054485f, 0.034809f, -0.027457f, -0.022590f, -0.079417f, -0.044218f, -0.017929f, 0.021250f, 0.134219f, -0.022752f, 0.001869f, 0.059752f, -0.005119f, 0.025516f, -0.030170f, -0.031597f, -0.025350f, 0.028401f, -0.075316f, 0.000675f, -0.009732f, -0.000867f, 0.065721f, -0.028678f, 0.099338f, 0.008853f, 0.075351f, -0.095583f, -0.028400f, 0.027755f, -0.001607f, -0.041438f, -0.034680f, 0.077710f, -0.079742f, -0.065966f, 0.095559f, 0.016844f, 0.083008f, -0.032801f, -0.005211f, -0.005696f, 0.026915f, 0.011431f, -0.007291f, 0.028209f, 0.028511f, -0.001485f, 0.013567f, 0.008928f, 0.003279f, -0.009757f, -0.017520f, -0.004030f, -0.011492f, -0.015764f, 0.015004f, 0.008568f, -0.013074f, 0.009608f, -0.028913f, -0.002865f, 0.020945f, 0.036057f, -0.002584f, -0.022709f, -0.001413f, -0.025855f, 0.015103f, 0.024770f, -0.016965f, -0.014215f, 0.014229f, 0.016511f, -0.036609f, 0.013200f, 0.001949f, 0.024072f, -0.015383f, -0.016214f, 0.000143f, 0.007610f, 0.011547f, -0.041590f, 0.007078f, -0.017648f, 0.033290f, -0.011542f, -0.007413f, -0.004818f, + -0.082079f, 0.039210f, 0.060392f, -0.043662f, -0.035850f, -0.012225f, -0.039383f, -0.047513f, 0.012813f, 0.014125f, 0.037076f, 0.001676f, 0.032416f, 0.057514f, 0.060092f, 0.039835f, 0.013899f, -0.043939f, 0.004453f, 0.022894f, 0.030468f, 0.046649f, 0.000631f, -0.024114f, -0.034966f, -0.013248f, 0.047430f, -0.019391f, 0.018747f, 0.041087f, 0.004198f, 0.080724f, 0.009460f, -0.051525f, 0.044686f, 0.043969f, 0.012845f, 0.018953f, 0.040969f, 0.006509f, 0.003627f, -0.047303f, 0.102324f, -0.108914f, -0.079879f, -0.092914f, -0.030576f, 0.019195f, -0.054425f, 0.028022f, 0.061108f, -0.018101f, 0.006154f, 0.053688f, 0.017352f, -0.058250f, -0.020018f, -0.045094f, -0.006268f, 0.003309f, 0.003159f, 0.051895f, 0.051268f, -0.011793f, -0.012695f, 0.032574f, 0.078844f, 0.013589f, 0.064905f, -0.054627f, 0.057719f, -0.025297f, 0.019274f, -0.011574f, -0.036480f, -0.025609f, -0.005601f, 0.025955f, 0.016166f, 0.064087f, -0.082822f, 0.042174f, -0.032642f, -0.020609f, -0.015965f, 0.030654f, -0.014415f, -0.002998f, 0.006910f, -0.033419f, 0.021081f, -0.016422f, -0.000907f, -0.025412f, 0.008036f, -0.005258f, + 0.001334f, -0.028614f, 0.004447f, -0.002768f, 0.005909f, -0.002948f, -0.030807f, 0.012224f, -0.017450f, -0.016270f, -0.007096f, 0.022949f, 0.027019f, 0.029411f, -0.025168f, 0.050693f, -0.038123f, -0.011777f, 0.003138f, -0.004365f, -0.028113f, -0.015459f, -0.001408f, -0.021484f, 0.006308f, -0.001989f, -0.000689f, -0.002773f, -0.020771f, 0.002457f, -0.003269f, -0.001214f, -0.046523f, -0.093573f, -0.094181f, -0.068173f, 0.013957f, 0.174883f, 0.044180f, -0.024158f, -0.052912f, -0.126427f, -0.177815f, 0.040106f, 0.073607f, 0.088360f, -0.018628f, 0.007626f, -0.052160f, -0.090733f, 0.026123f, 0.016430f, 0.029484f, 0.004226f, -0.076090f, -0.023280f, 0.018555f, -0.015334f, -0.003031f, -0.014433f, 0.099076f, 0.086983f, 0.058652f, -0.005417f, -0.042571f, -0.072296f, -0.047857f, -0.043283f, 0.067665f, -0.011269f, 0.049504f, 0.022351f, 0.023165f, -0.030509f, -0.164711f, -0.113434f, 0.055951f, -0.089271f, -0.030483f, 0.189937f, 0.130601f, 0.098102f, -0.074448f, 0.053705f, -0.051577f, 0.003708f, 0.003733f, 0.027511f, 0.080551f, 0.141969f, -0.054423f, -0.005132f, -0.093698f, -0.075737f, -0.123990f, 0.013382f, + -0.005163f, -0.133528f, -0.032017f, 0.085889f, 0.032078f, 0.059924f, 0.081279f, 0.146472f, -0.106808f, -0.064156f, 0.008423f, -0.087225f, -0.011285f, 0.048642f, 0.114100f, 0.057949f, 0.017767f, -0.069752f, -0.066851f, 0.044996f, -0.019081f, 0.067184f, 0.059085f, -0.016066f, 0.027032f, 0.010788f, -0.011452f, -0.022485f, -0.013106f, -0.008547f, 0.020015f, 0.005722f, -0.000595f, 0.006887f, -0.002172f, 0.009600f, 0.000176f, 0.042461f, 0.034912f, 0.055380f, 0.009901f, -0.030617f, -0.064314f, -0.052581f, 0.021239f, 0.049741f, 0.057015f, -0.007291f, -0.036629f, -0.147824f, -0.076030f, -0.070051f, 0.001541f, 0.007349f, 0.014949f, -0.000663f, 0.010848f, -0.016866f, -0.000240f, -0.024896f, -0.022303f, 0.031087f, 0.027377f, 0.015869f, 0.015985f, 0.007977f, 0.003476f, 0.006941f, 0.043263f, -0.070326f, -0.232775f, -0.216605f, -0.124357f, -0.135223f, -0.033755f, 0.224153f, 0.113859f, 0.230622f, 0.204630f, 0.320801f, 0.229080f, 0.197076f, 0.031754f, -0.085573f, -0.193478f, -0.309970f, -0.263274f, -0.265109f, -0.138604f, -0.066519f, -0.015671f, 0.002210f, 0.007570f, 0.054730f, 0.073093f, 0.184475f, + 0.111978f, 0.217703f, 0.141762f, 0.186619f, 0.067462f, 0.180324f, 0.062588f, 0.044125f, 0.042619f, -0.010712f, -0.050677f, -0.122047f, -0.140917f, -0.261477f, -0.179194f, -0.331342f, -0.262232f, -0.402151f, -0.238502f, -0.189175f, -0.045717f, 0.110550f, 0.058717f, 0.009963f, 0.110265f, 0.235860f, 0.314960f, 0.413071f, 0.492264f, 0.421318f, 0.307681f, 0.383828f, 0.316586f, 0.177560f, 0.079760f, -0.019632f, -0.132108f, -0.305422f, -0.362895f, -0.485822f, -0.627396f, -0.725912f, -0.655206f, -0.577330f, -0.411012f, -0.280497f, 0.085879f, 0.270683f, 0.329740f, 0.507984f, 0.423993f, 0.529774f, 0.556596f, 0.546180f, 0.629450f, 0.413361f, 0.107273f, -0.103930f, -0.201838f, -0.249607f, -0.161776f, -0.233753f, -0.200589f, -0.233934f, -0.316835f, -0.320257f, -0.373074f, -0.220726f, -0.172028f, -0.146453f, -0.082011f, -0.004835f, 0.021925f, 0.090738f, 0.245843f, 0.259295f, 0.367850f, 0.320443f, 0.420717f, 0.309611f, 0.206696f, 0.213542f, 0.081268f, -0.055772f, -0.091419f, -0.405660f, -0.523332f, -0.487013f, -0.430024f, -0.251515f, -0.197641f, -0.107798f, 0.009407f, 0.109975f, 0.167166f, 0.227612f, + 0.271340f, 0.323039f, 0.306404f, 0.290052f, 0.255051f, 0.142948f, -0.000559f, -0.071733f, -0.168226f, -0.175549f, -0.150706f, -0.122519f, -0.128137f, -0.129166f, -0.101815f, -0.072423f, -0.043044f, -0.017112f, -0.016076f, -0.010582f, 0.004417f, -0.010970f, -0.013788f, 0.019870f, 0.043324f, 0.049371f, 0.032707f, 0.025410f, 0.038991f, 0.049881f, 0.039200f, 0.047594f, 0.062561f, 0.076384f, 0.064983f, 0.015749f, -0.007693f, -0.002733f, -0.003259f, -0.021075f, -0.018254f, -0.012758f, -0.029404f, -0.048270f, -0.060796f, -0.057696f, -0.050808f, -0.040841f, -0.033893f, -0.019498f, -0.007762f, -0.004352f, -0.001928f, 0.009301f, 0.018777f, 0.024918f, 0.026997f, 0.028817f, 0.023413f, 0.019272f, 0.018756f, 0.012283f, 0.002715f, 0.006088f, 0.007461f, 0.002736f, -0.002870f, -0.004533f, -0.000223f, 0.008961f, 0.012463f, 0.010831f, 0.009391f, 0.013947f, 0.011015f, 0.003236f, -0.003758f, -0.008027f, -0.011503f, -0.014432f, -0.023969f, -0.029054f, -0.027532f, -0.029036f, -0.034503f, -0.026789f, -0.010231f, 0.001124f, 0.003669f, 0.010035f, 0.018584f, 0.023472f, 0.021017f, 0.021034f, 0.023303f, 0.021449f, + 0.015819f, 0.011317f, 0.006422f, 0.003140f, -0.000660f, -0.003507f, -0.003934f, -0.003546f, -0.004361f, -0.005804f, -0.006205f, -0.005352f, -0.004724f, -0.004307f, -0.003646f, -0.002701f, -0.002041f, -0.001528f, -0.001261f, -0.000970f}, + {-0.022232f, 0.008364f, -0.012631f, 0.006954f, -0.007097f, -0.014627f, -0.025330f, 0.004552f, 0.000825f, 0.006468f, 0.005692f, -0.001694f, -0.001796f, 0.001997f, 0.015427f, -0.010826f, -0.019390f, 0.006528f, -0.007982f, -0.012961f, 0.000298f, -0.001868f, 0.008123f, 0.002951f, 0.005813f, -0.005782f, -0.001390f, -0.003765f, 0.013147f, -0.003491f, -0.005226f, -0.004582f, -0.002245f, -0.003085f, -0.005192f, -0.004565f, -0.003160f, 0.002665f, 0.001168f, 0.001786f, 0.000504f, 0.003480f, 0.005610f, 0.002893f, -0.004889f, -0.014699f, -0.000093f, -0.010199f, 0.001546f, -0.000626f, -0.004628f, 0.006681f, 0.000500f, 0.000118f, -0.014670f, -0.005942f, 0.002019f, -0.001083f, 0.005189f, 0.000447f, 0.004621f, -0.004202f, 0.001942f, -0.001782f, 0.009124f, -0.003148f, 0.004824f, -0.008054f, -0.008049f, -0.010157f, 0.000547f, -0.002356f, -0.002945f, 0.000139f, -0.003537f, 0.000008f, -0.004133f, 0.000957f, 0.000219f, -0.001684f, -0.006409f, 0.000716f, 0.000701f, 0.003779f, 0.003293f, 0.000105f, 0.003505f, -0.000294f, -0.002670f, -0.000815f, -0.001249f, 0.001431f, -0.000003f, 0.000266f, 0.001983f, 0.001500f, + -0.000228f, 0.001863f, -0.001175f, 0.000443f, -0.015948f, -0.003276f, -0.002075f, -0.004504f, -0.002023f, -0.005432f, 0.005312f, -0.002134f, -0.001839f, -0.000430f, 0.000137f, -0.000297f, -0.003826f, 0.014181f, 0.009127f, 0.014821f, -0.006905f, 0.014753f, -0.008702f, -0.006094f, 0.005748f, 0.016335f, -0.000339f, -0.009862f, -0.014578f, -0.010462f, -0.002000f, 0.011653f, 0.004586f, 0.003961f, 0.005176f, -0.005085f, 0.007929f, 0.001033f, 0.005928f, -0.002861f, -0.013288f, 0.003645f, -0.009191f, -0.006280f, -0.006446f, -0.001512f, -0.016877f, -0.000758f, 0.000807f, -0.007033f, 0.015786f, -0.002969f, -0.005092f, -0.006318f, -0.000151f, 0.001763f, -0.006754f, 0.000255f, -0.008286f, -0.003096f, 0.000233f, -0.003394f, 0.011347f, 0.000376f, -0.003053f, 0.006381f, 0.004078f, 0.010534f, 0.004225f, 0.012659f, 0.003113f, 0.010356f, -0.011781f, 0.003087f, 0.009418f, -0.003194f, -0.008417f, -0.011559f, -0.000228f, -0.000879f, -0.002318f, 0.002880f, 0.003407f, -0.002430f, 0.009027f, -0.007738f, 0.002996f, 0.003184f, -0.005790f, 0.004257f, 0.000947f, -0.004201f, 0.002264f, -0.001035f, 0.000890f, -0.003934f, + 0.001229f, 0.000531f, 0.000734f, -0.000409f, -0.000283f, 0.002000f, 0.000505f, 0.003670f, -0.000742f, 0.000360f, 0.018019f, -0.008278f, -0.006385f, 0.001746f, -0.004095f, -0.003064f, 0.009007f, -0.007123f, 0.008671f, 0.003942f, 0.000131f, 0.004394f, -0.005913f, -0.005640f, -0.010325f, -0.011124f, 0.014510f, 0.006824f, 0.005067f, 0.007728f, -0.005155f, -0.003466f, -0.003807f, 0.018337f, -0.007175f, 0.020077f, -0.000732f, -0.005191f, -0.004902f, -0.010731f, -0.011523f, -0.013984f, -0.000909f, -0.003571f, 0.002471f, 0.013386f, -0.001193f, -0.006369f, -0.018803f, 0.000589f, 0.014858f, 0.021810f, -0.010309f, 0.005582f, 0.003988f, -0.005632f, -0.004991f, 0.005640f, 0.020687f, -0.005013f, 0.003225f, -0.001846f, -0.003062f, -0.002011f, 0.009907f, 0.014280f, -0.010900f, -0.005966f, 0.004418f, 0.018744f, 0.003109f, 0.013256f, -0.010918f, -0.010167f, -0.000583f, -0.001740f, 0.003785f, 0.002787f, -0.000271f, 0.001110f, 0.001925f, -0.004972f, 0.002260f, 0.006019f, 0.004651f, -0.003755f, 0.012001f, -0.003137f, 0.007534f, -0.004020f, -0.004170f, 0.004447f, 0.003777f, 0.004013f, 0.000895f, 0.004188f, + 0.000793f, -0.006322f, -0.004269f, 0.001147f, -0.000324f, 0.002235f, -0.001198f, 0.003374f, -0.000175f, 0.001853f, -0.001887f, -0.000416f, -0.000188f, -0.000987f, -0.002192f, -0.000267f, -0.001345f, -0.000402f, -0.001613f, -0.001431f, 0.003378f, -0.000118f, -0.001656f, 0.003621f, 0.000051f, -0.001956f, 0.029775f, -0.020383f, -0.004463f, -0.008441f, 0.002377f, 0.007965f, 0.014330f, -0.014222f, 0.009840f, -0.003680f, -0.015047f, -0.024379f, -0.004951f, -0.010329f, 0.001790f, -0.002283f, -0.010274f, -0.005227f, 0.005753f, 0.006082f, 0.019155f, 0.010650f, 0.009776f, 0.001056f, 0.003086f, -0.009842f, -0.006637f, 0.015403f, 0.011815f, 0.008035f, 0.003764f, 0.007421f, 0.001644f, 0.000126f, -0.012746f, -0.018069f, 0.012204f, -0.004773f, -0.012130f, -0.005756f, -0.007596f, 0.006551f, -0.006679f, 0.015475f, 0.003637f, -0.008815f, -0.004247f, -0.006736f, -0.005813f, 0.007594f, 0.011405f, -0.000905f, 0.007717f, -0.005529f, -0.006154f, 0.000111f, 0.001621f, -0.005898f, -0.002227f, 0.008965f, 0.000202f, -0.003606f, -0.004279f, 0.004915f, 0.005504f, -0.000619f, 0.006633f, 0.000975f, -0.004520f, 0.015440f, + -0.002083f, 0.001761f, 0.000850f, -0.018451f, 0.007339f, 0.005876f, 0.009726f, 0.006330f, -0.006664f, -0.001484f, -0.016587f, -0.007615f, -0.015210f, -0.005562f, -0.006751f, 0.000123f, 0.001585f, -0.010044f, 0.000567f, -0.002381f, 0.000157f, 0.004367f, -0.001402f, -0.001806f, -0.000206f, -0.002740f, 0.000632f, -0.001370f, 0.001291f, -0.001665f, -0.003632f, -0.001846f, -0.000817f, -0.006268f, -0.000435f, -0.000241f, 0.001452f, -0.000343f, 0.000922f, -0.000297f, 0.000300f, -0.003332f, -0.004224f, 0.000485f, -0.000485f, -0.001908f, 0.000975f, -0.004869f, -0.020368f, 0.005136f, 0.000118f, -0.006098f, -0.011200f, 0.004552f, -0.010709f, -0.002037f, 0.018246f, 0.027705f, 0.013585f, 0.015190f, -0.001245f, -0.007804f, 0.011383f, 0.010195f, 0.004236f, 0.005404f, 0.013591f, -0.002107f, 0.009853f, 0.009577f, 0.014103f, 0.013539f, -0.011271f, 0.009047f, -0.000834f, 0.003118f, -0.010512f, 0.003080f, -0.001511f, 0.009225f, -0.003728f, -0.002726f, -0.007464f, 0.006688f, -0.011506f, -0.009339f, 0.000792f, 0.009694f, 0.005215f, -0.005989f, -0.003191f, -0.001909f, -0.004036f, 0.005820f, -0.013829f, 0.012506f, + -0.000200f, 0.015580f, -0.022390f, 0.001478f, -0.020182f, -0.006418f, -0.006533f, 0.005374f, -0.002245f, -0.004658f, 0.004248f, 0.001565f, 0.005248f, 0.008564f, 0.014052f, -0.001854f, -0.011572f, 0.002363f, 0.018985f, 0.003818f, -0.005706f, -0.001492f, 0.011641f, -0.006317f, 0.007018f, -0.006105f, -0.020626f, 0.011738f, 0.012368f, 0.011544f, -0.010283f, -0.015258f, -0.011117f, 0.012779f, -0.001556f, -0.002048f, 0.008925f, 0.003286f, 0.002067f, 0.001489f, -0.000824f, 0.003465f, 0.004561f, -0.001657f, -0.002777f, 0.002602f, 0.000094f, -0.000969f, 0.001420f, -0.002636f, 0.000550f, 0.004064f, -0.001908f, 0.004274f, -0.002022f, -0.003286f, 0.001328f, -0.000160f, -0.000183f, 0.002135f, 0.001476f, 0.002170f, 0.001540f, 0.001543f, -0.000336f, 0.002095f, -0.001561f, -0.030485f, 0.000541f, -0.006739f, 0.002830f, -0.017061f, 0.002107f, 0.002849f, 0.022674f, -0.018098f, 0.000249f, -0.024287f, 0.005560f, -0.014664f, -0.003563f, 0.000924f, -0.007945f, 0.007061f, 0.003130f, -0.012700f, 0.000253f, -0.000162f, 0.011789f, -0.007663f, 0.018980f, -0.000198f, -0.016422f, -0.008357f, 0.020196f, -0.001908f, + 0.008094f, 0.005406f, -0.003318f, 0.012103f, -0.013343f, -0.012603f, -0.009821f, 0.001418f, -0.012780f, 0.013635f, -0.007480f, 0.008762f, -0.012376f, -0.000104f, -0.015040f, 0.009929f, 0.001332f, 0.011886f, 0.010589f, -0.009981f, 0.019903f, 0.017014f, 0.016026f, 0.003217f, 0.016826f, 0.013873f, -0.014270f, 0.012304f, 0.005856f, 0.001182f, -0.013249f, 0.006162f, -0.011276f, 0.011238f, -0.004848f, -0.008840f, -0.001083f, 0.016742f, 0.005937f, -0.019149f, 0.018311f, -0.001451f, -0.006481f, -0.010916f, 0.018649f, 0.016199f, -0.013911f, 0.013826f, -0.001003f, -0.016512f, 0.000197f, -0.009356f, -0.005179f, 0.009182f, -0.007998f, 0.006576f, -0.000678f, 0.002950f, -0.003838f, 0.005027f, -0.000696f, -0.000442f, -0.001119f, -0.001767f, 0.001747f, 0.001033f, -0.004652f, 0.001726f, 0.002298f, 0.000067f, 0.001709f, 0.002098f, -0.004370f, 0.001013f, -0.000538f, 0.000165f, -0.003689f, 0.001380f, -0.001522f, -0.002146f, -0.004905f, 0.005703f, 0.001157f, -0.002585f, -0.000775f, 0.001576f, -0.000597f, 0.043542f, 0.007397f, -0.001742f, -0.015019f, -0.028214f, 0.007199f, -0.004160f, -0.041410f, 0.036322f, + -0.017603f, -0.026282f, 0.005550f, -0.001682f, 0.004892f, -0.001701f, 0.007039f, 0.010472f, 0.000137f, -0.000672f, -0.021163f, -0.001762f, -0.002010f, 0.024948f, -0.004560f, 0.000645f, 0.009182f, -0.004382f, -0.003074f, -0.010157f, 0.021305f, -0.015990f, 0.015394f, -0.003803f, -0.012768f, 0.002386f, -0.014274f, -0.007260f, -0.023182f, 0.004079f, 0.010641f, -0.006272f, -0.011567f, -0.009158f, 0.014010f, -0.021733f, -0.005140f, -0.010720f, -0.000305f, -0.003120f, 0.002827f, -0.018856f, 0.018362f, -0.025742f, -0.017601f, 0.006975f, 0.003106f, -0.000983f, 0.006872f, -0.013356f, -0.019210f, 0.002374f, -0.005226f, -0.000888f, 0.009427f, -0.011491f, 0.008546f, 0.005942f, 0.021186f, -0.005880f, 0.003037f, -0.001643f, 0.000303f, 0.029369f, 0.002459f, 0.029078f, -0.007027f, -0.010936f, 0.003312f, -0.014974f, -0.001338f, 0.014854f, 0.001192f, -0.017421f, -0.015242f, 0.004260f, -0.001624f, 0.000053f, 0.014927f, 0.001148f, -0.002814f, 0.006188f, -0.000858f, -0.000618f, -0.006983f, 0.002568f, 0.003259f, -0.003523f, -0.000104f, -0.001741f, 0.005758f, -0.002626f, -0.001176f, 0.002943f, 0.000758f, 0.001780f, + -0.000557f, 0.003283f, -0.001096f, -0.000003f, 0.001751f, -0.003675f, 0.004529f, -0.002900f, 0.001670f, 0.003794f, 0.002066f, 0.003582f, 0.000978f, -0.031881f, -0.004116f, -0.006429f, -0.025848f, -0.044558f, 0.013834f, 0.023247f, -0.016283f, -0.007794f, 0.013183f, -0.004741f, 0.027879f, -0.003023f, -0.014779f, -0.008777f, -0.041517f, 0.014139f, 0.004775f, -0.003712f, -0.029138f, 0.006988f, -0.016169f, -0.004201f, -0.014183f, -0.007220f, 0.020850f, -0.019844f, 0.008679f, -0.029423f, 0.018981f, 0.003850f, 0.000464f, -0.008427f, 0.002320f, -0.003768f, -0.016405f, -0.030983f, 0.006123f, 0.000142f, 0.006747f, 0.013116f, -0.007455f, -0.002400f, -0.019891f, -0.010189f, -0.005257f, 0.008556f, 0.005821f, 0.014826f, 0.023625f, 0.018491f, 0.009563f, 0.014131f, 0.004366f, 0.014725f, 0.013264f, -0.012734f, 0.015180f, 0.017132f, -0.003402f, 0.022913f, -0.002278f, 0.026867f, -0.011744f, -0.028668f, -0.004599f, 0.018447f, 0.020297f, 0.023305f, -0.004377f, -0.040037f, -0.003929f, -0.002033f, 0.001626f, -0.001255f, -0.009765f, 0.005861f, -0.029180f, 0.022905f, 0.014488f, 0.013931f, -0.015227f, -0.014381f, + -0.003088f, 0.008586f, -0.000928f, -0.016099f, 0.000253f, -0.007810f, -0.013066f, -0.005187f, -0.002070f, -0.006201f, 0.000703f, -0.005225f, 0.002781f, -0.003220f, -0.001709f, 0.004336f, 0.000910f, 0.002035f, -0.001987f, -0.005685f, -0.006308f, 0.004595f, -0.005007f, -0.000075f, -0.001755f, 0.002867f, -0.001973f, -0.001206f, -0.001951f, 0.006843f, 0.003688f, 0.002166f, -0.001976f, 0.042729f, -0.009407f, -0.010270f, 0.014248f, 0.023000f, -0.001655f, 0.010698f, 0.026644f, 0.019238f, -0.043751f, -0.040213f, 0.000328f, -0.003880f, 0.005897f, -0.017985f, -0.031915f, 0.007560f, 0.025590f, 0.016884f, -0.018524f, 0.030079f, 0.024326f, 0.022807f, -0.038339f, 0.010835f, 0.020118f, 0.001008f, 0.003069f, 0.017094f, 0.039516f, -0.007663f, -0.018046f, 0.011956f, 0.008969f, -0.005411f, 0.021369f, 0.031849f, 0.005971f, 0.032995f, 0.014456f, -0.024823f, 0.002815f, 0.027354f, -0.002935f, -0.011282f, 0.014211f, 0.002254f, 0.005422f, 0.028708f, 0.018486f, 0.009741f, 0.003440f, -0.033415f, -0.033968f, -0.002884f, 0.005422f, 0.008839f, -0.010456f, -0.001523f, -0.008752f, 0.002941f, 0.004282f, -0.012780f, + 0.004866f, -0.007864f, -0.001939f, -0.010868f, 0.001268f, 0.021195f, -0.012514f, -0.030737f, -0.004743f, -0.026151f, 0.005803f, -0.009364f, -0.000625f, -0.003551f, 0.012382f, -0.004659f, 0.008983f, -0.000162f, 0.007715f, 0.003571f, -0.003491f, -0.004209f, -0.005258f, -0.015187f, 0.005576f, 0.001929f, 0.003859f, 0.000463f, -0.011644f, 0.005844f, -0.009093f, -0.007746f, -0.002601f, -0.009934f, -0.002016f, -0.003274f, -0.003622f, -0.003150f, 0.006503f, -0.002878f, 0.004362f, -0.000434f, 0.003526f, 0.000580f, 0.008383f, -0.003613f, 0.002328f, -0.006726f, -0.001619f, -0.005771f, -0.005167f, -0.001115f, -0.003786f, 0.012744f, 0.005470f, 0.000465f, -0.001690f, -0.001811f, -0.071072f, -0.044222f, -0.013184f, 0.013266f, -0.004085f, -0.017523f, 0.003480f, -0.017073f, 0.050255f, -0.019955f, 0.032341f, 0.049591f, 0.027017f, 0.024567f, -0.019018f, 0.017737f, -0.009303f, -0.022616f, 0.020183f, 0.023508f, 0.015676f, 0.033470f, 0.000456f, -0.001493f, -0.014431f, -0.014805f, -0.012609f, -0.020477f, -0.019931f, -0.013619f, 0.007976f, 0.003000f, 0.000052f, -0.012813f, -0.006866f, -0.019873f, 0.008600f, -0.017144f, + -0.015529f, -0.006861f, 0.008640f, 0.000074f, -0.010404f, -0.029031f, 0.003734f, -0.008480f, 0.010815f, -0.034278f, -0.026433f, 0.030353f, -0.004383f, -0.005696f, -0.013745f, -0.008430f, 0.022868f, 0.007472f, -0.004462f, 0.012541f, -0.003163f, 0.013042f, 0.010479f, 0.014862f, -0.010344f, -0.017260f, -0.043566f, 0.003161f, -0.042246f, -0.002772f, -0.035727f, -0.005079f, 0.034222f, -0.004187f, 0.006246f, -0.024151f, -0.010283f, -0.012416f, 0.002938f, -0.015479f, -0.008842f, 0.015410f, 0.019237f, -0.001882f, -0.001722f, 0.002252f, -0.008472f, 0.003312f, -0.000776f, -0.008438f, -0.003283f, -0.007212f, -0.002662f, -0.004068f, -0.019497f, 0.003513f, -0.003098f, -0.002486f, 0.001424f, -0.005319f, -0.006177f, -0.013489f, -0.002968f, -0.007776f, -0.009161f, -0.001685f, -0.011591f, -0.005426f, 0.002161f, -0.007335f, -0.008392f, 0.001139f, -0.006982f, 0.002468f, 0.003014f, 0.008555f, -0.004919f, 0.006001f, 0.003032f, -0.007675f, -0.002705f, -0.001794f, -0.003368f, 0.001618f, -0.001493f, -0.002181f, 0.049151f, 0.000969f, -0.035587f, -0.030174f, 0.030834f, 0.024182f, -0.022782f, -0.022002f, 0.041339f, 0.026279f, + 0.001516f, -0.024525f, 0.002961f, -0.010306f, 0.019601f, -0.015213f, 0.002325f, -0.006436f, -0.004521f, 0.042760f, -0.006054f, -0.011621f, 0.007917f, 0.007295f, 0.012767f, 0.013228f, 0.001437f, -0.016844f, 0.012753f, 0.006490f, 0.014614f, 0.033092f, 0.015114f, -0.047569f, -0.013652f, -0.007726f, -0.036471f, 0.014147f, -0.006362f, 0.000785f, -0.020350f, 0.017210f, -0.007936f, 0.003328f, -0.026459f, 0.017962f, -0.021566f, 0.001818f, 0.021151f, -0.003352f, 0.022312f, -0.017412f, 0.027838f, -0.035710f, 0.017801f, 0.000464f, -0.012957f, 0.046852f, 0.012405f, -0.009666f, -0.027982f, 0.012208f, -0.005819f, 0.003921f, -0.004330f, 0.017193f, 0.025436f, 0.034477f, -0.021869f, 0.015545f, -0.008735f, 0.030853f, 0.011169f, 0.004488f, -0.002949f, 0.018540f, 0.003170f, -0.012127f, 0.014857f, -0.010548f, -0.018141f, -0.007700f, -0.024629f, 0.000426f, -0.027581f, -0.002220f, -0.018641f, 0.021264f, -0.006864f, 0.013715f, -0.014967f, 0.000679f, -0.008458f, 0.012958f, -0.004249f, -0.001101f, -0.008391f, 0.004467f, -0.006346f, -0.009788f, -0.005909f, 0.004431f, -0.009773f, 0.005956f, -0.007792f, 0.003713f, + -0.005126f, -0.004618f, -0.005129f, -0.010415f, -0.006382f, 0.000418f, -0.007945f, -0.006848f, 0.009514f, 0.008627f, 0.004350f, -0.004738f, -0.012671f, -0.001150f, 0.005135f, -0.000275f, -0.009904f, -0.005566f, -0.000971f, -0.071438f, -0.046238f, 0.038564f, -0.028175f, -0.026435f, 0.014888f, 0.033771f, -0.055460f, -0.009147f, 0.013311f, 0.003660f, -0.028916f, -0.043376f, 0.081687f, -0.035102f, 0.011168f, -0.039921f, 0.022134f, -0.013852f, 0.038242f, 0.033988f, 0.003513f, 0.006095f, -0.045238f, 0.000026f, 0.021522f, -0.018281f, -0.026935f, 0.021571f, 0.006175f, 0.023252f, 0.018506f, -0.003758f, 0.007826f, -0.005010f, -0.002789f, 0.034250f, -0.028941f, -0.016976f, 0.027502f, -0.001025f, -0.021821f, 0.029102f, -0.000773f, -0.006276f, -0.019491f, -0.008552f, 0.010815f, -0.015207f, -0.001635f, 0.010315f, -0.019335f, -0.019824f, -0.012852f, 0.014814f, -0.042098f, 0.020279f, -0.001813f, 0.040269f, -0.037610f, 0.012673f, -0.028573f, 0.010720f, -0.017104f, -0.021848f, 0.036337f, -0.019883f, -0.008689f, -0.019352f, 0.015783f, -0.022154f, 0.013310f, -0.007450f, 0.026614f, 0.027287f, -0.003275f, -0.042208f, + 0.017052f, 0.017746f, -0.001893f, -0.001219f, -0.024033f, -0.016584f, -0.003874f, -0.020706f, -0.016610f, -0.005770f, -0.000355f, -0.010241f, -0.013627f, 0.015881f, 0.005430f, -0.009706f, -0.008079f, -0.009921f, -0.010479f, 0.011585f, 0.004382f, 0.002890f, -0.015823f, -0.005975f, 0.013898f, -0.007864f, -0.009648f, 0.006572f, -0.006861f, 0.000178f, 0.005169f, 0.008137f, -0.003108f, -0.013094f, 0.002812f, 0.008017f, -0.017491f, 0.000537f, 0.004758f, 0.000550f, -0.009131f, -0.005187f, 0.000638f, -0.004070f, 0.036081f, 0.017602f, -0.040357f, 0.013937f, 0.043672f, -0.003703f, 0.000215f, 0.020239f, -0.012915f, 0.030681f, 0.027743f, -0.036390f, -0.022302f, -0.006587f, 0.019397f, 0.035027f, 0.006290f, 0.018687f, 0.039454f, 0.029619f, -0.041314f, -0.004286f, 0.065871f, 0.016409f, -0.004299f, -0.007601f, -0.012299f, -0.019153f, 0.005879f, 0.016297f, 0.018040f, 0.016900f, -0.011692f, -0.027908f, 0.007625f, -0.014419f, 0.015498f, 0.045606f, -0.012006f, -0.045398f, 0.054644f, -0.016249f, -0.030007f, 0.044422f, -0.007913f, -0.012971f, -0.047271f, -0.008303f, 0.019622f, 0.009554f, -0.010230f, -0.019756f, + 0.018336f, 0.002174f, -0.021879f, 0.019032f, -0.004352f, 0.043384f, -0.031710f, 0.004744f, -0.006161f, 0.049681f, 0.016886f, -0.069975f, 0.022056f, -0.029090f, -0.012285f, -0.024843f, 0.030414f, 0.100791f, 0.036754f, 0.006113f, 0.023290f, 0.029544f, -0.037044f, -0.015440f, -0.010406f, -0.020873f, -0.012781f, -0.023127f, 0.022147f, -0.051317f, -0.013664f, 0.004977f, 0.006194f, -0.016603f, 0.003234f, 0.009427f, -0.005034f, -0.006224f, 0.017583f, 0.003565f, 0.011745f, 0.010092f, -0.010569f, 0.003349f, 0.008702f, 0.003673f, 0.007281f, -0.004932f, 0.004476f, -0.009653f, 0.001359f, -0.002654f, -0.009578f, -0.004668f, -0.002156f, 0.016141f, 0.000895f, 0.004499f, 0.000667f, -0.002847f, -0.003209f, 0.001759f, -0.001382f, -0.014141f, -0.001741f, 0.002823f, -0.003441f, -0.010773f, -0.026205f, -0.009041f, -0.007927f, 0.015948f, -0.002655f, 0.002916f, -0.015378f, -0.053257f, -0.022692f, 0.003593f, -0.021657f, -0.067019f, 0.058021f, -0.011206f, 0.026120f, 0.004893f, -0.030764f, -0.052887f, -0.050970f, 0.057044f, 0.034712f, 0.013049f, -0.020196f, -0.038245f, -0.028676f, -0.045405f, -0.011720f, 0.016858f, + -0.007123f, 0.003650f, 0.007169f, -0.007500f, -0.023565f, -0.022647f, -0.038624f, -0.013891f, -0.007479f, 0.018900f, 0.013159f, 0.020784f, -0.010411f, -0.017317f, -0.007306f, 0.027183f, 0.003803f, 0.024060f, -0.080680f, -0.019051f, -0.000182f, 0.017628f, -0.025792f, -0.001194f, -0.029843f, 0.023263f, 0.020461f, 0.003862f, 0.099493f, 0.001512f, 0.031040f, 0.040903f, 0.001701f, 0.013163f, 0.000545f, -0.007240f, -0.012054f, 0.020575f, 0.030233f, 0.039568f, -0.000970f, -0.007565f, 0.002643f, 0.025967f, 0.023587f, 0.000763f, 0.019105f, 0.016491f, 0.012830f, -0.005390f, 0.038885f, -0.011331f, 0.049922f, -0.049526f, -0.024812f, -0.060895f, -0.019037f, 0.010780f, 0.001362f, -0.015855f, 0.003145f, -0.000310f, 0.027112f, -0.005626f, 0.032502f, -0.015036f, -0.012244f, -0.016512f, 0.008292f, 0.018225f, -0.003124f, -0.009019f, -0.010049f, 0.011208f, 0.000005f, 0.037931f, -0.006200f, -0.002721f, 0.006647f, 0.010571f, 0.015496f, -0.013261f, -0.001365f, 0.004992f, 0.007541f, -0.018264f, 0.006108f, 0.006821f, 0.023112f, -0.023189f, 0.012903f, 0.008699f, -0.010066f, 0.019696f, -0.011407f, -0.013668f, + -0.000165f, -0.004702f, 0.009891f, 0.004982f, -0.008407f, -0.000341f, 0.008065f, 0.001843f, 0.020043f, -0.001046f, 0.013002f, 0.037248f, -0.007512f, 0.001124f, 0.009407f, -0.052259f, 0.001622f, 0.006883f, 0.032008f, 0.049126f, -0.042815f, 0.008827f, -0.027196f, 0.034866f, 0.031543f, 0.003532f, 0.061063f, 0.018691f, 0.023986f, -0.022986f, -0.004164f, -0.039853f, 0.061006f, -0.036299f, 0.009066f, 0.037146f, -0.009518f, -0.024742f, 0.018468f, -0.006054f, 0.009068f, 0.039924f, 0.000492f, -0.013330f, -0.004282f, 0.007076f, -0.001835f, -0.024494f, 0.017211f, -0.002795f, -0.007367f, 0.068537f, -0.053613f, 0.049451f, 0.031686f, 0.061837f, 0.024835f, -0.044557f, 0.033544f, 0.000203f, 0.031130f, 0.081595f, -0.059767f, -0.025014f, -0.008181f, 0.001115f, 0.055244f, -0.033585f, 0.002342f, -0.036029f, 0.002229f, 0.062449f, -0.007652f, 0.064827f, 0.017843f, 0.010700f, 0.029125f, -0.040354f, -0.007164f, 0.028248f, 0.040075f, -0.066487f, -0.002920f, -0.057030f, 0.024778f, -0.029874f, -0.001542f, 0.012932f, 0.017860f, 0.000953f, -0.020695f, -0.016480f, -0.062428f, -0.007482f, -0.044518f, 0.035200f, + 0.002512f, -0.003222f, 0.027179f, 0.001117f, -0.000719f, 0.026224f, 0.019323f, 0.012973f, -0.000252f, -0.009417f, 0.011995f, -0.021321f, -0.002145f, -0.014758f, 0.013746f, 0.014495f, -0.013214f, -0.002847f, -0.027432f, 0.011491f, -0.002259f, -0.000436f, -0.001328f, -0.026462f, -0.032003f, -0.010795f, 0.009560f, 0.023421f, 0.011511f, 0.010355f, -0.004400f, 0.019563f, 0.013271f, -0.001263f, -0.010770f, 0.016980f, -0.025348f, -0.007327f, 0.004534f, 0.027618f, 0.022514f, 0.004649f, -0.010998f, -0.039728f, 0.011501f, -0.069719f, -0.061394f, 0.001138f, 0.001112f, -0.038927f, 0.032050f, 0.009420f, -0.010421f, -0.036118f, 0.049686f, -0.011315f, 0.073830f, -0.010549f, 0.016084f, 0.026740f, -0.035591f, -0.011778f, 0.011442f, -0.042521f, -0.023823f, -0.037171f, 0.032279f, -0.029753f, -0.007926f, -0.009673f, 0.027971f, -0.025073f, -0.042398f, -0.059275f, -0.001560f, 0.049534f, 0.003127f, -0.027119f, -0.011439f, -0.034374f, -0.011401f, 0.000398f, 0.020754f, -0.038740f, -0.004200f, -0.008372f, -0.027551f, -0.038085f, 0.001964f, 0.006461f, 0.024825f, 0.008537f, 0.042559f, 0.011835f, 0.053670f, -0.022269f, + 0.044339f, -0.011212f, -0.034366f, -0.008952f, 0.072024f, -0.030998f, 0.032904f, -0.022716f, 0.052888f, -0.027861f, 0.017947f, 0.033499f, -0.001845f, -0.013774f, 0.006541f, -0.019061f, 0.048119f, -0.043935f, -0.016408f, 0.047894f, -0.005734f, -0.039930f, 0.002051f, 0.036609f, 0.020510f, 0.036607f, -0.036783f, -0.031402f, -0.019783f, -0.004043f, 0.036262f, 0.043640f, -0.077064f, 0.004091f, 0.022545f, -0.042392f, 0.007186f, 0.026774f, 0.021036f, 0.019639f, 0.019379f, 0.012819f, -0.005712f, 0.001405f, 0.014906f, 0.016431f, 0.013610f, 0.032987f, -0.009803f, 0.017332f, 0.007556f, 0.035703f, 0.021495f, -0.027607f, -0.034638f, 0.011073f, 0.037770f, -0.010721f, -0.010154f, -0.023951f, -0.040509f, 0.004654f, -0.034530f, -0.010974f, 0.008218f, -0.023202f, 0.021861f, 0.006133f, -0.006968f, -0.019176f, -0.003409f, -0.019880f, -0.001340f, 0.010947f, 0.005486f, 0.003051f, -0.003177f, -0.004925f, -0.067295f, 0.072224f, -0.025133f, 0.061379f, -0.013797f, 0.049148f, 0.003387f, -0.016429f, -0.034965f, -0.024950f, -0.005320f, -0.000044f, 0.035898f, -0.014767f, -0.003627f, 0.009742f, -0.034200f, 0.053155f, + 0.019356f, 0.001235f, -0.045186f, 0.029684f, 0.015249f, -0.036187f, 0.033867f, 0.002261f, -0.006215f, 0.007983f, -0.001837f, 0.044772f, -0.011186f, -0.057986f, 0.061092f, -0.032646f, -0.005779f, 0.045230f, -0.021053f, -0.010802f, -0.028237f, 0.071828f, -0.033284f, -0.009721f, -0.046157f, -0.009572f, 0.004779f, 0.064131f, -0.031149f, 0.011459f, 0.019901f, 0.037828f, -0.010913f, -0.041908f, 0.044080f, 0.026463f, 0.035640f, -0.018520f, -0.009494f, 0.003849f, 0.039566f, -0.023116f, -0.048089f, -0.053546f, 0.027345f, -0.037724f, 0.008689f, 0.038722f, 0.035851f, -0.026536f, -0.009615f, 0.052379f, -0.085492f, -0.002751f, 0.010912f, 0.028557f, -0.004708f, -0.031663f, -0.006958f, 0.047709f, -0.010199f, 0.098746f, 0.038137f, -0.029192f, -0.004637f, 0.002200f, -0.012783f, -0.036756f, -0.044938f, -0.033042f, 0.026864f, -0.021649f, -0.009383f, -0.001566f, 0.042577f, 0.018087f, -0.015850f, 0.018436f, 0.013186f, -0.001307f, 0.005563f, 0.007348f, -0.001354f, 0.005316f, 0.043604f, 0.035898f, 0.034532f, 0.023405f, 0.002561f, -0.022569f, 0.010962f, -0.017783f, 0.020459f, -0.026976f, 0.027728f, 0.041063f, + 0.013029f, 0.052201f, 0.056163f, 0.022470f, -0.001394f, 0.029271f, 0.009435f, -0.006114f, -0.019027f, 0.030466f, -0.008974f, -0.025531f, -0.001209f, 0.014444f, -0.007999f, 0.012499f, 0.023584f, 0.008676f, -0.031661f, 0.024712f, -0.014836f, -0.016810f, -0.094396f, 0.031260f, 0.017542f, 0.082923f, 0.072519f, -0.011465f, -0.027750f, -0.086732f, 0.001809f, 0.028223f, -0.037593f, 0.027563f, 0.049693f, 0.048476f, -0.023474f, 0.058485f, 0.052042f, 0.001986f, -0.032610f, -0.034660f, 0.053140f, 0.045590f, -0.066267f, -0.089799f, 0.117940f, 0.005702f, -0.009182f, 0.015148f, 0.008013f, 0.043624f, 0.042993f, -0.018007f, -0.015778f, 0.061471f, 0.028616f, -0.011434f, -0.041930f, 0.024597f, 0.004140f, 0.003012f, 0.021219f, 0.002788f, -0.002754f, -0.024973f, 0.013031f, -0.007658f, -0.031084f, 0.055302f, -0.089251f, 0.061434f, 0.050318f, -0.083941f, -0.006680f, 0.042496f, 0.009916f, 0.048527f, -0.012283f, 0.006684f, 0.043739f, -0.006030f, 0.021899f, -0.041425f, -0.066293f, 0.183997f, -0.076213f, -0.106004f, -0.024067f, 0.204955f, 0.087619f, -0.087487f, -0.020708f, 0.036142f, 0.024111f, -0.001927f, + -0.053729f, 0.077051f, 0.042193f, 0.032310f, 0.006659f, -0.104103f, -0.018049f, 0.016932f, 0.030022f, -0.042745f, -0.071692f, 0.006257f, 0.021377f, 0.009805f, -0.034367f, -0.035293f, 0.016006f, 0.009560f, 0.024629f, -0.004688f, -0.009608f, -0.002495f, 0.026368f, 0.034895f, 0.023018f, -0.052300f, -0.021291f, 0.037091f, 0.026230f, -0.026274f, -0.000927f, 0.030293f, 0.052518f, 0.021079f, -0.029299f, -0.038080f, -0.051055f, 0.023782f, -0.017066f, 0.022146f, -0.043337f, 0.023966f, 0.011231f, 0.026991f, -0.020442f, -0.009971f, -0.035025f, -0.014162f, 0.032392f, 0.006415f, -0.028923f, 0.015675f, 0.049493f, 0.003417f, -0.004373f, 0.015342f, -0.008004f, 0.013667f, -0.036395f, -0.022872f, 0.046327f, 0.080106f, 0.005784f, 0.132883f, -0.058609f, -0.022347f, 0.077151f, 0.004077f, -0.004154f, -0.039292f, -0.078836f, 0.065976f, -0.040979f, -0.044540f, 0.034303f, -0.049467f, 0.024920f, -0.046881f, -0.052067f, -0.008491f, 0.011670f, 0.007738f, -0.012095f, 0.063173f, 0.015969f, 0.038661f, 0.018619f, 0.001424f, 0.001193f, -0.028028f, -0.060127f, 0.019666f, 0.060378f, -0.048775f, 0.042223f, -0.049720f, + -0.005024f, -0.002365f, -0.077313f, 0.055559f, -0.026683f, 0.021882f, 0.001689f, -0.022403f, 0.001485f, -0.055640f, 0.057729f, -0.040165f, 0.019387f, -0.064830f, -0.039517f, -0.085163f, 0.032470f, -0.039582f, -0.044881f, -0.035944f, -0.018593f, 0.000487f, 0.091202f, 0.033028f, 0.045145f, -0.012020f, -0.042513f, -0.053460f, 0.014326f, 0.003755f, -0.092783f, -0.042771f, -0.163222f, -0.076407f, -0.063099f, -0.009028f, -0.075207f, -0.061512f, -0.013620f, 0.060214f, 0.068128f, -0.054964f, -0.070087f, -0.080119f, 0.040560f, 0.096841f, 0.004889f, 0.077981f, 0.001944f, 0.047292f, 0.018739f, 0.006154f, 0.022514f, 0.008805f, -0.001934f, -0.027472f, 0.039937f, 0.033583f, 0.017689f, -0.032908f, -0.013355f, -0.003949f, 0.017018f, 0.018540f, -0.006783f, 0.020086f, -0.008784f, -0.021933f, -0.039367f, 0.005408f, 0.054344f, 0.020177f, -0.006669f, 0.015917f, -0.017825f, 0.029769f, -0.010947f, 0.038752f, 0.036749f, 0.004918f, -0.040136f, 0.007170f, 0.008574f, 0.043874f, 0.010221f, 0.049797f, -0.033319f, -0.019714f, 0.045028f, 0.047671f, 0.012166f, -0.011702f, -0.009036f, -0.045986f, 0.033515f, -0.021365f, + -0.092832f, 0.022535f, 0.033528f, -0.080315f, 0.045379f, 0.009473f, -0.022902f, 0.005376f, -0.022303f, -0.001726f, 0.017968f, 0.024138f, 0.041948f, -0.048176f, 0.005312f, 0.056688f, -0.005669f, -0.026250f, 0.051084f, -0.021678f, 0.004116f, -0.029392f, -0.011559f, -0.059208f, 0.016152f, 0.001952f, 0.034327f, -0.023060f, 0.003091f, 0.042461f, -0.019269f, 0.001176f, 0.043884f, -0.084483f, 0.006124f, -0.096788f, -0.030353f, -0.064683f, 0.052635f, 0.018890f, -0.003215f, 0.022318f, -0.018487f, 0.024301f, 0.066738f, 0.018270f, 0.103284f, -0.056736f, -0.065030f, 0.060961f, 0.017081f, -0.043917f, -0.041055f, -0.016547f, 0.038533f, -0.035978f, -0.000785f, -0.031057f, -0.040074f, 0.024339f, 0.030508f, -0.060226f, -0.034653f, 0.052603f, -0.000297f, 0.018852f, -0.010677f, 0.029019f, 0.013319f, 0.053084f, -0.030040f, -0.022340f, 0.013984f, 0.012559f, -0.014595f, -0.054620f, -0.039611f, -0.043133f, 0.058892f, -0.026678f, -0.044465f, 0.013473f, -0.011168f, -0.014468f, -0.029097f, 0.011600f, 0.013965f, -0.004566f, -0.008212f, -0.015800f, -0.026765f, -0.004427f, -0.005582f, -0.019618f, 0.001364f, -0.009428f, + -0.018168f, 0.011757f, -0.010464f, 0.010842f, -0.010317f, -0.008954f, 0.028141f, -0.010573f, 0.013632f, 0.009964f, -0.025578f, 0.012023f, 0.004095f, -0.010273f, -0.031155f, 0.043531f, 0.029019f, -0.011939f, 0.007322f, -0.020941f, -0.015542f, 0.013477f, 0.000232f, -0.026995f, 0.010161f, -0.010638f, 0.025387f, -0.006348f, -0.004010f, 0.005055f, 0.012144f, 0.015611f, -0.063196f, -0.127734f, -0.063876f, -0.024356f, 0.055791f, 0.072759f, -0.139437f, 0.024012f, -0.055411f, -0.075588f, -0.015559f, 0.087251f, 0.055741f, 0.047567f, -0.030127f, -0.033648f, -0.040262f, 0.044005f, 0.030997f, 0.067913f, 0.008802f, -0.088258f, -0.034634f, 0.066323f, -0.010259f, 0.019451f, 0.059339f, -0.028412f, -0.041216f, -0.064551f, -0.064722f, 0.000402f, 0.042042f, 0.090953f, 0.067262f, 0.044655f, 0.018192f, -0.093045f, -0.099229f, 0.034669f, -0.068496f, 0.016164f, 0.087244f, 0.034757f, 0.005817f, -0.044059f, -0.079178f, -0.013530f, -0.034189f, 0.026561f, 0.020537f, 0.014855f, 0.054630f, -0.008510f, -0.010724f, 0.014421f, 0.039607f, 0.064462f, 0.066617f, 0.022665f, 0.059306f, 0.020019f, 0.021211f, -0.013053f, + -0.066721f, -0.026115f, -0.029025f, -0.054567f, 0.040953f, 0.038444f, 0.028411f, 0.028451f, -0.012839f, -0.065511f, 0.010696f, 0.019612f, -0.001198f, 0.043659f, 0.027899f, 0.022905f, -0.005360f, 0.003038f, 0.006247f, 0.044966f, 0.045074f, 0.034411f, 0.009791f, -0.008241f, -0.033399f, -0.006099f, 0.019178f, 0.005696f, -0.010017f, -0.000115f, -0.026587f, -0.012223f, -0.015472f, -0.017283f, 0.013477f, 0.049141f, 0.023898f, -0.008911f, -0.005167f, -0.036617f, -0.004011f, 0.012935f, 0.024546f, 0.027605f, -0.008917f, -0.011650f, -0.057395f, -0.032924f, -0.008527f, 0.000507f, 0.022708f, 0.019225f, -0.011527f, -0.013653f, 0.008986f, 0.003768f, 0.005639f, 0.014208f, -0.016244f, -0.005554f, -0.003492f, 0.009505f, 0.014920f, 0.001628f, -0.005646f, -0.004095f, -0.024229f, -0.010851f, 0.039574f, -0.112315f, -0.226045f, -0.116676f, 0.021934f, 0.088304f, 0.215189f, 0.210528f, 0.087731f, 0.089593f, 0.064340f, 0.003517f, -0.107128f, -0.181559f, -0.273584f, -0.081651f, -0.114431f, -0.019903f, 0.111702f, 0.199063f, 0.167387f, 0.147813f, 0.081494f, -0.001795f, -0.052069f, -0.069873f, -0.014907f, -0.121031f, + -0.096094f, -0.091306f, -0.059803f, -0.049099f, -0.022743f, -0.004261f, 0.041745f, 0.098180f, 0.101125f, 0.099375f, 0.072793f, 0.094674f, 0.050264f, 0.054168f, -0.017636f, -0.003913f, -0.044589f, -0.117223f, -0.169789f, -0.205188f, -0.099347f, -0.039974f, 0.032022f, -0.005241f, 0.021768f, 0.047775f, 0.062492f, 0.133194f, 0.153607f, 0.203510f, 0.129872f, 0.013156f, 0.059403f, -0.030689f, -0.112273f, -0.098250f, -0.195559f, -0.228218f, -0.170542f, -0.105446f, -0.045256f, -0.035714f, 0.082251f, 0.092830f, 0.257537f, 0.210848f, 0.154356f, 0.151054f, 0.072451f, -0.009190f, -0.102146f, -0.147831f, -0.107831f, -0.129439f, -0.177672f, -0.084420f, 0.005035f, -0.017356f, 0.005178f, 0.077764f, 0.108463f, 0.080091f, 0.041896f, 0.040492f, 0.069165f, 0.029492f, -0.004993f, -0.008255f, -0.033718f, -0.005686f, -0.030069f, -0.079647f, -0.041980f, -0.059394f, -0.096355f, -0.016977f, -0.016605f, 0.077146f, 0.070429f, 0.042324f, 0.075763f, 0.130902f, 0.093818f, -0.022979f, -0.015655f, -0.063127f, -0.056047f, -0.131782f, -0.136533f, -0.066117f, -0.027757f, 0.011352f, 0.046515f, 0.054901f, 0.081971f, 0.093228f, + 0.090267f, 0.094647f, 0.024293f, -0.009670f, -0.050240f, -0.061571f, -0.081135f, -0.090007f, -0.090170f, -0.038964f, 0.020382f, 0.027000f, 0.039333f, 0.040916f, 0.028578f, 0.030268f, 0.031881f, 0.010083f, 0.007523f, -0.010793f, -0.011182f, 0.019023f, -0.012841f, -0.031477f, 0.001790f, 0.006690f, -0.004056f, -0.009891f, -0.013513f, 0.000021f, -0.003911f, -0.022168f, -0.009938f, 0.006332f, 0.001402f, 0.001290f, 0.012843f, 0.016148f, 0.011982f, 0.010969f, 0.010113f, 0.003758f, -0.001603f, -0.001211f, -0.002143f, -0.006841f, -0.007435f, -0.007978f, -0.007422f, -0.005624f, -0.002722f, -0.003568f, -0.001342f, 0.001046f, 0.003144f, 0.006635f, 0.005147f, 0.000954f, 0.001232f, 0.002581f, -0.000431f, -0.005240f, -0.005741f, -0.003249f, 0.000496f, 0.002847f, 0.005469f, 0.008339f, 0.007943f, 0.006614f, 0.005138f, 0.001063f, -0.003331f, -0.007082f, -0.010072f, -0.011806f, -0.013057f, -0.012763f, -0.008222f, -0.001890f, 0.004105f, 0.009788f, 0.013870f, 0.015268f, 0.015619f, 0.012663f, 0.006475f, 0.000282f, -0.005914f, -0.010053f, -0.012527f, -0.013020f, -0.009706f, -0.005866f, -0.002434f, 0.001609f, + 0.004063f, 0.004754f, 0.004296f, 0.003624f, 0.002853f, 0.002090f, 0.001490f, 0.000548f, 0.000174f, 0.000171f, 0.000060f, -0.000361f, -0.000503f, -0.000567f, -0.000498f, -0.000509f, -0.000398f, -0.000355f, -0.000373f, -0.000357f} + }, + { + {-0.008454f, -0.013189f, -0.009585f, 0.003750f, -0.001437f, -0.022591f, -0.012818f, -0.000970f, 0.003257f, -0.006942f, 0.002406f, -0.008381f, 0.001666f, -0.006056f, 0.015891f, -0.012918f, -0.005647f, -0.005677f, 0.010138f, 0.006988f, 0.016182f, 0.004268f, 0.003388f, -0.007383f, 0.007653f, 0.000974f, 0.002098f, -0.000900f, 0.006149f, 0.008385f, 0.000659f, 0.008356f, 0.007968f, -0.003862f, 0.004472f, -0.004722f, -0.005222f, 0.000585f, -0.004261f, 0.002683f, -0.006704f, -0.012217f, 0.003332f, 0.004351f, -0.002992f, 0.003388f, -0.005791f, 0.005487f, 0.007529f, -0.012909f, 0.002559f, -0.000726f, 0.004894f, 0.004132f, 0.000720f, -0.012745f, -0.003774f, -0.005612f, 0.004266f, -0.000170f, 0.001325f, -0.004107f, 0.002404f, -0.006552f, 0.000361f, 0.007060f, 0.004570f, 0.000454f, -0.003573f, 0.002317f, -0.010362f, -0.005875f, -0.007598f, 0.001355f, 0.001368f, -0.000683f, 0.011056f, 0.000019f, 0.009645f, 0.000103f, 0.001074f, 0.000858f, 0.000026f, -0.005235f, 0.003958f, -0.000356f, 0.001992f, -0.001156f, 0.001308f, 0.001775f, -0.000639f, -0.001860f, -0.000638f, -0.000595f, -0.000480f, -0.000353f, + -0.002716f, 0.000428f, 0.002959f, 0.001609f, 0.000111f, 0.000267f, -0.000704f, -0.001324f, 0.001302f, -0.000865f, -0.026135f, -0.000868f, 0.001337f, 0.000332f, 0.004243f, -0.009252f, 0.006720f, 0.003757f, -0.004879f, -0.015593f, 0.010183f, 0.010449f, -0.002517f, 0.008687f, 0.006255f, -0.008663f, 0.017081f, 0.003525f, -0.007802f, 0.009163f, 0.000613f, 0.008559f, 0.001214f, -0.014965f, 0.005620f, -0.002874f, -0.005574f, -0.005839f, -0.004582f, 0.009724f, 0.007521f, 0.000568f, 0.007871f, 0.002823f, -0.007542f, -0.009317f, -0.000899f, -0.002212f, 0.003936f, 0.002667f, -0.007346f, 0.001697f, 0.003743f, 0.003544f, -0.006466f, -0.005420f, -0.008551f, -0.003025f, -0.002175f, 0.001662f, -0.002137f, 0.011362f, 0.004825f, -0.001808f, -0.005836f, 0.002097f, 0.004689f, 0.002419f, 0.012220f, -0.002087f, 0.006126f, -0.000769f, -0.004097f, -0.007499f, 0.005200f, -0.001729f, -0.003520f, 0.007162f, -0.002284f, 0.002359f, -0.001671f, -0.001530f, -0.008350f, 0.001781f, -0.002413f, 0.009705f, 0.011994f, -0.007295f, -0.007445f, -0.005223f, 0.001964f, -0.004691f, -0.002443f, -0.003040f, -0.003067f, -0.003279f, + 0.001861f, 0.004458f, -0.000362f, 0.001126f, 0.001269f, -0.000507f, 0.000071f, -0.002163f, -0.004879f, -0.007681f, -0.017713f, -0.010569f, -0.003830f, 0.012773f, 0.001663f, 0.002410f, 0.007822f, 0.002137f, 0.003379f, -0.018558f, -0.017052f, -0.010845f, -0.002843f, -0.000036f, 0.007880f, -0.005548f, 0.006167f, -0.003157f, -0.011467f, 0.003615f, -0.001677f, -0.007825f, -0.000124f, 0.011047f, 0.016020f, 0.007295f, -0.007334f, 0.004333f, 0.000513f, 0.011580f, -0.000052f, -0.009157f, -0.000314f, -0.005330f, 0.011355f, 0.005002f, 0.005326f, 0.011529f, -0.001986f, 0.000879f, 0.015426f, 0.013519f, -0.000505f, -0.000023f, 0.001062f, -0.000813f, 0.004107f, 0.001171f, -0.011235f, -0.014881f, -0.005261f, -0.001853f, 0.000054f, -0.004904f, -0.016622f, -0.001726f, 0.004615f, -0.009017f, -0.004411f, -0.005859f, -0.005032f, 0.001804f, 0.002140f, 0.005528f, -0.011583f, -0.009234f, 0.008947f, -0.003741f, -0.002017f, 0.001886f, -0.000683f, 0.005870f, -0.011155f, 0.004465f, 0.004146f, -0.004393f, -0.004247f, 0.004499f, -0.004870f, 0.007148f, -0.002785f, 0.000109f, 0.000006f, -0.002758f, 0.001416f, 0.005295f, + 0.002928f, 0.000637f, 0.003199f, 0.000946f, -0.001448f, -0.002823f, -0.001566f, -0.001610f, 0.000659f, 0.000846f, -0.000473f, -0.000378f, 0.000791f, -0.000215f, 0.023885f, -0.008962f, -0.007071f, -0.001007f, 0.000551f, -0.008728f, 0.000224f, -0.006061f, 0.011561f, -0.002643f, -0.013978f, -0.019514f, -0.004909f, -0.012875f, 0.018293f, 0.001628f, 0.013021f, 0.011007f, -0.017074f, -0.000813f, 0.007363f, 0.005382f, 0.009288f, 0.001860f, -0.000971f, -0.001404f, 0.004428f, -0.005546f, 0.006708f, 0.003791f, -0.006006f, 0.003960f, 0.000413f, 0.004598f, 0.010003f, -0.005167f, 0.004053f, -0.000466f, 0.005771f, 0.005019f, -0.001890f, 0.006856f, -0.001766f, 0.005987f, -0.004318f, 0.005475f, -0.013815f, -0.005757f, -0.004965f, 0.004093f, 0.012184f, -0.008684f, -0.005728f, -0.003095f, 0.000859f, -0.003873f, -0.005219f, -0.002654f, 0.005005f, 0.004134f, 0.007096f, -0.002135f, 0.004095f, -0.003927f, -0.004209f, -0.000224f, -0.002482f, 0.005009f, 0.000054f, -0.007100f, 0.004215f, -0.004067f, -0.007053f, -0.002476f, -0.004344f, 0.003342f, -0.005117f, -0.014010f, -0.001898f, -0.005947f, -0.005937f, 0.003273f, + -0.003805f, -0.008353f, -0.001628f, 0.002004f, -0.000502f, 0.000713f, 0.000026f, -0.005169f, 0.000281f, 0.003035f, -0.001921f, -0.002041f, 0.000678f, 0.000096f, 0.001132f, 0.001117f, 0.002892f, 0.001018f, -0.002313f, 0.001816f, -0.000325f, -0.000646f, -0.000832f, -0.002189f, -0.002151f, -0.002236f, 0.004245f, 0.006443f, -0.002197f, 0.009659f, -0.014543f, 0.006847f, -0.008599f, -0.009506f, 0.014523f, 0.005561f, -0.016627f, 0.002002f, 0.000340f, 0.005332f, -0.011901f, -0.007516f, -0.000827f, -0.009578f, -0.017691f, -0.017100f, -0.011220f, -0.017064f, 0.007674f, -0.001548f, 0.002861f, 0.009642f, -0.014979f, 0.010286f, -0.004068f, 0.004956f, 0.003322f, -0.001282f, 0.001801f, -0.001932f, -0.001960f, -0.009646f, -0.005713f, 0.013225f, -0.004552f, -0.010503f, -0.009689f, -0.000692f, -0.004229f, 0.004311f, -0.009254f, -0.014399f, 0.002468f, 0.013915f, -0.001855f, 0.008544f, -0.004500f, 0.004784f, -0.007111f, 0.005838f, 0.002493f, -0.009752f, 0.014960f, 0.002904f, -0.002891f, 0.003721f, 0.013770f, 0.012786f, 0.006786f, -0.001064f, -0.014919f, -0.002278f, -0.012403f, 0.003906f, -0.002567f, 0.002378f, + 0.002382f, 0.003792f, -0.011262f, 0.000182f, -0.000660f, 0.005811f, 0.011897f, -0.014376f, 0.002136f, -0.004013f, -0.013542f, -0.001272f, 0.004185f, -0.001121f, -0.000158f, -0.001035f, 0.004687f, 0.001171f, -0.003816f, -0.002445f, -0.002718f, -0.001467f, -0.004581f, 0.000454f, -0.000239f, 0.002949f, -0.005560f, -0.003719f, -0.000288f, -0.000468f, -0.000564f, 0.000561f, -0.000296f, 0.001218f, -0.001933f, -0.001841f, -0.000415f, -0.000057f, -0.001373f, -0.000077f, -0.000273f, 0.002852f, 0.002498f, 0.000269f, 0.000188f, -0.002329f, -0.004163f, -0.001210f, 0.000339f, -0.003583f, -0.002184f, -0.001527f, -0.001278f, -0.001290f, -0.016509f, -0.015803f, -0.010168f, -0.017432f, -0.020721f, -0.019729f, 0.008771f, 0.009569f, -0.012600f, -0.003110f, -0.011382f, -0.018733f, 0.010470f, -0.004691f, -0.016234f, 0.005973f, -0.000850f, 0.001140f, 0.001950f, 0.005907f, 0.002110f, -0.000297f, 0.004522f, 0.006012f, -0.009228f, -0.008827f, -0.002193f, -0.010829f, -0.000526f, -0.011561f, -0.020262f, -0.001334f, 0.012686f, -0.014565f, -0.011134f, 0.008347f, -0.007585f, 0.001223f, 0.003414f, -0.007366f, -0.005923f, -0.006202f, + -0.021863f, -0.009297f, 0.004998f, -0.006043f, -0.007084f, -0.013659f, 0.006466f, 0.012719f, -0.004260f, 0.019463f, -0.010386f, -0.004732f, 0.000145f, -0.004355f, -0.015987f, -0.000869f, 0.003940f, -0.000262f, -0.003192f, -0.013883f, -0.002115f, 0.014211f, 0.007242f, 0.004386f, 0.007441f, 0.005444f, -0.003460f, 0.026930f, -0.008172f, -0.010072f, -0.009654f, -0.011544f, 0.004902f, 0.015425f, 0.010537f, 0.001443f, -0.002268f, -0.007364f, -0.002547f, 0.000056f, -0.003401f, 0.000931f, -0.004629f, 0.002146f, 0.011284f, 0.007472f, -0.005279f, -0.000870f, -0.001803f, 0.004299f, -0.002132f, 0.004655f, -0.004449f, -0.002036f, 0.000856f, 0.001180f, -0.000988f, 0.001781f, -0.002510f, 0.003178f, 0.000266f, 0.002568f, 0.002018f, 0.001653f, -0.001154f, -0.001835f, -0.000412f, -0.001855f, -0.002368f, 0.029624f, 0.020085f, -0.001156f, 0.018326f, -0.001793f, 0.002498f, 0.003314f, -0.010356f, 0.016675f, -0.000029f, 0.014681f, 0.014093f, -0.011811f, 0.018370f, 0.000036f, -0.014371f, -0.023623f, 0.021136f, 0.010086f, 0.020999f, -0.018030f, 0.011979f, 0.006338f, -0.019766f, -0.019598f, -0.011642f, -0.005762f, + 0.020237f, -0.019733f, 0.017038f, -0.001951f, -0.002126f, 0.012130f, 0.011512f, 0.015665f, 0.005672f, -0.009017f, 0.007598f, 0.014701f, -0.009288f, 0.014694f, 0.022605f, 0.009392f, 0.013641f, 0.005440f, 0.003713f, 0.003575f, 0.000391f, -0.012733f, 0.004395f, 0.000943f, 0.000720f, 0.010143f, -0.007583f, 0.005921f, 0.006802f, -0.003355f, 0.019720f, -0.012001f, -0.007274f, -0.004825f, 0.017014f, -0.003458f, 0.014024f, 0.006848f, 0.009426f, 0.008281f, 0.001499f, -0.024631f, -0.003934f, -0.019814f, -0.010738f, 0.024967f, 0.013046f, -0.011634f, -0.000834f, -0.014264f, -0.012615f, -0.006841f, 0.020900f, 0.001538f, 0.007104f, 0.003770f, -0.003431f, 0.003981f, 0.007406f, 0.012855f, -0.003864f, 0.007380f, 0.005433f, 0.004442f, -0.004656f, -0.003221f, 0.001976f, -0.002681f, -0.000217f, 0.003266f, 0.004767f, 0.001695f, 0.002008f, 0.005537f, 0.005647f, 0.001814f, 0.000083f, 0.002489f, -0.001314f, 0.004648f, 0.007522f, 0.003284f, 0.000142f, 0.008013f, 0.000875f, -0.003989f, 0.003429f, -0.026244f, 0.016529f, 0.015875f, 0.047010f, 0.001829f, 0.004034f, -0.002376f, -0.006498f, -0.003087f, + 0.015864f, 0.014489f, 0.012582f, 0.018279f, 0.007359f, 0.028874f, 0.008388f, -0.011451f, 0.002691f, 0.025169f, 0.009865f, 0.002552f, 0.003829f, -0.012947f, -0.018713f, 0.011940f, -0.009347f, -0.018239f, -0.038738f, -0.000609f, 0.015260f, -0.001173f, 0.008948f, -0.013370f, -0.007206f, -0.004988f, 0.002757f, -0.004223f, -0.011719f, -0.005637f, -0.031255f, -0.008103f, -0.026557f, 0.002251f, -0.014076f, 0.010636f, -0.015315f, 0.005795f, -0.014735f, -0.005029f, -0.001097f, 0.000472f, 0.002063f, 0.002987f, -0.019480f, 0.009365f, -0.003107f, 0.004318f, -0.010286f, 0.000314f, 0.015186f, 0.006248f, 0.021063f, 0.011971f, -0.006722f, -0.001207f, -0.004619f, -0.002118f, -0.005231f, -0.006716f, -0.000575f, 0.008800f, 0.005410f, 0.006562f, 0.003925f, -0.030372f, 0.019844f, 0.019802f, -0.007642f, 0.011378f, 0.008578f, -0.016007f, 0.007497f, 0.004915f, 0.000765f, -0.003324f, 0.002550f, 0.010497f, -0.009404f, 0.006165f, -0.002839f, 0.000636f, -0.000971f, 0.002406f, 0.005301f, -0.004532f, -0.002346f, 0.007843f, -0.005733f, 0.000516f, -0.000018f, 0.003063f, -0.003839f, -0.006326f, 0.003691f, 0.000396f, + -0.002288f, -0.001785f, 0.000714f, -0.000079f, 0.003418f, 0.004433f, 0.004519f, 0.000230f, -0.005391f, 0.001159f, 0.050563f, 0.018135f, -0.008613f, 0.024900f, -0.016593f, 0.017322f, 0.011477f, -0.024012f, 0.004950f, -0.030170f, 0.000473f, -0.010347f, -0.021281f, 0.011168f, 0.000245f, 0.008515f, 0.012261f, 0.015238f, 0.024549f, 0.010165f, -0.001890f, -0.006514f, -0.016944f, -0.030413f, 0.010610f, 0.011726f, 0.003158f, -0.010703f, 0.016231f, 0.002003f, 0.017157f, 0.010151f, -0.031709f, -0.012119f, 0.004125f, -0.023368f, 0.001070f, -0.001796f, -0.004541f, 0.006713f, 0.005006f, -0.005604f, 0.023159f, -0.013580f, 0.000798f, 0.012929f, -0.011601f, 0.008841f, -0.005134f, -0.014246f, 0.009346f, -0.000238f, -0.001947f, 0.013291f, 0.008757f, 0.000378f, -0.007084f, 0.027646f, 0.001123f, 0.015501f, 0.001456f, -0.008764f, -0.009742f, -0.023388f, -0.009107f, 0.009609f, -0.000729f, 0.008185f, -0.002746f, -0.018245f, 0.007137f, 0.005887f, -0.026696f, 0.007630f, 0.013610f, -0.007199f, 0.014525f, 0.003348f, -0.015194f, -0.015460f, 0.017340f, -0.000444f, -0.035015f, 0.004285f, 0.003669f, 0.001404f, + -0.003642f, 0.001992f, -0.004887f, 0.000811f, 0.010340f, -0.003259f, 0.001585f, 0.002565f, 0.002995f, -0.008856f, 0.002573f, -0.003204f, 0.002344f, 0.006434f, 0.006790f, 0.004894f, 0.002308f, -0.005832f, 0.002547f, -0.000563f, -0.000598f, 0.002276f, -0.006512f, -0.000136f, 0.004341f, 0.005992f, -0.004091f, -0.002504f, -0.007611f, 0.001282f, 0.007849f, -0.007837f, 0.003108f, 0.002733f, -0.052803f, -0.017610f, 0.054942f, 0.015167f, 0.008675f, -0.008408f, -0.001597f, -0.008585f, 0.011115f, -0.017924f, 0.023957f, 0.013649f, 0.011173f, 0.011474f, -0.008638f, -0.000959f, -0.001103f, 0.007617f, 0.016092f, -0.024505f, -0.014579f, -0.007915f, 0.018418f, 0.006563f, 0.010227f, 0.010993f, -0.002649f, -0.017608f, 0.005625f, 0.001237f, 0.033530f, 0.026340f, 0.006855f, 0.019972f, 0.000995f, -0.009822f, 0.004065f, -0.002912f, -0.004717f, 0.012825f, 0.015829f, 0.012981f, 0.032445f, 0.015589f, 0.012669f, 0.014163f, -0.014858f, -0.024314f, -0.011437f, 0.010890f, -0.020714f, -0.010335f, 0.019949f, 0.021237f, 0.011630f, -0.009802f, 0.018820f, -0.007583f, 0.001973f, 0.004391f, 0.010774f, -0.005699f, + -0.011884f, 0.006623f, -0.010724f, -0.033491f, 0.001367f, 0.010646f, -0.018263f, 0.002235f, -0.003358f, -0.004855f, -0.003407f, -0.010936f, 0.027060f, -0.002977f, 0.015437f, -0.039051f, -0.037080f, -0.031489f, -0.014366f, 0.003044f, 0.003738f, -0.001170f, 0.002076f, -0.000812f, -0.008332f, 0.003906f, -0.009152f, -0.002832f, -0.004046f, 0.009333f, 0.001446f, 0.003276f, -0.007358f, -0.001508f, -0.006555f, -0.002519f, 0.005103f, 0.008034f, 0.008750f, 0.008291f, -0.000170f, -0.005830f, 0.004551f, 0.007280f, 0.004563f, 0.007245f, 0.002547f, -0.000884f, 0.003088f, 0.000886f, 0.001488f, -0.002413f, -0.005129f, 0.005805f, 0.006649f, -0.002397f, -0.001958f, -0.001675f, -0.001156f, 0.027386f, 0.042908f, -0.062571f, -0.008650f, 0.004000f, -0.000239f, -0.007277f, -0.015429f, 0.017459f, -0.019875f, -0.031706f, -0.003019f, 0.031466f, -0.004239f, -0.017991f, 0.006024f, -0.025271f, -0.013639f, 0.001272f, 0.016614f, -0.026499f, 0.003198f, 0.029460f, 0.030186f, 0.001039f, 0.010834f, 0.026435f, -0.014746f, -0.023121f, -0.032466f, 0.003432f, -0.032363f, -0.006697f, 0.013937f, 0.013166f, -0.028615f, -0.026940f, + -0.016323f, 0.011983f, -0.007447f, -0.004815f, -0.007359f, 0.026262f, -0.038409f, -0.011027f, 0.006219f, -0.020555f, -0.006976f, 0.000343f, -0.024160f, 0.001404f, 0.010226f, -0.001053f, 0.032145f, -0.001888f, -0.012737f, 0.002987f, -0.001418f, -0.010214f, 0.006326f, 0.015998f, -0.014350f, 0.022697f, -0.010881f, -0.041455f, 0.002152f, -0.016008f, -0.008749f, -0.000878f, -0.004278f, -0.054776f, -0.009058f, 0.025524f, 0.021981f, 0.015532f, 0.033049f, 0.033766f, -0.045122f, -0.004802f, 0.003102f, 0.009705f, -0.012985f, -0.022274f, -0.000244f, 0.010518f, 0.012254f, 0.010611f, 0.008224f, 0.004126f, 0.006667f, -0.011813f, 0.000243f, 0.007515f, -0.003637f, -0.002521f, 0.001520f, 0.002628f, 0.006697f, -0.006943f, 0.001501f, -0.002649f, 0.003227f, 0.004520f, -0.009503f, 0.001661f, -0.000824f, -0.006380f, 0.002997f, -0.001265f, 0.001436f, 0.000560f, -0.000000f, -0.008139f, 0.004451f, 0.000841f, 0.002399f, -0.005342f, -0.004035f, -0.003460f, -0.003548f, -0.060108f, 0.016755f, -0.011197f, 0.020458f, -0.019246f, -0.000234f, 0.031417f, -0.010548f, 0.044645f, 0.010232f, 0.008598f, -0.019240f, 0.008444f, + 0.022094f, -0.013640f, -0.002818f, 0.028883f, 0.018564f, 0.021745f, 0.003024f, -0.033378f, 0.021180f, -0.021543f, -0.002069f, -0.012977f, 0.003250f, -0.016571f, 0.009599f, -0.004299f, 0.009351f, 0.008995f, 0.015911f, 0.016237f, 0.017911f, -0.021269f, 0.005026f, 0.034084f, 0.007201f, -0.006060f, -0.006893f, -0.017037f, -0.013852f, -0.000012f, 0.001190f, 0.006191f, 0.028569f, 0.002539f, 0.015729f, 0.015387f, -0.001149f, -0.007220f, -0.007039f, 0.026073f, -0.030427f, -0.006517f, -0.026937f, -0.022040f, -0.006295f, 0.000281f, -0.045149f, 0.011816f, -0.014250f, 0.027707f, -0.005801f, 0.001312f, 0.019070f, 0.004031f, 0.046191f, 0.038342f, 0.055035f, 0.020970f, 0.002250f, -0.006280f, -0.005684f, -0.009168f, -0.002800f, -0.010924f, -0.030445f, 0.020698f, 0.025064f, 0.012135f, -0.004206f, 0.002955f, -0.021474f, -0.028931f, 0.013411f, 0.003746f, 0.003923f, -0.009221f, -0.004107f, -0.010014f, -0.005599f, 0.009081f, 0.002862f, 0.011857f, -0.000863f, 0.002744f, -0.006800f, 0.008315f, -0.024186f, -0.006224f, -0.000943f, -0.000832f, -0.004627f, 0.004368f, 0.001006f, 0.001687f, -0.001761f, -0.005739f, + -0.001276f, -0.002313f, -0.001708f, 0.007644f, 0.000797f, 0.001068f, -0.005047f, 0.001749f, 0.001112f, -0.000245f, -0.010841f, -0.007676f, -0.008448f, -0.017810f, 0.023537f, -0.007136f, -0.005378f, 0.055180f, -0.011616f, -0.012362f, 0.061369f, -0.001060f, 0.034835f, 0.025668f, 0.001861f, 0.014324f, -0.008472f, 0.011195f, 0.010481f, 0.006604f, 0.008465f, 0.028274f, -0.019827f, 0.034110f, -0.019097f, -0.000757f, 0.006810f, -0.004807f, -0.025083f, -0.022383f, -0.000882f, -0.036227f, -0.011745f, -0.039558f, -0.002944f, -0.023568f, -0.017736f, -0.012981f, -0.011482f, 0.005709f, -0.031913f, 0.036606f, 0.005538f, -0.024047f, -0.018067f, -0.001298f, -0.004860f, -0.006012f, 0.009276f, 0.004889f, 0.035920f, 0.003990f, -0.000650f, -0.018633f, 0.002806f, 0.007333f, -0.001597f, -0.019864f, -0.008780f, 0.022534f, 0.024500f, -0.001623f, -0.021263f, 0.008442f, -0.004384f, 0.032119f, 0.035699f, -0.014192f, -0.009547f, -0.006794f, 0.003835f, -0.013959f, 0.014284f, -0.044888f, -0.004447f, 0.052726f, -0.047958f, -0.023666f, -0.011305f, 0.003277f, 0.003975f, 0.006160f, -0.004567f, 0.014009f, -0.008707f, -0.002534f, + 0.025496f, -0.004206f, 0.018409f, -0.012780f, 0.018546f, -0.016606f, 0.012624f, 0.010342f, 0.025303f, -0.000684f, -0.004574f, 0.010638f, 0.016569f, 0.001342f, -0.004280f, -0.002799f, 0.001459f, -0.009293f, -0.003039f, 0.008455f, 0.011100f, 0.003419f, -0.003934f, 0.010871f, -0.008867f, 0.008905f, 0.007315f, 0.008113f, 0.004300f, 0.000147f, -0.013682f, 0.013350f, 0.007729f, 0.006098f, 0.002714f, 0.006218f, 0.011563f, 0.002567f, -0.009520f, 0.004474f, -0.007803f, -0.005971f, 0.009531f, -0.002529f, 0.008220f, 0.009027f, -0.003825f, -0.006738f, -0.006723f, 0.003724f, -0.032269f, -0.017711f, -0.005086f, 0.024880f, 0.030012f, 0.020543f, -0.019169f, -0.049146f, 0.084942f, 0.021318f, -0.053370f, -0.053571f, -0.008053f, 0.012893f, 0.036161f, -0.046619f, -0.008249f, 0.008626f, -0.000702f, -0.006764f, 0.048673f, 0.010379f, -0.028615f, 0.015194f, 0.001988f, -0.001440f, 0.025620f, -0.004753f, 0.013995f, -0.031817f, -0.010769f, 0.055699f, 0.020591f, 0.043906f, 0.013869f, 0.039687f, 0.006944f, -0.014686f, 0.027954f, 0.025401f, 0.039937f, 0.019587f, -0.045110f, -0.017188f, 0.009757f, 0.023231f, + -0.018117f, 0.006792f, -0.017454f, -0.029254f, 0.002956f, -0.003459f, -0.017442f, 0.013481f, 0.018912f, 0.016319f, 0.012002f, 0.011159f, -0.008583f, 0.030098f, -0.000219f, -0.030084f, -0.021755f, 0.027059f, 0.014746f, -0.047197f, 0.020515f, 0.008271f, 0.015178f, -0.041253f, -0.028099f, 0.026374f, 0.040926f, 0.023021f, -0.009147f, -0.044109f, 0.010007f, -0.002040f, 0.037586f, -0.012625f, -0.050412f, 0.021060f, 0.029498f, -0.011251f, 0.030702f, 0.025125f, 0.010463f, -0.020249f, 0.002714f, -0.000357f, 0.005967f, 0.002119f, -0.001289f, -0.010815f, -0.004424f, -0.013550f, -0.001308f, -0.002749f, 0.007127f, -0.008310f, -0.004836f, -0.002849f, -0.006059f, -0.003845f, -0.003168f, -0.003841f, 0.015754f, 0.004622f, 0.000305f, 0.015138f, -0.003657f, -0.014433f, -0.009512f, -0.007769f, -0.006071f, 0.000589f, -0.010327f, 0.004328f, 0.006515f, 0.005314f, 0.004162f, -0.013850f, -0.005197f, 0.011514f, 0.009715f, -0.001479f, 0.007513f, -0.001647f, 0.019826f, 0.039172f, 0.014813f, 0.041379f, 0.006548f, 0.018726f, 0.013837f, 0.069240f, 0.094392f, 0.006941f, 0.018522f, -0.060847f, -0.019643f, 0.036036f, + -0.031222f, 0.071327f, -0.014747f, 0.010836f, 0.018887f, 0.041570f, 0.022871f, -0.010506f, -0.030923f, -0.036201f, -0.012238f, -0.006366f, -0.045235f, -0.021719f, -0.018271f, 0.028238f, -0.017115f, 0.008059f, -0.029170f, 0.003325f, -0.011742f, -0.042408f, 0.043103f, 0.029702f, 0.034613f, 0.014936f, -0.021830f, -0.021215f, -0.049222f, 0.000389f, -0.044411f, -0.013870f, -0.004196f, 0.005281f, 0.022048f, 0.017225f, -0.014728f, -0.010644f, 0.018185f, 0.040664f, 0.010603f, 0.015223f, 0.029600f, -0.038831f, 0.026680f, -0.022286f, -0.020575f, -0.039205f, -0.017412f, 0.017155f, 0.014488f, 0.001932f, 0.044751f, -0.010436f, -0.017241f, 0.006389f, 0.011361f, 0.061577f, -0.020906f, 0.024359f, 0.024061f, -0.060256f, -0.000405f, 0.006915f, -0.013632f, -0.009348f, 0.020171f, -0.012400f, 0.001284f, 0.024750f, 0.012604f, -0.037303f, -0.044580f, -0.043151f, -0.020411f, -0.016413f, 0.035050f, 0.030403f, -0.008962f, -0.014101f, 0.001347f, 0.003367f, 0.022963f, -0.003211f, -0.007799f, 0.013962f, -0.003139f, -0.002996f, -0.006608f, 0.009952f, 0.013972f, -0.008229f, 0.013355f, 0.012432f, 0.012904f, 0.001771f, + -0.006081f, 0.011189f, -0.008573f, 0.006468f, 0.014583f, 0.000519f, 0.008528f, 0.011416f, -0.020808f, -0.001481f, 0.009509f, 0.010505f, 0.014532f, 0.001164f, 0.012965f, 0.000108f, 0.000444f, -0.005198f, 0.007264f, 0.010653f, -0.039772f, 0.010790f, 0.060093f, -0.013432f, 0.009359f, -0.025916f, -0.006935f, -0.034772f, 0.028831f, -0.050318f, 0.003030f, -0.040397f, 0.008815f, 0.018212f, 0.007076f, -0.023931f, 0.084891f, -0.005286f, -0.010615f, 0.008270f, -0.047198f, 0.003371f, -0.031655f, 0.001729f, 0.009825f, -0.009094f, -0.000370f, 0.020435f, -0.016854f, 0.001360f, 0.026224f, 0.002681f, 0.007197f, -0.040634f, 0.006007f, -0.002896f, -0.001807f, -0.009858f, -0.050378f, -0.027886f, 0.013417f, 0.004759f, 0.023494f, -0.058696f, 0.007253f, -0.054593f, 0.028768f, -0.037057f, -0.059375f, 0.031035f, 0.056300f, 0.010122f, 0.028112f, -0.041010f, 0.041985f, -0.009657f, 0.006980f, -0.024948f, 0.035124f, 0.014350f, 0.036448f, 0.011714f, 0.044050f, -0.038594f, 0.008342f, 0.002689f, -0.005831f, -0.030498f, -0.024415f, -0.028639f, 0.033992f, -0.008300f, 0.045885f, -0.027439f, -0.020541f, 0.005545f, + 0.006915f, -0.024497f, 0.013919f, -0.014207f, -0.057644f, 0.026246f, 0.039768f, 0.064943f, 0.023503f, 0.046204f, -0.025444f, 0.000566f, -0.028799f, 0.049456f, 0.017509f, -0.008913f, -0.018509f, 0.023723f, -0.015725f, -0.004249f, 0.003515f, -0.014317f, -0.023898f, -0.016168f, -0.010767f, -0.009460f, -0.032146f, -0.014008f, -0.026603f, 0.021783f, -0.004186f, 0.013118f, 0.025977f, 0.006992f, -0.017712f, -0.001392f, -0.017710f, -0.007682f, -0.027014f, -0.015159f, -0.028644f, -0.004818f, 0.050037f, 0.010362f, -0.002533f, 0.011363f, 0.015873f, -0.027860f, -0.011746f, -0.001254f, -0.002523f, -0.011331f, 0.013692f, -0.005176f, -0.041909f, -0.003330f, -0.008604f, -0.031129f, -0.098159f, 0.012281f, -0.031228f, 0.091229f, -0.016943f, -0.045750f, 0.018458f, -0.002419f, -0.045619f, -0.007619f, 0.007794f, -0.027351f, 0.068883f, 0.009983f, 0.006753f, 0.031413f, -0.038490f, -0.059248f, -0.036512f, 0.084101f, -0.006550f, -0.017603f, 0.055559f, 0.031489f, -0.026303f, -0.026051f, -0.014682f, 0.066729f, 0.009444f, -0.016001f, -0.025893f, -0.012333f, -0.051836f, 0.035273f, -0.005947f, 0.014434f, 0.033518f, -0.011585f, + -0.053703f, -0.006354f, 0.069472f, -0.002739f, -0.017220f, 0.033680f, -0.015114f, 0.041742f, 0.027316f, -0.003269f, -0.051197f, -0.025863f, -0.006965f, -0.047187f, -0.027785f, -0.027060f, 0.003775f, -0.006222f, 0.040113f, -0.027567f, -0.009619f, 0.000153f, 0.103041f, 0.036145f, -0.017695f, 0.021204f, 0.012178f, -0.005689f, 0.052336f, 0.025816f, -0.019774f, 0.008596f, 0.042309f, 0.048192f, -0.029149f, -0.020388f, -0.069938f, -0.055726f, 0.031972f, -0.020528f, 0.034510f, -0.000477f, -0.041130f, 0.010542f, -0.003266f, 0.013549f, -0.027378f, -0.020370f, 0.038704f, 0.010317f, 0.005111f, -0.003304f, -0.004555f, 0.026270f, -0.012377f, 0.013815f, -0.006622f, 0.016629f, 0.032488f, 0.009250f, -0.023568f, 0.004494f, -0.009095f, 0.018362f, 0.014575f, 0.005504f, 0.021111f, 0.033604f, -0.013011f, 0.027255f, -0.002654f, -0.034556f, -0.009206f, 0.001854f, -0.019810f, 0.008687f, 0.025591f, 0.000284f, -0.013102f, 0.002382f, -0.004910f, 0.034313f, 0.028613f, 0.003766f, 0.013483f, 0.018126f, 0.008906f, 0.023270f, -0.028826f, -0.020444f, 0.010154f, 0.006726f, -0.006225f, -0.001563f, -0.004700f, -0.010713f, + -0.010564f, -0.111136f, 0.038171f, -0.023782f, 0.059157f, 0.060152f, -0.034852f, 0.028408f, -0.059520f, -0.089369f, 0.002187f, -0.062851f, 0.008267f, -0.007862f, 0.048632f, -0.036102f, 0.034697f, 0.029779f, 0.048773f, -0.074258f, 0.008097f, -0.045447f, -0.041662f, 0.004511f, -0.053783f, -0.034682f, 0.048796f, -0.014245f, 0.018519f, 0.056997f, -0.011322f, 0.018770f, -0.046982f, 0.005405f, -0.051802f, 0.048007f, -0.042948f, -0.028501f, -0.031712f, 0.053547f, 0.042886f, -0.030738f, 0.058650f, 0.038861f, -0.012448f, 0.058233f, -0.003283f, -0.061617f, -0.017068f, -0.007266f, -0.048057f, 0.010811f, -0.101632f, 0.010188f, -0.025898f, -0.048764f, -0.039432f, 0.045400f, -0.027186f, 0.094136f, 0.069895f, -0.105271f, -0.000030f, -0.002767f, 0.004972f, 0.048639f, -0.082721f, -0.057656f, 0.056754f, -0.047398f, -0.059290f, -0.068197f, 0.004510f, 0.139970f, 0.069488f, -0.065192f, -0.041122f, 0.005635f, 0.050852f, 0.019439f, -0.068238f, 0.010080f, -0.045630f, -0.026800f, -0.002537f, -0.008264f, 0.002502f, 0.044873f, 0.010494f, 0.026576f, 0.017531f, -0.052486f, 0.013935f, 0.023444f, -0.007562f, -0.018976f, + 0.002604f, -0.044818f, 0.039636f, 0.014354f, 0.010697f, -0.059424f, 0.009700f, 0.030482f, 0.008421f, -0.014135f, -0.011321f, 0.026174f, -0.043518f, -0.002925f, -0.032530f, -0.017992f, 0.042131f, -0.044968f, -0.002124f, 0.026558f, -0.022797f, 0.020782f, 0.025117f, 0.006455f, 0.003466f, 0.018502f, 0.005736f, -0.024030f, 0.034434f, -0.027059f, -0.021460f, -0.012387f, -0.037215f, -0.011773f, -0.033478f, -0.032067f, 0.012920f, 0.052501f, -0.058160f, 0.029285f, -0.097729f, -0.014645f, -0.038007f, -0.033122f, 0.051801f, -0.066761f, -0.104173f, 0.060937f, 0.091738f, 0.022282f, -0.017727f, -0.083220f, 0.005693f, 0.032670f, 0.032640f, -0.013898f, -0.033356f, 0.004244f, -0.008214f, -0.010839f, 0.010638f, -0.012210f, -0.027939f, -0.054481f, 0.006935f, -0.032758f, 0.008152f, -0.029360f, -0.062188f, 0.038715f, 0.028456f, 0.047588f, 0.001684f, 0.051462f, 0.028809f, 0.007804f, -0.016659f, -0.026197f, -0.042817f, -0.030480f, -0.017214f, 0.012239f, 0.029552f, -0.019721f, -0.009646f, -0.070803f, 0.066567f, 0.078937f, 0.043901f, -0.040082f, 0.042128f, -0.054769f, -0.000822f, 0.012757f, -0.119962f, 0.009947f, + 0.012001f, 0.056877f, -0.071544f, 0.092608f, 0.036414f, -0.066060f, -0.037413f, 0.028037f, -0.011417f, -0.048347f, -0.059354f, -0.063916f, -0.087262f, 0.064546f, -0.027347f, 0.010333f, -0.133496f, -0.052989f, 0.008455f, 0.001671f, 0.030910f, -0.021096f, 0.005674f, 0.023028f, 0.024249f, -0.063664f, -0.014393f, 0.010595f, 0.035683f, 0.025903f, -0.005229f, -0.024333f, -0.010189f, -0.005111f, 0.033348f, 0.005830f, -0.020395f, -0.002266f, -0.015779f, -0.006025f, 0.030877f, 0.014219f, -0.014816f, 0.032837f, -0.032192f, -0.018845f, -0.023934f, 0.031748f, -0.012218f, 0.004000f, -0.014176f, 0.014003f, -0.044886f, 0.006930f, 0.019284f, 0.007373f, -0.007549f, -0.019543f, -0.016611f, -0.022908f, 0.023333f, 0.005151f, -0.007231f, -0.026270f, 0.027827f, 0.001727f, 0.002434f, 0.004077f, -0.045658f, -0.022467f, -0.029720f, 0.004062f, -0.014802f, 0.000346f, -0.000569f, -0.010565f, -0.025515f, -0.009247f, -0.091211f, -0.012036f, 0.033461f, -0.042760f, -0.039800f, 0.037887f, 0.038440f, 0.007924f, -0.035927f, -0.123531f, -0.017994f, 0.024330f, 0.014940f, 0.053767f, -0.000979f, 0.031305f, -0.007866f, -0.000667f, + -0.015363f, 0.002422f, 0.032956f, 0.003881f, 0.001556f, 0.031901f, -0.008271f, -0.007595f, -0.041588f, -0.003787f, -0.006497f, -0.004622f, 0.007425f, 0.025429f, 0.034908f, -0.006767f, 0.000250f, 0.027236f, -0.005912f, -0.052391f, -0.003353f, -0.046518f, 0.007031f, 0.006341f, -0.060747f, 0.044232f, -0.083793f, 0.018800f, 0.023405f, -0.036898f, -0.002319f, 0.108959f, -0.030579f, 0.036740f, -0.022728f, 0.019406f, -0.081353f, 0.008720f, 0.048087f, -0.001377f, 0.041540f, -0.009709f, 0.004605f, -0.002782f, 0.053020f, -0.034048f, -0.040417f, 0.046618f, -0.042875f, -0.053507f, -0.000355f, -0.085375f, 0.057186f, 0.047071f, -0.016721f, 0.018040f, 0.008213f, -0.000731f, -0.072206f, -0.012186f, -0.005187f, 0.031720f, 0.012366f, -0.030873f, 0.029187f, -0.002369f, -0.036578f, -0.025377f, -0.022592f, 0.004586f, 0.005418f, -0.005388f, -0.000423f, 0.022820f, -0.022479f, -0.006973f, 0.016408f, -0.024830f, -0.012746f, 0.018379f, -0.024601f, 0.001206f, 0.022696f, 0.000931f, -0.005734f, 0.009168f, -0.000338f, 0.001696f, 0.019928f, -0.007608f, -0.005329f, -0.015372f, 0.007060f, -0.009936f, -0.008321f, 0.007891f, + 0.011278f, -0.021484f, 0.004059f, -0.020132f, 0.019555f, -0.022859f, 0.013107f, -0.000888f, -0.003183f, 0.001451f, -0.004035f, -0.003386f, -0.000037f, 0.014486f, -0.044681f, -0.136119f, -0.063728f, -0.020872f, 0.045133f, 0.101180f, -0.091710f, 0.020684f, -0.026193f, -0.092451f, -0.012520f, 0.084100f, 0.022984f, 0.069382f, -0.057603f, 0.017836f, -0.019617f, 0.004629f, 0.041129f, 0.007446f, 0.022578f, -0.012575f, -0.118002f, 0.035723f, 0.006327f, -0.049712f, 0.052155f, 0.040028f, -0.035309f, 0.037054f, 0.004888f, -0.037980f, 0.012344f, -0.023228f, 0.074634f, 0.009724f, 0.030534f, 0.002069f, -0.075528f, -0.060264f, -0.020006f, -0.044485f, 0.050008f, 0.071754f, 0.073618f, 0.059494f, -0.019842f, 0.008874f, -0.059243f, -0.008345f, -0.005496f, -0.024482f, -0.030978f, 0.005759f, 0.006289f, -0.081457f, -0.023543f, -0.031432f, -0.001746f, 0.037471f, -0.039908f, -0.008644f, 0.014714f, 0.000772f, 0.042786f, -0.046161f, -0.001409f, -0.052381f, -0.027398f, -0.038541f, 0.022107f, 0.014808f, 0.042727f, -0.005019f, -0.003912f, -0.049323f, -0.014525f, -0.023057f, -0.005827f, 0.021819f, 0.029396f, 0.060137f, + -0.037679f, 0.011518f, -0.032591f, 0.012559f, 0.022723f, 0.006904f, -0.017742f, -0.006752f, -0.005950f, -0.006751f, -0.002261f, 0.016380f, 0.016941f, -0.004011f, -0.001518f, -0.007265f, -0.011286f, 0.008318f, 0.016851f, 0.006255f, 0.002244f, 0.005134f, -0.013450f, -0.015462f, -0.014697f, 0.025652f, -0.000305f, 0.017960f, 0.014653f, -0.001695f, -0.019058f, -0.020180f, 0.003503f, 0.006532f, -0.015752f, -0.004471f, -0.013662f, 0.011089f, -0.009795f, 0.004250f, 0.003339f, 0.011570f, -0.005110f, -0.005689f, 0.003043f, 0.004652f, -0.007942f, 0.013244f, -0.004056f, 0.035587f, -0.057426f, -0.226690f, -0.119516f, 0.024536f, 0.095404f, 0.213444f, 0.163113f, 0.091875f, 0.030977f, 0.047922f, -0.015153f, -0.089760f, -0.173551f, -0.230955f, -0.058370f, -0.066945f, 0.003535f, 0.112476f, 0.160520f, 0.107573f, 0.143834f, 0.033074f, 0.030548f, -0.016842f, -0.072649f, -0.082406f, -0.066523f, -0.070822f, -0.087428f, -0.070225f, -0.029904f, -0.004558f, -0.000972f, 0.056046f, 0.072905f, 0.139123f, 0.065883f, 0.021590f, 0.057267f, 0.088756f, 0.028443f, 0.016874f, -0.071541f, -0.098188f, -0.160206f, -0.074192f, + -0.083957f, -0.060960f, -0.036083f, -0.028544f, 0.012023f, 0.019644f, 0.067572f, 0.137929f, 0.111215f, 0.121072f, 0.089896f, 0.109825f, 0.081984f, -0.066277f, -0.060469f, -0.152945f, -0.118180f, -0.086765f, -0.194436f, -0.150683f, -0.091912f, 0.007144f, 0.118154f, 0.112263f, 0.133045f, 0.165943f, 0.142243f, 0.076325f, 0.092396f, 0.003472f, -0.035895f, -0.097651f, -0.141324f, -0.142332f, -0.117086f, -0.070693f, -0.014999f, 0.020038f, 0.034505f, 0.039203f, 0.065910f, 0.047250f, 0.077063f, 0.048410f, 0.019442f, 0.012329f, -0.002732f, -0.007789f, -0.001617f, -0.053397f, -0.036910f, -0.007749f, -0.024495f, -0.063749f, -0.017614f, -0.023048f, -0.023403f, -0.004657f, 0.047693f, 0.089473f, 0.074649f, 0.007570f, 0.073380f, 0.051268f, -0.009356f, -0.060504f, -0.095106f, -0.088943f, -0.039913f, -0.044206f, -0.027223f, -0.015555f, 0.025523f, 0.055280f, 0.077359f, 0.087318f, 0.063381f, 0.024345f, 0.027272f, -0.017162f, -0.047665f, -0.081133f, -0.072102f, -0.032432f, -0.002990f, -0.024070f, -0.007479f, 0.022795f, 0.029763f, 0.030020f, 0.029235f, 0.006981f, 0.012309f, 0.018068f, -0.003003f, -0.017382f, + 0.000735f, 0.005411f, -0.012188f, -0.014522f, -0.001818f, 0.004731f, 0.004088f, -0.009548f, -0.004515f, 0.003111f, 0.001533f, -0.008372f, -0.013227f, -0.010679f, 0.003989f, 0.000684f, -0.000608f, 0.007889f, 0.014833f, 0.010978f, 0.011308f, 0.007692f, 0.006184f, -0.000838f, -0.004084f, -0.007052f, -0.009628f, -0.008407f, -0.002862f, -0.006794f, -0.005802f, -0.005031f, 0.005369f, 0.006165f, -0.001815f, -0.002941f, 0.005822f, 0.003303f, -0.000615f, -0.000958f, -0.001445f, -0.004147f, 0.003267f, 0.004447f, 0.002301f, 0.003963f, 0.007776f, 0.007876f, 0.007037f, 0.000537f, -0.002281f, -0.004565f, -0.006886f, -0.013173f, -0.015566f, -0.013244f, -0.008824f, -0.007032f, -0.000320f, 0.006997f, 0.013006f, 0.016085f, 0.018387f, 0.015913f, 0.011718f, 0.005079f, -0.000369f, -0.006990f, -0.012010f, -0.014682f, -0.013413f, -0.013831f, -0.009364f, -0.004441f, -0.000720f, 0.003387f, 0.008708f, 0.009241f, 0.008702f, 0.007740f, 0.006493f, 0.003040f, 0.000120f, -0.002020f, -0.002140f, -0.002632f, -0.002713f, -0.002799f, -0.002014f, -0.001508f, -0.000791f, -0.000423f, -0.000123f, -0.000022f, 0.000262f, 0.000363f, + 0.000454f}, + {-0.002889f, -0.004115f, -0.007908f, 0.004621f, 0.007394f, 0.013114f, 0.003542f, -0.009213f, -0.016381f, 0.003552f, -0.007652f, 0.000647f, 0.005145f, 0.001996f, 0.013258f, -0.010969f, -0.002698f, -0.001498f, -0.000866f, -0.009418f, 0.005802f, 0.002449f, 0.001214f, 0.000246f, -0.004592f, -0.003544f, -0.003324f, -0.001083f, 0.000466f, 0.002208f, -0.003461f, 0.005040f, 0.011875f, -0.000389f, 0.005280f, -0.008426f, -0.004878f, -0.010083f, -0.004852f, 0.010686f, 0.000520f, -0.002195f, 0.001911f, 0.011336f, 0.001233f, 0.005695f, -0.001423f, -0.005339f, -0.001659f, 0.006465f, -0.005556f, 0.010153f, 0.006273f, 0.011449f, 0.005672f, 0.000714f, -0.003496f, -0.007616f, -0.004200f, -0.006623f, -0.001006f, -0.004838f, 0.001921f, 0.000408f, -0.002583f, 0.001664f, -0.002217f, 0.004085f, -0.001011f, -0.001147f, 0.005808f, -0.000593f, -0.000400f, 0.000757f, -0.005594f, 0.002538f, -0.004091f, -0.006634f, -0.003797f, -0.002927f, 0.002894f, -0.000563f, -0.000445f, -0.007524f, -0.001233f, 0.001940f, 0.001493f, -0.003000f, 0.000298f, -0.002966f, 0.001338f, 0.002090f, 0.001589f, 0.000575f, -0.000502f, -0.001219f, + 0.000366f, -0.002340f, -0.001236f, 0.000492f, 0.000366f, 0.001011f, 0.001024f, 0.000909f, 0.000227f, 0.002134f, -0.022852f, -0.005171f, 0.009384f, 0.001650f, 0.012790f, 0.006825f, -0.010515f, 0.002781f, -0.000221f, 0.004193f, -0.003761f, -0.017547f, 0.010140f, 0.006213f, 0.011618f, 0.014516f, 0.012502f, 0.004384f, 0.000176f, -0.017879f, -0.001838f, 0.008215f, -0.008148f, -0.007072f, -0.018668f, -0.001251f, -0.003119f, -0.002158f, -0.004748f, 0.002215f, -0.011142f, 0.005087f, -0.001950f, 0.004720f, 0.001393f, -0.007492f, 0.005788f, 0.004829f, 0.012956f, -0.001506f, -0.010371f, -0.005357f, 0.005618f, 0.002260f, -0.002593f, 0.000540f, 0.004137f, 0.000540f, -0.007578f, -0.000069f, 0.001600f, -0.000805f, 0.000483f, -0.004783f, -0.002096f, -0.006370f, -0.001310f, 0.007847f, 0.002806f, -0.002679f, 0.003353f, -0.001018f, -0.000403f, 0.001192f, -0.009102f, -0.000836f, -0.000451f, 0.005093f, 0.009857f, -0.002914f, -0.000994f, -0.006358f, -0.004924f, 0.002518f, 0.011216f, -0.009925f, -0.001554f, 0.002549f, -0.000539f, -0.002695f, -0.000173f, -0.002628f, 0.003652f, 0.003834f, 0.002026f, 0.006233f, + -0.002964f, -0.001917f, -0.000639f, 0.001466f, -0.001426f, 0.000259f, 0.001009f, 0.000843f, -0.000753f, -0.002667f, 0.001939f, -0.002657f, 0.012626f, 0.004727f, 0.004256f, -0.004258f, 0.000317f, 0.001171f, 0.001195f, -0.021728f, -0.011756f, -0.001003f, -0.005416f, -0.006738f, -0.000349f, -0.005676f, -0.022107f, 0.013148f, 0.003015f, 0.005941f, -0.002338f, 0.004515f, -0.005853f, 0.000259f, 0.000782f, 0.011362f, -0.004060f, -0.002419f, -0.001915f, -0.001946f, -0.001832f, -0.000827f, 0.012324f, -0.002410f, -0.000196f, -0.007048f, -0.000406f, -0.003414f, 0.003997f, 0.002007f, -0.011964f, 0.009246f, -0.012110f, -0.000254f, 0.010596f, -0.001543f, 0.000383f, 0.000785f, -0.000259f, -0.007437f, -0.005283f, 0.012157f, 0.007029f, -0.015120f, -0.008082f, 0.002363f, -0.008879f, -0.006457f, 0.006446f, -0.010890f, 0.002096f, 0.002605f, 0.006197f, 0.012947f, 0.009930f, 0.006057f, 0.004633f, -0.008868f, -0.009232f, -0.007920f, 0.002549f, 0.011261f, 0.004348f, -0.001965f, -0.005058f, 0.003672f, -0.004279f, -0.001889f, 0.002613f, -0.004216f, -0.006360f, -0.000885f, 0.005069f, -0.000954f, -0.004347f, 0.000544f, + 0.000025f, 0.004922f, 0.002047f, 0.004545f, 0.001025f, -0.002132f, -0.002170f, -0.001756f, -0.000917f, -0.000611f, 0.001453f, 0.002843f, 0.003403f, 0.003563f, 0.016602f, -0.004055f, -0.004233f, -0.004966f, 0.004688f, -0.005557f, 0.008122f, -0.015732f, -0.002009f, 0.011684f, 0.006120f, -0.011830f, 0.008766f, 0.014386f, 0.013577f, 0.008661f, 0.001667f, -0.000532f, -0.008868f, -0.011437f, 0.004861f, -0.001093f, 0.011477f, -0.000893f, 0.006866f, -0.007142f, -0.004751f, -0.003829f, 0.001142f, 0.003662f, -0.000645f, -0.013969f, 0.002953f, 0.004848f, 0.003521f, 0.006032f, 0.003702f, -0.007578f, -0.018671f, -0.006007f, 0.002739f, 0.003608f, 0.000883f, -0.000795f, 0.003547f, -0.007656f, -0.000122f, -0.013909f, 0.006506f, -0.014351f, -0.003783f, -0.006082f, -0.009445f, 0.006899f, 0.003050f, 0.002928f, -0.008247f, -0.004007f, -0.002426f, -0.008269f, 0.000784f, -0.000698f, 0.004423f, -0.003542f, -0.006965f, -0.005313f, -0.016525f, 0.005254f, 0.001916f, 0.007103f, 0.010469f, 0.013373f, 0.005219f, -0.005264f, -0.007873f, -0.003713f, 0.007265f, 0.007250f, -0.008205f, 0.008953f, 0.000381f, -0.005817f, + 0.012905f, -0.002500f, 0.002911f, 0.002192f, 0.003786f, -0.000228f, -0.002883f, 0.000839f, 0.004011f, 0.001442f, -0.000634f, 0.004346f, -0.002275f, -0.001780f, -0.003152f, 0.001491f, 0.000392f, -0.001611f, 0.002375f, -0.002303f, -0.004153f, -0.001742f, 0.003148f, -0.000758f, -0.000724f, 0.001134f, 0.008163f, 0.007532f, -0.001461f, 0.005292f, -0.016177f, 0.001763f, -0.007798f, 0.000718f, 0.002251f, -0.010207f, 0.003542f, 0.029391f, 0.003087f, -0.002728f, -0.016754f, 0.023638f, -0.000193f, 0.009860f, 0.001041f, -0.000613f, -0.013053f, 0.012424f, 0.003078f, -0.007046f, 0.001498f, 0.000835f, -0.005297f, 0.004957f, 0.013074f, -0.003959f, 0.013911f, -0.004273f, 0.005868f, -0.000335f, 0.009123f, 0.008124f, 0.009084f, -0.000009f, -0.005176f, 0.007121f, -0.005447f, 0.006260f, -0.001970f, 0.006312f, 0.006096f, 0.005874f, -0.000927f, -0.001949f, 0.002249f, -0.005303f, -0.007660f, -0.019303f, 0.012393f, -0.012519f, 0.008528f, 0.001001f, 0.003503f, -0.002346f, -0.023046f, -0.005065f, -0.006334f, -0.011260f, 0.001363f, 0.006833f, -0.014860f, -0.004759f, 0.006483f, 0.001119f, 0.010248f, 0.018053f, + -0.000651f, -0.005021f, -0.004498f, -0.018981f, 0.005635f, 0.003547f, -0.004375f, 0.000887f, 0.007340f, 0.007585f, 0.002071f, 0.001858f, 0.005270f, 0.000523f, -0.000989f, 0.007995f, 0.004614f, -0.004552f, 0.008128f, 0.005957f, 0.007976f, 0.002399f, -0.001542f, 0.000487f, -0.000687f, -0.000644f, -0.003162f, 0.000968f, -0.001982f, 0.001792f, -0.002464f, 0.003699f, 0.001206f, 0.000273f, 0.002986f, 0.000188f, -0.001110f, 0.000797f, -0.000835f, -0.000361f, -0.001236f, 0.003688f, 0.002157f, 0.000688f, 0.002538f, -0.000936f, 0.004132f, 0.000479f, 0.001219f, -0.000514f, 0.001024f, -0.000702f, -0.002624f, 0.001008f, -0.008325f, -0.010068f, -0.000931f, 0.005493f, -0.003188f, -0.004836f, -0.007320f, 0.002199f, 0.013464f, 0.006060f, 0.002165f, -0.030443f, -0.013939f, -0.004205f, 0.006293f, -0.003596f, 0.010371f, 0.034838f, 0.010880f, -0.012734f, 0.002045f, -0.015074f, -0.004839f, 0.010635f, -0.011975f, -0.003016f, 0.015584f, 0.003786f, -0.003822f, 0.002246f, 0.008844f, -0.005242f, 0.004324f, 0.004651f, 0.004627f, -0.008600f, 0.004018f, -0.004009f, -0.004863f, -0.012726f, -0.004893f, -0.007428f, + -0.014136f, 0.006245f, 0.000569f, -0.000941f, 0.014429f, 0.010503f, 0.003761f, 0.011543f, 0.000154f, -0.014574f, 0.012375f, -0.001375f, -0.009908f, -0.007868f, -0.014424f, 0.000673f, 0.017569f, 0.001205f, -0.007603f, 0.007437f, -0.012922f, -0.008142f, 0.006834f, -0.010528f, -0.013920f, -0.007360f, -0.004318f, 0.007903f, -0.012284f, -0.003828f, -0.005661f, 0.015922f, 0.002404f, -0.005533f, 0.007923f, -0.004792f, -0.005697f, 0.000889f, 0.012728f, -0.002388f, 0.000953f, 0.006963f, 0.004116f, -0.016126f, -0.000493f, 0.009798f, 0.004795f, 0.005696f, -0.001186f, -0.003158f, 0.007352f, -0.004345f, 0.001376f, -0.003572f, 0.002192f, 0.002671f, 0.003869f, -0.008209f, 0.000185f, 0.000798f, 0.002194f, 0.000443f, 0.000229f, 0.003760f, -0.000573f, -0.000792f, -0.003456f, 0.002740f, 0.003937f, 0.010674f, 0.007730f, -0.019709f, 0.018835f, -0.007002f, 0.001801f, -0.008579f, 0.016142f, -0.002214f, -0.010757f, -0.035249f, -0.004640f, 0.018392f, 0.004611f, -0.027468f, 0.012624f, 0.000044f, -0.005565f, -0.008767f, -0.007081f, -0.002658f, -0.016302f, -0.002702f, 0.013314f, 0.017299f, 0.020590f, 0.012514f, + 0.018783f, -0.006070f, 0.014812f, 0.007160f, -0.029005f, -0.000628f, 0.007647f, 0.010386f, 0.005116f, -0.009971f, 0.000650f, -0.002038f, 0.010343f, -0.017378f, -0.006189f, 0.013013f, -0.004199f, 0.007340f, 0.003906f, -0.011560f, -0.012818f, -0.006609f, -0.019247f, -0.005451f, -0.005856f, 0.007986f, 0.002959f, -0.011132f, -0.002489f, -0.023829f, -0.005939f, 0.009797f, -0.006899f, -0.023548f, -0.000274f, 0.013447f, -0.028548f, 0.008348f, 0.004842f, 0.009143f, -0.013496f, -0.006268f, -0.012823f, 0.001041f, -0.003798f, -0.014576f, -0.003770f, -0.002418f, 0.008867f, 0.004999f, 0.021481f, 0.001397f, 0.000301f, 0.003450f, -0.001550f, -0.010812f, 0.013605f, 0.004752f, -0.005500f, 0.011891f, 0.002221f, -0.005862f, 0.002024f, -0.000340f, 0.007280f, 0.001683f, 0.001483f, 0.004520f, -0.003778f, 0.000190f, -0.004063f, 0.000016f, -0.003225f, 0.003323f, -0.001282f, 0.001452f, 0.004106f, 0.000597f, -0.002509f, 0.003779f, 0.000996f, 0.004019f, 0.001134f, -0.001140f, 0.001514f, 0.000391f, 0.005422f, -0.022029f, 0.004793f, 0.017469f, 0.022541f, 0.016772f, 0.017137f, 0.006556f, -0.012045f, 0.011968f, + 0.020827f, -0.031066f, 0.015439f, 0.015425f, -0.033262f, -0.008807f, 0.008062f, 0.035668f, -0.002878f, -0.002382f, -0.008611f, -0.010131f, 0.044173f, 0.021836f, 0.006070f, 0.005426f, 0.022871f, -0.000530f, -0.003578f, -0.008694f, 0.003347f, -0.020021f, -0.018057f, -0.004218f, 0.005481f, 0.013204f, 0.005961f, 0.002907f, -0.006866f, 0.001171f, -0.014699f, 0.005964f, -0.021745f, 0.021105f, -0.002458f, -0.010694f, -0.012536f, -0.014332f, -0.021936f, 0.003657f, -0.021236f, -0.007236f, 0.014439f, -0.003496f, -0.007327f, -0.007088f, -0.003467f, -0.018218f, -0.012652f, -0.008281f, -0.007791f, -0.004259f, 0.006573f, 0.003584f, 0.001023f, 0.000835f, -0.016066f, 0.027393f, 0.015743f, 0.000251f, -0.002102f, 0.036068f, -0.004441f, -0.006392f, -0.008962f, -0.018486f, -0.005100f, 0.011963f, 0.011567f, -0.001933f, 0.014092f, -0.028302f, 0.008257f, -0.010887f, 0.002628f, 0.010688f, -0.003844f, -0.000402f, 0.001696f, 0.000768f, 0.003411f, -0.004586f, 0.005181f, 0.006586f, -0.006403f, 0.002451f, 0.003489f, 0.004235f, 0.011445f, -0.008822f, -0.000853f, 0.001048f, -0.000277f, 0.002520f, 0.001216f, 0.002636f, + 0.003566f, -0.003324f, 0.002271f, -0.001165f, 0.000220f, -0.006355f, -0.001392f, -0.001643f, 0.005190f, -0.005403f, 0.040959f, 0.014105f, 0.008806f, 0.019970f, -0.022162f, -0.013269f, 0.012958f, 0.013767f, 0.030451f, 0.004553f, 0.008624f, -0.020208f, -0.000983f, 0.010229f, -0.026533f, -0.008450f, 0.010927f, -0.008765f, 0.000554f, 0.007478f, 0.019988f, -0.006549f, 0.007945f, 0.004202f, 0.004568f, 0.017032f, 0.014922f, 0.018140f, -0.013948f, -0.009331f, 0.019711f, -0.024592f, -0.007999f, -0.008066f, -0.001444f, -0.006565f, -0.015593f, 0.015510f, -0.000339f, -0.016934f, 0.001019f, -0.006603f, -0.017562f, -0.022027f, -0.012107f, -0.013162f, 0.026378f, -0.008226f, -0.006451f, -0.015398f, -0.001078f, -0.007787f, 0.004256f, 0.030966f, -0.005576f, -0.009991f, 0.005460f, -0.001728f, 0.018010f, -0.020561f, 0.035176f, 0.007113f, -0.033445f, -0.024362f, 0.009078f, -0.022550f, 0.000575f, -0.024152f, 0.000316f, 0.005285f, -0.002899f, 0.026296f, 0.033040f, -0.015516f, 0.004186f, -0.006342f, -0.024093f, -0.008980f, -0.013029f, -0.015758f, -0.003443f, 0.012028f, -0.008043f, -0.018590f, 0.012575f, 0.000903f, + -0.009917f, -0.008461f, 0.004284f, 0.007024f, -0.002807f, -0.001870f, -0.009324f, 0.000604f, -0.008593f, -0.001681f, -0.004197f, 0.006224f, 0.007144f, 0.001744f, -0.008528f, 0.001014f, 0.000777f, 0.005725f, 0.000089f, -0.002086f, 0.000687f, -0.010894f, -0.000991f, -0.006111f, -0.004177f, 0.000928f, 0.002691f, -0.005692f, 0.004699f, -0.003283f, -0.002923f, 0.007524f, -0.002757f, -0.007197f, -0.036101f, 0.013145f, 0.073537f, -0.013149f, -0.001215f, -0.032714f, -0.013978f, 0.021593f, -0.003563f, 0.042031f, 0.025090f, 0.023173f, -0.000209f, 0.017804f, -0.035062f, 0.031216f, 0.015983f, 0.001153f, 0.003750f, -0.020452f, 0.008362f, -0.000638f, 0.031795f, 0.017611f, 0.021058f, -0.008135f, 0.001707f, 0.005260f, -0.021998f, -0.017774f, -0.008330f, 0.009539f, 0.037141f, -0.010740f, -0.013060f, -0.013112f, -0.007542f, 0.004546f, -0.024258f, -0.007261f, -0.001974f, -0.013104f, -0.025659f, -0.005669f, -0.032445f, -0.011982f, 0.018458f, -0.022613f, -0.010138f, -0.004719f, 0.001396f, -0.036439f, -0.022174f, -0.005035f, -0.004173f, -0.007218f, 0.022379f, 0.009695f, 0.001117f, 0.013420f, 0.023063f, -0.014759f, + -0.006377f, -0.020012f, 0.008574f, -0.015805f, 0.012804f, 0.014842f, 0.017817f, 0.032788f, 0.008993f, -0.025224f, -0.004446f, 0.055163f, 0.017682f, 0.030882f, 0.014651f, 0.009169f, -0.002534f, 0.003491f, -0.013519f, -0.017078f, 0.007180f, 0.005233f, -0.017056f, 0.004137f, 0.011250f, 0.010235f, -0.016397f, 0.012231f, 0.003872f, 0.008733f, 0.010080f, -0.000369f, 0.004661f, 0.008434f, 0.003193f, 0.009953f, -0.001435f, 0.001921f, -0.003632f, -0.007219f, 0.001087f, 0.008653f, 0.000925f, -0.004190f, 0.014014f, 0.008916f, 0.007440f, 0.000029f, -0.002160f, -0.002659f, -0.000795f, 0.000203f, -0.002772f, 0.004777f, 0.003528f, 0.003701f, 0.003957f, 0.001932f, -0.008120f, 0.038059f, 0.041713f, -0.042235f, 0.010267f, 0.030888f, 0.018620f, -0.011814f, -0.022518f, -0.019461f, 0.043462f, 0.003528f, 0.016300f, 0.022799f, -0.013092f, 0.006410f, 0.009470f, -0.026680f, -0.028414f, 0.022992f, 0.007729f, -0.041256f, -0.009618f, 0.053580f, 0.025596f, -0.000122f, -0.030686f, 0.010020f, 0.007929f, 0.032586f, 0.010657f, -0.015897f, 0.021212f, 0.003775f, -0.009103f, -0.003095f, -0.006580f, -0.025420f, + -0.012153f, 0.003907f, 0.004253f, -0.030337f, -0.032900f, -0.019371f, -0.009543f, -0.036022f, 0.021278f, -0.002226f, -0.025750f, 0.004914f, 0.000460f, -0.011071f, -0.003253f, 0.007779f, -0.000360f, 0.008192f, 0.009297f, 0.014575f, -0.014412f, -0.016857f, 0.022184f, 0.045371f, 0.020350f, 0.012440f, 0.032881f, -0.006131f, 0.017838f, 0.044116f, 0.026756f, 0.004229f, 0.004740f, -0.013685f, -0.027138f, 0.026293f, -0.025863f, 0.011635f, -0.010474f, 0.008116f, -0.033807f, 0.016232f, -0.000636f, -0.010876f, -0.006542f, 0.019229f, -0.018330f, -0.008993f, -0.004906f, 0.003043f, -0.000659f, 0.005798f, -0.007413f, -0.000758f, -0.013170f, -0.003122f, -0.000993f, 0.002546f, -0.004120f, 0.004654f, -0.005100f, 0.004067f, -0.004597f, 0.014847f, 0.004327f, -0.003566f, -0.007073f, 0.005759f, 0.000348f, 0.005309f, 0.004333f, -0.003269f, 0.003871f, 0.005640f, -0.003895f, 0.001672f, 0.006378f, -0.001747f, 0.002069f, 0.007612f, 0.007416f, 0.013691f, -0.008540f, -0.039496f, 0.011167f, -0.019013f, -0.008729f, -0.014686f, -0.002418f, 0.033914f, 0.033607f, -0.067800f, 0.021063f, 0.021581f, -0.021007f, -0.034474f, + -0.044933f, 0.007981f, -0.013150f, 0.008371f, -0.015635f, -0.012321f, -0.007233f, 0.042033f, 0.010712f, -0.003626f, -0.000647f, -0.006662f, -0.012477f, 0.010649f, 0.007065f, -0.000174f, 0.016928f, 0.003683f, -0.003474f, 0.006020f, 0.015375f, 0.043361f, 0.004443f, 0.005349f, -0.021334f, -0.009160f, -0.010054f, -0.010778f, -0.001225f, -0.003607f, 0.014447f, 0.020737f, 0.001074f, 0.023953f, -0.005474f, -0.004057f, -0.004817f, -0.002679f, -0.041922f, 0.047374f, 0.001318f, 0.003342f, -0.003389f, -0.012337f, 0.012677f, -0.003270f, 0.019340f, 0.001066f, -0.018293f, 0.004953f, 0.020503f, -0.014539f, 0.019052f, 0.004574f, -0.028864f, -0.004984f, -0.006083f, -0.052743f, -0.017879f, 0.013434f, 0.013737f, -0.021581f, -0.012258f, 0.012533f, 0.001880f, 0.035175f, -0.027934f, 0.012731f, 0.015863f, -0.002337f, 0.013894f, 0.012712f, 0.015733f, 0.005939f, 0.007087f, 0.006236f, 0.005318f, -0.002417f, -0.002720f, -0.009173f, 0.003786f, 0.013085f, 0.002505f, -0.009742f, -0.003594f, -0.005544f, 0.003288f, -0.004323f, -0.003410f, -0.006529f, 0.008699f, 0.004735f, 0.005991f, 0.000518f, -0.015158f, 0.006017f, + -0.015405f, 0.001081f, 0.002680f, 0.005381f, -0.007204f, -0.003693f, -0.002117f, 0.004918f, 0.009534f, 0.004086f, 0.004138f, 0.001170f, 0.004336f, -0.010604f, 0.034905f, 0.010301f, 0.010998f, -0.024978f, 0.019230f, -0.009795f, 0.018340f, -0.013804f, 0.023551f, -0.020797f, -0.016888f, 0.032228f, 0.004315f, 0.008483f, -0.018663f, -0.042185f, -0.003735f, 0.012743f, 0.003635f, 0.018559f, -0.014853f, 0.002677f, 0.000119f, -0.031421f, -0.022554f, 0.010825f, -0.035524f, -0.023171f, 0.011756f, 0.000469f, -0.037160f, -0.005043f, -0.018356f, 0.024207f, 0.014650f, 0.004628f, -0.008421f, -0.023163f, -0.049579f, 0.017914f, -0.022035f, 0.027627f, -0.007925f, -0.008813f, -0.004308f, -0.012927f, 0.007912f, 0.007464f, -0.039568f, -0.017294f, 0.039582f, 0.034648f, -0.035146f, 0.046389f, 0.002703f, 0.034239f, -0.007811f, -0.007840f, -0.003956f, -0.013090f, 0.017958f, -0.012897f, -0.036883f, -0.019463f, 0.044543f, -0.009606f, -0.008559f, -0.002179f, 0.014031f, 0.009064f, 0.022674f, -0.050510f, 0.015331f, 0.034871f, 0.027600f, -0.010852f, -0.002501f, -0.010680f, -0.022647f, 0.002866f, 0.021465f, 0.033037f, + -0.019770f, -0.020127f, -0.022717f, -0.002092f, -0.003405f, 0.002399f, -0.010703f, 0.005981f, 0.006143f, -0.003665f, -0.001244f, -0.004711f, -0.009701f, 0.010070f, 0.000598f, 0.001722f, -0.014917f, -0.012664f, -0.003039f, -0.016492f, -0.006107f, -0.008164f, 0.002274f, -0.005720f, 0.000432f, 0.013086f, -0.004802f, 0.005578f, 0.000240f, -0.011806f, 0.002776f, -0.005856f, -0.001137f, 0.005371f, 0.011723f, 0.001795f, 0.005171f, 0.010747f, 0.010930f, 0.014107f, -0.003970f, -0.003594f, -0.002076f, 0.014456f, -0.001754f, -0.022868f, -0.000840f, -0.017562f, 0.023866f, 0.018529f, -0.017990f, -0.030653f, -0.025724f, -0.015090f, -0.029816f, -0.001631f, 0.014118f, 0.032769f, -0.005667f, -0.001529f, -0.054800f, 0.032858f, 0.040867f, -0.006443f, -0.022233f, -0.022542f, -0.014006f, 0.061564f, -0.037482f, -0.000089f, -0.004442f, 0.016651f, -0.002780f, 0.070922f, 0.001702f, -0.038526f, -0.010184f, -0.036609f, 0.047815f, 0.041655f, -0.033613f, 0.039189f, 0.009767f, 0.031559f, 0.011745f, -0.059112f, 0.018516f, 0.031711f, -0.041027f, -0.011316f, -0.046549f, -0.023183f, 0.001562f, -0.042783f, -0.036605f, -0.000987f, + -0.029670f, -0.000359f, 0.010357f, -0.010545f, -0.029435f, 0.024179f, 0.021806f, -0.048307f, -0.037033f, 0.020280f, 0.008464f, 0.013058f, 0.024454f, 0.032102f, -0.011860f, -0.017327f, -0.001069f, -0.011208f, -0.000688f, -0.003529f, -0.016305f, 0.006508f, -0.067227f, 0.022947f, 0.032577f, -0.034567f, -0.028625f, 0.021728f, -0.021942f, -0.019736f, -0.009536f, 0.012192f, 0.001619f, 0.041744f, 0.000229f, 0.024422f, -0.002487f, -0.016895f, 0.008946f, 0.012650f, 0.012944f, -0.010870f, 0.000184f, 0.001434f, -0.001634f, -0.006945f, -0.016731f, 0.011069f, 0.017397f, -0.008872f, -0.029373f, 0.007553f, 0.002403f, 0.031112f, -0.003096f, -0.012020f, 0.009457f, 0.003561f, 0.015374f, 0.000095f, -0.009592f, 0.000344f, 0.012508f, 0.009542f, 0.003012f, -0.003215f, 0.002244f, -0.005650f, -0.005005f, -0.014442f, 0.007146f, 0.007092f, -0.010120f, 0.004937f, 0.004229f, 0.002795f, -0.001857f, -0.004777f, 0.001096f, -0.013841f, -0.010473f, 0.000296f, 0.014852f, 0.037125f, 0.069964f, 0.110555f, 0.003080f, -0.045025f, -0.057913f, -0.013776f, 0.002026f, -0.014013f, 0.053541f, 0.040089f, 0.027643f, 0.046505f, + 0.033767f, 0.027252f, 0.001584f, 0.021906f, -0.029077f, 0.040247f, 0.046580f, 0.002914f, 0.048472f, -0.020339f, 0.003730f, 0.011041f, -0.045739f, -0.030834f, -0.011048f, -0.027309f, -0.032138f, -0.004984f, 0.049830f, -0.000937f, -0.009926f, 0.005985f, 0.010449f, -0.007044f, -0.068175f, -0.009559f, 0.017515f, -0.010274f, -0.021060f, 0.008133f, 0.026023f, 0.046387f, 0.011261f, 0.023528f, 0.032767f, 0.040417f, -0.056390f, -0.039187f, 0.021854f, -0.016561f, 0.071210f, -0.007649f, 0.061199f, -0.049761f, 0.029081f, 0.049849f, 0.001682f, 0.007935f, 0.029823f, -0.054365f, -0.025382f, 0.001225f, 0.030729f, 0.000693f, 0.035405f, 0.014269f, 0.013189f, 0.036120f, 0.012909f, -0.004975f, -0.015475f, -0.043038f, -0.010111f, 0.002340f, 0.011198f, 0.000719f, 0.000765f, 0.000819f, -0.023553f, 0.012032f, 0.007996f, 0.020133f, -0.007141f, 0.015118f, 0.024755f, 0.014688f, 0.006147f, -0.000194f, -0.003135f, 0.005149f, -0.008777f, 0.005002f, -0.008394f, 0.000155f, 0.004981f, 0.004986f, -0.007438f, 0.011105f, 0.010698f, 0.013537f, 0.001381f, 0.001008f, 0.005555f, -0.004954f, 0.009143f, -0.006990f, + 0.009238f, 0.021455f, -0.002751f, -0.004183f, 0.001515f, 0.018660f, -0.011638f, 0.004364f, -0.002368f, -0.002813f, -0.003682f, 0.002538f, 0.005034f, 0.008396f, 0.006274f, 0.006406f, 0.017217f, -0.012223f, 0.020455f, -0.010035f, -0.023773f, 0.006914f, 0.079396f, 0.026411f, 0.027888f, 0.057865f, -0.004240f, 0.012233f, 0.025227f, 0.037146f, -0.041345f, -0.033249f, -0.014065f, -0.036474f, -0.006329f, -0.048990f, 0.025217f, 0.038959f, 0.028599f, 0.038681f, -0.026042f, -0.014613f, 0.030067f, 0.023165f, -0.016269f, 0.039204f, 0.023755f, -0.009178f, -0.047981f, 0.026593f, 0.029403f, -0.024614f, -0.003515f, 0.013885f, 0.007067f, -0.038957f, 0.044845f, 0.011779f, 0.048137f, 0.026023f, 0.018958f, -0.026253f, 0.022547f, -0.014034f, 0.073312f, -0.057818f, 0.006483f, 0.021894f, -0.010771f, -0.037401f, 0.023932f, 0.023105f, -0.004387f, 0.022725f, -0.022113f, 0.059448f, -0.027450f, 0.015517f, 0.013175f, -0.038086f, -0.016225f, -0.052514f, 0.022451f, 0.015090f, -0.038688f, 0.036089f, 0.031284f, -0.027157f, 0.022504f, -0.003141f, 0.060749f, 0.019528f, -0.030041f, -0.022447f, -0.021435f, 0.018801f, + -0.012386f, 0.015985f, -0.007491f, 0.003310f, 0.020510f, 0.012531f, 0.010358f, -0.020201f, 0.052276f, 0.005481f, -0.019938f, -0.029874f, 0.025384f, 0.012216f, 0.023976f, -0.013863f, 0.007193f, 0.018536f, 0.039506f, 0.009674f, -0.006233f, 0.032373f, -0.008592f, -0.009804f, -0.004398f, 0.002869f, 0.009060f, -0.019883f, -0.016908f, 0.007084f, -0.014584f, -0.009392f, 0.002086f, -0.007492f, -0.001829f, -0.002905f, -0.014304f, 0.009749f, 0.006066f, -0.028524f, 0.006987f, -0.021434f, -0.012867f, -0.007115f, 0.010538f, 0.005076f, 0.019581f, 0.008038f, -0.000366f, 0.005040f, 0.007336f, 0.007797f, 0.000963f, 0.001851f, 0.004667f, 0.015987f, -0.005148f, -0.002901f, -0.071218f, 0.030553f, -0.060858f, 0.061315f, 0.073871f, -0.004833f, 0.012287f, -0.061577f, -0.001308f, -0.014436f, 0.005460f, 0.034401f, 0.035409f, -0.011598f, 0.018029f, 0.028438f, 0.003961f, 0.011411f, 0.007791f, 0.011248f, -0.008349f, 0.041860f, -0.006626f, 0.008802f, -0.024502f, 0.047219f, 0.009801f, -0.005427f, -0.002194f, 0.042408f, 0.015999f, 0.019546f, 0.047313f, -0.011575f, -0.030155f, 0.057906f, -0.063040f, -0.027881f, + -0.011366f, 0.012978f, 0.040863f, 0.008752f, -0.017494f, -0.018340f, -0.030662f, -0.001483f, -0.005968f, 0.011173f, 0.065887f, 0.063630f, 0.040539f, 0.057332f, -0.005706f, 0.086749f, -0.029644f, 0.023620f, -0.021141f, 0.001293f, 0.027228f, -0.014260f, 0.002949f, -0.027054f, -0.034178f, -0.000180f, -0.021552f, 0.017149f, -0.029173f, 0.042501f, -0.032721f, -0.053151f, -0.021847f, -0.014207f, -0.004887f, 0.062290f, -0.038201f, -0.009549f, -0.005492f, -0.040358f, -0.010084f, 0.022271f, 0.049495f, -0.005159f, -0.002211f, 0.001120f, -0.016290f, -0.034826f, 0.001364f, -0.002298f, -0.005182f, -0.004360f, 0.000023f, -0.020490f, 0.015862f, -0.017673f, 0.019605f, -0.008618f, -0.014922f, -0.017320f, 0.004140f, 0.014673f, -0.010843f, -0.014984f, -0.004849f, 0.011991f, 0.014427f, -0.011239f, 0.006875f, 0.007676f, 0.005281f, 0.007637f, -0.007957f, -0.008329f, 0.004229f, -0.000121f, 0.009247f, -0.012072f, 0.008181f, 0.013303f, -0.000329f, -0.005719f, -0.007045f, 0.011489f, -0.025092f, -0.013071f, 0.025520f, -0.016297f, -0.001367f, -0.005119f, 0.005304f, -0.016764f, 0.011792f, -0.006146f, 0.023040f, 0.019973f, + 0.000312f, -0.024867f, 0.109051f, 0.151403f, 0.046425f, 0.118020f, -0.025851f, -0.082113f, -0.057536f, -0.040239f, 0.019914f, 0.021686f, -0.027369f, -0.044115f, 0.038211f, 0.051364f, 0.030027f, 0.051245f, 0.039549f, 0.009741f, 0.015740f, 0.007723f, -0.002559f, -0.033755f, 0.014898f, -0.039996f, 0.028184f, 0.000233f, -0.037396f, 0.043347f, 0.026254f, 0.020722f, 0.074935f, 0.046015f, -0.021456f, -0.014491f, -0.026939f, -0.031993f, -0.039111f, -0.015477f, 0.001580f, -0.030991f, -0.009572f, 0.064685f, 0.098207f, 0.072284f, 0.009946f, 0.049324f, 0.052697f, 0.080454f, 0.036917f, -0.042683f, -0.069965f, -0.043706f, -0.044615f, 0.026416f, 0.022290f, -0.095763f, -0.065576f, -0.016930f, 0.040458f, 0.087099f, -0.065149f, -0.002601f, -0.056525f, -0.007373f, 0.071332f, -0.039213f, 0.026959f, -0.056875f, -0.009144f, -0.017000f, 0.048167f, -0.053306f, -0.030229f, 0.000865f, 0.021363f, -0.043271f, 0.099535f, -0.023400f, -0.001384f, 0.056508f, -0.024645f, 0.042487f, -0.013357f, -0.035079f, -0.027077f, 0.016518f, 0.001832f, 0.014089f, 0.009026f, -0.031307f, 0.001085f, -0.013207f, 0.038291f, 0.022299f, + 0.006958f, 0.020818f, 0.023964f, 0.001344f, -0.000046f, -0.007508f, -0.023468f, 0.048552f, -0.014732f, 0.010208f, 0.000675f, -0.028080f, 0.001427f, 0.003125f, -0.008575f, -0.018436f, -0.003704f, -0.010798f, 0.003009f, 0.007283f, -0.007906f, 0.001712f, 0.033426f, 0.023681f, -0.003894f, -0.005234f, 0.031717f, -0.013032f, -0.003576f, -0.026368f, -0.037716f, -0.014193f, -0.009655f, -0.004012f, -0.010232f, -0.042752f, -0.083129f, 0.010325f, 0.046536f, -0.038410f, 0.072014f, -0.028513f, 0.028733f, -0.009426f, -0.082852f, -0.042379f, -0.003855f, -0.048704f, -0.111906f, -0.031298f, 0.040608f, 0.062321f, -0.030181f, -0.047851f, -0.099841f, -0.029600f, 0.029692f, -0.019753f, -0.028816f, -0.049565f, 0.011968f, -0.011094f, -0.008255f, -0.009201f, 0.020378f, 0.040309f, -0.031090f, 0.031194f, 0.026646f, -0.031449f, -0.091110f, 0.007606f, 0.007564f, 0.023714f, 0.011185f, 0.059875f, 0.006207f, -0.090587f, 0.000778f, -0.099774f, -0.000282f, 0.034854f, 0.042019f, -0.007587f, 0.005723f, 0.046605f, -0.024110f, -0.017530f, -0.031120f, 0.030229f, 0.022056f, -0.014223f, 0.036015f, -0.011008f, 0.015265f, 0.016857f, + 0.058832f, 0.007994f, -0.020657f, -0.062623f, -0.021470f, 0.032761f, 0.028443f, 0.050042f, 0.072811f, 0.125942f, 0.062759f, 0.030435f, -0.032615f, -0.126100f, -0.034482f, -0.018050f, 0.096689f, -0.016044f, 0.006133f, -0.000234f, -0.030355f, 0.004327f, 0.028421f, 0.013697f, -0.000568f, 0.001563f, 0.000619f, 0.000354f, 0.046919f, -0.016729f, -0.013863f, -0.015360f, 0.032567f, 0.012618f, 0.016514f, -0.012596f, -0.039858f, 0.013349f, 0.016963f, -0.017999f, -0.002616f, 0.010350f, -0.002233f, 0.003291f, -0.007032f, -0.057237f, -0.018781f, -0.004412f, 0.026402f, 0.041522f, 0.004963f, -0.034155f, -0.033481f, 0.015554f, 0.005619f, -0.002934f, -0.005645f, 0.002127f, -0.003524f, -0.001453f, 0.030724f, -0.033497f, 0.004323f, -0.028741f, 0.030728f, -0.016593f, 0.000689f, -0.041473f, -0.006521f, 0.028458f, -0.008754f, 0.015507f, -0.023983f, 0.012153f, -0.012604f, 0.019717f, -0.019253f, 0.006747f, -0.081387f, -0.024776f, 0.056611f, -0.027876f, -0.023379f, -0.006029f, -0.018256f, -0.065255f, -0.072546f, -0.106141f, -0.033499f, 0.000203f, -0.008205f, 0.069473f, 0.019130f, 0.090740f, 0.056003f, 0.028093f, + -0.012658f, -0.033546f, -0.006232f, 0.127245f, 0.007925f, 0.036660f, 0.020700f, -0.016002f, 0.063436f, -0.026486f, 0.051212f, -0.055924f, -0.005522f, -0.040316f, 0.048204f, -0.067904f, -0.014254f, 0.020688f, 0.021413f, 0.021725f, -0.059260f, 0.042144f, -0.067830f, 0.013725f, -0.033202f, -0.022847f, 0.067612f, 0.003919f, 0.004504f, 0.023171f, -0.025574f, -0.001597f, 0.017727f, -0.082476f, 0.002299f, 0.018903f, -0.011906f, 0.052967f, -0.023667f, -0.010493f, 0.089360f, -0.033936f, -0.074190f, 0.000067f, -0.027963f, 0.005880f, -0.005529f, -0.004047f, -0.059521f, 0.031727f, -0.009608f, -0.081472f, 0.049052f, -0.100876f, 0.019664f, -0.023259f, -0.039770f, -0.063844f, -0.008097f, 0.017038f, 0.029401f, 0.002403f, 0.023832f, 0.029165f, -0.034641f, 0.061141f, -0.014075f, 0.016171f, -0.000695f, 0.029044f, -0.001209f, -0.003566f, -0.009845f, 0.017050f, -0.036537f, -0.005017f, 0.012134f, 0.007637f, -0.014119f, -0.000548f, -0.015818f, -0.021563f, 0.011074f, 0.008351f, 0.016290f, 0.009984f, -0.004487f, 0.012092f, 0.036637f, -0.018446f, -0.018834f, 0.005952f, -0.001627f, 0.006712f, 0.027220f, -0.004322f, + 0.014909f, 0.013315f, 0.014146f, -0.018870f, -0.021866f, -0.005966f, -0.001605f, -0.023627f, -0.001147f, -0.005136f, 0.009941f, -0.025807f, 0.007734f, -0.011765f, -0.033922f, -0.122971f, -0.126416f, -0.107713f, -0.053666f, 0.226721f, 0.071885f, -0.026850f, -0.028123f, -0.110244f, -0.234945f, -0.025344f, 0.064680f, 0.080470f, 0.035229f, -0.035089f, -0.026024f, -0.068371f, -0.075507f, 0.058888f, -0.054089f, 0.143373f, 0.107693f, -0.164573f, 0.054711f, 0.022979f, -0.033675f, 0.014078f, 0.120082f, 0.018226f, 0.083153f, 0.164121f, -0.034465f, -0.132622f, 0.007272f, -0.021647f, -0.123715f, -0.032840f, 0.061216f, -0.004325f, 0.075119f, 0.120959f, 0.011653f, -0.102692f, -0.202390f, -0.173419f, -0.155125f, -0.015240f, 0.152141f, 0.044271f, 0.041265f, 0.023904f, -0.040204f, -0.202643f, -0.126625f, -0.064115f, -0.023966f, 0.013682f, 0.046942f, 0.045931f, 0.058356f, 0.060104f, 0.074105f, -0.086614f, -0.030762f, -0.070699f, -0.005257f, -0.077433f, 0.049767f, 0.050102f, 0.101030f, 0.112511f, 0.053987f, 0.002953f, -0.028834f, -0.019261f, -0.136326f, -0.107877f, 0.096692f, 0.151294f, 0.102968f, 0.121174f, + -0.028021f, -0.052180f, -0.107729f, -0.060416f, 0.032853f, 0.001647f, 0.008206f, 0.035112f, 0.012095f, 0.009939f, -0.025532f, -0.033450f, -0.016501f, -0.024899f, 0.001735f, 0.027918f, 0.008264f, 0.011743f, -0.005280f, 0.016935f, -0.027945f, 0.020754f, -0.007819f, -0.025133f, -0.025413f, -0.006363f, -0.042766f, -0.011833f, -0.025852f, 0.029177f, 0.031910f, 0.016671f, 0.012815f, -0.026746f, -0.057412f, -0.055949f, 0.016071f, -0.003758f, 0.026935f, 0.024702f, 0.013038f, -0.040265f, -0.020587f, -0.038236f, -0.060838f, 0.020234f, 0.037852f, 0.016410f, 0.002020f, 0.043282f, -0.015953f, -0.226272f, -0.253338f, -0.172226f, -0.177085f, -0.047160f, 0.199096f, 0.134088f, 0.214802f, 0.239056f, 0.363184f, 0.241141f, 0.249744f, 0.161058f, -0.012007f, -0.179234f, -0.309745f, -0.366178f, -0.317590f, -0.250717f, -0.181103f, -0.043845f, -0.008887f, -0.026194f, 0.009561f, 0.078866f, 0.130220f, 0.180168f, 0.157015f, 0.213519f, 0.206648f, 0.266538f, 0.244212f, 0.068460f, 0.164058f, -0.035569f, 0.045171f, 0.032922f, 0.009673f, -0.022727f, -0.237210f, -0.285364f, -0.364265f, -0.427915f, -0.388508f, -0.216316f, + -0.191682f, -0.158205f, -0.197535f, -0.229288f, -0.048630f, 0.055885f, 0.144339f, 0.210617f, 0.305640f, 0.364365f, 0.468528f, 0.617404f, 0.600249f, 0.455262f, 0.370071f, 0.307307f, 0.163201f, 0.258017f, -0.104212f, -0.210914f, -0.503543f, -0.577529f, -0.717081f, -0.689746f, -0.629999f, -0.597864f, -0.576640f, -0.355770f, -0.219647f, -0.120208f, 0.322898f, 0.327980f, 0.502551f, 0.644363f, 0.559603f, 0.504564f, 0.511411f, 0.400901f, 0.306630f, 0.167672f, 0.022766f, -0.002981f, -0.094018f, -0.115631f, -0.166362f, -0.216905f, -0.296596f, -0.321847f, -0.291915f, -0.337761f, -0.260017f, -0.239879f, -0.225282f, -0.199014f, -0.101733f, -0.020890f, 0.106217f, 0.216929f, 0.204809f, 0.317414f, 0.352161f, 0.386919f, 0.458178f, 0.369414f, 0.216759f, 0.107129f, -0.064936f, -0.169268f, -0.167931f, -0.326806f, -0.301355f, -0.414399f, -0.328659f, -0.343660f, -0.219496f, -0.231133f, -0.133951f, -0.018171f, 0.116997f, 0.173763f, 0.308727f, 0.357508f, 0.348603f, 0.336943f, 0.329981f, 0.251981f, 0.090996f, -0.059153f, -0.082719f, -0.110156f, -0.119640f, -0.137934f, -0.160925f, -0.151667f, -0.110330f, -0.122100f, + -0.108305f, -0.096284f, -0.067164f, -0.032002f, -0.019775f, -0.016853f, 0.005609f, 0.018822f, 0.014540f, 0.017178f, 0.049108f, 0.060765f, 0.065960f, 0.059358f, 0.046411f, 0.047234f, 0.073841f, 0.051288f, 0.042982f, 0.040507f, 0.038337f, 0.015062f, -0.002238f, -0.020718f, -0.014503f, -0.020342f, -0.024579f, -0.036510f, -0.028102f, -0.025590f, -0.029419f, -0.040146f, -0.029542f, -0.027540f, -0.031123f, -0.033503f, -0.017677f, -0.013882f, -0.006764f, -0.005388f, 0.002096f, 0.013887f, 0.025895f, 0.021373f, 0.020217f, 0.019982f, 0.024719f, 0.019707f, 0.013936f, 0.007556f, 0.011534f, 0.007879f, 0.006334f, 0.003464f, 0.002038f, -0.004902f, -0.001705f, 0.004758f, 0.007409f, 0.002290f, 0.001473f, -0.000845f, 0.002183f, -0.001719f, -0.009224f, -0.014043f, -0.011794f, -0.013649f, -0.013490f, -0.013652f, -0.010682f, -0.010970f, -0.008353f, -0.004519f, 0.000102f, 0.000400f, 0.002361f, 0.001218f, 0.002939f, 0.003516f, 0.005495f, 0.006157f, 0.008012f, 0.007605f, 0.008158f, 0.006444f, 0.005668f, 0.003647f, 0.002697f, 0.001132f, 0.000465f, -0.000508f, -0.000665f, -0.001159f, -0.001228f, -0.001318f, + -0.001204f} + }, + { + {0.024821f, 0.002780f, -0.011035f, 0.003700f, -0.007001f, 0.001760f, -0.004582f, -0.002911f, -0.006105f, 0.004225f, 0.007328f, 0.002087f, 0.002239f, -0.013634f, 0.002605f, 0.000186f, 0.004164f, 0.005132f, 0.002782f, 0.007752f, -0.001709f, -0.004412f, 0.000761f, 0.009277f, -0.000004f, -0.007188f, -0.000781f, 0.007893f, 0.004251f, 0.000813f, 0.000015f, 0.002193f, -0.000264f, 0.000567f, 0.001475f, -0.000290f, -0.002896f, -0.000372f, 0.000009f, 0.003082f, -0.004709f, -0.010967f, 0.008009f, 0.008026f, 0.006984f, 0.006566f, -0.000400f, 0.003569f, 0.006242f, -0.006661f, -0.001551f, -0.000203f, -0.008880f, 0.001965f, 0.000591f, 0.007959f, 0.000773f, 0.004451f, 0.000081f, 0.010017f, 0.005046f, -0.001495f, 0.007003f, 0.004244f, -0.002342f, -0.008225f, 0.002001f, 0.002118f, -0.002218f, 0.000593f, -0.004710f, -0.001240f, 0.004145f, 0.002904f, 0.003436f, 0.008263f, -0.001424f, -0.002629f, 0.001082f, 0.004908f, 0.011321f, -0.006702f, 0.002984f, 0.003058f, 0.003266f, -0.000358f, -0.000811f, 0.003498f, -0.002007f, 0.000081f, 0.001620f, -0.002155f, -0.000416f, 0.000309f, 0.000550f, -0.001410f, + -0.002155f, 0.001316f, -0.000561f, 0.000250f, -0.000817f, 0.002068f, -0.000308f, 0.002463f, -0.000635f, 0.002191f, -0.000097f, 0.002072f, 0.021072f, -0.014121f, 0.004736f, 0.011851f, 0.002757f, 0.008345f, 0.010117f, -0.009235f, 0.001917f, -0.000866f, 0.003927f, -0.011704f, -0.009287f, -0.001755f, 0.009066f, 0.012281f, -0.004733f, -0.004104f, 0.005887f, -0.010023f, -0.013379f, -0.002498f, -0.015731f, 0.005351f, 0.005203f, 0.001391f, -0.009778f, -0.009970f, 0.003521f, -0.005819f, 0.001332f, -0.000331f, 0.010347f, 0.010896f, 0.009865f, -0.001646f, 0.006911f, -0.010862f, 0.004700f, -0.006424f, -0.000595f, 0.000528f, 0.008445f, -0.009172f, -0.008112f, 0.000012f, 0.011112f, 0.004532f, 0.004338f, -0.006787f, 0.003762f, 0.002701f, -0.003282f, -0.013952f, -0.002257f, -0.004772f, -0.006109f, -0.005558f, 0.006370f, -0.005910f, -0.001892f, 0.001384f, 0.003956f, 0.009913f, -0.003825f, -0.000303f, -0.007528f, -0.003716f, 0.001561f, -0.010499f, -0.000645f, 0.002777f, 0.007137f, -0.002338f, -0.005405f, -0.002806f, -0.010856f, 0.005067f, 0.003190f, 0.000555f, -0.000880f, -0.009462f, 0.003870f, 0.000700f, + -0.003338f, 0.003335f, -0.001328f, 0.000752f, 0.003121f, 0.000227f, 0.000655f, 0.003539f, 0.001626f, 0.000664f, 0.000108f, 0.002818f, 0.001084f, -0.000634f, 0.001213f, 0.001614f, 0.003360f, -0.007216f, -0.013264f, -0.003134f, 0.002554f, -0.003932f, -0.006600f, -0.003556f, -0.013222f, -0.007346f, 0.014450f, -0.000342f, -0.006074f, 0.007768f, -0.011162f, -0.002381f, -0.013979f, -0.002726f, -0.010968f, -0.005627f, 0.013381f, 0.000918f, -0.002451f, -0.014614f, -0.009031f, -0.003121f, -0.006134f, 0.002739f, -0.007676f, 0.001002f, 0.005142f, 0.015963f, 0.007945f, 0.006130f, 0.007040f, 0.012966f, -0.010475f, 0.000104f, -0.002979f, -0.008021f, 0.003634f, -0.001457f, -0.002984f, -0.008406f, 0.004734f, 0.009311f, 0.001183f, -0.006363f, -0.003994f, 0.023473f, 0.000331f, -0.006445f, -0.009069f, -0.013702f, -0.018337f, -0.002083f, -0.009395f, 0.002466f, -0.001651f, 0.005425f, 0.001201f, 0.002746f, -0.008297f, 0.001513f, 0.001632f, 0.011483f, 0.004038f, -0.008173f, 0.000710f, -0.002378f, -0.002261f, -0.001766f, 0.004258f, 0.006270f, 0.006144f, -0.005268f, -0.005127f, 0.003626f, 0.001846f, 0.002456f, + 0.002672f, -0.001900f, -0.007998f, -0.009429f, -0.000904f, 0.001991f, -0.002068f, 0.001253f, 0.000308f, -0.001067f, -0.001798f, -0.002785f, -0.000936f, -0.000335f, -0.001580f, -0.003121f, 0.000528f, 0.001347f, -0.001581f, 0.000890f, -0.001361f, 0.000569f, -0.001765f, -0.000755f, 0.000639f, 0.000780f, -0.002176f, 0.000612f, -0.000677f, -0.004095f, 0.000696f, -0.001275f, 0.002687f, -0.001640f, -0.001065f, -0.000413f, -0.032586f, 0.012746f, -0.005922f, 0.005328f, -0.013555f, -0.005514f, -0.010640f, -0.009723f, 0.000534f, -0.003127f, -0.006717f, 0.016450f, 0.004163f, -0.001625f, -0.010163f, -0.003262f, 0.004523f, -0.011579f, -0.006219f, -0.011029f, -0.006228f, 0.015731f, 0.001403f, 0.010465f, -0.001149f, -0.000183f, -0.002799f, 0.002914f, 0.002777f, -0.008462f, -0.000043f, 0.002442f, 0.004580f, 0.017091f, -0.009123f, -0.010467f, -0.002212f, 0.018915f, 0.005816f, 0.020137f, 0.001628f, 0.001798f, -0.003732f, 0.009918f, -0.001897f, 0.014653f, -0.001662f, -0.001770f, -0.002813f, -0.006177f, 0.006083f, 0.001845f, -0.005422f, 0.004226f, 0.005367f, 0.010166f, -0.006081f, -0.000564f, -0.002011f, 0.009053f, + -0.003898f, -0.001577f, -0.003608f, -0.002369f, 0.002005f, -0.003018f, 0.000870f, 0.001501f, -0.002412f, 0.002218f, -0.015262f, 0.001413f, 0.009599f, 0.003407f, 0.012921f, 0.001039f, 0.001194f, 0.003135f, 0.008157f, 0.013362f, -0.009057f, 0.001265f, -0.000902f, 0.003144f, -0.000627f, -0.000348f, 0.003801f, 0.008666f, 0.003126f, 0.004249f, 0.000253f, -0.001514f, -0.002478f, 0.001173f, 0.004180f, -0.001542f, 0.001778f, 0.002012f, 0.001858f, -0.000078f, 0.000675f, 0.003698f, -0.000874f, 0.000982f, -0.000371f, 0.004272f, 0.002249f, -0.001364f, -0.000485f, 0.004600f, 0.002108f, -0.001352f, 0.003127f, 0.001898f, -0.004318f, -0.006753f, -0.003234f, 0.000050f, -0.015859f, -0.002483f, 0.000345f, -0.007790f, -0.028220f, -0.006688f, -0.005936f, -0.012179f, -0.002226f, -0.002980f, 0.017982f, -0.005968f, 0.013644f, 0.006509f, 0.009893f, -0.018063f, -0.008023f, -0.018253f, -0.016968f, 0.000194f, 0.003411f, 0.010951f, -0.004998f, -0.007860f, -0.004782f, -0.012274f, 0.002851f, 0.005894f, 0.006714f, 0.004238f, -0.003608f, 0.004866f, -0.008155f, 0.001112f, -0.014853f, 0.005641f, -0.003703f, 0.002272f, + 0.003483f, 0.005830f, 0.006161f, -0.005526f, 0.000395f, 0.014771f, -0.007634f, 0.007272f, 0.007569f, -0.000266f, 0.004598f, 0.007378f, -0.002793f, 0.003038f, 0.007216f, 0.000605f, 0.012600f, -0.006297f, -0.008455f, -0.003949f, 0.004223f, 0.000184f, -0.016385f, -0.008172f, -0.018172f, -0.019726f, -0.003249f, 0.005617f, -0.016108f, 0.007469f, -0.002495f, -0.000066f, -0.005423f, 0.005668f, -0.009531f, -0.001325f, -0.003241f, -0.013426f, -0.011897f, -0.003763f, 0.007280f, 0.000455f, 0.006259f, -0.002354f, 0.004096f, 0.003399f, -0.007427f, 0.000268f, -0.001373f, 0.004499f, -0.004971f, -0.008294f, -0.002667f, 0.001389f, 0.000109f, -0.003052f, 0.001563f, -0.001806f, -0.000664f, 0.001589f, -0.000347f, 0.000327f, -0.000072f, -0.001704f, -0.000322f, -0.001646f, -0.001161f, -0.000981f, 0.000051f, 0.001113f, 0.000195f, 0.002659f, 0.001020f, -0.000936f, 0.009341f, -0.026275f, -0.001110f, 0.008390f, 0.005348f, -0.013860f, -0.001550f, -0.008753f, 0.002454f, 0.002864f, 0.002073f, -0.015146f, -0.020372f, -0.013802f, 0.002551f, -0.010993f, 0.012386f, 0.004068f, -0.019618f, 0.014475f, 0.012661f, 0.010105f, + 0.009012f, -0.009618f, 0.016231f, 0.004455f, 0.000014f, -0.006056f, 0.005571f, 0.009855f, -0.008708f, -0.012765f, 0.004931f, -0.004679f, -0.015958f, -0.001928f, -0.015398f, -0.005435f, 0.028234f, -0.007273f, -0.012514f, -0.015438f, 0.000994f, 0.002795f, 0.011302f, 0.004692f, -0.010179f, 0.009606f, -0.001084f, -0.007845f, -0.010594f, -0.011123f, 0.017427f, 0.008000f, 0.011020f, -0.007999f, -0.011193f, 0.005356f, 0.002901f, -0.011367f, -0.000493f, -0.006867f, 0.011290f, -0.001894f, 0.001087f, -0.013470f, 0.008859f, 0.007617f, -0.007734f, -0.004755f, -0.004772f, 0.015832f, 0.000262f, 0.002566f, -0.004421f, 0.010943f, -0.010818f, -0.018222f, -0.008197f, 0.001898f, -0.003486f, 0.010382f, -0.002017f, -0.000867f, -0.010739f, -0.005399f, 0.004722f, 0.000918f, -0.007636f, -0.004714f, 0.006596f, 0.003842f, -0.002048f, 0.000594f, 0.000129f, 0.000310f, -0.002087f, 0.003159f, 0.001286f, 0.004740f, 0.000722f, 0.001088f, 0.000171f, 0.002238f, -0.000895f, 0.003093f, -0.003625f, 0.004121f, -0.000416f, -0.002051f, -0.014597f, -0.001021f, 0.003097f, -0.003961f, -0.011754f, -0.017238f, -0.013901f, 0.013183f, + 0.001167f, 0.016252f, 0.019464f, 0.018906f, 0.002509f, 0.026101f, 0.005942f, -0.003336f, 0.011836f, 0.008964f, 0.024067f, 0.003142f, 0.013659f, -0.019710f, 0.031387f, 0.023017f, 0.010891f, -0.010037f, -0.008078f, 0.011112f, 0.002232f, 0.007866f, -0.005151f, 0.013341f, -0.004519f, -0.003934f, 0.011916f, 0.009652f, -0.012985f, 0.008090f, -0.003784f, 0.012992f, 0.014090f, -0.028833f, -0.005673f, 0.017191f, 0.004870f, 0.009200f, 0.007102f, 0.017023f, -0.008819f, 0.006620f, -0.000098f, -0.014979f, -0.007558f, -0.000748f, 0.002628f, -0.021827f, -0.002242f, 0.013248f, -0.011157f, 0.022472f, 0.016675f, -0.007225f, -0.000621f, 0.004043f, 0.008137f, 0.012989f, -0.005577f, -0.004628f, 0.021161f, -0.005423f, -0.000863f, 0.009073f, 0.000024f, 0.012308f, 0.009634f, 0.003839f, 0.006529f, 0.006966f, 0.006520f, 0.002905f, 0.002530f, -0.003313f, -0.005460f, -0.002422f, -0.005012f, -0.000845f, -0.003629f, 0.002091f, 0.001735f, -0.004873f, -0.004040f, -0.000841f, 0.003057f, 0.006764f, 0.005468f, 0.003051f, 0.000245f, 0.003219f, -0.006502f, -0.003030f, -0.003690f, 0.001064f, -0.002794f, 0.002865f, + -0.007493f, 0.000491f, -0.000553f, 0.005819f, 0.002007f, 0.000028f, 0.000626f, 0.006046f, 0.001506f, -0.005721f, 0.001375f, -0.000770f, 0.001044f, 0.005065f, -0.000585f, 0.001406f, -0.000513f, 0.055093f, -0.029153f, 0.003817f, 0.022581f, -0.002404f, 0.000593f, 0.029983f, 0.032862f, 0.003729f, -0.002757f, 0.006768f, -0.001827f, 0.007289f, 0.009270f, -0.012283f, -0.003949f, 0.019359f, 0.017012f, -0.008241f, -0.015976f, -0.016997f, -0.017704f, -0.009599f, 0.014261f, -0.011340f, 0.006111f, 0.000612f, -0.020659f, -0.001539f, -0.013820f, -0.001793f, 0.005587f, 0.008792f, -0.026727f, -0.012593f, -0.021338f, -0.006700f, 0.031650f, 0.004447f, -0.003154f, 0.002685f, -0.003174f, 0.001428f, 0.009146f, 0.005387f, 0.015653f, -0.000997f, 0.011621f, 0.006956f, -0.011405f, 0.006915f, -0.017208f, 0.000348f, -0.017287f, -0.017839f, 0.006392f, -0.019611f, 0.007891f, -0.000346f, 0.009615f, 0.007782f, 0.006843f, -0.010516f, 0.011808f, -0.017781f, -0.000694f, -0.008246f, -0.003085f, 0.022090f, 0.000459f, 0.011012f, 0.010665f, -0.002348f, -0.004560f, 0.008495f, -0.018693f, 0.007266f, 0.017104f, -0.026079f, + -0.019465f, -0.005378f, 0.012839f, -0.001290f, -0.016347f, 0.005971f, -0.002702f, 0.006796f, -0.006261f, 0.002051f, -0.003725f, 0.011424f, -0.002526f, 0.010506f, 0.005446f, 0.009814f, 0.003019f, 0.002699f, -0.005581f, 0.006643f, 0.002568f, -0.000251f, 0.003512f, 0.003361f, -0.002329f, 0.004964f, 0.003490f, -0.002432f, -0.003034f, -0.008505f, -0.002198f, -0.004853f, -0.000602f, -0.000205f, -0.003316f, 0.004387f, -0.001941f, 0.002584f, 0.000483f, 0.008901f, -0.007472f, 0.003340f, 0.001046f, 0.000403f, -0.001120f, -0.032634f, 0.006535f, 0.008367f, -0.021919f, 0.010468f, 0.000238f, 0.023774f, -0.005784f, -0.011502f, 0.010284f, -0.028513f, -0.009555f, 0.024767f, 0.011082f, -0.014451f, -0.035310f, 0.016279f, -0.004580f, 0.009113f, -0.022389f, -0.029803f, -0.020098f, 0.026500f, 0.002528f, 0.014789f, -0.002122f, -0.013452f, -0.020137f, 0.010061f, -0.005086f, -0.017484f, -0.020497f, 0.001891f, -0.018255f, -0.013958f, -0.007436f, -0.003310f, -0.019811f, 0.011695f, 0.013892f, 0.018644f, -0.008351f, 0.016615f, -0.012691f, 0.026074f, -0.004394f, -0.000993f, 0.019964f, 0.010454f, -0.004464f, -0.012783f, + -0.006211f, 0.019285f, 0.004755f, -0.013665f, 0.007097f, 0.020464f, 0.019367f, 0.008547f, -0.022822f, -0.025237f, -0.001912f, 0.005368f, 0.001974f, -0.018056f, 0.005909f, 0.020751f, 0.006275f, -0.008285f, -0.032438f, 0.009167f, -0.013899f, -0.031615f, 0.001378f, 0.002108f, -0.017712f, 0.026418f, -0.001505f, -0.010301f, -0.035107f, 0.000184f, -0.010068f, -0.001243f, 0.013695f, -0.007538f, -0.013196f, -0.000502f, 0.003427f, 0.003626f, -0.010386f, -0.010494f, -0.010459f, 0.004414f, -0.008979f, 0.001007f, -0.001319f, 0.001948f, -0.002232f, 0.003044f, 0.005135f, 0.004664f, 0.005817f, 0.003126f, 0.010165f, 0.012890f, 0.001068f, 0.004097f, 0.002652f, -0.004425f, -0.000991f, -0.003525f, 0.001890f, 0.001802f, 0.001098f, -0.011666f, 0.001795f, -0.000589f, -0.004050f, -0.000137f, -0.003604f, 0.004092f, -0.004486f, -0.004646f, -0.003411f, -0.040533f, 0.025988f, 0.020116f, 0.022126f, 0.003434f, 0.023369f, 0.002680f, -0.014376f, -0.016720f, 0.002963f, 0.018797f, -0.012344f, 0.004638f, -0.027156f, 0.019247f, 0.020458f, -0.009749f, -0.005271f, 0.004983f, 0.022376f, 0.016363f, -0.010905f, -0.009784f, + 0.015452f, -0.017661f, 0.006689f, -0.024276f, 0.000437f, -0.006903f, -0.032543f, -0.033700f, 0.007105f, 0.020044f, 0.009619f, -0.028716f, -0.015183f, 0.022640f, -0.024145f, -0.009842f, 0.020295f, -0.004934f, 0.025247f, -0.008293f, -0.016715f, 0.006900f, -0.024547f, 0.029298f, -0.002514f, 0.005519f, -0.012967f, -0.006473f, -0.000603f, -0.026719f, -0.015981f, 0.002570f, -0.003816f, 0.003094f, -0.008184f, -0.028392f, 0.006024f, -0.023444f, 0.011256f, -0.005628f, 0.017832f, -0.028343f, 0.013565f, 0.005283f, -0.007527f, 0.021769f, -0.002047f, -0.014352f, -0.027556f, -0.003449f, 0.006874f, -0.022419f, 0.017498f, -0.015041f, 0.011596f, -0.029640f, -0.029973f, 0.014911f, 0.012310f, -0.011935f, -0.008965f, 0.010056f, 0.007330f, -0.006210f, -0.004775f, -0.007955f, -0.009949f, -0.000684f, -0.016409f, -0.001527f, -0.001791f, 0.001559f, 0.005419f, -0.002897f, 0.005477f, -0.003033f, -0.000380f, -0.008986f, -0.003900f, -0.002262f, -0.000515f, 0.013887f, -0.003362f, -0.001678f, 0.008572f, -0.008296f, 0.006596f, 0.003627f, -0.002615f, -0.001851f, -0.007886f, -0.007730f, 0.000343f, -0.004440f, 0.001910f, 0.000739f, + -0.003125f, -0.005456f, 0.013341f, -0.012983f, 0.004436f, 0.015877f, 0.023444f, -0.006196f, 0.002601f, -0.008322f, -0.031306f, -0.006687f, -0.006701f, 0.013602f, -0.027498f, -0.000081f, -0.015864f, 0.017066f, -0.019236f, -0.026232f, 0.017449f, 0.008011f, 0.011352f, 0.036128f, -0.005955f, -0.010361f, 0.010197f, -0.023142f, -0.026988f, 0.002223f, 0.034579f, 0.010516f, 0.019416f, -0.013796f, -0.016967f, -0.027492f, 0.005501f, 0.035104f, -0.015726f, 0.018348f, 0.004225f, 0.027295f, -0.041754f, -0.013279f, -0.000692f, 0.004904f, 0.023795f, 0.011472f, -0.031818f, -0.008623f, -0.014762f, -0.001266f, -0.036636f, -0.005766f, -0.013181f, 0.002528f, -0.019276f, -0.001286f, 0.004488f, -0.053504f, 0.006143f, -0.016780f, 0.003297f, -0.021182f, -0.001141f, 0.013151f, 0.006735f, -0.007209f, -0.006766f, -0.028221f, 0.028378f, 0.027245f, 0.009003f, 0.006787f, -0.024463f, 0.037363f, 0.013033f, 0.019256f, -0.007340f, -0.058842f, 0.022951f, -0.002027f, 0.044158f, 0.041449f, 0.013101f, -0.005338f, 0.018290f, 0.000955f, 0.016022f, 0.000849f, 0.001859f, -0.010424f, 0.005008f, -0.009524f, -0.005054f, -0.002666f, + 0.019272f, -0.000289f, 0.001192f, 0.004928f, -0.001190f, -0.010405f, -0.005313f, 0.001756f, 0.007836f, -0.003691f, 0.003919f, -0.006116f, 0.008155f, -0.006399f, -0.009777f, -0.005011f, -0.001383f, 0.004567f, 0.001812f, -0.002125f, -0.001672f, -0.002174f, 0.012734f, -0.002794f, 0.000767f, 0.002081f, 0.006369f, 0.050659f, 0.017862f, 0.034670f, -0.033646f, 0.007819f, 0.035352f, -0.010625f, -0.012741f, 0.004997f, -0.021862f, 0.016693f, 0.004230f, -0.025532f, -0.033432f, -0.002512f, 0.028356f, -0.000734f, -0.002285f, 0.018553f, -0.027703f, -0.007058f, -0.022805f, 0.012809f, -0.038863f, 0.000641f, -0.008309f, 0.014134f, -0.040590f, -0.028043f, -0.017737f, 0.011896f, 0.013062f, 0.009041f, -0.013168f, 0.009863f, -0.009797f, 0.012033f, -0.008037f, -0.003556f, -0.002796f, -0.011399f, 0.007721f, 0.017962f, 0.010693f, 0.018083f, -0.001491f, -0.017543f, 0.002498f, -0.017468f, 0.046531f, -0.011762f, -0.045776f, -0.014262f, 0.012509f, 0.039757f, -0.039797f, -0.016409f, -0.002596f, 0.025564f, 0.001634f, -0.056318f, -0.006918f, 0.025989f, 0.053673f, 0.001987f, 0.037365f, 0.053837f, -0.004010f, 0.017330f, + 0.025434f, -0.007042f, 0.045877f, -0.006167f, 0.055402f, 0.008823f, -0.015228f, -0.048052f, -0.030105f, 0.000357f, 0.014447f, 0.006903f, -0.007320f, -0.009339f, -0.014937f, -0.020381f, -0.018118f, 0.022040f, 0.006440f, -0.000269f, -0.031601f, -0.003570f, 0.001155f, -0.005768f, -0.017976f, 0.004689f, 0.009503f, -0.002722f, -0.009321f, -0.006795f, -0.017613f, -0.010631f, -0.005187f, 0.011089f, -0.002185f, -0.009585f, 0.009594f, -0.013770f, 0.009888f, 0.009994f, -0.008640f, -0.016689f, 0.015239f, 0.022658f, 0.003457f, 0.000695f, 0.001366f, 0.013203f, -0.003951f, -0.015783f, 0.001849f, 0.015304f, 0.012665f, -0.015670f, -0.013318f, 0.002445f, 0.002501f, 0.000228f, 0.004521f, -0.002447f, 0.021233f, 0.025718f, -0.044317f, -0.043115f, 0.011340f, -0.010113f, 0.001301f, -0.017201f, 0.040116f, -0.018114f, -0.011597f, 0.013893f, 0.010006f, 0.000319f, -0.018426f, -0.013514f, -0.022410f, 0.008942f, -0.001350f, -0.010878f, -0.001839f, 0.026647f, 0.040062f, -0.043453f, -0.002826f, -0.042390f, -0.004565f, -0.011006f, 0.041899f, -0.017782f, -0.016989f, -0.008217f, 0.025477f, 0.008415f, 0.006988f, 0.010642f, + 0.010159f, -0.007643f, 0.000444f, -0.005556f, 0.006759f, -0.005071f, 0.039217f, -0.010292f, 0.010366f, 0.027597f, -0.014463f, -0.031799f, 0.007003f, 0.010760f, -0.011226f, -0.012229f, -0.002714f, 0.006473f, 0.019863f, -0.027243f, 0.036380f, 0.053538f, 0.035944f, -0.015095f, -0.021746f, -0.049673f, -0.064094f, -0.023611f, -0.000306f, -0.011637f, -0.003308f, -0.007344f, 0.015247f, -0.001381f, -0.024796f, 0.012935f, -0.011017f, -0.002410f, 0.023434f, 0.039141f, -0.009662f, 0.010961f, -0.006962f, 0.002093f, 0.035619f, 0.017972f, 0.030453f, 0.031014f, -0.024896f, -0.007694f, -0.005756f, 0.000827f, -0.000637f, 0.011003f, 0.000695f, 0.006724f, 0.031225f, 0.001248f, 0.014553f, -0.006688f, -0.006937f, -0.012874f, -0.004003f, 0.001767f, 0.014186f, -0.004013f, -0.011930f, -0.005635f, 0.006795f, -0.004983f, -0.002726f, -0.003731f, 0.004268f, 0.001074f, -0.004670f, -0.002541f, 0.003135f, 0.001529f, 0.001573f, 0.017993f, -0.007454f, 0.000391f, 0.002279f, 0.000205f, -0.010021f, 0.004498f, 0.005559f, 0.011468f, -0.022999f, 0.042919f, 0.019206f, 0.024339f, 0.036630f, 0.056689f, -0.022029f, 0.029246f, + -0.058733f, -0.007392f, -0.026443f, -0.057725f, 0.023117f, 0.013445f, 0.017353f, 0.007512f, 0.022640f, 0.006777f, -0.041584f, 0.034690f, 0.061443f, -0.009406f, -0.010081f, 0.014901f, 0.005953f, -0.013059f, -0.055097f, 0.004311f, 0.000026f, -0.005186f, 0.000574f, 0.018496f, -0.039436f, 0.008308f, 0.010986f, -0.008272f, -0.022817f, -0.011239f, -0.025410f, 0.025511f, -0.056552f, -0.008375f, -0.036432f, 0.019943f, 0.007989f, 0.020226f, -0.007340f, 0.005360f, -0.014580f, 0.034306f, 0.010230f, 0.028125f, -0.025933f, 0.027641f, -0.000789f, -0.027472f, 0.056162f, -0.009543f, 0.006742f, 0.037826f, -0.036702f, 0.042423f, 0.025328f, -0.033628f, 0.013949f, -0.012988f, 0.018588f, -0.046507f, 0.033692f, 0.004583f, 0.011746f, -0.004560f, 0.010816f, -0.037811f, 0.023797f, 0.042475f, -0.084957f, 0.008451f, 0.081674f, -0.053061f, -0.017097f, 0.005558f, 0.039746f, 0.028062f, 0.009707f, 0.024490f, -0.011282f, 0.014679f, -0.006330f, -0.018319f, 0.008832f, -0.004272f, -0.003161f, 0.015160f, 0.022207f, -0.002141f, -0.008791f, -0.007674f, 0.006498f, 0.014010f, -0.018997f, -0.007311f, -0.013029f, -0.008276f, + -0.016990f, 0.016664f, 0.022226f, -0.004942f, 0.010188f, -0.006587f, 0.004092f, 0.013969f, 0.015959f, -0.018704f, 0.001502f, 0.006599f, -0.009757f, 0.014441f, 0.000701f, -0.000535f, 0.013251f, 0.006556f, -0.016032f, -0.013624f, 0.004515f, 0.001887f, -0.004853f, 0.002477f, 0.034359f, -0.020783f, -0.025022f, -0.000790f, -0.023954f, -0.010893f, -0.063311f, -0.054052f, -0.007455f, -0.031011f, -0.037212f, -0.026852f, 0.016533f, -0.009565f, -0.018838f, -0.030266f, 0.027953f, 0.001871f, -0.045708f, -0.007218f, -0.000256f, -0.021765f, -0.006841f, 0.018545f, 0.013342f, -0.003227f, 0.000174f, 0.000855f, -0.011467f, 0.009739f, 0.021351f, -0.008019f, -0.005084f, 0.032750f, -0.061549f, -0.010049f, 0.017339f, 0.065620f, -0.027168f, -0.017054f, -0.024475f, -0.033338f, 0.014545f, 0.069628f, 0.012954f, 0.043117f, 0.008929f, -0.007120f, -0.003621f, -0.005192f, -0.033590f, 0.007328f, 0.007629f, -0.027405f, 0.006088f, 0.054362f, -0.008800f, -0.016828f, 0.009152f, -0.019587f, -0.004453f, 0.047941f, 0.070984f, 0.019094f, 0.042628f, 0.049175f, -0.017438f, -0.020621f, 0.005646f, -0.016330f, 0.002836f, -0.048766f, + -0.000397f, -0.038019f, 0.011580f, 0.007847f, 0.023163f, -0.039584f, -0.014724f, -0.013558f, -0.015438f, -0.012457f, -0.013811f, 0.021914f, 0.004786f, 0.028267f, -0.007157f, 0.010715f, 0.028399f, -0.005309f, 0.001051f, -0.004218f, -0.011209f, -0.009163f, -0.001492f, -0.006955f, -0.010297f, -0.000297f, 0.004346f, -0.005480f, 0.001967f, 0.013115f, -0.013225f, -0.012222f, 0.000972f, 0.009791f, 0.005216f, -0.006526f, -0.019617f, -0.019297f, -0.002279f, 0.004341f, -0.011606f, -0.006667f, 0.004204f, -0.004129f, 0.002143f, 0.001232f, 0.013544f, 0.004348f, 0.003509f, -0.014927f, 0.016419f, -0.007051f, -0.015836f, 0.049802f, 0.056337f, -0.023428f, 0.128203f, -0.018291f, 0.002371f, -0.024424f, 0.014588f, -0.010677f, 0.014392f, 0.032476f, 0.008802f, -0.031450f, -0.017324f, -0.032836f, -0.001103f, -0.022490f, -0.040495f, 0.004752f, 0.025345f, -0.004987f, 0.006978f, 0.011690f, 0.014634f, -0.000842f, -0.012077f, -0.015659f, 0.007094f, -0.000708f, -0.020460f, 0.007204f, 0.054811f, 0.038519f, 0.021695f, -0.047563f, 0.033166f, 0.025744f, -0.012928f, -0.014941f, -0.014911f, -0.019396f, -0.008629f, 0.014603f, + -0.034535f, 0.002636f, 0.003693f, 0.019784f, 0.052238f, 0.009578f, 0.010400f, 0.002256f, -0.006856f, -0.011297f, 0.022352f, -0.014495f, 0.052762f, 0.016529f, -0.005689f, 0.022728f, 0.003903f, -0.036541f, -0.026374f, 0.029682f, 0.034404f, 0.012365f, -0.009269f, 0.022614f, 0.024464f, 0.034988f, 0.069052f, 0.006853f, -0.020527f, -0.036385f, -0.024419f, 0.017467f, 0.003412f, 0.005247f, -0.003828f, 0.023867f, 0.002083f, -0.003579f, -0.032988f, -0.016606f, 0.033311f, 0.037337f, -0.014029f, -0.026374f, -0.031289f, -0.009516f, 0.016017f, 0.009806f, 0.002543f, -0.011006f, 0.002183f, -0.000596f, -0.014123f, -0.000454f, -0.030594f, -0.008407f, -0.001634f, 0.021033f, -0.004372f, -0.007111f, -0.000314f, 0.016956f, -0.010967f, 0.011994f, -0.006992f, -0.014699f, 0.011780f, 0.016757f, 0.010691f, 0.011693f, -0.002026f, 0.012561f, 0.024422f, 0.010303f, 0.010180f, 0.006579f, -0.009615f, -0.004697f, 0.000258f, -0.002758f, 0.007048f, -0.007547f, 0.011783f, 0.015219f, 0.008901f, 0.000620f, -0.012385f, 0.004191f, 0.003955f, 0.012252f, 0.020061f, -0.020820f, 0.091258f, -0.014501f, 0.003067f, 0.009410f, + -0.007801f, -0.002071f, 0.022241f, -0.017907f, -0.021110f, -0.011401f, 0.028938f, 0.025853f, -0.072042f, 0.012979f, 0.011331f, 0.028379f, -0.019055f, -0.028827f, -0.027608f, 0.019643f, 0.017585f, -0.029422f, -0.016525f, -0.012493f, 0.047079f, 0.023410f, 0.012639f, -0.009979f, -0.050449f, 0.013384f, 0.011675f, 0.024916f, -0.006965f, 0.012937f, -0.014582f, 0.004185f, -0.043929f, 0.017260f, 0.016823f, -0.000005f, -0.011501f, -0.027672f, -0.054433f, 0.034152f, -0.023397f, 0.017265f, 0.017539f, 0.030115f, 0.003482f, -0.033276f, 0.053582f, 0.010060f, -0.053964f, -0.025249f, 0.031019f, 0.006991f, 0.040856f, 0.017046f, 0.006078f, -0.038457f, -0.019516f, 0.020594f, -0.066696f, 0.070422f, -0.051478f, 0.002325f, 0.041801f, -0.011986f, 0.083643f, 0.012123f, 0.014524f, -0.031111f, 0.097569f, 0.009738f, 0.063206f, -0.043953f, -0.020220f, -0.014173f, 0.024196f, -0.003143f, -0.010740f, 0.044142f, -0.037638f, 0.042566f, -0.051844f, 0.010561f, 0.004476f, 0.008894f, -0.010615f, 0.037500f, -0.005271f, 0.018922f, 0.016329f, 0.024789f, 0.013609f, 0.007013f, 0.016925f, 0.019295f, -0.000015f, 0.006878f, + 0.001475f, -0.013621f, 0.016144f, 0.000199f, 0.010875f, 0.023477f, 0.011211f, 0.001229f, -0.001931f, 0.017926f, 0.018849f, 0.009526f, -0.011891f, 0.039590f, -0.002556f, -0.008230f, -0.008534f, 0.025335f, -0.020208f, 0.008648f, -0.005087f, 0.013520f, 0.000055f, 0.005482f, 0.006729f, -0.005679f, -0.005207f, 0.003686f, 0.006786f, 0.006404f, 0.007125f, 0.010066f, -0.010618f, 0.033099f, 0.076739f, 0.025994f, 0.048500f, 0.061553f, -0.001781f, 0.070464f, -0.052876f, -0.018482f, -0.019383f, -0.017013f, 0.008301f, 0.012124f, -0.003757f, -0.022991f, -0.045342f, 0.045047f, 0.042685f, 0.018470f, 0.038640f, -0.061199f, -0.052754f, 0.018787f, 0.026461f, -0.027918f, -0.039339f, 0.026387f, -0.011823f, -0.057017f, -0.020361f, -0.010305f, 0.029404f, -0.052379f, 0.030223f, 0.020615f, 0.024128f, -0.024152f, -0.000623f, -0.023888f, -0.009918f, -0.070021f, -0.016356f, 0.034913f, -0.111135f, -0.034850f, -0.003413f, -0.001874f, 0.004762f, -0.066758f, -0.015877f, -0.100865f, -0.007560f, 0.020667f, -0.027993f, -0.031150f, -0.012225f, 0.031126f, -0.009397f, -0.036004f, -0.040803f, -0.105310f, -0.036827f, 0.050135f, + -0.045928f, -0.070708f, 0.060618f, -0.018186f, -0.079177f, 0.024780f, 0.073335f, -0.038166f, -0.016584f, 0.009285f, -0.051575f, 0.065717f, 0.029913f, 0.042245f, -0.020859f, -0.004128f, 0.022433f, 0.062586f, 0.029929f, 0.010269f, -0.018890f, -0.003869f, 0.071473f, 0.007316f, 0.011991f, -0.004730f, -0.040523f, -0.018008f, 0.034115f, -0.000303f, 0.003110f, -0.006312f, -0.036071f, -0.002405f, 0.017088f, -0.022612f, 0.028352f, -0.035098f, -0.021725f, 0.007691f, -0.011403f, 0.018820f, 0.008543f, -0.031932f, 0.014340f, 0.016586f, 0.009812f, 0.006517f, -0.012020f, 0.008080f, 0.000779f, -0.007555f, -0.021800f, 0.011727f, 0.010433f, -0.002346f, 0.018415f, -0.025104f, 0.003999f, -0.024033f, 0.001801f, 0.006744f, -0.007462f, -0.003935f, -0.000062f, 0.009881f, 0.002571f, -0.007010f, 0.001564f, 0.087237f, 0.120792f, -0.019454f, -0.004233f, -0.047999f, -0.048262f, -0.082886f, 0.034472f, -0.014502f, 0.120678f, -0.026096f, -0.052869f, -0.073478f, 0.003757f, 0.022153f, -0.027439f, 0.022319f, 0.078747f, -0.031965f, -0.014597f, -0.055908f, -0.025650f, 0.052995f, 0.061322f, -0.062855f, -0.018122f, 0.031246f, + -0.013925f, 0.013455f, -0.019073f, 0.077153f, 0.061896f, 0.131975f, 0.042754f, 0.057988f, -0.026580f, 0.041383f, 0.089221f, 0.028410f, -0.006185f, 0.020216f, -0.003478f, 0.057754f, 0.030136f, 0.084542f, 0.023589f, -0.086721f, 0.029783f, 0.032485f, 0.070428f, -0.040377f, -0.034154f, 0.040323f, 0.044114f, -0.021933f, 0.070830f, -0.025634f, 0.028827f, -0.078993f, 0.049180f, -0.019063f, 0.026817f, 0.027174f, 0.062100f, 0.053413f, -0.043368f, -0.045611f, -0.014765f, 0.064786f, 0.065887f, -0.025633f, -0.037032f, -0.071186f, -0.008305f, 0.049006f, 0.056054f, 0.036858f, -0.016722f, -0.047310f, -0.044379f, -0.008195f, 0.030431f, -0.031096f, 0.042534f, 0.010028f, 0.029645f, 0.004794f, -0.015454f, 0.033396f, 0.021200f, -0.005572f, -0.014609f, 0.010166f, 0.028608f, -0.042162f, 0.016625f, 0.020459f, 0.027899f, 0.014973f, 0.039528f, -0.013500f, 0.013838f, -0.018981f, -0.027375f, 0.015380f, 0.033293f, 0.029040f, 0.044756f, -0.000782f, -0.000720f, 0.013167f, 0.011806f, 0.079813f, 0.015245f, -0.003682f, -0.035144f, -0.000086f, 0.051114f, 0.025789f, 0.039468f, 0.022816f, -0.001245f, 0.000486f, + -0.008994f, -0.000542f, 0.049191f, 0.040716f, 0.004174f, 0.015121f, -0.005101f, -0.008272f, 0.001690f, 0.020674f, 0.015685f, 0.013697f, -0.010760f, -0.010520f, 0.011843f, -0.030758f, -0.099449f, 0.005885f, 0.149768f, 0.089098f, -0.022122f, -0.222025f, -0.032705f, -0.023425f, 0.016175f, -0.026122f, 0.003054f, 0.022100f, -0.009597f, 0.009014f, -0.049261f, 0.029789f, 0.035765f, 0.067410f, -0.050604f, -0.063301f, 0.063345f, 0.101388f, 0.024535f, -0.046310f, -0.061810f, -0.013852f, 0.013929f, 0.004903f, 0.014861f, -0.000418f, 0.021176f, 0.008283f, 0.065408f, -0.022089f, -0.093076f, -0.040479f, 0.028083f, 0.010072f, -0.033142f, -0.040834f, 0.003885f, 0.042568f, 0.075322f, 0.069819f, -0.003015f, 0.000546f, 0.027380f, -0.027862f, -0.080688f, 0.023456f, -0.050942f, 0.094450f, 0.102619f, -0.002665f, 0.027816f, 0.014372f, 0.019148f, -0.046591f, -0.008289f, 0.098591f, -0.039007f, 0.000443f, -0.136320f, -0.018338f, 0.013515f, 0.030714f, 0.027578f, 0.027467f, -0.035087f, -0.021341f, 0.059168f, 0.088862f, -0.017551f, -0.004198f, 0.006841f, 0.035607f, 0.041696f, -0.020538f, 0.012777f, -0.048836f, + -0.059236f, 0.005625f, 0.013804f, 0.021010f, -0.008958f, -0.009174f, -0.012847f, -0.012516f, 0.037153f, -0.000382f, -0.009395f, -0.020742f, -0.003725f, 0.024102f, 0.019824f, -0.011821f, 0.027856f, 0.006823f, 0.043472f, 0.003740f, 0.005838f, 0.001507f, -0.018333f, -0.013669f, -0.010362f, -0.010598f, -0.005487f, -0.013698f, -0.012037f, 0.003594f, 0.035504f, 0.043102f, 0.010235f, 0.022476f, 0.005818f, 0.007982f, 0.034489f, -0.026609f, 0.025486f, 0.010385f, 0.043468f, -0.012151f, 0.009232f, 0.008793f, -0.021708f, 0.014967f, -0.011932f, 0.015303f, -0.008305f, 0.025912f, -0.012157f, -0.015523f, 0.009434f, 0.005990f, 0.002867f, 0.010539f, 0.002960f, 0.018624f, -0.000018f, 0.007294f, -0.000323f, 0.006918f, 0.002585f, 0.006022f, 0.007964f, 0.009150f, -0.002685f, 0.002191f, -0.001499f, 0.012046f, 0.004209f, 0.009142f, -0.001968f, 0.002512f, 0.001539f, 0.006830f, 0.000283f, 0.007660f, -0.003000f, 0.010431f, -0.011490f, -0.099299f, -0.041082f, 0.079501f, 0.087600f, 0.083215f, 0.112794f, 0.019432f, -0.048523f, -0.148736f, -0.112934f, -0.021216f, 0.031547f, 0.094365f, 0.102613f, 0.048581f, + 0.002307f, -0.049888f, -0.043218f, -0.019127f, 0.032053f, 0.088095f, 0.050028f, -0.011541f, 0.003225f, -0.007112f, -0.048322f, -0.066081f, -0.054126f, 0.010224f, 0.081079f, 0.060962f, 0.121912f, 0.079348f, 0.078512f, 0.110531f, -0.032166f, -0.076249f, -0.086822f, -0.115240f, -0.142000f, -0.053531f, -0.016749f, 0.042248f, 0.078190f, 0.112985f, 0.105522f, 0.085814f, 0.054252f, 0.108542f, -0.021225f, -0.068518f, -0.003228f, -0.017406f, 0.028694f, 0.032887f, 0.129486f, 0.113142f, -0.042068f, 0.020348f, -0.029472f, -0.086524f, -0.025571f, 0.023058f, -0.052148f, 0.080552f, -0.032257f, 0.026824f, 0.006828f, -0.009112f, 0.069604f, 0.096820f, 0.077117f, 0.054362f, -0.040240f, -0.097765f, -0.111397f, 0.031872f, -0.046999f, 0.008663f, -0.005420f, 0.062949f, 0.009757f, 0.035675f, -0.030112f, -0.068458f, -0.063708f, -0.099773f, -0.086943f, 0.037025f, 0.020679f, 0.050454f, 0.075629f, 0.059088f, 0.002152f, -0.044445f, -0.072031f, -0.097378f, -0.053503f, -0.024740f, -0.036044f, 0.016292f, -0.013199f, -0.011123f, -0.011726f, -0.029413f, 0.000099f, -0.012933f, -0.019873f, -0.023284f, -0.015174f, -0.002900f, + 0.015371f, -0.028186f, -0.018035f, 0.005809f, 0.017099f, -0.007213f, 0.041456f, 0.004061f, -0.222613f, -0.234304f, -0.243701f, -0.249801f, -0.330039f, -0.035912f, -0.093419f, -0.022685f, 0.030745f, 0.150215f, 0.170754f, 0.176532f, 0.247170f, 0.341686f, 0.327426f, 0.321755f, 0.258530f, 0.186682f, 0.135671f, 0.040712f, -0.156013f, -0.074929f, -0.092197f, -0.057152f, -0.187351f, -0.031171f, -0.077574f, -0.085486f, -0.155032f, -0.119204f, -0.121215f, -0.109871f, -0.114706f, -0.201611f, -0.178477f, -0.105397f, -0.095237f, -0.119703f, -0.165725f, -0.025282f, -0.145121f, -0.275125f, -0.235672f, -0.207001f, -0.109083f, -0.140662f, -0.025121f, -0.284771f, -0.126067f, -0.126198f, -0.058281f, -0.042599f, -0.146595f, 0.006391f, -0.146872f, -0.017844f, 0.022872f, 0.068715f, 0.006157f, 0.070623f, 0.105597f, 0.165928f, 0.176989f, 0.243385f, 0.159101f, 0.381991f, 0.241454f, 0.444647f, 0.302377f, 0.442967f, 0.513946f, 0.610155f, 0.501284f, 0.504558f, 0.568799f, 0.510247f, 0.518330f, 0.504330f, 0.437396f, 0.252938f, 0.202226f, 0.142568f, 0.104067f, 0.121669f, 0.181762f, 0.100055f, -0.036919f, -0.063416f, + -0.073012f, -0.125556f, -0.162742f, -0.198571f, -0.182736f, -0.300457f, -0.290912f, -0.299795f, -0.362962f, -0.319806f, -0.403180f, -0.357178f, -0.418913f, -0.430402f, -0.405307f, -0.447397f, -0.404437f, -0.451776f, -0.358474f, -0.351419f, -0.291140f, -0.310909f, -0.320294f, -0.225381f, -0.201668f, -0.154310f, -0.078552f, 0.026113f, 0.085682f, 0.074928f, 0.095917f, 0.085681f, 0.096952f, 0.111262f, 0.159220f, 0.191218f, 0.172971f, 0.155463f, 0.190260f, 0.176921f, 0.218860f, 0.199134f, 0.145616f, 0.132449f, 0.115260f, 0.101440f, 0.063899f, 0.048413f, 0.045145f, 0.028290f, 0.031174f, 0.012261f, 0.020231f, 0.017640f, 0.012149f, 0.017714f, 0.012940f, 0.007630f, 0.002774f, -0.007087f, -0.001097f, -0.000277f, -0.019011f, -0.030373f, -0.017434f, -0.015340f, -0.020018f, -0.019668f, -0.012248f, -0.014637f, -0.020973f, -0.028083f, -0.021578f, -0.014168f, -0.011636f, -0.007535f, -0.009120f, -0.006905f, -0.001211f, 0.005776f, 0.010108f, 0.009258f, 0.005049f, 0.004274f, 0.010613f, 0.015988f, 0.011357f, 0.011055f, 0.005321f, 0.002460f, 0.006780f, 0.005695f, 0.005799f, 0.004498f, 0.004669f, 0.001869f, + -0.003478f, 0.004846f, 0.011937f, 0.011529f, 0.013867f, 0.014980f, 0.021724f, 0.025490f, 0.025862f, 0.027655f, 0.029314f, 0.031971f, 0.034663f, 0.034782f, 0.032600f, 0.031398f, 0.034564f, 0.028039f, 0.024297f, 0.021475f, 0.018463f, 0.012404f, 0.009994f, 0.004077f, 0.002847f, -0.000548f, -0.006503f, -0.012283f, -0.017819f, -0.019363f, -0.024522f, -0.025304f, -0.024752f, -0.024908f, -0.027598f, -0.029076f, -0.026939f, -0.026210f, -0.023851f, -0.021937f, -0.020191f, -0.017986f, -0.013968f, -0.010167f, -0.007678f, -0.006133f, -0.004333f, -0.003317f, -0.002417f, -0.002098f, -0.001614f, -0.001513f, -0.001384f, -0.001258f}, + {0.031697f, 0.004158f, -0.010457f, 0.004906f, 0.005569f, 0.001907f, -0.013233f, 0.005995f, 0.009326f, -0.010115f, -0.003060f, -0.012386f, -0.002754f, -0.005279f, -0.004567f, -0.001808f, 0.000645f, -0.000457f, 0.001217f, 0.004416f, -0.005545f, 0.002435f, -0.012699f, 0.004331f, 0.007739f, 0.001629f, -0.003370f, -0.010289f, 0.006666f, -0.004535f, 0.010808f, 0.009231f, -0.000442f, -0.004333f, 0.008802f, 0.010288f, 0.008251f, 0.008363f, 0.002040f, -0.006458f, 0.001971f, 0.007910f, -0.003376f, -0.006746f, 0.005991f, 0.009542f, -0.004250f, 0.004971f, -0.010937f, -0.000924f, -0.009600f, 0.006492f, -0.012763f, -0.003460f, -0.002421f, 0.004327f, 0.006285f, 0.004465f, -0.000417f, -0.006765f, 0.000770f, -0.009349f, -0.006210f, 0.001681f, -0.001211f, -0.005647f, 0.003015f, 0.003133f, 0.000745f, 0.005859f, -0.005297f, 0.002508f, -0.007135f, -0.002833f, -0.003070f, 0.003874f, -0.003729f, -0.007515f, -0.003418f, -0.002816f, 0.010245f, 0.008836f, 0.002187f, -0.004729f, 0.000550f, -0.000573f, 0.001739f, 0.003534f, 0.000592f, 0.000176f, 0.000564f, -0.000170f, 0.000087f, -0.001349f, 0.000965f, -0.003970f, + 0.000121f, -0.000325f, 0.001560f, 0.000827f, -0.001284f, -0.001750f, 0.000292f, 0.000689f, 0.000684f, -0.000335f, 0.000036f, -0.000798f, 0.018146f, -0.018196f, 0.000738f, 0.000368f, -0.004572f, -0.005430f, -0.005784f, 0.001934f, -0.010233f, -0.010097f, 0.001482f, 0.004971f, -0.000328f, 0.005882f, 0.004599f, -0.005532f, 0.002348f, -0.019965f, -0.004845f, -0.004428f, -0.004605f, -0.006264f, -0.006905f, -0.017591f, -0.013648f, 0.001925f, 0.004182f, -0.000903f, 0.009602f, 0.007680f, 0.003268f, -0.003353f, -0.001847f, 0.008989f, -0.003397f, 0.001154f, -0.001245f, -0.009349f, 0.003203f, -0.003099f, -0.006340f, -0.002428f, 0.007743f, 0.018605f, -0.007015f, 0.002119f, 0.004581f, -0.003386f, 0.005907f, 0.002659f, -0.006421f, 0.003828f, -0.015272f, -0.007054f, 0.000239f, 0.006320f, 0.009810f, -0.005925f, -0.002703f, -0.000621f, -0.022160f, 0.003844f, 0.011562f, 0.000666f, 0.001739f, 0.006334f, -0.003546f, 0.009861f, 0.013307f, -0.001630f, 0.003833f, 0.008000f, 0.007625f, 0.001546f, 0.000486f, -0.003647f, -0.005237f, -0.003274f, 0.002418f, -0.005011f, 0.011128f, 0.007471f, -0.000173f, -0.005360f, + -0.002693f, 0.006410f, 0.007563f, -0.003707f, 0.005886f, -0.003498f, 0.001656f, -0.003567f, -0.002110f, -0.002433f, 0.000774f, 0.000207f, 0.000506f, 0.000535f, -0.000336f, -0.001162f, -0.000862f, -0.004776f, -0.015610f, 0.003633f, 0.000586f, -0.015100f, 0.002329f, 0.008482f, 0.012480f, 0.003214f, -0.008950f, 0.021137f, -0.002819f, -0.004150f, 0.009948f, -0.006127f, -0.005960f, 0.001028f, -0.007696f, 0.009426f, 0.009431f, -0.003798f, -0.014193f, -0.007014f, 0.007093f, -0.009142f, 0.020118f, 0.017352f, -0.013842f, -0.016955f, 0.000630f, 0.003181f, -0.016120f, -0.001049f, 0.006694f, 0.004534f, -0.007879f, -0.004591f, 0.018553f, -0.001961f, 0.012779f, -0.001260f, -0.004116f, -0.004303f, -0.009515f, 0.001666f, -0.001328f, 0.010001f, -0.008504f, 0.002317f, -0.002207f, 0.001861f, -0.004995f, -0.000657f, 0.008466f, 0.006705f, -0.010529f, 0.016456f, 0.001393f, -0.000074f, -0.000227f, -0.001506f, 0.004500f, -0.002268f, -0.014693f, -0.002091f, -0.007740f, 0.012831f, 0.005415f, 0.000334f, 0.015802f, -0.008721f, 0.010585f, 0.010367f, 0.000996f, -0.007672f, -0.001524f, -0.001635f, -0.000122f, -0.002185f, + -0.003133f, 0.004356f, 0.004667f, -0.006969f, 0.003390f, -0.000415f, 0.004938f, 0.004313f, -0.001375f, 0.000671f, -0.002108f, -0.003278f, 0.002389f, -0.003018f, -0.002487f, 0.001286f, 0.003362f, -0.003048f, -0.002210f, -0.003965f, -0.001640f, 0.002374f, -0.001450f, -0.000584f, 0.000110f, 0.001201f, -0.002130f, -0.001255f, 0.003115f, 0.001005f, -0.000582f, -0.000969f, -0.003365f, -0.000146f, 0.001798f, 0.001030f, -0.037529f, 0.008769f, 0.002143f, 0.026956f, -0.001327f, 0.010907f, -0.014309f, 0.003232f, -0.010692f, -0.002464f, -0.005177f, -0.001580f, 0.005052f, -0.002776f, 0.004726f, 0.009170f, 0.007030f, 0.025600f, 0.017704f, -0.011438f, 0.005964f, -0.000493f, 0.004825f, 0.003133f, -0.003128f, -0.025182f, 0.006533f, -0.001165f, -0.000123f, 0.009735f, -0.001384f, -0.006932f, -0.004786f, -0.001067f, -0.007737f, -0.004096f, -0.020102f, -0.004616f, 0.000657f, -0.007015f, -0.001145f, 0.008513f, 0.012123f, -0.003751f, 0.014951f, -0.010962f, 0.002565f, 0.005195f, 0.002067f, -0.003311f, -0.007680f, 0.005651f, -0.001837f, 0.003531f, -0.005674f, -0.008122f, 0.001665f, 0.004935f, -0.008205f, 0.008077f, + -0.005566f, 0.019054f, 0.020205f, -0.005973f, 0.007458f, 0.007841f, -0.000913f, -0.002473f, -0.002566f, -0.024396f, 0.010381f, 0.010100f, 0.000433f, -0.003996f, -0.010114f, 0.001209f, -0.002876f, -0.012366f, -0.027866f, 0.001971f, -0.006808f, 0.007316f, 0.000132f, 0.000020f, -0.004543f, -0.003032f, -0.005136f, -0.000390f, 0.003007f, -0.003520f, 0.004402f, -0.004365f, -0.002469f, -0.001765f, -0.000980f, 0.002424f, 0.002043f, -0.001382f, 0.001021f, 0.000765f, 0.001679f, 0.002633f, 0.002075f, -0.001176f, -0.002824f, 0.002242f, -0.001107f, -0.002081f, 0.000963f, 0.000859f, -0.001159f, 0.001696f, 0.002686f, 0.001002f, -0.000193f, -0.008127f, -0.012371f, 0.012216f, 0.006935f, -0.001138f, 0.014135f, -0.007682f, 0.012675f, -0.014414f, -0.013832f, 0.006636f, -0.022036f, -0.007855f, 0.005485f, 0.013309f, 0.017429f, -0.003124f, 0.012996f, -0.000527f, 0.012376f, 0.004522f, 0.001966f, -0.002120f, 0.000627f, 0.012329f, -0.005966f, -0.001382f, 0.002206f, 0.000999f, -0.012274f, -0.001600f, -0.006681f, 0.025195f, -0.012130f, -0.012325f, -0.003021f, 0.011832f, 0.011942f, 0.010212f, 0.013727f, -0.002467f, + 0.002486f, -0.003139f, -0.006878f, 0.005129f, -0.000658f, -0.001388f, -0.007858f, 0.019738f, 0.012185f, -0.006213f, 0.003739f, 0.005772f, -0.010493f, 0.002133f, 0.007669f, -0.002039f, 0.014835f, -0.006094f, -0.001963f, -0.016254f, -0.006130f, -0.013834f, 0.000584f, 0.018866f, -0.007490f, 0.005261f, 0.003220f, 0.000562f, -0.005200f, -0.001850f, 0.000144f, -0.004729f, 0.009079f, -0.009450f, -0.004434f, -0.000928f, 0.019967f, 0.003069f, -0.000139f, 0.006215f, -0.005461f, -0.015096f, 0.003702f, 0.001411f, -0.002404f, 0.000987f, 0.003670f, -0.001093f, 0.000745f, 0.007188f, 0.001369f, -0.000689f, 0.001724f, 0.000003f, -0.000985f, -0.001846f, 0.006761f, -0.000437f, 0.000563f, -0.006295f, 0.003751f, 0.000850f, 0.003736f, -0.001025f, -0.002545f, -0.000871f, 0.001900f, 0.002954f, 0.001987f, -0.005154f, 0.000253f, 0.003461f, -0.001100f, -0.006474f, -0.004282f, -0.035659f, 0.025592f, 0.002553f, -0.013216f, -0.031514f, -0.003277f, 0.000636f, -0.018704f, -0.001836f, 0.008486f, 0.007199f, 0.000527f, -0.005527f, 0.006688f, 0.022246f, 0.022584f, -0.009907f, -0.010838f, -0.024822f, 0.004778f, -0.004613f, + 0.023801f, -0.009930f, -0.000679f, -0.005791f, 0.008867f, -0.002859f, -0.024698f, 0.007890f, -0.001299f, -0.014724f, -0.000132f, 0.002123f, -0.002139f, -0.002655f, -0.010236f, -0.014227f, 0.008397f, 0.001936f, 0.011027f, -0.009888f, 0.018658f, 0.008744f, -0.004026f, -0.016838f, -0.003449f, 0.005840f, 0.018246f, 0.005521f, -0.010540f, -0.004925f, 0.008404f, 0.005333f, -0.005481f, -0.002792f, 0.008868f, 0.007191f, 0.009369f, 0.018033f, 0.020197f, 0.009750f, 0.010689f, 0.012313f, -0.007460f, 0.001625f, -0.013598f, 0.013271f, 0.001985f, 0.006611f, -0.009753f, -0.015144f, 0.003281f, -0.019308f, -0.007025f, -0.008531f, 0.013897f, 0.014513f, 0.015262f, 0.003849f, -0.004500f, -0.005078f, 0.014249f, 0.002725f, -0.002147f, 0.003420f, -0.004666f, 0.008983f, 0.000343f, -0.000344f, 0.002886f, 0.003564f, -0.001563f, 0.007320f, -0.000137f, 0.001062f, -0.003747f, -0.002390f, 0.001943f, 0.005660f, -0.000492f, 0.001911f, 0.003271f, 0.001738f, 0.001003f, -0.001996f, 0.002681f, -0.002579f, -0.003739f, 0.002961f, -0.012742f, -0.000732f, 0.023917f, 0.014713f, 0.020226f, 0.003868f, -0.022069f, -0.007262f, + 0.023488f, -0.006744f, -0.014830f, -0.015462f, -0.015214f, -0.016109f, 0.008903f, 0.009032f, 0.005820f, 0.005318f, 0.005508f, 0.022587f, -0.002754f, 0.009812f, -0.019348f, -0.021797f, 0.014645f, -0.000763f, -0.011866f, 0.000866f, -0.030346f, -0.009911f, -0.010197f, 0.003742f, -0.001028f, -0.002796f, -0.021336f, -0.013986f, 0.002414f, 0.014769f, 0.024032f, -0.009510f, -0.009369f, 0.012787f, -0.016430f, -0.001179f, -0.000797f, 0.005516f, 0.010542f, 0.008564f, 0.016675f, -0.008927f, 0.024155f, 0.011371f, -0.026003f, 0.013014f, -0.014431f, -0.017283f, -0.014324f, -0.020907f, 0.018970f, 0.004440f, -0.022228f, 0.002541f, 0.004754f, 0.002058f, 0.003583f, -0.004095f, 0.015745f, -0.009115f, 0.012118f, -0.019397f, 0.014759f, -0.009850f, -0.008902f, 0.001901f, 0.006585f, -0.000772f, 0.010684f, 0.030415f, -0.002492f, -0.016340f, 0.009707f, 0.019924f, 0.001659f, -0.002189f, -0.015744f, -0.006922f, 0.014760f, -0.002521f, -0.000918f, 0.000475f, 0.003041f, -0.004147f, -0.002288f, -0.000393f, 0.004414f, -0.002541f, -0.000440f, -0.002917f, 0.008369f, -0.006106f, 0.001365f, -0.005742f, -0.007045f, 0.001842f, + 0.002390f, -0.002269f, 0.001206f, -0.002111f, -0.001468f, -0.000494f, -0.000707f, -0.000219f, -0.002920f, -0.001830f, 0.008606f, -0.000488f, 0.000168f, -0.000866f, 0.003283f, 0.001804f, 0.002955f, 0.049148f, -0.045022f, 0.020271f, 0.021169f, -0.020445f, -0.003998f, 0.029250f, 0.010366f, 0.018439f, 0.005251f, -0.006898f, 0.044197f, -0.002169f, -0.008715f, -0.000427f, -0.000224f, 0.021015f, 0.033154f, 0.012314f, -0.000605f, 0.000293f, 0.004660f, 0.011139f, -0.000534f, 0.005731f, -0.023808f, 0.010713f, 0.017894f, -0.004214f, 0.007079f, -0.000381f, 0.003021f, -0.015490f, -0.012160f, 0.000467f, -0.000890f, 0.020305f, 0.009849f, 0.008173f, -0.009085f, -0.011101f, -0.011076f, 0.011523f, 0.016938f, -0.000241f, -0.005937f, 0.033420f, 0.017141f, 0.022204f, -0.012547f, -0.025613f, -0.005173f, -0.026804f, -0.017750f, -0.008349f, -0.011385f, -0.001908f, 0.019404f, -0.006648f, 0.000393f, -0.016567f, -0.017641f, 0.019310f, -0.001365f, 0.008798f, 0.009468f, -0.010671f, 0.018559f, 0.004535f, 0.001326f, -0.006972f, -0.013047f, 0.014463f, -0.004924f, -0.026706f, 0.014837f, 0.012456f, 0.015532f, 0.006776f, + -0.018909f, -0.004285f, 0.001353f, -0.019750f, 0.010684f, 0.010699f, -0.002187f, 0.007980f, 0.006630f, 0.007090f, -0.002194f, 0.011438f, 0.001382f, -0.000871f, -0.006385f, 0.002536f, -0.000502f, 0.009026f, 0.001650f, -0.000671f, 0.001544f, -0.000500f, 0.006552f, -0.003363f, -0.001245f, -0.005009f, 0.001967f, -0.001638f, -0.003994f, 0.000370f, 0.000577f, -0.001784f, 0.000679f, 0.007225f, 0.005373f, -0.003722f, -0.002553f, -0.005349f, 0.000883f, -0.001482f, -0.001063f, 0.000424f, 0.000534f, 0.002166f, -0.003710f, -0.034352f, 0.004513f, 0.011694f, -0.016747f, 0.014450f, -0.029126f, 0.006984f, 0.009208f, -0.003589f, -0.011389f, -0.014648f, -0.017167f, -0.029189f, 0.004002f, 0.033810f, -0.010792f, 0.016461f, 0.009221f, 0.025226f, 0.013473f, -0.009119f, -0.021177f, 0.011335f, -0.005178f, -0.007301f, -0.021960f, -0.003002f, -0.002758f, -0.008533f, -0.009281f, -0.004780f, -0.015372f, -0.020154f, 0.024104f, -0.002017f, -0.013650f, 0.019079f, 0.006829f, -0.016015f, 0.002672f, -0.000860f, 0.010876f, -0.021383f, 0.006334f, 0.007818f, -0.031880f, 0.011073f, 0.010689f, -0.016166f, 0.004960f, 0.001613f, + -0.004984f, 0.012224f, 0.001306f, -0.001867f, 0.001626f, 0.008407f, 0.021855f, 0.017609f, 0.022296f, 0.015642f, 0.008075f, -0.005332f, 0.033083f, -0.007968f, -0.016651f, 0.036870f, 0.002620f, 0.022445f, 0.004926f, -0.006663f, -0.033677f, -0.030883f, -0.007602f, 0.002396f, -0.012198f, -0.005571f, -0.009545f, 0.021945f, -0.018682f, -0.005058f, -0.003043f, 0.005690f, -0.018239f, 0.013718f, -0.001309f, 0.004645f, -0.001438f, -0.006683f, -0.011828f, -0.007573f, -0.009290f, -0.007172f, -0.002139f, 0.001688f, -0.005669f, -0.003640f, -0.003111f, 0.008350f, -0.009034f, -0.007568f, -0.006468f, -0.007264f, -0.000217f, 0.006813f, -0.002694f, -0.002589f, 0.004618f, 0.001619f, -0.002194f, 0.003605f, -0.005635f, -0.005766f, 0.004908f, -0.006805f, -0.011736f, 0.004693f, 0.010668f, -0.005085f, 0.001220f, 0.007662f, -0.002361f, -0.005292f, -0.005908f, -0.057485f, 0.028340f, 0.049798f, 0.003602f, -0.028036f, 0.012997f, -0.005066f, -0.001816f, 0.008277f, 0.004957f, 0.012916f, -0.014876f, 0.001868f, 0.044651f, 0.034316f, 0.030056f, -0.032508f, -0.001226f, 0.008144f, 0.017236f, -0.015536f, -0.017377f, -0.004349f, + 0.005796f, 0.015584f, 0.007855f, -0.041854f, -0.047464f, 0.014935f, -0.001400f, 0.026957f, 0.027695f, -0.017645f, 0.022956f, 0.018440f, 0.024512f, -0.001552f, -0.014308f, -0.014989f, 0.011822f, -0.015881f, -0.005928f, 0.000092f, -0.000481f, 0.014649f, 0.031135f, 0.017486f, -0.008250f, -0.007205f, -0.015092f, -0.003813f, 0.001589f, 0.008458f, -0.003067f, -0.005362f, 0.015437f, 0.009658f, -0.023115f, -0.000230f, 0.001214f, 0.028156f, -0.013878f, -0.016039f, -0.030360f, -0.010314f, 0.005505f, 0.002127f, 0.016081f, -0.003336f, 0.004229f, -0.013621f, -0.020068f, -0.018380f, -0.018360f, -0.010656f, 0.009184f, -0.038350f, 0.004881f, -0.005317f, -0.005732f, -0.008061f, 0.007902f, 0.021104f, 0.015637f, 0.002495f, -0.003131f, -0.019458f, -0.005907f, -0.001744f, -0.003644f, 0.012947f, 0.006912f, 0.003988f, 0.003176f, 0.006753f, 0.008167f, -0.002941f, -0.002921f, 0.000245f, -0.003186f, 0.000728f, 0.001227f, 0.002619f, 0.004671f, -0.012439f, 0.002306f, -0.001573f, 0.009857f, 0.002611f, -0.012162f, -0.000663f, -0.007548f, -0.006055f, -0.002724f, -0.002769f, -0.002916f, -0.001552f, -0.001193f, 0.003333f, + -0.000249f, 0.006857f, 0.006261f, 0.005241f, 0.009151f, 0.028803f, 0.002131f, 0.024963f, -0.003692f, 0.032474f, 0.016077f, 0.025269f, 0.015437f, 0.007192f, -0.012877f, -0.001517f, -0.008151f, 0.017245f, 0.004906f, 0.015116f, -0.014906f, -0.002802f, 0.026883f, -0.033677f, -0.018937f, 0.025828f, -0.044355f, -0.019684f, 0.003043f, -0.008656f, -0.022086f, 0.044187f, -0.008186f, 0.030450f, 0.012064f, -0.026969f, -0.004338f, -0.010290f, -0.032571f, -0.042221f, 0.033287f, -0.000540f, -0.012467f, 0.008061f, 0.000361f, -0.005808f, 0.011963f, 0.004560f, -0.004580f, -0.015679f, 0.002714f, 0.031449f, 0.026609f, -0.022389f, 0.008539f, 0.001508f, 0.024807f, -0.011640f, 0.016731f, -0.036254f, -0.008974f, 0.024365f, 0.008008f, -0.008476f, 0.029096f, -0.009567f, 0.020322f, -0.040221f, -0.046370f, -0.016854f, 0.000645f, -0.032897f, 0.035043f, 0.024685f, 0.035602f, -0.016669f, -0.012364f, -0.012662f, 0.001604f, -0.018413f, -0.000451f, -0.028023f, -0.025497f, 0.000931f, 0.006850f, 0.025532f, 0.011913f, -0.002935f, -0.009760f, 0.007884f, 0.014606f, 0.009528f, 0.005681f, -0.009376f, 0.010485f, 0.009386f, + 0.011849f, 0.008759f, 0.006293f, 0.009499f, -0.013610f, 0.011032f, -0.008343f, -0.004306f, 0.017355f, 0.015376f, 0.010203f, -0.002065f, 0.000348f, -0.004916f, 0.008759f, 0.002630f, -0.003996f, 0.004706f, 0.008885f, 0.001184f, 0.006839f, 0.006733f, -0.009481f, 0.002853f, -0.007242f, -0.002226f, 0.001875f, 0.040309f, 0.029012f, 0.045413f, -0.040153f, -0.030149f, -0.068853f, 0.029807f, -0.007590f, -0.058808f, -0.011342f, 0.005696f, 0.008759f, -0.021904f, 0.024062f, 0.020373f, 0.002353f, -0.000153f, 0.003820f, -0.009645f, -0.020440f, 0.004641f, -0.011595f, -0.019076f, -0.000182f, 0.044787f, 0.001454f, -0.006652f, -0.035650f, 0.015196f, 0.028267f, -0.014460f, -0.043032f, -0.007683f, 0.014585f, 0.005290f, -0.009089f, 0.009531f, 0.003126f, 0.015645f, -0.004303f, 0.025713f, 0.039125f, 0.014931f, -0.025929f, 0.029599f, 0.013308f, -0.033121f, -0.035363f, 0.038651f, 0.018663f, -0.014828f, -0.017235f, -0.000689f, -0.031344f, 0.023145f, 0.030311f, -0.000549f, 0.001747f, 0.007798f, -0.003837f, 0.033306f, 0.011176f, 0.008795f, -0.013701f, 0.005540f, 0.011221f, 0.041099f, -0.009787f, 0.015869f, + -0.031662f, -0.035905f, 0.032224f, -0.004655f, -0.002981f, 0.003532f, 0.030714f, 0.000882f, -0.001417f, 0.019578f, -0.009242f, 0.004078f, 0.017796f, 0.021912f, -0.010351f, -0.013288f, -0.029092f, -0.014135f, 0.009532f, -0.012632f, 0.010155f, -0.000087f, 0.010774f, -0.005584f, 0.007950f, 0.001890f, -0.004467f, 0.003746f, 0.016297f, 0.004267f, 0.016222f, 0.005146f, -0.010242f, 0.000921f, 0.006776f, 0.005875f, -0.010052f, -0.008955f, -0.009792f, -0.003933f, -0.007691f, -0.007258f, -0.011963f, -0.004872f, 0.006680f, 0.004527f, -0.001210f, -0.001656f, 0.003656f, -0.007657f, -0.000185f, 0.010546f, -0.002878f, -0.001354f, -0.004922f, -0.003844f, -0.002143f, -0.014863f, -0.002125f, -0.005567f, -0.006053f, -0.009036f, -0.013067f, -0.046187f, -0.003376f, -0.030058f, -0.061460f, -0.063355f, -0.027120f, -0.048262f, -0.021627f, -0.007402f, 0.009222f, 0.027725f, 0.030875f, 0.003584f, -0.015984f, 0.033221f, -0.016183f, 0.016612f, -0.060676f, -0.005545f, -0.041478f, -0.027682f, 0.028878f, 0.020417f, 0.019874f, 0.006924f, 0.041379f, -0.003667f, -0.002095f, -0.029000f, -0.009751f, -0.005466f, -0.019593f, -0.019789f, + -0.049780f, -0.019290f, -0.005084f, -0.007634f, -0.030623f, 0.027958f, 0.011410f, 0.016871f, -0.013224f, -0.004802f, -0.075786f, -0.021510f, -0.020556f, 0.018124f, 0.039538f, -0.023609f, -0.003233f, -0.043956f, -0.002749f, 0.023329f, -0.006823f, -0.014537f, 0.010451f, 0.033256f, 0.056409f, 0.012227f, 0.002230f, -0.002628f, -0.014557f, -0.021932f, 0.015415f, -0.014293f, 0.051206f, 0.010447f, 0.022303f, 0.103970f, -0.020149f, -0.017151f, -0.025700f, -0.035814f, -0.004475f, 0.035825f, 0.016363f, 0.005522f, 0.012211f, -0.014488f, -0.011151f, -0.031112f, -0.007120f, 0.018221f, -0.002460f, -0.006516f, -0.002527f, -0.006896f, 0.004158f, -0.000698f, 0.007319f, 0.007443f, 0.007549f, 0.009807f, 0.010657f, 0.026832f, 0.016524f, -0.009304f, 0.015772f, 0.000059f, 0.001403f, 0.011497f, -0.012335f, 0.000709f, -0.014298f, -0.008433f, -0.019728f, -0.014494f, -0.020598f, -0.016969f, -0.011274f, 0.023507f, -0.013933f, -0.007623f, -0.016511f, 0.001527f, 0.005421f, -0.003188f, 0.007335f, 0.003266f, -0.000041f, -0.013818f, -0.051698f, 0.029491f, 0.048537f, -0.028569f, 0.001532f, 0.010971f, -0.016689f, -0.003931f, + -0.036171f, -0.000644f, -0.020278f, 0.052728f, 0.000015f, -0.009815f, 0.042259f, -0.010619f, 0.012288f, -0.048350f, 0.025142f, 0.007619f, 0.032753f, -0.015168f, 0.024380f, 0.043197f, 0.046248f, 0.026104f, 0.041682f, 0.021512f, -0.006679f, 0.040688f, -0.019673f, -0.026542f, -0.008609f, 0.016435f, 0.027428f, -0.065821f, -0.004576f, -0.042488f, 0.033772f, 0.015505f, -0.000924f, 0.011835f, 0.047314f, 0.002225f, 0.042212f, 0.018272f, 0.063969f, 0.005975f, -0.007402f, 0.028280f, 0.009165f, -0.032440f, 0.006911f, -0.003574f, -0.043942f, 0.030998f, -0.026554f, -0.042521f, -0.087599f, 0.007055f, -0.010913f, 0.051722f, -0.028789f, 0.069133f, 0.022590f, -0.000862f, -0.010667f, 0.027155f, 0.028180f, -0.050056f, -0.021655f, -0.036900f, 0.012831f, -0.016465f, 0.037674f, 0.012376f, 0.012573f, 0.018635f, -0.008856f, 0.003612f, -0.013389f, -0.004222f, 0.000917f, -0.004593f, -0.039061f, 0.015777f, -0.000216f, 0.011948f, 0.000233f, -0.011029f, 0.001104f, 0.016355f, -0.026040f, 0.022784f, -0.009635f, 0.000408f, 0.002392f, -0.021251f, -0.002002f, 0.013650f, 0.006507f, -0.015095f, -0.006601f, -0.003235f, + -0.018465f, 0.006714f, -0.005362f, 0.027278f, -0.021550f, 0.010111f, 0.018475f, 0.007292f, -0.008031f, -0.005219f, 0.008921f, 0.005100f, 0.005491f, -0.004052f, 0.009259f, -0.027854f, 0.007527f, 0.007584f, 0.012161f, -0.007913f, -0.013460f, 0.001800f, 0.011910f, 0.002478f, 0.032660f, -0.022847f, -0.025491f, -0.025091f, 0.031386f, 0.015990f, 0.041053f, 0.010956f, 0.128269f, -0.038882f, 0.000093f, 0.000361f, 0.059388f, 0.024230f, 0.027177f, -0.039961f, 0.016684f, -0.016126f, 0.000517f, -0.018813f, 0.003409f, 0.042745f, -0.012004f, 0.013140f, 0.083184f, 0.025688f, -0.038540f, -0.045043f, 0.004575f, 0.054025f, 0.027902f, 0.009770f, -0.021733f, 0.045899f, 0.007306f, -0.007515f, -0.051703f, 0.015012f, -0.008711f, 0.021413f, -0.046988f, -0.028936f, 0.001831f, -0.012419f, 0.005519f, -0.043883f, -0.002079f, -0.027008f, 0.011674f, 0.037746f, 0.030080f, 0.009420f, -0.059951f, -0.000116f, 0.005285f, -0.054114f, -0.048364f, -0.032282f, -0.026706f, -0.026698f, 0.041761f, 0.009056f, -0.001794f, 0.026992f, 0.043447f, 0.011131f, 0.037550f, 0.000416f, 0.024664f, 0.167747f, -0.038997f, 0.027126f, + 0.018747f, -0.030200f, 0.005687f, -0.112801f, 0.001680f, 0.055093f, 0.014003f, -0.031479f, 0.042313f, 0.009725f, 0.015739f, -0.028605f, -0.006933f, -0.024526f, 0.007826f, 0.001474f, 0.001554f, 0.008999f, -0.035339f, 0.012263f, -0.019646f, -0.014476f, -0.048172f, 0.011212f, 0.010358f, 0.008888f, 0.011683f, 0.058976f, 0.008423f, 0.005779f, 0.006267f, 0.004069f, 0.035036f, 0.003594f, 0.014464f, 0.011869f, 0.026592f, 0.010337f, -0.002206f, -0.006600f, -0.005517f, 0.003931f, 0.016652f, 0.019994f, 0.005508f, -0.031844f, -0.014946f, -0.007497f, -0.007512f, -0.010900f, -0.033245f, -0.008497f, 0.010954f, 0.024504f, 0.067584f, -0.032265f, -0.002209f, -0.046297f, -0.033813f, 0.010273f, 0.029273f, -0.038386f, 0.044572f, 0.018406f, -0.059905f, 0.035947f, -0.024625f, -0.029894f, -0.003076f, -0.036036f, 0.007730f, -0.016410f, 0.045207f, -0.026914f, -0.002730f, 0.024744f, -0.089151f, 0.012194f, 0.026816f, -0.027186f, 0.021135f, -0.053949f, 0.052791f, 0.005381f, 0.008533f, -0.101654f, 0.090653f, 0.038717f, 0.029303f, 0.001566f, -0.058405f, 0.052461f, -0.004087f, -0.026646f, 0.092686f, -0.019029f, + -0.041742f, -0.022031f, 0.010546f, 0.026613f, 0.024848f, 0.006403f, -0.016501f, -0.110384f, -0.013186f, 0.027110f, 0.000832f, 0.039983f, -0.058511f, 0.059190f, 0.005258f, 0.019759f, -0.059481f, -0.017343f, 0.008632f, 0.075565f, -0.032410f, 0.017373f, -0.055200f, 0.047716f, 0.026104f, 0.045013f, -0.018359f, 0.019747f, 0.006972f, -0.059776f, -0.057629f, 0.030854f, 0.024608f, 0.048056f, 0.009466f, 0.061776f, -0.094533f, -0.122836f, 0.018630f, -0.026188f, 0.068272f, -0.045497f, -0.010738f, 0.007642f, -0.053131f, 0.002246f, -0.032124f, 0.026795f, 0.037472f, 0.003515f, 0.030201f, 0.034020f, 0.009176f, -0.031350f, -0.016710f, 0.054934f, 0.027700f, 0.006851f, 0.008593f, -0.016893f, 0.000237f, 0.033326f, 0.017759f, -0.027554f, -0.016515f, 0.030989f, -0.005563f, 0.019192f, 0.018459f, -0.012354f, -0.017156f, -0.016468f, -0.001047f, 0.016393f, 0.006365f, 0.021058f, 0.029423f, 0.002205f, -0.002204f, 0.024687f, 0.000295f, 0.004715f, 0.006635f, -0.010771f, 0.007270f, -0.018603f, 0.009099f, 0.003435f, -0.000914f, 0.007758f, -0.009041f, -0.085544f, 0.078036f, -0.016828f, -0.018841f, -0.030436f, + -0.008894f, -0.067450f, -0.125964f, 0.043518f, 0.036168f, -0.005533f, -0.025972f, -0.051299f, -0.008481f, -0.015898f, -0.027295f, 0.049656f, -0.112659f, -0.048120f, -0.059481f, -0.017717f, -0.085785f, -0.007888f, -0.012935f, -0.003059f, -0.014384f, -0.017380f, 0.013803f, -0.000836f, -0.037983f, -0.011879f, -0.000882f, -0.051943f, -0.027778f, -0.015321f, 0.003764f, 0.039996f, -0.020551f, 0.080160f, -0.041913f, -0.006007f, 0.033674f, -0.035758f, 0.021701f, 0.004548f, -0.054988f, -0.082220f, -0.020197f, 0.020973f, 0.074923f, 0.032491f, -0.057486f, -0.024332f, -0.164939f, -0.055220f, -0.011961f, 0.034640f, 0.089462f, -0.004804f, -0.095994f, 0.005265f, 0.052004f, -0.019244f, -0.004634f, 0.055146f, 0.058020f, 0.133267f, -0.147480f, -0.028683f, 0.020759f, 0.037170f, -0.046653f, -0.055361f, -0.078950f, -0.078386f, -0.043930f, -0.036541f, -0.010423f, -0.005783f, -0.091229f, -0.037933f, -0.033570f, 0.033484f, -0.017402f, -0.009211f, 0.081767f, 0.061849f, 0.004735f, -0.011991f, -0.004024f, -0.050953f, -0.002535f, 0.017721f, -0.036895f, -0.019954f, 0.006620f, 0.022764f, -0.015849f, -0.018336f, -0.012491f, 0.025391f, + -0.017464f, 0.026598f, 0.001537f, 0.027453f, 0.019436f, 0.019618f, -0.015837f, 0.009637f, -0.038829f, 0.019202f, -0.005539f, 0.011039f, -0.034437f, -0.026939f, -0.004351f, 0.008049f, -0.019672f, -0.000261f, -0.043596f, -0.008346f, -0.005795f, 0.017548f, 0.022100f, -0.028278f, 0.055432f, 0.000198f, 0.020094f, 0.011460f, 0.039895f, 0.039671f, -0.002792f, 0.024764f, -0.047534f, 0.012515f, -0.018738f, -0.116031f, 0.027283f, -0.019118f, 0.035374f, -0.031434f, -0.032455f, 0.003362f, -0.048102f, 0.009218f, -0.048517f, -0.000108f, -0.007808f, -0.018441f, 0.024500f, -0.035911f, -0.047230f, -0.042928f, -0.055606f, -0.008535f, -0.005413f, 0.063384f, 0.014567f, -0.044689f, -0.067041f, 0.009806f, -0.000710f, 0.017047f, -0.012488f, 0.038782f, -0.043862f, -0.016793f, -0.061894f, -0.039140f, -0.017311f, 0.003001f, -0.025750f, 0.066136f, -0.022125f, -0.054800f, 0.017968f, 0.068622f, 0.049759f, 0.021001f, -0.047229f, -0.030219f, -0.004258f, 0.062418f, 0.118286f, -0.000102f, 0.023765f, -0.021584f, -0.114545f, -0.024300f, 0.011053f, 0.044433f, 0.098841f, -0.053406f, -0.066069f, 0.040123f, 0.019113f, -0.022102f, + 0.003660f, -0.035570f, 0.023159f, -0.096278f, -0.010675f, 0.006645f, 0.024160f, -0.057609f, 0.068212f, -0.094108f, -0.107842f, -0.098928f, 0.050992f, -0.019418f, 0.095830f, -0.131805f, -0.057441f, 0.011810f, 0.136192f, -0.009749f, -0.023708f, -0.073509f, -0.026896f, -0.007544f, 0.065895f, -0.004356f, 0.000140f, 0.005121f, 0.011792f, 0.002520f, -0.000563f, -0.027032f, -0.023685f, 0.032477f, 0.014176f, 0.005046f, -0.070703f, 0.019089f, -0.017913f, -0.007129f, -0.036441f, 0.002948f, -0.002955f, -0.005427f, -0.083312f, 0.009043f, -0.018186f, -0.008264f, -0.006936f, 0.015504f, 0.000014f, 0.006503f, -0.000287f, 0.001834f, -0.000001f, 0.001721f, -0.030259f, -0.004571f, -0.019397f, -0.015506f, 0.014782f, 0.016504f, -0.024272f, 0.002276f, -0.017250f, 0.024121f, -0.008258f, -0.037472f, 0.006001f, 0.068459f, 0.020256f, -0.125032f, -0.022964f, -0.086602f, 0.037246f, 0.006087f, -0.171463f, 0.010548f, -0.053379f, -0.111583f, -0.086849f, -0.127202f, 0.077165f, -0.039611f, -0.100098f, -0.045775f, 0.031412f, -0.060342f, -0.051884f, -0.041047f, -0.024465f, -0.045152f, -0.044422f, -0.081783f, -0.059046f, -0.111756f, + -0.063088f, -0.057494f, -0.019299f, -0.053346f, -0.011379f, -0.025665f, -0.002178f, 0.002903f, 0.014049f, 0.029645f, -0.031136f, 0.024411f, 0.002502f, 0.055377f, 0.024105f, 0.034053f, 0.035166f, -0.105039f, -0.027845f, 0.081797f, -0.014873f, -0.052997f, -0.058710f, -0.044526f, 0.032747f, 0.132795f, -0.009495f, -0.003544f, -0.090671f, -0.093474f, -0.019987f, 0.017380f, 0.079701f, -0.007151f, 0.072588f, 0.025439f, -0.089104f, 0.158045f, 0.002450f, 0.122566f, -0.000307f, -0.033520f, 0.066122f, -0.091322f, -0.116256f, -0.075971f, -0.256751f, -0.157322f, -0.051631f, 0.115370f, 0.071302f, -0.104777f, -0.068311f, -0.159105f, 0.077135f, 0.101762f, -0.080992f, -0.082457f, 0.017656f, 0.066398f, 0.096929f, 0.025083f, 0.055205f, -0.054507f, -0.029583f, -0.041729f, -0.060654f, -0.026950f, -0.006411f, 0.003236f, 0.001385f, -0.035182f, 0.003989f, 0.019609f, 0.006115f, -0.007844f, -0.024878f, -0.018773f, -0.028240f, -0.012878f, -0.041185f, -0.011458f, 0.023118f, -0.041754f, -0.064448f, -0.012331f, -0.042885f, -0.031356f, -0.006524f, -0.056494f, -0.042818f, -0.014143f, 0.023602f, 0.022839f, 0.027417f, -0.004251f, + -0.024750f, -0.007550f, 0.007340f, -0.017449f, 0.037156f, -0.002104f, 0.026647f, -0.002410f, -0.002675f, 0.024782f, 0.019807f, 0.028181f, 0.067836f, 0.039959f, 0.049667f, -0.043520f, -0.105683f, 0.122925f, 0.117579f, -0.074349f, -0.096408f, -0.000475f, 0.105528f, -0.011471f, -0.006058f, -0.032909f, 0.092308f, -0.010284f, -0.024529f, -0.002315f, 0.025571f, 0.047274f, 0.001379f, -0.035648f, -0.040350f, 0.056809f, 0.004358f, -0.024569f, -0.060722f, 0.034486f, 0.019249f, -0.007052f, -0.047809f, 0.014943f, 0.020816f, 0.016981f, -0.030158f, -0.018373f, 0.005555f, 0.046779f, -0.013606f, 0.016680f, -0.068859f, -0.019418f, 0.000336f, 0.045284f, -0.095917f, -0.017396f, 0.009601f, 0.068982f, -0.033009f, 0.010493f, -0.048865f, 0.006447f, 0.020617f, -0.034057f, -0.025477f, -0.004280f, 0.011539f, 0.020822f, -0.021612f, 0.001187f, -0.085380f, 0.046068f, -0.014004f, 0.079961f, -0.049447f, 0.035485f, -0.033539f, 0.036896f, 0.007310f, 0.024620f, 0.021531f, -0.062735f, 0.070907f, 0.013566f, 0.041072f, -0.069226f, 0.019516f, -0.017912f, 0.011335f, -0.020037f, 0.003133f, -0.005193f, 0.009794f, 0.022947f, + -0.003257f, -0.027967f, -0.015943f, 0.006573f, -0.003279f, 0.001256f, -0.010281f, -0.027291f, 0.009430f, 0.006627f, -0.007868f, -0.008097f, -0.000046f, -0.008925f, 0.001721f, -0.015113f, -0.000000f, -0.007666f, 0.012518f, 0.006480f, -0.004520f, -0.011388f, 0.004229f, -0.000279f, -0.009029f, 0.006370f, -0.028921f, -0.000862f, -0.002956f, 0.012496f, 0.000001f, 0.033277f, -0.021996f, -0.023490f, -0.007292f, 0.017266f, -0.023859f, 0.035723f, -0.030055f, 0.014789f, -0.014490f, 0.032506f, -0.029177f, 0.035829f, -0.020248f, 0.027877f, -0.025298f, 0.043689f, -0.041271f, 0.031476f, -0.009178f, 0.023550f, -0.022061f, 0.023153f, -0.025061f, 0.026221f, -0.025247f, 0.020963f, -0.016791f, 0.023270f, -0.018093f, 0.019400f, -0.018024f, 0.005460f, -0.005849f, 0.011756f, -0.008931f, 0.009660f, -0.007901f, 0.007869f, -0.005653f, 0.010852f, -0.006640f, 0.004223f, -0.005197f, 0.005775f, -0.004518f, 0.002077f, 0.000910f, -0.035839f, -0.079907f, -0.106316f, 0.077847f, 0.051707f, -0.060555f, -0.086368f, -0.042233f, 0.040255f, 0.021197f, 0.053489f, 0.057563f, 0.011425f, -0.028760f, -0.008254f, 0.020253f, -0.019554f, + -0.001439f, 0.012053f, 0.003432f, 0.032306f, 0.022635f, 0.009921f, -0.028736f, -0.000890f, -0.017728f, 0.018822f, -0.030115f, -0.026063f, 0.022175f, -0.006811f, -0.012154f, -0.011930f, -0.020882f, -0.028691f, 0.002387f, 0.023764f, 0.021698f, 0.018222f, -0.006675f, -0.023628f, -0.020500f, -0.014284f, 0.025899f, 0.035157f, -0.016120f, -0.024272f, -0.010392f, 0.029202f, 0.015179f, 0.039007f, -0.027262f, -0.010267f, 0.015531f, -0.007147f, 0.001471f, -0.003990f, 0.013977f, 0.008435f, 0.011329f, 0.002506f, -0.026071f, 0.011041f, 0.005087f, -0.000807f, 0.020549f, -0.010405f, -0.004992f, 0.003675f, -0.003541f, 0.002769f, -0.007395f, 0.034629f, 0.008883f, -0.002631f, 0.033063f, 0.033054f, -0.033212f, -0.050469f, -0.018325f, -0.034520f, 0.001270f, 0.023085f, 0.006790f, -0.020589f, -0.024779f, -0.006525f, -0.004585f, 0.020077f, 0.009760f, 0.012568f, 0.018919f, 0.011540f, -0.010164f, 0.011682f, 0.008439f, -0.024227f, -0.032400f, 0.009921f, -0.008351f, 0.016387f, 0.012193f, -0.017775f, -0.004521f, -0.005949f, -0.006294f, -0.020679f, -0.011145f, -0.001162f, 0.006856f, 0.010071f, 0.027963f, -0.013653f, + -0.010027f, 0.007221f, -0.006140f, -0.008023f, 0.016473f, 0.000686f, 0.036514f, -0.088727f, -0.233583f, -0.085871f, 0.041884f, 0.121506f, 0.256623f, 0.171732f, 0.044187f, 0.065085f, -0.034311f, -0.104462f, -0.173497f, -0.150943f, -0.120021f, -0.034608f, 0.004600f, 0.083492f, 0.092028f, 0.195946f, 0.095107f, 0.062726f, -0.004941f, -0.041766f, -0.094336f, -0.048972f, -0.076288f, -0.087946f, -0.054177f, -0.045331f, -0.003408f, 0.024508f, 0.073283f, 0.045325f, 0.052594f, 0.047840f, 0.048320f, 0.072729f, 0.006247f, 0.050396f, -0.009376f, -0.022611f, -0.061402f, -0.036555f, -0.091557f, -0.134710f, -0.117753f, 0.001404f, -0.020058f, 0.036963f, 0.063256f, 0.034727f, 0.097595f, 0.085274f, 0.123358f, 0.070265f, 0.083647f, 0.004167f, 0.004074f, -0.065963f, -0.107858f, -0.125966f, -0.151297f, -0.099390f, -0.123656f, -0.010368f, -0.000538f, 0.059532f, 0.062365f, 0.149444f, 0.117322f, 0.166932f, 0.067692f, 0.078063f, 0.032491f, -0.000667f, -0.099642f, -0.162415f, -0.108836f, -0.129744f, -0.080911f, -0.087840f, -0.008268f, 0.013633f, 0.051808f, 0.068087f, 0.092138f, 0.094153f, 0.090434f, 0.059300f, + 0.064741f, 0.016920f, -0.011804f, -0.022214f, -0.073035f, -0.066487f, -0.087431f, -0.061691f, -0.087400f, -0.066499f, -0.007011f, 0.015654f, 0.045978f, 0.069566f, 0.061937f, 0.063961f, 0.105211f, 0.038185f, 0.064212f, 0.049413f, -0.066453f, -0.120088f, -0.052170f, -0.105877f, -0.066877f, -0.036279f, -0.007651f, 0.009520f, 0.033666f, 0.061224f, 0.042475f, 0.065861f, 0.041666f, 0.035900f, 0.014360f, -0.003940f, -0.038298f, -0.012459f, -0.018008f, -0.066940f, -0.062731f, -0.017163f, -0.007162f, 0.003678f, 0.021960f, 0.025895f, 0.032615f, 0.026248f, 0.025777f, 0.009847f, 0.008662f, -0.000207f, -0.014717f, -0.007111f, -0.005400f, -0.014739f, -0.023911f, -0.007915f, -0.011970f, -0.013723f, -0.001635f, 0.006664f, 0.007264f, 0.011181f, 0.013235f, 0.016564f, 0.010600f, 0.007869f, 0.002444f, -0.001305f, -0.004153f, -0.006533f, -0.008959f, -0.009510f, -0.006919f, -0.005116f, -0.003851f, -0.003395f, 0.000078f, 0.001817f, 0.002069f, 0.003050f, 0.003240f, 0.004899f, 0.007282f, 0.007326f, 0.002105f, 0.001454f, 0.001965f, -0.000946f, -0.003804f, -0.005002f, -0.006915f, -0.005937f, -0.004167f, -0.001224f, + -0.001654f, -0.000068f, 0.002868f, 0.003091f, 0.002934f, 0.004226f, 0.003384f, 0.001973f, 0.000138f, 0.000119f, 0.000218f, -0.000480f, -0.001872f, -0.001608f, -0.001903f, -0.001861f, -0.001907f, -0.001212f, -0.000729f, 0.000214f, 0.000822f, 0.001568f, 0.001737f, 0.001367f, -0.000057f, 0.000659f, 0.000953f, 0.000639f, -0.000247f, -0.001115f, -0.001479f, -0.001223f, -0.000761f, -0.000113f, 0.000414f, 0.000989f, 0.000689f, 0.000264f, 0.000307f, 0.000424f, -0.000309f, -0.000611f, -0.000516f, -0.000493f, -0.000389f, 0.000023f, -0.000021f, 0.000049f, 0.000188f, 0.000195f, 0.000090f, 0.000036f, 0.000019f, -0.000018f} + }, + { + {0.014236f, 0.001503f, -0.003867f, -0.004046f, 0.002468f, -0.006900f, -0.000116f, -0.013430f, 0.009612f, 0.012191f, 0.008515f, 0.011998f, -0.014421f, 0.001154f, 0.003287f, -0.005151f, -0.003966f, -0.003526f, -0.016888f, -0.002852f, 0.010026f, -0.017292f, -0.014051f, 0.008161f, 0.007399f, -0.011115f, -0.003882f, 0.007338f, 0.000934f, 0.008923f, 0.003821f, 0.009295f, -0.005853f, 0.001768f, 0.001283f, -0.002486f, 0.004327f, 0.003394f, 0.006311f, 0.002639f, -0.002797f, 0.000593f, 0.007052f, -0.001922f, -0.003217f, -0.001209f, -0.008543f, -0.018855f, 0.011196f, 0.005423f, -0.005901f, 0.008251f, -0.003316f, 0.000900f, -0.000295f, 0.003825f, -0.004978f, -0.001308f, 0.011127f, -0.010500f, -0.004209f, 0.003625f, 0.001812f, -0.001639f, -0.000522f, 0.004863f, 0.000553f, 0.004303f, -0.007478f, 0.007586f, 0.003907f, -0.009759f, 0.007755f, 0.000670f, 0.002806f, -0.001182f, -0.002901f, -0.011389f, -0.003523f, -0.000871f, 0.005839f, -0.001521f, 0.004774f, -0.002878f, 0.000563f, 0.001404f, 0.000567f, 0.003370f, -0.000610f, 0.000213f, -0.000419f, -0.002325f, -0.001055f, 0.000431f, -0.001241f, 0.000140f, + -0.000062f, -0.000547f, 0.003104f, 0.003104f, 0.001623f, 0.001281f, 0.001129f, 0.000380f, 0.000007f, 0.000394f, 0.000166f, -0.000498f, -0.001392f, -0.001586f, -0.000357f, -0.000165f, 0.022330f, -0.012739f, 0.003975f, -0.014087f, 0.001769f, 0.003376f, -0.014202f, -0.017977f, 0.004573f, -0.019510f, 0.004380f, -0.005040f, -0.001285f, -0.011941f, -0.001674f, -0.013417f, -0.006864f, 0.000119f, -0.014198f, 0.015223f, 0.005404f, -0.023593f, 0.002314f, -0.001239f, -0.004218f, -0.010064f, 0.005155f, 0.012337f, 0.000311f, -0.000842f, 0.011588f, -0.006707f, 0.000213f, -0.004248f, 0.007701f, -0.008883f, 0.002689f, 0.010830f, -0.009309f, 0.009478f, 0.003377f, 0.010246f, -0.000810f, 0.002369f, -0.001478f, -0.004245f, 0.013410f, -0.016510f, 0.003885f, -0.007278f, -0.003122f, -0.002108f, -0.005969f, -0.004408f, -0.013143f, -0.008249f, -0.002002f, 0.008648f, -0.000672f, 0.003277f, 0.012093f, -0.000235f, -0.010374f, -0.001297f, 0.000437f, 0.003309f, -0.005035f, 0.000058f, -0.010204f, 0.000258f, -0.004121f, 0.003432f, 0.005391f, 0.007886f, 0.002853f, -0.004392f, -0.005709f, 0.007739f, -0.002523f, -0.003492f, + 0.001493f, 0.004319f, 0.008928f, 0.001115f, 0.002600f, -0.000546f, 0.005256f, -0.000979f, -0.004069f, -0.002077f, -0.001988f, -0.000156f, 0.003580f, 0.000719f, -0.000182f, -0.001846f, 0.003470f, 0.000020f, -0.001230f, -0.000929f, -0.000825f, -0.000969f, 0.001675f, -0.000658f, -0.000121f, -0.001950f, -0.005281f, -0.018355f, -0.000142f, -0.011030f, -0.003431f, -0.001730f, -0.012883f, -0.001694f, -0.002946f, 0.006511f, 0.015180f, 0.015280f, 0.001876f, -0.006412f, 0.006144f, -0.014636f, -0.002039f, -0.005548f, 0.005197f, -0.021851f, 0.007809f, 0.003803f, -0.000739f, -0.006224f, -0.009396f, -0.004234f, -0.007742f, -0.006621f, 0.004162f, -0.001377f, -0.008353f, -0.002360f, 0.001758f, 0.014417f, -0.000500f, -0.014377f, 0.001185f, 0.006327f, -0.000130f, -0.004458f, 0.001250f, 0.005548f, -0.015678f, -0.001124f, -0.006792f, 0.011149f, 0.006772f, 0.001976f, -0.014495f, 0.001748f, 0.005641f, 0.009020f, 0.008381f, -0.009449f, -0.004455f, 0.000542f, -0.002950f, -0.002886f, 0.007806f, -0.004710f, 0.004790f, 0.001417f, -0.006078f, -0.001264f, -0.008364f, 0.010228f, 0.003826f, -0.009873f, -0.006864f, 0.001807f, + 0.005326f, -0.007805f, -0.009974f, -0.001579f, 0.000518f, -0.006524f, 0.001450f, -0.002603f, 0.003391f, -0.006209f, 0.009438f, 0.005177f, 0.007117f, 0.002162f, 0.000949f, 0.006524f, 0.008656f, 0.001144f, 0.002465f, -0.000689f, 0.001236f, 0.000286f, -0.000356f, 0.001106f, 0.000730f, 0.001145f, -0.001366f, 0.000194f, 0.000662f, -0.000337f, 0.000148f, 0.003029f, -0.001683f, 0.000807f, -0.002017f, -0.001458f, -0.001358f, 0.000450f, 0.001078f, 0.000891f, 0.000083f, -0.001711f, -0.001257f, 0.003115f, -0.031285f, 0.010217f, 0.009145f, 0.015265f, -0.003867f, 0.009615f, -0.026977f, -0.007320f, 0.008546f, 0.001081f, -0.013311f, -0.003410f, -0.004386f, -0.023618f, -0.009538f, 0.002479f, -0.001024f, -0.016817f, 0.010615f, 0.015073f, -0.015339f, 0.011766f, -0.020108f, -0.006784f, -0.001751f, 0.007019f, -0.000052f, -0.008102f, 0.005589f, 0.002835f, -0.001293f, 0.009088f, -0.004309f, -0.005730f, -0.001761f, -0.003238f, -0.005918f, 0.008942f, -0.006763f, 0.002588f, 0.006686f, -0.001274f, -0.005229f, -0.009827f, -0.001158f, -0.006989f, -0.002115f, -0.008144f, -0.002183f, 0.018370f, 0.000414f, 0.011201f, + -0.010170f, 0.009412f, -0.002880f, -0.014866f, -0.008782f, 0.008356f, -0.005399f, -0.007520f, 0.005491f, -0.008856f, 0.007474f, 0.002084f, -0.002719f, 0.009814f, 0.008816f, 0.003961f, -0.009625f, -0.010844f, -0.000729f, 0.014634f, 0.002919f, 0.002292f, -0.008223f, 0.002236f, 0.005252f, -0.011012f, -0.004039f, 0.003697f, 0.007773f, 0.003934f, 0.006583f, -0.000281f, 0.000084f, 0.002507f, 0.000330f, -0.001157f, 0.000416f, -0.000857f, -0.001383f, -0.004818f, -0.003908f, 0.001289f, -0.002345f, -0.001313f, 0.001671f, 0.000840f, 0.001227f, -0.000213f, 0.002026f, -0.001206f, 0.000113f, -0.001632f, 0.000034f, -0.002000f, 0.001064f, 0.000458f, 0.001452f, -0.002637f, -0.016471f, -0.015640f, -0.010235f, 0.002290f, -0.002384f, 0.006847f, -0.005476f, 0.000324f, 0.001461f, -0.004447f, -0.001505f, 0.004336f, -0.004418f, 0.018981f, -0.011944f, 0.008960f, -0.002915f, -0.000961f, -0.008395f, -0.002074f, -0.000909f, 0.013927f, -0.009005f, 0.001536f, 0.002926f, -0.013032f, -0.007876f, -0.008801f, -0.007467f, -0.015157f, -0.005050f, 0.005886f, 0.010776f, 0.006970f, -0.012077f, -0.017108f, -0.003551f, 0.000856f, + -0.008599f, 0.001950f, -0.005755f, -0.008769f, -0.021302f, -0.010521f, -0.014851f, 0.009040f, -0.003642f, 0.007408f, -0.008418f, -0.020708f, -0.010887f, 0.001369f, -0.004019f, -0.006573f, -0.002875f, -0.007953f, 0.011499f, 0.001339f, 0.006804f, 0.009085f, 0.002478f, -0.000029f, -0.007035f, 0.000658f, 0.009770f, -0.001307f, -0.006785f, -0.009426f, 0.015912f, -0.012687f, -0.017930f, -0.012506f, -0.007143f, -0.009762f, 0.011641f, 0.018515f, -0.014233f, -0.009649f, 0.002484f, 0.009161f, 0.013799f, 0.011062f, 0.008615f, 0.008600f, -0.002675f, -0.003258f, -0.003875f, -0.003919f, 0.003601f, -0.002264f, 0.001158f, -0.002838f, -0.004895f, -0.001739f, -0.003457f, 0.003075f, -0.002068f, -0.004221f, -0.002432f, -0.002284f, -0.004361f, -0.004726f, -0.002943f, -0.000919f, 0.001261f, 0.001287f, 0.002638f, 0.000678f, -0.007666f, 0.001313f, -0.000976f, -0.002804f, 0.001171f, -0.001004f, -0.002149f, -0.004803f, -0.004033f, 0.000528f, 0.000253f, -0.001357f, -0.001762f, 0.000390f, -0.002188f, 0.001742f, -0.001876f, -0.000876f, -0.000698f, -0.003295f, 0.004321f, -0.034400f, 0.010631f, -0.002419f, 0.006097f, 0.018895f, + 0.007411f, -0.004648f, 0.006386f, -0.014177f, 0.008777f, 0.010335f, -0.018759f, -0.003973f, -0.009508f, 0.010612f, 0.009183f, 0.014391f, 0.016624f, -0.021584f, -0.011168f, 0.003614f, 0.018551f, -0.006998f, 0.008605f, -0.020622f, -0.006285f, -0.007192f, -0.004429f, -0.012455f, 0.003057f, -0.020404f, 0.014137f, -0.003947f, -0.003686f, 0.010443f, -0.000675f, 0.002449f, 0.010956f, 0.000386f, 0.008954f, 0.006132f, -0.002619f, -0.003458f, -0.001288f, -0.014275f, -0.010612f, -0.013030f, -0.000907f, 0.027419f, 0.006262f, 0.005396f, -0.000726f, -0.003696f, -0.000317f, 0.016443f, -0.003583f, 0.005235f, -0.031585f, 0.029108f, -0.007122f, -0.005038f, 0.001560f, 0.017888f, 0.006350f, -0.002824f, -0.010911f, 0.031198f, -0.006104f, -0.000222f, 0.009825f, -0.007705f, -0.000176f, 0.004617f, -0.007125f, 0.006303f, 0.005954f, 0.025816f, -0.012900f, -0.015880f, -0.003096f, 0.007860f, -0.009798f, 0.002342f, 0.006478f, 0.002317f, -0.005796f, 0.002742f, 0.006637f, -0.004082f, 0.000443f, -0.007124f, -0.002475f, -0.001939f, -0.006166f, 0.008095f, -0.005878f, -0.004603f, 0.003412f, 0.000009f, -0.006946f, -0.000368f, + 0.001441f, 0.003155f, 0.000135f, 0.003675f, -0.002652f, -0.001832f, -0.002203f, 0.002566f, -0.002710f, 0.004359f, 0.000231f, -0.001442f, 0.001649f, 0.004552f, -0.007773f, -0.000305f, -0.002166f, 0.014688f, 0.008148f, 0.016369f, -0.006838f, -0.004149f, 0.009346f, -0.015497f, 0.013561f, 0.015504f, -0.008075f, -0.001528f, -0.024889f, 0.000967f, 0.008296f, 0.006673f, -0.005429f, -0.017000f, -0.034275f, 0.000345f, -0.005992f, -0.016376f, 0.003573f, 0.010668f, -0.014994f, -0.006509f, -0.016335f, 0.007960f, 0.000728f, -0.002607f, -0.005563f, -0.007201f, 0.017199f, 0.020095f, 0.007697f, 0.009468f, -0.004720f, -0.010397f, 0.028109f, 0.006835f, -0.005024f, -0.016829f, 0.012056f, 0.000306f, 0.016081f, -0.001641f, 0.019918f, 0.009859f, 0.013880f, 0.011703f, 0.005873f, 0.015457f, 0.019348f, -0.000764f, 0.003418f, -0.006445f, -0.000397f, 0.010463f, 0.004270f, 0.005597f, -0.017477f, -0.006549f, -0.003839f, -0.015253f, -0.014583f, -0.009683f, 0.007870f, 0.016410f, 0.021529f, 0.028218f, 0.006138f, 0.002283f, 0.022712f, -0.009330f, -0.017448f, -0.006214f, -0.008926f, 0.014621f, 0.011930f, 0.004441f, + -0.016531f, -0.004655f, 0.002739f, 0.002173f, -0.003357f, -0.007736f, 0.002134f, 0.001724f, 0.009287f, -0.002468f, -0.005400f, 0.000897f, 0.001672f, 0.002120f, 0.000014f, -0.000061f, 0.001716f, 0.004137f, -0.003221f, -0.003179f, 0.000130f, -0.000569f, -0.004453f, -0.001182f, -0.005636f, 0.005800f, 0.001779f, -0.004316f, -0.000323f, 0.003872f, -0.002277f, -0.000554f, -0.003405f, 0.001608f, 0.001995f, -0.001630f, 0.005052f, 0.003757f, -0.000717f, 0.026125f, -0.025111f, -0.011897f, -0.003527f, 0.009906f, -0.023508f, 0.014584f, -0.023165f, 0.011146f, -0.000254f, 0.011839f, 0.018818f, -0.007940f, 0.017169f, 0.018824f, 0.017857f, -0.010618f, 0.015032f, -0.016546f, -0.013264f, -0.002183f, -0.010297f, -0.000310f, -0.008884f, 0.014767f, -0.011240f, 0.003136f, -0.011101f, -0.019280f, -0.009123f, -0.004172f, 0.022923f, -0.019532f, 0.018011f, 0.007882f, -0.027069f, 0.030674f, 0.007381f, 0.003304f, 0.021428f, 0.003712f, 0.000762f, -0.012384f, -0.000274f, -0.006970f, 0.024458f, 0.010296f, 0.017078f, -0.006858f, -0.004298f, 0.011788f, 0.020331f, -0.021598f, 0.021075f, 0.003777f, -0.003683f, -0.004116f, + -0.020459f, 0.009647f, -0.009775f, 0.004015f, 0.000673f, -0.018446f, 0.005967f, 0.015433f, -0.014339f, 0.009756f, 0.006221f, 0.021647f, 0.002078f, -0.001559f, 0.012960f, 0.018925f, 0.001309f, -0.010994f, 0.012527f, -0.014803f, -0.007910f, 0.003846f, -0.006205f, 0.003897f, -0.005025f, 0.001817f, 0.007972f, 0.005936f, -0.006258f, 0.005181f, -0.003345f, 0.004167f, -0.004473f, 0.013178f, 0.001078f, 0.012583f, -0.001777f, 0.003113f, -0.002933f, -0.001148f, -0.004299f, 0.007964f, 0.003100f, -0.006648f, 0.006637f, 0.007988f, -0.001159f, -0.001142f, 0.004630f, -0.000383f, -0.000690f, 0.006655f, -0.000481f, 0.001615f, 0.004038f, 0.002801f, -0.001318f, 0.005087f, -0.004507f, -0.000792f, 0.000701f, 0.001372f, 0.000851f, -0.000294f, -0.000891f, -0.005086f, 0.002129f, 0.007567f, 0.001872f, -0.021276f, -0.015233f, 0.023088f, -0.029642f, 0.007441f, -0.015796f, 0.017577f, -0.018848f, 0.028727f, 0.009929f, 0.002769f, -0.024977f, 0.012701f, 0.021075f, 0.005572f, -0.012861f, -0.008341f, -0.007381f, 0.019598f, 0.010619f, -0.027357f, 0.003826f, -0.019352f, -0.001113f, 0.002219f, -0.016588f, 0.021692f, + 0.021718f, -0.009874f, 0.004722f, 0.014778f, -0.018086f, -0.002731f, -0.005607f, -0.014918f, 0.031701f, -0.011525f, -0.007162f, -0.015974f, -0.026775f, -0.004216f, 0.000432f, -0.009206f, 0.003905f, -0.022082f, 0.001883f, 0.001592f, -0.004500f, 0.017510f, -0.003713f, -0.013559f, 0.007006f, 0.000028f, -0.010249f, 0.008770f, 0.037573f, -0.007487f, 0.008886f, 0.002101f, -0.025651f, -0.004107f, 0.022737f, 0.010342f, 0.022570f, -0.002262f, 0.013013f, -0.017982f, 0.008016f, 0.008043f, 0.002581f, -0.015267f, 0.014095f, 0.005089f, -0.039880f, 0.003183f, -0.007278f, 0.026697f, -0.010309f, 0.020753f, 0.019046f, 0.015478f, -0.002000f, 0.006001f, 0.000808f, 0.001652f, -0.002690f, -0.004279f, 0.010298f, 0.004307f, -0.000242f, -0.006783f, -0.009742f, -0.002126f, 0.004028f, 0.006877f, 0.004734f, 0.008793f, 0.000199f, -0.002210f, -0.003682f, -0.002652f, 0.003026f, 0.005326f, -0.000587f, 0.004238f, 0.002571f, 0.000911f, 0.003638f, -0.000559f, 0.003807f, -0.006337f, -0.008161f, -0.010420f, -0.000618f, 0.004998f, 0.002073f, -0.004791f, -0.001925f, -0.003294f, -0.003974f, 0.006671f, 0.001858f, 0.003087f, + 0.002612f, -0.046761f, 0.052299f, 0.005930f, 0.020480f, -0.038409f, 0.020553f, 0.026832f, -0.031503f, 0.011634f, 0.015193f, 0.011699f, -0.020453f, 0.002384f, 0.003290f, -0.007076f, 0.011511f, 0.024010f, -0.019760f, -0.016478f, -0.006205f, 0.020315f, 0.017522f, 0.024904f, -0.001488f, 0.010369f, -0.019027f, -0.005172f, -0.005147f, 0.003856f, 0.011554f, 0.031908f, 0.018877f, 0.011437f, 0.005840f, -0.001324f, 0.015089f, -0.005944f, -0.027880f, -0.005615f, 0.007837f, 0.008562f, -0.016433f, -0.012487f, -0.020285f, 0.003612f, -0.001869f, 0.006774f, -0.013396f, 0.023235f, 0.022678f, -0.020129f, 0.046990f, 0.001921f, -0.004626f, -0.000515f, -0.010124f, -0.002372f, -0.003310f, -0.019358f, 0.000034f, -0.000183f, 0.012265f, -0.040019f, 0.009461f, -0.014338f, 0.028611f, 0.034660f, 0.014820f, 0.014264f, 0.006234f, 0.002096f, 0.031218f, -0.006141f, -0.023584f, 0.019707f, -0.010780f, 0.005117f, 0.015276f, 0.028158f, 0.003701f, 0.002575f, -0.023012f, -0.001212f, 0.006359f, 0.017796f, -0.008119f, 0.009568f, 0.004430f, -0.007114f, 0.018008f, 0.002873f, 0.007913f, -0.005544f, -0.001978f, -0.005494f, + 0.000603f, 0.001897f, -0.003080f, -0.000365f, 0.005221f, -0.003247f, 0.005295f, 0.003561f, -0.004188f, -0.000613f, 0.002305f, -0.001844f, 0.000155f, -0.003942f, -0.012632f, -0.003737f, -0.002168f, 0.012717f, 0.015684f, 0.001385f, 0.002063f, -0.004769f, -0.005630f, 0.001169f, 0.001457f, -0.006852f, -0.005472f, -0.003640f, -0.003308f, 0.004125f, -0.007680f, -0.000518f, -0.005718f, 0.019407f, 0.003945f, -0.013022f, 0.012678f, 0.018901f, 0.016438f, 0.010498f, 0.019553f, -0.023158f, -0.014698f, 0.002910f, -0.020958f, -0.004994f, -0.003360f, 0.004972f, -0.005256f, -0.013472f, -0.017072f, -0.010107f, 0.008697f, 0.014836f, -0.025324f, 0.005669f, -0.002504f, -0.000413f, -0.030558f, -0.027326f, -0.004652f, -0.021133f, 0.010256f, -0.024135f, 0.001720f, 0.013335f, 0.018930f, -0.016367f, 0.022463f, 0.005974f, -0.002070f, -0.004644f, 0.033238f, -0.008944f, -0.001510f, -0.026315f, -0.014819f, 0.021969f, -0.001519f, 0.008497f, -0.025468f, -0.027736f, -0.007536f, -0.015523f, -0.002632f, 0.001519f, -0.010220f, -0.012960f, 0.008005f, -0.012007f, 0.001201f, -0.017834f, -0.009690f, -0.000159f, -0.029777f, 0.003059f, + 0.019786f, 0.004060f, 0.010445f, 0.021737f, 0.036830f, -0.035119f, 0.006566f, -0.021547f, -0.021152f, -0.011569f, -0.016050f, -0.010054f, -0.009432f, 0.036259f, 0.019873f, 0.020221f, 0.004231f, 0.006178f, -0.025881f, 0.001609f, -0.009054f, 0.004500f, -0.011187f, 0.016249f, 0.021084f, 0.002405f, -0.009417f, -0.006100f, -0.017839f, 0.001987f, 0.011109f, 0.006468f, -0.004255f, 0.011737f, 0.005563f, 0.012407f, -0.002507f, -0.001837f, 0.002051f, 0.008208f, -0.004922f, 0.003723f, -0.007277f, -0.009826f, 0.007448f, 0.003043f, 0.001586f, 0.002033f, -0.013849f, -0.007882f, -0.000012f, 0.011090f, -0.008950f, 0.005753f, -0.012016f, -0.003634f, -0.001880f, 0.004682f, 0.002947f, -0.003186f, -0.002902f, -0.015631f, 0.006862f, 0.037581f, 0.039810f, 0.043672f, -0.031483f, 0.002905f, 0.023821f, 0.018863f, -0.018151f, -0.035271f, -0.003596f, -0.004787f, -0.027602f, -0.015744f, 0.054064f, 0.004758f, 0.004239f, 0.020562f, -0.001731f, 0.009103f, -0.006784f, -0.020674f, 0.014570f, 0.012226f, -0.028124f, -0.040283f, -0.031032f, -0.024603f, -0.023340f, 0.002835f, 0.007572f, 0.012677f, -0.015313f, 0.016133f, + 0.004356f, -0.007288f, -0.016235f, -0.000043f, 0.001562f, -0.025496f, -0.019742f, 0.003505f, -0.004071f, 0.004066f, -0.015131f, 0.013256f, 0.004605f, -0.014335f, -0.031195f, -0.012083f, -0.010102f, -0.041843f, -0.012699f, 0.004452f, 0.021580f, -0.001539f, 0.025438f, -0.003893f, -0.001425f, -0.035602f, -0.007005f, 0.014656f, 0.007436f, -0.059903f, 0.017980f, 0.005698f, -0.016154f, -0.009775f, -0.016875f, -0.019361f, -0.000102f, 0.001370f, -0.018454f, -0.005720f, 0.012924f, 0.018055f, 0.028436f, -0.020755f, 0.001728f, 0.016093f, 0.000015f, -0.045731f, -0.036076f, 0.000008f, -0.009007f, 0.011990f, 0.000400f, -0.010931f, -0.015784f, 0.008051f, -0.004007f, 0.007349f, 0.019635f, -0.000097f, -0.008564f, -0.015319f, -0.028080f, -0.009441f, 0.002547f, -0.004375f, -0.004072f, 0.002292f, 0.002695f, 0.013226f, -0.005763f, 0.001735f, 0.005646f, 0.002933f, -0.009596f, 0.001589f, -0.001806f, -0.024730f, 0.003419f, -0.008915f, -0.010473f, 0.004449f, 0.003965f, -0.007239f, -0.001501f, 0.009412f, 0.003534f, 0.002766f, -0.008364f, -0.010160f, -0.002769f, -0.000442f, 0.001493f, 0.006787f, -0.011015f, -0.000969f, + -0.006904f, -0.004308f, -0.009080f, 0.015366f, -0.011980f, 0.042575f, -0.035378f, -0.021586f, -0.006723f, -0.067444f, -0.034920f, 0.000351f, -0.042739f, 0.034183f, -0.014635f, -0.013524f, 0.004466f, 0.077578f, 0.037810f, 0.002890f, 0.016450f, -0.003084f, -0.020051f, -0.001568f, -0.031362f, -0.022677f, 0.011662f, 0.011660f, 0.014479f, -0.021772f, 0.029150f, 0.017897f, 0.032900f, -0.032304f, 0.005937f, 0.048214f, 0.005145f, 0.002395f, 0.010113f, -0.045381f, 0.012386f, -0.011157f, 0.008234f, -0.018033f, -0.042544f, -0.002245f, 0.018191f, 0.021698f, 0.006235f, -0.006369f, 0.003867f, -0.001604f, 0.015065f, -0.032292f, -0.046792f, 0.008864f, -0.016603f, 0.028726f, -0.010601f, -0.011470f, 0.037824f, 0.008677f, 0.016708f, 0.003285f, -0.030557f, -0.012535f, -0.002964f, 0.017219f, 0.049680f, 0.037925f, -0.010428f, -0.042928f, -0.000086f, -0.004691f, 0.016822f, -0.026374f, -0.032567f, -0.018697f, 0.016644f, -0.033584f, -0.004445f, -0.028147f, 0.001026f, 0.023116f, 0.000158f, -0.042327f, -0.008492f, 0.005866f, 0.012072f, 0.005517f, -0.025645f, -0.017683f, -0.027498f, 0.004597f, -0.005052f, -0.012152f, + -0.008559f, -0.012153f, 0.003334f, -0.004973f, -0.010845f, -0.003180f, 0.009272f, 0.000109f, 0.000579f, -0.014293f, 0.000628f, -0.001218f, -0.008207f, 0.000889f, 0.018745f, 0.006053f, 0.004238f, -0.018168f, 0.008125f, -0.001923f, -0.001077f, 0.002950f, 0.000610f, -0.000289f, -0.002701f, -0.010817f, -0.011059f, -0.009908f, 0.013399f, 0.010788f, -0.003902f, -0.027112f, -0.008939f, -0.010060f, -0.001098f, -0.014438f, -0.077745f, 0.029473f, 0.024102f, -0.011736f, -0.051531f, -0.011656f, -0.020109f, -0.021096f, 0.022130f, 0.027500f, -0.003277f, 0.007264f, -0.058518f, 0.020118f, -0.073139f, -0.018733f, -0.006746f, 0.014156f, 0.036149f, 0.057784f, 0.023676f, -0.033948f, 0.007376f, 0.040289f, 0.004953f, 0.012050f, 0.021574f, -0.034483f, -0.013653f, -0.005685f, 0.009908f, -0.024370f, -0.013426f, -0.007582f, -0.018569f, -0.014075f, 0.024199f, 0.023955f, 0.005734f, 0.001754f, 0.041287f, -0.008117f, 0.019013f, -0.047489f, 0.030821f, 0.008715f, -0.043339f, 0.004137f, 0.013208f, -0.040494f, -0.005719f, -0.039604f, 0.012644f, 0.016364f, 0.017154f, -0.026728f, -0.002819f, 0.026257f, -0.022608f, 0.000105f, + -0.004112f, 0.043489f, -0.026429f, 0.031993f, 0.015738f, -0.040895f, 0.035162f, -0.030156f, 0.022413f, 0.030129f, -0.031209f, 0.017101f, -0.026725f, -0.032662f, -0.049597f, -0.041026f, -0.045417f, -0.010854f, 0.007355f, -0.013636f, 0.038520f, 0.040527f, -0.017855f, 0.035704f, -0.006167f, -0.007693f, 0.044908f, -0.010275f, -0.031240f, 0.021130f, -0.005288f, -0.023981f, -0.019072f, 0.017906f, 0.002475f, 0.009231f, 0.013530f, 0.002418f, 0.010988f, 0.018031f, -0.005603f, 0.020235f, 0.013206f, 0.010051f, 0.010772f, 0.001614f, 0.006300f, 0.017198f, 0.013107f, 0.017442f, 0.001797f, 0.014476f, -0.003552f, 0.000948f, 0.011836f, -0.006340f, -0.023660f, 0.010741f, 0.002765f, -0.000018f, -0.000418f, 0.010265f, -0.021092f, 0.010331f, 0.013280f, 0.011505f, -0.014322f, 0.011779f, -0.062026f, -0.029738f, -0.030923f, 0.052788f, 0.000827f, 0.019244f, -0.009512f, 0.075190f, 0.011193f, -0.051519f, 0.002913f, 0.055044f, -0.021482f, 0.011663f, -0.010029f, 0.004071f, -0.033438f, -0.044780f, 0.069009f, 0.048931f, -0.019942f, 0.037381f, 0.014171f, 0.048858f, 0.055592f, -0.017251f, -0.014151f, 0.049409f, + 0.035943f, 0.003320f, -0.016702f, -0.025693f, -0.027008f, 0.022470f, 0.043396f, 0.020042f, -0.008929f, 0.028983f, -0.016504f, 0.027471f, -0.013493f, 0.040405f, 0.072047f, 0.054766f, -0.060259f, 0.026380f, -0.011001f, -0.024953f, -0.001672f, 0.019927f, 0.019099f, 0.132422f, -0.014346f, -0.002161f, -0.022582f, -0.024412f, 0.025040f, 0.047347f, -0.012692f, 0.035807f, 0.030326f, -0.004965f, 0.000198f, -0.026698f, 0.025493f, 0.021419f, 0.069941f, 0.071284f, 0.086592f, 0.035578f, -0.023272f, -0.018893f, -0.041152f, 0.038487f, -0.060426f, 0.042253f, -0.056780f, 0.032037f, -0.020641f, -0.034375f, 0.023335f, -0.091207f, -0.072478f, 0.012240f, 0.013092f, -0.026669f, -0.026052f, 0.041378f, 0.020054f, -0.039589f, 0.004794f, -0.009634f, -0.022218f, 0.006155f, 0.009893f, 0.002520f, 0.010034f, 0.012155f, 0.021791f, -0.011347f, 0.003448f, -0.013554f, -0.023606f, -0.014607f, 0.004411f, 0.001172f, 0.030236f, 0.005878f, -0.008571f, -0.026111f, 0.003000f, -0.010829f, -0.009168f, -0.012052f, 0.007713f, 0.018054f, 0.005642f, 0.015567f, 0.012668f, 0.020837f, -0.010139f, 0.015691f, 0.001128f, 0.004023f, + -0.002541f, 0.000636f, -0.013777f, 0.014417f, 0.035188f, 0.018691f, -0.004916f, -0.004809f, 0.030130f, 0.025445f, -0.021007f, 0.008368f, 0.015817f, -0.009952f, 0.043060f, 0.010637f, -0.096664f, 0.023650f, 0.014128f, -0.071690f, 0.005598f, -0.011338f, 0.004337f, 0.027839f, -0.002212f, -0.066207f, -0.010628f, -0.020345f, -0.002433f, 0.048787f, 0.058586f, -0.031482f, -0.006851f, -0.026262f, 0.015463f, -0.050526f, -0.098700f, -0.034804f, -0.028838f, 0.006295f, 0.003038f, 0.046537f, -0.067011f, 0.033613f, -0.014500f, -0.006565f, 0.029520f, 0.014185f, 0.049009f, 0.011818f, 0.019753f, 0.051862f, -0.056727f, 0.073528f, 0.059078f, 0.030979f, 0.055509f, -0.020078f, 0.021988f, -0.049733f, -0.008610f, -0.024599f, 0.046260f, -0.038817f, 0.011063f, -0.084371f, -0.104206f, 0.071413f, -0.001771f, 0.046365f, -0.030601f, 0.030962f, -0.019465f, 0.007349f, -0.010518f, -0.068455f, -0.020380f, -0.045512f, -0.020461f, 0.025841f, 0.104194f, 0.037407f, -0.089069f, -0.019763f, 0.025511f, -0.020270f, -0.012045f, -0.059146f, -0.029434f, 0.046940f, -0.015790f, 0.011883f, 0.010627f, -0.036633f, 0.025141f, -0.004787f, + 0.003362f, -0.075923f, -0.020755f, -0.000994f, -0.033448f, -0.019231f, 0.004456f, -0.051213f, 0.006962f, 0.012192f, -0.040372f, -0.032414f, -0.057637f, -0.043585f, -0.002546f, -0.023905f, -0.010152f, 0.002012f, -0.015389f, -0.016215f, -0.005382f, -0.025651f, -0.010966f, 0.003839f, 0.019368f, -0.022601f, -0.006667f, -0.039044f, 0.015537f, 0.010124f, 0.024818f, -0.015947f, 0.025750f, -0.050705f, -0.001433f, 0.000353f, -0.001995f, 0.008142f, -0.006708f, 0.005724f, -0.022110f, -0.024588f, 0.001804f, 0.010217f, 0.000911f, -0.019341f, 0.006980f, 0.005985f, -0.060255f, 0.031748f, 0.031653f, 0.056337f, -0.027565f, 0.020671f, -0.031686f, -0.036671f, 0.016264f, 0.074854f, 0.121075f, -0.007481f, -0.008168f, 0.002636f, -0.002837f, -0.053904f, 0.084642f, 0.040852f, 0.044934f, 0.034906f, -0.024747f, 0.029593f, -0.048009f, -0.068651f, -0.012108f, 0.051714f, 0.033274f, -0.024426f, -0.016153f, -0.003203f, 0.041420f, 0.001991f, 0.030103f, 0.030018f, 0.049064f, 0.016720f, -0.031387f, -0.029220f, 0.027889f, -0.032912f, -0.025121f, 0.014932f, 0.053856f, 0.050324f, -0.057518f, -0.043847f, 0.029059f, 0.035514f, + 0.106184f, -0.024368f, -0.058491f, -0.059768f, 0.050559f, -0.038088f, 0.047659f, 0.054858f, 0.109206f, 0.233242f, -0.052561f, -0.029201f, -0.087762f, -0.138391f, -0.044833f, -0.069430f, 0.007455f, 0.097087f, -0.014771f, 0.051687f, 0.072341f, 0.048376f, -0.027573f, -0.085428f, -0.141501f, 0.079250f, -0.006189f, 0.090080f, -0.046636f, -0.121495f, 0.041946f, -0.071712f, -0.097126f, -0.048789f, -0.031417f, 0.031450f, 0.029522f, 0.055696f, -0.004859f, -0.025949f, -0.005043f, -0.001434f, -0.050702f, -0.047504f, 0.023770f, -0.016252f, 0.048434f, 0.045803f, -0.022351f, 0.045637f, -0.036140f, 0.001930f, 0.043148f, 0.005715f, -0.069585f, 0.019318f, -0.035548f, -0.004976f, -0.012128f, -0.008130f, -0.051636f, -0.040310f, 0.006983f, 0.061172f, 0.063238f, -0.059064f, -0.008258f, 0.074521f, 0.069011f, 0.001369f, 0.013611f, -0.065037f, -0.036454f, 0.011208f, 0.037520f, -0.055944f, 0.013375f, 0.046174f, 0.021114f, 0.018448f, 0.003699f, 0.029786f, 0.042434f, 0.022633f, -0.006452f, 0.007840f, -0.046107f, 0.009632f, -0.041944f, -0.117272f, 0.030653f, -0.048494f, 0.049951f, 0.008077f, 0.028300f, 0.024859f, + -0.107160f, -0.075723f, -0.036996f, -0.022968f, -0.024185f, -0.043335f, -0.012794f, -0.072556f, -0.045792f, 0.036130f, -0.046827f, 0.091778f, -0.066705f, 0.007778f, 0.019722f, -0.006385f, 0.008984f, -0.003100f, 0.022725f, -0.020297f, -0.021737f, -0.003145f, 0.017292f, -0.002080f, 0.040024f, -0.036041f, 0.009329f, 0.057772f, 0.019294f, 0.009313f, 0.030061f, 0.004357f, -0.022173f, -0.014039f, 0.047308f, 0.011120f, -0.072046f, -0.031676f, -0.058249f, -0.026273f, 0.079697f, 0.074035f, -0.074637f, -0.007657f, -0.085002f, -0.020038f, -0.006049f, 0.020567f, 0.044292f, -0.069833f, 0.048185f, -0.059353f, -0.009018f, -0.039993f, 0.091672f, -0.017617f, 0.065009f, 0.060391f, 0.134073f, -0.060552f, 0.055996f, 0.009585f, 0.053274f, 0.018841f, 0.040939f, -0.065948f, -0.059951f, 0.089426f, 0.005565f, -0.002711f, -0.061626f, 0.072311f, -0.023007f, 0.037397f, -0.064902f, 0.139710f, -0.073242f, 0.077987f, -0.092015f, 0.037467f, -0.069021f, 0.039448f, -0.063472f, 0.048629f, -0.039701f, 0.028798f, -0.021555f, 0.016111f, -0.033549f, -0.021035f, -0.015152f, -0.003806f, 0.013751f, 0.002696f, 0.011376f, 0.001347f, + 0.011221f, -0.004753f, -0.016381f, -0.027733f, 0.014276f, 0.014550f, 0.005549f, 0.013361f, -0.009058f, 0.005502f, -0.006848f, 0.005750f, 0.049363f, -0.011606f, -0.032773f, 0.005286f, -0.017880f, -0.036212f, 0.013223f, -0.019603f, 0.016223f, -0.016387f, 0.013775f, -0.031624f, 0.014630f, -0.041009f, 0.027562f, 0.060085f, 0.011075f, -0.104404f, -0.044763f, -0.063905f, 0.005771f, -0.013363f, -0.141671f, -0.063237f, -0.035574f, -0.074552f, -0.045579f, -0.142841f, -0.120172f, -0.020296f, 0.054185f, -0.077795f, -0.045569f, -0.009758f, -0.065850f, -0.013739f, -0.003454f, -0.063797f, -0.015523f, 0.015250f, 0.005233f, -0.085270f, -0.047553f, -0.047866f, -0.025599f, -0.029033f, -0.006886f, -0.058652f, 0.052420f, 0.034652f, 0.073978f, 0.106433f, 0.093046f, 0.025041f, 0.098273f, 0.040363f, 0.019216f, -0.040963f, 0.035780f, 0.036846f, 0.029813f, -0.009354f, -0.030856f, -0.013473f, 0.026217f, 0.044610f, 0.222135f, 0.031656f, 0.047484f, 0.034170f, 0.092144f, 0.036668f, 0.081219f, 0.145698f, -0.067188f, -0.139003f, 0.019769f, 0.091881f, 0.163045f, 0.073155f, -0.136582f, 0.020679f, -0.032326f, 0.204764f, + 0.151614f, 0.183416f, 0.168811f, -0.142653f, -0.092990f, 0.120593f, 0.144889f, -0.039575f, -0.080355f, -0.097983f, 0.227151f, 0.151635f, -0.007161f, -0.191311f, 0.048859f, -0.005338f, -0.040452f, 0.055371f, 0.016922f, -0.014768f, -0.038895f, 0.001376f, 0.033086f, 0.085665f, 0.061993f, -0.047557f, -0.017379f, -0.011093f, -0.007980f, 0.049452f, 0.037010f, 0.038924f, 0.003275f, 0.022014f, 0.079745f, 0.054569f, 0.013657f, 0.033221f, -0.018193f, 0.040880f, 0.052660f, 0.067769f, 0.086245f, 0.067547f, 0.052914f, 0.003311f, -0.008110f, -0.014102f, -0.002409f, -0.034029f, -0.017023f, -0.014614f, -0.042404f, -0.056379f, -0.064117f, -0.113544f, -0.062538f, -0.039883f, -0.066437f, -0.126429f, -0.086369f, -0.072783f, -0.084966f, -0.102360f, -0.107713f, -0.034187f, -0.038308f, -0.057064f, -0.029434f, -0.033501f, -0.020039f, -0.030810f, -0.029168f, -0.029120f, -0.020561f, -0.027779f, -0.016399f, -0.022176f, -0.015284f, -0.017647f, -0.009113f, -0.020093f, -0.001233f, -0.019845f, -0.026832f, -0.035479f, -0.104280f, 0.166800f, 0.134683f, -0.116888f, 0.025938f, -0.002881f, 0.018643f, -0.004737f, -0.011669f, 0.042788f, + -0.043318f, 0.041777f, -0.017224f, -0.000071f, 0.016504f, 0.013301f, 0.014894f, -0.000371f, -0.024570f, -0.015914f, 0.026779f, -0.022346f, -0.002906f, 0.025622f, -0.014210f, -0.015064f, -0.020644f, -0.037966f, -0.037906f, 0.027386f, -0.013868f, 0.010013f, -0.023859f, 0.004458f, -0.050540f, -0.009422f, 0.013772f, 0.032185f, -0.020712f, 0.006775f, 0.022221f, 0.035264f, -0.008584f, 0.029133f, -0.023983f, 0.093535f, -0.034917f, 0.032027f, 0.004269f, 0.017983f, -0.017638f, 0.024532f, -0.010027f, 0.066525f, -0.010966f, 0.020345f, -0.046752f, 0.060990f, -0.032314f, -0.002893f, -0.009106f, 0.008533f, -0.018340f, 0.036446f, -0.042537f, 0.034212f, -0.038981f, 0.050163f, -0.052919f, 0.063716f, -0.042646f, -0.023495f, -0.026728f, -0.013938f, 0.002579f, -0.042728f, 0.027539f, -0.025558f, 0.024168f, 0.001391f, 0.033400f, 0.011977f, 0.023124f, 0.040007f, 0.017607f, -0.014731f, 0.011031f, 0.009273f, -0.005677f, 0.006614f, -0.012581f, 0.013970f, -0.006994f, -0.000667f, -0.012276f, 0.027823f, -0.028067f, 0.001869f, -0.002357f, 0.022370f, -0.004186f, 0.003939f, -0.005157f, 0.008458f, -0.013104f, 0.009413f, + -0.011143f, -0.006922f, 0.022186f, 0.018770f, -0.005599f, -0.020781f, 0.013169f, 0.016431f, 0.019154f, -0.018200f, 0.015029f, -0.012950f, 0.011433f, 0.001538f, 0.004722f, -0.019590f, 0.020260f, -0.008490f, -0.022543f, 0.017979f, 0.018919f, -0.016829f, -0.002463f, -0.004694f, 0.005778f, -0.016469f, 0.021913f, -0.021025f, 0.008175f, -0.022921f, 0.020191f, -0.017056f, 0.017506f, -0.014104f, 0.021348f, -0.024063f, 0.025571f, -0.023814f, 0.013043f, -0.020188f, 0.019958f, -0.022879f, 0.018409f, -0.015172f, 0.022780f, -0.025337f, 0.025401f, -0.022470f, 0.021280f, -0.017037f, 0.019747f, -0.018370f, 0.016860f, -0.014758f, 0.013711f, -0.015086f, 0.013219f, -0.014002f, 0.014877f, -0.015346f, 0.014650f, -0.012814f, 0.012972f, -0.013237f, 0.012441f, -0.012039f, 0.013933f, -0.011887f, 0.013591f, -0.009951f, 0.011791f, -0.009714f, 0.009920f, -0.010212f, 0.012152f, -0.008994f, 0.009306f, -0.007310f, 0.010527f, -0.007825f, 0.007667f, -0.006966f, 0.005184f, -0.005325f, 0.006645f, -0.004526f, 0.007103f, -0.005455f, 0.007237f, -0.005486f, -0.040811f, -0.084480f, -0.092958f, 0.079274f, 0.020137f, -0.024379f, + -0.126018f, -0.050595f, 0.070425f, 0.014444f, 0.050904f, 0.056727f, -0.020301f, -0.035472f, 0.001817f, 0.013521f, 0.010548f, 0.009487f, -0.022182f, -0.016303f, -0.012262f, 0.000154f, 0.034262f, 0.018533f, -0.001529f, 0.007761f, -0.009714f, -0.016427f, -0.010423f, -0.008566f, 0.000732f, 0.010156f, -0.007648f, 0.013081f, 0.013775f, -0.046265f, -0.020476f, -0.020438f, 0.024845f, 0.017274f, -0.001455f, -0.021510f, -0.029065f, 0.025463f, 0.005708f, 0.017090f, 0.023804f, -0.042918f, -0.028506f, 0.007885f, 0.034700f, 0.017515f, -0.048800f, -0.030094f, -0.039630f, -0.018916f, 0.010315f, 0.009001f, -0.016273f, 0.017994f, -0.007299f, -0.017123f, 0.007745f, 0.016392f, -0.012158f, 0.003905f, -0.000406f, -0.015312f, -0.001334f, -0.005414f, -0.034644f, -0.035057f, -0.002098f, -0.037402f, -0.027982f, 0.001165f, 0.011396f, -0.008174f, 0.041304f, 0.030437f, 0.017405f, 0.001273f, -0.003903f, -0.018391f, 0.022900f, 0.011159f, 0.013380f, 0.012839f, -0.011509f, -0.004905f, -0.000827f, 0.006512f, -0.021572f, -0.026363f, -0.003582f, 0.011533f, 0.001756f, 0.014605f, 0.010263f, -0.013783f, 0.004560f, 0.008004f, + 0.005728f, -0.004482f, 0.014705f, -0.018337f, -0.010851f, 0.033545f, 0.019357f, -0.020768f, -0.015505f, -0.010615f, -0.018415f, 0.020326f, -0.000652f, 0.002836f, 0.009408f, 0.005971f, -0.000184f, -0.000880f, -0.013721f, 0.008659f, 0.005277f, 0.011930f, -0.006755f, -0.002118f, 0.007854f, -0.000870f, -0.009062f, 0.032789f, -0.081751f, -0.222768f, -0.084670f, 0.050717f, 0.107298f, 0.252996f, 0.148722f, 0.040433f, 0.052980f, -0.043855f, -0.081866f, -0.179221f, -0.120802f, -0.092665f, -0.030284f, 0.036714f, 0.098664f, 0.076623f, 0.095787f, 0.092477f, 0.062758f, -0.021179f, -0.072966f, -0.063257f, -0.064908f, -0.052257f, -0.075247f, 0.023089f, -0.047550f, 0.003457f, 0.035074f, 0.064672f, 0.036591f, 0.060531f, 0.079959f, 0.001452f, 0.023896f, 0.001724f, -0.001173f, -0.044699f, -0.005850f, -0.039782f, -0.077486f, -0.122484f, -0.068120f, -0.037408f, 0.009947f, 0.009258f, 0.072865f, 0.100967f, 0.097226f, 0.115557f, 0.016918f, 0.075812f, 0.030165f, -0.006912f, -0.071050f, -0.069785f, -0.094522f, -0.124301f, -0.084591f, -0.096341f, -0.060849f, 0.000280f, 0.029949f, 0.069081f, 0.111856f, 0.164492f, + 0.132002f, 0.119388f, 0.064826f, -0.024756f, -0.024240f, -0.064714f, -0.137317f, -0.105708f, -0.173554f, -0.114318f, -0.050456f, -0.038629f, 0.054426f, 0.104149f, 0.143039f, 0.100734f, 0.077383f, 0.046827f, 0.053689f, 0.046921f, -0.007361f, -0.054238f, -0.051443f, -0.081536f, -0.089923f, -0.071835f, -0.048881f, -0.045745f, -0.043178f, 0.019726f, 0.042418f, 0.074604f, 0.088891f, 0.072620f, 0.064132f, 0.036343f, 0.001471f, 0.001700f, 0.008460f, -0.054055f, -0.091234f, -0.037622f, -0.079649f, -0.090689f, -0.002842f, 0.022465f, 0.050673f, 0.052013f, 0.033579f, 0.054978f, 0.032281f, 0.043945f, -0.009075f, -0.001120f, -0.038472f, -0.023479f, -0.020320f, -0.025814f, -0.029082f, -0.023869f, 0.004169f, -0.010068f, 0.000325f, 0.026652f, 0.037563f, 0.023258f, 0.020735f, -0.005405f, -0.006240f, -0.000582f, -0.000256f, -0.011617f, -0.013133f, -0.002482f, -0.007638f, -0.008383f, -0.004536f, -0.000086f, -0.007981f, -0.003017f, 0.016801f, 0.005588f, 0.007925f, 0.010559f, 0.009041f, 0.003242f, 0.003092f, -0.002002f, -0.007113f, -0.010405f, -0.007478f, -0.012192f, -0.010005f, -0.002718f, 0.001906f, 0.004212f, + 0.008297f, 0.006581f, 0.006082f, 0.007901f, 0.005493f, -0.003401f, 0.001453f, 0.003179f, -0.002350f, -0.006498f, -0.006831f, -0.005556f, -0.000433f, -0.002484f, -0.003969f, -0.002462f, 0.002267f, -0.000263f, 0.002320f, 0.005971f, 0.005886f, 0.004900f, 0.002730f, 0.000436f, 0.000091f, -0.001849f, -0.001761f, -0.002943f, -0.002718f, -0.002109f, -0.001807f, -0.002960f, -0.001565f, -0.001533f, -0.001125f, 0.000863f, 0.003585f, 0.002029f, 0.003018f, 0.003437f, 0.002857f, 0.001727f, 0.000442f, -0.001098f, -0.001903f, -0.003016f, -0.002232f, -0.002526f, -0.002318f, -0.000826f, -0.000054f, -0.000940f, 0.000464f, 0.002131f, 0.002598f, 0.001692f, 0.001057f, 0.001152f, 0.001287f, -0.000295f, -0.001117f, -0.001242f, -0.001051f, -0.000964f, -0.000477f, -0.000384f, -0.000051f, 0.000083f, 0.000203f, 0.000063f, 0.000115f, 0.000097f, 0.000105f, 0.000030f, 0.000040f}, + {0.015075f, 0.009664f, 0.000295f, 0.000542f, 0.011877f, 0.002989f, -0.005872f, 0.004068f, 0.007910f, -0.003953f, -0.006517f, -0.023463f, 0.001275f, -0.007861f, 0.015716f, -0.007741f, 0.007889f, 0.006393f, -0.000801f, 0.005179f, 0.008701f, 0.002424f, 0.002045f, -0.004230f, -0.005149f, -0.003944f, -0.006493f, 0.005727f, 0.003392f, -0.003012f, 0.005120f, -0.003473f, -0.005191f, -0.006148f, -0.002989f, -0.004843f, 0.000426f, 0.000143f, -0.000907f, 0.010820f, -0.006215f, 0.008864f, -0.003173f, -0.002169f, 0.005910f, -0.003589f, 0.001850f, -0.003588f, 0.006478f, -0.001840f, -0.018369f, 0.005535f, 0.000646f, 0.002327f, 0.009244f, 0.004849f, 0.000669f, -0.002023f, -0.006074f, 0.015803f, -0.008317f, 0.006192f, 0.003203f, -0.006431f, 0.006623f, 0.003024f, -0.007687f, 0.006173f, -0.007929f, 0.000531f, -0.000820f, 0.007015f, 0.001142f, 0.007330f, -0.002796f, -0.016152f, -0.003473f, -0.003838f, -0.007712f, -0.006829f, -0.006844f, 0.005683f, 0.002467f, 0.002044f, 0.003403f, 0.003480f, 0.000677f, 0.001694f, -0.001902f, 0.001220f, -0.001404f, -0.000560f, -0.003963f, 0.000032f, -0.001317f, 0.003088f, + -0.000294f, -0.000864f, -0.000607f, 0.000406f, -0.002055f, 0.000793f, -0.000893f, 0.001202f, -0.000657f, 0.000297f, -0.002369f, -0.000202f, -0.002960f, -0.001726f, -0.001690f, 0.002500f, 0.028482f, -0.014248f, 0.001457f, -0.000985f, -0.000964f, 0.006378f, -0.005276f, -0.020674f, -0.019063f, 0.008779f, -0.006120f, -0.001889f, 0.004704f, 0.000914f, 0.004641f, 0.005190f, -0.009152f, 0.004733f, 0.003228f, -0.006530f, 0.007344f, 0.011126f, -0.007494f, -0.002563f, 0.000420f, -0.012306f, -0.005639f, 0.001076f, 0.014385f, -0.002495f, -0.000964f, -0.012263f, 0.007017f, -0.000149f, -0.011011f, -0.004799f, 0.003625f, -0.001807f, 0.001957f, -0.009554f, -0.000381f, 0.000479f, -0.003985f, 0.009874f, 0.002383f, 0.002089f, 0.009536f, -0.001174f, 0.012431f, -0.004398f, -0.016166f, 0.006299f, 0.006104f, -0.005803f, -0.002619f, -0.002132f, 0.001825f, 0.000546f, 0.004299f, -0.003838f, 0.002790f, -0.008902f, -0.000554f, 0.005565f, -0.008513f, -0.001152f, 0.004751f, 0.001390f, -0.004529f, 0.002704f, -0.003469f, 0.000735f, 0.008034f, 0.002780f, -0.011425f, 0.013517f, 0.004977f, 0.004874f, -0.001327f, 0.007714f, + 0.008589f, -0.003953f, -0.000697f, 0.001784f, 0.002095f, 0.002594f, 0.003538f, -0.000521f, 0.000153f, 0.002607f, -0.000544f, 0.000254f, 0.001575f, 0.004125f, -0.000833f, 0.004204f, -0.000312f, 0.000910f, 0.002075f, 0.000446f, -0.001406f, -0.000492f, 0.001373f, 0.001342f, -0.000400f, -0.002073f, -0.006908f, -0.016686f, -0.001991f, 0.001798f, 0.018424f, -0.007017f, 0.015791f, 0.003960f, -0.000535f, 0.000980f, 0.014128f, -0.003283f, -0.003861f, -0.004087f, 0.009959f, 0.020222f, 0.005300f, -0.013942f, -0.018917f, -0.026917f, 0.003532f, -0.007031f, -0.011313f, -0.006211f, -0.017543f, -0.000083f, -0.008139f, 0.001324f, 0.008431f, 0.008876f, -0.010000f, -0.008960f, -0.006359f, 0.001126f, -0.014883f, -0.001624f, 0.004636f, -0.006742f, -0.002448f, 0.001565f, 0.006011f, -0.008365f, 0.002192f, 0.019681f, -0.000807f, -0.000955f, -0.007245f, 0.008197f, -0.003642f, 0.000725f, 0.006265f, 0.008151f, 0.012117f, -0.001933f, 0.001797f, -0.003647f, -0.000153f, -0.002069f, 0.001612f, 0.018909f, -0.020998f, 0.000470f, 0.004095f, 0.011173f, -0.004636f, -0.005560f, -0.001224f, -0.005249f, 0.015119f, -0.008323f, + -0.019792f, -0.001371f, -0.005898f, -0.008291f, 0.004928f, -0.019602f, 0.007255f, -0.002097f, -0.005432f, 0.000396f, 0.013855f, -0.004102f, -0.005196f, -0.005340f, 0.006647f, -0.006224f, -0.001679f, 0.001169f, -0.000558f, 0.002389f, 0.000230f, 0.000934f, 0.004119f, 0.000335f, 0.001084f, -0.001027f, 0.003313f, 0.000728f, -0.000649f, -0.003726f, -0.001994f, -0.000280f, -0.001949f, 0.003832f, 0.002342f, -0.002184f, 0.002867f, 0.000290f, 0.000431f, -0.002030f, 0.001074f, -0.000891f, 0.000097f, 0.000990f, -0.030754f, 0.011484f, -0.009623f, 0.012889f, -0.011590f, -0.001050f, 0.008916f, -0.017784f, -0.003063f, 0.005425f, -0.004851f, 0.025917f, -0.010884f, -0.003280f, -0.010384f, -0.008669f, 0.013302f, 0.014812f, 0.005718f, -0.017439f, -0.021069f, 0.019476f, 0.003251f, -0.019727f, 0.007356f, 0.000731f, 0.009321f, -0.005847f, 0.008892f, -0.011801f, 0.005738f, 0.019065f, 0.007857f, 0.008170f, 0.004309f, 0.000340f, -0.004872f, 0.003988f, 0.001467f, -0.012999f, 0.000198f, -0.004118f, -0.009575f, -0.009529f, -0.003642f, 0.007538f, -0.013734f, 0.001878f, -0.009942f, -0.001012f, -0.001538f, 0.004532f, + 0.008112f, 0.017227f, 0.006059f, -0.000094f, 0.007379f, -0.009199f, -0.013567f, -0.000236f, 0.003133f, 0.001414f, 0.016342f, -0.003717f, -0.002023f, -0.005226f, -0.002337f, 0.002334f, 0.007925f, -0.002149f, 0.003300f, -0.008111f, 0.013220f, -0.003467f, -0.004650f, -0.003048f, 0.004268f, -0.007179f, 0.000202f, 0.008200f, -0.000607f, -0.002340f, 0.001187f, 0.006518f, 0.005102f, -0.001002f, 0.004108f, -0.003508f, 0.002591f, -0.002116f, 0.000992f, 0.004673f, -0.001668f, 0.002007f, 0.001956f, -0.003162f, 0.003164f, 0.001973f, 0.000684f, -0.001345f, -0.002919f, -0.000672f, 0.003541f, 0.002396f, -0.001276f, 0.001458f, -0.000724f, 0.005879f, -0.000562f, -0.001609f, -0.015372f, -0.003587f, -0.009978f, -0.001019f, 0.020415f, 0.013049f, 0.009117f, -0.001552f, -0.017969f, 0.002507f, -0.011824f, -0.019046f, -0.006323f, 0.013707f, -0.010758f, -0.016888f, 0.004411f, 0.001449f, -0.008414f, 0.001804f, 0.009610f, 0.002647f, -0.022511f, -0.006380f, 0.014145f, 0.016663f, 0.008309f, -0.018656f, -0.006769f, 0.008501f, -0.003180f, -0.004017f, 0.001209f, 0.006245f, 0.001004f, 0.002308f, 0.019143f, 0.000036f, + 0.011579f, 0.008975f, -0.000148f, -0.008621f, -0.000212f, -0.005087f, 0.011413f, -0.006528f, -0.010890f, 0.000025f, 0.017908f, 0.001004f, 0.017790f, 0.009588f, 0.001725f, 0.011494f, -0.001939f, 0.024699f, 0.001993f, 0.012219f, 0.013921f, 0.001288f, -0.011511f, -0.001767f, -0.013772f, 0.007029f, -0.009869f, -0.005536f, -0.009100f, -0.006002f, -0.004367f, 0.004520f, 0.001529f, 0.006805f, -0.000282f, -0.007869f, -0.006849f, 0.002558f, 0.012724f, -0.003771f, 0.003148f, -0.013657f, 0.004328f, 0.011799f, 0.018118f, -0.006242f, -0.001348f, 0.002999f, -0.006229f, -0.000473f, 0.005982f, -0.001834f, 0.010989f, 0.000723f, 0.002502f, 0.000274f, 0.000524f, 0.004052f, -0.002676f, -0.001741f, -0.001426f, -0.000827f, 0.001112f, 0.001360f, -0.002067f, 0.001797f, -0.000628f, -0.002193f, -0.002668f, 0.000905f, -0.002532f, -0.001670f, -0.003176f, 0.001548f, 0.002205f, -0.000460f, 0.006200f, -0.004018f, 0.001096f, -0.000437f, -0.003509f, 0.005899f, -0.001698f, -0.000836f, -0.003080f, 0.003349f, 0.002209f, -0.000539f, 0.000899f, 0.002955f, 0.018641f, -0.027836f, -0.005123f, 0.023328f, -0.011570f, 0.004271f, + -0.017990f, 0.007934f, 0.032815f, -0.004432f, 0.001740f, -0.001382f, -0.023174f, 0.001877f, -0.001471f, 0.034819f, -0.010981f, -0.001699f, 0.015224f, -0.009591f, 0.021583f, -0.014545f, -0.002168f, -0.021993f, 0.024875f, 0.000345f, -0.009781f, 0.000318f, 0.009117f, -0.011562f, 0.017296f, -0.001838f, 0.015330f, -0.000109f, 0.008034f, -0.024041f, -0.015466f, -0.011217f, -0.003597f, 0.014493f, -0.021780f, 0.011647f, 0.009007f, 0.003039f, -0.009013f, -0.013138f, 0.029966f, 0.005951f, -0.003389f, 0.011621f, -0.010577f, 0.006299f, -0.014084f, -0.013842f, -0.005760f, -0.009295f, 0.032363f, 0.009661f, -0.006420f, -0.009618f, -0.012334f, 0.010169f, 0.008411f, 0.003057f, -0.011375f, -0.001394f, -0.004603f, 0.013821f, 0.001259f, 0.011179f, -0.026117f, 0.014207f, -0.002281f, 0.000698f, -0.002897f, 0.004592f, -0.011522f, -0.005367f, -0.018108f, -0.005936f, 0.006603f, 0.011050f, 0.011697f, 0.004317f, 0.004271f, 0.002724f, -0.006471f, 0.003860f, 0.002674f, -0.000487f, -0.004334f, -0.007241f, 0.003880f, 0.003604f, -0.005512f, 0.002845f, 0.000411f, -0.004572f, 0.003016f, 0.000822f, -0.001930f, -0.001092f, + 0.000314f, 0.000875f, -0.003335f, 0.002324f, 0.001322f, -0.005268f, -0.001195f, -0.002713f, 0.000465f, 0.003684f, 0.002579f, -0.000575f, 0.000199f, -0.002460f, 0.005912f, 0.000481f, -0.002016f, 0.011983f, 0.005997f, 0.009910f, 0.003065f, 0.000300f, -0.003511f, -0.014730f, -0.004456f, -0.009437f, 0.006051f, -0.000380f, 0.022603f, -0.018668f, -0.024100f, -0.005970f, 0.007722f, -0.007413f, -0.005716f, 0.019242f, 0.003983f, -0.010396f, -0.012004f, -0.012452f, 0.021018f, -0.010382f, 0.014251f, -0.006670f, 0.015577f, -0.015268f, 0.003527f, 0.023830f, 0.008248f, -0.032168f, 0.007567f, 0.000848f, -0.004008f, -0.002757f, 0.003442f, -0.003742f, 0.003261f, -0.005156f, 0.002710f, -0.001199f, -0.014311f, 0.014568f, 0.014950f, -0.004310f, 0.016547f, -0.013905f, -0.002310f, -0.003927f, -0.006557f, 0.018193f, -0.012897f, -0.022952f, -0.012808f, 0.004449f, -0.018693f, -0.017414f, -0.008645f, -0.005807f, -0.011932f, -0.000893f, 0.015546f, 0.016365f, 0.002605f, 0.017634f, 0.005596f, 0.002465f, 0.013397f, -0.014092f, -0.002379f, 0.000119f, -0.011554f, -0.000001f, -0.011189f, 0.013797f, -0.003813f, -0.002382f, + 0.011498f, -0.001971f, -0.003462f, -0.002237f, 0.013705f, -0.001545f, 0.004864f, -0.013109f, -0.004569f, 0.007514f, -0.008458f, 0.000747f, 0.000362f, 0.001587f, -0.006416f, -0.004401f, -0.003318f, 0.000333f, -0.003459f, -0.004143f, 0.001488f, -0.000532f, -0.003711f, -0.001562f, 0.000626f, -0.000286f, -0.001069f, -0.001181f, -0.002082f, 0.000825f, -0.006976f, -0.004821f, -0.004657f, -0.004615f, 0.000188f, -0.000145f, -0.001558f, 0.001852f, -0.003514f, 0.035885f, -0.017893f, -0.017231f, 0.011480f, 0.029140f, 0.005578f, 0.026231f, 0.014931f, 0.023810f, 0.010496f, -0.004600f, -0.010973f, 0.008446f, -0.017993f, -0.013735f, 0.019870f, 0.016577f, 0.041635f, -0.001206f, 0.005709f, -0.015591f, 0.016024f, 0.007170f, -0.018696f, -0.004545f, 0.023545f, -0.000213f, -0.026133f, -0.010657f, -0.014786f, -0.005127f, 0.014441f, 0.013204f, -0.009961f, -0.004930f, 0.018039f, -0.017699f, 0.007985f, 0.015127f, 0.018171f, -0.009882f, 0.015633f, -0.006778f, -0.023793f, 0.008239f, 0.021706f, -0.005963f, 0.006221f, 0.005181f, -0.007445f, 0.002525f, 0.006464f, -0.006904f, 0.002371f, 0.017500f, -0.010439f, -0.005621f, + 0.016222f, -0.003626f, -0.003339f, -0.027122f, -0.009600f, -0.016429f, -0.026827f, -0.018169f, 0.013402f, -0.008910f, -0.011489f, 0.023074f, 0.023165f, -0.005987f, 0.024920f, 0.009880f, 0.016363f, -0.004727f, -0.012933f, 0.010666f, -0.013409f, -0.026853f, -0.016127f, -0.006990f, 0.013169f, 0.005968f, 0.022092f, 0.003791f, -0.004783f, -0.003695f, -0.000024f, 0.003726f, -0.006886f, 0.000335f, -0.004003f, -0.000688f, 0.003876f, -0.000779f, 0.000620f, 0.007048f, -0.002598f, -0.001400f, 0.007113f, -0.005331f, -0.002671f, -0.003565f, 0.002110f, -0.003963f, 0.002605f, 0.001492f, 0.001123f, 0.003647f, 0.004799f, 0.002080f, 0.008651f, 0.000966f, 0.005922f, 0.001922f, 0.004459f, 0.005011f, -0.004447f, 0.003974f, 0.004385f, -0.003222f, -0.000943f, -0.000522f, -0.006218f, 0.001734f, -0.003211f, -0.018189f, -0.019459f, 0.026324f, -0.004405f, 0.060154f, -0.024797f, -0.011660f, -0.001402f, 0.014674f, -0.008410f, -0.008200f, -0.024808f, -0.028682f, 0.012931f, 0.002489f, 0.039569f, 0.012828f, -0.004065f, -0.004517f, 0.026276f, 0.026853f, -0.022209f, 0.016121f, -0.021217f, 0.005580f, -0.009153f, -0.010916f, + -0.006531f, 0.004520f, -0.003475f, 0.013957f, 0.006962f, 0.015617f, -0.001973f, -0.007434f, -0.014681f, -0.002823f, 0.017026f, 0.001543f, -0.022690f, -0.002834f, 0.005484f, -0.009659f, 0.017921f, 0.015188f, 0.003125f, 0.005300f, -0.049513f, -0.018930f, 0.017262f, -0.001132f, 0.027743f, 0.007781f, 0.031275f, -0.003486f, -0.016967f, 0.016750f, -0.009501f, 0.011438f, 0.002003f, 0.045646f, 0.037689f, 0.004491f, 0.010646f, -0.006176f, 0.014973f, 0.015953f, 0.017178f, 0.018642f, 0.030224f, -0.000509f, 0.005407f, -0.011549f, -0.010127f, 0.009525f, -0.014168f, -0.035031f, -0.026037f, -0.000557f, 0.021771f, -0.010944f, -0.019862f, -0.011343f, -0.010720f, -0.001131f, -0.023709f, -0.000894f, 0.004382f, -0.000100f, -0.003209f, -0.002269f, 0.002441f, 0.005180f, -0.000661f, 0.003922f, -0.017708f, -0.010784f, -0.005665f, -0.012478f, 0.001096f, -0.004463f, -0.007324f, -0.004847f, -0.002995f, 0.007235f, 0.002915f, -0.006650f, 0.002187f, 0.015920f, 0.008142f, -0.003273f, -0.005662f, -0.007139f, -0.004210f, -0.005738f, -0.012405f, 0.004633f, -0.004793f, -0.000915f, 0.008987f, 0.003026f, -0.001792f, 0.001819f, + 0.003446f, -0.052182f, 0.041260f, -0.001138f, 0.004734f, -0.014421f, 0.023152f, -0.049541f, -0.031742f, -0.009976f, -0.012690f, -0.001155f, -0.044416f, 0.008749f, 0.000956f, -0.001149f, -0.020261f, -0.020619f, 0.008452f, 0.028378f, 0.004432f, -0.037766f, -0.008153f, -0.030915f, 0.024500f, 0.015831f, 0.001271f, -0.013663f, -0.006443f, -0.006953f, 0.020196f, -0.002828f, -0.000367f, -0.004319f, -0.027354f, 0.014283f, 0.019244f, -0.011438f, -0.006094f, 0.014985f, -0.029780f, -0.021684f, -0.032860f, -0.011101f, 0.008313f, -0.020937f, -0.009985f, -0.000846f, -0.034033f, 0.010459f, 0.021051f, 0.037251f, 0.005390f, -0.003647f, 0.002317f, -0.024422f, -0.019159f, 0.028529f, -0.002003f, -0.010783f, -0.006703f, -0.043562f, -0.023373f, 0.008579f, -0.009190f, -0.005042f, -0.003379f, 0.028576f, -0.004929f, -0.027073f, 0.002193f, 0.021169f, -0.000529f, -0.013260f, -0.000249f, 0.001499f, -0.011194f, -0.018977f, 0.014949f, -0.034925f, -0.017297f, -0.000225f, 0.016905f, -0.021336f, 0.013520f, 0.008987f, 0.012317f, 0.013152f, -0.013426f, -0.003366f, 0.016098f, 0.003107f, -0.009849f, 0.009262f, 0.013318f, -0.012436f, + 0.004620f, 0.011971f, 0.011275f, 0.017749f, 0.001180f, -0.005407f, -0.003049f, 0.002919f, 0.000220f, 0.007803f, 0.006545f, 0.000607f, -0.001641f, -0.005663f, -0.001958f, 0.003900f, 0.007885f, -0.013115f, 0.001660f, -0.002500f, 0.005394f, 0.012635f, 0.000591f, 0.008842f, -0.004764f, 0.005864f, 0.007197f, 0.010641f, 0.008271f, 0.010379f, -0.000817f, 0.005944f, -0.001967f, 0.004524f, 0.027104f, 0.024839f, 0.008674f, 0.042469f, -0.019771f, -0.009527f, 0.006441f, -0.011823f, -0.003846f, 0.013494f, 0.045569f, -0.007995f, 0.008845f, -0.000848f, -0.003349f, -0.001324f, 0.050321f, -0.025196f, 0.025872f, -0.000838f, -0.033834f, 0.010480f, -0.033563f, -0.020778f, 0.018617f, -0.017992f, 0.013034f, 0.000155f, 0.001350f, 0.022203f, 0.017772f, -0.027965f, -0.031515f, -0.023908f, -0.008283f, 0.008298f, 0.008504f, 0.002767f, 0.005692f, -0.037886f, 0.005262f, -0.020615f, -0.047429f, 0.031405f, -0.009694f, 0.029494f, 0.031715f, 0.001263f, 0.011574f, -0.017770f, -0.021358f, -0.037599f, 0.008062f, 0.033314f, 0.005548f, -0.015496f, 0.001572f, -0.008104f, 0.004765f, -0.020538f, -0.016739f, -0.020511f, + 0.003005f, -0.003028f, -0.006926f, 0.021240f, 0.019226f, 0.011216f, 0.031407f, 0.002967f, -0.033913f, 0.042655f, -0.032033f, -0.010351f, -0.008349f, -0.008985f, 0.035839f, -0.006416f, -0.052349f, 0.043555f, -0.017674f, -0.011194f, 0.011693f, 0.010584f, 0.033631f, 0.021115f, 0.013840f, 0.016012f, 0.014635f, 0.010748f, 0.000243f, 0.013665f, 0.016787f, 0.003933f, -0.000175f, 0.017785f, -0.003678f, 0.001503f, -0.017332f, -0.004707f, -0.005799f, -0.009439f, 0.001007f, -0.002011f, 0.010700f, 0.007439f, 0.002895f, -0.002032f, 0.004943f, 0.001656f, 0.003491f, 0.006841f, -0.002726f, -0.003527f, 0.001157f, -0.003487f, 0.005163f, 0.001946f, 0.002187f, 0.003765f, 0.002130f, 0.016344f, 0.012010f, 0.002881f, 0.003027f, 0.039015f, 0.044144f, 0.010001f, -0.084200f, 0.002629f, 0.023282f, -0.028050f, 0.016455f, 0.033148f, 0.001257f, 0.008740f, 0.020775f, 0.015913f, 0.005927f, 0.029771f, 0.006452f, -0.004525f, 0.056215f, 0.020721f, 0.007028f, 0.024135f, -0.019069f, 0.029688f, -0.021393f, -0.002154f, -0.002731f, -0.007252f, -0.031390f, 0.010095f, -0.022310f, 0.040018f, -0.003940f, -0.008231f, + 0.058928f, 0.007618f, 0.008328f, 0.019429f, 0.001898f, 0.011077f, -0.013634f, -0.026122f, -0.003274f, 0.017147f, -0.030924f, 0.035218f, 0.031715f, 0.023373f, 0.005868f, 0.013807f, -0.021473f, -0.022236f, -0.035172f, -0.015661f, -0.019134f, -0.018182f, 0.007956f, -0.003646f, -0.034453f, -0.015393f, 0.029672f, -0.000767f, -0.028484f, 0.015707f, -0.001898f, -0.019421f, -0.046042f, 0.002944f, -0.069608f, 0.040030f, -0.023927f, 0.036393f, 0.001427f, 0.009988f, 0.000847f, -0.013833f, 0.018071f, 0.061720f, 0.005330f, 0.017441f, -0.011193f, -0.048485f, 0.003915f, -0.005415f, 0.034958f, 0.020361f, -0.008685f, -0.001901f, -0.007686f, -0.004006f, 0.011636f, -0.014001f, 0.010899f, -0.001806f, -0.012524f, -0.012404f, 0.012660f, -0.015148f, -0.015137f, -0.020929f, -0.004585f, -0.015089f, 0.004302f, 0.012910f, 0.000494f, -0.003926f, -0.010082f, 0.018932f, -0.018288f, 0.004569f, 0.001922f, 0.001478f, -0.010900f, 0.007470f, 0.018374f, -0.000948f, -0.009729f, -0.002392f, 0.016728f, 0.017672f, -0.014644f, 0.016921f, -0.001628f, -0.004540f, 0.002318f, -0.001182f, 0.018453f, 0.004809f, -0.010437f, -0.008889f, + -0.000491f, 0.002024f, 0.010654f, 0.023522f, 0.017603f, 0.046079f, -0.062378f, 0.025173f, -0.036371f, 0.031757f, -0.015213f, -0.025967f, -0.007179f, -0.029968f, -0.012394f, -0.006378f, 0.011346f, 0.014392f, -0.008495f, 0.044278f, -0.001701f, -0.007157f, -0.005534f, -0.039347f, -0.004049f, 0.000564f, -0.033100f, 0.011126f, -0.028183f, -0.035554f, -0.011307f, 0.022052f, -0.059220f, -0.040018f, -0.026701f, 0.003467f, -0.041441f, -0.035055f, -0.028427f, -0.014028f, -0.011361f, -0.005078f, -0.027933f, 0.030562f, 0.005440f, -0.002534f, -0.020793f, -0.021250f, 0.041037f, -0.035084f, -0.024026f, 0.011119f, 0.011108f, 0.015060f, -0.020386f, -0.028266f, -0.011887f, -0.004918f, 0.013564f, -0.020185f, -0.008058f, -0.008021f, -0.024389f, -0.041520f, -0.052803f, 0.050551f, -0.054728f, -0.002643f, 0.004082f, -0.009173f, -0.009970f, -0.048698f, 0.019201f, -0.011365f, -0.051340f, -0.000765f, -0.011143f, 0.048901f, 0.012172f, 0.034922f, 0.032996f, -0.009367f, 0.013012f, -0.004982f, -0.009224f, 0.024694f, -0.005990f, 0.014369f, -0.018471f, 0.001873f, -0.018611f, 0.016421f, 0.012637f, 0.002706f, 0.011570f, -0.004471f, + -0.001669f, 0.012565f, 0.005909f, -0.011437f, 0.008880f, 0.020222f, -0.002963f, 0.004999f, -0.010689f, -0.024907f, -0.002594f, -0.001796f, -0.000783f, -0.017157f, -0.003765f, 0.003250f, -0.002501f, -0.008942f, 0.012051f, -0.001767f, -0.006757f, -0.020071f, -0.020730f, 0.000743f, 0.011408f, 0.007152f, 0.004413f, -0.000951f, 0.014946f, 0.017407f, -0.007624f, 0.004101f, 0.004095f, -0.000687f, 0.005036f, 0.012771f, -0.055667f, 0.064851f, 0.010432f, 0.006740f, -0.011019f, 0.033048f, 0.000585f, 0.054275f, -0.014563f, 0.037314f, 0.020150f, -0.053050f, 0.023261f, 0.008994f, 0.025455f, -0.004102f, -0.014052f, -0.020967f, -0.007677f, 0.026296f, 0.057418f, 0.006330f, -0.008249f, -0.035971f, 0.013801f, -0.038922f, -0.006092f, 0.039854f, -0.035643f, 0.000352f, 0.002612f, -0.005870f, -0.013401f, -0.014898f, 0.063578f, -0.013400f, -0.015516f, -0.007374f, 0.014473f, 0.021629f, 0.008049f, 0.001391f, -0.012880f, 0.000159f, 0.009555f, 0.038929f, -0.008811f, 0.055549f, 0.032295f, 0.016816f, -0.013237f, 0.048484f, 0.054690f, -0.004110f, -0.014463f, -0.002463f, -0.017757f, 0.005853f, -0.017589f, 0.027997f, + 0.009401f, 0.040160f, 0.030699f, -0.048209f, -0.054820f, 0.066198f, 0.048848f, 0.008223f, -0.009310f, -0.025606f, -0.036121f, -0.013633f, 0.037004f, -0.034343f, -0.037713f, -0.004804f, -0.010192f, -0.059782f, -0.013452f, 0.013918f, -0.023380f, 0.003773f, -0.000171f, 0.003751f, 0.004885f, 0.010595f, -0.017797f, -0.010380f, -0.018292f, -0.006027f, -0.000097f, 0.003309f, -0.009990f, -0.004130f, -0.001780f, -0.029131f, -0.009924f, -0.013533f, -0.006569f, -0.000144f, 0.002617f, 0.001895f, 0.004969f, -0.001243f, 0.001088f, -0.014974f, 0.008996f, -0.012784f, -0.015583f, 0.011794f, 0.004748f, -0.027186f, -0.003044f, -0.007995f, 0.013767f, 0.027353f, 0.000567f, -0.021914f, 0.018198f, -0.004397f, 0.004755f, 0.007168f, -0.007369f, -0.004498f, 0.001661f, -0.011294f, -0.015995f, 0.029106f, -0.022956f, -0.007106f, -0.004442f, 0.006147f, 0.001395f, -0.034751f, -0.101622f, 0.051660f, -0.048608f, 0.020511f, 0.073376f, 0.011627f, -0.030035f, 0.021531f, 0.025906f, -0.010104f, -0.022594f, -0.004298f, -0.049796f, 0.017111f, -0.051774f, -0.031255f, 0.021508f, 0.002667f, 0.009569f, -0.046746f, -0.009101f, -0.033604f, + -0.028440f, -0.041581f, -0.014169f, 0.014917f, -0.024543f, -0.024938f, 0.025249f, 0.003919f, -0.001552f, 0.008366f, -0.047882f, -0.002478f, -0.037121f, 0.032736f, 0.009419f, -0.091642f, 0.023736f, 0.049882f, -0.010024f, 0.029958f, 0.025321f, 0.017230f, 0.013947f, 0.047661f, 0.037510f, 0.001859f, -0.033216f, -0.006642f, 0.037910f, 0.024748f, -0.030744f, 0.002746f, -0.036001f, -0.011283f, 0.003008f, 0.027000f, 0.036035f, -0.064685f, -0.050996f, -0.028358f, 0.006035f, -0.018886f, -0.006617f, 0.061127f, 0.010528f, 0.014846f, 0.047779f, -0.018677f, 0.010302f, -0.011561f, 0.048881f, -0.024112f, 0.002539f, 0.005305f, 0.036364f, -0.009486f, -0.003229f, 0.013589f, 0.015267f, -0.001379f, 0.007752f, 0.023867f, 0.001516f, -0.000248f, -0.000371f, 0.023252f, -0.010946f, -0.006889f, 0.006072f, 0.010336f, 0.007285f, 0.003487f, 0.011337f, -0.004510f, 0.000648f, -0.009940f, 0.000312f, -0.007274f, -0.000541f, -0.010198f, 0.018071f, -0.012692f, -0.018735f, 0.018733f, 0.012602f, 0.013044f, -0.013034f, -0.017103f, 0.000619f, -0.031052f, -0.008013f, -0.015781f, -0.015878f, 0.006873f, 0.000457f, -0.016361f, + 0.006297f, 0.007301f, -0.001213f, -0.009501f, -0.008957f, 0.007765f, 0.005210f, 0.015468f, 0.033833f, 0.032702f, -0.057029f, 0.011932f, -0.012287f, -0.014998f, -0.013257f, 0.038259f, 0.020314f, -0.027902f, -0.015928f, 0.029199f, -0.052461f, 0.002983f, 0.019077f, 0.029257f, -0.006238f, 0.006484f, -0.061224f, -0.000218f, -0.027129f, 0.020490f, 0.007515f, 0.033991f, -0.053850f, -0.027140f, -0.007847f, 0.006662f, -0.004651f, 0.010538f, 0.003832f, 0.029392f, 0.055329f, -0.035016f, -0.045292f, 0.011957f, -0.047200f, -0.013877f, 0.019731f, -0.034260f, -0.033344f, 0.002818f, 0.020499f, 0.028850f, 0.020415f, -0.012832f, -0.002928f, -0.060025f, -0.040533f, 0.053373f, -0.037045f, 0.072032f, -0.030560f, 0.014703f, 0.010505f, -0.000519f, -0.052943f, 0.066334f, -0.030911f, -0.006232f, -0.011958f, 0.025930f, 0.049886f, -0.050452f, -0.028760f, 0.059327f, -0.043914f, -0.000044f, -0.016602f, 0.012154f, 0.068571f, 0.000426f, -0.005089f, -0.042415f, 0.052442f, -0.017065f, 0.013607f, 0.017393f, -0.033234f, -0.039987f, 0.003873f, 0.023127f, -0.012024f, 0.011873f, -0.095007f, -0.044250f, -0.013637f, -0.048388f, + -0.023919f, 0.008133f, 0.031428f, -0.006590f, -0.008686f, -0.024720f, 0.000610f, -0.002320f, -0.018145f, -0.006202f, 0.011067f, 0.000972f, 0.014846f, 0.007028f, 0.014067f, -0.018630f, -0.002708f, -0.003874f, 0.019586f, 0.015581f, -0.011823f, 0.036066f, 0.013237f, -0.014470f, 0.021801f, 0.006026f, -0.002208f, -0.011378f, 0.008221f, -0.008223f, -0.007796f, 0.016134f, 0.001321f, -0.007054f, -0.006392f, 0.013527f, -0.003794f, 0.012232f, -0.002833f, 0.022226f, 0.004568f, 0.003256f, -0.009009f, -0.006552f, -0.008061f, -0.002936f, 0.002671f, 0.032508f, -0.037632f, 0.010162f, 0.030706f, 0.030354f, 0.069207f, -0.044424f, 0.063552f, -0.011508f, -0.042056f, -0.041164f, 0.010244f, 0.026394f, -0.018742f, -0.008797f, -0.029033f, -0.012105f, 0.053807f, -0.038411f, -0.003802f, 0.043212f, -0.014313f, 0.025687f, -0.017616f, -0.008539f, 0.045841f, -0.001889f, 0.002093f, 0.044224f, 0.030573f, 0.010631f, -0.005738f, 0.037310f, 0.051023f, -0.052523f, 0.047935f, -0.046427f, 0.024165f, -0.033590f, 0.006709f, 0.039467f, 0.013329f, -0.090504f, 0.039799f, 0.025348f, -0.000557f, 0.045474f, -0.071889f, -0.014110f, + 0.048454f, 0.041186f, 0.006677f, 0.064883f, -0.034919f, 0.000479f, -0.008589f, -0.010348f, 0.027696f, 0.011271f, 0.048568f, 0.040402f, -0.030768f, 0.026710f, -0.056903f, -0.017837f, 0.004279f, -0.003173f, -0.004652f, -0.009503f, -0.088918f, -0.049220f, -0.068734f, -0.046793f, 0.050668f, -0.031967f, -0.007930f, 0.005517f, 0.083119f, -0.020250f, -0.029620f, 0.066618f, 0.040727f, -0.002260f, 0.053923f, 0.007904f, 0.010009f, -0.025652f, -0.000149f, -0.021512f, -0.022643f, -0.011864f, 0.017315f, -0.021746f, -0.011448f, 0.010040f, 0.003745f, 0.016437f, -0.006965f, -0.003164f, 0.021412f, 0.012267f, 0.001049f, -0.017495f, -0.014084f, -0.002480f, -0.005568f, 0.012547f, 0.021365f, -0.001958f, 0.003609f, 0.004650f, -0.008985f, 0.053471f, 0.016402f, 0.003475f, 0.001940f, -0.017951f, 0.014092f, -0.031804f, -0.002555f, 0.026749f, -0.002110f, -0.007526f, 0.019437f, 0.010898f, 0.005809f, -0.000828f, -0.017755f, 0.011317f, 0.012523f, 0.003855f, 0.006758f, 0.009018f, -0.006326f, 0.006892f, -0.021479f, 0.022201f, 0.055812f, -0.029652f, 0.022010f, 0.027910f, -0.038906f, 0.005816f, -0.048019f, 0.019279f, + -0.004434f, -0.025295f, 0.039438f, 0.001842f, 0.061085f, -0.002999f, -0.044331f, 0.077011f, -0.012915f, 0.008304f, 0.011345f, -0.070946f, 0.022383f, 0.062333f, 0.022814f, -0.026134f, -0.046068f, 0.005550f, 0.012282f, 0.053389f, 0.034857f, -0.016531f, -0.009396f, -0.040425f, 0.001264f, 0.060310f, -0.080207f, 0.025259f, 0.057581f, -0.050357f, 0.019619f, 0.005939f, 0.020566f, 0.060315f, 0.020852f, 0.023668f, -0.010118f, -0.057967f, 0.061619f, -0.010636f, -0.030062f, 0.127849f, 0.063568f, 0.033081f, 0.006551f, 0.003506f, -0.058875f, -0.048475f, -0.021259f, 0.038016f, -0.000248f, -0.034125f, -0.023489f, 0.047789f, -0.027771f, 0.033104f, 0.019501f, -0.022695f, 0.035790f, 0.016502f, -0.049311f, -0.024573f, -0.028465f, 0.008899f, 0.032663f, -0.062445f, 0.021859f, -0.064000f, -0.080472f, -0.050731f, 0.079445f, -0.026476f, 0.017361f, -0.017717f, -0.025996f, -0.003321f, -0.031199f, -0.021867f, -0.016031f, 0.004578f, -0.029823f, 0.004240f, 0.019457f, 0.000557f, -0.026071f, -0.019729f, 0.010855f, 0.003674f, 0.036076f, 0.005245f, -0.038685f, -0.014965f, -0.021588f, 0.033439f, -0.005323f, -0.012708f, + -0.030284f, 0.000178f, 0.020413f, 0.009262f, 0.023086f, -0.010389f, -0.002117f, 0.006998f, 0.023533f, 0.014653f, 0.000879f, -0.011921f, 0.017950f, -0.014727f, -0.000053f, 0.009517f, -0.012702f, 0.000228f, 0.026287f, -0.000187f, 0.006223f, -0.026522f, -0.017420f, -0.020028f, 0.013999f, -0.021342f, -0.005058f, 0.077239f, 0.129248f, -0.022384f, -0.005053f, -0.107284f, -0.036485f, -0.079068f, -0.052956f, 0.071923f, 0.004435f, 0.019040f, -0.061041f, 0.018868f, -0.053681f, -0.119924f, 0.016682f, 0.056610f, -0.005423f, 0.006741f, 0.060985f, -0.082423f, 0.092644f, 0.045859f, 0.028457f, -0.046907f, 0.062079f, 0.120342f, -0.024716f, 0.036761f, 0.091230f, 0.076952f, 0.136265f, 0.029127f, 0.048520f, 0.036641f, 0.032713f, 0.116992f, -0.031202f, -0.014556f, 0.042751f, 0.025178f, -0.013353f, 0.064115f, 0.003337f, 0.013083f, -0.038918f, -0.105541f, 0.003548f, 0.069571f, 0.010157f, 0.041965f, -0.076296f, 0.004258f, -0.101271f, -0.000241f, -0.108783f, 0.007048f, 0.075536f, -0.010025f, -0.032720f, -0.103656f, 0.134875f, 0.024237f, 0.008691f, 0.139782f, -0.002050f, -0.032330f, -0.023993f, 0.006951f, + 0.027708f, -0.008004f, 0.000201f, -0.011357f, -0.074361f, 0.043691f, 0.016806f, -0.046639f, -0.028692f, 0.036498f, -0.044964f, -0.077641f, -0.037988f, 0.016698f, 0.073923f, -0.077692f, 0.061544f, -0.003211f, 0.032798f, -0.013715f, 0.026777f, -0.018748f, -0.002778f, 0.006557f, 0.007516f, 0.024712f, 0.022540f, 0.004529f, 0.047383f, -0.002592f, 0.019513f, 0.024831f, 0.014639f, 0.010819f, 0.011431f, 0.040821f, 0.030617f, 0.014659f, -0.015786f, -0.006760f, 0.035760f, -0.047300f, 0.018538f, -0.028221f, 0.007150f, -0.010500f, 0.032469f, 0.037004f, 0.075564f, 0.042047f, 0.071387f, 0.040722f, 0.015530f, 0.074587f, 0.077928f, 0.073718f, 0.042923f, -0.012337f, 0.044987f, 0.049163f, 0.031151f, 0.059188f, 0.045497f, 0.000538f, 0.014766f, 0.010660f, 0.011206f, 0.017978f, 0.014223f, -0.014182f, -0.013219f, 0.001749f, 0.014516f, -0.002430f, 0.000135f, -0.003260f, -0.006538f, -0.014026f, -0.012263f, -0.004811f, -0.002862f, -0.004866f, 0.000478f, -0.007738f, -0.003388f, -0.042852f, -0.137743f, 0.004821f, 0.181967f, 0.025005f, -0.039239f, -0.037214f, -0.085460f, -0.056402f, 0.000740f, 0.113038f, + 0.018451f, -0.078287f, -0.007271f, 0.029600f, 0.005773f, 0.000655f, -0.009307f, 0.018328f, -0.056503f, -0.022153f, 0.026228f, 0.061966f, 0.062374f, -0.062105f, -0.025002f, 0.003048f, 0.006820f, 0.014597f, -0.071333f, 0.005172f, 0.009630f, -0.019859f, 0.048335f, -0.002039f, 0.056040f, 0.085482f, 0.039907f, 0.016539f, 0.036154f, -0.050825f, 0.043137f, -0.041310f, 0.065382f, 0.117150f, 0.037306f, -0.065441f, -0.056990f, 0.052376f, 0.017885f, 0.099724f, 0.074241f, 0.021912f, -0.020684f, -0.023942f, 0.001391f, 0.004015f, -0.036888f, 0.038071f, 0.032684f, 0.005351f, 0.089599f, 0.061351f, -0.010104f, 0.043433f, 0.047964f, 0.022056f, 0.047967f, 0.001026f, -0.088535f, -0.011829f, -0.022622f, -0.021141f, 0.097060f, 0.044462f, 0.014323f, 0.077540f, 0.044808f, 0.049080f, 0.059758f, 0.020269f, -0.064476f, -0.032100f, -0.003219f, -0.002051f, -0.023888f, -0.019321f, -0.039821f, 0.022793f, 0.013527f, 0.036042f, -0.019084f, 0.040343f, 0.009784f, 0.041831f, 0.026753f, -0.010217f, -0.023569f, 0.005656f, 0.009696f, -0.000304f, 0.003067f, 0.030550f, 0.001184f, 0.048211f, 0.063567f, 0.018144f, + -0.007387f, 0.004237f, 0.045117f, 0.010302f, -0.016822f, -0.012985f, 0.035208f, -0.002392f, -0.013537f, -0.007630f, 0.010257f, 0.025992f, 0.050552f, -0.028033f, 0.002163f, -0.018245f, 0.002243f, 0.001869f, 0.040792f, -0.023206f, 0.019030f, 0.025882f, 0.013307f, -0.019588f, 0.003779f, 0.030257f, 0.001549f, 0.000938f, 0.026954f, 0.004119f, 0.015292f, 0.011250f, 0.000527f, -0.005399f, 0.002829f, -0.003760f, 0.004179f, 0.002534f, 0.004562f, 0.002239f, 0.011642f, 0.004631f, 0.003108f, 0.003751f, 0.007617f, 0.003514f, 0.008339f, 0.003386f, 0.004076f, 0.004436f, 0.003501f, 0.004667f, 0.002322f, 0.004324f, 0.005933f, 0.006742f, 0.006500f, 0.007320f, 0.005819f, 0.007738f, 0.005736f, 0.006307f, 0.002664f, 0.006422f, 0.002672f, 0.005917f, 0.001976f, 0.005966f, 0.004050f, 0.005469f, 0.001310f, 0.005465f, 0.003515f, 0.005815f, 0.003801f, 0.006550f, 0.002022f, 0.007005f, 0.002114f, 0.006263f, 0.003481f, 0.006210f, 0.002428f, 0.006986f, 0.002305f, 0.005688f, 0.003242f, 0.006110f, 0.002999f, 0.007211f, -0.000072f, -0.026229f, -0.128411f, -0.027162f, 0.073011f, 0.039754f, + 0.158734f, 0.009354f, -0.022003f, -0.070048f, -0.137642f, -0.151496f, -0.024418f, 0.066265f, 0.074670f, 0.047899f, -0.075912f, -0.100944f, 0.000253f, -0.011838f, 0.041527f, 0.106551f, 0.054949f, -0.009380f, -0.062526f, -0.085655f, -0.053157f, 0.004068f, -0.052040f, 0.021204f, -0.043370f, -0.021434f, 0.071689f, 0.058921f, 0.053044f, 0.020797f, -0.071526f, -0.019775f, -0.068366f, -0.052950f, -0.026856f, 0.041426f, -0.006655f, 0.043956f, 0.108231f, 0.112207f, -0.045560f, 0.013274f, -0.081457f, -0.056037f, -0.038337f, -0.006776f, 0.016474f, 0.065200f, 0.070227f, 0.095708f, 0.068855f, 0.024688f, -0.046135f, -0.043163f, -0.009346f, 0.030970f, -0.076788f, 0.005981f, 0.092133f, 0.072901f, -0.017939f, 0.098679f, 0.088930f, 0.049831f, 0.092897f, -0.173704f, 0.042468f, -0.049209f, -0.052541f, 0.030087f, -0.027675f, -0.002279f, 0.176571f, 0.148671f, 0.053742f, -0.045656f, -0.002964f, -0.069599f, -0.012601f, -0.093668f, -0.032204f, -0.015609f, 0.037337f, 0.115102f, 0.061352f, 0.024251f, 0.021620f, -0.018380f, -0.056540f, -0.074145f, 0.001360f, -0.048914f, 0.040432f, -0.004161f, 0.000891f, 0.044195f, + 0.037224f, 0.013705f, 0.038519f, 0.013293f, 0.059521f, -0.040605f, 0.000388f, -0.044785f, 0.019880f, -0.038948f, -0.034547f, 0.006335f, -0.009559f, 0.031094f, 0.056388f, 0.003448f, -0.049819f, -0.085969f, -0.024634f, -0.049807f, 0.007035f, 0.022433f, 0.042085f, -0.033200f, -0.010461f, 0.001559f, -0.000565f, 0.043643f, 0.003510f, -0.223742f, -0.253650f, -0.272722f, -0.275538f, -0.373533f, -0.022383f, -0.133956f, -0.043441f, 0.049267f, 0.124524f, 0.174795f, 0.180318f, 0.368694f, 0.395369f, 0.321822f, 0.239355f, 0.253546f, 0.241776f, 0.093061f, -0.036196f, -0.166499f, -0.166790f, -0.255873f, -0.083266f, -0.138749f, -0.103478f, -0.009850f, -0.217202f, -0.062597f, -0.194018f, -0.052926f, -0.222907f, -0.210165f, -0.097112f, -0.173540f, -0.017859f, -0.087727f, -0.081079f, -0.129808f, -0.085960f, -0.195924f, -0.138525f, -0.073688f, -0.067535f, -0.103716f, -0.063578f, -0.007768f, -0.083929f, 0.028073f, 0.125128f, -0.097714f, 0.148051f, 0.088663f, 0.197665f, 0.198510f, 0.173357f, 0.213753f, 0.180621f, 0.298213f, 0.296289f, 0.236204f, 0.316161f, 0.271023f, 0.414102f, 0.407706f, 0.480568f, 0.373925f, + 0.402597f, 0.438635f, 0.396309f, 0.473780f, 0.351142f, 0.513048f, 0.410115f, 0.156174f, 0.200518f, 0.052710f, 0.079409f, -0.277810f, -0.233060f, -0.260302f, -0.276910f, -0.292092f, -0.377200f, -0.355294f, -0.390370f, -0.428780f, -0.503898f, -0.421317f, -0.385639f, -0.428820f, -0.467483f, -0.557530f, -0.447083f, -0.495214f, -0.498287f, -0.378243f, -0.426213f, -0.246089f, -0.305222f, -0.209075f, -0.193935f, -0.102873f, -0.075056f, -0.106507f, -0.018268f, 0.050038f, 0.242161f, 0.229264f, 0.166648f, 0.188188f, 0.202694f, 0.274524f, 0.281446f, 0.304139f, 0.321027f, 0.275875f, 0.280574f, 0.205947f, 0.291942f, 0.298272f, 0.227483f, 0.159787f, 0.123659f, 0.179173f, 0.177572f, 0.137964f, 0.082973f, 0.045703f, 0.069948f, -0.018279f, 0.009720f, -0.032787f, -0.025698f, -0.132537f, -0.121000f, -0.088472f, -0.060899f, -0.080722f, -0.061506f, -0.029614f, -0.024027f, -0.032078f, -0.059325f, -0.054932f, -0.026913f, -0.035384f, -0.023017f, -0.019787f, 0.004278f, 0.009250f, 0.002038f, -0.009436f, -0.002146f, 0.004780f, -0.002912f, -0.003020f, 0.003564f, 0.006461f, 0.013072f, 0.003552f, -0.003315f, -0.000618f, + 0.004457f, 0.003725f, -0.002958f, -0.001273f, 0.007081f, 0.004459f, 0.003749f, 0.004131f, 0.007547f, 0.006224f, 0.001730f, -0.000594f, 0.005333f, 0.005085f, 0.005611f, -0.001245f, -0.005906f, -0.003001f, 0.002105f, 0.007279f, 0.008683f, 0.004805f, 0.001802f, -0.004438f, -0.007026f, -0.005232f, -0.005174f, -0.010264f, -0.016768f, -0.021177f, -0.021696f, -0.022457f, -0.024540f, -0.026876f, -0.031217f, -0.034854f, -0.037673f, -0.037322f, -0.033849f, -0.031160f, -0.031244f, -0.030277f, -0.028528f, -0.018498f, -0.012673f, -0.009236f, -0.001988f, 0.004932f, 0.010546f, 0.016213f, 0.022183f, 0.025512f, 0.029653f, 0.029484f, 0.028466f, 0.028315f, 0.025408f, 0.021061f, 0.016310f, 0.013052f, 0.010586f, 0.007808f, 0.005354f, 0.003235f, 0.001934f, 0.000905f, 0.000685f, 0.000426f, 0.000309f, 0.000205f, 0.000113f, 0.000106f, 0.000195f, 0.000328f, 0.000398f} + }, + { + {-0.005191f, 0.009873f, -0.000298f, 0.004109f, 0.001650f, -0.008456f, -0.006335f, 0.002327f, -0.005698f, -0.008503f, 0.005001f, -0.000923f, 0.001377f, -0.004840f, 0.003723f, 0.000446f, -0.007521f, -0.000251f, 0.008889f, 0.007239f, -0.005373f, -0.009544f, -0.008687f, 0.001387f, -0.001928f, -0.001628f, -0.007379f, 0.008228f, -0.002067f, 0.002386f, -0.003313f, -0.001976f, -0.000650f, 0.003178f, -0.002116f, -0.004189f, -0.016311f, 0.005673f, -0.001150f, 0.005395f, 0.003243f, 0.002321f, -0.000330f, 0.011031f, 0.002150f, 0.002278f, 0.001621f, -0.005505f, -0.003485f, -0.000428f, 0.000898f, -0.005512f, -0.001232f, 0.002272f, -0.000676f, -0.005204f, -0.002693f, 0.000285f, 0.005272f, -0.008017f, -0.010900f, -0.013537f, 0.004919f, 0.007896f, 0.000885f, 0.006546f, 0.004832f, 0.000996f, -0.012396f, -0.000237f, -0.003174f, -0.004295f, 0.000312f, 0.000785f, 0.005271f, -0.001028f, 0.007461f, 0.005302f, -0.002235f, -0.007394f, -0.003544f, -0.001250f, 0.002006f, 0.000658f, 0.002510f, 0.002888f, 0.005239f, -0.000024f, -0.000397f, -0.002337f, -0.002003f, -0.001921f, -0.000798f, -0.004090f, -0.001876f, -0.002277f, + 0.001394f, -0.000193f, -0.000430f, -0.001200f, 0.002052f, -0.002856f, 0.005936f, 0.007753f, -0.001756f, -0.000075f, -0.011028f, 0.009886f, -0.012636f, 0.004920f, 0.021336f, -0.004537f, -0.007919f, 0.001241f, 0.011137f, 0.001214f, -0.003152f, -0.001509f, -0.003177f, -0.001983f, -0.010009f, -0.003867f, 0.004946f, -0.007919f, -0.004543f, 0.000489f, -0.000437f, 0.008831f, -0.005365f, 0.001683f, -0.002076f, 0.001964f, -0.001117f, -0.005091f, 0.009735f, 0.016603f, 0.004193f, -0.000896f, -0.003106f, 0.017968f, 0.000832f, -0.007444f, 0.000498f, -0.013312f, 0.000045f, 0.007028f, -0.010262f, -0.001248f, 0.002195f, -0.008135f, -0.002471f, 0.009496f, 0.001337f, -0.000953f, 0.009100f, -0.005996f, -0.009585f, 0.005485f, 0.003587f, -0.006622f, -0.003324f, -0.007093f, -0.008402f, -0.008960f, -0.005005f, -0.005092f, 0.007310f, 0.005279f, 0.001423f, -0.000132f, -0.005091f, 0.004784f, -0.001113f, -0.003388f, 0.006189f, 0.006934f, -0.004905f, -0.000895f, -0.002328f, -0.003036f, 0.000946f, 0.007938f, -0.003982f, 0.001847f, 0.007467f, 0.005040f, -0.001736f, 0.001991f, -0.001329f, -0.000112f, 0.003152f, -0.000354f, + 0.000028f, 0.003330f, -0.003479f, 0.001502f, 0.000687f, -0.001004f, -0.003210f, 0.002543f, 0.000253f, -0.001316f, 0.000722f, 0.000459f, -0.001171f, 0.000475f, -0.000616f, -0.000947f, -0.001894f, 0.010940f, -0.015828f, -0.010434f, -0.003731f, -0.002262f, 0.000586f, 0.002089f, -0.015090f, 0.010560f, -0.004732f, 0.003482f, 0.002217f, 0.003545f, 0.006663f, -0.000002f, -0.002141f, -0.004993f, 0.010949f, -0.000817f, 0.007135f, 0.013503f, -0.002870f, 0.011487f, 0.009813f, -0.008420f, 0.005708f, 0.005766f, 0.006192f, -0.014891f, -0.001433f, 0.000934f, -0.004642f, -0.009351f, 0.000198f, 0.010999f, -0.002521f, -0.004654f, -0.003634f, 0.003391f, 0.010214f, 0.005057f, -0.005138f, -0.000049f, -0.004228f, 0.000469f, -0.001309f, -0.005028f, 0.009544f, -0.012229f, -0.010079f, -0.009274f, 0.002933f, -0.001274f, -0.000279f, -0.011409f, -0.012027f, 0.002977f, -0.000199f, 0.000717f, -0.001136f, -0.000610f, -0.008963f, -0.005307f, -0.009805f, 0.001964f, 0.008509f, -0.002604f, 0.007557f, 0.001434f, 0.006726f, -0.014374f, 0.000120f, 0.002109f, -0.004746f, -0.002146f, 0.001983f, -0.005105f, -0.000572f, 0.003799f, + 0.004136f, -0.003170f, -0.009574f, 0.008506f, 0.001391f, 0.000232f, -0.002067f, -0.001208f, -0.007652f, 0.000363f, 0.000595f, -0.001336f, 0.001456f, 0.000270f, -0.002658f, 0.001183f, 0.001314f, -0.000759f, -0.001044f, -0.000366f, -0.000394f, -0.000504f, 0.000492f, 0.004077f, 0.000135f, -0.001204f, 0.003429f, 0.001514f, -0.000196f, -0.001107f, -0.000264f, -0.000552f, -0.005588f, 0.001195f, -0.001240f, 0.009202f, 0.014720f, 0.000798f, -0.005804f, -0.012789f, 0.005635f, 0.003612f, 0.003358f, 0.015608f, -0.010449f, 0.000222f, 0.001766f, -0.002996f, -0.005304f, 0.002190f, 0.000840f, 0.009356f, 0.020795f, -0.001982f, 0.003472f, 0.008622f, -0.003953f, 0.007678f, 0.013461f, -0.009636f, -0.000509f, -0.003674f, -0.000352f, 0.005942f, -0.010761f, 0.011328f, 0.002400f, 0.000004f, 0.005885f, -0.001122f, 0.008209f, -0.004661f, -0.002083f, -0.002480f, 0.012984f, 0.006001f, 0.008212f, -0.001709f, 0.006739f, -0.012875f, 0.014586f, -0.005827f, 0.005641f, -0.013544f, 0.005261f, 0.009630f, 0.017811f, 0.006482f, 0.003199f, -0.011937f, -0.004685f, 0.003154f, -0.009107f, -0.010757f, -0.002682f, 0.021121f, + 0.024428f, 0.004609f, 0.005627f, -0.007119f, -0.003273f, 0.013645f, 0.002524f, 0.005919f, -0.000990f, 0.004086f, 0.003527f, -0.001914f, 0.002986f, -0.002106f, 0.002212f, 0.001564f, 0.008527f, 0.006976f, -0.011063f, 0.009629f, -0.003348f, 0.004910f, -0.003593f, 0.003589f, -0.003057f, -0.004136f, -0.000235f, -0.006552f, 0.000858f, 0.004660f, 0.000920f, 0.002368f, -0.002457f, -0.002933f, -0.001632f, 0.001115f, 0.000045f, 0.001014f, -0.000576f, 0.000686f, -0.001986f, 0.000621f, 0.000541f, 0.003391f, 0.000048f, 0.002294f, -0.001262f, 0.002052f, -0.002583f, 0.000240f, 0.000245f, 0.002445f, 0.010195f, 0.000113f, 0.001122f, 0.014369f, -0.012420f, -0.014604f, 0.022317f, -0.006005f, -0.003761f, 0.014517f, 0.008640f, 0.000902f, -0.025948f, 0.027678f, -0.005256f, -0.003709f, -0.003076f, -0.001708f, 0.000961f, 0.001531f, 0.008569f, 0.012805f, 0.008423f, -0.002060f, 0.014446f, 0.009056f, 0.004551f, 0.003727f, -0.005498f, 0.006459f, -0.010613f, 0.008172f, -0.001726f, 0.003303f, -0.008999f, -0.013102f, 0.001536f, -0.001837f, 0.004615f, 0.007574f, -0.003946f, -0.012555f, -0.007315f, 0.002830f, + -0.014924f, 0.009369f, 0.002874f, -0.023840f, 0.010577f, 0.001420f, 0.006010f, 0.001317f, 0.003582f, 0.003796f, -0.001053f, -0.006881f, -0.005871f, -0.016345f, -0.011930f, -0.006802f, -0.008313f, -0.002037f, 0.000888f, -0.012027f, -0.016776f, -0.002714f, 0.010799f, 0.018498f, -0.001017f, -0.012691f, 0.002012f, -0.019830f, 0.001290f, -0.001566f, -0.007763f, 0.016310f, 0.015502f, 0.005004f, -0.000648f, -0.004231f, -0.001223f, -0.008924f, 0.004044f, 0.015620f, 0.008441f, 0.012865f, 0.002609f, -0.006224f, 0.006061f, 0.002923f, -0.000475f, 0.001005f, 0.000683f, 0.000133f, 0.002803f, 0.002663f, 0.002782f, -0.001147f, 0.004907f, 0.001071f, 0.009717f, 0.003536f, 0.002587f, 0.000187f, 0.000815f, 0.002295f, -0.000722f, 0.004290f, 0.001664f, 0.001485f, -0.002623f, 0.005394f, 0.001404f, -0.002321f, -0.000865f, 0.004155f, -0.025330f, 0.013070f, -0.004844f, -0.009021f, -0.007153f, -0.008632f, -0.012045f, 0.023186f, -0.029556f, 0.006954f, 0.007134f, 0.009652f, 0.014434f, 0.002355f, 0.004008f, 0.005419f, 0.003909f, 0.002989f, 0.004890f, 0.012687f, 0.002293f, -0.007017f, -0.000014f, -0.001251f, + -0.009097f, -0.008254f, 0.004213f, 0.008488f, 0.009164f, 0.001215f, 0.006535f, -0.015423f, -0.001786f, -0.000249f, -0.000844f, -0.014619f, -0.008734f, -0.005285f, 0.009541f, 0.008523f, -0.000145f, -0.016002f, 0.000094f, -0.008685f, -0.006184f, -0.003178f, -0.004290f, 0.009988f, 0.013652f, 0.004101f, 0.014203f, -0.022758f, -0.015861f, 0.007511f, 0.004647f, 0.000725f, 0.003014f, 0.001437f, -0.007354f, -0.014338f, -0.009861f, 0.007522f, -0.006385f, 0.011528f, 0.011418f, -0.004212f, 0.010821f, -0.017252f, -0.008487f, -0.004897f, -0.005785f, 0.001196f, 0.031332f, -0.004565f, 0.008875f, -0.005062f, -0.004514f, -0.003257f, 0.006666f, 0.007056f, -0.000809f, 0.005681f, 0.003953f, -0.009841f, 0.002716f, 0.000674f, 0.004217f, 0.000835f, 0.000539f, -0.005003f, 0.003182f, -0.000285f, 0.003225f, 0.000941f, 0.001684f, -0.000996f, -0.001840f, 0.000848f, -0.002823f, -0.004200f, 0.001428f, -0.002343f, -0.003502f, -0.001139f, 0.001091f, 0.001300f, 0.001431f, 0.001435f, -0.000171f, 0.001000f, 0.002253f, 0.001746f, 0.000659f, 0.000434f, -0.000696f, -0.001296f, 0.002107f, 0.001050f, -0.000166f, 0.001438f, + 0.025884f, -0.004995f, 0.000694f, 0.010892f, -0.024668f, 0.016932f, 0.008580f, -0.013910f, 0.015411f, 0.017243f, 0.005779f, -0.026632f, 0.016442f, 0.000701f, -0.002525f, 0.013461f, 0.014543f, -0.000841f, -0.004313f, 0.000411f, -0.010345f, 0.009653f, -0.005663f, -0.009858f, -0.020722f, 0.004822f, -0.022522f, 0.006029f, -0.005531f, -0.002532f, 0.006476f, -0.018354f, -0.007550f, 0.015234f, -0.001346f, -0.007133f, 0.009317f, 0.000605f, -0.008019f, 0.006892f, 0.002489f, 0.000664f, -0.003447f, 0.005253f, -0.011180f, -0.001185f, -0.016320f, 0.015413f, 0.015408f, -0.019216f, 0.012817f, -0.013713f, -0.005187f, 0.013244f, 0.018525f, -0.001360f, -0.009252f, 0.005591f, -0.001181f, 0.002659f, -0.022679f, -0.017933f, 0.003562f, 0.003201f, -0.004917f, -0.004673f, 0.005862f, -0.000714f, -0.008049f, 0.009565f, -0.009276f, 0.003230f, 0.006916f, -0.001604f, 0.010856f, -0.010913f, 0.010977f, -0.000093f, 0.017476f, -0.006018f, 0.005293f, 0.009857f, 0.001101f, -0.006290f, -0.001803f, -0.000669f, 0.005113f, -0.001733f, -0.008250f, 0.006919f, 0.001489f, -0.003472f, 0.003048f, -0.002343f, -0.000122f, -0.003261f, + -0.000947f, 0.002349f, -0.002776f, 0.001754f, 0.004777f, -0.002510f, 0.001148f, 0.000309f, -0.001609f, 0.003010f, 0.000793f, 0.002558f, -0.003885f, 0.001545f, -0.003977f, -0.004553f, 0.001665f, -0.000749f, 0.001820f, 0.001880f, 0.000551f, 0.005520f, 0.007208f, 0.003163f, -0.009391f, 0.018222f, -0.006186f, 0.008886f, -0.018322f, -0.001263f, -0.004808f, -0.016630f, 0.000619f, 0.011812f, 0.020965f, 0.027417f, -0.015556f, -0.000399f, -0.019399f, -0.001416f, -0.012341f, 0.011090f, -0.011552f, -0.022884f, 0.001522f, -0.014654f, -0.001338f, 0.019043f, -0.011230f, -0.011206f, 0.020435f, 0.000667f, 0.003543f, -0.002097f, -0.011957f, 0.005130f, 0.004389f, 0.024616f, -0.016923f, 0.012091f, -0.014347f, 0.003622f, 0.004809f, -0.014159f, -0.008702f, 0.023638f, 0.006492f, -0.017522f, -0.004497f, -0.006390f, -0.014060f, -0.000560f, 0.023174f, 0.012428f, 0.016137f, 0.003714f, 0.006474f, -0.021083f, -0.003019f, 0.026888f, 0.002163f, -0.016657f, 0.008966f, 0.008912f, -0.012213f, -0.010634f, -0.005869f, -0.027556f, -0.004220f, 0.008225f, 0.013666f, 0.024255f, -0.006037f, -0.013220f, -0.003799f, -0.008217f, + 0.019701f, -0.007285f, -0.017135f, -0.011669f, -0.005038f, -0.002313f, -0.005286f, -0.009894f, 0.021444f, -0.012241f, -0.001457f, 0.002007f, 0.001058f, 0.007021f, 0.004392f, -0.006277f, -0.008436f, 0.006393f, 0.007673f, 0.008110f, -0.001817f, 0.003685f, -0.002207f, -0.001305f, 0.003644f, -0.000764f, -0.003725f, 0.003837f, 0.001815f, -0.000080f, -0.002429f, -0.000793f, -0.006228f, 0.000615f, -0.001523f, -0.005350f, -0.002718f, 0.002479f, 0.002160f, 0.000132f, 0.002531f, 0.011870f, -0.040805f, -0.028100f, -0.017977f, 0.002245f, -0.034173f, 0.005209f, 0.025564f, 0.008515f, 0.026320f, -0.013987f, -0.006396f, -0.002763f, -0.013536f, -0.005017f, -0.020367f, 0.036456f, 0.020863f, 0.014584f, -0.030631f, -0.005857f, -0.009792f, -0.019911f, 0.007014f, -0.002022f, 0.006585f, -0.024752f, -0.001607f, -0.002144f, -0.017733f, 0.010455f, 0.003056f, 0.018305f, 0.007435f, -0.015162f, 0.024117f, -0.011275f, 0.009851f, 0.005136f, -0.000096f, 0.019080f, 0.017768f, 0.004533f, -0.022805f, 0.028029f, -0.014040f, 0.020119f, 0.009248f, -0.010295f, -0.011423f, 0.022550f, 0.003412f, -0.002543f, 0.005965f, -0.018909f, + -0.006689f, 0.011023f, -0.001472f, 0.019949f, -0.011372f, -0.017894f, 0.007485f, 0.005159f, 0.000731f, 0.019839f, 0.008640f, 0.004093f, -0.012487f, 0.014458f, 0.005766f, -0.010951f, -0.001391f, -0.001109f, -0.006211f, -0.004537f, -0.005216f, 0.008725f, 0.021840f, 0.036657f, 0.017135f, -0.006098f, 0.001991f, -0.008325f, 0.008554f, 0.011330f, -0.000040f, -0.009274f, -0.005357f, -0.012128f, 0.007668f, -0.006593f, 0.001932f, -0.005691f, -0.001433f, 0.008192f, -0.000816f, 0.000954f, -0.007276f, 0.008013f, -0.004038f, -0.003488f, 0.004515f, -0.007227f, 0.008158f, -0.005520f, 0.004443f, -0.003880f, -0.000584f, 0.001867f, -0.005284f, -0.003801f, -0.002222f, -0.008807f, -0.008750f, -0.003841f, -0.000295f, -0.003072f, 0.007241f, 0.006596f, 0.003991f, -0.026332f, 0.034202f, 0.013884f, 0.039184f, -0.018304f, -0.021825f, 0.037318f, 0.000774f, -0.004405f, 0.007787f, 0.002403f, 0.021637f, 0.029004f, 0.003346f, -0.027896f, -0.044388f, 0.005670f, -0.012615f, 0.002193f, 0.000742f, -0.019481f, -0.001715f, 0.023424f, 0.019049f, 0.014891f, 0.030283f, -0.007432f, 0.025583f, -0.018800f, 0.022599f, 0.007126f, + 0.017398f, -0.012472f, 0.031029f, 0.017679f, 0.022523f, -0.037011f, -0.000675f, 0.032774f, 0.018428f, 0.005571f, -0.008385f, 0.049540f, 0.020609f, -0.020067f, -0.012584f, 0.011736f, -0.019573f, -0.002312f, -0.009655f, 0.002126f, 0.041491f, 0.043527f, 0.031441f, 0.011281f, -0.000129f, 0.016109f, -0.015093f, -0.004132f, 0.017522f, -0.019111f, 0.043966f, 0.027281f, 0.021327f, 0.008164f, -0.002206f, -0.021431f, 0.025904f, 0.000526f, 0.022534f, -0.010719f, 0.008455f, -0.015244f, -0.008986f, -0.000805f, 0.011123f, -0.017851f, 0.040902f, 0.017421f, -0.005041f, -0.020699f, -0.039494f, 0.018783f, 0.002932f, -0.013094f, -0.001679f, 0.004430f, -0.009598f, 0.005269f, 0.014575f, -0.003002f, -0.005660f, 0.000080f, -0.003670f, -0.004271f, 0.002925f, -0.005096f, -0.003930f, -0.006836f, 0.006272f, 0.003471f, -0.010275f, 0.005136f, 0.005811f, 0.005725f, -0.000680f, -0.003267f, -0.001582f, -0.000439f, 0.002778f, -0.001197f, 0.001929f, -0.006158f, 0.009077f, -0.012349f, -0.000280f, 0.003790f, 0.010236f, 0.001041f, 0.043427f, -0.001970f, -0.020650f, -0.009030f, -0.016067f, -0.000117f, -0.026104f, 0.007428f, + -0.022412f, 0.013511f, 0.003520f, -0.005700f, -0.017510f, -0.021102f, -0.032173f, -0.033470f, -0.009506f, 0.029939f, -0.001623f, -0.018742f, 0.008516f, -0.017857f, 0.014650f, -0.015196f, 0.028190f, -0.027899f, 0.007229f, -0.019666f, -0.019977f, -0.003347f, 0.004114f, -0.005581f, 0.013645f, -0.040382f, 0.017053f, 0.004337f, -0.009203f, -0.002427f, -0.002075f, -0.019803f, -0.031736f, -0.034319f, 0.025610f, 0.012714f, -0.012920f, 0.021971f, 0.001345f, -0.008663f, -0.024874f, -0.053311f, -0.043517f, 0.025359f, -0.007056f, 0.000890f, -0.004639f, -0.002208f, -0.001886f, -0.036035f, 0.014496f, -0.042634f, -0.022219f, 0.002256f, -0.000663f, -0.008905f, -0.005082f, -0.005455f, 0.044976f, -0.013448f, -0.013741f, -0.011771f, 0.047035f, -0.008127f, -0.017903f, 0.029579f, -0.022328f, -0.014447f, -0.018271f, -0.015803f, -0.059035f, 0.012152f, 0.010291f, -0.019856f, -0.002183f, 0.014122f, -0.007071f, -0.005236f, -0.010410f, -0.010085f, -0.000712f, -0.005228f, -0.004559f, 0.020959f, -0.000986f, -0.002152f, 0.014690f, 0.016670f, -0.007458f, -0.005948f, -0.000613f, -0.002874f, 0.004986f, -0.010083f, 0.001904f, 0.001206f, + 0.002650f, -0.006000f, -0.006666f, -0.003040f, 0.007570f, -0.002772f, -0.004750f, -0.000773f, 0.005087f, -0.013085f, -0.001282f, 0.007366f, 0.001271f, -0.005252f, 0.007810f, -0.004602f, 0.007019f, -0.000095f, 0.006753f, 0.006252f, 0.007300f, -0.011517f, -0.000340f, 0.000066f, -0.062966f, -0.047453f, -0.027012f, 0.055643f, -0.002488f, -0.008841f, -0.006435f, -0.003978f, -0.017907f, 0.019954f, 0.015425f, 0.049874f, -0.045365f, -0.008493f, 0.014345f, -0.032982f, -0.013092f, -0.011390f, 0.057254f, -0.000400f, 0.013394f, 0.029453f, 0.002872f, 0.028373f, -0.029908f, -0.037430f, -0.025129f, -0.006503f, -0.006226f, 0.005004f, 0.018019f, -0.000386f, -0.031717f, -0.021525f, -0.001442f, -0.016532f, -0.035626f, 0.032478f, -0.005170f, -0.017335f, -0.000063f, 0.010798f, 0.010307f, 0.006516f, -0.016037f, 0.003815f, -0.033163f, -0.014014f, -0.049256f, 0.023779f, 0.015035f, -0.005258f, -0.015399f, 0.018845f, -0.024509f, -0.005685f, 0.053360f, -0.004998f, 0.045225f, 0.020818f, 0.012172f, -0.011192f, -0.056649f, -0.022943f, -0.010862f, -0.029878f, -0.022792f, -0.013892f, 0.025407f, -0.010933f, 0.000594f, -0.022107f, + 0.048356f, -0.016599f, 0.019938f, 0.014231f, -0.033008f, -0.012564f, 0.007247f, 0.031294f, 0.055778f, 0.047170f, 0.020069f, -0.002426f, 0.019102f, 0.000896f, 0.001592f, -0.010182f, 0.005554f, -0.010540f, -0.007967f, 0.000579f, 0.003176f, -0.006033f, -0.009191f, -0.015539f, -0.013159f, 0.007769f, 0.005218f, 0.006497f, -0.006185f, -0.001685f, -0.032660f, 0.000222f, -0.015169f, -0.006189f, 0.005683f, 0.005368f, 0.001663f, 0.014300f, 0.000103f, -0.001015f, 0.001094f, -0.004525f, -0.023830f, -0.001328f, -0.013672f, 0.007630f, -0.012179f, -0.012015f, 0.001207f, 0.015979f, 0.006535f, -0.003330f, -0.009142f, -0.007182f, -0.004225f, 0.009066f, 0.001750f, -0.002638f, -0.006222f, 0.031765f, -0.002625f, -0.019728f, 0.019208f, 0.010549f, 0.067584f, 0.001327f, -0.000234f, 0.023148f, -0.031922f, -0.022384f, -0.007111f, 0.004605f, 0.010148f, -0.009354f, 0.028080f, -0.018857f, 0.003112f, 0.026248f, 0.011375f, 0.009072f, 0.009216f, -0.021202f, 0.002927f, -0.001654f, -0.010733f, 0.003132f, -0.015489f, -0.027066f, -0.014437f, 0.001006f, -0.026461f, 0.032078f, -0.003244f, 0.002265f, -0.005362f, 0.021747f, + 0.024912f, -0.005909f, -0.019777f, -0.002794f, -0.006840f, 0.029286f, 0.038161f, -0.028732f, -0.019783f, -0.015047f, 0.008991f, 0.027871f, -0.026601f, 0.007595f, -0.001861f, 0.005022f, -0.014168f, -0.019060f, 0.004941f, 0.018022f, 0.002851f, -0.024620f, 0.020656f, 0.061631f, -0.020968f, 0.010624f, -0.005396f, 0.003804f, 0.023535f, 0.005803f, 0.027871f, 0.022811f, -0.006935f, 0.035515f, 0.065814f, 0.001648f, -0.025223f, 0.064032f, -0.001949f, 0.061176f, -0.022180f, -0.031506f, 0.028055f, 0.010016f, 0.042805f, -0.008112f, 0.060549f, 0.018271f, 0.013548f, -0.019374f, 0.028346f, 0.002322f, 0.002270f, 0.005752f, 0.023040f, 0.003922f, 0.026407f, 0.002232f, 0.006090f, -0.000132f, 0.003451f, 0.003267f, 0.008027f, -0.003809f, 0.009078f, 0.021685f, 0.008938f, 0.009342f, 0.002642f, 0.005030f, -0.013239f, 0.010041f, 0.003721f, 0.004005f, 0.007624f, 0.003249f, -0.001348f, -0.001256f, 0.005847f, -0.007484f, 0.001687f, -0.000803f, 0.005166f, 0.015126f, 0.005342f, -0.001651f, -0.008709f, 0.007433f, 0.001007f, 0.000930f, -0.001995f, 0.007212f, 0.004432f, -0.013699f, 0.012057f, -0.043822f, + -0.014625f, 0.066454f, 0.010528f, -0.031826f, 0.008553f, -0.024311f, 0.008023f, 0.012090f, -0.006131f, -0.036370f, -0.014034f, -0.053982f, 0.021419f, 0.017403f, -0.021067f, 0.018936f, 0.030259f, 0.005491f, -0.008892f, -0.031922f, 0.006496f, 0.048793f, -0.024340f, 0.028917f, 0.027914f, 0.003590f, 0.020874f, 0.018932f, 0.000398f, 0.023827f, 0.016001f, -0.048261f, -0.007204f, -0.020028f, 0.047864f, 0.031097f, -0.034200f, 0.019767f, -0.004340f, 0.024528f, 0.080178f, -0.008629f, -0.014072f, 0.007043f, 0.072141f, 0.028767f, -0.004873f, 0.008241f, 0.012749f, 0.040836f, 0.036583f, -0.026353f, 0.044007f, 0.019280f, 0.040779f, -0.030226f, 0.004072f, 0.007152f, 0.008420f, 0.024320f, 0.037430f, -0.025702f, -0.019845f, 0.028762f, 0.014646f, -0.011323f, -0.010979f, -0.001073f, 0.045043f, -0.086655f, 0.019854f, -0.031592f, -0.022695f, 0.002901f, -0.029533f, -0.028441f, -0.004154f, -0.047984f, 0.033511f, -0.011200f, 0.035433f, -0.002565f, 0.030982f, -0.021882f, 0.012357f, -0.000554f, 0.010147f, -0.002287f, -0.012183f, 0.008105f, 0.006507f, 0.006188f, 0.015084f, -0.008801f, 0.007583f, 0.009105f, + -0.008848f, -0.000592f, 0.014452f, 0.003975f, -0.007905f, 0.014787f, -0.010740f, 0.000726f, 0.008411f, -0.011901f, -0.007899f, 0.001824f, 0.003224f, 0.016585f, 0.014976f, 0.009209f, 0.005454f, -0.003270f, 0.011713f, 0.001072f, 0.005192f, 0.003582f, 0.009759f, 0.010205f, -0.009713f, -0.009803f, -0.015739f, 0.010832f, 0.005042f, -0.000649f, 0.004065f, -0.001449f, -0.016943f, -0.016258f, 0.010895f, 0.014239f, 0.015084f, -0.019211f, -0.022839f, -0.058760f, 0.002526f, -0.032913f, 0.053123f, 0.006228f, -0.013941f, -0.008192f, 0.031852f, 0.008919f, 0.051801f, 0.020651f, -0.013553f, 0.001857f, 0.010890f, 0.023321f, 0.038978f, -0.043985f, -0.037855f, -0.008253f, 0.065614f, -0.020552f, 0.008353f, 0.018395f, 0.028750f, 0.034555f, 0.049894f, 0.042759f, 0.003796f, -0.010627f, 0.046617f, 0.003266f, -0.029672f, 0.015438f, -0.027517f, 0.019537f, 0.005008f, -0.024929f, 0.022522f, 0.087270f, 0.048889f, -0.031340f, -0.023368f, -0.003579f, -0.024235f, -0.024495f, -0.020741f, 0.014651f, -0.011767f, -0.020914f, 0.004672f, 0.023704f, 0.014534f, 0.007577f, 0.034570f, 0.008813f, -0.008200f, 0.035942f, + 0.030785f, -0.026726f, 0.018007f, -0.030120f, -0.023020f, -0.026764f, 0.000109f, -0.064014f, -0.018627f, 0.043762f, 0.032841f, -0.015603f, 0.022129f, -0.005821f, 0.001796f, -0.039552f, 0.009016f, 0.022940f, 0.037468f, 0.020421f, 0.024911f, 0.013001f, 0.012070f, -0.017195f, -0.014411f, -0.018263f, 0.010239f, -0.004383f, 0.001693f, 0.006977f, 0.008098f, -0.001386f, 0.019570f, -0.006645f, -0.008165f, -0.009794f, 0.013842f, -0.018292f, -0.006842f, -0.022430f, -0.000842f, 0.003656f, -0.009075f, 0.000204f, -0.004860f, 0.012953f, -0.002256f, -0.029420f, 0.000809f, -0.002655f, 0.008956f, 0.010558f, 0.004043f, 0.012082f, -0.000397f, 0.020075f, 0.004679f, -0.002366f, -0.000115f, 0.001539f, 0.001337f, 0.000319f, 0.008481f, -0.005433f, -0.024324f, 0.019267f, 0.015472f, -0.030779f, -0.013406f, -0.066380f, -0.005692f, 0.054489f, 0.000247f, -0.040754f, 0.006084f, 0.001404f, -0.027460f, 0.036150f, 0.020788f, -0.015219f, 0.010041f, 0.016107f, 0.022237f, 0.012069f, 0.003540f, -0.016777f, 0.008492f, 0.012525f, 0.034648f, 0.051818f, -0.014743f, -0.035759f, -0.018923f, 0.009453f, 0.010531f, 0.042536f, + -0.016832f, -0.034283f, -0.026645f, -0.027545f, 0.051760f, 0.094971f, 0.034341f, 0.004230f, 0.104442f, 0.005733f, 0.043099f, 0.024217f, -0.009166f, -0.022554f, 0.018284f, -0.030336f, -0.020172f, 0.020648f, 0.001091f, -0.063741f, -0.065736f, -0.016966f, 0.026986f, -0.034731f, -0.043129f, -0.024181f, -0.032014f, -0.026709f, 0.021775f, -0.018797f, -0.048849f, 0.021181f, 0.001599f, -0.014795f, 0.011039f, -0.011590f, 0.024158f, 0.097663f, -0.060541f, 0.048899f, -0.068789f, -0.039509f, -0.023006f, -0.016182f, 0.037773f, 0.014691f, 0.017961f, -0.008100f, 0.020860f, 0.043416f, 0.010746f, 0.000314f, 0.000285f, -0.013530f, 0.005783f, 0.011362f, 0.035072f, -0.002871f, -0.017800f, -0.003370f, 0.026731f, 0.016598f, -0.007908f, 0.009472f, 0.011987f, -0.010532f, -0.000606f, -0.004962f, 0.033628f, 0.011479f, 0.015808f, 0.011117f, 0.009439f, -0.014779f, -0.010149f, -0.003029f, 0.008447f, -0.017923f, 0.002262f, -0.017699f, -0.011867f, 0.001878f, 0.001561f, -0.020238f, 0.018754f, 0.025060f, -0.002778f, -0.004211f, 0.015554f, -0.000688f, -0.007010f, 0.022042f, -0.009652f, 0.014997f, 0.001227f, 0.052960f, + 0.033973f, 0.030597f, 0.045075f, -0.053167f, 0.020093f, -0.055677f, -0.002470f, 0.072137f, 0.064155f, 0.027175f, 0.000758f, 0.012249f, 0.007943f, -0.021051f, 0.016547f, 0.020563f, -0.091477f, 0.005304f, 0.013184f, 0.027454f, -0.033663f, -0.051672f, 0.037463f, 0.017531f, 0.009369f, -0.022262f, 0.044482f, -0.006586f, 0.034534f, 0.028566f, -0.003655f, 0.004098f, -0.010304f, 0.034876f, -0.021085f, 0.010427f, 0.020972f, -0.002164f, 0.044772f, 0.025717f, -0.002712f, 0.022748f, 0.026026f, -0.001680f, -0.020487f, -0.068774f, -0.012806f, 0.006979f, -0.040713f, 0.003586f, 0.032166f, -0.062536f, -0.027771f, 0.009204f, -0.026908f, -0.004671f, 0.032662f, 0.001561f, -0.023384f, -0.030652f, 0.013337f, 0.012805f, -0.063038f, -0.021320f, -0.005372f, -0.000093f, 0.039351f, 0.018995f, 0.004274f, 0.068644f, -0.008835f, -0.002601f, 0.002588f, -0.039728f, 0.037150f, -0.000053f, 0.061054f, -0.024092f, -0.010358f, 0.018031f, 0.009120f, -0.052533f, 0.001579f, -0.007584f, -0.020982f, -0.017242f, 0.006408f, 0.001774f, -0.014831f, -0.001699f, -0.009253f, -0.006843f, 0.001793f, -0.022709f, 0.006334f, 0.002665f, + -0.003220f, 0.008135f, 0.002249f, -0.015136f, 0.002909f, 0.003807f, 0.003823f, -0.014664f, 0.020729f, 0.003676f, 0.027000f, -0.020398f, 0.002438f, -0.017258f, -0.006026f, -0.003525f, -0.030074f, 0.005947f, 0.002703f, -0.001691f, -0.004142f, -0.005858f, 0.011028f, -0.013959f, -0.010514f, 0.012610f, 0.017374f, -0.013655f, -0.017572f, -0.064822f, -0.056522f, 0.010072f, -0.029201f, -0.009312f, -0.043601f, -0.054279f, -0.057075f, -0.037608f, 0.040339f, 0.055117f, 0.001272f, -0.045827f, 0.003409f, 0.001885f, 0.000414f, 0.020800f, 0.035136f, 0.035084f, 0.000690f, -0.023149f, -0.056923f, -0.032782f, -0.049848f, -0.010910f, 0.000037f, 0.003939f, 0.004953f, 0.006734f, 0.013511f, 0.017481f, 0.033259f, -0.052740f, 0.022870f, 0.008912f, 0.011420f, 0.027890f, 0.049624f, 0.055634f, -0.032365f, 0.024641f, -0.044673f, -0.014179f, -0.040549f, -0.004217f, -0.015903f, 0.092655f, 0.032814f, 0.066666f, 0.002660f, -0.036205f, -0.015591f, 0.042584f, 0.046250f, -0.027569f, 0.085577f, -0.036217f, 0.005190f, 0.003466f, 0.014734f, 0.031185f, 0.095223f, -0.006987f, 0.023202f, 0.052795f, 0.011977f, -0.042404f, + 0.026593f, 0.097268f, -0.017962f, -0.023944f, -0.057707f, -0.005128f, 0.035858f, 0.021887f, 0.002878f, -0.055599f, -0.042005f, 0.006689f, -0.043824f, 0.012810f, 0.001798f, -0.055364f, -0.006370f, 0.005310f, -0.008782f, 0.039375f, 0.037188f, 0.000466f, -0.011024f, -0.024066f, 0.025708f, -0.011328f, 0.044774f, -0.010611f, 0.000462f, 0.030379f, 0.030751f, 0.043549f, 0.033817f, -0.025180f, -0.009836f, 0.005529f, -0.008321f, 0.002609f, -0.019015f, -0.018566f, -0.018519f, 0.009224f, -0.022653f, -0.026661f, 0.015473f, 0.019952f, 0.001733f, -0.022966f, 0.014257f, 0.007601f, -0.005660f, -0.006148f, -0.015454f, -0.000709f, 0.008670f, -0.004285f, -0.013824f, -0.018281f, -0.003500f, -0.012150f, 0.014591f, 0.007834f, 0.001241f, -0.016748f, -0.007273f, -0.009509f, 0.019131f, 0.087013f, -0.004198f, -0.000199f, 0.037090f, 0.007428f, -0.119370f, -0.037330f, 0.085276f, 0.028553f, -0.024644f, -0.047394f, -0.006400f, -0.031221f, 0.044117f, 0.023035f, 0.008525f, -0.024990f, -0.056348f, 0.012416f, -0.097274f, -0.011663f, 0.048014f, 0.065386f, -0.007222f, -0.055052f, -0.037371f, -0.113943f, 0.033822f, -0.019582f, + 0.045025f, 0.034045f, -0.032151f, -0.023381f, -0.101029f, -0.075878f, 0.039933f, 0.108214f, 0.043424f, 0.051518f, -0.035661f, -0.063961f, -0.061288f, -0.025602f, 0.092085f, 0.123847f, 0.064786f, -0.143475f, -0.052370f, -0.109898f, -0.058570f, 0.136722f, 0.033590f, 0.030482f, -0.017815f, -0.131255f, -0.107331f, -0.107813f, -0.019770f, 0.010675f, 0.068396f, -0.025078f, 0.052107f, -0.104060f, 0.065135f, 0.026125f, 0.008224f, 0.131267f, 0.008741f, -0.011928f, -0.005947f, -0.177654f, -0.054010f, -0.011906f, 0.056339f, 0.029382f, 0.025934f, 0.078654f, -0.083578f, 0.005572f, -0.055194f, 0.060710f, 0.044067f, 0.004349f, 0.012424f, 0.013047f, -0.009576f, 0.036157f, 0.019636f, 0.009712f, 0.030998f, -0.020773f, -0.038747f, 0.009634f, 0.028385f, 0.042720f, 0.035441f, 0.023287f, -0.029007f, -0.047456f, -0.066329f, -0.005849f, 0.005108f, 0.054050f, 0.067190f, -0.009966f, -0.050571f, -0.087414f, -0.041675f, 0.006324f, 0.067218f, 0.107443f, 0.028308f, -0.104964f, -0.107479f, -0.109982f, -0.000883f, 0.089811f, 0.079351f, 0.083428f, -0.027693f, -0.040590f, -0.077961f, -0.078990f, 0.029268f, 0.053413f, + 0.069939f, 0.035347f, -0.054903f, -0.052177f, -0.029208f, -0.008281f, 0.064912f, 0.034220f, 0.010961f, -0.002985f, -0.039357f, -0.028657f, -0.005645f, -0.007787f, 0.017157f, 0.021355f, 0.009759f, 0.008597f, -0.050738f, 0.099262f, 0.042986f, 0.045836f, -0.121506f, 0.025123f, -0.169516f, -0.037006f, 0.000168f, 0.024636f, 0.010431f, -0.108484f, 0.059718f, -0.029704f, -0.018999f, -0.020010f, -0.022558f, -0.026231f, -0.033084f, 0.071892f, -0.019784f, -0.060885f, 0.020237f, -0.016910f, 0.008163f, 0.034889f, -0.068631f, -0.024357f, -0.003610f, 0.029494f, 0.003650f, 0.078991f, -0.006006f, -0.044529f, 0.104398f, -0.087365f, 0.051984f, -0.080998f, -0.026236f, 0.040116f, -0.065431f, 0.005231f, 0.048641f, -0.024630f, -0.005000f, -0.004542f, 0.062444f, 0.094564f, 0.055212f, -0.031319f, -0.012322f, -0.014357f, 0.006703f, 0.030616f, -0.011748f, -0.018382f, 0.019061f, 0.010055f, -0.170016f, -0.006536f, -0.005568f, 0.025190f, 0.021978f, 0.001441f, 0.001036f, 0.048899f, -0.052987f, -0.013503f, -0.004471f, 0.037325f, -0.136318f, -0.018926f, 0.124672f, -0.031468f, -0.049201f, -0.000174f, 0.094544f, -0.016992f, + -0.021660f, 0.025802f, -0.036131f, -0.038389f, 0.058708f, 0.089942f, -0.031709f, -0.045344f, 0.016245f, 0.027128f, -0.013434f, -0.047832f, -0.000237f, 0.007191f, -0.008994f, -0.006786f, -0.014250f, -0.020724f, 0.010621f, 0.000877f, -0.018444f, -0.003281f, 0.000045f, -0.000523f, -0.016929f, 0.010379f, -0.022929f, -0.024984f, -0.013929f, -0.015214f, 0.024081f, -0.003247f, -0.004114f, -0.000409f, -0.012479f, 0.019361f, -0.024367f, 0.007376f, 0.001525f, 0.001912f, 0.018270f, -0.000736f, -0.029421f, 0.003545f, -0.007166f, 0.005738f, 0.004964f, -0.027174f, 0.043702f, -0.011262f, -0.003214f, -0.004107f, 0.004788f, 0.010860f, -0.000137f, -0.010044f, -0.004687f, -0.021555f, -0.040341f, -0.123822f, -0.101486f, 0.090954f, 0.077741f, 0.008194f, 0.082977f, -0.088427f, -0.004204f, -0.171598f, -0.060300f, -0.029653f, 0.084541f, 0.076969f, 0.047614f, -0.068568f, -0.022904f, -0.002181f, -0.032123f, 0.017245f, 0.031223f, 0.040104f, 0.053415f, -0.039123f, 0.030387f, -0.073803f, -0.046213f, -0.010986f, -0.014854f, 0.002811f, 0.050435f, -0.058112f, 0.051930f, -0.021959f, -0.031700f, -0.012218f, 0.005846f, -0.073186f, + -0.000568f, -0.066191f, -0.023934f, -0.025230f, -0.062588f, 0.088326f, 0.041294f, 0.020658f, 0.022502f, -0.016168f, -0.088185f, -0.131553f, -0.076221f, -0.077061f, 0.053934f, 0.013380f, 0.058051f, 0.080146f, 0.066558f, -0.020684f, 0.016835f, -0.044961f, -0.033967f, -0.041017f, 0.033898f, -0.043524f, -0.000964f, -0.041514f, -0.042528f, -0.026763f, 0.052706f, -0.040804f, -0.010530f, 0.004881f, -0.004754f, -0.059180f, -0.063275f, -0.038395f, -0.021925f, -0.086171f, -0.050502f, 0.013799f, 0.053476f, 0.055240f, 0.070800f, -0.003907f, -0.055558f, -0.072883f, -0.055354f, 0.029451f, 0.010432f, -0.008516f, 0.035083f, 0.086384f, 0.023990f, 0.023464f, -0.020495f, -0.015722f, -0.027030f, -0.016691f, -0.007887f, -0.026801f, -0.005105f, 0.033065f, -0.005775f, -0.013905f, -0.025225f, -0.028896f, -0.031886f, -0.009400f, 0.017386f, -0.008448f, 0.008168f, 0.004409f, -0.058417f, 0.006841f, -0.027189f, 0.025341f, 0.049238f, -0.023823f, 0.034409f, -0.003900f, 0.009359f, 0.001416f, -0.045936f, -0.007245f, -0.014102f, -0.012024f, 0.007974f, -0.000688f, -0.003965f, -0.009921f, -0.020183f, -0.027813f, 0.042273f, -0.028218f, + -0.187015f, -0.253146f, -0.239310f, -0.227573f, -0.272785f, -0.046196f, -0.076033f, 0.047586f, 0.076103f, 0.242885f, 0.155596f, 0.205833f, 0.283671f, 0.312246f, 0.212703f, 0.271205f, 0.153807f, 0.071526f, -0.011798f, -0.051618f, -0.070292f, -0.115326f, -0.113611f, -0.156205f, -0.066798f, -0.057791f, -0.147445f, -0.109860f, -0.105724f, -0.119577f, -0.194794f, -0.132450f, -0.102643f, -0.082047f, -0.150181f, -0.021219f, -0.045736f, -0.062416f, -0.145494f, -0.133769f, -0.111063f, -0.094387f, -0.069386f, -0.028117f, -0.092935f, 0.026246f, 0.046504f, -0.072175f, 0.079434f, 0.111667f, 0.106386f, 0.194957f, 0.157450f, 0.121970f, 0.133290f, 0.135112f, 0.133066f, 0.205100f, 0.229766f, 0.226851f, 0.154111f, 0.244705f, 0.240506f, 0.251776f, 0.254861f, 0.290766f, 0.256888f, 0.272570f, 0.360458f, 0.184517f, 0.185045f, 0.188886f, 0.174688f, -0.008289f, 0.079087f, 0.101231f, -0.059296f, -0.031169f, -0.101244f, -0.183118f, -0.167202f, -0.174984f, -0.316849f, -0.231406f, -0.142231f, -0.246532f, -0.262550f, -0.215403f, -0.231114f, -0.227239f, -0.274540f, -0.250088f, -0.254167f, -0.236302f, -0.222186f, -0.201027f, + -0.187816f, -0.186292f, -0.156519f, -0.130305f, -0.208167f, -0.031123f, -0.094404f, -0.106329f, -0.025544f, -0.012703f, -0.106093f, -0.012669f, -0.041882f, -0.014366f, 0.037081f, 0.046991f, 0.119951f, 0.072848f, 0.100043f, 0.113465f, 0.121069f, 0.112156f, 0.153805f, 0.152498f, 0.159823f, 0.151592f, 0.179139f, 0.186620f, 0.180636f, 0.148480f, 0.188972f, 0.201368f, 0.153850f, 0.106077f, 0.099985f, 0.062970f, 0.051903f, 0.016155f, -0.007736f, -0.004245f, -0.034175f, -0.027731f, -0.023780f, -0.011008f, -0.030327f, -0.029224f, -0.030186f, -0.011138f, -0.030041f, -0.034601f, -0.022386f, -0.004347f, -0.025947f, -0.031706f, -0.028054f, -0.019646f, -0.039022f, -0.044231f, -0.046952f, -0.029867f, -0.028428f, -0.032507f, -0.029726f, -0.003004f, -0.007689f, -0.017746f, -0.012273f, 0.001337f, -0.006065f, -0.010560f, -0.010266f, 0.001583f, -0.006436f, -0.011659f, -0.013764f, -0.005439f, -0.008583f, -0.002775f, -0.005258f, -0.006961f, -0.011002f, 0.001979f, 0.005593f, 0.004462f, -0.001088f, 0.003215f, 0.001288f, 0.005132f, 0.002958f, 0.007608f, 0.006671f, 0.008079f, -0.002742f, -0.002499f, -0.004097f, -0.001921f, + -0.009932f, -0.010104f, -0.010686f, -0.010928f, -0.017534f, -0.012837f, -0.012586f, -0.008783f, -0.015198f, -0.014622f, -0.014858f, -0.009158f, -0.011390f, -0.012909f, -0.009353f, -0.001163f, -0.001988f, -0.003185f, 0.001346f, 0.007897f, 0.005835f, 0.005788f, 0.005684f, 0.009736f, 0.010895f, 0.011272f, 0.009293f, 0.011811f, 0.012279f, 0.011303f, 0.010902f, 0.011428f, 0.010811f, 0.009050f, 0.006884f, 0.006749f, 0.005292f, 0.004182f, 0.002212f, 0.001881f, 0.001094f, 0.000807f, 0.000156f, 0.000102f, -0.000032f, -0.000148f}, + {-0.011664f, 0.014943f, -0.001061f, 0.006070f, 0.003095f, 0.007134f, -0.012526f, -0.006724f, 0.008174f, 0.004000f, 0.000165f, -0.006926f, 0.001513f, -0.019477f, -0.012518f, -0.000597f, -0.007432f, -0.008408f, 0.003561f, 0.015371f, 0.002639f, 0.011725f, -0.002623f, 0.011589f, -0.006797f, -0.006047f, -0.000694f, -0.010299f, 0.002133f, 0.005247f, -0.003683f, -0.000167f, 0.002766f, 0.000574f, 0.004755f, -0.000472f, -0.011045f, 0.004061f, -0.006821f, -0.005109f, 0.003186f, -0.006761f, -0.010304f, 0.010402f, -0.010816f, 0.009903f, 0.009231f, 0.006120f, -0.000434f, -0.012684f, -0.007372f, 0.001518f, -0.002356f, 0.016510f, -0.010006f, 0.004077f, -0.001248f, 0.002252f, -0.012386f, -0.020684f, -0.003617f, -0.006155f, -0.006884f, -0.001557f, 0.008817f, -0.001827f, -0.009320f, 0.008290f, 0.003530f, -0.004087f, 0.006900f, -0.001264f, 0.002096f, -0.009481f, -0.000751f, -0.002311f, -0.000121f, 0.003735f, -0.004344f, 0.003040f, -0.008712f, 0.005976f, -0.001343f, 0.000700f, -0.003170f, -0.002819f, 0.000055f, 0.003658f, 0.001329f, -0.000052f, 0.001393f, 0.000008f, -0.005251f, 0.001594f, 0.000437f, 0.003382f, + -0.000526f, 0.000187f, -0.000009f, 0.000150f, -0.000332f, -0.001814f, 0.008062f, 0.008043f, 0.001213f, 0.014434f, -0.000078f, 0.006285f, 0.007792f, -0.000002f, -0.006919f, 0.000825f, -0.009866f, -0.012647f, -0.004756f, -0.014424f, -0.014906f, -0.004786f, 0.009928f, -0.003426f, -0.003337f, -0.007707f, -0.001900f, -0.013547f, 0.006742f, -0.003725f, 0.003441f, 0.008288f, 0.002849f, -0.002774f, 0.005700f, 0.005440f, -0.006591f, 0.004728f, 0.000682f, 0.001339f, 0.005058f, -0.011798f, -0.005071f, 0.008536f, -0.005341f, -0.000288f, -0.003375f, 0.009464f, -0.011929f, -0.000889f, -0.009983f, 0.006621f, -0.000538f, -0.000627f, 0.009131f, -0.003810f, -0.004303f, -0.003023f, -0.008425f, 0.000721f, -0.003787f, -0.000558f, 0.000614f, 0.005888f, 0.005916f, 0.002093f, -0.002555f, -0.009891f, -0.016327f, -0.004957f, -0.001091f, -0.003925f, 0.008847f, -0.003428f, -0.005004f, 0.007151f, -0.004483f, -0.006899f, 0.015583f, -0.003251f, -0.008653f, -0.000653f, 0.001465f, -0.002476f, 0.007702f, -0.000863f, -0.006817f, 0.000233f, 0.000335f, -0.001344f, -0.002032f, 0.006232f, 0.001407f, 0.000997f, -0.003608f, 0.000897f, + -0.001081f, 0.000553f, 0.002403f, -0.000392f, 0.001372f, 0.002972f, 0.000379f, -0.000429f, -0.000589f, 0.001345f, -0.003437f, -0.001144f, -0.000675f, -0.001445f, 0.001452f, 0.001342f, -0.000554f, 0.016551f, -0.010683f, -0.005090f, -0.007755f, 0.006085f, 0.001104f, -0.000843f, 0.011917f, 0.002790f, 0.003430f, -0.017504f, 0.003123f, -0.008215f, -0.009532f, -0.012372f, -0.000285f, 0.000349f, 0.014494f, -0.012007f, 0.005433f, -0.005091f, 0.017944f, -0.006595f, -0.006051f, 0.012729f, -0.004982f, 0.004330f, 0.001859f, -0.000948f, 0.002044f, -0.008697f, 0.001324f, 0.000307f, 0.003564f, 0.016842f, 0.005833f, 0.001482f, -0.007305f, 0.005827f, -0.013235f, -0.003755f, -0.002589f, 0.007108f, 0.006097f, 0.010132f, 0.006648f, -0.007779f, -0.011353f, -0.005031f, 0.008562f, -0.001165f, 0.004416f, -0.001922f, -0.001306f, 0.017114f, 0.004004f, -0.001416f, -0.020615f, -0.009280f, 0.000479f, 0.007040f, 0.010946f, 0.015366f, 0.008617f, -0.003851f, 0.002724f, -0.003907f, -0.005309f, 0.010990f, -0.007046f, 0.011317f, 0.000475f, -0.010442f, 0.003677f, -0.005440f, 0.008881f, -0.007783f, -0.000919f, 0.007636f, + 0.008863f, -0.009052f, -0.003464f, -0.001807f, -0.003696f, 0.005237f, -0.001237f, -0.003946f, 0.002438f, 0.001164f, 0.001327f, 0.001374f, 0.002125f, 0.001036f, 0.001259f, 0.000439f, -0.000672f, -0.000914f, -0.003333f, 0.005004f, -0.000225f, 0.000169f, 0.000565f, -0.000063f, 0.000796f, 0.002602f, 0.002650f, -0.000268f, -0.000720f, 0.003275f, 0.002590f, -0.000356f, 0.002163f, 0.008807f, -0.002012f, -0.001387f, -0.003142f, -0.010143f, 0.000478f, 0.007413f, 0.007393f, 0.013750f, 0.006352f, -0.017888f, -0.014918f, -0.012948f, 0.000624f, -0.002136f, 0.001039f, -0.007023f, -0.004320f, -0.001036f, 0.005540f, -0.000007f, -0.011418f, 0.012499f, -0.001687f, -0.011488f, 0.002456f, 0.002792f, -0.000145f, -0.001047f, 0.005091f, 0.006645f, -0.004027f, 0.010123f, 0.000594f, 0.005954f, -0.013628f, 0.009821f, 0.003569f, 0.005686f, -0.009348f, -0.000982f, 0.007004f, 0.005964f, 0.015087f, -0.000507f, -0.020597f, -0.005609f, -0.009813f, 0.004901f, 0.003455f, -0.000808f, -0.005423f, 0.001629f, -0.008384f, -0.002961f, -0.015351f, -0.009052f, -0.000415f, 0.008651f, 0.009712f, -0.006892f, -0.005829f, -0.006036f, + 0.009981f, -0.003331f, -0.001106f, -0.014805f, 0.009056f, -0.014613f, -0.004976f, -0.000602f, -0.002985f, -0.003947f, 0.015698f, -0.001296f, -0.003508f, -0.004142f, 0.003208f, -0.009366f, 0.001199f, -0.016264f, -0.012976f, 0.004797f, -0.004451f, -0.002410f, 0.005942f, -0.002928f, 0.007889f, 0.001551f, 0.003691f, 0.005488f, -0.001337f, 0.002659f, 0.001910f, 0.001025f, -0.001021f, 0.002013f, 0.000936f, 0.000505f, -0.001082f, -0.001272f, 0.000450f, -0.004764f, 0.000043f, 0.003002f, 0.000851f, -0.000180f, 0.000703f, -0.002926f, -0.000811f, 0.001790f, 0.001109f, 0.004797f, 0.001400f, -0.000598f, -0.000618f, 0.004417f, -0.005142f, 0.007910f, -0.005892f, 0.000270f, 0.010813f, 0.019484f, 0.013552f, 0.003120f, -0.014795f, -0.011025f, 0.004292f, -0.002316f, -0.009399f, -0.002899f, -0.012181f, -0.005076f, 0.025230f, 0.003159f, -0.002412f, -0.004380f, 0.000263f, -0.005539f, -0.003773f, 0.017165f, -0.017281f, -0.001791f, 0.001976f, -0.003471f, 0.004643f, 0.010495f, -0.004452f, -0.005490f, 0.002826f, -0.006896f, -0.006763f, -0.016013f, -0.005796f, 0.004675f, -0.014350f, -0.002159f, 0.007478f, 0.011279f, + 0.004148f, -0.022595f, -0.006669f, 0.004890f, 0.011771f, -0.008686f, 0.020142f, -0.002026f, -0.009870f, -0.005341f, -0.004077f, -0.007569f, 0.011053f, -0.007795f, -0.001928f, -0.010387f, -0.008156f, -0.003621f, -0.008298f, 0.011747f, -0.003984f, -0.022636f, 0.008990f, 0.015701f, 0.000432f, 0.005872f, -0.027656f, 0.022070f, 0.000619f, -0.017969f, 0.002069f, -0.012034f, -0.002397f, 0.002248f, -0.013046f, -0.015249f, 0.010561f, 0.005154f, -0.013260f, -0.000603f, 0.000555f, -0.008022f, -0.000836f, -0.002762f, 0.002292f, -0.007080f, -0.003606f, -0.001142f, -0.003473f, -0.001551f, -0.005232f, 0.002112f, -0.000153f, 0.003126f, -0.005709f, 0.001721f, 0.003546f, 0.000248f, -0.003159f, 0.002499f, -0.003061f, 0.003440f, 0.002732f, -0.002168f, 0.002669f, -0.000124f, -0.001529f, -0.000466f, 0.001059f, 0.001535f, 0.000912f, 0.000880f, -0.020353f, 0.004938f, -0.014911f, 0.016526f, 0.004420f, -0.005884f, -0.011984f, -0.021193f, -0.009059f, -0.015259f, 0.005657f, 0.030365f, 0.005414f, -0.007489f, -0.000170f, -0.003795f, -0.004341f, -0.013212f, -0.008620f, -0.013610f, 0.004065f, -0.000713f, 0.003349f, -0.004541f, + 0.002601f, -0.014393f, -0.000725f, 0.003716f, -0.009735f, -0.003345f, 0.001548f, -0.005115f, 0.001728f, -0.004678f, 0.022475f, -0.026770f, -0.004553f, 0.002556f, 0.007573f, -0.002442f, -0.010869f, -0.016276f, -0.011529f, 0.009286f, -0.002105f, 0.010264f, -0.008178f, 0.026082f, 0.003637f, -0.004619f, 0.000013f, -0.014906f, -0.019269f, -0.009493f, 0.007670f, -0.016299f, -0.000749f, 0.019960f, -0.000286f, -0.008896f, -0.018331f, -0.031049f, 0.001562f, 0.016506f, -0.004210f, 0.018887f, -0.001422f, -0.005415f, -0.011359f, -0.009883f, 0.002051f, 0.007737f, -0.005680f, 0.027228f, 0.008353f, -0.008229f, 0.004373f, -0.010637f, 0.004294f, 0.005470f, -0.003454f, 0.006215f, 0.011111f, 0.005024f, 0.000733f, -0.006803f, -0.019501f, 0.001733f, -0.004260f, -0.001580f, -0.002793f, 0.001831f, 0.000638f, 0.000158f, -0.008511f, 0.001795f, -0.004797f, 0.002060f, -0.004727f, -0.001212f, -0.001090f, -0.000024f, -0.000255f, -0.000521f, -0.003353f, -0.002734f, -0.003695f, -0.005262f, -0.005890f, -0.002095f, 0.000481f, 0.002045f, -0.003018f, 0.000356f, 0.000345f, 0.001047f, -0.002267f, 0.002618f, -0.004097f, -0.000167f, + 0.017480f, -0.007908f, -0.020574f, -0.005738f, -0.015412f, -0.008086f, -0.006796f, 0.021466f, -0.005611f, -0.007383f, -0.009307f, 0.013754f, 0.012298f, 0.010894f, 0.030298f, 0.031813f, 0.014595f, 0.019730f, -0.007680f, -0.009312f, 0.013004f, 0.019473f, -0.008717f, 0.008499f, 0.005836f, -0.017125f, -0.016326f, 0.009406f, -0.002583f, -0.000311f, -0.016299f, -0.020515f, -0.005089f, -0.016644f, 0.018501f, 0.034928f, 0.006996f, 0.013734f, 0.003788f, -0.004201f, 0.012270f, -0.023998f, -0.006638f, 0.004901f, 0.013083f, -0.007948f, -0.019569f, 0.028142f, -0.000308f, -0.008728f, -0.007150f, 0.011515f, -0.003718f, 0.010262f, -0.007316f, 0.016142f, -0.001621f, -0.000474f, 0.019741f, 0.006172f, 0.008961f, 0.003551f, -0.003321f, 0.014903f, -0.023037f, -0.009168f, 0.008240f, 0.025719f, -0.015947f, -0.001857f, -0.003478f, -0.003661f, -0.011022f, -0.002395f, -0.005859f, -0.007410f, -0.001346f, 0.001709f, 0.006984f, -0.003047f, 0.020378f, 0.007518f, -0.012170f, -0.002877f, 0.001242f, 0.007884f, 0.002488f, -0.003595f, -0.007472f, -0.001567f, 0.004255f, -0.004608f, -0.004352f, -0.003523f, 0.003918f, 0.002649f, + 0.003861f, 0.002194f, -0.004138f, -0.001496f, -0.000210f, -0.003826f, -0.001002f, 0.003027f, 0.001521f, -0.000452f, -0.004617f, 0.005674f, -0.001122f, 0.003545f, -0.002736f, 0.001759f, -0.005322f, -0.000443f, -0.001091f, 0.000281f, -0.003676f, -0.001053f, 0.012619f, -0.012653f, -0.004987f, 0.011376f, -0.009100f, 0.004843f, 0.008549f, -0.017221f, -0.018349f, 0.005062f, 0.013857f, -0.004893f, 0.012641f, -0.009421f, -0.004208f, 0.024150f, -0.027651f, 0.016459f, -0.007945f, 0.000047f, 0.000644f, 0.029849f, -0.006767f, 0.005773f, 0.009446f, 0.016374f, 0.009578f, 0.014323f, -0.002497f, -0.002487f, 0.004641f, 0.002169f, 0.002324f, -0.014646f, 0.022426f, -0.030187f, -0.006693f, -0.008070f, 0.016690f, -0.003549f, 0.020359f, -0.001110f, 0.001850f, -0.035896f, -0.009879f, 0.021606f, 0.036952f, -0.000513f, -0.018449f, -0.015657f, 0.015138f, 0.012054f, 0.009131f, 0.008548f, -0.015819f, -0.007391f, -0.009183f, 0.004629f, 0.000610f, -0.009863f, 0.005644f, 0.004790f, -0.004574f, -0.005143f, -0.021612f, -0.005872f, -0.007961f, 0.030626f, 0.002775f, 0.005619f, 0.011637f, 0.000735f, -0.024169f, 0.001011f, + -0.014566f, 0.011853f, 0.028735f, -0.015450f, 0.008862f, -0.004586f, -0.014967f, 0.007024f, -0.012549f, -0.002365f, 0.005197f, 0.003670f, 0.006563f, 0.002578f, -0.001064f, -0.005677f, 0.006214f, 0.013283f, 0.002252f, 0.006476f, 0.011083f, 0.004730f, 0.012536f, -0.004002f, 0.011860f, 0.000381f, 0.000276f, 0.002370f, 0.001327f, 0.003192f, -0.000360f, -0.006053f, -0.003239f, 0.000029f, 0.003188f, 0.003121f, -0.002267f, 0.005525f, 0.005467f, -0.004817f, 0.007727f, 0.013254f, -0.022143f, -0.008372f, -0.008182f, 0.004504f, -0.001053f, 0.033549f, -0.003950f, 0.001408f, 0.021374f, -0.018608f, -0.013464f, -0.017429f, -0.018281f, -0.004244f, -0.000454f, 0.008564f, 0.035848f, -0.003016f, -0.020283f, 0.037137f, 0.000827f, 0.010567f, 0.025433f, 0.017635f, 0.023749f, -0.005911f, 0.018805f, -0.011759f, 0.024848f, 0.021786f, -0.005629f, 0.011471f, -0.009706f, -0.008959f, 0.009513f, 0.028442f, 0.012903f, 0.011394f, 0.004197f, -0.008750f, -0.015377f, -0.015610f, 0.002774f, 0.019634f, -0.011084f, -0.013334f, -0.016486f, -0.006089f, -0.032874f, -0.007512f, 0.006535f, -0.024056f, 0.011944f, 0.001973f, + -0.010895f, -0.028298f, -0.018892f, 0.000276f, -0.037671f, 0.012112f, 0.008569f, -0.000599f, 0.010736f, 0.007099f, -0.003509f, -0.019485f, -0.011765f, -0.001986f, -0.012315f, 0.011895f, -0.012915f, 0.031590f, -0.020931f, 0.001352f, 0.013947f, 0.001449f, -0.009262f, -0.035946f, 0.006482f, 0.017969f, 0.004470f, 0.001272f, 0.019800f, 0.011062f, -0.011074f, 0.000248f, -0.001135f, 0.001704f, -0.000628f, -0.006020f, -0.012574f, -0.003572f, -0.013600f, 0.001008f, 0.003616f, 0.001920f, -0.003396f, -0.006881f, -0.003129f, -0.004514f, 0.006152f, 0.002044f, 0.007996f, 0.005819f, 0.004665f, 0.001967f, -0.000478f, -0.002471f, -0.002254f, -0.005996f, 0.003042f, 0.000650f, 0.003030f, -0.002772f, -0.000249f, -0.004977f, 0.000499f, -0.003839f, 0.001779f, -0.046287f, 0.016180f, 0.021055f, 0.037086f, -0.000165f, -0.027641f, 0.007730f, 0.013238f, -0.028619f, -0.029755f, -0.018620f, -0.000785f, 0.015804f, -0.000870f, -0.011690f, -0.000657f, -0.010236f, -0.006901f, -0.018470f, 0.030703f, 0.023963f, 0.008998f, -0.037762f, -0.011342f, 0.006011f, -0.002188f, -0.008450f, 0.047693f, 0.017437f, 0.014961f, 0.013998f, + 0.022620f, 0.016949f, 0.004106f, 0.017748f, -0.001247f, -0.029683f, 0.016005f, -0.030533f, 0.009285f, -0.030229f, 0.025464f, -0.008030f, 0.030755f, -0.016847f, 0.007456f, -0.013636f, 0.011073f, 0.017956f, 0.046962f, 0.009883f, -0.059763f, -0.003214f, -0.008332f, 0.012780f, 0.026090f, -0.005334f, -0.011618f, 0.019137f, -0.003404f, -0.009469f, 0.025704f, 0.001582f, -0.001151f, 0.001257f, 0.011005f, 0.020523f, 0.016283f, -0.017727f, -0.013149f, -0.011201f, -0.017940f, 0.004158f, -0.001663f, 0.020290f, 0.014615f, -0.027488f, -0.006620f, -0.015570f, 0.013316f, -0.007604f, -0.007330f, 0.004759f, 0.000895f, -0.010617f, 0.009072f, 0.002169f, 0.001512f, -0.001604f, 0.005163f, 0.005299f, 0.000858f, -0.015576f, 0.004346f, 0.002673f, -0.001988f, -0.002780f, -0.005156f, 0.000160f, -0.006900f, 0.003167f, 0.007807f, -0.002409f, -0.002304f, 0.007613f, 0.001208f, -0.007168f, -0.005455f, -0.001321f, 0.003740f, -0.003143f, -0.000728f, -0.004422f, 0.001193f, -0.002968f, 0.000054f, 0.007318f, -0.004906f, 0.001156f, 0.050440f, -0.018983f, -0.033452f, -0.010587f, 0.013206f, -0.008204f, 0.024294f, 0.035096f, + -0.013978f, 0.032194f, 0.020763f, 0.016227f, -0.005200f, -0.003783f, -0.006364f, 0.031228f, 0.005802f, 0.003837f, -0.018021f, 0.007977f, -0.009364f, -0.000711f, -0.029831f, 0.020375f, -0.027363f, 0.000208f, -0.019266f, 0.032567f, -0.016485f, 0.000807f, 0.032216f, 0.024480f, 0.016616f, -0.001883f, -0.012617f, 0.014999f, -0.000342f, -0.002805f, -0.040860f, -0.012094f, -0.024627f, -0.020036f, -0.015568f, -0.007324f, 0.021447f, 0.013471f, 0.012565f, 0.000130f, 0.031505f, -0.016536f, 0.033332f, 0.029260f, 0.031451f, 0.054847f, -0.021030f, -0.016446f, 0.024226f, 0.004612f, -0.021104f, 0.033125f, -0.010724f, -0.015878f, 0.010873f, -0.004010f, -0.011310f, -0.009383f, 0.014345f, -0.019090f, 0.008844f, -0.011799f, 0.030505f, -0.012837f, 0.000628f, 0.008935f, 0.022286f, 0.030157f, 0.002563f, -0.026198f, -0.028391f, 0.009404f, -0.018864f, -0.061181f, -0.032089f, 0.009847f, -0.000539f, 0.017789f, 0.002417f, -0.009972f, -0.001011f, -0.005760f, 0.002755f, -0.010555f, -0.004523f, -0.007223f, -0.002916f, 0.000908f, -0.001169f, -0.019062f, -0.004873f, -0.012460f, -0.011104f, -0.008769f, 0.004043f, -0.000816f, + 0.000931f, -0.013859f, -0.009560f, -0.000452f, -0.000381f, 0.002790f, 0.007334f, 0.005973f, 0.004534f, -0.009950f, 0.000639f, 0.002361f, -0.012813f, 0.004642f, 0.000915f, 0.005716f, 0.002715f, 0.007272f, 0.004206f, -0.002862f, 0.006237f, -0.004572f, -0.003316f, -0.001353f, -0.046193f, -0.038929f, -0.001157f, 0.009099f, -0.026340f, 0.001963f, 0.003158f, 0.044409f, -0.027711f, -0.031814f, 0.011317f, -0.012969f, 0.000707f, -0.023043f, 0.023433f, -0.023424f, -0.031638f, -0.018845f, 0.038202f, -0.024785f, -0.020107f, -0.004054f, 0.015962f, -0.010444f, -0.026097f, 0.009085f, -0.010117f, 0.000910f, 0.012982f, -0.034674f, -0.001910f, 0.020372f, 0.032291f, -0.004040f, 0.048957f, 0.021882f, -0.004732f, 0.002893f, 0.022680f, -0.008276f, -0.018836f, 0.004469f, 0.026871f, 0.003660f, 0.013297f, 0.001337f, -0.020616f, 0.008141f, -0.046171f, 0.005023f, 0.003315f, -0.005228f, -0.026880f, -0.024345f, 0.003813f, -0.010696f, -0.018215f, -0.011962f, -0.014514f, 0.018718f, -0.030146f, -0.016892f, -0.008146f, 0.014205f, -0.017420f, 0.038661f, -0.004938f, -0.031105f, -0.001991f, -0.018212f, -0.049773f, -0.014362f, + 0.004115f, -0.000782f, -0.032065f, -0.016776f, -0.006725f, 0.008242f, -0.018743f, -0.008928f, 0.033168f, -0.010766f, -0.043442f, -0.014796f, 0.006497f, 0.004147f, 0.015305f, 0.013055f, 0.009944f, -0.009508f, -0.012071f, -0.002295f, -0.008199f, 0.007222f, 0.002722f, -0.004900f, 0.010242f, 0.004716f, 0.006343f, -0.003049f, 0.005339f, 0.004192f, 0.000755f, -0.001107f, -0.002491f, -0.003327f, 0.000865f, 0.003345f, -0.014932f, 0.004151f, -0.008257f, 0.010887f, 0.004529f, -0.010841f, -0.009506f, -0.000111f, -0.007358f, -0.000404f, 0.004112f, -0.002156f, -0.004707f, -0.007831f, -0.005758f, 0.005341f, 0.002482f, -0.008970f, 0.004450f, 0.001816f, -0.005696f, -0.004730f, -0.010370f, 0.035342f, 0.031543f, 0.009090f, 0.065104f, -0.012711f, -0.023396f, -0.021064f, -0.010090f, -0.035879f, 0.047278f, -0.029151f, -0.010897f, -0.023725f, -0.012401f, -0.011457f, 0.005195f, -0.034183f, 0.000095f, -0.000196f, -0.005056f, 0.008961f, -0.035939f, -0.009624f, 0.023967f, -0.024799f, 0.000935f, -0.031921f, 0.029664f, -0.000440f, -0.053758f, -0.028325f, -0.010035f, -0.001779f, 0.014485f, -0.033062f, -0.018530f, 0.021614f, + -0.004149f, 0.014721f, 0.013813f, 0.013297f, -0.019779f, 0.001501f, 0.023298f, 0.008053f, -0.044373f, 0.027727f, 0.020217f, -0.024507f, 0.067393f, -0.001893f, -0.048856f, 0.012777f, 0.015080f, -0.001752f, 0.035861f, -0.011749f, -0.060599f, 0.016342f, 0.008414f, 0.017402f, 0.021190f, -0.028273f, 0.043444f, 0.015747f, 0.013368f, -0.011072f, 0.065924f, -0.005770f, 0.000948f, 0.044427f, -0.007893f, 0.019879f, 0.035549f, 0.011532f, 0.005166f, -0.009295f, 0.017016f, 0.000015f, 0.030060f, -0.014002f, 0.029267f, 0.026232f, 0.001522f, 0.025939f, 0.015863f, 0.020508f, -0.010937f, -0.000824f, 0.024309f, 0.016825f, 0.013027f, 0.007084f, 0.008280f, -0.016894f, -0.001948f, -0.000007f, -0.007571f, 0.000218f, -0.002768f, -0.007709f, 0.014114f, -0.015338f, -0.002768f, -0.015074f, 0.012321f, -0.006901f, 0.014779f, -0.013429f, 0.002079f, -0.009622f, -0.012400f, 0.007779f, -0.004697f, -0.001192f, -0.012075f, -0.018911f, -0.013300f, 0.013045f, 0.001425f, -0.006655f, 0.001576f, 0.016430f, 0.012715f, -0.006193f, 0.006245f, -0.000720f, -0.004719f, 0.016976f, 0.000809f, 0.010770f, 0.013185f, -0.046839f, + -0.045962f, 0.094169f, 0.030364f, -0.058906f, -0.029621f, -0.027055f, -0.053916f, -0.004071f, -0.028462f, 0.039173f, -0.022202f, 0.000117f, 0.048936f, 0.000971f, 0.008123f, -0.036134f, 0.045126f, 0.033544f, -0.000591f, -0.010984f, -0.003520f, -0.028126f, 0.002132f, 0.003454f, 0.005732f, -0.038622f, -0.005596f, -0.002345f, -0.011577f, -0.008697f, -0.026527f, 0.025024f, 0.049846f, 0.059718f, -0.004846f, -0.024379f, -0.010081f, -0.012538f, -0.008350f, -0.036878f, 0.012540f, 0.014204f, 0.013223f, -0.038434f, -0.051044f, 0.055072f, 0.020916f, 0.030769f, 0.040181f, 0.037453f, -0.016242f, -0.025894f, 0.036375f, -0.037121f, 0.018820f, -0.027832f, -0.021131f, -0.012521f, 0.043282f, -0.014512f, 0.008870f, 0.014654f, -0.007778f, -0.035133f, 0.072331f, -0.043876f, 0.004591f, 0.052115f, -0.047252f, -0.021641f, 0.005687f, 0.018929f, 0.053912f, 0.009428f, -0.031071f, 0.000680f, 0.006690f, -0.007524f, -0.012962f, 0.007527f, -0.021706f, 0.016526f, -0.017938f, -0.025621f, 0.013857f, 0.007479f, 0.019523f, 0.008487f, -0.000540f, -0.009042f, 0.002360f, 0.005190f, 0.006155f, 0.020478f, -0.001008f, 0.002631f, + 0.013062f, -0.030898f, 0.004612f, -0.014057f, 0.003577f, 0.003173f, -0.004735f, -0.011857f, -0.014158f, -0.003772f, -0.014201f, 0.005404f, 0.008081f, 0.017451f, -0.001310f, -0.012127f, 0.011558f, 0.013455f, 0.008625f, 0.008114f, -0.021783f, 0.000487f, 0.005854f, -0.005762f, 0.019288f, -0.007419f, 0.001744f, 0.001719f, 0.017860f, -0.008673f, 0.005588f, 0.024426f, 0.024537f, -0.015650f, 0.015403f, 0.062816f, 0.037873f, -0.005636f, -0.040171f, 0.004244f, 0.064417f, 0.051296f, 0.010835f, -0.050927f, -0.019590f, -0.043963f, -0.003243f, 0.034468f, 0.042576f, -0.003086f, 0.016210f, 0.050591f, 0.053847f, 0.083523f, 0.084085f, -0.041928f, 0.018332f, -0.045278f, -0.008150f, -0.036698f, -0.013151f, 0.029002f, -0.006436f, 0.012719f, 0.011437f, -0.026064f, -0.019070f, 0.021355f, 0.023818f, 0.030875f, 0.021971f, -0.001000f, 0.022651f, 0.034077f, -0.017960f, 0.017281f, 0.020133f, 0.006024f, 0.019665f, 0.065163f, -0.048872f, -0.042081f, -0.009421f, 0.040286f, 0.038623f, -0.022856f, -0.000224f, 0.061867f, 0.050064f, -0.034972f, -0.023289f, 0.021300f, -0.042703f, 0.011959f, -0.020508f, -0.038743f, + 0.012620f, -0.045530f, 0.047451f, 0.017468f, 0.052556f, -0.021968f, -0.030605f, -0.059207f, -0.012743f, 0.019438f, -0.051852f, -0.044361f, -0.024240f, 0.023289f, 0.013837f, 0.011003f, -0.022784f, 0.010013f, -0.016277f, 0.006387f, 0.048354f, -0.020450f, 0.005766f, -0.027280f, 0.020823f, -0.011192f, -0.022884f, 0.016324f, 0.022632f, -0.012433f, -0.006370f, -0.007320f, 0.016289f, 0.036094f, -0.011414f, -0.024089f, 0.000644f, -0.000334f, -0.008844f, -0.003733f, -0.033420f, 0.004764f, -0.017698f, -0.007871f, 0.012279f, -0.010831f, -0.005836f, -0.000871f, -0.009165f, 0.014909f, -0.014598f, -0.023117f, -0.020921f, -0.017622f, 0.019015f, 0.010067f, -0.004169f, 0.008488f, 0.005777f, -0.014915f, -0.016277f, 0.006269f, -0.017360f, -0.001856f, -0.030175f, 0.023950f, 0.062296f, -0.004878f, -0.020339f, 0.039710f, 0.007527f, -0.003137f, -0.060882f, 0.051969f, -0.026851f, -0.057887f, -0.020196f, 0.003064f, 0.065004f, 0.005505f, 0.046357f, 0.018320f, -0.056644f, -0.012941f, -0.050273f, 0.007144f, -0.050112f, -0.036261f, -0.021969f, 0.001683f, 0.009575f, -0.039023f, 0.036719f, -0.012906f, 0.022003f, 0.023706f, + 0.023463f, 0.044709f, 0.082225f, 0.047913f, -0.016633f, -0.041639f, -0.002218f, 0.086610f, 0.053669f, -0.030567f, 0.042729f, -0.017570f, 0.052369f, -0.027211f, 0.004375f, -0.020573f, -0.010595f, -0.003781f, -0.015722f, 0.130571f, -0.025776f, -0.037066f, -0.042701f, -0.059753f, -0.023463f, -0.046238f, -0.002808f, 0.049967f, -0.021003f, 0.014191f, -0.017686f, -0.026716f, 0.045407f, -0.013654f, 0.077030f, 0.013611f, 0.061461f, -0.076835f, 0.030541f, 0.132754f, 0.047830f, -0.075298f, 0.043579f, 0.039809f, 0.001681f, 0.007816f, -0.023597f, 0.024643f, 0.116483f, 0.061551f, 0.025552f, 0.034764f, -0.037435f, 0.067065f, -0.007857f, 0.009638f, 0.010012f, 0.015964f, 0.007116f, 0.043848f, -0.037632f, -0.009991f, 0.002462f, 0.056122f, -0.010353f, 0.013177f, 0.065161f, -0.005962f, -0.037421f, -0.009251f, 0.023491f, 0.003232f, -0.016255f, -0.037941f, 0.020884f, 0.014749f, -0.026341f, -0.015797f, 0.016999f, -0.032207f, -0.026906f, 0.007754f, 0.012348f, -0.000856f, 0.008351f, 0.005438f, 0.009888f, -0.012266f, 0.010374f, -0.007755f, -0.010137f, 0.009531f, 0.003650f, 0.013473f, 0.002366f, 0.091431f, + 0.042763f, 0.010271f, -0.002735f, -0.099633f, 0.046589f, 0.062696f, -0.045015f, -0.032778f, 0.077486f, 0.050511f, -0.061838f, -0.065726f, 0.002413f, -0.038405f, 0.016829f, 0.006404f, 0.016072f, -0.061789f, 0.016262f, -0.011991f, -0.030687f, 0.054957f, -0.003714f, -0.009127f, 0.018582f, 0.046080f, 0.041511f, 0.028334f, -0.052784f, 0.001163f, -0.025693f, -0.056385f, 0.020673f, 0.015965f, 0.034864f, -0.011916f, -0.026169f, 0.072154f, -0.051675f, 0.022868f, 0.025197f, 0.020380f, 0.015626f, -0.008976f, 0.042784f, -0.039568f, -0.068181f, -0.011491f, -0.078117f, 0.068676f, 0.042351f, 0.067387f, -0.005308f, 0.013243f, -0.054284f, 0.056581f, 0.071530f, 0.025578f, -0.030215f, -0.080044f, -0.018260f, -0.105590f, 0.001698f, -0.019706f, -0.071444f, -0.060796f, 0.027951f, 0.004383f, 0.044184f, -0.034130f, 0.050631f, 0.042407f, -0.059746f, 0.012615f, -0.035628f, -0.010205f, -0.053956f, 0.006794f, 0.157700f, 0.039209f, 0.046385f, 0.057622f, 0.025917f, -0.044820f, -0.005975f, -0.000750f, 0.037556f, -0.008702f, 0.038592f, -0.017534f, -0.023494f, 0.000798f, -0.002489f, -0.044313f, 0.038178f, -0.007175f, + -0.010630f, -0.013862f, -0.030739f, 0.004279f, -0.014395f, -0.019941f, -0.028536f, -0.022820f, 0.014269f, -0.016542f, 0.013989f, 0.015469f, -0.010767f, -0.018628f, -0.024569f, 0.011157f, -0.004200f, 0.010365f, 0.038307f, 0.023450f, -0.000111f, -0.003394f, 0.012513f, 0.023505f, -0.023137f, 0.020693f, -0.023316f, -0.018026f, -0.012110f, -0.064241f, 0.026313f, 0.019768f, -0.030948f, 0.009125f, -0.016602f, -0.095954f, -0.026402f, 0.022210f, -0.012371f, 0.009238f, -0.054104f, 0.067662f, -0.091986f, 0.005979f, -0.067753f, 0.044960f, 0.049486f, 0.015452f, 0.041184f, 0.003585f, -0.045153f, 0.073548f, -0.036252f, 0.006754f, -0.000245f, -0.044066f, 0.069453f, 0.003833f, 0.016977f, 0.014441f, 0.020714f, 0.010720f, 0.051690f, 0.061524f, 0.019738f, 0.072069f, -0.064914f, -0.005923f, -0.001340f, 0.092449f, -0.019236f, 0.073508f, 0.040259f, 0.101400f, 0.018807f, -0.024242f, -0.033999f, 0.039692f, -0.077911f, 0.071269f, -0.044926f, -0.026773f, -0.013442f, 0.013583f, 0.053464f, -0.013816f, -0.100603f, -0.028591f, 0.159557f, 0.010925f, -0.102572f, 0.024035f, -0.068361f, 0.018950f, 0.157195f, -0.044590f, + -0.044660f, 0.109013f, -0.119963f, 0.058963f, 0.025970f, 0.034874f, 0.101947f, 0.064276f, -0.093007f, 0.111963f, 0.073186f, 0.002432f, 0.119233f, -0.050477f, -0.017680f, 0.086226f, 0.056392f, 0.009470f, 0.022354f, -0.001058f, -0.002217f, 0.009595f, 0.028917f, -0.027984f, 0.030631f, 0.031532f, -0.028002f, 0.013146f, 0.021060f, -0.039646f, -0.004515f, 0.013561f, -0.004528f, 0.006446f, 0.048250f, -0.000101f, 0.031867f, -0.018193f, -0.000391f, 0.022854f, -0.015712f, -0.013281f, -0.033061f, 0.004643f, 0.028670f, 0.018789f, 0.026974f, -0.052739f, 0.028282f, 0.033016f, 0.014687f, 0.005068f, 0.013378f, -0.003245f, 0.030220f, 0.054245f, 0.012908f, 0.025732f, 0.024646f, -0.013588f, -0.014983f, 0.025387f, -0.033225f, 0.012169f, 0.039174f, 0.053569f, 0.103057f, 0.050781f, -0.050761f, 0.065478f, 0.019051f, 0.058952f, -0.018138f, -0.112112f, 0.112076f, 0.096962f, 0.059439f, 0.184000f, -0.018051f, -0.156433f, -0.081061f, -0.074440f, 0.163435f, 0.119521f, 0.028464f, -0.011617f, -0.030698f, -0.109787f, -0.052250f, -0.036399f, -0.063047f, 0.165840f, 0.134928f, 0.187185f, 0.002902f, -0.216829f, + -0.336277f, -0.164995f, 0.186496f, 0.251114f, 0.257229f, 0.102599f, -0.214152f, -0.393858f, -0.241182f, -0.122809f, 0.180661f, 0.306592f, 0.174464f, 0.093763f, 0.025054f, -0.140248f, -0.187021f, -0.141045f, -0.010869f, 0.106920f, 0.219235f, 0.261073f, 0.046391f, 0.049951f, -0.208552f, -0.346649f, -0.184314f, 0.170673f, 0.288653f, 0.272402f, 0.170824f, -0.101852f, -0.335967f, -0.218886f, -0.281724f, -0.000366f, 0.191078f, 0.205166f, 0.103507f, -0.083423f, -0.176849f, -0.158175f, -0.123906f, 0.035273f, 0.117776f, 0.081390f, 0.238283f, 0.084672f, -0.053248f, -0.142222f, -0.052205f, 0.157404f, 0.232048f, 0.076953f, -0.008946f, -0.143259f, -0.028708f, -0.033224f, 0.091717f, 0.033421f, -0.023227f, -0.099345f, -0.029292f, 0.004249f, -0.015632f, -0.030641f, -0.006270f, 0.022065f, 0.049781f, 0.082719f, 0.040615f, -0.083676f, -0.073370f, -0.070006f, 0.016724f, 0.087196f, 0.098328f, 0.044373f, 0.010699f, -0.063769f, -0.026842f, -0.123923f, -0.108476f, -0.010398f, 0.032516f, 0.134168f, 0.203513f, 0.076314f, -0.070498f, -0.168396f, -0.208460f, -0.088459f, 0.164234f, 0.269745f, 0.186117f, 0.055701f, + -0.135395f, -0.222132f, -0.108023f, -0.001308f, 0.040816f, 0.039305f, 0.094788f, 0.047385f, 0.021453f, -0.056945f, -0.118908f, -0.090750f, 0.013207f, 0.059781f, 0.119345f, 0.055561f, 0.020595f, -0.022633f, -0.059490f, 0.070512f, 0.010855f, -0.100010f, 0.013833f, -0.025362f, -0.039634f, 0.031267f, -0.030156f, -0.011419f, -0.053094f, 0.004076f, -0.019708f, -0.039356f, 0.017101f, -0.003574f, 0.014489f, 0.007536f, 0.034514f, -0.031891f, -0.010079f, 0.011182f, 0.004689f, 0.016627f, -0.012999f, 0.034855f, -0.022769f, 0.024371f, 0.012103f, -0.009785f, -0.023964f, -0.009619f, -0.045815f, 0.052226f, -0.003529f, 0.002952f, -0.007772f, -0.010922f, 0.003927f, -0.000215f, 0.002446f, 0.021008f, 0.012898f, 0.000719f, 0.029761f, -0.023428f, 0.009976f, -0.022173f, 0.026871f, 0.017045f, -0.018295f, 0.014997f, -0.022585f, -0.025384f, -0.020500f, -0.039867f, -0.003359f, 0.032343f, -0.027150f, -0.054703f, -0.037340f, 0.004700f, 0.035234f, 0.002046f, 0.026520f, -0.051981f, -0.013019f, -0.004860f, -0.003889f, -0.050793f, -0.012136f, 0.003076f, 0.008509f, -0.017347f, 0.055205f, 0.023205f, -0.016775f, 0.051414f, + -0.004212f, -0.088291f, -0.003018f, -0.011726f, -0.007370f, 0.018598f, 0.012022f, 0.025137f, -0.027374f, 0.039837f, -0.065264f, 0.020336f, 0.012237f, -0.001456f, 0.000562f, -0.002965f, -0.003985f, 0.023407f, -0.003611f, 0.005230f, -0.009402f, 0.000350f, -0.018824f, 0.006266f, 0.000609f, 0.039802f, 0.000123f, 0.018391f, -0.017307f, 0.003507f, -0.008503f, -0.021352f, 0.007430f, 0.000807f, -0.010891f, 0.028825f, -0.004862f, -0.005717f, -0.010780f, 0.021540f, -0.007328f, -0.036664f, 0.008128f, -0.006107f, 0.012070f, -0.014784f, 0.001983f, -0.003260f, -0.023028f, 0.022930f, -0.020367f, 0.016260f, -0.019469f, 0.011910f, -0.001619f, -0.005868f, -0.011267f, -0.053700f, -0.088578f, -0.139600f, 0.005914f, 0.116588f, -0.043513f, -0.070350f, -0.075195f, -0.071066f, 0.015813f, 0.015631f, 0.134328f, -0.018590f, -0.018333f, -0.058679f, 0.007497f, 0.018785f, 0.042888f, -0.043944f, 0.023475f, -0.031774f, 0.053142f, 0.017366f, 0.017990f, 0.006984f, -0.031659f, -0.017014f, -0.020322f, -0.006325f, 0.019814f, -0.018944f, -0.016391f, 0.037539f, -0.032777f, -0.020352f, 0.031375f, -0.028361f, -0.009759f, -0.024260f, + -0.039727f, 0.014999f, 0.027578f, 0.005529f, 0.026043f, -0.037597f, -0.008811f, -0.000519f, 0.023088f, 0.028052f, 0.034938f, 0.002978f, -0.002630f, -0.056881f, -0.058125f, -0.021262f, -0.018213f, -0.012349f, 0.028062f, 0.037721f, 0.053408f, 0.006350f, -0.022997f, 0.053146f, -0.036622f, -0.016253f, 0.024365f, -0.015928f, 0.070024f, 0.004051f, -0.010540f, 0.012229f, -0.024261f, 0.020553f, 0.048819f, 0.039722f, -0.013180f, 0.015345f, -0.045504f, -0.029846f, -0.016265f, -0.010983f, 0.035468f, -0.003979f, 0.034657f, 0.009432f, -0.010109f, 0.004523f, 0.007020f, -0.039830f, 0.024963f, -0.029366f, 0.019529f, -0.013234f, -0.007427f, -0.001647f, 0.022969f, -0.020492f, 0.003593f, 0.004136f, 0.020186f, 0.034119f, -0.016169f, -0.004599f, -0.025815f, -0.010346f, 0.010222f, -0.010121f, 0.008323f, -0.007827f, -0.010009f, -0.018202f, -0.028286f, -0.015708f, 0.027615f, -0.010073f, 0.014081f, -0.018783f, -0.003506f, -0.001146f, -0.005139f, -0.016810f, -0.006806f, 0.002319f, -0.001069f, 0.000609f, 0.000963f, -0.025642f, -0.003339f, -0.005529f, -0.004474f, -0.000034f, -0.000618f, -0.000854f, 0.036651f, -0.090338f, + -0.211301f, -0.161442f, -0.018583f, 0.070019f, 0.182415f, 0.154051f, 0.147051f, 0.150207f, 0.099118f, 0.041821f, -0.054064f, -0.095887f, -0.183152f, -0.134896f, -0.132605f, -0.132155f, -0.082226f, 0.079890f, 0.107573f, 0.158134f, 0.121367f, 0.101749f, 0.033569f, 0.067906f, -0.015233f, -0.017463f, -0.021281f, -0.036997f, -0.069363f, -0.056739f, -0.116840f, -0.042463f, -0.092794f, -0.044116f, -0.021942f, 0.030495f, 0.006084f, 0.043591f, 0.010063f, 0.061010f, 0.044779f, 0.073783f, 0.097932f, 0.121772f, 0.077810f, 0.052394f, 0.086446f, 0.006795f, -0.029433f, -0.106671f, -0.125249f, -0.172153f, -0.153585f, -0.143450f, -0.055034f, -0.094107f, -0.049344f, 0.005910f, 0.025953f, 0.060958f, 0.116004f, 0.123809f, 0.138182f, 0.208939f, 0.117504f, 0.160112f, 0.110880f, 0.025432f, -0.017033f, -0.065410f, -0.167138f, -0.182574f, -0.174041f, -0.192870f, -0.141811f, -0.098711f, -0.079428f, -0.021554f, 0.040561f, 0.068296f, 0.086458f, 0.128941f, 0.136638f, 0.144193f, 0.135940f, 0.085007f, 0.059104f, 0.028347f, 0.002968f, -0.000157f, -0.041194f, -0.066949f, -0.097179f, -0.115194f, -0.122652f, -0.115701f, + -0.081611f, -0.036358f, -0.032980f, -0.012164f, 0.021573f, 0.058001f, 0.071777f, 0.136523f, 0.095891f, 0.076145f, 0.075634f, 0.027655f, -0.003369f, -0.019359f, -0.024401f, -0.025345f, -0.066338f, -0.059025f, -0.043170f, -0.044625f, -0.033161f, 0.004717f, 0.009966f, 0.013443f, -0.008312f, 0.022073f, 0.000262f, 0.026057f, 0.026099f, 0.009086f, -0.009565f, -0.000666f, 0.005252f, 0.004109f, 0.003645f, 0.012606f, 0.002155f, -0.005635f, -0.019762f, -0.003917f, 0.003695f, 0.000015f, 0.011181f, 0.009813f, -0.002745f, -0.001224f, -0.008950f, -0.005942f, -0.005260f, -0.002349f, -0.004557f, 0.003288f, -0.003248f, -0.001150f, -0.001771f, -0.003901f, -0.008110f, 0.000055f, -0.000865f, 0.005173f, 0.010098f, 0.008054f, 0.004739f, 0.007046f, 0.000345f, 0.000708f, 0.000617f, 0.001891f, -0.002106f, -0.001430f, -0.002733f, 0.000680f, -0.001073f, -0.003825f, -0.004646f, 0.000431f, 0.000304f, -0.000446f, -0.004153f, -0.004293f, -0.004500f, -0.004068f, -0.002445f, 0.002328f, 0.001982f, 0.003942f, 0.003922f, 0.003872f, 0.000242f, 0.002164f, 0.001531f, 0.002514f, 0.002054f, 0.004472f, 0.003396f, 0.003522f, + 0.000101f, -0.002501f, -0.004124f, -0.003256f, -0.004768f, -0.004085f, -0.004380f, -0.003502f, -0.004556f, -0.002864f, -0.001678f, 0.000023f, 0.000788f, 0.002323f, 0.003091f, 0.005097f, 0.005235f, 0.006333f, 0.004334f, 0.003177f, 0.001486f, 0.001011f, -0.001659f, -0.002961f, -0.004164f, -0.004426f, -0.004392f, -0.002630f, -0.002159f, -0.001154f, -0.000604f, 0.000310f, 0.000340f, 0.001083f, 0.001049f, 0.001233f, 0.001025f, 0.000998f, 0.000525f, 0.000464f, 0.000189f, 0.000169f, -0.000017f, -0.000070f, -0.000157f, -0.000163f} + }, + { + {-0.017344f, 0.013427f, 0.000658f, 0.006167f, 0.006116f, 0.017381f, 0.008171f, -0.006421f, -0.008115f, -0.011310f, 0.008097f, -0.009894f, -0.007204f, 0.001619f, 0.002482f, 0.001075f, 0.010188f, -0.003327f, 0.009521f, -0.002436f, 0.008545f, -0.008096f, 0.003740f, -0.003573f, -0.008671f, -0.000603f, -0.016529f, 0.002486f, 0.004037f, 0.007394f, -0.006048f, -0.000088f, 0.006426f, -0.004732f, 0.007220f, 0.006826f, -0.004111f, 0.004906f, -0.005503f, -0.002539f, -0.004076f, -0.005910f, -0.007548f, 0.006753f, 0.009932f, -0.007435f, 0.004394f, 0.008020f, 0.006453f, 0.009816f, 0.001206f, -0.001455f, 0.005680f, 0.004349f, -0.010387f, -0.000377f, 0.001171f, 0.000679f, 0.003261f, 0.006736f, 0.001477f, 0.002456f, -0.003626f, -0.002255f, 0.004722f, 0.006695f, 0.003689f, -0.003513f, -0.006221f, 0.006904f, -0.005620f, -0.001791f, 0.003817f, -0.001136f, -0.000287f, 0.002958f, 0.000658f, 0.000213f, 0.006200f, -0.006078f, 0.004608f, 0.002557f, 0.003008f, 0.005789f, -0.002359f, -0.000639f, -0.001989f, -0.000778f, 0.000195f, 0.002851f, -0.002283f, -0.000377f, -0.001592f, -0.000860f, 0.000049f, -0.000187f, + -0.000948f, -0.000605f, 0.000587f, 0.000870f, -0.000066f, -0.000330f, -0.000674f, 0.000128f, -0.000250f, 0.000135f, -0.000947f, -0.000162f, 0.000844f, -0.001949f, -0.000966f, 0.006887f, -0.003617f, 0.005053f, 0.000503f, -0.000402f, -0.013960f, 0.002269f, 0.011930f, -0.007286f, 0.004940f, -0.014821f, -0.015003f, -0.004924f, -0.012197f, -0.010635f, -0.001588f, 0.002231f, 0.008410f, 0.001365f, -0.004027f, 0.001930f, 0.005728f, -0.007354f, 0.010248f, -0.006902f, -0.007483f, 0.008701f, -0.004300f, 0.010020f, 0.012707f, 0.001792f, -0.009143f, 0.006441f, 0.004200f, 0.002603f, -0.004647f, -0.003342f, 0.005343f, 0.004488f, 0.000917f, -0.010312f, -0.002976f, -0.009522f, 0.008645f, -0.008590f, -0.005618f, 0.006396f, 0.000310f, 0.005557f, 0.001588f, 0.002158f, 0.009405f, 0.001631f, 0.010547f, -0.013546f, -0.006969f, -0.003099f, 0.006741f, 0.009565f, 0.010889f, 0.014852f, 0.001614f, -0.004175f, -0.001411f, -0.001943f, -0.000448f, -0.009580f, -0.004210f, -0.004142f, -0.001168f, 0.001532f, -0.007804f, -0.004576f, -0.001760f, -0.003277f, -0.006102f, 0.007382f, -0.007336f, -0.002454f, 0.004886f, -0.012522f, + 0.003800f, 0.006903f, 0.007602f, 0.004051f, 0.002203f, 0.004607f, -0.002234f, -0.004825f, -0.001232f, 0.001365f, -0.000527f, 0.001366f, 0.000237f, -0.001303f, 0.000093f, -0.001901f, -0.002302f, 0.002853f, 0.001255f, -0.000205f, -0.000026f, 0.000033f, 0.002119f, 0.001043f, -0.000836f, -0.000813f, -0.000874f, 0.000215f, 0.001563f, -0.001808f, -0.000323f, -0.000047f, -0.000355f, 0.001095f, -0.000061f, -0.000697f, 0.015884f, -0.011803f, -0.004439f, -0.002338f, 0.009760f, 0.008811f, -0.008924f, -0.000824f, -0.016552f, -0.003623f, 0.020031f, 0.007543f, -0.008083f, 0.014385f, 0.004679f, 0.005528f, 0.001451f, -0.004835f, -0.015799f, 0.002113f, -0.007126f, -0.004504f, -0.002903f, -0.009623f, -0.003423f, -0.007450f, 0.005176f, -0.003375f, -0.004376f, 0.009000f, -0.017004f, 0.015623f, -0.005528f, 0.002218f, -0.005339f, 0.004874f, -0.000654f, -0.001565f, -0.000441f, 0.006648f, 0.000308f, 0.004202f, -0.006092f, 0.011703f, -0.009126f, 0.013628f, 0.002881f, -0.001353f, -0.007655f, -0.008958f, 0.018506f, 0.003191f, -0.017393f, 0.017760f, 0.016719f, -0.009096f, -0.003356f, 0.005254f, -0.006881f, -0.001282f, + -0.004250f, 0.004200f, 0.010655f, -0.006501f, 0.002417f, -0.004870f, -0.004473f, 0.001746f, 0.014351f, -0.013188f, 0.007973f, -0.013593f, -0.010475f, -0.009819f, -0.001759f, 0.000263f, -0.000035f, 0.008217f, 0.012700f, 0.003315f, 0.003060f, 0.006209f, 0.005012f, 0.002777f, 0.003131f, 0.003719f, -0.001409f, 0.004005f, -0.001866f, -0.003952f, 0.006744f, -0.000351f, 0.000902f, -0.001241f, -0.002043f, -0.001190f, 0.000013f, 0.002853f, -0.000757f, 0.000631f, 0.000255f, -0.002561f, -0.000009f, 0.001399f, 0.001770f, -0.000220f, 0.001234f, 0.004173f, -0.006460f, 0.000368f, -0.012404f, 0.011230f, -0.017286f, 0.000351f, 0.017424f, -0.032505f, 0.022127f, 0.008662f, -0.008854f, 0.006760f, -0.000944f, 0.019243f, -0.002330f, -0.016461f, -0.011578f, 0.006276f, 0.007293f, 0.001886f, 0.000257f, 0.008015f, 0.002211f, 0.001080f, 0.010994f, 0.004329f, 0.002954f, 0.007839f, 0.005576f, 0.027566f, -0.007915f, 0.007134f, -0.000657f, -0.004847f, 0.006973f, 0.004216f, 0.002577f, 0.003261f, -0.004812f, -0.007983f, 0.000263f, -0.000285f, 0.000152f, 0.003757f, 0.008253f, -0.008942f, -0.009450f, 0.003703f, + -0.002448f, -0.003797f, -0.005754f, 0.011057f, -0.008373f, 0.016102f, 0.007457f, 0.000448f, 0.003607f, 0.001107f, 0.004241f, 0.020532f, 0.017246f, 0.001053f, 0.000754f, 0.003722f, -0.004418f, 0.007511f, -0.001947f, 0.006746f, 0.001934f, 0.000180f, -0.000218f, -0.009154f, 0.008273f, 0.006225f, -0.002124f, -0.005380f, 0.000483f, 0.007903f, 0.000581f, -0.002575f, 0.000249f, -0.006473f, 0.004269f, 0.001414f, 0.005501f, -0.001793f, 0.001482f, 0.002123f, 0.002175f, 0.001732f, 0.003222f, 0.001356f, 0.001322f, -0.007830f, -0.000644f, 0.002669f, 0.004036f, -0.002865f, 0.002550f, 0.002256f, 0.002062f, 0.002267f, 0.000889f, 0.001691f, 0.002274f, 0.002485f, 0.000245f, 0.000780f, 0.000606f, 0.000983f, 0.000211f, 0.000425f, 0.001534f, 0.000380f, -0.000518f, -0.001963f, 0.000860f, 0.002256f, -0.002098f, 0.004076f, -0.001933f, 0.008989f, 0.000181f, 0.010380f, -0.004013f, 0.009200f, -0.007013f, 0.019283f, -0.014801f, -0.005559f, -0.007074f, 0.019880f, 0.011259f, 0.007278f, 0.012632f, -0.011481f, -0.002327f, 0.018335f, 0.010421f, 0.008575f, 0.008916f, 0.004708f, 0.006124f, -0.002165f, + 0.017627f, -0.001894f, -0.008124f, -0.006099f, 0.006180f, -0.006718f, 0.004041f, -0.016746f, 0.006180f, -0.003269f, 0.000333f, -0.017993f, 0.007735f, -0.003922f, 0.016833f, -0.002825f, 0.005339f, 0.004532f, -0.007072f, -0.001848f, 0.007684f, 0.000966f, 0.005278f, -0.003885f, 0.009355f, 0.013132f, 0.001702f, -0.009326f, 0.003574f, 0.009200f, 0.006685f, 0.001128f, -0.006286f, -0.013111f, 0.010939f, -0.014589f, -0.006084f, 0.008008f, -0.019157f, -0.004512f, 0.011958f, -0.008988f, 0.002556f, 0.000046f, -0.001026f, -0.002690f, 0.004902f, -0.009700f, 0.000592f, -0.016116f, -0.008213f, -0.021983f, 0.001720f, -0.006264f, 0.000553f, -0.004370f, -0.000604f, -0.005697f, 0.005087f, 0.004646f, 0.002017f, -0.003599f, 0.004710f, -0.000672f, 0.001896f, -0.006450f, 0.001701f, 0.001136f, 0.002118f, 0.001223f, 0.004429f, -0.000718f, 0.004988f, -0.002304f, -0.000215f, 0.003223f, 0.004696f, 0.000543f, 0.002654f, -0.003122f, -0.000993f, -0.001012f, -0.001018f, -0.002300f, 0.001555f, 0.003387f, 0.001109f, 0.003580f, -0.003439f, -0.002342f, -0.001863f, -0.005163f, 0.000666f, -0.000929f, 0.002489f, -0.000890f, + -0.000831f, -0.005409f, 0.005515f, -0.035031f, 0.006451f, -0.010853f, -0.006205f, 0.008370f, 0.006396f, 0.004587f, 0.001797f, -0.025661f, -0.002500f, 0.008358f, -0.013706f, -0.003372f, -0.018838f, -0.009426f, 0.004470f, -0.001987f, -0.017337f, 0.018558f, 0.011237f, -0.005311f, 0.002171f, 0.014661f, -0.009103f, 0.004145f, -0.006176f, -0.009752f, -0.006669f, -0.017865f, -0.006606f, 0.013967f, 0.006610f, 0.017769f, -0.008700f, -0.028337f, -0.012224f, 0.007272f, -0.009047f, -0.018377f, -0.003025f, -0.003238f, 0.017149f, 0.008949f, -0.019740f, 0.013521f, -0.013945f, -0.000607f, -0.010049f, -0.009538f, -0.009201f, -0.021732f, -0.012912f, 0.001837f, 0.014217f, 0.021532f, 0.013745f, 0.004187f, 0.008576f, -0.009528f, -0.016225f, -0.009871f, 0.010404f, -0.004798f, 0.011213f, -0.003173f, -0.010290f, -0.000326f, 0.001027f, -0.004817f, -0.011608f, 0.000912f, 0.008868f, -0.028380f, -0.018809f, 0.026848f, -0.008587f, 0.000725f, -0.014633f, 0.007224f, 0.004019f, -0.001547f, -0.001080f, 0.009938f, 0.007273f, 0.002377f, -0.002992f, -0.003457f, -0.000608f, -0.003883f, 0.002347f, 0.003049f, -0.005586f, -0.002664f, + 0.002140f, 0.000815f, 0.000053f, 0.001851f, 0.005592f, -0.005743f, -0.002681f, -0.010650f, -0.004368f, -0.001456f, -0.001989f, 0.000714f, 0.001572f, 0.003243f, 0.000250f, 0.004111f, -0.004656f, -0.003195f, 0.000857f, 0.001120f, 0.001599f, -0.003778f, -0.002159f, -0.005272f, -0.000232f, 0.001963f, 0.013160f, -0.000709f, 0.006492f, -0.009582f, 0.006447f, -0.012971f, -0.001235f, 0.021646f, -0.010697f, 0.020434f, 0.020694f, 0.025626f, 0.006140f, 0.010072f, 0.022020f, 0.017209f, 0.012537f, -0.017645f, 0.001903f, 0.005189f, 0.014644f, -0.003245f, -0.013229f, 0.016371f, 0.016527f, -0.005074f, 0.010888f, -0.005885f, -0.006254f, 0.010319f, 0.008776f, -0.001553f, 0.010480f, 0.000692f, -0.018125f, -0.014448f, 0.014967f, 0.022010f, -0.002134f, -0.007963f, 0.004318f, 0.000438f, -0.011003f, -0.020145f, 0.009998f, -0.019058f, -0.009558f, 0.014156f, 0.002648f, 0.012501f, 0.000140f, 0.020159f, 0.002424f, 0.022164f, -0.026450f, 0.023405f, -0.005003f, -0.001104f, 0.006697f, 0.012282f, -0.010439f, -0.021748f, -0.006543f, 0.019570f, -0.004278f, -0.023249f, -0.014062f, -0.014310f, 0.003383f, 0.008176f, + -0.020530f, 0.009993f, 0.011176f, 0.020709f, 0.005974f, 0.006421f, -0.000381f, 0.005727f, 0.000623f, 0.004454f, 0.002699f, -0.015351f, -0.002155f, 0.007121f, 0.004621f, 0.012194f, -0.008546f, -0.002602f, -0.000610f, 0.000886f, 0.005399f, 0.000648f, 0.004372f, 0.001866f, -0.002845f, -0.001147f, 0.004136f, 0.004154f, 0.001142f, 0.004542f, 0.000795f, 0.001951f, 0.005606f, -0.000023f, -0.003793f, -0.001798f, 0.000828f, 0.002890f, -0.000933f, -0.001508f, 0.004416f, 0.002461f, 0.000571f, -0.005140f, -0.002162f, -0.002971f, -0.003062f, -0.000310f, 0.004731f, 0.000225f, 0.004469f, 0.003547f, 0.002811f, -0.000421f, 0.000215f, 0.006947f, 0.022385f, 0.002831f, 0.009315f, 0.026634f, 0.028692f, 0.008532f, 0.007173f, -0.021287f, -0.010789f, 0.023451f, -0.017497f, 0.023971f, 0.006718f, -0.000126f, -0.004840f, -0.008419f, -0.013930f, 0.002521f, 0.010577f, -0.025840f, -0.011752f, -0.010999f, 0.005671f, 0.005174f, 0.005600f, 0.000788f, 0.004327f, -0.000950f, 0.007723f, 0.006322f, -0.006912f, -0.012111f, -0.022390f, 0.003938f, -0.012128f, 0.020162f, 0.000742f, -0.011182f, -0.014115f, -0.004283f, + 0.009292f, -0.017516f, 0.010902f, -0.005847f, 0.003547f, -0.000181f, -0.012559f, 0.012425f, 0.015623f, -0.010735f, 0.013133f, 0.003801f, -0.001090f, 0.037682f, -0.009545f, -0.024383f, 0.004553f, 0.009223f, -0.006182f, 0.002081f, -0.010704f, 0.025609f, 0.014792f, -0.002489f, -0.005545f, 0.018206f, 0.017269f, -0.003577f, -0.014869f, -0.010686f, 0.035483f, -0.003214f, -0.004976f, -0.014276f, -0.009388f, -0.002795f, 0.003380f, -0.003649f, -0.009544f, 0.015395f, -0.004933f, 0.018259f, 0.005190f, -0.005648f, -0.002091f, 0.003341f, -0.000187f, -0.003022f, -0.003262f, 0.006501f, -0.008175f, -0.001885f, -0.002259f, 0.010611f, 0.000872f, -0.002179f, -0.000359f, -0.005241f, -0.005094f, -0.000545f, 0.000964f, 0.011141f, -0.002689f, 0.006661f, 0.002399f, -0.003447f, 0.002158f, 0.000592f, -0.005443f, 0.004261f, -0.002765f, 0.005834f, -0.000664f, -0.005651f, -0.004385f, -0.003152f, -0.004413f, 0.000104f, -0.001475f, -0.001657f, 0.001859f, 0.002212f, 0.002964f, 0.001335f, 0.009504f, -0.019378f, -0.005308f, -0.005935f, 0.001879f, 0.008593f, 0.019590f, 0.017145f, -0.026769f, 0.000860f, 0.003426f, -0.002496f, + -0.007814f, -0.018372f, -0.001655f, 0.006517f, 0.011312f, 0.009233f, -0.016837f, -0.002742f, -0.021410f, 0.020536f, 0.001142f, -0.001781f, 0.010010f, -0.009418f, -0.001515f, -0.022841f, 0.004123f, -0.013545f, 0.009760f, -0.001576f, -0.003616f, -0.007577f, -0.015068f, -0.014669f, -0.001521f, -0.018148f, -0.029704f, -0.005349f, -0.013407f, -0.028567f, -0.002101f, -0.002261f, -0.015515f, 0.010528f, 0.016045f, -0.001755f, 0.007769f, -0.001787f, -0.002272f, 0.004493f, 0.004899f, -0.023108f, -0.006645f, 0.012987f, -0.011006f, 0.028084f, 0.005264f, 0.007638f, -0.017768f, 0.000023f, -0.007900f, -0.018166f, -0.001733f, 0.026078f, 0.012229f, 0.019860f, 0.011148f, -0.008380f, -0.020647f, -0.032431f, 0.022123f, 0.022635f, -0.002451f, 0.011788f, -0.025211f, 0.012366f, 0.010643f, 0.018463f, 0.002980f, -0.021585f, -0.002574f, -0.020109f, -0.006813f, 0.001871f, -0.006361f, 0.004487f, -0.004288f, -0.006553f, -0.001523f, 0.002144f, -0.000782f, -0.002023f, 0.006208f, -0.001685f, 0.002547f, -0.014556f, 0.000494f, -0.001036f, -0.002105f, -0.006510f, -0.002614f, 0.004595f, -0.005980f, -0.007052f, -0.002372f, -0.002432f, + -0.002752f, 0.000130f, -0.001536f, -0.007829f, -0.006217f, -0.003828f, 0.002484f, 0.002824f, 0.004909f, 0.002376f, 0.004525f, 0.001618f, -0.005546f, 0.001311f, -0.000722f, -0.003415f, 0.002371f, -0.006564f, 0.003079f, -0.003499f, -0.000381f, 0.004651f, -0.050284f, -0.012420f, 0.040359f, 0.013637f, 0.016583f, -0.010243f, 0.016744f, 0.028217f, 0.002260f, -0.004492f, -0.046436f, -0.010657f, -0.001994f, 0.026963f, 0.007719f, 0.010948f, -0.034747f, -0.009177f, -0.012803f, -0.008086f, 0.021908f, -0.012024f, -0.004069f, 0.004006f, 0.006402f, -0.010793f, -0.004644f, 0.005855f, -0.009585f, 0.021603f, -0.023766f, 0.002845f, 0.015950f, -0.020265f, 0.017009f, 0.028883f, 0.033503f, 0.016266f, 0.016480f, 0.022142f, -0.014840f, -0.027253f, 0.011145f, 0.012227f, 0.018356f, 0.014744f, -0.030942f, -0.008578f, 0.016499f, 0.009718f, 0.006098f, 0.019796f, 0.004536f, 0.023015f, -0.008308f, -0.004618f, 0.013156f, 0.012311f, 0.003772f, -0.019741f, -0.010565f, -0.021225f, -0.024500f, -0.001139f, -0.026811f, 0.001728f, -0.015555f, 0.001421f, -0.014138f, -0.008124f, -0.034486f, 0.024190f, 0.006425f, -0.004840f, + -0.006085f, -0.003585f, 0.004749f, -0.012493f, -0.001681f, -0.029804f, -0.016395f, 0.010801f, 0.013739f, 0.005931f, 0.004681f, 0.001497f, -0.015695f, 0.007554f, 0.007315f, 0.005935f, -0.014997f, 0.003777f, 0.000680f, -0.011687f, -0.003966f, 0.002423f, 0.001980f, -0.005857f, -0.008940f, 0.003310f, -0.004354f, -0.005190f, -0.001292f, 0.001647f, -0.001049f, -0.000337f, 0.003134f, -0.002461f, 0.004332f, -0.000379f, 0.006148f, -0.002339f, 0.005499f, 0.008873f, -0.005980f, 0.005107f, 0.000478f, 0.003668f, -0.003665f, 0.000006f, 0.004975f, 0.004327f, -0.007385f, 0.004338f, 0.003962f, 0.031787f, -0.015315f, -0.013090f, -0.011586f, 0.021920f, 0.027800f, -0.017271f, 0.044543f, 0.009435f, -0.018882f, 0.022845f, 0.006594f, -0.018411f, -0.021644f, -0.017463f, -0.001313f, -0.009336f, -0.006360f, -0.028894f, 0.011727f, 0.012161f, 0.040180f, 0.005513f, -0.006739f, -0.018007f, -0.018851f, 0.004878f, -0.002145f, -0.025274f, 0.004591f, -0.009328f, 0.001313f, 0.019646f, -0.015049f, 0.025957f, -0.022630f, -0.019033f, -0.001195f, -0.029669f, -0.035476f, 0.005833f, -0.003981f, -0.040996f, 0.002937f, 0.000527f, + -0.019441f, 0.010309f, -0.009395f, 0.005232f, -0.027649f, -0.045253f, 0.029840f, -0.027673f, 0.046176f, 0.025196f, -0.032837f, -0.004184f, -0.033275f, -0.008965f, -0.004135f, 0.013882f, -0.011926f, 0.021168f, 0.026749f, 0.025333f, -0.018173f, -0.014865f, 0.002462f, -0.022380f, -0.001997f, -0.007285f, -0.029471f, 0.017692f, 0.013185f, -0.015731f, 0.023362f, -0.034559f, -0.003230f, 0.002088f, -0.008965f, -0.005816f, 0.030126f, 0.022200f, 0.014859f, -0.001803f, -0.015595f, -0.012698f, -0.011736f, 0.005206f, 0.004926f, -0.000954f, 0.003485f, -0.000914f, -0.001306f, 0.000634f, -0.001180f, 0.001207f, 0.006072f, -0.007145f, 0.002927f, -0.000517f, 0.006674f, -0.003859f, -0.000610f, 0.003797f, 0.008890f, 0.003479f, 0.007189f, -0.008498f, -0.009178f, 0.004375f, -0.006088f, 0.001461f, 0.000036f, -0.009913f, -0.005441f, -0.005933f, 0.000178f, 0.003197f, 0.003005f, 0.001939f, 0.002389f, -0.001425f, -0.027495f, -0.021047f, 0.012843f, 0.015690f, 0.017396f, 0.029827f, -0.011787f, 0.055362f, -0.002306f, -0.029505f, 0.012074f, 0.027015f, 0.006992f, 0.013940f, -0.012815f, -0.031553f, 0.046080f, 0.025358f, + 0.018558f, 0.008522f, -0.016700f, 0.014491f, 0.038286f, -0.014803f, 0.007780f, -0.000910f, 0.007628f, 0.006172f, 0.027122f, -0.008484f, 0.008862f, -0.010279f, 0.007868f, -0.003141f, -0.002034f, 0.016680f, 0.003106f, -0.034805f, -0.023566f, -0.032644f, -0.022578f, -0.017543f, -0.009028f, -0.025099f, -0.014485f, -0.012569f, -0.021901f, -0.015308f, 0.008863f, -0.022754f, -0.008244f, -0.017767f, 0.040811f, 0.020580f, 0.035456f, -0.033089f, -0.003628f, -0.030270f, -0.006866f, 0.032956f, 0.017814f, 0.038911f, 0.018203f, 0.023914f, -0.026449f, 0.011248f, 0.010911f, 0.036009f, 0.036437f, 0.010647f, 0.032912f, -0.029275f, -0.014357f, 0.021046f, -0.076250f, 0.000931f, 0.011855f, 0.001152f, 0.018202f, 0.011705f, 0.042083f, -0.003727f, -0.006490f, 0.045807f, 0.013375f, -0.004523f, -0.021298f, -0.000835f, -0.000240f, 0.037471f, 0.004431f, 0.000612f, 0.002460f, 0.007253f, 0.011209f, -0.002519f, -0.002759f, 0.011824f, 0.005265f, 0.003579f, 0.005849f, 0.008480f, 0.006249f, -0.000848f, 0.000888f, 0.000821f, 0.012030f, -0.002626f, 0.006055f, 0.011825f, 0.008383f, 0.013240f, -0.006580f, -0.004900f, + 0.002613f, 0.004041f, -0.005217f, 0.000017f, 0.007227f, 0.012279f, -0.001405f, 0.003413f, 0.001300f, 0.032611f, 0.021203f, -0.021318f, 0.041674f, 0.024751f, -0.002093f, -0.010372f, -0.005227f, 0.025043f, 0.061540f, 0.032906f, 0.008850f, 0.002600f, 0.020216f, -0.004909f, 0.049669f, 0.028115f, 0.031019f, 0.001299f, -0.015826f, 0.010565f, 0.003724f, -0.026378f, -0.006532f, -0.001628f, -0.006268f, -0.007488f, 0.010054f, 0.005541f, -0.021707f, -0.010341f, -0.038335f, -0.003876f, -0.011952f, -0.049215f, -0.022181f, 0.001560f, 0.018381f, -0.025290f, 0.031647f, -0.008710f, -0.007646f, -0.004241f, -0.007821f, 0.023150f, -0.015608f, 0.016211f, -0.050610f, 0.015727f, 0.021943f, 0.017101f, 0.033561f, -0.033142f, 0.028719f, -0.029735f, -0.022403f, 0.025057f, -0.014737f, -0.004320f, 0.020810f, -0.033720f, 0.029880f, 0.048240f, -0.001120f, -0.006858f, 0.061237f, -0.013080f, 0.011667f, 0.034749f, -0.073939f, -0.037622f, 0.002344f, 0.002401f, 0.009841f, 0.017908f, 0.035718f, 0.021751f, -0.028397f, -0.022438f, -0.006883f, -0.007890f, -0.038307f, -0.003542f, -0.007795f, 0.009586f, -0.040030f, 0.000642f, + -0.012211f, 0.016389f, -0.006229f, 0.020821f, 0.005315f, 0.000383f, -0.012025f, -0.008453f, -0.011326f, -0.011534f, -0.009243f, 0.008338f, -0.024459f, 0.017583f, -0.003141f, 0.009898f, 0.000331f, -0.001307f, -0.016794f, 0.009324f, -0.012011f, 0.003256f, -0.012751f, -0.006542f, -0.000370f, -0.005247f, -0.014603f, 0.001338f, -0.004784f, 0.001868f, -0.010048f, -0.010452f, -0.011768f, 0.002373f, 0.002139f, 0.014819f, 0.015168f, 0.000198f, 0.000020f, -0.018553f, -0.011058f, -0.058436f, -0.035120f, 0.043159f, 0.042912f, 0.004681f, -0.010061f, 0.036405f, -0.058619f, -0.031432f, -0.063433f, 0.027855f, 0.007780f, 0.002899f, 0.012385f, -0.028816f, 0.014705f, 0.020179f, 0.026425f, 0.044737f, 0.045969f, 0.038635f, -0.001485f, 0.008799f, 0.000576f, -0.016700f, -0.003397f, -0.013931f, -0.007165f, 0.053300f, -0.012358f, -0.048851f, -0.012297f, -0.009986f, 0.004446f, 0.076760f, -0.027654f, -0.027407f, 0.026017f, -0.041444f, 0.014426f, -0.045996f, 0.060261f, 0.017092f, -0.001623f, 0.015525f, -0.023166f, -0.029310f, 0.041303f, -0.050077f, -0.040015f, -0.035963f, 0.010049f, 0.015153f, 0.018820f, -0.033359f, + 0.034362f, -0.010514f, 0.002634f, 0.052951f, -0.003564f, -0.008903f, 0.015611f, 0.042752f, -0.027573f, 0.070844f, 0.002671f, -0.081446f, -0.009875f, -0.003047f, -0.027182f, -0.007764f, 0.000028f, -0.007538f, -0.022194f, -0.018615f, 0.040157f, 0.026976f, -0.009836f, 0.026108f, -0.046793f, 0.013240f, 0.021031f, 0.013158f, 0.001557f, 0.025152f, -0.004089f, -0.001010f, 0.009421f, 0.024595f, -0.010103f, -0.010580f, -0.008313f, 0.001234f, 0.009298f, -0.004609f, -0.019278f, -0.020656f, 0.001061f, -0.009634f, 0.007249f, -0.000132f, 0.005128f, 0.011147f, -0.013472f, -0.008805f, 0.023394f, -0.005264f, 0.004265f, -0.001664f, 0.000659f, -0.007832f, -0.008841f, -0.004352f, -0.002940f, -0.012261f, 0.006043f, 0.011506f, 0.006397f, -0.000056f, 0.001098f, 0.005288f, -0.009489f, 0.002359f, 0.010909f, -0.000910f, 0.009364f, -0.005097f, -0.016901f, -0.022749f, 0.000585f, 0.009830f, -0.016845f, -0.007846f, 0.077508f, 0.045806f, -0.063030f, -0.050993f, 0.062331f, 0.059395f, 0.037063f, 0.042599f, -0.074984f, -0.016700f, -0.020881f, 0.019399f, 0.006963f, -0.030460f, -0.055458f, -0.083873f, 0.024159f, 0.021745f, + 0.006195f, 0.022674f, -0.011699f, -0.004507f, -0.020116f, 0.016280f, 0.028643f, 0.025649f, 0.006504f, 0.034180f, 0.010786f, -0.004224f, -0.014342f, -0.051114f, -0.003009f, -0.021691f, -0.017989f, 0.017348f, -0.054771f, 0.004561f, 0.001925f, -0.025752f, 0.021985f, 0.020076f, 0.009813f, -0.036997f, -0.034384f, -0.090223f, -0.023149f, 0.000308f, -0.029066f, 0.004743f, 0.018725f, 0.018580f, 0.050006f, 0.024332f, -0.022472f, -0.015910f, -0.033664f, 0.041939f, -0.018034f, 0.072839f, 0.060898f, 0.016603f, -0.039331f, 0.080449f, 0.036923f, -0.033086f, 0.004764f, 0.040241f, 0.093756f, -0.039204f, -0.072099f, -0.037433f, 0.000744f, -0.026280f, 0.011103f, 0.025558f, 0.021409f, -0.019231f, -0.029620f, -0.016613f, -0.024689f, -0.027235f, 0.007228f, 0.028832f, 0.023110f, 0.012747f, 0.011405f, 0.003875f, 0.019409f, 0.002281f, 0.002941f, 0.028168f, 0.022177f, -0.001697f, -0.009588f, 0.006063f, -0.015083f, 0.015492f, -0.005869f, 0.015864f, -0.008531f, 0.006110f, 0.004054f, 0.010346f, 0.013654f, 0.007753f, 0.006253f, -0.013886f, -0.026739f, 0.002740f, -0.013662f, -0.007241f, 0.007833f, 0.001987f, + -0.004100f, -0.005569f, 0.019019f, 0.005905f, 0.025796f, -0.008745f, 0.013734f, -0.013445f, 0.013326f, -0.018380f, 0.017725f, 0.000240f, -0.015467f, 0.030477f, 0.010516f, -0.011450f, -0.030731f, 0.024674f, -0.051677f, -0.047859f, -0.017581f, 0.036062f, -0.021567f, -0.027460f, -0.000811f, 0.041638f, 0.003921f, 0.043046f, -0.015128f, 0.052084f, 0.005553f, 0.027643f, -0.018977f, -0.012909f, 0.016151f, -0.054871f, -0.015642f, 0.019932f, -0.010165f, -0.007852f, -0.044182f, -0.041826f, 0.018713f, -0.025720f, -0.018532f, 0.033337f, 0.045998f, -0.007350f, 0.030111f, -0.055446f, 0.002934f, -0.015425f, 0.070927f, -0.029925f, 0.023355f, 0.043223f, 0.041228f, 0.011694f, -0.029406f, 0.018037f, 0.012922f, 0.012194f, 0.022687f, -0.070712f, 0.129362f, 0.041040f, -0.011710f, 0.006419f, 0.014243f, 0.035620f, -0.010299f, 0.027335f, 0.075340f, -0.004691f, -0.093780f, 0.038712f, 0.032277f, -0.033575f, 0.043679f, -0.010037f, -0.019839f, -0.050489f, 0.096658f, -0.050252f, 0.107651f, -0.071398f, 0.026456f, -0.001711f, 0.116983f, 0.051663f, -0.050301f, 0.047734f, 0.001894f, -0.031459f, 0.023354f, 0.003330f, + 0.010406f, 0.025908f, 0.010970f, -0.030436f, -0.008019f, 0.035440f, 0.009404f, 0.019930f, -0.016631f, 0.022062f, -0.037983f, 0.013765f, -0.002299f, -0.012499f, 0.023356f, -0.013344f, -0.007516f, 0.016656f, -0.003041f, 0.002260f, -0.003140f, 0.028196f, -0.018790f, 0.027512f, -0.016552f, 0.025435f, 0.035793f, 0.013103f, 0.009600f, 0.019627f, -0.005317f, -0.014382f, -0.013901f, 0.016909f, 0.005809f, -0.003082f, -0.000376f, -0.004700f, -0.025952f, -0.020070f, -0.004135f, 0.000596f, -0.006008f, -0.015302f, 0.089151f, 0.010816f, 0.048472f, 0.024831f, -0.048803f, 0.003248f, 0.029191f, -0.008546f, -0.042494f, -0.007966f, -0.092847f, -0.025825f, -0.034512f, -0.019844f, 0.020418f, -0.002511f, 0.033395f, -0.016100f, 0.003715f, 0.032636f, -0.028789f, 0.003344f, 0.018586f, -0.001601f, -0.031608f, 0.000170f, -0.021689f, 0.064381f, -0.011164f, 0.037410f, 0.006103f, -0.000397f, 0.065861f, 0.047620f, -0.028892f, -0.033770f, 0.016749f, 0.030012f, 0.036171f, 0.044074f, -0.000751f, 0.015702f, 0.041632f, -0.002023f, -0.016679f, 0.013257f, 0.001499f, -0.036613f, -0.000801f, 0.024522f, -0.036228f, -0.048611f, + -0.004592f, -0.002713f, -0.005211f, -0.016151f, -0.017624f, -0.057960f, -0.000008f, 0.057396f, 0.017628f, 0.032042f, 0.018810f, -0.007420f, -0.075200f, -0.054919f, 0.014855f, 0.048941f, 0.015923f, 0.024863f, 0.098850f, 0.102882f, 0.086855f, -0.006637f, 0.043181f, -0.027261f, -0.072880f, -0.121281f, 0.021163f, 0.015252f, -0.005392f, 0.017152f, -0.038415f, 0.008518f, -0.009336f, 0.044831f, -0.003318f, 0.036058f, -0.044006f, 0.021974f, -0.054048f, -0.010201f, 0.022867f, 0.004170f, -0.027504f, 0.006753f, -0.022649f, -0.024249f, -0.010439f, 0.006802f, 0.020694f, 0.027002f, 0.035118f, -0.008138f, -0.001871f, 0.009399f, -0.009596f, 0.011621f, -0.036341f, -0.030679f, -0.021557f, -0.028677f, -0.027982f, -0.029282f, 0.019307f, 0.014418f, -0.004920f, -0.019056f, -0.029632f, 0.018450f, 0.000342f, 0.028923f, -0.006938f, 0.025702f, 0.018642f, 0.001621f, 0.008054f, 0.030760f, -0.036168f, -0.033490f, 0.020879f, -0.002515f, -0.007165f, -0.015791f, -0.027965f, -0.058384f, 0.016133f, -0.035174f, 0.016641f, -0.015505f, -0.041303f, -0.013061f, -0.000591f, 0.019922f, -0.017633f, 0.009956f, -0.060452f, 0.055902f, + -0.126349f, -0.012973f, -0.031797f, -0.026183f, 0.016600f, 0.071787f, 0.011310f, 0.025827f, -0.062358f, 0.013570f, 0.022620f, 0.049241f, -0.026063f, -0.040475f, -0.028118f, -0.013951f, -0.002148f, -0.001403f, 0.029743f, 0.021501f, -0.017924f, -0.091368f, -0.043470f, -0.074359f, 0.008367f, 0.130251f, -0.092593f, -0.036903f, -0.014417f, 0.075150f, -0.025444f, 0.031600f, -0.024321f, 0.036069f, -0.014599f, -0.022330f, -0.047067f, 0.023892f, -0.054514f, 0.049984f, 0.090583f, 0.011388f, -0.016921f, -0.017247f, 0.075105f, 0.019705f, -0.000855f, 0.039531f, 0.012889f, 0.014123f, -0.014665f, 0.086777f, -0.136999f, 0.098806f, -0.083541f, 0.039310f, 0.097656f, -0.078761f, 0.158459f, 0.107822f, -0.040834f, -0.013843f, 0.108928f, 0.039563f, -0.010520f, 0.071577f, 0.064227f, -0.084037f, 0.112392f, -0.068369f, 0.019865f, 0.021293f, -0.030339f, 0.021437f, 0.036620f, -0.023024f, -0.041357f, 0.013097f, -0.022364f, 0.009271f, 0.009285f, -0.011600f, -0.032460f, 0.012594f, 0.011370f, -0.013493f, 0.013416f, 0.010654f, -0.026158f, 0.063477f, 0.006759f, 0.001049f, 0.001166f, -0.013193f, 0.009562f, 0.008314f, + 0.003180f, -0.021050f, 0.010601f, 0.002650f, -0.009287f, -0.018493f, 0.039154f, -0.015179f, 0.031802f, 0.036268f, -0.003931f, -0.013815f, 0.009421f, 0.008713f, 0.013941f, 0.043771f, 0.037658f, -0.034298f, 0.015561f, -0.014098f, -0.002273f, 0.050037f, -0.010010f, 0.013776f, 0.019477f, -0.003394f, 0.092343f, 0.088002f, -0.075213f, 0.073270f, 0.067433f, -0.063484f, -0.095784f, -0.141543f, 0.032899f, 0.212302f, 0.087198f, 0.000280f, 0.043775f, -0.203165f, -0.083929f, -0.007316f, 0.030890f, 0.152641f, 0.149414f, 0.025672f, -0.057680f, -0.112641f, -0.066008f, 0.007485f, 0.048215f, 0.072891f, 0.117484f, 0.070811f, -0.094765f, -0.224018f, -0.182506f, -0.018089f, 0.203011f, 0.220740f, 0.139527f, 0.042475f, -0.046951f, -0.090349f, -0.136326f, -0.077887f, -0.082938f, 0.162331f, 0.135182f, 0.085250f, 0.075601f, -0.115138f, -0.161091f, -0.187088f, -0.167405f, 0.064276f, 0.226657f, 0.278927f, 0.094334f, -0.084774f, -0.198755f, -0.238568f, -0.064886f, 0.038155f, 0.024601f, 0.148936f, 0.058488f, -0.056567f, -0.033434f, -0.115034f, -0.025092f, -0.131488f, 0.056804f, 0.155356f, 0.291023f, -0.017930f, + -0.155643f, -0.338318f, -0.013246f, -0.114568f, -0.012172f, 0.161774f, 0.032081f, -0.015152f, -0.072322f, -0.152574f, -0.099843f, 0.072844f, 0.118057f, 0.038550f, -0.020647f, -0.052188f, -0.062138f, 0.060214f, 0.069558f, 0.042661f, 0.037244f, 0.016321f, 0.034729f, -0.003701f, 0.003291f, -0.034164f, -0.015660f, 0.003492f, 0.087790f, 0.076407f, -0.003969f, -0.033303f, -0.008537f, -0.078765f, -0.052639f, -0.002393f, 0.029939f, 0.080634f, 0.062471f, 0.043896f, 0.004059f, -0.109615f, -0.098339f, -0.067008f, 0.025803f, 0.104895f, 0.204184f, 0.124574f, -0.094137f, -0.169982f, -0.149721f, -0.060794f, 0.004276f, 0.139355f, 0.175977f, 0.130804f, 0.023118f, -0.104954f, -0.237265f, -0.150006f, 0.048321f, 0.146749f, 0.168234f, 0.048629f, -0.024635f, -0.065876f, -0.077335f, -0.044839f, -0.014256f, 0.015973f, 0.036992f, 0.046249f, 0.037051f, 0.008486f, -0.003238f, -0.032557f, 0.001624f, -0.019180f, 0.095941f, 0.056210f, -0.008221f, 0.020571f, 0.010583f, -0.067958f, -0.006902f, -0.005326f, 0.007657f, 0.002343f, 0.005676f, -0.024715f, -0.009751f, -0.008982f, -0.006056f, -0.011126f, 0.041024f, -0.014443f, + 0.017752f, -0.030497f, -0.002871f, 0.012896f, -0.001230f, -0.009116f, 0.070694f, 0.009970f, -0.039672f, -0.046146f, 0.009974f, 0.009963f, -0.027021f, 0.007776f, 0.035624f, 0.018601f, 0.033544f, -0.033884f, 0.010550f, -0.000991f, 0.008234f, -0.023788f, 0.004796f, 0.026848f, 0.037940f, 0.009762f, -0.009590f, 0.011272f, 0.004493f, -0.008570f, 0.025942f, -0.037772f, 0.008807f, -0.061659f, -0.019145f, 0.025765f, -0.020771f, -0.024659f, 0.033869f, -0.021252f, -0.057526f, -0.044502f, 0.039825f, -0.004740f, -0.007624f, 0.009301f, 0.020290f, 0.050371f, -0.032486f, -0.042416f, 0.002040f, -0.005657f, 0.034201f, 0.000443f, 0.020092f, 0.009280f, -0.003133f, 0.052308f, -0.067664f, -0.009765f, -0.009357f, -0.039694f, 0.010444f, 0.022499f, 0.001222f, -0.023577f, 0.010780f, -0.005189f, 0.007018f, -0.020368f, 0.015324f, -0.000902f, 0.002707f, -0.001662f, -0.004776f, 0.026590f, -0.026312f, 0.002215f, -0.004277f, -0.009411f, -0.008229f, 0.003229f, -0.011229f, 0.012262f, 0.015842f, -0.016052f, -0.003818f, -0.006065f, 0.014550f, 0.015917f, -0.007662f, 0.019587f, 0.002217f, -0.002692f, -0.012811f, 0.014147f, + 0.005176f, -0.005461f, -0.021372f, 0.010340f, -0.019352f, 0.012772f, -0.010293f, -0.009469f, 0.018333f, 0.018010f, -0.024135f, 0.003000f, -0.005363f, -0.023962f, 0.008166f, -0.013995f, 0.016137f, -0.013802f, -0.055783f, -0.061544f, -0.146763f, 0.042758f, 0.042290f, -0.002739f, -0.123689f, -0.079865f, -0.011546f, -0.020076f, 0.083053f, 0.056119f, 0.027106f, -0.054610f, -0.022413f, -0.014286f, 0.052088f, 0.005950f, -0.014548f, -0.031947f, 0.021492f, 0.009699f, 0.026023f, -0.001160f, -0.010316f, -0.012925f, -0.029446f, -0.014558f, -0.017735f, 0.049794f, 0.026695f, 0.006089f, 0.007640f, -0.032366f, -0.001539f, 0.004222f, 0.045433f, -0.003012f, 0.021284f, -0.016551f, -0.011512f, 0.009474f, -0.018443f, 0.012577f, 0.005607f, 0.013509f, 0.044310f, -0.003602f, 0.038905f, -0.000251f, 0.025049f, -0.018971f, 0.001817f, -0.028019f, -0.036433f, -0.038257f, -0.032794f, 0.011127f, 0.005893f, 0.003103f, -0.048385f, 0.024259f, -0.042094f, -0.004502f, 0.002364f, -0.026204f, -0.028512f, -0.014871f, 0.000681f, -0.050201f, -0.033996f, 0.031633f, -0.015089f, 0.029471f, 0.004790f, -0.007821f, -0.027149f, -0.031235f, + -0.001907f, 0.044994f, 0.055552f, -0.013528f, -0.005544f, -0.020565f, -0.027648f, -0.018895f, 0.017792f, 0.009670f, 0.006918f, 0.017618f, -0.003313f, -0.011208f, 0.012123f, 0.006902f, 0.010104f, 0.015450f, -0.008401f, 0.005395f, -0.001585f, 0.000633f, -0.011465f, 0.020323f, 0.006438f, 0.004853f, -0.005930f, 0.003185f, -0.000352f, 0.031524f, 0.004059f, 0.009653f, -0.017454f, 0.001464f, -0.011282f, 0.020730f, 0.001472f, 0.000601f, -0.007145f, 0.005035f, -0.002306f, 0.000549f, 0.009828f, 0.001219f, 0.012862f, -0.008434f, 0.004193f, 0.001641f, -0.016424f, -0.000601f, 0.009414f, 0.003902f, -0.003381f, 0.005677f, 0.033013f, -0.071104f, -0.176276f, -0.168954f, -0.025675f, 0.051071f, 0.169932f, 0.146869f, 0.138430f, 0.148726f, 0.082763f, 0.020023f, -0.075140f, -0.075457f, -0.156851f, -0.121773f, -0.106809f, -0.067724f, -0.085239f, 0.117321f, 0.096464f, 0.127050f, 0.073215f, 0.103847f, -0.003821f, 0.027361f, -0.016740f, -0.040496f, -0.023230f, -0.048418f, -0.056404f, -0.056106f, -0.055429f, -0.065519f, -0.048049f, -0.038944f, -0.004488f, 0.010354f, 0.092039f, 0.077338f, 0.040671f, 0.043816f, + 0.060689f, 0.056435f, 0.027087f, 0.131168f, 0.016981f, 0.001763f, 0.024526f, -0.048930f, -0.150520f, -0.042988f, -0.120676f, -0.129285f, -0.136735f, -0.096609f, -0.086174f, 0.004364f, 0.071303f, 0.072895f, 0.088869f, 0.161890f, 0.116379f, 0.142081f, 0.139476f, 0.089122f, 0.095658f, 0.032774f, -0.033789f, -0.109245f, -0.143539f, -0.163810f, -0.106718f, -0.147006f, -0.123709f, -0.141144f, -0.082519f, -0.009748f, 0.038587f, 0.114387f, 0.108955f, 0.110829f, 0.184275f, 0.128574f, 0.152304f, 0.095047f, 0.015673f, -0.017794f, -0.046298f, -0.076216f, -0.085602f, -0.090460f, -0.088381f, -0.101631f, -0.087331f, -0.063691f, -0.039334f, -0.020188f, -0.015494f, 0.044278f, 0.041801f, 0.059238f, 0.095383f, 0.107766f, 0.068116f, 0.082366f, 0.050562f, -0.003003f, -0.022527f, -0.049517f, -0.062242f, -0.053106f, -0.046143f, -0.055514f, -0.020527f, -0.013655f, 0.001050f, 0.015837f, 0.017265f, 0.004521f, 0.002177f, 0.015518f, -0.002461f, -0.013295f, 0.012107f, 0.007410f, 0.008568f, 0.013739f, 0.003820f, 0.003748f, 0.008061f, 0.019062f, 0.016012f, 0.007553f, 0.001353f, -0.004064f, -0.016401f, -0.012176f, + -0.014936f, -0.012699f, -0.005335f, -0.009786f, -0.008848f, -0.004697f, -0.004005f, -0.005190f, -0.001640f, 0.006238f, 0.005881f, 0.007624f, 0.011822f, 0.008173f, 0.005626f, 0.007854f, 0.002790f, 0.003425f, 0.003245f, 0.002292f, 0.001911f, 0.000874f, -0.002219f, -0.004722f, -0.009053f, -0.006881f, -0.007439f, -0.005859f, -0.003148f, -0.001203f, -0.002884f, -0.001693f, -0.002395f, 0.000447f, 0.002057f, 0.003579f, 0.006761f, 0.006745f, 0.002601f, 0.002794f, 0.001207f, -0.000945f, 0.001675f, 0.001342f, 0.000367f, 0.002292f, 0.000647f, -0.000850f, -0.002018f, -0.001665f, -0.002035f, -0.001616f, -0.001791f, -0.000569f, -0.001094f, -0.001255f, -0.004088f, -0.004616f, -0.004603f, -0.003250f, -0.000785f, 0.001408f, 0.003817f, 0.004941f, 0.005087f, 0.005465f, 0.004326f, 0.004776f, 0.003250f, 0.001572f, 0.000259f, -0.000642f, -0.002475f, -0.003773f, -0.004566f, -0.004081f, -0.004307f, -0.003501f, -0.003414f, -0.002858f, -0.001358f, 0.000252f, 0.000999f, 0.002304f, 0.003349f, 0.003881f, 0.003731f, 0.003248f, 0.002197f, 0.001320f, 0.000231f, -0.000161f, -0.000828f, -0.000992f, -0.001096f, -0.000977f, + -0.000923f, -0.000700f, -0.000530f, -0.000290f, -0.000175f, -0.000086f}, + {-0.008170f, 0.013879f, 0.004877f, -0.002460f, 0.003560f, 0.004501f, 0.008344f, 0.013902f, -0.006594f, 0.004658f, -0.005611f, -0.004342f, 0.002830f, 0.000093f, 0.001204f, -0.009712f, -0.004702f, 0.003509f, 0.006940f, -0.000856f, 0.005854f, -0.010415f, -0.009254f, 0.005919f, 0.003786f, 0.001676f, 0.004301f, -0.003511f, 0.007550f, 0.008474f, 0.008199f, 0.011773f, -0.006453f, -0.005293f, 0.000456f, 0.001559f, -0.011185f, -0.000636f, -0.000938f, 0.003157f, 0.001139f, -0.006945f, -0.001696f, 0.009635f, -0.005074f, 0.001952f, -0.005826f, 0.002887f, 0.002983f, 0.001993f, -0.008696f, 0.007125f, 0.000672f, 0.001671f, -0.001175f, -0.002785f, -0.003593f, -0.005867f, 0.012685f, -0.002145f, -0.002310f, -0.002751f, 0.005646f, 0.001401f, -0.011950f, 0.003133f, -0.005447f, -0.008123f, 0.004869f, -0.004986f, -0.012942f, 0.005266f, 0.001921f, 0.000664f, -0.011926f, -0.014386f, -0.005900f, -0.007039f, 0.006731f, -0.001846f, -0.000004f, -0.003173f, -0.003904f, -0.003155f, 0.000111f, 0.006039f, 0.001090f, -0.002539f, -0.000206f, -0.002657f, -0.001220f, 0.002743f, 0.000808f, -0.002393f, -0.003385f, -0.001059f, + -0.001385f, 0.001421f, -0.000846f, 0.000610f, 0.000483f, 0.001542f, 0.000373f, 0.002160f, -0.000849f, 0.000605f, -0.000466f, 0.001562f, -0.000084f, 0.001446f, 0.001673f, 0.007999f, 0.000866f, 0.000599f, 0.007106f, -0.010850f, 0.001705f, -0.009071f, -0.011452f, 0.003177f, 0.010560f, -0.006687f, 0.004965f, -0.005058f, -0.002487f, 0.002047f, 0.000444f, -0.005374f, -0.015752f, -0.015654f, 0.000190f, -0.004039f, -0.000230f, 0.008034f, 0.001216f, 0.009859f, 0.013372f, -0.007197f, 0.011537f, 0.001349f, 0.011712f, 0.000643f, 0.013915f, 0.001679f, -0.007918f, -0.002259f, 0.000705f, 0.006272f, -0.001808f, -0.002210f, 0.001308f, 0.004734f, -0.005900f, -0.000460f, -0.001876f, 0.004174f, 0.005137f, 0.000179f, -0.005380f, -0.000485f, -0.001038f, 0.002953f, 0.005402f, 0.009705f, -0.003501f, 0.006258f, -0.002946f, -0.008654f, -0.007700f, -0.005270f, 0.004760f, 0.005131f, -0.002957f, 0.008377f, 0.000209f, 0.002969f, 0.000373f, 0.010209f, 0.006778f, 0.007492f, 0.003024f, 0.004364f, 0.002700f, 0.004041f, 0.008371f, -0.001908f, -0.000500f, 0.011798f, 0.002329f, 0.000225f, 0.002417f, -0.004551f, + 0.000602f, 0.003395f, -0.000328f, -0.011258f, 0.003432f, 0.001061f, -0.001845f, -0.003989f, 0.002517f, 0.000636f, 0.006009f, -0.002365f, -0.001159f, -0.002449f, -0.001941f, 0.001405f, 0.000387f, 0.002302f, 0.001097f, 0.000431f, -0.002243f, -0.001871f, -0.001075f, -0.001212f, 0.000906f, -0.003030f, 0.002503f, -0.001177f, 0.000707f, -0.000840f, -0.001079f, -0.001748f, 0.000939f, -0.001438f, -0.001021f, -0.003295f, 0.012137f, -0.012217f, -0.008204f, -0.006724f, -0.009874f, 0.003239f, 0.004386f, -0.007927f, 0.001950f, 0.016546f, -0.011898f, 0.008432f, 0.014287f, 0.014122f, -0.008565f, -0.002285f, 0.007051f, 0.001420f, 0.002253f, -0.006215f, 0.003553f, -0.021274f, 0.016870f, 0.026365f, 0.004752f, 0.008939f, -0.004171f, -0.000269f, 0.014057f, -0.007247f, -0.016753f, -0.002715f, 0.000356f, 0.000040f, -0.013512f, 0.001100f, 0.003495f, -0.016094f, -0.007497f, 0.007602f, 0.002658f, -0.005666f, -0.001388f, 0.005701f, -0.007781f, 0.016851f, 0.005343f, 0.000868f, -0.010642f, -0.000969f, 0.005898f, -0.003559f, 0.000474f, -0.003748f, -0.000098f, -0.001509f, -0.008499f, 0.000632f, -0.008214f, 0.012671f, + -0.012029f, -0.007995f, -0.002600f, -0.014458f, 0.009878f, -0.007736f, -0.020129f, -0.003632f, -0.008609f, 0.002566f, 0.009440f, -0.009373f, 0.001307f, -0.006336f, 0.006744f, 0.001004f, -0.006559f, 0.005831f, -0.007117f, -0.009500f, 0.010816f, -0.006811f, 0.003188f, 0.000346f, 0.001112f, 0.003817f, -0.001965f, -0.003176f, -0.003497f, -0.005756f, 0.002105f, -0.008170f, 0.000620f, -0.001589f, 0.002746f, -0.002374f, -0.000050f, 0.000092f, 0.000377f, -0.004302f, 0.004082f, 0.000268f, 0.000899f, -0.002283f, -0.001498f, -0.001694f, -0.000252f, 0.002556f, -0.009499f, 0.005986f, -0.000327f, -0.001895f, 0.007105f, -0.006819f, -0.023865f, -0.004690f, -0.001521f, 0.010368f, 0.014680f, 0.013021f, 0.006221f, -0.005160f, -0.001666f, -0.014715f, -0.012509f, 0.004268f, 0.016682f, -0.004822f, 0.017090f, 0.010887f, -0.010651f, 0.005666f, -0.001696f, 0.005928f, -0.011900f, -0.008002f, 0.001881f, 0.008526f, -0.001153f, 0.005077f, 0.007045f, -0.013393f, -0.002759f, -0.006186f, -0.018293f, 0.011317f, 0.001729f, 0.004104f, 0.007820f, 0.014439f, 0.004960f, 0.000673f, 0.011254f, -0.002652f, -0.005877f, 0.011653f, + -0.006219f, 0.019697f, 0.008996f, 0.007835f, 0.000329f, -0.005662f, -0.006974f, 0.009662f, 0.013038f, -0.009745f, 0.002287f, 0.012539f, -0.002311f, 0.004085f, 0.027595f, -0.008359f, -0.003422f, 0.005395f, -0.013966f, -0.000545f, 0.002394f, -0.006170f, 0.006651f, -0.004462f, 0.004065f, 0.013763f, 0.000388f, -0.003140f, -0.009450f, -0.000743f, -0.011715f, 0.004943f, -0.004410f, -0.005680f, -0.002481f, 0.002240f, -0.003444f, -0.003314f, -0.002920f, 0.000670f, 0.004176f, 0.003209f, 0.000766f, -0.000947f, -0.001404f, -0.000939f, -0.000753f, -0.001880f, -0.003532f, -0.000612f, -0.001173f, 0.001862f, -0.000105f, 0.000966f, -0.003576f, 0.001526f, 0.001709f, -0.001232f, -0.003151f, -0.001061f, -0.003300f, -0.001611f, -0.001539f, 0.002421f, 0.000132f, -0.000427f, -0.000368f, 0.000630f, 0.000252f, 0.001318f, -0.004994f, -0.001192f, 0.001467f, -0.006198f, -0.034216f, -0.002892f, -0.000846f, -0.006947f, -0.010699f, -0.003590f, 0.018168f, -0.013093f, -0.019525f, 0.007160f, -0.008006f, 0.002649f, 0.003328f, 0.012150f, -0.008502f, -0.002651f, 0.002289f, 0.011288f, -0.005468f, -0.007619f, -0.002371f, -0.006572f, + 0.008285f, 0.015284f, 0.007628f, 0.000014f, -0.001400f, -0.008953f, -0.000655f, 0.024116f, 0.004141f, -0.003136f, 0.027886f, -0.001801f, 0.020708f, -0.006419f, 0.000043f, 0.014014f, 0.004169f, 0.003392f, 0.004923f, 0.002356f, 0.007656f, 0.004407f, -0.013425f, 0.024608f, 0.014909f, 0.020185f, 0.013497f, 0.008843f, -0.013656f, 0.005862f, 0.006772f, 0.000920f, -0.008419f, 0.022838f, 0.013781f, 0.020621f, 0.003577f, -0.004257f, -0.005229f, 0.015154f, -0.007563f, -0.015893f, 0.018440f, 0.005686f, -0.010307f, -0.006031f, 0.000809f, -0.004889f, 0.001705f, -0.002279f, 0.002510f, -0.006560f, -0.001873f, -0.015048f, 0.005623f, -0.001960f, -0.000493f, 0.005366f, -0.001941f, -0.002915f, 0.008678f, -0.000702f, 0.006721f, 0.009020f, 0.007394f, 0.004707f, 0.004702f, 0.001809f, 0.002709f, -0.000076f, -0.001992f, -0.001863f, 0.003916f, -0.001248f, -0.002549f, -0.002680f, 0.001816f, -0.003008f, -0.000837f, -0.000692f, 0.004911f, 0.001966f, 0.003497f, -0.003474f, 0.000980f, -0.002810f, -0.001025f, 0.003334f, -0.000544f, -0.001524f, -0.001184f, -0.001027f, -0.002056f, -0.001460f, 0.001387f, -0.000207f, + -0.000946f, -0.008802f, -0.001396f, -0.022501f, -0.008982f, -0.025144f, -0.017283f, 0.001694f, -0.016392f, -0.012917f, 0.001352f, -0.002991f, 0.016576f, -0.011273f, 0.018386f, 0.022622f, 0.002179f, -0.019475f, -0.013751f, 0.020310f, -0.010538f, -0.005725f, 0.011306f, -0.015100f, -0.026745f, 0.010526f, 0.022776f, -0.011927f, 0.005695f, -0.000550f, 0.009838f, -0.027849f, 0.005360f, -0.011258f, 0.006531f, 0.000445f, -0.011805f, 0.019223f, 0.008664f, 0.008057f, 0.025571f, 0.011896f, 0.005143f, 0.014486f, 0.002742f, 0.004624f, 0.007168f, 0.002358f, 0.000988f, 0.003888f, 0.003328f, 0.029231f, 0.016297f, -0.000157f, 0.024406f, 0.015323f, 0.017962f, 0.028311f, -0.014719f, -0.012207f, 0.024667f, -0.008754f, -0.001168f, -0.014852f, -0.006466f, 0.008769f, 0.012980f, -0.011331f, -0.001547f, 0.003674f, -0.003409f, 0.006780f, -0.012142f, -0.002310f, -0.014012f, 0.026710f, -0.008891f, 0.014555f, -0.004396f, -0.007224f, 0.019453f, 0.003385f, -0.006013f, 0.006338f, -0.002683f, 0.000496f, -0.005823f, 0.007387f, -0.001656f, 0.002621f, 0.007722f, 0.004516f, 0.002126f, 0.004439f, 0.000089f, -0.000772f, + 0.002937f, 0.000759f, -0.005723f, 0.001123f, -0.001413f, -0.002599f, 0.004670f, -0.000053f, 0.002141f, 0.001977f, -0.001389f, 0.000899f, -0.003485f, 0.000624f, -0.003211f, 0.000207f, -0.001483f, 0.003536f, 0.000663f, 0.003035f, 0.000536f, 0.003683f, 0.000713f, 0.001671f, 0.001927f, 0.000338f, 0.008401f, -0.009133f, 0.002845f, 0.001228f, 0.002822f, -0.013088f, 0.016845f, 0.009736f, 0.022914f, 0.004368f, -0.003173f, -0.026019f, -0.013922f, -0.009807f, 0.006567f, -0.013560f, -0.022508f, -0.006343f, 0.005706f, 0.002410f, -0.025123f, 0.020263f, 0.001523f, -0.001617f, -0.021401f, -0.012382f, 0.005001f, 0.002538f, -0.023767f, -0.007477f, 0.008642f, 0.000863f, 0.002366f, 0.012065f, 0.014186f, 0.008202f, -0.003696f, 0.007062f, 0.002197f, -0.008617f, -0.017581f, 0.030161f, -0.007611f, -0.014846f, 0.000279f, 0.007402f, 0.009775f, 0.022521f, 0.003717f, -0.000520f, -0.008506f, -0.000364f, 0.012552f, -0.001698f, 0.015686f, 0.029937f, 0.002534f, -0.006631f, 0.000923f, 0.025755f, 0.032373f, -0.016244f, 0.004535f, 0.004399f, 0.017517f, 0.009126f, 0.003111f, 0.005259f, -0.012854f, 0.007905f, + 0.008377f, 0.008207f, -0.005532f, 0.000349f, 0.006394f, 0.009507f, -0.001315f, 0.003179f, 0.002275f, -0.011077f, 0.005331f, 0.000383f, -0.009813f, -0.007309f, 0.010526f, -0.004838f, 0.007305f, -0.010642f, -0.007955f, -0.003724f, 0.002456f, -0.000307f, 0.009520f, 0.004168f, 0.001773f, 0.000315f, 0.004807f, 0.004209f, 0.001460f, -0.008125f, 0.000442f, -0.003504f, 0.001375f, -0.002679f, -0.001842f, -0.000257f, -0.000695f, -0.001296f, -0.002603f, -0.007978f, -0.002055f, 0.000684f, -0.005145f, -0.003524f, -0.003211f, -0.000030f, -0.003210f, -0.005683f, -0.001151f, 0.002437f, 0.004395f, -0.001638f, 0.001372f, -0.002263f, 0.001635f, -0.008568f, 0.011769f, -0.010755f, -0.019405f, 0.013212f, -0.001705f, -0.004821f, 0.004935f, 0.011231f, -0.032466f, 0.001863f, 0.024639f, -0.003001f, 0.044437f, 0.021183f, -0.013753f, -0.010112f, -0.004320f, -0.012996f, -0.005862f, 0.019785f, -0.007800f, -0.006643f, 0.019802f, 0.016075f, 0.005202f, 0.009170f, 0.018498f, 0.012225f, 0.013806f, -0.010335f, -0.007136f, 0.017589f, -0.003622f, 0.015913f, -0.000041f, -0.019245f, -0.012447f, 0.005072f, 0.014980f, -0.020920f, + 0.001155f, -0.011219f, 0.005684f, -0.012805f, 0.017543f, 0.017536f, -0.017367f, -0.001936f, 0.004887f, -0.000660f, -0.023434f, -0.010542f, 0.003850f, 0.015344f, 0.025268f, 0.008542f, -0.018972f, -0.004251f, -0.004726f, -0.002305f, 0.015839f, 0.002446f, 0.012663f, -0.019350f, 0.008500f, 0.001222f, -0.015415f, 0.017993f, 0.007539f, -0.002533f, -0.004200f, 0.003034f, -0.000828f, -0.015664f, 0.011586f, -0.003692f, 0.006848f, -0.012191f, -0.021553f, -0.011955f, 0.004914f, 0.009466f, 0.000080f, 0.005191f, 0.019064f, 0.000115f, -0.005064f, 0.012001f, -0.003893f, 0.011293f, 0.000519f, 0.003614f, -0.009914f, 0.000920f, 0.000105f, 0.005141f, 0.005585f, 0.007985f, 0.004969f, -0.002059f, -0.002513f, -0.003823f, 0.009404f, -0.004547f, 0.004824f, 0.000972f, 0.002848f, 0.003852f, 0.005197f, 0.002293f, -0.001992f, 0.004756f, 0.001738f, 0.001552f, -0.002011f, 0.006425f, 0.002911f, 0.001301f, -0.006604f, 0.002288f, -0.002698f, -0.000123f, 0.004253f, 0.001243f, 0.020475f, -0.025579f, -0.004193f, -0.008277f, 0.025927f, -0.011805f, 0.021339f, -0.006860f, 0.019914f, 0.027033f, -0.012194f, 0.008418f, + -0.007055f, 0.015329f, -0.006022f, 0.012735f, 0.010575f, 0.009927f, -0.002441f, 0.010448f, -0.005484f, -0.013657f, -0.006606f, 0.014895f, -0.017747f, 0.002618f, -0.000183f, 0.013247f, 0.027053f, -0.025037f, 0.000760f, 0.024177f, -0.000708f, 0.022087f, 0.002930f, 0.009605f, -0.003181f, -0.002069f, 0.005903f, -0.034528f, 0.003279f, -0.001008f, -0.013767f, 0.008902f, 0.005524f, 0.024739f, 0.012304f, -0.002666f, 0.047241f, 0.011604f, -0.025046f, 0.006406f, 0.002298f, 0.016337f, -0.010847f, 0.002976f, 0.013873f, 0.000901f, 0.008414f, -0.002690f, -0.027342f, -0.028114f, -0.000038f, -0.009643f, 0.022330f, -0.038139f, 0.048673f, -0.000501f, 0.027058f, 0.030838f, 0.007376f, -0.008446f, -0.006295f, -0.014809f, -0.019417f, -0.001879f, 0.006143f, -0.005129f, 0.009672f, -0.006755f, -0.015650f, -0.010062f, -0.007955f, 0.002566f, -0.002523f, 0.001477f, 0.010352f, 0.005010f, 0.004862f, 0.003583f, -0.004451f, -0.005610f, 0.000219f, -0.001386f, 0.002903f, 0.000462f, 0.001119f, 0.003036f, 0.005973f, 0.003359f, -0.012171f, 0.001946f, -0.002370f, 0.008534f, 0.008784f, 0.004868f, -0.000903f, -0.002841f, + 0.003398f, 0.002503f, -0.004354f, -0.004778f, -0.001195f, -0.003356f, 0.000772f, -0.003569f, -0.005925f, 0.002053f, 0.009703f, -0.002802f, 0.003873f, -0.007780f, 0.000909f, 0.004032f, 0.004426f, -0.000511f, 0.002825f, 0.006007f, -0.004685f, 0.002038f, -0.045051f, -0.003138f, 0.015411f, 0.002580f, -0.016883f, -0.041842f, 0.000042f, 0.004830f, -0.007285f, -0.001711f, -0.012272f, 0.006532f, -0.010204f, 0.021612f, 0.007682f, -0.012824f, -0.016006f, -0.027506f, 0.020691f, -0.008756f, 0.001486f, 0.026867f, 0.036992f, 0.022528f, -0.003346f, 0.001955f, -0.025228f, -0.010804f, -0.010091f, 0.006819f, -0.035823f, 0.009404f, 0.009908f, 0.002073f, -0.018366f, 0.017746f, 0.027680f, -0.004431f, -0.000376f, 0.003229f, -0.015894f, -0.016909f, 0.009851f, 0.006676f, 0.020975f, -0.022925f, 0.025008f, -0.013102f, 0.013841f, -0.021227f, -0.016635f, -0.008394f, -0.000417f, -0.002514f, 0.009216f, -0.004580f, -0.036988f, -0.027842f, -0.007700f, 0.000984f, -0.037082f, 0.000513f, 0.018551f, -0.009859f, -0.004158f, 0.005632f, 0.015801f, -0.032761f, 0.016884f, -0.005774f, -0.004776f, -0.000176f, 0.013533f, 0.016697f, + -0.019520f, -0.010063f, -0.013073f, -0.006446f, -0.004622f, 0.009695f, 0.003384f, -0.011897f, -0.005168f, -0.009132f, 0.006477f, 0.021738f, 0.014509f, -0.000150f, -0.000467f, -0.012193f, 0.000626f, -0.007467f, 0.010413f, -0.001905f, 0.018041f, 0.005922f, 0.006406f, -0.006467f, 0.000546f, 0.000159f, -0.014124f, 0.015207f, 0.001316f, -0.002753f, 0.008133f, -0.002882f, -0.002239f, -0.000792f, 0.001352f, -0.012469f, 0.005634f, 0.007478f, 0.008188f, -0.001371f, -0.002747f, 0.002634f, 0.004713f, -0.004527f, -0.002445f, 0.004303f, -0.009243f, 0.000941f, -0.000042f, 0.008752f, -0.000486f, 0.040466f, 0.000947f, -0.008260f, 0.031469f, -0.006926f, -0.012844f, -0.003433f, -0.002926f, 0.039026f, 0.044657f, -0.005862f, 0.009485f, 0.011342f, -0.005725f, -0.021263f, 0.010430f, 0.041499f, 0.031677f, 0.027050f, -0.009848f, 0.011696f, 0.022303f, -0.029006f, -0.021571f, 0.025244f, -0.012909f, -0.014221f, -0.000973f, 0.031571f, -0.004757f, 0.029058f, 0.001920f, 0.026070f, -0.015628f, 0.035840f, 0.010933f, -0.011184f, -0.018293f, 0.006504f, -0.025883f, 0.003062f, -0.030714f, -0.010534f, -0.010999f, 0.017548f, + -0.017569f, 0.028943f, -0.035458f, -0.061454f, 0.038408f, 0.017125f, -0.007505f, 0.000275f, 0.042368f, 0.019826f, 0.003410f, -0.011157f, 0.009195f, -0.004976f, 0.000563f, -0.027552f, -0.027844f, 0.016375f, -0.009305f, 0.009027f, 0.052614f, -0.013795f, 0.011374f, -0.034354f, 0.040678f, -0.013637f, -0.018059f, -0.008736f, -0.005593f, 0.016911f, -0.034326f, 0.028729f, -0.033639f, 0.024281f, -0.017271f, -0.023563f, 0.023570f, -0.001059f, 0.007795f, -0.009577f, 0.013991f, -0.007659f, -0.010502f, -0.004788f, -0.015973f, 0.011043f, -0.000404f, -0.010518f, -0.004327f, 0.003874f, 0.017296f, 0.003214f, 0.002586f, 0.004545f, -0.000291f, -0.002965f, 0.008860f, -0.004937f, 0.004090f, 0.003603f, -0.004303f, -0.001293f, -0.000836f, 0.012295f, 0.010940f, -0.003994f, -0.005792f, -0.012919f, -0.000066f, -0.002658f, -0.001672f, -0.002126f, 0.000571f, 0.011794f, 0.003744f, -0.001444f, 0.015113f, 0.007265f, -0.046018f, -0.034201f, -0.033155f, 0.046362f, 0.001590f, 0.019911f, 0.011889f, -0.040800f, -0.035649f, 0.024013f, -0.063634f, 0.018620f, 0.018957f, -0.004082f, -0.025290f, -0.023296f, 0.039721f, -0.021332f, + -0.002752f, -0.006672f, -0.020510f, 0.030170f, 0.009664f, 0.027293f, 0.015934f, 0.018824f, -0.005913f, 0.030638f, -0.002761f, -0.020065f, -0.023544f, -0.005456f, 0.013367f, -0.017921f, 0.023869f, 0.015253f, -0.017875f, -0.064502f, -0.005345f, -0.005335f, -0.001524f, 0.046801f, 0.001136f, -0.036740f, -0.021695f, -0.022489f, 0.019314f, -0.014199f, -0.030477f, -0.034163f, -0.021135f, -0.016647f, -0.075934f, 0.001753f, 0.009567f, 0.024900f, -0.039623f, 0.012922f, -0.032723f, -0.026927f, -0.009102f, 0.031691f, 0.008218f, 0.029403f, 0.055793f, 0.016664f, 0.012875f, 0.036224f, -0.028228f, -0.003725f, -0.013358f, -0.015653f, 0.029200f, 0.026797f, 0.042852f, 0.020888f, -0.039057f, -0.026213f, 0.030845f, -0.046391f, -0.050855f, -0.016166f, 0.037223f, 0.005736f, -0.008980f, 0.025159f, 0.020757f, -0.000382f, 0.005993f, 0.021294f, -0.013951f, 0.012518f, -0.010256f, -0.002170f, -0.010691f, -0.002206f, 0.002929f, 0.014830f, -0.009447f, -0.012293f, 0.000070f, 0.008259f, 0.002815f, 0.007479f, -0.001103f, -0.012319f, -0.002789f, -0.008256f, 0.000728f, -0.006952f, -0.001214f, -0.001228f, -0.013484f, 0.010722f, + 0.001784f, 0.010906f, 0.014196f, 0.019162f, -0.007215f, -0.010703f, -0.000726f, 0.001531f, 0.001121f, 0.021341f, -0.020787f, -0.042842f, 0.011059f, -0.001172f, -0.001377f, 0.000987f, 0.005334f, 0.008397f, 0.017984f, 0.005450f, 0.015048f, 0.008012f, 0.017934f, 0.047339f, 0.001014f, -0.063077f, -0.023471f, 0.015212f, 0.000025f, -0.013620f, -0.040745f, -0.027082f, 0.007856f, 0.031906f, 0.012016f, -0.031771f, 0.016051f, 0.012544f, -0.035794f, -0.007319f, -0.044124f, 0.033481f, -0.018744f, -0.023395f, 0.030935f, -0.031264f, 0.007920f, 0.065038f, -0.008339f, 0.009980f, 0.018782f, -0.000854f, 0.008948f, -0.039286f, 0.008743f, 0.006051f, 0.005603f, 0.085627f, 0.057855f, -0.007223f, -0.030778f, -0.020728f, 0.026505f, 0.030707f, -0.035272f, -0.020101f, -0.047117f, 0.072930f, 0.019675f, 0.007720f, -0.012537f, -0.008872f, -0.017110f, -0.009947f, 0.052366f, -0.015040f, 0.013675f, 0.052112f, 0.008219f, -0.015812f, -0.040009f, 0.000139f, 0.015031f, -0.079937f, 0.016488f, 0.007754f, 0.053338f, 0.036023f, 0.028091f, 0.047348f, 0.026551f, -0.010479f, 0.004015f, 0.015905f, -0.006212f, 0.001426f, + -0.004185f, 0.006726f, 0.003483f, 0.044141f, -0.002090f, 0.017566f, -0.008744f, 0.016928f, -0.002310f, 0.022912f, 0.004245f, 0.005686f, 0.020916f, -0.002750f, 0.008183f, 0.013669f, -0.000465f, 0.010855f, 0.015871f, 0.006367f, 0.012472f, 0.018467f, 0.010321f, -0.008293f, -0.002294f, 0.003270f, 0.003892f, -0.000865f, -0.008709f, 0.002831f, 0.004200f, 0.001252f, 0.009449f, -0.002518f, 0.015333f, 0.007741f, -0.007578f, 0.015809f, -0.003238f, 0.001352f, -0.011084f, -0.050616f, -0.007306f, 0.034744f, 0.019476f, -0.056712f, -0.074686f, 0.008489f, 0.050629f, 0.020385f, 0.030936f, -0.017712f, 0.023896f, 0.003891f, 0.000629f, -0.027218f, -0.009692f, -0.042323f, 0.062673f, 0.020862f, -0.050854f, -0.035052f, 0.022805f, 0.002266f, 0.012593f, -0.015387f, 0.031307f, 0.018095f, 0.021576f, 0.040846f, 0.036401f, 0.007311f, 0.035600f, -0.018879f, 0.020479f, -0.000285f, 0.024883f, 0.011197f, -0.005852f, -0.015138f, 0.017221f, -0.022390f, 0.058578f, -0.015910f, -0.010928f, 0.011783f, 0.029034f, 0.028366f, -0.019214f, 0.050143f, 0.050053f, 0.028807f, 0.012231f, 0.003968f, -0.015891f, -0.038146f, + -0.064719f, -0.010766f, 0.023252f, -0.001623f, 0.028423f, 0.030554f, 0.033186f, 0.011266f, 0.018581f, 0.107526f, -0.052783f, -0.023374f, 0.010878f, 0.020588f, -0.002523f, -0.084361f, 0.019948f, -0.013317f, 0.012821f, 0.014684f, 0.037496f, 0.007244f, 0.000851f, -0.034056f, 0.035308f, -0.012794f, 0.005288f, 0.030505f, 0.014191f, -0.033020f, -0.006858f, -0.018654f, -0.006052f, -0.014374f, 0.002546f, 0.001074f, 0.013458f, -0.003383f, 0.016370f, 0.015607f, 0.021166f, -0.000425f, 0.000070f, -0.012923f, -0.005464f, -0.017227f, -0.011224f, -0.005287f, 0.022510f, 0.006908f, -0.003246f, 0.001292f, -0.008459f, 0.003003f, 0.019796f, 0.021704f, -0.004097f, -0.020449f, -0.000098f, 0.001025f, 0.009751f, -0.005799f, 0.006836f, -0.009820f, 0.015135f, -0.028528f, 0.003169f, -0.008897f, -0.009698f, -0.000205f, 0.005926f, -0.018454f, 0.009132f, -0.003668f, 0.009052f, -0.009541f, -0.016712f, 0.006269f, 0.028133f, 0.027705f, -0.015390f, -0.020885f, 0.006112f, -0.020068f, -0.064201f, 0.066237f, -0.019428f, 0.018591f, 0.006056f, 0.055557f, 0.044241f, 0.027825f, -0.026606f, -0.004416f, 0.037938f, 0.020151f, + 0.044667f, 0.119275f, -0.007481f, -0.047049f, -0.012355f, 0.035646f, -0.005425f, -0.055561f, 0.084765f, 0.043962f, -0.030028f, -0.046515f, -0.005842f, 0.010418f, -0.014889f, 0.033702f, 0.028530f, 0.033072f, 0.063241f, 0.010608f, 0.017780f, 0.011328f, -0.024664f, -0.058972f, 0.034549f, -0.040124f, -0.030276f, 0.046563f, 0.024270f, 0.026273f, 0.013646f, 0.009609f, -0.002804f, -0.058215f, -0.051837f, 0.000990f, 0.030779f, -0.038472f, 0.036327f, -0.017047f, -0.043331f, 0.013656f, 0.037742f, -0.006964f, 0.007142f, 0.037675f, 0.036931f, 0.038549f, 0.002680f, -0.023448f, 0.021786f, 0.091540f, 0.010869f, 0.037262f, 0.052097f, 0.002616f, -0.016741f, -0.045912f, -0.018766f, -0.072389f, -0.025025f, -0.018064f, -0.009121f, 0.016546f, 0.002631f, -0.003214f, -0.021015f, -0.013638f, -0.012289f, 0.017987f, -0.018831f, -0.003634f, -0.016641f, 0.005450f, -0.010647f, -0.017755f, 0.000500f, -0.025594f, -0.009273f, 0.000544f, -0.023428f, -0.004282f, -0.020445f, -0.011568f, 0.002005f, -0.036992f, -0.003828f, 0.001857f, -0.000657f, 0.017650f, -0.023867f, -0.007660f, 0.025070f, 0.000616f, -0.010239f, -0.000975f, + -0.008793f, 0.005001f, -0.011159f, -0.008106f, 0.012322f, -0.000746f, 0.000563f, -0.019879f, 0.033033f, 0.027086f, 0.000183f, -0.022645f, -0.033177f, -0.058236f, 0.009793f, 0.034922f, 0.047985f, -0.041768f, -0.044471f, 0.053388f, 0.023716f, -0.002663f, -0.005971f, -0.022917f, 0.009770f, -0.010980f, -0.023853f, 0.024172f, 0.029647f, 0.020301f, 0.001505f, -0.004960f, -0.017369f, 0.003053f, 0.012164f, 0.007088f, -0.019555f, -0.067914f, 0.014523f, -0.015901f, -0.020708f, 0.003151f, -0.009208f, 0.005048f, -0.067601f, 0.030683f, 0.024030f, -0.048920f, 0.033317f, 0.044292f, 0.037078f, -0.010694f, 0.005807f, -0.006623f, 0.024009f, -0.006158f, -0.000628f, 0.119328f, -0.036509f, 0.009350f, -0.032646f, -0.019296f, 0.067254f, 0.024154f, 0.022651f, 0.042700f, -0.055643f, -0.046303f, 0.067631f, -0.043757f, 0.034285f, 0.042361f, 0.003635f, 0.010828f, 0.015889f, 0.076616f, -0.026738f, -0.030164f, -0.071386f, -0.015848f, -0.031015f, 0.023359f, -0.044851f, 0.074432f, 0.040391f, 0.045205f, 0.022118f, 0.039424f, 0.020552f, 0.071012f, 0.017168f, 0.033819f, 0.025854f, -0.035906f, -0.017346f, -0.014304f, + 0.005787f, 0.003405f, 0.034638f, 0.014634f, -0.000507f, -0.002331f, 0.007534f, 0.002585f, -0.014137f, -0.027541f, -0.014814f, -0.020854f, 0.024877f, -0.009624f, -0.014941f, 0.007485f, -0.006087f, 0.030598f, 0.013980f, -0.006277f, 0.017083f, -0.020856f, 0.009184f, 0.015043f, -0.006186f, 0.029593f, 0.030470f, 0.019967f, -0.015014f, 0.024866f, 0.014233f, -0.025982f, -0.005353f, 0.001881f, -0.015764f, 0.000968f, 0.021617f, -0.026159f, -0.029853f, 0.012181f, 0.005324f, -0.003594f, 0.027767f, -0.019832f, 0.049093f, -0.029243f, 0.025704f, 0.083828f, 0.041337f, 0.031429f, -0.047669f, 0.012823f, 0.046413f, -0.040566f, 0.065928f, 0.023401f, 0.035008f, 0.031421f, -0.021018f, 0.032577f, 0.027832f, 0.011570f, 0.065324f, 0.049579f, -0.004382f, -0.113138f, -0.013823f, 0.052048f, 0.049945f, 0.051624f, 0.011843f, 0.028685f, 0.001948f, 0.014301f, -0.004360f, -0.035210f, 0.071594f, -0.002152f, 0.068180f, 0.030744f, 0.049022f, -0.069701f, 0.046491f, 0.023268f, 0.020569f, -0.018414f, 0.015731f, -0.013131f, 0.014982f, 0.068983f, 0.026930f, 0.090077f, 0.003820f, 0.019815f, 0.052090f, -0.010774f, + 0.082241f, 0.040741f, 0.006628f, -0.054982f, -0.034951f, 0.030146f, 0.002845f, -0.009216f, 0.001189f, -0.009417f, 0.005884f, -0.040030f, 0.026115f, -0.042608f, -0.064043f, -0.023747f, -0.004170f, -0.021183f, -0.016967f, 0.053757f, -0.007039f, 0.048977f, -0.047226f, 0.053831f, 0.006595f, -0.059462f, 0.058307f, 0.049300f, -0.019071f, -0.008214f, 0.013438f, 0.025966f, 0.015965f, -0.002356f, -0.027666f, 0.017193f, -0.012311f, -0.001555f, 0.033355f, -0.006760f, -0.006228f, -0.027288f, -0.007999f, 0.007846f, 0.004668f, -0.001582f, 0.024911f, 0.022937f, -0.018528f, 0.006448f, -0.001081f, 0.001301f, 0.022855f, 0.007575f, -0.026290f, 0.017676f, -0.022586f, 0.011572f, -0.018399f, -0.006627f, -0.006292f, -0.003497f, 0.002335f, 0.005481f, 0.002454f, 0.001939f, -0.005762f, 0.004933f, -0.013000f, 0.009187f, 0.009099f, -0.001395f, -0.010787f, 0.008249f, -0.002977f, 0.013521f, -0.007852f, -0.005288f, -0.018454f, 0.000092f, -0.018258f, 0.005096f, -0.015227f, -0.049985f, -0.047747f, -0.019048f, -0.020475f, 0.039228f, -0.062599f, -0.078180f, -0.084927f, -0.102768f, 0.046426f, 0.050796f, -0.002539f, -0.008069f, + 0.000096f, -0.024301f, 0.006399f, 0.012996f, -0.021282f, 0.070317f, 0.066523f, 0.043335f, 0.047729f, -0.043375f, 0.029401f, 0.002517f, 0.034934f, -0.013460f, -0.017240f, -0.064242f, 0.058082f, -0.058056f, -0.069897f, -0.018437f, -0.014251f, 0.075634f, -0.040975f, 0.010199f, -0.038634f, -0.010940f, 0.073453f, 0.013527f, 0.023651f, 0.036077f, 0.067533f, 0.004102f, -0.006872f, -0.081790f, -0.014454f, -0.006599f, -0.001674f, 0.044739f, 0.024746f, 0.152182f, 0.008302f, -0.004791f, -0.049808f, -0.004158f, 0.061231f, 0.055408f, -0.004283f, -0.026885f, -0.074491f, 0.018658f, 0.048370f, -0.024543f, -0.054098f, -0.023404f, 0.047711f, -0.014504f, 0.035243f, -0.109177f, -0.060189f, -0.087323f, -0.022764f, 0.034798f, 0.019413f, -0.038167f, -0.035394f, -0.042877f, 0.017979f, 0.089567f, 0.028054f, -0.000632f, -0.030971f, -0.002840f, -0.023915f, -0.007056f, 0.011539f, 0.010326f, -0.027643f, -0.013219f, -0.001611f, 0.019164f, -0.047607f, -0.033381f, -0.010371f, 0.023527f, -0.002335f, 0.031049f, 0.011056f, 0.003331f, -0.009956f, -0.005814f, -0.020830f, -0.005040f, -0.031897f, -0.007756f, 0.037255f, 0.012565f, + 0.017559f, -0.025719f, -0.044464f, 0.022092f, 0.022510f, -0.013687f, 0.001108f, -0.019299f, -0.002366f, 0.005179f, -0.001311f, 0.016521f, 0.011766f, 0.010604f, 0.022864f, 0.011455f, 0.018325f, 0.017893f, -0.002457f, 0.014230f, 0.009203f, 0.013767f, 0.001915f, 0.001816f, -0.013957f, -0.031940f, -0.017293f, 0.072571f, 0.000936f, -0.001051f, 0.129599f, 0.011499f, -0.098581f, -0.076029f, 0.090428f, 0.080127f, 0.003692f, -0.066138f, -0.081822f, -0.047536f, 0.014548f, 0.077914f, 0.069281f, 0.045954f, -0.030304f, 0.007931f, -0.030433f, 0.024524f, 0.058773f, 0.091457f, 0.100010f, -0.014052f, -0.055485f, -0.086935f, -0.129256f, -0.002672f, 0.066950f, 0.275839f, -0.037456f, -0.016127f, -0.135186f, -0.056745f, 0.010077f, 0.030668f, 0.163753f, 0.117708f, 0.072335f, -0.085147f, -0.048675f, -0.083221f, -0.006138f, 0.136872f, 0.126503f, 0.154443f, -0.044262f, -0.154664f, -0.112918f, -0.156150f, 0.037473f, 0.140774f, 0.123600f, 0.229029f, -0.111314f, -0.135128f, -0.118633f, -0.020879f, 0.100543f, 0.134478f, 0.188508f, 0.084634f, -0.041249f, -0.075206f, 0.016137f, -0.006980f, 0.052662f, 0.150583f, + -0.034779f, 0.093071f, -0.035072f, -0.088760f, -0.000094f, 0.012299f, 0.080904f, 0.002555f, -0.009023f, 0.006478f, -0.022915f, -0.076956f, 0.030172f, -0.011785f, 0.024400f, -0.022750f, -0.063598f, -0.016457f, -0.016055f, 0.005642f, 0.039953f, 0.004388f, -0.013322f, 0.014504f, -0.016485f, -0.020773f, -0.005024f, 0.058849f, 0.013916f, 0.053924f, -0.005423f, 0.004916f, -0.017205f, 0.005803f, 0.004985f, 0.009770f, 0.041343f, 0.072508f, -0.003565f, -0.021374f, -0.069078f, -0.090786f, 0.002156f, 0.003978f, 0.106804f, 0.068346f, 0.010353f, -0.038876f, -0.153795f, -0.087203f, -0.014497f, 0.067606f, 0.133542f, 0.068635f, -0.042187f, -0.051728f, -0.159376f, -0.060099f, 0.073991f, 0.137434f, 0.110732f, 0.005884f, -0.072871f, -0.082338f, -0.009386f, -0.004303f, 0.064212f, 0.038190f, 0.034589f, 0.000865f, -0.033741f, -0.019809f, -0.001616f, -0.015547f, 0.019642f, 0.020923f, -0.011543f, -0.067433f, 0.089051f, -0.020330f, 0.105108f, -0.096273f, 0.001436f, -0.041953f, -0.099905f, 0.073526f, -0.052302f, 0.068064f, -0.053481f, -0.020596f, -0.004500f, 0.035101f, 0.008136f, -0.038285f, -0.020157f, -0.001545f, + 0.054652f, -0.050369f, 0.062652f, 0.044779f, -0.033585f, 0.007876f, -0.042252f, -0.042830f, 0.072936f, -0.071515f, -0.035672f, 0.048205f, 0.111230f, -0.000774f, 0.015420f, -0.010158f, -0.048093f, -0.013578f, 0.045671f, -0.015699f, -0.072765f, 0.010324f, -0.015555f, -0.012442f, 0.022549f, -0.066812f, 0.034100f, -0.000277f, 0.023522f, 0.051366f, -0.115874f, -0.086233f, -0.028056f, -0.002725f, 0.120310f, -0.063682f, 0.043935f, 0.094036f, -0.051169f, -0.030737f, -0.002716f, 0.050906f, 0.075007f, -0.040897f, 0.022104f, -0.015200f, 0.030076f, 0.115715f, -0.042434f, -0.130932f, 0.028441f, 0.059592f, 0.016221f, -0.070122f, 0.044250f, 0.017997f, 0.044438f, -0.013990f, -0.001260f, -0.049116f, -0.038028f, 0.028382f, 0.008046f, -0.052362f, 0.016040f, 0.035555f, -0.016644f, -0.000656f, -0.056887f, 0.008049f, -0.013522f, -0.063853f, -0.001351f, 0.027930f, 0.025487f, 0.009771f, -0.000816f, 0.015236f, -0.042439f, -0.011205f, 0.016273f, -0.021535f, 0.034229f, -0.020813f, -0.007527f, -0.019729f, 0.001020f, -0.021003f, 0.032845f, 0.005217f, -0.024190f, -0.022194f, -0.000013f, -0.001531f, 0.053601f, -0.018992f, + 0.019683f, -0.010196f, 0.000055f, 0.010796f, -0.021636f, -0.020800f, 0.004558f, -0.045196f, -0.011231f, 0.012306f, -0.036736f, 0.001035f, -0.005893f, -0.013876f, 0.009302f, 0.023961f, 0.001158f, 0.002828f, -0.013734f, -0.008844f, -0.134727f, -0.042619f, 0.058086f, 0.079490f, 0.066005f, -0.067084f, 0.021615f, -0.187640f, -0.122002f, -0.103589f, -0.016387f, 0.088123f, 0.056713f, -0.003775f, -0.041170f, -0.050811f, 0.025014f, -0.031019f, -0.003074f, 0.067420f, 0.018428f, 0.003331f, -0.066482f, -0.031874f, -0.006682f, -0.031334f, 0.020441f, -0.005371f, 0.036189f, -0.009272f, -0.000280f, -0.011631f, -0.002068f, -0.008400f, -0.037940f, -0.028571f, -0.063735f, -0.044841f, 0.032656f, 0.062669f, 0.068107f, 0.038088f, 0.059360f, -0.008782f, 0.050516f, -0.011537f, -0.023026f, -0.079411f, -0.002993f, -0.043742f, 0.034186f, 0.013329f, 0.100845f, -0.081079f, 0.028976f, 0.056782f, -0.031054f, -0.042943f, -0.024995f, -0.019858f, -0.020597f, 0.007616f, 0.071639f, 0.046311f, -0.019011f, -0.002359f, 0.051436f, -0.059131f, -0.065641f, 0.027470f, -0.076202f, -0.058378f, -0.051135f, 0.006735f, 0.024823f, 0.029964f, + 0.088562f, 0.060498f, -0.009530f, 0.045133f, -0.025701f, 0.002179f, 0.011123f, 0.033558f, 0.053766f, 0.058419f, 0.040907f, 0.034288f, 0.027318f, 0.002747f, -0.074314f, -0.020620f, -0.038360f, -0.009179f, 0.043454f, -0.001433f, 0.006610f, -0.015740f, -0.033086f, 0.004154f, -0.016344f, -0.013041f, -0.036048f, 0.016406f, 0.027068f, -0.011538f, 0.010434f, 0.024482f, 0.013190f, 0.016155f, 0.002727f, 0.015924f, -0.010675f, 0.011133f, -0.005058f, -0.018392f, 0.014427f, 0.018732f, -0.014971f, -0.021218f, 0.001843f, -0.014131f, -0.025518f, 0.020252f, 0.021026f, 0.008886f, 0.027106f, -0.001800f, -0.025251f, -0.030414f, 0.043137f, -0.017221f, -0.160760f, -0.237649f, -0.291763f, -0.230514f, -0.343938f, -0.060754f, -0.125564f, 0.038154f, 0.072312f, 0.249100f, 0.145523f, 0.258044f, 0.262387f, 0.359191f, 0.262204f, 0.266552f, 0.196360f, 0.008517f, -0.056793f, -0.103875f, -0.063852f, -0.214410f, -0.146506f, -0.116669f, -0.119236f, -0.117982f, -0.117755f, -0.114290f, -0.123336f, -0.135356f, -0.100878f, -0.157397f, -0.128694f, -0.112145f, -0.050306f, -0.132246f, -0.040794f, 0.048773f, -0.098227f, -0.047408f, + 0.026553f, 0.021683f, -0.083141f, 0.069482f, 0.089267f, 0.113013f, 0.153266f, 0.155784f, -0.012108f, 0.092670f, 0.150662f, 0.213777f, 0.168516f, 0.336681f, 0.316215f, 0.279303f, 0.226346f, 0.286551f, 0.142324f, 0.228163f, 0.277715f, 0.213905f, 0.136835f, 0.231983f, 0.075348f, 0.077999f, 0.142561f, 0.143016f, 0.101593f, 0.029527f, 0.083066f, -0.027521f, 0.005051f, 0.072716f, -0.082584f, -0.207720f, -0.310474f, -0.122641f, -0.425109f, -0.371851f, -0.327023f, -0.378197f, -0.420767f, -0.352684f, -0.305258f, -0.294490f, -0.202940f, -0.266913f, -0.136979f, -0.169443f, -0.180101f, -0.273200f, -0.220732f, -0.159178f, -0.130328f, -0.110344f, -0.103397f, -0.064794f, 0.025904f, -0.000191f, -0.006124f, 0.077067f, 0.160897f, 0.134179f, 0.135929f, 0.216618f, 0.185262f, 0.192474f, 0.244397f, 0.230445f, 0.196135f, 0.186522f, 0.223773f, 0.190508f, 0.184758f, 0.196009f, 0.203427f, 0.172984f, 0.151317f, 0.139180f, 0.130153f, 0.170027f, 0.133428f, 0.100048f, 0.104664f, 0.078221f, 0.045719f, -0.027103f, -0.056282f, -0.073824f, -0.132196f, -0.113229f, -0.117172f, -0.139618f, -0.147521f, -0.135906f, + -0.088580f, -0.099546f, -0.090016f, -0.091745f, -0.047402f, -0.052772f, -0.063251f, -0.043752f, -0.014511f, -0.016629f, -0.030335f, -0.020082f, 0.000342f, -0.012678f, -0.017124f, -0.015905f, -0.006051f, -0.009492f, -0.013757f, -0.010869f, 0.006723f, 0.010269f, 0.002877f, -0.006467f, 0.000278f, 0.008326f, 0.001994f, -0.007444f, -0.001368f, 0.003282f, 0.001768f, -0.002016f, 0.003158f, 0.002817f, 0.004637f, 0.004010f, 0.000220f, 0.000138f, 0.003834f, 0.004097f, 0.008887f, 0.005518f, -0.001816f, -0.005785f, 0.002256f, 0.004490f, -0.002354f, -0.004541f, -0.002634f, -0.006219f, -0.004688f, -0.005178f, -0.007801f, -0.006668f, -0.006616f, -0.008184f, -0.005178f, 0.000343f, 0.004532f, 0.003025f, 0.007042f, 0.010577f, 0.010361f, 0.008282f, 0.011758f, 0.016522f, 0.015454f, 0.014644f, 0.017240f, 0.016979f, 0.020239f, 0.018041f, 0.016583f, 0.019501f, 0.019521f, 0.014599f, 0.008181f, 0.008348f, 0.006168f, 0.000233f, -0.002012f, -0.004008f, -0.005949f, -0.008641f, -0.009770f, -0.009927f, -0.009434f, -0.009682f, -0.008954f, -0.008162f, -0.007567f, -0.006400f, -0.005698f, -0.004368f, -0.003209f, -0.002596f, + -0.002179f, -0.001650f, -0.001141f, -0.001019f, -0.000831f, -0.000715f} + } +}; +const float CRendBin_Combined_BRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][2955]={ + { + {0.009861f, 0.004728f, -0.006472f, 0.009783f, -0.005693f, -0.002101f, 0.000249f, -0.003498f, -0.003708f, -0.007780f, 0.001935f, 0.011525f, 0.001291f, 0.001975f, 0.005042f, 0.001088f, -0.004030f, -0.001395f, -0.002356f, -0.002587f, 0.007152f, 0.001824f, 0.001025f, -0.002517f, 0.001401f, -0.000405f, -0.002581f, -0.004504f, 0.006935f, 0.005146f, 0.001075f, -0.001569f, 0.008027f, -0.011147f, -0.004012f, 0.004585f, -0.004473f, 0.009384f, 0.001070f, 0.006590f, 0.000961f, 0.000661f, 0.004438f, -0.003918f, -0.001487f, -0.000245f, -0.000009f, -0.003084f, -0.002277f, 0.004076f, -0.000112f, -0.010291f, 0.009644f, -0.001457f, 0.001722f, -0.008711f, 0.004182f, -0.003921f, 0.003481f, 0.000144f, -0.000199f, -0.003345f, -0.000235f, -0.005087f, 0.005228f, -0.009781f, -0.000996f, 0.006953f, -0.005506f, 0.002520f, 0.010642f, 0.003095f, 0.001154f, -0.005364f, 0.000652f, 0.002699f, -0.001895f, 0.003411f, -0.002124f, -0.001642f, -0.002881f, 0.003075f, -0.003376f, -0.005655f, 0.001854f, 0.000815f, -0.001299f, 0.006680f, -0.001633f, -0.001580f, -0.001568f, 0.002145f, 0.002563f, -0.000287f, 0.000361f, 0.001118f, + -0.001271f, 0.001106f, -0.002534f, -0.001192f, -0.000346f, -0.000659f, -0.001329f, -0.000160f, 0.000002f, -0.000403f, -0.000748f, -0.000175f, -0.001335f, 0.000639f, -0.000633f, 0.001523f, -0.000991f, 0.001105f, 0.001742f, 0.001035f, 0.020367f, 0.003758f, -0.002844f, 0.006221f, -0.003070f, -0.002548f, -0.003252f, -0.001326f, -0.007636f, 0.010824f, 0.006263f, 0.004674f, 0.005042f, 0.004788f, -0.005005f, -0.006756f, 0.009124f, -0.001953f, -0.007055f, -0.013453f, 0.002218f, -0.003978f, 0.004240f, 0.000092f, -0.001126f, -0.003004f, 0.004253f, -0.004977f, -0.002501f, 0.006662f, 0.012656f, 0.003303f, 0.005770f, 0.001108f, 0.006376f, -0.001304f, 0.006784f, 0.004280f, 0.000787f, 0.003797f, 0.000360f, 0.001127f, 0.000374f, 0.009253f, 0.001983f, 0.002448f, -0.002059f, 0.001387f, -0.000626f, -0.001272f, 0.007524f, 0.008600f, -0.003054f, -0.003136f, 0.001761f, 0.007918f, -0.012818f, -0.000650f, -0.003457f, -0.009487f, -0.003836f, 0.001349f, -0.004020f, 0.004255f, 0.003463f, 0.000311f, -0.005762f, 0.002728f, -0.001197f, -0.005518f, 0.007157f, -0.009792f, -0.004603f, -0.010445f, -0.005144f, -0.001455f, + 0.001602f, 0.010603f, -0.004525f, -0.002720f, 0.003313f, -0.001633f, -0.002468f, 0.005042f, -0.000782f, -0.000170f, -0.002238f, -0.003506f, -0.004346f, -0.001134f, 0.003785f, 0.001527f, 0.001867f, 0.001773f, 0.001378f, 0.000175f, -0.000571f, -0.000229f, 0.000354f, 0.002680f, 0.001340f, 0.001433f, -0.000845f, 0.000263f, 0.000965f, 0.000795f, 0.000061f, 0.000218f, 0.000070f, -0.000152f, -0.000300f, -0.001793f, -0.001352f, -0.000906f, 0.001085f, 0.000907f, -0.000346f, 0.001719f, 0.006282f, 0.002583f, -0.012275f, -0.001293f, 0.001964f, 0.008697f, -0.002534f, -0.015507f, 0.012519f, -0.014660f, 0.000895f, -0.006468f, -0.004915f, -0.015539f, -0.010127f, -0.006131f, -0.003768f, 0.006234f, 0.002271f, -0.010270f, 0.001558f, -0.005545f, 0.000198f, -0.000471f, 0.004302f, 0.000742f, -0.004316f, 0.000612f, 0.001202f, 0.002381f, -0.003019f, -0.002281f, -0.000825f, -0.005139f, -0.007517f, 0.010219f, 0.004905f, 0.001287f, -0.001313f, 0.008688f, 0.007721f, -0.008799f, 0.002540f, 0.000714f, -0.001550f, -0.005177f, 0.001252f, -0.009089f, 0.002120f, -0.001825f, -0.007228f, 0.008933f, 0.000253f, -0.000823f, + 0.011428f, -0.009965f, 0.009009f, 0.003170f, -0.001230f, -0.007418f, 0.002213f, -0.001179f, -0.007618f, -0.006551f, 0.000148f, -0.002941f, -0.003374f, -0.010784f, 0.000580f, 0.002144f, 0.005079f, -0.003226f, 0.004729f, 0.001279f, -0.001804f, -0.001622f, -0.006217f, 0.005304f, 0.001192f, 0.000658f, -0.010385f, 0.005346f, -0.000844f, 0.000602f, -0.005333f, 0.000024f, -0.009538f, 0.001022f, 0.002123f, 0.001148f, -0.000767f, 0.000797f, -0.000128f, -0.000078f, -0.001615f, 0.000375f, -0.000444f, 0.001963f, 0.001263f, 0.000726f, 0.002005f, -0.000123f, 0.000717f, 0.001808f, 0.001227f, -0.001514f, -0.000506f, 0.002958f, -0.001057f, 0.000459f, -0.001028f, 0.001004f, -0.003533f, -0.001052f, -0.001053f, 0.001303f, -0.000607f, -0.022894f, -0.021626f, 0.008366f, 0.014360f, 0.008652f, -0.019476f, 0.013867f, -0.004689f, -0.001799f, 0.001259f, -0.009057f, -0.006828f, 0.016368f, -0.000197f, -0.000047f, 0.001278f, -0.000408f, 0.005384f, -0.008169f, 0.004985f, -0.004334f, 0.004473f, 0.007487f, -0.004936f, -0.001363f, 0.004384f, -0.001264f, 0.007861f, -0.002450f, 0.003439f, 0.000667f, -0.000756f, 0.000644f, + -0.006626f, -0.009283f, 0.008798f, 0.001134f, -0.001643f, 0.000066f, -0.008648f, -0.010829f, -0.000256f, 0.000199f, 0.005681f, -0.010066f, -0.008527f, -0.001837f, -0.017824f, 0.006932f, -0.001360f, 0.003640f, -0.001324f, -0.004308f, 0.002784f, 0.022894f, 0.012761f, 0.006643f, -0.006811f, 0.009022f, -0.000051f, -0.011761f, 0.000087f, -0.012274f, 0.010485f, 0.001439f, 0.001287f, -0.006991f, 0.000121f, 0.007141f, 0.002669f, 0.001432f, 0.000950f, 0.000804f, 0.007723f, 0.005353f, 0.001041f, 0.005217f, 0.003153f, 0.004169f, 0.011280f, 0.004670f, 0.005579f, -0.005191f, 0.004275f, 0.003158f, -0.001286f, 0.008861f, 0.002742f, -0.000009f, -0.000738f, 0.002659f, 0.004762f, 0.000595f, -0.000001f, -0.001726f, 0.001189f, 0.003905f, 0.002201f, -0.000861f, 0.000440f, -0.003164f, 0.000973f, 0.000830f, -0.001365f, 0.000339f, -0.000140f, -0.000031f, 0.002231f, -0.000388f, 0.002327f, 0.003151f, 0.001183f, -0.001795f, -0.003463f, 0.000617f, -0.002161f, 0.001738f, 0.001592f, -0.002194f, 0.000978f, -0.005115f, -0.032826f, -0.002518f, -0.007883f, -0.001168f, -0.005472f, -0.018651f, -0.000777f, -0.005031f, + -0.007665f, -0.017487f, -0.002139f, 0.012381f, -0.008652f, 0.008137f, -0.001431f, 0.011480f, -0.003884f, 0.009323f, -0.003067f, -0.009276f, -0.002471f, 0.000972f, -0.004048f, -0.008343f, -0.006675f, -0.008202f, 0.000275f, -0.007487f, 0.002730f, 0.000858f, 0.000755f, 0.003507f, -0.005606f, -0.007543f, 0.010856f, -0.001014f, 0.003224f, 0.000088f, -0.008512f, -0.005428f, -0.006008f, 0.000267f, -0.004313f, 0.007539f, 0.007692f, 0.001244f, -0.010431f, -0.003445f, 0.019194f, 0.004750f, -0.008118f, -0.006484f, -0.004111f, -0.007141f, -0.003761f, 0.014969f, 0.009123f, -0.010912f, 0.006658f, 0.008819f, 0.013054f, -0.003395f, 0.005303f, -0.000828f, 0.000110f, -0.005312f, -0.010879f, -0.001993f, 0.008014f, 0.000800f, 0.015528f, 0.010999f, 0.000728f, 0.003583f, 0.013093f, -0.010461f, -0.004794f, -0.003103f, -0.006441f, 0.004596f, 0.002018f, 0.002096f, -0.005649f, 0.003805f, -0.004109f, 0.004220f, -0.008028f, -0.000396f, -0.000757f, -0.003165f, -0.000213f, -0.000708f, 0.003917f, 0.001057f, 0.000863f, -0.003454f, -0.002345f, -0.001126f, -0.003259f, -0.000155f, -0.004692f, -0.002734f, 0.000164f, -0.000379f, + 0.002882f, -0.002000f, 0.000767f, -0.000975f, 0.001552f, 0.001131f, 0.003992f, -0.003339f, 0.042048f, 0.028307f, -0.008748f, -0.001534f, 0.000063f, -0.001093f, -0.004855f, 0.005934f, 0.014372f, 0.012222f, 0.006280f, -0.022027f, -0.009851f, 0.002898f, 0.001248f, 0.009444f, -0.016658f, 0.003421f, 0.022508f, 0.015233f, -0.002619f, 0.005469f, -0.002010f, -0.007546f, -0.010421f, 0.000646f, -0.008882f, -0.005100f, 0.002567f, 0.007067f, -0.006516f, -0.012018f, -0.005769f, 0.002149f, 0.011078f, 0.015573f, -0.002973f, -0.016320f, -0.003490f, -0.005788f, -0.016469f, -0.000916f, -0.000516f, -0.007819f, 0.002703f, 0.004508f, 0.009597f, -0.013719f, 0.005621f, 0.007194f, 0.001537f, -0.013263f, -0.009926f, 0.004626f, 0.000571f, 0.003545f, -0.001467f, -0.001223f, -0.000474f, -0.007312f, 0.003635f, 0.003947f, -0.005175f, 0.009347f, 0.010946f, 0.015067f, 0.003588f, 0.001210f, 0.014105f, 0.023096f, 0.003668f, 0.003239f, 0.003916f, 0.013621f, 0.001528f, 0.008099f, 0.022710f, 0.006835f, 0.004181f, 0.000724f, -0.004294f, -0.019316f, 0.002594f, -0.000422f, -0.003156f, -0.003618f, 0.002386f, -0.002595f, + 0.004797f, 0.002233f, -0.002570f, -0.001315f, -0.000658f, 0.004017f, 0.002492f, -0.000980f, -0.000756f, 0.002768f, 0.005771f, 0.000147f, -0.001446f, 0.002121f, 0.000222f, -0.002590f, -0.005366f, 0.004003f, -0.005052f, 0.003191f, 0.002138f, 0.003859f, -0.000250f, -0.000515f, 0.000081f, 0.001335f, -0.007047f, 0.000315f, 0.001031f, -0.000556f, 0.000819f, 0.022267f, 0.000377f, 0.004731f, 0.005276f, 0.010799f, -0.004277f, 0.006919f, -0.005868f, -0.003557f, -0.018361f, 0.007400f, 0.012363f, -0.011176f, 0.009358f, -0.004556f, -0.016099f, 0.016775f, 0.009785f, -0.002849f, 0.009896f, 0.019626f, 0.013581f, -0.009944f, -0.005703f, 0.009953f, 0.003029f, -0.002102f, 0.007494f, 0.007069f, 0.010056f, 0.000762f, -0.004513f, -0.008578f, -0.015524f, -0.000386f, -0.012898f, 0.001700f, -0.004250f, 0.007286f, -0.010270f, -0.023333f, 0.005089f, -0.005696f, 0.010757f, 0.002852f, 0.000782f, -0.006369f, -0.013885f, -0.011471f, -0.001160f, -0.001063f, -0.010485f, 0.014798f, 0.018923f, 0.019834f, 0.007907f, -0.013989f, -0.001302f, 0.018800f, 0.001739f, -0.003095f, 0.008638f, -0.002318f, -0.004763f, -0.017602f, + 0.009711f, 0.005263f, 0.025639f, 0.012003f, -0.017511f, 0.005988f, 0.006508f, -0.001722f, -0.000375f, 0.006364f, -0.004301f, 0.001557f, -0.007534f, -0.018258f, 0.016566f, 0.003168f, 0.009855f, 0.004928f, -0.008716f, 0.014196f, -0.003171f, 0.003482f, 0.000713f, -0.002982f, 0.000492f, 0.000560f, 0.001075f, 0.007490f, 0.002395f, 0.001535f, 0.000593f, -0.002385f, -0.003000f, -0.003715f, -0.002312f, 0.002668f, -0.001256f, -0.000062f, -0.001504f, 0.002456f, -0.002189f, -0.000995f, 0.000190f, -0.000151f, 0.000957f, -0.003924f, 0.004683f, -0.001853f, 0.004119f, 0.001500f, -0.002194f, -0.002545f, 0.005828f, -0.005219f, 0.004676f, -0.001168f, -0.006779f, -0.011431f, -0.003029f, -0.002958f, -0.019611f, 0.000931f, 0.002449f, 0.009781f, -0.003682f, -0.008525f, 0.003558f, 0.001014f, 0.004679f, 0.000093f, 0.010702f, 0.004224f, 0.007397f, 0.001193f, -0.000804f, 0.006278f, 0.003730f, -0.019419f, -0.005966f, -0.027733f, 0.001264f, -0.005231f, 0.003204f, 0.004828f, 0.000375f, 0.013144f, 0.003367f, 0.018797f, 0.002319f, -0.022523f, 0.000454f, -0.009114f, -0.003720f, -0.001152f, -0.003377f, -0.001242f, + -0.017805f, 0.003782f, -0.008582f, 0.021341f, -0.022269f, 0.012252f, -0.004857f, -0.019106f, -0.003581f, -0.013467f, -0.002905f, -0.004174f, -0.020254f, 0.005698f, 0.006161f, -0.003814f, -0.003384f, -0.001403f, 0.007117f, -0.016180f, 0.000366f, 0.014946f, 0.002738f, 0.020836f, 0.034174f, 0.014016f, -0.031047f, -0.041493f, 0.020010f, 0.008858f, 0.030836f, -0.006534f, 0.014764f, 0.003032f, 0.014659f, 0.020478f, 0.026482f, -0.014258f, 0.007586f, 0.019611f, -0.016253f, 0.002862f, -0.002158f, -0.002186f, 0.001404f, 0.013951f, -0.002237f, 0.004660f, -0.009229f, 0.003144f, -0.007141f, -0.007602f, -0.003381f, -0.006382f, 0.000921f, -0.003837f, -0.010543f, -0.000567f, 0.006813f, 0.004124f, -0.002057f, -0.002122f, -0.001672f, -0.000042f, 0.003098f, 0.003189f, -0.002826f, -0.004273f, -0.001936f, 0.005792f, -0.001607f, 0.005600f, 0.000777f, 0.000638f, -0.001625f, 0.001187f, 0.001567f, 0.000264f, 0.001448f, 0.000051f, -0.005103f, -0.005046f, -0.003296f, 0.001300f, 0.004809f, -0.007275f, -0.004857f, -0.002472f, 0.002724f, -0.003565f, -0.002850f, -0.038137f, 0.028544f, 0.004936f, -0.004746f, -0.000824f, + -0.016904f, -0.014331f, 0.014995f, -0.004247f, -0.004588f, 0.015021f, -0.011169f, -0.012546f, 0.000888f, 0.014924f, 0.006678f, -0.005212f, 0.000643f, -0.009016f, -0.000991f, 0.000891f, 0.008337f, 0.000048f, -0.019187f, -0.019559f, 0.004486f, -0.002902f, 0.004788f, -0.002256f, 0.007875f, 0.014615f, 0.028015f, -0.000782f, 0.017419f, -0.004608f, 0.004997f, 0.011567f, -0.011501f, 0.022402f, -0.003182f, -0.014520f, -0.019910f, -0.004198f, -0.016515f, -0.021300f, -0.005731f, 0.009248f, -0.006419f, -0.016646f, 0.008152f, 0.011176f, 0.018127f, 0.022969f, -0.019053f, 0.006851f, -0.005307f, -0.017965f, 0.006578f, -0.020038f, -0.003615f, -0.032453f, 0.012773f, -0.009997f, 0.004722f, -0.006218f, 0.005021f, -0.034881f, -0.034348f, -0.021292f, -0.008096f, 0.018572f, -0.018510f, 0.035671f, -0.012801f, 0.003115f, -0.003422f, 0.006254f, -0.003361f, -0.026068f, 0.003637f, 0.002489f, 0.006908f, 0.005435f, 0.002917f, 0.009399f, -0.005775f, -0.009294f, -0.000064f, -0.000123f, -0.008651f, 0.003351f, -0.011112f, 0.005686f, 0.003563f, 0.004500f, -0.001754f, -0.000536f, -0.003507f, -0.009054f, -0.006334f, -0.004054f, + -0.004004f, 0.005073f, -0.003985f, -0.010852f, 0.003363f, 0.003798f, -0.002092f, 0.006364f, -0.000797f, -0.002665f, -0.000263f, 0.001028f, -0.003226f, -0.003554f, 0.003459f, 0.004416f, 0.003525f, 0.001065f, -0.007742f, -0.005996f, -0.001900f, -0.006590f, 0.001907f, -0.000113f, -0.000376f, -0.009266f, -0.004653f, -0.001864f, 0.001918f, -0.000081f, -0.007203f, -0.001500f, -0.000180f, -0.005679f, 0.032473f, 0.001362f, 0.012570f, 0.007919f, 0.003870f, 0.018134f, 0.003072f, -0.026596f, 0.013072f, 0.003242f, 0.012503f, -0.001688f, -0.018826f, 0.027146f, 0.015446f, 0.010853f, -0.002124f, -0.008891f, 0.004048f, -0.002522f, -0.014842f, 0.009424f, 0.007414f, -0.009033f, 0.011592f, 0.017089f, 0.000944f, 0.006119f, 0.017988f, -0.019575f, 0.005044f, -0.006930f, 0.008324f, -0.036375f, 0.011416f, 0.016756f, -0.005570f, 0.004090f, 0.017751f, 0.008743f, 0.000725f, 0.005210f, -0.017514f, 0.004117f, -0.010130f, 0.000300f, 0.005640f, 0.002339f, -0.007768f, 0.033855f, -0.005755f, -0.007019f, -0.007617f, -0.030480f, -0.011763f, -0.018871f, -0.020890f, -0.004603f, 0.029929f, 0.031918f, -0.002813f, 0.009513f, + 0.013345f, -0.027586f, -0.008393f, 0.021505f, 0.018531f, -0.011259f, -0.007247f, -0.027176f, -0.008331f, -0.010593f, -0.012526f, -0.015547f, 0.004341f, -0.027714f, 0.004806f, 0.025052f, 0.036024f, 0.010494f, -0.010189f, -0.001230f, 0.019252f, -0.007122f, -0.012575f, 0.000759f, -0.001346f, -0.006159f, -0.008345f, 0.000785f, -0.000588f, 0.003740f, 0.005954f, 0.002793f, -0.002787f, 0.001162f, 0.003311f, 0.001872f, -0.000212f, -0.005702f, -0.011130f, 0.002772f, -0.000424f, -0.005145f, 0.008943f, 0.002232f, 0.005138f, -0.005339f, 0.007634f, -0.005685f, -0.003716f, -0.006338f, 0.006105f, 0.000684f, 0.004577f, 0.008119f, -0.000477f, -0.004906f, -0.002124f, 0.003838f, 0.002196f, -0.000846f, 0.000487f, 0.000720f, 0.001494f, -0.000966f, -0.001478f, 0.003909f, 0.006121f, 0.015138f, 0.007368f, -0.002852f, -0.010152f, 0.006355f, 0.001606f, -0.013347f, -0.019928f, -0.021305f, -0.008600f, -0.020835f, -0.008754f, -0.008433f, 0.000257f, -0.019831f, 0.004367f, 0.008385f, 0.000846f, -0.022652f, 0.006971f, -0.028111f, 0.008610f, 0.015715f, 0.000363f, 0.024414f, 0.000654f, -0.007255f, -0.004544f, 0.016463f, + -0.006013f, 0.022654f, 0.007973f, -0.007841f, -0.007857f, 0.003985f, -0.011644f, -0.006246f, 0.000761f, 0.021413f, -0.000811f, 0.011310f, 0.006348f, 0.001927f, 0.014940f, -0.006761f, -0.013878f, 0.006088f, -0.009969f, -0.004607f, -0.027028f, 0.015137f, -0.009566f, -0.007994f, -0.005567f, -0.029724f, 0.035399f, 0.009169f, -0.004350f, 0.015420f, 0.004938f, 0.007479f, -0.015850f, -0.023692f, -0.027026f, -0.013043f, 0.001266f, -0.027235f, 0.009996f, 0.019628f, -0.030625f, -0.011199f, 0.011029f, -0.014107f, 0.007202f, 0.033790f, 0.000921f, -0.005573f, -0.009173f, 0.007557f, -0.018592f, 0.011950f, 0.006323f, -0.016725f, 0.005263f, 0.011698f, -0.006903f, -0.019797f, -0.017028f, -0.008932f, -0.000836f, 0.005256f, 0.004381f, 0.003546f, -0.003647f, -0.005068f, -0.002672f, 0.004193f, 0.000001f, -0.002942f, -0.011366f, -0.013430f, -0.003878f, 0.000736f, -0.009734f, -0.011546f, -0.008117f, -0.004968f, -0.004613f, -0.010167f, -0.008878f, -0.004836f, -0.006490f, -0.012940f, 0.001914f, 0.011718f, -0.001518f, -0.001357f, -0.005110f, -0.003859f, 0.003651f, -0.004739f, 0.000571f, -0.010292f, 0.000023f, -0.003181f, + -0.005749f, -0.000302f, -0.005424f, 0.002837f, 0.004302f, -0.004516f, 0.006687f, -0.005253f, -0.002329f, -0.005429f, -0.000794f, 0.000477f, 0.009634f, 0.021138f, 0.054241f, 0.056079f, 0.017555f, 0.034644f, -0.023564f, -0.024682f, -0.005191f, -0.003990f, 0.002502f, 0.007564f, 0.018494f, 0.032044f, 0.011099f, 0.029632f, 0.003780f, 0.008703f, 0.004923f, -0.008671f, 0.014151f, -0.000728f, 0.005907f, 0.001957f, -0.014854f, -0.002258f, -0.007770f, -0.016931f, -0.009896f, -0.000091f, 0.002079f, -0.022332f, -0.008634f, 0.027347f, 0.020373f, 0.014051f, 0.023869f, -0.014878f, 0.000566f, -0.040605f, 0.002281f, 0.034228f, -0.006342f, -0.007217f, 0.004556f, -0.004041f, 0.027453f, -0.002477f, -0.004117f, 0.020534f, -0.024497f, -0.040653f, -0.015868f, 0.003287f, -0.021302f, 0.015723f, 0.022829f, -0.032074f, -0.011648f, -0.000041f, -0.000216f, -0.045885f, -0.028655f, 0.014313f, 0.006675f, -0.003703f, 0.015042f, -0.020182f, -0.011841f, -0.028435f, 0.007058f, 0.008768f, 0.002698f, 0.001680f, -0.018347f, -0.031307f, 0.026032f, -0.042470f, 0.012683f, -0.015721f, 0.040652f, 0.003946f, 0.017149f, -0.011732f, + -0.015577f, 0.011467f, 0.005784f, 0.017846f, -0.016867f, -0.003325f, 0.012581f, -0.001018f, -0.009199f, -0.009095f, -0.009039f, 0.000702f, 0.009742f, 0.010170f, -0.011272f, -0.005014f, -0.001566f, -0.015613f, -0.005166f, 0.002638f, -0.001375f, 0.001188f, -0.007771f, -0.013711f, -0.001613f, 0.000196f, 0.010933f, 0.003147f, -0.006260f, 0.008063f, 0.001715f, 0.004041f, -0.014630f, 0.002929f, -0.008613f, 0.006967f, 0.001628f, 0.007388f, 0.012319f, 0.003604f, -0.008120f, -0.016933f, 0.005584f, 0.005547f, -0.052391f, -0.037847f, 0.026246f, -0.005544f, 0.047643f, -0.011684f, 0.039241f, -0.031584f, 0.001046f, 0.013979f, -0.003021f, 0.001603f, 0.004695f, -0.002540f, -0.023535f, 0.008204f, 0.008990f, 0.010256f, 0.011876f, -0.007359f, 0.019524f, -0.017743f, -0.012936f, -0.010183f, 0.027423f, -0.015176f, -0.004984f, 0.002355f, -0.000471f, -0.014283f, 0.012285f, -0.015927f, -0.018742f, -0.035619f, 0.003342f, 0.006410f, -0.024021f, -0.011358f, 0.011723f, -0.004987f, 0.006313f, 0.001823f, 0.028156f, 0.001845f, 0.021218f, 0.009307f, 0.001015f, 0.016808f, 0.003951f, 0.005748f, -0.031710f, 0.032655f, + 0.011716f, 0.025559f, -0.015493f, 0.006699f, -0.016966f, 0.026516f, 0.020322f, 0.032374f, 0.005296f, -0.008634f, -0.023505f, -0.001594f, 0.004282f, -0.020232f, 0.028679f, 0.004478f, 0.004562f, 0.030625f, 0.007004f, -0.009348f, -0.012157f, -0.001134f, 0.018408f, 0.021933f, -0.007049f, 0.027384f, -0.032800f, -0.034638f, -0.014967f, 0.007881f, -0.010385f, 0.014904f, -0.003616f, 0.007934f, 0.026502f, -0.001320f, 0.013226f, -0.011126f, -0.009895f, 0.011377f, -0.000870f, 0.018337f, -0.005567f, -0.000276f, -0.005527f, -0.011581f, 0.002468f, -0.006884f, -0.002517f, 0.007452f, 0.002749f, -0.010552f, -0.009353f, 0.005379f, 0.014162f, 0.014348f, -0.001302f, 0.011717f, 0.013084f, -0.018295f, 0.008621f, 0.016934f, 0.013643f, 0.007401f, -0.013345f, -0.016586f, -0.016905f, -0.017429f, -0.016911f, 0.001220f, -0.005776f, -0.002616f, 0.002133f, -0.012822f, 0.009145f, 0.007876f, -0.006274f, 0.009407f, 0.003644f, 0.004311f, -0.011766f, 0.009784f, 0.024189f, -0.057059f, -0.002607f, 0.029708f, -0.019013f, -0.006368f, 0.021882f, -0.023788f, -0.048278f, 0.009555f, 0.008163f, 0.007432f, -0.006336f, -0.028589f, + 0.007155f, 0.008051f, 0.002098f, 0.015779f, -0.051196f, 0.023394f, -0.011947f, 0.012134f, -0.029214f, 0.023623f, -0.036954f, -0.023641f, 0.014226f, -0.009760f, -0.004388f, -0.028137f, 0.021921f, 0.028876f, -0.000187f, 0.003112f, -0.013453f, 0.043357f, 0.010663f, 0.011725f, -0.008025f, -0.037763f, -0.008222f, 0.020639f, -0.003922f, 0.030953f, 0.000121f, -0.011427f, 0.007360f, -0.002334f, 0.019357f, -0.037393f, -0.004653f, -0.028723f, 0.030716f, -0.011675f, 0.010186f, -0.001047f, -0.001272f, -0.033929f, -0.012026f, 0.029448f, 0.009289f, 0.002453f, -0.009117f, 0.000671f, 0.003596f, -0.043454f, -0.044970f, 0.047460f, -0.021364f, -0.051998f, 0.020865f, 0.024238f, -0.041892f, -0.054772f, -0.038273f, -0.036795f, 0.006275f, 0.014250f, -0.004789f, -0.035393f, -0.001369f, -0.019078f, -0.009086f, -0.025751f, -0.001663f, 0.002269f, 0.002315f, -0.005385f, 0.023863f, -0.013405f, 0.009227f, -0.011436f, -0.000814f, 0.006284f, -0.006410f, -0.001277f, -0.014535f, 0.018490f, -0.004677f, 0.006258f, -0.010740f, -0.015606f, -0.003450f, 0.007014f, 0.008163f, 0.002274f, -0.015152f, 0.008417f, -0.002431f, -0.012331f, + 0.011358f, -0.018472f, -0.003912f, -0.011591f, 0.017811f, -0.008395f, -0.020421f, 0.008320f, -0.008292f, -0.009110f, -0.027037f, -0.001857f, 0.005649f, 0.021934f, 0.008818f, -0.013691f, -0.007127f, 0.001734f, -0.003946f, -0.007535f, 0.003762f, -0.001537f, -0.005487f, -0.005540f, -0.002137f, 0.021949f, -0.030893f, -0.017846f, -0.032319f, -0.003427f, 0.007077f, -0.044332f, 0.007400f, -0.021886f, 0.061455f, 0.002813f, -0.054622f, -0.013038f, 0.027001f, 0.015901f, 0.013340f, 0.027296f, 0.028169f, -0.040070f, -0.009797f, -0.015742f, 0.037525f, -0.013469f, 0.043755f, -0.000445f, -0.024780f, -0.020370f, -0.038527f, -0.044904f, 0.002939f, 0.004806f, -0.006995f, -0.023316f, -0.009494f, 0.002633f, 0.007326f, 0.014923f, -0.021517f, 0.010707f, -0.025355f, -0.030468f, 0.006132f, -0.006769f, -0.007781f, -0.031749f, -0.029555f, -0.014670f, -0.008969f, 0.042350f, 0.004174f, 0.014024f, 0.024200f, -0.001045f, 0.053871f, 0.021446f, -0.017672f, 0.002477f, 0.027829f, -0.011080f, 0.035175f, -0.009473f, 0.004578f, 0.002148f, -0.047296f, -0.048857f, 0.007357f, 0.033714f, 0.000896f, -0.010845f, -0.052945f, 0.003169f, + 0.018305f, 0.011158f, -0.018071f, -0.015080f, -0.010410f, 0.006256f, -0.022794f, 0.056174f, 0.031957f, 0.034360f, 0.007009f, -0.040047f, 0.014624f, 0.017947f, 0.056308f, 0.012735f, 0.005877f, 0.022343f, 0.009769f, -0.009377f, 0.000645f, 0.017077f, -0.001474f, 0.002150f, 0.005721f, -0.014457f, -0.009871f, 0.016612f, 0.000601f, -0.013770f, 0.017811f, -0.011159f, -0.003948f, -0.008590f, -0.008039f, 0.015546f, -0.010037f, -0.004724f, 0.008449f, -0.017118f, 0.007237f, -0.001714f, -0.009574f, 0.020567f, -0.007370f, -0.000162f, -0.026347f, 0.016000f, -0.007976f, -0.007049f, -0.016955f, -0.024379f, 0.003937f, -0.009917f, 0.017153f, -0.000696f, 0.010217f, 0.006380f, 0.000480f, -0.010225f, 0.000373f, 0.015287f, -0.000078f, -0.026541f, -0.023940f, 0.050721f, -0.015626f, -0.018955f, -0.002552f, -0.014133f, -0.034495f, 0.000631f, 0.024091f, -0.059527f, -0.000888f, 0.015318f, 0.019099f, -0.020360f, 0.013601f, -0.034114f, 0.002747f, -0.008869f, 0.010775f, -0.030556f, 0.019099f, -0.051966f, 0.008635f, 0.001348f, 0.029524f, 0.027576f, 0.013892f, -0.019449f, 0.021734f, -0.006386f, 0.024264f, -0.026336f, + 0.004288f, 0.030707f, 0.024523f, -0.014500f, 0.005150f, 0.000722f, -0.006680f, 0.014877f, -0.005663f, -0.017957f, -0.019822f, 0.014191f, -0.035922f, 0.023787f, 0.005709f, -0.038709f, 0.036583f, 0.034848f, 0.032963f, 0.011814f, -0.016909f, 0.042189f, 0.005219f, 0.018117f, -0.025777f, -0.022514f, -0.024703f, 0.007699f, 0.009778f, 0.015114f, -0.034710f, 0.003374f, 0.025781f, -0.066924f, 0.002653f, -0.021981f, 0.042082f, 0.027046f, 0.021202f, -0.005922f, 0.027942f, -0.026241f, -0.001244f, -0.018269f, -0.040106f, -0.001683f, -0.036922f, -0.030993f, 0.018278f, 0.049458f, -0.046341f, -0.011014f, -0.008361f, 0.049656f, -0.012143f, 0.021732f, -0.014103f, -0.008691f, -0.001774f, 0.017584f, -0.010253f, -0.004306f, 0.001561f, 0.011992f, 0.008940f, 0.006321f, -0.006488f, 0.001847f, 0.005311f, 0.024622f, -0.019330f, 0.020554f, -0.004338f, 0.015048f, 0.000157f, 0.004028f, 0.005358f, 0.009490f, -0.012743f, -0.002874f, -0.002366f, -0.015953f, -0.014168f, -0.014149f, 0.009976f, 0.007962f, -0.002788f, -0.006325f, -0.008112f, -0.011145f, -0.006807f, 0.000983f, -0.004848f, -0.000068f, 0.014940f, -0.000295f, + -0.026970f, 0.012777f, -0.015727f, -0.002360f, 0.011559f, -0.004421f, 0.044845f, 0.008974f, 0.023018f, -0.064336f, 0.030163f, -0.036234f, 0.048868f, -0.005365f, 0.019388f, 0.036037f, -0.038890f, 0.069877f, 0.051090f, 0.037577f, -0.016729f, 0.009781f, 0.048835f, -0.012584f, -0.014961f, -0.011723f, -0.001995f, -0.036923f, 0.010200f, -0.019853f, -0.043698f, 0.042391f, 0.014704f, 0.011338f, 0.005896f, 0.009501f, 0.017109f, 0.044655f, 0.009995f, -0.028530f, -0.001884f, -0.029587f, 0.006290f, 0.003809f, -0.050791f, -0.002586f, 0.028448f, 0.001637f, -0.003160f, -0.016055f, 0.055049f, 0.010847f, 0.023738f, 0.011620f, -0.028934f, -0.021425f, -0.015581f, 0.033506f, 0.020520f, -0.007171f, 0.021078f, -0.003407f, -0.036634f, 0.035661f, 0.004899f, 0.040935f, 0.005084f, 0.003874f, 0.001334f, -0.055213f, 0.007991f, 0.001081f, 0.006586f, 0.033722f, -0.012964f, 0.053284f, -0.081023f, -0.014855f, 0.061333f, -0.025001f, 0.020639f, -0.028138f, -0.042885f, -0.035338f, 0.025712f, -0.024272f, 0.024010f, -0.037940f, -0.007517f, 0.005956f, -0.008725f, -0.015140f, -0.004225f, -0.004791f, 0.016920f, 0.037407f, + 0.004521f, 0.022049f, -0.006797f, -0.004134f, 0.028086f, -0.004375f, -0.007334f, 0.007262f, -0.013239f, 0.011886f, 0.024531f, -0.016394f, -0.001915f, -0.006612f, 0.004936f, 0.004144f, 0.011931f, 0.042307f, -0.007201f, 0.014671f, 0.001320f, 0.009895f, 0.016062f, 0.007426f, 0.002955f, 0.023393f, 0.026246f, -0.007528f, -0.003048f, 0.010255f, 0.006140f, 0.008828f, -0.032484f, -0.003096f, 0.031968f, -0.007392f, 0.007095f, 0.011964f, -0.001175f, 0.032552f, 0.011271f, -0.065878f, -0.079152f, -0.006838f, -0.037186f, 0.005151f, 0.022328f, -0.031481f, 0.009062f, -0.048159f, 0.020839f, -0.026472f, -0.132197f, -0.008381f, 0.080371f, -0.034604f, -0.015104f, 0.081042f, -0.019169f, 0.004471f, 0.096781f, -0.023099f, 0.021260f, 0.009166f, -0.014343f, 0.078176f, -0.063057f, -0.008028f, -0.001903f, -0.010977f, -0.012841f, -0.012791f, -0.001752f, 0.025507f, -0.014502f, -0.042534f, 0.000292f, 0.000918f, 0.012400f, 0.015595f, 0.002628f, 0.035121f, -0.001534f, 0.016187f, -0.009764f, -0.042227f, 0.029274f, -0.005150f, -0.043716f, 0.001705f, 0.024910f, 0.076940f, 0.038712f, 0.064680f, 0.001165f, 0.015939f, + 0.030667f, 0.007306f, -0.003970f, 0.060449f, -0.003384f, -0.023546f, 0.070558f, 0.012360f, 0.012305f, 0.000502f, -0.010185f, 0.040414f, -0.000218f, -0.023533f, -0.026752f, -0.005520f, -0.005463f, 0.061181f, -0.041733f, 0.005326f, 0.007667f, -0.010926f, 0.071669f, 0.000552f, -0.046203f, 0.007664f, 0.023270f, -0.033841f, -0.001842f, 0.034350f, 0.028179f, -0.017447f, 0.002506f, -0.019716f, 0.016360f, -0.005382f, 0.002050f, -0.019421f, 0.017741f, 0.000126f, -0.002193f, -0.028198f, 0.011397f, 0.009475f, -0.018536f, 0.001314f, 0.006421f, -0.009598f, -0.006470f, 0.021557f, 0.003162f, 0.011951f, -0.008201f, 0.006207f, 0.037368f, -0.034297f, -0.015791f, -0.011368f, 0.040422f, 0.014975f, 0.021289f, -0.024747f, -0.022673f, -0.009321f, -0.002933f, -0.029995f, -0.033691f, 0.039917f, 0.015982f, -0.023755f, -0.022174f, -0.013639f, -0.000467f, -0.023581f, -0.020705f, 0.000088f, 0.005970f, 0.015000f, -0.004159f, -0.007693f, 0.012219f, -0.003205f, 0.003833f, 0.044996f, 0.036115f, -0.073924f, -0.036282f, 0.056983f, -0.010561f, -0.055379f, -0.000595f, 0.001235f, 0.020008f, 0.060257f, 0.053430f, -0.032869f, + 0.009825f, -0.007398f, 0.000395f, -0.000481f, -0.034728f, 0.052280f, -0.015574f, -0.034153f, 0.012109f, -0.024498f, 0.029592f, 0.002667f, 0.042114f, -0.012929f, -0.040081f, -0.036100f, 0.031898f, -0.015317f, 0.041549f, -0.011105f, 0.026896f, -0.027297f, -0.021326f, -0.012947f, 0.002930f, -0.034278f, 0.008375f, 0.001885f, 0.000519f, 0.033642f, -0.000430f, 0.011287f, -0.023362f, 0.016715f, -0.036843f, 0.039478f, -0.035441f, 0.023498f, 0.011878f, 0.033202f, -0.055444f, 0.001973f, 0.004647f, -0.016669f, -0.040059f, -0.067753f, -0.011363f, -0.057800f, -0.022267f, -0.046236f, -0.021583f, -0.084571f, -0.026309f, 0.038509f, 0.048657f, 0.026579f, 0.028337f, -0.004476f, 0.030791f, -0.060217f, -0.013763f, 0.009466f, 0.038998f, 0.010859f, -0.082922f, -0.003161f, -0.036422f, -0.024165f, 0.097063f, 0.065318f, -0.045927f, -0.018596f, -0.032222f, 0.010941f, -0.085419f, 0.005387f, 0.017936f, -0.024304f, -0.025267f, 0.015695f, 0.005108f, 0.000973f, -0.016295f, -0.014260f, -0.013927f, -0.014094f, 0.026833f, 0.024652f, -0.001591f, -0.006688f, -0.026149f, -0.030028f, -0.006236f, -0.007382f, 0.010367f, 0.026294f, + -0.050760f, -0.003667f, 0.025725f, 0.000098f, 0.032872f, -0.011182f, -0.031010f, 0.017103f, 0.035545f, 0.018056f, -0.020912f, 0.002829f, 0.032950f, -0.041332f, -0.029296f, 0.055380f, 0.003368f, -0.001638f, -0.005254f, 0.009004f, 0.013083f, 0.017023f, -0.006538f, -0.013142f, -0.015429f, -0.097175f, 0.028109f, 0.015653f, -0.051737f, 0.020593f, 0.018685f, -0.036940f, -0.029015f, 0.044153f, 0.005045f, 0.023663f, -0.012189f, 0.029283f, -0.009630f, -0.004273f, 0.022408f, 0.011337f, 0.007068f, 0.000929f, -0.015836f, -0.026196f, -0.016569f, 0.041731f, -0.015042f, -0.035664f, 0.060670f, 0.038032f, 0.004399f, 0.028152f, 0.007836f, -0.031305f, -0.093761f, 0.038477f, -0.003559f, -0.050180f, 0.041892f, -0.004236f, -0.068472f, -0.056980f, -0.030192f, 0.044886f, 0.017473f, 0.046511f, 0.057875f, 0.017648f, -0.047594f, 0.015137f, 0.016499f, -0.059816f, -0.010149f, 0.034043f, -0.019200f, -0.065205f, -0.050087f, -0.079535f, -0.051302f, -0.011323f, 0.049930f, 0.073158f, 0.034690f, -0.004625f, 0.049773f, -0.012339f, -0.123635f, -0.097467f, 0.020987f, -0.049007f, -0.058846f, 0.083886f, 0.010599f, -0.112368f, + -0.087473f, 0.029932f, 0.004749f, 0.019482f, 0.041412f, 0.101038f, 0.057375f, -0.008242f, 0.111813f, 0.036040f, -0.118225f, 0.001305f, -0.025554f, 0.061152f, 0.017842f, -0.038394f, 0.018479f, -0.028752f, -0.017676f, -0.024975f, 0.037847f, -0.006804f, 0.027553f, 0.023774f, 0.029875f, -0.006496f, -0.030856f, -0.009580f, 0.020485f, -0.012813f, 0.017153f, 0.011636f, 0.012239f, -0.026106f, 0.002732f, 0.010973f, 0.000110f, 0.047751f, -0.002046f, 0.021376f, 0.004237f, -0.007568f, 0.024941f, 0.006406f, -0.004204f, 0.028496f, -0.013911f, -0.004020f, 0.016844f, 0.007375f, -0.003103f, -0.011163f, -0.016421f, 0.002094f, -0.018799f, -0.013377f, 0.009428f, 0.013848f, -0.014521f, 0.092016f, 0.089768f, -0.028367f, 0.031422f, -0.036904f, 0.022680f, 0.001051f, 0.013228f, -0.043945f, 0.003736f, -0.037564f, -0.033110f, 0.000186f, -0.076831f, 0.001773f, -0.032555f, 0.008465f, 0.022915f, -0.000717f, 0.026504f, -0.038004f, 0.057674f, -0.028504f, -0.000794f, 0.039616f, -0.037184f, 0.014514f, 0.028887f, 0.035140f, 0.005286f, 0.012632f, 0.008928f, -0.055457f, -0.030623f, -0.009016f, 0.008358f, 0.008487f, + -0.008060f, 0.036656f, -0.011674f, -0.000559f, -0.006845f, -0.015948f, 0.013143f, 0.007262f, -0.043639f, 0.012846f, -0.035045f, 0.009594f, -0.084407f, -0.004143f, -0.001971f, -0.000236f, 0.034664f, -0.013983f, -0.030694f, -0.013830f, 0.031850f, -0.000163f, -0.081591f, 0.114277f, -0.009871f, -0.021935f, 0.025041f, -0.005061f, -0.016705f, -0.021509f, -0.022649f, -0.024589f, 0.078545f, -0.030411f, -0.045314f, 0.038784f, 0.003914f, -0.061987f, -0.014489f, 0.025775f, 0.020700f, -0.020508f, 0.042415f, -0.007565f, -0.011489f, 0.039016f, -0.028695f, -0.026581f, 0.049596f, -0.022022f, -0.007708f, -0.002823f, 0.021085f, 0.010004f, -0.000395f, -0.003614f, 0.001349f, 0.009221f, -0.010044f, -0.000920f, 0.009817f, 0.010130f, 0.012422f, -0.030524f, 0.007961f, 0.015149f, -0.029398f, 0.002320f, 0.006318f, -0.005428f, -0.011816f, 0.011735f, 0.003527f, -0.010867f, 0.001854f, -0.001211f, -0.004832f, -0.037411f, 0.021289f, -0.022228f, 0.006824f, 0.006083f, -0.033507f, -0.002100f, 0.001808f, -0.000433f, -0.000311f, -0.011608f, -0.001490f, 0.009300f, -0.001194f, -0.072794f, -0.107332f, -0.103293f, 0.228698f, 0.189721f, + 0.216137f, 0.488177f, 0.127881f, -0.122279f, 0.038773f, -0.391487f, -0.414923f, -0.102676f, -0.260663f, -0.201646f, 0.123701f, -0.064035f, 0.026031f, 0.311196f, 0.154727f, 0.230736f, 0.443201f, 0.295355f, 0.077561f, 0.064424f, -0.130096f, -0.402913f, -0.307605f, -0.235507f, -0.475845f, -0.192439f, 0.011942f, -0.083989f, -0.037398f, 0.241323f, 0.064472f, 0.032753f, 0.299051f, 0.037391f, 0.072009f, 0.424437f, 0.312366f, 0.197838f, 0.401536f, 0.200178f, -0.069643f, -0.005533f, -0.126131f, -0.623888f, -0.544145f, -0.439718f, -0.683479f, -0.520775f, -0.183909f, -0.246369f, 0.056557f, 0.475847f, 0.425255f, 0.588063f, 0.742482f, 0.552493f, 0.431295f, 0.419351f, 0.232534f, -0.077657f, -0.148306f, -0.339775f, -0.485230f, -0.476781f, -0.412816f, -0.473266f, -0.484095f, -0.389246f, -0.217127f, -0.157332f, 0.059939f, 0.372606f, 0.537073f, 0.766016f, 0.861689f, 0.514632f, 0.125797f, -0.072764f, -0.517464f, -0.492612f, -0.374916f, -0.291373f, -0.107666f, 0.055667f, 0.041671f, 0.053647f, 0.067175f, 0.031719f, 0.078919f, 0.110224f, 0.082237f, 0.132941f, 0.076132f, -0.032975f, -0.040205f, -0.115901f, + -0.212314f, -0.057755f, -0.065800f, -0.076240f, 0.067833f, 0.058143f, -0.071552f, -0.092667f, -0.172741f, -0.282883f, -0.118219f, 0.162518f, 0.276399f, 0.535163f, 0.645724f, 0.439170f, 0.273013f, 0.073629f, -0.240922f, -0.353040f, -0.399407f, -0.467304f, -0.438970f, -0.336790f, -0.272645f, -0.225616f, -0.136415f, -0.033819f, 0.118717f, 0.408996f, 0.570724f, 0.506647f, 0.364616f, 0.225404f, 0.049972f, -0.086908f, -0.133028f, -0.168969f, -0.120026f, -0.031353f, -0.004510f, -0.033823f, -0.056802f, -0.092139f, -0.148173f, -0.192950f, -0.186230f, -0.186952f, -0.108876f, 0.019306f, 0.070861f, 0.128866f, 0.169308f, 0.171242f, 0.133607f, 0.091204f, 0.052386f, 0.029479f, 0.042638f, 0.057988f, 0.059306f, 0.052454f, 0.031576f, -0.011994f, -0.069441f, -0.115822f, -0.141930f, -0.144999f, -0.116518f, -0.092066f, -0.074477f, -0.038431f, 0.010585f, 0.041442f, 0.053753f, 0.061745f, 0.065944f, 0.078480f, 0.086317f, 0.077374f, 0.044463f, 0.019444f, 0.005761f, -0.011367f, -0.016411f, -0.010064f, -0.015757f, -0.009020f, 0.003079f, -0.004980f, -0.022198f, -0.027010f, -0.044240f, -0.062779f, -0.059964f, -0.053628f, + -0.040944f, -0.006147f, 0.022612f, 0.037032f, 0.052589f, 0.060140f, 0.043320f, 0.033274f, 0.018603f, 0.005209f, 0.004834f, 0.017076f, 0.015908f, 0.014278f, 0.008056f, -0.011115f, -0.024635f, -0.038002f, -0.051613f, -0.052053f, -0.040976f, -0.022309f, -0.003272f, 0.017070f, 0.030412f, 0.036239f, 0.029766f, 0.019500f, 0.008779f, 0.003104f, 0.001243f, 0.000941f, -0.001242f, -0.003061f, -0.005562f, -0.006313f, -0.006105f, -0.004252f, -0.002774f, -0.000625f, 0.000069f, 0.000953f, 0.000055f}, + {0.016638f, -0.002184f, 0.001321f, 0.013096f, -0.001693f, -0.000605f, -0.003820f, 0.014286f, 0.000830f, 0.006948f, 0.004214f, 0.004207f, -0.005900f, 0.002966f, -0.009134f, -0.000990f, 0.007070f, 0.001438f, 0.004137f, 0.006667f, -0.011278f, -0.007869f, 0.002675f, -0.000558f, 0.008357f, 0.005095f, -0.000442f, -0.004641f, -0.002928f, -0.005742f, -0.000922f, -0.000765f, -0.000869f, 0.001592f, 0.002180f, -0.004997f, 0.008377f, -0.001925f, -0.001315f, 0.002866f, -0.010693f, -0.002465f, 0.004619f, 0.001636f, 0.010540f, -0.000040f, -0.000777f, 0.002060f, 0.000714f, 0.004391f, 0.007297f, 0.009285f, -0.000541f, -0.000958f, 0.000163f, -0.005341f, -0.006783f, 0.003743f, 0.006051f, -0.004250f, -0.004080f, -0.002755f, 0.007719f, 0.004548f, -0.001066f, 0.001204f, -0.009108f, -0.002623f, 0.004731f, 0.003925f, 0.006731f, -0.009789f, 0.002221f, 0.003703f, -0.002042f, 0.006905f, -0.000446f, 0.006019f, 0.002863f, 0.001936f, 0.007634f, 0.003790f, 0.001926f, 0.000062f, 0.000900f, -0.001821f, 0.000641f, 0.001061f, -0.000602f, -0.002713f, 0.001341f, 0.001320f, -0.002008f, -0.000281f, -0.001355f, 0.001418f, + 0.002196f, 0.000089f, -0.000280f, -0.000124f, -0.002036f, 0.000999f, -0.000719f, 0.001691f, 0.000799f, 0.000520f, 0.000363f, -0.000910f, 0.000552f, 0.000250f, 0.000869f, -0.001618f, -0.000770f, -0.000358f, 0.000222f, -0.002204f, 0.021696f, 0.005972f, -0.004969f, 0.011058f, -0.005376f, 0.011509f, -0.003828f, -0.005251f, 0.005855f, 0.010761f, -0.000331f, -0.005326f, 0.002874f, 0.002257f, -0.000442f, -0.015329f, 0.003591f, 0.004486f, 0.001230f, 0.009569f, 0.012887f, 0.006913f, 0.012690f, 0.008624f, 0.007732f, -0.002067f, 0.008587f, 0.004133f, -0.006511f, 0.002435f, 0.003967f, -0.008389f, -0.010648f, -0.001640f, 0.004197f, 0.000163f, -0.003843f, -0.005154f, -0.005015f, -0.002492f, 0.005745f, 0.011511f, 0.009754f, 0.003679f, 0.007492f, -0.012096f, 0.000763f, -0.003089f, 0.000118f, -0.013883f, 0.005147f, -0.001338f, -0.003273f, -0.000544f, -0.003768f, -0.006865f, -0.004822f, 0.004864f, 0.001165f, 0.003730f, -0.005060f, 0.009465f, 0.002434f, -0.010969f, 0.004530f, 0.001388f, 0.003048f, 0.006004f, 0.001823f, 0.011022f, -0.003517f, 0.001205f, -0.012876f, 0.002445f, 0.001241f, 0.000365f, + 0.000305f, -0.002428f, 0.009159f, -0.002805f, -0.004258f, 0.006945f, -0.007199f, -0.003517f, -0.002974f, -0.001343f, -0.003358f, 0.002318f, 0.000613f, 0.001208f, -0.000095f, -0.000322f, 0.000118f, -0.001319f, 0.000788f, 0.001201f, -0.000467f, -0.000568f, -0.000064f, -0.002387f, -0.003889f, 0.001428f, 0.000473f, -0.003073f, -0.000410f, -0.000345f, -0.000672f, -0.003722f, 0.000949f, -0.000024f, -0.000123f, 0.000248f, 0.000644f, 0.000396f, -0.001413f, -0.000061f, -0.002566f, -0.000299f, 0.001066f, -0.004381f, -0.004431f, -0.001420f, 0.004015f, -0.007418f, 0.002152f, -0.014661f, 0.002733f, 0.002782f, -0.001729f, 0.010496f, 0.000644f, -0.001155f, 0.000921f, 0.005565f, -0.009017f, 0.001297f, 0.002732f, 0.005757f, -0.012819f, -0.006468f, -0.004852f, 0.004706f, 0.001895f, -0.004003f, -0.012955f, 0.003149f, -0.012887f, -0.000774f, 0.005080f, -0.002368f, 0.003863f, -0.002208f, 0.008641f, 0.012867f, 0.006765f, -0.006637f, 0.001221f, 0.009755f, 0.005990f, -0.006008f, 0.005032f, 0.001523f, -0.010052f, 0.003540f, 0.013752f, 0.006477f, 0.004593f, 0.015384f, 0.001351f, -0.005817f, -0.011789f, -0.000498f, + -0.006630f, -0.007903f, -0.003780f, 0.008466f, -0.008051f, 0.002815f, -0.004817f, -0.004464f, 0.009820f, -0.001275f, 0.001604f, 0.007867f, 0.010669f, -0.004735f, -0.009851f, 0.012513f, 0.009561f, 0.006136f, 0.000552f, -0.007496f, 0.001170f, 0.009891f, -0.010045f, 0.003066f, -0.006556f, -0.000202f, 0.006084f, -0.005722f, -0.000352f, -0.011026f, -0.002943f, -0.000956f, 0.001647f, -0.000573f, -0.004208f, -0.000484f, 0.002081f, -0.003246f, -0.000875f, 0.001527f, 0.001233f, 0.000961f, 0.000879f, -0.000156f, -0.000837f, -0.004342f, 0.002310f, -0.000226f, 0.002381f, -0.001674f, -0.002900f, 0.001028f, 0.002256f, -0.001491f, 0.001989f, -0.000334f, -0.000166f, -0.000171f, -0.000484f, 0.002433f, -0.001445f, 0.000951f, -0.001459f, -0.029060f, -0.010640f, -0.004474f, 0.015899f, -0.006034f, -0.002393f, -0.009394f, -0.007953f, -0.001357f, -0.020964f, 0.011749f, 0.003878f, -0.000595f, -0.007748f, 0.011567f, -0.003261f, 0.005875f, -0.004690f, 0.003711f, 0.007370f, -0.009215f, 0.000968f, 0.010170f, 0.005743f, 0.004096f, 0.010871f, 0.009729f, -0.006110f, -0.007784f, -0.009717f, -0.000161f, -0.012773f, 0.003048f, + -0.016870f, -0.003228f, 0.012414f, 0.006532f, -0.004284f, -0.001313f, -0.012694f, 0.005763f, -0.005432f, 0.011184f, -0.006450f, -0.011479f, -0.002366f, -0.004731f, -0.009440f, 0.003654f, -0.002170f, -0.006004f, -0.006127f, -0.020334f, 0.002770f, -0.006099f, -0.015078f, -0.004010f, 0.009283f, 0.004766f, -0.007804f, 0.006438f, 0.008269f, 0.007996f, 0.002960f, -0.010396f, -0.001744f, -0.002309f, 0.007190f, -0.007307f, -0.002820f, 0.003792f, 0.003841f, -0.011379f, -0.013566f, -0.024339f, -0.004177f, -0.014136f, 0.004640f, -0.000547f, -0.003390f, 0.007157f, -0.001526f, -0.003258f, 0.003107f, 0.004881f, 0.004675f, 0.003648f, 0.008457f, -0.003617f, -0.002997f, -0.002289f, 0.001229f, 0.000426f, -0.001943f, 0.002335f, 0.003346f, -0.000748f, 0.000773f, -0.001485f, -0.001943f, -0.000360f, -0.001269f, 0.000350f, 0.000720f, 0.000099f, -0.002154f, 0.000330f, -0.001459f, -0.000553f, 0.001196f, 0.002730f, -0.001234f, 0.003270f, 0.003966f, 0.000627f, -0.001175f, -0.003463f, -0.000720f, 0.002328f, 0.001529f, -0.001507f, -0.025293f, -0.010116f, -0.004532f, -0.007489f, 0.008606f, 0.011254f, 0.010607f, -0.021114f, + -0.015768f, 0.006079f, 0.025731f, 0.015218f, -0.000010f, 0.003669f, 0.007332f, -0.009241f, 0.006106f, -0.008566f, 0.006194f, 0.009149f, 0.001414f, 0.007343f, 0.002292f, -0.000504f, 0.003810f, 0.002268f, -0.006894f, -0.008725f, 0.012076f, 0.004906f, -0.008810f, 0.008657f, -0.004803f, -0.000879f, 0.020758f, -0.009892f, 0.011755f, 0.023216f, 0.009475f, -0.001309f, 0.000901f, -0.008352f, 0.010856f, -0.011064f, -0.006051f, -0.018608f, 0.003518f, 0.014383f, -0.000352f, -0.013166f, -0.004690f, -0.018673f, -0.009483f, -0.003450f, -0.026578f, -0.014447f, -0.002618f, 0.002840f, -0.011631f, 0.005921f, -0.003074f, -0.009167f, 0.009964f, 0.029415f, 0.002745f, 0.015007f, 0.010176f, 0.008835f, -0.009292f, 0.003939f, -0.015841f, 0.001720f, 0.004572f, 0.003582f, -0.006145f, 0.000172f, -0.016083f, -0.005578f, -0.005634f, -0.001114f, 0.007838f, 0.008416f, -0.000361f, 0.003297f, 0.004576f, -0.002270f, -0.001743f, -0.001448f, 0.001523f, 0.000223f, 0.001144f, 0.000917f, 0.002589f, -0.001325f, -0.000069f, -0.003822f, -0.000458f, -0.000560f, 0.002778f, 0.001619f, -0.001675f, -0.002290f, -0.002229f, -0.002147f, + -0.000716f, -0.002646f, 0.000987f, 0.005003f, -0.003900f, -0.000463f, 0.001721f, 0.002867f, 0.039506f, 0.024965f, -0.013583f, 0.005068f, 0.012717f, -0.005248f, 0.007281f, -0.002472f, 0.011864f, 0.005942f, 0.003800f, 0.010759f, 0.006089f, 0.005323f, -0.003351f, -0.026436f, 0.012661f, -0.004503f, -0.006012f, 0.020681f, 0.012806f, 0.007146f, 0.009544f, 0.007082f, 0.005268f, -0.004047f, 0.003070f, 0.000840f, -0.006761f, 0.005467f, 0.008953f, -0.014913f, 0.002863f, -0.009652f, 0.007142f, 0.008255f, -0.023304f, -0.000384f, -0.027734f, 0.000476f, 0.003475f, 0.002353f, 0.007582f, 0.018925f, -0.002305f, -0.009811f, -0.004798f, -0.005268f, -0.007285f, 0.005446f, 0.005878f, 0.001830f, -0.003068f, -0.003405f, 0.018405f, -0.006105f, -0.003669f, -0.010045f, 0.016350f, -0.002485f, 0.013742f, -0.006467f, 0.014686f, -0.014137f, -0.029705f, -0.008838f, 0.001872f, 0.006010f, 0.010056f, -0.010010f, -0.007443f, 0.004068f, 0.002692f, -0.004643f, -0.007740f, 0.018572f, -0.007260f, 0.017667f, 0.004681f, 0.012482f, 0.004929f, 0.009092f, 0.007681f, -0.003204f, -0.001192f, 0.003567f, -0.000516f, 0.009632f, + 0.000258f, -0.003203f, 0.000889f, -0.010816f, -0.002133f, -0.002512f, 0.000759f, -0.003624f, -0.001376f, -0.001229f, -0.000249f, -0.001259f, -0.005660f, -0.004613f, 0.001386f, 0.000378f, -0.006355f, -0.000398f, 0.000946f, 0.000921f, 0.002604f, 0.001087f, 0.006267f, 0.000262f, -0.002105f, -0.000272f, -0.000843f, -0.002920f, -0.003415f, -0.001374f, 0.000948f, 0.018499f, -0.007073f, -0.012273f, -0.000575f, 0.001966f, -0.017569f, -0.013717f, -0.004386f, 0.004792f, -0.002628f, 0.022816f, 0.013672f, 0.000619f, 0.021760f, 0.007868f, 0.006361f, -0.018643f, 0.017496f, -0.003259f, -0.004404f, -0.015721f, -0.007120f, 0.013988f, 0.013787f, -0.003917f, 0.009141f, -0.018909f, -0.002670f, 0.012729f, 0.009564f, -0.007059f, -0.013446f, -0.007531f, -0.008312f, -0.010352f, -0.008635f, 0.002086f, -0.014131f, -0.001348f, 0.019518f, -0.009384f, 0.002252f, -0.000723f, -0.004495f, 0.007628f, -0.003114f, 0.012773f, 0.000016f, 0.018009f, -0.004619f, -0.011321f, 0.006510f, -0.008941f, -0.008874f, -0.008941f, -0.025542f, 0.002983f, 0.010580f, 0.015229f, 0.010970f, 0.020008f, -0.002044f, -0.007668f, 0.011560f, -0.014184f, + 0.003311f, 0.002216f, -0.002125f, 0.012974f, 0.012095f, -0.003090f, -0.015420f, 0.003108f, -0.007959f, -0.014672f, -0.013605f, 0.007533f, 0.013209f, 0.008295f, -0.028527f, 0.006462f, 0.003058f, -0.001392f, 0.013484f, 0.007300f, 0.011039f, 0.004201f, -0.001048f, 0.014492f, 0.001967f, 0.006605f, 0.005278f, 0.001180f, -0.006465f, 0.001098f, -0.003592f, -0.007910f, 0.001544f, 0.002458f, 0.003806f, -0.000907f, 0.001060f, 0.000938f, 0.000737f, 0.002879f, 0.001880f, 0.002004f, -0.000262f, -0.004969f, 0.003593f, -0.001976f, -0.002214f, -0.001833f, -0.003532f, 0.006614f, 0.007457f, 0.006353f, 0.002585f, 0.000757f, 0.001128f, -0.001445f, 0.005114f, -0.022804f, -0.012844f, 0.002054f, -0.012525f, -0.033601f, 0.025539f, -0.000874f, -0.001337f, 0.002873f, 0.002313f, -0.022334f, 0.015715f, -0.023271f, 0.002367f, 0.010177f, -0.002698f, 0.003505f, 0.004024f, -0.025013f, -0.007992f, -0.011320f, -0.001963f, 0.004752f, -0.007792f, -0.005464f, -0.000679f, -0.001764f, 0.002587f, 0.010023f, 0.005858f, 0.021912f, -0.007740f, 0.030193f, -0.001812f, 0.000523f, -0.019620f, -0.003264f, 0.015148f, -0.003247f, + -0.030352f, 0.012085f, 0.014585f, -0.009429f, 0.007869f, -0.011760f, 0.021581f, 0.011464f, -0.000282f, -0.001550f, -0.013322f, -0.009001f, -0.014609f, 0.013687f, 0.014119f, 0.005773f, 0.001894f, 0.006005f, -0.011717f, -0.031949f, -0.011257f, 0.010808f, 0.005182f, -0.023767f, 0.000913f, 0.002494f, 0.003534f, -0.011542f, 0.008396f, 0.016406f, 0.008931f, 0.000076f, 0.007071f, 0.011209f, -0.006163f, 0.016824f, 0.000583f, -0.000712f, -0.016620f, -0.021881f, 0.014207f, -0.006844f, 0.007201f, 0.006778f, -0.000873f, -0.004879f, -0.004438f, -0.003859f, 0.002501f, -0.005560f, 0.007306f, 0.001392f, -0.001660f, 0.001559f, -0.002216f, 0.000059f, -0.008565f, 0.001998f, 0.000959f, -0.001753f, -0.004660f, 0.001445f, -0.004097f, -0.000444f, 0.001658f, -0.001102f, -0.002604f, -0.000249f, -0.002616f, 0.010495f, 0.008369f, 0.002849f, -0.001013f, -0.001098f, -0.002861f, -0.000117f, -0.000996f, 0.006654f, -0.002080f, -0.001085f, 0.006732f, 0.001360f, 0.002933f, 0.004609f, -0.003142f, -0.001969f, 0.005076f, 0.002780f, -0.001173f, -0.000916f, 0.007179f, -0.035172f, 0.018960f, -0.004886f, 0.007037f, -0.010483f, + -0.005584f, 0.014652f, -0.016982f, 0.016489f, -0.010238f, -0.020005f, 0.009099f, -0.010829f, 0.042510f, 0.006196f, -0.014756f, -0.020726f, -0.003628f, -0.025679f, -0.011678f, -0.027650f, -0.001553f, 0.018295f, -0.012989f, 0.011241f, 0.018647f, -0.017344f, 0.000119f, -0.020225f, 0.011337f, 0.003846f, -0.000684f, 0.011725f, -0.012485f, -0.018156f, -0.015179f, 0.000917f, 0.003448f, 0.015017f, -0.021765f, 0.015397f, 0.003086f, -0.032346f, -0.017680f, -0.026135f, -0.010637f, 0.009744f, -0.008726f, -0.008814f, -0.049451f, -0.001171f, -0.010831f, -0.004673f, -0.031710f, -0.011194f, -0.004166f, 0.002316f, 0.025917f, 0.023448f, 0.019993f, 0.011340f, 0.024982f, -0.027010f, 0.020965f, 0.002761f, 0.009792f, 0.006888f, -0.019159f, 0.029690f, 0.018529f, 0.011616f, -0.013087f, -0.017770f, -0.012650f, 0.017167f, 0.002023f, -0.000082f, 0.009413f, 0.004369f, 0.009896f, -0.008851f, 0.026252f, 0.013613f, -0.002782f, -0.004445f, 0.005913f, 0.005126f, 0.003232f, -0.001739f, -0.001569f, 0.002266f, -0.000382f, -0.000634f, -0.010835f, 0.000466f, -0.006247f, 0.000217f, 0.003490f, 0.001025f, -0.000625f, -0.000126f, + 0.002187f, 0.001712f, -0.010305f, -0.002926f, 0.003696f, -0.003182f, -0.004005f, -0.000436f, 0.001423f, 0.001513f, 0.002042f, -0.001696f, -0.002107f, 0.001600f, -0.004476f, -0.007867f, -0.001904f, -0.002101f, -0.002470f, 0.001221f, -0.000563f, 0.006647f, 0.003246f, -0.002958f, 0.003052f, 0.002063f, 0.001772f, -0.003053f, -0.005347f, -0.000307f, 0.000856f, 0.005642f, -0.001975f, -0.001539f, 0.013285f, 0.024624f, 0.026700f, 0.010916f, 0.018688f, 0.015126f, 0.009055f, -0.004878f, 0.002025f, -0.007275f, 0.000652f, -0.002501f, -0.016094f, 0.020554f, 0.032617f, 0.013006f, -0.008873f, 0.014628f, 0.013927f, -0.000542f, 0.008671f, -0.015340f, -0.029574f, -0.019680f, -0.013430f, 0.008607f, -0.003528f, -0.015444f, 0.011636f, -0.005282f, -0.013783f, -0.000132f, 0.024077f, 0.012143f, 0.017862f, 0.006277f, 0.013174f, 0.014595f, -0.003245f, 0.013374f, -0.005090f, -0.015172f, 0.006522f, -0.017576f, 0.006683f, 0.007082f, -0.025834f, -0.016786f, 0.010746f, 0.026947f, -0.013818f, 0.018804f, 0.026261f, -0.021535f, 0.001017f, 0.023918f, 0.002706f, -0.008629f, -0.001875f, -0.012142f, -0.021233f, 0.000347f, + -0.006346f, -0.011122f, 0.014829f, 0.000829f, -0.024313f, 0.031441f, -0.012806f, 0.025521f, -0.029929f, -0.020467f, 0.014845f, -0.018394f, 0.010370f, -0.012334f, -0.008923f, -0.017266f, -0.010488f, -0.014034f, -0.035345f, 0.005963f, 0.021839f, -0.009900f, -0.001464f, 0.015157f, 0.016191f, 0.011510f, -0.002099f, -0.001185f, -0.009062f, -0.002769f, -0.003905f, -0.004699f, 0.003950f, -0.000860f, -0.003244f, 0.005318f, 0.004832f, -0.002109f, -0.000344f, -0.006248f, 0.002906f, -0.005482f, -0.010059f, -0.000605f, 0.009623f, 0.000190f, -0.005203f, -0.001304f, 0.015820f, 0.007970f, 0.000662f, -0.004600f, -0.005573f, -0.004049f, 0.001081f, 0.001198f, -0.004655f, -0.001671f, 0.000312f, 0.001977f, 0.006386f, 0.001625f, 0.010004f, 0.006060f, 0.007206f, 0.002834f, 0.003304f, 0.003956f, -0.001196f, 0.000265f, -0.021908f, 0.013967f, -0.009236f, -0.024351f, 0.034979f, 0.017553f, -0.023968f, 0.017057f, 0.016034f, 0.004354f, 0.029552f, -0.059975f, 0.004717f, 0.024404f, 0.008850f, 0.002050f, 0.026497f, 0.000869f, 0.014692f, -0.034734f, -0.004258f, 0.009277f, 0.000848f, -0.017451f, 0.007161f, 0.013785f, + 0.007144f, 0.006463f, 0.018848f, 0.015212f, 0.024914f, 0.019133f, -0.007144f, -0.007994f, 0.019376f, -0.011779f, 0.013717f, -0.021585f, -0.011248f, -0.027580f, -0.012098f, 0.015047f, 0.005713f, -0.006443f, 0.023010f, -0.026897f, -0.035772f, -0.058702f, 0.018617f, 0.020146f, 0.016289f, 0.012297f, -0.013401f, 0.009225f, -0.007599f, 0.022044f, 0.059549f, -0.009303f, -0.012046f, -0.025819f, -0.007743f, 0.022050f, -0.014670f, 0.012597f, 0.022225f, 0.003466f, -0.000064f, -0.017270f, -0.004550f, 0.008050f, -0.040546f, -0.037937f, 0.004225f, 0.005027f, -0.014120f, 0.020678f, 0.016292f, 0.029806f, 0.048832f, 0.019189f, -0.010831f, -0.005993f, 0.010634f, -0.000366f, -0.026292f, 0.012598f, 0.011619f, 0.009441f, 0.003576f, 0.012344f, -0.000102f, 0.006792f, 0.006136f, 0.003745f, -0.005676f, 0.000403f, -0.000233f, -0.000932f, 0.010294f, 0.002843f, 0.000224f, 0.005080f, -0.010234f, 0.002941f, 0.002273f, -0.001432f, 0.010817f, 0.001982f, -0.002695f, -0.001866f, -0.006104f, 0.018460f, 0.001590f, 0.003098f, 0.008139f, -0.002817f, -0.002419f, 0.010361f, -0.010969f, 0.010306f, -0.007930f, 0.008531f, + -0.000237f, -0.000808f, -0.001658f, 0.003434f, -0.001393f, 0.008824f, -0.006971f, -0.003076f, 0.003071f, -0.001700f, -0.002173f, -0.005654f, -0.008282f, 0.006196f, 0.088629f, 0.050151f, 0.031929f, -0.008159f, -0.009051f, -0.001079f, -0.007570f, -0.009097f, -0.013768f, -0.016545f, -0.028460f, 0.001283f, -0.002026f, 0.006973f, 0.012389f, 0.023657f, 0.035731f, -0.004751f, -0.046518f, -0.018154f, 0.039899f, -0.006195f, 0.014944f, -0.005143f, -0.000685f, 0.026617f, 0.009195f, 0.020218f, 0.011865f, -0.000807f, -0.001213f, -0.000349f, 0.013413f, 0.017179f, -0.006670f, -0.026170f, 0.034291f, 0.024608f, 0.017453f, 0.006452f, 0.008886f, -0.013904f, -0.025971f, 0.035783f, 0.019945f, 0.009229f, -0.016602f, -0.018435f, -0.025912f, -0.015929f, -0.004615f, -0.016182f, 0.008968f, -0.033115f, 0.004576f, 0.024472f, -0.015915f, 0.008643f, 0.001474f, 0.003600f, -0.037827f, 0.013417f, -0.016246f, 0.027607f, -0.060746f, 0.010436f, -0.015879f, -0.020501f, 0.005026f, -0.012367f, 0.012492f, 0.011853f, -0.039575f, 0.000438f, 0.027665f, 0.004145f, 0.008113f, 0.017409f, 0.007103f, 0.028870f, 0.011777f, 0.006111f, + 0.001936f, -0.004182f, 0.018594f, -0.036725f, -0.000696f, -0.002142f, -0.003368f, 0.001448f, -0.001052f, -0.000279f, -0.003192f, -0.005404f, -0.007059f, 0.011429f, 0.009575f, -0.005025f, -0.000814f, -0.017589f, 0.001733f, -0.001100f, -0.017352f, -0.000083f, -0.025740f, -0.019567f, 0.008685f, 0.003275f, 0.013563f, -0.015303f, 0.006588f, 0.013324f, 0.002954f, -0.000577f, 0.003471f, 0.007141f, 0.000618f, -0.003841f, 0.014131f, 0.000098f, 0.004610f, -0.008290f, -0.006202f, 0.005868f, 0.008483f, 0.001493f, -0.054479f, -0.027979f, 0.004020f, -0.047864f, 0.010973f, 0.034754f, -0.016729f, 0.042246f, 0.049541f, 0.006313f, 0.024748f, 0.030568f, 0.013697f, -0.029310f, 0.019126f, 0.023328f, -0.001154f, 0.005904f, 0.016445f, 0.014558f, 0.034963f, 0.005977f, -0.013486f, 0.022337f, 0.008000f, -0.003462f, 0.000503f, 0.014978f, -0.020445f, -0.009234f, -0.008655f, 0.012498f, 0.006470f, -0.028819f, 0.008509f, 0.024092f, 0.000638f, 0.029034f, -0.027458f, -0.051850f, 0.004140f, 0.023279f, 0.035180f, 0.032646f, 0.016840f, 0.015496f, 0.012402f, -0.035229f, -0.010318f, -0.001467f, 0.026434f, 0.041808f, + -0.014452f, 0.009011f, -0.015389f, 0.009894f, 0.006644f, 0.025453f, 0.039402f, -0.015185f, -0.017273f, -0.003426f, 0.021587f, 0.027740f, 0.038834f, 0.000961f, -0.041980f, -0.039584f, -0.006467f, 0.005129f, 0.000121f, -0.018144f, 0.000406f, -0.047729f, -0.030816f, -0.028202f, -0.032115f, 0.013694f, 0.004923f, 0.038467f, 0.030731f, 0.011597f, -0.018393f, -0.018348f, -0.017098f, -0.015515f, -0.026680f, 0.012592f, 0.008351f, 0.004945f, 0.017933f, 0.019955f, 0.000108f, 0.017026f, 0.003491f, 0.018181f, -0.006328f, 0.015081f, -0.004824f, -0.001358f, 0.004469f, -0.005532f, 0.025208f, 0.011366f, 0.014964f, 0.006777f, 0.017947f, 0.004028f, 0.008602f, 0.025759f, 0.022322f, 0.011967f, -0.001445f, -0.009868f, -0.008475f, -0.018208f, -0.010238f, -0.011950f, -0.007148f, -0.011020f, -0.013378f, -0.007724f, 0.007774f, 0.017171f, 0.004754f, -0.004015f, 0.000620f, -0.002534f, 0.010713f, 0.012687f, 0.010511f, -0.001108f, 0.004724f, -0.019399f, 0.023020f, -0.050923f, 0.004587f, -0.010172f, 0.027890f, -0.014945f, -0.002346f, 0.008641f, 0.021123f, -0.028424f, -0.047879f, -0.008307f, -0.018774f, 0.001349f, + -0.021617f, 0.012726f, 0.012539f, 0.001263f, -0.025839f, 0.016132f, 0.001596f, 0.043146f, -0.006907f, 0.023634f, -0.019952f, 0.044562f, 0.012831f, 0.027815f, 0.018658f, 0.030346f, 0.044594f, -0.010861f, 0.017298f, -0.031197f, 0.032901f, 0.032007f, -0.000749f, 0.010413f, 0.032221f, -0.020613f, -0.019933f, -0.003271f, 0.064877f, 0.010569f, -0.018146f, 0.032240f, 0.004214f, 0.024733f, 0.035523f, 0.010384f, -0.002405f, 0.003372f, 0.005543f, 0.023471f, -0.008203f, 0.025170f, -0.017354f, 0.024573f, -0.013584f, 0.055421f, -0.008048f, 0.047664f, -0.043199f, -0.047403f, 0.066017f, -0.055234f, -0.029579f, 0.002265f, -0.017803f, -0.034271f, 0.030162f, -0.003986f, -0.042533f, -0.020089f, -0.021846f, -0.062529f, -0.023205f, 0.007759f, 0.014063f, -0.048232f, -0.012330f, 0.029331f, -0.005850f, 0.016867f, 0.028894f, -0.020597f, -0.004711f, 0.004754f, 0.018864f, 0.013592f, 0.014234f, -0.004631f, -0.002725f, 0.011725f, -0.001013f, -0.007717f, 0.006418f, 0.013516f, 0.002560f, 0.009413f, -0.000272f, -0.008622f, -0.000018f, 0.012476f, 0.004695f, -0.006269f, -0.015612f, -0.009374f, 0.018317f, -0.008345f, + -0.024600f, 0.005933f, -0.014114f, -0.026718f, 0.000031f, 0.010176f, 0.000961f, -0.006854f, -0.001971f, 0.007461f, -0.005599f, 0.000460f, 0.009654f, -0.000416f, -0.004464f, -0.005649f, 0.017390f, 0.033463f, 0.001843f, -0.011605f, -0.009717f, -0.005288f, -0.015711f, -0.003225f, -0.006570f, 0.006587f, -0.042738f, -0.028511f, 0.008316f, -0.055884f, -0.032601f, -0.038832f, -0.039511f, 0.048153f, -0.001189f, 0.001660f, 0.014340f, -0.014039f, -0.061446f, -0.045966f, -0.045023f, -0.091806f, 0.006633f, 0.010425f, 0.039671f, 0.023189f, 0.013747f, 0.019797f, 0.013730f, 0.004294f, -0.028979f, -0.042580f, -0.024526f, 0.033094f, -0.004188f, -0.024907f, -0.010058f, 0.032416f, -0.039204f, -0.025297f, -0.040270f, -0.020021f, -0.003444f, -0.038631f, 0.014368f, -0.032079f, 0.034705f, 0.024342f, -0.005393f, 0.024013f, -0.023621f, -0.048555f, 0.021210f, 0.028317f, -0.025069f, -0.055719f, 0.041972f, -0.003623f, 0.030398f, 0.025533f, -0.079699f, -0.056622f, 0.000529f, -0.012931f, 0.051881f, -0.029767f, -0.034414f, -0.009247f, 0.019130f, 0.002923f, -0.004808f, -0.018081f, 0.068889f, -0.033814f, -0.056125f, -0.075886f, + 0.054396f, -0.013010f, -0.062493f, 0.029097f, 0.029620f, 0.017561f, 0.062783f, 0.067174f, 0.068967f, 0.029508f, -0.015680f, -0.006357f, -0.010725f, 0.022887f, -0.044185f, 0.028367f, 0.005389f, 0.005528f, 0.021499f, 0.020796f, -0.018257f, 0.026638f, -0.020961f, 0.008875f, -0.029751f, -0.016971f, -0.011584f, -0.015442f, -0.006182f, -0.016633f, -0.004175f, 0.011364f, 0.031128f, 0.036225f, 0.001462f, 0.028405f, -0.017080f, 0.004068f, 0.016757f, 0.002198f, -0.031640f, 0.003806f, 0.007674f, -0.008825f, -0.023526f, -0.015102f, -0.014500f, 0.037554f, 0.023375f, 0.012091f, 0.017664f, 0.031661f, -0.005076f, -0.037953f, -0.023847f, -0.021872f, -0.027240f, -0.035286f, 0.006130f, -0.029622f, -0.051674f, -0.001116f, -0.009177f, -0.012285f, -0.009830f, 0.007811f, -0.050388f, -0.020071f, 0.023485f, 0.038207f, 0.077805f, 0.012756f, 0.040700f, 0.019725f, 0.019651f, -0.017749f, -0.005687f, -0.015132f, -0.042678f, -0.050146f, -0.070405f, -0.025630f, -0.063426f, -0.024936f, -0.033201f, -0.012402f, 0.034088f, 0.008380f, 0.023199f, 0.040087f, 0.000063f, 0.027083f, 0.007885f, 0.001382f, -0.000913f, -0.005291f, + -0.053503f, 0.019482f, -0.006671f, -0.060463f, -0.037426f, 0.017664f, -0.038787f, -0.014886f, 0.014141f, 0.043898f, 0.053279f, 0.018535f, -0.011057f, 0.007336f, 0.035675f, 0.019087f, 0.007538f, -0.001049f, -0.105449f, -0.021267f, 0.023357f, 0.026776f, 0.010706f, -0.004029f, -0.035539f, 0.024670f, -0.031701f, -0.023907f, -0.006219f, 0.006484f, -0.017617f, -0.056324f, 0.030137f, -0.007205f, 0.070107f, 0.026664f, 0.023975f, 0.026942f, 0.051545f, 0.115574f, 0.001793f, 0.001981f, -0.004828f, -0.034406f, 0.020564f, -0.023868f, 0.084060f, -0.007468f, -0.030119f, -0.027109f, 0.035540f, -0.045575f, -0.030758f, -0.005991f, 0.071907f, 0.002417f, 0.034322f, 0.053116f, 0.010751f, 0.043004f, 0.032618f, -0.005930f, 0.029910f, 0.032413f, 0.001102f, -0.022122f, -0.023831f, 0.006694f, 0.008232f, 0.027198f, 0.017482f, -0.001150f, -0.004046f, 0.004848f, 0.011080f, -0.020139f, -0.004190f, -0.004923f, -0.002627f, -0.031597f, 0.019944f, -0.022925f, 0.008051f, -0.004628f, -0.013702f, 0.003852f, 0.038536f, 0.033711f, 0.000094f, -0.002235f, -0.024476f, -0.009980f, -0.024327f, -0.003601f, -0.028315f, -0.040371f, + 0.011883f, 0.028042f, 0.001958f, 0.001638f, -0.013931f, -0.021142f, 0.059025f, -0.008000f, 0.010723f, -0.064594f, -0.021852f, 0.075650f, -0.050415f, -0.013783f, -0.043655f, -0.129011f, -0.018307f, 0.039531f, 0.032671f, 0.006227f, 0.009407f, -0.007016f, 0.072310f, -0.077937f, -0.000040f, -0.022472f, -0.052041f, -0.044143f, -0.006531f, 0.014745f, 0.013013f, 0.017379f, 0.046702f, 0.030227f, -0.033012f, -0.033669f, 0.092862f, 0.075793f, -0.006064f, 0.008832f, -0.010148f, 0.024675f, -0.000331f, 0.054084f, 0.019743f, 0.028730f, 0.008138f, 0.004148f, -0.095947f, 0.039748f, -0.004092f, -0.055337f, -0.028116f, 0.005438f, -0.014860f, -0.055071f, 0.053025f, -0.009391f, -0.039135f, -0.008235f, 0.005830f, 0.046920f, 0.052642f, 0.039952f, 0.015488f, 0.046796f, 0.050101f, -0.037623f, -0.041020f, -0.026302f, -0.006648f, 0.048494f, 0.064957f, 0.011094f, 0.023466f, 0.062186f, 0.037462f, -0.058354f, 0.043196f, 0.015666f, -0.012753f, 0.002287f, 0.119764f, -0.079248f, 0.061084f, 0.069824f, -0.070194f, -0.004123f, -0.045587f, -0.014750f, -0.100880f, 0.029054f, 0.044771f, -0.060808f, 0.036796f, -0.052615f, + -0.037904f, 0.046007f, -0.028548f, -0.004243f, -0.017123f, 0.002235f, -0.025176f, 0.007789f, 0.011763f, -0.019158f, -0.026983f, -0.002120f, -0.029316f, 0.038550f, 0.007028f, -0.036198f, 0.008018f, -0.006080f, -0.019570f, -0.019001f, 0.012548f, 0.024582f, 0.030942f, 0.012654f, -0.027655f, 0.071006f, -0.013033f, 0.007077f, -0.004503f, -0.037572f, 0.014453f, 0.020507f, -0.018962f, 0.030296f, 0.007833f, 0.022637f, -0.005177f, -0.036340f, 0.012375f, 0.054772f, -0.035407f, -0.050764f, -0.082944f, 0.016605f, -0.016121f, -0.026129f, -0.033730f, 0.018518f, -0.020594f, -0.009379f, 0.054061f, -0.016816f, -0.003365f, -0.042508f, 0.003165f, 0.027348f, -0.060070f, -0.037605f, -0.036073f, -0.017483f, 0.021404f, -0.080479f, -0.045155f, -0.116197f, 0.019892f, -0.001101f, -0.029882f, -0.012893f, -0.017519f, 0.024912f, 0.036987f, -0.041250f, 0.001199f, -0.014373f, -0.014344f, -0.072605f, 0.015616f, 0.055799f, 0.014382f, 0.042214f, 0.052588f, 0.047468f, -0.064073f, -0.019471f, -0.019619f, -0.029825f, 0.053203f, -0.054768f, -0.031967f, 0.001915f, 0.077424f, 0.017571f, -0.027719f, 0.078398f, -0.044495f, -0.041438f, + 0.093129f, 0.089551f, 0.008231f, 0.022794f, -0.025874f, -0.084895f, -0.026531f, 0.085471f, -0.041862f, 0.077461f, -0.028373f, -0.122012f, -0.032581f, -0.057075f, 0.064633f, 0.000565f, 0.014163f, 0.058275f, -0.009723f, 0.048043f, -0.063151f, -0.073971f, 0.056470f, -0.014855f, -0.125013f, 0.076933f, -0.040084f, 0.020975f, 0.024849f, -0.043602f, 0.082258f, -0.056471f, 0.029579f, -0.000888f, 0.021607f, 0.083710f, -0.021676f, -0.026476f, 0.002867f, -0.017455f, -0.023115f, -0.018942f, 0.009168f, 0.018805f, 0.004316f, -0.012033f, 0.010270f, -0.039903f, 0.035640f, 0.025112f, 0.019955f, 0.007963f, -0.000004f, -0.018680f, -0.020521f, -0.019434f, 0.016689f, 0.032674f, -0.032258f, 0.028330f, 0.065868f, 0.022157f, -0.056803f, 0.005446f, 0.020463f, -0.021057f, -0.037592f, 0.035151f, -0.031877f, -0.000751f, -0.003002f, -0.033860f, -0.043793f, -0.000479f, 0.024562f, -0.014480f, 0.056638f, -0.019104f, -0.037849f, 0.026258f, -0.016927f, 0.001938f, 0.021969f, 0.043360f, 0.002880f, -0.077258f, 0.045401f, 0.053006f, -0.064431f, 0.035293f, -0.000714f, -0.022952f, -0.027788f, -0.092230f, -0.041164f, 0.032684f, + 0.005466f, 0.085025f, -0.068521f, -0.038355f, 0.015554f, -0.009212f, 0.053998f, -0.075458f, -0.000315f, 0.007900f, -0.064300f, 0.064029f, 0.034629f, 0.019622f, -0.030377f, 0.043870f, -0.052211f, 0.028731f, 0.021841f, 0.013559f, -0.004106f, -0.028848f, 0.011576f, 0.058193f, -0.030996f, -0.011064f, 0.010930f, -0.045455f, 0.045981f, 0.001867f, 0.011715f, -0.062321f, 0.033186f, 0.008294f, 0.010969f, -0.146318f, 0.019600f, -0.041573f, 0.067918f, 0.056669f, 0.059627f, 0.030758f, -0.119534f, -0.020871f, 0.025002f, 0.002564f, 0.007385f, 0.083854f, -0.013028f, -0.050460f, -0.061076f, 0.002453f, -0.067879f, -0.059089f, -0.052897f, 0.025201f, -0.098789f, 0.069800f, 0.132978f, -0.035034f, -0.016587f, -0.104266f, -0.023302f, 0.039918f, 0.024076f, -0.034700f, -0.007696f, -0.126162f, -0.044879f, 0.126618f, 0.053362f, -0.039337f, 0.036504f, -0.071584f, -0.053418f, 0.013926f, 0.002274f, 0.008519f, -0.049022f, -0.016872f, -0.010696f, -0.000093f, -0.070823f, 0.015078f, -0.009549f, -0.022096f, 0.008840f, 0.028984f, -0.038904f, -0.019295f, -0.006528f, 0.013769f, -0.030004f, -0.007957f, -0.005583f, -0.027970f, + -0.000086f, -0.051731f, 0.066952f, 0.021671f, -0.018172f, -0.006925f, -0.020327f, -0.002905f, 0.042795f, 0.012839f, -0.008478f, 0.022491f, -0.014519f, -0.064413f, 0.002482f, 0.002803f, 0.013098f, 0.028367f, -0.017311f, -0.012259f, 0.027559f, 0.033694f, 0.013990f, -0.031151f, -0.069226f, -0.096551f, 0.027009f, -0.042929f, -0.027438f, 0.027959f, -0.022331f, -0.034630f, 0.027642f, -0.045200f, -0.001651f, -0.051374f, 0.073750f, 0.000240f, -0.052077f, -0.016725f, 0.002280f, -0.006373f, 0.017961f, -0.036523f, -0.023536f, 0.006948f, 0.015694f, 0.007512f, 0.008172f, 0.026572f, -0.030927f, -0.013280f, -0.072488f, 0.026283f, 0.007894f, -0.023455f, 0.054111f, 0.028057f, -0.020790f, 0.080311f, 0.018983f, -0.052075f, 0.039524f, 0.005706f, 0.026036f, 0.052717f, -0.004097f, -0.014099f, 0.009266f, 0.043302f, 0.025851f, 0.000079f, -0.003678f, 0.046406f, -0.003382f, -0.055846f, -0.008706f, 0.009267f, 0.044194f, -0.020110f, 0.075507f, 0.081705f, -0.051662f, 0.042269f, 0.093542f, -0.025876f, 0.141641f, 0.078740f, -0.034567f, -0.032869f, -0.052390f, -0.060861f, -0.033271f, 0.018016f, -0.009826f, -0.011427f, + -0.001182f, -0.009891f, -0.097808f, -0.038883f, -0.096563f, 0.022058f, 0.087824f, -0.033323f, -0.004626f, -0.048112f, 0.024268f, 0.005207f, 0.017451f, 0.023646f, 0.073786f, -0.004279f, 0.033879f, 0.033330f, -0.054277f, 0.001695f, 0.000530f, 0.011350f, 0.024685f, -0.003747f, -0.012349f, 0.022218f, -0.002731f, -0.013258f, 0.003539f, -0.023357f, -0.004823f, 0.016160f, 0.003783f, -0.010353f, -0.051931f, 0.002129f, -0.023594f, -0.002537f, -0.019789f, 0.043408f, -0.014129f, 0.020906f, 0.027070f, -0.021472f, 0.032535f, 0.019964f, 0.000927f, -0.011833f, -0.019489f, 0.004480f, -0.001696f, -0.011959f, -0.001447f, 0.021405f, -0.016300f, 0.009064f, -0.005537f, 0.015335f, -0.040968f, 0.124385f, 0.032842f, -0.044538f, 0.004966f, -0.058491f, -0.007677f, 0.020514f, -0.024300f, -0.031088f, -0.034674f, -0.013141f, 0.013319f, -0.007657f, -0.011155f, 0.015798f, 0.009095f, 0.021414f, -0.022132f, -0.013889f, 0.015920f, -0.005742f, 0.002821f, -0.032335f, 0.021903f, -0.037853f, 0.018133f, 0.012481f, -0.008187f, -0.001712f, 0.001353f, -0.021985f, 0.003650f, 0.004455f, -0.017550f, 0.031617f, -0.017064f, 0.007630f, + 0.000132f, 0.001067f, 0.015950f, -0.015649f, -0.024320f, -0.007333f, 0.036519f, -0.027179f, 0.017861f, -0.049803f, -0.029649f, 0.009395f, -0.010820f, -0.000842f, -0.003351f, -0.030009f, 0.031710f, 0.025325f, 0.002246f, -0.021991f, -0.001157f, -0.013399f, 0.006466f, -0.016708f, -0.000605f, -0.016042f, 0.011891f, -0.004480f, 0.003038f, 0.040182f, -0.034138f, -0.002978f, 0.005957f, 0.002390f, -0.007479f, 0.000889f, -0.016250f, 0.000854f, -0.013639f, 0.008215f, 0.015786f, -0.024456f, -0.020354f, 0.011606f, 0.001405f, -0.005854f, -0.019409f, 0.008256f, 0.002461f, -0.000898f, -0.004515f, 0.000097f, -0.004564f, 0.013364f, -0.009088f, -0.002567f, 0.006110f, -0.004593f, -0.000875f, 0.010687f, -0.007364f, -0.004824f, -0.002927f, 0.002205f, 0.010961f, -0.003885f, -0.012694f, 0.000663f, -0.008240f, 0.028878f, -0.011882f, 0.003466f, 0.006436f, -0.007461f, 0.022923f, -0.003422f, -0.020236f, 0.007083f, -0.011648f, 0.014146f, 0.006804f, -0.003287f, -0.001435f, -0.005436f, -0.005680f, 0.013962f, -0.009537f, -0.004372f, -0.001748f, -0.012430f, 0.015594f, -0.060172f, -0.087621f, 0.060893f, 0.282840f, 0.123132f, + 0.129914f, -0.001381f, -0.260790f, -0.189684f, -0.097875f, -0.206488f, 0.100491f, 0.122316f, 0.064375f, 0.265779f, 0.120253f, -0.012105f, 0.088811f, -0.172879f, -0.219255f, -0.125968f, -0.153463f, -0.033727f, 0.119487f, 0.121346f, 0.051513f, 0.204225f, 0.102088f, -0.014777f, 0.098943f, -0.091172f, -0.155088f, -0.089720f, -0.116571f, -0.184151f, 0.068046f, -0.002098f, -0.065514f, 0.197255f, 0.119478f, 0.066537f, 0.202834f, 0.048483f, -0.102443f, 0.099254f, -0.146235f, -0.167590f, -0.033860f, -0.176242f, -0.178039f, 0.070129f, -0.029181f, 0.042729f, 0.225228f, 0.153678f, 0.160674f, 0.150919f, 0.018661f, -0.085183f, -0.097734f, -0.164462f, -0.215033f, -0.113286f, -0.061089f, -0.044908f, 0.082482f, 0.127861f, 0.120654f, 0.170152f, 0.154236f, -0.024092f, -0.026995f, -0.028018f, -0.157912f, -0.047747f, -0.077678f, -0.117823f, 0.026467f, 0.047874f, 0.007972f, 0.109204f, 0.049030f, 0.000697f, 0.068730f, -0.053072f, -0.057988f, 0.001310f, -0.037653f, -0.012188f, 0.028743f, -0.006191f, 0.031888f, 0.042183f, -0.023290f, 0.033125f, 0.013692f, -0.051603f, 0.004951f, -0.024753f, -0.097395f, -0.001654f, + -0.024709f, -0.041850f, 0.094136f, 0.027931f, 0.035382f, 0.123296f, 0.049026f, 0.036011f, 0.027223f, -0.061517f, -0.089613f, -0.083305f, -0.139510f, -0.114307f, -0.050823f, 0.004563f, 0.062713f, 0.143266f, 0.151895f, 0.139317f, 0.123557f, 0.076145f, -0.030526f, -0.087747f, -0.174701f, -0.221408f, -0.170898f, -0.102706f, -0.036302f, 0.092897f, 0.172227f, 0.197958f, 0.202933f, 0.097725f, -0.024475f, -0.067145f, -0.082511f, -0.106414f, -0.076913f, -0.079025f, -0.063943f, -0.009501f, 0.019135f, 0.031273f, 0.053686f, 0.057702f, 0.052809f, 0.048153f, 0.026121f, 0.006821f, -0.008222f, -0.027396f, -0.042600f, -0.042138f, -0.036142f, -0.025954f, -0.014910f, 0.005063f, 0.016574f, 0.022947f, 0.023818f, 0.022916f, 0.014758f, 0.008920f, -0.000088f, -0.000836f, -0.004109f, -0.005964f, -0.008774f, -0.004591f, -0.007030f, -0.007801f, -0.007523f, -0.004964f, -0.010693f, -0.004424f, 0.000123f, 0.005479f, 0.012290f, 0.016898f, 0.011297f, 0.015242f, 0.009338f, 0.002906f, -0.005278f, -0.011823f, -0.018743f, -0.016311f, -0.016325f, -0.007578f, -0.000957f, 0.008011f, 0.009614f, 0.014415f, 0.011902f, 0.009805f, + 0.003545f, 0.001671f, -0.004605f, -0.004449f, -0.007353f, -0.006265f, -0.005689f, -0.001432f, -0.002771f, 0.001502f, -0.000441f, 0.002331f, 0.001719f, 0.001714f, -0.000629f, 0.003726f, 0.001747f, 0.004256f, 0.001166f, 0.001794f, 0.000062f, 0.000223f, -0.004193f, -0.002672f, -0.005281f, -0.002857f, -0.003155f, 0.000163f, -0.000369f, 0.003314f, 0.001792f, 0.004026f, 0.001783f, 0.002802f, -0.000164f, 0.001123f, -0.001660f, -0.000201f, -0.002298f, -0.000082f, -0.001947f, 0.000496f, -0.001194f} + }, + { + {0.009029f, 0.005082f, -0.008051f, -0.001926f, -0.002933f, -0.000331f, 0.012234f, 0.000627f, -0.005135f, 0.006341f, 0.001376f, 0.000585f, 0.002209f, 0.001277f, 0.000178f, 0.009081f, 0.005228f, -0.006263f, -0.002318f, -0.000781f, -0.002107f, 0.002497f, 0.003975f, 0.002555f, -0.002584f, -0.004025f, 0.001590f, -0.008039f, -0.003555f, 0.005916f, 0.000595f, 0.004750f, 0.002535f, -0.003957f, 0.003015f, -0.000017f, -0.003363f, 0.008335f, -0.005554f, -0.002713f, 0.001142f, 0.002822f, -0.003776f, -0.001080f, -0.005452f, -0.010999f, 0.010294f, -0.002120f, -0.005631f, 0.000533f, 0.009469f, -0.000060f, 0.003706f, -0.004742f, -0.002663f, -0.001997f, 0.002959f, -0.003765f, 0.007587f, 0.001118f, 0.006853f, -0.009917f, 0.004236f, -0.002629f, 0.001717f, 0.004113f, -0.001628f, -0.001167f, -0.007206f, -0.000019f, 0.004004f, 0.000823f, -0.001957f, -0.000413f, 0.003572f, -0.001923f, -0.001868f, 0.005448f, -0.002447f, 0.001682f, -0.000979f, -0.000401f, -0.006722f, -0.002862f, -0.001782f, 0.002408f, -0.000438f, -0.003099f, -0.000452f, -0.000688f, -0.001840f, 0.001736f, -0.002215f, 0.000079f, 0.000581f, 0.001090f, + 0.001912f, -0.000879f, -0.001577f, 0.001657f, 0.000416f, -0.001318f, 0.000294f, 0.002874f, -0.000330f, -0.000358f, 0.001246f, 0.000029f, 0.000461f, 0.000405f, -0.000836f, -0.001670f, -0.000850f, 0.001187f, -0.000235f, 0.000068f, 0.000683f, -0.000930f, 0.000884f, -0.000056f, -0.000459f, 0.003153f, 0.025708f, 0.008768f, -0.001999f, 0.006918f, 0.000389f, 0.012634f, 0.007994f, -0.001811f, 0.006546f, 0.011341f, 0.014912f, -0.008816f, -0.008561f, 0.003622f, -0.003434f, -0.002908f, 0.010673f, 0.008564f, 0.008224f, 0.005813f, 0.001135f, -0.000370f, -0.003681f, 0.004026f, 0.002869f, 0.013520f, 0.001405f, -0.000328f, -0.005961f, 0.002788f, 0.004003f, -0.000806f, -0.001814f, -0.002154f, 0.003709f, -0.000572f, -0.002151f, -0.004998f, 0.005298f, -0.001801f, -0.001748f, 0.007450f, 0.010653f, -0.002773f, -0.001268f, 0.006105f, 0.005528f, 0.009694f, 0.006061f, 0.002639f, 0.001035f, 0.008248f, 0.004721f, -0.011456f, 0.000046f, 0.003469f, -0.006547f, 0.000135f, 0.001110f, -0.008183f, 0.004182f, -0.003992f, 0.006142f, -0.001354f, -0.001021f, 0.003250f, 0.001091f, -0.005658f, -0.000468f, 0.003083f, + -0.001070f, -0.001429f, -0.001597f, 0.000568f, 0.006535f, 0.001109f, -0.006513f, -0.001596f, 0.001573f, -0.001993f, -0.000799f, 0.009577f, -0.001914f, 0.001128f, -0.001094f, -0.002501f, 0.002209f, 0.003536f, -0.000894f, 0.001584f, 0.001786f, -0.001825f, 0.000884f, 0.001558f, 0.000409f, -0.001229f, -0.003343f, -0.001095f, -0.001998f, -0.000991f, -0.000211f, 0.001027f, -0.000592f, 0.001244f, 0.000742f, -0.000340f, 0.008869f, -0.000679f, -0.016783f, -0.007792f, -0.003267f, -0.003616f, -0.009142f, -0.008371f, -0.005278f, 0.009101f, -0.010000f, -0.004650f, -0.004757f, 0.001841f, 0.015147f, -0.002264f, -0.001217f, 0.003720f, 0.008663f, -0.013256f, -0.002178f, 0.002720f, -0.005871f, 0.004697f, 0.007404f, -0.008169f, -0.000519f, 0.001067f, -0.004771f, -0.012030f, 0.002082f, -0.005059f, 0.001619f, -0.004657f, 0.006879f, -0.008302f, -0.007775f, -0.019100f, -0.005165f, 0.006585f, -0.001080f, -0.007321f, -0.003627f, -0.000911f, -0.007701f, 0.000400f, -0.001309f, 0.005294f, 0.004163f, -0.001967f, 0.000226f, -0.001944f, -0.008129f, 0.009923f, 0.001713f, 0.006711f, -0.002473f, 0.000036f, 0.001729f, 0.002911f, + 0.007663f, -0.002448f, -0.001868f, 0.002282f, -0.000230f, 0.008393f, 0.004465f, -0.007233f, -0.002890f, -0.001795f, -0.011486f, -0.001276f, -0.001098f, 0.006837f, -0.004411f, 0.006232f, 0.001054f, -0.000205f, -0.000653f, -0.001082f, -0.001253f, 0.001340f, -0.004645f, 0.002164f, -0.002685f, 0.002351f, 0.001978f, 0.000914f, 0.000557f, 0.006695f, 0.004886f, -0.001213f, 0.006065f, -0.000812f, -0.002066f, -0.001917f, 0.001173f, -0.000420f, 0.004145f, -0.001061f, 0.002581f, 0.002127f, -0.000389f, 0.001786f, -0.000021f, 0.001870f, 0.001814f, 0.000554f, 0.000610f, 0.002024f, 0.001318f, -0.002727f, -0.001532f, -0.000271f, 0.003359f, 0.003784f, -0.000011f, -0.000380f, 0.002021f, 0.000037f, -0.001279f, -0.036950f, -0.011498f, -0.003317f, -0.002928f, -0.003142f, 0.014293f, -0.013199f, 0.006373f, -0.003125f, 0.002940f, -0.003813f, -0.003007f, -0.010639f, 0.001777f, -0.003916f, 0.000839f, -0.015418f, 0.000345f, -0.001628f, -0.002717f, -0.000306f, 0.002919f, 0.002272f, -0.001425f, -0.001108f, -0.006131f, 0.001846f, -0.004919f, 0.003197f, 0.000018f, 0.002722f, 0.009616f, -0.002567f, -0.010972f, -0.004757f, + -0.012853f, 0.001727f, 0.002338f, -0.001222f, 0.002246f, -0.004552f, 0.004328f, 0.002162f, -0.005688f, 0.000437f, -0.015461f, -0.003354f, -0.010338f, 0.005609f, 0.010243f, -0.009070f, -0.000697f, 0.002880f, 0.001578f, -0.014816f, 0.002470f, 0.007534f, -0.007081f, -0.003429f, -0.016840f, 0.005663f, -0.002432f, 0.006909f, 0.012481f, 0.007060f, -0.010028f, 0.002073f, 0.002373f, 0.000499f, -0.011152f, 0.002829f, -0.004755f, 0.007375f, -0.003003f, -0.000410f, 0.003484f, 0.002979f, 0.008775f, 0.009936f, 0.006827f, -0.000554f, 0.002523f, 0.005901f, 0.003005f, -0.005930f, -0.001215f, -0.003970f, -0.003948f, 0.001753f, -0.000173f, 0.000919f, 0.000094f, -0.001212f, -0.000333f, 0.003553f, -0.001185f, -0.001220f, 0.000101f, -0.001059f, -0.002646f, 0.003220f, 0.000124f, 0.001506f, 0.003949f, -0.000529f, 0.000438f, -0.003146f, 0.002003f, 0.001344f, 0.000318f, -0.003162f, 0.001032f, 0.000009f, 0.002090f, -0.022900f, 0.002586f, 0.004018f, -0.008112f, -0.001081f, 0.022396f, 0.017274f, 0.009485f, -0.002563f, -0.003979f, 0.011040f, 0.007041f, 0.003489f, 0.004282f, -0.009029f, 0.003141f, 0.000796f, + 0.010573f, -0.010091f, -0.004505f, -0.001985f, 0.001397f, -0.002124f, -0.011486f, -0.007914f, -0.008061f, -0.009692f, 0.005402f, 0.006373f, 0.004224f, 0.002784f, 0.000287f, 0.002717f, -0.001375f, -0.001328f, 0.000812f, -0.003578f, -0.000921f, 0.004984f, 0.004031f, -0.007942f, -0.008686f, -0.000903f, -0.008712f, 0.005177f, -0.002588f, -0.014955f, 0.001879f, 0.007469f, 0.010796f, 0.007320f, 0.000502f, 0.006910f, -0.010522f, -0.003505f, -0.004651f, -0.000841f, 0.000836f, 0.004658f, -0.003566f, -0.009819f, 0.011922f, -0.010842f, -0.005053f, 0.007210f, 0.017198f, 0.003934f, 0.003476f, -0.016815f, 0.018162f, 0.002046f, 0.012687f, 0.019277f, -0.004186f, 0.001950f, 0.002357f, -0.008061f, 0.016161f, 0.003637f, -0.005170f, 0.004307f, -0.002150f, 0.007799f, -0.013116f, -0.007174f, -0.013404f, -0.002755f, -0.005891f, 0.005278f, -0.003327f, 0.002166f, -0.006232f, -0.001761f, -0.001138f, -0.004206f, -0.000177f, -0.001673f, 0.001757f, -0.000442f, -0.001670f, -0.001086f, -0.000702f, 0.003043f, 0.000960f, -0.002587f, -0.005399f, 0.002919f, 0.003148f, 0.000401f, 0.000093f, -0.000252f, -0.002183f, 0.000808f, + -0.001429f, 0.003168f, 0.000722f, 0.001709f, -0.001816f, -0.002383f, -0.004266f, 0.002360f, 0.034444f, 0.024410f, -0.008754f, -0.012585f, 0.019093f, 0.012592f, 0.020103f, 0.029731f, -0.015009f, 0.010379f, 0.004896f, 0.008717f, 0.003820f, 0.005287f, 0.012218f, 0.003172f, 0.012480f, 0.000538f, -0.008029f, 0.003489f, -0.002610f, 0.004350f, -0.001514f, 0.023124f, 0.003860f, 0.005199f, 0.003094f, 0.001042f, 0.008026f, 0.003553f, 0.000452f, -0.001344f, 0.005742f, -0.004312f, 0.010985f, -0.008442f, 0.013231f, -0.006122f, 0.007998f, 0.004330f, 0.004885f, 0.004025f, 0.019437f, 0.015006f, 0.000925f, -0.004046f, -0.010551f, 0.011665f, -0.012858f, 0.003370f, -0.005625f, 0.005815f, 0.012171f, 0.001612f, -0.020382f, -0.016392f, 0.001708f, -0.010141f, -0.011160f, -0.006286f, -0.012867f, 0.004742f, 0.022306f, 0.011347f, -0.008214f, 0.000672f, 0.002575f, -0.005688f, -0.006573f, -0.000929f, 0.010956f, 0.012342f, -0.012923f, 0.006287f, 0.014301f, 0.003010f, 0.004707f, 0.007067f, 0.011145f, -0.001754f, -0.007606f, 0.003130f, -0.003274f, -0.000481f, -0.007297f, 0.006918f, 0.010538f, 0.001784f, + 0.001890f, 0.001631f, -0.007385f, -0.000897f, -0.000122f, -0.000647f, 0.000751f, -0.000986f, 0.001219f, 0.001085f, 0.003615f, 0.000560f, -0.000059f, 0.000517f, 0.002326f, 0.004167f, 0.002084f, 0.004404f, 0.002312f, 0.000961f, 0.001248f, -0.000711f, -0.006872f, -0.006946f, 0.001459f, 0.005441f, 0.001356f, -0.001375f, 0.001291f, -0.000728f, 0.003328f, -0.002453f, -0.002428f, -0.004272f, 0.001962f, 0.015294f, 0.002806f, 0.022099f, -0.002031f, -0.000178f, -0.007401f, -0.005814f, 0.007291f, 0.016740f, -0.004954f, 0.004498f, 0.001099f, 0.018127f, 0.007374f, -0.008323f, -0.007853f, 0.001261f, 0.003693f, 0.016477f, 0.015987f, 0.024556f, 0.004359f, 0.006889f, -0.004385f, 0.010056f, 0.011259f, -0.004330f, -0.005706f, 0.008870f, -0.006836f, -0.009303f, 0.008726f, 0.002731f, -0.010941f, -0.013243f, 0.020165f, 0.010224f, -0.000760f, 0.012987f, 0.002448f, -0.008999f, 0.019150f, -0.004437f, 0.000515f, -0.000400f, 0.004920f, -0.006936f, 0.004920f, -0.006948f, 0.004788f, -0.006450f, 0.005821f, -0.005264f, 0.007945f, -0.006655f, -0.006890f, 0.017967f, -0.022484f, 0.001323f, 0.002599f, -0.007640f, + 0.001439f, -0.025134f, -0.012444f, 0.012103f, -0.010107f, 0.007459f, -0.002739f, 0.005052f, 0.002132f, 0.004339f, 0.002595f, -0.011366f, 0.006088f, -0.006583f, -0.000820f, -0.014457f, -0.007922f, -0.003577f, -0.003526f, 0.004191f, 0.013624f, 0.007973f, -0.011077f, 0.004308f, 0.002100f, 0.000150f, -0.005352f, 0.000804f, -0.001057f, 0.002737f, 0.001224f, -0.002750f, -0.003783f, -0.001414f, -0.001081f, -0.002078f, 0.007871f, 0.001513f, -0.003069f, -0.001658f, 0.001857f, -0.003205f, 0.000306f, 0.001634f, 0.000074f, 0.000476f, -0.008387f, -0.003344f, -0.002112f, 0.001304f, -0.002352f, -0.000296f, 0.005265f, -0.000424f, -0.001429f, -0.001512f, 0.000541f, 0.001674f, -0.017952f, -0.015335f, -0.000127f, 0.006755f, 0.012466f, -0.014520f, 0.004136f, -0.013041f, 0.010770f, 0.008373f, -0.018089f, -0.003663f, 0.001875f, -0.021064f, -0.012085f, 0.012943f, -0.001728f, -0.000843f, 0.002986f, -0.001260f, -0.022193f, 0.020309f, 0.001244f, -0.014264f, -0.007037f, 0.002763f, -0.001915f, -0.013709f, -0.004187f, -0.007850f, 0.002232f, -0.000622f, -0.004448f, 0.004486f, -0.019245f, -0.008462f, 0.004904f, 0.025160f, + -0.004250f, -0.014681f, -0.010483f, -0.008147f, 0.017028f, -0.018132f, -0.003691f, -0.001200f, -0.019497f, -0.024169f, 0.005911f, -0.016734f, -0.002721f, 0.002572f, 0.012726f, 0.007207f, 0.000998f, 0.002832f, 0.015206f, -0.006526f, -0.004811f, 0.022677f, -0.015153f, 0.011842f, -0.005230f, -0.005589f, -0.002347f, -0.002668f, 0.024092f, 0.000624f, 0.009342f, -0.024779f, -0.018068f, 0.000666f, -0.003643f, 0.027822f, 0.000857f, 0.018990f, 0.007932f, 0.023732f, 0.014322f, -0.003526f, -0.016515f, -0.006134f, 0.011038f, 0.004888f, 0.007442f, -0.009086f, -0.010346f, -0.002797f, -0.003509f, 0.004959f, -0.002583f, -0.006609f, -0.001246f, -0.001571f, -0.000105f, -0.000771f, 0.000854f, -0.002673f, -0.003725f, 0.004563f, -0.000372f, 0.000329f, -0.001311f, -0.001965f, -0.001616f, 0.001268f, 0.003802f, -0.004006f, 0.000863f, -0.002446f, -0.003724f, 0.002635f, -0.001145f, -0.003394f, -0.004056f, -0.000752f, 0.003708f, 0.000417f, 0.000428f, 0.001445f, 0.006737f, -0.005724f, -0.004835f, -0.002907f, 0.000493f, 0.002759f, -0.029856f, 0.002962f, -0.003066f, 0.020433f, 0.002209f, -0.021466f, 0.025574f, 0.008371f, + -0.015261f, -0.033035f, -0.013958f, 0.032801f, 0.001463f, -0.004078f, -0.005643f, 0.003444f, 0.000911f, 0.010162f, 0.005173f, 0.010880f, -0.002522f, 0.019376f, -0.010149f, -0.022697f, 0.000784f, 0.001118f, -0.005603f, -0.000767f, 0.008343f, -0.005786f, -0.003671f, -0.001925f, 0.018008f, 0.014187f, 0.007120f, -0.001287f, -0.024983f, -0.000422f, -0.001495f, -0.000979f, -0.004323f, -0.000347f, -0.011052f, -0.020162f, -0.003376f, 0.013957f, 0.013316f, -0.005040f, 0.014321f, -0.004641f, 0.006063f, 0.016022f, 0.015063f, -0.033695f, 0.011353f, 0.012218f, 0.004828f, -0.008183f, -0.029813f, 0.017991f, 0.010372f, 0.005777f, -0.010782f, -0.005864f, -0.012182f, 0.006667f, -0.013492f, -0.002428f, 0.000005f, 0.012109f, -0.007727f, 0.006180f, 0.003107f, -0.021609f, -0.003217f, -0.014437f, 0.023474f, 0.011023f, -0.028098f, -0.005887f, 0.021838f, 0.011022f, -0.011715f, -0.005713f, -0.012917f, -0.004267f, 0.006355f, -0.003859f, -0.001769f, -0.004830f, -0.006330f, -0.010590f, 0.001813f, 0.000838f, -0.003645f, -0.001080f, 0.005189f, 0.003658f, -0.006933f, -0.002378f, 0.004672f, -0.001312f, 0.003515f, -0.004424f, + -0.003311f, -0.000878f, 0.000745f, 0.005662f, -0.006285f, -0.004312f, 0.002795f, -0.006879f, -0.000791f, -0.004864f, 0.002678f, -0.003872f, 0.006319f, -0.002360f, -0.001434f, -0.003425f, 0.003931f, 0.002782f, 0.007228f, 0.002112f, 0.018601f, 0.022604f, 0.023271f, 0.017725f, 0.022821f, -0.028667f, -0.018665f, -0.009917f, -0.009233f, -0.013745f, -0.010446f, -0.023009f, -0.007732f, 0.001513f, 0.013759f, -0.000046f, -0.013086f, -0.000647f, 0.013753f, 0.000639f, -0.011281f, -0.005352f, 0.031204f, 0.002997f, 0.011776f, 0.003566f, 0.012940f, 0.002599f, 0.004250f, -0.019175f, 0.010758f, 0.000695f, 0.004498f, -0.020095f, 0.007020f, -0.030851f, 0.000060f, -0.009772f, 0.007717f, -0.002842f, -0.022450f, -0.000564f, -0.022344f, 0.004091f, -0.018553f, 0.016993f, -0.009576f, 0.026725f, 0.000913f, -0.000508f, 0.013555f, 0.002883f, -0.004156f, -0.003946f, 0.005537f, -0.009150f, 0.006400f, 0.016492f, 0.008529f, -0.012282f, -0.006335f, 0.035359f, 0.002802f, 0.028205f, -0.026052f, -0.005499f, -0.002670f, 0.020522f, -0.022714f, 0.003228f, 0.011040f, -0.022691f, 0.015965f, -0.014248f, 0.004267f, 0.022073f, + 0.002503f, 0.012440f, 0.006005f, 0.028844f, 0.012608f, -0.011948f, -0.009290f, -0.011509f, 0.001874f, 0.001116f, 0.012260f, -0.007195f, -0.001236f, 0.007932f, 0.000697f, 0.006123f, 0.008449f, 0.001174f, -0.006539f, 0.008005f, 0.006269f, -0.000755f, 0.002632f, 0.002704f, -0.002794f, -0.002369f, -0.009312f, 0.006351f, -0.004378f, -0.004220f, -0.001699f, -0.004895f, 0.004799f, -0.003325f, -0.000976f, -0.005244f, -0.001131f, -0.001162f, 0.006833f, 0.004787f, -0.000053f, -0.001042f, -0.000227f, 0.003813f, 0.004741f, 0.004045f, 0.008736f, -0.000953f, -0.003171f, -0.008401f, -0.028852f, 0.004576f, 0.027637f, 0.021126f, 0.022545f, -0.007300f, -0.006086f, 0.005980f, -0.004178f, 0.028482f, 0.009223f, 0.013721f, 0.023553f, -0.001429f, 0.008693f, -0.015844f, 0.023468f, 0.012127f, -0.006147f, -0.014213f, -0.013685f, 0.016186f, -0.027645f, 0.011036f, 0.015639f, -0.011169f, -0.015502f, -0.008448f, 0.014585f, 0.005825f, -0.005725f, -0.009756f, 0.000048f, -0.016625f, -0.025599f, 0.004937f, -0.024572f, -0.036112f, -0.004714f, 0.001707f, 0.036766f, -0.015620f, -0.012704f, 0.016725f, 0.027063f, 0.027504f, + 0.014377f, -0.001364f, 0.006199f, -0.011444f, 0.001994f, -0.012009f, 0.030289f, 0.027099f, 0.017286f, -0.000953f, -0.031167f, 0.000088f, -0.026629f, 0.029558f, 0.022665f, 0.014407f, -0.022111f, 0.018448f, 0.010275f, 0.012852f, -0.004190f, -0.018414f, -0.013644f, -0.014681f, 0.005013f, -0.020743f, -0.038506f, 0.007793f, 0.026024f, 0.014029f, 0.025554f, -0.007574f, -0.007094f, 0.026087f, 0.008580f, 0.003710f, 0.017159f, 0.005902f, 0.000470f, 0.015022f, 0.009294f, -0.001167f, 0.006745f, 0.006631f, 0.003878f, -0.004701f, -0.008501f, -0.011020f, 0.003000f, 0.007437f, 0.004204f, 0.015142f, 0.000391f, 0.010848f, -0.003351f, 0.004565f, 0.008450f, 0.001357f, -0.003846f, -0.002111f, -0.012378f, -0.010452f, 0.003775f, 0.002896f, 0.004984f, 0.013172f, 0.001965f, 0.010062f, -0.003677f, -0.001964f, 0.001764f, -0.009310f, -0.007420f, -0.002559f, -0.007960f, 0.004015f, -0.002583f, 0.003293f, 0.007326f, 0.010377f, 0.014670f, 0.023179f, 0.050125f, 0.022155f, 0.017538f, 0.016197f, -0.030928f, -0.004959f, -0.011275f, 0.039508f, -0.040181f, -0.038259f, 0.010994f, 0.025753f, -0.000674f, 0.031516f, + 0.028727f, -0.001471f, 0.011084f, -0.019072f, -0.013642f, 0.029953f, -0.011809f, 0.020548f, 0.007349f, -0.013478f, -0.006947f, -0.006035f, -0.006589f, -0.014058f, 0.011710f, 0.012362f, 0.010460f, 0.000865f, -0.015576f, -0.020180f, 0.026013f, -0.025668f, 0.020150f, 0.001743f, -0.031467f, 0.015761f, 0.030057f, -0.000726f, -0.008122f, -0.003926f, 0.002472f, 0.001611f, 0.020517f, -0.001197f, -0.015366f, -0.006543f, 0.017462f, -0.031882f, 0.007700f, -0.005447f, 0.025857f, 0.027124f, 0.018223f, 0.021204f, 0.028109f, 0.020054f, 0.007370f, -0.018376f, -0.020542f, 0.009819f, 0.013729f, -0.001114f, 0.011897f, 0.016058f, 0.042825f, -0.024277f, 0.027110f, -0.016179f, -0.010227f, 0.029316f, 0.004520f, -0.017710f, -0.015293f, -0.016350f, -0.026366f, -0.009142f, -0.012871f, 0.021005f, 0.000554f, -0.017015f, 0.009291f, 0.005745f, -0.003567f, 0.009794f, -0.020095f, 0.013032f, 0.000900f, -0.002003f, -0.002123f, 0.011058f, 0.001973f, 0.002826f, 0.011707f, -0.004967f, 0.001950f, 0.008407f, -0.012848f, 0.008977f, 0.000568f, 0.003274f, -0.005719f, 0.007136f, -0.002530f, 0.000740f, 0.009997f, -0.000074f, + -0.002355f, 0.002428f, 0.006758f, 0.008355f, 0.014178f, 0.011408f, 0.004248f, -0.006654f, -0.005396f, -0.020209f, 0.004489f, -0.016849f, -0.004911f, -0.007399f, -0.006848f, 0.007823f, 0.003062f, -0.008102f, -0.033312f, -0.005956f, 0.019397f, -0.023933f, 0.000767f, -0.015061f, -0.026315f, 0.038276f, 0.032735f, 0.027356f, 0.012978f, 0.007124f, 0.010775f, 0.028098f, 0.015531f, 0.028806f, -0.010667f, 0.024126f, -0.018181f, 0.029221f, 0.039263f, 0.024608f, 0.019627f, 0.009984f, 0.020272f, 0.020412f, -0.006068f, 0.040627f, 0.009757f, -0.024520f, 0.011626f, -0.024825f, -0.017068f, -0.005097f, -0.038596f, 0.000651f, -0.008232f, -0.010477f, -0.018767f, -0.009770f, -0.005395f, -0.001217f, -0.003812f, 0.001663f, 0.001608f, -0.022165f, -0.014637f, 0.004578f, -0.011706f, 0.009188f, 0.038000f, -0.019175f, -0.001557f, -0.003624f, 0.001394f, -0.018181f, 0.009780f, -0.008740f, 0.029410f, 0.006251f, 0.017561f, 0.027504f, 0.004683f, -0.001838f, -0.018163f, -0.040412f, 0.005318f, 0.030064f, 0.021813f, -0.005700f, -0.026943f, 0.022678f, 0.002371f, 0.013658f, -0.034491f, -0.024756f, -0.022720f, -0.034192f, + -0.021187f, -0.025017f, 0.011627f, 0.003692f, 0.008727f, 0.011405f, 0.015758f, -0.007724f, 0.016039f, 0.018262f, 0.000551f, 0.009817f, -0.005889f, -0.012132f, -0.012513f, -0.013134f, -0.005283f, -0.009576f, -0.000611f, 0.002886f, -0.001292f, 0.000866f, 0.002408f, -0.011111f, -0.010301f, -0.017591f, -0.006055f, -0.004080f, -0.009813f, 0.003869f, 0.001433f, -0.005196f, -0.015938f, -0.007319f, -0.005899f, -0.004103f, 0.013250f, 0.004061f, -0.005823f, -0.007335f, -0.002700f, -0.019090f, 0.005187f, -0.003884f, 0.009844f, 0.001136f, -0.006035f, -0.011250f, 0.011727f, -0.007711f, 0.016782f, -0.057186f, -0.036610f, -0.017420f, 0.040849f, 0.029745f, -0.022152f, 0.025484f, 0.023000f, 0.019609f, 0.019202f, -0.019203f, 0.001934f, 0.011061f, -0.019101f, -0.057645f, -0.010547f, -0.016022f, -0.035355f, 0.003155f, -0.012087f, -0.009083f, 0.010763f, 0.006379f, -0.007902f, 0.001645f, 0.026958f, 0.028826f, -0.053159f, 0.012568f, 0.002652f, 0.024506f, 0.008310f, 0.001271f, -0.033135f, 0.010023f, -0.008544f, -0.009268f, -0.022813f, -0.017005f, 0.042484f, -0.019411f, -0.000838f, 0.004971f, -0.011325f, 0.046958f, + 0.022269f, -0.021068f, -0.012757f, -0.036950f, -0.005399f, 0.035075f, 0.010247f, 0.010516f, -0.011648f, 0.021366f, -0.005158f, -0.009426f, 0.019708f, -0.011878f, 0.032735f, -0.007870f, 0.024362f, -0.050013f, -0.016983f, 0.028396f, 0.006923f, -0.004759f, 0.007934f, -0.055335f, -0.026184f, 0.008198f, -0.022113f, 0.008236f, 0.002138f, 0.005928f, 0.033728f, -0.012867f, 0.013548f, -0.002892f, -0.027597f, -0.004998f, 0.020712f, 0.029909f, -0.001072f, -0.012871f, -0.023415f, 0.000395f, -0.032649f, -0.010847f, 0.002708f, 0.038020f, 0.034052f, 0.004392f, 0.014241f, 0.004016f, -0.005837f, 0.018683f, 0.014214f, -0.007822f, 0.015611f, 0.011581f, 0.006182f, -0.013494f, -0.001047f, -0.007153f, 0.011353f, 0.007697f, 0.010083f, -0.001182f, -0.015738f, 0.014358f, 0.000533f, -0.007615f, -0.015334f, -0.001086f, -0.001372f, -0.014708f, 0.009914f, -0.010799f, -0.016725f, 0.018341f, -0.007638f, -0.006722f, -0.008530f, 0.003783f, 0.002514f, 0.014605f, 0.003147f, -0.002965f, 0.006065f, 0.008873f, -0.016951f, 0.004208f, 0.004610f, -0.006894f, 0.010372f, -0.024905f, -0.071594f, -0.006067f, -0.008645f, -0.007752f, + 0.010950f, -0.028563f, 0.056091f, -0.010243f, 0.002460f, 0.061894f, -0.072886f, -0.007577f, -0.014299f, -0.006945f, -0.083481f, 0.004655f, -0.012975f, -0.016130f, 0.028224f, -0.028646f, 0.004320f, 0.005471f, 0.013411f, -0.002623f, -0.030490f, 0.020805f, -0.020059f, 0.043363f, -0.007560f, -0.049152f, -0.003725f, -0.001652f, -0.024914f, -0.049520f, 0.022134f, 0.025226f, -0.041583f, 0.033874f, -0.037621f, -0.029157f, -0.018069f, 0.003285f, 0.002887f, 0.005600f, 0.023816f, -0.004528f, -0.022970f, -0.053986f, 0.010872f, -0.072985f, -0.038946f, -0.025079f, -0.058662f, -0.034628f, -0.017025f, -0.003565f, -0.027629f, 0.041851f, 0.042861f, 0.009595f, -0.013136f, 0.047548f, 0.021255f, -0.005382f, -0.010890f, 0.034253f, 0.025051f, -0.011623f, 0.045063f, -0.037923f, -0.019650f, 0.049531f, 0.023089f, 0.069456f, -0.038075f, -0.042577f, 0.010864f, -0.032356f, 0.034761f, 0.003842f, 0.011989f, 0.066046f, -0.036521f, -0.038866f, -0.014507f, 0.013814f, 0.014898f, 0.016727f, 0.016739f, 0.019231f, -0.020435f, 0.008168f, 0.002984f, -0.001303f, -0.002466f, -0.013457f, -0.010956f, 0.019396f, -0.020928f, -0.000887f, + 0.004116f, -0.009899f, 0.002508f, -0.010151f, -0.000834f, -0.000936f, 0.004244f, -0.016489f, 0.008430f, 0.021013f, 0.006084f, 0.005214f, 0.022926f, 0.017112f, -0.001686f, -0.021980f, 0.020267f, 0.005374f, -0.007757f, -0.016326f, 0.021043f, 0.003376f, 0.000591f, 0.013076f, 0.016297f, -0.020844f, 0.010872f, 0.007083f, -0.015159f, -0.006024f, -0.023521f, 0.015025f, -0.002862f, -0.026550f, -0.013260f, 0.006571f, 0.055724f, 0.031553f, -0.005148f, 0.075201f, -0.008678f, 0.030782f, -0.035576f, 0.043819f, 0.041455f, -0.003946f, -0.033277f, 0.003335f, 0.012022f, -0.018768f, 0.019661f, -0.027307f, -0.000452f, -0.008529f, -0.008915f, -0.031014f, -0.022554f, -0.014224f, -0.001902f, -0.010187f, -0.024230f, 0.035749f, 0.024655f, 0.006459f, -0.010072f, 0.005914f, 0.034600f, 0.016083f, 0.025421f, 0.015788f, -0.018960f, -0.029534f, 0.059175f, -0.007983f, -0.032375f, -0.013724f, -0.013916f, -0.007973f, 0.042822f, 0.001603f, -0.033035f, -0.012854f, -0.082096f, -0.020458f, -0.009637f, 0.050325f, 0.034907f, -0.100008f, -0.042983f, -0.024520f, -0.000521f, 0.004755f, -0.039841f, 0.029070f, 0.015669f, 0.025264f, + 0.050020f, -0.065702f, 0.064013f, 0.045714f, -0.020819f, -0.044215f, 0.002785f, -0.011232f, 0.017031f, 0.058019f, -0.030215f, -0.034072f, 0.047518f, -0.056263f, -0.062673f, -0.025522f, 0.006402f, -0.018243f, -0.068680f, -0.028071f, -0.022214f, 0.000747f, 0.003754f, -0.019972f, -0.001395f, 0.002635f, 0.000817f, 0.005518f, -0.043418f, -0.015592f, -0.014390f, 0.002447f, 0.012121f, -0.003576f, -0.013891f, -0.008442f, 0.004605f, 0.021785f, 0.023663f, -0.003669f, -0.020572f, -0.005729f, 0.030108f, 0.001402f, -0.007855f, 0.005888f, -0.040887f, -0.012434f, -0.019298f, 0.002296f, 0.007049f, -0.040057f, -0.040421f, 0.009656f, 0.035125f, -0.015520f, 0.022982f, 0.006670f, -0.011341f, -0.003735f, 0.009317f, 0.006617f, -0.003343f, 0.006568f, -0.001179f, 0.052281f, 0.007032f, 0.019668f, -0.040801f, -0.064409f, 0.093104f, 0.046653f, 0.004237f, 0.006143f, -0.020935f, -0.054775f, 0.019247f, -0.004220f, 0.047023f, 0.010564f, 0.017467f, 0.051595f, 0.028528f, -0.000520f, -0.005470f, 0.008779f, -0.031391f, -0.025770f, -0.033376f, -0.018568f, 0.030963f, -0.008386f, 0.001991f, 0.038767f, -0.006608f, 0.017063f, + -0.053686f, -0.048168f, -0.032710f, 0.028014f, 0.011396f, -0.001674f, 0.012826f, -0.016965f, -0.048266f, 0.061119f, -0.057893f, 0.026830f, 0.027593f, 0.021829f, 0.009730f, 0.037074f, -0.023777f, -0.059118f, 0.043863f, 0.124391f, -0.021856f, 0.060258f, -0.072249f, -0.038844f, 0.044733f, 0.026326f, -0.067075f, -0.018740f, -0.005622f, 0.058452f, -0.014453f, -0.006135f, -0.091222f, -0.058474f, -0.020929f, -0.066829f, 0.056067f, 0.059910f, 0.094269f, -0.083256f, 0.035909f, 0.010658f, -0.046378f, -0.002461f, -0.002175f, -0.096195f, 0.068787f, -0.028409f, 0.032488f, -0.009666f, 0.005371f, 0.130725f, -0.035231f, 0.045513f, 0.029929f, -0.031361f, 0.056887f, 0.000172f, -0.010941f, 0.003730f, 0.014688f, 0.037011f, 0.022507f, 0.014888f, -0.001281f, 0.035060f, -0.032603f, -0.015790f, 0.002757f, 0.008985f, 0.016157f, -0.008650f, 0.028107f, 0.004075f, 0.012491f, -0.005183f, 0.021295f, -0.001496f, -0.031204f, 0.018241f, -0.038334f, -0.022337f, -0.008917f, 0.016741f, -0.004101f, 0.019931f, 0.044824f, 0.069579f, 0.049963f, 0.014089f, 0.032133f, -0.018228f, 0.016332f, -0.000834f, -0.001432f, -0.002599f, + 0.006672f, -0.013997f, 0.019630f, -0.018684f, -0.082849f, -0.047408f, -0.001443f, -0.012867f, -0.027586f, 0.009822f, 0.027075f, 0.002502f, -0.029173f, -0.001757f, -0.027955f, 0.076171f, -0.023213f, 0.001480f, 0.058218f, -0.003528f, -0.059184f, -0.041631f, -0.040371f, -0.018271f, -0.021373f, 0.063417f, 0.006862f, 0.010237f, 0.032004f, -0.017721f, -0.017516f, -0.010966f, -0.017863f, -0.039104f, -0.008871f, 0.072738f, 0.023812f, 0.017091f, -0.048262f, 0.017640f, 0.004053f, -0.034813f, -0.003784f, -0.017571f, 0.079463f, -0.062907f, -0.053840f, -0.019312f, 0.010125f, -0.018915f, 0.002657f, 0.021141f, -0.040999f, -0.011321f, 0.067342f, -0.054314f, 0.009734f, -0.013788f, -0.032639f, -0.057588f, -0.043594f, 0.001895f, -0.079635f, -0.096801f, 0.023147f, 0.019557f, 0.015729f, -0.086518f, 0.066858f, 0.080734f, -0.027273f, -0.023662f, 0.005261f, -0.003588f, -0.018043f, -0.045049f, 0.032687f, 0.121951f, 0.031913f, -0.030393f, 0.000788f, 0.019192f, 0.040946f, 0.010835f, -0.072108f, -0.064672f, 0.070029f, -0.013571f, -0.028407f, -0.042310f, 0.014673f, 0.079657f, 0.024619f, -0.025432f, 0.014880f, -0.003281f, + -0.014065f, -0.007161f, -0.004124f, 0.035160f, 0.019676f, -0.012177f, -0.019408f, 0.015832f, 0.009406f, -0.003123f, -0.007964f, 0.012782f, -0.018784f, 0.011603f, 0.030729f, -0.002949f, -0.016835f, -0.005214f, -0.010809f, -0.018648f, -0.034196f, 0.004896f, 0.026249f, -0.017601f, -0.021551f, 0.010598f, -0.026924f, 0.000087f, -0.043848f, 0.021020f, 0.027424f, 0.069907f, -0.022226f, -0.009564f, -0.028929f, -0.029736f, 0.008425f, 0.015407f, 0.029127f, -0.003497f, -0.006278f, -0.029312f, 0.011812f, 0.007260f, 0.008814f, -0.008655f, -0.001830f, 0.018442f, 0.021344f, -0.026490f, -0.069712f, 0.019260f, 0.027306f, -0.103355f, 0.056631f, 0.002404f, -0.029404f, 0.009876f, 0.037738f, -0.053429f, 0.033013f, -0.049615f, 0.013421f, -0.002902f, -0.024964f, -0.013913f, -0.006740f, -0.036536f, 0.026182f, 0.022867f, -0.001041f, 0.012601f, 0.001612f, 0.020225f, 0.026434f, 0.025527f, 0.037902f, 0.032530f, -0.020126f, 0.005049f, -0.041324f, 0.043803f, -0.033879f, 0.010710f, -0.006523f, 0.008914f, 0.002154f, -0.031330f, 0.028480f, -0.015892f, -0.030258f, 0.063458f, -0.050793f, 0.015233f, -0.014646f, -0.025267f, + 0.025621f, -0.006634f, 0.007603f, 0.039531f, -0.047816f, 0.001912f, -0.058588f, -0.115452f, -0.002946f, 0.036755f, -0.013866f, 0.148340f, 0.030204f, -0.058009f, 0.016297f, -0.080921f, 0.028087f, 0.057837f, 0.068354f, -0.023540f, -0.013493f, -0.089964f, -0.103090f, -0.008713f, -0.064274f, 0.015184f, -0.004067f, -0.056138f, -0.013146f, -0.027822f, -0.061414f, 0.050262f, 0.098964f, -0.027828f, 0.006970f, 0.021302f, -0.026270f, 0.030571f, 0.039007f, -0.027167f, 0.004516f, 0.000039f, -0.049301f, 0.024555f, 0.004137f, 0.014902f, 0.018009f, -0.034885f, 0.013609f, -0.018540f, -0.027969f, -0.031717f, 0.026884f, -0.019709f, 0.011038f, -0.030665f, -0.011066f, -0.002156f, -0.037348f, 0.036483f, -0.023686f, 0.007241f, 0.011128f, -0.034848f, -0.005697f, 0.026738f, -0.003203f, 0.003748f, 0.005939f, -0.010231f, 0.016442f, 0.034537f, -0.004173f, 0.020032f, 0.023663f, -0.029643f, -0.056167f, 0.018922f, 0.007823f, 0.032351f, 0.038804f, -0.050811f, -0.049876f, 0.008668f, -0.014660f, 0.008832f, 0.016906f, 0.009208f, -0.073661f, 0.015198f, -0.005380f, -0.042906f, 0.019294f, -0.027855f, -0.018848f, -0.034631f, + 0.017641f, -0.037716f, 0.048288f, -0.005127f, 0.017860f, -0.011132f, 0.064868f, -0.017630f, 0.035610f, -0.000581f, 0.042460f, -0.011861f, -0.021495f, 0.013875f, -0.024323f, -0.025666f, 0.003450f, 0.048348f, 0.031055f, -0.032925f, 0.035123f, -0.024699f, -0.037852f, 0.010653f, 0.051675f, -0.019907f, -0.021120f, 0.027649f, 0.012369f, -0.025781f, 0.002842f, 0.035172f, -0.014717f, -0.033877f, 0.018400f, 0.014088f, 0.021579f, 0.039601f, 0.008264f, -0.023945f, -0.007914f, 0.087021f, 0.091400f, -0.025314f, -0.075787f, 0.058045f, -0.025376f, 0.016345f, 0.008186f, 0.097986f, 0.013425f, -0.050925f, -0.018645f, -0.012377f, 0.002710f, 0.015124f, 0.023613f, 0.031811f, -0.037896f, 0.012110f, 0.008562f, 0.056783f, -0.014223f, 0.039991f, 0.043038f, 0.023798f, 0.020504f, 0.012364f, 0.034265f, -0.032939f, 0.036876f, 0.046921f, 0.033852f, 0.005676f, -0.066600f, -0.009998f, -0.042965f, 0.001942f, 0.028792f, 0.009637f, -0.014706f, -0.023440f, -0.013723f, -0.003786f, -0.001727f, 0.012147f, -0.013822f, 0.003684f, -0.001466f, -0.010504f, 0.020246f, 0.007836f, -0.018206f, -0.008648f, -0.004697f, 0.024695f, + -0.000041f, 0.005001f, -0.023873f, -0.017145f, -0.031660f, -0.014970f, -0.001959f, -0.003092f, 0.000402f, -0.005606f, -0.028378f, 0.007218f, -0.009714f, -0.004741f, 0.004186f, -0.008012f, -0.000424f, -0.024669f, -0.005874f, 0.000933f, 0.000363f, 0.000424f, -0.006289f, -0.006295f, -0.002172f, -0.009843f, -0.013845f, 0.103264f, 0.043534f, -0.046759f, 0.011345f, -0.048846f, -0.026383f, -0.003433f, 0.017716f, -0.007875f, 0.037938f, -0.045182f, -0.001333f, 0.017701f, -0.001449f, 0.018412f, -0.002623f, 0.006403f, 0.004394f, -0.032404f, -0.010085f, 0.008406f, -0.030092f, -0.030459f, 0.002618f, 0.007732f, -0.021383f, 0.015268f, 0.014890f, -0.009123f, -0.015098f, -0.002503f, 0.003347f, -0.005389f, 0.012801f, 0.003194f, 0.010095f, -0.013392f, -0.005588f, 0.023561f, 0.000075f, 0.001143f, 0.011476f, -0.007706f, 0.012691f, -0.012135f, -0.022339f, -0.014616f, 0.023180f, -0.018448f, -0.013455f, 0.001367f, -0.018163f, -0.019742f, 0.028188f, -0.028059f, 0.044527f, 0.009694f, -0.019665f, 0.019420f, 0.003143f, -0.033020f, 0.002934f, -0.005954f, -0.005729f, 0.015603f, -0.000455f, -0.019395f, 0.037885f, -0.022744f, + -0.008760f, 0.019544f, 0.006345f, -0.008289f, 0.001022f, 0.006018f, -0.000581f, -0.001633f, -0.003865f, 0.008663f, 0.015767f, -0.000644f, -0.026177f, 0.018737f, -0.013479f, -0.002065f, 0.022484f, -0.001517f, -0.006822f, -0.000956f, -0.019346f, 0.009344f, 0.006755f, -0.002196f, 0.000472f, 0.007874f, -0.018838f, 0.001338f, -0.006428f, 0.001865f, 0.007852f, 0.001965f, -0.007985f, 0.018473f, -0.028109f, 0.003646f, 0.003367f, -0.002044f, 0.003525f, -0.004188f, -0.015855f, 0.017484f, -0.008098f, 0.012476f, 0.000248f, -0.002096f, 0.016556f, 0.006120f, -0.013789f, 0.005171f, -0.006934f, -0.006072f, 0.003209f, 0.010406f, 0.010683f, -0.004229f, -0.013613f, 0.006931f, -0.007731f, 0.009417f, -0.062757f, -0.074991f, 0.063208f, 0.257101f, 0.100290f, 0.118063f, 0.001386f, -0.240312f, -0.177345f, -0.092389f, -0.141370f, 0.063526f, 0.121329f, 0.050321f, 0.214655f, 0.121787f, -0.008308f, 0.050698f, -0.108865f, -0.218980f, -0.087692f, -0.152043f, -0.024564f, 0.105652f, 0.088618f, 0.080615f, 0.133699f, 0.082819f, 0.022487f, 0.036975f, -0.010215f, -0.155778f, -0.069164f, -0.055995f, -0.215727f, 0.040138f, + 0.028001f, -0.095522f, 0.154961f, 0.153767f, -0.005496f, 0.194506f, 0.095301f, -0.090115f, 0.060043f, -0.089592f, -0.187066f, -0.014666f, -0.113107f, -0.163316f, 0.028614f, 0.017635f, -0.010040f, 0.152561f, 0.146691f, 0.087919f, 0.130547f, 0.079652f, -0.051171f, -0.057210f, -0.102259f, -0.174613f, -0.129241f, -0.061403f, -0.057969f, 0.031465f, 0.098369f, 0.067563f, 0.108101f, 0.163828f, 0.063381f, -0.021427f, -0.020806f, -0.113155f, -0.091781f, 0.008481f, -0.105310f, -0.047576f, 0.056619f, 0.014124f, 0.070956f, 0.057428f, -0.029580f, 0.019193f, -0.006250f, -0.039040f, 0.008294f, -0.017398f, -0.018045f, 0.036263f, 0.012190f, 0.015384f, 0.047821f, -0.027643f, -0.011132f, 0.026229f, -0.036324f, -0.029450f, 0.013262f, -0.086011f, -0.014720f, 0.029562f, -0.069767f, 0.033996f, 0.042912f, 0.004655f, 0.108390f, 0.103538f, 0.023371f, 0.042045f, -0.030670f, -0.092479f, -0.046851f, -0.123093f, -0.140217f, -0.079268f, -0.034203f, 0.026490f, 0.132766f, 0.154366f, 0.161233f, 0.143613f, 0.081513f, -0.017916f, -0.090879f, -0.143040f, -0.200048f, -0.170747f, -0.094504f, -0.024415f, 0.079867f, 0.144275f, + 0.143461f, 0.128703f, 0.083125f, -0.015824f, -0.026528f, -0.041469f, -0.063077f, -0.044585f, -0.039792f, -0.046466f, -0.025716f, -0.013197f, -0.011886f, 0.009058f, 0.026246f, 0.035633f, 0.046051f, 0.042901f, 0.032981f, 0.014644f, 0.001170f, -0.017460f, -0.026079f, -0.034016f, -0.036274f, -0.035980f, -0.015318f, 0.001145f, 0.012410f, 0.012302f, 0.018599f, 0.019964f, 0.021207f, 0.015344f, 0.004335f, -0.002068f, -0.001308f, -0.007677f, -0.006494f, -0.005956f, -0.011444f, -0.013330f, -0.002966f, -0.004652f, -0.003280f, -0.002119f, -0.001571f, 0.004915f, 0.013253f, 0.010012f, 0.010329f, 0.010074f, 0.005654f, 0.001631f, -0.002091f, -0.010275f, -0.011303f, -0.012345f, -0.009166f, -0.005483f, -0.000353f, 0.001354f, 0.005741f, 0.008289f, 0.008725f, 0.004334f, 0.002833f, 0.000713f, 0.000586f, -0.000919f, -0.001603f, -0.003133f, -0.001072f, -0.001793f, -0.001490f, -0.002574f, -0.002488f, -0.003214f, -0.001768f, -0.002323f, 0.001159f, 0.003146f, 0.005595f, 0.005257f, 0.004999f, 0.002613f, 0.001792f, -0.001704f, -0.002871f, -0.003979f, -0.004411f, -0.005222f, -0.001939f, -0.001433f, 0.000402f, 0.000877f, + 0.002187f, 0.001764f, 0.003181f, 0.001526f, 0.001830f, 0.000367f, 0.000361f, -0.001218f, -0.000415f, -0.001402f, -0.000251f, -0.000709f}, + {0.001020f, 0.006386f, -0.008690f, -0.007109f, -0.001197f, 0.006848f, 0.010141f, -0.004785f, 0.005930f, -0.003292f, -0.008407f, -0.002330f, -0.004691f, 0.002751f, -0.001140f, -0.004092f, 0.003755f, 0.005649f, 0.001291f, 0.006833f, -0.012535f, -0.013586f, -0.008696f, 0.001244f, -0.000013f, -0.002338f, 0.000676f, 0.004123f, -0.001336f, 0.005574f, 0.004641f, -0.005946f, 0.002277f, -0.000462f, 0.007264f, 0.006661f, 0.002541f, -0.007116f, 0.004674f, -0.004246f, 0.002387f, 0.004638f, -0.011318f, 0.012372f, 0.018218f, 0.002364f, 0.008267f, -0.006719f, -0.001333f, -0.006308f, -0.003248f, 0.005619f, -0.001863f, -0.006523f, -0.001704f, -0.004114f, 0.003157f, -0.004012f, -0.003610f, 0.000347f, 0.003348f, -0.003330f, -0.003718f, -0.001639f, 0.006487f, 0.005804f, -0.004898f, -0.001828f, -0.005792f, 0.001320f, 0.007702f, 0.002117f, -0.002791f, -0.003688f, 0.002911f, -0.001050f, -0.005211f, -0.001929f, -0.003511f, -0.000527f, -0.001872f, 0.003018f, 0.002866f, 0.001509f, -0.001659f, -0.002339f, 0.005201f, -0.000721f, 0.001433f, 0.002667f, -0.000748f, -0.000092f, -0.001049f, 0.001560f, 0.000234f, 0.000377f, + -0.001490f, 0.000194f, -0.000455f, -0.001526f, 0.000100f, -0.000254f, 0.001144f, 0.002705f, -0.001489f, 0.000613f, -0.000267f, 0.001305f, 0.001653f, -0.000417f, -0.000642f, -0.000365f, -0.000055f, -0.001479f, -0.000582f, 0.000628f, -0.000528f, 0.000251f, -0.000002f, 0.001188f, 0.000294f, 0.000135f, 0.028005f, 0.012872f, -0.000959f, 0.005849f, 0.005334f, -0.006726f, -0.003280f, 0.007752f, 0.003543f, 0.008438f, -0.006130f, 0.012275f, 0.004628f, -0.012138f, 0.009636f, 0.000500f, -0.000206f, -0.006413f, 0.007054f, -0.013122f, -0.011236f, -0.002424f, -0.003987f, -0.002192f, -0.004005f, 0.001503f, -0.002426f, -0.005466f, -0.003927f, 0.004544f, -0.004964f, 0.003168f, 0.002026f, 0.001259f, -0.005481f, 0.007693f, -0.016125f, -0.002859f, -0.000075f, -0.002850f, -0.002015f, 0.001368f, 0.003026f, -0.005201f, 0.004130f, -0.006297f, 0.006016f, 0.001875f, 0.001326f, 0.006165f, -0.004356f, -0.001079f, 0.002521f, 0.009660f, 0.002410f, 0.004036f, -0.002222f, -0.008437f, -0.011732f, 0.002130f, 0.006386f, 0.008293f, -0.003402f, -0.013161f, 0.001963f, -0.005400f, -0.003653f, -0.003070f, 0.003650f, 0.000353f, + 0.012848f, -0.000414f, 0.004331f, 0.002486f, -0.001935f, -0.003375f, -0.003572f, -0.013446f, -0.003932f, -0.002226f, -0.001816f, -0.002600f, 0.002504f, 0.006688f, 0.001885f, 0.006343f, -0.000063f, -0.000635f, -0.002030f, 0.001721f, 0.002332f, -0.000673f, -0.002591f, 0.002229f, -0.001330f, 0.000858f, -0.001127f, 0.001144f, -0.001918f, -0.001221f, 0.001829f, 0.000560f, 0.001036f, -0.000727f, 0.000641f, -0.001261f, 0.015132f, 0.003457f, -0.012685f, -0.014497f, 0.004007f, -0.004450f, -0.011921f, 0.013540f, -0.006626f, -0.002266f, -0.001811f, 0.010608f, 0.002285f, -0.006218f, 0.007517f, -0.005839f, 0.011339f, -0.015661f, -0.010265f, 0.012394f, -0.012941f, -0.013150f, -0.005224f, 0.010585f, 0.004694f, 0.005042f, -0.001215f, 0.009478f, 0.005801f, -0.001042f, -0.012552f, 0.003348f, -0.003471f, 0.004471f, 0.004018f, 0.003370f, 0.010944f, 0.002868f, -0.010738f, 0.000929f, 0.007510f, 0.010940f, 0.003727f, -0.006088f, -0.001408f, -0.008951f, 0.003815f, -0.015829f, -0.000602f, 0.016961f, 0.000926f, 0.001760f, -0.008721f, -0.010877f, 0.001670f, 0.002293f, 0.012533f, -0.002794f, 0.001087f, 0.001250f, + -0.001844f, 0.001218f, 0.004170f, 0.000676f, 0.008816f, -0.002460f, 0.005857f, 0.000797f, 0.001586f, 0.000989f, 0.010339f, 0.000361f, -0.001438f, 0.001839f, -0.002202f, -0.007061f, -0.003720f, -0.007278f, -0.000164f, 0.012939f, 0.002731f, -0.004333f, -0.001461f, -0.007502f, 0.004225f, -0.005891f, -0.004084f, 0.001337f, 0.000217f, 0.000360f, -0.003354f, -0.004824f, -0.000982f, 0.001098f, -0.001597f, 0.002645f, -0.000305f, -0.000085f, 0.002664f, 0.001587f, 0.002683f, 0.002138f, -0.000032f, 0.000800f, -0.002182f, 0.000039f, -0.001937f, -0.002161f, 0.001455f, 0.001661f, 0.003075f, 0.002150f, -0.001497f, -0.000469f, 0.001624f, -0.001284f, -0.002359f, 0.001243f, 0.000331f, 0.000018f, 0.000300f, -0.034789f, -0.022554f, -0.005098f, 0.003869f, 0.005474f, 0.000681f, -0.000155f, -0.013150f, -0.000928f, -0.002794f, -0.002326f, 0.000380f, -0.003481f, -0.001439f, -0.009906f, 0.005169f, -0.020721f, -0.007451f, 0.001737f, -0.004056f, -0.006411f, -0.003528f, -0.011839f, -0.005868f, -0.004985f, -0.005489f, 0.002482f, -0.009004f, -0.005107f, 0.011326f, 0.007221f, 0.000836f, 0.005290f, 0.004045f, -0.003799f, + -0.007465f, 0.004360f, 0.016872f, 0.001791f, 0.002180f, -0.006737f, -0.005846f, 0.004824f, -0.014314f, -0.007773f, 0.016019f, -0.014695f, 0.004478f, -0.003593f, -0.007278f, 0.003252f, 0.001148f, -0.004174f, 0.001019f, 0.002328f, -0.004973f, -0.000073f, -0.000925f, 0.009716f, 0.008801f, 0.001167f, 0.002426f, 0.004143f, -0.000214f, -0.002043f, -0.003320f, -0.020363f, 0.009875f, 0.005985f, -0.005437f, -0.000349f, -0.008395f, -0.002435f, 0.001280f, -0.006325f, 0.002886f, -0.007647f, -0.004105f, -0.008882f, -0.012901f, 0.008401f, -0.002393f, 0.000247f, -0.010892f, -0.002876f, 0.001495f, 0.001681f, -0.002814f, -0.000645f, -0.000528f, -0.003167f, -0.005600f, 0.000766f, -0.002838f, 0.002302f, -0.000375f, -0.001575f, -0.001092f, -0.000739f, 0.002853f, 0.000337f, -0.004129f, 0.000650f, -0.001191f, -0.000497f, 0.001425f, 0.000481f, -0.001022f, 0.000843f, -0.003228f, 0.001620f, -0.002929f, -0.001086f, -0.003828f, -0.030070f, 0.004721f, 0.006928f, -0.001784f, -0.002726f, -0.016486f, -0.006886f, 0.004657f, -0.014910f, -0.014091f, 0.002809f, -0.013398f, -0.007044f, -0.000236f, -0.008242f, 0.004712f, -0.006513f, + 0.010244f, -0.005431f, -0.003400f, 0.003118f, 0.007199f, 0.013031f, 0.008307f, -0.014688f, -0.000680f, -0.001159f, 0.007318f, 0.010731f, 0.018471f, -0.008229f, -0.007101f, 0.009446f, -0.009913f, 0.002262f, 0.002995f, 0.015447f, 0.005802f, 0.008596f, -0.011425f, -0.005161f, -0.015641f, 0.012412f, 0.013173f, 0.014953f, -0.000119f, -0.003278f, -0.009937f, -0.002157f, 0.010208f, -0.004725f, -0.006358f, -0.006011f, -0.007775f, 0.001666f, 0.001977f, 0.002331f, -0.010683f, -0.000179f, -0.010464f, -0.000604f, -0.001463f, 0.004284f, 0.003849f, -0.003275f, -0.004682f, -0.013439f, -0.000663f, -0.001096f, 0.008389f, -0.005200f, 0.013861f, -0.007848f, 0.001835f, 0.006357f, 0.012606f, -0.009665f, 0.003012f, 0.006536f, -0.011095f, 0.005616f, 0.000124f, 0.013815f, 0.004734f, 0.003095f, 0.008620f, -0.000856f, 0.002453f, 0.006540f, 0.002770f, 0.000081f, -0.002287f, 0.000121f, 0.002883f, -0.000876f, 0.003628f, 0.005370f, 0.004509f, -0.002004f, 0.002560f, 0.000365f, -0.001321f, 0.002169f, 0.002950f, 0.000029f, 0.001423f, 0.003459f, 0.002651f, 0.002799f, 0.001458f, -0.001306f, -0.002094f, 0.002683f, + -0.002257f, 0.002675f, -0.001246f, 0.000243f, 0.003435f, 0.002564f, -0.000650f, 0.001898f, 0.037316f, 0.031561f, -0.000910f, 0.000714f, 0.016774f, 0.002025f, 0.008334f, -0.005191f, 0.009313f, -0.007226f, 0.016932f, 0.005486f, 0.000260f, 0.003179f, 0.001400f, 0.020908f, 0.014508f, -0.014087f, -0.011306f, 0.004265f, 0.002469f, -0.004670f, -0.002775f, 0.002452f, 0.010370f, 0.007298f, 0.004861f, 0.000859f, 0.005585f, -0.003757f, -0.000045f, 0.011419f, -0.012561f, 0.004910f, 0.015786f, 0.011440f, 0.021377f, -0.002307f, -0.002983f, -0.002069f, 0.001567f, -0.006975f, 0.023211f, 0.020838f, 0.015283f, -0.007230f, -0.001864f, 0.008733f, 0.007530f, -0.006654f, 0.001667f, 0.011832f, -0.004275f, -0.005867f, 0.007901f, -0.022560f, -0.002366f, 0.001013f, 0.003516f, -0.007783f, -0.014374f, 0.005741f, 0.010218f, -0.012101f, -0.004195f, -0.013140f, 0.005043f, 0.000687f, -0.002491f, -0.002998f, -0.011044f, 0.018663f, -0.004746f, 0.002320f, -0.018983f, -0.004780f, -0.008949f, 0.022236f, -0.003743f, -0.003303f, 0.010220f, 0.004405f, 0.000155f, -0.007385f, 0.006863f, -0.004933f, -0.006478f, 0.010194f, + 0.009911f, -0.000363f, 0.006269f, 0.000003f, -0.002554f, 0.005308f, -0.000651f, 0.001940f, -0.001584f, -0.002654f, -0.000413f, 0.004083f, -0.002986f, -0.002650f, 0.000060f, -0.003473f, 0.001363f, -0.003152f, -0.001500f, 0.000066f, -0.000340f, 0.004058f, 0.000327f, 0.001041f, 0.002917f, 0.002528f, 0.000914f, 0.001206f, 0.002441f, 0.005481f, 0.001267f, 0.005155f, 0.001091f, 0.002448f, 0.004087f, 0.024443f, -0.000965f, 0.015457f, 0.021072f, -0.011114f, -0.025984f, 0.001117f, 0.019740f, -0.015261f, 0.013858f, -0.004098f, -0.018806f, -0.008644f, 0.018918f, -0.018460f, -0.016335f, 0.011925f, -0.018887f, 0.006325f, 0.008994f, 0.007442f, -0.005365f, 0.011472f, 0.003214f, 0.002188f, 0.007347f, -0.012017f, 0.016425f, 0.008131f, 0.007128f, -0.003349f, -0.001841f, 0.030677f, -0.010733f, 0.001948f, 0.007966f, 0.015462f, -0.020956f, -0.017198f, -0.016071f, 0.000669f, 0.001182f, -0.001025f, 0.009744f, 0.003085f, 0.017398f, 0.007056f, 0.010195f, -0.001586f, 0.001362f, -0.008548f, 0.015551f, -0.006987f, 0.015341f, -0.008311f, -0.013231f, 0.022880f, 0.018539f, -0.026187f, -0.023162f, -0.015169f, + -0.011906f, 0.008324f, 0.001313f, -0.005254f, 0.012082f, 0.013381f, -0.015978f, 0.009474f, -0.001287f, -0.031933f, -0.010564f, -0.016069f, -0.014628f, 0.005609f, -0.004973f, 0.010578f, -0.002410f, 0.001649f, 0.019153f, 0.019567f, -0.001797f, 0.005200f, -0.001684f, 0.003107f, 0.002771f, -0.006521f, 0.005505f, 0.001677f, -0.000233f, 0.016527f, 0.004963f, -0.000041f, 0.000512f, -0.002860f, 0.004882f, -0.000459f, 0.003223f, -0.003480f, -0.000171f, -0.003674f, 0.001028f, 0.004364f, 0.001379f, 0.000070f, -0.000484f, 0.003829f, 0.002445f, -0.002283f, 0.000359f, -0.000019f, 0.000601f, 0.001988f, 0.000877f, -0.001480f, -0.001795f, 0.000615f, 0.001113f, -0.000134f, -0.013802f, -0.019509f, 0.011736f, -0.011243f, -0.008143f, -0.007006f, -0.022538f, -0.002434f, 0.010157f, -0.006172f, -0.001298f, -0.008313f, 0.018697f, 0.002824f, 0.011934f, 0.009008f, -0.014944f, 0.015369f, 0.023155f, -0.007124f, -0.009363f, 0.002436f, -0.003942f, 0.009923f, -0.028484f, 0.010894f, 0.024798f, -0.003331f, -0.008025f, -0.007091f, 0.010824f, 0.022109f, -0.005186f, 0.005553f, -0.009814f, 0.015135f, -0.018217f, -0.007046f, + 0.003626f, -0.002897f, -0.014120f, 0.026090f, 0.018491f, 0.013763f, -0.005748f, -0.019720f, -0.002354f, -0.027999f, 0.004901f, -0.002067f, -0.000824f, -0.000616f, -0.004148f, 0.015126f, 0.012905f, -0.019460f, 0.010931f, -0.011664f, 0.016140f, -0.001505f, -0.003190f, -0.001364f, -0.016954f, -0.003281f, -0.015462f, -0.034410f, -0.001495f, 0.003996f, 0.002781f, -0.013227f, -0.000382f, -0.003803f, -0.025617f, 0.000495f, 0.022369f, -0.014119f, 0.005904f, 0.007255f, -0.002764f, 0.001559f, -0.006537f, -0.003930f, 0.005301f, 0.006325f, 0.007059f, -0.001800f, -0.004416f, -0.001733f, -0.004751f, 0.003914f, 0.001994f, -0.004078f, -0.001111f, -0.003752f, -0.004001f, -0.000562f, -0.003591f, -0.005566f, 0.003471f, -0.001178f, -0.004190f, 0.003342f, -0.002918f, 0.002752f, 0.004297f, 0.001767f, 0.004131f, 0.002862f, 0.000008f, 0.002704f, 0.009260f, 0.004415f, -0.004526f, -0.003169f, -0.005205f, -0.000004f, -0.006751f, 0.003576f, -0.000348f, 0.005241f, -0.001347f, 0.004081f, -0.000655f, -0.002917f, 0.008741f, 0.004165f, -0.036115f, 0.002539f, 0.021051f, 0.011499f, -0.016461f, -0.013378f, 0.026390f, 0.006101f, + 0.005925f, -0.005202f, 0.006822f, -0.000270f, -0.017664f, -0.004603f, -0.018552f, 0.008770f, -0.011057f, -0.001689f, -0.018078f, -0.020000f, -0.026897f, 0.016820f, 0.011343f, -0.008628f, -0.009599f, 0.007551f, -0.024703f, -0.002258f, 0.001846f, 0.005959f, 0.010837f, 0.005294f, 0.000679f, -0.008550f, 0.003577f, -0.007852f, 0.006499f, -0.007533f, 0.004287f, 0.002278f, -0.007838f, -0.010166f, -0.019367f, -0.012775f, 0.004876f, -0.033030f, -0.009022f, 0.018107f, 0.009620f, -0.003994f, 0.043086f, -0.006253f, 0.019947f, 0.019741f, -0.031444f, 0.002036f, -0.004200f, -0.026550f, -0.013909f, -0.014618f, 0.000435f, 0.003095f, 0.029762f, -0.004807f, 0.002834f, 0.020180f, 0.014947f, -0.003536f, 0.020079f, -0.009550f, -0.007415f, -0.013452f, -0.017859f, -0.025969f, -0.009896f, 0.014796f, -0.028303f, -0.014432f, 0.021812f, 0.015917f, -0.009560f, 0.019958f, -0.008927f, -0.001391f, -0.000924f, 0.009597f, -0.006283f, 0.009564f, -0.006020f, 0.008181f, -0.002403f, 0.003376f, -0.003879f, 0.006619f, 0.006323f, 0.002748f, -0.001151f, 0.007472f, -0.004866f, -0.005487f, 0.005813f, -0.001642f, 0.006347f, 0.004643f, + 0.003136f, 0.004295f, 0.002594f, 0.001218f, -0.010924f, -0.002020f, -0.000127f, 0.003037f, -0.002923f, -0.004610f, -0.003868f, -0.010437f, 0.003938f, -0.000218f, 0.006567f, 0.003715f, 0.006392f, 0.004877f, 0.001347f, 0.001970f, 0.024929f, -0.004422f, 0.008109f, -0.012229f, 0.007258f, 0.010309f, -0.006251f, 0.008802f, -0.013646f, -0.015203f, 0.023132f, 0.012455f, 0.014977f, 0.018269f, 0.000028f, -0.015209f, 0.019992f, -0.017507f, -0.023279f, 0.000239f, 0.022055f, -0.003248f, -0.018897f, 0.002503f, 0.025934f, -0.003819f, 0.007200f, 0.002404f, 0.036334f, 0.002193f, 0.007859f, 0.017778f, -0.002170f, -0.009349f, -0.017253f, 0.002356f, -0.002308f, -0.016776f, 0.000641f, -0.009924f, 0.006748f, 0.024464f, 0.000339f, -0.014910f, -0.004301f, -0.013833f, -0.007221f, -0.002236f, -0.005710f, 0.003227f, -0.018229f, 0.019569f, -0.010305f, 0.033126f, -0.008296f, -0.024237f, 0.001463f, 0.001075f, 0.011869f, 0.004935f, 0.006458f, -0.024860f, -0.019996f, 0.014407f, -0.020828f, -0.029211f, 0.008429f, 0.005681f, -0.006543f, 0.031372f, -0.025539f, -0.035593f, 0.013350f, -0.024337f, 0.002397f, 0.003245f, + 0.000762f, -0.023409f, -0.014121f, -0.030416f, 0.010460f, -0.003153f, -0.001607f, -0.004784f, -0.013434f, -0.006175f, -0.010177f, -0.005163f, -0.003913f, 0.011467f, -0.008792f, 0.008782f, 0.003296f, 0.009070f, 0.001595f, 0.001083f, -0.012315f, -0.004618f, 0.003414f, -0.004087f, -0.013449f, 0.002558f, -0.002139f, -0.005374f, -0.004704f, 0.004193f, -0.005379f, 0.005697f, -0.003064f, 0.006939f, -0.001313f, 0.003482f, -0.007005f, -0.007023f, -0.000192f, 0.000413f, -0.002476f, 0.010528f, -0.009271f, -0.008972f, -0.005803f, 0.005045f, 0.005625f, -0.007296f, 0.005441f, 0.001505f, -0.019291f, 0.010700f, 0.001109f, 0.026351f, 0.027674f, 0.039907f, 0.018248f, 0.008481f, 0.005575f, 0.013173f, -0.013521f, 0.015229f, -0.024001f, 0.011735f, -0.002313f, -0.002009f, -0.046044f, -0.017802f, -0.007519f, 0.015727f, -0.001922f, 0.003841f, 0.005046f, 0.004215f, -0.023505f, 0.024408f, -0.000869f, 0.009958f, 0.000865f, 0.022785f, -0.024387f, 0.017028f, -0.011959f, -0.000546f, 0.018489f, -0.020889f, -0.009293f, -0.022766f, -0.009017f, -0.025355f, 0.023192f, 0.017042f, 0.031136f, -0.001485f, 0.007415f, -0.028263f, + 0.006509f, -0.029301f, 0.028577f, 0.008110f, -0.004571f, 0.027049f, 0.027620f, 0.014128f, -0.016357f, -0.024470f, -0.035245f, -0.001521f, -0.012437f, -0.017751f, 0.019227f, -0.005228f, 0.044682f, -0.033006f, -0.011988f, 0.025556f, -0.026543f, -0.010532f, 0.006198f, 0.000516f, -0.003815f, -0.025495f, 0.011728f, 0.004392f, -0.013831f, 0.012692f, 0.026960f, -0.023065f, 0.026025f, 0.032375f, -0.009613f, -0.017064f, 0.013381f, -0.013083f, 0.012369f, 0.007923f, -0.013465f, -0.010480f, -0.002617f, -0.004152f, 0.019025f, 0.006455f, -0.003149f, -0.009142f, -0.014980f, -0.008449f, 0.004836f, -0.009564f, 0.004683f, 0.009196f, 0.005930f, -0.006408f, 0.005030f, -0.005231f, 0.007310f, 0.004773f, 0.008148f, 0.004960f, 0.000457f, -0.008423f, 0.005644f, 0.008552f, -0.008484f, 0.000424f, 0.003050f, 0.003235f, 0.007409f, 0.000747f, -0.000854f, 0.008149f, 0.010004f, 0.002021f, -0.004426f, -0.007650f, -0.000091f, 0.006955f, 0.008452f, 0.005785f, 0.041565f, -0.009516f, 0.005900f, -0.002249f, -0.013641f, 0.018600f, -0.006774f, 0.006879f, 0.002281f, 0.026661f, -0.008348f, 0.031096f, 0.000572f, 0.015477f, + 0.013806f, -0.002461f, -0.010029f, -0.030303f, 0.014446f, 0.031542f, 0.001718f, -0.000210f, 0.021954f, 0.018575f, -0.001279f, 0.003438f, 0.037617f, 0.023537f, -0.006733f, 0.008193f, 0.024760f, -0.006205f, -0.027271f, 0.000674f, -0.019780f, -0.003107f, -0.012510f, 0.001186f, -0.037743f, -0.011267f, -0.013701f, 0.000670f, 0.007997f, 0.007995f, 0.036874f, 0.040691f, 0.021530f, -0.028094f, -0.016504f, 0.022889f, 0.032155f, 0.006820f, -0.029187f, -0.004772f, -0.006839f, -0.030496f, -0.019185f, -0.023078f, 0.028366f, -0.010516f, 0.003982f, -0.028696f, 0.041933f, 0.030920f, -0.003358f, 0.012818f, 0.069538f, -0.003452f, -0.014114f, -0.026626f, -0.001497f, 0.018515f, 0.014732f, -0.010675f, 0.021053f, 0.041612f, -0.017673f, 0.026570f, -0.011943f, 0.008751f, -0.016548f, -0.008975f, -0.014258f, -0.018769f, -0.009558f, 0.012425f, 0.000087f, -0.004059f, 0.003147f, 0.005209f, 0.022547f, -0.002397f, 0.002374f, -0.000176f, -0.010216f, -0.001033f, -0.003561f, 0.002167f, 0.009209f, -0.005779f, -0.002638f, -0.007181f, -0.003307f, 0.002642f, 0.002906f, -0.002534f, -0.014652f, -0.013719f, -0.004589f, -0.016916f, + -0.014716f, -0.002602f, 0.013347f, 0.011785f, 0.010238f, 0.002371f, -0.002179f, 0.000711f, 0.005778f, 0.004813f, -0.001673f, 0.003352f, 0.002481f, 0.021384f, 0.002188f, -0.012845f, 0.012706f, 0.004915f, -0.017776f, -0.030095f, 0.039070f, -0.024542f, 0.029490f, -0.021572f, -0.032066f, 0.001469f, 0.040473f, 0.025883f, -0.029775f, -0.020060f, 0.006985f, 0.005854f, 0.013748f, -0.002455f, 0.027022f, 0.014253f, 0.035581f, -0.013041f, -0.005858f, -0.001353f, -0.006786f, -0.034299f, -0.025126f, -0.007996f, 0.035777f, 0.007330f, 0.002892f, 0.001109f, -0.033168f, -0.037964f, -0.029179f, 0.015025f, 0.017372f, -0.013047f, -0.008453f, 0.003212f, 0.004198f, -0.020289f, 0.005913f, 0.037544f, 0.006697f, 0.023484f, 0.023273f, 0.016564f, 0.040496f, 0.057901f, 0.019143f, 0.000916f, 0.008448f, 0.022811f, -0.012007f, -0.006529f, 0.015504f, -0.005312f, 0.008338f, -0.005444f, 0.025144f, 0.008799f, 0.017839f, -0.005007f, -0.006567f, 0.012649f, 0.033565f, -0.002510f, -0.027339f, 0.017492f, -0.042840f, -0.049875f, -0.016958f, 0.025702f, -0.016539f, -0.049318f, -0.030021f, -0.012591f, 0.018080f, 0.012228f, + -0.026545f, 0.047752f, -0.015274f, -0.033561f, 0.008842f, 0.013037f, -0.010932f, 0.016571f, -0.017203f, -0.006844f, 0.006282f, 0.004457f, -0.009006f, 0.008416f, 0.001669f, 0.015056f, -0.008280f, -0.018062f, -0.010436f, 0.002991f, -0.003931f, -0.003665f, -0.001382f, 0.000116f, -0.001406f, 0.012231f, -0.002061f, 0.002028f, -0.004921f, 0.005643f, 0.010146f, 0.001977f, 0.009726f, 0.003021f, -0.015042f, -0.006648f, 0.000086f, -0.013008f, -0.015369f, 0.007433f, 0.010838f, -0.008413f, -0.016401f, -0.018017f, 0.007396f, 0.003049f, -0.000784f, 0.011703f, -0.006752f, 0.004289f, 0.016003f, -0.069788f, 0.004032f, 0.034910f, -0.006224f, -0.008569f, 0.043019f, -0.023237f, -0.023426f, -0.030504f, -0.009765f, -0.010522f, -0.019880f, 0.005639f, 0.010029f, 0.016149f, 0.011867f, -0.009990f, -0.007402f, -0.003744f, -0.008327f, 0.002523f, 0.008258f, 0.034462f, -0.014722f, -0.045440f, 0.024300f, -0.000164f, -0.001146f, -0.037861f, 0.016897f, 0.006918f, -0.003714f, 0.042353f, -0.012067f, 0.004275f, -0.003802f, 0.018465f, 0.022877f, -0.025375f, -0.002315f, -0.014407f, -0.001492f, 0.012392f, -0.009323f, 0.019178f, + -0.030387f, -0.025872f, -0.015995f, -0.027619f, -0.004615f, 0.002072f, 0.004336f, -0.038477f, -0.024913f, 0.017712f, 0.030813f, -0.014995f, -0.017071f, 0.015725f, -0.034741f, -0.032006f, -0.030477f, 0.033169f, -0.056613f, 0.017979f, -0.002982f, -0.033892f, -0.010604f, 0.027793f, 0.072144f, -0.010114f, -0.019853f, 0.023299f, 0.055322f, 0.019391f, -0.012433f, -0.013878f, -0.002501f, 0.014656f, -0.001012f, 0.006577f, 0.032930f, 0.001671f, -0.012290f, -0.023744f, 0.019294f, -0.027928f, -0.018702f, -0.014167f, 0.009695f, -0.011830f, -0.019871f, -0.013105f, -0.012094f, -0.000707f, -0.014665f, 0.004490f, -0.011370f, -0.001566f, -0.003734f, 0.013398f, -0.010570f, -0.008862f, -0.021650f, -0.007026f, -0.003866f, -0.007874f, 0.020528f, -0.015748f, -0.019471f, -0.001846f, -0.017093f, -0.016215f, -0.007165f, 0.001699f, 0.015374f, -0.002639f, -0.006620f, -0.003597f, -0.010232f, 0.006569f, -0.020612f, -0.002415f, 0.021240f, 0.009480f, 0.013887f, -0.006017f, 0.005247f, 0.006170f, -0.005147f, -0.008736f, -0.011646f, 0.003481f, 0.005473f, 0.008674f, 0.009647f, -0.004069f, -0.039169f, -0.062263f, -0.003723f, 0.071581f, + -0.011546f, -0.005031f, -0.047366f, -0.003481f, -0.003262f, 0.005012f, 0.015532f, 0.002244f, 0.012896f, 0.001027f, -0.000882f, -0.033580f, 0.004690f, 0.030744f, -0.020800f, 0.038109f, -0.016128f, -0.002247f, -0.033804f, 0.021695f, -0.016895f, -0.010794f, -0.038991f, -0.052594f, 0.026817f, -0.025609f, -0.025441f, 0.009374f, 0.005300f, -0.011221f, 0.002481f, 0.029985f, -0.008967f, -0.028342f, -0.017801f, -0.036327f, -0.004583f, 0.010583f, 0.025138f, 0.005339f, -0.007550f, -0.006085f, -0.015224f, 0.008925f, 0.026119f, 0.004523f, -0.016534f, 0.030028f, -0.028694f, 0.003258f, -0.049364f, -0.014306f, -0.009764f, 0.060916f, -0.038487f, 0.012618f, -0.012578f, 0.008196f, -0.007183f, -0.006553f, 0.001065f, 0.024924f, 0.007380f, -0.044562f, 0.049156f, 0.015297f, 0.017491f, 0.006616f, -0.019731f, -0.014747f, -0.005718f, 0.006487f, -0.001182f, 0.010103f, -0.026724f, -0.027486f, -0.004608f, 0.013794f, 0.029861f, -0.018270f, 0.025322f, -0.005974f, 0.009834f, -0.019790f, 0.011380f, -0.032426f, 0.036540f, 0.001879f, 0.004031f, 0.012288f, 0.016463f, 0.001881f, -0.022872f, -0.010743f, 0.006126f, -0.021385f, + 0.005851f, 0.010461f, 0.009130f, -0.012604f, -0.008022f, 0.022211f, 0.003993f, -0.021982f, -0.003224f, 0.019302f, -0.007177f, -0.027105f, 0.031008f, -0.008144f, 0.011983f, -0.004951f, -0.008906f, -0.014311f, 0.009537f, 0.002923f, 0.009926f, 0.001792f, 0.016666f, 0.002269f, 0.011990f, -0.005519f, 0.000830f, 0.007797f, -0.004222f, -0.006292f, -0.030474f, -0.018478f, 0.066662f, -0.008461f, 0.006028f, -0.034653f, 0.031390f, -0.018043f, 0.023253f, -0.018204f, 0.040484f, 0.003826f, 0.004607f, -0.019578f, -0.015358f, 0.023146f, 0.052319f, -0.021690f, -0.031013f, 0.014766f, -0.011877f, 0.034046f, 0.043697f, 0.021189f, -0.005923f, 0.026616f, -0.017170f, -0.016559f, 0.036808f, 0.049844f, -0.055273f, 0.004538f, 0.008905f, 0.009427f, -0.018322f, -0.001340f, 0.023128f, -0.056463f, 0.017545f, 0.032971f, 0.012998f, -0.025122f, -0.006357f, 0.040495f, 0.033766f, 0.011027f, -0.018475f, -0.024900f, -0.048257f, 0.069694f, 0.013216f, 0.035839f, -0.004613f, -0.014829f, 0.008409f, 0.020871f, 0.001263f, -0.001107f, -0.056168f, 0.008815f, 0.054166f, -0.009546f, 0.051933f, -0.030765f, -0.013214f, -0.021442f, + 0.012586f, 0.048310f, -0.014591f, -0.001361f, 0.044291f, 0.053368f, -0.016775f, -0.038930f, -0.034142f, -0.030263f, -0.013488f, -0.012753f, 0.031311f, -0.037511f, 0.021095f, 0.023195f, -0.007904f, 0.002719f, 0.024681f, -0.004586f, -0.013220f, 0.014538f, 0.010859f, 0.007790f, 0.022749f, 0.004944f, -0.003334f, 0.020120f, 0.007770f, 0.008562f, 0.010771f, -0.003356f, 0.001811f, -0.004471f, 0.009277f, -0.036738f, -0.009643f, 0.001655f, -0.006602f, 0.014455f, -0.027087f, -0.003027f, 0.000903f, 0.009923f, -0.000105f, 0.015710f, 0.011415f, -0.007335f, 0.022674f, 0.011400f, -0.007146f, 0.016085f, 0.017845f, 0.000290f, -0.010624f, 0.008546f, 0.017386f, 0.010349f, -0.001962f, -0.016114f, -0.007349f, 0.004385f, 0.003114f, 0.002743f, -0.015054f, 0.026346f, 0.019434f, 0.046527f, -0.014026f, 0.033708f, -0.017774f, -0.007097f, 0.031403f, -0.001025f, 0.042790f, -0.051493f, 0.032394f, 0.005944f, 0.014458f, -0.020662f, 0.015760f, 0.038529f, 0.074907f, -0.017119f, 0.019140f, -0.000946f, -0.049457f, 0.045600f, 0.004771f, 0.017904f, -0.008894f, -0.023095f, -0.008449f, -0.001764f, -0.019062f, -0.011957f, + 0.063681f, 0.004593f, 0.024620f, -0.018007f, 0.045212f, 0.000417f, 0.022052f, 0.009399f, -0.026093f, -0.005432f, -0.015999f, 0.000674f, 0.008379f, 0.053395f, 0.027329f, 0.002447f, 0.006573f, -0.001678f, -0.004153f, 0.008935f, 0.005579f, 0.033539f, 0.027404f, 0.013882f, -0.015569f, 0.023367f, 0.048943f, -0.045724f, 0.042938f, 0.007077f, 0.013118f, -0.045942f, -0.021635f, -0.057784f, -0.046524f, -0.009007f, 0.031526f, 0.026285f, -0.080132f, -0.000357f, -0.035974f, 0.019294f, 0.080601f, 0.040533f, -0.051341f, 0.028468f, -0.020939f, -0.026412f, 0.044555f, 0.022585f, -0.022429f, -0.012446f, 0.039254f, 0.032116f, 0.017754f, 0.049767f, -0.013038f, 0.030617f, 0.027070f, -0.031357f, 0.044556f, 0.012373f, 0.051666f, 0.015876f, -0.004437f, 0.030466f, -0.002812f, 0.008120f, -0.035736f, 0.027375f, -0.017253f, 0.014369f, -0.012745f, 0.006484f, 0.017068f, 0.041148f, 0.011058f, 0.025114f, 0.006625f, 0.008199f, -0.013097f, -0.002775f, -0.004466f, 0.003607f, 0.020862f, 0.017801f, 0.031200f, 0.011683f, -0.003379f, 0.005210f, -0.006900f, -0.003786f, -0.030668f, -0.004929f, 0.008056f, 0.010102f, + 0.026960f, 0.024040f, 0.021851f, 0.025206f, -0.066612f, -0.104618f, -0.026252f, -0.012582f, -0.024801f, 0.004865f, 0.035813f, -0.037451f, 0.053611f, 0.018432f, -0.075284f, -0.059269f, -0.010898f, 0.040754f, 0.002308f, 0.002627f, -0.007156f, -0.024971f, -0.072849f, 0.002189f, -0.061075f, -0.052103f, 0.025945f, 0.019127f, 0.018998f, -0.009483f, -0.023193f, 0.055006f, 0.034267f, -0.024488f, -0.047458f, 0.036062f, 0.019438f, 0.007900f, -0.021898f, -0.057292f, 0.022302f, -0.027296f, 0.009291f, -0.048896f, 0.059333f, 0.000715f, -0.022635f, 0.004984f, 0.015536f, 0.047555f, 0.030981f, -0.013070f, -0.001613f, 0.016211f, 0.017526f, 0.017918f, -0.010191f, -0.076175f, -0.058582f, 0.011351f, -0.007377f, 0.043547f, -0.007682f, -0.019598f, -0.052480f, 0.061262f, 0.024540f, -0.043735f, -0.043706f, 0.062883f, 0.060294f, -0.001210f, 0.044443f, -0.006405f, 0.002294f, -0.018602f, -0.010177f, -0.034647f, 0.042865f, -0.008315f, -0.008759f, -0.018745f, 0.018142f, -0.054163f, 0.026108f, -0.016204f, -0.009301f, 0.037635f, -0.000045f, 0.005562f, 0.010363f, 0.034537f, 0.018681f, -0.014710f, 0.026761f, -0.008167f, + 0.032147f, 0.011982f, -0.034420f, 0.008358f, -0.017086f, 0.016337f, -0.013709f, 0.000001f, -0.022585f, -0.012368f, 0.013677f, -0.023493f, 0.010677f, 0.007609f, 0.010953f, -0.021003f, -0.013969f, -0.026925f, -0.022485f, 0.030799f, -0.010343f, 0.019805f, 0.013498f, -0.019275f, -0.001802f, -0.016868f, 0.001572f, -0.010763f, 0.040205f, 0.032950f, 0.023370f, 0.030788f, -0.006671f, -0.034515f, -0.038412f, -0.005761f, 0.012871f, 0.057170f, 0.035957f, -0.013293f, -0.009712f, -0.015476f, -0.027522f, -0.001779f, 0.013973f, 0.019865f, 0.013591f, 0.006366f, 0.035799f, 0.004147f, -0.026216f, -0.065289f, 0.103293f, 0.003204f, -0.080917f, -0.005493f, -0.030481f, 0.014177f, 0.039293f, 0.036801f, -0.045267f, -0.071135f, 0.011686f, -0.033735f, 0.010376f, -0.006397f, 0.031063f, -0.009783f, 0.003963f, 0.019391f, -0.029863f, -0.035329f, 0.003239f, 0.010038f, 0.030757f, -0.000110f, -0.050654f, 0.033564f, -0.028496f, 0.026511f, -0.024838f, -0.015919f, -0.003285f, -0.007334f, -0.054410f, 0.010738f, 0.014501f, -0.051454f, 0.021482f, -0.019843f, 0.009888f, -0.016751f, 0.049770f, 0.039804f, -0.051273f, -0.026297f, + 0.034111f, 0.044052f, -0.052451f, 0.069170f, 0.003910f, 0.055822f, 0.039560f, 0.065761f, -0.020677f, -0.026994f, 0.014091f, -0.053390f, 0.007723f, 0.007478f, 0.094354f, -0.028766f, -0.089718f, 0.151224f, -0.071667f, -0.054067f, 0.086285f, 0.039871f, -0.051173f, 0.085014f, 0.008866f, -0.068039f, 0.084924f, 0.010984f, 0.007131f, -0.014264f, 0.012035f, 0.057371f, -0.014388f, -0.019098f, -0.030036f, 0.042892f, -0.015896f, -0.010152f, -0.006453f, -0.016374f, -0.018724f, -0.025811f, 0.024823f, -0.003125f, -0.002892f, -0.008941f, -0.007057f, 0.003849f, -0.011960f, -0.019241f, 0.002003f, -0.015452f, -0.030357f, -0.030402f, 0.038038f, -0.016142f, 0.003052f, 0.036224f, -0.017669f, -0.015713f, 0.001974f, 0.018267f, 0.007065f, 0.008120f, 0.033712f, -0.020555f, 0.004417f, -0.015000f, -0.010265f, -0.006283f, 0.056110f, 0.028692f, -0.009744f, 0.008627f, -0.030560f, 0.010189f, -0.028013f, -0.016503f, 0.012752f, -0.006717f, -0.057246f, 0.035512f, 0.013757f, -0.009991f, -0.000720f, -0.028586f, -0.004431f, 0.000957f, -0.093476f, 0.012913f, 0.028043f, -0.070188f, 0.032124f, 0.018527f, -0.024583f, -0.007046f, + -0.001219f, -0.017241f, -0.005634f, -0.010125f, -0.031268f, 0.000824f, -0.015596f, -0.003501f, -0.007679f, 0.015173f, 0.055868f, 0.046704f, -0.043111f, -0.004833f, 0.058785f, -0.010376f, -0.011045f, -0.060218f, 0.006944f, 0.019656f, -0.009845f, 0.051154f, 0.122842f, -0.041426f, -0.051790f, 0.087363f, -0.005858f, -0.047273f, 0.054559f, 0.035818f, -0.028338f, -0.042489f, -0.052394f, 0.015840f, 0.028058f, -0.023460f, 0.082380f, 0.053634f, -0.102841f, -0.098793f, 0.057467f, -0.046581f, -0.060181f, 0.077841f, 0.012497f, 0.104249f, 0.050051f, -0.012835f, -0.014114f, -0.075516f, -0.058826f, 0.171314f, 0.047268f, -0.036986f, -0.083082f, 0.002114f, -0.033913f, -0.074328f, -0.011660f, 0.086622f, 0.036822f, 0.000886f, 0.071355f, 0.062259f, -0.019938f, -0.079814f, 0.012200f, 0.047471f, -0.019907f, -0.018857f, 0.099454f, 0.057022f, 0.009733f, -0.010724f, -0.051396f, -0.050478f, -0.013149f, 0.047157f, 0.018925f, -0.019546f, -0.009338f, -0.022585f, 0.018443f, -0.014631f, -0.019420f, -0.012679f, -0.002614f, 0.013944f, 0.018925f, 0.016703f, 0.006866f, -0.045888f, -0.016199f, -0.009248f, 0.016906f, -0.018044f, + 0.002849f, -0.005044f, 0.041592f, -0.027373f, -0.019125f, 0.042936f, 0.011754f, -0.022238f, 0.033760f, -0.012240f, 0.009615f, 0.002345f, 0.007407f, -0.026482f, -0.007434f, 0.035243f, 0.034501f, 0.014119f, -0.014231f, 0.008954f, -0.016293f, -0.013173f, -0.010192f, 0.018299f, -0.029657f, -0.006548f, 0.022756f, 0.092068f, 0.078359f, -0.021631f, 0.055955f, 0.004768f, -0.041786f, 0.026446f, 0.047927f, 0.014793f, 0.021252f, -0.062465f, -0.011608f, 0.006304f, 0.013376f, -0.009974f, -0.052609f, -0.020194f, 0.020217f, -0.013949f, -0.004779f, -0.046204f, 0.070427f, 0.007790f, -0.056467f, 0.031578f, 0.082518f, -0.043042f, -0.023666f, 0.011027f, 0.027799f, -0.027247f, -0.050536f, 0.043172f, 0.075104f, -0.006870f, -0.028344f, 0.008721f, 0.021866f, 0.032897f, 0.048406f, 0.002205f, 0.087421f, -0.002867f, -0.095605f, -0.000180f, -0.010036f, 0.030519f, -0.009276f, -0.079680f, -0.001364f, -0.034953f, -0.032401f, 0.046318f, 0.025661f, 0.026006f, 0.034763f, -0.071529f, -0.036104f, -0.013357f, -0.000138f, 0.027527f, 0.001801f, -0.015401f, 0.002791f, -0.025141f, -0.047294f, 0.003679f, 0.075610f, -0.039451f, + 0.007931f, -0.030885f, -0.020592f, 0.050153f, -0.062119f, -0.001714f, 0.028452f, -0.023276f, 0.011128f, 0.006822f, 0.016462f, 0.017100f, -0.032436f, -0.040858f, 0.067772f, -0.014978f, -0.020933f, 0.033440f, -0.033584f, 0.020464f, 0.005098f, -0.015214f, 0.011337f, 0.027894f, -0.004725f, 0.002812f, -0.013505f, 0.005856f, 0.002589f, -0.003053f, -0.011978f, 0.014698f, 0.008699f, -0.002745f, -0.000584f, 0.012119f, 0.011812f, -0.013546f, -0.021514f, 0.010990f, -0.000584f, 0.004994f, 0.002052f, -0.007005f, 0.012246f, -0.000921f, 0.010288f, -0.004951f, -0.001057f, -0.007753f, 0.002561f, 0.009467f, -0.001660f, 0.025523f, -0.010151f, -0.009477f, 0.001973f, -0.013047f, 0.008202f, 0.016654f, -0.080944f, -0.115064f, -0.102572f, 0.205862f, 0.195664f, 0.196132f, 0.552096f, 0.196716f, -0.023213f, 0.036763f, -0.382523f, -0.464992f, -0.156824f, -0.260753f, -0.362363f, 0.046913f, -0.020562f, -0.060191f, 0.398069f, 0.243632f, 0.101134f, 0.622745f, 0.293352f, 0.054676f, 0.283287f, -0.066966f, -0.339116f, -0.323954f, -0.309444f, -0.427825f, -0.419695f, -0.098129f, -0.151817f, -0.246514f, 0.287721f, 0.133032f, + -0.104301f, 0.416528f, 0.133944f, -0.048594f, 0.470115f, 0.429063f, 0.098263f, 0.445240f, 0.450979f, -0.017055f, 0.111597f, 0.051367f, -0.435066f, -0.504189f, -0.376211f, -0.709897f, -0.673064f, -0.403676f, -0.539981f, -0.405564f, 0.045437f, 0.333834f, 0.378018f, 0.813728f, 0.739090f, 0.652436f, 0.702156f, 0.518534f, 0.262595f, 0.080561f, -0.057601f, -0.395771f, -0.477979f, -0.510843f, -0.576535f, -0.546255f, -0.466408f, -0.300845f, -0.219311f, -0.213687f, 0.040207f, 0.129775f, 0.253937f, 0.605567f, 0.628087f, 0.430040f, 0.536680f, 0.227312f, -0.074873f, -0.177831f, -0.276314f, -0.377662f, -0.274295f, -0.182885f, -0.182830f, -0.062724f, -0.017867f, 0.001564f, 0.096162f, 0.123147f, 0.116542f, 0.179722f, 0.112372f, 0.073199f, 0.089846f, -0.053619f, -0.050405f, 0.015222f, -0.146564f, -0.103186f, -0.038854f, -0.140850f, -0.087843f, -0.009880f, -0.142627f, -0.149792f, -0.100345f, -0.147017f, -0.097409f, 0.110381f, 0.205637f, 0.328545f, 0.483885f, 0.452357f, 0.386246f, 0.363853f, 0.195762f, -0.060541f, -0.304240f, -0.536754f, -0.638208f, -0.574856f, -0.466431f, -0.351625f, -0.166212f, 0.051992f, + 0.206652f, 0.291473f, 0.313665f, 0.277567f, 0.246647f, 0.230173f, 0.231002f, 0.161003f, 0.074588f, 0.034070f, -0.022681f, -0.067989f, -0.062822f, -0.109956f, -0.119442f, -0.084848f, -0.065752f, -0.085113f, -0.083658f, -0.105773f, -0.122246f, -0.120958f, -0.105661f, -0.086342f, -0.029097f, 0.042867f, 0.098428f, 0.132050f, 0.169328f, 0.167420f, 0.139304f, 0.099769f, 0.060177f, 0.022582f, 0.017334f, 0.002145f, -0.022542f, -0.041013f, -0.046359f, -0.060688f, -0.068430f, -0.075706f, -0.082217f, -0.086282f, -0.059279f, -0.033349f, -0.010640f, -0.000256f, 0.012583f, 0.023326f, 0.041188f, 0.042213f, 0.029437f, 0.013334f, 0.021995f, 0.032618f, 0.034213f, 0.031990f, 0.030640f, 0.026780f, 0.030701f, 0.027645f, 0.014467f, -0.003080f, -0.012952f, -0.033620f, -0.041303f, -0.044392f, -0.046445f, -0.052529f, -0.046441f, -0.048376f, -0.043988f, -0.026937f, -0.003737f, 0.018547f, 0.048618f, 0.067841f, 0.080046f, 0.076010f, 0.058682f, 0.027101f, -0.000405f, -0.023818f, -0.032431f, -0.038471f, -0.033053f, -0.027039f, -0.017392f, -0.011599f, -0.005677f, -0.005047f, -0.000456f, 0.000877f, 0.004695f, 0.004194f, + 0.007037f, 0.004897f, 0.005897f, 0.003023f, 0.003121f, -0.000088f, 0.000571f, -0.001652f, 0.000218f, -0.001244f, 0.000740f, -0.000904f} + }, + { + {-0.006754f, 0.025660f, 0.013711f, 0.011272f, 0.006412f, -0.002808f, -0.000721f, -0.002716f, -0.005269f, -0.007511f, -0.005169f, -0.007672f, -0.003118f, 0.007158f, 0.002561f, -0.000450f, 0.000089f, 0.004670f, 0.002305f, -0.003069f, -0.003128f, -0.002499f, -0.013319f, 0.005497f, 0.001511f, 0.000066f, -0.002663f, 0.001680f, 0.000345f, -0.003771f, 0.002046f, 0.004853f, 0.000092f, -0.006186f, -0.001447f, -0.002705f, -0.002737f, 0.000701f, 0.006022f, -0.001582f, 0.001514f, -0.007068f, 0.004625f, -0.008718f, 0.005647f, 0.001176f, 0.000451f, 0.000021f, 0.005621f, -0.006700f, -0.004814f, -0.009113f, 0.002535f, 0.001589f, 0.000576f, 0.005137f, -0.005464f, 0.001170f, -0.000634f, 0.000112f, -0.003947f, 0.003558f, 0.001775f, -0.003041f, 0.005726f, -0.008950f, 0.004222f, -0.004898f, 0.009224f, 0.004109f, 0.001737f, 0.000621f, -0.001678f, -0.011153f, 0.008614f, -0.002696f, -0.000138f, 0.001430f, 0.002507f, 0.001998f, 0.002382f, 0.002659f, -0.000668f, 0.000759f, -0.001097f, 0.002598f, -0.000051f, 0.001471f, -0.003232f, 0.001131f, -0.000386f, 0.000718f, 0.001493f, 0.003608f, -0.000061f, -0.000634f, + 0.001371f, 0.001420f, -0.001322f, 0.001861f, -0.002069f, 0.001819f, 0.000538f, 0.001619f, 0.000274f, 0.001044f, -0.000428f, 0.000408f, 0.001573f, 0.000698f, -0.000087f, 0.001078f, -0.000085f, 0.000723f, 0.000783f, -0.000094f, 0.001022f, -0.000290f, 0.024748f, 0.011575f, 0.016208f, 0.004255f, 0.005610f, -0.001078f, 0.006433f, 0.000516f, 0.005734f, -0.004262f, 0.011040f, -0.002907f, -0.012298f, -0.003555f, 0.000403f, 0.000542f, -0.003805f, 0.009403f, 0.000675f, 0.003588f, 0.009370f, 0.004374f, 0.000253f, -0.000152f, 0.002345f, -0.008553f, -0.005419f, 0.003206f, 0.004161f, -0.003200f, 0.001025f, 0.003977f, -0.008199f, 0.011633f, -0.001061f, 0.001598f, -0.001721f, 0.004235f, 0.006218f, 0.000169f, -0.006235f, -0.006646f, 0.012915f, 0.000150f, -0.003586f, -0.000676f, 0.007501f, 0.005302f, -0.003654f, -0.005261f, -0.011117f, -0.003633f, -0.004474f, 0.000333f, -0.004027f, 0.000870f, -0.010797f, -0.004608f, 0.001415f, -0.004596f, 0.002553f, 0.004278f, -0.002073f, -0.000430f, 0.002218f, -0.002916f, 0.004455f, -0.000452f, 0.005567f, -0.000068f, -0.001719f, -0.006430f, 0.000859f, -0.007944f, + 0.002603f, 0.000009f, 0.004569f, -0.000053f, 0.004688f, 0.005718f, 0.005133f, 0.000058f, -0.003090f, -0.000379f, -0.001036f, 0.006327f, -0.001593f, 0.000697f, 0.004279f, 0.004190f, -0.000152f, 0.002306f, 0.001022f, 0.002096f, -0.000761f, 0.002566f, -0.000870f, 0.003845f, 0.001061f, 0.000632f, -0.000176f, 0.000228f, 0.000556f, 0.001870f, 0.005177f, -0.016582f, -0.005379f, -0.003773f, 0.002869f, 0.003279f, -0.011366f, -0.005085f, -0.002268f, 0.002724f, 0.006014f, 0.001899f, 0.008252f, -0.006827f, -0.009887f, 0.002858f, 0.000316f, -0.001773f, -0.006779f, 0.021925f, -0.001162f, 0.005832f, 0.001291f, 0.000682f, -0.000512f, -0.003380f, -0.008355f, -0.006546f, -0.002068f, 0.005601f, -0.004676f, 0.011479f, -0.003907f, -0.001073f, -0.009429f, -0.011201f, -0.000985f, -0.007145f, -0.003992f, 0.015269f, -0.008368f, -0.002316f, -0.008125f, 0.002968f, 0.000366f, -0.002942f, -0.008537f, -0.001625f, 0.000050f, -0.009669f, 0.001119f, -0.005206f, 0.007713f, 0.005083f, -0.004473f, -0.002372f, -0.002482f, 0.002368f, -0.000443f, 0.006141f, -0.003198f, -0.004038f, -0.004166f, 0.013924f, 0.012556f, -0.004318f, + -0.012134f, 0.001641f, 0.003727f, -0.000390f, 0.003540f, -0.005033f, 0.000970f, -0.005837f, 0.004145f, 0.000317f, 0.013353f, 0.008245f, 0.012694f, -0.011578f, 0.004993f, 0.007747f, 0.000278f, 0.005879f, 0.004216f, 0.000875f, 0.008727f, -0.001610f, -0.000949f, 0.002239f, 0.001196f, -0.003594f, 0.003470f, -0.002754f, -0.002377f, -0.000249f, 0.000871f, -0.000394f, 0.001307f, -0.002058f, 0.001006f, -0.000264f, 0.000254f, 0.001132f, 0.001591f, 0.000767f, 0.001847f, 0.001748f, -0.001352f, -0.001763f, 0.001368f, 0.000511f, -0.003164f, -0.001286f, 0.002512f, -0.001543f, -0.054653f, -0.008753f, -0.015811f, -0.017757f, 0.004712f, -0.005957f, -0.015600f, -0.012778f, 0.002067f, -0.012589f, 0.001713f, 0.018966f, -0.004781f, 0.008184f, 0.006059f, 0.016003f, 0.004054f, -0.011019f, 0.002459f, 0.017385f, -0.008166f, 0.008691f, -0.012858f, -0.011569f, 0.003734f, 0.005038f, 0.013522f, 0.000870f, -0.008428f, 0.007970f, -0.005681f, 0.006132f, -0.000784f, 0.008655f, -0.007360f, -0.004654f, -0.008200f, 0.000173f, 0.001398f, -0.003115f, 0.006161f, -0.014265f, 0.001768f, 0.014518f, 0.003055f, -0.004035f, + 0.005491f, -0.007327f, -0.003822f, -0.018032f, -0.005436f, -0.000540f, 0.002757f, 0.000367f, 0.009647f, -0.014468f, 0.001337f, -0.001936f, 0.007244f, 0.003971f, -0.002884f, 0.010408f, -0.009153f, -0.001166f, -0.007360f, -0.013905f, -0.005955f, -0.003158f, -0.004021f, 0.010552f, -0.009475f, -0.015030f, 0.000521f, 0.004993f, -0.001585f, -0.004300f, 0.005114f, 0.005817f, -0.004293f, -0.003353f, -0.005937f, -0.002371f, 0.012067f, -0.005589f, 0.006621f, -0.001957f, -0.000284f, -0.001070f, -0.000480f, -0.006244f, 0.001469f, -0.003720f, -0.000253f, -0.000400f, -0.000979f, 0.000194f, -0.001521f, -0.001926f, -0.002005f, -0.000487f, 0.000542f, -0.001173f, 0.001944f, 0.000939f, -0.027188f, 0.015531f, 0.017415f, -0.000902f, 0.009761f, 0.004502f, 0.020583f, 0.027450f, 0.003494f, 0.003639f, 0.007839f, 0.003460f, 0.004535f, -0.003838f, 0.005404f, -0.004458f, 0.007184f, 0.008445f, -0.023488f, 0.012228f, -0.002589f, -0.004287f, -0.007276f, -0.009441f, 0.003824f, 0.006738f, 0.010675f, 0.002155f, 0.001807f, -0.013638f, 0.000588f, -0.003930f, -0.004590f, -0.001958f, 0.001822f, 0.000865f, -0.001060f, 0.013550f, + -0.000712f, -0.004396f, 0.004442f, -0.005160f, 0.006897f, 0.009183f, 0.010176f, 0.005371f, 0.001109f, -0.005590f, 0.011369f, 0.003694f, 0.001525f, 0.001272f, 0.001492f, 0.000903f, -0.006587f, -0.009190f, 0.008415f, -0.008560f, 0.008062f, 0.007445f, 0.005404f, -0.001111f, -0.006109f, 0.005594f, 0.007165f, 0.015978f, 0.007338f, 0.006082f, 0.003725f, -0.015467f, -0.004782f, 0.001992f, -0.002540f, 0.006773f, -0.013467f, 0.000758f, 0.004452f, -0.012521f, -0.001184f, 0.004308f, -0.003052f, 0.001696f, -0.007384f, 0.002868f, 0.000951f, -0.003072f, 0.005813f, 0.003499f, 0.000234f, 0.006453f, -0.002884f, -0.002728f, -0.000638f, 0.001406f, 0.002608f, 0.009743f, 0.001581f, 0.003382f, 0.002282f, -0.000002f, 0.002114f, -0.001506f, -0.001830f, -0.002509f, 0.001708f, -0.001339f, -0.001232f, 0.001177f, 0.001031f, -0.001093f, 0.003282f, -0.001828f, 0.002297f, 0.002201f, -0.000957f, 0.003265f, 0.000920f, 0.001444f, 0.001590f, 0.000305f, 0.000347f, 0.003781f, -0.000260f, 0.050460f, 0.015073f, 0.003836f, 0.009740f, 0.025284f, 0.010036f, 0.030465f, 0.007328f, -0.006579f, -0.002283f, -0.002429f, + -0.003002f, 0.008353f, 0.012905f, -0.005927f, 0.002692f, 0.009187f, -0.003472f, -0.012495f, 0.009924f, -0.001067f, 0.004667f, -0.004176f, -0.006428f, 0.010436f, 0.002310f, -0.000825f, -0.003029f, -0.011369f, -0.005776f, 0.006348f, 0.001471f, -0.003829f, -0.002105f, 0.001867f, 0.004240f, 0.011688f, 0.003569f, -0.010529f, -0.002529f, 0.000817f, -0.003429f, 0.003962f, 0.005403f, -0.010609f, -0.013042f, -0.000623f, 0.003176f, -0.001245f, 0.009946f, -0.018351f, -0.003994f, -0.008252f, -0.010469f, -0.001010f, -0.000870f, 0.002863f, 0.009836f, 0.000035f, 0.001429f, 0.003332f, -0.001659f, 0.013334f, 0.008367f, -0.010703f, -0.009562f, 0.007370f, 0.015938f, -0.001249f, -0.007534f, 0.015907f, 0.008290f, 0.003790f, -0.006984f, -0.007389f, 0.007749f, 0.000537f, 0.005852f, -0.003437f, -0.011498f, -0.006181f, -0.007838f, -0.004808f, 0.004485f, -0.006256f, 0.000842f, 0.002864f, -0.002334f, 0.002782f, 0.001891f, 0.002389f, 0.001295f, -0.004000f, 0.002264f, -0.001174f, -0.002206f, -0.000873f, 0.003057f, 0.002545f, 0.000385f, -0.003419f, 0.003134f, -0.001275f, 0.005431f, -0.000727f, 0.000732f, -0.005070f, + -0.006701f, 0.002352f, -0.006307f, -0.001098f, -0.000984f, -0.003434f, -0.001720f, 0.000889f, -0.005656f, -0.002235f, -0.000582f, 0.000746f, -0.001185f, 0.004096f, 0.000559f, -0.001389f, 0.024896f, 0.011811f, 0.022437f, -0.007695f, 0.000370f, -0.005848f, 0.022604f, -0.023249f, -0.003086f, 0.005717f, -0.004229f, -0.004755f, 0.007694f, -0.002780f, -0.006919f, 0.019478f, 0.011305f, 0.002077f, 0.033419f, -0.009268f, -0.002021f, -0.007222f, 0.000444f, 0.005300f, -0.008386f, -0.001291f, -0.004260f, 0.012494f, -0.010530f, 0.002667f, 0.000939f, -0.003557f, 0.001351f, 0.007267f, 0.005277f, -0.010276f, -0.017402f, 0.000228f, 0.003818f, 0.014384f, 0.017296f, 0.016834f, 0.001750f, -0.010000f, 0.012445f, -0.029891f, -0.004688f, -0.011854f, -0.017088f, 0.011908f, -0.003775f, -0.005786f, 0.009633f, -0.003610f, -0.004860f, 0.025735f, 0.000515f, -0.007836f, 0.009235f, 0.000509f, 0.007079f, 0.004875f, 0.003591f, 0.015518f, -0.009205f, -0.005964f, 0.001135f, -0.013670f, 0.000106f, 0.002364f, -0.003206f, 0.004438f, 0.007980f, 0.016325f, -0.006012f, 0.005320f, 0.014482f, 0.008474f, 0.004448f, 0.002506f, + -0.004691f, -0.010613f, 0.005559f, 0.007768f, -0.001510f, 0.000610f, -0.001423f, -0.001519f, -0.005709f, 0.000977f, -0.001590f, 0.000832f, -0.005314f, -0.002981f, 0.000251f, -0.001160f, 0.005371f, 0.002047f, 0.000257f, -0.007330f, -0.003001f, 0.003357f, -0.003929f, -0.000265f, 0.002992f, 0.002611f, -0.004581f, 0.004296f, 0.003744f, 0.000960f, 0.004870f, 0.003974f, -0.008023f, -0.001668f, -0.002935f, 0.002051f, 0.004727f, 0.005263f, -0.000890f, -0.003240f, 0.000964f, -0.001852f, -0.038540f, -0.057887f, -0.009779f, 0.002874f, -0.001025f, 0.001604f, -0.002733f, -0.011610f, -0.006568f, -0.009257f, -0.002519f, 0.009409f, 0.011200f, -0.010201f, -0.015070f, 0.012852f, 0.002629f, -0.008265f, 0.000634f, -0.001381f, -0.009210f, -0.007703f, 0.021314f, 0.010858f, -0.011528f, 0.005822f, 0.002369f, 0.009123f, -0.011190f, 0.012385f, -0.012443f, 0.008505f, 0.005515f, -0.002642f, -0.005838f, 0.005484f, -0.023162f, -0.011489f, 0.014089f, 0.022767f, 0.012584f, -0.015979f, 0.000306f, -0.011340f, 0.015084f, 0.003104f, 0.003857f, 0.001045f, -0.012567f, 0.006031f, 0.018463f, 0.002059f, 0.013936f, 0.009889f, + 0.006336f, 0.010684f, 0.022658f, -0.006352f, -0.022990f, 0.011061f, -0.000028f, -0.005467f, 0.001071f, 0.019640f, -0.008141f, -0.013729f, 0.006610f, -0.003672f, -0.002435f, -0.005230f, -0.003183f, -0.006210f, -0.010815f, -0.005436f, 0.013087f, -0.018047f, -0.011403f, -0.006694f, -0.013039f, -0.012632f, -0.000870f, 0.007748f, -0.011971f, -0.000278f, -0.004506f, -0.005069f, -0.010802f, -0.006817f, -0.012388f, -0.000724f, -0.009555f, -0.000800f, -0.000359f, 0.008551f, 0.006007f, -0.004444f, -0.004800f, -0.006340f, -0.002019f, -0.004508f, -0.004359f, 0.005151f, -0.008479f, 0.003082f, 0.000606f, -0.005397f, 0.000463f, -0.003560f, 0.001902f, -0.001881f, -0.006953f, -0.008446f, -0.000191f, 0.002117f, 0.003358f, -0.001669f, 0.001359f, 0.002561f, -0.000115f, -0.004453f, -0.000708f, -0.005681f, 0.000469f, 0.002512f, 0.001919f, 0.002383f, -0.022093f, -0.014690f, 0.003942f, 0.003389f, 0.029876f, -0.026138f, -0.017582f, -0.010204f, -0.004728f, -0.003397f, 0.009785f, 0.009103f, -0.013565f, 0.013948f, -0.003093f, 0.006228f, -0.009719f, 0.020880f, -0.003914f, -0.008110f, 0.013792f, 0.009641f, 0.008099f, -0.014497f, + -0.013293f, 0.017648f, -0.009155f, 0.005085f, 0.004536f, -0.006632f, 0.015328f, 0.004438f, 0.000162f, 0.003197f, 0.011298f, 0.014104f, 0.004575f, -0.012858f, 0.003129f, -0.018277f, 0.010982f, 0.004558f, -0.020102f, 0.014214f, 0.003519f, -0.010706f, 0.018744f, 0.005747f, -0.004859f, 0.010674f, -0.001511f, 0.020353f, -0.004519f, -0.005290f, -0.004178f, -0.002839f, 0.026851f, 0.005484f, 0.000625f, 0.007112f, -0.022257f, -0.014154f, -0.015073f, 0.001525f, 0.014361f, 0.001747f, 0.017771f, -0.022902f, -0.009200f, -0.014583f, -0.013227f, 0.033072f, -0.003223f, 0.011731f, 0.008670f, -0.007257f, -0.001512f, -0.004755f, 0.002668f, 0.001623f, 0.009218f, 0.005404f, 0.018310f, -0.009916f, 0.001656f, -0.003228f, 0.004093f, -0.000249f, -0.000212f, -0.000177f, -0.003730f, -0.017267f, 0.006524f, 0.003881f, 0.002680f, -0.004675f, -0.001479f, -0.002322f, -0.009436f, -0.000730f, -0.003296f, -0.006340f, 0.003611f, -0.005368f, 0.002364f, 0.002945f, 0.002531f, 0.003813f, -0.006539f, -0.003742f, -0.004395f, -0.004216f, 0.002506f, 0.004647f, 0.002907f, -0.001689f, -0.000794f, -0.001298f, -0.001969f, 0.006807f, + -0.002279f, 0.004813f, 0.003178f, -0.001992f, 0.002176f, -0.001479f, 0.000093f, 0.001617f, 0.001941f, -0.030088f, 0.009404f, -0.012933f, 0.007333f, -0.009053f, 0.024305f, 0.004076f, -0.017015f, 0.002659f, -0.017347f, 0.014061f, 0.026861f, -0.022920f, 0.015131f, 0.005579f, -0.000668f, 0.011052f, 0.028629f, -0.010968f, -0.000027f, 0.008733f, -0.031254f, 0.001811f, 0.014220f, -0.008711f, 0.010192f, 0.011076f, -0.005702f, 0.028027f, -0.013981f, -0.025395f, -0.010914f, 0.003034f, 0.000678f, -0.005215f, -0.010941f, 0.007625f, 0.007082f, -0.000011f, -0.017866f, -0.004216f, -0.004527f, 0.011915f, -0.007825f, 0.047016f, -0.005916f, 0.006711f, -0.002164f, -0.002023f, -0.022824f, 0.002319f, 0.016928f, 0.013671f, 0.045878f, -0.004958f, -0.004441f, -0.009527f, -0.001810f, -0.012942f, -0.000979f, 0.018371f, -0.009796f, -0.001930f, 0.003331f, 0.004312f, 0.018086f, 0.014688f, 0.004161f, 0.035485f, -0.006720f, -0.032926f, -0.032933f, -0.023257f, -0.004786f, 0.010357f, -0.003252f, -0.008680f, 0.015664f, -0.000989f, 0.013908f, -0.008612f, -0.001636f, 0.011262f, 0.009581f, -0.003523f, -0.003371f, 0.001114f, + 0.002929f, -0.003695f, -0.007698f, -0.011095f, -0.003737f, -0.004740f, -0.001404f, -0.007925f, 0.005881f, -0.002415f, 0.001759f, -0.004037f, -0.005680f, 0.007546f, 0.003391f, -0.003928f, -0.001064f, -0.003230f, -0.003397f, 0.003261f, -0.002122f, -0.003813f, -0.007499f, 0.005857f, 0.002326f, -0.003270f, -0.005685f, -0.007592f, -0.001429f, -0.005240f, -0.005254f, 0.006302f, -0.003784f, 0.001205f, 0.000241f, -0.002804f, 0.002716f, 0.001181f, -0.001050f, -0.001468f, -0.001686f, 0.053432f, -0.038478f, -0.029321f, -0.009265f, -0.018542f, -0.021035f, 0.025908f, 0.010645f, 0.005167f, -0.008033f, -0.005205f, 0.031628f, -0.009157f, -0.013090f, -0.037673f, -0.005281f, -0.000907f, 0.017956f, 0.006597f, -0.007472f, 0.002367f, 0.015785f, 0.007106f, 0.009956f, 0.024185f, 0.030496f, 0.008471f, -0.011055f, 0.007881f, -0.017950f, 0.012557f, 0.010458f, -0.006408f, 0.000867f, -0.013984f, 0.005952f, 0.000492f, -0.027045f, 0.026740f, -0.002117f, -0.012263f, 0.016719f, -0.025136f, -0.005550f, 0.027947f, 0.016162f, -0.000202f, 0.001352f, -0.034846f, 0.012608f, 0.019728f, 0.011488f, 0.006678f, -0.001578f, -0.025649f, + -0.075577f, -0.005860f, 0.015836f, 0.021545f, -0.001581f, -0.022051f, 0.037888f, -0.017146f, 0.017509f, 0.028639f, 0.023800f, 0.004603f, 0.028718f, 0.003483f, 0.010511f, 0.006264f, 0.017610f, 0.003663f, 0.005894f, 0.036352f, -0.011640f, -0.007569f, 0.030949f, 0.016213f, 0.008739f, -0.012267f, 0.003543f, 0.025140f, -0.002204f, 0.020224f, 0.005065f, 0.004690f, 0.013021f, -0.006362f, -0.000095f, 0.001709f, -0.000782f, -0.005221f, 0.010289f, 0.004929f, -0.013022f, 0.007861f, 0.005622f, 0.007596f, 0.004103f, -0.003470f, 0.000559f, -0.003887f, -0.004389f, 0.006453f, 0.008228f, 0.003637f, 0.005227f, -0.003578f, -0.003336f, -0.002213f, -0.004233f, -0.005894f, -0.008934f, 0.001896f, -0.005499f, 0.005067f, -0.001610f, 0.003170f, -0.008177f, -0.005290f, -0.001204f, -0.002358f, -0.001952f, -0.003485f, 0.001815f, 0.009045f, 0.009548f, 0.003890f, 0.001399f, -0.004388f, 0.007712f, 0.027462f, 0.024701f, -0.005995f, -0.013757f, -0.001800f, -0.008412f, 0.029988f, 0.018296f, -0.050345f, -0.006319f, 0.004834f, -0.024674f, 0.010173f, -0.035661f, 0.027216f, 0.005715f, -0.003459f, 0.013798f, 0.007863f, + -0.008058f, -0.011092f, -0.009275f, 0.038154f, 0.000804f, 0.000346f, 0.007598f, -0.004444f, 0.014335f, 0.044832f, 0.017318f, -0.005829f, -0.008495f, -0.005871f, 0.024921f, 0.009721f, 0.025245f, 0.018551f, 0.012261f, 0.008082f, -0.011959f, -0.011812f, 0.010897f, -0.025638f, 0.003824f, -0.013338f, -0.012315f, 0.001490f, 0.017470f, 0.003138f, 0.000809f, 0.007090f, -0.006348f, 0.030912f, 0.038687f, 0.045593f, -0.000851f, 0.021128f, -0.027350f, 0.010903f, 0.014850f, -0.011669f, 0.022274f, -0.017743f, -0.037214f, 0.005439f, -0.019793f, -0.002293f, 0.001115f, -0.018869f, 0.004287f, 0.027171f, -0.016754f, -0.015193f, 0.012805f, 0.025213f, -0.001683f, -0.008492f, 0.022079f, 0.002588f, 0.004504f, -0.014993f, -0.003780f, -0.000497f, 0.018142f, -0.008914f, 0.000974f, -0.003823f, 0.003561f, 0.000207f, 0.003096f, 0.005308f, 0.002806f, 0.000592f, 0.001333f, 0.004637f, 0.004758f, -0.003708f, -0.008972f, -0.000975f, -0.001755f, -0.007322f, -0.010081f, -0.000195f, -0.004888f, 0.007407f, -0.006957f, 0.005752f, 0.008622f, -0.000117f, -0.015445f, -0.001108f, 0.002518f, -0.004848f, -0.007495f, 0.001445f, + 0.003768f, 0.023780f, 0.007410f, 0.007594f, -0.001094f, 0.000923f, -0.002380f, 0.007199f, -0.002020f, 0.007638f, 0.019257f, 0.018218f, -0.002635f, -0.000693f, -0.003672f, 0.001237f, 0.005743f, 0.007289f, 0.010098f, 0.002261f, -0.031790f, 0.057906f, 0.003690f, 0.015024f, 0.044327f, -0.016419f, 0.004548f, -0.008502f, 0.011698f, -0.012828f, 0.012798f, -0.031238f, -0.036966f, -0.001191f, -0.021893f, -0.001739f, -0.002041f, -0.002550f, -0.006249f, 0.002295f, -0.010256f, 0.009166f, -0.029401f, -0.011827f, -0.039666f, -0.002086f, 0.009086f, 0.018937f, 0.042815f, 0.023662f, 0.007389f, 0.005381f, 0.012281f, 0.009404f, 0.007206f, 0.017206f, 0.018107f, -0.005850f, -0.036261f, -0.036018f, -0.024667f, -0.014819f, 0.003562f, 0.012012f, -0.013314f, -0.021158f, -0.036804f, 0.000961f, -0.014093f, 0.033445f, -0.015017f, 0.008327f, -0.025569f, -0.012413f, -0.004537f, -0.010595f, -0.049362f, -0.051463f, 0.014009f, 0.005144f, 0.001253f, 0.026219f, 0.014943f, 0.021023f, 0.016947f, -0.032110f, -0.007056f, 0.059897f, -0.011216f, -0.022826f, 0.008718f, -0.013331f, 0.006023f, -0.037169f, 0.014895f, -0.017120f, + 0.002412f, -0.002564f, 0.024229f, 0.001315f, 0.009638f, -0.021206f, 0.003864f, -0.012016f, -0.005492f, -0.014591f, -0.011088f, 0.007425f, 0.008325f, -0.019404f, -0.006623f, 0.001262f, 0.003484f, 0.004659f, 0.002384f, -0.007608f, 0.008263f, 0.003341f, 0.002726f, -0.001140f, -0.000713f, 0.002513f, 0.008358f, -0.009306f, 0.008440f, -0.002432f, -0.000481f, -0.003405f, 0.005288f, -0.005534f, -0.003345f, 0.007441f, -0.014487f, -0.000435f, 0.002585f, -0.008849f, -0.003205f, -0.020181f, 0.014193f, 0.016857f, -0.001380f, 0.003864f, 0.004296f, 0.005648f, -0.009170f, 0.009326f, 0.005811f, 0.007247f, -0.006764f, 0.003889f, 0.005441f, 0.008594f, 0.034582f, 0.026027f, 0.003601f, 0.027666f, -0.005027f, -0.011497f, 0.015425f, -0.021358f, -0.041302f, -0.062131f, 0.005385f, 0.001206f, 0.024165f, 0.017416f, -0.022924f, -0.011932f, -0.060389f, -0.004169f, -0.028022f, 0.006486f, -0.014005f, -0.006875f, -0.011462f, -0.004588f, -0.004525f, -0.021139f, -0.009269f, -0.024619f, 0.019764f, -0.005020f, 0.016944f, 0.043309f, -0.022722f, 0.012394f, -0.003358f, -0.010872f, 0.011388f, -0.023318f, -0.039289f, 0.018864f, + 0.009486f, 0.018763f, 0.012006f, -0.082827f, -0.037346f, 0.010929f, -0.027328f, -0.002433f, -0.023317f, 0.034526f, 0.041917f, -0.002143f, 0.046313f, 0.006405f, 0.021156f, -0.006186f, -0.001311f, -0.025883f, 0.016548f, 0.033231f, 0.007439f, 0.055399f, 0.001529f, 0.007545f, -0.016077f, -0.024487f, 0.033066f, 0.051989f, 0.018398f, 0.010025f, 0.005352f, 0.019610f, 0.001921f, 0.003681f, -0.048520f, -0.035831f, -0.003482f, 0.002521f, 0.006681f, 0.036573f, 0.039635f, -0.007332f, 0.002810f, -0.013600f, 0.008428f, -0.025311f, 0.000866f, -0.026779f, -0.022413f, 0.011626f, -0.000440f, 0.002886f, -0.014808f, 0.009595f, 0.012018f, 0.007889f, 0.012167f, 0.014067f, 0.001441f, -0.008048f, 0.006408f, -0.010976f, -0.002455f, -0.006782f, -0.015823f, -0.004631f, -0.008657f, -0.007161f, 0.013521f, 0.007336f, -0.004532f, -0.010555f, -0.015674f, -0.010406f, 0.010924f, -0.010554f, -0.000839f, 0.000856f, 0.007538f, -0.014975f, -0.011770f, 0.005328f, 0.018808f, 0.011886f, 0.004983f, 0.000002f, -0.011004f, -0.001332f, -0.006620f, -0.012935f, 0.022348f, -0.032254f, -0.016180f, -0.060429f, -0.075732f, -0.055824f, + -0.025769f, 0.017316f, -0.000683f, -0.013101f, -0.027792f, 0.000243f, 0.049660f, 0.024596f, -0.043798f, -0.006994f, -0.009207f, -0.030634f, -0.005689f, 0.002458f, 0.020793f, 0.015638f, -0.032727f, 0.023559f, -0.018574f, 0.010104f, -0.017317f, 0.005364f, -0.025120f, -0.009139f, 0.012152f, -0.044857f, -0.008802f, -0.016804f, 0.014597f, -0.011035f, -0.041803f, 0.049124f, 0.047013f, 0.000812f, -0.019263f, 0.026836f, -0.063957f, -0.019810f, 0.018806f, -0.021292f, -0.013737f, -0.001482f, -0.020798f, 0.004249f, -0.005494f, -0.042587f, 0.018161f, -0.005289f, -0.013325f, -0.014467f, -0.011476f, -0.002519f, -0.011890f, -0.017971f, 0.035288f, -0.016735f, -0.016950f, 0.017024f, -0.000633f, 0.058358f, -0.011830f, -0.035936f, 0.020454f, -0.018697f, -0.016191f, -0.028007f, 0.019344f, 0.036045f, -0.070224f, 0.005640f, 0.058948f, -0.009478f, -0.003843f, -0.023253f, 0.040130f, -0.002713f, -0.022089f, -0.002780f, -0.020749f, -0.016380f, 0.029023f, -0.017408f, -0.001653f, -0.009605f, -0.012385f, -0.020367f, 0.008490f, 0.006981f, 0.010503f, -0.002318f, -0.016703f, -0.011212f, 0.000420f, 0.003022f, -0.025346f, -0.007092f, + -0.016371f, 0.025160f, -0.008554f, 0.001907f, 0.003379f, 0.003216f, 0.002473f, -0.020244f, 0.013555f, 0.000802f, -0.007964f, 0.018380f, 0.002640f, 0.024014f, -0.004424f, 0.027728f, 0.006215f, 0.011258f, 0.013335f, -0.017767f, -0.011980f, 0.008841f, -0.014897f, -0.011370f, 0.004177f, 0.000174f, -0.010528f, -0.024058f, 0.011620f, -0.003361f, -0.047757f, 0.095441f, 0.068151f, -0.001360f, -0.018180f, 0.015086f, -0.057233f, 0.000878f, 0.071280f, -0.012642f, -0.024761f, 0.001082f, 0.080772f, -0.011655f, 0.017734f, -0.017275f, -0.036528f, -0.029642f, -0.007478f, -0.013606f, 0.014873f, 0.020535f, 0.001108f, -0.030515f, -0.042574f, -0.039277f, -0.006343f, -0.008738f, -0.021138f, 0.019641f, 0.015980f, -0.017256f, -0.020910f, -0.022934f, 0.012791f, 0.004315f, 0.015726f, 0.040218f, -0.000275f, -0.034609f, 0.023375f, 0.009082f, 0.007868f, 0.002307f, -0.000686f, -0.016766f, 0.029832f, 0.015145f, -0.012007f, -0.014425f, -0.009516f, -0.039323f, 0.010754f, 0.028541f, 0.008663f, -0.027592f, 0.032042f, 0.023363f, 0.013222f, 0.003406f, -0.016918f, 0.008654f, -0.055898f, 0.008551f, -0.003539f, 0.049630f, + -0.017966f, -0.024849f, 0.010499f, -0.013061f, -0.001121f, -0.036194f, -0.006604f, -0.009856f, 0.048287f, -0.031657f, -0.058744f, -0.038457f, -0.076313f, 0.014732f, -0.015612f, -0.005290f, -0.040786f, -0.026207f, -0.067472f, -0.030093f, -0.023670f, -0.003744f, 0.016404f, -0.022021f, -0.003926f, -0.004393f, -0.003553f, -0.006285f, 0.014317f, -0.025571f, 0.010847f, -0.010240f, -0.019799f, 0.002731f, -0.005810f, 0.017776f, 0.009222f, 0.000039f, -0.010009f, 0.023028f, 0.021667f, 0.012820f, -0.008596f, -0.012011f, -0.011704f, -0.011026f, 0.024362f, 0.039714f, 0.004544f, 0.036453f, 0.040343f, 0.013106f, 0.000555f, -0.036626f, -0.004046f, 0.006339f, 0.005138f, -0.003833f, -0.010121f, -0.031110f, -0.000867f, 0.020137f, 0.003137f, -0.023496f, -0.006019f, -0.017799f, 0.090638f, 0.003669f, 0.014965f, -0.015069f, -0.029860f, -0.039959f, -0.013336f, 0.011396f, 0.026484f, 0.022088f, -0.019321f, -0.000028f, -0.040138f, -0.014556f, 0.014259f, -0.033649f, -0.018184f, -0.012699f, 0.048874f, 0.025647f, 0.026863f, 0.025561f, -0.028470f, 0.005313f, 0.010211f, 0.011666f, -0.002824f, 0.033138f, -0.007361f, 0.014648f, + 0.025544f, 0.009924f, 0.007037f, 0.021762f, 0.029662f, -0.017424f, -0.035048f, 0.023478f, -0.003876f, 0.000209f, -0.037036f, -0.034299f, 0.007830f, -0.017110f, -0.013468f, 0.030316f, -0.031218f, 0.040062f, 0.025719f, -0.017644f, 0.020964f, -0.023327f, -0.023690f, -0.028491f, 0.041200f, -0.028839f, 0.012929f, 0.012701f, -0.047382f, 0.004586f, 0.005396f, -0.037241f, -0.064434f, -0.057436f, 0.041824f, -0.043148f, -0.000888f, -0.038788f, -0.009079f, -0.027708f, -0.002443f, 0.018081f, 0.010898f, -0.028201f, 0.029218f, 0.034157f, 0.071077f, 0.018740f, -0.048007f, 0.016997f, -0.029599f, 0.016073f, -0.042244f, 0.022721f, -0.018170f, 0.003297f, -0.008786f, 0.017372f, -0.005350f, -0.016984f, -0.040556f, -0.040147f, 0.004339f, 0.004032f, 0.025366f, -0.018034f, -0.001877f, 0.039955f, 0.011139f, 0.027745f, 0.008241f, -0.007061f, -0.003168f, -0.009313f, -0.026767f, 0.009711f, -0.032263f, -0.018832f, 0.006795f, 0.026793f, -0.035202f, 0.019708f, 0.003558f, 0.025344f, -0.008646f, 0.014258f, 0.025337f, 0.028149f, 0.028070f, -0.012666f, 0.013653f, 0.022102f, 0.023614f, 0.004790f, 0.014069f, 0.007549f, + -0.010882f, 0.043823f, 0.020169f, 0.022174f, -0.018867f, -0.020858f, 0.005449f, 0.007379f, 0.008425f, -0.018172f, 0.001498f, -0.039797f, -0.000786f, 0.006819f, 0.007640f, -0.035103f, -0.036798f, -0.057890f, 0.040105f, 0.004201f, 0.013688f, -0.009480f, 0.021176f, -0.015831f, -0.015780f, 0.012022f, 0.030487f, 0.007208f, 0.019988f, 0.062436f, -0.009206f, -0.037684f, -0.080238f, -0.011413f, -0.031115f, -0.015245f, -0.019250f, -0.037225f, -0.026382f, -0.055600f, -0.006642f, -0.000914f, 0.019259f, 0.057550f, -0.048155f, -0.018539f, -0.008090f, 0.018793f, 0.020203f, 0.056992f, 0.007559f, -0.065281f, -0.015180f, 0.013276f, 0.050779f, 0.013278f, -0.079175f, -0.031773f, 0.071250f, 0.006388f, 0.071072f, -0.042074f, 0.002086f, 0.005447f, 0.042930f, -0.004157f, 0.039042f, 0.059018f, 0.008146f, 0.050042f, 0.034980f, 0.008355f, 0.069284f, 0.059235f, 0.019036f, 0.092458f, 0.070911f, 0.044440f, -0.075296f, -0.005053f, 0.029164f, 0.016896f, -0.001124f, -0.054600f, -0.065301f, -0.033846f, -0.093366f, -0.014908f, -0.069501f, -0.026613f, -0.018067f, -0.099894f, -0.094850f, -0.066021f, 0.032248f, 0.000808f, + -0.022129f, -0.001388f, -0.007452f, -0.002230f, -0.018677f, -0.009974f, 0.022916f, 0.009024f, 0.003741f, -0.003366f, 0.003407f, -0.004756f, 0.014085f, -0.002639f, -0.025175f, 0.043048f, 0.006704f, 0.010198f, -0.013145f, 0.001878f, -0.001815f, 0.022454f, -0.001470f, 0.012999f, -0.008103f, -0.023896f, 0.009186f, 0.018096f, 0.047577f, 0.042320f, 0.002518f, -0.000653f, 0.030261f, 0.014988f, 0.035396f, 0.029451f, -0.009784f, 0.033998f, 0.018854f, 0.006690f, 0.021203f, 0.013700f, -0.012505f, -0.005758f, -0.027683f, 0.016545f, -0.024744f, -0.011088f, -0.043249f, -0.026272f, 0.012675f, -0.050696f, 0.054165f, -0.022985f, 0.035157f, 0.018474f, -0.047100f, 0.007611f, 0.027883f, -0.017442f, -0.049168f, 0.032716f, -0.013947f, 0.028078f, -0.017068f, 0.007682f, 0.010318f, -0.029070f, -0.004372f, -0.012439f, -0.001488f, -0.048017f, -0.039129f, 0.048014f, 0.001319f, 0.019807f, -0.038221f, 0.039366f, 0.033745f, -0.025404f, 0.021190f, -0.037173f, -0.008977f, -0.020553f, 0.026598f, 0.067949f, -0.002030f, 0.082308f, -0.021513f, -0.003312f, 0.003081f, 0.008941f, -0.006401f, -0.045518f, 0.079364f, 0.052834f, + -0.007043f, 0.044459f, 0.033565f, 0.046122f, -0.018072f, -0.000524f, -0.082210f, 0.037340f, 0.037606f, -0.010096f, -0.014668f, 0.051471f, 0.026206f, 0.027364f, 0.062709f, 0.011080f, -0.033312f, -0.038839f, 0.011187f, -0.011891f, -0.047562f, 0.039213f, -0.054983f, 0.002745f, 0.011341f, -0.038178f, -0.060998f, -0.040606f, -0.016063f, 0.004689f, 0.047970f, 0.033011f, 0.014836f, -0.092073f, -0.026686f, 0.056048f, -0.005121f, -0.019775f, 0.015744f, -0.049750f, -0.031938f, 0.042478f, -0.000909f, 0.000937f, -0.018515f, 0.000595f, 0.024924f, -0.007632f, -0.019613f, 0.014873f, -0.007254f, -0.035328f, -0.020092f, 0.003811f, -0.003398f, -0.001883f, -0.000164f, -0.015339f, -0.000709f, -0.024182f, -0.033660f, 0.004728f, -0.003811f, -0.053854f, -0.006850f, -0.032506f, -0.019701f, -0.005733f, 0.007413f, 0.010168f, 0.028906f, -0.027105f, -0.019441f, 0.006274f, 0.028127f, -0.030035f, -0.033258f, 0.045927f, -0.007955f, -0.002297f, -0.009564f, -0.000017f, -0.019993f, 0.008412f, 0.020522f, 0.012029f, 0.017739f, 0.001603f, 0.006098f, 0.000744f, 0.001765f, 0.007097f, 0.014637f, -0.011688f, -0.003809f, 0.006399f, + 0.010378f, 0.006008f, -0.069127f, 0.039513f, 0.060201f, -0.000716f, 0.069450f, 0.021598f, -0.061190f, -0.036958f, -0.005249f, -0.020687f, -0.037399f, 0.039501f, 0.045231f, -0.003965f, 0.031344f, 0.043280f, -0.034283f, 0.030657f, 0.050911f, -0.002684f, -0.069805f, 0.027683f, -0.002413f, -0.013322f, 0.018703f, 0.052820f, -0.017161f, -0.025943f, 0.012425f, -0.022525f, -0.030500f, -0.001660f, 0.045615f, 0.039743f, -0.065788f, 0.021230f, 0.027581f, -0.043462f, -0.028448f, 0.053438f, -0.014809f, -0.076624f, -0.010214f, 0.065256f, -0.021506f, -0.110905f, 0.116447f, -0.032772f, -0.013806f, -0.057119f, 0.075136f, 0.025051f, -0.026310f, 0.055367f, -0.032578f, -0.023656f, -0.014374f, 0.140981f, 0.046630f, -0.058344f, -0.052307f, 0.054375f, -0.012734f, 0.078936f, 0.001212f, 0.059369f, -0.081283f, 0.065257f, 0.111435f, 0.011038f, -0.012222f, -0.019180f, -0.019689f, -0.044067f, 0.105147f, 0.071309f, -0.063209f, 0.018184f, -0.066424f, -0.010848f, 0.006976f, 0.014304f, 0.009145f, 0.020043f, 0.001690f, -0.072115f, 0.033830f, 0.004924f, -0.007674f, -0.001076f, 0.033257f, -0.013987f, 0.007275f, -0.010114f, + 0.017197f, -0.006389f, 0.004363f, -0.011118f, 0.021701f, 0.001361f, -0.004482f, 0.012896f, 0.017425f, -0.039265f, 0.004724f, 0.025524f, 0.009456f, -0.028163f, 0.015229f, 0.045505f, -0.044176f, -0.068013f, 0.013398f, 0.008985f, 0.026763f, 0.026767f, -0.003661f, -0.061393f, -0.020978f, 0.017402f, 0.008523f, 0.017886f, -0.009368f, 0.003070f, -0.002518f, -0.020180f, 0.018000f, -0.015689f, -0.007529f, 0.050430f, 0.115138f, 0.022325f, -0.044614f, -0.010566f, -0.010997f, 0.020247f, 0.017261f, -0.035934f, -0.051372f, 0.013717f, -0.043490f, 0.008661f, -0.027108f, -0.031055f, -0.006848f, 0.005280f, 0.014629f, -0.034625f, -0.014092f, -0.013727f, -0.043213f, 0.036158f, -0.013669f, 0.002328f, -0.006509f, -0.028765f, 0.011293f, 0.008081f, 0.000881f, -0.006228f, 0.000197f, -0.001073f, -0.017131f, -0.036611f, 0.015515f, -0.018191f, 0.015735f, 0.011125f, -0.036710f, -0.029644f, -0.003507f, -0.004296f, -0.004315f, -0.007904f, 0.029661f, -0.020676f, 0.002897f, -0.038894f, 0.033005f, -0.038112f, -0.020303f, 0.018861f, 0.000371f, -0.030564f, 0.024082f, -0.041077f, 0.002956f, 0.012276f, -0.001255f, 0.004412f, + 0.019481f, 0.009250f, -0.042432f, 0.021305f, 0.002826f, -0.025584f, 0.036072f, 0.014191f, -0.040285f, -0.004482f, -0.032159f, -0.004308f, 0.012844f, 0.010620f, -0.041018f, 0.051911f, -0.027683f, -0.015216f, 0.028771f, 0.019107f, 0.004562f, 0.019224f, -0.001786f, 0.026942f, -0.012216f, 0.005426f, -0.003526f, 0.012977f, 0.010056f, -0.007887f, -0.009559f, 0.010288f, -0.013156f, 0.001257f, 0.002083f, 0.001597f, -0.007797f, 0.001156f, -0.007285f, -0.011866f, -0.006533f, -0.012903f, -0.000829f, 0.009445f, 0.016556f, 0.006071f, 0.001835f, 0.008693f, 0.010793f, -0.015363f, 0.023292f, 0.005993f, -0.000879f, -0.015596f, -0.008911f, 0.007176f, 0.018401f, -0.003786f, -0.000512f, -0.009293f, 0.002922f, 0.002472f, -0.007768f, -0.010579f, -0.009339f, -0.024353f, -0.008933f, -0.009634f, -0.069422f, -0.086048f, -0.031922f, 0.261108f, 0.208490f, 0.138742f, 0.252190f, -0.099931f, -0.239073f, -0.076237f, -0.386241f, -0.150078f, 0.010696f, -0.090116f, 0.176827f, 0.242231f, 0.039357f, 0.154138f, 0.263880f, 0.006166f, 0.072601f, -0.016764f, -0.310562f, -0.256345f, -0.194207f, -0.192290f, -0.095142f, 0.147722f, + 0.078980f, 0.114433f, 0.324016f, 0.137986f, 0.019982f, 0.194611f, 0.090096f, -0.110650f, 0.037741f, -0.092724f, -0.314674f, -0.075158f, -0.164465f, -0.323506f, -0.053973f, 0.008053f, -0.079287f, 0.219801f, 0.252957f, 0.100380f, 0.297474f, 0.301706f, 0.056124f, 0.116667f, 0.052162f, -0.189777f, -0.213482f, -0.199152f, -0.359376f, -0.316913f, -0.121057f, -0.146854f, 0.031051f, 0.193093f, 0.263505f, 0.218402f, 0.336613f, 0.250375f, 0.134017f, 0.019178f, -0.042016f, -0.193532f, -0.236496f, -0.173999f, -0.207795f, -0.172666f, -0.007561f, -0.009151f, 0.039460f, 0.187655f, 0.090194f, 0.114894f, 0.179226f, -0.003091f, -0.055751f, -0.028955f, -0.112257f, -0.063573f, -0.037574f, -0.040787f, 0.046113f, 0.095403f, 0.036851f, 0.053122f, 0.059812f, -0.042834f, -0.015374f, -0.017835f, -0.114415f, 0.016500f, 0.048042f, -0.123463f, -0.001313f, -0.010789f, -0.125081f, 0.047281f, 0.021395f, -0.141195f, 0.089888f, 0.134257f, 0.031693f, 0.269763f, 0.167676f, -0.002669f, 0.143526f, 0.026504f, -0.181545f, -0.150376f, -0.236497f, -0.335375f, -0.251939f, -0.163514f, -0.087875f, 0.115463f, 0.249206f, 0.292313f, + 0.363475f, 0.356505f, 0.252363f, 0.056496f, -0.026076f, -0.179814f, -0.329034f, -0.319660f, -0.284193f, -0.238311f, -0.050800f, 0.026820f, 0.042548f, 0.165922f, 0.176078f, 0.122842f, 0.126289f, 0.098630f, 0.043542f, 0.061105f, 0.044656f, -0.008814f, -0.020218f, -0.050077f, -0.102652f, -0.111265f, -0.110431f, -0.111877f, -0.084772f, -0.018405f, 0.005004f, 0.036265f, 0.076061f, 0.092313f, 0.098346f, 0.098003f, 0.071334f, 0.023607f, 0.000161f, -0.027598f, -0.049683f, -0.057211f, -0.044508f, -0.046438f, -0.036136f, -0.012357f, -0.007627f, -0.011430f, 0.000949f, 0.002352f, 0.003685f, 0.028053f, 0.029979f, 0.014194f, 0.018869f, 0.015417f, 0.008957f, 0.019836f, 0.016612f, 0.003239f, 0.001135f, -0.013998f, -0.025986f, -0.023701f, -0.023849f, -0.025885f, -0.019815f, -0.012034f, -0.003215f, 0.008154f, 0.019642f, 0.022610f, 0.022771f, 0.021077f, 0.014790f, 0.006147f, 0.001859f, -0.007331f, -0.014200f, -0.012658f, -0.009764f, -0.008447f, -0.001064f, 0.002548f, 0.005477f, 0.003988f, 0.002422f, -0.002429f, -0.004513f, -0.008255f, -0.007483f, -0.005158f, -0.001031f, 0.000820f, 0.005478f, 0.008304f, + 0.012163f, 0.011422f, 0.008711f, 0.004822f, 0.003122f, -0.002260f, -0.005367f, -0.008037f, -0.008924f, -0.009377f, -0.006630f, -0.005363f, -0.001965f, 0.000267f, 0.002709f, 0.002906f, 0.004184f, 0.002896f, 0.002438f, 0.000373f}, + {-0.009464f, 0.029348f, 0.011209f, 0.007157f, 0.002289f, -0.006182f, 0.000055f, 0.005655f, 0.010556f, 0.000178f, 0.001005f, 0.000652f, -0.003894f, 0.001065f, 0.003571f, -0.000689f, 0.003489f, 0.005445f, 0.007193f, 0.003064f, 0.002944f, 0.003834f, 0.003356f, -0.006592f, 0.006708f, 0.012659f, -0.005998f, 0.003622f, 0.001972f, 0.003558f, 0.000642f, 0.007509f, -0.004877f, -0.001703f, -0.004389f, 0.004347f, 0.012512f, -0.002077f, 0.006070f, -0.000137f, -0.002833f, -0.010286f, 0.003858f, -0.005315f, 0.004754f, 0.002441f, 0.005312f, -0.000562f, -0.003195f, 0.001709f, -0.002200f, 0.007200f, 0.000928f, -0.005650f, 0.007280f, -0.001564f, 0.005684f, 0.004410f, -0.000224f, 0.004235f, 0.008209f, -0.002281f, -0.002867f, -0.002301f, 0.004091f, -0.003328f, -0.004414f, 0.005132f, 0.000071f, 0.003453f, -0.005452f, 0.008097f, 0.000491f, -0.002248f, -0.000932f, -0.000868f, 0.003229f, -0.002997f, -0.004826f, 0.002888f, 0.004351f, 0.004129f, -0.003822f, -0.005710f, 0.002327f, -0.000176f, -0.000665f, -0.002185f, -0.002076f, 0.002898f, -0.000728f, -0.000397f, -0.001756f, -0.002084f, 0.000442f, -0.001492f, + 0.000680f, 0.000468f, 0.002154f, 0.001503f, -0.000605f, 0.000789f, 0.001240f, -0.001258f, -0.000503f, 0.000106f, -0.000553f, -0.000958f, 0.000773f, 0.002085f, 0.001214f, 0.001564f, 0.000066f, -0.000121f, 0.000569f, -0.001285f, 0.000031f, 0.000497f, 0.022851f, 0.017792f, 0.009036f, 0.001238f, -0.003306f, 0.010284f, -0.005995f, -0.006572f, -0.001435f, -0.011432f, 0.006927f, 0.000396f, -0.004656f, 0.002627f, 0.006659f, 0.011279f, -0.005206f, 0.006480f, 0.014791f, -0.004267f, 0.000155f, 0.003316f, 0.007711f, -0.001989f, 0.008396f, 0.005850f, 0.008493f, 0.001888f, 0.006496f, -0.006619f, 0.011303f, -0.001399f, 0.010907f, 0.005333f, -0.001153f, 0.001299f, -0.001756f, -0.000301f, -0.003885f, -0.001904f, -0.004810f, -0.003624f, 0.003825f, -0.001066f, -0.010482f, -0.002409f, 0.001150f, -0.000341f, -0.005835f, -0.006110f, -0.003045f, -0.002669f, 0.008259f, -0.003340f, -0.009006f, -0.012115f, -0.013259f, -0.004630f, -0.005825f, -0.000524f, 0.002074f, 0.006371f, -0.008666f, -0.003994f, 0.001040f, -0.000927f, -0.003872f, 0.000920f, -0.009125f, -0.000911f, -0.010759f, 0.005712f, -0.005850f, -0.002908f, + 0.007493f, -0.001136f, 0.005148f, 0.001432f, 0.001885f, 0.005740f, 0.001458f, -0.004709f, -0.002122f, 0.000413f, -0.004533f, 0.002369f, 0.004639f, 0.002197f, -0.003551f, 0.002624f, 0.003880f, 0.000705f, 0.002107f, -0.001189f, -0.002084f, -0.001515f, -0.002084f, 0.001437f, -0.000209f, 0.001314f, -0.001741f, -0.001351f, 0.001492f, 0.002097f, 0.012095f, -0.026192f, -0.007011f, -0.013280f, -0.002450f, -0.000029f, 0.014424f, -0.007031f, -0.023451f, -0.008287f, -0.000590f, 0.008911f, 0.002793f, -0.008727f, -0.020362f, -0.005265f, 0.005588f, -0.002308f, 0.011477f, 0.000426f, 0.005030f, -0.001161f, -0.009038f, -0.009863f, 0.005930f, 0.007207f, 0.000849f, 0.002321f, -0.000359f, 0.004395f, 0.001027f, -0.012129f, 0.000644f, 0.017015f, 0.002293f, -0.004262f, -0.001574f, -0.004555f, 0.001043f, -0.003934f, -0.007407f, 0.011381f, -0.003550f, -0.004780f, 0.010354f, -0.005447f, -0.009197f, 0.000391f, 0.000058f, 0.000269f, -0.013265f, 0.010750f, -0.004114f, -0.000288f, 0.009941f, 0.009013f, -0.014224f, -0.003639f, 0.002747f, 0.003419f, -0.001264f, 0.007754f, 0.002140f, 0.003833f, 0.005392f, 0.000771f, + 0.004307f, 0.006488f, 0.001414f, 0.000001f, 0.006079f, -0.016258f, -0.003601f, 0.000369f, 0.008256f, 0.004544f, -0.002007f, -0.001683f, 0.006001f, 0.005555f, -0.006479f, -0.000969f, -0.002316f, 0.000152f, 0.003544f, 0.004482f, 0.000891f, 0.005549f, -0.000580f, -0.004064f, -0.001912f, 0.000398f, 0.000401f, 0.000478f, -0.001525f, 0.003843f, -0.000818f, 0.001344f, -0.000612f, -0.001835f, 0.001131f, -0.000116f, -0.000794f, -0.001519f, 0.000303f, -0.001435f, -0.000246f, -0.002525f, -0.001917f, 0.000435f, -0.000395f, -0.001995f, -0.003809f, -0.001464f, 0.000806f, 0.003124f, -0.052146f, -0.020489f, -0.010552f, -0.014711f, 0.004612f, -0.005039f, -0.005023f, -0.000544f, 0.006545f, -0.005893f, -0.007153f, -0.010270f, 0.002044f, 0.009373f, 0.002041f, -0.007015f, -0.008844f, 0.002711f, 0.007723f, 0.007259f, -0.010048f, -0.014679f, 0.001085f, -0.013717f, 0.007328f, -0.000009f, 0.005106f, -0.000305f, 0.004926f, -0.005347f, -0.002308f, 0.014519f, -0.017491f, 0.008121f, 0.004050f, 0.002040f, -0.006219f, 0.003947f, 0.008579f, 0.002381f, -0.010664f, 0.002235f, -0.006773f, 0.005293f, -0.014547f, -0.000462f, + -0.013179f, 0.010220f, -0.001095f, -0.002519f, -0.003755f, 0.005669f, -0.022102f, 0.010278f, -0.006387f, -0.013275f, 0.005328f, 0.010853f, 0.012148f, 0.007267f, 0.002582f, -0.000765f, 0.001432f, -0.001004f, 0.007837f, -0.004378f, 0.002212f, 0.006279f, 0.015194f, 0.002531f, 0.000292f, -0.010813f, 0.006955f, -0.005320f, 0.001237f, 0.000417f, 0.008088f, -0.007067f, 0.000419f, 0.007549f, -0.000665f, -0.008704f, -0.012150f, 0.010159f, 0.000842f, 0.002002f, 0.005063f, -0.000923f, 0.002463f, 0.002288f, -0.000074f, 0.001938f, -0.000847f, 0.000429f, 0.002699f, 0.002627f, 0.002661f, -0.004279f, 0.001738f, -0.003180f, -0.001432f, -0.002658f, 0.002614f, -0.003032f, -0.029613f, 0.014494f, 0.023130f, 0.004487f, 0.001831f, 0.012847f, 0.004344f, 0.003925f, 0.007033f, 0.000959f, 0.007359f, 0.007389f, -0.005966f, -0.001103f, 0.001005f, -0.007275f, -0.004503f, -0.000102f, 0.003576f, -0.004295f, 0.024050f, 0.012768f, -0.003508f, 0.001711f, 0.007637f, 0.009607f, 0.010977f, -0.004604f, 0.007730f, 0.008993f, 0.000507f, 0.002617f, 0.002595f, 0.005117f, 0.003715f, 0.002252f, 0.005082f, 0.004844f, + -0.010406f, -0.008053f, -0.016020f, 0.001723f, -0.005676f, -0.008019f, 0.008240f, -0.002354f, 0.005187f, -0.019859f, 0.021855f, -0.001598f, -0.010395f, -0.001941f, 0.017324f, 0.012527f, -0.002764f, 0.000437f, 0.008388f, -0.004002f, 0.003606f, -0.006401f, -0.013642f, 0.001594f, 0.001274f, -0.010975f, -0.004339f, -0.010818f, 0.001928f, 0.003981f, 0.002442f, -0.005267f, -0.009551f, -0.014567f, -0.017342f, -0.012483f, -0.004860f, 0.000984f, -0.004219f, 0.001675f, 0.005759f, 0.005098f, -0.007209f, -0.000788f, -0.007862f, 0.002855f, -0.002741f, 0.002243f, -0.000105f, -0.003226f, 0.002297f, 0.002611f, -0.002315f, -0.001107f, -0.003013f, 0.004049f, -0.004819f, 0.001035f, 0.001544f, 0.001415f, -0.000488f, -0.001135f, 0.001030f, 0.002147f, 0.002159f, 0.001755f, 0.001357f, 0.001808f, 0.000599f, 0.003453f, -0.000797f, 0.003827f, -0.002394f, 0.001203f, -0.000711f, -0.000996f, -0.002756f, -0.002142f, -0.001833f, -0.002506f, 0.000987f, -0.002013f, -0.000267f, 0.001822f, 0.000612f, 0.054644f, 0.014442f, 0.004093f, -0.002059f, 0.032958f, 0.003831f, 0.015686f, 0.003199f, 0.010452f, 0.017117f, 0.006103f, + -0.009538f, 0.010172f, 0.011763f, 0.001918f, -0.000878f, 0.002575f, 0.021556f, 0.001557f, -0.007385f, -0.013052f, -0.003862f, -0.000332f, -0.014991f, 0.002581f, 0.004442f, 0.008668f, 0.003662f, 0.006141f, 0.016521f, -0.005086f, -0.002625f, 0.010226f, -0.001584f, -0.004400f, -0.000851f, -0.014697f, 0.009564f, 0.006340f, 0.000348f, 0.009591f, -0.004742f, -0.012855f, -0.027960f, -0.010155f, 0.010345f, 0.011511f, 0.000375f, 0.008109f, -0.007886f, -0.008485f, 0.022778f, -0.013073f, 0.010333f, -0.011497f, 0.002443f, -0.016805f, -0.017732f, 0.019375f, -0.007339f, -0.006819f, 0.026605f, 0.002114f, -0.002964f, -0.012374f, 0.009769f, 0.015472f, 0.000774f, -0.008155f, -0.015633f, -0.002336f, 0.011407f, -0.003519f, 0.003884f, -0.006792f, 0.005631f, -0.002504f, 0.001841f, 0.012259f, -0.013058f, 0.004226f, -0.003677f, 0.000947f, 0.001534f, -0.001369f, 0.014041f, 0.004526f, 0.002089f, -0.004024f, 0.000170f, -0.003157f, 0.005932f, -0.002717f, 0.004710f, 0.004842f, -0.004896f, 0.000173f, -0.000762f, -0.003048f, 0.006687f, 0.001268f, 0.003142f, 0.000397f, -0.002325f, 0.001498f, 0.000055f, 0.000272f, + 0.001932f, 0.003104f, 0.001125f, 0.004026f, 0.001244f, -0.000143f, 0.002200f, 0.001632f, -0.001484f, 0.000627f, -0.000628f, 0.001006f, 0.003479f, 0.003998f, 0.000643f, -0.000191f, 0.027991f, 0.009068f, 0.023233f, -0.014292f, 0.004834f, 0.012721f, -0.017337f, -0.006160f, -0.006635f, 0.001676f, -0.008647f, -0.005560f, 0.013869f, -0.004295f, -0.002338f, -0.001109f, 0.017301f, -0.006375f, -0.007679f, 0.018092f, 0.003186f, -0.013026f, 0.005672f, -0.002960f, 0.003153f, 0.006760f, -0.010219f, -0.002542f, -0.007620f, -0.014225f, 0.001951f, 0.000231f, 0.002915f, -0.013996f, -0.014214f, 0.005471f, -0.001019f, 0.005322f, -0.000351f, 0.007798f, 0.002561f, -0.000480f, -0.008997f, -0.009054f, 0.002706f, 0.008791f, 0.004556f, -0.002717f, 0.026390f, 0.006100f, 0.004702f, 0.011781f, 0.004627f, 0.008734f, 0.009227f, 0.005782f, 0.003840f, 0.004408f, -0.003578f, -0.002172f, 0.002211f, -0.011209f, 0.003158f, -0.018000f, 0.005108f, -0.011950f, 0.009494f, -0.006766f, 0.005314f, -0.002417f, -0.008457f, 0.002817f, -0.002073f, 0.009237f, -0.007914f, 0.024883f, 0.021278f, 0.009617f, -0.017782f, 0.005559f, + 0.008226f, -0.007785f, 0.003549f, 0.002131f, 0.012476f, 0.011549f, 0.005108f, -0.000358f, -0.001449f, -0.002598f, -0.006897f, 0.010761f, -0.000601f, -0.001402f, 0.000251f, -0.003210f, 0.001402f, 0.003533f, -0.002766f, 0.005567f, -0.001934f, -0.004741f, -0.004653f, -0.000257f, 0.003546f, 0.003147f, -0.000676f, -0.001246f, -0.003627f, -0.001740f, 0.002249f, -0.004696f, 0.005369f, 0.005250f, -0.003167f, 0.000882f, -0.004067f, -0.001485f, 0.000944f, 0.001667f, -0.003047f, 0.005579f, -0.034470f, -0.066315f, -0.002838f, -0.013292f, 0.011491f, -0.003424f, -0.018377f, -0.001789f, -0.014888f, -0.016411f, -0.014080f, 0.021673f, 0.011235f, -0.014505f, -0.008357f, 0.016484f, 0.009527f, 0.014706f, -0.010170f, 0.009499f, -0.009028f, -0.009113f, -0.002840f, -0.004003f, -0.028092f, 0.007625f, 0.015975f, 0.006857f, -0.016722f, -0.003877f, 0.002909f, 0.004226f, -0.014928f, -0.003365f, -0.021406f, 0.004660f, -0.010179f, -0.001001f, -0.007498f, 0.004029f, 0.022788f, -0.002522f, -0.004308f, 0.011387f, 0.016638f, -0.010167f, 0.004489f, 0.006247f, -0.014156f, 0.007477f, 0.006960f, -0.016614f, 0.002528f, 0.010633f, + -0.002605f, -0.017496f, -0.011056f, -0.011314f, 0.015740f, 0.006054f, 0.015410f, -0.009247f, -0.017989f, 0.004165f, 0.008844f, -0.003890f, -0.012906f, 0.008434f, 0.012432f, 0.011786f, -0.014790f, -0.007726f, -0.003148f, 0.023656f, -0.005143f, 0.014084f, 0.004070f, -0.016802f, -0.013715f, -0.002694f, 0.009217f, -0.015930f, -0.001042f, -0.003043f, 0.008603f, -0.002003f, 0.019526f, 0.002362f, -0.004607f, -0.005966f, -0.005089f, -0.005760f, -0.003784f, -0.002022f, 0.001687f, -0.000153f, -0.002427f, -0.007304f, -0.000819f, -0.007106f, -0.003188f, 0.002768f, -0.002576f, 0.001031f, -0.002164f, -0.005404f, 0.003062f, -0.000969f, 0.008273f, -0.001754f, -0.006968f, -0.004921f, 0.002543f, -0.001403f, 0.000160f, -0.002028f, -0.004537f, 0.001373f, 0.004567f, -0.004314f, -0.001470f, 0.006298f, 0.002824f, -0.004092f, 0.000192f, 0.004945f, -0.033546f, -0.000410f, 0.001322f, 0.019189f, 0.005123f, -0.008177f, 0.011957f, -0.005934f, 0.005449f, -0.018748f, -0.005023f, -0.012011f, -0.006076f, -0.023604f, -0.008436f, -0.014239f, 0.032438f, 0.018063f, 0.019922f, -0.023155f, -0.019134f, -0.009693f, 0.011312f, -0.001393f, + 0.000130f, 0.000320f, 0.006948f, -0.001897f, 0.009700f, -0.013608f, -0.011010f, -0.000552f, -0.002852f, -0.016706f, -0.016094f, -0.013505f, -0.009167f, -0.007433f, -0.006179f, -0.021070f, 0.009904f, 0.025115f, -0.005133f, 0.011609f, 0.016731f, -0.012283f, 0.014532f, 0.008656f, 0.003750f, 0.022918f, -0.000725f, 0.019148f, 0.007603f, 0.002221f, -0.017872f, 0.007038f, 0.009404f, -0.005075f, 0.027135f, 0.021068f, 0.004542f, -0.008200f, -0.012949f, 0.007484f, -0.012722f, 0.005073f, 0.000124f, 0.015593f, 0.000346f, -0.023793f, 0.002083f, -0.009504f, -0.003370f, -0.017875f, 0.021030f, 0.010506f, 0.007868f, 0.004711f, 0.023429f, -0.006830f, -0.023764f, -0.003976f, 0.015568f, 0.000230f, -0.012055f, -0.003387f, 0.002111f, -0.005559f, 0.003328f, 0.007125f, 0.000311f, 0.000055f, -0.001171f, 0.002199f, -0.000019f, 0.008625f, 0.003067f, 0.002452f, -0.001692f, 0.003236f, 0.005027f, 0.007819f, -0.006325f, 0.004255f, 0.005001f, -0.000223f, 0.001834f, 0.007879f, 0.004833f, 0.001919f, -0.004503f, 0.006672f, -0.001626f, -0.004129f, -0.004234f, -0.000467f, -0.011614f, 0.007423f, 0.004245f, 0.001214f, + -0.005292f, 0.006526f, 0.007093f, 0.011726f, 0.007822f, 0.001861f, 0.002460f, 0.000447f, 0.010266f, -0.030604f, 0.013734f, 0.010262f, 0.013025f, -0.014238f, -0.025575f, 0.007477f, 0.007534f, 0.001376f, -0.021582f, 0.020628f, 0.005777f, -0.010859f, -0.019019f, 0.008630f, -0.008475f, 0.032968f, 0.038168f, 0.005749f, -0.006237f, -0.014189f, 0.021628f, -0.024642f, -0.008963f, 0.030624f, 0.007484f, -0.005843f, -0.016617f, -0.015121f, -0.008708f, 0.000633f, -0.020296f, 0.004644f, 0.021411f, -0.002646f, 0.007981f, -0.015677f, -0.014502f, -0.004791f, -0.012006f, 0.031356f, -0.011573f, 0.014133f, 0.011453f, 0.012780f, 0.003254f, 0.006326f, -0.021774f, -0.021651f, -0.020938f, -0.004557f, 0.015556f, 0.036140f, -0.014613f, -0.025951f, -0.006105f, -0.011909f, 0.006587f, 0.005685f, 0.019990f, -0.012171f, -0.000337f, -0.016157f, -0.003173f, 0.028964f, -0.003766f, -0.015630f, 0.020585f, 0.006864f, 0.003270f, 0.010942f, -0.023235f, 0.003633f, -0.007911f, 0.002336f, 0.010541f, 0.025479f, 0.007040f, -0.029403f, 0.010726f, 0.002678f, -0.004629f, -0.012199f, 0.000526f, -0.003048f, -0.001658f, -0.000698f, + 0.004122f, 0.006895f, 0.008135f, 0.002805f, 0.000522f, -0.004666f, 0.001512f, -0.001381f, 0.005841f, -0.009917f, 0.003724f, 0.003993f, -0.000235f, 0.000978f, 0.001665f, -0.007483f, -0.000215f, -0.004934f, 0.008250f, 0.007763f, 0.001904f, 0.009303f, -0.003594f, 0.001368f, 0.007033f, -0.001388f, 0.005580f, 0.001462f, 0.005171f, 0.001828f, -0.011628f, -0.000620f, -0.004138f, -0.000569f, 0.001615f, 0.000779f, -0.004069f, 0.000485f, -0.004794f, 0.000094f, -0.002303f, 0.049919f, -0.021697f, -0.017000f, -0.005198f, 0.010522f, -0.029196f, 0.011693f, -0.007879f, 0.014747f, -0.013102f, -0.005971f, 0.018116f, 0.013433f, 0.005121f, -0.009112f, -0.003298f, 0.024796f, 0.024395f, -0.005063f, 0.021303f, -0.006178f, 0.031320f, -0.014636f, -0.007687f, 0.005625f, 0.032813f, 0.023966f, 0.007938f, -0.017579f, -0.001225f, -0.036433f, -0.005499f, 0.005700f, 0.016769f, 0.019537f, 0.034585f, 0.009067f, -0.000623f, -0.001666f, -0.013263f, -0.022720f, -0.001622f, -0.019705f, 0.014265f, 0.004477f, 0.022054f, 0.012275f, -0.007518f, 0.021857f, -0.026002f, 0.011769f, -0.005788f, 0.001892f, -0.004510f, 0.027822f, + 0.016314f, 0.007973f, 0.004976f, -0.050471f, -0.008015f, 0.029954f, 0.015136f, 0.001873f, -0.000918f, 0.001536f, 0.024166f, 0.010263f, -0.038155f, -0.012432f, -0.014706f, 0.003598f, 0.000847f, -0.037908f, 0.001511f, -0.035431f, -0.023483f, -0.003048f, -0.015208f, -0.016483f, 0.022200f, 0.028023f, -0.002971f, -0.013561f, -0.001452f, 0.008640f, -0.003384f, 0.007381f, 0.011513f, -0.000874f, 0.012788f, 0.018701f, -0.005896f, -0.010326f, 0.001799f, -0.004366f, 0.005724f, 0.003742f, -0.002854f, -0.002533f, 0.000338f, 0.000355f, 0.005368f, -0.000489f, -0.006310f, 0.001393f, 0.006462f, 0.002451f, 0.005761f, -0.004810f, 0.008682f, 0.000098f, -0.003014f, 0.002209f, -0.005268f, 0.002281f, -0.010696f, -0.006834f, -0.008329f, 0.004503f, 0.000583f, -0.007937f, -0.001433f, 0.007036f, 0.004725f, 0.006129f, -0.003778f, 0.003443f, 0.000265f, -0.001190f, -0.010163f, -0.005173f, -0.010778f, 0.018443f, 0.034873f, -0.008564f, -0.014688f, 0.002325f, 0.013272f, 0.008113f, -0.021901f, -0.001057f, -0.017812f, -0.000676f, -0.024118f, -0.002343f, -0.020781f, 0.001212f, 0.020794f, 0.001912f, 0.046338f, -0.019357f, + -0.009732f, -0.016425f, 0.018712f, 0.031337f, -0.025236f, -0.008109f, -0.038954f, 0.007487f, -0.000645f, 0.010777f, 0.009202f, -0.021416f, -0.013146f, 0.017111f, -0.006645f, -0.004570f, -0.021330f, 0.042589f, -0.005961f, -0.045155f, 0.012461f, -0.011749f, -0.013768f, 0.016524f, 0.012427f, -0.012909f, -0.014729f, -0.004187f, -0.026490f, -0.015556f, 0.008475f, 0.006061f, 0.008856f, -0.007801f, -0.019208f, -0.021801f, -0.022300f, 0.018396f, -0.032632f, 0.000699f, 0.007593f, -0.009813f, 0.000640f, -0.000028f, -0.004599f, -0.025538f, -0.004959f, -0.010276f, 0.016171f, 0.021113f, -0.004078f, 0.032723f, -0.002048f, -0.000161f, -0.010171f, -0.001908f, 0.046614f, 0.004706f, -0.021331f, -0.008275f, 0.018006f, 0.013725f, -0.026186f, 0.000693f, 0.003501f, -0.017457f, 0.014480f, 0.003613f, 0.016228f, 0.002705f, 0.002281f, 0.002686f, 0.001058f, 0.007334f, 0.009668f, 0.001038f, 0.004723f, 0.016081f, 0.000995f, -0.005531f, 0.002524f, 0.007797f, -0.006308f, -0.001584f, 0.000645f, -0.007334f, 0.006647f, 0.006529f, 0.007717f, 0.001714f, -0.008964f, 0.002135f, -0.003267f, 0.001567f, -0.002126f, -0.001480f, + 0.000453f, -0.004749f, 0.006599f, -0.003461f, -0.005113f, -0.005687f, 0.013647f, 0.000254f, -0.015521f, 0.011197f, 0.008316f, 0.003864f, -0.001375f, 0.008588f, 0.006015f, -0.016774f, -0.004165f, 0.000956f, 0.000366f, -0.005067f, -0.022730f, 0.057401f, -0.014761f, -0.005035f, 0.005105f, 0.024476f, 0.017590f, -0.037266f, -0.015198f, -0.035402f, 0.007778f, 0.002043f, -0.010946f, -0.038964f, 0.001629f, -0.018184f, 0.008110f, 0.008596f, 0.019693f, 0.001012f, 0.014341f, 0.067455f, 0.014679f, 0.016849f, -0.010569f, -0.003731f, 0.029472f, -0.002554f, 0.002341f, 0.007828f, 0.001951f, -0.004304f, -0.015365f, 0.027194f, -0.028805f, 0.012031f, -0.042834f, -0.013021f, -0.020025f, -0.026433f, -0.022706f, -0.000014f, -0.046798f, -0.015908f, 0.006465f, 0.026851f, 0.015464f, -0.045975f, 0.026137f, 0.017403f, 0.019060f, -0.029176f, 0.021523f, -0.013661f, -0.033458f, -0.011350f, -0.033287f, 0.016342f, 0.039899f, 0.010142f, -0.003773f, -0.025942f, 0.021124f, -0.027629f, 0.041672f, -0.007608f, -0.004436f, -0.024950f, -0.027357f, 0.004204f, 0.032560f, 0.010890f, -0.022317f, -0.008877f, 0.005502f, -0.004413f, + -0.008898f, 0.021536f, 0.011055f, -0.009687f, 0.027583f, -0.001981f, -0.039001f, 0.049242f, 0.026136f, 0.020449f, 0.009318f, -0.006313f, -0.002335f, -0.003789f, 0.014710f, 0.003627f, 0.002234f, 0.032538f, 0.012672f, 0.000895f, 0.001633f, 0.004905f, 0.016925f, -0.013156f, 0.009589f, 0.001267f, 0.003276f, 0.003432f, 0.010947f, 0.005656f, 0.000785f, 0.018520f, 0.014009f, 0.001581f, -0.006230f, -0.006077f, -0.002260f, 0.015247f, 0.007564f, 0.008734f, 0.008146f, 0.010285f, -0.012162f, 0.012700f, -0.003131f, -0.002868f, 0.011528f, 0.018282f, -0.002461f, -0.004542f, 0.000023f, 0.017437f, 0.019721f, 0.007942f, 0.012204f, 0.009345f, 0.031392f, 0.005975f, -0.020217f, 0.009222f, -0.005896f, 0.009503f, 0.034452f, -0.048477f, -0.022066f, -0.038954f, 0.022165f, -0.007758f, 0.003818f, -0.012777f, 0.028129f, -0.027578f, -0.027939f, -0.012595f, -0.006511f, -0.019822f, -0.034568f, -0.016560f, 0.006495f, 0.022835f, -0.031800f, 0.021118f, -0.011954f, 0.002652f, 0.041251f, 0.031695f, -0.000493f, 0.016774f, 0.008012f, -0.006415f, -0.004938f, -0.055819f, 0.007812f, -0.005528f, 0.005570f, 0.011056f, + -0.004339f, 0.001682f, 0.056614f, -0.050608f, 0.004846f, 0.061415f, 0.008064f, 0.017079f, -0.023947f, -0.006397f, 0.032103f, 0.056397f, 0.002931f, 0.050035f, -0.019358f, 0.045281f, -0.015763f, 0.033561f, 0.033962f, -0.008214f, 0.066101f, -0.010816f, -0.002692f, -0.019433f, -0.029722f, -0.031437f, -0.014392f, -0.018802f, -0.045808f, -0.021265f, -0.009625f, 0.017157f, 0.016926f, 0.002326f, -0.023457f, -0.003768f, -0.006525f, 0.029710f, 0.009307f, -0.015229f, 0.025453f, 0.005868f, -0.002977f, -0.003399f, -0.018261f, -0.002664f, -0.007158f, 0.007878f, -0.018474f, -0.008747f, -0.012823f, -0.012773f, 0.023731f, 0.009255f, -0.007612f, 0.007272f, -0.005802f, 0.004660f, -0.013945f, 0.021254f, 0.001229f, 0.006073f, -0.000311f, -0.014072f, 0.013279f, -0.001582f, 0.005048f, 0.015131f, 0.010666f, 0.006526f, 0.001461f, -0.021996f, 0.010872f, -0.008357f, -0.000710f, 0.019162f, -0.000094f, 0.007170f, 0.004896f, 0.009203f, 0.013149f, -0.004518f, -0.009964f, -0.006750f, -0.007892f, 0.004052f, 0.011890f, 0.019676f, 0.011744f, -0.022834f, -0.002471f, -0.024806f, -0.021503f, -0.072471f, -0.051725f, -0.036313f, + -0.003737f, 0.049504f, -0.032470f, -0.003912f, -0.025010f, -0.035796f, -0.029892f, -0.036573f, -0.038439f, -0.014971f, -0.045348f, -0.049055f, -0.042931f, 0.012332f, -0.029679f, -0.015247f, -0.036969f, 0.035343f, 0.057418f, 0.005205f, -0.006762f, -0.020062f, 0.004590f, -0.003369f, -0.001647f, -0.004401f, 0.017999f, 0.004044f, 0.039116f, -0.033990f, 0.002866f, -0.028880f, 0.059523f, 0.014866f, -0.035123f, 0.027725f, -0.025209f, 0.022570f, -0.033802f, 0.019980f, 0.002757f, -0.019905f, 0.017955f, -0.031630f, -0.010780f, 0.010369f, 0.032476f, 0.014514f, 0.057745f, -0.012715f, -0.037456f, 0.003779f, -0.010784f, 0.004685f, -0.024864f, -0.021144f, -0.039963f, 0.005329f, -0.042477f, -0.008217f, -0.006755f, -0.036827f, 0.024673f, 0.031714f, -0.018408f, -0.001692f, -0.054730f, 0.063077f, 0.076008f, 0.012506f, -0.030166f, 0.010709f, 0.066876f, -0.031129f, -0.014397f, -0.035546f, -0.021013f, -0.039047f, 0.016052f, -0.001566f, -0.022322f, 0.017515f, -0.022357f, 0.009586f, -0.013954f, -0.006029f, 0.008997f, 0.005117f, -0.000279f, -0.014412f, -0.003048f, 0.013273f, 0.007436f, -0.024251f, 0.019331f, -0.016789f, + 0.008859f, 0.011594f, -0.007839f, -0.014117f, 0.007688f, -0.011348f, 0.009496f, 0.007271f, -0.015377f, 0.005963f, -0.002155f, 0.006267f, -0.009191f, -0.024432f, 0.006689f, 0.004708f, -0.010260f, 0.006796f, -0.009196f, 0.018040f, -0.000339f, 0.007601f, 0.001973f, 0.023342f, 0.002991f, -0.030400f, 0.017300f, 0.011829f, 0.005200f, 0.019681f, -0.058762f, 0.107446f, 0.040492f, -0.008675f, -0.032456f, -0.008888f, -0.034459f, 0.037075f, 0.093008f, 0.002169f, -0.061870f, -0.028123f, 0.033497f, 0.012648f, -0.012384f, 0.044536f, -0.008668f, 0.005738f, 0.025364f, -0.002506f, -0.025693f, -0.008171f, 0.020885f, -0.026662f, -0.024475f, -0.009724f, 0.008654f, 0.001521f, -0.004714f, -0.011074f, 0.019692f, 0.002258f, 0.029178f, 0.023294f, -0.030177f, 0.015020f, 0.035885f, 0.020327f, -0.027885f, 0.010986f, 0.005931f, 0.024470f, 0.000583f, 0.008688f, 0.006502f, 0.010240f, 0.050632f, 0.048200f, 0.029689f, 0.065245f, -0.032041f, 0.033763f, -0.038594f, 0.024892f, -0.000445f, 0.022777f, 0.028207f, 0.009379f, 0.007330f, 0.034552f, 0.015922f, -0.008831f, 0.021749f, 0.000430f, 0.029177f, -0.030634f, + -0.017687f, 0.003011f, 0.070342f, -0.048200f, 0.004706f, -0.060686f, -0.007234f, 0.007425f, 0.024059f, -0.029339f, -0.005846f, -0.030240f, 0.007946f, 0.038101f, -0.023111f, -0.054187f, -0.011598f, -0.004982f, -0.014785f, 0.013642f, 0.009527f, -0.015040f, 0.005493f, -0.012800f, -0.012875f, 0.012658f, -0.001920f, -0.006936f, -0.024608f, 0.013820f, -0.001009f, -0.015165f, -0.012461f, 0.012110f, 0.033255f, 0.003691f, -0.009479f, -0.003939f, 0.012148f, 0.030300f, 0.006005f, 0.003085f, 0.024905f, -0.000220f, 0.006823f, -0.001800f, -0.004826f, -0.000616f, 0.009077f, 0.014654f, 0.008551f, -0.003446f, -0.005202f, 0.013140f, 0.009040f, -0.018134f, 0.017857f, 0.005398f, 0.034624f, -0.007997f, 0.008859f, 0.021412f, -0.014169f, -0.008115f, 0.011810f, -0.018980f, 0.090006f, 0.007182f, 0.006660f, -0.019979f, -0.012466f, 0.014638f, 0.013837f, 0.007957f, 0.034760f, 0.014192f, -0.014537f, 0.018037f, 0.037047f, -0.001836f, 0.040592f, -0.004319f, 0.019718f, -0.041681f, 0.074813f, -0.011563f, -0.008777f, 0.012097f, -0.056650f, -0.015038f, -0.027307f, 0.039413f, 0.021857f, 0.022082f, -0.026536f, 0.009104f, + 0.009444f, -0.035764f, 0.009645f, 0.029575f, 0.025490f, 0.008233f, -0.008880f, 0.003007f, -0.017143f, 0.056236f, 0.008398f, 0.025056f, 0.020733f, 0.030015f, -0.050857f, -0.004729f, -0.015511f, 0.008733f, -0.019067f, -0.022917f, 0.041625f, -0.040723f, 0.030406f, -0.026141f, 0.032003f, -0.008087f, -0.034249f, -0.004042f, -0.051304f, 0.030688f, 0.028804f, 0.034505f, -0.105740f, 0.029485f, 0.018562f, -0.033284f, -0.022155f, -0.031029f, 0.053753f, -0.078518f, 0.046047f, 0.108110f, 0.001537f, -0.053069f, -0.021442f, 0.030641f, 0.063439f, 0.016658f, -0.022470f, -0.047978f, -0.079508f, -0.007417f, -0.001105f, 0.030259f, -0.024284f, -0.011734f, -0.018792f, 0.052971f, 0.002754f, -0.002682f, -0.016236f, 0.010133f, 0.002343f, -0.001185f, 0.001348f, -0.001736f, 0.009335f, 0.033311f, 0.041285f, 0.021053f, -0.007142f, -0.004588f, 0.015866f, 0.003039f, -0.011301f, 0.003770f, -0.017662f, -0.011334f, -0.021344f, -0.030905f, -0.063329f, -0.025912f, 0.008589f, 0.001781f, 0.034043f, -0.026237f, -0.018811f, 0.043664f, 0.015614f, -0.012989f, -0.019664f, 0.013296f, -0.005687f, -0.018516f, 0.043301f, 0.003841f, + -0.003320f, -0.015349f, 0.000060f, -0.019140f, -0.015484f, -0.023605f, -0.006932f, -0.010306f, -0.008404f, -0.025065f, 0.016309f, -0.052214f, 0.008538f, -0.031774f, 0.047258f, 0.002647f, 0.013545f, -0.026984f, 0.021437f, -0.008023f, -0.017800f, 0.008074f, -0.018349f, -0.011989f, -0.015442f, -0.041943f, -0.022973f, 0.029614f, 0.025975f, 0.018693f, 0.022235f, -0.050612f, -0.013679f, 0.009103f, -0.013950f, 0.028511f, 0.021421f, 0.001003f, 0.018400f, 0.048884f, -0.014164f, -0.051791f, 0.097706f, -0.043228f, -0.053526f, 0.059179f, -0.028368f, -0.018019f, 0.014110f, 0.029911f, -0.035429f, -0.012274f, 0.004397f, -0.024690f, 0.126969f, -0.002046f, -0.019944f, -0.008929f, 0.001830f, 0.030472f, -0.061143f, -0.047992f, -0.025698f, -0.025706f, -0.001445f, -0.054246f, 0.000590f, -0.005680f, 0.020276f, 0.079019f, 0.081418f, -0.032217f, 0.063082f, -0.062161f, -0.053889f, 0.032072f, 0.051178f, -0.018197f, 0.014640f, 0.005560f, 0.035275f, 0.042051f, 0.000716f, 0.001971f, 0.057091f, -0.051298f, -0.099498f, -0.011991f, -0.039269f, 0.021437f, 0.047799f, -0.005498f, -0.031014f, 0.063425f, 0.019683f, 0.012114f, + -0.016746f, -0.053586f, -0.028982f, 0.004878f, -0.022262f, 0.029471f, -0.002139f, -0.019780f, -0.002143f, -0.022274f, -0.021488f, 0.029261f, -0.009114f, 0.011339f, -0.021519f, 0.031213f, -0.002250f, -0.002710f, 0.021062f, 0.029897f, -0.002862f, -0.007181f, -0.020530f, 0.001936f, -0.017596f, -0.017250f, -0.012265f, -0.006107f, -0.031093f, -0.000770f, -0.013912f, -0.006132f, -0.031216f, 0.008446f, 0.036921f, 0.013154f, -0.021923f, -0.046965f, -0.003060f, -0.004861f, 0.025253f, -0.063013f, -0.012455f, 0.013941f, -0.012400f, 0.028340f, -0.000180f, 0.016954f, -0.000838f, -0.005523f, 0.004015f, -0.035824f, 0.038783f, 0.001064f, 0.023512f, -0.024259f, -0.038590f, 0.035925f, -0.038202f, 0.012233f, -0.009173f, 0.033805f, -0.000301f, 0.007861f, -0.020501f, 0.006907f, -0.014608f, -0.048612f, -0.039203f, 0.016994f, -0.003428f, -0.000806f, 0.007676f, 0.037076f, -0.016759f, -0.010738f, -0.031091f, 0.013707f, 0.010983f, -0.003365f, -0.006349f, -0.081967f, 0.003519f, 0.023567f, -0.029697f, 0.020899f, -0.045870f, -0.008207f, 0.002820f, 0.028918f, 0.035922f, 0.004710f, -0.017394f, 0.011804f, 0.064874f, 0.057068f, + 0.056300f, -0.002263f, -0.005306f, 0.012339f, 0.006656f, -0.025672f, 0.016681f, 0.071621f, -0.050979f, -0.016330f, -0.014838f, 0.000361f, 0.002621f, 0.009462f, -0.037913f, -0.057506f, -0.021747f, -0.003280f, 0.116152f, 0.059228f, 0.039404f, -0.005301f, -0.010222f, -0.029489f, 0.050499f, 0.007459f, 0.032314f, -0.011838f, -0.015719f, -0.023346f, -0.020774f, -0.085796f, -0.038082f, -0.045230f, 0.035615f, -0.003246f, -0.016773f, -0.002620f, -0.035276f, -0.016411f, 0.037337f, 0.056284f, -0.008783f, 0.049642f, 0.026696f, 0.020856f, 0.002999f, 0.023578f, 0.029666f, 0.025066f, -0.006321f, -0.001473f, 0.000370f, 0.033882f, -0.026771f, -0.034379f, -0.016698f, 0.018632f, -0.003230f, -0.024152f, -0.015800f, -0.024191f, 0.014331f, -0.005393f, 0.030742f, 0.061411f, 0.011506f, 0.037917f, 0.049142f, 0.024054f, 0.030492f, 0.015481f, 0.009688f, 0.013701f, -0.022484f, 0.032498f, -0.026651f, -0.017761f, 0.007152f, 0.002895f, -0.019000f, 0.009916f, 0.017555f, 0.032632f, 0.013316f, -0.037120f, 0.020537f, 0.015844f, 0.004079f, 0.017452f, -0.010004f, -0.019500f, 0.010883f, -0.000833f, -0.014307f, -0.008141f, + -0.013365f, 0.005278f, -0.079240f, 0.044408f, 0.039178f, -0.002348f, 0.064284f, 0.028614f, -0.043585f, -0.043343f, 0.018878f, -0.017927f, -0.038876f, 0.002318f, 0.003988f, 0.017267f, -0.009598f, 0.022598f, -0.005560f, 0.021387f, 0.027670f, -0.025653f, -0.102755f, 0.055038f, -0.015435f, -0.032424f, 0.023530f, 0.036294f, 0.001389f, -0.069284f, -0.008953f, -0.002984f, -0.070994f, -0.044564f, 0.037557f, -0.011004f, -0.028784f, -0.024621f, 0.016194f, -0.069378f, -0.049004f, 0.093325f, -0.007853f, -0.054403f, 0.021367f, 0.050640f, 0.021894f, -0.076987f, 0.109971f, 0.044288f, -0.067604f, 0.037511f, 0.049780f, 0.007807f, -0.045749f, 0.047495f, 0.053303f, 0.032227f, -0.042156f, 0.039833f, 0.074617f, 0.003908f, 0.075377f, 0.092997f, -0.049708f, -0.029809f, -0.034578f, 0.087871f, 0.056152f, -0.038306f, 0.021587f, -0.023199f, -0.055852f, 0.048090f, 0.109821f, 0.015743f, -0.032851f, -0.027647f, 0.066033f, -0.006252f, -0.073636f, -0.052898f, 0.013560f, -0.002824f, 0.061238f, -0.010978f, 0.047340f, -0.091774f, -0.013907f, 0.003594f, 0.015904f, -0.019160f, 0.019625f, -0.000931f, 0.002050f, 0.010455f, + 0.002775f, -0.024020f, 0.007449f, -0.011459f, 0.014973f, 0.005752f, -0.033200f, 0.029147f, 0.009704f, -0.027851f, -0.019662f, 0.005256f, -0.023912f, 0.004686f, 0.022242f, 0.024210f, 0.003643f, -0.022815f, -0.007207f, 0.007463f, -0.031035f, 0.018213f, 0.023321f, 0.007497f, 0.002122f, 0.023097f, 0.008658f, -0.010401f, 0.011468f, -0.008380f, 0.002124f, -0.015959f, 0.010261f, 0.037016f, -0.026084f, 0.064524f, 0.103873f, 0.041738f, -0.042966f, -0.015975f, -0.036036f, 0.021973f, -0.017501f, 0.028343f, 0.018858f, -0.047806f, 0.024301f, -0.048720f, -0.016306f, 0.000223f, -0.017824f, 0.002560f, 0.025381f, 0.019649f, 0.001432f, -0.038903f, 0.008759f, 0.030913f, -0.011753f, 0.004429f, -0.014002f, -0.045493f, 0.045845f, -0.027569f, 0.031747f, -0.046860f, -0.027489f, -0.006808f, -0.038296f, -0.011625f, 0.038922f, -0.038208f, 0.051309f, 0.003067f, 0.041838f, 0.016241f, -0.020849f, -0.056402f, 0.046021f, 0.028256f, 0.019151f, 0.011513f, 0.047434f, -0.035477f, -0.017908f, -0.020673f, 0.014797f, 0.017480f, -0.004697f, -0.044653f, -0.002058f, -0.006477f, -0.044806f, -0.018111f, 0.007013f, 0.011742f, + 0.035249f, -0.004589f, -0.031512f, 0.041537f, -0.008155f, -0.007672f, 0.050353f, 0.023587f, -0.041457f, 0.013001f, -0.025444f, 0.015643f, -0.013385f, 0.019316f, -0.035833f, 0.019563f, -0.012491f, 0.039130f, 0.006688f, 0.014745f, -0.013536f, -0.000553f, -0.029121f, 0.011150f, 0.001761f, 0.000826f, -0.000887f, 0.007824f, -0.011827f, -0.011361f, -0.001551f, 0.004195f, -0.003405f, 0.007096f, -0.014917f, -0.003366f, 0.011153f, -0.003279f, -0.000715f, -0.002935f, 0.000112f, 0.000121f, -0.023475f, 0.003838f, 0.018477f, -0.000208f, -0.002928f, -0.005618f, -0.002503f, -0.017906f, 0.001024f, -0.004947f, -0.002379f, -0.009625f, -0.014516f, -0.003862f, 0.013761f, -0.008758f, -0.004542f, 0.005871f, 0.002712f, 0.010013f, -0.010931f, -0.004827f, -0.001881f, -0.009223f, -0.012736f, -0.014609f, -0.077561f, -0.089813f, -0.049193f, 0.269280f, 0.235387f, 0.143594f, 0.312575f, -0.066057f, -0.236058f, -0.082044f, -0.444427f, -0.231895f, -0.005301f, -0.114135f, 0.157986f, 0.291566f, 0.040121f, 0.171614f, 0.332539f, 0.056632f, 0.115588f, 0.011823f, -0.342955f, -0.285223f, -0.253152f, -0.277408f, -0.169247f, 0.138757f, + 0.057825f, 0.138930f, 0.359475f, 0.217730f, 0.055576f, 0.267904f, 0.121365f, -0.163036f, 0.088316f, -0.118802f, -0.314064f, -0.037991f, -0.194403f, -0.355576f, -0.161358f, -0.036311f, -0.187414f, 0.209071f, 0.223639f, 0.106830f, 0.356538f, 0.404175f, 0.152520f, 0.200187f, 0.187671f, -0.209276f, -0.137376f, -0.267815f, -0.420017f, -0.385108f, -0.247909f, -0.247693f, -0.071865f, 0.161893f, 0.208150f, 0.279597f, 0.392556f, 0.353738f, 0.205850f, 0.151300f, 0.026589f, -0.163041f, -0.238458f, -0.173755f, -0.227065f, -0.279171f, -0.095244f, -0.105042f, -0.051861f, 0.175119f, 0.120417f, 0.129545f, 0.271020f, 0.069874f, -0.012447f, 0.045380f, -0.075507f, -0.116818f, -0.065772f, -0.118060f, -0.036038f, 0.076629f, 0.028551f, 0.042469f, 0.095809f, -0.022057f, 0.019728f, 0.053004f, -0.088938f, -0.008332f, 0.111037f, -0.104861f, 0.008853f, 0.018210f, -0.210405f, -0.010164f, -0.004312f, -0.250491f, 0.019826f, 0.088901f, -0.032409f, 0.259064f, 0.234766f, 0.043541f, 0.251247f, 0.124521f, -0.011064f, 0.042243f, -0.067868f, -0.270645f, -0.282642f, -0.349085f, -0.397896f, -0.200048f, -0.032521f, 0.080944f, + 0.249636f, 0.415555f, 0.476014f, 0.379326f, 0.280333f, 0.128648f, -0.052395f, -0.157743f, -0.347763f, -0.435048f, -0.320608f, -0.256838f, -0.244831f, 0.015990f, 0.120207f, 0.147595f, 0.241255f, 0.215685f, 0.141901f, 0.139904f, 0.100552f, 0.032282f, 0.040102f, -0.000428f, -0.076327f, -0.087285f, -0.110726f, -0.141760f, -0.126796f, -0.091604f, -0.068641f, -0.025550f, 0.033977f, 0.051307f, 0.083412f, 0.101820f, 0.087631f, 0.064151f, 0.049119f, 0.021784f, -0.003966f, -0.022446f, -0.032960f, -0.044642f, -0.035458f, -0.025930f, -0.020752f, -0.016495f, -0.004012f, -0.005929f, -0.005011f, -0.000966f, -0.004453f, -0.010996f, -0.000122f, -0.002722f, 0.002237f, 0.017210f, 0.027456f, 0.034127f, 0.049481f, 0.036968f, 0.018545f, -0.000537f, -0.017257f, -0.031148f, -0.033578f, -0.045486f, -0.045524f, -0.035714f, -0.015757f, -0.002693f, 0.017236f, 0.028237f, 0.038430f, 0.036963f, 0.034305f, 0.017619f, 0.004349f, -0.009356f, -0.016253f, -0.023073f, -0.018343f, -0.016213f, -0.007180f, -0.000451f, 0.008348f, 0.008575f, 0.011670f, 0.006134f, 0.003557f, -0.005438f, -0.008964f, -0.013629f, -0.008603f, -0.007133f, + 0.001351f, 0.004260f, 0.010349f, 0.009949f, 0.012704f, 0.007402f, 0.006977f, 0.000865f, -0.000292f, -0.005365f, -0.003778f, -0.006930f, -0.004135f, -0.005709f, -0.001844f, -0.003070f, 0.000925f, -0.000953f, 0.001737f, -0.001149f} + }, + { + {-0.000963f, 0.012014f, -0.001235f, 0.003646f, -0.002195f, 0.016039f, -0.006300f, -0.001560f, -0.000568f, 0.001983f, -0.002834f, 0.007344f, -0.001270f, -0.004960f, -0.000879f, 0.010044f, 0.000746f, -0.005090f, 0.004712f, 0.003468f, 0.006617f, 0.002705f, -0.005038f, -0.003336f, 0.011231f, 0.001559f, -0.002875f, -0.002225f, -0.002289f, 0.002204f, 0.002391f, -0.001452f, -0.014299f, -0.003584f, 0.000690f, 0.009868f, 0.003529f, -0.001228f, -0.000041f, -0.005699f, 0.007861f, -0.008033f, -0.010679f, 0.001380f, 0.000103f, -0.003621f, -0.002460f, -0.002987f, 0.001528f, 0.000970f, 0.000942f, -0.003742f, 0.009324f, 0.000282f, 0.012497f, -0.002016f, -0.005954f, 0.002737f, -0.000664f, 0.001783f, 0.002901f, 0.006312f, 0.004296f, -0.001618f, -0.003432f, -0.002927f, 0.008108f, -0.008258f, 0.000322f, 0.000230f, -0.001450f, -0.007083f, 0.006245f, -0.003573f, 0.000825f, 0.005420f, -0.003819f, -0.005120f, -0.004257f, 0.005496f, -0.000507f, -0.001715f, -0.001528f, 0.000179f, -0.001031f, -0.002234f, 0.002730f, 0.002795f, 0.002042f, 0.001272f, 0.000699f, 0.003821f, 0.000617f, -0.000082f, 0.000804f, -0.000377f, + 0.000136f, -0.000886f, -0.000475f, -0.000460f, 0.002582f, 0.000621f, -0.001739f, 0.002169f, -0.004740f, 0.004145f, 0.002500f, -0.005585f, -0.003065f, -0.000430f, 0.000529f, -0.000285f, -0.000815f, -0.002821f, 0.005072f, 0.000987f, -0.002167f, -0.002948f, -0.000136f, 0.010484f, -0.001449f, -0.004900f, 0.006721f, -0.002588f, -0.006293f, -0.000616f, 0.005383f, 0.004034f, -0.003436f, 0.000976f, -0.004299f, 0.002549f, 0.002482f, -0.002030f, 0.005381f, -0.001426f, -0.009647f, 0.001837f, 0.005038f, 0.004722f, 0.000684f, -0.000671f, -0.006985f, -0.002317f, -0.000896f, -0.003023f, 0.006358f, 0.008942f, 0.004169f, -0.012073f, 0.004134f, 0.014329f, 0.005936f, -0.000639f, -0.000063f, 0.006634f, -0.003218f, 0.002214f, -0.005985f, -0.005380f, 0.005560f, 0.006310f, 0.003048f, 0.001740f, 0.001141f, 0.001325f, 0.002988f, 0.000633f, -0.000527f, -0.002079f, 0.001538f, -0.004166f, -0.000758f, -0.001752f, -0.008618f, -0.004252f, 0.001857f, 0.003299f, 0.002702f, 0.005941f, 0.004667f, 0.004949f, 0.007054f, -0.004387f, -0.002773f, -0.001213f, 0.002275f, 0.002651f, 0.004185f, -0.000803f, -0.001336f, -0.000698f, + 0.002577f, -0.001751f, 0.002339f, 0.000657f, -0.000899f, -0.000683f, 0.000811f, -0.000336f, 0.001449f, 0.000661f, 0.000281f, -0.000488f, 0.000830f, 0.000788f, -0.000245f, 0.001215f, 0.000344f, 0.000374f, -0.000854f, 0.000294f, -0.000194f, 0.000121f, 0.001536f, 0.000265f, 0.000692f, 0.000641f, 0.000275f, 0.008366f, -0.000654f, 0.003490f, -0.005416f, -0.007913f, -0.005056f, 0.004399f, -0.003698f, -0.003643f, -0.004006f, -0.005207f, 0.005000f, 0.000772f, 0.003648f, -0.001589f, 0.001020f, -0.010773f, -0.007035f, -0.004892f, 0.006865f, 0.001373f, 0.001467f, 0.003842f, -0.003913f, -0.001905f, -0.000945f, 0.001296f, -0.008287f, -0.001544f, -0.005618f, -0.005995f, 0.000264f, -0.005286f, 0.003493f, 0.003406f, 0.014221f, -0.003525f, 0.007189f, -0.004809f, 0.002919f, -0.003291f, 0.000660f, 0.012543f, 0.001917f, 0.005450f, -0.006018f, 0.003841f, -0.005424f, -0.002507f, -0.000919f, 0.007974f, -0.004018f, -0.002020f, -0.007168f, -0.003736f, -0.008448f, -0.001101f, 0.007796f, 0.001907f, 0.000489f, 0.001387f, 0.007138f, -0.007118f, -0.012616f, 0.002916f, 0.003839f, -0.008156f, -0.000703f, 0.001111f, + -0.002129f, 0.003311f, 0.009681f, 0.002058f, -0.002591f, 0.000236f, -0.003591f, 0.000659f, 0.000488f, -0.002785f, -0.000948f, -0.000881f, -0.004065f, -0.000923f, -0.002368f, 0.000846f, -0.000968f, -0.001551f, 0.003128f, -0.000608f, -0.003299f, 0.001371f, -0.002383f, 0.000105f, -0.002569f, -0.003574f, 0.001971f, -0.000645f, -0.000370f, 0.001141f, 0.001411f, 0.000464f, 0.003204f, -0.001576f, -0.000390f, 0.000556f, -0.001307f, -0.000511f, -0.000489f, -0.001654f, -0.000980f, 0.002726f, 0.000799f, 0.003884f, 0.000363f, 0.001739f, -0.001658f, 0.004528f, -0.012706f, 0.002058f, -0.004400f, -0.009476f, -0.006734f, 0.003759f, -0.001813f, -0.000498f, 0.009399f, 0.003037f, -0.001232f, 0.000754f, 0.008004f, -0.003795f, 0.005928f, -0.002719f, 0.001821f, -0.008455f, -0.001411f, 0.005630f, -0.001844f, 0.007009f, 0.007998f, 0.002551f, 0.005066f, 0.010325f, -0.002359f, -0.014684f, 0.003396f, -0.006567f, 0.000526f, -0.017971f, 0.000559f, 0.005691f, -0.003522f, 0.006628f, 0.001018f, -0.006520f, 0.002392f, -0.013529f, -0.008550f, -0.003343f, -0.003242f, -0.011237f, 0.005735f, 0.006141f, 0.000433f, 0.005711f, + 0.000511f, 0.001509f, -0.003558f, 0.005173f, 0.004051f, -0.002147f, 0.012403f, -0.002377f, 0.010257f, 0.008675f, -0.000439f, -0.001475f, 0.000088f, 0.002742f, 0.004226f, 0.001274f, 0.004722f, 0.001498f, 0.001644f, 0.013598f, 0.005271f, -0.006017f, -0.002682f, -0.000137f, -0.003231f, 0.001971f, -0.002322f, 0.013716f, 0.002357f, 0.006415f, -0.004890f, 0.005535f, -0.000006f, -0.002769f, 0.001238f, -0.004512f, -0.002849f, -0.000820f, -0.003147f, -0.002024f, -0.001886f, 0.001634f, -0.002951f, -0.000757f, -0.002064f, -0.001146f, -0.000980f, 0.003729f, -0.001564f, 0.001918f, -0.000495f, -0.003275f, -0.000489f, 0.001937f, 0.000847f, 0.000298f, 0.001285f, -0.002001f, 0.001711f, 0.001039f, 0.001020f, 0.001813f, -0.001030f, 0.000390f, -0.003108f, -0.000278f, 0.002457f, 0.002115f, 0.000564f, 0.000355f, 0.000341f, 0.001719f, -0.024468f, 0.000171f, -0.000149f, 0.006348f, 0.010628f, 0.003851f, -0.005469f, -0.008818f, -0.001499f, 0.011686f, -0.002275f, -0.002115f, -0.008664f, -0.000105f, -0.003648f, 0.008679f, 0.010131f, -0.017419f, 0.011357f, 0.007397f, -0.006712f, -0.001324f, -0.009256f, 0.000155f, + -0.002842f, 0.000316f, 0.005949f, 0.011748f, -0.004443f, 0.002793f, -0.003119f, -0.003885f, 0.004254f, 0.008139f, 0.005350f, -0.004949f, -0.008361f, 0.005882f, 0.003941f, -0.002882f, -0.001578f, 0.001117f, -0.010756f, 0.003990f, 0.003164f, -0.004172f, -0.007214f, 0.002869f, -0.005498f, 0.009612f, 0.004114f, -0.016582f, 0.007551f, -0.007039f, -0.018450f, -0.005220f, -0.001442f, 0.003799f, -0.007606f, -0.000238f, 0.003989f, -0.008006f, -0.008064f, -0.008241f, -0.002622f, 0.002207f, 0.017381f, 0.002859f, 0.003253f, -0.003639f, -0.009183f, 0.012004f, -0.003670f, -0.013839f, 0.000626f, -0.013967f, 0.001001f, -0.001245f, -0.005197f, -0.015309f, 0.004643f, 0.000332f, -0.003454f, 0.003896f, 0.009300f, 0.004420f, -0.001838f, -0.001473f, -0.000106f, 0.005233f, 0.000766f, 0.001377f, 0.002813f, 0.005101f, -0.000491f, -0.002204f, -0.003038f, -0.002954f, 0.001135f, -0.000113f, -0.002487f, -0.002348f, 0.002201f, 0.002309f, 0.004290f, 0.001045f, -0.000159f, -0.000118f, 0.001569f, -0.000633f, -0.000133f, -0.000563f, 0.002691f, -0.000184f, 0.001410f, -0.000273f, 0.003696f, 0.015257f, 0.003986f, 0.003368f, + 0.006553f, 0.009629f, -0.002207f, 0.023418f, -0.003493f, 0.016775f, -0.019800f, 0.006853f, 0.011416f, -0.004104f, 0.001507f, -0.005484f, -0.000628f, 0.009063f, 0.016322f, -0.004588f, -0.008256f, -0.002343f, 0.007553f, 0.001686f, 0.016598f, 0.007953f, -0.001901f, 0.002455f, -0.000221f, -0.007754f, 0.001455f, -0.001689f, -0.002518f, 0.007350f, 0.009489f, -0.015077f, 0.017375f, -0.013250f, -0.007334f, 0.003023f, -0.005486f, 0.008853f, 0.000129f, -0.005004f, 0.012245f, 0.017354f, -0.012988f, -0.002274f, -0.001358f, 0.005411f, -0.012303f, -0.020052f, -0.009478f, -0.006095f, 0.005816f, -0.013890f, -0.008151f, -0.001571f, 0.014343f, 0.009137f, -0.010169f, 0.007250f, 0.003722f, -0.005429f, -0.008377f, -0.001257f, -0.005195f, -0.005849f, 0.000496f, -0.003873f, 0.010696f, -0.008119f, -0.001810f, 0.009203f, -0.007360f, 0.009943f, 0.011711f, 0.001668f, -0.001331f, 0.001098f, -0.014711f, -0.012903f, -0.003348f, 0.008198f, 0.000241f, -0.005619f, 0.005269f, 0.012058f, -0.008109f, -0.003662f, 0.003155f, -0.001018f, -0.005796f, 0.000035f, 0.001425f, -0.005444f, 0.000184f, -0.001451f, 0.002357f, 0.000799f, + 0.004225f, 0.000672f, 0.003292f, -0.002098f, -0.001017f, 0.000231f, 0.000279f, -0.000154f, 0.002934f, 0.001380f, 0.003442f, 0.003472f, 0.000218f, 0.001090f, -0.000633f, 0.002271f, 0.003511f, -0.001786f, 0.008919f, 0.007214f, 0.009741f, -0.009414f, -0.012407f, -0.006740f, 0.008459f, 0.000358f, 0.034967f, -0.002695f, -0.000851f, -0.008479f, -0.015793f, -0.023258f, -0.005123f, 0.007605f, 0.012294f, -0.007731f, -0.014866f, 0.001860f, 0.000133f, 0.014831f, -0.004988f, -0.006182f, 0.018398f, -0.010103f, 0.001197f, -0.014268f, 0.009089f, -0.002928f, 0.000070f, -0.003239f, -0.021612f, -0.013646f, 0.001146f, 0.011903f, 0.008015f, 0.000886f, -0.022395f, 0.014779f, -0.009053f, -0.009329f, -0.009666f, -0.012898f, -0.002010f, 0.012078f, -0.009930f, -0.011026f, 0.007508f, -0.003670f, 0.004309f, 0.022311f, -0.009791f, 0.000385f, 0.001106f, 0.009416f, -0.006642f, -0.006176f, -0.003105f, 0.014139f, -0.003220f, -0.007617f, -0.001334f, 0.011000f, 0.014418f, -0.014423f, -0.016294f, -0.005645f, -0.002422f, -0.005561f, 0.003452f, -0.011542f, -0.004052f, -0.010901f, -0.021527f, -0.008612f, -0.004983f, 0.002750f, + -0.019799f, -0.005601f, 0.000297f, 0.013886f, 0.000410f, -0.012294f, -0.000240f, -0.000630f, -0.003736f, -0.006859f, 0.000298f, 0.002761f, -0.001296f, 0.002012f, 0.001963f, -0.002814f, 0.004021f, -0.001792f, -0.004021f, 0.004241f, 0.005349f, -0.002450f, -0.005139f, -0.000291f, -0.001013f, 0.000767f, 0.004282f, 0.001468f, 0.000074f, 0.002887f, -0.001636f, -0.002718f, -0.002071f, -0.002970f, 0.004250f, -0.011473f, 0.009732f, 0.011745f, -0.008623f, -0.010584f, -0.008831f, 0.004751f, -0.000837f, 0.017050f, 0.029873f, -0.016800f, 0.001162f, -0.000759f, -0.002024f, 0.002715f, 0.008681f, -0.024547f, 0.022042f, -0.017317f, -0.008486f, 0.022069f, -0.005071f, -0.010646f, 0.007384f, 0.008115f, 0.000544f, -0.001301f, -0.017033f, 0.010599f, -0.002389f, 0.003639f, -0.011259f, 0.014030f, -0.001247f, -0.023628f, -0.025111f, 0.008342f, -0.004571f, -0.013061f, 0.006423f, -0.001147f, 0.039015f, 0.006469f, -0.007084f, -0.011674f, -0.022936f, -0.008222f, 0.004506f, -0.005666f, 0.017990f, -0.003873f, -0.026721f, -0.002666f, 0.018447f, -0.008116f, 0.002456f, 0.015826f, 0.010784f, -0.009101f, -0.001642f, 0.012799f, + 0.017248f, -0.007926f, 0.003407f, 0.002377f, -0.008253f, 0.003648f, -0.003778f, -0.001233f, 0.002609f, -0.004085f, -0.004801f, -0.016665f, -0.018092f, -0.015414f, 0.015337f, 0.008457f, 0.010007f, 0.004128f, 0.000162f, 0.006016f, -0.013188f, -0.007401f, -0.018475f, 0.009108f, -0.002295f, -0.002646f, -0.003722f, -0.002850f, -0.009402f, -0.005699f, 0.001982f, -0.003932f, 0.000615f, 0.000621f, 0.000711f, 0.003542f, 0.000519f, 0.004268f, -0.000430f, 0.003121f, -0.004255f, 0.002370f, -0.006405f, 0.000446f, -0.003015f, 0.005281f, 0.000313f, -0.003512f, -0.000955f, 0.001596f, -0.002722f, -0.003242f, -0.007488f, -0.007687f, -0.004138f, 0.007598f, 0.000575f, 0.002609f, 0.004910f, 0.001430f, 0.005949f, 0.002190f, -0.004802f, -0.020052f, 0.007655f, -0.021642f, 0.000913f, 0.007767f, -0.003410f, -0.016218f, -0.007517f, -0.003374f, 0.014523f, 0.011394f, -0.008531f, -0.008991f, 0.015480f, 0.006343f, -0.008854f, -0.009716f, -0.007443f, -0.001107f, 0.014967f, -0.002617f, 0.001420f, -0.000920f, -0.000116f, 0.019049f, 0.009552f, 0.012738f, -0.000834f, -0.001012f, 0.006667f, -0.009972f, -0.016598f, 0.013539f, + 0.021970f, -0.014889f, 0.018895f, -0.005593f, -0.001848f, -0.008511f, 0.009765f, 0.000532f, -0.010487f, 0.006360f, 0.017868f, 0.013874f, 0.006493f, -0.013436f, -0.005429f, -0.027140f, 0.004555f, 0.014051f, -0.008650f, -0.002230f, -0.010668f, 0.002752f, -0.006330f, 0.010459f, -0.006635f, 0.003455f, 0.012598f, 0.007105f, 0.023688f, 0.012317f, 0.008044f, 0.015072f, -0.012636f, 0.022647f, 0.007073f, 0.013753f, -0.004487f, -0.015683f, -0.024077f, -0.004624f, -0.004001f, -0.006336f, -0.005617f, 0.008947f, -0.016540f, 0.025048f, -0.004258f, -0.020321f, 0.011603f, 0.018716f, 0.007825f, 0.002387f, 0.003961f, 0.007008f, 0.002427f, -0.004184f, 0.004861f, -0.003834f, -0.000020f, 0.007851f, 0.000015f, -0.000318f, 0.008658f, 0.001215f, 0.004764f, -0.000736f, -0.004005f, 0.001299f, 0.000886f, -0.003454f, 0.002727f, 0.003520f, 0.000974f, -0.002461f, 0.002112f, 0.000715f, 0.006707f, 0.001473f, -0.001184f, 0.004226f, -0.005690f, 0.001680f, 0.001335f, -0.006228f, -0.009082f, -0.002537f, -0.003537f, -0.002328f, -0.004489f, -0.003169f, -0.001874f, -0.000760f, -0.007813f, 0.011043f, -0.023660f, 0.017373f, + 0.006219f, -0.003736f, 0.026009f, 0.019871f, -0.032661f, -0.022107f, 0.020881f, 0.035431f, -0.003109f, 0.005135f, -0.002846f, -0.004593f, -0.003368f, -0.001575f, 0.009188f, 0.005257f, 0.021682f, 0.005200f, 0.020761f, 0.005722f, 0.009154f, -0.002874f, -0.011409f, 0.004911f, 0.001827f, -0.009555f, 0.015961f, 0.001553f, 0.006540f, 0.003615f, -0.003022f, -0.014656f, 0.002141f, -0.016614f, -0.005344f, -0.019215f, -0.012571f, -0.007796f, 0.016362f, 0.002261f, 0.008197f, 0.019682f, -0.008261f, -0.001680f, 0.002590f, 0.007055f, 0.002414f, 0.000460f, -0.005253f, 0.014578f, 0.032459f, 0.015462f, -0.025315f, -0.018269f, -0.018654f, 0.022211f, -0.003067f, -0.020585f, 0.012328f, -0.011537f, -0.000945f, -0.003365f, -0.001112f, -0.001579f, 0.001029f, 0.019492f, 0.032537f, 0.012193f, 0.028075f, 0.017807f, 0.009339f, 0.003634f, 0.007338f, -0.008903f, 0.029879f, 0.009586f, -0.015127f, -0.020706f, 0.009529f, 0.006861f, -0.005307f, 0.014836f, 0.028301f, 0.006488f, -0.010392f, 0.017446f, -0.001235f, -0.012738f, 0.003057f, 0.009814f, 0.001995f, -0.001630f, 0.001524f, 0.005425f, 0.009837f, 0.004251f, + 0.004601f, 0.001147f, 0.006580f, -0.002522f, -0.000764f, -0.003538f, -0.000590f, 0.012969f, -0.006383f, 0.004861f, -0.001556f, 0.003171f, 0.000785f, -0.003330f, 0.002399f, 0.004674f, 0.006094f, -0.002550f, 0.002792f, -0.005082f, 0.000359f, 0.002709f, -0.008799f, 0.004081f, -0.002612f, -0.012985f, 0.003379f, 0.032356f, 0.005780f, 0.011573f, -0.010618f, 0.008530f, -0.016124f, -0.027589f, 0.000297f, 0.015161f, 0.004104f, 0.012221f, 0.016465f, 0.018756f, 0.000743f, -0.019953f, -0.017521f, -0.026516f, -0.041799f, -0.000483f, -0.005358f, 0.018556f, 0.013250f, -0.015325f, -0.009041f, 0.010972f, 0.021300f, -0.026903f, -0.017881f, -0.004997f, -0.015242f, -0.009911f, -0.005939f, 0.008604f, 0.016443f, 0.000964f, -0.010617f, -0.012359f, 0.016614f, -0.013388f, -0.006120f, -0.000213f, 0.023540f, -0.001493f, 0.001558f, -0.037399f, -0.003247f, 0.009356f, 0.018899f, 0.025272f, 0.004992f, -0.024039f, 0.011006f, 0.000649f, 0.010949f, 0.015961f, 0.002234f, 0.008095f, 0.017727f, 0.031872f, -0.021529f, -0.008195f, -0.002294f, 0.009853f, 0.033316f, 0.014342f, 0.010833f, 0.019057f, -0.006945f, -0.011036f, + -0.020716f, -0.025416f, -0.015605f, -0.000882f, 0.015925f, 0.037686f, -0.023902f, -0.017131f, -0.002871f, 0.036946f, -0.021102f, -0.011895f, -0.018902f, -0.003309f, -0.016994f, 0.005362f, 0.002674f, 0.008844f, 0.019094f, 0.003681f, 0.012054f, -0.008076f, -0.008561f, -0.010376f, 0.000350f, -0.005215f, -0.012711f, -0.010910f, -0.005849f, -0.002846f, -0.003043f, 0.012476f, -0.009833f, -0.002792f, -0.004025f, 0.008918f, 0.001722f, 0.006498f, -0.004727f, -0.004245f, 0.008375f, 0.002959f, 0.001821f, -0.007446f, 0.010934f, -0.005807f, -0.000851f, -0.004066f, 0.003099f, -0.004225f, 0.000639f, 0.007517f, 0.008559f, 0.001463f, 0.016411f, 0.009676f, 0.023219f, -0.027535f, -0.020106f, -0.002854f, 0.040483f, 0.016716f, 0.000742f, 0.022283f, -0.014031f, 0.033317f, -0.008075f, -0.028847f, -0.005943f, -0.028672f, 0.023161f, 0.014225f, 0.008890f, 0.009331f, 0.000216f, -0.009081f, 0.011032f, 0.017092f, 0.008181f, -0.005731f, 0.014811f, 0.020422f, 0.017796f, -0.002111f, -0.016110f, 0.027601f, 0.006100f, -0.001545f, -0.004978f, 0.003429f, -0.018293f, 0.017938f, -0.003756f, -0.004828f, -0.023227f, -0.012324f, + -0.014495f, 0.032129f, 0.011017f, 0.000433f, 0.003817f, 0.016640f, 0.023368f, 0.012213f, -0.031177f, 0.028064f, -0.003730f, 0.016256f, 0.006468f, 0.024653f, -0.006083f, -0.032149f, 0.009653f, -0.001430f, 0.012872f, -0.005684f, -0.013626f, 0.012005f, -0.005598f, 0.008148f, 0.040071f, -0.004911f, -0.019140f, 0.000105f, 0.004852f, -0.019674f, 0.032184f, -0.014537f, -0.020197f, 0.028818f, -0.017279f, 0.014686f, 0.001448f, -0.020911f, -0.015353f, -0.020923f, 0.006080f, 0.017474f, -0.010941f, 0.010107f, 0.018886f, -0.010822f, 0.013169f, -0.004506f, 0.022432f, -0.008198f, 0.006326f, 0.007430f, -0.006834f, 0.000027f, 0.000367f, -0.010478f, -0.001878f, 0.009435f, -0.015141f, -0.002895f, 0.010201f, 0.005421f, -0.000206f, -0.009020f, 0.003926f, -0.002492f, 0.003076f, -0.009445f, -0.009609f, -0.005175f, 0.001378f, 0.002214f, -0.011468f, -0.006926f, 0.009650f, 0.001231f, 0.003898f, -0.011213f, 0.004515f, 0.000860f, -0.005601f, 0.002091f, 0.000996f, 0.003478f, -0.006494f, 0.000313f, -0.003473f, -0.000751f, -0.009333f, -0.003759f, -0.001327f, 0.005833f, -0.002137f, -0.006068f, -0.003736f, -0.001330f, + 0.001284f, 0.001020f, -0.002276f, -0.000077f, -0.012505f, 0.009581f, -0.027705f, -0.004933f, 0.013584f, 0.003779f, -0.027109f, 0.007365f, -0.010064f, 0.019757f, 0.003826f, 0.010341f, -0.044691f, 0.013852f, -0.000027f, 0.017466f, 0.027428f, 0.001944f, -0.004415f, 0.002805f, -0.015100f, 0.029141f, -0.028115f, 0.009329f, 0.016416f, 0.012245f, 0.015052f, -0.006804f, -0.013984f, -0.014811f, -0.029062f, 0.011639f, 0.003460f, 0.016893f, 0.029131f, -0.010859f, 0.024861f, 0.014450f, -0.025631f, -0.013658f, -0.001224f, 0.003159f, 0.000482f, 0.000229f, 0.011877f, 0.022519f, 0.019578f, 0.009087f, -0.052634f, 0.013267f, 0.014546f, 0.015787f, -0.034974f, 0.021109f, -0.018367f, 0.018378f, 0.001294f, 0.009925f, -0.005494f, 0.013900f, -0.004994f, 0.044490f, 0.020290f, -0.019250f, 0.001609f, -0.054907f, 0.008437f, -0.015873f, -0.017624f, 0.015994f, 0.010314f, -0.027373f, -0.055956f, 0.035284f, 0.020604f, -0.051285f, 0.019390f, -0.011256f, 0.018975f, -0.003896f, 0.003942f, 0.008543f, -0.000257f, -0.034405f, -0.013818f, -0.004607f, 0.010263f, 0.000114f, -0.009599f, 0.015100f, -0.019417f, -0.006903f, + 0.018585f, -0.001230f, -0.002458f, 0.007184f, 0.003266f, 0.008058f, 0.002708f, -0.009931f, 0.003544f, -0.015077f, 0.008897f, -0.006340f, 0.004765f, 0.004586f, -0.004872f, -0.001898f, -0.003537f, -0.005053f, 0.002116f, -0.008446f, -0.002154f, -0.007078f, -0.006321f, -0.011984f, 0.005686f, -0.003232f, -0.004027f, -0.006681f, 0.002595f, 0.006712f, 0.003413f, 0.003870f, 0.000520f, 0.002344f, 0.004018f, 0.000201f, 0.004421f, 0.004799f, 0.011227f, -0.005847f, 0.016810f, -0.006043f, -0.011586f, 0.020724f, -0.015910f, 0.000559f, 0.002648f, 0.052606f, -0.007470f, 0.038105f, 0.008918f, 0.028798f, 0.001438f, 0.008526f, 0.008858f, 0.050749f, 0.050075f, -0.025633f, -0.024164f, 0.029231f, -0.036892f, 0.000454f, 0.009529f, -0.035998f, 0.020393f, 0.003366f, -0.003257f, -0.006182f, -0.011449f, 0.004839f, 0.003585f, 0.007281f, -0.022724f, 0.000639f, -0.005801f, -0.028974f, 0.014683f, 0.020966f, -0.033219f, -0.024016f, -0.012356f, 0.018204f, 0.016893f, 0.016962f, -0.002103f, -0.006191f, 0.015139f, 0.052880f, 0.027922f, -0.009830f, -0.007149f, -0.006652f, 0.035053f, -0.027795f, 0.012750f, 0.007995f, + -0.044436f, -0.017785f, -0.002300f, 0.006510f, -0.037707f, 0.026263f, 0.016463f, 0.008017f, 0.006811f, 0.018377f, -0.035719f, -0.003774f, -0.029678f, 0.001825f, 0.017933f, 0.031196f, 0.018586f, -0.018881f, -0.010615f, -0.001014f, 0.000735f, -0.021764f, 0.049577f, -0.003430f, 0.006350f, -0.011224f, 0.016821f, -0.003259f, 0.009723f, -0.003977f, 0.005940f, 0.005236f, 0.010575f, -0.000722f, -0.000088f, -0.003518f, 0.002305f, -0.000219f, -0.003073f, 0.015265f, -0.004652f, -0.010293f, -0.000886f, -0.000653f, 0.007268f, -0.010493f, 0.002271f, -0.008601f, -0.014642f, 0.009458f, -0.002917f, -0.009255f, 0.000559f, 0.000389f, 0.001471f, -0.008070f, 0.011264f, 0.003572f, 0.013889f, -0.016857f, -0.001431f, 0.008782f, -0.004620f, -0.013568f, -0.000474f, 0.015875f, 0.006687f, -0.009215f, 0.009433f, -0.004544f, 0.023895f, 0.037458f, -0.002758f, 0.002585f, -0.023263f, 0.002099f, -0.001179f, -0.016357f, -0.027748f, -0.005140f, -0.012936f, -0.020517f, -0.015275f, 0.023532f, -0.019979f, 0.017108f, -0.006137f, -0.004578f, 0.032576f, -0.022514f, -0.012811f, 0.005154f, 0.013043f, 0.002073f, -0.043481f, -0.026476f, + 0.004790f, -0.006838f, 0.006862f, -0.005923f, -0.013762f, 0.027750f, 0.005749f, -0.002251f, -0.011508f, -0.062164f, 0.037243f, -0.011144f, -0.000846f, -0.005180f, 0.002215f, 0.017979f, -0.010542f, -0.016878f, -0.029242f, -0.002625f, 0.012670f, -0.017834f, -0.023205f, 0.009612f, 0.036411f, -0.006098f, 0.033851f, 0.025158f, -0.025069f, 0.045908f, 0.030108f, -0.030095f, -0.046832f, -0.013315f, -0.020505f, 0.002606f, -0.014954f, -0.003522f, 0.022185f, -0.038917f, 0.018947f, -0.006240f, -0.022093f, -0.024386f, -0.024625f, -0.029539f, 0.006009f, 0.017890f, -0.016090f, 0.025521f, -0.003474f, -0.014740f, -0.030735f, 0.000596f, -0.003593f, 0.011916f, 0.036316f, -0.013096f, -0.027808f, -0.009553f, 0.000640f, 0.009475f, 0.024803f, 0.006660f, -0.003257f, -0.020369f, -0.000318f, 0.000856f, 0.009125f, 0.003954f, -0.000112f, 0.006989f, 0.010067f, -0.007579f, 0.012609f, -0.007274f, 0.005688f, 0.014911f, 0.013206f, 0.000898f, -0.021059f, -0.008506f, 0.003027f, 0.005237f, -0.014687f, 0.023668f, -0.014455f, 0.010860f, 0.012600f, -0.009605f, 0.001120f, 0.002666f, -0.005676f, -0.019926f, 0.004104f, 0.009050f, + 0.001445f, 0.016871f, 0.011577f, -0.011361f, -0.011039f, -0.002909f, -0.039510f, 0.071924f, 0.101300f, -0.009801f, 0.012373f, 0.006472f, 0.024563f, 0.049076f, -0.046835f, 0.000537f, 0.008158f, 0.000905f, -0.016866f, 0.002510f, -0.020845f, 0.024627f, 0.060365f, -0.012756f, 0.001337f, 0.003424f, 0.018316f, 0.001659f, 0.007126f, 0.023185f, -0.046437f, -0.003478f, 0.045649f, 0.046844f, -0.054719f, -0.011633f, 0.007924f, 0.007701f, 0.016347f, 0.041232f, 0.011650f, 0.083180f, 0.013895f, 0.025666f, 0.012304f, -0.013074f, -0.017211f, -0.000999f, -0.058327f, -0.083980f, -0.028382f, -0.027256f, -0.087438f, 0.013695f, -0.002031f, -0.048865f, -0.023794f, -0.081858f, -0.008902f, -0.011270f, 0.055845f, -0.054669f, 0.034157f, -0.037356f, -0.002991f, -0.024567f, -0.019335f, 0.021949f, 0.050196f, -0.038640f, -0.014442f, -0.003504f, -0.011379f, -0.004100f, 0.021211f, 0.040203f, 0.042986f, -0.030631f, 0.086400f, 0.057912f, 0.007612f, -0.032744f, -0.070970f, -0.016118f, -0.026371f, -0.019393f, 0.004762f, 0.022813f, -0.014833f, 0.008508f, 0.026882f, 0.004348f, -0.008424f, 0.027231f, 0.018219f, 0.009337f, + 0.012036f, 0.028588f, 0.028929f, 0.000223f, 0.002452f, 0.011562f, 0.010907f, -0.004710f, -0.008493f, -0.004941f, 0.005378f, -0.000712f, -0.003528f, 0.001801f, -0.005629f, 0.003983f, 0.018919f, -0.000813f, 0.006754f, 0.022955f, -0.005881f, -0.008233f, -0.008660f, -0.000979f, -0.012618f, -0.002571f, 0.011022f, -0.005974f, -0.003344f, 0.002196f, 0.000222f, 0.001954f, -0.001660f, 0.009028f, -0.005962f, -0.006334f, 0.015031f, 0.010514f, -0.011431f, -0.000609f, -0.006034f, -0.002494f, -0.036106f, 0.066186f, 0.110326f, -0.025969f, -0.005573f, 0.019572f, 0.049422f, 0.016610f, -0.028605f, 0.017949f, -0.024426f, 0.006352f, 0.015676f, -0.005916f, -0.032973f, 0.009944f, 0.035221f, -0.008763f, -0.050248f, 0.039381f, -0.011480f, 0.032145f, -0.011823f, -0.007946f, -0.012339f, -0.020353f, -0.000741f, 0.035700f, 0.020020f, 0.005905f, 0.028946f, -0.013718f, -0.011372f, 0.010999f, -0.015351f, 0.019978f, 0.011724f, 0.030563f, 0.052454f, 0.045896f, -0.032989f, -0.061561f, -0.022412f, -0.003882f, 0.048227f, -0.018460f, 0.008626f, 0.019404f, -0.019041f, -0.028389f, -0.045326f, -0.046631f, 0.036769f, 0.039127f, + -0.031224f, -0.112214f, 0.009324f, -0.007933f, -0.015332f, 0.008676f, -0.011142f, -0.045048f, -0.020971f, -0.010601f, -0.031235f, -0.013431f, 0.047786f, 0.018034f, 0.027558f, -0.010846f, -0.015589f, -0.010195f, 0.026574f, 0.004402f, 0.005000f, 0.022764f, 0.066251f, -0.005845f, -0.009711f, -0.033519f, -0.031623f, -0.046264f, -0.004961f, 0.026059f, 0.017843f, -0.018937f, 0.013823f, -0.008798f, -0.010976f, -0.019361f, -0.017538f, 0.015855f, -0.013584f, 0.015460f, 0.007299f, 0.008680f, -0.009899f, -0.014524f, 0.016214f, 0.009934f, -0.004099f, 0.012143f, -0.017008f, 0.006999f, -0.002345f, 0.009965f, -0.005654f, -0.009854f, -0.005533f, -0.004975f, 0.011367f, 0.005488f, -0.000586f, -0.012105f, -0.002880f, 0.023684f, -0.017170f, -0.000637f, -0.016684f, 0.020276f, -0.011120f, -0.004819f, -0.015430f, 0.001971f, -0.006663f, 0.001959f, 0.017250f, 0.017231f, 0.003506f, 0.000012f, -0.006787f, -0.013207f, -0.014520f, -0.001841f, -0.023780f, -0.003159f, -0.019661f, 0.010603f, -0.027818f, -0.045393f, -0.009967f, -0.007496f, 0.008430f, -0.015417f, 0.035059f, -0.020741f, -0.071384f, -0.038582f, 0.024746f, -0.033530f, + 0.039714f, 0.035555f, -0.015619f, -0.005264f, 0.005194f, -0.021644f, 0.000168f, 0.011741f, -0.003041f, 0.006454f, 0.050310f, 0.042013f, -0.011090f, -0.066414f, -0.050398f, 0.003902f, 0.035349f, -0.026605f, -0.011406f, -0.031287f, -0.040187f, 0.003859f, -0.011273f, -0.047064f, -0.051326f, -0.075278f, 0.030432f, 0.010551f, 0.001758f, 0.043660f, 0.058468f, -0.002140f, -0.043533f, -0.032971f, -0.035194f, -0.019792f, -0.012404f, 0.013435f, 0.022691f, -0.020008f, -0.032037f, -0.039042f, 0.020868f, 0.018449f, -0.038448f, -0.036548f, -0.014676f, -0.006239f, -0.022422f, 0.014075f, 0.094686f, 0.056985f, 0.110569f, 0.037121f, -0.058718f, 0.069023f, -0.003000f, -0.035084f, 0.003414f, -0.033020f, -0.072503f, -0.029819f, 0.016603f, 0.034748f, -0.008203f, 0.032026f, 0.018347f, 0.070549f, 0.076728f, 0.063358f, 0.020892f, -0.017575f, -0.011210f, -0.010243f, 0.013293f, 0.018032f, -0.026787f, -0.009702f, 0.004295f, 0.057565f, -0.008123f, 0.005129f, -0.006386f, 0.020932f, 0.020746f, 0.024707f, -0.001402f, 0.000651f, 0.000241f, 0.005503f, -0.002423f, 0.003638f, -0.021102f, -0.006533f, -0.007353f, -0.019439f, + -0.020456f, -0.009203f, 0.007154f, 0.024433f, -0.015898f, 0.003825f, 0.008305f, 0.027740f, 0.037125f, 0.025722f, 0.023650f, 0.026744f, 0.005647f, -0.009828f, -0.020775f, -0.029458f, -0.037078f, -0.028875f, -0.017386f, -0.034831f, -0.035802f, -0.013631f, -0.006539f, 0.003430f, 0.015565f, 0.066110f, -0.037633f, 0.004514f, 0.019167f, -0.008096f, -0.049051f, 0.049619f, 0.046988f, -0.026936f, -0.037548f, 0.005322f, 0.065146f, -0.034054f, 0.018440f, 0.042080f, 0.012637f, -0.015550f, -0.031391f, -0.020306f, 0.014330f, -0.004762f, 0.010887f, -0.018098f, 0.012042f, -0.040338f, 0.059174f, -0.005534f, 0.013182f, -0.002599f, -0.074911f, 0.023502f, -0.020832f, 0.038760f, 0.023096f, 0.041400f, -0.016213f, -0.071904f, 0.051657f, 0.023512f, -0.024633f, -0.044688f, 0.037005f, 0.020094f, 0.039362f, 0.040057f, -0.034876f, 0.016199f, 0.041551f, -0.060874f, 0.055862f, 0.027751f, -0.001883f, 0.018006f, -0.031779f, 0.070313f, -0.008009f, 0.046344f, 0.020611f, 0.081613f, -0.005813f, -0.014069f, 0.011362f, 0.033324f, 0.021882f, 0.023258f, 0.082135f, 0.005036f, 0.020002f, 0.048268f, -0.031877f, 0.033189f, + 0.003805f, -0.054484f, 0.020266f, -0.018223f, 0.061762f, -0.045352f, -0.054846f, -0.056770f, 0.048577f, 0.080116f, -0.025601f, 0.020551f, -0.094315f, 0.009195f, 0.004450f, -0.003388f, -0.044216f, 0.007589f, 0.018587f, -0.014359f, -0.012217f, -0.011635f, 0.029766f, 0.014206f, -0.018910f, -0.020099f, -0.011801f, -0.004584f, -0.005977f, 0.008775f, -0.032559f, -0.019263f, 0.017194f, 0.007341f, 0.006077f, 0.001256f, 0.014810f, -0.002324f, -0.001782f, -0.018870f, 0.025536f, 0.032135f, -0.013699f, -0.049462f, -0.033615f, -0.000147f, 0.000017f, 0.009746f, 0.002479f, -0.015446f, -0.024451f, -0.013188f, 0.009185f, 0.014573f, 0.039795f, 0.013693f, 0.002068f, 0.000896f, -0.029694f, -0.005860f, 0.030843f, 0.018469f, 0.006997f, -0.032140f, -0.019672f, -0.003431f, 0.004464f, 0.005853f, -0.005322f, -0.005903f, -0.005675f, -0.001895f, -0.120862f, 0.006594f, -0.014791f, 0.003736f, 0.093604f, 0.077019f, 0.110845f, 0.058509f, -0.029462f, -0.022599f, -0.045906f, -0.061236f, 0.021562f, 0.005350f, 0.016089f, 0.019444f, -0.017819f, 0.027846f, 0.047275f, 0.008670f, -0.012638f, -0.016031f, -0.033456f, -0.022276f, + -0.020213f, 0.009221f, 0.015073f, -0.048090f, -0.028416f, -0.006649f, 0.032273f, -0.014577f, 0.020795f, 0.025789f, -0.068282f, -0.067318f, 0.012792f, 0.019492f, 0.015013f, -0.050817f, -0.023332f, -0.045643f, -0.022061f, -0.020904f, 0.044032f, -0.057847f, -0.080500f, -0.030284f, 0.016001f, 0.013685f, -0.062084f, -0.049885f, -0.039171f, -0.029699f, 0.033591f, 0.047305f, 0.002161f, -0.016075f, -0.019630f, -0.010975f, -0.010455f, -0.021380f, -0.068916f, 0.022679f, 0.051822f, 0.047071f, 0.014678f, 0.064294f, 0.086973f, -0.007575f, -0.011161f, 0.066578f, -0.016102f, -0.040518f, -0.091560f, -0.031193f, 0.012497f, -0.050256f, -0.033628f, 0.023548f, -0.008212f, 0.032651f, 0.057133f, -0.034764f, -0.053936f, -0.017860f, -0.023134f, -0.013390f, -0.014626f, -0.014517f, 0.006094f, 0.008292f, 0.006694f, 0.011631f, -0.019365f, 0.016925f, -0.026756f, -0.003202f, 0.016666f, 0.022325f, -0.023906f, -0.033364f, 0.019133f, -0.007591f, 0.001253f, -0.023282f, 0.027559f, -0.016114f, -0.005785f, -0.006403f, 0.025510f, -0.021559f, 0.027674f, -0.012257f, -0.012890f, 0.018317f, 0.004844f, 0.014595f, -0.011524f, 0.001314f, + 0.005441f, 0.029836f, -0.003471f, 0.007104f, 0.004561f, 0.079665f, 0.027593f, 0.006699f, 0.028713f, -0.032635f, 0.001878f, -0.016540f, -0.024852f, 0.014952f, 0.005536f, -0.020266f, -0.034385f, -0.019358f, -0.031934f, -0.025512f, 0.010144f, -0.019626f, -0.009934f, 0.015159f, -0.010071f, 0.003633f, -0.011178f, 0.039731f, -0.031091f, 0.032619f, 0.011538f, 0.003904f, -0.030075f, -0.012613f, 0.023624f, 0.009914f, -0.000745f, 0.019293f, -0.003578f, -0.007647f, -0.012428f, -0.010068f, -0.008392f, 0.003814f, -0.000349f, 0.004245f, -0.035185f, 0.018634f, -0.014823f, -0.013480f, 0.012017f, 0.008608f, 0.004392f, -0.006375f, 0.024375f, 0.021363f, -0.030812f, 0.027640f, -0.004018f, 0.018820f, 0.036802f, -0.007546f, 0.019837f, 0.019281f, -0.018572f, -0.012894f, -0.024693f, 0.002405f, 0.004040f, -0.039096f, 0.016045f, 0.006173f, 0.030427f, -0.011847f, -0.069898f, 0.043921f, 0.002473f, 0.001474f, 0.000722f, -0.030572f, -0.009903f, -0.007904f, -0.010587f, -0.044653f, 0.025372f, 0.013056f, 0.027377f, -0.019784f, 0.011948f, -0.022217f, -0.020643f, 0.001145f, 0.017309f, 0.014329f, 0.000274f, -0.002370f, + -0.006482f, 0.001758f, -0.010480f, -0.001914f, 0.029539f, -0.011877f, 0.005716f, 0.003433f, 0.008250f, -0.018040f, 0.019595f, -0.000527f, -0.003966f, 0.004845f, -0.002170f, 0.004738f, 0.006428f, -0.016390f, -0.002492f, 0.000496f, -0.003324f, -0.002840f, 0.008859f, -0.010400f, 0.013022f, 0.019437f, 0.007037f, -0.011795f, -0.000826f, -0.002305f, -0.011415f, 0.014231f, -0.004127f, 0.007868f, -0.040828f, -0.115988f, -0.172447f, 0.036220f, 0.135615f, 0.005649f, 0.371129f, 0.342082f, 0.235087f, 0.404198f, 0.311039f, 0.042358f, 0.006836f, -0.041855f, -0.296170f, -0.302170f, -0.229612f, -0.395805f, -0.368984f, -0.105432f, -0.122943f, -0.124408f, 0.029877f, 0.075103f, -0.061512f, -0.020432f, 0.119056f, 0.075831f, -0.003736f, 0.088510f, 0.061593f, 0.004843f, 0.074310f, 0.175277f, 0.115551f, 0.040395f, 0.179784f, 0.133026f, 0.010844f, 0.154418f, 0.209406f, 0.050484f, 0.023147f, 0.213459f, 0.058928f, -0.082616f, 0.107883f, 0.164547f, -0.083290f, 0.038757f, 0.230070f, 0.022230f, 0.038566f, 0.277449f, 0.218361f, 0.018870f, 0.173424f, 0.229597f, -0.078819f, -0.046600f, 0.065942f, -0.186852f, + -0.312339f, -0.210737f, -0.344486f, -0.512305f, -0.470286f, -0.526306f, -0.670302f, -0.707501f, -0.625583f, -0.661333f, -0.622620f, -0.467428f, -0.372981f, -0.194003f, -0.047585f, 0.110915f, 0.385084f, 0.447826f, 0.486330f, 0.753865f, 0.737255f, 0.495165f, 0.637497f, 0.498235f, 0.198944f, 0.219604f, 0.310351f, 0.152225f, 0.099748f, 0.232064f, 0.166025f, 0.000065f, 0.080224f, 0.180659f, 0.046047f, 0.013615f, 0.135175f, 0.032066f, -0.138082f, 0.046279f, 0.111051f, -0.030849f, 0.099641f, 0.262824f, 0.105030f, 0.060082f, 0.231756f, 0.126998f, -0.043754f, 0.028291f, -0.058023f, -0.274646f, -0.336525f, -0.334491f, -0.422006f, -0.477077f, -0.394185f, -0.379004f, -0.432197f, -0.389980f, -0.321971f, -0.371247f, -0.339505f, -0.228218f, -0.181078f, -0.173359f, -0.070056f, 0.043409f, 0.051583f, 0.157972f, 0.265712f, 0.279276f, 0.276311f, 0.311838f, 0.288432f, 0.206857f, 0.175875f, 0.156911f, 0.109088f, 0.089525f, 0.109819f, 0.097875f, 0.067044f, 0.069779f, 0.076308f, 0.064924f, 0.063617f, 0.081259f, 0.072097f, 0.051717f, 0.042079f, 0.038055f, 0.007774f, -0.000912f, -0.008447f, -0.044055f, + -0.059026f, -0.055322f, -0.046117f, -0.038582f, -0.023489f, -0.011418f, -0.009050f, -0.001928f, 0.015640f, 0.029270f, 0.038354f, 0.037994f, 0.028837f, 0.019493f, 0.007197f, 0.000940f, 0.003902f, -0.001205f, -0.013564f, -0.014275f, -0.021844f, -0.039608f, -0.043868f, -0.042338f, -0.056740f, -0.061569f, -0.054872f, -0.062339f, -0.074965f, -0.071007f, -0.073147f, -0.081094f, -0.073479f, -0.061438f, -0.064392f, -0.058010f, -0.039149f, -0.031023f, -0.027964f, -0.007986f, 0.003399f, 0.006643f, 0.018801f, 0.034671f, 0.037351f, 0.039096f, 0.047694f, 0.046346f, 0.042189f, 0.048363f, 0.053029f, 0.053609f, 0.055421f, 0.059294f, 0.053976f, 0.051122f, 0.051615f, 0.052096f, 0.044135f, 0.037892f, 0.027707f, 0.014335f, 0.004179f, -0.000649f, -0.004193f, -0.007647f, -0.011086f, -0.012754f, -0.013588f, -0.012771f, -0.011211f, -0.009052f, -0.009727f, -0.008942f, -0.008338f, -0.007979f, -0.007906f, -0.006086f, -0.005334f, -0.003692f, -0.002608f, -0.000554f}, + {0.006979f, 0.009659f, -0.005684f, 0.000399f, 0.000302f, -0.006916f, 0.009235f, -0.003690f, -0.003628f, 0.002643f, -0.009556f, -0.004280f, 0.010211f, 0.002320f, -0.004186f, 0.007265f, 0.002233f, 0.001551f, -0.001517f, 0.003539f, -0.000081f, -0.012242f, -0.000605f, -0.004548f, -0.000572f, -0.000276f, -0.011737f, 0.000172f, -0.007555f, 0.000399f, 0.001157f, 0.005218f, 0.006227f, 0.002051f, 0.001525f, 0.001135f, 0.005374f, -0.002973f, 0.001817f, 0.000330f, 0.000817f, 0.001113f, -0.001655f, 0.004812f, 0.007188f, -0.013889f, 0.006411f, -0.003646f, -0.008379f, -0.005355f, 0.010608f, 0.005318f, -0.003633f, 0.006025f, 0.001721f, -0.003836f, 0.003711f, 0.000060f, -0.000045f, 0.000536f, 0.000686f, -0.001468f, 0.000039f, 0.000764f, -0.000657f, 0.004551f, -0.002889f, -0.006433f, -0.006254f, -0.000064f, 0.002042f, -0.000420f, 0.000250f, 0.003472f, -0.001427f, 0.006114f, -0.006540f, -0.001966f, 0.004946f, 0.005364f, -0.003761f, 0.006049f, 0.002086f, -0.001607f, -0.004157f, -0.001936f, -0.001807f, -0.001669f, -0.001681f, -0.000845f, -0.000290f, -0.000930f, -0.001771f, 0.000484f, 0.001168f, -0.002481f, + -0.000701f, -0.000826f, 0.001205f, -0.002166f, -0.000549f, 0.000260f, 0.005082f, 0.000441f, -0.004183f, 0.002638f, -0.002288f, -0.003227f, 0.000734f, -0.006866f, -0.000906f, -0.005133f, 0.001740f, 0.003293f, 0.003035f, 0.002528f, -0.005488f, -0.000334f, -0.004564f, 0.004841f, -0.009327f, -0.005200f, 0.004575f, -0.010087f, -0.001235f, -0.000630f, 0.002491f, 0.002259f, 0.004883f, 0.010545f, 0.004752f, -0.001279f, -0.000134f, -0.003732f, -0.003033f, -0.018537f, -0.017196f, -0.001120f, 0.012544f, -0.003120f, 0.009996f, 0.000905f, 0.002779f, -0.003125f, -0.014482f, 0.007447f, 0.002160f, -0.004310f, 0.003424f, -0.007606f, -0.001669f, 0.004325f, 0.001782f, 0.013483f, -0.009367f, 0.008182f, -0.004362f, -0.010609f, -0.005055f, -0.002891f, -0.003043f, 0.003760f, 0.003042f, -0.008557f, -0.003948f, -0.004875f, -0.001952f, 0.008259f, 0.008685f, 0.009481f, -0.007088f, 0.001182f, -0.004498f, -0.000578f, -0.003807f, -0.004685f, -0.005823f, -0.006385f, 0.003380f, 0.000997f, -0.001126f, -0.002325f, 0.000698f, 0.003583f, -0.003802f, -0.003220f, -0.001787f, 0.004102f, -0.001576f, -0.000794f, -0.001945f, -0.002093f, + -0.000670f, 0.000887f, -0.000206f, -0.000361f, 0.000531f, 0.000886f, -0.000423f, -0.000415f, 0.002474f, -0.002097f, -0.001473f, 0.000988f, -0.001436f, 0.002008f, -0.001441f, -0.001438f, -0.000448f, -0.000287f, 0.001108f, -0.000700f, -0.000812f, 0.000728f, -0.000005f, -0.002106f, 0.000497f, 0.000444f, -0.001738f, 0.006820f, -0.006457f, -0.008534f, -0.007248f, 0.000132f, -0.002817f, -0.002421f, -0.005718f, 0.001177f, -0.006397f, -0.000548f, -0.002586f, 0.009857f, -0.006314f, -0.007085f, -0.015556f, -0.020370f, -0.004832f, -0.009122f, -0.008242f, -0.002061f, 0.004281f, -0.005226f, -0.012099f, 0.007480f, -0.017583f, 0.005237f, -0.002888f, -0.003243f, 0.011500f, 0.007987f, 0.004304f, 0.001515f, -0.001889f, -0.001882f, -0.004216f, 0.001787f, 0.007830f, -0.006297f, 0.007429f, 0.006734f, 0.002053f, 0.000953f, 0.003139f, 0.005150f, -0.011406f, -0.005029f, 0.011030f, -0.008535f, 0.000796f, -0.000213f, 0.006779f, -0.000878f, -0.002470f, 0.001232f, 0.011443f, 0.006259f, 0.004036f, 0.003636f, 0.006414f, -0.010059f, 0.007833f, -0.008213f, 0.007259f, 0.004706f, -0.002044f, -0.001457f, -0.003330f, -0.004511f, + -0.007220f, -0.000385f, -0.002195f, -0.005834f, -0.006360f, -0.003638f, -0.003664f, -0.000661f, -0.000348f, -0.001775f, 0.008714f, -0.003568f, -0.001528f, -0.005867f, 0.006068f, 0.000031f, -0.001234f, 0.001272f, -0.002424f, -0.004224f, 0.000183f, 0.002389f, -0.000194f, -0.000405f, -0.002653f, 0.000799f, -0.000816f, -0.002460f, 0.000252f, 0.000562f, 0.001451f, -0.000298f, 0.000984f, 0.000768f, 0.002117f, 0.000720f, -0.002119f, 0.000115f, 0.001235f, -0.000299f, -0.001847f, -0.001190f, 0.002934f, 0.001498f, -0.001442f, -0.000642f, -0.000517f, 0.004155f, -0.010838f, -0.000174f, -0.005131f, -0.009795f, -0.004680f, -0.001757f, -0.006974f, -0.002247f, -0.006442f, -0.002401f, 0.004913f, 0.006808f, -0.011249f, -0.006272f, 0.003562f, -0.002148f, -0.012285f, 0.008182f, 0.014426f, 0.003116f, -0.003518f, -0.006717f, 0.001509f, 0.007084f, 0.013037f, -0.006610f, -0.002883f, -0.008353f, -0.006854f, 0.007328f, 0.007185f, -0.010155f, 0.005900f, -0.003202f, -0.006626f, 0.010392f, -0.000134f, 0.005696f, -0.014257f, 0.001035f, -0.009182f, 0.002113f, -0.011383f, -0.007019f, -0.001954f, -0.002574f, 0.023396f, 0.007519f, + 0.005981f, 0.004644f, -0.017621f, 0.009843f, 0.006692f, -0.003813f, -0.000559f, 0.007684f, -0.001205f, 0.008115f, 0.009212f, 0.009334f, -0.005510f, 0.000730f, -0.003132f, 0.004990f, -0.004540f, -0.004621f, 0.002945f, -0.004339f, 0.001942f, 0.002951f, 0.000028f, 0.005512f, 0.002034f, -0.010338f, -0.001391f, -0.001283f, 0.003125f, -0.011726f, -0.003922f, -0.002948f, 0.008155f, -0.002490f, -0.001522f, -0.006324f, -0.001827f, 0.000449f, -0.000745f, -0.002929f, -0.000063f, -0.001892f, 0.001994f, 0.000790f, -0.000135f, 0.000374f, 0.000636f, -0.001494f, -0.004535f, 0.002347f, 0.000819f, -0.002493f, 0.001053f, -0.001353f, 0.000359f, 0.000564f, 0.001403f, -0.000330f, -0.000695f, -0.001078f, 0.000833f, -0.001791f, 0.001536f, -0.002043f, -0.000283f, -0.000152f, 0.001185f, -0.001352f, -0.000712f, -0.001973f, -0.001333f, -0.001821f, -0.014629f, -0.008040f, 0.005874f, -0.006297f, 0.016989f, 0.007581f, 0.016629f, -0.000186f, -0.008253f, -0.008639f, -0.011814f, 0.017908f, -0.004458f, 0.008215f, 0.009024f, 0.001947f, 0.006326f, 0.005882f, 0.005583f, 0.002317f, -0.011876f, -0.000618f, -0.004648f, -0.001712f, + 0.007983f, -0.000682f, -0.000821f, 0.005679f, 0.003456f, 0.005878f, -0.005223f, -0.018540f, -0.011191f, -0.006999f, 0.013580f, -0.012326f, -0.003849f, 0.008419f, -0.001053f, 0.001594f, -0.010483f, 0.018027f, 0.000870f, -0.006979f, 0.014097f, -0.008702f, 0.021899f, 0.011402f, -0.005085f, 0.002573f, -0.006390f, -0.004265f, -0.020399f, 0.007209f, -0.009359f, -0.001416f, -0.000915f, -0.004422f, 0.008568f, -0.003375f, -0.008978f, -0.008615f, 0.001884f, -0.007871f, -0.008811f, 0.004972f, 0.000641f, 0.006270f, -0.003520f, -0.018504f, 0.006266f, 0.008054f, 0.010219f, -0.009955f, -0.011341f, 0.001465f, 0.018220f, 0.002958f, -0.009619f, -0.004345f, -0.001740f, 0.005033f, 0.000785f, 0.005358f, -0.005533f, -0.002050f, -0.001195f, -0.006643f, -0.005571f, 0.008152f, -0.001494f, 0.003193f, -0.000844f, -0.002332f, -0.005327f, -0.000510f, 0.000070f, 0.002016f, -0.001104f, 0.001872f, -0.001480f, -0.004240f, -0.001829f, -0.000602f, -0.000231f, -0.000784f, 0.003044f, 0.000157f, 0.003306f, -0.001185f, -0.000379f, -0.000561f, -0.003878f, -0.000040f, 0.001808f, 0.001908f, 0.001170f, 0.014516f, -0.013342f, 0.006579f, + 0.017412f, -0.012598f, 0.003586f, -0.007151f, -0.013378f, 0.019893f, 0.007671f, 0.018478f, 0.017344f, 0.002370f, -0.013522f, -0.008533f, 0.007286f, -0.001034f, 0.003143f, -0.014959f, 0.001729f, -0.026469f, -0.010886f, -0.020675f, 0.012845f, -0.011803f, -0.000241f, 0.003650f, -0.003215f, -0.005447f, 0.006414f, 0.006123f, 0.018394f, -0.002661f, -0.003857f, -0.014067f, -0.011727f, 0.011514f, 0.002689f, 0.003895f, 0.021969f, -0.006704f, 0.000341f, 0.011482f, -0.005013f, 0.005251f, 0.004186f, 0.011494f, 0.010633f, -0.007335f, -0.000938f, -0.014890f, 0.015580f, -0.010200f, -0.013148f, -0.012935f, 0.008325f, -0.004858f, -0.006833f, 0.015050f, -0.004515f, 0.015606f, -0.009458f, -0.007441f, -0.001802f, 0.010193f, 0.013543f, -0.001097f, -0.014191f, 0.005120f, -0.008994f, 0.018665f, 0.004099f, 0.010933f, -0.014868f, -0.006738f, 0.004257f, -0.003944f, 0.009306f, 0.001269f, -0.004915f, 0.005367f, 0.012268f, 0.016922f, 0.013334f, 0.000131f, -0.002849f, -0.000270f, 0.003062f, 0.000201f, -0.002716f, 0.001934f, -0.002249f, -0.000475f, 0.005081f, 0.000198f, -0.002147f, 0.005132f, -0.001423f, -0.002820f, + 0.001598f, 0.001762f, 0.000149f, -0.003317f, 0.001447f, -0.002300f, 0.000717f, -0.004491f, -0.005225f, 0.001317f, 0.002326f, -0.000211f, 0.004512f, -0.001590f, 0.002188f, 0.008788f, -0.023096f, 0.008103f, 0.006773f, 0.004664f, -0.017475f, 0.013366f, 0.021853f, -0.021301f, 0.008083f, -0.013068f, 0.008558f, 0.001240f, 0.007685f, -0.006259f, -0.000536f, 0.005131f, -0.014608f, -0.007137f, -0.006326f, 0.011603f, 0.012051f, -0.003888f, 0.005635f, -0.002873f, 0.008895f, 0.011503f, 0.004403f, 0.003539f, -0.011619f, -0.004252f, -0.014498f, -0.015917f, -0.011242f, 0.001171f, -0.005404f, -0.000652f, -0.006735f, -0.015845f, -0.005445f, 0.003346f, 0.001405f, -0.000870f, 0.024090f, -0.019432f, 0.007163f, -0.009627f, -0.002854f, -0.005961f, -0.006186f, 0.010359f, -0.006157f, 0.000888f, -0.007449f, -0.004843f, -0.009041f, 0.012417f, -0.011355f, 0.010207f, -0.002663f, 0.010198f, -0.000948f, 0.001637f, -0.001076f, 0.009863f, 0.005608f, -0.000171f, 0.020906f, 0.000945f, -0.010514f, 0.005628f, -0.009459f, -0.011471f, -0.013987f, 0.013697f, 0.004782f, 0.012216f, 0.012315f, 0.014581f, 0.008482f, -0.001621f, + -0.002610f, -0.002491f, 0.013898f, -0.001922f, 0.015587f, 0.003451f, -0.000681f, -0.002257f, 0.005340f, 0.008072f, 0.002067f, 0.003393f, 0.001086f, -0.000929f, 0.001546f, -0.002492f, 0.004189f, 0.000321f, 0.003593f, -0.000937f, 0.003411f, -0.000235f, -0.005453f, 0.002835f, 0.003751f, 0.000129f, 0.003053f, -0.000828f, 0.000175f, -0.003019f, 0.002640f, -0.000619f, 0.001295f, 0.005922f, 0.005947f, -0.024359f, -0.001750f, 0.002968f, -0.005427f, -0.019216f, 0.021966f, -0.001577f, 0.000976f, 0.018354f, -0.005007f, -0.019224f, 0.006898f, 0.012332f, 0.023823f, -0.001676f, 0.010171f, 0.001892f, -0.020634f, -0.006266f, -0.010640f, 0.010451f, 0.006223f, 0.005393f, -0.007604f, -0.001564f, -0.000690f, 0.001768f, -0.006848f, 0.009737f, 0.002932f, -0.008508f, 0.012411f, 0.001595f, -0.013472f, -0.011606f, 0.003396f, 0.014660f, 0.013472f, -0.018644f, 0.036450f, -0.001913f, 0.000894f, 0.009859f, -0.001227f, -0.004867f, -0.000107f, 0.023191f, -0.011437f, 0.011421f, -0.002585f, 0.016029f, 0.005090f, 0.014361f, -0.005260f, -0.011456f, 0.008261f, 0.012274f, -0.005889f, -0.013900f, -0.014777f, -0.013310f, + -0.005736f, -0.002743f, 0.014038f, 0.000275f, 0.012240f, -0.001500f, -0.003684f, 0.011829f, -0.010100f, -0.020097f, -0.005052f, -0.012846f, -0.011766f, -0.022332f, 0.016918f, 0.014467f, 0.006258f, -0.034601f, 0.008428f, 0.007253f, -0.002281f, -0.001038f, -0.011747f, 0.016498f, 0.008775f, 0.006526f, 0.004362f, 0.015158f, -0.000992f, -0.001092f, 0.001453f, -0.000157f, 0.003862f, 0.001724f, 0.000411f, 0.004658f, -0.002454f, -0.000615f, -0.003226f, 0.001056f, 0.001560f, 0.005145f, -0.003222f, -0.000535f, -0.001042f, 0.003979f, -0.001457f, 0.001505f, 0.002713f, 0.003202f, -0.002358f, 0.007627f, 0.000368f, -0.000180f, -0.002398f, 0.003018f, -0.004350f, 0.001738f, 0.000600f, -0.001159f, 0.002068f, 0.003761f, -0.000315f, -0.006673f, -0.001898f, -0.000886f, -0.014054f, -0.000667f, 0.000801f, 0.010302f, -0.014780f, 0.000997f, -0.002500f, -0.005796f, -0.030409f, -0.003394f, 0.013974f, 0.011256f, 0.014325f, 0.001942f, -0.016464f, 0.043060f, 0.017749f, 0.029363f, 0.002783f, -0.012500f, -0.005345f, -0.003890f, -0.018426f, -0.000901f, -0.007386f, 0.009366f, -0.000204f, 0.001184f, -0.006076f, -0.007532f, + -0.015621f, 0.005416f, 0.001263f, 0.000992f, 0.007678f, -0.000421f, 0.003116f, -0.001300f, -0.013606f, -0.010137f, 0.007828f, 0.000278f, 0.019197f, -0.024351f, 0.019423f, 0.012295f, -0.008927f, -0.017547f, -0.028008f, 0.006095f, 0.021661f, -0.010991f, 0.020959f, -0.001443f, -0.001195f, 0.005094f, -0.006475f, -0.024421f, 0.002709f, 0.011866f, 0.004947f, -0.010487f, -0.003050f, -0.006500f, 0.005202f, 0.012162f, -0.000874f, 0.003262f, -0.001870f, 0.011714f, -0.005401f, -0.003721f, 0.007601f, -0.006602f, 0.017856f, -0.004634f, -0.009422f, 0.006934f, -0.016644f, -0.008163f, -0.000112f, 0.006685f, -0.007356f, 0.003244f, -0.002837f, 0.003805f, -0.000130f, 0.004482f, 0.003473f, -0.001275f, 0.001974f, -0.007586f, 0.003960f, -0.000881f, -0.010746f, -0.003473f, -0.003227f, -0.006147f, -0.000255f, 0.001997f, -0.005162f, -0.003351f, -0.000485f, -0.006495f, 0.000224f, 0.001856f, -0.001705f, -0.006891f, 0.000372f, 0.000039f, -0.005577f, 0.002332f, 0.003679f, -0.004192f, -0.000536f, 0.001397f, 0.000168f, 0.002179f, 0.005961f, 0.005295f, -0.005589f, -0.004162f, 0.006931f, 0.004673f, -0.033038f, 0.023607f, + 0.021468f, 0.025141f, -0.008069f, -0.022614f, 0.007940f, 0.008946f, -0.033628f, -0.030715f, 0.029689f, 0.003135f, -0.014474f, 0.011117f, -0.021013f, -0.024024f, 0.003418f, 0.062172f, 0.028929f, 0.011445f, -0.016921f, 0.000161f, -0.006037f, 0.000370f, -0.007108f, -0.003586f, -0.007897f, 0.002118f, 0.017722f, 0.003390f, 0.021850f, -0.008790f, -0.007261f, 0.003872f, 0.015260f, -0.003054f, -0.002224f, -0.032705f, -0.001408f, -0.018481f, -0.001004f, 0.025114f, 0.017990f, -0.006819f, 0.017581f, 0.034900f, -0.016718f, 0.009976f, 0.028998f, -0.021468f, 0.030649f, -0.002708f, 0.012588f, -0.007428f, 0.001260f, -0.004302f, 0.004225f, 0.006955f, 0.030396f, -0.011823f, -0.003878f, 0.007753f, -0.014222f, 0.008785f, 0.004661f, -0.008330f, -0.013862f, 0.029811f, -0.002029f, -0.016632f, -0.005488f, 0.018419f, -0.007865f, 0.012446f, -0.000129f, 0.000732f, -0.019823f, -0.021709f, -0.010405f, -0.018545f, -0.016649f, -0.018175f, -0.001144f, -0.004472f, 0.008709f, -0.001316f, 0.001536f, -0.001829f, 0.010969f, 0.006823f, 0.000744f, -0.013833f, 0.000458f, -0.002748f, -0.010195f, -0.003096f, -0.005274f, 0.005133f, + 0.001982f, -0.007136f, -0.002373f, -0.005521f, -0.004225f, -0.000696f, 0.003753f, 0.003512f, 0.003837f, 0.006466f, -0.004164f, 0.000635f, 0.004128f, -0.003119f, -0.004064f, 0.004687f, -0.006975f, -0.002938f, -0.002195f, 0.002871f, 0.001246f, 0.004743f, 0.000785f, 0.000282f, 0.004005f, -0.002093f, -0.004851f, 0.040271f, 0.007376f, 0.005580f, -0.020899f, -0.012316f, 0.001180f, 0.004524f, 0.008297f, 0.009243f, -0.039966f, 0.001677f, 0.002642f, 0.028816f, 0.004741f, 0.007230f, -0.002646f, 0.026200f, -0.042936f, 0.001185f, 0.022148f, -0.025778f, 0.006513f, 0.004886f, 0.020858f, 0.003940f, 0.002306f, -0.007192f, 0.000761f, -0.022158f, 0.007548f, -0.005644f, 0.003989f, 0.005840f, -0.003684f, -0.016847f, 0.006196f, -0.013331f, -0.022852f, 0.012796f, -0.012889f, 0.008364f, -0.021486f, -0.013749f, -0.002209f, -0.006844f, 0.005218f, -0.009321f, 0.023702f, -0.000433f, 0.022601f, -0.023953f, -0.020051f, -0.006615f, 0.000389f, -0.000560f, -0.006939f, 0.020118f, 0.016616f, 0.042138f, -0.006742f, 0.026892f, -0.015808f, -0.002885f, 0.008201f, -0.032281f, 0.036687f, -0.001154f, 0.022855f, -0.001075f, + -0.031958f, -0.019462f, 0.013502f, -0.042999f, 0.022328f, 0.005975f, 0.032576f, 0.040843f, 0.005363f, -0.030599f, -0.022985f, -0.009672f, 0.023388f, -0.003045f, -0.005642f, 0.001096f, -0.008552f, 0.001043f, -0.006259f, -0.009422f, -0.003179f, -0.015037f, -0.000724f, 0.000453f, -0.006879f, -0.006406f, -0.008399f, -0.006210f, -0.002887f, 0.003496f, 0.007125f, 0.002417f, -0.001199f, 0.006277f, -0.004491f, -0.002736f, 0.001497f, 0.003198f, 0.004138f, -0.004421f, 0.005239f, -0.005687f, -0.002584f, -0.008187f, -0.013886f, 0.008297f, 0.001437f, -0.008143f, -0.007979f, -0.001801f, -0.011047f, 0.001214f, 0.000051f, -0.003947f, 0.008051f, 0.020652f, 0.031635f, 0.011003f, -0.013227f, 0.030098f, -0.032367f, -0.003399f, -0.010023f, 0.003947f, 0.025650f, -0.023362f, 0.057948f, 0.007638f, 0.014252f, -0.017180f, -0.023568f, 0.008021f, 0.000048f, 0.049247f, -0.007235f, -0.017183f, -0.028365f, -0.019111f, 0.013577f, 0.008713f, 0.007863f, -0.003675f, -0.027944f, -0.042930f, 0.003019f, -0.025935f, 0.034137f, 0.004345f, 0.027680f, -0.017370f, 0.011451f, -0.011291f, 0.014235f, 0.040114f, -0.006906f, -0.004421f, + -0.006308f, 0.010349f, 0.013158f, 0.006716f, 0.002714f, 0.003982f, 0.017235f, 0.015535f, -0.009304f, -0.014010f, -0.012693f, -0.014037f, 0.045781f, 0.017982f, -0.027278f, 0.020616f, -0.006420f, -0.022310f, -0.016142f, 0.007913f, 0.016565f, -0.031725f, -0.041403f, 0.004357f, -0.018660f, 0.053754f, 0.027743f, -0.009521f, -0.006455f, 0.011182f, 0.024030f, 0.005969f, -0.004460f, -0.007451f, -0.037608f, -0.002029f, -0.009468f, -0.040757f, 0.014981f, 0.025186f, -0.004490f, 0.012458f, 0.006705f, 0.025677f, -0.014650f, -0.004164f, 0.008964f, -0.004390f, -0.012111f, -0.013596f, -0.000742f, -0.008356f, -0.020136f, -0.004433f, -0.009498f, 0.008223f, -0.004240f, -0.011287f, 0.007147f, 0.002626f, 0.000669f, -0.007160f, 0.007113f, 0.001662f, -0.012832f, 0.003887f, 0.004483f, -0.006221f, -0.017665f, -0.008922f, -0.003612f, -0.002315f, -0.000684f, -0.006960f, -0.001340f, -0.005296f, 0.001899f, 0.001551f, -0.003876f, 0.000288f, -0.000766f, -0.005660f, -0.011181f, -0.001931f, 0.001761f, 0.005666f, 0.002604f, -0.008600f, -0.000217f, 0.005715f, 0.002311f, 0.002188f, -0.008918f, 0.002598f, -0.003756f, -0.004320f, + -0.004750f, -0.005326f, 0.000468f, -0.000104f, -0.005762f, 0.002579f, -0.015789f, -0.025030f, 0.014183f, -0.007970f, 0.021761f, 0.010638f, -0.024514f, -0.009645f, -0.012622f, 0.005683f, -0.032862f, 0.022461f, 0.030247f, -0.011990f, 0.018706f, -0.004148f, -0.008876f, 0.015440f, -0.023143f, 0.014646f, 0.024497f, 0.007390f, 0.042562f, 0.021410f, -0.018424f, 0.018913f, 0.007388f, 0.016687f, 0.000336f, 0.023667f, 0.019694f, 0.031524f, 0.011268f, -0.011601f, -0.014937f, -0.018661f, -0.002231f, 0.048611f, 0.000627f, 0.020867f, -0.030667f, 0.063342f, -0.019031f, -0.048705f, -0.023670f, 0.040187f, 0.002746f, -0.005000f, -0.005828f, -0.002384f, 0.029164f, -0.021185f, 0.016728f, -0.003890f, 0.036827f, 0.057367f, 0.028878f, 0.027930f, -0.020587f, 0.032849f, 0.019161f, 0.019724f, 0.021602f, 0.032849f, -0.007104f, -0.055923f, -0.036585f, -0.040485f, 0.010270f, 0.015132f, 0.011339f, -0.008993f, 0.018728f, 0.050365f, 0.003132f, 0.004396f, 0.011789f, -0.002268f, -0.044082f, -0.046504f, -0.016446f, 0.009875f, 0.004661f, -0.001473f, -0.027245f, 0.007375f, 0.000984f, 0.002753f, 0.013778f, -0.002580f, + 0.008637f, 0.003614f, 0.017092f, -0.003849f, 0.011304f, -0.008676f, 0.001754f, 0.002370f, 0.019896f, 0.009831f, 0.019862f, 0.002820f, 0.009958f, -0.003069f, 0.001951f, 0.009200f, -0.005911f, -0.012596f, 0.002714f, -0.007288f, -0.015121f, -0.011129f, -0.003540f, -0.002657f, 0.019384f, 0.004670f, -0.000356f, -0.005437f, 0.002777f, 0.000655f, -0.007401f, -0.007505f, -0.006193f, 0.005012f, 0.012289f, -0.001041f, 0.000874f, 0.002141f, 0.005360f, 0.004527f, 0.013120f, -0.012945f, 0.008235f, 0.020752f, 0.024374f, 0.008807f, 0.011449f, 0.018977f, -0.014955f, 0.044136f, 0.017416f, 0.008527f, -0.012593f, -0.033867f, -0.013656f, 0.018464f, -0.001836f, -0.047994f, 0.064622f, -0.022701f, -0.012658f, 0.019902f, 0.000983f, -0.006460f, 0.004688f, -0.012557f, -0.015165f, -0.003325f, -0.035153f, 0.008680f, -0.037776f, 0.001028f, -0.029946f, -0.033745f, -0.006759f, -0.007197f, -0.007391f, -0.024695f, 0.010832f, 0.026386f, 0.007090f, 0.020196f, -0.035058f, 0.034548f, 0.063015f, 0.006490f, -0.025292f, 0.039329f, -0.032277f, -0.051188f, 0.085172f, -0.008775f, 0.006057f, -0.005970f, -0.038069f, 0.029336f, + -0.034509f, 0.014897f, 0.052050f, -0.001090f, 0.071485f, -0.055826f, 0.053857f, 0.015636f, -0.035347f, -0.018591f, 0.006769f, -0.034046f, -0.016915f, 0.037799f, -0.037106f, 0.024590f, -0.024943f, 0.013613f, 0.039583f, -0.086915f, -0.038244f, 0.039918f, -0.074500f, 0.026263f, 0.023148f, 0.042554f, 0.037741f, 0.016890f, -0.002989f, 0.024937f, 0.037442f, -0.040700f, 0.040626f, -0.000852f, 0.014092f, -0.002239f, 0.012788f, 0.003187f, -0.007658f, 0.002693f, -0.011720f, -0.003979f, 0.003114f, -0.002217f, -0.020358f, 0.012744f, -0.003527f, 0.016632f, 0.010117f, -0.014600f, 0.011516f, 0.013847f, 0.010258f, 0.004065f, 0.007376f, 0.004237f, 0.009378f, -0.028534f, 0.016035f, -0.003878f, -0.007612f, 0.019990f, -0.016051f, -0.013343f, 0.006934f, -0.016949f, -0.013500f, -0.005511f, -0.012271f, -0.016622f, 0.009248f, -0.025141f, -0.074580f, -0.019554f, 0.024581f, 0.057547f, -0.018262f, 0.028999f, 0.000900f, 0.013636f, 0.029968f, 0.019225f, 0.051827f, -0.013493f, 0.002285f, 0.014099f, -0.045746f, -0.029588f, -0.013584f, -0.014937f, 0.010619f, 0.000669f, 0.003957f, -0.023999f, -0.003882f, -0.031736f, + -0.025645f, 0.012254f, 0.063969f, 0.036652f, -0.016733f, -0.020567f, 0.030522f, 0.036376f, -0.021668f, 0.009518f, 0.028143f, -0.011235f, 0.061185f, 0.020685f, 0.009042f, -0.047267f, 0.029156f, 0.005866f, 0.022987f, -0.004954f, 0.005979f, -0.007897f, -0.010100f, -0.074467f, 0.019770f, 0.051305f, 0.025463f, 0.006766f, -0.001382f, 0.025815f, -0.041765f, -0.077359f, 0.005803f, 0.102296f, 0.024702f, 0.081129f, 0.077088f, 0.000908f, 0.006779f, -0.049109f, -0.043827f, -0.004800f, -0.037590f, 0.051175f, -0.111740f, 0.021007f, -0.041830f, -0.089401f, 0.019890f, 0.041678f, 0.089316f, 0.007891f, 0.004513f, -0.057000f, 0.018634f, 0.026760f, -0.039717f, -0.003828f, 0.002864f, 0.041598f, -0.011134f, -0.026725f, 0.063194f, 0.013256f, -0.022521f, -0.000920f, -0.036504f, 0.004717f, -0.034549f, -0.007087f, -0.001143f, -0.017011f, 0.005309f, -0.013760f, -0.014456f, -0.008028f, -0.000106f, -0.007000f, 0.011741f, 0.032637f, -0.001801f, 0.000294f, 0.012251f, -0.029709f, -0.017855f, -0.003644f, 0.009021f, 0.009292f, -0.025745f, -0.014674f, 0.020549f, 0.012011f, 0.007196f, 0.004876f, 0.021705f, -0.000881f, + 0.000442f, 0.002172f, -0.014539f, 0.002597f, 0.020765f, -0.010614f, -0.019716f, 0.054789f, 0.095230f, 0.002665f, 0.025907f, 0.017384f, -0.050285f, -0.014029f, 0.049854f, 0.015950f, 0.021896f, -0.012356f, 0.014383f, 0.008714f, -0.017882f, 0.000981f, 0.025796f, 0.027699f, 0.033380f, -0.014625f, -0.004283f, -0.073912f, -0.069683f, 0.009783f, -0.043146f, 0.001682f, 0.037125f, 0.009220f, 0.004274f, -0.012680f, -0.008474f, 0.024116f, 0.058191f, -0.042197f, -0.024510f, -0.005343f, -0.041378f, -0.002813f, -0.039888f, -0.012157f, -0.042337f, 0.037443f, -0.051268f, -0.003971f, 0.009023f, 0.024943f, 0.089164f, 0.119328f, 0.030675f, -0.031137f, -0.063739f, -0.005421f, -0.043657f, -0.016877f, -0.067784f, 0.010305f, 0.065002f, 0.048278f, 0.038936f, 0.004897f, 0.009296f, 0.066984f, 0.064683f, 0.047858f, -0.004086f, 0.030280f, 0.010927f, 0.015062f, -0.077085f, 0.023390f, 0.008326f, -0.017539f, 0.046182f, 0.063158f, -0.008941f, -0.000869f, -0.031111f, -0.131181f, -0.002736f, 0.039059f, -0.019283f, 0.091149f, 0.064408f, -0.029827f, 0.005813f, -0.033275f, 0.022420f, 0.006487f, -0.012395f, -0.019826f, + -0.009357f, -0.001648f, 0.013916f, 0.017797f, 0.026690f, 0.000978f, -0.016422f, -0.034808f, 0.001815f, -0.016295f, 0.013149f, -0.015360f, -0.021592f, -0.005082f, -0.005775f, 0.016107f, 0.006410f, -0.005762f, 0.008110f, 0.004853f, 0.006385f, 0.001824f, -0.012387f, -0.019084f, -0.010049f, 0.007584f, 0.015968f, -0.001121f, 0.012973f, 0.000129f, -0.019652f, -0.019878f, 0.005364f, -0.024385f, -0.014168f, 0.000377f, -0.011120f, -0.002689f, 0.006682f, 0.010471f, -0.009486f, -0.016318f, -0.023567f, 0.059823f, 0.042078f, -0.027988f, 0.028395f, 0.044539f, 0.004665f, -0.054984f, -0.066385f, 0.062087f, 0.020703f, 0.014656f, 0.048289f, 0.001464f, -0.021452f, 0.052542f, 0.013458f, -0.039171f, -0.020357f, -0.013944f, 0.017331f, 0.001504f, -0.023959f, 0.009571f, -0.026471f, -0.002219f, -0.012078f, -0.012333f, 0.035285f, 0.066656f, -0.022786f, 0.014171f, 0.030982f, -0.015077f, -0.013550f, 0.013246f, 0.037493f, 0.012516f, -0.029159f, -0.036187f, -0.044306f, 0.024132f, 0.024663f, 0.060592f, -0.028671f, -0.026516f, 0.020931f, 0.036306f, 0.055869f, -0.001098f, -0.103980f, -0.021723f, 0.033313f, 0.033893f, + 0.014872f, -0.019762f, -0.000924f, -0.040995f, 0.006096f, -0.017415f, 0.043017f, 0.062395f, -0.018839f, 0.001906f, -0.036365f, -0.038701f, -0.015287f, -0.078938f, -0.016129f, -0.039846f, 0.035126f, -0.031766f, 0.036447f, 0.045961f, -0.092129f, -0.007074f, -0.039049f, 0.040033f, -0.016333f, 0.014529f, -0.028733f, 0.005313f, -0.024491f, 0.027803f, 0.030127f, 0.052873f, 0.050289f, 0.025647f, 0.048383f, 0.023195f, 0.002777f, 0.026353f, 0.016391f, -0.006522f, 0.021483f, -0.023253f, 0.011458f, -0.011522f, 0.009907f, -0.029473f, 0.017816f, 0.000921f, 0.014089f, -0.021476f, -0.012760f, 0.015247f, -0.005925f, -0.006649f, 0.025919f, -0.019667f, -0.004821f, 0.021924f, 0.010304f, -0.013303f, -0.004588f, 0.009468f, 0.047930f, 0.026696f, 0.020832f, 0.029226f, 0.001809f, 0.031713f, 0.010260f, 0.010363f, 0.015983f, 0.000976f, 0.025720f, 0.008142f, -0.044564f, -0.019766f, -0.011994f, -0.014298f, 0.005540f, -0.008691f, -0.021447f, -0.030580f, -0.049516f, -0.011720f, -0.027378f, -0.051037f, -0.076109f, 0.036998f, 0.039983f, 0.022933f, -0.050740f, -0.069989f, -0.053050f, -0.030720f, 0.012898f, -0.002711f, + -0.067397f, -0.040872f, -0.046080f, 0.065348f, 0.020823f, 0.028240f, -0.020347f, -0.037831f, 0.083702f, 0.020214f, 0.026340f, -0.016352f, 0.005272f, 0.024241f, -0.016720f, 0.019187f, -0.005816f, 0.039370f, 0.056492f, 0.002092f, -0.045013f, -0.036763f, 0.044807f, 0.030123f, 0.039285f, 0.010905f, 0.010081f, -0.020443f, -0.008509f, 0.006102f, 0.027530f, 0.058503f, -0.000206f, -0.110095f, -0.101460f, 0.001154f, -0.024580f, 0.065562f, 0.067290f, -0.074851f, -0.050092f, -0.031639f, 0.093066f, 0.082388f, -0.044521f, 0.012937f, -0.058391f, -0.056790f, 0.034712f, -0.026259f, 0.000625f, -0.008923f, -0.040445f, 0.028844f, 0.030126f, 0.023530f, 0.094235f, -0.069098f, -0.018269f, -0.006595f, 0.024351f, 0.007442f, 0.038918f, -0.137722f, -0.079680f, 0.028593f, 0.043404f, 0.042436f, 0.012342f, -0.045569f, -0.046174f, 0.000657f, 0.027675f, 0.079352f, 0.019553f, -0.026587f, 0.008365f, -0.051592f, 0.032143f, 0.027689f, 0.001813f, 0.044405f, 0.095607f, 0.022799f, -0.069864f, -0.036834f, -0.004809f, 0.007948f, 0.046225f, 0.039959f, 0.019115f, -0.021193f, -0.008483f, -0.014628f, -0.016451f, 0.041410f, + -0.004802f, 0.003723f, -0.016460f, 0.040153f, -0.018607f, -0.007842f, -0.001002f, 0.034832f, 0.015346f, 0.012331f, -0.007370f, -0.044030f, -0.015718f, 0.014176f, 0.035047f, 0.005946f, -0.048776f, -0.067747f, -0.056414f, -0.001467f, 0.008158f, 0.010315f, 0.006744f, -0.018579f, -0.014048f, 0.092221f, -0.061276f, 0.057599f, 0.057154f, 0.036743f, -0.133520f, -0.053431f, 0.044645f, -0.036126f, 0.025811f, -0.009381f, -0.055484f, 0.035650f, 0.010638f, 0.010735f, -0.024548f, -0.088198f, -0.008418f, -0.002535f, 0.000296f, -0.012451f, -0.064413f, 0.048288f, -0.039818f, 0.082355f, -0.008714f, -0.007019f, 0.040000f, 0.029979f, -0.039333f, -0.003475f, -0.029783f, 0.044088f, 0.069140f, 0.052826f, -0.058384f, 0.013258f, -0.039082f, 0.035383f, -0.033951f, -0.013745f, 0.005738f, -0.002790f, 0.037564f, -0.034356f, -0.081052f, 0.021024f, -0.029012f, 0.030444f, 0.031563f, -0.102344f, -0.017433f, -0.019364f, 0.003711f, 0.113736f, -0.030646f, -0.082434f, -0.021989f, 0.072366f, 0.034616f, -0.044547f, -0.014719f, 0.044972f, -0.000221f, 0.055477f, -0.083166f, -0.043698f, 0.049991f, -0.051971f, -0.126784f, -0.037175f, + -0.017315f, 0.144862f, -0.039501f, -0.074505f, 0.039721f, -0.085982f, 0.227393f, 0.021768f, -0.211347f, -0.056027f, -0.037358f, 0.150227f, 0.081151f, -0.094048f, -0.049818f, -0.000978f, 0.110800f, 0.088646f, -0.013835f, -0.069247f, 0.027187f, -0.023253f, 0.099918f, -0.009414f, -0.050271f, -0.041307f, 0.065432f, -0.052139f, 0.033875f, -0.100087f, -0.000519f, -0.003560f, -0.005916f, -0.005603f, 0.021026f, -0.055269f, 0.053734f, 0.004766f, 0.039390f, 0.001901f, -0.063465f, -0.048378f, 0.036024f, 0.043038f, 0.067029f, 0.025375f, -0.006930f, -0.043487f, 0.005755f, 0.011238f, -0.011659f, 0.003213f, 0.043898f, 0.007194f, -0.002179f, -0.049772f, 0.009547f, 0.035961f, 0.013057f, 0.001828f, -0.014760f, -0.035685f, -0.039613f, -0.018379f, 0.012095f, -0.011693f, 0.017510f, -0.016509f, -0.010076f, 0.006794f, 0.001318f, 0.000530f, -0.122044f, 0.034196f, -0.001911f, 0.041683f, 0.100987f, 0.032328f, 0.013938f, -0.056929f, -0.023572f, -0.056893f, -0.068070f, -0.022835f, 0.013426f, 0.038907f, 0.051550f, -0.005795f, 0.029998f, 0.036274f, -0.031573f, -0.064107f, 0.033988f, 0.012178f, -0.052046f, -0.017724f, + 0.049514f, -0.016859f, -0.005504f, 0.045254f, 0.025414f, 0.020105f, 0.006339f, 0.025717f, -0.024602f, -0.059552f, -0.025854f, 0.016941f, -0.024358f, -0.014092f, 0.021842f, 0.001440f, -0.041897f, 0.043688f, 0.009475f, -0.038858f, 0.005016f, -0.009396f, 0.037657f, 0.020918f, -0.015140f, 0.017647f, -0.023145f, -0.052209f, 0.007038f, 0.012679f, -0.004697f, 0.000101f, 0.011090f, -0.022821f, 0.007259f, -0.019544f, 0.011772f, 0.037211f, -0.003894f, 0.016252f, 0.017275f, -0.014421f, 0.000991f, -0.035558f, 0.012223f, 0.020937f, -0.064507f, 0.037465f, -0.040206f, 0.012677f, 0.001941f, -0.000211f, 0.017867f, 0.007182f, 0.042223f, 0.007667f, 0.011995f, -0.006116f, 0.021643f, -0.022686f, -0.014838f, 0.005196f, 0.003695f, -0.019855f, 0.007227f, -0.001797f, -0.005682f, -0.011480f, 0.004177f, -0.002286f, 0.022900f, -0.005873f, 0.002812f, 0.016307f, -0.011375f, 0.011322f, -0.006972f, 0.003955f, -0.011379f, -0.010034f, -0.011363f, -0.003040f, -0.005058f, 0.008599f, 0.006253f, -0.026766f, -0.007214f, -0.007841f, 0.018717f, -0.011063f, 0.007063f, 0.003169f, -0.029682f, 0.009881f, 0.019438f, 0.001240f, + -0.007152f, 0.003194f, -0.008647f, -0.004443f, 0.006522f, 0.098913f, -0.003678f, -0.003216f, -0.027527f, -0.026925f, 0.020260f, -0.001134f, 0.017524f, 0.000365f, -0.009752f, -0.013011f, 0.006602f, -0.018237f, 0.018442f, -0.017177f, 0.026913f, -0.021822f, 0.015636f, -0.018471f, -0.004231f, -0.002963f, -0.017335f, -0.013153f, 0.003777f, -0.007766f, -0.005559f, -0.000128f, -0.013073f, 0.001714f, -0.002700f, 0.004125f, -0.003177f, 0.007546f, -0.026096f, 0.023637f, -0.009027f, -0.007764f, 0.017781f, -0.014403f, 0.000814f, -0.017987f, -0.015887f, 0.011432f, 0.009939f, -0.012651f, -0.008318f, 0.005060f, -0.000978f, -0.022006f, 0.005459f, 0.003833f, -0.000189f, 0.014397f, -0.005530f, -0.006238f, -0.006107f, -0.015047f, -0.004268f, 0.015703f, -0.016937f, 0.004270f, -0.008314f, -0.002107f, 0.000874f, -0.005141f, 0.003489f, 0.000042f, 0.010798f, -0.016053f, -0.001595f, 0.010274f, -0.020874f, 0.011976f, -0.009526f, 0.000076f, 0.009214f, -0.004645f, -0.009643f, 0.004191f, -0.001903f, -0.002773f, -0.000936f, -0.006799f, -0.000411f, 0.006899f, -0.000705f, -0.003364f, 0.000968f, -0.005913f, 0.003771f, 0.002851f, + 0.001455f, -0.004800f, -0.001677f, 0.005949f, -0.008003f, 0.007612f, -0.003813f, 0.003250f, 0.008297f, -0.010440f, 0.002178f, 0.000581f, -0.013324f, 0.002251f, -0.004452f, 0.005244f, -0.002154f, 0.000265f, 0.007584f, -0.005339f, 0.001199f, -0.008525f, 0.001118f, 0.001068f, -0.002423f, -0.002171f, -0.001343f, -0.003175f, 0.000250f, -0.001685f, -0.000006f, 0.005651f, -0.008852f, 0.003552f, -0.046718f, -0.078058f, 0.028755f, 0.251287f, 0.062478f, 0.138695f, -0.005774f, -0.134514f, -0.044121f, -0.132365f, -0.113689f, -0.039788f, -0.027669f, -0.008984f, 0.074822f, 0.101237f, 0.133113f, 0.168867f, 0.072416f, -0.042909f, -0.078456f, -0.165310f, -0.157762f, -0.063920f, -0.052964f, -0.034817f, 0.067632f, 0.092969f, 0.055048f, 0.086213f, 0.102722f, 0.035129f, 0.027896f, 0.019513f, -0.053806f, -0.024343f, -0.038639f, -0.083126f, -0.046396f, -0.061701f, -0.092179f, -0.049721f, 0.011001f, 0.010071f, 0.050907f, 0.124646f, 0.084728f, 0.071069f, 0.068636f, 0.021481f, 0.004732f, -0.006832f, -0.036180f, -0.050854f, -0.065036f, -0.092206f, -0.082099f, -0.045457f, -0.014699f, -0.030981f, 0.025431f, 0.048172f, + 0.040369f, 0.070515f, 0.077974f, 0.050542f, 0.045206f, 0.044781f, -0.007285f, -0.021589f, -0.011318f, -0.063511f, -0.053160f, -0.013260f, -0.052618f, -0.055682f, -0.035753f, -0.050059f, -0.024775f, 0.014630f, 0.031844f, 0.058439f, 0.092939f, 0.058092f, 0.053291f, 0.059572f, 0.021635f, -0.006800f, -0.011123f, -0.031595f, -0.052994f, -0.054455f, -0.052461f, -0.056956f, -0.040081f, -0.036349f, -0.030707f, -0.012281f, 0.014016f, 0.035627f, 0.054508f, 0.082948f, 0.086779f, 0.085135f, 0.071844f, 0.023098f, -0.019057f, -0.038374f, -0.062485f, -0.082100f, -0.093307f, -0.092630f, -0.073822f, -0.041205f, -0.010149f, 0.025811f, 0.076111f, 0.085197f, 0.084826f, 0.089374f, 0.073439f, 0.039003f, 0.012099f, -0.020602f, -0.059629f, -0.082858f, -0.073582f, -0.068357f, -0.054282f, -0.024880f, 0.002107f, 0.020619f, 0.040883f, 0.046778f, 0.045625f, 0.036722f, 0.016384f, 0.007980f, 0.002913f, -0.006332f, -0.007831f, -0.007419f, -0.010400f, -0.012437f, -0.009999f, -0.013731f, -0.009563f, -0.007421f, -0.005408f, -0.006306f, -0.002197f, -0.000322f, 0.003895f, 0.004775f, 0.008732f, 0.010604f, 0.012854f, 0.009509f, + 0.009774f, 0.006668f, 0.004226f, -0.001498f, -0.003267f, -0.007084f, -0.007613f, -0.010960f, -0.010185f, -0.010065f, -0.007179f, -0.006394f, -0.001993f, 0.000697f, 0.004086f, 0.005616f, 0.009966f, 0.009592f, 0.010472f, 0.008158f, 0.006601f, 0.002497f, 0.001888f, -0.001791f, -0.002930f, -0.007874f, -0.010436f, -0.011516f, -0.008284f, -0.007299f, -0.002287f, 0.000072f, 0.002587f, 0.003098f, 0.005986f, 0.005604f, 0.007960f, 0.006718f, 0.007071f, 0.004303f, 0.002941f, -0.001629f, -0.003050f, -0.006411f, -0.006187f, -0.007034f, -0.005322f, -0.005806f, -0.002861f, -0.001784f, 0.001871f, 0.003162f, 0.005841f, 0.004967f, 0.005887f, 0.003301f, 0.002803f, -0.000114f, -0.000650f, -0.002305f, -0.001220f, -0.002748f, -0.001584f, -0.002690f, -0.001058f, -0.001733f, 0.000030f, -0.000653f, 0.000992f, 0.000069f, 0.001362f, 0.000145f, 0.001240f, -0.000027f, 0.001049f, -0.000304f, 0.000746f, -0.000540f, 0.000651f, -0.000572f, 0.000618f, -0.000583f} + }, + { + {0.005683f, 0.005921f, -0.005343f, -0.000801f, 0.008186f, 0.002853f, -0.004421f, 0.001019f, -0.004871f, -0.004106f, -0.003522f, -0.007326f, -0.002709f, 0.004664f, -0.000488f, 0.002638f, -0.001378f, -0.001990f, -0.002186f, -0.000782f, 0.006139f, -0.003833f, 0.000269f, -0.000160f, 0.000153f, 0.005091f, -0.000285f, 0.003541f, 0.010773f, 0.008618f, 0.008422f, 0.004550f, 0.001819f, -0.001257f, -0.010192f, 0.004257f, -0.003879f, 0.006582f, 0.002172f, -0.003297f, 0.002921f, -0.004375f, -0.008850f, -0.002569f, -0.003494f, -0.008146f, 0.000233f, -0.000894f, -0.001301f, -0.003752f, 0.000407f, 0.008751f, 0.003707f, 0.005986f, -0.000210f, 0.003728f, -0.003492f, -0.000122f, 0.004394f, -0.003607f, 0.002904f, -0.004501f, -0.005038f, 0.000622f, 0.010040f, 0.006814f, 0.003781f, -0.001856f, 0.001579f, 0.001211f, 0.000469f, -0.001712f, -0.004020f, -0.005844f, -0.004445f, 0.000256f, -0.003823f, -0.001731f, -0.004107f, 0.001442f, 0.000489f, 0.002184f, -0.001296f, 0.001818f, 0.002280f, 0.002094f, 0.000138f, 0.001359f, -0.001037f, -0.000874f, -0.000152f, -0.002363f, 0.002497f, 0.002269f, -0.000372f, 0.002834f, + 0.000679f, 0.000665f, -0.001347f, -0.000654f, -0.001688f, 0.000640f, 0.000756f, 0.000090f, -0.000617f, 0.001056f, -0.000724f, -0.002186f, -0.000775f, -0.001424f, -0.000217f, 0.000570f, 0.000445f, -0.002296f, 0.000307f, 0.001653f, 0.003715f, 0.001927f, -0.006444f, 0.015210f, -0.000337f, 0.000931f, -0.001618f, -0.008013f, 0.005925f, -0.004173f, -0.004018f, -0.009338f, -0.007214f, -0.003016f, 0.005801f, 0.008366f, -0.001695f, 0.004956f, -0.001926f, 0.009077f, 0.009397f, -0.018749f, 0.003434f, 0.000108f, -0.001841f, 0.006370f, 0.009987f, -0.003061f, -0.001457f, 0.000224f, -0.000614f, -0.004746f, 0.003928f, -0.004784f, -0.003797f, -0.000364f, 0.005008f, -0.002805f, -0.010553f, -0.004665f, -0.007172f, 0.000869f, 0.000643f, -0.009341f, -0.001108f, -0.004059f, 0.001950f, -0.000247f, -0.001409f, 0.002337f, -0.003117f, 0.003214f, -0.005016f, 0.004964f, 0.007221f, 0.011115f, 0.004609f, -0.004801f, 0.003979f, 0.004689f, -0.001731f, -0.012498f, 0.000829f, 0.006574f, -0.005027f, 0.003812f, -0.007259f, -0.000035f, -0.004627f, -0.012691f, -0.003868f, -0.006612f, 0.003243f, 0.004788f, -0.004284f, 0.002084f, + -0.002005f, 0.006069f, 0.000488f, 0.003580f, 0.005055f, -0.002088f, 0.002097f, 0.001083f, 0.002145f, 0.004401f, -0.000998f, 0.001533f, 0.005440f, 0.003150f, 0.000748f, 0.003307f, 0.000597f, 0.001472f, -0.000210f, 0.000001f, -0.002929f, 0.001647f, 0.001878f, 0.002538f, 0.001696f, 0.000634f, 0.000808f, 0.000162f, 0.000952f, -0.000302f, -0.000809f, -0.000143f, 0.002012f, 0.001770f, 0.000533f, 0.001597f, 0.000373f, 0.001836f, 0.001512f, 0.012514f, 0.003333f, -0.016832f, 0.005932f, 0.008750f, 0.003097f, -0.001391f, 0.004338f, -0.010546f, 0.001429f, 0.004787f, -0.002451f, 0.004633f, -0.000795f, 0.005629f, 0.001269f, -0.007090f, 0.004436f, 0.006636f, 0.006407f, -0.001801f, 0.003026f, 0.003625f, 0.002390f, -0.019055f, 0.002621f, -0.008060f, -0.002477f, -0.002621f, 0.004406f, 0.002160f, -0.015684f, -0.005536f, -0.003563f, -0.002875f, 0.006291f, -0.005725f, -0.010991f, 0.002790f, 0.005009f, 0.003252f, -0.010933f, -0.005019f, 0.003430f, -0.010169f, -0.000883f, -0.011246f, 0.001614f, 0.005663f, -0.005865f, -0.001668f, 0.006443f, 0.008369f, -0.019329f, -0.001323f, -0.005401f, 0.005945f, + 0.002349f, 0.001067f, 0.001627f, -0.005322f, 0.004872f, 0.004356f, -0.015012f, 0.011613f, -0.001578f, 0.002942f, -0.007674f, -0.003084f, -0.006494f, -0.000693f, 0.001654f, -0.005882f, -0.008350f, 0.007502f, -0.002708f, 0.003160f, -0.000436f, -0.001388f, 0.002121f, 0.002626f, -0.003055f, -0.007580f, 0.004271f, 0.004005f, 0.000976f, 0.001924f, -0.000253f, 0.000703f, 0.001276f, 0.000062f, 0.001274f, 0.001018f, -0.000177f, 0.003085f, 0.000421f, 0.002394f, 0.002699f, 0.000280f, 0.003806f, 0.000024f, 0.000751f, 0.001153f, 0.001714f, 0.001498f, 0.001905f, -0.002714f, 0.001307f, -0.001160f, 0.000593f, 0.001395f, 0.000945f, 0.002371f, -0.000745f, -0.000539f, 0.001703f, 0.003200f, -0.007953f, -0.007795f, -0.006168f, -0.004188f, 0.012803f, -0.004581f, 0.001890f, -0.010431f, 0.011053f, 0.000563f, -0.007209f, -0.002107f, 0.006475f, -0.013307f, 0.004631f, -0.004042f, 0.003133f, 0.001960f, -0.005846f, -0.004432f, -0.015462f, -0.004369f, -0.017434f, 0.002121f, 0.004143f, -0.002048f, -0.002220f, -0.001767f, 0.002835f, -0.007049f, -0.012374f, -0.005990f, -0.004440f, -0.002094f, 0.004787f, -0.003047f, + 0.007653f, 0.003164f, 0.005908f, -0.007933f, -0.000258f, -0.000540f, -0.006324f, 0.001653f, 0.005310f, -0.000661f, -0.003061f, -0.007778f, -0.006869f, 0.004599f, 0.007290f, -0.000381f, 0.014255f, 0.011007f, -0.009889f, -0.002715f, 0.000215f, -0.010783f, -0.011977f, 0.018240f, -0.000109f, 0.000357f, 0.005959f, -0.011833f, -0.003651f, -0.007717f, 0.018353f, 0.004761f, 0.001139f, -0.014605f, -0.011285f, 0.001399f, -0.004534f, 0.009240f, -0.004616f, -0.000247f, 0.002774f, -0.005818f, 0.002262f, 0.005522f, -0.008303f, -0.000047f, -0.013361f, 0.001341f, 0.005315f, -0.004059f, 0.002192f, 0.001492f, 0.006864f, -0.001092f, 0.001283f, -0.001451f, -0.000041f, 0.002744f, 0.003177f, 0.002630f, -0.001829f, 0.000749f, 0.000089f, 0.001108f, 0.000317f, 0.001084f, -0.001754f, 0.004151f, 0.000268f, 0.001097f, 0.000881f, 0.001223f, 0.001241f, 0.001109f, -0.000904f, -0.001237f, -0.000726f, 0.000818f, 0.003117f, 0.003261f, 0.000848f, 0.001412f, -0.002542f, -0.001137f, -0.021142f, 0.010551f, 0.006091f, 0.010761f, -0.005733f, 0.005871f, 0.006285f, 0.011063f, 0.002718f, -0.021238f, 0.005375f, 0.000856f, + 0.008505f, 0.015317f, 0.000896f, 0.006622f, 0.005938f, -0.012737f, 0.004546f, 0.001123f, 0.001848f, -0.003498f, -0.001670f, 0.007822f, 0.005310f, 0.000272f, -0.007664f, -0.000141f, -0.003606f, -0.004063f, 0.012787f, 0.005818f, -0.000432f, -0.001743f, -0.015232f, -0.013196f, -0.014960f, 0.003966f, 0.004176f, -0.015654f, 0.001214f, 0.001018f, -0.015365f, 0.000935f, 0.002498f, -0.002106f, 0.017894f, -0.002229f, -0.008629f, -0.002235f, 0.010326f, -0.000880f, -0.015728f, 0.017182f, 0.009035f, -0.010986f, 0.008496f, 0.001637f, 0.001729f, -0.000315f, 0.001086f, -0.004283f, -0.007834f, -0.007557f, 0.013885f, -0.000941f, -0.003894f, -0.000665f, 0.010024f, -0.009193f, -0.016066f, 0.000558f, 0.003819f, 0.003016f, -0.014024f, -0.007352f, 0.005585f, -0.001292f, 0.008050f, 0.002999f, -0.002376f, -0.002382f, -0.002023f, -0.001139f, 0.000418f, 0.012566f, 0.007474f, 0.004537f, 0.004171f, 0.004852f, 0.007472f, -0.003507f, -0.001019f, -0.003973f, -0.001056f, 0.001390f, 0.000517f, -0.002198f, -0.003385f, 0.003697f, 0.000724f, 0.001668f, 0.000102f, -0.002258f, 0.000974f, 0.001958f, -0.004307f, -0.000753f, + 0.003752f, 0.000783f, 0.000385f, -0.001633f, -0.000317f, -0.001056f, -0.001763f, 0.000495f, 0.001999f, 0.001467f, -0.001124f, 0.001498f, 0.000317f, 0.006438f, 0.024440f, 0.007339f, 0.019590f, -0.021561f, 0.000775f, -0.010624f, 0.000289f, 0.007215f, 0.008214f, -0.011061f, 0.004792f, -0.006391f, -0.005751f, -0.007678f, -0.012609f, -0.001804f, -0.029620f, -0.000245f, 0.009698f, -0.001267f, -0.002076f, 0.003286f, -0.015573f, 0.005494f, -0.014855f, -0.004634f, 0.015164f, 0.003120f, 0.005189f, 0.000395f, 0.004414f, 0.013022f, 0.011682f, 0.022664f, 0.011685f, -0.017083f, -0.001499f, 0.019097f, -0.002743f, -0.013922f, -0.002196f, 0.001799f, -0.006451f, 0.012804f, 0.009392f, -0.010946f, -0.003283f, 0.012280f, 0.012963f, -0.004615f, -0.008366f, 0.020699f, -0.008597f, -0.027837f, -0.018909f, 0.006169f, -0.028109f, -0.000531f, -0.008471f, 0.000165f, -0.002682f, -0.007808f, 0.010419f, 0.003029f, -0.002824f, -0.009136f, 0.007935f, -0.005463f, 0.014780f, 0.010181f, -0.004145f, -0.009829f, 0.002032f, 0.003912f, 0.001299f, 0.000582f, 0.003429f, -0.002028f, -0.011013f, -0.003142f, 0.015128f, -0.001738f, + -0.006275f, -0.001622f, -0.003284f, -0.007841f, -0.007727f, -0.004214f, -0.003759f, 0.000925f, -0.000160f, 0.007644f, -0.000755f, -0.002727f, 0.000979f, 0.002747f, -0.001922f, 0.001612f, -0.002714f, 0.005202f, -0.000259f, 0.003202f, 0.000382f, -0.004965f, -0.000600f, -0.000522f, -0.005332f, -0.001394f, -0.003283f, 0.002403f, 0.000059f, -0.000789f, 0.001701f, 0.000826f, -0.000623f, 0.000952f, -0.005956f, 0.001290f, 0.001625f, -0.023812f, 0.011261f, -0.002024f, 0.005995f, 0.008003f, 0.012877f, 0.002983f, -0.011391f, 0.015515f, -0.005778f, 0.006952f, -0.006933f, 0.005806f, -0.001077f, -0.027988f, -0.005843f, -0.004720f, -0.003331f, 0.002005f, -0.006769f, -0.004553f, 0.003726f, 0.006243f, 0.002099f, 0.015246f, 0.006971f, -0.014577f, -0.001105f, 0.000114f, -0.008280f, 0.017528f, -0.010457f, -0.010004f, 0.018345f, 0.019428f, -0.002427f, -0.000145f, -0.012064f, 0.004424f, 0.002598f, -0.006201f, 0.003192f, 0.012062f, 0.007381f, 0.014489f, -0.003605f, -0.011237f, 0.007019f, 0.001761f, 0.003441f, -0.013410f, -0.007009f, -0.007848f, 0.003158f, 0.007796f, 0.002805f, 0.002142f, 0.013824f, 0.016670f, + 0.002455f, -0.007813f, 0.009423f, 0.007811f, -0.011722f, 0.001706f, 0.002005f, -0.001266f, 0.001341f, -0.000196f, 0.009882f, -0.001013f, -0.007766f, 0.004016f, 0.013034f, 0.005875f, 0.007640f, 0.016253f, -0.011066f, 0.002039f, -0.003787f, 0.015425f, 0.008765f, 0.016515f, -0.007953f, -0.002040f, 0.002701f, -0.005783f, 0.000820f, 0.001682f, -0.001904f, 0.000077f, 0.003774f, 0.004463f, -0.001691f, 0.002466f, 0.001668f, 0.005769f, 0.004993f, -0.000617f, -0.000469f, -0.002508f, 0.000685f, -0.002528f, 0.001317f, -0.004496f, 0.004465f, -0.000019f, -0.001797f, -0.000013f, -0.000432f, 0.000236f, -0.001657f, -0.003492f, 0.004967f, -0.000575f, 0.000778f, -0.005557f, -0.004658f, -0.001188f, 0.004765f, -0.000462f, -0.000574f, 0.000520f, -0.000618f, 0.009950f, -0.020707f, -0.012427f, 0.008268f, -0.004872f, -0.019341f, 0.009831f, -0.010110f, -0.008866f, 0.012514f, -0.003808f, -0.004114f, -0.003118f, 0.003244f, 0.009233f, 0.004825f, 0.004959f, 0.005140f, -0.007724f, -0.004586f, -0.001625f, 0.011276f, 0.005778f, -0.019767f, 0.006283f, 0.006192f, -0.008317f, 0.018638f, 0.017062f, 0.009213f, 0.000643f, + -0.006740f, -0.004400f, 0.001023f, -0.005824f, -0.006938f, -0.011482f, 0.001689f, -0.013108f, 0.009525f, 0.003634f, 0.000140f, 0.002054f, 0.005038f, 0.004321f, 0.010195f, 0.015855f, -0.005992f, -0.025163f, -0.004360f, -0.017142f, 0.005926f, 0.002356f, -0.022743f, 0.008246f, -0.009534f, 0.028576f, 0.009513f, -0.018022f, -0.000594f, 0.018177f, 0.009507f, -0.014924f, -0.008858f, 0.019017f, 0.010951f, -0.013225f, 0.016278f, -0.013573f, -0.017863f, 0.002757f, -0.027058f, 0.016334f, 0.017606f, -0.004044f, -0.016278f, -0.002934f, 0.006431f, 0.003305f, 0.002755f, 0.001633f, 0.012626f, -0.017717f, 0.005725f, 0.019715f, 0.000356f, 0.000673f, -0.017350f, 0.008639f, 0.004880f, -0.016050f, -0.003977f, -0.008107f, -0.003811f, 0.000625f, 0.005045f, 0.004009f, 0.000596f, -0.004837f, 0.000519f, -0.005183f, 0.002172f, 0.003072f, -0.000631f, -0.002513f, -0.001699f, 0.003151f, 0.001033f, -0.001025f, -0.002677f, -0.005177f, -0.000558f, -0.005055f, 0.010097f, -0.009447f, 0.000006f, -0.001013f, 0.003893f, 0.002590f, -0.005401f, 0.001643f, -0.001649f, 0.008546f, -0.001040f, 0.002405f, 0.000291f, -0.004938f, + 0.002050f, 0.001022f, -0.000582f, 0.005523f, -0.000087f, -0.016212f, -0.012025f, 0.000418f, -0.019531f, 0.000093f, -0.045886f, -0.014399f, -0.005294f, -0.025023f, -0.008797f, -0.005209f, -0.011008f, -0.008454f, 0.005965f, -0.012038f, -0.022951f, 0.006151f, 0.014380f, -0.023382f, -0.006489f, 0.007267f, 0.011750f, 0.020257f, 0.012893f, 0.011953f, 0.013052f, 0.004772f, 0.023140f, -0.013721f, -0.005898f, 0.004953f, -0.011455f, 0.004412f, 0.006560f, 0.012172f, 0.001595f, 0.019869f, 0.004166f, 0.004942f, 0.013685f, -0.005986f, -0.011723f, 0.000270f, -0.017975f, -0.011439f, -0.020747f, -0.000807f, -0.000943f, -0.027226f, 0.009854f, -0.012300f, 0.005600f, -0.025710f, 0.003102f, -0.019441f, 0.029124f, 0.001529f, -0.025923f, 0.031199f, 0.038156f, 0.010775f, -0.012759f, -0.009404f, 0.009921f, -0.003254f, -0.001233f, 0.011335f, -0.018184f, 0.011934f, -0.018779f, 0.010028f, -0.007469f, -0.010529f, 0.004515f, 0.010073f, -0.005405f, -0.000510f, 0.011773f, 0.003146f, -0.005763f, 0.006676f, -0.002870f, -0.010695f, 0.001447f, 0.010123f, -0.001899f, -0.003905f, 0.004030f, 0.002993f, 0.008227f, 0.001709f, + 0.000317f, 0.003600f, -0.002710f, 0.005782f, 0.001483f, 0.004802f, 0.001677f, 0.003830f, 0.003081f, 0.003138f, 0.002510f, -0.003433f, 0.003990f, -0.004643f, -0.004330f, 0.000501f, 0.002637f, 0.000923f, 0.001347f, 0.002908f, 0.001925f, 0.000294f, -0.001475f, -0.003472f, 0.000098f, -0.003654f, 0.010009f, -0.004867f, 0.009028f, 0.013631f, 0.001841f, 0.012591f, -0.007184f, 0.019599f, -0.015275f, -0.013948f, -0.037221f, -0.008099f, -0.019373f, -0.045092f, 0.011198f, -0.025946f, -0.015991f, -0.020895f, 0.005621f, -0.040612f, 0.010745f, 0.003446f, -0.007979f, -0.000791f, -0.011873f, -0.004027f, 0.009612f, -0.013773f, -0.010055f, 0.000643f, 0.007289f, -0.012038f, -0.001101f, 0.014032f, -0.022515f, -0.005074f, 0.012886f, -0.012314f, -0.000919f, 0.000211f, -0.003697f, 0.018989f, -0.016685f, 0.011314f, -0.007679f, 0.015461f, 0.016054f, -0.016410f, -0.022197f, 0.020710f, -0.002389f, 0.004582f, 0.005230f, 0.001943f, -0.004891f, 0.011701f, -0.006454f, -0.025398f, 0.006490f, 0.005279f, -0.022240f, -0.002380f, -0.008063f, 0.013358f, 0.015996f, 0.008085f, 0.002565f, -0.006270f, -0.015846f, 0.016139f, + 0.009768f, 0.014444f, -0.001145f, -0.022526f, -0.005445f, -0.003325f, -0.010027f, -0.005489f, -0.002792f, 0.006618f, 0.009920f, -0.008649f, -0.007576f, -0.022382f, -0.010818f, 0.004423f, 0.009121f, 0.002592f, -0.002052f, 0.010379f, 0.009556f, 0.005893f, 0.011768f, -0.003572f, 0.009200f, 0.004325f, 0.006251f, 0.001167f, -0.000054f, -0.006106f, -0.004863f, -0.001047f, 0.002882f, -0.001384f, -0.005394f, -0.006516f, -0.000334f, -0.000998f, 0.001277f, -0.004402f, 0.000955f, -0.005267f, 0.001581f, 0.009053f, 0.001933f, -0.005042f, -0.005365f, 0.011498f, 0.006409f, -0.001316f, -0.000768f, -0.014331f, -0.001707f, -0.000072f, -0.012285f, 0.000411f, -0.005020f, -0.003687f, 0.002845f, 0.003903f, 0.000863f, -0.001299f, -0.011248f, 0.055163f, 0.031694f, 0.002220f, -0.017580f, -0.041593f, -0.005185f, 0.019488f, -0.009232f, -0.016744f, -0.031363f, -0.001726f, -0.006849f, 0.001111f, -0.010827f, 0.010127f, -0.000278f, 0.027318f, 0.010688f, -0.011369f, -0.000913f, -0.004848f, 0.001959f, -0.005606f, 0.005533f, 0.016944f, -0.019928f, 0.003863f, -0.012052f, 0.007905f, -0.008617f, -0.014422f, -0.028350f, -0.002254f, + 0.016054f, 0.005447f, -0.003640f, 0.005992f, -0.002205f, 0.015447f, 0.024279f, -0.008482f, -0.005670f, -0.028227f, -0.030745f, 0.008498f, 0.004434f, -0.012928f, -0.011314f, -0.025416f, -0.017600f, 0.010108f, -0.003411f, 0.000074f, 0.001185f, -0.001943f, 0.011517f, 0.006679f, -0.021056f, 0.000904f, -0.019199f, -0.001634f, -0.010408f, -0.005901f, 0.020164f, 0.041821f, 0.068739f, 0.002622f, 0.022039f, -0.020746f, -0.026567f, -0.037151f, -0.002066f, -0.000099f, 0.007432f, 0.007908f, -0.005191f, -0.046969f, 0.019405f, -0.007960f, -0.006593f, 0.002987f, -0.012428f, 0.001449f, -0.006805f, -0.019116f, 0.000138f, -0.007632f, 0.000078f, 0.001944f, 0.000631f, 0.013630f, 0.001872f, 0.001585f, -0.000833f, 0.000599f, -0.000671f, 0.005876f, 0.012717f, 0.003830f, -0.000555f, 0.002781f, 0.011522f, 0.000359f, 0.000047f, 0.004417f, -0.003948f, 0.001488f, -0.010723f, 0.003681f, 0.005465f, -0.009939f, 0.010120f, 0.000666f, 0.000794f, -0.002906f, -0.011207f, -0.003527f, 0.004888f, 0.000108f, -0.001218f, -0.002715f, 0.006724f, -0.001857f, 0.000425f, 0.020132f, 0.033572f, -0.016605f, 0.000068f, 0.006449f, + -0.027372f, 0.000252f, -0.017670f, -0.017131f, 0.025796f, -0.007592f, -0.006469f, -0.013863f, 0.029625f, 0.026027f, -0.000002f, 0.042762f, 0.004817f, 0.013354f, 0.009417f, -0.011924f, -0.013961f, -0.022261f, -0.011718f, 0.005212f, 0.000212f, 0.019162f, 0.001496f, -0.002093f, -0.003487f, 0.013540f, -0.019570f, -0.047834f, -0.016767f, 0.014105f, 0.004426f, -0.003933f, -0.014249f, 0.000847f, -0.023011f, -0.003461f, -0.020964f, -0.001453f, -0.002624f, -0.014777f, 0.014162f, 0.007030f, 0.026899f, -0.022221f, 0.041668f, 0.011182f, -0.008105f, -0.014751f, -0.007571f, 0.006560f, 0.024038f, -0.007402f, 0.013754f, -0.021243f, 0.017165f, -0.019292f, -0.021703f, 0.021398f, -0.031041f, 0.020341f, 0.017097f, 0.033017f, -0.033621f, 0.025547f, -0.003187f, 0.022775f, 0.008900f, -0.035345f, -0.006180f, -0.008312f, 0.009857f, -0.018760f, 0.055636f, -0.002749f, -0.019637f, 0.007879f, 0.025715f, 0.017452f, 0.012047f, 0.013264f, -0.001752f, 0.006312f, -0.002272f, -0.007388f, -0.004689f, 0.001946f, -0.000243f, -0.007331f, 0.002104f, -0.002165f, -0.011281f, -0.002362f, -0.004306f, 0.004729f, 0.005955f, 0.003223f, + -0.001554f, 0.010965f, -0.001780f, 0.006060f, 0.002436f, 0.007752f, 0.002926f, -0.003947f, -0.004885f, 0.001311f, -0.000580f, 0.005336f, -0.002168f, 0.000491f, 0.004553f, -0.002778f, 0.007796f, -0.003708f, -0.004296f, 0.002150f, -0.003220f, 0.008110f, 0.002951f, -0.002413f, 0.004898f, 0.002401f, -0.023262f, -0.031192f, -0.063899f, -0.019615f, -0.037520f, 0.010461f, -0.001708f, -0.012780f, -0.018580f, -0.017686f, -0.015985f, -0.017322f, -0.016969f, 0.001784f, -0.013833f, -0.002489f, -0.030073f, -0.046147f, 0.056546f, -0.017616f, 0.030643f, -0.005853f, 0.007916f, 0.009766f, 0.016522f, 0.010898f, -0.002879f, -0.000923f, -0.024407f, -0.005517f, -0.005803f, -0.016412f, -0.025595f, 0.010005f, -0.002883f, 0.036197f, -0.025053f, 0.000671f, 0.050072f, -0.012061f, -0.041593f, -0.013413f, 0.001658f, -0.018848f, 0.029302f, 0.013471f, -0.016080f, 0.011893f, 0.015747f, -0.009692f, -0.000313f, 0.007921f, 0.019595f, -0.000720f, -0.019282f, -0.018979f, 0.023452f, 0.016772f, -0.012307f, -0.026705f, 0.017062f, 0.019743f, -0.017598f, -0.024027f, 0.016862f, -0.030473f, 0.058355f, 0.012564f, -0.004752f, 0.002393f, + 0.014286f, 0.003235f, -0.010256f, 0.000961f, 0.004210f, 0.020968f, -0.013729f, 0.004212f, -0.041437f, -0.037322f, -0.004155f, 0.002248f, -0.004054f, -0.018104f, 0.013216f, 0.030856f, -0.000838f, 0.007925f, -0.002871f, 0.006613f, 0.009351f, 0.011149f, -0.011892f, 0.013401f, -0.006149f, -0.003529f, 0.008895f, 0.016495f, -0.004826f, -0.016497f, 0.004750f, -0.001494f, 0.002799f, -0.001472f, -0.008820f, -0.002429f, -0.009115f, -0.005642f, -0.011259f, 0.011680f, 0.011970f, -0.007108f, 0.000039f, 0.014368f, 0.004602f, -0.006022f, 0.003061f, 0.017995f, 0.011866f, 0.012994f, 0.013110f, 0.011581f, 0.004354f, 0.016510f, 0.008758f, 0.006919f, 0.006188f, 0.015545f, -0.024191f, 0.000216f, 0.008767f, 0.007016f, -0.015877f, 0.038169f, 0.026678f, 0.054871f, 0.030104f, 0.020572f, 0.007834f, -0.047590f, -0.004012f, 0.006759f, -0.028247f, -0.007250f, 0.054018f, 0.004421f, -0.031412f, -0.030644f, 0.027968f, -0.042319f, -0.011102f, 0.002181f, 0.011376f, 0.005217f, -0.008159f, 0.014170f, -0.019266f, 0.000312f, -0.003910f, -0.011767f, -0.002680f, -0.008070f, -0.027830f, 0.015043f, -0.024113f, 0.014536f, + 0.012620f, 0.016869f, 0.003004f, 0.011328f, -0.010059f, 0.045416f, 0.006065f, -0.047341f, -0.041976f, 0.004306f, 0.018893f, 0.037033f, -0.012015f, -0.028225f, -0.012670f, -0.003313f, 0.004182f, 0.021978f, 0.004735f, -0.016427f, 0.049552f, -0.060136f, -0.010024f, 0.012027f, -0.042120f, -0.021306f, -0.011013f, 0.006805f, -0.068281f, -0.031803f, 0.049081f, -0.017971f, 0.014419f, -0.015314f, -0.055086f, -0.020284f, 0.026728f, -0.007530f, 0.010509f, 0.017552f, 0.035081f, -0.015998f, 0.004020f, -0.009784f, 0.022049f, 0.010574f, 0.009610f, 0.002062f, -0.000663f, 0.001246f, 0.019268f, 0.010454f, 0.011501f, -0.002267f, -0.000183f, 0.007747f, -0.012513f, -0.010998f, 0.005362f, 0.022766f, 0.010639f, 0.009291f, -0.021228f, 0.013408f, 0.040623f, 0.000541f, -0.000105f, -0.014722f, 0.011268f, 0.002553f, -0.009015f, -0.011792f, 0.002071f, 0.012719f, 0.014394f, 0.010910f, -0.012064f, 0.009182f, -0.007940f, 0.010327f, -0.015628f, -0.008042f, -0.002787f, -0.007646f, -0.009981f, -0.002358f, -0.025673f, -0.024016f, 0.004599f, -0.000936f, -0.003578f, 0.009724f, 0.000246f, -0.001530f, 0.000807f, 0.010545f, + 0.009289f, 0.003740f, 0.000141f, 0.005194f, 0.005944f, 0.004553f, 0.007133f, -0.001814f, 0.009709f, 0.027133f, -0.011271f, -0.088868f, -0.022226f, 0.004291f, 0.025207f, 0.023457f, 0.022429f, 0.021385f, 0.040251f, 0.070785f, -0.040362f, 0.029261f, -0.009801f, -0.001971f, -0.009945f, -0.059359f, -0.043279f, -0.009032f, -0.002065f, 0.011907f, 0.023602f, 0.029411f, -0.008866f, -0.001696f, -0.014887f, -0.000572f, -0.002154f, -0.001001f, 0.031682f, 0.015910f, 0.011000f, 0.023174f, 0.028921f, -0.050291f, 0.025241f, -0.029523f, -0.035907f, -0.011526f, 0.024286f, 0.006084f, -0.024020f, 0.007446f, 0.003687f, 0.016958f, -0.000986f, -0.048899f, -0.033814f, -0.040676f, -0.039060f, 0.004485f, 0.033667f, -0.006902f, 0.120090f, -0.078780f, -0.058079f, 0.035193f, -0.009761f, -0.024700f, -0.007301f, -0.007302f, 0.002084f, -0.073872f, 0.008499f, -0.006159f, 0.010844f, 0.055081f, -0.003098f, 0.018726f, 0.022420f, 0.025824f, 0.092674f, -0.034946f, 0.116976f, 0.031454f, -0.002300f, 0.014430f, 0.007534f, -0.048570f, -0.041406f, -0.001629f, -0.009484f, 0.005097f, 0.018845f, 0.013404f, -0.007360f, -0.041775f, + -0.032808f, 0.012631f, -0.021829f, 0.013948f, 0.017109f, 0.035376f, 0.036098f, 0.031387f, 0.007204f, 0.010402f, 0.000454f, -0.002422f, 0.024710f, -0.004755f, -0.001134f, 0.006787f, -0.033429f, -0.009000f, 0.015496f, -0.000832f, -0.002493f, 0.021114f, 0.009296f, -0.032831f, 0.023103f, -0.018713f, -0.023971f, -0.014748f, -0.006703f, 0.005415f, 0.011464f, 0.010106f, -0.012271f, 0.014962f, 0.007732f, 0.009348f, 0.005539f, 0.012561f, -0.004382f, 0.007290f, -0.019580f, -0.005102f, -0.010208f, 0.003668f, 0.008407f, -0.052155f, 0.018812f, 0.084141f, 0.002163f, 0.087807f, 0.045986f, -0.005085f, -0.034047f, 0.099020f, 0.014625f, -0.016415f, 0.012590f, -0.022287f, -0.006809f, -0.003168f, -0.006237f, 0.012689f, 0.027422f, 0.019424f, 0.003500f, 0.012896f, -0.019966f, -0.018966f, 0.005879f, -0.005633f, 0.032380f, 0.035447f, 0.022333f, -0.008833f, 0.002148f, -0.042602f, -0.026939f, -0.007728f, -0.029444f, -0.046093f, -0.027622f, 0.022299f, -0.026929f, -0.081465f, -0.037791f, 0.025191f, -0.033004f, -0.023057f, 0.001191f, -0.005770f, 0.038476f, 0.056760f, 0.074326f, -0.039092f, 0.021189f, -0.000315f, + 0.002529f, -0.015731f, -0.049018f, -0.097772f, -0.064421f, 0.034289f, -0.065263f, -0.034031f, 0.018004f, 0.033512f, -0.024048f, 0.037767f, 0.107688f, 0.022932f, 0.021045f, -0.080940f, -0.108721f, -0.023273f, -0.033667f, -0.057799f, -0.016328f, -0.048219f, 0.034963f, 0.020102f, 0.097750f, 0.040554f, -0.010959f, -0.019313f, -0.033503f, 0.023454f, 0.044645f, 0.088700f, 0.062128f, -0.042049f, -0.088787f, -0.043105f, -0.028035f, -0.052316f, -0.009410f, 0.045465f, 0.022024f, 0.056134f, 0.002859f, 0.040064f, 0.016249f, -0.012357f, -0.016158f, -0.018590f, 0.011276f, 0.024716f, 0.006557f, 0.032003f, 0.039788f, 0.024276f, 0.028547f, 0.013453f, 0.042967f, 0.037829f, 0.002144f, -0.000200f, 0.019207f, 0.042650f, -0.003489f, -0.010648f, -0.005647f, 0.036492f, 0.011702f, 0.002336f, -0.009970f, 0.023072f, 0.017941f, -0.004859f, 0.015037f, 0.018421f, 0.009573f, -0.003220f, 0.004704f, 0.013396f, 0.002393f, -0.000698f, -0.020263f, 0.043797f, 0.090123f, -0.048646f, 0.068479f, 0.052982f, -0.008066f, -0.015232f, -0.029669f, 0.007852f, 0.061097f, 0.043405f, 0.071523f, -0.032305f, -0.013424f, -0.015965f, + -0.003843f, -0.020594f, 0.019078f, -0.024960f, 0.052560f, 0.020542f, -0.085079f, -0.038536f, 0.001168f, 0.011227f, 0.037350f, -0.019295f, -0.031956f, 0.007942f, 0.010479f, -0.015431f, -0.015605f, 0.007911f, -0.023955f, -0.038982f, -0.016559f, 0.078880f, 0.033726f, 0.011907f, -0.040575f, -0.014986f, -0.034393f, 0.018514f, 0.039404f, 0.011374f, 0.002888f, 0.021301f, -0.013424f, 0.049636f, 0.029485f, 0.001240f, 0.017349f, -0.003713f, 0.102188f, 0.019227f, -0.043160f, 0.014746f, 0.017855f, 0.008304f, 0.023305f, -0.000514f, -0.041216f, 0.047257f, 0.011032f, 0.006551f, 0.019467f, 0.007062f, 0.000116f, -0.032347f, 0.035306f, 0.038117f, 0.020871f, 0.112954f, 0.081832f, -0.046010f, -0.088522f, -0.063996f, -0.005963f, 0.005785f, -0.008938f, -0.077347f, -0.037289f, -0.028694f, -0.030932f, -0.032882f, 0.028128f, 0.020003f, -0.007834f, 0.002723f, -0.006679f, -0.044215f, 0.012259f, -0.009753f, -0.002253f, -0.045279f, -0.041602f, -0.009467f, 0.017724f, 0.018708f, 0.002597f, 0.020066f, 0.009466f, 0.025822f, 0.004048f, 0.003562f, -0.047257f, -0.030090f, 0.020114f, 0.003480f, -0.013113f, 0.022769f, + 0.010480f, 0.002398f, -0.022793f, 0.019972f, 0.030149f, 0.019225f, 0.021849f, 0.025669f, -0.006219f, 0.028650f, 0.061385f, 0.046441f, 0.010821f, 0.004658f, -0.008021f, -0.012805f, -0.031789f, -0.042066f, 0.010285f, -0.015734f, -0.001002f, 0.002107f, -0.003304f, -0.011360f, -0.005601f, -0.015427f, -0.105254f, -0.012423f, 0.024636f, 0.030354f, -0.025137f, 0.037653f, 0.009929f, -0.013758f, -0.040346f, 0.009654f, -0.010964f, -0.056902f, -0.020012f, -0.019565f, 0.002669f, -0.078729f, -0.064001f, -0.009658f, 0.037543f, -0.004290f, -0.013754f, -0.047238f, -0.000730f, 0.042285f, 0.000258f, -0.027664f, -0.018239f, -0.005184f, -0.017925f, 0.011252f, 0.011995f, -0.039831f, -0.047252f, 0.008105f, -0.003292f, 0.010817f, 0.073397f, -0.044922f, -0.006479f, -0.001881f, -0.074913f, -0.021054f, -0.055264f, -0.007379f, -0.006190f, 0.052847f, 0.056722f, 0.072520f, 0.018828f, 0.013140f, -0.028787f, -0.061549f, 0.000897f, 0.026462f, -0.023330f, 0.088856f, 0.203717f, 0.198248f, 0.027198f, -0.125160f, -0.117447f, -0.044398f, -0.074427f, 0.242965f, 0.148105f, 0.095061f, 0.120675f, -0.000905f, -0.066317f, -0.171295f, + -0.111961f, -0.041712f, -0.010725f, 0.070534f, 0.139007f, 0.126212f, -0.016333f, -0.102321f, -0.064099f, -0.092550f, -0.075080f, 0.014189f, 0.100323f, 0.149476f, 0.056093f, -0.006926f, 0.006920f, -0.055787f, -0.068697f, -0.065816f, 0.022063f, 0.011602f, 0.016171f, 0.060747f, 0.030552f, -0.004888f, -0.039444f, -0.031927f, -0.023057f, -0.051136f, -0.011620f, 0.024325f, -0.020649f, 0.002584f, -0.008292f, 0.037550f, 0.026244f, -0.047373f, -0.031320f, -0.096993f, -0.080111f, -0.068955f, 0.043966f, 0.080875f, 0.029292f, 0.021970f, -0.029807f, -0.049534f, -0.155076f, -0.112574f, -0.069354f, 0.014717f, 0.041920f, 0.028978f, 0.005525f, -0.055060f, -0.048158f, -0.088028f, -0.149559f, -0.056809f, 0.016535f, 0.045318f, 0.075420f, 0.037137f, -0.000749f, -0.039932f, -0.016111f, -0.025751f, 0.001081f, 0.056496f, -0.055323f, 0.063370f, 0.009662f, 0.008849f, -0.099232f, -0.029355f, 0.083387f, -0.055066f, 0.021618f, 0.002206f, -0.021231f, 0.028470f, 0.007889f, 0.047698f, 0.070091f, -0.040051f, -0.058337f, 0.016978f, -0.036256f, 0.047318f, -0.060868f, -0.028802f, -0.039180f, 0.006601f, -0.011974f, -0.031958f, + 0.013616f, 0.070885f, -0.055727f, -0.057299f, -0.045918f, -0.011516f, -0.014821f, 0.094425f, 0.003679f, -0.000377f, -0.092607f, -0.020981f, 0.006519f, 0.079750f, 0.031582f, -0.011279f, -0.132676f, -0.091038f, 0.086587f, 0.099188f, 0.091378f, -0.040252f, -0.220024f, -0.040243f, 0.095518f, 0.084359f, 0.010049f, -0.022388f, 0.011378f, -0.085079f, -0.054934f, 0.032671f, -0.028454f, 0.029880f, -0.018721f, 0.006658f, 0.089578f, -0.065471f, -0.038772f, 0.079603f, 0.057486f, 0.118546f, 0.046163f, -0.150850f, 0.045415f, 0.169633f, 0.032945f, 0.087524f, 0.018375f, -0.043424f, -0.004275f, 0.109219f, 0.069875f, 0.143995f, -0.187731f, 0.028691f, -0.004190f, -0.017489f, 0.070247f, 0.004418f, -0.099077f, 0.011672f, -0.007255f, -0.016570f, 0.011099f, 0.002761f, -0.061886f, 0.054609f, -0.027424f, 0.001770f, -0.000561f, -0.010716f, -0.000638f, 0.010971f, -0.019561f, -0.018095f, -0.035324f, -0.043721f, 0.042906f, 0.001002f, 0.013652f, 0.042715f, -0.048327f, 0.024767f, -0.005119f, -0.078287f, -0.003153f, 0.028767f, 0.084578f, -0.019894f, -0.126003f, -0.011080f, 0.054844f, 0.019058f, 0.048019f, -0.037056f, + -0.037786f, -0.041107f, 0.016869f, -0.004382f, 0.027818f, -0.043546f, 0.019696f, 0.015532f, 0.010373f, -0.048684f, 0.001568f, 0.014891f, 0.033158f, -0.010969f, 0.003935f, -0.027924f, 0.007786f, -0.014965f, 0.027692f, -0.001611f, 0.021277f, -0.003739f, 0.006313f, -0.031230f, 0.000971f, 0.000151f, 0.033409f, -0.016662f, 0.010746f, -0.033755f, 0.001822f, -0.000838f, 0.027570f, -0.006003f, 0.011046f, -0.108562f, 0.012273f, 0.019410f, 0.010354f, 0.107027f, 0.018035f, -0.008038f, -0.068326f, -0.011686f, -0.006718f, -0.016014f, -0.000677f, -0.012936f, 0.027389f, 0.012778f, -0.020140f, -0.003454f, 0.042506f, 0.000131f, -0.002388f, 0.004515f, -0.010637f, -0.018243f, 0.023854f, 0.021088f, 0.016010f, -0.026573f, 0.013974f, 0.039764f, 0.015598f, -0.002282f, 0.025653f, -0.004667f, -0.030430f, 0.008051f, 0.007719f, -0.024512f, -0.026640f, 0.026547f, 0.025853f, -0.025513f, 0.016359f, 0.015793f, -0.000218f, -0.009291f, 0.000198f, 0.020185f, -0.001107f, -0.022536f, 0.011740f, 0.013754f, -0.041857f, 0.010711f, 0.030970f, 0.010132f, -0.027209f, 0.004245f, 0.019228f, -0.035262f, 0.009595f, 0.016531f, + 0.006993f, -0.009169f, -0.033609f, 0.039585f, -0.042827f, -0.003780f, 0.041249f, 0.000674f, -0.007091f, 0.000913f, -0.038729f, 0.017155f, -0.000550f, 0.022138f, 0.041024f, -0.018551f, -0.002928f, -0.023695f, 0.031383f, -0.006568f, -0.003480f, 0.032154f, -0.041959f, -0.018460f, 0.023337f, 0.019023f, 0.008374f, -0.034136f, 0.011831f, -0.007501f, -0.002115f, 0.016373f, 0.012476f, 0.002346f, -0.008660f, -0.004370f, 0.001618f, 0.009265f, -0.029768f, 0.021715f, 0.004466f, -0.004141f, 0.008450f, -0.003906f, 0.018892f, -0.028034f, -0.005041f, 0.000580f, 0.001691f, 0.002799f, 0.013018f, 0.008592f, -0.047570f, 0.025181f, -0.005041f, -0.005534f, -0.001935f, 0.009691f, 0.013069f, -0.011797f, -0.004713f, 0.022156f, -0.018901f, -0.002430f, -0.014445f, 0.010537f, 0.100361f, 0.008741f, -0.012192f, -0.033606f, -0.022249f, 0.011687f, -0.014908f, 0.012868f, -0.019915f, -0.001661f, 0.015929f, -0.009068f, 0.007503f, 0.007240f, -0.027781f, 0.007595f, -0.009085f, -0.006145f, -0.022899f, 0.006373f, -0.006477f, -0.014552f, -0.006730f, 0.010972f, -0.009998f, -0.010012f, 0.014142f, -0.015819f, 0.007949f, 0.013332f, + -0.027867f, 0.027345f, -0.006964f, -0.032899f, 0.017378f, 0.017173f, -0.015303f, 0.005182f, 0.009896f, -0.013982f, -0.012427f, -0.000057f, 0.001820f, 0.008784f, -0.004540f, -0.001836f, -0.013825f, 0.012494f, -0.010842f, -0.003652f, 0.015828f, -0.019337f, 0.005483f, -0.003651f, 0.000001f, -0.009205f, -0.012422f, -0.005223f, 0.021519f, -0.014944f, -0.005682f, 0.003293f, 0.004520f, 0.000422f, -0.013146f, 0.009753f, -0.005934f, -0.011496f, -0.000399f, -0.020906f, 0.030173f, -0.013582f, 0.006046f, 0.006459f, -0.006312f, 0.010268f, -0.018088f, -0.014906f, 0.018324f, -0.009281f, -0.012583f, 0.012104f, -0.000927f, 0.003203f, -0.008428f, 0.001953f, -0.001951f, 0.005396f, -0.006752f, -0.005445f, 0.006867f, -0.004309f, -0.004959f, -0.001560f, 0.004285f, -0.003133f, -0.000531f, -0.002597f, 0.001044f, 0.003930f, -0.006032f, -0.006216f, 0.017192f, -0.005379f, -0.006342f, 0.005148f, -0.002131f, 0.004763f, -0.014050f, 0.000650f, -0.002462f, -0.000715f, -0.003837f, 0.015960f, 0.000060f, -0.014590f, 0.004528f, 0.001285f, -0.000775f, -0.000177f, 0.006161f, -0.004384f, -0.004277f, -0.002121f, -0.003876f, -0.002172f, + 0.001624f, -0.004788f, -0.000278f, 0.001026f, -0.000794f, -0.050151f, -0.081087f, 0.036896f, 0.281194f, 0.042748f, 0.140623f, -0.033238f, -0.142472f, -0.052164f, -0.138840f, -0.091887f, -0.028810f, -0.015585f, 0.006885f, 0.082357f, 0.099606f, 0.137648f, 0.137239f, 0.043244f, -0.053885f, -0.087924f, -0.160540f, -0.123466f, -0.064535f, -0.025520f, -0.016173f, 0.049370f, 0.083604f, 0.064112f, 0.088075f, 0.084811f, 0.031639f, 0.027302f, 0.010688f, -0.062555f, -0.022854f, -0.053824f, -0.092398f, -0.056305f, -0.053860f, -0.080621f, -0.016821f, 0.037272f, 0.028824f, 0.081684f, 0.107701f, 0.055644f, 0.071838f, 0.053574f, -0.007275f, -0.002613f, -0.004752f, -0.058042f, -0.070870f, -0.063723f, -0.095291f, -0.081682f, -0.028498f, -0.005044f, 0.011850f, 0.066060f, 0.061335f, 0.058578f, 0.074406f, 0.055085f, 0.019317f, 0.034720f, 0.019474f, -0.021823f, -0.009985f, -0.040127f, -0.083616f, -0.050714f, -0.047315f, -0.066334f, -0.031545f, -0.021423f, -0.036857f, 0.031179f, 0.059733f, 0.068386f, 0.109769f, 0.102908f, 0.043844f, 0.025375f, -0.001131f, -0.037617f, -0.044070f, -0.046001f, -0.066341f, -0.061260f, + -0.055739f, -0.051606f, -0.031798f, -0.012973f, 0.000214f, 0.024809f, 0.058980f, 0.072908f, 0.068320f, 0.081844f, 0.057146f, 0.027345f, 0.011955f, -0.009722f, -0.041777f, -0.047743f, -0.065973f, -0.086689f, -0.086880f, -0.069472f, -0.057552f, -0.008989f, 0.034942f, 0.077247f, 0.104107f, 0.112153f, 0.087089f, 0.056360f, 0.025384f, -0.006919f, -0.043144f, -0.063857f, -0.085764f, -0.085611f, -0.060845f, -0.040283f, -0.011883f, 0.015387f, 0.031202f, 0.040782f, 0.051505f, 0.044039f, 0.027917f, 0.023229f, 0.008651f, -0.000623f, -0.007794f, -0.010616f, -0.013369f, -0.013457f, -0.018976f, -0.015799f, -0.012009f, -0.010274f, -0.009892f, -0.006704f, -0.006150f, -0.001282f, 0.003663f, 0.010681f, 0.013053f, 0.017292f, 0.018607f, 0.019345f, 0.012277f, 0.007376f, 0.001587f, -0.002187f, -0.010846f, -0.014943f, -0.019704f, -0.019087f, -0.016318f, -0.009805f, -0.006535f, -0.001216f, 0.001943f, 0.009581f, 0.013512f, 0.016951f, 0.013712f, 0.013395f, 0.009261f, 0.006125f, 0.001351f, -0.000444f, -0.006022f, -0.008695f, -0.012895f, -0.013712f, -0.014719f, -0.010152f, -0.006896f, -0.000337f, 0.002276f, 0.007417f, + 0.009333f, 0.011705f, 0.008897f, 0.009468f, 0.006602f, 0.005455f, 0.000919f, -0.001375f, -0.005363f, -0.005774f, -0.008269f, -0.007167f, -0.007951f, -0.005727f, -0.005085f, -0.001029f, 0.000244f, 0.004261f, 0.005145f, 0.007837f, 0.006468f, 0.006925f, 0.003218f, 0.002095f, -0.000906f, -0.000508f, -0.002811f, -0.002474f, -0.004799f, -0.003771f, -0.004898f, -0.002841f, -0.003031f, 0.000012f, 0.000335f, 0.003082f, 0.002391f, 0.003705f, 0.001942f, 0.002865f, 0.000772f, 0.001490f, -0.000634f, 0.000260f, -0.001401f, -0.000172f, -0.001646f, -0.000136f, -0.001373f, 0.000248f, -0.001004f, 0.000547f, -0.000734f}, + {-0.002129f, 0.011495f, -0.006462f, 0.001925f, -0.009605f, 0.002687f, 0.001075f, 0.014648f, -0.008780f, 0.000026f, -0.004623f, 0.007338f, 0.007488f, -0.004787f, -0.000920f, -0.004116f, -0.002368f, -0.004812f, -0.005993f, 0.004405f, 0.001431f, -0.003922f, 0.008164f, 0.007435f, 0.012712f, -0.000388f, 0.004805f, 0.002518f, -0.000229f, -0.011512f, 0.002974f, 0.004774f, -0.004557f, 0.002861f, -0.003365f, -0.003915f, -0.006330f, 0.003260f, 0.008103f, 0.000823f, 0.009457f, -0.003886f, -0.000829f, 0.009541f, 0.004979f, 0.000755f, -0.000141f, 0.009060f, 0.013614f, -0.010159f, 0.002248f, -0.003521f, -0.001597f, -0.015805f, -0.005629f, 0.006362f, -0.004930f, 0.004402f, 0.002016f, -0.002339f, -0.003858f, 0.002214f, -0.001340f, 0.004902f, 0.002641f, 0.002272f, 0.002491f, -0.008219f, 0.000280f, -0.003964f, 0.005011f, 0.008337f, 0.005833f, -0.001216f, 0.009026f, 0.000034f, 0.003810f, -0.001227f, -0.002046f, 0.000457f, 0.004509f, 0.005208f, -0.001746f, -0.003602f, -0.007413f, -0.000982f, -0.003291f, -0.003522f, -0.002005f, -0.003002f, -0.002164f, -0.003531f, -0.001874f, -0.000119f, -0.000088f, 0.000048f, + 0.002868f, -0.002048f, 0.001479f, -0.000762f, -0.001460f, 0.000044f, 0.001287f, 0.000452f, 0.001015f, -0.000037f, -0.001025f, -0.000020f, 0.001312f, 0.000412f, -0.002056f, -0.001597f, -0.000130f, -0.000022f, 0.000759f, 0.000735f, 0.000056f, 0.001630f, -0.002072f, 0.006954f, -0.008499f, -0.008661f, 0.000220f, -0.011704f, 0.002057f, -0.003608f, 0.005630f, -0.003054f, -0.009484f, 0.001178f, 0.009077f, -0.001293f, 0.000205f, 0.012904f, 0.015968f, -0.006827f, -0.007490f, -0.001985f, -0.012065f, 0.005219f, 0.000980f, 0.003092f, -0.004315f, 0.006494f, -0.008441f, -0.001405f, 0.005592f, -0.004575f, -0.001821f, 0.000987f, 0.010249f, 0.000779f, 0.007385f, -0.009768f, 0.009596f, -0.000946f, 0.001292f, 0.006398f, -0.005535f, 0.005357f, -0.002574f, -0.002396f, 0.004405f, 0.006073f, -0.001122f, 0.003522f, -0.013218f, 0.008039f, 0.007580f, -0.013778f, -0.012341f, -0.003340f, -0.010254f, -0.002728f, 0.003755f, 0.002638f, 0.003581f, 0.000328f, -0.003493f, 0.008664f, -0.002976f, 0.000429f, -0.003530f, 0.002130f, -0.005289f, 0.007390f, 0.001671f, -0.005481f, -0.003242f, -0.002100f, -0.003357f, -0.002754f, + 0.007254f, 0.009769f, -0.000572f, -0.001850f, 0.000263f, 0.003209f, -0.002120f, 0.006862f, 0.003717f, -0.002637f, -0.000630f, -0.001602f, 0.002818f, -0.002706f, -0.000192f, -0.000625f, 0.000334f, 0.001190f, -0.000279f, -0.000708f, 0.001717f, -0.001293f, -0.000583f, 0.000503f, 0.001108f, 0.000220f, -0.002560f, -0.001565f, 0.000360f, -0.001488f, -0.001464f, 0.001744f, -0.000970f, -0.002866f, -0.002039f, -0.002280f, -0.000752f, 0.000510f, 0.002766f, 0.020638f, 0.003978f, -0.007669f, 0.009613f, 0.001194f, -0.006472f, 0.018853f, -0.012633f, -0.018168f, -0.010599f, -0.011023f, -0.003667f, 0.005349f, 0.006660f, -0.006290f, 0.009570f, -0.011974f, -0.006479f, -0.001462f, 0.004006f, 0.002969f, -0.003599f, -0.004712f, 0.010707f, 0.002042f, -0.000680f, -0.005988f, 0.008008f, -0.005830f, -0.001297f, -0.000020f, -0.000623f, -0.000842f, 0.003152f, 0.001651f, -0.001588f, 0.006642f, -0.003078f, 0.004050f, -0.000228f, -0.010842f, -0.004195f, -0.004330f, 0.011590f, -0.006389f, -0.007710f, -0.014075f, -0.016388f, -0.003002f, 0.000903f, -0.006563f, 0.012552f, 0.001694f, 0.006774f, -0.005034f, 0.010877f, 0.004620f, + -0.006194f, 0.017437f, -0.007822f, -0.008424f, 0.001424f, 0.010937f, 0.016089f, 0.011355f, 0.003833f, -0.005560f, -0.012521f, 0.005039f, -0.000072f, 0.012440f, 0.005078f, -0.003527f, -0.000344f, 0.006357f, 0.005175f, 0.000118f, -0.001097f, 0.000548f, -0.002389f, -0.005203f, -0.000402f, 0.001676f, 0.001392f, 0.004553f, -0.000063f, 0.002774f, -0.000860f, 0.002198f, -0.000450f, 0.000448f, -0.000363f, -0.003024f, 0.000393f, -0.000520f, -0.003818f, 0.003193f, -0.000615f, 0.001973f, -0.000955f, -0.002067f, 0.000406f, 0.000420f, -0.000037f, -0.001334f, 0.001573f, 0.000632f, -0.000916f, -0.000268f, -0.002898f, 0.000443f, -0.001579f, 0.001576f, -0.000440f, 0.003321f, -0.000056f, -0.001625f, -0.001325f, -0.019668f, 0.003185f, -0.007218f, 0.004665f, 0.001199f, 0.014183f, -0.018196f, -0.010196f, -0.013380f, 0.007245f, 0.005813f, 0.008671f, -0.009570f, 0.003395f, -0.002904f, 0.001341f, -0.014852f, -0.012457f, -0.009326f, -0.009016f, 0.014831f, -0.005870f, -0.001873f, -0.000131f, 0.005004f, -0.002236f, -0.015769f, 0.006757f, -0.006317f, -0.001909f, 0.007189f, 0.005598f, 0.008264f, 0.000682f, 0.004388f, + -0.010851f, -0.004614f, 0.010007f, 0.016312f, 0.009757f, -0.000776f, -0.012360f, 0.008856f, -0.003882f, -0.010865f, 0.015076f, 0.004373f, 0.005287f, -0.009241f, -0.005200f, 0.005067f, -0.003221f, -0.005168f, 0.008032f, -0.006258f, 0.002899f, 0.000343f, -0.010242f, -0.002255f, -0.006722f, 0.010882f, 0.005729f, -0.001561f, 0.002030f, -0.005069f, 0.006640f, 0.001043f, -0.000018f, 0.001882f, -0.012282f, -0.006527f, 0.007199f, 0.003353f, -0.001859f, -0.001643f, -0.008680f, 0.014483f, 0.018146f, 0.009890f, -0.008062f, 0.007335f, 0.001449f, 0.006256f, -0.002560f, 0.005138f, -0.003769f, 0.003315f, 0.006749f, 0.003508f, 0.003334f, 0.002354f, 0.000314f, -0.002242f, -0.000551f, 0.006407f, 0.000525f, 0.000397f, -0.002228f, -0.000492f, 0.001542f, 0.003842f, -0.000290f, 0.004520f, 0.000942f, 0.000088f, 0.000028f, 0.003664f, 0.004738f, -0.002012f, -0.000668f, -0.000539f, 0.000909f, 0.003217f, 0.000018f, 0.000848f, 0.000450f, 0.000750f, -0.001421f, 0.005421f, -0.029524f, 0.009853f, 0.001490f, 0.007346f, 0.007941f, -0.005761f, -0.020886f, 0.016089f, 0.006822f, 0.015830f, -0.002925f, 0.008391f, + -0.000180f, -0.005700f, -0.000408f, -0.014760f, 0.018036f, 0.004117f, 0.001691f, -0.009300f, -0.005360f, -0.006302f, 0.005371f, -0.008297f, 0.013803f, 0.000597f, 0.004734f, 0.007693f, 0.004230f, -0.000900f, 0.004436f, 0.004252f, -0.003262f, 0.003576f, -0.015407f, 0.003982f, 0.006975f, 0.007156f, 0.013771f, 0.004777f, -0.009258f, 0.004603f, -0.004686f, 0.009370f, 0.001780f, 0.006811f, 0.010469f, 0.001700f, -0.002344f, 0.008214f, -0.005713f, -0.008976f, -0.003355f, 0.005720f, 0.014518f, -0.003481f, 0.000869f, 0.000232f, 0.001692f, 0.002831f, 0.006051f, 0.002043f, -0.003884f, -0.000718f, -0.005222f, 0.003720f, 0.001153f, -0.009265f, -0.008185f, 0.003209f, 0.005066f, 0.005105f, 0.009089f, -0.014133f, -0.007649f, -0.010313f, 0.012025f, -0.005370f, -0.007571f, 0.003880f, -0.006986f, -0.010087f, -0.003702f, 0.000241f, 0.010686f, -0.003844f, 0.003405f, -0.004325f, -0.002589f, -0.000668f, 0.003200f, 0.001381f, -0.002028f, -0.001677f, 0.001983f, 0.005299f, 0.001728f, 0.003036f, -0.001568f, -0.001061f, 0.003539f, -0.000190f, 0.000160f, 0.001315f, -0.002618f, 0.004726f, -0.001584f, -0.000380f, + -0.002330f, -0.006136f, -0.001044f, -0.001390f, -0.000553f, -0.000117f, -0.002394f, 0.000191f, 0.005347f, -0.001411f, -0.000637f, -0.001090f, -0.002132f, 0.007126f, 0.030134f, 0.015748f, 0.014399f, 0.020608f, 0.005807f, 0.003634f, -0.012546f, -0.000576f, -0.023598f, -0.004440f, 0.009204f, 0.006407f, 0.004376f, 0.005333f, 0.006693f, -0.005291f, -0.003320f, 0.013454f, 0.012434f, 0.010370f, -0.000644f, 0.001312f, -0.016811f, -0.014862f, -0.005410f, 0.010571f, 0.003629f, -0.002398f, 0.005987f, -0.010053f, 0.001089f, -0.005270f, 0.011967f, 0.009107f, 0.020901f, -0.002232f, 0.007980f, 0.006348f, -0.003186f, -0.011056f, 0.019672f, -0.011526f, -0.002424f, 0.008662f, 0.000575f, 0.004847f, 0.014223f, -0.004674f, 0.005399f, -0.013789f, -0.028940f, -0.016316f, -0.009503f, -0.004089f, 0.001498f, -0.001345f, -0.007352f, -0.015821f, -0.003110f, -0.011413f, 0.003597f, -0.000446f, 0.001534f, -0.017821f, -0.007880f, 0.011243f, 0.004096f, -0.000877f, -0.019401f, -0.017880f, 0.010675f, 0.001701f, 0.006556f, -0.013154f, -0.010197f, 0.000502f, -0.005132f, -0.011252f, -0.007715f, 0.006016f, -0.002254f, 0.002665f, + 0.000963f, 0.007570f, 0.005836f, 0.002468f, -0.003807f, 0.001902f, -0.000563f, -0.004908f, -0.004505f, 0.004269f, -0.001770f, 0.001122f, -0.002863f, -0.004747f, -0.000652f, -0.000566f, 0.004178f, -0.000651f, -0.003792f, 0.000862f, 0.001652f, 0.004262f, 0.001015f, 0.000874f, -0.001751f, 0.005385f, -0.001984f, 0.006158f, -0.003369f, 0.004515f, -0.004034f, 0.000526f, 0.002611f, 0.000016f, -0.000166f, 0.000819f, -0.000994f, -0.001612f, -0.015207f, 0.011516f, -0.006785f, -0.000522f, -0.039515f, -0.009285f, -0.014633f, -0.009616f, 0.001566f, 0.013068f, -0.002634f, 0.017267f, 0.009088f, -0.000986f, -0.017015f, -0.006998f, 0.025226f, 0.004256f, -0.015160f, -0.011023f, -0.005031f, 0.011874f, -0.009272f, 0.000170f, 0.008110f, 0.012914f, 0.014505f, -0.015918f, 0.010692f, 0.001478f, 0.002998f, 0.004579f, 0.005855f, 0.005151f, 0.014542f, 0.000424f, 0.004387f, -0.012756f, 0.017831f, -0.008959f, -0.004249f, 0.003022f, -0.014876f, 0.018369f, -0.002947f, -0.035854f, -0.011901f, -0.028786f, 0.001719f, -0.000407f, -0.008745f, 0.039068f, -0.006874f, -0.019329f, -0.006603f, -0.004748f, 0.017906f, -0.002453f, + 0.008520f, 0.010529f, -0.007370f, 0.013407f, 0.018456f, -0.009397f, 0.007001f, -0.016442f, 0.007978f, -0.005896f, -0.004689f, 0.018993f, -0.006995f, -0.001818f, -0.008486f, 0.000503f, 0.000282f, 0.007244f, 0.010684f, 0.011364f, -0.003071f, -0.003226f, 0.000408f, 0.014718f, 0.006942f, 0.007650f, 0.000255f, -0.012024f, 0.004790f, -0.005841f, -0.006579f, -0.003597f, -0.000158f, -0.000340f, 0.000745f, 0.002669f, 0.002771f, -0.000710f, 0.007964f, 0.001292f, 0.003463f, 0.001388f, 0.001550f, -0.002242f, 0.002089f, 0.000805f, -0.002395f, -0.003508f, -0.002303f, -0.006030f, -0.004738f, 0.004144f, 0.003319f, -0.005107f, 0.001369f, -0.000285f, 0.001415f, 0.005752f, 0.001208f, -0.002262f, 0.000614f, 0.001847f, 0.000118f, -0.004669f, 0.002056f, 0.017879f, -0.024995f, 0.004936f, 0.005183f, -0.008008f, 0.003421f, 0.018807f, 0.020294f, 0.007427f, 0.007289f, 0.009569f, -0.015615f, -0.002814f, -0.016679f, -0.000445f, 0.010723f, 0.006665f, -0.003484f, -0.013331f, -0.004252f, 0.008834f, -0.017305f, 0.000480f, -0.001210f, 0.007886f, 0.016535f, 0.001445f, -0.008877f, -0.006903f, 0.017685f, -0.011480f, + -0.005465f, 0.010038f, -0.006313f, -0.021018f, -0.007555f, 0.004615f, 0.003543f, -0.008492f, 0.001962f, 0.010734f, 0.007513f, 0.010344f, -0.001230f, 0.007759f, 0.015015f, -0.006775f, 0.007479f, 0.006297f, -0.010272f, 0.022114f, -0.021418f, 0.012601f, 0.005613f, -0.029931f, 0.028476f, -0.018603f, 0.004036f, -0.003467f, 0.022718f, -0.009829f, -0.016130f, -0.003613f, 0.000125f, 0.003936f, 0.017443f, -0.015034f, -0.000751f, 0.000866f, 0.000998f, -0.002869f, 0.005144f, -0.012274f, -0.001800f, -0.008815f, -0.016104f, -0.018018f, 0.009564f, 0.007564f, 0.007387f, -0.000043f, 0.011236f, -0.005418f, -0.013071f, 0.003167f, -0.023119f, -0.019469f, -0.003669f, 0.005411f, -0.000249f, -0.003794f, -0.003035f, 0.002530f, -0.012690f, -0.004452f, -0.002722f, -0.002292f, 0.005800f, -0.000849f, 0.000900f, 0.000239f, -0.004222f, 0.001837f, -0.004740f, 0.000109f, 0.002141f, -0.005301f, -0.001163f, 0.004036f, -0.003427f, -0.000224f, -0.002435f, -0.000445f, 0.001486f, -0.000101f, -0.007033f, -0.001348f, -0.000201f, -0.000602f, -0.001309f, -0.004499f, -0.007251f, -0.001975f, -0.000569f, -0.001254f, 0.005660f, 0.004025f, + 0.000656f, -0.001596f, -0.020251f, 0.016113f, -0.046036f, 0.025330f, -0.018499f, -0.012232f, -0.022657f, 0.002737f, -0.002980f, 0.004152f, 0.015672f, -0.013206f, -0.005459f, 0.012934f, 0.011327f, -0.003631f, 0.004223f, -0.005981f, -0.021259f, -0.001841f, 0.004976f, -0.010596f, 0.016608f, 0.002983f, -0.002274f, -0.009924f, -0.010188f, 0.002410f, 0.025754f, 0.001184f, -0.003961f, 0.007216f, -0.022822f, -0.003821f, 0.007930f, -0.015200f, 0.021593f, 0.013962f, -0.001083f, -0.006655f, -0.007632f, -0.008395f, -0.015270f, -0.018464f, 0.015263f, 0.001191f, 0.027344f, 0.002545f, -0.001726f, -0.012389f, 0.002008f, -0.004837f, 0.005918f, -0.000356f, -0.017704f, -0.013593f, -0.018034f, -0.029872f, -0.004449f, 0.026385f, -0.025489f, -0.001525f, -0.026676f, 0.004240f, 0.007155f, 0.006163f, 0.018559f, -0.002047f, -0.027412f, 0.019500f, -0.002161f, -0.013110f, -0.011224f, -0.023428f, -0.008303f, -0.017809f, 0.009506f, -0.027360f, -0.004835f, 0.010788f, -0.000478f, 0.002109f, 0.012831f, 0.006696f, 0.015465f, 0.000088f, -0.008776f, -0.003338f, -0.006096f, -0.000267f, 0.005546f, -0.001581f, 0.000758f, 0.000821f, + 0.000372f, -0.004548f, -0.006923f, 0.004227f, -0.004924f, 0.002058f, 0.000592f, -0.000933f, 0.001838f, 0.000719f, 0.000631f, 0.009469f, 0.001469f, -0.000542f, 0.001563f, 0.003003f, 0.001861f, -0.004747f, -0.000949f, -0.010006f, 0.003536f, 0.005190f, 0.007623f, 0.002824f, 0.002485f, -0.000156f, -0.005283f, 0.003046f, -0.000433f, 0.019658f, -0.007197f, 0.017478f, -0.017060f, -0.009043f, 0.011945f, 0.003832f, -0.023026f, 0.001492f, 0.029936f, -0.034493f, 0.002027f, 0.016114f, 0.038758f, -0.016576f, -0.009873f, -0.004249f, 0.030007f, 0.029472f, -0.031171f, -0.001467f, -0.023952f, -0.011465f, 0.015572f, 0.015675f, 0.020513f, 0.011653f, -0.004097f, 0.014428f, -0.017878f, -0.009636f, -0.001818f, -0.002755f, -0.025871f, 0.002278f, -0.000623f, 0.034175f, -0.005321f, 0.016837f, 0.004030f, 0.009976f, 0.022850f, -0.013869f, -0.006223f, -0.033779f, 0.023212f, -0.029773f, -0.005343f, 0.006821f, -0.004082f, -0.017204f, -0.004380f, 0.004866f, -0.012294f, 0.003333f, -0.002069f, -0.002623f, -0.038025f, -0.026901f, 0.001799f, -0.019511f, -0.026730f, 0.004893f, -0.024723f, 0.007823f, 0.015940f, -0.014491f, + 0.027439f, 0.005757f, 0.017571f, 0.018935f, 0.004761f, -0.014091f, -0.016788f, -0.020779f, 0.010551f, -0.021561f, 0.012835f, 0.015542f, 0.021349f, 0.003767f, -0.015426f, -0.009853f, 0.000292f, 0.002052f, -0.028637f, -0.000729f, -0.018600f, -0.003168f, -0.005373f, 0.001121f, -0.013668f, 0.001744f, -0.003255f, -0.000229f, -0.008943f, -0.006434f, 0.001928f, 0.014183f, 0.001325f, -0.001399f, 0.001749f, -0.002067f, -0.005456f, -0.005224f, -0.005894f, -0.002550f, -0.006965f, 0.007291f, 0.005160f, -0.000555f, -0.005812f, 0.008667f, 0.012842f, -0.002959f, -0.002493f, -0.003146f, -0.001567f, -0.000500f, 0.002976f, -0.005023f, 0.004945f, 0.004753f, 0.003052f, -0.004789f, -0.000975f, 0.002648f, 0.003533f, 0.008923f, -0.018356f, 0.047377f, 0.019754f, 0.008230f, 0.024365f, -0.009295f, 0.005128f, -0.025133f, -0.032396f, 0.020447f, 0.041654f, 0.012432f, -0.000193f, -0.041126f, 0.049677f, 0.007218f, 0.006119f, 0.007164f, 0.001844f, 0.009019f, 0.002838f, -0.007079f, -0.000304f, 0.012583f, -0.007699f, 0.015802f, 0.003030f, -0.012373f, -0.017218f, -0.004663f, 0.015734f, -0.004271f, 0.005137f, -0.007076f, + -0.006312f, 0.000305f, 0.044573f, 0.007251f, 0.006449f, 0.006061f, 0.003763f, 0.026754f, -0.009953f, 0.007727f, -0.017261f, 0.031867f, 0.044337f, 0.011597f, -0.002554f, -0.015741f, 0.046328f, 0.021814f, 0.000682f, -0.017887f, 0.006775f, -0.010715f, -0.001663f, -0.020528f, -0.007729f, -0.013686f, -0.018863f, 0.030531f, -0.009150f, 0.022510f, 0.004713f, -0.017486f, -0.000261f, -0.037464f, 0.035647f, -0.002548f, -0.017055f, -0.013285f, -0.021735f, -0.026751f, -0.014650f, 0.041515f, -0.012930f, 0.014974f, 0.018846f, -0.016736f, -0.015950f, -0.029904f, 0.004515f, 0.020203f, 0.006932f, 0.019316f, -0.004444f, -0.003792f, 0.000874f, 0.005503f, -0.008224f, 0.002323f, -0.014896f, 0.004858f, -0.000682f, 0.016935f, 0.011951f, -0.009144f, 0.000936f, -0.000496f, 0.010086f, -0.003420f, -0.013391f, 0.002973f, -0.000397f, -0.001095f, 0.005008f, 0.000914f, -0.002075f, -0.006737f, -0.007491f, -0.001467f, -0.001760f, 0.007940f, -0.000263f, 0.007959f, -0.010916f, 0.002615f, 0.008323f, -0.015593f, -0.011274f, 0.004047f, -0.008351f, -0.002235f, -0.004918f, 0.011648f, 0.014054f, -0.010471f, -0.011069f, 0.044070f, + 0.043263f, 0.053377f, 0.032168f, 0.010578f, -0.013553f, -0.014127f, 0.008019f, 0.015488f, 0.019010f, -0.028405f, -0.000811f, -0.003405f, 0.014266f, 0.011220f, -0.019666f, -0.024309f, -0.000065f, -0.009224f, 0.023183f, 0.027224f, 0.000020f, 0.014422f, 0.004787f, 0.005753f, 0.031496f, -0.019236f, -0.025437f, 0.020067f, -0.033321f, 0.002863f, -0.010246f, 0.018391f, 0.009430f, 0.000320f, 0.021568f, 0.019748f, -0.017935f, 0.022377f, -0.000012f, -0.009602f, 0.005337f, 0.024311f, -0.009367f, 0.010389f, 0.018080f, 0.008145f, -0.038839f, -0.022500f, 0.003871f, 0.002035f, -0.026392f, -0.018082f, 0.008823f, 0.012558f, 0.010734f, -0.036036f, -0.025113f, -0.025085f, -0.001944f, 0.015591f, 0.022812f, -0.057235f, -0.042003f, 0.006976f, 0.008839f, 0.033025f, 0.011701f, 0.012097f, 0.024111f, -0.002614f, -0.006125f, -0.008759f, 0.059124f, 0.020397f, -0.009269f, -0.030938f, 0.028295f, 0.018424f, -0.009183f, -0.008425f, 0.004414f, -0.008536f, 0.015141f, -0.005479f, -0.003175f, 0.008851f, -0.002143f, -0.003576f, -0.004599f, 0.009294f, 0.024275f, 0.000134f, 0.001783f, 0.000810f, 0.010592f, 0.013485f, + -0.003386f, -0.008554f, 0.003720f, -0.000838f, 0.002786f, 0.001540f, 0.002137f, -0.011533f, -0.006206f, 0.008089f, 0.000889f, -0.004726f, 0.004036f, 0.011272f, 0.008883f, -0.015253f, -0.003348f, -0.010163f, -0.009663f, 0.007148f, -0.011549f, 0.004488f, -0.006197f, 0.011214f, 0.008817f, -0.013467f, -0.018758f, -0.036321f, -0.035343f, -0.029059f, 0.011217f, -0.003747f, 0.016403f, -0.032039f, -0.005277f, 0.001492f, -0.012357f, -0.014995f, 0.026047f, -0.009981f, 0.005277f, -0.000400f, 0.001816f, -0.026124f, -0.009607f, -0.022340f, 0.002976f, 0.002944f, 0.005809f, 0.061745f, -0.024049f, 0.017050f, 0.026001f, -0.013198f, -0.012443f, -0.018688f, -0.003769f, 0.028840f, -0.029424f, 0.020147f, -0.001922f, -0.004910f, 0.002714f, 0.002952f, 0.015823f, 0.001772f, -0.031214f, 0.023878f, -0.019440f, -0.044816f, -0.036262f, -0.018177f, 0.060670f, 0.051465f, -0.027966f, -0.008057f, -0.038396f, -0.032058f, -0.012645f, 0.037470f, 0.000988f, 0.025843f, 0.013525f, -0.017632f, 0.019718f, -0.013425f, -0.039961f, -0.003392f, -0.024224f, -0.004947f, -0.012973f, 0.078907f, 0.000739f, -0.065328f, 0.051304f, -0.020703f, + -0.014544f, 0.051809f, 0.052684f, 0.000167f, -0.023040f, 0.010266f, 0.012902f, -0.070943f, -0.030496f, 0.001873f, -0.010405f, 0.037128f, 0.015747f, -0.053823f, -0.008026f, -0.004331f, 0.024423f, 0.015508f, 0.010650f, 0.009633f, -0.011175f, 0.001904f, 0.004312f, 0.022500f, -0.002754f, 0.003079f, 0.004458f, 0.003827f, 0.013277f, 0.006254f, 0.000344f, -0.015402f, 0.019509f, -0.001789f, -0.000043f, 0.000876f, 0.000076f, -0.008341f, -0.012907f, -0.008917f, 0.001820f, -0.003244f, 0.005723f, -0.000924f, -0.005682f, 0.006143f, 0.014423f, -0.019155f, -0.006146f, -0.005883f, -0.002671f, 0.005388f, -0.000299f, -0.005524f, -0.010696f, -0.004106f, -0.002705f, 0.009898f, -0.031579f, -0.019363f, 0.009375f, 0.007618f, 0.016911f, 0.053931f, 0.009100f, -0.001205f, 0.012409f, 0.002979f, -0.022530f, -0.013566f, 0.011871f, 0.002935f, 0.043721f, 0.010534f, -0.002913f, 0.016047f, 0.023388f, 0.024053f, 0.025532f, 0.001553f, -0.018222f, -0.004844f, -0.041390f, -0.005439f, -0.046712f, 0.026109f, -0.028504f, -0.010804f, -0.000056f, 0.037826f, -0.022034f, 0.021116f, -0.015536f, 0.012855f, -0.019436f, 0.024194f, + 0.036132f, 0.002625f, -0.007889f, -0.019406f, -0.028401f, 0.015921f, 0.017859f, 0.046222f, -0.006459f, 0.002453f, 0.020087f, 0.073943f, -0.017445f, 0.011201f, -0.012171f, -0.040971f, 0.028634f, -0.005753f, 0.020292f, -0.002419f, 0.004854f, -0.024637f, 0.068091f, -0.102355f, 0.075198f, -0.117462f, 0.050449f, -0.060537f, 0.018602f, -0.047445f, 0.016878f, 0.031647f, -0.007791f, 0.023541f, -0.012313f, 0.085876f, -0.052288f, 0.057052f, -0.088516f, 0.044624f, -0.034884f, 0.042933f, -0.029067f, -0.031064f, -0.015540f, -0.007801f, 0.021329f, -0.005845f, -0.004126f, 0.002238f, 0.001005f, -0.010941f, 0.015062f, -0.016547f, 0.015930f, -0.011941f, 0.004636f, -0.019046f, -0.011057f, -0.014057f, 0.002165f, -0.012923f, 0.015693f, 0.017201f, -0.016633f, -0.000207f, 0.006103f, 0.015785f, -0.002785f, 0.005689f, 0.012474f, -0.012041f, 0.020889f, -0.005892f, 0.027756f, -0.016772f, 0.033324f, -0.024064f, 0.008222f, -0.001953f, 0.018359f, 0.015661f, -0.003491f, 0.009175f, -0.026544f, 0.029691f, -0.020917f, 0.007221f, -0.021261f, 0.015005f, -0.028196f, 0.009494f, -0.002905f, -0.010139f, 0.009854f, -0.019928f, + 0.003018f, -0.009789f, 0.009713f, -0.009686f, 0.005565f, 0.003505f, 0.002608f, -0.007461f, 0.026041f, 0.020996f, 0.082700f, -0.057480f, 0.024053f, 0.015231f, -0.049682f, -0.001288f, -0.009779f, -0.014025f, -0.025536f, -0.001279f, 0.002917f, 0.033018f, 0.012264f, 0.017322f, 0.024733f, 0.020123f, 0.000737f, 0.027543f, -0.031672f, -0.004474f, 0.038141f, 0.004337f, -0.052365f, -0.011951f, -0.068521f, -0.012724f, 0.011942f, -0.012614f, -0.015979f, -0.002901f, 0.061235f, 0.015562f, 0.004685f, 0.007560f, 0.015325f, -0.004541f, -0.035137f, -0.010680f, -0.003905f, 0.006602f, -0.008106f, -0.016336f, 0.044342f, 0.023950f, -0.009174f, -0.002035f, -0.009536f, -0.040028f, -0.032924f, -0.023977f, -0.019995f, 0.044830f, 0.010777f, 0.016591f, -0.026979f, -0.026126f, 0.008422f, 0.018288f, 0.016800f, -0.007513f, -0.005307f, -0.030351f, -0.020102f, 0.026625f, 0.001198f, -0.073564f, 0.025897f, 0.040232f, 0.012854f, -0.032027f, -0.019740f, -0.015929f, 0.005275f, -0.023046f, 0.011406f, -0.054139f, -0.072439f, 0.030033f, 0.026127f, -0.014429f, -0.026635f, 0.020371f, -0.011928f, 0.005309f, 0.006289f, -0.010627f, + 0.011590f, -0.006568f, -0.006818f, -0.003884f, 0.017409f, -0.012351f, -0.003664f, -0.013517f, -0.000198f, 0.001174f, 0.011638f, 0.012096f, -0.001363f, 0.007141f, -0.008567f, 0.014126f, -0.009828f, 0.011543f, -0.026656f, -0.012103f, -0.003683f, 0.007725f, -0.008720f, -0.017358f, -0.013342f, 0.006377f, 0.013724f, -0.000492f, 0.017735f, 0.005007f, 0.007011f, 0.001111f, 0.011547f, -0.006518f, 0.011037f, -0.002648f, -0.021956f, -0.016874f, -0.006471f, 0.010010f, -0.012343f, 0.007275f, -0.018421f, -0.008103f, 0.008425f, -0.068333f, 0.059817f, 0.072689f, -0.006801f, 0.052832f, 0.002161f, 0.008022f, 0.023045f, -0.046784f, 0.016995f, 0.034513f, 0.034120f, 0.014247f, 0.010568f, -0.033852f, 0.024712f, 0.014466f, -0.020500f, 0.010836f, -0.004080f, 0.040216f, 0.011102f, 0.010225f, 0.023805f, -0.009639f, -0.027453f, 0.007844f, 0.051319f, -0.018480f, -0.010004f, 0.046270f, -0.017052f, -0.020839f, -0.016910f, 0.015870f, 0.059613f, 0.082835f, -0.005181f, -0.053900f, 0.081329f, 0.027915f, -0.053602f, 0.060571f, 0.023211f, -0.015150f, -0.015585f, -0.022857f, -0.037780f, -0.002249f, 0.019806f, -0.032493f, + -0.021231f, -0.068523f, -0.009316f, 0.039727f, -0.082909f, -0.044999f, 0.013068f, 0.013262f, 0.016331f, 0.050183f, 0.044477f, -0.073766f, 0.000585f, 0.002722f, -0.052158f, 0.014457f, 0.024785f, -0.026851f, -0.019118f, -0.022688f, 0.015083f, 0.057791f, 0.018090f, 0.030006f, -0.039616f, 0.020072f, -0.044856f, 0.003819f, -0.030179f, -0.122572f, 0.093631f, 0.023969f, -0.034223f, 0.063299f, -0.021917f, -0.028996f, 0.017011f, 0.012851f, 0.016266f, 0.024685f, 0.009977f, -0.025015f, -0.007962f, 0.024213f, -0.000855f, 0.009248f, 0.003864f, -0.004105f, 0.005911f, -0.011037f, 0.008027f, 0.022611f, 0.008138f, -0.013525f, -0.009989f, 0.006822f, -0.006157f, -0.012285f, 0.004563f, 0.014058f, 0.008163f, -0.042479f, -0.012890f, -0.031317f, -0.016267f, 0.018059f, -0.013992f, -0.017561f, 0.016511f, 0.010597f, -0.018372f, 0.023098f, -0.017243f, -0.007637f, 0.008253f, -0.013597f, 0.015179f, -0.006926f, -0.025220f, 0.020747f, -0.038909f, 0.044829f, 0.148412f, -0.047345f, 0.001263f, 0.011464f, 0.066988f, 0.059486f, -0.019492f, -0.025743f, -0.037478f, 0.001656f, 0.028356f, -0.000882f, -0.019175f, -0.019621f, + 0.026762f, -0.014553f, -0.036044f, -0.032127f, -0.006531f, 0.054625f, 0.038240f, -0.043311f, 0.002893f, 0.000865f, -0.018935f, 0.021583f, 0.007941f, -0.015403f, -0.005125f, -0.012097f, -0.005829f, 0.069722f, -0.025941f, -0.046167f, -0.032379f, -0.026202f, 0.061585f, 0.001791f, -0.014281f, 0.056801f, 0.038987f, 0.015586f, 0.028866f, 0.055858f, -0.033909f, 0.008691f, 0.054269f, 0.031818f, 0.041464f, -0.046993f, -0.013259f, -0.001664f, 0.019874f, 0.018803f, -0.044550f, 0.004351f, -0.058534f, -0.087975f, -0.004617f, -0.023201f, 0.040929f, 0.045584f, -0.011897f, -0.003510f, 0.009271f, -0.031921f, -0.085271f, 0.057519f, -0.041299f, 0.008982f, -0.015874f, -0.028743f, -0.016691f, -0.033347f, -0.067575f, 0.040046f, 0.035597f, 0.043234f, 0.008381f, -0.053636f, -0.094358f, -0.027927f, -0.026060f, -0.011442f, 0.029911f, -0.019206f, -0.004657f, 0.005811f, 0.004076f, -0.014910f, -0.006797f, -0.011955f, 0.001537f, -0.005264f, 0.010061f, -0.005812f, -0.007247f, 0.011067f, 0.014333f, 0.011401f, -0.022758f, 0.007597f, 0.001391f, -0.001948f, 0.000369f, -0.050076f, 0.002531f, 0.007061f, 0.007489f, -0.032953f, + 0.021637f, -0.004624f, -0.027427f, -0.022410f, 0.013492f, 0.017830f, -0.003192f, 0.010640f, -0.016858f, -0.011820f, -0.011448f, 0.001472f, 0.020646f, 0.005325f, 0.019729f, -0.000353f, 0.009218f, -0.029039f, -0.004390f, -0.006865f, -0.005358f, 0.022906f, 0.010992f, -0.000683f, 0.007376f, 0.003536f, -0.022873f, -0.007371f, -0.072570f, -0.042131f, -0.033658f, -0.086169f, 0.099433f, -0.002613f, 0.052526f, -0.012254f, 0.002924f, -0.060165f, -0.032390f, -0.031211f, 0.007234f, 0.046527f, -0.001830f, -0.049153f, -0.036183f, -0.070117f, -0.077352f, 0.066263f, 0.024892f, -0.060810f, -0.018452f, 0.029475f, 0.055787f, 0.007415f, -0.068533f, -0.042218f, 0.013881f, 0.018900f, 0.017402f, 0.039829f, -0.042495f, -0.040985f, -0.005930f, -0.014782f, 0.005979f, 0.011603f, -0.082420f, -0.015617f, -0.057394f, -0.037326f, -0.076649f, -0.029546f, 0.105726f, 0.017804f, 0.003639f, 0.025482f, 0.026446f, 0.007880f, 0.078648f, 0.061641f, -0.020196f, 0.020689f, 0.106160f, -0.028114f, -0.024417f, -0.025668f, -0.078546f, -0.003429f, -0.042865f, -0.098342f, -0.102419f, -0.054251f, -0.052720f, 0.023604f, -0.039403f, 0.003077f, + 0.021152f, -0.070198f, -0.025261f, 0.000040f, 0.000021f, 0.017614f, 0.045967f, 0.029944f, 0.055366f, 0.074130f, 0.054408f, -0.007071f, -0.039029f, -0.057515f, -0.004516f, 0.023218f, 0.007312f, -0.008451f, -0.000354f, 0.015772f, 0.013443f, 0.034689f, -0.003579f, 0.005177f, 0.001004f, -0.012122f, 0.011867f, 0.001392f, -0.005258f, 0.029579f, 0.013384f, 0.006387f, -0.027707f, 0.018500f, -0.009670f, 0.013849f, -0.026252f, -0.074474f, -0.003028f, 0.028820f, -0.005072f, -0.039725f, -0.024761f, -0.029183f, -0.021213f, 0.008970f, 0.013413f, 0.014278f, 0.004525f, -0.003032f, 0.011557f, 0.028587f, 0.048934f, 0.045309f, 0.057398f, 0.048270f, -0.004052f, 0.032348f, 0.074729f, 0.004915f, -0.031871f, -0.046744f, -0.046046f, -0.063933f, -0.050938f, -0.025014f, -0.026966f, -0.004124f, -0.007732f, 0.065287f, -0.042580f, 0.012632f, -0.049375f, -0.017180f, -0.053883f, 0.006610f, 0.065994f, -0.001869f, 0.040886f, -0.081609f, 0.071681f, 0.023558f, -0.014383f, 0.056224f, 0.008180f, 0.025358f, -0.022408f, -0.027130f, -0.000285f, 0.016929f, 0.013508f, -0.057154f, 0.052285f, -0.063300f, 0.007898f, 0.017150f, + -0.021155f, 0.036601f, -0.038898f, -0.022662f, -0.004146f, -0.014418f, -0.019622f, -0.004851f, 0.008534f, -0.029525f, -0.034076f, -0.011592f, -0.005857f, -0.008917f, 0.020912f, 0.010772f, 0.008584f, -0.042045f, 0.011149f, 0.049953f, 0.067038f, -0.049943f, -0.024798f, 0.056354f, 0.077922f, -0.047779f, -0.029127f, 0.032239f, 0.013835f, -0.038087f, 0.031168f, -0.088665f, -0.017305f, 0.035260f, 0.070417f, 0.008527f, -0.043649f, -0.040130f, 0.010691f, 0.083708f, 0.007352f, 0.011981f, 0.002520f, 0.027319f, -0.005426f, 0.062010f, -0.000718f, -0.070065f, 0.043736f, -0.045970f, -0.013928f, 0.018476f, -0.026545f, 0.005602f, -0.056537f, -0.021786f, 0.052283f, 0.023364f, -0.023547f, -0.034303f, -0.018446f, 0.003609f, -0.027330f, -0.009000f, -0.006118f, -0.017479f, -0.010354f, -0.008859f, -0.035478f, 0.021574f, -0.013353f, -0.016510f, -0.051348f, -0.013746f, 0.037501f, -0.026902f, -0.014551f, -0.014437f, -0.029415f, 0.055442f, 0.022932f, 0.001297f, -0.002042f, -0.032155f, -0.047066f, 0.002121f, 0.041715f, 0.033522f, 0.011332f, -0.036144f, -0.020817f, -0.016649f, 0.020227f, 0.002830f, -0.031577f, -0.008686f, + 0.001803f, 0.011432f, -0.028118f, -0.019704f, -0.016685f, 0.042766f, 0.022183f, 0.001870f, -0.027319f, -0.024442f, 0.024282f, 0.051578f, -0.000754f, -0.023613f, -0.032562f, -0.011982f, 0.014420f, 0.000127f, -0.007632f, 0.000834f, -0.006600f, -0.006023f, 0.004876f, 0.015607f, 0.000233f, -0.003463f, 0.000091f, -0.000143f, -0.004056f, 0.000967f, 0.000140f, 0.000357f, -0.005647f, 0.003617f, 0.000782f, -0.106770f, -0.028714f, 0.017177f, -0.035098f, 0.103987f, 0.077324f, 0.049545f, 0.027353f, 0.069911f, 0.050539f, 0.015869f, 0.034618f, -0.083869f, -0.111066f, -0.016279f, 0.001667f, -0.029493f, 0.015536f, -0.006087f, -0.028576f, -0.037376f, -0.029277f, 0.057123f, 0.050957f, -0.041071f, -0.004591f, -0.006368f, -0.009539f, -0.015082f, -0.020427f, -0.031267f, -0.042152f, -0.008905f, 0.076076f, -0.024877f, -0.041336f, -0.020760f, 0.071444f, -0.033822f, -0.031961f, 0.108917f, 0.039616f, 0.017740f, -0.026060f, -0.060945f, -0.041446f, -0.062838f, 0.017422f, 0.050574f, 0.139092f, -0.122358f, -0.050973f, 0.070700f, 0.099485f, 0.016569f, -0.005172f, 0.126229f, 0.061499f, -0.040719f, 0.041142f, -0.015287f, + 0.001206f, -0.088558f, -0.043594f, -0.031382f, -0.143333f, -0.061775f, -0.022465f, 0.076917f, -0.041171f, -0.024940f, 0.058661f, -0.004511f, -0.006875f, 0.013192f, 0.041536f, -0.040021f, 0.029612f, 0.043410f, 0.001864f, -0.009041f, -0.080504f, 0.036886f, 0.030034f, -0.094690f, -0.005918f, 0.009533f, 0.007000f, -0.008650f, -0.040839f, 0.010473f, 0.008014f, 0.011097f, -0.005678f, -0.012713f, 0.031010f, 0.005777f, -0.005336f, 0.020095f, 0.009542f, 0.054630f, -0.006618f, 0.017491f, 0.004447f, -0.044531f, -0.037287f, 0.026213f, -0.020330f, 0.015688f, 0.021605f, 0.012174f, 0.013712f, -0.000264f, 0.037498f, -0.012287f, -0.008176f, -0.015039f, 0.011458f, 0.027836f, -0.041876f, -0.016565f, 0.021561f, 0.008946f, -0.023297f, -0.044327f, -0.010190f, 0.011393f, 0.091959f, 0.033571f, -0.007520f, 0.023692f, -0.004510f, -0.008616f, -0.033689f, 0.016123f, 0.014172f, -0.026807f, -0.012845f, -0.097249f, -0.003790f, 0.039893f, -0.009217f, -0.040614f, 0.017901f, -0.009205f, 0.043877f, 0.008631f, -0.020993f, -0.000439f, 0.046967f, -0.026733f, 0.007712f, 0.016804f, -0.014048f, -0.000508f, -0.025120f, 0.051569f, + -0.002909f, 0.007598f, 0.001025f, 0.024879f, -0.011105f, -0.009810f, -0.015945f, 0.010243f, 0.019625f, -0.008592f, 0.023279f, -0.010067f, 0.014429f, -0.024313f, -0.018872f, 0.029348f, 0.037958f, -0.048824f, 0.002506f, -0.000003f, 0.004801f, 0.015300f, -0.030438f, 0.046992f, -0.041909f, 0.037812f, 0.005545f, -0.065858f, -0.003341f, 0.051302f, -0.066724f, 0.031907f, 0.000548f, 0.008608f, -0.015820f, -0.010077f, 0.013800f, -0.019472f, 0.068861f, -0.050784f, 0.007860f, -0.013655f, -0.005877f, 0.016882f, 0.001243f, -0.008360f, -0.001288f, 0.020711f, -0.000355f, -0.023833f, 0.007005f, 0.012055f, -0.039547f, 0.030976f, 0.014302f, 0.001437f, 0.028894f, -0.010484f, -0.008525f, 0.013438f, 0.006568f, 0.008519f, 0.005187f, -0.007902f, 0.016470f, 0.006933f, 0.001535f, -0.017447f, -0.002534f, 0.008505f, 0.015818f, -0.026470f, 0.014203f, 0.016476f, -0.023022f, 0.011087f, 0.003801f, 0.003976f, 0.012718f, -0.006963f, 0.003140f, -0.004366f, -0.033530f, -0.000515f, -0.007805f, 0.014815f, -0.009150f, 0.005655f, 0.004135f, -0.001401f, 0.004946f, 0.008585f, -0.005191f, 0.000009f, 0.001967f, -0.000243f, + 0.002902f, 0.010309f, -0.010057f, 0.009658f, -0.007211f, -0.048662f, -0.138491f, -0.197119f, 0.066040f, 0.175756f, 0.038398f, 0.486715f, 0.400309f, 0.270905f, 0.457758f, 0.238808f, -0.016720f, -0.057049f, -0.181369f, -0.417628f, -0.345445f, -0.335427f, -0.467054f, -0.344881f, -0.101842f, -0.074695f, -0.012793f, 0.162320f, 0.074976f, -0.020221f, 0.102342f, 0.170245f, 0.082743f, 0.079699f, 0.154319f, 0.092215f, 0.070502f, 0.140286f, 0.219792f, 0.091629f, 0.128685f, 0.206792f, 0.034716f, 0.013795f, 0.182079f, 0.107883f, -0.071010f, 0.087890f, 0.112760f, -0.118966f, -0.036333f, 0.130709f, -0.027387f, -0.078890f, 0.168326f, 0.089314f, -0.106101f, 0.090404f, 0.119475f, -0.161294f, -0.151619f, -0.064840f, -0.389423f, -0.515806f, -0.324330f, -0.456106f, -0.608368f, -0.423738f, -0.434222f, -0.560489f, -0.443978f, -0.307701f, -0.334169f, -0.199705f, 0.017611f, 0.123433f, 0.268679f, 0.441093f, 0.549430f, 0.677483f, 0.752218f, 0.822478f, 0.871573f, 0.783055f, 0.614924f, 0.568506f, 0.363410f, 0.109266f, 0.084969f, -0.059519f, -0.282115f, -0.221394f, -0.095280f, -0.209849f, -0.216339f, -0.046607f, + -0.153027f, -0.290934f, -0.176888f, -0.128263f, -0.261089f, -0.222035f, -0.080093f, -0.197564f, -0.235052f, -0.020245f, -0.013963f, -0.106635f, 0.039238f, 0.022452f, -0.171305f, -0.127061f, -0.075226f, -0.242347f, -0.333816f, -0.272891f, -0.372635f, -0.460982f, -0.343240f, -0.275672f, -0.262293f, -0.115960f, 0.049993f, 0.135377f, 0.201406f, 0.279929f, 0.315543f, 0.283225f, 0.369429f, 0.475201f, 0.491971f, 0.459757f, 0.467538f, 0.451348f, 0.365031f, 0.413256f, 0.371976f, 0.157889f, 0.016527f, -0.096639f, -0.208690f, -0.219812f, -0.182897f, -0.214572f, -0.210776f, -0.182796f, -0.181363f, -0.192518f, -0.160191f, -0.143456f, -0.138372f, -0.130832f, -0.103784f, -0.098683f, -0.103513f, -0.084337f, -0.060950f, -0.057591f, -0.047088f, -0.026566f, -0.016530f, -0.014126f, 0.005912f, 0.007798f, 0.004794f, 0.011065f, 0.021918f, 0.019143f, 0.024134f, 0.028874f, 0.024883f, 0.016074f, 0.010412f, 0.006425f, 0.007353f, 0.004932f, 0.006680f, 0.005033f, -0.001833f, -0.009732f, -0.006318f, -0.000293f, 0.010329f, 0.024285f, 0.039459f, 0.040835f, 0.046299f, 0.055967f, 0.060658f, 0.064281f, 0.075792f, 0.071950f, + 0.061180f, 0.055112f, 0.052236f, 0.037219f, 0.031918f, 0.029533f, 0.017437f, 0.004718f, 0.005956f, -0.004581f, -0.017439f, -0.025774f, -0.037400f, -0.056264f, -0.061761f, -0.064479f, -0.067295f, -0.069993f, -0.063868f, -0.061394f, -0.057203f, -0.048540f, -0.036028f, -0.030887f, -0.021823f, -0.015390f, -0.013210f, -0.009405f, -0.000765f, 0.003093f, 0.009595f, 0.012877f, 0.017108f, 0.018581f, 0.020498f, 0.020688f, 0.021726f, 0.018301f, 0.017753f, 0.015354f, 0.014098f, 0.010985f, 0.010959f, 0.008312f, 0.007809f, 0.005436f, 0.005448f, 0.003051f, 0.003119f, 0.001340f, 0.001896f, 0.000183f, 0.000786f} + }, + { + {0.007617f, 0.018013f, 0.000370f, 0.000677f, -0.008576f, -0.006981f, 0.005276f, 0.003120f, 0.000531f, 0.007308f, -0.011080f, -0.003857f, 0.018108f, 0.001154f, 0.003571f, -0.004826f, -0.006042f, 0.008410f, 0.007152f, -0.003055f, 0.007039f, 0.000217f, 0.001190f, -0.006966f, 0.002529f, -0.006351f, -0.004844f, -0.006239f, 0.002144f, 0.000167f, -0.001958f, -0.000775f, 0.002157f, 0.005287f, -0.002519f, -0.009896f, 0.000216f, -0.007079f, -0.008897f, -0.002429f, 0.004079f, -0.001459f, 0.003645f, 0.002203f, 0.003345f, -0.001493f, -0.001213f, -0.001766f, -0.001402f, 0.002938f, -0.000059f, 0.006128f, -0.000790f, 0.007608f, 0.001325f, 0.001657f, 0.007364f, 0.002525f, 0.001920f, 0.009384f, -0.003804f, 0.003047f, -0.003245f, -0.006779f, 0.006191f, -0.002304f, 0.000063f, 0.002185f, -0.001078f, -0.005644f, -0.001669f, 0.003917f, -0.002547f, -0.000226f, -0.005353f, 0.002522f, 0.000405f, -0.003688f, 0.000480f, -0.005833f, 0.000908f, -0.005599f, -0.000452f, -0.000162f, -0.000697f, 0.003102f, 0.001581f, 0.000751f, 0.001797f, -0.000688f, 0.003262f, 0.002250f, -0.000223f, 0.000631f, 0.000759f, -0.000204f, + 0.000157f, 0.000982f, -0.001310f, 0.000653f, -0.001685f, 0.001388f, 0.000199f, -0.000359f, -0.000035f, 0.001132f, 0.000354f, -0.001216f, 0.000430f, -0.000149f, -0.000612f, -0.001793f, -0.023732f, -0.012311f, -0.005550f, -0.005140f, -0.000030f, 0.000070f, 0.001757f, 0.000346f, -0.001337f, -0.009709f, -0.004414f, -0.009949f, -0.015604f, -0.013020f, 0.007353f, 0.009086f, 0.009176f, -0.003602f, -0.001089f, -0.001019f, -0.002051f, 0.003395f, 0.001413f, -0.003302f, -0.007069f, 0.005111f, 0.004350f, 0.006382f, 0.001668f, -0.002121f, -0.003867f, 0.001827f, 0.003044f, -0.000702f, 0.006470f, -0.003121f, -0.000174f, 0.006307f, -0.004799f, -0.007604f, 0.000617f, 0.010581f, 0.002435f, 0.002364f, 0.001488f, 0.000122f, 0.001364f, -0.001601f, 0.001890f, -0.008305f, 0.001373f, 0.008687f, -0.001967f, 0.000163f, 0.000874f, -0.002917f, -0.001636f, -0.001162f, -0.001390f, -0.002276f, 0.005313f, -0.004928f, 0.005215f, 0.004467f, 0.009739f, -0.000632f, 0.005485f, 0.012450f, -0.002265f, -0.009954f, -0.011183f, -0.000493f, -0.001439f, 0.000652f, -0.009485f, 0.002808f, -0.006650f, -0.004919f, 0.002316f, 0.006994f, + -0.002826f, -0.005246f, -0.006309f, -0.001185f, -0.000662f, 0.001803f, 0.000597f, 0.004046f, 0.002398f, -0.000164f, 0.002053f, 0.000639f, 0.003978f, 0.003038f, 0.001915f, 0.000917f, 0.000903f, -0.000628f, 0.002680f, 0.000190f, 0.000837f, -0.000258f, 0.000104f, -0.001921f, 0.000049f, -0.000316f, 0.016601f, 0.012889f, 0.005646f, 0.006553f, -0.004187f, 0.002905f, 0.011516f, 0.005488f, 0.012394f, -0.004879f, 0.005067f, 0.006942f, -0.000236f, 0.008928f, -0.004550f, 0.005548f, 0.001147f, -0.005859f, -0.001347f, -0.001178f, -0.000241f, -0.001725f, 0.000794f, -0.002983f, 0.001027f, -0.002206f, 0.011350f, -0.002670f, -0.000498f, -0.000116f, -0.004945f, -0.014364f, 0.008246f, -0.003474f, 0.003260f, -0.005757f, -0.005242f, -0.006152f, -0.003898f, 0.003625f, 0.010897f, 0.008412f, 0.003703f, -0.000699f, -0.002189f, 0.003332f, 0.007869f, -0.001806f, -0.002416f, 0.009503f, -0.004122f, 0.004505f, -0.004652f, -0.003836f, -0.002163f, 0.003482f, 0.003928f, -0.006827f, -0.004508f, 0.000096f, 0.007338f, 0.009247f, 0.005198f, 0.007188f, -0.000870f, 0.006727f, 0.002813f, 0.007070f, -0.003897f, 0.002781f, + 0.016513f, 0.007542f, 0.007087f, -0.001773f, -0.004469f, -0.011261f, 0.006621f, 0.002700f, -0.004471f, -0.004721f, -0.001380f, 0.003315f, -0.003253f, -0.001660f, -0.002913f, 0.000009f, 0.002485f, -0.001090f, -0.004456f, 0.001236f, 0.001730f, 0.002545f, 0.002869f, 0.000277f, 0.004004f, 0.001805f, 0.001751f, 0.001097f, -0.001117f, 0.002626f, 0.000401f, -0.000106f, -0.001174f, -0.002112f, -0.002059f, 0.000441f, 0.001737f, 0.000558f, 0.000254f, 0.000392f, 0.000020f, 0.002348f, -0.003190f, -0.000894f, 0.001167f, -0.001434f, 0.001493f, 0.005024f, 0.018937f, 0.002697f, 0.006870f, 0.013714f, 0.000257f, -0.007845f, -0.003368f, -0.002359f, 0.000534f, -0.004947f, -0.013470f, 0.005395f, 0.000443f, 0.000282f, 0.005615f, -0.008941f, -0.004140f, 0.014049f, -0.003462f, -0.005325f, -0.008348f, 0.000270f, -0.007892f, -0.001332f, -0.002648f, -0.002387f, 0.000986f, 0.011340f, -0.000392f, -0.003587f, 0.003305f, -0.009056f, 0.012088f, -0.001571f, -0.002756f, 0.015122f, -0.008762f, 0.000692f, -0.010349f, -0.004746f, 0.000841f, 0.000450f, 0.003925f, 0.004749f, -0.009245f, 0.002707f, 0.003813f, 0.003103f, + 0.000838f, 0.004308f, 0.003107f, 0.006306f, -0.005876f, -0.003152f, 0.011903f, -0.005015f, 0.004515f, 0.001097f, 0.003379f, 0.003044f, -0.001076f, -0.004097f, -0.000688f, 0.008398f, -0.005090f, -0.000607f, -0.002737f, 0.001907f, 0.007471f, -0.004287f, -0.009475f, -0.018218f, 0.001062f, -0.000803f, -0.001639f, 0.000017f, -0.007063f, -0.004951f, -0.010212f, -0.004049f, 0.004961f, -0.000229f, 0.003054f, -0.001266f, 0.006225f, 0.004311f, -0.000148f, 0.003214f, -0.000346f, -0.000456f, 0.002096f, -0.004007f, -0.002202f, -0.003266f, -0.000121f, -0.003888f, 0.002177f, -0.000208f, 0.000982f, -0.001489f, -0.001333f, -0.000232f, -0.001483f, 0.000807f, 0.001329f, -0.003612f, 0.001577f, 0.001359f, 0.000719f, -0.003449f, 0.001673f, 0.001121f, 0.003071f, 0.003285f, -0.000426f, -0.001241f, -0.001886f, 0.001599f, -0.001015f, -0.000702f, 0.000501f, -0.000551f, -0.002236f, -0.008266f, -0.020224f, 0.010189f, -0.006607f, -0.011634f, 0.000588f, -0.021786f, 0.004748f, 0.006568f, -0.002334f, 0.015789f, -0.006014f, -0.019176f, 0.004638f, 0.007174f, -0.006595f, -0.013590f, 0.023145f, -0.001529f, -0.001330f, 0.005789f, + -0.005058f, -0.003038f, 0.002406f, -0.011387f, 0.006674f, -0.001283f, 0.003310f, -0.002452f, 0.010845f, -0.002818f, 0.006099f, 0.005234f, -0.010626f, -0.005322f, -0.005971f, 0.011002f, -0.005480f, -0.003406f, 0.008469f, -0.003034f, -0.006230f, 0.004793f, 0.015499f, -0.007950f, 0.007574f, -0.008212f, 0.010204f, -0.005708f, 0.005397f, 0.000924f, -0.005426f, -0.015929f, 0.008891f, 0.011290f, -0.001024f, -0.003747f, 0.006595f, 0.007878f, 0.007800f, -0.011004f, -0.001198f, -0.009723f, -0.000839f, 0.003262f, -0.006661f, 0.002460f, 0.007585f, -0.008147f, -0.000124f, 0.001415f, -0.007626f, -0.005730f, 0.007242f, -0.005275f, 0.005737f, -0.003483f, -0.009808f, 0.001864f, -0.009507f, 0.002336f, -0.003561f, 0.003194f, -0.010475f, 0.009560f, -0.007879f, 0.000836f, -0.007320f, -0.000415f, -0.000390f, 0.001823f, -0.000712f, -0.000225f, -0.002240f, 0.002381f, -0.007067f, 0.002319f, -0.005775f, -0.004894f, 0.000210f, 0.004106f, 0.002118f, 0.000601f, 0.001418f, 0.000077f, 0.002642f, 0.005270f, -0.004514f, 0.004345f, -0.002886f, -0.000825f, 0.002983f, 0.002096f, -0.003176f, -0.000247f, -0.008216f, 0.010372f, + -0.011428f, -0.011331f, -0.019438f, 0.008179f, 0.020516f, 0.003120f, -0.003701f, -0.001782f, -0.003476f, 0.017870f, -0.010745f, -0.009782f, -0.002332f, -0.010785f, -0.003335f, -0.011718f, -0.005080f, -0.008231f, -0.016286f, -0.004581f, -0.003613f, -0.000589f, -0.001815f, 0.004200f, 0.009670f, 0.003444f, 0.004773f, -0.014960f, 0.001820f, -0.000266f, -0.004711f, 0.005159f, 0.002731f, -0.004383f, -0.001959f, -0.010662f, -0.011827f, -0.001751f, 0.013041f, -0.003862f, -0.006759f, -0.001471f, -0.004397f, -0.009217f, 0.000120f, -0.009625f, 0.019583f, 0.016514f, 0.004245f, -0.005091f, -0.004631f, 0.001695f, 0.002916f, 0.003351f, 0.003194f, -0.001234f, 0.007264f, -0.006968f, 0.003191f, -0.006137f, 0.000148f, -0.000115f, 0.004059f, 0.002822f, 0.009166f, -0.004036f, -0.005698f, -0.005208f, -0.021351f, 0.000614f, 0.004396f, -0.002206f, 0.007681f, 0.003286f, -0.006456f, 0.001797f, -0.011230f, -0.004217f, 0.000882f, 0.008505f, 0.003604f, 0.011658f, 0.002308f, -0.001472f, 0.000020f, 0.004275f, -0.004903f, -0.000687f, 0.001070f, -0.002088f, 0.002948f, -0.004282f, 0.002157f, -0.003283f, -0.002670f, -0.000606f, + -0.003644f, -0.003605f, -0.004448f, -0.002403f, -0.001337f, 0.003205f, 0.002688f, -0.003351f, -0.004709f, -0.001512f, -0.003615f, 0.002371f, -0.004027f, 0.001850f, -0.002366f, -0.000758f, 0.003906f, 0.000171f, 0.003258f, 0.002152f, -0.002132f, -0.002076f, -0.020251f, 0.003440f, 0.020258f, 0.019466f, -0.020908f, -0.018715f, 0.004693f, -0.014854f, -0.008184f, 0.002345f, -0.001250f, -0.005966f, 0.015325f, 0.007050f, -0.022075f, -0.001607f, 0.001105f, -0.000039f, 0.013781f, 0.005360f, -0.010363f, 0.014879f, 0.005288f, 0.002093f, -0.008088f, -0.008248f, 0.006099f, -0.005239f, -0.015017f, -0.002553f, -0.002130f, -0.006476f, -0.009042f, -0.011810f, 0.012530f, 0.001039f, 0.001687f, -0.008138f, 0.000012f, 0.009169f, -0.007310f, -0.014898f, -0.015438f, 0.016141f, 0.003403f, 0.015245f, -0.002598f, 0.004468f, 0.010933f, 0.022781f, 0.007117f, -0.002705f, -0.011749f, -0.004827f, -0.005953f, 0.003576f, 0.001034f, -0.008880f, -0.003853f, 0.013301f, 0.009108f, 0.018023f, 0.008183f, -0.012238f, -0.012029f, 0.014934f, 0.007680f, -0.007649f, -0.000102f, 0.015378f, 0.001000f, -0.000726f, -0.012034f, 0.013215f, + 0.009614f, -0.002201f, 0.018023f, -0.002599f, -0.005441f, -0.018912f, -0.002705f, 0.001075f, 0.009947f, -0.013016f, -0.001003f, 0.005984f, -0.003400f, -0.009332f, -0.009061f, -0.001077f, -0.001074f, -0.001611f, -0.011279f, -0.009687f, -0.006004f, 0.003659f, -0.000398f, -0.004394f, -0.001703f, -0.000493f, 0.000792f, 0.001040f, 0.001463f, -0.000825f, 0.003552f, -0.002957f, -0.000962f, 0.000209f, -0.002391f, -0.007216f, 0.000306f, 0.004378f, -0.001513f, -0.006357f, 0.000374f, -0.001440f, 0.002127f, 0.000501f, -0.000999f, -0.000456f, 0.001950f, -0.000873f, 0.003761f, 0.002164f, -0.000304f, -0.003456f, 0.002485f, -0.002697f, 0.002512f, 0.003337f, -0.008211f, 0.003246f, -0.003072f, -0.001662f, 0.010047f, -0.016748f, 0.010064f, -0.010985f, 0.001977f, 0.008767f, -0.000119f, -0.004473f, 0.003276f, -0.011506f, 0.000451f, -0.008967f, -0.025991f, -0.007968f, 0.010980f, 0.007090f, 0.003989f, -0.006345f, 0.005284f, 0.002347f, 0.027718f, 0.004733f, -0.009421f, 0.010285f, 0.002001f, 0.002159f, 0.018412f, -0.005360f, -0.005232f, 0.006367f, -0.013050f, 0.015591f, 0.014399f, -0.000401f, 0.008124f, -0.003105f, + -0.008013f, -0.001108f, -0.010059f, 0.000766f, -0.009852f, 0.003751f, -0.000195f, 0.002752f, 0.001073f, -0.016889f, -0.003520f, -0.002249f, 0.000874f, -0.008554f, 0.003607f, 0.003646f, -0.003292f, 0.022087f, -0.009748f, -0.019797f, 0.011700f, 0.019301f, 0.004336f, 0.004922f, -0.008629f, 0.016546f, -0.005745f, 0.002706f, 0.007405f, 0.002090f, -0.007612f, 0.007844f, 0.003365f, 0.000859f, -0.000124f, -0.015293f, -0.005442f, 0.007364f, 0.013425f, -0.005328f, -0.010062f, -0.013926f, -0.004584f, 0.004558f, 0.002475f, 0.006820f, -0.017136f, 0.003116f, 0.011412f, 0.001417f, -0.000739f, 0.004306f, -0.003636f, -0.002035f, -0.000552f, -0.001023f, 0.005950f, -0.001793f, 0.001840f, -0.001892f, -0.001326f, -0.001415f, -0.004440f, -0.002556f, 0.001991f, -0.003159f, 0.004070f, -0.000760f, -0.000827f, -0.002109f, -0.002533f, -0.013054f, 0.001139f, 0.006822f, -0.000430f, 0.002311f, -0.001329f, 0.004187f, 0.001362f, -0.002643f, -0.003073f, 0.002295f, 0.056513f, -0.015419f, 0.000251f, -0.005619f, -0.003710f, -0.012520f, -0.000374f, -0.033075f, 0.017137f, -0.011830f, -0.000929f, 0.019284f, 0.009390f, -0.012648f, + -0.013760f, -0.005029f, -0.011780f, 0.010642f, -0.027525f, 0.005153f, 0.011271f, 0.015785f, 0.002994f, 0.004766f, 0.000539f, 0.002644f, -0.003722f, -0.008538f, -0.025168f, -0.003620f, 0.003080f, 0.011617f, -0.009133f, 0.011205f, 0.004236f, -0.004482f, -0.001715f, 0.008696f, -0.009186f, -0.008505f, -0.005050f, -0.006481f, -0.001086f, -0.022116f, -0.010495f, -0.005219f, -0.000734f, 0.017663f, 0.003820f, 0.016855f, 0.005663f, -0.000691f, -0.010654f, 0.001362f, 0.000928f, 0.002634f, 0.005690f, 0.023597f, 0.002633f, -0.021941f, 0.005568f, -0.008557f, -0.000732f, -0.008228f, -0.009414f, -0.004279f, 0.008891f, 0.005909f, -0.039116f, -0.014558f, -0.011721f, 0.007466f, -0.001797f, -0.008296f, -0.005492f, 0.022092f, -0.009161f, 0.016993f, -0.016056f, -0.011903f, -0.017376f, -0.009335f, -0.018463f, -0.002793f, 0.024387f, 0.005811f, -0.003076f, 0.003006f, 0.010298f, -0.000136f, 0.012722f, -0.007156f, 0.004830f, 0.007256f, 0.008593f, 0.003516f, -0.001658f, -0.016924f, -0.006425f, -0.008657f, 0.000005f, 0.005582f, 0.004636f, -0.003365f, -0.001345f, 0.007245f, 0.002862f, -0.005535f, -0.002473f, -0.003859f, + -0.001855f, 0.000388f, 0.003581f, -0.002905f, -0.003035f, 0.009202f, 0.007584f, 0.002510f, -0.001194f, 0.003385f, 0.006188f, 0.000549f, -0.005697f, -0.000466f, -0.005809f, 0.001547f, -0.005225f, 0.003114f, 0.009364f, -0.002945f, -0.008668f, -0.009573f, 0.007161f, -0.017733f, 0.001103f, -0.041355f, 0.010062f, -0.013560f, 0.004042f, -0.014095f, -0.030487f, -0.004725f, -0.007094f, 0.021613f, 0.009177f, 0.007764f, -0.000730f, 0.028692f, -0.021587f, 0.005244f, 0.008156f, 0.022160f, -0.025570f, -0.014618f, -0.005070f, 0.002081f, -0.001721f, -0.007290f, -0.002385f, 0.007635f, -0.013778f, 0.002782f, 0.008130f, -0.001609f, 0.001096f, -0.011144f, -0.012741f, -0.007912f, 0.034325f, 0.000278f, -0.008368f, 0.013324f, -0.008268f, -0.017315f, -0.014176f, -0.009402f, -0.002503f, 0.006054f, 0.001250f, 0.001149f, 0.019047f, 0.017392f, -0.003170f, 0.006171f, 0.004182f, -0.022072f, -0.015147f, -0.001001f, -0.001789f, -0.005814f, -0.015055f, 0.018414f, 0.022269f, -0.018331f, 0.012010f, 0.011254f, -0.003606f, -0.017526f, -0.028239f, -0.027397f, -0.021122f, -0.012479f, -0.024378f, 0.002158f, -0.019966f, 0.011886f, + 0.010713f, 0.001712f, 0.000196f, -0.034080f, 0.002180f, 0.000564f, 0.002459f, -0.017506f, 0.005807f, 0.019254f, 0.002550f, 0.004827f, -0.015459f, -0.009627f, -0.001946f, -0.016319f, 0.003724f, 0.010018f, -0.004853f, -0.006119f, -0.007521f, 0.006217f, 0.010230f, -0.018120f, -0.009933f, -0.000991f, 0.011956f, 0.004352f, -0.005315f, 0.004113f, -0.000705f, -0.000307f, 0.005334f, -0.003582f, 0.006893f, -0.008117f, -0.002898f, 0.005714f, 0.005001f, -0.002116f, 0.013421f, 0.000733f, -0.008555f, -0.007331f, -0.001302f, -0.006066f, -0.005450f, 0.000579f, 0.003715f, -0.002667f, -0.002856f, -0.016910f, -0.014216f, -0.009839f, -0.011129f, -0.003511f, -0.025256f, 0.001098f, 0.027531f, -0.009738f, 0.014484f, -0.005833f, 0.027445f, 0.023248f, 0.009569f, -0.028600f, -0.007394f, 0.038116f, -0.009937f, 0.028244f, 0.004350f, -0.027167f, -0.013833f, 0.031915f, 0.000597f, -0.021548f, 0.000410f, -0.018381f, -0.002618f, 0.006431f, 0.002527f, -0.003725f, -0.031966f, -0.028366f, 0.007716f, 0.020423f, -0.018303f, -0.001665f, 0.007886f, -0.001429f, 0.003030f, 0.033964f, 0.006166f, 0.004895f, 0.002848f, 0.011187f, + -0.015163f, -0.010736f, -0.007830f, -0.035923f, -0.012267f, -0.013520f, -0.009381f, 0.009404f, 0.006232f, -0.002330f, -0.003663f, -0.014248f, -0.021587f, 0.028000f, -0.006135f, -0.024717f, -0.011640f, 0.004955f, 0.018710f, -0.014956f, -0.004751f, -0.015869f, -0.003055f, -0.018949f, -0.003723f, -0.004081f, -0.038051f, 0.003429f, -0.012872f, 0.026248f, -0.006859f, -0.021426f, -0.040355f, -0.026606f, -0.005103f, 0.003295f, 0.014066f, -0.010464f, -0.009602f, -0.021987f, 0.020024f, 0.033911f, 0.003531f, -0.004063f, 0.011497f, -0.008905f, 0.012721f, -0.009609f, -0.004683f, 0.004342f, 0.009717f, 0.007021f, -0.011913f, 0.000390f, 0.002425f, -0.000176f, -0.000896f, -0.002996f, 0.003162f, 0.012043f, -0.005100f, -0.010606f, -0.000508f, -0.002381f, 0.005478f, -0.000086f, 0.011676f, 0.000819f, 0.004242f, 0.000425f, -0.007231f, 0.001899f, -0.002924f, 0.012604f, 0.000684f, -0.007995f, -0.001569f, -0.001918f, 0.008368f, 0.000869f, -0.009275f, -0.001378f, 0.006432f, -0.002956f, 0.001522f, 0.013241f, -0.046533f, -0.023611f, -0.016075f, -0.025293f, -0.013692f, -0.010291f, -0.026434f, 0.027783f, -0.008117f, 0.041884f, + -0.021193f, -0.031421f, -0.006241f, -0.021059f, 0.035851f, -0.012268f, -0.019068f, -0.008672f, 0.009536f, 0.018393f, 0.015594f, -0.003684f, -0.004326f, -0.008128f, 0.003859f, 0.029758f, -0.000894f, 0.002945f, -0.009649f, -0.003625f, -0.015628f, -0.004954f, 0.006782f, 0.005227f, -0.012937f, 0.000740f, -0.019094f, 0.003936f, -0.005776f, -0.005556f, 0.007657f, 0.003742f, -0.008944f, -0.003414f, 0.016133f, 0.006233f, -0.013541f, -0.017556f, 0.029431f, -0.001272f, -0.047116f, 0.024596f, -0.005311f, -0.019842f, 0.009379f, -0.002767f, 0.002064f, -0.004448f, 0.016263f, 0.006456f, 0.001584f, 0.045301f, 0.044500f, -0.015607f, 0.004779f, -0.033391f, -0.007213f, -0.006315f, 0.014150f, -0.005003f, 0.002226f, 0.013896f, -0.010230f, 0.025929f, -0.010992f, 0.002967f, -0.035031f, 0.014645f, -0.009182f, -0.024326f, 0.012198f, -0.005525f, 0.049115f, 0.011851f, 0.009294f, 0.018339f, 0.001951f, -0.017038f, -0.001454f, -0.006944f, -0.004309f, 0.005073f, -0.006177f, 0.010167f, 0.006062f, -0.007373f, 0.012455f, 0.007256f, -0.008310f, -0.002007f, 0.000668f, 0.001422f, -0.003458f, 0.002836f, 0.004316f, -0.001023f, + -0.003769f, 0.001021f, 0.003829f, 0.002482f, 0.002880f, -0.007741f, 0.007951f, -0.015669f, 0.013997f, -0.009134f, -0.005527f, -0.000893f, 0.007260f, 0.010672f, 0.002727f, -0.011842f, 0.000037f, -0.004664f, -0.002969f, 0.003085f, -0.011647f, -0.020804f, 0.006101f, 0.055965f, -0.041977f, -0.013235f, -0.026583f, -0.017444f, 0.021096f, -0.023911f, 0.051181f, -0.005825f, 0.015622f, 0.003034f, 0.012423f, -0.031648f, 0.005824f, 0.008560f, -0.002365f, -0.004587f, -0.002805f, 0.009618f, -0.019570f, -0.011655f, -0.002778f, -0.005326f, -0.024184f, -0.021263f, -0.005763f, -0.009714f, 0.029212f, -0.007387f, -0.013848f, -0.009781f, 0.010045f, -0.014776f, -0.006350f, -0.025739f, 0.012165f, -0.009689f, 0.010722f, -0.008957f, 0.013634f, -0.006718f, -0.044790f, -0.022581f, 0.006621f, -0.003253f, -0.002735f, -0.013730f, -0.026671f, -0.001289f, 0.011760f, 0.008150f, -0.006059f, 0.009045f, 0.013731f, 0.042730f, -0.018214f, 0.020379f, -0.047799f, 0.003270f, 0.007028f, -0.005421f, -0.013726f, 0.009958f, 0.001804f, 0.002480f, 0.010744f, 0.034035f, 0.022921f, 0.017574f, -0.009045f, -0.010625f, 0.016721f, -0.020079f, + 0.005020f, 0.017364f, -0.012094f, 0.042525f, -0.000638f, 0.013395f, -0.011512f, 0.024651f, -0.023175f, -0.022554f, 0.000761f, 0.008841f, -0.010460f, -0.002267f, 0.026406f, 0.000536f, 0.024045f, 0.009077f, -0.003694f, -0.003502f, -0.013688f, -0.000806f, -0.000703f, 0.007081f, -0.000866f, -0.010715f, 0.001940f, 0.005263f, 0.013650f, -0.019576f, 0.003461f, -0.009780f, 0.004232f, 0.011675f, -0.003856f, 0.000011f, -0.010349f, 0.003747f, 0.003912f, -0.006398f, -0.023909f, -0.014660f, -0.009424f, 0.004987f, -0.012611f, -0.006845f, -0.008441f, -0.007256f, 0.004867f, 0.009607f, -0.000210f, 0.008036f, 0.003006f, 0.004455f, 0.001464f, -0.016944f, 0.014754f, -0.012404f, 0.022793f, 0.065704f, 0.047176f, -0.012949f, -0.028937f, -0.020233f, 0.040483f, -0.048061f, 0.002915f, -0.012470f, -0.011335f, 0.019113f, -0.034595f, 0.004273f, -0.017525f, -0.000832f, -0.023967f, -0.019155f, 0.003186f, 0.000878f, 0.001327f, -0.023884f, 0.037786f, 0.007186f, -0.016406f, 0.006387f, -0.004605f, 0.002885f, 0.056162f, 0.017230f, -0.015245f, -0.014123f, 0.003047f, 0.016908f, 0.005008f, -0.042151f, -0.009942f, -0.029269f, + -0.009304f, -0.013925f, 0.014430f, -0.008202f, -0.003636f, -0.000698f, -0.001110f, -0.020888f, -0.023437f, 0.015053f, -0.008677f, 0.003762f, -0.000792f, 0.020348f, -0.016553f, -0.012501f, 0.005609f, 0.008245f, -0.022021f, 0.024497f, -0.015309f, -0.036824f, -0.033604f, -0.012573f, -0.009421f, -0.015161f, -0.007287f, -0.052174f, 0.018573f, -0.025000f, -0.007474f, -0.020950f, 0.028986f, 0.008847f, 0.014031f, -0.000481f, -0.004091f, -0.025488f, -0.007255f, 0.033289f, -0.027498f, 0.040437f, 0.031551f, 0.010499f, -0.007063f, 0.000933f, -0.005472f, 0.005397f, -0.017777f, -0.015028f, -0.008718f, 0.002005f, -0.002170f, 0.002105f, 0.007945f, -0.013630f, -0.002962f, 0.012725f, 0.014086f, -0.005922f, 0.008871f, -0.007827f, -0.011504f, -0.005720f, -0.003411f, 0.008244f, 0.002641f, 0.002783f, -0.011377f, -0.008163f, 0.004310f, -0.004841f, 0.004027f, 0.004345f, 0.008569f, 0.015867f, 0.006799f, 0.008678f, -0.010752f, -0.006862f, -0.003512f, 0.004309f, -0.005098f, 0.001697f, -0.004700f, 0.001795f, 0.016902f, 0.007334f, 0.004774f, -0.003712f, 0.010728f, 0.002797f, -0.004101f, -0.065405f, -0.007850f, 0.043225f, + -0.053039f, -0.021393f, -0.001063f, -0.016484f, 0.019542f, -0.011245f, 0.060444f, -0.006202f, -0.012854f, -0.010108f, -0.002422f, 0.017511f, -0.011724f, -0.011736f, 0.049376f, -0.036104f, -0.004133f, 0.011347f, -0.007711f, 0.030661f, 0.017586f, -0.002215f, -0.003607f, 0.012985f, 0.017719f, 0.018955f, 0.015840f, 0.032468f, 0.010619f, 0.013948f, 0.008720f, -0.010590f, 0.054676f, 0.006821f, 0.010418f, 0.013731f, 0.008358f, 0.039267f, -0.002551f, 0.009681f, 0.013799f, 0.011346f, 0.006676f, 0.025911f, -0.015088f, -0.012384f, 0.026060f, -0.004748f, -0.025791f, -0.006694f, -0.045285f, -0.015493f, -0.008484f, 0.043115f, -0.040551f, -0.005279f, 0.002036f, -0.001401f, -0.002083f, 0.025427f, 0.069918f, -0.012156f, 0.009006f, 0.007966f, 0.010836f, 0.033231f, -0.035737f, -0.036973f, -0.033329f, 0.059315f, 0.004672f, -0.022308f, 0.054745f, -0.020765f, 0.047768f, -0.025558f, 0.018509f, 0.002015f, -0.062848f, -0.009171f, -0.015489f, 0.018097f, -0.001006f, -0.005432f, 0.000713f, 0.011381f, -0.001385f, -0.019139f, 0.010633f, 0.000296f, -0.008620f, -0.000164f, -0.016486f, 0.022613f, -0.002109f, 0.008130f, + -0.010401f, -0.009671f, -0.009259f, -0.012812f, -0.000874f, 0.000386f, 0.021898f, -0.000955f, 0.002733f, -0.008611f, 0.002757f, -0.020418f, 0.006865f, -0.019678f, -0.003286f, -0.004239f, -0.017228f, 0.009346f, -0.013559f, -0.013987f, 0.003461f, -0.019517f, 0.006391f, 0.015640f, 0.014973f, -0.007336f, -0.006481f, 0.003784f, 0.006317f, 0.013602f, 0.017734f, 0.001016f, 0.038882f, 0.003258f, -0.038662f, -0.114718f, 0.023194f, -0.027749f, -0.043984f, 0.049328f, -0.029437f, -0.015541f, -0.043310f, 0.011060f, -0.008357f, -0.042828f, -0.013518f, -0.025531f, 0.012214f, -0.023662f, 0.001464f, 0.008883f, 0.019473f, 0.009508f, 0.032760f, 0.004876f, 0.000095f, -0.003600f, -0.026976f, -0.021195f, -0.019112f, 0.015501f, 0.024577f, 0.011047f, 0.008953f, -0.000926f, 0.009700f, 0.018786f, 0.044661f, -0.021216f, -0.011336f, 0.007548f, -0.019800f, 0.021104f, 0.004976f, -0.019626f, 0.045451f, 0.016245f, -0.037628f, 0.014777f, -0.036183f, 0.004101f, 0.007323f, 0.019009f, -0.010036f, -0.012563f, 0.057699f, 0.022061f, -0.024316f, 0.014753f, 0.030688f, -0.023751f, -0.049659f, 0.027555f, -0.003670f, -0.000784f, + 0.004460f, 0.011968f, 0.077958f, -0.007425f, 0.010062f, 0.014666f, 0.000110f, 0.017638f, 0.010784f, -0.041375f, 0.009101f, -0.022103f, -0.018789f, -0.011724f, 0.009750f, -0.066695f, -0.007732f, 0.020575f, 0.003655f, 0.032877f, -0.023935f, 0.023237f, -0.015509f, -0.007136f, -0.008573f, 0.010310f, 0.004968f, -0.008318f, 0.000428f, -0.000186f, -0.011421f, 0.009235f, -0.014513f, 0.015479f, 0.002459f, 0.010732f, 0.009644f, -0.006890f, -0.005167f, 0.002577f, -0.003782f, 0.002110f, 0.003993f, -0.006696f, -0.002000f, -0.007671f, -0.004906f, -0.005092f, -0.012976f, 0.000083f, 0.002214f, 0.007591f, -0.003944f, 0.007305f, 0.018453f, -0.009657f, 0.003312f, -0.009690f, 0.005130f, 0.005575f, -0.014901f, -0.000013f, 0.005237f, -0.014582f, -0.006825f, 0.012358f, 0.000455f, 0.002315f, 0.003108f, 0.000295f, 0.000342f, -0.035391f, -0.040758f, 0.087421f, 0.018691f, -0.005618f, -0.010518f, 0.019748f, 0.078996f, 0.036273f, 0.009476f, -0.002239f, 0.026511f, 0.066011f, 0.016453f, 0.022801f, 0.020617f, 0.047093f, -0.030260f, 0.030532f, 0.013604f, -0.090211f, 0.026819f, -0.012683f, 0.026850f, -0.028024f, + 0.021323f, 0.014199f, 0.028143f, -0.000117f, 0.012000f, 0.004509f, -0.025514f, 0.012894f, 0.025522f, -0.021191f, 0.012893f, -0.020566f, -0.012318f, 0.064872f, 0.006755f, 0.057461f, -0.040640f, 0.018001f, -0.001935f, -0.008046f, -0.001123f, -0.004817f, 0.009074f, 0.021180f, 0.014748f, -0.001418f, 0.032931f, -0.052020f, -0.049022f, 0.035891f, -0.027814f, -0.007019f, -0.006356f, -0.033555f, 0.017225f, -0.008687f, 0.009819f, 0.005454f, 0.055698f, 0.027169f, 0.029462f, 0.011213f, 0.008078f, -0.050219f, -0.011380f, 0.025069f, -0.000233f, 0.000887f, 0.000199f, -0.015928f, -0.043645f, 0.008671f, 0.004314f, -0.032585f, 0.004907f, -0.015506f, -0.012719f, 0.014087f, 0.009562f, 0.050094f, -0.006858f, 0.012969f, 0.012183f, -0.009274f, -0.012574f, -0.001079f, -0.011932f, -0.004388f, 0.029638f, 0.012592f, 0.005616f, 0.001807f, -0.000231f, 0.001049f, -0.000054f, -0.001393f, -0.019591f, -0.005726f, 0.012499f, -0.003113f, 0.001566f, -0.007010f, -0.009711f, -0.003721f, 0.003589f, 0.024198f, -0.015502f, -0.014941f, 0.014379f, 0.007273f, -0.017441f, 0.012992f, 0.007978f, -0.012218f, 0.016308f, 0.001748f, + -0.009124f, -0.004004f, -0.006188f, -0.002548f, -0.002628f, 0.008357f, 0.004423f, 0.004415f, 0.009505f, 0.013636f, 0.010237f, -0.002073f, 0.007427f, 0.023246f, -0.079767f, 0.068154f, -0.029021f, 0.013933f, 0.043209f, -0.062740f, -0.002166f, -0.004488f, 0.014935f, 0.024742f, 0.027034f, 0.048433f, 0.007539f, -0.029482f, 0.016369f, 0.051543f, -0.072172f, -0.041119f, 0.047724f, 0.003568f, -0.000804f, 0.003386f, 0.003703f, -0.000175f, -0.001650f, 0.025758f, 0.014703f, -0.033297f, 0.001799f, -0.008530f, 0.059526f, 0.037403f, -0.012616f, 0.004809f, 0.006844f, 0.008651f, -0.000744f, 0.022983f, 0.001846f, 0.017950f, 0.060817f, 0.009676f, 0.006124f, -0.008000f, 0.015394f, -0.056893f, -0.025479f, -0.023176f, -0.002889f, 0.007430f, -0.051589f, 0.021426f, -0.045809f, 0.016606f, 0.046955f, -0.009150f, -0.042755f, -0.021635f, 0.017348f, -0.007176f, -0.087048f, 0.024864f, -0.060812f, -0.012109f, -0.007737f, 0.003083f, -0.024485f, 0.007241f, 0.030419f, -0.024065f, -0.057748f, -0.085479f, 0.067484f, 0.021627f, -0.010728f, 0.020351f, -0.020575f, 0.021689f, 0.037408f, -0.037920f, 0.067140f, 0.010320f, + -0.007215f, 0.032289f, 0.017679f, -0.009756f, 0.017328f, 0.002359f, 0.018722f, -0.017126f, -0.009705f, 0.006175f, 0.013554f, 0.024453f, 0.006967f, 0.022169f, -0.013870f, 0.013093f, 0.021909f, 0.020560f, -0.003170f, 0.018837f, -0.018871f, 0.008717f, 0.001903f, 0.009341f, 0.036549f, -0.023099f, 0.014621f, 0.003234f, -0.001225f, 0.029693f, 0.007941f, 0.038343f, -0.004690f, 0.019606f, 0.005058f, 0.015758f, 0.004362f, -0.006289f, 0.011338f, -0.017802f, 0.016794f, -0.005730f, 0.013970f, -0.001899f, 0.003972f, -0.000152f, 0.003075f, 0.001143f, 0.014670f, -0.001839f, -0.003206f, -0.000494f, 0.006488f, 0.000756f, -0.001198f, 0.002157f, 0.003409f, 0.003556f, 0.002921f, -0.000276f, 0.002939f, -0.000573f, 0.002820f, 0.003191f, 0.003113f, -0.003402f, 0.001295f, 0.002165f, -0.001615f, -0.001410f, 0.097523f, -0.104893f, 0.042939f, 0.051850f, -0.064211f, -0.021102f, -0.034175f, -0.020348f, 0.096745f, -0.044228f, 0.068884f, -0.033026f, -0.008351f, -0.018407f, 0.023095f, 0.007193f, -0.082151f, -0.017008f, -0.021202f, 0.034374f, 0.002589f, 0.013569f, 0.029569f, -0.041991f, -0.006794f, -0.027410f, + 0.015237f, 0.032205f, 0.021728f, -0.053942f, -0.008399f, 0.008767f, 0.007722f, -0.005021f, -0.023928f, -0.011964f, -0.046487f, -0.010452f, -0.005866f, 0.041615f, -0.037855f, 0.093016f, 0.021572f, -0.029604f, 0.042523f, -0.000406f, 0.055012f, 0.027767f, 0.052224f, 0.010738f, 0.047746f, 0.036505f, 0.046706f, 0.046674f, 0.007973f, 0.045080f, -0.059701f, -0.012409f, 0.013203f, -0.041747f, -0.006364f, 0.022949f, -0.046252f, -0.070538f, 0.028008f, 0.042381f, 0.001884f, 0.008174f, -0.047486f, -0.014989f, -0.039673f, -0.003661f, 0.046204f, 0.001686f, 0.085958f, 0.036692f, -0.021267f, 0.088191f, 0.048129f, -0.028761f, -0.010020f, -0.021179f, -0.028401f, -0.020381f, 0.022400f, -0.015053f, -0.044194f, 0.005100f, 0.031348f, -0.001045f, -0.014392f, -0.013903f, -0.009098f, -0.017185f, -0.026793f, 0.002466f, -0.006121f, -0.005841f, -0.020696f, -0.004220f, -0.007256f, 0.006802f, 0.014874f, -0.006866f, 0.002979f, -0.008357f, -0.016235f, 0.008137f, -0.004370f, -0.015005f, -0.030741f, 0.011780f, -0.042372f, -0.008412f, -0.029424f, -0.020415f, -0.023978f, -0.008743f, -0.003911f, -0.011271f, -0.016880f, -0.010870f, + -0.019264f, -0.006218f, -0.002450f, -0.004163f, -0.013064f, 0.016660f, -0.015747f, 0.006398f, -0.003473f, -0.028750f, -0.008054f, -0.029308f, 0.003794f, -0.002898f, -0.003114f, 0.002630f, -0.136986f, 0.125083f, -0.029962f, -0.038744f, -0.038011f, 0.087328f, -0.066771f, -0.008222f, -0.020644f, 0.001469f, 0.043583f, -0.048652f, -0.006735f, 0.022421f, -0.017430f, -0.004493f, -0.000911f, -0.026542f, 0.038732f, 0.004707f, -0.068880f, -0.014444f, -0.018336f, 0.006519f, -0.075296f, 0.001777f, 0.006516f, -0.012118f, -0.001574f, 0.022382f, 0.042916f, -0.016280f, -0.013611f, 0.012046f, -0.032431f, -0.091685f, 0.005924f, 0.077100f, -0.040333f, -0.055508f, 0.001752f, 0.062667f, -0.030360f, -0.015577f, -0.080282f, -0.010272f, -0.000649f, 0.058040f, 0.023569f, 0.009475f, -0.061104f, -0.031296f, 0.044080f, -0.053218f, 0.017380f, 0.094280f, 0.049766f, 0.073633f, -0.036643f, 0.043890f, 0.024243f, -0.077586f, -0.031591f, -0.040619f, -0.012756f, 0.049297f, -0.004418f, 0.053122f, 0.039104f, -0.077095f, 0.086257f, -0.051589f, -0.002422f, 0.006755f, -0.042832f, 0.089584f, -0.008111f, -0.018098f, 0.067961f, -0.054873f, + -0.012068f, -0.079230f, -0.029977f, 0.039371f, -0.013822f, 0.035823f, 0.033926f, -0.006263f, -0.016508f, 0.008314f, -0.022208f, -0.020927f, -0.008737f, -0.014847f, -0.012482f, -0.011627f, 0.003566f, -0.014980f, 0.001092f, -0.019457f, -0.023553f, -0.016773f, 0.013565f, -0.009033f, -0.004180f, 0.013125f, 0.000391f, -0.001787f, -0.025526f, -0.034158f, -0.025679f, -0.045174f, 0.032460f, 0.016504f, 0.027786f, 0.012905f, -0.027966f, -0.024051f, -0.015969f, -0.001588f, 0.035888f, -0.005914f, -0.002520f, 0.007158f, -0.008419f, -0.004212f, -0.005559f, -0.012297f, 0.024297f, -0.014713f, 0.031816f, 0.001782f, 0.080183f, 0.057307f, 0.008178f, -0.015152f, -0.042011f, 0.024710f, -0.003514f, -0.003490f, -0.002886f, -0.001135f, -0.000054f, -0.015726f, 0.020019f, -0.000146f, -0.071994f, 0.018277f, 0.006203f, -0.024553f, 0.000720f, 0.031278f, -0.010683f, 0.002352f, -0.052121f, 0.038065f, -0.018692f, -0.005318f, -0.005458f, 0.021791f, -0.028348f, -0.000759f, 0.006173f, 0.001137f, 0.005720f, -0.013057f, 0.038212f, -0.019857f, 0.067529f, -0.041400f, -0.044668f, 0.042180f, -0.047185f, 0.002765f, 0.034796f, -0.032128f, + -0.014692f, 0.018969f, 0.021584f, 0.029178f, -0.103566f, 0.033223f, -0.001197f, -0.023327f, 0.065323f, -0.032571f, 0.003809f, 0.000658f, -0.055864f, 0.071651f, -0.003613f, -0.002787f, -0.037707f, -0.006438f, 0.058623f, -0.013390f, -0.002422f, 0.002670f, 0.016756f, 0.010113f, -0.072858f, 0.036158f, 0.064536f, -0.033675f, 0.025738f, -0.050339f, 0.084673f, 0.004155f, -0.079412f, 0.001406f, 0.043990f, -0.004128f, -0.049406f, -0.010741f, 0.115442f, -0.017675f, -0.047824f, 0.008342f, 0.050822f, -0.012864f, -0.016134f, -0.005675f, -0.002451f, 0.003324f, 0.002116f, -0.012636f, 0.033491f, -0.005134f, -0.008095f, 0.002210f, 0.011321f, 0.028538f, -0.008604f, -0.013464f, 0.015368f, 0.003823f, -0.026274f, -0.009222f, 0.013833f, 0.003518f, -0.011075f, -0.005554f, 0.022327f, -0.020149f, -0.004285f, 0.003808f, 0.003071f, -0.019016f, -0.007966f, 0.025299f, -0.001517f, -0.017697f, -0.007778f, 0.018413f, -0.005486f, -0.013222f, -0.011626f, 0.016119f, 0.000583f, -0.044959f, -0.149600f, -0.226452f, 0.015194f, 0.196179f, 0.003012f, 0.512961f, 0.464728f, 0.278480f, 0.536536f, 0.352302f, -0.058146f, 0.020637f, + -0.068797f, -0.422086f, -0.239795f, -0.185547f, -0.412474f, -0.338932f, -0.099977f, -0.198804f, -0.228599f, -0.018255f, 0.013773f, -0.096343f, 0.021396f, 0.087962f, -0.111579f, -0.094558f, 0.150036f, 0.031129f, -0.036049f, 0.105061f, 0.140590f, 0.000346f, 0.144226f, 0.244201f, 0.087647f, 0.067405f, 0.248762f, 0.168512f, 0.020675f, 0.183004f, 0.269499f, 0.118870f, 0.138029f, 0.307343f, 0.116918f, 0.042554f, 0.293385f, 0.289016f, 0.089615f, 0.347982f, 0.494325f, 0.184852f, 0.203275f, 0.345131f, 0.105637f, -0.110641f, 0.020372f, -0.113642f, -0.414254f, -0.394851f, -0.421972f, -0.678054f, -0.733200f, -0.783874f, -0.927453f, -0.970019f, -0.947665f, -0.922067f, -0.811870f, -0.728270f, -0.595522f, -0.392938f, -0.280374f, -0.096003f, 0.268930f, 0.435916f, 0.430377f, 0.796444f, 0.849004f, 0.661300f, 0.805363f, 0.843872f, 0.453393f, 0.473232f, 0.579777f, 0.282278f, 0.228342f, 0.376951f, 0.273687f, 0.129427f, 0.178592f, 0.238924f, 0.102279f, 0.083938f, 0.239876f, 0.127629f, -0.020290f, 0.132288f, 0.103494f, -0.072837f, 0.011844f, 0.095777f, -0.060507f, -0.025326f, 0.177986f, 0.071563f, + 0.008330f, 0.171589f, 0.113250f, -0.014681f, 0.010997f, -0.072257f, -0.247877f, -0.337762f, -0.373859f, -0.490706f, -0.525285f, -0.524521f, -0.568481f, -0.573590f, -0.600926f, -0.602506f, -0.550703f, -0.546706f, -0.458615f, -0.353386f, -0.279447f, -0.115169f, 0.105379f, 0.223464f, 0.370715f, 0.463337f, 0.490423f, 0.467964f, 0.427092f, 0.363543f, 0.295662f, 0.258201f, 0.226164f, 0.186286f, 0.168092f, 0.163678f, 0.149386f, 0.140652f, 0.146681f, 0.137540f, 0.115977f, 0.100567f, 0.080962f, 0.051794f, 0.032909f, 0.000801f, -0.037357f, -0.066448f, -0.090095f, -0.091411f, -0.087081f, -0.081592f, -0.060033f, -0.044998f, -0.034096f, -0.019971f, -0.001204f, 0.012714f, 0.028647f, 0.034875f, 0.040057f, 0.033724f, 0.024415f, 0.020159f, 0.015852f, 0.006161f, 0.001035f, -0.002758f, -0.010227f, -0.023624f, -0.024572f, -0.030872f, -0.046427f, -0.044317f, -0.040183f, -0.060037f, -0.065235f, -0.065162f, -0.080915f, -0.085904f, -0.077601f, -0.088557f, -0.093246f, -0.082758f, -0.076997f, -0.074923f, -0.063557f, -0.053297f, -0.049676f, -0.040581f, -0.025200f, -0.019194f, -0.011631f, 0.002802f, 0.017468f, 0.024267f, + 0.039291f, 0.055903f, 0.064838f, 0.072293f, 0.086124f, 0.091435f, 0.090272f, 0.091392f, 0.090962f, 0.080997f, 0.071078f, 0.064170f, 0.054002f, 0.038820f, 0.030369f, 0.021587f, 0.011194f, 0.003415f, -0.000421f, -0.006272f, -0.010097f, -0.012581f, -0.013759f, -0.015945f, -0.015005f, -0.014227f, -0.012924f, -0.012437f, -0.010297f, -0.009773f, -0.007500f, -0.006233f, -0.003938f, -0.002912f, -0.000538f}, + {0.005407f, 0.017842f, 0.003918f, 0.002646f, -0.004099f, -0.001403f, -0.008838f, -0.000308f, -0.002303f, 0.006651f, 0.005777f, -0.005815f, -0.004293f, -0.003485f, -0.003429f, -0.004120f, 0.000402f, 0.005311f, -0.004220f, -0.004401f, -0.014710f, -0.010715f, -0.007983f, -0.000296f, 0.000734f, 0.010822f, -0.005976f, 0.005404f, 0.003242f, 0.002816f, 0.000594f, -0.007948f, 0.002006f, -0.017033f, 0.002037f, 0.000611f, 0.000758f, -0.001092f, -0.010603f, -0.004728f, -0.009146f, 0.000644f, 0.000539f, -0.005417f, -0.014174f, 0.009799f, -0.000728f, -0.008181f, -0.000084f, 0.005601f, 0.001156f, -0.002762f, 0.001965f, -0.004618f, -0.002072f, -0.004352f, 0.003381f, -0.004637f, 0.006621f, 0.005481f, -0.001108f, -0.009318f, 0.000454f, 0.001396f, -0.000875f, -0.003352f, 0.002347f, 0.001773f, -0.002183f, 0.005187f, 0.005507f, 0.003925f, 0.000333f, 0.000127f, 0.001740f, -0.005009f, 0.000678f, 0.007975f, 0.000890f, 0.001611f, 0.001428f, 0.005923f, 0.002207f, 0.001937f, 0.005192f, -0.001178f, 0.004083f, -0.001494f, 0.002658f, 0.001997f, -0.000740f, 0.001229f, 0.001492f, -0.000347f, 0.001896f, 0.003056f, + 0.000681f, 0.000183f, 0.002063f, 0.002890f, 0.002194f, -0.000210f, 0.000824f, 0.001032f, 0.001066f, 0.000444f, 0.000161f, -0.000087f, -0.000704f, -0.002058f, 0.001414f, 0.000291f, -0.018849f, -0.021257f, -0.001459f, -0.008431f, 0.006524f, -0.010439f, 0.002657f, 0.004762f, -0.007041f, 0.005750f, 0.021269f, 0.001148f, -0.001908f, 0.011590f, 0.001621f, 0.011638f, 0.000224f, 0.005289f, -0.008310f, -0.011113f, -0.000556f, 0.004160f, -0.007657f, -0.002519f, -0.000740f, -0.002213f, 0.002149f, -0.002304f, -0.004026f, 0.003806f, -0.001877f, -0.001654f, 0.008377f, 0.011851f, -0.003670f, -0.006432f, 0.002405f, 0.009478f, 0.003649f, 0.012159f, 0.000547f, -0.001752f, -0.000278f, 0.010846f, 0.000734f, -0.007822f, -0.004242f, 0.008509f, 0.006231f, 0.006612f, 0.001841f, -0.004275f, -0.008763f, 0.001706f, 0.004170f, 0.005105f, -0.001865f, -0.004638f, 0.009536f, 0.006357f, -0.001550f, -0.005348f, 0.000346f, -0.003730f, 0.009936f, 0.003015f, 0.001843f, 0.003144f, 0.001132f, 0.002037f, 0.006112f, 0.001060f, 0.006139f, -0.001200f, 0.009771f, 0.001182f, -0.009627f, -0.003826f, -0.003342f, 0.004785f, + 0.005977f, -0.000964f, 0.001609f, -0.006754f, -0.002439f, -0.006290f, -0.001896f, -0.004101f, -0.003480f, -0.001480f, 0.002060f, 0.000091f, 0.000068f, 0.000267f, 0.002709f, 0.000431f, 0.000624f, -0.000334f, -0.002887f, -0.000817f, 0.000159f, -0.000281f, 0.001176f, 0.000448f, 0.000505f, -0.001097f, 0.011075f, 0.007872f, 0.011665f, 0.012270f, -0.002988f, 0.006181f, -0.002677f, -0.006851f, -0.000706f, 0.018147f, 0.007855f, 0.004105f, 0.006373f, -0.007468f, 0.012829f, 0.005599f, 0.008576f, -0.002475f, -0.014369f, 0.006089f, -0.022386f, 0.004606f, -0.005762f, 0.004565f, 0.003459f, -0.000342f, -0.007745f, 0.001933f, 0.004955f, -0.002908f, 0.004643f, 0.011400f, -0.000871f, -0.009303f, -0.012851f, 0.002080f, 0.005658f, -0.011691f, 0.006489f, -0.010982f, -0.007279f, 0.008119f, -0.004728f, -0.009269f, -0.004619f, -0.006514f, 0.010276f, 0.014277f, 0.007978f, -0.005018f, 0.000003f, 0.007666f, 0.004469f, -0.000556f, -0.005859f, -0.002668f, -0.005149f, 0.005490f, 0.017492f, -0.000053f, -0.009577f, -0.007429f, 0.004013f, 0.001516f, -0.003625f, -0.010304f, -0.000250f, -0.008814f, -0.003554f, 0.001489f, + -0.001584f, 0.007152f, 0.001262f, 0.008958f, 0.010265f, -0.008967f, -0.003391f, 0.000595f, -0.007125f, -0.008394f, -0.001414f, 0.000130f, -0.005249f, 0.005065f, -0.004775f, -0.000498f, 0.003871f, 0.000881f, 0.000225f, 0.003973f, -0.004829f, -0.001558f, 0.001073f, 0.001887f, -0.002217f, 0.001641f, 0.000790f, 0.001842f, -0.000322f, 0.000056f, 0.001733f, -0.002343f, 0.003064f, -0.002347f, 0.001472f, 0.000573f, -0.000749f, -0.000097f, 0.001333f, -0.000907f, -0.001681f, -0.002659f, 0.001669f, -0.001926f, 0.000703f, 0.002729f, -0.000417f, -0.001581f, 0.024929f, -0.006707f, 0.002445f, 0.003545f, -0.016417f, -0.014014f, 0.000383f, 0.016274f, 0.012443f, 0.019675f, 0.006513f, -0.005564f, -0.008448f, 0.001445f, -0.004839f, 0.003875f, 0.001905f, 0.006646f, 0.012253f, 0.003892f, 0.009042f, -0.000256f, 0.005373f, -0.005426f, -0.011361f, -0.005970f, -0.008688f, 0.000120f, -0.002403f, 0.002660f, -0.013844f, -0.006924f, -0.001824f, 0.005139f, -0.006825f, 0.014384f, -0.016166f, 0.003483f, -0.010166f, -0.008268f, 0.004749f, 0.004138f, 0.013911f, -0.001530f, 0.003546f, -0.003949f, 0.009757f, 0.010281f, + 0.002898f, -0.002200f, -0.010396f, -0.001434f, 0.003648f, -0.007988f, 0.008069f, -0.008794f, 0.003827f, 0.014586f, 0.012257f, 0.000200f, -0.004655f, 0.002302f, 0.014614f, -0.001798f, 0.003633f, 0.002287f, 0.011953f, 0.000143f, -0.003123f, -0.007366f, 0.005246f, -0.011111f, 0.004111f, 0.023194f, 0.005753f, 0.010937f, 0.001140f, -0.015297f, 0.005601f, 0.002878f, -0.005987f, 0.006286f, -0.001880f, -0.001635f, -0.007581f, 0.003230f, 0.007586f, 0.003395f, 0.001513f, -0.003456f, -0.007457f, 0.001778f, -0.001430f, -0.001133f, 0.000555f, -0.000340f, -0.001352f, 0.002467f, -0.002493f, -0.002290f, -0.002137f, 0.003457f, 0.001440f, 0.002732f, -0.001438f, 0.002525f, 0.000216f, -0.002393f, 0.002699f, 0.001481f, -0.002088f, -0.004091f, -0.001431f, 0.003463f, 0.000296f, -0.000842f, 0.001797f, 0.001606f, 0.003790f, -0.000116f, -0.001366f, 0.002429f, -0.001814f, -0.008980f, -0.015640f, 0.007942f, -0.011180f, -0.011317f, 0.002254f, -0.005430f, -0.036652f, 0.003649f, 0.005550f, 0.033566f, 0.010744f, 0.002586f, -0.015285f, 0.014052f, 0.005952f, -0.005963f, 0.007218f, -0.001160f, 0.012072f, -0.007231f, + -0.003852f, -0.002362f, -0.003314f, -0.004930f, -0.002267f, 0.008749f, 0.007477f, 0.013182f, 0.004595f, 0.006524f, -0.000207f, -0.008397f, -0.009275f, 0.012494f, -0.006852f, 0.002864f, -0.001185f, -0.008631f, 0.012494f, -0.001985f, -0.005508f, 0.002302f, 0.009080f, -0.005970f, 0.013822f, -0.017483f, -0.014622f, -0.017732f, 0.004263f, -0.009939f, -0.015334f, -0.003402f, 0.014220f, -0.005938f, 0.004227f, 0.008585f, -0.006198f, -0.007943f, 0.000594f, 0.001430f, 0.004721f, 0.000987f, -0.004510f, -0.000400f, 0.018346f, 0.007919f, -0.007556f, -0.023046f, -0.018557f, 0.006881f, 0.021838f, 0.018522f, -0.014412f, 0.000482f, -0.009421f, 0.004262f, 0.003584f, -0.015580f, -0.001302f, 0.003226f, 0.001780f, -0.004144f, 0.000884f, 0.001056f, 0.000424f, 0.005439f, 0.004818f, -0.003019f, -0.003878f, 0.002727f, -0.001911f, 0.001339f, -0.005525f, 0.002365f, 0.001588f, -0.008621f, -0.002015f, 0.001996f, 0.001280f, 0.000839f, 0.001672f, -0.000420f, 0.000593f, 0.000766f, 0.000827f, -0.003071f, -0.000488f, 0.001243f, -0.001057f, -0.003755f, -0.001979f, 0.000644f, 0.000568f, 0.004341f, -0.006457f, 0.010759f, + -0.018130f, -0.003098f, -0.022484f, -0.006603f, 0.003427f, 0.007890f, -0.020483f, -0.005099f, 0.014175f, -0.001673f, -0.020495f, 0.010698f, -0.006497f, -0.011742f, 0.006545f, 0.010837f, 0.002542f, 0.002301f, 0.003824f, 0.014154f, -0.006595f, -0.005819f, 0.003796f, -0.006950f, -0.003457f, 0.000235f, -0.000682f, 0.000520f, 0.011428f, 0.005855f, -0.001197f, -0.000937f, 0.006732f, 0.002829f, 0.008244f, -0.000650f, 0.009294f, 0.009762f, 0.003998f, -0.010535f, 0.001663f, -0.001425f, -0.007400f, 0.010261f, -0.005644f, 0.004336f, -0.006859f, -0.002508f, -0.025065f, 0.002373f, 0.020613f, 0.001876f, 0.021907f, -0.003946f, -0.004736f, -0.022332f, 0.026446f, 0.012458f, 0.015139f, 0.002526f, 0.012442f, -0.000064f, 0.000071f, 0.010322f, -0.005819f, 0.003786f, 0.000132f, -0.025038f, 0.005940f, -0.005811f, 0.006818f, -0.003700f, 0.006174f, 0.023402f, 0.007219f, 0.006233f, -0.000092f, -0.014069f, 0.010821f, -0.005656f, 0.002330f, 0.005427f, 0.007209f, -0.007701f, -0.001855f, -0.003130f, -0.004012f, 0.004652f, -0.002442f, -0.001933f, -0.003099f, 0.000642f, 0.001072f, 0.000451f, -0.006298f, 0.002719f, + 0.001360f, -0.001358f, 0.002114f, 0.001018f, 0.001878f, 0.001470f, 0.003340f, 0.000140f, 0.000906f, -0.000283f, -0.001249f, 0.004023f, -0.000481f, 0.005625f, 0.001114f, 0.002415f, -0.001433f, 0.003155f, 0.001284f, 0.002592f, 0.002708f, 0.002281f, -0.028750f, -0.001153f, 0.021959f, -0.004969f, 0.013077f, -0.014089f, -0.009386f, -0.025207f, 0.014472f, 0.007211f, 0.016771f, 0.007549f, -0.007988f, 0.013775f, -0.003350f, 0.013172f, -0.008623f, -0.008346f, 0.001195f, -0.003191f, 0.011763f, 0.002228f, 0.009947f, 0.010721f, -0.006369f, -0.005784f, -0.003690f, 0.006992f, -0.001310f, -0.004844f, 0.001653f, -0.010038f, 0.005250f, 0.003282f, -0.005011f, 0.007077f, 0.012949f, -0.005317f, -0.005640f, -0.001743f, -0.009498f, -0.004892f, 0.014855f, 0.001798f, -0.008944f, 0.017666f, -0.019488f, 0.002912f, 0.010678f, -0.004697f, -0.006313f, -0.001643f, 0.008543f, -0.015185f, 0.007662f, -0.006280f, -0.012723f, -0.009840f, -0.007631f, 0.000093f, -0.003530f, -0.008392f, 0.003684f, 0.021993f, 0.012382f, -0.003194f, -0.007483f, -0.021628f, 0.002407f, 0.011752f, -0.006861f, -0.023881f, 0.000765f, -0.003883f, + 0.001318f, 0.002834f, 0.011005f, -0.000790f, -0.005411f, -0.002255f, -0.008539f, -0.005259f, -0.003977f, 0.006387f, -0.005260f, 0.005919f, -0.012526f, 0.000929f, -0.005691f, -0.003995f, 0.007803f, -0.003794f, -0.003522f, -0.004544f, 0.001680f, -0.008199f, -0.003122f, -0.001976f, -0.000212f, 0.001614f, -0.005631f, 0.001510f, -0.004448f, 0.002402f, 0.003105f, 0.006533f, 0.001345f, 0.002295f, 0.003595f, 0.002573f, -0.001808f, 0.000977f, 0.000512f, 0.004843f, 0.002956f, -0.000601f, 0.003057f, -0.000339f, 0.000355f, -0.002120f, 0.000400f, -0.000071f, -0.003406f, 0.000953f, -0.002324f, -0.001935f, 0.000342f, 0.002544f, -0.000646f, 0.009622f, -0.004234f, 0.002441f, 0.014243f, 0.000915f, 0.016685f, 0.018068f, 0.040349f, 0.027500f, 0.016877f, -0.004300f, -0.021367f, -0.007468f, 0.019582f, 0.008451f, -0.020640f, 0.015386f, -0.003601f, -0.010261f, -0.012632f, 0.001865f, 0.034879f, -0.023663f, 0.025222f, 0.009821f, -0.005439f, 0.008260f, -0.006824f, 0.018026f, -0.006937f, 0.009508f, 0.001891f, -0.012555f, -0.008784f, -0.012234f, 0.000458f, 0.010295f, -0.002994f, -0.006912f, 0.006640f, 0.000828f, + -0.002098f, -0.023628f, 0.007127f, -0.013252f, -0.010019f, 0.006476f, 0.015537f, -0.011521f, -0.016561f, 0.000553f, 0.014023f, 0.001123f, -0.009451f, -0.003552f, -0.005635f, 0.006366f, 0.004647f, -0.005464f, -0.008937f, -0.013431f, 0.008262f, 0.021450f, 0.013142f, 0.006751f, -0.012492f, 0.006428f, 0.013576f, -0.015301f, -0.019958f, 0.003452f, -0.016485f, -0.007908f, -0.032293f, 0.000383f, -0.022186f, -0.011577f, 0.005931f, -0.002817f, -0.002161f, 0.009777f, 0.001639f, -0.018112f, -0.012573f, 0.008120f, -0.002536f, 0.000955f, -0.005661f, 0.000502f, 0.005244f, -0.000818f, 0.003463f, 0.003492f, 0.000687f, 0.000303f, 0.002558f, 0.003009f, 0.001977f, 0.000210f, 0.000584f, -0.001851f, 0.004733f, 0.000099f, 0.004351f, -0.000811f, -0.002971f, 0.001399f, 0.004044f, -0.005156f, -0.007591f, -0.003870f, -0.001142f, -0.002384f, 0.008525f, 0.003208f, -0.002752f, 0.003793f, -0.002228f, 0.000557f, -0.006969f, -0.000637f, 0.000443f, -0.003180f, 0.044118f, 0.001011f, -0.017307f, 0.019478f, -0.021314f, 0.024650f, 0.001966f, -0.014989f, -0.025730f, -0.006215f, 0.012573f, -0.020421f, 0.018095f, -0.002888f, + 0.011650f, 0.013927f, -0.011992f, -0.004972f, -0.007236f, -0.009523f, -0.003747f, -0.008900f, 0.001437f, -0.010879f, 0.011263f, 0.007134f, 0.009445f, 0.019248f, 0.009863f, -0.002887f, 0.022920f, 0.011692f, 0.004190f, -0.012351f, -0.013503f, 0.006868f, -0.010352f, 0.002341f, 0.007200f, -0.015371f, 0.013072f, 0.034968f, 0.002604f, 0.024858f, 0.011718f, 0.012006f, 0.017704f, 0.000995f, 0.009350f, 0.009904f, -0.022728f, -0.015413f, 0.015558f, 0.000996f, 0.014678f, 0.002575f, 0.015411f, -0.002558f, 0.005492f, 0.003796f, -0.032538f, -0.002199f, 0.008258f, 0.021653f, 0.004766f, 0.018980f, 0.001852f, -0.004561f, 0.006162f, 0.008473f, -0.018308f, -0.030885f, -0.016350f, 0.004158f, 0.007494f, 0.000948f, 0.022523f, 0.007887f, -0.035538f, 0.008933f, -0.005237f, 0.000096f, 0.010103f, -0.014322f, -0.000582f, -0.007765f, 0.006427f, 0.009062f, 0.000458f, 0.001872f, 0.006531f, 0.000159f, -0.000162f, -0.003187f, -0.003501f, 0.001086f, 0.000567f, 0.000103f, 0.005432f, 0.003890f, 0.001289f, 0.003202f, 0.002044f, 0.000020f, -0.005539f, 0.004204f, 0.003446f, -0.002276f, -0.000585f, -0.000894f, + 0.000157f, 0.003027f, 0.002525f, 0.008253f, -0.007166f, -0.002157f, 0.003042f, -0.001879f, 0.004299f, -0.003662f, 0.007260f, -0.001911f, -0.002358f, 0.000883f, 0.004109f, 0.002834f, -0.001148f, -0.000645f, -0.003026f, -0.000710f, -0.021557f, -0.001683f, -0.019212f, -0.008793f, 0.007873f, -0.009472f, 0.004139f, 0.006676f, -0.011572f, -0.028226f, 0.008975f, -0.027963f, -0.032485f, 0.007192f, -0.016036f, 0.014446f, 0.020239f, -0.005047f, 0.023638f, -0.005590f, 0.023352f, 0.032157f, -0.000072f, 0.002049f, -0.032427f, -0.005950f, 0.003400f, 0.005689f, -0.003879f, -0.021132f, 0.001384f, -0.017872f, 0.002198f, -0.004706f, 0.004810f, -0.006769f, -0.012045f, 0.002866f, -0.002231f, -0.006429f, 0.007477f, 0.000910f, -0.005034f, 0.023268f, 0.008477f, 0.017507f, -0.011075f, 0.003353f, -0.009357f, 0.006765f, -0.002179f, 0.009246f, -0.003165f, -0.006703f, -0.008984f, -0.020299f, -0.012189f, 0.033146f, 0.013235f, 0.022035f, -0.025449f, 0.005485f, 0.018597f, -0.015802f, 0.000014f, 0.012387f, -0.006763f, 0.012429f, 0.001617f, -0.021962f, -0.005887f, -0.033889f, -0.004353f, 0.013882f, 0.006952f, 0.023002f, + 0.002439f, 0.015330f, 0.016039f, 0.005773f, -0.001169f, 0.029756f, 0.002351f, 0.000919f, -0.005236f, -0.002780f, 0.015519f, 0.009329f, 0.014835f, -0.001641f, -0.003249f, -0.003700f, 0.010790f, 0.002364f, -0.002447f, 0.003094f, 0.007351f, -0.001669f, -0.004587f, -0.008588f, 0.000145f, -0.006832f, -0.003245f, -0.005815f, 0.004831f, -0.000608f, -0.010343f, -0.001797f, 0.000598f, 0.000828f, -0.000657f, -0.004742f, 0.006771f, -0.005550f, 0.001610f, 0.002677f, -0.007848f, -0.001379f, -0.005300f, 0.001091f, 0.005985f, -0.005435f, -0.004633f, -0.003371f, -0.003519f, 0.003470f, 0.001791f, -0.020970f, -0.018702f, -0.019861f, -0.028945f, 0.019743f, 0.012796f, 0.001755f, -0.019478f, 0.017597f, -0.000161f, -0.024598f, -0.020109f, -0.007035f, -0.005011f, -0.015758f, -0.006204f, -0.009353f, -0.007915f, -0.005842f, -0.022738f, 0.011362f, 0.013321f, -0.001205f, -0.002115f, -0.004173f, -0.008400f, -0.027032f, -0.029459f, 0.000879f, 0.012791f, -0.007803f, -0.018142f, -0.010216f, 0.013820f, 0.010138f, 0.000676f, -0.005699f, -0.007792f, -0.007919f, 0.017478f, -0.008916f, 0.012288f, -0.008436f, 0.000369f, -0.029392f, + -0.006393f, -0.002333f, 0.022183f, 0.006078f, -0.005184f, -0.016534f, -0.011475f, -0.023134f, 0.037321f, -0.017175f, 0.035445f, 0.004499f, -0.015259f, 0.023359f, 0.023031f, 0.039761f, -0.038998f, 0.016134f, 0.006504f, 0.005242f, -0.007732f, -0.011230f, 0.017261f, 0.008909f, -0.002954f, -0.018327f, 0.020363f, -0.010709f, 0.021891f, 0.018045f, 0.017132f, -0.015520f, 0.033803f, -0.024970f, 0.013908f, 0.021762f, -0.012533f, 0.002704f, 0.000637f, 0.018906f, -0.005021f, 0.008392f, -0.009862f, 0.020205f, -0.000632f, 0.003531f, -0.011600f, 0.009216f, -0.000631f, 0.009508f, -0.002755f, 0.012822f, 0.006288f, 0.004035f, -0.007573f, 0.002413f, -0.006340f, 0.000354f, -0.005397f, -0.007304f, -0.001458f, -0.006452f, -0.004286f, -0.000700f, -0.003265f, -0.006428f, 0.004410f, 0.005332f, 0.007871f, 0.001821f, -0.007341f, 0.000684f, -0.004954f, 0.004966f, 0.002089f, -0.003617f, 0.000978f, 0.003470f, 0.002098f, -0.008278f, 0.001630f, 0.008294f, 0.003267f, -0.001312f, 0.002398f, 0.031786f, -0.053070f, -0.056826f, -0.035827f, -0.005879f, -0.024998f, 0.015406f, -0.020571f, 0.002222f, 0.010144f, -0.001412f, + 0.037408f, 0.027134f, 0.009500f, -0.010865f, -0.008418f, 0.026362f, -0.004449f, 0.004195f, -0.010801f, -0.023283f, 0.000017f, 0.009618f, 0.006232f, -0.012733f, 0.011304f, 0.001766f, -0.001567f, 0.022374f, 0.030569f, 0.002347f, -0.019603f, -0.008275f, -0.037570f, -0.014392f, -0.009735f, -0.011113f, 0.001664f, 0.006729f, -0.013674f, -0.005296f, -0.019113f, 0.020736f, 0.024659f, 0.020740f, 0.023026f, 0.018290f, 0.030141f, 0.003870f, 0.010335f, 0.007335f, -0.005489f, 0.011802f, 0.017965f, -0.017859f, -0.062352f, -0.014335f, 0.020704f, -0.032122f, 0.016463f, 0.020551f, 0.007362f, -0.009643f, 0.001562f, -0.007578f, -0.025034f, -0.006631f, 0.016298f, -0.019839f, -0.016940f, 0.006204f, -0.013751f, 0.040777f, 0.041291f, -0.015100f, 0.026593f, 0.007211f, -0.003894f, -0.017883f, 0.012722f, -0.024189f, -0.020148f, 0.022374f, 0.016772f, 0.011941f, -0.001552f, -0.001942f, -0.029695f, -0.021163f, -0.003903f, -0.006557f, -0.005522f, -0.004241f, -0.008774f, -0.007073f, -0.008178f, -0.003893f, 0.001093f, 0.007228f, 0.005557f, 0.009513f, -0.000772f, -0.004205f, -0.004440f, -0.002809f, 0.013419f, 0.012681f, + 0.006453f, -0.000921f, -0.000840f, -0.002627f, -0.005001f, -0.007557f, -0.003429f, 0.001658f, -0.002293f, 0.005671f, -0.002860f, 0.002294f, 0.002600f, 0.002557f, 0.005138f, -0.005702f, -0.000094f, 0.001480f, 0.004358f, -0.006915f, 0.012382f, -0.004842f, -0.003114f, 0.051209f, -0.043149f, -0.000487f, 0.006948f, -0.040686f, -0.012408f, -0.017002f, 0.005871f, -0.012213f, 0.035276f, 0.004873f, -0.000739f, 0.044701f, -0.002809f, -0.039092f, -0.031859f, -0.019053f, 0.014922f, -0.002037f, -0.038453f, 0.010028f, 0.010340f, 0.020298f, -0.022990f, 0.011764f, 0.019027f, 0.017032f, 0.013220f, -0.004434f, 0.022798f, 0.025147f, 0.008153f, -0.055354f, 0.040347f, -0.019722f, 0.015385f, -0.003851f, -0.006027f, 0.010840f, -0.024872f, -0.013879f, 0.025868f, -0.011761f, -0.003654f, 0.023800f, -0.026669f, 0.023933f, -0.009424f, 0.022233f, -0.029348f, 0.039016f, -0.017509f, 0.060267f, -0.008099f, 0.003937f, 0.015237f, -0.013146f, -0.010092f, -0.007160f, 0.004683f, -0.002940f, -0.030462f, -0.037870f, -0.010702f, 0.022195f, -0.011585f, -0.013681f, -0.038912f, 0.017962f, 0.003814f, -0.052802f, -0.000937f, 0.000817f, + 0.007654f, 0.027329f, -0.018642f, 0.008609f, -0.023896f, -0.020678f, -0.031643f, -0.031324f, -0.005720f, -0.018288f, 0.022600f, -0.003701f, 0.022075f, -0.010747f, 0.012520f, -0.001705f, -0.014348f, -0.019704f, -0.002401f, 0.002429f, 0.009545f, -0.004639f, 0.004135f, 0.002010f, 0.007793f, -0.000727f, -0.010621f, -0.001463f, -0.016007f, -0.000677f, 0.002464f, 0.003579f, 0.000787f, -0.005968f, -0.007817f, 0.008799f, 0.003942f, -0.002573f, 0.009837f, -0.012447f, -0.016756f, -0.000254f, 0.014697f, 0.000395f, 0.004193f, 0.005902f, 0.010028f, 0.000652f, 0.011235f, -0.009175f, 0.003556f, 0.002309f, 0.009126f, 0.015648f, -0.009782f, 0.002563f, -0.002356f, 0.002600f, 0.019644f, 0.059043f, 0.029522f, -0.018037f, 0.040768f, 0.013365f, -0.025948f, 0.009980f, 0.026368f, -0.004106f, -0.008897f, -0.036323f, -0.009774f, 0.022352f, 0.014694f, 0.010619f, 0.006657f, -0.006577f, -0.014492f, -0.034289f, 0.018308f, -0.011711f, 0.009161f, -0.026336f, -0.014162f, -0.000689f, -0.003973f, 0.033652f, 0.010234f, 0.005336f, 0.025875f, 0.012349f, -0.038938f, -0.004597f, 0.014357f, -0.007351f, 0.000898f, 0.033247f, + 0.011042f, 0.038604f, -0.022407f, -0.014227f, -0.006252f, -0.014458f, 0.015253f, -0.015070f, 0.029196f, 0.028933f, -0.012652f, -0.028355f, 0.047515f, -0.024448f, -0.009761f, -0.005731f, 0.014219f, 0.007179f, -0.026357f, -0.007940f, 0.017024f, -0.012628f, 0.021568f, -0.010208f, 0.030519f, -0.015856f, 0.006965f, 0.046467f, -0.000841f, 0.032720f, 0.056846f, 0.007127f, 0.027962f, -0.014451f, -0.068172f, -0.046316f, -0.008769f, -0.002971f, 0.038885f, -0.001316f, 0.013065f, 0.003245f, -0.009559f, -0.031681f, -0.070362f, 0.053261f, 0.003772f, 0.001522f, 0.017526f, 0.008254f, -0.017096f, 0.039351f, 0.002060f, 0.008260f, -0.000405f, 0.002590f, -0.034663f, -0.012974f, -0.022824f, -0.013894f, -0.001040f, -0.012989f, -0.012856f, 0.007995f, -0.002734f, -0.008970f, 0.025502f, -0.004818f, -0.025781f, -0.018568f, 0.006570f, 0.001189f, -0.007426f, 0.039279f, 0.011958f, -0.013259f, -0.015149f, 0.003997f, -0.003470f, -0.008255f, 0.001353f, 0.003524f, -0.008799f, 0.009241f, -0.000238f, 0.013387f, 0.017572f, 0.003319f, -0.001592f, -0.005400f, 0.011796f, 0.011259f, 0.010308f, -0.077112f, -0.018462f, 0.080535f, + -0.030915f, -0.034533f, 0.071109f, -0.045627f, 0.040071f, 0.053552f, 0.021164f, 0.007359f, -0.040674f, 0.015565f, -0.071349f, -0.035153f, 0.015612f, 0.037091f, 0.004195f, 0.008554f, 0.027040f, 0.072167f, 0.048785f, 0.015245f, 0.002692f, -0.000086f, 0.008029f, 0.005958f, -0.028008f, 0.000593f, 0.017859f, 0.022574f, 0.096313f, 0.054283f, 0.037114f, 0.069543f, 0.028417f, -0.009969f, 0.020894f, -0.001323f, 0.066633f, 0.024107f, -0.005446f, -0.011125f, 0.027840f, -0.004304f, 0.031967f, -0.099369f, 0.004285f, 0.034189f, -0.002060f, 0.041383f, -0.015496f, 0.010916f, 0.022051f, -0.092530f, -0.035758f, -0.007283f, -0.029635f, -0.038357f, -0.045181f, 0.042232f, -0.027647f, 0.008389f, -0.008474f, 0.042374f, -0.069521f, -0.019133f, -0.009820f, 0.021758f, -0.000351f, -0.006467f, 0.051213f, 0.089291f, -0.000479f, 0.027721f, -0.016966f, 0.007432f, 0.062473f, -0.066601f, -0.039575f, -0.055769f, -0.070297f, -0.006270f, -0.002887f, -0.027818f, -0.029877f, -0.028328f, -0.026886f, -0.034679f, -0.050215f, -0.022040f, -0.032626f, -0.020086f, 0.008583f, 0.043830f, 0.013911f, 0.006439f, 0.006435f, -0.004622f, + 0.009609f, 0.004008f, -0.031528f, -0.028480f, -0.008364f, -0.040027f, -0.016058f, -0.017849f, -0.013945f, -0.016011f, 0.017849f, -0.014847f, 0.000782f, 0.002280f, 0.007480f, 0.021421f, 0.032973f, -0.000862f, -0.008832f, 0.023717f, -0.012744f, 0.014901f, 0.005443f, 0.002800f, -0.007026f, 0.003807f, 0.002530f, -0.014886f, -0.019416f, -0.021052f, -0.003438f, 0.006554f, 0.041829f, 0.036846f, -0.034694f, -0.122751f, -0.022247f, 0.050339f, 0.011364f, -0.013677f, -0.009958f, 0.003834f, -0.017233f, -0.022506f, 0.026799f, 0.020216f, 0.055548f, 0.020335f, 0.033280f, -0.012570f, 0.073999f, 0.013447f, 0.046807f, -0.006600f, 0.068235f, -0.025980f, 0.044353f, -0.043446f, 0.000096f, 0.004853f, 0.031603f, -0.012518f, -0.024083f, -0.057484f, 0.031753f, 0.004262f, 0.006283f, -0.027773f, -0.051885f, -0.003127f, 0.005710f, -0.006323f, 0.015538f, 0.033264f, 0.004745f, 0.023793f, 0.084603f, -0.035691f, 0.008235f, -0.027936f, 0.043561f, 0.038067f, -0.042862f, 0.040245f, 0.045623f, -0.032769f, 0.011378f, 0.010836f, 0.031526f, 0.015745f, 0.064345f, 0.020394f, -0.023212f, 0.003909f, 0.083240f, 0.026501f, + -0.095796f, 0.028213f, 0.016808f, -0.082167f, -0.023147f, -0.026300f, -0.058365f, 0.004219f, 0.035541f, 0.039320f, -0.023620f, 0.070688f, -0.018498f, -0.030660f, -0.016132f, 0.037390f, -0.139018f, -0.016912f, 0.001691f, 0.111895f, 0.014495f, 0.094877f, 0.045231f, 0.066593f, -0.002215f, 0.022866f, -0.013104f, 0.056430f, 0.056876f, 0.051376f, -0.012791f, -0.034208f, -0.014357f, 0.056369f, -0.006999f, -0.036816f, -0.016377f, 0.066778f, 0.008935f, -0.041539f, -0.014590f, 0.060239f, 0.016837f, 0.025085f, -0.001206f, 0.022755f, -0.017615f, -0.001192f, -0.001710f, 0.009854f, -0.002022f, 0.010651f, -0.008794f, -0.019558f, -0.023573f, -0.028304f, -0.004170f, -0.020668f, -0.000458f, -0.003699f, -0.008523f, 0.019972f, -0.023233f, -0.009330f, -0.023051f, -0.008381f, -0.041914f, -0.030888f, 0.041349f, 0.000731f, -0.048321f, -0.076593f, 0.062201f, 0.132556f, 0.009382f, -0.074304f, 0.115140f, -0.026215f, -0.001196f, 0.015987f, 0.065511f, -0.037766f, 0.003266f, 0.129844f, -0.064077f, 0.030647f, 0.044354f, 0.041735f, -0.057257f, -0.006180f, 0.010832f, -0.028650f, 0.005421f, 0.013221f, -0.022986f, 0.022763f, + -0.039315f, -0.011639f, -0.015447f, -0.003360f, -0.023406f, -0.021266f, -0.007225f, 0.012194f, -0.042918f, -0.040925f, 0.061507f, 0.010731f, -0.037718f, -0.010359f, 0.036789f, 0.087741f, -0.007178f, -0.043292f, 0.046461f, 0.067212f, -0.019123f, -0.005359f, 0.002263f, 0.024117f, 0.000694f, -0.000276f, 0.031228f, -0.074958f, 0.051705f, -0.043389f, 0.001063f, -0.061361f, 0.034762f, -0.005119f, -0.090630f, 0.044643f, -0.005991f, -0.035616f, 0.062025f, 0.006882f, 0.061337f, -0.051793f, -0.019183f, -0.021135f, -0.047066f, -0.074194f, -0.097160f, 0.082549f, 0.034415f, 0.060673f, 0.056803f, 0.034467f, 0.014112f, -0.035489f, 0.053819f, -0.026853f, -0.021900f, 0.071777f, 0.024624f, -0.013951f, -0.005940f, 0.021622f, -0.050607f, 0.012807f, -0.019674f, 0.033490f, -0.012471f, -0.022237f, 0.032852f, 0.005119f, -0.037472f, 0.002696f, -0.017469f, -0.010959f, 0.008591f, -0.008666f, 0.007506f, -0.002447f, -0.026831f, -0.014211f, 0.012400f, -0.009480f, -0.016712f, 0.016750f, 0.027503f, 0.026097f, -0.020714f, -0.009078f, 0.031539f, -0.052907f, 0.016332f, 0.018886f, -0.021948f, -0.052577f, 0.026836f, 0.002917f, + -0.022978f, 0.015968f, -0.024634f, -0.041008f, 0.011266f, 0.036109f, -0.029604f, -0.013386f, 0.013491f, 0.031473f, -0.008146f, -0.004323f, 0.028324f, 0.001633f, -0.021739f, 0.072073f, -0.029290f, 0.021298f, 0.016767f, -0.074919f, 0.067385f, 0.023471f, -0.019152f, 0.057731f, 0.004921f, 0.003810f, 0.028343f, -0.025143f, 0.073835f, -0.059233f, -0.031588f, 0.027462f, 0.025499f, 0.012526f, -0.054941f, -0.033536f, -0.061229f, 0.033889f, 0.008264f, 0.030960f, 0.000168f, 0.033257f, 0.013542f, 0.011135f, 0.001459f, 0.028361f, -0.012666f, 0.015619f, -0.027915f, 0.021039f, -0.025791f, -0.000216f, -0.034087f, -0.024305f, 0.001566f, -0.030428f, 0.014393f, 0.072589f, 0.017481f, -0.054375f, 0.028513f, 0.021858f, 0.038621f, 0.001113f, 0.064134f, -0.054970f, 0.008548f, 0.025569f, -0.052934f, -0.012345f, 0.107220f, 0.060326f, -0.141593f, -0.060135f, 0.075521f, -0.020543f, -0.067116f, 0.026562f, -0.006759f, -0.051840f, 0.038182f, 0.064502f, -0.087252f, 0.017327f, 0.077721f, -0.052535f, -0.047069f, 0.063497f, 0.008628f, -0.052174f, 0.009398f, 0.041293f, -0.045527f, -0.006303f, 0.050153f, -0.007314f, + -0.022193f, -0.035805f, 0.045891f, -0.012065f, 0.025635f, 0.005974f, 0.026036f, -0.017746f, 0.016887f, 0.046232f, 0.018331f, -0.034011f, 0.002876f, -0.024326f, -0.016403f, -0.034263f, -0.003021f, -0.009121f, -0.002352f, -0.023020f, 0.023643f, 0.020327f, -0.007972f, 0.052842f, -0.013297f, -0.056110f, 0.067651f, -0.007987f, -0.012785f, 0.012490f, 0.023734f, 0.003204f, -0.006212f, 0.057072f, 0.031414f, -0.040042f, 0.003450f, 0.016257f, -0.029028f, -0.024002f, 0.041312f, -0.021232f, -0.078196f, 0.075426f, 0.009668f, -0.076237f, -0.002191f, 0.040199f, -0.028611f, -0.064107f, 0.037053f, 0.049432f, -0.079036f, 0.011667f, 0.059602f, -0.034883f, -0.006064f, 0.065217f, -0.004779f, -0.026606f, 0.015333f, 0.027564f, -0.035677f, -0.009749f, 0.038274f, -0.008713f, -0.033341f, 0.028088f, 0.016780f, -0.019432f, 0.062990f, -0.135594f, -0.009255f, -0.024327f, -0.149947f, -0.027321f, -0.046009f, 0.014316f, 0.026196f, 0.044040f, -0.019498f, -0.059089f, -0.021823f, -0.085079f, 0.011666f, 0.029820f, 0.017848f, 0.012962f, -0.067741f, 0.041279f, 0.006946f, -0.082292f, 0.060065f, -0.088463f, -0.035668f, -0.033504f, + 0.024187f, 0.063139f, 0.074128f, -0.006573f, -0.016316f, -0.142878f, 0.061432f, 0.143607f, 0.052841f, 0.002771f, -0.078901f, -0.116594f, -0.047380f, -0.010359f, 0.060895f, -0.073250f, -0.043149f, -0.075244f, -0.023522f, 0.134055f, 0.145443f, -0.025902f, -0.066679f, -0.058292f, -0.030467f, -0.015963f, 0.073373f, -0.035401f, 0.022123f, 0.014591f, 0.048882f, -0.014040f, -0.032554f, -0.085470f, -0.036560f, 0.128482f, 0.055543f, 0.085267f, -0.078632f, -0.044434f, -0.036307f, 0.087125f, 0.002009f, -0.143648f, -0.137650f, 0.076460f, 0.133132f, 0.222192f, 0.039212f, -0.190106f, 0.031898f, -0.050780f, 0.064606f, 0.061309f, -0.231808f, -0.074756f, 0.045526f, 0.121494f, 0.029928f, -0.118855f, -0.026266f, -0.012575f, 0.068833f, 0.057835f, 0.015839f, -0.095361f, -0.014633f, 0.020006f, 0.042334f, 0.020246f, -0.024513f, 0.003315f, -0.052198f, -0.007366f, -0.000756f, 0.049879f, -0.034528f, 0.066768f, -0.042967f, 0.018541f, 0.039277f, -0.016874f, 0.032589f, 0.028049f, 0.053067f, 0.002025f, -0.025643f, -0.031233f, 0.004844f, 0.001894f, 0.009014f, 0.004856f, -0.001727f, -0.004244f, -0.019158f, -0.020913f, + -0.004019f, 0.032800f, -0.008616f, 0.000252f, -0.007004f, 0.010520f, 0.002501f, 0.017992f, -0.017023f, -0.022778f, -0.043842f, -0.022399f, -0.002609f, 0.023931f, -0.023464f, -0.002163f, -0.068645f, 0.058635f, -0.061272f, -0.012947f, 0.001903f, 0.015727f, -0.011861f, 0.014134f, 0.023317f, -0.038996f, -0.034114f, -0.000473f, 0.008535f, 0.025485f, -0.028805f, 0.004275f, 0.021328f, -0.016593f, 0.013151f, -0.008492f, 0.066071f, -0.000692f, -0.010451f, 0.038464f, 0.020506f, 0.034207f, -0.017602f, 0.021931f, -0.007333f, -0.000667f, 0.027569f, 0.020156f, 0.004226f, 0.008602f, 0.037325f, -0.034982f, -0.011076f, 0.004015f, 0.050510f, -0.000575f, -0.011914f, 0.047626f, -0.012486f, -0.020357f, -0.020944f, 0.039500f, -0.009751f, 0.017385f, 0.010068f, 0.006211f, -0.014220f, 0.007287f, 0.014879f, 0.005639f, 0.043918f, 0.022238f, 0.012186f, -0.018980f, -0.003293f, 0.017137f, -0.032031f, 0.011624f, 0.011661f, 0.032892f, 0.000073f, -0.003664f, 0.018119f, 0.004294f, -0.037107f, 0.041564f, 0.012281f, -0.009445f, 0.033987f, -0.023110f, -0.003241f, -0.017199f, -0.015573f, 0.033999f, 0.024390f, -0.002151f, + 0.012039f, -0.020007f, 0.004372f, -0.027042f, -0.002923f, -0.024755f, 0.005237f, 0.016263f, 0.005537f, 0.003161f, -0.005726f, -0.003297f, 0.004441f, -0.014752f, 0.004019f, -0.006322f, 0.006750f, -0.009689f, -0.003773f, -0.008964f, -0.011895f, 0.005717f, -0.002325f, -0.000674f, -0.004585f, 0.016108f, 0.005884f, -0.020212f, -0.021498f, -0.014384f, 0.004159f, 0.006704f, 0.015168f, 0.009246f, -0.019830f, -0.002832f, -0.007653f, 0.017996f, -0.004789f, 0.019400f, 0.007726f, -0.015787f, -0.000177f, 0.008641f, -0.009327f, 0.012397f, -0.007550f, 0.014006f, -0.010105f, -0.003099f, 0.004227f, -0.007836f, 0.107021f, 0.008627f, -0.039566f, -0.032748f, 0.005287f, 0.024202f, -0.001513f, 0.022090f, -0.008448f, -0.005926f, -0.029729f, -0.006539f, -0.020837f, 0.033030f, -0.020727f, -0.001701f, -0.013111f, -0.006177f, -0.007721f, 0.003599f, -0.022031f, 0.003349f, -0.009537f, -0.015499f, 0.004469f, -0.002488f, 0.001165f, -0.004214f, 0.007655f, 0.003706f, -0.018455f, -0.011828f, -0.000100f, -0.012484f, -0.010929f, 0.009084f, -0.003070f, -0.018805f, 0.001150f, -0.010472f, 0.007904f, -0.027767f, 0.013757f, -0.012088f, + -0.021159f, 0.006366f, -0.009762f, -0.010948f, 0.002730f, -0.000217f, 0.001186f, -0.004652f, 0.004529f, -0.008522f, 0.009251f, -0.005862f, 0.000858f, 0.015424f, -0.011306f, 0.005148f, -0.003086f, -0.001683f, 0.004070f, -0.012832f, 0.011481f, -0.013490f, 0.011459f, -0.002858f, -0.000721f, -0.008658f, 0.010817f, -0.012968f, 0.000687f, 0.004506f, -0.017142f, 0.016875f, -0.010507f, 0.007126f, -0.008001f, 0.006803f, -0.006208f, -0.007566f, 0.012410f, -0.007968f, -0.001737f, 0.012304f, -0.008173f, -0.000190f, 0.000844f, 0.001881f, -0.009024f, 0.000624f, -0.000977f, -0.003944f, -0.002667f, 0.002038f, -0.002965f, -0.004851f, -0.002556f, 0.005303f, -0.005125f, 0.003949f, -0.001593f, -0.000662f, -0.001781f, -0.003757f, 0.003243f, -0.002573f, -0.003082f, 0.003602f, -0.004083f, 0.002825f, 0.001154f, -0.002445f, 0.000365f, -0.000715f, 0.000809f, -0.007586f, 0.006945f, -0.007802f, 0.001105f, -0.001252f, -0.004255f, 0.000911f, -0.002452f, 0.005116f, -0.013127f, -0.051841f, -0.082856f, 0.087852f, 0.306656f, 0.058453f, 0.092240f, -0.188979f, -0.262127f, -0.109891f, -0.137148f, 0.105813f, 0.246242f, 0.141155f, + 0.095199f, 0.009233f, -0.135347f, -0.120292f, -0.119799f, -0.049360f, 0.068308f, 0.057811f, 0.062272f, 0.055506f, -0.001652f, -0.009300f, -0.014028f, -0.019609f, -0.028253f, -0.004114f, 0.037820f, -0.003609f, -0.021663f, -0.008835f, -0.031386f, -0.018025f, -0.005310f, -0.008118f, 0.060558f, 0.055871f, 0.033383f, 0.035376f, 0.002003f, -0.043864f, -0.044288f, -0.081823f, -0.054167f, 0.007233f, 0.006821f, 0.016405f, 0.048295f, 0.068312f, 0.041306f, 0.034289f, -0.001424f, -0.039059f, -0.053872f, -0.046870f, -0.038982f, 0.005372f, 0.014095f, 0.024886f, 0.017491f, 0.011311f, 0.002639f, -0.014364f, 0.005677f, 0.001150f, 0.006039f, 0.033857f, -0.003070f, 0.014878f, 0.015615f, -0.025551f, -0.047807f, -0.049543f, -0.044380f, 0.011617f, 0.036583f, 0.026247f, 0.040016f, 0.034994f, -0.011711f, 0.008652f, 0.021854f, -0.014222f, -0.013065f, -0.030869f, -0.039461f, -0.015552f, -0.009267f, -0.004298f, 0.016813f, 0.007637f, 0.009107f, 0.026472f, 0.025411f, 0.026057f, 0.015033f, 0.006515f, -0.013089f, -0.016465f, -0.040579f, -0.044735f, -0.031542f, -0.023344f, 0.010095f, 0.028925f, 0.036661f, 0.048961f, + 0.035146f, 0.022249f, 0.000366f, -0.015404f, -0.024000f, -0.050948f, -0.053823f, -0.019165f, 0.009650f, 0.025617f, 0.020586f, 0.017789f, 0.020603f, 0.014734f, -0.000984f, -0.003960f, 0.002189f, 0.000434f, -0.008929f, -0.008136f, -0.027207f, -0.017983f, -0.000754f, 0.009741f, 0.013409f, 0.010520f, -0.004058f, -0.000558f, 0.009882f, 0.007696f, 0.000586f, 0.005329f, 0.004766f, -0.003237f, -0.012827f, -0.011605f, -0.011109f, -0.002620f, -0.002941f, -0.000257f, 0.002349f, 0.011339f, 0.012618f, 0.011340f, 0.005407f, 0.003630f, -0.005378f, -0.009833f, -0.012078f, -0.007130f, -0.004259f, -0.000037f, 0.000630f, 0.004169f, 0.003634f, 0.006786f, 0.004601f, 0.002772f, -0.001166f, -0.000525f, -0.001641f, -0.001041f, -0.004163f, -0.003793f, -0.003245f, 0.002246f, 0.002634f, 0.003261f, -0.000789f, -0.001189f, -0.001918f, 0.001745f, 0.000377f, 0.001718f, 0.000341f, 0.001969f, -0.000881f, -0.000846f, -0.001877f, 0.001023f, -0.000347f, 0.000538f, -0.001989f, -0.000732f, -0.001691f, 0.000663f, 0.000174f, 0.002390f, 0.000425f, 0.001090f, -0.000165f, 0.001708f, -0.000024f, 0.000242f, -0.002578f, -0.001451f, + -0.002303f, 0.000230f, -0.000289f, 0.001737f, 0.000163f, 0.001579f, 0.000272f, 0.001253f, -0.000966f, 0.000208f, -0.001180f, 0.000521f, -0.000884f, 0.000674f, -0.000671f, 0.000734f, -0.001012f, 0.000391f, -0.000731f, 0.001045f, -0.000414f, 0.000893f, -0.000706f, 0.000778f, -0.000691f, 0.000812f, -0.000660f, 0.000772f, -0.000779f, 0.000684f, -0.000826f, 0.000652f, -0.000831f, 0.000689f, -0.000756f} + }, + { + {0.004110f, 0.011707f, 0.001045f, 0.007816f, -0.001759f, -0.001209f, -0.004200f, 0.008338f, 0.005351f, -0.004995f, -0.006466f, 0.004170f, -0.001616f, -0.010067f, -0.011549f, 0.002689f, 0.000619f, -0.003974f, -0.003911f, -0.007864f, 0.005024f, -0.009240f, 0.002389f, -0.000966f, 0.002120f, 0.000694f, 0.002007f, -0.004186f, -0.000561f, 0.001567f, 0.002678f, -0.001004f, 0.003269f, 0.002294f, -0.004033f, 0.003008f, -0.002425f, -0.007888f, 0.011153f, -0.002197f, 0.000546f, 0.002585f, -0.001354f, 0.006067f, 0.007876f, -0.001744f, 0.002981f, 0.005827f, 0.000535f, -0.006316f, -0.004746f, 0.001505f, 0.003767f, -0.001961f, 0.002078f, 0.007165f, -0.006324f, -0.005800f, 0.006048f, 0.001080f, -0.002342f, -0.003941f, -0.000128f, 0.001307f, 0.004599f, -0.007360f, 0.003628f, 0.001792f, -0.005650f, -0.006221f, 0.005294f, -0.003415f, -0.007500f, -0.003288f, -0.000668f, 0.011321f, 0.013191f, -0.001200f, 0.002223f, -0.001702f, 0.002062f, -0.002233f, 0.003534f, 0.002060f, -0.002130f, -0.000793f, -0.002264f, 0.001062f, -0.003032f, 0.002836f, 0.002627f, 0.000526f, -0.003557f, 0.000366f, -0.000129f, 0.001507f, + -0.000889f, 0.002373f, -0.001221f, 0.000373f, 0.000199f, 0.001450f, -0.000294f, 0.000464f, 0.000485f, 0.001500f, -0.000032f, -0.014460f, -0.006252f, -0.009976f, 0.006536f, -0.004839f, -0.006779f, -0.004590f, -0.006079f, -0.001208f, 0.002238f, 0.010939f, 0.001885f, -0.005846f, 0.009230f, 0.000359f, 0.009515f, -0.009150f, 0.014738f, 0.006840f, 0.015988f, -0.002872f, -0.005450f, -0.001102f, -0.008807f, -0.000751f, -0.000634f, -0.003191f, 0.002984f, 0.000293f, -0.006995f, -0.001698f, -0.000032f, 0.002161f, 0.006932f, 0.001598f, -0.010456f, -0.008707f, -0.003309f, 0.005866f, 0.000383f, 0.000284f, -0.005304f, 0.008696f, -0.000245f, 0.000632f, -0.003760f, 0.001104f, -0.002275f, 0.004561f, -0.001488f, 0.014499f, 0.000115f, -0.001916f, 0.005489f, -0.003671f, -0.006535f, -0.002709f, 0.004906f, 0.008746f, 0.001444f, 0.005353f, 0.001311f, 0.000896f, -0.004616f, -0.004510f, -0.007389f, -0.000340f, -0.007660f, 0.001890f, 0.006223f, 0.006640f, 0.004666f, -0.002381f, -0.003400f, 0.005959f, -0.004248f, -0.001783f, 0.003721f, -0.003424f, -0.000608f, -0.001788f, 0.003852f, 0.006853f, 0.003536f, 0.001999f, + -0.001745f, -0.000787f, 0.001232f, -0.000701f, 0.004593f, 0.000765f, -0.002251f, -0.001347f, -0.001036f, -0.000327f, 0.000640f, 0.000555f, 0.000070f, -0.000731f, 0.002129f, 0.001337f, 0.000102f, 0.000808f, -0.001665f, -0.001077f, -0.001329f, -0.001569f, -0.000552f, -0.001757f, -0.001706f, -0.000389f, 0.002186f, 0.010098f, 0.010953f, 0.005763f, 0.000034f, 0.008908f, -0.004790f, -0.007599f, 0.007425f, 0.007677f, 0.009787f, 0.014349f, 0.001420f, -0.009154f, 0.005379f, -0.008729f, -0.000505f, 0.002914f, 0.002181f, 0.015987f, 0.001359f, -0.012877f, -0.000492f, 0.002297f, 0.005518f, -0.000930f, -0.004259f, -0.014174f, -0.002667f, 0.012032f, 0.004282f, 0.007915f, 0.009393f, 0.007706f, 0.002276f, -0.001336f, 0.008366f, -0.010523f, -0.000190f, -0.007152f, 0.019345f, -0.001033f, 0.000672f, 0.008561f, -0.006990f, -0.001110f, 0.003140f, -0.001066f, 0.011595f, -0.001757f, 0.003598f, 0.010979f, -0.001996f, 0.003453f, 0.001048f, -0.000516f, 0.000029f, -0.001426f, -0.003032f, 0.004757f, 0.006502f, -0.001522f, 0.006473f, 0.002329f, 0.012674f, 0.014347f, -0.000625f, 0.003852f, 0.002508f, -0.007213f, + 0.007239f, -0.001748f, -0.005895f, 0.002551f, 0.007133f, 0.002002f, -0.001687f, 0.012723f, -0.001666f, 0.003476f, 0.003949f, 0.001910f, -0.006309f, -0.000343f, -0.001177f, 0.001056f, -0.003265f, -0.000670f, 0.000525f, 0.001383f, 0.001500f, 0.002372f, -0.000683f, 0.001179f, -0.003023f, -0.002110f, -0.003782f, 0.003026f, 0.001130f, -0.000544f, 0.001330f, -0.000499f, -0.003078f, 0.002067f, 0.000452f, 0.001510f, -0.000843f, -0.001082f, 0.000707f, 0.003820f, -0.003773f, 0.002192f, 0.016052f, 0.015554f, -0.006072f, -0.009046f, -0.007742f, -0.005466f, 0.004107f, -0.017196f, -0.001571f, 0.002273f, -0.008089f, -0.015247f, 0.014807f, -0.003280f, -0.003599f, 0.002252f, 0.006884f, 0.005934f, -0.007398f, -0.003092f, -0.000194f, -0.000927f, 0.003650f, 0.005068f, -0.002735f, 0.006258f, -0.004652f, 0.009653f, -0.001048f, 0.000285f, -0.004874f, 0.005046f, 0.002029f, -0.001599f, -0.004854f, 0.002253f, -0.002701f, -0.004473f, -0.003532f, 0.000760f, 0.003347f, -0.009347f, 0.000925f, -0.017539f, -0.009943f, 0.006158f, -0.002492f, 0.001972f, 0.004026f, 0.011365f, -0.003562f, -0.005891f, -0.000268f, 0.000255f, + 0.004962f, 0.004535f, -0.005239f, -0.002471f, 0.012809f, 0.000376f, 0.002068f, 0.000971f, 0.005774f, -0.010679f, 0.000491f, 0.005247f, 0.009983f, 0.001957f, 0.004366f, 0.014869f, -0.003554f, -0.001522f, -0.007979f, -0.000005f, 0.002595f, 0.005132f, 0.000113f, -0.003344f, 0.004703f, -0.000508f, 0.008442f, -0.000034f, -0.000211f, 0.000907f, -0.010406f, -0.005539f, -0.006114f, 0.005749f, -0.000913f, -0.001811f, -0.000008f, 0.000659f, -0.000331f, 0.002964f, -0.000891f, -0.001868f, -0.002233f, -0.001254f, -0.003198f, -0.002240f, 0.002515f, 0.000035f, -0.000839f, -0.001773f, 0.000812f, 0.000530f, 0.000259f, -0.001574f, 0.002751f, 0.001043f, 0.001742f, -0.000520f, -0.000141f, -0.002016f, -0.002055f, 0.001255f, -0.000980f, 0.001738f, 0.002449f, -0.000095f, -0.010275f, -0.015693f, 0.006649f, -0.005020f, 0.000173f, -0.008003f, 0.006204f, -0.018136f, -0.015142f, -0.017093f, -0.005932f, -0.003495f, -0.012164f, 0.006315f, 0.016374f, -0.011974f, 0.002430f, 0.019535f, -0.004596f, -0.005111f, -0.009024f, 0.001748f, -0.000165f, 0.008757f, 0.002693f, 0.006346f, 0.004212f, -0.006124f, -0.012416f, -0.005676f, + 0.007236f, -0.003991f, -0.007637f, 0.002083f, 0.002997f, 0.002603f, 0.001451f, 0.017040f, -0.008069f, 0.009362f, -0.004503f, 0.004793f, -0.005018f, 0.014211f, -0.010551f, 0.005912f, -0.000971f, -0.008147f, 0.007657f, -0.002905f, -0.002870f, 0.008552f, 0.004338f, -0.000530f, -0.003805f, 0.007792f, 0.003636f, -0.007630f, -0.009483f, 0.006607f, 0.010253f, 0.006027f, 0.000125f, -0.004321f, 0.000411f, 0.006804f, -0.002967f, 0.008184f, -0.001998f, -0.016081f, 0.000395f, -0.006954f, 0.023054f, 0.008285f, -0.013307f, -0.007234f, -0.002723f, -0.005777f, 0.005856f, 0.005990f, 0.004271f, -0.002646f, 0.004959f, 0.004287f, 0.001315f, -0.000779f, -0.006932f, 0.001544f, 0.002217f, -0.001748f, 0.001442f, 0.002568f, -0.001037f, -0.000089f, 0.001371f, -0.000233f, -0.002150f, -0.001490f, 0.000034f, 0.001981f, -0.001974f, 0.001887f, 0.001855f, -0.002346f, -0.003385f, -0.003897f, 0.000001f, 0.002646f, -0.001248f, 0.002375f, -0.001896f, 0.000042f, 0.001513f, -0.000954f, -0.003807f, 0.000797f, 0.005983f, -0.013389f, -0.016537f, 0.014267f, -0.003044f, -0.013319f, 0.001125f, -0.003352f, 0.013766f, 0.006952f, + -0.003487f, 0.002670f, -0.000664f, -0.001940f, -0.002429f, 0.016105f, 0.003166f, 0.000981f, -0.010875f, -0.004864f, -0.002511f, 0.005732f, 0.007070f, 0.021650f, 0.000588f, 0.000841f, -0.000609f, 0.001600f, -0.009410f, 0.000564f, 0.003964f, -0.011627f, -0.008254f, -0.007480f, -0.000910f, 0.015870f, -0.012739f, 0.002322f, 0.007238f, 0.003256f, -0.005926f, 0.006694f, -0.015912f, 0.013203f, -0.002769f, 0.000147f, 0.007148f, -0.007930f, -0.009406f, -0.014526f, 0.003168f, -0.004654f, 0.013957f, 0.004979f, 0.000400f, 0.002797f, 0.004286f, 0.011053f, -0.004765f, -0.002251f, 0.011444f, -0.002191f, -0.006440f, -0.000089f, 0.011452f, 0.011700f, 0.010588f, 0.005854f, -0.006961f, 0.006916f, 0.009583f, -0.011104f, 0.014460f, -0.008655f, -0.008185f, 0.013215f, 0.001419f, 0.019000f, -0.000197f, -0.010423f, 0.004695f, -0.004557f, 0.012527f, 0.006115f, 0.003479f, 0.001000f, 0.004319f, -0.002045f, 0.007886f, 0.002893f, 0.003154f, 0.002529f, 0.004631f, -0.000208f, -0.000357f, 0.003755f, -0.000107f, 0.002802f, -0.001383f, 0.004515f, 0.008923f, -0.005016f, -0.002354f, 0.001732f, 0.001138f, 0.000736f, + 0.002285f, -0.000283f, 0.000735f, 0.001996f, 0.004382f, 0.000486f, 0.008214f, 0.002121f, 0.000972f, -0.003513f, 0.000947f, 0.002881f, -0.003669f, 0.000974f, 0.001622f, -0.000049f, 0.001061f, -0.000074f, -0.029420f, -0.019553f, 0.005330f, 0.009379f, 0.020284f, -0.012409f, 0.010929f, 0.001911f, 0.011503f, -0.000691f, -0.005233f, -0.007045f, 0.007135f, 0.020802f, 0.001855f, -0.001945f, -0.019868f, -0.016805f, 0.000189f, -0.012384f, -0.007139f, 0.000599f, 0.002592f, -0.012692f, -0.003689f, 0.002936f, 0.007458f, 0.003824f, -0.008065f, -0.000141f, 0.009455f, 0.007528f, 0.001654f, -0.007831f, 0.001490f, -0.004837f, 0.002336f, 0.002516f, 0.004365f, -0.006059f, 0.007512f, 0.018097f, -0.001797f, -0.001476f, 0.003588f, -0.010273f, 0.004845f, 0.014550f, -0.014410f, -0.017174f, -0.008776f, 0.001293f, -0.022039f, 0.000431f, 0.000675f, 0.002965f, 0.000256f, -0.000441f, -0.010446f, -0.005768f, -0.006773f, -0.001046f, 0.015060f, 0.022065f, 0.000662f, 0.001344f, 0.010854f, -0.004652f, -0.001826f, 0.004905f, 0.024984f, 0.003037f, 0.008996f, 0.017408f, 0.003225f, -0.011492f, 0.004739f, 0.005120f, + -0.005233f, 0.005272f, 0.004524f, -0.001291f, -0.005417f, 0.002438f, 0.001605f, -0.001298f, -0.009270f, 0.003969f, 0.008516f, 0.003064f, 0.006204f, 0.003341f, 0.007484f, -0.001742f, -0.002815f, 0.006769f, 0.005717f, -0.001899f, -0.000393f, -0.002184f, 0.004916f, 0.005223f, -0.004329f, 0.005186f, 0.001411f, 0.000530f, 0.001314f, 0.002757f, 0.003964f, 0.000391f, 0.003458f, -0.002490f, -0.001292f, -0.000149f, -0.000659f, 0.001293f, -0.002361f, 0.000218f, -0.000740f, 0.000887f, -0.003176f, -0.002895f, 0.015067f, 0.009654f, -0.014149f, -0.000483f, 0.030012f, 0.026748f, 0.005525f, 0.016185f, 0.019764f, 0.005145f, -0.000380f, 0.013174f, -0.005988f, 0.000281f, -0.011924f, 0.009813f, -0.000900f, 0.000619f, 0.004269f, 0.005290f, 0.016294f, -0.013677f, -0.012699f, 0.012666f, 0.002468f, 0.005859f, -0.009935f, 0.001913f, -0.003541f, 0.006582f, -0.000007f, 0.009183f, 0.008785f, -0.008913f, 0.007423f, 0.006420f, -0.010512f, 0.026839f, 0.004564f, 0.005329f, -0.020826f, -0.006520f, -0.001773f, 0.017439f, 0.016030f, -0.001523f, -0.017893f, 0.011736f, -0.015573f, -0.004688f, 0.013438f, -0.000279f, + -0.011077f, 0.013342f, 0.016518f, -0.004122f, 0.005496f, -0.006579f, -0.023420f, 0.000248f, 0.014835f, -0.006761f, -0.008085f, 0.009944f, -0.011293f, -0.016869f, 0.004108f, 0.011625f, 0.020868f, 0.011111f, -0.015834f, 0.006696f, -0.018582f, -0.021655f, 0.019973f, 0.009559f, 0.007236f, -0.013412f, -0.014716f, -0.002080f, 0.015026f, 0.005167f, 0.021516f, 0.009714f, 0.005342f, -0.022872f, 0.003597f, -0.006284f, 0.000754f, -0.005245f, 0.004663f, 0.001570f, 0.005669f, 0.009840f, 0.004946f, 0.000994f, 0.004158f, -0.003696f, -0.002022f, -0.003767f, -0.000188f, -0.003516f, -0.001223f, 0.001578f, 0.007112f, 0.001409f, -0.003162f, -0.001154f, 0.002175f, 0.000471f, -0.000793f, -0.007245f, 0.000258f, -0.003629f, 0.001252f, -0.005103f, -0.005945f, 0.004015f, 0.004412f, 0.007395f, -0.007264f, 0.000260f, 0.003586f, 0.031153f, 0.020158f, -0.013659f, -0.003609f, -0.000626f, 0.005567f, 0.004296f, -0.001881f, -0.012336f, 0.003052f, -0.008496f, 0.013092f, 0.000286f, 0.005097f, -0.004375f, -0.001852f, -0.012879f, -0.006709f, 0.026745f, 0.008961f, -0.016516f, 0.007831f, -0.016140f, -0.011235f, -0.025174f, + 0.010956f, 0.000281f, 0.000455f, 0.005792f, -0.000632f, -0.011497f, 0.018938f, 0.010655f, -0.004112f, -0.019173f, 0.019101f, -0.013212f, 0.005076f, -0.000646f, 0.006287f, 0.003605f, 0.012150f, 0.013805f, -0.003219f, 0.007571f, 0.022166f, 0.002676f, -0.006907f, -0.006499f, -0.003883f, 0.003269f, 0.014804f, -0.004231f, 0.006035f, 0.000989f, -0.013504f, 0.000342f, -0.003304f, 0.006422f, -0.020328f, -0.000524f, -0.033907f, -0.020756f, -0.018909f, -0.004979f, -0.018687f, 0.012389f, -0.004656f, -0.015678f, -0.004147f, -0.001936f, -0.012525f, -0.005647f, -0.000429f, 0.001057f, -0.007509f, -0.016476f, -0.016283f, 0.000669f, -0.003527f, 0.003768f, 0.009150f, -0.001673f, 0.004582f, 0.002058f, -0.000065f, -0.000492f, -0.008868f, -0.000608f, -0.000175f, -0.007358f, -0.000579f, 0.006482f, 0.012919f, -0.002472f, -0.006169f, 0.004596f, -0.007989f, 0.006516f, -0.006669f, -0.002740f, 0.001293f, -0.005114f, -0.005993f, -0.000297f, -0.003740f, 0.000671f, -0.001392f, -0.006302f, 0.002976f, -0.000516f, 0.007537f, 0.004798f, -0.005309f, 0.004269f, -0.002964f, 0.003946f, -0.002432f, 0.002586f, 0.002654f, 0.001761f, + 0.000160f, 0.002719f, -0.003509f, -0.002188f, -0.003900f, -0.008185f, 0.001049f, 0.002548f, -0.000813f, 0.001396f, -0.006174f, -0.021410f, -0.026649f, -0.012638f, -0.017698f, 0.046023f, -0.022218f, 0.010447f, -0.020974f, -0.006028f, 0.002341f, -0.003388f, -0.031310f, -0.000632f, -0.014814f, 0.001144f, 0.037137f, -0.011815f, 0.015655f, 0.020404f, 0.007487f, 0.008316f, 0.022387f, 0.006660f, -0.008540f, 0.006364f, 0.008857f, 0.009432f, 0.004117f, -0.004589f, 0.026039f, 0.001028f, -0.001952f, -0.004301f, 0.007157f, -0.002172f, -0.008886f, 0.008810f, -0.003205f, 0.006332f, -0.024963f, 0.001091f, -0.004716f, 0.022752f, -0.008825f, 0.007372f, 0.034182f, -0.002920f, 0.000851f, -0.008264f, -0.013933f, -0.000761f, -0.002169f, -0.014351f, 0.018227f, -0.003849f, 0.013264f, 0.001441f, 0.012536f, -0.007145f, -0.001194f, 0.027262f, 0.013460f, -0.021090f, -0.010919f, 0.005807f, 0.006690f, 0.003282f, 0.005949f, -0.006131f, 0.007850f, 0.010025f, 0.022757f, -0.028997f, 0.001897f, -0.012379f, 0.006072f, -0.000492f, 0.003474f, 0.010723f, 0.015684f, -0.010339f, 0.011127f, -0.007478f, -0.004942f, -0.004165f, + -0.003715f, 0.008780f, -0.019600f, -0.003859f, -0.008961f, 0.011355f, 0.009325f, 0.003930f, 0.004883f, -0.006602f, 0.007735f, 0.003490f, 0.005616f, -0.000759f, 0.004490f, -0.005856f, -0.003126f, -0.007348f, -0.000448f, -0.001193f, -0.006438f, -0.000106f, -0.000509f, -0.001774f, 0.000088f, 0.007827f, 0.004986f, -0.004329f, -0.006895f, 0.003681f, 0.002863f, 0.008978f, -0.006754f, 0.000533f, -0.002319f, 0.004025f, 0.004767f, -0.002364f, -0.003613f, -0.007296f, -0.015117f, -0.013694f, -0.014622f, 0.015849f, -0.030758f, -0.009156f, -0.019243f, 0.009548f, 0.032044f, -0.017466f, 0.001019f, 0.000847f, -0.006184f, 0.012266f, -0.010213f, 0.004894f, -0.003117f, -0.013225f, 0.028593f, 0.001359f, -0.009222f, 0.000346f, -0.004093f, -0.012682f, 0.010031f, -0.009733f, 0.009421f, -0.018123f, -0.008312f, 0.012106f, 0.009023f, -0.030237f, -0.005334f, -0.025761f, 0.007740f, -0.004381f, -0.024620f, 0.030037f, -0.008338f, -0.000674f, -0.022770f, -0.025153f, 0.001547f, -0.022689f, -0.002863f, -0.019617f, -0.016579f, 0.019625f, 0.002271f, -0.025493f, 0.008428f, -0.022830f, 0.020357f, 0.007222f, -0.009729f, 0.000671f, + 0.006609f, 0.021181f, -0.016377f, -0.023414f, 0.023672f, -0.016578f, -0.009297f, 0.012243f, 0.017892f, -0.033143f, -0.016156f, 0.018660f, 0.014052f, 0.007161f, -0.001644f, 0.002200f, -0.023639f, 0.008021f, 0.007994f, 0.012957f, -0.004097f, -0.025236f, -0.018121f, 0.008747f, -0.021581f, -0.019104f, 0.008066f, -0.001398f, 0.000369f, 0.007763f, 0.018362f, -0.000123f, -0.000701f, 0.016884f, 0.001648f, -0.002929f, 0.002981f, -0.002482f, -0.003406f, 0.003509f, -0.004423f, -0.003327f, -0.008545f, -0.008399f, -0.005819f, 0.001342f, -0.004837f, -0.000102f, 0.003527f, 0.002597f, -0.000435f, -0.000283f, 0.003766f, -0.004495f, -0.006785f, 0.001869f, -0.000191f, 0.006333f, -0.006255f, -0.001985f, -0.007098f, 0.008080f, 0.008756f, 0.001690f, -0.000417f, -0.005589f, -0.002173f, -0.007782f, 0.000660f, 0.001023f, -0.004245f, 0.001116f, 0.001726f, 0.001648f, -0.001885f, 0.015612f, -0.024148f, -0.039623f, -0.031829f, 0.014288f, -0.038073f, -0.001942f, 0.028992f, -0.002656f, 0.002151f, 0.020655f, -0.013701f, -0.011831f, 0.046032f, -0.018296f, 0.010824f, 0.017395f, -0.003176f, -0.041758f, -0.003398f, 0.004302f, + -0.010409f, -0.005867f, -0.009630f, 0.038784f, 0.000438f, 0.000349f, -0.001850f, -0.028095f, 0.005189f, -0.016215f, -0.008041f, 0.001653f, 0.004744f, 0.008209f, 0.022635f, 0.004925f, -0.005761f, 0.044331f, 0.004732f, -0.011074f, -0.040564f, -0.006016f, 0.029850f, -0.006554f, -0.018587f, -0.025084f, -0.021967f, -0.018888f, -0.011781f, 0.031511f, 0.012334f, 0.001732f, 0.017608f, 0.026314f, 0.014767f, -0.005834f, -0.004587f, 0.027203f, -0.005344f, -0.008450f, 0.007968f, 0.020784f, 0.003013f, -0.021523f, 0.004969f, -0.002244f, -0.032014f, -0.002501f, 0.025541f, -0.012711f, -0.014702f, -0.003665f, 0.034323f, -0.027369f, -0.005441f, -0.015305f, 0.015693f, 0.009013f, 0.007286f, 0.010892f, -0.004469f, -0.005956f, 0.011638f, 0.009195f, 0.006437f, -0.001946f, 0.001456f, 0.007222f, -0.020126f, -0.003796f, 0.002661f, -0.010503f, 0.000288f, 0.010946f, -0.001097f, 0.001964f, -0.004315f, -0.001325f, 0.006053f, 0.007712f, 0.011694f, 0.006492f, -0.001944f, 0.004085f, -0.006667f, -0.008584f, 0.002451f, -0.001736f, -0.006917f, 0.007640f, 0.004108f, 0.005763f, 0.001246f, 0.002757f, 0.005998f, 0.003250f, + -0.001728f, -0.004353f, -0.001126f, 0.002362f, 0.000013f, 0.002395f, 0.000501f, 0.002986f, 0.001848f, 0.005156f, 0.000660f, -0.005090f, 0.011082f, 0.009009f, -0.008557f, -0.002963f, -0.004113f, -0.002929f, 0.004247f, -0.005202f, 0.003055f, 0.032331f, 0.003253f, -0.028892f, -0.001072f, 0.008650f, -0.001052f, -0.013185f, 0.012523f, -0.009764f, 0.025696f, -0.019809f, 0.017649f, 0.038595f, -0.010477f, -0.010324f, -0.009134f, -0.008075f, 0.034449f, -0.025599f, -0.028126f, -0.021478f, 0.007781f, -0.011232f, -0.018128f, -0.008374f, 0.012337f, -0.017392f, 0.009533f, 0.002209f, 0.013470f, 0.020020f, 0.002408f, -0.002639f, -0.003925f, 0.019723f, -0.005175f, 0.006915f, -0.024347f, -0.000303f, -0.008725f, 0.019214f, -0.025878f, 0.021083f, -0.009001f, -0.013395f, 0.021230f, 0.036842f, -0.020868f, 0.010403f, -0.004690f, 0.007377f, -0.055585f, -0.044111f, -0.026796f, 0.003718f, -0.017045f, 0.007176f, 0.001690f, -0.020752f, -0.016403f, 0.001644f, 0.044095f, 0.010273f, -0.027689f, -0.041360f, -0.021875f, -0.015376f, 0.026962f, -0.018956f, -0.026981f, 0.006251f, 0.005746f, -0.025002f, -0.001709f, -0.000592f, + -0.012464f, -0.003015f, -0.000808f, -0.001226f, 0.011991f, 0.002800f, -0.014430f, -0.012862f, -0.007123f, -0.018460f, -0.010107f, 0.002830f, 0.020392f, 0.003251f, 0.003685f, -0.006161f, -0.017043f, -0.002822f, 0.013647f, -0.000870f, -0.008024f, 0.012489f, -0.019419f, -0.009678f, 0.002716f, 0.002825f, -0.000498f, 0.001906f, 0.001175f, -0.006740f, -0.013659f, -0.005089f, 0.010096f, -0.006229f, -0.004985f, -0.005645f, -0.012218f, -0.013572f, 0.004788f, -0.005051f, -0.003104f, -0.012817f, 0.002902f, 0.007946f, 0.009757f, -0.000719f, -0.006186f, -0.007291f, 0.006972f, 0.002182f, 0.006285f, 0.055877f, 0.036124f, -0.009273f, 0.003438f, 0.036255f, -0.014421f, 0.001513f, 0.015238f, 0.039229f, 0.022640f, -0.006506f, -0.008880f, -0.013185f, 0.003312f, -0.007136f, 0.000420f, 0.001267f, 0.040839f, 0.068127f, -0.004145f, 0.047083f, 0.029396f, 0.006335f, 0.007182f, -0.033080f, -0.033244f, -0.003484f, 0.008621f, -0.002106f, 0.007976f, -0.012171f, -0.024914f, -0.041525f, -0.003728f, -0.026618f, -0.022881f, -0.014787f, -0.023676f, -0.016636f, -0.001044f, 0.039109f, -0.001346f, -0.029182f, -0.002587f, 0.008674f, + 0.028720f, -0.008762f, -0.007412f, -0.017308f, 0.012989f, -0.052553f, -0.047569f, -0.022558f, -0.023768f, -0.025095f, -0.015478f, 0.017137f, -0.021431f, -0.029319f, -0.024971f, -0.043996f, 0.022653f, 0.012452f, -0.039416f, 0.020479f, 0.039721f, 0.078254f, 0.042967f, -0.000197f, 0.014200f, -0.044573f, -0.018385f, 0.024446f, 0.020390f, -0.011203f, -0.030371f, 0.004243f, 0.006358f, 0.027888f, -0.003516f, -0.028040f, -0.004955f, 0.045478f, 0.028868f, 0.033010f, 0.026032f, 0.045873f, 0.042934f, 0.013177f, 0.011695f, -0.009738f, -0.017996f, -0.004722f, -0.001529f, -0.015123f, -0.000003f, -0.017524f, -0.013239f, 0.021000f, 0.009257f, -0.005320f, -0.017897f, -0.006540f, -0.002071f, 0.000028f, -0.019918f, 0.020260f, 0.000348f, -0.016416f, 0.010121f, -0.009996f, -0.008561f, -0.002238f, 0.006355f, 0.027840f, 0.013587f, 0.033248f, 0.000269f, -0.006157f, 0.003893f, 0.012895f, 0.008516f, -0.003900f, 0.017519f, 0.001180f, -0.005456f, 0.002918f, 0.014538f, -0.006736f, -0.005914f, 0.005708f, -0.001049f, 0.005149f, -0.057249f, -0.005695f, 0.092648f, -0.006987f, 0.003573f, 0.022860f, -0.033524f, 0.018725f, + 0.065764f, 0.060296f, -0.060883f, -0.058766f, 0.000201f, -0.063731f, -0.023839f, -0.000289f, 0.007554f, 0.022987f, 0.035114f, 0.030602f, 0.054644f, 0.012673f, 0.021656f, 0.021506f, -0.008975f, -0.004054f, 0.006154f, 0.007017f, 0.016305f, -0.029350f, 0.065647f, 0.027912f, 0.030776f, -0.005843f, 0.066670f, 0.008100f, 0.040287f, 0.016461f, 0.012775f, -0.015774f, -0.009909f, 0.033751f, 0.013277f, 0.015631f, -0.035449f, -0.019208f, -0.029556f, -0.017511f, -0.021425f, -0.000202f, -0.042957f, -0.047039f, -0.002479f, -0.018170f, -0.088287f, -0.065997f, -0.059414f, 0.016949f, 0.064825f, 0.083527f, -0.045899f, 0.057573f, 0.089903f, 0.015240f, 0.007857f, -0.005753f, 0.061964f, 0.004670f, 0.056091f, 0.023971f, 0.026426f, -0.037210f, -0.122760f, -0.097475f, -0.021705f, -0.003325f, 0.002922f, 0.004326f, 0.045800f, 0.043000f, 0.037748f, -0.023311f, 0.003312f, -0.012165f, -0.063134f, 0.006421f, 0.005365f, 0.031909f, 0.005257f, 0.046925f, 0.042703f, 0.010519f, 0.037189f, -0.015590f, 0.025289f, -0.022136f, -0.024611f, -0.009182f, 0.010219f, 0.040790f, -0.008859f, -0.011466f, 0.006330f, -0.020157f, + -0.009560f, 0.020659f, -0.005549f, 0.014282f, -0.025376f, 0.035011f, 0.010914f, 0.000373f, -0.002097f, 0.026933f, -0.006306f, 0.001895f, 0.004708f, -0.000526f, 0.018608f, -0.013211f, -0.006443f, -0.000179f, 0.017898f, -0.026180f, 0.003808f, 0.009345f, -0.012469f, 0.001962f, 0.005082f, 0.003254f, -0.005916f, 0.044088f, -0.009059f, -0.081851f, -0.006308f, 0.128275f, 0.024421f, -0.024887f, 0.034107f, -0.011383f, 0.022489f, -0.011040f, -0.013169f, -0.043198f, -0.015163f, -0.005325f, -0.006291f, -0.021041f, 0.031340f, -0.028262f, -0.028806f, -0.002718f, 0.005553f, 0.026357f, 0.012975f, 0.006766f, 0.012354f, -0.011698f, 0.001061f, 0.039701f, -0.019796f, -0.048757f, -0.008808f, 0.003572f, -0.015421f, 0.032944f, -0.016738f, -0.011960f, 0.029130f, 0.007319f, 0.022200f, -0.050339f, -0.055152f, 0.017992f, -0.009975f, -0.019660f, -0.023146f, -0.030187f, -0.060812f, -0.000434f, -0.004574f, 0.019985f, -0.038636f, -0.082899f, 0.062490f, 0.016386f, 0.058790f, 0.005880f, -0.017863f, -0.018015f, 0.015925f, -0.031556f, 0.048892f, 0.009003f, 0.058516f, 0.039695f, 0.086476f, -0.009024f, -0.081406f, -0.064489f, + -0.035519f, 0.046763f, 0.048385f, -0.036705f, 0.038591f, 0.074335f, -0.043307f, -0.007366f, 0.081346f, 0.011958f, 0.062673f, -0.009754f, -0.030802f, -0.084347f, -0.031767f, 0.008874f, 0.054260f, 0.046039f, -0.026738f, 0.022829f, 0.022807f, 0.043625f, 0.016040f, -0.044688f, -0.051377f, -0.021180f, 0.036830f, 0.075941f, -0.001162f, -0.007549f, 0.040608f, 0.020347f, 0.004392f, -0.007281f, -0.016004f, -0.021389f, -0.015946f, 0.012365f, 0.008769f, 0.023550f, -0.009416f, -0.003540f, 0.003062f, 0.013940f, 0.019662f, -0.024998f, 0.001173f, 0.026687f, -0.002373f, -0.008765f, -0.029705f, 0.021327f, 0.000684f, -0.013879f, -0.008621f, 0.029816f, -0.000722f, -0.020453f, -0.009800f, 0.015763f, 0.001199f, -0.068055f, 0.070570f, 0.095722f, 0.016705f, 0.004356f, 0.021306f, -0.014591f, 0.041817f, 0.023392f, 0.043709f, -0.008810f, -0.046033f, 0.102470f, 0.000665f, -0.038446f, 0.004822f, 0.069323f, 0.031807f, 0.013655f, -0.043780f, 0.004840f, -0.023382f, -0.017067f, 0.006990f, -0.032548f, 0.002890f, 0.008891f, 0.039509f, -0.055785f, -0.009366f, -0.006580f, 0.033408f, -0.012516f, -0.020484f, -0.019516f, + -0.000090f, 0.021343f, -0.043289f, 0.003323f, 0.011644f, -0.088773f, 0.012457f, -0.023938f, -0.062479f, 0.041386f, -0.046117f, -0.081083f, 0.107521f, -0.000657f, 0.006440f, -0.008283f, -0.029611f, 0.064937f, -0.045567f, -0.004116f, 0.009889f, -0.029367f, -0.002166f, 0.082028f, 0.042570f, -0.071980f, -0.077839f, 0.077248f, -0.036499f, 0.045098f, 0.074237f, -0.066163f, -0.113956f, -0.078871f, 0.132190f, -0.007617f, -0.103135f, 0.094777f, -0.068663f, -0.130968f, -0.001779f, 0.113346f, -0.004597f, -0.135917f, -0.001650f, -0.045603f, 0.001548f, 0.168078f, -0.025309f, -0.123364f, 0.018251f, 0.066001f, 0.001720f, 0.077150f, 0.004809f, 0.001756f, -0.024000f, 0.003365f, 0.017945f, 0.062338f, -0.012627f, -0.016513f, 0.061847f, -0.007977f, 0.015039f, 0.043317f, -0.006992f, -0.062455f, 0.041317f, 0.029922f, 0.048335f, -0.014609f, -0.000703f, 0.017308f, -0.013375f, -0.045889f, -0.019905f, 0.019320f, 0.001895f, -0.008807f, 0.061290f, -0.001544f, -0.067194f, 0.016098f, 0.055792f, 0.032357f, -0.023041f, 0.003336f, -0.026465f, -0.014739f, 0.067611f, 0.056571f, -0.014104f, -0.064177f, -0.020099f, 0.026792f, + 0.022162f, 0.017890f, -0.011564f, -0.043026f, -0.001613f, -0.046326f, 0.070578f, -0.014615f, 0.021646f, 0.044321f, 0.032448f, 0.033462f, 0.082978f, 0.035225f, -0.019954f, 0.012537f, 0.020697f, 0.026445f, -0.029611f, 0.078967f, 0.075437f, 0.009929f, 0.026333f, -0.018892f, 0.000281f, -0.081662f, 0.037627f, -0.043355f, 0.029252f, -0.003809f, -0.029481f, 0.043489f, -0.017152f, -0.033310f, 0.017972f, -0.046833f, 0.031141f, 0.000849f, -0.008440f, 0.012347f, 0.019608f, 0.028330f, 0.029861f, 0.027602f, 0.084550f, -0.008697f, 0.009574f, 0.026181f, 0.057109f, -0.005985f, 0.015491f, -0.000186f, 0.044771f, 0.052244f, -0.016719f, 0.012296f, -0.001899f, -0.008944f, -0.095710f, 0.007359f, 0.041454f, -0.023321f, -0.023060f, 0.020990f, -0.039589f, -0.059926f, 0.005807f, 0.033545f, 0.071541f, -0.091542f, 0.035438f, -0.004939f, -0.002039f, 0.000156f, 0.036218f, 0.076256f, 0.001897f, -0.056055f, 0.019062f, 0.061853f, -0.033075f, -0.049325f, 0.005318f, 0.027024f, -0.025748f, 0.048959f, -0.008981f, 0.037592f, 0.003885f, -0.037871f, 0.046958f, 0.037090f, 0.006951f, 0.029229f, -0.015953f, 0.018196f, + -0.008381f, 0.009552f, 0.015808f, 0.044637f, -0.008857f, -0.054443f, -0.006333f, 0.062766f, 0.005538f, -0.008132f, 0.056588f, 0.011550f, 0.000434f, 0.013332f, 0.039499f, 0.057568f, -0.036306f, 0.014116f, 0.008630f, -0.002848f, 0.029084f, -0.008341f, -0.041241f, 0.013722f, 0.040833f, -0.017219f, 0.011252f, 0.013564f, -0.012203f, 0.015527f, -0.025895f, 0.018976f, 0.017949f, -0.023339f, -0.049456f, 0.021424f, 0.029481f, -0.013307f, -0.017469f, 0.026677f, -0.001138f, -0.016271f, -0.017941f, 0.018972f, 0.011083f, 0.043813f, -0.082728f, -0.064414f, -0.001194f, -0.099408f, -0.034189f, -0.036792f, 0.076497f, -0.002235f, -0.028407f, 0.035206f, -0.018150f, 0.019498f, 0.004904f, -0.037984f, 0.045214f, -0.102503f, -0.009849f, 0.006179f, -0.025756f, 0.018843f, 0.004429f, -0.020049f, -0.003803f, 0.002953f, 0.025651f, 0.001489f, -0.030216f, -0.099493f, -0.072693f, -0.055315f, -0.027664f, 0.061556f, -0.012687f, 0.002240f, -0.099767f, 0.007377f, -0.007153f, -0.013572f, 0.002915f, -0.096349f, 0.051314f, -0.046826f, 0.023476f, -0.019226f, 0.065304f, -0.035894f, -0.063744f, -0.030642f, -0.000813f, 0.047437f, + 0.086413f, 0.090956f, -0.112668f, -0.083291f, -0.057667f, 0.038621f, 0.092045f, 0.111620f, -0.019790f, -0.028193f, -0.098682f, -0.036629f, 0.087256f, 0.053362f, -0.001376f, -0.000125f, -0.002418f, -0.083275f, 0.055277f, -0.016854f, 0.053334f, 0.129804f, -0.145552f, 0.175820f, 0.049368f, -0.095498f, 0.026308f, -0.191295f, -0.187127f, 0.137675f, 0.058450f, 0.013412f, 0.040743f, -0.070921f, -0.034358f, 0.128278f, -0.005277f, 0.086203f, -0.008872f, -0.069661f, -0.023060f, 0.076117f, -0.025796f, -0.001890f, 0.024363f, -0.006346f, -0.044906f, 0.024571f, -0.036543f, 0.016484f, 0.048240f, -0.050832f, 0.047501f, 0.015869f, -0.006863f, 0.017915f, -0.003378f, -0.011619f, 0.007527f, -0.017794f, 0.008571f, -0.036181f, 0.031427f, 0.033017f, 0.006320f, 0.000884f, -0.011543f, 0.016810f, 0.005751f, 0.006577f, 0.015998f, 0.031729f, -0.040152f, -0.013654f, -0.037317f, -0.028348f, 0.002387f, 0.001177f, 0.031087f, -0.041323f, -0.032006f, -0.039836f, -0.025564f, -0.010887f, 0.058285f, -0.083345f, 0.068961f, -0.041497f, 0.042449f, 0.022039f, 0.026832f, 0.015375f, -0.052960f, 0.057757f, -0.008517f, -0.021003f, + -0.018940f, -0.023269f, 0.017876f, -0.012354f, 0.025386f, 0.014766f, -0.003229f, -0.006354f, -0.044337f, 0.025531f, 0.010598f, -0.011690f, 0.009963f, 0.023148f, -0.006610f, 0.013015f, -0.022511f, 0.026383f, -0.009880f, 0.003142f, 0.010892f, 0.011060f, -0.011826f, 0.040824f, -0.001563f, -0.038905f, -0.002529f, 0.017547f, 0.008821f, -0.029826f, 0.014394f, 0.034139f, -0.006448f, -0.016988f, -0.016304f, -0.002534f, 0.009491f, -0.004444f, 0.040430f, -0.027461f, -0.010397f, -0.009932f, -0.020295f, -0.001996f, -0.006187f, 0.014540f, 0.010727f, -0.016983f, -0.002509f, 0.015264f, -0.016329f, -0.008678f, -0.004869f, 0.024716f, -0.015443f, 0.010444f, 0.016804f, -0.039002f, -0.015587f, 0.012133f, -0.040380f, 0.061001f, 0.016402f, 0.019228f, 0.028295f, -0.018202f, -0.000450f, -0.005574f, -0.027801f, 0.005321f, 0.009219f, 0.022104f, -0.004402f, -0.009681f, 0.013678f, -0.014408f, -0.005778f, 0.013149f, 0.000189f, -0.003562f, 0.011375f, 0.003196f, -0.007203f, -0.000591f, -0.007958f, 0.017621f, -0.016880f, 0.026876f, 0.001247f, 0.005718f, -0.011278f, -0.001272f, -0.004079f, -0.008739f, -0.004425f, 0.006208f, + 0.003309f, 0.007566f, -0.000121f, -0.006634f, -0.004249f, -0.021253f, 0.021265f, -0.017108f, 0.009651f, -0.004234f, 0.012431f, -0.007158f, -0.019580f, 0.001097f, 0.010216f, -0.016287f, 0.024173f, -0.019365f, 0.010594f, -0.007505f, 0.095805f, 0.012624f, -0.032639f, -0.025132f, -0.019055f, -0.001725f, -0.003221f, 0.002205f, -0.002750f, -0.003613f, -0.054388f, 0.001272f, -0.010943f, -0.012440f, 0.006743f, -0.021220f, -0.009811f, 0.009958f, -0.014999f, 0.004304f, 0.016688f, -0.022686f, 0.014196f, -0.008354f, -0.012227f, -0.001862f, -0.012230f, 0.005713f, -0.011363f, -0.005913f, -0.013363f, -0.002517f, -0.000347f, -0.000248f, -0.008087f, -0.008187f, 0.002348f, 0.004383f, -0.009641f, 0.012897f, -0.015963f, -0.001349f, -0.006459f, -0.001963f, -0.003120f, -0.012499f, 0.017051f, 0.010603f, -0.017403f, 0.021040f, -0.002282f, 0.004526f, -0.009631f, 0.020188f, -0.020275f, 0.001560f, 0.001583f, 0.005370f, -0.003472f, -0.005167f, 0.014886f, -0.009926f, 0.002091f, 0.000843f, -0.003204f, 0.004852f, -0.006685f, -0.000864f, 0.008252f, -0.004178f, -0.003978f, 0.009557f, -0.003850f, -0.004111f, -0.008979f, 0.004636f, + 0.004185f, -0.019548f, 0.023310f, -0.013199f, 0.005162f, 0.001652f, 0.000177f, -0.007554f, 0.003097f, 0.009682f, -0.007303f, -0.003596f, 0.005021f, -0.007181f, -0.000611f, 0.005938f, -0.002585f, 0.002381f, 0.001135f, -0.005320f, 0.000776f, 0.000715f, 0.004647f, -0.008659f, 0.000554f, -0.000960f, -0.003586f, 0.003645f, -0.004437f, 0.002104f, -0.002937f, -0.007582f, 0.004079f, -0.006573f, -0.003964f, 0.002451f, -0.004304f, 0.001532f, 0.003642f, 0.000428f, -0.005933f, 0.006105f, -0.001362f, -0.003760f, 0.004870f, -0.047147f, -0.076011f, 0.084914f, 0.286737f, 0.028891f, 0.066069f, -0.156113f, -0.238060f, -0.060151f, -0.124212f, 0.096743f, 0.199990f, 0.104986f, 0.066857f, -0.015186f, -0.077182f, -0.076446f, -0.057029f, -0.053474f, 0.019314f, 0.033810f, 0.020001f, 0.036411f, 0.005160f, 0.002676f, 0.014786f, 0.003898f, 0.016745f, 0.012845f, -0.009463f, -0.036745f, -0.026682f, -0.032416f, -0.043113f, -0.023189f, 0.024791f, 0.031343f, 0.058982f, 0.082618f, 0.030347f, 0.011744f, -0.027215f, -0.065940f, -0.063259f, -0.044644f, -0.030499f, 0.006069f, 0.024789f, 0.034923f, 0.037837f, 0.031386f, + 0.021652f, 0.002237f, -0.002177f, -0.021121f, -0.014108f, -0.009457f, -0.010126f, -0.004313f, -0.011486f, -0.003639f, -0.013679f, -0.013914f, 0.005380f, -0.001341f, 0.018465f, 0.029588f, 0.018046f, 0.044125f, 0.039839f, -0.019251f, -0.038645f, -0.039277f, -0.057797f, -0.016601f, -0.013667f, -0.003365f, 0.036091f, 0.031653f, -0.005305f, 0.027495f, 0.034912f, 0.011500f, 0.024491f, -0.002405f, -0.027587f, -0.020465f, -0.047590f, -0.030404f, -0.011040f, -0.003210f, -0.003229f, 0.008418f, 0.022935f, 0.035633f, 0.045557f, 0.038057f, 0.013092f, -0.021116f, -0.033908f, -0.032971f, -0.036219f, -0.016615f, -0.008984f, -0.003996f, 0.008382f, 0.017804f, 0.014612f, 0.024993f, 0.014070f, 0.016347f, 0.015344f, -0.000076f, -0.012169f, -0.016487f, -0.020092f, -0.020242f, -0.017560f, -0.009675f, -0.009554f, 0.005505f, 0.010571f, 0.020517f, 0.030340f, 0.028813f, 0.011324f, 0.001850f, -0.016265f, -0.020307f, -0.023425f, -0.023958f, -0.006693f, -0.001244f, -0.004308f, 0.005504f, 0.018727f, 0.023897f, 0.012157f, 0.002491f, -0.001047f, 0.000198f, -0.004610f, -0.005597f, -0.008860f, -0.005740f, -0.006686f, -0.005027f, + -0.002780f, 0.000013f, 0.000281f, 0.005304f, 0.010694f, 0.011007f, 0.005746f, 0.002558f, -0.002790f, -0.004407f, -0.006357f, -0.004823f, -0.005369f, -0.002674f, -0.002496f, -0.000097f, 0.001249f, 0.004418f, 0.004036f, 0.004827f, 0.001628f, 0.001135f, -0.000734f, -0.001048f, -0.002345f, -0.000833f, -0.001100f, 0.000174f, -0.001000f, -0.001305f, -0.003491f, -0.000175f, 0.000405f, 0.002046f, 0.001578f, 0.003362f, 0.001025f, 0.000779f, -0.002077f, -0.000796f, 0.000527f, 0.001880f, -0.000772f, -0.001726f, -0.003613f, -0.001266f, -0.000088f, 0.002059f, 0.000622f, 0.000854f, -0.000660f, 0.000815f, 0.000337f, 0.001797f, 0.000669f, 0.001133f, -0.000859f, -0.000057f, -0.001768f, -0.001111f, -0.002019f, -0.000387f, -0.000814f, 0.000893f, 0.000319f, 0.002219f, 0.001477f, 0.001766f, -0.000262f, 0.000235f, -0.001289f, -0.000238f, -0.001543f, -0.000783f, -0.001354f, 0.000496f, -0.000208f, 0.001086f, 0.000085f, 0.000911f, -0.000398f, 0.000836f, -0.000217f, 0.000787f, -0.000559f, 0.000261f, -0.000936f, 0.000254f, -0.000687f, 0.000531f, -0.000512f, 0.000561f, -0.000546f}, + {0.007432f, 0.012090f, 0.003178f, 0.010675f, 0.000187f, -0.011011f, -0.007590f, -0.008020f, -0.001245f, -0.005507f, 0.012914f, -0.009655f, -0.002451f, -0.004384f, -0.001541f, -0.007744f, 0.007449f, -0.004566f, -0.003573f, 0.006264f, 0.010390f, 0.011754f, 0.001814f, -0.000841f, 0.002449f, 0.000625f, 0.001663f, -0.005317f, -0.005721f, 0.002802f, -0.005187f, -0.005197f, -0.006962f, -0.007323f, 0.002239f, -0.004849f, 0.006487f, -0.008083f, -0.001095f, 0.003571f, 0.003399f, 0.002995f, -0.012535f, -0.002248f, -0.006950f, -0.001206f, -0.002913f, -0.007645f, -0.000150f, 0.009136f, 0.002787f, 0.004441f, 0.004208f, 0.004942f, 0.000638f, 0.006199f, 0.003905f, 0.006919f, -0.003902f, 0.004621f, -0.002260f, 0.003195f, 0.000377f, -0.006372f, 0.007473f, 0.008447f, -0.004511f, -0.005655f, 0.002503f, 0.007764f, 0.001863f, 0.002081f, -0.002584f, -0.000500f, 0.004219f, 0.002638f, 0.000691f, -0.001526f, 0.000527f, 0.003561f, 0.004336f, -0.000514f, -0.006734f, -0.004119f, -0.002262f, -0.002863f, 0.001577f, -0.000635f, -0.000604f, 0.003215f, -0.002353f, -0.000782f, -0.000004f, 0.000574f, -0.001592f, -0.000450f, + 0.000248f, -0.002548f, -0.000285f, 0.003150f, -0.000457f, 0.001670f, -0.002266f, 0.001322f, 0.000676f, -0.000147f, -0.001487f, -0.018928f, -0.004928f, -0.008558f, 0.006287f, -0.017748f, 0.003915f, -0.007845f, -0.004091f, 0.002472f, 0.000382f, 0.001939f, 0.002678f, 0.001955f, 0.007714f, -0.003460f, 0.000832f, -0.000820f, -0.009324f, 0.006849f, 0.011543f, -0.009417f, -0.008773f, 0.006641f, 0.001745f, 0.008208f, 0.002641f, 0.011042f, -0.001515f, 0.003689f, -0.005847f, -0.001836f, 0.011330f, 0.000855f, -0.007352f, -0.009148f, -0.009806f, 0.000366f, 0.008163f, 0.004082f, -0.000031f, 0.009213f, 0.007406f, 0.000239f, -0.007552f, 0.011795f, 0.003047f, 0.009084f, 0.009310f, -0.001678f, 0.005940f, 0.006940f, -0.000826f, 0.004079f, 0.004814f, -0.004662f, 0.000973f, -0.001483f, 0.004576f, -0.010464f, -0.006643f, 0.003305f, -0.006423f, -0.002540f, 0.008947f, -0.003669f, 0.004925f, -0.002149f, -0.013989f, 0.002307f, -0.000047f, 0.007306f, -0.011518f, -0.006263f, 0.005237f, 0.001262f, -0.001088f, 0.002919f, -0.005418f, 0.001523f, 0.001408f, -0.001724f, -0.003408f, 0.004660f, 0.004311f, 0.002909f, + 0.000559f, -0.001836f, 0.001161f, -0.001376f, -0.002057f, 0.001493f, 0.001356f, -0.002876f, 0.002051f, -0.001636f, -0.001175f, 0.002470f, -0.001801f, -0.003810f, -0.000036f, -0.001462f, -0.000438f, -0.001840f, -0.001930f, 0.000718f, -0.000126f, 0.001073f, 0.000010f, 0.001052f, -0.002741f, 0.000733f, -0.000785f, 0.011838f, 0.012589f, 0.005475f, 0.009323f, 0.007204f, 0.012609f, 0.014277f, -0.005282f, -0.001580f, 0.004865f, -0.014349f, -0.000434f, -0.004758f, -0.002684f, 0.006509f, -0.008283f, -0.001015f, 0.010632f, 0.001916f, 0.006832f, -0.003397f, -0.002406f, -0.003605f, -0.013406f, -0.002244f, 0.000963f, 0.007076f, -0.002115f, 0.012207f, 0.004874f, -0.002153f, 0.004945f, 0.002501f, 0.006343f, -0.004587f, -0.000899f, 0.014261f, -0.001862f, 0.013472f, 0.006391f, -0.005964f, 0.001470f, 0.011860f, 0.006246f, -0.007882f, 0.010897f, -0.003011f, 0.000786f, 0.000528f, -0.002136f, 0.002046f, 0.001258f, -0.009841f, 0.006309f, 0.004538f, -0.000793f, 0.000321f, -0.002135f, -0.008892f, 0.000063f, 0.004946f, -0.000961f, -0.001078f, -0.005912f, -0.013059f, -0.004424f, 0.004816f, 0.010987f, -0.016641f, + -0.008804f, 0.003075f, -0.007197f, 0.004225f, -0.000284f, -0.000107f, -0.009944f, -0.007615f, -0.004390f, -0.006520f, -0.003153f, 0.000340f, 0.001175f, -0.002355f, 0.003818f, 0.002971f, 0.000666f, 0.002737f, -0.002987f, -0.001150f, 0.000127f, -0.004500f, -0.000929f, 0.000420f, -0.005629f, 0.002361f, 0.001422f, -0.001111f, 0.000216f, 0.001164f, 0.002779f, 0.000286f, 0.000434f, 0.000027f, -0.002716f, -0.000370f, -0.000789f, 0.002008f, 0.001452f, 0.002755f, -0.001919f, -0.000451f, 0.017550f, 0.018660f, -0.003731f, -0.007814f, -0.008544f, 0.017892f, -0.015523f, 0.000429f, -0.002535f, -0.007232f, -0.009829f, 0.003499f, -0.002703f, -0.013381f, -0.016289f, 0.000623f, -0.001227f, -0.008505f, 0.003079f, 0.004519f, -0.005990f, -0.009019f, -0.008420f, 0.011899f, -0.012842f, -0.001549f, -0.015007f, 0.000178f, 0.008354f, 0.002850f, 0.001430f, -0.008414f, -0.008095f, 0.007367f, -0.005686f, -0.008600f, 0.001069f, -0.003129f, 0.005266f, 0.000107f, 0.002129f, -0.008577f, -0.003169f, -0.002419f, 0.008238f, 0.005646f, 0.005730f, -0.016984f, 0.002690f, 0.004733f, 0.003883f, 0.004786f, -0.004839f, -0.003095f, + 0.000614f, 0.003440f, 0.006724f, -0.001167f, 0.004445f, -0.004918f, 0.013120f, -0.023793f, 0.008365f, 0.000674f, -0.012651f, -0.000548f, 0.014000f, -0.004239f, -0.006554f, -0.012761f, -0.004296f, 0.000987f, -0.003535f, -0.000021f, 0.005747f, 0.007296f, 0.006110f, -0.001816f, -0.000999f, -0.007513f, -0.001521f, -0.001933f, -0.003768f, 0.001027f, -0.001524f, -0.001500f, 0.003061f, -0.003809f, -0.001744f, 0.003647f, -0.001816f, 0.002349f, -0.000547f, -0.001530f, -0.001306f, -0.001030f, -0.005480f, -0.003454f, 0.002405f, 0.002673f, -0.002594f, -0.002131f, -0.001761f, 0.001999f, -0.001283f, -0.000813f, -0.002143f, 0.001383f, 0.001514f, -0.002599f, 0.001043f, -0.000396f, -0.002326f, -0.000590f, -0.001311f, 0.001473f, -0.000764f, 0.002209f, 0.003191f, -0.001504f, -0.008330f, -0.026326f, 0.004799f, -0.012000f, 0.002628f, 0.002208f, -0.001526f, 0.018693f, 0.001033f, -0.011946f, 0.015963f, 0.007702f, 0.005483f, -0.002390f, 0.003311f, -0.004851f, 0.012519f, -0.002067f, 0.001430f, 0.018863f, 0.018407f, 0.007887f, 0.008434f, 0.008119f, 0.009168f, 0.006130f, -0.018177f, -0.005666f, -0.000245f, -0.004767f, + -0.015469f, -0.001691f, -0.003661f, -0.004074f, -0.008305f, -0.000145f, -0.002431f, 0.013332f, -0.004263f, 0.023364f, -0.000130f, 0.001986f, -0.004316f, -0.003363f, 0.000189f, -0.000654f, -0.001858f, -0.004064f, -0.002725f, -0.011422f, 0.002798f, 0.001894f, -0.001353f, -0.005895f, 0.008004f, 0.005939f, 0.006940f, -0.002408f, -0.004997f, 0.000160f, 0.006051f, 0.006561f, -0.005244f, -0.014919f, -0.007617f, 0.001642f, 0.012478f, -0.001693f, 0.010205f, -0.008062f, -0.011733f, 0.008808f, -0.004091f, -0.009620f, 0.005629f, 0.005885f, -0.010799f, -0.008524f, -0.011884f, -0.003924f, -0.004079f, 0.006872f, -0.003701f, 0.002117f, -0.000741f, 0.004595f, 0.002846f, 0.002562f, -0.002223f, -0.001235f, -0.006171f, -0.003076f, -0.001628f, -0.000036f, 0.002777f, -0.000490f, 0.000217f, 0.005191f, 0.002041f, -0.000211f, 0.000082f, 0.003352f, -0.002147f, 0.000938f, 0.000985f, -0.001704f, 0.002028f, -0.001505f, 0.001347f, 0.001073f, 0.001503f, -0.000891f, -0.003818f, 0.003790f, 0.000518f, -0.006386f, 0.009486f, -0.011268f, -0.012726f, 0.006230f, -0.003780f, -0.000851f, -0.006769f, -0.003562f, 0.006240f, 0.009336f, + 0.004576f, -0.001851f, 0.001214f, -0.000825f, -0.002266f, -0.008402f, 0.002755f, -0.023090f, -0.006940f, -0.007166f, 0.006295f, 0.008296f, 0.000520f, 0.004264f, -0.014696f, 0.004261f, 0.002098f, 0.004246f, -0.013261f, 0.025070f, -0.001257f, 0.004902f, 0.003114f, -0.011411f, 0.001713f, -0.016490f, 0.010653f, -0.003275f, -0.014187f, 0.003142f, 0.000947f, -0.006742f, 0.000639f, 0.001849f, 0.010978f, 0.020296f, 0.008528f, -0.003731f, 0.006350f, 0.008524f, -0.018719f, -0.006519f, -0.008641f, 0.005494f, 0.004137f, -0.002772f, 0.002828f, 0.006797f, 0.004008f, 0.008665f, 0.015472f, 0.000687f, -0.005919f, -0.001275f, -0.000782f, 0.012571f, -0.008923f, 0.000375f, 0.005533f, 0.016842f, -0.000056f, -0.010655f, -0.010838f, -0.000619f, -0.013285f, -0.001456f, 0.004869f, 0.020560f, 0.017296f, -0.001695f, -0.009370f, 0.007789f, 0.000430f, 0.002511f, 0.001760f, -0.000364f, 0.002427f, -0.000373f, -0.002684f, 0.002541f, 0.002776f, -0.002524f, 0.003940f, 0.004106f, 0.003543f, -0.000729f, -0.003120f, 0.002685f, 0.003138f, -0.000204f, 0.000834f, -0.002200f, 0.000260f, -0.000224f, 0.004614f, 0.002056f, + 0.002826f, 0.002611f, 0.000597f, 0.001856f, -0.000167f, 0.002183f, 0.004109f, 0.001211f, 0.001601f, 0.003359f, 0.003992f, -0.001661f, -0.001188f, 0.001316f, 0.001082f, 0.003449f, 0.004712f, -0.002115f, -0.024209f, -0.006664f, -0.008963f, 0.010318f, 0.000353f, -0.005046f, -0.031130f, -0.004168f, -0.004184f, 0.012836f, 0.030796f, -0.008939f, 0.020678f, 0.003494f, -0.018251f, -0.018685f, 0.003206f, 0.004661f, -0.010625f, 0.011598f, -0.008408f, 0.009330f, -0.011631f, 0.005534f, 0.003961f, -0.011100f, -0.009315f, -0.007159f, 0.003622f, 0.011974f, -0.015763f, 0.000500f, -0.016574f, -0.001011f, -0.006333f, 0.003940f, 0.012019f, 0.001177f, -0.005272f, -0.004714f, 0.013009f, -0.000136f, 0.019856f, 0.006017f, -0.007562f, -0.007324f, -0.005823f, 0.002748f, 0.012434f, -0.000363f, 0.020647f, -0.036981f, -0.027258f, -0.022114f, -0.005158f, -0.018880f, 0.001150f, -0.007177f, 0.006606f, 0.016634f, 0.002934f, 0.006816f, 0.010665f, 0.017611f, 0.009037f, 0.002593f, -0.012309f, -0.030645f, -0.032251f, 0.017140f, 0.001081f, 0.021790f, -0.015700f, -0.011363f, 0.009511f, -0.022722f, 0.000354f, -0.008200f, + -0.000949f, -0.014703f, 0.000475f, 0.004728f, 0.013063f, 0.002244f, 0.002026f, -0.004338f, 0.004639f, -0.001101f, 0.001460f, 0.003537f, 0.005849f, 0.007533f, -0.002197f, -0.003367f, 0.005471f, 0.002685f, -0.002248f, -0.004194f, 0.000728f, -0.000824f, -0.000615f, -0.001865f, 0.000737f, -0.000093f, -0.002327f, -0.000901f, 0.002162f, 0.003995f, 0.003195f, 0.002694f, 0.001351f, -0.009518f, -0.005291f, -0.003740f, -0.003471f, 0.004865f, -0.000926f, -0.001715f, -0.000107f, 0.001267f, 0.000218f, -0.000331f, 0.014418f, 0.006586f, -0.011848f, -0.000121f, 0.027632f, 0.023795f, -0.002388f, -0.020205f, -0.034627f, -0.003735f, -0.012294f, 0.012501f, -0.010527f, -0.009966f, -0.039191f, -0.016538f, -0.035127f, 0.013069f, -0.001360f, -0.008326f, 0.009083f, -0.001043f, -0.000009f, 0.002707f, -0.011429f, 0.001167f, -0.013097f, -0.002111f, 0.007596f, 0.005994f, -0.013358f, 0.004903f, 0.013177f, 0.021989f, -0.003530f, -0.002883f, -0.007488f, 0.001409f, 0.011097f, 0.016250f, -0.002541f, 0.002543f, -0.003701f, -0.002623f, 0.018927f, 0.014107f, 0.000326f, 0.014545f, 0.003929f, -0.017467f, 0.003090f, -0.001615f, + 0.022565f, 0.009072f, 0.002632f, 0.011163f, 0.014554f, 0.004230f, -0.013261f, -0.022139f, -0.005392f, 0.004804f, 0.011713f, 0.006261f, 0.000498f, 0.004821f, 0.017435f, 0.004046f, 0.005500f, 0.008294f, 0.004504f, -0.011221f, -0.013106f, -0.011021f, -0.012952f, -0.011478f, 0.019401f, 0.002910f, 0.014921f, -0.013211f, -0.012048f, -0.002130f, 0.012423f, -0.007810f, 0.006490f, 0.004016f, 0.001749f, -0.006618f, -0.004564f, -0.006107f, -0.004547f, -0.006981f, 0.002548f, 0.002415f, -0.002229f, 0.004788f, -0.003369f, 0.002316f, -0.001536f, 0.000626f, 0.001836f, -0.006178f, -0.004207f, -0.006202f, -0.004389f, -0.007582f, -0.002516f, -0.006272f, -0.003362f, -0.003595f, -0.005165f, -0.000221f, 0.005257f, 0.001914f, 0.002005f, -0.001907f, -0.000866f, -0.000610f, -0.001654f, 0.004428f, -0.002385f, -0.001094f, -0.001670f, 0.048651f, 0.010870f, -0.015223f, 0.008893f, -0.008933f, -0.028773f, -0.006020f, -0.028223f, -0.015717f, 0.014866f, 0.019437f, 0.007742f, 0.003901f, 0.001830f, 0.003503f, 0.018749f, -0.013297f, 0.026455f, -0.017087f, -0.017123f, 0.020899f, 0.009492f, -0.033920f, 0.014984f, 0.008594f, + 0.010910f, 0.022280f, 0.011182f, 0.016573f, -0.000955f, 0.008988f, -0.005131f, 0.014162f, 0.003892f, 0.003043f, 0.009626f, -0.019064f, -0.010144f, -0.005828f, 0.012397f, 0.005352f, 0.004556f, 0.009764f, 0.003001f, 0.003498f, -0.017078f, 0.000228f, 0.018839f, -0.003292f, 0.002476f, 0.002423f, 0.002585f, 0.022398f, 0.008783f, 0.030111f, 0.007116f, -0.004203f, 0.028740f, -0.024489f, -0.003008f, -0.003803f, -0.009617f, -0.002155f, 0.006175f, 0.028395f, 0.002910f, -0.005914f, -0.010805f, 0.005949f, -0.011372f, -0.004847f, -0.007250f, -0.015395f, -0.002293f, 0.004252f, 0.024408f, -0.001905f, -0.023198f, -0.006368f, -0.013850f, -0.006934f, 0.017101f, 0.013753f, 0.016030f, -0.012496f, 0.002806f, -0.013916f, -0.001930f, -0.004645f, -0.008268f, -0.004620f, -0.011409f, -0.006641f, -0.001987f, -0.004843f, -0.015036f, -0.005904f, -0.004181f, -0.002985f, -0.003259f, -0.005229f, 0.000862f, -0.002457f, -0.011796f, -0.000508f, -0.005582f, -0.003350f, -0.000818f, -0.000040f, 0.002305f, -0.000294f, 0.005569f, 0.005372f, 0.001103f, 0.001035f, -0.003659f, -0.003278f, -0.000714f, -0.003979f, 0.005689f, 0.003355f, + 0.005351f, 0.004971f, 0.002282f, 0.006932f, 0.004723f, 0.001792f, 0.003364f, -0.000872f, -0.002643f, 0.004917f, 0.007113f, -0.017574f, -0.027090f, -0.009782f, -0.026673f, 0.019154f, -0.022758f, -0.016750f, -0.013403f, 0.012107f, 0.030517f, -0.030965f, -0.010993f, -0.034898f, 0.009995f, 0.004870f, 0.003272f, -0.010026f, 0.002722f, 0.039288f, -0.020563f, -0.003452f, 0.014873f, 0.010161f, 0.007777f, 0.013820f, 0.009198f, -0.012926f, -0.021847f, -0.004082f, -0.012105f, -0.016485f, -0.020172f, 0.000321f, -0.004716f, 0.004963f, 0.025951f, 0.016437f, -0.014597f, -0.007881f, -0.001647f, -0.007535f, 0.006340f, 0.049375f, -0.016779f, 0.034442f, 0.010770f, 0.005787f, -0.002279f, -0.005586f, 0.005803f, -0.018916f, 0.009027f, 0.026807f, 0.001109f, 0.004280f, 0.021429f, 0.013922f, 0.008275f, -0.018095f, 0.015102f, -0.010792f, -0.016150f, -0.043613f, -0.013757f, 0.028330f, -0.016143f, 0.007341f, -0.030728f, 0.021962f, -0.011591f, -0.012098f, 0.019156f, -0.030605f, -0.022659f, 0.034666f, -0.024742f, -0.023271f, 0.013878f, -0.015965f, 0.003197f, 0.000053f, 0.009897f, -0.025103f, 0.007872f, 0.000656f, + 0.025011f, -0.018635f, 0.006196f, -0.002647f, -0.014181f, 0.018557f, 0.003744f, -0.015448f, -0.011216f, -0.010644f, 0.001621f, -0.000041f, -0.007789f, 0.000208f, 0.009674f, -0.000812f, 0.006854f, 0.007720f, 0.006119f, -0.013909f, 0.007725f, 0.007086f, 0.011161f, -0.000282f, 0.000820f, -0.010114f, -0.004044f, -0.004977f, -0.005248f, 0.002339f, -0.001170f, 0.006474f, -0.009203f, -0.005801f, 0.003467f, -0.008899f, -0.007508f, -0.009480f, 0.003260f, -0.019745f, -0.014656f, -0.002022f, 0.022463f, -0.010638f, 0.039454f, 0.036689f, 0.007252f, 0.011746f, -0.021274f, 0.002635f, -0.017216f, 0.027550f, -0.005474f, 0.008119f, -0.013116f, -0.008512f, 0.004736f, 0.003722f, -0.012587f, 0.021124f, -0.005921f, 0.004488f, 0.007933f, -0.013824f, 0.005295f, -0.017640f, 0.000138f, 0.010055f, 0.012094f, 0.000297f, 0.015971f, 0.020084f, -0.001431f, -0.037571f, -0.006252f, -0.011104f, 0.026988f, -0.022690f, -0.028133f, -0.020105f, -0.013383f, 0.003943f, -0.015896f, -0.012530f, -0.007949f, -0.002281f, 0.005057f, -0.055066f, 0.034904f, 0.027164f, 0.039783f, -0.012568f, 0.006490f, 0.026628f, -0.025285f, -0.023496f, + 0.004793f, 0.017421f, 0.011550f, -0.002934f, 0.005499f, -0.013861f, -0.016440f, -0.021114f, -0.006070f, 0.073357f, 0.006049f, -0.040546f, -0.007108f, -0.022178f, 0.014143f, 0.011037f, -0.025015f, 0.005483f, -0.007558f, 0.002172f, -0.012251f, 0.015776f, 0.016165f, -0.002281f, -0.007928f, -0.009510f, -0.031725f, 0.009731f, 0.005343f, -0.001168f, 0.013384f, -0.006246f, 0.002314f, 0.005246f, -0.014930f, 0.005937f, 0.009264f, 0.021054f, 0.011340f, 0.001452f, -0.017767f, 0.000283f, 0.016642f, 0.001120f, 0.000228f, 0.012445f, 0.000489f, 0.004365f, 0.012343f, 0.010434f, -0.001632f, 0.005797f, 0.010493f, 0.009655f, -0.004270f, 0.004336f, 0.012558f, 0.015283f, 0.011404f, -0.000133f, -0.007659f, -0.001604f, 0.000618f, 0.009656f, 0.000247f, -0.002498f, 0.000915f, 0.003683f, -0.005639f, 0.003708f, 0.006155f, -0.005543f, 0.004047f, -0.013837f, -0.001459f, -0.009883f, -0.021686f, -0.039775f, 0.002555f, -0.033114f, 0.015209f, 0.006154f, -0.027942f, 0.016051f, 0.016939f, 0.025320f, 0.006393f, 0.010424f, -0.028981f, 0.000113f, -0.006369f, 0.026987f, 0.011504f, 0.001833f, 0.023858f, 0.028081f, + -0.004047f, -0.012465f, 0.002383f, 0.034465f, -0.022765f, -0.016783f, 0.016662f, 0.010166f, -0.023152f, -0.004327f, -0.021484f, 0.039308f, -0.033771f, 0.009794f, 0.019790f, -0.011824f, 0.018122f, 0.007423f, -0.010217f, -0.009422f, -0.010942f, -0.015149f, 0.020848f, 0.029759f, 0.005018f, -0.021793f, 0.001512f, -0.024137f, -0.010235f, 0.016644f, -0.003882f, -0.011722f, -0.009848f, 0.004666f, -0.033709f, 0.001520f, -0.004293f, -0.018438f, 0.024819f, -0.024774f, -0.002564f, -0.005334f, -0.019568f, 0.020300f, -0.002439f, 0.011938f, -0.010388f, -0.001493f, -0.002005f, -0.011532f, 0.008340f, -0.010597f, -0.002941f, -0.010432f, 0.028789f, 0.013185f, -0.036158f, -0.007327f, -0.059001f, 0.033936f, -0.001009f, -0.025795f, 0.022561f, 0.002919f, 0.002556f, 0.008963f, -0.000510f, 0.013826f, 0.015521f, 0.004068f, -0.005206f, 0.009411f, 0.016749f, -0.009773f, -0.007184f, 0.007511f, 0.001607f, 0.004682f, 0.004252f, 0.009291f, 0.011090f, -0.007560f, 0.005324f, 0.004117f, -0.010501f, -0.008418f, 0.006674f, 0.001891f, -0.001971f, -0.006081f, -0.006776f, -0.010117f, 0.009307f, 0.010919f, 0.000788f, -0.006670f, + -0.022929f, 0.000751f, 0.000956f, 0.007416f, -0.015109f, 0.001827f, 0.010092f, -0.005824f, 0.011829f, 0.006097f, -0.001913f, 0.003852f, 0.005930f, 0.000891f, 0.001459f, 0.004163f, 0.007508f, -0.007294f, -0.001564f, -0.004139f, 0.002026f, 0.035062f, 0.001702f, -0.027346f, -0.011232f, 0.015561f, 0.026170f, 0.027285f, 0.001356f, -0.006884f, 0.039247f, 0.016538f, 0.043580f, 0.004870f, 0.004021f, -0.021223f, -0.008218f, -0.012753f, 0.011883f, 0.005843f, 0.023727f, -0.027209f, 0.002160f, -0.016369f, 0.014686f, -0.023649f, 0.009167f, 0.025287f, -0.003531f, -0.001217f, -0.013102f, 0.003200f, -0.013191f, -0.046633f, 0.006675f, -0.007555f, 0.003541f, -0.021090f, -0.004208f, 0.017569f, 0.035195f, -0.004086f, -0.012343f, 0.019826f, 0.009861f, 0.004477f, 0.024323f, 0.007887f, -0.012503f, -0.006603f, 0.015812f, -0.002608f, 0.014458f, -0.017359f, -0.014740f, 0.004748f, -0.013834f, -0.027563f, -0.012214f, -0.031328f, -0.006583f, 0.009929f, -0.023937f, -0.003949f, -0.027540f, -0.012646f, 0.000104f, 0.010487f, -0.032881f, 0.014051f, 0.002766f, -0.020210f, 0.025030f, -0.009283f, 0.006851f, 0.043360f, + 0.049926f, 0.002719f, 0.017751f, 0.035818f, 0.043701f, 0.042600f, -0.003948f, -0.029198f, -0.043727f, -0.016485f, -0.028891f, 0.027079f, -0.005641f, -0.013490f, 0.007348f, -0.001203f, 0.003301f, -0.001016f, -0.012758f, 0.013505f, 0.004244f, 0.004750f, 0.001303f, 0.018427f, -0.010309f, -0.000708f, -0.005534f, 0.012624f, -0.011910f, -0.005701f, -0.001016f, 0.018177f, -0.004597f, 0.010774f, 0.015692f, -0.014670f, -0.002759f, -0.006500f, -0.015752f, -0.006999f, -0.003407f, 0.006391f, 0.000817f, 0.021355f, 0.006202f, 0.014278f, -0.001148f, -0.014633f, 0.004196f, 0.003381f, 0.000147f, 0.059584f, 0.068301f, 0.003588f, 0.021854f, 0.020951f, -0.002924f, -0.049166f, -0.001352f, -0.001984f, -0.018702f, 0.013850f, 0.012795f, -0.026779f, 0.014510f, 0.018711f, 0.003019f, -0.007151f, 0.010095f, -0.006864f, 0.034710f, -0.006009f, -0.016396f, 0.000188f, 0.007791f, -0.003319f, -0.002423f, -0.000669f, -0.055621f, 0.015973f, -0.001411f, -0.038377f, -0.016052f, 0.006581f, -0.003770f, -0.026173f, 0.008900f, -0.030882f, -0.002970f, 0.002975f, -0.049669f, -0.008909f, 0.021036f, -0.015941f, 0.002102f, 0.031151f, + 0.018918f, 0.023814f, 0.007215f, -0.013509f, -0.023335f, 0.023697f, -0.012498f, 0.013246f, -0.022196f, -0.011535f, 0.015525f, 0.026617f, 0.003661f, 0.031896f, -0.021684f, 0.027584f, -0.023666f, -0.028255f, -0.020401f, 0.027489f, 0.028575f, -0.026723f, 0.013516f, -0.073666f, -0.007009f, 0.021558f, 0.006551f, -0.011624f, -0.029628f, 0.013431f, -0.041759f, 0.006612f, -0.021684f, 0.019579f, -0.032332f, -0.020507f, 0.031783f, 0.000645f, 0.015812f, 0.003570f, 0.013735f, -0.007303f, 0.005475f, -0.003718f, -0.024336f, -0.004423f, -0.011539f, 0.007387f, -0.008091f, 0.004183f, 0.000597f, 0.003910f, 0.001563f, -0.005368f, -0.007665f, 0.000934f, -0.015569f, 0.005337f, 0.003928f, 0.008641f, -0.010126f, 0.008582f, 0.007661f, 0.005235f, 0.006525f, 0.005026f, -0.010873f, 0.001028f, 0.004650f, -0.007796f, 0.013528f, -0.001336f, -0.005863f, -0.008061f, -0.000535f, 0.001175f, 0.006175f, -0.005154f, 0.005820f, -0.004979f, 0.014189f, 0.006393f, -0.012896f, -0.003283f, -0.003610f, -0.005892f, -0.005762f, -0.012997f, -0.054303f, 0.004293f, 0.066522f, -0.044869f, -0.004548f, -0.003604f, 0.003251f, -0.017563f, + 0.008234f, -0.028191f, -0.029487f, -0.009318f, -0.008272f, 0.007368f, -0.007643f, 0.015517f, -0.022179f, 0.001033f, 0.042685f, -0.034921f, -0.031390f, -0.007233f, 0.037316f, 0.005561f, -0.047397f, 0.020355f, -0.017774f, -0.019845f, 0.004383f, 0.065039f, -0.036719f, -0.020008f, 0.045790f, 0.034431f, 0.002673f, -0.018768f, 0.000969f, -0.006798f, -0.014933f, 0.013477f, 0.011743f, -0.007561f, -0.037642f, 0.048129f, 0.022177f, 0.009337f, -0.051137f, -0.007504f, 0.015503f, 0.017871f, -0.006617f, 0.027013f, -0.004608f, 0.009368f, -0.011950f, -0.030352f, 0.019666f, -0.021581f, 0.012818f, 0.007069f, -0.027130f, 0.050960f, 0.007506f, 0.036773f, 0.036311f, 0.006797f, -0.055356f, -0.010298f, 0.000232f, -0.021603f, -0.011384f, 0.002351f, -0.002048f, 0.024185f, 0.044666f, -0.012725f, -0.004689f, -0.019573f, -0.009153f, 0.018945f, -0.012900f, 0.011119f, 0.033137f, -0.028964f, 0.032936f, -0.006268f, 0.009696f, -0.012377f, -0.007065f, -0.010353f, 0.001147f, 0.006456f, 0.007045f, -0.005312f, -0.000107f, 0.007827f, 0.004032f, 0.017804f, 0.007956f, -0.008633f, 0.000467f, 0.001829f, 0.015739f, -0.008659f, + 0.004379f, 0.007616f, 0.002217f, -0.000419f, 0.000284f, -0.020699f, 0.009990f, -0.007502f, 0.009777f, 0.013294f, 0.001485f, -0.001946f, 0.006395f, -0.000524f, 0.004833f, 0.001888f, -0.002447f, -0.007578f, -0.008119f, 0.015709f, 0.002400f, -0.003532f, 0.004112f, -0.009600f, -0.002084f, 0.015969f, 0.020920f, 0.002801f, -0.019111f, -0.096106f, 0.006381f, -0.025105f, 0.003383f, 0.048059f, 0.004665f, -0.009314f, 0.008832f, 0.001823f, -0.032558f, -0.035242f, -0.031654f, -0.030478f, 0.039686f, -0.007966f, 0.047354f, 0.004170f, -0.044618f, -0.001598f, 0.004987f, 0.038249f, 0.007595f, -0.006213f, -0.007553f, 0.010907f, -0.024005f, -0.009244f, 0.042385f, -0.008657f, -0.054924f, -0.042017f, 0.025143f, -0.005484f, -0.011379f, 0.012612f, -0.003898f, -0.028346f, 0.008584f, 0.016612f, 0.038160f, -0.007703f, -0.031601f, 0.000411f, -0.039869f, 0.015334f, 0.045217f, -0.007253f, -0.055414f, 0.017437f, -0.000601f, 0.003100f, 0.013399f, -0.017485f, 0.034157f, 0.002543f, -0.022994f, 0.017885f, -0.012438f, -0.007723f, 0.048789f, -0.024998f, -0.008364f, -0.008218f, 0.030746f, 0.012329f, -0.053919f, 0.027347f, + -0.043448f, -0.010391f, -0.023436f, 0.005586f, -0.014288f, -0.013201f, -0.004475f, 0.024752f, -0.008039f, -0.015287f, 0.029327f, -0.017115f, 0.030104f, -0.000180f, -0.015891f, -0.009590f, 0.007494f, 0.008263f, 0.005971f, -0.018110f, -0.005981f, 0.004426f, -0.001009f, -0.011854f, 0.000268f, 0.011145f, 0.017183f, 0.007141f, 0.008840f, 0.001385f, 0.016889f, -0.009579f, 0.005485f, 0.013339f, -0.005075f, 0.001660f, 0.005444f, -0.003355f, 0.002662f, 0.005275f, -0.016553f, 0.013965f, 0.005952f, -0.016664f, -0.013655f, 0.000954f, -0.019594f, 0.001693f, -0.014443f, 0.018680f, -0.033807f, -0.000084f, -0.007162f, 0.003550f, -0.008807f, 0.010540f, -0.005643f, 0.004907f, 0.003774f, -0.006969f, 0.001521f, -0.046782f, 0.009465f, 0.077578f, 0.050308f, 0.023197f, -0.038584f, 0.028911f, 0.036258f, 0.053986f, 0.025861f, 0.006469f, 0.001745f, 0.033851f, 0.058094f, -0.013059f, -0.007278f, 0.033083f, -0.065419f, 0.023821f, 0.058013f, -0.011993f, -0.020354f, 0.015179f, 0.044992f, 0.036463f, -0.024537f, -0.041627f, -0.002658f, 0.021028f, -0.007276f, 0.005105f, 0.000456f, 0.048943f, -0.028140f, 0.031368f, + 0.047077f, -0.018891f, -0.005947f, 0.033427f, -0.005235f, 0.117120f, -0.049336f, 0.021110f, 0.079906f, -0.046128f, 0.014885f, 0.005384f, -0.065219f, -0.002000f, 0.011884f, -0.028642f, 0.063305f, 0.004817f, -0.008981f, 0.004949f, -0.026690f, 0.087139f, 0.023777f, -0.069845f, 0.067134f, -0.028175f, 0.002239f, 0.020670f, 0.024767f, 0.044711f, 0.021541f, -0.012100f, -0.043930f, -0.058753f, -0.022323f, -0.023568f, -0.004314f, -0.018052f, 0.036643f, -0.022490f, -0.039221f, 0.004325f, 0.010463f, 0.007895f, 0.013881f, -0.022074f, -0.021783f, -0.013075f, -0.014518f, -0.046341f, -0.019886f, -0.015806f, -0.032308f, -0.015417f, 0.011115f, -0.013647f, -0.030331f, -0.001483f, 0.011311f, 0.020095f, -0.005102f, 0.009427f, 0.021572f, -0.001313f, -0.015268f, -0.000977f, -0.009417f, 0.012157f, 0.017104f, -0.024594f, 0.021186f, -0.012772f, -0.000141f, 0.003182f, -0.011808f, 0.022619f, 0.008325f, -0.031921f, 0.019175f, 0.002913f, -0.011770f, 0.023467f, -0.027234f, 0.010678f, -0.005480f, 0.011438f, -0.006867f, -0.007510f, 0.003977f, -0.004443f, -0.003219f, 0.008219f, -0.005357f, -0.018319f, 0.007950f, -0.001757f, + 0.005034f, -0.000857f, 0.014735f, -0.008417f, 0.018770f, -0.089720f, 0.052093f, 0.002762f, 0.031334f, 0.052668f, -0.086802f, 0.020129f, 0.044080f, 0.010447f, 0.032792f, -0.032907f, 0.036139f, 0.011023f, -0.034265f, 0.000870f, -0.021739f, -0.062908f, 0.034339f, 0.020076f, 0.057471f, -0.031646f, -0.042772f, -0.014461f, 0.013188f, -0.008458f, -0.072123f, -0.035056f, 0.021673f, -0.005009f, 0.010354f, -0.029941f, -0.009765f, 0.024205f, -0.020602f, -0.009765f, -0.031003f, -0.006843f, 0.010784f, -0.033611f, 0.003208f, -0.073798f, -0.061360f, 0.019169f, -0.063811f, 0.005835f, -0.066741f, -0.046224f, -0.032383f, 0.031530f, 0.061607f, 0.076580f, -0.018407f, 0.034192f, 0.041010f, 0.020311f, 0.017589f, -0.029324f, 0.084591f, 0.086858f, -0.059173f, 0.059284f, -0.046622f, 0.029963f, 0.060610f, 0.058142f, 0.070286f, 0.084470f, 0.059417f, -0.066753f, -0.047875f, -0.000240f, 0.001393f, 0.025599f, -0.016232f, -0.012625f, -0.040420f, -0.022001f, -0.059828f, 0.013344f, 0.049765f, -0.019948f, 0.012014f, 0.052471f, 0.024368f, -0.035509f, 0.039889f, -0.002218f, 0.013960f, -0.003673f, -0.007308f, 0.011834f, + -0.012838f, 0.018011f, 0.014790f, -0.013070f, -0.016315f, 0.015576f, -0.011178f, 0.000788f, 0.000293f, -0.001017f, 0.004196f, 0.001761f, -0.021647f, 0.020231f, -0.009284f, 0.009797f, 0.011319f, -0.007735f, 0.012208f, -0.015099f, -0.011399f, 0.010396f, -0.012458f, -0.015606f, -0.007148f, 0.006523f, -0.006351f, 0.004139f, -0.014465f, 0.000719f, 0.005134f, 0.013394f, 0.019625f, -0.004486f, 0.011003f, -0.012879f, -0.000115f, -0.002235f, 0.005867f, 0.004747f, -0.001298f, -0.009933f, -0.014258f, -0.003202f, 0.002949f, 0.111490f, -0.081596f, -0.041557f, 0.044010f, -0.026195f, 0.042048f, -0.032764f, -0.036484f, 0.012321f, -0.086280f, -0.003916f, 0.058095f, -0.014018f, 0.029888f, -0.049518f, -0.012112f, -0.019550f, 0.002031f, 0.061923f, 0.018793f, 0.013770f, -0.010978f, 0.034000f, 0.011012f, 0.084614f, 0.020893f, 0.049411f, 0.003603f, -0.038595f, -0.036431f, 0.049256f, -0.023843f, 0.022797f, -0.000377f, -0.063495f, 0.045910f, -0.056565f, 0.110040f, -0.081906f, 0.050138f, 0.044832f, -0.046933f, -0.039498f, -0.029090f, 0.040651f, -0.002975f, 0.042543f, -0.000405f, 0.005601f, -0.075036f, -0.040335f, + 0.017630f, -0.036885f, 0.012377f, -0.022465f, 0.022228f, 0.012610f, 0.057885f, -0.034237f, -0.011662f, -0.014557f, -0.028142f, 0.078355f, 0.014654f, 0.007451f, -0.072736f, -0.023529f, 0.039385f, 0.023233f, 0.025153f, 0.067895f, 0.043577f, 0.060053f, 0.069385f, -0.001920f, 0.030838f, -0.028678f, 0.092240f, 0.007034f, -0.014990f, 0.033651f, -0.007654f, 0.070748f, 0.001497f, -0.014106f, -0.014369f, 0.008584f, 0.049893f, -0.037547f, 0.025892f, -0.011862f, -0.003842f, 0.014871f, 0.010118f, 0.019470f, -0.011897f, 0.012727f, 0.023437f, -0.005946f, -0.008570f, 0.015848f, -0.002304f, -0.002312f, -0.001512f, 0.004374f, 0.002827f, 0.007712f, -0.016595f, 0.022253f, -0.012756f, -0.007051f, -0.003300f, 0.013674f, -0.018805f, 0.002093f, -0.013376f, 0.018642f, 0.033743f, -0.011029f, -0.008974f, -0.004277f, 0.023268f, 0.011477f, 0.024296f, -0.001751f, -0.013655f, 0.011161f, 0.011830f, -0.003249f, 0.011726f, 0.009112f, -0.032298f, 0.005258f, 0.037630f, -0.004786f, -0.017475f, -0.168673f, 0.117358f, -0.072873f, -0.050393f, 0.000942f, 0.024374f, 0.029908f, 0.005806f, -0.027250f, 0.091430f, 0.045894f, + 0.013079f, -0.045877f, 0.030231f, -0.001839f, 0.034317f, -0.043825f, -0.029734f, 0.023006f, 0.068435f, -0.078370f, 0.003543f, 0.025006f, 0.008647f, -0.019516f, -0.011203f, -0.010140f, 0.003478f, -0.004277f, 0.017971f, 0.085521f, 0.005870f, -0.039115f, 0.058064f, -0.013806f, -0.055471f, -0.072335f, 0.068901f, 0.022083f, -0.009198f, 0.025190f, 0.016177f, 0.056693f, -0.077104f, -0.008570f, -0.039061f, -0.011562f, 0.044573f, -0.033014f, 0.017558f, -0.038018f, 0.018466f, 0.117922f, 0.009255f, -0.068138f, -0.075726f, -0.005117f, 0.036497f, 0.035104f, -0.030193f, 0.006915f, 0.057857f, -0.024634f, -0.111212f, 0.063092f, -0.038180f, -0.063890f, 0.028085f, 0.105219f, -0.072802f, 0.052757f, 0.073947f, 0.024888f, -0.063614f, -0.053828f, -0.032592f, 0.026035f, 0.023271f, -0.022614f, 0.066375f, 0.031732f, -0.003940f, -0.002465f, 0.004183f, -0.055810f, -0.020890f, -0.039677f, 0.020328f, 0.017258f, 0.013334f, 0.017432f, 0.013743f, 0.040109f, -0.020176f, -0.010542f, 0.007979f, -0.000453f, -0.031267f, 0.026537f, -0.001037f, 0.016404f, -0.007708f, 0.012203f, -0.020096f, -0.006823f, -0.012070f, 0.018516f, + 0.003762f, 0.003316f, 0.000662f, 0.010897f, 0.029986f, -0.012443f, -0.056922f, 0.004049f, -0.028062f, -0.006132f, 0.017123f, -0.024768f, -0.015619f, 0.031762f, -0.030247f, -0.007396f, 0.000298f, 0.014903f, -0.032404f, 0.001652f, 0.096636f, 0.031811f, 0.006405f, -0.007079f, 0.015316f, 0.027199f, -0.008668f, 0.012693f, -0.014642f, -0.000130f, -0.011574f, 0.045396f, -0.050943f, -0.005713f, 0.030439f, -0.070737f, 0.022884f, -0.017254f, 0.005318f, -0.008271f, -0.019818f, 0.012661f, -0.005488f, -0.028799f, 0.077497f, -0.059145f, -0.016669f, 0.055055f, -0.035303f, -0.005377f, -0.011155f, 0.012132f, 0.054421f, 0.004262f, -0.053154f, 0.072841f, -0.039375f, 0.025975f, 0.045337f, 0.020248f, -0.016989f, 0.004054f, -0.040046f, 0.009814f, -0.024274f, -0.019017f, 0.097471f, -0.022623f, -0.038931f, 0.012746f, -0.018213f, 0.023202f, -0.015215f, 0.025473f, 0.062693f, -0.034464f, 0.020713f, 0.047983f, -0.056419f, 0.025863f, 0.030604f, 0.014075f, 0.038320f, -0.043705f, -0.011594f, 0.067090f, -0.046338f, -0.010156f, 0.019078f, -0.018720f, 0.063898f, -0.063503f, 0.010735f, 0.022947f, -0.029429f, 0.022321f, + 0.024381f, -0.060477f, 0.021473f, 0.051614f, -0.000627f, -0.015485f, -0.002504f, 0.033209f, -0.006926f, -0.056794f, 0.046124f, 0.021927f, -0.025035f, 0.009485f, -0.013827f, 0.020506f, -0.008061f, -0.025417f, 0.029873f, 0.001677f, -0.006581f, -0.022100f, 0.020739f, 0.003958f, -0.029528f, 0.010538f, 0.019684f, -0.004077f, -0.009706f, 0.004316f, 0.018192f, -0.002701f, -0.019021f, 0.019383f, 0.012625f, 0.002366f, -0.001022f, 0.016204f, 0.003059f, 0.005682f, -0.022599f, 0.028635f, -0.015836f, 0.030538f, -0.020172f, -0.054524f, -0.147181f, -0.231294f, 0.020945f, 0.221508f, 0.018094f, 0.501468f, 0.517584f, 0.257690f, 0.541846f, 0.361411f, -0.075113f, -0.007846f, -0.119368f, -0.435145f, -0.382049f, -0.236164f, -0.444638f, -0.347993f, -0.101312f, -0.218121f, -0.182698f, 0.064543f, 0.109132f, -0.053060f, 0.028390f, 0.097470f, -0.075438f, -0.044198f, 0.137321f, 0.121981f, 0.013769f, 0.136344f, 0.232754f, 0.077629f, 0.168272f, 0.318567f, 0.152791f, 0.080549f, 0.285316f, 0.238472f, 0.031470f, 0.171148f, 0.334363f, 0.065901f, 0.078398f, 0.270002f, 0.116056f, -0.029712f, 0.190685f, 0.179972f, + -0.017407f, 0.158795f, 0.205105f, -0.004030f, -0.151337f, -0.070891f, -0.354687f, -0.585406f, -0.520799f, -0.555260f, -0.847686f, -0.761529f, -0.712754f, -0.866665f, -0.842146f, -0.691112f, -0.623364f, -0.560944f, -0.325398f, -0.125972f, 0.108129f, 0.231861f, 0.445199f, 0.664580f, 0.725576f, 0.808445f, 1.055279f, 1.041443f, 0.818958f, 0.896082f, 0.791960f, 0.326676f, 0.356052f, 0.302264f, -0.014925f, -0.051910f, 0.085980f, -0.014508f, -0.138666f, 0.015322f, 0.089299f, -0.090931f, -0.037644f, 0.078497f, -0.045513f, -0.175918f, -0.059985f, -0.049696f, -0.253620f, -0.180658f, -0.050950f, -0.199779f, -0.225922f, -0.018709f, -0.082370f, -0.228703f, -0.111820f, -0.105584f, -0.320417f, -0.304100f, -0.276040f, -0.494536f, -0.534400f, -0.446440f, -0.475987f, -0.513380f, -0.369195f, -0.315711f, -0.274720f, -0.200429f, -0.110368f, -0.052702f, -0.018241f, 0.035477f, 0.168505f, 0.231976f, 0.360890f, 0.592151f, 0.670360f, 0.742139f, 0.867896f, 0.847782f, 0.745922f, 0.634404f, 0.443064f, 0.187333f, 0.042649f, -0.051795f, -0.149608f, -0.174977f, -0.172084f, -0.174410f, -0.178294f, -0.167344f, -0.152175f, -0.163871f, + -0.167602f, -0.159579f, -0.170680f, -0.186716f, -0.178502f, -0.172124f, -0.167763f, -0.147889f, -0.113005f, -0.085041f, -0.056165f, -0.017091f, 0.012072f, 0.025351f, 0.034693f, 0.036761f, 0.030277f, 0.026742f, 0.020038f, 0.004657f, -0.008119f, -0.019614f, -0.033713f, -0.038042f, -0.037754f, -0.041682f, -0.040862f, -0.034252f, -0.033299f, -0.029760f, -0.019591f, -0.019444f, -0.021303f, -0.012252f, -0.008425f, -0.012469f, -0.005068f, -0.002648f, -0.005738f, 0.007912f, 0.021724f, 0.026241f, 0.040905f, 0.056444f, 0.063633f, 0.073921f, 0.085406f, 0.087361f, 0.086370f, 0.090139f, 0.089726f, 0.084724f, 0.079591f, 0.072134f, 0.059702f, 0.047827f, 0.039147f, 0.027467f, 0.015083f, 0.003656f, -0.010385f, -0.027003f, -0.040921f, -0.054383f, -0.065144f, -0.074689f, -0.080398f, -0.080705f, -0.077920f, -0.070407f, -0.056879f, -0.044273f, -0.032880f, -0.022626f, -0.014521f, -0.011379f, -0.007523f, -0.004478f, -0.002896f, -0.001880f, 0.000469f, 0.001393f, 0.002397f, 0.003059f, 0.004354f, 0.004319f, 0.004711f, 0.004393f, 0.004343f, 0.003223f, 0.002655f, 0.001463f, 0.000762f} + }, + { + {0.003003f, 0.012045f, -0.006014f, 0.003344f, -0.001272f, 0.000710f, 0.000534f, -0.004838f, -0.005545f, 0.003623f, -0.001039f, -0.004410f, -0.005686f, -0.003469f, 0.004950f, -0.000507f, 0.006654f, 0.001417f, -0.008517f, -0.008752f, -0.006255f, 0.002568f, 0.002133f, 0.004553f, -0.000712f, 0.005209f, -0.004009f, -0.000726f, -0.009210f, -0.001402f, -0.001746f, 0.001903f, 0.003417f, 0.003472f, 0.006742f, -0.003367f, -0.004573f, 0.003674f, 0.002034f, -0.004418f, -0.004549f, 0.000217f, 0.003117f, 0.001516f, 0.007489f, -0.002859f, -0.002422f, 0.008533f, 0.002570f, 0.015993f, 0.006759f, -0.004487f, -0.000192f, -0.009843f, 0.000146f, -0.011220f, -0.000779f, -0.004198f, 0.007713f, 0.000817f, 0.004122f, 0.005676f, 0.003033f, 0.005442f, 0.003581f, 0.000770f, -0.009454f, -0.001050f, -0.004759f, 0.006486f, 0.009431f, -0.006649f, -0.004772f, -0.002862f, -0.003878f, -0.005019f, -0.008113f, -0.001837f, 0.002376f, -0.004762f, -0.003977f, -0.001681f, -0.006679f, 0.000765f, -0.001380f, -0.004484f, 0.001385f, 0.000234f, -0.000073f, -0.002211f, 0.000348f, 0.000412f, 0.002419f, -0.000691f, 0.001544f, -0.000824f, + 0.001103f, -0.000326f, -0.001540f, 0.000402f, 0.001888f, 0.000322f, -0.001789f, -0.001794f, -0.000235f, 0.003298f, 0.000714f, -0.000645f, 0.000480f, -0.000977f, -0.001119f, -0.018876f, -0.020171f, -0.001607f, -0.005782f, 0.000772f, -0.004373f, -0.001193f, 0.011231f, -0.002011f, 0.006040f, -0.002778f, -0.005392f, -0.007462f, 0.001374f, -0.001546f, -0.008903f, 0.010265f, 0.003089f, 0.000702f, 0.005478f, 0.005219f, 0.008471f, 0.005961f, -0.000558f, -0.006304f, 0.005886f, 0.001367f, -0.008490f, -0.003756f, -0.003827f, -0.002548f, 0.007596f, -0.002604f, -0.012948f, -0.004390f, -0.001478f, 0.002702f, -0.004023f, -0.008430f, 0.000278f, -0.000825f, 0.009793f, 0.001448f, -0.000076f, 0.003574f, -0.000222f, 0.013208f, -0.002277f, 0.001214f, -0.002918f, -0.005243f, 0.000007f, 0.005672f, 0.002566f, 0.001547f, 0.005362f, -0.004920f, -0.008195f, -0.005864f, -0.001180f, 0.001078f, -0.001913f, 0.000234f, -0.006152f, -0.001362f, 0.003223f, -0.001963f, 0.006416f, 0.003349f, -0.000364f, 0.001191f, -0.006019f, -0.005124f, 0.009955f, 0.002263f, 0.004239f, 0.002890f, -0.001774f, -0.000584f, -0.007568f, 0.000535f, + -0.004326f, 0.001859f, -0.001479f, 0.001928f, 0.002047f, 0.005858f, -0.000615f, -0.002044f, 0.000339f, 0.001257f, 0.000777f, 0.000214f, 0.000199f, -0.001761f, -0.001398f, 0.000715f, -0.000648f, -0.001516f, 0.002369f, -0.001199f, 0.001210f, 0.001816f, -0.001727f, -0.000505f, 0.001356f, -0.000512f, 0.002440f, -0.001471f, 0.001203f, -0.001170f, -0.000873f, -0.003062f, 0.002868f, 0.013007f, -0.000676f, 0.006658f, 0.003980f, 0.008894f, 0.010991f, -0.002518f, 0.000945f, 0.006720f, 0.006707f, 0.004437f, 0.012577f, 0.002528f, -0.004046f, 0.000536f, 0.011015f, 0.003853f, 0.005230f, 0.009503f, 0.012838f, 0.008435f, -0.002846f, -0.008758f, 0.006221f, 0.004207f, -0.005010f, -0.008454f, 0.000515f, -0.004932f, 0.002310f, 0.003251f, -0.003032f, -0.004209f, 0.004310f, 0.003377f, 0.007608f, -0.005034f, -0.010237f, -0.005145f, -0.004399f, -0.006842f, -0.002325f, -0.007817f, 0.004753f, -0.010707f, 0.004667f, 0.000943f, 0.002537f, -0.004741f, 0.010306f, 0.007851f, -0.007191f, 0.009042f, 0.003443f, -0.001294f, 0.003024f, -0.006486f, -0.002028f, 0.006203f, 0.002249f, 0.002628f, 0.001674f, 0.007405f, + 0.003043f, 0.009146f, -0.004401f, -0.000493f, -0.000525f, 0.003589f, 0.005334f, -0.002037f, 0.003573f, -0.004709f, 0.002486f, 0.003262f, 0.002947f, 0.010049f, 0.000447f, 0.007519f, 0.008424f, 0.004761f, -0.007518f, -0.001380f, -0.001099f, -0.001905f, 0.000767f, 0.004314f, -0.001662f, 0.000222f, -0.000220f, 0.000577f, 0.001634f, -0.001144f, 0.001907f, 0.003014f, -0.001933f, -0.000986f, 0.002882f, 0.000203f, 0.000141f, -0.000031f, -0.001461f, 0.000806f, -0.000645f, 0.000344f, 0.002273f, 0.003628f, 0.000284f, -0.000353f, 0.001907f, 0.001484f, 0.000698f, 0.000944f, 0.000823f, 0.000994f, 0.000019f, -0.000349f, 0.001715f, 0.002044f, -0.001601f, 0.001146f, -0.000469f, 0.001662f, 0.002041f, 0.000302f, 0.000511f, 0.002152f, 0.000123f, 0.000043f, -0.000273f, 0.001016f, 0.036348f, 0.000031f, 0.032214f, 0.002302f, 0.020499f, -0.004614f, -0.003221f, 0.005272f, -0.014842f, 0.016244f, -0.009128f, 0.010810f, 0.008427f, -0.006309f, 0.005079f, -0.000708f, 0.000868f, -0.003056f, 0.004847f, 0.006262f, 0.008343f, 0.013076f, 0.003502f, 0.003995f, -0.000274f, 0.015425f, -0.017773f, 0.000178f, + -0.001138f, 0.004064f, 0.007884f, -0.009737f, 0.003862f, 0.004020f, 0.002433f, 0.006016f, 0.003624f, -0.007574f, 0.003710f, 0.013779f, -0.002410f, 0.004037f, -0.002152f, -0.002443f, -0.000458f, -0.010340f, 0.015753f, -0.000501f, 0.001717f, 0.011365f, -0.001434f, 0.000638f, 0.014615f, -0.021415f, 0.005996f, -0.000656f, 0.006514f, 0.016862f, 0.005289f, 0.003880f, 0.006109f, -0.002115f, -0.004617f, -0.003499f, 0.004350f, 0.001305f, 0.009353f, -0.003584f, 0.007712f, 0.003267f, -0.002428f, 0.001295f, -0.005900f, -0.004178f, 0.000941f, -0.002028f, -0.008206f, -0.005558f, -0.008402f, 0.004796f, 0.007661f, -0.002286f, 0.002442f, -0.002024f, -0.005556f, -0.000492f, 0.003231f, 0.002892f, -0.010066f, -0.000671f, 0.001048f, -0.001812f, 0.000671f, -0.002342f, 0.000300f, -0.002499f, -0.004807f, -0.000342f, -0.003154f, -0.002857f, -0.003963f, -0.000069f, -0.003876f, -0.001473f, -0.003760f, -0.003168f, -0.000045f, -0.001634f, -0.001968f, -0.000464f, 0.000591f, 0.001616f, -0.001986f, -0.000210f, 0.000718f, -0.014518f, -0.017626f, -0.007126f, -0.002564f, -0.006729f, 0.014283f, 0.005970f, -0.011224f, 0.012533f, + -0.001669f, -0.009295f, 0.002849f, 0.005410f, -0.005026f, -0.008500f, -0.007478f, -0.016082f, -0.007974f, 0.006824f, -0.010039f, -0.016327f, 0.004683f, 0.006492f, 0.001410f, -0.006057f, 0.012277f, 0.001426f, 0.011359f, -0.000783f, -0.002488f, 0.006354f, 0.010768f, -0.015241f, -0.007123f, 0.004061f, -0.003299f, 0.003646f, -0.009818f, -0.000792f, 0.002776f, 0.003526f, -0.008365f, -0.015471f, -0.004238f, 0.004431f, -0.002508f, -0.002005f, 0.001035f, 0.004920f, -0.001425f, 0.002706f, -0.005092f, 0.008878f, -0.011629f, -0.008825f, -0.002968f, -0.008645f, -0.002477f, -0.002374f, 0.003523f, -0.006353f, 0.004862f, 0.009654f, -0.000741f, 0.002233f, 0.002715f, 0.004611f, 0.009575f, -0.003644f, -0.001719f, -0.001836f, -0.003831f, 0.009826f, -0.003911f, -0.017212f, -0.010868f, -0.007290f, 0.016604f, 0.000257f, 0.009569f, 0.004317f, 0.001535f, 0.002533f, -0.001041f, -0.000391f, 0.008047f, -0.002660f, -0.001709f, 0.002557f, -0.001290f, 0.001265f, -0.003457f, -0.002170f, 0.001923f, -0.000490f, 0.002106f, -0.000520f, 0.001286f, 0.002976f, 0.002242f, 0.002784f, 0.000122f, 0.001940f, -0.000326f, 0.002857f, + 0.003238f, 0.005095f, 0.003292f, 0.004047f, 0.001065f, 0.002706f, 0.002426f, 0.001684f, 0.002521f, 0.003362f, -0.001406f, 0.000277f, -0.000544f, -0.001408f, 0.001497f, 0.001999f, -0.004006f, -0.015705f, -0.036136f, -0.003492f, 0.002617f, 0.000275f, -0.011647f, -0.005318f, -0.013235f, -0.003554f, -0.015632f, -0.018136f, -0.013985f, -0.003385f, -0.009235f, -0.020427f, -0.012617f, 0.004082f, 0.006370f, -0.005735f, 0.012301f, 0.006634f, -0.004439f, 0.014938f, 0.003305f, 0.001115f, 0.002498f, -0.020754f, -0.000686f, 0.003300f, 0.007835f, -0.006619f, -0.005676f, 0.012148f, 0.023970f, -0.018027f, 0.006496f, -0.005406f, -0.000866f, -0.015909f, -0.001334f, -0.000328f, -0.007988f, -0.010350f, -0.007359f, -0.008830f, -0.004574f, 0.005003f, 0.017596f, -0.008359f, 0.006623f, 0.011699f, 0.010774f, -0.003790f, 0.001250f, -0.004011f, -0.003377f, -0.016353f, -0.007982f, 0.008998f, -0.005810f, 0.001815f, -0.005548f, 0.004445f, 0.002475f, -0.001967f, -0.000595f, -0.007735f, -0.006213f, 0.001232f, -0.002237f, 0.003134f, -0.019140f, -0.020449f, -0.002174f, -0.003157f, -0.008699f, -0.000244f, 0.006426f, -0.010158f, + -0.007667f, -0.008694f, -0.014744f, 0.010218f, -0.001077f, -0.002415f, 0.003991f, -0.000785f, 0.003577f, 0.006665f, 0.002370f, 0.003608f, 0.002166f, 0.004836f, -0.001534f, 0.000690f, 0.000794f, 0.000934f, 0.001645f, -0.001538f, -0.001284f, 0.000060f, 0.001527f, 0.001730f, -0.001281f, 0.001376f, -0.001851f, -0.003694f, 0.001845f, 0.001134f, -0.001413f, 0.004293f, 0.002006f, 0.000067f, 0.001700f, -0.002982f, -0.003016f, -0.001019f, -0.001626f, -0.001480f, -0.004022f, -0.000836f, -0.003184f, -0.022764f, -0.004178f, -0.027359f, -0.005824f, -0.019456f, -0.002040f, 0.003368f, 0.005141f, 0.020596f, -0.012755f, 0.004413f, 0.005879f, -0.011559f, -0.004855f, 0.016523f, 0.002030f, -0.005147f, 0.002357f, -0.014060f, 0.012783f, -0.017946f, -0.005597f, 0.007645f, 0.005160f, -0.002089f, 0.003271f, -0.003743f, 0.006045f, -0.007800f, -0.013047f, 0.000660f, 0.006679f, 0.005018f, -0.010386f, 0.002702f, 0.012196f, -0.012535f, -0.015330f, 0.012169f, -0.010377f, 0.007859f, -0.007401f, 0.004276f, -0.000071f, -0.011300f, -0.014141f, -0.009105f, 0.004161f, -0.000822f, 0.005615f, -0.007761f, -0.007088f, -0.018609f, + 0.009813f, -0.013409f, -0.005777f, 0.006901f, 0.016534f, -0.002362f, -0.003143f, -0.024283f, -0.018699f, -0.006560f, -0.006513f, 0.008790f, -0.002324f, -0.014330f, -0.002021f, 0.000494f, -0.007597f, -0.002175f, -0.016585f, 0.010958f, 0.004590f, 0.013884f, 0.017494f, 0.008848f, 0.000939f, 0.007269f, 0.015629f, -0.001531f, -0.003320f, -0.001303f, -0.004480f, -0.015556f, 0.001081f, 0.000882f, 0.003525f, 0.007952f, -0.003108f, 0.001564f, 0.000218f, -0.006270f, -0.003035f, 0.005350f, 0.005610f, 0.004847f, -0.003699f, 0.001288f, 0.002344f, 0.001696f, 0.002107f, 0.001994f, 0.000960f, 0.004013f, 0.004454f, 0.002634f, -0.000639f, 0.001718f, -0.000505f, 0.001440f, 0.003274f, 0.000840f, 0.001450f, -0.000170f, -0.000837f, -0.001199f, 0.000156f, -0.002901f, -0.001017f, 0.002738f, 0.013298f, 0.007081f, 0.038756f, 0.018860f, 0.025087f, -0.007704f, -0.001021f, -0.000339f, -0.038354f, 0.002092f, 0.016490f, -0.007505f, -0.003008f, 0.001401f, 0.024117f, -0.004005f, 0.013961f, -0.002777f, 0.013372f, 0.007452f, 0.016523f, 0.023354f, 0.002970f, 0.015626f, -0.004830f, 0.013539f, -0.001839f, 0.024994f, + 0.013230f, -0.000317f, 0.014151f, 0.011541f, -0.004206f, 0.011025f, 0.006561f, 0.009536f, -0.007462f, -0.005868f, -0.020129f, -0.001120f, 0.014259f, 0.002859f, 0.001811f, -0.004567f, -0.007529f, -0.005890f, -0.006637f, 0.035155f, -0.022533f, 0.009055f, 0.010646f, 0.006160f, 0.003032f, -0.013324f, -0.017882f, -0.004449f, -0.002659f, -0.000702f, -0.030985f, -0.015244f, -0.015923f, 0.000892f, -0.000722f, 0.009347f, -0.001006f, 0.008320f, 0.010998f, 0.019984f, 0.003659f, -0.004976f, 0.006692f, -0.012358f, 0.003433f, -0.009027f, 0.003356f, 0.007820f, 0.004360f, 0.012786f, -0.008523f, -0.009564f, 0.045499f, 0.006372f, 0.008271f, 0.005899f, 0.015454f, -0.010782f, -0.005634f, 0.009863f, -0.001112f, -0.000121f, 0.001805f, 0.003344f, 0.008932f, -0.004280f, -0.000664f, 0.001829f, 0.005149f, 0.001319f, -0.004687f, 0.008783f, 0.000336f, -0.001892f, 0.000213f, -0.000852f, -0.004609f, -0.004183f, -0.002014f, -0.004668f, 0.000002f, -0.001739f, 0.002115f, 0.006338f, -0.000560f, -0.000457f, -0.006799f, -0.001284f, 0.003379f, -0.000602f, 0.000419f, 0.000779f, 0.005374f, -0.002628f, -0.000794f, 0.001880f, + 0.002032f, -0.005789f, -0.005011f, 0.059780f, 0.006110f, 0.009142f, 0.006425f, -0.003447f, -0.024402f, 0.016541f, 0.016911f, -0.009383f, 0.007248f, 0.007983f, -0.014744f, -0.001785f, 0.013883f, 0.008371f, -0.025759f, 0.006713f, -0.007175f, -0.012825f, -0.000497f, 0.007705f, 0.001836f, -0.000029f, -0.000663f, 0.011220f, -0.003623f, 0.006415f, -0.020090f, 0.008186f, -0.002221f, 0.008037f, 0.004329f, -0.003431f, 0.014016f, -0.019159f, -0.008507f, -0.018923f, 0.016464f, 0.008062f, 0.026966f, 0.013603f, -0.000253f, 0.006008f, -0.022173f, -0.000017f, 0.006259f, 0.007183f, 0.006533f, 0.001628f, 0.003710f, -0.005671f, 0.006102f, 0.019642f, 0.026079f, 0.011503f, -0.012119f, -0.006450f, -0.002869f, -0.005056f, 0.009603f, 0.013393f, -0.009370f, 0.007969f, 0.014499f, 0.004616f, -0.020398f, -0.039836f, -0.019885f, 0.008118f, 0.017320f, -0.007436f, 0.005089f, -0.001425f, -0.003826f, -0.000060f, 0.018085f, 0.003419f, -0.015196f, 0.024750f, 0.011028f, -0.028554f, 0.001193f, -0.003386f, -0.009337f, -0.003159f, -0.004476f, 0.000024f, 0.009798f, 0.004211f, -0.007837f, -0.004067f, 0.005754f, 0.010695f, + -0.004860f, 0.008139f, 0.001987f, -0.006631f, -0.001827f, 0.001079f, 0.000162f, -0.001233f, 0.000473f, -0.003291f, -0.002509f, 0.002375f, 0.000574f, -0.002930f, -0.003250f, 0.000191f, -0.002123f, -0.004874f, 0.002941f, -0.001704f, -0.002633f, 0.001376f, 0.004996f, -0.005468f, -0.008716f, -0.000077f, -0.001339f, -0.012681f, -0.002265f, 0.003141f, -0.000079f, -0.007668f, -0.000981f, -0.002848f, 0.002385f, 0.001778f, 0.003929f, 0.003125f, -0.001264f, -0.001394f, -0.002431f, -0.006262f, -0.037016f, 0.011479f, 0.016814f, -0.019017f, 0.012123f, 0.021830f, -0.052463f, 0.011736f, 0.001727f, 0.011916f, -0.019875f, 0.029866f, -0.041496f, 0.000147f, -0.003423f, -0.002852f, -0.004690f, -0.011434f, -0.015985f, -0.002041f, 0.014216f, 0.002007f, -0.000071f, -0.007325f, 0.009867f, -0.001119f, -0.005539f, 0.008297f, 0.017664f, -0.011532f, 0.012611f, -0.001885f, 0.007475f, 0.004475f, 0.011821f, 0.019334f, -0.004814f, 0.005451f, -0.024858f, -0.011730f, -0.005491f, -0.008749f, -0.022677f, 0.002885f, -0.008539f, -0.013968f, 0.020905f, -0.019513f, -0.007106f, -0.008942f, -0.011249f, 0.015077f, -0.016988f, 0.009767f, + -0.006214f, 0.015479f, -0.008324f, 0.016904f, -0.022078f, -0.005665f, 0.002395f, 0.020368f, -0.035390f, -0.012706f, 0.000918f, 0.000475f, -0.006597f, 0.014413f, -0.018523f, -0.035123f, 0.007366f, -0.030787f, 0.015494f, -0.010716f, -0.000245f, -0.032212f, -0.013120f, 0.035638f, 0.019576f, -0.026071f, -0.022495f, -0.018350f, 0.000768f, 0.011082f, -0.004951f, -0.011459f, 0.022567f, 0.008568f, -0.004356f, -0.004608f, -0.008928f, -0.001418f, 0.008656f, -0.008037f, 0.009331f, -0.000784f, -0.007012f, 0.001567f, -0.005436f, 0.003876f, 0.007834f, -0.004531f, 0.003294f, 0.006300f, 0.003915f, -0.000402f, 0.009159f, -0.008703f, 0.008630f, -0.002228f, 0.007554f, -0.010177f, -0.005748f, 0.001852f, 0.000378f, 0.011143f, 0.003347f, 0.006809f, -0.003976f, -0.005948f, 0.003286f, -0.011712f, -0.001473f, -0.002251f, 0.004701f, -0.002225f, -0.002715f, -0.003645f, -0.026982f, -0.011554f, 0.033950f, 0.001451f, -0.028027f, 0.026389f, -0.012357f, 0.001771f, -0.029222f, 0.004509f, 0.011573f, -0.025754f, -0.006301f, -0.023014f, -0.000168f, 0.001482f, -0.007767f, -0.006380f, 0.022482f, 0.003474f, -0.015233f, 0.003835f, + -0.032634f, 0.019628f, 0.031097f, -0.010041f, 0.012988f, 0.022075f, -0.001644f, -0.004489f, 0.002719f, 0.002697f, 0.012929f, 0.002224f, 0.002995f, 0.006803f, -0.018234f, -0.001294f, -0.020961f, -0.021409f, -0.008779f, 0.009029f, 0.012739f, -0.000649f, -0.025216f, 0.004996f, 0.006633f, 0.012440f, 0.026995f, -0.027634f, 0.040504f, -0.033545f, 0.001502f, -0.006736f, -0.005796f, -0.016206f, -0.031129f, -0.042000f, -0.016277f, -0.004782f, 0.010732f, -0.003158f, 0.001771f, 0.006217f, -0.000279f, 0.029634f, 0.014033f, -0.030336f, -0.004709f, -0.000586f, 0.019412f, -0.020955f, 0.001434f, -0.042268f, 0.007960f, 0.033085f, -0.029507f, -0.011564f, 0.004222f, -0.000287f, 0.008306f, 0.046349f, 0.000734f, -0.006075f, 0.002453f, 0.023615f, -0.015967f, 0.006350f, 0.008666f, -0.003465f, -0.001666f, -0.000277f, -0.000574f, 0.010530f, -0.003384f, -0.002377f, -0.009036f, 0.015318f, -0.003260f, 0.004532f, 0.001592f, 0.002723f, 0.003873f, 0.011145f, -0.007681f, -0.001959f, 0.011838f, -0.008520f, -0.011988f, 0.009966f, 0.000543f, 0.004877f, 0.006764f, 0.003801f, 0.012249f, -0.009455f, 0.005737f, 0.006755f, + -0.004152f, 0.017256f, 0.005985f, 0.010561f, 0.003935f, -0.010372f, -0.003722f, -0.001752f, -0.001736f, -0.001835f, 0.005074f, -0.017237f, -0.035278f, 0.042157f, 0.017868f, -0.020494f, 0.027207f, 0.027431f, 0.038710f, -0.014191f, -0.013478f, 0.028441f, -0.004243f, -0.005478f, 0.009799f, 0.012721f, 0.004960f, 0.006156f, -0.038656f, -0.003962f, 0.000061f, 0.000464f, 0.002082f, -0.004219f, 0.016323f, 0.031889f, 0.003176f, 0.002321f, -0.000574f, 0.001673f, 0.029209f, 0.007925f, -0.002083f, -0.006224f, 0.007468f, 0.006632f, -0.004600f, 0.003523f, -0.016693f, -0.003313f, 0.025420f, -0.025058f, -0.012264f, -0.021584f, 0.028412f, -0.025854f, 0.013057f, -0.010478f, 0.008370f, -0.005474f, 0.006756f, -0.020729f, 0.004810f, 0.031763f, -0.020756f, 0.001844f, -0.055085f, -0.002256f, -0.019443f, 0.001689f, -0.051405f, -0.002076f, -0.002499f, -0.015665f, -0.011015f, 0.042193f, -0.045025f, 0.007724f, -0.012141f, -0.016606f, 0.012167f, -0.015039f, -0.035154f, -0.024480f, 0.003467f, 0.002072f, 0.007321f, -0.017226f, -0.023645f, 0.013716f, 0.001199f, 0.002858f, 0.015850f, -0.026061f, 0.019763f, -0.018895f, + -0.008907f, -0.007994f, 0.004753f, 0.000908f, 0.005695f, -0.003169f, -0.006634f, 0.001870f, -0.003739f, 0.005767f, 0.012343f, 0.007377f, 0.004594f, 0.003699f, 0.003402f, 0.003483f, -0.001239f, 0.013572f, 0.002609f, -0.002328f, 0.010037f, 0.010456f, 0.003909f, -0.005450f, -0.000487f, -0.008054f, 0.013381f, 0.004947f, 0.010780f, -0.005007f, 0.011064f, 0.010008f, 0.014458f, 0.007289f, -0.003967f, -0.007279f, 0.012173f, 0.002678f, 0.010546f, 0.002595f, 0.002917f, 0.002973f, 0.003217f, 0.035719f, 0.011960f, -0.004213f, 0.007174f, -0.017228f, -0.019070f, -0.014830f, 0.033902f, -0.030275f, -0.038627f, 0.018718f, -0.035974f, 0.013608f, 0.000929f, 0.010112f, -0.016332f, -0.003410f, -0.019785f, -0.007785f, -0.015379f, 0.007605f, 0.017210f, 0.012596f, -0.029153f, 0.033764f, 0.003585f, 0.012054f, 0.002582f, 0.016457f, -0.003923f, 0.015819f, 0.003314f, -0.006510f, 0.009374f, 0.003965f, 0.012574f, 0.009354f, -0.022268f, 0.009108f, -0.006879f, 0.006498f, -0.004937f, -0.007769f, -0.007243f, -0.014943f, 0.013736f, 0.015590f, 0.015432f, -0.002654f, 0.028656f, 0.035189f, 0.013421f, 0.004882f, + 0.015289f, 0.036449f, 0.017296f, 0.039727f, 0.024778f, 0.029685f, -0.032146f, -0.031512f, 0.005902f, -0.006176f, -0.009135f, 0.002751f, -0.016499f, 0.013486f, 0.009299f, 0.006473f, 0.029425f, -0.006805f, -0.020033f, -0.016036f, -0.014981f, 0.003730f, -0.007477f, -0.064247f, -0.028685f, -0.024874f, -0.009765f, -0.012819f, -0.007426f, -0.009575f, -0.018968f, 0.000870f, -0.011675f, -0.010350f, 0.003597f, -0.010392f, -0.004009f, -0.016081f, 0.000266f, 0.001013f, -0.003266f, -0.023005f, 0.008860f, 0.000082f, 0.000404f, -0.017283f, 0.004561f, 0.006320f, 0.006012f, 0.002023f, 0.019514f, -0.012962f, -0.005699f, 0.004230f, 0.001501f, -0.001385f, 0.007617f, -0.009175f, -0.008580f, -0.001617f, 0.013617f, -0.001414f, 0.009704f, 0.011933f, -0.003287f, -0.014907f, -0.014126f, -0.001596f, 0.014214f, 0.001166f, -0.011466f, 0.001515f, -0.003118f, -0.007299f, -0.006213f, -0.002341f, 0.000075f, -0.011203f, -0.010270f, 0.009694f, 0.028281f, 0.019880f, -0.063207f, -0.045987f, -0.014843f, -0.000204f, 0.020304f, -0.008233f, -0.001870f, -0.049605f, 0.006686f, -0.025802f, 0.018311f, -0.003262f, 0.024389f, -0.020876f, + -0.005675f, -0.024846f, 0.003992f, 0.020906f, -0.010219f, 0.006338f, -0.014808f, 0.001410f, -0.034135f, -0.009046f, -0.002001f, 0.002733f, 0.024663f, 0.032871f, 0.000765f, -0.029623f, -0.021410f, -0.009388f, 0.002708f, -0.007634f, 0.009161f, -0.034108f, -0.011027f, -0.004461f, -0.009278f, -0.019065f, -0.004880f, -0.008665f, 0.023057f, 0.034193f, 0.022572f, 0.008594f, 0.013660f, 0.014449f, -0.016710f, 0.056948f, 0.034078f, -0.044550f, -0.039027f, 0.041875f, -0.033101f, -0.018745f, 0.006115f, 0.004781f, -0.032134f, 0.030995f, 0.001705f, -0.095944f, 0.025425f, 0.060446f, -0.042037f, 0.041684f, 0.055321f, -0.018415f, -0.006052f, 0.029808f, -0.035012f, -0.022914f, 0.011306f, -0.018835f, -0.022000f, 0.025275f, -0.042411f, -0.012755f, 0.005136f, 0.001020f, 0.002118f, -0.004020f, 0.015165f, -0.010998f, 0.006326f, 0.002299f, -0.011468f, 0.022322f, 0.011117f, -0.000715f, -0.014500f, 0.017218f, -0.011081f, 0.013287f, -0.011777f, 0.016160f, 0.001400f, 0.003350f, 0.016090f, -0.012685f, -0.014518f, 0.004294f, -0.013415f, -0.008094f, -0.000901f, 0.001401f, -0.009025f, -0.015762f, 0.007190f, -0.037000f, + -0.000303f, 0.017030f, -0.013945f, 0.010026f, -0.004473f, 0.005031f, -0.015783f, 0.000361f, 0.008205f, -0.007267f, 0.005279f, 0.033203f, -0.015066f, -0.013929f, 0.032401f, -0.023635f, -0.004232f, 0.027462f, -0.019530f, -0.012452f, 0.020676f, 0.012675f, 0.013597f, -0.003368f, -0.020124f, -0.016169f, 0.019124f, -0.015198f, -0.001324f, 0.005663f, -0.028466f, 0.018596f, 0.015271f, -0.011544f, -0.009255f, -0.022266f, 0.000703f, -0.013756f, 0.019381f, -0.031258f, 0.002502f, 0.012057f, -0.001540f, -0.014827f, -0.032314f, -0.007227f, -0.013975f, -0.003073f, -0.024959f, 0.034337f, -0.033283f, 0.005958f, -0.011993f, 0.008723f, -0.047185f, 0.048937f, 0.009466f, 0.005011f, -0.019340f, 0.011269f, 0.008155f, 0.002284f, 0.004651f, -0.008560f, -0.037152f, -0.006311f, -0.015950f, -0.023792f, -0.031871f, -0.011406f, -0.007849f, -0.031706f, -0.011956f, -0.001294f, 0.022311f, 0.010365f, -0.028607f, -0.025030f, 0.015838f, -0.006411f, -0.036369f, -0.015594f, 0.009314f, 0.030408f, 0.030307f, 0.030727f, 0.048999f, -0.009116f, -0.032671f, -0.031296f, -0.001657f, 0.021636f, 0.038267f, 0.017305f, 0.008514f, -0.038393f, + 0.022144f, 0.008382f, 0.037367f, 0.025971f, 0.017154f, 0.012960f, 0.000415f, 0.003580f, 0.022184f, -0.004868f, 0.001949f, 0.004163f, 0.006724f, 0.007798f, 0.007445f, 0.010839f, 0.026584f, 0.008549f, 0.002356f, 0.009327f, -0.000182f, 0.008729f, 0.002870f, 0.001892f, 0.016695f, -0.019356f, -0.013551f, -0.004855f, 0.007804f, -0.009612f, 0.006945f, -0.003984f, 0.020919f, 0.001145f, 0.003889f, -0.010287f, -0.012786f, 0.001554f, 0.012407f, -0.010842f, -0.000772f, 0.014232f, -0.010892f, -0.000239f, 0.006999f, -0.019351f, 0.024671f, 0.013421f, -0.003777f, 0.006244f, -0.000373f, 0.000211f, -0.005261f, 0.014159f, -0.003681f, 0.023473f, 0.060368f, -0.053163f, -0.002429f, -0.020717f, -0.029444f, -0.016326f, 0.027134f, -0.014563f, -0.017524f, 0.015105f, 0.035181f, 0.023447f, -0.027984f, 0.018224f, -0.029327f, 0.021612f, 0.000255f, -0.002499f, -0.014668f, -0.020507f, -0.018010f, 0.004273f, 0.002970f, -0.032856f, 0.020348f, 0.004170f, -0.003955f, -0.012082f, -0.015159f, 0.024444f, -0.033476f, -0.000915f, 0.034469f, 0.042248f, -0.038265f, -0.001898f, -0.008363f, -0.023588f, -0.032214f, 0.034778f, + 0.006834f, 0.022307f, -0.007661f, 0.003210f, -0.003914f, 0.022189f, -0.009395f, 0.001700f, -0.027777f, 0.038969f, 0.031097f, -0.046374f, -0.058277f, -0.011654f, -0.000285f, -0.018382f, 0.000950f, -0.013550f, 0.003413f, -0.028631f, 0.029860f, -0.036952f, -0.033733f, -0.011786f, 0.004433f, 0.026231f, -0.014458f, 0.037808f, 0.002974f, -0.012962f, -0.013755f, -0.009432f, -0.024513f, 0.023161f, 0.016052f, -0.005833f, 0.013425f, 0.011652f, -0.019401f, -0.018084f, -0.016590f, 0.029313f, 0.006699f, -0.020435f, 0.001791f, 0.008475f, 0.008921f, -0.030652f, 0.015094f, 0.012635f, 0.005150f, -0.000061f, -0.009359f, 0.004373f, -0.010172f, -0.027290f, 0.005078f, -0.003438f, -0.005622f, -0.003012f, 0.002098f, -0.008147f, -0.011129f, -0.000388f, -0.004425f, 0.013926f, -0.007942f, -0.003663f, 0.007346f, -0.003535f, -0.013567f, 0.010994f, -0.013526f, -0.004099f, -0.023116f, 0.012150f, 0.001821f, -0.003116f, 0.003422f, -0.010017f, 0.019469f, -0.001200f, 0.002852f, 0.022689f, 0.015666f, -0.006221f, -0.007922f, 0.010931f, 0.005558f, -0.007731f, 0.003825f, -0.007103f, -0.007104f, -0.001365f, 0.004552f, -0.004212f, + -0.001555f, -0.083741f, 0.123641f, -0.085228f, -0.020705f, 0.021331f, 0.067147f, 0.052994f, -0.019072f, -0.022465f, 0.004326f, 0.002186f, 0.035003f, 0.011715f, -0.044470f, 0.012687f, -0.009013f, -0.016798f, 0.005202f, 0.017618f, 0.000493f, -0.034826f, -0.029174f, 0.014930f, 0.013663f, 0.020063f, -0.010754f, 0.025049f, 0.006765f, 0.029534f, -0.002455f, -0.011297f, 0.023230f, -0.003639f, -0.023392f, 0.003284f, 0.028668f, -0.002116f, -0.031254f, 0.014938f, 0.037871f, -0.035196f, 0.014202f, -0.037741f, 0.015241f, -0.047449f, -0.029730f, 0.050309f, 0.048434f, 0.021522f, 0.062870f, -0.012874f, 0.074923f, 0.026684f, 0.029289f, 0.038966f, -0.066614f, 0.055796f, 0.020017f, 0.022022f, 0.026824f, 0.005343f, -0.032201f, 0.004435f, 0.063303f, 0.070465f, -0.000227f, -0.081727f, 0.040337f, 0.001280f, 0.017510f, -0.003705f, 0.002519f, -0.018511f, -0.060321f, 0.011398f, -0.009536f, 0.012825f, -0.010772f, 0.029272f, -0.033670f, -0.037617f, -0.025270f, 0.004445f, -0.010581f, -0.017409f, 0.020206f, 0.006868f, -0.025755f, -0.028713f, -0.021479f, -0.017253f, -0.002424f, -0.005212f, 0.015032f, -0.001228f, + -0.022036f, 0.017003f, 0.004005f, -0.006359f, 0.001453f, 0.007997f, -0.010779f, -0.006300f, 0.011626f, -0.020509f, -0.007965f, -0.014241f, 0.012009f, 0.013831f, -0.016168f, 0.004308f, -0.044076f, 0.000309f, 0.002598f, 0.001902f, -0.008286f, -0.008852f, -0.019676f, -0.015562f, 0.010588f, 0.006126f, 0.010167f, 0.015169f, -0.014430f, 0.000864f, 0.006418f, 0.003652f, -0.014138f, -0.000200f, 0.004020f, -0.000769f, -0.011540f, -0.001955f, -0.002716f, 0.080985f, -0.002772f, -0.096768f, -0.048584f, -0.057039f, -0.021476f, 0.000328f, 0.032110f, -0.082484f, -0.018185f, 0.012797f, -0.038115f, -0.044334f, -0.039978f, -0.044251f, -0.006843f, 0.048567f, 0.025278f, -0.019426f, 0.023671f, 0.009479f, -0.022036f, 0.025019f, -0.027902f, -0.006341f, 0.012028f, 0.016534f, -0.055688f, 0.028032f, -0.027255f, 0.015948f, -0.010733f, -0.045031f, 0.012763f, 0.013898f, 0.007223f, 0.007326f, -0.018400f, -0.063873f, 0.002856f, 0.013120f, 0.014167f, 0.000585f, 0.008225f, -0.026543f, -0.000052f, -0.002311f, 0.058209f, -0.008969f, -0.095032f, -0.043107f, -0.010089f, -0.079219f, 0.018291f, -0.024240f, -0.019941f, -0.038210f, + -0.016820f, -0.057044f, -0.055598f, -0.068587f, -0.006557f, 0.072091f, 0.010175f, -0.045706f, 0.021291f, 0.000585f, -0.004801f, -0.025728f, -0.035830f, 0.015107f, 0.029969f, 0.022576f, 0.012549f, -0.013715f, -0.058184f, -0.041733f, -0.058577f, 0.008617f, 0.006686f, -0.002091f, 0.021160f, -0.031023f, -0.037249f, -0.005314f, -0.013695f, -0.038319f, 0.008522f, 0.022031f, 0.003199f, 0.008056f, 0.036958f, -0.006640f, -0.007521f, -0.006303f, 0.002521f, -0.013210f, -0.007240f, 0.016455f, 0.025244f, 0.027513f, 0.018603f, -0.007600f, 0.001305f, 0.004312f, -0.011431f, 0.025493f, -0.010382f, 0.037197f, -0.013026f, 0.017483f, -0.017693f, -0.004905f, 0.037779f, 0.012560f, 0.005209f, -0.000131f, -0.014744f, 0.014924f, 0.003267f, -0.018307f, 0.008345f, -0.015646f, -0.020183f, 0.005929f, 0.006075f, -0.012393f, -0.012115f, 0.012977f, 0.000720f, 0.018211f, 0.003934f, 0.012453f, -0.006687f, 0.005574f, 0.005139f, 0.001960f, 0.053915f, -0.006694f, 0.043270f, 0.055001f, -0.046492f, -0.059055f, -0.061468f, 0.015868f, 0.021937f, -0.085066f, -0.048660f, 0.001329f, 0.002689f, 0.025142f, -0.098278f, 0.010156f, + 0.023014f, 0.067944f, -0.078701f, 0.008953f, 0.013158f, -0.010240f, 0.043731f, -0.025472f, 0.076471f, -0.004616f, 0.006905f, 0.022574f, 0.029799f, -0.029271f, -0.061449f, 0.035452f, 0.043652f, 0.009573f, 0.055181f, 0.010213f, -0.006865f, -0.021062f, -0.046437f, 0.071579f, -0.032129f, 0.067805f, 0.027087f, -0.005553f, 0.020312f, -0.029389f, 0.037025f, 0.035995f, -0.025393f, 0.026631f, 0.013952f, -0.072133f, 0.052276f, 0.052583f, -0.006618f, -0.037054f, 0.007003f, -0.002310f, 0.002412f, -0.013436f, 0.098681f, -0.002388f, -0.057144f, -0.032617f, 0.011263f, -0.083144f, -0.108097f, 0.014246f, 0.135392f, 0.029343f, -0.009488f, -0.086999f, -0.021868f, -0.014931f, 0.092282f, -0.063663f, -0.040356f, -0.152511f, -0.021950f, -0.028399f, -0.035744f, -0.029085f, 0.055870f, 0.059010f, -0.059348f, -0.023658f, 0.019627f, 0.007665f, -0.010830f, 0.023885f, -0.010421f, -0.019350f, -0.018663f, 0.020498f, 0.008437f, 0.006257f, -0.007552f, 0.020081f, -0.021343f, -0.007844f, 0.018232f, 0.007827f, -0.001216f, -0.001416f, -0.015940f, 0.007133f, -0.010586f, 0.038801f, -0.010800f, -0.021996f, -0.017585f, -0.034278f, + -0.011470f, 0.025412f, 0.029323f, 0.079529f, 0.030444f, -0.009672f, -0.061147f, -0.085069f, -0.039616f, 0.000691f, 0.034508f, 0.027393f, -0.022604f, -0.034222f, -0.017156f, -0.014366f, 0.020878f, 0.035773f, 0.007959f, 0.001466f, -0.004651f, -0.013565f, -0.011076f, -0.010412f, -0.001966f, -0.004859f, -0.005191f, 0.004276f, -0.009234f, 0.003084f, 0.001222f, 0.002248f, -0.007034f, -0.001465f, -0.005276f, -0.004833f, -0.006879f, 0.004034f, -0.004390f, 0.007406f, -0.135689f, 0.039986f, 0.064458f, -0.086019f, -0.008234f, 0.049532f, -0.021371f, -0.038230f, 0.034520f, -0.036851f, -0.021004f, 0.003728f, -0.028716f, 0.046663f, -0.015782f, -0.020048f, -0.008322f, 0.025075f, 0.082541f, -0.012024f, -0.038471f, -0.041732f, 0.015067f, 0.040501f, 0.023400f, -0.036770f, -0.006208f, 0.045983f, 0.000952f, -0.033234f, 0.011060f, -0.029561f, 0.076367f, -0.033744f, -0.083268f, 0.029573f, -0.014209f, 0.040528f, -0.055852f, -0.053804f, 0.054703f, -0.003515f, -0.071409f, -0.036932f, -0.068233f, 0.088987f, 0.042264f, 0.024666f, -0.092983f, 0.017408f, 0.038116f, -0.064154f, 0.003663f, -0.045829f, -0.035599f, 0.037257f, + -0.031663f, 0.042620f, -0.026173f, -0.055614f, -0.012889f, -0.013090f, -0.008482f, 0.020351f, 0.006673f, -0.034403f, 0.109659f, -0.012614f, 0.048616f, 0.050779f, 0.030345f, -0.014076f, 0.011530f, -0.024047f, 0.061697f, 0.016063f, -0.015574f, 0.008228f, 0.026225f, 0.043673f, -0.010636f, -0.092305f, -0.006299f, 0.029860f, -0.009230f, 0.050005f, -0.020797f, 0.017782f, -0.007436f, 0.002083f, 0.020321f, 0.005704f, 0.012401f, 0.025888f, 0.014945f, 0.029926f, -0.006922f, 0.010249f, 0.015492f, 0.002800f, -0.029848f, 0.036641f, -0.014805f, 0.000986f, 0.005637f, -0.017164f, 0.009323f, 0.002613f, -0.004678f, 0.025712f, -0.011171f, 0.002598f, 0.036143f, 0.000383f, 0.020178f, -0.016865f, -0.011264f, 0.020213f, -0.004473f, -0.012653f, -0.018772f, 0.001736f, 0.002661f, 0.005265f, -0.006215f, 0.005369f, 0.011330f, -0.003320f, 0.007765f, 0.010222f, -0.004976f, 0.012305f, 0.002272f, -0.012102f, 0.008255f, 0.005063f, 0.002523f, -0.000654f, 0.098185f, 0.019737f, 0.042717f, -0.003951f, 0.010565f, 0.015144f, -0.035267f, 0.015314f, 0.034469f, -0.000029f, -0.040636f, -0.022267f, -0.030072f, -0.012812f, + -0.040735f, -0.039983f, 0.005245f, -0.031947f, 0.046625f, 0.014636f, -0.010521f, -0.033929f, -0.015825f, -0.011413f, 0.025233f, -0.008080f, -0.038534f, -0.032408f, 0.008373f, 0.007959f, 0.022491f, 0.008064f, -0.008319f, 0.009954f, -0.033589f, -0.103390f, 0.004534f, 0.124614f, -0.003445f, -0.091246f, -0.014554f, 0.059113f, 0.016777f, 0.009333f, -0.001478f, -0.039849f, -0.048989f, -0.029794f, 0.011391f, -0.003397f, -0.045309f, 0.016429f, -0.091320f, -0.016743f, 0.084921f, 0.024575f, 0.109185f, -0.014703f, -0.042856f, -0.013350f, -0.009442f, 0.028833f, 0.006501f, -0.001173f, -0.059312f, -0.030267f, -0.028295f, -0.004368f, 0.069145f, -0.009632f, -0.016746f, 0.022354f, 0.028078f, 0.004125f, -0.036609f, -0.057675f, -0.004033f, 0.022882f, -0.002444f, -0.028801f, -0.007189f, 0.015680f, -0.011970f, -0.011050f, -0.018683f, 0.034273f, 0.036619f, -0.018705f, -0.009553f, -0.017214f, 0.014927f, 0.021220f, -0.009935f, 0.002783f, -0.003778f, -0.003338f, -0.006783f, -0.027744f, 0.003057f, 0.015321f, -0.016586f, 0.003770f, -0.003973f, 0.000905f, -0.014859f, -0.005342f, -0.006248f, -0.010091f, -0.011282f, -0.011930f, + -0.003291f, 0.048622f, -0.024303f, -0.000043f, -0.009577f, 0.002358f, 0.027075f, -0.018625f, -0.002582f, -0.005572f, 0.008522f, -0.001602f, 0.007747f, -0.014386f, -0.043466f, -0.144075f, -0.222648f, 0.052580f, 0.199197f, 0.062936f, 0.487335f, 0.459138f, 0.204158f, 0.473425f, 0.199916f, -0.085743f, -0.001450f, -0.142278f, -0.389460f, -0.212535f, -0.203938f, -0.399048f, -0.290606f, -0.166801f, -0.251419f, -0.168959f, 0.036795f, -0.014571f, -0.080439f, 0.095412f, 0.089104f, -0.000280f, 0.095529f, 0.259364f, 0.108873f, 0.048941f, 0.248211f, 0.222169f, 0.074642f, 0.264646f, 0.323713f, -0.000399f, 0.191796f, 0.326423f, 0.123645f, 0.130573f, 0.332714f, 0.198857f, -0.026258f, 0.259746f, 0.182302f, -0.070655f, 0.102000f, 0.206641f, -0.092377f, -0.163751f, -0.036931f, -0.346229f, -0.581378f, -0.562785f, -0.625825f, -1.001163f, -0.866604f, -0.714855f, -0.926501f, -0.794308f, -0.510422f, -0.605018f, -0.462403f, -0.127851f, -0.041219f, 0.196039f, 0.364707f, 0.601206f, 0.805361f, 0.878531f, 1.024649f, 1.112921f, 1.039607f, 0.984758f, 1.044658f, 0.794838f, 0.630201f, 0.747654f, 0.407831f, 0.065353f, + 0.094300f, -0.150782f, -0.552081f, -0.463481f, -0.342922f, -0.494923f, -0.506161f, -0.315674f, -0.359377f, -0.453194f, -0.332161f, -0.302009f, -0.426365f, -0.382485f, -0.249414f, -0.317267f, -0.340820f, -0.111408f, -0.107194f, -0.201058f, -0.021011f, 0.076828f, -0.057459f, 0.011075f, 0.076245f, -0.108396f, -0.140318f, -0.133158f, -0.292070f, -0.322523f, -0.225787f, -0.169575f, -0.123568f, 0.042176f, 0.198250f, 0.269430f, 0.381636f, 0.489014f, 0.510608f, 0.541669f, 0.598986f, 0.568174f, 0.516499f, 0.537995f, 0.487169f, 0.362370f, 0.248538f, 0.065614f, -0.095832f, -0.246344f, -0.358785f, -0.402001f, -0.423595f, -0.377925f, -0.289551f, -0.253578f, -0.213733f, -0.174733f, -0.150843f, -0.132798f, -0.099567f, -0.077106f, -0.071037f, -0.069266f, -0.048308f, -0.036448f, -0.029099f, -0.010019f, 0.015241f, 0.037403f, 0.065362f, 0.067921f, 0.069838f, 0.080882f, 0.079856f, 0.065493f, 0.070450f, 0.058627f, 0.031073f, 0.002370f, -0.023895f, -0.051841f, -0.062418f, -0.074529f, -0.080097f, -0.074598f, -0.069211f, -0.067162f, -0.048053f, -0.037551f, -0.022755f, 0.000812f, 0.020000f, 0.029430f, 0.045250f, 0.054669f, + 0.061796f, 0.069901f, 0.072993f, 0.076221f, 0.079440f, 0.079974f, 0.079197f, 0.073877f, 0.072800f, 0.068840f, 0.064361f, 0.058132f, 0.055480f, 0.045431f, 0.034523f, 0.021070f, 0.010253f, -0.003795f, -0.016563f, -0.028435f, -0.041747f, -0.058530f, -0.069741f, -0.081732f, -0.088030f, -0.093575f, -0.095887f, -0.095957f, -0.091834f, -0.087888f, -0.079556f, -0.072243f, -0.060771f, -0.047624f, -0.029301f, -0.015284f, 0.004387f, 0.018734f, 0.032146f, 0.043768f, 0.054802f, 0.057732f, 0.062129f, 0.060813f, 0.056049f, 0.047775f, 0.041640f, 0.030406f, 0.021410f, 0.013442f, 0.008705f, 0.002013f, 0.000364f, -0.001457f, -0.001192f, -0.003004f, -0.001533f, -0.002295f, -0.001046f, -0.001842f, 0.000052f, -0.000701f}, + {-0.000954f, 0.020699f, -0.010223f, 0.000745f, -0.006068f, -0.000547f, 0.008860f, 0.004093f, 0.005588f, -0.004879f, 0.006904f, -0.007128f, 0.007742f, 0.003759f, 0.009315f, 0.003829f, -0.001676f, -0.010497f, 0.011294f, 0.007663f, 0.002924f, 0.001252f, 0.001122f, -0.004498f, -0.004994f, 0.005733f, 0.003634f, 0.003724f, 0.005648f, -0.005723f, -0.000355f, 0.005162f, 0.006268f, -0.000870f, -0.004540f, -0.008841f, 0.000110f, 0.001579f, -0.005230f, 0.001926f, 0.001490f, -0.007973f, -0.004203f, -0.000661f, 0.004097f, 0.000032f, -0.003781f, 0.007332f, 0.001453f, -0.002555f, -0.005396f, -0.001272f, 0.000722f, -0.010387f, 0.004843f, 0.006423f, -0.003522f, 0.008241f, 0.006861f, -0.001126f, 0.005687f, 0.003272f, 0.011049f, 0.003412f, 0.002123f, -0.001752f, 0.004203f, -0.008876f, 0.001204f, 0.004195f, -0.004311f, 0.004810f, 0.005913f, 0.006386f, 0.004072f, 0.008406f, -0.001749f, -0.005162f, -0.002599f, -0.002203f, 0.001182f, -0.001986f, -0.006497f, 0.003079f, -0.003033f, -0.003483f, -0.003918f, 0.001487f, 0.000057f, -0.002045f, -0.001529f, 0.002589f, 0.000256f, -0.000325f, -0.000642f, -0.000281f, + 0.001293f, 0.001734f, -0.000223f, -0.000122f, -0.001427f, 0.000400f, -0.002616f, 0.000241f, 0.001853f, 0.002359f, -0.001630f, -0.001809f, 0.000474f, 0.001536f, -0.001507f, -0.019649f, -0.013848f, -0.001901f, -0.008939f, -0.007535f, 0.003676f, -0.011165f, -0.010886f, 0.003175f, -0.004966f, -0.004340f, 0.004442f, -0.003485f, -0.007731f, -0.000779f, -0.000643f, -0.002111f, -0.003571f, -0.002016f, -0.008858f, -0.000494f, -0.006406f, -0.004535f, -0.000305f, 0.007916f, -0.001811f, 0.011415f, -0.005971f, 0.006879f, 0.007779f, -0.008757f, 0.003007f, -0.002182f, 0.001643f, -0.006187f, 0.003026f, 0.004080f, 0.005986f, -0.003062f, -0.007457f, -0.002529f, -0.004118f, 0.002410f, 0.002807f, -0.008923f, -0.001191f, -0.006115f, -0.005010f, 0.001724f, -0.007407f, -0.011723f, -0.002265f, 0.011587f, 0.002495f, 0.004079f, 0.000571f, 0.002691f, 0.001522f, 0.004286f, 0.004509f, 0.012988f, 0.000915f, -0.005724f, -0.007489f, -0.001566f, -0.003595f, -0.000927f, -0.015088f, 0.003146f, -0.001122f, 0.004828f, -0.002062f, 0.001361f, -0.003639f, -0.001735f, 0.014665f, 0.002977f, 0.013443f, -0.004556f, -0.002510f, 0.001054f, + 0.003789f, 0.001331f, 0.004527f, -0.004468f, 0.004920f, -0.005213f, -0.003292f, 0.002701f, 0.001893f, -0.000179f, 0.000190f, 0.000126f, -0.001179f, 0.000384f, -0.002042f, -0.000171f, -0.000731f, -0.000315f, 0.000831f, 0.001033f, -0.001149f, -0.001895f, -0.001225f, 0.000134f, 0.000033f, 0.000332f, 0.000591f, -0.000785f, -0.000911f, -0.000801f, 0.000166f, -0.000305f, 0.001059f, 0.016032f, 0.018470f, 0.014223f, 0.010549f, 0.014951f, 0.006057f, 0.006500f, -0.001368f, 0.004250f, 0.015725f, 0.001683f, 0.004793f, -0.005842f, -0.003903f, 0.012059f, -0.008094f, -0.014745f, 0.004457f, -0.012319f, 0.010629f, 0.002511f, 0.012755f, -0.004061f, -0.000809f, -0.003144f, 0.004186f, 0.005113f, -0.000188f, -0.012551f, -0.002598f, 0.010758f, -0.007168f, 0.004852f, 0.002836f, -0.002422f, -0.003104f, 0.011954f, 0.009001f, 0.020851f, 0.008333f, 0.001734f, 0.004981f, -0.001760f, 0.001254f, 0.006569f, 0.003902f, 0.017772f, -0.007624f, -0.005069f, 0.001223f, 0.004578f, -0.002813f, 0.008238f, -0.007731f, 0.001602f, -0.000524f, -0.005923f, 0.001825f, 0.001785f, -0.008047f, -0.010863f, -0.006742f, 0.008603f, + 0.004149f, 0.000037f, -0.000719f, 0.006493f, 0.000470f, 0.002153f, 0.011238f, 0.005556f, -0.002707f, -0.001793f, 0.009987f, -0.008681f, 0.001126f, -0.007826f, -0.003546f, -0.010115f, 0.002731f, -0.002106f, -0.006022f, -0.003929f, 0.005842f, 0.003618f, 0.001023f, 0.003447f, -0.005644f, -0.000944f, -0.000507f, 0.004351f, 0.000099f, 0.000310f, 0.000777f, 0.001299f, 0.003173f, 0.003591f, 0.002805f, 0.000219f, 0.001486f, 0.003250f, 0.000155f, -0.002956f, 0.002707f, -0.001500f, -0.000613f, 0.000665f, -0.000527f, 0.002388f, 0.002143f, 0.001088f, -0.000034f, -0.000830f, -0.000890f, 0.001026f, 0.001338f, 0.000499f, 0.002057f, -0.004222f, -0.002729f, 0.002115f, -0.000180f, -0.001664f, -0.000235f, 0.002257f, 0.000177f, -0.001557f, -0.001992f, 0.001330f, -0.001966f, 0.000168f, 0.034804f, -0.000607f, 0.017049f, -0.003081f, -0.002672f, 0.018306f, -0.017910f, -0.006188f, -0.001397f, 0.009052f, 0.006278f, -0.003818f, 0.003488f, 0.001710f, -0.016217f, 0.004122f, 0.008682f, 0.007727f, -0.018174f, -0.006372f, 0.002057f, -0.013015f, -0.003579f, 0.001020f, 0.000595f, 0.001797f, -0.001997f, 0.008329f, + -0.005865f, 0.006629f, 0.013639f, 0.013642f, -0.003948f, -0.007785f, -0.001387f, 0.015366f, -0.000869f, -0.000799f, 0.000124f, 0.001535f, -0.007959f, 0.001389f, 0.006466f, 0.000994f, 0.001543f, 0.006206f, -0.004082f, 0.004187f, 0.002429f, -0.001661f, 0.010799f, 0.001087f, 0.008589f, 0.001721f, -0.002860f, 0.003770f, 0.005747f, 0.004972f, -0.000235f, -0.008407f, -0.007663f, -0.010129f, -0.004509f, -0.000331f, 0.000026f, -0.001161f, 0.007571f, 0.006522f, -0.004896f, -0.009933f, 0.000337f, 0.005199f, 0.006240f, -0.006066f, -0.001117f, 0.005911f, -0.000509f, -0.000787f, 0.007840f, 0.003690f, 0.003726f, -0.002889f, -0.002496f, -0.000439f, 0.003392f, 0.005053f, 0.000134f, 0.003832f, 0.001390f, 0.000342f, 0.000755f, 0.001292f, 0.004698f, 0.003539f, 0.005286f, -0.002644f, 0.002504f, 0.000381f, 0.000685f, -0.000742f, 0.000570f, 0.000805f, 0.000254f, 0.000707f, -0.000841f, 0.002539f, 0.002490f, -0.002271f, 0.000629f, 0.001426f, 0.001573f, -0.000732f, 0.004894f, 0.001907f, -0.000706f, -0.009224f, -0.026090f, -0.006675f, -0.008922f, 0.001763f, 0.004195f, -0.004347f, -0.005335f, -0.048915f, + 0.000844f, 0.015791f, -0.011573f, -0.018286f, 0.013580f, -0.020706f, -0.003288f, -0.009251f, -0.011060f, -0.006756f, -0.007005f, 0.000752f, 0.008168f, -0.001517f, 0.004483f, -0.005298f, 0.006118f, -0.004815f, -0.007585f, 0.003259f, -0.002945f, -0.011728f, -0.015124f, 0.007132f, 0.000549f, 0.007038f, 0.001998f, 0.015772f, 0.002067f, 0.005451f, -0.007757f, -0.013184f, -0.003983f, -0.006564f, 0.012970f, -0.006171f, 0.000173f, 0.003373f, -0.006694f, 0.018332f, 0.012003f, 0.000217f, -0.014809f, -0.018619f, -0.006475f, 0.006131f, -0.016927f, -0.000472f, -0.008323f, -0.016001f, 0.001309f, -0.025026f, -0.005696f, -0.002716f, -0.009460f, 0.016729f, -0.001210f, -0.002707f, -0.000447f, 0.010453f, 0.013248f, 0.003968f, -0.013609f, -0.004414f, -0.003574f, 0.007168f, 0.003218f, 0.004084f, -0.007721f, -0.009697f, 0.007377f, 0.005069f, 0.001726f, 0.002463f, -0.000643f, 0.004235f, 0.001029f, 0.006419f, 0.001675f, 0.001435f, -0.000719f, -0.000272f, 0.000868f, 0.004107f, 0.005802f, 0.003583f, -0.001629f, 0.002297f, -0.007635f, 0.003776f, 0.004277f, -0.001336f, -0.000793f, 0.001285f, -0.001853f, -0.000556f, + -0.000581f, -0.002386f, -0.002582f, -0.001406f, -0.000879f, 0.001316f, 0.002798f, -0.000554f, -0.003611f, -0.000113f, -0.005031f, 0.001566f, 0.006506f, 0.002772f, 0.003774f, 0.002697f, 0.010251f, -0.027892f, -0.041458f, 0.005152f, -0.009610f, 0.009289f, -0.011744f, -0.020432f, 0.000321f, 0.018941f, 0.003663f, 0.011652f, 0.009047f, 0.007240f, 0.004393f, -0.006532f, 0.004856f, 0.012614f, -0.019829f, -0.009110f, -0.006729f, -0.004317f, 0.006996f, -0.001532f, 0.002277f, 0.013089f, 0.011129f, -0.004512f, -0.011273f, 0.002693f, -0.006401f, -0.004631f, -0.010934f, -0.007357f, -0.016547f, 0.004039f, -0.006310f, -0.000024f, 0.014322f, -0.002791f, 0.002586f, 0.003953f, -0.010611f, 0.008869f, 0.008456f, 0.012220f, -0.010811f, 0.019229f, -0.003305f, -0.013867f, -0.012003f, -0.015180f, 0.014062f, -0.005270f, -0.016437f, 0.005050f, -0.002689f, -0.011340f, 0.012009f, 0.016493f, -0.005841f, -0.013570f, 0.009970f, 0.003330f, 0.007777f, -0.001080f, 0.021854f, 0.013060f, -0.013040f, -0.006274f, -0.006249f, -0.004907f, 0.007178f, 0.010190f, 0.012898f, 0.000080f, 0.001554f, 0.005121f, -0.005368f, 0.004876f, + -0.001605f, 0.008550f, 0.011832f, -0.016190f, -0.007447f, -0.008115f, -0.005292f, -0.008294f, -0.000819f, -0.005853f, 0.002578f, -0.000272f, -0.000690f, -0.000644f, 0.002019f, -0.003959f, 0.010028f, -0.001226f, 0.004185f, 0.001581f, 0.001962f, -0.001948f, 0.000246f, 0.000316f, 0.000455f, -0.003403f, 0.000577f, -0.002204f, -0.003711f, -0.005343f, -0.001725f, -0.000295f, -0.001025f, 0.000225f, 0.000509f, -0.001070f, -0.000851f, -0.002001f, -0.001996f, 0.003215f, -0.000122f, 0.001088f, -0.002344f, -0.038719f, 0.000113f, -0.007143f, 0.002699f, -0.000203f, 0.014702f, 0.010547f, 0.015225f, -0.002574f, 0.020717f, -0.009686f, 0.014138f, 0.016999f, 0.003310f, 0.016945f, 0.003843f, 0.004318f, -0.004626f, -0.001860f, -0.007013f, 0.013416f, -0.000671f, -0.001651f, 0.019226f, 0.011404f, 0.000351f, 0.005029f, -0.001447f, -0.000744f, 0.012571f, -0.007188f, -0.012080f, -0.000112f, -0.001518f, 0.006196f, -0.034486f, 0.020755f, 0.022679f, 0.008784f, 0.004566f, 0.000504f, -0.010832f, -0.023212f, 0.015469f, -0.009406f, -0.010319f, -0.007127f, 0.013909f, -0.009739f, 0.008659f, 0.008505f, -0.008012f, -0.005519f, + -0.019766f, 0.009117f, -0.012785f, 0.007633f, 0.001494f, 0.006830f, 0.012347f, 0.019308f, 0.008524f, -0.009011f, -0.021107f, -0.003827f, 0.013259f, 0.021292f, 0.016249f, -0.003302f, -0.004021f, -0.013794f, -0.022610f, -0.002479f, 0.016014f, 0.006988f, 0.005204f, -0.005124f, 0.021185f, -0.000770f, 0.007275f, 0.001976f, -0.003835f, 0.001931f, -0.010478f, -0.005261f, -0.005189f, 0.003517f, -0.002465f, -0.007691f, -0.004286f, -0.005326f, -0.005487f, 0.002246f, -0.007902f, -0.003425f, 0.001797f, 0.001365f, 0.006522f, 0.000298f, 0.001127f, 0.001046f, -0.001470f, 0.005102f, -0.001380f, 0.005809f, 0.002351f, -0.001702f, -0.004243f, -0.000260f, 0.005878f, 0.003983f, -0.000463f, -0.005511f, -0.001199f, 0.004833f, 0.004601f, 0.000601f, -0.000740f, -0.000679f, -0.003071f, -0.002486f, 0.003870f, 0.014613f, 0.050579f, 0.027413f, -0.002267f, 0.004758f, 0.004669f, 0.011092f, 0.020126f, -0.002795f, 0.004125f, 0.033728f, 0.003662f, -0.001468f, 0.020568f, 0.014206f, -0.013815f, 0.008393f, 0.002274f, 0.013595f, 0.009581f, -0.023402f, 0.018076f, -0.010817f, -0.001296f, 0.002042f, 0.014212f, 0.002539f, + 0.004040f, 0.010658f, 0.012442f, -0.011575f, 0.012777f, 0.037312f, -0.006304f, 0.017012f, 0.017676f, -0.009217f, 0.013926f, 0.003666f, -0.008685f, -0.009650f, 0.006905f, -0.008618f, -0.022890f, -0.002940f, -0.000798f, 0.002444f, -0.029375f, -0.007182f, 0.009409f, -0.018704f, -0.012346f, -0.030846f, 0.010513f, 0.014288f, -0.020846f, -0.007474f, -0.009904f, 0.022442f, 0.000833f, -0.012735f, -0.008671f, -0.014189f, 0.007456f, 0.018794f, -0.013015f, 0.007286f, -0.005364f, 0.009098f, 0.021468f, 0.008963f, 0.016977f, 0.017026f, 0.021442f, 0.003305f, -0.011556f, -0.011763f, 0.008778f, 0.013468f, 0.002238f, 0.009072f, -0.009177f, 0.003861f, -0.000857f, -0.002874f, -0.009646f, 0.001437f, -0.004109f, 0.000642f, 0.008405f, 0.003499f, 0.003725f, 0.002811f, 0.009254f, -0.005476f, 0.000637f, -0.001425f, 0.002978f, -0.000977f, 0.000626f, 0.003895f, 0.001332f, -0.003076f, 0.005112f, -0.000972f, -0.006549f, 0.004355f, -0.004583f, -0.003856f, -0.004762f, -0.010238f, 0.005909f, -0.002284f, 0.005052f, -0.000463f, -0.000642f, 0.001468f, 0.008011f, 0.005257f, 0.007186f, 0.003280f, 0.000246f, 0.002901f, + 0.008236f, -0.003117f, 0.007466f, 0.052106f, 0.013675f, 0.002373f, -0.003177f, -0.007248f, 0.000139f, 0.009963f, -0.006476f, -0.011727f, -0.017925f, 0.001592f, 0.012491f, -0.015532f, 0.007587f, 0.010634f, -0.004626f, 0.035247f, 0.012198f, -0.008462f, -0.006150f, -0.002384f, 0.012397f, -0.004936f, -0.011844f, -0.012603f, 0.007875f, -0.027799f, 0.000821f, -0.007678f, -0.010411f, 0.009199f, 0.001819f, -0.010055f, -0.006511f, -0.009657f, 0.013827f, -0.004401f, -0.022363f, -0.002486f, 0.000351f, 0.001862f, -0.013036f, -0.017913f, 0.001555f, -0.003190f, -0.002615f, 0.006346f, -0.003994f, 0.017156f, 0.003352f, 0.010307f, -0.010985f, 0.024884f, 0.007025f, -0.012162f, 0.016204f, 0.031427f, -0.009116f, -0.007521f, 0.015867f, 0.014942f, 0.006017f, 0.009153f, -0.019425f, -0.004988f, -0.020989f, 0.006285f, 0.019424f, 0.008996f, -0.024580f, -0.004829f, 0.007620f, -0.024021f, -0.038018f, -0.003149f, 0.001126f, 0.010896f, 0.034297f, 0.002876f, -0.004034f, -0.010625f, -0.008258f, 0.005512f, 0.008613f, 0.007442f, -0.000641f, 0.003992f, 0.000226f, -0.007492f, 0.004606f, 0.006043f, -0.009794f, -0.009162f, + 0.010342f, -0.003403f, 0.006038f, 0.004754f, 0.002995f, -0.002545f, 0.002146f, -0.000180f, 0.003519f, 0.000956f, 0.005400f, 0.000217f, 0.004762f, 0.003461f, 0.000999f, -0.004416f, 0.010020f, 0.003270f, 0.009143f, -0.001894f, -0.003167f, 0.003408f, -0.006262f, -0.001018f, 0.004315f, -0.005785f, 0.001425f, 0.003378f, 0.001984f, 0.002213f, 0.004875f, -0.001935f, -0.009065f, -0.000116f, -0.001005f, -0.009551f, 0.001348f, -0.004016f, -0.001187f, 0.003815f, 0.003085f, 0.003458f, -0.040340f, 0.019022f, 0.053358f, -0.021890f, 0.037411f, -0.008388f, -0.008208f, -0.011659f, -0.019511f, 0.014465f, 0.000423f, 0.009897f, 0.009587f, -0.035050f, 0.000332f, 0.016400f, -0.014376f, -0.007478f, -0.022260f, 0.039192f, -0.024558f, 0.019358f, 0.018080f, -0.023262f, -0.009748f, -0.008096f, 0.016273f, -0.018608f, -0.007758f, 0.019007f, -0.003462f, -0.005051f, -0.009401f, 0.023170f, 0.003919f, -0.003720f, -0.009680f, 0.000635f, -0.017776f, 0.019100f, -0.002434f, 0.008796f, 0.047406f, 0.031953f, -0.027573f, -0.019365f, 0.007294f, -0.002455f, 0.019721f, -0.010927f, -0.016252f, -0.005695f, -0.030053f, -0.011512f, + -0.003742f, -0.022918f, -0.013307f, 0.050875f, 0.011930f, 0.000191f, -0.002707f, -0.000553f, 0.014758f, 0.017927f, -0.003996f, 0.017706f, 0.001202f, -0.009717f, 0.001693f, -0.027133f, -0.002270f, -0.025144f, -0.013809f, 0.015155f, 0.021968f, -0.033345f, 0.013294f, -0.008548f, -0.010826f, 0.016151f, -0.002612f, -0.015355f, -0.001124f, -0.006024f, -0.012278f, 0.006157f, 0.004208f, -0.008403f, -0.020952f, -0.009983f, -0.002330f, -0.001650f, 0.016103f, 0.004839f, 0.003836f, -0.008926f, -0.000102f, -0.003690f, 0.008518f, 0.009788f, -0.005495f, 0.004167f, 0.007151f, 0.008043f, 0.006091f, 0.009147f, -0.003885f, 0.000608f, -0.006561f, 0.000468f, -0.007602f, -0.003952f, 0.002560f, -0.002076f, -0.006184f, -0.001450f, 0.002900f, -0.009862f, -0.005080f, -0.005376f, -0.003194f, -0.003805f, -0.004708f, -0.000622f, 0.005282f, 0.000353f, -0.000689f, 0.006283f, -0.042888f, 0.007515f, 0.039322f, -0.010200f, -0.010332f, 0.008744f, -0.012519f, -0.009826f, 0.010924f, -0.001304f, -0.002465f, -0.000304f, -0.027087f, 0.045735f, -0.048674f, -0.004494f, -0.001352f, 0.016760f, 0.009742f, 0.000757f, -0.018630f, -0.013059f, + 0.005551f, 0.035740f, -0.003137f, -0.015534f, -0.010972f, -0.025101f, -0.001966f, -0.014683f, -0.012047f, -0.005054f, 0.007673f, -0.000698f, 0.000939f, -0.016959f, 0.003193f, 0.004995f, 0.010688f, 0.009236f, 0.010763f, -0.023073f, -0.000140f, -0.004602f, 0.015010f, 0.003998f, 0.030707f, 0.006823f, -0.007411f, 0.002867f, -0.017079f, 0.000003f, 0.013275f, 0.017575f, -0.026811f, -0.020480f, -0.002173f, 0.027851f, -0.043610f, 0.011520f, 0.049837f, 0.027661f, -0.013620f, 0.004760f, -0.027140f, 0.011484f, 0.024512f, -0.042208f, 0.009250f, -0.020497f, -0.006044f, -0.057269f, 0.000083f, -0.024050f, 0.022170f, 0.001679f, -0.026879f, 0.017871f, -0.001909f, -0.034267f, -0.004791f, -0.021618f, 0.013997f, -0.011981f, -0.018168f, 0.024613f, -0.004921f, 0.004484f, -0.008344f, -0.010462f, -0.003090f, 0.010607f, 0.007632f, -0.005725f, -0.001670f, 0.000597f, -0.006243f, 0.003960f, 0.005760f, 0.008811f, -0.008930f, 0.003613f, 0.004457f, -0.010221f, 0.000474f, 0.004735f, -0.007625f, 0.000888f, -0.004998f, 0.011667f, 0.005983f, 0.014163f, -0.006801f, -0.005047f, 0.004512f, -0.013147f, -0.001588f, -0.003645f, + -0.002262f, -0.000511f, 0.002663f, -0.007291f, 0.000317f, -0.000808f, 0.002454f, 0.002764f, 0.000312f, -0.007350f, -0.004486f, -0.011604f, -0.032339f, 0.051173f, 0.015053f, 0.026774f, -0.030132f, -0.033997f, -0.006023f, 0.008970f, -0.009196f, -0.004577f, 0.017456f, 0.004689f, 0.005625f, 0.015157f, -0.037387f, -0.004147f, 0.000804f, 0.009560f, -0.025901f, 0.003429f, 0.004774f, -0.018248f, -0.009748f, -0.025130f, -0.018563f, -0.000141f, 0.008395f, -0.020333f, 0.001850f, -0.009216f, -0.017743f, 0.007024f, 0.000285f, 0.014436f, -0.039611f, -0.041701f, 0.008977f, -0.003578f, 0.015978f, 0.034983f, 0.004202f, -0.022003f, 0.031554f, -0.015579f, -0.029104f, -0.022627f, -0.009401f, 0.002516f, -0.030925f, -0.012044f, 0.030911f, 0.041628f, 0.017797f, 0.011669f, 0.008911f, -0.004792f, 0.026739f, 0.015008f, -0.030742f, -0.016868f, 0.000378f, 0.003115f, 0.029245f, 0.018690f, 0.004856f, -0.004440f, -0.003397f, -0.014223f, 0.019479f, 0.015160f, 0.033725f, 0.007701f, 0.009962f, 0.004114f, 0.060406f, 0.006868f, 0.023518f, -0.024879f, 0.002336f, 0.022936f, -0.054381f, 0.004520f, 0.007404f, 0.015421f, + -0.005474f, 0.008225f, -0.006945f, -0.001798f, 0.009550f, -0.004477f, 0.029111f, -0.011559f, 0.017097f, -0.004411f, -0.010078f, -0.005447f, -0.010915f, 0.000372f, 0.004718f, 0.005734f, -0.002120f, -0.005532f, 0.012250f, -0.003560f, 0.008262f, -0.004238f, -0.004429f, -0.008745f, 0.009252f, 0.009950f, 0.002296f, 0.001002f, -0.007214f, -0.012723f, 0.006141f, -0.001061f, 0.000578f, 0.015240f, -0.004113f, 0.013358f, -0.001893f, 0.007828f, 0.005430f, 0.010300f, 0.002470f, -0.009431f, -0.001645f, 0.034806f, 0.001997f, 0.043176f, -0.001846f, -0.019648f, -0.022012f, -0.040296f, 0.006993f, -0.016967f, -0.001554f, 0.003511f, 0.014084f, 0.021207f, 0.035309f, 0.037093f, -0.006177f, 0.033022f, -0.002902f, -0.002836f, 0.012024f, 0.027827f, 0.011649f, 0.007805f, -0.044695f, -0.022691f, -0.036431f, 0.018253f, 0.035586f, 0.007019f, -0.016023f, 0.025182f, 0.035696f, -0.004875f, 0.005159f, -0.008448f, 0.029939f, 0.025700f, 0.021346f, -0.012890f, -0.023379f, -0.003637f, -0.006404f, -0.051012f, 0.008448f, 0.006989f, 0.004094f, -0.012966f, -0.007226f, -0.056893f, -0.020590f, -0.051639f, -0.009494f, -0.038672f, + -0.020500f, 0.037307f, 0.009446f, 0.039303f, 0.002162f, -0.032173f, -0.016101f, -0.033479f, -0.064411f, 0.009036f, -0.039972f, -0.011530f, 0.037295f, 0.015749f, 0.014415f, 0.003116f, -0.007591f, -0.002756f, 0.007012f, -0.027537f, 0.021690f, -0.046981f, -0.048829f, -0.002685f, -0.004510f, -0.006048f, -0.035958f, -0.008089f, 0.046718f, -0.002567f, 0.002603f, -0.012548f, -0.041022f, 0.020706f, -0.027673f, -0.010763f, -0.027545f, -0.016873f, -0.013011f, -0.008708f, -0.010084f, -0.006069f, 0.000403f, 0.004835f, -0.025769f, -0.011003f, 0.004709f, 0.004573f, 0.014076f, 0.006683f, -0.008697f, -0.010767f, 0.009135f, -0.017266f, -0.002802f, 0.005342f, -0.013406f, 0.004192f, 0.003850f, 0.009618f, -0.009205f, -0.003148f, -0.004984f, -0.000702f, 0.006239f, -0.003783f, -0.000716f, -0.005076f, 0.010021f, 0.014046f, -0.004769f, -0.002265f, 0.003661f, 0.004717f, 0.008702f, 0.012447f, 0.002167f, -0.002119f, -0.003114f, -0.002954f, 0.020217f, 0.040583f, 0.035414f, 0.038053f, -0.021914f, -0.038278f, 0.029445f, -0.017427f, 0.030431f, 0.009079f, -0.048766f, 0.012256f, 0.009137f, -0.055009f, 0.029592f, -0.025078f, + -0.025542f, 0.014981f, 0.016767f, 0.002614f, 0.019895f, 0.001491f, 0.001033f, -0.012905f, -0.007404f, 0.012062f, -0.007594f, -0.018861f, 0.001307f, -0.035433f, 0.012845f, -0.045041f, -0.027337f, 0.001673f, 0.017914f, -0.006149f, -0.018578f, 0.006985f, 0.014140f, 0.010488f, 0.000873f, 0.036273f, -0.083329f, -0.018934f, -0.022787f, -0.027695f, 0.036221f, -0.029167f, -0.003939f, -0.067256f, -0.018764f, -0.007992f, 0.003558f, 0.044843f, -0.010768f, 0.005668f, -0.027028f, 0.022741f, -0.033641f, -0.021830f, 0.017568f, -0.078094f, 0.011423f, 0.041730f, 0.054270f, 0.041399f, 0.026277f, 0.060954f, 0.033730f, -0.000739f, -0.015018f, -0.015662f, -0.023517f, -0.052578f, -0.005635f, 0.004901f, -0.074278f, -0.029430f, -0.022409f, -0.016794f, 0.023868f, 0.062268f, 0.072833f, 0.048179f, -0.024345f, 0.019867f, -0.015667f, -0.003428f, 0.016552f, 0.011182f, -0.006268f, 0.003919f, 0.005503f, -0.001467f, 0.002588f, -0.011460f, 0.006632f, 0.020411f, -0.009526f, 0.002708f, -0.017933f, 0.004410f, -0.008354f, -0.001249f, -0.000798f, 0.015757f, 0.028067f, -0.010060f, 0.001846f, 0.006781f, 0.011488f, -0.016955f, + -0.026095f, 0.000466f, 0.020489f, 0.005894f, -0.016607f, 0.015614f, 0.008336f, -0.017015f, 0.012003f, 0.007563f, -0.006427f, -0.005252f, -0.001705f, -0.003216f, 0.003185f, 0.006311f, -0.005844f, 0.011379f, -0.071693f, 0.000222f, 0.011847f, 0.050335f, -0.016427f, 0.023352f, 0.021038f, 0.011270f, 0.011465f, -0.078123f, 0.061695f, 0.033816f, 0.076465f, 0.028268f, -0.003357f, -0.028262f, -0.018081f, -0.017628f, -0.027739f, 0.019967f, 0.014532f, -0.027959f, -0.032013f, 0.017111f, 0.022951f, 0.040166f, 0.011198f, -0.024626f, -0.037078f, 0.008065f, 0.006286f, 0.002773f, 0.004458f, 0.071193f, 0.024032f, 0.013787f, 0.023382f, 0.025905f, 0.028908f, 0.000896f, -0.045019f, 0.031933f, 0.099018f, -0.009879f, -0.027567f, -0.060013f, -0.012942f, 0.080078f, 0.009345f, 0.033285f, 0.011076f, -0.110125f, 0.022787f, 0.020069f, 0.002338f, 0.011604f, -0.007702f, 0.001956f, 0.022544f, -0.059155f, -0.024638f, 0.050696f, 0.018738f, 0.007187f, -0.044710f, 0.032250f, 0.011895f, -0.040038f, -0.043730f, -0.029090f, 0.040115f, 0.083633f, 0.077604f, 0.085735f, 0.086702f, 0.003760f, -0.038541f, -0.031431f, + -0.075711f, -0.024524f, 0.024020f, -0.061158f, -0.000480f, -0.049768f, 0.000754f, 0.067685f, 0.026333f, 0.028094f, 0.033532f, 0.021233f, -0.020446f, -0.006463f, -0.025231f, 0.036983f, -0.022039f, -0.019162f, 0.006718f, -0.003861f, -0.013058f, -0.023817f, -0.006918f, 0.025345f, 0.023623f, -0.010559f, 0.036467f, -0.001269f, 0.001059f, -0.016046f, 0.005504f, 0.019203f, -0.004598f, -0.013837f, -0.013717f, 0.009818f, -0.007521f, 0.020959f, 0.013090f, 0.017068f, 0.024377f, -0.024214f, 0.006455f, 0.002635f, 0.011273f, -0.004634f, -0.010401f, 0.022294f, 0.005398f, 0.018299f, -0.009415f, 0.007021f, -0.014351f, -0.004258f, -0.022145f, 0.035455f, 0.072223f, -0.146364f, -0.051625f, 0.011430f, -0.085498f, -0.078421f, -0.033924f, -0.047623f, 0.005456f, -0.035068f, 0.092798f, -0.009868f, -0.032831f, -0.013320f, -0.070957f, -0.019678f, -0.057242f, -0.023860f, 0.010091f, -0.073901f, -0.012301f, 0.057238f, -0.047846f, -0.013801f, 0.016611f, -0.000284f, 0.024001f, 0.005011f, 0.000205f, 0.021349f, 0.008048f, -0.036720f, -0.006748f, 0.032686f, -0.016387f, -0.045737f, -0.014884f, -0.055464f, -0.027161f, -0.097158f, + 0.009639f, -0.066185f, 0.032129f, 0.011820f, -0.024093f, -0.085705f, 0.008123f, -0.009133f, 0.105803f, 0.041969f, 0.002151f, 0.057308f, 0.025054f, 0.000529f, 0.046809f, -0.054974f, -0.025931f, 0.004107f, 0.041427f, -0.045537f, -0.027445f, 0.153081f, -0.014442f, 0.079291f, -0.061634f, -0.000151f, -0.043980f, 0.033277f, -0.015496f, 0.051912f, 0.081693f, 0.002165f, -0.057682f, 0.049528f, -0.061466f, -0.027954f, 0.020778f, -0.063878f, -0.042670f, -0.020369f, 0.046424f, 0.088565f, -0.105375f, 0.088790f, 0.017777f, 0.025959f, 0.009810f, 0.012465f, 0.009463f, -0.013113f, 0.016050f, 0.045995f, -0.023258f, 0.008074f, -0.004519f, 0.006009f, -0.049921f, -0.008963f, -0.015301f, 0.015055f, 0.015391f, 0.049139f, -0.030706f, -0.017790f, -0.023943f, 0.034098f, -0.043589f, 0.010491f, 0.016023f, 0.014794f, 0.016157f, -0.071737f, -0.017135f, 0.025879f, -0.012404f, -0.030653f, -0.004088f, 0.008475f, 0.001750f, 0.030418f, 0.015325f, 0.024150f, -0.024253f, -0.021534f, 0.024389f, 0.007216f, 0.016360f, -0.016141f, 0.016456f, 0.011327f, 0.003023f, 0.006200f, -0.006903f, -0.007429f, 0.000203f, -0.035444f, + -0.034522f, -0.055146f, 0.114124f, -0.065505f, 0.041905f, 0.037602f, -0.059544f, 0.032738f, 0.017873f, 0.012987f, -0.010638f, 0.045289f, 0.023271f, -0.057281f, 0.040686f, 0.047566f, 0.009176f, 0.008203f, 0.028638f, -0.000578f, -0.057141f, 0.074413f, -0.042404f, 0.016983f, -0.031535f, -0.007077f, 0.009325f, -0.013706f, 0.060492f, 0.013805f, -0.007994f, -0.014332f, -0.003159f, 0.012076f, -0.061560f, 0.019752f, -0.031904f, -0.021329f, -0.014758f, 0.000106f, -0.030187f, -0.014113f, 0.007367f, 0.064190f, 0.000719f, -0.013125f, -0.040692f, 0.017305f, 0.011289f, 0.002193f, 0.049657f, -0.011756f, -0.005115f, 0.059340f, 0.018622f, 0.003771f, -0.056880f, -0.029456f, 0.036825f, 0.020911f, -0.053266f, 0.002071f, -0.121144f, -0.059665f, 0.108781f, -0.025074f, 0.058894f, 0.077424f, 0.022022f, 0.013525f, 0.034983f, -0.014439f, -0.042446f, 0.023314f, 0.007303f, -0.002305f, 0.049184f, 0.032364f, -0.035083f, -0.084145f, -0.017364f, 0.034997f, 0.011155f, -0.001525f, 0.027614f, -0.031434f, 0.047662f, -0.022702f, 0.017959f, 0.022747f, 0.009912f, 0.033185f, 0.024927f, 0.040124f, 0.004700f, -0.009614f, + 0.014522f, 0.038970f, -0.009806f, 0.034234f, 0.020351f, -0.020953f, 0.007011f, 0.018593f, 0.012253f, 0.008157f, 0.024318f, 0.020984f, 0.009090f, 0.041057f, -0.012459f, 0.005558f, -0.005512f, -0.001586f, -0.009925f, 0.036694f, 0.029761f, 0.024763f, -0.010850f, 0.005702f, 0.042296f, -0.009691f, 0.031089f, 0.028970f, 0.000371f, 0.049568f, -0.043260f, 0.007638f, 0.066368f, 0.010058f, 0.019016f, -0.012045f, 0.046793f, 0.010784f, 0.017937f, 0.064899f, -0.020058f, -0.108345f, 0.018400f, -0.013024f, 0.037312f, 0.011459f, -0.036766f, 0.019094f, 0.022365f, -0.041848f, -0.046002f, -0.030745f, -0.076804f, -0.077255f, 0.053209f, -0.012274f, -0.079413f, -0.024306f, 0.008167f, 0.026337f, 0.025193f, -0.048608f, -0.052719f, 0.005240f, 0.073460f, -0.035059f, 0.028388f, -0.049341f, 0.017615f, -0.055670f, 0.036356f, 0.038363f, -0.027251f, -0.057293f, -0.039383f, -0.006334f, 0.022591f, -0.024557f, -0.016139f, -0.020435f, -0.072867f, -0.062994f, 0.033164f, -0.052876f, -0.010717f, 0.018930f, -0.043602f, -0.070538f, 0.027084f, 0.037116f, -0.004596f, -0.084932f, 0.038169f, 0.033426f, 0.107653f, 0.000566f, + 0.028393f, 0.021113f, -0.045730f, 0.017652f, -0.014072f, -0.092839f, -0.014017f, 0.056857f, 0.013745f, -0.046939f, -0.116340f, 0.073688f, 0.094367f, -0.027928f, 0.076397f, 0.088645f, 0.004863f, 0.004052f, 0.070334f, -0.045320f, 0.003854f, 0.117307f, -0.086102f, 0.050307f, -0.073681f, -0.020318f, -0.005620f, 0.050513f, -0.016710f, 0.007339f, 0.028793f, -0.000893f, -0.065065f, 0.072203f, -0.012584f, -0.008495f, 0.011654f, 0.030125f, -0.048693f, 0.021538f, 0.013308f, -0.007489f, 0.015683f, 0.017493f, -0.044975f, -0.006269f, 0.011393f, 0.023906f, 0.050653f, -0.004323f, -0.042937f, 0.022117f, 0.052055f, -0.040884f, 0.050842f, -0.023828f, -0.004350f, -0.017758f, 0.057317f, -0.039159f, 0.014414f, 0.034927f, -0.023219f, 0.008550f, 0.007381f, -0.032773f, 0.008333f, 0.013653f, -0.004877f, -0.025034f, 0.017386f, 0.020022f, -0.010032f, 0.040196f, -0.059644f, 0.014550f, 0.019417f, 0.000272f, 0.005335f, 0.007739f, 0.042462f, -0.009890f, 0.023998f, -0.049260f, -0.154113f, 0.041315f, -0.017463f, 0.114931f, -0.039346f, -0.025839f, -0.046004f, -0.132692f, 0.060781f, -0.077544f, -0.044748f, 0.001840f, + 0.000115f, 0.101449f, -0.072701f, -0.051613f, 0.067397f, 0.039435f, 0.035238f, -0.013217f, 0.033663f, -0.024208f, -0.033439f, -0.031538f, 0.078936f, 0.064924f, 0.102556f, -0.033169f, -0.038176f, 0.001215f, -0.006628f, 0.036990f, -0.061529f, 0.012604f, -0.064692f, 0.033994f, 0.063648f, 0.021185f, -0.052264f, 0.035027f, -0.046080f, 0.103253f, 0.052960f, 0.014042f, 0.014037f, -0.016731f, -0.081462f, 0.045364f, -0.110527f, 0.022391f, 0.020590f, 0.053298f, 0.042861f, -0.096214f, 0.028783f, -0.060888f, -0.035733f, 0.025258f, -0.009519f, 0.034878f, 0.022778f, -0.088078f, 0.035629f, 0.079425f, 0.105973f, -0.031563f, 0.031257f, -0.044105f, 0.074332f, -0.106545f, -0.005683f, -0.020089f, 0.033275f, 0.068719f, 0.099766f, -0.080813f, 0.019780f, -0.107863f, 0.068631f, 0.140092f, -0.035973f, -0.096955f, -0.007910f, -0.073353f, 0.092366f, 0.022584f, -0.047478f, -0.014292f, 0.005148f, -0.016763f, 0.065860f, 0.023950f, -0.037622f, 0.034618f, -0.053178f, 0.002474f, 0.049320f, -0.011343f, -0.061284f, 0.066592f, -0.097612f, 0.027186f, -0.015037f, 0.037860f, -0.002821f, 0.023117f, -0.022817f, -0.013055f, + 0.009488f, 0.007479f, 0.009893f, 0.045063f, -0.047648f, -0.040746f, 0.001731f, 0.009543f, -0.011395f, -0.050348f, -0.036518f, 0.070967f, 0.018909f, -0.033198f, -0.037518f, -0.083459f, 0.097950f, 0.075958f, -0.030638f, -0.027597f, -0.058093f, 0.000976f, 0.072972f, 0.012913f, -0.031589f, -0.012305f, -0.017051f, 0.010671f, 0.007223f, 0.002750f, -0.009652f, -0.004782f, 0.013175f, -0.002107f, -0.008152f, -0.006271f, 0.008538f, 0.002639f, 0.017621f, -0.008726f, -0.122982f, 0.088276f, -0.012829f, -0.001817f, 0.027245f, 0.025742f, 0.032744f, 0.011095f, 0.015229f, -0.041177f, 0.039001f, 0.012605f, -0.045060f, 0.030890f, -0.018823f, 0.000795f, 0.038098f, 0.024416f, -0.063475f, 0.036302f, -0.030821f, 0.053109f, -0.039084f, 0.014541f, -0.020695f, 0.025503f, -0.019794f, 0.012518f, -0.028752f, 0.060860f, -0.006728f, 0.003087f, 0.016207f, 0.021376f, -0.031547f, -0.004804f, 0.012121f, 0.021273f, 0.016637f, -0.019422f, 0.006083f, 0.002329f, -0.061785f, -0.003559f, 0.014216f, 0.023658f, 0.008228f, 0.015688f, -0.055726f, 0.010104f, -0.004584f, 0.006936f, 0.011069f, -0.009288f, 0.010389f, 0.010518f, + 0.003698f, -0.011666f, -0.013687f, -0.002725f, 0.061432f, -0.020633f, 0.011085f, 0.024831f, -0.014587f, 0.023703f, -0.026695f, 0.022900f, 0.009692f, -0.015440f, -0.026857f, 0.017466f, -0.017062f, 0.014022f, -0.024311f, -0.018249f, -0.010507f, 0.030381f, -0.008924f, 0.004282f, 0.004294f, -0.000583f, 0.005387f, -0.021366f, 0.015806f, -0.013243f, 0.036508f, -0.033850f, 0.014993f, -0.019571f, 0.017364f, -0.015695f, 0.013564f, 0.001976f, 0.024116f, -0.020694f, 0.010402f, -0.009817f, -0.000326f, 0.006125f, 0.013518f, -0.014393f, 0.002077f, -0.015647f, 0.022710f, -0.018851f, -0.007413f, 0.013979f, 0.003310f, -0.008351f, -0.004726f, 0.015602f, 0.007441f, -0.032074f, 0.017057f, 0.003347f, -0.001621f, -0.001870f, 0.004982f, -0.002506f, 0.001740f, -0.000892f, 0.002496f, 0.002865f, 0.006901f, -0.007792f, 0.022192f, -0.028883f, 0.007917f, -0.003747f, 0.004716f, -0.003973f, 0.006904f, -0.002484f, -0.005572f, -0.001047f, 0.002558f, -0.006404f, 0.096551f, -0.006951f, -0.031274f, -0.047667f, -0.021679f, -0.026752f, 0.035031f, 0.020274f, -0.025469f, 0.002138f, 0.003004f, 0.011460f, 0.001575f, 0.024275f, + 0.008378f, 0.019125f, -0.006546f, -0.000667f, -0.005726f, 0.008979f, 0.020720f, -0.019205f, -0.000112f, -0.009491f, 0.000688f, 0.025278f, -0.014310f, 0.002492f, -0.006458f, 0.009981f, 0.005153f, -0.013818f, -0.005117f, 0.014900f, -0.004546f, 0.024273f, 0.017260f, -0.025245f, 0.008130f, 0.005407f, 0.013293f, 0.005656f, -0.023873f, 0.016227f, -0.004446f, 0.015785f, 0.012618f, -0.028478f, 0.007861f, 0.000141f, 0.006459f, -0.003125f, -0.012496f, 0.020405f, -0.004962f, 0.009298f, 0.000527f, -0.006043f, 0.009460f, -0.012077f, -0.001661f, 0.017038f, -0.011611f, -0.013914f, 0.028330f, -0.018184f, 0.026434f, -0.002669f, -0.021318f, 0.043811f, -0.040095f, 0.034993f, -0.012320f, -0.020835f, 0.022174f, -0.020465f, 0.006155f, 0.007218f, -0.020052f, 0.017037f, -0.003556f, -0.001198f, 0.010887f, -0.013887f, 0.018375f, -0.005827f, -0.001335f, 0.004619f, -0.003048f, 0.006541f, -0.002988f, 0.001149f, 0.005419f, -0.005038f, 0.008619f, -0.000879f, -0.004779f, 0.010623f, -0.016195f, 0.008777f, -0.007153f, -0.003215f, 0.010242f, 0.000981f, -0.002968f, 0.005404f, -0.003771f, 0.005370f, 0.002764f, -0.007403f, + 0.005153f, 0.001172f, -0.001613f, -0.001137f, 0.004669f, 0.001136f, 0.008536f, -0.006489f, 0.002506f, 0.001245f, -0.004654f, 0.009510f, -0.002594f, -0.001312f, -0.047122f, -0.081326f, 0.102538f, 0.293023f, 0.046526f, 0.028233f, -0.214187f, -0.265198f, -0.084763f, -0.052282f, 0.179418f, 0.273242f, 0.140851f, 0.040587f, -0.091882f, -0.198013f, -0.180304f, -0.151328f, 0.012099f, 0.226335f, 0.189584f, 0.108461f, 0.037019f, -0.097119f, -0.125606f, -0.100042f, -0.096398f, -0.034219f, 0.045897f, 0.062733f, 0.130236f, 0.092981f, 0.022717f, -0.031725f, -0.018452f, -0.104910f, -0.050775f, -0.053101f, -0.071589f, 0.042515f, 0.080569f, 0.046362f, 0.117241f, 0.030946f, -0.027708f, -0.045164f, -0.077768f, -0.061710f, -0.009531f, -0.019194f, 0.024021f, 0.048310f, 0.043292f, 0.030700f, 0.021125f, -0.010811f, -0.042651f, -0.030389f, -0.035454f, 0.011301f, 0.041589f, 0.013535f, 0.010299f, -0.018155f, -0.037085f, -0.007103f, 0.000019f, -0.000685f, 0.030232f, 0.026841f, 0.030303f, 0.011781f, -0.010297f, -0.032506f, -0.046784f, -0.048126f, -0.031106f, 0.033127f, 0.049345f, 0.060946f, 0.042347f, -0.010763f, + -0.023779f, -0.025482f, -0.050154f, -0.022333f, 0.018449f, 0.009528f, 0.009211f, 0.014523f, 0.007145f, 0.005488f, -0.007680f, -0.010217f, 0.008039f, 0.017327f, -0.000261f, -0.001640f, -0.011915f, -0.016664f, -0.008490f, -0.010173f, -0.005797f, 0.012815f, -0.002176f, 0.026946f, 0.033529f, 0.019200f, -0.011469f, -0.019109f, -0.021174f, -0.027010f, -0.019549f, -0.026730f, 0.014346f, 0.036550f, 0.033558f, 0.019688f, 0.021001f, 0.007795f, -0.020441f, -0.040296f, -0.041004f, -0.020998f, -0.004134f, 0.012899f, 0.029410f, 0.042917f, 0.035411f, 0.006545f, -0.022610f, -0.037963f, -0.027636f, -0.009309f, 0.000387f, 0.010261f, 0.006716f, 0.016136f, 0.020883f, 0.006060f, -0.008865f, -0.012353f, -0.006770f, -0.005210f, -0.004869f, -0.001509f, 0.001596f, 0.009558f, 0.005944f, 0.000578f, -0.000013f, -0.000696f, -0.001803f, -0.004511f, -0.005096f, 0.001651f, 0.004175f, 0.003005f, -0.000597f, -0.000200f, -0.000484f, -0.001450f, -0.001671f, 0.000885f, 0.000816f, 0.001355f, 0.000434f, 0.000663f, -0.000866f, -0.001098f, -0.001964f, -0.001196f, 0.000459f, 0.002399f, 0.000524f, 0.000965f, 0.000888f, 0.000245f, + -0.001230f, 0.000034f, -0.001264f, -0.003466f, -0.002313f, 0.002285f, 0.002697f, 0.002803f, 0.001418f, 0.000071f, -0.001845f, -0.000753f, -0.001186f, -0.000624f, -0.001124f, 0.000488f, 0.000088f, 0.000409f, 0.000176f, 0.001377f, 0.000678f, 0.001324f, 0.000109f, -0.000157f, -0.001257f, -0.000988f, -0.001963f, -0.000887f, -0.000457f, 0.001530f, 0.001305f, 0.002338f, 0.001127f, 0.000381f, -0.001815f, -0.001547f, -0.001721f, -0.000452f, -0.000506f, 0.001346f, 0.000977f, 0.001087f, -0.000128f, 0.000181f, -0.000648f, 0.000102f, -0.000526f, 0.000231f, -0.000476f, 0.000301f, -0.000307f, 0.000406f, -0.000371f, 0.000328f, -0.000273f, 0.000509f, -0.000267f, 0.000360f, -0.000348f, 0.000312f, -0.000413f, 0.000339f} + }, + { + {-0.005310f, 0.020334f, 0.002407f, 0.005499f, 0.001980f, 0.002893f, -0.004877f, -0.012321f, -0.002343f, 0.006498f, 0.002356f, -0.006101f, -0.000821f, 0.004970f, -0.001248f, -0.007342f, 0.002250f, -0.008460f, -0.005203f, -0.000265f, 0.002366f, -0.002406f, -0.001870f, 0.005242f, -0.007252f, -0.000174f, 0.000968f, 0.003529f, 0.002840f, 0.002687f, 0.008955f, 0.004027f, -0.011033f, -0.002821f, -0.004991f, 0.001407f, -0.000242f, -0.000832f, -0.006929f, -0.009085f, 0.012090f, -0.005552f, 0.002992f, 0.003514f, 0.003067f, -0.011420f, -0.006448f, -0.002984f, 0.001310f, -0.000885f, -0.000307f, -0.001038f, 0.001978f, 0.004371f, -0.005924f, -0.000001f, 0.003257f, 0.003743f, 0.004505f, 0.001654f, 0.000138f, 0.004325f, 0.001586f, -0.001854f, -0.000492f, 0.007013f, -0.005134f, -0.005476f, -0.002905f, -0.002186f, 0.006037f, 0.003551f, 0.001485f, -0.002213f, 0.005822f, -0.002549f, 0.003048f, -0.006790f, -0.000585f, 0.000545f, 0.001481f, 0.001434f, -0.005432f, 0.001510f, 0.003958f, 0.001981f, 0.000727f, -0.000471f, 0.005161f, 0.002451f, -0.000443f, 0.003290f, 0.002011f, 0.000876f, -0.000674f, 0.001124f, + 0.000951f, 0.000741f, -0.000896f, 0.001274f, 0.000426f, -0.000989f, -0.000737f, 0.001801f, 0.000467f, -0.000133f, 0.000101f, 0.000111f, 0.000377f, -0.001602f, 0.001260f, -0.000416f, 0.001008f, -0.001246f, -0.011505f, -0.007043f, 0.005003f, -0.011399f, -0.015943f, 0.003040f, 0.001446f, 0.001901f, 0.002410f, 0.002179f, -0.013698f, -0.002325f, 0.004065f, -0.008807f, 0.009239f, 0.008840f, 0.007718f, -0.003173f, 0.000768f, 0.001992f, 0.005925f, 0.001257f, -0.000136f, 0.001073f, -0.003921f, 0.003617f, -0.001377f, -0.001533f, -0.001812f, 0.011229f, -0.006688f, 0.003832f, -0.004201f, -0.003752f, -0.003767f, 0.002917f, 0.006244f, -0.006687f, -0.003235f, -0.003663f, 0.004584f, 0.004176f, 0.006934f, 0.004587f, 0.000973f, 0.005939f, -0.005080f, 0.003534f, 0.001430f, 0.001484f, 0.012675f, 0.002895f, 0.006292f, -0.010452f, -0.002748f, 0.004181f, -0.005135f, 0.004823f, -0.002193f, -0.003906f, 0.001397f, 0.007481f, 0.005154f, 0.003399f, -0.001809f, 0.001455f, 0.005689f, -0.006928f, 0.009055f, -0.001326f, 0.007427f, -0.003099f, 0.006134f, 0.007176f, 0.006166f, -0.003522f, -0.009051f, -0.013517f, + -0.009026f, 0.000774f, -0.004719f, 0.008760f, 0.001505f, 0.001285f, 0.002405f, -0.006430f, -0.001926f, -0.002950f, 0.003214f, -0.001818f, -0.001187f, 0.003797f, -0.004739f, -0.001792f, 0.001916f, -0.002755f, 0.000247f, -0.003064f, -0.002335f, -0.001982f, -0.000506f, 0.001738f, 0.000529f, 0.000219f, -0.003225f, 0.019527f, 0.013901f, 0.011525f, 0.009453f, 0.010813f, 0.004457f, -0.000778f, -0.000319f, -0.003921f, -0.001273f, 0.014199f, -0.006253f, -0.006293f, 0.009666f, 0.007302f, 0.009288f, -0.006494f, 0.002749f, -0.002419f, 0.002027f, 0.004235f, 0.005761f, 0.000913f, -0.004368f, -0.003121f, -0.005595f, -0.001912f, -0.003496f, -0.009973f, -0.001315f, 0.008490f, -0.006671f, -0.001095f, 0.003019f, -0.005119f, -0.004782f, 0.004819f, -0.002684f, -0.006652f, -0.003695f, 0.003857f, -0.005829f, -0.007326f, -0.003469f, -0.002149f, 0.002375f, -0.005102f, -0.010762f, 0.000791f, -0.001868f, -0.001457f, 0.002971f, -0.008709f, -0.004372f, 0.000192f, -0.003764f, 0.004849f, -0.001340f, 0.002109f, -0.015805f, -0.004729f, 0.008770f, -0.003472f, -0.008753f, 0.002601f, 0.001420f, 0.002459f, -0.003329f, -0.012423f, + -0.005763f, 0.014026f, 0.000840f, 0.005183f, 0.002849f, -0.001993f, 0.004155f, 0.005854f, 0.002339f, -0.002882f, -0.006816f, 0.000002f, 0.001555f, -0.005061f, 0.002181f, -0.006566f, -0.000790f, -0.004184f, -0.002168f, -0.005545f, -0.001174f, -0.003167f, -0.004148f, -0.003106f, 0.000497f, -0.001381f, 0.000598f, -0.001517f, 0.000435f, -0.002802f, 0.001885f, 0.001074f, -0.000889f, -0.000519f, 0.002486f, -0.000068f, -0.001058f, -0.002499f, -0.001400f, -0.001141f, -0.000310f, 0.000225f, -0.000060f, -0.002886f, 0.027487f, 0.017047f, 0.015943f, 0.000396f, 0.001516f, 0.001393f, -0.006654f, -0.014492f, -0.005596f, 0.011139f, -0.008411f, 0.005106f, 0.014832f, 0.001317f, -0.004794f, -0.001750f, -0.003087f, -0.001465f, 0.005963f, 0.008686f, 0.000245f, 0.002642f, 0.003439f, 0.005703f, 0.000280f, -0.007730f, 0.002365f, -0.012528f, -0.003861f, -0.001484f, -0.003566f, -0.002183f, 0.001528f, -0.002912f, -0.006681f, -0.005059f, -0.002432f, 0.000659f, -0.002889f, -0.007556f, 0.009077f, -0.003311f, 0.000629f, -0.002261f, -0.006009f, 0.007591f, 0.020800f, 0.005122f, -0.007273f, 0.012415f, 0.002793f, -0.003704f, + 0.003730f, -0.002044f, -0.008044f, 0.000121f, -0.003383f, 0.003193f, -0.006969f, -0.011954f, 0.000458f, 0.002079f, -0.014612f, 0.004439f, 0.003006f, 0.008233f, 0.004620f, 0.010855f, -0.003663f, -0.007200f, -0.004283f, -0.002189f, 0.005241f, -0.001846f, -0.009392f, 0.006474f, -0.004583f, -0.008463f, 0.005823f, -0.008454f, -0.004673f, 0.002771f, -0.003088f, 0.003030f, -0.002037f, -0.003445f, 0.002829f, 0.007314f, -0.001674f, -0.003487f, -0.001295f, 0.000072f, 0.002539f, 0.005166f, 0.001466f, -0.001406f, -0.001893f, -0.001784f, -0.000614f, 0.001287f, -0.003676f, -0.001210f, -0.001078f, 0.005659f, 0.002843f, 0.004029f, -0.000655f, 0.000391f, 0.003064f, 0.002137f, 0.001486f, -0.000087f, 0.000528f, -0.000558f, 0.001591f, -0.000952f, -0.000757f, -0.014078f, -0.022556f, -0.006774f, -0.011346f, 0.016190f, -0.003791f, -0.001856f, 0.005898f, -0.014731f, -0.010581f, 0.009016f, -0.007317f, -0.006571f, -0.000497f, -0.000501f, 0.001453f, 0.005972f, -0.002599f, 0.002772f, -0.004001f, -0.002778f, -0.000409f, -0.002448f, -0.006638f, -0.000488f, -0.001534f, 0.006887f, 0.006738f, 0.006125f, -0.008196f, 0.003832f, + 0.002586f, 0.011356f, -0.005821f, -0.000332f, -0.004007f, -0.008533f, 0.012130f, -0.011561f, -0.005865f, -0.004452f, 0.002748f, 0.010269f, -0.009579f, 0.010619f, -0.001292f, 0.005760f, 0.008632f, 0.001503f, 0.006618f, -0.012470f, 0.002613f, -0.004657f, 0.000496f, -0.013215f, 0.000096f, -0.004509f, -0.012052f, -0.009072f, 0.000559f, 0.008848f, 0.000305f, -0.006332f, 0.009838f, -0.003368f, 0.005627f, -0.000723f, -0.012511f, 0.017348f, -0.010951f, -0.002078f, -0.006301f, 0.004380f, 0.006851f, 0.004706f, 0.006307f, 0.014053f, 0.010514f, -0.001729f, 0.002063f, 0.006665f, 0.003993f, -0.004927f, 0.006935f, 0.005592f, -0.001222f, 0.003201f, -0.007152f, -0.009567f, -0.001209f, -0.003050f, 0.005222f, -0.005591f, -0.001358f, -0.005374f, -0.001440f, -0.002445f, -0.000997f, 0.001667f, 0.001816f, 0.001148f, -0.000434f, -0.001322f, 0.003050f, 0.001689f, -0.003555f, 0.002463f, -0.000045f, -0.008294f, -0.000950f, -0.002964f, 0.004554f, -0.001241f, -0.000775f, 0.001767f, -0.001128f, 0.001684f, 0.003518f, -0.000225f, 0.002202f, 0.002609f, -0.000726f, 0.000985f, 0.005041f, 0.000871f, 0.005859f, -0.015699f, + -0.022846f, 0.002734f, 0.001715f, 0.001467f, 0.014419f, -0.004537f, -0.016087f, 0.001878f, 0.001666f, -0.004002f, -0.001100f, -0.013789f, -0.002947f, 0.001938f, 0.001893f, 0.015845f, -0.002924f, 0.014220f, -0.003575f, -0.003423f, 0.000987f, -0.013722f, 0.005754f, -0.005050f, 0.008291f, -0.002150f, -0.003768f, -0.004975f, -0.002715f, 0.000692f, -0.010595f, 0.018191f, -0.012661f, -0.020041f, 0.005860f, 0.001125f, -0.014402f, -0.004006f, -0.027465f, 0.000665f, -0.009906f, 0.000061f, -0.010740f, -0.008362f, 0.001284f, 0.001162f, 0.004503f, -0.008433f, 0.006690f, -0.009541f, -0.019031f, 0.002437f, 0.005014f, -0.005515f, 0.005969f, -0.003037f, -0.010654f, -0.009013f, -0.012912f, -0.005840f, -0.001561f, 0.002274f, -0.004012f, 0.011982f, -0.000174f, -0.003492f, 0.000812f, 0.000903f, 0.002239f, 0.002025f, 0.001168f, -0.011124f, -0.010798f, 0.002431f, 0.007275f, 0.004617f, 0.001018f, -0.002309f, 0.009086f, 0.005308f, -0.004568f, -0.003018f, -0.010654f, -0.004122f, 0.004418f, 0.002375f, -0.005918f, 0.002471f, -0.001822f, -0.001503f, -0.002905f, -0.003116f, -0.001381f, -0.004169f, -0.003539f, 0.001962f, + 0.000614f, 0.002770f, 0.004227f, 0.000521f, 0.003674f, 0.000361f, -0.002848f, 0.003884f, 0.002071f, -0.000590f, 0.000282f, -0.001967f, -0.002394f, 0.000100f, -0.000078f, -0.002225f, -0.000164f, -0.000571f, -0.000387f, 0.000132f, -0.000798f, 0.002579f, -0.004179f, -0.000467f, -0.001449f, 0.000352f, 0.001056f, 0.002639f, -0.000197f, -0.035062f, -0.008750f, 0.001343f, -0.008901f, -0.006580f, -0.011145f, 0.002832f, 0.003957f, 0.007913f, -0.005989f, -0.007527f, -0.008426f, 0.004162f, 0.009440f, -0.004754f, -0.004009f, -0.002462f, -0.001429f, 0.004401f, -0.019507f, -0.004890f, 0.011050f, 0.003526f, -0.005703f, 0.002018f, 0.009787f, -0.001033f, -0.002479f, 0.003344f, -0.000602f, 0.023891f, -0.010300f, 0.005786f, 0.001940f, -0.010172f, 0.003332f, 0.002175f, -0.011473f, 0.008027f, -0.016307f, -0.001669f, 0.014448f, 0.003090f, -0.000412f, -0.003125f, -0.011147f, -0.009719f, 0.002580f, 0.006121f, -0.004193f, 0.002935f, 0.011969f, 0.005839f, -0.004963f, 0.007283f, -0.010614f, -0.025072f, -0.003302f, -0.011065f, 0.006952f, -0.007123f, 0.017744f, 0.008787f, -0.000814f, -0.003010f, -0.023003f, 0.007157f, + 0.008794f, -0.007156f, 0.014059f, -0.011023f, 0.004290f, -0.018405f, 0.008494f, 0.006321f, -0.020847f, -0.013368f, -0.004277f, 0.005049f, 0.006923f, 0.015092f, -0.002111f, -0.000834f, 0.009860f, 0.002186f, 0.000049f, -0.004502f, 0.002255f, 0.002185f, 0.002959f, 0.003134f, 0.000803f, -0.000505f, -0.001902f, -0.002259f, -0.005630f, -0.004773f, 0.003736f, 0.002555f, 0.001919f, 0.004547f, -0.001894f, 0.002144f, 0.002355f, -0.001283f, 0.003985f, -0.000635f, -0.000052f, -0.001054f, -0.004542f, -0.001091f, 0.005190f, 0.001071f, 0.003848f, -0.001539f, 0.001400f, -0.002151f, 0.006169f, 0.000489f, 0.005169f, 0.002193f, -0.002573f, 0.001255f, 0.008619f, 0.014944f, 0.033993f, 0.036609f, 0.007153f, 0.011102f, -0.000044f, 0.005396f, 0.000184f, 0.004037f, -0.009886f, 0.004726f, -0.006198f, 0.008277f, 0.007507f, 0.018965f, 0.002760f, -0.003578f, 0.011626f, 0.008698f, 0.014013f, 0.000922f, 0.008674f, 0.005342f, -0.004481f, 0.004632f, 0.020929f, 0.003583f, -0.009201f, -0.004661f, 0.015464f, 0.009873f, 0.007385f, 0.014728f, -0.011244f, 0.004596f, 0.017159f, -0.016944f, -0.020653f, 0.007051f, + 0.010924f, 0.018184f, -0.007860f, -0.013112f, 0.010760f, 0.004202f, -0.001712f, 0.007012f, -0.002801f, -0.001361f, -0.000182f, 0.025791f, -0.009303f, 0.005457f, -0.006229f, -0.003665f, -0.003077f, 0.013595f, -0.001829f, 0.029987f, 0.014175f, -0.013955f, 0.016533f, 0.003924f, 0.007678f, 0.003878f, 0.003551f, 0.004362f, -0.005486f, 0.010337f, -0.023534f, -0.005882f, 0.010706f, -0.023593f, 0.008152f, -0.018998f, 0.004505f, 0.021675f, 0.005244f, 0.000199f, 0.005835f, 0.002380f, -0.005769f, 0.001792f, -0.006127f, 0.001060f, 0.004899f, -0.014016f, 0.008226f, -0.002248f, -0.003432f, 0.001339f, 0.004454f, -0.003396f, -0.005735f, 0.002315f, 0.005183f, -0.002354f, -0.004844f, -0.004383f, -0.002796f, 0.002391f, -0.003414f, -0.002667f, 0.003245f, 0.004918f, 0.002128f, -0.001973f, 0.002963f, -0.001710f, -0.007383f, -0.002927f, -0.000086f, -0.003340f, 0.002148f, 0.001972f, 0.003139f, 0.005489f, 0.007438f, -0.003052f, 0.010479f, -0.003200f, -0.006053f, -0.001616f, 0.003751f, 0.001268f, -0.006147f, -0.003549f, -0.004450f, 0.056717f, 0.009431f, 0.009235f, -0.016872f, 0.024664f, -0.008443f, -0.000691f, + -0.006761f, 0.001722f, -0.016167f, -0.000829f, 0.007099f, 0.002144f, -0.013239f, 0.016399f, -0.004228f, -0.007956f, 0.001958f, 0.005390f, -0.016936f, -0.022933f, 0.009312f, -0.009259f, -0.014113f, 0.003068f, -0.000421f, -0.006710f, 0.011794f, -0.011871f, 0.003690f, 0.012172f, -0.002436f, 0.017572f, 0.005081f, -0.021450f, -0.023139f, -0.009389f, 0.001137f, 0.004510f, -0.018355f, 0.006874f, 0.006219f, 0.003788f, 0.005462f, 0.008314f, -0.019064f, -0.008984f, 0.005098f, -0.020522f, -0.007888f, -0.000137f, -0.021960f, -0.011224f, -0.007729f, 0.004744f, -0.011410f, -0.023146f, -0.011479f, -0.012198f, 0.026908f, 0.013523f, -0.002554f, 0.004093f, -0.007629f, 0.022024f, 0.025663f, 0.003288f, 0.017092f, 0.013072f, 0.004690f, 0.003502f, -0.010385f, -0.001814f, -0.009212f, 0.012995f, -0.016950f, 0.000936f, -0.004336f, -0.025125f, -0.008065f, -0.003299f, 0.013502f, -0.012242f, 0.006599f, 0.006337f, 0.002252f, 0.001713f, 0.005657f, -0.005713f, 0.004443f, -0.003292f, 0.004970f, -0.000963f, 0.007517f, 0.002691f, 0.000320f, -0.003739f, -0.001890f, -0.009572f, 0.004979f, -0.000990f, 0.008103f, -0.007736f, + -0.000381f, -0.000445f, 0.004680f, -0.000490f, 0.004140f, 0.002315f, 0.002082f, 0.002805f, 0.000899f, -0.005046f, 0.005924f, 0.008424f, -0.004460f, -0.005372f, -0.007154f, -0.002398f, -0.000828f, -0.002023f, 0.000299f, -0.001407f, -0.038415f, 0.025928f, 0.041646f, -0.031253f, -0.018600f, 0.008557f, 0.007470f, -0.006363f, 0.013677f, 0.003691f, -0.011652f, -0.014260f, -0.000304f, -0.004609f, -0.010174f, 0.005159f, -0.004689f, 0.000622f, 0.011495f, -0.015540f, 0.003237f, 0.002029f, -0.009229f, 0.001268f, -0.014643f, 0.002800f, 0.021417f, 0.010885f, -0.002186f, -0.006954f, -0.001799f, -0.012308f, -0.013080f, 0.006348f, 0.010803f, -0.003491f, -0.006053f, -0.004345f, 0.006438f, 0.010737f, 0.005135f, 0.019731f, -0.010718f, 0.008073f, -0.005198f, 0.001870f, 0.012295f, -0.004529f, -0.003976f, -0.023661f, -0.003682f, -0.018344f, 0.009106f, 0.006174f, 0.023402f, -0.020219f, -0.007496f, -0.019576f, -0.032138f, -0.005490f, 0.013289f, -0.022249f, 0.004822f, -0.002565f, -0.016248f, -0.019164f, -0.024107f, 0.032118f, 0.001115f, 0.019023f, 0.013970f, 0.016138f, -0.007474f, -0.021578f, -0.016348f, -0.020206f, + 0.006894f, 0.015589f, -0.015151f, 0.006949f, 0.016654f, -0.011508f, 0.001792f, 0.013451f, 0.015501f, 0.003600f, -0.005742f, 0.006541f, -0.002948f, 0.003411f, -0.016818f, -0.001699f, 0.006242f, -0.005833f, 0.001975f, 0.000855f, 0.000549f, 0.003543f, 0.006110f, -0.006786f, -0.002536f, 0.003631f, 0.005413f, 0.001371f, 0.002528f, 0.005262f, -0.001378f, 0.005697f, -0.005184f, 0.003829f, 0.005766f, 0.006440f, 0.000519f, -0.002757f, 0.004979f, -0.004483f, 0.001054f, -0.001209f, -0.003856f, -0.002044f, -0.003815f, -0.001231f, 0.001412f, -0.004678f, -0.012448f, 0.004013f, 0.006371f, -0.030413f, 0.022059f, -0.003096f, -0.010935f, 0.018226f, 0.006898f, -0.018486f, -0.025610f, -0.010404f, 0.000382f, 0.000136f, 0.001548f, -0.009645f, 0.029761f, 0.011802f, 0.009184f, 0.006385f, 0.009538f, -0.009395f, 0.002491f, 0.005422f, 0.004560f, 0.026031f, 0.003001f, -0.039903f, 0.005091f, 0.015960f, -0.014494f, -0.022649f, -0.004483f, -0.012519f, -0.006911f, 0.001364f, 0.028092f, 0.016217f, -0.002641f, -0.001139f, -0.008234f, -0.024938f, -0.008094f, -0.020695f, 0.014567f, 0.019186f, 0.000403f, -0.011479f, + -0.003847f, -0.005065f, 0.009171f, 0.012002f, 0.013439f, -0.031332f, 0.006054f, 0.000501f, 0.002827f, 0.020831f, -0.012387f, 0.008186f, -0.011304f, -0.008798f, 0.002342f, 0.013411f, 0.025282f, -0.004600f, -0.016236f, 0.004669f, -0.029289f, 0.022823f, 0.012704f, -0.003530f, -0.012082f, 0.005701f, -0.006746f, -0.015133f, -0.012025f, -0.013789f, -0.006253f, -0.003420f, 0.000900f, 0.011746f, -0.009485f, 0.033469f, 0.001428f, -0.005875f, 0.001955f, 0.009493f, 0.000446f, -0.001093f, 0.011051f, 0.006910f, 0.005679f, -0.000297f, -0.005415f, -0.004888f, -0.001332f, -0.001497f, -0.005021f, -0.014605f, 0.007261f, 0.006215f, -0.005321f, 0.001166f, -0.007787f, -0.006513f, -0.002765f, -0.002273f, -0.000318f, 0.011442f, -0.002646f, -0.004615f, -0.002123f, -0.001506f, 0.007353f, 0.012800f, -0.004606f, 0.006815f, -0.002237f, -0.009328f, 0.009649f, -0.010045f, -0.007649f, -0.005763f, -0.007732f, 0.000747f, 0.005566f, 0.002089f, 0.005698f, -0.000792f, -0.002483f, -0.001446f, -0.006359f, 0.002742f, -0.003777f, -0.007914f, 0.004953f, -0.003683f, -0.003764f, -0.003611f, -0.000488f, -0.002916f, -0.000240f, -0.002547f, + -0.002046f, -0.000401f, -0.000958f, -0.013779f, -0.002426f, 0.013655f, -0.025077f, -0.008095f, 0.017483f, -0.021769f, -0.001399f, -0.002854f, -0.002043f, -0.025231f, 0.025073f, 0.009775f, -0.016175f, -0.003682f, -0.006504f, -0.006974f, -0.036423f, -0.005988f, -0.016232f, -0.042738f, 0.009723f, 0.005719f, -0.018334f, -0.016561f, -0.021741f, -0.026387f, 0.022581f, 0.011539f, 0.023732f, 0.000034f, 0.048973f, 0.001486f, 0.025939f, 0.033878f, -0.003267f, 0.009811f, 0.036459f, -0.024843f, 0.011763f, -0.015286f, 0.025314f, -0.008509f, 0.048589f, 0.020943f, -0.014146f, -0.023292f, 0.004482f, 0.010291f, 0.020701f, 0.004561f, -0.016560f, -0.004797f, 0.016584f, 0.034742f, -0.014106f, 0.023030f, -0.007944f, 0.013734f, -0.027094f, 0.010169f, -0.014393f, 0.010184f, 0.002559f, 0.002839f, -0.004312f, 0.021144f, 0.031421f, -0.056585f, 0.017659f, 0.010773f, 0.009027f, -0.011015f, 0.008081f, -0.040845f, 0.004155f, -0.000142f, -0.005492f, -0.016138f, -0.012535f, -0.014079f, -0.003106f, 0.027665f, -0.015691f, -0.010522f, -0.022376f, -0.000032f, 0.021248f, -0.011152f, -0.010727f, 0.014998f, 0.000160f, 0.010645f, + 0.003297f, -0.003717f, 0.001017f, 0.004189f, -0.010306f, 0.004688f, 0.002964f, -0.010407f, -0.007217f, -0.005562f, 0.003518f, 0.005508f, 0.007355f, 0.018405f, -0.001313f, 0.013707f, 0.007937f, 0.003827f, -0.008925f, -0.003960f, -0.013853f, -0.007550f, -0.001693f, -0.005860f, -0.006188f, 0.007130f, 0.005442f, 0.008699f, 0.013158f, 0.001333f, -0.002062f, -0.002585f, -0.007196f, 0.003809f, -0.001486f, -0.000971f, 0.004872f, -0.006521f, 0.027664f, 0.029663f, -0.006570f, 0.030837f, -0.001705f, -0.006278f, 0.002298f, 0.017394f, -0.006593f, -0.007695f, -0.003715f, -0.021703f, 0.003455f, -0.006130f, 0.034259f, 0.022761f, -0.016519f, -0.017240f, -0.032775f, -0.011828f, 0.023579f, 0.042836f, -0.019566f, 0.013318f, 0.002732f, 0.005745f, 0.023138f, 0.016776f, -0.033576f, 0.006767f, -0.012070f, -0.006674f, -0.013927f, -0.007418f, -0.014691f, -0.032116f, 0.005520f, 0.021680f, 0.008137f, 0.050616f, -0.012403f, -0.006843f, 0.034954f, -0.012670f, -0.002084f, -0.007709f, 0.009167f, -0.038411f, -0.024856f, 0.013508f, 0.028696f, 0.042121f, 0.050007f, -0.036726f, -0.019242f, -0.001817f, 0.016645f, -0.001537f, + 0.056759f, 0.015948f, 0.008378f, -0.044020f, 0.002939f, 0.000439f, 0.021219f, 0.027968f, -0.020879f, -0.006765f, 0.008583f, -0.008932f, -0.000124f, 0.031761f, 0.011294f, -0.031167f, 0.008042f, 0.016620f, -0.015144f, 0.049329f, -0.017139f, -0.026195f, -0.037060f, 0.027426f, -0.006030f, -0.030885f, -0.024695f, -0.005508f, -0.001262f, -0.012216f, 0.000621f, -0.013310f, 0.002502f, -0.018578f, 0.001200f, 0.009261f, -0.006557f, 0.007320f, 0.001326f, -0.011185f, 0.001164f, -0.000053f, -0.002269f, 0.001333f, -0.007776f, 0.009417f, 0.000004f, -0.004614f, 0.010539f, 0.010916f, 0.000405f, -0.002847f, 0.004673f, -0.010036f, -0.004299f, -0.008036f, -0.001606f, 0.008525f, -0.006670f, 0.003808f, 0.008218f, -0.015154f, -0.005517f, -0.003014f, 0.002478f, -0.002750f, 0.006555f, 0.014949f, -0.004212f, -0.008707f, -0.004335f, 0.009709f, 0.002704f, 0.001049f, 0.007665f, -0.004293f, -0.003173f, -0.002637f, -0.004301f, -0.003438f, 0.006725f, 0.058441f, 0.027549f, -0.015219f, -0.005039f, -0.053720f, 0.004081f, 0.014344f, 0.003642f, 0.080376f, -0.010266f, -0.005989f, -0.035383f, -0.030387f, 0.012388f, -0.024836f, + -0.015342f, -0.016636f, -0.011367f, 0.020014f, -0.013155f, -0.022843f, -0.019890f, 0.001848f, 0.019993f, -0.025851f, 0.005700f, 0.011763f, 0.002461f, 0.029011f, -0.003503f, 0.002313f, -0.029585f, -0.041405f, -0.017212f, 0.019019f, -0.023012f, 0.005572f, -0.019350f, -0.072327f, -0.039113f, 0.021702f, 0.001388f, -0.041446f, 0.006226f, 0.057752f, -0.002837f, -0.001499f, -0.022724f, 0.012630f, -0.025062f, -0.044612f, 0.000941f, 0.006763f, -0.017496f, 0.008543f, 0.016595f, -0.004159f, -0.014782f, 0.012005f, 0.015411f, 0.028942f, -0.016878f, 0.021737f, 0.027699f, 0.011719f, 0.048325f, 0.005403f, -0.030400f, 0.035348f, 0.001916f, 0.005874f, -0.006677f, -0.007182f, 0.021644f, -0.021704f, -0.003336f, 0.053794f, 0.042010f, -0.026209f, 0.026804f, -0.007878f, 0.049746f, 0.020985f, -0.017567f, -0.039996f, -0.001976f, -0.014679f, -0.017570f, 0.011173f, -0.015857f, -0.000563f, -0.004242f, -0.014047f, -0.023622f, -0.004676f, 0.019538f, -0.021394f, -0.000134f, -0.013332f, 0.001778f, 0.008222f, -0.008868f, -0.025030f, -0.004646f, -0.011919f, 0.014914f, 0.009052f, -0.006329f, -0.016625f, -0.007106f, -0.017884f, + 0.010416f, -0.008866f, 0.005536f, 0.006807f, 0.009910f, 0.007956f, -0.014058f, -0.009949f, -0.015762f, 0.004397f, 0.009672f, 0.001106f, 0.019521f, 0.020796f, 0.011127f, 0.008319f, -0.005704f, 0.010993f, -0.001591f, -0.005608f, -0.042473f, -0.043905f, -0.053692f, 0.073820f, -0.041108f, 0.010206f, -0.002795f, -0.022716f, 0.036653f, -0.043160f, 0.018385f, 0.078484f, 0.047415f, 0.011706f, -0.063684f, -0.002965f, -0.042193f, -0.020551f, -0.038569f, -0.003022f, 0.010305f, -0.006253f, 0.029418f, -0.013782f, 0.004476f, 0.015402f, 0.041324f, 0.006433f, 0.005284f, 0.051237f, -0.033807f, -0.004098f, 0.021845f, -0.009134f, -0.026318f, -0.016539f, 0.025035f, -0.021593f, 0.010232f, 0.043976f, -0.012519f, -0.077467f, -0.005228f, 0.020210f, -0.096404f, 0.058563f, 0.044205f, -0.035735f, 0.059069f, 0.041005f, 0.026121f, 0.062407f, 0.000900f, 0.032398f, 0.003234f, 0.004422f, 0.021821f, -0.038555f, 0.038740f, 0.053876f, 0.040522f, -0.041549f, -0.008669f, 0.059155f, -0.028774f, 0.047055f, 0.042106f, 0.100054f, 0.059545f, 0.004124f, 0.006493f, -0.012134f, 0.012088f, 0.018022f, -0.057961f, -0.081690f, + -0.029070f, 0.007893f, 0.002717f, -0.011115f, 0.064138f, 0.031139f, 0.011803f, -0.027617f, 0.025232f, -0.019349f, -0.025810f, -0.012260f, 0.028866f, 0.034774f, 0.006237f, -0.005356f, -0.006869f, 0.001792f, -0.040266f, -0.008681f, -0.010624f, 0.013713f, 0.007126f, -0.019937f, -0.016088f, -0.000167f, 0.031212f, -0.007968f, -0.012420f, 0.001655f, -0.012846f, -0.031091f, 0.015709f, -0.006047f, -0.012747f, -0.017872f, -0.000141f, 0.011456f, 0.001841f, -0.055881f, -0.003455f, 0.028838f, -0.004476f, 0.002007f, 0.004448f, 0.009007f, 0.023586f, 0.019849f, 0.000627f, 0.000663f, -0.009336f, -0.002007f, 0.004634f, 0.045003f, 0.055045f, -0.108253f, -0.099662f, 0.043643f, -0.028828f, -0.031003f, -0.013288f, -0.037524f, 0.013189f, -0.060969f, 0.077129f, 0.029405f, -0.032477f, -0.000371f, -0.031767f, -0.023391f, -0.025644f, -0.028768f, -0.019077f, -0.073580f, -0.066627f, -0.012046f, -0.015287f, 0.004575f, 0.006114f, 0.013206f, -0.004854f, 0.009788f, 0.012198f, 0.033254f, 0.036252f, -0.013370f, -0.018570f, -0.021196f, -0.018453f, -0.041450f, 0.062104f, -0.021602f, 0.015044f, 0.046615f, 0.043563f, -0.016192f, + -0.018847f, -0.034430f, -0.022988f, -0.028195f, 0.047733f, 0.005503f, 0.005799f, -0.058799f, -0.021099f, 0.085994f, -0.008393f, 0.080093f, -0.016182f, -0.029431f, -0.018908f, -0.033320f, -0.034633f, -0.005911f, 0.000317f, -0.047087f, 0.003935f, 0.023153f, -0.001975f, 0.018297f, -0.109730f, -0.043879f, -0.030743f, 0.058702f, -0.013945f, 0.010047f, 0.019882f, 0.091907f, 0.025935f, -0.007959f, -0.009314f, 0.079217f, 0.047572f, 0.012095f, 0.015384f, -0.003545f, 0.062550f, -0.025569f, -0.035612f, 0.019772f, 0.029436f, 0.052689f, 0.048613f, -0.027944f, 0.033022f, 0.025161f, 0.026636f, 0.008421f, -0.018889f, -0.036968f, -0.031730f, 0.020365f, 0.027600f, 0.015220f, 0.010012f, 0.032998f, -0.003057f, -0.008428f, -0.001702f, -0.002149f, 0.017070f, 0.010713f, 0.022239f, 0.039128f, 0.027416f, 0.044683f, 0.012120f, -0.039081f, 0.012818f, 0.011187f, 0.034718f, -0.000052f, 0.027276f, 0.012134f, 0.026259f, 0.001218f, -0.049577f, -0.005819f, -0.010641f, -0.002712f, -0.022157f, -0.012656f, -0.057324f, 0.119086f, -0.038443f, -0.023936f, 0.070602f, -0.044777f, -0.067553f, 0.062638f, -0.090943f, -0.026337f, + 0.021444f, 0.015583f, -0.063443f, -0.024921f, 0.054453f, 0.000312f, -0.010742f, -0.035461f, 0.042729f, -0.042445f, 0.002792f, 0.033605f, -0.011253f, 0.030851f, 0.000192f, -0.015306f, 0.010316f, 0.007292f, -0.018463f, 0.029329f, -0.016210f, -0.006602f, 0.008724f, -0.000631f, 0.001771f, -0.005570f, 0.008661f, 0.018592f, 0.030073f, 0.043336f, 0.021207f, -0.017974f, -0.005082f, -0.027574f, 0.025351f, -0.009206f, -0.039860f, 0.009287f, 0.000063f, -0.022705f, -0.054468f, 0.038226f, 0.002783f, -0.025205f, 0.061320f, 0.003488f, -0.019149f, -0.011131f, 0.090867f, -0.085175f, -0.091791f, 0.055842f, 0.087074f, -0.160984f, 0.000621f, -0.059612f, -0.054262f, -0.023977f, 0.058382f, -0.045269f, 0.077313f, -0.010998f, -0.002117f, 0.104134f, -0.029625f, -0.080654f, 0.099897f, 0.117912f, -0.114766f, 0.128016f, -0.043389f, 0.003153f, 0.105575f, -0.035417f, -0.040777f, 0.029034f, 0.028160f, -0.013593f, -0.005648f, 0.019670f, 0.003599f, 0.002542f, -0.025518f, 0.034853f, -0.000138f, -0.002223f, 0.000311f, 0.004738f, 0.015356f, 0.009591f, -0.013084f, -0.013794f, 0.014239f, 0.034812f, -0.030471f, -0.027744f, + -0.007922f, 0.036477f, -0.001725f, 0.019563f, -0.005737f, 0.008259f, -0.000338f, 0.008467f, -0.004649f, -0.006182f, -0.043470f, -0.017812f, 0.010218f, -0.015268f, -0.004893f, -0.014992f, -0.023794f, 0.036591f, 0.022073f, -0.062837f, 0.024576f, 0.033117f, -0.007090f, 0.000143f, -0.022947f, 0.032861f, 0.070221f, -0.032469f, -0.045548f, -0.011679f, 0.010607f, 0.072706f, 0.053173f, -0.018132f, -0.006364f, 0.023177f, 0.057993f, -0.018838f, -0.003905f, 0.036647f, -0.046692f, -0.038918f, 0.030975f, -0.020329f, -0.016303f, -0.018660f, -0.002346f, -0.031198f, 0.001963f, 0.022607f, -0.014003f, 0.017630f, -0.015599f, -0.008701f, -0.010037f, -0.043401f, 0.006028f, -0.017131f, 0.026525f, 0.058547f, 0.002659f, 0.029561f, 0.023367f, 0.002970f, 0.010407f, 0.018858f, 0.060812f, -0.042608f, 0.029129f, 0.026846f, -0.031905f, 0.021808f, 0.019968f, 0.007329f, -0.028364f, -0.054927f, -0.056855f, 0.019409f, 0.019727f, -0.020457f, -0.094681f, 0.077440f, -0.026278f, -0.040421f, -0.024320f, 0.077914f, -0.036727f, 0.085133f, -0.000473f, 0.029185f, -0.079793f, 0.075861f, -0.034821f, 0.034117f, -0.010622f, -0.107611f, + -0.034674f, 0.022303f, -0.067510f, 0.069871f, 0.006934f, -0.098548f, -0.112350f, -0.056604f, 0.077305f, 0.020189f, -0.069917f, 0.085663f, -0.091527f, -0.003474f, 0.163965f, 0.025631f, 0.008887f, 0.017391f, 0.012007f, -0.042103f, 0.044489f, 0.004407f, 0.022513f, -0.027879f, 0.042751f, -0.022761f, -0.023202f, -0.017941f, -0.002870f, -0.000046f, 0.012642f, -0.003176f, -0.006795f, 0.009662f, -0.015497f, -0.029943f, 0.027896f, -0.009239f, -0.005306f, -0.035715f, 0.016456f, 0.009475f, 0.015600f, 0.005682f, 0.018070f, -0.012403f, 0.003939f, 0.052469f, -0.006372f, 0.001906f, 0.026685f, -0.027663f, -0.006535f, 0.002925f, -0.003320f, 0.021343f, -0.020972f, 0.023815f, -0.008208f, -0.056288f, 0.003344f, -0.013556f, 0.025485f, 0.019872f, 0.017297f, -0.019551f, 0.022653f, -0.036214f, -0.068334f, -0.000032f, -0.072614f, 0.019683f, -0.006244f, -0.013371f, 0.024608f, 0.039922f, -0.025588f, 0.005435f, 0.044471f, -0.035025f, 0.060229f, -0.008362f, -0.065809f, 0.056275f, -0.027043f, -0.012486f, 0.050632f, -0.064993f, 0.017225f, 0.000714f, 0.023632f, -0.010539f, -0.023544f, -0.099014f, 0.022789f, -0.041104f, + -0.098902f, 0.119343f, -0.080464f, -0.033996f, -0.015861f, -0.027681f, -0.060712f, 0.033722f, 0.082774f, -0.051582f, 0.023317f, -0.074635f, -0.041860f, -0.042720f, 0.037454f, 0.006275f, 0.108540f, -0.019114f, -0.008961f, -0.032817f, -0.093469f, -0.000363f, 0.045549f, -0.035053f, 0.038235f, 0.045430f, -0.038697f, 0.003379f, -0.033002f, -0.138688f, -0.072463f, -0.043035f, -0.145184f, 0.092306f, 0.122283f, 0.056995f, -0.123121f, -0.099490f, -0.220878f, 0.031405f, 0.262557f, 0.120920f, 0.046362f, -0.069574f, -0.242302f, -0.055583f, 0.056035f, 0.165029f, 0.165990f, -0.113417f, -0.095536f, -0.044910f, 0.021583f, 0.010851f, 0.180291f, 0.002435f, -0.022100f, 0.014078f, -0.018011f, -0.044661f, 0.063319f, 0.010769f, -0.013765f, 0.034485f, -0.028945f, -0.049770f, 0.034644f, 0.029489f, -0.083864f, 0.055686f, -0.012738f, -0.019105f, -0.044813f, 0.046642f, -0.045295f, 0.053473f, -0.026931f, 0.054737f, -0.065677f, 0.025438f, -0.018592f, 0.000132f, 0.046926f, 0.076561f, 0.021543f, -0.029495f, -0.020815f, -0.005594f, 0.042318f, -0.007623f, 0.061005f, -0.048862f, -0.038292f, 0.016859f, 0.060414f, 0.006322f, + 0.036606f, -0.049149f, -0.014603f, -0.016331f, 0.037516f, -0.003277f, 0.005582f, -0.011486f, -0.104589f, 0.076048f, -0.015430f, -0.015872f, 0.001243f, 0.034603f, 0.000018f, -0.005867f, 0.024508f, 0.009285f, 0.007749f, 0.040712f, -0.026010f, 0.000365f, 0.020189f, -0.006605f, -0.004397f, 0.025914f, -0.024070f, -0.005039f, 0.006494f, 0.040368f, -0.026864f, -0.017979f, 0.021623f, -0.000393f, 0.011873f, -0.038683f, 0.050997f, -0.011642f, 0.016810f, -0.010618f, 0.006046f, 0.028781f, 0.011775f, -0.005946f, 0.023594f, -0.008556f, 0.023855f, -0.018613f, -0.002038f, 0.025893f, -0.006409f, -0.009844f, -0.051537f, 0.005816f, 0.038787f, 0.004769f, 0.017867f, -0.025145f, -0.008772f, -0.014800f, -0.016787f, -0.006005f, 0.027903f, -0.009762f, 0.016778f, -0.021810f, -0.027401f, -0.010874f, 0.005799f, 0.052728f, -0.020559f, 0.024326f, 0.000990f, 0.005820f, -0.026038f, 0.014553f, 0.026470f, 0.002095f, -0.025188f, 0.019666f, -0.016972f, 0.013396f, -0.010574f, -0.006604f, -0.010138f, 0.004174f, 0.018408f, -0.008910f, -0.005423f, 0.009418f, -0.001690f, -0.013761f, -0.003637f, 0.014804f, 0.011461f, -0.011841f, + 0.001574f, 0.013590f, -0.000012f, -0.007204f, 0.001541f, -0.011911f, 0.008876f, -0.000111f, 0.004275f, -0.005037f, 0.001917f, 0.008915f, -0.004648f, 0.010332f, 0.001312f, 0.009490f, 0.006183f, -0.013518f, -0.014960f, -0.004183f, 0.024706f, -0.015353f, 0.017006f, 0.014748f, -0.010770f, -0.025329f, 0.019231f, -0.015998f, 0.021799f, -0.001347f, -0.004217f, -0.008437f, 0.003208f, 0.004465f, -0.001864f, -0.002221f, 0.001390f, 0.003009f, -0.010487f, 0.099084f, 0.019555f, -0.052950f, -0.037783f, -0.058493f, -0.018679f, 0.011373f, 0.031020f, -0.009626f, -0.012674f, -0.010741f, -0.010536f, -0.009780f, 0.014129f, -0.007131f, -0.002082f, -0.003045f, -0.010402f, -0.002375f, 0.015542f, 0.002325f, -0.004611f, -0.015540f, 0.017852f, -0.023182f, 0.013591f, -0.008227f, -0.022920f, 0.000178f, 0.010328f, 0.011788f, 0.009083f, -0.013414f, 0.002929f, -0.004250f, -0.007464f, 0.027577f, -0.024564f, -0.004397f, -0.001068f, -0.001621f, 0.002509f, -0.004028f, -0.014453f, 0.012178f, -0.022864f, 0.021811f, -0.003248f, -0.015205f, 0.005215f, -0.007813f, 0.019287f, -0.011249f, -0.006895f, 0.020949f, -0.018768f, 0.006575f, + -0.009008f, -0.001994f, 0.015973f, -0.011376f, -0.004590f, 0.014422f, -0.009895f, 0.003842f, 0.001441f, -0.011595f, 0.028324f, -0.024705f, -0.002147f, 0.010981f, -0.006331f, 0.018188f, -0.008249f, -0.003932f, 0.004714f, 0.006050f, -0.001980f, 0.004087f, -0.001629f, -0.007961f, 0.007179f, 0.000065f, 0.000682f, 0.004022f, -0.000537f, 0.005731f, -0.005728f, 0.001736f, 0.001118f, 0.001348f, -0.000721f, -0.003453f, 0.004610f, -0.000589f, -0.001237f, -0.003271f, 0.004075f, 0.006744f, -0.002276f, -0.003336f, 0.002065f, 0.003974f, -0.004926f, 0.004143f, -0.003719f, -0.003116f, 0.010659f, -0.001555f, 0.003926f, 0.005704f, -0.007397f, 0.018236f, -0.005975f, -0.000871f, -0.000929f, -0.010397f, 0.010830f, -0.006689f, -0.010872f, 0.009741f, -0.046898f, -0.070354f, 0.092228f, 0.287907f, 0.024602f, 0.025112f, -0.196282f, -0.248174f, -0.051763f, -0.052523f, 0.146175f, 0.248923f, 0.127667f, 0.024640f, -0.090088f, -0.175162f, -0.123720f, -0.088371f, -0.004629f, 0.121306f, 0.177140f, 0.095811f, 0.021903f, -0.062060f, -0.110453f, -0.061767f, -0.059522f, -0.055650f, 0.035177f, 0.072252f, 0.071117f, 0.071744f, + 0.017201f, -0.031010f, -0.012785f, -0.047162f, -0.073964f, -0.008125f, -0.022077f, -0.014853f, 0.066726f, 0.038640f, 0.055740f, 0.033895f, -0.025313f, -0.060765f, -0.014679f, -0.039469f, -0.006134f, 0.027729f, 0.008450f, 0.015017f, 0.030144f, -0.015218f, -0.021427f, -0.004850f, -0.012598f, 0.012253f, 0.019458f, 0.001136f, 0.024026f, 0.014349f, -0.025263f, -0.024203f, -0.038715f, -0.033009f, 0.001453f, 0.040008f, 0.060500f, 0.029236f, 0.007640f, -0.013980f, -0.040522f, -0.006863f, -0.045688f, -0.027933f, 0.021496f, 0.016965f, 0.051150f, 0.017329f, -0.013029f, 0.015170f, -0.026531f, -0.045927f, 0.008095f, 0.011770f, 0.015427f, 0.014364f, -0.002884f, -0.005650f, -0.004406f, -0.019033f, -0.014668f, 0.010143f, 0.015614f, 0.015813f, 0.015935f, -0.004305f, -0.015401f, -0.010096f, -0.005912f, 0.000523f, -0.000317f, -0.017304f, 0.004468f, 0.022061f, 0.011846f, 0.013777f, -0.004057f, -0.021952f, -0.012817f, -0.012905f, 0.005111f, 0.015617f, 0.010230f, 0.009703f, 0.004159f, -0.003020f, -0.016726f, -0.021917f, -0.010075f, 0.001499f, 0.013667f, 0.021912f, 0.013355f, 0.013569f, 0.008500f, -0.013679f, + -0.025649f, -0.032804f, -0.021333f, 0.009393f, 0.018521f, 0.024148f, 0.033295f, 0.010289f, -0.009920f, -0.016607f, -0.013560f, -0.009913f, -0.009477f, -0.009500f, -0.002740f, 0.007643f, 0.014751f, 0.013151f, 0.010250f, 0.007299f, 0.001725f, -0.009040f, -0.016019f, -0.015321f, -0.007795f, -0.000093f, 0.006948f, 0.009488f, 0.008704f, 0.004634f, 0.002840f, 0.001163f, -0.001336f, -0.005774f, -0.007138f, -0.005817f, -0.001947f, 0.002510f, 0.004334f, 0.003594f, 0.000896f, -0.000930f, 0.000693f, 0.000602f, 0.000984f, 0.000412f, -0.001385f, -0.002730f, -0.000867f, 0.001436f, 0.000438f, -0.002234f, -0.001136f, 0.000654f, 0.000561f, -0.000289f, 0.001781f, 0.003880f, 0.003580f, -0.001521f, -0.004076f, -0.003094f, -0.001024f, -0.000158f, -0.000027f, -0.000350f, 0.001214f, 0.002635f, 0.002610f, 0.000399f, -0.000503f, -0.000459f, -0.001080f, -0.002011f, -0.001607f, -0.001019f, 0.000453f, 0.001035f, 0.001849f, 0.001472f, 0.000548f, -0.000394f, -0.000497f, -0.001164f, -0.001015f, -0.000911f, 0.000047f, 0.000713f, 0.001224f, 0.000473f, 0.000163f, -0.000488f, -0.000494f, -0.000712f, -0.000017f, 0.000399f, + 0.000724f, 0.000182f, 0.000166f, -0.000290f, -0.000305f, -0.000497f, 0.000019f, -0.000005f, 0.000239f, 0.000030f, 0.000212f, -0.000081f, 0.000093f, -0.000147f, 0.000068f, -0.000129f}, + {0.002302f, 0.006414f, 0.004973f, -0.001641f, 0.003807f, 0.001840f, 0.010993f, -0.001906f, -0.000309f, 0.001402f, 0.008041f, -0.001579f, -0.008420f, -0.003895f, -0.008083f, 0.001978f, -0.002887f, -0.000662f, -0.001033f, 0.001960f, 0.000765f, 0.001649f, 0.004661f, 0.008602f, -0.003832f, -0.002104f, 0.001703f, -0.004046f, -0.000572f, 0.006711f, -0.003653f, 0.008293f, 0.000842f, -0.002966f, 0.005491f, -0.007506f, -0.001935f, -0.005228f, 0.007335f, -0.000214f, -0.002722f, -0.001993f, 0.000080f, 0.006831f, 0.000268f, 0.008221f, 0.003149f, -0.006750f, 0.005463f, -0.002949f, -0.005051f, -0.004119f, 0.005617f, -0.001169f, 0.017913f, 0.001905f, 0.004500f, 0.003264f, -0.008355f, 0.000127f, -0.001236f, 0.002189f, -0.004746f, -0.003202f, 0.009334f, 0.007653f, 0.000689f, 0.003184f, -0.000858f, 0.004765f, -0.007706f, 0.000791f, 0.005783f, 0.003652f, 0.000587f, -0.000589f, 0.004121f, -0.006529f, -0.003015f, 0.006965f, -0.004577f, 0.001488f, 0.003386f, 0.004123f, 0.001262f, -0.005218f, -0.003486f, 0.002762f, 0.000606f, 0.002739f, -0.000832f, 0.000794f, -0.002612f, -0.000138f, -0.001303f, -0.000760f, + 0.001485f, 0.002873f, 0.001203f, -0.001655f, -0.000649f, -0.001117f, 0.000672f, 0.001761f, -0.001039f, 0.001302f, 0.000946f, 0.001832f, -0.000261f, 0.002195f, -0.000890f, 0.000556f, 0.001340f, 0.001722f, -0.013683f, -0.012329f, -0.007691f, -0.006983f, -0.006072f, 0.002333f, 0.008613f, 0.017593f, 0.003358f, 0.004543f, -0.000052f, -0.012546f, -0.005271f, -0.004657f, -0.011294f, 0.017553f, 0.004646f, 0.006974f, 0.004800f, -0.003878f, 0.001768f, 0.016803f, 0.006687f, -0.003952f, -0.000344f, -0.004076f, 0.000332f, -0.007776f, 0.004656f, -0.002454f, -0.003506f, 0.000664f, 0.008906f, 0.000942f, 0.003092f, 0.005593f, 0.007717f, -0.013872f, 0.000156f, 0.003521f, 0.008047f, 0.012401f, -0.006925f, -0.001402f, -0.003368f, 0.010343f, 0.005579f, 0.006669f, -0.001129f, 0.003091f, 0.020665f, -0.013072f, 0.002596f, 0.001216f, -0.008763f, 0.003720f, -0.012233f, -0.001645f, 0.003108f, -0.002645f, -0.018432f, 0.005159f, 0.001247f, -0.004980f, -0.005127f, -0.000855f, -0.002795f, 0.006212f, -0.005865f, -0.002591f, 0.001787f, -0.000200f, -0.005707f, -0.000281f, 0.004628f, -0.007715f, 0.000657f, -0.002111f, + -0.001875f, -0.002408f, -0.001386f, 0.001166f, -0.004522f, -0.003397f, 0.000639f, -0.002702f, -0.003584f, -0.003670f, -0.001282f, -0.002443f, 0.004442f, -0.003956f, -0.001143f, 0.000617f, 0.002217f, -0.000277f, 0.000123f, -0.001392f, 0.000242f, -0.002381f, 0.001746f, -0.001601f, -0.001587f, -0.000475f, -0.003481f, 0.018616f, 0.001552f, 0.006726f, -0.000850f, -0.004904f, 0.000320f, 0.013101f, 0.006589f, 0.008479f, 0.013389f, -0.005878f, 0.000058f, 0.013147f, 0.004103f, 0.005815f, 0.000666f, 0.001679f, 0.007585f, -0.006867f, -0.002121f, 0.009793f, -0.006696f, 0.003869f, 0.005459f, -0.004077f, 0.003993f, 0.013106f, -0.006255f, 0.004882f, 0.000961f, 0.000574f, 0.000094f, -0.002650f, -0.008971f, -0.002692f, -0.007527f, -0.000722f, 0.003048f, 0.006308f, 0.006532f, -0.001127f, -0.011231f, -0.000963f, 0.016231f, -0.005986f, 0.003225f, -0.002871f, -0.017212f, 0.010068f, 0.002454f, 0.007488f, -0.001307f, 0.008519f, 0.008194f, -0.014545f, 0.005769f, 0.000484f, 0.005412f, -0.001044f, -0.010285f, -0.000453f, -0.001494f, -0.001847f, -0.001979f, 0.006560f, -0.000078f, 0.001305f, 0.013202f, 0.002595f, + 0.010489f, 0.000367f, 0.000983f, 0.002044f, -0.005814f, -0.009072f, 0.006195f, -0.006860f, 0.004062f, 0.002580f, -0.000388f, 0.004363f, -0.004625f, -0.002592f, 0.002887f, 0.000174f, -0.008812f, 0.002856f, 0.001015f, 0.001162f, -0.001800f, 0.003835f, 0.000342f, -0.001499f, 0.004225f, -0.000946f, -0.000385f, -0.003512f, 0.001246f, -0.001742f, 0.000594f, 0.000048f, -0.000538f, 0.000869f, -0.001358f, 0.002314f, 0.000515f, -0.000881f, 0.000651f, -0.000520f, 0.000238f, -0.000085f, -0.001420f, -0.000114f, 0.030424f, 0.016999f, 0.026043f, 0.008374f, -0.010711f, 0.005466f, -0.004761f, 0.000683f, 0.002587f, -0.022196f, -0.005840f, -0.006142f, 0.005787f, 0.008664f, -0.003519f, -0.000549f, 0.002996f, 0.000666f, 0.015925f, -0.001781f, -0.016549f, 0.005384f, -0.009535f, 0.007358f, 0.008505f, 0.006697f, 0.009898f, -0.002386f, -0.003311f, 0.003960f, -0.002856f, -0.003886f, 0.002916f, -0.002600f, 0.005984f, 0.008423f, -0.003550f, -0.012814f, 0.004223f, -0.012461f, -0.007918f, -0.001577f, -0.025795f, 0.000246f, -0.004266f, 0.010151f, 0.009799f, 0.004679f, 0.015980f, 0.015964f, 0.007190f, 0.003557f, + -0.001036f, 0.000781f, 0.001024f, -0.007235f, 0.014945f, -0.001969f, 0.005283f, -0.004690f, -0.005517f, -0.002026f, -0.008331f, 0.007484f, -0.003776f, -0.003117f, 0.014676f, -0.012086f, -0.003567f, 0.003101f, -0.005400f, -0.001656f, -0.000291f, 0.005121f, 0.006172f, 0.004068f, 0.010513f, -0.003355f, -0.002648f, -0.001465f, -0.006339f, 0.003482f, 0.006825f, 0.009169f, 0.000018f, -0.001332f, -0.001745f, 0.000164f, 0.002168f, 0.001980f, -0.002535f, 0.003094f, 0.000172f, 0.002252f, 0.002076f, -0.000303f, -0.000497f, 0.003992f, -0.000903f, 0.002056f, 0.001846f, 0.001902f, 0.001860f, -0.001037f, 0.001714f, 0.006710f, -0.000241f, 0.000423f, 0.001036f, 0.004986f, 0.001140f, -0.000992f, -0.003209f, 0.002670f, 0.002160f, -0.001062f, 0.001151f, -0.011257f, -0.026912f, -0.009215f, -0.003064f, 0.004071f, -0.003586f, 0.008345f, -0.002048f, 0.013297f, -0.011996f, 0.007165f, -0.003167f, 0.024221f, 0.009781f, -0.004988f, -0.010519f, 0.005787f, -0.014855f, -0.007574f, 0.005383f, -0.004915f, -0.008956f, 0.016817f, 0.006675f, -0.000733f, -0.007894f, -0.010145f, 0.006801f, 0.005625f, 0.005022f, -0.000242f, + -0.002800f, -0.006191f, 0.009545f, -0.012534f, -0.005677f, -0.000388f, 0.008850f, 0.007135f, -0.000855f, 0.010189f, 0.001060f, -0.004472f, 0.001837f, -0.004454f, -0.005040f, -0.005424f, 0.006846f, -0.004961f, -0.000352f, 0.009498f, 0.013707f, 0.014413f, 0.005649f, 0.005235f, -0.001093f, 0.008249f, -0.003398f, 0.011778f, -0.002169f, 0.007582f, 0.005541f, -0.004570f, 0.000448f, -0.005025f, 0.005489f, 0.005116f, 0.001832f, -0.001588f, -0.009872f, 0.007080f, -0.010729f, -0.001066f, -0.011595f, 0.004430f, -0.000970f, -0.000879f, 0.002065f, -0.009515f, 0.000338f, 0.002766f, 0.015709f, 0.005367f, 0.002561f, 0.003989f, 0.006074f, 0.002962f, 0.003111f, -0.004470f, 0.003462f, 0.002938f, -0.006564f, -0.000300f, 0.000273f, 0.001631f, 0.002701f, -0.002948f, 0.001989f, -0.001819f, 0.000383f, -0.000139f, 0.003939f, 0.000675f, 0.000450f, 0.000739f, 0.001296f, -0.000572f, 0.003576f, -0.001718f, 0.001317f, 0.001672f, 0.003451f, 0.001929f, 0.004808f, -0.003237f, 0.001769f, -0.000555f, 0.005553f, 0.002419f, 0.001962f, -0.000446f, -0.000811f, 0.000718f, -0.001115f, -0.000881f, -0.003721f, -0.012428f, + -0.026060f, -0.021067f, 0.001334f, -0.018002f, -0.008839f, -0.025489f, -0.013541f, -0.015541f, 0.006204f, -0.008310f, -0.011010f, -0.003792f, 0.000634f, -0.006565f, -0.024712f, 0.006633f, -0.004346f, 0.002477f, -0.011168f, 0.011159f, 0.004170f, 0.000247f, -0.009930f, -0.004442f, 0.012697f, 0.008632f, 0.000598f, -0.001886f, -0.008458f, 0.005299f, 0.002786f, 0.005489f, -0.010132f, -0.000941f, -0.008222f, -0.007407f, -0.008041f, 0.000849f, 0.016447f, -0.013369f, 0.000331f, -0.012734f, 0.001349f, 0.005950f, 0.007487f, -0.013425f, 0.013566f, 0.016433f, -0.005366f, -0.003884f, -0.002818f, -0.000626f, 0.005266f, 0.006648f, 0.001689f, 0.004533f, -0.007953f, -0.001528f, -0.002922f, 0.014153f, -0.004373f, 0.015662f, -0.000350f, -0.004765f, 0.012521f, -0.001268f, -0.007408f, 0.002703f, 0.013564f, 0.015599f, -0.001115f, -0.004831f, -0.008422f, 0.005402f, -0.011258f, -0.001079f, 0.007626f, -0.005751f, 0.003466f, -0.000355f, -0.000015f, -0.004611f, 0.000158f, -0.003563f, -0.005605f, -0.000526f, 0.004845f, 0.002585f, 0.004828f, -0.002081f, -0.001485f, -0.003762f, 0.001553f, -0.003027f, 0.005028f, 0.002586f, + 0.007002f, 0.000718f, -0.001555f, -0.000554f, -0.001163f, -0.002392f, 0.003247f, -0.002106f, -0.001182f, 0.001373f, 0.001138f, -0.003347f, -0.001119f, 0.000990f, 0.000181f, -0.001811f, -0.003232f, -0.000127f, -0.002973f, -0.002027f, -0.001198f, 0.004082f, -0.000209f, 0.001470f, 0.001286f, 0.000260f, -0.002299f, -0.000623f, -0.000197f, -0.019970f, -0.020222f, -0.022980f, 0.006631f, -0.018578f, -0.007987f, 0.018202f, 0.008609f, -0.020182f, -0.001550f, 0.000373f, 0.008763f, 0.013483f, 0.022554f, -0.005980f, -0.008357f, -0.022184f, -0.027623f, -0.016044f, -0.005706f, 0.011355f, -0.011317f, 0.005549f, -0.015997f, 0.016598f, -0.012053f, 0.013360f, -0.006311f, 0.002009f, 0.003255f, -0.002497f, -0.011893f, 0.018697f, -0.016199f, -0.000660f, -0.008732f, 0.002414f, -0.010142f, 0.002432f, -0.040287f, 0.000788f, 0.018474f, -0.023732f, 0.005265f, 0.016437f, 0.005671f, -0.012302f, -0.001566f, 0.019755f, -0.024372f, 0.000039f, 0.009721f, 0.009616f, 0.009127f, -0.003378f, -0.003681f, -0.015534f, -0.007944f, 0.006520f, 0.010496f, 0.017105f, 0.020552f, -0.030426f, 0.011435f, -0.009113f, 0.002056f, -0.021426f, + -0.008934f, 0.017823f, 0.004146f, 0.002530f, -0.012006f, 0.000105f, 0.011250f, 0.008411f, 0.004917f, -0.010571f, -0.007076f, 0.011182f, -0.003134f, -0.004618f, -0.002590f, -0.007766f, 0.006499f, -0.001218f, -0.006393f, -0.002302f, -0.002322f, 0.001672f, -0.004205f, -0.004196f, 0.001278f, 0.001582f, 0.001509f, -0.002368f, -0.003743f, 0.003085f, -0.002467f, -0.008052f, -0.000918f, -0.002365f, 0.004708f, -0.003716f, 0.000047f, 0.000430f, 0.001756f, -0.005037f, -0.003061f, -0.001802f, 0.000327f, 0.005412f, -0.000845f, -0.001261f, 0.003102f, 0.000079f, 0.003044f, -0.001527f, -0.003832f, -0.001352f, -0.006345f, 0.001388f, -0.000277f, -0.004258f, 0.002373f, 0.023967f, 0.039952f, 0.022241f, 0.026036f, 0.003974f, 0.009233f, 0.035056f, -0.001117f, 0.001054f, 0.023971f, -0.011725f, 0.000037f, 0.006904f, 0.011939f, 0.019796f, -0.016129f, -0.022964f, 0.012639f, 0.007035f, -0.013359f, 0.002863f, 0.008168f, -0.005113f, 0.004684f, -0.012363f, -0.002819f, -0.014441f, 0.004419f, 0.015741f, 0.004870f, 0.013788f, 0.010636f, 0.011221f, -0.027338f, 0.001433f, 0.031769f, -0.003782f, -0.000592f, 0.029630f, + -0.003929f, -0.001048f, 0.004366f, -0.003905f, -0.000894f, 0.016401f, 0.025738f, -0.025309f, -0.004150f, 0.005051f, -0.007794f, 0.011948f, -0.004048f, 0.001175f, 0.001852f, -0.005519f, 0.022655f, -0.002906f, -0.008287f, 0.008498f, -0.008593f, -0.014151f, 0.004854f, 0.015453f, 0.005815f, -0.001720f, 0.003104f, 0.014785f, 0.007698f, 0.013245f, 0.003969f, 0.001645f, -0.000179f, -0.012999f, -0.002718f, -0.010186f, -0.002358f, -0.004281f, -0.023179f, -0.010031f, 0.001464f, 0.014923f, -0.006166f, 0.005764f, -0.003999f, -0.012251f, 0.005402f, 0.001318f, -0.003924f, 0.001910f, -0.007487f, 0.000359f, 0.001822f, 0.004558f, 0.006482f, -0.001578f, 0.004165f, -0.005642f, -0.008358f, -0.009990f, -0.001089f, 0.008985f, -0.001662f, -0.000744f, 0.002978f, 0.000453f, 0.000960f, 0.004810f, -0.002388f, -0.000948f, -0.002686f, 0.006928f, 0.000127f, -0.001099f, 0.000785f, -0.001835f, -0.003760f, -0.004547f, 0.001812f, 0.003887f, 0.004904f, 0.002638f, 0.001922f, -0.000967f, -0.000356f, -0.000029f, -0.001651f, -0.006987f, 0.002199f, 0.067435f, 0.009359f, -0.001455f, -0.000404f, -0.032389f, -0.009469f, 0.003102f, + -0.007554f, 0.014256f, 0.006276f, 0.023120f, -0.002959f, 0.000001f, -0.005010f, -0.009825f, 0.015512f, 0.002878f, 0.005919f, 0.008675f, 0.012132f, -0.011485f, -0.011547f, -0.013364f, -0.009299f, -0.007683f, -0.003381f, -0.018347f, -0.003631f, 0.029462f, 0.013873f, -0.005688f, -0.002048f, -0.003547f, 0.002409f, 0.010381f, -0.005175f, 0.042114f, -0.007400f, -0.001237f, -0.019221f, 0.007563f, 0.018338f, -0.003262f, -0.014170f, -0.001928f, 0.007011f, 0.014028f, 0.006019f, 0.019758f, 0.029585f, 0.009555f, -0.000725f, 0.017511f, 0.014304f, 0.005263f, 0.011029f, -0.037113f, 0.008480f, 0.000848f, -0.032839f, 0.011889f, -0.000880f, -0.014240f, 0.009108f, -0.015097f, -0.014674f, 0.017212f, 0.013532f, -0.007861f, -0.029088f, -0.013261f, 0.006825f, -0.016805f, -0.003529f, 0.007118f, 0.028310f, -0.004780f, 0.005610f, -0.014999f, -0.031400f, -0.016959f, -0.015125f, -0.006964f, 0.014781f, 0.001860f, -0.010526f, -0.003331f, -0.006623f, -0.006499f, 0.009390f, 0.007754f, 0.002906f, 0.006589f, 0.007892f, -0.006986f, -0.005149f, -0.005247f, 0.000915f, -0.005739f, -0.008384f, -0.008185f, 0.003288f, -0.002924f, + -0.001355f, 0.000904f, 0.002772f, -0.006998f, 0.003661f, -0.001693f, -0.001000f, -0.003238f, -0.001284f, -0.004500f, 0.010476f, -0.006835f, -0.002491f, 0.001641f, -0.007045f, -0.006855f, -0.005222f, 0.000149f, 0.005224f, 0.004235f, -0.036176f, 0.022944f, -0.004568f, -0.022664f, -0.001339f, 0.021377f, -0.024380f, -0.004651f, -0.019736f, 0.013209f, 0.003738f, -0.006711f, -0.008639f, -0.002563f, 0.012452f, 0.010235f, 0.005116f, 0.013776f, 0.011342f, 0.001591f, 0.013783f, 0.016669f, 0.006332f, 0.009399f, -0.016990f, -0.007732f, -0.011949f, 0.010650f, 0.012989f, 0.005163f, 0.003747f, -0.007492f, -0.006161f, -0.004447f, -0.004669f, -0.013713f, 0.012513f, 0.003338f, 0.000454f, -0.014702f, -0.004887f, 0.024327f, -0.017627f, -0.018034f, -0.028607f, 0.010230f, -0.021548f, 0.031097f, 0.035178f, 0.024862f, 0.013966f, 0.001735f, 0.027420f, -0.014330f, 0.021473f, -0.002484f, -0.015946f, 0.001508f, 0.000910f, -0.033076f, -0.015242f, 0.012901f, 0.001552f, -0.005309f, 0.004690f, 0.028393f, 0.018818f, -0.031875f, -0.008513f, -0.000137f, -0.001214f, 0.009636f, 0.013360f, -0.000310f, -0.026203f, 0.010737f, + -0.015356f, -0.047599f, -0.014308f, -0.009416f, 0.014522f, 0.024546f, 0.007819f, 0.001546f, 0.000883f, 0.001072f, 0.001808f, 0.017586f, -0.000287f, 0.002909f, 0.001872f, 0.009059f, -0.015599f, -0.000459f, 0.004342f, 0.011732f, 0.013362f, 0.005212f, 0.007797f, 0.012499f, 0.015666f, 0.021004f, 0.007545f, 0.010586f, 0.009752f, 0.000883f, -0.001272f, -0.003364f, -0.002875f, 0.000486f, 0.003883f, -0.011684f, -0.003310f, 0.007423f, 0.010990f, -0.000822f, 0.002855f, -0.001152f, 0.004434f, 0.000477f, 0.006939f, -0.000768f, 0.006643f, -0.004774f, 0.008597f, 0.000586f, 0.008103f, -0.029946f, 0.002955f, 0.003369f, 0.018720f, 0.004074f, 0.047879f, 0.007662f, -0.019804f, -0.006363f, -0.016679f, 0.030311f, -0.038868f, -0.003435f, 0.026819f, -0.058631f, -0.023181f, -0.019762f, -0.020536f, -0.038876f, 0.003654f, -0.006786f, -0.016713f, -0.002091f, 0.018385f, 0.002352f, 0.002420f, -0.011442f, 0.004543f, -0.003848f, 0.004517f, 0.000060f, 0.002893f, 0.015045f, -0.003662f, -0.000893f, 0.030516f, -0.019710f, -0.003989f, 0.005312f, 0.026286f, -0.013770f, 0.037538f, -0.011330f, -0.015174f, -0.032108f, + -0.041832f, -0.012168f, -0.031136f, 0.015223f, -0.009448f, -0.023339f, 0.003194f, 0.003814f, 0.017226f, 0.014604f, 0.006095f, -0.002922f, 0.053147f, 0.029445f, -0.003344f, 0.005220f, 0.018211f, 0.013641f, 0.008855f, -0.007160f, -0.001018f, -0.009500f, -0.012367f, -0.011425f, 0.008034f, 0.041477f, -0.028947f, -0.007062f, -0.016471f, 0.029899f, -0.007835f, 0.009288f, -0.004225f, 0.014056f, -0.032777f, -0.024514f, -0.008432f, 0.013981f, 0.004468f, 0.012076f, -0.007210f, 0.007461f, 0.011289f, 0.009896f, 0.004738f, -0.001929f, -0.013938f, 0.008845f, 0.003357f, -0.011853f, -0.008268f, 0.007466f, -0.007743f, -0.005893f, -0.000172f, 0.008035f, -0.007363f, 0.009675f, -0.005957f, 0.013809f, -0.007585f, 0.001567f, 0.004903f, 0.002532f, -0.006548f, -0.012570f, 0.009864f, -0.003762f, -0.002724f, -0.000963f, -0.001200f, -0.003963f, 0.009378f, 0.011572f, 0.008145f, 0.007087f, -0.001246f, 0.004092f, 0.013397f, -0.007138f, 0.005383f, 0.002314f, -0.000165f, 0.002930f, -0.000705f, 0.000725f, -0.004635f, 0.006161f, 0.001953f, 0.005878f, -0.001731f, 0.002577f, -0.001003f, -0.004816f, 0.003518f, 0.000893f, + 0.004145f, 0.006001f, -0.000892f, -0.023986f, -0.022860f, 0.012843f, -0.010198f, -0.043110f, 0.021391f, -0.012916f, 0.017098f, -0.012466f, 0.021497f, 0.014494f, 0.017884f, 0.028429f, 0.004691f, 0.024042f, 0.009765f, 0.006152f, 0.016441f, 0.005576f, 0.004549f, 0.001094f, -0.000631f, -0.015404f, 0.013705f, -0.031198f, 0.013664f, 0.003177f, -0.008872f, -0.016847f, -0.000397f, 0.011958f, -0.013857f, -0.005879f, -0.020742f, -0.008124f, -0.025544f, 0.001547f, 0.014115f, -0.000328f, -0.003282f, -0.016305f, -0.028211f, -0.020581f, 0.022109f, 0.007302f, -0.009170f, -0.016293f, -0.003945f, -0.001365f, -0.027584f, 0.023317f, 0.021311f, -0.027265f, -0.026403f, -0.043380f, -0.006564f, -0.051891f, 0.013993f, 0.020124f, 0.010649f, -0.003290f, -0.006590f, -0.005411f, 0.021298f, 0.021450f, 0.024839f, -0.016217f, -0.012827f, 0.016541f, -0.007142f, -0.007795f, -0.030369f, 0.013445f, 0.024854f, 0.028383f, -0.006679f, 0.015523f, -0.008725f, 0.004628f, 0.015575f, 0.007975f, -0.010940f, 0.005098f, -0.018743f, -0.011471f, -0.007765f, 0.002740f, 0.007940f, 0.006746f, -0.007417f, -0.006866f, -0.002755f, -0.008461f, + -0.001644f, -0.011639f, -0.014416f, -0.007628f, -0.006001f, -0.004479f, -0.001910f, -0.004254f, -0.005725f, 0.001205f, -0.000253f, 0.008309f, -0.002885f, 0.010627f, -0.002805f, 0.008470f, 0.000585f, -0.004882f, 0.002185f, 0.021538f, 0.006695f, 0.010948f, -0.004975f, -0.008802f, 0.001782f, 0.007785f, -0.007545f, 0.015583f, 0.015746f, 0.004423f, 0.007392f, 0.003191f, -0.018018f, -0.009583f, -0.008818f, -0.001287f, -0.000486f, -0.007881f, 0.041491f, 0.047710f, -0.018816f, -0.001188f, 0.012996f, -0.038818f, -0.007098f, 0.047973f, 0.001752f, -0.052552f, 0.005819f, 0.015954f, -0.001196f, 0.018045f, 0.043096f, -0.017828f, 0.038952f, 0.020900f, 0.033247f, 0.009117f, -0.025390f, -0.027293f, 0.021746f, -0.024796f, -0.038581f, -0.011436f, -0.045851f, 0.009864f, -0.003071f, 0.016048f, 0.014012f, 0.009764f, 0.005184f, -0.002111f, 0.001292f, 0.023040f, 0.011376f, -0.045257f, -0.005274f, 0.014770f, 0.028899f, 0.015808f, 0.035800f, 0.031995f, 0.025280f, -0.012291f, -0.004351f, 0.006358f, 0.065178f, -0.027657f, 0.004737f, 0.013464f, 0.025533f, -0.010913f, -0.036305f, -0.007990f, -0.009200f, -0.022224f, + -0.040162f, -0.044193f, 0.011950f, -0.024979f, -0.018618f, 0.010899f, 0.034394f, 0.042035f, 0.000710f, -0.002860f, -0.000616f, 0.032159f, -0.022241f, -0.011794f, 0.038508f, -0.042597f, 0.004550f, -0.033770f, -0.022438f, 0.001957f, 0.044653f, -0.007804f, -0.030779f, 0.039396f, -0.041041f, 0.001100f, -0.049521f, -0.004932f, -0.006363f, 0.013948f, 0.027288f, -0.020929f, -0.011732f, -0.014990f, 0.003511f, 0.000379f, -0.015483f, 0.008034f, -0.004722f, -0.004985f, -0.006727f, -0.005951f, -0.018319f, 0.003380f, -0.008939f, 0.005707f, 0.004663f, -0.002051f, -0.004233f, 0.010252f, -0.000228f, -0.000601f, -0.021598f, 0.002415f, -0.002067f, -0.001514f, 0.019671f, 0.001177f, 0.005369f, -0.009165f, 0.002957f, -0.005670f, -0.011877f, 0.004200f, -0.023933f, 0.006981f, -0.008439f, 0.016786f, -0.014366f, -0.002877f, 0.002977f, -0.002963f, -0.003981f, -0.008384f, 0.012856f, -0.009743f, 0.014020f, -0.006161f, -0.009186f, 0.009010f, 0.007747f, 0.023206f, -0.027157f, -0.058429f, -0.014699f, -0.019924f, -0.020237f, -0.011527f, 0.001994f, -0.019576f, -0.017913f, 0.006344f, 0.012415f, -0.012047f, 0.030545f, -0.002726f, + 0.020205f, -0.009932f, -0.002029f, 0.018725f, -0.026599f, -0.015511f, -0.009579f, 0.027598f, -0.007297f, -0.028960f, -0.011984f, 0.005104f, -0.015165f, 0.012918f, -0.020661f, -0.019336f, 0.028184f, 0.009042f, -0.023812f, 0.014566f, -0.003605f, -0.017512f, -0.002598f, -0.029438f, -0.026675f, 0.005717f, 0.044184f, 0.018744f, 0.013176f, -0.035513f, 0.026942f, -0.002620f, 0.020434f, -0.012010f, -0.026002f, 0.012783f, -0.047230f, 0.039276f, -0.063641f, -0.039220f, 0.013644f, 0.035099f, 0.001778f, 0.041913f, -0.019003f, 0.011388f, -0.029620f, 0.039340f, 0.011561f, 0.029389f, 0.012366f, 0.007301f, -0.010038f, -0.009154f, -0.019886f, -0.006107f, -0.002076f, -0.032938f, -0.020916f, 0.003427f, -0.051646f, 0.003346f, 0.055970f, 0.017460f, 0.019536f, 0.005965f, -0.026800f, -0.018964f, -0.006247f, -0.005763f, -0.002822f, -0.009576f, -0.014581f, 0.011798f, 0.006443f, 0.010742f, 0.015074f, -0.015802f, 0.009540f, -0.005734f, -0.009802f, -0.006194f, 0.013289f, -0.004419f, -0.016667f, -0.023251f, -0.001213f, -0.013840f, -0.007769f, -0.014206f, -0.005126f, -0.009182f, -0.006833f, 0.022674f, -0.013255f, 0.005479f, + 0.005812f, -0.017502f, 0.019292f, 0.000559f, 0.011083f, 0.016425f, -0.008592f, 0.008298f, 0.002468f, -0.000376f, 0.003822f, 0.013782f, -0.008944f, -0.007286f, 0.011216f, 0.001384f, 0.004880f, -0.003442f, -0.004735f, 0.000729f, 0.009360f, -0.043973f, -0.041938f, 0.004572f, 0.016607f, -0.020483f, -0.094271f, -0.019126f, -0.000960f, 0.012738f, -0.032206f, 0.003221f, -0.018171f, -0.003210f, -0.025756f, -0.027743f, 0.024590f, -0.026967f, -0.034156f, -0.005217f, -0.024052f, -0.025443f, 0.008444f, -0.037177f, -0.012946f, 0.023197f, 0.051548f, 0.042502f, -0.002490f, -0.025162f, 0.008510f, 0.038304f, -0.002232f, 0.025634f, -0.007705f, 0.032166f, 0.017334f, -0.032076f, 0.051322f, -0.039012f, -0.021340f, 0.035349f, -0.038912f, 0.012073f, -0.009316f, -0.028446f, 0.002923f, 0.044310f, -0.009582f, -0.025290f, 0.015928f, 0.021986f, -0.001105f, 0.009378f, -0.063529f, 0.015698f, 0.002150f, 0.032282f, 0.014914f, -0.027179f, 0.026979f, -0.014259f, -0.002880f, -0.025154f, 0.013132f, 0.037414f, -0.008098f, -0.006836f, -0.038351f, -0.053078f, 0.029976f, -0.003402f, 0.024056f, -0.028815f, 0.021794f, 0.018279f, + -0.038606f, 0.002669f, 0.033442f, 0.019856f, -0.018291f, -0.030173f, 0.027257f, 0.004994f, -0.024312f, 0.023068f, 0.003232f, 0.010544f, 0.002184f, 0.009830f, 0.001254f, 0.025717f, -0.000154f, 0.009159f, -0.002217f, 0.001512f, 0.021912f, -0.006765f, 0.000042f, 0.005561f, -0.006398f, 0.004551f, 0.001483f, 0.015945f, -0.001327f, -0.016781f, -0.002658f, 0.002647f, -0.010798f, -0.002602f, 0.000554f, -0.006435f, 0.022660f, -0.005032f, -0.013888f, 0.001918f, 0.014196f, 0.007386f, -0.001378f, 0.008858f, 0.000586f, -0.009231f, -0.001825f, 0.024828f, 0.016033f, -0.016076f, -0.012724f, 0.003943f, -0.005739f, 0.035542f, 0.035277f, -0.095450f, 0.035867f, 0.048664f, -0.012528f, 0.033910f, -0.000532f, 0.017663f, -0.007957f, -0.019483f, -0.012897f, 0.020525f, 0.004605f, -0.027444f, -0.018141f, -0.002373f, -0.013153f, -0.006892f, -0.003165f, 0.059342f, 0.011697f, 0.013281f, -0.036798f, 0.025654f, -0.026260f, 0.000566f, 0.004384f, -0.039814f, 0.018478f, -0.014648f, 0.001883f, -0.016014f, -0.029117f, 0.000966f, 0.018990f, 0.054999f, 0.019511f, 0.005876f, 0.033704f, 0.014534f, -0.004300f, 0.005751f, + 0.000647f, 0.009750f, 0.005347f, 0.037364f, 0.016064f, 0.011419f, 0.005924f, -0.004590f, -0.011771f, -0.036429f, -0.030950f, 0.004448f, -0.004610f, -0.022408f, 0.002991f, 0.027639f, -0.042106f, 0.040647f, 0.010208f, -0.014726f, -0.001905f, -0.010656f, -0.003582f, 0.024693f, 0.010492f, 0.008167f, -0.028691f, -0.005608f, -0.039132f, -0.011821f, 0.010602f, 0.014404f, 0.013941f, -0.016665f, -0.013759f, 0.030332f, -0.003793f, -0.048687f, 0.006782f, -0.000712f, -0.000776f, -0.028675f, 0.009215f, 0.021761f, -0.003227f, 0.031243f, 0.020694f, -0.010266f, -0.000828f, -0.013292f, 0.016521f, -0.001270f, 0.005271f, 0.002728f, -0.007323f, -0.005723f, -0.001558f, -0.005938f, 0.006537f, -0.013205f, -0.001583f, 0.000971f, 0.006964f, -0.006718f, -0.008306f, -0.009376f, 0.000241f, -0.002151f, 0.005046f, 0.003251f, -0.000571f, -0.005788f, 0.006178f, 0.005078f, 0.000658f, 0.007268f, 0.000989f, 0.005252f, 0.004383f, 0.006910f, -0.002172f, -0.024323f, -0.001243f, -0.006799f, 0.004891f, -0.011234f, -0.085037f, 0.131774f, -0.130275f, -0.058855f, -0.029788f, -0.008839f, 0.076177f, 0.022449f, 0.085287f, 0.021361f, + -0.017451f, 0.067276f, 0.029077f, -0.022684f, 0.031508f, 0.028593f, 0.015953f, 0.026762f, 0.025886f, -0.022980f, -0.037231f, -0.026432f, 0.004316f, -0.024295f, 0.012893f, 0.007744f, 0.016715f, -0.002502f, 0.011564f, 0.003998f, 0.041920f, 0.010038f, 0.003980f, 0.013001f, -0.009724f, -0.000477f, 0.014830f, -0.026166f, -0.037322f, -0.025290f, -0.021688f, 0.003840f, 0.011145f, -0.026224f, -0.004226f, -0.015726f, -0.064719f, 0.032764f, -0.011637f, 0.016652f, -0.033999f, -0.011435f, -0.031481f, -0.043115f, 0.016434f, 0.011622f, 0.042194f, -0.001659f, 0.037193f, -0.015542f, 0.031178f, 0.003829f, 0.044458f, -0.031238f, 0.027559f, 0.033137f, 0.018365f, 0.019302f, 0.001755f, -0.013281f, 0.052066f, 0.034939f, -0.003296f, 0.062838f, 0.015160f, 0.007539f, 0.026980f, 0.040588f, 0.000659f, 0.018781f, 0.023490f, 0.010875f, 0.010364f, -0.004456f, 0.002244f, -0.036382f, -0.009178f, -0.004703f, 0.006016f, 0.007925f, 0.007442f, 0.024591f, 0.010969f, 0.012663f, -0.009326f, -0.001077f, 0.009784f, 0.001276f, 0.001023f, -0.008436f, 0.010237f, 0.008763f, 0.005050f, -0.006514f, 0.012962f, -0.001650f, + 0.002513f, -0.009578f, -0.008912f, -0.003383f, 0.001265f, 0.001435f, -0.005734f, -0.019828f, 0.004942f, 0.004689f, -0.005178f, -0.000685f, -0.004879f, 0.001853f, -0.007081f, 0.005302f, -0.006799f, 0.000654f, 0.018371f, -0.004779f, -0.017573f, 0.011983f, 0.008752f, 0.007440f, -0.003965f, -0.002013f, 0.080670f, 0.006707f, -0.048216f, -0.071445f, -0.037536f, -0.029978f, 0.009757f, 0.058637f, -0.000783f, -0.025212f, 0.052883f, 0.004035f, -0.042432f, 0.037998f, 0.041718f, -0.007946f, -0.000647f, -0.004376f, -0.037584f, 0.041549f, 0.002468f, 0.023430f, -0.013202f, -0.033918f, -0.058555f, 0.010294f, 0.007471f, 0.008667f, -0.008223f, 0.018018f, -0.019460f, -0.000659f, -0.037556f, -0.047268f, 0.016457f, -0.006379f, 0.014903f, -0.007230f, -0.017390f, -0.042880f, -0.065846f, 0.033264f, -0.036826f, 0.014594f, 0.031595f, -0.002729f, -0.017019f, -0.032842f, -0.023376f, 0.075244f, 0.017118f, -0.004007f, 0.009730f, -0.010576f, -0.030771f, -0.010632f, 0.043795f, -0.043083f, -0.071657f, -0.025581f, -0.022875f, -0.100797f, -0.078467f, -0.042780f, -0.043741f, 0.010110f, -0.000686f, -0.035524f, -0.067074f, -0.027121f, + -0.031846f, -0.023375f, -0.018560f, -0.014170f, -0.040268f, -0.039042f, 0.029996f, -0.034767f, 0.001826f, 0.004409f, -0.042229f, -0.008105f, -0.030925f, -0.039083f, -0.009675f, -0.007036f, 0.017386f, 0.006660f, 0.023498f, -0.025294f, 0.005881f, 0.013231f, -0.000531f, -0.033767f, -0.019066f, -0.022953f, -0.002599f, 0.009861f, -0.011662f, -0.016916f, 0.028056f, 0.016086f, 0.020043f, -0.034578f, 0.005218f, -0.017318f, -0.002394f, 0.000467f, 0.002824f, -0.005003f, 0.033453f, 0.001692f, -0.006545f, 0.003297f, 0.011338f, 0.016146f, 0.013525f, -0.003284f, 0.019538f, -0.015563f, -0.008360f, -0.007321f, -0.026992f, -0.001842f, -0.008705f, -0.034986f, -0.029024f, 0.003768f, 0.000726f, -0.001717f, -0.009394f, -0.008632f, -0.003297f, -0.006192f, 0.054576f, -0.005882f, 0.051962f, 0.078603f, -0.015030f, -0.083896f, -0.082519f, -0.017028f, 0.038592f, 0.005961f, -0.064895f, 0.051015f, -0.011638f, -0.041533f, 0.051117f, -0.096709f, -0.021072f, 0.001014f, -0.017848f, -0.014414f, 0.117365f, -0.048963f, 0.109951f, -0.004998f, 0.022666f, -0.007719f, -0.044257f, 0.071268f, 0.018220f, 0.074080f, -0.051019f, -0.049283f, + 0.015519f, -0.079769f, -0.024580f, -0.012468f, -0.056311f, 0.116439f, -0.010638f, -0.119972f, -0.002355f, -0.053271f, 0.015166f, 0.030024f, 0.047753f, 0.039569f, -0.048045f, -0.029392f, -0.074470f, -0.021317f, -0.034748f, 0.032052f, 0.020479f, -0.003675f, 0.021342f, -0.014473f, -0.052939f, -0.021168f, -0.061694f, 0.063126f, -0.047793f, -0.032417f, 0.055953f, 0.013645f, 0.094897f, 0.046513f, 0.007950f, 0.050614f, -0.067789f, -0.024863f, -0.069968f, -0.067343f, -0.010773f, -0.009551f, -0.085256f, 0.087841f, -0.015720f, -0.067657f, -0.101452f, 0.006913f, -0.020347f, 0.074399f, -0.004983f, 0.004130f, 0.009712f, -0.013005f, 0.013832f, 0.016953f, 0.034587f, -0.023030f, -0.023672f, -0.014752f, 0.000880f, -0.003998f, -0.005037f, -0.021753f, 0.024422f, 0.015447f, 0.029175f, -0.006639f, -0.015967f, -0.013327f, -0.005289f, 0.005739f, 0.039168f, 0.041945f, -0.006865f, 0.002531f, 0.022614f, -0.006087f, -0.052289f, -0.025150f, 0.003247f, 0.007404f, -0.004102f, -0.033099f, 0.011692f, -0.003750f, -0.007885f, -0.037952f, 0.015008f, 0.013111f, 0.045533f, 0.007634f, 0.011300f, -0.002055f, 0.018821f, 0.003458f, + -0.010686f, -0.020049f, -0.001444f, 0.002426f, 0.014886f, 0.006975f, -0.008522f, 0.001457f, -0.157272f, 0.081004f, 0.019136f, -0.034467f, -0.025314f, 0.049876f, 0.028028f, -0.030879f, -0.007981f, -0.074647f, -0.030744f, 0.031119f, -0.063858f, 0.002028f, 0.011797f, -0.020042f, -0.042518f, -0.029646f, 0.057875f, 0.022692f, -0.011329f, -0.083283f, 0.028279f, 0.051657f, 0.030306f, -0.064604f, -0.042518f, -0.000206f, 0.070003f, 0.005740f, -0.016699f, 0.010512f, 0.002433f, 0.035176f, -0.092845f, -0.080966f, 0.099758f, 0.014946f, 0.041823f, -0.095243f, 0.020788f, -0.004783f, 0.069588f, -0.062789f, -0.011766f, -0.095498f, 0.033355f, 0.067917f, 0.016183f, -0.042731f, 0.027338f, 0.098801f, -0.044398f, -0.047932f, -0.037057f, 0.013572f, 0.004261f, 0.086586f, -0.025913f, 0.006124f, -0.046881f, 0.014856f, -0.051424f, -0.002259f, 0.033179f, -0.064941f, 0.061646f, 0.018108f, -0.044617f, -0.070216f, -0.042188f, -0.004100f, 0.062177f, -0.112923f, -0.024390f, 0.101074f, 0.013473f, -0.046446f, -0.021485f, -0.032936f, 0.095825f, -0.011205f, -0.100297f, -0.012253f, 0.000017f, -0.025341f, 0.040974f, -0.007615f, + -0.014025f, 0.030450f, -0.002757f, -0.021188f, -0.026273f, -0.003356f, -0.023167f, 0.006448f, 0.017072f, 0.021943f, -0.020165f, -0.015468f, 0.020894f, -0.014295f, 0.019785f, -0.011096f, -0.020122f, 0.026980f, -0.015142f, 0.024232f, 0.034215f, 0.001582f, -0.049593f, -0.004010f, -0.029567f, 0.011667f, 0.018299f, 0.011315f, -0.034670f, -0.000298f, -0.026189f, 0.023807f, -0.007381f, -0.015666f, -0.010023f, 0.004627f, 0.008360f, -0.019198f, 0.008487f, 0.103770f, 0.053756f, 0.023743f, 0.024501f, 0.024784f, -0.016181f, -0.016642f, -0.034768f, 0.004184f, 0.011681f, 0.008952f, -0.001729f, -0.060154f, 0.029015f, 0.011511f, -0.041323f, -0.035587f, -0.017743f, -0.020913f, 0.015803f, -0.015689f, -0.017386f, 0.004889f, -0.001193f, -0.032058f, 0.041033f, -0.029509f, -0.009218f, -0.030655f, -0.027343f, 0.019597f, -0.011525f, -0.004241f, 0.010479f, 0.012708f, -0.003116f, -0.040724f, 0.009856f, 0.062909f, 0.013680f, -0.099277f, -0.006078f, -0.021734f, -0.030608f, 0.020630f, 0.022515f, 0.051038f, 0.024851f, -0.064839f, 0.070226f, -0.017592f, -0.048419f, 0.145689f, -0.029265f, -0.012722f, -0.047995f, -0.116243f, + 0.053261f, 0.058686f, 0.019568f, 0.022005f, -0.099054f, 0.028589f, -0.007636f, -0.024283f, -0.017351f, 0.003719f, -0.009318f, 0.015265f, 0.018990f, 0.003839f, -0.014606f, -0.028654f, 0.030190f, 0.037520f, 0.052730f, -0.026302f, -0.005239f, 0.010906f, -0.007652f, 0.027304f, -0.067986f, 0.006304f, 0.012129f, -0.032199f, 0.005358f, -0.026880f, 0.010497f, 0.000176f, 0.008429f, -0.004708f, 0.001946f, 0.002303f, -0.001315f, -0.001243f, -0.009013f, -0.007392f, 0.018229f, -0.010395f, -0.000647f, 0.013109f, 0.003017f, 0.000262f, 0.022258f, -0.018695f, 0.013636f, 0.015612f, -0.000984f, -0.003564f, -0.018832f, 0.014878f, -0.035215f, -0.010255f, 0.022959f, 0.006259f, -0.009629f, -0.024196f, 0.007175f, -0.005922f, 0.028551f, 0.003677f, -0.059641f, -0.141111f, -0.239975f, 0.020008f, 0.243119f, 0.023938f, 0.517345f, 0.523859f, 0.189400f, 0.525720f, 0.303918f, -0.087873f, -0.008785f, -0.046894f, -0.398395f, -0.329214f, -0.232036f, -0.412374f, -0.395009f, -0.111853f, -0.248745f, -0.215611f, 0.048655f, 0.069863f, -0.053882f, 0.077552f, 0.112438f, 0.000590f, 0.007655f, 0.225309f, 0.149529f, 0.057958f, + 0.165787f, 0.311365f, 0.145988f, 0.172000f, 0.383997f, 0.152866f, 0.068938f, 0.333149f, 0.320191f, 0.014941f, 0.204782f, 0.363397f, 0.000622f, 0.092961f, 0.214845f, -0.007494f, -0.175688f, 0.087956f, -0.036667f, -0.337054f, -0.315217f, -0.288626f, -0.562888f, -0.831062f, -0.579226f, -0.808525f, -1.078585f, -0.760082f, -0.616867f, -0.832910f, -0.532613f, -0.255273f, -0.247023f, -0.045834f, 0.248608f, 0.502429f, 0.567726f, 0.760790f, 1.033884f, 1.016921f, 0.961109f, 1.083612f, 1.080994f, 0.883808f, 0.710722f, 0.762045f, 0.505887f, 0.181147f, 0.241313f, 0.060425f, -0.443536f, -0.284104f, -0.301394f, -0.618087f, -0.522815f, -0.374819f, -0.440091f, -0.508278f, -0.316806f, -0.275725f, -0.385095f, -0.316587f, -0.164766f, -0.263112f, -0.347929f, -0.207929f, -0.147269f, -0.274763f, -0.155394f, 0.038063f, -0.085907f, -0.097133f, 0.111529f, -0.002114f, -0.139536f, -0.016108f, -0.087565f, -0.315033f, -0.219689f, -0.164722f, -0.293185f, -0.129521f, 0.074111f, 0.142939f, 0.261227f, 0.435460f, 0.504776f, 0.530892f, 0.593900f, 0.633453f, 0.622662f, 0.575463f, 0.534549f, 0.455444f, 0.361343f, 0.223542f, + 0.166973f, 0.022380f, -0.139852f, -0.244595f, -0.394130f, -0.566022f, -0.551544f, -0.467958f, -0.424991f, -0.367175f, -0.251623f, -0.210445f, -0.188881f, -0.134454f, -0.088475f, -0.077547f, -0.031815f, -0.017270f, -0.012323f, 0.004104f, 0.036076f, 0.059851f, 0.074813f, 0.089332f, 0.101892f, 0.100483f, 0.097401f, 0.083984f, 0.082135f, 0.059591f, 0.046792f, 0.024186f, 0.014046f, -0.010400f, -0.026507f, -0.035605f, -0.033689f, -0.044670f, -0.044018f, -0.043727f, -0.044652f, -0.050850f, -0.036588f, -0.037501f, -0.023303f, 0.000729f, 0.029858f, 0.043269f, 0.070094f, 0.082096f, 0.090717f, 0.096561f, 0.109928f, 0.103489f, 0.099792f, 0.096143f, 0.085394f, 0.057418f, 0.050018f, 0.039778f, 0.025660f, 0.008237f, 0.007956f, -0.011711f, -0.022722f, -0.034749f, -0.045602f, -0.065646f, -0.070694f, -0.084511f, -0.094446f, -0.103406f, -0.102051f, -0.110166f, -0.107764f, -0.102410f, -0.088926f, -0.077857f, -0.052615f, -0.033868f, -0.010978f, 0.004057f, 0.027155f, 0.037348f, 0.050254f, 0.055629f, 0.062512f, 0.058876f, 0.062532f, 0.055856f, 0.055882f, 0.046673f, 0.044097f, 0.033738f, 0.028178f, 0.016465f, + 0.013704f, 0.003976f, 0.003570f, -0.002300f, -0.000550f, -0.005665f, -0.002634f, -0.006032f, -0.002140f, -0.005259f, -0.000920f, -0.004005f, -0.000001f, -0.003166f, 0.000956f, -0.002047f} + }, + { + {0.019166f, -0.000861f, -0.000939f, 0.006013f, -0.002401f, 0.006879f, -0.003604f, -0.008985f, 0.003216f, 0.008889f, 0.001402f, -0.001457f, 0.011976f, 0.000338f, 0.000573f, -0.004124f, -0.002182f, 0.018475f, 0.002661f, -0.012648f, -0.009224f, 0.013013f, -0.001109f, 0.013498f, 0.001035f, -0.002638f, -0.001193f, 0.010181f, 0.002111f, 0.021441f, 0.009552f, 0.005861f, -0.001073f, 0.004719f, 0.009811f, -0.002448f, -0.007164f, -0.009162f, -0.001660f, 0.008155f, 0.007146f, 0.010900f, 0.003164f, -0.006178f, -0.006285f, -0.002704f, 0.004662f, -0.001519f, 0.002604f, -0.001298f, -0.009662f, -0.007574f, 0.003071f, 0.007070f, 0.004469f, -0.003574f, -0.003935f, -0.000318f, 0.010718f, 0.005363f, -0.001078f, -0.002423f, 0.005017f, 0.003283f, 0.002203f, -0.005464f, 0.002814f, 0.005056f, -0.000565f, 0.007745f, 0.009277f, -0.016088f, 0.005984f, 0.003241f, 0.010565f, 0.003124f, 0.000923f, 0.004745f, -0.002034f, -0.007517f, -0.002690f, -0.004542f, -0.001414f, -0.000962f, 0.004647f, -0.000262f, -0.003557f, 0.000025f, 0.000628f, 0.002691f, -0.002278f, 0.000414f, -0.000368f, 0.000945f, 0.001483f, 0.000948f, + 0.001888f, 0.000157f, 0.001202f, -0.002421f, 0.005415f, 0.008310f, 0.018110f, -0.014732f, 0.003351f, -0.003272f, 0.000250f, -0.018917f, 0.001937f, 0.011301f, -0.016741f, -0.003528f, 0.011254f, 0.029708f, 0.004305f, -0.000252f, 0.002156f, -0.018688f, -0.000562f, 0.013689f, 0.012234f, 0.000284f, -0.000350f, 0.001081f, 0.006438f, 0.010667f, 0.011332f, 0.012159f, -0.005419f, 0.002589f, -0.000709f, 0.004658f, 0.001353f, 0.002985f, -0.018880f, -0.005235f, 0.002982f, 0.001494f, -0.010428f, -0.000387f, 0.007167f, -0.008372f, 0.006601f, 0.006013f, 0.011226f, 0.005192f, -0.004253f, 0.005537f, 0.012541f, -0.007060f, -0.011274f, 0.003740f, 0.002647f, 0.002155f, 0.005956f, -0.005063f, -0.009114f, -0.013673f, 0.011024f, -0.002079f, -0.002553f, -0.004484f, 0.004849f, -0.000222f, 0.007155f, 0.014051f, 0.002874f, 0.000906f, -0.000740f, -0.003458f, -0.010984f, 0.017056f, 0.004228f, -0.002096f, 0.008859f, -0.001444f, -0.010127f, -0.008971f, -0.001967f, 0.003312f, -0.014778f, 0.001165f, -0.008757f, -0.001710f, 0.004524f, -0.000311f, 0.002382f, -0.002701f, -0.004830f, -0.001082f, 0.002450f, 0.003296f, + 0.002488f, -0.000569f, -0.001481f, -0.000143f, 0.002419f, -0.001330f, -0.002462f, -0.001896f, 0.000471f, -0.000987f, -0.008907f, -0.007637f, -0.009659f, -0.013603f, 0.007591f, -0.000128f, -0.006575f, -0.002549f, -0.003386f, 0.003010f, -0.005472f, -0.009327f, 0.002079f, -0.006049f, 0.015959f, 0.021331f, 0.016780f, -0.011603f, -0.000502f, -0.000724f, 0.004448f, -0.006421f, 0.013152f, 0.008326f, -0.001941f, 0.006439f, 0.009961f, 0.000854f, 0.002372f, 0.003538f, 0.009676f, -0.000888f, 0.003564f, 0.011689f, 0.001130f, -0.000091f, -0.005144f, 0.008422f, -0.012714f, 0.005155f, -0.001830f, -0.002560f, 0.008377f, -0.008109f, -0.001087f, 0.000328f, -0.011060f, 0.004612f, -0.002277f, 0.005136f, -0.000414f, -0.004716f, 0.003283f, 0.003540f, -0.000639f, 0.009814f, -0.000757f, 0.011315f, -0.000229f, -0.007457f, -0.003396f, 0.000471f, -0.005178f, 0.010094f, 0.005187f, 0.008670f, 0.009730f, -0.004242f, -0.009753f, -0.006296f, -0.000073f, -0.001762f, -0.002128f, 0.008016f, 0.010007f, -0.001469f, -0.005579f, 0.003540f, 0.002685f, -0.003822f, -0.005328f, 0.001843f, -0.007625f, 0.001879f, -0.000209f, -0.000202f, + -0.002089f, -0.007125f, 0.001554f, -0.002785f, 0.000231f, 0.003238f, -0.000066f, -0.003624f, 0.001770f, -0.004983f, -0.000155f, 0.000354f, -0.001216f, 0.000453f, 0.000897f, -0.002712f, -0.000017f, 0.000365f, -0.003316f, 0.000719f, -0.001043f, -0.000171f, -0.001775f, -0.000018f, 0.000841f, 0.002874f, -0.028173f, -0.006620f, -0.008785f, -0.015207f, 0.005175f, 0.004009f, -0.001828f, 0.007103f, -0.000993f, 0.005999f, 0.008429f, -0.003686f, -0.009856f, -0.012385f, -0.004743f, -0.011531f, 0.000898f, 0.001306f, -0.005042f, 0.006591f, -0.005663f, 0.003550f, -0.002590f, -0.006562f, -0.017531f, -0.006788f, 0.001558f, 0.002791f, 0.004603f, -0.006481f, 0.004651f, 0.007083f, 0.002331f, 0.016028f, 0.003978f, -0.000370f, 0.012381f, -0.008710f, 0.007152f, 0.001219f, -0.004163f, -0.005883f, 0.007987f, 0.001118f, 0.002527f, -0.018831f, -0.003477f, -0.006192f, 0.018970f, 0.008176f, 0.006837f, 0.007745f, 0.008713f, 0.006939f, 0.009662f, -0.005059f, -0.002063f, 0.005969f, 0.009493f, -0.001224f, 0.011087f, -0.005910f, 0.002434f, -0.002349f, 0.009394f, 0.014107f, -0.021940f, 0.005809f, -0.005419f, 0.000758f, + -0.010344f, -0.005268f, 0.001744f, -0.003087f, -0.004435f, -0.008729f, -0.003948f, 0.004197f, -0.000199f, 0.009458f, -0.000975f, 0.003684f, 0.008161f, 0.013008f, -0.000469f, 0.003482f, -0.001500f, 0.006089f, 0.000983f, 0.002996f, -0.004002f, -0.001349f, 0.000447f, 0.002820f, -0.001777f, -0.002870f, 0.000161f, 0.000230f, -0.002254f, 0.000413f, 0.001335f, 0.000123f, 0.003795f, -0.001590f, -0.001744f, 0.000500f, 0.003311f, -0.001260f, 0.000096f, -0.001123f, 0.001982f, 0.003104f, -0.000400f, 0.002973f, 0.003195f, -0.000693f, -0.001340f, -0.000490f, 0.011017f, 0.006719f, 0.004008f, -0.002117f, 0.000925f, 0.001166f, 0.014214f, -0.011305f, 0.014257f, -0.001924f, 0.007776f, 0.014561f, -0.009123f, 0.011272f, -0.007059f, 0.005766f, 0.002221f, 0.017118f, 0.007595f, -0.009595f, -0.015722f, 0.003540f, -0.011788f, 0.009655f, -0.002418f, 0.012594f, -0.009421f, -0.001580f, -0.007546f, 0.004309f, 0.002803f, 0.003564f, -0.000952f, -0.001397f, -0.013738f, -0.006076f, 0.011277f, -0.009053f, -0.001841f, 0.007281f, 0.000332f, -0.007103f, 0.002279f, 0.000573f, -0.001600f, -0.006169f, 0.012318f, 0.003871f, + -0.017597f, -0.007995f, -0.014212f, -0.002550f, -0.012572f, -0.021698f, -0.004957f, 0.009370f, 0.026616f, 0.005757f, 0.002167f, 0.012486f, -0.000367f, -0.009903f, -0.008631f, 0.006939f, 0.002695f, 0.004660f, 0.007651f, -0.018928f, -0.004677f, -0.017417f, -0.003853f, 0.004788f, -0.006917f, -0.016107f, 0.001577f, 0.006863f, -0.003477f, -0.006037f, -0.002873f, 0.002711f, -0.002432f, -0.000749f, 0.003462f, -0.002277f, -0.002424f, -0.003311f, -0.002407f, -0.007421f, 0.002577f, -0.001993f, 0.003329f, -0.001323f, 0.001926f, 0.004558f, 0.000599f, -0.001333f, -0.000487f, -0.003998f, -0.002652f, -0.006285f, -0.005694f, 0.000778f, 0.000621f, -0.000083f, 0.002154f, 0.003548f, 0.002482f, -0.000083f, 0.002254f, 0.001871f, -0.001755f, 0.001339f, 0.001418f, -0.003320f, -0.001403f, 0.030469f, 0.007463f, 0.022013f, -0.010232f, -0.001616f, -0.007232f, -0.001881f, 0.023738f, -0.020280f, 0.006915f, 0.002109f, 0.031034f, 0.016263f, 0.020650f, 0.003568f, -0.004931f, 0.009493f, -0.006576f, -0.025770f, 0.005030f, 0.001279f, 0.003163f, 0.019993f, 0.002078f, -0.012030f, -0.000886f, 0.000352f, 0.006556f, 0.006803f, + -0.000449f, -0.002821f, 0.008390f, -0.009822f, -0.002502f, -0.005063f, -0.002320f, 0.002309f, 0.000522f, 0.017588f, 0.002711f, 0.013771f, 0.016235f, 0.004270f, 0.014336f, -0.001234f, 0.004844f, 0.008441f, -0.009163f, -0.014087f, 0.001890f, 0.013820f, -0.022227f, 0.006476f, -0.017024f, -0.016224f, -0.009697f, -0.004631f, -0.014964f, -0.014814f, -0.015348f, -0.008126f, -0.003716f, 0.010212f, 0.000389f, 0.012271f, 0.002022f, -0.010445f, 0.015843f, -0.016518f, -0.006062f, -0.006947f, -0.006576f, -0.008844f, -0.011271f, 0.016117f, 0.012814f, -0.007313f, 0.006359f, 0.004945f, 0.013015f, -0.000136f, 0.009436f, -0.004761f, 0.011827f, 0.005725f, -0.006779f, 0.000215f, -0.006114f, 0.007267f, -0.006994f, 0.000607f, 0.005882f, 0.000256f, 0.004529f, -0.001437f, 0.000831f, 0.002883f, -0.000907f, -0.003310f, 0.003026f, -0.001019f, 0.000624f, -0.006197f, -0.004874f, -0.004980f, -0.003639f, -0.000808f, -0.001982f, -0.004334f, -0.000075f, 0.000699f, -0.001841f, 0.000319f, -0.000027f, -0.002593f, 0.000649f, -0.016585f, -0.016590f, -0.009841f, -0.010165f, -0.005496f, -0.004155f, -0.019885f, -0.015892f, -0.013527f, + -0.002008f, -0.001211f, -0.002439f, 0.013714f, 0.001444f, 0.007056f, 0.010621f, 0.012305f, 0.002004f, 0.024103f, 0.030304f, -0.000680f, 0.008819f, 0.006770f, -0.003613f, 0.013173f, 0.007232f, -0.027239f, -0.000848f, -0.009462f, 0.001634f, 0.020963f, 0.008425f, -0.021794f, -0.005715f, 0.009613f, 0.009656f, 0.001269f, 0.027887f, -0.011590f, 0.011280f, 0.011294f, 0.012455f, 0.007191f, 0.014498f, -0.024554f, 0.009031f, -0.009622f, 0.014608f, 0.000478f, 0.006326f, -0.018452f, 0.013558f, 0.009714f, -0.002316f, 0.009403f, -0.001531f, 0.002576f, -0.000123f, -0.009658f, 0.002551f, -0.006200f, 0.006060f, -0.007634f, 0.009470f, 0.002892f, 0.023632f, 0.017559f, -0.005503f, 0.006228f, -0.019389f, 0.016858f, -0.005266f, 0.010311f, 0.018335f, 0.017895f, 0.000889f, 0.018279f, 0.012719f, 0.008607f, 0.009352f, 0.016789f, 0.001710f, 0.003569f, -0.013734f, -0.002462f, -0.003919f, 0.003089f, -0.009899f, 0.001414f, -0.007206f, 0.002181f, -0.007179f, 0.002133f, -0.002622f, -0.004586f, -0.004227f, 0.002903f, 0.000336f, -0.002351f, -0.001679f, -0.005930f, -0.001872f, 0.000956f, -0.001683f, -0.004300f, + 0.000648f, 0.004296f, -0.010031f, -0.006299f, -0.005528f, 0.003974f, -0.006145f, 0.003707f, 0.000061f, 0.002093f, -0.005088f, -0.007609f, -0.001678f, 0.001392f, 0.016012f, -0.014277f, -0.003673f, 0.012651f, -0.006725f, 0.021712f, -0.006902f, -0.015451f, 0.028986f, 0.039270f, 0.008789f, -0.015596f, 0.010910f, -0.008258f, 0.016203f, 0.009331f, -0.003480f, -0.016539f, -0.010730f, -0.028075f, 0.007375f, 0.011866f, -0.024662f, -0.003016f, 0.014402f, 0.003671f, -0.001157f, 0.000511f, -0.002987f, -0.013454f, 0.003293f, 0.016513f, 0.000719f, 0.003509f, 0.006045f, 0.023421f, -0.015441f, -0.000501f, 0.017115f, -0.015686f, 0.022974f, 0.001129f, 0.032271f, -0.026880f, -0.024126f, 0.013238f, 0.001238f, -0.003276f, 0.006973f, -0.002274f, 0.009019f, 0.005455f, 0.017970f, 0.017024f, -0.014065f, 0.002531f, -0.009174f, -0.005617f, 0.010777f, -0.001383f, -0.005468f, -0.002435f, 0.000563f, 0.015988f, -0.030573f, 0.023295f, -0.007257f, -0.010472f, 0.017375f, -0.014024f, 0.013943f, -0.018853f, -0.010506f, -0.003532f, -0.013909f, -0.004872f, -0.009802f, -0.015683f, -0.010472f, 0.003377f, -0.003499f, -0.003799f, + -0.000161f, -0.007325f, -0.002260f, -0.001122f, 0.009767f, -0.000538f, 0.001478f, 0.003867f, -0.004015f, -0.001634f, -0.003387f, 0.002316f, 0.004819f, 0.001261f, -0.001877f, 0.011359f, 0.000143f, 0.008418f, -0.009103f, -0.005971f, -0.005371f, -0.003962f, 0.004433f, 0.002077f, 0.000398f, 0.006591f, -0.004847f, 0.005023f, 0.002094f, 0.004669f, 0.002760f, 0.000625f, -0.005728f, -0.019397f, -0.014955f, -0.006447f, -0.014031f, -0.021155f, -0.004548f, 0.007810f, 0.025999f, 0.004320f, -0.015825f, -0.029081f, -0.006169f, 0.009128f, -0.005183f, 0.031396f, 0.009771f, -0.010997f, -0.022229f, -0.027600f, -0.052513f, -0.004202f, -0.005867f, 0.020167f, 0.014780f, -0.010660f, 0.001283f, -0.008230f, -0.004618f, 0.018932f, -0.000578f, 0.001083f, -0.002378f, 0.021468f, 0.003542f, -0.006337f, -0.001143f, -0.000710f, 0.005707f, -0.019381f, -0.006212f, -0.007573f, 0.030713f, 0.007263f, -0.032468f, 0.008436f, -0.016889f, -0.009378f, 0.004689f, -0.030059f, 0.009299f, 0.021812f, 0.019190f, 0.015112f, 0.003589f, 0.006154f, -0.001055f, 0.003285f, -0.019088f, 0.006990f, -0.029839f, -0.005627f, 0.016965f, 0.006315f, + 0.017382f, 0.017308f, 0.014161f, -0.009661f, -0.022044f, -0.019127f, -0.014936f, 0.004912f, 0.005869f, 0.010253f, 0.010032f, 0.002278f, 0.006680f, 0.021569f, 0.030010f, -0.007134f, 0.010650f, -0.007405f, -0.008163f, 0.009280f, -0.013273f, -0.004591f, 0.000475f, -0.008294f, 0.007763f, -0.007197f, -0.006399f, -0.003416f, 0.001817f, -0.001838f, 0.004200f, 0.000146f, 0.006108f, -0.001390f, -0.003807f, -0.001662f, -0.003728f, -0.009440f, 0.002483f, 0.005176f, -0.000520f, 0.003425f, -0.000979f, 0.004661f, 0.008702f, 0.008465f, 0.006478f, -0.006663f, -0.003470f, 0.006526f, -0.002025f, -0.002520f, 0.000552f, -0.001021f, 0.006439f, -0.001403f, -0.000428f, -0.000937f, 0.015287f, 0.027205f, 0.031395f, 0.022792f, 0.038824f, -0.018137f, 0.027580f, -0.023616f, -0.018605f, 0.020519f, 0.026118f, 0.030950f, -0.031925f, -0.000130f, 0.007997f, -0.023565f, 0.011152f, -0.010329f, -0.016769f, 0.019137f, -0.024859f, 0.026995f, -0.025551f, 0.025293f, -0.018346f, -0.006693f, -0.001704f, -0.033321f, -0.004659f, 0.036862f, -0.009435f, -0.026244f, 0.005607f, 0.017148f, -0.019199f, 0.009563f, 0.039779f, 0.021460f, + 0.008043f, 0.017667f, -0.021063f, 0.014119f, -0.012656f, -0.036193f, -0.011007f, -0.009422f, 0.002683f, 0.016500f, 0.020306f, -0.008937f, -0.015900f, 0.014534f, 0.000099f, 0.011138f, 0.006917f, -0.005848f, 0.001982f, -0.014362f, 0.002195f, 0.004645f, -0.000192f, 0.004791f, 0.032741f, -0.003998f, 0.003241f, 0.009423f, 0.001956f, 0.004087f, -0.016649f, -0.018161f, 0.012665f, -0.021630f, -0.029467f, -0.030851f, 0.024049f, 0.015635f, 0.004637f, -0.001603f, -0.003571f, 0.011554f, -0.001813f, -0.008599f, 0.011025f, 0.030356f, 0.020475f, -0.007927f, -0.005140f, 0.009460f, 0.005429f, -0.002041f, -0.004791f, 0.003510f, 0.004278f, -0.001183f, 0.001249f, 0.016529f, 0.003944f, 0.002444f, 0.006452f, -0.005253f, 0.001211f, 0.005330f, 0.010971f, -0.000955f, 0.000799f, -0.010611f, 0.003487f, -0.005472f, -0.004058f, 0.011302f, 0.009004f, 0.000694f, 0.007062f, -0.005965f, -0.002915f, 0.003478f, 0.000085f, -0.003107f, -0.006152f, -0.006548f, 0.004290f, 0.002042f, -0.002874f, 0.003960f, -0.025180f, -0.040001f, 0.014239f, 0.051927f, 0.025431f, -0.009754f, -0.040165f, -0.013975f, 0.002563f, 0.005585f, + -0.007806f, 0.019696f, 0.013303f, -0.014620f, -0.007554f, -0.001987f, -0.026584f, 0.036896f, -0.016829f, 0.013121f, -0.003093f, -0.008742f, -0.032394f, 0.010573f, 0.006713f, -0.004077f, 0.003900f, 0.014464f, -0.005307f, 0.036070f, -0.008105f, -0.005553f, 0.030100f, -0.003407f, -0.021646f, -0.019381f, -0.037380f, 0.005091f, -0.008321f, -0.011650f, -0.008175f, -0.027450f, -0.011511f, -0.025710f, 0.002704f, -0.022635f, 0.020376f, -0.012813f, -0.000461f, 0.006303f, 0.002492f, 0.011745f, -0.010894f, -0.027778f, 0.012025f, -0.003240f, 0.006852f, -0.006247f, -0.002849f, 0.000777f, 0.026661f, 0.039927f, 0.010808f, -0.012592f, 0.013762f, 0.014468f, 0.015826f, -0.006572f, -0.013417f, 0.020342f, 0.009597f, 0.027199f, 0.006283f, 0.007237f, 0.000720f, 0.008153f, 0.024473f, 0.033454f, 0.016426f, 0.005621f, 0.012530f, 0.005263f, -0.007053f, -0.022974f, -0.014604f, 0.002578f, 0.011063f, 0.001722f, -0.000632f, -0.008623f, -0.003241f, 0.004678f, 0.003141f, -0.018164f, -0.003495f, 0.004066f, -0.000815f, -0.009059f, -0.007606f, -0.010123f, 0.001860f, -0.001807f, 0.006830f, 0.012823f, 0.007504f, 0.000398f, + -0.004333f, 0.007838f, 0.009400f, 0.000611f, 0.003101f, -0.012681f, -0.000527f, -0.004307f, -0.013041f, 0.002717f, 0.002300f, -0.011609f, -0.001261f, -0.002728f, 0.004304f, -0.004515f, 0.010839f, 0.000052f, -0.002653f, 0.014631f, 0.077772f, 0.001722f, -0.020532f, 0.064352f, 0.032913f, 0.028371f, 0.056363f, 0.055701f, 0.016222f, 0.017633f, 0.014270f, 0.060551f, 0.003339f, -0.021526f, 0.026419f, 0.005485f, -0.023497f, -0.026787f, 0.023544f, 0.022518f, 0.043804f, -0.004380f, 0.003354f, 0.000481f, 0.006158f, -0.026015f, 0.029341f, 0.020182f, 0.009131f, -0.020232f, 0.031040f, -0.009463f, -0.001467f, -0.041099f, -0.008786f, -0.003210f, -0.002444f, -0.021731f, 0.014315f, -0.020222f, -0.011353f, -0.011895f, 0.005999f, -0.014048f, -0.018731f, -0.026285f, 0.027794f, -0.020037f, 0.029549f, 0.012879f, 0.024292f, 0.007331f, -0.024433f, -0.001374f, -0.039368f, -0.018443f, -0.021401f, 0.008108f, -0.027305f, -0.015130f, -0.004863f, 0.000006f, 0.028577f, 0.002742f, -0.004341f, -0.045786f, 0.018165f, 0.015169f, -0.000968f, -0.000705f, -0.022948f, 0.017372f, 0.002024f, -0.020102f, 0.054028f, 0.011795f, + -0.006931f, -0.000996f, -0.021644f, 0.003251f, 0.027108f, -0.007510f, -0.002156f, -0.030350f, -0.017680f, 0.010506f, -0.004127f, -0.014627f, 0.017568f, 0.010314f, -0.017788f, 0.015499f, -0.006121f, 0.004635f, -0.005919f, 0.015152f, 0.003413f, -0.002863f, 0.000487f, 0.003349f, -0.021455f, -0.000193f, -0.007897f, 0.005943f, 0.007419f, 0.010077f, -0.008787f, 0.007227f, 0.005818f, 0.004159f, 0.007939f, 0.008847f, -0.000637f, 0.006705f, -0.010316f, 0.017708f, -0.008196f, 0.014903f, -0.010616f, 0.006322f, -0.023616f, -0.043311f, 0.013302f, 0.013043f, -0.013400f, 0.028190f, -0.031171f, 0.033859f, -0.024427f, -0.014228f, 0.010899f, 0.007834f, 0.087390f, 0.034144f, 0.013091f, -0.054537f, -0.001451f, -0.012947f, -0.028905f, -0.008402f, -0.010565f, -0.009572f, -0.003236f, -0.045355f, -0.000873f, -0.017164f, 0.000562f, 0.022073f, -0.024057f, 0.028644f, -0.009392f, -0.031716f, -0.028289f, 0.022691f, 0.017412f, -0.007099f, -0.015619f, 0.028942f, -0.015621f, -0.014762f, 0.022756f, -0.000660f, 0.007003f, -0.023455f, -0.000790f, -0.013795f, 0.029187f, -0.004412f, 0.041869f, -0.015673f, 0.006293f, 0.012603f, + -0.001196f, 0.001587f, 0.012774f, -0.027010f, -0.004328f, 0.034389f, 0.002792f, 0.009428f, -0.000319f, -0.027917f, 0.011927f, -0.019494f, 0.009919f, 0.030059f, 0.039023f, 0.042536f, 0.044805f, -0.009688f, 0.015726f, -0.000382f, 0.024044f, 0.054277f, -0.059637f, 0.046342f, -0.027571f, 0.012437f, 0.037276f, -0.023546f, 0.002401f, 0.011678f, 0.010166f, -0.002811f, 0.025945f, -0.010082f, -0.008204f, 0.010943f, -0.006222f, 0.024965f, -0.003707f, 0.009444f, -0.020146f, -0.003306f, -0.000602f, -0.016261f, -0.006827f, -0.020505f, 0.000214f, 0.005886f, 0.001990f, 0.022696f, -0.007504f, 0.001499f, 0.002452f, 0.009627f, 0.002376f, 0.009710f, -0.013474f, 0.010102f, 0.003114f, -0.000609f, 0.007223f, 0.009902f, -0.011330f, 0.010286f, -0.021786f, -0.019292f, 0.013435f, -0.006496f, -0.015456f, -0.002264f, 0.006324f, -0.009975f, 0.017538f, -0.020966f, -0.046049f, -0.009001f, 0.009350f, 0.000600f, 0.010839f, -0.034269f, -0.004606f, -0.007052f, -0.048670f, -0.037753f, 0.019418f, 0.020182f, 0.009407f, 0.013901f, -0.024884f, -0.012281f, -0.017618f, 0.053216f, 0.012859f, 0.001422f, 0.039976f, 0.022908f, + 0.020144f, 0.018005f, 0.015776f, -0.028176f, 0.020317f, 0.008143f, -0.008544f, 0.015828f, -0.014077f, -0.014074f, 0.027935f, -0.012162f, 0.017651f, 0.036663f, 0.001411f, 0.006963f, -0.000518f, 0.002306f, -0.007857f, -0.021632f, -0.027081f, -0.044333f, 0.018287f, -0.037566f, 0.014232f, 0.014505f, 0.019026f, 0.000043f, 0.001316f, -0.005335f, -0.028668f, -0.013777f, 0.014833f, -0.010089f, 0.015305f, 0.036674f, -0.011110f, 0.028034f, 0.013083f, 0.003035f, -0.001401f, -0.010118f, -0.026506f, -0.001215f, -0.035886f, -0.012628f, 0.038894f, -0.020756f, 0.006360f, -0.063894f, 0.030511f, -0.011907f, 0.009989f, -0.049323f, -0.043560f, 0.004051f, 0.011989f, 0.022438f, -0.050579f, -0.005470f, 0.000891f, 0.034552f, 0.028633f, 0.031972f, -0.009963f, 0.000592f, 0.005135f, 0.016678f, 0.004265f, 0.009133f, 0.026775f, 0.014959f, -0.009821f, 0.009527f, 0.002872f, 0.001808f, -0.000283f, -0.005718f, -0.021579f, 0.007598f, -0.010291f, 0.003184f, 0.008980f, -0.000367f, 0.002265f, -0.000384f, 0.009014f, -0.005488f, 0.036061f, 0.009615f, -0.001073f, 0.019839f, 0.012414f, 0.001567f, 0.006330f, -0.000703f, + -0.015596f, 0.020853f, -0.006505f, 0.002720f, 0.025413f, 0.013816f, -0.007446f, -0.000005f, -0.009606f, 0.016391f, 0.011815f, 0.013979f, 0.012434f, 0.038061f, -0.090153f, -0.022180f, -0.053555f, 0.018067f, -0.048099f, -0.016126f, -0.054510f, 0.014575f, -0.028435f, -0.021804f, -0.004676f, -0.046288f, -0.016853f, -0.049595f, -0.025068f, -0.057423f, 0.012359f, -0.053128f, -0.021031f, -0.027606f, -0.015494f, -0.014596f, -0.012436f, -0.050716f, -0.029026f, -0.038585f, -0.019827f, -0.011148f, 0.021869f, -0.003176f, 0.016316f, -0.031566f, -0.005169f, 0.001817f, -0.036398f, 0.007029f, -0.002581f, 0.003081f, 0.009493f, -0.036814f, -0.002113f, 0.013577f, -0.004586f, 0.015305f, 0.030535f, 0.055383f, -0.046040f, 0.002829f, 0.061526f, 0.000299f, 0.030184f, -0.021577f, 0.038114f, 0.006973f, -0.009144f, -0.051183f, -0.030174f, 0.042503f, 0.026204f, 0.041504f, 0.001485f, -0.028951f, 0.010542f, 0.014998f, 0.029647f, -0.055657f, 0.000366f, 0.010545f, -0.030757f, -0.010238f, -0.013315f, -0.018632f, -0.044638f, 0.068984f, -0.012707f, -0.022162f, -0.014189f, 0.014304f, 0.016532f, -0.038985f, -0.036271f, -0.001437f, + 0.011513f, 0.001810f, 0.000090f, -0.007603f, -0.013198f, -0.000167f, 0.034729f, 0.021538f, -0.000254f, -0.028624f, -0.019837f, 0.003217f, -0.011069f, 0.007585f, 0.009151f, 0.004680f, -0.003042f, -0.014765f, 0.006015f, 0.007321f, -0.004108f, 0.011083f, -0.006469f, -0.025418f, -0.012098f, -0.001451f, 0.007361f, -0.001888f, -0.008199f, -0.037194f, -0.014893f, -0.008517f, 0.002790f, 0.004668f, -0.016098f, -0.028811f, 0.011264f, 0.017305f, -0.015308f, 0.000693f, -0.013461f, 0.014574f, -0.004717f, -0.025554f, 0.038352f, -0.064726f, -0.000681f, -0.012822f, 0.027988f, -0.014242f, -0.039890f, 0.034861f, -0.070024f, -0.060375f, -0.049834f, 0.028598f, -0.014816f, 0.001624f, -0.027167f, -0.025709f, -0.030044f, 0.016921f, 0.014654f, 0.048859f, 0.023010f, 0.009917f, 0.045495f, -0.012049f, 0.016521f, -0.016350f, 0.014254f, 0.008272f, 0.027130f, 0.043841f, 0.022919f, -0.009055f, -0.026733f, -0.015922f, -0.005418f, 0.024652f, -0.008057f, 0.006922f, 0.000989f, -0.011239f, 0.023322f, -0.001409f, 0.019161f, 0.014242f, -0.037218f, 0.030823f, 0.056575f, 0.008873f, 0.047340f, 0.045824f, 0.020829f, 0.015222f, + 0.000190f, 0.024250f, -0.014970f, -0.054876f, -0.017804f, 0.040891f, 0.000492f, -0.020128f, 0.021117f, 0.058042f, -0.013135f, 0.004520f, -0.041840f, 0.041403f, 0.037154f, -0.002608f, 0.012035f, -0.018843f, 0.095228f, -0.059598f, -0.051699f, -0.048819f, 0.004276f, 0.001829f, -0.014261f, 0.042496f, -0.059408f, -0.000924f, -0.037916f, 0.014648f, 0.017026f, -0.002582f, 0.041486f, 0.009626f, -0.003329f, -0.022274f, -0.000097f, 0.010538f, 0.030294f, -0.020532f, -0.026374f, 0.011189f, -0.015632f, -0.004056f, 0.003889f, 0.007336f, 0.002675f, 0.000287f, -0.001769f, -0.024869f, 0.002604f, 0.006115f, 0.017401f, -0.014666f, -0.008146f, 0.009806f, 0.004808f, 0.006861f, 0.000849f, -0.016204f, -0.001599f, -0.018410f, -0.013867f, 0.018785f, 0.009718f, 0.010637f, 0.007557f, -0.000502f, 0.003882f, -0.004920f, 0.011564f, 0.001688f, -0.004812f, -0.000959f, -0.016023f, -0.005983f, -0.010553f, 0.006716f, 0.104581f, -0.023516f, 0.058508f, 0.099330f, -0.033501f, 0.047310f, 0.021711f, -0.063538f, 0.058023f, 0.008131f, -0.027009f, 0.041788f, 0.018563f, 0.039223f, 0.000154f, -0.034213f, 0.032278f, 0.010327f, + 0.000652f, 0.009402f, -0.009140f, -0.036165f, -0.020722f, -0.017638f, -0.030295f, -0.023457f, -0.005355f, 0.023027f, -0.020714f, -0.013348f, -0.029840f, 0.005791f, 0.003063f, 0.004223f, 0.042066f, -0.025537f, 0.010491f, -0.023740f, -0.012593f, 0.023240f, -0.018612f, -0.043334f, -0.054397f, 0.062522f, 0.028520f, -0.016320f, 0.044004f, -0.040706f, -0.034638f, -0.021981f, -0.003068f, 0.005746f, 0.000742f, -0.037943f, -0.026982f, -0.029815f, -0.063678f, -0.040714f, -0.034108f, 0.011725f, 0.021944f, -0.002426f, 0.037659f, 0.006416f, -0.037933f, -0.033752f, 0.050654f, -0.043734f, 0.006467f, 0.043349f, -0.005391f, -0.076440f, 0.053319f, -0.028607f, 0.008782f, 0.002753f, 0.044161f, -0.011191f, -0.016552f, -0.002883f, -0.024860f, 0.012496f, -0.043071f, 0.014079f, -0.055460f, -0.036328f, 0.021778f, -0.024276f, -0.006605f, -0.003707f, -0.032860f, 0.010192f, -0.019119f, 0.015194f, -0.004865f, -0.001249f, 0.001867f, 0.019975f, -0.014715f, -0.012489f, 0.003792f, -0.021543f, -0.009076f, 0.002545f, -0.013500f, -0.015279f, -0.009920f, -0.006863f, -0.015780f, -0.009534f, 0.022628f, -0.018922f, 0.008821f, 0.012941f, + -0.003156f, 0.013883f, -0.019221f, 0.001513f, -0.013475f, 0.027655f, 0.005426f, 0.009549f, -0.019674f, 0.024212f, 0.017198f, 0.018387f, 0.008152f, 0.001810f, 0.006204f, 0.013205f, -0.013466f, 0.000862f, -0.011195f, -0.050535f, 0.030389f, -0.014322f, 0.051261f, 0.035143f, -0.081343f, -0.010262f, 0.008885f, -0.049654f, -0.007855f, -0.008125f, 0.060475f, 0.043478f, 0.040484f, 0.050143f, -0.001626f, -0.035135f, -0.026962f, -0.027966f, 0.001573f, -0.077835f, 0.009591f, 0.066657f, -0.060515f, -0.109684f, 0.011418f, -0.041044f, 0.081167f, -0.000540f, 0.002902f, 0.054254f, -0.024616f, 0.011147f, -0.002269f, -0.014740f, 0.047361f, -0.013595f, 0.024079f, 0.079212f, -0.058055f, -0.033269f, -0.052894f, 0.026449f, 0.004644f, 0.053031f, -0.030181f, 0.020893f, 0.003056f, 0.048300f, 0.028678f, -0.023622f, -0.015500f, 0.018273f, -0.008519f, -0.002153f, -0.033908f, -0.033656f, 0.017874f, -0.007514f, -0.009717f, -0.019139f, 0.043939f, -0.016593f, -0.017374f, 0.073361f, 0.078624f, 0.050803f, -0.066459f, -0.005916f, -0.020759f, 0.025897f, 0.097856f, -0.012355f, -0.074246f, -0.004875f, -0.030479f, 0.043851f, + 0.019802f, -0.049882f, 0.026459f, 0.019379f, 0.025814f, -0.048128f, -0.017165f, 0.003582f, 0.042814f, 0.002640f, -0.006684f, 0.007005f, -0.014439f, 0.003374f, 0.042784f, 0.020710f, -0.017575f, -0.021306f, -0.004679f, 0.013447f, 0.017211f, 0.022531f, -0.021112f, -0.008062f, -0.038837f, -0.008160f, 0.024858f, -0.024469f, -0.003684f, -0.015105f, -0.013857f, -0.022982f, -0.004654f, 0.015691f, -0.003341f, -0.001641f, 0.004090f, 0.010011f, -0.010183f, -0.029323f, -0.030277f, 0.018402f, 0.014301f, 0.025702f, -0.012654f, 0.018871f, 0.055326f, 0.002925f, -0.032834f, -0.005278f, 0.003166f, -0.002930f, -0.020474f, -0.008398f, 0.006264f, 0.016089f, -0.003252f, -0.047672f, 0.006976f, -0.039076f, 0.035988f, 0.021069f, -0.038651f, 0.065783f, 0.099137f, 0.003064f, -0.004813f, -0.033741f, -0.034569f, 0.006043f, 0.005559f, -0.016495f, 0.089681f, -0.007839f, 0.066855f, 0.053972f, -0.067845f, -0.001863f, -0.022840f, -0.072141f, 0.018127f, 0.017060f, 0.039425f, 0.068045f, -0.002179f, -0.019076f, 0.022171f, 0.024858f, 0.053234f, 0.022632f, 0.004786f, 0.044206f, 0.046118f, 0.016201f, -0.010731f, 0.040574f, + 0.017857f, 0.048702f, 0.010274f, 0.014266f, 0.030194f, 0.051574f, -0.008634f, -0.040316f, -0.047049f, -0.015006f, -0.016405f, 0.080960f, 0.044120f, 0.124795f, -0.005867f, -0.062398f, 0.055173f, -0.018610f, -0.021549f, -0.018458f, -0.042393f, 0.006611f, 0.023738f, -0.000553f, -0.023760f, 0.088800f, -0.017689f, 0.104729f, -0.028605f, 0.056540f, 0.004892f, -0.017229f, -0.056959f, -0.080911f, 0.076236f, -0.006970f, -0.013021f, -0.022949f, 0.070865f, 0.000391f, -0.074336f, 0.136752f, 0.042886f, 0.015281f, -0.015615f, -0.056787f, 0.028710f, 0.001982f, 0.028906f, -0.026155f, 0.020642f, 0.010815f, -0.012796f, -0.019202f, 0.003606f, -0.023300f, -0.011065f, -0.026526f, 0.003250f, -0.004282f, -0.000255f, 0.009409f, 0.022380f, -0.022194f, 0.008835f, -0.010599f, -0.000550f, 0.030393f, 0.020084f, -0.010235f, -0.037316f, -0.000726f, -0.002078f, 0.005459f, 0.034358f, -0.021709f, -0.012958f, 0.009074f, 0.021630f, -0.030660f, 0.002246f, 0.021026f, -0.000302f, -0.001901f, -0.032352f, 0.017370f, -0.000848f, 0.015871f, -0.033797f, 0.004367f, 0.014611f, 0.011913f, 0.017025f, -0.032076f, 0.027640f, -0.034017f, + 0.021908f, 0.092803f, -0.055324f, -0.034904f, 0.007075f, 0.017068f, -0.010877f, 0.065778f, 0.050506f, 0.051822f, 0.016959f, 0.025771f, 0.042858f, 0.027091f, -0.016080f, -0.025422f, -0.058513f, -0.009050f, 0.031527f, 0.011278f, 0.006499f, -0.021299f, -0.055360f, -0.015702f, -0.008105f, 0.056387f, 0.000383f, -0.006358f, 0.042119f, -0.006416f, 0.011374f, 0.009404f, -0.095042f, 0.024611f, 0.025192f, -0.016207f, -0.040847f, 0.008027f, -0.053760f, -0.026846f, -0.082140f, 0.025053f, -0.068641f, -0.135009f, 0.015344f, -0.001529f, 0.094938f, -0.002953f, 0.032008f, 0.079011f, -0.013260f, -0.020081f, 0.034600f, -0.000378f, -0.069027f, -0.023678f, 0.008663f, 0.011750f, 0.050299f, 0.021401f, 0.044753f, 0.039395f, -0.028463f, -0.020722f, 0.018866f, 0.057822f, -0.024306f, -0.011757f, -0.053163f, -0.036160f, 0.013667f, -0.070990f, 0.020323f, -0.079776f, 0.014869f, -0.020821f, 0.056495f, -0.024532f, 0.039947f, -0.085527f, -0.017826f, 0.012008f, -0.051409f, 0.013185f, 0.008714f, 0.009101f, -0.038854f, 0.020501f, -0.038050f, 0.011030f, -0.003212f, -0.015803f, -0.007217f, -0.003522f, 0.011746f, -0.012894f, + -0.006328f, -0.010296f, 0.024246f, -0.015733f, 0.014047f, -0.035996f, 0.018793f, -0.001864f, -0.003200f, 0.005429f, 0.034826f, 0.012435f, 0.014731f, -0.041782f, 0.005206f, -0.017007f, -0.052138f, 0.021051f, -0.016872f, -0.012995f, -0.019411f, 0.019534f, -0.009580f, 0.009519f, 0.010656f, -0.004828f, 0.002065f, -0.012540f, 0.003446f, 0.010794f, -0.002682f, 0.001796f, -0.001574f, -0.019880f, 0.072710f, 0.077255f, 0.180933f, 0.021204f, -0.101064f, -0.076083f, -0.055795f, -0.064657f, 0.126700f, 0.168823f, 0.057419f, -0.016209f, -0.052970f, 0.001789f, -0.064133f, 0.070669f, 0.067055f, 0.019768f, 0.009852f, -0.041987f, -0.005902f, 0.077782f, 0.018325f, 0.031209f, 0.026532f, 0.081628f, 0.068916f, -0.026565f, -0.060572f, -0.080382f, -0.053951f, -0.008115f, 0.022571f, 0.073389f, 0.044244f, -0.015387f, 0.040001f, -0.055802f, -0.018782f, -0.125414f, -0.019602f, 0.123341f, 0.095568f, -0.019249f, 0.250233f, 0.078387f, 0.007544f, -0.137125f, -0.023147f, -0.011801f, -0.031939f, 0.034977f, 0.019662f, 0.029633f, 0.052702f, -0.111892f, -0.120265f, -0.060574f, -0.081054f, -0.011630f, 0.027773f, 0.101183f, + -0.060288f, 0.037006f, 0.157999f, 0.078846f, 0.027719f, 0.044211f, 0.032451f, -0.095300f, -0.157443f, 0.080656f, -0.038747f, 0.034727f, 0.084726f, 0.093435f, 0.008522f, -0.056509f, -0.074184f, -0.060705f, 0.065568f, 0.037755f, 0.011662f, 0.065179f, -0.064676f, -0.011278f, -0.010117f, -0.028744f, -0.033331f, -0.002856f, -0.000671f, 0.021158f, 0.006862f, -0.009308f, 0.000481f, -0.000802f, 0.001385f, 0.005600f, 0.012382f, 0.018848f, -0.018525f, -0.025694f, -0.087947f, -0.048272f, -0.043317f, 0.052128f, 0.031148f, 0.018654f, -0.071947f, -0.070728f, -0.113693f, -0.031072f, 0.045119f, 0.057324f, 0.074866f, 0.029282f, 0.022111f, 0.008738f, 0.007522f, -0.002097f, 0.017041f, -0.003959f, 0.053711f, 0.037863f, 0.007888f, 0.000468f, 0.000675f, -0.009130f, 0.000177f, -0.006403f, -0.038493f, -0.165506f, -0.039484f, 0.092317f, 0.176671f, 0.155718f, 0.373212f, 0.195387f, 0.132515f, 0.116661f, 0.053037f, -0.020849f, -0.188603f, -0.236680f, -0.353173f, -0.270395f, -0.277457f, -0.105513f, 0.001344f, 0.106259f, 0.197592f, 0.163070f, 0.168450f, 0.116159f, 0.158492f, 0.124133f, 0.175488f, 0.083621f, + 0.065415f, 0.031332f, -0.045189f, -0.069416f, -0.106414f, -0.064276f, -0.231097f, -0.097566f, -0.218734f, -0.157750f, -0.250347f, -0.148760f, -0.233037f, -0.082716f, -0.115547f, -0.037578f, 0.017793f, 0.118303f, 0.310100f, 0.295391f, 0.413776f, 0.280144f, 0.191012f, 0.248144f, 0.338811f, 0.298269f, 0.250420f, 0.174815f, 0.021018f, -0.169405f, -0.168281f, -0.208477f, -0.396912f, -0.438067f, -0.477274f, -0.476479f, -0.523330f, -0.452501f, -0.381306f, -0.336172f, -0.219021f, 0.025214f, 0.248990f, 0.433318f, 0.572641f, 0.713986f, 0.794310f, 0.553865f, 0.528079f, 0.342820f, 0.207572f, 0.196296f, -0.011856f, -0.064797f, -0.304432f, -0.583226f, -0.628294f, -0.509921f, -0.394298f, -0.232198f, -0.188044f, -0.191323f, -0.105688f, -0.164303f, -0.066645f, -0.018251f, 0.126064f, 0.239657f, 0.196702f, 0.256182f, 0.275152f, 0.293707f, 0.259225f, 0.346255f, 0.257138f, 0.210845f, 0.108742f, 0.022393f, -0.058670f, -0.268228f, -0.237784f, -0.318439f, -0.422433f, -0.382532f, -0.438722f, -0.450659f, -0.131650f, 0.014733f, 0.228762f, 0.280310f, 0.298294f, 0.346506f, 0.361663f, 0.307023f, 0.266781f, 0.204783f, + 0.154995f, 0.056143f, -0.040355f, -0.119455f, -0.215743f, -0.316509f, -0.296813f, -0.264701f, -0.198340f, -0.093247f, -0.041408f, -0.019510f, -0.012011f, 0.029167f, 0.060588f, 0.073944f, 0.079197f, 0.065708f, 0.052231f, 0.057055f, 0.046103f, 0.034775f, 0.063315f, 0.071501f, 0.054606f, 0.026942f, 0.013943f, 0.022723f, 0.029184f, 0.011640f, 0.005765f, 0.011619f, 0.001558f, -0.022030f, -0.065938f, -0.079239f, -0.052547f, -0.040231f, -0.046247f, -0.043939f, -0.027047f, -0.038176f, -0.043551f, -0.037373f, -0.015387f, 0.003485f, 0.018949f, 0.026279f, 0.035347f, 0.040379f, 0.037273f, 0.031702f, 0.035987f, 0.036465f, 0.031689f, 0.022345f, 0.015531f, 0.005451f, -0.001988f, -0.004290f, -0.007123f, -0.014481f, -0.008982f, -0.004248f, -0.007596f, -0.010730f, -0.007077f, -0.001393f, 0.006252f, 0.004915f, -0.000832f, -0.006618f, -0.005542f, -0.009972f, -0.018448f, -0.022936f, -0.021478f, -0.020402f, -0.017710f, -0.019145f, -0.016662f, -0.007244f, 0.000526f, 0.002617f, 0.014172f, 0.030192f, 0.036069f, 0.029907f, 0.027130f, 0.027324f, 0.023522f, 0.013734f, 0.007085f, 0.004853f, -0.000086f, -0.008218f, + -0.012184f, -0.014364f, -0.014555f, -0.014196f, -0.013190f, -0.010587f, -0.007511f, -0.006801f, -0.006272f, -0.005303f, -0.002708f, -0.001499f, -0.000463f, -0.000099f, 0.001010f, 0.000939f, 0.001212f, 0.000641f, 0.000738f, 0.000088f}, + {0.024092f, 0.001069f, 0.004072f, 0.003368f, -0.009790f, -0.005078f, 0.013361f, 0.023217f, 0.003770f, 0.012374f, -0.004990f, 0.002350f, -0.000609f, 0.010485f, -0.008265f, -0.018914f, 0.007691f, 0.008877f, -0.010998f, 0.012815f, 0.006341f, 0.011694f, 0.003735f, 0.002799f, -0.005055f, -0.001608f, 0.000655f, 0.007808f, 0.000750f, -0.011689f, 0.000565f, -0.000919f, 0.002586f, -0.001601f, 0.002141f, 0.002845f, 0.007038f, 0.005103f, 0.001724f, 0.002222f, 0.000751f, 0.003465f, -0.003549f, -0.005804f, -0.012919f, 0.002550f, 0.002916f, 0.001095f, 0.010007f, -0.003476f, 0.007792f, 0.002183f, -0.003019f, -0.006081f, -0.003902f, 0.013979f, 0.003050f, 0.007826f, 0.001364f, 0.003120f, -0.002605f, 0.000533f, 0.001003f, 0.004062f, -0.001132f, -0.005130f, -0.002736f, -0.010741f, 0.001274f, 0.002174f, 0.009314f, -0.002903f, 0.007138f, -0.001164f, 0.004700f, 0.000150f, 0.004242f, 0.003303f, 0.002020f, -0.001659f, 0.004868f, 0.006681f, 0.004694f, 0.004391f, -0.000070f, 0.001010f, 0.001160f, -0.003571f, 0.001615f, 0.000902f, 0.003294f, 0.001737f, 0.001406f, 0.001792f, 0.002381f, -0.001211f, + 0.001473f, -0.000903f, -0.000045f, -0.000379f, 0.009074f, 0.008469f, 0.004083f, 0.003375f, 0.004856f, 0.005549f, 0.008575f, -0.003825f, 0.008894f, -0.000052f, 0.009492f, -0.002198f, 0.016784f, 0.005504f, 0.005644f, -0.011488f, -0.001444f, -0.002721f, -0.014606f, 0.007913f, 0.006939f, -0.004808f, -0.019180f, -0.008949f, -0.002760f, 0.009268f, 0.013097f, 0.008021f, -0.005038f, 0.002617f, -0.008145f, 0.000246f, 0.000859f, -0.006894f, -0.003218f, -0.017629f, 0.001582f, -0.002342f, -0.007180f, 0.000612f, 0.001147f, -0.002519f, -0.000416f, 0.016582f, -0.003884f, 0.013479f, 0.002791f, -0.010684f, 0.000920f, 0.000873f, 0.007802f, -0.003592f, 0.002313f, 0.001665f, 0.000726f, 0.010284f, 0.003760f, 0.010562f, 0.008017f, -0.005650f, 0.009906f, 0.004604f, 0.007270f, 0.000519f, 0.002467f, -0.002655f, -0.004511f, -0.008975f, -0.010727f, 0.011162f, -0.011151f, -0.008862f, -0.009201f, 0.005078f, 0.004862f, 0.001926f, 0.002184f, 0.006477f, -0.004141f, 0.004837f, -0.003094f, -0.004674f, 0.007373f, -0.006820f, 0.001255f, 0.003235f, -0.005483f, 0.001205f, 0.000945f, -0.001029f, -0.000750f, -0.000649f, + 0.003929f, -0.001401f, 0.001545f, -0.001840f, 0.003047f, -0.000970f, 0.001761f, -0.002175f, -0.002083f, -0.002097f, -0.015008f, -0.014086f, 0.003086f, 0.000209f, -0.002975f, 0.008329f, -0.001044f, -0.001535f, 0.008778f, -0.009673f, 0.001938f, -0.008455f, -0.005371f, -0.003102f, 0.000147f, 0.014167f, 0.016234f, -0.007597f, 0.006391f, -0.011738f, -0.001065f, -0.004648f, 0.015769f, -0.004735f, -0.000843f, 0.001558f, -0.022091f, -0.003941f, -0.010888f, -0.003695f, -0.002671f, 0.008153f, 0.010997f, 0.004393f, 0.014848f, -0.001993f, -0.006703f, -0.006940f, 0.008590f, 0.022121f, 0.015572f, -0.008767f, -0.010098f, 0.011014f, -0.009937f, 0.001796f, 0.003581f, 0.018103f, -0.006668f, -0.009076f, 0.002016f, -0.005670f, 0.003513f, 0.004534f, 0.011604f, -0.012781f, -0.008193f, 0.007326f, 0.014009f, -0.001393f, -0.006465f, -0.008346f, -0.019746f, 0.007397f, -0.000013f, 0.005787f, 0.000945f, 0.000408f, -0.003090f, 0.003522f, -0.005031f, 0.003025f, 0.004287f, 0.004200f, -0.007004f, 0.005046f, -0.001274f, -0.005037f, 0.000484f, -0.010494f, 0.006517f, 0.000868f, 0.000832f, -0.004240f, -0.001411f, -0.003607f, + -0.007235f, -0.005614f, 0.003853f, 0.000243f, 0.001560f, -0.001469f, 0.000508f, -0.000529f, -0.002073f, -0.001755f, -0.003029f, 0.000194f, -0.001741f, -0.001420f, -0.000432f, 0.000557f, -0.000544f, 0.000867f, -0.000569f, 0.003512f, 0.001395f, -0.002241f, 0.002460f, 0.001364f, -0.002862f, 0.001888f, -0.036777f, -0.011959f, -0.002058f, 0.006368f, 0.004083f, 0.009235f, -0.017630f, -0.005131f, -0.000918f, -0.018045f, -0.013097f, 0.004671f, 0.010857f, 0.006555f, 0.011994f, -0.001440f, 0.006835f, 0.016246f, 0.014115f, 0.013491f, 0.007589f, -0.005052f, -0.004232f, -0.008186f, -0.003800f, -0.008225f, 0.017098f, 0.008115f, -0.002772f, -0.007531f, -0.004782f, -0.007692f, -0.011479f, -0.012145f, -0.015513f, 0.009378f, 0.006520f, -0.016979f, 0.003901f, -0.000804f, 0.011664f, 0.001886f, 0.005679f, 0.007722f, -0.016264f, -0.002439f, -0.000718f, 0.002208f, 0.008347f, 0.012928f, -0.005274f, -0.001798f, -0.003899f, -0.010099f, 0.003003f, 0.002091f, -0.001191f, -0.002714f, 0.009634f, 0.000590f, -0.005506f, -0.001768f, 0.004508f, 0.006291f, -0.002631f, -0.000225f, 0.001519f, -0.008781f, 0.006446f, -0.000629f, + -0.013387f, 0.001581f, -0.016315f, 0.002628f, 0.011940f, -0.003969f, -0.000593f, -0.018149f, -0.008991f, -0.013472f, -0.008313f, -0.001072f, -0.001503f, 0.008451f, 0.001535f, 0.009913f, -0.006018f, 0.003372f, 0.005256f, 0.001833f, 0.005172f, 0.000656f, -0.003635f, 0.002087f, -0.001673f, 0.001737f, 0.000070f, 0.000745f, -0.000749f, -0.002460f, -0.001003f, 0.002262f, -0.002485f, 0.001693f, 0.004097f, 0.002167f, 0.001006f, 0.000139f, 0.000069f, -0.000853f, -0.001688f, -0.002671f, 0.001943f, 0.002691f, -0.001643f, 0.001775f, -0.001730f, -0.001250f, 0.020307f, 0.007407f, 0.003583f, -0.005210f, 0.015006f, 0.005566f, 0.008558f, 0.023309f, 0.025617f, 0.000790f, -0.003956f, -0.009204f, -0.013654f, 0.004894f, 0.010226f, -0.005388f, -0.000861f, 0.001250f, -0.002252f, -0.008311f, 0.009707f, -0.009520f, 0.004569f, -0.027118f, -0.003722f, -0.006747f, -0.006377f, -0.013499f, -0.002613f, -0.001917f, 0.000367f, -0.007017f, -0.009581f, -0.007874f, 0.001225f, -0.005285f, -0.010178f, 0.005979f, 0.009035f, 0.000523f, -0.008325f, -0.009721f, 0.003648f, -0.007535f, 0.008524f, -0.010683f, 0.006901f, 0.002232f, + 0.000018f, -0.015138f, -0.013673f, 0.002988f, -0.009869f, 0.016032f, 0.003046f, 0.013416f, -0.006926f, 0.013502f, 0.002814f, 0.008610f, 0.003144f, 0.008143f, -0.007575f, -0.011263f, -0.000091f, 0.017415f, -0.001593f, -0.012132f, -0.006175f, 0.007450f, -0.004808f, -0.007044f, 0.001917f, -0.019210f, 0.012931f, 0.015168f, -0.000837f, -0.013416f, -0.016480f, -0.000774f, 0.014086f, 0.009820f, -0.007791f, 0.010445f, 0.001233f, -0.001838f, -0.001974f, -0.001390f, -0.000785f, 0.002665f, -0.004573f, -0.004343f, 0.000469f, 0.001306f, -0.003413f, 0.000986f, -0.001545f, -0.000797f, 0.003811f, -0.001797f, -0.000705f, 0.000288f, -0.005754f, 0.002784f, 0.000871f, 0.000216f, 0.001448f, 0.001530f, -0.000161f, 0.000170f, -0.001058f, -0.001467f, -0.000792f, -0.001011f, -0.001528f, 0.028704f, 0.006160f, 0.015677f, -0.006006f, 0.011695f, 0.009104f, 0.018325f, -0.013476f, -0.009997f, -0.002890f, 0.000877f, 0.013427f, -0.006386f, 0.020255f, -0.001681f, 0.011623f, 0.009625f, -0.005338f, 0.003848f, 0.011774f, 0.010462f, 0.002985f, 0.002755f, 0.010750f, -0.021876f, 0.003804f, 0.016587f, 0.013368f, -0.011912f, + 0.014896f, -0.017479f, 0.010761f, -0.015440f, -0.007440f, -0.004201f, 0.016140f, -0.003445f, 0.016888f, 0.003491f, 0.003838f, 0.000615f, -0.000308f, 0.006373f, 0.010017f, 0.021458f, 0.003659f, 0.018489f, -0.008949f, 0.013457f, 0.018254f, -0.000782f, -0.002977f, -0.006710f, 0.007214f, -0.025938f, -0.001883f, 0.002319f, -0.009379f, -0.015480f, -0.000604f, -0.001187f, -0.001808f, 0.006521f, -0.015460f, 0.007733f, 0.007187f, 0.009773f, -0.024523f, 0.008316f, 0.006216f, -0.014864f, -0.001463f, 0.007861f, 0.018497f, -0.023321f, -0.002603f, 0.001560f, -0.021578f, -0.002135f, 0.003471f, -0.006273f, 0.014617f, -0.003419f, 0.001512f, 0.003831f, -0.002249f, -0.000924f, -0.000715f, 0.002360f, -0.005387f, 0.000648f, -0.002666f, 0.001542f, 0.000784f, -0.003411f, -0.000083f, 0.003781f, -0.001491f, -0.000985f, 0.000371f, -0.004805f, -0.001481f, 0.000717f, -0.001498f, -0.002288f, -0.000386f, 0.000704f, -0.002282f, -0.001258f, 0.003507f, 0.004174f, -0.005316f, -0.000320f, 0.001197f, -0.000127f, -0.000637f, -0.025638f, -0.031585f, -0.025157f, -0.022858f, -0.000708f, 0.015982f, -0.033185f, 0.023607f, 0.015378f, + -0.037414f, 0.023587f, 0.009913f, 0.008111f, 0.003644f, 0.003680f, 0.008397f, -0.005807f, -0.006149f, -0.012213f, -0.000417f, 0.014392f, 0.012064f, 0.007122f, -0.021319f, 0.014598f, -0.015251f, 0.000478f, -0.013416f, 0.016747f, -0.008887f, -0.006837f, 0.005223f, -0.024950f, 0.002454f, -0.008223f, -0.007522f, -0.002604f, 0.001748f, 0.024667f, -0.011645f, -0.003703f, -0.009406f, 0.018776f, -0.011421f, -0.006069f, 0.005725f, 0.005692f, 0.005236f, 0.006687f, -0.007806f, 0.009091f, 0.002261f, -0.020453f, 0.028168f, 0.011288f, 0.004517f, 0.003008f, -0.000184f, -0.013078f, 0.016104f, 0.013594f, 0.005612f, 0.018167f, 0.001887f, 0.008033f, 0.018154f, 0.009331f, 0.003873f, -0.012478f, 0.014951f, -0.006520f, 0.028600f, -0.003063f, 0.000720f, -0.007759f, -0.030089f, 0.003981f, -0.007328f, -0.003522f, 0.015378f, -0.001261f, -0.016341f, -0.009237f, 0.013212f, 0.011136f, 0.001689f, 0.012895f, 0.003346f, -0.009400f, 0.004441f, -0.000868f, -0.003201f, -0.002587f, 0.001004f, 0.007644f, -0.003637f, 0.000974f, 0.001310f, 0.004313f, 0.001584f, -0.003427f, 0.005521f, 0.000841f, 0.001443f, -0.000301f, + 0.001400f, 0.000716f, -0.002214f, 0.003210f, -0.002237f, 0.002647f, 0.002014f, -0.001598f, 0.006227f, -0.000829f, 0.001508f, -0.002109f, -0.001456f, 0.018356f, 0.012512f, -0.002127f, -0.011512f, 0.030169f, 0.047973f, -0.006335f, -0.006656f, 0.023197f, 0.005649f, 0.007653f, 0.006161f, -0.034547f, 0.003813f, -0.022338f, 0.017881f, 0.025489f, -0.006679f, -0.012306f, 0.004176f, 0.016147f, -0.009677f, 0.019504f, -0.007640f, 0.037639f, -0.010991f, 0.007288f, -0.001831f, 0.010220f, 0.026825f, -0.010115f, 0.002657f, -0.002359f, 0.007772f, -0.009934f, -0.004782f, 0.015270f, 0.032908f, 0.002758f, 0.024098f, -0.008905f, 0.003341f, -0.004518f, 0.008050f, 0.017611f, 0.026269f, 0.020473f, 0.019463f, 0.020223f, 0.012810f, -0.003680f, 0.003146f, -0.002771f, 0.000537f, 0.004027f, -0.013100f, -0.003770f, 0.021178f, -0.018564f, 0.007436f, -0.008156f, -0.004861f, -0.009643f, -0.038246f, 0.004295f, 0.020798f, 0.013153f, -0.004681f, -0.018141f, -0.044083f, -0.007093f, 0.018003f, -0.003696f, 0.007134f, -0.013737f, 0.010315f, -0.012666f, 0.011706f, 0.025040f, -0.010930f, -0.013509f, -0.024911f, 0.007555f, + 0.003142f, 0.004123f, -0.019680f, 0.001450f, 0.000183f, -0.005952f, 0.001202f, 0.009341f, 0.000478f, 0.006431f, 0.002910f, 0.004176f, 0.005142f, -0.000846f, 0.008049f, 0.001936f, 0.000886f, -0.001625f, -0.002513f, -0.002167f, 0.007681f, 0.002596f, -0.000182f, 0.005137f, 0.002764f, 0.003718f, -0.000624f, 0.004259f, 0.005233f, 0.007008f, -0.002827f, 0.000782f, -0.002749f, -0.032921f, -0.026268f, 0.003455f, 0.015391f, -0.014774f, -0.009776f, 0.001976f, -0.008037f, -0.049316f, -0.042650f, 0.018618f, 0.017050f, 0.003209f, 0.002461f, -0.018020f, 0.028269f, 0.034479f, 0.021167f, -0.017688f, 0.016516f, 0.022659f, -0.003576f, -0.028600f, -0.012988f, 0.039681f, -0.011826f, 0.004039f, 0.002354f, 0.022323f, -0.017914f, -0.031753f, 0.006849f, 0.014688f, -0.007884f, 0.009423f, 0.020558f, -0.009939f, -0.007979f, -0.000872f, -0.044505f, -0.012807f, 0.015230f, -0.008380f, -0.029760f, 0.005441f, -0.000850f, -0.009282f, 0.005841f, -0.002744f, -0.028221f, -0.023809f, -0.042211f, -0.033440f, 0.006472f, 0.014827f, 0.001314f, -0.009971f, -0.014132f, 0.000404f, -0.009684f, 0.009048f, -0.020315f, 0.000745f, + -0.007238f, -0.005791f, -0.006925f, -0.001776f, 0.007846f, -0.009152f, -0.040501f, 0.006124f, -0.005887f, 0.010039f, 0.011020f, 0.000813f, 0.007637f, 0.009422f, 0.002913f, -0.002262f, 0.004863f, -0.005699f, 0.002209f, -0.012559f, -0.006739f, -0.005609f, -0.006992f, 0.002916f, 0.011080f, -0.005786f, 0.001699f, -0.014286f, 0.001595f, -0.001392f, -0.010673f, 0.004678f, -0.003435f, 0.002723f, 0.004296f, 0.002535f, 0.001887f, 0.009070f, 0.001919f, 0.001212f, 0.002959f, 0.000058f, 0.001184f, 0.001283f, -0.002634f, -0.006802f, -0.001412f, -0.006889f, 0.003213f, -0.005235f, 0.007701f, 0.000109f, 0.011058f, 0.005145f, -0.006750f, -0.004399f, -0.003706f, -0.000390f, 0.016107f, 0.051763f, 0.045985f, 0.035947f, -0.003827f, 0.035150f, 0.011409f, 0.049053f, 0.020788f, -0.000971f, 0.059841f, -0.012410f, -0.003098f, -0.038043f, -0.010008f, -0.000727f, -0.026818f, 0.016132f, 0.024056f, -0.007747f, -0.000282f, -0.021564f, -0.037028f, -0.021820f, -0.028212f, -0.008184f, -0.017012f, -0.005308f, -0.002614f, 0.017066f, 0.004391f, -0.003460f, -0.015198f, -0.005200f, -0.010112f, 0.005507f, 0.000496f, -0.015063f, + 0.008106f, 0.010155f, 0.004085f, -0.011618f, -0.015264f, 0.005224f, 0.014330f, -0.001934f, -0.000406f, -0.027093f, 0.048891f, 0.008279f, -0.009137f, -0.001231f, 0.004468f, 0.020973f, 0.017870f, -0.018238f, 0.010493f, -0.007068f, 0.002376f, -0.002990f, -0.004468f, -0.027764f, -0.024709f, -0.033266f, 0.005224f, -0.001290f, -0.006875f, 0.021061f, -0.006489f, 0.059260f, -0.005649f, -0.003081f, -0.014387f, -0.006399f, 0.007863f, 0.010287f, 0.007341f, -0.000384f, 0.025652f, 0.018365f, -0.003566f, -0.012199f, 0.003577f, -0.007226f, 0.000177f, 0.002513f, -0.007983f, -0.002587f, 0.000437f, -0.002632f, 0.004227f, -0.009958f, 0.006232f, 0.011388f, -0.003212f, 0.006035f, -0.003237f, -0.002652f, -0.004303f, 0.001983f, 0.006492f, -0.002526f, 0.008632f, 0.001715f, 0.003215f, 0.011705f, 0.005247f, -0.001407f, 0.012418f, 0.005614f, 0.008696f, 0.011098f, 0.008722f, 0.001070f, 0.000245f, 0.008256f, -0.007187f, 0.000388f, 0.005232f, 0.002851f, 0.005952f, 0.005386f, 0.003121f, 0.006872f, -0.031218f, -0.045277f, -0.024663f, 0.033059f, 0.026622f, -0.023323f, -0.023442f, 0.035475f, 0.021946f, -0.023051f, + -0.030662f, -0.005492f, 0.005540f, 0.003003f, 0.004648f, -0.018488f, 0.019149f, -0.013908f, 0.037235f, -0.006207f, -0.025742f, 0.005582f, 0.009718f, -0.000703f, 0.003088f, -0.011936f, -0.016646f, -0.001428f, 0.015295f, -0.009708f, 0.011711f, -0.018675f, -0.048295f, -0.039900f, 0.025211f, -0.031194f, 0.024865f, 0.006669f, 0.003138f, -0.010775f, 0.014717f, 0.004114f, -0.003582f, -0.007561f, 0.007034f, 0.014268f, -0.013082f, 0.040574f, -0.010105f, 0.013302f, -0.012127f, 0.003093f, -0.003214f, -0.016638f, 0.039947f, -0.031579f, 0.043434f, -0.002093f, -0.021193f, -0.033163f, 0.016951f, 0.005316f, 0.005685f, 0.001387f, 0.017819f, 0.011231f, 0.016176f, -0.034123f, -0.009909f, 0.000370f, 0.000736f, 0.007951f, -0.025179f, -0.012863f, -0.008131f, -0.004887f, -0.031589f, -0.007029f, -0.010450f, -0.036361f, -0.001720f, -0.020844f, 0.005418f, -0.010056f, 0.002905f, 0.004108f, 0.015883f, 0.008773f, -0.005816f, -0.001515f, -0.012998f, 0.006756f, -0.000761f, 0.005797f, -0.015290f, 0.000342f, -0.006040f, 0.003236f, -0.014084f, 0.002298f, 0.003388f, 0.000211f, -0.003027f, 0.004484f, -0.008222f, 0.005883f, + -0.012906f, 0.004501f, -0.009215f, 0.004066f, 0.002604f, 0.005903f, -0.004722f, 0.015894f, 0.006572f, -0.000247f, -0.009755f, -0.008640f, -0.001433f, 0.010453f, -0.002133f, -0.005845f, -0.004986f, 0.007010f, 0.000629f, 0.006609f, 0.076834f, 0.025637f, -0.017132f, 0.039481f, 0.036769f, -0.019007f, -0.024220f, 0.059364f, -0.005314f, 0.013062f, -0.035200f, 0.086415f, 0.003022f, -0.024187f, 0.012549f, 0.004331f, 0.041962f, 0.000737f, 0.052994f, -0.038069f, 0.000826f, -0.041584f, 0.003217f, 0.029258f, 0.001371f, -0.025472f, 0.036131f, 0.019323f, 0.010650f, 0.008714f, -0.012610f, -0.012158f, 0.003302f, -0.018020f, 0.023664f, -0.021068f, -0.028100f, 0.024843f, 0.009420f, -0.032593f, 0.017726f, 0.002165f, -0.023697f, -0.013281f, -0.007912f, 0.012486f, -0.002789f, -0.014271f, 0.017427f, -0.021068f, -0.008353f, -0.007218f, 0.029162f, -0.019129f, 0.014098f, 0.022402f, 0.010373f, -0.013232f, -0.027232f, 0.017280f, -0.023286f, 0.031510f, -0.039673f, 0.052352f, -0.015487f, -0.007352f, -0.007434f, 0.023841f, -0.001714f, 0.008656f, 0.014254f, 0.008587f, 0.020257f, -0.019762f, -0.037640f, 0.002648f, + 0.031999f, -0.021343f, -0.010104f, -0.022308f, -0.013384f, 0.005892f, -0.002202f, -0.006412f, 0.013847f, 0.009969f, 0.007324f, -0.003508f, 0.021108f, 0.012930f, -0.009790f, -0.005153f, 0.004171f, 0.001137f, 0.017878f, 0.011337f, -0.001438f, -0.005803f, -0.004518f, 0.019521f, 0.001823f, -0.009988f, 0.012373f, 0.003718f, 0.000535f, 0.010321f, 0.004698f, -0.001802f, -0.010493f, 0.002953f, 0.012849f, -0.009500f, -0.002345f, 0.014630f, -0.000913f, -0.003001f, -0.003644f, 0.008644f, 0.001708f, 0.000264f, -0.003846f, -0.045955f, -0.005687f, 0.042023f, -0.012267f, -0.026205f, 0.011629f, -0.012302f, -0.002240f, 0.019055f, -0.045620f, -0.026810f, 0.017671f, 0.023491f, 0.032052f, -0.002260f, -0.006017f, 0.012913f, -0.003058f, -0.045117f, -0.030869f, 0.053089f, -0.003994f, -0.046492f, -0.026961f, -0.018703f, -0.015343f, 0.004331f, 0.015655f, 0.000859f, -0.007724f, -0.023194f, -0.035456f, 0.004794f, 0.004767f, -0.001229f, 0.029074f, -0.019796f, -0.055640f, 0.022600f, 0.016431f, -0.065024f, 0.038888f, -0.010505f, -0.032796f, -0.027048f, -0.002395f, 0.037033f, 0.008903f, -0.012245f, -0.013356f, 0.010588f, + 0.019509f, -0.027375f, 0.021023f, 0.003394f, 0.015502f, -0.011845f, -0.028438f, 0.025292f, 0.000137f, 0.028362f, -0.087972f, 0.011204f, 0.013653f, -0.013008f, 0.024524f, 0.028427f, 0.083746f, 0.002384f, -0.055198f, -0.025466f, -0.014374f, -0.053696f, -0.052659f, 0.002747f, -0.029876f, 0.000396f, -0.019829f, 0.019731f, -0.020179f, -0.019895f, 0.035385f, 0.008676f, -0.001122f, -0.001940f, 0.020802f, -0.004378f, -0.001992f, 0.012003f, 0.009939f, -0.007624f, 0.006820f, -0.018890f, -0.004073f, 0.005258f, -0.003478f, -0.005494f, -0.009008f, -0.009693f, -0.004873f, -0.011952f, 0.004884f, -0.015189f, 0.003384f, -0.002642f, 0.014330f, -0.003372f, -0.007333f, -0.006335f, -0.008463f, -0.009184f, -0.002353f, -0.006428f, -0.011046f, -0.008265f, 0.008266f, -0.011064f, -0.005583f, -0.019768f, 0.006199f, 0.007904f, 0.020494f, 0.004572f, -0.002507f, 0.001230f, -0.038521f, 0.006239f, 0.023564f, 0.021215f, -0.034203f, 0.060765f, 0.042157f, -0.019372f, 0.025161f, -0.049037f, -0.011033f, -0.016379f, 0.077424f, 0.049770f, -0.018599f, -0.029510f, -0.036336f, -0.007964f, 0.001924f, 0.014329f, 0.051895f, 0.011149f, + 0.008709f, 0.011336f, 0.001305f, -0.017077f, 0.001960f, -0.003168f, 0.023842f, 0.032440f, 0.040890f, 0.026785f, 0.017265f, -0.003949f, -0.007712f, 0.006609f, 0.037057f, 0.005977f, 0.006469f, -0.037716f, -0.019350f, 0.063947f, 0.025786f, 0.019299f, 0.000343f, 0.038361f, 0.020302f, 0.080721f, -0.004648f, 0.083226f, 0.005770f, -0.025663f, 0.026767f, -0.022322f, -0.016924f, -0.002805f, -0.015480f, 0.001059f, 0.015290f, 0.033395f, 0.005643f, -0.006928f, -0.036556f, 0.011907f, 0.002869f, 0.024185f, -0.028705f, 0.007786f, -0.012759f, 0.004482f, -0.036476f, 0.018629f, -0.032114f, -0.003697f, -0.043661f, -0.059656f, -0.010132f, -0.009154f, 0.049131f, 0.013479f, -0.001683f, 0.009440f, 0.015222f, 0.019418f, 0.003102f, -0.000519f, 0.000645f, -0.034463f, 0.010839f, 0.000721f, 0.032173f, -0.012895f, -0.001733f, -0.008409f, 0.022818f, 0.004818f, 0.020829f, -0.000002f, -0.024538f, 0.012141f, -0.001420f, 0.008327f, -0.018692f, -0.008125f, 0.004295f, 0.005385f, -0.013938f, 0.001597f, 0.012478f, 0.008145f, -0.012284f, -0.013187f, 0.023589f, -0.023619f, 0.009800f, -0.007081f, -0.019664f, 0.006482f, + 0.004296f, 0.006540f, 0.007941f, -0.008617f, -0.001303f, 0.011726f, 0.000745f, 0.008268f, -0.003549f, -0.008789f, -0.009487f, -0.020451f, -0.030929f, 0.009334f, -0.035505f, -0.000201f, 0.043098f, 0.013357f, 0.036740f, -0.042724f, -0.019595f, 0.020709f, 0.004316f, 0.060761f, -0.030943f, 0.036264f, -0.013773f, -0.018618f, -0.045404f, -0.017824f, -0.024415f, 0.030262f, 0.007105f, -0.040651f, 0.050665f, -0.026403f, -0.024415f, 0.004712f, 0.019710f, -0.015031f, 0.035013f, -0.017229f, -0.024424f, -0.012789f, 0.011581f, -0.004524f, -0.006763f, 0.003549f, 0.034873f, -0.023942f, 0.063885f, -0.025098f, -0.000916f, 0.058997f, -0.011998f, 0.010154f, -0.080942f, 0.003303f, 0.014343f, -0.018545f, 0.035547f, -0.065166f, -0.079463f, 0.029802f, -0.014209f, 0.043557f, -0.032894f, -0.031265f, 0.003390f, -0.010515f, 0.067301f, -0.008558f, -0.003246f, 0.014674f, -0.062822f, 0.003204f, -0.063488f, -0.025739f, 0.003474f, 0.014751f, -0.079231f, -0.035677f, -0.009891f, -0.004257f, 0.025397f, -0.034321f, 0.040281f, -0.017038f, 0.004349f, -0.052362f, -0.002835f, -0.046320f, 0.017131f, 0.009498f, 0.033944f, 0.043091f, + -0.016436f, 0.028100f, 0.003643f, -0.009800f, 0.014372f, 0.008665f, -0.014246f, -0.014666f, -0.025331f, -0.001380f, -0.015168f, -0.016094f, 0.005170f, -0.004169f, 0.021392f, -0.029547f, -0.005313f, -0.018764f, 0.006953f, 0.010087f, -0.010353f, -0.001854f, -0.015729f, -0.015948f, 0.017080f, 0.027951f, 0.031762f, 0.006065f, 0.001795f, -0.009135f, 0.005797f, 0.004775f, -0.012395f, -0.019816f, 0.006315f, -0.010693f, -0.014434f, 0.021125f, 0.014798f, 0.012109f, -0.020119f, -0.023456f, -0.049476f, 0.040447f, -0.035520f, -0.009495f, 0.031503f, 0.073758f, -0.021199f, 0.060558f, 0.021022f, 0.016052f, -0.028182f, 0.067036f, 0.010163f, 0.031597f, 0.002660f, -0.038381f, 0.013955f, -0.038540f, -0.039184f, 0.024940f, -0.039031f, -0.007750f, -0.009290f, 0.039996f, 0.003186f, -0.012594f, 0.012574f, 0.018146f, -0.008293f, -0.036505f, -0.008884f, 0.029197f, 0.069014f, 0.016575f, -0.039134f, 0.004922f, -0.007641f, 0.017218f, 0.020849f, 0.035710f, -0.015656f, 0.001436f, 0.022564f, 0.005863f, -0.001332f, 0.046906f, 0.041657f, 0.050403f, 0.017033f, 0.042449f, 0.005590f, 0.025704f, -0.019819f, -0.002910f, + 0.005427f, -0.038310f, 0.002811f, 0.066406f, -0.008483f, -0.013841f, 0.013733f, -0.000415f, 0.017583f, -0.038636f, 0.051759f, -0.031992f, -0.014649f, -0.008357f, 0.002549f, 0.006656f, 0.006567f, -0.056466f, 0.071818f, -0.015060f, -0.023116f, -0.007993f, 0.060975f, -0.006430f, 0.012618f, -0.047785f, -0.033711f, 0.001501f, 0.025327f, 0.023880f, 0.038966f, -0.062244f, -0.019733f, 0.060591f, -0.021659f, 0.007142f, 0.051344f, 0.012754f, 0.011177f, -0.002844f, 0.001701f, -0.019133f, -0.001593f, 0.005411f, 0.014612f, -0.008385f, 0.012156f, -0.022156f, -0.012790f, 0.001723f, -0.006457f, -0.003408f, -0.052770f, -0.040348f, 0.003288f, 0.027016f, -0.024939f, -0.042106f, -0.017461f, -0.034504f, 0.009757f, 0.001987f, -0.013445f, 0.033971f, -0.009709f, 0.014135f, 0.015300f, -0.017827f, -0.012927f, -0.002631f, 0.004074f, -0.000938f, 0.025280f, 0.000027f, 0.001570f, -0.011850f, -0.002791f, -0.018886f, 0.117807f, -0.007169f, 0.023793f, -0.001260f, -0.011871f, 0.003035f, -0.054172f, -0.023505f, -0.016523f, 0.020841f, 0.015276f, 0.026294f, 0.003223f, -0.028932f, 0.030154f, -0.024631f, 0.034730f, 0.025105f, + -0.027827f, -0.030325f, 0.003707f, 0.041935f, -0.043234f, 0.017796f, 0.020105f, -0.025150f, 0.011144f, -0.003588f, 0.015244f, -0.002320f, -0.063127f, 0.035051f, 0.021873f, -0.053688f, 0.064351f, -0.034494f, -0.008116f, -0.021526f, 0.051943f, -0.010731f, -0.044081f, -0.000535f, 0.000715f, 0.042423f, 0.043651f, 0.002426f, -0.033596f, 0.048424f, -0.007866f, 0.008156f, -0.062004f, 0.048359f, 0.019936f, 0.002459f, -0.035574f, -0.027457f, -0.003778f, 0.016494f, -0.028597f, -0.051635f, -0.021762f, 0.039881f, 0.025034f, -0.006493f, 0.065570f, 0.003390f, -0.010655f, -0.047824f, 0.057857f, -0.054308f, -0.017362f, 0.058546f, 0.018671f, 0.007115f, -0.022228f, 0.008629f, 0.058250f, 0.012377f, 0.025539f, 0.036324f, -0.095317f, -0.021448f, -0.015837f, -0.008466f, -0.039532f, -0.007586f, -0.004686f, 0.057321f, 0.015694f, 0.003326f, 0.029437f, 0.040781f, 0.028981f, -0.021101f, 0.011047f, 0.024158f, -0.004901f, 0.008970f, 0.010687f, 0.012613f, 0.008560f, 0.040508f, 0.022270f, 0.001945f, -0.011962f, -0.019145f, -0.035608f, 0.004570f, 0.000050f, 0.009000f, 0.011703f, 0.004935f, 0.061914f, -0.009123f, + 0.022403f, 0.012788f, -0.016838f, -0.049772f, -0.007936f, -0.018832f, -0.030591f, -0.033640f, 0.005711f, -0.006094f, -0.039821f, -0.000517f, 0.015203f, -0.004585f, -0.003872f, 0.013267f, -0.009790f, -0.031122f, -0.013520f, -0.048081f, 0.002433f, -0.053723f, 0.050285f, 0.076162f, 0.036727f, 0.042897f, -0.066435f, -0.061017f, -0.046283f, 0.003507f, 0.084341f, -0.016495f, 0.031886f, 0.053220f, 0.028192f, -0.031049f, 0.002617f, 0.038545f, -0.050316f, -0.043827f, -0.035868f, 0.040417f, 0.029738f, -0.054734f, -0.074916f, 0.101501f, 0.064072f, -0.074371f, 0.033891f, -0.009746f, 0.031102f, 0.002047f, -0.021418f, -0.052054f, 0.047150f, -0.002476f, -0.036980f, -0.057663f, 0.015143f, 0.011943f, -0.013567f, 0.000237f, -0.004539f, -0.029118f, -0.011562f, -0.015954f, 0.026853f, -0.050744f, 0.055212f, -0.038618f, 0.002665f, 0.084515f, -0.082158f, -0.021318f, 0.078798f, 0.004367f, 0.018909f, -0.012955f, -0.023861f, 0.023177f, -0.008492f, -0.035826f, 0.005057f, -0.079967f, 0.133839f, -0.014490f, -0.146430f, 0.054237f, 0.145518f, 0.084145f, -0.178674f, -0.053537f, 0.034410f, 0.011540f, -0.026801f, -0.042748f, + 0.022835f, 0.053331f, -0.066966f, -0.020057f, -0.117194f, -0.021746f, 0.041059f, 0.013365f, -0.035534f, -0.060348f, 0.023567f, 0.050125f, -0.000711f, -0.017395f, -0.027842f, 0.039514f, 0.024748f, 0.015164f, -0.003106f, -0.013902f, 0.005220f, 0.021374f, 0.018127f, -0.005731f, -0.046836f, -0.030936f, 0.049345f, 0.019432f, -0.025000f, -0.018745f, 0.035455f, 0.010153f, -0.004671f, -0.073145f, -0.032555f, -0.037312f, 0.040359f, 0.009340f, 0.008976f, -0.009109f, 0.001197f, 0.037348f, -0.007777f, -0.008661f, -0.033942f, 0.005018f, -0.010900f, 0.052760f, 0.011677f, -0.013984f, 0.006717f, 0.053237f, -0.007101f, -0.022824f, 0.004529f, 0.000414f, -0.002753f, -0.037840f, 0.009231f, 0.035909f, 0.086115f, -0.036457f, 0.028520f, -0.045841f, -0.119135f, 0.064056f, -0.029497f, -0.066146f, -0.044744f, -0.067602f, 0.032808f, 0.021752f, -0.089464f, 0.057309f, -0.030741f, -0.002822f, -0.000421f, -0.046810f, 0.036367f, 0.035021f, 0.032036f, -0.003490f, 0.041701f, 0.020924f, -0.024197f, 0.001763f, -0.050719f, -0.019113f, -0.044920f, -0.032295f, -0.001559f, 0.073644f, -0.061232f, -0.013691f, -0.012666f, -0.055939f, + 0.033206f, -0.063032f, 0.033101f, 0.027665f, -0.041796f, 0.033049f, -0.067602f, 0.019185f, -0.058688f, 0.038100f, -0.021563f, -0.031801f, -0.031867f, -0.048802f, -0.012373f, 0.023963f, 0.042861f, -0.049518f, 0.033502f, 0.017997f, 0.052050f, 0.062789f, 0.037298f, -0.052886f, -0.023714f, -0.099117f, -0.024290f, -0.029044f, 0.033504f, -0.115604f, -0.021201f, -0.068902f, -0.005291f, 0.068400f, 0.063934f, 0.041236f, 0.015382f, 0.092235f, 0.102054f, 0.089920f, -0.030365f, -0.040915f, 0.034959f, 0.088021f, 0.164034f, 0.011473f, 0.038899f, 0.019595f, -0.008105f, 0.029875f, -0.028812f, 0.017486f, -0.007020f, -0.000751f, -0.018345f, 0.030324f, 0.036083f, -0.012688f, -0.028685f, -0.022552f, 0.027482f, 0.011566f, 0.031079f, -0.017012f, 0.012429f, -0.006356f, -0.012883f, -0.009016f, 0.030863f, 0.059470f, 0.029178f, -0.031323f, 0.016376f, -0.011032f, 0.022009f, 0.009270f, 0.011181f, 0.028928f, -0.018248f, -0.039673f, 0.003854f, 0.029952f, 0.024313f, 0.007837f, -0.005309f, -0.013875f, -0.053508f, 0.052806f, 0.015409f, -0.012836f, -0.055670f, -0.013472f, -0.038088f, 0.018937f, 0.022055f, -0.018645f, + 0.013681f, 0.107100f, -0.063324f, 0.040056f, 0.048616f, -0.022481f, 0.004391f, 0.018670f, -0.006000f, 0.051970f, 0.002633f, 0.037639f, -0.048113f, -0.006764f, 0.041781f, 0.006928f, -0.065270f, 0.042278f, -0.026083f, -0.021196f, -0.024939f, -0.006430f, -0.024323f, 0.024790f, 0.034547f, 0.016889f, -0.006059f, -0.018098f, 0.029973f, -0.009717f, -0.047944f, 0.039311f, -0.080929f, -0.020312f, -0.016683f, -0.017703f, 0.046144f, 0.050611f, 0.090609f, -0.026496f, 0.038754f, -0.001345f, 0.017461f, 0.059517f, -0.004349f, 0.006458f, -0.039636f, -0.124722f, 0.061801f, 0.012025f, -0.060276f, -0.041178f, 0.006098f, 0.032769f, -0.005745f, -0.035234f, 0.018356f, -0.036127f, 0.047717f, 0.026759f, -0.020775f, -0.043351f, 0.086497f, 0.009669f, 0.004625f, -0.007768f, 0.012031f, 0.006276f, 0.003822f, -0.028903f, -0.061400f, 0.017172f, -0.008935f, -0.021691f, -0.056568f, -0.013747f, -0.001597f, 0.050709f, 0.020924f, -0.063450f, 0.037203f, 0.006818f, -0.002316f, -0.006852f, 0.020812f, 0.026737f, -0.005134f, -0.011676f, -0.004386f, -0.011033f, 0.009935f, 0.015993f, -0.000550f, 0.009277f, 0.017850f, -0.006289f, + 0.025711f, 0.011109f, 0.008022f, 0.013677f, -0.007009f, 0.032248f, 0.005599f, -0.006511f, 0.021094f, -0.024983f, 0.008350f, 0.014807f, -0.005752f, -0.010517f, 0.029058f, 0.041810f, -0.036909f, -0.006586f, -0.012828f, -0.012434f, 0.015128f, 0.013177f, -0.023054f, 0.013246f, 0.010690f, 0.009585f, 0.011189f, -0.020630f, 0.015319f, -0.001265f, 0.009187f, -0.025801f, -0.006375f, 0.005422f, 0.119458f, 0.060095f, 0.120200f, -0.111045f, 0.010097f, 0.056876f, -0.021736f, 0.064858f, 0.126791f, 0.068722f, 0.004564f, -0.034580f, -0.034544f, 0.005981f, 0.055251f, 0.058029f, 0.013845f, -0.000714f, -0.086606f, -0.018528f, 0.086459f, 0.027859f, -0.023443f, 0.046887f, -0.039853f, -0.057055f, -0.014992f, -0.004347f, 0.066958f, 0.086195f, 0.078473f, 0.028958f, -0.029706f, -0.047040f, -0.085674f, -0.086285f, 0.075158f, 0.030720f, 0.006627f, 0.114697f, 0.007492f, -0.035889f, -0.046671f, -0.048523f, 0.023820f, 0.048661f, 0.039701f, 0.075026f, 0.005869f, 0.053817f, -0.003071f, -0.010378f, 0.028059f, 0.049780f, 0.037347f, 0.031415f, -0.028247f, -0.011490f, -0.022178f, -0.051708f, -0.040456f, -0.075083f, + -0.024445f, 0.019357f, -0.011747f, 0.053570f, 0.065613f, -0.001674f, 0.001093f, -0.027283f, -0.047140f, 0.009205f, 0.063409f, -0.004245f, 0.035304f, 0.014659f, -0.004105f, -0.020339f, -0.008604f, 0.005135f, 0.022436f, 0.016508f, -0.016362f, -0.035860f, -0.043099f, -0.041498f, -0.015384f, 0.015973f, -0.003804f, -0.026315f, -0.012694f, -0.018453f, -0.014622f, 0.007797f, -0.001835f, 0.023494f, 0.034964f, 0.007119f, -0.041546f, -0.022215f, -0.024718f, -0.006344f, 0.028753f, 0.006204f, 0.007393f, -0.034969f, -0.032097f, -0.037696f, -0.018610f, 0.031720f, 0.022458f, 0.027295f, 0.015417f, -0.014147f, -0.016322f, 0.011222f, 0.011121f, -0.003524f, 0.007664f, -0.014801f, -0.011012f, 0.007791f, 0.006302f, 0.011035f, -0.006446f, -0.014713f, -0.006122f, -0.011421f, -0.001678f, 0.021478f, -0.063304f, -0.123043f, 0.048468f, 0.201018f, 0.204109f, 0.173028f, 0.125134f, -0.077174f, -0.088312f, -0.095143f, -0.126862f, -0.193788f, -0.156359f, -0.135551f, 0.062864f, 0.145918f, 0.108283f, 0.234586f, 0.181068f, 0.094621f, -0.034992f, -0.063048f, -0.157735f, -0.122903f, -0.121964f, -0.024774f, -0.074784f, -0.060492f, + 0.017949f, 0.033121f, 0.066275f, 0.066784f, 0.091310f, 0.090834f, 0.116884f, 0.068380f, 0.029887f, -0.016895f, -0.019889f, -0.051357f, -0.078037f, -0.093949f, -0.115138f, -0.075200f, -0.141386f, -0.093986f, -0.070762f, 0.070833f, 0.133933f, 0.144695f, 0.099888f, 0.068271f, 0.106617f, 0.081801f, 0.102320f, 0.080634f, 0.028104f, -0.037898f, -0.179503f, -0.126732f, -0.129435f, -0.200551f, -0.126019f, -0.108835f, -0.105869f, 0.038568f, 0.106269f, 0.169062f, 0.138983f, 0.198728f, 0.178119f, 0.174416f, 0.124138f, -0.067690f, -0.061506f, -0.139379f, -0.184609f, -0.203158f, -0.166851f, -0.079909f, -0.022845f, -0.042010f, 0.054888f, 0.145587f, 0.102435f, 0.069399f, 0.116552f, 0.098174f, 0.034929f, -0.022976f, -0.023394f, -0.007463f, -0.028674f, -0.078180f, -0.049314f, -0.055834f, -0.030349f, -0.024993f, -0.058439f, -0.021510f, 0.019982f, -0.019462f, 0.064490f, 0.085370f, 0.093550f, 0.099190f, 0.006063f, 0.029674f, 0.028816f, -0.008365f, -0.135845f, -0.108212f, -0.084739f, -0.075483f, -0.059623f, -0.056350f, 0.062394f, 0.093444f, 0.101352f, 0.097199f, 0.079967f, 0.055003f, 0.049328f, -0.000647f, + -0.014716f, -0.078398f, -0.106032f, -0.094779f, -0.079206f, -0.050380f, -0.032916f, 0.003933f, 0.047709f, 0.096986f, 0.072494f, 0.046259f, 0.033385f, 0.009265f, -0.000662f, 0.000159f, -0.019343f, -0.025130f, -0.020883f, -0.024553f, 0.005911f, -0.009163f, -0.033874f, 0.004580f, 0.016264f, -0.005929f, -0.008409f, -0.006916f, 0.003902f, 0.006476f, -0.008765f, 0.002020f, 0.022146f, 0.013941f, 0.006555f, 0.013723f, 0.013232f, 0.002365f, -0.002519f, -0.004112f, -0.008796f, -0.012419f, -0.009208f, -0.006645f, -0.008461f, -0.007028f, -0.003201f, -0.001252f, 0.001931f, 0.004133f, 0.004210f, 0.003843f, 0.006657f, 0.005388f, 0.005938f, 0.002477f, -0.002266f, -0.002748f, -0.000228f, -0.002567f, -0.004951f, -0.003176f, 0.002194f, 0.005103f, 0.006385f, 0.005036f, 0.004896f, 0.001218f, -0.002546f, -0.005375f, -0.008038f, -0.010830f, -0.010118f, -0.008915f, -0.005546f, -0.002374f, 0.002095f, 0.007689f, 0.013675f, 0.015272f, 0.015251f, 0.012285f, 0.007644f, 0.001687f, -0.003746f, -0.010958f, -0.014265f, -0.015488f, -0.013347f, -0.009609f, -0.004614f, 0.001057f, 0.006381f, 0.007769f, 0.009162f, 0.008066f, + 0.005831f, 0.002823f, 0.001199f, -0.000307f, -0.000813f, -0.001512f, -0.001536f, -0.001870f, -0.001008f, -0.001180f, -0.000923f, -0.001204f, -0.000518f, -0.000670f, -0.000110f, -0.000390f, 0.000129f, -0.000294f, 0.000147f, -0.000211f} + }, + { + {-0.006330f, 0.006372f, 0.005245f, 0.012101f, -0.016482f, 0.003612f, 0.010679f, 0.019825f, -0.002242f, 0.011209f, -0.000579f, 0.010185f, 0.002326f, 0.015574f, -0.000426f, -0.004932f, 0.010316f, 0.014928f, 0.013947f, 0.008387f, 0.002158f, -0.005639f, -0.004625f, 0.001479f, 0.007064f, -0.003561f, 0.003226f, 0.000968f, 0.008047f, -0.003864f, -0.000334f, 0.002115f, -0.009840f, -0.005579f, -0.002967f, -0.010086f, 0.002330f, -0.002793f, -0.000188f, -0.001307f, -0.008562f, 0.006661f, 0.009988f, -0.002014f, 0.000712f, 0.001000f, -0.001709f, 0.010776f, -0.013087f, 0.000030f, 0.005280f, 0.001509f, 0.001621f, -0.003054f, -0.010853f, -0.002685f, 0.004093f, 0.005013f, 0.005410f, -0.000915f, 0.000099f, 0.000133f, 0.002092f, -0.001768f, 0.011179f, 0.000374f, -0.001078f, -0.007328f, 0.000912f, -0.005233f, -0.004164f, 0.004501f, 0.004759f, 0.011671f, 0.000327f, 0.011476f, 0.001215f, 0.001291f, 0.000687f, -0.005984f, 0.000292f, -0.002095f, -0.003150f, 0.001287f, 0.003576f, -0.002256f, 0.001398f, -0.002336f, 0.002824f, -0.002978f, -0.001017f, -0.001505f, 0.001602f, -0.000917f, 0.001492f, -0.001304f, + 0.001773f, 0.003299f, 0.001545f, -0.001536f, -0.000500f, -0.000766f, -0.000865f, 0.000979f, 0.000620f, -0.000738f, 0.012949f, 0.020945f, 0.002825f, 0.010416f, -0.003770f, 0.006178f, 0.008111f, -0.002511f, -0.006471f, 0.010972f, 0.018979f, -0.003740f, 0.002123f, 0.007313f, -0.009061f, 0.005630f, 0.008113f, -0.016598f, 0.004680f, 0.001597f, -0.003712f, -0.000020f, -0.017244f, 0.000681f, 0.004853f, -0.008228f, 0.001536f, 0.000269f, 0.011074f, 0.007877f, -0.004135f, -0.001202f, -0.001034f, -0.011774f, -0.007886f, 0.001271f, 0.004764f, 0.001042f, 0.005291f, -0.007786f, 0.001188f, 0.003857f, 0.000817f, -0.007210f, -0.005248f, -0.001614f, 0.002517f, 0.005795f, 0.006030f, 0.003991f, 0.007037f, 0.006853f, -0.007702f, -0.002382f, 0.000326f, 0.009750f, -0.001474f, 0.006990f, -0.004598f, -0.004793f, -0.001465f, -0.008801f, -0.004040f, 0.001779f, 0.005136f, -0.007514f, 0.007347f, -0.002095f, -0.002179f, -0.001484f, -0.002960f, -0.003810f, 0.001527f, 0.005687f, 0.002138f, 0.009505f, -0.013203f, -0.010672f, -0.002337f, 0.003929f, -0.000132f, -0.002191f, 0.002028f, 0.000278f, 0.002458f, 0.004002f, + 0.006740f, 0.000102f, -0.000390f, 0.001577f, -0.000619f, -0.000115f, 0.001044f, -0.003110f, -0.001618f, -0.006414f, 0.002556f, 0.012150f, 0.017208f, 0.009960f, -0.004304f, 0.007369f, -0.004484f, -0.003038f, -0.014681f, -0.011712f, 0.005323f, 0.011247f, 0.011035f, 0.011467f, 0.002586f, 0.000612f, 0.007137f, -0.009485f, 0.009564f, 0.007716f, 0.000743f, 0.006628f, 0.017071f, 0.011586f, 0.003281f, -0.012249f, 0.000391f, 0.004112f, 0.002678f, 0.002018f, -0.013378f, 0.003210f, 0.002507f, 0.008977f, 0.009949f, -0.003115f, 0.006405f, -0.004827f, -0.005316f, 0.007216f, 0.004136f, -0.012842f, -0.012110f, -0.005324f, -0.006785f, -0.005083f, -0.005380f, -0.014835f, -0.013380f, -0.001215f, 0.004893f, -0.000085f, -0.001369f, -0.009995f, 0.001381f, 0.011866f, -0.003281f, -0.003747f, 0.004520f, -0.000022f, 0.008634f, 0.004316f, 0.004438f, -0.005534f, -0.006780f, 0.012744f, 0.005885f, -0.005097f, 0.008450f, -0.001114f, 0.006601f, -0.005530f, 0.001089f, 0.009410f, -0.003513f, -0.003044f, 0.006842f, 0.000836f, 0.002762f, 0.004043f, -0.004618f, 0.005281f, -0.002136f, 0.004328f, 0.004417f, 0.003372f, + -0.002936f, 0.001106f, -0.001429f, -0.002546f, -0.003200f, 0.000189f, 0.000457f, 0.002133f, 0.001893f, 0.000501f, -0.000098f, 0.001676f, 0.000591f, 0.001169f, -0.023712f, -0.014019f, -0.004341f, 0.004466f, -0.009752f, 0.002950f, -0.002641f, 0.006800f, -0.001621f, -0.013332f, -0.010537f, 0.009166f, 0.007569f, 0.018995f, 0.016844f, -0.002586f, 0.012199f, -0.018325f, -0.002935f, 0.014189f, 0.004328f, 0.003268f, -0.001831f, -0.006006f, -0.002743f, 0.001938f, -0.001587f, -0.000584f, 0.007243f, -0.008998f, 0.002048f, 0.003232f, -0.000168f, 0.005635f, -0.006117f, -0.005079f, 0.003307f, -0.003956f, 0.005113f, -0.010050f, 0.001714f, -0.006047f, -0.002318f, -0.006731f, -0.004968f, -0.007643f, -0.011247f, 0.006905f, -0.000020f, 0.011789f, -0.010991f, -0.009478f, -0.000023f, 0.002242f, -0.001243f, -0.002290f, 0.000837f, 0.007096f, 0.003464f, 0.001514f, -0.004802f, -0.004705f, -0.002602f, -0.008839f, 0.001461f, -0.002301f, 0.001093f, -0.000430f, -0.009438f, -0.000811f, -0.000693f, -0.010070f, 0.000338f, -0.001909f, 0.001230f, -0.001707f, -0.011138f, 0.001001f, 0.005095f, -0.002234f, 0.007462f, 0.002040f, + -0.003894f, 0.003112f, 0.007828f, 0.002551f, 0.001405f, 0.001754f, -0.001580f, 0.000963f, 0.006141f, -0.000475f, -0.000897f, 0.002238f, 0.002564f, 0.000968f, 0.002082f, 0.000436f, 0.000915f, -0.004058f, 0.000523f, -0.000317f, -0.001919f, -0.001453f, -0.001393f, -0.002062f, 0.000393f, -0.001690f, 0.008400f, -0.012831f, 0.005310f, -0.014331f, -0.002333f, 0.000632f, -0.010377f, 0.009841f, 0.007710f, -0.021240f, -0.001988f, 0.003493f, -0.001801f, -0.009329f, -0.012260f, 0.002496f, -0.006092f, -0.010397f, -0.004936f, 0.006061f, 0.005594f, 0.014954f, 0.019696f, -0.001761f, 0.017619f, -0.010767f, 0.007031f, 0.007545f, -0.001386f, 0.007432f, -0.004129f, 0.000107f, -0.000972f, -0.003650f, -0.001700f, -0.004079f, 0.014711f, -0.000867f, -0.010672f, -0.002639f, 0.007453f, 0.004480f, 0.005994f, 0.001116f, -0.004897f, 0.010583f, 0.021824f, 0.001308f, 0.002356f, 0.001228f, -0.001438f, 0.003389f, -0.001280f, 0.012335f, -0.009286f, 0.011798f, 0.008381f, -0.007557f, 0.004034f, 0.007673f, 0.005457f, -0.009048f, -0.009581f, -0.019326f, -0.002973f, -0.001857f, 0.002632f, 0.007424f, -0.001629f, 0.004823f, + -0.001454f, -0.005158f, -0.004920f, 0.009931f, -0.002083f, 0.010537f, -0.015397f, -0.006181f, 0.003779f, -0.009915f, 0.002767f, 0.010603f, 0.001209f, -0.000102f, 0.000984f, 0.002243f, 0.001665f, -0.006013f, -0.001711f, -0.000997f, 0.001082f, -0.001083f, 0.002161f, 0.002709f, 0.001619f, -0.001751f, -0.003810f, 0.004394f, 0.001918f, 0.001704f, 0.001372f, 0.001271f, 0.000541f, 0.000103f, -0.001722f, 0.001831f, 0.001091f, 0.000713f, 0.000546f, 0.001927f, 0.001522f, 0.002312f, -0.002457f, -0.001637f, -0.002921f, -0.002931f, -0.000546f, 0.002322f, -0.001604f, -0.001101f, 0.001518f, 0.000512f, 0.001189f, -0.000495f, 0.000430f, 0.005399f, 0.002697f, 0.000080f, 0.007752f, 0.021664f, 0.025993f, -0.006890f, -0.000374f, 0.005239f, -0.003673f, 0.016506f, 0.016519f, -0.010443f, 0.016201f, 0.012372f, 0.005068f, 0.007103f, 0.006744f, 0.003153f, -0.001165f, 0.000992f, 0.002384f, -0.008981f, -0.010543f, 0.002664f, -0.002776f, -0.000296f, 0.002110f, -0.009690f, 0.009865f, 0.019153f, -0.000353f, -0.011740f, 0.019133f, 0.002144f, 0.000833f, 0.007264f, -0.003060f, -0.005809f, 0.003005f, -0.007245f, + 0.003094f, 0.019140f, 0.008523f, -0.000281f, 0.007157f, 0.010344f, 0.027478f, -0.004585f, 0.012009f, -0.002469f, -0.011564f, 0.007646f, 0.000975f, -0.004062f, 0.005623f, 0.016560f, 0.004554f, 0.002843f, 0.000027f, 0.006562f, 0.024362f, 0.010684f, 0.003285f, 0.002330f, 0.006616f, -0.007058f, 0.012600f, -0.003287f, -0.023567f, 0.002800f, -0.002281f, 0.014264f, 0.017197f, 0.007222f, -0.006956f, -0.006670f, -0.005893f, -0.000944f, 0.005543f, 0.000403f, 0.003844f, 0.002341f, 0.004017f, 0.010703f, 0.004948f, -0.008643f, -0.003435f, 0.001105f, 0.003264f, 0.000471f, 0.000067f, 0.000245f, -0.004417f, 0.004895f, 0.001453f, 0.000935f, 0.000821f, 0.000936f, 0.000741f, 0.003651f, -0.001234f, 0.002645f, -0.002429f, -0.000866f, -0.003997f, 0.000798f, -0.001360f, -0.000296f, 0.000535f, 0.001731f, -0.029323f, -0.003060f, -0.012577f, -0.014369f, -0.004096f, -0.010193f, 0.000259f, 0.009134f, -0.013906f, 0.014348f, -0.030473f, 0.004482f, -0.009197f, -0.015926f, -0.021871f, 0.022741f, 0.011011f, 0.001623f, -0.019416f, -0.012364f, 0.006893f, -0.024718f, -0.017660f, 0.006063f, 0.005016f, 0.025422f, + -0.003552f, 0.002253f, 0.018449f, -0.010993f, 0.018113f, 0.006451f, 0.006458f, -0.003448f, -0.011362f, -0.001163f, 0.015027f, -0.008131f, 0.001011f, 0.019361f, -0.007317f, -0.005548f, -0.009607f, -0.011304f, -0.010181f, -0.007288f, -0.015841f, -0.001784f, 0.004356f, -0.005208f, 0.003102f, -0.004978f, -0.008269f, 0.010919f, -0.014192f, 0.008537f, -0.012116f, -0.014757f, 0.000389f, 0.012330f, 0.000460f, -0.003582f, 0.004512f, -0.009817f, -0.005343f, -0.013796f, -0.025114f, -0.011607f, 0.003169f, -0.007416f, 0.027929f, 0.011341f, -0.020109f, -0.009868f, -0.003297f, -0.007038f, 0.008712f, 0.019261f, 0.012227f, -0.009208f, 0.008494f, -0.010936f, 0.006238f, 0.001067f, 0.008508f, -0.009680f, -0.002708f, 0.000934f, -0.004694f, -0.008252f, -0.007367f, 0.001358f, -0.000866f, -0.001873f, 0.003952f, 0.001736f, 0.000260f, -0.002694f, 0.002188f, -0.000486f, -0.002570f, -0.005999f, -0.000570f, -0.003059f, 0.000092f, 0.002747f, -0.002437f, -0.006683f, -0.001230f, -0.002811f, -0.011344f, -0.001570f, -0.003519f, 0.031197f, 0.020800f, 0.021252f, -0.006016f, -0.030953f, -0.002176f, -0.016014f, 0.004194f, 0.006470f, + 0.016738f, -0.008066f, 0.007481f, -0.012926f, 0.002399f, -0.011442f, -0.028232f, -0.015700f, 0.011143f, -0.010735f, -0.022323f, -0.021566f, -0.019487f, -0.031161f, 0.004077f, -0.011139f, -0.023215f, -0.021455f, 0.003946f, 0.029324f, -0.003727f, -0.005299f, -0.009683f, -0.018339f, 0.003951f, -0.007508f, 0.002206f, -0.022793f, 0.001667f, -0.023728f, 0.003497f, -0.002249f, 0.012796f, 0.009388f, 0.010689f, 0.005030f, -0.000656f, 0.008338f, -0.005510f, 0.016736f, 0.005031f, 0.008303f, 0.005412f, -0.005927f, 0.006307f, 0.016868f, -0.002023f, 0.009274f, -0.002222f, 0.026725f, 0.003707f, 0.009833f, 0.001543f, -0.015508f, -0.011392f, 0.000202f, -0.005161f, 0.003168f, -0.003711f, 0.008639f, 0.008212f, 0.010096f, -0.004578f, 0.005619f, -0.020548f, 0.010723f, 0.030566f, -0.014961f, -0.002870f, 0.007747f, -0.017268f, -0.001515f, 0.011146f, -0.007179f, -0.000875f, -0.003947f, 0.009720f, -0.010074f, -0.002117f, 0.002334f, -0.005244f, 0.002335f, -0.001685f, 0.003707f, -0.004840f, -0.005343f, 0.005811f, -0.002832f, -0.005340f, 0.003619f, -0.001987f, -0.000182f, -0.007632f, 0.005689f, 0.002206f, -0.001597f, + -0.001100f, 0.003116f, 0.001410f, 0.003014f, 0.002606f, 0.000299f, -0.003165f, -0.006211f, -0.001538f, 0.003216f, -0.015277f, -0.044077f, -0.007364f, -0.015357f, -0.023283f, 0.012546f, -0.044386f, -0.005712f, -0.015832f, -0.008551f, 0.012730f, -0.014078f, 0.018677f, 0.016195f, 0.002503f, 0.014605f, 0.001217f, 0.007733f, -0.011630f, -0.020365f, -0.022528f, -0.012538f, -0.020655f, 0.016059f, 0.020932f, -0.000885f, -0.011157f, 0.006083f, 0.005971f, -0.007725f, 0.001456f, -0.035042f, -0.018630f, 0.016312f, -0.009031f, 0.000481f, 0.015901f, -0.001514f, 0.009798f, 0.008471f, -0.004663f, 0.009691f, -0.000216f, -0.018687f, 0.020700f, -0.014628f, 0.000896f, 0.001145f, -0.011588f, 0.007641f, 0.012294f, -0.007322f, 0.014060f, 0.001588f, -0.001220f, -0.012963f, 0.015895f, -0.000097f, -0.013090f, -0.004304f, -0.026106f, -0.010908f, -0.014959f, -0.001885f, 0.017745f, 0.005151f, -0.001826f, 0.000290f, -0.016945f, 0.003775f, 0.012805f, -0.016973f, 0.000843f, 0.025970f, -0.010828f, 0.002541f, 0.001833f, -0.018477f, -0.011248f, 0.011810f, 0.009760f, -0.030061f, 0.005914f, 0.022466f, -0.000255f, 0.002674f, + -0.000012f, 0.005409f, -0.001863f, 0.014178f, -0.003399f, -0.000598f, 0.001665f, 0.002716f, -0.006589f, 0.001623f, 0.004842f, 0.001532f, 0.008273f, 0.003089f, -0.000341f, -0.003107f, -0.006805f, -0.001929f, 0.002990f, -0.004123f, 0.002816f, -0.004228f, -0.000292f, 0.005832f, 0.002965f, -0.004129f, -0.005762f, 0.000281f, 0.000012f, 0.012422f, -0.005196f, 0.001007f, 0.006623f, 0.002740f, 0.006532f, 0.078735f, 0.017338f, -0.010164f, -0.015920f, -0.001400f, -0.005140f, 0.014054f, -0.003260f, 0.011895f, 0.022131f, -0.008877f, 0.000964f, -0.014641f, -0.010259f, 0.004846f, -0.002595f, 0.011556f, -0.022196f, -0.012816f, 0.010237f, 0.022175f, 0.014413f, -0.000597f, 0.005065f, -0.005327f, -0.013437f, 0.009673f, 0.017091f, 0.018179f, 0.021673f, -0.018018f, -0.004458f, -0.010307f, -0.022613f, -0.002768f, 0.000991f, -0.004852f, 0.010138f, 0.013671f, -0.000209f, 0.006777f, -0.004206f, -0.023786f, -0.013157f, -0.031834f, -0.032540f, -0.009393f, 0.010659f, -0.004683f, -0.014515f, 0.027169f, 0.010075f, -0.001061f, -0.025619f, -0.001121f, -0.008019f, -0.018151f, 0.000043f, -0.008286f, -0.011970f, -0.025154f, + -0.003415f, -0.009272f, -0.027881f, 0.000025f, 0.021004f, -0.014208f, -0.006938f, 0.007853f, -0.012098f, 0.004765f, -0.011989f, 0.017281f, -0.005708f, -0.016654f, -0.026073f, -0.042500f, 0.008221f, 0.007207f, 0.032323f, 0.013101f, 0.011083f, -0.000139f, 0.009697f, -0.007633f, 0.010288f, -0.000950f, 0.003522f, 0.005218f, 0.012236f, 0.005690f, 0.000342f, -0.002257f, -0.000773f, 0.004924f, 0.002913f, 0.012894f, 0.009957f, 0.006773f, 0.002049f, -0.002615f, -0.006960f, 0.003726f, 0.008209f, 0.000754f, 0.000387f, -0.001562f, -0.006170f, -0.001033f, -0.001037f, -0.002884f, -0.002287f, -0.004647f, 0.003738f, 0.005691f, -0.005465f, -0.005420f, -0.000439f, -0.000706f, 0.002846f, 0.017560f, -0.062148f, -0.035597f, 0.033137f, -0.008690f, 0.002251f, -0.017214f, 0.014535f, -0.006006f, -0.023890f, 0.011449f, 0.033511f, 0.004191f, -0.029055f, 0.008152f, -0.006211f, -0.006762f, 0.019365f, 0.019848f, -0.002533f, -0.004129f, 0.042177f, 0.009320f, -0.005880f, -0.025891f, 0.011602f, -0.037101f, -0.030312f, -0.028152f, 0.011571f, -0.005369f, -0.002836f, 0.024090f, 0.009810f, -0.024570f, -0.020309f, 0.005291f, + 0.024033f, 0.008124f, -0.002531f, 0.001318f, 0.016092f, -0.011522f, -0.025701f, 0.033767f, -0.009730f, 0.003481f, 0.013851f, 0.002084f, 0.004892f, 0.034735f, 0.000817f, 0.022121f, 0.001216f, -0.023307f, 0.003592f, 0.004962f, -0.004605f, 0.004430f, 0.016044f, -0.011787f, -0.003347f, 0.004037f, -0.045808f, 0.012208f, 0.009648f, -0.000270f, 0.011285f, 0.008607f, -0.016843f, 0.008098f, 0.063473f, 0.027183f, 0.015867f, 0.004588f, 0.015605f, -0.048609f, -0.022794f, 0.024611f, 0.001237f, -0.000214f, -0.018398f, 0.016455f, 0.020160f, 0.016681f, 0.003040f, 0.003513f, -0.006409f, 0.000289f, -0.011298f, -0.004178f, 0.009403f, -0.002033f, -0.005558f, 0.004776f, 0.000650f, 0.004586f, -0.006465f, -0.002826f, 0.002546f, -0.001195f, 0.004894f, -0.008032f, -0.002503f, 0.005782f, -0.006151f, 0.004684f, 0.001976f, 0.000637f, 0.000469f, 0.000094f, -0.004925f, 0.002647f, 0.005112f, -0.002379f, -0.002131f, -0.005552f, 0.002749f, -0.000303f, -0.041481f, 0.029071f, 0.031620f, 0.009875f, 0.017551f, -0.011841f, 0.050323f, -0.006129f, 0.019345f, 0.012827f, -0.022860f, -0.009712f, -0.010422f, 0.028866f, + -0.017069f, -0.005620f, 0.018567f, 0.015188f, -0.016775f, -0.004843f, -0.048941f, 0.008968f, -0.005222f, -0.014664f, 0.004486f, 0.001106f, 0.003859f, 0.004297f, 0.016876f, 0.000456f, 0.018463f, 0.001946f, 0.009114f, -0.004937f, -0.015621f, -0.017119f, 0.031996f, -0.011545f, -0.022790f, -0.019596f, -0.008562f, -0.010884f, 0.014004f, 0.008325f, 0.010834f, 0.013824f, 0.004429f, -0.017644f, 0.010195f, -0.028630f, -0.009083f, -0.025047f, 0.017286f, -0.030185f, -0.021289f, -0.006591f, -0.009880f, 0.008713f, 0.020357f, -0.016247f, 0.019229f, 0.031081f, 0.015755f, 0.029932f, -0.012450f, 0.040260f, 0.003910f, 0.034072f, 0.019661f, 0.004032f, -0.018090f, -0.046254f, -0.030878f, -0.025518f, -0.014149f, -0.014411f, -0.004301f, -0.021670f, 0.016360f, 0.026664f, -0.010141f, -0.020876f, -0.018604f, -0.015136f, -0.027785f, 0.017386f, 0.012967f, -0.007690f, -0.007003f, -0.011124f, 0.001652f, -0.006413f, 0.015305f, -0.000213f, 0.004085f, -0.008300f, -0.006688f, -0.011598f, -0.001872f, -0.013843f, -0.012829f, 0.013114f, -0.000725f, 0.001375f, 0.000551f, 0.004643f, -0.005117f, -0.000766f, -0.007798f, 0.000007f, + 0.000266f, -0.000613f, 0.004346f, 0.000174f, -0.006343f, -0.004574f, -0.004491f, 0.001054f, -0.006833f, -0.007943f, -0.009478f, 0.002357f, -0.002409f, 0.023253f, 0.011848f, -0.013228f, 0.039142f, 0.004426f, -0.038215f, 0.047716f, 0.003192f, -0.020326f, 0.016833f, -0.039193f, -0.007511f, -0.024955f, -0.007802f, -0.004423f, -0.007669f, -0.017842f, 0.004984f, -0.033867f, -0.013112f, -0.012217f, -0.045709f, 0.005543f, -0.033156f, -0.023563f, -0.037197f, 0.007451f, -0.028073f, -0.008477f, -0.009319f, 0.000294f, 0.014114f, -0.011411f, 0.019878f, 0.001019f, 0.026384f, -0.006163f, 0.022943f, 0.028940f, -0.034782f, -0.000532f, 0.009284f, 0.021242f, 0.000791f, 0.025543f, 0.008517f, 0.024628f, -0.000561f, -0.018840f, -0.011884f, -0.001824f, 0.015898f, -0.003685f, -0.007386f, -0.001615f, 0.029478f, 0.018630f, -0.007079f, -0.024355f, 0.008099f, 0.013356f, 0.009445f, 0.026171f, -0.035138f, -0.025962f, -0.007481f, 0.002456f, -0.009947f, 0.000265f, -0.010144f, -0.021946f, 0.061452f, -0.030409f, -0.035353f, 0.026313f, 0.015079f, 0.022858f, 0.006929f, 0.008394f, 0.004640f, 0.013358f, -0.012737f, 0.035330f, + -0.006283f, 0.008655f, -0.006939f, 0.004717f, 0.002011f, -0.001951f, 0.022420f, 0.002809f, 0.001854f, -0.022229f, 0.009937f, 0.003311f, -0.003389f, -0.018105f, -0.001986f, -0.003754f, 0.000340f, -0.005773f, 0.016091f, 0.003744f, 0.004390f, -0.013086f, 0.008778f, -0.006224f, 0.001661f, 0.007820f, -0.000488f, -0.003875f, -0.004367f, -0.011642f, 0.006594f, 0.011888f, -0.005839f, -0.001321f, -0.004386f, 0.001765f, -0.006943f, -0.015663f, -0.004933f, -0.000529f, -0.010930f, 0.011121f, -0.001172f, -0.001512f, 0.003546f, -0.010527f, -0.012141f, -0.003369f, 0.004681f, -0.007992f, -0.010644f, 0.031224f, 0.022634f, 0.036881f, -0.012424f, -0.008883f, -0.050589f, 0.058692f, 0.026597f, -0.077714f, -0.041915f, 0.025158f, 0.034461f, 0.035079f, -0.022629f, -0.018001f, 0.041991f, 0.010200f, 0.009465f, 0.029451f, 0.023431f, -0.042896f, 0.012975f, 0.018335f, -0.003453f, 0.020509f, 0.003680f, -0.005360f, 0.003982f, -0.013854f, 0.071688f, 0.019001f, 0.009134f, -0.001810f, -0.009131f, -0.004671f, -0.041033f, 0.007984f, 0.011750f, -0.009447f, -0.013616f, -0.065886f, -0.031795f, 0.013977f, 0.011271f, -0.021525f, + -0.021446f, -0.002846f, -0.031689f, 0.013150f, 0.011424f, -0.004436f, 0.012883f, 0.026177f, 0.001056f, -0.001222f, -0.008595f, -0.013788f, -0.004804f, 0.002464f, -0.048934f, -0.006357f, 0.011177f, 0.029801f, -0.052943f, 0.011822f, 0.018623f, -0.004029f, -0.025066f, -0.022279f, 0.039517f, 0.039432f, -0.006018f, -0.024441f, -0.046848f, 0.009914f, 0.018412f, 0.009883f, 0.000504f, -0.050684f, 0.021152f, 0.046324f, -0.015924f, 0.005316f, 0.014247f, -0.018926f, -0.030620f, -0.015955f, 0.004350f, -0.009329f, -0.002691f, -0.014223f, -0.012608f, -0.010371f, -0.004712f, -0.004041f, 0.005894f, -0.001042f, -0.001212f, -0.012968f, 0.005088f, -0.006062f, 0.002514f, 0.000155f, 0.003926f, 0.007952f, 0.008918f, -0.014508f, 0.005559f, -0.011205f, -0.019227f, -0.009909f, 0.002428f, -0.001881f, 0.007985f, -0.001806f, 0.005099f, 0.011209f, 0.000271f, -0.000494f, -0.010108f, -0.005461f, 0.014519f, 0.007528f, -0.006485f, -0.003776f, -0.001728f, -0.009415f, 0.023123f, -0.017020f, 0.006267f, -0.014181f, -0.012603f, 0.002215f, 0.015645f, 0.031387f, -0.057824f, -0.075344f, -0.052451f, -0.067407f, 0.058474f, -0.039040f, + 0.023499f, -0.006593f, -0.047440f, 0.008479f, -0.012932f, -0.017602f, -0.061574f, -0.056341f, -0.042150f, -0.016066f, 0.002114f, -0.032613f, -0.009525f, 0.008590f, 0.026399f, 0.002073f, -0.016562f, 0.000034f, -0.017707f, 0.025374f, -0.032057f, 0.044139f, 0.037976f, -0.009155f, -0.012212f, -0.052445f, -0.030656f, -0.031920f, 0.003733f, 0.006981f, -0.008643f, 0.042749f, 0.012093f, 0.034636f, 0.006733f, -0.004168f, -0.015859f, 0.031144f, 0.021450f, 0.009715f, -0.031477f, 0.016706f, -0.053152f, -0.006015f, -0.005752f, -0.035305f, -0.005918f, 0.000335f, 0.040430f, 0.026767f, 0.000646f, 0.018648f, -0.000874f, -0.040099f, 0.020239f, 0.005536f, 0.033220f, -0.019010f, -0.038612f, 0.022822f, -0.069281f, -0.015999f, 0.024331f, -0.010525f, -0.011153f, 0.016789f, -0.004654f, -0.013789f, 0.012658f, -0.005928f, -0.044520f, -0.039181f, -0.006609f, 0.018088f, 0.029360f, 0.041348f, 0.041440f, -0.017820f, -0.014304f, 0.008000f, 0.014919f, 0.013408f, 0.005520f, -0.018687f, 0.016087f, 0.000103f, -0.003605f, 0.001887f, 0.009912f, 0.016655f, -0.005096f, 0.002626f, 0.015786f, -0.003928f, -0.000485f, -0.016335f, + 0.007877f, -0.003752f, -0.001282f, 0.013025f, -0.002765f, -0.006188f, 0.005795f, -0.018569f, -0.006935f, 0.018341f, 0.005170f, 0.005757f, -0.006741f, -0.004629f, -0.002909f, -0.014894f, -0.002081f, -0.008441f, 0.010923f, -0.032046f, 0.000379f, 0.023528f, -0.075816f, -0.006564f, -0.048430f, 0.003413f, -0.035781f, 0.032629f, -0.025677f, -0.002215f, 0.005900f, 0.012479f, 0.038353f, 0.013479f, -0.017970f, 0.042355f, 0.012640f, -0.070799f, 0.011371f, -0.042286f, -0.003405f, 0.008629f, -0.006326f, 0.035675f, -0.010775f, 0.006888f, 0.008572f, 0.003596f, -0.023187f, 0.036213f, -0.020996f, -0.001461f, -0.042084f, 0.000472f, 0.006782f, -0.006098f, -0.014992f, -0.018653f, -0.022114f, 0.054658f, 0.001886f, 0.028553f, -0.048493f, 0.005960f, -0.000875f, 0.017074f, 0.028516f, -0.032638f, 0.058638f, 0.085321f, -0.004125f, 0.008703f, -0.029851f, 0.014090f, 0.019497f, -0.015865f, 0.003991f, 0.016482f, 0.032681f, -0.000564f, 0.001714f, -0.009698f, -0.028851f, -0.042502f, 0.021697f, -0.031750f, -0.013840f, -0.020624f, 0.009133f, 0.029466f, 0.025777f, -0.004644f, 0.009561f, -0.057870f, 0.038378f, -0.006689f, + 0.008209f, -0.016648f, 0.037503f, -0.051890f, 0.062315f, 0.045963f, 0.051893f, -0.020554f, -0.001417f, -0.050855f, -0.028006f, -0.018616f, 0.016711f, 0.014741f, -0.042665f, -0.030708f, 0.001028f, -0.010376f, -0.031164f, 0.000334f, -0.021615f, -0.025052f, -0.009684f, -0.003402f, 0.001819f, -0.016428f, 0.002873f, 0.006086f, 0.025617f, 0.023449f, -0.003712f, 0.022126f, -0.010822f, -0.026742f, -0.015133f, -0.005432f, -0.013792f, -0.001713f, -0.010273f, 0.015726f, 0.004552f, 0.059643f, 0.007753f, -0.020060f, -0.007088f, 0.005661f, -0.031048f, -0.019004f, 0.007319f, 0.001575f, -0.008075f, 0.003421f, -0.000015f, -0.033513f, -0.003573f, 0.022957f, -0.016709f, 0.024074f, 0.095284f, 0.026423f, 0.069466f, 0.021354f, -0.071147f, 0.028221f, 0.020561f, -0.024506f, 0.005480f, 0.045746f, 0.002650f, 0.043760f, 0.039889f, -0.046682f, 0.025956f, -0.046701f, -0.030562f, -0.004974f, 0.093264f, 0.027890f, -0.041264f, 0.038905f, 0.026014f, -0.051617f, -0.021946f, -0.004087f, 0.052445f, 0.007068f, -0.046897f, -0.027293f, -0.000919f, -0.013593f, 0.029367f, 0.040960f, -0.014461f, 0.035956f, -0.022977f, -0.032448f, + -0.000533f, 0.074700f, 0.007572f, -0.043816f, 0.025163f, -0.002615f, -0.003730f, 0.020492f, -0.048496f, -0.042982f, -0.039689f, 0.028926f, -0.025793f, 0.008939f, 0.013136f, 0.044435f, 0.022850f, 0.045698f, 0.005515f, -0.002573f, 0.038323f, 0.068708f, 0.041765f, -0.069097f, 0.002014f, 0.006094f, -0.011014f, 0.012654f, 0.019607f, -0.053487f, -0.007380f, 0.009920f, 0.009768f, -0.063596f, -0.059143f, -0.034059f, -0.035699f, 0.062030f, 0.023755f, 0.002348f, 0.028217f, -0.051619f, 0.021684f, 0.013589f, 0.009941f, -0.005067f, -0.011084f, 0.042692f, 0.026592f, -0.017847f, 0.007995f, -0.013593f, 0.028829f, -0.008687f, 0.002583f, 0.005386f, 0.004786f, 0.020500f, -0.002734f, -0.034715f, -0.000839f, 0.005871f, 0.009565f, 0.017044f, -0.004170f, 0.001038f, 0.013757f, -0.027028f, -0.015104f, -0.002994f, -0.047602f, -0.007926f, 0.013957f, -0.004100f, 0.005821f, 0.027056f, -0.003342f, -0.019770f, 0.004713f, 0.006156f, 0.018525f, 0.020858f, -0.020028f, -0.013270f, -0.000767f, -0.018070f, -0.010812f, -0.034145f, -0.039394f, 0.010568f, 0.001257f, -0.018573f, -0.014480f, -0.018947f, -0.035801f, 0.026766f, + -0.071737f, 0.051877f, 0.058368f, 0.015937f, 0.063549f, -0.065079f, -0.031544f, -0.017727f, -0.093053f, 0.052399f, 0.005481f, 0.032386f, 0.043004f, 0.041696f, 0.003456f, -0.001445f, 0.042764f, -0.006855f, -0.050270f, -0.052555f, 0.031985f, -0.059359f, 0.058070f, -0.016700f, 0.012930f, 0.057186f, 0.051922f, -0.026094f, 0.078935f, -0.045696f, 0.005365f, -0.047506f, 0.007943f, -0.016286f, 0.031255f, 0.010453f, -0.033357f, 0.030115f, 0.046172f, 0.067334f, -0.038667f, 0.014361f, 0.041680f, -0.056899f, 0.002934f, -0.022893f, -0.081889f, -0.035410f, 0.022271f, -0.045188f, 0.016413f, -0.037936f, -0.000578f, 0.055332f, -0.025927f, 0.023430f, 0.064136f, 0.045537f, 0.017427f, 0.084799f, -0.131741f, -0.024904f, 0.044479f, -0.005094f, 0.026084f, -0.040910f, -0.071005f, 0.086732f, -0.000851f, -0.043681f, 0.019121f, 0.054898f, 0.136604f, 0.051595f, -0.102579f, -0.056201f, 0.035523f, 0.038118f, 0.016957f, -0.071911f, -0.005825f, 0.015811f, -0.021777f, 0.048616f, 0.017847f, 0.031051f, 0.037388f, 0.027738f, -0.018407f, 0.021432f, -0.056660f, 0.008275f, 0.031036f, -0.003629f, -0.029819f, 0.017761f, + -0.018002f, 0.030358f, 0.034026f, -0.014293f, -0.027378f, -0.007474f, 0.062390f, -0.011027f, -0.006720f, -0.024197f, 0.028514f, -0.024027f, -0.014296f, 0.017922f, -0.010998f, 0.058319f, -0.003893f, -0.014398f, 0.059173f, -0.005205f, 0.014255f, 0.035930f, -0.002161f, -0.003034f, 0.004015f, 0.005364f, -0.026990f, 0.012561f, 0.002101f, -0.039961f, 0.027781f, -0.012379f, 0.052156f, -0.028057f, 0.016125f, 0.004853f, 0.069744f, -0.061254f, -0.005536f, -0.029232f, -0.036304f, 0.055980f, -0.021705f, 0.073489f, -0.007220f, -0.056510f, 0.088114f, 0.127387f, -0.018074f, -0.040510f, -0.061379f, 0.014762f, 0.067728f, 0.013456f, -0.014120f, -0.042008f, 0.010160f, 0.010140f, -0.009185f, 0.010617f, -0.005851f, -0.020528f, -0.020973f, 0.019695f, 0.027979f, -0.001918f, 0.037764f, -0.035989f, 0.077251f, 0.058275f, 0.033687f, -0.002559f, 0.004816f, 0.011227f, -0.040515f, -0.035413f, -0.039251f, -0.020496f, -0.010548f, 0.024967f, 0.021973f, 0.042100f, -0.019880f, -0.004677f, -0.017568f, 0.047876f, 0.093171f, -0.021588f, -0.059368f, -0.038106f, -0.002069f, -0.080489f, 0.063236f, -0.109444f, 0.032073f, 0.046914f, + 0.048210f, -0.047477f, 0.011588f, 0.048859f, -0.110759f, -0.052159f, 0.023269f, -0.011347f, -0.055263f, -0.048758f, -0.005901f, -0.025332f, 0.083176f, 0.035921f, -0.029789f, -0.027409f, -0.045398f, 0.127156f, 0.027757f, 0.066671f, -0.004208f, 0.019832f, 0.024506f, 0.028921f, -0.040864f, -0.004780f, 0.053201f, 0.036802f, 0.022303f, -0.016833f, -0.021958f, 0.000566f, 0.017036f, 0.024838f, 0.017106f, -0.032102f, 0.005323f, 0.000936f, 0.009137f, 0.024155f, 0.024300f, -0.033606f, 0.016633f, -0.020464f, -0.025167f, 0.003357f, 0.027487f, 0.011532f, -0.015399f, 0.004347f, -0.001587f, -0.004214f, -0.013040f, 0.051277f, -0.014240f, 0.000843f, -0.029536f, 0.007826f, -0.010460f, 0.034088f, 0.011537f, -0.006398f, -0.017076f, 0.019732f, 0.016508f, -0.022503f, 0.002394f, -0.037102f, -0.014135f, 0.009791f, 0.016411f, 0.022241f, 0.000588f, 0.023274f, -0.004574f, 0.004533f, 0.011931f, -0.046923f, 0.013501f, 0.074324f, 0.001528f, -0.024140f, 0.060727f, 0.044712f, -0.013440f, -0.038720f, -0.060482f, 0.012167f, 0.116888f, 0.026586f, 0.059604f, -0.004549f, 0.004592f, -0.004015f, -0.014490f, 0.000738f, + 0.004736f, 0.029214f, 0.008757f, -0.022110f, 0.018923f, -0.019264f, -0.022632f, -0.024155f, -0.000011f, 0.024310f, 0.004496f, 0.019576f, 0.019627f, 0.017061f, -0.017141f, -0.028476f, 0.008654f, -0.019524f, -0.051141f, -0.014291f, 0.010891f, -0.016960f, 0.058496f, -0.060292f, 0.049059f, -0.015077f, -0.000181f, 0.074070f, -0.012061f, -0.001371f, 0.095363f, -0.014099f, -0.039558f, 0.007671f, -0.033964f, -0.006979f, -0.032088f, 0.107421f, -0.030717f, 0.026364f, -0.026160f, -0.010919f, -0.015128f, 0.018322f, -0.027360f, -0.064907f, 0.028437f, -0.006949f, -0.073095f, 0.038566f, -0.019483f, 0.040988f, 0.090794f, -0.045168f, -0.001409f, -0.004148f, -0.013913f, -0.048648f, -0.008980f, 0.045580f, 0.017694f, 0.028173f, -0.041773f, 0.012818f, 0.007009f, -0.039491f, -0.011221f, 0.009440f, 0.020278f, 0.026205f, 0.001826f, 0.005429f, 0.016488f, -0.003489f, -0.020171f, 0.029475f, -0.011677f, -0.008269f, 0.026120f, 0.004070f, -0.007489f, 0.039765f, -0.002831f, -0.002483f, 0.000135f, 0.013311f, -0.011969f, 0.020306f, -0.015469f, -0.007184f, -0.012246f, 0.010792f, -0.000469f, -0.000970f, 0.005571f, 0.018696f, + -0.021790f, 0.005167f, -0.003014f, 0.013542f, 0.003808f, -0.003720f, 0.022304f, -0.013180f, 0.012016f, -0.003406f, 0.006578f, 0.001996f, 0.016725f, -0.001991f, -0.025612f, -0.000347f, 0.122883f, 0.061808f, 0.128911f, -0.072250f, -0.018217f, 0.042115f, -0.039728f, 0.030414f, 0.132617f, 0.031075f, 0.019581f, -0.035111f, -0.032391f, 0.037651f, -0.019544f, 0.053341f, -0.008304f, -0.012415f, -0.015042f, -0.076138f, 0.018799f, 0.091200f, -0.047744f, 0.055102f, 0.048708f, -0.031058f, -0.008789f, 0.037892f, -0.060171f, 0.030177f, -0.003757f, 0.045684f, 0.016058f, -0.038076f, -0.011678f, -0.076489f, -0.038618f, 0.035730f, 0.027520f, 0.059287f, 0.093216f, 0.009813f, 0.002056f, -0.080291f, -0.048424f, -0.047970f, -0.038852f, 0.020942f, -0.032124f, -0.009422f, -0.006906f, 0.023970f, -0.060658f, -0.009945f, 0.032354f, 0.016332f, 0.051151f, -0.006806f, -0.023562f, 0.050218f, -0.008464f, 0.030771f, -0.038055f, -0.023389f, -0.005338f, -0.012950f, 0.025305f, 0.036546f, 0.052347f, 0.014585f, 0.004926f, -0.035707f, -0.009378f, -0.018329f, 0.043959f, 0.000474f, 0.065546f, 0.011275f, 0.049544f, -0.047521f, + -0.016348f, -0.000331f, -0.000471f, 0.035386f, -0.004930f, -0.017580f, -0.008868f, 0.008704f, 0.003159f, 0.009217f, 0.017070f, 0.014648f, -0.008271f, -0.010560f, 0.001394f, -0.006232f, 0.014519f, 0.014764f, 0.004183f, -0.012298f, 0.001272f, -0.016131f, -0.006037f, -0.003505f, 0.028627f, 0.010034f, -0.002891f, 0.007308f, -0.017907f, -0.021992f, -0.014153f, 0.007037f, 0.016068f, -0.013073f, -0.000530f, 0.000293f, 0.012187f, 0.006412f, -0.000965f, 0.012235f, 0.002693f, -0.000547f, -0.011216f, 0.005848f, 0.004318f, -0.004815f, 0.002051f, 0.003756f, -0.016619f, -0.033011f, -0.126440f, 0.003932f, 0.201732f, 0.183187f, 0.171009f, 0.073408f, -0.073569f, -0.100412f, -0.100873f, -0.088956f, -0.165167f, -0.116821f, -0.115164f, 0.089210f, 0.135423f, 0.111646f, 0.176449f, 0.147971f, 0.030614f, -0.006220f, -0.064016f, -0.122841f, -0.074329f, -0.129111f, -0.071099f, -0.042812f, 0.000065f, -0.016730f, 0.031916f, 0.056292f, 0.094001f, 0.060142f, 0.098798f, 0.076285f, 0.078371f, 0.006738f, -0.065666f, -0.029038f, 0.001644f, -0.070475f, -0.094482f, -0.121476f, -0.120605f, -0.084533f, -0.012595f, 0.060140f, + 0.022928f, 0.087233f, 0.060696f, 0.099410f, 0.087401f, 0.096411f, 0.110581f, 0.060396f, -0.009143f, -0.017386f, -0.073197f, -0.058847f, -0.196616f, -0.156243f, -0.126271f, -0.097661f, 0.010842f, -0.042318f, 0.002186f, 0.134445f, 0.164743f, 0.226764f, 0.142452f, 0.086558f, 0.057925f, 0.014219f, -0.087263f, -0.078880f, -0.121420f, -0.155648f, -0.132899f, -0.122862f, -0.058514f, 0.009421f, 0.061934f, 0.103339f, 0.100925f, 0.086939f, 0.053895f, 0.058524f, 0.024305f, 0.016158f, -0.003396f, -0.047465f, -0.042414f, -0.037661f, -0.043148f, -0.022118f, -0.048154f, -0.033486f, 0.011174f, 0.004598f, -0.028244f, 0.015557f, 0.038588f, 0.022790f, 0.044112f, 0.070215f, 0.071904f, 0.032517f, -0.045405f, -0.018853f, -0.006863f, -0.090888f, -0.097018f, -0.083565f, -0.035680f, 0.026627f, 0.040715f, 0.034974f, 0.057331f, 0.066018f, 0.080225f, 0.054141f, 0.032483f, -0.011849f, -0.054733f, -0.054525f, -0.061914f, -0.082062f, -0.059204f, -0.032004f, 0.027674f, 0.045372f, 0.028503f, 0.018180f, 0.051826f, 0.035905f, 0.020974f, 0.005514f, -0.008307f, -0.016183f, 0.001229f, -0.019537f, -0.024365f, -0.008240f, + 0.007601f, -0.013362f, -0.010867f, 0.002800f, 0.010384f, 0.001938f, -0.005716f, -0.006624f, 0.007725f, 0.000528f, -0.004535f, -0.007924f, 0.002537f, 0.011730f, 0.013755f, 0.002511f, 0.011811f, 0.011176f, 0.005682f, -0.003101f, -0.002882f, -0.009451f, -0.009147f, -0.013993f, -0.007856f, -0.009087f, -0.002446f, 0.001209f, 0.002521f, -0.000868f, 0.005543f, 0.007114f, 0.010682f, -0.002811f, -0.001262f, 0.003656f, 0.005509f, -0.004479f, -0.000405f, -0.001436f, 0.000678f, 0.002453f, 0.007956f, -0.000512f, 0.002495f, 0.001437f, 0.001779f, -0.004919f, -0.007205f, -0.012320f, -0.007593f, -0.009847f, -0.007311f, -0.007932f, 0.002379f, 0.006343f, 0.011853f, 0.012284f, 0.018766f, 0.014764f, 0.013207f, 0.005101f, 0.000855f, -0.009228f, -0.011869f, -0.017329f, -0.015035f, -0.016476f, -0.009521f, -0.005777f, 0.001562f, 0.003521f, 0.011837f, 0.010048f, 0.012976f, 0.010339f, 0.009750f, 0.001793f, 0.001690f, -0.003649f, -0.003577f, -0.008131f, -0.004818f, -0.005933f, -0.001545f, -0.003625f, 0.000224f, -0.001583f, 0.002120f, -0.000452f, 0.002556f, -0.000484f, 0.002217f, -0.000740f, 0.002009f, -0.001098f, + 0.001566f}, + {0.001985f, -0.002290f, 0.008216f, 0.009365f, 0.004937f, -0.003540f, -0.014118f, -0.012836f, 0.004614f, 0.007461f, -0.002794f, 0.013881f, -0.002738f, 0.008305f, -0.009881f, -0.008602f, 0.003715f, 0.000401f, -0.002611f, 0.003712f, 0.008901f, -0.003843f, 0.001182f, -0.005065f, -0.000574f, 0.000536f, 0.003611f, 0.003478f, 0.004541f, 0.000822f, 0.002679f, 0.010297f, -0.004013f, -0.004732f, -0.005233f, -0.009216f, 0.002607f, -0.001891f, 0.016904f, 0.003358f, -0.001339f, 0.001396f, 0.010232f, -0.000890f, -0.002305f, -0.002564f, -0.006098f, -0.001046f, 0.007854f, -0.001155f, 0.003222f, 0.008066f, -0.002573f, -0.000513f, -0.012934f, -0.007504f, -0.011800f, -0.002234f, -0.003470f, 0.001797f, 0.000581f, 0.001756f, 0.004128f, -0.002751f, 0.001964f, 0.000195f, 0.000978f, 0.001854f, -0.004344f, 0.004118f, -0.001447f, -0.004815f, -0.000679f, -0.004856f, -0.001559f, 0.000526f, -0.007730f, 0.002099f, 0.000289f, 0.005980f, 0.000562f, -0.000036f, -0.003583f, 0.000859f, 0.005835f, 0.002950f, -0.001526f, 0.000724f, 0.001253f, 0.001503f, 0.004438f, 0.000607f, 0.000223f, -0.001017f, -0.000734f, 0.000522f, + 0.000121f, -0.000391f, 0.002912f, 0.001689f, 0.001707f, 0.001326f, 0.000870f, 0.000453f, 0.000841f, 0.001665f, 0.009557f, 0.022539f, 0.008903f, 0.005333f, 0.006266f, -0.013245f, -0.001553f, 0.005716f, -0.001791f, 0.002236f, -0.012081f, 0.011881f, 0.016097f, 0.002776f, 0.007193f, -0.003389f, -0.009424f, -0.014605f, -0.015988f, -0.010632f, 0.012680f, -0.011965f, -0.007599f, -0.010126f, 0.003252f, 0.008422f, 0.001596f, 0.001142f, 0.004713f, -0.000477f, 0.002980f, 0.010379f, -0.001452f, 0.008629f, -0.008213f, 0.007873f, 0.005484f, 0.005006f, -0.004324f, -0.013423f, -0.002851f, 0.007686f, 0.004558f, -0.003752f, -0.000443f, 0.002659f, -0.000561f, -0.006477f, -0.001351f, 0.005492f, -0.001877f, 0.000609f, -0.003192f, -0.000710f, 0.000407f, 0.001835f, 0.009488f, 0.003964f, -0.004850f, 0.000819f, 0.000793f, -0.003220f, 0.001738f, -0.004689f, -0.000540f, 0.007689f, 0.002512f, 0.008627f, -0.006154f, -0.005291f, -0.003155f, -0.001365f, 0.004402f, 0.009780f, -0.005632f, -0.007078f, 0.008430f, -0.000792f, -0.000152f, 0.000291f, 0.002916f, 0.002080f, 0.007087f, -0.001993f, 0.003310f, -0.004316f, + -0.004029f, 0.000317f, 0.001925f, -0.000299f, 0.000156f, 0.001625f, 0.001783f, 0.001380f, -0.003674f, 0.004124f, -0.000871f, 0.006618f, 0.002800f, -0.007406f, -0.006999f, -0.007937f, -0.001249f, -0.006477f, -0.013667f, -0.013005f, 0.013435f, -0.000283f, 0.002829f, -0.000089f, 0.008184f, -0.012095f, 0.017989f, 0.015987f, 0.000828f, 0.000864f, 0.000025f, 0.000487f, -0.001776f, 0.006268f, 0.004868f, 0.000408f, -0.010238f, 0.004450f, -0.003176f, 0.004936f, -0.001426f, 0.010923f, -0.002541f, -0.006337f, -0.002876f, -0.001700f, 0.004044f, -0.000056f, 0.006747f, -0.010819f, 0.005842f, 0.001902f, -0.006011f, 0.017059f, -0.002707f, -0.002428f, -0.000357f, -0.000254f, -0.004493f, -0.001439f, 0.009100f, 0.007461f, -0.015976f, -0.007524f, 0.008124f, 0.002352f, -0.003820f, 0.013914f, 0.000510f, 0.003129f, 0.013688f, 0.005665f, 0.010747f, 0.003049f, -0.004125f, -0.005568f, -0.010750f, -0.010405f, 0.001516f, 0.005557f, 0.013321f, 0.000520f, -0.005429f, -0.006784f, 0.002320f, -0.000112f, -0.003719f, 0.004335f, -0.001500f, -0.003406f, 0.003119f, 0.007231f, 0.002342f, -0.003608f, 0.003621f, 0.003772f, + 0.004717f, 0.003037f, 0.000242f, 0.000462f, -0.004470f, -0.000929f, -0.000059f, 0.002304f, 0.001935f, 0.003689f, 0.003559f, 0.002966f, 0.001125f, -0.000279f, -0.018242f, -0.006347f, -0.008879f, 0.008290f, -0.006067f, 0.005388f, -0.006559f, -0.002700f, 0.015456f, 0.007568f, -0.010272f, 0.004692f, 0.014742f, 0.002172f, -0.005178f, -0.010347f, -0.012450f, -0.008520f, -0.012518f, 0.008317f, 0.001882f, 0.004583f, -0.002410f, -0.005651f, -0.005982f, -0.011009f, 0.000565f, -0.000329f, 0.002610f, -0.002674f, -0.010032f, 0.000177f, 0.010698f, -0.002358f, 0.000115f, -0.005320f, -0.010684f, -0.015782f, -0.001369f, 0.011401f, 0.004129f, 0.001215f, -0.005366f, 0.001475f, -0.008581f, -0.002789f, -0.006458f, 0.000840f, 0.001448f, -0.009741f, 0.011010f, -0.006184f, 0.014011f, 0.005325f, 0.001323f, -0.006349f, -0.003353f, 0.003626f, -0.000813f, 0.003433f, 0.007518f, 0.001554f, 0.002976f, -0.008307f, 0.004910f, -0.004162f, 0.012880f, 0.015990f, 0.007314f, 0.010756f, 0.004986f, -0.001609f, -0.011207f, -0.007202f, 0.000915f, 0.008282f, 0.008309f, -0.006623f, 0.000864f, 0.007874f, -0.010265f, 0.010161f, + 0.000641f, -0.005162f, 0.003330f, -0.002146f, -0.000499f, -0.005743f, 0.001126f, 0.001675f, 0.000989f, -0.004599f, 0.001220f, -0.003238f, -0.004359f, -0.001479f, 0.000300f, 0.001962f, -0.002847f, 0.000744f, -0.001239f, -0.003990f, 0.000424f, 0.003369f, 0.001386f, -0.002842f, 0.001861f, -0.002126f, 0.006109f, -0.014725f, 0.001938f, -0.015747f, -0.000066f, 0.002407f, 0.001466f, 0.007094f, 0.000712f, 0.001120f, 0.027844f, -0.003499f, -0.012302f, -0.013272f, 0.013982f, 0.009362f, -0.010558f, 0.002542f, -0.011776f, -0.005054f, 0.000385f, 0.013308f, -0.016523f, 0.004803f, -0.000656f, 0.002620f, -0.001273f, 0.016896f, -0.008759f, 0.004754f, -0.002661f, -0.004492f, 0.002554f, -0.000828f, 0.005052f, -0.005192f, -0.004823f, -0.014326f, 0.002224f, -0.004771f, -0.003101f, 0.001114f, -0.005089f, 0.004200f, -0.008095f, -0.004825f, -0.014227f, -0.000450f, -0.012635f, -0.005345f, -0.015024f, 0.011121f, 0.002236f, -0.004623f, 0.009769f, -0.011389f, -0.000086f, -0.021680f, -0.001195f, 0.007463f, -0.000621f, 0.006395f, 0.013750f, -0.004862f, -0.001971f, 0.017219f, 0.007245f, 0.006633f, 0.010497f, -0.005474f, + -0.015971f, -0.001715f, -0.009576f, 0.006940f, 0.015844f, -0.002883f, 0.004624f, 0.008427f, 0.007078f, -0.000869f, -0.001369f, 0.001943f, 0.000270f, -0.002960f, 0.004243f, 0.003810f, -0.006646f, 0.002177f, 0.005551f, -0.002829f, -0.002049f, -0.009844f, -0.002312f, -0.004155f, -0.001391f, -0.004310f, 0.000832f, -0.001062f, 0.000738f, -0.000464f, 0.000638f, 0.002514f, -0.002924f, 0.001005f, -0.001219f, -0.002972f, -0.000427f, -0.000523f, -0.000926f, 0.000199f, 0.001654f, 0.002766f, -0.002773f, 0.000943f, -0.002352f, 0.000392f, -0.000300f, -0.003104f, -0.001254f, -0.002375f, -0.000471f, -0.003763f, 0.000886f, 0.000184f, -0.002150f, 0.008012f, 0.008752f, 0.003364f, -0.005498f, 0.003996f, 0.002195f, 0.017085f, -0.002707f, -0.003494f, -0.022976f, -0.006313f, 0.017059f, 0.016922f, 0.010670f, 0.008649f, 0.024338f, 0.001656f, -0.029325f, -0.007344f, -0.004984f, -0.006930f, 0.015456f, -0.002324f, -0.005779f, 0.018299f, 0.002723f, -0.007340f, -0.002711f, 0.007394f, -0.006557f, -0.002399f, 0.002104f, -0.002173f, -0.010286f, -0.004467f, -0.000589f, -0.009685f, -0.004616f, -0.003981f, 0.006755f, -0.004467f, + 0.013116f, 0.013007f, 0.001142f, 0.012380f, 0.008473f, -0.005371f, -0.001987f, -0.004039f, -0.019088f, 0.002290f, 0.003818f, -0.017903f, -0.002694f, -0.004962f, 0.006368f, 0.016660f, 0.002415f, -0.016575f, 0.002363f, -0.006290f, -0.011372f, 0.009295f, -0.002731f, -0.011823f, 0.005347f, 0.004780f, 0.013162f, -0.000891f, -0.001725f, 0.009929f, 0.011461f, 0.012864f, -0.013112f, 0.009374f, -0.001739f, -0.002041f, 0.003355f, 0.013877f, -0.000681f, -0.003484f, 0.004273f, 0.002264f, -0.011681f, -0.001357f, 0.015903f, 0.003699f, -0.001076f, -0.001823f, -0.007252f, 0.005322f, -0.002689f, -0.003094f, 0.000505f, -0.000290f, 0.003660f, -0.000059f, -0.004982f, -0.003368f, 0.006626f, -0.000639f, 0.002606f, -0.002812f, 0.003204f, -0.002288f, -0.001858f, -0.002260f, 0.001673f, 0.003740f, -0.001743f, 0.011708f, -0.029928f, 0.012483f, -0.003302f, -0.006766f, -0.006178f, 0.005180f, -0.002875f, -0.017666f, -0.018910f, 0.002362f, 0.029409f, 0.008173f, -0.021451f, 0.004895f, 0.017441f, -0.012505f, 0.002240f, -0.003110f, 0.010391f, -0.000002f, 0.009589f, 0.025822f, 0.018733f, 0.011779f, -0.000459f, -0.002058f, + -0.011925f, -0.012682f, 0.005058f, -0.033293f, -0.005293f, 0.015893f, 0.001755f, -0.001610f, -0.015995f, -0.005619f, -0.000693f, -0.000645f, -0.007777f, -0.016442f, 0.018507f, -0.006317f, -0.004068f, -0.002902f, -0.015315f, -0.017133f, -0.000547f, -0.008316f, 0.001192f, 0.008284f, 0.006273f, 0.007025f, -0.013667f, -0.003461f, -0.006714f, -0.004182f, 0.021981f, -0.002228f, -0.010033f, 0.000798f, 0.028191f, -0.014946f, 0.004743f, 0.020842f, 0.000653f, -0.004670f, -0.010451f, 0.006410f, 0.001207f, 0.015040f, -0.008027f, 0.012743f, 0.010276f, 0.019673f, 0.009489f, 0.014761f, 0.001570f, -0.009499f, 0.002082f, -0.000293f, -0.005518f, 0.008963f, 0.012637f, -0.010360f, 0.006910f, 0.003880f, -0.009384f, 0.001342f, 0.003370f, 0.002746f, 0.003450f, -0.005268f, 0.003084f, -0.005783f, -0.001744f, -0.001519f, 0.000449f, 0.001215f, 0.002573f, 0.003336f, -0.000627f, 0.004944f, -0.000318f, -0.002040f, 0.001717f, 0.003331f, -0.001044f, 0.002069f, -0.004987f, 0.002119f, -0.001590f, 0.003302f, -0.003658f, 0.017256f, 0.024580f, 0.015137f, 0.002436f, -0.005220f, -0.009308f, -0.020411f, -0.006008f, 0.013578f, + -0.027939f, -0.011366f, 0.025298f, -0.035105f, -0.006446f, 0.019718f, 0.024606f, -0.002482f, -0.024878f, 0.003487f, -0.009573f, 0.033212f, 0.014616f, -0.022731f, -0.014753f, -0.003458f, -0.014148f, -0.028622f, -0.014438f, -0.012677f, -0.010472f, -0.023173f, 0.011582f, 0.004163f, 0.014240f, -0.008798f, -0.004385f, -0.020382f, -0.002193f, -0.017681f, 0.001743f, -0.011741f, 0.002505f, 0.006233f, -0.027465f, -0.008948f, -0.010522f, -0.007227f, 0.005789f, 0.005876f, -0.008843f, 0.027005f, -0.001858f, -0.007019f, -0.005170f, 0.002638f, -0.006444f, -0.002195f, 0.009923f, 0.008582f, 0.011121f, 0.014832f, 0.013931f, 0.001143f, 0.009097f, -0.004463f, 0.020926f, 0.022538f, -0.011436f, -0.005859f, 0.013697f, -0.000368f, -0.034256f, 0.001599f, -0.017455f, 0.010611f, 0.010678f, 0.019332f, -0.014766f, 0.008244f, -0.020673f, -0.001973f, 0.011626f, -0.004994f, 0.018226f, -0.004756f, -0.002355f, 0.003708f, 0.001084f, 0.002598f, -0.001335f, 0.001103f, 0.007682f, -0.005761f, -0.001598f, 0.007522f, -0.001275f, 0.005911f, -0.008898f, -0.007609f, 0.005046f, -0.001206f, 0.001500f, 0.000837f, -0.001166f, 0.001372f, + -0.005370f, -0.001353f, -0.001031f, -0.002265f, -0.003668f, -0.001215f, 0.002671f, 0.003368f, -0.000283f, -0.003546f, -0.019057f, -0.022769f, -0.011346f, -0.021991f, -0.031698f, 0.022473f, 0.002085f, 0.012637f, -0.017572f, -0.018017f, -0.025160f, -0.016798f, 0.007610f, -0.018427f, -0.016794f, 0.022858f, -0.005804f, 0.001215f, 0.005378f, 0.013124f, -0.010202f, -0.007503f, 0.003636f, -0.005977f, 0.003440f, -0.001002f, -0.011321f, -0.021308f, -0.033703f, 0.011257f, -0.024236f, -0.021972f, 0.001062f, -0.005676f, -0.001651f, -0.012297f, 0.005533f, 0.006563f, -0.027484f, -0.000438f, -0.006109f, -0.010559f, -0.015320f, 0.008821f, 0.001761f, 0.027536f, 0.003175f, -0.015193f, -0.001042f, 0.002711f, 0.011204f, 0.004896f, 0.024188f, -0.001913f, -0.026494f, 0.011478f, -0.005684f, 0.012105f, -0.015871f, 0.003621f, 0.008886f, -0.046521f, -0.022257f, 0.016691f, -0.001506f, -0.004829f, 0.007103f, -0.002190f, 0.029424f, -0.000849f, 0.018612f, 0.016422f, -0.023970f, -0.027550f, 0.001553f, -0.030539f, -0.000767f, -0.001318f, 0.000565f, 0.004670f, 0.019208f, -0.000470f, -0.012152f, 0.011252f, 0.014444f, -0.013319f, + 0.002326f, 0.004572f, 0.014534f, -0.006910f, 0.000467f, -0.007007f, 0.004889f, -0.000176f, 0.003048f, 0.005076f, 0.007818f, 0.008182f, -0.000277f, -0.007407f, 0.000308f, 0.005891f, 0.001744f, 0.001427f, -0.007009f, 0.001005f, -0.007018f, -0.000777f, 0.003762f, -0.000871f, 0.006849f, 0.005359f, -0.000312f, 0.001714f, 0.005548f, -0.004899f, 0.009798f, 0.000066f, -0.004311f, 0.004680f, 0.016118f, 0.065309f, -0.016027f, -0.044110f, -0.003845f, -0.019381f, 0.047656f, 0.003519f, 0.026722f, 0.014238f, -0.008227f, -0.021217f, -0.009380f, -0.023107f, -0.005844f, 0.031853f, -0.035635f, 0.001331f, -0.029067f, 0.007718f, 0.002466f, 0.014030f, 0.003331f, -0.014161f, -0.023560f, -0.027705f, -0.005070f, -0.027188f, -0.021096f, 0.003246f, 0.006313f, 0.019849f, -0.018740f, -0.039344f, -0.008174f, -0.013811f, 0.004715f, -0.018625f, -0.012410f, 0.005404f, -0.009779f, -0.015807f, -0.001051f, 0.001453f, -0.007953f, 0.037875f, -0.007813f, -0.006514f, 0.009632f, 0.009699f, -0.011315f, -0.005075f, 0.028206f, 0.023388f, 0.015525f, 0.029476f, 0.023294f, -0.000235f, 0.009751f, 0.016614f, -0.012578f, -0.012110f, + 0.003464f, 0.011881f, 0.019781f, 0.007810f, 0.040149f, 0.004094f, 0.026917f, -0.007950f, -0.015561f, -0.010342f, 0.056976f, 0.009798f, -0.007410f, -0.007208f, -0.020480f, -0.019924f, -0.014125f, -0.014080f, -0.016405f, 0.006190f, 0.013109f, -0.014318f, 0.004460f, 0.013799f, 0.007008f, -0.013261f, 0.002577f, 0.014070f, -0.003660f, 0.007608f, -0.007264f, -0.002425f, 0.003182f, -0.002857f, -0.001680f, -0.004751f, -0.009281f, -0.001862f, -0.008418f, 0.003991f, 0.006912f, 0.003124f, -0.007042f, 0.008797f, 0.005916f, -0.005576f, -0.006176f, -0.009905f, -0.002908f, -0.003083f, 0.002380f, -0.002546f, 0.004285f, 0.002779f, 0.000703f, -0.001423f, 0.000035f, -0.008041f, 0.003010f, 0.012174f, -0.057127f, -0.021508f, 0.028970f, -0.007074f, -0.029069f, -0.027704f, -0.009033f, 0.030911f, 0.016824f, -0.025276f, 0.014110f, -0.033563f, -0.013436f, -0.004266f, -0.021647f, -0.030185f, 0.025398f, 0.013550f, -0.026410f, -0.009677f, 0.057720f, 0.013057f, -0.025142f, -0.035284f, 0.000977f, 0.018531f, 0.003587f, 0.002915f, -0.039682f, -0.001510f, -0.004125f, -0.029127f, -0.016369f, -0.011962f, -0.022628f, -0.011278f, + 0.007123f, 0.000529f, -0.023906f, -0.024716f, 0.003555f, 0.014910f, 0.000049f, 0.020106f, 0.034779f, -0.024539f, 0.021727f, 0.015635f, 0.007221f, 0.004213f, 0.026331f, 0.007640f, 0.016411f, 0.010235f, 0.014835f, -0.005290f, -0.002659f, 0.029079f, 0.046638f, 0.007184f, -0.010291f, 0.005191f, -0.006191f, -0.017974f, 0.029843f, -0.014854f, -0.024325f, -0.039668f, -0.013016f, -0.046147f, 0.023272f, -0.019126f, -0.007431f, -0.003179f, -0.006120f, -0.016935f, -0.002288f, 0.017641f, -0.020335f, -0.002375f, 0.010040f, -0.006520f, -0.019820f, 0.009621f, 0.002109f, 0.005099f, -0.000898f, -0.002975f, -0.006800f, -0.001371f, -0.003308f, 0.010281f, 0.003310f, 0.002416f, 0.002217f, 0.002956f, 0.000599f, 0.004932f, 0.004202f, 0.009022f, -0.013029f, -0.002198f, 0.001566f, 0.008314f, -0.003239f, 0.006818f, -0.007675f, 0.002172f, 0.002438f, -0.002404f, -0.004045f, 0.007162f, -0.003102f, -0.001278f, 0.004958f, 0.000724f, 0.000896f, -0.011621f, -0.025359f, 0.021566f, 0.012814f, -0.003734f, 0.014289f, 0.010740f, 0.030502f, 0.023639f, -0.049739f, -0.016407f, 0.055184f, -0.043448f, -0.012911f, -0.026288f, + 0.039314f, 0.017613f, 0.018096f, 0.007729f, 0.005731f, 0.015847f, 0.041716f, 0.019966f, -0.018420f, -0.000268f, 0.001353f, -0.001073f, 0.016500f, 0.018678f, 0.002234f, 0.011096f, 0.010488f, -0.009478f, 0.012915f, 0.007876f, 0.025780f, -0.012281f, -0.024827f, -0.021200f, -0.016616f, 0.005026f, -0.002173f, 0.009965f, 0.011177f, 0.011363f, 0.022713f, -0.009845f, 0.004790f, -0.009923f, -0.017719f, -0.007055f, 0.001882f, -0.020298f, 0.026092f, 0.031696f, -0.034308f, 0.011819f, -0.023763f, 0.019538f, -0.003878f, 0.007672f, -0.002598f, -0.018868f, -0.004618f, 0.021976f, -0.017080f, -0.005130f, 0.003879f, -0.034902f, -0.013377f, 0.007471f, -0.027084f, -0.001750f, 0.043370f, 0.021694f, -0.002907f, -0.009790f, 0.034613f, 0.009221f, 0.024934f, -0.007699f, -0.011160f, 0.036259f, -0.012241f, 0.011414f, 0.004831f, 0.005270f, -0.007415f, -0.005309f, -0.006624f, -0.004460f, -0.012128f, -0.007366f, -0.008441f, 0.001359f, 0.007852f, -0.002735f, -0.017035f, -0.005342f, -0.002315f, 0.002075f, -0.000479f, -0.004105f, 0.000122f, 0.004965f, 0.008390f, -0.006507f, -0.000146f, -0.018262f, 0.003179f, -0.002145f, + -0.003412f, 0.012574f, -0.000148f, -0.001044f, -0.007253f, 0.007754f, 0.002171f, 0.011409f, -0.003754f, -0.000500f, -0.007449f, -0.000665f, -0.010761f, 0.034564f, -0.002869f, -0.007989f, -0.028733f, 0.001288f, 0.002679f, -0.007662f, -0.000659f, -0.013261f, 0.004997f, -0.041156f, 0.037572f, -0.007553f, -0.013344f, -0.026028f, -0.029477f, -0.002992f, 0.035852f, -0.006453f, 0.009921f, -0.022116f, -0.012828f, -0.006130f, -0.021601f, -0.025990f, 0.023804f, -0.014654f, -0.012000f, 0.021180f, 0.020524f, -0.028963f, 0.010115f, 0.011054f, 0.025143f, 0.020845f, -0.007582f, -0.018295f, -0.011586f, -0.028148f, 0.031073f, 0.020520f, 0.010325f, 0.022247f, -0.022929f, 0.015805f, -0.003312f, 0.014499f, 0.015982f, -0.014925f, -0.001162f, 0.050663f, 0.042407f, -0.031932f, 0.012862f, 0.026360f, -0.020138f, 0.006364f, -0.047212f, 0.014274f, -0.025525f, 0.021256f, -0.014789f, -0.016210f, -0.011503f, 0.056535f, 0.003275f, -0.016298f, 0.005056f, 0.019109f, 0.002551f, 0.011428f, -0.030335f, -0.003313f, 0.050723f, -0.001511f, -0.019827f, -0.030826f, 0.001029f, -0.022773f, 0.014393f, 0.014777f, 0.017785f, -0.031476f, + -0.032968f, -0.008649f, 0.005650f, 0.011047f, 0.003541f, 0.000354f, 0.000905f, 0.012234f, -0.008011f, -0.003062f, -0.002409f, -0.005133f, 0.006043f, 0.005230f, -0.009999f, -0.006760f, -0.015416f, 0.009704f, -0.005579f, 0.004362f, 0.006922f, 0.010212f, 0.008074f, 0.003652f, 0.015730f, 0.001216f, -0.003503f, 0.007700f, -0.011456f, 0.006709f, 0.004632f, 0.003411f, 0.010471f, 0.011307f, 0.002199f, -0.001288f, 0.006678f, 0.000995f, -0.000844f, -0.011950f, -0.015836f, -0.002769f, -0.001069f, -0.001720f, -0.031016f, -0.001307f, -0.003535f, -0.005430f, 0.009542f, -0.045732f, -0.020519f, -0.025817f, 0.021852f, -0.011190f, 0.032297f, 0.018973f, 0.040998f, -0.020516f, -0.001238f, -0.032211f, 0.027483f, 0.048858f, -0.014893f, -0.039452f, 0.004278f, -0.008338f, 0.060853f, -0.015221f, -0.023245f, 0.022688f, 0.013147f, 0.009308f, 0.023210f, 0.007418f, -0.075458f, -0.000044f, -0.004631f, 0.029334f, 0.053796f, -0.050688f, 0.002466f, 0.014804f, -0.023691f, -0.005201f, -0.068363f, -0.015885f, 0.035588f, -0.056952f, -0.033420f, -0.017685f, -0.021681f, 0.022295f, -0.013234f, -0.020479f, 0.030834f, 0.008935f, + 0.011562f, 0.030991f, 0.003946f, -0.011051f, 0.022760f, 0.032536f, -0.031419f, -0.024075f, 0.049346f, 0.033300f, 0.011850f, 0.015235f, 0.012061f, -0.022258f, -0.031210f, -0.000316f, 0.000950f, -0.006801f, 0.010532f, -0.019485f, 0.014176f, -0.026878f, 0.011335f, 0.061832f, -0.028361f, -0.024153f, 0.034707f, 0.009575f, -0.011076f, 0.021344f, 0.030580f, 0.022049f, 0.027094f, 0.012881f, -0.012915f, 0.010682f, -0.032167f, 0.017242f, 0.008000f, 0.008993f, -0.016029f, -0.005221f, 0.004068f, -0.001805f, -0.002723f, -0.005244f, 0.011350f, 0.020779f, -0.007612f, -0.020576f, 0.013503f, 0.024072f, 0.013323f, 0.009313f, -0.028182f, 0.017190f, 0.002502f, 0.009185f, -0.003984f, -0.010118f, -0.001661f, 0.014452f, 0.001987f, -0.002974f, -0.011778f, -0.001279f, -0.006590f, -0.003838f, -0.005080f, 0.006285f, 0.014568f, -0.008621f, 0.001226f, 0.008509f, -0.002752f, -0.001792f, -0.006904f, 0.001118f, -0.004393f, -0.005939f, 0.013122f, 0.004413f, 0.018050f, 0.016220f, 0.026555f, -0.061502f, -0.113470f, -0.052375f, -0.007948f, 0.038551f, 0.002733f, 0.042511f, 0.039337f, -0.011998f, 0.006355f, -0.009745f, + -0.021616f, -0.035600f, -0.020694f, -0.025740f, -0.014951f, 0.040333f, -0.052661f, -0.009288f, -0.043911f, -0.054525f, -0.009605f, -0.055036f, -0.044245f, 0.005234f, -0.011655f, -0.006514f, 0.009870f, 0.047966f, 0.003236f, -0.035146f, 0.001856f, -0.004402f, -0.010662f, -0.045599f, -0.003133f, 0.053866f, 0.004835f, -0.001161f, 0.021737f, 0.041776f, 0.028098f, 0.007093f, -0.017317f, 0.014387f, -0.014590f, -0.038794f, -0.070863f, 0.066909f, -0.008743f, 0.055681f, -0.004962f, 0.000441f, -0.020376f, -0.032657f, 0.058734f, -0.033853f, -0.027529f, -0.003165f, -0.043291f, -0.040737f, 0.033276f, 0.024280f, 0.012605f, -0.004649f, 0.016775f, -0.030199f, 0.011259f, -0.024587f, -0.034531f, -0.037686f, -0.029459f, -0.012392f, 0.028512f, 0.001430f, 0.009987f, -0.017673f, 0.009820f, -0.023003f, 0.016025f, 0.012340f, 0.011281f, -0.007800f, -0.001384f, 0.014103f, -0.004417f, -0.018077f, -0.013755f, -0.017908f, -0.001989f, -0.013350f, -0.003475f, -0.005012f, -0.005197f, 0.004647f, 0.001590f, -0.007430f, 0.002453f, 0.008642f, -0.002959f, -0.006346f, -0.014220f, -0.000637f, -0.009960f, -0.001825f, -0.002110f, -0.007035f, + 0.015350f, -0.015531f, -0.014647f, -0.007188f, 0.007842f, -0.013831f, -0.013994f, 0.001330f, -0.011818f, -0.000669f, -0.002658f, 0.005651f, -0.002139f, 0.001496f, -0.009708f, 0.003027f, -0.019388f, -0.010038f, -0.003547f, -0.040088f, 0.008377f, -0.009568f, -0.029624f, -0.042997f, -0.001222f, -0.041105f, -0.049372f, -0.007491f, -0.022990f, -0.052650f, -0.074694f, 0.009082f, -0.028771f, 0.014326f, -0.006147f, 0.028396f, 0.061425f, 0.003822f, 0.005609f, -0.030922f, -0.034646f, 0.028797f, 0.014875f, -0.022234f, -0.000735f, 0.018987f, -0.042974f, -0.031775f, -0.003142f, 0.054034f, -0.046813f, 0.001198f, 0.000223f, 0.025174f, -0.040127f, 0.041462f, 0.020585f, 0.012140f, -0.001966f, -0.016498f, -0.046450f, 0.000062f, -0.011811f, 0.016984f, -0.025636f, -0.059934f, 0.048874f, -0.035925f, -0.017168f, -0.002063f, 0.047791f, -0.036600f, 0.016147f, -0.029993f, 0.017911f, -0.010588f, -0.045783f, 0.021868f, -0.058077f, -0.012188f, -0.017370f, 0.020354f, 0.045821f, -0.026692f, 0.016335f, 0.047810f, -0.038983f, 0.006635f, 0.010447f, 0.011498f, 0.012998f, -0.068858f, -0.021745f, -0.011389f, 0.023876f, 0.005546f, + -0.001153f, 0.012936f, -0.013216f, 0.027901f, -0.006094f, 0.006556f, -0.027677f, 0.023300f, 0.004845f, -0.042420f, -0.020543f, 0.020305f, 0.024051f, -0.003359f, -0.007490f, -0.016503f, 0.022451f, 0.003137f, -0.000720f, -0.044221f, 0.006126f, -0.021217f, -0.034713f, -0.010054f, -0.007898f, -0.004238f, -0.020903f, -0.025386f, 0.008002f, -0.005814f, -0.013681f, 0.007350f, -0.003726f, -0.003643f, 0.000311f, -0.006834f, 0.001238f, 0.013692f, -0.027070f, 0.002547f, 0.003664f, -0.008614f, 0.017432f, 0.017255f, 0.018532f, 0.007799f, 0.010683f, -0.012626f, 0.003920f, 0.000448f, 0.004394f, -0.005891f, -0.001037f, -0.000638f, 0.006959f, -0.005324f, -0.012896f, 0.010898f, 0.080942f, 0.008477f, 0.034069f, 0.093264f, -0.043731f, -0.024241f, -0.036687f, -0.013395f, 0.042637f, 0.003013f, 0.052564f, 0.014391f, -0.002184f, -0.019529f, 0.039641f, -0.024696f, 0.008789f, -0.016446f, 0.016183f, -0.026181f, 0.030118f, -0.014639f, -0.007422f, -0.017215f, 0.023072f, 0.016201f, -0.026098f, -0.005967f, 0.024299f, 0.007606f, -0.016887f, 0.001809f, -0.021625f, -0.069753f, 0.029956f, -0.036578f, -0.054136f, 0.033380f, + 0.014344f, 0.036087f, -0.003770f, -0.034864f, -0.013497f, -0.009235f, 0.020460f, 0.028030f, 0.030593f, 0.051876f, 0.050617f, -0.022518f, 0.006606f, -0.053904f, 0.000107f, -0.039218f, -0.070746f, -0.006797f, -0.057768f, 0.018711f, -0.046233f, -0.030018f, -0.030782f, -0.042816f, 0.003776f, -0.010066f, 0.003132f, -0.012668f, -0.005911f, -0.003639f, -0.074834f, 0.011983f, 0.010796f, 0.017069f, 0.035178f, -0.006634f, -0.059618f, 0.034339f, -0.038800f, 0.022233f, 0.021291f, 0.048387f, -0.026737f, -0.023889f, -0.016415f, -0.009252f, -0.034858f, 0.013897f, 0.007381f, 0.004492f, -0.008765f, 0.012305f, -0.017684f, 0.017564f, -0.003410f, 0.003787f, 0.004605f, -0.021015f, -0.000664f, 0.008495f, 0.020434f, -0.005316f, -0.013192f, 0.009420f, 0.013981f, 0.018206f, -0.011803f, 0.000355f, 0.009511f, -0.000988f, -0.002501f, -0.006442f, -0.013912f, 0.009672f, -0.000815f, 0.006272f, -0.008020f, -0.000783f, 0.011706f, -0.007873f, -0.013117f, -0.006948f, 0.001417f, -0.005087f, -0.022623f, 0.035769f, -0.009577f, -0.007040f, 0.002521f, 0.007073f, -0.006493f, 0.006809f, 0.007961f, -0.003200f, -0.001213f, -0.004547f, + -0.007477f, 0.058347f, 0.108221f, -0.059289f, -0.048500f, -0.083838f, -0.171412f, -0.042063f, -0.018296f, 0.038470f, 0.022722f, -0.014571f, -0.033402f, 0.046953f, 0.056715f, 0.005155f, -0.003172f, 0.000523f, -0.045543f, -0.026420f, -0.032430f, -0.024397f, -0.048166f, -0.000476f, -0.012500f, -0.005602f, 0.032299f, -0.044672f, 0.035469f, 0.033852f, -0.010984f, 0.017493f, -0.002443f, -0.079637f, -0.057316f, -0.031595f, -0.029544f, -0.013267f, 0.005802f, 0.030854f, 0.009460f, 0.016627f, 0.076511f, 0.070130f, 0.015339f, -0.051962f, -0.027605f, -0.002198f, -0.027297f, -0.049288f, -0.123718f, -0.103454f, -0.047118f, -0.011054f, 0.004516f, 0.026999f, -0.086018f, -0.049207f, 0.043726f, 0.051433f, 0.061137f, -0.056249f, -0.068903f, 0.022261f, -0.042276f, 0.101357f, -0.051722f, -0.005833f, -0.030700f, -0.016281f, 0.013367f, 0.029967f, -0.015597f, -0.040086f, 0.036560f, 0.036062f, -0.008838f, 0.041306f, 0.036074f, -0.080337f, 0.071166f, -0.046609f, -0.000467f, -0.013762f, -0.048700f, -0.013541f, 0.023595f, 0.018040f, -0.004626f, 0.009300f, -0.030009f, 0.000579f, 0.013968f, 0.019752f, 0.030568f, -0.023645f, + 0.003986f, -0.006854f, -0.013566f, -0.033455f, -0.004894f, -0.032246f, 0.027491f, -0.005390f, -0.034945f, 0.005254f, -0.039923f, -0.002812f, 0.003843f, -0.009283f, -0.017790f, 0.000928f, 0.002221f, 0.003852f, 0.011819f, -0.002673f, -0.001553f, 0.022520f, 0.006457f, -0.023284f, -0.027360f, 0.006878f, -0.018513f, -0.037516f, -0.013824f, -0.035332f, 0.010416f, 0.010689f, 0.026364f, 0.003715f, -0.028289f, -0.020331f, 0.020130f, 0.102042f, -0.033976f, 0.032901f, -0.001393f, -0.045409f, 0.007059f, -0.091682f, -0.020602f, 0.019738f, 0.001860f, -0.053344f, 0.031659f, 0.093525f, 0.065646f, -0.028880f, -0.058465f, -0.024871f, 0.006657f, 0.098300f, 0.013297f, 0.002550f, 0.000461f, 0.045504f, 0.046792f, 0.012301f, 0.035800f, 0.029057f, 0.055001f, -0.015537f, 0.006371f, 0.035196f, -0.031907f, -0.048604f, 0.027484f, 0.080741f, 0.017580f, 0.039209f, 0.003859f, 0.024139f, -0.107780f, 0.020136f, -0.004099f, 0.024548f, 0.105900f, 0.042873f, 0.014426f, -0.010306f, 0.047531f, -0.010619f, -0.022103f, 0.016973f, 0.029588f, 0.062489f, -0.019939f, 0.038938f, 0.007179f, 0.010990f, 0.024629f, 0.031770f, + -0.000850f, -0.040952f, -0.025456f, 0.009933f, 0.079923f, 0.054960f, 0.042592f, 0.046292f, 0.038625f, -0.010700f, -0.098661f, -0.070628f, -0.135392f, -0.001539f, 0.041461f, 0.078389f, 0.012283f, -0.056528f, 0.018935f, -0.034825f, 0.011442f, 0.027359f, 0.008283f, -0.016073f, -0.009022f, 0.000727f, -0.007514f, 0.022313f, -0.014858f, -0.038941f, 0.000880f, 0.013609f, 0.017655f, -0.024988f, -0.011449f, -0.046888f, 0.011871f, 0.021169f, -0.018100f, -0.015799f, 0.011966f, -0.008717f, -0.011611f, -0.009664f, -0.036751f, -0.007302f, 0.038112f, 0.024440f, 0.034510f, -0.017902f, -0.038870f, -0.028206f, 0.025363f, 0.020646f, -0.009103f, -0.001003f, -0.002309f, 0.007831f, -0.010906f, 0.023608f, -0.025947f, -0.013883f, 0.001847f, 0.005151f, 0.014999f, -0.031258f, 0.006652f, -0.022700f, 0.062666f, -0.017461f, 0.013654f, -0.019493f, 0.007201f, 0.000631f, 0.005853f, -0.002311f, -0.014890f, -0.038322f, -0.016790f, 0.083924f, -0.003916f, -0.038476f, 0.009020f, -0.007033f, -0.032213f, -0.025235f, 0.004139f, 0.044425f, 0.119185f, 0.054026f, 0.105586f, 0.055766f, 0.046622f, 0.045158f, -0.032067f, -0.026147f, + -0.030701f, 0.013524f, 0.086445f, 0.028229f, -0.073192f, 0.031586f, -0.078651f, 0.039344f, -0.050071f, -0.010290f, -0.044018f, -0.046519f, -0.002768f, 0.006257f, -0.001212f, -0.058255f, 0.075672f, -0.015237f, 0.028110f, -0.073731f, 0.019286f, -0.016955f, -0.023304f, 0.038600f, -0.031929f, 0.076956f, 0.008524f, -0.029996f, 0.003434f, -0.022532f, -0.031936f, 0.021843f, -0.052487f, -0.010900f, 0.064826f, -0.014004f, 0.026245f, -0.003267f, -0.047828f, 0.052159f, -0.028442f, -0.107519f, 0.012956f, 0.008360f, -0.000893f, 0.012149f, -0.015317f, -0.020728f, -0.006479f, 0.049072f, -0.093079f, 0.055026f, -0.022280f, -0.012608f, 0.060517f, -0.037218f, 0.017491f, 0.022784f, 0.088065f, 0.031110f, 0.038697f, -0.005971f, 0.052466f, -0.041935f, 0.041536f, 0.007208f, -0.016613f, 0.011563f, 0.002124f, 0.002077f, -0.023243f, -0.005584f, 0.003689f, -0.009375f, -0.017489f, 0.036330f, 0.000222f, -0.002199f, -0.010983f, 0.012382f, -0.014484f, 0.032459f, 0.018267f, 0.017652f, 0.003600f, 0.000273f, -0.003417f, 0.027272f, -0.021864f, -0.027089f, 0.010233f, 0.014538f, -0.001678f, 0.024573f, -0.010697f, -0.004331f, + 0.000861f, -0.007684f, -0.027152f, -0.026274f, -0.002880f, 0.009543f, -0.013669f, 0.005231f, 0.008230f, 0.010182f, -0.007573f, -0.000012f, 0.017243f, -0.007498f, -0.025221f, -0.045171f, 0.074095f, 0.068753f, 0.239978f, 0.096845f, -0.130442f, -0.061350f, -0.063778f, -0.100338f, 0.070209f, 0.215654f, 0.086569f, 0.040997f, -0.053775f, -0.014764f, -0.003334f, -0.002412f, 0.103817f, 0.071059f, 0.045489f, 0.155932f, -0.186196f, 0.012336f, 0.097887f, -0.023422f, 0.020437f, 0.102421f, 0.018319f, -0.028925f, 0.055536f, -0.102601f, -0.205947f, -0.019397f, 0.020734f, -0.079721f, -0.008608f, 0.110935f, 0.019138f, 0.006873f, 0.042541f, -0.086934f, -0.177306f, -0.162060f, -0.073388f, 0.054169f, 0.106252f, 0.234587f, 0.059391f, -0.029463f, -0.028857f, -0.062961f, -0.139428f, -0.042039f, 0.103075f, 0.103643f, 0.108797f, 0.106026f, 0.066865f, 0.055503f, 0.016577f, 0.024609f, -0.089302f, -0.054674f, 0.014079f, 0.025803f, 0.046844f, 0.057184f, 0.139873f, 0.037099f, 0.081731f, -0.052622f, -0.051833f, -0.093727f, -0.019760f, -0.071499f, -0.016445f, 0.145823f, 0.187114f, 0.004782f, -0.006729f, -0.115274f, + -0.132956f, -0.074574f, -0.030953f, 0.075120f, 0.040449f, -0.007331f, 0.028499f, -0.009467f, -0.018234f, -0.034164f, -0.032219f, -0.003579f, 0.009355f, 0.007750f, 0.041897f, -0.002074f, 0.000080f, -0.020039f, 0.001691f, -0.025146f, -0.007762f, 0.001043f, -0.037431f, -0.016333f, 0.001861f, -0.009487f, -0.001643f, 0.023547f, 0.021080f, 0.048066f, -0.019592f, -0.007416f, -0.046488f, -0.037411f, -0.028093f, 0.049860f, 0.032054f, 0.016490f, 0.017382f, -0.013836f, -0.041070f, -0.032821f, 0.002790f, -0.022711f, 0.042671f, 0.062792f, -0.000984f, -0.013358f, -0.042221f, -0.014533f, -0.171694f, -0.104833f, 0.060849f, 0.161843f, 0.186930f, 0.391157f, 0.237482f, 0.162348f, 0.142153f, 0.111823f, -0.019927f, -0.168407f, -0.185760f, -0.358569f, -0.382668f, -0.361442f, -0.232102f, -0.080060f, 0.079930f, 0.139875f, 0.231156f, 0.228462f, 0.159232f, 0.158619f, 0.201182f, 0.194398f, 0.173146f, 0.110980f, 0.076052f, 0.068426f, -0.007441f, -0.010927f, -0.223994f, -0.158383f, -0.200473f, -0.241213f, -0.102340f, -0.235526f, -0.191377f, -0.347400f, -0.305321f, -0.215182f, -0.144890f, -0.020605f, 0.180607f, 0.220325f, + 0.184375f, 0.198462f, 0.182389f, 0.339889f, 0.440810f, 0.395331f, 0.390681f, 0.346168f, 0.332796f, 0.248765f, 0.247222f, 0.054101f, -0.167669f, -0.346849f, -0.333227f, -0.496758f, -0.415789f, -0.603527f, -0.720635f, -0.638944f, -0.608308f, -0.364838f, -0.255290f, 0.047685f, 0.120240f, 0.285332f, 0.422128f, 0.652610f, 0.563805f, 0.815750f, 0.703154f, 0.505201f, 0.495227f, 0.226797f, 0.015849f, -0.044129f, -0.177149f, -0.307165f, -0.368963f, -0.439093f, -0.382023f, -0.344493f, -0.334009f, -0.269793f, -0.279679f, -0.228164f, -0.202325f, -0.060252f, -0.043519f, 0.056779f, 0.129470f, 0.150595f, 0.194319f, 0.278325f, 0.334769f, 0.358671f, 0.373636f, 0.276051f, 0.227023f, 0.221808f, 0.081329f, 0.055311f, -0.124824f, -0.296437f, -0.397036f, -0.404492f, -0.454570f, -0.287148f, -0.329415f, -0.218095f, -0.158746f, -0.042417f, 0.078360f, 0.156528f, 0.235533f, 0.246213f, 0.368312f, 0.380038f, 0.363411f, 0.309797f, 0.276422f, 0.111584f, 0.027932f, -0.067472f, -0.156611f, -0.296786f, -0.351664f, -0.290498f, -0.198276f, -0.173543f, -0.122503f, -0.110179f, -0.058429f, -0.005355f, 0.015184f, 0.012643f, + 0.054004f, 0.062934f, 0.096545f, 0.084070f, 0.077087f, 0.073840f, 0.082676f, 0.060542f, 0.056956f, 0.066450f, 0.069217f, 0.041485f, 0.027496f, 0.004488f, 0.001880f, 0.011646f, -0.004897f, -0.036211f, -0.027854f, -0.038961f, -0.048998f, -0.064693f, -0.056975f, -0.047989f, -0.031335f, -0.037902f, -0.029479f, -0.025076f, -0.006568f, -0.014650f, -0.010754f, -0.005391f, 0.011894f, 0.003302f, 0.011903f, 0.020317f, 0.033069f, 0.024983f, 0.032332f, 0.026359f, 0.037108f, 0.031320f, 0.025033f, 0.008304f, 0.011668f, 0.004566f, 0.004130f, -0.009825f, -0.007418f, -0.009542f, -0.003330f, -0.012578f, -0.006738f, -0.012445f, -0.008063f, -0.010465f, 0.002864f, -0.002878f, -0.004010f, -0.011910f, -0.006276f, -0.010757f, -0.006435f, -0.017469f, -0.011884f, -0.010639f, -0.001828f, -0.005637f, 0.002886f, 0.001178f, 0.008539f, 0.004856f, 0.013542f, 0.010112f, 0.013460f, 0.006649f, 0.010506f, 0.004496f, 0.010279f, 0.004485f, 0.009186f, 0.002844f, 0.006395f, -0.000950f, 0.002401f, -0.004903f, -0.000542f, -0.006712f, -0.001293f, -0.006623f, -0.000671f, -0.005536f, 0.000562f, -0.004414f, 0.001666f, -0.003281f, + 0.002589f} + }, + { + {-0.009587f, -0.025848f, -0.002130f, -0.004174f, -0.003479f, 0.000329f, -0.004260f, 0.001553f, 0.002570f, 0.010516f, -0.003531f, -0.000484f, -0.009715f, 0.000658f, 0.009838f, 0.000620f, 0.007119f, -0.002155f, 0.003006f, -0.004161f, -0.006128f, 0.000140f, 0.006764f, -0.000934f, -0.008414f, -0.000419f, 0.008196f, 0.002593f, -0.003480f, -0.002990f, -0.000365f, -0.001197f, -0.001892f, 0.000024f, -0.001367f, -0.002887f, -0.000345f, 0.001602f, 0.001155f, -0.000450f, -0.006419f, 0.009481f, 0.013031f, 0.000341f, 0.001522f, -0.005341f, -0.002986f, 0.000954f, -0.006799f, -0.007625f, 0.004510f, -0.006210f, 0.004455f, 0.005697f, 0.005750f, 0.002078f, -0.000877f, 0.001478f, 0.001195f, 0.004264f, -0.009369f, 0.000728f, -0.001220f, -0.006893f, -0.009231f, 0.000190f, 0.004589f, -0.003591f, -0.000505f, -0.001151f, -0.000669f, 0.006417f, 0.003201f, 0.000790f, 0.002522f, -0.002201f, -0.007610f, 0.002867f, 0.001203f, 0.006415f, -0.007827f, -0.005992f, 0.004371f, -0.003572f, -0.001657f, -0.005892f, 0.001283f, -0.003497f, -0.003206f, -0.000004f, -0.002580f, -0.002852f, 0.000722f, -0.001583f, -0.000742f, -0.003238f, + 0.001903f, -0.000480f, 0.000138f, -0.000931f, 0.001543f, -0.000392f, 0.000466f, -0.000655f, -0.000548f, -0.000057f, -0.001083f, -0.000149f, -0.023783f, -0.005432f, 0.009056f, -0.001271f, -0.007418f, 0.003123f, -0.017670f, -0.006736f, -0.002675f, -0.003148f, -0.009203f, -0.009562f, 0.005048f, 0.007974f, 0.006706f, -0.008942f, -0.013330f, 0.001512f, -0.007859f, -0.014075f, 0.003096f, -0.000879f, 0.003860f, 0.015858f, -0.005345f, -0.001655f, -0.010134f, 0.013705f, 0.000928f, 0.006847f, 0.004587f, 0.011255f, 0.005585f, 0.003493f, -0.011282f, -0.001247f, -0.010384f, -0.002809f, 0.000317f, -0.004287f, 0.003314f, 0.002930f, -0.004981f, -0.009497f, 0.005931f, 0.009943f, 0.002660f, -0.004702f, -0.007481f, -0.004535f, 0.002222f, -0.008246f, -0.010612f, -0.002953f, 0.005054f, -0.002863f, 0.002425f, 0.006621f, 0.004029f, -0.004858f, 0.009419f, 0.000894f, 0.008003f, -0.006774f, -0.005870f, -0.003280f, -0.004139f, 0.005725f, -0.003328f, 0.000387f, 0.009511f, 0.003482f, 0.000110f, -0.009073f, 0.002355f, -0.003585f, 0.006633f, 0.009884f, -0.001825f, 0.000874f, -0.004616f, 0.003788f, 0.008518f, -0.003002f, + 0.005260f, 0.002516f, 0.001017f, 0.004524f, 0.001645f, 0.000293f, 0.003426f, 0.001425f, -0.000412f, 0.000101f, 0.001445f, 0.001520f, -0.001727f, 0.001281f, 0.001074f, 0.001909f, -0.001239f, -0.004867f, 0.006135f, 0.008387f, 0.003438f, -0.005279f, 0.003711f, -0.002485f, 0.002585f, 0.015798f, 0.009796f, -0.013364f, 0.009112f, -0.007356f, -0.003576f, -0.001938f, 0.000319f, 0.006719f, 0.000308f, 0.018491f, 0.005400f, -0.007097f, -0.004604f, -0.004603f, 0.013084f, 0.003068f, 0.012606f, 0.004121f, 0.008510f, 0.013092f, 0.015075f, 0.005718f, -0.001624f, -0.001489f, 0.002337f, -0.012014f, -0.011116f, 0.003590f, -0.008418f, 0.004845f, 0.002400f, -0.002861f, -0.001172f, 0.003548f, 0.012607f, -0.004081f, -0.004169f, -0.006416f, 0.016087f, -0.002138f, -0.019862f, -0.009926f, -0.007818f, -0.007228f, 0.008337f, 0.007955f, 0.007064f, 0.010463f, 0.004728f, 0.006574f, -0.000189f, -0.000586f, -0.000190f, 0.010530f, 0.003516f, 0.006198f, -0.013777f, 0.000957f, 0.000753f, 0.000802f, 0.001033f, 0.006095f, 0.004352f, 0.001806f, -0.006608f, -0.006644f, 0.004020f, 0.003304f, -0.001854f, -0.000355f, + -0.005290f, -0.006824f, -0.005497f, 0.003902f, 0.006807f, 0.000887f, 0.000526f, 0.002401f, -0.001788f, -0.000165f, -0.001380f, 0.001289f, 0.001331f, 0.000780f, -0.000766f, 0.002089f, 0.003361f, -0.000382f, 0.000480f, 0.000801f, -0.000344f, 0.000943f, -0.001152f, 0.002436f, 0.000192f, -0.000350f, -0.001331f, 0.002169f, -0.003844f, 0.002377f, 0.000850f, 0.001819f, -0.000106f, -0.002277f, 0.000657f, -0.001046f, 0.035360f, 0.007544f, 0.005595f, -0.004437f, -0.002199f, 0.003252f, 0.002695f, 0.009213f, 0.012629f, -0.000725f, 0.018482f, 0.007123f, -0.006205f, -0.006182f, -0.000232f, 0.008574f, -0.000802f, -0.004922f, 0.009886f, 0.001200f, 0.026543f, 0.006734f, 0.005433f, 0.000928f, -0.002320f, 0.001084f, 0.004203f, 0.004947f, -0.000976f, -0.000103f, 0.014339f, 0.001818f, 0.015762f, -0.007977f, -0.007258f, 0.004972f, 0.023556f, 0.006605f, 0.005852f, -0.002182f, -0.009885f, -0.004126f, 0.003365f, 0.000536f, -0.000024f, 0.000697f, -0.014120f, 0.000856f, -0.006099f, 0.005579f, 0.004723f, -0.005815f, 0.003498f, 0.004867f, 0.003577f, -0.006890f, -0.006715f, 0.001488f, 0.002643f, -0.000137f, + -0.008692f, 0.002167f, -0.003265f, 0.005545f, -0.000627f, 0.000952f, 0.003811f, -0.001528f, 0.002191f, -0.003330f, 0.001165f, 0.020332f, 0.002510f, 0.007103f, 0.000432f, -0.005801f, 0.003553f, 0.001066f, 0.006533f, -0.011555f, -0.007758f, 0.003740f, -0.001488f, 0.002184f, -0.002787f, 0.004183f, 0.003821f, 0.000301f, -0.004868f, -0.002067f, -0.006689f, -0.001381f, -0.001403f, 0.004255f, -0.002992f, -0.000998f, 0.000922f, -0.000765f, -0.001478f, -0.001811f, 0.001456f, -0.001914f, -0.002137f, -0.000185f, 0.000255f, 0.001080f, -0.004482f, -0.001965f, 0.001341f, 0.000516f, -0.004897f, -0.001389f, -0.000177f, -0.006666f, -0.002586f, -0.000856f, 0.005292f, -0.007858f, -0.001222f, 0.007767f, -0.003866f, -0.012323f, 0.000048f, 0.020051f, -0.001271f, 0.015723f, 0.008233f, 0.021792f, 0.002765f, 0.001953f, 0.008087f, -0.006240f, -0.012929f, -0.017246f, 0.004168f, -0.008817f, 0.020306f, 0.011473f, 0.014383f, -0.002742f, -0.005810f, 0.001730f, 0.003325f, 0.006622f, 0.019017f, 0.002220f, 0.007997f, -0.008674f, 0.006144f, -0.006163f, 0.002707f, -0.003337f, 0.006345f, 0.010787f, 0.001586f, 0.010307f, + 0.003915f, 0.005148f, -0.002868f, -0.002519f, 0.013944f, -0.003247f, -0.003335f, 0.010395f, -0.006107f, -0.000602f, 0.001611f, -0.004571f, -0.005920f, 0.004600f, -0.006807f, -0.001334f, -0.008724f, -0.018884f, -0.001994f, -0.002874f, -0.000371f, -0.019673f, -0.007390f, -0.006005f, -0.004974f, 0.007397f, 0.019503f, -0.004935f, 0.006349f, 0.010141f, -0.002708f, 0.001914f, 0.001836f, 0.001160f, -0.006940f, 0.007720f, -0.008835f, 0.002353f, 0.006558f, 0.018178f, 0.005799f, 0.005396f, 0.001773f, -0.000220f, 0.005602f, -0.006545f, 0.000067f, 0.003771f, 0.001899f, 0.000348f, -0.007231f, 0.004416f, 0.005484f, 0.005419f, -0.000896f, 0.004045f, 0.002309f, 0.001169f, 0.003780f, 0.002152f, 0.000563f, 0.002110f, -0.000381f, 0.001650f, 0.001163f, 0.001400f, 0.002241f, 0.002696f, 0.003256f, 0.002223f, 0.002228f, 0.002408f, -0.001262f, 0.002187f, -0.025364f, 0.002043f, 0.013887f, 0.007055f, -0.014156f, -0.001247f, 0.000837f, 0.003212f, 0.005412f, -0.000989f, -0.010985f, -0.010842f, 0.001819f, 0.017929f, 0.008761f, 0.010567f, 0.018364f, -0.012485f, 0.013146f, 0.023872f, -0.002062f, 0.005257f, + -0.013487f, 0.004522f, 0.005059f, -0.011852f, -0.006162f, -0.002679f, 0.005665f, -0.011970f, -0.015469f, 0.002837f, 0.001829f, -0.013522f, 0.001172f, 0.004081f, -0.002631f, 0.028348f, -0.001532f, -0.020319f, -0.001296f, 0.006844f, 0.016115f, 0.005789f, 0.007260f, -0.013069f, 0.003637f, 0.003965f, -0.011490f, -0.000877f, -0.001919f, 0.019662f, 0.012148f, -0.003400f, -0.006757f, -0.015435f, 0.006635f, 0.006032f, -0.009021f, -0.000420f, 0.003694f, 0.005889f, 0.006177f, -0.007908f, -0.000202f, -0.001806f, 0.018573f, -0.015700f, 0.001929f, -0.004164f, 0.016723f, -0.001299f, -0.004081f, -0.007106f, 0.002099f, -0.007349f, -0.017018f, 0.000379f, 0.012943f, 0.003782f, 0.008112f, 0.001933f, -0.006135f, -0.002525f, -0.003098f, 0.010937f, 0.004372f, -0.003078f, -0.000418f, 0.009929f, 0.007476f, -0.002904f, 0.001065f, 0.001500f, 0.002148f, -0.000268f, 0.004000f, 0.002707f, 0.002441f, 0.000185f, -0.001414f, -0.000709f, 0.000784f, -0.001502f, 0.000464f, -0.002066f, -0.000677f, 0.001578f, -0.005220f, -0.001289f, 0.009879f, 0.008670f, 0.003269f, -0.006666f, 0.001956f, 0.004050f, 0.030038f, 0.019665f, + 0.014994f, 0.020862f, 0.008618f, -0.002025f, 0.003083f, 0.007580f, -0.021164f, 0.010673f, 0.000374f, 0.011484f, -0.008515f, -0.004574f, -0.013652f, 0.003641f, 0.024143f, -0.023846f, -0.014960f, -0.025342f, 0.012714f, -0.005995f, 0.000794f, -0.011699f, 0.001459f, -0.004549f, -0.011445f, 0.004062f, 0.005568f, -0.018139f, -0.002473f, 0.002908f, -0.003975f, 0.009089f, -0.025905f, -0.012855f, 0.026397f, 0.002311f, -0.000522f, -0.002968f, 0.000872f, -0.013795f, -0.014334f, 0.000479f, -0.020830f, -0.005164f, 0.002017f, 0.005184f, -0.009006f, -0.002439f, 0.025687f, -0.002054f, 0.008957f, 0.018778f, -0.017955f, -0.006610f, 0.004099f, 0.004136f, 0.003339f, -0.005887f, -0.012873f, 0.014223f, -0.001726f, -0.014043f, 0.009898f, -0.002869f, 0.002230f, 0.003393f, -0.007476f, -0.004876f, -0.003241f, -0.005988f, -0.008102f, -0.010016f, -0.009349f, -0.012190f, -0.003701f, -0.005405f, -0.001311f, -0.001953f, -0.000298f, 0.001123f, -0.004994f, -0.004273f, 0.002618f, 0.002840f, 0.005218f, -0.000731f, -0.002356f, -0.007367f, -0.002136f, -0.008452f, -0.005295f, -0.001518f, 0.001391f, -0.001022f, 0.000903f, -0.002470f, + -0.001376f, 0.005523f, 0.002118f, 0.003694f, -0.004215f, 0.000611f, 0.000781f, 0.001115f, -0.008351f, 0.000159f, 0.002231f, -0.000438f, 0.004146f, -0.001138f, -0.001472f, 0.000443f, 0.001161f, -0.049976f, -0.027392f, 0.022175f, -0.008403f, -0.010841f, 0.013839f, 0.011562f, -0.021004f, -0.028959f, -0.008966f, -0.010517f, -0.010564f, -0.002200f, -0.019521f, -0.014486f, 0.007442f, 0.000526f, -0.026343f, -0.029525f, -0.016196f, -0.008271f, -0.001275f, 0.014751f, -0.000878f, -0.011180f, 0.008432f, -0.024618f, 0.000932f, -0.001384f, 0.001231f, 0.008270f, 0.004866f, -0.018002f, -0.013175f, 0.010416f, 0.003913f, 0.039385f, 0.009898f, -0.013434f, 0.001961f, 0.001053f, 0.000564f, 0.010228f, 0.002155f, 0.004138f, -0.003925f, -0.008940f, 0.002726f, -0.023014f, -0.004121f, -0.010160f, -0.011921f, 0.002406f, -0.018004f, 0.020909f, -0.002596f, 0.008613f, 0.015239f, 0.004268f, 0.008134f, -0.001201f, -0.009692f, -0.000627f, -0.001145f, -0.012406f, 0.015979f, -0.006778f, 0.028345f, -0.001130f, -0.000536f, 0.001118f, -0.007220f, -0.015483f, 0.004872f, -0.012188f, -0.004759f, 0.016353f, -0.021254f, -0.021179f, + 0.014176f, 0.013211f, 0.011586f, -0.017968f, 0.012940f, 0.005183f, 0.007587f, -0.000704f, 0.003379f, 0.003334f, 0.010084f, 0.004107f, 0.002554f, 0.007257f, -0.000885f, -0.000603f, -0.005972f, -0.004862f, -0.000873f, 0.004905f, -0.006421f, 0.000762f, -0.000648f, -0.003963f, -0.002261f, 0.001551f, -0.008293f, -0.005246f, -0.006160f, -0.001212f, 0.002813f, -0.000149f, 0.006329f, -0.002187f, 0.006616f, 0.000471f, 0.002526f, 0.000943f, 0.005148f, -0.004003f, -0.003067f, 0.005725f, -0.002537f, 0.000709f, 0.000543f, 0.010035f, 0.036943f, -0.020639f, 0.017647f, 0.007187f, 0.013182f, -0.005269f, -0.019951f, 0.002836f, -0.005136f, -0.018783f, 0.038132f, -0.002702f, -0.010424f, -0.037479f, 0.023167f, 0.006377f, -0.000270f, -0.014012f, -0.016051f, 0.000419f, 0.038740f, 0.014354f, -0.001343f, -0.003818f, -0.016395f, -0.013491f, 0.011305f, 0.004922f, -0.012782f, -0.009122f, 0.013637f, 0.003360f, -0.000382f, 0.011569f, 0.017993f, 0.002798f, 0.023699f, 0.026673f, 0.016375f, -0.006155f, 0.006067f, 0.002177f, 0.004593f, 0.013918f, -0.019578f, 0.020800f, -0.001240f, -0.010575f, -0.015831f, 0.000097f, + 0.013857f, 0.009567f, -0.018714f, 0.004149f, 0.015153f, 0.002301f, -0.013494f, -0.029546f, -0.026670f, 0.007093f, 0.012099f, 0.002007f, -0.010209f, -0.001379f, 0.021687f, -0.009840f, -0.015983f, -0.031194f, 0.003522f, 0.006074f, -0.023057f, 0.008764f, 0.023505f, -0.010571f, 0.018336f, 0.006314f, -0.021329f, -0.015960f, 0.001909f, 0.022172f, -0.002063f, 0.023293f, -0.003801f, -0.008125f, 0.005139f, 0.011893f, 0.003403f, -0.003939f, -0.006001f, 0.004023f, 0.010761f, 0.008571f, 0.001693f, 0.013856f, 0.002812f, 0.009953f, 0.002718f, 0.013597f, 0.002303f, 0.008413f, 0.000121f, 0.006732f, 0.003866f, -0.003303f, -0.009648f, 0.000897f, -0.011323f, -0.001576f, -0.004475f, 0.001862f, -0.001245f, -0.000400f, -0.010015f, -0.000919f, 0.005093f, -0.004983f, 0.000952f, -0.001172f, 0.001016f, -0.000634f, -0.007153f, 0.001185f, -0.001284f, 0.044604f, 0.029133f, 0.006761f, -0.009027f, -0.004658f, -0.006340f, -0.030442f, -0.012466f, -0.000290f, 0.019391f, -0.013934f, -0.007969f, -0.006458f, 0.000222f, 0.032288f, -0.025127f, -0.006590f, -0.001498f, 0.015222f, -0.005343f, -0.018361f, -0.031048f, 0.011191f, + -0.021488f, -0.009658f, -0.013448f, -0.014302f, 0.004421f, -0.024101f, -0.011887f, 0.021626f, 0.032075f, 0.001615f, -0.020267f, -0.017822f, 0.029572f, -0.003171f, -0.016202f, 0.031147f, 0.000845f, 0.002063f, 0.001190f, -0.033643f, 0.013638f, -0.012360f, 0.012173f, 0.011532f, -0.023100f, -0.002332f, -0.023430f, 0.009237f, -0.022725f, -0.003669f, 0.009356f, 0.013040f, -0.007670f, 0.008001f, -0.027552f, 0.019079f, -0.002251f, 0.013081f, 0.010700f, 0.008023f, -0.006209f, -0.005542f, 0.027230f, -0.018708f, 0.013465f, -0.004433f, -0.023404f, -0.013835f, -0.001674f, 0.024801f, -0.014189f, 0.011744f, 0.003184f, -0.007342f, 0.000195f, -0.027147f, 0.034505f, 0.021532f, -0.004212f, -0.009169f, 0.016848f, 0.007616f, -0.005117f, -0.008621f, 0.001798f, -0.005654f, 0.008624f, -0.001547f, 0.004477f, 0.014652f, 0.005045f, 0.011665f, -0.000138f, 0.004333f, 0.001568f, -0.001818f, 0.000182f, -0.000752f, 0.009716f, 0.004191f, 0.013529f, 0.002610f, -0.007773f, 0.010281f, -0.004108f, 0.000045f, 0.007353f, -0.006856f, -0.002498f, -0.003455f, -0.003189f, 0.006515f, 0.003642f, 0.003557f, 0.005327f, -0.000284f, + -0.001660f, 0.013095f, -0.004416f, -0.004018f, 0.017074f, 0.003655f, -0.011845f, -0.026097f, -0.001771f, -0.034016f, 0.005585f, 0.003386f, 0.016472f, -0.013389f, -0.003603f, 0.009234f, 0.007087f, 0.010125f, -0.023566f, 0.033192f, 0.022987f, 0.004621f, 0.016912f, -0.007444f, -0.033431f, 0.008143f, -0.014263f, -0.015181f, 0.015282f, 0.038418f, 0.006348f, -0.010180f, -0.014130f, -0.030228f, -0.000251f, 0.001749f, 0.046668f, -0.018165f, -0.001050f, 0.001735f, -0.001740f, -0.027977f, -0.032250f, 0.025611f, 0.000687f, 0.014696f, -0.004416f, -0.035849f, -0.021140f, 0.003216f, -0.006356f, -0.007325f, -0.010633f, 0.024003f, -0.005301f, 0.015707f, -0.016893f, 0.033305f, -0.039245f, 0.019606f, 0.019900f, 0.012375f, 0.010385f, 0.010089f, 0.030519f, 0.016159f, -0.002529f, 0.006900f, -0.000048f, 0.030770f, 0.045465f, -0.004953f, 0.003369f, -0.013124f, 0.018861f, 0.031045f, -0.021298f, 0.006778f, -0.053228f, 0.034927f, 0.035462f, 0.024171f, 0.032973f, -0.014836f, -0.026811f, -0.001586f, -0.004120f, -0.007525f, -0.005832f, -0.015602f, -0.011323f, -0.005568f, -0.001649f, -0.008587f, 0.005091f, 0.010046f, + 0.003541f, -0.014644f, 0.002756f, -0.007996f, -0.008971f, -0.005210f, 0.006023f, 0.006076f, -0.002829f, -0.003411f, -0.001511f, -0.002283f, 0.001427f, -0.014163f, 0.004642f, 0.002407f, 0.009206f, 0.002406f, -0.000785f, -0.000112f, 0.001904f, 0.008512f, 0.002691f, -0.007185f, 0.005843f, 0.000313f, 0.000738f, -0.038529f, -0.005697f, -0.049276f, -0.025280f, 0.019366f, -0.020170f, -0.043824f, 0.004068f, -0.023639f, 0.001087f, 0.000834f, -0.028098f, -0.026720f, 0.012076f, 0.025778f, 0.007782f, -0.030006f, 0.014347f, -0.033749f, -0.011830f, -0.012442f, 0.010559f, -0.013875f, -0.006320f, 0.016201f, 0.002770f, -0.011114f, -0.024017f, 0.025419f, 0.024657f, 0.032036f, 0.004185f, -0.003576f, 0.001134f, 0.010261f, -0.002423f, 0.013135f, -0.014458f, 0.017273f, -0.006802f, 0.019900f, 0.015966f, 0.012012f, -0.005784f, 0.000823f, -0.030970f, 0.010538f, -0.007797f, 0.023293f, 0.004239f, -0.054152f, 0.008319f, 0.026688f, 0.035903f, -0.020654f, -0.028212f, 0.033766f, 0.015331f, 0.023740f, -0.042293f, 0.020910f, 0.052948f, 0.055769f, 0.003551f, 0.001324f, 0.031737f, -0.021966f, -0.029267f, 0.018748f, + -0.032403f, 0.012166f, -0.015090f, -0.012754f, -0.007156f, -0.069800f, -0.040304f, -0.033995f, 0.025080f, 0.009514f, 0.007053f, -0.024797f, -0.010083f, -0.018734f, -0.003544f, -0.010065f, 0.027412f, 0.006513f, -0.010899f, -0.024354f, -0.005420f, 0.015768f, -0.002515f, -0.006737f, 0.004846f, 0.016506f, -0.005875f, -0.009755f, -0.004674f, -0.003620f, -0.001120f, 0.012838f, 0.012900f, 0.011206f, -0.011320f, 0.014688f, -0.000745f, 0.004198f, 0.016793f, -0.007545f, -0.007572f, 0.014640f, 0.026282f, -0.006146f, -0.008579f, -0.004185f, 0.003164f, -0.004738f, -0.018103f, 0.002924f, 0.013224f, 0.003567f, -0.018229f, -0.017461f, 0.008237f, 0.005921f, -0.000974f, -0.001117f, -0.003185f, -0.012984f, -0.008890f, -0.029000f, -0.055696f, 0.042586f, 0.004447f, 0.014309f, -0.007232f, 0.030163f, 0.000781f, -0.025697f, 0.019875f, 0.008113f, -0.009128f, -0.015505f, -0.012188f, 0.003848f, 0.007242f, 0.026716f, -0.015228f, 0.020969f, 0.006648f, 0.038087f, -0.054657f, -0.014648f, -0.008685f, 0.007048f, 0.022276f, 0.032374f, 0.007322f, -0.026269f, 0.017720f, 0.025472f, 0.021404f, -0.005983f, 0.007449f, 0.001554f, + -0.009004f, -0.003664f, 0.001520f, 0.008249f, 0.002933f, 0.018833f, 0.003071f, -0.023740f, 0.022152f, -0.024615f, -0.031470f, 0.004892f, 0.022690f, -0.011049f, -0.008194f, 0.008264f, 0.011053f, 0.019593f, -0.011229f, 0.009290f, 0.044206f, -0.017657f, -0.047062f, -0.060903f, -0.030823f, -0.041267f, 0.018698f, 0.035812f, 0.022859f, 0.008751f, 0.021498f, 0.012659f, 0.023764f, -0.020392f, 0.026867f, 0.013978f, 0.010869f, 0.028044f, 0.036399f, -0.011353f, -0.008196f, 0.009952f, -0.002454f, 0.032799f, 0.012647f, -0.005024f, 0.005471f, -0.040040f, -0.028061f, 0.005533f, -0.001648f, 0.007101f, 0.002627f, 0.008395f, -0.007558f, 0.021078f, -0.011225f, -0.012898f, -0.012521f, -0.021074f, -0.007723f, -0.004187f, 0.006830f, 0.005596f, -0.003240f, -0.018109f, -0.001145f, 0.005961f, 0.001922f, -0.007287f, 0.004187f, 0.000222f, 0.006891f, -0.007598f, 0.003009f, 0.001425f, 0.008327f, -0.004061f, 0.012868f, -0.008065f, -0.009358f, 0.002714f, -0.001684f, -0.006804f, 0.002035f, 0.008928f, 0.000651f, -0.001419f, 0.055682f, 0.005434f, 0.008695f, -0.011518f, 0.020190f, -0.063694f, -0.028192f, -0.043518f, + -0.045019f, 0.017899f, -0.039295f, 0.038617f, 0.043844f, 0.001972f, 0.009455f, -0.006715f, 0.007967f, -0.041645f, 0.017063f, 0.046176f, -0.026358f, -0.053630f, 0.007021f, -0.020144f, -0.017202f, -0.052314f, 0.008980f, 0.019266f, -0.000297f, -0.007066f, 0.016742f, -0.029822f, -0.005075f, 0.019460f, -0.010818f, -0.026430f, 0.003093f, -0.013177f, 0.027240f, -0.018092f, -0.010180f, 0.025647f, 0.022104f, 0.047332f, 0.006138f, 0.011447f, -0.004485f, 0.012727f, 0.016712f, 0.029247f, -0.008567f, -0.000938f, -0.018312f, 0.038574f, -0.048745f, 0.052224f, 0.001705f, -0.020796f, 0.024303f, -0.018963f, -0.014136f, 0.048028f, -0.069486f, 0.011318f, -0.014798f, 0.013570f, -0.027070f, 0.012956f, 0.027317f, -0.014239f, -0.002728f, -0.007318f, -0.011672f, -0.006162f, 0.050901f, -0.057967f, -0.019995f, 0.097428f, -0.036886f, -0.043019f, 0.041970f, 0.025221f, 0.027940f, -0.024555f, 0.001723f, -0.024411f, -0.013877f, -0.003852f, -0.028080f, 0.006073f, 0.003533f, -0.007290f, 0.009801f, 0.008939f, -0.012858f, -0.023734f, -0.006335f, -0.002034f, 0.009070f, -0.020956f, -0.014931f, 0.000510f, -0.002348f, 0.005233f, + 0.012792f, 0.030980f, -0.014378f, -0.000754f, -0.003667f, -0.003295f, 0.008648f, 0.003452f, -0.018736f, -0.013979f, 0.014540f, -0.012072f, 0.005309f, 0.003773f, -0.011537f, 0.004226f, -0.002883f, -0.018929f, -0.015787f, 0.009203f, 0.005765f, -0.002913f, -0.000673f, 0.011735f, -0.027933f, -0.042606f, 0.003953f, -0.016029f, -0.014706f, -0.023898f, -0.030392f, 0.038272f, 0.016183f, 0.002617f, 0.017674f, 0.045294f, 0.026457f, -0.002895f, 0.009013f, 0.030516f, 0.038503f, -0.034147f, 0.015854f, 0.032587f, 0.013914f, 0.012068f, 0.044501f, 0.021735f, 0.009146f, -0.001160f, 0.019931f, -0.002045f, 0.022579f, 0.019002f, 0.010118f, -0.020717f, 0.039355f, -0.032283f, -0.004228f, 0.049680f, 0.048756f, -0.011441f, -0.043530f, 0.016535f, -0.000821f, 0.042654f, 0.072893f, 0.016533f, -0.011345f, 0.005379f, -0.042068f, -0.004738f, -0.011227f, -0.008797f, 0.000692f, 0.037494f, -0.016144f, 0.016622f, 0.044713f, 0.007834f, -0.041636f, 0.027673f, -0.002261f, 0.017683f, 0.042011f, 0.059573f, -0.016880f, -0.015522f, -0.005224f, -0.046800f, -0.068976f, 0.002103f, -0.031439f, -0.004846f, -0.038085f, -0.003674f, + 0.001099f, 0.005397f, 0.028058f, -0.000564f, -0.019738f, -0.032392f, 0.023724f, -0.009832f, 0.020286f, 0.000987f, 0.037884f, 0.014327f, 0.013918f, 0.000381f, -0.011914f, 0.021582f, -0.016380f, -0.018617f, -0.005779f, -0.013936f, -0.005585f, 0.001333f, 0.001420f, -0.004846f, 0.005762f, 0.008624f, 0.000615f, -0.001904f, 0.010986f, -0.009255f, -0.013550f, 0.008496f, 0.009674f, 0.002203f, -0.011717f, -0.013759f, -0.008235f, 0.011552f, 0.015139f, 0.002252f, -0.002194f, 0.017090f, 0.004565f, 0.008291f, 0.006942f, 0.012296f, 0.003355f, -0.001956f, -0.008920f, 0.005098f, 0.009561f, -0.019462f, 0.015593f, 0.046560f, -0.087285f, 0.048044f, -0.036791f, -0.085984f, -0.025529f, -0.021648f, -0.003108f, -0.019818f, 0.010379f, -0.023770f, -0.053355f, -0.032175f, -0.016002f, -0.004852f, 0.006039f, -0.021934f, 0.021375f, 0.041763f, 0.001475f, -0.002626f, 0.011369f, 0.002560f, -0.007873f, -0.015514f, -0.008828f, 0.011283f, 0.012328f, -0.003728f, 0.011714f, 0.051276f, 0.014027f, -0.015031f, -0.050998f, -0.008165f, 0.035849f, -0.043826f, -0.020700f, -0.016725f, 0.000411f, -0.003396f, 0.027498f, -0.009172f, + 0.003183f, 0.037957f, 0.013441f, 0.042109f, -0.006075f, -0.019985f, -0.009288f, -0.010900f, -0.011086f, 0.020260f, 0.002052f, 0.013666f, 0.025547f, -0.045305f, 0.006476f, -0.012069f, -0.028308f, -0.021333f, 0.043986f, 0.031701f, 0.001429f, -0.021687f, 0.008749f, 0.018523f, 0.001751f, 0.012774f, -0.030540f, -0.075141f, -0.034939f, -0.027604f, 0.027274f, 0.002639f, -0.003652f, -0.012820f, 0.005184f, -0.008616f, -0.023903f, -0.024743f, -0.013016f, 0.030188f, 0.022730f, -0.034056f, -0.042546f, -0.016727f, 0.002755f, 0.025521f, 0.010207f, -0.008387f, -0.011564f, -0.008905f, 0.005789f, -0.018981f, 0.002602f, -0.013031f, 0.000878f, 0.019187f, 0.020496f, 0.005276f, -0.010918f, 0.006465f, 0.014711f, -0.000712f, -0.003415f, 0.010825f, -0.015414f, 0.020939f, 0.018772f, 0.007150f, -0.000566f, -0.001115f, -0.002349f, 0.017506f, -0.007180f, -0.009617f, -0.010919f, -0.015480f, -0.015161f, 0.004551f, -0.005736f, 0.006194f, -0.004510f, 0.002958f, 0.010977f, -0.005767f, -0.011028f, -0.015976f, -0.004585f, 0.007010f, -0.011396f, 0.024482f, -0.033717f, 0.040687f, -0.002611f, -0.066148f, 0.014060f, -0.032263f, + -0.005838f, -0.005455f, -0.007057f, -0.042394f, 0.013795f, 0.001454f, 0.033705f, -0.071985f, 0.001825f, 0.034396f, 0.004895f, -0.017650f, -0.035401f, -0.003551f, 0.021330f, 0.030006f, -0.024903f, -0.009867f, 0.017240f, 0.034387f, 0.032722f, -0.031753f, -0.005708f, -0.051005f, 0.024021f, 0.024724f, 0.016387f, -0.015097f, -0.003343f, -0.014456f, -0.004764f, -0.017539f, 0.005403f, 0.035844f, -0.013026f, -0.015235f, -0.012030f, -0.021591f, 0.042132f, 0.034939f, -0.002968f, 0.049527f, -0.001771f, 0.017064f, -0.043951f, 0.035659f, 0.016711f, -0.050842f, -0.015691f, 0.056388f, 0.024203f, 0.014645f, 0.011590f, -0.027816f, -0.020788f, -0.029771f, 0.050128f, -0.026612f, 0.038807f, 0.038823f, -0.044678f, 0.103373f, -0.021955f, 0.063752f, 0.003198f, -0.015593f, -0.027580f, 0.047642f, 0.019103f, -0.038676f, -0.022713f, -0.082013f, 0.032726f, -0.012124f, 0.037570f, -0.050896f, 0.056041f, -0.043761f, 0.016723f, -0.017611f, -0.012540f, 0.035628f, 0.003666f, 0.002346f, 0.020646f, 0.013220f, -0.009192f, 0.022964f, -0.002782f, 0.005942f, -0.016641f, 0.002140f, -0.002170f, -0.011785f, -0.016762f, -0.000564f, + -0.018635f, 0.007788f, 0.008137f, -0.005584f, 0.016241f, -0.007032f, -0.009700f, -0.014821f, 0.009554f, 0.000734f, -0.002266f, -0.028111f, 0.012135f, -0.006627f, -0.032389f, -0.011582f, 0.009209f, -0.010476f, -0.016831f, 0.009879f, -0.009208f, 0.007906f, -0.017176f, 0.006673f, -0.017526f, -0.004397f, -0.002814f, 0.008003f, -0.004324f, 0.000291f, -0.005899f, -0.007432f, 0.024188f, 0.043743f, 0.002739f, -0.035139f, 0.016623f, -0.068637f, -0.019231f, -0.062265f, -0.088110f, 0.003869f, -0.034308f, 0.012135f, -0.007180f, -0.012795f, -0.033935f, -0.021957f, 0.018866f, 0.053533f, -0.044508f, -0.008479f, -0.076191f, -0.065379f, 0.017643f, 0.027525f, -0.042114f, -0.042462f, 0.002105f, 0.010587f, -0.070796f, 0.004715f, 0.000894f, 0.037458f, -0.032102f, 0.002376f, 0.029642f, -0.018702f, -0.037123f, -0.039870f, -0.020337f, -0.036261f, -0.031127f, -0.037892f, 0.053911f, -0.068227f, -0.043503f, 0.063629f, -0.002570f, 0.018683f, -0.052972f, -0.008128f, -0.015500f, 0.002410f, 0.087715f, -0.011482f, -0.002283f, 0.009753f, 0.040811f, 0.002001f, -0.039638f, -0.016286f, -0.028729f, 0.010550f, 0.105086f, 0.021592f, + -0.037760f, 0.080653f, 0.056986f, -0.050040f, 0.058796f, 0.098418f, 0.000314f, -0.036927f, 0.065736f, -0.010443f, 0.069190f, 0.063887f, 0.004768f, -0.002190f, -0.019225f, 0.044936f, 0.035164f, 0.021388f, -0.037703f, -0.011300f, -0.024506f, 0.056639f, -0.007516f, -0.037115f, -0.019070f, -0.037314f, -0.016986f, 0.039097f, 0.003870f, -0.018955f, -0.007251f, -0.023443f, -0.004549f, 0.035075f, -0.016815f, 0.009443f, -0.003813f, -0.031353f, 0.034733f, 0.005334f, 0.013715f, 0.018134f, -0.023013f, 0.008099f, 0.031916f, -0.004665f, 0.000934f, -0.016210f, -0.000399f, 0.003764f, -0.010944f, -0.008641f, 0.005796f, 0.025128f, -0.015688f, 0.010648f, -0.020837f, -0.008630f, 0.000956f, -0.005656f, 0.023323f, -0.007868f, 0.000775f, 0.003470f, 0.008385f, 0.002005f, -0.011472f, -0.001425f, -0.006590f, 0.049912f, -0.125626f, -0.074644f, -0.081853f, -0.027115f, -0.054744f, 0.067857f, 0.024817f, 0.055747f, -0.008815f, -0.105970f, -0.016891f, 0.017839f, 0.072653f, -0.002481f, 0.016374f, 0.067855f, -0.025842f, -0.048211f, 0.004310f, -0.002753f, 0.084387f, 0.055857f, -0.028489f, -0.038132f, 0.089654f, 0.006833f, + 0.044484f, 0.022265f, 0.083553f, 0.073285f, 0.055378f, 0.006373f, -0.048414f, -0.025502f, -0.037202f, 0.070860f, -0.034705f, -0.047778f, -0.027172f, 0.002932f, -0.002940f, 0.031517f, -0.031577f, 0.011540f, -0.144206f, 0.016403f, 0.021197f, 0.023863f, -0.060967f, -0.055228f, 0.016008f, 0.050733f, -0.062954f, 0.024343f, -0.036316f, -0.027151f, -0.042706f, -0.003494f, 0.042809f, -0.029288f, 0.047130f, -0.012114f, 0.017689f, -0.089112f, -0.058689f, -0.002100f, 0.046139f, 0.033299f, -0.066270f, -0.069898f, -0.033852f, 0.006667f, 0.072863f, 0.030641f, -0.008542f, -0.052098f, -0.061590f, -0.020436f, 0.011119f, 0.052512f, -0.006102f, 0.017392f, 0.033677f, -0.013497f, 0.011179f, -0.034874f, 0.020033f, 0.012308f, -0.023105f, -0.018002f, 0.000305f, 0.026848f, -0.027533f, -0.001180f, 0.041293f, 0.006569f, 0.004596f, -0.000186f, -0.013956f, -0.029424f, 0.005742f, -0.032683f, 0.036318f, 0.032378f, 0.023027f, 0.002628f, -0.004856f, -0.038334f, 0.022169f, -0.008055f, 0.042513f, -0.011171f, -0.052102f, -0.031370f, -0.008177f, 0.048366f, 0.011774f, -0.011004f, -0.007005f, -0.039918f, -0.021043f, -0.016480f, + -0.004463f, 0.021410f, 0.019135f, -0.040404f, -0.024068f, -0.025083f, -0.025991f, -0.009471f, 0.005186f, -0.004264f, -0.015873f, -0.025157f, -0.027176f, 0.002261f, -0.003717f, -0.013323f, 0.023534f, 0.160223f, 0.017735f, -0.087827f, -0.192797f, -0.019118f, 0.116461f, 0.027411f, 0.051549f, -0.006861f, 0.071342f, -0.013352f, 0.032093f, -0.017822f, 0.040977f, 0.054387f, 0.031136f, -0.028735f, -0.062821f, 0.073832f, 0.086892f, -0.020872f, -0.083541f, -0.053214f, 0.010106f, 0.047768f, 0.017639f, 0.016093f, 0.004359f, 0.011012f, 0.006874f, 0.010894f, -0.015480f, -0.099828f, 0.000606f, 0.059148f, 0.047865f, -0.020919f, 0.005873f, 0.035798f, 0.082994f, 0.048701f, 0.041256f, -0.049824f, -0.032597f, -0.009820f, -0.007806f, -0.074791f, 0.052925f, 0.029218f, 0.054925f, 0.108476f, -0.055557f, -0.037837f, -0.004040f, -0.032031f, -0.025411f, -0.049609f, 0.086309f, -0.053237f, -0.054805f, -0.058862f, -0.019027f, 0.107499f, 0.028836f, 0.041000f, -0.001387f, -0.010581f, -0.024290f, 0.066321f, 0.055655f, -0.029466f, -0.062737f, 0.020621f, -0.007450f, 0.024883f, -0.058800f, -0.024589f, -0.033861f, -0.046552f, + 0.028386f, 0.043668f, 0.009219f, 0.000437f, -0.023241f, 0.012113f, -0.008622f, 0.040514f, 0.004100f, -0.015573f, -0.007542f, 0.012684f, 0.027525f, 0.028277f, -0.016443f, 0.017114f, 0.010247f, 0.008310f, -0.000715f, -0.032596f, -0.003494f, -0.026656f, -0.009564f, 0.000337f, 0.004839f, 0.007497f, 0.009662f, 0.009430f, 0.027906f, 0.039401f, 0.036722f, -0.004338f, -0.008477f, 0.003623f, -0.017335f, 0.021315f, -0.024571f, -0.003948f, 0.020628f, -0.002144f, -0.004632f, -0.041423f, 0.020537f, -0.041311f, 0.013718f, -0.009935f, 0.006614f, -0.004376f, 0.004788f, -0.002731f, -0.025005f, 0.013267f, 0.012516f, -0.002885f, 0.008427f, -0.002200f, 0.007170f, -0.004070f, -0.006647f, -0.001947f, -0.002235f, 0.000722f, -0.001476f, 0.000820f, 0.000708f, -0.009116f, -0.003978f, -0.002212f, 0.005146f, 0.001173f, -0.002672f, -0.005279f, -0.005560f, -0.000279f, 0.001270f, -0.002679f, 0.000099f, -0.003515f, -0.001077f, -0.003923f, -0.046138f, 0.003610f, 0.124484f, 0.094912f, 0.015428f, 0.006717f, -0.066864f, -0.130305f, -0.113034f, -0.056141f, 0.093571f, 0.101243f, 0.106195f, 0.057969f, -0.015067f, -0.067979f, + -0.061780f, -0.041520f, 0.027041f, 0.040614f, 0.072797f, 0.005928f, -0.054631f, -0.047315f, -0.009756f, -0.047411f, -0.021310f, 0.009439f, 0.075358f, 0.106140f, 0.069695f, 0.032244f, 0.030749f, -0.067814f, -0.007530f, -0.135535f, -0.150187f, -0.095169f, -0.045034f, -0.042208f, 0.070792f, 0.109415f, 0.122621f, 0.109613f, 0.096098f, 0.038761f, 0.006842f, -0.047122f, -0.012333f, -0.075370f, -0.131622f, -0.011865f, 0.012690f, 0.011886f, 0.044212f, 0.025165f, 0.044849f, -0.148820f, -0.080396f, -0.053850f, -0.085249f, -0.037370f, 0.063832f, -0.038875f, 0.043127f, 0.004850f, -0.038607f, 0.030435f, -0.032188f, 0.034336f, 0.041696f, -0.032555f, -0.063020f, -0.132063f, -0.126474f, -0.095868f, 0.046857f, 0.015192f, -0.017700f, 0.023306f, 0.007314f, -0.000740f, -0.060120f, -0.043789f, -0.112270f, -0.038628f, -0.041085f, -0.005789f, 0.082916f, 0.086891f, 0.013392f, 0.044238f, -0.026813f, -0.062422f, -0.109183f, -0.073596f, -0.067254f, -0.003715f, 0.034052f, 0.017823f, 0.027857f, 0.028039f, -0.019679f, 0.016439f, -0.018522f, 0.017093f, 0.005191f, -0.002097f, -0.003433f, 0.013845f, 0.014094f, 0.027714f, + -0.006044f, -0.008358f, 0.027943f, 0.024080f, 0.005522f, -0.010208f, 0.021904f, -0.222231f, -0.113312f, -0.059325f, 0.074965f, 0.017128f, 0.285121f, 0.291806f, 0.220356f, 0.284497f, 0.298538f, 0.270846f, 0.194800f, 0.176424f, 0.196205f, 0.077832f, -0.011397f, -0.121426f, -0.187160f, -0.259147f, -0.251374f, -0.375234f, -0.227349f, -0.148208f, -0.117359f, -0.167385f, -0.087756f, -0.024268f, -0.125097f, -0.097461f, -0.102547f, -0.023373f, -0.061492f, -0.022118f, -0.083333f, -0.042569f, 0.050034f, 0.051451f, 0.015635f, -0.015558f, 0.054507f, 0.043840f, -0.126202f, 0.026160f, 0.085699f, 0.187035f, 0.137500f, 0.178065f, 0.073308f, 0.070694f, 0.297068f, 0.160629f, 0.303990f, 0.101616f, 0.285120f, 0.196606f, 0.248957f, 0.335394f, 0.318008f, 0.257602f, 0.289607f, 0.321400f, 0.350106f, 0.298742f, 0.345119f, 0.235235f, 0.350065f, 0.280819f, 0.249451f, 0.265665f, 0.145309f, 0.297430f, 0.144171f, 0.087283f, -0.109235f, 0.007136f, -0.161467f, -0.181781f, -0.277701f, -0.328166f, -0.504122f, -0.492519f, -0.464995f, -0.435067f, -0.409866f, -0.346590f, -0.422600f, -0.520425f, -0.513039f, -0.425761f, + -0.450463f, -0.423828f, -0.425086f, -0.363005f, -0.395098f, -0.379059f, -0.282606f, -0.312342f, -0.239815f, -0.224178f, -0.206476f, -0.131838f, -0.170092f, -0.038962f, -0.063198f, 0.028992f, 0.039480f, 0.123737f, 0.183310f, 0.191895f, 0.221852f, 0.196800f, 0.296908f, 0.336337f, 0.333461f, 0.385140f, 0.402448f, 0.398528f, 0.304036f, 0.271222f, 0.238206f, 0.220615f, 0.214999f, 0.220478f, 0.207410f, 0.157691f, 0.101704f, 0.115314f, 0.089239f, 0.069174f, 0.046221f, -0.036227f, -0.046909f, -0.049553f, -0.060392f, -0.074034f, -0.083122f, -0.058807f, -0.064491f, -0.051865f, -0.052717f, -0.046031f, -0.033083f, -0.039891f, -0.032568f, -0.031966f, -0.038794f, -0.036048f, -0.039764f, -0.031794f, -0.026134f, -0.035274f, -0.040287f, -0.018333f, -0.008959f, -0.012630f, -0.011381f, -0.002221f, -0.003051f, -0.006890f, -0.007137f, 0.002994f, 0.014184f, 0.015016f, 0.015497f, 0.015411f, 0.014476f, 0.020568f, 0.021677f, 0.021804f, 0.015012f, 0.010608f, 0.008200f, 0.013707f, 0.014765f, 0.008746f, 0.002458f, 0.002927f, -0.001934f, 0.006308f, 0.004969f, 0.005228f, 0.003786f, 0.005244f, 0.004422f, 0.004419f, + 0.010080f, 0.020473f, 0.014231f, 0.014951f, 0.013249f, 0.016498f, 0.015464f, 0.011830f, 0.007431f, 0.007321f, 0.003240f, 0.002788f, -0.004008f, -0.007779f, -0.014667f, -0.013410f, -0.021740f, -0.027109f, -0.029483f, -0.030441f, -0.035267f, -0.035134f, -0.036965f, -0.036481f, -0.035749f, -0.038139f, -0.038881f, -0.037247f, -0.033581f, -0.029773f, -0.027585f, -0.019965f, -0.018336f, -0.015118f, -0.014570f, -0.007194f, -0.004565f, -0.000040f, 0.001958f, 0.005141f, 0.006043f, 0.009922f, 0.010489f, 0.011333f, 0.008801f, 0.009171f, 0.006905f, 0.006820f, 0.004413f, 0.004483f, 0.002400f, 0.002545f, 0.000679f, 0.000993f}, + {-0.014287f, -0.028302f, -0.004948f, 0.000375f, -0.006480f, -0.013320f, -0.004390f, 0.009758f, -0.015657f, -0.008654f, -0.005181f, -0.003069f, 0.004978f, -0.002239f, 0.005542f, 0.002532f, 0.004854f, -0.000543f, 0.006008f, -0.005241f, 0.000981f, -0.002301f, 0.001139f, 0.015105f, -0.003212f, -0.000933f, -0.007486f, 0.009336f, 0.005800f, 0.004491f, 0.011655f, -0.005960f, -0.003383f, 0.003983f, 0.010436f, -0.002817f, -0.000693f, -0.008424f, -0.009224f, -0.006173f, 0.006592f, -0.008193f, -0.007021f, -0.000888f, 0.009388f, -0.012701f, -0.002698f, -0.010612f, -0.005144f, -0.003037f, 0.001464f, -0.000956f, -0.007603f, 0.009752f, 0.001668f, 0.008776f, -0.003544f, -0.002225f, -0.010930f, -0.000237f, -0.003831f, -0.004123f, 0.006306f, 0.003542f, -0.001954f, 0.003392f, 0.006978f, -0.001985f, 0.003001f, -0.004993f, -0.002878f, -0.001207f, -0.004705f, 0.004184f, 0.001461f, 0.003186f, -0.007467f, 0.005365f, 0.003093f, 0.012101f, 0.007201f, -0.001980f, -0.007684f, -0.000626f, 0.001680f, 0.000958f, 0.002396f, -0.000354f, -0.002600f, 0.000107f, -0.001765f, 0.000017f, -0.002137f, 0.000767f, -0.002079f, -0.000136f, + 0.002336f, 0.000790f, 0.001208f, -0.001488f, -0.001043f, 0.001108f, 0.001606f, 0.000731f, -0.000234f, 0.000122f, -0.000030f, 0.001005f, -0.023314f, -0.008334f, 0.006682f, -0.006135f, -0.002792f, -0.002578f, 0.003142f, -0.001158f, -0.006162f, 0.009728f, 0.008656f, 0.002927f, -0.001106f, 0.004526f, -0.011973f, -0.001719f, -0.011832f, -0.005920f, 0.008702f, -0.001421f, 0.001541f, -0.001159f, -0.001368f, 0.000233f, 0.018224f, 0.016732f, 0.007446f, 0.008950f, 0.010554f, -0.002001f, -0.001227f, -0.003600f, 0.009312f, -0.000869f, -0.003547f, 0.002661f, -0.005440f, 0.003769f, 0.006701f, -0.003387f, 0.007556f, 0.008590f, 0.016667f, -0.006478f, -0.007874f, 0.007187f, -0.004316f, 0.000287f, 0.003507f, -0.009644f, 0.000577f, -0.005021f, -0.005692f, 0.012898f, 0.007544f, 0.009300f, -0.005291f, -0.006916f, 0.004891f, -0.008059f, 0.005694f, 0.024845f, 0.001396f, 0.001760f, 0.005565f, 0.002481f, 0.002281f, 0.014171f, -0.007555f, -0.001852f, 0.002585f, 0.001905f, -0.007033f, -0.005098f, -0.007179f, -0.003340f, -0.002628f, 0.006555f, -0.001111f, 0.006585f, 0.006672f, -0.006630f, -0.007175f, -0.001776f, + 0.004520f, 0.006357f, -0.007522f, -0.001387f, -0.002240f, -0.005089f, -0.000636f, -0.004815f, 0.001269f, -0.000246f, 0.002609f, -0.001415f, 0.000998f, -0.001817f, -0.000489f, -0.001376f, 0.001143f, -0.006768f, 0.007331f, 0.011906f, -0.005739f, 0.005911f, 0.018647f, 0.006271f, 0.004235f, -0.013050f, 0.010789f, 0.002866f, -0.016862f, 0.007149f, -0.004764f, -0.010082f, 0.004025f, -0.001389f, 0.003877f, 0.009787f, -0.010308f, -0.010770f, -0.004842f, 0.014678f, 0.000368f, 0.007292f, 0.015141f, -0.022569f, -0.018258f, 0.002977f, 0.011085f, -0.008149f, 0.000678f, 0.015089f, 0.003847f, -0.001932f, -0.004574f, 0.018054f, 0.002169f, -0.004376f, 0.002487f, -0.016349f, 0.001823f, -0.009009f, 0.008301f, 0.001476f, 0.008819f, -0.004442f, -0.002255f, 0.004021f, 0.000233f, 0.001182f, 0.000477f, 0.008515f, 0.006807f, -0.009303f, 0.005304f, 0.007539f, -0.012829f, 0.001544f, -0.005799f, 0.002422f, -0.002967f, -0.009871f, 0.000128f, 0.008548f, 0.007378f, 0.016475f, -0.010225f, 0.012761f, -0.008458f, -0.001675f, 0.007525f, -0.008228f, -0.012324f, -0.004423f, 0.000551f, -0.000756f, -0.000658f, -0.001307f, + 0.002406f, 0.005266f, -0.007181f, -0.000071f, 0.003377f, -0.000636f, 0.002896f, -0.005839f, -0.003392f, -0.002303f, -0.004336f, 0.001286f, -0.000961f, -0.003354f, 0.001824f, 0.001937f, -0.002854f, -0.004305f, -0.000256f, -0.000986f, 0.004435f, -0.000202f, -0.000756f, 0.000838f, 0.000932f, -0.000757f, -0.001364f, 0.003022f, 0.000971f, -0.002379f, -0.001240f, -0.001817f, 0.000244f, 0.003093f, 0.000277f, -0.001055f, 0.037600f, 0.016832f, 0.022784f, -0.001859f, -0.006280f, -0.008225f, -0.008214f, 0.004465f, -0.006895f, 0.010469f, -0.001169f, 0.014371f, 0.000890f, 0.007598f, 0.009465f, 0.007290f, 0.006272f, 0.008269f, -0.027898f, -0.008264f, -0.002603f, -0.005893f, -0.005144f, -0.008796f, -0.019865f, 0.000889f, 0.013650f, -0.008393f, 0.008205f, -0.006740f, -0.009901f, -0.007495f, 0.001157f, -0.006325f, -0.002322f, -0.006485f, -0.000424f, 0.016433f, 0.000904f, 0.007388f, 0.010416f, 0.013512f, -0.006319f, 0.003167f, -0.002993f, -0.010424f, 0.011872f, -0.006622f, -0.000452f, -0.010316f, 0.007577f, -0.000096f, 0.000205f, -0.002844f, -0.004771f, 0.003501f, 0.010614f, -0.004432f, 0.005996f, 0.005652f, + 0.004783f, 0.018199f, -0.018268f, -0.007731f, 0.000481f, -0.010073f, -0.013025f, -0.005175f, -0.015949f, 0.002405f, 0.018783f, -0.012924f, -0.006131f, -0.014760f, 0.000993f, -0.004642f, -0.007025f, -0.017304f, 0.010215f, 0.013294f, 0.005298f, 0.009293f, -0.004673f, 0.001503f, -0.003452f, 0.003860f, 0.000205f, 0.009199f, -0.002337f, 0.003965f, -0.000145f, -0.002342f, 0.003243f, 0.002209f, 0.004256f, 0.003544f, -0.000559f, 0.000858f, 0.002349f, 0.000944f, 0.001843f, -0.000142f, -0.001713f, -0.003307f, 0.001698f, 0.000878f, -0.002227f, 0.001649f, 0.001855f, -0.000549f, 0.000836f, 0.002197f, -0.000618f, -0.001961f, -0.000691f, -0.000595f, 0.011549f, 0.016785f, -0.009360f, 0.008785f, -0.007665f, -0.003552f, -0.003123f, -0.020566f, 0.014889f, -0.004281f, -0.002335f, 0.023936f, 0.014696f, 0.016027f, -0.006617f, 0.000698f, 0.002709f, -0.003587f, 0.005169f, -0.012075f, -0.000461f, -0.008238f, 0.009596f, -0.009382f, -0.006660f, -0.000915f, 0.001518f, -0.011605f, 0.002106f, 0.001314f, 0.015202f, 0.000183f, -0.021116f, 0.012155f, 0.011175f, 0.016200f, -0.002711f, 0.004129f, -0.011748f, -0.008679f, + -0.003813f, -0.008425f, 0.003181f, 0.002283f, -0.003321f, -0.001211f, 0.008618f, 0.013729f, -0.018867f, -0.003982f, -0.000168f, -0.007612f, -0.008153f, 0.012423f, -0.010115f, 0.004726f, -0.009933f, -0.012883f, -0.009800f, -0.006336f, 0.004304f, 0.001874f, 0.022971f, -0.003859f, -0.006380f, 0.006956f, -0.007122f, -0.001976f, -0.006343f, 0.006507f, -0.005885f, 0.008369f, -0.004333f, -0.003769f, 0.005537f, 0.013956f, 0.003684f, -0.012993f, -0.000103f, -0.006375f, -0.013418f, 0.003811f, 0.009183f, -0.003056f, 0.001981f, 0.003322f, 0.000274f, -0.001369f, 0.004633f, 0.000154f, -0.005557f, 0.000096f, -0.002127f, -0.000946f, -0.002986f, 0.004456f, -0.001240f, -0.003557f, -0.004071f, 0.000595f, 0.003867f, -0.001771f, -0.000481f, -0.005372f, 0.000300f, 0.001027f, 0.001622f, -0.000931f, -0.004805f, -0.002340f, 0.003816f, -0.001594f, -0.005175f, 0.002055f, -0.028811f, 0.027714f, 0.014773f, -0.016433f, -0.016706f, 0.006884f, 0.021878f, -0.000257f, 0.006368f, 0.025621f, 0.008499f, 0.007754f, -0.004393f, 0.013380f, 0.012101f, 0.014089f, -0.025376f, -0.015485f, -0.015426f, 0.012174f, 0.010379f, 0.013382f, + 0.000559f, -0.015393f, 0.006271f, -0.002294f, 0.006907f, -0.022153f, 0.008498f, 0.013497f, -0.010497f, 0.005862f, 0.010799f, 0.003092f, -0.000410f, 0.002376f, -0.003575f, 0.019477f, 0.013122f, 0.010439f, 0.000303f, 0.006793f, 0.014914f, -0.013355f, -0.007293f, 0.000696f, 0.019747f, 0.012725f, 0.007716f, -0.014910f, 0.000462f, 0.010188f, 0.011755f, -0.004140f, 0.003582f, 0.011597f, 0.014237f, 0.004549f, 0.013157f, 0.005282f, -0.001573f, -0.012205f, -0.000170f, -0.020343f, -0.008434f, -0.009750f, 0.001613f, 0.006731f, -0.011888f, -0.004764f, -0.021630f, 0.009381f, -0.006074f, -0.000145f, 0.011333f, 0.016668f, 0.020034f, 0.002507f, -0.002188f, -0.012483f, -0.003827f, 0.006383f, 0.006781f, -0.013249f, 0.004065f, -0.005963f, 0.004761f, 0.000886f, -0.004572f, 0.000081f, 0.002269f, -0.004207f, 0.001782f, -0.001118f, -0.005115f, -0.002588f, -0.003258f, 0.003149f, 0.003754f, -0.000690f, -0.003013f, 0.002064f, -0.002339f, -0.001626f, -0.004005f, -0.000561f, -0.000942f, -0.004568f, 0.003514f, 0.002847f, 0.003616f, 0.024517f, 0.007478f, -0.003971f, -0.011197f, -0.028701f, -0.014148f, 0.017873f, + -0.006343f, -0.026364f, -0.007224f, -0.004024f, 0.003924f, 0.014870f, 0.022298f, -0.001120f, 0.006476f, -0.004941f, 0.011051f, -0.012318f, -0.013451f, -0.014144f, -0.025610f, 0.013817f, 0.007639f, -0.021091f, 0.000538f, -0.015348f, -0.006051f, 0.013939f, 0.007662f, 0.011414f, -0.003268f, -0.002746f, -0.003770f, 0.024418f, 0.018740f, 0.020182f, -0.009197f, -0.016879f, 0.013401f, -0.002099f, -0.006163f, 0.017419f, 0.002958f, 0.017141f, -0.000649f, 0.009670f, -0.012015f, -0.000426f, 0.008409f, -0.036122f, -0.005588f, 0.001943f, -0.026696f, 0.007091f, -0.006886f, 0.025005f, 0.015711f, -0.015012f, 0.001092f, 0.022846f, -0.002457f, 0.011733f, -0.007717f, 0.015761f, -0.007349f, 0.003261f, -0.006119f, 0.000566f, 0.010798f, -0.014573f, 0.015818f, 0.008349f, 0.009039f, 0.002786f, 0.021059f, -0.008131f, -0.024326f, 0.004374f, 0.016689f, -0.007768f, -0.015149f, -0.010679f, -0.007789f, 0.017555f, 0.000270f, -0.007266f, 0.000619f, 0.000601f, -0.003482f, -0.003149f, 0.000987f, 0.003525f, -0.002046f, -0.002096f, -0.001369f, 0.003906f, -0.002050f, -0.006350f, 0.001725f, -0.007049f, 0.006511f, 0.004483f, + -0.000188f, -0.000559f, 0.001662f, -0.001923f, 0.002827f, 0.000467f, 0.001926f, 0.000570f, 0.000798f, 0.007864f, 0.002578f, -0.003848f, 0.002066f, 0.001087f, 0.003522f, -0.000955f, 0.000786f, -0.058481f, -0.012391f, 0.031395f, -0.025356f, -0.009166f, 0.026636f, 0.010054f, -0.008480f, 0.002829f, -0.022101f, 0.019702f, -0.002529f, -0.035578f, 0.002514f, -0.001867f, 0.013414f, 0.013196f, -0.007109f, -0.027879f, -0.011985f, -0.010652f, 0.000547f, -0.014876f, -0.008215f, -0.018968f, -0.005499f, 0.020639f, -0.017020f, -0.008542f, -0.006580f, -0.011059f, -0.011711f, -0.015843f, 0.010737f, 0.002164f, 0.013366f, 0.002316f, -0.009980f, -0.015362f, -0.015201f, -0.003156f, 0.009998f, 0.014826f, -0.005330f, -0.013593f, 0.014148f, 0.005872f, -0.021390f, -0.023792f, -0.048500f, -0.004336f, -0.015557f, -0.009415f, 0.007085f, 0.007298f, 0.004336f, 0.021684f, -0.002367f, -0.010454f, -0.001413f, -0.011264f, 0.024695f, 0.013109f, -0.004933f, 0.013178f, -0.014068f, 0.006873f, 0.005591f, -0.013724f, -0.006113f, -0.012320f, 0.008622f, 0.006058f, -0.022647f, 0.014757f, 0.022647f, -0.001593f, -0.001228f, -0.023160f, + -0.009117f, 0.010047f, -0.007305f, 0.006597f, 0.022436f, -0.007674f, 0.004818f, 0.002164f, 0.001601f, -0.007273f, 0.001172f, -0.001290f, -0.009593f, -0.005813f, -0.001024f, 0.003216f, 0.000380f, 0.002499f, -0.010009f, 0.001028f, -0.005443f, 0.002352f, -0.005875f, -0.005658f, -0.003536f, -0.000491f, 0.001057f, -0.004369f, 0.001110f, 0.002250f, -0.000781f, 0.000839f, 0.003993f, 0.002191f, -0.008018f, -0.005317f, -0.002650f, 0.000656f, 0.002708f, -0.001426f, 0.002745f, 0.000425f, 0.002295f, -0.001954f, 0.000397f, 0.010068f, 0.039184f, -0.018484f, 0.015130f, -0.009858f, 0.000294f, 0.021899f, -0.006031f, -0.010251f, -0.004855f, -0.002412f, 0.004308f, 0.014787f, 0.051528f, -0.003148f, 0.003485f, 0.013857f, 0.003714f, -0.000089f, -0.023514f, -0.025214f, 0.004241f, 0.003083f, -0.015228f, -0.008301f, -0.003193f, 0.013854f, -0.005866f, 0.002437f, 0.000093f, 0.005876f, -0.005981f, 0.029546f, 0.017003f, -0.014254f, 0.016847f, 0.014568f, -0.017635f, 0.002857f, 0.008122f, 0.005681f, -0.004591f, -0.006417f, 0.025302f, -0.022065f, 0.009652f, 0.027213f, -0.009149f, 0.003136f, 0.018069f, -0.002210f, + 0.015772f, 0.008153f, 0.000675f, 0.008147f, 0.013597f, 0.017823f, 0.011823f, 0.001199f, -0.000226f, -0.012747f, -0.013369f, 0.000252f, 0.001973f, -0.043662f, 0.028783f, -0.006925f, -0.012979f, -0.015344f, -0.031375f, -0.036208f, -0.022899f, 0.004105f, 0.018243f, -0.006774f, 0.002649f, -0.003159f, 0.018133f, -0.006855f, -0.013862f, 0.007885f, 0.004702f, -0.006217f, 0.002630f, 0.011811f, -0.011207f, 0.002080f, -0.014373f, -0.005215f, -0.006200f, 0.003312f, -0.001272f, 0.007382f, 0.005192f, 0.001374f, -0.001687f, 0.003643f, 0.005666f, -0.000359f, -0.010285f, 0.005789f, -0.000073f, 0.008941f, 0.009213f, 0.004139f, -0.003951f, 0.007721f, 0.002184f, -0.001475f, 0.000169f, 0.000250f, -0.006732f, 0.007757f, -0.000291f, -0.005491f, 0.008115f, 0.015118f, -0.002596f, -0.003477f, 0.008310f, -0.003306f, -0.005047f, -0.002249f, 0.007230f, 0.052779f, 0.052520f, -0.001260f, -0.043894f, 0.008765f, 0.008719f, -0.004779f, 0.011221f, 0.006799f, 0.003602f, -0.000264f, -0.007598f, 0.042866f, 0.007678f, -0.006617f, -0.047685f, -0.026454f, 0.011023f, -0.002710f, -0.016701f, -0.028235f, 0.003798f, 0.005070f, + 0.007137f, -0.006857f, -0.031394f, -0.033065f, 0.035933f, 0.034417f, 0.010497f, 0.031628f, -0.026993f, 0.003895f, 0.013897f, -0.005408f, -0.017170f, -0.030344f, -0.015286f, 0.005655f, -0.001450f, -0.014108f, 0.014619f, 0.000526f, 0.014186f, 0.011873f, 0.000653f, -0.032642f, -0.019263f, -0.015221f, -0.002798f, 0.003632f, 0.004207f, -0.005346f, -0.009450f, 0.002513f, 0.005170f, -0.029164f, -0.007550f, 0.005058f, 0.006473f, -0.013107f, -0.036934f, -0.008342f, -0.009391f, 0.027417f, -0.001199f, 0.012475f, -0.012445f, -0.009086f, -0.016614f, -0.018157f, -0.010925f, 0.003219f, -0.001524f, 0.023056f, -0.013700f, 0.004205f, 0.026212f, -0.001591f, 0.013020f, 0.012044f, 0.025459f, 0.005935f, -0.007587f, -0.012869f, -0.011680f, -0.004269f, 0.015331f, 0.002640f, 0.015455f, 0.008544f, -0.001376f, -0.000175f, 0.000611f, 0.001508f, -0.007114f, -0.008485f, -0.000130f, -0.001922f, -0.000995f, 0.002773f, -0.001849f, 0.002223f, -0.010296f, -0.002123f, 0.006068f, -0.000132f, 0.003778f, -0.017122f, -0.002108f, -0.000470f, -0.003553f, 0.003776f, 0.002540f, 0.002451f, 0.002856f, 0.004185f, 0.004253f, 0.004822f, + -0.001691f, -0.007815f, 0.009340f, -0.005957f, 0.022724f, -0.011617f, 0.003843f, -0.008719f, 0.001614f, 0.006151f, -0.014556f, -0.009603f, -0.025863f, -0.028282f, -0.018829f, -0.007175f, -0.001469f, 0.000843f, -0.015895f, -0.014440f, -0.029640f, 0.014305f, -0.029708f, -0.037880f, 0.024372f, -0.022659f, -0.029182f, 0.027138f, 0.004949f, -0.005970f, 0.028790f, 0.016849f, -0.022703f, 0.020940f, -0.057598f, -0.003759f, -0.014947f, -0.006005f, -0.027186f, 0.047363f, 0.021922f, -0.013714f, 0.006733f, 0.015011f, -0.010096f, 0.016559f, 0.000037f, 0.000850f, -0.013713f, 0.016083f, 0.018175f, 0.024982f, -0.039165f, -0.001234f, -0.000493f, 0.011651f, -0.017885f, -0.006619f, -0.018204f, -0.017546f, 0.030720f, 0.010126f, -0.023428f, 0.012068f, -0.014589f, -0.015100f, -0.025148f, -0.045145f, 0.011570f, 0.030020f, 0.001774f, 0.030238f, 0.040648f, -0.002323f, -0.017022f, -0.038671f, 0.002755f, -0.004860f, 0.002207f, -0.009572f, 0.007736f, -0.016937f, 0.036344f, 0.020385f, 0.031752f, 0.006599f, -0.004240f, -0.009643f, 0.012785f, 0.015225f, 0.006519f, -0.002660f, -0.004888f, 0.001535f, 0.016929f, -0.002941f, + 0.006914f, -0.010772f, 0.004375f, -0.017867f, 0.001427f, 0.002315f, -0.008235f, 0.017034f, 0.009466f, -0.004261f, -0.011482f, -0.009653f, -0.003563f, -0.000810f, 0.005089f, -0.011318f, 0.002590f, 0.002133f, -0.001202f, -0.007794f, 0.002612f, -0.017013f, -0.003844f, -0.003969f, -0.005162f, 0.003043f, -0.000707f, -0.033012f, 0.004632f, -0.073339f, -0.048868f, -0.035446f, 0.019293f, 0.036016f, -0.051474f, 0.011757f, 0.036904f, 0.022404f, -0.000282f, 0.013180f, 0.034809f, -0.016119f, -0.001825f, -0.010309f, 0.001262f, -0.022702f, 0.016212f, 0.000091f, 0.002131f, 0.005660f, 0.046579f, -0.002588f, -0.020200f, -0.020153f, 0.011288f, 0.033872f, -0.013535f, -0.034793f, 0.010499f, 0.034376f, 0.020453f, -0.004914f, 0.017054f, 0.011112f, 0.016440f, 0.003356f, 0.013964f, 0.023239f, -0.002687f, -0.039840f, 0.002230f, 0.011966f, -0.036861f, -0.027336f, 0.036544f, 0.028235f, -0.027780f, -0.018609f, 0.009113f, -0.002125f, 0.018052f, 0.043897f, -0.009242f, -0.008791f, 0.008642f, -0.002530f, 0.016591f, 0.007918f, -0.015842f, -0.012889f, -0.005823f, 0.012681f, 0.011997f, -0.011997f, -0.031740f, -0.005894f, + -0.047889f, 0.045302f, 0.007934f, -0.008610f, 0.004589f, 0.018625f, -0.000724f, -0.021411f, 0.008114f, -0.009452f, -0.013469f, 0.010470f, -0.002623f, -0.021190f, -0.034180f, -0.011500f, -0.013784f, 0.028188f, -0.004278f, 0.009133f, 0.005671f, 0.003227f, -0.002416f, -0.002723f, 0.004699f, -0.007887f, 0.001504f, 0.010049f, -0.000978f, -0.005638f, -0.002819f, -0.023728f, -0.006983f, -0.000878f, -0.004140f, -0.017340f, -0.015079f, -0.006688f, -0.003240f, -0.001782f, -0.004750f, -0.001147f, 0.000564f, 0.012636f, 0.004833f, -0.002356f, -0.004949f, 0.001790f, -0.004343f, -0.004131f, 0.008639f, -0.004439f, -0.009698f, -0.003156f, -0.007234f, 0.000679f, -0.008962f, 0.000044f, 0.006416f, 0.001716f, -0.008792f, -0.003055f, -0.028140f, -0.001306f, 0.004994f, -0.034698f, -0.008983f, 0.025956f, 0.033977f, 0.023895f, 0.063305f, 0.038049f, 0.057382f, 0.021317f, 0.015225f, -0.029628f, 0.032275f, -0.010860f, -0.003468f, -0.023724f, -0.015615f, 0.031013f, -0.010005f, 0.070386f, 0.032929f, 0.020299f, -0.003594f, 0.016267f, -0.010902f, -0.032879f, -0.016440f, -0.020406f, 0.015029f, -0.019237f, -0.000242f, -0.020580f, + 0.012251f, 0.028657f, 0.026065f, -0.001687f, 0.037608f, 0.031260f, 0.001681f, -0.010853f, -0.014061f, -0.025594f, -0.008581f, 0.058989f, 0.023099f, 0.067906f, -0.021634f, 0.000390f, -0.002057f, 0.015876f, 0.054720f, 0.018721f, 0.001564f, 0.035079f, 0.040390f, 0.042449f, -0.003572f, -0.024973f, -0.008934f, -0.006839f, -0.006951f, 0.028180f, 0.019461f, 0.026753f, 0.040987f, -0.025287f, 0.061852f, -0.041246f, -0.077294f, -0.011894f, -0.023903f, 0.015928f, 0.037754f, 0.018447f, -0.020640f, -0.002017f, -0.022435f, -0.016882f, -0.010940f, 0.000423f, 0.031311f, 0.005368f, -0.008437f, 0.004997f, 0.002659f, 0.009440f, 0.010228f, 0.006901f, 0.012480f, 0.003460f, 0.007985f, 0.002957f, 0.008826f, 0.000718f, -0.024626f, -0.009473f, 0.000111f, -0.023138f, 0.002952f, -0.024160f, -0.012418f, -0.014583f, -0.013275f, -0.011332f, -0.008051f, -0.003042f, 0.001828f, 0.007223f, 0.026080f, 0.003716f, -0.015801f, 0.007677f, 0.001965f, 0.023444f, -0.003935f, 0.010264f, 0.000275f, 0.000555f, -0.011971f, 0.003198f, 0.037221f, 0.059285f, -0.029283f, -0.024033f, 0.021963f, -0.018500f, -0.002810f, -0.009050f, + 0.008490f, 0.025475f, 0.028608f, 0.040873f, -0.045200f, 0.050551f, -0.018122f, 0.003694f, -0.023308f, 0.020360f, 0.039218f, 0.014814f, 0.007548f, 0.001574f, 0.047675f, 0.010481f, -0.001230f, -0.016820f, -0.006892f, -0.049838f, -0.006247f, -0.024880f, -0.058210f, 0.003732f, -0.003208f, 0.022617f, -0.060646f, -0.013253f, 0.014602f, 0.021216f, 0.051045f, -0.015307f, 0.015072f, 0.026335f, 0.004467f, -0.008452f, 0.014631f, -0.014888f, -0.003191f, -0.077551f, 0.006959f, -0.033835f, -0.037869f, -0.043887f, 0.017440f, -0.069607f, 0.022755f, -0.026915f, -0.034001f, -0.047777f, 0.042230f, 0.044300f, 0.045026f, 0.008222f, 0.008438f, 0.041520f, -0.058530f, -0.006275f, -0.017900f, 0.023313f, -0.069589f, -0.024541f, -0.007008f, 0.021874f, 0.017950f, 0.013864f, 0.028394f, -0.026595f, 0.010521f, -0.032001f, -0.009092f, -0.019377f, -0.007193f, -0.006903f, 0.001068f, -0.030346f, 0.013844f, 0.018287f, -0.003028f, 0.000846f, -0.014435f, -0.005051f, 0.014573f, -0.019736f, -0.000181f, 0.009008f, -0.023649f, 0.010485f, -0.021170f, -0.000164f, 0.013607f, 0.002768f, -0.017317f, -0.011925f, 0.006996f, -0.010157f, + 0.011095f, 0.007236f, 0.012767f, -0.001998f, -0.015140f, 0.028925f, -0.013693f, -0.007389f, -0.018723f, 0.012721f, -0.006226f, 0.001521f, -0.017353f, 0.002022f, -0.021131f, -0.003705f, 0.015897f, -0.005254f, -0.008834f, -0.022701f, 0.002830f, 0.002711f, -0.002732f, -0.029684f, -0.055193f, -0.001055f, -0.019735f, 0.065261f, 0.013570f, 0.046134f, -0.015208f, 0.062996f, -0.039729f, -0.074388f, 0.016666f, 0.012495f, 0.008363f, -0.037039f, -0.042193f, -0.033074f, 0.012209f, -0.033318f, 0.014461f, -0.017737f, 0.049370f, -0.016283f, -0.007622f, 0.035558f, 0.000958f, -0.089060f, -0.037101f, -0.001357f, 0.058429f, -0.006895f, -0.018540f, -0.051149f, 0.008683f, -0.012759f, -0.044038f, -0.052138f, -0.006198f, 0.009324f, -0.018062f, -0.019985f, -0.052168f, 0.033837f, -0.013078f, 0.012019f, -0.026065f, 0.000917f, 0.015242f, 0.009182f, 0.045708f, 0.000222f, -0.015981f, -0.059913f, -0.021229f, 0.028577f, -0.041035f, -0.021090f, 0.014935f, 0.032551f, 0.025426f, 0.065155f, 0.049749f, 0.000650f, 0.037707f, 0.038555f, 0.013045f, 0.001227f, 0.022546f, -0.019711f, 0.098583f, -0.045746f, -0.108063f, 0.028358f, + -0.092013f, -0.003887f, -0.072065f, -0.000839f, 0.087740f, 0.010668f, -0.042086f, 0.013581f, 0.014759f, -0.027740f, -0.022683f, -0.031348f, 0.006535f, -0.009750f, 0.027990f, -0.022647f, 0.018648f, -0.037672f, 0.010238f, -0.001668f, -0.006286f, -0.008897f, 0.025352f, 0.048416f, 0.015106f, 0.019406f, 0.033591f, 0.009841f, -0.033901f, 0.009366f, -0.012677f, 0.022092f, -0.007189f, -0.010987f, -0.001459f, -0.002780f, -0.009230f, -0.028288f, -0.018398f, -0.012823f, -0.001690f, 0.003440f, -0.002171f, -0.018152f, -0.039904f, -0.025404f, 0.005842f, -0.007565f, -0.000835f, -0.015774f, 0.005228f, 0.028154f, 0.011051f, 0.040740f, -0.062061f, -0.042288f, -0.025277f, -0.022607f, 0.025809f, 0.038519f, -0.022405f, 0.002003f, 0.035523f, -0.071290f, 0.005832f, 0.015962f, -0.052717f, 0.027015f, -0.017149f, 0.023762f, 0.009776f, 0.026856f, 0.003583f, -0.035164f, 0.036394f, -0.045645f, -0.009205f, 0.086611f, -0.035182f, 0.031345f, -0.020159f, 0.035303f, 0.033341f, -0.012053f, -0.037652f, 0.040036f, 0.106325f, -0.058539f, 0.015653f, -0.077493f, 0.039494f, 0.022787f, -0.041056f, 0.045538f, 0.004930f, -0.092928f, + 0.013850f, 0.003929f, 0.042739f, -0.011916f, -0.005954f, -0.049114f, -0.046627f, -0.024838f, 0.115842f, -0.018204f, 0.059070f, -0.052000f, 0.039034f, 0.018251f, -0.010090f, -0.040115f, -0.006843f, 0.031925f, 0.065314f, -0.024079f, -0.021292f, -0.007456f, 0.013172f, 0.055836f, -0.013878f, -0.013927f, -0.041460f, 0.012288f, -0.062649f, -0.028657f, 0.045418f, 0.053922f, 0.006532f, -0.005087f, -0.029199f, -0.049041f, -0.140343f, 0.087248f, 0.033743f, 0.049877f, 0.005317f, -0.046331f, 0.050709f, -0.028902f, 0.021643f, 0.029447f, 0.029533f, 0.067248f, -0.000962f, 0.015309f, 0.019052f, -0.008109f, -0.029373f, -0.010354f, 0.049833f, 0.030060f, -0.027465f, -0.006557f, -0.018587f, -0.005327f, 0.023430f, 0.006384f, -0.032196f, -0.021456f, 0.031382f, 0.006801f, -0.009527f, 0.015686f, -0.027182f, -0.017179f, -0.005411f, 0.013166f, 0.022248f, 0.013842f, 0.004509f, 0.016932f, -0.013654f, -0.018762f, 0.003599f, -0.002159f, -0.024375f, 0.002653f, -0.025148f, -0.001277f, -0.015255f, -0.004005f, 0.004295f, -0.013369f, -0.024051f, 0.007896f, -0.058656f, 0.040819f, 0.041118f, -0.080834f, 0.008166f, -0.042724f, + 0.005615f, -0.088914f, 0.089244f, 0.076745f, -0.007524f, -0.040833f, -0.013593f, -0.016664f, 0.043528f, -0.044700f, 0.056028f, -0.074381f, -0.042423f, 0.020602f, 0.026604f, 0.005542f, 0.025707f, 0.069944f, 0.020709f, 0.032034f, 0.009076f, 0.033316f, 0.024438f, -0.016230f, 0.007469f, 0.028170f, -0.001546f, -0.002814f, 0.056665f, 0.024860f, 0.074235f, -0.007115f, 0.042509f, -0.000239f, -0.053504f, 0.054841f, -0.028072f, -0.006528f, 0.017469f, -0.051493f, -0.034140f, 0.019552f, 0.080745f, 0.043551f, 0.029449f, -0.103764f, -0.023642f, -0.072839f, -0.000268f, 0.115752f, 0.076756f, 0.087511f, 0.007299f, -0.085442f, 0.026901f, 0.086144f, 0.018548f, -0.021881f, 0.077317f, 0.008066f, 0.051821f, -0.132707f, -0.109488f, 0.078754f, -0.005304f, -0.035878f, -0.083779f, -0.018559f, -0.031204f, 0.035800f, 0.033783f, 0.039227f, 0.040905f, -0.016909f, 0.013041f, 0.072996f, 0.068036f, 0.070507f, 0.006291f, 0.101401f, 0.051122f, -0.018166f, -0.039790f, 0.000477f, -0.019378f, 0.005900f, 0.052109f, -0.008274f, 0.002721f, 0.037485f, 0.041934f, 0.003876f, 0.000676f, 0.015952f, 0.046419f, 0.016067f, + 0.022033f, 0.031156f, 0.011653f, 0.024222f, -0.000654f, -0.013813f, -0.005458f, -0.005334f, 0.002464f, 0.032225f, -0.011811f, 0.005615f, -0.025902f, 0.039021f, 0.019533f, 0.017006f, 0.000115f, 0.019646f, 0.000604f, 0.066925f, 0.017832f, 0.068710f, -0.018000f, 0.060089f, 0.028231f, 0.008790f, 0.026833f, 0.025790f, 0.030031f, -0.007971f, -0.004750f, 0.041041f, 0.013299f, 0.034506f, -0.076601f, 0.045169f, 0.060434f, 0.004552f, 0.020655f, -0.054669f, 0.042708f, -0.024880f, 0.020485f, 0.001961f, 0.000209f, 0.036111f, -0.011144f, 0.023519f, -0.007531f, -0.043833f, 0.011739f, -0.003013f, 0.049060f, 0.042856f, 0.060999f, 0.020361f, -0.046634f, -0.038473f, 0.039609f, 0.044514f, 0.020607f, 0.003982f, 0.014093f, -0.012064f, -0.038225f, 0.006602f, -0.014141f, 0.054246f, 0.037861f, 0.033149f, 0.042948f, 0.044149f, -0.060757f, 0.067065f, 0.065830f, 0.048372f, -0.032650f, -0.028922f, -0.042236f, 0.058483f, 0.034127f, 0.095945f, -0.058272f, -0.057516f, -0.044575f, -0.084464f, -0.022044f, 0.091737f, 0.014602f, 0.072110f, -0.076610f, -0.081698f, 0.017914f, 0.052328f, -0.071641f, 0.011531f, + -0.057054f, 0.023067f, -0.065861f, -0.004875f, 0.031339f, 0.033471f, -0.059886f, 0.024007f, -0.045552f, -0.090397f, -0.002986f, 0.107896f, 0.055683f, 0.043963f, -0.030023f, -0.076479f, 0.116875f, 0.094964f, 0.026567f, -0.104570f, -0.004099f, -0.024195f, 0.074854f, 0.038735f, 0.046400f, -0.054081f, 0.041047f, -0.023961f, 0.026885f, -0.037247f, 0.013385f, -0.041710f, 0.061148f, -0.011489f, 0.010042f, -0.072369f, 0.021119f, 0.009777f, -0.003413f, -0.015706f, 0.014796f, 0.008344f, 0.007592f, -0.044481f, 0.018966f, 0.046774f, 0.002851f, 0.028447f, 0.023393f, 0.020083f, 0.002990f, 0.009908f, 0.000878f, 0.003323f, 0.001934f, -0.013535f, -0.001746f, 0.015401f, -0.000363f, 0.029907f, 0.024418f, -0.012132f, -0.002698f, 0.014395f, 0.005589f, 0.023433f, -0.042273f, 0.028534f, 0.002831f, -0.000173f, -0.148546f, -0.029126f, -0.004055f, 0.002875f, 0.051340f, -0.136649f, -0.015941f, 0.063406f, -0.101811f, 0.023965f, -0.023345f, 0.119396f, 0.062402f, -0.071356f, 0.017645f, 0.080637f, 0.007926f, -0.030736f, 0.026067f, 0.020075f, 0.010303f, -0.000578f, -0.008093f, 0.007055f, 0.012880f, 0.028207f, + 0.081854f, 0.066527f, 0.071571f, 0.049810f, 0.090171f, 0.044749f, 0.092209f, 0.038782f, 0.081793f, 0.001895f, 0.050768f, 0.046471f, 0.050318f, 0.039275f, -0.003770f, 0.015783f, -0.062902f, -0.036786f, 0.119561f, 0.002219f, -0.047850f, -0.012678f, 0.037510f, 0.063740f, 0.128698f, -0.016684f, -0.070871f, -0.034956f, -0.052242f, 0.074053f, 0.083886f, 0.094694f, 0.029185f, -0.002696f, 0.063607f, -0.107343f, 0.098393f, 0.038001f, -0.051845f, -0.000242f, -0.168086f, 0.004715f, -0.111080f, -0.153383f, -0.038314f, -0.089850f, -0.039256f, 0.175315f, 0.159378f, 0.150533f, -0.117795f, -0.011345f, -0.013352f, 0.118529f, 0.184700f, -0.040389f, -0.051984f, 0.103024f, 0.105191f, 0.091138f, -0.010615f, -0.013812f, -0.050965f, -0.063573f, 0.009518f, -0.022891f, 0.028488f, 0.045191f, 0.038805f, 0.027572f, 0.002806f, 0.018142f, 0.049597f, 0.009248f, 0.000462f, -0.013206f, 0.002990f, 0.004165f, 0.013637f, 0.010965f, 0.010288f, 0.051933f, -0.004269f, -0.029659f, 0.031524f, 0.037959f, 0.008905f, 0.060156f, 0.014258f, 0.029513f, 0.065154f, 0.087639f, 0.063754f, 0.047259f, 0.019033f, 0.009532f, + 0.025569f, 0.060299f, 0.026453f, 0.061785f, 0.045510f, 0.030057f, 0.042832f, 0.016425f, 0.058071f, 0.051244f, 0.041403f, 0.063480f, 0.036314f, 0.012433f, 0.017745f, -0.042081f, 0.106985f, 0.127574f, -0.105477f, -0.098861f, 0.033993f, 0.111390f, 0.003903f, -0.053831f, 0.001482f, 0.029420f, 0.034874f, -0.094156f, 0.035714f, -0.013535f, 0.050235f, -0.052208f, -0.023461f, -0.060989f, 0.064338f, -0.009750f, -0.026800f, -0.057113f, 0.042161f, 0.023066f, -0.008536f, -0.048462f, 0.023293f, 0.019792f, 0.012345f, -0.042976f, -0.004850f, -0.003278f, 0.049532f, -0.037631f, -0.007677f, -0.054493f, -0.012808f, 0.017222f, 0.043662f, -0.056679f, -0.019934f, 0.057854f, 0.051854f, -0.016784f, -0.034499f, -0.001499f, -0.016962f, 0.048078f, -0.026915f, -0.016874f, 0.025210f, 0.016605f, 0.031500f, -0.028440f, 0.009924f, -0.038702f, 0.044519f, 0.049658f, 0.025608f, 0.006569f, -0.038509f, 0.043932f, -0.030663f, 0.068760f, -0.049859f, 0.054963f, -0.086965f, 0.058306f, 0.009084f, -0.006580f, -0.060656f, -0.020002f, 0.021858f, -0.017352f, 0.007698f, -0.016859f, 0.019289f, -0.009277f, 0.021426f, -0.020894f, + -0.024885f, -0.018504f, 0.020530f, -0.000179f, -0.000471f, -0.006263f, -0.012835f, 0.007556f, 0.023856f, -0.013017f, -0.000793f, -0.000351f, 0.005040f, -0.002916f, 0.006006f, -0.005673f, 0.018034f, -0.001349f, 0.022793f, -0.020572f, 0.005733f, -0.010563f, 0.023118f, -0.024416f, 0.022878f, -0.025180f, 0.016202f, 0.004707f, 0.028472f, -0.008293f, 0.027164f, -0.024819f, -0.015386f, -0.006014f, 0.042653f, -0.021794f, 0.033600f, -0.013517f, 0.007134f, 0.001831f, 0.024705f, -0.012138f, 0.014037f, 0.001453f, 0.003222f, -0.004302f, 0.010591f, -0.005303f, -0.010606f, 0.024790f, -0.013220f, 0.001396f, -0.009781f, 0.005605f, -0.008908f, 0.010954f, -0.015278f, 0.018670f, -0.013760f, 0.015090f, -0.019990f, 0.017624f, -0.026258f, 0.025171f, -0.014020f, 0.016293f, -0.017154f, 0.017284f, -0.017078f, 0.017766f, -0.015035f, 0.015905f, -0.020734f, 0.017413f, -0.016842f, 0.017836f, -0.019539f, 0.020589f, -0.018703f, -0.003406f, -0.022972f, 0.102629f, 0.109197f, -0.064247f, -0.038067f, 0.021667f, 0.104285f, 0.064806f, 0.038862f, 0.037395f, -0.016603f, -0.043622f, -0.013203f, 0.024525f, -0.000372f, -0.010260f, + 0.031120f, 0.000563f, 0.021938f, 0.002712f, -0.011652f, -0.039077f, -0.010365f, -0.002262f, 0.002903f, -0.001521f, -0.031753f, 0.035494f, 0.005938f, -0.014248f, -0.000780f, -0.001067f, 0.000524f, 0.022926f, 0.042080f, 0.017967f, 0.004280f, -0.015111f, -0.021738f, -0.005614f, 0.013695f, 0.028224f, 0.037993f, -0.021153f, -0.020890f, 0.004771f, 0.038410f, 0.017344f, 0.008595f, -0.017302f, -0.034788f, 0.029741f, -0.006086f, 0.000872f, 0.002060f, 0.009606f, 0.009220f, -0.004187f, -0.001225f, -0.022671f, 0.003534f, 0.020062f, -0.009464f, 0.012002f, -0.006662f, -0.016144f, 0.010330f, -0.003035f, 0.005614f, -0.001198f, 0.017468f, 0.011850f, -0.025907f, 0.007698f, 0.001299f, -0.047062f, -0.062531f, 0.001833f, 0.003727f, 0.014301f, 0.038177f, 0.004216f, -0.016716f, -0.016389f, 0.015081f, 0.016433f, 0.024948f, 0.016999f, 0.001137f, 0.007275f, -0.002591f, -0.018857f, -0.007775f, 0.002919f, -0.025854f, -0.024779f, 0.016069f, 0.017013f, -0.000315f, 0.019130f, -0.026975f, -0.004875f, -0.001176f, 0.001386f, -0.008268f, 0.004328f, 0.014721f, 0.020330f, 0.009999f, 0.017126f, -0.010706f, -0.021193f, + 0.012559f, 0.002022f, -0.005102f, 0.014548f, 0.008179f, -0.009974f, -0.036067f, -0.135628f, 0.057708f, 0.208633f, 0.192763f, 0.164171f, 0.065770f, -0.156165f, -0.097423f, -0.140413f, -0.156924f, -0.140682f, -0.040724f, 0.030180f, 0.118620f, 0.123159f, 0.147926f, 0.097662f, 0.098885f, 0.002259f, -0.103611f, -0.099330f, -0.122040f, -0.095800f, -0.053039f, -0.003773f, -0.034105f, 0.036973f, 0.045984f, 0.074068f, 0.081724f, 0.082650f, 0.049526f, 0.003995f, 0.022101f, -0.018421f, 0.011920f, -0.056870f, -0.041044f, -0.052606f, -0.085531f, -0.068166f, -0.051947f, -0.036966f, -0.060772f, 0.008290f, 0.104173f, 0.117357f, 0.065770f, 0.122719f, 0.030616f, 0.071543f, 0.037036f, 0.020895f, -0.030749f, -0.065776f, -0.089766f, -0.126464f, -0.096705f, -0.144244f, -0.059525f, -0.064317f, 0.041487f, 0.041242f, 0.120641f, 0.138703f, 0.123800f, 0.109961f, 0.107797f, 0.067196f, 0.008389f, -0.037867f, -0.115057f, -0.072429f, -0.150335f, -0.128463f, -0.178321f, -0.029060f, -0.015875f, 0.043799f, 0.056565f, 0.101526f, 0.119760f, 0.099945f, 0.089515f, 0.066120f, 0.039216f, 0.005341f, -0.033138f, -0.048068f, + -0.064395f, -0.099766f, -0.069866f, -0.086889f, -0.060214f, -0.031122f, -0.008842f, 0.019449f, 0.019211f, 0.094931f, 0.087784f, 0.086706f, 0.067868f, 0.049518f, 0.006008f, 0.030706f, -0.034380f, -0.057328f, -0.044428f, -0.123857f, -0.144077f, -0.028036f, -0.009643f, -0.006466f, 0.070382f, 0.057346f, 0.076805f, 0.053558f, 0.070191f, 0.021166f, 0.018192f, -0.005663f, -0.029647f, -0.038444f, -0.049321f, -0.054930f, -0.033608f, -0.007327f, -0.042621f, -0.022754f, 0.034159f, 0.048386f, 0.032674f, 0.041874f, 0.028803f, 0.020629f, 0.005474f, -0.004080f, -0.014787f, -0.021183f, -0.016184f, -0.026419f, -0.013677f, -0.005446f, -0.009797f, -0.013577f, 0.003016f, 0.009775f, 0.002255f, 0.015043f, 0.019607f, 0.014417f, 0.010424f, 0.008943f, 0.004732f, -0.001571f, -0.009058f, -0.009198f, -0.012828f, -0.009584f, -0.009901f, -0.006430f, -0.005204f, 0.000849f, 0.002469f, 0.004484f, 0.003734f, 0.006228f, 0.006397f, 0.005051f, 0.003827f, 0.003732f, 0.002729f, 0.003296f, 0.000675f, -0.003884f, -0.006169f, -0.003058f, -0.005476f, -0.006305f, -0.005444f, -0.003406f, -0.001496f, 0.002455f, 0.003800f, 0.004397f, + 0.002948f, 0.005692f, 0.003636f, 0.002231f, 0.001240f, 0.000671f, -0.002233f, -0.002421f, -0.002879f, -0.001113f, -0.002197f, -0.001993f, -0.002047f, -0.000316f, -0.000864f, 0.000605f, 0.000474f, 0.001945f, 0.001420f, 0.002364f, 0.001250f, 0.001504f, -0.000205f, -0.000522f, -0.001066f, 0.000587f, -0.001086f, -0.000777f, -0.002032f, -0.000692f, -0.000709f, 0.000915f, 0.000531f, 0.001505f, 0.000561f, 0.000834f, -0.000736f, 0.000100f, -0.000592f, -0.000202f, -0.001258f, 0.000116f, -0.000458f, 0.000522f, -0.000013f, 0.000799f, -0.000239f, 0.000702f, -0.000256f, 0.000440f, -0.000488f, 0.000387f, -0.000462f, 0.000400f} + }, + { + {-0.009644f, -0.009812f, -0.008153f, 0.002275f, -0.004688f, -0.000728f, -0.001357f, 0.004735f, 0.018806f, -0.005015f, 0.001871f, -0.017916f, -0.009823f, 0.005490f, -0.008552f, -0.006631f, -0.002541f, -0.007556f, -0.002032f, 0.015646f, -0.006736f, -0.009985f, 0.016859f, 0.013536f, -0.004795f, -0.003114f, 0.015430f, 0.004417f, 0.005968f, 0.003004f, 0.000731f, -0.003935f, -0.006539f, 0.006146f, -0.004878f, 0.004598f, 0.001637f, 0.001784f, -0.002189f, -0.005292f, -0.004193f, 0.003794f, -0.004823f, -0.007557f, -0.003443f, -0.003367f, -0.009677f, 0.010942f, 0.016851f, -0.009688f, 0.005482f, 0.000488f, -0.003815f, 0.002697f, -0.000445f, 0.000161f, -0.005679f, 0.010461f, -0.006220f, -0.007628f, 0.008660f, 0.002674f, -0.000482f, -0.000954f, 0.004746f, 0.000325f, -0.000164f, -0.002974f, -0.001532f, 0.009196f, -0.013426f, 0.004583f, 0.002436f, -0.003237f, -0.003232f, -0.004656f, -0.006848f, 0.000075f, 0.006550f, 0.006745f, 0.001929f, -0.000106f, 0.001493f, -0.003713f, 0.004866f, -0.001834f, 0.002851f, -0.002062f, -0.001373f, -0.000985f, -0.001252f, -0.000952f, 0.002228f, -0.000084f, 0.000901f, 0.001390f, + 0.000798f, 0.002371f, 0.002932f, -0.000957f, -0.000716f, -0.001305f, -0.000950f, -0.001863f, -0.000591f, -0.001235f, -0.001067f, -0.001895f, -0.000790f, -0.000192f, 0.001152f, -0.000721f, -0.029676f, -0.004668f, -0.010851f, -0.002649f, 0.002386f, -0.008068f, -0.018090f, 0.013273f, -0.004448f, 0.003106f, 0.008864f, -0.002798f, -0.000910f, -0.001083f, 0.004081f, -0.003114f, 0.014923f, -0.000595f, 0.011512f, 0.016906f, -0.020262f, 0.004272f, 0.014079f, 0.000995f, 0.002808f, 0.009771f, 0.018012f, 0.002602f, -0.004046f, 0.009092f, -0.002405f, -0.004667f, 0.004068f, 0.003233f, 0.004025f, -0.005043f, 0.018360f, -0.008441f, 0.004641f, 0.006876f, -0.000072f, -0.000867f, -0.008942f, 0.001488f, -0.010362f, 0.008746f, -0.010584f, -0.008107f, 0.005886f, -0.009849f, 0.006794f, -0.006867f, 0.002865f, -0.005537f, 0.003786f, 0.008019f, 0.015658f, 0.004832f, 0.001792f, 0.007643f, 0.000139f, -0.013484f, 0.001818f, 0.003829f, 0.005169f, -0.003369f, 0.000735f, -0.001831f, 0.002597f, 0.007569f, 0.004576f, 0.010329f, 0.003584f, 0.001399f, -0.006245f, -0.003178f, 0.006102f, 0.004757f, -0.005976f, 0.007231f, + 0.003556f, 0.007905f, -0.002426f, -0.001868f, -0.002432f, 0.000387f, -0.001489f, -0.006300f, -0.001125f, 0.001063f, 0.001095f, 0.004103f, 0.000496f, -0.001195f, -0.001514f, 0.001745f, 0.000916f, -0.003072f, -0.000416f, -0.000214f, 0.000075f, 0.001262f, 0.000390f, -0.001417f, -0.000148f, -0.001341f, -0.010753f, 0.008006f, 0.005256f, 0.001620f, 0.010199f, -0.000541f, 0.005731f, 0.013847f, 0.008612f, 0.018159f, 0.003544f, -0.002673f, -0.018556f, 0.002938f, -0.011363f, -0.003798f, 0.001471f, 0.004206f, -0.007100f, 0.000014f, 0.017920f, -0.009129f, -0.000437f, -0.009115f, 0.004388f, 0.000109f, 0.003516f, 0.007321f, 0.008655f, -0.005398f, 0.006506f, 0.006694f, 0.012982f, 0.000517f, -0.012640f, 0.001256f, 0.013760f, -0.001324f, -0.000805f, -0.001870f, 0.009272f, -0.010709f, 0.000959f, 0.007067f, 0.009281f, 0.011076f, -0.004102f, -0.007213f, -0.000867f, 0.015910f, 0.001546f, 0.005763f, -0.012857f, -0.005754f, 0.003203f, 0.002692f, -0.002143f, 0.008443f, -0.000511f, -0.001722f, 0.004796f, -0.008102f, 0.000590f, -0.001251f, 0.005627f, 0.008551f, -0.012481f, -0.002793f, 0.004145f, 0.008430f, + -0.005297f, -0.005136f, 0.003567f, 0.009986f, -0.000796f, 0.006718f, 0.004839f, 0.006888f, 0.002974f, 0.007682f, 0.011636f, 0.000472f, 0.003328f, -0.003167f, 0.004796f, 0.003382f, -0.002105f, -0.005179f, -0.000882f, -0.003663f, 0.001311f, -0.003347f, 0.001566f, -0.001512f, 0.000916f, -0.002710f, 0.000175f, -0.000243f, 0.000679f, -0.001617f, 0.002681f, -0.002426f, -0.000957f, -0.001069f, -0.001205f, 0.000346f, 0.001560f, 0.001531f, 0.000942f, -0.000708f, -0.000430f, -0.001114f, 0.003590f, 0.000666f, 0.032324f, 0.015578f, 0.012788f, -0.012066f, -0.002043f, -0.016809f, -0.011884f, 0.017901f, 0.001704f, -0.011378f, -0.005188f, 0.003799f, -0.010633f, -0.001010f, 0.018343f, 0.007266f, -0.000672f, 0.005826f, 0.026863f, -0.017862f, 0.004362f, -0.003373f, -0.008574f, 0.015368f, 0.007912f, 0.007962f, -0.005906f, 0.006873f, 0.008931f, -0.002742f, 0.005764f, -0.001826f, -0.007544f, 0.001573f, 0.002960f, -0.001342f, 0.009161f, 0.002226f, -0.003182f, 0.010023f, -0.004489f, -0.004736f, -0.005717f, 0.002811f, 0.003944f, 0.000726f, 0.007302f, 0.000964f, 0.022764f, 0.001489f, 0.000085f, -0.005265f, + -0.004632f, 0.005440f, -0.016770f, 0.000704f, 0.010220f, 0.008047f, -0.009006f, 0.013364f, 0.000329f, 0.005984f, 0.010775f, -0.003016f, 0.008366f, 0.006424f, -0.002830f, -0.009610f, -0.007242f, 0.006051f, 0.015274f, 0.004344f, -0.006489f, -0.003226f, -0.003631f, 0.010458f, -0.008737f, -0.000482f, 0.008722f, 0.010011f, 0.001491f, 0.001281f, -0.002651f, -0.004156f, 0.000292f, -0.000948f, -0.003397f, -0.000700f, -0.001485f, -0.001715f, -0.002583f, -0.001331f, 0.003664f, 0.002438f, -0.000592f, 0.004627f, 0.001478f, 0.001886f, -0.000474f, 0.001598f, -0.000687f, -0.000370f, -0.000062f, 0.000565f, 0.000695f, 0.001322f, 0.002628f, 0.000672f, 0.000418f, -0.000727f, 0.007854f, 0.002008f, 0.021185f, 0.005207f, 0.012667f, -0.000609f, 0.002885f, 0.003500f, 0.003606f, -0.003522f, 0.012963f, -0.005443f, 0.014020f, -0.006854f, -0.005276f, 0.003636f, -0.009082f, -0.002638f, -0.002777f, 0.003921f, 0.005909f, -0.003681f, -0.013339f, 0.006138f, -0.016151f, -0.006552f, -0.002634f, -0.000350f, -0.002417f, 0.003218f, 0.014728f, 0.008283f, 0.001133f, -0.015126f, -0.014431f, 0.000554f, 0.009989f, -0.005140f, + 0.001695f, -0.001801f, -0.006308f, -0.009681f, 0.001171f, 0.006672f, 0.014237f, 0.012770f, -0.001457f, 0.004159f, -0.017468f, 0.006113f, 0.011902f, 0.013405f, -0.001460f, 0.012235f, 0.002788f, 0.017773f, 0.010648f, 0.003479f, 0.008194f, -0.000704f, -0.004422f, -0.003040f, -0.001591f, 0.011202f, -0.004050f, -0.006170f, -0.007527f, 0.011188f, -0.002467f, -0.019346f, 0.004087f, 0.007474f, 0.011122f, 0.014213f, 0.024339f, -0.010010f, -0.008048f, 0.014373f, 0.015311f, 0.011989f, 0.005331f, -0.002403f, -0.002509f, -0.009312f, -0.010309f, -0.002851f, -0.003565f, 0.003251f, -0.000181f, -0.002981f, -0.000177f, -0.005748f, 0.001514f, -0.000695f, 0.003006f, 0.000459f, -0.004199f, -0.000281f, 0.000742f, -0.000659f, -0.000136f, 0.002198f, 0.004225f, 0.004066f, 0.003535f, 0.000957f, 0.001100f, -0.005878f, 0.000563f, 0.004250f, -0.002414f, 0.002375f, 0.000802f, -0.001594f, -0.001123f, -0.000665f, 0.004416f, 0.003167f, 0.000938f, -0.000295f, 0.002567f, 0.000273f, 0.001835f, 0.000976f, -0.001069f, 0.001386f, -0.000515f, -0.000545f, -0.027629f, 0.013225f, 0.019578f, 0.002208f, 0.016361f, 0.001877f, + -0.013938f, -0.001675f, -0.006301f, -0.003849f, 0.015134f, -0.019523f, -0.004973f, 0.006397f, 0.007925f, 0.017058f, -0.003044f, 0.007201f, -0.026852f, -0.014170f, 0.007354f, 0.015800f, -0.010223f, -0.007922f, -0.010986f, -0.014017f, 0.007555f, -0.002003f, 0.000523f, 0.004798f, 0.002874f, 0.005020f, 0.021518f, -0.013109f, 0.020893f, -0.001452f, 0.004581f, 0.004233f, 0.004845f, -0.006504f, 0.007521f, -0.014827f, -0.002373f, -0.008221f, -0.001143f, -0.011095f, 0.013455f, 0.001993f, 0.036576f, 0.000843f, -0.001930f, -0.009475f, 0.001991f, -0.007986f, 0.019302f, -0.011988f, 0.002897f, -0.021483f, 0.016268f, 0.014298f, -0.017138f, 0.010398f, 0.011270f, 0.004221f, -0.009108f, -0.009972f, 0.016323f, 0.003812f, -0.022664f, 0.010748f, -0.010555f, -0.006242f, 0.005606f, -0.006055f, 0.002455f, 0.004367f, 0.006605f, -0.012298f, -0.028817f, 0.003961f, 0.006948f, -0.001188f, -0.005885f, 0.011241f, -0.004580f, -0.004024f, -0.005015f, 0.007384f, -0.009059f, -0.004015f, -0.004979f, -0.004255f, 0.002771f, -0.003882f, 0.005407f, 0.000452f, -0.008010f, 0.005889f, 0.001205f, -0.004579f, 0.000136f, 0.005284f, + 0.002204f, 0.000002f, -0.000352f, -0.001789f, -0.004059f, 0.000112f, 0.001630f, 0.000305f, -0.000053f, 0.002291f, -0.004643f, 0.000295f, 0.001352f, -0.005863f, -0.003872f, -0.004991f, 0.012294f, 0.002392f, -0.000248f, -0.010383f, -0.017466f, 0.006187f, -0.009376f, -0.003770f, 0.016890f, -0.023013f, -0.009600f, -0.016957f, -0.001739f, 0.014546f, -0.001364f, -0.011998f, -0.016668f, -0.018699f, 0.007270f, 0.019777f, -0.005688f, 0.012354f, 0.018582f, -0.005157f, -0.004317f, 0.007278f, 0.010320f, 0.022075f, -0.003230f, 0.012404f, 0.001770f, 0.026245f, 0.019277f, 0.005270f, -0.006218f, 0.002636f, -0.014593f, 0.025476f, 0.005886f, -0.011266f, -0.012524f, 0.014680f, 0.012374f, 0.008915f, 0.006320f, 0.004340f, 0.013151f, -0.005733f, 0.005773f, -0.008762f, 0.001208f, 0.000682f, -0.013311f, -0.017744f, -0.006341f, -0.012545f, 0.007981f, -0.007674f, -0.005736f, -0.019357f, -0.012220f, 0.003662f, -0.006670f, -0.002359f, 0.009214f, 0.019308f, 0.024333f, 0.012644f, 0.010026f, -0.009046f, -0.019954f, 0.000296f, -0.013992f, -0.032183f, 0.000196f, -0.002314f, 0.011899f, 0.008028f, -0.007955f, -0.017961f, + -0.009825f, 0.008598f, -0.000524f, -0.002058f, -0.007511f, 0.003897f, 0.003984f, 0.003168f, -0.002012f, -0.010263f, 0.002043f, 0.001270f, 0.000885f, -0.002378f, -0.001368f, -0.001454f, 0.001156f, -0.005068f, -0.005256f, -0.000620f, 0.000502f, -0.004232f, 0.000238f, -0.000914f, 0.003708f, 0.005041f, -0.005673f, -0.000289f, 0.003882f, -0.000770f, -0.002467f, 0.000845f, 0.000438f, 0.005465f, -0.001874f, 0.003479f, 0.002657f, -0.002489f, -0.002247f, -0.037258f, -0.011265f, 0.001831f, 0.018240f, -0.013211f, 0.008993f, 0.005569f, -0.000593f, 0.026983f, -0.003494f, 0.025378f, -0.014931f, 0.007291f, 0.008242f, 0.000089f, -0.023254f, -0.009904f, -0.008603f, -0.026800f, 0.009194f, -0.006849f, 0.005762f, -0.001903f, 0.009755f, -0.000282f, -0.010275f, 0.005294f, -0.016983f, 0.012365f, 0.007495f, 0.028867f, -0.001130f, 0.000621f, 0.026705f, -0.023768f, 0.020752f, 0.025049f, -0.015737f, 0.016034f, -0.006715f, -0.007921f, -0.013199f, 0.003079f, 0.003142f, 0.017725f, 0.011651f, -0.004923f, -0.007427f, -0.015590f, 0.008447f, 0.009259f, -0.017505f, -0.008188f, 0.016472f, -0.029096f, 0.002726f, -0.022546f, + 0.012593f, 0.000925f, -0.000410f, 0.006421f, -0.007538f, 0.002247f, 0.026546f, -0.011255f, 0.005808f, 0.012598f, 0.008148f, 0.001098f, -0.013996f, 0.005859f, 0.005179f, -0.008472f, -0.022687f, -0.000089f, -0.005190f, -0.018312f, 0.013615f, -0.005240f, 0.005009f, -0.001068f, 0.002576f, 0.005370f, 0.005556f, -0.010400f, 0.002528f, -0.001365f, 0.002288f, -0.001171f, 0.006768f, 0.003018f, -0.001690f, -0.001622f, -0.009809f, -0.000768f, -0.006713f, 0.000787f, 0.001090f, 0.006709f, -0.010380f, 0.003456f, 0.005570f, -0.004326f, -0.006460f, 0.001902f, -0.000964f, -0.004212f, 0.003079f, -0.001237f, -0.004056f, 0.001011f, -0.001398f, -0.005076f, -0.001340f, -0.003443f, -0.006273f, 0.002505f, -0.001951f, 0.000133f, -0.003462f, -0.001169f, -0.003542f, 0.001205f, 0.006620f, -0.001347f, -0.004115f, -0.015335f, 0.044222f, -0.016565f, 0.008702f, 0.006141f, 0.015870f, 0.004752f, 0.009685f, 0.021804f, -0.016858f, -0.010639f, -0.001256f, 0.030406f, -0.011667f, -0.013217f, -0.015042f, 0.007368f, 0.005249f, 0.016550f, -0.034796f, 0.000133f, 0.000875f, -0.002571f, 0.018090f, -0.004556f, 0.013980f, 0.025484f, + -0.018535f, -0.008579f, 0.007451f, -0.014212f, -0.017488f, 0.011646f, -0.016237f, 0.023948f, -0.003994f, -0.025073f, -0.003159f, -0.014486f, 0.008028f, 0.019492f, -0.000253f, 0.009755f, -0.001093f, 0.003619f, 0.023599f, 0.000509f, 0.017151f, 0.006512f, -0.012626f, 0.013070f, 0.011491f, 0.001353f, 0.009672f, 0.033463f, -0.005464f, -0.015370f, 0.008127f, -0.019396f, 0.001623f, 0.031950f, 0.011047f, 0.004851f, -0.006012f, -0.009444f, -0.006083f, -0.011614f, 0.019516f, -0.012975f, -0.003280f, -0.008177f, 0.022128f, -0.040698f, 0.013957f, 0.014028f, 0.024467f, 0.005543f, 0.001967f, 0.021221f, -0.005958f, -0.009517f, -0.012039f, 0.000068f, -0.009997f, -0.001249f, -0.008587f, 0.006803f, 0.000758f, -0.007988f, -0.008062f, -0.007080f, 0.002709f, 0.008154f, 0.006834f, 0.001211f, 0.000593f, -0.003816f, -0.008744f, -0.003190f, -0.002187f, 0.003407f, 0.003822f, -0.001720f, -0.002089f, 0.001496f, -0.005214f, -0.000255f, -0.005059f, -0.002836f, -0.006690f, -0.009373f, -0.002462f, 0.002885f, 0.010233f, 0.001396f, -0.002745f, -0.002952f, 0.004056f, -0.001219f, 0.009807f, 0.004163f, 0.001762f, 0.001126f, + 0.003774f, 0.065045f, 0.019453f, -0.011899f, -0.015779f, -0.013357f, 0.047174f, -0.040678f, 0.003254f, 0.015867f, 0.002371f, -0.022081f, -0.004970f, 0.011004f, -0.002351f, 0.002510f, 0.019565f, -0.020303f, -0.017001f, 0.008280f, 0.025493f, 0.015645f, 0.006579f, -0.012425f, -0.012082f, -0.011698f, -0.013554f, 0.012549f, 0.004999f, 0.018012f, 0.014495f, 0.008185f, -0.019229f, -0.009219f, -0.020487f, -0.004150f, -0.013454f, -0.030998f, -0.005794f, 0.013715f, 0.003031f, -0.014435f, -0.014496f, 0.000263f, 0.007430f, 0.019242f, 0.002408f, 0.009703f, 0.002748f, 0.037273f, -0.032497f, 0.021110f, 0.003917f, -0.033220f, -0.006046f, -0.010099f, -0.008260f, 0.004962f, -0.014566f, 0.008619f, 0.006282f, 0.014693f, -0.018154f, 0.006269f, 0.028853f, 0.013419f, 0.045890f, -0.010425f, -0.001240f, -0.011445f, -0.005884f, 0.001105f, -0.001022f, -0.043751f, 0.019326f, -0.001986f, -0.002667f, 0.011674f, 0.011588f, -0.012522f, -0.018695f, -0.020485f, -0.007680f, 0.014259f, 0.006016f, -0.004913f, -0.012138f, 0.010415f, -0.019011f, 0.009704f, -0.003240f, -0.008726f, -0.010818f, -0.011766f, -0.004335f, -0.004050f, + 0.001672f, -0.005029f, -0.003436f, 0.002197f, -0.003638f, -0.003443f, 0.001827f, -0.009670f, -0.004496f, -0.000870f, -0.003408f, -0.005632f, -0.002610f, -0.009828f, 0.001161f, 0.006971f, 0.009494f, 0.011151f, -0.008475f, -0.010353f, -0.007395f, -0.009387f, 0.000122f, -0.000260f, -0.005842f, -0.006632f, 0.002219f, -0.001098f, 0.006081f, -0.002217f, -0.000713f, 0.004648f, 0.004654f, -0.004209f, -0.021509f, 0.005031f, 0.012129f, -0.000715f, -0.013103f, -0.009547f, -0.028647f, -0.034633f, 0.007426f, -0.015485f, -0.006964f, 0.004818f, 0.000009f, -0.003835f, -0.015041f, -0.007848f, 0.000157f, 0.011844f, 0.013177f, -0.019112f, -0.010523f, 0.011672f, -0.016607f, -0.008529f, -0.027396f, 0.026620f, -0.003169f, 0.023965f, 0.002442f, 0.008864f, 0.026016f, 0.019213f, -0.011070f, 0.005655f, 0.013399f, -0.013910f, -0.005242f, 0.012535f, -0.004374f, -0.030972f, -0.005373f, -0.021751f, 0.032004f, -0.003520f, -0.008044f, -0.018264f, -0.026039f, 0.009297f, 0.005963f, 0.006067f, 0.013397f, 0.000148f, -0.004440f, 0.013479f, 0.003859f, -0.002752f, 0.005177f, -0.007762f, 0.021301f, -0.005079f, 0.013586f, 0.038913f, + 0.009100f, 0.007207f, 0.009542f, 0.014285f, -0.033586f, -0.027628f, 0.010879f, -0.030139f, 0.021204f, -0.004347f, 0.024239f, 0.006192f, 0.046867f, 0.018144f, 0.003585f, -0.013588f, -0.005561f, -0.023971f, -0.001179f, 0.007374f, 0.005101f, 0.005006f, 0.008651f, 0.021131f, -0.008370f, -0.017250f, -0.005526f, -0.004831f, 0.007127f, 0.019189f, 0.007263f, -0.004676f, 0.006012f, 0.005611f, -0.000521f, -0.004470f, -0.010720f, 0.000737f, 0.001743f, -0.005471f, -0.006922f, -0.001412f, -0.011381f, 0.008338f, 0.005226f, -0.005564f, -0.001306f, -0.011766f, -0.005270f, 0.005490f, 0.010839f, -0.005137f, -0.004268f, -0.000159f, -0.008946f, 0.010119f, 0.000062f, 0.007320f, -0.009259f, 0.000099f, -0.009605f, 0.006053f, 0.010767f, -0.011765f, -0.003018f, -0.055159f, -0.039113f, 0.014714f, -0.015737f, -0.031762f, -0.048945f, -0.000868f, 0.003630f, -0.009114f, -0.008022f, 0.046767f, 0.011946f, -0.033237f, 0.006794f, -0.020142f, -0.017460f, -0.016284f, -0.030203f, -0.004590f, 0.002556f, -0.040924f, -0.039304f, -0.014477f, 0.006274f, 0.004236f, 0.023505f, 0.020446f, 0.012280f, -0.009542f, -0.000558f, 0.009573f, + -0.021342f, -0.011391f, -0.007382f, 0.007437f, -0.020045f, -0.011721f, 0.013457f, 0.008676f, -0.000673f, -0.002607f, -0.003842f, 0.011790f, -0.028769f, -0.015863f, -0.014215f, 0.019479f, -0.022310f, 0.015577f, 0.025360f, 0.035359f, -0.002405f, 0.010532f, -0.008346f, -0.016132f, -0.021908f, -0.005371f, 0.021470f, 0.008623f, -0.039149f, 0.002264f, 0.040416f, -0.026327f, 0.001272f, -0.005183f, 0.002130f, 0.010180f, 0.020616f, -0.003706f, 0.006547f, 0.025348f, 0.017035f, 0.011499f, -0.018942f, -0.022212f, 0.016688f, -0.015897f, -0.031214f, -0.029393f, 0.032733f, 0.013075f, 0.018107f, 0.008391f, -0.005093f, -0.005654f, 0.015666f, 0.011711f, 0.003016f, 0.015695f, -0.005907f, -0.019014f, -0.010074f, -0.013034f, 0.005622f, 0.020619f, 0.009819f, 0.003124f, 0.011919f, 0.007269f, 0.011133f, -0.001364f, -0.005493f, 0.007517f, -0.002297f, -0.006865f, -0.006321f, 0.006022f, -0.018008f, 0.004787f, 0.010866f, -0.005616f, 0.013408f, 0.009863f, -0.000541f, -0.000613f, 0.012677f, 0.002383f, -0.002632f, -0.007073f, -0.007530f, 0.003049f, 0.006831f, 0.002381f, 0.005567f, -0.006998f, -0.005427f, 0.003447f, + -0.004574f, 0.003730f, -0.002682f, -0.031738f, 0.017218f, -0.025557f, -0.047427f, 0.009123f, -0.029087f, -0.015835f, 0.054617f, 0.004447f, 0.040741f, 0.037931f, -0.008098f, 0.039915f, 0.053635f, 0.039291f, -0.049146f, -0.005765f, -0.023166f, -0.022131f, -0.014580f, 0.001700f, -0.020604f, 0.043075f, 0.011994f, 0.023974f, -0.020411f, 0.022986f, 0.016548f, 0.006445f, -0.025823f, -0.018892f, 0.039748f, -0.006603f, -0.038155f, -0.001797f, -0.044068f, -0.005507f, 0.011574f, -0.014830f, 0.000444f, -0.034737f, 0.015805f, 0.032992f, 0.016945f, -0.003949f, -0.017919f, -0.005709f, -0.004866f, -0.005236f, -0.016799f, -0.042825f, 0.029021f, 0.017400f, 0.014953f, 0.019296f, -0.025238f, 0.039329f, 0.004411f, -0.010795f, -0.009001f, -0.029862f, -0.013942f, 0.020736f, 0.011911f, 0.033780f, -0.003942f, -0.036856f, -0.066568f, -0.003044f, -0.000838f, 0.001122f, -0.024217f, -0.032484f, -0.006708f, 0.022943f, -0.011983f, -0.012616f, 0.008438f, -0.002095f, 0.033294f, -0.005745f, -0.030221f, -0.009806f, 0.030998f, 0.002906f, 0.005651f, -0.029554f, -0.011119f, -0.004829f, 0.012313f, 0.017235f, -0.008335f, 0.006609f, + 0.000981f, 0.013157f, 0.007716f, -0.000277f, 0.005188f, 0.017328f, 0.003742f, 0.000692f, -0.005678f, 0.002836f, 0.010579f, 0.000636f, 0.005271f, 0.019723f, 0.002534f, -0.005408f, -0.014064f, -0.000483f, 0.009846f, -0.008552f, 0.004936f, -0.003252f, -0.003149f, -0.005319f, -0.008506f, -0.005203f, -0.000040f, 0.012939f, 0.009054f, -0.011420f, -0.023245f, -0.005672f, 0.008474f, 0.004288f, 0.002973f, 0.002386f, 0.071121f, 0.043930f, -0.005751f, -0.041665f, 0.009212f, 0.019917f, 0.012369f, 0.029371f, 0.045504f, -0.020408f, 0.004260f, -0.040748f, 0.011932f, 0.002736f, -0.015034f, 0.071807f, 0.027983f, 0.061878f, 0.026334f, 0.015529f, -0.053877f, 0.000256f, 0.030899f, 0.004948f, -0.028431f, 0.011662f, -0.043749f, -0.017879f, 0.003579f, 0.012758f, -0.012733f, -0.009202f, 0.010129f, 0.007235f, 0.003725f, 0.038621f, 0.024889f, 0.005857f, -0.015178f, 0.026411f, -0.017043f, -0.013212f, -0.025304f, -0.009200f, 0.034202f, -0.053818f, -0.000301f, 0.023276f, -0.026038f, -0.008958f, 0.010642f, 0.008371f, 0.049651f, -0.003444f, -0.000046f, -0.023551f, 0.048553f, -0.022019f, 0.006572f, 0.004426f, + 0.033773f, -0.008381f, -0.011512f, 0.031047f, -0.052935f, 0.013304f, 0.005619f, -0.022778f, 0.043223f, -0.054032f, -0.006282f, -0.018485f, -0.035365f, -0.018579f, -0.002693f, 0.014567f, 0.034056f, 0.054722f, 0.027498f, 0.035941f, 0.056209f, -0.023320f, 0.010756f, 0.013367f, -0.023328f, 0.031568f, 0.001121f, -0.043321f, 0.022864f, 0.011174f, -0.015147f, 0.000834f, 0.033426f, 0.024255f, 0.007822f, 0.018999f, 0.006319f, 0.005757f, 0.018560f, -0.003896f, 0.008158f, 0.015500f, -0.003476f, 0.002896f, -0.002500f, -0.001567f, 0.011858f, 0.001604f, 0.001668f, -0.010631f, -0.005484f, -0.007567f, -0.013657f, 0.002415f, -0.007345f, -0.023214f, 0.009099f, 0.012880f, -0.004230f, -0.000898f, 0.006488f, -0.008462f, 0.000157f, 0.023165f, -0.003184f, -0.007335f, -0.014649f, -0.068805f, 0.019361f, 0.003165f, 0.082990f, 0.018414f, 0.015919f, -0.002726f, 0.040662f, 0.010404f, -0.060170f, -0.009775f, 0.065134f, -0.019683f, -0.013289f, 0.004961f, -0.004139f, 0.000956f, -0.011464f, 0.066928f, 0.077060f, -0.041803f, 0.018938f, 0.020112f, 0.011519f, 0.021239f, -0.033487f, -0.047230f, 0.036192f, 0.009284f, + -0.025537f, -0.045202f, -0.013132f, -0.015756f, 0.041051f, 0.032726f, 0.018957f, -0.038398f, 0.020999f, -0.017007f, 0.013462f, 0.001613f, 0.017738f, 0.037800f, 0.009054f, -0.086684f, -0.026165f, 0.015106f, -0.034274f, 0.009772f, 0.036664f, 0.011546f, 0.063709f, -0.021758f, -0.095305f, -0.002950f, -0.037913f, 0.032457f, 0.028959f, -0.011183f, -0.020181f, 0.028713f, -0.045729f, -0.008982f, -0.024665f, 0.020837f, 0.029944f, 0.024664f, 0.027816f, -0.021519f, -0.038772f, -0.116489f, -0.055218f, -0.068165f, 0.010687f, -0.046497f, -0.022057f, -0.010193f, -0.050125f, 0.025969f, -0.090281f, 0.027183f, -0.064925f, -0.048017f, 0.046324f, 0.053737f, -0.016816f, -0.003216f, 0.029630f, 0.037563f, -0.053025f, 0.000118f, 0.008651f, -0.008678f, 0.009313f, 0.027423f, -0.003688f, 0.011509f, -0.002469f, 0.010022f, -0.023505f, -0.013420f, -0.010768f, -0.016582f, -0.003445f, 0.021184f, 0.009189f, 0.018932f, 0.000645f, -0.022512f, -0.019461f, 0.002124f, 0.011605f, -0.005673f, 0.012322f, 0.011714f, 0.031247f, 0.001765f, 0.010640f, 0.002074f, 0.007312f, -0.015198f, -0.004419f, 0.004354f, -0.011428f, -0.000849f, + -0.005353f, -0.000126f, 0.005613f, 0.031318f, -0.003244f, -0.020970f, -0.021808f, 0.000595f, -0.002141f, -0.033350f, -0.021012f, 0.015151f, -0.023438f, -0.000141f, -0.001164f, -0.088443f, -0.014010f, 0.060556f, -0.071526f, 0.008157f, 0.025612f, 0.001993f, 0.017733f, -0.004022f, -0.056784f, -0.003396f, 0.029769f, 0.011571f, 0.044736f, 0.032144f, -0.048767f, -0.050648f, -0.007618f, -0.021136f, -0.008079f, -0.084319f, 0.031371f, 0.035363f, 0.059290f, 0.028665f, 0.053925f, -0.022191f, 0.006863f, 0.057493f, -0.018327f, 0.062461f, 0.016393f, 0.033723f, 0.010331f, -0.014089f, 0.029609f, -0.035587f, 0.001259f, 0.078622f, -0.060424f, 0.007003f, -0.078415f, -0.033597f, -0.056521f, -0.036603f, -0.010296f, 0.005606f, -0.018884f, -0.057857f, -0.011188f, -0.097090f, 0.110936f, 0.040614f, 0.000227f, -0.013538f, -0.027341f, 0.007737f, -0.049420f, 0.010628f, -0.073840f, 0.003258f, 0.003378f, 0.018009f, 0.046728f, 0.069417f, 0.002012f, -0.112137f, -0.052575f, 0.050380f, -0.025097f, -0.021075f, -0.027818f, -0.013466f, 0.055889f, 0.013353f, -0.031756f, 0.025265f, -0.052905f, 0.010894f, -0.010175f, -0.021667f, + -0.053366f, -0.028378f, 0.033510f, -0.014247f, -0.013011f, 0.019899f, -0.019887f, -0.004355f, 0.033421f, -0.037349f, -0.026631f, -0.009584f, -0.008204f, 0.043954f, 0.019611f, 0.013331f, 0.024910f, 0.011714f, -0.004080f, 0.021383f, -0.000368f, 0.016250f, 0.020420f, 0.033716f, -0.012218f, 0.001817f, -0.003391f, 0.025466f, 0.035695f, 0.015314f, -0.008325f, -0.000377f, -0.010544f, -0.023560f, 0.045682f, -0.011053f, 0.023711f, -0.011100f, 0.007559f, -0.011894f, -0.009909f, 0.014018f, 0.024811f, 0.001230f, -0.008122f, -0.004393f, 0.021763f, -0.045601f, 0.032655f, 0.049625f, 0.019961f, -0.024496f, -0.029732f, 0.013567f, -0.038745f, 0.061967f, 0.053858f, 0.078869f, -0.055975f, -0.071676f, -0.016515f, -0.002897f, -0.034461f, 0.045847f, 0.058326f, -0.043569f, 0.000989f, -0.076686f, -0.021131f, -0.037000f, -0.066953f, 0.020237f, 0.057294f, 0.032744f, -0.043145f, -0.018447f, 0.006282f, 0.036572f, 0.006754f, -0.004018f, 0.015302f, -0.005549f, -0.018075f, -0.062277f, -0.040304f, 0.014459f, -0.004639f, -0.034460f, 0.037087f, 0.030782f, 0.021478f, -0.063716f, -0.055901f, 0.052601f, 0.033567f, 0.038780f, + -0.039619f, -0.105314f, -0.018625f, 0.042555f, 0.044525f, -0.011914f, 0.106272f, -0.014334f, 0.106817f, -0.160333f, -0.196243f, -0.082291f, -0.117843f, 0.000145f, 0.047283f, 0.023134f, 0.129469f, -0.015856f, -0.007459f, 0.022683f, -0.024746f, -0.102652f, -0.089399f, -0.101787f, 0.081263f, 0.064546f, -0.023987f, -0.008071f, -0.167251f, 0.045571f, -0.001336f, -0.076322f, 0.031992f, 0.046811f, 0.075119f, 0.056991f, 0.027747f, -0.006472f, -0.049165f, 0.000186f, 0.003237f, -0.015301f, -0.020747f, 0.058001f, 0.037301f, 0.021763f, 0.061191f, -0.047926f, 0.011831f, -0.014402f, -0.028192f, 0.036505f, -0.005282f, -0.067513f, 0.000200f, 0.019457f, -0.023082f, 0.029964f, -0.011975f, 0.006963f, -0.014019f, 0.071956f, 0.057911f, 0.066542f, -0.056759f, -0.014500f, 0.070992f, 0.050586f, -0.049419f, -0.032404f, -0.049800f, -0.031204f, 0.041610f, 0.045130f, -0.015915f, -0.006331f, 0.078994f, 0.001703f, 0.007749f, -0.011944f, 0.014469f, 0.011898f, -0.002204f, -0.040429f, -0.009880f, -0.009710f, 0.012687f, 0.022788f, -0.076371f, 0.066680f, 0.050691f, 0.020907f, 0.062773f, -0.036818f, 0.023138f, -0.103867f, + -0.050228f, 0.027417f, 0.038407f, 0.017709f, 0.013442f, 0.013017f, 0.026937f, -0.012542f, 0.118325f, 0.010758f, 0.073714f, 0.021254f, -0.035460f, 0.090227f, -0.012182f, 0.035495f, 0.001963f, 0.032407f, -0.003309f, -0.001834f, 0.019901f, 0.045337f, 0.013294f, 0.033153f, 0.002443f, -0.006697f, 0.071280f, 0.008218f, -0.014863f, 0.001349f, -0.005455f, -0.035690f, -0.010100f, 0.020173f, 0.013391f, -0.080145f, -0.019453f, 0.010284f, 0.018741f, 0.084092f, 0.068583f, -0.082863f, -0.045572f, 0.007016f, -0.018193f, 0.092603f, 0.009210f, 0.085430f, -0.059834f, 0.043099f, 0.008854f, 0.004918f, 0.039803f, 0.087812f, 0.057067f, 0.011896f, 0.077680f, 0.030652f, -0.036254f, -0.077895f, 0.068702f, -0.062071f, 0.041630f, -0.081808f, 0.000565f, -0.129864f, 0.135227f, -0.033155f, 0.004851f, -0.090851f, 0.082165f, -0.031555f, 0.026139f, -0.066582f, 0.079379f, -0.041011f, -0.037047f, -0.026806f, -0.049598f, 0.015769f, -0.027707f, 0.023913f, -0.025671f, 0.043685f, -0.048422f, 0.043775f, -0.050986f, 0.028528f, -0.059730f, 0.048244f, -0.020504f, 0.053518f, -0.018365f, 0.028227f, -0.022415f, 0.018354f, + -0.025595f, 0.001326f, -0.027986f, 0.032664f, 0.013403f, 0.009544f, -0.011030f, 0.003532f, -0.022291f, 0.017775f, -0.022901f, 0.041129f, -0.033461f, -0.039702f, -0.017861f, 0.016686f, -0.047430f, 0.037272f, -0.011533f, 0.020690f, -0.013307f, 0.011991f, -0.021676f, 0.010754f, -0.011059f, 0.012790f, 0.015845f, -0.002885f, -0.131190f, -0.031648f, -0.010966f, 0.014670f, 0.010850f, -0.080165f, -0.047959f, 0.074263f, -0.029244f, 0.028017f, -0.033237f, 0.008161f, 0.091299f, 0.149437f, 0.009524f, -0.004256f, 0.073801f, 0.033526f, 0.030144f, 0.092956f, 0.001350f, 0.056705f, 0.066797f, 0.065875f, -0.026085f, 0.029104f, 0.057680f, 0.082327f, 0.065828f, 0.101012f, 0.055793f, 0.128697f, 0.134765f, 0.098973f, 0.107349f, 0.074715f, -0.008630f, 0.037197f, 0.018582f, -0.026767f, -0.028165f, 0.022417f, 0.062504f, 0.015568f, 0.002403f, 0.000860f, 0.030665f, 0.095038f, 0.072479f, 0.158790f, 0.031332f, -0.080552f, 0.032235f, 0.002850f, 0.032990f, -0.040748f, 0.062240f, -0.112965f, -0.147717f, 0.042498f, 0.147805f, 0.065770f, 0.029270f, -0.182326f, 0.000752f, 0.071152f, 0.110663f, 0.150395f, + -0.063613f, 0.010605f, -0.257173f, -0.168003f, 0.068416f, 0.097667f, -0.143307f, -0.120645f, -0.076319f, 0.141941f, 0.093527f, -0.166535f, -0.217143f, -0.042394f, 0.088250f, -0.102316f, 0.049318f, -0.014379f, -0.037636f, -0.054540f, 0.007691f, 0.023863f, 0.036489f, -0.004934f, -0.089840f, -0.076058f, 0.009578f, -0.022554f, 0.037705f, 0.006799f, -0.009295f, -0.032456f, -0.022558f, 0.015913f, -0.001930f, -0.072891f, -0.037487f, -0.054711f, -0.029104f, 0.012032f, -0.028661f, -0.019300f, -0.066668f, -0.086973f, -0.122209f, -0.120286f, -0.102973f, -0.085677f, -0.096502f, -0.094095f, -0.073197f, -0.099301f, -0.107196f, -0.089300f, -0.102914f, -0.064501f, -0.017434f, -0.056898f, -0.085747f, -0.054666f, 0.003399f, -0.028847f, -0.016416f, -0.017901f, 0.045641f, 0.050568f, 0.002490f, 0.024267f, 0.025549f, 0.017008f, 0.015033f, 0.003072f, 0.011986f, 0.011193f, 0.011088f, 0.008306f, 0.012930f, 0.004720f, 0.010544f, 0.004792f, 0.004038f, -0.000578f, 0.002719f, -0.024109f, -0.004479f, -0.047824f, 0.122498f, 0.139468f, -0.157131f, -0.064066f, 0.059445f, -0.042831f, 0.029382f, -0.056399f, 0.051469f, -0.047634f, + 0.011501f, 0.000729f, -0.023678f, 0.012718f, 0.002418f, -0.014084f, -0.011315f, -0.037933f, -0.010585f, 0.009232f, 0.004465f, -0.038673f, 0.037213f, -0.035418f, -0.012762f, -0.030622f, 0.003307f, -0.029283f, 0.060913f, -0.000712f, 0.015880f, -0.015888f, 0.015813f, -0.016932f, 0.017092f, 0.037974f, 0.050523f, -0.013247f, 0.016702f, 0.019328f, 0.044268f, -0.027358f, 0.028313f, -0.024346f, 0.053226f, -0.013671f, -0.031051f, 0.017943f, -0.013979f, -0.015744f, 0.005505f, -0.004223f, 0.022411f, -0.011777f, -0.031351f, -0.029238f, 0.003906f, 0.006300f, -0.054125f, 0.016777f, -0.009102f, -0.004772f, 0.008331f, -0.014483f, -0.010012f, 0.006010f, -0.009487f, 0.007948f, -0.029711f, 0.034238f, -0.096385f, 0.050940f, -0.041733f, 0.064506f, -0.043925f, 0.057831f, -0.001867f, 0.031709f, 0.016843f, 0.025914f, 0.010388f, 0.004902f, 0.009741f, -0.001356f, -0.041454f, -0.007709f, 0.000568f, -0.015550f, -0.008926f, -0.007789f, -0.005667f, 0.003001f, -0.016677f, -0.000486f, 0.004332f, -0.000668f, -0.026466f, 0.027681f, -0.005941f, 0.015195f, -0.028153f, 0.013774f, -0.018004f, 0.011921f, -0.020806f, 0.023142f, + -0.029777f, 0.041057f, -0.009247f, 0.006601f, -0.043029f, 0.029777f, -0.003758f, 0.021999f, -0.041060f, 0.011148f, -0.018273f, 0.007367f, -0.009976f, 0.005069f, -0.027831f, 0.014201f, -0.007327f, -0.014545f, -0.000550f, 0.033558f, -0.038476f, 0.003883f, -0.016519f, 0.020452f, -0.027840f, 0.025773f, -0.022925f, 0.008192f, -0.017278f, 0.020267f, -0.009649f, 0.011857f, -0.010592f, 0.013099f, -0.017430f, 0.010155f, -0.009736f, -0.001120f, -0.004839f, 0.008706f, -0.005928f, 0.004657f, 0.000282f, 0.006576f, -0.008180f, 0.003194f, 0.001068f, -0.003730f, 0.005238f, -0.004924f, 0.002817f, -0.007017f, 0.005937f, -0.007590f, 0.004283f, -0.005659f, 0.005091f, -0.004131f, 0.004397f, -0.005582f, 0.007118f, -0.007018f, 0.006192f, -0.006572f, 0.007466f, -0.005704f, 0.007518f, -0.007503f, 0.008830f, -0.009279f, 0.008039f, -0.009588f, 0.007827f, -0.007631f, 0.009254f, -0.010723f, 0.009790f, -0.009276f, 0.008661f, -0.011899f, 0.009564f, -0.011536f, 0.010119f, -0.008610f, 0.009300f, -0.008730f, 0.007922f, -0.009230f, 0.008298f, -0.010222f, 0.006001f, -0.025080f, 0.118192f, 0.071979f, -0.039204f, -0.044697f, + -0.004105f, 0.147285f, 0.061285f, 0.020831f, 0.040552f, -0.035453f, -0.045181f, 0.012763f, 0.028400f, 0.007669f, 0.002441f, -0.015438f, -0.012349f, 0.014069f, 0.013971f, 0.034474f, 0.015104f, -0.018224f, -0.008270f, -0.008887f, -0.018734f, 0.000039f, 0.003162f, 0.009370f, 0.011495f, 0.000608f, -0.005050f, 0.013924f, -0.039585f, -0.014742f, 0.017462f, 0.025448f, 0.031128f, -0.017306f, -0.010316f, -0.018412f, 0.031851f, 0.022370f, -0.006127f, 0.010428f, -0.036984f, -0.031657f, 0.029401f, 0.023208f, 0.007166f, -0.055644f, -0.028817f, 0.002594f, 0.009266f, 0.037115f, 0.026273f, -0.003831f, 0.010783f, 0.013386f, -0.017521f, 0.016297f, 0.017313f, -0.004816f, -0.010694f, 0.010624f, -0.018739f, 0.002074f, -0.003214f, -0.012812f, -0.020061f, 0.028157f, 0.005689f, 0.006496f, 0.038339f, 0.046968f, 0.016522f, 0.038078f, 0.035346f, -0.005236f, -0.009520f, -0.010277f, -0.006784f, 0.015081f, 0.024138f, -0.009006f, 0.007463f, -0.021285f, -0.007818f, -0.000708f, 0.005205f, -0.011442f, -0.014029f, 0.014947f, 0.027971f, 0.012437f, 0.007822f, 0.012061f, -0.013318f, 0.001474f, 0.013374f, 0.002987f, + -0.004059f, 0.003739f, -0.001247f, -0.015854f, 0.033207f, 0.011182f, -0.026329f, -0.024591f, 0.010210f, -0.004543f, 0.026244f, 0.014227f, -0.003167f, 0.010171f, 0.003531f, -0.004963f, -0.001013f, -0.007099f, 0.007848f, 0.012412f, 0.002073f, -0.002682f, -0.010130f, 0.009327f, -0.001812f, -0.008229f, -0.000081f, -0.042329f, -0.117243f, 0.040698f, 0.215229f, 0.169472f, 0.162035f, 0.051980f, -0.150869f, -0.090296f, -0.133757f, -0.133927f, -0.122293f, -0.042513f, 0.065778f, 0.085064f, 0.133490f, 0.119798f, 0.071974f, 0.012239f, 0.011672f, -0.057772f, -0.091638f, -0.130898f, -0.050473f, -0.035440f, 0.011704f, -0.007256f, 0.066438f, 0.045050f, 0.019041f, 0.089044f, 0.049865f, 0.038187f, -0.007820f, 0.033522f, -0.060431f, -0.045390f, -0.037698f, -0.043839f, -0.057968f, -0.034773f, -0.023160f, -0.058787f, -0.040805f, 0.015765f, 0.086635f, 0.083801f, 0.095002f, 0.074773f, 0.108629f, 0.018920f, 0.027789f, -0.072134f, -0.053535f, -0.045759f, -0.108438f, -0.107838f, -0.096899f, -0.045682f, -0.056801f, 0.013410f, 0.041989f, 0.060608f, 0.121579f, 0.119566f, 0.114317f, 0.102685f, 0.089748f, 0.019263f, + -0.052818f, -0.085898f, -0.153609f, -0.131861f, -0.096258f, -0.131066f, -0.060894f, -0.027314f, 0.005747f, 0.128733f, 0.100820f, 0.148071f, 0.146182f, 0.106878f, 0.029869f, -0.029486f, -0.043756f, -0.050657f, -0.045247f, -0.087101f, -0.107819f, -0.075279f, -0.051483f, -0.045464f, 0.005691f, 0.030293f, 0.048149f, 0.041513f, 0.086671f, 0.094789f, 0.071609f, 0.056976f, 0.009497f, -0.020064f, -0.040914f, -0.066913f, -0.057499f, -0.040810f, -0.064214f, -0.087014f, -0.009209f, 0.004979f, -0.014326f, 0.074865f, 0.098884f, 0.063220f, 0.055584f, 0.004064f, 0.015710f, -0.010394f, -0.017418f, -0.043356f, -0.050828f, -0.033487f, -0.037992f, 0.005276f, -0.015163f, 0.004757f, 0.000752f, 0.033964f, 0.018366f, 0.017442f, 0.031917f, 0.032384f, 0.000066f, -0.008760f, -0.023149f, -0.023330f, -0.006579f, -0.005450f, -0.011168f, -0.011301f, 0.002221f, 0.002543f, -0.002726f, 0.005332f, 0.006174f, 0.005459f, 0.001728f, 0.020788f, 0.007756f, -0.000795f, 0.003304f, -0.001157f, -0.007619f, -0.008024f, -0.009150f, -0.010962f, -0.009642f, -0.003098f, -0.001659f, 0.000593f, 0.009120f, 0.011786f, 0.009153f, 0.008666f, + 0.004575f, 0.000796f, 0.000129f, -0.001505f, -0.008751f, -0.005238f, -0.000063f, -0.005654f, -0.008047f, -0.004232f, -0.000937f, 0.003642f, 0.002586f, 0.000078f, 0.002202f, 0.005842f, 0.004179f, 0.002587f, 0.005848f, 0.002813f, -0.000372f, -0.002669f, -0.004484f, -0.003717f, -0.003771f, -0.003153f, -0.002229f, -0.001708f, -0.000148f, 0.000423f, -0.000021f, 0.001010f, 0.002163f, 0.002000f, 0.003230f, 0.004389f, 0.002239f, 0.000585f, 0.001188f, -0.000814f, -0.001935f, -0.003047f, -0.003388f, -0.003122f, -0.002446f, -0.001224f, 0.000087f, 0.000121f, 0.001737f, 0.002216f, 0.001338f, 0.001576f, 0.002942f, 0.001900f, 0.000389f, -0.000839f, -0.000650f, -0.000702f, -0.001590f, -0.002273f, -0.001188f, -0.000621f, -0.000009f, 0.000233f, 0.000586f, 0.000390f, 0.000636f, 0.000275f, 0.000296f, -0.000015f, 0.000218f, -0.000063f, 0.000108f, -0.000133f, 0.000123f}, + {-0.006005f, -0.008016f, -0.011238f, 0.003637f, -0.005367f, -0.011574f, -0.007015f, 0.004914f, -0.014075f, -0.008174f, -0.017267f, 0.005844f, 0.008065f, 0.009719f, 0.005674f, -0.006368f, 0.013507f, -0.009321f, 0.002921f, 0.000037f, -0.001667f, -0.009836f, -0.004674f, -0.010794f, 0.000654f, -0.004726f, 0.006151f, 0.003673f, -0.004794f, -0.001849f, -0.000910f, -0.009926f, -0.000163f, -0.002392f, 0.004546f, -0.000411f, 0.009003f, -0.003357f, 0.011328f, -0.005039f, 0.000383f, 0.001547f, -0.007856f, 0.005390f, -0.002244f, -0.003346f, 0.001156f, -0.002428f, 0.004482f, -0.017206f, 0.008100f, 0.009984f, 0.001666f, 0.005573f, 0.003347f, -0.007747f, -0.000818f, -0.008387f, 0.011299f, -0.003171f, -0.006773f, 0.006477f, -0.010055f, 0.000220f, 0.004089f, -0.011813f, 0.001510f, -0.002935f, -0.004297f, 0.003777f, 0.000978f, 0.000854f, -0.005379f, -0.003705f, -0.018536f, -0.002468f, 0.004117f, -0.003160f, 0.000984f, 0.002166f, 0.010002f, 0.008342f, 0.000570f, 0.002688f, 0.001266f, -0.001692f, -0.001316f, -0.002577f, -0.001261f, -0.000868f, -0.001837f, -0.001779f, -0.000012f, 0.001754f, 0.001267f, 0.001168f, + -0.002820f, -0.000054f, -0.000035f, -0.000853f, -0.000140f, 0.000652f, -0.000353f, 0.000066f, -0.001330f, -0.001136f, -0.001181f, -0.000087f, -0.001104f, 0.001705f, 0.002247f, 0.002303f, -0.026554f, -0.015972f, 0.002954f, -0.008633f, 0.001645f, -0.008907f, -0.015255f, -0.010169f, 0.017318f, 0.010068f, -0.002684f, 0.011718f, 0.002760f, 0.002871f, 0.003289f, -0.005697f, -0.001550f, 0.009521f, -0.007680f, 0.004316f, 0.006952f, -0.007455f, -0.011772f, 0.005378f, -0.009624f, 0.001056f, 0.005509f, 0.014114f, -0.003190f, -0.006829f, -0.005967f, 0.002185f, 0.007680f, -0.010457f, -0.000092f, 0.008572f, 0.003377f, 0.000887f, -0.000574f, -0.000822f, 0.011150f, -0.000444f, 0.010214f, 0.006699f, -0.002603f, 0.006674f, -0.002364f, -0.000629f, -0.001053f, -0.018680f, 0.006449f, 0.010526f, -0.006114f, -0.003501f, 0.002560f, 0.002848f, 0.002984f, 0.001624f, -0.001027f, -0.002277f, 0.000618f, -0.004719f, 0.012762f, -0.005755f, 0.001472f, 0.006912f, 0.005531f, -0.004596f, 0.005030f, 0.001567f, 0.003271f, 0.006980f, 0.006170f, -0.009298f, 0.009581f, 0.010604f, -0.003624f, 0.000149f, -0.000688f, 0.006913f, + -0.008518f, -0.004457f, 0.001852f, 0.001182f, 0.000311f, 0.000425f, -0.001824f, -0.002893f, 0.001697f, -0.001387f, -0.000743f, 0.000459f, 0.002423f, -0.001844f, -0.000439f, 0.000017f, -0.003348f, 0.001100f, -0.001990f, -0.002088f, -0.001616f, 0.001208f, 0.000168f, -0.001000f, -0.002005f, 0.000433f, -0.010525f, 0.013459f, 0.008808f, 0.020823f, -0.003454f, 0.002244f, 0.006378f, -0.010105f, -0.002096f, 0.004046f, -0.004176f, -0.013727f, -0.000813f, 0.001498f, 0.009227f, -0.011083f, -0.027115f, -0.021878f, -0.013483f, 0.005237f, 0.012899f, -0.012958f, 0.007306f, -0.006343f, 0.009968f, 0.007765f, 0.006758f, 0.011967f, 0.006659f, -0.009342f, -0.008640f, 0.001645f, 0.006393f, -0.000471f, 0.000551f, 0.016732f, -0.000125f, 0.002931f, 0.008326f, 0.008803f, 0.001463f, 0.000271f, 0.020667f, -0.001426f, -0.007754f, -0.002314f, 0.004700f, 0.006047f, -0.004001f, 0.011128f, 0.002185f, 0.005984f, -0.007943f, -0.007022f, -0.002708f, -0.004635f, 0.002697f, -0.003672f, 0.012103f, -0.013940f, -0.012458f, 0.015118f, -0.001578f, -0.000610f, -0.017544f, 0.005476f, -0.008506f, 0.009492f, -0.007297f, -0.019416f, + -0.000888f, 0.010022f, -0.008318f, 0.012948f, -0.007771f, 0.005974f, 0.012081f, -0.003396f, 0.005057f, 0.012176f, -0.000790f, -0.008955f, 0.000757f, 0.005958f, 0.002758f, -0.004325f, 0.008379f, 0.000575f, 0.004421f, 0.001681f, 0.001208f, 0.003188f, 0.000580f, -0.001246f, -0.000083f, 0.000458f, 0.001286f, -0.003362f, -0.001713f, -0.001745f, 0.003222f, 0.000406f, 0.003284f, 0.003429f, -0.003166f, 0.000798f, 0.000838f, -0.001812f, -0.001353f, -0.000635f, 0.000624f, -0.001642f, 0.000684f, -0.001717f, 0.032401f, 0.007630f, 0.008645f, 0.003707f, -0.007395f, 0.015547f, -0.007348f, -0.004405f, 0.019791f, -0.001491f, 0.015919f, -0.001681f, -0.018177f, 0.006432f, -0.006157f, 0.020066f, 0.010580f, -0.001402f, -0.017952f, -0.012568f, 0.016615f, 0.019684f, -0.022964f, 0.011513f, 0.009229f, 0.006921f, -0.001487f, 0.002229f, 0.001933f, -0.001747f, 0.022772f, -0.001037f, -0.003885f, -0.006278f, -0.007620f, -0.009744f, -0.003199f, -0.000522f, -0.013101f, -0.004674f, 0.003435f, -0.009141f, 0.000520f, 0.000522f, 0.013630f, -0.005112f, 0.000438f, 0.006331f, 0.000549f, 0.013015f, 0.005888f, 0.013532f, + 0.006704f, 0.004118f, -0.014305f, 0.001501f, -0.010597f, -0.009922f, 0.002383f, 0.013800f, -0.000529f, 0.011851f, -0.004960f, -0.008969f, -0.002072f, 0.000564f, 0.003499f, 0.008135f, -0.003754f, -0.000080f, -0.004444f, 0.004542f, 0.003122f, -0.011681f, 0.002281f, 0.002416f, 0.001559f, -0.003294f, 0.012224f, -0.001305f, -0.002379f, 0.001300f, 0.005740f, 0.002508f, -0.004005f, -0.001307f, -0.001619f, -0.002947f, 0.002406f, -0.003521f, 0.005769f, -0.003487f, -0.000680f, 0.000690f, -0.002719f, -0.000793f, 0.003208f, -0.003784f, -0.000857f, -0.004073f, 0.001583f, 0.001686f, 0.003273f, -0.004448f, 0.000885f, -0.001828f, 0.002248f, -0.001527f, -0.005307f, -0.001720f, 0.009139f, 0.006404f, 0.007349f, 0.020836f, 0.010902f, -0.009043f, -0.008085f, -0.022427f, -0.001457f, -0.000499f, -0.011968f, 0.004549f, 0.017997f, 0.002181f, -0.014180f, 0.013167f, 0.012512f, -0.001305f, 0.005002f, 0.012681f, 0.003005f, -0.011523f, -0.001779f, 0.026868f, 0.013217f, 0.002778f, -0.017726f, -0.006346f, 0.016169f, 0.005562f, -0.002416f, 0.009104f, 0.008140f, 0.008524f, -0.000069f, 0.016676f, -0.000152f, -0.002141f, + 0.004202f, -0.008287f, -0.010857f, -0.000551f, 0.001836f, 0.006198f, 0.003404f, -0.010147f, 0.010301f, 0.018080f, 0.009280f, -0.000500f, 0.013427f, -0.015294f, 0.008719f, -0.009114f, 0.009580f, -0.002558f, -0.011006f, -0.000564f, -0.014337f, -0.023470f, -0.008569f, -0.009330f, -0.001148f, -0.000105f, -0.012290f, 0.002377f, -0.003780f, 0.007121f, 0.004698f, 0.008435f, -0.001352f, 0.003391f, -0.011835f, 0.002044f, 0.001868f, 0.016479f, -0.006375f, -0.000526f, -0.005730f, 0.003475f, 0.014820f, 0.007613f, -0.008617f, -0.013779f, 0.004347f, -0.005516f, -0.001896f, 0.007160f, -0.001021f, 0.002401f, 0.001678f, -0.008209f, 0.000384f, -0.006266f, 0.001772f, -0.005953f, -0.004011f, -0.002175f, -0.000257f, -0.000809f, 0.001074f, -0.003817f, -0.000404f, -0.001292f, -0.003045f, -0.002574f, 0.000906f, -0.000678f, -0.001583f, 0.000396f, 0.001402f, 0.004550f, -0.001625f, 0.002657f, -0.001983f, -0.004605f, 0.003395f, -0.005038f, 0.004821f, -0.000468f, -0.003254f, -0.000563f, 0.001600f, 0.003527f, -0.002624f, -0.000359f, 0.000751f, -0.000904f, -0.021971f, -0.014517f, 0.031068f, -0.006791f, -0.006824f, 0.001834f, + -0.001095f, 0.033325f, -0.009744f, -0.017964f, 0.000434f, -0.017721f, 0.004416f, 0.014154f, 0.015199f, 0.004819f, -0.030926f, 0.025431f, -0.020013f, 0.010644f, -0.013683f, -0.010383f, -0.007662f, 0.012705f, 0.013642f, -0.020446f, 0.001615f, 0.008951f, -0.006355f, 0.004113f, 0.006001f, -0.007381f, 0.000941f, -0.016836f, -0.011330f, -0.025994f, 0.015397f, -0.003622f, 0.026215f, -0.012199f, 0.005686f, 0.017526f, -0.004380f, -0.005184f, -0.007757f, 0.020084f, 0.014647f, -0.024623f, 0.007024f, -0.013919f, -0.004685f, -0.005396f, -0.013844f, 0.008330f, 0.004403f, 0.021717f, 0.015267f, -0.027240f, -0.004474f, -0.011691f, 0.015920f, 0.005559f, 0.001365f, -0.015887f, 0.002377f, -0.001657f, 0.013378f, -0.002220f, 0.001670f, -0.018276f, -0.000423f, 0.013003f, -0.011983f, 0.002025f, -0.003785f, -0.003556f, -0.009686f, 0.001962f, -0.001280f, 0.023039f, 0.010148f, 0.010544f, -0.004221f, -0.002560f, -0.004006f, -0.006261f, -0.003370f, 0.005148f, -0.007052f, -0.002232f, -0.006917f, 0.005236f, 0.004384f, -0.003751f, -0.002120f, 0.004868f, -0.006512f, 0.003235f, 0.000986f, -0.001742f, -0.002072f, 0.001752f, + -0.000185f, -0.000585f, -0.001252f, 0.004255f, -0.006281f, 0.000840f, 0.000563f, 0.003186f, 0.003438f, 0.003447f, -0.003188f, 0.000946f, -0.002250f, 0.004602f, 0.001263f, 0.001093f, 0.003365f, 0.007581f, -0.008352f, 0.000572f, -0.017608f, -0.002201f, -0.020319f, 0.003181f, -0.005090f, 0.011665f, -0.000821f, 0.009898f, -0.013917f, -0.026201f, 0.005562f, 0.017635f, 0.002305f, -0.002122f, 0.013754f, 0.009260f, -0.021426f, -0.000338f, -0.008075f, 0.027135f, -0.001201f, 0.003166f, 0.002138f, 0.000286f, -0.000842f, -0.009725f, 0.021508f, -0.001818f, -0.030467f, -0.005713f, 0.018480f, -0.011890f, 0.003093f, -0.000475f, 0.002482f, -0.003805f, 0.002956f, -0.005595f, 0.007300f, -0.011678f, 0.011026f, 0.015457f, -0.012091f, -0.003075f, -0.007150f, -0.021210f, 0.008516f, -0.015054f, 0.013134f, -0.013230f, -0.022881f, -0.006244f, 0.013633f, -0.004238f, -0.008159f, 0.009114f, 0.012610f, 0.007215f, 0.013819f, 0.023615f, 0.019033f, -0.001210f, 0.003727f, 0.003235f, -0.012635f, 0.002431f, -0.013212f, -0.014410f, 0.007903f, -0.010988f, 0.003612f, -0.000634f, 0.008331f, 0.008452f, -0.010917f, 0.012741f, + -0.003448f, -0.005198f, -0.002312f, 0.008966f, -0.001609f, -0.008241f, -0.005597f, -0.011679f, 0.013413f, -0.006691f, -0.001718f, 0.002327f, -0.000515f, -0.004934f, -0.004180f, 0.000922f, 0.001813f, 0.000609f, -0.002297f, 0.003112f, 0.002315f, -0.002606f, 0.000285f, 0.002013f, 0.001262f, -0.001577f, 0.000008f, -0.002126f, 0.000887f, -0.003576f, -0.003269f, 0.002066f, 0.001081f, 0.004479f, 0.004924f, 0.000446f, 0.003404f, 0.000073f, -0.000190f, -0.029937f, -0.025104f, 0.014655f, 0.026827f, 0.000046f, -0.001588f, 0.005167f, -0.012900f, -0.006203f, -0.031006f, -0.016460f, -0.008785f, -0.000246f, -0.022553f, 0.032299f, 0.006411f, 0.017992f, -0.020561f, -0.024494f, -0.018454f, -0.007152f, 0.004910f, -0.027814f, -0.012469f, 0.012924f, -0.005524f, -0.033842f, -0.011488f, 0.004586f, 0.000357f, 0.021027f, 0.007064f, -0.006584f, -0.016062f, 0.020000f, -0.011601f, -0.001153f, 0.015060f, 0.004470f, -0.016404f, -0.008409f, -0.001277f, -0.027403f, 0.006901f, 0.021330f, -0.009284f, -0.011755f, 0.003106f, -0.013863f, -0.005128f, 0.002771f, -0.008848f, -0.006746f, 0.007222f, -0.010330f, -0.021874f, 0.010829f, + -0.012476f, -0.016293f, -0.022415f, -0.011185f, 0.002228f, -0.008929f, 0.003719f, 0.027588f, 0.015565f, -0.003330f, 0.026273f, 0.026716f, -0.011561f, 0.003743f, 0.007409f, -0.013796f, -0.008978f, -0.029252f, 0.003016f, -0.009345f, -0.023681f, -0.000201f, 0.012468f, 0.022076f, 0.013562f, 0.006511f, 0.002460f, -0.019861f, -0.002495f, -0.004496f, 0.005217f, -0.007482f, -0.000871f, 0.000516f, -0.000285f, 0.004845f, 0.000930f, -0.001750f, 0.004276f, -0.001715f, -0.006273f, 0.005107f, -0.004205f, -0.005573f, 0.000857f, 0.002128f, 0.001889f, 0.000507f, 0.006113f, -0.000561f, 0.003913f, 0.002354f, 0.000468f, 0.001298f, -0.000035f, -0.004689f, 0.001072f, -0.006470f, 0.001518f, -0.010373f, -0.002598f, -0.000395f, -0.006881f, -0.008115f, -0.001072f, -0.008022f, -0.001505f, -0.001660f, -0.009225f, -0.019087f, 0.048610f, -0.001923f, 0.029812f, -0.015002f, -0.042527f, 0.012143f, 0.003699f, -0.001690f, -0.019918f, -0.001963f, -0.013107f, 0.033697f, 0.024724f, 0.022049f, 0.016167f, -0.026439f, -0.000119f, 0.003620f, 0.023502f, -0.040133f, -0.004516f, -0.009833f, -0.011689f, 0.006013f, -0.013182f, 0.005139f, + 0.008971f, 0.006632f, 0.007176f, 0.009288f, -0.002757f, -0.003959f, -0.019479f, -0.004658f, -0.002949f, 0.019151f, 0.000029f, -0.017551f, -0.004096f, 0.020841f, -0.002400f, 0.012122f, 0.015616f, -0.011310f, -0.006661f, -0.025852f, -0.014996f, 0.050574f, 0.013349f, 0.022503f, 0.012121f, 0.002926f, 0.001926f, -0.032061f, 0.019023f, 0.003000f, 0.005600f, 0.016362f, 0.017872f, 0.027788f, -0.031969f, -0.013214f, -0.017732f, -0.002245f, 0.004459f, -0.004227f, -0.008945f, -0.005252f, -0.026809f, -0.033720f, -0.021878f, -0.031602f, -0.004082f, -0.020655f, -0.035363f, -0.014956f, 0.011519f, 0.019383f, -0.007351f, -0.030260f, -0.001054f, -0.004569f, 0.007189f, -0.008319f, 0.001969f, 0.017397f, 0.000823f, -0.001275f, -0.001058f, 0.002217f, 0.003083f, -0.005137f, -0.004600f, -0.012158f, -0.013610f, 0.007266f, -0.003719f, 0.006503f, 0.005902f, -0.002214f, 0.004027f, 0.005365f, 0.009821f, 0.006957f, -0.004237f, 0.002160f, 0.012510f, 0.002412f, -0.012603f, -0.010433f, -0.005678f, -0.002628f, 0.000975f, -0.004433f, 0.007254f, 0.007984f, -0.001894f, 0.012045f, 0.001612f, -0.003347f, -0.002556f, 0.002808f, + -0.006954f, 0.065253f, 0.014782f, -0.009429f, -0.013535f, 0.002088f, -0.020936f, -0.040937f, 0.030141f, 0.000128f, 0.019404f, -0.014665f, 0.014043f, 0.033503f, -0.003298f, 0.003738f, -0.008421f, 0.029162f, 0.024572f, 0.009528f, -0.039497f, 0.002861f, 0.005835f, 0.024424f, 0.035563f, -0.010490f, -0.007252f, -0.004698f, 0.009552f, 0.012694f, 0.010575f, -0.017971f, 0.008238f, -0.020715f, 0.015875f, 0.021166f, -0.010091f, -0.020951f, 0.013255f, -0.022798f, -0.020838f, -0.000870f, 0.006082f, 0.029715f, 0.003610f, -0.004066f, 0.025335f, -0.004690f, 0.022760f, 0.042019f, 0.021082f, 0.000485f, -0.026655f, -0.002532f, -0.015344f, -0.012449f, 0.026866f, 0.010496f, -0.027031f, -0.000309f, -0.020659f, -0.005236f, 0.035610f, 0.016376f, 0.005213f, 0.015246f, 0.021458f, 0.011122f, -0.028669f, 0.014799f, 0.023966f, 0.008218f, -0.019584f, 0.008096f, 0.002301f, 0.004115f, -0.015319f, 0.023679f, -0.006490f, -0.005677f, 0.028484f, 0.030176f, 0.004474f, 0.008597f, 0.032820f, 0.001942f, 0.016217f, -0.011487f, -0.000324f, 0.018905f, 0.010971f, -0.008351f, 0.009779f, 0.017067f, -0.004589f, 0.000155f, + 0.021765f, 0.004508f, 0.009284f, -0.006414f, -0.010832f, -0.003276f, 0.006102f, 0.003181f, 0.005038f, 0.005162f, -0.003517f, -0.003373f, -0.002785f, 0.001702f, 0.006556f, 0.007902f, -0.005244f, -0.001562f, 0.013589f, 0.002017f, 0.018206f, -0.003234f, 0.004993f, -0.002432f, 0.002375f, 0.008214f, 0.005046f, 0.000700f, -0.000073f, -0.007653f, -0.005344f, -0.003851f, -0.008169f, 0.010496f, 0.009434f, -0.015857f, -0.000821f, -0.020259f, -0.047679f, 0.016467f, -0.019004f, 0.005272f, 0.001670f, 0.033408f, -0.023035f, -0.020362f, -0.008571f, -0.009321f, -0.012323f, 0.024672f, -0.021890f, -0.030885f, 0.009211f, -0.057710f, 0.001672f, -0.010882f, -0.024426f, 0.031020f, -0.002010f, -0.001853f, 0.013039f, -0.012321f, 0.009794f, -0.003142f, -0.034482f, -0.037641f, -0.000398f, 0.007919f, 0.022027f, 0.010625f, -0.002534f, -0.003994f, -0.021694f, -0.010294f, 0.021737f, -0.034060f, 0.046930f, 0.027856f, 0.006252f, 0.034688f, -0.023200f, -0.009965f, -0.021242f, -0.021735f, -0.009407f, 0.015818f, 0.044316f, 0.000357f, -0.022932f, -0.003897f, 0.002137f, -0.002520f, -0.002398f, -0.014131f, 0.011931f, 0.010937f, + 0.029866f, -0.000598f, 0.033772f, 0.017369f, 0.009261f, -0.000898f, 0.007183f, -0.050537f, 0.026594f, -0.006480f, -0.029570f, 0.021023f, -0.000054f, 0.027690f, 0.012287f, -0.046844f, 0.036271f, 0.028276f, -0.024509f, 0.039340f, 0.015137f, 0.029373f, 0.011643f, -0.004163f, -0.001670f, -0.001308f, -0.005543f, -0.010377f, -0.003189f, 0.004283f, -0.010339f, -0.015754f, 0.000115f, -0.010304f, -0.018452f, -0.011078f, -0.013827f, 0.008672f, -0.008510f, 0.010682f, 0.002850f, 0.010900f, 0.005166f, -0.001286f, -0.005903f, 0.001813f, 0.001021f, -0.000909f, 0.001506f, -0.003324f, -0.007672f, 0.003614f, -0.000725f, 0.004427f, 0.004842f, 0.000130f, 0.004089f, 0.001851f, 0.007069f, 0.006029f, -0.011123f, -0.006725f, -0.009977f, -0.018613f, -0.013080f, -0.089538f, -0.006682f, 0.052576f, -0.009548f, 0.001255f, 0.046386f, -0.011050f, 0.000713f, 0.005319f, 0.012495f, -0.014224f, 0.012464f, -0.005111f, -0.015263f, 0.014561f, 0.017714f, -0.052481f, 0.006311f, -0.046746f, -0.001112f, -0.024386f, -0.026076f, -0.006097f, -0.007743f, -0.025814f, 0.012892f, 0.003858f, 0.016224f, 0.021595f, -0.031520f, 0.039460f, + 0.002875f, -0.037615f, 0.003183f, -0.026080f, -0.012876f, -0.028027f, -0.025076f, -0.011232f, 0.026506f, -0.023099f, 0.012682f, 0.026355f, -0.015918f, -0.028863f, -0.026191f, -0.038900f, -0.041471f, -0.024777f, -0.011746f, 0.002873f, -0.006201f, 0.011086f, 0.007954f, -0.025014f, -0.001727f, 0.027348f, 0.015994f, -0.041336f, 0.016153f, -0.003493f, -0.011342f, -0.038334f, 0.025685f, -0.014003f, 0.035422f, 0.044336f, 0.001230f, 0.042146f, -0.023353f, 0.024277f, -0.018373f, 0.026132f, 0.033832f, 0.002525f, -0.044421f, -0.001782f, -0.060642f, 0.019242f, 0.013185f, 0.023687f, 0.011476f, -0.024200f, -0.020640f, -0.000806f, -0.013833f, 0.013308f, -0.014970f, -0.000930f, -0.000906f, -0.015339f, -0.011660f, 0.009832f, -0.005826f, -0.017303f, -0.001588f, 0.004841f, 0.012602f, 0.006333f, 0.027314f, -0.003253f, 0.002314f, -0.008548f, 0.019160f, -0.003131f, -0.004142f, 0.016377f, -0.000919f, 0.002089f, 0.004003f, 0.022219f, -0.003637f, -0.009643f, 0.002352f, 0.015209f, 0.014782f, -0.015320f, -0.001445f, 0.009895f, -0.017243f, 0.009198f, -0.002783f, 0.011905f, 0.000731f, -0.015116f, -0.008173f, 0.006730f, + 0.007708f, 0.009137f, 0.006972f, -0.042471f, 0.034337f, -0.080985f, -0.004769f, -0.007767f, -0.006733f, 0.007456f, -0.046444f, 0.003197f, -0.009131f, -0.004032f, 0.021239f, 0.008286f, 0.024709f, -0.019130f, 0.017496f, -0.009166f, -0.041249f, -0.016700f, -0.030267f, -0.018908f, 0.020021f, -0.036119f, 0.004765f, -0.013421f, -0.027258f, -0.004938f, 0.026751f, -0.035906f, -0.034419f, 0.014052f, 0.020776f, -0.001222f, -0.016246f, 0.019267f, 0.020495f, 0.024946f, 0.021622f, 0.008872f, 0.029575f, 0.034898f, -0.018700f, 0.005181f, -0.016479f, 0.043800f, -0.003475f, -0.030406f, 0.036667f, 0.015990f, 0.008878f, -0.017436f, -0.022996f, 0.005336f, 0.014018f, 0.013949f, -0.001143f, -0.019155f, 0.014606f, -0.022296f, 0.000729f, -0.022003f, 0.067846f, 0.010398f, -0.019387f, 0.055588f, -0.006722f, 0.016964f, -0.014330f, 0.027890f, 0.041649f, -0.025876f, 0.039792f, 0.042071f, 0.055102f, 0.042183f, 0.004038f, 0.031312f, -0.024497f, -0.004916f, 0.005997f, -0.013691f, 0.024379f, 0.001029f, -0.001477f, -0.002488f, -0.006986f, 0.011772f, 0.006063f, 0.033274f, -0.010846f, 0.012255f, -0.007250f, 0.000148f, + 0.006365f, 0.009768f, -0.013968f, 0.005120f, 0.014038f, -0.006123f, -0.015689f, -0.003123f, -0.025219f, 0.008694f, 0.007963f, 0.006800f, -0.006590f, 0.004130f, 0.013361f, 0.007435f, -0.003130f, 0.012695f, 0.005809f, -0.008361f, -0.004151f, -0.002716f, 0.020923f, 0.027066f, 0.014516f, 0.006218f, 0.004962f, 0.009236f, 0.016198f, -0.010818f, -0.004252f, 0.007250f, -0.001609f, 0.001454f, 0.007526f, -0.006448f, 0.083699f, 0.021520f, -0.013938f, -0.012414f, 0.019660f, 0.005352f, 0.008540f, -0.002180f, -0.033061f, 0.027851f, -0.075838f, 0.008209f, 0.017000f, -0.003481f, -0.013632f, -0.029290f, -0.013126f, 0.003393f, 0.022850f, 0.034432f, -0.020155f, -0.044400f, -0.035547f, -0.005177f, 0.001592f, -0.026207f, 0.053989f, -0.025143f, -0.016144f, 0.022097f, -0.007283f, 0.003909f, -0.004551f, 0.046017f, 0.007960f, -0.046299f, 0.018574f, 0.005781f, 0.032248f, -0.011496f, 0.003724f, -0.019190f, 0.016149f, 0.006970f, 0.040582f, -0.009898f, 0.018454f, 0.019061f, -0.024121f, -0.026941f, 0.002167f, 0.024419f, -0.047218f, -0.056206f, -0.016275f, -0.023119f, -0.002785f, -0.008202f, 0.005830f, 0.012677f, + -0.011140f, 0.001872f, -0.064589f, -0.055118f, 0.044034f, 0.046474f, -0.055917f, -0.043204f, -0.053810f, -0.028333f, -0.022145f, 0.027972f, -0.029274f, -0.052152f, 0.001758f, 0.002212f, -0.031656f, -0.006827f, 0.045614f, -0.006880f, 0.002746f, 0.014563f, -0.000244f, 0.002564f, -0.001782f, -0.016101f, -0.019718f, -0.001105f, -0.005443f, 0.013031f, -0.001890f, -0.001287f, -0.014221f, 0.007208f, -0.022118f, -0.000555f, 0.007032f, 0.007382f, 0.010943f, 0.012135f, 0.002462f, 0.006864f, -0.004767f, 0.001129f, -0.011170f, 0.004116f, 0.001342f, -0.012854f, 0.013355f, 0.013141f, -0.020465f, 0.001265f, 0.015267f, 0.012445f, 0.023490f, -0.004839f, -0.026909f, 0.007528f, 0.009028f, -0.013368f, 0.008773f, -0.014881f, -0.006842f, -0.002302f, -0.004548f, -0.012632f, 0.004753f, -0.046245f, -0.005856f, -0.011040f, 0.013789f, -0.021796f, -0.006166f, -0.072008f, 0.063772f, 0.041303f, -0.007110f, 0.087908f, -0.008775f, -0.047878f, -0.004591f, 0.019907f, -0.029882f, -0.039002f, -0.008394f, -0.026549f, -0.001405f, 0.007688f, -0.040440f, 0.059379f, 0.001837f, 0.006600f, -0.037313f, -0.010478f, 0.003880f, -0.010385f, + 0.009362f, 0.013717f, 0.048498f, 0.008959f, -0.002603f, 0.039543f, 0.032303f, -0.011230f, 0.019009f, -0.024557f, 0.006894f, 0.022245f, 0.021265f, 0.055240f, -0.054451f, 0.033678f, 0.100713f, 0.001012f, 0.016456f, 0.034776f, 0.003851f, 0.007147f, 0.016198f, 0.012845f, -0.033777f, -0.039858f, -0.014684f, 0.032592f, 0.009546f, -0.041422f, -0.022683f, -0.001520f, -0.020120f, 0.037417f, 0.003334f, 0.028974f, -0.063717f, -0.039107f, 0.018492f, 0.043983f, 0.026675f, 0.017920f, 0.060459f, 0.035689f, -0.025479f, 0.042032f, -0.031471f, -0.006052f, -0.004572f, 0.023788f, -0.004991f, -0.025662f, 0.022546f, 0.010193f, 0.002115f, -0.029472f, 0.020623f, -0.000091f, 0.000361f, -0.012947f, 0.017380f, -0.013839f, -0.011505f, -0.010520f, 0.008271f, -0.010989f, -0.021884f, 0.007721f, 0.001512f, 0.000240f, -0.011916f, -0.001915f, -0.014914f, -0.012351f, -0.011928f, -0.007104f, -0.004607f, -0.005182f, -0.004539f, 0.002534f, 0.000425f, -0.027791f, 0.018969f, 0.007914f, -0.008914f, -0.020433f, -0.029739f, -0.000263f, -0.016189f, -0.010450f, 0.010772f, -0.007362f, 0.018464f, 0.009689f, -0.006463f, 0.003728f, + 0.017284f, -0.007225f, -0.002820f, -0.007739f, 0.014587f, 0.003993f, 0.006103f, -0.014127f, 0.029839f, -0.084020f, 0.001787f, -0.000574f, -0.002693f, -0.010673f, 0.039239f, 0.003086f, -0.022577f, -0.042145f, 0.042648f, -0.037900f, 0.000990f, 0.027331f, 0.022034f, -0.029816f, -0.007961f, -0.047990f, -0.000199f, 0.013650f, 0.016740f, 0.019325f, 0.005123f, -0.031292f, -0.038886f, 0.031910f, 0.016544f, 0.015841f, 0.006296f, 0.016115f, 0.004890f, 0.023464f, -0.041933f, -0.071128f, 0.019726f, -0.010838f, -0.015092f, 0.039503f, -0.006911f, -0.021241f, 0.035063f, 0.032916f, 0.027474f, -0.002658f, -0.017828f, -0.030683f, -0.007860f, -0.040543f, 0.095024f, -0.008235f, 0.034241f, 0.007206f, -0.031510f, 0.025762f, -0.012031f, -0.030379f, 0.029710f, 0.023415f, -0.052217f, 0.036297f, -0.005536f, 0.050402f, -0.051095f, -0.038732f, 0.051603f, -0.002254f, -0.041714f, 0.042503f, -0.015614f, 0.072700f, -0.030890f, -0.025173f, -0.043945f, 0.027789f, 0.005204f, -0.035925f, 0.014312f, -0.046651f, -0.033919f, 0.002927f, 0.030206f, -0.026814f, -0.016286f, -0.052968f, -0.047846f, 0.056080f, -0.006442f, 0.024375f, + 0.039479f, 0.053209f, 0.000306f, -0.005506f, -0.004086f, 0.013979f, 0.021465f, 0.003897f, 0.009881f, 0.032740f, 0.014447f, 0.018006f, 0.010799f, 0.008154f, -0.006365f, -0.003123f, 0.020271f, 0.015318f, 0.026550f, -0.012600f, 0.017527f, 0.018367f, -0.028829f, 0.007320f, 0.007352f, -0.015802f, -0.007972f, -0.000089f, 0.007365f, -0.012842f, 0.020919f, 0.001111f, -0.004717f, -0.005978f, 0.017777f, 0.000639f, 0.005618f, 0.001587f, 0.005066f, 0.003986f, -0.016069f, -0.008071f, -0.011983f, 0.001457f, -0.000140f, 0.008860f, 0.011544f, -0.010321f, -0.024039f, 0.062270f, -0.014205f, 0.042158f, -0.065977f, -0.011633f, -0.001532f, -0.078777f, -0.017317f, 0.011355f, 0.038674f, -0.019427f, -0.018479f, 0.001664f, -0.006091f, 0.055218f, -0.005280f, -0.027845f, 0.058597f, -0.007330f, -0.003044f, 0.011003f, -0.023436f, 0.050601f, 0.003329f, -0.010398f, 0.024250f, 0.020734f, -0.027667f, -0.009537f, -0.012849f, 0.039388f, -0.078868f, -0.001409f, -0.015312f, -0.027888f, 0.013481f, -0.028355f, 0.045886f, -0.012097f, -0.056840f, -0.005954f, 0.086306f, -0.052420f, 0.037806f, -0.058436f, -0.016829f, 0.058080f, + 0.042459f, -0.031404f, 0.014726f, -0.038288f, -0.050285f, 0.010659f, -0.022128f, 0.021873f, 0.006308f, -0.003553f, 0.008528f, -0.073659f, -0.028814f, -0.037569f, -0.053839f, 0.024966f, -0.020456f, -0.015022f, -0.029867f, -0.052344f, -0.044013f, 0.034427f, -0.006910f, 0.107450f, 0.018821f, 0.009891f, 0.038358f, 0.067564f, 0.008819f, -0.048803f, 0.059282f, 0.044847f, -0.037958f, 0.010002f, -0.009646f, -0.037820f, -0.029811f, -0.025570f, -0.002969f, -0.023346f, 0.008716f, 0.015786f, 0.005471f, -0.018200f, 0.031515f, 0.004877f, 0.014517f, -0.004368f, -0.005591f, 0.014914f, 0.009078f, -0.015180f, -0.013700f, -0.013128f, 0.014398f, 0.006855f, 0.017412f, 0.018513f, 0.000610f, -0.010010f, 0.013978f, -0.008090f, 0.030111f, 0.014272f, -0.036442f, -0.007227f, -0.026922f, 0.003186f, -0.008926f, -0.013003f, 0.037695f, -0.002089f, -0.011967f, 0.009633f, 0.011688f, -0.013857f, -0.003002f, -0.019040f, 0.008208f, 0.013641f, -0.002885f, -0.006066f, 0.001897f, -0.012839f, -0.003633f, -0.002053f, 0.017529f, 0.041912f, -0.024850f, -0.031508f, 0.035415f, -0.056296f, -0.006716f, -0.011472f, 0.003240f, 0.039929f, + -0.026109f, 0.044300f, 0.018832f, 0.010213f, 0.013112f, -0.071833f, 0.048865f, 0.009334f, -0.050714f, 0.020034f, -0.053786f, 0.009379f, 0.072046f, -0.008726f, -0.042727f, -0.045195f, 0.019347f, 0.032985f, 0.026406f, 0.014340f, -0.047592f, -0.032320f, -0.014767f, -0.008572f, 0.061558f, -0.038720f, -0.023424f, 0.091989f, -0.050989f, -0.003632f, 0.036327f, 0.000483f, 0.038272f, -0.005270f, -0.030903f, -0.020368f, -0.056142f, 0.029007f, 0.039904f, -0.059526f, 0.089525f, 0.030178f, -0.067530f, -0.061210f, -0.058734f, -0.069990f, -0.056927f, 0.003340f, 0.028114f, 0.005943f, -0.047432f, -0.017521f, 0.031660f, -0.000408f, -0.029714f, 0.033154f, -0.063839f, 0.004533f, -0.014697f, -0.058535f, -0.055081f, 0.010035f, -0.021917f, 0.042161f, -0.076376f, -0.009762f, -0.027053f, -0.055403f, 0.003824f, 0.090583f, 0.023095f, -0.039303f, 0.019356f, -0.048504f, 0.019912f, -0.019362f, 0.001737f, 0.003274f, 0.025500f, -0.002140f, 0.008725f, 0.032693f, 0.000341f, -0.017159f, -0.008178f, 0.026357f, 0.018221f, 0.012495f, 0.006301f, -0.049876f, -0.005135f, 0.004500f, 0.028317f, 0.014845f, -0.026184f, 0.000213f, + 0.003012f, 0.044873f, 0.002477f, 0.014920f, -0.013636f, -0.007938f, 0.006527f, 0.015185f, -0.001797f, -0.012237f, -0.024763f, 0.004454f, -0.009372f, -0.016298f, 0.008463f, -0.011096f, -0.012221f, 0.017974f, -0.013706f, -0.018869f, -0.027327f, -0.023258f, -0.004449f, 0.008077f, 0.000120f, -0.020053f, 0.017546f, 0.044500f, -0.110288f, -0.100553f, -0.088584f, -0.056032f, 0.022140f, -0.023292f, 0.112085f, 0.030477f, -0.012899f, -0.025263f, -0.015132f, 0.032570f, -0.074331f, 0.086569f, 0.112857f, 0.045780f, -0.007791f, 0.090469f, -0.029479f, 0.054900f, 0.102426f, -0.018386f, 0.004727f, 0.019831f, 0.136588f, -0.034450f, -0.009697f, 0.082186f, 0.029988f, 0.026686f, -0.023603f, -0.083479f, 0.004714f, -0.066105f, 0.030620f, -0.082018f, -0.097556f, -0.000840f, -0.006661f, -0.067038f, -0.004730f, -0.032476f, -0.070205f, -0.054910f, -0.091267f, -0.004060f, 0.090685f, -0.029120f, -0.018870f, -0.084565f, -0.046705f, -0.031049f, -0.030397f, 0.028826f, -0.022113f, 0.153163f, -0.037590f, -0.002022f, -0.057270f, 0.115580f, 0.093489f, -0.067062f, 0.075740f, -0.026969f, -0.113664f, -0.020049f, -0.012276f, 0.023601f, + -0.027600f, -0.025509f, -0.015643f, -0.045558f, 0.011603f, 0.056223f, -0.068138f, -0.009564f, 0.017651f, 0.011549f, -0.078928f, 0.050147f, 0.033848f, 0.115896f, -0.051103f, 0.031673f, 0.047364f, -0.003097f, 0.011876f, -0.001708f, 0.015349f, -0.013096f, 0.036093f, 0.015717f, 0.028965f, 0.025774f, 0.000811f, 0.026535f, 0.007024f, -0.010296f, 0.026896f, -0.001977f, 0.003441f, 0.002781f, 0.018389f, 0.014223f, -0.022095f, -0.016611f, -0.027703f, 0.039949f, -0.028566f, 0.005643f, 0.023407f, 0.010047f, 0.043501f, 0.038104f, 0.065476f, 0.045305f, 0.036629f, 0.002206f, 0.023664f, -0.035503f, 0.030911f, 0.023637f, -0.009219f, -0.034175f, -0.064883f, -0.025246f, 0.017106f, -0.035863f, -0.014640f, -0.026181f, -0.063640f, -0.054449f, -0.026971f, -0.040666f, -0.025425f, -0.035089f, -0.045533f, -0.047149f, -0.016071f, -0.013953f, -0.022445f, -0.034800f, -0.020439f, -0.031140f, -0.022832f, -0.025524f, -0.008494f, -0.012234f, -0.011023f, -0.013257f, -0.011898f, -0.017228f, -0.009617f, -0.034611f, 0.046352f, 0.194624f, 0.022716f, -0.122031f, -0.030261f, -0.043156f, 0.009400f, 0.060747f, 0.109254f, 0.031201f, + -0.091628f, -0.001770f, 0.063491f, 0.013771f, 0.001435f, -0.002866f, 0.016610f, -0.008783f, -0.011088f, 0.075391f, 0.047316f, 0.042099f, -0.064066f, -0.041632f, 0.043684f, 0.016845f, 0.025810f, -0.022282f, 0.008077f, 0.083988f, 0.002018f, 0.071205f, 0.037482f, 0.038821f, 0.069668f, 0.010037f, -0.036945f, 0.008499f, -0.042318f, 0.010558f, 0.029496f, 0.007428f, 0.113881f, -0.038090f, -0.073421f, -0.070853f, 0.087941f, 0.040478f, 0.046824f, 0.031925f, -0.050426f, -0.063357f, -0.038586f, -0.002289f, 0.019103f, -0.013955f, 0.030982f, 0.058157f, -0.004092f, 0.042128f, 0.038310f, -0.059198f, -0.011805f, 0.016657f, -0.027803f, -0.025158f, -0.029196f, -0.097575f, -0.016632f, 0.041933f, 0.003528f, 0.084813f, 0.056477f, -0.041462f, 0.029858f, 0.000235f, -0.028517f, -0.024123f, -0.047369f, -0.105488f, -0.056422f, 0.004036f, 0.001606f, -0.023568f, -0.006606f, -0.011224f, 0.033346f, 0.034868f, 0.017852f, -0.006679f, 0.002189f, 0.026351f, -0.013637f, 0.016419f, -0.047879f, -0.022852f, -0.006704f, 0.025088f, -0.007090f, 0.009691f, 0.016086f, 0.016050f, 0.001586f, 0.045097f, -0.037107f, -0.033305f, + -0.033812f, 0.023320f, -0.022207f, -0.034772f, -0.034659f, 0.023613f, -0.012055f, -0.025445f, -0.013910f, 0.017651f, 0.003667f, 0.026029f, -0.045307f, -0.029548f, -0.006212f, -0.003281f, 0.007681f, 0.020173f, -0.010942f, -0.017938f, 0.028513f, -0.015937f, -0.019968f, -0.016742f, 0.027365f, -0.007997f, -0.016780f, 0.008222f, -0.003447f, -0.015987f, -0.001490f, -0.021214f, -0.015095f, -0.009620f, -0.003295f, -0.006775f, 0.002644f, -0.005465f, 0.000154f, -0.002017f, 0.001335f, -0.010824f, -0.000671f, -0.004002f, -0.000510f, -0.006063f, -0.000116f, -0.009484f, 0.000870f, -0.007223f, 0.000626f, -0.006141f, 0.000598f, -0.002601f, 0.002254f, -0.004223f, 0.000968f, -0.005637f, 0.000023f, -0.006036f, -0.001614f, -0.007809f, -0.001106f, -0.005730f, -0.001460f, -0.005154f, -0.001190f, -0.003236f, -0.001384f, -0.005361f, -0.000911f, -0.002332f, -0.000443f, -0.003174f, -0.000144f, -0.004358f, -0.000522f, -0.002935f, -0.001461f, -0.001829f, -0.001185f, -0.002987f, -0.000849f, -0.002256f, -0.002053f, -0.001358f, -0.001056f, -0.001885f, -0.000704f, -0.001806f, -0.013008f, -0.045276f, 0.003241f, 0.155447f, 0.037386f, 0.066504f, + -0.034137f, -0.137977f, -0.073098f, -0.101073f, -0.036836f, 0.071195f, 0.156778f, 0.072824f, 0.015568f, -0.073615f, -0.073285f, 0.052005f, 0.076946f, 0.041125f, 0.093899f, -0.002149f, -0.064876f, -0.089970f, -0.046809f, -0.012268f, 0.069237f, 0.010656f, 0.039155f, 0.038643f, 0.004155f, 0.097189f, 0.064765f, -0.005438f, -0.011169f, -0.085920f, -0.023434f, 0.000041f, -0.000221f, 0.052232f, 0.087851f, 0.056927f, 0.041129f, 0.086310f, 0.046719f, -0.085660f, -0.072430f, -0.020062f, -0.057204f, 0.060472f, 0.037757f, 0.088548f, 0.065468f, 0.078557f, 0.020667f, 0.015521f, -0.064907f, -0.063838f, -0.063772f, 0.023789f, 0.029488f, 0.001836f, -0.010368f, 0.138587f, 0.032608f, -0.007373f, -0.014876f, 0.095550f, -0.101631f, 0.023022f, -0.191728f, -0.040378f, 0.045523f, -0.064316f, 0.060000f, 0.037143f, -0.000988f, 0.138479f, 0.062746f, -0.075337f, -0.155967f, -0.072004f, -0.071712f, -0.035797f, -0.027867f, -0.017794f, 0.065403f, 0.044892f, 0.088906f, 0.013059f, -0.068811f, -0.043934f, -0.072109f, -0.063165f, -0.066863f, 0.030854f, 0.004155f, 0.030551f, 0.036793f, -0.016082f, 0.033884f, 0.021160f, + -0.026938f, -0.000716f, -0.029633f, -0.006692f, -0.061798f, -0.061114f, -0.025660f, -0.025264f, -0.000855f, -0.057080f, 0.029678f, -0.001956f, 0.009055f, 0.018982f, -0.041601f, -0.079798f, -0.076307f, -0.001607f, 0.014364f, 0.019429f, 0.046944f, 0.014606f, -0.026497f, -0.043790f, 0.013427f, -0.015051f, -0.025032f, 0.011754f, -0.222371f, -0.134469f, -0.074713f, 0.066136f, 0.017714f, 0.303042f, 0.321510f, 0.196816f, 0.356619f, 0.293046f, 0.308329f, 0.215056f, 0.260728f, 0.213106f, 0.003013f, -0.100390f, -0.145215f, -0.137903f, -0.290784f, -0.347092f, -0.364375f, -0.252980f, -0.200471f, -0.077739f, 0.012956f, -0.101960f, 0.061867f, -0.128718f, -0.047768f, -0.008092f, -0.040997f, 0.031479f, -0.119797f, 0.164182f, 0.026960f, 0.149740f, 0.094757f, 0.056477f, 0.037961f, 0.083201f, 0.052753f, 0.085309f, 0.193547f, 0.185626f, 0.146448f, 0.181425f, 0.227609f, 0.208828f, 0.195238f, 0.360687f, 0.125320f, 0.254014f, 0.329069f, 0.227548f, 0.298824f, 0.159921f, 0.212658f, 0.167747f, 0.199562f, 0.217735f, 0.079413f, 0.141254f, 0.105591f, 0.132257f, 0.126271f, 0.035534f, -0.025837f, -0.137118f, + -0.051982f, -0.183199f, -0.161704f, -0.271353f, -0.308969f, -0.309488f, -0.655489f, -0.553580f, -0.596023f, -0.589785f, -0.689882f, -0.696250f, -0.430744f, -0.499480f, -0.373280f, -0.440614f, -0.336383f, -0.317070f, -0.277522f, -0.276923f, -0.160467f, -0.069830f, -0.102425f, -0.102018f, -0.084803f, 0.016655f, 0.131627f, 0.070018f, 0.275382f, 0.238619f, 0.348368f, 0.359740f, 0.330308f, 0.414447f, 0.382350f, 0.444743f, 0.346049f, 0.425545f, 0.449051f, 0.503923f, 0.438987f, 0.263626f, 0.261774f, 0.263315f, 0.265510f, 0.246757f, 0.171735f, 0.162667f, 0.066004f, 0.048349f, -0.007103f, 0.008634f, 0.031414f, -0.090279f, -0.135878f, -0.144670f, -0.091335f, -0.078595f, -0.151288f, -0.173038f, -0.204747f, -0.146340f, -0.189768f, -0.172752f, -0.148504f, -0.156286f, -0.162538f, -0.159303f, -0.043995f, -0.036614f, -0.022086f, -0.034820f, 0.018438f, -0.003669f, -0.006405f, -0.032476f, -0.014576f, 0.013419f, 0.018992f, 0.009088f, 0.027361f, 0.022418f, 0.033620f, 0.003030f, 0.003495f, -0.002745f, 0.016626f, -0.001270f, 0.004107f, 0.003353f, 0.010968f, 0.002380f, 0.002208f, -0.014318f, -0.000411f, -0.002562f, + 0.003481f, -0.009008f, -0.001469f, 0.000378f, 0.003910f, -0.007126f, -0.000013f, -0.005488f, -0.000997f, -0.011780f, -0.007061f, -0.007846f, -0.001566f, -0.011278f, -0.008641f, -0.018159f, -0.005949f, -0.006638f, 0.000262f, -0.008362f, -0.009868f, -0.019882f, -0.017191f, -0.023675f, -0.014256f, -0.018929f, -0.017299f, -0.026062f, -0.019862f, -0.020947f, -0.011988f, -0.016345f, -0.009956f, -0.014197f, -0.007033f, -0.007545f, 0.003556f, 0.006330f, 0.016741f, 0.013986f, 0.022108f, 0.022151f, 0.034776f, 0.036027f, 0.038550f, 0.036881f, 0.042741f, 0.037363f, 0.039237f, 0.033022f, 0.032436f, 0.023270f, 0.021336f, 0.009367f, 0.009293f, -0.000466f, -0.001987f, -0.009979f, -0.007385f, -0.011496f, -0.007782f, -0.011916f, -0.007258f, -0.010204f, -0.004806f, -0.007534f, -0.002189f, -0.005554f, -0.000680f, -0.004256f, 0.000419f, -0.003171f, 0.001398f, -0.002383f, 0.001946f} + }, + { + {0.010236f, 0.000201f, -0.003802f, -0.000868f, -0.009159f, -0.006295f, 0.004076f, 0.000362f, -0.005764f, 0.007178f, 0.004816f, -0.001555f, 0.000442f, -0.000973f, 0.005784f, -0.008015f, 0.003018f, 0.006010f, 0.005309f, -0.011534f, -0.008076f, -0.005727f, 0.007762f, 0.001883f, 0.002543f, -0.003207f, 0.008280f, 0.003114f, -0.002037f, 0.000228f, -0.002340f, 0.001632f, 0.003113f, -0.001826f, -0.002361f, -0.006935f, 0.007411f, 0.012327f, 0.001475f, 0.007835f, -0.001432f, 0.001590f, 0.002829f, 0.003417f, -0.009321f, 0.000674f, -0.009738f, -0.002223f, -0.001363f, 0.003089f, -0.004902f, -0.000143f, 0.002158f, 0.001001f, -0.005669f, 0.000244f, 0.000666f, 0.004677f, -0.006028f, -0.007569f, -0.001002f, 0.010321f, 0.016543f, 0.000057f, 0.002727f, 0.001172f, -0.003520f, -0.009904f, -0.002507f, 0.006953f, -0.003149f, 0.006926f, 0.002695f, 0.007054f, -0.000360f, 0.002763f, 0.002510f, -0.005897f, -0.007996f, -0.000810f, 0.003052f, 0.004641f, 0.002256f, 0.002097f, 0.001403f, 0.001589f, -0.002724f, -0.004338f, -0.002958f, -0.002342f, -0.001119f, 0.000128f, -0.001623f, -0.000180f, 0.001495f, 0.002414f, + 0.002119f, -0.000282f, 0.000176f, 0.001455f, -0.000003f, -0.001683f, 0.004795f, -0.010461f, -0.002255f, -0.009926f, 0.005781f, 0.000540f, -0.004432f, 0.020857f, -0.008091f, -0.015111f, 0.001242f, 0.006858f, -0.001171f, -0.011395f, -0.003121f, -0.005007f, -0.001753f, -0.005454f, -0.001665f, 0.007677f, -0.000448f, -0.005167f, 0.009014f, 0.001215f, 0.008759f, -0.002400f, -0.002031f, 0.003237f, 0.000322f, 0.003786f, -0.001527f, 0.008080f, 0.013454f, -0.003775f, -0.008884f, -0.006674f, 0.005607f, -0.000109f, -0.020472f, -0.002047f, -0.008099f, -0.003144f, 0.010168f, -0.007122f, -0.005243f, 0.006854f, -0.004442f, -0.001084f, 0.009334f, 0.003096f, -0.007183f, 0.003173f, -0.005145f, -0.012239f, 0.003986f, 0.004679f, -0.009123f, -0.005428f, -0.002564f, -0.003966f, 0.000019f, 0.003868f, 0.006405f, 0.009454f, 0.010773f, -0.002633f, 0.001198f, -0.004296f, 0.004708f, 0.002845f, -0.002262f, 0.004382f, 0.006961f, -0.006629f, -0.003229f, 0.001022f, 0.000242f, 0.002557f, 0.007983f, -0.001075f, -0.001997f, 0.007056f, 0.001160f, -0.005030f, -0.002986f, -0.000455f, -0.002925f, 0.002105f, -0.001147f, -0.002814f, + 0.001235f, -0.003182f, -0.002330f, 0.001466f, -0.003004f, -0.002187f, 0.000208f, 0.001996f, -0.003744f, 0.000372f, -0.000820f, -0.001418f, -0.001742f, -0.000245f, -0.002893f, -0.000927f, -0.002764f, -0.016828f, -0.008607f, 0.005223f, 0.007434f, 0.002953f, 0.008069f, -0.006894f, 0.008448f, 0.010451f, -0.002961f, 0.011563f, -0.001607f, 0.008528f, -0.004069f, 0.000302f, -0.003652f, 0.010896f, 0.004204f, -0.000398f, 0.009665f, -0.005122f, -0.004133f, 0.007140f, -0.016877f, -0.002890f, 0.000893f, -0.003543f, -0.015042f, -0.009128f, 0.006202f, -0.005839f, -0.003941f, 0.000260f, 0.011721f, -0.002777f, -0.008247f, -0.000604f, 0.002999f, 0.006688f, -0.001033f, -0.010605f, -0.006889f, -0.001913f, -0.005480f, 0.001818f, -0.009294f, 0.004653f, -0.008745f, -0.012775f, 0.000391f, 0.004545f, 0.005196f, -0.004053f, -0.002965f, -0.008366f, 0.010870f, 0.006347f, 0.001503f, 0.000163f, -0.000319f, -0.003645f, -0.001997f, 0.003736f, 0.004635f, 0.016483f, -0.001864f, 0.004191f, 0.001067f, -0.000437f, -0.008055f, -0.006057f, 0.011125f, -0.004732f, 0.001086f, 0.002822f, 0.001603f, -0.001691f, 0.008409f, 0.000505f, + 0.000300f, -0.009074f, 0.008821f, 0.005012f, -0.003419f, -0.001971f, -0.000995f, -0.002592f, 0.001215f, 0.006429f, -0.000091f, 0.002592f, 0.001924f, -0.000830f, 0.001475f, 0.003354f, -0.000345f, 0.000070f, 0.001011f, 0.001599f, 0.001318f, 0.001946f, 0.003404f, 0.001342f, -0.002496f, 0.002686f, 0.001216f, -0.001768f, -0.001437f, -0.000228f, 0.000394f, 0.000051f, 0.004133f, 0.004978f, 0.004536f, 0.010689f, -0.007083f, -0.010690f, -0.008552f, 0.005327f, 0.011908f, -0.002280f, 0.009126f, -0.008167f, -0.009823f, 0.008065f, -0.004079f, 0.000762f, 0.003054f, 0.010121f, 0.003801f, 0.016119f, -0.007049f, -0.008726f, 0.003792f, -0.004876f, -0.004509f, 0.009092f, -0.014326f, -0.008931f, 0.001439f, -0.002866f, 0.006529f, -0.004964f, 0.001796f, 0.011422f, -0.010732f, 0.007910f, -0.006481f, 0.005087f, -0.006074f, -0.001831f, -0.000989f, 0.011832f, 0.002235f, 0.000315f, -0.008754f, 0.000318f, -0.010417f, 0.003788f, 0.002550f, -0.007066f, -0.000187f, -0.002995f, 0.017994f, 0.002306f, 0.001130f, -0.015756f, -0.009193f, -0.013310f, 0.010270f, -0.006845f, -0.000773f, 0.005300f, 0.022950f, 0.016095f, + -0.006522f, -0.014272f, -0.005926f, -0.012412f, 0.012944f, -0.002628f, -0.003630f, -0.005821f, -0.003815f, -0.001207f, -0.005978f, -0.004075f, -0.001033f, -0.004959f, 0.003413f, -0.003516f, 0.004802f, -0.018026f, 0.001172f, -0.001630f, -0.005696f, -0.002807f, -0.006047f, -0.001363f, -0.009431f, 0.000603f, -0.003938f, -0.000481f, 0.005648f, -0.001972f, -0.002057f, -0.004180f, -0.004507f, -0.001426f, 0.001226f, -0.000430f, -0.000432f, -0.001778f, -0.000738f, -0.002073f, -0.000355f, 0.000270f, 0.001061f, -0.001529f, -0.001630f, -0.002322f, -0.001988f, -0.001827f, -0.002952f, 0.001007f, -0.000995f, -0.000244f, -0.003000f, -0.008920f, 0.006366f, -0.009236f, -0.016810f, 0.017138f, 0.007561f, -0.017717f, 0.017707f, -0.002737f, -0.001176f, -0.024951f, 0.014796f, 0.010078f, -0.020415f, 0.006158f, -0.003480f, 0.007806f, 0.001644f, 0.008975f, 0.005547f, 0.002379f, -0.009566f, 0.000999f, 0.003341f, -0.012355f, -0.005447f, -0.014602f, -0.002655f, -0.009035f, -0.005028f, 0.001784f, -0.011655f, -0.004135f, -0.017113f, 0.006532f, 0.001559f, 0.001573f, 0.001365f, -0.007199f, -0.014915f, -0.004512f, 0.005074f, -0.002293f, + -0.001408f, 0.015587f, -0.023096f, 0.009753f, 0.011605f, -0.001602f, 0.000610f, -0.004371f, -0.001945f, -0.007349f, -0.011476f, -0.007644f, -0.009070f, -0.005888f, 0.005571f, 0.003243f, 0.004945f, 0.007838f, -0.001979f, -0.004046f, 0.010927f, 0.021208f, 0.014770f, -0.000236f, -0.018115f, 0.005022f, -0.002892f, 0.002723f, 0.018917f, -0.000049f, 0.019057f, 0.017199f, -0.002485f, -0.005673f, -0.004740f, 0.001408f, 0.001519f, 0.006448f, 0.019323f, 0.005250f, 0.000638f, -0.001943f, -0.012201f, 0.001488f, 0.003584f, -0.004035f, -0.000733f, 0.000663f, -0.000296f, 0.002286f, 0.001555f, 0.001416f, -0.001653f, 0.002393f, 0.002020f, 0.002139f, 0.002259f, -0.006505f, -0.001187f, -0.004668f, 0.001728f, -0.003645f, 0.001405f, -0.001027f, -0.001825f, -0.003911f, 0.000603f, 0.000992f, -0.005864f, -0.001817f, 0.001200f, 0.000164f, 0.026891f, 0.007101f, -0.004985f, -0.001133f, 0.008151f, -0.002667f, 0.026044f, -0.002606f, -0.004204f, 0.033403f, 0.000032f, 0.016978f, -0.006422f, 0.000640f, -0.001625f, 0.002913f, -0.004427f, 0.002485f, -0.000697f, -0.000772f, -0.018205f, -0.001547f, -0.004473f, -0.003049f, + -0.007690f, 0.011718f, 0.005219f, 0.007045f, -0.010291f, -0.000943f, -0.016160f, -0.006220f, 0.002824f, -0.001123f, -0.009895f, -0.002816f, 0.005162f, 0.012236f, 0.007118f, -0.003645f, -0.015039f, -0.000342f, 0.004050f, -0.002318f, 0.007692f, 0.005410f, 0.010491f, 0.014892f, -0.004966f, 0.000082f, -0.016050f, -0.019110f, 0.018022f, 0.009955f, -0.000842f, -0.000631f, -0.000788f, -0.006856f, -0.007899f, 0.000028f, 0.014389f, 0.008602f, 0.002460f, 0.017963f, -0.013818f, 0.004178f, -0.011368f, -0.008446f, 0.007463f, 0.008040f, 0.006284f, 0.026967f, -0.001156f, -0.011923f, 0.001914f, -0.011684f, 0.005185f, 0.003307f, 0.009593f, -0.005101f, -0.000037f, 0.001390f, -0.009190f, -0.001424f, 0.006103f, -0.000757f, 0.001438f, -0.003725f, -0.002189f, -0.000403f, 0.004164f, -0.002118f, 0.002558f, -0.003961f, 0.000193f, -0.005175f, 0.001519f, -0.002661f, -0.002037f, 0.001044f, 0.002509f, -0.003131f, 0.003389f, 0.002484f, 0.004180f, 0.000457f, 0.002397f, -0.000931f, 0.001385f, 0.000986f, 0.001402f, -0.001475f, -0.000237f, -0.001369f, -0.000426f, 0.000981f, 0.002061f, -0.001787f, 0.000715f, -0.000384f, + -0.014885f, -0.019929f, 0.007722f, -0.018625f, -0.000020f, 0.020785f, -0.021748f, 0.007975f, 0.009726f, -0.005804f, -0.026837f, 0.000378f, 0.015659f, -0.017324f, 0.010763f, -0.001191f, -0.007714f, -0.022472f, -0.000657f, -0.016207f, 0.002850f, -0.008218f, -0.012672f, -0.015766f, 0.006467f, -0.002217f, -0.000948f, 0.015031f, -0.009106f, 0.012684f, -0.009640f, -0.003826f, 0.019377f, 0.006672f, -0.010374f, 0.007988f, 0.004662f, -0.008954f, 0.004711f, 0.004903f, -0.003465f, -0.003812f, 0.000755f, -0.004305f, -0.005137f, 0.003200f, 0.003531f, 0.026424f, -0.024879f, 0.004043f, 0.001566f, -0.008887f, 0.017854f, 0.010195f, -0.006154f, -0.019251f, 0.001696f, -0.001929f, -0.005838f, -0.012141f, -0.014268f, 0.017409f, 0.011255f, 0.001465f, -0.001758f, 0.009286f, 0.004681f, -0.004185f, 0.007390f, 0.005348f, -0.004842f, 0.018523f, -0.006889f, 0.011341f, -0.007595f, 0.005655f, 0.005797f, 0.004196f, -0.000581f, -0.010267f, 0.009816f, -0.007987f, -0.008363f, -0.005698f, 0.002845f, 0.000010f, 0.001199f, -0.009735f, 0.005284f, 0.004133f, -0.006203f, 0.000667f, -0.000265f, -0.003057f, 0.000560f, -0.002015f, + 0.004699f, -0.001330f, 0.000701f, 0.003984f, -0.001815f, -0.002967f, 0.002602f, -0.003387f, 0.002742f, -0.000579f, -0.000060f, -0.003902f, -0.001786f, -0.000096f, -0.004325f, 0.004284f, 0.002383f, 0.000999f, 0.002795f, -0.000871f, 0.001897f, -0.001034f, 0.008777f, -0.020094f, 0.014739f, -0.008392f, -0.003719f, -0.011521f, -0.008315f, 0.007065f, -0.006634f, 0.005784f, 0.022533f, 0.007749f, 0.012380f, -0.028722f, -0.019031f, -0.010215f, -0.006881f, 0.003143f, -0.000135f, 0.004992f, -0.024135f, 0.012949f, 0.005380f, 0.003259f, 0.023021f, 0.000422f, -0.013052f, 0.021647f, 0.008503f, -0.009611f, 0.004414f, -0.012361f, 0.011358f, 0.005390f, 0.015138f, -0.012941f, -0.009215f, 0.003872f, -0.013122f, 0.016586f, -0.015176f, -0.000227f, 0.014706f, 0.013586f, -0.028012f, -0.000752f, 0.001368f, 0.003300f, 0.004630f, 0.030643f, 0.007064f, 0.001957f, -0.009367f, -0.007692f, -0.016545f, -0.008913f, 0.022620f, 0.000595f, -0.027007f, 0.000457f, 0.006251f, -0.015288f, -0.016881f, 0.002056f, -0.010950f, 0.004542f, 0.024793f, 0.012219f, 0.010434f, -0.010119f, -0.026494f, 0.002190f, -0.004534f, 0.012216f, + -0.002382f, -0.022134f, -0.002698f, 0.005847f, 0.006115f, 0.006050f, -0.001871f, 0.018848f, 0.003550f, -0.011891f, 0.015504f, -0.001083f, 0.009280f, -0.000247f, -0.002311f, -0.008002f, 0.011459f, 0.007946f, 0.004484f, -0.005789f, -0.002283f, -0.001471f, -0.003862f, 0.002246f, -0.000019f, -0.004906f, 0.002485f, 0.001582f, -0.002792f, -0.003630f, -0.001536f, -0.002723f, -0.000400f, 0.003562f, -0.003554f, 0.001876f, 0.004392f, 0.005330f, -0.001339f, 0.002323f, -0.002781f, -0.035426f, -0.010589f, 0.010055f, 0.027376f, 0.003937f, 0.014194f, 0.048673f, 0.008075f, 0.008329f, -0.007531f, -0.023291f, 0.013210f, -0.011280f, 0.012173f, -0.002905f, 0.032174f, 0.023481f, -0.012420f, -0.026318f, -0.020955f, 0.015922f, -0.013959f, 0.019512f, 0.008560f, 0.006375f, -0.006737f, -0.002542f, 0.023153f, -0.004544f, 0.020432f, 0.020482f, 0.010566f, 0.014375f, -0.015913f, 0.015564f, 0.008372f, -0.008306f, 0.022626f, -0.009952f, 0.020556f, 0.001571f, 0.002319f, -0.030150f, 0.018180f, 0.001686f, -0.005679f, 0.014929f, -0.021037f, -0.008324f, 0.012597f, 0.010322f, -0.019383f, 0.003143f, -0.012401f, -0.007105f, + 0.019188f, 0.002599f, 0.005788f, -0.002010f, -0.022110f, 0.014857f, 0.014083f, 0.000982f, 0.011134f, 0.005016f, -0.009797f, -0.010269f, -0.000836f, 0.011806f, -0.020022f, -0.000707f, 0.001282f, 0.000885f, -0.000193f, 0.008780f, 0.011510f, 0.023660f, 0.013268f, 0.000798f, -0.033230f, -0.010912f, -0.012443f, -0.001100f, 0.002457f, -0.009322f, -0.019700f, -0.006193f, -0.008878f, 0.005206f, 0.000761f, -0.005603f, 0.002103f, -0.005747f, 0.009156f, -0.003285f, -0.003925f, -0.005423f, 0.000099f, 0.002652f, -0.011849f, 0.007437f, -0.007624f, 0.003092f, -0.001965f, -0.004370f, 0.000202f, -0.007296f, 0.002352f, -0.006583f, -0.004805f, -0.000942f, -0.003811f, -0.003506f, 0.004058f, 0.006998f, 0.004185f, 0.006737f, 0.008763f, -0.001828f, 0.001291f, 0.043937f, 0.012830f, 0.005865f, -0.016305f, -0.039532f, 0.028583f, 0.008941f, -0.026268f, 0.007847f, -0.002879f, 0.006744f, 0.005517f, -0.018952f, -0.040592f, -0.031741f, 0.010660f, 0.024855f, -0.004990f, 0.026091f, -0.012161f, 0.020353f, 0.024784f, 0.033663f, -0.007503f, 0.024870f, -0.022174f, 0.008409f, -0.012138f, 0.002975f, 0.013329f, -0.000604f, + -0.007275f, 0.006029f, 0.016750f, -0.012049f, -0.022509f, -0.022714f, 0.047377f, 0.000040f, -0.002482f, -0.021478f, 0.021902f, 0.007105f, -0.043945f, -0.025443f, 0.009701f, -0.006237f, -0.007894f, 0.017037f, 0.005653f, 0.042324f, 0.023272f, -0.001594f, -0.024796f, -0.024283f, -0.013889f, -0.010046f, -0.028123f, 0.025739f, -0.019293f, 0.020340f, 0.017401f, -0.017821f, -0.023008f, -0.022184f, -0.032392f, 0.007709f, -0.000738f, -0.011713f, -0.014777f, -0.023769f, -0.008676f, -0.023420f, 0.004678f, 0.002658f, -0.008149f, 0.003007f, 0.018835f, -0.048866f, -0.019159f, -0.039915f, 0.019811f, 0.013793f, -0.017322f, -0.005944f, 0.007895f, -0.007695f, -0.000526f, 0.009213f, -0.007663f, -0.016124f, -0.002073f, -0.004806f, -0.005326f, -0.000429f, -0.002389f, -0.007000f, -0.000064f, 0.001162f, 0.008156f, -0.011987f, 0.002761f, 0.006179f, -0.001088f, -0.005129f, -0.007887f, -0.002470f, -0.001529f, 0.001379f, -0.002985f, -0.000940f, -0.004961f, 0.001934f, -0.002241f, -0.007809f, 0.012911f, 0.001054f, 0.003593f, -0.010621f, -0.024087f, -0.044935f, -0.010595f, -0.011269f, 0.002030f, -0.010014f, 0.001495f, 0.005349f, + -0.005354f, 0.020086f, -0.025631f, -0.007060f, -0.024338f, -0.000584f, -0.012330f, 0.028264f, 0.030514f, 0.025328f, -0.034930f, 0.025089f, -0.012872f, 0.019211f, -0.007537f, 0.014356f, -0.011846f, -0.014115f, 0.004936f, -0.018411f, 0.011890f, 0.015424f, -0.002195f, 0.009533f, -0.017817f, -0.001532f, 0.029222f, -0.022836f, 0.000789f, -0.006295f, -0.009968f, -0.018264f, -0.001375f, 0.029907f, 0.038186f, -0.023582f, 0.011339f, -0.002337f, -0.023644f, -0.023163f, -0.025932f, -0.011014f, 0.048461f, 0.030156f, -0.009366f, 0.016387f, -0.010590f, 0.014301f, -0.026900f, 0.016420f, -0.001028f, -0.013818f, 0.036878f, 0.019884f, 0.007371f, 0.012896f, 0.010424f, 0.035505f, 0.004421f, -0.028698f, 0.011823f, 0.023269f, 0.017456f, -0.050654f, 0.031260f, -0.021045f, -0.019559f, -0.008813f, 0.003076f, -0.019381f, 0.022112f, 0.050112f, -0.008667f, 0.007870f, 0.025110f, 0.005109f, -0.004202f, 0.006830f, 0.002512f, 0.015219f, 0.012873f, 0.008627f, 0.023603f, 0.012981f, -0.006605f, 0.016955f, 0.009990f, -0.006234f, -0.014381f, 0.009001f, -0.001971f, 0.009680f, -0.004090f, 0.003528f, 0.007200f, 0.003723f, + -0.001990f, -0.000855f, 0.003310f, 0.011999f, 0.002512f, -0.001675f, 0.002562f, 0.009450f, -0.003618f, 0.001409f, 0.014480f, 0.006500f, -0.003653f, 0.008817f, 0.002646f, 0.003071f, 0.006098f, 0.000844f, 0.005085f, -0.001247f, -0.008900f, -0.007286f, 0.007376f, -0.003368f, 0.032235f, 0.020210f, 0.086558f, 0.023595f, -0.013899f, 0.005069f, 0.015042f, -0.000091f, 0.029222f, 0.020878f, 0.020424f, -0.026023f, -0.042151f, 0.042307f, -0.023619f, 0.003639f, 0.015377f, 0.046478f, 0.019407f, -0.028809f, 0.026224f, -0.026091f, -0.004723f, -0.035715f, -0.045781f, -0.005586f, 0.013109f, 0.012112f, 0.009925f, 0.011442f, -0.003075f, -0.032209f, -0.011169f, 0.009854f, 0.011353f, -0.017225f, 0.035936f, 0.022047f, -0.020568f, 0.011356f, 0.018204f, 0.006538f, 0.001694f, -0.019893f, -0.001803f, -0.014053f, -0.007461f, 0.001660f, 0.022611f, 0.054362f, -0.014217f, 0.004640f, 0.008703f, 0.020067f, -0.018934f, 0.069013f, -0.005347f, 0.006388f, 0.006447f, -0.031800f, -0.030205f, -0.050131f, -0.020498f, 0.026948f, -0.008887f, 0.013397f, 0.011710f, 0.047409f, 0.008305f, 0.008257f, 0.003203f, 0.037303f, + 0.018845f, -0.016024f, 0.035201f, -0.031715f, 0.005735f, 0.031514f, 0.041716f, 0.037457f, 0.015590f, -0.021802f, -0.034384f, -0.015435f, -0.010503f, -0.025911f, -0.013551f, -0.014859f, -0.003321f, -0.021793f, 0.006172f, -0.007675f, -0.002792f, -0.019025f, -0.001464f, -0.011958f, 0.019296f, 0.001659f, 0.004811f, -0.016940f, -0.002458f, -0.023164f, 0.002361f, 0.009555f, 0.000039f, 0.016521f, 0.011355f, -0.000195f, 0.007718f, -0.003702f, -0.009541f, -0.006287f, -0.003841f, -0.019846f, 0.002623f, 0.003724f, 0.005498f, 0.005667f, -0.008882f, 0.013683f, 0.015856f, 0.006451f, -0.010805f, -0.007999f, -0.003037f, 0.003223f, 0.009164f, 0.004362f, -0.006930f, -0.004146f, -0.003016f, -0.008703f, -0.036165f, 0.020502f, 0.009198f, 0.025080f, -0.007046f, -0.054445f, 0.003954f, -0.036443f, -0.032990f, 0.009914f, 0.007350f, 0.015488f, -0.009965f, 0.011195f, -0.002398f, -0.018528f, 0.029355f, -0.004637f, -0.010368f, -0.011788f, -0.021436f, -0.017801f, 0.010345f, -0.022489f, 0.005005f, -0.014360f, -0.010481f, -0.006157f, 0.028729f, -0.005673f, 0.030867f, 0.019701f, -0.008807f, 0.010471f, 0.010298f, 0.022345f, + -0.016000f, -0.021055f, 0.002574f, 0.013144f, 0.016538f, 0.029456f, -0.033138f, -0.031585f, 0.012903f, 0.010471f, 0.035719f, -0.017953f, -0.003247f, 0.018012f, -0.000553f, 0.005015f, -0.007388f, 0.023740f, 0.029206f, 0.013662f, -0.004500f, 0.018705f, 0.061981f, -0.013924f, -0.019020f, 0.023211f, -0.003313f, 0.036542f, 0.008051f, 0.017002f, 0.019872f, -0.006794f, 0.013666f, 0.042268f, -0.012359f, -0.051018f, 0.035004f, 0.010342f, -0.017599f, 0.004756f, -0.078424f, 0.051607f, -0.001369f, 0.031928f, -0.021243f, 0.016572f, 0.001482f, -0.031114f, -0.030384f, -0.004252f, 0.004809f, -0.023071f, -0.000808f, 0.003287f, -0.005147f, -0.007845f, -0.005727f, -0.025260f, -0.005133f, -0.015281f, -0.000782f, -0.008134f, -0.003282f, -0.009291f, 0.014016f, -0.011483f, -0.009572f, -0.016466f, -0.008867f, -0.018758f, -0.004481f, 0.003761f, -0.011347f, -0.001542f, -0.009513f, -0.009552f, -0.011056f, -0.001024f, -0.009370f, -0.006550f, 0.001777f, -0.003086f, 0.006801f, -0.006177f, -0.012987f, -0.013358f, -0.001166f, 0.001727f, -0.009375f, -0.002175f, -0.004944f, 0.003413f, -0.018618f, -0.000312f, -0.034278f, -0.000537f, + 0.050546f, 0.026454f, -0.067665f, 0.011273f, -0.013138f, 0.006630f, 0.009741f, -0.002404f, -0.035451f, 0.005609f, -0.006464f, 0.030606f, 0.056633f, -0.008761f, 0.017441f, 0.038873f, -0.002879f, -0.009927f, -0.010961f, 0.015829f, 0.056529f, -0.000438f, -0.005198f, 0.048188f, -0.020514f, 0.013510f, -0.001086f, -0.000085f, -0.013597f, 0.018546f, -0.054189f, 0.002333f, 0.015545f, 0.039376f, 0.039924f, -0.033210f, 0.000200f, 0.037848f, -0.003485f, 0.069878f, -0.026367f, -0.033272f, 0.003410f, 0.050937f, 0.007633f, -0.037957f, -0.019354f, 0.012101f, -0.001392f, 0.022544f, -0.057491f, 0.007530f, 0.001276f, -0.011105f, -0.042051f, -0.035522f, 0.008358f, -0.010343f, -0.003764f, 0.002680f, -0.043730f, -0.043920f, 0.008222f, 0.007632f, -0.046284f, -0.014602f, -0.030525f, 0.026869f, -0.072450f, -0.026297f, 0.022106f, -0.042572f, 0.022405f, -0.011026f, -0.018638f, 0.024240f, -0.008567f, 0.036092f, 0.032355f, 0.008214f, 0.019575f, -0.008833f, 0.002918f, -0.024475f, 0.025823f, -0.018842f, 0.014818f, -0.025679f, 0.018087f, 0.001953f, 0.007302f, -0.001649f, -0.001254f, -0.014497f, 0.016590f, -0.019205f, + 0.002028f, 0.002882f, 0.008703f, -0.021145f, 0.009881f, -0.008194f, -0.007528f, 0.007469f, -0.006068f, -0.009612f, 0.013185f, 0.006767f, 0.014182f, 0.007496f, -0.003093f, -0.006781f, -0.008961f, -0.001398f, 0.001427f, -0.009771f, 0.002146f, -0.006979f, 0.002143f, -0.020299f, -0.012435f, -0.007983f, 0.009162f, 0.012917f, -0.008418f, 0.003333f, -0.004667f, 0.005887f, -0.018118f, 0.038322f, -0.000715f, 0.021526f, -0.039987f, -0.002215f, -0.037891f, 0.039667f, 0.016529f, 0.051672f, 0.035190f, -0.017365f, 0.006161f, 0.040958f, 0.019959f, 0.021193f, 0.012418f, -0.033493f, -0.010495f, 0.017503f, 0.001991f, 0.020543f, -0.044322f, -0.031675f, 0.018996f, 0.065980f, 0.008179f, -0.020923f, 0.040540f, 0.012422f, 0.025066f, 0.007481f, 0.004322f, -0.036200f, -0.038264f, 0.001311f, -0.000108f, -0.063892f, 0.004485f, -0.012625f, -0.004061f, 0.021047f, -0.025929f, 0.016057f, 0.049940f, 0.005941f, -0.083393f, -0.058809f, -0.010450f, -0.017685f, -0.021318f, -0.000018f, 0.014270f, 0.013689f, -0.021043f, 0.023490f, 0.020927f, 0.020264f, -0.013575f, 0.017517f, -0.010125f, -0.020930f, -0.005890f, 0.019483f, + -0.062486f, -0.013524f, -0.028663f, -0.031605f, -0.013623f, 0.009229f, -0.017207f, -0.001151f, 0.067088f, 0.039169f, -0.026943f, 0.000762f, -0.000078f, -0.011186f, -0.012956f, 0.006488f, 0.044701f, 0.017168f, 0.006042f, -0.013618f, -0.011119f, -0.023134f, -0.028119f, -0.028548f, -0.007533f, 0.004222f, 0.008136f, -0.009684f, 0.007169f, -0.001934f, -0.007525f, -0.002035f, -0.008684f, -0.025034f, -0.007264f, 0.000237f, -0.007363f, -0.021600f, 0.001877f, -0.007531f, 0.023128f, -0.011701f, 0.007217f, -0.001997f, 0.008994f, 0.000328f, -0.020403f, 0.002103f, 0.022394f, 0.004008f, 0.020042f, -0.005352f, 0.009788f, -0.006289f, 0.005857f, -0.001020f, -0.015423f, -0.005992f, -0.002521f, -0.002169f, -0.003847f, 0.000310f, -0.005364f, -0.010302f, 0.013652f, 0.026895f, -0.037338f, -0.009179f, -0.016017f, 0.010061f, 0.077052f, 0.012428f, -0.038415f, 0.010265f, 0.033845f, -0.007149f, 0.031599f, 0.040846f, -0.021337f, 0.009790f, 0.020185f, 0.014183f, 0.000564f, -0.005821f, -0.012929f, 0.006229f, 0.023771f, 0.012595f, 0.022176f, -0.033609f, -0.052388f, -0.005383f, 0.022866f, 0.020622f, 0.016317f, -0.005774f, + -0.048361f, 0.015611f, 0.010293f, 0.072053f, 0.075250f, 0.018106f, -0.056610f, 0.040832f, -0.021781f, -0.057360f, -0.013798f, -0.067912f, -0.052199f, -0.022758f, -0.025337f, -0.052642f, 0.008834f, -0.021145f, -0.060784f, -0.055169f, 0.015612f, 0.036013f, -0.006288f, -0.046561f, 0.013505f, 0.001445f, 0.014566f, 0.029485f, 0.028264f, -0.036012f, 0.046239f, 0.032118f, 0.003701f, 0.012967f, 0.032062f, -0.001608f, 0.084449f, -0.060396f, -0.029286f, -0.001949f, -0.069371f, 0.056708f, 0.003762f, 0.071259f, 0.021608f, 0.015993f, -0.003973f, 0.014167f, 0.029800f, 0.001241f, -0.028464f, -0.000402f, -0.015368f, 0.011340f, 0.010497f, 0.020399f, -0.008912f, -0.025960f, -0.000545f, 0.024190f, 0.011059f, -0.015391f, -0.008084f, 0.012730f, -0.017691f, -0.000056f, 0.000005f, 0.022206f, 0.008312f, -0.012076f, -0.005629f, -0.013726f, -0.022612f, -0.019250f, -0.001432f, 0.004232f, -0.011391f, -0.008084f, 0.002230f, -0.011102f, 0.017075f, 0.008516f, -0.000561f, 0.010488f, 0.034853f, -0.013384f, -0.007043f, 0.003977f, 0.009116f, -0.018985f, 0.020302f, -0.006950f, -0.000961f, 0.003519f, 0.014966f, 0.026425f, + -0.038168f, 0.010352f, -0.075759f, -0.019948f, -0.005137f, -0.018078f, 0.082185f, 0.026496f, -0.022433f, -0.051490f, -0.026808f, -0.020939f, -0.033380f, -0.023709f, 0.012157f, -0.075378f, -0.016808f, 0.056073f, -0.007076f, -0.005827f, -0.058414f, 0.055672f, 0.026890f, 0.001663f, -0.022465f, 0.023962f, 0.011181f, -0.012781f, 0.024717f, -0.038735f, -0.010893f, -0.019587f, 0.010717f, -0.008739f, -0.025177f, 0.028407f, -0.021554f, 0.012080f, 0.000289f, -0.037635f, -0.024206f, -0.005542f, -0.048126f, -0.046345f, -0.063107f, -0.015766f, 0.028168f, -0.020627f, -0.012003f, 0.036487f, -0.044581f, -0.035826f, 0.038486f, 0.000063f, -0.002810f, 0.035525f, -0.000038f, -0.029706f, -0.017834f, 0.012233f, 0.024865f, -0.038494f, -0.012771f, 0.047661f, 0.019874f, 0.046000f, 0.023086f, -0.008981f, 0.023465f, -0.001476f, -0.062386f, 0.019777f, -0.047340f, 0.034247f, 0.005343f, 0.012785f, -0.020268f, -0.053109f, 0.010663f, -0.007625f, -0.046992f, -0.018248f, 0.020225f, -0.023200f, 0.000373f, 0.007661f, 0.014556f, -0.014763f, 0.000208f, 0.002599f, -0.004612f, 0.010034f, -0.007575f, 0.005770f, 0.018410f, -0.003174f, + 0.005894f, 0.005343f, -0.012976f, 0.004235f, 0.008493f, 0.005543f, -0.009864f, 0.012872f, 0.008039f, -0.000577f, -0.013566f, -0.026047f, 0.004768f, -0.020539f, 0.016291f, -0.020978f, 0.013306f, 0.017796f, 0.000140f, 0.001352f, -0.000187f, 0.010262f, 0.000845f, -0.008744f, 0.019828f, 0.016767f, -0.008852f, -0.005539f, -0.013170f, -0.021248f, 0.056148f, 0.019952f, 0.001815f, 0.007144f, -0.015002f, 0.022620f, 0.034490f, 0.088314f, 0.076642f, 0.006900f, -0.034139f, 0.015911f, 0.044320f, 0.012991f, 0.034254f, 0.025150f, 0.016440f, -0.025863f, -0.033805f, -0.040045f, -0.003097f, 0.015202f, 0.028081f, 0.057442f, 0.029981f, 0.036920f, 0.021038f, 0.034245f, 0.016866f, 0.032994f, -0.022186f, 0.006402f, 0.061546f, -0.001442f, 0.047276f, 0.012831f, 0.038173f, -0.060840f, -0.010242f, -0.017783f, -0.018306f, 0.014453f, 0.023463f, 0.044433f, 0.071220f, 0.060134f, -0.021566f, 0.010849f, -0.079773f, 0.019503f, 0.017964f, 0.070201f, -0.055980f, 0.044470f, -0.014784f, -0.038813f, 0.029554f, 0.009420f, 0.024606f, 0.044042f, -0.014613f, -0.055966f, 0.028717f, -0.035915f, -0.049860f, -0.023345f, + 0.065881f, -0.057313f, -0.081973f, -0.041004f, -0.013886f, 0.043226f, -0.004861f, -0.029171f, -0.056699f, -0.042351f, 0.026561f, -0.003675f, -0.001434f, 0.036657f, -0.040127f, 0.011532f, 0.040420f, 0.016061f, 0.026927f, 0.039689f, -0.027166f, -0.013327f, -0.023025f, 0.030391f, 0.006306f, 0.015723f, 0.010607f, -0.027050f, 0.033369f, 0.008502f, 0.004932f, -0.013177f, -0.049825f, -0.047040f, 0.004269f, -0.022313f, -0.009761f, -0.021159f, -0.018973f, -0.007990f, 0.008251f, -0.000145f, -0.021296f, 0.026743f, 0.021830f, -0.002867f, -0.024127f, 0.004009f, 0.013759f, -0.016772f, -0.008150f, -0.009579f, -0.000304f, 0.011624f, -0.005821f, -0.011560f, -0.009982f, 0.008207f, 0.006232f, 0.013090f, 0.015633f, -0.008365f, -0.007709f, -0.009524f, 0.009006f, 0.010254f, 0.055106f, -0.017204f, -0.061372f, 0.004549f, -0.025756f, -0.087154f, -0.044425f, 0.114919f, 0.015832f, -0.051501f, -0.057046f, 0.006684f, 0.000827f, 0.023968f, 0.029584f, -0.039804f, -0.026800f, -0.063668f, 0.014728f, -0.022900f, -0.015517f, 0.098068f, 0.020840f, -0.013204f, -0.101045f, -0.006194f, -0.054015f, 0.053728f, 0.065830f, 0.007253f, + 0.051195f, -0.060114f, -0.023902f, -0.037848f, -0.009130f, 0.100187f, 0.124226f, 0.020220f, -0.033279f, -0.044031f, -0.089849f, 0.001606f, 0.011535f, 0.108914f, 0.060497f, -0.015469f, -0.178479f, -0.092019f, 0.015307f, -0.016721f, 0.156666f, 0.052944f, -0.075253f, -0.030868f, -0.134307f, -0.042062f, 0.004707f, 0.088272f, 0.090603f, 0.102191f, 0.004842f, 0.024570f, -0.010696f, 0.009262f, 0.125155f, -0.045697f, 0.091945f, -0.021766f, -0.094366f, -0.027755f, -0.100027f, -0.031626f, 0.131075f, 0.060106f, 0.093613f, -0.030470f, 0.073434f, -0.081598f, -0.013023f, 0.020095f, 0.039191f, 0.078401f, -0.026176f, -0.001105f, 0.005010f, -0.006775f, 0.012135f, 0.021373f, -0.022148f, 0.004014f, -0.023286f, -0.041713f, 0.019180f, 0.035059f, 0.019337f, -0.003805f, -0.025270f, -0.055985f, -0.055632f, -0.028744f, 0.019066f, 0.052855f, 0.029580f, 0.041059f, -0.054651f, -0.071184f, -0.055257f, 0.006983f, 0.063224f, 0.070720f, 0.053983f, -0.031334f, -0.136725f, -0.087236f, 0.002932f, 0.069767f, 0.149131f, 0.058511f, 0.012530f, -0.066921f, -0.088984f, -0.030152f, -0.028093f, 0.078907f, 0.086550f, 0.033148f, + -0.004759f, -0.073878f, -0.055751f, 0.018065f, 0.026163f, 0.064446f, 0.031242f, -0.031765f, -0.022527f, -0.038207f, -0.018248f, 0.019524f, 0.017310f, 0.019787f, 0.024452f, -0.004200f, -0.006702f, -0.079139f, 0.087814f, 0.000502f, -0.023309f, -0.136605f, -0.037199f, -0.036622f, -0.062118f, 0.132964f, 0.001104f, 0.059780f, -0.090942f, 0.050702f, 0.041953f, -0.040397f, 0.026239f, -0.007451f, 0.023431f, 0.000377f, 0.067555f, 0.024354f, -0.066085f, 0.040147f, 0.032537f, 0.000181f, 0.045549f, -0.033462f, -0.017633f, 0.057886f, 0.040062f, 0.038690f, 0.018900f, 0.033719f, -0.099414f, 0.086995f, -0.049992f, -0.031271f, 0.018756f, -0.069144f, 0.101436f, -0.028491f, 0.010041f, 0.073782f, 0.002438f, -0.010765f, 0.039803f, 0.041195f, 0.071851f, -0.017155f, -0.066838f, -0.067648f, 0.007520f, -0.024170f, 0.031499f, -0.040755f, -0.020038f, -0.027461f, 0.020363f, -0.127469f, 0.002091f, 0.095348f, 0.026289f, 0.039063f, -0.003551f, -0.010040f, 0.025050f, -0.033347f, -0.038595f, 0.024236f, 0.013264f, -0.041208f, -0.046219f, 0.176646f, -0.018995f, -0.056884f, 0.016088f, 0.083021f, -0.002222f, -0.064655f, + 0.026882f, -0.011794f, -0.024550f, 0.053597f, 0.067606f, -0.048989f, -0.080745f, 0.018702f, 0.019573f, -0.018229f, -0.048240f, 0.002835f, 0.024508f, -0.007009f, -0.007733f, -0.002773f, -0.008210f, 0.013406f, 0.014545f, -0.016172f, 0.001969f, 0.007694f, 0.003774f, -0.009549f, 0.003874f, -0.000112f, -0.022227f, 0.016573f, 0.007062f, 0.031653f, 0.015661f, -0.011396f, 0.012930f, -0.005718f, 0.018580f, -0.000860f, -0.004577f, 0.025907f, -0.006099f, 0.017895f, -0.004877f, -0.019556f, -0.001502f, 0.023368f, -0.006189f, 0.026536f, -0.024444f, 0.033200f, 0.007967f, -0.023072f, 0.010178f, 0.000979f, 0.012341f, -0.003501f, -0.009164f, -0.001920f, 0.008245f, 0.026263f, -0.068960f, 0.025003f, 0.107195f, 0.170492f, -0.075681f, 0.056054f, -0.112692f, -0.032319f, -0.068864f, -0.008569f, 0.103792f, 0.111500f, 0.087468f, -0.001982f, -0.070794f, -0.041698f, 0.037763f, 0.003695f, 0.018709f, 0.058713f, -0.001529f, 0.029666f, -0.074116f, -0.017914f, -0.043043f, -0.051004f, 0.028068f, 0.024638f, 0.001210f, 0.052832f, -0.044452f, -0.000634f, 0.011329f, -0.061171f, -0.002061f, 0.005341f, -0.039607f, -0.013826f, + 0.014420f, -0.025222f, 0.058219f, -0.018103f, 0.088356f, 0.068081f, -0.043953f, -0.011195f, -0.060980f, -0.068337f, -0.090372f, 0.029934f, 0.041352f, 0.121618f, 0.091711f, 0.044079f, 0.058234f, 0.012345f, -0.066526f, -0.042704f, -0.037316f, -0.044000f, -0.009719f, 0.026506f, -0.002533f, -0.029826f, 0.008009f, -0.030085f, 0.019642f, 0.046159f, 0.008714f, -0.045553f, 0.036582f, -0.021154f, -0.023843f, -0.045548f, 0.024272f, 0.022127f, 0.010675f, 0.007108f, 0.106302f, 0.082580f, 0.066491f, 0.012677f, -0.015325f, -0.088579f, -0.018735f, -0.007972f, 0.088641f, 0.052169f, 0.023220f, 0.028226f, 0.076831f, -0.010729f, -0.030339f, -0.039904f, -0.034467f, -0.014802f, -0.007532f, 0.008523f, 0.001189f, 0.002110f, 0.040059f, -0.003049f, -0.023461f, -0.012969f, -0.007834f, 0.002455f, 0.020020f, 0.037114f, 0.015900f, -0.002847f, 0.022353f, -0.035086f, 0.014769f, 0.035448f, 0.014208f, 0.068263f, -0.026846f, 0.002151f, 0.011850f, -0.026049f, 0.007745f, -0.042438f, -0.001763f, 0.017224f, 0.001079f, 0.019787f, 0.010887f, -0.003114f, -0.000527f, -0.006584f, -0.000689f, 0.010641f, -0.011595f, -0.185575f, + -0.105600f, -0.062722f, 0.107158f, 0.048508f, 0.283225f, 0.263929f, 0.275038f, 0.275888f, 0.297957f, 0.207623f, 0.110064f, 0.156914f, 0.096052f, -0.048537f, -0.086859f, -0.136770f, -0.262498f, -0.238674f, -0.245191f, -0.179725f, -0.179899f, -0.135345f, -0.110200f, -0.060402f, 0.006922f, -0.105632f, -0.052472f, -0.023004f, -0.015625f, -0.057816f, 0.015369f, 0.069153f, 0.080002f, 0.028096f, 0.094353f, 0.117684f, 0.030277f, 0.022009f, 0.024306f, 0.115586f, 0.122651f, 0.152446f, 0.172963f, 0.149310f, 0.171754f, 0.258372f, 0.105990f, 0.201392f, 0.277478f, 0.176527f, 0.210756f, 0.163710f, 0.083337f, 0.097167f, 0.109732f, 0.095521f, 0.132423f, 0.128382f, 0.081163f, 0.014169f, 0.040589f, 0.074975f, -0.004332f, 0.007250f, -0.036383f, -0.044063f, -0.130202f, -0.060484f, -0.225980f, -0.286135f, -0.227475f, -0.261237f, -0.352840f, -0.342768f, -0.201935f, -0.382684f, -0.345406f, -0.317253f, -0.356627f, -0.302898f, -0.229534f, -0.290352f, -0.212207f, -0.060672f, -0.140927f, -0.176292f, -0.068904f, -0.070854f, -0.056687f, -0.064500f, -0.027821f, 0.015292f, 0.035822f, 0.067663f, 0.090110f, 0.101347f, + 0.116348f, 0.118332f, 0.169697f, 0.102045f, 0.199897f, 0.221925f, 0.106419f, 0.205956f, 0.197585f, 0.123396f, 0.151306f, 0.217962f, 0.149302f, 0.246259f, 0.187141f, 0.233348f, 0.164439f, 0.147648f, 0.154874f, 0.142931f, 0.113412f, 0.128289f, 0.112885f, 0.087494f, 0.066895f, 0.063617f, 0.052782f, 0.020771f, -0.017790f, -0.015631f, -0.010686f, -0.080886f, -0.128729f, -0.125056f, -0.127004f, -0.139505f, -0.128281f, -0.144349f, -0.104220f, -0.108943f, -0.088645f, -0.067150f, -0.052239f, -0.060132f, -0.058481f, -0.045930f, -0.032490f, -0.036287f, -0.046374f, -0.025980f, -0.014296f, -0.028490f, -0.041458f, -0.025639f, -0.019296f, -0.026001f, -0.031409f, -0.015205f, -0.002187f, 0.009033f, -0.000399f, 0.006295f, 0.020486f, 0.020885f, -0.002032f, 0.006210f, 0.013796f, 0.009198f, -0.002982f, 0.002636f, 0.007457f, 0.005707f, -0.006052f, 0.000350f, 0.004992f, 0.008470f, 0.004564f, 0.008658f, 0.001706f, 0.005118f, 0.009537f, 0.017114f, 0.005498f, 0.003275f, 0.001455f, 0.005710f, 0.001527f, 0.004166f, -0.000230f, 0.002097f, -0.004999f, -0.008067f, -0.013759f, -0.005509f, -0.008930f, -0.007385f, + -0.012598f, -0.003627f, -0.006704f, -0.004123f, -0.003951f, 0.005249f, 0.001613f, 0.004312f, -0.001080f, 0.008785f, 0.007505f, 0.013821f, 0.006331f, 0.016051f, 0.016974f, 0.020656f, 0.011379f, 0.018823f, 0.017747f, 0.018147f, 0.009476f, 0.014206f, 0.010528f, 0.015053f, 0.007306f, 0.009311f, 0.004167f, 0.009163f, 0.001124f, 0.004362f, -0.000960f, 0.002267f, -0.004499f, -0.001832f, -0.006127f, -0.001849f, -0.007047f, -0.002836f, -0.006866f, -0.001364f, -0.005554f, -0.000365f, -0.004418f, 0.000990f, -0.003190f, 0.002012f}, + {0.020157f, 0.000971f, -0.001240f, -0.000771f, -0.001491f, -0.010355f, -0.010343f, 0.009906f, 0.002486f, -0.006041f, -0.009019f, -0.004460f, -0.006794f, -0.011940f, 0.015272f, 0.001766f, 0.005591f, 0.007499f, 0.021963f, -0.000630f, 0.003587f, -0.005337f, -0.001849f, -0.004120f, -0.014158f, 0.003115f, -0.004263f, 0.001342f, 0.010007f, -0.003978f, -0.000874f, 0.002093f, 0.001150f, -0.002418f, 0.000566f, -0.013232f, 0.002836f, -0.000378f, -0.004622f, 0.004059f, 0.001995f, -0.008925f, 0.014097f, 0.000432f, 0.002118f, 0.012961f, -0.004947f, -0.005681f, -0.012729f, -0.006561f, 0.008974f, 0.000501f, 0.009560f, -0.004685f, -0.010390f, 0.004514f, -0.009676f, -0.004432f, -0.018779f, 0.007715f, 0.006721f, 0.003976f, 0.005798f, 0.012911f, 0.003473f, -0.005741f, 0.007106f, 0.010716f, -0.006932f, 0.005282f, 0.000072f, -0.002320f, -0.003542f, -0.002947f, 0.007366f, -0.001514f, 0.008163f, -0.004115f, 0.003344f, -0.002556f, 0.003036f, 0.005824f, -0.003072f, 0.002096f, -0.002087f, 0.004700f, 0.003961f, 0.003209f, -0.001522f, 0.001086f, 0.000237f, -0.002681f, 0.001429f, 0.004595f, 0.000929f, 0.001535f, + -0.002629f, 0.001785f, -0.001385f, 0.001044f, -0.001991f, 0.000427f, 0.002768f, -0.008026f, 0.002228f, -0.004998f, -0.009982f, -0.001064f, -0.011806f, -0.014499f, -0.009026f, -0.006985f, -0.015822f, 0.000565f, -0.005658f, -0.003275f, 0.004983f, 0.016875f, 0.001641f, -0.004099f, -0.001853f, 0.002654f, -0.000239f, 0.006970f, 0.012124f, -0.001086f, 0.013603f, -0.001623f, -0.000787f, -0.001684f, 0.007792f, -0.010235f, 0.001683f, 0.001169f, -0.002397f, -0.000643f, -0.005972f, -0.010168f, 0.013988f, -0.004785f, -0.000929f, -0.002534f, 0.006232f, -0.006663f, -0.005579f, 0.002363f, 0.002168f, 0.009645f, -0.006544f, 0.007935f, -0.004558f, -0.008051f, -0.000519f, -0.003355f, 0.002284f, 0.004304f, -0.000060f, 0.005602f, 0.002803f, 0.004072f, -0.005237f, -0.006335f, -0.010306f, -0.007703f, 0.001096f, 0.012405f, 0.001691f, 0.010069f, 0.002745f, -0.005242f, 0.007073f, 0.003265f, -0.007386f, 0.013137f, 0.002321f, -0.012435f, 0.003359f, 0.005591f, 0.001242f, 0.003706f, 0.003355f, -0.008813f, 0.003335f, 0.003053f, 0.002299f, -0.000527f, 0.006602f, 0.002156f, -0.001520f, -0.002140f, 0.000091f, 0.002571f, + 0.000064f, 0.003499f, 0.000029f, 0.000159f, 0.002168f, -0.000850f, -0.001786f, -0.001248f, 0.000494f, -0.001721f, -0.001688f, 0.002259f, -0.000068f, 0.002171f, 0.002056f, -0.000527f, -0.000038f, -0.014675f, -0.013209f, 0.002868f, 0.001387f, 0.011069f, -0.008597f, 0.011384f, -0.005862f, -0.002480f, -0.017892f, -0.001101f, 0.001041f, -0.006065f, -0.001209f, 0.009565f, 0.008838f, 0.013529f, -0.003457f, -0.002036f, 0.008258f, 0.003977f, 0.007396f, -0.018299f, 0.017968f, -0.003896f, -0.000436f, 0.002889f, -0.002407f, -0.000134f, -0.001819f, -0.001247f, 0.011062f, -0.000325f, 0.014582f, -0.002542f, -0.006260f, -0.012298f, 0.001226f, -0.005572f, -0.005092f, 0.008495f, 0.006355f, 0.008880f, 0.000078f, 0.001091f, -0.013318f, -0.009456f, -0.000366f, 0.011912f, 0.003897f, -0.001550f, 0.003762f, -0.004986f, 0.012469f, -0.000697f, -0.011201f, -0.013942f, -0.005207f, 0.015585f, 0.011554f, 0.012031f, 0.005364f, 0.000434f, -0.013293f, -0.005856f, -0.002079f, -0.007659f, 0.007816f, -0.001393f, -0.003890f, 0.006865f, -0.018833f, 0.005551f, -0.002614f, 0.004403f, -0.001659f, -0.005338f, 0.008247f, 0.003191f, + -0.009030f, -0.009384f, 0.004563f, -0.002447f, 0.005354f, 0.001498f, -0.004194f, 0.002885f, 0.003339f, -0.000160f, 0.001173f, 0.000004f, 0.000222f, -0.001567f, -0.000208f, -0.002584f, -0.000152f, -0.002251f, 0.003514f, 0.002023f, -0.002985f, 0.001413f, -0.000898f, 0.000984f, 0.000811f, 0.001293f, -0.002268f, -0.001811f, 0.000482f, 0.001376f, -0.004019f, -0.002171f, 0.003625f, -0.004104f, -0.008194f, -0.001239f, -0.006368f, 0.002968f, 0.010056f, 0.004077f, 0.000264f, -0.004038f, -0.023693f, -0.015455f, -0.000603f, 0.006934f, 0.008172f, 0.000579f, 0.001577f, -0.003227f, 0.008103f, 0.003735f, 0.006475f, -0.010182f, 0.009664f, 0.005707f, -0.011180f, 0.004263f, 0.010082f, -0.000451f, 0.003200f, 0.001765f, 0.009135f, -0.007059f, 0.005388f, -0.000825f, -0.001329f, -0.008709f, 0.000455f, 0.009554f, -0.006105f, -0.004248f, -0.008344f, 0.011197f, -0.001164f, 0.002274f, -0.008771f, -0.024657f, -0.007303f, 0.003759f, 0.002207f, 0.009275f, -0.006670f, -0.003949f, -0.003835f, -0.001532f, -0.008040f, 0.000374f, -0.007265f, 0.016362f, 0.005638f, 0.013371f, -0.013485f, -0.002513f, -0.005636f, 0.012541f, + -0.003850f, -0.002156f, -0.010400f, 0.006545f, -0.000283f, -0.006771f, 0.010498f, 0.003411f, 0.001223f, 0.012258f, 0.002528f, -0.010486f, -0.001551f, 0.001428f, -0.002954f, -0.003444f, 0.000015f, -0.008880f, 0.017845f, 0.007527f, 0.002542f, 0.011309f, 0.004784f, 0.004561f, 0.008142f, -0.002197f, 0.006882f, -0.003825f, 0.001139f, 0.000872f, 0.000361f, -0.001915f, 0.001200f, 0.000696f, -0.000711f, -0.001052f, -0.001211f, 0.001022f, -0.000966f, 0.000244f, 0.005891f, 0.000789f, -0.000221f, 0.000068f, -0.000124f, -0.000632f, 0.004669f, 0.001391f, 0.003017f, 0.000377f, -0.003058f, -0.000579f, 0.006668f, -0.005324f, 0.004263f, 0.000323f, -0.002629f, 0.011129f, 0.008606f, -0.000931f, -0.015189f, -0.020446f, -0.015664f, 0.005771f, 0.000098f, -0.008863f, -0.002207f, 0.000976f, -0.001913f, 0.022881f, 0.004054f, -0.016623f, -0.004311f, -0.005002f, 0.000932f, -0.007846f, 0.013073f, -0.009738f, -0.012605f, 0.011836f, -0.004888f, 0.003224f, 0.003261f, -0.005467f, -0.014851f, 0.001962f, -0.007861f, -0.007073f, -0.007213f, -0.000941f, 0.011763f, -0.001634f, -0.002522f, 0.017190f, 0.003279f, 0.002617f, + -0.022086f, -0.002495f, 0.011968f, 0.013852f, -0.007544f, 0.003751f, 0.002024f, -0.021923f, -0.002804f, -0.001350f, -0.002103f, 0.005516f, 0.000380f, -0.012295f, 0.001736f, -0.009830f, 0.009561f, -0.003343f, 0.012270f, 0.002424f, -0.013784f, 0.006175f, 0.026269f, -0.010142f, 0.000370f, -0.019466f, 0.004860f, 0.016390f, -0.029218f, 0.004202f, -0.001945f, -0.002531f, 0.007443f, -0.004725f, -0.007521f, 0.013794f, 0.013320f, -0.011370f, -0.001236f, 0.008648f, -0.003692f, 0.002059f, 0.004215f, 0.002579f, 0.000985f, -0.003297f, 0.007499f, -0.000164f, 0.004956f, 0.000235f, 0.006720f, 0.004506f, 0.004298f, -0.000310f, 0.001573f, 0.007350f, 0.000947f, -0.001462f, 0.002728f, 0.002320f, 0.001030f, 0.006122f, -0.003207f, 0.001981f, 0.001135f, -0.001300f, 0.000607f, 0.002247f, 0.001694f, 0.000795f, -0.000409f, 0.000326f, 0.019904f, 0.002186f, 0.009073f, 0.013665f, -0.016894f, -0.005518f, -0.012826f, 0.006341f, 0.007874f, 0.014871f, 0.029538f, 0.004365f, -0.022035f, -0.002325f, -0.005327f, -0.002551f, -0.009364f, -0.000197f, -0.000790f, 0.010833f, 0.009099f, 0.002979f, -0.000494f, 0.000220f, + -0.003137f, -0.002774f, 0.012978f, -0.004351f, -0.001391f, 0.009258f, -0.000880f, 0.005370f, -0.000632f, 0.011848f, -0.008888f, -0.018432f, 0.022991f, -0.001539f, 0.005707f, -0.017260f, 0.001585f, -0.005387f, 0.025485f, 0.003770f, 0.011722f, -0.002572f, 0.010436f, 0.006608f, -0.022423f, -0.003773f, -0.012437f, -0.011172f, 0.001884f, 0.015866f, 0.002367f, -0.003399f, 0.025262f, -0.002811f, -0.013713f, -0.010916f, -0.006999f, 0.012058f, 0.037999f, -0.000241f, 0.010815f, 0.002540f, -0.011616f, -0.002791f, 0.000588f, 0.011012f, 0.017491f, 0.001423f, 0.014139f, 0.012119f, -0.022137f, 0.000602f, -0.003627f, -0.000715f, 0.011694f, -0.005178f, 0.003341f, 0.005197f, -0.001324f, -0.011702f, -0.007616f, -0.017030f, 0.004465f, 0.006612f, -0.000425f, 0.002479f, 0.002918f, 0.001935f, 0.000230f, -0.005364f, 0.001552f, 0.002377f, 0.000148f, 0.002196f, -0.002292f, 0.004395f, 0.000067f, 0.002159f, -0.000784f, -0.000911f, -0.001709f, 0.000474f, -0.000697f, 0.000698f, 0.004199f, 0.005887f, 0.005426f, 0.000660f, 0.001781f, 0.003577f, 0.002530f, 0.000033f, 0.002570f, 0.000656f, -0.000061f, 0.004439f, + -0.006418f, -0.029342f, 0.006863f, -0.003224f, 0.010242f, 0.006099f, 0.027316f, 0.005151f, -0.004855f, 0.006187f, 0.020960f, 0.022610f, 0.009718f, 0.015834f, 0.016761f, -0.013106f, -0.009693f, -0.021049f, -0.022162f, 0.002139f, 0.009914f, -0.019275f, -0.013242f, -0.001349f, -0.021691f, -0.018502f, 0.009457f, 0.002627f, -0.009510f, -0.006817f, -0.014157f, 0.011617f, 0.008955f, 0.019312f, 0.037569f, -0.004480f, -0.010369f, -0.004328f, -0.018188f, -0.000561f, -0.014127f, -0.016215f, 0.019348f, 0.001835f, 0.002841f, -0.024940f, 0.025599f, 0.004694f, -0.015613f, -0.005436f, 0.013271f, 0.000521f, 0.003029f, -0.000790f, 0.002320f, 0.007070f, -0.011921f, 0.013847f, 0.000504f, -0.010342f, -0.002600f, -0.017463f, 0.002844f, -0.017922f, -0.015395f, 0.013089f, 0.014078f, -0.014335f, -0.022008f, 0.005271f, -0.010525f, -0.001982f, -0.005745f, 0.007078f, -0.006186f, 0.009461f, 0.003317f, 0.011533f, -0.002541f, 0.008513f, 0.004749f, -0.020306f, -0.006809f, 0.004500f, 0.002773f, -0.000043f, -0.009692f, -0.005959f, -0.002793f, 0.006176f, -0.003657f, -0.003712f, 0.000438f, 0.004862f, 0.004244f, -0.000641f, + -0.000142f, -0.006125f, -0.002933f, 0.000680f, -0.001209f, -0.000995f, 0.004820f, 0.000090f, -0.000190f, -0.004620f, 0.004175f, 0.000866f, -0.001398f, -0.001241f, -0.002693f, -0.000967f, -0.002997f, 0.003832f, -0.000927f, 0.001529f, -0.001110f, 0.007509f, -0.011245f, -0.011934f, 0.014447f, -0.004347f, -0.003641f, 0.008615f, -0.012392f, -0.012682f, 0.014559f, 0.019891f, 0.000118f, -0.001056f, 0.006462f, -0.016844f, 0.028757f, -0.017650f, 0.001872f, 0.014005f, -0.006826f, 0.013073f, 0.015398f, 0.005284f, -0.016660f, 0.017826f, -0.002882f, 0.006776f, -0.013120f, -0.002286f, -0.024729f, 0.008542f, -0.014794f, 0.005723f, -0.025448f, 0.014903f, -0.018672f, -0.012754f, 0.010284f, 0.014708f, 0.004658f, 0.001718f, 0.000355f, -0.015743f, -0.014954f, -0.009299f, 0.038083f, 0.021126f, -0.006284f, -0.035440f, -0.005263f, 0.010063f, 0.020423f, -0.011628f, 0.001433f, -0.024485f, -0.008686f, -0.002981f, 0.006139f, 0.003648f, -0.005755f, -0.000400f, 0.010527f, -0.012111f, -0.000912f, -0.013814f, 0.007297f, 0.009087f, 0.026252f, 0.011275f, -0.013108f, 0.005486f, -0.007403f, -0.019995f, -0.002764f, 0.011590f, + 0.001412f, 0.032992f, -0.019107f, -0.009200f, 0.004866f, -0.017176f, 0.008543f, 0.002757f, -0.003471f, 0.016757f, 0.003919f, 0.007401f, -0.000099f, 0.000608f, -0.002841f, 0.008282f, 0.012114f, 0.002975f, -0.003786f, 0.009046f, -0.004948f, 0.002836f, -0.008747f, -0.002854f, -0.000248f, -0.011220f, -0.000426f, -0.004374f, -0.002222f, -0.004368f, -0.007509f, -0.003380f, 0.002261f, 0.002817f, 0.001719f, -0.002383f, -0.000598f, 0.004932f, -0.008436f, 0.000830f, 0.000463f, -0.025430f, -0.003562f, 0.005035f, 0.015077f, 0.007117f, 0.019638f, 0.003404f, -0.023130f, 0.014683f, -0.019542f, -0.021231f, 0.000750f, -0.002055f, 0.016214f, 0.019816f, 0.018519f, 0.026632f, 0.006714f, -0.027749f, 0.030409f, 0.016406f, -0.012043f, 0.023140f, -0.002830f, 0.002719f, -0.020225f, -0.007176f, -0.005702f, -0.009159f, 0.019687f, -0.032872f, -0.007222f, -0.015499f, -0.014447f, 0.002605f, 0.015986f, -0.007577f, -0.018716f, -0.020153f, -0.025926f, -0.026500f, -0.013221f, -0.004582f, 0.011591f, -0.020817f, -0.026675f, -0.015968f, -0.006570f, -0.013271f, -0.008615f, 0.023337f, -0.012961f, 0.002127f, 0.012632f, -0.021316f, + -0.012416f, -0.014387f, 0.023270f, -0.009907f, 0.015230f, 0.032976f, -0.003001f, 0.007351f, 0.003440f, -0.010187f, -0.013064f, -0.009136f, 0.015823f, -0.002384f, 0.018087f, 0.001020f, 0.013709f, 0.003091f, -0.022478f, 0.028059f, -0.011909f, -0.003637f, -0.023890f, 0.014744f, 0.031842f, 0.005295f, -0.004109f, 0.008349f, 0.003885f, -0.020290f, -0.009223f, 0.001154f, -0.004564f, -0.002220f, -0.008499f, -0.008578f, -0.001184f, 0.001469f, 0.001489f, 0.014663f, -0.001476f, 0.001832f, -0.007058f, 0.005552f, 0.000829f, 0.011017f, 0.005024f, 0.004956f, 0.002316f, -0.001357f, -0.004531f, -0.004039f, -0.006381f, -0.001465f, -0.004750f, 0.003290f, 0.001923f, -0.000134f, -0.003242f, -0.002957f, -0.002317f, -0.001030f, 0.001375f, -0.001202f, 0.006278f, 0.047092f, 0.029294f, 0.021740f, -0.015780f, -0.033480f, -0.009349f, 0.020774f, -0.032190f, -0.017162f, 0.000368f, 0.025332f, 0.017733f, 0.014819f, -0.018759f, 0.014206f, -0.005238f, 0.014201f, -0.003915f, 0.036516f, 0.021490f, -0.001553f, -0.033623f, -0.003197f, 0.025031f, 0.021757f, 0.000635f, 0.044214f, 0.019628f, -0.008597f, -0.000282f, 0.003278f, + -0.005467f, -0.012039f, -0.017203f, -0.002422f, -0.047820f, 0.013714f, -0.016582f, 0.002501f, -0.001946f, 0.012659f, 0.017419f, 0.000687f, 0.004435f, -0.020981f, 0.014846f, -0.007472f, 0.031209f, 0.000960f, 0.004219f, -0.076466f, -0.003578f, 0.020704f, 0.010284f, 0.022006f, -0.007748f, -0.021240f, 0.011648f, 0.004403f, -0.017881f, 0.016988f, 0.003108f, -0.016628f, -0.000042f, 0.000961f, 0.005592f, -0.005960f, -0.028374f, -0.027895f, -0.001452f, -0.009883f, 0.009134f, 0.010156f, 0.003872f, 0.010794f, -0.034685f, -0.011549f, 0.001466f, 0.007864f, 0.007994f, -0.013452f, 0.010490f, 0.002760f, -0.005234f, 0.003875f, 0.009428f, -0.006236f, 0.000991f, -0.001850f, 0.003709f, -0.006347f, -0.010629f, -0.003237f, 0.011931f, -0.009024f, 0.000976f, -0.006681f, 0.004577f, -0.002620f, 0.004011f, 0.007312f, -0.001191f, -0.006781f, 0.005410f, -0.000941f, -0.008567f, -0.004994f, 0.002605f, 0.004053f, 0.000099f, -0.003068f, 0.001279f, -0.000415f, 0.004710f, -0.002138f, 0.009465f, -0.003102f, -0.001003f, 0.005965f, -0.032429f, -0.052012f, 0.008337f, 0.018086f, 0.018661f, 0.000499f, 0.043211f, -0.030727f, + 0.010083f, 0.005977f, -0.008844f, -0.027272f, -0.011578f, -0.015489f, 0.018286f, -0.008007f, -0.016899f, -0.027760f, -0.002641f, -0.010230f, -0.005385f, -0.020928f, 0.011112f, -0.001270f, -0.009891f, 0.011342f, 0.014308f, 0.017066f, -0.022175f, 0.040416f, 0.002379f, -0.005763f, -0.024873f, -0.023270f, -0.004816f, -0.003022f, -0.024264f, -0.025174f, -0.019428f, 0.016297f, -0.011286f, 0.027000f, 0.008557f, 0.045028f, 0.015362f, 0.017113f, -0.005854f, 0.024157f, -0.004278f, 0.005834f, 0.034110f, -0.010396f, 0.012324f, -0.041089f, -0.052428f, 0.011432f, -0.002556f, -0.033212f, 0.001991f, 0.000834f, -0.045262f, 0.012726f, -0.013392f, -0.008930f, -0.017728f, 0.017056f, -0.016570f, 0.000944f, -0.001904f, 0.008222f, -0.000039f, -0.024729f, 0.014430f, -0.003566f, 0.005696f, -0.031192f, -0.043138f, -0.038332f, 0.002048f, -0.009092f, -0.043677f, -0.009180f, 0.041802f, 0.022071f, 0.009634f, 0.007985f, -0.019439f, 0.000639f, -0.004524f, 0.001872f, -0.006454f, -0.005160f, -0.000304f, -0.000477f, 0.001591f, -0.000062f, -0.013594f, -0.003254f, 0.003489f, -0.002540f, 0.006439f, 0.010680f, 0.008876f, -0.000098f, + -0.001575f, -0.004645f, 0.014116f, 0.008172f, 0.009268f, 0.007782f, 0.005654f, -0.001054f, -0.005472f, -0.004861f, 0.011003f, -0.008566f, 0.006539f, 0.009312f, 0.003578f, 0.004594f, 0.000697f, 0.002753f, -0.007533f, 0.000683f, -0.002212f, -0.006409f, 0.003038f, 0.004297f, 0.008504f, 0.031581f, 0.041492f, -0.001237f, 0.011153f, 0.026072f, 0.021593f, -0.002234f, -0.052478f, 0.036009f, -0.003373f, 0.009788f, -0.010545f, 0.018461f, -0.001102f, -0.022791f, 0.006625f, 0.041418f, 0.006563f, -0.027186f, 0.024191f, 0.017132f, 0.011457f, -0.020434f, 0.022298f, 0.016365f, 0.002208f, 0.026354f, -0.010221f, 0.007078f, 0.042703f, 0.030946f, 0.001553f, 0.009820f, 0.021148f, -0.039990f, -0.007744f, -0.002511f, -0.005919f, -0.035023f, 0.009344f, 0.010659f, 0.002395f, -0.027137f, -0.000038f, -0.046493f, 0.002888f, -0.033200f, -0.006172f, 0.017213f, -0.013782f, -0.020060f, -0.015770f, 0.009970f, 0.008569f, -0.018489f, 0.007812f, -0.006610f, 0.023414f, -0.011844f, -0.013026f, 0.012079f, 0.021928f, -0.001952f, 0.009829f, 0.008415f, -0.050356f, -0.001043f, -0.003253f, -0.025786f, 0.003192f, 0.033250f, + 0.010601f, -0.009137f, -0.003566f, 0.024353f, 0.017503f, 0.010744f, -0.006302f, 0.038562f, 0.000931f, -0.031673f, 0.004832f, 0.038609f, 0.020485f, 0.019723f, 0.012107f, 0.002340f, -0.008892f, -0.010614f, 0.007527f, 0.006510f, 0.009732f, 0.014692f, -0.002954f, 0.011672f, 0.007567f, 0.001430f, -0.001314f, -0.000861f, 0.005758f, -0.004869f, -0.001334f, -0.004814f, 0.000562f, -0.002086f, 0.006322f, -0.011223f, 0.002700f, 0.004318f, 0.001974f, 0.009221f, -0.014912f, -0.006141f, 0.003410f, 0.003405f, -0.000793f, 0.009465f, -0.002537f, -0.002575f, -0.003532f, 0.001484f, 0.006652f, 0.007319f, -0.007864f, 0.001763f, 0.004902f, -0.007499f, -0.004181f, -0.003907f, -0.003131f, 0.020988f, -0.047335f, 0.020546f, -0.048995f, -0.056458f, -0.037789f, 0.003173f, -0.032363f, 0.031494f, -0.010472f, -0.037726f, -0.002134f, -0.009041f, 0.004386f, 0.007907f, -0.009816f, -0.004233f, 0.024527f, -0.006847f, 0.008828f, -0.013106f, -0.014629f, 0.041098f, -0.014461f, -0.003921f, -0.002082f, 0.009913f, 0.024012f, -0.049990f, -0.004312f, 0.027860f, 0.025327f, 0.025283f, 0.002352f, -0.008486f, 0.051264f, 0.018390f, + 0.015533f, 0.021065f, 0.008354f, -0.006659f, -0.000554f, 0.031416f, 0.009009f, -0.021023f, 0.010559f, 0.057260f, -0.030811f, 0.039783f, 0.013392f, -0.059037f, 0.013509f, 0.040796f, -0.005306f, 0.018727f, -0.001178f, -0.044586f, 0.021921f, 0.057040f, 0.002227f, 0.039006f, -0.024176f, 0.034585f, 0.027088f, -0.000237f, -0.006043f, 0.031796f, 0.015518f, -0.040265f, 0.039951f, -0.009455f, -0.010324f, 0.025496f, -0.013012f, -0.014063f, -0.019251f, 0.007039f, 0.001132f, 0.007471f, -0.002718f, -0.007643f, 0.029740f, -0.026832f, 0.003726f, -0.005050f, -0.009995f, -0.021822f, -0.022330f, 0.013181f, -0.002652f, -0.013217f, -0.020047f, -0.015354f, -0.028126f, -0.018642f, -0.002120f, -0.012729f, -0.009031f, -0.001397f, -0.015107f, 0.006487f, -0.013434f, -0.012189f, -0.004529f, 0.003701f, 0.003417f, -0.005865f, -0.001895f, -0.019425f, 0.006854f, -0.020410f, 0.014887f, -0.004841f, -0.002452f, -0.008666f, -0.006131f, -0.000519f, 0.022823f, 0.012507f, -0.003606f, 0.006202f, 0.015336f, 0.009446f, -0.010199f, -0.003818f, 0.005298f, -0.007738f, 0.012272f, 0.003473f, -0.006383f, 0.005026f, -0.018639f, -0.031671f, + 0.076773f, 0.038747f, -0.090626f, -0.036640f, 0.009055f, -0.014431f, 0.025524f, 0.031157f, 0.032378f, 0.038129f, -0.023624f, 0.071784f, -0.011238f, 0.002308f, -0.023843f, 0.027369f, 0.035281f, -0.025286f, -0.029936f, -0.005680f, -0.017459f, 0.003679f, 0.013762f, 0.002717f, -0.019038f, -0.006486f, 0.028837f, -0.001825f, 0.014316f, 0.004098f, 0.034804f, 0.053457f, 0.019565f, -0.024935f, -0.060161f, -0.004482f, -0.010645f, 0.007239f, -0.014325f, 0.020203f, 0.032538f, 0.003518f, -0.012778f, -0.026720f, 0.064682f, 0.057553f, -0.008092f, 0.028377f, -0.016047f, -0.020304f, -0.063341f, 0.035256f, -0.029839f, -0.006219f, -0.002409f, -0.019095f, 0.010472f, 0.039120f, 0.005367f, -0.016484f, 0.017777f, -0.007337f, -0.026466f, 0.039992f, 0.007474f, -0.054131f, 0.069518f, -0.046917f, -0.025965f, 0.027636f, 0.027265f, 0.023848f, -0.000147f, -0.057852f, -0.005571f, 0.005676f, -0.003940f, -0.018641f, 0.010764f, -0.009486f, 0.003586f, 0.007800f, -0.024793f, 0.028557f, 0.018958f, 0.009937f, 0.003208f, -0.010943f, -0.009070f, -0.000019f, 0.009325f, 0.001411f, 0.007063f, -0.004034f, -0.019341f, 0.006226f, + -0.028090f, -0.008183f, 0.008187f, -0.007594f, 0.014485f, -0.012217f, -0.002459f, -0.010300f, 0.011420f, 0.001586f, 0.014175f, 0.017690f, 0.011211f, 0.001035f, -0.013578f, 0.009967f, 0.015370f, -0.002623f, -0.002457f, -0.016563f, -0.008138f, 0.020385f, -0.007384f, 0.013941f, -0.001767f, -0.006930f, 0.006431f, 0.007198f, -0.001020f, -0.010727f, 0.019893f, -0.010323f, -0.024897f, 0.002802f, 0.035525f, 0.010571f, -0.048270f, -0.038666f, -0.009294f, 0.060380f, 0.006278f, -0.028959f, -0.077882f, -0.021633f, -0.003569f, 0.018508f, 0.053548f, 0.041072f, -0.005766f, 0.000530f, 0.035214f, 0.028706f, 0.001300f, 0.007885f, -0.105090f, -0.066218f, -0.032314f, -0.051888f, 0.004473f, -0.028937f, 0.046447f, -0.010627f, -0.003686f, -0.000213f, -0.018764f, -0.021364f, 0.033642f, 0.021003f, 0.011879f, -0.004751f, -0.016085f, -0.014356f, 0.016735f, -0.037636f, -0.014152f, 0.006668f, -0.013099f, -0.018326f, 0.015654f, -0.054407f, -0.076188f, 0.018116f, 0.023743f, 0.029557f, -0.044511f, -0.023637f, 0.024572f, 0.009352f, -0.074274f, -0.065188f, 0.003912f, -0.031547f, -0.032686f, 0.012142f, -0.060015f, 0.030432f, + -0.023246f, 0.025010f, 0.023948f, -0.014876f, -0.033847f, -0.078100f, -0.027429f, -0.023465f, 0.043790f, -0.037894f, -0.024763f, 0.013365f, 0.044766f, 0.026122f, 0.000202f, -0.015257f, -0.005066f, 0.013406f, -0.013486f, 0.045286f, -0.028109f, -0.022000f, -0.010675f, -0.003940f, 0.012409f, -0.033367f, 0.019608f, 0.015059f, -0.014017f, -0.023366f, 0.005396f, -0.001358f, 0.022710f, -0.029182f, -0.038093f, -0.009658f, 0.005991f, -0.021058f, -0.003200f, -0.025464f, 0.001075f, 0.006209f, -0.011480f, 0.017763f, -0.004806f, -0.012591f, 0.005502f, -0.008511f, 0.005171f, -0.007250f, -0.026458f, -0.001162f, 0.001940f, 0.025254f, 0.019809f, -0.012151f, 0.000100f, -0.001356f, -0.014917f, -0.019098f, 0.009289f, -0.004846f, -0.006938f, 0.005780f, 0.030966f, 0.042533f, -0.006801f, -0.057217f, 0.025922f, -0.008592f, -0.023868f, -0.049345f, 0.014722f, 0.021077f, -0.073158f, 0.027600f, 0.025995f, 0.065946f, 0.005960f, -0.016578f, 0.004075f, -0.080795f, -0.023471f, -0.009872f, 0.001028f, 0.014707f, -0.027633f, 0.049406f, 0.019779f, 0.061077f, -0.012335f, 0.053700f, 0.034492f, 0.021151f, 0.048978f, 0.024694f, + 0.032290f, 0.041520f, 0.001738f, -0.054729f, -0.051577f, 0.010303f, 0.058835f, 0.042368f, -0.078647f, -0.002488f, -0.013427f, -0.011284f, -0.008379f, -0.054665f, 0.013791f, -0.039028f, 0.034729f, -0.026213f, 0.078549f, -0.021003f, -0.113098f, -0.012321f, -0.039098f, 0.022132f, 0.016577f, 0.031831f, 0.073086f, 0.016027f, -0.010165f, 0.039766f, -0.023908f, 0.081513f, 0.013558f, 0.054398f, 0.025523f, 0.004592f, -0.021004f, -0.019202f, 0.134145f, 0.000370f, -0.093033f, -0.019099f, 0.073879f, -0.044775f, 0.009450f, -0.020920f, 0.032268f, 0.067590f, 0.039017f, -0.079063f, -0.005371f, -0.077858f, 0.010440f, -0.011208f, -0.046099f, -0.005964f, -0.012700f, -0.020858f, -0.000443f, -0.040201f, -0.043815f, 0.014436f, 0.016088f, -0.002787f, -0.049011f, 0.034515f, -0.043472f, -0.067441f, -0.028799f, 0.015943f, -0.016922f, -0.030463f, -0.038686f, 0.006316f, 0.015825f, -0.035511f, -0.026934f, 0.012117f, -0.015775f, -0.028841f, 0.022527f, 0.017480f, -0.002058f, -0.004347f, 0.000908f, -0.007273f, -0.011888f, -0.013109f, 0.004045f, -0.026802f, 0.014769f, -0.010184f, 0.005337f, -0.033887f, 0.036177f, 0.016840f, + -0.077599f, -0.027987f, -0.088013f, 0.014105f, 0.076030f, -0.055819f, -0.053932f, 0.051592f, 0.023046f, -0.086110f, -0.083201f, 0.027216f, 0.003527f, 0.012896f, 0.027206f, -0.002631f, -0.025567f, -0.011776f, 0.051797f, -0.036888f, 0.064154f, 0.011388f, -0.016062f, 0.014687f, 0.036706f, 0.000665f, -0.012088f, -0.068763f, -0.031373f, 0.008517f, -0.038124f, 0.032955f, 0.047189f, 0.004260f, 0.007102f, -0.048975f, 0.058497f, -0.020053f, -0.027386f, 0.049191f, -0.019454f, 0.000887f, -0.035573f, -0.002742f, -0.025265f, -0.084759f, 0.028504f, -0.008801f, 0.062727f, 0.082335f, -0.002056f, -0.013783f, -0.052556f, -0.015567f, -0.015254f, 0.078380f, -0.074646f, -0.051315f, -0.123164f, 0.003633f, -0.051500f, 0.014805f, 0.041560f, -0.022118f, -0.007256f, 0.084186f, 0.052933f, 0.038804f, 0.005695f, 0.004568f, 0.062436f, -0.067905f, -0.003875f, 0.020247f, -0.008999f, 0.038629f, 0.017286f, 0.161737f, 0.024562f, -0.043245f, -0.003370f, -0.029405f, -0.080252f, -0.030724f, 0.002047f, 0.014201f, -0.016195f, -0.015738f, -0.015937f, -0.055984f, -0.001633f, -0.003961f, -0.031026f, 0.008732f, 0.019286f, -0.047908f, + 0.002256f, -0.032284f, 0.011986f, -0.001563f, -0.012387f, -0.005858f, 0.001882f, 0.029321f, 0.015773f, 0.001961f, 0.030776f, -0.018817f, -0.005062f, -0.008603f, 0.028899f, 0.020644f, 0.013244f, 0.031360f, 0.013321f, -0.021247f, -0.011488f, -0.002933f, 0.014236f, -0.026910f, -0.008085f, 0.001540f, -0.032084f, 0.034575f, -0.009451f, 0.005503f, 0.074570f, -0.054880f, 0.019077f, -0.018994f, -0.026463f, -0.026122f, 0.112580f, -0.015358f, 0.055283f, -0.044903f, 0.076790f, -0.026947f, 0.001139f, 0.041017f, 0.044322f, 0.105504f, 0.005025f, 0.016917f, 0.015500f, -0.045388f, 0.054596f, 0.016488f, -0.032205f, 0.052802f, -0.022357f, 0.066600f, 0.051152f, -0.016379f, 0.044478f, 0.001529f, 0.041505f, 0.007816f, 0.070467f, -0.043712f, 0.035080f, -0.071979f, -0.018025f, 0.023336f, 0.076352f, -0.004010f, 0.006014f, 0.032287f, -0.000429f, -0.026495f, -0.092305f, -0.057670f, 0.015552f, -0.040302f, -0.001957f, 0.028324f, -0.080500f, 0.048322f, -0.003757f, 0.057592f, -0.028050f, -0.055482f, -0.009796f, 0.150098f, 0.033997f, -0.138261f, 0.023896f, 0.034046f, 0.008244f, 0.148518f, -0.009364f, -0.111082f, + 0.113880f, -0.039535f, -0.007740f, 0.124053f, -0.013836f, 0.081221f, 0.012849f, -0.075434f, 0.002732f, 0.126764f, -0.104813f, 0.053656f, -0.064424f, -0.073290f, 0.052986f, 0.031004f, -0.066495f, -0.025397f, -0.041513f, -0.023493f, -0.024507f, 0.010671f, -0.040970f, -0.009595f, 0.015539f, -0.042764f, -0.030342f, 0.020197f, -0.049224f, -0.013201f, 0.016530f, 0.005345f, -0.011857f, 0.035049f, -0.016458f, -0.013796f, -0.018322f, -0.034480f, 0.015308f, -0.022795f, -0.025279f, -0.007343f, 0.003494f, 0.047073f, -0.000579f, 0.012156f, -0.040995f, 0.002471f, 0.050722f, -0.011325f, -0.007010f, -0.005815f, 0.001621f, 0.001825f, 0.035068f, -0.020873f, -0.023121f, -0.012916f, -0.035440f, -0.042812f, 0.009828f, -0.022336f, -0.018215f, 0.024142f, 0.007168f, 0.015147f, -0.007117f, -0.108596f, -0.010242f, 0.019194f, -0.043124f, -0.009907f, -0.117753f, 0.075541f, 0.110896f, -0.047388f, 0.014165f, -0.083623f, -0.252164f, -0.045755f, 0.009816f, 0.129254f, 0.104903f, -0.102362f, -0.094954f, -0.091749f, -0.078944f, -0.052294f, 0.064422f, -0.009305f, 0.144121f, 0.101006f, -0.031227f, -0.118544f, -0.303741f, -0.193229f, + 0.011782f, 0.337299f, 0.253153f, 0.048919f, -0.133367f, -0.327613f, -0.339707f, -0.022386f, 0.194840f, 0.306490f, 0.331738f, 0.036610f, -0.109791f, -0.134358f, -0.183021f, -0.160895f, 0.009038f, 0.114987f, 0.208105f, 0.146815f, 0.113626f, -0.148323f, -0.186415f, -0.214520f, -0.262919f, 0.031420f, 0.310875f, 0.310494f, 0.060778f, -0.109172f, -0.295348f, -0.382616f, -0.132038f, 0.031735f, 0.141087f, 0.353114f, 0.127313f, 0.001176f, -0.195581f, -0.156431f, -0.068695f, 0.081770f, 0.135310f, 0.242945f, 0.061041f, 0.127753f, -0.012190f, -0.159792f, -0.135780f, 0.009324f, 0.153543f, 0.171516f, -0.079442f, -0.145962f, -0.183105f, -0.043739f, 0.027483f, 0.044515f, 0.025492f, -0.088861f, -0.080442f, -0.030907f, 0.055662f, 0.001439f, -0.001273f, 0.014334f, 0.044060f, 0.038784f, 0.026650f, -0.014546f, -0.112447f, -0.071918f, 0.005973f, 0.058114f, 0.102956f, 0.052269f, -0.032054f, -0.068567f, -0.094648f, -0.056569f, -0.039451f, -0.047147f, 0.103177f, 0.111526f, 0.118622f, 0.101703f, -0.049148f, -0.191860f, -0.166102f, -0.087076f, 0.071957f, 0.245075f, 0.233910f, 0.014291f, -0.151916f, -0.232529f, + -0.212849f, -0.012741f, 0.114070f, 0.110797f, 0.050650f, 0.049148f, 0.000055f, -0.061831f, -0.077953f, -0.094221f, -0.017122f, 0.089562f, 0.106166f, 0.077850f, 0.006983f, -0.072339f, -0.068864f, -0.030693f, 0.054824f, 0.040469f, -0.094020f, 0.000099f, 0.049830f, -0.040177f, 0.054983f, -0.003118f, -0.008915f, -0.004791f, 0.011878f, 0.040148f, -0.015135f, 0.047479f, 0.033896f, 0.018815f, 0.022898f, 0.015738f, -0.003179f, -0.028560f, 0.046251f, -0.001468f, 0.028623f, -0.017310f, 0.025605f, -0.009294f, -0.002490f, 0.015874f, -0.021337f, -0.024420f, 0.004520f, -0.010958f, 0.037674f, 0.035394f, -0.032110f, 0.015769f, -0.018692f, 0.021986f, 0.001549f, 0.014179f, 0.006763f, 0.018642f, -0.022535f, 0.015631f, -0.026092f, -0.012527f, -0.002677f, -0.003792f, 0.023053f, -0.042179f, -0.007084f, -0.017819f, -0.035800f, -0.003963f, -0.013391f, 0.008143f, 0.036283f, -0.011239f, -0.047624f, 0.007177f, 0.031389f, 0.058381f, -0.001448f, 0.004555f, -0.030676f, -0.024820f, 0.028642f, 0.001867f, -0.009265f, 0.000207f, 0.049360f, 0.020718f, 0.016382f, 0.025421f, 0.045591f, -0.050932f, 0.021276f, -0.009188f, + -0.073899f, -0.009337f, 0.059303f, -0.011351f, 0.052902f, -0.002883f, 0.033319f, -0.038564f, 0.024717f, -0.026405f, -0.006450f, 0.050361f, -0.013397f, 0.004153f, 0.002314f, -0.000756f, 0.019865f, -0.000605f, -0.006363f, -0.004851f, -0.000138f, -0.004114f, 0.010595f, 0.014094f, 0.022615f, 0.001913f, -0.016964f, -0.008726f, -0.022303f, 0.008385f, -0.023163f, 0.012729f, 0.011375f, -0.008042f, 0.015014f, 0.003886f, -0.024043f, -0.000070f, 0.001299f, 0.007618f, -0.042218f, 0.014745f, 0.011012f, 0.003335f, 0.000171f, -0.012499f, 0.015623f, -0.022494f, 0.023595f, -0.002197f, -0.001296f, 0.005520f, -0.009243f, 0.018320f, -0.019655f, 0.005440f, -0.010203f, 0.011327f, -0.035415f, 0.089342f, 0.151829f, 0.013827f, -0.100578f, 0.034298f, -0.008261f, 0.124534f, 0.057385f, 0.122438f, -0.012179f, -0.056945f, -0.016453f, 0.027828f, 0.050386f, 0.040854f, -0.023260f, 0.004801f, 0.020988f, 0.016645f, 0.047579f, -0.032862f, 0.007438f, -0.044620f, -0.008074f, 0.001571f, 0.011005f, 0.024666f, 0.004517f, -0.018472f, 0.036298f, -0.002452f, -0.033369f, 0.045572f, -0.008303f, -0.014974f, 0.011172f, -0.005641f, + 0.034056f, 0.056393f, 0.000701f, 0.015482f, -0.019285f, -0.010605f, 0.031398f, 0.024241f, 0.025897f, 0.006308f, -0.017460f, -0.033774f, -0.036380f, -0.037791f, 0.030478f, 0.035248f, 0.032884f, 0.051045f, 0.052913f, 0.024243f, 0.002234f, -0.045627f, 0.028066f, -0.003891f, -0.043006f, 0.053540f, -0.004420f, 0.035610f, 0.017501f, -0.051371f, 0.013978f, -0.014439f, 0.010683f, 0.036701f, 0.006102f, -0.042717f, -0.031718f, -0.024697f, -0.046545f, 0.029237f, -0.003341f, 0.049584f, -0.001005f, 0.009119f, 0.000467f, -0.024894f, -0.017317f, 0.010424f, -0.039970f, 0.013187f, -0.000886f, -0.006406f, 0.013764f, -0.020670f, 0.012894f, 0.009958f, -0.002230f, -0.017284f, 0.023918f, -0.004854f, 0.021173f, -0.035182f, -0.027318f, -0.014545f, -0.014572f, 0.018578f, -0.007685f, -0.003165f, -0.005060f, -0.016903f, -0.010328f, -0.009850f, -0.000363f, 0.035210f, 0.004131f, -0.007197f, -0.000924f, -0.018265f, 0.013972f, -0.009520f, -0.002286f, -0.006055f, 0.015716f, 0.000068f, 0.001788f, -0.001935f, -0.011969f, -0.006411f, 0.017213f, -0.004686f, 0.012243f, -0.002159f, 0.006388f, -0.009518f, -0.053184f, -0.121093f, + 0.008837f, 0.166168f, 0.221222f, 0.188692f, 0.131237f, -0.006168f, 0.008767f, -0.097091f, -0.114148f, -0.193491f, -0.145097f, -0.155473f, -0.049536f, 0.012463f, 0.051091f, 0.084140f, 0.211012f, 0.174424f, 0.118527f, 0.037571f, -0.017910f, -0.076659f, -0.055987f, -0.079680f, -0.099921f, -0.056550f, -0.056868f, -0.071408f, -0.032314f, -0.047189f, 0.010523f, 0.032311f, 0.028306f, 0.089017f, 0.083383f, 0.072812f, 0.048671f, 0.055008f, 0.035650f, 0.065998f, 0.016708f, 0.057025f, 0.003219f, -0.015643f, -0.099885f, -0.044322f, -0.120524f, -0.141477f, -0.156908f, -0.124121f, -0.092135f, -0.033480f, 0.024451f, 0.089981f, 0.097159f, 0.075496f, 0.157230f, 0.126330f, 0.136288f, 0.125044f, 0.117873f, 0.046490f, 0.076472f, -0.030977f, -0.074735f, -0.079624f, -0.185469f, -0.186572f, -0.179042f, -0.191802f, -0.157033f, -0.054469f, -0.025869f, 0.041929f, 0.107433f, 0.115754f, 0.142796f, 0.170620f, 0.153388f, 0.118470f, 0.108828f, 0.079098f, 0.030456f, -0.003486f, -0.063366f, -0.094821f, -0.094393f, -0.109013f, -0.090310f, -0.102576f, -0.105677f, -0.090315f, -0.069251f, -0.035553f, 0.004835f, 0.045835f, + 0.089948f, 0.083085f, 0.083139f, 0.096726f, 0.108123f, 0.082690f, 0.084003f, 0.036719f, -0.038395f, -0.029027f, -0.068017f, -0.087867f, -0.072290f, -0.060448f, -0.041507f, -0.053500f, -0.037737f, 0.004199f, 0.011834f, 0.018171f, 0.047854f, 0.041096f, 0.027050f, 0.006124f, 0.018475f, 0.017709f, 0.006076f, 0.022522f, -0.013589f, -0.016136f, -0.012024f, 0.008284f, -0.001895f, 0.000091f, -0.000565f, -0.003329f, -0.016467f, -0.012265f, -0.004366f, 0.016209f, 0.000568f, 0.007345f, 0.003123f, -0.009206f, -0.010371f, -0.005884f, -0.007090f, 0.002199f, 0.000226f, 0.002709f, 0.002420f, 0.003781f, -0.003543f, 0.003922f, -0.002101f, 0.000893f, 0.003518f, 0.010361f, 0.004972f, 0.012081f, 0.002176f, -0.000246f, -0.002899f, -0.002616f, -0.007664f, -0.000700f, -0.004078f, -0.002148f, -0.005874f, -0.000497f, -0.002742f, 0.001250f, -0.005372f, -0.000849f, -0.000011f, 0.003944f, -0.002503f, -0.000787f, -0.003831f, 0.002149f, 0.000222f, 0.005175f, 0.005141f, 0.007089f, 0.002282f, 0.004640f, -0.000230f, 0.000229f, -0.002216f, 0.002268f, -0.001576f, 0.001593f, -0.001423f, 0.000811f, -0.004595f, -0.003115f, + -0.008294f, -0.003965f, -0.004846f, -0.000826f, -0.003181f, 0.001460f, -0.000819f, 0.002841f, 0.000796f, 0.005867f, 0.003108f, 0.006299f, 0.003090f, 0.005757f, 0.002456f, 0.004183f, -0.000390f, 0.000378f, -0.005000f, -0.002576f, -0.005944f, -0.003434f, -0.006886f, -0.002363f, -0.004193f, 0.000562f, -0.000580f, 0.003512f, 0.000478f, 0.003931f, 0.000788f, 0.003579f, 0.000171f, 0.003046f, -0.000696f, 0.002090f, -0.001437f, 0.001356f, -0.001946f, 0.001210f, -0.001952f, 0.001245f, -0.001893f, 0.001344f, -0.001716f, 0.001531f} + }, + { + {0.019427f, 0.010215f, -0.001089f, 0.006681f, 0.001758f, 0.001468f, -0.021126f, -0.009296f, -0.010430f, 0.008184f, -0.001069f, -0.006961f, 0.007574f, 0.007676f, 0.000575f, 0.007366f, -0.003044f, -0.000332f, -0.000373f, -0.004672f, -0.002329f, -0.010265f, 0.005326f, -0.015139f, 0.006351f, -0.007936f, 0.006473f, 0.011892f, 0.005526f, -0.002363f, -0.003326f, 0.008765f, -0.001368f, 0.000326f, 0.008432f, -0.009056f, -0.000204f, -0.003121f, -0.005110f, 0.001012f, -0.001201f, 0.001768f, 0.008639f, 0.014057f, -0.004441f, 0.000166f, 0.011802f, 0.000803f, 0.003143f, -0.004417f, -0.006532f, -0.001059f, 0.002026f, -0.011190f, -0.002864f, 0.005707f, 0.000803f, 0.002001f, 0.003493f, -0.001688f, -0.003421f, -0.003377f, -0.003844f, 0.004197f, 0.003563f, -0.002144f, -0.006314f, -0.007917f, 0.003908f, -0.000029f, -0.006447f, 0.006749f, -0.001453f, -0.000555f, 0.001086f, 0.001832f, -0.003197f, 0.003995f, -0.004321f, -0.001577f, 0.005397f, -0.003805f, 0.002174f, -0.006370f, -0.004754f, -0.002413f, -0.001515f, -0.000508f, 0.000883f, -0.002635f, -0.003129f, -0.000427f, -0.001768f, 0.000597f, -0.000636f, -0.000685f, + -0.000831f, 0.000556f, 0.000217f, -0.000777f, -0.001263f, -0.000894f, -0.000453f, -0.000236f, -0.000672f, -0.000566f, -0.000962f, 0.000788f, -0.001423f, -0.001016f, 0.001169f, -0.006982f, -0.001886f, 0.000030f, -0.006564f, -0.006692f, -0.003973f, 0.015974f, -0.011210f, -0.004644f, -0.007819f, -0.014312f, 0.005364f, 0.002427f, 0.000584f, 0.012243f, 0.011641f, 0.011616f, 0.003787f, -0.002199f, 0.001829f, 0.008752f, -0.003724f, 0.003763f, 0.004461f, -0.010371f, 0.014767f, 0.002839f, 0.004613f, 0.010879f, -0.004163f, -0.010894f, 0.000763f, 0.007367f, -0.005177f, -0.002380f, -0.006912f, 0.007334f, -0.000160f, -0.000767f, -0.012034f, -0.000540f, -0.001437f, 0.007411f, 0.003824f, -0.006632f, 0.013227f, 0.004855f, 0.002776f, 0.004608f, -0.002123f, 0.007385f, -0.002853f, 0.000352f, -0.009180f, -0.011016f, 0.008851f, 0.006895f, 0.012250f, 0.001181f, 0.003327f, -0.009475f, -0.014617f, -0.007202f, -0.004365f, -0.004278f, -0.006737f, -0.005839f, 0.003051f, -0.001705f, 0.004475f, -0.005507f, -0.002076f, 0.002408f, 0.002765f, -0.001660f, 0.007487f, 0.002259f, -0.005567f, 0.011250f, -0.004383f, 0.003458f, + 0.014232f, 0.003026f, 0.001979f, -0.004405f, 0.000229f, -0.004836f, -0.005746f, -0.000932f, 0.003300f, -0.000065f, 0.000452f, 0.000178f, -0.001535f, -0.000499f, 0.000174f, -0.001416f, 0.003362f, 0.002139f, -0.001214f, -0.000302f, 0.000128f, 0.000881f, 0.000504f, -0.002205f, -0.001163f, -0.000524f, 0.000278f, 0.000997f, -0.000998f, -0.001581f, 0.001401f, -0.000806f, 0.001082f, -0.000556f, -0.000850f, -0.001091f, -0.013753f, -0.012862f, 0.007547f, 0.001692f, 0.010560f, -0.016310f, -0.002276f, -0.006498f, 0.001772f, 0.019372f, 0.011091f, -0.016982f, 0.006439f, 0.001588f, -0.007051f, -0.007890f, -0.009598f, -0.015639f, 0.000577f, 0.001851f, -0.005772f, 0.002753f, -0.003319f, 0.000576f, 0.004728f, 0.003618f, 0.010085f, -0.008829f, 0.015868f, -0.009687f, 0.009221f, 0.007281f, -0.005923f, 0.004252f, 0.000782f, 0.006566f, -0.002624f, 0.003421f, 0.006057f, 0.001997f, 0.000952f, -0.002444f, 0.004722f, 0.001392f, -0.002094f, 0.011256f, -0.014733f, 0.000993f, -0.008921f, 0.017733f, 0.006279f, -0.015521f, 0.006034f, 0.020277f, -0.019071f, -0.009121f, 0.002307f, -0.001591f, -0.007228f, 0.006027f, + -0.002528f, 0.013492f, -0.011364f, -0.001159f, -0.003755f, -0.000815f, -0.000684f, 0.013034f, -0.012115f, -0.004057f, -0.001310f, -0.012553f, 0.006754f, 0.005186f, 0.013508f, 0.005461f, 0.011501f, 0.010325f, 0.001708f, -0.004224f, 0.003258f, -0.000408f, -0.001441f, -0.003161f, -0.000296f, -0.004820f, -0.001910f, -0.001126f, -0.006685f, 0.004199f, 0.000352f, -0.004713f, -0.000794f, -0.003832f, 0.000346f, -0.000217f, 0.002565f, -0.000956f, -0.001519f, 0.000261f, -0.002159f, -0.000134f, 0.002209f, 0.000756f, -0.000500f, -0.001572f, 0.006098f, -0.009447f, 0.001160f, -0.005926f, 0.006239f, 0.002272f, -0.009600f, 0.027621f, -0.017607f, 0.005540f, 0.029832f, -0.021113f, 0.009776f, -0.000562f, 0.009710f, -0.002607f, -0.018133f, -0.003971f, 0.014847f, 0.013351f, 0.003625f, -0.000150f, 0.007476f, 0.003677f, 0.000192f, 0.006222f, 0.006197f, -0.005221f, 0.007915f, -0.002257f, 0.012523f, -0.010201f, -0.015779f, 0.003307f, -0.013790f, 0.004683f, 0.000156f, -0.003963f, -0.004487f, -0.006303f, -0.009426f, 0.001756f, 0.003175f, 0.000276f, 0.002256f, 0.002654f, -0.005864f, -0.012087f, 0.009334f, 0.002052f, + 0.001427f, -0.000658f, 0.013767f, 0.002724f, 0.005687f, 0.014607f, -0.009154f, 0.003479f, 0.000449f, 0.004348f, 0.010138f, 0.007972f, -0.013544f, -0.011827f, -0.003176f, -0.006798f, -0.001696f, 0.000385f, -0.005926f, 0.002968f, -0.010875f, 0.000425f, -0.010473f, 0.004994f, 0.004880f, -0.006075f, -0.008013f, 0.000764f, 0.004129f, 0.000687f, -0.009242f, 0.001164f, -0.005372f, 0.003780f, 0.003043f, 0.001331f, -0.001890f, -0.002667f, 0.001609f, -0.000391f, -0.001173f, -0.000190f, -0.002538f, -0.002100f, -0.006426f, -0.001679f, 0.005461f, 0.002339f, -0.001840f, -0.001272f, 0.003741f, -0.001512f, 0.000969f, -0.001909f, -0.000154f, -0.000599f, -0.000017f, -0.002417f, -0.001730f, -0.001028f, -0.000881f, -0.000987f, -0.001180f, 0.000010f, -0.000865f, -0.001607f, -0.001418f, 0.000561f, 0.002645f, 0.000860f, 0.008344f, -0.003358f, 0.007521f, -0.001121f, 0.003564f, -0.004168f, 0.000171f, -0.002612f, 0.002250f, -0.001068f, -0.017593f, 0.013444f, 0.008022f, 0.021937f, -0.014529f, 0.009197f, -0.017888f, -0.002648f, 0.010310f, 0.011923f, -0.012668f, 0.003878f, -0.014617f, 0.001414f, -0.017074f, 0.005829f, + -0.012886f, -0.015163f, -0.014267f, 0.007331f, -0.011601f, 0.000843f, -0.013541f, 0.002068f, 0.001552f, -0.001628f, -0.010017f, 0.006405f, 0.008074f, 0.005393f, 0.003554f, -0.009942f, 0.005217f, -0.010444f, -0.003802f, 0.006981f, -0.000173f, -0.001144f, -0.003298f, -0.000064f, 0.006462f, -0.007613f, -0.015751f, -0.002894f, 0.004335f, -0.002893f, -0.011782f, -0.011164f, -0.016727f, 0.004257f, -0.005107f, -0.014940f, 0.010536f, -0.009450f, -0.010010f, 0.018830f, -0.007079f, -0.003297f, 0.001111f, -0.002998f, -0.006430f, 0.001842f, -0.010544f, -0.004675f, -0.008936f, -0.006378f, -0.003206f, 0.005854f, 0.013582f, 0.001059f, 0.007999f, 0.001051f, 0.005864f, 0.004708f, 0.010890f, -0.000479f, -0.000669f, 0.001509f, 0.003762f, -0.001956f, 0.000066f, -0.000763f, 0.007845f, 0.000019f, 0.003571f, 0.000938f, 0.001169f, -0.001073f, 0.001422f, -0.004732f, 0.005113f, 0.000469f, -0.000320f, -0.003807f, -0.001484f, -0.005262f, 0.002225f, -0.002525f, 0.001468f, -0.000419f, 0.005152f, -0.002388f, 0.000666f, -0.004534f, -0.004349f, -0.000030f, -0.002144f, 0.001691f, 0.003120f, 0.001045f, 0.001348f, -0.002116f, + 0.000451f, 0.014200f, -0.020484f, 0.003634f, 0.018065f, -0.006737f, 0.019780f, 0.005427f, 0.001328f, -0.005771f, -0.013667f, -0.009104f, 0.023543f, -0.012648f, -0.000013f, -0.004401f, 0.001932f, 0.014072f, 0.012784f, -0.007725f, 0.018425f, 0.018256f, -0.008512f, -0.004543f, 0.011255f, -0.009442f, -0.008122f, -0.000616f, -0.012535f, -0.000307f, -0.003611f, 0.001615f, 0.022107f, 0.007489f, 0.001318f, -0.010085f, -0.029100f, -0.003569f, 0.016567f, 0.004030f, -0.010814f, 0.008406f, 0.013500f, 0.011670f, 0.014259f, -0.023094f, 0.004825f, 0.001136f, -0.011307f, 0.006232f, -0.010156f, 0.007370f, -0.005656f, 0.009140f, 0.020663f, 0.027113f, 0.017270f, 0.007887f, -0.011057f, -0.003065f, -0.013228f, -0.014059f, -0.002781f, 0.015925f, 0.004098f, 0.000298f, 0.003934f, -0.015493f, 0.004239f, 0.001990f, 0.000063f, -0.007807f, 0.004419f, 0.008572f, -0.008781f, -0.016882f, 0.038823f, 0.005061f, -0.006693f, 0.002459f, 0.004382f, 0.017672f, -0.003311f, 0.004926f, 0.006232f, 0.008822f, -0.005834f, -0.002884f, -0.006313f, 0.003216f, -0.001566f, 0.003540f, 0.003458f, -0.002169f, -0.003330f, 0.006662f, + 0.001138f, 0.001850f, -0.000978f, 0.004081f, -0.006516f, -0.004715f, -0.002988f, -0.001071f, 0.007833f, 0.002919f, 0.005338f, 0.003995f, 0.004254f, 0.000431f, 0.001182f, -0.001524f, -0.004449f, 0.004816f, 0.001439f, 0.002135f, -0.002994f, -0.000971f, 0.000092f, 0.002180f, 0.006219f, 0.001706f, -0.010347f, -0.003279f, -0.006241f, -0.002778f, 0.005223f, -0.006998f, 0.030722f, -0.003296f, 0.008849f, 0.021561f, 0.003126f, -0.003553f, -0.014040f, 0.007740f, -0.007467f, -0.009952f, -0.028650f, -0.013218f, 0.006058f, -0.001830f, -0.005354f, -0.021159f, 0.007522f, 0.011210f, -0.016198f, -0.008878f, -0.004188f, -0.017488f, 0.007072f, 0.000929f, -0.008881f, -0.007767f, -0.002922f, -0.023534f, -0.008075f, 0.011223f, 0.019520f, -0.014930f, -0.018090f, -0.005609f, -0.000877f, -0.015157f, -0.012021f, 0.004351f, 0.008323f, -0.016581f, 0.032782f, -0.000142f, 0.013434f, -0.007721f, 0.012629f, -0.008740f, 0.003921f, -0.023445f, -0.004711f, 0.009142f, -0.022986f, 0.006050f, -0.005077f, -0.012094f, -0.026133f, -0.000885f, 0.014729f, -0.000088f, -0.027584f, -0.004489f, 0.005175f, 0.010851f, 0.020464f, -0.007786f, + 0.009223f, 0.023449f, 0.008047f, 0.002602f, -0.010694f, -0.002352f, -0.006636f, 0.001109f, -0.007936f, 0.001540f, -0.015085f, -0.002314f, 0.011721f, 0.003020f, 0.002345f, -0.006912f, -0.011692f, 0.006232f, -0.002102f, 0.006438f, -0.002438f, 0.000575f, -0.001467f, -0.003711f, -0.003075f, 0.004068f, 0.001755f, -0.001192f, -0.001510f, -0.000175f, -0.004537f, 0.001821f, -0.004641f, -0.006162f, -0.003651f, 0.001732f, 0.000296f, -0.000306f, -0.004400f, 0.003130f, -0.000549f, -0.002616f, -0.006238f, -0.002303f, 0.000381f, 0.000478f, 0.002513f, 0.006279f, 0.002077f, 0.001185f, 0.003304f, -0.001303f, -0.000480f, -0.002083f, 0.005137f, 0.008672f, -0.002618f, -0.009324f, 0.011289f, 0.001673f, -0.016621f, -0.026801f, -0.021399f, -0.027730f, 0.023899f, -0.014633f, -0.003285f, 0.007494f, -0.025734f, -0.011054f, -0.017834f, -0.008322f, -0.005547f, 0.011481f, -0.022528f, -0.012419f, 0.007469f, 0.008736f, 0.013342f, -0.000482f, 0.000652f, -0.004341f, 0.000165f, -0.005628f, 0.003463f, -0.018327f, -0.009505f, -0.016153f, 0.011214f, 0.005183f, 0.008729f, 0.010772f, -0.021746f, -0.001871f, -0.002175f, 0.019669f, + -0.007314f, 0.005991f, 0.011058f, -0.004387f, 0.011825f, -0.007924f, 0.013161f, 0.017909f, -0.006939f, -0.001560f, 0.015803f, -0.013665f, 0.021782f, -0.009563f, -0.034190f, 0.005030f, 0.017970f, -0.007114f, 0.002220f, -0.000912f, 0.013823f, 0.016795f, -0.017199f, -0.007894f, 0.004223f, 0.011459f, -0.020263f, -0.015840f, -0.012241f, 0.024417f, -0.000427f, -0.028726f, -0.006001f, -0.012153f, 0.009860f, 0.000932f, 0.007483f, -0.011009f, 0.017702f, 0.000392f, 0.003298f, 0.004704f, -0.016078f, -0.005884f, 0.001360f, -0.002395f, -0.003940f, -0.005086f, 0.004691f, -0.004865f, -0.004239f, 0.003063f, 0.005321f, 0.002283f, -0.009395f, -0.001237f, -0.003662f, -0.003167f, 0.004092f, 0.003130f, 0.008145f, -0.001489f, -0.003805f, 0.002676f, -0.008825f, -0.001452f, 0.000059f, -0.006242f, 0.000928f, 0.000152f, -0.002091f, 0.000710f, -0.010061f, -0.002261f, -0.001100f, 0.000738f, 0.001423f, 0.003861f, -0.000423f, 0.004384f, 0.002846f, 0.002054f, 0.000440f, -0.001036f, -0.016005f, -0.006386f, 0.010889f, 0.004125f, 0.015631f, 0.005454f, 0.007621f, -0.030733f, -0.012123f, 0.012103f, -0.008163f, -0.005729f, + -0.010308f, 0.003243f, 0.016013f, 0.004302f, 0.003790f, -0.020548f, -0.007014f, -0.003671f, 0.007624f, 0.018227f, -0.022041f, 0.010482f, -0.017968f, -0.004666f, -0.016528f, 0.002228f, 0.002273f, -0.000729f, 0.006886f, -0.015299f, -0.004448f, -0.014327f, -0.005944f, 0.000382f, -0.000667f, -0.018016f, 0.010403f, 0.011773f, -0.004331f, 0.013950f, 0.027190f, 0.002920f, 0.020603f, 0.026543f, 0.002097f, 0.000994f, 0.006393f, -0.005410f, 0.008780f, 0.001936f, -0.005749f, -0.008752f, 0.033204f, -0.003299f, 0.019423f, 0.008726f, -0.009736f, -0.011194f, -0.007855f, 0.009429f, -0.007525f, 0.012209f, 0.029272f, 0.014974f, -0.003821f, 0.000639f, -0.024436f, -0.016712f, -0.014878f, 0.023169f, 0.036169f, -0.015669f, -0.000063f, -0.014482f, -0.002338f, 0.022254f, -0.006897f, -0.001159f, -0.034731f, -0.004473f, -0.006252f, -0.003506f, 0.013312f, 0.001127f, 0.002847f, 0.004219f, -0.006883f, 0.005739f, 0.003063f, 0.005138f, -0.004058f, 0.007361f, -0.003328f, -0.000592f, -0.008699f, -0.001882f, 0.007804f, -0.002624f, -0.000098f, -0.001295f, 0.007508f, -0.001663f, -0.005203f, 0.003332f, 0.003421f, 0.002092f, + 0.002730f, 0.002935f, -0.002739f, 0.000966f, 0.005367f, 0.009232f, 0.007975f, 0.005285f, 0.002913f, 0.000783f, 0.000865f, -0.005395f, -0.000323f, 0.003790f, -0.003260f, 0.003982f, -0.001072f, 0.001539f, 0.005101f, -0.001878f, 0.009142f, -0.000745f, 0.021173f, 0.057456f, 0.025521f, -0.008183f, -0.001671f, -0.011064f, 0.026970f, -0.027008f, -0.014824f, -0.041118f, -0.000130f, 0.019792f, 0.025366f, 0.004185f, -0.009593f, -0.024776f, -0.017552f, 0.017703f, -0.003317f, 0.028307f, 0.000262f, -0.009510f, 0.013855f, 0.004607f, 0.000101f, -0.007432f, 0.019034f, -0.003786f, 0.016491f, -0.000569f, -0.008450f, 0.034907f, -0.008072f, 0.013975f, 0.034971f, 0.011865f, -0.001109f, -0.017227f, -0.002835f, -0.027866f, -0.031935f, 0.006726f, 0.021035f, -0.005266f, 0.003255f, -0.035546f, -0.013044f, 0.020116f, 0.011420f, -0.009434f, 0.007107f, -0.010754f, -0.004714f, -0.016370f, -0.026653f, 0.001335f, -0.006016f, -0.019370f, -0.030815f, -0.027182f, -0.008395f, -0.024991f, 0.011726f, -0.011350f, 0.004279f, 0.002907f, 0.000172f, 0.000306f, -0.003638f, -0.005821f, 0.016356f, 0.031503f, -0.021066f, 0.003600f, + -0.008642f, 0.011213f, -0.011597f, -0.000752f, -0.008272f, -0.004181f, 0.029615f, 0.020980f, 0.005160f, -0.003566f, 0.000666f, -0.012234f, 0.004507f, 0.011643f, -0.001894f, -0.010614f, -0.005536f, 0.010049f, -0.012120f, 0.000878f, 0.005707f, 0.004738f, -0.004015f, -0.004250f, 0.004851f, 0.005362f, -0.003921f, 0.006437f, 0.004256f, 0.005297f, -0.000207f, 0.007079f, -0.000393f, 0.004386f, 0.002671f, 0.002479f, 0.002077f, -0.001866f, 0.009015f, -0.008723f, -0.000864f, 0.001604f, -0.002152f, -0.002397f, -0.003594f, 0.003599f, 0.000741f, -0.007547f, -0.002348f, 0.004537f, -0.004853f, -0.023596f, -0.027145f, 0.007208f, 0.010135f, 0.032543f, -0.027517f, 0.008953f, 0.008198f, -0.045268f, -0.002293f, 0.000567f, -0.038202f, -0.020464f, -0.013622f, 0.009959f, -0.003210f, 0.002562f, -0.010896f, 0.016290f, 0.025038f, 0.013556f, -0.003740f, -0.038326f, -0.016968f, -0.020704f, 0.007688f, 0.002659f, -0.017083f, -0.001019f, 0.013155f, -0.010940f, 0.022836f, -0.020404f, -0.000754f, -0.011764f, -0.038728f, 0.006895f, -0.016562f, -0.018212f, 0.014239f, 0.021632f, -0.024047f, 0.009574f, 0.028097f, -0.008897f, + 0.012242f, 0.010005f, -0.006742f, 0.004171f, -0.031457f, 0.047760f, 0.018552f, 0.011564f, 0.045181f, -0.054950f, -0.004262f, -0.007315f, 0.005749f, 0.022899f, 0.023321f, 0.009343f, 0.011064f, 0.029312f, -0.002877f, -0.019342f, -0.034310f, 0.013590f, -0.013046f, 0.001628f, 0.009140f, -0.006487f, 0.013868f, 0.037470f, -0.023013f, 0.017654f, -0.011214f, -0.010277f, 0.027955f, 0.002485f, 0.008643f, 0.027582f, 0.022356f, -0.009525f, -0.011491f, -0.023595f, -0.006158f, 0.000485f, 0.012381f, 0.013470f, -0.000077f, 0.003482f, 0.001777f, -0.000099f, 0.002508f, 0.003398f, 0.000907f, 0.007785f, -0.003800f, 0.001502f, 0.005221f, 0.003351f, 0.001452f, -0.002921f, 0.007064f, 0.005072f, 0.000992f, -0.003671f, -0.005826f, -0.013161f, 0.008014f, -0.000124f, -0.001324f, 0.004535f, -0.006607f, -0.000353f, 0.004446f, 0.006667f, 0.009296f, 0.005725f, 0.002499f, 0.003038f, -0.000179f, 0.003302f, 0.006913f, 0.029593f, 0.034920f, 0.008657f, 0.021553f, -0.014070f, 0.010167f, 0.009795f, -0.057213f, 0.016119f, 0.018577f, 0.003833f, -0.018219f, -0.000506f, -0.035318f, 0.041487f, 0.025056f, -0.013155f, + -0.013982f, -0.020761f, -0.010795f, 0.029987f, -0.030454f, -0.017541f, -0.004575f, -0.005182f, -0.006577f, 0.004282f, -0.020181f, -0.020675f, -0.012142f, -0.015950f, -0.004311f, -0.020719f, -0.002871f, -0.013940f, -0.045284f, -0.028985f, -0.011204f, -0.007290f, 0.006293f, 0.007457f, -0.000283f, 0.001225f, 0.013079f, 0.006204f, 0.006680f, 0.031752f, 0.006621f, 0.010661f, 0.019839f, 0.042680f, 0.036538f, 0.001826f, -0.014511f, -0.028178f, 0.025519f, -0.006391f, 0.069022f, 0.013839f, 0.030917f, -0.003485f, 0.003893f, -0.027549f, -0.001143f, 0.023857f, 0.013798f, 0.018058f, -0.020798f, -0.013821f, -0.026714f, -0.050694f, 0.029144f, -0.044753f, -0.005515f, 0.058761f, 0.003863f, 0.023483f, 0.011175f, 0.017243f, 0.000458f, -0.031897f, 0.030832f, -0.000641f, -0.027994f, -0.025094f, 0.000839f, 0.009615f, 0.020706f, 0.005463f, -0.024566f, 0.001172f, -0.004950f, 0.004851f, -0.009734f, -0.008144f, 0.004235f, 0.003827f, -0.007690f, 0.000625f, -0.002558f, -0.000817f, -0.010106f, -0.003783f, -0.003306f, 0.004525f, -0.002785f, -0.006236f, 0.007887f, -0.005057f, -0.002098f, -0.014274f, -0.015136f, -0.000082f, + 0.000215f, -0.006310f, -0.004077f, 0.004792f, 0.003530f, -0.006409f, -0.010192f, -0.000740f, -0.010592f, 0.006132f, -0.040459f, 0.011631f, 0.015838f, -0.027862f, -0.020761f, -0.000017f, 0.017334f, 0.039526f, -0.001607f, -0.031262f, -0.030665f, -0.002082f, -0.017163f, 0.004770f, 0.006104f, -0.034854f, -0.029246f, -0.056662f, -0.016171f, -0.016755f, -0.037835f, -0.026386f, 0.000181f, -0.018252f, -0.010747f, -0.010531f, -0.002695f, -0.038283f, -0.019865f, -0.023714f, -0.011082f, 0.011196f, -0.031743f, 0.001937f, 0.027224f, 0.031416f, -0.007045f, 0.008249f, 0.018682f, -0.032026f, 0.018271f, -0.014143f, 0.028495f, -0.014063f, 0.003001f, -0.015120f, -0.002746f, 0.055218f, -0.011006f, 0.020479f, -0.040267f, -0.007229f, 0.000419f, -0.039124f, 0.036512f, 0.000879f, -0.012759f, 0.025380f, -0.010149f, 0.006152f, 0.051603f, -0.020801f, -0.027544f, 0.018770f, -0.004880f, -0.057973f, 0.023818f, -0.076688f, -0.040422f, 0.030042f, 0.024325f, 0.004376f, 0.016620f, -0.000431f, 0.000065f, -0.057986f, -0.030416f, -0.014059f, 0.005733f, -0.033187f, 0.008520f, 0.004005f, 0.013958f, -0.021857f, 0.001758f, 0.015951f, + 0.013011f, 0.008945f, 0.001585f, 0.007268f, -0.018223f, -0.012510f, -0.012140f, -0.004068f, -0.002110f, -0.002199f, 0.015585f, -0.008292f, 0.008413f, 0.014534f, -0.006930f, 0.004116f, -0.011499f, -0.009675f, -0.000076f, 0.003339f, -0.010281f, 0.004179f, -0.013010f, 0.011297f, -0.004263f, -0.002924f, 0.001008f, 0.010082f, -0.002855f, 0.003703f, -0.008989f, 0.007966f, 0.006945f, 0.019092f, 0.005124f, 0.015587f, -0.015417f, -0.005875f, -0.018435f, -0.005884f, -0.009806f, -0.009525f, 0.077267f, 0.042241f, 0.000113f, -0.039799f, 0.020479f, -0.041498f, -0.033672f, 0.006094f, 0.034353f, 0.067767f, -0.010616f, 0.034246f, -0.012204f, 0.024302f, 0.041153f, 0.022955f, 0.026323f, 0.014060f, -0.007643f, -0.033662f, -0.034750f, -0.010558f, -0.032837f, -0.009700f, -0.005987f, -0.007426f, 0.026349f, -0.004501f, -0.067511f, 0.003946f, 0.016352f, 0.015591f, 0.040468f, -0.004188f, -0.080577f, 0.045838f, -0.036031f, 0.011792f, -0.007844f, 0.027118f, 0.039560f, -0.043975f, -0.003029f, -0.021977f, -0.038283f, 0.027743f, -0.019015f, -0.047216f, 0.018579f, 0.027569f, 0.045434f, 0.012015f, -0.007025f, 0.004962f, + 0.037208f, -0.029899f, 0.058707f, -0.018438f, -0.016293f, -0.005275f, 0.035796f, -0.037177f, 0.003479f, 0.004546f, -0.103439f, -0.015339f, 0.032096f, -0.014890f, 0.005431f, 0.014384f, 0.007575f, -0.005065f, 0.008486f, 0.035512f, 0.042463f, -0.033555f, 0.012177f, -0.024574f, -0.004126f, 0.041984f, -0.000824f, -0.004346f, 0.001624f, -0.002813f, -0.021680f, 0.006018f, 0.001533f, -0.012674f, -0.032141f, 0.000462f, -0.007618f, 0.009881f, -0.014798f, -0.013878f, -0.017420f, 0.014872f, 0.003515f, 0.009134f, 0.007402f, 0.000658f, 0.005491f, -0.007095f, -0.014661f, 0.022613f, -0.002167f, -0.010889f, -0.000242f, -0.007833f, -0.004832f, -0.009049f, 0.001269f, 0.002840f, -0.001211f, 0.006317f, 0.016562f, -0.000554f, -0.003876f, -0.006646f, 0.001626f, -0.008278f, -0.004602f, 0.009482f, -0.007055f, -0.005908f, -0.008661f, -0.021665f, -0.012023f, 0.003116f, 0.014242f, -0.011276f, -0.003199f, 0.044431f, 0.029176f, -0.082107f, -0.046962f, 0.056527f, 0.065130f, -0.034938f, -0.012084f, -0.092421f, -0.051367f, 0.013503f, -0.004392f, 0.012477f, -0.049410f, -0.030679f, -0.033927f, 0.050127f, 0.074050f, -0.003455f, + 0.019844f, -0.011934f, -0.006707f, -0.000792f, 0.016847f, 0.032325f, 0.007623f, -0.011311f, -0.006367f, -0.007410f, -0.044564f, -0.025013f, -0.045306f, -0.005858f, 0.013724f, -0.018822f, 0.027606f, -0.020471f, -0.007937f, 0.043308f, -0.021151f, 0.024395f, 0.016640f, -0.007792f, -0.041814f, -0.029983f, -0.025022f, 0.007614f, 0.077525f, 0.013805f, 0.041577f, 0.049392f, 0.038336f, 0.028667f, 0.025322f, -0.042787f, 0.000788f, -0.006913f, 0.057314f, 0.027456f, 0.033418f, 0.060197f, -0.029752f, -0.040321f, 0.014588f, 0.050928f, -0.086379f, -0.001452f, 0.006614f, 0.040162f, -0.069908f, -0.104864f, -0.018931f, 0.029517f, 0.007086f, 0.012001f, 0.032649f, 0.002206f, -0.023542f, -0.034352f, 0.000881f, 0.004837f, 0.006549f, 0.031885f, 0.046840f, 0.022390f, 0.003224f, 0.000274f, -0.000789f, 0.003995f, 0.004459f, -0.011782f, 0.017097f, 0.002283f, -0.016181f, -0.027862f, 0.003175f, -0.011807f, 0.005711f, 0.003176f, -0.002824f, 0.001902f, -0.011896f, 0.012180f, -0.006532f, 0.008223f, -0.012777f, -0.007924f, -0.022551f, -0.021790f, 0.000715f, 0.011695f, -0.010170f, 0.023272f, 0.000282f, 0.007044f, + -0.007317f, 0.024874f, 0.001713f, 0.011497f, -0.012588f, -0.006503f, -0.004267f, -0.004286f, -0.015720f, -0.002649f, 0.016302f, -0.028477f, 0.021841f, -0.000796f, -0.021498f, -0.037113f, 0.013725f, -0.017943f, -0.036873f, 0.026548f, 0.050262f, 0.015744f, -0.019572f, 0.030252f, 0.050555f, 0.019002f, 0.010295f, 0.003792f, -0.005810f, 0.024082f, -0.042548f, 0.002701f, -0.061126f, 0.032765f, -0.049362f, -0.003969f, 0.026342f, 0.014794f, -0.028218f, 0.006085f, -0.032630f, 0.066775f, 0.008498f, 0.021757f, 0.034605f, 0.073639f, -0.030476f, 0.024004f, -0.035299f, 0.012835f, 0.026314f, 0.059212f, 0.013826f, -0.011895f, 0.060440f, 0.008294f, -0.004369f, -0.034744f, 0.002191f, 0.038059f, -0.012966f, 0.036581f, -0.045027f, 0.069301f, 0.071657f, -0.086198f, -0.002374f, -0.005364f, 0.018727f, -0.014627f, -0.011448f, 0.037188f, -0.031455f, -0.091986f, 0.000964f, 0.081903f, -0.064721f, 0.032477f, -0.015081f, -0.008146f, -0.039496f, 0.090390f, -0.006007f, 0.014987f, 0.008130f, -0.060747f, 0.078515f, 0.006174f, 0.069800f, -0.138460f, 0.012996f, -0.013015f, -0.041966f, -0.011215f, 0.024106f, -0.032253f, + 0.021447f, -0.029078f, -0.019589f, -0.038274f, 0.048032f, -0.018579f, 0.003042f, -0.040828f, 0.001497f, -0.030014f, -0.010503f, 0.013864f, -0.020962f, 0.009586f, 0.000984f, -0.027733f, 0.024675f, -0.011426f, 0.003253f, -0.011928f, 0.022347f, -0.017169f, 0.003216f, 0.001459f, -0.006676f, 0.029913f, -0.017725f, -0.021184f, -0.012560f, -0.023736f, -0.033230f, -0.016662f, 0.002778f, 0.001870f, -0.024056f, -0.013619f, -0.016303f, -0.023091f, -0.018535f, 0.007696f, 0.004900f, -0.000949f, -0.010134f, 0.057808f, 0.007475f, -0.045155f, 0.005056f, -0.091303f, -0.020233f, 0.004074f, -0.017112f, -0.072885f, -0.007546f, -0.048019f, -0.011338f, 0.043078f, 0.010571f, 0.056634f, 0.024168f, 0.021062f, 0.013847f, -0.020002f, 0.046274f, -0.023763f, -0.000029f, 0.021151f, 0.010395f, -0.028588f, 0.023179f, 0.008820f, 0.054673f, 0.021838f, -0.009347f, 0.032318f, -0.025696f, 0.043812f, 0.015588f, -0.049143f, -0.049727f, 0.025434f, 0.032909f, 0.013069f, 0.005648f, -0.024099f, -0.031712f, 0.009349f, -0.031203f, -0.048095f, -0.014300f, -0.008493f, -0.043479f, -0.016728f, 0.016698f, -0.030408f, -0.049084f, 0.013504f, + 0.018607f, 0.001303f, -0.005767f, -0.003301f, -0.008110f, 0.017318f, 0.084376f, 0.016736f, -0.002478f, -0.003602f, -0.029456f, -0.048391f, -0.021036f, 0.068840f, 0.074626f, 0.037728f, 0.007314f, 0.067131f, 0.032711f, -0.015650f, -0.093679f, -0.071987f, -0.058721f, -0.112557f, -0.065145f, 0.015521f, 0.091382f, -0.040741f, 0.031060f, -0.045506f, 0.014991f, -0.004034f, 0.031538f, -0.014965f, -0.005075f, -0.040621f, -0.022923f, -0.010125f, -0.035734f, 0.045604f, -0.006955f, -0.024194f, -0.011154f, 0.004480f, -0.025802f, 0.018404f, 0.013937f, 0.029468f, 0.007026f, 0.008188f, -0.028994f, -0.034280f, -0.003759f, -0.025355f, -0.015689f, -0.029513f, -0.042107f, 0.002090f, -0.010862f, 0.002530f, 0.003246f, 0.032313f, 0.032593f, -0.012160f, -0.006251f, -0.014427f, 0.031495f, 0.020682f, 0.013810f, 0.004823f, -0.006179f, 0.017869f, -0.024566f, -0.009893f, -0.003832f, -0.028362f, -0.054722f, 0.028849f, -0.000808f, -0.017633f, -0.016975f, -0.010125f, -0.007626f, 0.020496f, 0.039186f, -0.016951f, 0.050418f, -0.057736f, 0.046594f, -0.006209f, 0.062121f, -0.040460f, 0.035938f, -0.059518f, 0.051667f, -0.048171f, + -0.020082f, 0.071398f, 0.016644f, 0.057275f, 0.082436f, 0.008106f, -0.006573f, -0.034719f, -0.002691f, 0.051922f, 0.013222f, -0.018895f, -0.057864f, 0.004583f, 0.011483f, 0.026995f, 0.016759f, 0.022407f, 0.014251f, -0.034166f, -0.053864f, -0.023248f, 0.052206f, 0.019613f, 0.166504f, -0.053272f, -0.044467f, 0.053903f, 0.085484f, 0.017544f, -0.001447f, 0.022093f, 0.005669f, 0.027051f, -0.025114f, 0.009517f, 0.039967f, 0.043756f, 0.029483f, 0.128819f, -0.016397f, -0.017078f, -0.008391f, 0.066277f, 0.039864f, -0.034187f, 0.034933f, -0.001120f, 0.011401f, -0.028216f, 0.059179f, -0.059406f, 0.004124f, 0.090860f, -0.067179f, 0.195520f, -0.089932f, 0.093379f, 0.085994f, -0.084792f, -0.077170f, 0.086808f, 0.003760f, -0.050640f, -0.021271f, 0.047811f, -0.132281f, 0.020421f, -0.015555f, -0.085459f, 0.055744f, -0.066968f, 0.005294f, 0.004727f, -0.026863f, -0.066090f, 0.017881f, -0.005316f, -0.002944f, 0.012480f, -0.013588f, -0.021930f, 0.011821f, 0.027444f, -0.010474f, 0.004022f, 0.021488f, -0.020318f, 0.029900f, 0.022861f, -0.047621f, 0.006657f, -0.026746f, 0.011965f, -0.001885f, 0.003693f, + -0.024366f, 0.009944f, 0.006384f, -0.000319f, -0.012220f, 0.036630f, 0.008317f, -0.001539f, 0.035162f, -0.025056f, -0.022700f, 0.003565f, 0.015182f, 0.003599f, 0.016916f, 0.008534f, -0.049021f, -0.025613f, 0.012645f, -0.029015f, 0.042192f, -0.019172f, -0.023952f, -0.001150f, -0.016586f, 0.033404f, 0.042554f, -0.100251f, -0.042999f, 0.062053f, -0.130095f, -0.080057f, -0.054542f, 0.091175f, 0.193309f, 0.053886f, -0.152049f, -0.033886f, -0.155332f, -0.080594f, 0.126254f, 0.075946f, 0.118688f, 0.065757f, -0.090134f, -0.142341f, -0.108976f, -0.025719f, 0.064207f, 0.073582f, 0.043854f, 0.025078f, -0.037919f, -0.155629f, -0.187843f, -0.040230f, 0.143466f, 0.256587f, 0.173502f, -0.032343f, -0.120410f, -0.172091f, -0.128180f, -0.103100f, -0.000136f, 0.041748f, 0.139690f, 0.149780f, -0.081132f, -0.050232f, -0.188102f, -0.174239f, -0.063070f, 0.017628f, 0.181085f, 0.268177f, 0.118569f, -0.078644f, -0.280894f, -0.207614f, -0.152870f, 0.074117f, 0.159539f, 0.100134f, 0.062852f, 0.054070f, -0.167709f, -0.030363f, -0.095755f, 0.035891f, -0.013513f, 0.099569f, 0.155592f, 0.124152f, -0.145790f, -0.293143f, + -0.220931f, 0.024891f, 0.171318f, -0.003835f, 0.237667f, 0.010310f, -0.061552f, -0.071183f, -0.052851f, 0.001088f, 0.171631f, 0.148791f, 0.026960f, -0.058659f, -0.021411f, -0.010470f, 0.089935f, 0.099987f, 0.011652f, 0.004750f, -0.015830f, -0.002217f, -0.019435f, -0.023861f, -0.016333f, -0.008409f, 0.034232f, 0.054271f, 0.043774f, -0.064533f, -0.073960f, -0.027954f, -0.030843f, -0.028746f, 0.066802f, 0.055277f, 0.070263f, 0.021175f, -0.030599f, -0.052570f, -0.102866f, -0.064906f, 0.042707f, 0.090984f, 0.136834f, 0.094399f, 0.007503f, -0.211063f, -0.186291f, -0.062901f, 0.076061f, 0.119428f, 0.158705f, 0.120399f, -0.009724f, -0.119834f, -0.177611f, -0.170624f, -0.031564f, 0.186670f, 0.192381f, 0.098467f, -0.046805f, -0.128201f, -0.090127f, -0.059877f, 0.005013f, 0.039021f, 0.050798f, 0.045708f, 0.027489f, 0.002397f, -0.029243f, -0.035806f, -0.037281f, -0.029599f, -0.034509f, 0.068625f, 0.021383f, -0.055591f, -0.052454f, 0.000162f, -0.084514f, -0.010451f, 0.012521f, 0.009667f, -0.007349f, 0.002111f, -0.028422f, -0.003545f, -0.003340f, 0.014582f, -0.009807f, 0.038955f, -0.010343f, -0.007500f, + -0.010879f, -0.012233f, 0.024284f, 0.006949f, -0.011716f, 0.037729f, 0.002387f, -0.067072f, -0.033493f, 0.018476f, 0.032823f, -0.011171f, 0.003999f, 0.045964f, -0.001134f, 0.006275f, -0.037599f, -0.016792f, 0.011575f, -0.008171f, -0.008357f, -0.004989f, 0.030407f, 0.011013f, -0.011909f, -0.035976f, -0.014331f, -0.002107f, -0.032816f, 0.003145f, -0.037480f, -0.025077f, -0.017445f, -0.033301f, 0.052214f, -0.009403f, -0.023633f, 0.022096f, -0.000367f, -0.051319f, -0.003008f, 0.051281f, 0.041577f, -0.023814f, 0.032191f, 0.005428f, 0.030712f, -0.034271f, -0.050573f, 0.019407f, 0.022285f, 0.019664f, 0.017006f, -0.019071f, 0.018772f, -0.037694f, 0.025533f, -0.051426f, -0.045305f, 0.033491f, -0.026515f, 0.022868f, 0.031318f, 0.002317f, -0.024246f, 0.007834f, 0.008842f, -0.002001f, -0.002005f, -0.000783f, 0.020393f, -0.017086f, 0.013235f, -0.017856f, 0.023905f, -0.020901f, -0.011451f, 0.008865f, -0.007277f, -0.000703f, 0.009427f, 0.002344f, 0.006287f, 0.018510f, -0.014754f, -0.008671f, 0.010532f, 0.006427f, 0.021038f, -0.017036f, 0.005815f, -0.001981f, -0.013227f, -0.013155f, 0.005368f, 0.003485f, + -0.013090f, -0.019295f, 0.005540f, 0.000362f, -0.003694f, 0.012492f, -0.018608f, 0.021584f, 0.006361f, -0.018435f, -0.020751f, 0.017416f, -0.029138f, 0.020044f, -0.003345f, 0.013935f, -0.001572f, 0.004895f, 0.026008f, -0.041419f, 0.082820f, 0.126058f, -0.016353f, -0.046771f, -0.039953f, 0.116222f, 0.052725f, 0.112480f, 0.060862f, 0.000085f, -0.052115f, -0.011743f, 0.028884f, 0.052800f, 0.025462f, -0.024557f, -0.005868f, 0.025200f, 0.037400f, 0.004550f, 0.008527f, -0.026103f, 0.004924f, -0.012631f, 0.017143f, 0.018976f, 0.049432f, 0.042375f, -0.022363f, 0.003635f, -0.025122f, 0.006545f, 0.022656f, 0.033528f, 0.002666f, -0.016020f, 0.000121f, -0.028909f, 0.024273f, -0.006697f, 0.010121f, 0.022456f, 0.000651f, 0.029927f, -0.014575f, -0.008256f, -0.006836f, -0.030859f, -0.018291f, -0.047047f, -0.008720f, -0.053641f, 0.003845f, -0.018472f, 0.044298f, 0.006531f, 0.013172f, -0.041478f, 0.017697f, 0.000276f, -0.018268f, 0.030372f, -0.016220f, -0.008552f, 0.007725f, 0.020082f, -0.002246f, -0.011029f, 0.068510f, 0.022225f, 0.015977f, 0.025657f, -0.018327f, -0.000916f, -0.005995f, 0.035723f, + 0.049826f, 0.047700f, -0.028283f, -0.031119f, -0.004067f, -0.012376f, 0.012660f, 0.032153f, 0.033582f, 0.001480f, 0.018903f, -0.002239f, -0.004925f, 0.010939f, 0.021483f, -0.002026f, 0.016921f, -0.014009f, 0.003213f, 0.000253f, 0.006024f, -0.004805f, 0.018929f, 0.010898f, -0.001796f, -0.005237f, 0.005861f, 0.003323f, 0.020570f, 0.001154f, -0.011867f, -0.013086f, -0.007334f, 0.005751f, 0.007128f, 0.013070f, -0.015667f, 0.002215f, -0.004156f, 0.010504f, -0.007590f, 0.014819f, -0.004817f, 0.005538f, -0.008136f, -0.006914f, 0.004896f, -0.012912f, 0.000266f, 0.014310f, 0.003783f, -0.005887f, 0.001535f, -0.000695f, -0.046905f, -0.102486f, -0.013596f, 0.134906f, 0.208533f, 0.174672f, 0.138414f, -0.009527f, 0.016457f, -0.101717f, -0.114910f, -0.187894f, -0.107842f, -0.118412f, -0.037019f, 0.014666f, 0.081935f, 0.057981f, 0.178132f, 0.154712f, 0.051383f, 0.010623f, -0.027403f, -0.060654f, -0.095394f, -0.035202f, -0.097788f, -0.026300f, -0.047477f, -0.031028f, -0.022659f, 0.004979f, 0.001888f, 0.033051f, 0.048294f, 0.072913f, 0.079409f, 0.094911f, 0.082286f, -0.010063f, 0.008188f, -0.001195f, + 0.015622f, -0.047256f, 0.019225f, -0.050496f, -0.125619f, -0.061950f, -0.093977f, -0.158421f, -0.046193f, -0.013933f, -0.063926f, 0.021544f, 0.048854f, 0.110323f, 0.130415f, 0.192050f, 0.121578f, 0.098777f, 0.098530f, 0.061015f, -0.018856f, 0.009830f, -0.096791f, -0.083700f, -0.140264f, -0.167117f, -0.192626f, -0.140553f, -0.108002f, -0.011431f, -0.005057f, 0.015142f, 0.056523f, 0.095225f, 0.171981f, 0.169762f, 0.169337f, 0.135498f, 0.058346f, 0.087370f, 0.013904f, -0.044086f, -0.066006f, -0.156601f, -0.142113f, -0.126146f, -0.108505f, -0.087166f, -0.052461f, -0.032096f, -0.010750f, 0.007683f, 0.052847f, 0.062342f, 0.082514f, 0.068055f, 0.097778f, 0.088224f, 0.058003f, 0.066473f, 0.044943f, -0.012324f, -0.036020f, -0.041903f, -0.099415f, -0.086487f, -0.077596f, -0.058411f, -0.031600f, -0.001340f, -0.003698f, 0.025292f, 0.039310f, 0.030332f, 0.036474f, 0.023054f, 0.007417f, -0.000919f, 0.010654f, 0.002325f, -0.012089f, 0.012976f, 0.015937f, 0.000962f, 0.008612f, -0.002544f, -0.003454f, 0.001318f, 0.005980f, -0.000388f, -0.013427f, -0.018121f, -0.017538f, -0.020538f, -0.013740f, -0.004273f, + -0.004662f, 0.005801f, 0.002402f, 0.001595f, 0.006909f, 0.007789f, 0.006344f, 0.008419f, 0.013374f, 0.011268f, 0.006456f, 0.007690f, 0.002649f, -0.002907f, -0.000917f, -0.003652f, -0.005428f, -0.002702f, -0.004893f, -0.004704f, -0.005693f, -0.007191f, -0.007834f, -0.007572f, -0.004256f, 0.000002f, 0.000387f, 0.004184f, 0.004315f, 0.003170f, 0.002391f, 0.004080f, 0.004106f, 0.006801f, 0.004584f, 0.005720f, 0.002943f, -0.001300f, -0.003127f, -0.001244f, -0.003891f, -0.000553f, -0.000213f, -0.001755f, -0.001041f, -0.001304f, -0.003832f, -0.002874f, -0.002472f, -0.001013f, -0.001233f, -0.000159f, -0.000265f, 0.000284f, -0.001185f, -0.001263f, -0.001965f, 0.001511f, 0.002344f, 0.005689f, 0.005652f, 0.006491f, 0.004713f, 0.003245f, 0.001212f, 0.000000f, -0.001775f, -0.002073f, -0.004845f, -0.004309f, -0.005040f, -0.004356f, -0.004968f, -0.002965f, -0.002037f, 0.000003f, 0.000146f, 0.002091f, 0.001689f, 0.003952f, 0.003958f, 0.004591f, 0.003398f, 0.004016f, 0.002060f, 0.001541f, -0.000661f, -0.001021f, -0.002601f, -0.002083f, -0.002783f, -0.001567f, -0.002155f, -0.000647f, -0.001162f, 0.000123f, + -0.000542f, 0.000607f, -0.000222f, 0.000725f, -0.000299f, 0.000542f}, + {0.013874f, 0.005147f, -0.006824f, -0.001265f, 0.004893f, -0.000939f, 0.005201f, -0.012703f, -0.008904f, -0.002291f, -0.010533f, 0.004367f, -0.002276f, -0.001257f, -0.007087f, -0.003286f, 0.006765f, 0.006583f, -0.002523f, -0.002115f, -0.004337f, -0.010278f, 0.011458f, 0.006679f, 0.000383f, 0.001114f, -0.000533f, 0.000250f, 0.009246f, -0.004721f, 0.001771f, -0.014724f, -0.011917f, -0.003084f, 0.001179f, -0.010283f, -0.001806f, 0.003552f, 0.000968f, 0.000108f, -0.005034f, -0.004016f, 0.009668f, -0.004510f, -0.003996f, -0.001420f, -0.001262f, 0.004148f, -0.002125f, -0.006346f, -0.000133f, 0.005432f, -0.007750f, 0.000269f, -0.008307f, 0.000521f, -0.006060f, 0.009253f, -0.000442f, -0.009892f, -0.001342f, -0.001021f, 0.001259f, -0.014094f, -0.001609f, 0.001102f, -0.009291f, 0.004252f, 0.000289f, -0.010871f, 0.005004f, 0.006583f, -0.005681f, -0.006682f, -0.011792f, 0.006160f, 0.003677f, 0.010962f, 0.005523f, -0.001698f, 0.002226f, -0.001588f, 0.003425f, 0.003447f, 0.007688f, 0.001880f, -0.003232f, -0.000173f, 0.000973f, -0.000303f, 0.004427f, 0.001074f, -0.001417f, -0.002165f, 0.002195f, 0.001639f, + 0.003338f, 0.001578f, 0.001346f, 0.001903f, 0.001850f, 0.000683f, 0.001177f, -0.000252f, -0.000482f, 0.000651f, 0.000541f, 0.000785f, -0.000381f, 0.000935f, -0.001245f, -0.000034f, -0.010266f, 0.004666f, -0.012789f, -0.003501f, -0.001837f, -0.006392f, 0.006076f, 0.014289f, -0.005884f, -0.001860f, 0.000614f, -0.005857f, 0.004037f, -0.000854f, -0.004852f, -0.008107f, -0.004387f, 0.012886f, 0.012351f, 0.007007f, 0.014357f, 0.008516f, 0.004527f, 0.013605f, -0.008499f, 0.003014f, 0.005744f, -0.000245f, 0.002278f, -0.004012f, 0.002540f, -0.018769f, 0.000338f, -0.001074f, 0.006722f, -0.004238f, -0.002453f, -0.001296f, 0.005133f, -0.005935f, -0.001026f, 0.001704f, 0.003594f, 0.003575f, -0.001067f, -0.006370f, 0.001140f, 0.002242f, 0.004534f, 0.003482f, 0.005283f, -0.005991f, -0.003632f, -0.001092f, -0.010712f, -0.001254f, 0.002755f, 0.009151f, 0.010142f, -0.001397f, 0.005560f, 0.004197f, -0.000836f, 0.003795f, 0.004447f, 0.006603f, -0.002722f, -0.000088f, -0.005024f, 0.000855f, -0.004340f, 0.002934f, -0.006390f, -0.005966f, 0.003502f, -0.000039f, -0.011871f, -0.001107f, -0.008911f, -0.002399f, + -0.001336f, -0.001494f, -0.011805f, 0.001128f, 0.004054f, -0.003461f, -0.003430f, 0.002022f, 0.001395f, 0.000848f, -0.002409f, -0.006303f, -0.000414f, -0.002762f, 0.002304f, 0.000086f, 0.000077f, -0.000706f, -0.002698f, -0.002893f, -0.003367f, 0.000232f, -0.001512f, 0.001420f, -0.002148f, 0.000811f, 0.000395f, -0.001871f, -0.000140f, -0.002084f, -0.000853f, 0.000121f, -0.000091f, -0.001854f, -0.000552f, -0.000315f, -0.012972f, -0.012075f, 0.004441f, -0.001349f, 0.010020f, 0.010232f, 0.000763f, 0.000321f, 0.019452f, -0.005204f, -0.000534f, 0.016478f, 0.000611f, -0.009407f, -0.013954f, 0.010154f, -0.004128f, 0.000139f, -0.008664f, 0.002744f, -0.006205f, 0.006923f, 0.030430f, -0.011054f, -0.009016f, -0.010918f, -0.011953f, 0.002252f, -0.009756f, -0.023946f, -0.000657f, 0.002487f, 0.000009f, -0.009473f, -0.002058f, 0.007884f, -0.009858f, -0.005708f, 0.014206f, 0.004773f, -0.003671f, -0.003316f, 0.009135f, -0.004470f, 0.006530f, 0.006085f, -0.013045f, -0.008545f, -0.007738f, 0.008594f, -0.006631f, -0.003840f, -0.003618f, -0.004246f, -0.000711f, -0.008686f, 0.000046f, -0.002562f, 0.002144f, -0.001127f, + -0.019076f, 0.008924f, -0.010674f, 0.008493f, 0.001553f, -0.015572f, 0.003165f, 0.010553f, 0.003215f, 0.017516f, -0.007383f, 0.001041f, 0.002029f, 0.004163f, 0.006233f, -0.006792f, 0.002602f, 0.002383f, -0.010135f, 0.013974f, 0.000999f, -0.001888f, 0.005899f, -0.001913f, 0.002646f, -0.002457f, -0.005288f, -0.000287f, -0.003402f, 0.004644f, -0.001179f, 0.000948f, 0.005427f, 0.001957f, 0.002073f, -0.001122f, 0.002960f, 0.000607f, -0.000783f, 0.002030f, 0.003955f, -0.002766f, 0.000271f, -0.002922f, 0.001895f, -0.000894f, 0.005866f, -0.008182f, 0.003902f, 0.004013f, -0.004261f, 0.001890f, -0.002050f, -0.017583f, 0.005496f, 0.016342f, 0.013779f, 0.015321f, 0.002806f, -0.003402f, -0.013116f, -0.007012f, -0.006108f, -0.005066f, 0.013777f, 0.018913f, 0.001471f, -0.001364f, 0.013643f, -0.022035f, 0.000532f, -0.001834f, -0.000296f, -0.007219f, -0.007291f, 0.007949f, 0.009977f, 0.000269f, -0.002103f, 0.003899f, -0.010591f, -0.008135f, 0.008268f, -0.008961f, 0.017139f, 0.015410f, 0.002665f, 0.009472f, 0.008118f, 0.001585f, -0.006907f, 0.002376f, -0.000307f, -0.012091f, 0.011757f, -0.001083f, + 0.005533f, 0.009462f, -0.011244f, -0.004436f, -0.013375f, -0.003084f, 0.003134f, 0.012564f, -0.012887f, -0.005188f, 0.009504f, -0.002036f, -0.008228f, 0.013786f, -0.011471f, -0.024256f, 0.004128f, -0.013684f, -0.006045f, 0.006541f, -0.005807f, 0.001118f, 0.001488f, -0.005958f, 0.010378f, -0.009511f, -0.010693f, -0.012950f, -0.001388f, -0.005647f, 0.000890f, 0.003375f, -0.007849f, 0.002032f, 0.002298f, 0.000528f, -0.003724f, 0.002032f, 0.001719f, 0.005340f, 0.000844f, -0.001792f, -0.003669f, -0.002440f, -0.001613f, -0.001025f, -0.001279f, -0.002356f, 0.000728f, 0.000991f, 0.001591f, 0.000429f, -0.000694f, -0.001899f, -0.000707f, 0.002621f, -0.002713f, -0.002923f, -0.000825f, -0.000142f, -0.000228f, 0.001989f, 0.002454f, 0.002211f, -0.001396f, 0.000735f, 0.000513f, 0.000834f, 0.000479f, -0.000832f, 0.005241f, -0.002583f, 0.000285f, -0.021865f, 0.004635f, 0.020658f, 0.001630f, 0.003250f, 0.006235f, 0.019348f, 0.002617f, -0.018575f, 0.020597f, 0.009080f, 0.007417f, 0.012574f, 0.010863f, 0.000100f, -0.003896f, 0.011857f, 0.009023f, 0.003107f, -0.008561f, 0.010310f, 0.004812f, 0.015258f, + 0.017755f, 0.006773f, -0.004430f, 0.000408f, -0.000173f, 0.007417f, 0.022544f, 0.013419f, -0.012581f, 0.021858f, 0.000830f, -0.002699f, 0.002842f, -0.016131f, 0.017867f, -0.002399f, 0.000273f, -0.002155f, 0.004517f, -0.002438f, 0.009198f, -0.013022f, 0.018248f, 0.015586f, -0.000641f, -0.002940f, -0.010237f, -0.019423f, -0.006715f, 0.007665f, -0.004578f, -0.007310f, 0.010223f, 0.012036f, -0.008245f, -0.007324f, -0.024943f, -0.008673f, -0.003149f, -0.001260f, -0.027908f, 0.014122f, 0.001482f, -0.016631f, -0.013704f, 0.004512f, -0.006545f, 0.001630f, -0.004200f, 0.000828f, -0.007412f, -0.001684f, -0.006624f, 0.004650f, 0.009204f, -0.002704f, 0.006978f, 0.000760f, -0.003040f, 0.008243f, 0.002800f, 0.000333f, 0.006757f, -0.000884f, -0.003239f, -0.004410f, -0.004979f, -0.005177f, -0.004943f, -0.006040f, -0.004460f, 0.000202f, -0.002519f, -0.005682f, -0.002881f, 0.000452f, -0.001319f, -0.002188f, 0.001062f, 0.002143f, 0.000955f, -0.002668f, -0.003773f, -0.004635f, 0.000341f, -0.004408f, 0.003801f, -0.002485f, -0.002617f, -0.002460f, -0.000074f, -0.001801f, 0.000229f, 0.000919f, 0.001745f, -0.002159f, + 0.002149f, 0.010015f, -0.012718f, -0.000358f, 0.000377f, 0.000224f, 0.021182f, 0.011260f, 0.000055f, 0.025849f, 0.012295f, 0.023311f, 0.005854f, 0.007719f, 0.025378f, -0.010199f, -0.016539f, -0.010854f, 0.023738f, 0.005505f, -0.013050f, 0.017689f, -0.004695f, -0.010723f, 0.016244f, 0.037806f, -0.009613f, 0.001665f, 0.006285f, 0.007031f, -0.009696f, 0.001011f, 0.021151f, 0.002004f, 0.025960f, -0.005855f, 0.027859f, 0.019330f, 0.006817f, 0.016166f, 0.010578f, -0.010092f, 0.007062f, -0.002772f, -0.002285f, 0.002402f, 0.002054f, -0.002031f, 0.007471f, 0.004817f, 0.018045f, 0.011809f, -0.014779f, 0.004979f, 0.006892f, -0.011269f, 0.000815f, -0.026262f, -0.033571f, 0.013267f, -0.008490f, -0.022272f, -0.004583f, -0.012098f, 0.014668f, 0.002957f, -0.006710f, -0.016869f, 0.013166f, -0.012271f, 0.008081f, -0.013742f, 0.002113f, -0.005670f, 0.020558f, 0.003581f, -0.007859f, 0.007639f, -0.017312f, 0.015641f, 0.002696f, -0.015217f, 0.000791f, -0.001781f, -0.004199f, -0.002032f, 0.002233f, 0.004197f, -0.004268f, 0.007073f, -0.001533f, -0.003113f, -0.003237f, -0.002821f, -0.006375f, -0.000767f, + -0.002220f, -0.006500f, -0.002243f, 0.002002f, -0.003816f, 0.003751f, 0.000676f, -0.002478f, 0.001116f, -0.004414f, -0.000725f, -0.003161f, -0.000318f, -0.000389f, 0.000235f, 0.001791f, 0.002533f, 0.002524f, 0.000157f, 0.001146f, -0.000115f, 0.001095f, -0.002043f, 0.001511f, -0.001436f, 0.001013f, -0.015016f, 0.002239f, 0.000338f, 0.004171f, -0.009252f, 0.010436f, 0.010985f, -0.000960f, -0.007743f, -0.025661f, -0.022457f, -0.016841f, 0.007728f, 0.002566f, 0.003892f, -0.020995f, 0.013229f, 0.009752f, 0.016520f, -0.017965f, 0.017045f, 0.013534f, -0.010696f, -0.008431f, -0.005521f, 0.017842f, 0.011905f, -0.007492f, 0.001508f, 0.026869f, 0.013257f, 0.007119f, 0.015193f, 0.010848f, 0.003914f, -0.008568f, 0.001760f, 0.001471f, -0.003986f, -0.009541f, 0.023413f, 0.011288f, -0.022245f, 0.015122f, 0.014563f, 0.014979f, 0.011316f, 0.003358f, -0.013955f, 0.000663f, -0.002064f, 0.020867f, 0.002505f, 0.009464f, 0.018491f, -0.003110f, -0.020677f, 0.004789f, 0.010774f, 0.021080f, -0.028009f, -0.015417f, 0.007380f, 0.000541f, 0.002331f, -0.016205f, -0.004298f, -0.015707f, -0.002450f, 0.007833f, + -0.005482f, -0.008478f, -0.010841f, 0.004748f, -0.002863f, -0.005049f, -0.013352f, 0.000733f, -0.017798f, -0.000076f, -0.001939f, -0.008650f, -0.010133f, 0.011528f, -0.004116f, -0.002562f, -0.005845f, -0.010572f, 0.003593f, 0.005464f, 0.003375f, 0.004330f, 0.002725f, -0.005733f, -0.003489f, -0.001576f, -0.001713f, -0.005376f, -0.010786f, -0.004437f, -0.000512f, -0.003339f, -0.000560f, -0.005411f, 0.000244f, -0.002828f, -0.002405f, -0.003871f, -0.004863f, -0.002187f, 0.004360f, -0.003102f, -0.001862f, 0.000925f, 0.001610f, 0.001449f, -0.002505f, 0.003735f, 0.004999f, 0.005536f, -0.001729f, -0.000097f, -0.000374f, 0.000869f, 0.000654f, 0.009762f, 0.001360f, -0.017311f, 0.017622f, 0.011190f, -0.005171f, 0.006888f, 0.010642f, -0.011735f, -0.003870f, 0.044806f, -0.001401f, 0.017425f, 0.012312f, -0.037550f, -0.019859f, -0.002193f, -0.001518f, -0.000522f, 0.021336f, 0.004693f, -0.010303f, 0.021907f, 0.013563f, -0.002839f, -0.003562f, 0.006933f, -0.003533f, -0.007860f, -0.016653f, -0.019878f, 0.010993f, -0.004428f, -0.009284f, -0.001056f, -0.030793f, -0.005821f, 0.002072f, 0.016925f, -0.020338f, -0.005982f, + 0.002670f, 0.001280f, 0.004474f, 0.001430f, 0.021772f, -0.025427f, -0.008411f, 0.005549f, -0.000801f, -0.015041f, -0.003136f, 0.019638f, 0.016978f, 0.014581f, -0.004029f, -0.025322f, -0.011504f, 0.009047f, -0.002865f, 0.016862f, -0.000983f, -0.000414f, -0.012578f, -0.007882f, 0.014799f, -0.018182f, 0.012392f, 0.009605f, -0.013053f, -0.006558f, -0.003041f, 0.002015f, -0.014059f, 0.006763f, 0.004855f, -0.006974f, -0.002165f, -0.019242f, 0.006932f, 0.014759f, 0.021185f, 0.001792f, 0.005680f, 0.009983f, 0.003092f, -0.016817f, 0.011480f, -0.004081f, 0.001880f, -0.000013f, -0.005400f, -0.005839f, -0.003121f, 0.007735f, 0.001370f, 0.006454f, -0.000733f, 0.001008f, -0.009337f, -0.003236f, -0.004307f, 0.006976f, -0.000736f, -0.003092f, 0.004846f, -0.003645f, 0.003790f, -0.002343f, 0.000599f, -0.007764f, 0.001776f, -0.001859f, -0.001631f, -0.005004f, 0.001738f, -0.000848f, -0.004383f, -0.008027f, -0.001820f, 0.000724f, -0.003244f, 0.003157f, -0.000877f, -0.005289f, -0.034073f, -0.002024f, 0.004573f, 0.022940f, 0.002764f, -0.000857f, 0.013736f, -0.009942f, 0.029897f, -0.029869f, -0.002966f, -0.006343f, + 0.004919f, -0.001392f, -0.002547f, 0.007761f, -0.005739f, -0.010114f, -0.006906f, -0.005953f, -0.018081f, -0.002781f, 0.012659f, -0.002874f, -0.008103f, 0.019068f, -0.000416f, 0.022922f, -0.022490f, -0.012758f, 0.028174f, -0.002827f, -0.001854f, 0.001738f, -0.017952f, -0.002018f, -0.022381f, 0.006567f, -0.026840f, -0.000623f, 0.019703f, -0.006430f, 0.013378f, 0.017838f, 0.010189f, 0.014054f, -0.018210f, 0.018041f, 0.001844f, -0.047019f, -0.008070f, 0.006894f, -0.004006f, -0.005193f, -0.020342f, 0.015956f, -0.017365f, -0.003341f, -0.019674f, -0.018263f, -0.028497f, 0.025305f, 0.000007f, 0.029486f, -0.014842f, 0.022232f, 0.029254f, -0.019306f, 0.023802f, -0.029473f, -0.024717f, -0.026679f, -0.009474f, -0.018793f, 0.005851f, 0.008902f, -0.001223f, -0.003453f, -0.000343f, -0.021103f, 0.001463f, 0.000257f, 0.012009f, 0.004846f, 0.004584f, 0.008699f, 0.004713f, -0.004579f, -0.000383f, -0.008588f, -0.005327f, 0.000239f, 0.003313f, 0.000161f, 0.003769f, -0.002818f, 0.004065f, -0.001288f, 0.002052f, -0.013091f, 0.000587f, 0.005002f, 0.003593f, 0.007285f, -0.004354f, -0.005779f, -0.007896f, -0.000184f, + -0.000874f, -0.006133f, -0.006896f, 0.000686f, -0.001306f, 0.001113f, -0.000187f, -0.001963f, 0.003248f, 0.010417f, -0.002789f, -0.002455f, -0.001561f, -0.002867f, 0.009131f, 0.000352f, 0.000883f, -0.003269f, 0.005318f, -0.006109f, -0.001427f, 0.004018f, 0.022091f, 0.037558f, 0.005240f, -0.009834f, -0.020352f, 0.012702f, 0.034369f, 0.000457f, 0.009765f, 0.001912f, 0.013643f, 0.009625f, 0.010443f, 0.018925f, -0.022777f, -0.001670f, -0.008536f, 0.029752f, 0.021872f, -0.000951f, 0.033994f, 0.018154f, 0.002947f, -0.031951f, -0.016012f, -0.024333f, -0.011413f, 0.002610f, 0.009124f, -0.008648f, 0.001213f, 0.034809f, -0.006578f, 0.000155f, 0.001699f, 0.035764f, -0.021852f, -0.008646f, -0.008938f, -0.003372f, -0.021378f, 0.024676f, 0.001585f, 0.016593f, -0.025628f, 0.003611f, -0.002838f, -0.015102f, -0.006107f, -0.028092f, 0.008804f, 0.000663f, 0.005896f, -0.003338f, -0.001757f, -0.032630f, -0.011177f, 0.012928f, 0.020783f, -0.005911f, 0.005411f, 0.043682f, -0.002864f, 0.002657f, 0.007966f, 0.019765f, -0.018487f, 0.004369f, 0.022038f, -0.012952f, 0.016014f, 0.004843f, 0.016693f, -0.022089f, + -0.011333f, 0.003157f, 0.005069f, 0.011403f, 0.012730f, 0.012350f, -0.008393f, 0.003682f, 0.007508f, 0.014915f, 0.022988f, 0.010812f, -0.010956f, -0.004943f, -0.008628f, 0.003866f, 0.004834f, 0.010181f, 0.009088f, 0.005663f, 0.009604f, -0.010218f, -0.002111f, -0.010423f, 0.009085f, -0.011962f, 0.012257f, 0.009000f, -0.009227f, 0.005602f, -0.001145f, -0.005450f, 0.001344f, 0.002024f, -0.003332f, 0.002973f, 0.015233f, -0.000299f, -0.000047f, -0.009206f, 0.004787f, -0.000238f, -0.000319f, -0.008338f, 0.008722f, -0.007064f, 0.002719f, 0.003951f, 0.006916f, -0.000581f, -0.003310f, -0.020339f, -0.031039f, 0.008626f, -0.003351f, -0.031301f, 0.008553f, 0.003160f, 0.028351f, 0.025103f, -0.023313f, -0.027925f, 0.006216f, -0.021322f, -0.011275f, 0.000883f, 0.042239f, 0.000603f, -0.005436f, -0.037805f, -0.018996f, -0.003271f, -0.028264f, -0.042848f, 0.029322f, -0.011051f, -0.013605f, -0.002468f, 0.031800f, -0.009980f, 0.003405f, -0.006397f, -0.006487f, -0.018529f, -0.009969f, 0.003106f, -0.044848f, -0.028791f, -0.008370f, -0.016341f, -0.015258f, -0.005240f, -0.017665f, 0.015208f, 0.006861f, 0.004870f, + -0.010820f, 0.007689f, -0.064718f, 0.060062f, 0.035141f, -0.006100f, -0.008319f, 0.033783f, 0.001911f, -0.020235f, -0.028921f, -0.003681f, -0.010236f, -0.012006f, -0.017459f, -0.017713f, 0.021965f, 0.020608f, -0.009493f, 0.045294f, -0.025352f, -0.020721f, -0.018836f, 0.000090f, 0.014644f, -0.053102f, 0.015524f, -0.016810f, 0.027573f, -0.030104f, 0.013022f, -0.002757f, -0.010364f, 0.020738f, -0.039277f, 0.036713f, 0.001900f, -0.000521f, -0.008476f, 0.001053f, -0.000739f, -0.018591f, 0.003440f, -0.005169f, 0.009483f, 0.012328f, -0.011560f, 0.005617f, 0.007675f, 0.017310f, 0.000399f, -0.005706f, -0.001200f, -0.001598f, -0.007133f, 0.005031f, -0.002937f, -0.004215f, 0.004190f, -0.006951f, -0.002441f, 0.001616f, 0.004738f, 0.005882f, -0.014126f, -0.010690f, -0.009460f, 0.001486f, 0.005404f, -0.000092f, 0.003465f, 0.003137f, 0.009004f, 0.004747f, -0.007825f, 0.006886f, 0.001091f, -0.008732f, 0.030762f, 0.002540f, 0.071726f, 0.023369f, -0.001454f, 0.003086f, -0.027753f, -0.035950f, 0.044798f, -0.013266f, 0.005079f, 0.059478f, -0.015497f, -0.002868f, -0.012723f, 0.046384f, 0.008921f, -0.019168f, + 0.027380f, -0.009951f, 0.040671f, 0.021356f, 0.010133f, 0.006032f, -0.004504f, -0.015562f, -0.005075f, -0.004216f, -0.043599f, -0.010945f, -0.007022f, 0.024130f, -0.013501f, 0.004559f, 0.008025f, -0.031228f, -0.046532f, -0.001650f, 0.040188f, -0.002672f, 0.035704f, -0.006171f, -0.049881f, -0.019307f, 0.002282f, 0.011321f, 0.009039f, -0.040569f, 0.000358f, -0.011604f, 0.029490f, -0.030101f, 0.037278f, 0.055117f, 0.035750f, -0.011200f, 0.006685f, 0.022246f, -0.007904f, 0.043192f, 0.049986f, 0.044073f, 0.014426f, 0.048326f, -0.001618f, -0.019443f, 0.006277f, -0.025241f, -0.031857f, 0.017426f, -0.013650f, 0.039499f, 0.020439f, 0.010492f, -0.013517f, -0.048589f, -0.044028f, 0.030955f, -0.019466f, -0.039312f, 0.026311f, 0.052468f, 0.031580f, -0.016795f, 0.025091f, 0.015398f, -0.005392f, -0.012371f, 0.014923f, -0.018621f, -0.005597f, -0.001976f, -0.012779f, 0.001727f, -0.002700f, 0.010822f, 0.006616f, -0.002480f, -0.017020f, 0.009565f, 0.008769f, 0.006013f, -0.003610f, 0.000584f, -0.015890f, 0.001317f, -0.000064f, 0.004176f, 0.003858f, 0.000442f, 0.009630f, -0.003295f, 0.013289f, 0.014903f, + 0.003970f, 0.012108f, 0.001231f, -0.009532f, -0.022543f, 0.005161f, 0.000689f, 0.004910f, -0.003743f, -0.016246f, -0.036253f, 0.021213f, 0.026490f, -0.000411f, 0.012937f, 0.008724f, 0.012793f, 0.010647f, 0.004836f, -0.002910f, 0.006206f, -0.007636f, 0.013706f, -0.024664f, -0.068700f, -0.027584f, 0.037527f, 0.002108f, -0.011289f, -0.023050f, -0.000232f, 0.031551f, 0.040289f, 0.008514f, -0.024908f, -0.004480f, 0.032195f, -0.039228f, 0.003606f, -0.005003f, 0.028786f, 0.032859f, -0.026596f, 0.049917f, 0.009573f, 0.001829f, 0.070583f, 0.000171f, -0.022334f, 0.024577f, -0.011963f, 0.003331f, -0.015265f, 0.005041f, 0.046838f, 0.005195f, 0.059705f, 0.025031f, -0.052449f, -0.057471f, -0.012685f, 0.014618f, 0.031790f, -0.044644f, -0.015888f, -0.006703f, 0.053699f, 0.049067f, -0.042483f, -0.001947f, -0.026014f, 0.015970f, -0.009131f, 0.056103f, 0.000496f, -0.012754f, 0.036797f, -0.007897f, -0.044067f, -0.022479f, -0.007445f, 0.045126f, -0.040624f, 0.024035f, 0.070421f, 0.033080f, 0.047165f, -0.013119f, 0.018993f, -0.013228f, -0.029676f, -0.028666f, 0.014517f, -0.020521f, -0.001682f, -0.007675f, + 0.012569f, -0.000814f, 0.028376f, -0.006950f, -0.013574f, -0.005209f, -0.006120f, 0.006536f, -0.004929f, 0.010516f, -0.020080f, 0.013993f, -0.013417f, -0.006526f, 0.003667f, -0.005770f, -0.006542f, 0.008585f, -0.009059f, -0.003905f, -0.002986f, -0.007781f, -0.024648f, -0.014314f, -0.002784f, -0.003506f, -0.007596f, -0.010176f, -0.002679f, 0.006517f, -0.004676f, 0.003533f, -0.004194f, -0.000960f, 0.005027f, -0.019349f, 0.001584f, -0.003386f, -0.014539f, -0.001325f, -0.034079f, 0.025583f, 0.035860f, 0.031246f, -0.053871f, -0.024629f, 0.032834f, 0.102365f, 0.005451f, 0.022771f, -0.030229f, 0.009861f, -0.002172f, -0.004098f, -0.028431f, 0.009051f, -0.010458f, 0.049453f, 0.037986f, -0.050350f, -0.023307f, 0.054565f, 0.026665f, 0.020019f, 0.005024f, 0.029770f, 0.033261f, 0.011451f, 0.019608f, 0.019345f, -0.025319f, 0.004250f, -0.024809f, -0.010195f, 0.005950f, -0.004124f, 0.003413f, -0.020198f, -0.019351f, 0.015057f, -0.004518f, 0.020532f, 0.015031f, -0.046549f, 0.034566f, 0.007644f, 0.027703f, -0.031229f, 0.017601f, 0.029233f, -0.022847f, -0.035754f, -0.037265f, -0.039665f, -0.040950f, -0.032774f, + 0.011366f, 0.060167f, 0.015177f, 0.018954f, 0.027642f, 0.002573f, -0.001098f, -0.022643f, 0.039331f, -0.050001f, -0.102078f, 0.035369f, -0.023726f, 0.005009f, -0.086670f, 0.021865f, 0.026891f, 0.005286f, 0.016748f, 0.015092f, -0.013184f, -0.021440f, -0.034574f, 0.011414f, 0.007212f, -0.025476f, 0.018686f, -0.009333f, -0.044441f, -0.023487f, -0.000831f, -0.007318f, 0.004343f, 0.003548f, 0.012774f, 0.006669f, 0.002069f, -0.000289f, 0.010083f, -0.005813f, -0.014377f, -0.024448f, -0.015305f, -0.015603f, -0.005907f, -0.008366f, 0.008952f, 0.014700f, 0.010290f, -0.019377f, -0.001928f, -0.007837f, -0.000151f, 0.012032f, 0.003211f, -0.017068f, -0.032910f, -0.002246f, 0.001092f, 0.003263f, -0.011908f, -0.004372f, -0.012437f, -0.001919f, -0.016166f, -0.016167f, 0.010536f, -0.015786f, 0.006454f, 0.003296f, -0.008727f, -0.002781f, 0.010073f, -0.008850f, 0.003673f, -0.012060f, 0.024219f, 0.017294f, 0.023133f, -0.032997f, -0.017030f, -0.004723f, 0.021147f, -0.044009f, 0.073130f, 0.034619f, -0.005914f, 0.039758f, 0.023997f, 0.037881f, -0.019931f, -0.025677f, -0.024804f, 0.045900f, 0.016378f, 0.008197f, + 0.041529f, -0.036447f, -0.117600f, -0.007954f, 0.007882f, 0.013876f, -0.066193f, 0.051194f, 0.037333f, -0.071222f, -0.054717f, 0.001629f, 0.029311f, 0.002362f, 0.016652f, 0.037564f, -0.009993f, 0.023275f, -0.034346f, -0.039456f, -0.031357f, -0.040984f, -0.063608f, 0.017590f, 0.006584f, -0.042835f, 0.056364f, 0.021780f, -0.013786f, -0.013573f, -0.033292f, -0.025059f, -0.058003f, -0.031633f, 0.020599f, 0.051317f, -0.019628f, 0.005024f, 0.021136f, -0.045775f, 0.032897f, 0.044451f, 0.006533f, -0.011566f, 0.038063f, 0.010298f, 0.004240f, -0.027457f, -0.032007f, -0.002481f, 0.056912f, -0.017660f, -0.052647f, -0.001062f, -0.067073f, -0.069927f, -0.072772f, -0.034995f, -0.038443f, -0.024631f, 0.031160f, -0.004527f, 0.027995f, -0.005942f, -0.009395f, -0.026435f, -0.007194f, -0.007884f, 0.014962f, -0.011691f, -0.016952f, -0.003457f, -0.006748f, 0.002339f, -0.024669f, 0.004510f, -0.011468f, -0.009941f, 0.012786f, -0.011869f, -0.004104f, 0.004120f, -0.008926f, 0.018972f, -0.012316f, 0.002740f, 0.030761f, 0.003685f, 0.017867f, -0.007035f, -0.011127f, 0.031298f, 0.004447f, -0.016742f, 0.000338f, 0.000219f, + 0.002157f, 0.004364f, -0.009210f, 0.019530f, 0.000879f, -0.001564f, -0.009811f, 0.001762f, -0.009970f, -0.025758f, -0.044513f, -0.023331f, -0.023919f, 0.028979f, 0.057038f, 0.021056f, -0.026027f, -0.055014f, 0.058992f, 0.031753f, -0.028481f, -0.015353f, -0.015209f, 0.003300f, 0.013867f, -0.018195f, 0.030640f, 0.028502f, 0.001571f, -0.019188f, -0.018197f, -0.017132f, -0.002228f, 0.011063f, -0.008654f, -0.018969f, -0.045104f, 0.013850f, 0.039577f, -0.022796f, 0.034981f, 0.001021f, 0.023458f, -0.019703f, 0.026084f, 0.075774f, -0.028489f, 0.033029f, 0.065803f, 0.011363f, -0.011614f, -0.018372f, 0.019018f, 0.001336f, 0.033529f, -0.025819f, 0.090300f, -0.028083f, -0.060811f, 0.013832f, -0.027778f, 0.071420f, 0.023323f, -0.022502f, 0.003973f, -0.043296f, -0.059350f, 0.072496f, 0.008150f, -0.019708f, 0.071604f, -0.037338f, 0.009180f, -0.021171f, 0.041411f, -0.053246f, -0.059751f, -0.042699f, 0.013010f, 0.025406f, 0.047420f, 0.020136f, 0.050119f, 0.078695f, -0.009955f, 0.015647f, -0.010674f, 0.009730f, -0.002783f, 0.002928f, -0.058287f, 0.001901f, -0.080396f, -0.027023f, -0.016095f, 0.013895f, + -0.003024f, 0.017242f, -0.006678f, -0.024274f, -0.025518f, -0.006095f, -0.017002f, -0.018808f, -0.032304f, -0.000366f, -0.003722f, 0.023887f, 0.009956f, -0.020059f, 0.017564f, 0.008010f, 0.014408f, 0.019172f, -0.025961f, 0.006715f, -0.011048f, -0.005279f, 0.025144f, -0.008994f, 0.012288f, 0.016830f, -0.010819f, -0.028227f, -0.014659f, 0.009679f, -0.046212f, -0.014753f, 0.000504f, -0.006953f, -0.010873f, 0.020145f, -0.022158f, -0.024388f, 0.016154f, 0.027239f, -0.013332f, 0.022656f, -0.015985f, 0.054840f, -0.007643f, 0.001023f, 0.066978f, 0.006620f, -0.035785f, -0.042809f, -0.036761f, 0.067560f, -0.045311f, 0.026425f, 0.032432f, -0.022549f, 0.006968f, -0.038136f, -0.008141f, 0.029787f, -0.026840f, 0.021321f, -0.008808f, -0.047775f, -0.103113f, -0.009914f, 0.093215f, 0.038281f, 0.009732f, -0.019049f, -0.027786f, -0.005710f, -0.036534f, 0.011275f, -0.051585f, 0.061330f, 0.004712f, 0.006884f, 0.005198f, -0.021493f, -0.062275f, -0.024451f, 0.050183f, -0.041501f, -0.010403f, -0.028902f, 0.022452f, -0.020879f, 0.069375f, -0.011782f, 0.014355f, -0.025878f, -0.064653f, 0.013725f, -0.049359f, -0.011749f, + -0.004305f, -0.091232f, -0.076408f, -0.072879f, 0.024019f, -0.013958f, -0.039107f, -0.026083f, -0.025018f, -0.023721f, -0.034915f, -0.024205f, -0.006061f, -0.082011f, 0.022725f, 0.008436f, 0.029989f, -0.018711f, 0.070679f, -0.008084f, 0.013618f, -0.025229f, -0.009765f, 0.037402f, -0.075495f, 0.031327f, 0.049426f, -0.051494f, -0.032897f, 0.002310f, 0.007961f, -0.014192f, -0.024449f, -0.040533f, -0.002499f, 0.000105f, -0.024016f, 0.019550f, -0.017737f, -0.032497f, -0.017569f, -0.014462f, 0.019970f, -0.001440f, 0.000586f, -0.001623f, 0.014874f, -0.039886f, -0.011271f, -0.005633f, -0.007693f, -0.003664f, 0.000539f, -0.047686f, 0.001345f, -0.016130f, -0.012466f, -0.005045f, -0.021076f, 0.004683f, -0.006110f, 0.003131f, 0.000678f, -0.005164f, -0.005389f, -0.012780f, -0.002117f, -0.010721f, -0.002443f, 0.005342f, -0.010812f, -0.018315f, 0.000287f, -0.005361f, -0.004075f, -0.011966f, -0.019219f, -0.014185f, -0.005153f, -0.003737f, -0.003748f, 0.005350f, -0.014165f, -0.015319f, 0.027575f, 0.017579f, 0.033486f, -0.012263f, -0.071299f, 0.020974f, 0.000472f, 0.118050f, 0.119700f, 0.015114f, 0.000648f, 0.028898f, + 0.013676f, 0.030832f, 0.051363f, 0.019915f, 0.053357f, 0.081993f, -0.020785f, 0.011271f, -0.067381f, -0.008890f, 0.008259f, -0.008054f, -0.020393f, -0.039958f, -0.034592f, 0.019487f, 0.018296f, -0.088271f, 0.062945f, 0.017731f, 0.089031f, -0.004858f, -0.018164f, 0.029860f, -0.006634f, 0.094805f, 0.023564f, -0.004231f, 0.017701f, 0.019233f, -0.025681f, -0.056940f, -0.045512f, -0.022028f, 0.069941f, 0.001527f, 0.076923f, 0.010090f, 0.075204f, -0.021217f, -0.104366f, -0.038328f, -0.030555f, 0.054417f, 0.006197f, -0.049955f, -0.073566f, -0.050571f, -0.010543f, 0.063794f, -0.055358f, -0.047348f, -0.031904f, 0.056987f, -0.028129f, -0.015892f, -0.073201f, -0.071975f, 0.022574f, 0.012788f, 0.097360f, 0.025635f, -0.010619f, -0.025902f, 0.030352f, 0.032219f, 0.103996f, 0.002396f, -0.034035f, -0.044663f, -0.003148f, -0.004166f, 0.002148f, 0.016693f, 0.014788f, -0.023822f, -0.005704f, 0.008323f, 0.021529f, -0.022880f, -0.019136f, 0.029729f, 0.042965f, 0.020476f, 0.013029f, 0.017182f, -0.018372f, -0.007361f, -0.011625f, -0.002005f, -0.002598f, 0.009834f, -0.000026f, 0.056659f, 0.011679f, -0.002094f, + -0.017341f, -0.029273f, 0.028147f, 0.045989f, -0.016650f, 0.001005f, 0.001701f, 0.005949f, 0.026105f, 0.011617f, 0.019391f, 0.020040f, 0.005015f, 0.015613f, 0.005053f, -0.000849f, 0.005091f, -0.013827f, -0.004703f, 0.003476f, -0.008375f, -0.005630f, -0.018212f, -0.001104f, 0.005910f, 0.001215f, 0.072207f, 0.026960f, -0.034658f, 0.067399f, -0.003935f, -0.133492f, -0.040282f, 0.083564f, 0.093511f, -0.066035f, -0.065484f, -0.067217f, 0.037481f, 0.056680f, 0.114346f, 0.034103f, 0.014910f, -0.065574f, -0.006454f, -0.004498f, 0.025817f, 0.056640f, 0.041617f, 0.002851f, -0.068951f, -0.134683f, -0.035472f, -0.068414f, 0.101015f, 0.106339f, 0.186599f, -0.056443f, -0.179381f, -0.039683f, -0.061624f, 0.138839f, 0.047433f, 0.140806f, 0.036419f, -0.047905f, -0.136731f, -0.093084f, 0.004928f, 0.016350f, 0.153197f, 0.061572f, -0.005412f, -0.126842f, -0.220151f, -0.058250f, 0.004586f, 0.100933f, 0.231400f, 0.049717f, 0.069664f, -0.149970f, -0.228787f, 0.009096f, 0.052317f, 0.181257f, 0.106831f, 0.075689f, -0.042463f, -0.148143f, -0.120740f, -0.002013f, 0.033746f, -0.004019f, 0.091643f, -0.076753f, + -0.071297f, -0.018479f, -0.162745f, 0.024491f, 0.007497f, 0.043425f, -0.032965f, -0.066586f, -0.035663f, -0.028686f, -0.074669f, 0.016152f, 0.021379f, -0.024708f, -0.004107f, -0.070701f, 0.009569f, 0.019275f, 0.022584f, 0.031551f, 0.009967f, -0.036669f, 0.012114f, -0.012234f, -0.006591f, 0.004307f, 0.056228f, 0.008817f, -0.002229f, -0.015401f, -0.043544f, -0.009378f, -0.017666f, 0.015722f, -0.008277f, 0.017535f, 0.011543f, -0.040403f, -0.089905f, -0.044993f, -0.066180f, 0.052735f, 0.053590f, 0.063290f, 0.036373f, -0.084354f, -0.075685f, -0.117256f, -0.028581f, 0.093335f, 0.103852f, 0.100750f, 0.004484f, -0.113184f, -0.084533f, -0.066355f, -0.001892f, 0.166406f, 0.115578f, 0.046437f, -0.090308f, -0.105328f, -0.078819f, 0.037547f, 0.039226f, 0.057074f, 0.029859f, -0.018700f, -0.026465f, -0.050241f, -0.021916f, 0.014039f, 0.001713f, 0.016813f, 0.023852f, -0.001584f, -0.077821f, 0.102933f, -0.003673f, 0.016222f, -0.044172f, -0.095116f, 0.056095f, -0.095788f, 0.101612f, 0.016303f, 0.007762f, 0.023030f, -0.063393f, 0.062726f, 0.004597f, 0.043984f, -0.060834f, 0.022239f, -0.000898f, 0.075046f, + -0.030786f, 0.019374f, 0.047819f, -0.054760f, -0.033699f, 0.006607f, -0.052469f, 0.084077f, -0.019969f, -0.033010f, 0.073181f, 0.086846f, -0.024276f, -0.062261f, -0.016977f, -0.054744f, -0.011640f, 0.035659f, -0.006702f, -0.068460f, 0.007011f, 0.038581f, -0.025785f, 0.043373f, -0.036286f, 0.017430f, 0.044021f, -0.017050f, 0.028592f, -0.078122f, -0.080994f, 0.082247f, 0.043981f, 0.126335f, -0.006373f, -0.030714f, 0.105090f, -0.059605f, -0.055193f, 0.038312f, 0.034712f, 0.061302f, -0.055889f, -0.025113f, 0.015055f, -0.010633f, 0.059079f, -0.047137f, -0.150277f, 0.039780f, 0.082339f, 0.002098f, -0.070195f, 0.014069f, 0.041403f, -0.015683f, -0.019123f, -0.054677f, -0.019007f, -0.044960f, 0.045217f, 0.012252f, -0.033472f, -0.007791f, 0.054220f, -0.038191f, -0.014933f, -0.034418f, -0.005141f, 0.027792f, -0.039888f, 0.021794f, 0.056741f, 0.023137f, -0.001757f, -0.015430f, -0.004177f, -0.020332f, -0.027835f, 0.044664f, -0.019149f, 0.020861f, -0.007037f, -0.021232f, -0.001083f, 0.005802f, 0.003234f, 0.016970f, 0.018339f, -0.032238f, -0.011039f, 0.017676f, 0.013018f, 0.034186f, -0.005259f, -0.027528f, + 0.010459f, -0.032230f, 0.015091f, -0.029250f, -0.017938f, 0.001726f, -0.007409f, -0.019196f, 0.046005f, -0.019246f, 0.008801f, 0.021669f, 0.003580f, 0.017281f, 0.030286f, 0.000708f, -0.006342f, 0.002830f, -0.002599f, -0.039659f, -0.024351f, 0.151078f, 0.041383f, 0.042027f, -0.127964f, -0.031936f, -0.100235f, -0.084629f, 0.076462f, 0.080478f, 0.159255f, 0.073645f, -0.021127f, -0.030579f, -0.018321f, 0.050472f, 0.035204f, 0.001322f, 0.077600f, 0.015350f, -0.030558f, -0.036300f, -0.029189f, 0.055876f, 0.000395f, 0.048905f, 0.023072f, 0.029632f, 0.007715f, -0.011947f, 0.006055f, -0.000058f, 0.007697f, -0.012400f, -0.002824f, 0.016200f, 0.013802f, 0.104534f, 0.084324f, 0.068867f, -0.005626f, 0.019011f, -0.042091f, -0.006775f, -0.026032f, -0.047622f, -0.049521f, 0.015323f, 0.027619f, 0.039888f, 0.048986f, 0.040318f, -0.024689f, -0.063763f, 0.097776f, -0.069326f, -0.030045f, -0.017587f, 0.033836f, 0.004571f, 0.048092f, 0.049883f, 0.043945f, -0.058403f, -0.020566f, 0.008145f, -0.022586f, -0.094323f, 0.063645f, -0.022025f, -0.016585f, 0.035849f, 0.073798f, 0.083362f, 0.061171f, 0.059549f, + 0.051785f, -0.054642f, 0.007572f, -0.013936f, -0.016580f, 0.031319f, 0.025244f, 0.033357f, 0.016609f, -0.015184f, -0.026867f, -0.039493f, -0.042335f, -0.085821f, -0.033875f, 0.012650f, -0.004486f, 0.052277f, 0.000324f, -0.023906f, -0.007566f, -0.034230f, 0.013379f, 0.003898f, -0.002121f, -0.000555f, 0.022621f, 0.048917f, -0.005619f, 0.002307f, 0.027414f, 0.001812f, 0.000709f, -0.009988f, -0.002817f, -0.011844f, -0.010839f, 0.002733f, -0.022975f, 0.010178f, 0.013744f, -0.017430f, -0.025054f, 0.006775f, 0.005491f, -0.009515f, 0.025306f, 0.033186f, -0.004209f, 0.004729f, -0.010541f, -0.034141f, -0.013917f, 0.006779f, 0.006082f, -0.195394f, -0.097199f, -0.134222f, 0.096990f, 0.021305f, 0.277417f, 0.286484f, 0.285707f, 0.326220f, 0.321503f, 0.230788f, 0.143847f, 0.179994f, 0.079826f, 0.016704f, -0.151737f, -0.132313f, -0.331645f, -0.290229f, -0.260315f, -0.153541f, -0.193487f, -0.147633f, -0.011892f, -0.047193f, -0.018804f, -0.023301f, 0.001428f, -0.000379f, 0.009044f, 0.037840f, 0.040886f, 0.038800f, 0.114678f, 0.117440f, 0.124724f, 0.088937f, 0.249217f, 0.065120f, 0.104927f, 0.174319f, + 0.194568f, 0.072271f, 0.195818f, 0.235355f, 0.185821f, 0.161168f, 0.164099f, 0.018111f, 0.098382f, 0.198121f, 0.195985f, 0.126213f, 0.164532f, 0.143684f, -0.001616f, -0.053035f, -0.037083f, -0.097770f, -0.120451f, -0.015408f, -0.135407f, -0.206929f, -0.161007f, -0.192720f, -0.284856f, -0.130383f, -0.192477f, -0.213593f, -0.302341f, -0.245989f, -0.278780f, -0.318756f, -0.212094f, -0.360436f, -0.426215f, -0.427967f, -0.232584f, -0.289513f, -0.364707f, -0.071548f, -0.162173f, -0.076071f, -0.040512f, 0.119927f, 0.053721f, 0.175854f, 0.093709f, 0.166147f, 0.158377f, 0.104125f, 0.082340f, 0.128914f, 0.238694f, 0.242679f, 0.243713f, 0.248731f, 0.258623f, 0.313966f, 0.280704f, 0.232977f, 0.286579f, 0.323113f, 0.258502f, 0.194436f, 0.232116f, 0.195242f, 0.126431f, 0.159372f, 0.108075f, 0.053918f, 0.023609f, 0.049651f, 0.015032f, -0.019489f, -0.013208f, -0.025262f, -0.061349f, -0.093816f, -0.093195f, -0.101684f, -0.086753f, -0.108705f, -0.171382f, -0.154045f, -0.177099f, -0.199868f, -0.232947f, -0.232323f, -0.192232f, -0.193078f, -0.158048f, -0.100013f, -0.112886f, -0.076535f, -0.053526f, 0.007040f, + 0.000211f, 0.001619f, 0.010413f, 0.036047f, 0.041237f, 0.014830f, 0.032863f, 0.052094f, 0.041529f, 0.019348f, 0.021905f, 0.039229f, 0.023323f, 0.010966f, 0.016364f, 0.022964f, 0.020883f, 0.014628f, 0.017892f, 0.028909f, 0.027633f, 0.013066f, 0.004458f, 0.009660f, 0.017143f, 0.010275f, 0.000007f, 0.006952f, 0.012987f, 0.010179f, 0.004944f, 0.008867f, 0.009456f, 0.007365f, 0.006487f, 0.003255f, 0.002486f, 0.007259f, 0.005817f, 0.006354f, 0.002616f, -0.004037f, -0.005109f, 0.002919f, 0.006078f, -0.001314f, -0.004215f, 0.001150f, 0.000004f, 0.001228f, 0.003608f, 0.002539f, 0.004319f, 0.007850f, 0.007343f, 0.011681f, 0.015713f, 0.018287f, 0.014195f, 0.014487f, 0.015888f, 0.013289f, 0.009330f, 0.010641f, 0.012681f, 0.009806f, 0.004697f, 0.006119f, 0.003653f, 0.002847f, -0.000198f, -0.004843f, -0.004430f, -0.006181f, -0.012726f, -0.017688f, -0.017423f, -0.015275f, -0.019884f, -0.018705f, -0.017074f, -0.015290f, -0.014870f, -0.012298f, -0.009872f, -0.006708f, -0.005604f, -0.003461f, -0.002049f, -0.000519f, 0.000176f, 0.001575f, 0.001586f, 0.002877f, 0.001952f, 0.002304f, + 0.001442f, 0.002027f, 0.000909f, 0.001188f, 0.000244f, 0.000527f} + } +}; +const float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS][2885]={ {-0.000036f, -0.000011f, -0.000019f, -0.000013f, -0.000030f, -0.000006f, -0.000048f, -0.000013f, -0.000158f, 0.000107f, -0.000008f, 0.000108f, -0.000022f, 0.000046f, 0.000299f, -0.000037f, -0.000351f, -0.000354f, -0.000113f, -0.000220f, 0.000032f, -0.000180f, -0.000473f, 0.000130f, -0.000116f, -0.000091f, 0.000132f, 0.000034f, -0.000158f, -0.000261f, -0.000326f, 0.000037f, -0.000195f, -0.000130f, 0.000076f, -0.000361f, 0.000321f, 0.000322f, -0.000185f, -0.000033f, -0.000117f, -0.000344f, 0.000036f, -0.000314f, -0.000234f, 0.000223f, -0.000150f, 0.000483f, 0.002034f, -0.000891f, 0.000900f, -0.000388f, 0.000319f, -0.000018f, 0.000469f, -0.000211f, 0.000114f, 0.000197f, 0.000239f, 0.000254f, 0.000445f, -0.000116f, 0.000049f, 0.000816f, 0.000612f, -0.001621f, 0.000319f, -0.000213f, 0.000079f, -0.000556f, 0.000361f, -0.000699f, 0.000689f, 0.000567f, 0.000282f, -0.000096f, -0.000219f, -0.000261f, 0.000489f, 0.000445f, -0.000204f, 0.000096f, 0.000846f, -0.000323f, -0.000018f, -0.000295f, 0.000099f, 0.000124f, -0.000024f, -0.000246f, 0.000397f, 0.000054f, -0.000122f, 0.000295f, 0.008176f, -0.000604f, + 0.001128f, -0.000033f, 0.000349f, 0.000145f, 0.000264f, 0.000174f, 0.000772f, -0.000464f, 0.000318f, -0.000173f, 0.000123f, 0.000418f, 0.000659f, 0.000255f, 0.000118f, -0.000335f, 0.000599f, -0.000456f, 0.000221f, -0.000219f, -0.000656f, 0.000054f, 0.000212f, 0.000010f, -0.000213f, 0.000043f, -0.000237f, 0.000409f, -0.000881f, 0.000189f, -0.000213f, 0.000216f, -0.000020f, -0.001232f, -0.000434f, 0.000110f, 0.000181f, 0.000126f, -0.000223f, -0.000289f, -0.000249f, 0.000158f, 0.000461f, -0.000210f, 0.000197f, 0.004950f, -0.005827f, 0.001178f, -0.001392f, 0.000781f, -0.000898f, 0.000723f, -0.001232f, -0.000360f, -0.000756f, -0.000127f, -0.000628f, 0.000069f, 0.001158f, 0.001681f, 0.000710f, 0.000385f, 0.000041f, 0.000538f, 0.001203f, 0.000882f, -0.000533f, -0.000639f, -0.000862f, -0.000400f, -0.000494f, 0.000062f, -0.000071f, -0.000060f, 0.000034f, 0.000270f, -0.000396f, 0.000533f, -0.000524f, -0.000694f, 0.000269f, 0.000007f, 0.000062f, 0.000167f, -0.000485f, -0.000543f, 0.000179f, -0.000323f, -0.000451f, -0.000068f, 0.000073f, 0.000377f, -0.011298f, 0.002275f, -0.000551f, 0.000305f, + 0.000263f, -0.000929f, -0.000408f, 0.000919f, -0.000129f, 0.000096f, 0.001028f, 0.000346f, -0.000367f, -0.000684f, 0.000722f, 0.000081f, -0.000836f, -0.001203f, -0.001752f, 0.000590f, -0.000769f, 0.000202f, -0.000237f, 0.000351f, -0.000163f, 0.000145f, -0.000902f, -0.000887f, -0.000548f, -0.000222f, -0.000555f, 0.000191f, -0.000260f, 0.000343f, 0.001079f, 0.000204f, 0.000202f, 0.000723f, 0.000211f, 0.000184f, -0.000007f, -0.000117f, -0.000685f, -0.000145f, 0.000179f, -0.000109f, -0.000017f, -0.013514f, 0.005078f, -0.001249f, 0.001642f, -0.000779f, 0.001189f, -0.000632f, -0.000167f, -0.001139f, 0.000905f, -0.001351f, 0.000927f, -0.000220f, 0.001290f, -0.001714f, 0.000467f, 0.001625f, 0.000494f, -0.001344f, -0.000459f, -0.000804f, -0.000317f, 0.000528f, 0.000286f, 0.000394f, -0.000190f, -0.000449f, -0.000630f, -0.000625f, -0.000029f, -0.000719f, -0.000103f, -0.000668f, -0.000456f, -0.001878f, -0.000502f, -0.000254f, 0.000131f, 0.000055f, 0.000684f, 0.000292f, 0.000675f, -0.000056f, 0.000781f, 0.000189f, 0.000097f, 0.000197f, 0.001667f, 0.005870f, -0.001647f, 0.002592f, -0.001609f, 0.000662f, + -0.001734f, 0.001325f, -0.000146f, 0.001446f, -0.000140f, -0.000168f, 0.001420f, -0.000259f, -0.000223f, 0.001241f, -0.000640f, -0.001178f, -0.001870f, 0.001620f, -0.000157f, 0.001102f, 0.000107f, 0.000777f, 0.000362f, -0.001091f, 0.000432f, 0.000415f, -0.000097f, 0.000533f, 0.000820f, -0.001084f, 0.000116f, -0.000052f, -0.000116f, -0.000630f, -0.000300f, -0.000617f, 0.000138f, -0.000143f, 0.000437f, 0.001363f, 0.000028f, 0.000682f, -0.000151f, 0.000117f, -0.000174f, 0.000194f, 0.000533f, -0.000272f, -0.000524f, 0.017769f, -0.004406f, 0.001672f, -0.000869f, 0.001478f, -0.000674f, 0.001130f, -0.000659f, 0.000377f, -0.001752f, 0.000786f, -0.001674f, 0.001248f, -0.000526f, 0.000356f, -0.000502f, 0.001765f, 0.000224f, 0.000431f, -0.000877f, 0.001148f, -0.000126f, -0.000554f, 0.000970f, -0.000784f, -0.001216f, 0.000015f, -0.000395f, 0.000554f, -0.000028f, -0.000194f, -0.000412f, 0.000158f, -0.000062f, 0.000209f, -0.000845f, 0.000178f, -0.000386f, 0.001267f, -0.000263f, 0.000599f, 0.000092f, 0.000501f, 0.000936f, -0.000674f, 0.000027f, 0.000209f, -0.000351f, 0.000740f, -0.000180f, -0.000349f, + 0.001515f, -0.009212f, 0.003660f, -0.002832f, 0.001696f, -0.001403f, 0.000504f, -0.001854f, 0.001230f, -0.000732f, 0.001712f, -0.000175f, 0.000757f, -0.001477f, -0.000612f, -0.000083f, -0.000525f, -0.000493f, 0.001974f, -0.001428f, 0.000267f, 0.000924f, -0.001769f, 0.000473f, 0.000650f, -0.000436f, 0.000634f, 0.000218f, 0.000373f, -0.001126f, -0.000081f, -0.000353f, 0.000721f, -0.000555f, 0.000403f, -0.001331f, -0.000251f, 0.000994f, 0.000495f, 0.000323f, -0.000322f, -0.000191f, -0.001005f, -0.001080f, 0.000614f, 0.000231f, -0.000028f, -0.000150f, -0.000074f, 0.000107f, 0.000117f, -0.000219f, -0.000201f, 0.000144f, 0.000165f, -0.000365f, -0.000273f, -0.000224f, -0.014887f, 0.004915f, -0.002612f, 0.000707f, -0.000217f, 0.000863f, -0.001089f, 0.001237f, -0.000465f, -0.000390f, -0.000119f, 0.000904f, -0.000443f, -0.000668f, 0.000539f, 0.001711f, -0.000203f, 0.000101f, -0.002788f, 0.000273f, 0.000074f, 0.001405f, -0.000418f, -0.000180f, -0.002125f, -0.000706f, 0.000054f, 0.000073f, 0.000776f, 0.001061f, -0.001600f, -0.001461f, 0.000991f, 0.000275f, -0.001651f, -0.001255f, 0.000657f, 0.000397f, + -0.000073f, -0.000016f, -0.000618f, 0.000691f, -0.000177f, 0.000273f, 0.000111f, -0.000846f, -0.000346f, 0.000503f, -0.001333f, -0.000646f, -0.000247f, 0.000320f, -0.000249f, 0.000057f, -0.000654f, -0.000025f, -0.000468f, 0.000081f, -0.014869f, 0.006610f, -0.003621f, 0.002787f, -0.002521f, 0.001282f, -0.002872f, 0.000688f, -0.001866f, 0.002998f, -0.001487f, 0.001073f, -0.000166f, 0.000044f, -0.001346f, -0.000366f, -0.000546f, 0.002717f, -0.000495f, 0.001399f, 0.002200f, 0.001277f, 0.000339f, -0.000267f, 0.000540f, -0.000452f, 0.001238f, 0.001207f, 0.000184f, -0.000569f, 0.000224f, 0.000252f, -0.000799f, -0.000340f, 0.000633f, 0.000914f, -0.000655f, -0.000629f, -0.000665f, 0.000072f, -0.000268f, 0.000407f, -0.000642f, 0.000496f, -0.001017f, 0.000332f, -0.000552f, -0.000009f, 0.000118f, -0.000380f, -0.000548f, -0.000682f, -0.000657f, -0.000856f, 0.000122f, -0.000778f, -0.000388f, 0.000032f, 0.005495f, 0.005712f, -0.002160f, 0.001879f, -0.002367f, 0.000326f, 0.000673f, 0.000028f, -0.000968f, 0.001039f, 0.000239f, 0.002244f, 0.001152f, 0.002539f, -0.000429f, 0.001485f, -0.000448f, 0.000938f, + 0.001318f, -0.000213f, -0.001912f, 0.001759f, -0.000231f, 0.000722f, -0.000456f, -0.000032f, 0.000220f, 0.002159f, 0.000289f, -0.001218f, -0.000440f, 0.000260f, -0.000692f, 0.001622f, 0.000667f, -0.000286f, -0.000467f, -0.000963f, 0.000698f, -0.000944f, 0.000902f, 0.000959f, -0.000766f, 0.000539f, 0.000474f, 0.000236f, -0.000111f, 0.001576f, 0.000953f, 0.001147f, -0.000085f, 0.000116f, 0.000487f, -0.000367f, -0.000172f, -0.000134f, -0.000386f, -0.000033f, 0.000044f, 0.000122f, -0.000326f, -0.000689f, -0.000735f, 0.000127f, 0.000354f, 0.016778f, -0.006038f, 0.002051f, -0.002841f, 0.001880f, -0.001884f, 0.002426f, -0.000880f, 0.000082f, -0.001882f, 0.003661f, -0.000568f, 0.003295f, 0.000170f, 0.000538f, -0.002268f, 0.000765f, 0.003308f, -0.001060f, -0.002854f, 0.000385f, 0.000081f, 0.001276f, -0.002069f, 0.001634f, -0.000056f, 0.000116f, -0.000217f, -0.001989f, -0.000615f, 0.000298f, -0.002396f, 0.000363f, 0.000918f, 0.000760f, -0.000703f, -0.000215f, -0.000130f, 0.001078f, 0.000291f, -0.000215f, -0.000525f, 0.000835f, 0.000552f, 0.002112f, 0.000509f, -0.000343f, 0.001150f, 0.000454f, + -0.000167f, 0.000371f, 0.000862f, 0.000574f, 0.000080f, 0.000120f, -0.000739f, 0.000127f, -0.000114f, 0.000863f, -0.000138f, 0.000328f, -0.000144f, 0.000293f, -0.000065f, 0.000271f, 0.005644f, -0.008118f, 0.004887f, -0.003602f, 0.001536f, 0.000563f, -0.000353f, -0.000294f, 0.000984f, -0.002034f, -0.001286f, -0.001048f, -0.000809f, -0.002787f, 0.001435f, -0.002588f, -0.000087f, -0.002069f, 0.000782f, -0.001555f, -0.001216f, -0.000613f, 0.002383f, 0.000342f, 0.002320f, 0.001219f, 0.001596f, 0.002288f, 0.000138f, -0.000280f, -0.000329f, 0.000651f, 0.001771f, -0.000138f, -0.000107f, -0.001161f, 0.000910f, -0.000135f, -0.000677f, 0.000656f, 0.000562f, 0.001835f, 0.000768f, 0.000868f, -0.001272f, -0.000597f, -0.000052f, -0.000235f, 0.000915f, -0.002611f, 0.000589f, -0.000638f, -0.000417f, -0.000807f, -0.000894f, -0.000306f, -0.000883f, 0.000373f, -0.000610f, -0.000101f, -0.001354f, -0.001353f, 0.000026f, -0.000480f, 0.001130f, -0.017232f, -0.003745f, 0.000817f, -0.003247f, -0.001327f, 0.000166f, -0.000078f, -0.002763f, 0.000824f, -0.002751f, 0.000106f, 0.002262f, -0.000393f, -0.000345f, 0.001251f, + 0.000832f, 0.001273f, 0.000101f, 0.001535f, -0.000810f, 0.000452f, 0.001781f, -0.000097f, -0.000082f, -0.001127f, 0.001697f, -0.001271f, -0.000681f, 0.000459f, 0.000705f, 0.001295f, 0.003961f, -0.001056f, -0.000610f, -0.001673f, 0.000126f, -0.001227f, 0.000329f, -0.000478f, -0.001819f, -0.000095f, 0.002397f, 0.000686f, -0.001565f, -0.000774f, 0.000817f, -0.000948f, -0.001178f, 0.000246f, -0.000539f, 0.000158f, 0.000282f, 0.001509f, 0.000245f, 0.000750f, 0.000425f, -0.001236f, -0.000610f, 0.000804f, 0.000770f, -0.000488f, 0.000473f, -0.000082f, -0.000547f, 0.000032f, -0.021153f, 0.017462f, -0.006102f, 0.005190f, -0.003822f, 0.002924f, -0.001109f, 0.001864f, -0.002028f, 0.001251f, 0.001456f, 0.002110f, -0.001372f, 0.002554f, 0.001261f, 0.004343f, -0.000681f, 0.000370f, -0.002299f, 0.000587f, -0.000808f, -0.001430f, -0.001782f, -0.002042f, -0.001888f, 0.002820f, -0.000130f, 0.003384f, 0.000874f, 0.000626f, -0.000060f, 0.000437f, -0.001495f, 0.000247f, -0.000548f, 0.000711f, 0.001997f, 0.000367f, 0.000655f, 0.000127f, 0.000204f, -0.001513f, -0.000839f, -0.000050f, -0.000122f, 0.000213f, + -0.000470f, -0.001392f, 0.000027f, 0.001514f, -0.000491f, 0.000454f, 0.000431f, -0.001232f, 0.000847f, 0.000378f, 0.000462f, -0.000245f, 0.000134f, -0.000124f, -0.000396f, 0.000122f, 0.001343f, 0.000024f, 0.000079f, 0.012301f, -0.001922f, -0.004003f, -0.001407f, -0.000864f, -0.000665f, -0.003529f, -0.001866f, 0.000951f, 0.000576f, 0.000974f, 0.001222f, -0.002380f, 0.000926f, -0.000488f, 0.000822f, 0.003752f, -0.003842f, 0.001294f, 0.001298f, 0.001003f, -0.001009f, -0.002234f, 0.001699f, 0.000488f, 0.001210f, 0.002303f, -0.000019f, 0.003183f, 0.000257f, 0.001467f, 0.000105f, 0.000987f, -0.000902f, 0.001189f, 0.000855f, 0.001134f, -0.000467f, 0.000361f, -0.000112f, 0.001461f, 0.001812f, -0.002738f, 0.003641f, 0.000288f, 0.001003f, 0.000138f, 0.000618f, 0.000688f, -0.000791f, 0.002174f, 0.001166f, 0.000063f, 0.001992f, 0.000834f, -0.001125f, -0.000113f, -0.000759f, -0.000818f, -0.000620f, 0.000344f, -0.000175f, 0.000104f, -0.000067f, -0.002265f, 0.001138f, -0.000910f, 0.000299f, -0.000322f, -0.000149f, -0.000576f, -0.000337f, 0.009748f, 0.000833f, 0.001970f, -0.002549f, -0.000499f, + -0.006301f, 0.001482f, -0.000323f, -0.004287f, 0.003556f, -0.001994f, 0.000105f, 0.002607f, 0.001158f, 0.001953f, -0.001534f, 0.000853f, -0.002003f, 0.000021f, -0.001717f, 0.000617f, -0.002598f, 0.003673f, 0.002638f, 0.002163f, 0.002514f, 0.000549f, -0.000865f, -0.001610f, 0.000693f, 0.002011f, -0.000020f, 0.001366f, -0.001024f, 0.000266f, 0.001316f, 0.000934f, 0.001182f, 0.000073f, 0.000407f, -0.000165f, -0.000888f, 0.000844f, -0.000623f, 0.000388f, 0.000325f, -0.000893f, 0.001173f, -0.001639f, 0.001427f, -0.000775f, 0.001001f, 0.001558f, -0.001944f, 0.000181f, 0.000195f, -0.000794f, -0.001538f, 0.001057f, -0.002477f, -0.001903f, 0.001147f, 0.000485f, 0.000519f, 0.000465f, 0.001495f, 0.001457f, -0.000560f, 0.000197f, 0.000861f, -0.000362f, -0.000037f, 0.015421f, -0.012801f, 0.004358f, -0.003178f, 0.001139f, 0.004014f, 0.003267f, -0.002137f, 0.003915f, 0.002208f, 0.002371f, -0.001606f, 0.001111f, -0.000815f, 0.004647f, 0.001297f, 0.001323f, 0.001803f, 0.001976f, 0.001252f, 0.001355f, -0.003799f, 0.000624f, -0.006873f, -0.002380f, -0.000631f, -0.003928f, 0.000998f, 0.002129f, + -0.001479f, -0.002124f, -0.002508f, -0.002400f, -0.001281f, 0.001403f, 0.001102f, -0.003489f, -0.004048f, -0.000296f, -0.002062f, 0.001122f, 0.000906f, 0.000402f, -0.000284f, 0.001935f, -0.001002f, 0.000114f, -0.000262f, -0.000843f, -0.002599f, 0.002035f, 0.003432f, -0.000446f, -0.000425f, 0.001628f, -0.002411f, 0.002950f, 0.000760f, -0.001468f, -0.000051f, -0.001362f, -0.000578f, -0.000331f, -0.000984f, -0.000245f, -0.000664f, -0.002002f, 0.000529f, 0.000745f, 0.000685f, 0.000739f, 0.000234f, -0.023798f, 0.002420f, -0.002076f, 0.000928f, 0.002482f, 0.001797f, 0.004917f, -0.001948f, -0.000118f, 0.000444f, 0.005875f, 0.002074f, -0.004512f, -0.002929f, 0.002620f, 0.003497f, -0.000815f, -0.001251f, -0.000046f, 0.001640f, 0.003610f, 0.003669f, -0.000003f, -0.006426f, -0.001824f, -0.000619f, -0.000729f, 0.003808f, -0.001678f, 0.002244f, 0.000264f, -0.000362f, -0.003313f, 0.000315f, 0.002724f, -0.004250f, -0.002473f, -0.000962f, -0.000706f, -0.001990f, -0.001657f, -0.003970f, -0.000696f, -0.002677f, 0.000071f, 0.000637f, 0.002942f, -0.001928f, -0.001256f, 0.000296f, -0.000247f, 0.000498f, -0.002453f, + 0.001026f, 0.000992f, 0.000359f, 0.000184f, -0.001842f, -0.001671f, -0.000908f, -0.000496f, -0.000103f, -0.003186f, 0.000702f, 0.000983f, -0.001348f, -0.002925f, 0.001232f, -0.000103f, -0.001442f, -0.000253f, -0.000647f, -0.000455f, 0.001922f, -0.014046f, 0.014828f, -0.002163f, 0.000902f, 0.003463f, 0.004164f, -0.003205f, 0.001986f, 0.000758f, 0.002559f, 0.001716f, 0.003628f, 0.002027f, -0.002514f, -0.004164f, 0.000553f, 0.004318f, 0.008680f, -0.002150f, -0.002991f, 0.002236f, 0.001384f, -0.001712f, -0.004323f, -0.000922f, -0.000893f, -0.003932f, 0.003371f, 0.004001f, 0.000035f, 0.000892f, -0.000109f, 0.003134f, -0.002513f, -0.007753f, 0.003221f, -0.000977f, 0.002551f, 0.001181f, 0.000084f, -0.001961f, -0.002985f, 0.001996f, 0.002403f, 0.001716f, -0.000368f, -0.000215f, 0.002646f, 0.001442f, 0.000801f, -0.001647f, 0.002225f, 0.001818f, -0.000331f, -0.000642f, -0.001323f, 0.001480f, 0.000031f, -0.003861f, 0.003109f, 0.001811f, -0.000726f, 0.000836f, -0.000490f, 0.000040f, -0.000089f, 0.000865f, 0.000230f, 0.001077f, 0.001830f, 0.000922f, -0.000295f, -0.001182f, -0.000751f, 0.002633f, + 0.001034f, -0.000526f, -0.000839f, -0.000156f, 0.004163f, 0.000150f, -0.003249f, -0.006626f, 0.001572f, -0.000366f, -0.005476f, 0.001821f, -0.001831f, 0.000235f, -0.002091f, -0.001628f, 0.001690f, 0.004129f, 0.000484f, 0.005477f, 0.002466f, -0.002784f, -0.003664f, 0.005996f, -0.002637f, -0.000210f, 0.000509f, -0.005661f, -0.000073f, 0.002970f, -0.003306f, -0.000885f, 0.003749f, 0.000224f, 0.001943f, 0.000044f, 0.002457f, -0.000435f, -0.001721f, -0.000240f, 0.003272f, 0.004449f, -0.001496f, 0.000893f, 0.000742f, 0.002964f, -0.001806f, -0.000323f, 0.000545f, -0.000764f, 0.001896f, 0.000862f, 0.000124f, -0.001024f, 0.001508f, 0.001707f, 0.000053f, 0.000075f, 0.001248f, 0.001999f, -0.002450f, -0.000017f, 0.000635f, 0.001095f, -0.001274f, 0.000992f, 0.000456f, 0.000028f, 0.000660f, -0.000769f, 0.000296f, 0.000793f, 0.001626f, 0.002008f, -0.001665f, 0.000179f, 0.031211f, -0.003055f, 0.000472f, 0.001899f, -0.002852f, -0.004895f, -0.002864f, -0.001255f, -0.005558f, -0.005969f, 0.000409f, -0.005293f, -0.002349f, -0.001564f, -0.001334f, 0.003173f, 0.003714f, 0.001139f, 0.007822f, 0.001377f, + -0.003935f, 0.006724f, -0.000719f, 0.004747f, -0.001573f, -0.000554f, -0.004500f, 0.000118f, 0.003911f, -0.000186f, -0.001961f, -0.000816f, 0.000367f, -0.001042f, -0.000871f, 0.001472f, -0.003589f, 0.001388f, 0.000498f, -0.001738f, -0.003405f, -0.002340f, 0.002565f, 0.002505f, 0.003020f, -0.005208f, 0.002862f, 0.000739f, -0.000154f, 0.000177f, 0.000481f, 0.000511f, 0.000639f, -0.000497f, 0.000246f, 0.002665f, -0.000796f, 0.001012f, 0.001250f, -0.001195f, 0.002234f, 0.002528f, 0.000407f, -0.000293f, 0.002366f, 0.001643f, 0.001296f, 0.001547f, -0.002034f, -0.000995f, 0.000441f, -0.000287f, -0.000321f, 0.000067f, 0.001047f, 0.000220f, -0.001971f, -0.018325f, -0.030764f, 0.011182f, -0.000751f, 0.004671f, -0.005360f, 0.000288f, -0.006214f, -0.000776f, -0.008974f, 0.003924f, 0.004180f, -0.000167f, -0.000675f, -0.000078f, 0.000864f, -0.002120f, -0.007649f, 0.014165f, 0.001004f, -0.001777f, 0.004869f, 0.000895f, -0.002532f, 0.006819f, 0.007561f, -0.003205f, 0.004469f, 0.000899f, -0.000941f, -0.007036f, -0.003852f, 0.005560f, -0.002824f, 0.000815f, -0.000364f, 0.003792f, -0.005750f, -0.006448f, + 0.000933f, 0.000130f, -0.004368f, 0.002681f, 0.000552f, -0.002700f, 0.001948f, -0.002978f, -0.002499f, 0.001231f, 0.001161f, 0.000194f, -0.000798f, -0.001386f, 0.001805f, 0.003056f, 0.000448f, 0.000985f, -0.000862f, -0.000834f, 0.002645f, 0.000350f, 0.000596f, -0.002656f, -0.000617f, -0.001762f, 0.001487f, 0.002240f, 0.000022f, 0.001850f, -0.000025f, 0.002454f, -0.001957f, 0.001248f, -0.000029f, -0.000083f, -0.001850f, 0.000013f, -0.001587f, -0.000177f, -0.009875f, 0.029792f, -0.013192f, 0.002260f, 0.001976f, 0.007496f, -0.000919f, 0.004799f, -0.004681f, 0.000326f, -0.009002f, -0.001691f, 0.000071f, 0.003676f, 0.000629f, 0.003785f, -0.002564f, -0.005443f, 0.000733f, -0.008207f, -0.008668f, 0.000295f, -0.002833f, -0.000116f, 0.000765f, 0.001291f, -0.002134f, -0.001395f, -0.003082f, -0.004657f, 0.001914f, 0.002329f, -0.006107f, -0.002723f, -0.007683f, 0.000174f, -0.003384f, 0.002822f, 0.003256f, -0.006291f, 0.001018f, 0.005294f, 0.004731f, -0.002387f, 0.001733f, -0.001747f, -0.000881f, 0.001537f, -0.002858f, -0.000555f, 0.002688f, 0.002151f, 0.001846f, 0.002311f, 0.001213f, -0.000602f, + 0.001777f, 0.001231f, -0.001311f, -0.000000f, 0.003612f, -0.000309f, -0.001650f, -0.000457f, 0.001494f, -0.001472f, -0.003678f, -0.000195f, -0.001281f, 0.001015f, 0.000789f, -0.000464f, -0.001489f, -0.002146f, -0.002595f, 0.002708f, -0.000879f, -0.000028f, -0.000581f, -0.000110f, -0.000324f, -0.024509f, -0.007538f, 0.002846f, -0.003808f, 0.003586f, -0.001543f, 0.000112f, -0.007168f, -0.008630f, -0.001103f, -0.002971f, 0.003725f, 0.001115f, -0.000979f, -0.017920f, 0.009114f, 0.000717f, 0.007953f, 0.009866f, 0.006854f, -0.009334f, -0.002215f, -0.000837f, -0.002268f, 0.002104f, 0.002315f, -0.000088f, -0.003345f, 0.003880f, -0.006281f, -0.003329f, 0.005733f, 0.000364f, -0.002349f, 0.006683f, 0.000233f, 0.007007f, -0.002312f, -0.001037f, 0.000911f, 0.002244f, -0.004879f, -0.003595f, -0.000787f, 0.003978f, -0.001335f, 0.000705f, -0.001476f, 0.002681f, 0.003364f, 0.000706f, 0.000264f, -0.005690f, -0.000510f, 0.002889f, 0.003251f, -0.001734f, 0.003632f, 0.001235f, -0.000887f, 0.000993f, -0.003504f, -0.001056f, -0.002314f, 0.002441f, 0.000466f, -0.000774f, 0.000951f, -0.006077f, 0.000134f, 0.001239f, + 0.003038f, 0.001038f, -0.001514f, 0.002913f, 0.000367f, -0.003805f, -0.001664f, -0.001919f, -0.000448f, 0.000883f, 0.015647f, 0.005219f, -0.009558f, -0.001705f, -0.004170f, 0.003209f, -0.005807f, 0.004692f, -0.001159f, 0.005472f, 0.003765f, 0.006662f, -0.009167f, 0.010824f, -0.006788f, 0.006305f, -0.003759f, 0.003754f, 0.000620f, 0.003179f, -0.005902f, -0.013369f, 0.005064f, 0.009204f, -0.003463f, 0.003745f, -0.004814f, 0.001057f, -0.003197f, 0.009685f, -0.000195f, -0.001012f, 0.002221f, -0.004778f, -0.003395f, -0.002819f, 0.004168f, -0.000002f, -0.001679f, -0.000040f, -0.000948f, 0.006644f, 0.004378f, -0.002544f, 0.002061f, 0.002503f, -0.002885f, -0.001651f, -0.002610f, -0.005108f, -0.000807f, 0.000064f, -0.000796f, -0.001903f, -0.005251f, -0.000251f, 0.007740f, 0.004221f, -0.003392f, 0.004344f, -0.000583f, -0.000114f, 0.003565f, 0.001884f, -0.003859f, 0.001376f, 0.000720f, 0.003830f, 0.004518f, -0.003718f, 0.001554f, 0.002669f, 0.003421f, -0.000349f, -0.000222f, -0.001308f, -0.000767f, 0.001953f, -0.000446f, 0.003580f, -0.000935f, 0.033353f, -0.027169f, -0.004544f, 0.001372f, -0.000509f, + -0.007502f, 0.002537f, 0.001977f, 0.010663f, -0.003476f, 0.002110f, 0.008757f, 0.000254f, 0.005269f, 0.017313f, -0.003752f, -0.001108f, -0.008996f, -0.008399f, 0.000391f, 0.002881f, -0.003794f, 0.001661f, 0.015251f, 0.008842f, 0.001269f, 0.000598f, 0.001243f, 0.008462f, -0.007040f, -0.003091f, -0.000390f, 0.004377f, -0.000676f, 0.001071f, -0.003572f, 0.001374f, -0.006345f, -0.003705f, -0.004798f, 0.000105f, -0.004298f, 0.001056f, -0.007654f, 0.003559f, -0.015292f, -0.003884f, 0.002094f, 0.002854f, -0.000576f, -0.003494f, 0.001179f, 0.000483f, 0.001828f, -0.004150f, 0.001856f, -0.002416f, -0.002771f, -0.006714f, -0.005035f, -0.001450f, -0.000848f, 0.000366f, 0.001138f, 0.002198f, 0.000404f, 0.001069f, -0.004035f, 0.000008f, -0.004924f, -0.000704f, -0.000348f, 0.000168f, 0.001626f, 0.004944f, -0.003080f, -0.001331f, -0.000335f, -0.002579f, -0.004547f, 0.001053f, -0.021004f, -0.014597f, -0.001011f, -0.002897f, 0.011125f, 0.000437f, 0.002118f, -0.013758f, 0.000791f, 0.001976f, 0.000868f, 0.001142f, 0.008421f, -0.010326f, 0.002275f, -0.002145f, -0.007096f, -0.003401f, 0.006689f, -0.002239f, + 0.005458f, -0.001763f, 0.003192f, 0.001768f, -0.001045f, -0.000742f, 0.003604f, -0.000399f, 0.000015f, -0.008827f, 0.004472f, 0.004069f, 0.003835f, 0.004421f, -0.007933f, -0.008163f, 0.004861f, 0.007230f, -0.008536f, 0.003247f, 0.001292f, 0.007509f, 0.004331f, 0.000795f, 0.005050f, -0.002548f, -0.005134f, -0.000700f, -0.009949f, -0.007222f, -0.000768f, -0.000287f, 0.001632f, -0.004687f, 0.001704f, -0.003742f, -0.012769f, -0.003673f, -0.003417f, -0.012555f, 0.000057f, -0.001980f, -0.001443f, 0.001529f, 0.003968f, -0.003634f, 0.002458f, 0.001693f, -0.005679f, -0.003561f, -0.004359f, -0.000850f, -0.001273f, -0.000030f, -0.001786f, 0.002511f, -0.002752f, -0.000619f, -0.002336f, 0.004242f, -0.004574f, 0.002831f, -0.000706f, -0.000927f, 0.000270f, 0.001262f, -0.001062f, -0.013116f, 0.020068f, -0.010479f, -0.004445f, -0.006116f, 0.001628f, 0.001755f, 0.002998f, -0.001239f, 0.008790f, 0.006621f, -0.006229f, -0.011118f, 0.004225f, -0.004157f, 0.010308f, 0.000868f, 0.004434f, 0.005409f, -0.003824f, -0.003743f, 0.013683f, -0.007786f, -0.001823f, -0.003944f, 0.000541f, -0.001615f, 0.001874f, -0.002289f, + -0.000840f, -0.010493f, 0.009342f, -0.003222f, -0.000756f, 0.010988f, -0.007445f, -0.009462f, 0.000932f, -0.004286f, -0.006160f, -0.000026f, -0.003120f, 0.002499f, -0.013596f, -0.004531f, -0.003278f, -0.000313f, 0.004896f, 0.000076f, 0.001041f, 0.002506f, -0.002264f, 0.001917f, 0.003302f, 0.002794f, 0.003138f, -0.001737f, -0.002814f, -0.002521f, 0.003559f, -0.008263f, -0.001722f, -0.001938f, -0.001957f, 0.005424f, -0.003578f, -0.005780f, 0.005957f, 0.001798f, 0.003623f, 0.006967f, -0.002460f, -0.002313f, 0.003530f, -0.003752f, -0.004666f, -0.004378f, 0.002703f, 0.002004f, -0.002491f, 0.002406f, 0.000897f, 0.002836f, 0.000605f, -0.005224f, 0.003598f, -0.001734f, -0.027456f, 0.013827f, 0.014891f, 0.007660f, 0.006959f, -0.004862f, 0.007072f, -0.011827f, 0.000447f, -0.013906f, -0.001782f, -0.006037f, 0.006540f, -0.006619f, -0.005493f, -0.001458f, -0.010194f, 0.003069f, -0.004635f, 0.004584f, -0.009569f, 0.016094f, -0.005227f, 0.007635f, -0.006543f, 0.000705f, -0.006556f, -0.002052f, 0.003671f, 0.010327f, 0.011553f, -0.005711f, 0.000079f, -0.003350f, -0.006049f, -0.004586f, -0.016413f, -0.000339f, + 0.002787f, -0.015416f, 0.006064f, 0.003105f, 0.004267f, 0.007458f, 0.004696f, 0.002537f, -0.005170f, -0.001646f, -0.005770f, -0.002890f, 0.003127f, -0.012319f, 0.004903f, 0.002475f, 0.000815f, -0.005794f, -0.003427f, 0.003230f, 0.009995f, 0.004248f, 0.002600f, -0.003882f, 0.004179f, 0.000629f, -0.004716f, 0.001326f, -0.003407f, -0.005349f, -0.002797f, -0.001226f, -0.004876f, 0.005616f, 0.003169f, 0.004580f, 0.002530f, -0.004025f, 0.001354f, 0.007005f, -0.001364f, 0.006510f, 0.003439f, 0.002437f, 0.004364f, -0.002228f, -0.002603f, 0.001730f, 0.001140f, 0.022886f, -0.015598f, -0.006494f, -0.001913f, 0.000004f, 0.011184f, -0.002028f, 0.003715f, -0.006327f, 0.003518f, -0.003907f, -0.017942f, -0.012320f, -0.004539f, 0.006526f, -0.000695f, -0.009893f, -0.009259f, -0.019590f, -0.006267f, 0.002577f, 0.002734f, 0.000969f, -0.001949f, -0.001100f, -0.006019f, 0.001653f, 0.002633f, 0.003395f, 0.000840f, -0.000844f, -0.002281f, -0.009321f, -0.002317f, -0.002079f, 0.004790f, -0.000930f, -0.007408f, -0.002889f, 0.002239f, -0.008356f, 0.001514f, -0.008620f, 0.004899f, 0.006824f, -0.006368f, -0.012498f, + -0.002356f, -0.003900f, -0.005675f, 0.000648f, 0.001205f, 0.001279f, 0.003149f, 0.000200f, -0.004858f, 0.007908f, 0.012286f, -0.005855f, 0.005134f, 0.002084f, 0.005856f, -0.008812f, 0.003404f, 0.001159f, 0.003222f, -0.012694f, 0.010128f, 0.001254f, 0.001196f, -0.001517f, -0.007210f, 0.001922f, 0.000981f, 0.001814f, 0.002280f, -0.007904f, -0.004133f, 0.001593f, 0.003783f, -0.001980f, 0.000049f, 0.002975f, 0.001223f, -0.001405f, -0.003749f, 0.002777f, 0.037062f, -0.020719f, 0.001890f, -0.002088f, -0.004422f, -0.015461f, -0.000842f, -0.000862f, 0.012568f, 0.005744f, 0.025398f, -0.010111f, 0.000967f, 0.002773f, 0.006075f, -0.002606f, -0.001185f, 0.010294f, -0.006479f, 0.014819f, 0.008975f, -0.020613f, 0.019628f, 0.006918f, -0.007104f, -0.005126f, -0.007749f, -0.004039f, 0.001392f, 0.000896f, -0.005578f, 0.013046f, 0.001652f, -0.006261f, -0.005561f, 0.001267f, -0.006880f, -0.012119f, 0.000091f, 0.007224f, 0.002849f, 0.008787f, -0.004114f, 0.002730f, 0.009388f, 0.013544f, 0.003163f, -0.014027f, 0.004567f, -0.004518f, -0.007768f, 0.002039f, 0.005891f, 0.003407f, -0.001755f, -0.012729f, + -0.011188f, 0.015698f, -0.002121f, 0.012132f, 0.001340f, -0.004779f, 0.005895f, -0.010520f, -0.004715f, 0.005076f, -0.001417f, 0.010439f, -0.008450f, -0.016616f, -0.004730f, -0.000810f, -0.005172f, -0.003979f, 0.010271f, -0.003454f, 0.001830f, -0.009484f, -0.009343f, 0.004544f, 0.002305f, 0.003830f, -0.004116f, 0.003911f, 0.000318f, -0.002204f, -0.000562f, -0.041733f, -0.027091f, 0.010055f, -0.014039f, 0.004588f, -0.006976f, -0.025220f, -0.018643f, 0.033855f, -0.015468f, 0.015331f, 0.008691f, -0.008742f, 0.007943f, -0.004928f, 0.010708f, 0.011865f, -0.000688f, -0.003269f, 0.020313f, -0.006502f, -0.022801f, 0.000451f, -0.009509f, 0.002412f, 0.002234f, 0.013773f, 0.007328f, 0.002927f, 0.006773f, -0.006085f, 0.000067f, 0.015075f, 0.009654f, -0.002627f, 0.003927f, -0.013167f, -0.020413f, -0.015015f, -0.010492f, -0.002883f, -0.002853f, 0.003869f, -0.001851f, -0.005626f, 0.013183f, 0.003531f, -0.009809f, -0.009151f, -0.002604f, 0.003894f, -0.009885f, 0.004051f, 0.012300f, -0.000168f, 0.004640f, -0.008334f, 0.006582f, 0.004832f, 0.001558f, 0.004927f, -0.007353f, -0.011364f, -0.016064f, 0.008171f, + 0.006394f, 0.000635f, 0.006345f, 0.001272f, -0.007348f, -0.001477f, 0.000608f, -0.012807f, -0.001130f, -0.019940f, -0.010965f, 0.003425f, -0.005073f, 0.003921f, 0.000512f, -0.002567f, -0.002695f, -0.001802f, -0.003692f, 0.003632f, 0.000136f, -0.000511f, -0.049908f, 0.017115f, -0.003898f, -0.003197f, 0.009008f, 0.002276f, 0.005056f, 0.021864f, 0.013072f, 0.016535f, 0.008344f, 0.022549f, -0.003878f, -0.021787f, 0.003292f, -0.002368f, -0.009311f, -0.019288f, -0.008393f, 0.017039f, 0.003903f, -0.001077f, 0.003594f, -0.001194f, 0.000295f, 0.014379f, 0.001868f, 0.005398f, -0.002108f, 0.003635f, 0.014277f, -0.003833f, -0.009521f, 0.007333f, -0.016948f, -0.016970f, -0.010934f, -0.002054f, 0.000513f, 0.007183f, 0.016712f, 0.000367f, -0.005716f, -0.016508f, -0.027197f, -0.009470f, -0.003940f, -0.001512f, -0.000151f, 0.010169f, -0.012451f, 0.022598f, 0.011708f, -0.002014f, 0.006494f, -0.008728f, 0.001635f, 0.000312f, 0.010420f, 0.020215f, 0.013568f, -0.011687f, -0.004950f, 0.003497f, -0.001891f, -0.002377f, 0.001049f, -0.005960f, -0.019449f, -0.001325f, -0.003580f, -0.001244f, 0.003058f, -0.007423f, + -0.002552f, -0.013120f, -0.001408f, 0.002029f, 0.013911f, 0.006993f, 0.001953f, 0.002417f, 0.003513f, 0.000614f, -0.011774f, 0.002608f, -0.002746f, 0.003329f, -0.001441f, -0.001360f, -0.006452f, 0.020193f, 0.020442f, 0.006855f, 0.013634f, 0.009800f, 0.021458f, -0.019114f, 0.022315f, -0.027523f, -0.004938f, 0.025491f, 0.035005f, 0.007208f, -0.002355f, 0.012669f, -0.010919f, -0.012708f, 0.025292f, 0.003981f, -0.004035f, 0.006072f, 0.020312f, -0.005488f, 0.012414f, -0.004221f, -0.005234f, -0.002567f, 0.009107f, -0.023779f, -0.003000f, 0.011380f, -0.005361f, 0.001091f, -0.008483f, 0.004792f, 0.018630f, -0.017403f, 0.005477f, -0.005239f, 0.006022f, -0.009158f, 0.012486f, 0.000955f, 0.004449f, 0.004988f, -0.021053f, 0.010124f, -0.029272f, -0.006056f, 0.016444f, 0.001666f, -0.010513f, 0.018156f, -0.006397f, -0.011142f, 0.013171f, -0.005575f, -0.003874f, -0.002215f, 0.007925f, -0.001327f, 0.002033f, -0.016057f, 0.005711f, 0.001349f, 0.031084f, -0.023560f, -0.010286f, 0.002652f, -0.006104f, 0.006897f, 0.008714f, -0.011407f, 0.021721f, 0.008015f, -0.000169f, 0.003437f, 0.007232f, -0.003679f, + -0.011886f, 0.004519f, -0.006163f, 0.001800f, -0.002470f, 0.005530f, -0.007556f, 0.002130f, 0.000013f, -0.004133f, 0.004953f, -0.001912f, 0.041689f, -0.026158f, 0.000957f, -0.004240f, -0.007018f, 0.000794f, -0.009584f, -0.004098f, -0.030923f, -0.025914f, -0.025781f, 0.008548f, -0.005407f, 0.008444f, -0.005914f, -0.018792f, 0.029824f, 0.020723f, -0.013898f, -0.011733f, -0.016400f, -0.003515f, 0.006368f, 0.009757f, 0.012060f, -0.000950f, 0.009332f, -0.002790f, -0.011826f, -0.014516f, 0.008994f, -0.006671f, 0.027247f, 0.016967f, 0.025133f, 0.003424f, 0.009135f, 0.024642f, 0.017158f, -0.005556f, 0.004520f, -0.001229f, 0.000310f, 0.002495f, -0.011537f, -0.008441f, 0.004453f, -0.014569f, -0.014861f, 0.014258f, 0.016386f, -0.018096f, -0.000576f, 0.031751f, 0.022235f, -0.001290f, -0.010526f, -0.002475f, 0.006631f, 0.005839f, -0.004290f, -0.012039f, 0.014284f, -0.001120f, 0.003524f, 0.010044f, 0.012997f, -0.013740f, 0.005865f, -0.002398f, 0.005430f, -0.021271f, 0.003945f, 0.018864f, -0.018914f, -0.015761f, -0.008028f, 0.008271f, 0.015082f, -0.008681f, 0.008326f, -0.007513f, -0.000684f, 0.000237f, + 0.003196f, 0.005426f, -0.002558f, -0.001368f, 0.003489f, 0.002950f, 0.000113f, -0.000641f, 0.002548f, 0.033810f, 0.013011f, -0.004524f, -0.001100f, 0.010600f, -0.012669f, -0.016472f, 0.014113f, -0.019678f, -0.025479f, 0.006763f, -0.013676f, -0.017623f, -0.009198f, 0.016827f, 0.041281f, 0.017085f, -0.022474f, 0.042285f, 0.004904f, -0.006629f, 0.007617f, -0.024693f, 0.006278f, 0.003411f, -0.017703f, 0.015310f, -0.004763f, 0.003022f, -0.012747f, 0.007160f, -0.011649f, 0.021401f, -0.025347f, -0.009334f, -0.008758f, 0.012075f, 0.013933f, 0.012418f, -0.013472f, 0.003940f, -0.014084f, -0.004041f, 0.007505f, 0.017889f, 0.008257f, -0.008216f, 0.017423f, 0.008889f, 0.014055f, 0.000945f, 0.016384f, -0.007163f, 0.009059f, -0.024941f, 0.028026f, -0.002429f, 0.003903f, -0.007427f, -0.014611f, 0.000753f, 0.009362f, 0.022393f, 0.006584f, -0.026771f, 0.011420f, -0.010826f, 0.022060f, 0.001916f, -0.008420f, 0.004284f, -0.007281f, 0.004610f, -0.015591f, 0.006247f, 0.001489f, 0.001376f, 0.002499f, -0.003035f, 0.001611f, -0.004181f, -0.006533f, 0.008755f, 0.005479f, 0.005058f, -0.011558f, 0.003836f, + -0.006268f, 0.005424f, 0.001218f, -0.000688f, 0.002708f, 0.001325f, -0.069347f, 0.002961f, 0.011498f, 0.027122f, 0.008851f, -0.042694f, 0.056661f, 0.020721f, -0.026081f, 0.009265f, 0.056356f, 0.012603f, -0.013802f, -0.001789f, -0.034297f, 0.017496f, 0.001538f, -0.008824f, 0.004838f, 0.011635f, -0.022271f, 0.011783f, -0.027885f, 0.002862f, -0.025422f, -0.022849f, -0.009782f, 0.010636f, 0.016208f, -0.012525f, 0.014165f, -0.024775f, -0.003633f, 0.027675f, 0.002483f, -0.010078f, -0.003341f, 0.005352f, -0.006507f, -0.018390f, -0.020526f, -0.002775f, -0.009465f, 0.019977f, -0.028215f, 0.029743f, 0.009417f, 0.003758f, -0.010058f, -0.003329f, 0.013713f, -0.011222f, 0.018527f, 0.004566f, 0.016740f, -0.006253f, -0.009835f, -0.029504f, 0.009990f, -0.003019f, -0.030442f, 0.009069f, -0.002134f, 0.018442f, 0.029681f, -0.012615f, 0.006678f, 0.014639f, 0.015567f, 0.003169f, -0.009173f, -0.001814f, -0.036851f, -0.001834f, 0.003262f, 0.009042f, -0.000288f, 0.024672f, 0.005251f, 0.012252f, -0.013989f, -0.009970f, 0.018386f, -0.001925f, -0.003866f, 0.011165f, -0.002707f, -0.003169f, -0.000319f, -0.000642f, + 0.001093f, -0.002027f, 0.010198f, 0.085892f, 0.039158f, 0.008163f, 0.013966f, -0.017580f, -0.011799f, -0.004142f, 0.032466f, -0.022976f, 0.003696f, -0.019112f, -0.052787f, -0.025295f, 0.012121f, -0.013465f, 0.008730f, -0.020894f, -0.001049f, -0.022468f, 0.019310f, -0.022748f, -0.016375f, -0.048964f, -0.009130f, -0.007670f, -0.012868f, 0.025548f, -0.008288f, -0.020415f, 0.006660f, 0.019717f, 0.007311f, 0.006712f, -0.002933f, -0.004108f, -0.012946f, 0.010068f, -0.016668f, -0.004474f, -0.010357f, -0.029184f, 0.004453f, -0.020243f, 0.008188f, 0.002639f, -0.005948f, -0.000633f, -0.021283f, -0.001188f, -0.004843f, 0.031158f, -0.008962f, -0.000715f, 0.012666f, -0.017053f, -0.007579f, 0.031619f, -0.018442f, 0.012099f, 0.000828f, 0.028123f, 0.039933f, -0.002333f, 0.005162f, 0.004000f, 0.013818f, 0.007236f, -0.030464f, 0.002807f, 0.007704f, 0.010761f, -0.013038f, -0.020279f, 0.002132f, 0.005902f, -0.005304f, -0.007706f, -0.032679f, -0.016120f, -0.018796f, 0.001322f, 0.004128f, -0.006158f, -0.008982f, -0.010200f, -0.002505f, -0.005119f, -0.005719f, 0.006811f, -0.003208f, 0.003300f, -0.011759f, 0.000842f, + -0.004543f, -0.008146f, 0.001910f, 0.004789f, -0.006344f}, + {-0.000043f, -0.000012f, -0.000046f, 0.000003f, -0.000030f, 0.000068f, 0.000045f, -0.000216f, 0.000003f, -0.000141f, -0.000168f, 0.000045f, 0.000141f, 0.000137f, 0.000050f, -0.000312f, -0.000191f, 0.000062f, -0.000098f, 0.000016f, 0.000063f, 0.000081f, 0.000131f, -0.000097f, -0.000106f, -0.000197f, -0.000114f, -0.000001f, -0.000448f, -0.000010f, -0.000045f, -0.000131f, 0.000092f, -0.000259f, -0.000226f, -0.000459f, -0.000064f, -0.000406f, -0.000125f, -0.000011f, 0.000322f, 0.000088f, 0.000246f, -0.000128f, 0.000261f, -0.000071f, 0.000051f, 0.000314f, 0.001946f, -0.001525f, 0.000949f, -0.001206f, 0.000614f, -0.000588f, -0.000581f, -0.000350f, -0.000331f, 0.000351f, 0.000403f, -0.001493f, -0.000083f, 0.000219f, -0.000150f, -0.000251f, -0.000875f, -0.000319f, 0.000621f, 0.000943f, 0.000471f, 0.001487f, 0.000301f, -0.000265f, 0.000304f, 0.000257f, -0.000154f, 0.000486f, 0.001056f, -0.000406f, -0.000012f, 0.000451f, -0.000015f, -0.000103f, -0.000759f, -0.000029f, 0.000383f, 0.000308f, 0.000061f, 0.000022f, -0.000253f, 0.000268f, -0.000029f, 0.000033f, 0.000014f, -0.000258f, 0.007057f, -0.000467f, + 0.000608f, -0.000454f, 0.000448f, -0.000544f, 0.000106f, -0.000139f, -0.000132f, 0.000398f, -0.000380f, -0.001290f, 0.000363f, 0.000125f, 0.000390f, 0.000860f, 0.000457f, 0.000304f, -0.000123f, -0.000751f, -0.000262f, 0.000335f, -0.000108f, -0.000128f, 0.000718f, -0.000927f, -0.000298f, -0.000023f, -0.000164f, -0.000235f, 0.000342f, 0.000375f, 0.000467f, 0.000126f, 0.000162f, -0.000202f, 0.000650f, -0.000037f, 0.000497f, 0.000347f, -0.000124f, -0.000074f, 0.000233f, -0.000002f, -0.000147f, -0.000075f, 0.000001f, 0.005198f, -0.004955f, 0.000785f, -0.001335f, 0.000725f, -0.000085f, 0.000525f, -0.000470f, 0.000940f, -0.000392f, 0.000572f, -0.001180f, 0.000053f, -0.000682f, 0.000203f, -0.000104f, -0.000156f, -0.000314f, -0.000865f, -0.000084f, 0.000110f, -0.000425f, 0.000721f, -0.000318f, -0.000512f, -0.000651f, 0.000399f, -0.000415f, 0.001023f, -0.000102f, 0.000010f, 0.000303f, 0.000011f, 0.000026f, -0.000445f, -0.000377f, -0.000098f, 0.000107f, -0.000166f, -0.000434f, 0.000396f, 0.000281f, 0.000705f, -0.000159f, 0.000237f, -0.000094f, 0.000138f, -0.012165f, 0.001445f, -0.000898f, 0.000042f, + -0.000125f, -0.001006f, 0.001121f, -0.000256f, 0.000114f, 0.000483f, 0.000157f, 0.001297f, -0.000048f, -0.000506f, 0.001551f, 0.000637f, 0.001401f, -0.000013f, -0.001822f, -0.001084f, -0.000871f, 0.000774f, -0.000944f, 0.000096f, -0.000334f, -0.000308f, 0.000126f, 0.000301f, -0.000264f, -0.000560f, -0.000415f, 0.000388f, 0.000434f, 0.000818f, -0.000050f, -0.000095f, -0.000037f, 0.000513f, -0.000543f, 0.000161f, 0.000233f, 0.000385f, -0.000440f, 0.000491f, -0.000536f, -0.000080f, 0.000197f, -0.015368f, 0.005593f, -0.002231f, 0.002597f, -0.001774f, 0.001201f, -0.001925f, 0.001122f, -0.001425f, 0.000575f, 0.001089f, 0.000073f, 0.000428f, 0.001002f, -0.000616f, 0.000726f, -0.000795f, -0.000578f, -0.001775f, 0.001653f, -0.001036f, 0.001115f, 0.000098f, 0.000016f, -0.001702f, -0.000040f, 0.000348f, -0.000221f, -0.000041f, -0.000041f, 0.000733f, -0.000083f, -0.000488f, 0.000567f, 0.000181f, -0.000195f, 0.000051f, 0.000049f, 0.000077f, 0.000338f, -0.000449f, 0.001219f, -0.000082f, -0.000722f, -0.000062f, -0.000381f, -0.000028f, 0.000757f, 0.006997f, -0.001505f, 0.002654f, -0.001219f, 0.000911f, + -0.000989f, 0.003308f, -0.000638f, 0.001765f, -0.000204f, -0.000130f, 0.000447f, -0.000002f, -0.002275f, 0.000516f, -0.000206f, -0.001026f, -0.000249f, 0.000038f, -0.002862f, -0.000079f, 0.000235f, 0.000904f, -0.000022f, -0.000544f, -0.000111f, 0.000980f, 0.000180f, -0.000486f, -0.000963f, 0.001472f, -0.000913f, -0.000036f, -0.001361f, -0.000150f, 0.000004f, 0.000237f, -0.000331f, 0.000361f, 0.000589f, -0.000576f, 0.000467f, -0.000022f, 0.000373f, -0.000021f, 0.000675f, -0.000340f, -0.000204f, 0.000608f, 0.000849f, 0.018429f, -0.005417f, 0.000770f, -0.000947f, 0.001181f, -0.000021f, -0.000047f, -0.002517f, 0.001081f, -0.001120f, 0.000729f, 0.000231f, 0.000359f, 0.000766f, 0.001217f, 0.000159f, 0.000404f, -0.002124f, 0.000738f, 0.000737f, -0.001374f, -0.000296f, 0.001386f, 0.000880f, 0.000875f, 0.001972f, 0.001096f, 0.000257f, 0.000505f, -0.000788f, 0.000611f, -0.000216f, 0.001129f, 0.001465f, -0.000238f, 0.000469f, 0.000918f, -0.000435f, 0.000301f, -0.001345f, -0.000377f, 0.001269f, -0.000003f, -0.000957f, -0.000339f, 0.000355f, 0.000945f, -0.000109f, 0.000525f, -0.000048f, -0.000806f, + 0.001333f, -0.009853f, 0.004178f, -0.002859f, 0.001902f, -0.001693f, 0.002241f, -0.001426f, 0.000114f, -0.001211f, -0.001492f, -0.002099f, 0.000169f, -0.001240f, 0.000631f, 0.000725f, 0.001620f, -0.002596f, 0.001633f, -0.000609f, 0.002259f, 0.000507f, -0.000110f, 0.000192f, 0.000195f, -0.000514f, -0.000426f, 0.000354f, -0.001043f, 0.000714f, 0.001288f, -0.001706f, -0.000356f, -0.000090f, 0.000714f, -0.000644f, 0.001833f, -0.001876f, 0.000389f, 0.000008f, 0.000137f, -0.000801f, 0.000152f, -0.000499f, 0.000502f, 0.000084f, 0.000115f, -0.000568f, -0.000078f, -0.001188f, -0.000383f, -0.000060f, 0.000287f, 0.000101f, -0.000414f, -0.001508f, -0.000030f, -0.000301f, -0.015900f, 0.005062f, -0.003243f, -0.000201f, -0.000648f, 0.001012f, -0.002733f, 0.000211f, 0.000888f, 0.000739f, -0.000946f, 0.000562f, -0.001212f, -0.001997f, -0.000772f, 0.000269f, -0.001192f, 0.004238f, 0.000128f, -0.001155f, -0.000372f, -0.001395f, -0.000650f, 0.001306f, 0.000784f, 0.001690f, -0.000141f, 0.000763f, -0.000933f, 0.000406f, -0.000844f, -0.000273f, -0.000490f, 0.000299f, 0.000532f, -0.000249f, -0.000801f, 0.000218f, + 0.000315f, 0.001177f, -0.000193f, -0.000407f, -0.001500f, -0.001213f, -0.000578f, -0.000220f, 0.000292f, 0.000224f, -0.000610f, -0.000235f, 0.000120f, 0.000574f, 0.000296f, 0.000117f, -0.000263f, 0.000583f, -0.000180f, 0.000982f, -0.015305f, 0.007206f, -0.003373f, 0.003225f, -0.001658f, 0.001918f, 0.000957f, 0.000597f, -0.001728f, 0.000230f, -0.000874f, 0.000278f, -0.002268f, 0.000876f, 0.001443f, 0.000481f, -0.002415f, -0.001186f, -0.001208f, -0.001254f, -0.000820f, 0.001760f, 0.000431f, 0.001245f, 0.000996f, -0.000411f, -0.000086f, -0.001816f, 0.002381f, -0.000655f, -0.000227f, 0.000171f, -0.000495f, -0.000707f, -0.000846f, -0.000174f, -0.001917f, 0.000594f, -0.001012f, 0.000793f, 0.000685f, 0.001129f, -0.000288f, 0.000145f, -0.001241f, 0.000497f, 0.000935f, 0.000244f, -0.000194f, 0.000211f, 0.000734f, 0.001103f, 0.000480f, 0.001028f, 0.000057f, 0.000180f, -0.000048f, -0.000203f, 0.004958f, 0.006137f, -0.002797f, 0.001631f, -0.000873f, 0.000602f, -0.000679f, 0.000338f, 0.000525f, 0.002998f, -0.001084f, 0.001227f, 0.002814f, -0.000787f, -0.000133f, -0.000493f, 0.000669f, 0.001448f, + 0.001482f, 0.001935f, 0.000509f, 0.001645f, -0.000442f, -0.000995f, -0.003338f, 0.000685f, -0.000523f, -0.001680f, -0.001208f, -0.000070f, -0.000334f, 0.001058f, -0.000173f, -0.001940f, -0.002008f, 0.000523f, -0.001748f, 0.000220f, 0.001031f, -0.001565f, -0.001060f, -0.000672f, 0.000751f, 0.000689f, -0.000072f, -0.000216f, 0.001141f, 0.000237f, -0.000470f, 0.000456f, -0.001025f, 0.000116f, -0.000550f, -0.000766f, -0.000532f, 0.000781f, -0.000426f, 0.000587f, -0.000469f, -0.000979f, 0.000241f, 0.000528f, -0.000364f, 0.000299f, -0.000452f, 0.017704f, -0.006169f, 0.003338f, -0.002316f, 0.003319f, -0.002348f, 0.002034f, -0.000764f, 0.002066f, 0.000498f, 0.001453f, -0.001699f, 0.001735f, -0.000600f, -0.001447f, -0.000155f, -0.001554f, -0.002481f, -0.001310f, -0.000275f, 0.001253f, -0.001702f, -0.002271f, -0.002785f, -0.000502f, -0.000250f, 0.002220f, 0.001211f, 0.001426f, -0.000983f, 0.001153f, -0.000889f, -0.000869f, -0.000484f, 0.001465f, 0.001259f, 0.000394f, -0.000017f, -0.000054f, 0.000033f, -0.000412f, -0.000240f, 0.001014f, 0.000190f, 0.002497f, -0.000966f, -0.000301f, -0.002090f, 0.001363f, + -0.000552f, -0.000324f, -0.000499f, -0.000129f, 0.000113f, -0.000346f, 0.000371f, -0.000557f, -0.000001f, -0.000790f, -0.000358f, 0.000177f, 0.000805f, -0.000423f, -0.000063f, -0.000284f, 0.004964f, -0.007611f, 0.004445f, -0.002854f, 0.003451f, -0.000050f, 0.002138f, 0.000596f, -0.003342f, -0.001591f, -0.001134f, 0.000396f, 0.000825f, 0.000455f, 0.003751f, -0.002127f, 0.002996f, 0.000512f, 0.000371f, -0.002068f, -0.000456f, 0.002587f, -0.000181f, -0.002219f, 0.002502f, 0.001906f, 0.000415f, -0.001047f, -0.000827f, -0.000231f, -0.000185f, 0.001152f, -0.000580f, 0.000507f, -0.001417f, -0.000324f, 0.000802f, -0.002041f, 0.000767f, -0.000799f, 0.000717f, -0.000600f, -0.000189f, 0.002381f, 0.001024f, 0.001351f, -0.000114f, 0.000552f, 0.000868f, -0.000192f, -0.000669f, -0.001068f, 0.000352f, 0.000471f, 0.000841f, 0.001017f, 0.000232f, -0.000244f, -0.001067f, -0.000493f, -0.001080f, -0.000968f, 0.000115f, 0.000020f, -0.000813f, -0.018833f, -0.003788f, -0.000486f, -0.003126f, -0.001284f, 0.002842f, 0.001225f, -0.000801f, -0.000710f, -0.002242f, -0.001482f, -0.001815f, -0.002038f, -0.001688f, -0.001067f, + -0.001525f, -0.002609f, -0.002228f, 0.000889f, -0.002263f, 0.000784f, -0.003052f, 0.000124f, -0.001249f, -0.000992f, 0.002702f, -0.000250f, -0.001278f, 0.001755f, -0.001917f, 0.001854f, 0.000574f, 0.001955f, 0.001341f, -0.000012f, -0.000898f, 0.002056f, -0.000001f, -0.000284f, 0.001875f, -0.000741f, -0.002487f, -0.002814f, -0.000703f, 0.000973f, 0.000631f, -0.000816f, -0.000056f, -0.000753f, 0.000209f, 0.000071f, 0.000174f, 0.001812f, 0.000728f, -0.001255f, -0.000457f, 0.000264f, 0.001158f, 0.000294f, 0.001715f, 0.000495f, -0.000113f, -0.000831f, -0.000760f, 0.000045f, -0.022175f, 0.019307f, -0.007862f, 0.005361f, -0.005038f, 0.001238f, -0.002474f, 0.003270f, 0.000619f, 0.000385f, -0.001580f, 0.002218f, 0.000450f, -0.003980f, 0.000404f, 0.000594f, -0.002006f, -0.003066f, 0.003034f, 0.003772f, -0.001218f, -0.000988f, 0.000626f, 0.001742f, -0.001022f, 0.003437f, -0.000113f, 0.000876f, -0.002496f, -0.000879f, -0.001490f, 0.002243f, -0.000504f, 0.000494f, 0.000477f, -0.001276f, 0.002160f, 0.002087f, 0.000560f, 0.000722f, 0.002532f, -0.001541f, -0.000421f, -0.000316f, -0.001857f, 0.000405f, + -0.001216f, 0.000460f, -0.000069f, 0.000174f, 0.002064f, -0.000070f, -0.000485f, 0.000470f, 0.000096f, 0.001368f, -0.001275f, 0.000487f, -0.000097f, 0.002672f, -0.000809f, -0.000095f, -0.001063f, -0.000214f, -0.000689f, 0.014776f, -0.001813f, -0.003120f, -0.000763f, 0.001962f, 0.000999f, 0.000871f, -0.000137f, -0.002086f, 0.000482f, 0.001222f, 0.001389f, -0.000968f, -0.000913f, 0.002959f, 0.000993f, -0.002363f, 0.000474f, 0.003837f, -0.004855f, 0.003199f, 0.000364f, 0.004098f, -0.000300f, 0.000209f, 0.000784f, 0.000807f, 0.002145f, -0.001627f, -0.000631f, 0.000787f, 0.001534f, -0.000640f, -0.000066f, 0.000177f, 0.000341f, 0.000957f, -0.002004f, -0.000069f, 0.001133f, 0.000306f, -0.001112f, -0.000361f, 0.002534f, 0.001859f, 0.000876f, -0.000998f, -0.000734f, 0.000713f, -0.000346f, -0.000650f, 0.000433f, -0.000807f, -0.001245f, 0.002606f, 0.001015f, 0.001668f, 0.000251f, 0.001254f, 0.001021f, 0.001113f, 0.000113f, 0.001353f, 0.000673f, 0.000956f, -0.000807f, 0.000165f, 0.000355f, -0.001186f, 0.000409f, -0.000582f, -0.000125f, 0.007031f, 0.002042f, 0.001696f, -0.001031f, -0.000690f, + -0.001911f, -0.001365f, 0.000347f, -0.000749f, -0.000941f, -0.002737f, 0.002330f, 0.001614f, -0.001706f, 0.002915f, -0.002746f, -0.000830f, 0.001222f, -0.002033f, 0.001180f, 0.001893f, 0.002890f, 0.002553f, 0.002431f, 0.001263f, -0.005144f, 0.000002f, -0.001081f, 0.001031f, -0.000498f, 0.002013f, 0.001362f, -0.000662f, -0.001253f, 0.001322f, -0.000921f, 0.003396f, -0.000002f, 0.001124f, 0.003438f, 0.003296f, -0.002489f, 0.000210f, -0.001642f, -0.002958f, -0.000322f, 0.000558f, -0.000380f, -0.000605f, -0.000318f, 0.000258f, -0.001388f, 0.000186f, -0.001619f, -0.000451f, -0.000193f, 0.000433f, 0.000010f, -0.000943f, -0.001009f, 0.002065f, -0.000730f, 0.000319f, 0.000920f, 0.001143f, -0.000632f, -0.000640f, -0.000304f, -0.001627f, -0.001112f, 0.000179f, 0.000353f, 0.016615f, -0.011690f, 0.004256f, -0.004441f, -0.000342f, -0.003103f, 0.002808f, 0.002789f, 0.000900f, 0.000567f, 0.002638f, 0.007251f, -0.006372f, -0.000886f, -0.001656f, -0.002574f, 0.005626f, 0.004236f, -0.000867f, -0.003855f, 0.001563f, -0.003150f, -0.002517f, -0.004413f, 0.000565f, -0.004519f, -0.001492f, 0.002661f, 0.000385f, + -0.001387f, -0.003728f, 0.000006f, -0.000899f, 0.002265f, 0.002084f, 0.000961f, -0.001693f, 0.000253f, -0.000106f, 0.000915f, 0.001799f, -0.001143f, -0.000576f, -0.002023f, 0.003065f, -0.000382f, 0.000453f, 0.002731f, -0.000564f, -0.000252f, 0.001093f, -0.001376f, -0.000142f, 0.001183f, -0.002031f, 0.000459f, -0.000377f, -0.000181f, -0.002118f, 0.001026f, -0.000454f, 0.000179f, 0.000521f, -0.000787f, 0.001389f, -0.001097f, -0.000284f, -0.002271f, 0.000204f, -0.000319f, 0.000942f, 0.000991f, -0.025867f, 0.003587f, 0.000369f, 0.001824f, -0.001981f, -0.003222f, -0.000007f, 0.002173f, 0.003449f, -0.000202f, 0.005241f, 0.002924f, -0.003531f, -0.003149f, 0.002455f, 0.000450f, -0.002512f, -0.004675f, -0.005364f, -0.003435f, -0.003955f, -0.004428f, 0.000815f, 0.001426f, 0.001196f, -0.003273f, -0.003146f, 0.000496f, -0.000817f, -0.000525f, -0.000407f, -0.002609f, 0.002236f, -0.004501f, -0.001673f, -0.000673f, -0.000148f, 0.001460f, 0.000526f, -0.000296f, 0.002103f, -0.000619f, 0.002097f, 0.001212f, -0.001582f, 0.000273f, 0.003397f, -0.001332f, -0.001331f, 0.000105f, 0.001998f, 0.000529f, -0.001384f, + -0.001787f, 0.001674f, 0.000105f, -0.002349f, 0.003272f, 0.003691f, 0.000461f, -0.001025f, 0.000455f, -0.000045f, 0.000796f, 0.001645f, -0.000142f, 0.002175f, 0.001386f, 0.001255f, 0.001097f, 0.000583f, 0.000917f, -0.001052f, -0.000063f, -0.015855f, 0.013538f, -0.004540f, 0.002887f, -0.000084f, 0.002249f, -0.005496f, 0.002116f, -0.003750f, 0.000012f, -0.002542f, 0.005079f, 0.004316f, 0.001630f, 0.000340f, -0.004184f, -0.002785f, -0.000436f, -0.001693f, 0.004822f, -0.003957f, -0.000161f, -0.001967f, 0.007065f, -0.002261f, 0.000630f, -0.000212f, 0.001215f, 0.000542f, 0.001212f, 0.000878f, -0.001171f, 0.000624f, -0.000286f, 0.002455f, 0.000380f, 0.004666f, 0.002427f, -0.001523f, -0.000318f, -0.000596f, 0.000086f, -0.001800f, -0.001260f, -0.000461f, 0.000836f, 0.005691f, 0.000519f, 0.000368f, -0.001566f, 0.002313f, -0.000863f, -0.001233f, 0.000753f, -0.001199f, 0.000704f, -0.001485f, -0.003192f, 0.001570f, 0.001415f, -0.000459f, 0.003337f, 0.000696f, 0.000793f, 0.001185f, -0.000894f, 0.000381f, 0.001083f, -0.002776f, -0.001296f, -0.000228f, -0.001257f, 0.001256f, 0.001972f, -0.000725f, + 0.003385f, 0.002249f, -0.000076f, -0.000900f, -0.000681f, -0.000235f, 0.010345f, -0.000227f, 0.002336f, -0.007022f, -0.001164f, 0.000893f, -0.005666f, 0.000458f, 0.007860f, -0.001364f, 0.000569f, -0.003539f, -0.004851f, 0.001240f, -0.004432f, 0.006928f, -0.004803f, 0.001666f, 0.001641f, 0.003712f, 0.002887f, -0.000752f, -0.004285f, -0.000493f, -0.000392f, 0.002200f, -0.003003f, -0.000578f, -0.000879f, -0.001426f, -0.001016f, 0.002104f, 0.001294f, 0.005619f, 0.001909f, -0.002086f, 0.002332f, -0.001524f, -0.001607f, 0.001731f, 0.004809f, -0.000687f, -0.002479f, -0.002319f, 0.002557f, -0.000059f, -0.003479f, -0.003203f, 0.001645f, 0.001533f, -0.001443f, -0.002647f, -0.004399f, 0.001220f, 0.001640f, 0.001106f, -0.002484f, 0.001870f, 0.001149f, 0.000781f, -0.000882f, -0.000267f, 0.001362f, -0.003301f, -0.000431f, 0.001458f, 0.001715f, -0.000312f, 0.000836f, 0.000072f, 0.035167f, -0.002268f, 0.001391f, 0.003197f, -0.003108f, -0.001340f, -0.001082f, -0.008318f, 0.005543f, -0.000928f, -0.005169f, 0.001084f, -0.002665f, 0.002996f, 0.002365f, 0.003815f, -0.001396f, 0.005188f, 0.004441f, 0.002830f, + -0.004628f, 0.003504f, -0.006339f, -0.003751f, -0.004323f, 0.001671f, -0.003328f, -0.000625f, -0.001153f, -0.004233f, -0.002312f, 0.003522f, -0.002669f, -0.002025f, -0.004043f, 0.001276f, 0.001268f, 0.002979f, -0.001726f, 0.005147f, 0.001265f, 0.005871f, -0.000705f, 0.001045f, 0.001161f, -0.003285f, 0.002296f, 0.006012f, -0.002108f, -0.000195f, 0.001614f, -0.001782f, -0.002464f, 0.001407f, -0.002455f, -0.001335f, -0.003201f, -0.002106f, 0.002325f, 0.002074f, 0.001386f, 0.002229f, 0.002806f, 0.002675f, 0.004035f, 0.000639f, -0.001231f, 0.002082f, 0.001404f, -0.000042f, -0.000430f, 0.000151f, -0.001546f, -0.000343f, 0.000295f, 0.000354f, -0.000111f, -0.015482f, -0.030454f, 0.011425f, 0.000202f, 0.000719f, -0.002961f, -0.003170f, -0.000644f, 0.001144f, -0.001889f, 0.008072f, -0.003605f, -0.006880f, 0.000497f, 0.000533f, -0.000838f, -0.002366f, 0.005517f, 0.001078f, -0.002366f, 0.002623f, -0.004753f, 0.006211f, -0.003352f, -0.001693f, -0.004099f, 0.006923f, -0.002883f, -0.000899f, -0.004064f, -0.001823f, 0.003777f, -0.001641f, 0.004083f, -0.005101f, -0.006002f, 0.000590f, 0.001118f, 0.001143f, + -0.000099f, -0.003051f, 0.000642f, 0.001713f, 0.000865f, 0.003260f, 0.000040f, 0.005060f, 0.000746f, 0.004749f, 0.006151f, 0.001363f, -0.000406f, 0.001244f, -0.003362f, -0.000781f, -0.005653f, -0.004988f, 0.001544f, 0.001606f, 0.001049f, -0.000258f, -0.001578f, -0.000757f, -0.001343f, -0.000681f, -0.001341f, 0.000125f, -0.000080f, 0.001163f, -0.000303f, -0.000569f, -0.001904f, -0.000053f, -0.002220f, -0.000176f, -0.002962f, -0.000298f, -0.001075f, -0.000234f, -0.010204f, 0.029864f, -0.013574f, 0.006251f, -0.002865f, 0.009502f, -0.001476f, -0.004163f, -0.004352f, 0.002514f, -0.001286f, -0.000538f, 0.000231f, 0.001882f, -0.010016f, -0.004870f, -0.002574f, 0.004017f, 0.003365f, 0.005881f, 0.001084f, -0.000860f, -0.000913f, 0.007052f, -0.009109f, 0.005318f, -0.004376f, -0.000881f, -0.004611f, 0.007287f, 0.002924f, -0.004679f, 0.000639f, -0.002030f, 0.000794f, 0.003114f, -0.013082f, -0.005430f, 0.001090f, 0.004642f, -0.002682f, 0.001012f, 0.003371f, -0.001320f, -0.001468f, -0.000433f, 0.005079f, 0.002047f, 0.000879f, 0.000615f, 0.001965f, 0.006002f, -0.003602f, 0.002773f, -0.008348f, -0.001392f, + 0.001893f, 0.004085f, 0.000765f, 0.000639f, 0.000204f, 0.002240f, -0.001627f, 0.000309f, -0.000581f, -0.001910f, -0.001710f, 0.003186f, 0.003047f, -0.001086f, -0.001575f, -0.005136f, -0.002196f, -0.001099f, -0.000928f, 0.003859f, -0.001444f, -0.001351f, -0.002543f, -0.002228f, -0.000184f, -0.026770f, -0.005771f, 0.002626f, -0.006344f, 0.001606f, 0.001174f, 0.003930f, -0.000012f, 0.007486f, 0.004891f, 0.002710f, -0.002043f, -0.003665f, -0.000182f, 0.007919f, -0.006758f, -0.002579f, -0.005235f, -0.000110f, -0.014324f, -0.011296f, 0.000722f, 0.007020f, 0.009665f, 0.002235f, -0.003503f, 0.003299f, -0.003109f, -0.002077f, -0.002113f, 0.000961f, 0.002540f, 0.000623f, 0.003770f, -0.002846f, -0.005086f, 0.004226f, 0.002789f, 0.008870f, -0.001073f, 0.001449f, -0.001258f, 0.007155f, -0.007425f, -0.003730f, -0.001745f, -0.005641f, 0.003609f, -0.002324f, 0.003034f, -0.006043f, 0.006048f, 0.005858f, 0.005404f, -0.002189f, 0.004793f, 0.000263f, 0.001685f, 0.002805f, 0.002015f, -0.002523f, 0.000464f, -0.000781f, -0.000116f, 0.005504f, 0.002078f, -0.002411f, 0.004477f, -0.000716f, -0.003826f, -0.001270f, + -0.000251f, -0.005415f, -0.000189f, 0.002269f, 0.002981f, 0.000477f, -0.000082f, -0.002234f, 0.000853f, 0.001319f, 0.019383f, 0.012592f, -0.004009f, 0.005693f, -0.012941f, 0.009035f, 0.003291f, 0.006792f, -0.002375f, -0.001756f, -0.007100f, -0.003663f, -0.012112f, -0.002128f, -0.009651f, -0.002958f, -0.005961f, -0.006103f, -0.008206f, 0.003203f, -0.011199f, 0.001461f, 0.004783f, -0.002186f, 0.001479f, -0.004846f, -0.000106f, -0.001541f, -0.001635f, -0.006590f, -0.000927f, 0.000712f, -0.000493f, -0.001052f, -0.003475f, -0.003023f, 0.001972f, 0.002105f, 0.002783f, 0.014136f, -0.005767f, -0.000373f, 0.005692f, -0.001421f, -0.002412f, -0.005486f, 0.001628f, 0.004769f, 0.007910f, 0.002639f, 0.006586f, -0.006535f, -0.009806f, 0.000884f, 0.006339f, 0.003531f, -0.005319f, 0.006070f, -0.004668f, 0.002900f, 0.001164f, 0.005513f, 0.003085f, 0.001993f, 0.003707f, -0.003804f, 0.002343f, 0.001953f, 0.001081f, 0.005414f, 0.001198f, 0.004365f, -0.000717f, -0.001815f, 0.000643f, 0.001000f, 0.000859f, 0.005252f, -0.000907f, -0.003035f, -0.000344f, 0.039217f, -0.025353f, -0.001358f, 0.002959f, 0.000809f, + 0.003106f, 0.005391f, -0.001066f, -0.000842f, 0.003028f, -0.004506f, -0.004312f, -0.000688f, 0.003489f, 0.014131f, 0.000606f, 0.004899f, -0.004531f, 0.000310f, -0.013936f, 0.008645f, -0.008425f, -0.011991f, 0.002807f, 0.003402f, -0.004449f, 0.004041f, 0.001694f, 0.009345f, 0.010321f, -0.001684f, -0.003884f, -0.002907f, -0.015403f, -0.008369f, 0.012089f, 0.004017f, 0.004453f, -0.006919f, -0.007127f, 0.002147f, -0.001377f, -0.006106f, 0.005360f, -0.001133f, -0.003835f, -0.004401f, 0.003038f, -0.003938f, -0.002120f, 0.014199f, -0.008629f, 0.002658f, -0.003094f, 0.003319f, -0.003883f, -0.001559f, -0.010564f, 0.001817f, -0.003911f, -0.002597f, 0.008446f, 0.002075f, 0.002356f, 0.005146f, 0.006125f, 0.001861f, 0.004240f, -0.001852f, -0.000502f, -0.006905f, 0.003173f, 0.005766f, -0.001310f, 0.000412f, -0.000637f, -0.001407f, -0.001788f, 0.000679f, -0.001839f, -0.000798f, -0.024263f, -0.011880f, 0.004656f, -0.001378f, 0.008982f, -0.001119f, -0.002192f, -0.006914f, -0.007761f, 0.004310f, -0.008119f, -0.002724f, -0.004547f, -0.000791f, -0.004806f, -0.003254f, -0.003834f, -0.001906f, -0.004786f, -0.009204f, + 0.005494f, -0.018386f, -0.000062f, 0.016711f, 0.004178f, 0.000043f, -0.004399f, 0.001306f, -0.016624f, 0.007048f, 0.004345f, 0.001286f, 0.006190f, 0.009131f, -0.006966f, -0.003610f, -0.007254f, 0.001215f, 0.000398f, -0.004253f, -0.004868f, -0.005420f, -0.003156f, -0.000128f, 0.003817f, 0.000430f, 0.003155f, 0.001836f, 0.000513f, 0.011629f, 0.002906f, -0.001726f, 0.009261f, -0.004331f, -0.010219f, -0.003061f, -0.001072f, -0.001365f, -0.000523f, -0.003461f, -0.000656f, -0.004346f, -0.000924f, -0.004422f, 0.000614f, 0.002574f, -0.004818f, -0.001289f, -0.002585f, 0.000333f, -0.004886f, -0.006276f, -0.002612f, 0.002718f, 0.004692f, 0.001954f, -0.001336f, -0.000047f, 0.001902f, -0.000701f, -0.000890f, -0.002116f, 0.001194f, 0.002517f, 0.000662f, 0.000021f, -0.002652f, -0.014943f, 0.020316f, -0.009913f, -0.004877f, -0.016465f, 0.012981f, -0.004485f, 0.007680f, 0.000539f, 0.000540f, -0.004952f, 0.010194f, -0.002464f, 0.003373f, 0.002570f, -0.004555f, -0.001516f, -0.001421f, -0.008704f, 0.001828f, 0.001647f, -0.006694f, -0.011315f, -0.006978f, -0.010407f, -0.002458f, 0.005727f, 0.003060f, -0.006106f, + -0.006037f, 0.009199f, 0.006390f, -0.007860f, 0.007369f, -0.003893f, 0.006532f, -0.009978f, -0.007827f, -0.007596f, 0.002817f, -0.006724f, 0.004388f, -0.003012f, 0.001917f, -0.001822f, -0.000860f, 0.001618f, 0.007414f, -0.015934f, -0.001909f, 0.003226f, -0.001344f, -0.004820f, -0.011409f, -0.000992f, 0.010699f, 0.000004f, 0.009289f, 0.006788f, 0.002083f, -0.001277f, 0.007125f, -0.006914f, -0.005566f, 0.004494f, -0.001545f, -0.004285f, 0.003090f, 0.000889f, -0.003245f, -0.004932f, 0.008523f, -0.007794f, -0.004121f, -0.004651f, 0.004899f, 0.000262f, -0.003227f, -0.001881f, 0.002621f, -0.007200f, 0.000159f, 0.001952f, 0.001614f, 0.000186f, -0.002317f, -0.003497f, -0.034420f, 0.013091f, 0.005657f, -0.008512f, 0.004485f, -0.009653f, 0.009056f, 0.007844f, 0.006699f, -0.017540f, 0.010917f, 0.018982f, -0.002415f, 0.006582f, 0.000476f, -0.005656f, -0.007477f, 0.020892f, -0.000103f, -0.001631f, -0.011214f, -0.022309f, -0.012020f, 0.001337f, -0.009793f, 0.008498f, -0.014584f, -0.004706f, -0.008546f, 0.002583f, -0.003246f, -0.010809f, 0.002001f, -0.002346f, 0.007381f, -0.002240f, -0.008497f, -0.003126f, + -0.026333f, 0.004938f, -0.000678f, 0.012435f, -0.007354f, -0.008113f, 0.011557f, 0.002593f, 0.002012f, -0.004382f, -0.006961f, 0.002718f, 0.005328f, 0.003961f, -0.001737f, 0.004197f, 0.002300f, 0.000657f, -0.002201f, -0.002310f, -0.008622f, 0.000876f, -0.003361f, -0.004904f, 0.004697f, 0.002770f, 0.012996f, 0.002887f, -0.008583f, -0.008539f, 0.002020f, -0.005466f, -0.004058f, 0.001636f, -0.004179f, -0.000007f, -0.001877f, -0.002350f, 0.002549f, -0.003243f, 0.001351f, -0.000239f, -0.000603f, -0.001088f, -0.001813f, -0.004020f, -0.005025f, -0.001398f, -0.004321f, 0.028467f, -0.011797f, -0.000226f, 0.001203f, 0.011659f, -0.001945f, -0.002758f, 0.007883f, 0.013809f, -0.009986f, -0.011491f, 0.008250f, -0.002064f, 0.007128f, 0.010471f, 0.008685f, 0.007402f, 0.005888f, 0.006968f, 0.027656f, -0.002795f, 0.001689f, 0.005033f, 0.015091f, -0.003626f, -0.006040f, 0.005532f, -0.000788f, -0.005473f, -0.006592f, -0.005870f, -0.000219f, -0.007503f, 0.010329f, 0.015684f, -0.001199f, -0.004435f, 0.006385f, -0.004355f, 0.009297f, 0.006483f, -0.000104f, -0.008760f, 0.005998f, -0.001075f, -0.003061f, 0.000875f, + -0.001477f, 0.018310f, -0.001912f, 0.007722f, -0.004453f, 0.016263f, -0.001878f, 0.001062f, -0.006121f, -0.010582f, 0.008213f, -0.005483f, 0.016541f, 0.003264f, 0.007680f, -0.000373f, -0.000217f, 0.004446f, 0.001017f, 0.011605f, 0.006450f, 0.001752f, 0.005786f, -0.007509f, 0.002405f, 0.005100f, 0.000350f, -0.002453f, 0.009639f, 0.002005f, -0.003494f, -0.003699f, 0.003725f, -0.002284f, -0.000216f, 0.005129f, -0.001953f, 0.002943f, 0.001147f, -0.003552f, 0.037474f, -0.010684f, 0.003609f, -0.003486f, 0.001769f, 0.004905f, 0.012673f, -0.009660f, 0.005376f, -0.000124f, 0.000795f, 0.006894f, -0.005453f, 0.007361f, -0.019563f, -0.008859f, 0.003430f, 0.007395f, 0.005328f, 0.015720f, -0.015446f, 0.002489f, -0.002190f, -0.021308f, 0.009238f, -0.008262f, -0.005273f, -0.003073f, -0.017381f, 0.005728f, 0.006317f, 0.002760f, -0.008988f, -0.015301f, 0.006170f, -0.009475f, 0.008468f, -0.014668f, 0.000373f, -0.017558f, -0.004143f, -0.011727f, -0.010006f, 0.010391f, 0.016357f, 0.002248f, 0.006136f, -0.007470f, 0.003204f, -0.012532f, 0.005506f, -0.008240f, 0.002476f, 0.011968f, 0.006307f, -0.004248f, + 0.007478f, 0.001173f, 0.006508f, -0.005438f, 0.010765f, 0.017991f, 0.001195f, -0.010950f, -0.007311f, -0.004925f, -0.001762f, 0.001100f, 0.008341f, 0.001541f, 0.013401f, -0.000117f, 0.005287f, -0.012025f, -0.001507f, -0.008708f, -0.001375f, -0.001373f, 0.002971f, -0.010925f, 0.001755f, -0.000925f, 0.003536f, 0.001075f, 0.002321f, 0.000990f, 0.001151f, -0.037979f, -0.031839f, 0.013635f, -0.003880f, 0.015834f, -0.001091f, 0.005266f, -0.018968f, -0.017793f, -0.010765f, 0.006114f, -0.014653f, -0.010077f, -0.004238f, 0.003094f, 0.010950f, 0.003984f, -0.021543f, 0.005967f, 0.012264f, -0.030631f, -0.003529f, 0.001605f, -0.032507f, -0.011081f, 0.014680f, -0.030123f, 0.014958f, 0.015713f, 0.000339f, -0.004246f, -0.001093f, -0.007160f, -0.007886f, 0.005543f, 0.006823f, 0.022801f, -0.013262f, -0.006923f, -0.005491f, -0.010416f, 0.000766f, -0.017863f, -0.004337f, 0.001483f, -0.000362f, -0.005738f, -0.000768f, -0.009790f, -0.001862f, 0.005637f, -0.002326f, -0.006346f, 0.007651f, -0.003407f, -0.007197f, -0.010389f, 0.022487f, -0.000829f, 0.013761f, 0.001900f, 0.005258f, 0.014827f, 0.002281f, 0.010132f, + -0.006526f, 0.011247f, 0.008244f, 0.002522f, 0.003079f, 0.002830f, 0.009871f, 0.004525f, 0.001961f, 0.009478f, -0.003831f, 0.001461f, -0.000932f, -0.014568f, 0.007016f, 0.003572f, 0.002163f, -0.008888f, -0.002398f, 0.001753f, 0.003008f, -0.002497f, -0.061728f, 0.023425f, -0.006728f, -0.027629f, -0.006668f, 0.000809f, -0.007073f, 0.010821f, -0.023916f, 0.011676f, -0.001840f, -0.027500f, -0.018941f, 0.003895f, 0.011057f, 0.010474f, 0.007692f, 0.016377f, 0.004735f, 0.026862f, 0.014729f, 0.031466f, 0.004160f, 0.025584f, -0.019531f, -0.015330f, 0.005352f, 0.002338f, -0.015478f, 0.004478f, 0.003376f, -0.002043f, -0.005855f, 0.015219f, 0.002964f, -0.033172f, -0.014774f, 0.011291f, 0.003916f, -0.006935f, 0.009594f, 0.009847f, 0.015198f, 0.003387f, 0.004557f, 0.002962f, 0.004459f, 0.005660f, -0.011507f, 0.001898f, 0.002190f, -0.024488f, 0.011667f, 0.008685f, 0.010508f, -0.016739f, -0.009741f, 0.012456f, 0.000071f, -0.003130f, -0.002493f, -0.007075f, -0.006330f, 0.000188f, -0.008441f, -0.018783f, 0.006490f, 0.020340f, -0.014149f, 0.002120f, -0.008024f, -0.003124f, -0.005838f, -0.001678f, + 0.010451f, 0.002653f, 0.008641f, 0.002663f, -0.009112f, -0.006347f, -0.007395f, -0.004291f, -0.006043f, 0.001618f, -0.003819f, -0.000667f, -0.005785f, 0.002021f, 0.003046f, 0.003477f, -0.001736f, 0.026285f, 0.017878f, 0.012462f, 0.006929f, 0.001136f, -0.005711f, -0.008884f, 0.008473f, -0.025561f, 0.027657f, -0.016602f, 0.004732f, -0.027778f, -0.000698f, 0.026760f, 0.010714f, -0.009039f, 0.017101f, -0.026375f, 0.010998f, 0.005297f, 0.002199f, -0.032555f, -0.009528f, 0.002333f, 0.005623f, 0.021436f, -0.032011f, -0.004054f, -0.010411f, -0.030136f, -0.006347f, 0.007616f, 0.015548f, 0.023141f, 0.018072f, 0.017969f, -0.001174f, -0.011038f, 0.011963f, 0.003825f, -0.006641f, 0.004477f, -0.014541f, 0.023961f, 0.011405f, 0.008311f, -0.012001f, -0.026750f, -0.006899f, 0.000925f, -0.032461f, -0.026215f, -0.006643f, -0.023483f, 0.015615f, 0.006218f, 0.005085f, -0.010653f, -0.011440f, 0.004878f, 0.003649f, 0.002295f, 0.007677f, -0.004278f, 0.005882f, 0.015942f, 0.007440f, 0.002950f, 0.002453f, -0.010014f, -0.008315f, -0.007465f, 0.004883f, -0.002470f, -0.020669f, -0.016508f, -0.001354f, -0.013239f, + -0.011656f, -0.003158f, -0.017004f, -0.010606f, -0.002400f, 0.001220f, -0.002157f, -0.000850f, 0.004467f, -0.003034f, -0.000933f, 0.001216f, 0.029882f, -0.023276f, 0.006286f, -0.003268f, -0.003010f, 0.000577f, 0.008273f, -0.014480f, 0.019433f, -0.005568f, 0.013327f, -0.001257f, -0.010809f, 0.020708f, 0.020387f, 0.014637f, -0.006829f, 0.031365f, 0.011590f, -0.034956f, 0.036100f, 0.003355f, -0.000110f, 0.026160f, 0.001143f, -0.011255f, -0.015157f, 0.025828f, -0.016153f, -0.021448f, 0.020825f, 0.018258f, -0.011864f, -0.028541f, 0.011202f, -0.009738f, 0.003951f, -0.020045f, -0.016533f, -0.006747f, 0.019485f, 0.017621f, 0.002283f, 0.016183f, -0.023393f, 0.007638f, -0.006178f, -0.008593f, 0.011156f, 0.001686f, 0.003396f, -0.032580f, -0.008987f, 0.018317f, -0.023410f, -0.005955f, -0.029361f, -0.005330f, -0.010991f, 0.005079f, -0.007125f, 0.003454f, 0.002982f, -0.000860f, 0.002903f, -0.007693f, -0.026093f, -0.004759f, 0.013242f, -0.001612f, 0.009170f, -0.009867f, -0.022909f, -0.003888f, 0.005000f, 0.014713f, 0.003499f, 0.008134f, -0.000896f, 0.003449f, 0.005444f, 0.003532f, -0.008001f, 0.002205f, + -0.003311f, 0.003625f, -0.006389f, 0.003962f, 0.001479f, 0.000643f, -0.000775f, -0.005270f, -0.002810f, 0.027127f, 0.002149f, -0.007804f, -0.019319f, -0.000590f, -0.009199f, 0.007276f, -0.015946f, 0.010248f, 0.006551f, -0.013934f, -0.014294f, 0.021732f, -0.025478f, -0.000935f, 0.016558f, -0.018428f, 0.006025f, 0.021240f, -0.016782f, 0.014589f, 0.010732f, 0.015609f, -0.025516f, 0.022159f, -0.025622f, 0.007806f, -0.019490f, 0.002506f, -0.009938f, 0.017461f, 0.000596f, 0.010712f, 0.005555f, -0.018187f, -0.011067f, -0.025166f, 0.014779f, -0.017027f, 0.014861f, -0.020488f, -0.023337f, -0.039126f, 0.003886f, 0.020634f, -0.003077f, -0.000543f, 0.006566f, 0.017793f, -0.005947f, 0.004821f, -0.021583f, 0.005564f, 0.028812f, -0.002845f, 0.026128f, 0.034161f, -0.000156f, 0.005768f, 0.007077f, -0.014512f, 0.007631f, -0.017594f, -0.000820f, -0.018061f, -0.017498f, 0.001083f, -0.006588f, -0.029713f, 0.020240f, 0.000527f, 0.015074f, -0.017517f, -0.008899f, -0.006672f, 0.007763f, -0.000125f, -0.004577f, -0.004586f, -0.002931f, -0.001099f, 0.001782f, 0.001963f, -0.003465f, 0.004083f, -0.003985f, -0.003988f, + -0.002175f, 0.005746f, 0.004323f, 0.004782f, -0.002249f, 0.003613f, -0.061291f, 0.015570f, 0.022971f, 0.006388f, -0.026550f, -0.003870f, 0.043249f, -0.049661f, -0.001239f, -0.008357f, -0.032473f, -0.008168f, -0.021997f, 0.008097f, 0.008048f, 0.019029f, 0.007722f, -0.025944f, -0.009198f, 0.018761f, -0.029619f, -0.008387f, -0.031678f, 0.027093f, 0.008144f, 0.021202f, 0.036089f, -0.012663f, -0.007587f, -0.005902f, -0.018042f, 0.017351f, -0.008451f, -0.021472f, -0.024111f, -0.004174f, 0.009285f, -0.000617f, 0.004955f, 0.005948f, 0.014067f, -0.006107f, -0.000631f, 0.010478f, -0.010013f, 0.020488f, 0.023262f, 0.021989f, -0.017736f, 0.002456f, -0.005509f, 0.010565f, 0.043853f, 0.032950f, 0.062765f, 0.005065f, 0.024836f, 0.020158f, -0.009497f, -0.002066f, -0.003249f, -0.005758f, 0.007957f, 0.001946f, 0.022621f, 0.017111f, -0.007618f, -0.002206f, -0.013378f, -0.026228f, 0.010618f, -0.000271f, 0.009037f, -0.001803f, -0.018166f, -0.002553f, 0.002782f, -0.010047f, 0.006192f, -0.006362f, -0.008800f, 0.000370f, -0.008818f, 0.000081f, -0.002418f, -0.002066f, 0.000103f, 0.001480f, -0.005495f, 0.000908f, + 0.000393f, 0.000101f, 0.002256f, 0.095428f, 0.046171f, 0.016613f, 0.014991f, -0.022361f, 0.014845f, -0.018015f, 0.022105f, 0.018151f, 0.017030f, 0.004542f, -0.030910f, -0.017192f, 0.034230f, 0.006121f, -0.001725f, -0.006965f, 0.038286f, -0.040987f, -0.017097f, -0.010117f, -0.002834f, -0.028967f, 0.007195f, -0.025003f, -0.013855f, 0.004397f, -0.015755f, 0.023811f, -0.022500f, -0.009592f, -0.005361f, 0.025434f, -0.041642f, -0.007838f, -0.030935f, -0.000671f, 0.000067f, -0.027140f, 0.004706f, 0.021729f, 0.011881f, -0.000282f, -0.012640f, 0.001375f, 0.013150f, -0.016994f, 0.034827f, 0.047272f, -0.002753f, -0.029028f, -0.027347f, 0.019620f, -0.006784f, -0.006128f, 0.040691f, -0.008390f, 0.013125f, -0.000885f, 0.025661f, -0.004877f, 0.003523f, -0.004659f, -0.015923f, -0.044746f, -0.026676f, -0.003992f, -0.011873f, -0.030768f, -0.020198f, 0.011902f, 0.026317f, -0.001916f, -0.003152f, -0.002548f, -0.003996f, 0.014548f, 0.009252f, 0.002290f, -0.008577f, 0.010282f, -0.005591f, -0.020307f, -0.019491f, 0.002811f, 0.013727f, -0.015770f, 0.010762f, -0.000765f, -0.005944f, -0.005083f, 0.000625f, -0.008690f, + -0.006725f, 0.000675f, -0.002469f, -0.001058f, -0.004056f} +}; +const float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS][2885]={ {-0.004498f, 0.002497f, -0.001443f, 0.000619f, -0.000813f, 0.000186f, -0.000598f, -0.000162f, 0.000026f, 0.001200f, -0.000788f, 0.000523f, -0.001278f, 0.000943f, -0.001443f, -0.001961f, -0.001724f, 0.000396f, -0.000185f, 0.000270f, 0.000037f, -0.000892f, 0.000515f, 0.000893f, -0.000505f, 0.000715f, -0.000113f, -0.000312f, -0.000632f, -0.000114f, 0.000186f, 0.000502f, -0.000366f, 0.000751f, -0.000305f, 0.000479f, 0.000699f, -0.000511f, -0.000492f, 0.000032f, -0.000517f, 0.000139f, 0.000013f, -0.000237f, 0.000514f, 0.000084f, -0.000239f, 0.001718f, -0.001776f, -0.000315f, -0.000381f, -0.000400f, -0.000137f, -0.000018f, -0.000346f, -0.000233f, -0.000007f, 0.000084f, -0.000256f, 0.000153f, -0.000558f, -0.000152f, -0.000099f, 0.000343f, -0.001888f, -0.000167f, 0.000378f, -0.000169f, -0.000239f, 0.000174f, 0.000025f, 0.000143f, 0.000854f, -0.000408f, -0.000287f, -0.000452f, -0.000096f, 0.000265f, 0.000378f, -0.000387f, -0.000308f, 0.000471f, -0.000434f, -0.000619f, -0.000080f, -0.000161f, 0.000209f, -0.000177f, -0.000190f, 0.000114f, 0.000183f, -0.000378f, 0.000117f, 0.000157f, -0.006029f, -0.004095f, + -0.001664f, -0.001900f, -0.001062f, -0.000994f, -0.000942f, -0.000426f, -0.001136f, -0.000895f, -0.000391f, -0.000698f, -0.000092f, -0.000251f, -0.000609f, -0.000823f, -0.000922f, -0.000363f, -0.000535f, -0.000929f, -0.000122f, -0.001163f, 0.000003f, -0.000088f, -0.000162f, -0.000704f, -0.000122f, -0.000532f, 0.000004f, -0.000687f, -0.000439f, 0.000237f, -0.000506f, 0.000089f, -0.001174f, -0.000216f, 0.000572f, 0.000351f, -0.000022f, -0.000171f, -0.000338f, 0.000096f, 0.000106f, 0.000544f, -0.000327f, -0.000054f, -0.000169f, -0.007934f, -0.000424f, 0.001012f, -0.000009f, 0.000297f, -0.000047f, 0.000000f, -0.000627f, 0.000669f, 0.000275f, 0.000807f, 0.000589f, 0.001662f, 0.001235f, 0.000087f, -0.000651f, -0.000387f, -0.000147f, 0.000305f, -0.000215f, -0.001481f, -0.001316f, -0.000693f, -0.000196f, 0.000057f, 0.000196f, 0.000266f, -0.000044f, 0.000039f, 0.000171f, -0.000316f, -0.000033f, -0.000049f, -0.000899f, 0.000527f, 0.000229f, -0.000107f, -0.000000f, -0.000354f, -0.000495f, 0.000307f, 0.000130f, -0.000336f, 0.000325f, 0.000262f, 0.000394f, -0.000178f, 0.008893f, 0.006234f, 0.001233f, 0.002409f, + 0.000508f, 0.000792f, 0.001978f, 0.001008f, 0.000321f, 0.001178f, 0.000490f, -0.000528f, -0.000250f, 0.000405f, 0.000695f, -0.001211f, -0.000152f, -0.000730f, 0.001613f, 0.000791f, 0.000420f, 0.000792f, 0.000417f, 0.000407f, 0.000030f, -0.000084f, -0.000384f, 0.000622f, 0.000771f, 0.000642f, 0.000820f, 0.000973f, 0.000596f, 0.001424f, 0.000335f, -0.000086f, 0.000521f, 0.000090f, -0.000237f, -0.000118f, -0.000210f, -0.000287f, 0.000020f, 0.000659f, 0.000172f, 0.000105f, 0.000400f, 0.013276f, 0.005619f, 0.001722f, 0.001533f, 0.001103f, 0.000653f, 0.000233f, 0.000034f, 0.001472f, 0.000277f, 0.000825f, 0.001080f, 0.000598f, -0.000094f, -0.000385f, 0.002300f, -0.000190f, -0.001283f, -0.000707f, 0.000560f, 0.000051f, 0.001224f, 0.000426f, 0.000138f, -0.000209f, -0.000592f, -0.000144f, -0.000279f, 0.000563f, -0.000108f, 0.000245f, 0.000041f, 0.000105f, -0.000311f, 0.000461f, 0.001596f, 0.001037f, 0.001056f, 0.000983f, 0.000783f, 0.000455f, 0.000299f, 0.000203f, 0.000515f, -0.000424f, 0.000310f, -0.000190f, 0.004369f, -0.004604f, -0.001390f, -0.001989f, -0.001717f, -0.000939f, + -0.000275f, 0.000637f, -0.000638f, 0.000065f, -0.001701f, 0.000578f, -0.000618f, -0.001548f, 0.000411f, -0.001108f, -0.001471f, -0.001059f, 0.001411f, 0.001055f, -0.000494f, 0.000533f, -0.000974f, 0.000372f, -0.001774f, 0.000085f, 0.000295f, -0.000310f, -0.000414f, 0.000363f, -0.001404f, -0.000647f, 0.000184f, -0.000501f, -0.000413f, -0.000330f, 0.000117f, 0.000139f, 0.000711f, 0.000031f, 0.001225f, -0.000485f, -0.000334f, -0.000397f, -0.000603f, -0.000200f, -0.000301f, 0.000159f, -0.000520f, -0.000817f, -0.000124f, -0.015760f, -0.007972f, -0.002877f, -0.002233f, -0.002459f, -0.001522f, -0.002128f, -0.001364f, -0.002316f, -0.000407f, -0.001057f, -0.000257f, 0.000086f, -0.000945f, -0.000282f, 0.000160f, -0.000008f, -0.001443f, -0.000985f, -0.000648f, 0.000116f, -0.001949f, 0.000173f, -0.000879f, -0.001763f, 0.000159f, -0.000046f, 0.000130f, -0.000067f, -0.000606f, -0.000495f, 0.000029f, -0.000157f, -0.000013f, -0.000676f, 0.000030f, 0.000151f, 0.000535f, 0.000174f, -0.000668f, 0.000361f, -0.000668f, 0.000432f, -0.001155f, -0.000820f, 0.000184f, -0.000671f, 0.000041f, -0.000271f, -0.000926f, -0.000304f, + -0.009327f, 0.004900f, 0.002036f, 0.000775f, 0.001246f, 0.000249f, 0.000323f, 0.001123f, 0.001224f, 0.000686f, 0.000810f, -0.000612f, -0.000281f, -0.000963f, 0.001175f, 0.000264f, 0.000200f, 0.001639f, 0.000038f, -0.001073f, 0.001915f, -0.001264f, 0.000141f, 0.001611f, -0.000496f, 0.000435f, 0.000192f, -0.000020f, -0.000815f, -0.000174f, 0.000427f, 0.000477f, 0.000064f, -0.000268f, 0.000018f, -0.000547f, 0.001807f, 0.000173f, -0.000042f, -0.000699f, -0.000374f, -0.000445f, -0.000447f, 0.001003f, 0.000931f, -0.000226f, 0.000080f, -0.000044f, 0.000272f, 0.000087f, -0.000075f, -0.000176f, 0.000212f, 0.000166f, -0.000288f, -0.000239f, 0.000039f, 0.000235f, 0.014030f, 0.005938f, 0.001607f, 0.003199f, 0.001882f, 0.000785f, 0.001416f, 0.001190f, 0.000018f, 0.000866f, 0.001406f, 0.000308f, 0.000019f, 0.000698f, 0.001975f, -0.000676f, -0.000343f, -0.001562f, 0.000411f, 0.001774f, 0.000771f, 0.000071f, -0.000992f, -0.000553f, -0.000417f, 0.001870f, 0.000601f, 0.000973f, 0.000567f, -0.000903f, -0.001421f, 0.001621f, 0.000912f, -0.001011f, -0.000461f, 0.001575f, 0.001352f, -0.000077f, + 0.000349f, -0.000174f, 0.000714f, 0.000437f, -0.000138f, 0.000315f, -0.000542f, -0.000269f, 0.000871f, -0.000458f, -0.000331f, 0.000906f, 0.000797f, 0.000427f, 0.000173f, 0.000184f, 0.000210f, 0.000645f, 0.000372f, 0.001021f, 0.016603f, 0.003577f, 0.002787f, 0.001200f, 0.001292f, 0.000518f, 0.001329f, 0.001524f, 0.002480f, 0.001491f, -0.000441f, 0.001919f, -0.000350f, 0.000505f, 0.000455f, 0.001622f, 0.002440f, 0.001541f, -0.000395f, 0.002686f, -0.000490f, -0.000293f, -0.001399f, 0.000371f, -0.000400f, 0.000430f, 0.000751f, -0.000830f, -0.001111f, -0.000483f, 0.000245f, -0.000922f, -0.000276f, 0.000405f, 0.000624f, -0.001079f, -0.000888f, -0.000390f, 0.000373f, -0.000017f, 0.000305f, -0.000397f, 0.000015f, -0.000271f, -0.000338f, 0.000426f, -0.000593f, 0.000580f, -0.000638f, -0.000238f, -0.000480f, 0.000102f, -0.000159f, 0.000654f, 0.000319f, -0.000058f, 0.000931f, 0.000309f, 0.001926f, -0.007360f, -0.002353f, -0.002634f, -0.001687f, 0.000448f, -0.000413f, -0.001584f, 0.000908f, 0.000060f, 0.001115f, -0.000131f, 0.000122f, -0.001727f, -0.001207f, -0.000806f, -0.001243f, 0.000100f, + -0.001323f, -0.002572f, 0.000513f, 0.000294f, -0.001185f, -0.000268f, -0.001075f, 0.000220f, 0.000368f, -0.000217f, -0.002641f, -0.000757f, 0.000172f, -0.000303f, 0.000230f, 0.000703f, -0.001880f, -0.000573f, -0.001174f, 0.000602f, -0.000143f, -0.000110f, 0.001235f, -0.001259f, -0.000082f, 0.000375f, -0.000157f, -0.000422f, 0.000598f, 0.000305f, -0.000747f, -0.000928f, -0.001459f, -0.000234f, -0.001115f, -0.000916f, -0.000476f, -0.000638f, -0.000372f, -0.000185f, -0.000342f, -0.000576f, -0.000756f, -0.000445f, 0.000272f, 0.000500f, -0.000089f, -0.017254f, -0.005829f, -0.003546f, -0.000875f, -0.001846f, -0.000048f, -0.001008f, -0.001260f, -0.001601f, 0.001981f, 0.000025f, -0.000730f, -0.000206f, -0.002842f, -0.001650f, -0.001375f, 0.002316f, -0.001946f, -0.004179f, 0.000367f, 0.000489f, 0.000349f, -0.001551f, -0.000382f, 0.000855f, -0.001889f, -0.000219f, -0.001928f, -0.000604f, 0.001113f, -0.000959f, 0.000290f, 0.002103f, 0.000255f, -0.000461f, -0.000492f, 0.000555f, 0.000682f, 0.000511f, -0.000610f, -0.000139f, 0.000708f, 0.000915f, 0.000588f, 0.000295f, -0.001768f, 0.000318f, -0.000063f, -0.000929f, + -0.000315f, 0.000155f, -0.000219f, -0.000939f, -0.000585f, -0.000974f, -0.000251f, 0.000027f, 0.000157f, -0.000166f, -0.000643f, -0.000142f, -0.000495f, -0.000065f, -0.000531f, -0.000025f, -0.011470f, 0.002683f, 0.000139f, -0.001362f, 0.002020f, -0.001262f, -0.001032f, 0.000551f, -0.001962f, -0.001120f, -0.000441f, 0.000837f, -0.001554f, 0.002118f, 0.000016f, -0.000021f, 0.000944f, 0.001006f, 0.001498f, -0.000128f, 0.002074f, 0.003056f, 0.002154f, 0.000726f, 0.001839f, -0.000571f, 0.001158f, -0.001342f, -0.001433f, -0.000552f, 0.000146f, 0.000951f, -0.000766f, -0.001287f, -0.000741f, 0.000004f, 0.000791f, -0.001243f, 0.000897f, 0.000353f, 0.000686f, -0.000290f, -0.001192f, -0.001536f, -0.001895f, 0.000526f, -0.000981f, 0.000546f, -0.002007f, -0.000538f, 0.000867f, -0.001215f, 0.000182f, -0.000843f, 0.000576f, -0.000246f, 0.000559f, 0.000174f, -0.000376f, 0.000005f, -0.000821f, 0.001527f, 0.000605f, 0.001413f, 0.000568f, 0.007665f, 0.012616f, 0.003680f, 0.003271f, 0.004575f, 0.003684f, 0.000745f, 0.002920f, 0.002627f, 0.001411f, 0.005545f, 0.001308f, 0.000959f, 0.002384f, 0.002236f, + 0.001159f, 0.001005f, 0.000576f, 0.000945f, -0.000718f, 0.002815f, -0.000751f, 0.000297f, -0.000880f, 0.001794f, 0.000085f, -0.000427f, 0.001459f, 0.001770f, 0.000612f, 0.002340f, -0.001638f, -0.002677f, -0.000612f, -0.000127f, 0.000587f, -0.000156f, 0.001166f, -0.001051f, 0.001062f, 0.002360f, 0.001002f, -0.002040f, -0.000429f, 0.001090f, 0.000414f, -0.000982f, 0.001466f, 0.000609f, 0.000869f, 0.000996f, 0.001310f, 0.000463f, -0.000364f, 0.000354f, -0.001181f, -0.000278f, 0.001106f, 0.001044f, -0.000569f, 0.000018f, 0.000273f, -0.000467f, 0.000160f, 0.000835f, 0.029028f, 0.002976f, -0.000266f, 0.001787f, -0.000029f, 0.002472f, 0.000054f, 0.000660f, 0.000340f, 0.002606f, 0.001246f, -0.001082f, 0.000902f, 0.001246f, 0.000697f, -0.001585f, -0.003255f, -0.001511f, -0.001353f, 0.000576f, -0.001989f, -0.000359f, -0.000103f, 0.000535f, 0.003633f, 0.001999f, 0.000705f, 0.001442f, -0.002221f, -0.000142f, -0.001152f, -0.000455f, -0.000902f, 0.001351f, -0.000493f, 0.002264f, -0.001017f, -0.000412f, -0.001138f, -0.000522f, -0.001655f, -0.000785f, 0.000412f, 0.000365f, -0.000062f, 0.000019f, + -0.000896f, 0.000523f, 0.001589f, 0.000127f, -0.000815f, 0.000981f, -0.001356f, 0.000605f, 0.000634f, -0.000135f, -0.000403f, -0.000292f, -0.000035f, -0.000257f, 0.000096f, 0.000940f, -0.000078f, -0.000857f, 0.000207f, -0.008441f, -0.010047f, -0.001867f, -0.000561f, -0.000411f, -0.001599f, -0.000660f, 0.003046f, 0.001804f, 0.000640f, 0.000832f, -0.001333f, -0.000266f, 0.002285f, -0.000843f, 0.003722f, -0.002893f, -0.000793f, 0.003036f, -0.000589f, -0.000341f, -0.001769f, 0.002080f, 0.002297f, 0.000042f, 0.002264f, -0.000827f, 0.001001f, -0.000048f, -0.001274f, -0.000201f, -0.001009f, -0.000421f, -0.000657f, 0.001251f, -0.000928f, -0.000222f, -0.001425f, 0.000959f, -0.000743f, 0.002095f, -0.003317f, 0.001389f, 0.001148f, -0.002003f, 0.000036f, -0.001325f, 0.000349f, -0.001508f, 0.000470f, 0.000624f, -0.001918f, -0.000292f, -0.000703f, -0.002848f, -0.001655f, -0.000793f, -0.001422f, -0.000311f, -0.000246f, 0.000151f, -0.001165f, 0.000159f, -0.002244f, 0.000621f, 0.000265f, -0.000776f, 0.000271f, -0.000774f, -0.000216f, -0.000505f, -0.000243f, -0.007445f, -0.004230f, -0.005782f, -0.002930f, -0.003871f, + -0.000410f, 0.003685f, -0.003853f, 0.002957f, 0.001928f, -0.002140f, 0.004254f, -0.000696f, 0.000846f, -0.002789f, -0.000274f, -0.001256f, -0.000154f, -0.000009f, 0.001065f, 0.000483f, 0.002230f, 0.004206f, -0.001125f, 0.000555f, -0.002003f, -0.002144f, -0.001858f, 0.000399f, 0.001781f, -0.000649f, -0.000595f, -0.000591f, -0.001289f, 0.001439f, -0.000442f, -0.000128f, -0.001262f, -0.001038f, -0.000834f, -0.001351f, -0.000094f, -0.000088f, -0.001099f, 0.000702f, -0.001692f, 0.000601f, -0.000976f, -0.000209f, 0.000637f, -0.001294f, 0.001577f, -0.002746f, -0.000829f, 0.000224f, -0.000789f, -0.001481f, 0.000726f, -0.000432f, -0.001616f, 0.002643f, 0.001528f, 0.000337f, 0.000525f, 0.000505f, 0.000671f, -0.001386f, -0.000874f, 0.000311f, -0.000468f, -0.000971f, 0.001024f, -0.020685f, -0.002340f, 0.001651f, -0.001489f, 0.003411f, 0.001609f, -0.004201f, 0.000592f, 0.000687f, -0.001322f, -0.003520f, -0.001270f, -0.000870f, 0.001028f, 0.000236f, -0.003213f, -0.001240f, -0.001700f, -0.003135f, -0.002599f, -0.006130f, -0.003153f, -0.003587f, -0.004304f, 0.003427f, -0.002274f, 0.001244f, 0.002611f, -0.001882f, + -0.002908f, -0.001148f, -0.000601f, 0.000689f, 0.001970f, 0.001112f, -0.002403f, -0.003037f, 0.002416f, 0.001478f, 0.001918f, 0.002640f, 0.000418f, -0.000024f, 0.001076f, -0.000139f, -0.001138f, 0.000660f, -0.000599f, -0.000416f, 0.001594f, 0.003961f, -0.001282f, -0.001999f, 0.000961f, -0.001278f, -0.000084f, 0.002036f, -0.003892f, -0.000066f, -0.001258f, -0.000225f, -0.000046f, 0.000014f, -0.000430f, 0.000775f, -0.001132f, 0.001416f, 0.001587f, 0.000644f, -0.000053f, -0.000019f, -0.001286f, 0.016567f, 0.014428f, 0.003922f, 0.008770f, 0.002441f, 0.005047f, -0.000808f, -0.000810f, 0.002470f, 0.003315f, 0.001777f, -0.005739f, -0.001887f, 0.003568f, 0.004052f, -0.001495f, -0.001931f, 0.000651f, 0.001697f, 0.001904f, 0.000301f, -0.002987f, -0.006390f, -0.002411f, 0.003515f, -0.000313f, 0.003612f, -0.000854f, -0.001125f, 0.000725f, -0.002959f, -0.001728f, -0.001712f, 0.003292f, -0.004083f, -0.002831f, 0.000759f, 0.000687f, -0.001035f, -0.000130f, -0.001154f, 0.001233f, 0.001701f, 0.001443f, 0.003275f, 0.001895f, 0.000080f, -0.002658f, 0.002529f, -0.000233f, 0.001414f, -0.001297f, 0.000995f, + 0.001986f, -0.000275f, -0.000526f, -0.001211f, -0.001464f, 0.000930f, 0.000208f, 0.001304f, -0.001265f, 0.001094f, 0.002579f, -0.000510f, -0.001403f, 0.001824f, 0.002339f, -0.000914f, 0.001049f, 0.001200f, 0.000943f, 0.002259f, 0.001912f, 0.020130f, 0.003695f, -0.003884f, 0.003213f, 0.002159f, -0.003854f, -0.000817f, 0.001893f, 0.000148f, 0.000573f, -0.000280f, -0.000847f, -0.004176f, -0.004161f, 0.001850f, 0.003831f, 0.004031f, -0.004009f, -0.007998f, 0.001068f, -0.000109f, -0.003270f, -0.004086f, -0.000780f, 0.002059f, -0.001472f, 0.003050f, 0.004826f, -0.001824f, -0.001655f, -0.000651f, -0.000783f, -0.000947f, -0.007530f, 0.003906f, 0.003495f, -0.000135f, 0.002231f, -0.002264f, -0.000782f, -0.002060f, 0.002949f, 0.003220f, 0.000294f, -0.000806f, -0.001239f, 0.001793f, 0.000366f, -0.001054f, -0.001960f, 0.000001f, 0.001526f, -0.002426f, -0.001571f, -0.001324f, 0.000342f, 0.000768f, -0.003118f, 0.001547f, 0.003297f, -0.002755f, -0.000106f, -0.000670f, -0.000543f, -0.000031f, 0.000265f, 0.000179f, -0.000266f, 0.000592f, -0.000980f, -0.001810f, -0.002194f, -0.000946f, -0.000592f, -0.001168f, + -0.002093f, -0.001642f, -0.000476f, 0.001449f, -0.000681f, -0.005544f, -0.003592f, 0.000479f, 0.005016f, -0.005053f, 0.003596f, 0.001585f, 0.000809f, 0.000972f, 0.000889f, 0.003205f, 0.005293f, 0.000096f, 0.001614f, 0.000536f, -0.004501f, -0.004160f, 0.004042f, 0.000496f, -0.004652f, 0.002711f, -0.003969f, 0.000609f, 0.004935f, -0.000363f, -0.001317f, 0.005556f, 0.000897f, 0.000332f, 0.000484f, 0.000116f, 0.000528f, -0.002518f, 0.001500f, 0.002208f, 0.003721f, -0.002990f, -0.001434f, 0.000522f, 0.000536f, -0.001401f, -0.002633f, 0.001642f, -0.000948f, 0.001134f, 0.000649f, -0.000977f, -0.000839f, 0.000325f, 0.001702f, -0.001331f, -0.000544f, -0.000341f, 0.000986f, -0.002743f, -0.001236f, 0.001193f, 0.000286f, -0.000963f, -0.000450f, 0.001073f, -0.001117f, 0.000299f, -0.000749f, -0.000244f, 0.000929f, 0.000210f, 0.000550f, -0.002376f, -0.001634f, 0.000565f, -0.021614f, -0.019799f, -0.004457f, -0.009161f, -0.008090f, -0.004547f, -0.001413f, -0.003408f, -0.004157f, 0.002828f, 0.000721f, -0.000939f, 0.004681f, 0.001748f, 0.005630f, 0.004403f, 0.001229f, 0.001773f, 0.002032f, -0.008658f, + 0.004057f, -0.000653f, -0.001871f, -0.001609f, -0.005168f, -0.001574f, -0.001817f, 0.004946f, -0.001686f, -0.002932f, -0.001505f, 0.000798f, -0.000682f, -0.000972f, 0.001048f, -0.001292f, -0.000887f, 0.003028f, -0.002999f, -0.000248f, -0.000999f, 0.005437f, 0.002112f, 0.002179f, -0.004218f, 0.000330f, 0.003672f, -0.001945f, 0.000843f, 0.000025f, 0.000858f, 0.000029f, 0.000266f, -0.000280f, 0.002322f, -0.000305f, -0.000819f, 0.001728f, -0.001272f, 0.000970f, 0.002016f, -0.000964f, -0.001483f, 0.000640f, 0.000740f, -0.001551f, -0.000685f, -0.002863f, -0.002317f, 0.000750f, -0.000311f, -0.000507f, -0.000103f, 0.000374f, -0.000235f, -0.001820f, -0.000907f, -0.013591f, 0.028623f, 0.017842f, 0.005832f, 0.001671f, 0.002042f, 0.001944f, 0.003285f, 0.002734f, 0.006125f, 0.012000f, 0.000771f, 0.001297f, 0.002714f, 0.002396f, 0.003193f, -0.002332f, 0.011812f, 0.008279f, -0.007697f, 0.005674f, 0.001152f, -0.001329f, 0.002905f, 0.007010f, -0.006559f, -0.001967f, 0.000629f, -0.005592f, -0.003674f, -0.004015f, 0.008146f, -0.000425f, -0.001345f, 0.001004f, 0.000533f, -0.002473f, -0.006383f, 0.004423f, + 0.003752f, -0.001161f, 0.002088f, 0.004538f, -0.002972f, 0.002445f, 0.000348f, -0.001259f, 0.003721f, 0.003041f, 0.000812f, 0.000361f, 0.000460f, 0.002439f, 0.003615f, -0.000027f, -0.000549f, -0.000091f, -0.001028f, 0.002419f, 0.000608f, -0.001058f, -0.001145f, -0.000955f, 0.001971f, 0.000818f, 0.004363f, -0.001342f, 0.001619f, -0.001000f, 0.001158f, -0.001793f, -0.000526f, 0.000477f, -0.000855f, -0.001267f, 0.000202f, 0.000161f, 0.000643f, 0.001110f, 0.030976f, -0.010950f, -0.010656f, 0.004799f, 0.001244f, -0.004102f, -0.003517f, -0.005716f, -0.005565f, -0.004156f, -0.003428f, 0.005073f, 0.001247f, 0.000572f, -0.002851f, -0.002582f, -0.008999f, -0.000056f, -0.003524f, -0.006268f, 0.005240f, 0.003404f, 0.001125f, 0.003161f, 0.000956f, -0.001136f, -0.001949f, -0.000214f, -0.001638f, 0.002580f, 0.004501f, -0.004761f, -0.001679f, 0.000026f, 0.002486f, 0.006118f, 0.001913f, 0.008220f, -0.004177f, 0.002566f, 0.006949f, 0.004019f, -0.003368f, -0.001062f, 0.000871f, -0.001787f, 0.003046f, -0.000501f, 0.000241f, 0.004361f, 0.002490f, 0.000667f, 0.000501f, -0.000146f, -0.001759f, -0.000089f, + 0.000622f, -0.002011f, -0.001023f, 0.001916f, -0.000664f, -0.003780f, -0.000446f, 0.000078f, -0.000547f, -0.003934f, 0.001122f, 0.000770f, 0.001085f, 0.001058f, -0.000704f, -0.001651f, -0.000440f, -0.000848f, 0.003285f, 0.001327f, -0.001122f, 0.000854f, -0.000176f, 0.000641f, 0.000166f, 0.009962f, 0.018836f, 0.007446f, 0.005028f, 0.005949f, -0.001744f, 0.001942f, -0.005405f, 0.009422f, 0.003676f, 0.009053f, 0.002677f, 0.003480f, -0.008239f, 0.010318f, 0.015206f, 0.001984f, 0.009855f, -0.001928f, -0.008021f, -0.007875f, 0.007228f, -0.002276f, 0.005770f, 0.001127f, 0.002307f, -0.004380f, 0.004465f, -0.001496f, -0.001606f, 0.007451f, 0.005129f, -0.003810f, 0.006899f, 0.000844f, 0.001256f, -0.001321f, -0.005214f, 0.001521f, 0.000384f, -0.002825f, -0.003285f, 0.003130f, 0.004289f, 0.001485f, -0.001515f, 0.002104f, 0.000163f, 0.004648f, -0.002756f, -0.000320f, -0.004543f, 0.000613f, 0.004444f, 0.003074f, -0.002064f, 0.000069f, 0.001562f, -0.003949f, -0.000303f, -0.002668f, -0.001534f, 0.000929f, 0.001064f, 0.002801f, -0.003184f, 0.001470f, -0.003663f, 0.000412f, 0.004544f, 0.001688f, + 0.000898f, -0.002784f, 0.000429f, 0.000437f, -0.004737f, -0.001163f, 0.000555f, 0.000904f, 0.001882f, 0.000860f, -0.000024f, -0.022116f, -0.001125f, -0.005058f, 0.006331f, -0.004847f, 0.005221f, 0.000073f, 0.004199f, -0.000657f, 0.003631f, -0.011096f, 0.003309f, -0.001378f, -0.003901f, 0.001850f, -0.004768f, 0.002882f, -0.004815f, -0.002666f, -0.010724f, 0.006052f, 0.012993f, -0.005162f, -0.001653f, -0.001568f, -0.002056f, 0.001879f, 0.002625f, 0.003657f, -0.009536f, 0.002774f, -0.005920f, -0.001804f, -0.000281f, 0.004828f, 0.001921f, -0.002569f, 0.001082f, 0.000953f, 0.003560f, 0.003496f, -0.005946f, -0.002070f, 0.000902f, -0.004463f, -0.003856f, -0.000837f, -0.002746f, 0.001085f, 0.003381f, 0.000349f, 0.000612f, -0.000891f, 0.003153f, 0.008329f, 0.004787f, -0.005279f, 0.001075f, 0.001811f, -0.002537f, 0.002869f, 0.000801f, -0.003418f, -0.000287f, 0.003693f, 0.000432f, 0.003530f, -0.004865f, -0.001245f, 0.002961f, 0.000036f, -0.001583f, -0.003507f, -0.000235f, -0.001911f, 0.002833f, -0.000905f, 0.001778f, -0.000947f, -0.000338f, -0.040541f, -0.015093f, 0.008127f, 0.003050f, -0.005283f, + 0.005838f, 0.004652f, 0.007680f, -0.001920f, -0.003222f, 0.006545f, 0.000385f, -0.004552f, 0.009123f, -0.010193f, -0.013061f, -0.006298f, -0.006959f, 0.004531f, 0.006743f, -0.000234f, 0.001823f, 0.010388f, 0.004723f, -0.010687f, -0.004679f, -0.006604f, 0.002069f, -0.009928f, -0.008475f, -0.000599f, 0.001450f, -0.003845f, -0.004001f, -0.006079f, -0.002997f, -0.005569f, -0.005261f, -0.002095f, 0.000587f, -0.002034f, -0.000191f, -0.003777f, -0.000444f, -0.002909f, -0.006131f, 0.013457f, 0.001229f, 0.003134f, -0.005384f, 0.003518f, -0.000220f, 0.001769f, -0.004295f, -0.000241f, -0.000582f, -0.003744f, -0.002169f, -0.001738f, 0.004535f, 0.003151f, 0.003580f, 0.002083f, 0.002809f, -0.000680f, 0.000184f, -0.003245f, -0.000439f, -0.000210f, -0.000103f, 0.004101f, 0.001277f, 0.002383f, 0.002691f, -0.001931f, -0.004342f, 0.001872f, -0.001575f, -0.000851f, 0.001986f, 0.005275f, -0.000501f, 0.021178f, 0.007834f, 0.017059f, 0.002734f, 0.001127f, -0.006794f, 0.002609f, 0.010275f, 0.003833f, 0.000795f, 0.006858f, -0.006094f, -0.002755f, 0.005644f, -0.004260f, 0.002006f, 0.009828f, 0.003224f, 0.001345f, + 0.003198f, -0.001783f, 0.004343f, -0.003239f, 0.000182f, 0.001682f, 0.000645f, -0.002492f, -0.002629f, 0.001082f, 0.010197f, -0.003252f, 0.002585f, -0.009303f, -0.004907f, 0.004297f, 0.010744f, -0.008163f, 0.000151f, 0.005173f, 0.001381f, 0.001993f, -0.006690f, -0.002329f, -0.005768f, -0.010206f, -0.002614f, -0.005654f, -0.005925f, 0.004910f, 0.002041f, 0.001730f, -0.003421f, -0.002104f, -0.000601f, -0.009792f, -0.000823f, 0.005577f, -0.003800f, 0.004488f, 0.009200f, 0.001445f, 0.006129f, 0.004036f, 0.000448f, -0.001751f, 0.005336f, -0.006538f, -0.000200f, -0.000325f, 0.004271f, 0.002085f, 0.003946f, 0.000223f, 0.004366f, -0.000188f, 0.000999f, 0.000729f, 0.004644f, 0.000115f, 0.000169f, 0.004140f, -0.002063f, 0.002614f, 0.001021f, 0.000773f, -0.001183f, 0.025902f, -0.005789f, -0.007781f, 0.001134f, 0.006061f, 0.004689f, 0.005068f, -0.001567f, 0.005456f, 0.001541f, -0.006189f, -0.012786f, 0.008612f, 0.002149f, 0.006268f, 0.003535f, -0.003233f, 0.001365f, -0.004710f, -0.008404f, 0.008737f, -0.005505f, -0.010160f, 0.000975f, -0.001550f, 0.001153f, -0.000885f, -0.001158f, -0.002476f, + -0.004197f, 0.003174f, 0.006831f, -0.009899f, 0.009705f, -0.008353f, -0.011196f, 0.001219f, 0.002863f, -0.006115f, 0.004821f, -0.000744f, 0.003021f, -0.005245f, -0.002775f, 0.009307f, 0.003650f, 0.009423f, 0.002371f, 0.000848f, 0.002861f, 0.000118f, 0.000260f, 0.005006f, -0.000509f, 0.001004f, -0.004421f, -0.002810f, -0.002651f, 0.003570f, -0.003454f, -0.002732f, 0.005447f, -0.000014f, 0.006110f, 0.001093f, -0.004597f, 0.007557f, 0.005687f, -0.000323f, 0.003682f, -0.003645f, -0.006314f, 0.002551f, -0.002361f, -0.004341f, 0.000312f, 0.004110f, 0.005305f, -0.001877f, 0.001605f, 0.002760f, -0.000431f, 0.001271f, -0.005463f, 0.002223f, 0.001796f, -0.002537f, 0.021640f, 0.026259f, -0.003985f, 0.000114f, -0.013188f, -0.001545f, -0.009610f, -0.007271f, -0.002258f, -0.004986f, 0.007498f, -0.000042f, 0.005828f, -0.012399f, 0.010318f, -0.007825f, 0.010536f, 0.000329f, 0.008377f, -0.003052f, 0.010545f, 0.003408f, -0.004944f, 0.002171f, -0.007405f, 0.004906f, -0.004103f, 0.011774f, 0.003574f, 0.007725f, -0.012869f, -0.007441f, -0.003117f, -0.006588f, -0.002688f, -0.004520f, 0.000474f, 0.015932f, + -0.007327f, 0.007992f, 0.013591f, 0.001881f, 0.006008f, 0.000043f, -0.002978f, -0.006355f, -0.004763f, 0.000637f, -0.003421f, 0.008136f, -0.005237f, 0.003712f, 0.009945f, -0.001336f, -0.000758f, -0.000826f, 0.008145f, 0.008707f, 0.002798f, -0.004091f, -0.003497f, -0.002175f, 0.003478f, -0.008039f, 0.001565f, -0.001467f, -0.002143f, 0.000083f, 0.005348f, 0.000442f, 0.007548f, 0.006824f, 0.001421f, 0.001616f, -0.003193f, -0.000191f, 0.007759f, -0.001021f, 0.000521f, 0.003201f, -0.004043f, 0.000052f, -0.004637f, -0.005146f, 0.000810f, 0.000714f, -0.000959f, -0.020425f, -0.018446f, 0.008261f, -0.002511f, 0.010202f, -0.005832f, -0.004674f, -0.006947f, -0.005559f, -0.002679f, -0.016094f, -0.006001f, 0.006316f, 0.008633f, 0.003680f, -0.011339f, -0.003112f, -0.005474f, 0.004875f, 0.016250f, 0.009228f, 0.003928f, 0.000737f, 0.001180f, 0.000948f, 0.002812f, 0.008537f, 0.000633f, 0.002323f, -0.004850f, 0.000503f, -0.006929f, 0.002803f, 0.003319f, 0.006213f, 0.000750f, -0.004052f, -0.002132f, 0.008159f, -0.003776f, 0.003158f, 0.001613f, 0.003041f, 0.010241f, -0.005588f, -0.008711f, 0.003393f, + 0.007295f, 0.002068f, 0.007292f, 0.008914f, 0.004216f, 0.006223f, 0.002328f, 0.001448f, 0.004807f, 0.014774f, -0.008164f, 0.000133f, 0.002389f, 0.001442f, -0.006334f, -0.000975f, 0.004856f, 0.000063f, -0.005680f, 0.002402f, 0.010612f, -0.008495f, 0.002807f, -0.008036f, 0.004725f, 0.003365f, 0.001300f, 0.000469f, -0.003869f, -0.003695f, 0.007467f, 0.004191f, 0.001520f, -0.002127f, 0.005233f, -0.000592f, 0.000015f, -0.003481f, 0.003858f, 0.001595f, -0.041169f, -0.014506f, -0.000826f, -0.004220f, -0.010078f, 0.006115f, 0.008401f, 0.013904f, 0.004702f, 0.008703f, -0.008079f, -0.017358f, 0.008134f, -0.004181f, 0.000529f, -0.009395f, 0.009237f, -0.005594f, -0.000338f, 0.008389f, -0.023443f, 0.002162f, 0.012337f, -0.022952f, -0.005946f, -0.008204f, 0.001198f, 0.000739f, 0.005681f, -0.006465f, 0.007499f, 0.000942f, -0.011887f, -0.006287f, 0.001507f, -0.001652f, -0.005844f, 0.005106f, 0.014015f, 0.002858f, 0.003940f, -0.002354f, -0.003380f, 0.008005f, 0.001569f, -0.004203f, -0.019920f, -0.003309f, 0.002608f, -0.010267f, 0.004900f, 0.003972f, 0.000894f, -0.007965f, -0.006930f, -0.008485f, + 0.018039f, 0.004637f, -0.002658f, 0.003347f, -0.015187f, 0.001662f, -0.007068f, -0.008344f, 0.008026f, -0.001490f, 0.000179f, -0.005312f, -0.019024f, 0.002440f, 0.005879f, 0.003219f, -0.001320f, 0.011160f, 0.000451f, -0.004875f, -0.000683f, -0.007558f, 0.011779f, 0.006236f, 0.003348f, -0.002077f, 0.000869f, 0.003629f, -0.003412f, 0.001334f, 0.001685f, 0.000494f, 0.043832f, 0.010993f, 0.011346f, 0.009567f, -0.002749f, 0.000347f, 0.045082f, 0.012977f, -0.003674f, 0.027482f, -0.015377f, 0.011453f, 0.002469f, 0.006993f, 0.011302f, -0.003495f, -0.007787f, 0.008461f, -0.001478f, -0.027212f, 0.007021f, 0.007042f, 0.005827f, 0.012940f, 0.008275f, 0.008451f, -0.007587f, 0.001686f, -0.007321f, -0.003861f, 0.008141f, 0.002678f, -0.015794f, -0.009476f, -0.013222f, -0.019804f, -0.002946f, 0.004097f, 0.009767f, 0.008366f, 0.007290f, 0.006051f, -0.002838f, 0.010381f, 0.005864f, -0.012590f, -0.004724f, 0.003387f, 0.009602f, 0.000254f, 0.002155f, 0.016752f, -0.002886f, -0.001384f, -0.004220f, -0.000838f, 0.008638f, -0.007240f, 0.000244f, -0.010253f, -0.009026f, -0.005817f, 0.010838f, 0.014772f, + -0.004147f, 0.001240f, -0.002708f, -0.009088f, -0.006064f, 0.002430f, -0.010453f, -0.002757f, -0.002692f, -0.006784f, 0.018900f, 0.004175f, 0.006420f, 0.005537f, -0.000396f, 0.000095f, 0.003392f, 0.001060f, 0.006054f, 0.003796f, 0.000262f, -0.000516f, 0.044762f, 0.026123f, 0.002092f, 0.016515f, 0.012966f, 0.003449f, 0.019510f, 0.005246f, 0.000133f, -0.006195f, -0.004253f, -0.012785f, -0.033958f, -0.002726f, 0.003516f, -0.011849f, -0.006449f, -0.001503f, 0.024041f, 0.007619f, -0.005993f, 0.000058f, 0.001851f, -0.003601f, 0.010249f, -0.001879f, -0.006001f, -0.004409f, -0.005646f, 0.003586f, -0.008388f, -0.021149f, 0.000669f, -0.011126f, -0.016770f, 0.003145f, 0.007509f, 0.010440f, 0.006172f, 0.009221f, -0.006216f, -0.018240f, -0.011591f, -0.016425f, 0.006569f, 0.015050f, 0.012735f, 0.007932f, 0.015396f, 0.000211f, 0.009694f, 0.020464f, -0.016890f, 0.002902f, -0.007519f, -0.000099f, 0.006127f, 0.005978f, 0.010230f, -0.001083f, -0.020687f, -0.016308f, 0.003667f, -0.004737f, -0.005740f, -0.004159f, -0.004363f, -0.014473f, 0.001463f, 0.009512f, -0.000837f, 0.007205f, -0.004236f, -0.000557f, + -0.000601f, 0.003515f, 0.014389f, 0.009828f, 0.008850f, -0.008372f, 0.000683f, -0.005107f, 0.000792f, -0.013311f, 0.002852f, 0.001991f, 0.001642f, -0.000449f, -0.001391f, -0.003964f, 0.003498f, 0.010933f, -0.022344f, 0.002838f, -0.017126f, 0.007698f, -0.032617f, -0.000805f, -0.010888f, -0.016702f, 0.029931f, 0.017059f, -0.010817f, -0.026903f, -0.006933f, -0.009773f, -0.023684f, 0.018407f, 0.000866f, -0.016231f, -0.006177f, 0.009482f, -0.015547f, -0.010439f, -0.008229f, -0.018226f, -0.007142f, -0.000318f, -0.014921f, -0.013366f, 0.018701f, -0.006985f, -0.006013f, -0.001694f, -0.004348f, 0.016054f, -0.017884f, -0.008251f, 0.003602f, -0.004690f, -0.000168f, -0.003992f, 0.009085f, -0.016789f, 0.005837f, -0.026864f, 0.002579f, -0.007665f, -0.010899f, 0.028263f, 0.002771f, -0.010419f, 0.005218f, 0.005918f, -0.022970f, 0.015832f, -0.004033f, -0.004898f, -0.001905f, 0.009054f, -0.003952f, 0.000408f, -0.011103f, 0.005943f, 0.007210f, 0.012709f, -0.011170f, -0.028155f, 0.019460f, -0.002258f, 0.007917f, 0.009615f, -0.006034f, 0.005541f, 0.014326f, -0.018577f, 0.000785f, -0.006558f, -0.002236f, -0.019289f, + 0.006355f, -0.003020f, 0.000552f, -0.000510f, 0.002325f, -0.003274f, -0.003145f, 0.005270f, -0.005114f, 0.003804f, 0.000889f, -0.003659f, -0.042797f, -0.023422f, 0.005038f, -0.014837f, 0.001545f, -0.010650f, -0.005944f, -0.015746f, -0.011314f, 0.008342f, 0.023594f, 0.025365f, 0.003703f, 0.017976f, -0.012518f, 0.031202f, 0.022418f, -0.017826f, -0.016569f, 0.005390f, 0.004812f, 0.026411f, 0.009194f, 0.017004f, -0.006332f, 0.006971f, -0.003696f, -0.002546f, -0.005841f, 0.024705f, 0.010642f, 0.023673f, 0.020965f, 0.004343f, -0.001559f, -0.010098f, 0.009961f, -0.000974f, -0.021719f, -0.014025f, -0.004379f, -0.010816f, -0.002781f, -0.011125f, -0.010292f, 0.007004f, -0.003335f, -0.006953f, 0.017564f, 0.021315f, -0.012438f, -0.003809f, 0.028425f, 0.011963f, -0.019944f, -0.019059f, -0.007273f, 0.007501f, -0.001233f, -0.003357f, -0.014286f, 0.012029f, 0.003319f, -0.004317f, 0.002957f, 0.003472f, -0.017639f, -0.007401f, 0.001329f, -0.006307f, -0.008730f, -0.008864f, 0.023184f, -0.018195f, -0.016823f, 0.006998f, 0.011740f, 0.017401f, -0.009034f, -0.002571f, 0.001341f, -0.007696f, 0.007895f, -0.001019f, + 0.005849f, -0.004952f, -0.002446f, 0.001808f, 0.002080f, -0.002756f, -0.002909f, -0.000020f, -0.003485f, -0.016266f, -0.023662f, -0.020495f, -0.000084f, -0.016146f, -0.020566f, 0.005238f, -0.001690f, -0.028860f, 0.020635f, 0.003594f, -0.001671f, 0.010174f, 0.031758f, 0.030212f, 0.013129f, -0.037127f, 0.013842f, 0.009779f, -0.036250f, -0.000560f, -0.017465f, -0.008566f, 0.018778f, -0.022019f, 0.012826f, -0.000051f, -0.003712f, -0.007899f, 0.003839f, -0.001872f, 0.006359f, -0.004273f, -0.019388f, 0.018848f, 0.009003f, 0.022583f, -0.002294f, -0.007664f, -0.010880f, 0.009123f, -0.009800f, 0.026682f, 0.005685f, 0.016014f, -0.020760f, 0.016549f, 0.000702f, 0.005838f, -0.013457f, 0.004508f, -0.015994f, -0.002564f, -0.016409f, 0.006703f, 0.011443f, -0.021895f, 0.000941f, -0.018044f, 0.008489f, 0.010616f, 0.010419f, -0.001445f, -0.030853f, 0.000039f, 0.008213f, -0.002685f, 0.013789f, -0.029589f, 0.007634f, -0.012321f, 0.004020f, -0.010443f, 0.002202f, 0.007626f, -0.003278f, -0.000128f, -0.003166f, -0.003861f, 0.001232f, -0.007986f, 0.010072f, 0.002242f, -0.000204f, -0.012721f, -0.001127f, 0.001321f, + -0.000860f, 0.005314f, -0.005433f, 0.001205f, -0.000530f, -0.002818f, 0.044466f, 0.053939f, 0.022562f, 0.018807f, -0.031097f, 0.029911f, 0.043427f, -0.047516f, 0.005686f, 0.030817f, 0.005365f, -0.056675f, -0.005658f, -0.030767f, 0.009932f, 0.011272f, -0.014326f, -0.005609f, 0.010335f, -0.026024f, -0.002078f, -0.010197f, -0.012786f, 0.005076f, -0.019737f, 0.021259f, 0.015155f, 0.027494f, -0.013621f, 0.004492f, -0.002970f, -0.011217f, 0.034715f, -0.000689f, -0.015980f, -0.007557f, 0.007499f, -0.007488f, -0.009094f, -0.010679f, 0.017658f, 0.006548f, 0.024549f, -0.001755f, 0.008998f, 0.032210f, -0.020452f, 0.004260f, -0.013890f, 0.025552f, -0.010053f, 0.011942f, 0.005066f, -0.001043f, -0.009699f, -0.018241f, -0.012328f, 0.005108f, 0.023099f, -0.021773f, 0.019487f, 0.023030f, 0.011579f, 0.026918f, -0.013182f, -0.010752f, 0.017543f, -0.003077f, -0.003280f, -0.024899f, -0.001588f, -0.020551f, 0.004200f, 0.025946f, 0.012732f, 0.006502f, 0.011896f, 0.007045f, -0.011184f, -0.005082f, -0.019519f, 0.022007f, 0.000906f, -0.008817f, 0.005809f, 0.001933f, -0.010270f, 0.005306f, -0.001490f, 0.006268f, + -0.001081f, 0.009539f, 0.004570f, -0.020755f, -0.070541f, -0.029626f, -0.050720f, -0.027433f, -0.021674f, 0.011671f, -0.032556f, -0.033326f, -0.015911f, -0.044524f, -0.014452f, 0.033482f, -0.001014f, 0.001273f, -0.009057f, -0.007935f, -0.004197f, 0.002988f, -0.000535f, -0.029843f, -0.004724f, -0.005946f, 0.043177f, -0.005663f, 0.038390f, 0.003046f, -0.010322f, 0.009916f, 0.031607f, -0.001710f, 0.000330f, -0.012794f, -0.003714f, -0.013425f, 0.007515f, -0.005714f, -0.011357f, 0.005665f, -0.015343f, 0.012400f, 0.012668f, 0.002384f, 0.027677f, -0.012603f, 0.014108f, -0.011787f, 0.015570f, 0.010459f, 0.029159f, 0.003919f, -0.011882f, 0.015606f, -0.001998f, -0.009840f, 0.037033f, -0.002833f, -0.002234f, 0.021261f, 0.006579f, 0.028649f, -0.022369f, -0.021900f, -0.003326f, -0.009526f, -0.003010f, -0.035388f, -0.008032f, 0.012189f, -0.004793f, -0.015267f, -0.024849f, 0.001620f, 0.007596f, -0.012489f, -0.011902f, -0.021669f, -0.007699f, 0.009124f, 0.009470f, 0.019083f, -0.003070f, -0.001814f, -0.000682f, 0.006336f, 0.007641f, 0.001251f, 0.012120f, 0.003293f, 0.001303f, -0.001670f, -0.001156f, 0.008641f, + -0.003709f, 0.008541f, 0.009661f, -0.000451f, 0.002867f}, + {-0.005166f, 0.002777f, -0.001458f, 0.001697f, -0.001015f, 0.001427f, -0.003001f, 0.000132f, -0.000123f, -0.000344f, 0.000687f, 0.001488f, -0.000057f, -0.000145f, -0.001647f, -0.000658f, 0.000702f, 0.000404f, -0.000199f, 0.000646f, -0.000205f, 0.000225f, -0.000746f, -0.000506f, -0.000510f, -0.000173f, 0.000065f, -0.000381f, -0.000271f, 0.000876f, -0.000517f, 0.000533f, -0.000509f, -0.000087f, -0.000399f, 0.000489f, 0.000176f, 0.000403f, 0.000686f, 0.000866f, 0.000322f, 0.000234f, -0.000082f, 0.000097f, 0.000130f, -0.000180f, 0.000167f, 0.001825f, -0.002088f, -0.000278f, -0.000385f, -0.000517f, 0.000336f, -0.001035f, 0.000350f, -0.000023f, 0.000470f, 0.000415f, -0.000824f, -0.000291f, 0.001252f, -0.000130f, 0.000266f, -0.000232f, 0.000543f, 0.001151f, 0.001328f, 0.000227f, 0.000571f, -0.000019f, -0.001052f, -0.000031f, 0.000112f, -0.000227f, 0.000002f, 0.000579f, -0.000605f, -0.000810f, 0.000351f, -0.000391f, -0.000364f, -0.000568f, -0.000028f, 0.000598f, 0.000148f, -0.000177f, -0.000219f, -0.000238f, -0.000006f, 0.000133f, -0.000323f, 0.000118f, -0.000368f, 0.000221f, -0.005242f, -0.003704f, + -0.001828f, -0.001355f, -0.001061f, -0.001067f, -0.000385f, -0.000786f, -0.000260f, -0.000491f, -0.001307f, 0.000258f, 0.000648f, -0.000100f, 0.000364f, -0.000243f, -0.000685f, -0.000667f, -0.001028f, -0.000341f, 0.000230f, 0.000035f, -0.000585f, 0.000389f, -0.000705f, -0.000676f, 0.000432f, 0.000003f, 0.000007f, 0.000362f, 0.000391f, 0.000110f, -0.000173f, -0.000200f, -0.000284f, 0.000140f, 0.000055f, -0.000355f, 0.000175f, -0.000709f, -0.000323f, -0.000176f, -0.000091f, -0.000506f, -0.000120f, -0.000187f, -0.000029f, -0.007463f, -0.000969f, 0.000546f, 0.000141f, 0.000514f, 0.000089f, -0.000437f, 0.000300f, -0.000343f, -0.000320f, -0.000694f, -0.000532f, 0.000243f, -0.000179f, 0.000447f, -0.000427f, -0.000019f, -0.000412f, 0.000113f, 0.000785f, -0.000224f, 0.000592f, 0.000005f, -0.000486f, -0.000130f, 0.000715f, 0.000318f, 0.000476f, 0.000479f, -0.000682f, 0.000455f, -0.000260f, -0.000084f, -0.000354f, -0.000210f, 0.000239f, 0.000283f, 0.000197f, -0.000198f, 0.000583f, 0.000452f, 0.000318f, -0.000190f, -0.000325f, 0.000025f, -0.000262f, 0.000035f, 0.008778f, 0.006959f, 0.001669f, 0.003106f, + 0.000771f, 0.002399f, 0.001717f, 0.000506f, 0.001729f, 0.000670f, 0.001317f, 0.000547f, -0.000449f, 0.001287f, 0.000939f, -0.000369f, -0.000095f, -0.002431f, -0.000237f, 0.000112f, 0.001499f, 0.000157f, 0.000082f, 0.000742f, 0.000085f, 0.000671f, 0.000652f, 0.000092f, -0.000024f, 0.000232f, 0.001034f, 0.000765f, 0.000677f, -0.000070f, -0.000231f, 0.000038f, 0.000496f, -0.000180f, -0.000020f, 0.000519f, 0.000202f, -0.000261f, 0.000018f, 0.000111f, -0.000483f, 0.000642f, -0.000343f, 0.015464f, 0.005588f, 0.002784f, 0.001564f, 0.001043f, 0.000942f, 0.001001f, 0.001520f, 0.000444f, 0.002515f, 0.000411f, 0.000181f, 0.001164f, -0.000655f, 0.000327f, -0.000322f, -0.000214f, -0.000481f, 0.001715f, 0.000857f, -0.000069f, 0.001204f, -0.000797f, -0.000273f, -0.000235f, 0.001890f, -0.000111f, 0.000646f, 0.000226f, 0.000901f, 0.000239f, -0.000333f, 0.000576f, 0.000603f, -0.000224f, 0.000183f, 0.000345f, 0.000127f, 0.000475f, -0.000176f, 0.000534f, 0.000363f, -0.001167f, 0.000227f, 0.000229f, 0.000193f, 0.000939f, 0.005980f, -0.004442f, -0.001466f, -0.002094f, -0.001192f, -0.001274f, + 0.000876f, -0.000760f, -0.001761f, -0.000532f, -0.002364f, -0.000644f, -0.000995f, -0.002402f, -0.000532f, 0.000445f, -0.001414f, -0.000572f, 0.000283f, -0.001723f, -0.000020f, 0.001808f, 0.000477f, 0.000186f, -0.000816f, -0.000051f, 0.000711f, -0.000075f, -0.000748f, -0.000935f, 0.000918f, -0.000169f, -0.001076f, 0.000011f, -0.000430f, 0.001281f, 0.000008f, 0.000523f, -0.000175f, 0.001091f, -0.000737f, 0.000376f, 0.000204f, 0.000176f, 0.000059f, 0.000202f, 0.000010f, -0.000487f, 0.000769f, 0.000455f, 0.000074f, -0.016298f, -0.009124f, -0.001940f, -0.002232f, -0.001638f, -0.001946f, -0.002891f, -0.000207f, 0.000006f, -0.000778f, 0.000635f, -0.000720f, 0.000045f, -0.000034f, -0.001002f, -0.000979f, -0.001691f, -0.000524f, 0.001514f, -0.001475f, -0.000250f, 0.001476f, 0.000839f, -0.000197f, 0.000448f, -0.000183f, -0.001647f, -0.000754f, -0.001368f, -0.000414f, -0.000025f, -0.000302f, 0.000659f, -0.001355f, -0.001172f, -0.000030f, -0.001421f, -0.001019f, -0.001032f, -0.001086f, 0.001060f, -0.000334f, -0.001497f, -0.000444f, 0.000291f, 0.000438f, -0.000570f, -0.000720f, -0.000420f, -0.001341f, -0.000727f, + -0.010118f, 0.005877f, 0.001985f, 0.001096f, 0.000824f, 0.001033f, 0.000282f, -0.000905f, 0.000129f, -0.000473f, -0.000334f, 0.001945f, 0.000943f, 0.001699f, 0.001427f, 0.001787f, -0.001499f, 0.000852f, 0.001603f, 0.000448f, 0.001379f, -0.001630f, 0.000199f, -0.000285f, -0.000262f, -0.000503f, 0.000505f, -0.000062f, -0.000110f, 0.001758f, -0.001772f, -0.000322f, 0.000489f, 0.001088f, -0.000561f, 0.000937f, -0.000781f, -0.000897f, 0.001146f, -0.000459f, -0.000185f, -0.000177f, 0.000353f, 0.000019f, 0.000460f, -0.000452f, -0.000370f, -0.000391f, -0.000285f, -0.000317f, 0.000826f, 0.000277f, 0.000181f, -0.000399f, -0.000835f, 0.000239f, 0.000841f, 0.000237f, 0.014904f, 0.005981f, 0.001374f, 0.003293f, 0.002737f, 0.000428f, 0.001276f, 0.003112f, 0.001553f, -0.000160f, 0.000780f, 0.000315f, -0.000374f, 0.000833f, 0.002845f, 0.000564f, 0.003378f, 0.001514f, -0.002601f, 0.000428f, 0.000197f, 0.000480f, 0.002523f, 0.001289f, 0.001078f, -0.000287f, -0.000274f, -0.000401f, -0.000305f, 0.000306f, -0.000426f, 0.000737f, 0.000349f, 0.001030f, -0.000116f, -0.000349f, 0.000511f, 0.000831f, + 0.000598f, -0.000162f, -0.001076f, -0.000563f, -0.000548f, 0.000999f, 0.000879f, 0.001137f, 0.000774f, 0.000122f, 0.000286f, 0.000967f, 0.000924f, 0.000619f, 0.000224f, 0.000102f, 0.000627f, 0.000495f, 0.000392f, 0.000788f, 0.016626f, 0.004672f, 0.002144f, 0.002513f, 0.000502f, 0.002426f, -0.000329f, -0.001030f, 0.000023f, 0.000569f, 0.000344f, -0.000149f, 0.000553f, 0.002479f, -0.000297f, -0.001665f, -0.001038f, 0.001166f, 0.000395f, 0.001372f, 0.002362f, 0.001933f, -0.000056f, 0.001267f, -0.001370f, 0.000095f, -0.001046f, 0.001472f, 0.000961f, -0.001794f, 0.001091f, -0.000884f, 0.000203f, -0.000724f, 0.001105f, -0.000698f, 0.001366f, 0.000969f, 0.000911f, 0.001605f, 0.000624f, -0.000086f, -0.000325f, -0.000046f, 0.000306f, 0.001787f, 0.000032f, 0.000001f, 0.000212f, 0.000844f, 0.000674f, 0.000025f, -0.000146f, -0.000309f, -0.000888f, -0.000207f, -0.000662f, -0.000288f, 0.002370f, -0.007128f, -0.002776f, -0.001228f, -0.001527f, -0.000819f, -0.000522f, 0.000022f, 0.001094f, -0.001116f, -0.001820f, 0.001692f, -0.002204f, -0.002269f, -0.000316f, -0.000594f, 0.001079f, -0.000708f, + 0.000036f, -0.002197f, -0.001175f, -0.002633f, -0.002711f, -0.003199f, -0.000348f, 0.000633f, -0.002090f, -0.000676f, 0.000393f, 0.000141f, 0.000177f, -0.000372f, -0.002071f, -0.001432f, 0.001018f, 0.000268f, -0.000420f, 0.001945f, -0.001283f, -0.000708f, 0.000590f, 0.001155f, 0.001102f, -0.000272f, -0.000228f, 0.000396f, 0.000383f, -0.001417f, 0.000202f, -0.000872f, -0.000271f, 0.000006f, -0.000454f, -0.000023f, 0.000982f, 0.000103f, -0.000105f, 0.000130f, -0.000916f, 0.000512f, 0.000898f, -0.000271f, 0.000042f, 0.000021f, -0.000082f, -0.018036f, -0.005625f, -0.003441f, -0.001370f, -0.002487f, -0.001914f, -0.000616f, -0.001355f, -0.000622f, -0.001822f, -0.002555f, -0.001759f, -0.000656f, -0.003683f, -0.000933f, -0.001476f, -0.002299f, -0.000240f, 0.000346f, 0.001250f, -0.001363f, -0.001822f, -0.000730f, 0.001564f, 0.001917f, 0.002441f, 0.001247f, -0.000030f, -0.001229f, -0.000504f, -0.000028f, -0.001429f, 0.000571f, 0.001030f, 0.001213f, -0.000818f, -0.000770f, -0.000646f, -0.000376f, -0.000254f, -0.000553f, 0.001005f, -0.000322f, 0.000664f, -0.001281f, -0.002119f, -0.000943f, -0.000049f, 0.001042f, + -0.001830f, 0.000580f, -0.000861f, 0.000839f, -0.000877f, 0.000486f, -0.000728f, -0.000078f, -0.000462f, -0.000089f, 0.000349f, 0.000650f, -0.000435f, -0.000662f, 0.000011f, -0.000660f, -0.010341f, 0.002760f, 0.000758f, 0.000016f, 0.001803f, -0.001732f, 0.000455f, -0.003992f, -0.001310f, 0.001392f, 0.000973f, 0.002579f, -0.000201f, 0.002812f, -0.001652f, -0.000414f, 0.001332f, -0.002447f, -0.000912f, -0.001441f, 0.002726f, -0.000177f, -0.002287f, 0.001139f, 0.002168f, -0.001948f, -0.001499f, -0.001756f, 0.000488f, -0.000416f, 0.000924f, -0.000679f, -0.000575f, -0.000480f, -0.001082f, 0.001536f, -0.001267f, 0.000288f, 0.000992f, -0.000141f, 0.001149f, -0.000694f, 0.002540f, 0.000369f, -0.000282f, -0.000915f, -0.000916f, 0.000020f, -0.001051f, -0.001272f, -0.000803f, 0.000179f, 0.000850f, -0.000144f, 0.000215f, -0.001115f, -0.001121f, -0.001581f, -0.000647f, -0.000522f, -0.000436f, 0.000417f, 0.000612f, -0.000656f, 0.000073f, 0.008914f, 0.012856f, 0.004397f, 0.004487f, 0.006054f, 0.004435f, -0.000642f, 0.000925f, -0.000499f, 0.000876f, 0.000726f, 0.001179f, 0.000806f, 0.002256f, 0.000823f, + 0.001442f, 0.000414f, 0.004398f, 0.001001f, 0.002199f, 0.001246f, 0.001196f, 0.003401f, 0.000894f, 0.004266f, 0.002297f, -0.000871f, 0.003107f, 0.000788f, 0.001581f, 0.003013f, 0.000713f, 0.001795f, -0.000814f, -0.000310f, 0.000955f, 0.001359f, -0.001733f, 0.001579f, -0.000954f, -0.001996f, -0.001066f, 0.001664f, 0.002602f, 0.001892f, -0.000243f, 0.000618f, 0.000696f, 0.000940f, 0.001431f, 0.000762f, 0.001604f, 0.000907f, -0.001287f, -0.000029f, 0.001166f, 0.001443f, 0.000558f, 0.000477f, 0.000383f, -0.001408f, -0.000447f, -0.000866f, 0.000946f, -0.000058f, 0.030960f, 0.002186f, -0.001423f, 0.002340f, -0.001531f, 0.003349f, 0.001196f, 0.003524f, -0.001662f, 0.000211f, 0.000163f, 0.002066f, -0.003741f, 0.000629f, 0.002648f, -0.000659f, -0.000425f, 0.003088f, 0.005208f, -0.002234f, -0.001022f, 0.000490f, 0.002654f, -0.001240f, 0.001780f, -0.000042f, -0.001474f, -0.001482f, -0.001143f, 0.000950f, 0.001697f, 0.001652f, -0.001116f, 0.001837f, -0.001101f, 0.001782f, 0.001876f, -0.000553f, -0.000969f, 0.000539f, -0.001657f, -0.002692f, 0.000748f, -0.001875f, 0.000901f, 0.000073f, + 0.000461f, 0.000993f, 0.000164f, 0.001230f, 0.000275f, -0.001856f, 0.000885f, -0.000559f, 0.001023f, -0.001381f, -0.000065f, 0.000102f, 0.001077f, -0.000796f, -0.002026f, -0.000471f, -0.000771f, 0.000106f, -0.000574f, -0.010499f, -0.010216f, -0.002303f, 0.000777f, -0.000447f, -0.001556f, -0.001660f, -0.002299f, -0.000608f, 0.001667f, -0.000552f, -0.000598f, -0.002353f, 0.002451f, -0.000151f, -0.002061f, -0.001764f, 0.004262f, -0.003894f, 0.000373f, 0.002832f, -0.000366f, 0.000457f, -0.003779f, 0.001183f, -0.001640f, 0.000882f, -0.002640f, -0.001719f, 0.000392f, 0.000676f, -0.001254f, -0.001382f, 0.000092f, -0.000577f, 0.000148f, -0.001614f, -0.000942f, 0.001649f, -0.000223f, -0.000802f, -0.000514f, 0.002101f, 0.000895f, -0.001229f, -0.001888f, -0.001658f, 0.000508f, -0.000273f, -0.000823f, 0.000157f, 0.000304f, -0.000923f, 0.002472f, 0.001344f, -0.000310f, -0.000218f, -0.000703f, 0.000280f, -0.000784f, -0.000756f, -0.000808f, -0.000171f, -0.001474f, -0.001154f, -0.001963f, 0.000419f, -0.002098f, -0.000100f, -0.000568f, -0.000524f, -0.000162f, -0.004201f, -0.003437f, -0.004322f, -0.002947f, -0.002311f, + -0.001382f, 0.000234f, 0.000055f, -0.001167f, -0.000327f, 0.000911f, 0.003762f, -0.003295f, 0.001703f, -0.001171f, -0.001916f, 0.002482f, -0.000121f, 0.000412f, 0.003495f, 0.000400f, 0.001530f, -0.002229f, -0.000403f, -0.006297f, -0.000605f, 0.001076f, 0.000870f, 0.000439f, 0.000732f, 0.000776f, -0.001271f, -0.001953f, 0.001523f, -0.000258f, 0.001445f, 0.000581f, -0.001531f, 0.001256f, -0.000031f, -0.004489f, -0.003514f, -0.000700f, -0.003320f, 0.000353f, 0.001174f, -0.000326f, -0.000776f, -0.000485f, 0.000257f, -0.001101f, -0.000215f, -0.000290f, -0.000494f, 0.000973f, 0.000385f, 0.000261f, -0.000516f, -0.000535f, 0.001787f, 0.000352f, -0.000998f, 0.001080f, -0.000175f, -0.000875f, -0.001688f, -0.000043f, -0.000878f, -0.000391f, 0.001348f, 0.000921f, 0.001427f, -0.020065f, -0.004566f, 0.000290f, -0.003982f, 0.001604f, 0.000406f, 0.004806f, -0.002245f, 0.000280f, -0.001316f, 0.003219f, -0.006571f, -0.006318f, 0.002667f, -0.003065f, 0.004753f, 0.001712f, -0.003807f, -0.006690f, -0.000146f, -0.001898f, -0.003237f, -0.001336f, 0.000770f, 0.001076f, -0.001560f, 0.005717f, 0.000314f, -0.000575f, + -0.002386f, 0.001943f, 0.002175f, 0.002329f, 0.002517f, -0.000317f, -0.001479f, -0.000568f, 0.001491f, -0.000122f, 0.001798f, -0.001691f, -0.000656f, -0.000585f, 0.002082f, 0.001661f, -0.001811f, 0.002353f, -0.001308f, -0.001648f, 0.000209f, -0.000752f, -0.001555f, 0.001605f, -0.001842f, -0.000250f, 0.000477f, -0.000452f, -0.000747f, 0.000418f, 0.001554f, -0.000964f, 0.001491f, -0.001231f, 0.001003f, -0.000685f, -0.000761f, -0.000484f, 0.000306f, 0.001913f, 0.000354f, 0.001792f, -0.001134f, 0.018393f, 0.016168f, 0.003379f, 0.004326f, -0.000861f, 0.005289f, 0.004234f, 0.005328f, -0.000217f, 0.002147f, 0.001286f, -0.004980f, -0.004224f, 0.002336f, 0.000458f, -0.003560f, -0.003774f, -0.002093f, 0.000249f, 0.002164f, 0.000635f, 0.005072f, 0.004621f, 0.002045f, -0.001058f, -0.001095f, 0.003063f, 0.002886f, 0.000236f, 0.002534f, -0.000800f, 0.003233f, 0.000190f, -0.000657f, 0.004464f, 0.002353f, 0.003664f, 0.002396f, 0.000816f, 0.002601f, 0.001302f, 0.000931f, 0.002386f, -0.001257f, 0.000490f, 0.003196f, -0.000017f, -0.001983f, 0.001888f, 0.001906f, 0.001348f, -0.001377f, -0.000018f, + 0.001887f, 0.002784f, -0.001332f, 0.003363f, 0.003874f, -0.000644f, -0.002014f, 0.000376f, 0.000934f, 0.000615f, 0.001733f, 0.000015f, 0.000658f, 0.001318f, -0.000870f, 0.000118f, -0.001261f, -0.000311f, -0.001721f, -0.000995f, -0.000157f, 0.022348f, 0.001788f, -0.000599f, 0.001545f, 0.001111f, -0.003689f, 0.000991f, 0.000966f, 0.000037f, 0.002349f, 0.003446f, 0.005074f, -0.002241f, -0.002335f, -0.003570f, -0.002944f, 0.003328f, -0.000284f, 0.004790f, -0.001169f, -0.001118f, 0.001936f, 0.004167f, 0.001618f, -0.004114f, 0.003261f, -0.001176f, 0.002604f, -0.001334f, 0.002016f, -0.002463f, 0.001511f, -0.000164f, 0.002371f, 0.000328f, 0.001342f, 0.000772f, -0.004232f, -0.002277f, -0.000415f, -0.000814f, -0.000418f, -0.001275f, 0.002007f, 0.000809f, 0.004315f, -0.000634f, -0.002992f, -0.001693f, -0.000321f, 0.000297f, -0.003325f, 0.001151f, -0.001146f, -0.000110f, -0.000343f, -0.001892f, 0.001734f, 0.003395f, -0.001080f, 0.001765f, 0.000378f, -0.001849f, -0.000202f, -0.001758f, -0.001518f, 0.000337f, -0.002653f, -0.001833f, 0.001075f, -0.000099f, 0.000566f, 0.001840f, -0.002513f, 0.003004f, + 0.000318f, -0.001230f, -0.002986f, 0.000865f, -0.001091f, 0.006436f, -0.001530f, -0.006161f, -0.004151f, -0.005555f, 0.005139f, -0.004106f, 0.001146f, 0.006260f, -0.000268f, -0.006368f, 0.000445f, -0.006684f, 0.005572f, -0.001943f, 0.005554f, 0.000032f, -0.002102f, 0.004766f, 0.000187f, 0.000989f, -0.003579f, -0.004534f, -0.000720f, 0.001595f, 0.000984f, -0.000885f, -0.002082f, 0.002110f, -0.000637f, 0.001577f, 0.002433f, 0.002946f, 0.001371f, 0.001631f, -0.005964f, 0.000501f, -0.001346f, -0.002039f, 0.000827f, 0.002964f, -0.002486f, -0.004584f, -0.002017f, 0.001348f, 0.000531f, -0.004027f, -0.001635f, 0.001884f, 0.002758f, -0.002419f, -0.001569f, -0.001860f, 0.002822f, 0.003740f, 0.000763f, -0.001253f, 0.000432f, 0.002681f, -0.001275f, -0.000101f, -0.001751f, 0.001882f, -0.002193f, -0.000253f, 0.002619f, 0.001568f, -0.000753f, -0.000392f, -0.000057f, -0.000836f, -0.022501f, -0.022823f, -0.003685f, -0.011196f, -0.006928f, -0.003984f, -0.006195f, -0.000771f, 0.004691f, -0.010243f, 0.003744f, -0.002111f, 0.003416f, 0.000571f, 0.002096f, -0.004260f, 0.001083f, -0.000552f, -0.002207f, -0.009400f, + -0.001907f, -0.004899f, -0.005960f, -0.000645f, 0.001510f, 0.000294f, -0.002026f, 0.001275f, -0.001923f, -0.000595f, 0.004983f, -0.000131f, -0.001658f, 0.000284f, 0.003260f, 0.004353f, 0.002936f, -0.000025f, 0.002344f, 0.002681f, -0.000265f, -0.000003f, -0.004872f, 0.001761f, -0.004027f, 0.000724f, 0.003882f, -0.002705f, -0.004877f, 0.001378f, -0.002737f, -0.002647f, 0.000538f, -0.000072f, -0.002313f, 0.001089f, -0.000551f, 0.005221f, 0.002948f, 0.001573f, 0.000647f, 0.001892f, -0.000195f, 0.000545f, -0.002075f, -0.003762f, -0.000619f, 0.000284f, -0.002665f, -0.001884f, -0.001465f, -0.001284f, -0.001512f, 0.000793f, -0.000779f, -0.000268f, -0.001677f, -0.013398f, 0.024884f, 0.019499f, 0.001239f, 0.003955f, 0.001601f, 0.004314f, 0.006626f, 0.001497f, 0.006438f, 0.001143f, -0.006725f, 0.004481f, 0.005435f, 0.001593f, 0.001647f, 0.004034f, 0.005358f, -0.005341f, 0.004476f, -0.002823f, 0.003937f, 0.000575f, -0.003198f, 0.000616f, 0.004451f, 0.002494f, -0.005201f, 0.002529f, -0.002099f, 0.007607f, -0.000588f, 0.001768f, -0.001119f, -0.004929f, 0.005014f, 0.004913f, 0.002411f, 0.001242f, + -0.000158f, 0.001759f, 0.005322f, 0.001208f, 0.003826f, 0.000457f, 0.002682f, 0.001410f, -0.000277f, 0.002831f, -0.003368f, -0.005366f, -0.002278f, -0.004096f, -0.003382f, -0.001786f, -0.003474f, 0.004768f, 0.003480f, 0.000402f, -0.000772f, -0.001718f, -0.000477f, -0.000137f, 0.000123f, 0.000224f, 0.000754f, 0.000989f, 0.000642f, -0.000110f, -0.001171f, -0.001084f, -0.000087f, -0.000109f, -0.000365f, 0.000531f, -0.000459f, 0.002877f, -0.000553f, 0.003782f, 0.033419f, -0.013149f, -0.006961f, 0.001105f, 0.000038f, -0.001752f, -0.009136f, -0.004053f, 0.002477f, -0.000550f, -0.001208f, -0.001910f, 0.001542f, -0.007704f, -0.002053f, 0.003854f, 0.007529f, 0.003943f, 0.003445f, -0.002470f, -0.002128f, -0.004476f, 0.005233f, -0.007304f, -0.001135f, 0.001691f, -0.004626f, 0.001463f, 0.002167f, 0.005710f, -0.008749f, -0.000841f, -0.000032f, -0.001929f, 0.002483f, -0.008310f, -0.004162f, 0.008954f, 0.006081f, 0.001148f, -0.001426f, 0.005311f, -0.001456f, -0.000792f, 0.001135f, 0.004134f, 0.002563f, -0.002705f, 0.000684f, -0.001618f, 0.003592f, -0.005630f, -0.002366f, -0.003446f, -0.003398f, 0.006685f, + 0.001989f, 0.000750f, -0.002862f, -0.000342f, -0.000884f, -0.001287f, -0.003006f, 0.000414f, -0.002843f, -0.000218f, 0.001156f, 0.002520f, -0.004381f, -0.003217f, -0.003857f, -0.001308f, 0.002284f, 0.000289f, 0.002990f, -0.000474f, -0.003575f, -0.000483f, -0.001541f, 0.001636f, -0.000033f, 0.009935f, 0.022752f, 0.003781f, 0.008659f, 0.007896f, 0.007502f, 0.002558f, 0.005600f, 0.003511f, -0.001668f, -0.004585f, -0.002971f, -0.001294f, 0.006420f, -0.005471f, -0.006137f, -0.000376f, -0.000309f, -0.002455f, -0.004704f, 0.013858f, 0.012947f, 0.009811f, 0.000452f, -0.005530f, 0.000962f, 0.000971f, -0.002806f, 0.003225f, 0.002011f, 0.005620f, 0.000625f, 0.002322f, -0.000289f, -0.003790f, 0.006295f, 0.005284f, 0.003755f, -0.000857f, -0.005030f, 0.000355f, -0.000405f, -0.001351f, -0.010251f, 0.007420f, -0.004681f, 0.008550f, 0.000466f, 0.004646f, -0.000994f, 0.005119f, 0.007684f, 0.001587f, -0.003502f, -0.000211f, 0.001396f, -0.002492f, 0.001338f, -0.000938f, -0.003287f, -0.001743f, 0.001055f, -0.000747f, 0.003212f, 0.001191f, -0.005480f, 0.000395f, -0.000767f, -0.005831f, -0.001400f, 0.001246f, + -0.002255f, 0.000694f, 0.004972f, 0.002098f, -0.000308f, -0.001679f, -0.001343f, 0.000155f, 0.002159f, -0.000552f, 0.002391f, -0.023949f, -0.003160f, -0.014936f, 0.000185f, 0.002606f, -0.005048f, -0.008744f, -0.010074f, -0.009588f, -0.005648f, -0.007824f, -0.001898f, -0.000553f, -0.002002f, 0.002482f, -0.001542f, 0.000484f, 0.006137f, 0.002725f, -0.000593f, 0.014463f, -0.003169f, 0.002876f, -0.002107f, 0.001189f, 0.002115f, 0.000744f, -0.000803f, 0.002101f, 0.006795f, 0.002014f, 0.002412f, 0.000732f, 0.002724f, 0.005701f, 0.007906f, 0.002453f, 0.009591f, -0.002595f, -0.008253f, 0.008314f, -0.002639f, -0.001787f, -0.001676f, 0.004687f, 0.007327f, 0.005486f, -0.000136f, -0.001934f, -0.004185f, -0.010714f, 0.006584f, 0.007442f, 0.005295f, -0.006413f, 0.003864f, 0.000962f, -0.000640f, 0.006018f, 0.001026f, 0.004030f, -0.003380f, 0.001947f, -0.004214f, -0.000443f, 0.003657f, -0.001104f, 0.002750f, -0.000619f, -0.001540f, -0.001544f, -0.005135f, 0.000478f, 0.000383f, -0.000083f, 0.000985f, -0.001179f, -0.006337f, 0.000440f, 0.000328f, -0.041941f, -0.018736f, 0.008461f, -0.001572f, -0.001498f, + 0.001551f, -0.005310f, -0.004546f, -0.001640f, -0.002019f, -0.007398f, 0.005236f, 0.000501f, 0.011005f, -0.006185f, -0.005197f, -0.009020f, -0.004953f, -0.009287f, 0.000808f, 0.003306f, -0.013710f, 0.008808f, 0.007696f, -0.001165f, 0.001580f, 0.005714f, 0.000913f, 0.005019f, -0.010376f, -0.010571f, -0.005770f, -0.006958f, -0.005247f, 0.016940f, 0.005602f, -0.003821f, -0.006051f, -0.008786f, 0.004186f, 0.002266f, -0.004080f, 0.003322f, 0.003410f, -0.006220f, 0.000629f, 0.001297f, 0.004893f, -0.005782f, 0.014065f, -0.006214f, -0.004842f, 0.002111f, -0.001458f, -0.000154f, -0.004169f, -0.001670f, 0.000487f, 0.008825f, -0.002715f, 0.012751f, 0.002785f, 0.000758f, 0.001482f, 0.003348f, -0.003801f, -0.001464f, -0.005014f, -0.004171f, -0.003832f, -0.000096f, 0.006961f, -0.004584f, -0.003261f, -0.001985f, -0.002535f, -0.002487f, -0.000247f, -0.001672f, -0.002336f, -0.002177f, 0.006619f, 0.021172f, 0.010894f, 0.006759f, 0.004600f, -0.007446f, 0.000766f, -0.006021f, 0.009430f, -0.001014f, -0.001234f, 0.003211f, 0.002094f, 0.002200f, -0.000258f, 0.003332f, 0.001226f, 0.003519f, -0.002862f, 0.009219f, + 0.001274f, -0.000817f, 0.027629f, 0.001525f, -0.002069f, -0.007040f, 0.004150f, -0.006545f, 0.006203f, 0.014891f, -0.001119f, 0.003669f, 0.003714f, -0.007622f, -0.008507f, 0.000288f, 0.000236f, 0.006563f, -0.004176f, 0.000270f, -0.000393f, 0.004847f, 0.005018f, 0.008316f, 0.003177f, 0.002910f, 0.003497f, 0.000389f, 0.005531f, 0.002587f, -0.009981f, 0.002196f, -0.005107f, -0.012860f, -0.001039f, 0.003678f, 0.000148f, 0.001130f, -0.001631f, 0.000303f, -0.000328f, -0.000012f, 0.001714f, 0.000341f, 0.005972f, -0.003462f, -0.000454f, 0.001208f, 0.001333f, 0.000237f, -0.002159f, 0.004135f, 0.007013f, 0.006842f, 0.001526f, -0.001359f, -0.000584f, 0.002488f, -0.000209f, -0.000770f, -0.000024f, 0.001417f, 0.003311f, -0.000472f, -0.001109f, -0.002193f, -0.001286f, 0.031256f, -0.009270f, -0.003203f, -0.008638f, 0.015845f, 0.005526f, 0.001516f, 0.002944f, -0.002055f, -0.003870f, 0.005727f, 0.000287f, -0.005189f, 0.001182f, -0.006915f, -0.005630f, 0.000588f, -0.007460f, 0.001219f, 0.002147f, -0.005115f, -0.009627f, 0.001134f, 0.000292f, 0.006611f, 0.010250f, 0.007534f, -0.005117f, 0.000167f, + 0.006288f, 0.012113f, -0.012636f, 0.004937f, -0.002539f, 0.000043f, -0.005876f, -0.007721f, 0.000475f, 0.007407f, 0.001899f, 0.003457f, 0.004319f, -0.000241f, 0.002820f, -0.000460f, 0.001962f, 0.004850f, -0.008491f, -0.005553f, 0.012699f, -0.000766f, -0.000594f, -0.002658f, 0.004958f, 0.016953f, 0.003988f, 0.002780f, 0.005226f, -0.004129f, -0.005149f, 0.000269f, -0.003890f, -0.009295f, 0.005972f, 0.001061f, -0.004951f, 0.002899f, 0.001254f, -0.002435f, -0.004671f, 0.006363f, -0.002274f, -0.006985f, 0.003221f, 0.003648f, 0.004963f, -0.004781f, 0.000297f, 0.002502f, -0.001059f, -0.001647f, 0.007531f, -0.000329f, 0.001251f, -0.003131f, -0.000614f, 0.000198f, 0.026628f, 0.024975f, -0.008036f, 0.006723f, 0.002206f, 0.005199f, 0.013610f, -0.001778f, -0.006886f, -0.002580f, 0.026164f, -0.014733f, -0.002630f, -0.007354f, -0.005653f, -0.011953f, 0.013169f, -0.003855f, -0.017524f, -0.013279f, -0.015972f, -0.006282f, 0.014461f, -0.001787f, 0.006919f, -0.002609f, -0.007124f, 0.006293f, 0.002062f, 0.007993f, -0.007589f, 0.007108f, 0.005896f, 0.002879f, 0.003510f, -0.012770f, 0.003861f, -0.010666f, + 0.009178f, 0.018934f, 0.005706f, 0.005661f, -0.011868f, 0.016956f, 0.004760f, -0.001804f, -0.002416f, -0.003480f, 0.005543f, 0.008470f, 0.002288f, -0.002003f, -0.000271f, 0.002278f, -0.003884f, -0.002957f, -0.003726f, -0.003072f, -0.000092f, 0.006211f, -0.003936f, 0.009292f, 0.003583f, 0.005684f, -0.001695f, -0.013344f, -0.008705f, 0.003395f, 0.001146f, -0.003982f, 0.005217f, -0.000250f, -0.000214f, 0.002685f, -0.001631f, 0.003910f, -0.000419f, -0.000448f, 0.002149f, -0.002300f, -0.000154f, -0.002486f, -0.001255f, -0.003119f, 0.002302f, 0.000170f, 0.000917f, -0.024712f, -0.015086f, 0.003785f, 0.001720f, 0.000062f, -0.011201f, 0.006691f, 0.003420f, -0.006424f, -0.018185f, 0.014807f, 0.003326f, 0.005604f, 0.008009f, 0.005042f, -0.002629f, 0.002829f, -0.004801f, 0.012303f, -0.010407f, -0.017374f, -0.000867f, -0.000747f, -0.008597f, -0.018908f, 0.000300f, -0.003802f, -0.010302f, -0.005414f, -0.003437f, 0.004349f, 0.000407f, 0.007074f, 0.013685f, -0.005878f, -0.011884f, 0.003711f, -0.001677f, 0.000200f, 0.005408f, -0.008147f, -0.007818f, -0.000965f, 0.006430f, -0.008828f, 0.007044f, -0.002515f, + 0.013892f, -0.001995f, -0.004802f, -0.001643f, -0.000269f, 0.002875f, -0.016626f, 0.002374f, -0.014437f, 0.014424f, -0.000299f, 0.009055f, 0.005022f, -0.005507f, -0.001085f, -0.007308f, 0.003210f, -0.000796f, 0.002465f, 0.002689f, -0.010074f, -0.001488f, -0.009736f, -0.004146f, 0.003782f, -0.002863f, -0.006131f, 0.002715f, -0.000481f, -0.009723f, -0.005180f, 0.000994f, -0.000071f, -0.004044f, 0.003822f, -0.002220f, -0.002897f, 0.002011f, -0.006244f, 0.002987f, -0.034937f, -0.015514f, -0.006217f, -0.003464f, -0.001472f, 0.004012f, -0.012417f, -0.008237f, 0.002779f, -0.009691f, 0.002776f, -0.010808f, -0.003900f, -0.010437f, -0.013474f, 0.014223f, 0.005341f, 0.002470f, -0.001224f, -0.011029f, -0.019748f, 0.010049f, -0.025775f, 0.009596f, -0.000015f, -0.007744f, 0.000945f, -0.004654f, 0.001551f, 0.018074f, -0.009290f, -0.000553f, -0.019463f, 0.015393f, -0.004821f, 0.007222f, -0.007108f, -0.001851f, -0.001942f, -0.000326f, 0.008491f, 0.003447f, 0.018107f, 0.022625f, -0.002724f, 0.000721f, -0.007743f, 0.001216f, -0.003254f, 0.003865f, 0.006695f, 0.001273f, 0.015701f, 0.004953f, -0.006371f, 0.002969f, + 0.002950f, 0.000494f, -0.001520f, 0.000904f, 0.011846f, -0.008724f, -0.018788f, -0.007153f, -0.000111f, 0.004746f, 0.002813f, 0.009658f, -0.001315f, 0.004359f, -0.005047f, -0.006995f, -0.010636f, -0.007784f, 0.000313f, -0.002217f, 0.004615f, 0.001737f, -0.003208f, -0.000876f, 0.008439f, 0.000271f, 0.004517f, -0.001702f, 0.001295f, -0.001729f, -0.002412f, -0.003283f, 0.043903f, 0.019745f, 0.013478f, 0.005734f, -0.005106f, -0.007898f, -0.013827f, 0.007722f, 0.013073f, 0.005546f, -0.006254f, 0.015646f, 0.008658f, 0.015644f, 0.000968f, -0.011128f, -0.004449f, 0.023438f, -0.024435f, -0.004890f, 0.016017f, -0.009424f, -0.005432f, 0.037787f, -0.004807f, 0.010886f, 0.034078f, -0.005362f, -0.002325f, -0.000878f, 0.004169f, -0.001772f, 0.014735f, 0.009649f, 0.012133f, -0.008515f, -0.020250f, 0.008192f, -0.008032f, 0.009821f, -0.003851f, 0.003650f, 0.014314f, 0.008463f, 0.000776f, 0.006460f, 0.002851f, 0.006227f, 0.013840f, 0.007975f, -0.001545f, 0.013657f, 0.005606f, 0.002069f, 0.003156f, 0.025041f, 0.014878f, 0.000175f, 0.013512f, -0.005839f, 0.017098f, -0.004126f, 0.003728f, -0.004720f, + 0.002001f, 0.009982f, -0.005503f, -0.000238f, -0.001022f, 0.003569f, 0.000333f, -0.006280f, 0.000212f, -0.005354f, -0.009904f, 0.001816f, -0.013168f, 0.005269f, 0.008008f, -0.003125f, -0.005660f, -0.003604f, 0.007012f, 0.002259f, 0.000341f, -0.002772f, 0.056917f, 0.025537f, -0.011372f, 0.004836f, 0.029473f, 0.000566f, 0.021322f, -0.006350f, 0.008515f, 0.017542f, -0.013175f, 0.001487f, 0.030960f, 0.027568f, 0.022674f, 0.007843f, 0.019493f, 0.003141f, 0.017107f, 0.005803f, 0.005274f, -0.010725f, -0.012318f, -0.017833f, -0.034965f, 0.011076f, 0.000557f, -0.009643f, -0.003217f, 0.012035f, -0.007836f, -0.001318f, 0.001515f, 0.006720f, -0.030961f, -0.005140f, 0.022719f, 0.017274f, -0.006134f, 0.011378f, 0.009955f, 0.006255f, -0.003664f, -0.007334f, -0.002991f, -0.004967f, -0.002999f, -0.011592f, -0.009612f, 0.007866f, -0.019229f, 0.006316f, 0.016055f, -0.004813f, -0.011192f, -0.017774f, 0.016738f, -0.000613f, -0.008220f, -0.005568f, -0.003668f, -0.006159f, 0.003650f, -0.002892f, -0.006007f, 0.006210f, 0.025974f, -0.012990f, -0.007600f, 0.003210f, -0.004856f, 0.005874f, 0.000398f, 0.013227f, + 0.002734f, -0.001377f, -0.000952f, -0.013907f, -0.006362f, -0.002228f, 0.001343f, 0.000989f, 0.005113f, 0.002981f, 0.000742f, 0.002147f, 0.002739f, 0.008082f, 0.000842f, 0.000152f, -0.005127f, 0.001741f, -0.022542f, -0.006151f, -0.027072f, -0.005754f, -0.027053f, 0.013070f, -0.025778f, 0.013934f, -0.004551f, -0.014747f, -0.004596f, -0.006837f, 0.031312f, 0.004999f, -0.022976f, 0.000570f, -0.015034f, -0.011648f, 0.015383f, -0.017327f, -0.016237f, -0.018089f, 0.027314f, -0.003546f, 0.018005f, -0.027729f, -0.014942f, 0.011242f, -0.013070f, 0.010733f, 0.030254f, 0.020079f, 0.018696f, 0.003376f, -0.003286f, -0.014558f, -0.020998f, -0.000952f, 0.004597f, -0.019227f, 0.000369f, -0.011257f, 0.005561f, 0.008746f, -0.022243f, -0.018669f, -0.034826f, -0.005253f, 0.002355f, -0.014764f, -0.021546f, 0.021389f, 0.001053f, 0.021968f, 0.021337f, -0.002425f, -0.003042f, -0.008474f, 0.012306f, 0.010882f, 0.001527f, 0.005487f, -0.001757f, -0.000878f, 0.010417f, -0.002531f, -0.012207f, -0.009154f, -0.015365f, -0.012679f, -0.004766f, -0.000366f, -0.002101f, -0.019191f, -0.011251f, 0.006566f, 0.001491f, -0.006668f, + 0.008386f, -0.001456f, 0.000459f, 0.013389f, 0.010887f, 0.007246f, 0.002808f, 0.008673f, 0.001288f, 0.000488f, 0.003942f, 0.003035f, -0.037991f, -0.006940f, 0.003707f, -0.003871f, 0.000388f, 0.010041f, -0.008156f, 0.008892f, 0.009066f, -0.006385f, 0.012155f, -0.016764f, 0.020925f, 0.013791f, 0.001036f, -0.015468f, 0.001550f, 0.009715f, -0.044448f, 0.008954f, 0.018593f, -0.032406f, 0.013530f, -0.016756f, -0.023194f, -0.021781f, 0.011225f, -0.005698f, -0.033101f, 0.017632f, 0.009947f, -0.020581f, -0.033494f, 0.006507f, 0.004322f, -0.010990f, -0.002127f, -0.017722f, 0.016675f, 0.013156f, 0.024110f, -0.019371f, 0.003433f, -0.025616f, -0.009228f, 0.004019f, -0.015835f, 0.006382f, -0.001672f, -0.013032f, -0.018742f, -0.020963f, 0.030495f, -0.020673f, -0.009278f, -0.007996f, 0.001601f, 0.013510f, 0.008553f, 0.009760f, 0.000442f, 0.011478f, -0.003641f, 0.001544f, -0.004679f, -0.012849f, 0.002806f, 0.026427f, 0.004494f, 0.000268f, 0.000237f, -0.017599f, 0.011563f, 0.017663f, 0.019143f, 0.003405f, 0.001744f, -0.001176f, -0.001157f, 0.002364f, 0.000715f, -0.008937f, 0.000158f, 0.001370f, + 0.001609f, -0.000229f, 0.000524f, 0.006289f, -0.001956f, 0.000489f, -0.001327f, -0.000010f, 0.011944f, -0.025428f, -0.013543f, -0.026851f, 0.007633f, -0.004749f, 0.010650f, -0.007298f, 0.005038f, 0.008825f, -0.009013f, -0.015317f, 0.022883f, -0.005979f, -0.010222f, 0.026633f, -0.005490f, -0.006169f, 0.030394f, -0.017558f, 0.004464f, 0.007477f, 0.002360f, -0.026778f, 0.000079f, -0.003876f, -0.016127f, 0.009252f, -0.012671f, 0.017097f, -0.003012f, 0.019027f, -0.020786f, 0.012960f, -0.036798f, 0.000449f, -0.020080f, 0.022446f, -0.003458f, 0.003107f, -0.003862f, -0.020373f, -0.001487f, 0.017838f, 0.046950f, 0.003514f, 0.002950f, 0.010026f, 0.016046f, -0.002673f, -0.004524f, 0.001519f, -0.000807f, 0.041346f, -0.003744f, 0.006415f, 0.016580f, -0.016038f, -0.027509f, 0.000143f, -0.029072f, -0.003512f, -0.014926f, -0.010648f, -0.005833f, -0.012215f, 0.006907f, 0.010293f, -0.016932f, 0.021433f, 0.017757f, -0.002478f, -0.004397f, -0.017400f, 0.012198f, 0.004392f, 0.011571f, -0.009725f, 0.004786f, -0.001839f, 0.008753f, 0.001073f, 0.008469f, -0.004240f, 0.006212f, -0.000982f, 0.000156f, 0.002134f, + 0.009607f, 0.004670f, 0.002946f, -0.003091f, 0.000250f, 0.000951f, 0.044314f, 0.048143f, 0.000407f, -0.014868f, -0.011826f, 0.040307f, -0.026501f, -0.030345f, 0.031527f, -0.028671f, 0.018434f, 0.005511f, 0.025511f, 0.023396f, 0.015893f, 0.002458f, -0.016028f, -0.013958f, 0.033093f, -0.014138f, -0.001401f, 0.007970f, 0.028193f, 0.040680f, -0.001226f, 0.027758f, -0.022798f, -0.023926f, 0.002705f, -0.008905f, 0.013172f, 0.008237f, -0.020332f, 0.002668f, 0.012944f, 0.033431f, 0.011451f, 0.013636f, 0.012624f, 0.014891f, 0.003876f, -0.001291f, 0.021296f, 0.003632f, 0.017033f, 0.027146f, 0.005701f, -0.011328f, -0.009510f, 0.024456f, 0.006450f, 0.050289f, 0.011778f, 0.019749f, -0.020550f, -0.032446f, -0.003101f, -0.037865f, -0.024179f, -0.008728f, -0.012901f, 0.001296f, -0.001916f, 0.000179f, 0.000526f, -0.028350f, -0.023368f, -0.012469f, -0.024131f, 0.008697f, 0.009595f, -0.007430f, -0.001867f, -0.022526f, -0.003514f, 0.006479f, -0.006378f, -0.002050f, 0.002293f, -0.014266f, 0.005913f, -0.004473f, 0.001693f, 0.002380f, 0.000086f, 0.000839f, 0.003072f, -0.003506f, 0.000531f, 0.003161f, + -0.000127f, 0.000656f, 0.000958f, -0.021049f, -0.074011f, -0.030558f, -0.060400f, -0.013558f, -0.021114f, -0.008540f, 0.005511f, -0.019813f, -0.023982f, -0.038366f, -0.030493f, 0.027259f, -0.004844f, -0.024409f, -0.025928f, 0.005871f, -0.034505f, -0.048697f, 0.008047f, -0.011337f, -0.010427f, -0.010467f, 0.009378f, -0.029024f, 0.030558f, -0.017759f, 0.020760f, -0.014447f, -0.013858f, 0.000338f, 0.016772f, -0.023665f, -0.022591f, 0.012137f, -0.004260f, 0.033434f, -0.014631f, 0.019165f, 0.028836f, 0.013706f, -0.010477f, -0.004783f, -0.002989f, 0.023649f, -0.008272f, 0.015882f, 0.031926f, -0.026792f, -0.046736f, -0.018402f, 0.015888f, 0.019470f, -0.022037f, 0.036317f, -0.011659f, -0.013109f, -0.004357f, -0.003960f, -0.011213f, -0.029378f, -0.012396f, -0.030354f, -0.029055f, -0.018001f, 0.021498f, 0.005089f, -0.005130f, 0.001988f, 0.033225f, 0.031204f, 0.002242f, -0.014392f, 0.005985f, -0.003233f, 0.013707f, 0.004324f, -0.005912f, -0.013698f, -0.001190f, -0.002712f, -0.021764f, -0.005600f, 0.008350f, 0.022686f, -0.010079f, 0.000076f, 0.008688f, -0.012663f, -0.000348f, -0.000824f, 0.000437f, -0.006566f, + 0.008540f, 0.000569f, 0.002267f, -0.000988f, 0.001342f} +}; + +/********************** Sample Rate = 32000 **********************/ + +const float CRendBin_Combined_BRIR_latency_s_32kHz = 0.000145833328133f; +const int16_t CRendBin_Combined_BRIR_max_num_iterations_32kHz = 22; +const uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][BINAURAL_CHANNELS]={{22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22}, {22, 22} }; +const uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS] = {40, 40}; +const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][22]={{{115, 117, 117, 120, 112, 118, 121, 130, 126, 130, 136, 127, 133, 135, 132, 133, 129, 137, 134, 129, 128, 160},{115, 117, 117, 120, 112, 118, 121, 130, 126, 130, 136, 127, 133, 135, 132, 133, 129, 137, 134, 129, 128, 160}},{{121, 106, 119, 113, 120, 123, 114, 126, 123, 125, 127, 128, 127, 134, 132, 130, 129, 139, 133, 131, 128, 160},{121, 106, 119, 113, 120, 123, 114, 126, 123, 125, 127, 128, 127, 134, 132, 130, 129, 139, 133, 131, 128, 160}},{{113, 103, 116, 104, 123, 123, 122, 124, 130, 128, 132, 131, 131, 132, 130, 132, 130, 135, 137, 128, 128, 160},{113, 103, 116, 104, 123, 123, 122, 124, 130, 128, 132, 131, 131, 132, 130, 132, 130, 135, 137, 128, 128, 160}},{{102, 116, 116, 121, 116, 114, 115, 121, 125, 123, 124, 130, 132, 122, 127, 131, 131, 135, 133, 124, 125, 160},{102, 116, 116, 121, 116, 114, 115, 121, 125, 123, 124, 130, 132, 122, 127, 131, 131, 135, 133, 124, 125, 160}},{{115, 115, 115, 119, 121, 119, 125, 127, 123, 129, 122, 126, 128, 134, 130, 130, 131, 140, 146, 127, 131, 160},{115, 115, 115, 119, 121, 119, 125, 127, 123, 129, 122, 126, 128, 134, 130, 130, 131, 140, 146, 127, 131, 160}},{{112, 106, 118, 121, 115, 117, 129, 123, 128, 126, 130, 130, 131, 131, 130, 134, 133, 149, 130, 132, 126, 160},{112, 106, 118, 121, 115, 117, 129, 123, 128, 126, 130, 130, 131, 131, 130, 134, 133, 149, 130, 132, 126, 160}},{{107, 112, 110, 119, 114, 124, 121, 121, 132, 122, 131, 134, 124, 133, 130, 129, 134, 134, 135, 127, 120, 160},{107, 112, 110, 119, 114, 124, 121, 121, 132, 122, 131, 134, 124, 133, 130, 129, 134, 134, 135, 127, 120, 160}},{{110, 113, 123, 113, 121, 120, 120, 126, 131, 123, 128, 128, 132, 130, 132, 136, 133, 136, 135, 128, 124, 160},{110, 113, 123, 113, 121, 120, 120, 126, 131, 123, 128, 128, 132, 130, 132, 136, 133, 136, 135, 128, 124, 160}},{{114, 101, 113, 113, 124, 126, 123, 128, 122, 127, 132, 127, 136, 128, 128, 127, 132, 132, 129, 125, 120, 160},{114, 101, 113, 113, 124, 126, 123, 128, 122, 127, 132, 127, 136, 128, 128, 127, 132, 132, 129, 125, 120, 160}},{{99, 100, 111, 117, 114, 114, 118, 116, 121, 124, 124, 121, 125, 130, 127, 132, 132, 130, 133, 128, 131, 160},{99, 100, 111, 117, 114, 114, 118, 116, 121, 124, 124, 121, 125, 130, 127, 132, 132, 130, 133, 128, 131, 160}},{{105, 93, 103, 108, 119, 110, 111, 114, 120, 121, 119, 122, 130, 128, 130, 131, 132, 131, 136, 128, 128, 160},{105, 93, 103, 108, 119, 110, 111, 114, 120, 121, 119, 122, 130, 128, 130, 131, 132, 131, 136, 128, 128, 160}},{{105, 100, 112, 114, 115, 108, 117, 120, 123, 117, 122, 129, 124, 128, 124, 132, 135, 131, 139, 153, 116, 160},{105, 100, 112, 114, 115, 108, 117, 120, 123, 117, 122, 129, 124, 128, 124, 132, 135, 131, 139, 153, 116, 160}},{{110, 106, 113, 110, 122, 116, 119, 125, 123, 128, 125, 127, 128, 127, 133, 130, 132, 132, 143, 155, 127, 160},{110, 106, 113, 110, 122, 116, 119, 125, 123, 128, 125, 127, 128, 127, 133, 130, 132, 132, 143, 155, 127, 160}},{{102, 107, 110, 112, 115, 117, 117, 115, 120, 118, 127, 130, 130, 129, 126, 126, 125, 130, 141, 135, 127, 160},{102, 107, 110, 112, 115, 117, 117, 115, 120, 118, 127, 130, 130, 129, 126, 126, 125, 130, 141, 135, 127, 160}},{{110, 117, 106, 118, 118, 116, 121, 124, 128, 125, 122, 122, 126, 131, 124, 130, 133, 131, 139, 134, 131, 160},{110, 117, 106, 118, 118, 116, 121, 124, 128, 125, 122, 122, 126, 131, 124, 130, 133, 131, 139, 134, 131, 160}}}; +const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz = 97; +const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]={0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f}; +const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97},{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97}}; +const float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819]={ + { + {-0.009097f, 0.009352f, -0.003456f, 0.000006f, 0.008745f, -0.004992f, 0.003412f, -0.000642f, 0.001223f, -0.005946f, -0.012435f, -0.002568f, 0.004887f, -0.003199f, 0.002973f, 0.004305f, 0.003661f, -0.002738f, 0.002074f, -0.007701f, -0.001411f, 0.001920f, 0.003183f, -0.000267f, -0.000175f, 0.000950f, 0.001899f, -0.006450f, -0.005352f, 0.002251f, 0.004456f, -0.002233f, 0.004665f, 0.008899f, -0.011970f, 0.001696f, -0.005728f, -0.003886f, 0.002671f, -0.001493f, 0.007354f, -0.002285f, 0.006623f, 0.003476f, 0.001083f, -0.000478f, 0.003540f, 0.000208f, -0.000724f, -0.003736f, 0.010735f, -0.007457f, -0.002261f, 0.003771f, 0.004169f, -0.000190f, -0.003631f, 0.002061f, -0.004016f, 0.004162f, 0.000801f, 0.001514f, -0.000085f, -0.001427f, -0.001326f, 0.005561f, -0.014330f, 0.003361f, -0.001844f, -0.008319f, -0.001409f, 0.007005f, 0.003391f, 0.004349f, -0.006273f, 0.005044f, -0.002184f, 0.003171f, 0.001934f, 0.002467f, -0.002649f, 0.001045f, 0.003774f, -0.002504f, -0.005599f, 0.002282f, -0.005197f, 0.001002f, 0.003817f, -0.000006f, -0.001878f, -0.002174f, 0.001025f, 0.002039f, -0.000843f, 0.002450f, + 0.000116f, 0.001753f, 0.001513f, -0.000691f, -0.000354f, 0.000662f, -0.000808f, -0.000500f, -0.000626f, 0.000674f, -0.001121f, 0.000551f, -0.001643f, -0.000420f, -0.001540f, -0.000233f, -0.000483f, -0.001761f, -0.000375f, -0.016686f, 0.012962f, -0.006248f, 0.002887f, 0.002407f, 0.000392f, -0.003586f, -0.000290f, -0.009385f, -0.011673f, 0.003177f, -0.002238f, 0.003631f, 0.003683f, 0.010504f, -0.008595f, 0.001243f, 0.007167f, 0.006916f, -0.006970f, -0.007462f, -0.003932f, -0.006482f, 0.000619f, -0.002179f, -0.005008f, -0.003892f, 0.000057f, -0.011819f, -0.011237f, -0.002395f, 0.002281f, -0.001037f, 0.000974f, -0.001365f, 0.002603f, -0.006216f, 0.007200f, -0.002539f, 0.004117f, -0.000903f, 0.002921f, -0.005673f, 0.001963f, 0.003910f, 0.004776f, 0.002035f, 0.000950f, 0.001679f, -0.001985f, -0.004707f, 0.009579f, 0.007193f, 0.003065f, -0.003588f, 0.011869f, 0.007989f, -0.003324f, 0.007510f, -0.000563f, -0.005908f, -0.001409f, -0.002146f, -0.005218f, 0.003401f, 0.003979f, 0.001874f, -0.003996f, 0.008337f, -0.005486f, 0.004875f, 0.007106f, -0.001379f, 0.000769f, -0.010431f, -0.004571f, -0.011225f, + 0.001685f, 0.005305f, -0.005327f, -0.001630f, 0.002137f, -0.005093f, -0.001371f, 0.002447f, -0.000245f, 0.001748f, -0.001108f, -0.002723f, -0.007323f, -0.003635f, -0.001273f, -0.001799f, -0.000552f, -0.000181f, 0.000515f, -0.000938f, -0.001185f, -0.002732f, -0.001174f, 0.000053f, 0.000654f, 0.000557f, -0.001428f, -0.000279f, 0.000025f, 0.000369f, -0.000268f, 0.000382f, -0.000083f, 0.000718f, -0.000058f, -0.001357f, -0.002149f, -0.002330f, -0.000153f, -0.001394f, 0.000480f, 0.014048f, 0.006459f, -0.005328f, 0.002440f, 0.001881f, 0.022356f, -0.006525f, 0.006439f, 0.010931f, -0.002057f, 0.009953f, 0.004079f, 0.006793f, -0.008789f, -0.003213f, -0.010307f, -0.004726f, 0.007015f, -0.000138f, -0.004884f, 0.001245f, -0.007217f, -0.000503f, -0.004713f, 0.006695f, -0.002872f, -0.000847f, -0.002584f, 0.003590f, 0.001584f, 0.000145f, -0.000817f, 0.002960f, -0.010871f, -0.008335f, 0.003781f, 0.001067f, -0.001030f, -0.005462f, 0.013012f, 0.003795f, -0.001647f, 0.004357f, 0.005166f, 0.000076f, 0.002567f, 0.001287f, -0.006397f, 0.005884f, -0.007620f, -0.005711f, 0.006869f, -0.008086f, 0.007051f, 0.003221f, + -0.006147f, 0.010651f, 0.005728f, 0.004134f, -0.002878f, 0.009659f, 0.002243f, -0.001243f, -0.002785f, 0.002990f, 0.001121f, -0.001608f, -0.011321f, -0.001571f, -0.002217f, 0.003525f, -0.006658f, 0.009036f, -0.003137f, 0.007417f, -0.007705f, 0.000326f, -0.000825f, 0.009221f, -0.004292f, -0.002939f, 0.001645f, 0.003473f, -0.000135f, 0.001864f, -0.001422f, -0.008361f, -0.000967f, -0.000530f, -0.000461f, -0.001084f, -0.000186f, 0.000106f, -0.001175f, -0.001555f, -0.001756f, -0.001916f, 0.000130f, -0.000711f, 0.000020f, 0.001216f, -0.001432f, 0.000965f, 0.001103f, 0.002559f, -0.003017f, 0.002029f, 0.000884f, 0.001589f, -0.000201f, 0.002372f, 0.000857f, -0.001061f, -0.001843f, -0.000477f, -0.000884f, 0.023307f, -0.019323f, -0.016961f, -0.005456f, 0.017848f, -0.002478f, -0.009654f, 0.012225f, -0.008126f, 0.005783f, -0.000435f, -0.013281f, -0.009030f, 0.011224f, -0.007251f, 0.005568f, -0.007567f, 0.007422f, -0.003287f, -0.002039f, -0.000832f, -0.007313f, 0.003884f, 0.005385f, -0.007352f, 0.001824f, -0.003730f, 0.001539f, 0.003383f, -0.001055f, 0.004845f, 0.001481f, 0.003968f, 0.006278f, -0.008008f, + -0.005880f, 0.007274f, 0.000398f, 0.005654f, 0.005520f, -0.005070f, -0.007556f, -0.002993f, 0.001342f, 0.010011f, -0.010751f, 0.004484f, -0.012008f, -0.014637f, -0.003418f, -0.008354f, -0.001368f, -0.009903f, -0.018872f, -0.009978f, 0.008817f, 0.008242f, 0.005363f, -0.006256f, 0.018145f, -0.005527f, 0.003095f, -0.009965f, -0.009402f, 0.002534f, 0.000041f, -0.000873f, -0.011877f, -0.003848f, -0.000640f, -0.002364f, -0.002272f, -0.006373f, -0.005121f, 0.001371f, -0.001606f, -0.003473f, 0.000447f, -0.006173f, 0.001159f, 0.003593f, 0.006236f, 0.003502f, -0.005180f, 0.005546f, -0.003559f, -0.000294f, 0.006209f, 0.002664f, 0.000957f, -0.001968f, 0.003221f, 0.003684f, 0.002894f, 0.000682f, -0.001537f, 0.000594f, 0.004435f, 0.002309f, 0.002878f, 0.001260f, -0.001588f, 0.002398f, 0.000508f, -0.000215f, 0.000724f, -0.001193f, 0.000475f, 0.000698f, -0.001244f, 0.002461f, 0.003640f, 0.004276f, -0.000217f, -0.000267f, 0.000673f, -0.002669f, 0.003994f, -0.000209f, 0.002516f, 0.029839f, -0.009793f, 0.013953f, -0.003724f, 0.018754f, -0.003639f, -0.002925f, 0.003177f, 0.003763f, -0.003166f, -0.021609f, + 0.002141f, -0.002120f, -0.005725f, -0.000372f, -0.001011f, 0.007632f, -0.002440f, 0.018317f, -0.002401f, 0.002024f, -0.001288f, 0.010339f, -0.002012f, 0.003532f, -0.008557f, -0.000384f, -0.005866f, -0.006215f, -0.001723f, -0.001845f, 0.000114f, 0.006599f, -0.011752f, -0.003569f, 0.004042f, -0.001448f, 0.008197f, 0.001780f, -0.002025f, -0.005511f, -0.005336f, -0.005851f, -0.010745f, 0.003957f, 0.004611f, 0.003922f, -0.018758f, -0.002878f, 0.013313f, 0.007335f, -0.002971f, -0.000712f, -0.005781f, -0.013033f, -0.013649f, 0.013532f, -0.004179f, -0.009299f, -0.005085f, 0.007293f, 0.005949f, 0.000549f, 0.006664f, 0.002615f, 0.006445f, -0.003291f, -0.013385f, -0.004703f, -0.006013f, -0.006975f, 0.009908f, 0.006405f, -0.001069f, 0.010871f, 0.016481f, -0.004045f, 0.006999f, -0.006485f, -0.000789f, -0.000014f, 0.007189f, -0.000676f, 0.001816f, 0.001518f, 0.002245f, 0.005573f, -0.005637f, 0.004347f, -0.002922f, 0.000345f, -0.003585f, 0.000511f, 0.001914f, 0.003945f, 0.002952f, -0.000179f, 0.001066f, 0.000161f, -0.000429f, 0.001998f, -0.005321f, -0.000836f, -0.004246f, 0.000901f, -0.000756f, -0.000762f, + -0.001856f, -0.001197f, -0.002213f, 0.002304f, 0.001127f, -0.044753f, 0.024465f, 0.008854f, -0.002148f, -0.002075f, 0.000034f, -0.006890f, -0.012530f, -0.002791f, 0.005996f, 0.018819f, 0.012621f, -0.017324f, -0.003374f, -0.010343f, 0.006930f, -0.000965f, -0.023360f, -0.006958f, 0.014211f, 0.008738f, 0.004810f, 0.012027f, 0.007266f, -0.001326f, -0.001603f, 0.003491f, -0.008933f, -0.005324f, 0.001973f, 0.010481f, -0.004518f, -0.008975f, -0.012930f, -0.006564f, 0.006362f, 0.020733f, 0.001386f, -0.003730f, 0.004355f, -0.004373f, -0.015493f, 0.001069f, -0.010953f, -0.008655f, -0.010224f, 0.006257f, -0.000676f, -0.014552f, 0.002648f, 0.005404f, 0.005605f, -0.015737f, -0.008743f, -0.005910f, -0.003945f, -0.001785f, -0.005846f, -0.002878f, -0.007541f, -0.015277f, -0.001834f, -0.012986f, -0.015558f, -0.009682f, -0.002802f, 0.002593f, -0.009286f, -0.013695f, 0.003954f, 0.010847f, -0.000635f, -0.002087f, -0.001360f, 0.007868f, -0.011950f, 0.008802f, 0.013967f, 0.013556f, 0.010683f, 0.018260f, 0.000169f, -0.007639f, 0.004878f, 0.000740f, -0.002003f, -0.001789f, -0.000041f, -0.004267f, 0.006007f, 0.000230f, + 0.000397f, -0.003811f, -0.001084f, 0.001914f, 0.002231f, -0.002254f, -0.002039f, 0.001078f, 0.006204f, -0.000898f, 0.002326f, 0.002028f, 0.005298f, -0.004424f, 0.000225f, -0.000174f, -0.004877f, 0.000647f, 0.000623f, 0.004007f, 0.000402f, 0.000760f, 0.003470f, 0.002140f, -0.006062f, 0.002171f, -0.002198f, -0.018482f, 0.006963f, -0.009145f, -0.001585f, 0.002406f, 0.005445f, -0.000770f, 0.009545f, 0.000229f, -0.001932f, -0.025922f, 0.012005f, -0.004823f, -0.005515f, 0.009292f, -0.015030f, -0.020661f, 0.008419f, -0.007245f, -0.009694f, -0.003066f, 0.018637f, 0.011719f, -0.006835f, -0.004033f, 0.008664f, -0.002592f, -0.000943f, 0.002502f, 0.008455f, 0.015532f, 0.009881f, 0.012566f, -0.001944f, -0.000553f, 0.000291f, -0.008295f, 0.002101f, -0.003500f, 0.021145f, -0.016187f, -0.009391f, -0.008566f, -0.008028f, 0.005083f, 0.002852f, 0.007573f, -0.001278f, -0.010694f, -0.014329f, -0.004146f, -0.017836f, -0.024828f, -0.004998f, 0.000665f, 0.019262f, 0.003815f, -0.015310f, -0.003933f, 0.014434f, -0.006136f, 0.004820f, 0.004344f, 0.008089f, -0.011497f, -0.017253f, -0.007630f, -0.008795f, 0.027799f, + 0.003080f, -0.008924f, 0.006025f, 0.004632f, -0.002079f, 0.003497f, 0.006333f, -0.000779f, 0.012313f, -0.016348f, -0.014665f, 0.004742f, -0.006790f, 0.014818f, -0.006885f, -0.000388f, 0.007942f, -0.002451f, 0.007032f, -0.000434f, -0.000391f, -0.000492f, -0.002439f, -0.000262f, 0.006323f, 0.002358f, 0.006142f, 0.003466f, 0.003048f, 0.000218f, -0.002298f, -0.001011f, 0.002551f, -0.000811f, 0.000748f, -0.001265f, 0.004399f, -0.003673f, 0.002546f, -0.003291f, 0.004436f, -0.004270f, 0.000373f, -0.000412f, -0.000494f, 0.003184f, 0.004179f, -0.004467f, 0.003091f, 0.001719f, -0.001533f, 0.006559f, 0.016041f, 0.005150f, -0.001196f, 0.011122f, -0.001968f, -0.013579f, -0.002434f, -0.001093f, 0.013608f, -0.007499f, -0.001710f, -0.004004f, 0.002291f, -0.004059f, 0.000941f, 0.004534f, 0.006483f, 0.009329f, 0.006133f, 0.003041f, 0.023777f, 0.009461f, 0.007885f, -0.000884f, -0.018570f, 0.001353f, -0.015452f, 0.004876f, -0.010446f, 0.002708f, 0.000140f, 0.006139f, 0.029216f, 0.008398f, -0.004430f, 0.010599f, -0.008142f, 0.009049f, -0.005019f, 0.015311f, -0.008205f, 0.000041f, -0.011328f, 0.007066f, + 0.011647f, -0.013426f, 0.027468f, -0.006604f, 0.002109f, -0.004096f, -0.007258f, 0.003055f, -0.008108f, -0.023353f, 0.004095f, -0.005770f, -0.001176f, -0.014378f, 0.003572f, -0.005013f, -0.024025f, -0.010821f, -0.006609f, -0.021237f, 0.012264f, 0.030905f, 0.037445f, -0.035418f, -0.026998f, -0.014920f, 0.001659f, 0.008987f, -0.010818f, 0.005221f, -0.012295f, 0.003413f, 0.017377f, 0.026700f, -0.018136f, 0.029882f, 0.009699f, 0.003628f, 0.005249f, 0.005519f, -0.006418f, 0.010357f, 0.009586f, 0.011523f, 0.008922f, 0.003821f, 0.013432f, 0.000216f, 0.004347f, -0.000086f, 0.000160f, 0.007340f, -0.001921f, -0.008514f, -0.002151f, 0.005841f, 0.004602f, 0.001959f, 0.000136f, -0.000382f, -0.000537f, 0.005890f, 0.004780f, 0.002192f, -0.004892f, 0.001475f, 0.001652f, 0.000269f, 0.006321f, 0.002841f, 0.004012f, 0.000158f, 0.004792f, 0.002827f, 0.004845f, 0.006582f, 0.006893f, 0.000619f, 0.000484f, -0.003153f, 0.007585f, 0.006764f, -0.000526f, -0.001819f, 0.000981f, 0.004936f, 0.013866f, -0.024887f, 0.037176f, 0.001191f, 0.021943f, 0.008217f, -0.007135f, -0.007383f, 0.020361f, -0.011327f, + 0.013017f, 0.015959f, -0.001587f, -0.010500f, 0.001037f, 0.016495f, 0.009470f, 0.008687f, 0.007593f, -0.001007f, 0.003002f, 0.005832f, 0.020791f, 0.014784f, -0.010475f, -0.008860f, -0.001250f, -0.004278f, -0.001850f, -0.010257f, -0.006727f, 0.010672f, 0.018375f, 0.005032f, 0.027511f, -0.007123f, 0.030044f, 0.001791f, 0.014357f, 0.033101f, 0.023522f, 0.007863f, 0.007068f, 0.015208f, -0.002836f, -0.012748f, 0.000306f, 0.014343f, -0.007625f, -0.014688f, 0.000944f, -0.001950f, 0.030228f, 0.024443f, 0.000074f, 0.034208f, -0.002631f, 0.018603f, 0.009949f, 0.014811f, -0.001514f, -0.011188f, 0.015508f, -0.002591f, 0.018078f, 0.012594f, 0.037808f, -0.020477f, -0.003247f, -0.041818f, 0.009346f, -0.020323f, -0.002477f, 0.019931f, -0.007628f, 0.008469f, -0.003128f, 0.023228f, -0.005640f, -0.015378f, -0.000845f, -0.004913f, 0.007163f, -0.000536f, 0.011380f, 0.013428f, 0.003778f, -0.002914f, 0.010604f, -0.001767f, 0.004787f, 0.000552f, -0.006448f, 0.005173f, 0.005126f, 0.009508f, 0.005032f, 0.010597f, 0.004868f, 0.000329f, 0.000744f, -0.002599f, 0.000469f, 0.010412f, -0.003186f, -0.006923f, + 0.004635f, 0.000002f, 0.001813f, 0.008637f, 0.002192f, 0.002531f, 0.003730f, 0.005935f, -0.001359f, -0.000429f, 0.003932f, 0.007126f, 0.010902f, 0.010267f, 0.000335f, 0.005176f, 0.000444f, 0.000135f, 0.004958f, 0.007415f, -0.024477f, -0.017953f, 0.008850f, -0.014496f, 0.008326f, -0.008728f, 0.002407f, 0.022576f, -0.003854f, -0.021222f, 0.005726f, -0.008884f, 0.021660f, -0.022671f, -0.015912f, 0.009306f, 0.010399f, 0.015904f, 0.000495f, -0.001509f, 0.010150f, -0.006157f, -0.015626f, 0.009724f, -0.006487f, -0.012325f, 0.003609f, 0.012220f, -0.009018f, 0.022910f, 0.009122f, -0.000746f, 0.002866f, 0.011269f, 0.004751f, -0.038899f, 0.015785f, -0.003904f, -0.004277f, -0.006635f, 0.020575f, 0.000219f, 0.021912f, 0.001022f, 0.001757f, 0.002535f, -0.006021f, -0.002266f, 0.010537f, -0.012378f, 0.002767f, 0.035558f, 0.002918f, 0.026185f, 0.001814f, -0.005174f, -0.003069f, -0.017419f, -0.036671f, -0.026410f, 0.011834f, 0.016880f, -0.007448f, 0.028054f, 0.011692f, -0.019760f, -0.011845f, 0.025719f, 0.017910f, 0.017118f, 0.004943f, -0.007652f, -0.000028f, -0.001190f, -0.015967f, -0.004627f, + -0.009454f, -0.042658f, -0.018726f, -0.000756f, 0.028515f, 0.006661f, -0.006958f, 0.003347f, 0.024425f, -0.005873f, 0.000946f, 0.000420f, 0.005950f, -0.007840f, -0.004215f, -0.005778f, -0.003817f, -0.001847f, 0.005607f, 0.000019f, -0.001410f, -0.000058f, 0.004304f, 0.004053f, 0.006903f, -0.004802f, -0.008407f, 0.003246f, -0.008883f, -0.004341f, 0.000690f, 0.003458f, 0.000601f, -0.001114f, 0.008498f, -0.003756f, -0.003053f, -0.009885f, 0.003501f, -0.008887f, 0.006923f, 0.003664f, 0.004446f, -0.007437f, 0.000270f, -0.000912f, 0.003392f, -0.004082f, 0.002538f, -0.003590f, 0.004438f, -0.008253f, -0.000159f, -0.009746f, 0.011320f, 0.023794f, 0.009362f, 0.008298f, 0.027246f, 0.022860f, 0.019159f, 0.001218f, 0.007433f, 0.001925f, -0.003866f, -0.004745f, 0.004868f, -0.001657f, -0.015557f, 0.003980f, 0.016210f, 0.000284f, -0.004057f, 0.005332f, -0.038708f, 0.013507f, -0.015132f, 0.010188f, 0.013753f, 0.012443f, -0.014241f, 0.008395f, -0.001041f, 0.000140f, 0.023677f, 0.017433f, 0.000703f, 0.009556f, 0.007203f, -0.002677f, -0.012778f, 0.003702f, 0.011801f, 0.000697f, 0.017004f, 0.005430f, + 0.015426f, 0.029956f, 0.002013f, 0.012380f, 0.013097f, 0.016290f, -0.000190f, -0.009635f, 0.025943f, -0.009367f, 0.021036f, -0.023727f, -0.019439f, 0.028405f, -0.000924f, 0.009720f, 0.016935f, 0.024852f, 0.031981f, 0.013781f, 0.004818f, -0.014879f, 0.007417f, -0.002648f, -0.027676f, 0.024406f, 0.015379f, -0.022545f, -0.000873f, 0.001945f, -0.028377f, 0.010218f, 0.023458f, 0.014080f, 0.000307f, 0.009340f, 0.006786f, -0.012934f, 0.025630f, 0.002931f, -0.004419f, 0.013468f, 0.025359f, 0.010281f, -0.000488f, -0.008161f, -0.006299f, -0.002459f, 0.004764f, 0.007534f, 0.010786f, 0.003875f, 0.002296f, 0.003735f, 0.012520f, 0.011247f, 0.013862f, 0.000356f, -0.000885f, 0.005825f, 0.011948f, 0.000570f, 0.001591f, -0.001759f, 0.005809f, 0.001471f, -0.000780f, -0.003778f, 0.003263f, -0.007697f, -0.014146f, -0.000136f, 0.008793f, 0.000323f, 0.006380f, -0.006467f, 0.005030f, 0.000854f, 0.005641f, 0.001333f, -0.003411f, 0.003875f, -0.002121f, -0.001630f, -0.000377f, -0.008346f, 0.006866f, -0.002730f, 0.003176f, 0.005475f, 0.000826f, -0.000727f, -0.003543f, -0.005212f, -0.065005f, -0.040450f, + 0.013101f, 0.013744f, 0.026582f, 0.044054f, -0.012250f, -0.006967f, -0.014164f, -0.013078f, -0.016696f, -0.017812f, 0.001320f, 0.007071f, 0.005455f, 0.027796f, 0.001080f, 0.027280f, -0.001524f, 0.009366f, 0.012495f, 0.009684f, 0.020177f, 0.014469f, 0.000865f, 0.017887f, -0.000394f, -0.002136f, -0.010491f, 0.012106f, -0.001812f, -0.026679f, -0.023255f, 0.014480f, -0.003536f, 0.031816f, 0.018794f, 0.020466f, 0.007363f, -0.040006f, 0.009432f, 0.025185f, -0.004082f, 0.007346f, -0.006360f, 0.005023f, 0.031374f, -0.001066f, 0.026249f, 0.044198f, 0.002232f, -0.016624f, -0.000732f, 0.000513f, -0.027987f, 0.037541f, 0.017586f, -0.004918f, -0.002423f, 0.027226f, 0.012507f, -0.032846f, -0.027110f, 0.010641f, -0.011980f, 0.015820f, 0.011032f, 0.005075f, -0.013371f, -0.023290f, -0.001478f, 0.006027f, 0.004034f, 0.025410f, -0.034360f, 0.005083f, -0.002716f, -0.028680f, -0.014143f, -0.028839f, 0.024873f, -0.008469f, 0.034536f, -0.027361f, 0.002115f, -0.013090f, 0.019417f, 0.008798f, -0.009064f, -0.001505f, 0.017836f, 0.001309f, 0.005231f, -0.010435f, -0.006142f, -0.008793f, 0.015722f, 0.008244f, + -0.000585f, 0.004505f, 0.004331f, -0.014684f, 0.000457f, -0.003992f, 0.004656f, 0.003310f, -0.003795f, -0.014994f, -0.005894f, -0.011016f, 0.012810f, -0.009764f, 0.001563f, -0.002461f, 0.012649f, -0.002582f, -0.002973f, -0.004496f, -0.008944f, -0.000255f, -0.006175f, 0.005526f, 0.013957f, 0.013018f, -0.001615f, -0.013130f, 0.016257f, 0.046031f, -0.054795f, -0.015334f, -0.026712f, -0.001129f, 0.008686f, 0.001445f, 0.036736f, -0.037918f, 0.017926f, -0.005184f, 0.007323f, -0.004598f, 0.020175f, -0.011133f, -0.018769f, -0.001579f, -0.005467f, 0.014250f, -0.001183f, 0.009631f, 0.021377f, -0.004459f, -0.016013f, -0.002155f, 0.024041f, -0.014154f, 0.005737f, 0.005394f, 0.000961f, -0.002196f, 0.023879f, -0.000916f, -0.006150f, -0.039885f, 0.012835f, -0.009881f, -0.025173f, -0.021926f, -0.005811f, -0.024305f, -0.014302f, -0.021109f, 0.010016f, -0.024909f, 0.024846f, -0.022865f, 0.015409f, -0.011825f, 0.030121f, -0.029190f, -0.016933f, -0.004417f, 0.017459f, 0.007159f, 0.000161f, -0.012030f, -0.023886f, 0.002402f, 0.009355f, 0.034095f, 0.017906f, 0.007419f, -0.019501f, 0.011581f, -0.017297f, -0.019556f, + 0.017053f, -0.018987f, 0.009048f, 0.022081f, 0.018466f, -0.004954f, -0.007034f, -0.015990f, 0.026626f, 0.002566f, 0.025484f, 0.041128f, -0.008039f, -0.021640f, -0.009630f, -0.007233f, -0.014814f, 0.006473f, -0.024599f, 0.010679f, 0.008047f, 0.007350f, 0.019485f, -0.013809f, 0.000739f, -0.002555f, 0.004954f, 0.017654f, 0.000534f, 0.013871f, -0.005033f, -0.000389f, 0.001767f, -0.007952f, -0.002806f, 0.008304f, 0.004438f, -0.011346f, -0.014721f, -0.007070f, 0.006520f, 0.005767f, -0.006459f, 0.020984f, 0.006182f, -0.015465f, 0.007771f, 0.011177f, 0.028078f, 0.022723f, 0.012800f, 0.004646f, 0.002721f, -0.011866f, -0.009218f, -0.000475f, -0.009341f, 0.001683f, -0.005415f, -0.017300f, 0.009500f, -0.005792f, -0.002395f, 0.001936f, 0.009362f, 0.000119f, 0.030661f, 0.042393f, -0.044507f, 0.033005f, 0.023048f, 0.001294f, 0.016634f, 0.056286f, -0.015629f, -0.015976f, 0.005473f, 0.016699f, 0.023445f, 0.007865f, -0.021756f, 0.024974f, -0.008965f, 0.049761f, -0.001164f, -0.007991f, 0.016181f, 0.013222f, 0.013034f, -0.000336f, 0.046674f, -0.038461f, 0.009574f, -0.000503f, 0.012915f, -0.015926f, + -0.032043f, 0.016214f, 0.012765f, 0.013264f, -0.011127f, -0.008363f, 0.039035f, 0.014796f, 0.049019f, 0.004677f, -0.017946f, -0.001733f, 0.011000f, -0.004041f, 0.050878f, -0.006174f, 0.027763f, -0.004708f, 0.045663f, 0.016815f, 0.012415f, -0.010831f, -0.002427f, 0.025283f, 0.000602f, 0.027059f, 0.020391f, 0.023939f, -0.031364f, 0.005280f, 0.022634f, 0.027287f, 0.020335f, 0.015724f, 0.036548f, 0.044926f, -0.033967f, -0.003854f, 0.068059f, -0.016098f, -0.018274f, 0.044205f, 0.059402f, 0.001362f, -0.000473f, -0.031834f, -0.026275f, -0.001485f, 0.029889f, -0.004103f, -0.005494f, 0.001607f, -0.002162f, -0.008005f, -0.022736f, -0.008086f, -0.001616f, -0.013263f, 0.001041f, 0.014105f, -0.007612f, 0.017968f, -0.017782f, 0.015874f, -0.003516f, 0.013863f, -0.013300f, 0.000725f, 0.010186f, 0.006181f, 0.017339f, -0.002772f, -0.008963f, -0.003735f, 0.005252f, 0.016020f, 0.004787f, -0.005343f, 0.021865f, -0.006488f, 0.011589f, 0.011787f, -0.001854f, -0.002140f, -0.004790f, 0.032029f, -0.011463f, 0.004371f, 0.008227f, 0.012100f, -0.005619f, -0.020285f, -0.011814f, -0.003288f, 0.024112f, 0.011919f, + -0.001677f, 0.001737f, 0.008657f, -0.001239f, 0.000413f, 0.008791f, 0.004623f, 0.002472f, 0.000332f, 0.018756f, 0.042068f, -0.002457f, 0.013214f, -0.035737f, 0.034261f, -0.018079f, -0.011070f, -0.031295f, -0.020217f, 0.064376f, 0.001025f, -0.045231f, -0.020063f, -0.001308f, 0.000317f, -0.005948f, 0.049872f, 0.023244f, -0.004101f, -0.020762f, -0.001826f, 0.013073f, -0.006006f, 0.066226f, 0.014240f, 0.029099f, 0.010205f, -0.014959f, -0.037343f, 0.008771f, -0.000257f, 0.005817f, -0.028885f, -0.003150f, -0.019445f, 0.022256f, 0.000323f, 0.003572f, 0.023383f, -0.021098f, -0.015186f, 0.004462f, 0.001229f, 0.006764f, -0.031878f, -0.025356f, -0.054766f, -0.028917f, 0.002599f, -0.031567f, 0.004453f, -0.022961f, -0.013403f, 0.040654f, 0.013095f, -0.020054f, 0.012492f, 0.004428f, 0.000098f, 0.039069f, -0.006460f, 0.047364f, 0.018487f, -0.020723f, -0.057804f, 0.009878f, 0.009552f, 0.031911f, -0.017089f, -0.042007f, -0.014567f, 0.011813f, 0.002389f, -0.010256f, -0.029719f, -0.009961f, -0.042116f, -0.048679f, 0.015442f, -0.003029f, 0.049885f, -0.016200f, -0.029845f, -0.026608f, -0.002068f, 0.034656f, + -0.001531f, 0.012516f, 0.022846f, 0.016815f, -0.007315f, 0.011008f, 0.015752f, 0.004710f, 0.016143f, 0.015026f, -0.010543f, -0.002033f, 0.022473f, -0.004833f, 0.003502f, 0.020516f, -0.003549f, 0.011970f, -0.015052f, 0.005562f, 0.012517f, -0.007590f, 0.007673f, 0.006385f, -0.014000f, 0.018701f, -0.017678f, 0.008748f, 0.010163f, 0.014707f, -0.003269f, -0.011092f, 0.021048f, -0.003318f, 0.015716f, -0.022516f, -0.010096f, -0.016717f, -0.012973f, 0.001378f, -0.010570f, 0.007656f, 0.001746f, 0.002788f, -0.021315f, 0.029972f, -0.033618f, -0.002208f, 0.050608f, -0.011133f, 0.014848f, 0.005080f, 0.006545f, -0.047812f, 0.039363f, -0.004158f, -0.038280f, -0.022549f, 0.019821f, -0.005934f, 0.009842f, -0.000483f, -0.015960f, -0.012031f, 0.006706f, -0.012054f, -0.002903f, -0.000932f, -0.055385f, -0.014714f, -0.037185f, 0.007919f, 0.013017f, -0.000611f, -0.016452f, 0.006275f, -0.007948f, 0.021383f, -0.049027f, 0.002991f, 0.008376f, 0.027681f, -0.021432f, 0.025768f, -0.021114f, 0.016289f, 0.004288f, 0.019980f, -0.032065f, 0.009475f, -0.015964f, -0.034229f, 0.021901f, -0.027758f, -0.055330f, 0.007803f, + -0.005330f, 0.043200f, -0.021155f, 0.005782f, 0.019834f, 0.028558f, 0.032517f, 0.003214f, -0.011360f, -0.020881f, 0.000491f, 0.015261f, 0.021356f, -0.043305f, 0.048015f, -0.000681f, -0.032699f, -0.024627f, -0.043454f, 0.017319f, 0.010336f, 0.016926f, 0.007444f, 0.045597f, -0.016484f, 0.049583f, -0.027259f, 0.011374f, -0.011189f, -0.023490f, -0.069716f, 0.038931f, 0.007322f, -0.018748f, -0.047395f, -0.003055f, 0.008555f, -0.004354f, 0.017071f, -0.013043f, -0.015383f, -0.002769f, 0.007144f, -0.013568f, -0.013301f, -0.008687f, -0.002670f, 0.006993f, -0.004343f, -0.004531f, -0.018957f, 0.013569f, 0.000191f, -0.010571f, 0.008313f, -0.007762f, 0.014181f, -0.004802f, 0.006956f, 0.009248f, 0.017569f, -0.006494f, 0.015922f, 0.001464f, 0.000611f, -0.017838f, -0.014046f, 0.003937f, 0.006276f, 0.002074f, 0.000612f, -0.003745f, -0.011783f, -0.006714f, -0.005772f, -0.012866f, -0.006091f, 0.021486f, -0.011291f, -0.012803f, 0.006435f, -0.027669f, -0.041013f, -0.000258f, 0.022477f, -0.009074f, -0.044410f, -0.007167f, -0.064857f, 0.031265f, -0.071667f, 0.042616f, -0.049573f, -0.043310f, 0.012227f, 0.036949f, + 0.027612f, -0.024736f, 0.025902f, 0.046507f, 0.008214f, 0.006825f, 0.010902f, 0.004059f, -0.027558f, 0.033307f, -0.056224f, -0.035047f, 0.003089f, -0.003639f, -0.003666f, -0.007631f, -0.014052f, 0.007327f, 0.051627f, 0.013192f, 0.007132f, 0.004666f, -0.024366f, 0.029832f, -0.005472f, -0.052183f, -0.008049f, 0.000931f, 0.001080f, -0.035764f, -0.025169f, 0.027180f, -0.008950f, 0.046775f, 0.008687f, -0.000164f, -0.038245f, -0.021154f, 0.014072f, 0.005865f, -0.010433f, 0.040041f, -0.031859f, -0.019555f, -0.001392f, -0.002561f, 0.037985f, 0.002882f, 0.044439f, -0.000195f, -0.036295f, 0.008833f, -0.030937f, 0.023378f, -0.004321f, 0.031931f, 0.060832f, -0.093788f, 0.031917f, 0.012744f, 0.017180f, 0.035217f, 0.008833f, -0.043129f, -0.009905f, -0.004104f, -0.007703f, 0.021726f, -0.043888f, 0.003962f, -0.011439f, -0.006464f, -0.030207f, -0.016484f, -0.045733f, 0.004905f, -0.002795f, 0.004521f, 0.012720f, -0.018795f, -0.003259f, 0.022062f, -0.013593f, 0.004174f, -0.007513f, -0.022773f, 0.010619f, 0.013456f, -0.015698f, -0.001855f, -0.024873f, -0.001656f, -0.036039f, 0.012821f, 0.009035f, -0.004699f, + 0.004032f, -0.009316f, 0.001683f, 0.007177f, -0.005631f, -0.006937f, 0.020843f, 0.025081f, -0.005495f, 0.008199f, 0.004265f, 0.025749f, 0.011729f, -0.032820f, 0.004537f, 0.018557f, -0.010435f, 0.018753f, 0.006328f, 0.008540f, 0.076646f, 0.066248f, -0.018868f, -0.025519f, -0.001450f, -0.050267f, 0.029464f, -0.002794f, 0.011154f, 0.003999f, -0.025392f, 0.076479f, -0.032767f, -0.134662f, -0.019666f, 0.026982f, -0.090661f, -0.015454f, 0.028441f, -0.076751f, 0.010712f, 0.050126f, -0.035277f, 0.050009f, -0.047882f, 0.042980f, 0.053243f, -0.033882f, 0.014529f, -0.004802f, 0.001193f, -0.014294f, -0.021013f, -0.003778f, 0.032780f, -0.021002f, -0.035101f, -0.019086f, -0.028262f, -0.002888f, -0.022179f, -0.003521f, 0.011759f, -0.005175f, 0.032009f, -0.028113f, -0.034650f, 0.027744f, -0.036655f, -0.054300f, -0.069750f, -0.024194f, -0.001642f, 0.013687f, 0.038895f, -0.016121f, 0.017442f, 0.018336f, -0.012785f, -0.005894f, 0.064075f, -0.042236f, -0.001625f, 0.043971f, 0.013604f, 0.034603f, -0.008610f, 0.012696f, 0.048649f, 0.025136f, -0.002640f, -0.005805f, -0.029980f, 0.012424f, 0.048932f, -0.045368f, + 0.034611f, -0.044894f, 0.013143f, 0.063794f, 0.014677f, -0.035628f, 0.036200f, 0.005885f, -0.022849f, -0.017704f, 0.043804f, 0.014556f, 0.018894f, -0.002503f, 0.003314f, 0.012154f, 0.014368f, -0.001168f, -0.004390f, 0.018772f, 0.016251f, 0.003564f, -0.021654f, 0.023973f, 0.002944f, -0.008082f, 0.005858f, 0.008308f, -0.015771f, -0.004044f, 0.012153f, 0.002485f, 0.020246f, -0.024873f, 0.037612f, 0.029285f, -0.005188f, -0.023720f, -0.009700f, 0.025208f, 0.028663f, 0.046382f, -0.001443f, 0.009026f, 0.007554f, 0.025475f, -0.038609f, -0.020481f, 0.038696f, 0.024322f, 0.002602f, -0.006161f, 0.003302f, 0.010784f, -0.020227f, -0.015779f, -0.013617f, 0.002897f, 0.012316f, -0.006185f, -0.021939f, -0.015686f, 0.067248f, 0.045561f, -0.064936f, -0.013140f, 0.057887f, -0.017689f, -0.035942f, -0.025379f, -0.036067f, -0.021292f, 0.058434f, 0.035639f, -0.004793f, 0.026517f, -0.006472f, 0.032335f, -0.020454f, -0.011355f, 0.064918f, -0.027100f, 0.011656f, -0.018858f, -0.007123f, -0.000784f, 0.017681f, 0.052847f, 0.020279f, -0.035891f, -0.010619f, -0.001695f, -0.005538f, 0.029730f, 0.003870f, 0.053220f, + -0.015812f, 0.009165f, -0.005611f, 0.015511f, -0.044767f, 0.026797f, -0.041307f, 0.027856f, -0.002307f, 0.040902f, -0.010806f, 0.030324f, -0.014129f, 0.009531f, 0.017282f, -0.017696f, 0.017907f, 0.041301f, 0.051468f, -0.027361f, 0.052737f, 0.022210f, 0.062589f, -0.018039f, 0.011676f, -0.002369f, -0.007886f, -0.012058f, -0.004500f, -0.020805f, -0.103022f, -0.064788f, -0.020103f, -0.001338f, 0.014414f, 0.007207f, 0.023581f, 0.038696f, -0.056790f, -0.003233f, -0.023056f, 0.085622f, -0.006193f, -0.026144f, -0.007651f, -0.075246f, -0.063092f, 0.094638f, 0.038308f, 0.021100f, -0.014818f, 0.029594f, 0.002242f, -0.068922f, 0.013853f, 0.004581f, -0.026412f, -0.026958f, 0.004102f, 0.000286f, 0.007096f, -0.014514f, -0.007565f, -0.033837f, -0.028778f, 0.011973f, 0.014759f, 0.012936f, 0.009805f, -0.017670f, -0.026033f, -0.015846f, -0.033614f, 0.020951f, 0.006914f, -0.059443f, -0.007310f, -0.017357f, -0.004396f, 0.028830f, -0.027616f, -0.038542f, -0.008756f, 0.024595f, 0.008055f, -0.026833f, 0.015547f, 0.034066f, -0.064110f, -0.017379f, 0.022356f, -0.001392f, -0.005221f, -0.012420f, -0.002959f, 0.010851f, + 0.018669f, 0.004221f, 0.051199f, -0.073542f, 0.069629f, -0.020058f, -0.020518f, 0.018077f, 0.032527f, -0.057549f, -0.011353f, 0.001218f, 0.011749f, 0.003312f, -0.001440f, 0.029174f, -0.017368f, 0.003919f, 0.015435f, 0.017064f, 0.024370f, 0.020193f, 0.006887f, -0.031498f, -0.006182f, 0.043302f, -0.041671f, -0.035613f, 0.044873f, 0.015445f, 0.031762f, 0.049026f, 0.075918f, -0.016985f, -0.047964f, 0.064245f, -0.025676f, -0.010628f, 0.066962f, 0.021165f, -0.024311f, -0.069485f, -0.045800f, -0.006814f, -0.025537f, 0.032957f, 0.065997f, 0.033908f, -0.022391f, 0.067774f, 0.022934f, -0.024305f, 0.018842f, 0.075611f, 0.022027f, 0.014802f, -0.015713f, -0.060243f, -0.080920f, -0.064294f, -0.004448f, 0.049074f, 0.015156f, 0.031076f, 0.115847f, 0.057172f, -0.069000f, -0.046433f, 0.030900f, -0.095628f, -0.043800f, 0.082818f, 0.029747f, -0.106270f, -0.088616f, -0.041020f, -0.067789f, -0.063731f, -0.038022f, 0.058133f, -0.016260f, -0.011949f, 0.151420f, 0.025611f, -0.043277f, -0.011865f, -0.046777f, 0.080528f, -0.016698f, 0.017642f, 0.005794f, 0.001338f, -0.043760f, -0.016831f, -0.003213f, -0.022109f, + 0.005542f, 0.017404f, 0.039580f, 0.005287f, -0.026496f, -0.000995f, 0.000109f, -0.017483f, 0.008381f, 0.011562f, 0.013578f, -0.034720f, 0.009211f, -0.032159f, 0.005879f, 0.017079f, -0.001640f, 0.025895f, -0.005982f, -0.001572f, 0.026359f, -0.005243f, 0.014863f, 0.029038f, -0.009552f, 0.008713f, 0.020270f, 0.021839f, 0.018183f, 0.003660f, 0.004787f, 0.015200f, -0.015662f, -0.006102f, 0.010746f, -0.103137f, 0.071669f, 0.030830f, 0.023278f, 0.028868f, -0.010948f, 0.035392f, 0.029107f, 0.041468f, -0.007718f, 0.056825f, -0.035516f, 0.043124f, -0.015547f, -0.032873f, -0.010329f, -0.053983f, 0.005743f, -0.019778f, 0.019236f, -0.013651f, -0.020810f, 0.051926f, -0.059461f, 0.038502f, -0.001918f, -0.025910f, -0.010284f, 0.023023f, 0.026104f, 0.018807f, 0.049211f, 0.039608f, -0.028315f, -0.005909f, -0.025319f, 0.022081f, -0.022427f, 0.017222f, 0.023768f, 0.010837f, 0.013388f, 0.008800f, -0.013881f, 0.054198f, -0.004965f, 0.016109f, 0.005522f, 0.024968f, 0.013963f, -0.064820f, 0.004307f, -0.038786f, 0.009993f, 0.028590f, -0.005202f, -0.027478f, -0.025054f, 0.060367f, -0.063727f, -0.051665f, + 0.094882f, -0.040314f, 0.024688f, 0.009376f, 0.030547f, -0.014359f, 0.016035f, -0.066030f, 0.004623f, 0.064002f, -0.034210f, -0.025979f, 0.055339f, -0.003852f, -0.045692f, -0.033997f, 0.020470f, -0.018053f, -0.010538f, 0.034161f, -0.025141f, 0.008422f, 0.042799f, -0.048206f, 0.003285f, 0.028030f, -0.015485f, -0.009699f, -0.012438f, 0.017188f, 0.004913f, 0.006845f, -0.006185f, 0.009686f, 0.007538f, -0.009617f, 0.000872f, 0.001533f, 0.025610f, 0.012655f, -0.023731f, 0.029020f, 0.007461f, -0.015070f, 0.008684f, 0.008713f, -0.002483f, -0.008928f, 0.021108f, -0.000202f, 0.007232f, 0.002376f, 0.027259f, -0.012836f, -0.010008f, 0.016168f, -0.024130f, 0.030316f, -0.002105f, -0.017605f, -0.002650f, -0.002178f, 0.003889f, -0.000697f, -0.011552f, -0.002134f, 0.016173f, 0.031511f, -0.062019f, -0.248735f, -0.268252f, -0.010671f, -0.154285f, 0.134782f, 0.489816f, 0.212948f, 0.295020f, 0.372857f, -0.142151f, -0.100824f, -0.040707f, -0.336710f, -0.235779f, -0.077098f, -0.369100f, -0.161409f, -0.033710f, -0.151451f, 0.034928f, 0.344636f, 0.313026f, 0.338814f, 0.439461f, 0.264422f, -0.024801f, 0.098051f, + -0.099647f, -0.392781f, -0.213816f, -0.158463f, -0.326515f, -0.224175f, 0.011523f, -0.251617f, -0.083438f, 0.054396f, -0.251389f, -0.129379f, 0.186477f, 0.071762f, 0.202311f, 0.505300f, 0.410630f, 0.331865f, 0.597849f, 0.433678f, -0.008317f, 0.061576f, -0.112854f, -0.537461f, -0.513765f, -0.529987f, -0.824966f, -0.559126f, -0.345924f, -0.338670f, 0.003094f, 0.266599f, 0.300444f, 0.421419f, 0.638548f, 0.590829f, 0.498683f, 0.492305f, 0.281542f, 0.098318f, 0.014734f, -0.031365f, -0.225127f, -0.386812f, -0.474652f, -0.508191f, -0.685748f, -0.570288f, -0.439995f, -0.215859f, 0.228522f, 0.676443f, 0.630033f, 0.690388f, 0.483908f, 0.058126f, -0.066870f, -0.208586f, -0.286304f, -0.193951f, -0.095656f, -0.096532f, -0.043296f, -0.044832f, -0.070474f, -0.000529f, 0.009031f, 0.049362f, 0.156663f, 0.142097f, 0.104540f, 0.143990f, -0.014715f, -0.094719f, -0.013602f, -0.111041f, -0.096189f, 0.057954f, 0.062879f, 0.013754f, 0.013661f, -0.168683f, -0.429797f, -0.407121f, -0.346789f, -0.261584f, 0.125923f, 0.390225f, 0.477544f, 0.603363f, 0.540887f, 0.333210f, 0.231139f, 0.081408f, -0.097083f, -0.202725f, + -0.241538f, -0.313087f, -0.383885f, -0.432931f, -0.505349f, -0.449509f, -0.155857f, 0.109750f, 0.259357f, 0.336378f, 0.365782f, 0.274318f, 0.190338f, 0.095166f, -0.003767f, -0.011268f, 0.046555f, 0.074332f, 0.081588f, 0.088721f, 0.073833f, 0.006856f, -0.060198f, -0.130512f, -0.233551f, -0.224220f, -0.179966f, -0.146470f, -0.071319f, 0.006661f, 0.050612f, 0.044768f, 0.029253f, 0.017308f, 0.014183f}, + {-0.014472f, 0.007019f, -0.016458f, 0.003226f, 0.001197f, 0.001032f, -0.011229f, -0.003981f, 0.003092f, -0.002462f, 0.003660f, 0.005849f, 0.003532f, -0.000153f, 0.004611f, -0.012695f, 0.000308f, -0.000495f, -0.000311f, 0.006973f, 0.010611f, -0.011130f, -0.002496f, -0.006752f, -0.002200f, 0.003959f, 0.007282f, 0.001177f, 0.001807f, -0.002745f, -0.003625f, -0.002956f, -0.002251f, -0.005069f, 0.002770f, -0.005110f, -0.003448f, 0.005807f, -0.004963f, 0.004168f, 0.000689f, -0.012567f, -0.004259f, -0.006928f, -0.001661f, 0.005333f, -0.003716f, -0.001103f, -0.003655f, -0.003783f, -0.002644f, 0.005213f, 0.007932f, 0.001458f, 0.004410f, 0.003501f, -0.004216f, -0.007994f, 0.004286f, 0.003527f, -0.001749f, -0.006879f, -0.005739f, 0.005174f, 0.001046f, 0.003869f, 0.001842f, -0.010573f, -0.003493f, -0.003938f, 0.005829f, 0.002356f, -0.010633f, 0.002794f, -0.005638f, -0.001748f, -0.000556f, -0.003856f, 0.003029f, -0.003519f, 0.000811f, 0.004053f, 0.004184f, 0.002570f, 0.002884f, 0.001887f, -0.000341f, 0.002015f, 0.002480f, 0.000234f, -0.002067f, 0.002838f, 0.000585f, 0.000023f, -0.000841f, -0.001907f, + 0.000912f, 0.001790f, 0.000320f, 0.001469f, -0.000569f, -0.000972f, -0.000025f, -0.001493f, 0.001565f, -0.000276f, 0.001851f, -0.000358f, 0.000357f, -0.000180f, 0.001720f, 0.000905f, -0.000092f, -0.000725f, 0.001089f, -0.020418f, 0.013541f, -0.009750f, 0.001369f, -0.001286f, -0.003714f, 0.010380f, -0.009100f, -0.006043f, 0.000009f, 0.010972f, -0.004050f, -0.000609f, -0.001161f, 0.009081f, -0.005450f, -0.014497f, -0.003211f, -0.007444f, -0.010133f, 0.000405f, -0.000792f, 0.001706f, 0.005886f, 0.009696f, 0.006046f, 0.000964f, 0.014803f, 0.005786f, 0.000518f, 0.010576f, 0.011079f, -0.000859f, -0.005943f, 0.000451f, 0.004904f, 0.003937f, -0.000068f, -0.002103f, -0.008567f, -0.007540f, -0.003701f, 0.008491f, 0.003521f, 0.014602f, 0.008268f, -0.000623f, 0.004896f, 0.005965f, 0.002004f, -0.009032f, 0.009825f, -0.003864f, 0.005146f, -0.000364f, 0.003123f, -0.010774f, -0.001706f, -0.003408f, 0.003839f, -0.003271f, -0.004059f, 0.011299f, -0.000760f, -0.008437f, 0.003366f, -0.006414f, 0.005283f, -0.003606f, 0.008469f, 0.007311f, 0.008124f, 0.002757f, -0.007787f, 0.004324f, -0.001164f, 0.004263f, + -0.003358f, 0.001237f, 0.011121f, -0.004250f, 0.005413f, 0.007330f, -0.001074f, 0.000474f, -0.000311f, -0.001301f, -0.002928f, 0.001872f, -0.000152f, 0.002804f, -0.000036f, 0.002271f, 0.000167f, 0.000213f, 0.001625f, 0.002731f, 0.001152f, 0.002623f, 0.002916f, -0.000520f, -0.002084f, 0.003786f, 0.000439f, -0.000077f, 0.000320f, 0.002320f, -0.000587f, -0.002034f, 0.001123f, -0.000468f, 0.000626f, 0.000110f, 0.002286f, 0.000765f, 0.001258f, 0.000772f, 0.004081f, 0.004587f, 0.000231f, -0.003978f, 0.004278f, 0.001671f, 0.001292f, 0.002027f, -0.016178f, 0.005239f, -0.010314f, 0.001709f, 0.003326f, 0.003508f, -0.004741f, 0.008585f, 0.001347f, -0.003182f, -0.001498f, 0.010021f, 0.007176f, -0.004366f, -0.005632f, -0.004607f, 0.003856f, 0.007110f, -0.004324f, -0.004703f, 0.001364f, -0.018333f, -0.000074f, -0.007825f, -0.003121f, -0.007784f, -0.010237f, -0.001256f, 0.009253f, 0.002558f, -0.008352f, -0.002208f, 0.007914f, 0.002406f, -0.005142f, 0.008999f, -0.003957f, -0.012548f, -0.003780f, 0.007048f, -0.003156f, 0.008340f, 0.015893f, 0.012892f, 0.001739f, -0.000175f, 0.004459f, -0.001953f, + -0.009452f, 0.000102f, 0.003497f, -0.006734f, 0.005630f, -0.013358f, -0.002048f, 0.000834f, -0.005724f, -0.004360f, 0.005768f, 0.011653f, -0.009180f, -0.009527f, 0.005870f, 0.005965f, 0.010913f, 0.003540f, -0.006460f, 0.008766f, 0.007505f, -0.002513f, 0.008373f, -0.009322f, 0.009388f, 0.002298f, 0.006343f, 0.001301f, -0.005083f, -0.002871f, -0.000973f, 0.002088f, 0.000134f, -0.004581f, 0.001516f, 0.000055f, -0.002751f, -0.002196f, 0.000553f, -0.000673f, 0.001991f, 0.000127f, 0.003365f, -0.002482f, -0.001889f, -0.000120f, 0.000369f, 0.002983f, -0.001582f, -0.002964f, 0.001276f, 0.000117f, -0.000703f, 0.002031f, -0.000536f, 0.001234f, -0.001419f, 0.001244f, 0.001723f, 0.000243f, 0.002840f, 0.027540f, -0.010696f, -0.004709f, -0.001761f, 0.019856f, -0.001974f, 0.015017f, -0.010915f, 0.013234f, -0.013093f, -0.011487f, 0.002766f, 0.006269f, -0.007729f, -0.001897f, 0.003952f, -0.001009f, 0.005153f, -0.007970f, 0.009206f, 0.003331f, -0.009865f, -0.000372f, 0.003964f, 0.003094f, 0.001769f, 0.018680f, 0.014891f, 0.011650f, 0.000004f, 0.007563f, 0.000714f, 0.002184f, 0.005599f, -0.017233f, + -0.002630f, 0.010507f, 0.006841f, 0.008156f, -0.000187f, -0.003051f, 0.003811f, -0.000676f, 0.021072f, -0.003186f, 0.003559f, 0.002118f, 0.001037f, -0.006228f, 0.012640f, -0.001433f, 0.013142f, -0.007233f, -0.007581f, 0.005446f, -0.005048f, -0.017530f, -0.008070f, 0.003535f, -0.001658f, -0.012538f, 0.003508f, 0.000041f, 0.016328f, 0.001434f, 0.001424f, -0.004985f, 0.005950f, 0.006030f, -0.001330f, -0.000948f, 0.014344f, 0.010542f, 0.010475f, -0.006908f, -0.009831f, -0.008585f, -0.016800f, 0.001403f, -0.011892f, -0.004014f, 0.000759f, -0.006484f, -0.007396f, -0.004122f, -0.000828f, -0.002523f, 0.003965f, 0.007382f, -0.001372f, -0.000850f, -0.003305f, 0.001713f, -0.002391f, -0.002768f, 0.001190f, 0.002026f, 0.000041f, 0.002609f, -0.001511f, 0.000097f, -0.001459f, -0.000984f, -0.000792f, 0.001520f, -0.000899f, -0.000908f, -0.000532f, -0.002386f, -0.002708f, 0.000170f, -0.000290f, -0.003284f, 0.002805f, 0.002803f, 0.003417f, -0.000062f, -0.002368f, -0.001390f, 0.002688f, 0.020200f, -0.016087f, -0.000452f, -0.016824f, -0.011071f, -0.006582f, 0.014507f, 0.008494f, -0.020319f, -0.027758f, -0.010717f, + 0.009732f, 0.006905f, -0.004200f, 0.009444f, 0.000046f, -0.002410f, 0.001033f, -0.014621f, 0.004341f, -0.001970f, 0.001170f, 0.004554f, 0.000940f, -0.000103f, 0.006075f, 0.005322f, -0.009727f, -0.009704f, 0.010975f, -0.003542f, -0.005466f, 0.006699f, -0.019000f, 0.004468f, 0.003914f, -0.017517f, 0.006313f, 0.018028f, 0.010908f, 0.012359f, 0.002503f, 0.006798f, 0.017124f, 0.003173f, 0.003231f, -0.019739f, 0.010359f, 0.014796f, 0.012107f, 0.002286f, 0.012300f, -0.014078f, 0.013781f, -0.004195f, -0.013838f, -0.021317f, -0.000245f, -0.013577f, -0.010948f, -0.004727f, -0.013000f, -0.032379f, 0.001370f, 0.001638f, -0.001116f, 0.004986f, 0.015875f, 0.005936f, 0.006385f, 0.004196f, -0.011583f, 0.001645f, 0.005373f, 0.004591f, 0.004072f, 0.004658f, -0.011886f, -0.003564f, -0.014974f, -0.006789f, -0.001103f, 0.003443f, -0.005492f, 0.005266f, 0.001037f, 0.000897f, -0.003769f, -0.000642f, -0.002013f, -0.000005f, -0.002173f, 0.001967f, 0.000624f, 0.001483f, -0.000573f, -0.002764f, -0.002304f, -0.002279f, 0.002273f, 0.001447f, -0.000027f, -0.001081f, -0.002089f, -0.002267f, -0.002203f, -0.006760f, + 0.000993f, 0.000919f, -0.005128f, -0.002689f, -0.001876f, -0.043727f, 0.021493f, 0.002747f, -0.017009f, 0.004101f, -0.001900f, -0.005037f, -0.003501f, -0.009645f, 0.005130f, -0.004958f, 0.000977f, 0.006272f, 0.005768f, 0.018909f, -0.007695f, -0.018117f, 0.009802f, -0.022966f, -0.009936f, 0.003720f, 0.003109f, 0.002593f, 0.007383f, 0.009184f, 0.007881f, -0.000189f, 0.010445f, 0.000662f, -0.004225f, 0.013923f, 0.008584f, -0.004268f, 0.008235f, -0.014442f, 0.027192f, 0.001011f, 0.005008f, -0.002574f, -0.023460f, -0.004069f, -0.008773f, -0.008213f, 0.003565f, 0.019484f, 0.000484f, 0.000803f, -0.002584f, -0.005394f, -0.012698f, 0.003983f, -0.002155f, 0.006970f, -0.015986f, 0.005358f, 0.008404f, 0.003721f, -0.011865f, -0.004196f, 0.003031f, 0.001514f, 0.009475f, 0.001869f, 0.033055f, -0.009465f, -0.014200f, -0.016058f, -0.004935f, 0.000332f, 0.011750f, -0.015994f, -0.002153f, -0.006859f, 0.007227f, -0.023348f, -0.001096f, -0.006329f, -0.009855f, 0.002905f, -0.002917f, 0.006362f, -0.000911f, 0.011694f, 0.007326f, -0.000037f, 0.002407f, 0.000902f, 0.001394f, 0.013563f, 0.001553f, 0.009699f, + 0.003440f, -0.002453f, 0.000172f, 0.000347f, 0.002726f, -0.001786f, 0.001364f, -0.000521f, 0.004031f, 0.000760f, -0.003147f, -0.004463f, 0.003534f, -0.001719f, -0.005394f, -0.002343f, -0.002872f, -0.001235f, -0.001701f, -0.000099f, 0.006503f, 0.000112f, 0.001777f, 0.000795f, 0.002585f, -0.002602f, -0.001523f, -0.005653f, 0.019687f, -0.006404f, -0.004766f, 0.004193f, 0.005768f, -0.015982f, -0.016127f, -0.014755f, -0.013874f, -0.022655f, 0.014179f, -0.013284f, 0.003932f, 0.005425f, 0.020471f, -0.003461f, -0.004949f, 0.016020f, 0.003658f, 0.003303f, -0.018958f, -0.012443f, 0.009214f, 0.003964f, 0.007310f, 0.011037f, -0.019971f, 0.000150f, 0.008417f, 0.018916f, -0.000274f, 0.001722f, -0.002942f, -0.000061f, -0.013064f, -0.002533f, -0.004121f, -0.024221f, -0.002025f, 0.007304f, -0.013946f, 0.005857f, -0.015165f, -0.000164f, -0.010522f, -0.002223f, -0.003348f, 0.001283f, 0.019377f, -0.005759f, 0.000161f, 0.009898f, -0.005680f, 0.005762f, -0.016262f, -0.028887f, -0.015752f, -0.008819f, -0.004187f, 0.002977f, 0.019105f, -0.009129f, 0.005040f, 0.004585f, -0.013941f, 0.004576f, -0.010766f, -0.003844f, + 0.006914f, 0.019396f, -0.003119f, -0.001147f, 0.006100f, -0.000546f, -0.018440f, -0.017439f, -0.007407f, 0.017193f, -0.002222f, -0.026054f, 0.001693f, -0.017157f, -0.007707f, -0.003652f, -0.001952f, 0.005648f, -0.006714f, -0.002102f, 0.006305f, -0.001944f, 0.007428f, 0.006447f, 0.004590f, -0.003198f, 0.007267f, -0.006744f, -0.005143f, -0.004815f, 0.000955f, -0.000895f, -0.001596f, -0.001693f, -0.001452f, -0.002421f, 0.001302f, -0.000733f, 0.004609f, -0.003446f, -0.002288f, 0.001879f, -0.003065f, -0.001835f, -0.007686f, -0.009210f, -0.000997f, 0.000577f, 0.004264f, 0.000456f, 0.002492f, 0.000065f, 0.019226f, 0.020181f, -0.006169f, 0.001880f, 0.021170f, -0.021523f, -0.019147f, 0.016198f, -0.003870f, 0.002216f, 0.014713f, -0.002904f, -0.004012f, 0.014689f, -0.027198f, 0.011592f, -0.001215f, 0.004605f, 0.013257f, 0.013657f, -0.015222f, 0.002885f, -0.020919f, 0.006436f, -0.006285f, -0.002247f, -0.014551f, -0.000753f, -0.020864f, 0.002016f, -0.018081f, 0.012668f, -0.006331f, 0.002390f, 0.022609f, 0.010468f, 0.010135f, -0.018043f, 0.003345f, 0.020933f, -0.004930f, -0.029774f, 0.016001f, -0.003646f, + 0.002942f, -0.005869f, -0.013773f, 0.019650f, 0.007100f, 0.016009f, 0.004036f, 0.002308f, -0.013183f, -0.017168f, 0.006217f, 0.008017f, 0.008646f, 0.011400f, 0.026381f, -0.000888f, -0.020386f, -0.013309f, 0.015899f, -0.002298f, -0.017515f, -0.004630f, -0.001037f, -0.004799f, -0.022174f, 0.000341f, 0.003083f, 0.005540f, -0.008005f, 0.012798f, -0.000609f, 0.001407f, 0.018266f, 0.009310f, 0.019018f, -0.018670f, -0.007756f, 0.003439f, -0.010209f, 0.008495f, 0.005270f, 0.005202f, -0.000732f, -0.002377f, -0.001516f, -0.000291f, -0.007303f, 0.009397f, -0.003394f, 0.005762f, -0.001472f, 0.006712f, -0.002629f, -0.003334f, 0.000467f, 0.003856f, -0.003261f, -0.000129f, -0.000772f, -0.003708f, -0.001810f, 0.001700f, -0.004019f, -0.001274f, -0.008594f, -0.006757f, 0.003719f, 0.005972f, 0.003172f, 0.002721f, -0.000837f, -0.000709f, -0.003981f, -0.000651f, 0.004529f, -0.005778f, -0.000748f, 0.002667f, -0.001089f, 0.004674f, 0.004611f, -0.003235f, -0.001225f, 0.004179f, 0.002984f, -0.002175f, 0.015310f, -0.018635f, 0.021827f, -0.004913f, 0.023088f, -0.018855f, 0.017089f, 0.001882f, -0.001806f, 0.028759f, + -0.015024f, 0.001723f, -0.014583f, -0.004342f, 0.043829f, 0.021156f, 0.009306f, 0.006347f, 0.012465f, -0.006998f, -0.000059f, -0.037048f, 0.006882f, -0.001541f, -0.016026f, 0.017776f, 0.013328f, -0.000547f, 0.003163f, -0.021404f, 0.018867f, -0.009991f, 0.020036f, 0.013140f, 0.010697f, -0.015353f, -0.002706f, -0.012907f, 0.019238f, 0.004442f, -0.007011f, 0.034116f, 0.016297f, -0.003835f, 0.001786f, -0.028242f, 0.004792f, 0.001324f, 0.022436f, -0.010068f, -0.028745f, -0.004931f, -0.007959f, -0.005572f, -0.040625f, -0.020226f, -0.043270f, -0.022023f, -0.015470f, 0.005109f, -0.010886f, 0.020443f, 0.002538f, -0.023339f, 0.014084f, -0.015609f, 0.022081f, -0.019674f, -0.015979f, 0.011530f, 0.019668f, 0.019403f, 0.000056f, -0.018157f, -0.014515f, 0.008910f, -0.011906f, 0.000467f, -0.006017f, 0.007342f, -0.008174f, -0.011986f, 0.021163f, 0.009837f, 0.002887f, -0.003351f, 0.007973f, 0.004531f, 0.009815f, -0.000904f, 0.006646f, 0.002374f, 0.011023f, 0.000234f, -0.000523f, 0.000639f, -0.005437f, 0.000209f, 0.002816f, 0.001369f, 0.001206f, 0.000310f, 0.008489f, 0.003909f, -0.006708f, 0.000758f, + 0.003860f, -0.002105f, -0.002563f, -0.001608f, 0.000510f, 0.001635f, 0.004274f, -0.001060f, 0.002914f, 0.004979f, -0.001034f, -0.005029f, -0.000444f, -0.005485f, -0.002414f, -0.005065f, -0.003269f, 0.004411f, 0.000302f, -0.002831f, -0.026845f, -0.031873f, -0.021127f, -0.003040f, -0.000410f, -0.004135f, 0.007576f, 0.011531f, 0.008006f, -0.000005f, 0.004293f, -0.010116f, 0.006638f, -0.020534f, -0.028626f, 0.000899f, 0.021945f, 0.003843f, -0.007731f, 0.017562f, 0.010391f, 0.016998f, 0.028610f, 0.003715f, -0.008840f, -0.018235f, -0.014606f, 0.008361f, -0.016741f, -0.011606f, 0.004301f, -0.013246f, -0.029202f, -0.016006f, -0.001622f, -0.003390f, 0.006818f, -0.006568f, 0.016162f, 0.004696f, 0.006125f, 0.022381f, -0.003597f, 0.002654f, 0.005178f, -0.017865f, 0.021061f, 0.003469f, -0.019500f, -0.031888f, 0.008103f, 0.002866f, -0.023183f, 0.024524f, 0.015912f, -0.021481f, 0.007261f, 0.020614f, 0.011588f, 0.005526f, 0.017110f, -0.007836f, -0.006918f, 0.001294f, -0.009494f, -0.015181f, 0.025968f, -0.023166f, -0.002595f, 0.009688f, 0.002213f, 0.040374f, -0.035064f, 0.010689f, -0.004493f, -0.000171f, + 0.011279f, 0.000449f, 0.002407f, -0.009434f, 0.005332f, -0.020802f, -0.044106f, -0.002494f, -0.000549f, -0.022678f, -0.014424f, -0.003172f, 0.008323f, 0.007255f, 0.003095f, 0.001848f, -0.007359f, -0.000244f, -0.010304f, -0.005207f, -0.002011f, -0.005995f, -0.009292f, 0.003156f, -0.001782f, 0.001557f, -0.004766f, -0.003504f, 0.002172f, -0.007594f, -0.016105f, -0.005657f, 0.001064f, -0.004402f, -0.015532f, -0.008699f, 0.006411f, 0.004367f, 0.003028f, -0.003122f, -0.005984f, -0.007484f, -0.001403f, -0.003787f, -0.008829f, -0.007350f, -0.010406f, -0.005479f, -0.007030f, -0.007079f, -0.000233f, -0.001779f, 0.002787f, -0.002812f, -0.001979f, 0.005680f, -0.007778f, -0.020810f, 0.018322f, -0.037619f, -0.026715f, 0.019802f, -0.000927f, -0.034267f, 0.017565f, -0.020058f, 0.038776f, 0.007736f, -0.051036f, -0.006517f, 0.004641f, -0.012919f, 0.003842f, 0.008867f, 0.018118f, 0.015480f, -0.029641f, -0.001333f, 0.002779f, -0.006183f, -0.027161f, -0.004238f, -0.005629f, -0.009371f, -0.008277f, -0.000433f, 0.002023f, 0.023083f, 0.025348f, -0.007896f, 0.013660f, 0.011742f, 0.011536f, 0.025204f, 0.000338f, 0.006746f, + -0.029065f, -0.010041f, 0.010271f, -0.005796f, 0.014066f, 0.034613f, 0.005133f, -0.030380f, -0.067577f, -0.000199f, -0.020812f, 0.019152f, -0.012746f, -0.006932f, -0.013248f, -0.036568f, 0.015936f, 0.048776f, 0.002903f, 0.012749f, -0.038254f, 0.007882f, -0.004292f, -0.017298f, 0.004452f, 0.018677f, 0.009796f, 0.015061f, -0.016429f, 0.024180f, 0.014278f, -0.028287f, -0.041872f, -0.002722f, -0.031819f, -0.029891f, -0.018937f, -0.022052f, 0.002957f, 0.039279f, 0.015198f, 0.001398f, -0.005156f, 0.025273f, -0.012786f, -0.018904f, -0.002907f, 0.003894f, -0.002847f, 0.004615f, 0.004052f, 0.000182f, 0.004107f, 0.009642f, 0.003703f, -0.001098f, 0.000870f, -0.003803f, -0.003575f, 0.010116f, -0.002915f, 0.009951f, 0.000414f, -0.005718f, 0.001407f, -0.003036f, -0.004038f, 0.012037f, -0.002723f, 0.006486f, -0.014658f, -0.001959f, 0.007439f, -0.000132f, 0.003179f, 0.012293f, -0.009053f, 0.011227f, -0.000901f, 0.001191f, 0.003709f, -0.003866f, 0.008894f, 0.001185f, 0.000778f, 0.001446f, 0.000697f, 0.003866f, 0.011408f, -0.004725f, 0.004198f, 0.004285f, 0.004627f, 0.004830f, -0.073694f, -0.046519f, + 0.033477f, 0.026964f, 0.043843f, -0.000116f, 0.017301f, 0.004317f, 0.013871f, -0.000517f, 0.008962f, -0.019367f, -0.023221f, -0.014404f, -0.020784f, -0.013402f, -0.014793f, 0.017861f, 0.042152f, 0.009237f, -0.051329f, -0.012165f, 0.009054f, -0.013604f, 0.012601f, -0.029330f, -0.002327f, -0.000952f, 0.001760f, 0.014358f, 0.010907f, 0.002051f, -0.003485f, -0.006523f, 0.012011f, 0.023280f, -0.018575f, -0.028862f, 0.019280f, 0.009191f, 0.025273f, 0.011550f, 0.036716f, -0.025329f, -0.008847f, 0.023441f, 0.035011f, 0.030404f, 0.018037f, 0.008578f, -0.007442f, 0.002327f, -0.004349f, 0.000157f, 0.012171f, -0.045651f, 0.024608f, -0.003580f, 0.006709f, -0.003001f, 0.034740f, -0.010567f, -0.000459f, -0.007591f, 0.022052f, 0.018689f, -0.038911f, 0.027968f, -0.033091f, -0.001666f, -0.016753f, -0.016664f, 0.015194f, 0.002774f, -0.051614f, -0.004573f, -0.004019f, -0.009530f, -0.005958f, -0.001211f, -0.006538f, 0.026847f, 0.002700f, 0.025680f, -0.008061f, 0.030365f, 0.014387f, -0.015685f, 0.006743f, -0.003920f, 0.001806f, 0.001968f, 0.002926f, 0.004090f, 0.001629f, -0.005892f, -0.009661f, 0.015098f, + 0.006762f, 0.012390f, 0.003525f, -0.007383f, 0.014333f, 0.000548f, 0.000816f, 0.010747f, -0.030066f, -0.013981f, -0.013323f, 0.004221f, -0.000337f, -0.020483f, 0.000958f, 0.003425f, -0.000874f, -0.003860f, 0.000020f, 0.007021f, -0.007412f, -0.000318f, 0.008232f, 0.004050f, 0.010018f, -0.008705f, -0.004180f, 0.002456f, 0.010864f, 0.040932f, -0.045537f, -0.001047f, -0.025883f, -0.073014f, -0.008632f, -0.026948f, -0.057630f, 0.011518f, -0.000371f, -0.011199f, 0.003625f, 0.030973f, -0.002002f, -0.032737f, 0.011238f, 0.001324f, -0.010518f, -0.007874f, -0.005834f, 0.001658f, 0.035697f, -0.008008f, -0.001309f, 0.016210f, 0.011983f, -0.005135f, 0.017289f, 0.015820f, -0.007616f, -0.007491f, -0.014332f, 0.019867f, -0.004739f, -0.034194f, 0.005232f, -0.002258f, 0.011762f, 0.044824f, -0.029903f, -0.047975f, -0.030251f, -0.014004f, 0.006648f, 0.016020f, 0.008521f, 0.034127f, 0.017063f, -0.024028f, -0.013867f, -0.032778f, 0.028410f, 0.017488f, 0.003177f, 0.006049f, -0.018797f, 0.002004f, -0.019888f, 0.034412f, 0.033764f, 0.002433f, -0.015699f, -0.008716f, 0.003355f, 0.031334f, 0.062503f, 0.038482f, + -0.005889f, -0.013925f, 0.000891f, 0.019923f, 0.008664f, 0.018394f, 0.025346f, -0.025038f, -0.001137f, -0.048324f, -0.032563f, -0.031034f, -0.020787f, 0.013056f, 0.029734f, 0.020453f, 0.003273f, -0.005863f, -0.002739f, -0.026869f, -0.033806f, -0.008487f, -0.017937f, -0.016901f, 0.003939f, -0.003370f, -0.004274f, 0.000253f, 0.001144f, 0.007807f, -0.008564f, 0.017379f, -0.017523f, 0.007512f, -0.022317f, -0.007415f, 0.000024f, 0.004237f, -0.000603f, 0.004032f, 0.008639f, -0.005973f, 0.001078f, 0.020661f, 0.025171f, 0.030324f, 0.016659f, 0.019042f, 0.008645f, 0.003724f, 0.001492f, 0.000665f, 0.001226f, -0.005151f, -0.016232f, -0.015847f, -0.002564f, 0.012578f, 0.000082f, 0.002075f, -0.006579f, -0.004579f, 0.002019f, 0.015383f, 0.009697f, 0.018335f, 0.012959f, 0.015628f, -0.035671f, -0.004209f, -0.018481f, 0.026816f, -0.029640f, 0.005724f, 0.002584f, 0.052466f, -0.032479f, -0.009531f, -0.033405f, -0.007241f, -0.032996f, -0.027736f, -0.020019f, 0.010323f, -0.035491f, -0.025757f, -0.038592f, -0.009872f, -0.005823f, -0.011826f, -0.017450f, -0.043013f, 0.011220f, -0.030410f, 0.012264f, -0.031905f, + 0.039281f, 0.006032f, 0.017596f, -0.007607f, -0.037089f, 0.019839f, 0.011482f, -0.012499f, 0.019834f, 0.027752f, -0.015027f, -0.039964f, -0.021407f, 0.053519f, -0.022891f, -0.001765f, 0.001368f, -0.009102f, 0.011760f, 0.034681f, 0.006148f, 0.014741f, -0.011182f, 0.024807f, 0.000342f, 0.019538f, 0.005955f, 0.006622f, -0.000609f, 0.001989f, 0.042451f, 0.012852f, 0.101634f, -0.062052f, 0.039607f, 0.055683f, -0.014714f, 0.001256f, 0.028732f, -0.020833f, -0.006096f, 0.046622f, 0.018480f, -0.007788f, 0.024759f, -0.010607f, -0.045153f, -0.033420f, 0.011344f, 0.001805f, -0.060329f, -0.016803f, -0.006158f, -0.031348f, 0.016116f, 0.009384f, -0.020359f, -0.016693f, -0.012289f, 0.001758f, 0.005568f, 0.012766f, -0.010575f, 0.001497f, 0.007475f, -0.003345f, -0.013396f, 0.003696f, 0.002834f, 0.004224f, 0.012568f, 0.002232f, -0.007621f, 0.001016f, 0.014561f, 0.012887f, 0.006292f, -0.014425f, -0.000289f, 0.026545f, -0.007548f, -0.005600f, 0.014759f, -0.014417f, -0.024929f, -0.007112f, 0.001399f, -0.003244f, -0.012777f, -0.003935f, -0.000736f, -0.014128f, -0.002892f, 0.001518f, -0.003880f, -0.014660f, + -0.024139f, 0.009203f, 0.026052f, 0.009420f, -0.000486f, 0.000953f, -0.004810f, -0.015374f, -0.012229f, 0.057072f, 0.063712f, 0.001445f, 0.046140f, 0.045971f, -0.001972f, 0.021016f, -0.045149f, -0.013576f, 0.040993f, 0.004444f, 0.040478f, 0.056485f, 0.046568f, -0.008647f, 0.030569f, -0.046213f, -0.072491f, -0.030632f, -0.026793f, 0.018218f, 0.000648f, 0.019453f, 0.020884f, 0.044636f, 0.034580f, 0.012515f, -0.034308f, -0.003590f, 0.035322f, 0.011855f, -0.016588f, 0.023057f, 0.048503f, -0.004747f, 0.017200f, -0.038513f, 0.019240f, -0.030261f, -0.007907f, -0.018968f, -0.040153f, 0.025578f, 0.003281f, 0.012818f, 0.049100f, -0.025637f, -0.029115f, 0.018224f, 0.050850f, -0.038935f, -0.026053f, 0.017053f, -0.012348f, 0.071859f, 0.053134f, -0.049422f, -0.018489f, -0.038929f, 0.002542f, 0.044104f, -0.019745f, -0.029498f, -0.013354f, 0.003335f, 0.010853f, -0.035438f, 0.009030f, 0.073239f, 0.005631f, -0.047853f, -0.073725f, 0.060454f, -0.071113f, -0.059332f, -0.034754f, -0.030020f, -0.051372f, 0.014465f, 0.013445f, 0.083766f, 0.021085f, 0.037175f, -0.018079f, 0.040369f, -0.004593f, -0.016392f, + 0.015263f, 0.002424f, -0.003594f, 0.041386f, 0.005423f, 0.021463f, 0.026180f, 0.014638f, 0.031336f, -0.008270f, 0.008606f, -0.006166f, -0.002347f, -0.006128f, -0.026024f, -0.018786f, -0.021471f, 0.025507f, 0.009028f, 0.022781f, 0.027613f, -0.005487f, 0.016589f, 0.036234f, 0.012945f, -0.010943f, 0.018486f, 0.021981f, 0.007435f, -0.004439f, -0.025795f, -0.022634f, 0.023179f, 0.010370f, 0.015428f, 0.031053f, 0.067668f, 0.029684f, 0.017085f, 0.013016f, 0.019151f, -0.009508f, -0.002257f, 0.034688f, -0.021943f, 0.012461f, -0.012192f, 0.011779f, 0.006858f, -0.066170f, -0.038364f, -0.049799f, 0.013034f, 0.027418f, 0.009592f, 0.042157f, 0.037876f, 0.053506f, 0.016541f, 0.058438f, 0.026046f, 0.037659f, -0.018715f, -0.007487f, -0.018801f, -0.045323f, -0.032534f, -0.070022f, -0.041567f, -0.013604f, -0.040833f, 0.008812f, -0.001687f, -0.001240f, 0.016596f, 0.013549f, 0.006255f, 0.033642f, -0.008580f, -0.028217f, 0.040403f, 0.003561f, -0.053624f, -0.023274f, -0.005853f, -0.064536f, -0.048903f, -0.047656f, 0.004341f, 0.022774f, 0.006176f, -0.024887f, -0.003164f, 0.026733f, 0.016529f, 0.063887f, + 0.011908f, -0.086319f, -0.028749f, -0.015066f, 0.013723f, 0.013283f, -0.009934f, -0.023019f, 0.031896f, -0.047883f, -0.008875f, -0.038423f, 0.028978f, -0.075352f, -0.046596f, -0.061480f, -0.049274f, 0.002198f, -0.027787f, -0.021607f, -0.049433f, 0.024717f, 0.088810f, -0.002445f, 0.057409f, -0.032004f, 0.014081f, -0.042315f, -0.000172f, 0.063113f, 0.015080f, -0.030049f, 0.003354f, 0.024205f, -0.042724f, -0.066323f, -0.035627f, 0.016778f, -0.051476f, 0.021974f, -0.000759f, -0.001574f, 0.033038f, 0.017103f, -0.008818f, 0.038196f, 0.038182f, 0.030503f, -0.010072f, -0.010689f, -0.006689f, -0.000597f, 0.026614f, 0.018991f, 0.013442f, 0.000542f, 0.027756f, 0.015249f, 0.004282f, 0.003512f, 0.020565f, -0.008698f, -0.007026f, 0.014183f, -0.021367f, 0.019190f, -0.018558f, -0.018402f, -0.021841f, 0.038160f, 0.023844f, 0.035466f, 0.013034f, 0.013302f, 0.003162f, 0.002389f, 0.017395f, -0.026799f, -0.042973f, 0.003278f, 0.012018f, 0.010651f, -0.017585f, 0.049191f, 0.020090f, 0.049624f, -0.081142f, 0.035119f, 0.060859f, -0.005982f, 0.070105f, -0.037249f, -0.107122f, -0.055461f, -0.000816f, -0.010742f, + 0.011745f, -0.038412f, 0.036927f, 0.052243f, -0.047170f, 0.041483f, -0.025877f, -0.031639f, -0.074831f, -0.030587f, -0.043037f, -0.028431f, -0.034440f, 0.033652f, 0.004951f, -0.067051f, -0.085850f, 0.064724f, 0.014578f, 0.023158f, -0.020136f, 0.005124f, -0.023293f, 0.000545f, 0.019627f, 0.029826f, 0.027020f, 0.072475f, 0.002251f, -0.052140f, 0.070294f, -0.007527f, -0.018358f, -0.032754f, 0.029625f, -0.057971f, -0.038952f, 0.032766f, -0.030182f, -0.045175f, -0.056661f, -0.049668f, -0.010661f, 0.006542f, 0.005295f, -0.015397f, 0.060955f, 0.051855f, -0.005075f, -0.029703f, -0.051085f, -0.058655f, 0.014396f, 0.012260f, -0.011579f, -0.005814f, 0.083706f, 0.005556f, -0.024490f, 0.036093f, 0.017335f, -0.055300f, 0.043880f, 0.079615f, -0.087446f, 0.141104f, 0.037688f, 0.040666f, 0.015441f, 0.040953f, -0.011246f, -0.087292f, 0.059688f, 0.004975f, -0.010861f, 0.061936f, -0.073642f, 0.012772f, 0.012917f, -0.000540f, -0.007135f, 0.002970f, -0.005766f, -0.020481f, 0.010847f, 0.021634f, -0.018148f, -0.002470f, -0.026836f, -0.030914f, 0.039889f, -0.008995f, -0.019599f, 0.008988f, -0.010695f, -0.024651f, + -0.044398f, -0.010383f, -0.015106f, 0.038656f, -0.037256f, -0.003964f, 0.045727f, -0.009901f, 0.036537f, -0.013284f, -0.031995f, 0.016398f, -0.006471f, -0.015441f, 0.018904f, 0.004215f, 0.050366f, -0.007012f, -0.000811f, 0.033184f, 0.101236f, 0.044476f, 0.002376f, -0.033871f, 0.048369f, -0.000786f, 0.003516f, -0.023195f, 0.044144f, -0.051172f, 0.037395f, 0.035938f, 0.037874f, 0.018333f, -0.013836f, 0.050198f, 0.062964f, -0.012811f, 0.026040f, -0.038982f, 0.063354f, 0.027049f, 0.021242f, -0.040339f, -0.088188f, 0.017622f, -0.026974f, -0.020123f, -0.035732f, -0.045084f, 0.027353f, 0.012285f, -0.021838f, 0.005098f, 0.002223f, -0.023791f, -0.107763f, -0.006675f, -0.022797f, -0.011007f, -0.001550f, 0.076081f, 0.052013f, -0.025289f, 0.019703f, -0.050025f, 0.005704f, 0.037548f, -0.057124f, -0.053035f, -0.043543f, 0.068881f, -0.049361f, 0.014379f, 0.055353f, -0.074426f, -0.069112f, 0.063804f, 0.050783f, 0.053571f, 0.071557f, 0.026504f, -0.091394f, 0.020698f, 0.027107f, -0.008019f, 0.149417f, -0.015381f, -0.022693f, -0.067435f, -0.058307f, 0.030177f, -0.053744f, 0.035133f, 0.012251f, 0.039730f, + 0.081854f, -0.052425f, -0.035780f, 0.099698f, -0.060662f, -0.066935f, 0.043807f, -0.086229f, 0.062780f, -0.065549f, 0.014963f, 0.022644f, -0.047519f, 0.019790f, -0.055171f, 0.038475f, 0.070372f, -0.002800f, 0.012202f, 0.014537f, 0.002595f, -0.021427f, -0.020297f, -0.004530f, 0.020373f, -0.009004f, 0.013731f, -0.014203f, -0.043686f, 0.018795f, 0.003813f, 0.029764f, 0.014656f, 0.026004f, -0.008896f, -0.008555f, -0.043345f, 0.030473f, -0.005915f, -0.039420f, 0.009162f, 0.081466f, 0.022426f, -0.020682f, 0.023839f, 0.043923f, -0.021806f, 0.004899f, 0.033504f, -0.016762f, 0.033400f, 0.011498f, -0.010621f, -0.052224f, 0.008771f, -0.019885f, -0.001396f, 0.065381f, -0.029963f, 0.003580f, -0.017374f, 0.022611f, 0.075136f, 0.006461f, -0.063727f, 0.091459f, 0.022366f, -0.005884f, 0.065259f, 0.032442f, 0.052837f, 0.019863f, -0.078024f, -0.017014f, -0.029031f, 0.037020f, 0.091399f, -0.057596f, 0.014968f, -0.027545f, 0.040848f, 0.046850f, -0.061263f, 0.051544f, -0.049152f, -0.044257f, 0.022878f, 0.042465f, 0.002075f, 0.014233f, 0.033202f, -0.049601f, 0.044257f, 0.003665f, 0.053952f, -0.009302f, + -0.013880f, 0.017721f, 0.079757f, -0.035448f, 0.064496f, -0.030837f, 0.013241f, 0.017025f, 0.064453f, -0.003532f, -0.003869f, 0.022319f, 0.096997f, 0.006619f, -0.075291f, -0.005892f, -0.090705f, 0.054907f, 0.000497f, 0.149447f, 0.032241f, -0.043359f, -0.012940f, 0.033244f, -0.032717f, 0.052660f, 0.097654f, 0.066927f, 0.001754f, 0.028597f, 0.042462f, -0.004535f, -0.045027f, -0.005959f, -0.010027f, -0.155478f, 0.097378f, 0.072719f, 0.067103f, 0.016403f, -0.067203f, -0.019930f, 0.051119f, 0.026612f, 0.044549f, 0.024137f, -0.148912f, -0.053071f, 0.091820f, 0.025427f, 0.029792f, 0.079115f, -0.055666f, -0.001598f, -0.007666f, 0.044901f, 0.011477f, -0.004207f, -0.012003f, 0.035425f, -0.009086f, -0.040504f, 0.020324f, -0.019444f, -0.023204f, 0.021306f, 0.031099f, -0.022720f, -0.007066f, -0.000657f, 0.024541f, -0.031132f, 0.025488f, -0.027485f, 0.013119f, -0.047639f, -0.048855f, 0.048688f, 0.006360f, 0.004452f, -0.005567f, -0.035155f, -0.010835f, 0.032663f, 0.003522f, 0.011213f, 0.054116f, -0.008204f, -0.041058f, -0.003780f, -0.023338f, 0.018637f, 0.020245f, -0.019372f, -0.016600f, 0.021526f, + 0.044788f, 0.056866f, 0.058635f, -0.036319f, 0.059662f, -0.054675f, 0.009160f, 0.028527f, -0.028133f, 0.003971f, 0.011169f, -0.014980f, -0.029378f, -0.055297f, 0.084112f, -0.018906f, -0.016648f, -0.028120f, -0.004784f, -0.011632f, 0.027290f, -0.056640f, -0.016400f, -0.035456f, 0.012081f, -0.035639f, 0.034105f, -0.000258f, 0.017535f, -0.039293f, -0.071635f, 0.003358f, -0.052385f, -0.054656f, 0.024667f, -0.041928f, -0.035554f, 0.069142f, -0.025677f, -0.040447f, 0.005096f, -0.041587f, 0.019427f, 0.026108f, -0.007694f, -0.033965f, -0.009994f, 0.019794f, 0.017341f, -0.015444f, -0.001545f, 0.060978f, -0.010949f, -0.037634f, -0.047883f, -0.006875f, -0.021037f, -0.071958f, 0.067440f, 0.023355f, -0.082710f, 0.050885f, -0.003758f, -0.034639f, 0.158828f, 0.089501f, 0.073089f, 0.038848f, 0.022251f, -0.037713f, 0.005801f, 0.017492f, 0.018648f, 0.007128f, 0.069502f, 0.015604f, -0.020720f, -0.034256f, -0.140651f, 0.028698f, 0.018396f, -0.000678f, -0.027510f, -0.052938f, -0.010541f, -0.034098f, -0.030616f, -0.002184f, 0.044315f, -0.030413f, 0.076717f, 0.011279f, -0.015393f, -0.005358f, -0.006609f, 0.006139f, + 0.032234f, -0.012515f, 0.008027f, 0.022705f, 0.007749f, 0.004394f, 0.017598f, -0.028612f, 0.013859f, 0.005202f, 0.044852f, -0.015572f, -0.011299f, -0.012318f, -0.011426f, -0.035618f, -0.019508f, 0.013067f, -0.039034f, 0.029108f, -0.007970f, -0.018529f, 0.026668f, 0.017080f, 0.022413f, -0.008327f, -0.003634f, 0.003071f, 0.004185f, -0.024531f, 0.012808f, 0.001860f, -0.001277f, -0.002113f, 0.015945f, -0.072755f, 0.122913f, 0.015708f, 0.040310f, 0.022007f, -0.030431f, 0.022903f, 0.034646f, 0.008685f, -0.003487f, -0.029635f, -0.005170f, 0.008450f, -0.013850f, -0.010476f, 0.005188f, 0.013872f, 0.035783f, -0.024679f, 0.015071f, 0.001540f, 0.028564f, -0.009988f, 0.005687f, 0.009491f, -0.032740f, 0.026745f, 0.004348f, 0.006698f, 0.009599f, 0.009949f, -0.020737f, 0.022249f, -0.017872f, 0.004646f, 0.021237f, -0.011437f, 0.020821f, -0.008864f, 0.026236f, 0.020446f, 0.011851f, -0.032380f, 0.024334f, 0.018581f, 0.014821f, 0.040627f, -0.038911f, -0.003283f, -0.000323f, -0.008156f, 0.011948f, -0.019993f, -0.032233f, 0.022267f, 0.025064f, 0.012688f, -0.003055f, 0.005454f, -0.003440f, 0.013162f, + -0.011288f, 0.005430f, -0.023933f, 0.021961f, -0.037176f, 0.035274f, 0.019622f, -0.011642f, -0.000498f, 0.014739f, 0.001061f, 0.013230f, 0.000283f, 0.001642f, -0.001231f, -0.012458f, 0.018046f, 0.024602f, -0.021540f, -0.004787f, 0.004525f, 0.013730f, -0.009779f, -0.010100f, 0.002863f, 0.004638f, -0.002441f, 0.002628f, -0.007914f, 0.003174f, 0.010068f, -0.007651f, 0.002154f, 0.006106f, -0.008112f, 0.007140f, 0.008819f, -0.000619f, -0.002834f, -0.004006f, 0.001720f, 0.018447f, -0.006870f, 0.002558f, -0.016945f, 0.001206f, 0.018810f, -0.013118f, 0.014002f, -0.006276f, 0.001065f, 0.031338f, -0.005461f, 0.000810f, -0.000658f, -0.009415f, 0.016127f, 0.006799f, 0.006926f, 0.006802f, -0.005096f, 0.004360f, 0.017662f, -0.004953f, 0.012025f, -0.007644f, -0.001341f, 0.023756f, -0.098022f, -0.228373f, -0.036483f, 0.133749f, 0.121408f, 0.298934f, 0.156115f, -0.080359f, -0.024674f, -0.165421f, -0.280894f, -0.019319f, -0.127634f, -0.017713f, 0.204734f, 0.087490f, 0.158184f, 0.242853f, -0.028209f, -0.035491f, -0.123282f, -0.209626f, -0.166691f, -0.010673f, -0.062611f, -0.023665f, 0.174255f, 0.055321f, + 0.113363f, 0.206015f, 0.033779f, -0.000770f, 0.021360f, -0.125196f, -0.189621f, 0.032654f, -0.195945f, -0.128150f, 0.043544f, -0.019646f, 0.031904f, 0.252302f, 0.028987f, 0.096757f, 0.206007f, -0.040979f, 0.006438f, 0.045979f, -0.198513f, -0.165536f, -0.058633f, -0.225936f, -0.087478f, 0.028842f, 0.041855f, 0.155688f, 0.219280f, 0.156312f, 0.110359f, 0.096142f, -0.036464f, -0.132343f, -0.108651f, -0.163630f, -0.171894f, -0.073681f, -0.043512f, 0.001174f, 0.144373f, 0.172180f, 0.053967f, 0.134548f, 0.039311f, -0.042576f, 0.028385f, -0.093751f, -0.130272f, -0.025498f, -0.060470f, -0.040512f, 0.073566f, -0.002720f, 0.051333f, 0.091401f, -0.024989f, -0.002011f, 0.000097f, -0.046268f, -0.014149f, -0.003192f, -0.034591f, 0.038708f, 0.014139f, -0.009021f, 0.063356f, 0.020166f, -0.008949f, 0.060770f, -0.021233f, -0.065143f, 0.001412f, -0.099512f, -0.069517f, 0.021490f, -0.066077f, 0.014142f, 0.076845f, 0.056360f, 0.104703f, 0.114014f, 0.041673f, 0.040296f, -0.004644f, -0.094051f, -0.131264f, -0.135253f, -0.141089f, -0.089798f, -0.006609f, 0.045282f, 0.097707f, 0.169365f, 0.181935f, 0.150873f, + 0.118291f, -0.007121f, -0.110893f, -0.159294f, -0.203409f, -0.207742f, -0.110578f, -0.033492f, 0.087098f, 0.183754f, 0.166693f, 0.100271f, 0.074533f, 0.021533f, -0.015302f, -0.025049f, -0.073147f, -0.084946f, -0.063512f, -0.053518f, -0.038027f, -0.008131f, 0.007888f, 0.030157f, 0.045588f, 0.045935f, 0.044563f, 0.039099f, 0.018218f, -0.002570f, -0.014058f, -0.013683f, -0.009907f, -0.005530f, -0.004375f} + }, + { + {-0.008213f, 0.008653f, 0.002179f, -0.004681f, -0.002074f, -0.010448f, -0.002783f, 0.008781f, -0.004618f, -0.003361f, 0.002718f, -0.001348f, -0.000311f, 0.000574f, -0.002777f, -0.002226f, 0.010643f, 0.005189f, -0.001274f, 0.000542f, -0.001561f, -0.003149f, 0.001483f, 0.003820f, 0.005866f, -0.001469f, 0.002256f, 0.002723f, -0.009384f, -0.002860f, 0.000002f, -0.001843f, 0.005789f, 0.000549f, -0.001959f, 0.005216f, -0.003939f, 0.001779f, 0.008079f, -0.004446f, 0.000532f, 0.001103f, 0.006138f, -0.002334f, 0.008458f, -0.011941f, -0.004347f, 0.005229f, -0.002354f, -0.010118f, 0.000744f, 0.002059f, 0.003393f, 0.003491f, -0.001081f, -0.004348f, 0.000391f, -0.003944f, -0.002681f, 0.001200f, 0.005035f, 0.004640f, -0.006745f, 0.005965f, -0.007383f, 0.006623f, 0.000390f, 0.005808f, -0.002244f, -0.004785f, -0.002113f, 0.003908f, -0.000741f, -0.000974f, -0.001162f, 0.005407f, -0.005806f, 0.003000f, 0.001431f, 0.001460f, 0.001854f, 0.004325f, 0.001388f, -0.002775f, -0.003133f, -0.001733f, 0.002357f, -0.000508f, -0.002299f, 0.000444f, -0.002777f, -0.000615f, -0.000190f, -0.002842f, -0.001132f, -0.001602f, + 0.000378f, 0.001530f, -0.001915f, -0.001380f, 0.000797f, -0.000394f, -0.002741f, -0.000029f, 0.001498f, -0.001069f, -0.000136f, 0.000559f, -0.000253f, 0.001074f, 0.000784f, 0.000078f, -0.002071f, -0.000696f, 0.000078f, -0.000942f, 0.000057f, -0.000232f, -0.001451f, 0.000813f, -0.002460f, -0.028477f, 0.009350f, -0.010351f, -0.004124f, -0.008475f, -0.008702f, 0.004948f, -0.002902f, -0.007348f, -0.003948f, 0.009996f, 0.014856f, -0.008124f, -0.003024f, -0.000721f, -0.010699f, -0.010053f, 0.000754f, -0.001016f, 0.006537f, 0.002203f, 0.004869f, -0.004288f, -0.002685f, -0.005556f, 0.001566f, 0.009589f, 0.004163f, 0.001865f, -0.006182f, 0.004689f, 0.001418f, 0.002870f, -0.004035f, 0.000358f, 0.001417f, 0.002155f, -0.005483f, -0.004010f, 0.001501f, -0.007569f, -0.007738f, 0.003321f, 0.005870f, -0.006598f, -0.003320f, -0.002543f, 0.000475f, 0.005852f, 0.004718f, 0.002042f, 0.000890f, 0.015134f, 0.005943f, -0.004779f, 0.005893f, 0.004198f, -0.004205f, 0.007150f, -0.002664f, -0.001793f, -0.000040f, -0.003117f, 0.006354f, -0.003577f, 0.001669f, 0.003830f, 0.003069f, -0.005655f, 0.002228f, 0.001056f, + 0.001145f, -0.001978f, -0.002804f, -0.001178f, 0.008876f, 0.000591f, -0.002631f, -0.001903f, 0.002095f, -0.007987f, 0.001547f, 0.004756f, -0.000309f, 0.003079f, -0.001759f, -0.002878f, 0.001930f, 0.001759f, -0.000745f, 0.002993f, 0.001542f, -0.000854f, 0.002124f, 0.002224f, 0.003719f, 0.000484f, 0.000013f, -0.000263f, -0.001119f, -0.001582f, -0.000160f, -0.000284f, -0.000990f, 0.001095f, -0.000352f, 0.003707f, 0.021669f, 0.008636f, -0.001513f, 0.000978f, 0.004964f, 0.002592f, -0.001469f, -0.009370f, 0.000300f, 0.008305f, -0.008527f, -0.000957f, -0.016001f, 0.004195f, 0.006513f, 0.000430f, -0.003814f, 0.011691f, 0.008220f, -0.007542f, 0.003640f, 0.000438f, -0.006612f, 0.010432f, 0.005751f, -0.000685f, 0.004212f, 0.009940f, -0.003086f, -0.002060f, 0.000662f, 0.000054f, 0.000235f, 0.002383f, 0.012209f, 0.002454f, 0.001820f, -0.019749f, -0.001047f, 0.000894f, 0.002356f, -0.008940f, 0.002065f, -0.007212f, -0.005535f, -0.007628f, -0.004984f, 0.000040f, 0.002290f, -0.004663f, 0.004653f, -0.011349f, -0.006519f, -0.000698f, -0.000154f, 0.003633f, -0.004549f, -0.001064f, -0.004120f, 0.002458f, + 0.006140f, -0.003721f, 0.000656f, -0.003222f, -0.000589f, 0.009519f, 0.007457f, -0.003014f, 0.006988f, -0.003356f, -0.005965f, -0.007453f, -0.000563f, -0.000697f, -0.005027f, 0.004534f, -0.000802f, 0.001290f, -0.000561f, -0.001660f, 0.000337f, -0.001075f, -0.004076f, -0.000263f, -0.006493f, 0.000729f, -0.003200f, -0.002092f, -0.005455f, 0.006320f, -0.001943f, 0.002152f, 0.004317f, 0.001709f, -0.002204f, -0.000514f, -0.002474f, -0.000184f, 0.001086f, -0.002434f, 0.002508f, -0.000208f, 0.000272f, 0.000359f, -0.000896f, 0.001473f, 0.000854f, 0.000462f, 0.000185f, 0.003573f, 0.001716f, -0.001154f, -0.002438f, -0.002223f, 0.002159f, 0.002907f, -0.000011f, 0.000740f, 0.034212f, -0.014876f, 0.002820f, -0.001243f, -0.006304f, 0.005442f, 0.009595f, -0.006218f, 0.010315f, -0.000558f, 0.011002f, 0.003057f, 0.003888f, -0.004730f, 0.006239f, 0.002419f, 0.006389f, -0.013449f, 0.007216f, -0.007948f, 0.002497f, -0.006674f, 0.008450f, -0.002295f, 0.008512f, -0.004989f, 0.003137f, -0.003266f, -0.000732f, -0.000365f, -0.000852f, 0.003355f, 0.017682f, 0.000794f, 0.005196f, -0.004880f, -0.008188f, 0.000359f, + 0.000165f, 0.000360f, 0.002697f, -0.005665f, 0.011601f, -0.000722f, 0.009726f, 0.000692f, -0.004197f, -0.005301f, -0.014575f, 0.007180f, 0.004757f, -0.006802f, 0.000767f, 0.005861f, 0.003112f, -0.016966f, 0.010150f, -0.000554f, 0.007218f, -0.010182f, -0.010977f, -0.005311f, -0.010692f, -0.001943f, 0.012373f, 0.002594f, -0.004732f, 0.000761f, 0.007002f, -0.002330f, -0.005608f, -0.002893f, -0.006290f, 0.004533f, -0.009540f, -0.001656f, -0.007318f, -0.002772f, -0.000027f, 0.008240f, 0.003868f, 0.000931f, 0.002571f, 0.010340f, 0.005426f, 0.001295f, 0.003778f, -0.002879f, -0.001140f, 0.000726f, 0.000198f, 0.001686f, 0.000870f, -0.001738f, 0.001018f, 0.003678f, -0.000244f, 0.000828f, 0.001366f, -0.001714f, -0.002371f, 0.002327f, -0.002838f, 0.003430f, 0.002011f, 0.003183f, 0.000085f, -0.001151f, 0.001937f, 0.003154f, 0.000823f, -0.001239f, 0.001026f, 0.008943f, -0.020976f, 0.004275f, -0.006614f, -0.019166f, -0.014773f, 0.007853f, 0.008759f, 0.011527f, -0.005706f, -0.002966f, 0.007936f, 0.003792f, 0.011860f, 0.003862f, -0.001323f, 0.001213f, 0.007570f, 0.014749f, -0.003776f, 0.004299f, + -0.000180f, 0.011951f, 0.002750f, -0.000731f, -0.002396f, -0.009120f, -0.013866f, 0.000150f, -0.001993f, 0.004168f, -0.000784f, 0.003265f, 0.002431f, 0.000846f, 0.000891f, 0.002761f, -0.004733f, 0.000531f, 0.006596f, 0.010316f, -0.005046f, 0.001226f, -0.004447f, -0.005927f, 0.008525f, -0.006541f, -0.016287f, -0.006405f, -0.004170f, 0.007827f, 0.000656f, 0.008636f, 0.007898f, -0.004184f, 0.000351f, -0.006759f, -0.000938f, -0.002902f, 0.010116f, -0.012737f, -0.000366f, 0.004293f, -0.013486f, -0.015182f, 0.000237f, 0.004692f, 0.009618f, -0.006703f, -0.016058f, 0.008385f, -0.014816f, 0.017329f, 0.009796f, 0.002853f, 0.007391f, -0.000174f, -0.007131f, 0.022028f, -0.002000f, 0.010662f, -0.000403f, 0.015409f, 0.010598f, 0.005634f, -0.001565f, -0.003003f, -0.005164f, -0.001903f, 0.002335f, 0.000560f, 0.004264f, -0.004355f, 0.002660f, -0.002313f, -0.001571f, -0.001635f, -0.001774f, 0.002093f, -0.001101f, -0.000036f, -0.003256f, -0.000148f, 0.002025f, 0.003718f, -0.003725f, -0.004564f, 0.000655f, 0.002023f, -0.000019f, 0.002432f, -0.001352f, 0.000288f, -0.001776f, -0.000575f, 0.001273f, 0.002299f, + 0.002830f, 0.001689f, -0.002205f, -0.046420f, 0.009548f, 0.002333f, -0.023320f, -0.029428f, -0.004744f, -0.022723f, 0.018448f, 0.005272f, -0.013704f, 0.000841f, -0.006385f, 0.002038f, -0.009361f, 0.001182f, -0.000548f, 0.000093f, 0.013001f, -0.004667f, -0.003048f, -0.005444f, -0.004802f, -0.012291f, -0.008242f, 0.012299f, -0.005098f, 0.007771f, -0.006870f, 0.003353f, 0.000195f, 0.007019f, -0.007173f, 0.005312f, -0.007205f, 0.003121f, -0.002764f, -0.004508f, 0.004445f, -0.011493f, 0.004400f, -0.005860f, -0.002109f, -0.008359f, 0.020149f, 0.009578f, 0.017666f, -0.007552f, 0.007447f, 0.005982f, -0.003515f, 0.003129f, -0.008375f, 0.008865f, 0.019375f, 0.015306f, -0.010675f, -0.002874f, 0.004538f, -0.007741f, -0.005192f, -0.013542f, -0.025317f, -0.008601f, 0.012982f, 0.004657f, -0.006247f, 0.002557f, 0.001333f, -0.006910f, -0.012024f, -0.012149f, 0.008633f, 0.000996f, -0.018606f, 0.001971f, 0.001801f, -0.000919f, -0.001387f, 0.006168f, 0.013499f, -0.001380f, -0.000009f, 0.001885f, -0.000007f, -0.003551f, -0.012297f, 0.004071f, 0.004154f, 0.002530f, 0.005756f, 0.003480f, -0.005257f, 0.001357f, + -0.003307f, 0.000687f, -0.002795f, -0.001130f, -0.003093f, 0.000080f, 0.000706f, -0.000372f, -0.002236f, -0.002181f, -0.000651f, 0.000960f, -0.000063f, 0.004524f, 0.001627f, 0.004223f, 0.004579f, 0.004949f, -0.005918f, -0.006017f, -0.002246f, 0.004546f, -0.001534f, 0.001670f, -0.001762f, 0.002512f, 0.002643f, 0.001702f, -0.002878f, -0.001628f, -0.018169f, -0.007565f, -0.004712f, 0.013745f, -0.003614f, 0.003276f, -0.014151f, -0.014768f, 0.000757f, 0.004305f, -0.008630f, -0.004940f, -0.008095f, 0.016843f, 0.003741f, -0.005618f, -0.012244f, -0.012092f, -0.011810f, -0.003272f, 0.005730f, 0.016919f, 0.005523f, 0.009572f, -0.007542f, 0.018017f, 0.010321f, 0.003338f, 0.000251f, 0.018530f, -0.010762f, 0.001791f, 0.005912f, 0.012555f, -0.020211f, -0.010280f, 0.008898f, 0.003599f, -0.002739f, 0.021163f, -0.009173f, 0.006019f, 0.012805f, 0.004006f, 0.002209f, 0.009355f, 0.003853f, 0.004681f, 0.004814f, 0.002071f, 0.005538f, -0.000259f, 0.008126f, -0.001814f, 0.019816f, -0.014298f, 0.016323f, 0.012964f, -0.011166f, 0.012839f, 0.002445f, 0.010921f, 0.011078f, -0.024079f, -0.000554f, -0.000914f, + -0.007181f, 0.003913f, -0.006468f, 0.006743f, -0.002652f, 0.015440f, -0.001587f, 0.002468f, 0.006401f, 0.004374f, 0.006200f, -0.009766f, -0.003199f, -0.009982f, -0.009195f, -0.005285f, 0.015038f, 0.002276f, -0.004658f, 0.004456f, 0.004222f, 0.001944f, -0.002414f, 0.001597f, -0.001675f, 0.005927f, 0.002343f, 0.001907f, -0.002737f, 0.001851f, -0.005495f, -0.000482f, 0.006639f, 0.003433f, -0.000941f, 0.002202f, 0.002431f, -0.001794f, 0.002871f, 0.001881f, 0.006449f, 0.003515f, -0.003398f, -0.001370f, -0.001965f, 0.001959f, -0.005501f, 0.001668f, 0.024269f, -0.006304f, -0.003663f, -0.005841f, 0.017309f, 0.009130f, 0.001927f, 0.006658f, -0.011562f, 0.025843f, 0.008617f, -0.001945f, 0.009807f, 0.012529f, -0.020943f, -0.001322f, 0.005061f, 0.002549f, 0.000054f, 0.017884f, -0.008474f, -0.010716f, 0.024571f, 0.003791f, -0.001657f, -0.002345f, 0.012878f, 0.001071f, -0.001779f, -0.002312f, -0.005866f, 0.006473f, -0.003608f, 0.008604f, 0.006067f, -0.015338f, -0.014544f, 0.001926f, 0.028984f, -0.000251f, 0.005977f, -0.017739f, 0.008879f, 0.011966f, -0.007305f, 0.008896f, 0.010996f, -0.017986f, + -0.010966f, -0.002177f, -0.023090f, -0.012198f, -0.013754f, 0.004161f, -0.004670f, -0.005042f, -0.002475f, 0.016384f, -0.022267f, 0.009963f, 0.004920f, -0.007151f, 0.013701f, -0.008633f, 0.001374f, -0.018665f, -0.000330f, 0.011438f, 0.010253f, 0.021447f, -0.025173f, -0.006177f, -0.027956f, -0.005919f, -0.000514f, -0.006573f, 0.003194f, -0.001278f, 0.025535f, 0.019878f, 0.011247f, -0.012594f, 0.000694f, 0.004979f, 0.012463f, 0.015382f, -0.000313f, 0.000158f, -0.002143f, 0.000415f, 0.008725f, -0.000332f, -0.000724f, -0.000261f, 0.000181f, 0.000528f, 0.001079f, 0.003620f, -0.003570f, -0.001039f, 0.003652f, 0.000698f, 0.003374f, -0.000027f, 0.000384f, -0.002839f, 0.004620f, 0.002937f, 0.000064f, 0.004427f, -0.002197f, -0.000185f, 0.004046f, 0.001178f, -0.000698f, -0.004929f, -0.000346f, 0.001226f, 0.000719f, -0.001698f, 0.005173f, 0.008792f, -0.001605f, -0.000146f, -0.003942f, 0.002972f, 0.016591f, -0.018419f, 0.000704f, -0.011251f, 0.031791f, -0.013302f, -0.007602f, 0.027574f, 0.020810f, 0.003937f, -0.038225f, -0.009243f, 0.017725f, 0.001531f, -0.001746f, -0.005354f, -0.002924f, -0.002884f, + 0.002772f, 0.006041f, 0.005508f, 0.005256f, 0.034047f, -0.006977f, -0.004834f, 0.000137f, 0.004525f, -0.010010f, 0.006058f, 0.003717f, -0.001178f, -0.011026f, -0.006914f, 0.012378f, 0.013218f, 0.024975f, 0.006442f, -0.010112f, 0.006367f, -0.000200f, 0.006451f, 0.000585f, 0.013876f, -0.011369f, -0.017063f, -0.017548f, 0.011652f, -0.004913f, 0.002498f, 0.004729f, -0.006238f, -0.001045f, 0.029582f, 0.010204f, -0.024812f, 0.017831f, 0.005732f, 0.030004f, -0.015462f, -0.014517f, 0.008720f, 0.016213f, 0.011188f, 0.006325f, -0.002673f, 0.001068f, 0.007763f, -0.009605f, -0.002720f, 0.000450f, 0.012761f, -0.009067f, 0.025561f, -0.000790f, -0.000275f, -0.013047f, -0.014782f, 0.029273f, 0.008738f, -0.023785f, -0.005523f, 0.020219f, 0.014004f, 0.002910f, 0.005118f, -0.012042f, 0.003884f, 0.003378f, 0.003990f, 0.002363f, 0.004421f, -0.005461f, -0.006733f, 0.001050f, -0.000138f, -0.005469f, -0.001792f, 0.005366f, 0.005195f, -0.007357f, 0.002054f, 0.000148f, 0.003343f, 0.004655f, -0.001182f, -0.001154f, -0.001781f, 0.003200f, 0.009031f, -0.006318f, 0.005006f, -0.000246f, 0.000285f, -0.003627f, + -0.000821f, -0.002652f, -0.001851f, 0.004477f, -0.001421f, -0.002312f, -0.005757f, -0.000013f, -0.003233f, -0.022948f, -0.019502f, -0.007727f, 0.006834f, 0.007009f, 0.034869f, 0.033825f, -0.004170f, 0.002513f, 0.001304f, 0.000018f, -0.000587f, -0.007287f, -0.023058f, -0.017783f, -0.009252f, 0.007841f, -0.006569f, -0.020144f, -0.005826f, 0.003519f, -0.001665f, -0.030751f, -0.009149f, 0.006485f, -0.003304f, 0.002617f, 0.001923f, 0.008890f, 0.013243f, 0.001896f, -0.009906f, 0.009618f, 0.010137f, 0.006967f, -0.000576f, 0.013074f, -0.026906f, 0.008671f, -0.023856f, 0.029235f, -0.021116f, 0.007773f, -0.022391f, -0.003985f, -0.024995f, -0.013429f, -0.015634f, -0.017056f, 0.011338f, -0.015038f, -0.002992f, 0.004873f, -0.000332f, -0.008166f, -0.005798f, -0.002893f, -0.024433f, 0.000480f, 0.001454f, 0.011732f, -0.038059f, 0.000573f, -0.001116f, 0.017366f, 0.021138f, -0.014769f, -0.008996f, 0.000473f, 0.016216f, -0.031695f, 0.019975f, -0.014440f, -0.009446f, 0.001192f, -0.030633f, -0.001925f, -0.002584f, -0.005126f, -0.005570f, -0.004168f, 0.030491f, 0.012122f, 0.006179f, -0.007695f, -0.006983f, -0.008038f, + 0.000854f, 0.007137f, -0.012360f, -0.000714f, -0.002234f, -0.003683f, 0.001540f, 0.008653f, -0.003464f, -0.006190f, 0.005632f, 0.003113f, -0.000210f, 0.005949f, 0.003352f, 0.004916f, -0.003318f, -0.004527f, 0.007624f, -0.005979f, 0.001911f, -0.007715f, -0.001462f, -0.000099f, -0.001543f, -0.003198f, -0.006499f, -0.007524f, -0.007569f, 0.001378f, -0.000456f, -0.002087f, -0.005462f, -0.005580f, -0.002131f, -0.003163f, 0.001664f, 0.007185f, 0.005527f, -0.018172f, -0.047108f, -0.018915f, -0.009086f, 0.008019f, 0.012537f, -0.015574f, -0.005977f, -0.019551f, -0.017244f, 0.008841f, -0.015167f, 0.015296f, 0.006159f, 0.010932f, -0.002000f, -0.015435f, 0.026487f, 0.010384f, 0.014768f, -0.019250f, 0.007924f, 0.003265f, -0.027905f, 0.016938f, 0.010119f, 0.000794f, -0.019052f, -0.007504f, 0.009155f, 0.009652f, -0.000622f, 0.003169f, 0.013286f, -0.013429f, -0.009916f, 0.015601f, -0.031781f, -0.031431f, -0.041140f, -0.009468f, 0.012980f, -0.036233f, -0.030194f, -0.018489f, 0.000406f, 0.012646f, 0.003930f, 0.003352f, 0.000426f, -0.010705f, -0.014543f, -0.034257f, 0.017721f, 0.004746f, 0.040957f, -0.010160f, + 0.000883f, -0.025803f, -0.030670f, 0.003546f, 0.019483f, 0.001025f, -0.019425f, 0.012355f, 0.004945f, 0.027720f, 0.002557f, 0.003186f, -0.013779f, -0.002927f, 0.011699f, -0.027878f, -0.051618f, -0.014693f, -0.013037f, 0.002414f, 0.013324f, -0.024990f, -0.012657f, 0.007669f, -0.008792f, -0.002367f, 0.007861f, -0.005133f, -0.004313f, 0.010209f, 0.002434f, -0.001334f, 0.005049f, 0.007838f, 0.009019f, 0.001366f, -0.006316f, -0.016746f, -0.001649f, -0.010377f, 0.002561f, 0.001407f, 0.001952f, 0.006369f, -0.005991f, 0.005748f, 0.008303f, 0.005219f, 0.004653f, 0.004303f, -0.012229f, -0.011528f, -0.004305f, -0.009995f, 0.000972f, 0.002288f, 0.003130f, 0.010915f, -0.002745f, 0.006771f, 0.004368f, -0.005237f, -0.002535f, -0.007423f, -0.009450f, -0.003028f, -0.012428f, -0.004504f, -0.002822f, -0.043973f, -0.033799f, -0.015555f, 0.023192f, -0.002035f, 0.039720f, 0.007843f, -0.003460f, -0.022312f, 0.007918f, 0.040939f, -0.042886f, -0.038590f, -0.012778f, -0.006417f, -0.026913f, 0.025469f, 0.007423f, 0.013803f, 0.016443f, -0.026919f, -0.003254f, 0.010814f, -0.017019f, 0.031775f, 0.000406f, 0.007161f, + -0.009313f, 0.007860f, -0.021062f, -0.011952f, -0.007293f, 0.011972f, 0.005588f, 0.019340f, -0.031740f, 0.002869f, -0.000340f, -0.023547f, 0.025647f, -0.015354f, -0.037765f, 0.007489f, 0.013455f, 0.002789f, -0.011369f, -0.002682f, -0.015810f, 0.002646f, 0.012698f, 0.005518f, -0.025879f, 0.010148f, -0.006011f, -0.028522f, -0.017051f, -0.035053f, 0.000624f, -0.005392f, -0.001098f, 0.004640f, 0.021381f, 0.026872f, 0.022104f, -0.011306f, -0.019617f, 0.006523f, -0.005136f, -0.003172f, -0.015220f, 0.027979f, 0.022828f, -0.004833f, 0.042590f, -0.027182f, 0.014053f, 0.027119f, 0.028833f, 0.000919f, 0.018242f, -0.011819f, -0.004956f, -0.023814f, -0.010386f, 0.014483f, -0.005131f, -0.018504f, 0.011382f, -0.010527f, 0.011966f, -0.005285f, -0.013010f, 0.006836f, -0.002802f, -0.007100f, -0.005836f, 0.005083f, -0.006485f, 0.004468f, 0.008336f, -0.008850f, 0.011404f, -0.001209f, -0.006665f, 0.004597f, 0.001101f, 0.001002f, -0.005603f, 0.007095f, -0.010718f, 0.003818f, 0.003592f, 0.000718f, -0.007273f, -0.000437f, -0.004457f, 0.005595f, 0.009338f, 0.021284f, 0.010289f, 0.017078f, -0.001200f, 0.000191f, + 0.008255f, -0.010330f, 0.002519f, -0.014133f, -0.006259f, 0.016024f, -0.038125f, 0.004795f, 0.000411f, -0.024113f, 0.003472f, -0.053606f, -0.046378f, -0.011120f, -0.000448f, 0.001972f, -0.001209f, -0.019073f, -0.000712f, -0.005471f, 0.017092f, 0.003322f, -0.001127f, 0.003195f, -0.040526f, 0.013973f, 0.007503f, 0.022448f, 0.009273f, 0.009713f, 0.026342f, 0.013127f, 0.003768f, 0.066016f, 0.014071f, 0.025388f, 0.034984f, 0.001621f, 0.024655f, 0.006175f, -0.013784f, 0.016029f, 0.001075f, 0.007709f, -0.013505f, 0.000987f, -0.008787f, 0.005585f, -0.008762f, 0.018560f, 0.002167f, -0.011572f, -0.014516f, 0.001974f, -0.039259f, 0.022763f, 0.015290f, -0.002011f, -0.003629f, 0.008939f, -0.010499f, -0.008656f, -0.012942f, -0.015533f, 0.012865f, -0.012394f, 0.021314f, 0.024897f, 0.024316f, 0.025952f, -0.006124f, -0.039357f, 0.000529f, 0.016596f, 0.039579f, -0.009218f, -0.001568f, 0.018788f, 0.027606f, 0.040821f, -0.005407f, 0.017977f, -0.012200f, -0.007016f, -0.032928f, -0.025599f, -0.011307f, -0.011625f, -0.009498f, 0.006837f, 0.001291f, -0.014084f, 0.015802f, 0.010043f, 0.012384f, 0.022442f, + 0.008843f, 0.008403f, -0.002828f, 0.000013f, -0.003476f, -0.006442f, 0.000033f, 0.004037f, -0.000144f, 0.011835f, 0.009299f, 0.005777f, -0.000852f, -0.009735f, 0.000382f, -0.006998f, -0.007924f, 0.004926f, 0.005813f, 0.001782f, -0.012316f, -0.002749f, -0.017825f, -0.004313f, 0.005527f, 0.008697f, -0.005876f, 0.007223f, -0.010311f, -0.011740f, -0.006178f, -0.007095f, 0.006248f, 0.003348f, -0.010580f, -0.007126f, 0.032425f, 0.042056f, -0.031104f, -0.032553f, -0.043040f, 0.039038f, -0.003932f, -0.015536f, 0.013670f, 0.013244f, 0.036568f, 0.030522f, 0.002186f, 0.033452f, 0.047452f, 0.013688f, -0.023803f, 0.022899f, -0.022007f, -0.012174f, -0.004342f, -0.015274f, -0.018425f, 0.010011f, -0.009155f, -0.008960f, -0.022281f, 0.051707f, 0.006728f, -0.027010f, 0.000303f, -0.003361f, 0.023327f, 0.024683f, 0.009921f, -0.015648f, 0.024868f, -0.006295f, 0.015480f, -0.046625f, 0.002803f, 0.019918f, -0.019825f, 0.007141f, -0.021570f, -0.017476f, 0.048875f, 0.020552f, 0.014988f, -0.002992f, -0.042639f, -0.010044f, 0.012802f, 0.009670f, 0.007317f, -0.009787f, 0.034571f, -0.023640f, 0.019373f, -0.010889f, + 0.012940f, 0.014271f, 0.027470f, 0.037039f, -0.042167f, -0.000696f, 0.022239f, 0.011041f, 0.031110f, 0.030221f, -0.042042f, 0.000536f, -0.011365f, -0.021564f, -0.001004f, -0.022570f, 0.009837f, 0.018029f, -0.008194f, 0.032322f, -0.006805f, -0.018643f, -0.022761f, 0.020280f, 0.023177f, 0.023109f, -0.005862f, 0.004372f, -0.000942f, -0.032513f, -0.031490f, -0.029474f, 0.018881f, 0.009724f, 0.006282f, 0.015286f, -0.000624f, -0.007915f, 0.022854f, 0.003498f, 0.000218f, 0.014181f, 0.022153f, 0.013592f, 0.002009f, 0.002792f, -0.006094f, 0.013646f, 0.006967f, 0.028274f, -0.002262f, 0.003772f, 0.019951f, 0.016287f, 0.005820f, -0.002381f, 0.012888f, -0.000007f, -0.002238f, 0.022412f, -0.017284f, 0.001336f, 0.013957f, 0.001471f, -0.003715f, -0.006241f, -0.002998f, 0.000349f, 0.015057f, 0.003161f, 0.001436f, 0.016575f, 0.012185f, -0.010032f, 0.032171f, 0.064487f, 0.002385f, -0.031390f, 0.008367f, -0.021120f, 0.013029f, -0.018405f, -0.019817f, 0.058520f, -0.045108f, 0.073576f, 0.044905f, -0.011280f, 0.014521f, 0.035377f, 0.004799f, -0.056100f, 0.021520f, -0.045491f, 0.010373f, 0.003697f, + -0.022681f, 0.000639f, -0.003417f, 0.031947f, -0.016516f, -0.001919f, -0.001622f, -0.010110f, 0.067770f, -0.004201f, -0.010626f, 0.008504f, 0.022567f, -0.023497f, -0.049433f, 0.038440f, -0.006585f, -0.003215f, 0.043722f, -0.026192f, -0.007577f, -0.031130f, 0.007861f, -0.021821f, 0.024512f, 0.022756f, 0.046544f, -0.013674f, 0.012713f, 0.031161f, -0.044928f, 0.005259f, -0.028781f, -0.044988f, -0.057682f, -0.030308f, -0.062338f, -0.069809f, -0.010171f, 0.004341f, -0.033202f, -0.035421f, 0.021404f, -0.002623f, -0.020220f, -0.038158f, 0.026986f, -0.020443f, 0.006692f, 0.034362f, -0.065461f, -0.018879f, -0.012405f, 0.028747f, 0.077286f, -0.036891f, 0.001796f, -0.023445f, -0.034974f, 0.016650f, -0.041766f, 0.033194f, 0.057468f, -0.016592f, -0.027561f, -0.028752f, -0.007737f, -0.006906f, 0.000058f, 0.018772f, 0.013325f, -0.015287f, 0.014840f, -0.001936f, 0.011559f, 0.000696f, -0.014584f, -0.003994f, 0.016454f, -0.028155f, 0.012700f, -0.014731f, 0.003343f, -0.011977f, -0.005174f, -0.016907f, 0.003306f, -0.016236f, -0.025906f, -0.012110f, 0.005424f, -0.018714f, -0.000624f, 0.005789f, 0.027199f, -0.015928f, + -0.009976f, 0.009280f, 0.010843f, -0.019907f, -0.013135f, 0.005888f, -0.006078f, -0.010502f, 0.018762f, 0.003619f, -0.015811f, 0.013788f, 0.003188f, -0.023177f, 0.003942f, -0.019055f, 0.020803f, -0.009511f, -0.030229f, -0.044698f, -0.033910f, 0.037338f, -0.030712f, 0.015013f, 0.035578f, 0.015116f, 0.022828f, -0.042643f, 0.061090f, 0.038339f, 0.033296f, -0.024734f, 0.043774f, -0.004947f, 0.028935f, 0.018897f, 0.006400f, 0.015647f, 0.021235f, 0.012798f, -0.007182f, -0.011070f, -0.009790f, 0.004242f, -0.029487f, -0.034923f, 0.019523f, 0.008444f, 0.011326f, -0.028772f, 0.007770f, 0.008497f, 0.021387f, 0.031690f, 0.047976f, -0.027326f, 0.007254f, 0.068045f, 0.014718f, 0.007087f, 0.006596f, -0.014317f, 0.005010f, 0.067729f, 0.019723f, 0.043772f, 0.012555f, -0.047389f, -0.019623f, -0.034593f, 0.098716f, 0.039816f, -0.038148f, -0.024200f, -0.034022f, 0.005442f, -0.022323f, -0.053959f, 0.012326f, -0.040954f, 0.060451f, -0.004587f, -0.050029f, 0.065518f, 0.053415f, 0.007258f, -0.014513f, 0.008636f, -0.030446f, 0.040188f, 0.072503f, -0.019793f, 0.034391f, 0.080655f, -0.012753f, -0.013611f, + -0.009225f, 0.048922f, -0.003578f, -0.027691f, -0.025578f, -0.026478f, -0.000428f, -0.003681f, -0.022664f, 0.001320f, -0.009497f, 0.024371f, 0.006212f, -0.024439f, -0.015059f, -0.027780f, -0.002944f, 0.003156f, -0.004417f, -0.019660f, -0.021257f, -0.015732f, 0.013352f, 0.021818f, 0.003527f, -0.024022f, -0.003382f, 0.029052f, 0.000249f, 0.026545f, 0.014339f, -0.015990f, -0.001351f, -0.024448f, 0.023295f, 0.009636f, -0.030525f, -0.058293f, 0.005298f, -0.004547f, -0.017416f, 0.018028f, -0.000138f, -0.010928f, -0.008179f, 0.004965f, 0.001569f, -0.003245f, -0.046790f, 0.018559f, -0.006425f, 0.046378f, -0.097044f, -0.066584f, 0.038380f, 0.018360f, 0.013882f, 0.032588f, -0.033120f, -0.043167f, -0.023776f, -0.035555f, 0.020074f, -0.038148f, 0.011113f, 0.025316f, 0.041588f, 0.001374f, 0.034851f, 0.020298f, 0.005719f, -0.011129f, -0.036486f, -0.025743f, 0.021239f, -0.044609f, 0.022690f, 0.005242f, 0.037977f, 0.028983f, -0.014227f, -0.055519f, -0.036110f, -0.003360f, -0.002792f, -0.014684f, 0.037981f, -0.067111f, -0.005222f, 0.002343f, -0.070297f, -0.001360f, -0.008676f, -0.005608f, 0.007501f, 0.041148f, + -0.040116f, -0.110463f, 0.041214f, 0.045020f, 0.026811f, 0.086169f, -0.070960f, -0.009100f, 0.047843f, 0.036626f, -0.044549f, -0.020679f, -0.012310f, 0.067880f, 0.013331f, 0.064795f, -0.093749f, 0.013687f, -0.111830f, -0.066945f, -0.064845f, 0.076864f, 0.024315f, -0.049553f, 0.045081f, 0.005294f, -0.043521f, 0.044250f, -0.065088f, -0.068254f, 0.010165f, -0.070885f, 0.021001f, -0.121102f, 0.018454f, 0.038257f, -0.051641f, 0.056766f, -0.025773f, -0.013642f, 0.037888f, -0.013054f, -0.010475f, -0.026982f, -0.002029f, 0.008979f, 0.020870f, -0.002446f, 0.019390f, 0.038259f, -0.028812f, -0.003088f, -0.022925f, 0.013663f, -0.015001f, -0.003903f, 0.008264f, 0.004775f, 0.005044f, -0.004958f, 0.039279f, -0.012974f, 0.003102f, 0.016931f, -0.034827f, -0.030472f, -0.033822f, -0.015610f, -0.056903f, -0.025982f, -0.020867f, 0.049057f, 0.009595f, 0.043680f, 0.018665f, 0.008926f, 0.019698f, 0.013935f, 0.001680f, 0.016628f, 0.003406f, 0.034054f, 0.083782f, 0.031006f, -0.030004f, -0.019586f, 0.011565f, -0.021272f, -0.024962f, -0.002962f, 0.038984f, -0.006759f, 0.007286f, -0.041432f, -0.008572f, 0.057261f, + -0.041777f, 0.031683f, 0.074762f, 0.037403f, -0.003179f, -0.014250f, -0.024590f, -0.047793f, -0.035165f, 0.041221f, -0.023481f, 0.038683f, 0.027856f, 0.013293f, 0.001815f, 0.015120f, -0.011933f, -0.060780f, -0.021107f, 0.043539f, 0.034466f, 0.036195f, -0.038488f, 0.066432f, -0.017110f, 0.025859f, -0.049097f, 0.044997f, 0.077347f, -0.015518f, -0.027583f, -0.002802f, 0.002811f, -0.017147f, 0.016875f, 0.033899f, -0.063515f, 0.041733f, 0.040383f, -0.009831f, 0.046817f, 0.024909f, 0.020175f, -0.029649f, 0.006088f, 0.041996f, -0.088575f, -0.078758f, -0.032898f, 0.020969f, -0.040814f, -0.119745f, 0.050149f, 0.032969f, -0.015615f, -0.020245f, 0.000837f, -0.006940f, -0.041127f, -0.109979f, -0.006743f, 0.078261f, 0.018887f, -0.013807f, -0.009443f, 0.016985f, 0.063917f, 0.051087f, -0.075243f, -0.030899f, 0.050030f, -0.010509f, -0.020263f, -0.085796f, -0.005130f, 0.047240f, 0.015534f, -0.013116f, 0.028925f, -0.010688f, 0.002939f, -0.032244f, -0.005450f, 0.019806f, 0.029416f, -0.016676f, -0.006226f, 0.006204f, 0.016944f, -0.010463f, 0.010371f, 0.001530f, -0.021154f, 0.012744f, 0.035784f, 0.006314f, + 0.010570f, 0.006848f, 0.016063f, -0.016794f, -0.029856f, 0.003027f, 0.031940f, -0.026170f, 0.011361f, -0.008752f, 0.002708f, -0.025380f, -0.049329f, -0.026602f, 0.018139f, 0.059970f, -0.006282f, 0.028400f, -0.039793f, -0.017278f, -0.026959f, 0.016698f, 0.011465f, 0.019013f, -0.013683f, -0.020373f, -0.001613f, 0.004423f, -0.001968f, 0.040818f, 0.054082f, 0.001274f, -0.060833f, 0.080718f, -0.022590f, -0.056231f, 0.050515f, -0.008032f, -0.030565f, 0.039061f, 0.010501f, -0.008091f, 0.032955f, -0.045026f, 0.042835f, -0.015213f, 0.001499f, -0.013043f, -0.011141f, -0.062798f, 0.024956f, -0.023928f, 0.009965f, -0.025133f, -0.002020f, -0.018719f, 0.018061f, -0.010938f, 0.068004f, 0.012078f, 0.044508f, -0.017224f, 0.011172f, 0.028169f, -0.011877f, 0.019490f, -0.003797f, 0.034009f, -0.001653f, -0.011337f, 0.053709f, -0.047877f, 0.026802f, 0.036738f, -0.021474f, 0.041572f, -0.025361f, -0.000969f, 0.021401f, -0.016176f, 0.048834f, 0.043750f, 0.009128f, 0.072763f, -0.044762f, -0.102593f, -0.017236f, -0.063412f, -0.041955f, 0.149979f, -0.003779f, 0.046054f, -0.006960f, -0.063215f, -0.001592f, 0.063042f, + 0.089234f, 0.054288f, 0.089886f, -0.048281f, -0.014425f, -0.021606f, -0.051269f, 0.034070f, -0.014372f, -0.031616f, -0.003276f, -0.062215f, -0.113773f, 0.028693f, 0.040093f, -0.033637f, 0.022709f, -0.007042f, -0.033923f, 0.036279f, 0.026713f, -0.013225f, 0.037357f, -0.013681f, -0.033309f, 0.017162f, -0.016529f, 0.044305f, 0.004186f, 0.003342f, 0.025029f, 0.008374f, -0.028184f, -0.011798f, 0.014535f, -0.009261f, 0.027576f, -0.038413f, 0.024823f, -0.040280f, -0.010248f, 0.010070f, -0.028588f, 0.018274f, 0.001168f, -0.042922f, -0.006940f, 0.002782f, -0.011513f, -0.000099f, -0.008007f, -0.031497f, 0.012918f, 0.009451f, -0.004995f, 0.031631f, 0.048513f, -0.026435f, -0.037799f, -0.002428f, -0.018015f, 0.052451f, 0.053905f, -0.031767f, -0.020084f, 0.045747f, -0.048133f, 0.057874f, -0.034869f, 0.008002f, -0.000071f, 0.006040f, -0.044402f, -0.006837f, -0.040156f, -0.033222f, 0.000163f, -0.013074f, -0.030281f, -0.012061f, 0.022288f, -0.025858f, 0.020544f, -0.012196f, 0.062234f, -0.028762f, 0.018627f, 0.003813f, -0.015406f, -0.049889f, -0.018262f, 0.038077f, 0.006928f, -0.012404f, 0.049916f, -0.036848f, + -0.037189f, -0.005037f, 0.047668f, -0.043260f, -0.005999f, 0.008536f, 0.012977f, -0.048185f, 0.014573f, 0.016789f, -0.017185f, -0.050390f, 0.000964f, -0.039122f, 0.016650f, 0.008942f, 0.015080f, -0.077044f, -0.032888f, 0.043997f, 0.118644f, -0.053657f, -0.007356f, 0.009585f, -0.019955f, -0.033456f, -0.000597f, 0.099096f, 0.022894f, -0.010067f, -0.008639f, -0.026157f, -0.006017f, -0.020024f, 0.038499f, 0.002046f, -0.024460f, -0.026317f, 0.001455f, 0.017801f, -0.039425f, 0.030878f, 0.009222f, 0.033660f, 0.001426f, 0.042803f, 0.018058f, -0.029773f, 0.040250f, 0.038369f, 0.094944f, 0.030244f, 0.007458f, 0.009837f, -0.034539f, 0.011647f, 0.031134f, 0.032142f, 0.011189f, -0.002153f, 0.001347f, -0.003773f, 0.012088f, 0.013452f, -0.003012f, 0.017355f, -0.004312f, -0.001667f, 0.032906f, 0.014029f, 0.005779f, -0.009693f, 0.009854f, 0.024919f, 0.026262f, 0.030115f, 0.011051f, 0.011134f, -0.016648f, -0.000002f, -0.000808f, 0.005623f, 0.017131f, -0.000567f, -0.013254f, 0.015528f, -0.013895f, 0.012946f, -0.000433f, 0.015255f, 0.002457f, -0.012266f, -0.003248f, 0.001162f, 0.003664f, 0.007673f, + -0.001596f, 0.005543f, 0.004287f, -0.000038f, -0.075290f, 0.100140f, 0.013881f, 0.022850f, 0.024072f, -0.023045f, -0.026588f, 0.001029f, -0.010215f, 0.014304f, 0.033016f, -0.046227f, 0.015374f, -0.009691f, 0.012083f, 0.011342f, 0.007887f, 0.026461f, 0.020691f, -0.019665f, 0.018605f, 0.016215f, -0.015978f, -0.027568f, 0.008490f, -0.009731f, -0.022894f, 0.013816f, 0.011314f, -0.001858f, -0.014958f, 0.000508f, -0.010896f, -0.005228f, 0.001091f, 0.006047f, 0.010563f, -0.020591f, -0.003046f, 0.016648f, -0.007367f, 0.014952f, 0.002867f, 0.010814f, 0.021759f, 0.006524f, -0.022181f, 0.002419f, 0.020760f, -0.011679f, -0.001073f, 0.010152f, -0.035279f, -0.002044f, -0.008718f, -0.032794f, 0.045499f, -0.011468f, -0.001897f, 0.027105f, 0.004632f, -0.020195f, 0.008013f, -0.019295f, -0.003920f, 0.015132f, -0.018193f, -0.006464f, 0.033629f, -0.035603f, 0.003811f, 0.003332f, 0.012217f, -0.015752f, 0.010812f, -0.005325f, 0.010075f, -0.013492f, 0.000622f, -0.003164f, 0.033870f, -0.015331f, -0.001542f, 0.008971f, -0.017135f, -0.001510f, 0.023440f, -0.004811f, 0.015103f, -0.010179f, -0.009740f, 0.001899f, + 0.009070f, -0.008786f, 0.017281f, 0.000036f, -0.003816f, -0.003604f, -0.005494f, -0.005281f, 0.014733f, -0.012407f, 0.014420f, 0.008080f, -0.019034f, 0.004754f, -0.001961f, -0.001435f, 0.011162f, -0.015632f, -0.006394f, 0.002511f, -0.010583f, 0.011181f, -0.010886f, -0.001384f, 0.017862f, 0.003433f, -0.003391f, 0.008377f, -0.009033f, -0.006929f, -0.004404f, 0.008932f, 0.014889f, -0.004368f, -0.004342f, 0.001878f, 0.023615f, -0.098983f, -0.201531f, -0.025846f, 0.126686f, 0.097436f, 0.279526f, 0.134552f, -0.065025f, -0.056792f, -0.132363f, -0.231898f, -0.029219f, -0.089830f, -0.027802f, 0.163941f, 0.104546f, 0.111600f, 0.213337f, -0.007346f, -0.047082f, -0.080300f, -0.210752f, -0.116272f, -0.037333f, -0.039054f, 0.005987f, 0.096122f, 0.074463f, 0.079045f, 0.148941f, 0.087212f, -0.054596f, 0.079471f, -0.083239f, -0.194360f, 0.025009f, -0.130399f, -0.181489f, 0.070970f, -0.015473f, -0.033517f, 0.223435f, 0.073292f, 0.059487f, 0.192614f, -0.020537f, -0.037725f, 0.058708f, -0.128853f, -0.160151f, -0.042969f, -0.137115f, -0.122517f, 0.026120f, 0.026726f, 0.055576f, 0.168072f, 0.148854f, 0.090239f, + 0.106800f, 0.020775f, -0.084015f, -0.090468f, -0.112032f, -0.154004f, -0.071860f, -0.038984f, -0.052263f, 0.046731f, 0.148655f, 0.097115f, 0.095895f, 0.078883f, -0.055400f, -0.000462f, 0.015784f, -0.127076f, -0.052335f, -0.031744f, -0.037136f, 0.058493f, 0.029966f, -0.007174f, 0.047815f, -0.010930f, -0.009825f, 0.008299f, -0.034219f, -0.025741f, 0.017046f, -0.021124f, 0.034678f, 0.043631f, -0.016115f, 0.023725f, 0.044421f, -0.025706f, 0.029130f, 0.014666f, -0.086501f, 0.015470f, -0.028021f, -0.093880f, 0.001543f, -0.053553f, -0.047966f, 0.068532f, 0.074108f, 0.071618f, 0.132545f, 0.042375f, 0.042241f, 0.045069f, -0.057886f, -0.115516f, -0.129069f, -0.165182f, -0.123104f, -0.037003f, 0.021628f, 0.100408f, 0.166213f, 0.184244f, 0.143832f, 0.104927f, 0.020740f, -0.097350f, -0.146794f, -0.179153f, -0.166575f, -0.086234f, -0.005495f, 0.047131f, 0.119328f, 0.110254f, 0.060115f, 0.060535f, 0.023434f, -0.001614f, -0.000477f, -0.018604f, -0.036689f, -0.030300f, -0.038134f, -0.045998f, -0.034071f, -0.025247f, -0.007101f, 0.012284f, 0.030008f, 0.036330f, 0.038368f, 0.031591f, 0.017545f, 0.004539f, + -0.003982f, -0.005532f, -0.003378f, -0.001784f}, + {-0.001968f, 0.005007f, 0.008669f, -0.006482f, -0.005609f, -0.008671f, 0.007847f, 0.003909f, 0.000680f, 0.011610f, -0.001166f, -0.000149f, -0.003556f, -0.002877f, 0.002516f, -0.003110f, -0.006057f, 0.003402f, 0.000978f, 0.009696f, 0.013251f, -0.003455f, -0.007804f, -0.009612f, -0.000610f, -0.005498f, -0.005299f, -0.003636f, -0.000743f, -0.007657f, 0.007366f, -0.002745f, -0.002897f, -0.005067f, -0.003738f, 0.001409f, 0.008277f, -0.000867f, -0.002395f, 0.002499f, -0.008141f, 0.006100f, -0.005080f, -0.018250f, 0.009045f, 0.006010f, 0.010048f, 0.010424f, 0.001981f, 0.005487f, -0.005449f, 0.001544f, 0.007898f, 0.000612f, -0.000099f, -0.001906f, -0.001054f, 0.004237f, -0.003858f, -0.002784f, 0.000194f, 0.004028f, -0.003350f, -0.004169f, -0.006107f, 0.007806f, 0.003097f, 0.000961f, -0.001907f, -0.007817f, -0.000274f, 0.005838f, 0.003624f, -0.001117f, -0.001484f, 0.005848f, -0.000715f, -0.000431f, -0.002553f, -0.002411f, -0.003576f, -0.004231f, 0.000260f, 0.000890f, 0.002005f, -0.004354f, -0.001728f, 0.002418f, -0.003019f, 0.002611f, 0.000702f, 0.001169f, -0.001132f, -0.000073f, 0.000563f, 0.001273f, + 0.000316f, -0.000508f, 0.000794f, -0.000556f, -0.001492f, -0.000484f, -0.002467f, 0.001634f, 0.000836f, -0.000705f, 0.000030f, -0.001115f, 0.001463f, 0.001512f, 0.000483f, 0.000150f, 0.000564f, 0.000536f, -0.001537f, 0.000055f, -0.000304f, -0.000374f, -0.000605f, -0.000207f, 0.000853f, -0.027401f, 0.014231f, -0.001389f, 0.000364f, 0.004922f, 0.006953f, -0.010236f, -0.001338f, -0.001874f, 0.005775f, 0.002169f, -0.006279f, 0.019415f, -0.002128f, -0.001251f, 0.008616f, 0.007063f, 0.002282f, 0.004887f, 0.015843f, -0.007908f, 0.000458f, -0.004054f, 0.001550f, -0.004935f, 0.000357f, 0.000451f, 0.001747f, -0.008865f, 0.000720f, -0.002164f, -0.003356f, -0.000424f, 0.005506f, -0.003102f, 0.005117f, 0.007456f, -0.012980f, 0.001698f, -0.005299f, -0.001478f, -0.008006f, 0.003929f, -0.004766f, -0.000859f, -0.002707f, -0.008145f, 0.003059f, -0.005481f, 0.003658f, 0.001983f, -0.004042f, -0.005943f, 0.000154f, 0.005426f, 0.004085f, 0.009900f, 0.004564f, -0.004350f, -0.012251f, -0.000870f, 0.002121f, 0.015356f, -0.004811f, -0.002391f, -0.000204f, -0.003054f, -0.008064f, -0.003882f, -0.007509f, -0.001060f, + 0.006170f, -0.001456f, 0.007352f, 0.004704f, 0.003784f, 0.005309f, 0.000934f, -0.009690f, -0.002284f, -0.006256f, -0.003975f, -0.010756f, -0.000395f, -0.003105f, 0.001411f, 0.002847f, 0.001236f, -0.001649f, -0.002211f, 0.000311f, 0.002796f, -0.002470f, -0.000695f, 0.000010f, -0.000904f, -0.000283f, -0.001020f, 0.001077f, -0.003712f, -0.001322f, -0.000902f, 0.000050f, -0.000391f, -0.000743f, -0.000022f, -0.005242f, 0.019951f, 0.010392f, -0.003260f, -0.008072f, 0.011406f, -0.013379f, -0.002256f, 0.007398f, -0.005545f, -0.004003f, -0.005782f, 0.013165f, -0.004685f, 0.004048f, 0.001067f, 0.003999f, 0.017981f, -0.018133f, 0.005345f, 0.009041f, -0.006080f, -0.016784f, -0.008786f, -0.001173f, 0.001000f, -0.002404f, -0.003082f, 0.006996f, 0.010158f, -0.000868f, -0.007290f, 0.000521f, -0.009224f, 0.002708f, -0.005814f, 0.003215f, 0.010850f, 0.003976f, -0.011015f, -0.000310f, 0.000614f, 0.016310f, 0.002998f, 0.008157f, -0.002406f, 0.003610f, 0.002806f, -0.019753f, 0.000264f, 0.009343f, 0.004279f, 0.010452f, -0.009316f, -0.005698f, -0.009276f, 0.002499f, 0.005866f, -0.001889f, 0.001965f, 0.000510f, + -0.004679f, 0.001758f, -0.003526f, 0.003146f, 0.002922f, -0.000674f, 0.004786f, 0.000999f, -0.000763f, 0.002141f, 0.011696f, 0.002165f, 0.006084f, 0.007655f, 0.004183f, 0.000193f, -0.000225f, -0.011003f, -0.000066f, 0.011749f, 0.004104f, 0.005219f, -0.000266f, -0.000797f, 0.007338f, -0.005500f, 0.000570f, -0.000489f, 0.003710f, 0.002012f, -0.000005f, -0.004768f, 0.000754f, -0.002399f, -0.000748f, 0.000835f, -0.001575f, -0.001107f, 0.001124f, -0.000116f, 0.003766f, 0.001622f, 0.003440f, 0.001697f, 0.001028f, 0.001913f, -0.001437f, -0.001862f, 0.000193f, 0.000251f, 0.004309f, 0.002695f, 0.000612f, 0.001539f, 0.004095f, -0.000657f, 0.000384f, 0.001322f, 0.041207f, -0.010645f, -0.003854f, -0.006256f, 0.008425f, 0.005624f, 0.014018f, 0.005564f, -0.002077f, 0.006718f, -0.000306f, 0.007515f, 0.002899f, 0.010446f, 0.000207f, 0.008767f, 0.011395f, -0.012658f, 0.002254f, 0.003271f, 0.002094f, 0.001993f, 0.002809f, -0.007525f, -0.000039f, -0.008665f, -0.001274f, -0.000313f, -0.014703f, -0.009975f, 0.003653f, -0.000062f, -0.000540f, 0.005847f, 0.005705f, -0.002985f, -0.012683f, 0.003799f, + 0.011383f, 0.007519f, 0.010614f, -0.002862f, 0.005723f, 0.010566f, -0.017620f, 0.005586f, 0.007705f, -0.008685f, 0.010850f, -0.007571f, -0.001626f, 0.001084f, 0.002110f, -0.005846f, 0.005113f, -0.001534f, -0.002020f, -0.006082f, -0.005013f, 0.006109f, 0.006089f, 0.002773f, 0.005994f, 0.009393f, 0.005104f, 0.013055f, -0.002784f, -0.014670f, 0.014170f, 0.002333f, 0.006934f, 0.002966f, -0.002461f, 0.003724f, 0.002669f, 0.000634f, 0.009711f, -0.002966f, 0.009581f, -0.013788f, -0.003215f, 0.001806f, 0.004241f, 0.000957f, -0.007590f, -0.003464f, 0.001213f, 0.000454f, -0.000841f, 0.000486f, 0.002873f, -0.003682f, -0.002157f, -0.002068f, -0.002741f, 0.001603f, -0.000862f, -0.000998f, -0.002244f, -0.001571f, 0.004141f, -0.000975f, -0.001436f, -0.000027f, -0.001527f, -0.001187f, 0.002074f, -0.000813f, 0.002218f, -0.000449f, 0.000128f, 0.001805f, -0.000567f, 0.018238f, -0.020985f, 0.013913f, 0.002921f, 0.014248f, 0.003283f, -0.008067f, 0.002615f, 0.010972f, -0.013162f, -0.002806f, 0.001482f, -0.014840f, -0.002952f, -0.011412f, -0.006992f, -0.008322f, -0.009123f, 0.003838f, -0.014172f, -0.008814f, + -0.011296f, -0.002902f, 0.010868f, 0.003901f, -0.013585f, -0.005311f, -0.014207f, -0.003536f, 0.003075f, 0.020339f, -0.016425f, 0.006697f, -0.004195f, -0.006046f, -0.012246f, 0.000539f, 0.002066f, 0.013024f, 0.006845f, 0.001608f, -0.011105f, -0.019285f, -0.000301f, 0.005604f, 0.015100f, 0.005231f, 0.004832f, -0.011220f, 0.004059f, 0.009431f, 0.000717f, 0.001430f, -0.005998f, -0.005976f, -0.002016f, 0.005468f, 0.000974f, -0.003889f, 0.000104f, -0.012340f, -0.001770f, -0.010408f, 0.006521f, -0.002225f, 0.006520f, -0.010199f, -0.008601f, -0.014024f, -0.001628f, -0.009039f, -0.003876f, 0.003526f, -0.013569f, -0.005908f, 0.001560f, 0.007421f, -0.016298f, 0.009454f, -0.007672f, -0.008283f, -0.008663f, -0.007290f, 0.004893f, -0.004917f, 0.002266f, 0.002757f, -0.004325f, 0.000565f, 0.003389f, 0.002577f, 0.000173f, -0.003925f, -0.000581f, -0.001917f, -0.004374f, -0.000828f, 0.003233f, 0.001862f, -0.002165f, 0.002902f, -0.002536f, -0.001984f, -0.000482f, 0.000951f, -0.003258f, 0.000169f, -0.000398f, 0.002153f, 0.001736f, 0.003590f, -0.002939f, 0.000808f, -0.000665f, -0.001311f, 0.001137f, -0.003444f, + -0.001189f, 0.001666f, 0.000926f, -0.050936f, 0.008201f, 0.005806f, -0.014711f, -0.003280f, -0.000072f, 0.000504f, -0.002826f, -0.004892f, -0.003775f, -0.015141f, 0.011638f, -0.007337f, 0.001595f, -0.012611f, -0.004496f, 0.018234f, 0.016511f, -0.010485f, -0.006344f, 0.000524f, -0.000311f, -0.008606f, -0.010053f, -0.007116f, 0.001172f, 0.000779f, 0.000281f, -0.001037f, 0.004230f, -0.012429f, 0.003856f, 0.000425f, -0.021951f, -0.002634f, -0.006589f, 0.010024f, 0.014617f, 0.002288f, -0.002609f, 0.000701f, -0.012881f, -0.016091f, 0.008595f, 0.015921f, 0.017693f, -0.004780f, 0.003198f, 0.010344f, 0.010635f, -0.005525f, 0.009808f, 0.016045f, -0.000710f, 0.013508f, 0.011408f, -0.013452f, 0.004367f, 0.000784f, 0.014433f, -0.008868f, -0.009500f, 0.008348f, 0.010929f, -0.003367f, 0.000939f, -0.015849f, 0.011119f, -0.008862f, 0.011739f, -0.019711f, 0.002097f, 0.004702f, 0.009367f, 0.000657f, -0.008302f, -0.016810f, -0.010365f, 0.014166f, -0.014027f, -0.000641f, 0.001537f, 0.007652f, -0.004277f, -0.002969f, 0.005908f, -0.011227f, -0.009844f, 0.004038f, 0.002631f, -0.000798f, 0.007996f, -0.003708f, + 0.001861f, 0.002101f, 0.002104f, 0.003070f, 0.000607f, -0.003108f, 0.001904f, 0.004179f, -0.001774f, 0.000607f, -0.000892f, -0.002060f, 0.001640f, -0.005173f, -0.000790f, -0.005579f, -0.001129f, -0.001025f, -0.001888f, -0.002844f, 0.001111f, -0.001627f, -0.000133f, -0.004325f, 0.001690f, -0.000751f, 0.001462f, 0.001818f, 0.000610f, 0.000778f, -0.019740f, 0.006992f, -0.017445f, 0.022066f, 0.021221f, 0.000647f, -0.028756f, 0.011902f, 0.001627f, -0.005367f, 0.019838f, 0.000081f, -0.017136f, -0.001826f, 0.021567f, -0.027061f, 0.000853f, -0.006773f, -0.021357f, -0.005943f, 0.000387f, -0.004208f, -0.010939f, 0.006294f, -0.009062f, 0.007363f, -0.007719f, -0.014472f, 0.007712f, -0.001086f, 0.011081f, -0.021547f, 0.008791f, 0.016949f, -0.006817f, 0.001390f, 0.017043f, 0.024919f, -0.006629f, -0.005094f, -0.021003f, 0.001224f, -0.017327f, -0.001419f, -0.012062f, 0.000595f, 0.001690f, 0.010065f, 0.004826f, 0.009198f, -0.006641f, 0.001688f, 0.005704f, -0.001097f, 0.023003f, -0.015273f, -0.007541f, 0.030260f, 0.030398f, -0.006004f, -0.001917f, -0.019081f, -0.009751f, 0.000967f, -0.005293f, -0.012630f, + 0.018362f, 0.005657f, -0.004782f, 0.026938f, 0.005223f, -0.012931f, -0.000356f, -0.024744f, -0.012408f, -0.014029f, -0.012021f, -0.003290f, -0.019315f, -0.013945f, 0.007961f, 0.007356f, -0.001419f, 0.004339f, -0.005731f, 0.006466f, -0.004304f, -0.006324f, 0.001094f, -0.009103f, -0.004158f, 0.011685f, 0.000936f, 0.005822f, -0.003123f, 0.001194f, 0.000897f, 0.002740f, 0.002535f, -0.000513f, -0.000232f, -0.005787f, -0.000066f, 0.001233f, 0.000936f, -0.001632f, -0.001640f, 0.003904f, 0.001164f, -0.000838f, 0.000139f, -0.000998f, 0.000132f, 0.002163f, 0.024508f, -0.006438f, -0.000211f, 0.016901f, -0.003957f, 0.010021f, -0.005391f, -0.021289f, -0.001317f, 0.000101f, -0.004322f, -0.012581f, -0.014056f, 0.007434f, -0.011121f, 0.019857f, -0.006013f, -0.014267f, 0.012305f, 0.024904f, -0.006103f, 0.007041f, -0.006610f, 0.014425f, 0.000380f, -0.030085f, 0.010808f, 0.016843f, 0.001735f, -0.004939f, -0.017481f, 0.014797f, 0.009908f, 0.009560f, 0.001993f, 0.006059f, 0.019753f, -0.013813f, 0.002521f, 0.003940f, -0.010893f, -0.021123f, 0.020267f, 0.011325f, 0.037665f, -0.001831f, 0.016651f, -0.005442f, + -0.011753f, 0.002092f, -0.001786f, -0.000451f, -0.003302f, -0.012169f, 0.027064f, 0.000707f, 0.002171f, 0.003904f, -0.003705f, 0.022297f, 0.002885f, 0.018681f, 0.007830f, 0.003208f, 0.019951f, -0.009306f, -0.022229f, -0.004328f, 0.004185f, 0.002956f, -0.009156f, 0.010967f, -0.006536f, -0.031126f, 0.002889f, 0.006267f, -0.017167f, 0.008098f, -0.001722f, 0.003433f, 0.000109f, -0.007019f, -0.007764f, 0.000029f, 0.003022f, 0.009582f, -0.000791f, 0.002730f, -0.003606f, -0.002671f, 0.004373f, 0.002881f, -0.000471f, 0.002967f, -0.003105f, -0.000308f, 0.000290f, -0.004223f, -0.006088f, 0.003893f, -0.006785f, -0.001726f, -0.002919f, -0.005947f, -0.001593f, -0.000753f, -0.002152f, 0.002657f, -0.000949f, -0.002480f, -0.000672f, 0.011512f, 0.004574f, 0.004417f, -0.002240f, 0.001680f, -0.003513f, -0.004625f, -0.001454f, -0.001571f, 0.002072f, -0.003050f, 0.005629f, -0.007159f, -0.002188f, 0.001575f, 0.019801f, -0.032829f, 0.005390f, 0.014705f, 0.021889f, -0.022992f, -0.003313f, 0.015588f, 0.010864f, 0.013303f, 0.002350f, 0.028079f, 0.005206f, 0.011643f, -0.003491f, 0.001662f, 0.011586f, 0.006354f, + 0.013375f, 0.001061f, -0.018569f, -0.027093f, 0.014369f, 0.006955f, -0.005158f, 0.003187f, 0.008081f, -0.025349f, 0.000237f, -0.015996f, 0.007484f, -0.000870f, 0.016615f, -0.005325f, 0.007421f, -0.003837f, 0.004303f, 0.002275f, -0.000707f, 0.009357f, 0.012487f, 0.004477f, 0.007230f, -0.019859f, 0.008217f, -0.003497f, -0.034638f, -0.023008f, 0.005895f, -0.025289f, -0.001746f, 0.020908f, -0.015258f, 0.041530f, 0.015006f, -0.008360f, 0.022530f, 0.001061f, -0.007387f, -0.016755f, -0.016608f, -0.023055f, -0.003593f, 0.013484f, -0.016507f, -0.002045f, 0.014954f, 0.006837f, 0.008441f, 0.030433f, 0.003747f, 0.019899f, 0.000141f, 0.003910f, -0.032673f, 0.009052f, 0.002448f, -0.029725f, -0.028156f, 0.016245f, -0.010747f, 0.001895f, 0.008537f, -0.004844f, -0.007666f, 0.001723f, -0.001714f, -0.002031f, 0.001706f, -0.005314f, 0.004772f, -0.003820f, 0.001055f, -0.009382f, 0.005088f, 0.001582f, 0.002064f, -0.000503f, 0.011576f, -0.009382f, 0.000800f, -0.002625f, -0.002346f, 0.002347f, 0.002362f, 0.003244f, 0.005568f, 0.009312f, 0.005743f, -0.005977f, 0.001445f, -0.000749f, 0.008470f, -0.002785f, + 0.005463f, -0.008676f, -0.006604f, -0.004997f, -0.004215f, -0.000569f, -0.000477f, 0.004319f, 0.005036f, -0.017031f, -0.000415f, 0.010862f, -0.000048f, 0.007652f, -0.017447f, 0.013734f, -0.000973f, 0.004063f, 0.012812f, -0.023592f, -0.016180f, 0.004393f, -0.000215f, 0.013087f, 0.026916f, -0.002400f, 0.006794f, 0.028883f, -0.010587f, -0.019428f, -0.001013f, 0.021183f, -0.004462f, -0.024211f, 0.002060f, 0.009059f, -0.004666f, -0.007516f, -0.001677f, 0.031313f, -0.005837f, 0.026966f, 0.020415f, 0.024611f, 0.001462f, 0.002090f, 0.014437f, 0.004897f, -0.004865f, 0.005141f, -0.019307f, 0.014726f, 0.024671f, 0.015503f, 0.002219f, 0.013794f, -0.010665f, 0.010613f, -0.010373f, 0.015480f, -0.013773f, 0.000351f, -0.000999f, -0.000998f, 0.043798f, -0.006457f, -0.002335f, -0.003725f, 0.006179f, 0.012126f, 0.023112f, 0.026344f, -0.014247f, 0.006371f, 0.026252f, -0.014586f, -0.018098f, 0.011025f, -0.007820f, 0.011363f, 0.050014f, -0.023512f, 0.003484f, 0.004738f, -0.012890f, 0.005694f, 0.016399f, 0.011487f, 0.001461f, -0.010161f, -0.024478f, 0.011710f, -0.010616f, 0.013535f, -0.009134f, 0.001951f, + -0.012067f, -0.002616f, -0.020255f, 0.001792f, -0.006360f, -0.007149f, -0.002431f, 0.002519f, 0.005244f, 0.010144f, 0.004374f, -0.005746f, -0.001349f, 0.010336f, -0.005978f, -0.005296f, 0.000824f, 0.000766f, -0.009175f, -0.000086f, -0.004583f, -0.002268f, -0.001655f, -0.001634f, 0.003651f, 0.002255f, 0.007383f, -0.004640f, -0.004591f, 0.000584f, -0.005518f, 0.002647f, 0.011540f, -0.005715f, -0.006036f, -0.011379f, 0.005916f, -0.002867f, -0.002888f, -0.016913f, -0.026667f, -0.020528f, -0.027750f, -0.010688f, 0.003119f, 0.022223f, 0.016463f, 0.005966f, 0.023402f, 0.007039f, 0.014296f, 0.013161f, -0.006345f, 0.020298f, 0.021998f, 0.015538f, -0.029689f, -0.016637f, -0.017194f, 0.006481f, -0.011857f, 0.000829f, 0.008458f, -0.008624f, -0.020949f, 0.013560f, -0.009931f, 0.004817f, 0.004511f, 0.021383f, -0.022285f, 0.034666f, -0.034228f, 0.035414f, -0.000072f, 0.017771f, -0.017173f, 0.006259f, -0.038260f, -0.021304f, -0.018612f, 0.016878f, 0.007778f, 0.024467f, -0.002424f, -0.000079f, -0.012406f, -0.030670f, 0.020040f, -0.016744f, -0.008698f, 0.014606f, 0.034809f, 0.033684f, 0.015803f, -0.002232f, + -0.022773f, 0.013419f, -0.034979f, -0.002706f, -0.019857f, 0.011293f, 0.037772f, -0.036218f, 0.013230f, 0.016846f, -0.022519f, -0.002209f, -0.003831f, 0.012664f, -0.014925f, -0.021488f, 0.004298f, -0.008674f, -0.031590f, 0.016075f, -0.003110f, -0.029657f, 0.022062f, 0.029193f, -0.009601f, 0.001016f, 0.004135f, -0.012516f, 0.018956f, 0.008817f, -0.005345f, -0.004671f, -0.012415f, -0.007057f, 0.015210f, 0.008748f, 0.008686f, -0.000611f, -0.013680f, -0.004076f, -0.004633f, -0.015162f, -0.003224f, 0.004629f, -0.000898f, -0.004398f, -0.001366f, -0.010787f, 0.001440f, -0.003625f, 0.007403f, 0.004175f, 0.001559f, -0.012502f, 0.010398f, 0.001039f, -0.005415f, -0.003099f, -0.002047f, -0.000547f, 0.006177f, -0.004551f, -0.001911f, 0.004806f, 0.012785f, 0.006507f, 0.003792f, -0.007628f, 0.010205f, -0.025492f, -0.029765f, -0.008416f, 0.019161f, -0.022793f, 0.015050f, -0.031306f, -0.005606f, -0.012046f, -0.011044f, -0.024820f, -0.002233f, -0.009267f, -0.014928f, 0.011934f, -0.016631f, 0.017884f, 0.003762f, 0.013970f, -0.021971f, -0.041064f, -0.003430f, 0.008473f, -0.017213f, -0.012587f, 0.006699f, 0.005362f, + -0.020130f, -0.009538f, 0.028594f, 0.013900f, -0.003788f, 0.015663f, 0.041072f, 0.001472f, 0.005193f, 0.004223f, -0.003139f, -0.000661f, 0.006039f, 0.005518f, -0.031595f, -0.011466f, -0.038603f, -0.012180f, -0.036003f, -0.016947f, 0.001940f, 0.042062f, 0.019604f, -0.020790f, -0.024457f, 0.015694f, 0.033184f, 0.021012f, -0.014879f, 0.025472f, -0.009714f, -0.001901f, -0.044602f, -0.013241f, -0.005769f, -0.005484f, -0.030514f, -0.048839f, 0.015638f, -0.000100f, -0.035768f, 0.009120f, 0.055895f, 0.007305f, 0.006305f, -0.035311f, -0.003206f, -0.000501f, 0.007799f, -0.039651f, 0.036598f, 0.005797f, 0.010092f, 0.020262f, 0.007798f, 0.021979f, -0.001708f, 0.010324f, -0.008649f, -0.017165f, -0.014330f, 0.007563f, -0.011552f, -0.003643f, -0.015426f, 0.005172f, 0.012547f, 0.000242f, 0.010563f, 0.001191f, -0.004289f, -0.000185f, -0.008883f, 0.006149f, 0.006312f, 0.001135f, 0.001125f, -0.006028f, -0.002500f, 0.003367f, 0.009172f, 0.006690f, -0.008141f, -0.002880f, -0.003382f, -0.018545f, -0.025761f, -0.018935f, -0.006247f, -0.002381f, 0.002946f, -0.004426f, -0.007330f, -0.007894f, -0.000056f, -0.005292f, + -0.006903f, -0.011525f, -0.006305f, 0.018571f, -0.011544f, 0.022561f, -0.034277f, -0.007068f, 0.008061f, -0.016542f, 0.039278f, -0.032595f, -0.033554f, -0.027305f, 0.037981f, 0.016913f, -0.022176f, -0.020005f, -0.013383f, -0.004258f, -0.012072f, -0.012419f, 0.001764f, 0.014109f, 0.037515f, -0.004279f, 0.015917f, 0.013848f, 0.013449f, -0.025239f, -0.031479f, -0.022649f, 0.026184f, -0.004678f, 0.031840f, 0.010497f, -0.003668f, -0.043836f, -0.035781f, -0.003804f, 0.002764f, -0.025471f, -0.016003f, -0.012025f, -0.012314f, -0.057459f, -0.012610f, -0.014116f, -0.020818f, -0.010229f, -0.013671f, -0.026425f, 0.018352f, 0.035684f, 0.019737f, 0.000894f, 0.020977f, 0.026781f, -0.009733f, 0.008432f, 0.006681f, 0.002576f, -0.001272f, -0.006921f, 0.018694f, 0.007523f, 0.031455f, -0.007418f, 0.002964f, 0.011208f, 0.062096f, -0.000796f, 0.032934f, 0.041808f, -0.003810f, -0.036554f, 0.002985f, 0.036312f, 0.005182f, -0.031130f, -0.028019f, -0.035674f, 0.023083f, -0.029146f, -0.008059f, 0.041666f, -0.018098f, -0.027966f, 0.008465f, -0.007680f, 0.000644f, 0.011372f, -0.017674f, -0.007873f, 0.003306f, -0.005243f, + -0.008113f, -0.001587f, 0.003024f, 0.020827f, -0.002129f, -0.010817f, -0.009490f, -0.000090f, -0.008194f, -0.006573f, -0.006025f, -0.010495f, -0.005164f, 0.003962f, -0.005195f, -0.000994f, -0.014464f, 0.003679f, -0.001548f, 0.002892f, 0.014083f, 0.008942f, -0.008613f, 0.003906f, 0.002910f, -0.012580f, -0.019383f, 0.007182f, 0.007475f, 0.001108f, -0.019811f, -0.021187f, -0.003552f, -0.014799f, -0.005034f, -0.002164f, 0.035141f, 0.025599f, -0.058967f, 0.018701f, 0.023521f, -0.010339f, 0.017083f, 0.056028f, 0.004607f, 0.012470f, -0.019573f, 0.012985f, -0.020685f, -0.013219f, -0.011021f, 0.004114f, 0.014418f, 0.020156f, -0.002890f, 0.008308f, -0.006098f, -0.003434f, -0.010816f, 0.014834f, 0.052890f, -0.017276f, -0.017049f, 0.018962f, 0.013376f, 0.001910f, -0.038462f, 0.024931f, -0.030663f, 0.017592f, 0.022078f, 0.002451f, 0.005613f, -0.006355f, 0.036391f, 0.027535f, 0.000331f, 0.018520f, -0.014549f, 0.023354f, 0.003925f, 0.026373f, 0.038546f, -0.000867f, 0.009790f, -0.005039f, -0.014186f, -0.000994f, 0.016814f, 0.018925f, -0.036789f, -0.022378f, 0.008650f, 0.039972f, -0.019355f, 0.026526f, + 0.017803f, 0.005141f, -0.042865f, 0.005193f, 0.006704f, -0.051173f, 0.030179f, -0.028651f, -0.034019f, -0.064768f, 0.015792f, 0.039268f, -0.017763f, -0.036150f, 0.007523f, 0.043522f, 0.027807f, 0.004830f, -0.005648f, 0.000594f, 0.015391f, -0.013338f, 0.020527f, 0.033423f, 0.031902f, -0.002375f, 0.013540f, 0.033067f, -0.005180f, -0.000461f, -0.003636f, 0.028469f, -0.004179f, 0.006986f, -0.013310f, 0.007223f, -0.008186f, 0.001085f, 0.000410f, -0.002253f, -0.006445f, 0.006222f, 0.016791f, 0.005641f, 0.004778f, -0.015177f, 0.003864f, -0.015669f, 0.004758f, 0.024637f, -0.008973f, 0.000365f, 0.003254f, -0.011715f, -0.015247f, -0.017569f, -0.003983f, 0.011120f, -0.005157f, 0.002971f, -0.010619f, -0.001100f, 0.000406f, -0.032508f, -0.008339f, -0.001395f, 0.006836f, 0.008274f, -0.006750f, 0.011515f, 0.006105f, 0.006145f, -0.009638f, -0.009451f, 0.014425f, 0.040629f, 0.029453f, -0.010185f, -0.079400f, 0.009323f, 0.039729f, 0.018958f, 0.008629f, -0.034832f, -0.000220f, -0.024053f, 0.005581f, -0.002333f, 0.006573f, 0.011940f, 0.016635f, 0.007087f, -0.043174f, 0.024983f, -0.006020f, 0.007553f, + 0.032766f, 0.012605f, 0.006115f, -0.011759f, 0.040645f, -0.001462f, 0.040398f, -0.049129f, -0.014458f, 0.015632f, -0.028637f, -0.024759f, 0.001709f, -0.006498f, -0.022422f, 0.002582f, 0.035689f, -0.001235f, 0.002344f, -0.018821f, -0.039069f, -0.024940f, -0.011185f, 0.016119f, -0.004331f, 0.003703f, -0.019235f, -0.020950f, -0.010279f, 0.030984f, -0.021401f, 0.017812f, 0.011981f, 0.009990f, 0.003420f, -0.032211f, -0.045858f, -0.003812f, 0.030616f, -0.038145f, 0.018337f, -0.032857f, 0.020475f, -0.034562f, -0.001791f, -0.034079f, 0.048146f, -0.044083f, -0.026327f, 0.011275f, 0.007866f, 0.021986f, 0.018330f, -0.011499f, -0.006125f, -0.011571f, 0.005935f, -0.000580f, 0.028680f, -0.035786f, -0.014185f, -0.045956f, 0.023651f, -0.016403f, 0.001739f, -0.002027f, 0.012460f, -0.010261f, 0.004634f, -0.018875f, -0.028594f, 0.018226f, -0.014809f, 0.000351f, 0.004651f, 0.024246f, 0.009665f, -0.017612f, 0.003674f, -0.006040f, -0.022597f, -0.004283f, 0.005211f, 0.006987f, -0.020441f, -0.010058f, 0.022405f, -0.002404f, -0.019012f, -0.008421f, 0.026303f, -0.031083f, -0.010598f, 0.006213f, -0.007286f, 0.010926f, + -0.002413f, -0.013727f, -0.018427f, -0.005982f, -0.008309f, -0.005811f, -0.006124f, 0.004914f, -0.001527f, 0.011387f, -0.012236f, 0.006267f, 0.002115f, -0.005621f, 0.012284f, -0.067760f, -0.009627f, 0.020234f, 0.004933f, -0.016182f, -0.024198f, 0.002190f, -0.023003f, -0.002192f, -0.035508f, 0.033172f, -0.013307f, 0.020740f, -0.046162f, -0.026237f, -0.000977f, 0.056485f, -0.046309f, -0.004090f, -0.036254f, -0.028900f, -0.008834f, 0.035353f, -0.008267f, 0.015643f, 0.016550f, -0.018902f, -0.040214f, 0.056523f, 0.024616f, -0.032496f, 0.006244f, 0.004058f, 0.015587f, -0.031629f, 0.028231f, -0.002614f, -0.059242f, 0.006146f, 0.011817f, 0.015152f, -0.049091f, -0.011868f, 0.006153f, 0.043092f, 0.008193f, 0.023952f, -0.063318f, -0.038602f, 0.019386f, -0.000130f, 0.041276f, -0.011201f, -0.007000f, 0.003029f, 0.020971f, 0.019097f, 0.007319f, -0.080608f, 0.022650f, -0.009509f, 0.018397f, 0.042749f, -0.013586f, -0.003959f, -0.049032f, 0.015760f, 0.022149f, -0.025923f, -0.015322f, 0.044235f, 0.070073f, 0.018181f, 0.011412f, -0.020003f, -0.008237f, -0.038439f, 0.002913f, 0.000310f, -0.047272f, 0.017070f, + -0.001429f, -0.014005f, -0.003611f, 0.022072f, -0.018107f, -0.012373f, -0.002112f, -0.005239f, -0.001705f, 0.019462f, -0.008473f, 0.000213f, 0.011313f, 0.004321f, 0.015564f, 0.012919f, 0.009973f, 0.006839f, 0.018635f, 0.021612f, -0.029166f, 0.009082f, -0.018201f, 0.014238f, 0.002178f, -0.018669f, -0.012509f, -0.007392f, -0.006098f, -0.012322f, 0.011227f, -0.006388f, -0.011950f, 0.019859f, -0.003145f, -0.006584f, 0.011475f, 0.020452f, -0.000036f, -0.007655f, 0.005748f, 0.019061f, 0.020998f, 0.012950f, -0.006808f, 0.003283f, 0.003947f, 0.017115f, -0.058140f, -0.038043f, -0.013123f, -0.000639f, -0.033130f, 0.026245f, -0.068697f, 0.003301f, -0.042183f, 0.021832f, -0.015656f, -0.046898f, -0.004172f, -0.012670f, -0.016532f, -0.053416f, -0.038974f, 0.011098f, 0.042053f, -0.028307f, 0.051918f, -0.044324f, -0.029133f, 0.009426f, -0.004359f, 0.023516f, -0.014752f, -0.015515f, -0.021516f, -0.006084f, -0.072960f, -0.021073f, 0.002069f, -0.003261f, -0.012198f, -0.028802f, 0.022855f, -0.025501f, 0.038903f, -0.012174f, -0.004900f, -0.027725f, -0.025474f, -0.048417f, -0.021069f, 0.017724f, 0.007313f, -0.003027f, + 0.003147f, -0.017485f, -0.013142f, -0.022511f, -0.018816f, 0.009725f, 0.014321f, 0.006615f, -0.041980f, 0.047859f, 0.006471f, -0.020981f, 0.038373f, 0.027296f, 0.045740f, -0.008879f, 0.026671f, -0.062920f, -0.033959f, -0.059469f, 0.060258f, -0.019682f, -0.042116f, -0.040709f, -0.085956f, -0.036185f, 0.059407f, -0.004166f, -0.030200f, 0.021480f, -0.058672f, -0.039482f, 0.014671f, -0.003740f, -0.048967f, -0.048081f, -0.000621f, -0.027771f, 0.007295f, 0.009902f, -0.036431f, 0.035141f, -0.021704f, -0.032132f, 0.002720f, -0.019195f, 0.050629f, -0.019878f, 0.022729f, 0.003279f, 0.030764f, -0.016043f, -0.009051f, 0.002602f, -0.014085f, -0.000887f, -0.029582f, -0.022743f, -0.005742f, 0.011932f, 0.000551f, 0.020099f, 0.008223f, 0.014808f, -0.013309f, -0.000476f, -0.025749f, -0.006705f, -0.009315f, 0.007285f, 0.024497f, 0.010915f, 0.009807f, 0.011283f, 0.010115f, 0.002301f, -0.033542f, -0.010366f, -0.023173f, -0.006183f, 0.003828f, 0.015356f, 0.074997f, 0.096029f, -0.009142f, -0.042692f, -0.010174f, -0.016154f, -0.043134f, 0.018540f, 0.001182f, -0.031265f, 0.091786f, 0.031829f, -0.021764f, -0.063677f, + -0.005719f, 0.015326f, 0.016734f, 0.018624f, 0.043900f, -0.012659f, -0.021727f, 0.020604f, -0.079678f, -0.053258f, -0.020825f, -0.005740f, 0.008531f, -0.042564f, -0.038876f, 0.040949f, 0.032567f, -0.025083f, -0.048237f, 0.030576f, 0.000879f, 0.053958f, -0.043967f, -0.010117f, -0.015011f, -0.002760f, -0.034765f, -0.051782f, 0.043453f, -0.032119f, -0.020308f, -0.039577f, -0.008884f, 0.026110f, 0.024514f, -0.015965f, 0.003417f, 0.004585f, 0.032768f, 0.050232f, 0.036956f, -0.064392f, -0.030984f, -0.038202f, -0.009609f, 0.021967f, 0.007985f, -0.044013f, -0.063334f, 0.053654f, 0.003344f, -0.052568f, -0.087325f, 0.044019f, -0.011430f, 0.023695f, 0.021806f, 0.023172f, 0.003007f, 0.017115f, -0.034383f, -0.012968f, 0.023453f, 0.004324f, -0.016154f, 0.009783f, -0.004192f, -0.046219f, 0.023229f, -0.058688f, -0.003957f, -0.002806f, -0.010355f, -0.021022f, -0.008339f, 0.025929f, -0.001906f, -0.005809f, 0.013110f, -0.018886f, 0.057066f, -0.004397f, 0.004955f, -0.004118f, 0.000386f, 0.014406f, -0.001077f, 0.013893f, -0.029399f, 0.006481f, -0.005559f, -0.020216f, 0.001875f, 0.009919f, 0.018841f, -0.009439f, + 0.005098f, -0.048562f, -0.016187f, -0.002485f, -0.025781f, 0.021921f, -0.003183f, -0.005679f, -0.013997f, -0.019868f, -0.029902f, -0.041346f, 0.012300f, -0.003937f, 0.030155f, 0.036381f, 0.022701f, -0.024365f, -0.034552f, -0.043163f, -0.016619f, 0.040152f, 0.032212f, 0.005862f, 0.014860f, -0.013667f, -0.025413f, -0.018777f, -0.018308f, 0.008454f, 0.033605f, 0.041641f, -0.051874f, -0.043547f, 0.123343f, -0.010061f, -0.012173f, -0.018636f, -0.039061f, -0.004365f, 0.044446f, 0.071445f, -0.033048f, -0.020036f, -0.007347f, -0.032694f, -0.008187f, -0.018496f, 0.028370f, -0.029568f, 0.032489f, 0.015381f, -0.011248f, -0.041195f, -0.003076f, -0.017063f, 0.061546f, -0.034008f, -0.000886f, -0.000064f, -0.006195f, 0.027699f, -0.017802f, -0.002505f, 0.012766f, -0.008619f, -0.060205f, 0.030502f, -0.027489f, -0.031977f, -0.007354f, -0.034098f, -0.019727f, -0.061796f, 0.058904f, 0.002507f, -0.039293f, -0.072383f, 0.041996f, -0.042785f, -0.041601f, 0.000351f, -0.032408f, 0.014393f, 0.026628f, 0.081877f, -0.023371f, 0.031924f, -0.006941f, -0.039924f, -0.033760f, -0.010084f, 0.123480f, -0.109174f, -0.007999f, 0.113183f, + -0.103807f, -0.039616f, 0.058427f, -0.008876f, -0.046923f, 0.109434f, -0.054325f, -0.022818f, 0.050330f, 0.012226f, 0.021464f, -0.032782f, 0.036337f, 0.050879f, 0.023943f, -0.013359f, -0.003395f, 0.051376f, -0.007557f, 0.029266f, -0.000730f, 0.020332f, -0.029607f, -0.004159f, 0.013599f, 0.008001f, 0.005677f, 0.001052f, 0.002082f, 0.021168f, -0.009891f, 0.005217f, 0.007951f, 0.006928f, -0.046439f, -0.019467f, 0.014861f, -0.039686f, 0.011828f, 0.022072f, -0.016629f, -0.017912f, -0.013541f, 0.009012f, -0.019036f, 0.022101f, 0.019084f, -0.002902f, 0.011060f, -0.014409f, -0.027974f, -0.027705f, 0.054233f, 0.009323f, 0.033837f, 0.006498f, 0.006700f, 0.020974f, -0.018473f, -0.004856f, 0.034412f, -0.020945f, -0.046890f, 0.034655f, -0.004700f, 0.058698f, -0.073935f, 0.067139f, -0.010990f, -0.041061f, 0.036285f, 0.013011f, -0.006260f, 0.007930f, 0.005280f, -0.007612f, 0.013489f, -0.013947f, -0.018195f, -0.008059f, -0.025361f, -0.021060f, -0.047987f, -0.018118f, 0.042036f, 0.039655f, -0.059761f, 0.020535f, 0.032345f, 0.027168f, -0.009937f, -0.059001f, -0.004970f, -0.029001f, -0.069151f, 0.044281f, + 0.111813f, -0.063539f, -0.006525f, 0.079576f, -0.022081f, -0.027821f, 0.064697f, 0.048152f, 0.023958f, -0.025525f, -0.051405f, 0.017702f, -0.020705f, -0.032324f, 0.116919f, 0.086168f, -0.069891f, -0.051336f, 0.063333f, -0.114351f, -0.039983f, -0.032078f, -0.019403f, 0.080678f, 0.053760f, 0.035529f, 0.038939f, -0.134416f, -0.046651f, 0.128944f, 0.074858f, 0.015681f, -0.033891f, 0.044722f, -0.044843f, -0.091174f, -0.060673f, 0.045151f, -0.033020f, -0.006731f, 0.052303f, 0.096569f, -0.011168f, -0.053673f, 0.007363f, 0.038471f, -0.065113f, -0.023795f, 0.068665f, 0.061886f, 0.061942f, 0.043215f, -0.011848f, -0.038496f, -0.018934f, 0.052686f, 0.015499f, 0.022467f, -0.009611f, 0.006400f, 0.024186f, 0.002634f, -0.009039f, -0.010561f, -0.014488f, 0.012173f, 0.008842f, 0.050599f, 0.014465f, -0.009319f, -0.019508f, 0.005525f, 0.002937f, -0.006756f, -0.017071f, 0.005577f, 0.039159f, -0.040524f, -0.011878f, 0.037846f, -0.008057f, -0.000324f, 0.025175f, -0.008807f, 0.018747f, 0.008399f, 0.021943f, -0.040917f, -0.005504f, 0.009446f, 0.047854f, 0.012179f, 0.023202f, 0.020517f, 0.011421f, -0.008352f, + 0.016130f, 0.023197f, -0.024819f, 0.013287f, -0.114122f, 0.049469f, 0.000618f, -0.011637f, 0.058560f, -0.009886f, -0.044116f, 0.022278f, 0.020297f, 0.057278f, 0.032466f, -0.030866f, 0.001711f, 0.008921f, 0.039242f, 0.009168f, -0.045075f, -0.001656f, -0.002541f, 0.009289f, -0.041931f, -0.045684f, 0.066365f, -0.023811f, -0.069328f, 0.035776f, 0.061600f, -0.034542f, -0.011759f, 0.004144f, 0.042233f, -0.050259f, -0.066118f, 0.018259f, 0.055875f, -0.012000f, -0.023798f, -0.013697f, -0.013604f, 0.024415f, 0.010365f, 0.014635f, 0.140798f, 0.007896f, -0.017989f, 0.002041f, 0.004424f, 0.076164f, 0.002406f, -0.026904f, 0.017129f, -0.059316f, -0.034918f, 0.015545f, 0.000295f, 0.065484f, 0.051874f, -0.033445f, -0.009841f, -0.031609f, 0.001497f, 0.023573f, 0.005934f, 0.007414f, 0.023428f, -0.016687f, -0.069232f, 0.017770f, 0.046704f, -0.021937f, 0.041213f, -0.063934f, 0.030153f, 0.019483f, -0.056195f, 0.009775f, 0.001095f, -0.024344f, 0.002551f, -0.010320f, 0.027914f, 0.027417f, -0.047091f, -0.028862f, 0.062789f, -0.047774f, 0.023080f, -0.004321f, -0.018443f, 0.013954f, -0.001889f, -0.028035f, + 0.016046f, 0.009912f, 0.011482f, -0.000705f, -0.004807f, 0.003305f, 0.008691f, -0.010566f, -0.010215f, 0.008727f, 0.006112f, -0.005754f, -0.000525f, 0.014091f, 0.023377f, -0.013647f, -0.009462f, 0.003193f, -0.004189f, 0.008398f, -0.005800f, -0.002928f, 0.005415f, -0.000060f, 0.014051f, -0.004218f, 0.006938f, -0.017966f, 0.011065f, -0.012461f, 0.011699f, 0.020802f, -0.001815f, 0.000630f, 0.002874f, -0.023408f, 0.039714f, -0.073326f, -0.242134f, -0.286602f, -0.025408f, -0.198645f, 0.078600f, 0.485705f, 0.261454f, 0.394572f, 0.415790f, -0.044744f, -0.119327f, 0.035918f, -0.302178f, -0.369429f, -0.113889f, -0.406719f, -0.326466f, 0.083308f, -0.234734f, -0.063647f, 0.469026f, 0.170090f, 0.331705f, 0.572837f, 0.341052f, 0.152806f, 0.116337f, 0.041000f, -0.254635f, -0.317025f, -0.104396f, -0.433152f, -0.433527f, 0.057612f, -0.324121f, -0.265864f, 0.160424f, -0.272604f, -0.280409f, 0.212370f, 0.086451f, -0.038318f, 0.500661f, 0.468935f, 0.299501f, 0.635610f, 0.598922f, 0.204921f, 0.238589f, 0.186119f, -0.301061f, -0.301703f, -0.381741f, -0.756074f, -0.892650f, -0.641829f, -0.639071f, -0.471215f, + 0.016485f, 0.044008f, 0.311729f, 0.538906f, 0.664019f, 0.605158f, 0.702098f, 0.601722f, 0.354950f, 0.238871f, 0.079719f, -0.118114f, -0.266051f, -0.378535f, -0.325303f, -0.471739f, -0.528527f, -0.438158f, -0.512442f, -0.384317f, 0.061298f, 0.123787f, 0.299071f, 0.599681f, 0.477489f, 0.368197f, 0.278290f, 0.109934f, -0.090519f, -0.073711f, -0.149893f, -0.187538f, -0.143230f, -0.162863f, -0.157456f, -0.066821f, -0.063538f, 0.004032f, 0.097810f, 0.069811f, 0.137191f, 0.164876f, 0.029015f, 0.119744f, 0.114930f, -0.031293f, 0.038455f, 0.027299f, -0.086791f, 0.004284f, 0.028601f, -0.100328f, -0.109767f, -0.153252f, -0.315966f, -0.353164f, -0.274770f, -0.262416f, -0.085768f, 0.129740f, 0.233233f, 0.379348f, 0.571847f, 0.617527f, 0.572566f, 0.401522f, 0.122849f, -0.128547f, -0.275960f, -0.412107f, -0.508994f, -0.500432f, -0.390850f, -0.268027f, -0.127060f, -0.038336f, 0.016957f, 0.047447f, 0.117387f, 0.193187f, 0.199067f, 0.185182f, 0.189983f, 0.135852f, 0.122436f, 0.106558f, 0.044294f, 0.012004f, 0.028633f, 0.025775f, 0.017115f, 0.012841f, -0.020501f, -0.059974f, -0.087314f, -0.100471f, + -0.083436f, -0.049805f, -0.032249f, -0.028664f} + }, + { + {-0.016633f, -0.019806f, 0.010170f, 0.000599f, 0.015348f, 0.005550f, 0.006775f, 0.004337f, 0.006233f, -0.000197f, -0.000204f, -0.003480f, -0.010068f, -0.005835f, 0.002676f, -0.000528f, -0.001858f, -0.001224f, 0.005354f, 0.004137f, 0.000060f, 0.004797f, -0.004514f, -0.011482f, 0.003649f, -0.002700f, 0.001285f, -0.005875f, 0.004583f, -0.004819f, -0.002390f, -0.001931f, 0.008210f, -0.001979f, -0.000091f, -0.003472f, -0.000943f, -0.009315f, 0.003124f, -0.001618f, 0.005007f, -0.004458f, 0.000592f, -0.002135f, -0.007442f, 0.002306f, -0.000742f, -0.002069f, 0.003311f, 0.006060f, -0.001269f, -0.003810f, -0.010883f, 0.000931f, -0.006471f, 0.002941f, 0.000106f, -0.004255f, -0.000171f, -0.001864f, -0.001522f, -0.007915f, 0.005077f, -0.007026f, 0.003845f, -0.002806f, -0.004648f, -0.004024f, -0.008362f, 0.004540f, 0.000427f, 0.002227f, 0.005030f, -0.005432f, -0.008575f, 0.005426f, -0.008217f, 0.000197f, -0.005476f, 0.001679f, -0.004239f, 0.003662f, -0.002144f, 0.001901f, -0.003657f, 0.000592f, -0.001697f, 0.002126f, -0.001753f, -0.002001f, -0.001868f, -0.001840f, -0.003281f, 0.000403f, 0.000807f, -0.000646f, + -0.002585f, 0.001715f, -0.001952f, 0.000199f, -0.001305f, -0.002312f, -0.000825f, -0.000876f, -0.000361f, -0.000570f, -0.000328f, -0.001924f, -0.000999f, 0.000204f, -0.001107f, -0.000669f, -0.000593f, -0.029318f, -0.000353f, -0.003923f, 0.007667f, 0.000111f, 0.002929f, -0.002455f, 0.003797f, 0.000713f, 0.003317f, -0.003419f, 0.018870f, -0.004142f, -0.002693f, -0.008146f, 0.002687f, -0.009829f, -0.003178f, 0.000707f, -0.004795f, -0.000092f, 0.006905f, 0.003948f, 0.002605f, 0.004648f, 0.006707f, -0.008225f, -0.003161f, -0.000181f, 0.004253f, -0.007760f, 0.007517f, -0.006497f, -0.003296f, 0.006026f, -0.001174f, 0.001379f, -0.004836f, 0.005567f, 0.005816f, 0.006254f, -0.009657f, -0.002952f, 0.010379f, -0.000150f, -0.001595f, -0.002343f, 0.011318f, 0.007388f, 0.008750f, 0.000151f, -0.002079f, -0.002630f, -0.000650f, -0.000241f, 0.001262f, 0.003391f, -0.010994f, -0.000992f, -0.005135f, -0.006482f, -0.000876f, 0.001869f, -0.005718f, 0.001523f, -0.004377f, -0.001590f, -0.001787f, -0.000128f, 0.003768f, 0.003523f, -0.002016f, -0.001291f, -0.002516f, -0.008890f, -0.002139f, -0.005506f, 0.000115f, -0.007265f, + 0.001940f, 0.000135f, 0.007321f, -0.002520f, 0.000974f, -0.006357f, 0.000518f, 0.000920f, -0.003013f, -0.003033f, 0.003084f, 0.000132f, 0.000789f, -0.000265f, 0.002149f, -0.000540f, 0.000867f, -0.000332f, -0.000553f, 0.002702f, 0.001173f, 0.001158f, 0.000361f, -0.000247f, 0.009939f, 0.011773f, -0.008215f, 0.001040f, -0.007010f, 0.010785f, 0.001967f, -0.004482f, -0.006347f, -0.005618f, -0.001190f, 0.001352f, 0.002846f, 0.014353f, -0.008566f, -0.001379f, -0.003414f, 0.005612f, -0.016070f, -0.001900f, 0.010215f, -0.000305f, 0.008580f, 0.003781f, 0.006878f, 0.007156f, 0.003102f, -0.001428f, -0.007557f, 0.002463f, -0.002130f, 0.000932f, 0.011949f, 0.002993f, 0.010249f, -0.005422f, -0.002829f, 0.000758f, -0.013838f, 0.001592f, 0.010303f, -0.003061f, 0.000942f, -0.008664f, 0.006502f, -0.000172f, 0.002876f, -0.010249f, 0.005995f, -0.006893f, -0.003850f, -0.007199f, -0.008447f, 0.004829f, 0.001628f, -0.002757f, -0.004334f, -0.004107f, -0.003021f, -0.002066f, 0.004750f, -0.004753f, -0.008580f, -0.013213f, 0.012182f, 0.009339f, 0.000487f, -0.013218f, 0.003990f, -0.006351f, 0.005179f, -0.004299f, + 0.000928f, -0.008107f, -0.005108f, -0.010553f, -0.004778f, -0.001494f, 0.010269f, 0.006107f, -0.011492f, 0.004959f, 0.000242f, -0.001015f, 0.005008f, -0.000697f, 0.003975f, 0.008152f, 0.000417f, 0.001707f, 0.005406f, 0.001106f, 0.001073f, 0.005342f, -0.000950f, -0.000154f, 0.000403f, 0.000687f, 0.001131f, 0.001321f, -0.001200f, 0.001544f, -0.001124f, 0.000386f, 0.000263f, 0.001366f, 0.000314f, 0.003382f, 0.002958f, 0.000207f, -0.000165f, 0.003320f, 0.001696f, -0.002502f, 0.000475f, 0.001196f, 0.049848f, -0.018438f, 0.022361f, -0.017670f, 0.001573f, 0.005349f, 0.005287f, -0.014578f, -0.004919f, -0.004860f, -0.024450f, -0.000079f, 0.001344f, -0.008775f, -0.001381f, -0.000052f, 0.017563f, 0.003293f, -0.012172f, 0.008977f, 0.009786f, 0.002229f, 0.017803f, -0.013150f, -0.004788f, -0.007002f, 0.003794f, 0.014280f, -0.000988f, 0.000952f, 0.005336f, -0.002489f, 0.006400f, 0.002926f, 0.016295f, -0.002398f, 0.006413f, -0.010592f, 0.009757f, -0.007399f, 0.010888f, -0.000139f, -0.011301f, -0.001648f, 0.016425f, -0.000669f, 0.011126f, 0.006711f, 0.010702f, 0.001006f, -0.008398f, -0.006808f, + 0.000216f, -0.005045f, 0.008792f, 0.005862f, -0.008624f, 0.001253f, -0.006730f, 0.011613f, -0.003105f, 0.009329f, 0.011107f, 0.001998f, 0.011448f, -0.000466f, -0.005494f, -0.001820f, -0.007012f, 0.000384f, 0.015031f, -0.009340f, -0.009589f, -0.003578f, 0.004294f, -0.006525f, -0.004044f, 0.002969f, 0.007240f, -0.002926f, 0.002683f, -0.014474f, 0.003617f, 0.001011f, -0.001003f, 0.005160f, 0.000360f, 0.001439f, 0.003496f, -0.000374f, -0.001846f, 0.001636f, -0.003314f, 0.001120f, -0.001360f, 0.000491f, 0.000670f, -0.000446f, -0.001132f, -0.002836f, -0.000196f, -0.002244f, -0.001411f, -0.000905f, -0.004976f, -0.041467f, 0.004546f, -0.012207f, -0.008728f, -0.013388f, -0.016231f, 0.006409f, 0.014523f, -0.002184f, 0.005650f, 0.002304f, 0.007460f, 0.001695f, 0.000550f, 0.004505f, -0.008885f, 0.020609f, -0.001069f, -0.011992f, 0.013526f, -0.004131f, 0.005743f, -0.013518f, -0.008412f, -0.009578f, 0.004150f, 0.002520f, 0.010583f, 0.000323f, -0.006575f, 0.001108f, -0.005871f, -0.006453f, -0.007161f, -0.002488f, -0.009970f, -0.005052f, 0.009287f, -0.008648f, -0.000615f, -0.006766f, -0.010583f, -0.004715f, + 0.001320f, 0.003388f, 0.006709f, -0.005329f, -0.004892f, 0.006635f, 0.001151f, 0.002496f, 0.001753f, 0.004106f, 0.006217f, -0.010129f, -0.003403f, -0.001032f, -0.014207f, 0.003757f, -0.001015f, 0.008306f, -0.008339f, -0.006362f, -0.007797f, 0.001334f, 0.008782f, 0.006806f, 0.015506f, 0.010414f, -0.009624f, 0.003892f, -0.004377f, 0.007341f, 0.004571f, -0.010387f, 0.007452f, 0.002005f, -0.011549f, 0.001477f, -0.002133f, 0.000980f, -0.002197f, -0.007876f, 0.001403f, -0.005653f, -0.005975f, 0.002168f, -0.003307f, 0.001358f, 0.004180f, -0.002838f, -0.003818f, -0.003931f, -0.005913f, -0.001100f, 0.004476f, -0.001207f, 0.004656f, 0.000031f, 0.003127f, 0.002153f, 0.001601f, -0.002108f, -0.000880f, 0.000800f, -0.002104f, -0.002293f, 0.000478f, -0.002213f, -0.000912f, 0.000594f, -0.004187f, 0.002310f, -0.002176f, -0.000722f, 0.000408f, -0.000149f, 0.000261f, 0.001330f, -0.001908f, 0.001183f, 0.002696f, -0.052805f, 0.014498f, -0.015749f, -0.013122f, -0.009438f, 0.001780f, -0.002746f, 0.031105f, 0.003065f, 0.007442f, -0.003465f, 0.000119f, -0.012776f, 0.012689f, 0.003709f, -0.001851f, 0.002553f, + 0.016565f, -0.008295f, -0.002871f, 0.003829f, 0.001142f, 0.008322f, -0.007247f, -0.003252f, 0.009132f, 0.003361f, 0.008411f, 0.001012f, -0.008950f, -0.005849f, 0.005025f, -0.000866f, -0.003052f, -0.005577f, -0.003241f, -0.000364f, 0.015682f, 0.003970f, -0.002863f, 0.000334f, 0.001136f, -0.004760f, 0.011287f, 0.008665f, -0.002725f, -0.011881f, 0.002944f, -0.006289f, 0.010732f, 0.008366f, -0.008425f, 0.003278f, -0.010901f, -0.009678f, -0.008556f, -0.010680f, -0.003739f, 0.002361f, -0.006476f, 0.000534f, -0.007150f, -0.006011f, 0.012342f, 0.007888f, -0.010566f, -0.014184f, 0.001530f, 0.012085f, -0.009394f, -0.006918f, 0.010139f, 0.008035f, 0.011572f, -0.007509f, -0.000407f, 0.003292f, 0.004722f, 0.013087f, 0.003453f, -0.001713f, -0.000591f, -0.009537f, -0.001525f, -0.000174f, -0.008280f, 0.000597f, -0.002510f, -0.003737f, 0.000059f, -0.001108f, 0.003932f, -0.000971f, -0.001683f, 0.001915f, -0.001337f, -0.003412f, -0.002357f, 0.000714f, 0.003142f, -0.001564f, -0.001342f, 0.000096f, -0.000934f, 0.006128f, 0.000976f, 0.007946f, -0.005760f, 0.001431f, 0.000271f, -0.003321f, -0.000223f, -0.000282f, + -0.004408f, 0.001073f, -0.000969f, -0.004722f, -0.004534f, -0.002297f, -0.004347f, -0.003208f, 0.000938f, -0.002099f, -0.027790f, -0.002738f, 0.004702f, 0.013542f, -0.002614f, -0.007070f, 0.003192f, 0.019890f, -0.025007f, 0.005818f, -0.005057f, -0.004633f, -0.011243f, 0.006785f, -0.020033f, -0.013046f, 0.006922f, -0.010476f, 0.006371f, 0.028587f, -0.005028f, 0.011559f, -0.013410f, 0.013808f, -0.003556f, 0.004123f, -0.012023f, 0.005634f, 0.003455f, -0.006455f, 0.002874f, -0.001299f, -0.006166f, -0.000410f, 0.007885f, 0.012306f, -0.009597f, -0.015363f, -0.012138f, -0.011277f, 0.001500f, 0.009022f, 0.023938f, -0.000273f, 0.016135f, 0.016808f, -0.015596f, 0.012024f, -0.022957f, -0.008411f, 0.001501f, -0.010232f, -0.009490f, 0.006378f, -0.022228f, -0.004404f, 0.015545f, -0.006689f, -0.005781f, 0.002043f, -0.006757f, 0.006332f, -0.006703f, 0.010865f, 0.014091f, -0.003895f, 0.004414f, 0.000579f, -0.014167f, 0.001218f, -0.009151f, -0.006350f, -0.011181f, 0.006384f, 0.004941f, -0.010797f, 0.000929f, 0.008035f, 0.007528f, 0.009520f, 0.009873f, -0.001508f, -0.009281f, 0.007733f, 0.004105f, 0.004629f, + 0.002585f, 0.005591f, -0.000579f, -0.000189f, 0.000877f, 0.002297f, 0.002769f, -0.003829f, -0.001119f, -0.003090f, -0.001993f, 0.004487f, 0.003917f, 0.004332f, -0.007814f, 0.001606f, -0.000925f, -0.003250f, -0.003744f, 0.004058f, -0.002449f, -0.004306f, 0.001152f, 0.001016f, -0.001356f, 0.009576f, 0.003242f, -0.001882f, -0.002057f, -0.004452f, -0.001168f, 0.003914f, 0.006029f, 0.001498f, 0.000080f, 0.006002f, 0.066013f, -0.003078f, -0.025956f, -0.003157f, -0.001034f, 0.002606f, 0.008414f, 0.003496f, -0.002909f, -0.002596f, -0.013013f, -0.006106f, 0.007471f, 0.016214f, -0.013082f, -0.008189f, 0.010867f, 0.000987f, -0.003753f, 0.004422f, -0.000933f, -0.015161f, -0.015436f, 0.021289f, -0.001852f, -0.001229f, -0.003415f, 0.010994f, -0.000719f, 0.001268f, 0.007049f, -0.011476f, 0.012432f, 0.005242f, 0.002134f, 0.004823f, 0.012428f, -0.029454f, -0.013110f, -0.007069f, 0.027391f, 0.003646f, 0.002175f, -0.008267f, -0.009114f, 0.008287f, -0.001092f, 0.009588f, -0.003230f, -0.018776f, 0.002167f, 0.002439f, -0.002723f, 0.009316f, 0.004266f, 0.002596f, 0.015254f, 0.036964f, -0.002772f, -0.002984f, + 0.014173f, 0.004392f, -0.004206f, 0.009767f, 0.028811f, -0.003090f, 0.005634f, 0.010507f, 0.008491f, 0.007585f, 0.007768f, 0.008645f, 0.006717f, -0.007452f, 0.011591f, 0.020570f, -0.004574f, 0.007964f, 0.000266f, -0.002453f, -0.013994f, 0.008945f, 0.003496f, -0.001033f, 0.004442f, 0.005025f, 0.001328f, 0.000686f, -0.004610f, -0.005369f, -0.002001f, -0.010811f, -0.004695f, -0.007290f, 0.009656f, 0.004766f, 0.003772f, -0.001428f, -0.001266f, 0.000670f, -0.006117f, 0.000123f, 0.002475f, -0.008569f, 0.007776f, -0.003676f, 0.001522f, -0.002550f, 0.000585f, 0.002986f, 0.003631f, -0.006661f, -0.006519f, -0.005472f, 0.000928f, -0.001055f, -0.001681f, -0.000418f, 0.004868f, -0.001145f, 0.000669f, -0.002687f, -0.005767f, -0.003153f, 0.013326f, 0.014838f, -0.018847f, -0.005450f, -0.015997f, 0.015888f, 0.029737f, -0.014205f, -0.003321f, -0.016300f, -0.007080f, -0.019729f, 0.014101f, -0.012033f, -0.004890f, -0.001249f, 0.000154f, -0.007834f, -0.009666f, 0.017770f, -0.016088f, -0.005918f, 0.001853f, 0.012137f, 0.012937f, -0.018526f, -0.005446f, 0.007171f, -0.015953f, 0.009104f, -0.012655f, -0.005122f, + 0.004674f, 0.000413f, -0.006922f, -0.001887f, 0.003822f, 0.020778f, 0.002570f, 0.004726f, 0.000009f, -0.017685f, 0.019375f, -0.009457f, -0.014524f, 0.011673f, -0.010354f, -0.011667f, 0.015270f, -0.006857f, 0.001954f, -0.003326f, 0.002051f, 0.020122f, -0.003436f, 0.004554f, -0.017552f, -0.001323f, 0.020426f, 0.004626f, 0.020236f, 0.017388f, -0.005710f, -0.004377f, -0.023552f, 0.003678f, -0.003966f, 0.015672f, 0.019118f, -0.010932f, 0.004753f, -0.034522f, -0.009471f, 0.011526f, -0.011964f, 0.017993f, 0.001190f, 0.003942f, -0.006364f, -0.001269f, -0.008315f, 0.001541f, -0.005738f, 0.012731f, 0.012426f, -0.000490f, 0.004218f, -0.000115f, 0.007011f, 0.003116f, 0.005071f, 0.010775f, -0.003247f, -0.011951f, 0.005496f, 0.002822f, 0.007596f, -0.001901f, 0.008060f, -0.001567f, -0.002844f, 0.002128f, -0.004903f, -0.003144f, 0.000790f, -0.008365f, 0.002325f, -0.002849f, 0.007459f, 0.003339f, -0.000594f, -0.001496f, -0.004990f, -0.007398f, -0.000646f, 0.001122f, 0.002999f, -0.002647f, 0.001631f, -0.006946f, -0.000146f, 0.000536f, -0.003779f, 0.004846f, 0.000424f, 0.000229f, 0.001957f, -0.002188f, + 0.000312f, 0.000168f, 0.011933f, -0.015150f, 0.005203f, -0.014166f, -0.001534f, -0.019139f, 0.031473f, -0.009248f, 0.002152f, -0.009919f, -0.028685f, 0.016559f, 0.005807f, -0.021401f, 0.013273f, -0.009632f, -0.007091f, 0.007508f, 0.029791f, -0.014846f, 0.028780f, -0.000547f, -0.020208f, 0.000870f, 0.006734f, -0.017770f, 0.019651f, -0.010281f, 0.014555f, 0.031634f, 0.003104f, -0.014742f, -0.004120f, -0.001659f, 0.007260f, -0.012532f, -0.006846f, -0.001667f, 0.015594f, -0.005533f, -0.006245f, -0.020662f, -0.000689f, -0.024433f, -0.004496f, 0.027757f, -0.006206f, 0.015822f, 0.001513f, 0.004249f, -0.036319f, 0.000539f, -0.023233f, 0.018771f, 0.032575f, 0.010090f, 0.008200f, 0.002069f, 0.004899f, -0.018939f, 0.006714f, 0.010196f, -0.008437f, -0.002314f, -0.007476f, -0.004721f, 0.014699f, 0.000392f, 0.017825f, 0.054607f, 0.019949f, 0.005508f, -0.018709f, -0.017348f, -0.011259f, 0.010786f, -0.018524f, -0.001544f, -0.001663f, 0.003867f, 0.010524f, -0.010106f, -0.001890f, 0.010216f, 0.011167f, 0.002367f, 0.001930f, 0.007651f, 0.009620f, 0.008084f, -0.000061f, -0.001697f, -0.001770f, 0.000925f, + -0.003933f, -0.004865f, 0.004375f, -0.002419f, 0.006784f, -0.008183f, -0.002587f, 0.005803f, 0.004890f, -0.000405f, 0.004421f, -0.004168f, 0.002032f, 0.003098f, 0.004107f, -0.004583f, -0.004566f, 0.006563f, 0.004654f, 0.003726f, -0.001643f, -0.003166f, 0.001597f, -0.009113f, -0.002391f, 0.001573f, -0.004880f, 0.002340f, -0.003380f, -0.002295f, 0.001068f, 0.000849f, -0.000754f, -0.001724f, -0.006835f, 0.056990f, -0.030863f, -0.000846f, -0.015337f, -0.028926f, -0.038605f, 0.010686f, -0.012385f, 0.011316f, -0.036543f, 0.007155f, 0.013006f, 0.011702f, -0.015366f, -0.033551f, -0.026433f, -0.022198f, 0.000245f, -0.012929f, -0.024514f, -0.016880f, -0.008613f, -0.020027f, -0.013997f, 0.003266f, 0.025175f, -0.000751f, 0.003524f, -0.001004f, -0.022292f, 0.013563f, -0.002109f, 0.003890f, -0.005049f, -0.014822f, 0.012407f, -0.018456f, -0.025719f, 0.022800f, -0.025095f, 0.004782f, -0.000339f, -0.035188f, -0.021037f, 0.013517f, -0.000746f, 0.016659f, -0.011312f, -0.037377f, -0.000275f, 0.001096f, 0.013751f, 0.014622f, 0.034625f, -0.020348f, -0.071733f, -0.025257f, -0.024555f, 0.015807f, -0.046785f, -0.016007f, + -0.007917f, -0.042988f, -0.014389f, -0.000967f, -0.008281f, -0.008264f, 0.009197f, -0.011776f, -0.001156f, -0.011064f, 0.009912f, -0.025391f, 0.008929f, 0.019959f, -0.025592f, -0.013047f, 0.012400f, 0.009608f, 0.008323f, -0.026311f, 0.006056f, 0.000062f, -0.003822f, 0.013577f, -0.003619f, 0.011122f, 0.009906f, -0.002501f, 0.002985f, 0.001945f, -0.003285f, -0.008921f, 0.014099f, -0.004916f, -0.010156f, 0.000067f, -0.000540f, 0.007379f, 0.002560f, -0.000217f, 0.002232f, -0.007757f, -0.007826f, 0.000623f, 0.002548f, 0.004329f, 0.008012f, -0.001191f, 0.003582f, -0.001046f, 0.003150f, -0.008988f, -0.003950f, -0.006306f, -0.005737f, -0.001154f, -0.001345f, 0.002988f, -0.010079f, -0.004735f, -0.007583f, -0.005497f, -0.010554f, -0.012999f, -0.011513f, -0.001445f, -0.001187f, 0.001165f, -0.007143f, -0.009188f, -0.033087f, 0.012997f, 0.016265f, -0.005517f, -0.006416f, -0.016534f, -0.018216f, 0.041897f, 0.015247f, -0.039247f, 0.013523f, -0.021418f, -0.002065f, -0.019468f, -0.040268f, 0.011742f, -0.020992f, -0.008857f, 0.001651f, 0.001100f, -0.010254f, -0.034121f, -0.021110f, 0.016620f, -0.020869f, -0.000657f, + -0.018456f, -0.028412f, -0.011019f, 0.031376f, 0.005061f, 0.005519f, -0.027406f, -0.009280f, -0.005589f, -0.003659f, 0.011182f, 0.013706f, 0.017815f, 0.021918f, -0.010695f, 0.012316f, 0.004389f, -0.012794f, 0.007862f, -0.021443f, -0.018543f, -0.016170f, 0.007009f, -0.018668f, 0.000975f, -0.028027f, -0.024422f, -0.012712f, 0.029063f, 0.022542f, 0.022113f, 0.024203f, -0.022248f, 0.030347f, 0.001132f, 0.013936f, 0.041968f, -0.008684f, -0.007563f, 0.006730f, -0.019995f, 0.008222f, -0.009302f, -0.026103f, 0.003568f, 0.021170f, -0.024950f, -0.018010f, -0.002882f, 0.022752f, -0.018895f, 0.002086f, 0.007261f, 0.013636f, 0.003677f, -0.005793f, -0.012784f, 0.003385f, 0.009992f, -0.005470f, 0.001509f, -0.006861f, 0.002440f, -0.006533f, 0.002858f, 0.000278f, 0.003907f, -0.002578f, 0.002807f, 0.004468f, 0.012134f, -0.001672f, 0.000088f, 0.000789f, 0.005857f, -0.008949f, -0.003275f, -0.009841f, -0.002313f, -0.002370f, -0.010651f, 0.001871f, 0.010436f, -0.001125f, -0.012733f, -0.002473f, -0.000747f, -0.011693f, -0.012424f, -0.019072f, -0.007320f, 0.006948f, 0.001674f, 0.004830f, -0.002332f, -0.003662f, + -0.006223f, -0.001275f, -0.015987f, -0.003307f, 0.010493f, 0.015459f, -0.000206f, 0.004431f, -0.008762f, -0.015632f, -0.036692f, 0.042351f, -0.032774f, 0.043852f, 0.024613f, 0.016817f, 0.009516f, 0.017344f, 0.018803f, 0.017419f, 0.047098f, -0.016243f, 0.003469f, -0.002948f, -0.007944f, -0.001234f, 0.005972f, -0.004168f, 0.009180f, -0.002851f, 0.014827f, 0.012511f, -0.002501f, -0.007933f, -0.046643f, -0.016467f, -0.033798f, -0.001366f, 0.018024f, 0.018252f, 0.005871f, 0.009400f, 0.013614f, 0.011351f, 0.013196f, 0.033715f, 0.050094f, 0.033738f, 0.006877f, -0.006146f, -0.009544f, -0.014137f, 0.017593f, 0.018023f, 0.020071f, -0.014636f, -0.011605f, -0.018204f, -0.002949f, 0.024572f, 0.000327f, 0.029403f, -0.017610f, 0.015854f, 0.009499f, 0.026414f, -0.054669f, -0.038982f, -0.015983f, -0.021778f, -0.022439f, 0.006986f, -0.009124f, 0.034691f, 0.010290f, -0.038185f, -0.003112f, 0.062405f, -0.020908f, 0.019626f, -0.009348f, 0.025790f, -0.011861f, -0.007531f, 0.000954f, -0.010314f, -0.013839f, -0.000753f, 0.010479f, 0.015628f, 0.010747f, -0.003790f, 0.012112f, -0.002969f, 0.005608f, -0.015589f, + -0.010773f, 0.010403f, 0.006457f, -0.015672f, -0.006943f, -0.006506f, -0.002143f, 0.004215f, -0.004205f, -0.007551f, 0.003579f, 0.000965f, 0.002584f, -0.000996f, -0.004532f, 0.007329f, 0.002272f, -0.003751f, 0.009316f, -0.001052f, 0.002704f, -0.001486f, 0.010981f, -0.009119f, 0.009766f, 0.004574f, -0.009308f, 0.006365f, 0.000249f, 0.001892f, -0.009718f, -0.027855f, 0.010443f, 0.000503f, 0.001931f, -0.002964f, 0.010599f, -0.002341f, -0.005140f, 0.003688f, 0.008236f, 0.007204f, -0.004297f, 0.008870f, -0.027011f, -0.013532f, 0.022342f, 0.009752f, 0.016469f, 0.043024f, 0.003644f, 0.028745f, 0.042005f, 0.029185f, -0.019076f, -0.042780f, -0.001490f, -0.019648f, 0.046063f, 0.013263f, 0.035973f, -0.005163f, -0.019374f, -0.007132f, -0.021138f, 0.008303f, -0.016284f, 0.001941f, -0.018134f, 0.009386f, -0.013272f, -0.005569f, -0.029084f, -0.028760f, -0.002935f, -0.041194f, 0.022464f, 0.015521f, -0.012412f, 0.021070f, -0.010132f, 0.008183f, 0.023374f, -0.026052f, -0.034227f, 0.006050f, -0.007562f, 0.057270f, 0.024230f, -0.062894f, -0.017089f, -0.017871f, -0.032555f, -0.034362f, -0.070352f, 0.012354f, + -0.025292f, -0.006618f, 0.009938f, 0.002525f, 0.014325f, -0.002819f, -0.008449f, -0.053262f, 0.006188f, -0.024233f, 0.006395f, 0.031178f, 0.006422f, 0.020896f, -0.031866f, -0.042132f, 0.008354f, 0.026070f, 0.017414f, 0.009774f, 0.016534f, 0.027107f, 0.033780f, 0.034883f, -0.031203f, -0.018705f, -0.022530f, -0.016011f, -0.026277f, 0.036808f, 0.021405f, 0.020748f, 0.005496f, 0.015865f, 0.013413f, -0.001308f, 0.019056f, -0.029678f, -0.010634f, -0.003548f, 0.002239f, -0.006425f, -0.021241f, 0.001201f, -0.004463f, 0.002740f, 0.006625f, 0.021517f, 0.000985f, 0.010074f, 0.009875f, 0.001623f, 0.010493f, 0.000369f, -0.006708f, 0.001331f, -0.016366f, -0.006539f, 0.008393f, 0.012431f, 0.003587f, 0.002299f, -0.019976f, -0.001884f, 0.000459f, -0.009461f, -0.006821f, 0.002967f, 0.006086f, -0.018086f, -0.020310f, -0.009102f, 0.006546f, 0.005873f, 0.009977f, 0.002507f, -0.006667f, 0.004558f, -0.021031f, -0.018400f, 0.076007f, 0.050197f, 0.069737f, 0.004511f, -0.013835f, -0.047400f, -0.013985f, 0.007910f, 0.010991f, -0.011316f, -0.036625f, -0.013258f, 0.060256f, 0.024894f, -0.008340f, 0.018431f, + -0.001365f, -0.022169f, -0.006471f, -0.014477f, 0.041084f, -0.003190f, 0.002408f, 0.017700f, 0.001162f, 0.020088f, -0.000213f, 0.028449f, -0.026217f, 0.032784f, 0.006644f, -0.015330f, -0.009252f, -0.016978f, 0.029630f, -0.041107f, -0.044342f, 0.027991f, 0.046368f, 0.002124f, 0.032007f, 0.043968f, -0.049575f, 0.016441f, 0.010125f, -0.002783f, -0.000457f, 0.007296f, -0.018613f, 0.034498f, -0.020984f, -0.016744f, 0.013956f, 0.001687f, -0.003758f, -0.008117f, -0.010345f, 0.004906f, -0.032754f, -0.009890f, 0.026356f, -0.032389f, -0.007456f, -0.021910f, 0.000803f, 0.065270f, -0.020552f, 0.004103f, 0.017471f, 0.000220f, -0.015071f, -0.040938f, 0.039872f, 0.018499f, -0.082262f, 0.020263f, 0.020672f, 0.015182f, -0.018469f, -0.008716f, 0.041980f, 0.001754f, 0.003064f, 0.010635f, -0.029254f, 0.000975f, 0.018557f, -0.007745f, 0.010706f, -0.002492f, -0.009539f, -0.024523f, 0.003669f, -0.003372f, 0.022532f, -0.002279f, -0.001012f, -0.016406f, 0.017834f, -0.006210f, -0.006279f, -0.025909f, -0.012989f, 0.008834f, -0.016623f, 0.001154f, -0.008233f, 0.010062f, -0.009772f, -0.020915f, 0.010363f, -0.022521f, + -0.006202f, -0.010377f, 0.000942f, 0.001097f, -0.008472f, 0.021938f, -0.002863f, 0.029665f, 0.018143f, -0.003304f, 0.003011f, 0.018857f, -0.013428f, 0.003116f, 0.002121f, 0.018061f, -0.016818f, -0.010213f, -0.033474f, -0.080908f, 0.072904f, 0.043659f, 0.023445f, 0.016640f, 0.036259f, -0.081647f, 0.034210f, 0.038429f, 0.016726f, -0.052088f, 0.029741f, 0.053661f, 0.025118f, 0.059120f, 0.021858f, 0.001505f, -0.001852f, -0.001335f, -0.009513f, 0.025343f, 0.042118f, 0.040172f, 0.014334f, -0.011683f, -0.020225f, 0.005453f, -0.018374f, -0.021546f, 0.023660f, 0.016461f, 0.004874f, -0.021594f, -0.021052f, -0.004217f, -0.018246f, 0.010045f, 0.048315f, -0.008003f, -0.015033f, 0.016665f, 0.009115f, 0.014691f, 0.017154f, -0.003154f, -0.009229f, 0.038968f, 0.025875f, 0.013083f, 0.017397f, -0.002591f, -0.037799f, 0.009374f, 0.025863f, 0.003806f, -0.028034f, 0.038574f, 0.010335f, 0.053459f, 0.002370f, 0.048108f, 0.005489f, -0.015095f, -0.004674f, 0.011924f, 0.068152f, -0.008054f, 0.024742f, 0.017204f, 0.032398f, 0.017277f, 0.000523f, -0.001554f, 0.021258f, 0.096918f, 0.004875f, 0.039183f, + -0.032328f, -0.023912f, 0.012602f, 0.015660f, 0.019140f, 0.008227f, 0.003426f, -0.046889f, -0.018410f, -0.049191f, 0.003040f, -0.008042f, -0.016089f, -0.013405f, -0.005208f, -0.020475f, 0.002943f, -0.001691f, -0.021739f, 0.016242f, -0.025377f, -0.011991f, -0.022891f, -0.015372f, -0.001247f, 0.003023f, -0.018270f, -0.021047f, 0.005434f, 0.014142f, 0.016223f, -0.002790f, -0.005874f, -0.027223f, -0.035955f, 0.004071f, 0.004649f, -0.016046f, 0.033142f, 0.032311f, 0.047357f, 0.016980f, -0.010189f, 0.006876f, 0.014744f, 0.018277f, 0.021592f, 0.003583f, -0.022197f, 0.006050f, 0.028785f, 0.015080f, 0.001599f, 0.011863f, -0.053173f, 0.058037f, -0.001011f, 0.051362f, 0.001138f, 0.003395f, -0.046869f, -0.014457f, -0.021170f, 0.035625f, 0.008936f, 0.015753f, 0.009282f, -0.035949f, 0.003393f, 0.002822f, -0.031679f, -0.045159f, -0.046267f, 0.015576f, -0.017315f, 0.041962f, 0.002232f, -0.013342f, -0.011090f, 0.009044f, -0.016455f, 0.002706f, 0.012109f, -0.017665f, 0.009716f, 0.014165f, 0.004612f, 0.004062f, 0.031544f, 0.053426f, -0.010686f, -0.000397f, 0.026602f, 0.022004f, 0.031902f, -0.023805f, + -0.009588f, 0.009726f, -0.032202f, 0.003166f, 0.002527f, -0.042387f, 0.054451f, -0.002628f, 0.027353f, 0.023892f, 0.016457f, -0.032223f, 0.002797f, 0.027656f, -0.022712f, 0.049174f, 0.013223f, -0.017879f, 0.040339f, 0.030693f, 0.021092f, -0.068284f, -0.014198f, 0.013694f, -0.023616f, 0.003765f, -0.038403f, -0.009458f, -0.058061f, -0.016442f, -0.009115f, -0.015865f, -0.064317f, -0.006331f, -0.017767f, 0.096332f, -0.014141f, 0.019706f, -0.010171f, 0.015509f, -0.008366f, -0.015589f, 0.010112f, -0.013046f, -0.002322f, -0.006952f, 0.025562f, 0.009429f, 0.011075f, -0.041410f, -0.037464f, -0.027612f, -0.011856f, 0.007528f, -0.052547f, -0.008233f, -0.004502f, 0.004105f, 0.018830f, 0.014681f, -0.001862f, 0.020487f, -0.018592f, 0.000643f, 0.000801f, -0.029854f, -0.041860f, 0.008451f, -0.012459f, -0.038295f, -0.010878f, -0.017885f, 0.002328f, -0.040937f, -0.005007f, -0.017698f, 0.024035f, 0.000719f, -0.017900f, -0.006084f, 0.007278f, 0.009970f, -0.004248f, 0.018967f, -0.019129f, -0.011321f, 0.023803f, 0.023387f, 0.029967f, 0.026322f, 0.019616f, -0.014221f, 0.012272f, 0.032857f, 0.031729f, 0.013973f, + -0.038248f, -0.044394f, 0.019782f, -0.006078f, 0.014324f, -0.008138f, 0.037761f, -0.028090f, -0.005751f, -0.009662f, 0.032949f, -0.024666f, 0.057717f, 0.070913f, 0.072356f, 0.004500f, -0.013326f, 0.011785f, -0.009309f, 0.017736f, -0.002997f, -0.000350f, -0.021092f, -0.057963f, -0.019234f, -0.055509f, 0.031946f, 0.030034f, -0.034146f, -0.025575f, -0.034230f, -0.015990f, -0.004861f, 0.075808f, 0.000987f, -0.038591f, -0.041425f, -0.002449f, 0.053069f, 0.025369f, -0.106074f, -0.021605f, -0.018668f, 0.014026f, 0.040015f, -0.046053f, -0.014498f, -0.027400f, 0.012174f, -0.062864f, 0.031412f, -0.010434f, -0.001303f, 0.017526f, 0.002718f, -0.030754f, 0.062242f, -0.006162f, 0.029687f, 0.066564f, 0.136451f, 0.081813f, -0.001848f, 0.045990f, 0.069669f, 0.089476f, 0.097066f, 0.027797f, 0.059525f, 0.017052f, 0.000935f, 0.036516f, -0.028506f, 0.059865f, 0.025812f, -0.025919f, -0.088959f, -0.064780f, 0.008652f, -0.025272f, -0.018086f, -0.016369f, -0.009675f, -0.010856f, -0.036510f, -0.023941f, 0.001587f, -0.005576f, -0.001786f, -0.011450f, -0.003019f, -0.019020f, 0.024006f, -0.039514f, -0.015964f, 0.011611f, + 0.007567f, 0.003706f, -0.009962f, -0.012259f, -0.006719f, 0.008133f, -0.006026f, 0.020580f, -0.023702f, -0.029976f, -0.029866f, -0.018456f, 0.023308f, 0.025928f, -0.009323f, -0.004340f, 0.009736f, -0.004768f, 0.043113f, 0.009430f, 0.004135f, 0.034409f, 0.021851f, 0.019754f, 0.048941f, 0.032073f, 0.036930f, 0.011554f, 0.018017f, 0.040242f, 0.015892f, 0.016713f, -0.013380f, -0.030292f, 0.035251f, -0.044046f, 0.074158f, -0.008587f, -0.013425f, 0.001517f, 0.059088f, -0.039215f, -0.006800f, -0.001571f, 0.000950f, 0.021533f, -0.015104f, 0.030988f, 0.010859f, -0.005658f, 0.007312f, 0.003684f, 0.024380f, -0.074017f, -0.023238f, -0.002129f, 0.007995f, -0.007197f, -0.053899f, 0.044487f, -0.002317f, 0.006199f, 0.016200f, -0.035131f, -0.015938f, -0.081690f, 0.021807f, -0.019050f, 0.015806f, 0.059859f, -0.016270f, 0.012640f, -0.007585f, 0.028594f, -0.048744f, -0.065259f, 0.057367f, -0.005281f, 0.005029f, 0.009790f, 0.057699f, 0.042059f, 0.050090f, -0.000781f, -0.066811f, 0.039780f, 0.018743f, -0.015739f, -0.023574f, 0.038022f, -0.006850f, 0.048054f, 0.079483f, 0.061777f, 0.010607f, 0.005441f, + 0.058661f, -0.011498f, 0.018081f, 0.048246f, -0.032721f, 0.055775f, 0.034201f, 0.019919f, -0.039298f, -0.019408f, -0.052470f, -0.001480f, 0.018130f, 0.078305f, 0.033057f, -0.072608f, -0.006616f, 0.047050f, -0.006802f, 0.022934f, 0.031572f, -0.051475f, -0.012655f, 0.025226f, 0.006149f, 0.014130f, -0.022428f, 0.016787f, 0.028441f, 0.003752f, 0.000488f, 0.041586f, 0.007996f, -0.008886f, -0.010711f, 0.013847f, -0.003600f, 0.022375f, 0.003583f, 0.016949f, 0.019263f, -0.002852f, -0.019857f, 0.040935f, -0.005820f, -0.012485f, -0.002584f, -0.027698f, -0.027863f, -0.018275f, -0.019287f, 0.013336f, 0.024245f, -0.024278f, -0.020805f, 0.004897f, 0.036403f, -0.052467f, -0.012710f, 0.020322f, -0.006204f, 0.000171f, -0.007129f, -0.005639f, -0.037725f, -0.000494f, -0.010044f, 0.010489f, 0.002922f, 0.006312f, 0.000442f, 0.003299f, -0.002986f, -0.102796f, 0.023477f, -0.017053f, -0.004098f, 0.080188f, 0.034418f, -0.025195f, -0.019556f, -0.000337f, -0.051977f, -0.063608f, 0.005293f, 0.000530f, -0.035863f, 0.037946f, 0.004510f, -0.036711f, 0.023098f, 0.069004f, -0.009347f, -0.039768f, 0.024867f, -0.023417f, + -0.025629f, 0.012883f, 0.055940f, -0.018243f, 0.008092f, 0.015381f, -0.017409f, -0.041715f, -0.027506f, 0.055370f, 0.019346f, -0.054550f, 0.046548f, 0.018337f, -0.037539f, -0.019518f, 0.076733f, -0.024972f, -0.059149f, -0.030279f, 0.102026f, -0.100834f, -0.046915f, 0.059903f, -0.027256f, -0.032391f, -0.096295f, 0.075041f, -0.061725f, 0.022094f, 0.003015f, -0.011483f, -0.108735f, -0.032020f, 0.092718f, 0.058656f, -0.073635f, -0.020037f, -0.032004f, -0.014970f, 0.014852f, 0.020262f, 0.023979f, -0.128152f, 0.069931f, 0.053875f, 0.056228f, 0.000972f, 0.029326f, -0.062649f, -0.056011f, 0.109859f, 0.044804f, 0.012268f, 0.043962f, -0.058964f, 0.011657f, -0.026021f, 0.027995f, -0.015834f, 0.076771f, -0.031272f, -0.027021f, 0.010813f, 0.009048f, -0.029000f, 0.017288f, 0.008605f, 0.006304f, -0.005352f, 0.003645f, 0.006343f, 0.006010f, -0.007066f, -0.004432f, 0.016283f, 0.000661f, -0.008399f, 0.033430f, 0.010092f, -0.030235f, 0.003462f, 0.028630f, 0.007701f, -0.028780f, 0.038396f, 0.068358f, -0.033575f, -0.039644f, -0.010507f, -0.009169f, 0.023460f, 0.049995f, 0.015408f, -0.046842f, -0.015333f, + -0.007073f, 0.007106f, 0.013849f, -0.007661f, 0.020266f, -0.014688f, -0.002090f, 0.012205f, -0.084614f, 0.014821f, 0.105953f, 0.033206f, 0.011489f, 0.003023f, 0.008079f, 0.045507f, 0.062256f, -0.014089f, 0.011731f, 0.016190f, -0.010575f, 0.037596f, -0.019639f, -0.005189f, -0.014835f, 0.028909f, 0.021496f, -0.011648f, 0.019772f, -0.028117f, -0.022893f, 0.028865f, -0.018377f, 0.031707f, -0.020957f, -0.009246f, -0.000512f, 0.017380f, -0.000977f, 0.012959f, 0.005307f, 0.032286f, -0.022925f, -0.004502f, 0.000665f, -0.012701f, 0.031171f, 0.027058f, -0.022174f, -0.007803f, -0.013592f, 0.007243f, -0.028637f, 0.015600f, 0.008957f, 0.014327f, -0.011389f, -0.008616f, 0.035466f, -0.042412f, -0.007263f, 0.018033f, -0.011445f, -0.007635f, 0.018593f, -0.052147f, 0.012701f, -0.018815f, 0.003211f, -0.018423f, 0.045264f, -0.014614f, -0.019428f, 0.018642f, -0.010175f, -0.029522f, 0.057542f, -0.001497f, 0.005972f, -0.012750f, -0.022041f, -0.025985f, 0.029074f, -0.032475f, -0.015614f, 0.033228f, -0.045145f, -0.019616f, 0.005924f, -0.004156f, 0.005643f, -0.000624f, 0.006547f, 0.020230f, -0.007147f, 0.007982f, + -0.009132f, 0.021224f, 0.011675f, -0.000812f, 0.001888f, 0.012965f, -0.011217f, 0.009446f, 0.001622f, 0.010381f, -0.004557f, 0.016088f, -0.008057f, 0.004391f, -0.013828f, -0.011933f, -0.018926f, 0.003638f, 0.001214f, 0.006454f, -0.009224f, 0.021369f, -0.006929f, -0.003568f, 0.018349f, 0.016184f, 0.008724f, -0.007394f, -0.012154f, 0.011075f, 0.014653f, 0.009216f, 0.006383f, -0.000106f, 0.013252f, 0.014361f, 0.006402f, 0.012212f, 0.001686f, -0.009316f, 0.027446f, -0.079121f, -0.223245f, -0.183447f, 0.096635f, 0.027562f, 0.221445f, 0.395844f, 0.058594f, 0.124650f, 0.045194f, -0.316122f, -0.100132f, -0.214524f, -0.259215f, 0.007059f, 0.041119f, -0.108250f, 0.156304f, 0.204670f, 0.114761f, 0.326554f, 0.188212f, -0.042264f, -0.077808f, -0.151859f, -0.295383f, -0.233297f, -0.068946f, -0.208061f, -0.029212f, 0.179106f, 0.029697f, 0.041521f, 0.270858f, 0.138082f, 0.085303f, 0.282439f, 0.043300f, -0.078254f, 0.110255f, -0.148259f, -0.293472f, -0.122928f, -0.247641f, -0.309837f, -0.004778f, -0.064879f, -0.081749f, 0.205983f, 0.226993f, 0.144388f, 0.342612f, 0.276427f, 0.130251f, 0.117809f, + 0.068081f, -0.229327f, -0.211017f, -0.267116f, -0.352661f, -0.282774f, -0.119491f, -0.082122f, 0.006969f, 0.202381f, 0.246093f, 0.257673f, 0.246947f, 0.228875f, 0.048598f, 0.004047f, -0.039178f, -0.174836f, -0.191613f, -0.110781f, -0.200907f, -0.084623f, 0.017226f, -0.043973f, 0.100401f, 0.180985f, 0.055116f, 0.076357f, 0.033761f, -0.049645f, -0.031146f, -0.075894f, -0.098812f, -0.012012f, 0.027421f, 0.000606f, 0.080974f, 0.074845f, 0.008225f, 0.072049f, -0.000271f, -0.091537f, 0.080360f, 0.024143f, -0.081568f, 0.056988f, -0.060496f, -0.122267f, 0.055492f, -0.087046f, -0.215568f, 0.003266f, -0.095064f, -0.062808f, 0.213069f, 0.096437f, 0.101157f, 0.305180f, 0.202109f, 0.112233f, 0.132974f, -0.033309f, -0.193255f, -0.245372f, -0.333350f, -0.368539f, -0.234088f, -0.149449f, -0.026028f, 0.140169f, 0.311983f, 0.344648f, 0.319330f, 0.332751f, 0.177714f, 0.008173f, -0.085083f, -0.219104f, -0.280492f, -0.181406f, -0.202647f, -0.161197f, -0.032548f, 0.006162f, 0.021497f, 0.079652f, 0.067659f, 0.059443f, 0.105341f, 0.105430f, 0.089093f, 0.105488f, 0.073632f, 0.026613f, -0.005336f, -0.040966f, + -0.096908f, -0.102218f, -0.075694f, -0.059645f, -0.025891f, -0.008577f, -0.005999f, -0.007146f}, + {-0.019694f, -0.023970f, 0.012087f, -0.004389f, 0.010571f, -0.005251f, -0.005372f, -0.010723f, 0.002526f, 0.002273f, -0.000481f, 0.000174f, -0.001204f, -0.008202f, -0.000955f, -0.004690f, -0.005396f, -0.005112f, -0.000199f, 0.000616f, -0.000412f, -0.000923f, 0.004064f, -0.001129f, -0.012413f, 0.007721f, 0.003833f, -0.004227f, 0.001235f, -0.000120f, 0.000127f, 0.001743f, 0.007971f, -0.004446f, 0.000465f, -0.014062f, 0.007002f, 0.001384f, 0.003158f, 0.004861f, 0.007891f, -0.004416f, -0.003366f, -0.001597f, -0.007080f, 0.000567f, -0.001073f, 0.006113f, -0.003296f, -0.000419f, -0.003432f, -0.003922f, 0.007435f, -0.005611f, -0.002722f, 0.000699f, -0.005102f, 0.004252f, -0.000200f, -0.002392f, 0.004594f, 0.008445f, 0.000520f, -0.000328f, -0.001196f, 0.007220f, -0.007186f, 0.000063f, -0.001132f, 0.003778f, -0.001777f, -0.003288f, 0.007844f, -0.000139f, 0.001647f, -0.002182f, 0.001619f, 0.004223f, -0.003396f, -0.004736f, 0.000229f, 0.004123f, 0.006915f, -0.003119f, -0.002123f, 0.001704f, 0.000364f, 0.001058f, -0.003188f, -0.001025f, 0.001884f, -0.000429f, 0.001321f, -0.002513f, -0.000793f, -0.001551f, + -0.002178f, -0.001570f, -0.001468f, 0.001101f, 0.000184f, -0.001100f, 0.001095f, 0.000759f, -0.001005f, -0.000311f, -0.000256f, -0.001363f, -0.002458f, -0.000689f, -0.000010f, 0.000504f, 0.001316f, -0.028580f, 0.004858f, 0.003377f, 0.010017f, -0.003927f, 0.003035f, 0.011647f, -0.004512f, 0.003183f, -0.007068f, -0.010370f, 0.003793f, -0.007060f, -0.008059f, -0.008084f, 0.002432f, 0.003083f, -0.013794f, 0.008107f, 0.005372f, -0.002347f, -0.005053f, 0.003226f, -0.001259f, -0.003142f, 0.000995f, 0.004571f, 0.003377f, 0.007302f, 0.001405f, -0.002224f, 0.007513f, -0.003782f, 0.016391f, 0.003691f, 0.010097f, 0.003893f, 0.008858f, 0.003946f, 0.006103f, 0.003306f, 0.000725f, 0.000340f, 0.012402f, 0.002104f, -0.001997f, 0.000821f, 0.006546f, 0.004853f, 0.000708f, -0.000555f, -0.002556f, 0.001383f, 0.015131f, 0.004342f, 0.006990f, -0.007313f, -0.003770f, -0.007713f, -0.004884f, -0.007487f, 0.005617f, 0.003552f, -0.004793f, -0.003408f, 0.003363f, -0.003567f, 0.003754f, -0.001678f, -0.001145f, -0.005178f, -0.008743f, 0.003761f, -0.014195f, -0.002003f, -0.003041f, -0.003588f, 0.000757f, -0.003310f, + 0.000650f, 0.005344f, 0.002572f, -0.003637f, 0.000644f, -0.002884f, -0.006194f, -0.000998f, 0.002946f, -0.000301f, -0.004788f, 0.001737f, 0.000856f, 0.001814f, 0.003246f, 0.000131f, 0.000437f, -0.002241f, -0.001382f, -0.000328f, -0.000061f, 0.001179f, -0.002605f, -0.002203f, 0.016088f, 0.022167f, -0.006790f, 0.005962f, -0.011010f, -0.000581f, 0.000659f, 0.028323f, -0.002895f, -0.007478f, -0.012204f, 0.000292f, 0.008128f, 0.013033f, -0.002935f, -0.017087f, -0.004916f, -0.006509f, -0.004667f, 0.005819f, -0.001253f, 0.010887f, 0.001214f, -0.006142f, -0.013825f, 0.004159f, -0.001295f, 0.003225f, -0.001667f, 0.001574f, 0.006777f, 0.002498f, -0.017396f, 0.002108f, 0.011193f, 0.005518f, 0.001377f, 0.002693f, -0.002795f, 0.007769f, -0.010286f, -0.000990f, 0.008486f, -0.005839f, 0.000001f, 0.013801f, -0.006368f, -0.000637f, -0.004673f, 0.008496f, -0.008921f, -0.006605f, 0.004128f, -0.009236f, -0.004562f, 0.012053f, 0.007076f, -0.010742f, -0.003968f, -0.001600f, -0.002671f, -0.004888f, 0.003863f, -0.004193f, 0.004431f, -0.000116f, 0.000659f, 0.001958f, 0.009085f, -0.001017f, 0.012525f, 0.006491f, + -0.009620f, -0.004416f, -0.004696f, 0.007542f, 0.002241f, -0.000489f, -0.003866f, 0.010093f, 0.003880f, -0.000169f, -0.000219f, -0.002500f, -0.002313f, 0.003010f, 0.001160f, 0.003337f, 0.007859f, 0.002877f, -0.000425f, 0.000536f, 0.000634f, 0.002572f, -0.000523f, 0.000994f, 0.003758f, 0.000841f, 0.004651f, 0.000179f, 0.001647f, 0.002405f, 0.002851f, 0.001048f, 0.001806f, 0.002094f, 0.001703f, 0.002700f, -0.000817f, 0.000851f, 0.001833f, 0.002765f, -0.000234f, -0.002054f, -0.002449f, 0.000632f, 0.052881f, -0.019537f, 0.010732f, -0.014920f, -0.001548f, 0.000528f, -0.001084f, -0.007908f, 0.004335f, 0.006087f, 0.001483f, -0.005752f, -0.012248f, -0.000457f, 0.007489f, 0.005321f, -0.005384f, -0.009221f, -0.000740f, 0.008262f, 0.015088f, -0.008136f, -0.001092f, -0.006142f, -0.013201f, 0.001480f, -0.006641f, 0.004010f, -0.004917f, 0.010274f, -0.018028f, 0.012176f, -0.000799f, -0.010731f, 0.002614f, 0.004523f, -0.001273f, -0.005681f, 0.000351f, 0.014107f, -0.000534f, 0.002327f, -0.001997f, 0.005403f, 0.002484f, -0.003325f, -0.005301f, -0.011589f, 0.007513f, -0.002421f, -0.003418f, 0.004466f, + 0.000072f, -0.019483f, 0.014969f, -0.020970f, -0.012115f, -0.014849f, 0.003194f, -0.001734f, 0.008895f, -0.004857f, 0.004726f, -0.008935f, 0.004290f, -0.002331f, -0.003670f, -0.009858f, 0.006030f, 0.006957f, 0.011863f, -0.002877f, -0.001152f, 0.003231f, -0.003626f, -0.002119f, 0.002270f, 0.006880f, -0.009106f, 0.004509f, 0.006509f, 0.007271f, -0.011536f, -0.009395f, 0.003925f, -0.005867f, 0.002982f, -0.000081f, -0.000713f, 0.001031f, 0.001425f, -0.000471f, 0.002694f, -0.003334f, 0.001606f, -0.001021f, 0.006708f, 0.000423f, 0.001623f, 0.001539f, 0.000403f, -0.002628f, -0.000259f, 0.000685f, -0.000767f, -0.041754f, 0.004216f, 0.000404f, -0.003579f, -0.006472f, 0.007264f, -0.005697f, 0.004822f, -0.001536f, -0.000108f, 0.006707f, 0.008746f, -0.005438f, 0.006434f, -0.001923f, -0.003600f, -0.011740f, -0.000607f, -0.015849f, -0.011641f, 0.013881f, 0.004935f, -0.005426f, -0.002001f, -0.001669f, 0.009629f, 0.005062f, -0.004998f, 0.008772f, 0.005830f, 0.003419f, 0.003018f, 0.003715f, 0.006680f, 0.005740f, 0.005670f, 0.015528f, 0.013978f, 0.006017f, 0.001526f, -0.009703f, 0.010742f, -0.014400f, + 0.002816f, -0.004033f, 0.011639f, -0.008821f, -0.011461f, 0.019631f, -0.004603f, -0.010560f, -0.009416f, 0.014605f, 0.008961f, 0.000511f, 0.007501f, 0.010595f, 0.004850f, 0.017151f, -0.001046f, -0.002736f, 0.009724f, 0.005934f, 0.000550f, 0.000361f, -0.008959f, 0.005335f, 0.005551f, 0.013840f, 0.005621f, 0.008608f, -0.005352f, -0.007150f, -0.015161f, -0.003504f, -0.008211f, -0.006537f, -0.006919f, 0.007620f, -0.000297f, 0.000562f, -0.004459f, -0.005156f, -0.001450f, -0.004540f, 0.001373f, -0.003069f, -0.005044f, 0.002028f, -0.000521f, 0.000157f, -0.004723f, -0.000717f, 0.000166f, -0.005945f, -0.000839f, -0.001442f, 0.000366f, -0.002691f, -0.003101f, -0.001939f, -0.001169f, 0.000070f, -0.001017f, 0.000901f, -0.001414f, 0.001616f, 0.000367f, 0.001424f, 0.003214f, -0.000784f, 0.003395f, 0.000664f, 0.002219f, -0.001611f, 0.000668f, -0.003003f, -0.001136f, -0.000541f, -0.003602f, -0.001147f, -0.001789f, -0.055636f, 0.014882f, -0.011907f, -0.017588f, -0.017391f, 0.010731f, -0.012918f, 0.009474f, -0.016218f, 0.008872f, 0.007572f, 0.004640f, -0.017071f, 0.011631f, -0.000245f, 0.007026f, -0.014150f, + 0.007821f, 0.016656f, 0.012723f, 0.000423f, -0.006020f, 0.002310f, -0.003646f, -0.018038f, -0.003686f, -0.008689f, 0.004079f, -0.011360f, 0.009682f, 0.009497f, -0.003808f, -0.000458f, 0.013338f, -0.002972f, 0.009036f, -0.007343f, -0.011703f, 0.006038f, -0.000243f, 0.006249f, 0.016417f, 0.009977f, -0.000656f, -0.028733f, -0.013799f, -0.004024f, 0.003941f, -0.004454f, 0.015761f, -0.024968f, 0.007850f, 0.003344f, -0.000293f, 0.007775f, -0.003272f, 0.012068f, -0.026175f, -0.012238f, 0.010084f, -0.026305f, -0.004911f, 0.012217f, 0.004348f, -0.005843f, -0.017561f, 0.006465f, 0.011264f, 0.008255f, -0.003171f, -0.018422f, -0.001628f, 0.000098f, -0.002129f, -0.001023f, -0.009044f, 0.004038f, -0.014442f, 0.008813f, 0.001202f, -0.008584f, 0.001646f, -0.010317f, 0.000736f, -0.012332f, -0.003485f, 0.004267f, 0.004487f, 0.000359f, -0.001228f, -0.004277f, -0.003241f, 0.000818f, -0.007268f, 0.005775f, 0.000400f, -0.003536f, -0.000024f, -0.006276f, -0.004964f, 0.001350f, -0.002612f, 0.003340f, -0.003331f, -0.001872f, -0.002200f, -0.002404f, -0.004267f, -0.000751f, -0.002403f, -0.000976f, 0.001131f, -0.001023f, + -0.001952f, 0.001511f, -0.000817f, -0.001667f, -0.001717f, -0.003776f, -0.002672f, 0.000461f, 0.001925f, -0.000604f, -0.026145f, 0.002820f, 0.004359f, 0.020479f, -0.019342f, 0.022361f, 0.006342f, -0.001809f, -0.005250f, -0.002419f, 0.002080f, -0.016361f, -0.003125f, 0.005231f, -0.005365f, -0.009610f, -0.002585f, 0.015455f, -0.015969f, -0.003492f, 0.016021f, 0.000055f, -0.006333f, 0.005627f, -0.007771f, 0.011760f, 0.005197f, -0.000173f, 0.005911f, -0.006863f, -0.010744f, -0.000796f, 0.000846f, 0.008787f, -0.018853f, -0.010210f, -0.008304f, -0.005865f, -0.005564f, -0.005756f, 0.002864f, 0.000889f, 0.001605f, -0.014127f, -0.014430f, -0.011528f, 0.000457f, -0.018141f, -0.009954f, 0.010793f, -0.007285f, 0.002346f, 0.001203f, -0.000392f, 0.004574f, 0.006376f, 0.006179f, 0.007223f, 0.010735f, -0.001947f, 0.011612f, -0.000801f, 0.005904f, -0.001029f, -0.007352f, -0.000506f, -0.011895f, 0.007325f, -0.013931f, 0.013003f, -0.015551f, -0.000312f, -0.016040f, 0.001453f, -0.016114f, -0.015655f, 0.007456f, 0.021368f, 0.006561f, -0.013915f, 0.009957f, -0.000086f, -0.006021f, -0.003738f, -0.006310f, 0.008442f, + 0.007452f, 0.010400f, 0.001994f, 0.008087f, -0.006803f, -0.000839f, 0.008127f, 0.000846f, 0.002592f, 0.001482f, -0.003780f, 0.004704f, -0.000312f, 0.001686f, 0.007232f, 0.001978f, -0.001638f, -0.004354f, -0.001817f, 0.002822f, 0.003042f, 0.002205f, 0.000967f, -0.003423f, 0.000406f, -0.000821f, -0.007290f, 0.007111f, 0.000995f, 0.002522f, 0.000504f, -0.001892f, -0.003354f, 0.002417f, -0.003418f, -0.001848f, 0.072707f, 0.000878f, -0.020960f, 0.003311f, -0.011379f, 0.028993f, -0.004742f, 0.008164f, 0.002122f, 0.001414f, -0.025472f, -0.013046f, 0.014125f, 0.012424f, -0.020072f, -0.003515f, -0.000612f, 0.017874f, 0.008782f, 0.006809f, 0.017512f, 0.002768f, 0.001145f, 0.015216f, -0.005322f, -0.023143f, 0.003420f, 0.017718f, 0.010477f, -0.006693f, 0.000347f, 0.012359f, 0.007522f, 0.003388f, -0.000667f, -0.012980f, 0.006314f, -0.014119f, 0.001398f, -0.026592f, 0.006966f, 0.008205f, -0.002163f, -0.012231f, 0.016880f, 0.008894f, -0.003511f, 0.013148f, 0.006047f, -0.011063f, 0.020267f, 0.002199f, -0.007200f, 0.004721f, 0.020782f, 0.003251f, -0.000548f, -0.017335f, -0.010131f, 0.002447f, + 0.007039f, 0.023713f, -0.007824f, -0.009377f, 0.002045f, 0.012951f, -0.008367f, -0.010258f, -0.000935f, 0.017242f, 0.012322f, -0.004276f, -0.013234f, -0.000675f, 0.015036f, -0.005970f, 0.031236f, 0.006828f, 0.004661f, -0.015974f, 0.013566f, 0.000841f, -0.003463f, -0.008107f, 0.000794f, -0.004518f, 0.000830f, 0.019347f, 0.008806f, 0.007065f, 0.003686f, 0.002263f, 0.000317f, -0.001227f, 0.001787f, 0.003918f, 0.006970f, 0.001110f, 0.001255f, 0.002596f, -0.005293f, 0.000148f, 0.002295f, -0.001158f, 0.006070f, -0.004269f, -0.000120f, -0.002073f, 0.002391f, 0.010299f, 0.003515f, -0.003172f, -0.000760f, 0.002482f, 0.000878f, 0.003464f, -0.000655f, -0.004390f, 0.004104f, 0.003707f, -0.003455f, -0.000901f, 0.009067f, 0.003132f, 0.016389f, 0.008703f, -0.025860f, -0.002693f, -0.013087f, 0.025961f, -0.009769f, 0.012091f, 0.002294f, 0.016250f, 0.006392f, 0.002394f, -0.001364f, 0.006591f, -0.007457f, -0.011054f, -0.030602f, -0.022641f, 0.007448f, 0.020114f, 0.026984f, -0.009958f, -0.013231f, -0.011628f, 0.005994f, -0.006380f, -0.001413f, -0.001107f, 0.003603f, 0.004101f, 0.018002f, -0.009624f, + 0.001657f, 0.004433f, 0.008772f, -0.008734f, -0.006515f, -0.014405f, -0.009796f, -0.010045f, -0.017177f, -0.043495f, -0.000547f, -0.005833f, -0.018730f, 0.004190f, -0.002151f, -0.023591f, 0.007882f, -0.020005f, 0.005088f, -0.002432f, -0.001681f, 0.010147f, 0.013104f, -0.000378f, -0.019547f, 0.005745f, -0.012285f, -0.013508f, 0.018737f, 0.016963f, 0.018874f, -0.006166f, 0.003025f, 0.002518f, -0.009690f, 0.001506f, -0.004676f, 0.029633f, -0.004932f, -0.003039f, -0.002974f, -0.000201f, -0.018125f, -0.022382f, 0.005288f, -0.001622f, -0.001702f, 0.005077f, 0.032197f, -0.003964f, -0.015140f, -0.006351f, 0.016885f, -0.002444f, -0.005528f, -0.004846f, -0.000382f, -0.013704f, 0.003285f, -0.002609f, 0.002531f, -0.006906f, 0.000269f, -0.008693f, -0.000775f, -0.000519f, 0.003494f, -0.003624f, -0.001833f, -0.005293f, 0.007167f, 0.000501f, -0.005329f, 0.001225f, 0.002345f, -0.005610f, 0.001404f, 0.002283f, 0.008769f, -0.001777f, 0.001992f, 0.006299f, 0.003808f, -0.003162f, 0.003687f, -0.006639f, -0.011000f, 0.001404f, 0.000989f, -0.004065f, -0.010261f, -0.002014f, -0.002577f, 0.009128f, 0.003290f, 0.006156f, + -0.001109f, 0.007666f, 0.008384f, -0.028499f, 0.010459f, 0.003420f, 0.029997f, -0.020271f, -0.011500f, -0.006768f, 0.015996f, -0.015369f, -0.014763f, 0.013239f, 0.008902f, -0.015547f, -0.015670f, -0.015354f, -0.034280f, 0.022421f, 0.021059f, 0.022321f, -0.009676f, 0.007021f, 0.022166f, -0.032233f, 0.000008f, 0.021071f, 0.019550f, 0.008833f, -0.000085f, -0.010355f, 0.002120f, -0.005015f, -0.027874f, 0.003478f, 0.007598f, 0.004036f, 0.018437f, -0.016327f, 0.001725f, -0.030470f, -0.003888f, 0.005962f, -0.016740f, 0.006413f, 0.005109f, 0.013556f, 0.016609f, 0.023090f, -0.004757f, -0.009136f, -0.027957f, -0.019989f, 0.008595f, 0.040988f, -0.012756f, -0.001758f, -0.018936f, -0.010072f, -0.015026f, 0.008791f, 0.009073f, -0.003207f, 0.001326f, -0.030086f, -0.003978f, 0.020277f, -0.016243f, -0.014119f, 0.012046f, -0.005474f, 0.017634f, 0.004312f, -0.012977f, 0.002037f, -0.019599f, -0.005700f, -0.005182f, 0.037734f, -0.003790f, -0.011122f, 0.008271f, 0.007656f, -0.003325f, -0.006487f, -0.001935f, -0.005227f, -0.007029f, -0.006602f, -0.005008f, 0.002594f, 0.002934f, 0.006032f, -0.001575f, -0.000157f, + -0.003644f, 0.003629f, 0.000956f, -0.009760f, 0.002596f, -0.000150f, -0.001049f, 0.003442f, -0.000215f, -0.005360f, -0.005237f, -0.012596f, 0.004181f, -0.004010f, 0.003704f, 0.004721f, -0.005889f, 0.002627f, 0.001716f, -0.001322f, 0.004760f, -0.000047f, 0.013590f, 0.001840f, -0.002456f, 0.000258f, -0.003938f, -0.000777f, 0.002377f, 0.000318f, -0.001172f, 0.001039f, -0.005296f, 0.004182f, -0.017825f, 0.040773f, -0.020303f, -0.010523f, -0.000956f, -0.001495f, -0.029178f, 0.001727f, -0.021520f, 0.015315f, -0.040328f, -0.006001f, -0.012978f, 0.013579f, -0.013952f, -0.014056f, -0.034134f, 0.022777f, -0.014102f, 0.009277f, -0.011057f, 0.006712f, 0.017999f, -0.013298f, -0.022411f, -0.007634f, 0.015157f, 0.031529f, 0.010074f, 0.013120f, 0.001469f, -0.032035f, -0.017178f, -0.017334f, -0.008940f, 0.005438f, 0.028821f, 0.012324f, 0.016747f, 0.015654f, -0.004516f, -0.006875f, -0.009819f, -0.026801f, 0.001356f, -0.018745f, 0.028774f, -0.013339f, 0.019790f, 0.004120f, -0.010496f, 0.006528f, -0.007018f, -0.009178f, -0.015814f, 0.023578f, 0.006122f, 0.039930f, 0.008682f, -0.043261f, -0.010845f, 0.013690f, + 0.011127f, 0.006173f, -0.002531f, 0.003689f, 0.045036f, 0.022436f, -0.007724f, 0.004721f, -0.012248f, 0.032569f, -0.001349f, -0.001421f, 0.012634f, -0.028948f, -0.012532f, -0.009937f, -0.030913f, -0.036645f, 0.007144f, 0.012881f, -0.003513f, -0.018137f, -0.004807f, -0.005879f, -0.014228f, 0.000064f, -0.002985f, -0.011344f, 0.011020f, 0.016903f, -0.003852f, -0.002684f, -0.002683f, -0.006878f, 0.004787f, 0.000967f, -0.002054f, -0.003632f, -0.003083f, -0.002207f, 0.005511f, -0.003488f, -0.008154f, -0.002164f, -0.000508f, 0.002370f, 0.001484f, -0.005124f, 0.011939f, -0.004178f, 0.007202f, -0.001649f, 0.005992f, 0.002998f, -0.002080f, -0.008440f, -0.008009f, 0.002469f, -0.002278f, -0.012646f, -0.004696f, -0.003299f, 0.004421f, 0.000900f, -0.001070f, 0.003208f, 0.005544f, 0.001661f, -0.003544f, -0.005378f, -0.024836f, 0.015014f, 0.033434f, -0.003181f, -0.001346f, -0.000676f, 0.031082f, 0.009691f, 0.007525f, 0.005385f, 0.003761f, 0.005358f, -0.012110f, 0.002359f, -0.038293f, 0.005590f, -0.018402f, 0.016116f, 0.039361f, -0.005028f, 0.002959f, -0.030907f, 0.041490f, 0.020143f, 0.017686f, -0.005090f, + -0.022659f, 0.002802f, -0.007664f, 0.021062f, 0.015166f, -0.018760f, 0.001109f, 0.011136f, 0.007938f, -0.014513f, -0.012827f, 0.060691f, -0.013958f, -0.010524f, 0.012891f, -0.015395f, -0.011151f, 0.019325f, 0.018999f, 0.000787f, 0.007379f, 0.006905f, -0.023360f, -0.011641f, -0.000890f, 0.008030f, 0.020661f, 0.005110f, 0.004966f, -0.026485f, -0.002390f, 0.007848f, -0.036072f, 0.007957f, -0.009950f, -0.003635f, -0.006558f, 0.010662f, -0.010647f, -0.019629f, -0.020882f, -0.033224f, 0.004321f, -0.013460f, -0.006370f, 0.021297f, -0.007094f, 0.006914f, -0.037373f, -0.000066f, 0.034661f, 0.008079f, -0.017315f, -0.010378f, 0.021106f, 0.010753f, -0.022880f, 0.012909f, -0.016533f, -0.012848f, -0.005356f, -0.003230f, 0.007963f, -0.002236f, 0.001484f, -0.003571f, -0.004460f, 0.002768f, 0.004309f, -0.005865f, 0.005107f, 0.015235f, 0.002492f, -0.002100f, 0.006654f, 0.009620f, -0.003975f, 0.006539f, -0.004169f, -0.005941f, 0.001788f, 0.004341f, 0.012792f, 0.003322f, -0.001117f, 0.004589f, -0.001809f, 0.006517f, -0.003572f, 0.005988f, -0.004458f, 0.001974f, 0.005412f, 0.001516f, -0.008644f, -0.005018f, + 0.016203f, -0.006844f, -0.012741f, 0.006317f, 0.003485f, 0.004703f, -0.003267f, 0.020571f, 0.006134f, -0.019237f, -0.019314f, 0.045698f, -0.027456f, 0.007075f, -0.017574f, 0.053886f, 0.011402f, 0.009909f, -0.017310f, -0.020477f, 0.001904f, 0.015345f, -0.016603f, -0.026446f, -0.015737f, -0.038425f, -0.015004f, -0.022590f, -0.000098f, -0.051621f, 0.003554f, 0.027855f, 0.017140f, 0.022754f, -0.015985f, 0.005882f, 0.024730f, -0.002943f, 0.017919f, 0.006611f, 0.027957f, -0.014121f, 0.023309f, 0.018504f, 0.013235f, 0.030280f, -0.017041f, 0.018009f, -0.009329f, -0.010863f, -0.007202f, 0.006640f, -0.058887f, -0.018890f, -0.036615f, 0.042274f, -0.026717f, -0.030194f, -0.006476f, 0.023825f, 0.000641f, -0.010837f, 0.033281f, -0.011975f, -0.010582f, -0.024243f, -0.059544f, 0.002820f, 0.005516f, 0.024740f, -0.024973f, 0.000005f, -0.015229f, -0.020147f, 0.031826f, -0.006496f, 0.015942f, -0.034687f, -0.033707f, -0.021090f, 0.026536f, -0.002802f, -0.016809f, -0.017908f, -0.000708f, -0.029431f, -0.020042f, 0.002786f, -0.012308f, -0.021968f, 0.032307f, -0.044396f, -0.042226f, 0.010977f, 0.000196f, 0.018591f, + 0.002162f, -0.002108f, -0.013602f, -0.012102f, 0.002009f, -0.021029f, -0.008416f, 0.017787f, 0.002409f, 0.002991f, -0.010321f, 0.010503f, 0.003970f, -0.011517f, 0.005413f, -0.008556f, -0.001684f, -0.008772f, 0.007631f, -0.011648f, -0.002841f, 0.007819f, 0.015430f, 0.001651f, 0.000704f, -0.016793f, -0.004982f, -0.001212f, 0.002516f, -0.002536f, 0.014327f, -0.000661f, -0.005352f, 0.009042f, -0.010507f, -0.009808f, 0.006110f, 0.012945f, -0.003542f, -0.009289f, -0.012410f, 0.009953f, 0.008191f, 0.016071f, -0.022284f, -0.000309f, 0.029517f, 0.003739f, -0.009127f, 0.015151f, -0.024261f, 0.047830f, 0.029972f, -0.000451f, -0.022102f, -0.024991f, 0.010204f, -0.006422f, -0.002399f, -0.001482f, 0.043625f, -0.021666f, 0.000659f, -0.015127f, 0.015962f, -0.027374f, -0.025087f, -0.049251f, 0.011226f, -0.020121f, -0.027740f, -0.003543f, -0.046815f, -0.023105f, 0.013029f, 0.009774f, -0.006547f, 0.024121f, 0.002124f, 0.029275f, -0.013144f, -0.040765f, -0.006309f, -0.029913f, -0.005809f, -0.009109f, -0.039057f, 0.004913f, 0.031573f, -0.089461f, 0.011175f, 0.000046f, 0.022014f, -0.004608f, -0.027920f, -0.053157f, + 0.020996f, -0.006679f, 0.019616f, 0.011647f, -0.006578f, 0.030746f, -0.038579f, 0.053747f, -0.013641f, 0.029908f, 0.062803f, 0.025004f, 0.044656f, 0.017431f, 0.011640f, -0.006281f, 0.023275f, -0.008867f, -0.024572f, -0.033148f, -0.021393f, -0.001280f, 0.018463f, -0.003210f, -0.014497f, -0.020639f, -0.018408f, 0.024744f, -0.011189f, -0.009150f, 0.022253f, 0.003901f, 0.016742f, -0.001906f, -0.002519f, -0.006954f, 0.003883f, 0.008293f, -0.011497f, -0.002016f, -0.028022f, -0.020354f, 0.013677f, -0.006971f, -0.000767f, -0.004235f, -0.000586f, -0.010827f, -0.016785f, 0.011975f, -0.010120f, 0.015608f, -0.016141f, -0.007560f, -0.001829f, -0.011438f, -0.005713f, 0.007786f, 0.003262f, 0.018959f, -0.004833f, -0.011556f, 0.007188f, -0.022967f, 0.000358f, 0.002635f, -0.003565f, 0.001338f, -0.002556f, 0.011085f, 0.016174f, 0.002608f, -0.000584f, -0.007962f, -0.013538f, -0.006708f, 0.000780f, 0.026354f, 0.013283f, -0.013516f, 0.075298f, 0.061362f, 0.055297f, -0.012569f, 0.000166f, -0.046907f, 0.035100f, 0.043530f, 0.014828f, 0.042049f, 0.016808f, 0.014308f, 0.014781f, -0.007406f, 0.005842f, 0.011648f, + -0.010689f, -0.045196f, -0.027423f, -0.001655f, -0.030011f, -0.034993f, -0.082192f, 0.018081f, 0.014239f, 0.021448f, -0.015714f, -0.005609f, -0.010911f, 0.000594f, -0.025684f, -0.000725f, -0.019563f, 0.022774f, 0.018977f, -0.011734f, -0.015911f, -0.043348f, 0.073059f, -0.022797f, 0.014452f, -0.000025f, 0.004736f, 0.011660f, -0.030155f, 0.036419f, -0.018332f, 0.012450f, 0.008199f, -0.027212f, -0.028008f, -0.005193f, -0.002416f, 0.016917f, 0.077117f, -0.006441f, 0.011503f, 0.002555f, 0.023289f, 0.016545f, 0.017362f, -0.013619f, -0.004018f, 0.006665f, -0.037207f, 0.007572f, -0.031833f, -0.050910f, 0.017788f, 0.001616f, 0.004085f, -0.037273f, -0.089532f, 0.038738f, 0.040515f, 0.027883f, -0.050752f, 0.048369f, 0.051454f, 0.019014f, 0.014970f, 0.000453f, -0.014747f, -0.033838f, 0.025390f, -0.023845f, 0.001608f, 0.000417f, -0.013364f, 0.010217f, -0.024232f, -0.002545f, -0.004679f, 0.012019f, -0.006663f, -0.011201f, -0.015023f, 0.023136f, -0.012610f, -0.005527f, 0.006121f, -0.020815f, 0.011655f, 0.009451f, -0.007107f, -0.007298f, 0.002118f, -0.019339f, 0.017976f, -0.006503f, -0.004724f, -0.001636f, + 0.001625f, 0.013156f, -0.010268f, -0.024451f, 0.007391f, -0.013641f, -0.004100f, -0.013980f, -0.012247f, 0.001885f, -0.009877f, -0.004610f, -0.009190f, 0.031350f, -0.013774f, -0.025523f, 0.004161f, -0.009178f, -0.044161f, -0.088124f, 0.073101f, 0.011742f, 0.012964f, -0.029367f, -0.021147f, -0.093753f, 0.025900f, 0.067023f, 0.020543f, -0.059382f, -0.029716f, 0.009631f, -0.023123f, -0.014681f, 0.027463f, -0.030917f, 0.017252f, 0.015393f, 0.012731f, -0.034416f, 0.012284f, 0.010642f, -0.016156f, -0.032209f, -0.018650f, -0.012404f, -0.008343f, -0.030725f, -0.026502f, -0.014580f, -0.031682f, 0.024972f, -0.011833f, -0.040886f, -0.014126f, 0.025072f, -0.005195f, -0.028353f, -0.015613f, -0.014473f, -0.000107f, -0.022475f, -0.013560f, -0.037239f, -0.035384f, 0.015061f, -0.012592f, 0.046449f, 0.030527f, 0.002983f, 0.027719f, -0.040615f, 0.026255f, -0.038553f, 0.032393f, -0.005556f, 0.016570f, -0.017198f, 0.057564f, -0.014359f, 0.032237f, -0.008254f, 0.047351f, 0.019064f, 0.011523f, -0.048876f, 0.053012f, 0.042428f, 0.018481f, 0.019713f, -0.038116f, -0.007281f, 0.015607f, 0.026043f, -0.006751f, 0.006285f, + -0.042101f, 0.027015f, 0.046195f, -0.001019f, -0.033059f, -0.001931f, -0.021857f, -0.018727f, 0.009058f, -0.000110f, -0.009120f, 0.010672f, -0.024119f, -0.005679f, 0.000946f, 0.006870f, -0.016622f, -0.022848f, 0.008813f, -0.011132f, -0.021542f, -0.038692f, -0.002815f, 0.012006f, -0.003192f, -0.019487f, -0.023455f, -0.007218f, 0.014992f, -0.016163f, 0.006248f, 0.008655f, 0.002493f, 0.006362f, -0.001935f, -0.010400f, -0.008710f, -0.002923f, 0.010868f, 0.003617f, -0.004108f, -0.014526f, 0.019984f, -0.012863f, -0.011146f, -0.009391f, 0.004103f, 0.023138f, -0.015536f, 0.022784f, 0.019360f, -0.007671f, 0.007149f, 0.012134f, -0.061150f, 0.052241f, -0.006013f, 0.025102f, -0.033656f, -0.010837f, -0.008257f, -0.007734f, -0.007721f, 0.030564f, 0.001071f, -0.025209f, 0.020588f, 0.003636f, 0.014921f, 0.025921f, 0.026242f, 0.001490f, -0.022261f, 0.092383f, -0.025068f, 0.071074f, 0.000814f, 0.004373f, -0.039890f, -0.017444f, 0.006977f, 0.034484f, 0.017318f, -0.011031f, 0.028477f, 0.005886f, -0.038462f, 0.006645f, 0.006070f, 0.040117f, -0.001071f, 0.024084f, -0.029039f, 0.000179f, 0.027472f, 0.013623f, + 0.023071f, 0.060190f, 0.048538f, -0.007321f, 0.025411f, -0.003573f, 0.047695f, -0.037685f, 0.032049f, 0.013000f, -0.001164f, 0.028507f, -0.014358f, 0.073701f, -0.012107f, 0.035711f, -0.026136f, -0.023581f, 0.001825f, 0.078504f, 0.026123f, -0.072481f, 0.065074f, -0.001083f, 0.023231f, -0.054575f, 0.019280f, 0.006551f, -0.109101f, 0.046313f, 0.084510f, 0.032456f, -0.034391f, -0.021823f, 0.017660f, 0.083038f, 0.047716f, 0.063368f, -0.022251f, -0.030323f, -0.027265f, 0.013598f, 0.017850f, -0.002490f, -0.030863f, -0.013684f, 0.039898f, 0.007398f, 0.009653f, -0.013105f, 0.018740f, -0.004189f, 0.008923f, -0.007989f, -0.009876f, -0.012165f, 0.024407f, 0.040194f, 0.039207f, 0.009174f, 0.021180f, 0.036988f, 0.024921f, 0.026223f, 0.035755f, 0.020362f, 0.034186f, 0.026002f, 0.009964f, -0.050156f, -0.009145f, -0.023142f, 0.014945f, 0.030132f, -0.033074f, -0.011456f, 0.040624f, 0.022471f, 0.005292f, -0.008691f, 0.034510f, -0.025819f, 0.006872f, 0.035550f, 0.028177f, 0.015941f, 0.019164f, 0.021962f, 0.018473f, 0.021778f, 0.014340f, -0.016643f, -0.008130f, -0.029621f, 0.037875f, 0.005952f, + 0.025289f, -0.020068f, 0.050520f, -0.017438f, 0.023663f, 0.008000f, 0.010681f, 0.007578f, 0.004631f, -0.052437f, -0.030266f, 0.000535f, 0.004989f, 0.036190f, 0.029935f, -0.042735f, 0.004599f, -0.023450f, -0.021277f, 0.010801f, 0.002851f, -0.014505f, 0.017962f, 0.069698f, -0.045869f, -0.003461f, 0.106622f, -0.064569f, 0.007800f, 0.038216f, -0.019333f, -0.015453f, 0.022216f, 0.035323f, -0.038089f, 0.019073f, -0.069226f, -0.007238f, 0.103638f, 0.004783f, 0.029462f, -0.010691f, 0.056697f, 0.057119f, -0.015572f, -0.000699f, -0.026735f, 0.006850f, -0.019741f, -0.050167f, -0.032345f, -0.059909f, -0.044348f, 0.067324f, 0.027024f, 0.020149f, 0.089202f, -0.062847f, -0.037342f, 0.011718f, 0.033437f, -0.024459f, 0.016271f, -0.026218f, 0.049367f, 0.030012f, 0.017081f, 0.036687f, 0.129274f, -0.030162f, -0.010154f, -0.035629f, -0.041680f, -0.002149f, 0.054300f, -0.042051f, -0.005608f, 0.039300f, 0.041459f, 0.049813f, 0.028596f, -0.032642f, 0.008427f, -0.017758f, -0.004088f, 0.029351f, 0.009162f, -0.001763f, 0.021346f, -0.038459f, 0.002482f, 0.001442f, 0.010465f, -0.008030f, -0.010233f, 0.024628f, + -0.008964f, -0.005096f, 0.026181f, 0.034680f, 0.026866f, 0.012742f, 0.011289f, 0.023191f, 0.006457f, 0.002595f, 0.015275f, 0.002436f, -0.009053f, 0.007686f, -0.000432f, -0.001466f, -0.044304f, 0.011609f, 0.028189f, 0.047361f, -0.011071f, -0.012226f, -0.015590f, 0.024582f, 0.026401f, -0.058878f, 0.006821f, -0.025684f, -0.004180f, 0.004304f, 0.003478f, 0.010261f, -0.015158f, -0.031593f, 0.025255f, -0.007889f, 0.058079f, -0.053385f, 0.013110f, -0.004182f, -0.017292f, -0.015793f, -0.007938f, 0.017535f, 0.010756f, 0.011795f, -0.003066f, 0.032290f, 0.005474f, -0.043086f, -0.033882f, -0.005009f, -0.019998f, -0.024943f, 0.005387f, 0.026629f, -0.004003f, -0.006512f, -0.039359f, 0.018908f, -0.006469f, 0.039693f, -0.013811f, -0.077469f, 0.009268f, -0.023245f, -0.011773f, -0.000277f, -0.062669f, -0.033286f, -0.053844f, 0.000566f, -0.004032f, -0.015481f, -0.071222f, -0.029337f, -0.006320f, 0.036757f, 0.041008f, 0.002875f, 0.003058f, 0.019589f, 0.004480f, -0.049303f, 0.042783f, 0.057886f, -0.025368f, 0.008367f, -0.025409f, 0.010075f, -0.000232f, 0.043977f, -0.049909f, -0.036678f, -0.114123f, -0.040965f, + 0.028771f, 0.045499f, 0.032733f, 0.029194f, -0.028090f, -0.009837f, 0.022807f, 0.021336f, 0.049578f, 0.022964f, 0.021222f, 0.037595f, 0.009711f, -0.042538f, -0.044898f, -0.061562f, 0.025580f, -0.039555f, 0.003534f, -0.034762f, -0.052584f, -0.080444f, 0.011465f, -0.023723f, -0.024831f, 0.006522f, 0.007698f, -0.003639f, -0.011336f, 0.001042f, 0.026505f, 0.017641f, 0.006945f, -0.010811f, 0.019247f, 0.042298f, -0.009253f, -0.024131f, -0.019013f, 0.020401f, -0.010943f, -0.010323f, -0.038048f, -0.037756f, -0.028228f, -0.064045f, -0.003198f, -0.000529f, -0.025039f, 0.010515f, 0.017470f, 0.011771f, 0.031935f, 0.007995f, 0.037646f, 0.001699f, 0.010668f, 0.040324f, -0.019586f, -0.001888f, 0.006592f, -0.001113f, -0.028046f, -0.001840f, -0.005005f, 0.048705f, -0.002651f, -0.021357f, 0.016050f, 0.005355f, 0.015063f, 0.030882f, 0.010861f, -0.091335f, 0.038424f, -0.027257f, 0.003480f, 0.064992f, 0.054439f, -0.021529f, -0.009043f, 0.033468f, -0.020776f, -0.021950f, -0.018200f, 0.004486f, -0.006208f, -0.002473f, 0.007844f, -0.007187f, 0.032102f, 0.076284f, -0.032146f, -0.059853f, 0.059799f, -0.046392f, + -0.012424f, 0.000359f, 0.074611f, 0.005667f, -0.022463f, 0.021827f, 0.020865f, -0.078093f, -0.022832f, 0.012730f, -0.002939f, -0.037175f, -0.002700f, 0.014491f, -0.114439f, -0.053167f, 0.056822f, -0.056684f, -0.062805f, -0.039032f, 0.046428f, -0.060366f, -0.094095f, 0.094635f, -0.027828f, -0.059560f, -0.003360f, 0.036827f, -0.036222f, -0.063925f, -0.001491f, 0.028778f, -0.003195f, -0.082180f, 0.019378f, -0.001428f, -0.036595f, 0.085945f, 0.081284f, -0.006381f, -0.032913f, -0.064177f, 0.099082f, 0.013549f, 0.017635f, 0.033950f, -0.024169f, -0.096206f, 0.043412f, 0.073161f, 0.058911f, -0.036570f, 0.021390f, 0.079837f, 0.046694f, -0.055591f, -0.012008f, -0.043652f, 0.019749f, 0.011808f, 0.050613f, 0.049537f, -0.059562f, -0.002261f, -0.006006f, 0.008785f, -0.022983f, 0.023828f, -0.014954f, 0.013727f, 0.012860f, 0.009999f, -0.016549f, 0.012927f, -0.024872f, 0.041494f, -0.020783f, -0.010796f, 0.026863f, 0.022964f, -0.023669f, 0.003695f, -0.010822f, -0.028195f, -0.014569f, 0.011152f, 0.022593f, 0.013411f, -0.022217f, 0.012632f, -0.014087f, -0.035020f, 0.002263f, 0.006149f, -0.005032f, -0.002951f, + 0.024359f, 0.001425f, 0.003243f, 0.011117f, -0.002579f, 0.005958f, -0.036781f, 0.028064f, -0.094545f, 0.010399f, 0.089163f, 0.048533f, 0.012493f, -0.001166f, -0.016111f, 0.023138f, -0.031406f, 0.074000f, -0.005619f, 0.019690f, 0.027386f, -0.025537f, 0.001034f, -0.003279f, -0.028170f, -0.000180f, 0.010750f, 0.041465f, -0.000096f, -0.025856f, 0.012869f, 0.033342f, -0.005473f, 0.052890f, -0.041084f, 0.008503f, 0.012008f, 0.013729f, 0.046002f, -0.025262f, 0.004122f, -0.001843f, -0.059857f, 0.008398f, -0.019515f, -0.032871f, 0.014096f, -0.012592f, 0.047192f, 0.033803f, -0.024618f, -0.053893f, 0.025628f, 0.005048f, 0.010862f, 0.029866f, 0.065476f, -0.011317f, 0.013650f, -0.026730f, 0.037627f, 0.026668f, 0.028160f, -0.031357f, 0.043087f, -0.014953f, -0.018648f, -0.037809f, -0.003248f, -0.015061f, 0.055769f, -0.041681f, 0.003130f, 0.013560f, -0.012555f, -0.025522f, 0.077835f, -0.003596f, 0.018588f, -0.007331f, 0.009516f, -0.006658f, 0.021943f, -0.002910f, -0.009305f, -0.006449f, -0.008166f, 0.025780f, 0.018229f, 0.024256f, 0.013787f, 0.007650f, -0.016563f, 0.017892f, 0.001621f, 0.009878f, + 0.008797f, 0.021801f, -0.002888f, 0.000681f, 0.003741f, 0.006918f, 0.007463f, 0.016219f, -0.013283f, 0.010197f, 0.009199f, 0.007934f, 0.006964f, 0.005471f, 0.016193f, 0.006081f, -0.020716f, 0.012617f, 0.014777f, 0.015128f, 0.006867f, 0.016257f, 0.004749f, -0.001108f, 0.009502f, 0.005236f, 0.012020f, -0.001040f, -0.010178f, 0.002498f, 0.016556f, -0.008351f, 0.007038f, 0.000765f, 0.018010f, 0.015874f, 0.006452f, 0.011130f, 0.016775f, 0.007634f, 0.031216f, -0.082557f, -0.231910f, -0.220492f, 0.095980f, 0.009515f, 0.212197f, 0.449424f, 0.098482f, 0.181207f, 0.096695f, -0.333153f, -0.149078f, -0.224016f, -0.329083f, -0.021933f, 0.038990f, -0.155371f, 0.138290f, 0.235248f, 0.144047f, 0.405030f, 0.248571f, 0.002433f, -0.037388f, -0.143113f, -0.357555f, -0.289546f, -0.124779f, -0.274261f, -0.080923f, 0.157069f, 0.046682f, 0.039891f, 0.370911f, 0.143264f, 0.090370f, 0.343445f, 0.016278f, -0.017158f, 0.158268f, -0.078612f, -0.282986f, -0.136813f, -0.282780f, -0.412862f, -0.045759f, -0.187436f, -0.153194f, 0.132450f, 0.256414f, 0.118850f, 0.453101f, 0.361234f, 0.209325f, 0.274401f, + 0.092888f, -0.134163f, -0.207132f, -0.275856f, -0.442236f, -0.354279f, -0.237915f, -0.202416f, -0.063101f, 0.154263f, 0.233885f, 0.260995f, 0.350430f, 0.295364f, 0.138239f, 0.050588f, 0.075936f, -0.118081f, -0.181491f, -0.128561f, -0.271137f, -0.203703f, -0.035186f, -0.121496f, 0.048261f, 0.198746f, 0.070836f, 0.101556f, 0.144075f, 0.015626f, 0.008547f, -0.034850f, -0.135901f, -0.070838f, 0.001048f, -0.053935f, 0.041829f, 0.057836f, -0.023471f, 0.073265f, 0.062599f, -0.098023f, 0.075084f, 0.088072f, -0.062012f, 0.143354f, 0.021679f, -0.140395f, 0.098332f, -0.076845f, -0.275171f, -0.045089f, -0.167306f, -0.202572f, 0.125142f, 0.016272f, 0.031714f, 0.265082f, 0.168019f, 0.187678f, 0.300700f, 0.221815f, 0.073160f, 0.032155f, -0.209763f, -0.380532f, -0.379311f, -0.379628f, -0.359715f, -0.218777f, 0.011078f, 0.207304f, 0.303293f, 0.416494f, 0.386022f, 0.365580f, 0.287391f, 0.049598f, -0.132378f, -0.144147f, -0.305462f, -0.376969f, -0.227382f, -0.202684f, -0.113476f, 0.022198f, 0.054840f, 0.067222f, 0.130301f, 0.115713f, 0.107666f, 0.153526f, 0.125994f, 0.081849f, 0.070487f, 0.018747f, + -0.041628f, -0.071572f, -0.082518f, -0.085100f, -0.048489f, -0.024579f, -0.017177f, -0.015640f} + }, + { + {-0.009421f, -0.003640f, 0.002164f, -0.001773f, -0.005438f, -0.000423f, 0.012508f, -0.006465f, 0.001437f, -0.002745f, -0.000166f, -0.004825f, 0.008996f, -0.004711f, -0.005012f, -0.005666f, 0.010725f, -0.006423f, -0.001697f, -0.003053f, 0.003001f, 0.004929f, 0.006268f, -0.008908f, -0.000043f, 0.008462f, 0.003738f, 0.001420f, -0.000490f, -0.001096f, 0.003817f, 0.008627f, 0.002070f, -0.011158f, -0.005755f, -0.006020f, 0.009692f, -0.001030f, 0.007391f, -0.004693f, 0.003416f, 0.009682f, -0.004754f, -0.007355f, 0.002583f, -0.002774f, -0.000508f, -0.006585f, -0.002662f, -0.004930f, 0.001844f, -0.008916f, -0.002947f, -0.002308f, -0.000300f, 0.011982f, -0.003938f, -0.001842f, -0.000444f, -0.003185f, -0.001260f, -0.001170f, 0.007261f, 0.003730f, 0.004448f, -0.006286f, 0.004574f, 0.004783f, -0.004270f, 0.001958f, 0.002845f, -0.003252f, -0.004378f, 0.005076f, -0.007669f, 0.005378f, 0.003262f, 0.001399f, -0.007107f, -0.002494f, 0.002641f, -0.000661f, -0.001480f, -0.001948f, -0.000170f, -0.003842f, -0.004427f, -0.000713f, -0.000731f, 0.000499f, -0.001665f, 0.000006f, 0.002621f, -0.000131f, 0.000976f, 0.000342f, + 0.000518f, -0.000004f, -0.000513f, -0.001948f, -0.001154f, 0.001281f, -0.000681f, 0.000034f, -0.000262f, -0.005905f, 0.006242f, 0.000728f, -0.002695f, -0.004031f, -0.001101f, -0.002053f, 0.000007f, -0.004995f, -0.003833f, 0.002817f, -0.000790f, -0.001927f, -0.008715f, -0.001315f, 0.008106f, -0.005478f, -0.001367f, 0.006092f, -0.003522f, -0.006555f, -0.004989f, 0.004148f, 0.000036f, -0.000656f, -0.001257f, -0.006289f, 0.002111f, -0.002812f, -0.001472f, 0.007068f, -0.003900f, -0.009629f, -0.002863f, 0.000510f, 0.002880f, 0.002500f, 0.000826f, -0.007323f, -0.001684f, -0.008916f, -0.008078f, -0.002203f, 0.008466f, -0.001492f, -0.016729f, -0.000781f, 0.005637f, 0.004864f, -0.003452f, 0.003262f, 0.003601f, 0.000306f, 0.004979f, -0.009044f, -0.006377f, -0.000879f, 0.002619f, 0.000380f, 0.001868f, -0.001004f, 0.002362f, 0.002106f, 0.003485f, -0.000560f, 0.002150f, 0.002007f, -0.001679f, 0.003421f, -0.000853f, -0.008826f, -0.007198f, -0.004705f, -0.003711f, -0.003986f, 0.001205f, -0.002041f, 0.006814f, 0.005590f, -0.001038f, -0.002757f, -0.002363f, -0.001301f, 0.002050f, 0.003174f, 0.000410f, -0.001921f, + 0.000348f, 0.000409f, -0.001858f, 0.002378f, 0.000018f, -0.000599f, -0.000928f, -0.000245f, -0.001381f, 0.000927f, -0.000270f, 0.000142f, -0.001599f, 0.000915f, -0.001006f, -0.000031f, 0.000015f, 0.000621f, -0.000264f, -0.000805f, -0.000306f, -0.001549f, -0.000584f, 0.000112f, -0.000739f, 0.000088f, -0.001252f, 0.007653f, 0.004275f, 0.011465f, 0.000755f, -0.002270f, -0.001424f, 0.008107f, -0.002224f, 0.004342f, -0.007447f, -0.000805f, -0.000211f, 0.004248f, 0.002954f, 0.007268f, 0.005115f, -0.003765f, -0.007351f, -0.006013f, 0.004083f, -0.002576f, 0.005583f, 0.003497f, 0.000732f, -0.000387f, 0.004639f, 0.003252f, -0.003401f, 0.003809f, -0.007914f, -0.001127f, -0.007337f, -0.006299f, -0.008827f, 0.002539f, 0.005008f, -0.000966f, 0.006973f, -0.005468f, 0.006459f, -0.013148f, 0.005026f, 0.002199f, 0.009683f, 0.002807f, 0.003469f, 0.005196f, -0.000249f, -0.003382f, 0.003609f, 0.008428f, 0.002866f, 0.004063f, -0.001381f, -0.000187f, -0.012019f, -0.000837f, 0.001897f, 0.002272f, -0.001775f, 0.006365f, 0.012020f, -0.004064f, -0.008672f, 0.005727f, 0.001264f, -0.006175f, -0.000111f, -0.002885f, + -0.006191f, 0.000719f, 0.008646f, 0.002125f, 0.003138f, 0.001417f, -0.000935f, 0.003249f, 0.002023f, -0.000214f, 0.002838f, 0.000135f, -0.000796f, -0.000684f, -0.001644f, 0.001633f, -0.002410f, -0.000345f, 0.004013f, -0.000920f, -0.000101f, 0.001490f, -0.000955f, 0.002694f, -0.003838f, -0.001773f, 0.000054f, -0.001579f, -0.001677f, 0.000358f, -0.000944f, 0.001266f, 0.002941f, -0.001160f, 0.001660f, 0.000394f, 0.000171f, -0.000011f, 0.000408f, -0.003361f, -0.000855f, -0.000802f, 0.000648f, 0.002670f, 0.001608f, 0.004219f, 0.006309f, 0.006069f, -0.005879f, 0.009263f, -0.003297f, -0.006158f, -0.009100f, 0.002109f, -0.012035f, -0.000755f, 0.001249f, 0.003326f, -0.007677f, 0.004957f, -0.000125f, 0.001102f, 0.003212f, 0.001972f, 0.002718f, -0.010361f, -0.000697f, -0.002347f, -0.006760f, 0.003948f, 0.001987f, 0.001550f, 0.005797f, 0.020404f, -0.001506f, 0.001047f, 0.002908f, 0.005041f, 0.001995f, -0.016752f, 0.003478f, -0.002784f, -0.001925f, 0.009173f, 0.000268f, 0.004564f, 0.006616f, -0.008265f, -0.004614f, -0.002385f, -0.008020f, -0.017192f, 0.000810f, -0.006481f, -0.001038f, -0.001499f, + -0.000356f, -0.003986f, -0.008416f, 0.002389f, -0.008053f, -0.002556f, 0.001813f, -0.008975f, 0.009290f, 0.003208f, 0.002640f, -0.003770f, -0.000690f, -0.001468f, 0.001846f, -0.002892f, 0.004769f, -0.007361f, 0.002445f, 0.011197f, 0.009272f, -0.003239f, 0.004715f, -0.004407f, 0.001998f, -0.008346f, -0.000277f, 0.005198f, 0.005992f, 0.005366f, -0.000926f, 0.009988f, 0.000911f, 0.004995f, 0.004456f, -0.000170f, 0.002076f, 0.001094f, 0.000372f, -0.001682f, 0.001002f, 0.001562f, -0.000603f, 0.000184f, -0.001128f, -0.002735f, -0.000430f, 0.001885f, -0.001470f, 0.004036f, -0.001116f, -0.002081f, -0.001785f, 0.001424f, -0.001008f, 0.001774f, -0.000339f, -0.001681f, 0.001008f, -0.000456f, 0.002078f, 0.001281f, 0.001220f, 0.000851f, -0.003608f, -0.000835f, 0.000490f, 0.001564f, 0.000055f, 0.000319f, -0.000967f, 0.013621f, -0.017334f, 0.000707f, -0.010684f, 0.005427f, 0.007842f, 0.009567f, -0.001516f, -0.009141f, 0.000205f, 0.009424f, 0.001988f, 0.001780f, -0.007135f, -0.000980f, -0.012473f, 0.016512f, -0.000906f, -0.012763f, 0.013761f, 0.003425f, 0.004059f, -0.000927f, -0.005002f, -0.001655f, + -0.006597f, -0.006509f, 0.005068f, 0.007202f, -0.001501f, 0.006794f, -0.005651f, -0.003543f, -0.000027f, 0.009493f, 0.008989f, -0.002559f, -0.005108f, 0.007384f, 0.004705f, 0.000666f, 0.006252f, 0.001465f, -0.007401f, 0.007731f, 0.004818f, -0.000612f, -0.002588f, 0.002113f, -0.007975f, 0.021153f, -0.001121f, -0.000787f, 0.015760f, -0.001465f, -0.009680f, -0.005268f, -0.001163f, 0.003817f, -0.010059f, 0.006838f, 0.002052f, 0.000208f, -0.009134f, -0.007708f, -0.016126f, -0.001452f, 0.007492f, 0.003710f, 0.009091f, -0.005079f, -0.003595f, 0.019050f, -0.005319f, 0.003161f, -0.002669f, -0.007934f, 0.000593f, 0.003462f, -0.008268f, -0.014662f, 0.000594f, -0.009052f, -0.009120f, -0.004479f, 0.004737f, 0.000397f, -0.001390f, -0.005624f, -0.001931f, 0.000614f, -0.002107f, -0.001585f, 0.001484f, 0.005184f, 0.000721f, 0.001284f, -0.003702f, -0.001911f, -0.000396f, -0.000063f, -0.005217f, -0.003842f, -0.003317f, -0.000223f, 0.001248f, 0.000482f, -0.001708f, 0.000100f, -0.000344f, -0.000553f, -0.002742f, -0.001028f, -0.000407f, -0.001070f, -0.001441f, -0.018285f, -0.000280f, -0.007736f, -0.008740f, 0.002544f, + -0.010482f, 0.000211f, 0.007035f, 0.003793f, 0.014827f, -0.024950f, 0.015886f, -0.002733f, 0.006900f, -0.004850f, -0.003645f, -0.013154f, 0.011555f, 0.010180f, 0.002498f, -0.011704f, -0.000724f, -0.006808f, -0.000887f, 0.012005f, 0.008336f, 0.001764f, 0.011441f, -0.000256f, 0.000508f, 0.001039f, -0.000487f, -0.008158f, 0.017147f, -0.001821f, 0.000076f, 0.019929f, -0.013004f, 0.004695f, -0.006247f, -0.001396f, 0.006243f, -0.002828f, -0.010276f, 0.019179f, 0.014940f, -0.000635f, 0.004793f, 0.007986f, 0.020734f, -0.002789f, -0.003837f, -0.011388f, 0.001896f, 0.003865f, -0.012038f, -0.012839f, -0.011298f, 0.013360f, 0.000227f, -0.005603f, 0.009157f, 0.006487f, 0.000041f, -0.003277f, 0.002930f, -0.007340f, -0.001931f, -0.007979f, -0.001851f, 0.007397f, -0.014675f, 0.003394f, -0.003136f, -0.010177f, 0.006131f, 0.009680f, 0.004095f, 0.010083f, 0.008731f, -0.007494f, -0.011965f, -0.005991f, 0.005194f, -0.004737f, -0.009207f, 0.005906f, 0.009964f, -0.007303f, 0.001204f, 0.002110f, 0.001084f, -0.006821f, 0.003931f, -0.003048f, -0.002428f, -0.004383f, -0.002311f, -0.003434f, -0.000364f, -0.000397f, + 0.001295f, 0.002090f, -0.001745f, -0.001505f, -0.000685f, -0.002727f, -0.001599f, -0.000744f, -0.001097f, 0.002143f, 0.002688f, 0.000685f, 0.003964f, -0.003684f, 0.002677f, -0.003197f, -0.001455f, 0.002743f, 0.013691f, 0.014527f, 0.002408f, -0.012518f, -0.001722f, -0.011889f, 0.004959f, 0.031282f, 0.007722f, 0.021677f, 0.007965f, 0.000278f, -0.020218f, -0.004963f, 0.003332f, 0.019581f, -0.008656f, -0.004306f, -0.007539f, 0.001884f, 0.015738f, -0.011512f, 0.007706f, 0.013626f, 0.003029f, 0.005020f, -0.008910f, 0.016837f, -0.003604f, 0.021926f, -0.000205f, -0.006693f, -0.020567f, 0.002530f, 0.000077f, 0.024541f, -0.007402f, -0.001990f, 0.015558f, 0.000125f, 0.002061f, -0.005047f, -0.016083f, 0.001735f, 0.009264f, -0.011539f, -0.009107f, 0.002417f, -0.019288f, 0.010597f, 0.010708f, -0.003242f, -0.001254f, 0.005453f, 0.010921f, -0.000914f, -0.006721f, -0.000244f, 0.016037f, -0.002037f, -0.002466f, -0.006054f, 0.020762f, 0.021034f, 0.001422f, -0.003802f, 0.003276f, -0.000887f, 0.005480f, 0.009727f, -0.000804f, 0.014045f, -0.005468f, -0.007787f, -0.011362f, 0.003851f, -0.000933f, -0.017272f, + -0.012467f, -0.007166f, 0.013587f, -0.003968f, -0.006365f, -0.001746f, 0.000002f, -0.005855f, -0.008856f, -0.003103f, -0.002599f, -0.005280f, 0.000862f, -0.003310f, -0.002915f, 0.002793f, -0.005629f, -0.005795f, 0.001819f, 0.004654f, -0.002808f, -0.003732f, -0.002832f, -0.004868f, -0.002342f, 0.001519f, -0.001690f, 0.000838f, 0.002561f, -0.000855f, -0.001450f, -0.004294f, 0.002647f, 0.000373f, -0.013795f, 0.013986f, 0.010641f, 0.000824f, -0.009152f, -0.010277f, -0.004473f, -0.020417f, 0.023713f, 0.017838f, -0.003823f, 0.006612f, 0.002140f, -0.003896f, 0.017980f, -0.001442f, -0.008362f, 0.026617f, -0.028841f, 0.007450f, 0.012424f, -0.000099f, -0.011796f, 0.012686f, 0.001959f, 0.018343f, -0.007099f, -0.001971f, 0.004887f, 0.007329f, 0.001236f, -0.002507f, 0.026683f, 0.011513f, -0.012204f, -0.018424f, 0.012814f, -0.018432f, -0.005355f, -0.021221f, -0.002756f, 0.031772f, 0.012992f, 0.015360f, 0.000105f, -0.016856f, -0.002813f, -0.008236f, -0.003670f, 0.023762f, -0.003710f, -0.026186f, -0.002122f, 0.005140f, -0.016668f, -0.002764f, 0.010736f, 0.008455f, -0.011207f, -0.005850f, 0.011467f, 0.015188f, + -0.004422f, 0.015822f, 0.000274f, 0.003979f, 0.005913f, 0.001342f, 0.006208f, 0.009492f, 0.009177f, 0.008939f, -0.004711f, -0.018998f, -0.020997f, 0.005235f, -0.004226f, 0.015009f, -0.002696f, 0.017813f, 0.006019f, 0.008287f, -0.009496f, -0.008466f, 0.006340f, -0.000328f, 0.001291f, 0.001664f, 0.000782f, -0.008516f, -0.003912f, -0.001318f, -0.007084f, -0.000208f, -0.006087f, 0.001095f, -0.003442f, 0.002625f, -0.000866f, 0.004547f, -0.000010f, 0.002489f, 0.000794f, -0.002286f, -0.002001f, -0.002739f, 0.005623f, 0.000648f, -0.001673f, 0.001790f, 0.002904f, 0.002435f, 0.000543f, -0.004166f, -0.011653f, -0.006601f, 0.000041f, -0.005635f, -0.000143f, 0.011528f, -0.001635f, 0.010743f, -0.021942f, 0.007657f, 0.006041f, 0.003047f, -0.014422f, -0.012093f, -0.015352f, 0.011694f, 0.006013f, -0.011018f, -0.010993f, 0.014740f, 0.004692f, -0.001352f, -0.009277f, -0.015236f, -0.006305f, 0.005968f, -0.009806f, 0.000986f, -0.018254f, -0.005234f, 0.001958f, 0.006031f, 0.011667f, -0.002080f, 0.007386f, 0.010131f, -0.010674f, -0.025332f, 0.017146f, 0.000617f, -0.004170f, 0.016303f, -0.002727f, 0.000475f, + -0.011292f, 0.014304f, -0.009444f, -0.011945f, -0.004786f, 0.011693f, 0.017834f, 0.014958f, 0.004514f, 0.002866f, -0.032013f, 0.014273f, -0.002133f, 0.005895f, -0.011196f, -0.002266f, -0.012506f, -0.004461f, -0.003224f, -0.016534f, -0.008443f, -0.006887f, -0.009159f, 0.016755f, -0.005663f, 0.021848f, -0.002843f, -0.001428f, 0.013615f, 0.015582f, 0.026365f, 0.018038f, -0.000578f, -0.008803f, -0.001221f, -0.000146f, -0.012958f, 0.003035f, -0.008442f, -0.014167f, 0.026953f, -0.017435f, -0.018537f, -0.002839f, 0.009999f, 0.001322f, 0.003066f, 0.001180f, 0.011287f, -0.000326f, 0.003033f, 0.003917f, -0.004521f, 0.000534f, 0.006911f, -0.004034f, 0.002796f, 0.004927f, 0.004029f, 0.008659f, 0.001879f, 0.000038f, 0.004737f, 0.000765f, -0.001710f, 0.003161f, 0.004909f, 0.001891f, -0.000069f, 0.001454f, 0.000743f, 0.010068f, 0.000768f, 0.008185f, 0.005441f, 0.001180f, 0.008615f, 0.009450f, 0.000913f, -0.000319f, 0.001247f, 0.001273f, 0.001125f, -0.000859f, -0.001164f, 0.002369f, -0.005937f, -0.008508f, -0.033827f, 0.007503f, -0.023276f, -0.013925f, 0.022040f, 0.017148f, -0.038626f, -0.035410f, + 0.001205f, 0.015133f, -0.008979f, 0.009345f, -0.012747f, -0.001418f, -0.022424f, -0.005847f, -0.020244f, -0.001438f, -0.005540f, 0.000660f, 0.007780f, 0.006388f, 0.012606f, -0.001554f, -0.010752f, 0.009353f, -0.012823f, -0.005130f, 0.004112f, 0.000821f, 0.006532f, 0.013388f, -0.002166f, 0.001696f, 0.003074f, -0.005422f, -0.001425f, -0.019593f, -0.023219f, -0.022468f, 0.000017f, -0.022603f, 0.007570f, 0.002977f, -0.008941f, -0.010515f, -0.004531f, -0.003764f, -0.001952f, -0.013462f, -0.021268f, -0.001213f, 0.033739f, 0.018590f, -0.004773f, -0.020176f, -0.020840f, 0.023280f, -0.021887f, -0.007234f, -0.003911f, -0.014618f, -0.011097f, -0.014901f, -0.017437f, -0.024251f, -0.032801f, -0.004737f, -0.005310f, -0.004691f, 0.010955f, 0.010365f, 0.002692f, 0.009078f, -0.007472f, -0.009134f, 0.030272f, 0.012794f, -0.008126f, -0.022383f, 0.006890f, -0.013264f, -0.015733f, -0.000103f, 0.025375f, -0.005103f, -0.000269f, 0.017436f, -0.002031f, -0.011714f, 0.000432f, 0.004110f, -0.000426f, -0.004832f, -0.004673f, -0.000191f, 0.004225f, 0.002035f, 0.002795f, 0.001701f, 0.008615f, -0.002617f, 0.004594f, -0.012614f, + 0.005721f, 0.002976f, -0.002339f, 0.002600f, -0.002724f, 0.004554f, -0.002361f, -0.003719f, -0.002197f, 0.004131f, 0.003534f, 0.000417f, 0.004761f, -0.007184f, 0.007038f, -0.003613f, -0.004401f, 0.002159f, -0.027850f, 0.003107f, 0.013933f, 0.015142f, 0.014035f, 0.005884f, 0.027753f, -0.011068f, -0.020343f, -0.005384f, 0.003486f, -0.004189f, 0.008771f, 0.018437f, 0.037309f, 0.023433f, 0.013625f, 0.017332f, -0.014526f, -0.027700f, -0.009571f, -0.020775f, 0.023356f, 0.005215f, -0.005061f, -0.016874f, 0.026515f, 0.022770f, -0.008591f, -0.001805f, -0.000237f, -0.013914f, -0.011636f, -0.020875f, 0.006039f, 0.007034f, 0.011689f, -0.019746f, 0.001665f, 0.005474f, -0.009063f, -0.019192f, 0.000430f, 0.010957f, 0.014514f, 0.002348f, -0.037455f, -0.013468f, -0.018551f, 0.007509f, 0.022108f, -0.000150f, -0.021083f, 0.004853f, -0.020357f, 0.011063f, -0.005055f, 0.001653f, -0.014484f, 0.029962f, 0.023622f, -0.007595f, -0.007113f, -0.017517f, -0.001323f, 0.023921f, 0.005384f, 0.029430f, 0.028368f, 0.023622f, 0.013831f, 0.004730f, -0.019177f, -0.010755f, -0.025470f, 0.029099f, 0.029256f, -0.002489f, + -0.022510f, 0.014278f, 0.034011f, -0.000547f, 0.004240f, -0.008363f, -0.000889f, -0.022514f, 0.003483f, -0.017779f, 0.012042f, 0.004153f, 0.016975f, 0.016867f, 0.009147f, 0.001313f, 0.001451f, 0.010396f, 0.003786f, -0.002548f, -0.006959f, -0.002353f, -0.010587f, 0.001751f, 0.008135f, -0.007025f, -0.003954f, -0.008026f, 0.005733f, -0.001873f, 0.012294f, -0.011785f, 0.003119f, -0.000478f, 0.011709f, -0.005759f, 0.003863f, 0.007049f, 0.001275f, -0.000456f, 0.000416f, 0.002012f, -0.005404f, -0.002234f, 0.007017f, -0.018405f, -0.004592f, 0.013541f, 0.023575f, -0.024650f, -0.029938f, -0.025869f, 0.028522f, -0.011803f, 0.019078f, -0.000281f, 0.000346f, 0.045849f, -0.005491f, 0.003373f, -0.020253f, -0.031638f, 0.007946f, -0.004724f, 0.008586f, 0.005559f, -0.002480f, -0.018105f, 0.005184f, 0.006757f, 0.003239f, -0.017095f, 0.011384f, 0.008229f, 0.033514f, -0.015429f, 0.002363f, 0.018274f, 0.018771f, 0.000722f, 0.018955f, -0.004771f, 0.000831f, 0.016866f, 0.014330f, 0.003818f, -0.007288f, -0.026919f, -0.020338f, 0.015794f, -0.000368f, -0.006162f, -0.005275f, 0.004007f, 0.036225f, -0.002229f, + -0.012558f, 0.018413f, -0.008807f, 0.017404f, 0.004252f, 0.052161f, -0.010179f, -0.001676f, -0.000090f, 0.007757f, 0.017846f, -0.003473f, -0.006043f, 0.011605f, -0.024448f, 0.019970f, 0.036733f, 0.010881f, -0.007674f, 0.020492f, -0.007784f, -0.001077f, 0.041549f, -0.023979f, 0.009218f, 0.016319f, -0.006947f, 0.034594f, 0.008313f, 0.007434f, -0.013257f, -0.019909f, 0.003570f, 0.009058f, -0.021347f, 0.021752f, 0.000002f, 0.005508f, 0.000145f, 0.006350f, 0.020083f, -0.004551f, 0.020264f, 0.009612f, 0.006697f, 0.011292f, 0.010089f, -0.005877f, 0.012790f, 0.011890f, -0.010387f, 0.003944f, 0.008815f, 0.016209f, 0.003866f, 0.004677f, 0.008118f, 0.009494f, 0.014432f, 0.001479f, 0.000518f, -0.000856f, 0.009891f, 0.008369f, -0.009046f, -0.000137f, 0.006554f, 0.009222f, 0.007266f, -0.005403f, 0.013758f, -0.000371f, 0.004793f, 0.001697f, 0.011370f, 0.005791f, 0.005324f, 0.005445f, 0.007883f, 0.004435f, 0.005257f, 0.009086f, -0.026021f, -0.007411f, 0.017929f, -0.008595f, -0.013547f, -0.012083f, -0.012398f, 0.002318f, 0.018032f, -0.002204f, -0.039792f, 0.000111f, -0.030215f, 0.011872f, + 0.013117f, 0.000340f, 0.006249f, -0.013237f, -0.001614f, 0.016199f, -0.038101f, 0.009810f, -0.008238f, 0.021414f, 0.014869f, 0.009684f, 0.001783f, -0.015134f, -0.034372f, -0.001739f, -0.030024f, 0.018734f, 0.000380f, -0.009009f, 0.031880f, 0.016565f, -0.012526f, -0.009951f, -0.006469f, -0.004745f, -0.008724f, -0.017005f, 0.003237f, 0.005003f, 0.046066f, -0.001453f, -0.032672f, 0.000073f, 0.022591f, 0.001746f, -0.016738f, 0.010760f, -0.025333f, 0.017123f, -0.010605f, 0.011375f, -0.014677f, 0.006949f, -0.025909f, 0.068759f, 0.002772f, 0.047529f, -0.004417f, -0.012931f, 0.012497f, -0.015235f, -0.014862f, 0.026514f, 0.025896f, -0.022461f, -0.059576f, 0.056952f, -0.019779f, -0.015534f, -0.007294f, -0.007928f, 0.007711f, -0.005178f, 0.004584f, 0.024565f, 0.006047f, -0.019782f, -0.015862f, -0.011972f, 0.007493f, -0.012517f, -0.001662f, 0.011441f, -0.030857f, -0.002637f, 0.002110f, -0.004831f, -0.008970f, 0.003509f, -0.006323f, 0.016929f, -0.006583f, 0.007544f, -0.007457f, -0.005486f, 0.000507f, -0.007848f, 0.004650f, 0.004028f, -0.003164f, 0.004263f, -0.007142f, 0.003541f, -0.001829f, -0.000549f, + -0.003168f, 0.000097f, -0.012880f, -0.009488f, -0.001765f, -0.005287f, -0.010532f, -0.014061f, -0.007832f, -0.003433f, -0.005547f, -0.001197f, -0.009342f, -0.000011f, -0.008292f, -0.002413f, -0.010825f, 0.005849f, -0.005989f, -0.003353f, -0.029334f, -0.010415f, -0.008925f, -0.025221f, -0.044416f, -0.010962f, 0.000697f, -0.023590f, 0.011530f, -0.010094f, 0.019737f, -0.017021f, -0.007130f, -0.024252f, 0.057791f, 0.048893f, -0.010987f, 0.010903f, 0.033570f, -0.035318f, 0.035794f, -0.014899f, -0.014943f, 0.012905f, 0.004710f, 0.006118f, -0.005287f, -0.007788f, 0.000990f, 0.011590f, 0.009996f, -0.015705f, 0.017971f, -0.016924f, -0.028171f, 0.020424f, 0.017960f, -0.023451f, -0.029147f, -0.033678f, -0.004953f, -0.005584f, 0.009405f, -0.021996f, -0.027573f, -0.014079f, 0.046097f, 0.016135f, 0.015670f, -0.019760f, 0.017769f, 0.024267f, -0.018965f, 0.045305f, 0.008389f, -0.016215f, -0.021271f, 0.012125f, -0.017871f, -0.038748f, 0.009409f, -0.000443f, 0.000840f, 0.021179f, 0.019694f, -0.017029f, 0.003204f, -0.049658f, -0.006204f, -0.019585f, 0.041062f, 0.002453f, 0.005759f, -0.023952f, 0.019402f, -0.042186f, + -0.005168f, 0.016504f, 0.004717f, -0.004587f, -0.004857f, 0.005114f, -0.001992f, 0.004759f, -0.006354f, 0.001186f, 0.003456f, 0.010037f, 0.002447f, 0.003200f, -0.002338f, 0.005959f, -0.006235f, 0.001917f, 0.018681f, -0.003680f, 0.000797f, -0.005991f, 0.008298f, 0.003887f, -0.001045f, 0.009808f, -0.010365f, -0.009795f, 0.010596f, -0.008935f, -0.003365f, -0.008185f, 0.004461f, -0.011972f, -0.005453f, -0.003898f, 0.009568f, 0.009651f, -0.015452f, 0.002432f, 0.007828f, -0.005289f, -0.017420f, -0.008382f, 0.012815f, -0.008401f, -0.021484f, 0.027221f, 0.028683f, 0.025957f, 0.017509f, -0.000223f, 0.023774f, 0.021559f, 0.003605f, -0.004082f, 0.009580f, 0.000064f, -0.024241f, -0.002885f, 0.009203f, -0.018952f, 0.027068f, -0.028223f, 0.022601f, 0.024615f, -0.007082f, -0.005552f, 0.010434f, 0.032845f, 0.024605f, -0.029683f, -0.006481f, -0.007943f, -0.002369f, 0.007421f, -0.013849f, -0.014499f, 0.032220f, 0.000810f, 0.046271f, -0.030216f, -0.028662f, 0.023299f, -0.015437f, 0.008406f, -0.018163f, 0.015557f, 0.017749f, 0.011721f, -0.007253f, -0.026546f, 0.002627f, 0.008841f, -0.022086f, -0.040558f, + -0.001403f, 0.003712f, -0.023949f, 0.043846f, -0.005004f, -0.012406f, 0.058230f, 0.054867f, 0.005475f, -0.007601f, -0.002048f, -0.011682f, 0.013201f, -0.028737f, 0.026956f, 0.003592f, -0.015646f, 0.032599f, 0.005223f, 0.006632f, -0.009296f, -0.017656f, -0.043738f, 0.009632f, -0.014900f, -0.007179f, 0.020170f, 0.008211f, -0.009605f, -0.028551f, -0.007909f, -0.032517f, 0.013903f, 0.029315f, -0.004142f, -0.022082f, -0.015470f, -0.022020f, 0.000243f, 0.011922f, 0.014230f, -0.002976f, -0.015626f, -0.008099f, -0.008529f, 0.002089f, -0.004739f, -0.007460f, 0.006279f, -0.001149f, -0.004622f, 0.007735f, -0.017664f, 0.005073f, 0.004555f, 0.027318f, 0.002466f, -0.006031f, -0.013979f, 0.012058f, -0.014604f, -0.001891f, 0.010205f, -0.019375f, 0.018066f, 0.003881f, -0.000786f, 0.003718f, 0.012214f, -0.006154f, -0.019168f, 0.000466f, -0.005703f, -0.002412f, 0.018407f, 0.017561f, -0.048063f, -0.111317f, 0.037306f, 0.035348f, -0.012452f, 0.007888f, -0.026807f, 0.048030f, 0.030714f, -0.027236f, 0.007755f, 0.006532f, 0.000685f, -0.012258f, -0.008838f, -0.057411f, 0.024278f, 0.028341f, -0.006554f, -0.000018f, + -0.003224f, 0.019073f, -0.014400f, 0.036400f, 0.010783f, -0.043265f, -0.024525f, 0.054946f, 0.036065f, -0.035805f, -0.008430f, -0.012725f, -0.021934f, 0.003429f, -0.008765f, 0.007842f, 0.071374f, 0.019467f, 0.074783f, 0.042735f, 0.048192f, 0.043940f, 0.086136f, -0.005638f, -0.008003f, 0.020622f, -0.006094f, -0.072242f, 0.058576f, -0.025363f, 0.033588f, -0.047745f, -0.037990f, -0.071320f, 0.014163f, -0.006547f, -0.023957f, 0.017431f, -0.033540f, 0.000153f, -0.047912f, -0.047821f, 0.013417f, 0.027975f, -0.038886f, -0.010284f, -0.026963f, -0.037402f, -0.042039f, -0.030167f, 0.022985f, -0.018207f, -0.052485f, 0.075409f, 0.047230f, 0.076032f, -0.009926f, -0.016327f, -0.015133f, -0.026786f, -0.043111f, -0.002723f, -0.009479f, -0.032584f, -0.010893f, 0.009635f, -0.023112f, -0.020802f, 0.002405f, -0.003378f, -0.010302f, -0.008414f, 0.018751f, 0.020021f, 0.000628f, 0.005085f, 0.014209f, 0.017852f, 0.003623f, -0.001448f, -0.002742f, 0.008423f, -0.003568f, 0.002145f, -0.003282f, -0.012481f, -0.000339f, 0.011882f, -0.012313f, 0.016213f, 0.020414f, 0.008681f, 0.000665f, 0.003393f, 0.002155f, -0.013555f, + 0.001121f, 0.007815f, -0.007005f, 0.000166f, -0.003202f, 0.002295f, -0.004857f, 0.001881f, 0.007594f, -0.010360f, -0.008879f, 0.016502f, 0.006703f, -0.002003f, 0.002506f, -0.040194f, -0.105936f, 0.046359f, 0.055310f, -0.024550f, -0.010507f, -0.002420f, 0.062589f, 0.002350f, 0.013648f, 0.013480f, -0.014305f, 0.012720f, 0.029335f, -0.005465f, -0.027556f, 0.007301f, 0.053283f, -0.027712f, -0.017223f, 0.011952f, -0.007060f, 0.039988f, -0.009592f, 0.018220f, -0.020097f, -0.024186f, -0.024174f, 0.026334f, -0.007493f, 0.023417f, 0.027223f, -0.006596f, 0.003874f, 0.000516f, -0.021638f, 0.007634f, -0.019598f, 0.023879f, 0.057955f, 0.095000f, -0.000850f, -0.002349f, -0.039752f, 0.022008f, 0.031298f, -0.000582f, 0.035109f, 0.050095f, 0.021242f, 0.028637f, -0.043319f, -0.025852f, 0.036573f, 0.094921f, -0.017009f, -0.055164f, 0.014461f, -0.018103f, -0.000691f, 0.025991f, 0.000791f, -0.024970f, -0.011803f, -0.012718f, -0.064016f, -0.026534f, 0.000724f, 0.011023f, 0.022736f, -0.003342f, -0.024435f, -0.013895f, 0.006366f, -0.009676f, -0.024544f, 0.025948f, 0.062176f, 0.027125f, 0.033626f, 0.003767f, + -0.008158f, -0.049977f, -0.010842f, 0.014648f, 0.011420f, -0.010920f, 0.028837f, -0.007722f, 0.016261f, -0.034877f, 0.002324f, -0.011797f, -0.009861f, 0.000689f, 0.010058f, 0.009936f, -0.009664f, -0.018815f, 0.018823f, -0.006918f, 0.015512f, 0.001719f, -0.003579f, 0.001608f, 0.003538f, 0.014454f, 0.000733f, -0.001887f, -0.007032f, -0.007726f, 0.012403f, 0.004376f, 0.011450f, -0.023620f, 0.016945f, 0.009999f, 0.004797f, -0.008336f, -0.002924f, 0.017764f, -0.001844f, 0.001039f, -0.013169f, 0.001608f, -0.020340f, -0.003997f, 0.006207f, 0.017805f, 0.008907f, 0.015771f, 0.033747f, 0.011213f, 0.017682f, 0.006927f, 0.050864f, -0.016044f, -0.006405f, -0.019996f, 0.011777f, -0.012417f, 0.011158f, 0.057739f, 0.011364f, -0.061162f, -0.014974f, -0.017835f, -0.052385f, 0.033266f, 0.015643f, -0.006045f, 0.007325f, 0.003279f, -0.023574f, -0.000195f, -0.001754f, -0.023308f, -0.007093f, 0.050417f, 0.073969f, 0.034976f, -0.025939f, -0.040803f, 0.019149f, 0.033884f, 0.003650f, 0.027118f, -0.018994f, -0.013018f, 0.027668f, 0.008836f, 0.000233f, -0.062117f, -0.081220f, -0.002567f, -0.047576f, -0.027464f, + 0.016772f, 0.067883f, 0.014513f, 0.003435f, -0.019852f, -0.023391f, -0.034193f, -0.029817f, 0.005356f, 0.020536f, -0.007475f, -0.033603f, -0.054468f, 0.021644f, 0.001190f, -0.030107f, -0.050804f, -0.034141f, -0.055905f, -0.100330f, -0.060871f, -0.008954f, -0.012295f, 0.120853f, -0.015043f, -0.004429f, 0.069279f, 0.008262f, 0.003625f, 0.041955f, -0.025278f, -0.060953f, -0.071296f, -0.010906f, -0.034316f, -0.037517f, -0.040342f, -0.043662f, 0.008230f, 0.039685f, 0.062484f, 0.037472f, 0.007365f, 0.004227f, -0.016504f, 0.032575f, 0.006325f, -0.009683f, -0.040883f, 0.008517f, 0.029108f, -0.001260f, -0.000501f, -0.014367f, 0.007744f, 0.016548f, 0.026560f, 0.007803f, 0.011055f, 0.010550f, 0.013073f, 0.016955f, 0.017032f, -0.004686f, 0.012852f, 0.002952f, -0.009732f, -0.020955f, -0.025743f, 0.002827f, 0.005623f, -0.024987f, -0.012796f, -0.024011f, 0.007519f, 0.012810f, 0.018875f, 0.028615f, 0.047354f, 0.035877f, 0.036005f, 0.022014f, 0.013783f, -0.008374f, 0.003419f, 0.000548f, -0.022727f, -0.033912f, -0.026232f, -0.028889f, 0.038115f, -0.054196f, 0.013627f, 0.008554f, -0.023631f, -0.075983f, + 0.051614f, 0.015293f, -0.004935f, -0.076935f, 0.020408f, 0.011889f, -0.040657f, 0.006747f, 0.035560f, 0.021847f, 0.010313f, -0.034849f, -0.007156f, -0.013032f, 0.006073f, -0.013145f, 0.003159f, -0.027000f, -0.038850f, 0.042504f, -0.029448f, 0.064612f, -0.039953f, -0.036158f, -0.024541f, -0.045445f, 0.003921f, -0.000911f, 0.067837f, -0.050357f, -0.053144f, 0.027324f, 0.017408f, -0.043971f, -0.058508f, -0.006520f, -0.033006f, 0.037824f, 0.007978f, -0.048412f, 0.031314f, -0.008302f, -0.074454f, 0.048785f, -0.033262f, 0.031828f, -0.055424f, -0.013586f, -0.001639f, -0.023312f, -0.009640f, 0.006327f, 0.069738f, -0.018899f, -0.006643f, -0.020125f, 0.019839f, -0.033107f, 0.025748f, 0.054529f, -0.003468f, 0.054828f, 0.042985f, -0.006604f, 0.087845f, -0.005203f, 0.010051f, -0.002637f, 0.024710f, 0.088627f, -0.007414f, -0.024574f, -0.094917f, 0.073382f, 0.026069f, 0.062647f, 0.021213f, -0.049287f, 0.021796f, 0.014043f, 0.008907f, -0.043760f, 0.024861f, 0.005093f, 0.007085f, -0.023534f, -0.006986f, 0.029920f, 0.025514f, 0.001115f, -0.003219f, -0.003076f, -0.003573f, 0.007315f, 0.018662f, -0.038432f, + -0.011474f, -0.005334f, 0.006004f, -0.007868f, 0.008405f, 0.008271f, 0.011988f, -0.008982f, -0.020549f, 0.031708f, 0.049524f, 0.017380f, -0.025598f, -0.021880f, -0.009539f, -0.007463f, 0.013321f, 0.006754f, -0.005089f, -0.031364f, -0.022582f, -0.025412f, -0.002604f, 0.024352f, 0.010591f, 0.020532f, 0.007739f, -0.034203f, -0.006237f, 0.014954f, 0.052035f, -0.100297f, 0.003839f, -0.112879f, -0.037826f, -0.019176f, 0.034354f, 0.104233f, 0.088592f, 0.032630f, 0.052304f, -0.033992f, -0.028640f, 0.005038f, -0.007691f, 0.024122f, 0.007643f, -0.023575f, 0.034964f, 0.051481f, 0.042786f, 0.031974f, 0.027035f, -0.000898f, 0.004814f, -0.017541f, 0.048722f, 0.022725f, -0.009343f, -0.030078f, 0.010038f, 0.019966f, -0.005333f, 0.063742f, 0.066598f, -0.038570f, -0.028512f, 0.001377f, 0.051732f, 0.032217f, 0.008272f, 0.006292f, -0.012389f, -0.023394f, 0.012866f, 0.079507f, -0.032254f, -0.039456f, -0.042897f, 0.041504f, 0.016953f, -0.023936f, -0.037109f, -0.059506f, -0.070399f, 0.007631f, 0.015385f, 0.012604f, -0.015558f, -0.005306f, -0.019399f, 0.013780f, -0.056165f, -0.092327f, -0.041613f, -0.006545f, + -0.015728f, -0.036136f, 0.046097f, 0.076982f, -0.017400f, 0.039647f, 0.085087f, 0.055403f, 0.019671f, -0.058868f, 0.009434f, 0.010411f, -0.052015f, -0.028881f, -0.008367f, -0.041523f, 0.045086f, 0.064175f, -0.003958f, -0.015019f, -0.008052f, -0.018949f, -0.010574f, -0.026466f, -0.025879f, -0.009669f, -0.012914f, 0.009060f, -0.005892f, -0.007334f, 0.012543f, -0.039251f, -0.004870f, 0.002991f, 0.039506f, -0.040806f, -0.006752f, -0.009477f, 0.007373f, -0.026074f, -0.009235f, 0.007650f, -0.014303f, -0.024131f, -0.004091f, -0.002080f, -0.023590f, 0.027315f, -0.037959f, -0.004519f, -0.014121f, 0.008123f, -0.004195f, -0.011394f, -0.022256f, 0.000444f, 0.010883f, -0.008151f, -0.063885f, 0.051322f, -0.006639f, 0.044078f, 0.026700f, 0.000908f, 0.029202f, -0.012970f, -0.003394f, 0.025120f, 0.030831f, 0.004649f, 0.000060f, -0.001135f, -0.028258f, -0.018415f, 0.007433f, -0.039376f, 0.000962f, -0.014881f, 0.000861f, -0.033408f, 0.005582f, 0.001728f, -0.030374f, 0.025157f, 0.010664f, 0.016984f, -0.038120f, -0.010400f, 0.007083f, -0.002128f, 0.002666f, 0.021679f, 0.004742f, 0.005971f, -0.004451f, -0.008572f, + -0.006039f, -0.003264f, 0.014001f, -0.006518f, -0.024363f, 0.019523f, -0.033470f, -0.010634f, -0.011532f, 0.003855f, -0.016420f, -0.019521f, 0.025353f, -0.003394f, -0.025575f, 0.015434f, -0.035638f, 0.028339f, 0.008797f, 0.001186f, 0.029282f, 0.032505f, 0.004473f, 0.009148f, -0.024587f, 0.031522f, -0.015566f, -0.021840f, -0.001929f, 0.004522f, 0.059840f, -0.027084f, -0.044289f, 0.037730f, -0.014473f, 0.037698f, -0.006462f, 0.002315f, -0.016607f, 0.022763f, -0.038487f, -0.032063f, -0.012669f, 0.014889f, 0.008957f, -0.002506f, 0.018384f, -0.023042f, -0.023171f, -0.015547f, 0.005437f, 0.006509f, 0.001339f, -0.001178f, -0.007025f, 0.003783f, -0.031944f, 0.006279f, 0.006490f, -0.007887f, -0.002974f, 0.009437f, -0.005136f, -0.013834f, 0.016496f, -0.008435f, 0.002032f, -0.000897f, -0.004189f, 0.010946f, 0.004818f, -0.011774f, -0.001327f, -0.002952f, -0.010350f, -0.002433f, -0.003828f, -0.021460f, 0.006497f, 0.012782f, 0.010391f, -0.009856f, 0.009707f, -0.015716f, -0.004822f, 0.000179f, -0.010018f, 0.030774f, -0.014270f, -0.166692f, -0.317489f, -0.113289f, -0.248692f, -0.283326f, 0.068826f, -0.010014f, + 0.094466f, 0.366242f, 0.397099f, 0.280270f, 0.399931f, 0.328631f, 0.108751f, 0.114785f, 0.084777f, -0.221463f, -0.228067f, -0.127080f, -0.221404f, -0.239263f, -0.080504f, -0.070878f, -0.201791f, -0.152136f, -0.025141f, -0.090342f, -0.110420f, -0.027810f, -0.084638f, -0.149264f, -0.085261f, 0.027200f, -0.060233f, -0.074075f, 0.086856f, -0.015380f, -0.083294f, 0.074856f, 0.139027f, -0.032835f, 0.034327f, 0.215801f, 0.029232f, -0.069910f, 0.142989f, 0.124882f, -0.124947f, 0.070688f, 0.157642f, -0.049884f, 0.016706f, 0.273630f, 0.208587f, 0.104851f, 0.384484f, 0.428196f, 0.218623f, 0.394313f, 0.509259f, 0.319481f, 0.301328f, 0.418666f, 0.268914f, 0.170923f, 0.189250f, 0.098264f, -0.115884f, -0.223563f, -0.303104f, -0.516849f, -0.628854f, -0.712789f, -0.806065f, -0.794742f, -0.861447f, -0.769576f, -0.571504f, -0.571397f, -0.450668f, -0.040958f, -0.023992f, 0.011006f, 0.321950f, 0.254277f, 0.084190f, 0.168534f, 0.251006f, 0.092586f, 0.111612f, 0.255003f, 0.185399f, 0.037342f, 0.152664f, 0.215804f, 0.092317f, 0.115997f, 0.265474f, 0.099124f, -0.042901f, 0.122156f, 0.085171f, -0.059539f, + 0.115196f, 0.256592f, 0.120389f, 0.189025f, 0.409700f, 0.340774f, 0.322736f, 0.481498f, 0.444507f, 0.306334f, 0.266166f, 0.238712f, 0.088929f, -0.004042f, 0.012174f, -0.050857f, -0.160916f, -0.160052f, -0.183859f, -0.314162f, -0.351531f, -0.336872f, -0.377984f, -0.453255f, -0.397193f, -0.383825f, -0.409589f, -0.317096f, -0.214604f, -0.167862f, -0.106002f, 0.003644f, 0.042060f, 0.035359f, 0.058610f, 0.064570f, 0.032951f, 0.030227f, 0.059190f, 0.051293f, 0.034765f, 0.041953f, 0.048952f, 0.037014f, 0.048042f, 0.073526f, 0.080820f, 0.077122f, 0.088413f, 0.086142f, 0.060208f, 0.048775f, 0.033277f, 0.025804f, 0.025114f}, + {-0.008142f, 0.006770f, 0.007248f, -0.003433f, 0.007274f, -0.004381f, -0.000954f, 0.009680f, -0.003957f, 0.004608f, 0.002815f, -0.010720f, -0.004831f, 0.008061f, -0.003129f, -0.001530f, 0.005076f, 0.003362f, 0.003620f, 0.000975f, 0.012411f, 0.002126f, -0.003177f, 0.002788f, -0.004275f, 0.007692f, -0.002200f, -0.004217f, -0.001824f, -0.010034f, -0.003388f, -0.007389f, 0.002440f, -0.000120f, 0.002731f, -0.002957f, 0.004226f, 0.001996f, -0.000445f, 0.001295f, 0.000692f, 0.000979f, 0.001375f, -0.005304f, 0.013278f, 0.001963f, -0.004816f, 0.009831f, -0.002347f, -0.008474f, -0.009282f, 0.009076f, -0.001790f, -0.000718f, 0.006018f, 0.000682f, -0.001547f, 0.004699f, -0.000489f, 0.002726f, 0.000799f, 0.003463f, -0.001785f, 0.003770f, -0.001681f, 0.004478f, 0.006509f, 0.003540f, -0.003825f, -0.003936f, -0.001925f, 0.001755f, -0.004088f, 0.002903f, -0.002000f, 0.003601f, 0.004695f, -0.005798f, -0.003263f, 0.005075f, 0.001523f, -0.001591f, 0.007827f, 0.004538f, 0.003744f, -0.000379f, 0.002075f, -0.000147f, 0.001059f, -0.000892f, 0.001205f, 0.000473f, 0.000582f, -0.001764f, 0.002912f, 0.000960f, + 0.000224f, -0.000491f, 0.001194f, 0.001903f, -0.000975f, 0.002048f, -0.000059f, 0.008507f, 0.001676f, 0.001939f, 0.007141f, 0.000092f, 0.005155f, 0.002456f, -0.000577f, 0.000553f, -0.005568f, 0.002612f, 0.000454f, 0.008749f, 0.003102f, 0.002874f, 0.000401f, 0.002592f, 0.009600f, -0.009046f, 0.005133f, 0.001363f, -0.005968f, -0.002667f, -0.003695f, -0.001201f, -0.003428f, 0.002440f, 0.011085f, 0.006983f, 0.008282f, 0.006584f, 0.011301f, 0.008239f, -0.010231f, -0.018567f, -0.002341f, 0.000887f, -0.004519f, 0.009808f, -0.000402f, 0.014683f, -0.006835f, -0.006852f, 0.006337f, 0.000365f, 0.000540f, 0.005826f, -0.010699f, 0.002772f, -0.007657f, 0.010172f, 0.005994f, -0.000015f, 0.015434f, 0.000710f, -0.001461f, -0.001886f, -0.002695f, -0.003801f, 0.007315f, 0.003928f, -0.003743f, -0.001204f, -0.010724f, -0.004693f, -0.001406f, 0.011284f, 0.007696f, 0.001408f, 0.005676f, 0.000244f, 0.006044f, 0.000044f, 0.002507f, -0.006412f, -0.004151f, 0.001605f, 0.000850f, -0.000300f, -0.003257f, 0.003063f, 0.003566f, -0.000864f, -0.003348f, -0.000571f, 0.003593f, -0.000522f, 0.001917f, -0.001672f, + -0.000989f, -0.001309f, 0.001149f, -0.001140f, 0.000211f, -0.000038f, 0.001818f, -0.001458f, 0.001755f, 0.002760f, -0.001279f, 0.000689f, 0.000225f, -0.000010f, 0.003264f, -0.001001f, 0.000829f, -0.001171f, 0.001297f, 0.001004f, 0.000555f, -0.000334f, 0.002862f, -0.000094f, 0.000139f, 0.001266f, 0.006758f, 0.015364f, 0.004510f, 0.000680f, 0.000481f, 0.004334f, 0.004040f, 0.000923f, 0.002428f, 0.003486f, -0.000234f, -0.000317f, 0.004395f, 0.017390f, 0.005816f, 0.013571f, -0.007686f, -0.006262f, -0.002545f, -0.008135f, -0.009538f, -0.003797f, 0.007057f, -0.011752f, -0.001646f, -0.001369f, -0.018507f, 0.003739f, -0.018696f, -0.006195f, -0.002491f, 0.004464f, 0.000060f, 0.003923f, -0.003650f, -0.000159f, -0.012619f, 0.004667f, -0.004184f, -0.007020f, 0.001332f, 0.003580f, -0.000587f, 0.000959f, 0.005399f, 0.009604f, -0.016113f, 0.004444f, 0.001095f, -0.004726f, -0.005132f, -0.001004f, 0.002227f, -0.002119f, -0.009693f, -0.002244f, 0.002640f, 0.005092f, -0.000664f, 0.012067f, 0.001065f, 0.000574f, 0.004921f, -0.007666f, 0.011395f, 0.003671f, 0.006773f, 0.003058f, 0.005668f, -0.001153f, + -0.001080f, 0.003404f, 0.001981f, -0.001554f, -0.003438f, -0.002757f, -0.005684f, -0.000126f, -0.007630f, 0.000542f, 0.004448f, -0.000365f, -0.003249f, -0.005949f, 0.005313f, -0.003153f, 0.002155f, 0.000840f, -0.000944f, -0.005659f, 0.000474f, -0.000511f, 0.001395f, -0.001717f, -0.001653f, 0.000508f, -0.001839f, -0.003102f, -0.001686f, -0.001285f, -0.000314f, -0.002037f, -0.000358f, -0.001150f, 0.002672f, -0.000478f, -0.001454f, -0.000465f, 0.001421f, -0.000555f, -0.002429f, -0.002572f, 0.002759f, 0.000065f, 0.000236f, -0.001620f, 0.009175f, 0.010026f, -0.000309f, 0.011060f, 0.000706f, -0.001427f, 0.001368f, 0.000939f, -0.002035f, -0.000091f, -0.007697f, -0.004381f, 0.006899f, 0.008120f, -0.009468f, -0.002241f, 0.003957f, -0.006299f, -0.018127f, 0.004539f, 0.006727f, 0.007911f, -0.004150f, -0.004784f, -0.006451f, 0.009922f, 0.011302f, 0.001962f, 0.004472f, -0.008833f, -0.007154f, 0.008412f, 0.003190f, -0.006613f, 0.011668f, -0.011647f, 0.001962f, 0.001146f, 0.010944f, 0.004045f, -0.002396f, 0.001814f, -0.003764f, 0.006027f, -0.014227f, -0.004189f, -0.020507f, -0.008928f, 0.010416f, -0.000835f, + 0.015961f, -0.002138f, -0.013286f, 0.008461f, 0.001877f, -0.005405f, -0.000609f, 0.000682f, -0.005364f, 0.003571f, 0.009571f, 0.010792f, 0.000321f, 0.005177f, -0.000468f, 0.012274f, -0.006204f, 0.005328f, -0.001123f, -0.000179f, 0.000426f, 0.004271f, -0.001224f, 0.015347f, 0.001569f, 0.001423f, -0.002334f, 0.009057f, 0.003125f, -0.003008f, -0.006407f, 0.000176f, 0.006207f, 0.002168f, 0.001852f, -0.003964f, -0.000163f, 0.001275f, -0.000569f, -0.001028f, -0.001052f, -0.002100f, 0.001718f, 0.000178f, 0.000782f, 0.001341f, 0.003286f, -0.001230f, -0.003289f, 0.003725f, -0.000935f, 0.000406f, 0.000129f, -0.000400f, -0.000376f, 0.001501f, 0.001398f, 0.001824f, -0.000584f, 0.001704f, 0.000018f, 0.001001f, 0.001719f, -0.000346f, 0.000273f, 0.001450f, 0.002209f, 0.001207f, 0.001418f, 0.000465f, 0.000233f, 0.011217f, -0.015209f, -0.002091f, -0.010304f, -0.010701f, 0.003852f, 0.002091f, 0.022178f, 0.001170f, 0.008175f, -0.018483f, -0.004405f, 0.004101f, -0.009589f, 0.006369f, 0.001876f, 0.001584f, 0.005430f, 0.006275f, 0.014564f, 0.006493f, -0.002273f, 0.004621f, -0.007217f, 0.002133f, + 0.005897f, -0.000382f, 0.001249f, 0.006468f, 0.008369f, 0.020134f, 0.003970f, -0.002973f, -0.013726f, -0.000561f, 0.010491f, -0.016272f, 0.001846f, -0.001178f, 0.005167f, -0.008147f, -0.009577f, 0.017440f, -0.011080f, 0.003615f, -0.000648f, -0.010889f, 0.025231f, 0.006521f, 0.013258f, 0.007136f, 0.014494f, -0.002628f, -0.005367f, 0.009227f, -0.008414f, 0.007100f, -0.006689f, 0.003877f, 0.010021f, 0.005525f, -0.004386f, -0.000729f, 0.005161f, -0.008772f, -0.006437f, 0.000544f, -0.000961f, 0.014929f, -0.008104f, -0.013908f, -0.002001f, 0.007769f, 0.012639f, -0.007752f, -0.013094f, -0.002872f, 0.018434f, 0.002449f, 0.000080f, -0.006529f, 0.000994f, -0.000358f, 0.005764f, 0.005846f, -0.000268f, 0.002809f, 0.003223f, -0.008919f, -0.001955f, 0.003105f, -0.000330f, 0.005247f, 0.002192f, 0.000548f, -0.003676f, -0.000375f, -0.000402f, 0.002028f, -0.000490f, 0.005474f, -0.000941f, -0.000543f, -0.002585f, 0.000625f, -0.003298f, 0.000177f, -0.000251f, 0.001382f, 0.003305f, 0.000131f, 0.002789f, -0.000151f, -0.003078f, -0.000620f, 0.000445f, -0.005873f, 0.006684f, -0.024099f, 0.013657f, 0.004012f, + -0.005390f, 0.007326f, -0.019693f, -0.016439f, 0.002134f, -0.008119f, 0.018644f, 0.016556f, 0.017607f, -0.011755f, 0.006848f, 0.000257f, 0.017552f, 0.001237f, 0.012411f, 0.004965f, -0.005245f, -0.015801f, -0.014315f, 0.004563f, -0.019076f, -0.000294f, -0.004502f, -0.009279f, -0.012739f, -0.007495f, 0.000117f, 0.015342f, 0.000062f, 0.005976f, -0.021823f, -0.012203f, -0.002315f, -0.013697f, 0.000958f, 0.013687f, -0.014814f, 0.006107f, -0.000177f, -0.005081f, -0.001374f, -0.003192f, 0.015088f, 0.008080f, 0.007522f, -0.003638f, -0.004589f, 0.020755f, -0.006279f, -0.005687f, -0.017124f, 0.012486f, -0.024312f, 0.003305f, -0.007993f, 0.003772f, 0.008642f, -0.005885f, -0.012974f, -0.008054f, 0.000889f, 0.017596f, -0.008856f, -0.001983f, -0.011438f, -0.009251f, 0.005706f, 0.006086f, 0.013932f, -0.016313f, -0.000130f, -0.008661f, -0.005682f, 0.003371f, -0.006429f, -0.012829f, -0.007296f, -0.001179f, 0.011710f, 0.011871f, 0.004131f, 0.000584f, 0.001741f, 0.005382f, 0.000467f, 0.000784f, 0.002475f, -0.003438f, 0.000350f, 0.004871f, -0.001472f, 0.000514f, 0.006031f, -0.001554f, -0.000222f, 0.000892f, + 0.004392f, -0.000105f, 0.000690f, 0.001519f, 0.000754f, 0.003605f, -0.004341f, -0.004896f, -0.000315f, -0.001840f, 0.000058f, 0.002598f, -0.001164f, 0.004905f, 0.003133f, -0.022498f, 0.005994f, 0.002045f, 0.003733f, -0.030964f, 0.027622f, 0.000543f, -0.000639f, -0.000571f, -0.010076f, 0.003227f, 0.000325f, 0.009878f, -0.008701f, 0.011079f, 0.003137f, -0.006937f, -0.011946f, -0.014919f, 0.007440f, 0.001303f, -0.001325f, 0.001004f, -0.008632f, 0.009265f, 0.006893f, 0.017110f, 0.010138f, 0.006757f, 0.009407f, -0.002248f, -0.009500f, -0.007098f, 0.000519f, -0.004992f, 0.007357f, -0.008374f, -0.012708f, -0.013888f, 0.000757f, -0.018993f, 0.008607f, 0.009922f, -0.011412f, 0.011567f, -0.013771f, 0.006874f, -0.020287f, 0.002714f, -0.003787f, 0.001469f, -0.005451f, -0.000313f, -0.018884f, -0.003159f, -0.006554f, -0.011941f, -0.003283f, -0.009330f, 0.002880f, -0.008409f, -0.004928f, -0.012066f, 0.005241f, -0.011538f, -0.000938f, 0.018483f, -0.003245f, 0.000547f, 0.005908f, -0.004115f, -0.018874f, -0.021426f, -0.003671f, -0.014981f, 0.000640f, -0.004088f, 0.013867f, 0.001018f, 0.005153f, -0.014113f, + 0.001141f, -0.003184f, -0.002673f, 0.010199f, 0.002419f, -0.001216f, -0.005667f, 0.002772f, 0.003847f, 0.001434f, 0.005264f, -0.000225f, 0.002886f, -0.001611f, -0.000674f, 0.000797f, 0.000820f, 0.001920f, -0.000637f, 0.005928f, -0.001807f, -0.005058f, 0.001953f, -0.000070f, 0.001401f, 0.001957f, 0.001135f, -0.000736f, -0.002730f, 0.001507f, -0.004700f, 0.001768f, 0.008859f, 0.006059f, -0.019271f, -0.000683f, 0.003353f, -0.017951f, -0.020416f, 0.011055f, -0.020043f, 0.003805f, 0.013258f, -0.009759f, -0.023023f, -0.009908f, 0.000487f, 0.015086f, -0.006205f, 0.026665f, -0.001894f, -0.002174f, -0.015481f, -0.011029f, -0.001872f, 0.005334f, 0.001456f, -0.005585f, -0.004687f, -0.001317f, -0.005807f, -0.011524f, 0.009383f, -0.009563f, -0.005868f, 0.009956f, 0.002919f, -0.016241f, -0.017254f, -0.015903f, 0.013631f, -0.014798f, -0.015944f, 0.025849f, -0.016331f, 0.011357f, -0.002325f, 0.006908f, -0.023450f, 0.010608f, 0.001289f, -0.003909f, -0.001206f, -0.004677f, 0.007506f, 0.005428f, 0.021988f, -0.005678f, -0.004244f, 0.010338f, 0.021247f, 0.005732f, 0.004235f, -0.010220f, -0.006725f, -0.017697f, + -0.003795f, -0.000583f, -0.000251f, 0.012590f, -0.004073f, 0.006666f, 0.022244f, -0.003575f, -0.000887f, -0.002747f, -0.000508f, -0.022830f, -0.025994f, 0.001172f, 0.017039f, 0.000063f, -0.034483f, 0.008845f, -0.012118f, 0.005629f, -0.021562f, -0.013531f, -0.003426f, 0.000467f, -0.007950f, 0.003303f, 0.007865f, -0.001130f, -0.001146f, -0.000919f, -0.003764f, 0.003375f, -0.004281f, 0.003358f, 0.000436f, 0.000978f, -0.003750f, -0.002688f, -0.005202f, 0.002207f, 0.000275f, -0.001774f, -0.004996f, -0.001277f, -0.001572f, -0.003338f, -0.003726f, 0.002018f, -0.004223f, -0.001783f, 0.003408f, 0.000852f, -0.002104f, -0.000509f, -0.000008f, -0.005460f, 0.000442f, 0.009593f, -0.001514f, 0.011349f, -0.001641f, -0.004678f, -0.006816f, 0.009648f, 0.005971f, -0.005227f, 0.004411f, 0.009823f, -0.005033f, -0.032981f, -0.014330f, -0.006389f, -0.003622f, 0.014881f, -0.025880f, -0.018927f, 0.015967f, 0.009987f, 0.040103f, 0.011410f, 0.009279f, 0.011135f, 0.005120f, -0.007054f, 0.000839f, -0.007433f, 0.012795f, 0.000703f, 0.012912f, 0.000524f, -0.000340f, -0.017446f, 0.009141f, -0.011788f, 0.009280f, -0.001690f, + 0.009728f, 0.003993f, 0.013049f, -0.020197f, 0.002388f, -0.013963f, 0.016978f, 0.001192f, -0.017035f, 0.022672f, 0.016647f, 0.010856f, -0.010213f, -0.034125f, 0.009864f, -0.003554f, -0.004266f, 0.016975f, -0.001638f, 0.007953f, 0.016224f, -0.003406f, -0.020620f, 0.000014f, 0.009217f, 0.006201f, -0.005557f, -0.002100f, -0.015128f, 0.005811f, 0.002034f, 0.003396f, -0.002302f, 0.002345f, 0.012956f, -0.007886f, 0.005888f, -0.001925f, -0.000539f, 0.023626f, -0.006340f, 0.010972f, 0.007669f, -0.007161f, -0.008291f, 0.003142f, 0.001703f, -0.003715f, 0.001905f, -0.003874f, 0.003700f, -0.003434f, 0.008836f, 0.001043f, 0.008440f, 0.001873f, -0.000304f, 0.010967f, 0.003716f, -0.002937f, 0.002917f, -0.002271f, -0.003448f, 0.001803f, 0.004164f, -0.003808f, 0.002610f, -0.001841f, -0.004286f, 0.000067f, 0.004137f, -0.001702f, -0.004771f, 0.001691f, -0.002306f, -0.006916f, 0.002965f, 0.000291f, -0.003820f, -0.001893f, -0.001364f, -0.003790f, -0.000503f, 0.005598f, 0.007462f, -0.006932f, 0.008596f, -0.009384f, -0.037291f, 0.007687f, 0.009144f, 0.037913f, -0.007881f, -0.006014f, 0.017967f, 0.023587f, + -0.038282f, -0.021797f, 0.021006f, -0.010806f, 0.000761f, 0.008671f, -0.024364f, -0.053415f, -0.020946f, 0.030492f, 0.024236f, 0.020546f, -0.006158f, 0.011559f, -0.006187f, 0.010655f, -0.011091f, 0.003813f, -0.026934f, 0.006709f, -0.009468f, 0.013934f, 0.013507f, 0.000571f, -0.012685f, 0.012700f, 0.007999f, 0.021856f, -0.002194f, -0.013397f, -0.006665f, -0.034163f, -0.017465f, 0.008513f, -0.002237f, -0.022846f, 0.015638f, 0.021470f, -0.030215f, 0.029386f, -0.002742f, -0.003107f, 0.018461f, 0.003902f, 0.017456f, -0.002173f, 0.006275f, -0.006508f, -0.003490f, 0.008927f, 0.035021f, -0.012532f, 0.022313f, -0.001754f, 0.002126f, 0.008497f, 0.019433f, -0.017807f, 0.002122f, 0.028535f, 0.008514f, -0.012908f, 0.007608f, 0.011343f, 0.002655f, 0.022453f, 0.016167f, 0.028195f, -0.002513f, 0.008174f, -0.000231f, 0.001100f, -0.015591f, -0.010717f, -0.012394f, -0.005895f, -0.000009f, -0.002487f, -0.005008f, -0.004325f, 0.008399f, 0.012266f, 0.005577f, -0.006132f, 0.009784f, -0.002723f, -0.001556f, -0.005737f, -0.004702f, 0.006294f, 0.002052f, -0.002110f, 0.000399f, -0.006376f, -0.005515f, -0.006272f, + 0.000150f, -0.003446f, 0.005701f, 0.003630f, -0.002412f, 0.002654f, 0.006672f, -0.003945f, 0.003069f, 0.004026f, -0.003559f, -0.003086f, -0.003791f, -0.000487f, -0.001087f, 0.004279f, -0.001410f, -0.001602f, -0.024208f, -0.006073f, 0.025254f, 0.016089f, 0.019075f, -0.012157f, -0.006061f, -0.001844f, -0.002512f, 0.027037f, 0.003615f, -0.027554f, -0.012202f, -0.008339f, 0.017897f, 0.003592f, 0.003962f, 0.015205f, 0.033161f, -0.048691f, 0.032513f, -0.006312f, -0.005636f, -0.012502f, 0.009773f, 0.010074f, 0.019167f, 0.003071f, 0.018274f, -0.001769f, -0.004700f, 0.005735f, -0.002892f, 0.009371f, 0.016816f, 0.002078f, -0.001113f, 0.022027f, -0.016161f, -0.002933f, 0.005495f, -0.001815f, 0.019472f, -0.022724f, 0.002225f, -0.019434f, 0.003321f, -0.020612f, -0.002776f, 0.000724f, 0.011498f, 0.028118f, -0.016209f, -0.008933f, -0.016808f, -0.000911f, -0.024635f, -0.016030f, -0.016148f, 0.011072f, 0.020395f, 0.000327f, 0.040263f, -0.025369f, 0.035996f, -0.025210f, -0.005764f, 0.011125f, 0.008300f, 0.035596f, 0.020630f, -0.026557f, 0.014054f, -0.011106f, -0.036645f, -0.000876f, -0.023177f, 0.029443f, + 0.044812f, 0.028465f, -0.005401f, -0.015784f, -0.005683f, 0.025025f, -0.003571f, 0.013058f, 0.001661f, 0.005803f, 0.008974f, 0.002822f, 0.003663f, 0.002972f, -0.010753f, 0.007593f, 0.000282f, 0.003211f, -0.004058f, -0.003582f, -0.010197f, -0.005784f, -0.003413f, 0.006363f, -0.003018f, 0.004263f, 0.005532f, -0.002042f, -0.001168f, 0.000135f, 0.006282f, 0.003878f, 0.002428f, 0.011406f, -0.000014f, 0.011915f, -0.010453f, -0.004710f, 0.007841f, 0.007371f, -0.004280f, 0.002498f, -0.003563f, -0.007793f, 0.001082f, -0.024791f, -0.015691f, 0.000016f, 0.031289f, -0.005443f, 0.014124f, 0.029082f, -0.023681f, 0.010906f, -0.038174f, 0.023827f, -0.023236f, -0.011165f, 0.037938f, 0.013137f, 0.040863f, -0.016842f, 0.000754f, -0.017883f, 0.012160f, 0.052201f, 0.013790f, 0.017953f, -0.025687f, -0.004634f, 0.001779f, 0.020317f, 0.018101f, 0.033533f, -0.026477f, -0.009003f, -0.028854f, -0.024531f, 0.002345f, 0.002395f, 0.017878f, -0.016635f, 0.012670f, -0.039493f, 0.025489f, 0.019318f, 0.009507f, -0.006412f, -0.004215f, 0.002928f, 0.012360f, 0.004256f, 0.003845f, 0.000126f, 0.027608f, 0.023549f, + 0.010546f, 0.002405f, -0.020006f, -0.019885f, 0.056444f, 0.002390f, 0.007499f, 0.031492f, 0.014320f, -0.008515f, -0.006066f, 0.020144f, 0.040798f, -0.028879f, -0.011633f, -0.032585f, -0.030040f, 0.039706f, 0.018161f, 0.000712f, -0.007205f, 0.013367f, 0.030499f, 0.019428f, 0.031455f, 0.008939f, -0.013263f, 0.022705f, -0.015464f, -0.040691f, 0.012673f, 0.001767f, 0.001242f, 0.000397f, 0.017729f, 0.029967f, -0.005491f, 0.016000f, 0.018028f, 0.016180f, 0.002441f, 0.003816f, 0.015875f, 0.000483f, -0.004178f, -0.003067f, -0.005865f, 0.015239f, -0.008129f, -0.002212f, 0.004322f, 0.008718f, 0.001784f, -0.001116f, 0.016535f, 0.003608f, -0.002827f, 0.012295f, 0.015845f, 0.007301f, -0.005812f, 0.000195f, -0.002296f, 0.004958f, 0.000711f, 0.000304f, 0.000145f, -0.003275f, 0.005894f, 0.002297f, 0.001922f, 0.005429f, 0.007385f, -0.000966f, -0.006833f, -0.002635f, -0.000371f, 0.009245f, 0.003756f, 0.001548f, -0.001236f, 0.012163f, -0.026045f, -0.019449f, -0.007585f, -0.024239f, 0.027393f, -0.003051f, -0.006906f, -0.023086f, -0.003778f, -0.021496f, -0.053221f, 0.009274f, -0.006486f, -0.016802f, + 0.012131f, -0.028258f, -0.001628f, -0.015444f, -0.042634f, -0.009790f, -0.018440f, -0.020247f, 0.034246f, -0.009152f, -0.012226f, -0.006228f, -0.000681f, -0.008689f, -0.011953f, -0.001967f, 0.009122f, 0.028862f, 0.021894f, -0.000870f, -0.001561f, -0.048544f, 0.003089f, 0.006566f, 0.020010f, -0.011260f, -0.009944f, 0.073504f, -0.012504f, -0.036045f, -0.034810f, 0.030434f, -0.020293f, 0.008722f, -0.041276f, 0.010218f, -0.011471f, -0.022259f, -0.019009f, -0.047212f, 0.007727f, 0.013430f, 0.033666f, 0.009755f, -0.017980f, 0.026298f, 0.003292f, 0.024728f, 0.027780f, 0.079430f, 0.021511f, 0.005409f, -0.030753f, -0.034781f, -0.009137f, 0.003576f, -0.004237f, -0.031497f, 0.014283f, 0.036263f, 0.008605f, 0.025754f, 0.040303f, 0.035802f, -0.015051f, -0.028905f, -0.019457f, 0.002394f, 0.006587f, -0.003668f, -0.030315f, 0.005743f, -0.024609f, 0.007444f, -0.010796f, 0.001469f, -0.013480f, 0.008845f, -0.002043f, 0.005566f, 0.000983f, -0.006016f, -0.013764f, -0.003387f, -0.000098f, 0.008032f, 0.011627f, 0.008803f, 0.013368f, 0.000578f, 0.011482f, 0.019414f, 0.000741f, 0.003533f, 0.011303f, 0.003623f, + -0.009643f, -0.005860f, -0.016616f, -0.005190f, 0.010455f, 0.005548f, 0.001556f, -0.002433f, 0.006749f, 0.003414f, -0.003257f, -0.008104f, -0.014449f, 0.001735f, 0.002660f, -0.002311f, -0.004497f, -0.001324f, -0.004871f, -0.010617f, -0.032075f, -0.013846f, -0.004925f, 0.009964f, -0.011694f, 0.019163f, -0.009872f, -0.013093f, 0.037151f, 0.019355f, 0.042240f, 0.000605f, -0.012209f, -0.016583f, 0.044782f, -0.038352f, -0.014289f, 0.052279f, -0.031452f, 0.010514f, 0.010915f, 0.013624f, 0.003116f, 0.029419f, -0.009106f, 0.026486f, -0.009969f, 0.005860f, 0.006356f, -0.013493f, 0.019659f, -0.029632f, -0.020651f, -0.019196f, -0.008825f, -0.026326f, -0.048653f, -0.008772f, -0.014543f, 0.007841f, -0.012512f, -0.064607f, 0.018024f, 0.040744f, -0.002311f, -0.008548f, 0.063649f, -0.078703f, -0.017019f, 0.044063f, -0.010740f, 0.034220f, -0.025025f, -0.015443f, 0.011874f, -0.075099f, 0.024366f, -0.025498f, 0.037647f, 0.027752f, -0.039952f, 0.079050f, 0.011685f, 0.004308f, -0.004008f, 0.031227f, -0.057070f, 0.023507f, -0.002647f, -0.008938f, 0.015346f, -0.036781f, 0.052292f, 0.047564f, -0.087612f, 0.012733f, + -0.017404f, -0.082137f, -0.014122f, -0.036592f, 0.020295f, 0.005335f, 0.014310f, -0.033074f, 0.051685f, -0.004910f, -0.013810f, 0.024002f, -0.000938f, 0.017096f, -0.003555f, 0.026906f, 0.000702f, 0.013493f, 0.004212f, -0.001020f, -0.002785f, 0.015114f, -0.010762f, -0.011996f, 0.000334f, -0.014118f, 0.021452f, -0.004509f, -0.011016f, 0.001313f, 0.009911f, 0.004891f, 0.010222f, 0.004102f, 0.024887f, 0.006045f, -0.013412f, 0.025895f, -0.013874f, 0.014806f, 0.022235f, -0.006012f, 0.005068f, 0.015714f, -0.010611f, 0.015455f, 0.002504f, 0.048380f, -0.021567f, -0.062246f, -0.062451f, 0.005025f, 0.007829f, -0.027419f, 0.016397f, -0.034713f, 0.011244f, -0.015697f, 0.032251f, 0.041288f, 0.001427f, 0.039949f, 0.036359f, -0.020089f, -0.000425f, -0.025719f, -0.006388f, -0.005979f, 0.014095f, -0.002453f, -0.003890f, -0.004244f, -0.041684f, -0.063092f, -0.025306f, 0.033056f, 0.025587f, -0.027021f, -0.031089f, 0.018300f, 0.018550f, -0.040998f, 0.020829f, -0.027245f, -0.004991f, 0.031888f, 0.044249f, 0.000414f, -0.026055f, 0.017004f, 0.003480f, 0.027620f, 0.004886f, 0.023067f, 0.023819f, -0.006577f, + -0.090404f, 0.010377f, 0.002502f, 0.036753f, -0.013206f, 0.037483f, 0.037161f, -0.024640f, -0.122536f, -0.016318f, 0.005165f, -0.014602f, 0.073926f, 0.077549f, 0.054148f, 0.077061f, -0.019748f, 0.036315f, -0.030193f, 0.051558f, 0.036190f, -0.060429f, 0.076706f, -0.078987f, -0.067245f, -0.063382f, 0.020368f, 0.047968f, 0.039975f, 0.013520f, -0.049462f, 0.045996f, 0.006564f, -0.016281f, -0.021073f, 0.002883f, 0.043451f, -0.033295f, -0.013205f, 0.066281f, 0.012413f, 0.030413f, 0.005995f, 0.003400f, 0.016486f, -0.024784f, 0.013662f, -0.010017f, 0.000719f, 0.006965f, -0.006164f, -0.012751f, -0.008313f, -0.011136f, -0.024883f, 0.005821f, 0.023508f, -0.004443f, 0.024035f, 0.018634f, -0.015013f, -0.011871f, -0.011068f, 0.014914f, 0.009471f, -0.030426f, -0.017508f, 0.001795f, 0.001744f, -0.004367f, 0.004315f, 0.020283f, -0.000239f, 0.016169f, 0.001912f, -0.011631f, -0.048373f, -0.091572f, 0.019519f, 0.034057f, -0.004724f, 0.046735f, 0.018031f, -0.057686f, -0.014396f, 0.012528f, 0.014461f, 0.016156f, -0.011491f, 0.027055f, 0.002497f, -0.017058f, -0.007714f, 0.009777f, 0.038391f, 0.050042f, + 0.037862f, 0.059971f, -0.057249f, -0.015729f, -0.014706f, -0.058551f, -0.013892f, 0.010335f, 0.003194f, 0.006765f, -0.023226f, -0.026278f, 0.030078f, 0.067376f, -0.031591f, 0.034890f, -0.022496f, 0.009243f, -0.020735f, -0.003357f, -0.052162f, -0.018834f, -0.002812f, -0.072285f, -0.042227f, -0.070738f, -0.059747f, 0.039942f, 0.093750f, 0.074906f, 0.002356f, -0.004467f, 0.000413f, -0.016598f, -0.032022f, -0.113245f, -0.037773f, -0.016048f, 0.009417f, 0.005088f, -0.039886f, -0.027753f, 0.014872f, 0.050170f, 0.029944f, 0.016330f, 0.032810f, 0.056243f, 0.022084f, -0.055829f, 0.043048f, -0.032972f, -0.017242f, 0.033460f, 0.074930f, 0.016331f, 0.096031f, -0.022634f, -0.099533f, -0.011303f, -0.032025f, -0.060897f, 0.092337f, 0.026378f, 0.030145f, 0.000034f, -0.008050f, 0.026887f, 0.022172f, 0.001491f, -0.003577f, -0.015790f, -0.003070f, -0.004542f, 0.025352f, 0.030632f, 0.036509f, -0.003925f, -0.001180f, -0.001260f, -0.001156f, 0.024028f, -0.010060f, -0.007784f, -0.013827f, -0.010778f, 0.013709f, -0.002577f, -0.000259f, 0.004230f, 0.008811f, 0.014204f, 0.017510f, -0.002224f, -0.010110f, -0.017816f, + 0.009197f, 0.003571f, 0.008689f, 0.022692f, 0.019929f, -0.009803f, 0.005187f, 0.010330f, -0.017274f, -0.005185f, -0.003795f, -0.016623f, -0.007505f, -0.000550f, 0.015487f, -0.039211f, -0.064156f, 0.039542f, -0.006322f, -0.038790f, 0.018568f, 0.041936f, 0.036298f, -0.074941f, -0.064756f, 0.016028f, -0.030147f, 0.007543f, 0.036478f, -0.020019f, -0.014791f, 0.060371f, 0.016299f, -0.008553f, -0.019364f, -0.017300f, 0.022583f, -0.013741f, -0.002793f, -0.001916f, -0.024751f, -0.009655f, -0.041105f, -0.054695f, 0.019353f, 0.029642f, -0.034586f, 0.025043f, 0.017096f, -0.012049f, -0.024037f, 0.003534f, 0.042990f, 0.024683f, 0.007634f, -0.043305f, -0.048405f, -0.023672f, 0.012910f, 0.053892f, -0.040636f, -0.021597f, -0.018548f, 0.032122f, 0.086940f, 0.022894f, -0.085287f, -0.019077f, -0.010150f, 0.043580f, 0.000858f, 0.022499f, -0.011250f, -0.020354f, -0.018995f, -0.048375f, 0.044814f, 0.047461f, 0.019060f, 0.050188f, -0.015890f, 0.032406f, -0.015213f, -0.036488f, -0.040344f, -0.043148f, 0.007476f, -0.080651f, 0.084287f, -0.004121f, -0.032179f, -0.046693f, -0.038209f, -0.002726f, -0.025061f, -0.007685f, + -0.044426f, -0.027512f, -0.078846f, -0.022053f, -0.051987f, 0.018979f, -0.018535f, 0.015186f, 0.017539f, 0.018780f, -0.013122f, 0.043372f, -0.009990f, 0.031383f, 0.001061f, 0.007453f, -0.002563f, 0.013581f, -0.006829f, -0.017567f, 0.003478f, 0.004879f, 0.016106f, -0.026160f, -0.009196f, 0.006612f, -0.025776f, -0.000033f, 0.009325f, -0.032198f, -0.014142f, 0.007556f, -0.004546f, -0.024690f, -0.038083f, -0.022933f, 0.013794f, -0.007335f, 0.017361f, 0.004100f, 0.000599f, 0.025677f, 0.001716f, 0.022074f, 0.008517f, 0.013722f, 0.051659f, 0.030900f, -0.014607f, 0.007794f, 0.065210f, 0.048916f, 0.018649f, 0.009577f, 0.030646f, 0.027733f, -0.044416f, -0.064016f, 0.021658f, 0.049780f, 0.071325f, 0.000260f, -0.016064f, -0.044747f, -0.026291f, 0.029846f, -0.000940f, -0.038234f, -0.076855f, -0.076929f, 0.016102f, -0.023256f, 0.042983f, -0.088619f, -0.029283f, 0.017007f, 0.012665f, 0.016637f, -0.028053f, 0.012642f, -0.002436f, -0.016820f, -0.003353f, -0.041714f, 0.038237f, 0.047018f, 0.035058f, -0.056100f, -0.029915f, -0.001561f, 0.018911f, 0.027877f, 0.030051f, 0.023900f, -0.006352f, -0.004209f, + -0.007600f, 0.039750f, 0.110886f, 0.069820f, -0.057772f, -0.057031f, -0.036135f, -0.073404f, 0.086194f, 0.045758f, -0.026728f, -0.076142f, -0.072746f, 0.082494f, 0.050880f, 0.010855f, 0.063648f, -0.066345f, -0.007314f, 0.003873f, -0.017033f, 0.006222f, -0.024633f, -0.067121f, 0.016619f, -0.051360f, 0.068379f, 0.064422f, -0.024679f, -0.011722f, 0.000748f, 0.007185f, 0.072776f, 0.074230f, -0.118059f, -0.066083f, -0.037934f, 0.014657f, 0.033178f, 0.031875f, -0.045735f, -0.049280f, -0.057944f, -0.007394f, 0.060108f, 0.001119f, 0.011976f, -0.013935f, -0.064086f, 0.014550f, -0.026859f, -0.033773f, 0.014672f, 0.112052f, 0.037990f, -0.021252f, -0.028734f, -0.027139f, -0.022173f, 0.029245f, 0.035103f, 0.040303f, -0.007247f, 0.025914f, -0.039678f, 0.009351f, 0.014544f, 0.017835f, -0.014242f, 0.007466f, 0.033265f, -0.008886f, -0.009336f, -0.005839f, 0.032848f, 0.021005f, 0.051104f, 0.012555f, -0.018062f, -0.014020f, 0.018996f, 0.062761f, 0.051461f, 0.010384f, -0.037718f, -0.046871f, -0.014861f, -0.011534f, 0.011158f, -0.023191f, 0.043423f, -0.071041f, 0.061891f, 0.091249f, 0.099055f, -0.111717f, + 0.020515f, -0.003550f, -0.009594f, 0.047227f, -0.020168f, -0.033244f, 0.032739f, 0.016600f, 0.067899f, -0.007023f, -0.053752f, 0.001516f, -0.024523f, 0.040001f, -0.061757f, -0.021995f, -0.029014f, -0.041284f, 0.056412f, -0.041381f, -0.005840f, 0.038699f, 0.022574f, -0.013839f, -0.021546f, -0.057957f, 0.007507f, 0.075988f, 0.046416f, -0.003440f, 0.022691f, -0.017349f, 0.062248f, -0.042103f, 0.028786f, -0.023326f, 0.038697f, 0.064015f, -0.014201f, -0.041908f, 0.020661f, -0.057085f, 0.094280f, 0.010832f, -0.049916f, -0.017342f, -0.077918f, 0.009716f, 0.111818f, -0.020586f, -0.065644f, -0.046166f, 0.068598f, 0.020201f, -0.035860f, -0.002093f, 0.017765f, 0.038163f, 0.094258f, -0.077084f, 0.034336f, 0.076882f, -0.011567f, -0.091504f, -0.088189f, -0.052018f, 0.154827f, -0.113527f, 0.038495f, -0.119561f, -0.057172f, 0.248736f, 0.024097f, -0.108939f, -0.104197f, -0.120634f, 0.151883f, 0.019190f, -0.028529f, -0.120897f, -0.028783f, 0.037292f, 0.122964f, -0.044405f, 0.013546f, -0.053503f, 0.018442f, 0.074164f, 0.045684f, -0.067146f, 0.031702f, 0.011802f, 0.029125f, 0.025216f, -0.067527f, 0.001850f, + -0.015844f, -0.026123f, 0.013680f, -0.025363f, -0.049684f, 0.018644f, -0.014456f, 0.064441f, 0.009956f, -0.060331f, -0.067966f, -0.022310f, 0.002211f, 0.051797f, 0.039736f, 0.008602f, -0.031510f, 0.012855f, -0.000950f, -0.026009f, 0.002207f, 0.032671f, 0.029738f, 0.006545f, -0.049883f, 0.011838f, 0.020087f, 0.031148f, 0.028815f, 0.019747f, 0.040543f, -0.104954f, 0.018372f, -0.094300f, 0.041609f, 0.044559f, 0.088024f, 0.038943f, 0.020170f, 0.023008f, -0.027463f, -0.067339f, -0.046846f, -0.044232f, 0.018854f, 0.010938f, -0.011495f, 0.040220f, 0.062071f, -0.027821f, -0.039033f, 0.043089f, 0.007640f, -0.057484f, -0.013243f, 0.025977f, -0.047421f, -0.008416f, 0.010439f, 0.024082f, 0.012829f, 0.034076f, 0.058467f, 0.010282f, -0.037335f, -0.004361f, 0.011238f, -0.029684f, -0.013278f, 0.027295f, -0.020809f, -0.037573f, 0.052149f, -0.012648f, -0.012958f, -0.020826f, -0.020542f, 0.033764f, 0.008587f, 0.007669f, 0.045003f, -0.021589f, -0.034822f, -0.002085f, 0.003321f, -0.014823f, 0.011486f, -0.002519f, -0.012421f, -0.002310f, -0.043903f, 0.009715f, 0.008564f, -0.007535f, 0.023614f, 0.015892f, + 0.008236f, 0.010497f, -0.045342f, 0.053579f, -0.020120f, -0.019491f, 0.016412f, -0.049151f, 0.015952f, -0.036830f, 0.004253f, -0.029155f, 0.009421f, 0.012738f, 0.019843f, 0.001690f, 0.017599f, 0.026494f, -0.010283f, -0.006087f, 0.014722f, -0.000991f, -0.009370f, 0.008009f, 0.001858f, -0.006219f, -0.009427f, -0.008639f, -0.005668f, 0.019092f, -0.018364f, 0.018514f, 0.001264f, 0.004943f, 0.009297f, 0.005440f, 0.013550f, -0.000863f, -0.000382f, -0.008403f, -0.001842f, -0.011542f, 0.023062f, 0.001576f, -0.010356f, -0.017000f, -0.005526f, 0.008818f, -0.016504f, 0.021747f, -0.010629f, -0.027917f, 0.001576f, 0.011646f, -0.001613f, -0.000956f, 0.002851f, -0.013285f, -0.048676f, 0.078932f, -0.003980f, 0.044724f, -0.040398f, 0.005110f, -0.007231f, 0.014189f, 0.012845f, 0.024010f, -0.012111f, 0.017691f, -0.010840f, 0.009785f, -0.001655f, 0.007757f, 0.019120f, -0.002275f, 0.029595f, -0.011772f, 0.022387f, 0.001245f, -0.000838f, -0.008266f, 0.014375f, -0.011292f, 0.012997f, -0.007520f, 0.001011f, -0.006228f, 0.007168f, -0.005074f, 0.016884f, -0.005170f, -0.011639f, 0.026949f, -0.018481f, 0.014119f, + 0.011432f, 0.004197f, 0.013148f, -0.016421f, -0.011325f, 0.012399f, 0.011661f, -0.007194f, -0.001426f, 0.013216f, -0.001056f, -0.018285f, 0.008196f, -0.009266f, 0.009562f, 0.012831f, 0.006149f, 0.004427f, 0.004267f, -0.019692f, 0.009780f, 0.005613f, -0.005832f, 0.007273f, -0.009166f, 0.004553f, -0.004495f, -0.000853f, -0.002358f, 0.006936f, 0.013420f, -0.018373f, 0.016568f, -0.003210f, -0.006356f, 0.009489f, -0.012684f, 0.006116f, 0.009168f, -0.002191f, -0.004515f, 0.006344f, -0.002379f, 0.003739f, -0.001590f, -0.006525f, -0.000877f, 0.007078f, -0.001734f, 0.002753f, -0.001314f, -0.004783f, 0.003251f, 0.002869f, 0.005107f, -0.006951f, 0.005737f, -0.000461f, -0.002744f, 0.006626f, -0.007245f, 0.011557f, 0.006017f, -0.004314f, 0.011918f, -0.000895f, -0.004508f, 0.000475f, -0.004502f, 0.007045f, -0.007561f, 0.008078f, 0.003413f, 0.004347f, 0.002188f, -0.004645f, 0.004056f, 0.001815f, 0.001079f, 0.000731f, 0.000487f, -0.001897f, 0.002287f, -0.004866f, 0.006077f, 0.002354f, -0.005383f, 0.019464f, -0.066607f, -0.207300f, -0.030610f, 0.100458f, 0.051886f, 0.244380f, 0.045320f, 0.052433f, + 0.032932f, -0.066018f, -0.092939f, -0.066246f, -0.119098f, -0.102363f, -0.058146f, -0.023929f, 0.067907f, 0.185560f, 0.147130f, 0.126721f, 0.071948f, -0.057300f, -0.093166f, -0.068578f, -0.128334f, -0.121545f, -0.037406f, -0.017192f, -0.028518f, 0.046910f, 0.073412f, 0.048529f, 0.089567f, 0.069210f, 0.021032f, 0.063647f, 0.012808f, -0.009653f, 0.005680f, -0.038636f, -0.101411f, -0.086207f, -0.073317f, -0.102769f, -0.043178f, 0.029794f, 0.020393f, 0.065519f, 0.074173f, 0.064836f, 0.066517f, 0.067964f, 0.042977f, 0.042046f, 0.004412f, -0.038047f, -0.070942f, -0.048475f, -0.066796f, -0.088201f, -0.043562f, -0.040568f, -0.033093f, 0.012270f, 0.033178f, 0.031761f, 0.062013f, 0.077576f, 0.037418f, 0.054630f, 0.046594f, -0.013183f, 0.005230f, 0.020850f, -0.026028f, -0.023583f, -0.041637f, -0.074690f, -0.074986f, -0.059582f, -0.061693f, -0.012264f, 0.025703f, 0.017088f, 0.048827f, 0.073306f, 0.057778f, 0.053338f, 0.054845f, 0.036530f, 0.011940f, 0.003290f, -0.017182f, -0.032205f, -0.034579f, -0.051463f, -0.065037f, -0.069224f, -0.059592f, -0.053548f, -0.030624f, 0.006716f, 0.033590f, 0.076933f, + 0.101853f, 0.089334f, 0.074072f, 0.062795f, 0.036302f, 0.007450f, -0.031555f, -0.064948f, -0.088493f, -0.092756f, -0.102223f, -0.075459f, -0.031516f, -0.008107f, 0.021317f, 0.060646f, 0.078398f, 0.084539f, 0.087129f, 0.072774f, 0.030853f, -0.002384f, -0.022577f, -0.049700f, -0.064539f, -0.060687f, -0.053857f, -0.038905f, -0.015924f, 0.001854f, 0.021422f, 0.027689f, 0.021350f, 0.023352f, 0.018637f, 0.012638f, 0.009950f, 0.010186f, 0.003415f, 0.003355f, -0.000877f, -0.005242f, -0.006216f, -0.005552f, -0.007994f, -0.009540f, -0.010060f, -0.008812f, -0.007435f, -0.005041f, -0.001467f, 0.001725f, 0.001781f, 0.001125f, 0.000764f} + }, + { + {-0.006625f, 0.005005f, 0.003148f, -0.006536f, -0.001152f, 0.008345f, 0.002475f, 0.002060f, 0.004601f, -0.001089f, 0.001258f, -0.002171f, -0.008729f, -0.003430f, -0.000435f, -0.001926f, 0.002507f, -0.002702f, -0.000849f, -0.007393f, -0.000012f, 0.001275f, -0.005223f, -0.001136f, -0.006593f, -0.002345f, -0.002104f, -0.007977f, -0.003668f, 0.002539f, 0.003470f, 0.008940f, 0.005286f, 0.011421f, -0.001249f, -0.001863f, 0.001663f, -0.003941f, 0.009919f, 0.000584f, 0.004678f, 0.007872f, 0.001367f, -0.003190f, 0.003206f, -0.004209f, -0.005612f, -0.001409f, -0.002438f, -0.003102f, -0.010353f, -0.003349f, 0.000027f, 0.001607f, 0.003060f, 0.000856f, 0.005229f, -0.005872f, 0.004610f, -0.000047f, 0.001126f, 0.003270f, -0.004108f, -0.009145f, -0.003966f, 0.003880f, 0.005679f, 0.004321f, 0.000334f, 0.004406f, 0.003316f, 0.005995f, 0.002985f, 0.002584f, -0.003999f, 0.000301f, -0.000677f, -0.000805f, -0.003412f, -0.004182f, -0.001840f, -0.000973f, -0.000417f, -0.003225f, -0.000009f, 0.000455f, 0.001220f, 0.000294f, 0.002276f, -0.001256f, 0.001014f, -0.002019f, -0.003085f, 0.001506f, -0.000486f, -0.000078f, + 0.002073f, 0.001478f, 0.001810f, 0.000131f, 0.000132f, -0.001763f, 0.001002f, 0.000328f, 0.000574f, -0.000259f, 0.002819f, -0.000614f, 0.000104f, -0.001232f, -0.001056f, -0.001385f, 0.001164f, -0.000935f, -0.002677f, -0.004789f, 0.004554f, -0.007365f, -0.004526f, 0.011863f, -0.001921f, 0.010488f, -0.005364f, 0.001021f, 0.005188f, 0.002310f, 0.000348f, -0.007038f, -0.009985f, -0.010416f, 0.001123f, 0.000271f, -0.002948f, 0.001417f, -0.009221f, 0.018372f, 0.002078f, -0.010214f, 0.002720f, -0.005349f, -0.005828f, 0.005484f, 0.007790f, -0.000112f, 0.001754f, 0.003724f, -0.000563f, 0.000044f, 0.006116f, -0.003348f, -0.001494f, 0.000371f, 0.011137f, -0.000216f, -0.001302f, -0.004204f, -0.006579f, 0.003436f, -0.001623f, -0.006749f, -0.003051f, -0.008126f, 0.001091f, -0.007370f, 0.000167f, -0.005580f, -0.001845f, -0.004907f, -0.010222f, -0.004186f, -0.000642f, 0.009656f, 0.001420f, -0.002787f, 0.005262f, 0.008842f, 0.001334f, -0.012030f, 0.005544f, -0.000027f, 0.002250f, 0.003959f, -0.002798f, 0.007634f, -0.003805f, -0.006806f, -0.007101f, -0.012572f, 0.001176f, -0.004289f, -0.004464f, -0.005662f, + -0.005937f, -0.000339f, -0.006476f, 0.002056f, -0.001012f, -0.003674f, -0.001363f, -0.004151f, 0.000088f, -0.000179f, -0.004763f, -0.001977f, 0.001931f, -0.000690f, 0.000308f, 0.001072f, 0.000447f, 0.000819f, 0.000605f, -0.001292f, -0.004265f, -0.000766f, -0.001601f, 0.001204f, -0.000546f, 0.000505f, -0.000817f, 0.000037f, -0.000066f, -0.000923f, -0.002678f, -0.002198f, -0.000364f, -0.000969f, -0.001033f, -0.000862f, -0.002007f, -0.000741f, -0.009224f, 0.015442f, -0.003867f, -0.014003f, 0.001085f, 0.004803f, 0.000458f, 0.004428f, 0.003616f, -0.011081f, 0.003981f, -0.002564f, -0.000431f, 0.000475f, -0.002010f, 0.008500f, -0.002598f, -0.005479f, -0.000461f, 0.006799f, 0.004285f, 0.002542f, 0.004004f, 0.016447f, 0.004356f, -0.005606f, 0.007438f, -0.006849f, 0.002300f, -0.005521f, 0.015459f, 0.002435f, -0.005004f, -0.002998f, -0.005017f, -0.001719f, 0.010262f, -0.008149f, -0.006874f, -0.002074f, 0.008502f, 0.004890f, -0.007829f, 0.002244f, 0.001786f, -0.004568f, 0.000242f, -0.016790f, 0.005610f, -0.003851f, -0.003198f, -0.010638f, 0.016172f, 0.000924f, -0.008417f, -0.006606f, -0.008261f, 0.000650f, + -0.001778f, 0.000915f, -0.000045f, -0.009684f, 0.012802f, -0.007220f, -0.006627f, 0.005075f, 0.001372f, 0.005040f, -0.003590f, -0.000748f, -0.007875f, 0.000721f, 0.001722f, -0.010001f, -0.007466f, 0.000739f, -0.006970f, 0.002522f, -0.006234f, -0.001760f, -0.001758f, 0.004457f, -0.008052f, -0.008367f, -0.001711f, -0.001327f, -0.001998f, -0.000539f, -0.003608f, -0.000915f, -0.002626f, -0.002166f, -0.001702f, -0.002610f, -0.003156f, -0.000286f, -0.004238f, 0.001125f, -0.002812f, -0.000011f, 0.000270f, -0.001020f, -0.001596f, -0.000220f, -0.001124f, 0.002187f, -0.000333f, -0.001848f, -0.000109f, -0.003266f, -0.000640f, -0.002003f, 0.000161f, 0.000439f, -0.002240f, 0.013401f, 0.000416f, 0.002899f, -0.011085f, 0.003409f, 0.006369f, 0.004649f, -0.000464f, -0.005559f, 0.014412f, 0.002505f, -0.002871f, 0.006912f, 0.005648f, -0.006737f, 0.008831f, -0.005937f, 0.014563f, 0.002065f, 0.012998f, -0.001418f, 0.002294f, -0.005097f, -0.014715f, 0.001593f, 0.000302f, 0.000505f, -0.002543f, 0.003029f, 0.007771f, -0.001950f, -0.007557f, -0.005003f, -0.010749f, -0.002973f, -0.005293f, -0.005686f, 0.000991f, 0.003705f, + 0.005839f, -0.006912f, 0.004824f, -0.004626f, -0.005748f, -0.000776f, 0.004936f, 0.000925f, 0.001225f, -0.010749f, -0.010370f, -0.001966f, -0.003075f, -0.007859f, 0.017129f, 0.007951f, -0.001082f, 0.003303f, 0.006885f, -0.017279f, -0.008741f, 0.011591f, -0.006460f, 0.010872f, 0.002468f, -0.002263f, -0.011595f, -0.008557f, 0.013791f, 0.007308f, 0.013040f, -0.013693f, -0.000949f, -0.009496f, -0.000757f, 0.003379f, -0.005062f, 0.001615f, 0.001016f, -0.008524f, 0.007661f, 0.000860f, 0.001161f, -0.001388f, -0.015185f, 0.001652f, -0.003655f, -0.004777f, -0.004752f, -0.000917f, 0.002642f, -0.002444f, 0.001178f, -0.005339f, -0.001131f, -0.002444f, 0.003415f, -0.000655f, -0.000411f, -0.001730f, 0.000123f, -0.001808f, 0.001167f, -0.003012f, -0.001445f, 0.001001f, -0.000859f, -0.000184f, -0.000190f, -0.000019f, 0.001404f, 0.000880f, -0.000251f, -0.002111f, -0.002200f, -0.002289f, 0.001979f, 0.000908f, 0.002885f, 0.001521f, 0.001170f, -0.022686f, 0.001085f, -0.003019f, 0.005994f, -0.013777f, 0.004251f, -0.004727f, 0.022696f, -0.006175f, -0.011938f, -0.004451f, -0.010033f, 0.002967f, 0.008353f, -0.002827f, + 0.015830f, 0.001507f, -0.004822f, 0.003717f, 0.001828f, 0.004026f, -0.005766f, -0.001125f, 0.005821f, 0.009230f, 0.003591f, -0.001999f, 0.004379f, -0.008491f, -0.002721f, 0.011639f, 0.008304f, 0.013689f, 0.009697f, -0.000367f, -0.007145f, -0.014879f, 0.010065f, -0.001749f, -0.010863f, 0.005445f, -0.002951f, -0.016651f, 0.000322f, -0.013906f, -0.001202f, 0.012307f, -0.002223f, -0.009398f, -0.004373f, 0.011747f, -0.010412f, -0.017002f, 0.017008f, -0.003366f, -0.004268f, 0.003872f, 0.002066f, 0.001887f, 0.004010f, 0.003984f, 0.002173f, -0.012568f, -0.004826f, 0.009460f, -0.001401f, -0.003827f, 0.002801f, 0.016339f, -0.008460f, -0.009291f, -0.004277f, 0.006607f, 0.003330f, -0.014998f, -0.006702f, -0.005252f, -0.006577f, 0.004741f, -0.000977f, -0.001266f, -0.005618f, -0.004519f, -0.011849f, -0.006907f, 0.002742f, 0.000247f, 0.001778f, -0.000616f, 0.006875f, 0.007067f, 0.001172f, 0.002491f, -0.003708f, 0.000688f, 0.000260f, 0.002804f, -0.004544f, -0.002182f, 0.000473f, -0.000036f, 0.002001f, -0.000228f, -0.002613f, 0.002449f, 0.000886f, -0.005088f, -0.001044f, 0.001290f, 0.000813f, 0.000702f, + -0.001315f, 0.000515f, -0.002481f, -0.002519f, -0.002128f, 0.001111f, -0.001127f, -0.001359f, -0.000428f, -0.019841f, -0.000474f, 0.005242f, 0.018999f, 0.019638f, -0.006399f, 0.009755f, -0.012721f, 0.004117f, 0.008317f, 0.012598f, -0.003745f, 0.018921f, -0.003627f, 0.016042f, -0.008855f, 0.013434f, -0.006839f, -0.022470f, -0.005156f, 0.005553f, -0.007804f, 0.008610f, -0.004921f, -0.005433f, 0.002359f, -0.024624f, -0.008016f, -0.000554f, -0.004344f, -0.001525f, -0.011952f, -0.004150f, -0.004313f, 0.003862f, 0.024980f, 0.014395f, -0.014648f, 0.007921f, 0.019959f, 0.004923f, -0.007109f, 0.004949f, -0.005368f, -0.006012f, 0.014344f, 0.009992f, -0.010112f, -0.001393f, 0.010202f, 0.021450f, -0.007000f, 0.011650f, 0.031828f, 0.013689f, -0.014787f, 0.005903f, 0.003628f, -0.017817f, 0.002581f, -0.014729f, 0.006483f, -0.016046f, -0.003854f, 0.000630f, 0.007491f, -0.010482f, -0.002972f, -0.005211f, -0.009579f, 0.012248f, 0.010467f, -0.000605f, -0.007044f, 0.001875f, 0.001795f, 0.001715f, 0.002886f, 0.009099f, 0.001716f, -0.012149f, -0.000286f, 0.014720f, 0.000397f, 0.003294f, 0.002907f, 0.004454f, + -0.004659f, -0.002154f, -0.007449f, -0.003153f, -0.006859f, -0.000573f, 0.003995f, -0.000891f, -0.003906f, 0.002156f, -0.000832f, 0.000848f, -0.002138f, -0.001442f, 0.002696f, -0.000206f, 0.006517f, 0.001608f, -0.001442f, 0.003468f, -0.000121f, -0.001540f, -0.002513f, -0.003339f, 0.001425f, -0.001763f, -0.000934f, 0.001722f, -0.000201f, 0.003081f, 0.000150f, -0.004011f, 0.008729f, -0.004275f, -0.019986f, 0.004660f, -0.016048f, 0.002637f, -0.005292f, 0.020841f, -0.010522f, 0.002975f, 0.005510f, 0.002103f, 0.007588f, -0.003018f, 0.022806f, 0.001825f, -0.014728f, -0.002707f, -0.010851f, -0.001705f, -0.003507f, -0.010153f, -0.012764f, -0.003245f, -0.008208f, -0.003854f, 0.014602f, 0.005458f, -0.012282f, 0.004847f, -0.014675f, -0.002746f, 0.010734f, -0.020033f, -0.017690f, 0.010128f, 0.009505f, 0.004953f, -0.000575f, -0.012150f, 0.004857f, -0.005971f, -0.011491f, -0.005281f, 0.000646f, 0.003686f, 0.019085f, -0.007477f, -0.002138f, 0.001050f, 0.008908f, 0.004723f, -0.006588f, -0.008483f, -0.015271f, -0.004624f, -0.003374f, -0.008368f, -0.009793f, 0.006290f, 0.012750f, -0.000020f, -0.008132f, 0.014147f, + 0.002722f, -0.006920f, 0.001743f, -0.002021f, -0.001823f, -0.004815f, -0.002741f, 0.009201f, -0.007274f, -0.010873f, -0.006287f, 0.005759f, -0.008437f, 0.014954f, 0.006685f, -0.002418f, -0.006113f, -0.006892f, 0.004244f, 0.009309f, 0.018982f, -0.005436f, 0.009718f, 0.000373f, -0.000030f, 0.001090f, 0.003053f, -0.003444f, 0.000093f, 0.002398f, 0.004000f, -0.002451f, 0.002801f, -0.002096f, 0.009204f, 0.003568f, 0.006923f, 0.000141f, 0.004707f, -0.000191f, 0.004180f, -0.000768f, -0.000372f, 0.004926f, 0.001850f, 0.000655f, 0.002587f, 0.000637f, 0.004818f, -0.003499f, 0.001137f, 0.003354f, 0.004430f, 0.003879f, -0.001458f, -0.004816f, -0.000066f, 0.003144f, 0.000681f, 0.000632f, 0.003983f, 0.010361f, 0.019768f, -0.014744f, -0.000515f, 0.013461f, -0.006441f, -0.009663f, 0.012380f, -0.019533f, -0.001192f, 0.003609f, -0.002539f, -0.007288f, -0.008596f, -0.004138f, 0.003383f, -0.001052f, 0.009354f, 0.004708f, -0.003123f, -0.007446f, -0.005428f, 0.015387f, 0.000607f, -0.018820f, 0.008778f, -0.011907f, -0.011662f, 0.007146f, 0.013559f, 0.013812f, 0.010493f, -0.000339f, 0.007094f, 0.004817f, + 0.006698f, -0.006174f, -0.000304f, -0.005568f, -0.013540f, 0.005690f, -0.003490f, -0.000748f, -0.002980f, 0.001312f, -0.002231f, 0.014959f, 0.027851f, 0.004580f, -0.004819f, -0.000088f, -0.019879f, 0.019294f, -0.013551f, -0.008807f, -0.013040f, -0.015996f, 0.027075f, 0.001474f, -0.015032f, -0.005455f, 0.018686f, 0.009623f, -0.014144f, -0.010586f, 0.021418f, 0.001723f, 0.002223f, 0.027672f, -0.013207f, 0.007597f, -0.009915f, -0.027475f, 0.012923f, 0.013220f, 0.002224f, -0.015865f, -0.002210f, -0.003451f, 0.003300f, -0.006889f, 0.010075f, 0.006187f, -0.021702f, 0.009215f, 0.010428f, 0.013258f, 0.002316f, -0.011623f, 0.019447f, 0.003286f, -0.001700f, -0.001504f, -0.006485f, -0.006863f, -0.002432f, 0.001215f, 0.005894f, -0.000029f, 0.000510f, -0.000641f, -0.005190f, 0.002180f, 0.002387f, 0.001018f, -0.002361f, -0.001460f, 0.003961f, 0.001382f, 0.004507f, -0.002942f, 0.001093f, -0.006833f, 0.000812f, 0.006399f, -0.008572f, 0.001166f, -0.006706f, 0.007826f, -0.003229f, -0.000215f, -0.005210f, -0.000068f, 0.004593f, -0.000582f, 0.006248f, -0.000022f, 0.009333f, 0.011936f, 0.022155f, 0.020287f, + -0.000845f, 0.017293f, 0.007751f, 0.017636f, 0.017035f, -0.028407f, 0.010245f, -0.009210f, -0.012311f, -0.008983f, -0.002717f, -0.018123f, -0.003828f, 0.004401f, -0.015509f, -0.031785f, 0.007227f, -0.002258f, -0.028650f, -0.021023f, -0.018781f, -0.010494f, 0.000984f, -0.005395f, 0.006760f, -0.003796f, 0.011340f, 0.022171f, -0.012740f, 0.007530f, -0.005030f, -0.010183f, -0.007433f, 0.001338f, -0.002212f, -0.000934f, 0.016496f, -0.000699f, 0.016630f, 0.021578f, 0.006418f, 0.009282f, 0.014262f, -0.001887f, 0.002862f, -0.021336f, 0.019901f, -0.017404f, -0.006151f, -0.005556f, 0.001737f, -0.004822f, -0.016622f, -0.014637f, -0.032086f, 0.029033f, -0.032776f, -0.031758f, 0.005340f, 0.030448f, 0.010781f, -0.003950f, -0.007689f, 0.013996f, -0.015401f, 0.017510f, -0.005144f, 0.002216f, 0.001780f, -0.011644f, 0.012184f, -0.013754f, -0.011251f, -0.001333f, 0.004373f, -0.013140f, -0.002097f, 0.007033f, -0.001084f, -0.003618f, 0.009358f, -0.006234f, -0.011828f, -0.002739f, 0.005907f, -0.007840f, -0.004612f, -0.005377f, -0.001238f, 0.003524f, -0.002578f, 0.001036f, -0.002005f, -0.004317f, 0.001172f, -0.002790f, + 0.002681f, -0.002915f, 0.003904f, -0.001231f, 0.007328f, -0.001100f, 0.002803f, 0.003983f, -0.002613f, -0.005036f, -0.000580f, -0.001270f, -0.000348f, -0.001590f, 0.003375f, 0.000127f, 0.004381f, -0.004026f, 0.001510f, -0.008577f, 0.000323f, 0.000312f, -0.003188f, 0.002529f, 0.013295f, 0.017320f, 0.017313f, 0.018846f, 0.044421f, 0.019958f, 0.025391f, -0.012536f, 0.041118f, -0.023465f, 0.001137f, 0.009075f, -0.000179f, -0.015452f, 0.005142f, -0.004261f, -0.035039f, 0.013296f, -0.008819f, 0.003779f, -0.003274f, -0.011597f, 0.000032f, 0.010440f, -0.014143f, -0.007331f, -0.002196f, 0.008260f, -0.021368f, 0.013565f, 0.005126f, -0.019578f, -0.001519f, 0.008010f, -0.017744f, 0.006672f, -0.021282f, 0.009849f, -0.001813f, -0.006870f, -0.000813f, -0.013892f, 0.017906f, 0.021163f, -0.020142f, -0.011499f, 0.009159f, -0.007159f, 0.005642f, 0.005122f, 0.001372f, 0.000700f, 0.024413f, -0.006132f, -0.016290f, 0.015129f, -0.000605f, -0.012815f, -0.010765f, -0.020249f, 0.003926f, 0.005552f, 0.010153f, 0.009755f, -0.009351f, -0.015727f, 0.008831f, 0.004428f, 0.030511f, 0.003236f, -0.003764f, 0.000792f, + 0.002055f, -0.008978f, -0.004009f, -0.011261f, 0.012508f, 0.007241f, 0.008152f, -0.002372f, -0.019477f, -0.017751f, -0.005809f, -0.001560f, -0.006986f, -0.012296f, 0.003482f, -0.005374f, 0.008063f, 0.001434f, -0.001288f, 0.005023f, 0.005204f, 0.008279f, 0.007757f, 0.006256f, -0.000035f, -0.001844f, 0.002219f, 0.005569f, 0.004305f, -0.002464f, -0.002333f, -0.001550f, 0.001431f, -0.000004f, -0.001520f, 0.000110f, -0.009582f, 0.001191f, 0.006280f, 0.004817f, -0.007464f, -0.005367f, 0.010730f, 0.005750f, 0.010641f, 0.004213f, -0.007757f, 0.007394f, -0.001887f, -0.005863f, 0.001156f, -0.008373f, -0.004597f, -0.002125f, 0.003222f, -0.001671f, -0.023995f, -0.026966f, 0.044971f, 0.031356f, 0.040202f, 0.002558f, -0.025817f, 0.009084f, 0.020976f, 0.014931f, -0.006595f, -0.016339f, -0.004816f, -0.006013f, -0.007935f, -0.014069f, -0.005652f, -0.011819f, 0.029976f, 0.004782f, 0.004940f, 0.000216f, 0.001736f, 0.003173f, -0.011098f, 0.019836f, 0.011195f, -0.001196f, 0.007205f, -0.002840f, 0.020417f, 0.003753f, -0.001822f, -0.033438f, -0.002486f, 0.002087f, 0.003172f, -0.006273f, 0.004168f, -0.015846f, + 0.027119f, 0.021965f, 0.021199f, 0.018501f, -0.014571f, -0.020170f, 0.015454f, 0.004754f, 0.007550f, -0.001339f, -0.023479f, -0.016986f, 0.001343f, -0.013245f, 0.000144f, -0.011126f, -0.004848f, 0.014066f, 0.004468f, -0.010061f, 0.003586f, -0.025955f, 0.000783f, -0.043995f, -0.022363f, -0.041567f, 0.035871f, 0.032330f, 0.034508f, 0.041825f, 0.020249f, -0.006932f, -0.018568f, -0.005640f, -0.001038f, 0.005996f, 0.033131f, -0.010956f, -0.025192f, 0.019200f, -0.016037f, 0.008357f, -0.003681f, -0.003633f, 0.007762f, -0.007476f, -0.013631f, -0.003864f, -0.016781f, -0.003569f, -0.015090f, -0.003477f, 0.002103f, -0.001342f, -0.001829f, -0.004109f, -0.005273f, -0.010427f, -0.000169f, 0.005453f, 0.000842f, -0.005259f, 0.001822f, 0.009085f, -0.001238f, 0.006069f, 0.003323f, 0.003586f, 0.002544f, -0.012055f, 0.010531f, -0.004671f, -0.003835f, 0.007059f, 0.002427f, 0.007806f, 0.000786f, -0.010040f, -0.001876f, 0.000199f, 0.001731f, -0.006153f, -0.015958f, -0.021473f, 0.018929f, 0.024562f, -0.012068f, 0.022805f, 0.003214f, -0.009688f, 0.009170f, -0.033061f, -0.010260f, 0.009321f, -0.010536f, -0.020276f, + -0.038213f, 0.018770f, -0.016422f, 0.004417f, 0.024749f, 0.005938f, 0.028858f, 0.022076f, 0.012549f, 0.004736f, -0.017046f, -0.005005f, -0.008925f, 0.001559f, 0.016071f, 0.008376f, 0.003316f, 0.013720f, 0.039237f, -0.002051f, -0.033375f, -0.014657f, 0.005391f, 0.008010f, -0.001913f, 0.000826f, 0.003158f, -0.014238f, 0.000875f, -0.031414f, 0.007064f, -0.032863f, -0.011984f, -0.025448f, 0.012528f, -0.012696f, -0.020881f, 0.031860f, 0.008935f, 0.002596f, -0.014341f, -0.019116f, 0.004772f, 0.007574f, 0.002807f, 0.010381f, -0.016292f, 0.035818f, -0.043493f, 0.011313f, -0.018129f, -0.026401f, -0.014791f, 0.022796f, 0.006870f, -0.024750f, 0.017484f, -0.019710f, 0.048310f, -0.004504f, -0.005303f, -0.023501f, 0.002813f, -0.031351f, -0.016819f, 0.041823f, -0.016836f, -0.018995f, -0.012403f, 0.012505f, 0.001572f, 0.017727f, 0.008837f, 0.009267f, 0.012922f, 0.007022f, -0.001185f, 0.001334f, 0.006164f, 0.002640f, -0.003416f, 0.010384f, -0.003261f, -0.003619f, -0.007825f, -0.007029f, -0.003157f, 0.003832f, -0.006160f, 0.000454f, 0.003014f, -0.002543f, 0.002629f, 0.000486f, 0.010249f, 0.005370f, + -0.000012f, -0.002091f, 0.000019f, -0.000746f, 0.006125f, -0.005445f, 0.005557f, -0.001537f, 0.002461f, 0.008585f, -0.002717f, 0.000449f, -0.001183f, -0.004321f, 0.010517f, -0.001481f, 0.045440f, 0.046759f, 0.044104f, 0.009411f, -0.011828f, -0.007378f, -0.028415f, 0.023073f, 0.000678f, 0.013539f, -0.008503f, 0.004352f, -0.010391f, -0.007994f, -0.016431f, 0.008877f, -0.017109f, 0.028095f, -0.073325f, -0.021349f, 0.000525f, -0.022186f, 0.015759f, -0.022804f, 0.004690f, -0.008811f, 0.023060f, 0.004105f, 0.022198f, 0.001611f, -0.005241f, -0.000354f, 0.008125f, -0.025686f, -0.018457f, -0.019980f, -0.002830f, 0.025006f, -0.049321f, 0.017116f, 0.042889f, 0.005276f, -0.031559f, -0.001240f, -0.026581f, -0.025476f, 0.017641f, -0.003335f, -0.021716f, 0.012073f, 0.001802f, -0.008092f, -0.012272f, 0.007023f, 0.017827f, 0.010835f, -0.025224f, -0.018411f, 0.014421f, 0.021745f, -0.017761f, -0.023463f, 0.011560f, 0.024363f, -0.029632f, -0.001024f, -0.026456f, -0.036302f, 0.043178f, -0.007188f, 0.006665f, -0.008103f, 0.026759f, -0.006314f, 0.006546f, -0.014388f, 0.023275f, 0.012915f, 0.021414f, 0.024761f, + -0.024685f, -0.027244f, -0.011105f, -0.005222f, -0.016363f, -0.040991f, 0.004512f, 0.002229f, -0.000027f, -0.003021f, -0.006659f, -0.005516f, 0.011772f, -0.001037f, -0.005087f, 0.010874f, -0.011996f, -0.006382f, 0.004450f, 0.021354f, -0.006486f, -0.006595f, 0.001043f, -0.002701f, 0.007377f, -0.002586f, -0.001192f, -0.003761f, -0.006005f, -0.015001f, -0.021527f, 0.003807f, -0.001526f, -0.016400f, -0.008203f, 0.004315f, -0.005716f, -0.018580f, -0.010344f, -0.001249f, -0.003236f, 0.001482f, 0.005279f, 0.002216f, -0.000042f, 0.015230f, 0.005257f, 0.023972f, -0.008911f, -0.001189f, -0.035562f, -0.016820f, -0.008538f, -0.030226f, -0.043212f, -0.008450f, -0.014753f, 0.039805f, 0.011629f, 0.059413f, 0.010349f, -0.017663f, 0.007442f, 0.010899f, -0.049409f, 0.002341f, 0.042499f, 0.026833f, -0.028981f, 0.003451f, 0.021013f, -0.039770f, -0.006766f, -0.020137f, 0.016248f, -0.015857f, 0.010557f, 0.002213f, -0.008216f, 0.001679f, -0.000543f, -0.013098f, 0.012957f, -0.027167f, -0.010872f, -0.011929f, -0.033973f, -0.007505f, -0.004856f, 0.000069f, 0.001977f, -0.009611f, -0.010998f, 0.060693f, 0.017967f, -0.024231f, + -0.043726f, -0.016178f, 0.003960f, 0.043727f, -0.011150f, -0.006243f, -0.025148f, -0.007086f, -0.017827f, 0.035752f, -0.029916f, 0.031836f, 0.040555f, -0.041947f, 0.026916f, 0.009818f, -0.018035f, -0.016186f, 0.009581f, 0.018651f, -0.090871f, -0.012529f, -0.000626f, -0.012981f, 0.023357f, -0.012809f, -0.068048f, -0.026896f, -0.020173f, -0.031155f, -0.030257f, 0.004620f, 0.005339f, -0.017951f, -0.015860f, -0.028817f, 0.002408f, -0.011120f, 0.001906f, -0.012925f, -0.014794f, -0.016900f, 0.003232f, -0.004001f, 0.009334f, -0.014747f, 0.006336f, -0.002476f, -0.014845f, -0.030642f, -0.008004f, -0.002534f, 0.009147f, -0.005002f, -0.040273f, 0.007339f, 0.018739f, 0.006886f, -0.001420f, -0.014772f, 0.013622f, -0.002836f, -0.005110f, -0.024874f, -0.004629f, -0.009164f, 0.019355f, -0.003927f, 0.002668f, -0.000789f, 0.003757f, 0.011702f, -0.009731f, -0.000184f, 0.000134f, -0.005351f, 0.000545f, 0.004465f, -0.028984f, -0.025434f, -0.009866f, -0.020777f, -0.014344f, -0.006518f, -0.013090f, -0.016828f, -0.013098f, 0.009969f, 0.059834f, -0.002086f, -0.070317f, -0.039497f, -0.043602f, -0.008429f, -0.024215f, -0.001323f, + -0.035800f, 0.058036f, 0.034487f, -0.006580f, 0.045707f, 0.001017f, 0.049307f, 0.011523f, -0.028735f, -0.039300f, -0.024708f, -0.031787f, -0.014189f, 0.007304f, 0.021209f, -0.007349f, 0.006861f, -0.026356f, 0.004323f, -0.037858f, -0.003494f, -0.002571f, 0.012766f, -0.014504f, 0.059905f, 0.007294f, -0.001642f, 0.039344f, -0.015530f, -0.028711f, -0.016626f, 0.023911f, -0.001917f, -0.016534f, 0.006643f, -0.000737f, 0.051007f, 0.012071f, 0.000133f, -0.020349f, -0.030821f, -0.078381f, 0.005040f, -0.062396f, 0.031333f, 0.105474f, -0.075772f, -0.016812f, 0.017215f, -0.013673f, -0.013302f, -0.021867f, 0.017801f, -0.022445f, -0.073249f, -0.020145f, -0.073027f, -0.015966f, -0.002048f, -0.046519f, -0.006387f, -0.066658f, 0.028735f, -0.007325f, -0.041701f, 0.102096f, 0.008122f, 0.041197f, 0.035303f, 0.055985f, -0.034676f, -0.003083f, -0.020834f, -0.008356f, -0.014034f, 0.026172f, 0.017305f, 0.023423f, -0.049768f, -0.010849f, -0.026974f, -0.035944f, -0.029202f, -0.018873f, -0.003707f, 0.018708f, 0.016411f, 0.010353f, 0.014538f, -0.004843f, 0.004880f, 0.027093f, -0.004901f, 0.026786f, 0.008441f, -0.024910f, + -0.006286f, 0.007686f, -0.010090f, -0.005001f, 0.032848f, -0.000406f, -0.009551f, 0.035493f, -0.016522f, -0.003503f, -0.029624f, -0.008273f, -0.020548f, 0.014765f, -0.015607f, -0.008133f, -0.005681f, 0.005010f, -0.006684f, 0.013188f, 0.000782f, 0.013654f, 0.004562f, -0.006590f, -0.022185f, -0.123700f, -0.013205f, -0.031878f, -0.034851f, 0.044582f, 0.035307f, -0.043585f, -0.034505f, 0.084367f, -0.009928f, 0.027130f, 0.004047f, -0.004788f, -0.010091f, -0.009574f, -0.027832f, -0.000671f, 0.009469f, 0.014804f, 0.009934f, 0.029915f, -0.024102f, -0.000953f, -0.023493f, -0.014196f, 0.009089f, 0.042591f, 0.027329f, 0.037560f, 0.033749f, -0.008032f, 0.012031f, 0.020025f, -0.000233f, -0.035234f, -0.006621f, 0.047849f, -0.008911f, -0.069341f, -0.030643f, 0.007139f, -0.058680f, -0.025692f, -0.060124f, -0.041571f, -0.037671f, 0.054869f, 0.037575f, -0.012476f, 0.037614f, 0.014099f, 0.053167f, 0.035415f, 0.016934f, -0.094472f, -0.021227f, 0.003732f, -0.082842f, -0.060929f, -0.023443f, -0.016582f, -0.096980f, 0.020331f, 0.053270f, 0.071200f, 0.085714f, -0.029448f, -0.056241f, -0.001162f, -0.056736f, -0.042586f, + -0.078697f, -0.087831f, -0.061860f, -0.052510f, 0.057605f, 0.001944f, 0.011400f, -0.053413f, -0.055595f, -0.050259f, -0.005187f, 0.075193f, 0.095974f, 0.001908f, -0.035544f, -0.027808f, -0.039045f, -0.101709f, -0.045384f, -0.045715f, -0.012693f, -0.004629f, -0.023189f, 0.025654f, -0.000400f, -0.008709f, -0.036300f, -0.047801f, -0.024865f, -0.027357f, -0.041768f, -0.010123f, -0.010895f, -0.005004f, -0.011478f, -0.019949f, 0.024730f, 0.014487f, -0.002976f, -0.023875f, 0.016186f, 0.026344f, 0.001705f, -0.024490f, -0.012679f, 0.018115f, 0.004874f, -0.006274f, -0.022851f, 0.018084f, -0.004890f, -0.008416f, 0.001872f, 0.013790f, 0.003494f, -0.005375f, 0.002003f, 0.010449f, -0.037910f, -0.092075f, 0.036341f, 0.004769f, -0.062487f, 0.059005f, 0.029521f, 0.018401f, -0.013316f, -0.055865f, -0.013700f, 0.001994f, 0.055188f, 0.073069f, 0.004761f, 0.019995f, 0.005236f, 0.002598f, -0.002879f, 0.010155f, -0.029872f, 0.102728f, 0.025189f, -0.033135f, -0.032846f, -0.014594f, 0.005146f, 0.050343f, -0.023585f, -0.007324f, 0.000678f, 0.025598f, -0.023636f, 0.013600f, 0.002420f, -0.005412f, -0.083851f, -0.026273f, + 0.027884f, 0.044056f, 0.016353f, -0.009230f, -0.023594f, -0.055645f, -0.005271f, 0.009316f, -0.012422f, 0.001149f, -0.013698f, -0.035832f, 0.037159f, -0.008212f, 0.013892f, -0.038347f, -0.007124f, 0.098606f, 0.008373f, -0.010798f, 0.012498f, 0.012968f, 0.010304f, 0.049692f, -0.017136f, -0.022331f, 0.038048f, -0.004100f, 0.023019f, 0.013776f, 0.033339f, -0.012376f, -0.035474f, 0.018594f, -0.015741f, 0.002981f, 0.140347f, 0.134057f, 0.061409f, -0.011877f, -0.005645f, 0.017009f, 0.064325f, 0.029220f, -0.017481f, -0.002037f, -0.007013f, -0.035525f, -0.036473f, 0.020787f, 0.011767f, 0.005425f, 0.032886f, -0.004158f, -0.016182f, 0.018768f, 0.009351f, 0.027677f, -0.038740f, -0.032711f, -0.039359f, 0.006114f, -0.016842f, 0.002328f, -0.006652f, 0.014809f, 0.018056f, 0.034318f, 0.021484f, -0.036365f, -0.025213f, 0.013103f, -0.020736f, -0.012745f, 0.004482f, 0.011869f, -0.013344f, -0.035803f, -0.002261f, 0.001255f, -0.001318f, 0.015908f, 0.006049f, -0.028911f, 0.010772f, 0.046770f, 0.055652f, 0.040065f, 0.047817f, 0.032836f, 0.043362f, -0.011170f, -0.000521f, 0.035734f, 0.066211f, 0.007157f, + -0.074069f, -0.020964f, 0.013922f, 0.008725f, -0.019332f, 0.052369f, 0.024966f, 0.019147f, -0.020070f, 0.061618f, -0.005910f, -0.000427f, -0.019203f, 0.031930f, 0.020385f, -0.050716f, -0.073245f, -0.021892f, 0.009821f, 0.002129f, -0.015723f, -0.067360f, -0.008659f, 0.021365f, 0.003163f, -0.023990f, -0.011177f, -0.021650f, -0.027261f, 0.013374f, 0.016494f, -0.043937f, -0.049103f, -0.018348f, -0.060404f, 0.013801f, 0.049004f, -0.046885f, 0.047027f, -0.025173f, -0.029229f, -0.052407f, -0.072193f, -0.081007f, -0.076721f, -0.040566f, -0.002147f, 0.026132f, 0.010955f, 0.025991f, -0.041481f, -0.090175f, -0.036798f, -0.086779f, -0.150342f, -0.058741f, 0.117305f, 0.202267f, 0.117784f, -0.052466f, -0.042422f, -0.184128f, -0.165362f, 0.111186f, 0.017720f, 0.146770f, 0.152397f, 0.158231f, 0.051993f, -0.066479f, -0.081616f, -0.091193f, -0.103590f, -0.017215f, 0.099086f, 0.168601f, 0.052670f, 0.015282f, -0.009843f, -0.087828f, -0.127088f, -0.086901f, 0.014307f, 0.115528f, 0.053143f, 0.073879f, 0.060259f, 0.020175f, -0.046848f, -0.052495f, 0.000143f, -0.030345f, 0.007607f, 0.055008f, 0.059340f, 0.042327f, + 0.006992f, 0.020108f, -0.001057f, -0.041896f, 0.006276f, 0.012917f, -0.008161f, 0.003648f, -0.013159f, 0.080692f, 0.046607f, 0.049963f, 0.030031f, -0.032180f, -0.075842f, -0.107837f, 0.013679f, 0.033048f, 0.068481f, 0.067597f, 0.089290f, 0.040942f, -0.069779f, -0.088041f, -0.104891f, -0.021849f, -0.002338f, 0.051856f, 0.029812f, 0.013603f, 0.027801f, -0.055346f, -0.154021f, -0.105763f, -0.095902f, -0.025701f, 0.009590f, 0.030558f, -0.011884f, -0.025075f, -0.037511f, -0.006608f, 0.014233f, -0.046518f, 0.065133f, 0.031317f, 0.057831f, -0.127168f, 0.028802f, 0.017215f, -0.039154f, 0.028537f, -0.029308f, -0.014414f, -0.008787f, -0.018151f, 0.054716f, 0.100973f, -0.029392f, 0.020328f, -0.014137f, 0.024230f, 0.051244f, -0.015653f, -0.009458f, -0.027893f, 0.014650f, -0.017674f, -0.055789f, 0.040715f, 0.068529f, -0.008968f, -0.036080f, -0.032860f, -0.072464f, -0.019823f, 0.054666f, 0.037343f, 0.018930f, -0.079529f, -0.046412f, -0.034603f, 0.070270f, 0.061307f, 0.053419f, -0.155342f, -0.103724f, -0.012421f, 0.076639f, 0.164353f, 0.000405f, -0.197236f, -0.072780f, 0.006804f, 0.066312f, -0.005218f, + 0.036268f, 0.027861f, -0.086521f, -0.037522f, -0.024152f, -0.051456f, 0.003273f, -0.096829f, 0.014870f, 0.038744f, -0.117700f, -0.074822f, -0.036955f, -0.014696f, 0.129520f, -0.000427f, -0.199765f, 0.019526f, 0.027692f, 0.030828f, 0.078127f, 0.037039f, -0.085615f, 0.004713f, -0.003727f, 0.171032f, 0.119872f, -0.099557f, 0.090674f, -0.052835f, 0.035764f, 0.094714f, 0.033351f, -0.051165f, 0.046783f, -0.020124f, 0.011593f, 0.033247f, -0.004072f, -0.034403f, 0.063926f, -0.040866f, 0.046675f, -0.021497f, 0.024808f, -0.007075f, 0.051261f, -0.017460f, 0.040120f, -0.070372f, -0.012982f, -0.000058f, -0.010074f, 0.023683f, 0.043468f, -0.044372f, 0.090396f, -0.034822f, -0.032205f, -0.061275f, 0.044683f, 0.096799f, 0.018063f, -0.125323f, 0.009297f, -0.027403f, 0.060455f, 0.031244f, 0.026707f, -0.049690f, -0.004513f, -0.031206f, 0.029534f, -0.012013f, -0.021365f, -0.006232f, 0.040342f, -0.008757f, -0.026720f, -0.029971f, 0.022296f, 0.005001f, 0.021137f, -0.012570f, -0.000762f, -0.022594f, -0.003183f, -0.003547f, 0.009934f, 0.005187f, 0.023871f, 0.044015f, -0.105174f, 0.014919f, -0.077226f, 0.014063f, + 0.065553f, 0.057956f, 0.018976f, -0.037588f, 0.007520f, -0.022340f, -0.005532f, -0.027718f, -0.020481f, 0.014224f, 0.003827f, -0.040346f, -0.004651f, 0.020975f, -0.004489f, 0.002358f, 0.007594f, -0.025741f, -0.025492f, -0.000679f, 0.016856f, 0.002228f, -0.041024f, 0.003410f, 0.021028f, 0.006596f, 0.004882f, 0.042897f, -0.004737f, -0.011452f, 0.015373f, 0.016418f, -0.029031f, -0.032193f, 0.023854f, 0.004607f, -0.024722f, 0.016583f, 0.007177f, 0.008029f, -0.017298f, 0.006954f, 0.019439f, 0.002335f, -0.024339f, 0.032994f, -0.004019f, -0.037012f, 0.001106f, 0.028943f, 0.009017f, -0.024225f, 0.022023f, 0.007291f, -0.033768f, 0.013871f, 0.001728f, 0.034459f, -0.031250f, 0.002804f, 0.023738f, -0.054711f, 0.001737f, 0.023611f, -0.000918f, 0.016363f, -0.009105f, -0.035026f, 0.004641f, -0.037062f, 0.034776f, 0.017956f, 0.009798f, -0.013775f, -0.014530f, 0.028733f, -0.024776f, 0.025640f, 0.028159f, -0.040283f, -0.013083f, 0.001724f, 0.031181f, 0.000488f, -0.018089f, 0.011553f, -0.021907f, -0.001312f, 0.003165f, 0.018416f, 0.001253f, 0.003030f, -0.011324f, 0.019169f, -0.006422f, -0.022362f, + 0.020334f, -0.009029f, 0.008766f, -0.005063f, 0.014660f, 0.018531f, -0.021283f, 0.003728f, -0.011537f, 0.005020f, -0.011723f, 0.041205f, -0.011653f, -0.023105f, 0.018580f, -0.010402f, -0.003508f, -0.011749f, 0.012144f, 0.011229f, -0.016672f, 0.009338f, 0.016215f, -0.008383f, 0.001071f, -0.022979f, -0.052039f, 0.085341f, 0.012067f, 0.038610f, -0.033179f, 0.014774f, -0.007162f, 0.010351f, 0.009364f, -0.014200f, 0.005776f, 0.015686f, -0.008949f, 0.034078f, 0.001589f, 0.001183f, 0.011630f, 0.011202f, -0.001200f, -0.008583f, 0.014592f, -0.002163f, -0.009957f, -0.001966f, 0.014666f, -0.015650f, 0.003452f, 0.007231f, -0.019952f, 0.025151f, -0.004887f, -0.011950f, 0.038548f, -0.015711f, -0.022532f, 0.017785f, 0.009883f, -0.010492f, 0.016799f, 0.013473f, -0.004504f, -0.005282f, -0.002852f, 0.005144f, 0.009736f, 0.005749f, 0.000091f, -0.006504f, 0.019961f, -0.020953f, 0.019150f, 0.003106f, -0.002143f, 0.005437f, 0.006194f, 0.006301f, 0.001043f, -0.018633f, 0.005458f, 0.016323f, -0.011325f, 0.000087f, 0.000211f, 0.012468f, -0.001039f, -0.004648f, 0.018826f, -0.009320f, 0.010209f, -0.019152f, + -0.006926f, 0.018833f, -0.017563f, 0.018112f, -0.004440f, 0.011974f, 0.014666f, -0.016246f, -0.005338f, 0.020423f, -0.016705f, -0.000753f, 0.002364f, 0.006274f, 0.001753f, -0.002173f, 0.000992f, 0.001651f, 0.009608f, -0.007858f, 0.002310f, 0.006101f, -0.000351f, -0.004004f, 0.001293f, 0.003635f, -0.000556f, 0.001335f, -0.003281f, 0.004348f, 0.006095f, -0.010080f, -0.001367f, 0.017788f, -0.008292f, 0.005168f, -0.001042f, 0.010190f, 0.003115f, -0.005445f, 0.001393f, -0.000978f, -0.005616f, -0.003963f, 0.021097f, -0.003427f, -0.004513f, 0.003101f, 0.002590f, -0.001507f, 0.004696f, 0.008699f, 0.000543f, 0.002347f, 0.001068f, -0.001717f, 0.001557f, 0.002632f, -0.003697f, 0.002878f, 0.000016f, 0.019856f, -0.070468f, -0.225166f, -0.011522f, 0.121246f, 0.054382f, 0.258364f, 0.021980f, 0.054513f, 0.002212f, -0.075422f, -0.094988f, -0.064362f, -0.115743f, -0.081002f, -0.050961f, 0.001777f, 0.088273f, 0.173938f, 0.127998f, 0.111385f, 0.036245f, -0.060641f, -0.089026f, -0.080056f, -0.094333f, -0.104627f, -0.042434f, -0.020120f, -0.009188f, 0.050951f, 0.067672f, 0.050999f, 0.094627f, 0.061057f, + 0.022632f, 0.063451f, 0.001440f, -0.027681f, -0.018295f, -0.057115f, -0.116994f, -0.071178f, -0.068507f, -0.069900f, 0.003616f, 0.032437f, 0.022447f, 0.085863f, 0.070454f, 0.048489f, 0.069298f, 0.073628f, 0.020866f, 0.022008f, -0.007875f, -0.063588f, -0.088266f, -0.067535f, -0.088465f, -0.063000f, -0.021980f, -0.015668f, 0.005443f, 0.048055f, 0.037693f, 0.033918f, 0.067998f, 0.056100f, 0.041320f, 0.070117f, 0.019249f, -0.014528f, -0.002905f, -0.028305f, -0.061022f, -0.035610f, -0.077198f, -0.097706f, -0.057516f, -0.048693f, -0.021089f, 0.056515f, 0.076468f, 0.071165f, 0.082268f, 0.067547f, 0.038498f, 0.036955f, 0.018007f, -0.008106f, -0.020897f, -0.039402f, -0.057988f, -0.058230f, -0.065629f, -0.069089f, -0.058928f, -0.020258f, -0.006939f, 0.023030f, 0.059300f, 0.065820f, 0.065319f, 0.076112f, 0.060709f, 0.045264f, 0.037827f, 0.012224f, -0.029447f, -0.052713f, -0.085528f, -0.109450f, -0.102270f, -0.081287f, -0.040771f, 0.010145f, 0.054880f, 0.075077f, 0.086689f, 0.090106f, 0.077975f, 0.054871f, 0.028150f, -0.018179f, -0.044269f, -0.058833f, -0.067946f, -0.059747f, -0.044748f, -0.031156f, + -0.012741f, 0.014045f, 0.018985f, 0.025538f, 0.029719f, 0.026124f, 0.021056f, 0.016497f, 0.011347f, 0.009634f, 0.004452f, -0.003667f, -0.005652f, -0.006129f, -0.009131f, -0.010399f, -0.013026f, -0.015639f, -0.016897f, -0.013914f, -0.010305f, -0.005734f, 0.000142f, 0.008219f, 0.011113f, 0.008551f, 0.005297f, 0.003626f, 0.003020f}, + {-0.005147f, 0.001241f, 0.006039f, -0.000524f, 0.000548f, -0.008937f, -0.004491f, 0.001329f, 0.011865f, -0.007639f, 0.002484f, -0.012307f, 0.012649f, 0.000842f, 0.004641f, -0.001444f, 0.002012f, -0.002363f, -0.004330f, -0.010696f, 0.004543f, -0.010724f, -0.005005f, -0.006044f, 0.006106f, 0.004858f, 0.002347f, 0.005063f, 0.009538f, 0.000639f, -0.008630f, 0.005704f, 0.000945f, -0.000388f, 0.004678f, -0.001698f, -0.003118f, -0.012618f, 0.002070f, -0.003599f, 0.002785f, 0.005333f, -0.006837f, -0.002706f, 0.006266f, 0.001987f, 0.000764f, -0.006411f, 0.016254f, 0.009810f, 0.001614f, 0.007882f, 0.006480f, 0.006293f, -0.014809f, 0.000959f, -0.001413f, -0.003894f, 0.003667f, 0.002497f, -0.002351f, -0.002734f, -0.000767f, -0.004401f, 0.004409f, -0.001636f, 0.008665f, -0.000278f, -0.002174f, -0.004055f, -0.007521f, -0.001338f, 0.005850f, -0.000208f, 0.001365f, 0.006891f, 0.001904f, 0.007964f, -0.000123f, 0.001248f, -0.000781f, 0.008560f, 0.007593f, 0.007683f, 0.001698f, 0.000041f, 0.003433f, -0.000120f, 0.001087f, 0.000212f, 0.000423f, -0.000585f, -0.002326f, -0.001953f, -0.000400f, -0.002244f, + 0.001129f, 0.001215f, -0.000940f, 0.002549f, -0.000945f, -0.000672f, -0.000472f, 0.001079f, 0.000327f, 0.002287f, 0.000235f, 0.000087f, 0.000223f, 0.002951f, 0.001467f, -0.000164f, -0.000734f, 0.000191f, -0.000363f, 0.000765f, 0.003042f, 0.000705f, 0.003867f, 0.013453f, -0.006514f, 0.004496f, -0.003704f, -0.005824f, -0.002385f, -0.004032f, 0.007352f, -0.006063f, -0.011252f, -0.002872f, 0.002973f, -0.009381f, -0.005663f, 0.010601f, 0.018319f, -0.003084f, 0.007008f, -0.006277f, -0.006601f, -0.000291f, 0.001941f, -0.000804f, -0.000178f, 0.006797f, -0.011599f, 0.003790f, -0.000844f, -0.002432f, -0.009774f, 0.000853f, 0.000242f, 0.005515f, 0.001665f, -0.007659f, 0.010117f, -0.008040f, 0.009441f, -0.001060f, 0.001726f, 0.003832f, -0.001092f, -0.004718f, 0.007388f, 0.001809f, 0.009866f, 0.001497f, -0.008665f, 0.015744f, 0.012539f, -0.004369f, -0.001264f, -0.003038f, -0.010924f, -0.005924f, -0.001781f, -0.001891f, 0.004443f, -0.006032f, 0.000509f, 0.004309f, 0.000045f, -0.000175f, -0.000671f, -0.001045f, -0.005948f, 0.009511f, 0.000338f, -0.000219f, -0.002970f, -0.001074f, -0.008702f, -0.007783f, + 0.002608f, 0.006341f, -0.000761f, -0.001665f, 0.000035f, -0.000083f, -0.004432f, 0.008514f, 0.001214f, 0.002804f, -0.002170f, 0.002308f, 0.001513f, -0.000376f, -0.000101f, -0.000398f, 0.000174f, 0.001998f, -0.001064f, 0.001256f, 0.001430f, -0.000291f, -0.000281f, 0.001031f, 0.002348f, 0.002009f, -0.001390f, 0.000536f, 0.000773f, -0.001159f, -0.000562f, 0.003170f, -0.000375f, -0.000192f, -0.002434f, -0.002346f, -0.003779f, -0.001468f, -0.014112f, 0.017170f, -0.003857f, -0.002120f, 0.012240f, -0.004913f, 0.006266f, 0.027318f, -0.003385f, 0.000726f, -0.010583f, -0.008560f, -0.013160f, 0.007481f, -0.005494f, 0.003608f, 0.007099f, -0.008319f, -0.007127f, -0.005245f, 0.000489f, 0.002610f, -0.010257f, -0.004073f, 0.004337f, 0.003717f, -0.004130f, -0.001744f, 0.006103f, -0.006496f, 0.000897f, -0.003273f, -0.001260f, -0.004550f, 0.003702f, -0.004182f, 0.001586f, 0.003549f, -0.001780f, 0.011433f, 0.000383f, -0.001653f, -0.008620f, 0.000926f, 0.012219f, 0.001613f, 0.004057f, -0.011365f, -0.016202f, -0.005940f, -0.013953f, -0.012323f, -0.000424f, -0.005369f, -0.000583f, -0.014930f, 0.012591f, -0.013829f, + 0.001917f, 0.009327f, -0.008606f, -0.014445f, -0.010313f, -0.003104f, 0.009433f, 0.008373f, 0.012659f, -0.007599f, -0.006696f, -0.005370f, -0.004625f, 0.009144f, 0.002277f, -0.003904f, -0.002143f, 0.004308f, 0.004903f, 0.001434f, 0.002208f, 0.003118f, -0.000791f, -0.005393f, -0.000957f, -0.003598f, 0.001238f, 0.000378f, 0.001075f, 0.000978f, 0.000190f, 0.002151f, 0.000210f, 0.002522f, 0.000171f, -0.002035f, 0.002569f, -0.003147f, -0.002084f, 0.000546f, -0.000889f, 0.002587f, -0.001697f, -0.001288f, -0.000610f, 0.000282f, -0.001122f, -0.001914f, 0.001626f, -0.000651f, 0.001181f, -0.001626f, -0.001567f, -0.001912f, -0.002208f, -0.001411f, -0.002015f, 0.014940f, 0.001551f, -0.006009f, 0.000845f, -0.004974f, -0.001110f, 0.010456f, 0.017535f, -0.005997f, -0.006141f, -0.015914f, 0.002010f, 0.003996f, 0.009050f, -0.006001f, 0.009758f, 0.001548f, 0.015030f, -0.012064f, 0.001926f, -0.022782f, -0.002518f, 0.002725f, -0.005579f, -0.005122f, -0.002024f, 0.008401f, -0.006890f, -0.011973f, 0.003385f, -0.017568f, -0.003846f, -0.008436f, 0.003860f, -0.001865f, 0.005928f, 0.000789f, -0.013415f, -0.014463f, + 0.000378f, 0.007717f, 0.014307f, -0.002835f, -0.005850f, 0.012011f, -0.013254f, -0.007185f, 0.006364f, 0.005719f, 0.009459f, -0.009035f, 0.000313f, 0.003685f, -0.005734f, -0.001905f, 0.005574f, -0.008195f, 0.010676f, -0.004633f, -0.002018f, -0.011396f, -0.009522f, 0.004613f, -0.000054f, 0.000245f, -0.001645f, -0.006979f, 0.006598f, -0.004374f, 0.008211f, -0.000108f, -0.010939f, -0.011406f, 0.004152f, -0.005717f, 0.002009f, -0.016247f, -0.015589f, -0.002440f, 0.014604f, 0.000148f, -0.003056f, 0.000775f, 0.002073f, 0.001612f, -0.000710f, 0.002388f, -0.007673f, 0.001478f, 0.001247f, 0.002371f, 0.002899f, 0.003321f, 0.001678f, -0.004220f, 0.000269f, 0.003837f, 0.001698f, 0.001083f, -0.002177f, -0.002546f, 0.000562f, 0.000064f, -0.000924f, 0.003618f, -0.000119f, -0.000172f, -0.002508f, 0.004503f, 0.003598f, -0.000136f, 0.000269f, -0.002093f, 0.001223f, 0.001468f, 0.000562f, 0.000290f, 0.001403f, -0.001874f, 0.008999f, -0.024294f, 0.005697f, -0.010527f, 0.008998f, 0.010273f, -0.011458f, -0.021296f, 0.003050f, -0.002805f, 0.013573f, -0.008079f, 0.019633f, -0.008203f, 0.013009f, -0.015984f, + -0.005888f, 0.006738f, 0.009686f, 0.002741f, -0.000017f, -0.009791f, -0.001240f, -0.007695f, -0.009619f, 0.005403f, -0.008202f, 0.003269f, 0.001947f, 0.004019f, -0.004640f, 0.009153f, -0.001658f, 0.007883f, -0.001717f, -0.014978f, -0.002452f, -0.004765f, 0.001572f, 0.015033f, 0.001000f, -0.001252f, -0.000725f, -0.006040f, 0.005244f, -0.005692f, 0.007975f, 0.008605f, 0.003169f, 0.003333f, 0.015166f, -0.003703f, -0.002671f, -0.012049f, 0.008669f, 0.007632f, 0.001660f, 0.001994f, 0.001652f, 0.000671f, 0.004486f, 0.009244f, 0.006216f, 0.003550f, 0.003420f, -0.002305f, 0.012072f, 0.004135f, -0.002407f, -0.009185f, 0.004755f, -0.002699f, 0.017599f, 0.009992f, 0.002287f, -0.008041f, -0.002942f, 0.013400f, -0.005113f, 0.001795f, 0.007821f, -0.004262f, -0.005301f, -0.010559f, 0.001426f, 0.003926f, -0.000759f, 0.005151f, -0.004071f, -0.001507f, -0.003155f, 0.003793f, -0.000240f, -0.001126f, -0.005004f, 0.001276f, 0.001388f, 0.003111f, 0.003687f, -0.001160f, 0.000681f, 0.004039f, -0.000222f, 0.004098f, -0.000197f, 0.001283f, 0.006027f, 0.001295f, 0.006193f, -0.000397f, -0.001249f, -0.000315f, + -0.000448f, 0.000274f, 0.000519f, -0.004538f, 0.001796f, 0.003762f, 0.000472f, 0.001560f, -0.001024f, -0.031332f, -0.017006f, 0.006330f, -0.006095f, 0.012644f, 0.012616f, 0.019024f, 0.007889f, 0.007712f, 0.004715f, -0.022832f, -0.005087f, -0.003137f, 0.002078f, -0.002267f, 0.007141f, 0.005074f, -0.008759f, -0.006997f, 0.005898f, 0.011149f, 0.014068f, 0.012123f, 0.015976f, -0.008726f, -0.008698f, -0.011578f, 0.012325f, -0.007100f, 0.010188f, -0.002562f, -0.000502f, -0.010846f, -0.006478f, -0.006202f, 0.009257f, 0.011383f, 0.002035f, 0.011378f, 0.016305f, -0.006466f, 0.004143f, 0.019106f, -0.009582f, 0.006201f, 0.006506f, 0.000715f, 0.014392f, 0.018406f, 0.014025f, 0.031925f, 0.005958f, -0.004539f, -0.005886f, -0.005481f, -0.000320f, 0.005611f, 0.009708f, -0.001777f, -0.003102f, -0.003391f, -0.008531f, 0.003580f, 0.004650f, 0.008259f, -0.019907f, -0.002753f, 0.005067f, 0.013205f, 0.009247f, -0.017046f, -0.012587f, 0.003195f, 0.003210f, 0.013774f, -0.012125f, 0.000742f, -0.001202f, 0.001434f, -0.017263f, -0.004707f, -0.005929f, -0.004228f, -0.007079f, -0.003019f, 0.000571f, 0.006602f, + 0.000013f, 0.000337f, 0.002615f, 0.003136f, -0.006576f, -0.001085f, 0.000521f, -0.000016f, 0.002387f, -0.002325f, -0.004287f, -0.002976f, -0.003266f, 0.004650f, -0.004490f, -0.002230f, -0.005172f, 0.001249f, -0.001085f, 0.003283f, -0.004731f, 0.001938f, -0.001581f, 0.001900f, 0.001814f, 0.000271f, 0.004159f, -0.003988f, 0.002067f, 0.002197f, 0.000722f, 0.004732f, 0.007616f, 0.015199f, -0.001912f, 0.003145f, 0.013001f, 0.019067f, 0.010758f, -0.020937f, 0.000118f, -0.022279f, -0.015788f, -0.009540f, -0.001807f, -0.013612f, 0.016362f, 0.006087f, 0.009705f, -0.027725f, -0.001944f, 0.018224f, 0.009290f, -0.008097f, -0.011629f, -0.007077f, 0.007135f, -0.021196f, -0.001191f, -0.013601f, 0.020961f, -0.002698f, -0.006066f, 0.002287f, -0.000698f, -0.003527f, 0.003740f, -0.005467f, 0.009760f, 0.006967f, 0.014006f, -0.000974f, 0.000760f, 0.021607f, -0.006770f, 0.014484f, -0.002296f, -0.002471f, 0.038001f, 0.004586f, -0.004024f, -0.008507f, -0.029314f, 0.003161f, -0.030045f, -0.004997f, 0.031727f, -0.008874f, -0.006116f, -0.021949f, -0.006414f, 0.000853f, -0.011793f, 0.006435f, -0.001109f, -0.016066f, + 0.017187f, 0.006207f, 0.005623f, 0.004792f, -0.011900f, 0.013172f, -0.020425f, 0.005995f, 0.007899f, 0.000940f, -0.002672f, -0.008205f, -0.006470f, -0.008358f, -0.002669f, 0.006878f, 0.008784f, -0.002125f, -0.007118f, -0.004153f, 0.009787f, 0.004086f, 0.018699f, -0.000241f, 0.001445f, 0.007686f, -0.000738f, -0.003349f, -0.002549f, -0.002267f, -0.002023f, -0.002986f, 0.002229f, -0.003421f, -0.000099f, 0.003901f, 0.001433f, 0.003977f, 0.003783f, 0.003108f, 0.000372f, 0.005733f, 0.004110f, 0.002533f, 0.001766f, 0.001811f, -0.005851f, -0.004891f, 0.004307f, 0.000718f, -0.003595f, 0.000757f, -0.004093f, 0.001307f, 0.004752f, 0.001836f, -0.000761f, 0.001850f, 0.004081f, 0.001027f, -0.003242f, 0.001878f, 0.012545f, -0.024759f, 0.010927f, -0.008623f, -0.012432f, -0.011844f, 0.009650f, 0.012281f, 0.007235f, 0.021168f, 0.015665f, 0.003305f, 0.006496f, -0.016284f, 0.003516f, 0.007584f, 0.016460f, 0.003324f, -0.007633f, 0.006121f, 0.007785f, -0.014579f, 0.002334f, -0.014959f, 0.011987f, 0.010934f, 0.014032f, -0.013294f, 0.008411f, 0.015007f, -0.006526f, 0.003999f, 0.019873f, -0.000435f, + -0.012006f, -0.009536f, 0.004575f, -0.003090f, -0.012204f, -0.004929f, 0.000421f, 0.003057f, 0.006917f, -0.008372f, 0.013931f, 0.008521f, -0.002952f, 0.016753f, -0.001856f, 0.006456f, 0.021933f, -0.022941f, 0.042836f, -0.019462f, 0.006056f, 0.013024f, -0.004256f, -0.002214f, 0.005594f, 0.029048f, -0.001380f, -0.003834f, -0.000665f, -0.006694f, 0.014230f, 0.015906f, -0.004843f, 0.006898f, 0.005794f, 0.005296f, 0.009835f, 0.012560f, 0.001221f, 0.013569f, 0.003089f, -0.011352f, -0.017524f, 0.004398f, 0.001946f, 0.008291f, 0.003671f, 0.026897f, -0.002497f, 0.015094f, 0.012243f, -0.008124f, -0.015032f, -0.001625f, 0.001929f, 0.004114f, -0.003934f, 0.007040f, 0.003440f, -0.006403f, -0.001594f, -0.006107f, -0.002103f, 0.004063f, -0.001811f, 0.005922f, -0.001257f, 0.002225f, 0.001680f, -0.002519f, 0.003256f, 0.003654f, -0.005117f, 0.003728f, 0.002580f, 0.001272f, 0.001462f, -0.000029f, 0.001232f, 0.006554f, 0.002193f, -0.002112f, 0.001356f, 0.001915f, 0.003365f, 0.004096f, -0.001012f, -0.004269f, -0.001082f, -0.003711f, -0.002704f, 0.004885f, 0.014084f, 0.018575f, 0.011383f, -0.019906f, + 0.037909f, -0.012031f, 0.007108f, -0.027959f, 0.010983f, -0.024732f, 0.018995f, 0.001909f, -0.005413f, -0.014020f, 0.017945f, 0.002353f, 0.011405f, 0.011838f, 0.005984f, -0.020828f, 0.010496f, -0.012628f, -0.002432f, 0.009319f, 0.010062f, 0.002322f, -0.003998f, -0.020859f, 0.002763f, 0.019127f, 0.002002f, 0.012369f, 0.013736f, -0.021771f, 0.011823f, -0.011086f, -0.011061f, 0.016003f, 0.017610f, 0.009200f, 0.009838f, 0.002742f, 0.009420f, -0.022425f, -0.010160f, -0.007177f, 0.000473f, 0.023824f, 0.011271f, 0.009428f, -0.001942f, 0.010465f, -0.000718f, 0.026249f, 0.009507f, 0.009947f, 0.003824f, -0.001482f, -0.039058f, 0.014395f, 0.008986f, -0.003607f, -0.002960f, -0.029028f, 0.000055f, -0.011099f, 0.006717f, 0.025269f, -0.004470f, -0.014467f, 0.029239f, -0.001320f, 0.016406f, -0.009820f, -0.000144f, -0.018380f, -0.001954f, 0.000364f, -0.032106f, -0.009460f, -0.005761f, -0.014308f, -0.006917f, -0.002799f, 0.001726f, 0.015978f, 0.000891f, -0.000354f, -0.003378f, -0.008200f, -0.001628f, 0.001510f, -0.003339f, 0.001173f, 0.000072f, 0.004318f, -0.007798f, -0.002895f, -0.001336f, -0.006828f, + 0.000030f, -0.004405f, -0.003167f, -0.002192f, -0.005923f, -0.002797f, 0.006145f, -0.002110f, 0.000779f, -0.001708f, 0.006673f, -0.000240f, 0.002798f, -0.004508f, -0.010754f, -0.003052f, -0.000876f, 0.004559f, 0.001428f, 0.006459f, -0.000874f, -0.001919f, 0.004947f, -0.006570f, 0.007970f, -0.000140f, 0.024946f, -0.021376f, 0.003187f, 0.009113f, 0.011320f, -0.037146f, 0.024757f, 0.006963f, -0.026391f, -0.016855f, 0.014496f, 0.033217f, -0.011614f, -0.005965f, -0.022842f, 0.047529f, 0.018499f, 0.003016f, 0.007968f, -0.024865f, -0.016080f, -0.000988f, 0.002131f, 0.024681f, 0.005400f, 0.019041f, 0.021399f, -0.000873f, 0.001383f, 0.014921f, -0.003859f, -0.015797f, -0.015103f, -0.003801f, 0.021184f, -0.011358f, 0.026783f, -0.012342f, 0.039303f, 0.017508f, 0.031710f, -0.008520f, 0.005177f, 0.025456f, -0.019721f, 0.011893f, 0.011518f, 0.010825f, -0.011272f, 0.013577f, 0.003328f, 0.004362f, 0.011600f, 0.024203f, 0.020362f, -0.020567f, -0.004772f, 0.010658f, -0.020056f, -0.012731f, -0.005262f, -0.041107f, 0.011058f, -0.020302f, -0.012708f, 0.004004f, -0.005057f, 0.014118f, 0.026269f, 0.016842f, + 0.010644f, -0.014134f, -0.003308f, -0.000835f, -0.027802f, 0.005113f, 0.002401f, 0.034436f, 0.007440f, 0.007760f, -0.007427f, 0.026606f, -0.000210f, -0.000747f, 0.000107f, -0.008639f, -0.003931f, 0.001124f, -0.001565f, -0.009369f, 0.000884f, -0.002408f, 0.001712f, -0.011181f, -0.012116f, -0.003985f, 0.009682f, -0.001609f, 0.003774f, 0.003658f, 0.002994f, -0.000803f, -0.002564f, -0.003359f, -0.006722f, -0.011230f, 0.003852f, 0.000574f, -0.002751f, -0.013272f, 0.009760f, 0.006637f, 0.003770f, -0.001118f, 0.000815f, -0.004539f, 0.003313f, -0.002411f, -0.004380f, 0.001525f, 0.005636f, 0.003393f, -0.003526f, -0.000890f, -0.001449f, 0.004133f, -0.029670f, -0.043771f, 0.023642f, -0.017833f, 0.019376f, 0.006332f, 0.009361f, 0.011480f, -0.029429f, -0.053480f, 0.004694f, 0.007728f, 0.030086f, -0.029710f, -0.032619f, 0.028111f, -0.011279f, 0.012790f, -0.006199f, 0.006700f, 0.004399f, 0.007421f, -0.014898f, 0.007178f, -0.002206f, -0.004631f, 0.018503f, 0.006955f, -0.002746f, -0.024102f, -0.003372f, -0.000666f, -0.004527f, -0.001123f, -0.013143f, -0.031966f, -0.014313f, 0.023523f, -0.010100f, 0.011620f, + -0.018240f, 0.013481f, 0.006821f, -0.000196f, -0.009243f, -0.039640f, 0.021827f, 0.021349f, 0.027266f, -0.019095f, -0.008238f, 0.037279f, 0.032770f, 0.015262f, 0.006942f, 0.021102f, 0.007605f, 0.018972f, -0.010283f, 0.016492f, -0.031523f, -0.001916f, 0.008609f, -0.008088f, 0.037194f, 0.001542f, 0.020265f, -0.012088f, -0.020233f, 0.043256f, -0.000893f, 0.017232f, -0.005883f, 0.000713f, -0.050942f, -0.004168f, 0.010617f, -0.019481f, 0.023730f, 0.018253f, 0.004276f, -0.010269f, -0.038870f, -0.000702f, -0.008068f, 0.009765f, 0.011539f, 0.002094f, -0.004926f, 0.009234f, 0.000181f, 0.004610f, -0.002685f, -0.011551f, -0.004514f, -0.010530f, 0.018467f, 0.005897f, -0.000632f, -0.000229f, 0.002083f, 0.017451f, -0.003256f, -0.003970f, 0.002394f, -0.001180f, -0.000066f, 0.007935f, 0.003937f, 0.007158f, -0.005294f, -0.000460f, -0.008307f, 0.001755f, -0.000193f, 0.007505f, 0.006965f, -0.007877f, 0.012707f, 0.013485f, -0.010710f, 0.001034f, -0.021924f, -0.028725f, -0.008334f, -0.006722f, -0.049195f, -0.046147f, -0.012084f, 0.000233f, 0.034750f, 0.028270f, 0.027979f, -0.010808f, -0.004487f, -0.006992f, + 0.029873f, 0.012841f, -0.012521f, -0.002208f, -0.009967f, 0.021609f, 0.016775f, -0.012458f, -0.017451f, -0.016016f, -0.032723f, 0.013681f, 0.000923f, 0.000938f, 0.007155f, -0.004884f, 0.012424f, 0.046043f, -0.026192f, 0.013890f, 0.002758f, -0.017731f, -0.010149f, -0.021055f, 0.007999f, -0.009351f, -0.010572f, 0.023848f, 0.002940f, -0.007938f, 0.024080f, -0.003260f, -0.010613f, 0.008390f, 0.017573f, -0.009652f, 0.018885f, 0.033910f, 0.032705f, -0.022330f, -0.000296f, 0.008183f, 0.018437f, -0.028281f, -0.005881f, -0.007798f, 0.035275f, 0.015044f, -0.003786f, -0.021427f, -0.023782f, -0.021140f, 0.031862f, 0.026391f, -0.050431f, -0.042070f, -0.031902f, -0.022461f, 0.007631f, -0.020255f, 0.012333f, 0.003385f, 0.005026f, -0.040561f, -0.012988f, 0.036717f, 0.028323f, -0.012267f, -0.026022f, 0.025374f, 0.013307f, -0.003022f, 0.000446f, -0.003205f, -0.006150f, 0.014437f, -0.012897f, 0.003185f, 0.002241f, -0.000505f, -0.009310f, -0.017009f, 0.003321f, 0.013886f, -0.001329f, 0.001560f, -0.005924f, 0.013193f, 0.014430f, 0.001456f, -0.001876f, 0.004895f, -0.000482f, 0.005864f, 0.006313f, 0.009112f, + -0.012136f, -0.001125f, 0.004497f, 0.000048f, -0.007514f, 0.002079f, 0.015305f, 0.014259f, -0.005370f, 0.010942f, -0.016622f, 0.004236f, -0.005332f, -0.004563f, -0.006627f, -0.010349f, 0.040573f, 0.031957f, 0.019794f, 0.002990f, -0.026677f, -0.013906f, -0.004211f, 0.010831f, 0.016783f, -0.023617f, 0.006012f, 0.001363f, -0.020196f, -0.009605f, 0.016078f, -0.012041f, 0.012755f, 0.005437f, 0.015019f, -0.018859f, -0.000193f, -0.041990f, 0.006160f, -0.053083f, 0.021675f, 0.021436f, -0.020703f, 0.024216f, 0.028876f, 0.000746f, 0.008128f, -0.034267f, 0.020017f, 0.001900f, -0.014313f, 0.018406f, -0.004508f, 0.000152f, -0.000469f, 0.002155f, 0.035554f, -0.004147f, -0.000202f, 0.043679f, -0.000589f, -0.020348f, -0.058011f, -0.047705f, 0.052728f, 0.032800f, 0.012876f, 0.013179f, -0.022280f, -0.044723f, -0.022061f, 0.006925f, -0.017284f, 0.034728f, -0.002027f, 0.004493f, 0.037458f, -0.007864f, -0.011847f, -0.008603f, -0.023860f, -0.040394f, -0.032123f, 0.090823f, -0.044347f, -0.020155f, 0.025934f, -0.046226f, -0.033350f, 0.032845f, 0.046107f, 0.015089f, -0.008589f, 0.054294f, 0.026132f, -0.043962f, + -0.015369f, -0.024622f, -0.024034f, 0.049344f, 0.003407f, -0.033139f, -0.022962f, -0.025831f, 0.007047f, -0.005459f, 0.014916f, -0.000534f, -0.007795f, -0.012205f, 0.000928f, 0.013535f, -0.007562f, 0.006164f, -0.007374f, 0.006656f, 0.006019f, 0.018911f, -0.007628f, -0.002956f, 0.016176f, 0.001130f, 0.008170f, 0.008350f, 0.011484f, 0.002013f, -0.007039f, -0.004021f, -0.001960f, -0.002925f, 0.006954f, -0.002407f, -0.007870f, 0.015195f, 0.015684f, -0.008965f, 0.003837f, -0.010183f, 0.003397f, 0.003538f, 0.009586f, -0.002689f, -0.001203f, -0.005137f, 0.004826f, 0.011183f, -0.037266f, -0.027481f, -0.019150f, -0.034096f, -0.002992f, 0.032475f, -0.002259f, 0.006750f, 0.016031f, 0.010670f, -0.027429f, -0.013233f, -0.022652f, -0.012087f, 0.029254f, -0.008822f, -0.003093f, -0.003911f, 0.017773f, 0.017724f, 0.052726f, 0.008475f, 0.038836f, -0.002176f, 0.013165f, -0.021017f, -0.015806f, 0.013974f, -0.026767f, -0.029770f, 0.001068f, 0.009495f, -0.015236f, 0.012347f, -0.017853f, 0.005563f, -0.047119f, 0.026440f, 0.014835f, 0.021641f, 0.002773f, -0.019108f, -0.039465f, -0.014021f, -0.003440f, 0.032695f, + -0.024753f, -0.014617f, 0.009196f, 0.074660f, -0.020527f, 0.075897f, -0.046422f, 0.018449f, -0.017064f, 0.033352f, -0.013110f, 0.057603f, -0.054018f, 0.082458f, -0.007708f, 0.017024f, 0.035735f, -0.061008f, 0.054550f, -0.065171f, 0.044120f, -0.106244f, 0.057721f, -0.054579f, 0.048514f, -0.071229f, 0.062766f, 0.002188f, 0.040712f, 0.017663f, -0.033173f, 0.028995f, -0.023733f, 0.072117f, -0.032742f, 0.011931f, -0.042914f, 0.011711f, -0.002807f, 0.007964f, -0.015304f, 0.020064f, -0.019674f, 0.014232f, -0.006928f, 0.004628f, 0.006131f, 0.006426f, 0.008411f, -0.004845f, -0.011296f, -0.009161f, -0.010823f, -0.024947f, 0.014502f, 0.003753f, -0.017126f, -0.007945f, -0.005140f, 0.011179f, -0.019075f, 0.018232f, -0.014601f, 0.003668f, -0.007810f, 0.008887f, 0.002998f, -0.000136f, 0.027658f, -0.024438f, 0.014981f, -0.023613f, 0.035651f, -0.006749f, 0.034827f, -0.013685f, 0.010892f, 0.015749f, 0.005282f, 0.005444f, -0.000019f, 0.016683f, -0.024862f, 0.027279f, -0.018965f, 0.017955f, -0.032725f, -0.029647f, 0.034531f, 0.059559f, -0.049319f, 0.075499f, -0.004371f, 0.000005f, -0.002891f, 0.013125f, + -0.022452f, -0.016485f, -0.033643f, -0.007504f, 0.001085f, 0.000098f, -0.000172f, 0.029697f, 0.005082f, 0.032557f, 0.031842f, -0.020225f, 0.011716f, 0.067878f, 0.022163f, 0.014566f, 0.010171f, -0.058814f, 0.002990f, -0.009502f, -0.007387f, -0.053932f, -0.011430f, 0.031060f, 0.008745f, 0.010359f, 0.015581f, 0.039345f, 0.010232f, -0.012077f, -0.004052f, -0.003336f, 0.014713f, -0.026692f, -0.016489f, 0.040633f, 0.025150f, 0.018952f, 0.031331f, 0.023229f, -0.013691f, -0.006787f, -0.046834f, -0.020494f, 0.018995f, 0.015081f, 0.035291f, -0.025400f, -0.012729f, -0.008865f, 0.025927f, 0.015274f, 0.023268f, 0.009699f, -0.018516f, -0.017064f, 0.058370f, -0.017793f, -0.056827f, 0.013205f, 0.041008f, 0.028227f, -0.000810f, -0.004826f, 0.005007f, 0.009496f, 0.005738f, 0.052277f, -0.062925f, -0.053581f, 0.006167f, 0.021295f, -0.027130f, -0.013861f, 0.004494f, -0.021188f, 0.010002f, -0.010298f, -0.002771f, 0.005724f, -0.004174f, -0.014189f, 0.000434f, 0.012009f, -0.007751f, 0.000249f, -0.020916f, -0.003504f, -0.018421f, 0.013605f, -0.005940f, 0.012494f, -0.007581f, 0.007869f, 0.003077f, 0.010580f, + 0.016158f, -0.016358f, -0.007558f, -0.004761f, 0.012698f, -0.007837f, -0.015090f, -0.027183f, -0.000260f, -0.010743f, -0.004261f, 0.004361f, 0.002557f, 0.000988f, 0.005185f, 0.009183f, -0.001958f, 0.027837f, 0.003207f, -0.001975f, -0.021579f, 0.003949f, -0.004153f, -0.000943f, -0.023121f, -0.119406f, 0.033019f, -0.014534f, -0.007567f, 0.029314f, -0.020230f, 0.031455f, -0.004220f, -0.051735f, -0.009425f, 0.005049f, 0.018180f, 0.023130f, 0.005390f, -0.036657f, 0.036308f, -0.014221f, -0.003293f, -0.022521f, -0.010128f, 0.019482f, -0.003883f, 0.017381f, 0.029276f, -0.006757f, -0.037790f, 0.008406f, 0.041485f, -0.038601f, 0.014214f, 0.032220f, -0.005852f, -0.025525f, -0.047662f, -0.032141f, 0.033629f, 0.086198f, -0.026532f, -0.034356f, 0.097097f, -0.006322f, -0.013978f, 0.069902f, 0.040688f, 0.034745f, 0.028060f, 0.011540f, -0.020544f, 0.035526f, 0.033067f, 0.022809f, 0.010548f, -0.064228f, 0.040132f, 0.035548f, -0.067838f, -0.039204f, -0.024376f, -0.018971f, -0.018692f, 0.074056f, 0.036956f, -0.042296f, 0.039562f, -0.015638f, -0.039584f, 0.017269f, 0.020131f, -0.017456f, -0.016782f, -0.062063f, + 0.006975f, 0.010637f, 0.045411f, 0.021790f, 0.005614f, 0.038008f, -0.030188f, 0.078592f, -0.083523f, -0.097388f, 0.068762f, -0.042014f, -0.002622f, 0.048270f, -0.030413f, -0.020891f, -0.006033f, -0.005714f, 0.005979f, 0.029626f, 0.014512f, -0.024206f, -0.001509f, 0.011553f, -0.002923f, 0.016471f, -0.000679f, 0.009117f, 0.001747f, -0.012839f, 0.006872f, 0.026286f, 0.018054f, -0.001125f, 0.003479f, 0.017582f, -0.002863f, -0.002072f, 0.004413f, 0.040690f, 0.020832f, -0.006519f, 0.008847f, -0.036060f, -0.001628f, 0.009529f, -0.016664f, -0.022357f, 0.021048f, -0.009664f, -0.000680f, 0.021698f, -0.018892f, 0.008346f, -0.003280f, -0.005394f, 0.026860f, -0.015231f, -0.031929f, -0.130108f, 0.039801f, 0.073137f, -0.045607f, -0.009632f, -0.035504f, 0.075251f, 0.050549f, 0.031672f, -0.006187f, -0.026552f, 0.005246f, 0.030223f, 0.013981f, -0.013301f, -0.003060f, 0.041407f, -0.002913f, -0.015506f, -0.055903f, -0.026606f, 0.046832f, 0.027142f, -0.029833f, 0.023564f, -0.021654f, -0.006998f, 0.013920f, 0.013040f, -0.013120f, 0.008350f, -0.049039f, 0.013788f, 0.065855f, -0.008593f, -0.013061f, -0.065106f, + -0.039205f, 0.031279f, -0.051391f, -0.028022f, 0.011514f, 0.012812f, -0.016036f, 0.042325f, 0.039942f, -0.041555f, 0.015230f, 0.022829f, 0.066343f, 0.060752f, -0.009853f, 0.019730f, -0.001841f, 0.069487f, 0.030077f, 0.028052f, 0.065826f, -0.029709f, -0.043375f, -0.022323f, -0.055467f, 0.046365f, 0.021744f, 0.022538f, 0.011864f, 0.078831f, -0.052576f, -0.012444f, 0.033521f, -0.018893f, 0.037224f, -0.002036f, 0.004140f, 0.017211f, -0.045951f, -0.069531f, 0.008481f, 0.013119f, 0.075973f, 0.057773f, 0.001144f, -0.056466f, -0.009153f, -0.061654f, -0.000621f, -0.002172f, -0.017521f, -0.015968f, 0.008065f, -0.005540f, -0.004904f, -0.015810f, -0.010412f, -0.014070f, -0.008541f, 0.001894f, -0.016747f, -0.015259f, -0.002801f, 0.015099f, 0.007527f, -0.020205f, 0.017843f, -0.010355f, 0.033375f, -0.010784f, -0.030270f, -0.011223f, 0.014591f, -0.009532f, -0.023050f, 0.025722f, -0.005925f, -0.023929f, -0.037007f, 0.005430f, -0.006242f, 0.004077f, 0.007751f, -0.014327f, -0.012407f, -0.032336f, -0.007495f, -0.008718f, 0.001883f, 0.005709f, 0.011442f, 0.010022f, -0.024842f, 0.030442f, 0.051564f, 0.045045f, + 0.046394f, 0.059658f, -0.033970f, 0.047043f, -0.091227f, -0.039720f, 0.034836f, 0.008468f, 0.067011f, 0.030740f, 0.057177f, -0.024539f, 0.007751f, -0.049200f, 0.033768f, 0.055654f, 0.050601f, 0.005331f, 0.035920f, -0.087577f, -0.056999f, 0.054777f, 0.016072f, -0.054487f, -0.028091f, 0.006955f, 0.080742f, 0.025135f, -0.032600f, -0.041109f, 0.008381f, -0.011815f, 0.049723f, 0.053756f, -0.005116f, -0.008435f, 0.010792f, -0.014919f, 0.064248f, 0.018677f, -0.015042f, 0.013168f, -0.030346f, -0.017847f, -0.143442f, -0.048558f, 0.025746f, -0.022212f, -0.021346f, -0.000453f, -0.025763f, -0.025692f, 0.065955f, 0.044285f, -0.033011f, 0.060268f, 0.124550f, 0.025826f, 0.088753f, 0.012494f, 0.018143f, 0.065254f, 0.043075f, -0.034776f, -0.039589f, -0.069665f, -0.043326f, -0.004354f, -0.068841f, 0.025803f, -0.008181f, -0.066536f, -0.047770f, -0.047539f, -0.059920f, -0.036197f, -0.024013f, -0.031691f, 0.009558f, 0.057217f, 0.069673f, 0.036921f, -0.007130f, -0.050484f, -0.006370f, 0.002242f, 0.004421f, -0.024452f, -0.004326f, -0.016424f, 0.013682f, 0.019870f, 0.002258f, 0.014630f, -0.000378f, -0.009574f, + 0.016710f, -0.017664f, 0.002341f, 0.016113f, 0.034142f, 0.004984f, -0.000254f, 0.023287f, 0.009786f, 0.061949f, -0.015395f, -0.049838f, -0.002540f, 0.034173f, 0.006078f, -0.013322f, -0.015252f, -0.040445f, -0.038535f, -0.021507f, -0.015327f, -0.006754f, -0.023133f, -0.033091f, -0.035554f, -0.019134f, -0.002866f, 0.005275f, 0.047119f, 0.034474f, -0.012640f, 0.055218f, 0.097466f, 0.067844f, 0.047458f, 0.030070f, 0.018621f, -0.023546f, -0.015548f, -0.023476f, -0.021704f, -0.000847f, 0.057124f, -0.005855f, 0.048577f, -0.030865f, 0.013199f, -0.106631f, 0.030484f, -0.015906f, 0.055338f, -0.013332f, -0.063634f, 0.064683f, -0.023824f, 0.010199f, 0.036976f, 0.027737f, 0.059257f, -0.008637f, 0.009336f, -0.010855f, 0.067512f, -0.013911f, 0.013125f, 0.047114f, -0.053502f, 0.046463f, -0.013096f, 0.028564f, 0.045120f, -0.011677f, 0.010450f, 0.007850f, 0.005038f, -0.014057f, 0.020357f, 0.019707f, -0.007434f, -0.025905f, -0.004392f, -0.030258f, -0.009561f, -0.005448f, 0.025540f, -0.012482f, -0.048289f, -0.031707f, 0.051834f, 0.052352f, -0.048621f, -0.040697f, 0.061979f, 0.072763f, -0.027487f, -0.006729f, + 0.052575f, 0.002555f, 0.027276f, 0.038379f, -0.087099f, -0.025430f, -0.005478f, 0.085313f, 0.008252f, -0.005564f, -0.082978f, 0.017040f, 0.033249f, 0.021964f, 0.003435f, 0.022938f, 0.009097f, 0.012074f, 0.106852f, -0.002778f, 0.006043f, 0.063134f, -0.037074f, 0.042119f, 0.008239f, 0.031908f, 0.020931f, -0.047762f, -0.015477f, 0.057921f, 0.038453f, 0.022511f, -0.013182f, 0.020591f, 0.010458f, 0.000507f, 0.008061f, 0.015157f, -0.006552f, 0.025564f, -0.016036f, -0.003875f, 0.026252f, 0.015822f, 0.005656f, -0.053586f, 0.005285f, 0.027319f, -0.019920f, 0.010109f, -0.047679f, -0.029901f, 0.034182f, 0.017014f, 0.028176f, 0.024832f, -0.018758f, -0.052060f, -0.014290f, 0.018689f, 0.046286f, 0.028550f, -0.006437f, -0.009456f, -0.015726f, 0.038450f, -0.000332f, -0.006878f, -0.015043f, 0.020739f, 0.008796f, -0.007481f, -0.037951f, -0.023465f, 0.024581f, 0.024977f, 0.017565f, -0.025548f, -0.036684f, 0.019389f, 0.049093f, 0.023615f, 0.003585f, -0.023588f, -0.005694f, 0.012311f, -0.000434f, 0.001901f, 0.002856f, -0.005002f, -0.011256f, 0.061482f, -0.104279f, -0.007253f, -0.088235f, -0.081790f, + 0.020487f, 0.017175f, 0.014917f, 0.001991f, 0.077707f, 0.044245f, 0.100062f, 0.109494f, -0.012094f, -0.053951f, 0.011408f, -0.014705f, -0.010045f, 0.023662f, 0.010580f, -0.008866f, -0.050459f, -0.055246f, 0.059755f, 0.027531f, -0.006813f, 0.009060f, 0.009712f, 0.005385f, 0.011008f, -0.005762f, -0.014308f, -0.081668f, 0.001797f, 0.046664f, -0.013710f, -0.063000f, -0.020601f, 0.051438f, -0.095714f, -0.033103f, 0.060569f, 0.036449f, 0.072333f, -0.002291f, 0.005322f, -0.066876f, -0.067256f, -0.085021f, 0.071464f, 0.100871f, -0.133084f, -0.066600f, -0.006885f, 0.067371f, -0.052735f, -0.008875f, 0.122216f, 0.049399f, 0.031086f, 0.080545f, 0.059175f, 0.088440f, -0.031924f, 0.087922f, -0.013308f, -0.069517f, -0.101639f, -0.024188f, 0.039129f, -0.080960f, -0.015638f, 0.017013f, -0.016861f, -0.028745f, 0.017365f, 0.015209f, -0.055282f, 0.040953f, 0.020397f, 0.059671f, -0.014269f, -0.059231f, 0.073570f, 0.014432f, -0.066689f, -0.000036f, -0.015352f, 0.027458f, -0.029397f, -0.030818f, -0.015368f, -0.003551f, -0.000735f, -0.023486f, -0.027658f, 0.021211f, -0.028859f, -0.000708f, -0.028510f, 0.015350f, + 0.027599f, 0.003833f, 0.041139f, 0.027570f, -0.040878f, -0.015819f, 0.000308f, -0.037530f, 0.006501f, -0.006770f, 0.015023f, -0.010269f, 0.013289f, 0.035258f, 0.000427f, 0.006387f, -0.024754f, 0.037951f, 0.024825f, -0.027755f, -0.007643f, 0.026904f, 0.026166f, -0.004353f, -0.039218f, -0.005694f, -0.077324f, 0.059457f, -0.005108f, 0.018136f, 0.022976f, 0.022242f, 0.000670f, -0.026107f, 0.042154f, 0.010516f, 0.040687f, -0.008838f, -0.086497f, -0.007923f, 0.024896f, -0.028492f, -0.031705f, -0.019447f, -0.029228f, 0.035140f, -0.009109f, -0.030800f, -0.001807f, 0.032686f, -0.044092f, 0.030771f, -0.015337f, 0.016340f, -0.043435f, -0.010877f, 0.017524f, -0.003788f, -0.004056f, 0.005293f, 0.024294f, -0.004373f, -0.003992f, -0.030370f, 0.015061f, -0.008377f, 0.004832f, 0.009324f, 0.003149f, 0.022419f, -0.032931f, -0.025177f, 0.034419f, 0.029660f, -0.041339f, 0.019651f, -0.033413f, 0.038456f, -0.032283f, 0.014477f, 0.009913f, -0.027358f, 0.060495f, 0.005837f, -0.067365f, 0.030990f, 0.008127f, -0.052128f, 0.029198f, -0.019166f, 0.031100f, -0.045199f, 0.023151f, -0.047875f, 0.021938f, 0.033992f, + -0.030831f, 0.017632f, -0.032757f, 0.001105f, 0.001094f, 0.003091f, -0.021528f, 0.000384f, 0.016381f, -0.000952f, -0.029569f, 0.022272f, -0.018529f, -0.039821f, 0.017137f, -0.017697f, 0.008663f, 0.018497f, -0.014082f, -0.008539f, 0.003331f, -0.002642f, 0.012028f, -0.006342f, -0.004392f, 0.010704f, 0.013645f, 0.004556f, -0.013721f, -0.008220f, 0.013178f, 0.007860f, -0.031051f, 0.028322f, -0.004067f, -0.010637f, 0.003956f, -0.002252f, 0.006706f, 0.015179f, -0.003754f, 0.028774f, -0.008501f, -0.012555f, -0.014037f, -0.005666f, 0.002773f, -0.013649f, 0.003632f, -0.004655f, -0.005547f, 0.003448f, 0.004660f, -0.005693f, -0.000129f, -0.001629f, -0.006021f, 0.005862f, 0.003961f, -0.006682f, 0.018012f, 0.038617f, -0.017628f, -0.206704f, -0.373995f, -0.123498f, -0.289581f, -0.286461f, 0.156174f, 0.033446f, 0.216722f, 0.488154f, 0.439969f, 0.360973f, 0.440603f, 0.270119f, 0.061316f, 0.085799f, -0.061285f, -0.324961f, -0.321177f, -0.240027f, -0.312042f, -0.213567f, -0.043257f, -0.143750f, -0.198812f, -0.085590f, -0.023782f, -0.102735f, -0.048243f, -0.000803f, -0.050768f, -0.091304f, 0.020676f, 0.081163f, + -0.025857f, 0.112159f, 0.166901f, 0.005302f, 0.033202f, 0.225292f, 0.112265f, 0.002591f, 0.211174f, 0.172922f, -0.039065f, 0.082536f, 0.197238f, -0.002508f, 0.017237f, 0.277902f, 0.149807f, 0.063027f, 0.335741f, 0.369898f, 0.182476f, 0.350739f, 0.435821f, 0.115215f, 0.059518f, 0.178240f, -0.069620f, -0.209103f, -0.121585f, -0.272455f, -0.484326f, -0.483215f, -0.548812f, -0.731184f, -0.736582f, -0.706680f, -0.723192f, -0.646882f, -0.554583f, -0.443939f, -0.290693f, -0.147320f, 0.072513f, 0.321037f, 0.422874f, 0.515930f, 0.698246f, 0.614282f, 0.549035f, 0.613342f, 0.452849f, 0.212002f, 0.248860f, 0.281244f, 0.104262f, 0.136066f, 0.281494f, 0.138665f, 0.026511f, 0.121241f, 0.109003f, -0.061265f, 0.000226f, 0.075983f, -0.111283f, -0.141916f, 0.032490f, -0.028065f, -0.046331f, 0.157076f, 0.134700f, 0.014209f, 0.122439f, 0.177756f, 0.031224f, -0.013237f, 0.009943f, -0.181776f, -0.329184f, -0.343646f, -0.438814f, -0.552043f, -0.523405f, -0.468011f, -0.426661f, -0.380236f, -0.279442f, -0.264826f, -0.289650f, -0.193693f, -0.063475f, 0.017640f, 0.071444f, 0.190000f, 0.227349f, 0.257519f, + 0.461124f, 0.537802f, 0.496705f, 0.458484f, 0.364995f, 0.231271f, 0.197783f, 0.168539f, 0.102917f, 0.073684f, 0.067664f, 0.027072f, -0.006517f, -0.009208f, -0.019947f, -0.040694f, -0.050921f, -0.041722f, -0.057807f, -0.078598f, -0.075995f, -0.073647f, -0.083311f, -0.079173f, -0.060201f, -0.048258f, -0.035726f, -0.029050f, -0.027559f} + }, + { + {-0.015794f, 0.001746f, 0.010395f, 0.003553f, 0.006774f, -0.009882f, -0.005415f, 0.000446f, -0.001751f, 0.002647f, 0.008233f, -0.019798f, -0.000139f, 0.006507f, 0.003909f, 0.005998f, -0.005732f, -0.008002f, 0.008653f, -0.000147f, 0.002412f, 0.005393f, 0.007160f, 0.002640f, 0.001494f, 0.006439f, -0.000951f, -0.002063f, -0.005565f, 0.002997f, -0.001566f, -0.000907f, -0.002889f, 0.003700f, 0.009419f, 0.000038f, -0.001957f, 0.004431f, -0.006025f, -0.009017f, -0.004983f, -0.001829f, -0.005847f, 0.000525f, -0.001352f, 0.003784f, -0.003648f, 0.001050f, -0.007316f, -0.000706f, -0.006016f, -0.000289f, -0.002755f, -0.002378f, 0.003063f, -0.003473f, -0.000353f, 0.004950f, -0.002603f, 0.005904f, 0.007157f, 0.000519f, 0.009674f, -0.004949f, -0.000330f, 0.004624f, -0.001673f, 0.003120f, 0.004397f, 0.002375f, -0.005088f, 0.002002f, 0.002329f, 0.001636f, 0.000310f, -0.004256f, 0.005646f, -0.001524f, 0.002698f, -0.000930f, -0.001169f, 0.000355f, -0.005874f, -0.000486f, -0.004564f, -0.002129f, -0.000200f, -0.000797f, -0.000156f, -0.000456f, -0.002453f, 0.002919f, 0.000342f, 0.000817f, 0.000205f, 0.001630f, + -0.000995f, 0.002059f, -0.000151f, 0.000876f, -0.000337f, -0.000898f, 0.001162f, 0.000112f, -0.000344f, -0.000026f, 0.001640f, 0.000351f, -0.000286f, 0.001011f, 0.000532f, -0.000212f, 0.026251f, -0.007436f, 0.002515f, -0.005746f, -0.000484f, -0.002412f, 0.003009f, 0.002020f, 0.008990f, 0.002747f, 0.001559f, 0.003467f, -0.002197f, -0.018175f, -0.017390f, -0.005452f, 0.002304f, 0.005295f, -0.004426f, 0.000966f, -0.005666f, -0.002040f, 0.000265f, 0.003053f, -0.007726f, -0.008417f, -0.002501f, -0.000562f, 0.004506f, 0.001462f, -0.001906f, -0.006085f, 0.001047f, -0.003364f, 0.000148f, 0.004212f, -0.006168f, 0.002924f, 0.005437f, -0.004293f, -0.011304f, -0.002974f, 0.004077f, -0.000701f, 0.003306f, -0.000580f, 0.002858f, -0.000554f, 0.003143f, 0.000588f, -0.010554f, 0.002043f, 0.004281f, -0.001693f, 0.002893f, 0.000466f, -0.000636f, -0.002115f, 0.000079f, -0.006230f, -0.000580f, -0.001731f, -0.007858f, -0.001348f, -0.000274f, 0.006926f, -0.006907f, 0.011411f, 0.013277f, 0.010443f, -0.004568f, -0.002153f, -0.002446f, 0.005048f, -0.001956f, -0.002900f, 0.003146f, -0.007564f, -0.006879f, 0.000809f, + 0.006046f, -0.000218f, -0.003105f, -0.006768f, -0.004007f, -0.005166f, -0.002738f, -0.004769f, 0.001744f, -0.002868f, -0.000787f, -0.003008f, -0.001592f, 0.000137f, 0.001554f, 0.000107f, 0.001600f, -0.001123f, 0.000096f, 0.001262f, 0.000650f, 0.000990f, 0.001005f, 0.000578f, -0.001275f, 0.001265f, -0.024789f, -0.000161f, -0.003823f, 0.001710f, -0.000856f, -0.012834f, -0.002455f, -0.002711f, 0.004011f, 0.006235f, -0.008592f, 0.006860f, -0.002188f, 0.004725f, 0.004748f, -0.002587f, 0.010320f, 0.000623f, 0.000458f, -0.001799f, 0.001793f, -0.002570f, 0.001905f, -0.002887f, 0.000385f, -0.006751f, 0.000725f, 0.007426f, 0.000001f, 0.003123f, 0.007831f, -0.007708f, -0.008113f, 0.003378f, -0.003684f, 0.006255f, -0.006335f, -0.001922f, -0.013247f, -0.010225f, -0.008852f, 0.003854f, 0.001143f, 0.004699f, -0.004812f, -0.003439f, -0.000999f, 0.008303f, -0.009197f, 0.003787f, 0.001606f, 0.000672f, 0.004666f, -0.003223f, -0.004212f, -0.005549f, 0.003384f, 0.001786f, -0.008135f, -0.008983f, -0.010428f, -0.000318f, -0.002238f, 0.003384f, -0.000471f, -0.001985f, 0.000980f, 0.001388f, 0.004670f, -0.012482f, + 0.001547f, 0.007083f, 0.010537f, 0.010800f, 0.008942f, -0.001591f, -0.006586f, 0.009678f, 0.002966f, 0.001865f, -0.004835f, 0.002784f, 0.002009f, 0.000278f, -0.001193f, -0.002885f, -0.000416f, 0.003298f, -0.002555f, -0.004256f, -0.001725f, -0.001843f, 0.000723f, -0.000374f, -0.001023f, 0.002872f, 0.000241f, 0.003672f, -0.000332f, 0.001043f, 0.002482f, 0.002300f, 0.001821f, 0.001291f, -0.001459f, -0.001652f, -0.000515f, 0.001442f, -0.000270f, 0.001408f, -0.000988f, 0.002478f, 0.002115f, -0.002198f, 0.000150f, 0.000151f, -0.003538f, 0.002666f, -0.014475f, 0.008990f, -0.007671f, 0.010713f, 0.013950f, 0.008697f, -0.000148f, 0.004142f, 0.000955f, 0.011425f, -0.006224f, -0.006252f, 0.003281f, -0.001735f, 0.004687f, 0.008794f, -0.012552f, 0.003999f, 0.011285f, 0.005323f, -0.000807f, -0.000088f, 0.001375f, -0.005237f, -0.000075f, -0.004948f, -0.006900f, -0.001799f, 0.010693f, -0.004006f, 0.004972f, -0.003700f, -0.006520f, 0.012800f, -0.011148f, 0.008595f, 0.009402f, 0.001863f, 0.005963f, -0.008260f, -0.002256f, -0.003269f, -0.002604f, 0.005969f, 0.001809f, -0.008884f, 0.001452f, -0.000857f, + 0.001690f, -0.001915f, 0.003206f, 0.003076f, 0.010663f, -0.011151f, 0.005375f, 0.004244f, -0.001122f, 0.004216f, 0.001180f, 0.006561f, 0.006139f, 0.003892f, -0.003603f, 0.005228f, 0.009229f, -0.000232f, 0.005409f, -0.003906f, 0.010941f, 0.011293f, 0.012395f, -0.003563f, -0.008682f, 0.002803f, -0.001211f, 0.004422f, 0.003190f, -0.000048f, -0.000659f, -0.012419f, -0.003251f, -0.002881f, -0.000985f, -0.002547f, -0.003730f, 0.004265f, 0.001632f, 0.001347f, 0.004997f, -0.000297f, 0.005053f, 0.003193f, 0.001634f, -0.000708f, 0.000867f, -0.001107f, -0.002125f, 0.001497f, 0.000374f, 0.002451f, -0.000742f, 0.000590f, -0.000169f, -0.001652f, 0.002749f, -0.000104f, -0.002371f, 0.000966f, 0.002226f, 0.000261f, -0.003086f, 0.000768f, -0.001431f, 0.004234f, 0.003094f, 0.003087f, -0.000355f, 0.000955f, 0.002409f, 0.000249f, 0.001236f, 0.020307f, -0.001861f, -0.006341f, 0.019317f, -0.007628f, 0.008681f, -0.004642f, -0.018446f, 0.003294f, -0.005298f, 0.000587f, 0.022136f, -0.008564f, -0.010459f, 0.000852f, 0.011647f, -0.018709f, -0.006924f, 0.014040f, -0.004913f, 0.004537f, 0.006662f, -0.005008f, + 0.006067f, -0.003915f, -0.006454f, 0.001304f, -0.001796f, -0.002277f, -0.002368f, 0.007821f, -0.006237f, 0.015232f, 0.003834f, 0.000325f, -0.008700f, -0.002596f, 0.009354f, -0.010696f, 0.002316f, 0.003698f, -0.001627f, -0.014914f, 0.010241f, 0.002705f, 0.002553f, 0.001314f, -0.002008f, 0.007685f, -0.004519f, 0.010510f, 0.006039f, -0.004101f, -0.018117f, 0.008073f, 0.004927f, -0.000464f, -0.005091f, 0.004375f, 0.011785f, 0.011898f, -0.001246f, 0.007032f, -0.010651f, 0.007768f, -0.001835f, -0.003714f, 0.004699f, 0.009197f, -0.006406f, 0.009103f, 0.001701f, -0.003877f, -0.003153f, 0.007420f, -0.006161f, 0.017647f, -0.009022f, 0.007290f, -0.006037f, 0.001563f, -0.005386f, 0.007043f, -0.006266f, 0.000288f, 0.004104f, -0.001254f, 0.000848f, -0.005490f, -0.001784f, -0.000783f, 0.000108f, 0.001457f, -0.002294f, 0.003033f, -0.000225f, -0.002174f, 0.003207f, -0.006303f, -0.006239f, -0.003650f, 0.000193f, -0.000661f, -0.001178f, 0.000138f, -0.004224f, 0.005235f, 0.000431f, -0.000395f, 0.003792f, -0.003085f, -0.000520f, 0.004120f, 0.001888f, 0.001410f, 0.006734f, 0.006037f, 0.019075f, 0.002528f, + -0.004801f, -0.024364f, 0.007548f, 0.013842f, 0.008288f, 0.005421f, -0.002042f, 0.007051f, 0.026540f, -0.003211f, 0.012274f, 0.001214f, 0.006875f, 0.002627f, 0.000505f, 0.005333f, -0.002199f, -0.011318f, -0.003147f, -0.008410f, -0.002171f, -0.011868f, 0.004309f, 0.000364f, 0.013939f, 0.002744f, -0.006451f, 0.004617f, -0.001951f, -0.003385f, 0.008943f, 0.003221f, 0.006690f, 0.003912f, -0.003829f, -0.015506f, 0.000985f, 0.009052f, -0.000591f, -0.002955f, 0.004078f, -0.008181f, -0.003464f, -0.014440f, -0.017892f, 0.009314f, 0.010365f, 0.008104f, -0.002506f, -0.002911f, 0.000163f, -0.000269f, 0.005317f, -0.000877f, 0.005821f, 0.005228f, -0.000142f, 0.005388f, -0.004947f, 0.001482f, -0.002595f, 0.003216f, 0.003925f, 0.016878f, 0.000081f, 0.013821f, -0.005137f, -0.014118f, -0.001248f, -0.001862f, -0.005347f, 0.011345f, -0.000861f, 0.004725f, 0.001094f, -0.007998f, -0.009642f, -0.003355f, -0.002001f, 0.001153f, 0.010013f, 0.003348f, 0.001119f, 0.004292f, 0.006735f, -0.002739f, 0.005097f, -0.000510f, 0.004349f, 0.002779f, 0.001150f, 0.006038f, -0.000570f, 0.003567f, 0.002063f, 0.001889f, + -0.001009f, -0.001479f, -0.003392f, -0.001482f, 0.003576f, 0.005477f, -0.001247f, 0.000566f, -0.002942f, -0.000340f, 0.000301f, -0.002907f, 0.002236f, -0.005556f, 0.000316f, -0.000180f, 0.000082f, 0.008777f, -0.021629f, -0.000712f, 0.022024f, 0.030280f, -0.012587f, 0.003398f, 0.004803f, -0.010524f, -0.006144f, 0.001186f, -0.008783f, -0.009151f, 0.021191f, 0.002958f, -0.014071f, -0.002249f, -0.009188f, -0.005236f, 0.013777f, -0.004344f, -0.006126f, 0.012505f, 0.007716f, 0.012634f, -0.005387f, 0.002593f, 0.012323f, 0.000534f, -0.007428f, 0.003369f, -0.001092f, 0.001528f, -0.015645f, -0.010664f, 0.004651f, -0.001126f, 0.003699f, -0.014404f, 0.006735f, 0.005246f, 0.003344f, -0.025382f, -0.014872f, -0.006449f, -0.003193f, 0.003585f, -0.011114f, -0.007443f, 0.002463f, 0.019415f, 0.012787f, 0.006860f, -0.003468f, -0.002162f, -0.007375f, 0.005585f, -0.002153f, -0.014414f, -0.011011f, -0.001363f, -0.000243f, 0.020332f, 0.011264f, -0.010126f, -0.011288f, 0.014043f, 0.002799f, -0.008534f, 0.000071f, 0.012595f, 0.004781f, 0.000330f, -0.016461f, 0.018071f, -0.006386f, 0.012030f, 0.015834f, 0.016621f, + 0.001471f, -0.006206f, -0.005007f, 0.008512f, 0.009815f, -0.008642f, 0.006902f, 0.009253f, 0.006580f, -0.002902f, -0.002206f, 0.001257f, 0.005659f, 0.004567f, -0.004913f, -0.007686f, -0.007166f, 0.003475f, -0.003435f, -0.002334f, -0.004970f, -0.001065f, -0.003560f, 0.001764f, -0.002936f, 0.002116f, 0.001747f, -0.000661f, 0.000015f, 0.004000f, -0.002968f, -0.006158f, -0.001086f, 0.005494f, -0.003352f, -0.003099f, -0.003171f, -0.002366f, -0.000386f, -0.000216f, -0.003744f, -0.000210f, -0.002722f, -0.001431f, 0.001050f, 0.003631f, -0.002440f, -0.000214f, -0.000783f, -0.001767f, 0.003430f, 0.004161f, -0.005866f, 0.008976f, -0.011464f, 0.013098f, -0.001200f, -0.003540f, 0.006965f, -0.013216f, 0.004515f, 0.007207f, 0.001448f, 0.005038f, 0.006239f, -0.003569f, 0.014592f, -0.006859f, -0.024902f, -0.014807f, -0.003276f, 0.000985f, -0.005276f, -0.010629f, -0.011636f, -0.007887f, 0.024461f, -0.006778f, -0.001930f, 0.003543f, -0.005084f, 0.002933f, 0.020067f, -0.009641f, 0.009525f, -0.006244f, -0.012900f, 0.011573f, 0.008349f, 0.005348f, 0.017985f, 0.000421f, 0.008471f, -0.000768f, 0.002148f, -0.000685f, + -0.005907f, 0.003983f, -0.001367f, 0.013048f, 0.002606f, -0.008955f, -0.002307f, -0.002568f, -0.000613f, -0.014609f, 0.005885f, -0.014402f, 0.003511f, 0.019433f, -0.012653f, -0.024240f, 0.005638f, 0.003388f, 0.011134f, -0.004894f, -0.000219f, 0.011382f, -0.006998f, 0.005592f, 0.008381f, 0.002378f, -0.005082f, 0.011240f, 0.002429f, 0.014426f, 0.003068f, -0.008910f, -0.008459f, 0.009386f, 0.015746f, 0.005565f, -0.000132f, -0.012908f, -0.002601f, -0.004128f, 0.009350f, 0.002399f, -0.017663f, 0.002821f, 0.004712f, 0.001336f, 0.001812f, 0.006913f, -0.003085f, 0.002942f, -0.004801f, 0.003070f, 0.002790f, 0.002263f, 0.003649f, 0.001629f, 0.002425f, 0.002240f, -0.004056f, 0.001383f, -0.001212f, -0.000593f, 0.004043f, 0.001734f, 0.002272f, 0.004571f, -0.001331f, -0.014134f, 0.001423f, -0.000893f, 0.001100f, -0.001230f, -0.000814f, 0.004021f, 0.002666f, -0.002224f, -0.002620f, -0.019393f, 0.044543f, -0.010482f, 0.019977f, 0.001819f, 0.008302f, 0.005986f, -0.000182f, -0.025069f, 0.021210f, -0.031237f, 0.010021f, 0.007408f, 0.028028f, -0.013240f, 0.012593f, -0.019901f, 0.012882f, -0.006489f, + -0.021423f, -0.010308f, 0.004960f, 0.005394f, 0.007732f, 0.003893f, 0.011151f, 0.007269f, 0.016939f, -0.005353f, -0.014000f, -0.012634f, 0.004821f, -0.000235f, -0.006951f, 0.011298f, 0.004898f, -0.002421f, 0.006717f, 0.014003f, -0.001370f, 0.003557f, -0.002177f, 0.006877f, 0.004029f, -0.018134f, -0.007920f, -0.023732f, -0.005514f, -0.004110f, -0.000619f, 0.011251f, 0.010027f, 0.001406f, -0.006600f, -0.000229f, -0.003629f, -0.005714f, 0.003083f, 0.033157f, 0.002918f, -0.000831f, 0.010499f, -0.000902f, 0.012040f, -0.005306f, 0.000080f, -0.008004f, 0.033290f, 0.007760f, -0.013795f, -0.015806f, -0.010569f, 0.001197f, -0.000782f, -0.021449f, 0.001122f, 0.004289f, 0.001396f, 0.023171f, -0.006108f, 0.003309f, -0.014501f, -0.004851f, -0.039293f, -0.006905f, 0.001979f, 0.001377f, -0.015131f, 0.003820f, -0.007304f, 0.004795f, 0.002230f, -0.007260f, -0.000930f, 0.005028f, 0.007917f, 0.014684f, 0.003854f, -0.005523f, -0.005119f, -0.012053f, -0.004677f, 0.000983f, 0.001945f, -0.006992f, -0.002665f, 0.006322f, 0.002251f, -0.001921f, -0.001685f, -0.005221f, -0.004786f, -0.002445f, 0.001320f, -0.010070f, + -0.007060f, 0.001712f, 0.003935f, -0.000106f, -0.002595f, 0.002314f, 0.008102f, 0.001212f, 0.000620f, -0.000838f, -0.003598f, 0.000093f, -0.011649f, 0.023428f, 0.002111f, 0.019520f, 0.011883f, 0.019145f, 0.006478f, -0.019181f, 0.018998f, -0.012240f, 0.032800f, -0.021043f, -0.006165f, -0.029143f, -0.006088f, -0.003003f, 0.013089f, -0.013503f, 0.019165f, 0.015487f, -0.009182f, 0.001185f, 0.021899f, 0.030809f, -0.009705f, 0.000875f, -0.003936f, 0.009725f, 0.000218f, -0.003492f, 0.004523f, 0.008517f, -0.014570f, 0.011137f, 0.002164f, 0.012754f, 0.004893f, 0.002031f, -0.024935f, -0.003940f, 0.029061f, -0.003372f, 0.009762f, 0.022333f, 0.006470f, -0.001629f, -0.007711f, -0.010145f, -0.006086f, 0.001115f, -0.009487f, -0.005622f, 0.016856f, 0.015641f, 0.004920f, 0.025911f, 0.017189f, -0.005308f, -0.002539f, 0.003633f, 0.006017f, -0.007791f, -0.020547f, 0.026942f, 0.011845f, -0.005411f, 0.024591f, 0.025787f, 0.028649f, 0.012514f, 0.004336f, -0.010284f, 0.000738f, -0.014430f, -0.011643f, -0.007320f, -0.028709f, 0.011628f, -0.003638f, 0.024588f, -0.005811f, -0.019152f, -0.003630f, 0.001938f, + -0.002864f, -0.025580f, 0.004092f, 0.006939f, 0.011672f, 0.012463f, -0.008694f, 0.004070f, -0.005947f, -0.016607f, 0.003254f, 0.006549f, -0.001315f, -0.004853f, -0.012635f, 0.013295f, 0.007421f, -0.011698f, -0.013414f, -0.007408f, 0.007620f, -0.001284f, -0.003856f, 0.003650f, -0.006005f, 0.003780f, -0.001595f, 0.002359f, 0.005703f, -0.008448f, -0.004053f, 0.003890f, -0.001903f, 0.000224f, 0.017023f, 0.005675f, 0.001040f, -0.001093f, 0.003956f, -0.005626f, -0.003355f, -0.000488f, 0.005475f, 0.025513f, 0.001453f, 0.004616f, -0.003894f, 0.002056f, -0.003333f, -0.038799f, 0.004439f, -0.000435f, -0.007015f, -0.002951f, -0.019090f, 0.021785f, 0.022359f, 0.024989f, -0.040701f, 0.013060f, 0.008363f, 0.000952f, 0.040053f, 0.016394f, -0.019987f, -0.002395f, 0.039546f, 0.004604f, 0.007025f, 0.008008f, -0.011669f, 0.006540f, 0.008126f, 0.024509f, 0.012443f, -0.018872f, -0.030954f, 0.011624f, 0.007301f, -0.015661f, -0.002960f, 0.001428f, -0.019038f, 0.002088f, 0.023183f, 0.009805f, 0.012985f, 0.018771f, 0.030512f, 0.002804f, 0.026873f, 0.005228f, -0.010700f, -0.001642f, -0.015936f, -0.008422f, + 0.006645f, 0.009015f, 0.006953f, 0.013425f, -0.019154f, -0.008748f, 0.034263f, -0.002637f, -0.007381f, -0.019258f, 0.016243f, 0.014624f, 0.005089f, 0.006046f, -0.000279f, 0.009340f, -0.014917f, 0.024364f, -0.012347f, -0.014726f, -0.011915f, -0.008304f, 0.033177f, 0.008820f, 0.006902f, -0.036247f, -0.019867f, -0.029828f, 0.002151f, -0.003325f, -0.002950f, -0.028315f, -0.039134f, -0.001291f, 0.017566f, -0.009833f, 0.004996f, -0.002752f, -0.002694f, 0.009634f, -0.013640f, -0.006031f, -0.006228f, 0.011662f, 0.001954f, -0.008935f, -0.000154f, -0.001626f, -0.000237f, -0.004366f, -0.008219f, 0.001807f, 0.013067f, -0.006611f, -0.004314f, -0.008636f, -0.003833f, -0.006131f, -0.002899f, 0.005465f, -0.001945f, 0.008786f, -0.003003f, -0.002236f, -0.005206f, -0.004128f, 0.013743f, -0.001711f, -0.000940f, -0.006807f, -0.001059f, 0.007824f, 0.002213f, -0.010321f, 0.002248f, 0.000443f, 0.002894f, 0.036084f, 0.042466f, -0.011000f, 0.011856f, -0.003204f, -0.012551f, 0.002366f, -0.028620f, -0.017712f, -0.001360f, -0.005834f, 0.056985f, -0.025782f, 0.007204f, -0.036366f, -0.005434f, 0.022051f, -0.009410f, -0.020280f, + -0.021290f, -0.007835f, 0.008630f, 0.011194f, -0.001525f, -0.001901f, -0.023917f, 0.005533f, 0.016563f, 0.008336f, 0.010114f, 0.002968f, 0.003622f, -0.013980f, -0.004657f, 0.009243f, 0.003315f, -0.000101f, 0.000948f, -0.016847f, 0.007367f, -0.017726f, -0.002966f, -0.000543f, 0.005029f, -0.019674f, -0.002122f, 0.009526f, 0.013959f, -0.022407f, -0.011816f, 0.039564f, -0.015339f, -0.031337f, 0.026162f, -0.025513f, -0.008123f, -0.011335f, -0.004672f, -0.019608f, -0.013649f, -0.004188f, -0.019775f, -0.028161f, 0.045160f, 0.024888f, 0.020067f, 0.013716f, -0.017693f, -0.006963f, -0.011970f, 0.012631f, -0.021416f, 0.015007f, -0.011481f, 0.006401f, 0.015058f, 0.009800f, 0.002966f, -0.029003f, 0.028223f, -0.034630f, -0.009173f, -0.033577f, -0.013707f, 0.021952f, -0.001395f, 0.012413f, 0.025225f, 0.007961f, -0.002687f, 0.004840f, -0.008966f, 0.000395f, -0.002813f, -0.009681f, 0.011330f, -0.004083f, -0.005416f, 0.012985f, 0.006825f, -0.003578f, 0.000780f, 0.000494f, 0.001969f, -0.006010f, 0.005589f, 0.001683f, 0.002960f, -0.007173f, 0.004706f, -0.003393f, 0.012297f, -0.005675f, 0.008657f, -0.002776f, + -0.004448f, 0.013033f, -0.008917f, -0.003951f, -0.007990f, 0.005177f, 0.012895f, 0.005873f, -0.003831f, 0.006022f, -0.005370f, 0.006154f, 0.008937f, -0.009962f, -0.023798f, -0.001884f, 0.059742f, -0.026889f, 0.025927f, -0.053558f, 0.014627f, -0.034078f, -0.006454f, 0.018868f, -0.001773f, 0.012061f, 0.019775f, 0.015751f, -0.023405f, 0.017298f, 0.003508f, 0.012758f, -0.005094f, 0.017741f, 0.016463f, -0.003753f, 0.003394f, 0.010618f, 0.012024f, -0.017288f, -0.005972f, -0.025162f, -0.003175f, 0.021956f, 0.000520f, -0.010618f, 0.002202f, 0.008038f, 0.001472f, -0.009245f, -0.017928f, 0.004410f, -0.012147f, 0.011411f, -0.011481f, 0.042421f, -0.004069f, -0.023282f, -0.026193f, 0.005748f, -0.014419f, 0.013258f, -0.029369f, -0.023064f, -0.029837f, 0.006706f, -0.025215f, -0.006134f, -0.036152f, 0.025636f, 0.005194f, 0.017203f, 0.010600f, -0.039040f, 0.002880f, -0.003619f, -0.014677f, -0.021881f, -0.006060f, -0.018654f, -0.023466f, -0.013025f, 0.010704f, 0.015244f, 0.022268f, -0.013055f, 0.003005f, 0.009554f, -0.032808f, 0.014856f, -0.022522f, -0.002186f, 0.018300f, 0.007698f, 0.007310f, 0.003278f, + 0.037729f, -0.021846f, -0.008115f, -0.008408f, 0.009784f, -0.032465f, 0.002409f, -0.002778f, -0.000479f, 0.020823f, 0.012018f, 0.010219f, 0.003580f, -0.008032f, 0.001102f, -0.004065f, 0.015075f, -0.006046f, -0.002157f, -0.008760f, 0.017108f, 0.006772f, -0.006274f, 0.004585f, -0.015535f, 0.010385f, 0.005165f, 0.008134f, 0.001118f, -0.003231f, 0.009480f, 0.017466f, 0.005773f, -0.008742f, -0.011945f, -0.004955f, 0.004223f, -0.012104f, -0.002975f, -0.018319f, -0.013493f, -0.007320f, -0.000277f, -0.010157f, 0.007016f, -0.008043f, 0.017517f, -0.014211f, -0.000583f, -0.000259f, -0.049756f, -0.014306f, 0.056098f, 0.049652f, 0.027957f, -0.023844f, 0.024659f, 0.037169f, -0.024390f, 0.032851f, -0.026262f, 0.030342f, 0.007255f, -0.001896f, 0.010088f, -0.000521f, 0.016033f, -0.023743f, -0.006654f, -0.010643f, 0.012246f, -0.022507f, -0.020200f, 0.031952f, -0.002932f, -0.006511f, 0.003143f, -0.030638f, -0.000547f, 0.049603f, 0.027122f, 0.005748f, -0.000330f, 0.010663f, 0.046958f, 0.020099f, 0.000858f, 0.008007f, -0.012811f, -0.005446f, -0.011006f, 0.020228f, -0.010281f, 0.013547f, 0.002684f, 0.024137f, + -0.028318f, -0.000489f, -0.001560f, 0.000841f, -0.007872f, 0.013515f, 0.021734f, -0.004981f, -0.005983f, 0.021880f, 0.002658f, 0.002801f, 0.049508f, 0.007861f, 0.000836f, -0.022515f, 0.010150f, -0.016724f, 0.023021f, -0.026336f, -0.023244f, 0.003676f, -0.022892f, -0.024572f, -0.037477f, 0.010173f, -0.012389f, 0.019511f, -0.006202f, 0.011043f, -0.054813f, 0.011285f, -0.018415f, -0.033287f, 0.017569f, 0.023104f, 0.012256f, 0.007197f, 0.004381f, 0.009729f, 0.014907f, -0.007054f, -0.008311f, -0.010064f, -0.000442f, -0.011046f, 0.007166f, 0.001515f, -0.015669f, -0.010926f, 0.009339f, 0.005478f, 0.000952f, 0.016300f, -0.005446f, -0.001652f, -0.012699f, -0.002699f, 0.000336f, 0.006777f, 0.004516f, -0.010836f, -0.006395f, -0.002971f, -0.012850f, -0.002443f, -0.012047f, 0.004988f, 0.003615f, 0.014661f, 0.010258f, -0.001008f, -0.005635f, 0.000020f, 0.000389f, -0.004152f, -0.000609f, -0.015267f, -0.002421f, 0.006278f, 0.007093f, 0.001952f, -0.002269f, 0.014743f, 0.002768f, 0.041585f, -0.064002f, 0.026849f, 0.027988f, -0.045500f, -0.004644f, -0.038988f, -0.012868f, -0.035003f, -0.015833f, 0.040028f, + -0.013710f, -0.002938f, -0.028158f, -0.005471f, 0.006460f, -0.041740f, -0.001633f, 0.026646f, -0.051533f, 0.001879f, -0.035189f, -0.019008f, 0.000698f, 0.003779f, -0.023308f, -0.018734f, -0.019532f, -0.005647f, -0.016794f, -0.001101f, 0.008933f, -0.005087f, 0.013063f, -0.025159f, -0.016035f, 0.033556f, -0.015720f, 0.018160f, -0.019992f, 0.018894f, 0.017306f, 0.002928f, 0.004612f, 0.017595f, 0.000827f, 0.025084f, 0.031775f, -0.006022f, 0.004700f, 0.047189f, 0.002799f, 0.024233f, -0.001711f, -0.018826f, -0.037234f, 0.006219f, 0.025852f, -0.041114f, 0.000538f, -0.024192f, -0.012694f, -0.053306f, 0.023017f, 0.035111f, -0.009190f, 0.016897f, -0.008628f, 0.038185f, 0.042307f, -0.003444f, -0.041893f, -0.040750f, 0.058057f, -0.045263f, 0.016938f, 0.006657f, 0.006034f, 0.043389f, -0.018494f, 0.070717f, -0.001179f, -0.016101f, -0.018441f, -0.012820f, 0.011322f, -0.004491f, -0.005395f, -0.000486f, 0.018285f, -0.004598f, -0.011488f, 0.015264f, -0.005514f, 0.007670f, -0.014063f, -0.008549f, 0.013391f, 0.000973f, 0.020008f, -0.006658f, 0.008525f, -0.014775f, -0.004190f, -0.020198f, 0.004182f, 0.008145f, + 0.010006f, 0.001877f, 0.010280f, 0.000917f, -0.003124f, 0.010849f, -0.017037f, 0.011225f, -0.014447f, -0.005228f, 0.008805f, -0.017842f, -0.004467f, -0.010268f, -0.029805f, -0.008062f, 0.001985f, 0.010710f, -0.014544f, -0.007664f, -0.012786f, -0.004247f, 0.003156f, 0.011733f, 0.069500f, 0.078326f, -0.004630f, -0.059078f, 0.058345f, -0.064588f, 0.009098f, 0.027386f, 0.006784f, -0.006916f, -0.029804f, 0.033553f, -0.015028f, -0.012028f, -0.030351f, -0.017654f, -0.009468f, -0.037882f, -0.020849f, -0.016933f, -0.009481f, -0.006227f, 0.026299f, -0.000387f, 0.022730f, 0.000167f, -0.009836f, -0.033182f, -0.036358f, -0.009182f, -0.001335f, -0.000490f, -0.005528f, -0.013592f, -0.015713f, 0.017391f, 0.041859f, -0.022751f, 0.014412f, -0.014206f, -0.014649f, 0.016632f, -0.016228f, -0.026274f, 0.058768f, -0.006493f, 0.005395f, 0.002883f, -0.032852f, -0.007224f, -0.006899f, 0.016648f, -0.042438f, -0.018792f, 0.044870f, 0.007216f, -0.019092f, 0.024390f, 0.045602f, -0.025947f, -0.032138f, 0.016689f, -0.027246f, 0.000441f, -0.050983f, 0.016454f, 0.043327f, -0.004436f, 0.022591f, 0.013199f, 0.007565f, 0.049718f, + 0.015589f, -0.000220f, 0.028651f, -0.004160f, -0.003993f, 0.017548f, 0.018783f, -0.072101f, 0.006572f, -0.031355f, 0.025477f, -0.001172f, 0.000959f, 0.017939f, -0.005449f, -0.006882f, -0.009508f, 0.009666f, 0.003659f, -0.007045f, 0.009608f, -0.010309f, 0.001023f, -0.005467f, -0.013940f, 0.006411f, -0.006992f, 0.015597f, 0.008548f, -0.000238f, 0.000048f, 0.004300f, -0.004159f, 0.009247f, 0.004501f, 0.002910f, 0.003746f, -0.002586f, 0.003392f, -0.006206f, -0.012110f, -0.006604f, -0.003162f, 0.001695f, -0.015746f, 0.012829f, 0.008575f, 0.000671f, 0.004650f, -0.010526f, 0.014714f, 0.001832f, -0.008778f, 0.005388f, 0.006337f, -0.018804f, -0.003922f, 0.001926f, -0.001535f, 0.000306f, 0.003416f, 0.002396f, -0.095306f, -0.066752f, 0.027872f, -0.028275f, -0.026644f, -0.081070f, -0.023383f, 0.017315f, 0.006722f, -0.015950f, -0.045071f, -0.000557f, 0.022887f, -0.001648f, 0.003134f, 0.023710f, 0.042090f, -0.036457f, 0.095786f, -0.024620f, -0.031763f, -0.009653f, -0.005348f, 0.000460f, -0.037864f, 0.000892f, -0.006638f, 0.020254f, -0.012764f, 0.028655f, -0.011820f, -0.024338f, 0.010025f, 0.011829f, + -0.021724f, 0.023775f, -0.072903f, 0.000604f, -0.005803f, 0.029135f, 0.035229f, -0.025475f, 0.032855f, -0.012579f, 0.009420f, -0.015672f, -0.005230f, -0.009631f, 0.026295f, -0.003497f, 0.034610f, 0.054036f, -0.046984f, -0.013129f, 0.025385f, -0.031665f, 0.019203f, -0.035974f, -0.019832f, -0.017905f, -0.021056f, -0.036726f, -0.018820f, 0.017124f, 0.013997f, 0.028180f, 0.036579f, 0.026568f, -0.044286f, 0.005535f, 0.008206f, 0.010538f, 0.008957f, 0.028307f, -0.013855f, -0.029963f, 0.017150f, -0.007810f, -0.023411f, 0.004552f, -0.040110f, -0.016620f, -0.034941f, 0.003171f, 0.020593f, -0.012757f, 0.019792f, 0.010591f, -0.001197f, -0.007625f, -0.000592f, -0.031178f, -0.011692f, 0.010273f, 0.005178f, 0.006753f, 0.002145f, 0.003444f, 0.002771f, 0.009622f, 0.002610f, -0.020969f, -0.002948f, 0.003084f, -0.002132f, 0.005335f, -0.009608f, -0.008835f, -0.020470f, 0.005176f, 0.018050f, -0.020615f, -0.014473f, 0.010462f, -0.005242f, -0.021041f, 0.013755f, -0.010306f, -0.008441f, 0.012418f, -0.001000f, -0.004039f, -0.006469f, -0.009425f, -0.012480f, -0.013269f, -0.003472f, -0.011318f, -0.006760f, -0.005904f, + 0.008921f, -0.000778f, 0.013311f, -0.019820f, -0.064922f, 0.048994f, -0.083106f, 0.058402f, -0.008380f, -0.037176f, -0.031723f, -0.035409f, -0.023982f, -0.018671f, 0.001776f, 0.042813f, -0.003478f, -0.035904f, 0.038123f, 0.054033f, -0.082948f, -0.022159f, 0.005772f, -0.006874f, -0.012952f, -0.004167f, -0.011522f, -0.014755f, -0.024125f, 0.030754f, -0.010807f, -0.023043f, -0.039480f, -0.039243f, 0.038629f, 0.010044f, -0.007093f, -0.004297f, 0.000015f, -0.008677f, -0.010545f, 0.008490f, -0.034737f, 0.018887f, 0.039485f, 0.029466f, 0.018375f, 0.037693f, 0.043870f, -0.025269f, 0.009328f, -0.036359f, 0.039244f, -0.022519f, -0.006492f, -0.000271f, -0.057319f, 0.018539f, 0.047132f, 0.007972f, -0.019426f, -0.015826f, 0.061628f, -0.024898f, -0.026669f, 0.017233f, -0.062943f, -0.007428f, -0.031245f, 0.001272f, -0.061548f, 0.025624f, 0.010644f, 0.025110f, -0.099841f, -0.085674f, 0.013944f, -0.029996f, -0.020113f, -0.012484f, -0.066885f, 0.022033f, -0.039564f, -0.043194f, 0.032464f, -0.029102f, -0.017174f, 0.013773f, -0.007054f, -0.013152f, -0.002458f, -0.003721f, 0.013942f, -0.033061f, -0.015605f, -0.031904f, + 0.000025f, -0.014079f, 0.006346f, -0.004666f, -0.025178f, -0.010418f, 0.008819f, -0.001749f, 0.001779f, 0.006601f, -0.027566f, 0.003395f, -0.034917f, 0.015948f, 0.005258f, -0.025443f, 0.008033f, -0.030241f, -0.006524f, -0.011154f, 0.002235f, 0.015829f, -0.011913f, 0.016382f, -0.008835f, 0.027984f, -0.012889f, 0.017532f, -0.009880f, -0.003267f, -0.000919f, -0.003565f, 0.005698f, -0.003054f, -0.000022f, -0.002454f, -0.006395f, -0.000095f, 0.010090f, -0.002978f, -0.004353f, -0.003674f, 0.003227f, -0.003738f, -0.003795f, -0.002860f, -0.001803f, 0.000700f, -0.001797f, -0.001400f, -0.001607f, -0.003624f, -0.001504f, 0.001738f, -0.000079f, 0.006110f, 0.073975f, -0.101856f, 0.104533f, 0.031038f, -0.003081f, 0.009055f, -0.074728f, 0.015996f, 0.035734f, -0.012739f, 0.089098f, -0.024780f, 0.038778f, -0.030724f, 0.098104f, -0.003003f, -0.012748f, -0.036829f, -0.013261f, 0.014797f, -0.009447f, 0.040164f, 0.031157f, -0.009835f, 0.003034f, -0.037866f, 0.015044f, 0.039798f, 0.040118f, -0.042723f, 0.018498f, -0.007999f, 0.042803f, -0.010938f, 0.027951f, -0.025065f, -0.019752f, -0.057168f, 0.004233f, -0.036014f, + -0.053725f, 0.077281f, -0.033716f, -0.006197f, -0.014330f, -0.017836f, 0.010657f, 0.006930f, 0.027392f, -0.012234f, 0.041928f, 0.004504f, 0.075873f, 0.029639f, 0.083952f, 0.071740f, -0.006876f, 0.048170f, 0.036550f, -0.011922f, 0.042955f, 0.058745f, -0.024778f, -0.057439f, 0.033234f, 0.022050f, 0.047690f, 0.025020f, -0.004526f, 0.000045f, -0.061940f, -0.005260f, -0.018168f, -0.021899f, 0.082691f, -0.008819f, -0.000820f, 0.103215f, 0.068676f, 0.037599f, 0.045899f, 0.024245f, 0.003003f, 0.012412f, 0.059572f, 0.001422f, -0.015552f, 0.018362f, 0.050057f, 0.024245f, 0.028549f, 0.014827f, 0.034642f, -0.001108f, 0.009993f, 0.013651f, 0.024260f, 0.009040f, 0.006174f, 0.005117f, 0.002763f, 0.020396f, 0.029470f, 0.013329f, 0.038942f, 0.003633f, 0.024036f, 0.024674f, 0.043898f, 0.000172f, 0.030050f, 0.027526f, 0.005700f, 0.023367f, 0.001252f, 0.005896f, -0.007431f, 0.010199f, 0.012206f, 0.006978f, 0.006321f, 0.002553f, -0.005249f, 0.002228f, 0.010276f, -0.004441f, 0.005581f, 0.020975f, -0.004400f, 0.031791f, -0.071480f, 0.137238f, -0.018617f, -0.015274f, -0.008751f, 0.099843f, + -0.061311f, 0.050075f, -0.067126f, 0.063600f, 0.012884f, -0.012418f, 0.001639f, 0.037243f, -0.015994f, 0.034719f, -0.016124f, -0.000331f, 0.070161f, 0.021485f, -0.017938f, -0.000307f, 0.017537f, 0.013717f, -0.068005f, 0.018088f, -0.024747f, -0.006255f, -0.035813f, 0.034580f, 0.033009f, 0.005027f, 0.015682f, 0.058436f, -0.019369f, -0.093354f, 0.022362f, 0.060885f, -0.023579f, -0.061466f, 0.016375f, 0.043521f, 0.014898f, -0.000186f, -0.073306f, -0.035464f, -0.043348f, 0.040535f, 0.016693f, 0.041748f, -0.088241f, 0.005342f, -0.016135f, -0.098019f, -0.025133f, 0.014007f, 0.044449f, 0.061140f, -0.032518f, 0.114511f, 0.022612f, 0.001562f, -0.023437f, -0.046837f, -0.031812f, 0.021186f, -0.052964f, 0.107844f, -0.034378f, 0.003928f, 0.064435f, -0.042777f, 0.039467f, -0.041818f, -0.023265f, 0.089296f, -0.045140f, 0.058325f, 0.054737f, 0.019104f, 0.025165f, -0.078536f, -0.008898f, -0.004788f, -0.026797f, 0.035937f, 0.033539f, 0.012672f, 0.010556f, 0.034911f, -0.007994f, 0.013127f, -0.003781f, 0.009838f, -0.014806f, 0.011807f, -0.002094f, 0.009816f, 0.008862f, 0.001459f, -0.025957f, -0.005479f, + 0.004255f, -0.010499f, -0.002509f, 0.017935f, 0.011153f, 0.030190f, -0.013503f, 0.005508f, -0.050430f, -0.044060f, -0.005491f, -0.003754f, 0.031192f, 0.021732f, -0.013752f, -0.011890f, -0.040011f, -0.001338f, 0.014872f, -0.007820f, 0.000770f, 0.008495f, -0.011998f, 0.007889f, -0.029210f, 0.000400f, -0.009206f, -0.013107f, 0.020762f, -0.080691f, 0.046035f, 0.029453f, 0.046044f, -0.018398f, -0.013105f, 0.018641f, 0.000111f, 0.005297f, 0.001700f, 0.009093f, 0.002152f, -0.012705f, 0.059563f, -0.013921f, -0.041112f, 0.017358f, -0.001108f, -0.036196f, 0.012568f, 0.008342f, 0.024564f, -0.016712f, -0.027405f, 0.029411f, -0.023699f, -0.003260f, -0.007081f, 0.024133f, -0.041705f, 0.014193f, -0.025885f, 0.021087f, -0.036743f, 0.013011f, -0.012343f, 0.006278f, 0.080437f, -0.055386f, 0.010457f, 0.017659f, -0.049912f, 0.018047f, 0.022959f, -0.037017f, -0.007734f, -0.014216f, 0.066894f, 0.005574f, -0.077442f, 0.046281f, -0.062607f, 0.011311f, 0.032362f, -0.030105f, 0.037022f, -0.044913f, -0.037004f, 0.050817f, -0.008686f, 0.021550f, -0.076300f, 0.014203f, 0.016457f, -0.004135f, -0.011795f, -0.000724f, + 0.030924f, 0.001076f, -0.101457f, 0.061350f, -0.006418f, 0.023502f, -0.026673f, -0.031113f, 0.096695f, -0.002679f, -0.061892f, 0.005254f, 0.031208f, 0.007030f, -0.094077f, 0.003236f, 0.087211f, -0.016085f, -0.040385f, 0.009439f, 0.042174f, -0.005756f, 0.000115f, -0.007551f, -0.004390f, 0.005911f, -0.015294f, -0.009051f, 0.028629f, -0.012578f, -0.000811f, -0.016997f, 0.016783f, 0.025432f, -0.004613f, -0.003987f, 0.027055f, 0.008723f, -0.018634f, -0.004579f, 0.011645f, 0.007660f, -0.015832f, 0.008322f, 0.018610f, -0.015704f, 0.003979f, 0.004509f, 0.011986f, -0.029106f, 0.001821f, 0.017989f, 0.006830f, -0.020334f, 0.001118f, 0.014110f, 0.002338f, -0.015138f, -0.010118f, 0.038158f, -0.013250f, -0.199444f, -0.424355f, -0.169316f, -0.319495f, -0.389120f, 0.137805f, -0.001597f, 0.141345f, 0.537615f, 0.469506f, 0.267086f, 0.514492f, 0.286862f, 0.032368f, 0.177750f, 0.109350f, -0.194681f, -0.137618f, -0.040588f, -0.215793f, -0.260956f, -0.086919f, -0.132190f, -0.206588f, -0.052003f, -0.009489f, -0.263034f, -0.181274f, -0.027586f, -0.159927f, -0.207016f, -0.060439f, -0.101679f, -0.225049f, -0.043341f, + 0.022736f, -0.126287f, -0.096336f, 0.094931f, -0.034386f, -0.135426f, 0.028219f, 0.089363f, -0.066905f, 0.054718f, 0.196772f, -0.029118f, -0.052722f, 0.194725f, 0.103870f, -0.048877f, 0.323533f, 0.439819f, 0.273695f, 0.463777f, 0.693863f, 0.533694f, 0.507882f, 0.742260f, 0.643457f, 0.473544f, 0.581050f, 0.528199f, 0.335954f, 0.297159f, 0.159864f, -0.055420f, -0.232052f, -0.415095f, -0.589653f, -0.701664f, -0.879748f, -0.939935f, -0.991156f, -1.122854f, -1.122060f, -0.848078f, -0.867799f, -0.790320f, -0.355994f, -0.275494f, -0.267950f, 0.118657f, 0.226578f, 0.004782f, 0.236157f, 0.327784f, 0.112149f, 0.156196f, 0.307401f, 0.229737f, 0.133736f, 0.216973f, 0.268660f, 0.114152f, 0.167238f, 0.333440f, 0.198278f, 0.130527f, 0.307283f, 0.230436f, 0.093025f, 0.199701f, 0.228157f, 0.029283f, 0.117815f, 0.274657f, 0.157462f, 0.188930f, 0.387213f, 0.364269f, 0.383872f, 0.497068f, 0.500559f, 0.401536f, 0.379795f, 0.324163f, 0.197938f, 0.142726f, 0.075936f, -0.011900f, -0.078181f, -0.211934f, -0.289544f, -0.391358f, -0.521464f, -0.580657f, -0.656066f, -0.763698f, -0.727281f, -0.653239f, + -0.576915f, -0.421855f, -0.276582f, -0.146732f, -0.054147f, 0.022660f, 0.048169f, 0.058921f, 0.076058f, 0.080560f, 0.068103f, 0.072660f, 0.080289f, 0.077719f, 0.087095f, 0.112465f, 0.126145f, 0.134377f, 0.149375f, 0.152491f, 0.150510f, 0.143710f, 0.107506f, 0.067336f, 0.043131f, 0.036376f, 0.036406f}, + {-0.013341f, 0.000386f, 0.010605f, 0.007285f, 0.007329f, 0.004608f, 0.002910f, -0.004182f, 0.000159f, -0.004759f, 0.011346f, 0.006942f, 0.002724f, 0.001640f, 0.001638f, -0.000144f, -0.003590f, 0.005569f, 0.007806f, 0.007499f, 0.004596f, -0.005719f, -0.008243f, -0.009028f, -0.008566f, -0.000908f, 0.004472f, -0.008827f, 0.007359f, -0.001783f, 0.012864f, -0.002154f, 0.008173f, 0.000098f, -0.010670f, 0.003043f, -0.001374f, 0.008621f, 0.000596f, -0.001019f, -0.004354f, -0.007319f, 0.000658f, 0.004115f, -0.009369f, -0.012821f, 0.008948f, -0.007431f, -0.006838f, -0.006465f, 0.005043f, -0.005102f, 0.002145f, -0.002287f, -0.000632f, -0.007555f, -0.002279f, -0.005143f, -0.007502f, 0.002461f, 0.005821f, -0.002171f, -0.008253f, -0.001619f, -0.001685f, -0.004149f, -0.007135f, -0.000558f, -0.005804f, -0.006841f, -0.001237f, 0.000466f, 0.001607f, -0.002322f, 0.001003f, -0.001272f, -0.009647f, -0.002134f, 0.001187f, -0.002670f, -0.002477f, -0.003030f, 0.003084f, -0.003699f, 0.003176f, -0.000267f, 0.000548f, 0.001217f, -0.002362f, 0.002317f, 0.000019f, -0.001293f, 0.000573f, -0.000636f, -0.002006f, 0.000325f, + 0.001500f, -0.001034f, -0.000878f, -0.000097f, 0.002425f, 0.001094f, 0.000340f, 0.000373f, 0.001307f, 0.000885f, 0.001519f, 0.000430f, 0.001955f, -0.001632f, -0.000720f, -0.000739f, 0.025123f, -0.008780f, -0.005748f, -0.007827f, -0.005378f, 0.000586f, -0.016812f, 0.002838f, -0.008341f, -0.016459f, -0.003517f, 0.014107f, -0.010146f, 0.002751f, -0.001198f, 0.004733f, 0.007126f, 0.007624f, 0.012322f, -0.002639f, -0.007061f, 0.003143f, 0.002976f, -0.005660f, -0.000818f, -0.003825f, -0.002489f, 0.001515f, -0.006469f, -0.004044f, -0.000941f, -0.008144f, -0.009559f, 0.004884f, 0.007390f, -0.004383f, -0.010985f, -0.001926f, -0.002576f, 0.001555f, 0.008875f, 0.000587f, -0.003677f, -0.000591f, 0.011882f, 0.001481f, -0.007271f, -0.007011f, 0.003076f, 0.002250f, 0.009484f, 0.005385f, -0.000622f, -0.009055f, 0.000507f, -0.000533f, 0.007784f, -0.008334f, -0.002799f, 0.004578f, 0.009047f, -0.002551f, 0.000804f, -0.006853f, -0.003848f, 0.004200f, 0.000261f, 0.000885f, 0.002457f, -0.002665f, 0.003295f, 0.000976f, 0.004031f, 0.002479f, 0.001559f, 0.015729f, 0.004819f, -0.000645f, -0.002120f, -0.004637f, + 0.006746f, 0.004185f, 0.007291f, 0.005192f, 0.001830f, 0.001933f, -0.001522f, 0.001444f, -0.002945f, -0.003146f, -0.002414f, 0.000826f, -0.001113f, -0.000770f, -0.000476f, 0.002538f, 0.000421f, 0.003317f, 0.000314f, -0.001051f, -0.000414f, -0.000318f, -0.000458f, 0.001081f, 0.000780f, 0.001341f, -0.018430f, -0.004322f, -0.008691f, 0.008456f, 0.002150f, 0.000218f, 0.006018f, -0.003550f, -0.014243f, -0.007501f, 0.009489f, -0.000500f, 0.009775f, -0.000708f, -0.005508f, 0.010836f, 0.004081f, 0.023732f, -0.004446f, 0.010315f, 0.001520f, -0.011151f, 0.002832f, -0.009468f, 0.006164f, 0.002198f, 0.002437f, -0.010119f, 0.005094f, -0.001745f, -0.003564f, 0.004184f, 0.016163f, 0.006025f, -0.000072f, -0.012931f, 0.011254f, -0.002344f, 0.000071f, 0.007972f, -0.011763f, -0.002180f, 0.008149f, -0.004796f, -0.004184f, -0.013278f, -0.014505f, -0.001082f, 0.008820f, 0.005204f, -0.005806f, -0.000138f, 0.005753f, 0.007204f, 0.002881f, -0.001452f, -0.002777f, -0.012722f, 0.006016f, 0.015879f, 0.007232f, -0.004551f, -0.002216f, 0.005041f, 0.007586f, -0.000574f, -0.002342f, 0.001909f, -0.010470f, -0.001923f, + -0.007332f, -0.003415f, -0.000661f, -0.004495f, 0.012103f, 0.010554f, -0.003128f, 0.005305f, 0.003930f, -0.001998f, -0.007122f, 0.001699f, -0.005509f, -0.002076f, 0.001648f, -0.007110f, -0.001505f, 0.000727f, -0.002054f, 0.002041f, 0.003065f, -0.004544f, -0.001621f, -0.000289f, 0.000322f, -0.003563f, 0.000957f, -0.001643f, 0.002705f, -0.003159f, 0.002988f, -0.002157f, 0.000728f, 0.000498f, -0.001537f, 0.001210f, 0.000542f, -0.001145f, 0.001054f, 0.001178f, 0.001215f, -0.002343f, -0.001097f, 0.000058f, -0.003325f, 0.000446f, 0.001981f, -0.000653f, -0.013862f, 0.015490f, -0.013345f, 0.014146f, -0.000130f, -0.011274f, -0.026595f, -0.010471f, -0.007631f, 0.003990f, 0.013947f, 0.010920f, -0.003353f, -0.002130f, -0.003237f, -0.007622f, -0.002192f, -0.008566f, 0.002947f, 0.003166f, 0.005291f, 0.008779f, 0.005207f, 0.016786f, 0.000061f, 0.003401f, -0.005899f, -0.001368f, -0.003991f, 0.006179f, 0.001876f, -0.007786f, -0.011274f, 0.000482f, -0.008090f, 0.001035f, 0.007685f, -0.012751f, 0.009016f, -0.021467f, -0.005895f, -0.015917f, 0.002752f, -0.000957f, 0.000299f, -0.006222f, -0.008394f, 0.003007f, + 0.007651f, 0.005488f, 0.002051f, -0.012780f, 0.003948f, -0.008816f, -0.003328f, -0.002507f, -0.017414f, -0.006780f, 0.005276f, 0.006791f, -0.000551f, -0.011984f, 0.002123f, 0.004610f, -0.002272f, -0.002344f, 0.001499f, 0.010520f, 0.003818f, -0.002299f, -0.003301f, 0.001900f, -0.024824f, 0.001848f, 0.006371f, 0.005980f, 0.017598f, 0.002487f, -0.009769f, 0.011077f, -0.003792f, 0.001719f, 0.003939f, 0.003712f, -0.002472f, -0.008135f, 0.000529f, 0.004876f, 0.004664f, 0.007515f, -0.002271f, -0.002383f, 0.001369f, -0.001363f, -0.000877f, 0.001245f, -0.002058f, 0.000758f, 0.001774f, -0.000968f, -0.003941f, -0.003017f, -0.000093f, 0.000525f, 0.001114f, -0.001866f, 0.003855f, -0.001927f, -0.001034f, 0.002499f, 0.002916f, -0.000783f, -0.004374f, -0.002285f, 0.001827f, -0.002206f, -0.001150f, -0.001322f, 0.001012f, 0.003501f, -0.000584f, 0.017713f, -0.004584f, 0.000185f, 0.011663f, -0.006120f, -0.005722f, 0.017473f, -0.013432f, -0.031690f, -0.020821f, -0.012294f, 0.018932f, 0.008017f, 0.002565f, -0.018384f, 0.019319f, -0.008430f, 0.005369f, -0.005087f, 0.007548f, 0.009264f, -0.000834f, 0.000170f, + -0.000239f, -0.003220f, -0.010090f, -0.008154f, -0.002529f, 0.000985f, 0.008735f, 0.004919f, 0.013682f, 0.006496f, -0.006067f, -0.003272f, 0.012171f, -0.008882f, 0.014949f, -0.012083f, 0.003163f, 0.006523f, 0.004191f, -0.009813f, 0.013170f, -0.001362f, 0.014156f, 0.018673f, 0.002807f, -0.007561f, -0.007328f, 0.007851f, -0.009081f, -0.019120f, -0.004976f, 0.003926f, -0.012288f, 0.006901f, 0.005595f, -0.004134f, -0.007664f, -0.003319f, -0.002969f, 0.003590f, -0.001530f, -0.010802f, -0.004143f, 0.018443f, 0.014832f, 0.007937f, -0.022122f, -0.021752f, -0.011897f, 0.020716f, 0.010488f, -0.001714f, 0.002848f, -0.010341f, 0.013093f, -0.000674f, -0.010268f, -0.003635f, 0.001315f, -0.001093f, -0.005169f, -0.000832f, -0.004103f, -0.002232f, 0.003848f, 0.005653f, -0.003402f, -0.000142f, 0.000471f, 0.000882f, 0.000783f, -0.005781f, 0.006511f, -0.000537f, -0.006550f, -0.003933f, -0.000943f, -0.002107f, 0.000074f, -0.000555f, -0.000853f, -0.000760f, 0.001518f, 0.000246f, -0.003039f, -0.000272f, 0.001119f, -0.000808f, -0.004700f, -0.003247f, -0.004388f, -0.001598f, 0.003076f, 0.008917f, 0.013132f, -0.000735f, + 0.005062f, -0.020670f, -0.006977f, 0.003375f, 0.007069f, -0.025635f, -0.002839f, 0.011024f, -0.007722f, -0.016683f, 0.010388f, -0.019404f, -0.014229f, -0.007701f, 0.001695f, -0.007054f, -0.004788f, -0.000645f, 0.014413f, -0.012262f, 0.003197f, -0.003900f, -0.005093f, -0.010326f, -0.002849f, -0.015067f, -0.004486f, -0.000467f, 0.002870f, -0.010543f, -0.002224f, -0.006661f, 0.000953f, -0.003412f, -0.004670f, 0.002737f, 0.011858f, 0.002988f, -0.006183f, 0.005868f, -0.009058f, -0.002278f, 0.003469f, -0.003476f, 0.005908f, -0.001959f, -0.000669f, -0.041774f, 0.002770f, -0.014500f, 0.007065f, 0.006007f, 0.009221f, -0.023007f, -0.023440f, 0.003132f, 0.000818f, 0.005443f, 0.000153f, 0.012460f, -0.005067f, 0.006758f, 0.008409f, -0.004040f, 0.019614f, -0.006170f, -0.012773f, -0.002755f, -0.010573f, -0.000400f, -0.020918f, 0.000276f, 0.010346f, 0.004815f, 0.015612f, -0.004360f, -0.004275f, 0.006862f, -0.008258f, 0.001922f, 0.005080f, 0.010046f, -0.005402f, 0.005749f, -0.008196f, 0.001589f, 0.000322f, 0.001052f, -0.004042f, -0.001957f, -0.003014f, 0.003183f, -0.003749f, -0.005989f, -0.000126f, -0.002845f, + -0.003726f, -0.001371f, -0.002920f, -0.001306f, -0.001838f, 0.001670f, -0.002921f, 0.001657f, -0.005894f, -0.000663f, -0.003529f, -0.001531f, 0.000470f, 0.000361f, -0.000838f, -0.002852f, 0.000257f, 0.016164f, -0.032600f, 0.008728f, 0.001390f, 0.009048f, 0.013122f, 0.002376f, -0.012646f, -0.027773f, 0.001978f, -0.011230f, 0.021091f, -0.008592f, 0.004351f, 0.001530f, 0.004505f, 0.015910f, -0.007030f, -0.000491f, -0.007384f, -0.004163f, 0.004156f, -0.004018f, 0.014930f, 0.011119f, 0.003189f, -0.003170f, 0.000205f, 0.009994f, -0.001030f, 0.004824f, -0.000231f, -0.008241f, 0.007283f, -0.002119f, -0.006172f, 0.008827f, 0.014953f, 0.000041f, 0.005846f, 0.001047f, -0.009924f, -0.006189f, 0.018157f, -0.008771f, 0.008684f, 0.013226f, -0.017550f, 0.012518f, 0.006693f, 0.006355f, -0.007793f, 0.012837f, 0.003695f, -0.002219f, 0.016417f, 0.000607f, -0.000205f, -0.007695f, -0.004388f, -0.000008f, -0.007192f, -0.017564f, -0.004631f, 0.017939f, 0.013520f, 0.014759f, -0.001659f, -0.015565f, 0.006448f, 0.018819f, -0.003526f, -0.013327f, -0.000695f, -0.009416f, -0.002431f, -0.001563f, 0.014640f, -0.001404f, + 0.007509f, -0.001928f, 0.000666f, -0.010330f, 0.002715f, -0.001778f, 0.004035f, 0.004014f, -0.007133f, 0.004833f, -0.011280f, 0.001109f, 0.004038f, 0.000296f, -0.002925f, -0.000194f, 0.002216f, -0.007805f, -0.001460f, -0.007345f, 0.002267f, -0.004644f, -0.002943f, -0.004500f, -0.007555f, -0.004970f, -0.001952f, 0.001090f, -0.002329f, -0.000184f, 0.002364f, 0.000798f, -0.001993f, -0.001400f, -0.002280f, 0.004321f, 0.000124f, 0.001561f, 0.002780f, 0.001740f, 0.001949f, -0.001010f, 0.003668f, -0.000560f, 0.000065f, 0.001536f, -0.001469f, -0.002029f, 0.000946f, 0.003891f, -0.015481f, -0.004569f, -0.024958f, -0.007300f, -0.014479f, -0.017072f, -0.016188f, -0.005737f, 0.021767f, 0.023687f, 0.032637f, 0.007295f, -0.012461f, -0.007670f, 0.027013f, -0.000107f, -0.006309f, 0.020694f, -0.002177f, 0.000897f, -0.032352f, 0.014620f, 0.008125f, -0.021589f, 0.029895f, -0.004174f, 0.013423f, -0.003639f, 0.007011f, 0.013286f, 0.000015f, 0.023494f, 0.008997f, 0.006661f, -0.002737f, -0.008344f, 0.002240f, 0.014230f, -0.003836f, 0.004220f, 0.006654f, 0.018849f, -0.000899f, -0.005718f, 0.012141f, -0.014292f, + -0.008990f, 0.006448f, 0.020799f, -0.009239f, -0.011175f, -0.003533f, 0.017137f, 0.000145f, 0.002409f, -0.006420f, -0.002947f, 0.006143f, 0.009031f, 0.000789f, -0.007417f, -0.023737f, 0.002798f, 0.006978f, 0.022571f, 0.006552f, -0.001838f, 0.017336f, 0.030984f, -0.006397f, 0.010845f, 0.007305f, 0.012828f, -0.002511f, -0.010916f, 0.006377f, -0.025717f, -0.007001f, -0.003913f, -0.008349f, -0.005213f, 0.013370f, 0.004603f, -0.016651f, -0.009835f, 0.000463f, -0.005450f, -0.000607f, -0.012749f, -0.000400f, -0.004379f, -0.003220f, -0.001767f, 0.001267f, -0.003563f, -0.000898f, -0.001746f, 0.002715f, -0.001015f, 0.002490f, -0.003496f, -0.000116f, 0.000523f, 0.001147f, 0.005151f, 0.000144f, -0.001997f, 0.004811f, 0.007035f, -0.000576f, -0.004339f, -0.002742f, -0.006106f, -0.005339f, 0.007305f, -0.001255f, 0.001962f, 0.002671f, 0.002580f, 0.002411f, -0.005624f, 0.002731f, -0.002050f, -0.028256f, 0.039568f, -0.019949f, 0.008983f, -0.001465f, -0.013648f, 0.030160f, 0.007102f, 0.003743f, -0.031879f, 0.008274f, -0.012715f, -0.014510f, 0.003542f, -0.014163f, 0.016128f, 0.009761f, -0.002711f, 0.003233f, + -0.007811f, -0.003528f, -0.011585f, -0.007449f, -0.013914f, -0.021486f, -0.005294f, -0.015034f, -0.004036f, 0.008180f, -0.006076f, -0.008093f, 0.017015f, 0.010693f, 0.017077f, -0.014001f, -0.001579f, -0.002813f, -0.015381f, 0.000152f, -0.008178f, -0.038290f, 0.003353f, 0.000692f, -0.005921f, 0.013286f, -0.001387f, 0.014657f, 0.012418f, 0.004583f, 0.023038f, 0.020497f, -0.020239f, -0.005548f, 0.000170f, -0.000748f, 0.007205f, 0.002756f, 0.019588f, -0.004183f, 0.031286f, -0.000042f, -0.018449f, -0.014973f, 0.002396f, 0.005646f, 0.006401f, 0.022741f, 0.005975f, 0.005693f, 0.021378f, 0.028466f, 0.001166f, -0.017465f, -0.016540f, -0.001566f, -0.005549f, -0.004035f, 0.036778f, 0.002637f, -0.016704f, 0.011949f, -0.014625f, 0.013982f, 0.002309f, -0.002903f, -0.004373f, -0.011236f, 0.003128f, 0.003719f, -0.001665f, 0.003288f, 0.006204f, 0.003453f, 0.004228f, -0.001652f, -0.001563f, 0.000406f, -0.002056f, -0.001734f, 0.004169f, 0.001647f, 0.002958f, 0.003719f, 0.006593f, 0.000373f, -0.003096f, 0.006136f, 0.003490f, 0.001184f, 0.001403f, -0.001272f, 0.000932f, -0.000234f, 0.006567f, 0.010247f, + -0.005533f, 0.004889f, -0.001213f, 0.004261f, 0.000554f, 0.000908f, 0.008741f, -0.000456f, 0.000847f, 0.000750f, 0.007181f, 0.004766f, 0.005254f, 0.023736f, 0.001819f, 0.015996f, -0.017510f, 0.007829f, 0.001401f, -0.001303f, 0.010564f, 0.025098f, -0.006928f, -0.002285f, 0.023108f, -0.030569f, -0.017040f, -0.013354f, -0.035016f, 0.006872f, -0.011109f, -0.004941f, 0.004198f, -0.023904f, 0.026177f, 0.019738f, 0.027806f, 0.012468f, -0.017323f, 0.001624f, 0.001103f, 0.020796f, -0.003856f, -0.000688f, -0.000819f, -0.012941f, 0.001029f, -0.007620f, 0.011626f, -0.013731f, -0.005194f, -0.004648f, -0.005936f, -0.016081f, 0.007545f, -0.023574f, -0.003603f, -0.001688f, 0.014785f, 0.008728f, 0.001964f, 0.000223f, -0.004132f, 0.001691f, 0.000219f, 0.012246f, 0.002837f, 0.003528f, -0.001968f, -0.036898f, -0.017147f, 0.004242f, 0.015276f, 0.018286f, -0.028885f, 0.019293f, 0.005733f, -0.011407f, 0.002777f, 0.006220f, -0.006847f, 0.027946f, 0.000260f, 0.005334f, -0.006599f, -0.039012f, -0.013372f, -0.017783f, -0.004623f, 0.000688f, -0.010816f, 0.005582f, 0.008301f, -0.008032f, -0.001672f, 0.025043f, + 0.000708f, 0.012748f, -0.015373f, 0.001919f, -0.000250f, 0.014404f, 0.012745f, 0.009161f, -0.003471f, 0.002960f, 0.010465f, 0.006337f, -0.000461f, 0.011013f, 0.010709f, 0.011695f, 0.001523f, 0.004450f, 0.004018f, 0.001890f, -0.001517f, -0.001515f, 0.010120f, 0.001894f, -0.005337f, 0.000892f, -0.000776f, 0.005559f, -0.003883f, 0.001759f, 0.005280f, -0.004122f, 0.008207f, 0.002831f, -0.001121f, 0.000676f, -0.007084f, 0.005206f, 0.005262f, -0.000856f, -0.001571f, -0.004351f, -0.005867f, 0.036123f, 0.005741f, 0.014591f, -0.021786f, -0.019727f, 0.011316f, 0.018740f, 0.002178f, -0.006655f, 0.034665f, 0.010894f, 0.000116f, -0.009627f, 0.007527f, -0.002709f, -0.003862f, -0.001313f, -0.005990f, 0.001598f, -0.011567f, -0.027533f, 0.009039f, 0.002807f, 0.008361f, 0.002710f, 0.015265f, 0.004634f, -0.016486f, -0.033515f, 0.000848f, 0.002484f, -0.002716f, -0.029333f, -0.014328f, -0.004434f, 0.008187f, -0.006424f, 0.003260f, -0.025663f, 0.001227f, -0.005754f, 0.000143f, 0.002543f, 0.007096f, -0.002793f, -0.024145f, -0.022218f, -0.013847f, 0.009291f, 0.006870f, -0.005944f, -0.005029f, -0.038712f, + -0.021908f, -0.000815f, -0.037740f, 0.034685f, -0.035634f, -0.009820f, -0.023080f, 0.037201f, 0.011921f, -0.026272f, 0.013173f, -0.003085f, 0.014058f, -0.022393f, -0.007422f, 0.000932f, 0.015128f, -0.021263f, -0.008505f, -0.007258f, -0.021595f, 0.001486f, 0.014312f, -0.002750f, -0.003982f, 0.025766f, -0.040925f, 0.032163f, -0.005363f, 0.006755f, -0.018468f, 0.012897f, -0.002092f, 0.010264f, -0.009381f, 0.000473f, 0.008158f, 0.008839f, -0.002582f, -0.004536f, 0.000027f, 0.000856f, 0.001052f, -0.003067f, 0.010061f, 0.010526f, 0.007449f, 0.001887f, 0.007552f, -0.000783f, 0.009289f, -0.003498f, 0.001690f, -0.000471f, -0.003525f, -0.003657f, 0.000625f, -0.007755f, -0.009315f, -0.002773f, -0.000595f, 0.009342f, -0.000585f, -0.001618f, -0.002593f, -0.006574f, 0.004559f, -0.002167f, -0.003410f, -0.002418f, 0.004841f, -0.001112f, -0.010557f, -0.001501f, 0.003734f, 0.000799f, -0.001018f, 0.031729f, 0.069527f, -0.009465f, -0.021817f, -0.020451f, -0.018064f, -0.025876f, 0.004155f, -0.043980f, -0.000491f, -0.034027f, -0.015787f, 0.010339f, 0.021179f, 0.012094f, -0.015375f, -0.002213f, 0.020140f, -0.001508f, + 0.023261f, -0.014048f, -0.014179f, -0.012528f, 0.010908f, -0.008297f, -0.010787f, 0.003626f, -0.012910f, -0.013153f, 0.015727f, 0.037299f, 0.013998f, 0.015883f, 0.006963f, -0.022156f, -0.005351f, -0.018002f, -0.017032f, -0.002807f, -0.003195f, -0.014173f, -0.022635f, -0.045317f, -0.004364f, -0.016530f, 0.005712f, -0.008470f, 0.016787f, 0.015580f, 0.008764f, 0.016313f, 0.011412f, -0.001857f, 0.031502f, 0.045044f, 0.010645f, -0.053005f, 0.010612f, -0.009593f, -0.031128f, 0.004198f, 0.014979f, 0.007405f, 0.001186f, 0.014418f, -0.001036f, -0.025312f, 0.001372f, 0.011835f, -0.025427f, -0.013376f, -0.023837f, -0.043977f, 0.034349f, 0.004668f, -0.002740f, 0.023997f, 0.018636f, 0.001242f, 0.001213f, 0.023719f, -0.032560f, -0.014188f, 0.003455f, 0.017474f, 0.014652f, 0.022492f, 0.016090f, -0.013434f, -0.007921f, -0.003037f, -0.005320f, -0.002008f, -0.003419f, -0.006556f, -0.008671f, -0.013238f, -0.013452f, -0.009561f, -0.005256f, -0.001484f, 0.006355f, -0.003640f, -0.002878f, -0.015149f, -0.010513f, 0.001510f, 0.007735f, 0.005408f, 0.003074f, 0.003139f, 0.002069f, -0.002170f, -0.007908f, -0.003795f, + -0.005010f, -0.004326f, 0.001296f, -0.008351f, 0.001519f, -0.005965f, 0.006098f, -0.000750f, -0.002384f, -0.005713f, 0.005004f, -0.005256f, -0.001867f, 0.010446f, -0.004537f, -0.000360f, 0.051348f, -0.037997f, 0.044387f, -0.003705f, -0.005311f, -0.022575f, -0.008329f, -0.022427f, -0.019053f, 0.023718f, -0.021066f, 0.012269f, 0.053233f, 0.019803f, -0.007863f, -0.023998f, -0.020137f, 0.023757f, -0.019380f, -0.032822f, -0.013502f, 0.003390f, 0.003165f, -0.037474f, 0.002690f, -0.011352f, 0.019589f, -0.011822f, -0.000516f, 0.004373f, 0.055984f, -0.013504f, -0.017836f, 0.027170f, -0.021567f, 0.032634f, -0.019027f, 0.023904f, 0.004043f, -0.017216f, -0.015742f, 0.030338f, -0.039103f, 0.029849f, -0.016834f, 0.003089f, -0.009334f, 0.016322f, -0.013501f, -0.006881f, -0.000498f, -0.012025f, 0.057098f, -0.016376f, 0.038973f, 0.015140f, 0.017889f, -0.000244f, 0.014764f, 0.025014f, 0.028019f, -0.007654f, -0.027131f, 0.000174f, 0.023137f, 0.009340f, -0.004108f, -0.034127f, 0.045676f, -0.009534f, -0.030207f, -0.008350f, -0.018525f, 0.014311f, 0.019718f, 0.000825f, 0.033055f, -0.008911f, 0.016951f, -0.037542f, + -0.006646f, -0.040060f, -0.012492f, -0.014642f, -0.000922f, 0.002249f, -0.007742f, 0.014335f, 0.004685f, -0.010795f, -0.018467f, -0.013670f, -0.003988f, -0.001690f, -0.009269f, -0.001966f, -0.003297f, 0.011344f, -0.003377f, 0.000505f, -0.004318f, -0.017334f, -0.005275f, -0.006954f, 0.002103f, -0.002869f, -0.009777f, -0.015139f, 0.005977f, -0.010227f, 0.004702f, 0.006752f, -0.010643f, -0.025965f, -0.006244f, -0.004053f, -0.006970f, -0.009254f, 0.001022f, -0.004317f, 0.002754f, 0.003067f, -0.011850f, -0.001512f, -0.011931f, 0.011043f, 0.006719f, -0.006216f, 0.002931f, -0.010380f, -0.058193f, -0.024833f, 0.035736f, -0.007037f, -0.014601f, 0.041536f, 0.004007f, -0.021536f, 0.015776f, 0.022627f, 0.019200f, 0.003029f, -0.035782f, -0.014760f, 0.005511f, 0.005330f, 0.018764f, 0.012432f, 0.021162f, -0.018252f, -0.014402f, 0.007139f, -0.004921f, 0.017361f, -0.033629f, -0.005650f, -0.036378f, -0.011727f, 0.006650f, -0.004969f, -0.004518f, 0.039029f, 0.008179f, -0.028833f, -0.004321f, 0.002371f, -0.029452f, -0.003950f, 0.001514f, 0.017790f, 0.044887f, -0.015858f, 0.015053f, -0.024969f, 0.003839f, -0.014674f, + -0.018875f, 0.018309f, 0.039269f, -0.031026f, 0.003076f, 0.034955f, -0.015696f, -0.003190f, -0.013034f, 0.022887f, 0.005587f, -0.028361f, -0.000276f, -0.009893f, -0.009143f, -0.002802f, -0.013877f, 0.021176f, -0.050128f, 0.010653f, 0.004278f, -0.021094f, 0.028192f, 0.043141f, 0.030518f, 0.082164f, 0.024986f, -0.021058f, -0.029107f, -0.024109f, -0.013100f, 0.030167f, -0.010809f, 0.041886f, 0.003913f, 0.051002f, -0.060542f, -0.038869f, 0.018325f, -0.009956f, -0.006206f, 0.024461f, -0.016446f, -0.001882f, 0.026079f, 0.011592f, 0.019362f, 0.028495f, 0.022325f, -0.004832f, 0.009151f, -0.017439f, 0.000684f, -0.000684f, -0.012179f, -0.013400f, 0.008976f, -0.018461f, -0.001521f, 0.027879f, 0.002597f, -0.016675f, -0.021702f, 0.004023f, -0.027282f, -0.010087f, 0.029462f, 0.015258f, -0.004763f, -0.006765f, 0.005711f, -0.005483f, -0.009234f, 0.001947f, -0.006730f, -0.010491f, -0.001753f, -0.014396f, 0.010201f, 0.008784f, 0.009770f, -0.005381f, -0.003791f, 0.006183f, 0.015079f, 0.041146f, -0.095427f, -0.003508f, 0.054885f, -0.072428f, -0.003005f, 0.014607f, -0.074822f, 0.033936f, 0.009474f, 0.060509f, + -0.005702f, 0.021574f, 0.018071f, -0.065814f, -0.054424f, -0.021022f, -0.004985f, -0.032798f, -0.040371f, -0.021236f, 0.037922f, 0.026653f, 0.023103f, 0.002716f, 0.004561f, 0.012164f, 0.002656f, -0.047715f, -0.017644f, -0.061335f, -0.019361f, 0.034731f, 0.010577f, 0.023552f, 0.077815f, 0.020429f, 0.029611f, -0.000947f, 0.015836f, 0.068520f, 0.051652f, 0.014583f, 0.034003f, 0.031181f, 0.068425f, 0.056214f, -0.073863f, 0.046733f, -0.003813f, 0.044734f, 0.045599f, 0.019122f, 0.082088f, 0.072486f, -0.039451f, 0.036007f, -0.000156f, 0.034326f, -0.059365f, 0.006087f, 0.006825f, 0.002497f, -0.013142f, 0.038117f, 0.041363f, -0.039441f, -0.013056f, -0.023061f, 0.014795f, -0.032655f, -0.040479f, 0.038674f, 0.065919f, 0.024298f, 0.068589f, -0.019403f, 0.093060f, 0.090982f, 0.025767f, 0.047828f, -0.013484f, -0.023581f, 0.021739f, 0.021283f, 0.010593f, 0.007444f, 0.005967f, 0.012460f, -0.012519f, -0.023180f, -0.016359f, -0.043737f, -0.045690f, -0.018386f, 0.021889f, -0.000372f, 0.019351f, 0.003545f, 0.011945f, 0.028202f, 0.034743f, -0.010921f, 0.016159f, -0.001465f, -0.013788f, -0.011590f, + -0.009683f, -0.028774f, -0.012908f, 0.000635f, -0.024623f, -0.008709f, -0.022120f, -0.012310f, 0.005293f, 0.031643f, -0.014429f, 0.011474f, 0.009320f, -0.005196f, 0.017826f, 0.010277f, 0.013715f, 0.000484f, 0.023539f, 0.014925f, 0.010510f, -0.009155f, -0.013547f, -0.030390f, 0.044622f, 0.080134f, -0.010712f, -0.109075f, -0.034666f, 0.011269f, -0.008291f, -0.017995f, -0.023721f, 0.000485f, -0.062209f, -0.037355f, -0.051593f, -0.008269f, -0.014857f, 0.017400f, -0.036718f, -0.010551f, 0.010319f, 0.017444f, -0.000081f, 0.019390f, 0.038115f, 0.007880f, 0.054844f, -0.035015f, 0.013522f, 0.002252f, 0.052368f, 0.013683f, -0.009759f, -0.052291f, 0.035226f, -0.008974f, 0.047855f, -0.039772f, -0.031132f, -0.030127f, -0.015586f, -0.048208f, -0.006130f, -0.008325f, -0.044878f, 0.025024f, 0.052235f, -0.024994f, 0.008222f, -0.067113f, 0.065112f, -0.020347f, -0.034547f, 0.029480f, 0.026388f, -0.038375f, 0.003983f, -0.023912f, 0.009100f, -0.017510f, 0.081453f, -0.002958f, -0.006239f, -0.019885f, 0.143307f, 0.003679f, -0.018630f, 0.061135f, 0.049789f, -0.051784f, 0.041213f, -0.063455f, -0.034508f, -0.066316f, + 0.051490f, -0.045633f, 0.025283f, 0.034868f, 0.028587f, -0.058802f, 0.075094f, -0.013387f, -0.096361f, -0.110890f, -0.042808f, -0.013652f, -0.031305f, 0.025842f, 0.026391f, 0.043859f, 0.008134f, 0.003811f, -0.032013f, 0.033122f, 0.052977f, 0.076220f, 0.021076f, -0.021889f, 0.008430f, 0.064840f, 0.011835f, -0.035868f, -0.007815f, 0.069182f, 0.016947f, -0.041023f, -0.009532f, 0.034096f, 0.020861f, 0.031030f, 0.022079f, 0.043749f, 0.001519f, 0.023973f, 0.009741f, 0.030906f, 0.015899f, 0.049202f, 0.017631f, 0.031018f, -0.004853f, 0.009607f, 0.003611f, -0.003869f, 0.014468f, -0.004592f, 0.018414f, 0.030536f, 0.006044f, 0.017622f, 0.003685f, 0.022964f, -0.051074f, -0.012480f, 0.042032f, -0.030672f, -0.146775f, 0.010583f, 0.094488f, -0.056947f, -0.037935f, 0.075884f, -0.055048f, -0.003500f, -0.015558f, 0.072832f, -0.124836f, 0.069923f, 0.041571f, -0.035189f, 0.013164f, 0.068307f, 0.048853f, -0.023831f, 0.028014f, 0.012580f, -0.018902f, 0.032151f, -0.000552f, 0.019513f, 0.029679f, -0.012547f, 0.007285f, -0.003139f, 0.014241f, -0.018035f, -0.014399f, -0.001115f, 0.025512f, -0.074052f, + -0.036510f, 0.036888f, -0.008150f, -0.049092f, -0.057846f, 0.010079f, 0.072377f, -0.031292f, -0.045936f, 0.035526f, 0.054045f, -0.011754f, 0.013739f, -0.009494f, 0.050363f, -0.027221f, 0.075420f, -0.010153f, 0.000355f, 0.041232f, 0.001091f, 0.009505f, -0.053201f, 0.083971f, -0.043174f, -0.052566f, 0.040099f, -0.055664f, -0.018168f, 0.009418f, 0.028004f, 0.077576f, -0.027282f, 0.048372f, -0.009607f, 0.025324f, -0.131128f, -0.100487f, -0.018203f, -0.039171f, 0.020322f, 0.018156f, 0.050145f, -0.007874f, -0.010188f, 0.059497f, -0.064882f, -0.001445f, 0.041953f, 0.041157f, -0.014874f, 0.045855f, 0.006073f, -0.009774f, 0.000067f, -0.010184f, 0.044227f, -0.024409f, -0.002185f, 0.042804f, 0.010156f, -0.009716f, 0.017206f, -0.021270f, 0.005820f, -0.001630f, 0.001079f, 0.017290f, 0.008450f, -0.024337f, -0.005205f, 0.007519f, -0.018556f, -0.027789f, -0.000002f, 0.020296f, 0.036106f, -0.030181f, 0.035296f, 0.011919f, -0.034487f, 0.028902f, 0.033525f, -0.016714f, -0.039099f, 0.036301f, -0.017627f, 0.006664f, 0.020441f, -0.019950f, -0.051888f, 0.017066f, 0.014519f, -0.029010f, -0.026921f, 0.001980f, + 0.020242f, -0.023035f, -0.011015f, -0.049379f, -0.023382f, 0.035541f, -0.061493f, 0.059442f, -0.052419f, -0.065647f, 0.036511f, -0.031950f, -0.021729f, 0.037314f, -0.028746f, 0.031095f, -0.022696f, 0.014233f, 0.073090f, -0.066217f, -0.005200f, -0.010488f, 0.061492f, 0.007923f, 0.005377f, -0.059332f, -0.055746f, -0.020106f, -0.016628f, -0.009058f, -0.018309f, 0.010462f, 0.002737f, -0.006498f, 0.008676f, 0.012806f, 0.005871f, 0.009833f, -0.011870f, 0.028477f, -0.019302f, 0.027227f, -0.052877f, 0.001373f, -0.042934f, -0.055491f, -0.032949f, 0.072650f, -0.032039f, -0.032665f, -0.024434f, 0.016319f, -0.015097f, 0.032058f, 0.046896f, -0.050248f, 0.044023f, 0.007478f, -0.069301f, -0.034950f, 0.141641f, 0.073237f, -0.108290f, -0.020797f, 0.067930f, -0.035230f, -0.039868f, 0.027044f, -0.034532f, -0.074987f, 0.052933f, 0.023870f, -0.101813f, 0.041177f, 0.050775f, -0.060074f, -0.039860f, 0.059933f, -0.015347f, -0.046012f, 0.009835f, 0.029468f, -0.073950f, 0.013361f, 0.012401f, 0.020564f, -0.056594f, -0.017233f, -0.005459f, -0.018526f, -0.004464f, 0.003063f, 0.005616f, -0.034871f, 0.004777f, 0.050016f, + 0.016899f, 0.002585f, 0.016029f, -0.001496f, -0.009059f, -0.028433f, -0.009300f, -0.015683f, -0.021121f, -0.048266f, 0.012008f, -0.027822f, -0.008263f, 0.057833f, -0.052440f, -0.034444f, 0.042357f, -0.031798f, -0.012065f, -0.014135f, 0.018661f, -0.034403f, -0.013031f, 0.053248f, 0.027769f, -0.026980f, 0.029512f, 0.016328f, -0.023251f, -0.014911f, 0.072561f, -0.059271f, -0.046371f, 0.077415f, -0.001254f, -0.062988f, 0.007716f, 0.037755f, -0.037743f, -0.078496f, 0.051079f, 0.005722f, -0.087150f, 0.014139f, 0.023208f, -0.063733f, -0.002239f, 0.041597f, -0.012684f, -0.028767f, 0.021366f, 0.016959f, -0.044307f, -0.005168f, 0.031093f, 0.089721f, 0.126905f, -0.050178f, 0.142017f, -0.010768f, -0.038357f, -0.029578f, -0.047541f, -0.003635f, 0.024192f, 0.083931f, 0.003282f, 0.026123f, -0.020808f, -0.071661f, 0.001767f, 0.003030f, 0.047893f, 0.009410f, -0.054060f, 0.101651f, -0.042858f, 0.019301f, 0.045902f, -0.050083f, -0.040583f, -0.071637f, -0.031166f, 0.044876f, 0.055823f, 0.068881f, -0.025492f, -0.167225f, 0.037524f, 0.087896f, 0.112544f, 0.096815f, -0.001150f, -0.047602f, -0.059127f, 0.020658f, + 0.057539f, -0.036120f, -0.019003f, -0.148111f, -0.090686f, 0.080203f, 0.134587f, 0.027938f, -0.003419f, -0.032214f, -0.058503f, -0.013381f, 0.037508f, -0.051611f, 0.020617f, -0.006996f, 0.085142f, -0.003238f, 0.033341f, -0.165661f, -0.020885f, 0.002444f, 0.102206f, 0.079453f, -0.001944f, -0.049333f, -0.013534f, 0.121764f, 0.055027f, -0.142004f, -0.176273f, -0.068486f, 0.035627f, 0.274371f, 0.029763f, -0.047153f, 0.037880f, -0.072899f, 0.194769f, 0.059854f, -0.154820f, -0.096488f, -0.019180f, 0.137889f, 0.020777f, -0.056774f, -0.052914f, -0.048588f, 0.039270f, 0.074471f, 0.037233f, -0.079234f, -0.006490f, -0.026922f, 0.065927f, -0.006644f, 0.039926f, -0.013488f, -0.016634f, -0.052371f, 0.020739f, -0.015690f, -0.005502f, 0.041634f, -0.064470f, 0.038292f, -0.009623f, -0.009328f, 0.000420f, 0.030372f, 0.064214f, 0.032932f, 0.004483f, -0.012104f, 0.013699f, -0.000000f, 0.026140f, 0.009127f, 0.028830f, 0.007711f, 0.007381f, -0.031902f, 0.015206f, 0.017717f, 0.011798f, 0.000831f, 0.009726f, 0.006651f, 0.028542f, 0.014045f, -0.022956f, 0.058475f, -0.067251f, 0.002149f, -0.027012f, 0.015608f, + -0.041614f, 0.039180f, 0.010900f, -0.022157f, -0.041967f, -0.020616f, -0.007892f, 0.012285f, -0.057295f, 0.013279f, -0.028012f, -0.010903f, -0.044836f, -0.021126f, 0.036529f, -0.038294f, -0.013442f, -0.005239f, 0.017920f, 0.012076f, -0.014811f, 0.020661f, -0.032764f, -0.002589f, 0.000535f, 0.017683f, -0.021408f, 0.031275f, 0.023477f, -0.023752f, -0.027370f, -0.010502f, 0.044607f, -0.031986f, 0.014204f, 0.033037f, 0.007539f, -0.032175f, -0.012145f, 0.013865f, -0.020016f, 0.015010f, 0.001663f, 0.007265f, -0.029524f, 0.006255f, -0.023963f, -0.001046f, 0.022697f, 0.028386f, 0.022324f, -0.016418f, 0.021319f, 0.002668f, -0.026184f, -0.003925f, 0.000190f, 0.031572f, -0.008401f, 0.006650f, 0.027731f, -0.005932f, -0.035466f, 0.049934f, -0.019991f, 0.029528f, 0.021989f, 0.005068f, 0.007317f, -0.021136f, -0.025550f, 0.034376f, 0.005675f, 0.030233f, 0.009578f, 0.016445f, 0.008856f, -0.001018f, -0.001117f, -0.026539f, 0.003485f, 0.006997f, 0.009845f, 0.010368f, -0.002746f, 0.012083f, 0.002635f, -0.001710f, 0.003905f, 0.001419f, 0.013168f, -0.003593f, 0.010409f, -0.012316f, -0.002504f, -0.000180f, + 0.001581f, -0.007023f, -0.003257f, 0.023184f, 0.015371f, -0.004185f, -0.016084f, -0.019155f, -0.006357f, -0.007874f, 0.022070f, 0.001908f, -0.005764f, -0.014387f, -0.006571f, 0.001740f, -0.011029f, 0.024381f, 0.003013f, -0.010295f, 0.004946f, -0.000760f, -0.003719f, 0.006658f, -0.006458f, 0.021093f, -0.019355f, 0.014379f, -0.018797f, -0.054238f, 0.101659f, 0.009295f, 0.005629f, -0.040965f, 0.023643f, -0.003386f, 0.026741f, 0.020391f, 0.031284f, 0.003515f, 0.008032f, -0.017484f, 0.005139f, 0.028669f, -0.002721f, 0.015721f, -0.002405f, 0.005056f, 0.006411f, 0.011674f, -0.012035f, 0.021722f, -0.014659f, 0.002068f, -0.002291f, 0.007422f, -0.001849f, 0.004434f, 0.016546f, 0.018140f, -0.008639f, 0.008052f, 0.003607f, -0.003955f, -0.007672f, 0.024134f, -0.007307f, 0.005177f, -0.006755f, 0.012665f, 0.000011f, -0.011433f, 0.024260f, -0.014935f, -0.005113f, 0.006503f, -0.011282f, -0.006787f, -0.003442f, 0.001100f, -0.004262f, 0.000511f, -0.002226f, -0.006144f, 0.008309f, -0.015453f, 0.009908f, 0.006766f, -0.005227f, 0.010430f, -0.007738f, 0.012336f, -0.006191f, 0.002471f, 0.002499f, -0.007225f, + 0.012146f, 0.000146f, 0.001790f, -0.003664f, 0.016321f, -0.019100f, 0.020633f, -0.014389f, 0.002587f, 0.003681f, -0.000441f, 0.003947f, -0.003140f, 0.012027f, -0.011017f, 0.000953f, 0.010345f, -0.012135f, 0.007861f, 0.007128f, -0.001666f, 0.001688f, 0.007111f, 0.003481f, -0.003081f, 0.004811f, 0.001415f, -0.001403f, 0.001112f, 0.004247f, 0.000637f, -0.004996f, 0.001568f, 0.002301f, -0.002491f, 0.006138f, -0.001147f, 0.005078f, -0.002988f, 0.000990f, 0.004029f, -0.002338f, 0.000796f, 0.002844f, -0.003668f, 0.006715f, -0.000454f, 0.003414f, -0.000667f, 0.007059f, -0.002259f, 0.001009f, 0.006621f, -0.005464f, 0.007633f, -0.004115f, 0.003419f, -0.004237f, 0.007502f, 0.019470f, -0.092675f, -0.230794f, 0.035923f, 0.175847f, 0.163388f, 0.283403f, -0.072274f, -0.075816f, -0.192883f, -0.263385f, -0.054261f, 0.095296f, 0.101993f, 0.192019f, 0.104346f, 0.008262f, -0.049801f, -0.134007f, -0.095231f, -0.016430f, -0.014859f, 0.047785f, 0.044364f, 0.025635f, 0.016409f, 0.012897f, -0.007008f, -0.032919f, -0.002494f, 0.038062f, 0.000353f, 0.008019f, -0.002116f, -0.028520f, -0.021780f, -0.048515f, + -0.047473f, 0.021563f, 0.019961f, 0.044099f, 0.067128f, 0.050245f, 0.024618f, 0.008878f, -0.072318f, -0.051206f, -0.039540f, -0.039698f, -0.044197f, 0.009235f, 0.028309f, 0.049074f, 0.062782f, 0.051863f, 0.011387f, -0.006144f, -0.041510f, -0.042478f, -0.025150f, -0.012314f, 0.004161f, 0.006977f, 0.014150f, 0.001218f, -0.013494f, 0.004586f, -0.021590f, 0.011292f, 0.018522f, 0.002090f, 0.036987f, 0.044576f, 0.013894f, -0.008501f, -0.048966f, -0.064656f, -0.025922f, -0.011955f, -0.007437f, 0.032844f, 0.025580f, -0.006738f, 0.028998f, 0.031326f, 0.017657f, 0.021630f, -0.011889f, -0.023335f, -0.018620f, -0.026843f, -0.021163f, -0.003997f, -0.020310f, -0.008124f, 0.001226f, 0.016332f, 0.023255f, 0.033321f, 0.028930f, 0.026503f, 0.021207f, -0.011020f, -0.024901f, -0.042046f, -0.051638f, -0.030177f, -0.022346f, 0.002852f, 0.024797f, 0.036307f, 0.042284f, 0.033269f, 0.030823f, 0.019725f, -0.026021f, -0.046712f, -0.041989f, -0.020673f, -0.005910f, -0.001984f, 0.003273f, 0.017745f, 0.015812f, 0.007432f, 0.003688f, 0.014503f, 0.008386f, 0.012606f, 0.003650f, -0.019620f, -0.021346f, -0.014201f, + -0.005584f, 0.006635f, 0.004859f, -0.007168f, -0.003907f, 0.006593f, 0.003574f, 0.002793f, 0.009007f, 0.014227f, 0.006596f, 0.000224f, -0.007140f, -0.008394f, -0.006949f, -0.008627f, -0.011085f, -0.008566f, -0.000854f, 0.005780f, 0.008011f, 0.009306f, 0.007544f, 0.002291f, 0.000112f, 0.000180f, 0.000436f} + }, + { + {-0.010872f, -0.000147f, 0.002381f, 0.001806f, 0.007759f, 0.001020f, -0.000950f, -0.005003f, 0.011403f, 0.007043f, 0.000372f, -0.001405f, 0.011327f, 0.003845f, -0.003618f, -0.009934f, 0.006340f, -0.002862f, 0.004924f, -0.009455f, 0.000611f, -0.002262f, -0.007023f, -0.001907f, -0.003533f, -0.001310f, 0.000540f, 0.000044f, -0.005120f, -0.003148f, -0.000812f, -0.000990f, -0.003183f, 0.003408f, -0.000326f, -0.003412f, 0.006076f, -0.010108f, -0.004791f, 0.004820f, -0.006065f, 0.000831f, -0.003764f, -0.005552f, 0.003775f, 0.003420f, -0.002974f, 0.003789f, 0.007313f, 0.004110f, -0.003789f, -0.004442f, 0.000802f, 0.001432f, -0.004468f, 0.004837f, 0.008066f, -0.006883f, -0.002194f, 0.003963f, 0.002973f, -0.001644f, -0.002101f, -0.003364f, 0.004447f, 0.001346f, -0.005321f, 0.006050f, 0.002953f, -0.004981f, -0.003725f, 0.006362f, -0.004800f, -0.006146f, -0.011566f, -0.010067f, 0.005482f, 0.006328f, 0.000514f, 0.002775f, -0.001093f, 0.002270f, -0.004280f, 0.006492f, -0.000535f, 0.003001f, -0.002973f, 0.001671f, -0.002707f, -0.002126f, 0.000109f, 0.004157f, -0.000913f, -0.001068f, -0.001858f, 0.000613f, + -0.001402f, 0.000280f, 0.000495f, -0.000868f, -0.001004f, 0.000125f, -0.000047f, -0.000345f, -0.001102f, 0.000556f, -0.000401f, 0.014515f, -0.001393f, -0.002930f, -0.005941f, 0.009291f, -0.004944f, -0.000527f, -0.007547f, -0.008053f, -0.010128f, -0.004765f, 0.007945f, -0.008220f, -0.003073f, -0.002892f, 0.002755f, -0.002047f, -0.011284f, 0.005882f, 0.002828f, 0.021940f, -0.002240f, 0.010265f, -0.002046f, -0.000542f, -0.000993f, 0.001134f, -0.004625f, 0.008497f, -0.002231f, -0.001711f, -0.005127f, -0.000939f, -0.001833f, 0.013167f, 0.002445f, -0.001332f, -0.012339f, -0.001261f, -0.002373f, 0.003723f, -0.007842f, -0.002171f, 0.002123f, 0.001770f, -0.002169f, -0.001324f, -0.004873f, -0.001835f, -0.005857f, -0.002636f, 0.011369f, -0.003346f, 0.003600f, 0.006347f, -0.001536f, -0.006179f, -0.008108f, 0.002106f, 0.001903f, 0.002449f, 0.005040f, 0.005974f, 0.004920f, 0.002844f, -0.002253f, -0.002185f, -0.002607f, -0.011415f, -0.002730f, -0.001161f, 0.005529f, 0.004714f, -0.002821f, -0.000277f, 0.006073f, -0.006333f, 0.002496f, 0.000181f, -0.001582f, -0.003664f, -0.005582f, -0.000069f, 0.003322f, 0.003359f, + 0.003539f, -0.001479f, 0.001455f, -0.001322f, 0.000296f, 0.004978f, 0.002019f, 0.000386f, 0.000043f, -0.000759f, -0.000118f, 0.000318f, 0.000991f, -0.000632f, -0.000695f, 0.002160f, 0.001107f, 0.002200f, 0.002255f, 0.000463f, 0.001253f, -0.000323f, 0.000363f, 0.000164f, -0.001009f, -0.002555f, -0.000465f, -0.019239f, -0.004701f, -0.000391f, -0.004120f, -0.002861f, 0.006724f, -0.013520f, -0.011333f, -0.006642f, -0.004433f, 0.001908f, 0.015169f, -0.003312f, -0.000047f, 0.001810f, -0.010901f, -0.002866f, -0.009107f, -0.001426f, 0.016066f, -0.001261f, -0.007842f, -0.005109f, 0.000185f, 0.003261f, 0.003204f, -0.004533f, -0.020390f, -0.009772f, -0.002745f, -0.007885f, 0.000706f, 0.000348f, 0.008232f, -0.005347f, 0.007309f, 0.001768f, -0.003791f, -0.010932f, -0.009157f, 0.012613f, -0.010461f, 0.006921f, 0.002011f, -0.006715f, -0.002529f, -0.005998f, -0.004311f, 0.005930f, -0.011234f, 0.005781f, 0.001953f, -0.000198f, 0.001862f, 0.000769f, -0.001136f, 0.000234f, -0.005702f, -0.007811f, 0.000541f, -0.002391f, -0.005773f, -0.002341f, -0.008917f, 0.010332f, 0.007068f, 0.001774f, 0.008454f, 0.000992f, + -0.003619f, 0.010500f, -0.005565f, -0.003494f, -0.003588f, 0.007990f, -0.007829f, 0.003464f, 0.005610f, 0.000305f, 0.003470f, 0.008704f, 0.003180f, -0.000272f, 0.000540f, 0.001849f, 0.001437f, -0.001725f, -0.001055f, 0.000103f, -0.000459f, 0.002792f, 0.001349f, 0.002953f, 0.002190f, 0.000840f, -0.002679f, -0.003135f, 0.001881f, -0.000114f, -0.000189f, 0.002859f, -0.002005f, -0.001594f, -0.000056f, 0.000685f, 0.000931f, -0.000285f, -0.003226f, 0.002676f, 0.000709f, -0.012928f, 0.015852f, 0.017987f, 0.004932f, 0.004844f, -0.005141f, 0.008396f, 0.004211f, -0.010499f, 0.003298f, 0.006783f, -0.012553f, -0.010950f, 0.011038f, -0.009591f, -0.001385f, -0.006174f, 0.011125f, 0.002450f, -0.001261f, -0.004066f, -0.000071f, -0.007179f, 0.006704f, -0.003569f, 0.004066f, -0.001706f, -0.000044f, 0.007261f, 0.002858f, 0.001048f, -0.002785f, 0.007117f, 0.004517f, 0.002142f, -0.000592f, 0.007362f, -0.000554f, 0.001374f, -0.004606f, 0.008968f, 0.002028f, 0.003597f, 0.006560f, -0.017911f, -0.005808f, -0.003504f, -0.006403f, -0.006213f, 0.001845f, 0.010048f, -0.004298f, -0.002637f, -0.005457f, -0.002418f, + 0.002191f, 0.004442f, -0.012324f, -0.000705f, 0.004344f, 0.000541f, -0.000949f, 0.005406f, 0.003527f, -0.011539f, -0.003208f, -0.002480f, 0.007198f, -0.007575f, 0.010155f, 0.010992f, 0.005766f, 0.002302f, -0.005074f, -0.000228f, 0.000908f, 0.007364f, -0.001932f, 0.000924f, 0.000912f, 0.001152f, 0.010853f, 0.001226f, 0.011563f, 0.004302f, 0.000198f, -0.005480f, -0.003130f, 0.004770f, -0.000940f, 0.000037f, 0.000489f, 0.000328f, 0.001082f, 0.004856f, 0.001402f, 0.001924f, 0.000214f, 0.001860f, -0.003814f, -0.000283f, 0.001244f, 0.001575f, -0.000956f, -0.000574f, 0.000054f, 0.001572f, -0.001116f, -0.000803f, 0.001636f, 0.001589f, 0.002940f, 0.001392f, 0.002723f, -0.001558f, 0.000243f, 0.000360f, -0.001033f, 0.002589f, 0.019897f, -0.003709f, -0.000297f, 0.007258f, 0.004695f, 0.003511f, 0.006702f, 0.017671f, -0.004946f, -0.001634f, -0.017051f, 0.000326f, -0.014654f, -0.018583f, 0.000648f, 0.007903f, -0.024001f, 0.008133f, 0.007833f, 0.004293f, -0.007298f, -0.005767f, -0.007958f, -0.003023f, 0.000447f, 0.000498f, 0.007614f, 0.010069f, -0.001395f, -0.009926f, -0.006034f, 0.007453f, + -0.010675f, -0.005311f, -0.009025f, 0.001939f, -0.014576f, 0.007251f, 0.001137f, -0.000990f, 0.002327f, -0.000473f, -0.003347f, 0.000009f, 0.009360f, -0.010825f, 0.013091f, -0.009956f, -0.001176f, 0.002414f, -0.006617f, -0.005398f, 0.005113f, 0.002524f, -0.002106f, -0.005063f, 0.009765f, 0.004078f, -0.006835f, -0.013661f, 0.001567f, 0.003160f, 0.007976f, -0.000333f, -0.003553f, 0.000689f, 0.004216f, -0.003253f, 0.018979f, -0.006358f, -0.003109f, -0.013552f, -0.009000f, 0.021434f, 0.008680f, -0.004762f, -0.001249f, -0.007452f, -0.008367f, -0.000666f, 0.002958f, 0.000570f, -0.004075f, 0.004629f, 0.002521f, 0.006415f, -0.000707f, -0.004638f, 0.001843f, 0.000192f, -0.002147f, 0.001878f, 0.001779f, -0.000485f, 0.000804f, 0.002537f, 0.000804f, -0.000600f, -0.001960f, 0.001065f, 0.000630f, -0.001790f, 0.003488f, 0.002976f, 0.000927f, -0.001748f, -0.004554f, 0.000328f, -0.000394f, -0.000170f, 0.001957f, -0.002227f, 0.001415f, 0.002377f, -0.001458f, 0.005482f, 0.012819f, -0.017123f, -0.010116f, 0.011974f, -0.008973f, -0.009556f, -0.010491f, -0.012542f, 0.009013f, -0.003171f, -0.000374f, -0.002888f, + 0.000470f, -0.013955f, -0.002787f, 0.006381f, 0.006979f, 0.001583f, -0.007369f, -0.010712f, -0.008889f, -0.011304f, 0.002289f, 0.013473f, 0.001813f, 0.004355f, 0.004617f, 0.004490f, -0.007926f, 0.008299f, 0.005165f, -0.005941f, -0.004777f, -0.018303f, 0.002811f, 0.004074f, -0.014372f, -0.001152f, 0.004416f, -0.002710f, 0.001773f, -0.001310f, -0.015419f, 0.013096f, -0.014365f, 0.011278f, 0.000605f, 0.005675f, -0.016168f, -0.009061f, -0.014478f, -0.011432f, 0.002104f, -0.004090f, -0.005147f, -0.006454f, -0.000050f, 0.007180f, -0.013397f, -0.000252f, 0.003883f, -0.004350f, -0.014937f, -0.009376f, -0.003131f, 0.002788f, 0.007241f, 0.003121f, -0.012304f, 0.013098f, -0.004238f, -0.002896f, 0.013039f, -0.017145f, -0.005641f, -0.003442f, -0.003068f, 0.020455f, -0.007482f, -0.000381f, -0.007764f, -0.006458f, 0.003709f, 0.002789f, -0.000483f, 0.002160f, -0.001653f, -0.002922f, 0.003809f, 0.000020f, 0.001545f, 0.001605f, 0.004931f, -0.001974f, 0.001422f, 0.001067f, 0.000322f, 0.001265f, -0.005654f, 0.007304f, 0.006642f, -0.002308f, -0.001171f, 0.001010f, -0.000987f, 0.001224f, 0.000192f, -0.000549f, + -0.002731f, 0.001628f, -0.001422f, 0.000610f, 0.006462f, 0.004106f, 0.003461f, -0.002705f, 0.004603f, 0.001811f, -0.001895f, 0.002070f, 0.000680f, 0.001522f, 0.026487f, -0.023465f, -0.012331f, -0.015607f, 0.011409f, 0.004343f, -0.007929f, 0.005396f, -0.000044f, 0.015786f, 0.001070f, 0.000231f, -0.015077f, 0.010774f, 0.017434f, 0.018270f, 0.015217f, -0.008370f, -0.001209f, 0.002404f, -0.009591f, -0.006555f, 0.002629f, 0.001165f, -0.013856f, -0.006769f, -0.005787f, 0.006879f, -0.000964f, -0.010470f, -0.004753f, 0.003528f, 0.008474f, 0.001099f, -0.002824f, 0.000198f, -0.007305f, -0.000144f, -0.000359f, 0.001205f, -0.015846f, 0.009379f, 0.011084f, 0.002331f, 0.005768f, 0.006608f, -0.012803f, 0.018550f, 0.016758f, 0.003155f, -0.011381f, 0.006686f, -0.003950f, -0.016989f, -0.004220f, -0.005297f, -0.000133f, 0.001146f, -0.000190f, -0.010221f, -0.009079f, -0.021121f, -0.017552f, 0.000356f, 0.010870f, -0.009611f, 0.004667f, 0.001501f, -0.006414f, -0.017180f, -0.001560f, 0.010233f, -0.006551f, 0.009198f, 0.018017f, 0.005553f, -0.007207f, 0.010430f, 0.000134f, -0.000949f, 0.005057f, 0.008152f, + -0.000521f, -0.001256f, 0.002406f, 0.005315f, -0.002672f, -0.011488f, 0.000864f, -0.000182f, 0.001429f, 0.001592f, 0.004095f, 0.008663f, -0.002851f, -0.001347f, 0.006636f, 0.005994f, 0.001463f, 0.001001f, -0.003928f, 0.008360f, 0.001139f, -0.000397f, 0.005136f, 0.001697f, 0.002014f, 0.000991f, 0.004658f, 0.004107f, 0.004638f, 0.007412f, 0.000805f, 0.004489f, 0.000846f, 0.004982f, 0.002528f, 0.002899f, 0.002114f, 0.004729f, 0.004267f, -0.025140f, 0.002691f, -0.009370f, -0.033682f, -0.025909f, 0.006517f, 0.000266f, -0.005779f, 0.006034f, 0.016251f, -0.002554f, 0.009754f, 0.008634f, 0.005042f, -0.002561f, -0.008737f, 0.007190f, -0.007435f, 0.000928f, -0.006377f, 0.010161f, 0.018587f, -0.016654f, -0.004761f, 0.001060f, 0.006785f, 0.001826f, -0.005149f, -0.003006f, -0.006167f, -0.000455f, -0.007643f, 0.009830f, 0.002206f, -0.011701f, 0.013102f, -0.013055f, -0.004134f, 0.016046f, 0.014170f, 0.011937f, -0.013551f, -0.008903f, -0.012134f, 0.014153f, 0.019202f, -0.000259f, -0.003917f, 0.015218f, -0.022326f, 0.002779f, 0.006048f, -0.002135f, -0.018752f, 0.016944f, 0.005978f, 0.008625f, + 0.015930f, 0.000872f, -0.022635f, 0.005984f, 0.009364f, -0.005779f, -0.001639f, 0.015666f, -0.016158f, -0.015185f, -0.013079f, 0.001618f, 0.020208f, 0.010927f, -0.002858f, 0.023107f, -0.030652f, -0.011298f, 0.000415f, 0.014802f, 0.006933f, -0.004409f, -0.024349f, -0.003780f, -0.009736f, 0.002747f, 0.009337f, 0.023809f, 0.004110f, -0.006684f, 0.003172f, -0.004018f, -0.001524f, -0.007834f, 0.000096f, -0.006450f, 0.002283f, 0.006517f, 0.003742f, 0.006002f, 0.006810f, 0.002174f, 0.001516f, 0.000085f, 0.001268f, -0.003228f, -0.003337f, 0.000340f, 0.007189f, 0.002723f, -0.000793f, 0.001298f, 0.002944f, 0.005753f, 0.000846f, -0.001872f, 0.001062f, -0.001828f, 0.004683f, -0.008463f, -0.005063f, -0.003719f, 0.005425f, 0.004650f, -0.027083f, 0.027424f, 0.011161f, -0.000644f, -0.002760f, 0.002329f, 0.004733f, 0.014869f, -0.002790f, 0.001664f, -0.004722f, -0.003403f, 0.008402f, 0.004341f, 0.009751f, 0.004304f, 0.005642f, -0.018492f, -0.007646f, 0.031094f, 0.003176f, 0.009259f, 0.013085f, 0.004926f, -0.010501f, -0.019510f, 0.006112f, -0.008127f, 0.000765f, 0.006894f, -0.009693f, -0.011412f, + 0.013962f, 0.016375f, -0.008489f, -0.006032f, 0.012696f, -0.015543f, 0.006846f, -0.011958f, 0.005423f, -0.011573f, 0.016858f, 0.002365f, -0.002200f, 0.005940f, 0.028942f, 0.007994f, 0.011228f, -0.003247f, 0.001498f, 0.004945f, 0.021379f, -0.001835f, 0.030628f, 0.000924f, 0.014565f, -0.000515f, 0.027649f, 0.009792f, 0.020640f, 0.015658f, -0.003457f, -0.009233f, -0.002474f, -0.010550f, -0.011635f, 0.016206f, -0.003256f, -0.006322f, 0.002527f, 0.000243f, -0.008272f, -0.004030f, 0.002535f, 0.007255f, 0.002016f, -0.013854f, -0.013724f, -0.007132f, -0.014012f, -0.000365f, -0.000290f, -0.004119f, 0.003889f, -0.000276f, 0.005704f, -0.000836f, -0.005713f, 0.001182f, -0.002411f, -0.010562f, -0.006659f, 0.001511f, 0.014133f, -0.005955f, 0.005235f, -0.001596f, -0.000149f, 0.006551f, -0.004911f, 0.002227f, 0.003213f, -0.003589f, -0.002446f, -0.001765f, -0.004041f, 0.001992f, -0.005054f, -0.006596f, -0.002512f, -0.007147f, 0.008964f, -0.002517f, 0.000550f, -0.000771f, -0.000530f, 0.000948f, -0.002964f, 0.001323f, 0.002272f, 0.001164f, 0.003657f, 0.004848f, 0.000864f, 0.003613f, -0.002696f, -0.007733f, + 0.001548f, -0.002143f, 0.003247f, -0.003164f, 0.031777f, -0.008347f, -0.000283f, -0.039172f, -0.001399f, 0.020928f, -0.010967f, 0.018184f, -0.024924f, 0.003611f, 0.002492f, -0.000729f, -0.033050f, -0.001498f, -0.055063f, 0.002588f, -0.006087f, -0.023066f, -0.004039f, 0.003079f, -0.012100f, 0.002084f, 0.013895f, 0.002128f, -0.012625f, 0.002328f, -0.003927f, 0.012195f, -0.013576f, 0.000775f, 0.017625f, 0.003964f, 0.001432f, -0.002648f, 0.013498f, -0.008724f, 0.001387f, -0.000069f, 0.010350f, 0.001993f, -0.018614f, -0.009910f, -0.013141f, 0.015347f, -0.034838f, 0.016829f, 0.013811f, 0.011884f, 0.006605f, 0.002581f, -0.015274f, 0.010842f, -0.022602f, -0.005356f, -0.004785f, -0.004691f, -0.001043f, 0.001418f, 0.007199f, -0.017361f, -0.006862f, 0.029260f, 0.012218f, -0.010681f, -0.012456f, 0.003177f, -0.005205f, 0.008917f, -0.006002f, -0.001810f, -0.009525f, 0.026536f, 0.013466f, -0.009112f, 0.001609f, -0.013519f, 0.003081f, -0.010206f, -0.003582f, 0.010538f, 0.009776f, -0.003066f, 0.019312f, -0.007609f, 0.009551f, -0.012689f, 0.013465f, 0.001977f, -0.007928f, -0.010684f, -0.015966f, 0.004035f, + -0.001812f, 0.007250f, -0.002101f, -0.004699f, 0.002853f, 0.002974f, 0.004745f, 0.003884f, 0.008810f, -0.000336f, 0.002785f, -0.006854f, 0.005469f, -0.004920f, -0.002550f, -0.003690f, -0.000805f, -0.008725f, -0.001578f, 0.003415f, 0.007807f, -0.007498f, -0.003704f, -0.005417f, 0.005329f, 0.004172f, -0.003550f, -0.000676f, -0.005917f, 0.004494f, 0.020169f, 0.020379f, 0.011832f, 0.010566f, -0.009906f, 0.011753f, 0.019591f, -0.014551f, -0.000519f, -0.037766f, 0.021641f, 0.014768f, -0.005379f, 0.008750f, -0.002428f, 0.003020f, 0.013475f, -0.008456f, 0.021077f, -0.019003f, 0.001836f, 0.023732f, 0.010397f, 0.001461f, 0.018320f, -0.006478f, 0.008419f, 0.004830f, 0.009818f, 0.016216f, -0.009576f, -0.001941f, 0.029912f, 0.014954f, -0.000649f, 0.004130f, -0.020257f, 0.027524f, -0.023166f, -0.001459f, 0.024107f, 0.007482f, 0.025954f, -0.016284f, 0.004168f, -0.001053f, -0.006343f, 0.003482f, -0.025058f, -0.017582f, 0.023632f, -0.011767f, -0.005054f, -0.007991f, -0.026648f, 0.018929f, -0.006277f, -0.004416f, -0.011803f, 0.011644f, 0.027092f, -0.021354f, -0.004340f, 0.018260f, -0.020051f, -0.008752f, + 0.016324f, 0.022763f, -0.037624f, -0.010040f, -0.003222f, 0.016056f, -0.000563f, 0.018751f, -0.004548f, -0.013744f, 0.000920f, 0.009979f, 0.024307f, 0.012251f, -0.016325f, -0.000855f, 0.011963f, -0.024229f, -0.014824f, -0.004643f, -0.012400f, -0.012620f, -0.001476f, 0.011490f, -0.010865f, 0.002685f, 0.011990f, 0.003323f, 0.002157f, 0.008372f, -0.002063f, 0.005387f, 0.005218f, 0.005098f, 0.002946f, -0.000965f, -0.007284f, -0.002497f, -0.002018f, -0.006659f, -0.002992f, 0.001020f, 0.000870f, -0.001010f, 0.001056f, 0.007320f, -0.006032f, -0.001975f, -0.004476f, 0.003498f, 0.003461f, -0.001459f, -0.004993f, -0.011106f, 0.005608f, 0.004201f, 0.007225f, 0.001947f, 0.001779f, -0.000811f, -0.006867f, 0.002749f, -0.002748f, -0.003183f, -0.001984f, 0.019694f, 0.041734f, 0.008068f, -0.024668f, -0.008792f, 0.008195f, -0.054739f, 0.001730f, 0.000335f, -0.008568f, -0.002686f, 0.025290f, -0.041313f, 0.009090f, 0.019314f, -0.015190f, 0.017117f, 0.031934f, 0.007917f, -0.029501f, 0.007988f, -0.007425f, -0.000535f, -0.028917f, -0.008736f, 0.026388f, -0.002964f, 0.024197f, -0.006368f, -0.008472f, 0.003959f, + -0.020464f, -0.011510f, -0.014729f, -0.010930f, -0.008045f, 0.019739f, -0.021801f, 0.003545f, 0.038112f, 0.025724f, 0.008602f, -0.038735f, 0.006448f, 0.025414f, 0.010646f, 0.001511f, -0.013804f, -0.016820f, -0.041341f, -0.028568f, 0.005919f, -0.014138f, -0.014124f, -0.000816f, 0.017681f, 0.012513f, -0.012419f, 0.000542f, 0.025152f, -0.009679f, -0.004240f, 0.001141f, 0.033064f, 0.001256f, -0.001645f, 0.016807f, 0.005282f, -0.037613f, 0.010569f, 0.010894f, -0.000164f, -0.031150f, 0.013167f, 0.018245f, -0.013669f, -0.009767f, -0.025518f, 0.006799f, -0.009350f, 0.009668f, 0.004887f, -0.006018f, -0.010797f, 0.007049f, 0.003269f, 0.010885f, -0.005381f, 0.016978f, 0.006046f, -0.011655f, 0.001446f, -0.000608f, -0.015953f, 0.000297f, 0.001348f, -0.000059f, -0.000273f, -0.008439f, -0.007241f, -0.003402f, -0.000141f, 0.010642f, 0.003598f, 0.005563f, 0.008690f, -0.003944f, -0.005042f, 0.004088f, -0.008254f, -0.007470f, -0.000232f, -0.000420f, 0.002683f, -0.002474f, 0.001975f, 0.005235f, 0.005673f, 0.000690f, -0.003208f, -0.000800f, -0.000332f, -0.000944f, 0.000172f, -0.001389f, 0.000780f, -0.000192f, + 0.007373f, -0.004169f, -0.005082f, 0.013215f, 0.009595f, -0.001276f, 0.003813f, -0.012280f, 0.043152f, 0.002402f, -0.008664f, -0.000560f, 0.019095f, -0.009153f, 0.005292f, -0.004600f, 0.004542f, 0.016383f, -0.029757f, 0.031518f, 0.035694f, 0.010077f, 0.015134f, -0.012036f, 0.020265f, 0.046992f, 0.001578f, -0.005327f, -0.008590f, 0.020036f, -0.007021f, -0.011306f, -0.003897f, 0.007142f, -0.023313f, 0.010461f, -0.020524f, 0.023617f, 0.005431f, 0.023783f, -0.014810f, 0.021684f, 0.006520f, 0.028365f, 0.004772f, 0.006023f, -0.010046f, 0.017690f, 0.004504f, -0.005525f, 0.025516f, -0.009840f, -0.018025f, 0.036036f, 0.028781f, 0.010670f, 0.027210f, 0.039425f, 0.047788f, -0.014761f, -0.014858f, -0.016758f, 0.006061f, -0.021832f, 0.025942f, -0.003122f, -0.002261f, -0.036598f, 0.008620f, 0.041691f, 0.042484f, -0.001561f, -0.005450f, -0.029008f, 0.000561f, 0.027704f, -0.014000f, -0.017151f, 0.015734f, 0.002537f, -0.014959f, 0.005432f, -0.002338f, -0.009115f, -0.001968f, -0.007805f, -0.000207f, 0.016113f, 0.012033f, -0.003176f, 0.002981f, -0.003788f, -0.015895f, -0.020779f, -0.003773f, 0.010487f, + 0.004329f, 0.014805f, -0.002845f, -0.013780f, -0.003673f, 0.015349f, -0.007049f, 0.008773f, 0.014178f, -0.014051f, -0.003638f, -0.001289f, 0.003722f, -0.000676f, 0.009512f, 0.006962f, 0.003524f, -0.014006f, 0.003704f, 0.007803f, 0.002479f, 0.003258f, 0.005231f, -0.012420f, -0.005704f, 0.000093f, -0.000501f, -0.006552f, -0.016092f, -0.005182f, 0.001578f, 0.008495f, 0.002004f, -0.006575f, -0.007600f, -0.056588f, -0.039578f, 0.020610f, 0.007924f, -0.029731f, 0.002927f, 0.012948f, -0.027114f, -0.017119f, -0.011767f, 0.032031f, 0.014293f, 0.010143f, -0.010359f, -0.008005f, -0.008259f, -0.020188f, -0.026861f, -0.047239f, 0.024409f, 0.020863f, -0.010110f, 0.053030f, 0.025435f, 0.050913f, 0.034932f, 0.003123f, -0.016458f, 0.013389f, 0.006172f, 0.023081f, 0.026583f, 0.029342f, -0.004333f, -0.005326f, 0.012475f, -0.013469f, -0.003175f, -0.011889f, -0.022132f, -0.036380f, -0.010647f, 0.036759f, -0.009223f, -0.014878f, -0.020966f, 0.014537f, 0.022269f, 0.014726f, 0.001397f, 0.021601f, 0.042323f, -0.025434f, -0.011603f, -0.019612f, -0.014186f, -0.040996f, -0.010053f, 0.010179f, -0.018648f, -0.014694f, + -0.047100f, -0.067142f, 0.007288f, -0.044291f, -0.069510f, -0.050411f, -0.021194f, 0.044807f, 0.015495f, 0.027282f, 0.020528f, -0.046460f, -0.019594f, 0.003842f, 0.023171f, -0.023166f, -0.027326f, -0.026536f, -0.008252f, 0.013611f, -0.015727f, -0.057873f, -0.036364f, -0.008475f, -0.011735f, -0.004328f, -0.008602f, 0.032410f, 0.029704f, 0.030647f, 0.031402f, 0.010281f, -0.000300f, 0.011636f, 0.003267f, -0.001170f, 0.009263f, -0.026183f, -0.010075f, 0.011109f, 0.015201f, -0.000884f, -0.008492f, -0.009585f, 0.003802f, -0.014343f, -0.020601f, 0.018730f, -0.015352f, -0.007959f, 0.001690f, -0.018090f, -0.016900f, -0.030731f, -0.011932f, -0.007368f, 0.002164f, 0.025319f, -0.006567f, -0.003977f, -0.008093f, 0.012816f, -0.006869f, 0.000507f, 0.012427f, 0.000808f, -0.008778f, 0.005514f, 0.012399f, -0.007811f, -0.001858f, -0.000595f, 0.006565f, -0.107417f, -0.016865f, 0.034514f, -0.036571f, 0.015001f, -0.014255f, -0.058281f, -0.018163f, 0.062385f, 0.078574f, -0.041737f, 0.001449f, -0.014390f, -0.064129f, -0.051080f, -0.048266f, -0.051516f, -0.027549f, -0.033652f, -0.002797f, 0.010977f, -0.008988f, 0.013101f, + 0.012079f, -0.021115f, -0.005804f, -0.028965f, 0.012110f, -0.045586f, -0.041071f, 0.009795f, 0.007030f, -0.012464f, -0.015095f, 0.035668f, -0.010581f, 0.049550f, 0.010905f, 0.045923f, -0.031204f, 0.019958f, 0.012921f, 0.055634f, 0.029686f, 0.019454f, 0.005234f, 0.008350f, -0.006700f, 0.016283f, 0.022844f, -0.018107f, -0.025251f, 0.038899f, -0.005513f, -0.049030f, -0.094008f, -0.113024f, -0.081549f, 0.013384f, -0.000281f, -0.105270f, 0.034009f, 0.017756f, 0.026165f, -0.036008f, 0.004385f, 0.012207f, 0.004512f, 0.053773f, 0.054794f, 0.109694f, 0.036314f, -0.058773f, -0.075421f, -0.046427f, -0.041759f, -0.048290f, -0.043003f, -0.001702f, 0.023221f, 0.031323f, -0.020535f, 0.041299f, -0.035849f, -0.049934f, -0.038917f, -0.025928f, -0.019587f, -0.039085f, 0.024074f, -0.002952f, 0.023011f, 0.017611f, 0.002408f, 0.040522f, -0.021696f, -0.009626f, -0.040912f, 0.013376f, 0.021311f, -0.003700f, -0.004003f, 0.011965f, -0.039321f, 0.001109f, -0.014248f, 0.007116f, -0.019165f, -0.027096f, 0.015812f, -0.001122f, -0.011542f, -0.004600f, 0.018649f, -0.015365f, 0.009432f, -0.014333f, 0.010797f, 0.009386f, + -0.005954f, -0.014240f, 0.008289f, 0.009180f, -0.029171f, 0.011567f, -0.007789f, -0.008860f, -0.009308f, 0.005766f, -0.019116f, -0.008752f, 0.060267f, -0.016122f, -0.113780f, -0.032538f, 0.093754f, -0.012992f, 0.020958f, 0.013338f, 0.017564f, 0.032800f, 0.026949f, 0.009355f, -0.018487f, -0.006924f, 0.004745f, -0.020294f, -0.004618f, 0.034386f, -0.030708f, -0.018388f, -0.030776f, -0.007443f, 0.005438f, 0.003916f, 0.008313f, 0.016050f, -0.023357f, 0.020893f, 0.051453f, -0.000973f, -0.029791f, 0.002689f, -0.019432f, -0.006801f, 0.030602f, -0.032150f, 0.003809f, 0.010104f, 0.037400f, 0.053860f, -0.034087f, -0.019601f, 0.021078f, 0.002839f, 0.006097f, 0.006219f, -0.022526f, -0.058116f, -0.010164f, -0.027069f, 0.053068f, -0.100385f, -0.065756f, -0.027194f, -0.010708f, 0.028964f, 0.006308f, -0.035457f, -0.005733f, -0.040846f, -0.043846f, -0.015813f, -0.031634f, 0.005784f, 0.026411f, 0.120618f, 0.022609f, -0.017965f, -0.077373f, -0.063852f, 0.019185f, -0.001994f, -0.072608f, 0.039294f, 0.039382f, -0.074161f, -0.001125f, 0.019236f, 0.021672f, 0.079880f, 0.035380f, 0.016647f, -0.078718f, -0.040789f, + -0.054226f, 0.049553f, -0.004711f, -0.016324f, -0.008535f, 0.015413f, 0.052630f, 0.044350f, -0.023092f, -0.046950f, -0.068180f, 0.016535f, 0.040841f, -0.014384f, -0.006690f, 0.035593f, 0.020741f, 0.031005f, 0.008223f, 0.010976f, -0.026024f, -0.007998f, -0.012104f, 0.013329f, 0.014416f, -0.003835f, -0.005727f, -0.004082f, 0.019326f, 0.021094f, -0.030655f, 0.017846f, 0.014077f, 0.025512f, -0.016024f, -0.011612f, 0.016567f, 0.005515f, -0.021983f, -0.002536f, 0.026855f, 0.004801f, -0.019012f, -0.039910f, -0.135071f, 0.019152f, 0.020840f, -0.004591f, -0.002282f, -0.010521f, -0.038959f, 0.015122f, -0.008669f, 0.068710f, -0.071160f, -0.014639f, 0.072411f, -0.003491f, -0.049169f, -0.006182f, 0.042662f, 0.051891f, 0.031826f, -0.009514f, 0.037099f, -0.028334f, 0.025008f, -0.011614f, -0.009810f, -0.024546f, 0.040646f, 0.027594f, -0.026832f, -0.012456f, -0.004086f, 0.041212f, -0.004112f, 0.004196f, -0.026806f, 0.027697f, 0.017904f, -0.030888f, 0.055419f, 0.002267f, -0.050270f, 0.043972f, -0.054597f, -0.028913f, 0.049270f, -0.105896f, -0.067583f, 0.057208f, -0.036735f, 0.042347f, -0.067234f, 0.014693f, + 0.024327f, -0.037079f, 0.001160f, -0.003154f, -0.069389f, -0.016298f, 0.071150f, 0.075110f, -0.085997f, -0.028722f, 0.025919f, -0.069007f, 0.088518f, 0.088643f, 0.012483f, -0.127506f, -0.067043f, 0.135056f, -0.071733f, -0.014519f, 0.109503f, -0.064654f, -0.131627f, -0.029739f, 0.118424f, -0.025797f, -0.086857f, -0.021535f, -0.158364f, -0.007463f, 0.127872f, -0.046925f, -0.128049f, -0.013229f, -0.036120f, -0.017458f, 0.037835f, -0.004781f, -0.001712f, -0.046809f, -0.030682f, -0.015071f, 0.051020f, -0.065248f, 0.003001f, 0.010225f, -0.020564f, 0.002084f, 0.060769f, -0.039216f, -0.049213f, -0.006693f, 0.016988f, 0.038048f, -0.015403f, 0.019052f, 0.028963f, 0.003150f, -0.044446f, -0.023805f, 0.000822f, -0.035466f, -0.017326f, 0.067316f, -0.025653f, -0.066047f, -0.017837f, 0.038230f, 0.015716f, -0.005165f, 0.008365f, -0.059739f, -0.034517f, 0.045188f, 0.067035f, 0.007988f, -0.050007f, -0.024498f, 0.001977f, 0.017633f, 0.033519f, -0.019672f, -0.074646f, -0.070449f, -0.002155f, -0.088781f, -0.026442f, -0.038046f, -0.035765f, -0.027185f, 0.057098f, -0.006796f, -0.018676f, -0.024725f, 0.010933f, -0.031490f, + -0.073933f, 0.056569f, 0.017678f, 0.048810f, 0.015167f, 0.050503f, -0.020544f, -0.031940f, 0.011033f, -0.053737f, 0.041137f, -0.048703f, -0.010482f, 0.031399f, -0.036901f, -0.008140f, -0.022517f, -0.058847f, 0.008535f, -0.044520f, -0.032125f, -0.038885f, -0.028815f, -0.017968f, -0.039475f, 0.006564f, 0.043175f, -0.029737f, -0.010753f, 0.005043f, 0.039761f, -0.018559f, 0.013899f, -0.041365f, 0.066404f, 0.020577f, 0.028307f, 0.017997f, 0.063672f, -0.004020f, -0.075480f, 0.016336f, 0.026999f, -0.021133f, -0.000550f, 0.039352f, -0.052605f, -0.052079f, -0.061006f, 0.052210f, 0.015217f, -0.074847f, 0.028769f, -0.049455f, -0.009955f, -0.069838f, 0.030499f, 0.049333f, 0.009909f, -0.077323f, 0.042994f, 0.035678f, -0.010205f, -0.067961f, 0.017949f, -0.041042f, -0.014386f, -0.003045f, -0.021097f, 0.033523f, -0.030718f, -0.055100f, 0.026927f, -0.012348f, 0.022704f, -0.000361f, -0.002477f, -0.000408f, -0.015371f, -0.017175f, 0.011191f, 0.049093f, -0.006432f, -0.069414f, -0.019659f, 0.028863f, -0.034766f, -0.014627f, 0.032833f, -0.012560f, -0.005275f, -0.027745f, 0.053926f, 0.031980f, -0.016556f, 0.024493f, + -0.004868f, 0.011024f, 0.043628f, -0.007971f, -0.039205f, 0.016205f, 0.024665f, -0.019902f, 0.031270f, -0.005087f, 0.019076f, 0.002338f, -0.014955f, 0.026644f, 0.038086f, -0.022048f, -0.041290f, 0.016042f, 0.024445f, -0.019964f, -0.004658f, 0.023360f, 0.007443f, 0.065779f, 0.123501f, -0.029616f, 0.061282f, 0.012000f, -0.029085f, -0.055073f, -0.032081f, 0.071884f, -0.023458f, 0.013430f, 0.027930f, -0.007156f, 0.066242f, -0.009636f, 0.051998f, 0.054383f, -0.066561f, 0.034442f, -0.017385f, 0.001726f, 0.024499f, 0.020389f, -0.002211f, 0.010940f, 0.019839f, 0.066569f, 0.068388f, 0.052838f, -0.038530f, -0.013037f, -0.090775f, -0.002611f, 0.021508f, 0.041128f, 0.009510f, -0.075015f, 0.032976f, -0.044968f, 0.058360f, -0.052519f, -0.036784f, 0.003953f, -0.044026f, -0.007408f, -0.025400f, 0.089915f, -0.049012f, -0.023857f, -0.094031f, -0.030440f, -0.049349f, 0.132998f, 0.080793f, -0.027822f, -0.089451f, -0.095774f, -0.056984f, 0.066257f, 0.086259f, 0.043901f, 0.012746f, -0.114947f, -0.053431f, 0.038033f, 0.032341f, 0.005203f, 0.041675f, -0.023691f, -0.075771f, 0.036077f, -0.128565f, 0.140064f, + -0.013062f, -0.090196f, 0.210386f, 0.030390f, 0.073221f, 0.126306f, -0.208832f, -0.150244f, 0.041691f, -0.012176f, 0.031937f, 0.045966f, -0.130557f, -0.009435f, 0.026356f, 0.002863f, 0.109377f, 0.008002f, -0.057276f, -0.005738f, 0.058787f, -0.033876f, 0.025679f, 0.030465f, 0.001191f, -0.023668f, 0.028743f, -0.075763f, 0.058011f, -0.014576f, -0.024231f, 0.033013f, 0.008699f, 0.002594f, 0.034347f, -0.007857f, 0.020558f, -0.003946f, 0.013178f, -0.009658f, -0.039973f, 0.024504f, 0.016834f, 0.023188f, -0.000283f, 0.000952f, 0.015647f, 0.009010f, 0.006034f, 0.046758f, 0.051569f, 0.003241f, 0.033766f, -0.031543f, 0.004730f, -0.020620f, 0.039049f, 0.035979f, 0.005436f, -0.010048f, -0.023594f, -0.054880f, 0.004525f, -0.054683f, 0.037013f, -0.077255f, 0.047830f, -0.031786f, 0.078486f, -0.035384f, -0.003646f, 0.044726f, 0.007954f, 0.003943f, -0.020230f, -0.017494f, 0.002043f, -0.030029f, 0.033116f, -0.003828f, 0.035165f, -0.027537f, -0.027186f, 0.009293f, 0.001384f, -0.027913f, 0.017617f, -0.003478f, 0.015374f, -0.008533f, -0.007562f, 0.014749f, -0.014029f, -0.001085f, 0.010951f, -0.005638f, + -0.006700f, 0.055751f, -0.003833f, -0.018578f, -0.009981f, 0.026516f, -0.002424f, -0.030256f, 0.016093f, 0.032666f, 0.006577f, 0.000865f, -0.019297f, 0.006936f, -0.015631f, 0.015031f, 0.039582f, -0.013961f, 0.018092f, -0.014828f, -0.004463f, -0.016249f, -0.007748f, 0.010550f, 0.012791f, -0.023027f, 0.013928f, 0.004254f, -0.002959f, -0.023017f, 0.003951f, 0.008532f, -0.017167f, 0.024989f, 0.020838f, -0.041667f, 0.010654f, -0.038231f, -0.043630f, 0.030125f, -0.015551f, 0.036361f, 0.019701f, 0.001241f, 0.018529f, -0.005642f, -0.022525f, -0.005227f, 0.001322f, 0.025395f, -0.011412f, 0.007891f, 0.010371f, -0.014346f, -0.002669f, 0.008930f, -0.004412f, -0.002635f, 0.014578f, 0.000001f, 0.005571f, -0.011867f, 0.004997f, -0.001060f, -0.012449f, 0.023694f, 0.002037f, 0.019378f, -0.009413f, 0.015950f, -0.007929f, 0.001298f, -0.012411f, 0.010733f, -0.006047f, 0.023482f, -0.007289f, 0.022221f, -0.022675f, 0.005220f, 0.001453f, -0.004548f, 0.000747f, 0.002981f, 0.017475f, -0.000553f, -0.020633f, 0.013842f, -0.011647f, 0.002424f, 0.012449f, -0.012528f, 0.021791f, -0.045377f, 0.096115f, 0.018204f, + 0.023680f, -0.012130f, 0.008873f, -0.002717f, 0.018285f, 0.005814f, 0.041020f, 0.002888f, -0.022110f, 0.013550f, -0.014393f, 0.006382f, 0.008480f, -0.018712f, 0.001095f, 0.004606f, -0.020202f, 0.018585f, 0.004853f, -0.008260f, 0.025000f, -0.008826f, 0.009944f, -0.007541f, 0.004744f, 0.004823f, 0.002383f, -0.003054f, -0.007254f, -0.003323f, 0.003594f, 0.000693f, -0.004039f, -0.012031f, 0.009151f, -0.008054f, 0.004623f, 0.008032f, -0.008171f, 0.001840f, -0.007623f, 0.002302f, -0.012159f, -0.019817f, 0.020667f, -0.010954f, -0.005207f, 0.008805f, 0.004130f, -0.003424f, 0.002457f, 0.017752f, -0.019357f, 0.008516f, -0.007221f, 0.015392f, -0.016249f, 0.009405f, 0.004709f, -0.002796f, 0.003703f, 0.000479f, 0.000342f, 0.007583f, -0.010232f, 0.005926f, 0.005252f, -0.002711f, -0.000893f, 0.013472f, -0.001938f, 0.004654f, -0.015400f, 0.021033f, -0.016112f, -0.000149f, 0.010595f, -0.009348f, 0.007271f, 0.002440f, 0.002648f, -0.009778f, 0.008099f, 0.008399f, -0.005089f, 0.003387f, 0.004246f, -0.006937f, 0.002600f, 0.003566f, -0.001401f, 0.007389f, 0.000446f, -0.000059f, -0.000661f, 0.006644f, + 0.005164f, -0.004044f, 0.005806f, -0.002818f, 0.002669f, 0.002984f, -0.000591f, 0.008239f, -0.003544f, 0.000168f, 0.005311f, -0.006319f, 0.000635f, -0.000543f, -0.004426f, 0.000754f, 0.004766f, -0.001265f, -0.003701f, 0.008209f, -0.005056f, 0.018169f, -0.085318f, -0.211811f, 0.045761f, 0.176141f, 0.119073f, 0.248437f, -0.081247f, -0.069457f, -0.142926f, -0.228440f, -0.022571f, 0.071204f, 0.093868f, 0.122498f, 0.061767f, 0.006775f, -0.020017f, -0.052964f, -0.075531f, -0.011445f, -0.020168f, 0.007439f, 0.017351f, -0.000900f, 0.004369f, 0.009133f, 0.004065f, 0.029915f, 0.035536f, 0.022075f, -0.004060f, 0.004102f, -0.026273f, -0.055161f, -0.058765f, -0.028828f, -0.038538f, 0.031746f, 0.058540f, 0.062108f, 0.068212f, 0.037367f, -0.011010f, -0.026939f, -0.050102f, -0.052960f, -0.036773f, -0.020714f, -0.002359f, 0.013359f, 0.025737f, 0.027591f, 0.023245f, 0.019992f, -0.003408f, 0.005362f, -0.005889f, 0.002636f, -0.004417f, -0.002755f, -0.001560f, -0.018794f, -0.019643f, -0.014273f, -0.029623f, 0.000018f, -0.005548f, 0.003715f, 0.050488f, 0.066438f, 0.022479f, 0.022499f, -0.018185f, -0.036552f, + -0.025203f, -0.044009f, -0.035276f, 0.012426f, -0.002980f, -0.021349f, 0.016447f, 0.017530f, 0.020996f, 0.049718f, 0.020764f, 0.021793f, 0.005496f, -0.026815f, -0.026330f, -0.021640f, -0.023510f, -0.029890f, -0.025420f, -0.015222f, 0.004779f, 0.033189f, 0.050156f, 0.046853f, 0.019099f, 0.009437f, -0.012120f, -0.022738f, -0.020321f, -0.022538f, -0.025886f, -0.011924f, -0.010716f, -0.000929f, 0.008875f, 0.006694f, 0.020308f, 0.026764f, 0.019505f, 0.013177f, 0.004775f, -0.001739f, -0.012576f, -0.013179f, -0.020352f, -0.023095f, -0.017985f, -0.016211f, -0.003951f, 0.017159f, 0.025872f, 0.027664f, 0.024779f, 0.009978f, 0.004716f, -0.012431f, -0.019465f, -0.010533f, -0.014339f, -0.019795f, -0.014752f, 0.002645f, 0.013588f, 0.012514f, 0.007260f, 0.007931f, 0.007420f, 0.005456f, 0.001834f, -0.001491f, -0.001901f, -0.005353f, -0.006562f, -0.006374f, -0.007128f, -0.008736f, -0.004519f, 0.003454f, 0.006645f, 0.007334f, 0.004841f, 0.002075f, 0.000634f, 0.000526f, 0.000558f}, + {-0.011968f, 0.001523f, 0.003811f, 0.003691f, 0.018853f, 0.005127f, 0.003987f, -0.005577f, 0.000728f, -0.009551f, 0.002249f, 0.008786f, -0.004447f, 0.000426f, -0.001847f, -0.004698f, -0.007569f, 0.005856f, -0.012665f, -0.006388f, -0.006354f, 0.006879f, 0.007534f, 0.003974f, 0.001807f, 0.005459f, 0.004508f, 0.009012f, -0.003123f, 0.003160f, 0.005607f, 0.001197f, 0.001851f, -0.006559f, -0.002824f, -0.002738f, -0.002466f, 0.006096f, -0.011650f, 0.001958f, -0.004033f, 0.012224f, 0.000298f, -0.002190f, -0.003058f, -0.005026f, -0.001671f, -0.005246f, -0.015367f, -0.004856f, -0.003004f, -0.002473f, -0.003442f, 0.001600f, -0.002875f, -0.000713f, -0.000985f, 0.005394f, 0.002413f, -0.000685f, 0.003444f, -0.003000f, 0.006605f, -0.004313f, -0.007151f, 0.006925f, 0.007253f, -0.003120f, -0.006868f, 0.000672f, 0.003771f, 0.002854f, 0.003278f, -0.003242f, 0.000045f, 0.002670f, 0.003590f, 0.001578f, -0.000981f, 0.000451f, 0.004461f, 0.008599f, 0.004162f, -0.001048f, -0.000099f, -0.002023f, -0.002148f, 0.001807f, -0.002830f, 0.001756f, 0.002124f, -0.000820f, -0.000276f, 0.000950f, 0.000828f, -0.000851f, + 0.000719f, 0.000503f, -0.003940f, 0.000638f, 0.000311f, 0.001236f, 0.000705f, -0.001496f, 0.001429f, 0.001140f, -0.000099f, 0.017054f, -0.003188f, -0.001630f, 0.001833f, 0.004707f, -0.012563f, 0.007827f, -0.014912f, -0.000671f, -0.007217f, -0.001060f, -0.004769f, -0.001125f, -0.001159f, 0.007498f, -0.006315f, 0.008121f, -0.008461f, -0.009245f, 0.003923f, 0.012411f, -0.014624f, -0.004061f, -0.007071f, 0.000105f, -0.003676f, 0.003957f, 0.005252f, 0.002655f, 0.005350f, -0.008499f, 0.000315f, 0.011934f, 0.004693f, 0.001522f, -0.008656f, -0.012371f, -0.007440f, 0.001901f, -0.006324f, -0.003572f, 0.002424f, 0.008038f, -0.007236f, -0.007132f, 0.002898f, -0.005214f, 0.009235f, 0.003094f, -0.000943f, 0.006510f, 0.006187f, -0.000005f, 0.010379f, 0.005134f, 0.003255f, 0.002751f, 0.006807f, 0.010708f, -0.007043f, 0.002049f, 0.002949f, -0.007525f, 0.000677f, 0.006117f, -0.002372f, 0.015464f, -0.004768f, -0.004101f, -0.003212f, 0.005704f, 0.007875f, -0.010026f, -0.004078f, 0.002732f, -0.001813f, 0.002464f, 0.000976f, -0.004393f, 0.001968f, 0.000940f, -0.003230f, -0.005314f, 0.002197f, 0.001492f, + 0.004882f, 0.000411f, 0.001511f, 0.002239f, -0.000212f, -0.001595f, 0.003580f, 0.000214f, -0.000009f, 0.003080f, -0.001665f, 0.001492f, 0.004114f, -0.000346f, -0.000883f, 0.000778f, -0.000609f, 0.001269f, -0.002512f, -0.000789f, -0.001167f, 0.000167f, -0.000378f, 0.001608f, 0.000175f, -0.001574f, 0.000075f, -0.021921f, -0.003564f, -0.004901f, -0.003921f, -0.001980f, -0.002698f, 0.011634f, 0.013912f, -0.003201f, 0.011349f, 0.004316f, -0.006300f, 0.002942f, -0.009539f, 0.001659f, 0.001999f, -0.012823f, -0.001911f, 0.001967f, 0.002221f, 0.008832f, -0.001721f, 0.007668f, -0.005171f, -0.009843f, -0.010384f, -0.002991f, -0.005262f, -0.007889f, 0.008125f, -0.003217f, -0.001590f, -0.001451f, 0.001685f, 0.004405f, -0.012576f, 0.000022f, 0.001737f, -0.005981f, 0.014953f, 0.001144f, -0.003707f, -0.003273f, 0.015967f, -0.001171f, 0.002015f, 0.009425f, 0.000266f, 0.005749f, 0.002235f, 0.000505f, 0.008805f, -0.000080f, -0.006185f, 0.007887f, 0.004233f, 0.005056f, 0.007162f, 0.002342f, -0.005840f, 0.004119f, 0.005875f, 0.005687f, 0.008821f, 0.000022f, -0.008194f, -0.006572f, 0.010347f, 0.014388f, + -0.013173f, 0.002612f, -0.003495f, -0.002352f, 0.003009f, 0.005474f, 0.005273f, -0.004242f, -0.001705f, -0.004101f, -0.006800f, -0.005968f, -0.002192f, -0.003807f, -0.005846f, 0.001296f, -0.001604f, 0.002179f, 0.001873f, -0.001848f, 0.001036f, 0.000321f, -0.004752f, 0.001563f, -0.003217f, -0.005795f, 0.000374f, -0.001736f, -0.002432f, -0.002625f, -0.000748f, 0.001002f, -0.000889f, 0.001620f, -0.001119f, -0.001985f, -0.002682f, -0.002509f, -0.001074f, 0.000399f, 0.001891f, -0.016105f, 0.017208f, 0.015944f, 0.012024f, -0.008353f, 0.009404f, 0.016966f, -0.004243f, 0.013264f, 0.005003f, 0.002012f, -0.002044f, 0.014623f, 0.006919f, -0.003394f, -0.010454f, 0.006098f, -0.004322f, -0.005574f, 0.005932f, 0.007012f, 0.003081f, -0.010369f, 0.001703f, 0.009361f, -0.004538f, 0.003193f, -0.020433f, 0.002974f, -0.001631f, 0.009881f, 0.002424f, -0.004213f, -0.006152f, 0.012638f, -0.010841f, 0.000910f, -0.008754f, 0.001056f, -0.002673f, 0.007075f, -0.001457f, -0.002264f, -0.010731f, -0.002544f, -0.001884f, 0.013371f, 0.000675f, -0.012167f, -0.000442f, -0.000640f, 0.004180f, 0.006413f, -0.005421f, 0.000059f, + -0.006920f, 0.007430f, -0.001615f, 0.008973f, -0.004816f, 0.013342f, 0.006614f, -0.014647f, 0.015566f, -0.002206f, -0.010746f, 0.001868f, 0.014223f, 0.002927f, 0.002192f, -0.011461f, -0.000748f, -0.004417f, -0.006214f, -0.005985f, 0.000549f, 0.005462f, 0.007002f, 0.003845f, 0.003827f, -0.004448f, 0.003378f, -0.003849f, -0.000444f, -0.000167f, -0.001797f, -0.000706f, 0.004046f, -0.006352f, 0.001741f, -0.000582f, 0.000560f, 0.002192f, 0.001746f, -0.000129f, 0.002779f, 0.000348f, -0.004211f, -0.004514f, 0.002676f, 0.001278f, -0.000185f, -0.002965f, -0.000597f, 0.000771f, -0.000409f, -0.001270f, -0.002937f, 0.001896f, -0.000053f, -0.001782f, 0.002032f, -0.001171f, -0.000808f, -0.002296f, -0.001445f, -0.000837f, -0.002971f, 0.002133f, 0.018517f, -0.006438f, -0.013489f, -0.000749f, -0.020206f, -0.000072f, -0.017370f, -0.006072f, 0.011858f, -0.012407f, -0.013685f, 0.004035f, 0.001082f, 0.001172f, -0.003245f, -0.004518f, -0.009920f, 0.006631f, -0.019364f, -0.005989f, 0.001908f, 0.011924f, 0.000655f, 0.012099f, 0.004269f, 0.026643f, 0.010174f, -0.000328f, 0.001125f, 0.012665f, -0.003087f, -0.003852f, + -0.002439f, 0.002062f, -0.008464f, -0.004225f, -0.014235f, -0.001037f, -0.006568f, -0.003950f, 0.017420f, 0.000241f, 0.010879f, -0.004422f, 0.004406f, -0.001145f, 0.006469f, -0.002223f, 0.006018f, -0.006043f, -0.007486f, -0.001237f, 0.002048f, -0.007543f, -0.007557f, 0.000623f, 0.003806f, 0.008081f, -0.001224f, -0.003834f, -0.001709f, 0.007667f, 0.013079f, 0.000686f, -0.009001f, -0.012834f, 0.000128f, 0.003478f, 0.001285f, 0.017427f, -0.011003f, -0.000631f, 0.007764f, -0.002927f, -0.009226f, 0.012272f, 0.005581f, 0.002149f, -0.006150f, -0.006612f, -0.010998f, -0.004324f, -0.001231f, -0.005711f, -0.002900f, -0.004952f, 0.000877f, 0.001235f, 0.002677f, 0.000315f, 0.000751f, -0.006138f, -0.003218f, -0.006578f, -0.002334f, -0.001925f, -0.005046f, -0.003204f, 0.001655f, -0.000615f, -0.002169f, -0.000601f, 0.001560f, -0.004131f, 0.001991f, -0.002989f, -0.000400f, -0.001266f, -0.002301f, -0.000820f, -0.000118f, 0.001813f, -0.002953f, -0.004327f, 0.002160f, 0.001122f, 0.016567f, -0.012773f, -0.002622f, 0.001024f, -0.001019f, -0.000508f, -0.010516f, -0.008111f, -0.001160f, 0.006924f, 0.002505f, 0.002757f, + 0.002905f, 0.007277f, -0.001526f, 0.006651f, 0.005401f, -0.017300f, -0.006652f, -0.020298f, 0.005235f, -0.007178f, 0.010175f, -0.006609f, -0.008963f, -0.006605f, 0.005281f, -0.013547f, -0.011240f, 0.015640f, -0.008584f, 0.016961f, -0.004037f, 0.005067f, -0.006005f, -0.011508f, 0.012609f, -0.009770f, -0.010924f, -0.001148f, -0.005947f, -0.012876f, -0.009883f, -0.016222f, 0.000658f, 0.010333f, 0.005974f, -0.006343f, 0.017948f, 0.006522f, -0.006605f, -0.008406f, -0.012997f, 0.000503f, -0.004873f, -0.009154f, -0.004587f, -0.003922f, -0.006404f, 0.003353f, 0.014364f, -0.000938f, 0.000942f, -0.009800f, 0.004571f, 0.004794f, -0.008465f, -0.006793f, 0.003437f, 0.017391f, 0.006962f, -0.004407f, -0.002310f, -0.003745f, -0.017980f, -0.014233f, -0.011935f, 0.012420f, 0.013287f, -0.002008f, -0.006202f, 0.005730f, -0.003957f, 0.005021f, -0.002641f, 0.002336f, 0.000419f, 0.000183f, -0.005826f, 0.003826f, -0.003405f, -0.002530f, -0.000911f, 0.003414f, 0.002627f, -0.000427f, -0.004862f, 0.003013f, -0.000701f, 0.002191f, -0.001642f, -0.001164f, -0.004290f, -0.001959f, -0.000150f, -0.000609f, 0.000841f, 0.000752f, + -0.000539f, 0.000652f, -0.003556f, 0.001523f, 0.000362f, 0.000437f, -0.001279f, 0.004348f, 0.002830f, -0.000269f, -0.001736f, 0.000356f, -0.002699f, 0.004927f, 0.023847f, -0.004498f, -0.000028f, -0.003897f, 0.015529f, 0.014722f, 0.005096f, -0.024500f, -0.004059f, -0.029760f, 0.017649f, 0.007463f, 0.000516f, 0.030766f, 0.014570f, -0.002682f, -0.013751f, 0.012694f, -0.005867f, 0.003167f, 0.004335f, 0.002022f, 0.010108f, -0.008930f, 0.017259f, 0.006580f, 0.001713f, -0.005190f, -0.008725f, 0.011709f, 0.009888f, -0.001871f, 0.006445f, -0.014637f, 0.002793f, -0.019553f, 0.008030f, 0.001132f, 0.010035f, -0.016051f, 0.003383f, -0.005223f, 0.003602f, 0.018324f, 0.015551f, 0.000762f, 0.004535f, -0.011340f, 0.014996f, 0.000455f, 0.031856f, 0.033651f, -0.004410f, -0.008936f, -0.009105f, -0.007246f, -0.019437f, -0.005419f, -0.025400f, 0.001575f, -0.002071f, -0.001382f, -0.005133f, 0.008978f, 0.015109f, 0.023618f, 0.021980f, 0.016918f, -0.027698f, -0.019765f, -0.000806f, 0.001431f, 0.029186f, -0.020470f, 0.015713f, -0.001055f, -0.005814f, -0.002966f, -0.000645f, -0.005728f, -0.016060f, -0.010509f, + -0.002968f, 0.004761f, 0.001587f, -0.000363f, -0.004325f, 0.002587f, -0.005642f, -0.000510f, -0.002963f, 0.006224f, 0.006973f, -0.001621f, -0.001232f, 0.006477f, 0.004984f, 0.000874f, -0.000872f, 0.002408f, 0.000496f, 0.001017f, -0.001174f, 0.002828f, -0.000134f, -0.001570f, -0.002511f, 0.000867f, 0.002843f, 0.004174f, 0.008974f, 0.006974f, -0.003283f, 0.000891f, -0.006233f, -0.001135f, 0.002912f, -0.000459f, -0.001165f, 0.000232f, 0.001379f, -0.008601f, 0.017131f, 0.003697f, -0.012615f, -0.006964f, 0.032154f, 0.031620f, 0.035436f, -0.003454f, -0.001469f, -0.006005f, 0.005985f, 0.017350f, 0.019961f, 0.005813f, -0.008533f, -0.017022f, -0.034643f, 0.010311f, -0.020481f, -0.004472f, -0.002057f, -0.004410f, 0.002379f, -0.001005f, -0.006322f, -0.000735f, -0.020057f, -0.007933f, 0.001255f, -0.003689f, -0.022416f, -0.009445f, 0.001976f, 0.016356f, -0.004559f, 0.000503f, -0.017830f, -0.006001f, 0.000276f, 0.011878f, -0.007196f, 0.007316f, -0.019929f, -0.005535f, 0.004717f, 0.007618f, -0.005410f, 0.026880f, -0.005447f, -0.003372f, -0.013908f, -0.004580f, 0.010885f, 0.003711f, -0.001151f, 0.014037f, + 0.019477f, 0.022661f, -0.003910f, -0.011301f, -0.012766f, 0.000210f, 0.002763f, 0.005336f, -0.009034f, 0.007327f, 0.009721f, 0.008133f, 0.007996f, 0.022657f, 0.015359f, 0.010136f, -0.001125f, 0.005115f, -0.022443f, -0.004202f, 0.002465f, 0.011558f, 0.018342f, -0.003440f, -0.010209f, 0.003235f, 0.006379f, -0.005253f, 0.009449f, 0.007524f, 0.010209f, 0.001585f, 0.004520f, -0.000467f, -0.000703f, -0.007303f, 0.005825f, -0.002273f, 0.003863f, 0.003356f, 0.001166f, 0.005374f, 0.000579f, 0.008642f, 0.006203f, 0.003915f, 0.002545f, 0.002439f, 0.000131f, -0.001106f, 0.000812f, -0.003595f, -0.000143f, -0.004498f, -0.007135f, -0.002880f, 0.001617f, 0.001271f, 0.003270f, -0.001483f, 0.002193f, -0.002981f, 0.001482f, 0.003827f, -0.032790f, 0.040925f, -0.001098f, 0.006065f, 0.022403f, 0.000455f, -0.007790f, 0.001233f, -0.039825f, -0.024202f, -0.011355f, 0.006437f, -0.007808f, 0.004623f, -0.018602f, 0.012979f, -0.006471f, -0.000102f, 0.024645f, -0.023918f, -0.015922f, 0.023096f, -0.007178f, -0.033659f, 0.002428f, -0.020724f, 0.004333f, -0.001652f, 0.012669f, 0.005518f, 0.006402f, 0.002648f, + -0.004043f, 0.015074f, -0.001643f, 0.019345f, 0.011804f, -0.006770f, -0.011533f, -0.010756f, 0.005269f, -0.005244f, 0.005300f, 0.003810f, 0.011363f, 0.003394f, -0.021270f, 0.001342f, 0.007254f, -0.007275f, 0.000922f, -0.014598f, -0.003245f, 0.001382f, 0.000975f, 0.033800f, -0.005875f, 0.024043f, 0.028681f, -0.007799f, 0.015358f, -0.004632f, -0.000834f, -0.015861f, 0.010138f, 0.024473f, 0.017050f, 0.003877f, 0.006704f, 0.015204f, -0.000982f, 0.012617f, -0.005095f, -0.006909f, -0.012166f, 0.006726f, 0.031158f, 0.007060f, -0.004028f, 0.002563f, -0.021909f, -0.007320f, 0.000521f, 0.020713f, 0.015046f, 0.006592f, 0.013359f, -0.003746f, 0.013120f, -0.000051f, 0.008252f, 0.001128f, -0.000644f, -0.001493f, 0.009143f, -0.000890f, -0.005773f, -0.003463f, -0.002300f, -0.001314f, -0.002334f, -0.004519f, 0.006595f, -0.004193f, -0.005733f, -0.001571f, -0.007527f, -0.005078f, -0.006429f, -0.003590f, -0.004497f, -0.005660f, 0.001928f, 0.001436f, 0.002431f, 0.002141f, -0.003429f, -0.001680f, -0.005944f, -0.007635f, -0.000732f, -0.004207f, 0.002488f, -0.001967f, 0.000622f, 0.003872f, 0.003920f, 0.002828f, + 0.006759f, -0.001729f, -0.000650f, 0.005273f, 0.039189f, 0.005705f, 0.009772f, -0.009263f, -0.004698f, 0.026621f, -0.017569f, -0.004050f, -0.034576f, 0.032396f, 0.016915f, 0.002344f, -0.011751f, -0.032621f, 0.003297f, -0.008669f, 0.003991f, -0.036577f, 0.013045f, 0.019345f, -0.021273f, -0.005068f, 0.003173f, 0.002272f, 0.007068f, 0.021001f, 0.025805f, 0.000107f, -0.000065f, 0.004865f, 0.000975f, -0.015620f, -0.017909f, -0.011827f, -0.023598f, -0.011572f, 0.020085f, 0.009392f, -0.007530f, -0.009921f, -0.006602f, -0.041415f, 0.008992f, 0.009998f, -0.019423f, 0.031806f, 0.001122f, 0.023736f, -0.008551f, 0.015414f, -0.005092f, -0.020454f, 0.001831f, 0.018923f, -0.010431f, 0.010413f, 0.012095f, 0.033791f, 0.009321f, 0.010657f, 0.032317f, 0.018517f, 0.012223f, -0.044683f, 0.009237f, 0.006911f, 0.008652f, 0.000978f, -0.018288f, 0.032498f, -0.024123f, 0.018568f, 0.019354f, -0.029116f, -0.006414f, 0.040010f, -0.035613f, 0.006111f, -0.008377f, -0.003775f, -0.012858f, 0.015626f, -0.006709f, -0.013201f, -0.011387f, 0.007032f, 0.015067f, -0.014027f, 0.017503f, -0.014477f, -0.006419f, 0.020048f, + 0.007304f, -0.001564f, -0.008836f, -0.009262f, -0.000306f, -0.003623f, -0.015245f, -0.001660f, -0.003290f, -0.004167f, -0.001439f, 0.012087f, -0.001076f, -0.010972f, 0.000968f, 0.004779f, 0.011390f, 0.007262f, 0.009037f, -0.003554f, 0.004742f, -0.006500f, 0.000263f, -0.002140f, 0.004724f, 0.009638f, -0.007110f, 0.004496f, 0.004440f, -0.000396f, 0.002561f, 0.002081f, -0.021163f, -0.031609f, -0.014283f, -0.013543f, -0.042225f, 0.027736f, 0.003830f, 0.029651f, 0.001122f, 0.003772f, -0.015010f, -0.008065f, 0.014128f, -0.001674f, 0.014630f, -0.015678f, -0.005430f, 0.002176f, -0.007444f, -0.012929f, 0.017561f, -0.019048f, 0.021036f, -0.008104f, 0.006442f, -0.005198f, -0.015287f, -0.013727f, 0.005717f, -0.005306f, -0.000761f, 0.010629f, 0.042704f, 0.002591f, -0.006139f, -0.015127f, 0.005629f, 0.034442f, -0.007024f, -0.006218f, -0.020941f, -0.007530f, 0.002336f, -0.019749f, -0.007621f, -0.027961f, 0.017090f, -0.034117f, -0.061387f, -0.006851f, 0.001376f, 0.028527f, -0.030590f, 0.027375f, 0.017572f, -0.014723f, -0.028909f, -0.004991f, 0.004102f, 0.007835f, 0.000469f, 0.017154f, -0.012317f, -0.004848f, + -0.060571f, -0.008467f, 0.061426f, 0.005623f, -0.010961f, -0.008670f, -0.032673f, 0.023734f, -0.010864f, -0.009565f, -0.008464f, -0.005059f, -0.014442f, -0.021118f, 0.005683f, 0.011512f, -0.001132f, 0.008686f, -0.017978f, -0.032361f, -0.001658f, -0.017239f, -0.005330f, 0.000195f, -0.017162f, 0.003488f, -0.012647f, -0.021820f, -0.016349f, -0.008104f, 0.006432f, 0.009436f, -0.002346f, -0.025741f, -0.006822f, 0.001230f, -0.012969f, -0.005940f, -0.001538f, -0.012002f, -0.007297f, 0.002733f, -0.000984f, -0.009518f, -0.004114f, 0.003813f, 0.001083f, -0.012531f, -0.005294f, -0.000117f, 0.010732f, 0.012031f, 0.002872f, -0.004145f, -0.004989f, -0.001860f, 0.007888f, -0.002200f, -0.001278f, 0.000260f, 0.002692f, -0.010591f, 0.009030f, -0.002493f, 0.005942f, 0.029095f, 0.026020f, -0.007946f, -0.010257f, -0.002260f, -0.041056f, 0.027531f, -0.025865f, -0.021248f, -0.016448f, 0.010548f, 0.004423f, 0.025557f, 0.003322f, -0.013516f, -0.015946f, -0.016432f, 0.013240f, -0.006138f, -0.008761f, 0.023394f, 0.025996f, 0.009077f, -0.017152f, 0.021587f, 0.034507f, -0.012803f, -0.007312f, 0.030008f, 0.007831f, 0.006249f, + -0.019175f, 0.000271f, 0.028419f, -0.041349f, 0.028861f, -0.005934f, 0.004063f, 0.017506f, 0.020923f, 0.000138f, 0.010533f, -0.019308f, -0.015861f, 0.011100f, 0.039620f, 0.010896f, 0.009779f, 0.015266f, -0.019767f, 0.004509f, 0.017662f, 0.010463f, -0.003144f, 0.014432f, 0.008901f, -0.023338f, 0.019358f, -0.022735f, 0.005312f, 0.017203f, -0.018212f, 0.014292f, -0.022256f, -0.008569f, 0.004203f, 0.001156f, 0.014398f, -0.008821f, 0.012359f, -0.009025f, 0.001816f, 0.004922f, -0.004088f, -0.008832f, -0.018011f, 0.048692f, 0.005232f, 0.014845f, -0.021013f, -0.048977f, 0.034863f, -0.033188f, -0.014502f, 0.000144f, -0.007715f, -0.004698f, -0.002896f, -0.013526f, 0.008657f, 0.007302f, 0.003741f, -0.012473f, 0.015843f, 0.012509f, -0.005302f, -0.005107f, 0.004664f, -0.004137f, 0.004384f, -0.004175f, 0.016785f, 0.006501f, 0.001547f, 0.012233f, 0.012545f, -0.006974f, 0.000038f, 0.006339f, 0.008699f, 0.003893f, 0.004136f, -0.007590f, -0.010415f, 0.008672f, 0.010785f, 0.016009f, -0.002230f, -0.013940f, -0.002089f, 0.001697f, 0.006980f, -0.021621f, 0.008212f, -0.006958f, -0.003305f, 0.005500f, + 0.005061f, -0.005040f, 0.007537f, 0.001037f, 0.005963f, -0.003113f, 0.014377f, -0.027069f, 0.028908f, -0.010473f, -0.028344f, -0.036789f, -0.010203f, -0.003630f, 0.021809f, -0.032369f, -0.005106f, -0.003694f, 0.017208f, 0.032404f, 0.026869f, 0.016768f, 0.002674f, -0.008152f, -0.004855f, -0.003196f, 0.022851f, 0.018784f, -0.004259f, 0.003076f, -0.004812f, 0.014743f, -0.035159f, 0.021183f, 0.011753f, 0.016608f, 0.005745f, 0.003921f, 0.030575f, -0.011873f, -0.025744f, 0.000262f, -0.008369f, 0.001892f, -0.035763f, -0.019765f, -0.001951f, 0.030144f, -0.020124f, -0.006295f, 0.005108f, -0.001095f, 0.001045f, 0.029627f, 0.012059f, -0.004462f, 0.002783f, 0.014554f, 0.009720f, 0.034497f, -0.009924f, 0.015819f, 0.017686f, 0.009467f, -0.005374f, 0.005740f, -0.037225f, 0.016112f, -0.006793f, 0.001812f, -0.008380f, -0.020487f, -0.027475f, 0.005742f, -0.012989f, -0.037494f, 0.009249f, -0.031841f, -0.023287f, -0.005418f, -0.047950f, -0.029083f, 0.007443f, 0.020659f, -0.023826f, 0.005298f, 0.002155f, 0.055452f, 0.052742f, 0.049648f, -0.001258f, 0.002888f, -0.025815f, -0.015615f, 0.020928f, -0.011078f, + -0.007084f, 0.003522f, -0.006377f, 0.011723f, -0.013997f, -0.006988f, -0.000266f, 0.004516f, -0.008303f, 0.010760f, 0.010974f, 0.000590f, -0.004308f, 0.003057f, 0.010740f, -0.008381f, -0.010930f, -0.002755f, 0.009699f, -0.012642f, 0.021871f, 0.012527f, -0.000702f, 0.009912f, -0.003151f, -0.008832f, -0.013924f, -0.007595f, -0.012307f, -0.006706f, 0.007707f, 0.001435f, 0.022111f, -0.004934f, -0.006625f, -0.048781f, -0.053973f, 0.032211f, 0.028953f, 0.009754f, 0.031368f, 0.052482f, 0.014979f, -0.019930f, 0.016989f, -0.007905f, -0.014725f, 0.024027f, 0.001798f, -0.021415f, 0.013251f, 0.017307f, 0.004059f, 0.006121f, 0.001390f, 0.002712f, 0.048077f, -0.000988f, 0.010353f, 0.004519f, 0.029864f, 0.001799f, 0.047694f, -0.000182f, -0.020881f, 0.038129f, 0.007864f, -0.016804f, -0.005872f, 0.020205f, -0.004100f, -0.000317f, 0.015863f, -0.028922f, 0.028976f, -0.006071f, -0.042244f, -0.011820f, 0.004234f, -0.042280f, -0.004663f, -0.004389f, 0.018687f, 0.018015f, 0.031912f, -0.022295f, 0.004942f, 0.005093f, 0.006707f, 0.013631f, -0.020184f, -0.022820f, 0.012068f, -0.000538f, 0.024420f, 0.019810f, + 0.006206f, 0.050850f, -0.008383f, -0.007786f, -0.034649f, 0.051883f, 0.009261f, 0.036010f, 0.022130f, -0.057843f, 0.008398f, 0.005292f, 0.035575f, -0.018789f, 0.015225f, 0.000354f, -0.015292f, -0.001886f, -0.012338f, 0.028610f, -0.054656f, -0.006628f, -0.003826f, 0.000245f, 0.002582f, 0.008824f, 0.013507f, -0.000170f, 0.025386f, -0.000965f, -0.003515f, -0.008093f, -0.005148f, 0.001658f, -0.008688f, 0.003001f, -0.002295f, 0.007653f, 0.005457f, -0.002587f, 0.002217f, -0.002944f, -0.015171f, -0.000812f, 0.000866f, 0.003888f, -0.015498f, 0.008364f, -0.003109f, 0.008784f, 0.007031f, 0.012404f, -0.012537f, 0.014492f, -0.007771f, 0.004684f, 0.010554f, 0.009450f, -0.003143f, 0.000337f, -0.005601f, 0.008179f, -0.000388f, 0.003984f, -0.000095f, -0.001699f, 0.021179f, 0.011809f, 0.000395f, 0.009762f, 0.003024f, 0.010139f, 0.031944f, -0.067485f, 0.040060f, 0.040762f, -0.017407f, 0.009687f, 0.005656f, 0.011030f, 0.000267f, 0.032456f, -0.023681f, -0.005109f, -0.025406f, -0.000208f, -0.014371f, 0.002293f, 0.006794f, -0.037010f, 0.016621f, 0.040232f, -0.027712f, -0.026506f, -0.027117f, 0.053567f, + -0.023441f, -0.013125f, 0.004935f, -0.018325f, -0.055543f, 0.009782f, 0.040233f, -0.055285f, -0.025118f, 0.019144f, 0.029620f, 0.008090f, -0.008473f, 0.012845f, -0.019689f, -0.009158f, -0.001092f, 0.027434f, -0.037709f, -0.029887f, 0.021175f, 0.034452f, 0.013473f, -0.042939f, -0.013994f, 0.001121f, -0.002074f, -0.007416f, 0.022363f, -0.006609f, 0.033796f, -0.027514f, -0.006104f, 0.000019f, -0.031663f, 0.020086f, -0.036847f, -0.025201f, 0.011634f, -0.016356f, 0.035634f, 0.051757f, 0.030391f, -0.034091f, 0.018008f, -0.009961f, -0.010345f, -0.024029f, -0.007613f, -0.039219f, 0.029961f, 0.022237f, 0.010592f, 0.001293f, -0.018705f, -0.010324f, 0.012047f, -0.040925f, 0.033019f, -0.007706f, -0.005754f, 0.017466f, 0.002979f, 0.015923f, -0.004584f, -0.002340f, -0.014129f, -0.003906f, 0.001228f, 0.002952f, -0.011107f, -0.003708f, -0.005351f, -0.003798f, 0.018509f, 0.002143f, -0.000408f, -0.008738f, 0.007460f, 0.007584f, -0.006712f, 0.004276f, 0.008426f, 0.002091f, 0.014256f, -0.004950f, -0.010208f, 0.002269f, -0.016581f, 0.008713f, 0.006042f, 0.002329f, -0.000612f, 0.006769f, -0.001501f, 0.010932f, + 0.003338f, 0.007851f, -0.013139f, -0.003710f, 0.012057f, 0.000906f, 0.004853f, 0.006459f, -0.012256f, 0.002014f, 0.012391f, 0.039156f, 0.065289f, -0.000498f, -0.049479f, 0.010448f, -0.059035f, 0.010079f, 0.026766f, 0.012569f, 0.003525f, 0.035447f, 0.026198f, -0.001613f, -0.005444f, -0.048804f, -0.026325f, 0.000698f, -0.022868f, 0.066050f, -0.012093f, -0.015006f, -0.028567f, 0.003533f, 0.024812f, 0.017365f, -0.000946f, 0.012752f, 0.019318f, -0.029333f, 0.009989f, 0.056671f, 0.020033f, -0.038931f, -0.027474f, 0.018389f, -0.019286f, -0.002650f, 0.013766f, -0.008644f, -0.032159f, -0.007689f, 0.003851f, 0.054000f, -0.011741f, 0.011982f, -0.014422f, -0.043667f, 0.007590f, 0.054785f, -0.014789f, -0.032870f, 0.009526f, -0.020136f, 0.013368f, -0.011512f, -0.013420f, 0.037649f, -0.009679f, -0.004309f, 0.018380f, -0.032468f, 0.011674f, 0.039846f, -0.016533f, 0.003418f, -0.023399f, 0.070074f, -0.012784f, 0.008350f, 0.022715f, -0.016286f, -0.003928f, -0.018720f, 0.009802f, -0.021153f, -0.017867f, -0.016688f, 0.026825f, -0.036443f, 0.005330f, -0.005402f, -0.010885f, 0.028317f, 0.000623f, -0.009681f, + -0.012041f, 0.001474f, 0.010622f, 0.008262f, -0.016234f, -0.002961f, 0.000723f, -0.004537f, -0.020086f, -0.012085f, -0.003660f, 0.004771f, 0.001611f, 0.001606f, 0.002807f, 0.016341f, -0.016516f, 0.017179f, 0.003391f, 0.004950f, 0.001151f, 0.013616f, -0.007735f, 0.022369f, -0.004930f, -0.000369f, 0.017154f, 0.022469f, -0.011780f, 0.014680f, -0.007362f, 0.004903f, -0.013059f, 0.011342f, 0.009542f, -0.019436f, -0.000984f, -0.007797f, -0.002675f, -0.009739f, 0.007002f, -0.011979f, 0.010732f, -0.019022f, -0.108109f, -0.037872f, -0.001950f, 0.034561f, -0.018122f, -0.054103f, -0.020378f, -0.007917f, 0.026515f, 0.006910f, -0.007218f, -0.026750f, 0.028272f, 0.050198f, -0.022776f, 0.037951f, 0.009525f, -0.071833f, 0.026810f, 0.033737f, -0.011828f, -0.029202f, -0.005468f, 0.044291f, 0.047262f, -0.003901f, -0.035823f, 0.002517f, -0.004082f, -0.004620f, -0.029852f, 0.007397f, 0.013634f, -0.047364f, 0.032714f, 0.027814f, -0.033404f, 0.006210f, -0.037477f, 0.013296f, 0.091635f, -0.081844f, 0.084723f, 0.038345f, 0.003843f, 0.051832f, 0.025768f, -0.052969f, 0.031877f, -0.039822f, -0.008917f, 0.043568f, + 0.002063f, 0.012506f, -0.022231f, -0.038778f, 0.118078f, -0.027703f, 0.001737f, 0.046547f, -0.022438f, 0.009114f, 0.003587f, 0.028775f, 0.066535f, 0.063230f, 0.059848f, 0.003769f, -0.001132f, -0.009580f, 0.003075f, -0.016119f, 0.004528f, 0.050794f, -0.013404f, -0.017563f, 0.005114f, 0.007066f, 0.029504f, 0.034368f, 0.009827f, 0.009671f, 0.024429f, 0.010409f, -0.018583f, 0.006126f, -0.009566f, -0.027527f, -0.012340f, 0.014541f, -0.020736f, -0.029885f, -0.022686f, -0.000996f, 0.002788f, -0.017111f, 0.008855f, 0.019469f, 0.003068f, -0.006233f, -0.001109f, -0.021823f, 0.025972f, -0.003760f, -0.005600f, 0.018003f, -0.014787f, 0.012258f, -0.011055f, -0.008835f, 0.030563f, -0.000051f, -0.022593f, 0.028976f, -0.017702f, 0.017494f, 0.008227f, -0.011284f, 0.008770f, -0.003925f, 0.021124f, -0.009588f, 0.007414f, 0.001105f, 0.001825f, -0.002170f, 0.022483f, -0.011448f, -0.002565f, -0.001555f, 0.004056f, -0.003188f, 0.009844f, 0.027669f, -0.007321f, -0.079779f, 0.036232f, -0.057965f, 0.081494f, 0.009601f, -0.070866f, 0.015965f, 0.000635f, 0.033252f, 0.015706f, -0.017183f, 0.060312f, 0.014688f, + 0.003076f, 0.040234f, -0.032179f, -0.044807f, 0.001480f, 0.023400f, 0.081289f, -0.011476f, 0.000231f, -0.008557f, 0.058595f, 0.006332f, -0.046497f, -0.027548f, 0.008836f, -0.005202f, 0.025961f, -0.045264f, 0.021753f, 0.007322f, 0.013426f, -0.004101f, -0.017629f, 0.010227f, 0.018213f, 0.000119f, 0.054460f, -0.087814f, 0.007716f, -0.031022f, -0.019187f, -0.011400f, -0.064108f, -0.093312f, -0.096452f, -0.070242f, 0.007501f, 0.000265f, -0.055918f, -0.000549f, -0.010140f, 0.005936f, -0.034674f, -0.089926f, 0.088580f, -0.001695f, -0.013006f, 0.017920f, -0.087742f, -0.006151f, -0.021792f, 0.016359f, 0.025866f, 0.120450f, 0.089939f, -0.010209f, -0.001029f, -0.002982f, 0.023762f, 0.036315f, 0.022201f, 0.016486f, -0.003297f, -0.014715f, -0.085347f, 0.015978f, -0.001678f, -0.033483f, -0.014854f, 0.055638f, -0.007758f, -0.010358f, 0.026729f, -0.002442f, 0.029314f, -0.011559f, 0.014771f, -0.001830f, -0.006010f, 0.020436f, 0.025316f, -0.011721f, 0.003647f, 0.010955f, -0.004612f, 0.005041f, 0.001412f, -0.000547f, 0.017332f, -0.007554f, -0.008641f, 0.014000f, -0.016531f, 0.021801f, 0.000004f, 0.011665f, + 0.018512f, -0.009506f, 0.004695f, 0.015723f, -0.003702f, -0.010820f, -0.003743f, 0.001494f, -0.002756f, 0.004066f, -0.021553f, -0.001704f, -0.017033f, 0.017762f, 0.002866f, 0.011839f, 0.008814f, -0.002950f, 0.000722f, -0.001559f, 0.008451f, 0.010888f, 0.009441f, -0.022649f, 0.109770f, -0.104521f, 0.018059f, -0.020022f, 0.004187f, 0.044420f, -0.032182f, 0.011210f, 0.001809f, -0.113090f, 0.002933f, -0.012558f, 0.005623f, 0.013239f, -0.050465f, -0.018710f, -0.083625f, -0.021432f, -0.003968f, 0.004736f, -0.031582f, -0.023670f, -0.036364f, -0.015048f, 0.036308f, 0.008051f, 0.073215f, 0.018064f, -0.024612f, -0.025769f, 0.045030f, -0.049801f, 0.086100f, -0.067022f, 0.019677f, -0.054038f, 0.001225f, 0.051904f, -0.093867f, 0.088706f, 0.015743f, 0.010410f, -0.064425f, -0.012723f, -0.012133f, 0.000184f, 0.031079f, 0.031092f, 0.039092f, -0.074322f, -0.001769f, -0.029111f, -0.025271f, -0.028494f, -0.040051f, -0.027593f, 0.001523f, 0.042870f, -0.045458f, 0.012470f, -0.083795f, -0.027883f, 0.021348f, 0.025191f, 0.004667f, -0.095270f, -0.051532f, -0.033815f, -0.048505f, -0.040076f, 0.003523f, -0.031526f, + 0.050944f, 0.015464f, 0.025604f, -0.017402f, -0.026176f, 0.085366f, -0.028396f, 0.023114f, -0.016951f, 0.006860f, 0.064124f, 0.008803f, 0.011726f, -0.035573f, 0.036525f, 0.021359f, -0.014834f, 0.034004f, -0.025137f, 0.009570f, -0.009196f, 0.023117f, 0.004791f, -0.007352f, 0.012617f, 0.029381f, -0.009722f, 0.009603f, 0.010588f, 0.009010f, -0.003208f, 0.008143f, -0.003902f, 0.020282f, -0.006354f, 0.003644f, 0.019171f, -0.003594f, -0.007078f, 0.006160f, 0.008473f, -0.012670f, -0.002574f, -0.035793f, 0.022972f, 0.015816f, 0.000465f, -0.019685f, -0.007863f, 0.002165f, 0.007920f, 0.027949f, -0.004153f, -0.007155f, 0.009984f, 0.007480f, -0.003755f, 0.028291f, 0.005681f, -0.033595f, 0.009300f, 0.034044f, 0.047696f, -0.088330f, 0.135970f, -0.101449f, -0.010224f, -0.061011f, 0.012643f, 0.001831f, -0.036672f, -0.052120f, 0.062075f, 0.041861f, 0.019852f, -0.026368f, 0.027680f, 0.008920f, 0.058644f, -0.045514f, -0.029881f, 0.036606f, 0.060946f, -0.076621f, 0.031644f, -0.002301f, 0.037152f, -0.027342f, 0.011216f, -0.033725f, 0.007518f, -0.063577f, 0.021482f, 0.069088f, -0.001818f, -0.004845f, + 0.085786f, 0.015287f, -0.038870f, -0.082916f, 0.071742f, -0.037254f, 0.032614f, -0.030178f, 0.085671f, 0.038003f, -0.008903f, 0.009166f, -0.048852f, 0.006990f, 0.021680f, -0.023424f, 0.024269f, -0.102713f, 0.040928f, 0.093910f, 0.073594f, -0.040085f, -0.041523f, -0.041824f, 0.047808f, 0.004211f, -0.014519f, 0.004212f, 0.121262f, -0.058546f, -0.027016f, 0.047146f, -0.039728f, -0.108670f, 0.046825f, 0.024758f, -0.077425f, 0.044104f, 0.075998f, 0.066968f, -0.019830f, -0.029412f, -0.052635f, 0.028870f, -0.032278f, -0.020652f, 0.048966f, 0.033328f, 0.015519f, 0.042847f, 0.024533f, -0.016109f, -0.014764f, -0.054514f, 0.013370f, -0.022715f, 0.019581f, -0.020008f, 0.039708f, 0.027334f, 0.006565f, -0.007041f, 0.037796f, -0.020043f, -0.002282f, 0.005093f, 0.014891f, 0.008905f, 0.017802f, 0.016045f, 0.001908f, -0.008718f, -0.004713f, 0.013497f, 0.007623f, 0.005570f, 0.002469f, 0.021083f, 0.068046f, -0.001809f, -0.004664f, 0.010289f, -0.022747f, 0.008508f, 0.024938f, -0.034542f, 0.015974f, 0.018148f, -0.012604f, -0.009570f, 0.016548f, 0.009074f, -0.019332f, -0.087430f, 0.046632f, -0.005171f, + 0.012142f, -0.032089f, 0.027942f, 0.000518f, 0.015322f, 0.004572f, 0.005074f, -0.018296f, 0.013918f, 0.047198f, -0.060370f, 0.051792f, -0.008852f, -0.031994f, 0.010692f, -0.021811f, 0.014078f, -0.022350f, -0.018223f, 0.015208f, -0.048112f, -0.005100f, 0.064194f, -0.092781f, 0.026185f, 0.004237f, -0.015429f, -0.028656f, -0.033596f, -0.022099f, 0.067388f, -0.055634f, -0.007843f, 0.021536f, -0.056207f, 0.014062f, 0.031025f, 0.020437f, 0.010710f, 0.009495f, -0.031631f, 0.024758f, -0.082696f, 0.000897f, 0.072687f, -0.030602f, -0.007983f, -0.016557f, -0.020283f, -0.000872f, -0.058447f, 0.030777f, 0.023766f, -0.048795f, 0.045703f, 0.012351f, -0.055047f, 0.022407f, -0.010497f, 0.039754f, 0.035196f, -0.051756f, 0.018214f, 0.056750f, -0.053519f, 0.029736f, -0.038021f, 0.029790f, 0.035231f, -0.055003f, 0.031070f, -0.004336f, -0.028626f, 0.041272f, 0.002528f, -0.066106f, 0.020539f, 0.028806f, 0.009183f, -0.018698f, 0.003559f, 0.049369f, -0.022643f, -0.047007f, 0.049962f, -0.002542f, 0.004174f, -0.002610f, -0.005820f, 0.030033f, -0.022315f, -0.011373f, 0.022028f, 0.007791f, -0.004843f, -0.022795f, + 0.033386f, -0.012990f, -0.021075f, 0.001299f, 0.017825f, -0.010834f, -0.007468f, -0.005660f, 0.026251f, -0.020583f, -0.009824f, 0.001321f, 0.014535f, -0.012909f, 0.010607f, -0.001038f, 0.026109f, -0.016701f, 0.004677f, 0.001564f, 0.003168f, 0.044870f, -0.015607f, -0.198215f, -0.436910f, -0.171812f, -0.289616f, -0.395274f, 0.152581f, 0.055748f, 0.132066f, 0.593700f, 0.494953f, 0.327030f, 0.510133f, 0.347351f, 0.043343f, 0.087996f, 0.064316f, -0.268843f, -0.172681f, -0.118327f, -0.307860f, -0.314285f, -0.085536f, -0.086463f, -0.194581f, -0.056680f, -0.040370f, -0.234803f, -0.201615f, -0.064259f, -0.110074f, -0.221678f, -0.052681f, -0.035689f, -0.173254f, -0.018482f, 0.123704f, -0.051064f, -0.040848f, 0.181689f, 0.112204f, -0.071635f, 0.161203f, 0.264671f, 0.031165f, 0.149654f, 0.324449f, 0.159570f, 0.083338f, 0.349824f, 0.256277f, 0.191057f, 0.424394f, 0.573489f, 0.454026f, 0.526990f, 0.682395f, 0.446247f, 0.292730f, 0.383364f, 0.247652f, -0.066689f, -0.015039f, -0.167490f, -0.417786f, -0.591425f, -0.636369f, -0.852434f, -0.969938f, -1.029890f, -0.996240f, -0.957358f, -0.951830f, -0.794754f, + -0.607901f, -0.570375f, -0.371663f, 0.031538f, 0.160057f, 0.207077f, 0.624050f, 0.612434f, 0.422938f, 0.622205f, 0.570427f, 0.310240f, 0.301554f, 0.397390f, 0.241042f, 0.114277f, 0.278441f, 0.284011f, 0.128481f, 0.229757f, 0.346069f, 0.229952f, 0.137516f, 0.294596f, 0.244284f, 0.050237f, 0.150206f, 0.216972f, 0.025543f, 0.042259f, 0.237369f, 0.145671f, 0.079078f, 0.251482f, 0.249334f, 0.091816f, 0.198900f, 0.171828f, -0.043170f, -0.122414f, -0.126897f, -0.293807f, -0.398192f, -0.393268f, -0.454069f, -0.500762f, -0.519297f, -0.508481f, -0.521601f, -0.580279f, -0.600304f, -0.574445f, -0.640849f, -0.548826f, -0.373733f, -0.285945f, -0.097316f, 0.165611f, 0.346888f, 0.507801f, 0.655718f, 0.666493f, 0.570764f, 0.518145f, 0.425676f, 0.321882f, 0.259478f, 0.217868f, 0.175933f, 0.137005f, 0.124075f, 0.114340f, 0.084049f, 0.069875f, 0.061516f, 0.029737f, -0.006509f, -0.029541f, -0.064277f, -0.097353f, -0.102401f, -0.081711f, -0.060102f, -0.044858f, -0.039543f} + }, + { + {-0.007421f, 0.004520f, 0.007240f, -0.002552f, 0.006434f, -0.001045f, 0.006791f, 0.003417f, -0.001493f, -0.002659f, 0.006879f, 0.000582f, 0.001372f, -0.007819f, -0.001254f, -0.000562f, -0.000349f, 0.010692f, 0.005223f, -0.000389f, -0.008021f, -0.005832f, -0.003451f, 0.000980f, -0.000184f, 0.002317f, 0.004915f, 0.001498f, 0.001813f, -0.008094f, -0.001246f, -0.007878f, 0.000316f, -0.004356f, 0.005159f, 0.005153f, -0.002056f, -0.004250f, 0.005393f, 0.001156f, -0.002025f, -0.007283f, -0.000990f, -0.004671f, 0.001307f, 0.004456f, -0.007392f, -0.003606f, -0.001237f, -0.002890f, 0.018863f, 0.004495f, 0.010889f, 0.000794f, 0.003571f, -0.000080f, -0.005453f, -0.005055f, -0.006438f, 0.003042f, -0.005312f, 0.003821f, 0.000117f, 0.004664f, 0.004767f, 0.011584f, 0.003492f, -0.000959f, -0.000590f, -0.006879f, 0.011215f, 0.010323f, 0.001801f, 0.003184f, 0.002920f, 0.003195f, -0.000659f, -0.005759f, 0.001710f, 0.003332f, -0.002170f, 0.000964f, -0.001779f, -0.005264f, 0.002499f, -0.004391f, -0.002989f, -0.001368f, 0.000342f, -0.001965f, -0.002140f, -0.002503f, -0.000064f, -0.000140f, -0.000404f, 0.000504f, + -0.000889f, 0.001673f, -0.000944f, -0.001567f, -0.000164f, 0.002099f, 0.000778f, -0.000864f, -0.002838f, -0.000836f, 0.002599f, 0.000172f, 0.001164f, 0.001030f, 0.026068f, -0.006168f, -0.005454f, -0.002118f, -0.005164f, 0.001196f, -0.012395f, 0.000966f, 0.002467f, 0.000630f, 0.008422f, 0.000964f, -0.001741f, -0.007443f, 0.004764f, -0.010492f, -0.009046f, 0.003265f, -0.004413f, -0.002110f, -0.001565f, 0.001748f, 0.007070f, 0.009677f, 0.000726f, -0.001502f, 0.011503f, 0.004147f, -0.000671f, 0.000419f, -0.004703f, 0.000145f, 0.012626f, 0.000005f, -0.005870f, -0.004747f, -0.001365f, 0.004284f, -0.005845f, -0.007203f, -0.007359f, -0.006020f, 0.005761f, -0.005664f, 0.002154f, -0.006882f, 0.002420f, 0.008331f, 0.000543f, 0.005920f, -0.002519f, -0.004698f, -0.002326f, 0.004107f, -0.000252f, 0.006356f, 0.009295f, 0.001363f, -0.002814f, -0.004810f, -0.000244f, -0.000712f, 0.000424f, 0.000295f, -0.008199f, -0.000866f, -0.003833f, -0.004170f, 0.003970f, 0.000842f, 0.002547f, 0.003018f, -0.009756f, -0.005437f, 0.004040f, -0.001825f, 0.007205f, 0.001309f, 0.006070f, -0.001242f, -0.001552f, -0.001678f, + -0.003535f, -0.000829f, -0.003893f, -0.001565f, 0.000108f, 0.005684f, -0.001375f, -0.000128f, -0.000987f, 0.001801f, -0.000053f, 0.002191f, 0.000435f, -0.000479f, -0.001438f, 0.001765f, -0.002794f, 0.000013f, 0.000143f, -0.001586f, 0.001306f, 0.001672f, -0.002360f, 0.000790f, -0.001167f, 0.001016f, 0.000984f, -0.000007f, 0.001672f, 0.000179f, -0.000874f, -0.018612f, -0.009196f, -0.004034f, -0.012731f, -0.004436f, -0.012223f, 0.003552f, -0.001108f, -0.007629f, -0.008792f, -0.001342f, -0.007189f, -0.000212f, 0.005907f, -0.000488f, -0.010917f, -0.004080f, 0.000123f, -0.004297f, -0.003564f, 0.003107f, 0.010213f, 0.013096f, -0.002155f, -0.003551f, 0.007342f, 0.008349f, -0.002654f, -0.001990f, -0.001710f, -0.005970f, 0.001767f, 0.002692f, -0.005377f, -0.004044f, -0.001281f, 0.005024f, 0.011180f, 0.000690f, -0.003816f, -0.000038f, -0.005693f, -0.002129f, -0.009030f, -0.004276f, -0.004028f, -0.014266f, -0.001549f, -0.006500f, -0.004519f, -0.015658f, 0.009655f, -0.006842f, -0.006064f, 0.002732f, -0.001008f, -0.001170f, 0.002009f, -0.013018f, -0.003406f, -0.004696f, -0.001064f, -0.007537f, -0.001058f, -0.003575f, + 0.003405f, 0.004458f, -0.004257f, -0.002301f, -0.006235f, 0.002152f, -0.000959f, -0.001314f, -0.000012f, -0.009653f, -0.000257f, -0.008729f, 0.001304f, -0.000636f, -0.002763f, 0.002515f, 0.010528f, 0.004984f, -0.002509f, 0.000527f, -0.001870f, -0.004151f, 0.000384f, 0.001588f, -0.002086f, -0.000342f, -0.002578f, 0.000023f, -0.001074f, -0.003228f, 0.001261f, 0.001181f, -0.003371f, -0.001616f, 0.000894f, -0.001454f, 0.000441f, -0.002234f, -0.001721f, -0.001824f, -0.003148f, -0.003442f, -0.000276f, 0.000817f, -0.001745f, -0.002097f, -0.000015f, -0.001017f, -0.000443f, -0.001155f, -0.000033f, -0.000677f, -0.001153f, -0.002851f, 0.001494f, -0.001038f, -0.001356f, -0.001412f, -0.034422f, -0.002704f, -0.016958f, 0.015260f, -0.008821f, 0.027456f, -0.017538f, 0.017314f, -0.015542f, -0.000920f, -0.000209f, -0.011977f, 0.009354f, 0.000359f, -0.004444f, 0.002827f, -0.003885f, -0.001555f, -0.011655f, -0.000092f, -0.008787f, 0.006999f, 0.002472f, 0.008564f, -0.004981f, 0.012769f, 0.011510f, -0.011124f, 0.003170f, -0.009456f, 0.010119f, 0.000110f, -0.007009f, 0.000608f, -0.000954f, -0.000348f, 0.007438f, 0.001102f, + -0.010958f, 0.004555f, 0.007957f, -0.000507f, 0.009390f, -0.004332f, 0.007665f, -0.011389f, -0.005759f, 0.007496f, -0.006515f, 0.001908f, 0.010110f, -0.009145f, 0.014917f, 0.005896f, -0.014642f, 0.003585f, -0.014103f, 0.005104f, 0.007937f, 0.005346f, 0.007644f, 0.010940f, 0.003736f, -0.001331f, -0.000833f, 0.000737f, 0.003510f, 0.007866f, -0.002664f, 0.014852f, 0.002928f, 0.010181f, 0.005574f, 0.002966f, 0.000781f, 0.010214f, 0.001894f, 0.002544f, -0.005792f, -0.007949f, 0.004118f, 0.005516f, 0.000658f, 0.008782f, -0.000979f, -0.000060f, -0.001561f, 0.010426f, 0.003213f, -0.003714f, 0.002428f, 0.001786f, 0.001567f, 0.003559f, 0.000612f, 0.006491f, -0.000947f, 0.002241f, 0.001296f, 0.002487f, -0.001569f, 0.001244f, 0.000685f, 0.000153f, 0.000649f, -0.002202f, -0.001916f, 0.000827f, -0.002375f, -0.001084f, -0.002580f, 0.001701f, 0.000038f, 0.022749f, 0.000128f, -0.006191f, -0.002075f, -0.008485f, -0.010130f, 0.016613f, -0.003224f, -0.002419f, 0.015248f, -0.001181f, -0.002942f, 0.006742f, 0.011867f, 0.003384f, 0.005897f, -0.000305f, -0.012944f, -0.003433f, 0.009739f, -0.014761f, + -0.014611f, -0.005484f, 0.003210f, -0.010411f, -0.006246f, 0.000202f, -0.001449f, 0.010220f, -0.003933f, -0.002249f, 0.010794f, 0.014991f, -0.012986f, 0.003390f, -0.003086f, 0.005464f, 0.001509f, -0.005779f, -0.001242f, 0.006228f, 0.009580f, -0.002580f, -0.013482f, -0.003051f, -0.001174f, -0.003576f, -0.006720f, 0.000965f, -0.000839f, 0.002445f, -0.001842f, 0.001862f, 0.012633f, -0.009345f, 0.001227f, -0.007122f, -0.005741f, -0.009784f, -0.002925f, -0.005661f, -0.013481f, -0.000503f, 0.000945f, -0.005276f, -0.001015f, -0.005584f, 0.005229f, 0.006539f, -0.001011f, 0.001931f, -0.004842f, -0.001372f, 0.016323f, -0.002181f, -0.006739f, -0.022158f, -0.010058f, -0.000318f, -0.007543f, 0.005080f, -0.002126f, 0.001875f, -0.000006f, -0.004479f, -0.000821f, 0.006414f, -0.005426f, 0.001234f, -0.001517f, 0.000592f, 0.000031f, -0.004670f, -0.003414f, -0.001988f, -0.003560f, -0.000752f, -0.005646f, -0.001219f, -0.003195f, 0.000587f, -0.002224f, -0.000773f, -0.003037f, -0.003331f, -0.003218f, -0.000872f, -0.000330f, 0.001118f, 0.000849f, -0.000488f, 0.000938f, 0.000709f, -0.000161f, 0.003118f, 0.002758f, -0.000088f, + 0.001641f, -0.001352f, -0.001704f, 0.000344f, 0.029490f, 0.033140f, 0.006308f, -0.012053f, 0.007551f, 0.013069f, 0.013109f, 0.007399f, 0.009904f, 0.004438f, 0.016212f, -0.001636f, -0.001978f, -0.006602f, 0.010181f, -0.005956f, -0.014259f, -0.019652f, 0.002275f, -0.009419f, -0.008102f, 0.006966f, -0.002052f, -0.005218f, 0.016568f, -0.001175f, 0.020580f, 0.000232f, -0.008104f, -0.005543f, 0.007239f, 0.004807f, -0.004024f, -0.016263f, 0.023507f, 0.013592f, 0.000166f, 0.012746f, 0.007633f, 0.008296f, -0.007665f, 0.009365f, 0.004806f, 0.001901f, -0.002798f, -0.004168f, -0.010313f, -0.014585f, 0.004175f, 0.007098f, -0.011338f, 0.004598f, 0.009883f, 0.014697f, 0.003936f, 0.013281f, 0.006207f, 0.011320f, -0.016533f, 0.004963f, 0.001590f, 0.003368f, 0.000484f, -0.001099f, 0.007114f, 0.006440f, 0.006294f, 0.009087f, -0.002917f, 0.004435f, 0.002675f, 0.013058f, 0.016020f, -0.008022f, -0.009368f, 0.001471f, -0.003773f, -0.008430f, 0.003635f, 0.008872f, -0.005370f, 0.003786f, -0.015865f, -0.011667f, 0.002786f, -0.008037f, -0.003719f, -0.002565f, -0.007160f, 0.000076f, -0.000009f, 0.000972f, + -0.000084f, 0.003222f, 0.003848f, -0.000197f, 0.001991f, 0.000709f, 0.002936f, 0.003078f, 0.000135f, 0.000284f, -0.000097f, 0.003361f, 0.001770f, 0.001885f, 0.004180f, -0.000645f, -0.001983f, 0.003138f, -0.000784f, 0.000054f, 0.004787f, 0.002956f, 0.004538f, 0.006136f, 0.001049f, 0.002790f, 0.001738f, 0.004089f, 0.027083f, 0.008566f, 0.011963f, -0.009899f, 0.003932f, -0.024505f, 0.001328f, -0.017699f, 0.013424f, 0.009041f, -0.007454f, 0.011311f, 0.006426f, -0.011975f, -0.002969f, 0.017365f, -0.000559f, 0.011967f, -0.003264f, 0.002427f, 0.013840f, -0.017175f, -0.001320f, 0.002850f, 0.005062f, 0.001186f, 0.005568f, 0.000762f, 0.016781f, -0.007738f, -0.004819f, -0.005028f, 0.012688f, 0.001655f, -0.005957f, 0.007749f, 0.021394f, -0.014891f, 0.002644f, 0.002929f, -0.001300f, 0.008688f, -0.004328f, 0.016397f, 0.005491f, 0.004193f, -0.013405f, -0.001270f, -0.003559f, 0.007640f, 0.005692f, 0.008250f, -0.009213f, -0.005943f, 0.007775f, -0.015981f, -0.009003f, 0.003715f, 0.017247f, 0.010540f, 0.015249f, -0.016568f, -0.005291f, -0.016836f, -0.004404f, 0.005217f, -0.001468f, -0.015876f, + 0.002069f, -0.009693f, -0.000168f, -0.017377f, -0.021202f, -0.008550f, -0.015315f, 0.000976f, 0.005367f, 0.003146f, -0.006575f, 0.008552f, 0.013531f, 0.003917f, 0.003963f, 0.007919f, -0.002499f, -0.012897f, -0.000841f, -0.008833f, 0.004634f, 0.001613f, -0.000930f, 0.002550f, 0.001161f, -0.009405f, -0.004932f, -0.002578f, 0.004723f, 0.000828f, -0.003408f, -0.001005f, -0.000357f, -0.001249f, 0.000722f, -0.001792f, -0.000956f, 0.000825f, 0.004284f, 0.001264f, 0.001340f, 0.001148f, -0.000927f, 0.001453f, 0.002830f, 0.001673f, 0.003705f, 0.001309f, 0.001876f, 0.000407f, 0.002913f, -0.004483f, -0.031929f, -0.028794f, -0.020721f, 0.006284f, 0.006364f, 0.023859f, -0.010590f, 0.022658f, -0.009307f, -0.037473f, -0.003374f, -0.003520f, -0.014527f, -0.024260f, -0.008890f, -0.000571f, -0.014978f, -0.000171f, -0.023021f, 0.001637f, -0.024267f, 0.013824f, -0.006149f, 0.010058f, -0.004806f, -0.000478f, -0.007584f, -0.008791f, 0.014898f, 0.002882f, -0.004418f, 0.016913f, 0.001836f, 0.002677f, 0.005761f, 0.015559f, 0.013647f, 0.010401f, 0.000193f, -0.018541f, -0.002003f, 0.008820f, 0.002616f, 0.011268f, + -0.005512f, 0.004986f, -0.027222f, 0.008518f, 0.016283f, -0.020621f, 0.012011f, 0.004162f, 0.019273f, 0.014742f, -0.000141f, -0.005188f, -0.000588f, 0.013068f, 0.006365f, -0.017402f, -0.014215f, -0.024034f, -0.011723f, -0.016164f, -0.003778f, -0.019981f, -0.004375f, -0.006766f, 0.020129f, -0.009555f, 0.009874f, -0.005356f, -0.003110f, -0.006710f, -0.014163f, -0.007599f, -0.004655f, -0.004775f, 0.012610f, -0.038462f, -0.008332f, 0.017824f, 0.000663f, 0.003325f, 0.009438f, 0.018048f, -0.011566f, 0.002050f, 0.004655f, -0.000969f, -0.000347f, -0.002787f, 0.004797f, 0.007387f, -0.003464f, 0.000481f, -0.000915f, 0.008265f, -0.003298f, -0.000386f, 0.008271f, 0.001593f, 0.002790f, 0.003774f, 0.003781f, -0.001533f, 0.000518f, -0.002407f, -0.003480f, -0.002008f, -0.006019f, 0.001537f, 0.003619f, 0.002490f, 0.001330f, -0.007726f, -0.000172f, -0.001158f, -0.000559f, -0.003704f, 0.001901f, 0.003239f, -0.002038f, -0.000522f, 0.003805f, 0.004108f, -0.041933f, 0.032485f, -0.008928f, 0.019277f, 0.011287f, -0.000605f, -0.027680f, 0.022115f, 0.003156f, -0.001762f, 0.014027f, 0.009994f, -0.011339f, -0.000033f, + 0.023798f, 0.008002f, -0.010519f, 0.016931f, -0.009027f, -0.007230f, -0.004913f, 0.005536f, 0.000264f, -0.002914f, 0.002424f, 0.007343f, 0.006579f, 0.006763f, -0.017259f, 0.010900f, -0.014316f, 0.019819f, -0.012097f, 0.019726f, 0.006441f, 0.002008f, -0.019072f, -0.019383f, -0.006337f, -0.006369f, 0.022922f, 0.006577f, 0.018358f, 0.007777f, -0.016153f, 0.000753f, -0.003579f, 0.007946f, 0.000571f, 0.007011f, -0.001912f, -0.010829f, -0.006293f, 0.011693f, 0.028999f, 0.020947f, 0.002457f, 0.007278f, -0.001983f, -0.003929f, 0.014925f, 0.012550f, -0.005205f, 0.018410f, 0.025909f, 0.036193f, 0.000874f, -0.020562f, -0.024812f, 0.008807f, 0.004621f, -0.000925f, 0.006369f, 0.000247f, -0.007879f, -0.000806f, 0.021904f, -0.003847f, -0.009418f, 0.038946f, 0.009916f, -0.006441f, 0.011530f, 0.000395f, -0.000288f, -0.001093f, -0.006034f, -0.000739f, 0.011933f, 0.005995f, -0.003659f, -0.005545f, 0.008415f, 0.006848f, -0.000406f, 0.015911f, 0.004708f, 0.003122f, 0.001870f, 0.007230f, 0.002889f, 0.006785f, 0.004746f, 0.002478f, 0.001507f, 0.008513f, 0.004825f, 0.004619f, 0.001435f, 0.008455f, + -0.000846f, 0.003423f, 0.005164f, 0.003616f, -0.000418f, 0.009433f, 0.010844f, 0.003466f, -0.001429f, 0.011249f, 0.001164f, -0.004872f, -0.000558f, 0.008292f, 0.000779f, -0.000413f, -0.001339f, -0.001184f, 0.000788f, 0.002384f, 0.005617f, 0.019561f, -0.028556f, 0.024074f, 0.009921f, -0.019496f, 0.045732f, 0.006894f, -0.023292f, 0.005431f, 0.012772f, 0.001243f, 0.009242f, 0.032819f, -0.031311f, 0.020497f, -0.012625f, 0.018183f, -0.006855f, 0.003901f, -0.028984f, 0.004964f, -0.003076f, 0.011704f, -0.011056f, 0.001648f, 0.002319f, 0.000326f, -0.016964f, 0.016390f, 0.001823f, -0.001757f, 0.007819f, -0.003252f, 0.007711f, -0.004049f, 0.023192f, 0.018220f, 0.022963f, 0.022733f, -0.003548f, 0.007945f, 0.009980f, 0.001009f, -0.011800f, 0.016071f, -0.018912f, 0.005880f, 0.019050f, -0.011247f, 0.010171f, -0.021126f, 0.006911f, -0.001856f, -0.004854f, -0.001844f, 0.001796f, 0.006502f, 0.006465f, 0.022216f, -0.014402f, -0.000742f, 0.014919f, 0.031658f, -0.027894f, 0.007161f, -0.006695f, 0.009589f, -0.004953f, 0.046238f, -0.028273f, 0.010112f, -0.015652f, -0.008865f, 0.004368f, 0.004779f, + 0.002802f, -0.040549f, -0.021093f, 0.033372f, 0.018587f, -0.003758f, -0.017824f, -0.021020f, -0.008026f, 0.007382f, -0.022235f, -0.012388f, 0.011372f, 0.006096f, -0.000162f, -0.000755f, -0.015454f, 0.002827f, -0.004272f, -0.006067f, 0.007535f, -0.004009f, -0.004532f, -0.001998f, -0.013452f, 0.004525f, -0.003227f, -0.004846f, -0.004662f, 0.006101f, -0.006290f, 0.007463f, -0.000829f, -0.002165f, 0.002999f, 0.002494f, 0.010286f, -0.010428f, -0.001778f, -0.008004f, -0.001251f, 0.004692f, 0.004168f, 0.012714f, -0.003833f, 0.006874f, 0.002040f, -0.005068f, 0.021342f, -0.028185f, -0.006019f, 0.039744f, -0.011994f, -0.000843f, 0.021269f, 0.004960f, 0.013106f, -0.029743f, 0.028441f, 0.001810f, 0.002079f, -0.007585f, -0.017916f, -0.002505f, -0.002816f, -0.019180f, -0.011598f, 0.021175f, -0.006798f, 0.004030f, -0.010469f, -0.046700f, 0.015744f, 0.002078f, -0.014465f, 0.008868f, 0.018019f, -0.001736f, 0.001944f, -0.003691f, 0.004492f, 0.012206f, 0.003844f, 0.019639f, 0.013423f, 0.003040f, 0.017150f, -0.013904f, -0.013710f, -0.019484f, 0.007288f, 0.011199f, 0.003212f, -0.030882f, 0.008687f, -0.026392f, + 0.038123f, -0.009093f, 0.013510f, 0.032536f, -0.012900f, 0.020659f, 0.005105f, 0.022496f, 0.009013f, -0.010912f, -0.033503f, -0.024039f, -0.018772f, -0.002614f, -0.019704f, -0.003957f, -0.017234f, -0.011179f, 0.033566f, 0.007258f, -0.014409f, -0.012763f, 0.006715f, 0.012464f, -0.002994f, 0.004850f, -0.061228f, 0.024589f, 0.004093f, -0.019646f, -0.024189f, -0.006317f, -0.040466f, 0.004336f, 0.020000f, 0.002196f, -0.017434f, 0.010702f, 0.008959f, -0.014283f, 0.007060f, 0.004227f, -0.003639f, 0.000457f, -0.009216f, 0.002386f, 0.003092f, 0.002350f, -0.011988f, -0.006531f, 0.004808f, -0.007473f, 0.001636f, -0.004517f, -0.002963f, 0.002858f, 0.009950f, -0.012735f, 0.004351f, 0.009883f, -0.011934f, -0.011168f, 0.001388f, -0.010250f, 0.002273f, -0.006809f, 0.006985f, 0.003819f, -0.011952f, 0.006647f, -0.007879f, -0.005056f, 0.008108f, 0.001893f, 0.018351f, 0.005704f, -0.000112f, -0.001159f, 0.001363f, -0.004834f, 0.013224f, -0.037922f, -0.046470f, 0.027838f, -0.022899f, -0.026622f, -0.007719f, 0.017423f, 0.036024f, -0.023952f, 0.001780f, 0.017086f, -0.005345f, -0.007641f, 0.009147f, 0.005917f, + 0.027034f, 0.008966f, -0.026331f, -0.001131f, -0.013443f, -0.001037f, -0.015719f, -0.020629f, 0.002980f, 0.020370f, -0.001681f, 0.009012f, -0.017186f, 0.004854f, 0.020099f, 0.015582f, 0.002199f, 0.001466f, 0.012490f, 0.011887f, 0.007480f, 0.018413f, -0.023658f, 0.025589f, 0.018326f, 0.006192f, -0.019590f, 0.001282f, 0.014765f, -0.015489f, 0.017183f, -0.012330f, 0.019486f, -0.005400f, 0.025500f, -0.040533f, 0.042668f, 0.009892f, 0.040224f, 0.002446f, -0.008757f, -0.002988f, 0.014399f, 0.000792f, -0.033955f, 0.001150f, -0.002602f, -0.035193f, 0.010856f, 0.024704f, -0.033442f, 0.027508f, -0.029467f, 0.008929f, 0.011074f, 0.005880f, -0.036825f, -0.017865f, -0.018192f, 0.003329f, 0.002500f, -0.021587f, -0.031573f, 0.005916f, -0.027798f, 0.018593f, -0.013541f, -0.007445f, 0.009246f, -0.017429f, -0.013502f, -0.017881f, -0.007496f, -0.010076f, 0.000315f, -0.014355f, -0.010754f, -0.013123f, -0.019278f, -0.009533f, -0.004213f, -0.004571f, -0.005051f, -0.005829f, -0.003931f, -0.009353f, -0.010167f, 0.006303f, -0.012125f, -0.006760f, -0.003282f, 0.008903f, -0.004716f, 0.000006f, -0.015424f, -0.011254f, + -0.005190f, -0.000587f, -0.003686f, -0.013288f, -0.002032f, -0.001422f, 0.010319f, 0.006484f, -0.008782f, -0.008334f, 0.001493f, -0.004600f, 0.007552f, -0.004678f, 0.003941f, -0.008354f, -0.021449f, 0.032491f, 0.006557f, 0.021382f, 0.020725f, 0.005817f, -0.016003f, 0.003526f, 0.054844f, -0.037726f, 0.009075f, -0.006642f, -0.020600f, 0.001218f, 0.007364f, 0.008844f, -0.000262f, 0.000126f, -0.010807f, -0.015851f, -0.024659f, -0.012472f, 0.018629f, -0.015634f, -0.024775f, 0.014239f, -0.008878f, 0.005457f, -0.003277f, 0.011064f, -0.010545f, 0.023328f, -0.008415f, 0.002519f, -0.000525f, 0.002461f, 0.021508f, 0.007310f, -0.009977f, 0.011460f, -0.009130f, 0.017614f, -0.010591f, 0.007222f, -0.025209f, -0.018437f, -0.013499f, 0.004401f, -0.012591f, -0.022002f, 0.009274f, 0.016301f, 0.004795f, -0.011705f, 0.007546f, 0.011513f, 0.013106f, 0.035249f, 0.048665f, 0.066096f, -0.006676f, 0.010535f, 0.016033f, 0.009342f, 0.009005f, 0.010623f, -0.013419f, 0.026228f, -0.003587f, 0.034241f, 0.042380f, 0.030999f, 0.012710f, 0.017450f, 0.005996f, 0.059109f, 0.017173f, -0.010823f, -0.009182f, -0.008403f, + -0.003187f, -0.003805f, 0.003361f, -0.004719f, -0.010808f, 0.009886f, -0.017241f, 0.005202f, -0.003686f, 0.005489f, -0.008410f, -0.006954f, -0.005143f, 0.013404f, -0.012722f, -0.012554f, -0.000587f, 0.005527f, -0.006223f, -0.016117f, -0.004994f, 0.000929f, -0.007286f, 0.008608f, 0.016724f, -0.009306f, -0.000635f, 0.003474f, -0.001197f, 0.005495f, 0.009932f, -0.004411f, -0.010785f, -0.001846f, 0.005973f, -0.005474f, 0.015306f, 0.017646f, 0.011307f, -0.005011f, -0.011353f, -0.001517f, 0.017829f, 0.002028f, 0.000126f, 0.007768f, 0.003049f, -0.000092f, -0.002251f, 0.004373f, 0.005045f, -0.011604f, -0.000515f, 0.065981f, 0.052806f, -0.023063f, -0.010643f, -0.027503f, 0.015782f, 0.007694f, 0.032270f, -0.005715f, -0.014073f, -0.006356f, -0.021026f, 0.004705f, 0.000726f, 0.030480f, -0.011502f, 0.011357f, -0.041135f, 0.022606f, -0.003310f, 0.015910f, -0.000294f, 0.014420f, 0.002363f, -0.023366f, -0.012159f, -0.020042f, -0.015325f, 0.016888f, 0.040592f, 0.017738f, -0.004951f, -0.012609f, -0.000665f, -0.003408f, 0.010035f, 0.013769f, -0.026148f, -0.000494f, -0.009198f, -0.008686f, -0.028390f, -0.021800f, + -0.045932f, 0.000872f, -0.002436f, 0.016540f, -0.013868f, 0.029395f, -0.022447f, -0.009782f, 0.058624f, 0.058241f, -0.040398f, 0.009036f, 0.033598f, -0.019539f, -0.009505f, 0.017412f, -0.006649f, -0.024546f, 0.065202f, -0.016216f, -0.099473f, 0.033103f, -0.001450f, -0.051126f, 0.038990f, 0.041881f, -0.015012f, 0.029347f, 0.037024f, -0.017511f, 0.001118f, 0.023681f, -0.025770f, 0.010792f, 0.020310f, -0.036524f, -0.005247f, -0.011980f, 0.001780f, -0.013302f, -0.000016f, 0.005238f, -0.015706f, 0.012590f, -0.018182f, -0.008150f, 0.008501f, 0.017816f, -0.010449f, 0.001138f, 0.003302f, -0.002529f, 0.005758f, -0.012789f, 0.018758f, -0.009525f, 0.019819f, 0.019614f, -0.000751f, 0.001165f, 0.012915f, -0.009497f, 0.002565f, -0.000347f, 0.016237f, -0.012210f, 0.009714f, 0.003242f, -0.039066f, 0.007686f, -0.005164f, -0.007080f, 0.001760f, -0.000883f, 0.003799f, -0.021658f, 0.002630f, -0.005474f, -0.019682f, 0.003545f, 0.032766f, -0.030930f, 0.009866f, 0.018437f, -0.027011f, 0.000133f, 0.014139f, -0.024826f, -0.012383f, 0.004482f, 0.011431f, 0.021784f, 0.010505f, -0.017923f, -0.003474f, 0.016066f, + -0.018840f, 0.018497f, -0.009497f, -0.024069f, 0.021274f, 0.010894f, 0.010475f, -0.006185f, -0.006247f, -0.008671f, -0.001417f, 0.017857f, -0.037614f, 0.018344f, -0.001046f, 0.030940f, -0.019934f, -0.000165f, -0.024723f, 0.010417f, -0.040070f, 0.004165f, 0.001504f, -0.016069f, -0.012266f, 0.006146f, -0.027069f, -0.046541f, 0.027784f, -0.002845f, 0.008166f, -0.027633f, 0.016521f, -0.004687f, 0.017773f, 0.019078f, 0.009330f, -0.019572f, 0.015702f, -0.009524f, -0.004500f, -0.036048f, 0.004889f, -0.025736f, -0.028197f, -0.041032f, -0.016997f, 0.006258f, 0.011040f, -0.042350f, -0.021061f, 0.001994f, -0.015332f, -0.056783f, -0.045079f, -0.046346f, -0.009820f, -0.027823f, 0.024137f, 0.034094f, 0.009155f, -0.034345f, -0.039773f, -0.046351f, -0.004586f, -0.003705f, 0.024853f, -0.022532f, -0.038686f, -0.019181f, -0.025863f, 0.008395f, 0.000185f, 0.008783f, 0.004294f, -0.012995f, 0.002434f, 0.009049f, -0.010231f, -0.004530f, -0.008716f, -0.005647f, -0.006385f, -0.012649f, -0.000878f, 0.014842f, 0.000212f, 0.004067f, 0.004133f, -0.003024f, 0.011124f, -0.007819f, 0.017366f, 0.015458f, -0.006566f, -0.014639f, + -0.001014f, -0.005874f, -0.008264f, -0.009366f, -0.008252f, 0.012333f, 0.000258f, 0.011588f, -0.012826f, -0.014018f, -0.002789f, 0.006190f, -0.022068f, 0.003310f, 0.001884f, -0.016375f, 0.003187f, -0.013562f, -0.028739f, 0.017081f, -0.007090f, 0.001724f, -0.005021f, 0.002521f, -0.014842f, -0.004261f, -0.028834f, 0.050152f, 0.055732f, -0.013183f, 0.037639f, -0.010450f, -0.014473f, -0.014383f, 0.036660f, -0.031582f, -0.007071f, -0.014919f, 0.058035f, 0.002413f, 0.021386f, 0.007832f, -0.005159f, 0.029081f, 0.016412f, 0.023857f, 0.007723f, -0.003416f, -0.009826f, 0.022845f, -0.003465f, -0.021882f, 0.027952f, -0.000483f, 0.024523f, -0.026793f, 0.019194f, 0.006980f, -0.027207f, -0.020973f, 0.050585f, 0.032906f, -0.002746f, 0.018295f, 0.015404f, -0.031676f, -0.020600f, 0.010846f, 0.008405f, 0.022617f, 0.003158f, 0.005178f, 0.009105f, 0.027539f, 0.011614f, 0.007270f, -0.026781f, 0.075424f, 0.050857f, 0.006068f, -0.033403f, 0.017086f, -0.010969f, 0.009633f, -0.007327f, 0.016371f, -0.010648f, 0.002812f, 0.041890f, -0.028459f, -0.013438f, -0.038344f, 0.011219f, -0.010243f, -0.006348f, 0.035567f, + 0.011555f, 0.004741f, 0.003488f, -0.014311f, -0.028353f, 0.021081f, 0.000411f, 0.000650f, 0.022836f, 0.022445f, -0.001322f, -0.016123f, -0.018505f, 0.036731f, -0.003350f, -0.001937f, -0.006644f, 0.027653f, -0.001750f, -0.019019f, 0.013052f, 0.010373f, 0.017678f, 0.007994f, 0.006556f, 0.025539f, -0.004704f, -0.009137f, 0.009353f, -0.000510f, 0.001535f, 0.002346f, 0.012170f, -0.006453f, 0.000459f, -0.008264f, 0.003282f, 0.012301f, -0.005146f, 0.002969f, 0.015869f, -0.005350f, 0.003834f, 0.011192f, 0.001331f, -0.002986f, -0.023088f, 0.015404f, -0.012664f, 0.010098f, -0.015226f, -0.003453f, 0.006972f, -0.009972f, -0.003364f, 0.022511f, 0.016984f, 0.001909f, -0.002878f, 0.021018f, 0.004821f, 0.010009f, 0.009977f, 0.004676f, -0.003136f, 0.008988f, -0.018086f, -0.039203f, 0.101946f, -0.114330f, -0.013196f, -0.060151f, 0.073941f, 0.019969f, 0.013071f, -0.028674f, 0.006956f, -0.023383f, 0.066238f, -0.011594f, -0.004219f, 0.006899f, -0.003251f, -0.025773f, 0.009928f, 0.015174f, 0.020053f, -0.044561f, -0.023439f, -0.022878f, 0.009198f, -0.013386f, -0.012009f, -0.001284f, -0.000392f, 0.029488f, + -0.015112f, 0.001619f, 0.022178f, -0.002591f, -0.029466f, 0.003886f, 0.023336f, -0.002609f, -0.046463f, 0.034927f, 0.004186f, 0.000831f, -0.000064f, -0.019419f, 0.015332f, -0.085799f, -0.060044f, -0.008172f, -0.021503f, 0.004123f, 0.006577f, -0.040057f, 0.063324f, -0.024857f, 0.087234f, -0.012079f, -0.030557f, 0.030123f, 0.004982f, 0.026920f, 0.040383f, 0.013075f, -0.041518f, -0.011232f, 0.046620f, 0.108542f, 0.003573f, -0.027391f, 0.045095f, 0.004208f, 0.053187f, 0.008924f, 0.072009f, -0.018270f, -0.002925f, -0.001609f, 0.016785f, 0.002832f, 0.027634f, 0.050987f, 0.002952f, -0.010342f, -0.009091f, 0.016505f, -0.013812f, -0.005525f, 0.032977f, 0.024551f, 0.003552f, -0.005768f, -0.012553f, -0.013580f, -0.008661f, -0.010956f, 0.023721f, -0.014304f, -0.010382f, 0.012249f, 0.004119f, -0.004069f, 0.010535f, 0.012614f, -0.006901f, 0.010899f, 0.016769f, -0.008266f, 0.000946f, -0.023477f, 0.030111f, 0.000371f, 0.024169f, 0.002151f, -0.025615f, 0.000705f, 0.002414f, 0.007233f, 0.002483f, 0.000561f, -0.022076f, -0.019642f, -0.001483f, -0.011172f, 0.015828f, 0.006505f, -0.007751f, -0.000127f, + 0.012366f, 0.003230f, -0.007639f, 0.001372f, 0.008849f, 0.000770f, -0.004779f, 0.004147f, 0.148822f, 0.045960f, 0.016181f, -0.005026f, -0.016334f, -0.021751f, 0.048378f, 0.044312f, -0.051767f, 0.030187f, 0.022868f, 0.004902f, -0.015846f, -0.027720f, -0.070481f, -0.026720f, 0.022139f, 0.006874f, -0.022873f, 0.041945f, -0.014066f, 0.016715f, 0.016669f, -0.010691f, -0.010225f, 0.043777f, 0.000865f, -0.017297f, 0.027322f, -0.024559f, 0.053982f, -0.027084f, -0.016465f, -0.003438f, 0.020868f, 0.010749f, 0.054600f, -0.017384f, -0.033147f, -0.012177f, 0.014207f, 0.003261f, 0.029108f, 0.007563f, 0.002270f, -0.012485f, 0.023392f, 0.102542f, 0.043496f, -0.038841f, 0.032747f, -0.020635f, -0.031617f, 0.024880f, -0.001469f, 0.006861f, -0.002416f, 0.017759f, -0.027663f, -0.042108f, -0.110475f, -0.029563f, 0.038915f, -0.015137f, -0.038180f, 0.015929f, -0.009201f, 0.015855f, -0.044511f, -0.039268f, -0.018631f, 0.015975f, 0.017133f, 0.051913f, 0.008818f, -0.004334f, -0.041556f, -0.058836f, -0.007683f, -0.026816f, 0.004625f, 0.020324f, -0.028195f, -0.029183f, -0.006598f, -0.036152f, -0.059684f, -0.020374f, + -0.016204f, -0.032350f, -0.007856f, 0.016891f, -0.017003f, -0.009426f, -0.019481f, -0.005140f, -0.042674f, -0.027598f, -0.027358f, 0.000038f, 0.003419f, 0.014525f, -0.024096f, 0.012541f, -0.032328f, 0.000581f, -0.019247f, -0.003189f, 0.009347f, -0.010600f, 0.014444f, -0.042622f, -0.008832f, 0.013463f, 0.005427f, 0.012303f, -0.005865f, -0.012237f, 0.019940f, -0.004890f, -0.004832f, 0.013469f, -0.021494f, -0.017468f, -0.003671f, 0.003076f, -0.028349f, -0.014081f, -0.015729f, -0.009349f, -0.002983f, -0.001274f, 0.001729f, -0.013450f, 0.000612f, -0.023257f, 0.033160f, -0.026393f, 0.091142f, 0.076532f, 0.035908f, -0.020766f, -0.031923f, 0.054744f, 0.046939f, -0.061240f, -0.012315f, -0.037466f, 0.052888f, -0.008788f, -0.074695f, -0.032451f, 0.026829f, 0.046982f, -0.086372f, 0.034912f, -0.059747f, 0.022391f, -0.035208f, -0.008953f, 0.041817f, -0.013818f, 0.006518f, 0.026823f, 0.055666f, -0.036092f, -0.060755f, 0.013878f, -0.004624f, 0.006876f, 0.057055f, 0.014579f, 0.042621f, -0.053541f, -0.009765f, 0.017520f, -0.047833f, 0.078694f, -0.008991f, 0.047268f, -0.006402f, -0.010742f, 0.038711f, 0.038825f, + -0.022010f, 0.086669f, -0.020074f, -0.037299f, 0.041834f, 0.074521f, 0.004370f, 0.013755f, 0.003757f, 0.033051f, -0.034763f, 0.026582f, 0.112810f, 0.052149f, -0.003366f, 0.049546f, 0.060783f, -0.044566f, -0.137667f, 0.010798f, 0.083271f, 0.094313f, 0.025859f, -0.008678f, -0.040456f, 0.049164f, 0.103926f, 0.048848f, 0.025458f, -0.101260f, 0.019345f, -0.057166f, -0.035726f, -0.089202f, 0.076357f, 0.017055f, -0.026124f, -0.035183f, 0.026948f, -0.025278f, 0.014663f, 0.010748f, 0.013674f, -0.032687f, -0.006922f, -0.003569f, 0.017896f, -0.010866f, 0.015153f, 0.013707f, -0.014994f, -0.009169f, 0.020985f, 0.001553f, 0.022515f, -0.008844f, 0.008453f, -0.013985f, 0.008078f, 0.042936f, 0.008095f, 0.008658f, -0.005232f, -0.044633f, -0.022851f, -0.027240f, 0.015115f, 0.077333f, 0.072231f, 0.066048f, -0.004992f, -0.046565f, -0.044799f, -0.020474f, 0.030384f, 0.034746f, -0.002432f, -0.014813f, -0.024208f, -0.034368f, 0.009405f, 0.020782f, 0.016515f, 0.016506f, 0.012151f, 0.001347f, 0.062995f, -0.125437f, 0.095299f, 0.019600f, -0.057662f, 0.000566f, 0.053164f, -0.035802f, 0.001224f, 0.029433f, + -0.037567f, 0.002964f, -0.033800f, -0.021468f, 0.035068f, -0.030583f, -0.017613f, -0.064014f, 0.027289f, 0.061839f, 0.017081f, -0.028078f, -0.047730f, -0.007746f, 0.035189f, 0.019080f, -0.040850f, -0.001240f, 0.048307f, -0.006609f, 0.002886f, -0.016774f, -0.012377f, 0.114340f, -0.055419f, -0.014168f, -0.013253f, 0.019101f, 0.052676f, -0.056665f, -0.032258f, 0.075202f, -0.009449f, -0.004962f, -0.090727f, -0.074656f, 0.030601f, 0.050546f, 0.027071f, -0.092438f, 0.062653f, -0.001803f, -0.014794f, 0.013123f, -0.066704f, -0.018396f, -0.009274f, -0.032816f, 0.058657f, -0.046460f, -0.026510f, -0.049943f, -0.029576f, -0.065819f, 0.019036f, -0.102860f, -0.029637f, 0.011979f, -0.052014f, 0.012577f, 0.027609f, 0.012439f, -0.001619f, -0.018481f, -0.037868f, 0.054352f, -0.012733f, -0.005291f, -0.020511f, 0.032905f, 0.065014f, 0.009882f, -0.090141f, 0.007851f, -0.040722f, 0.005939f, 0.007222f, -0.016272f, 0.005170f, -0.026694f, -0.010094f, -0.002247f, -0.021326f, 0.000400f, -0.006914f, 0.015701f, 0.012824f, -0.004846f, 0.005872f, 0.029223f, -0.014363f, -0.010428f, 0.028622f, -0.021604f, 0.018574f, -0.010440f, + -0.011310f, 0.002290f, -0.013964f, -0.006034f, 0.016863f, -0.035286f, 0.009345f, 0.008454f, 0.011784f, 0.025484f, -0.019206f, 0.003195f, 0.017550f, 0.007069f, -0.007882f, -0.016531f, -0.004769f, -0.003835f, -0.001030f, -0.016923f, 0.003644f, -0.002754f, -0.071860f, 0.043824f, -0.001184f, 0.056682f, -0.011500f, 0.058626f, 0.007475f, -0.007313f, 0.026294f, 0.068002f, 0.032637f, 0.017550f, 0.013700f, 0.008830f, 0.026828f, -0.033986f, -0.002634f, -0.025447f, -0.026762f, 0.041890f, 0.026098f, 0.016132f, -0.011876f, -0.010326f, -0.004816f, 0.043803f, 0.006812f, -0.019159f, -0.031428f, -0.001280f, -0.007338f, 0.032981f, 0.005118f, 0.027607f, 0.051686f, -0.014215f, -0.130492f, 0.008730f, 0.106278f, 0.011222f, -0.077742f, -0.009944f, 0.030118f, 0.023686f, 0.041829f, 0.038042f, -0.002972f, -0.024516f, -0.025127f, 0.033303f, -0.020058f, 0.003816f, 0.011745f, -0.135541f, -0.023389f, -0.025995f, 0.021665f, 0.106681f, -0.001824f, 0.008633f, -0.024614f, 0.007309f, 0.022112f, 0.044779f, 0.023486f, -0.026384f, -0.013777f, -0.065812f, -0.003865f, 0.045307f, -0.019848f, -0.009375f, 0.016802f, 0.046013f, + 0.037405f, -0.009904f, -0.046678f, 0.000295f, 0.017222f, 0.005220f, -0.030970f, 0.003847f, 0.003911f, -0.002358f, -0.026716f, -0.034818f, 0.030374f, 0.024822f, -0.001115f, -0.005455f, -0.026120f, 0.020821f, 0.008766f, 0.004736f, 0.008253f, 0.006632f, 0.012228f, 0.000769f, -0.028940f, 0.016265f, 0.000975f, -0.001831f, 0.001845f, 0.007734f, 0.003873f, -0.003955f, 0.000137f, 0.001122f, -0.009358f, -0.005655f, -0.040058f, 0.006317f, 0.028653f, -0.020012f, 0.010371f, -0.032609f, 0.018588f, 0.008478f, -0.004610f, -0.009039f, -0.003040f, -0.003229f, 0.004112f, -0.007191f, 0.036487f, -0.004508f, -0.214414f, -0.403075f, -0.162144f, -0.272890f, -0.313610f, 0.194619f, 0.067858f, 0.178798f, 0.538112f, 0.352155f, 0.284086f, 0.425919f, 0.212474f, 0.013514f, 0.168270f, 0.041742f, -0.170824f, -0.120063f, -0.136191f, -0.312503f, -0.253958f, -0.109841f, -0.227441f, -0.250548f, -0.103793f, -0.154296f, -0.258764f, -0.133813f, 0.019690f, -0.162776f, -0.149073f, 0.032592f, -0.032539f, -0.148455f, 0.165788f, 0.108207f, -0.124833f, 0.122999f, 0.186618f, 0.028102f, 0.106551f, 0.375404f, 0.178049f, 0.112383f, + 0.441516f, 0.309393f, 0.178912f, 0.435353f, 0.583579f, 0.361288f, 0.523263f, 0.677995f, 0.484290f, 0.321184f, 0.423281f, 0.222775f, -0.216164f, -0.142359f, -0.285416f, -0.664324f, -0.666290f, -0.674731f, -1.018542f, -1.005603f, -1.010484f, -1.052519f, -0.993834f, -0.966629f, -0.761146f, -0.609198f, -0.460908f, -0.190017f, 0.055460f, 0.147467f, 0.375563f, 0.652913f, 0.552991f, 0.741616f, 1.054446f, 0.886441f, 0.827678f, 1.008003f, 0.746515f, 0.382930f, 0.414784f, 0.389349f, 0.145797f, 0.103869f, 0.208687f, 0.077123f, -0.018712f, 0.069799f, 0.024516f, -0.145540f, -0.130304f, -0.078529f, -0.260346f, -0.298821f, -0.130731f, -0.227397f, -0.313201f, -0.129454f, -0.083501f, -0.170732f, -0.002874f, 0.054816f, -0.056753f, -0.008707f, -0.041990f, -0.238944f, -0.344345f, -0.385754f, -0.481941f, -0.567170f, -0.509275f, -0.465417f, -0.433583f, -0.325399f, -0.207459f, -0.147681f, -0.027179f, 0.114634f, 0.178183f, 0.258602f, 0.425824f, 0.517842f, 0.603846f, 0.647283f, 0.613128f, 0.546617f, 0.418021f, 0.285864f, 0.159457f, 0.022286f, -0.027186f, -0.046115f, -0.075241f, -0.084670f, -0.086381f, -0.099991f, + -0.106186f, -0.095822f, -0.086290f, -0.095753f, -0.102771f, -0.097821f, -0.102681f, -0.111933f, -0.107625f, -0.101584f, -0.078251f, -0.046440f, -0.028979f, -0.007332f, 0.009120f, 0.007347f, 0.003072f, 0.000817f}, + {-0.012942f, -0.001200f, 0.012109f, -0.010826f, 0.004172f, -0.018233f, 0.000179f, -0.006606f, 0.007318f, -0.006167f, 0.001657f, -0.004187f, -0.007634f, -0.001971f, -0.000739f, 0.005521f, 0.006916f, -0.006585f, -0.011469f, 0.005991f, 0.002037f, 0.004184f, 0.002519f, 0.004732f, -0.006650f, -0.004999f, 0.001178f, -0.001281f, 0.005962f, 0.004288f, -0.005089f, -0.001109f, 0.004541f, 0.008430f, 0.005187f, 0.000048f, -0.006642f, 0.003546f, -0.001152f, -0.003548f, 0.004648f, 0.001998f, -0.006102f, -0.005114f, -0.004148f, 0.003384f, -0.005979f, -0.003227f, 0.004995f, 0.001911f, -0.000197f, -0.006264f, 0.002281f, -0.005389f, -0.013858f, 0.001344f, -0.004730f, -0.008954f, 0.004085f, -0.002566f, -0.002570f, -0.003087f, 0.000174f, 0.006781f, 0.004083f, 0.002269f, 0.003086f, 0.005112f, -0.010442f, 0.005404f, -0.004165f, -0.004031f, -0.002323f, 0.003432f, 0.000646f, 0.007287f, 0.010630f, 0.004128f, 0.000807f, 0.001179f, -0.000176f, 0.006778f, -0.002894f, -0.000278f, 0.003313f, 0.000208f, -0.002836f, -0.002919f, 0.000951f, -0.000110f, -0.003199f, -0.001628f, 0.000984f, -0.000197f, -0.000437f, -0.001300f, + -0.001590f, 0.001026f, 0.000669f, 0.001115f, -0.000482f, 0.000368f, -0.000338f, -0.002984f, -0.001152f, 0.001312f, 0.002348f, -0.001361f, -0.001576f, 0.000501f, 0.027683f, -0.002312f, 0.005093f, 0.006110f, -0.002810f, 0.002890f, 0.011042f, -0.008571f, -0.001497f, 0.003172f, -0.004251f, -0.000820f, 0.008118f, -0.002594f, -0.001802f, -0.000541f, 0.003161f, -0.001527f, 0.003922f, -0.002715f, -0.002666f, -0.001219f, -0.006255f, -0.010705f, -0.001996f, -0.003421f, -0.001414f, 0.006336f, -0.011335f, 0.013983f, 0.000110f, 0.000262f, 0.000506f, 0.002655f, -0.000311f, -0.005350f, 0.000872f, 0.004322f, 0.010565f, 0.000543f, -0.000050f, -0.001588f, -0.003526f, 0.007022f, 0.003355f, -0.002543f, 0.003894f, -0.006963f, 0.001220f, 0.002242f, -0.005251f, -0.018128f, -0.005650f, -0.000440f, -0.001037f, -0.000851f, -0.001566f, -0.002298f, -0.001284f, -0.003437f, 0.004478f, 0.013381f, 0.007608f, 0.000597f, 0.000009f, -0.000347f, 0.004707f, -0.002724f, -0.012156f, -0.000412f, -0.006314f, 0.004005f, -0.007168f, 0.004083f, -0.017557f, -0.000102f, -0.002469f, 0.005982f, 0.009625f, -0.001462f, -0.002245f, 0.001446f, + -0.000002f, 0.005160f, 0.001930f, 0.000868f, 0.007020f, -0.005140f, -0.000638f, 0.000890f, 0.002539f, 0.000015f, 0.002589f, 0.000144f, 0.001673f, 0.000746f, -0.000294f, 0.000522f, -0.000582f, -0.000075f, 0.001512f, 0.002218f, 0.000313f, -0.000609f, -0.000818f, 0.000291f, -0.000335f, 0.001255f, 0.000950f, 0.000610f, -0.000363f, 0.000229f, 0.000899f, -0.024358f, -0.023488f, -0.008840f, -0.003479f, -0.003352f, 0.000020f, 0.005940f, 0.001418f, 0.004825f, -0.011030f, 0.005455f, 0.006873f, 0.006642f, 0.007789f, -0.006026f, 0.001675f, 0.018328f, -0.011336f, -0.000400f, -0.008075f, -0.011712f, -0.001401f, -0.000832f, 0.010155f, -0.004925f, 0.001069f, -0.008748f, 0.005609f, 0.003503f, 0.004404f, -0.019611f, 0.003025f, -0.003587f, -0.006878f, -0.001852f, -0.000094f, -0.014550f, -0.009420f, -0.008125f, -0.000653f, 0.012157f, 0.004218f, 0.004027f, 0.005843f, -0.005439f, 0.003440f, -0.004880f, 0.010396f, 0.015992f, -0.001496f, -0.001471f, 0.004550f, 0.001119f, 0.004139f, 0.008986f, -0.004213f, 0.009297f, -0.001452f, -0.000286f, 0.005505f, 0.007530f, -0.002846f, -0.010878f, -0.010003f, 0.003865f, + -0.001364f, -0.001869f, -0.004406f, 0.004938f, -0.008328f, 0.003096f, 0.006252f, 0.010553f, -0.006131f, 0.010119f, 0.006615f, 0.003291f, 0.005064f, 0.001221f, -0.001707f, -0.006817f, 0.004857f, -0.003208f, -0.006358f, -0.008042f, 0.003343f, -0.002651f, 0.004857f, 0.000852f, -0.003089f, -0.003754f, -0.001907f, 0.001599f, -0.001976f, -0.000708f, -0.002542f, -0.001128f, -0.000144f, 0.002473f, 0.001310f, -0.000080f, 0.001446f, 0.004875f, -0.000460f, 0.000013f, 0.002859f, -0.001540f, 0.000813f, -0.001074f, -0.000822f, 0.001402f, 0.002062f, 0.002062f, 0.001333f, -0.000031f, -0.000628f, 0.001521f, 0.000737f, 0.003337f, 0.004011f, -0.003184f, -0.000316f, 0.001755f, -0.026709f, 0.011460f, -0.011994f, 0.021337f, -0.019999f, 0.015590f, 0.007916f, -0.008349f, -0.010417f, -0.005831f, 0.004018f, 0.003611f, -0.005654f, 0.012554f, -0.004605f, -0.012134f, -0.002523f, 0.012987f, 0.008889f, -0.013276f, 0.002053f, -0.001725f, -0.013892f, -0.005801f, -0.008955f, -0.002151f, -0.010648f, -0.002886f, -0.004473f, -0.014664f, -0.005256f, 0.007338f, 0.010579f, -0.002123f, -0.012557f, -0.002601f, 0.008818f, -0.002795f, + 0.000263f, 0.000534f, 0.000155f, -0.012507f, -0.000412f, -0.001559f, -0.003197f, -0.000654f, 0.002155f, -0.008976f, 0.005048f, -0.009606f, -0.000248f, -0.000134f, 0.000160f, 0.007007f, 0.000109f, -0.003358f, 0.002847f, 0.004838f, 0.011658f, 0.005272f, 0.002623f, -0.003455f, -0.007289f, -0.006902f, -0.002880f, -0.007532f, -0.005398f, 0.004334f, 0.007621f, -0.005699f, -0.009468f, -0.006518f, 0.002959f, 0.001587f, -0.008882f, -0.003098f, 0.001070f, -0.007497f, -0.003452f, 0.000969f, 0.002248f, 0.002962f, -0.003466f, -0.004169f, -0.005680f, 0.000156f, -0.000721f, -0.002224f, 0.001716f, -0.001916f, -0.000670f, -0.004360f, -0.000993f, -0.001501f, 0.003751f, 0.001814f, -0.001572f, 0.001804f, -0.000260f, 0.000537f, -0.001876f, 0.000167f, -0.001127f, -0.000137f, -0.001566f, -0.002915f, 0.002034f, -0.000243f, -0.002770f, -0.001758f, -0.000296f, -0.002547f, -0.002942f, 0.032686f, 0.013069f, -0.002068f, 0.007492f, -0.005118f, 0.018366f, 0.007838f, 0.032995f, 0.000745f, -0.031717f, 0.008287f, 0.019404f, -0.011347f, 0.003485f, 0.013419f, -0.010112f, 0.009505f, -0.008181f, -0.001659f, -0.010112f, -0.009585f, + -0.002981f, 0.002846f, -0.000962f, 0.004554f, -0.004283f, 0.014253f, -0.008342f, 0.004139f, 0.002692f, 0.009331f, -0.016729f, -0.008609f, -0.006545f, -0.001828f, -0.005870f, 0.001750f, 0.010348f, 0.007493f, 0.016383f, -0.002216f, -0.001132f, -0.009117f, -0.002977f, 0.010464f, -0.009965f, 0.008676f, -0.009319f, -0.003767f, 0.015036f, 0.021792f, 0.015559f, 0.002905f, -0.011332f, 0.008186f, 0.006009f, -0.005878f, 0.012647f, -0.008106f, 0.002546f, 0.002185f, -0.022923f, -0.000001f, -0.021727f, -0.008567f, 0.003533f, -0.005559f, -0.010343f, -0.008675f, 0.001873f, 0.015179f, 0.003787f, -0.005901f, -0.007549f, -0.006471f, 0.001555f, 0.002648f, 0.007207f, -0.011114f, -0.010167f, 0.000926f, -0.001927f, 0.000910f, -0.002895f, -0.001451f, -0.001785f, -0.000743f, 0.003432f, 0.001118f, 0.001594f, -0.001232f, -0.002327f, -0.002056f, 0.000700f, 0.006221f, 0.002020f, 0.004594f, 0.001408f, -0.006587f, 0.005186f, 0.002584f, 0.000964f, 0.001274f, 0.003004f, -0.000412f, 0.002590f, 0.000782f, -0.000047f, -0.001854f, -0.001563f, -0.002665f, 0.000881f, 0.003137f, -0.000542f, -0.001108f, -0.001599f, -0.009415f, + -0.001090f, -0.000885f, 0.000330f, -0.001219f, 0.020236f, 0.040957f, -0.017802f, -0.013224f, -0.003566f, -0.004790f, 0.014290f, -0.013609f, -0.024808f, -0.008592f, 0.001757f, -0.006067f, 0.007150f, 0.003385f, 0.012392f, 0.005199f, -0.004937f, 0.017812f, 0.016703f, -0.007680f, 0.001229f, -0.011472f, -0.001935f, 0.000642f, -0.007056f, -0.001363f, 0.012467f, 0.017879f, 0.000730f, 0.002950f, 0.007365f, 0.004710f, 0.002887f, 0.001231f, -0.006751f, -0.012830f, 0.001491f, -0.018459f, 0.000678f, 0.004250f, -0.005874f, 0.007262f, -0.004667f, -0.010202f, -0.000786f, 0.009948f, 0.004409f, -0.004447f, 0.030171f, -0.000081f, 0.009739f, -0.017948f, -0.003994f, 0.012326f, -0.005763f, -0.013287f, 0.007829f, -0.015572f, -0.013964f, 0.003191f, 0.017117f, -0.013994f, -0.007869f, -0.004129f, 0.000716f, -0.006332f, -0.006313f, 0.023094f, 0.013506f, -0.002081f, 0.001289f, -0.010857f, -0.007783f, -0.004409f, 0.006942f, 0.009138f, 0.000802f, 0.007329f, 0.004733f, -0.001472f, 0.006796f, -0.006234f, 0.023050f, 0.013074f, 0.002542f, 0.000752f, 0.002126f, -0.003882f, -0.001489f, -0.003864f, -0.004092f, -0.000108f, + -0.000149f, -0.003718f, 0.001991f, -0.005617f, -0.001696f, 0.004408f, -0.001576f, 0.004518f, 0.002570f, 0.004276f, 0.000180f, 0.002958f, 0.003359f, 0.003065f, 0.000579f, 0.005075f, 0.001665f, 0.000727f, -0.003655f, 0.000392f, -0.001354f, -0.000026f, 0.000252f, 0.001847f, -0.000244f, 0.001687f, -0.003485f, -0.000117f, 0.016164f, -0.029109f, -0.003957f, -0.021875f, -0.012478f, -0.019821f, -0.005080f, -0.003084f, -0.003017f, -0.007649f, 0.008792f, -0.027909f, 0.014285f, -0.009549f, 0.008479f, 0.003679f, 0.011588f, 0.000607f, 0.004785f, -0.011277f, -0.004802f, 0.005160f, -0.011223f, -0.008164f, 0.013660f, 0.003734f, 0.006169f, 0.005460f, -0.001434f, 0.003642f, 0.020353f, -0.007348f, 0.001933f, -0.009230f, 0.016364f, -0.009939f, -0.036443f, 0.011237f, 0.005705f, 0.015291f, 0.008262f, 0.021087f, -0.014289f, -0.005689f, 0.012729f, -0.005333f, -0.012220f, -0.005797f, 0.006615f, -0.017728f, 0.017469f, -0.000644f, 0.011638f, -0.014970f, -0.006575f, -0.005452f, -0.016215f, -0.003323f, -0.012895f, -0.005894f, 0.001355f, 0.018631f, 0.015004f, -0.001716f, -0.022889f, -0.013059f, -0.004226f, 0.018098f, + 0.014972f, 0.010898f, 0.010083f, -0.006436f, -0.026492f, -0.006790f, -0.000790f, 0.006187f, -0.008377f, -0.002617f, 0.013532f, -0.002602f, 0.015997f, 0.000190f, 0.011078f, 0.004235f, 0.000518f, -0.004099f, -0.000442f, 0.006028f, 0.001595f, -0.002820f, 0.000534f, -0.007323f, -0.001273f, -0.000429f, -0.009805f, -0.005869f, -0.006274f, -0.003060f, 0.001915f, -0.003943f, 0.001567f, -0.005282f, -0.000705f, -0.001550f, -0.002881f, 0.004283f, 0.002057f, -0.000910f, -0.006681f, -0.002588f, 0.002641f, 0.004364f, 0.000057f, -0.006484f, -0.003451f, 0.001468f, 0.003323f, 0.000922f, 0.001597f, 0.000492f, -0.038306f, -0.046237f, -0.026205f, 0.018708f, 0.001342f, -0.008780f, -0.009936f, -0.014900f, -0.001733f, 0.004804f, -0.025865f, -0.002642f, 0.016057f, -0.010102f, -0.007224f, 0.017943f, 0.004602f, -0.012135f, 0.004405f, -0.011749f, 0.026729f, -0.008867f, -0.006556f, 0.008520f, -0.014147f, -0.008948f, -0.008362f, 0.004374f, -0.009870f, -0.003815f, 0.004349f, 0.003073f, -0.031732f, 0.013945f, 0.013609f, -0.009270f, 0.024303f, 0.009226f, 0.002187f, 0.023279f, 0.013242f, 0.004018f, 0.003144f, 0.025185f, + -0.002665f, -0.004491f, -0.001844f, 0.015413f, 0.008584f, -0.023138f, 0.008775f, 0.007036f, -0.000299f, -0.012398f, -0.037202f, 0.016203f, -0.002565f, -0.009286f, -0.023374f, -0.013275f, 0.014164f, -0.003181f, -0.006891f, -0.015630f, -0.030271f, 0.002911f, -0.004289f, -0.016144f, -0.006850f, -0.028645f, -0.004665f, -0.006543f, -0.005496f, -0.001353f, 0.010125f, 0.021761f, 0.009287f, -0.007452f, -0.015750f, 0.005945f, 0.001006f, 0.009006f, 0.005658f, -0.003659f, 0.006590f, 0.002310f, -0.000804f, -0.008612f, 0.000702f, -0.013938f, -0.000901f, -0.003162f, 0.002222f, -0.005463f, 0.006458f, 0.003725f, -0.001590f, -0.001258f, -0.001378f, 0.000817f, -0.003190f, -0.000928f, 0.003701f, -0.001609f, -0.001424f, 0.007017f, -0.002857f, -0.001953f, 0.005692f, -0.004532f, 0.003427f, -0.011681f, -0.007548f, -0.004371f, -0.006172f, -0.000743f, -0.006129f, -0.008258f, -0.006090f, -0.001841f, -0.001276f, 0.002627f, -0.000302f, -0.005094f, 0.002879f, 0.000961f, -0.039431f, 0.031735f, 0.001788f, 0.016224f, -0.002887f, -0.001312f, 0.002995f, 0.017526f, 0.001748f, -0.002169f, -0.023808f, 0.008491f, -0.002597f, -0.018396f, + 0.004834f, -0.012015f, -0.009225f, 0.034179f, 0.009737f, 0.010534f, -0.007347f, 0.012252f, 0.014801f, 0.014295f, -0.008257f, 0.012484f, 0.006504f, -0.014367f, 0.009407f, -0.013972f, -0.004796f, 0.008955f, 0.004274f, -0.001428f, -0.007721f, -0.007274f, 0.022765f, -0.006590f, -0.009932f, -0.006366f, 0.004691f, 0.004961f, -0.010806f, -0.018305f, -0.001282f, -0.019643f, -0.002266f, -0.017709f, -0.006633f, -0.004188f, 0.003550f, -0.009015f, -0.015285f, 0.019413f, -0.007946f, -0.021337f, 0.013733f, 0.022813f, -0.010957f, -0.007285f, 0.011620f, 0.008394f, 0.022685f, 0.014634f, 0.002383f, -0.000198f, -0.023128f, 0.005630f, 0.022365f, 0.017923f, -0.015703f, 0.017089f, 0.018592f, -0.012342f, -0.034381f, -0.011109f, -0.030779f, 0.005215f, 0.017853f, 0.008959f, 0.002273f, -0.009258f, -0.012367f, -0.001376f, 0.001768f, 0.005382f, -0.002680f, 0.010126f, -0.004386f, -0.003547f, 0.004117f, 0.010720f, -0.015600f, -0.002082f, -0.001833f, -0.004794f, 0.000281f, 0.004316f, -0.000709f, -0.000487f, -0.002306f, -0.000304f, -0.002326f, 0.000887f, -0.000008f, -0.000335f, 0.001702f, 0.005597f, -0.004647f, -0.002787f, + 0.003413f, 0.003597f, 0.011991f, -0.001143f, 0.005150f, 0.004649f, -0.004830f, 0.004203f, 0.002136f, -0.004418f, 0.001405f, 0.001741f, 0.001648f, 0.004785f, 0.010538f, 0.002195f, -0.003172f, 0.006883f, -0.001860f, -0.003835f, 0.000880f, 0.007722f, -0.062732f, 0.030263f, 0.008672f, -0.002819f, 0.042549f, -0.002366f, 0.021609f, -0.018817f, -0.004294f, 0.003485f, 0.000417f, 0.024381f, 0.015565f, -0.032782f, 0.020707f, 0.001691f, 0.012494f, -0.029515f, -0.001008f, 0.017273f, -0.028957f, 0.036558f, 0.010020f, -0.000254f, -0.012859f, 0.002313f, 0.015928f, -0.025980f, 0.002561f, 0.006806f, 0.004772f, -0.015968f, -0.005810f, 0.015370f, 0.008775f, -0.001505f, 0.002421f, -0.010459f, -0.017961f, 0.007627f, -0.030471f, -0.001139f, 0.044030f, 0.042963f, -0.013557f, 0.005440f, -0.001731f, 0.012389f, 0.030978f, 0.002723f, 0.014894f, 0.005024f, -0.016050f, -0.001092f, -0.002951f, -0.046402f, -0.020874f, 0.028922f, 0.001466f, 0.009003f, -0.011104f, -0.002732f, 0.010374f, 0.014065f, -0.001138f, 0.035964f, 0.000647f, 0.028078f, 0.003610f, 0.006016f, 0.003779f, -0.018181f, -0.022865f, 0.028433f, + 0.006685f, -0.014649f, 0.020673f, -0.016717f, 0.001650f, 0.017505f, 0.002942f, -0.004336f, 0.008220f, -0.007353f, -0.007050f, 0.008821f, 0.012056f, 0.000968f, -0.015893f, -0.007591f, -0.017132f, -0.006047f, 0.004383f, 0.005671f, 0.002898f, -0.006562f, -0.003018f, -0.012297f, 0.009073f, -0.000034f, -0.004902f, -0.002156f, 0.003879f, 0.002202f, 0.011224f, 0.010071f, 0.006554f, 0.006591f, 0.002302f, 0.008026f, -0.005199f, 0.003761f, 0.004347f, 0.004173f, -0.004529f, 0.008110f, 0.004313f, -0.001060f, -0.001343f, -0.001949f, -0.001880f, -0.003514f, 0.021058f, -0.045817f, 0.018408f, 0.028867f, -0.003997f, 0.008586f, 0.012987f, -0.007007f, -0.004440f, 0.017815f, -0.006715f, 0.027034f, -0.025736f, 0.014064f, 0.033415f, -0.035813f, 0.001444f, -0.017032f, 0.021104f, 0.008911f, 0.017502f, -0.018121f, -0.014165f, -0.000205f, 0.045156f, 0.000524f, 0.022842f, -0.010133f, 0.001374f, -0.003104f, -0.004024f, -0.020044f, -0.000787f, -0.005620f, 0.009188f, -0.008945f, -0.013019f, -0.010918f, -0.000844f, -0.003799f, 0.020388f, 0.003518f, -0.011300f, -0.010223f, -0.010406f, -0.003792f, -0.004969f, 0.033319f, + 0.001429f, 0.016741f, 0.001122f, -0.007987f, -0.007315f, 0.027716f, 0.020642f, -0.007961f, -0.026125f, 0.014755f, 0.010110f, -0.057515f, 0.003311f, 0.032482f, 0.031628f, 0.007404f, 0.025142f, -0.034690f, 0.056842f, 0.005013f, 0.010849f, 0.011278f, 0.027094f, -0.002102f, -0.024362f, -0.007367f, -0.028779f, 0.032733f, -0.014502f, -0.009660f, 0.028493f, -0.000823f, -0.011273f, -0.008653f, -0.021512f, 0.020372f, -0.035084f, -0.005105f, 0.003320f, -0.000817f, 0.004933f, -0.007226f, -0.015095f, -0.009531f, 0.004616f, 0.003900f, -0.007169f, 0.001874f, -0.006843f, -0.007262f, -0.005464f, 0.006493f, 0.003297f, -0.008247f, 0.007664f, 0.001631f, -0.010180f, 0.004645f, -0.001929f, -0.003487f, -0.007792f, -0.008680f, 0.001573f, 0.004329f, 0.018045f, -0.007869f, 0.010646f, 0.001401f, -0.003721f, -0.001217f, -0.002248f, -0.004690f, 0.002659f, -0.000418f, -0.005524f, -0.001709f, -0.003870f, 0.001564f, 0.003546f, 0.003077f, 0.017322f, -0.034221f, -0.027408f, 0.024052f, 0.020204f, 0.049683f, -0.017853f, -0.013445f, -0.009128f, 0.009170f, -0.021424f, -0.002795f, 0.008054f, -0.001732f, 0.026594f, 0.017041f, + -0.021727f, 0.001699f, 0.006045f, 0.015259f, -0.024712f, 0.025453f, -0.000678f, 0.011138f, -0.004586f, -0.011974f, -0.025913f, 0.008813f, -0.004696f, -0.011080f, 0.004914f, -0.016005f, -0.015567f, -0.003692f, 0.007798f, 0.030886f, -0.046611f, -0.028306f, -0.025259f, -0.028351f, -0.008225f, 0.032035f, -0.019357f, -0.001146f, 0.031534f, -0.004932f, -0.014602f, -0.027831f, -0.007705f, -0.012144f, -0.057279f, -0.044521f, -0.012757f, 0.009729f, -0.005716f, 0.009699f, -0.012936f, -0.009399f, 0.026804f, 0.016079f, -0.028782f, -0.014997f, -0.032182f, -0.012959f, 0.002341f, 0.012493f, -0.005994f, 0.003143f, -0.027502f, -0.022058f, -0.020161f, -0.000835f, 0.004369f, 0.001442f, -0.026045f, 0.000568f, 0.034376f, 0.014680f, 0.039281f, -0.031436f, 0.048070f, 0.004008f, -0.030342f, -0.005271f, 0.001105f, 0.008214f, -0.005329f, 0.012897f, -0.018666f, 0.008457f, -0.016565f, 0.007413f, 0.010842f, -0.003776f, 0.024476f, -0.002338f, 0.005560f, -0.006945f, -0.009227f, -0.005312f, 0.000436f, 0.005332f, -0.009744f, -0.001949f, 0.002902f, -0.002369f, 0.009238f, -0.003110f, -0.005035f, -0.016249f, 0.006799f, 0.000766f, + 0.008101f, 0.003302f, -0.005629f, -0.015303f, 0.004590f, -0.019491f, 0.004624f, -0.005253f, -0.001053f, 0.001799f, -0.004392f, 0.001270f, 0.002778f, 0.013117f, 0.004982f, -0.006028f, -0.024444f, 0.004657f, -0.002694f, 0.056252f, 0.006129f, 0.027078f, -0.023476f, -0.015971f, -0.005776f, -0.026534f, -0.016837f, -0.025632f, -0.011911f, -0.016624f, 0.030533f, 0.007640f, 0.007707f, 0.031433f, -0.000835f, -0.001832f, 0.014222f, 0.028278f, 0.044278f, 0.032333f, -0.006639f, -0.012053f, -0.050965f, 0.014013f, 0.015996f, 0.006183f, -0.031771f, 0.036717f, 0.014680f, 0.021555f, -0.006005f, 0.002003f, 0.020914f, 0.045869f, 0.044739f, 0.025738f, 0.005442f, 0.047690f, 0.001273f, -0.014296f, 0.015534f, 0.028898f, 0.023558f, 0.042884f, 0.022729f, 0.000907f, 0.005216f, -0.025966f, 0.011286f, -0.064817f, -0.011050f, -0.006567f, 0.014414f, 0.050839f, 0.028698f, 0.007440f, 0.037044f, -0.026932f, -0.024292f, 0.005160f, -0.062794f, -0.015101f, 0.002661f, 0.011975f, 0.014631f, 0.016539f, -0.003707f, 0.027499f, 0.003527f, 0.014173f, 0.051020f, -0.031468f, -0.016231f, -0.008775f, 0.009790f, -0.006088f, + -0.048001f, -0.009204f, 0.032872f, -0.002506f, 0.041670f, -0.022452f, 0.001230f, 0.017071f, -0.003943f, 0.004687f, -0.017271f, -0.008649f, -0.013390f, -0.009143f, -0.014866f, -0.012432f, 0.003337f, 0.002398f, -0.029912f, -0.014115f, -0.016818f, -0.004701f, 0.005607f, 0.008869f, -0.013299f, -0.000761f, 0.004086f, -0.021319f, 0.003214f, -0.008714f, -0.013756f, -0.007479f, 0.001145f, 0.004916f, -0.009419f, -0.002653f, -0.014446f, -0.001414f, -0.003833f, -0.004996f, -0.010526f, -0.015831f, 0.003983f, 0.004851f, -0.008424f, -0.006219f, -0.006174f, -0.005049f, 0.002860f, 0.009925f, 0.002935f, 0.002901f, -0.043286f, -0.013577f, 0.007978f, 0.032893f, 0.060344f, -0.024128f, 0.001154f, 0.010053f, -0.010959f, 0.055939f, 0.009992f, -0.027416f, 0.049021f, -0.009995f, -0.016330f, 0.035120f, -0.031694f, -0.018491f, 0.002226f, 0.003167f, 0.004450f, 0.023039f, 0.012359f, 0.018716f, -0.005613f, 0.009975f, 0.028137f, 0.001812f, 0.019211f, 0.003610f, 0.000820f, 0.031097f, -0.040401f, -0.014613f, -0.013649f, 0.027081f, -0.020558f, -0.005265f, -0.012080f, 0.026821f, -0.011263f, 0.059546f, 0.043552f, -0.040406f, + 0.019922f, -0.048570f, 0.007062f, 0.017681f, 0.009547f, 0.010616f, -0.061950f, -0.011941f, -0.059746f, 0.008030f, 0.005010f, 0.007388f, -0.009374f, -0.010751f, 0.028687f, -0.051569f, 0.017841f, -0.022277f, -0.097243f, -0.036347f, -0.031779f, 0.016109f, -0.014105f, 0.014899f, 0.048777f, 0.052020f, 0.029485f, 0.027415f, 0.025430f, 0.007471f, -0.038628f, 0.040725f, 0.000136f, -0.044852f, -0.035700f, -0.056392f, -0.074759f, -0.038494f, -0.007510f, 0.059944f, 0.021638f, 0.003741f, 0.022993f, -0.018186f, -0.000365f, 0.011610f, 0.009627f, -0.004721f, 0.008832f, 0.002932f, 0.006144f, 0.002607f, -0.018443f, 0.015026f, 0.009970f, 0.007432f, 0.003028f, -0.009570f, 0.005307f, -0.014278f, -0.005080f, -0.022234f, 0.018656f, 0.014149f, -0.003020f, 0.002132f, 0.014935f, 0.023740f, -0.010584f, -0.022958f, -0.006945f, 0.018883f, -0.004120f, -0.013663f, 0.020115f, -0.001631f, -0.011609f, 0.013953f, 0.005603f, 0.001011f, -0.003400f, -0.000408f, -0.009854f, 0.006872f, -0.006271f, -0.002738f, 0.014419f, -0.077926f, -0.036612f, -0.027553f, 0.013505f, -0.059624f, 0.020337f, -0.035948f, 0.049352f, -0.059297f, + -0.074993f, -0.016837f, -0.011446f, 0.057470f, 0.027693f, 0.025177f, -0.015685f, 0.006030f, -0.036732f, -0.029691f, 0.005994f, 0.011455f, -0.047130f, -0.043910f, -0.030993f, -0.004609f, 0.022667f, 0.016092f, -0.033307f, -0.041854f, -0.024559f, -0.025018f, -0.056446f, -0.032928f, 0.023945f, -0.016267f, -0.001074f, -0.008420f, 0.017386f, 0.027999f, -0.008272f, -0.084215f, 0.034524f, 0.069087f, 0.025335f, -0.002260f, -0.084465f, -0.020707f, 0.035849f, -0.011139f, 0.092928f, -0.010704f, -0.076173f, 0.011759f, -0.013419f, 0.005558f, 0.001381f, -0.015785f, 0.019568f, 0.024412f, -0.080329f, -0.021938f, 0.003673f, 0.027540f, -0.015500f, -0.041230f, 0.035441f, 0.002969f, -0.027712f, -0.080007f, -0.092752f, -0.048026f, -0.006590f, 0.006161f, 0.073026f, 0.103529f, 0.052957f, 0.040249f, 0.017144f, -0.061001f, 0.021353f, -0.000849f, -0.032281f, -0.009639f, -0.100217f, -0.021499f, -0.001344f, 0.000238f, 0.002825f, 0.042907f, 0.015610f, 0.012450f, -0.018552f, -0.006214f, 0.037029f, -0.026194f, -0.001116f, -0.002051f, 0.006617f, -0.019556f, -0.032092f, -0.035595f, 0.014891f, -0.016850f, -0.006418f, 0.020110f, + 0.000055f, 0.002882f, -0.027475f, 0.008626f, 0.007971f, 0.004213f, -0.022738f, -0.011595f, -0.015214f, -0.023591f, 0.002427f, -0.013868f, 0.024253f, 0.009357f, -0.017716f, 0.002827f, -0.006999f, 0.016808f, -0.024116f, -0.003500f, -0.001724f, 0.011827f, 0.010318f, 0.005240f, 0.012610f, -0.000611f, 0.006353f, 0.140002f, 0.128588f, -0.054347f, 0.066684f, 0.059059f, -0.016675f, -0.010082f, -0.030755f, -0.016692f, -0.036140f, -0.025462f, 0.106694f, -0.005899f, 0.062151f, 0.000654f, 0.003009f, 0.000719f, -0.042133f, 0.009930f, 0.008720f, -0.092698f, 0.013791f, 0.022288f, -0.048703f, -0.010323f, -0.015004f, -0.006791f, 0.013722f, -0.002920f, 0.002852f, 0.040608f, 0.016570f, -0.020020f, 0.012611f, 0.064816f, 0.001126f, 0.029762f, -0.001546f, 0.024244f, -0.035774f, -0.043482f, -0.024158f, -0.079664f, 0.021331f, 0.008681f, -0.035237f, -0.096769f, -0.062991f, -0.090491f, 0.065840f, -0.047102f, 0.010354f, 0.016043f, 0.015036f, 0.012298f, 0.070269f, -0.067761f, 0.000504f, -0.038096f, 0.074388f, -0.166881f, 0.034307f, 0.012610f, 0.053424f, 0.048231f, 0.000378f, -0.015654f, -0.025362f, -0.007652f, + -0.048277f, 0.035260f, 0.098294f, -0.007768f, 0.020411f, 0.061661f, -0.043110f, 0.024307f, 0.030359f, -0.054819f, -0.037634f, -0.101394f, 0.083889f, -0.016585f, -0.073580f, 0.049157f, -0.012227f, 0.031992f, -0.002095f, 0.027679f, 0.004931f, -0.022012f, 0.034835f, 0.032879f, 0.005550f, 0.018681f, 0.031698f, 0.018395f, -0.021057f, -0.009477f, -0.020562f, -0.009536f, 0.026740f, 0.050502f, -0.002090f, -0.009812f, -0.001954f, 0.032260f, -0.051407f, 0.029120f, -0.013862f, 0.068411f, 0.013760f, -0.041455f, -0.008227f, 0.030080f, -0.015900f, -0.022010f, -0.015980f, -0.012942f, -0.015711f, 0.016232f, 0.012013f, 0.043469f, -0.036719f, 0.001706f, -0.004142f, 0.023475f, 0.001666f, -0.003731f, 0.014398f, 0.016739f, 0.013490f, 0.027967f, 0.003666f, 0.032314f, -0.048605f, -0.046088f, 0.056914f, -0.116019f, 0.079947f, -0.047866f, -0.033462f, -0.021059f, 0.007255f, -0.033615f, -0.026176f, 0.036339f, -0.011197f, -0.079361f, 0.027340f, -0.004890f, 0.014010f, -0.017892f, 0.070499f, -0.057574f, 0.002419f, 0.029253f, -0.020009f, 0.022155f, -0.046991f, 0.003851f, -0.040438f, -0.020482f, 0.043921f, 0.005634f, + 0.017586f, -0.024970f, 0.042459f, -0.012231f, -0.019849f, 0.016305f, -0.026037f, -0.021639f, -0.013922f, -0.014291f, -0.043883f, -0.058719f, -0.016369f, 0.032654f, 0.000504f, -0.018346f, -0.058672f, 0.002318f, -0.046374f, -0.003025f, 0.018669f, -0.045807f, -0.011295f, 0.033853f, 0.034290f, 0.024981f, -0.056937f, -0.026869f, 0.039258f, 0.012871f, -0.001088f, 0.031898f, -0.186870f, -0.043137f, -0.020822f, -0.084798f, 0.008378f, 0.023437f, -0.004958f, 0.015782f, 0.040098f, -0.022982f, -0.039694f, 0.010249f, -0.036031f, -0.010798f, 0.038940f, 0.061832f, -0.023358f, -0.074353f, -0.044901f, 0.004965f, -0.039689f, 0.006357f, -0.030774f, -0.028965f, 0.007829f, -0.059528f, 0.000784f, -0.037089f, -0.011363f, -0.020248f, 0.008448f, 0.015255f, -0.005826f, -0.036793f, 0.008285f, -0.002267f, -0.023219f, 0.029112f, -0.001095f, -0.027034f, -0.009249f, -0.006925f, -0.010139f, -0.018656f, 0.010396f, -0.017007f, 0.014302f, 0.019827f, -0.007518f, 0.002525f, -0.011281f, -0.025531f, -0.036283f, 0.006837f, 0.005108f, 0.017260f, -0.041998f, 0.009237f, 0.000127f, -0.026902f, 0.021350f, -0.010879f, 0.015405f, 0.034816f, + -0.076370f, 0.015990f, 0.011222f, 0.022773f, -0.012294f, -0.007257f, 0.025846f, 0.001428f, 0.125310f, -0.016094f, -0.034944f, 0.004581f, -0.014184f, 0.061994f, 0.011493f, -0.005459f, 0.058833f, 0.059720f, 0.019449f, 0.022994f, 0.032623f, -0.074028f, -0.041088f, 0.061075f, -0.008633f, -0.060797f, -0.030952f, -0.027687f, 0.041494f, 0.022208f, -0.022541f, -0.087713f, 0.026922f, 0.013567f, 0.011308f, 0.014208f, -0.010878f, 0.008724f, -0.065987f, 0.058554f, 0.040430f, 0.021505f, -0.033244f, -0.028086f, -0.000484f, 0.029253f, -0.006797f, 0.030432f, 0.012943f, -0.069375f, -0.031193f, 0.010826f, -0.070114f, 0.004025f, 0.012914f, -0.061433f, -0.086836f, -0.012191f, 0.025649f, -0.050315f, -0.105368f, -0.046026f, -0.027920f, 0.068053f, -0.041831f, 0.076814f, -0.016303f, 0.003582f, 0.032384f, 0.004480f, -0.118048f, -0.007844f, 0.004442f, 0.054934f, -0.105124f, -0.144617f, 0.010003f, -0.009411f, -0.092661f, 0.052063f, 0.024029f, -0.003415f, -0.000782f, 0.085165f, -0.122298f, 0.100038f, 0.020658f, 0.013452f, 0.040062f, -0.043774f, -0.040212f, -0.007519f, 0.018422f, -0.024841f, -0.002303f, 0.051448f, + -0.043974f, -0.034741f, 0.044928f, -0.025539f, -0.013263f, 0.019196f, 0.012045f, -0.050723f, 0.025461f, -0.016855f, -0.005094f, 0.018218f, 0.017222f, -0.053999f, -0.009284f, -0.041920f, 0.023137f, 0.033097f, 0.001717f, -0.069489f, 0.048955f, -0.011788f, -0.001570f, 0.030180f, -0.007962f, -0.025090f, -0.005048f, 0.039814f, -0.059944f, 0.041005f, 0.001763f, -0.004122f, 0.014485f, 0.008236f, -0.037671f, 0.017573f, -0.000625f, 0.002125f, -0.048963f, 0.033770f, -0.032215f, 0.037249f, 0.005053f, -0.043978f, 0.003209f, 0.006033f, -0.013192f, 0.006532f, 0.058915f, 0.023099f, 0.138647f, -0.057967f, -0.060469f, -0.025016f, -0.002187f, 0.131684f, -0.017994f, 0.109085f, -0.076108f, -0.029839f, 0.046350f, -0.082946f, -0.027130f, -0.078039f, 0.013214f, 0.079647f, -0.108980f, -0.039898f, -0.009021f, 0.033305f, -0.000545f, 0.012312f, 0.030670f, -0.007567f, -0.068920f, -0.063863f, 0.003625f, 0.045364f, 0.121904f, -0.026832f, 0.033370f, -0.034810f, 0.060402f, 0.002178f, 0.007451f, -0.016660f, -0.071271f, 0.002516f, 0.066574f, -0.011217f, -0.003422f, -0.024530f, -0.062102f, 0.082543f, 0.031829f, 0.055125f, + 0.074083f, -0.003460f, 0.004798f, 0.045875f, -0.117133f, 0.040817f, -0.058896f, 0.139399f, -0.012650f, 0.013887f, 0.021402f, -0.040431f, -0.040502f, 0.014186f, -0.058704f, 0.088541f, -0.051138f, -0.064895f, -0.065345f, 0.092583f, 0.031849f, 0.053740f, -0.011379f, 0.053691f, 0.054753f, -0.055110f, -0.015445f, -0.051093f, -0.026538f, 0.096497f, 0.068705f, 0.009271f, 0.019199f, -0.145466f, 0.100431f, 0.131448f, 0.015606f, -0.010266f, -0.024392f, -0.077907f, 0.113770f, -0.006256f, 0.008181f, -0.021931f, 0.003804f, -0.049039f, 0.106528f, -0.024936f, 0.052194f, 0.008638f, -0.017868f, -0.005771f, 0.102643f, -0.056013f, 0.050854f, 0.017216f, -0.042794f, 0.006452f, -0.013385f, 0.028629f, 0.008673f, 0.041837f, -0.016662f, 0.004839f, 0.008366f, 0.000048f, 0.041549f, 0.070708f, -0.021050f, -0.003012f, 0.008615f, 0.039126f, 0.011622f, -0.053350f, -0.035588f, 0.076576f, 0.015416f, 0.037891f, -0.073901f, -0.088875f, 0.083338f, 0.055604f, 0.026447f, -0.005648f, -0.068726f, -0.000756f, 0.012288f, -0.103395f, 0.070737f, -0.073532f, 0.008932f, -0.033883f, 0.027301f, -0.002854f, 0.038901f, -0.006258f, + -0.033649f, 0.057959f, -0.020352f, -0.008107f, 0.008916f, -0.024329f, -0.021143f, 0.066914f, -0.015788f, -0.009187f, -0.007835f, -0.003432f, 0.030701f, -0.023406f, 0.007231f, -0.017125f, 0.015325f, -0.014950f, -0.011402f, -0.035884f, 0.052490f, -0.032413f, 0.017404f, 0.008432f, 0.036364f, -0.040847f, 0.009137f, -0.016695f, 0.041248f, 0.005434f, 0.003270f, 0.032665f, 0.009715f, -0.054088f, -0.008016f, -0.009253f, 0.015017f, 0.023718f, 0.019785f, -0.049164f, 0.021043f, -0.037131f, 0.026255f, -0.021152f, 0.005559f, -0.012122f, 0.025916f, -0.010118f, 0.007485f, -0.054993f, 0.012969f, 0.026774f, -0.025262f, 0.025062f, 0.003376f, 0.009249f, 0.015544f, -0.022136f, 0.037987f, 0.015071f, -0.002192f, -0.011910f, 0.018429f, -0.011525f, 0.034448f, -0.028821f, -0.008679f, -0.027425f, 0.035668f, -0.035284f, 0.032391f, -0.029397f, 0.039402f, -0.033490f, 0.020630f, -0.033014f, 0.028964f, -0.002178f, 0.002947f, -0.009480f, 0.001498f, -0.005660f, -0.005176f, -0.010069f, 0.017182f, 0.006879f, -0.002447f, 0.005785f, -0.005334f, -0.009177f, 0.017253f, 0.002804f, 0.006503f, -0.011060f, 0.000625f, 0.017458f, + -0.020031f, -0.004718f, 0.011529f, 0.000416f, -0.006033f, -0.012696f, 0.031308f, -0.009766f, -0.015899f, 0.008337f, 0.002750f, -0.004814f, 0.003267f, -0.001634f, 0.002975f, -0.005173f, 0.004421f, -0.009079f, 0.015312f, -0.012582f, 0.017669f, 0.007940f, -0.043085f, 0.086971f, 0.007233f, 0.010913f, -0.034825f, -0.025660f, -0.055277f, 0.037008f, -0.015537f, -0.011314f, -0.024049f, -0.000979f, -0.021447f, -0.002703f, -0.002874f, 0.009671f, 0.010810f, -0.001746f, -0.002621f, -0.015750f, 0.014585f, 0.013638f, -0.013082f, 0.006093f, -0.029629f, 0.011738f, 0.005689f, -0.005228f, -0.004656f, -0.009920f, 0.009353f, 0.002023f, -0.021124f, -0.005709f, -0.006244f, -0.017529f, 0.028599f, 0.002956f, -0.018383f, 0.002751f, -0.007250f, 0.024929f, -0.008739f, -0.011731f, 0.004771f, -0.014953f, 0.029082f, 0.000791f, -0.016196f, 0.004568f, -0.006646f, 0.014211f, -0.018464f, -0.003694f, 0.005989f, -0.006730f, 0.012733f, -0.007340f, 0.003633f, 0.005766f, -0.016665f, 0.002277f, 0.016409f, -0.025245f, -0.001732f, 0.007605f, -0.023468f, 0.042571f, -0.039063f, 0.019419f, 0.006972f, -0.022310f, 0.043979f, -0.030015f, + 0.006995f, 0.005586f, -0.018711f, 0.014487f, -0.007692f, -0.014412f, 0.013975f, -0.017163f, 0.011064f, -0.007904f, -0.005884f, 0.012631f, -0.010615f, 0.004041f, -0.004351f, -0.000157f, 0.002393f, -0.005789f, 0.002628f, -0.000345f, -0.005701f, 0.011946f, -0.010269f, 0.008898f, 0.000255f, -0.008399f, 0.008113f, -0.014797f, -0.001502f, 0.003871f, -0.002510f, -0.002058f, 0.002009f, -0.007701f, 0.009337f, -0.004794f, -0.003424f, 0.000984f, 0.000902f, -0.006010f, -0.000982f, -0.003478f, 0.003179f, 0.004711f, -0.006836f, 0.005888f, -0.006529f, -0.001266f, 0.006166f, -0.004673f, 0.020324f, -0.093170f, -0.215098f, 0.056455f, 0.199125f, 0.168356f, 0.225905f, -0.111348f, -0.144298f, -0.217006f, -0.221800f, 0.015274f, 0.165390f, 0.182606f, 0.200034f, 0.066541f, -0.043509f, -0.158666f, -0.262704f, -0.143913f, 0.066854f, 0.103570f, 0.175241f, 0.132848f, 0.036311f, -0.023510f, -0.055323f, -0.131570f, -0.085247f, -0.081108f, -0.014848f, 0.069383f, 0.106335f, 0.056002f, 0.070999f, 0.035941f, -0.039958f, -0.006194f, -0.085480f, -0.118986f, -0.020338f, -0.027714f, 0.021023f, 0.112351f, 0.064743f, 0.055798f, + 0.016500f, -0.042012f, -0.043281f, -0.037269f, -0.061613f, -0.016095f, 0.002765f, 0.026498f, 0.032287f, 0.053769f, 0.015348f, -0.001836f, -0.027085f, -0.049955f, -0.004244f, 0.018059f, 0.018517f, 0.031552f, -0.007997f, -0.025059f, -0.012016f, -0.025093f, -0.019693f, 0.005410f, 0.014208f, 0.040399f, 0.034254f, 0.032739f, 0.001936f, -0.017499f, -0.065515f, -0.060906f, -0.024795f, 0.003951f, 0.050695f, 0.054372f, 0.022461f, 0.023080f, -0.002530f, -0.043773f, -0.026768f, -0.003123f, -0.010221f, 0.002393f, 0.004664f, 0.010575f, 0.008853f, -0.005628f, -0.014251f, 0.008496f, 0.013259f, 0.010866f, 0.011316f, -0.000995f, -0.008183f, -0.005101f, -0.022186f, -0.009131f, -0.012218f, -0.020898f, 0.012440f, 0.030408f, 0.035507f, 0.011761f, 0.012846f, -0.006885f, -0.008231f, -0.031743f, -0.047117f, -0.018185f, 0.005463f, 0.014752f, 0.018393f, 0.038695f, 0.036047f, 0.017444f, -0.014199f, -0.030285f, -0.034079f, -0.031986f, -0.023570f, -0.001620f, 0.028771f, 0.044395f, 0.035299f, 0.010190f, -0.016667f, -0.020152f, -0.019996f, -0.011676f, -0.007575f, -0.008782f, 0.008804f, 0.020289f, 0.015094f, 0.003186f, + -0.002527f, -0.001637f, -0.005110f, -0.006020f, -0.008297f, -0.003786f, 0.005035f, 0.004001f, 0.002673f, 0.002685f, 0.002606f, 0.001782f, -0.003517f, -0.003687f, -0.000575f, 0.000225f, -0.000056f, -0.000117f} + }, + { + {-0.010320f, -0.009100f, 0.011321f, -0.002316f, 0.009039f, 0.002637f, 0.013444f, -0.003134f, -0.006956f, -0.004792f, 0.008213f, 0.000228f, -0.002991f, -0.000797f, 0.009287f, -0.002474f, 0.001684f, 0.003258f, -0.006243f, -0.004751f, -0.002037f, 0.001712f, -0.006480f, 0.001645f, 0.001311f, -0.007506f, -0.002446f, -0.004492f, 0.000627f, -0.003283f, 0.001192f, 0.012236f, 0.006266f, -0.003584f, 0.000572f, -0.005817f, 0.004450f, -0.001569f, 0.007221f, -0.015015f, -0.001661f, 0.002316f, -0.005357f, 0.000955f, 0.007260f, 0.005546f, -0.006773f, -0.005005f, -0.005449f, -0.001017f, -0.004322f, -0.002194f, -0.006613f, 0.002509f, -0.000605f, -0.007636f, -0.003976f, -0.003089f, -0.000412f, 0.001563f, -0.001694f, -0.000802f, 0.003251f, 0.001288f, -0.003629f, 0.001875f, 0.008094f, -0.004182f, -0.001109f, -0.008748f, -0.003363f, -0.000692f, 0.003583f, -0.003707f, 0.001017f, 0.001459f, 0.001180f, 0.002804f, -0.006784f, -0.000242f, -0.003839f, 0.003184f, -0.002470f, -0.006527f, -0.001887f, -0.000223f, -0.000148f, -0.002895f, -0.003062f, 0.003149f, -0.001464f, -0.000604f, 0.001139f, 0.001830f, 0.000054f, -0.000448f, + 0.000327f, 0.001079f, 0.000040f, -0.000745f, 0.001413f, 0.000237f, -0.001294f, -0.001179f, 0.001318f, -0.000505f, 0.000458f, -0.000889f, 0.001188f, -0.001152f, -0.000762f, -0.000213f, -0.000276f, 0.000403f, 0.014044f, -0.005234f, 0.004579f, 0.011744f, -0.009502f, -0.010722f, -0.001561f, -0.002670f, -0.000111f, 0.005986f, 0.003349f, -0.014912f, 0.002353f, -0.008553f, -0.011757f, -0.000752f, 0.004343f, 0.004679f, -0.003819f, -0.000493f, -0.001234f, 0.006417f, -0.001303f, 0.005277f, -0.002438f, 0.000618f, 0.001184f, 0.001609f, -0.007432f, 0.003142f, 0.005799f, -0.002703f, 0.007383f, -0.004071f, -0.000772f, -0.009188f, 0.006564f, 0.001650f, -0.002396f, -0.007125f, -0.007030f, -0.003205f, -0.002380f, 0.003569f, -0.000745f, 0.003082f, 0.003082f, -0.006321f, 0.003974f, -0.008492f, 0.003074f, 0.004947f, 0.009411f, 0.009030f, -0.007746f, 0.003859f, -0.000461f, -0.002056f, 0.005526f, -0.004188f, -0.004962f, -0.003761f, 0.004513f, 0.002230f, 0.005872f, -0.005800f, 0.008823f, -0.002849f, -0.000406f, 0.002647f, 0.001495f, 0.005154f, -0.003861f, 0.007343f, 0.009310f, 0.016220f, 0.007572f, 0.005159f, + -0.009538f, -0.001753f, -0.006210f, -0.004524f, 0.005936f, -0.000775f, 0.007325f, 0.002975f, -0.000535f, -0.001457f, -0.001220f, 0.004204f, -0.003141f, 0.003352f, 0.004013f, -0.003133f, 0.001945f, 0.001449f, 0.000468f, 0.002395f, -0.001435f, -0.000446f, -0.003092f, -0.017182f, -0.018490f, 0.002111f, -0.001514f, 0.004401f, 0.004108f, 0.012217f, 0.005529f, 0.005838f, 0.002961f, -0.005970f, 0.002310f, 0.015434f, -0.010304f, -0.001151f, 0.000485f, 0.012392f, 0.007460f, 0.001733f, 0.005503f, -0.000972f, 0.004254f, 0.005717f, 0.012705f, 0.007043f, 0.007140f, 0.003840f, 0.003069f, 0.006197f, 0.002258f, -0.008838f, 0.005448f, 0.007318f, -0.002583f, 0.005325f, 0.007032f, -0.002434f, 0.002227f, 0.008774f, 0.003259f, -0.002097f, 0.003170f, 0.008955f, -0.000434f, -0.000082f, -0.001738f, 0.002470f, 0.008402f, -0.002458f, -0.004697f, 0.002438f, -0.002875f, 0.004445f, 0.005285f, -0.006218f, 0.001368f, -0.004010f, 0.000353f, 0.002573f, 0.007078f, 0.005821f, -0.014802f, -0.000012f, 0.007293f, -0.003755f, -0.006152f, 0.000854f, 0.001166f, 0.007326f, -0.000580f, -0.015802f, -0.006887f, 0.005147f, + -0.004369f, 0.007478f, -0.002042f, 0.000064f, 0.001924f, 0.009373f, 0.005895f, 0.003989f, -0.004781f, 0.007703f, -0.000889f, 0.004728f, 0.002343f, 0.000954f, 0.001640f, 0.001625f, -0.000088f, -0.001204f, 0.001060f, -0.000640f, -0.003806f, -0.001603f, -0.001547f, -0.000463f, -0.000853f, 0.000011f, -0.001128f, -0.002752f, 0.001412f, 0.000609f, -0.001380f, 0.000339f, 0.002643f, 0.001934f, 0.000935f, -0.000347f, -0.000408f, -0.000255f, -0.000109f, 0.002496f, -0.031272f, 0.004404f, 0.003249f, 0.014613f, -0.000547f, 0.011414f, 0.005866f, 0.002921f, -0.018319f, 0.000043f, -0.000262f, -0.014210f, 0.002298f, 0.010653f, 0.002040f, -0.000188f, -0.001324f, -0.005659f, -0.006490f, 0.002921f, 0.004215f, -0.000487f, 0.002818f, 0.003287f, 0.012797f, 0.001482f, 0.005677f, 0.005983f, -0.006687f, 0.001466f, -0.001564f, -0.001832f, -0.000841f, 0.004725f, -0.000714f, -0.003185f, -0.005109f, -0.003048f, 0.001653f, -0.009080f, -0.006452f, 0.003852f, -0.007227f, 0.002385f, -0.011880f, -0.014219f, -0.003623f, 0.017628f, -0.004647f, -0.001020f, 0.010401f, 0.003502f, 0.000774f, 0.011137f, -0.001569f, 0.001262f, + -0.001405f, 0.003279f, 0.007150f, -0.002777f, -0.011113f, 0.007122f, -0.006478f, -0.012319f, -0.004914f, -0.003432f, -0.000012f, 0.004557f, 0.013362f, 0.000111f, -0.000134f, -0.005209f, -0.000496f, 0.007904f, -0.003729f, -0.004055f, 0.009529f, -0.008030f, -0.000620f, 0.004382f, -0.009747f, -0.001888f, -0.003380f, -0.003276f, 0.001087f, -0.005199f, -0.007354f, 0.000474f, 0.004561f, -0.002099f, -0.003175f, -0.004145f, -0.004212f, -0.000568f, 0.003039f, 0.001390f, -0.000416f, -0.001212f, -0.003278f, 0.000176f, -0.001098f, -0.003981f, -0.005886f, -0.005002f, -0.000070f, -0.000625f, 0.002378f, -0.003887f, -0.000188f, -0.000550f, 0.001893f, -0.000286f, 0.000813f, 0.027881f, 0.000927f, -0.001678f, -0.010555f, -0.006067f, 0.014720f, -0.005940f, 0.011496f, 0.009893f, -0.011203f, -0.001815f, 0.008626f, -0.006267f, -0.003014f, -0.002923f, -0.004050f, 0.001861f, 0.003109f, 0.000541f, 0.005397f, -0.002433f, 0.000866f, 0.002042f, -0.002231f, -0.005261f, -0.005476f, -0.006200f, 0.000520f, 0.007268f, 0.003185f, -0.006121f, 0.000601f, 0.002879f, 0.013871f, -0.004081f, 0.012421f, -0.011263f, 0.005142f, 0.008954f, + -0.005859f, -0.003575f, -0.011473f, 0.005457f, -0.000076f, -0.008055f, 0.008046f, -0.009992f, 0.011276f, -0.000589f, 0.015943f, 0.003681f, 0.001779f, 0.003873f, 0.006668f, 0.003559f, -0.005090f, 0.007871f, -0.001409f, -0.008345f, -0.013047f, -0.003540f, 0.005612f, -0.006539f, -0.004205f, 0.005140f, -0.007270f, 0.014396f, -0.013763f, -0.000040f, 0.009302f, -0.007865f, -0.003072f, -0.014472f, -0.001022f, -0.005654f, -0.003116f, -0.004327f, 0.012611f, 0.004961f, 0.001345f, 0.000542f, 0.010890f, 0.001097f, -0.000860f, 0.008699f, 0.007209f, 0.006530f, 0.013515f, -0.002842f, 0.001384f, -0.003761f, 0.003872f, 0.004459f, 0.000979f, 0.001325f, -0.002194f, -0.000063f, -0.003136f, -0.001576f, 0.000390f, 0.001245f, 0.002217f, -0.001030f, -0.000389f, 0.004348f, 0.002089f, -0.001586f, 0.008416f, -0.000427f, -0.001990f, -0.003393f, -0.002156f, 0.003083f, -0.002778f, 0.000315f, -0.000262f, -0.002895f, 0.001376f, 0.000921f, -0.000707f, 0.002140f, 0.002289f, -0.002191f, 0.002373f, 0.013457f, 0.023816f, -0.006949f, -0.010353f, 0.002739f, -0.004219f, 0.006576f, 0.021685f, 0.000145f, -0.004973f, 0.006889f, + 0.003747f, 0.006428f, 0.003909f, -0.011783f, 0.000462f, -0.010515f, 0.005890f, 0.005103f, 0.003125f, 0.019825f, -0.000923f, 0.014783f, -0.000363f, -0.000352f, 0.004523f, -0.000112f, 0.015574f, 0.002069f, 0.009818f, -0.003604f, 0.013291f, -0.005968f, 0.007102f, 0.026283f, -0.004266f, -0.006621f, 0.018553f, 0.003909f, 0.012099f, -0.000284f, -0.011484f, 0.003601f, -0.006611f, 0.007950f, -0.013842f, -0.001845f, -0.007177f, 0.007838f, -0.001142f, 0.001625f, 0.014346f, -0.006944f, -0.014350f, 0.004040f, -0.001205f, -0.000668f, 0.011675f, 0.002261f, 0.001695f, -0.005238f, -0.009425f, -0.010021f, -0.003316f, -0.008272f, -0.006218f, 0.008587f, -0.004279f, -0.000806f, -0.003095f, 0.001019f, 0.000086f, 0.007666f, 0.004832f, -0.008759f, -0.012614f, -0.002950f, 0.000449f, 0.003499f, -0.003407f, -0.003097f, 0.010448f, 0.005942f, 0.005170f, 0.001521f, -0.008426f, -0.003906f, 0.004633f, 0.000210f, -0.002749f, 0.003717f, -0.001117f, 0.002271f, -0.002703f, 0.000234f, -0.001526f, -0.004797f, -0.005651f, -0.001503f, -0.004993f, 0.001348f, -0.000693f, 0.000509f, 0.003518f, -0.000909f, -0.002648f, 0.004265f, + 0.000978f, 0.002725f, 0.001653f, 0.000279f, -0.001518f, 0.002113f, -0.000462f, -0.000474f, -0.000089f, -0.000453f, 0.000253f, -0.000865f, 0.001257f, 0.002707f, -0.003231f, 0.000906f, -0.003821f, 0.000612f, -0.001809f, 0.032670f, -0.017148f, 0.011464f, 0.000448f, 0.005651f, -0.007889f, -0.006183f, -0.003593f, 0.007103f, 0.009151f, 0.001944f, -0.005013f, -0.009499f, 0.004967f, 0.009031f, -0.001765f, 0.002834f, -0.004831f, 0.009845f, 0.003651f, -0.018508f, -0.006075f, 0.005953f, -0.001076f, -0.007870f, -0.000368f, 0.008414f, -0.006175f, 0.002852f, -0.012028f, 0.007016f, 0.015223f, -0.006306f, 0.016102f, 0.000539f, -0.002927f, 0.010715f, -0.000458f, 0.000819f, 0.009704f, -0.020956f, 0.003151f, 0.006341f, 0.008917f, 0.006013f, 0.006967f, -0.009411f, -0.007283f, -0.000340f, 0.003345f, -0.010192f, 0.003369f, 0.009882f, 0.008888f, 0.003278f, 0.027128f, -0.008557f, -0.003397f, -0.012292f, -0.005258f, -0.008063f, -0.011286f, 0.013964f, 0.005835f, 0.013638f, -0.002131f, -0.021859f, 0.012722f, -0.007726f, 0.006993f, 0.006250f, 0.003055f, 0.003755f, -0.017249f, 0.020430f, 0.004467f, -0.009491f, + -0.016552f, -0.010391f, -0.010368f, 0.001435f, 0.008458f, -0.007725f, 0.000648f, 0.005183f, 0.004444f, -0.000008f, -0.003590f, 0.000833f, -0.000359f, 0.003210f, 0.003443f, 0.003679f, 0.002578f, 0.002426f, 0.001278f, -0.006037f, -0.005397f, 0.000245f, -0.001981f, 0.001952f, 0.002460f, -0.002816f, 0.003924f, -0.000969f, 0.001435f, 0.003223f, 0.001404f, 0.002497f, 0.000753f, -0.006421f, -0.000439f, -0.000104f, 0.002264f, 0.001644f, 0.000782f, -0.001468f, -0.001720f, 0.003443f, -0.001008f, 0.008414f, 0.001461f, 0.003627f, -0.039157f, -0.032963f, -0.030391f, 0.006781f, 0.006242f, 0.002544f, 0.001364f, -0.002170f, -0.002367f, 0.000813f, -0.005184f, -0.011028f, -0.007666f, -0.019305f, -0.008528f, -0.009371f, 0.011537f, -0.014839f, -0.006569f, -0.008401f, 0.002490f, 0.000168f, -0.003851f, 0.004327f, -0.001289f, -0.015407f, -0.000313f, 0.014135f, 0.001826f, -0.013744f, -0.012149f, 0.005308f, -0.004914f, 0.011863f, 0.008342f, -0.012986f, 0.012817f, 0.020232f, -0.016964f, -0.017376f, -0.009293f, 0.006382f, 0.016084f, -0.011460f, -0.011850f, 0.006085f, -0.006843f, 0.001251f, -0.001525f, -0.001477f, + -0.018454f, 0.003524f, 0.011171f, -0.005737f, 0.006396f, -0.009177f, -0.010912f, -0.010833f, -0.005362f, -0.018661f, 0.031958f, -0.006777f, -0.002158f, 0.005580f, 0.003476f, 0.006807f, 0.004352f, 0.009970f, 0.004552f, 0.008656f, 0.019780f, -0.025531f, 0.017863f, -0.006091f, -0.004855f, -0.000878f, -0.028495f, -0.001305f, 0.008719f, 0.000790f, 0.001123f, 0.007961f, 0.002913f, -0.000707f, 0.004737f, -0.009634f, 0.011153f, -0.004033f, -0.006494f, 0.006054f, -0.003950f, -0.003564f, 0.001141f, 0.004941f, -0.003814f, -0.006049f, 0.002057f, 0.004796f, 0.000188f, -0.002056f, -0.005273f, -0.002900f, 0.000727f, -0.007456f, -0.004982f, -0.002603f, 0.003555f, -0.001688f, 0.000267f, 0.003929f, 0.000067f, -0.007428f, -0.001692f, -0.006326f, -0.005625f, -0.005307f, -0.003276f, -0.005863f, 0.004963f, -0.001754f, 0.000326f, 0.010644f, -0.002124f, -0.003248f, -0.002881f, 0.005756f, 0.001444f, -0.001984f, -0.038506f, 0.029514f, 0.007820f, 0.006433f, -0.007129f, 0.028888f, -0.004547f, 0.013610f, -0.000041f, 0.012245f, -0.017194f, 0.006804f, 0.006746f, 0.002629f, -0.008459f, 0.025713f, -0.006972f, 0.007836f, + 0.005917f, 0.026686f, -0.018007f, -0.001175f, 0.007425f, -0.004645f, -0.013213f, 0.007970f, -0.012428f, 0.003210f, 0.003405f, -0.014601f, 0.005651f, 0.001190f, 0.000736f, 0.029349f, 0.018356f, -0.002465f, -0.012010f, -0.009395f, 0.006554f, -0.001570f, -0.017602f, 0.004988f, -0.001546f, 0.005176f, 0.013259f, 0.019517f, -0.013406f, 0.013268f, 0.006651f, -0.008812f, 0.006348f, 0.005097f, -0.013865f, -0.007515f, -0.008692f, 0.013967f, -0.015111f, -0.012850f, -0.034637f, -0.025397f, 0.007038f, -0.004784f, -0.004981f, -0.013361f, -0.026875f, 0.010292f, 0.002072f, -0.000813f, 0.013168f, 0.011194f, 0.015837f, 0.009383f, 0.003833f, -0.000475f, 0.002535f, 0.017877f, -0.013219f, 0.024488f, -0.009009f, -0.006968f, -0.022386f, 0.003551f, -0.004109f, -0.011433f, -0.002020f, 0.002708f, -0.005630f, 0.006504f, -0.002703f, 0.000265f, -0.002752f, -0.000909f, -0.002363f, -0.000561f, 0.004049f, 0.006400f, 0.000519f, 0.005281f, -0.005969f, -0.004264f, -0.003024f, 0.002189f, 0.004611f, -0.006107f, -0.002288f, -0.002857f, 0.000897f, -0.003417f, 0.002745f, -0.000634f, 0.002390f, 0.004031f, 0.000068f, -0.006510f, + 0.009184f, 0.008799f, 0.003678f, 0.000040f, -0.003961f, -0.000271f, -0.002062f, -0.000980f, 0.010387f, -0.046543f, 0.043063f, 0.030934f, -0.012615f, -0.010650f, 0.011629f, 0.000106f, 0.001060f, 0.020552f, 0.014547f, 0.000599f, -0.003025f, 0.008278f, -0.004774f, -0.002972f, 0.005803f, -0.009209f, 0.011573f, 0.007932f, -0.009611f, 0.012476f, -0.001335f, 0.003367f, -0.000900f, -0.020510f, -0.001136f, 0.014936f, 0.015486f, 0.006079f, 0.006640f, 0.008304f, -0.009546f, -0.012083f, 0.005232f, 0.009308f, -0.000377f, -0.004660f, -0.010528f, 0.004388f, -0.003079f, 0.013194f, 0.015538f, -0.001725f, 0.017910f, -0.009300f, 0.019959f, 0.010817f, 0.024053f, 0.001747f, 0.003526f, -0.006909f, -0.009806f, -0.001849f, 0.018466f, 0.030141f, 0.001844f, 0.022978f, -0.009882f, -0.022014f, 0.002967f, 0.008335f, -0.019237f, 0.020089f, -0.006614f, 0.007114f, -0.042402f, -0.018227f, -0.000250f, -0.010174f, 0.008242f, 0.014053f, 0.029496f, 0.006164f, 0.000251f, -0.014409f, -0.025576f, 0.006637f, 0.001137f, -0.021463f, 0.008846f, 0.004682f, -0.015475f, -0.004377f, 0.003747f, 0.017016f, 0.000426f, 0.005167f, + 0.005240f, 0.008885f, 0.007312f, -0.014341f, 0.005163f, -0.000221f, -0.002813f, 0.000349f, -0.000661f, -0.002270f, 0.006162f, 0.005820f, -0.005944f, -0.002432f, -0.000033f, 0.004168f, -0.002245f, 0.005930f, 0.000932f, 0.004332f, 0.003883f, -0.004642f, 0.003585f, 0.004344f, 0.011140f, 0.001051f, 0.006390f, 0.006981f, 0.001772f, 0.008189f, 0.003017f, 0.004247f, 0.001934f, 0.001075f, 0.003014f, 0.009615f, -0.004024f, -0.008767f, 0.002218f, 0.011461f, -0.018087f, 0.031060f, -0.013327f, 0.003734f, 0.023218f, 0.024028f, -0.001774f, -0.013806f, -0.007404f, -0.007321f, 0.001782f, -0.017847f, -0.014157f, 0.014949f, 0.003757f, 0.009611f, 0.011714f, 0.013844f, -0.006189f, 0.008981f, -0.003393f, 0.010754f, 0.044796f, 0.010551f, -0.021592f, 0.020972f, 0.024086f, 0.001050f, -0.003971f, 0.001273f, -0.011912f, -0.016423f, -0.008594f, 0.024561f, 0.016498f, 0.013601f, 0.020892f, 0.004235f, -0.003596f, -0.009603f, -0.026529f, 0.012296f, 0.013997f, 0.007770f, -0.004202f, -0.003285f, -0.009151f, 0.003691f, 0.021601f, 0.014884f, -0.024747f, 0.016349f, -0.020864f, 0.021999f, 0.004698f, 0.008236f, + 0.009837f, -0.003681f, -0.011792f, -0.003589f, 0.008858f, 0.038062f, -0.006059f, 0.019012f, -0.008453f, -0.017213f, 0.020212f, 0.018192f, 0.004619f, 0.004161f, 0.018330f, 0.006410f, 0.001082f, -0.002091f, -0.011651f, -0.003595f, -0.017093f, 0.005490f, -0.013270f, -0.006646f, 0.026978f, -0.001429f, 0.000736f, 0.000533f, 0.012446f, -0.004068f, 0.003716f, 0.008233f, 0.012534f, 0.013544f, 0.011300f, 0.004423f, 0.005939f, 0.006191f, 0.011355f, -0.001759f, -0.009058f, 0.012826f, 0.005103f, 0.007070f, 0.007797f, 0.000325f, -0.000899f, 0.000799f, -0.005652f, 0.003521f, 0.012174f, 0.001363f, 0.001569f, -0.002565f, -0.004513f, 0.010159f, 0.010941f, 0.002118f, 0.019389f, -0.002410f, 0.008372f, 0.014829f, 0.000958f, 0.004114f, -0.002137f, -0.005684f, 0.001540f, 0.003219f, 0.005382f, 0.010679f, 0.004673f, 0.008000f, 0.002989f, 0.001916f, 0.011139f, 0.015842f, -0.007995f, 0.016101f, 0.020569f, -0.023590f, 0.015888f, 0.009194f, -0.005702f, 0.001471f, 0.010931f, -0.009872f, -0.020839f, 0.031305f, 0.006767f, 0.005995f, 0.005851f, 0.018582f, 0.005416f, -0.018700f, 0.019979f, -0.026817f, + -0.031329f, 0.002786f, 0.003770f, -0.017300f, -0.005670f, -0.051240f, -0.036280f, -0.027322f, -0.009231f, -0.028109f, -0.013841f, 0.010662f, -0.025269f, 0.017734f, 0.016312f, -0.020582f, 0.026577f, 0.014178f, -0.005198f, -0.002674f, -0.013752f, 0.000597f, -0.024558f, 0.053895f, 0.015761f, 0.008399f, -0.026899f, 0.006553f, -0.008304f, 0.035740f, -0.007187f, -0.000931f, -0.032617f, 0.031921f, 0.002138f, 0.012502f, 0.010362f, 0.018617f, 0.010554f, -0.007228f, 0.010675f, -0.015896f, 0.016138f, -0.005834f, 0.009513f, -0.025446f, 0.057634f, 0.008792f, -0.026716f, 0.014501f, 0.016836f, 0.013156f, 0.019619f, 0.016739f, -0.025945f, 0.020693f, -0.000508f, 0.016687f, -0.013124f, 0.004960f, -0.033386f, 0.014047f, 0.014565f, 0.004226f, -0.008006f, -0.025260f, -0.001625f, 0.017291f, -0.022409f, -0.003061f, -0.002635f, -0.000108f, 0.006874f, 0.005203f, -0.005037f, 0.009716f, -0.000548f, -0.004763f, 0.007699f, 0.005906f, -0.006998f, -0.005661f, -0.014626f, -0.000918f, -0.013605f, 0.008185f, 0.002309f, 0.001367f, 0.010743f, 0.016524f, 0.010502f, 0.007774f, 0.005280f, -0.005879f, -0.002271f, 0.000170f, + -0.010609f, -0.008791f, -0.002410f, -0.003561f, 0.005787f, 0.013419f, 0.004273f, 0.008488f, -0.001893f, -0.000166f, -0.041657f, 0.011692f, -0.005702f, -0.004048f, 0.024737f, -0.004543f, -0.004211f, 0.002408f, 0.022148f, -0.005758f, 0.012920f, -0.010804f, -0.012743f, -0.016284f, -0.020652f, 0.035894f, 0.018715f, 0.013032f, -0.011267f, -0.032852f, -0.040324f, 0.019431f, 0.013384f, -0.014296f, 0.009617f, -0.009709f, 0.000967f, 0.035729f, 0.015605f, -0.010103f, 0.019268f, -0.006480f, 0.010002f, -0.011872f, 0.012095f, -0.026348f, -0.038760f, -0.015037f, -0.017287f, -0.002911f, 0.045373f, -0.036900f, 0.021361f, 0.012303f, 0.009278f, -0.008127f, 0.017864f, 0.008010f, -0.035452f, -0.045063f, -0.016045f, -0.020531f, 0.051075f, 0.037064f, -0.012363f, -0.022732f, -0.001893f, -0.023327f, -0.004933f, 0.037222f, 0.034435f, 0.019582f, -0.030365f, 0.006612f, -0.023719f, 0.037322f, 0.017704f, -0.003885f, 0.000133f, 0.012606f, -0.022015f, 0.005011f, 0.032882f, 0.017924f, -0.029743f, 0.032381f, -0.016493f, 0.019380f, 0.051307f, 0.019658f, -0.012081f, -0.015121f, 0.043910f, 0.004918f, -0.002676f, -0.019869f, + 0.007736f, -0.009323f, 0.002825f, -0.005787f, -0.001037f, -0.001215f, -0.021872f, 0.002849f, -0.002725f, -0.006144f, 0.009617f, -0.001603f, -0.007739f, 0.001490f, -0.004601f, 0.001315f, -0.005711f, -0.008418f, 0.007577f, -0.009341f, -0.006045f, 0.004581f, 0.011414f, -0.000461f, 0.008059f, 0.006760f, -0.001523f, 0.000079f, -0.011002f, 0.001623f, 0.003718f, -0.009198f, 0.012486f, 0.006286f, -0.007628f, -0.004991f, -0.005328f, -0.002245f, -0.012287f, 0.007392f, 0.011633f, 0.000666f, -0.009152f, -0.005176f, 0.006038f, -0.002517f, 0.005803f, 0.008348f, 0.000584f, 0.003168f, -0.033096f, -0.012958f, 0.055449f, 0.025678f, 0.031958f, 0.007806f, -0.046051f, 0.014246f, -0.037360f, 0.024591f, 0.069300f, 0.024647f, 0.043485f, -0.019558f, 0.012566f, 0.020210f, -0.002072f, 0.005227f, -0.017761f, 0.004548f, 0.027262f, 0.001457f, -0.007249f, -0.024581f, 0.013559f, 0.010183f, -0.025050f, 0.013099f, -0.009502f, 0.019208f, 0.027406f, 0.029142f, 0.035100f, 0.003552f, -0.027188f, 0.007391f, 0.016595f, -0.000273f, 0.047784f, 0.004238f, -0.054882f, -0.034414f, 0.015643f, -0.013933f, -0.064774f, 0.002391f, + 0.027640f, 0.010233f, 0.002919f, -0.005854f, 0.034153f, -0.026774f, -0.033226f, -0.006379f, -0.011882f, -0.032320f, -0.001774f, 0.002414f, -0.018828f, -0.027821f, -0.017045f, 0.001422f, 0.004057f, -0.040207f, 0.012045f, -0.016733f, 0.009811f, 0.046524f, -0.006324f, -0.016101f, 0.032407f, -0.005576f, 0.026986f, -0.025479f, 0.017435f, 0.001200f, -0.029533f, -0.032939f, 0.059584f, 0.005862f, 0.008068f, 0.002889f, 0.000086f, 0.059785f, 0.048817f, 0.015491f, -0.004468f, 0.023489f, -0.011446f, 0.008068f, 0.013986f, -0.002504f, 0.018373f, 0.007970f, 0.005374f, -0.027123f, 0.016218f, 0.008772f, -0.001496f, 0.002561f, -0.009179f, 0.007927f, 0.021107f, -0.003394f, -0.006807f, -0.011599f, -0.012729f, 0.012776f, 0.014990f, 0.000914f, 0.000105f, -0.011419f, -0.012330f, 0.002322f, -0.017724f, 0.002638f, -0.005864f, 0.018745f, 0.006688f, 0.000924f, -0.011692f, -0.020426f, -0.004618f, -0.009846f, -0.013778f, 0.008113f, 0.008349f, 0.016108f, 0.046884f, 0.006094f, -0.064207f, -0.029042f, 0.039844f, -0.057425f, 0.032639f, -0.054345f, 0.004422f, -0.008677f, -0.078600f, -0.010354f, 0.035386f, 0.072348f, + 0.023046f, -0.010506f, 0.017568f, -0.027743f, -0.009301f, -0.063107f, -0.003508f, -0.042861f, -0.006171f, -0.009381f, -0.029624f, -0.031431f, -0.010438f, 0.018071f, -0.028471f, 0.019627f, 0.036133f, -0.037233f, 0.013503f, 0.012030f, 0.006396f, -0.039624f, -0.006050f, -0.000406f, -0.041512f, 0.010831f, 0.052879f, -0.004010f, -0.076767f, 0.027194f, -0.046367f, -0.118365f, 0.033383f, -0.048948f, -0.060876f, 0.003249f, -0.027876f, 0.008456f, 0.020927f, -0.011659f, 0.031171f, -0.026048f, 0.027229f, -0.021491f, -0.052975f, 0.000318f, 0.037907f, 0.036348f, -0.068837f, 0.010135f, -0.008233f, -0.051237f, -0.013706f, -0.012689f, 0.089172f, 0.044527f, 0.052309f, 0.023840f, 0.022750f, 0.055193f, 0.079277f, -0.018090f, -0.037560f, -0.040979f, 0.007197f, -0.050914f, -0.015667f, 0.026370f, 0.042827f, 0.006026f, 0.003890f, 0.037193f, -0.008609f, -0.021094f, -0.028706f, 0.022411f, 0.025413f, 0.024972f, 0.005830f, 0.028646f, 0.011878f, -0.017559f, -0.003901f, -0.017007f, 0.026123f, 0.004225f, -0.003054f, -0.029292f, 0.008889f, 0.023484f, 0.002578f, 0.000449f, 0.022941f, -0.018306f, -0.012248f, 0.012702f, + 0.001295f, -0.009236f, -0.017636f, -0.005627f, 0.026995f, -0.001300f, -0.059768f, -0.005546f, -0.001478f, -0.013688f, -0.011654f, -0.015781f, -0.009676f, 0.013036f, 0.011657f, 0.006946f, 0.004138f, -0.009814f, -0.012399f, 0.103780f, 0.112191f, -0.065862f, -0.026093f, 0.050089f, -0.022725f, 0.020204f, -0.031256f, 0.009349f, -0.032114f, -0.060152f, 0.081958f, 0.011949f, 0.025738f, 0.021078f, 0.007675f, 0.010765f, 0.002463f, 0.016608f, 0.020365f, -0.058206f, -0.047985f, -0.042041f, -0.039690f, -0.029734f, -0.018739f, -0.015533f, -0.031205f, -0.017680f, -0.026446f, 0.030073f, 0.022868f, 0.011563f, -0.014573f, 0.006110f, -0.061585f, -0.030944f, 0.016754f, -0.055970f, -0.005173f, 0.027242f, 0.048321f, 0.007082f, 0.009366f, -0.020672f, -0.036141f, -0.042630f, 0.034249f, -0.004635f, 0.033908f, -0.119527f, 0.007468f, -0.013897f, 0.013764f, 0.073086f, 0.008979f, 0.012199f, 0.008250f, -0.021407f, -0.024615f, 0.000673f, -0.004856f, -0.067104f, 0.014404f, -0.024610f, 0.060200f, 0.004017f, -0.065944f, -0.089771f, -0.055775f, -0.011332f, -0.063039f, -0.061734f, -0.038299f, 0.043545f, -0.011273f, -0.042514f, + -0.057324f, 0.047915f, -0.006157f, 0.028355f, -0.032248f, 0.017401f, 0.047246f, -0.031367f, -0.045481f, -0.019103f, -0.023480f, 0.049411f, 0.010422f, -0.021661f, 0.019478f, 0.014500f, 0.043006f, 0.026689f, 0.012528f, -0.038176f, -0.038043f, -0.008361f, 0.004477f, -0.009985f, 0.006902f, 0.026488f, -0.005771f, -0.002216f, -0.019303f, -0.014151f, -0.010515f, -0.020093f, -0.003762f, 0.008273f, 0.012187f, 0.062456f, 0.004212f, -0.015637f, -0.004918f, 0.008376f, 0.019572f, -0.001107f, 0.030963f, 0.012985f, 0.071417f, 0.011084f, -0.000471f, 0.002641f, 0.013130f, -0.019763f, -0.030702f, 0.116891f, -0.067756f, 0.044390f, 0.082837f, -0.039682f, 0.011799f, 0.066207f, -0.083665f, 0.003415f, 0.009497f, 0.040835f, -0.093836f, 0.005307f, 0.006450f, 0.030981f, -0.040877f, 0.000612f, 0.016959f, -0.055167f, 0.008353f, -0.004102f, -0.010199f, 0.030525f, -0.009010f, -0.008239f, 0.012991f, -0.007142f, -0.009270f, 0.029950f, -0.027755f, 0.008337f, -0.011359f, 0.007737f, -0.017734f, -0.009788f, -0.021658f, 0.000430f, 0.004375f, 0.058523f, 0.019552f, 0.028507f, -0.005769f, 0.000794f, 0.043422f, -0.001696f, + -0.016239f, 0.024416f, 0.018029f, -0.019367f, -0.056529f, 0.052080f, -0.056339f, 0.009397f, 0.027256f, 0.035762f, -0.055441f, 0.059544f, 0.095576f, -0.052007f, -0.096842f, 0.129985f, 0.046038f, -0.063933f, 0.029804f, -0.061536f, -0.076466f, -0.038021f, -0.013848f, -0.079860f, 0.064969f, -0.111395f, 0.033683f, 0.053460f, -0.044127f, -0.148978f, 0.141279f, -0.024337f, -0.036206f, 0.094244f, -0.093556f, 0.048653f, 0.080434f, -0.023846f, -0.021838f, 0.025145f, 0.027748f, -0.014835f, 0.010123f, 0.008462f, 0.025628f, -0.012318f, -0.009067f, 0.028716f, 0.000118f, 0.006626f, -0.002830f, 0.005597f, 0.022966f, 0.017105f, -0.002904f, -0.020080f, 0.033571f, 0.036365f, -0.006642f, -0.030767f, -0.003105f, 0.015577f, 0.003504f, 0.022524f, 0.000301f, 0.019751f, 0.008444f, 0.028841f, 0.021302f, 0.024284f, -0.035421f, 0.009471f, -0.000495f, 0.001773f, 0.000333f, -0.021404f, -0.038278f, 0.056648f, -0.008897f, -0.051707f, 0.019119f, 0.012994f, 0.005632f, -0.008202f, -0.035775f, -0.028384f, 0.064856f, -0.042913f, -0.034329f, -0.068453f, -0.031562f, 0.040546f, 0.031449f, -0.018329f, -0.022836f, 0.021553f, + 0.053785f, -0.023242f, 0.040555f, 0.048567f, -0.034619f, -0.005056f, 0.029638f, -0.007796f, -0.000268f, -0.009929f, 0.002475f, -0.049811f, 0.013496f, -0.011128f, 0.001555f, 0.011871f, -0.010128f, 0.010152f, -0.020759f, -0.041741f, -0.019832f, -0.072600f, 0.008940f, -0.000264f, -0.010944f, 0.013342f, 0.006782f, -0.004831f, -0.016650f, 0.029036f, 0.045922f, -0.048495f, 0.070629f, -0.008083f, 0.009325f, 0.010149f, 0.062421f, 0.028597f, 0.045646f, -0.057535f, -0.014360f, -0.010875f, 0.081412f, -0.076183f, -0.026106f, 0.037092f, -0.002855f, -0.087958f, 0.005842f, -0.018225f, -0.015133f, 0.040012f, 0.043855f, 0.002989f, -0.033100f, 0.070894f, -0.030010f, 0.118293f, 0.001464f, -0.055026f, -0.000173f, -0.009633f, -0.062250f, 0.118851f, 0.023810f, -0.017833f, -0.140904f, -0.070461f, 0.039584f, -0.051923f, -0.046739f, 0.055054f, -0.206495f, 0.005119f, 0.040599f, 0.029781f, -0.016773f, 0.057967f, -0.035590f, -0.004689f, 0.000205f, 0.030156f, -0.008653f, 0.006099f, 0.041078f, -0.002949f, -0.010428f, -0.013095f, -0.014850f, -0.000727f, 0.004567f, -0.002813f, -0.006271f, 0.026511f, -0.037259f, -0.008417f, + 0.004394f, 0.006145f, -0.022327f, -0.037778f, -0.009624f, -0.011638f, -0.005420f, -0.003199f, 0.007285f, -0.041893f, 0.003203f, 0.031687f, -0.019781f, 0.024223f, 0.018600f, -0.018275f, 0.001139f, -0.013384f, 0.005289f, 0.008898f, -0.019496f, 0.054795f, -0.026602f, -0.024572f, -0.031716f, 0.026523f, 0.035981f, 0.021964f, 0.089422f, -0.017183f, 0.020280f, -0.008527f, -0.046106f, 0.023151f, -0.029377f, -0.016536f, 0.018460f, 0.040129f, -0.042267f, 0.046233f, 0.005334f, -0.002298f, 0.094225f, -0.019102f, -0.010446f, 0.070640f, -0.045124f, 0.062407f, 0.026937f, -0.014752f, 0.024897f, 0.026308f, 0.058214f, 0.060541f, 0.017597f, -0.049094f, 0.102828f, -0.103109f, 0.003490f, 0.093891f, -0.050508f, 0.020821f, -0.011131f, -0.012127f, -0.108727f, 0.073874f, 0.019541f, 0.032815f, 0.034638f, -0.022554f, -0.054121f, -0.040664f, -0.032979f, 0.005186f, 0.103325f, 0.000734f, 0.081043f, -0.026926f, -0.062368f, 0.003464f, 0.023307f, -0.051195f, 0.083163f, 0.033860f, 0.040868f, 0.082162f, 0.053184f, -0.087844f, 0.033523f, -0.126015f, -0.155715f, 0.003292f, 0.131129f, 0.082261f, 0.010611f, -0.092737f, + -0.331353f, -0.060897f, 0.102463f, 0.117109f, 0.165935f, -0.008406f, -0.210432f, -0.118674f, -0.109622f, 0.168271f, 0.128602f, -0.023193f, -0.084090f, -0.049178f, -0.102261f, -0.013028f, 0.131747f, -0.012759f, 0.030820f, 0.022028f, -0.021603f, -0.047700f, 0.071803f, -0.029111f, 0.040059f, 0.029396f, -0.002724f, -0.066651f, 0.091438f, -0.036028f, -0.017264f, 0.026506f, 0.023727f, -0.049459f, 0.000826f, -0.015478f, -0.018671f, 0.006339f, -0.001778f, 0.036650f, -0.065392f, 0.034693f, -0.078700f, -0.012400f, -0.013120f, 0.093613f, 0.002789f, 0.025436f, -0.057107f, 0.029907f, -0.021469f, 0.041401f, 0.049469f, -0.023872f, -0.056800f, 0.020523f, 0.014720f, 0.047938f, 0.013443f, -0.081234f, 0.068225f, -0.051076f, -0.008836f, -0.033073f, 0.031710f, -0.037152f, -0.001581f, -0.003907f, -0.010079f, 0.007624f, 0.034937f, -0.036903f, 0.016238f, 0.002897f, -0.008544f, 0.000515f, 0.024637f, -0.031195f, -0.008534f, -0.004572f, 0.051169f, -0.051818f, 0.013742f, -0.022709f, 0.033907f, -0.037831f, -0.010763f, 0.012973f, -0.007329f, 0.007183f, -0.024476f, -0.004328f, 0.022129f, -0.006721f, 0.008548f, 0.007024f, + 0.004628f, 0.027689f, -0.025652f, 0.017376f, 0.019960f, 0.024722f, -0.003476f, -0.057329f, 0.007339f, 0.006830f, 0.023347f, 0.021353f, -0.004188f, 0.005744f, -0.009676f, -0.026044f, -0.004457f, 0.011982f, -0.004936f, 0.034862f, -0.028378f, -0.009351f, -0.056605f, 0.016934f, 0.006087f, -0.008884f, 0.012612f, 0.011083f, -0.000848f, -0.029181f, 0.009072f, 0.028601f, -0.005599f, -0.004115f, 0.011182f, -0.011473f, 0.021280f, -0.013102f, 0.003574f, -0.026774f, 0.012646f, 0.005132f, -0.004321f, -0.007282f, 0.015481f, -0.007370f, -0.011331f, -0.016112f, 0.016841f, -0.000610f, -0.008555f, -0.003542f, 0.016753f, -0.006573f, 0.007361f, -0.009239f, -0.005702f, -0.000785f, 0.000518f, -0.000077f, -0.009346f, 0.001117f, 0.000193f, -0.007687f, 0.007870f, -0.007285f, 0.021886f, 0.003611f, 0.002841f, -0.030321f, 0.008485f, -0.000478f, -0.012262f, 0.013934f, 0.025689f, -0.018560f, -0.004333f, -0.000559f, -0.013584f, 0.020618f, -0.003530f, 0.003092f, -0.013625f, 0.007236f, -0.003024f, 0.002700f, -0.008762f, -0.046267f, 0.112342f, 0.030662f, 0.027794f, -0.014797f, -0.035904f, -0.034531f, 0.009863f, 0.021860f, + 0.003483f, -0.001222f, -0.000078f, -0.016343f, -0.002945f, 0.007949f, -0.004310f, 0.003461f, -0.001719f, -0.016367f, -0.000820f, 0.008210f, 0.012860f, -0.011367f, 0.003182f, 0.008291f, -0.016348f, 0.026957f, -0.016292f, -0.014164f, -0.014121f, 0.003754f, 0.007887f, 0.012553f, -0.013587f, 0.017484f, -0.025047f, 0.016699f, 0.014840f, -0.010952f, -0.001119f, -0.000710f, -0.002862f, 0.013039f, -0.013923f, 0.004158f, -0.004439f, -0.017946f, 0.025578f, -0.014186f, -0.000467f, -0.010483f, -0.003294f, 0.017918f, -0.023248f, 0.009570f, 0.006462f, -0.010058f, 0.008557f, -0.019743f, 0.005768f, 0.008363f, -0.014736f, 0.000463f, 0.007929f, -0.013527f, 0.013697f, -0.018713f, 0.005228f, 0.019406f, -0.028237f, 0.008243f, -0.010791f, 0.002068f, 0.011091f, -0.008311f, -0.004324f, 0.002120f, 0.002411f, -0.001561f, 0.007922f, -0.005901f, -0.005215f, 0.004003f, -0.004665f, 0.002673f, -0.001808f, 0.003474f, 0.003111f, -0.004418f, 0.002264f, -0.000719f, 0.004079f, -0.003614f, -0.001088f, 0.002921f, 0.000057f, -0.002019f, -0.006600f, 0.004317f, 0.004315f, -0.000817f, -0.004580f, 0.004497f, -0.000269f, -0.001866f, + 0.004408f, -0.009172f, -0.001954f, 0.005468f, -0.006800f, 0.009992f, -0.006074f, 0.000650f, 0.016205f, -0.004538f, 0.011652f, -0.006465f, -0.000725f, 0.013143f, -0.009148f, 0.016812f, -0.086799f, -0.203621f, 0.057606f, 0.199284f, 0.137047f, 0.216704f, -0.120684f, -0.128460f, -0.175157f, -0.202756f, 0.004333f, 0.156398f, 0.161585f, 0.168699f, 0.033103f, -0.055778f, -0.110656f, -0.158816f, -0.134609f, 0.010461f, 0.104533f, 0.123993f, 0.111566f, 0.026676f, -0.030854f, -0.019282f, -0.087150f, -0.097480f, -0.041133f, -0.002680f, 0.037468f, 0.082153f, 0.040123f, 0.029783f, 0.041143f, -0.020581f, -0.048898f, -0.008031f, -0.078162f, -0.036686f, 0.000841f, 0.012375f, 0.059536f, 0.069317f, 0.006134f, -0.010538f, -0.006534f, -0.051205f, -0.013885f, -0.000749f, -0.010668f, 0.017683f, 0.034247f, -0.007341f, -0.002739f, -0.013484f, -0.021418f, 0.004355f, 0.002093f, -0.002371f, 0.038644f, 0.026140f, 0.009649f, -0.001021f, -0.036487f, -0.052758f, -0.041715f, 0.002974f, 0.039216f, 0.033650f, 0.044185f, 0.005977f, 0.001126f, 0.010018f, -0.054891f, -0.031266f, -0.025825f, -0.004728f, 0.042075f, 0.009484f, + 0.014100f, 0.039239f, -0.022692f, -0.033014f, -0.007702f, -0.005667f, 0.012151f, 0.014123f, 0.004404f, 0.007869f, 0.003437f, -0.020280f, -0.021001f, -0.005151f, -0.000031f, 0.015050f, 0.021805f, 0.007129f, -0.003108f, -0.004773f, -0.006236f, 0.005436f, -0.006150f, -0.025775f, -0.004065f, 0.006039f, 0.011907f, 0.025603f, 0.006221f, -0.005345f, -0.012340f, -0.021106f, -0.004632f, 0.002098f, 0.006851f, 0.012031f, 0.015044f, 0.011841f, -0.006100f, -0.018287f, -0.019268f, -0.016821f, -0.001943f, 0.008340f, 0.009243f, 0.024745f, 0.025411f, 0.012378f, -0.005501f, -0.031272f, -0.033072f, -0.015336f, -0.011594f, 0.011675f, 0.030861f, 0.022869f, 0.009893f, 0.000132f, -0.002447f, -0.004014f, -0.009422f, -0.015502f, -0.014897f, -0.006334f, 0.002246f, 0.006532f, 0.010442f, 0.015147f, 0.014493f, 0.005686f, -0.005294f, -0.011670f, -0.012142f, -0.007793f, -0.001710f, 0.001194f, 0.001018f, 0.000329f, 0.000141f}, + {-0.008192f, -0.005439f, 0.002300f, -0.002093f, -0.002582f, -0.003986f, 0.000979f, 0.007943f, -0.002541f, 0.000040f, 0.000817f, 0.013597f, -0.000262f, 0.002610f, -0.005584f, -0.003874f, -0.001383f, -0.003648f, -0.003925f, -0.003679f, -0.002502f, -0.003495f, -0.004624f, 0.003905f, 0.006463f, -0.003537f, 0.000987f, 0.000275f, -0.007326f, 0.000220f, -0.000159f, -0.005188f, 0.009817f, -0.005001f, 0.005583f, 0.002142f, -0.001503f, -0.005617f, -0.005201f, 0.005063f, -0.002625f, -0.001886f, -0.007752f, -0.001960f, -0.000719f, -0.003642f, 0.010351f, -0.002245f, -0.000651f, 0.004342f, -0.000755f, -0.008609f, -0.004432f, -0.007587f, -0.005108f, 0.011817f, -0.003318f, 0.013140f, -0.000056f, -0.000526f, -0.002382f, 0.001546f, 0.000549f, -0.007785f, -0.008320f, 0.006076f, 0.000687f, 0.004137f, -0.000561f, 0.004815f, 0.002941f, -0.007542f, -0.000053f, 0.002538f, 0.004075f, 0.000009f, 0.003439f, 0.006290f, -0.008361f, 0.002226f, 0.002146f, -0.004162f, -0.000005f, 0.001922f, 0.005994f, 0.003972f, -0.004184f, -0.001243f, -0.000231f, 0.001426f, 0.001904f, 0.001475f, 0.001566f, -0.001075f, 0.000812f, -0.002252f, + -0.001461f, -0.000011f, 0.003051f, 0.001367f, -0.000094f, -0.000196f, -0.002074f, 0.001240f, -0.000162f, -0.000684f, -0.000180f, 0.001107f, 0.000455f, 0.000802f, 0.001966f, -0.000630f, 0.000863f, 0.002393f, 0.017987f, -0.001348f, -0.002116f, -0.004543f, -0.009756f, -0.012047f, -0.011018f, 0.001286f, 0.009916f, 0.003505f, 0.013222f, 0.004579f, -0.005927f, 0.001645f, -0.015628f, -0.013228f, 0.006221f, -0.004614f, 0.008742f, -0.000763f, -0.006918f, -0.003420f, 0.017312f, 0.003905f, 0.007348f, -0.000282f, 0.005638f, -0.002525f, -0.002072f, 0.003468f, -0.002330f, -0.007490f, -0.000507f, 0.002810f, -0.000830f, -0.000403f, 0.011030f, 0.006842f, -0.011755f, 0.000319f, -0.007439f, 0.012489f, 0.007405f, 0.000569f, -0.004370f, -0.004495f, 0.005774f, 0.003242f, 0.009333f, -0.008572f, 0.014786f, 0.018129f, -0.004931f, 0.017665f, 0.000025f, 0.009281f, 0.005789f, -0.003209f, 0.003103f, 0.014168f, -0.001602f, -0.009480f, 0.008210f, 0.002682f, -0.000055f, -0.001048f, -0.001627f, 0.000653f, 0.008290f, -0.005246f, 0.003044f, 0.002258f, 0.004413f, -0.006783f, 0.007818f, 0.001847f, -0.000636f, 0.002505f, + 0.001180f, 0.000802f, -0.000281f, 0.001803f, 0.004615f, -0.003174f, 0.001890f, 0.001258f, 0.001969f, -0.002894f, 0.000256f, -0.004672f, 0.000868f, 0.002261f, -0.002680f, -0.001699f, 0.000673f, 0.001346f, 0.001581f, 0.000471f, 0.001443f, 0.000040f, 0.000069f, -0.015575f, -0.012184f, 0.003783f, -0.006911f, 0.004871f, -0.008628f, -0.012251f, -0.011317f, 0.001534f, -0.008460f, 0.007678f, 0.005633f, -0.010879f, -0.002254f, 0.004369f, 0.001013f, 0.005382f, -0.003215f, 0.005569f, 0.006896f, -0.009664f, 0.003061f, 0.003123f, -0.007742f, 0.004496f, 0.000780f, -0.009160f, 0.006754f, 0.006481f, -0.003253f, 0.007085f, 0.001013f, 0.005773f, 0.005261f, 0.002155f, -0.003436f, -0.000901f, -0.010936f, -0.003345f, -0.005439f, 0.005704f, 0.006055f, 0.002340f, -0.017514f, 0.003293f, 0.007377f, -0.004011f, 0.012310f, -0.010121f, -0.013357f, 0.000964f, -0.003963f, 0.004217f, -0.009535f, 0.017334f, -0.000913f, -0.005876f, 0.001705f, 0.000160f, 0.009905f, -0.000623f, -0.005773f, -0.000444f, -0.003918f, -0.005405f, -0.006762f, 0.003120f, -0.012226f, 0.001193f, 0.000452f, 0.003527f, 0.008179f, 0.002623f, + 0.005822f, 0.008942f, -0.006155f, -0.001156f, 0.002020f, -0.007778f, 0.005274f, -0.002699f, 0.004496f, 0.003507f, -0.002380f, -0.001897f, 0.006616f, -0.002221f, -0.006016f, 0.000776f, -0.000631f, -0.000305f, -0.003242f, 0.004730f, -0.003702f, 0.001747f, 0.001811f, 0.002368f, -0.000950f, -0.001088f, 0.000301f, -0.001937f, 0.000733f, -0.001357f, 0.000126f, -0.000878f, -0.001806f, 0.002264f, -0.000914f, 0.000422f, -0.000315f, 0.000053f, 0.000042f, 0.000326f, -0.037450f, -0.000836f, -0.004771f, 0.025998f, 0.000348f, 0.001355f, 0.005367f, -0.003886f, 0.012983f, 0.003028f, -0.014353f, -0.007829f, -0.016800f, 0.002709f, -0.001393f, -0.005924f, -0.005029f, -0.006307f, -0.004104f, 0.020168f, -0.009623f, -0.004875f, -0.005552f, -0.015788f, -0.000901f, -0.004059f, 0.005071f, 0.007475f, -0.002764f, -0.000347f, 0.004305f, -0.005011f, -0.001540f, -0.002273f, -0.005871f, 0.005990f, 0.012332f, -0.001753f, -0.002321f, 0.009692f, -0.013394f, 0.008294f, -0.010743f, -0.021434f, -0.013665f, -0.021349f, -0.003452f, -0.012281f, -0.008320f, 0.001971f, 0.008184f, 0.004022f, 0.005783f, -0.003361f, 0.007066f, -0.009212f, + -0.002254f, 0.007401f, -0.000259f, 0.010374f, -0.004658f, 0.003028f, -0.007670f, -0.005871f, 0.005300f, -0.013138f, 0.003237f, 0.009442f, -0.012787f, 0.001075f, -0.003545f, -0.006055f, -0.008460f, -0.007654f, -0.002680f, -0.003482f, 0.001779f, 0.008826f, -0.004574f, 0.002633f, -0.007774f, -0.008288f, -0.006556f, 0.002889f, 0.004110f, 0.000957f, -0.002194f, -0.002538f, -0.003592f, 0.001697f, -0.003075f, -0.002716f, -0.001359f, -0.002533f, -0.000494f, 0.000283f, -0.004299f, -0.001125f, -0.000684f, -0.003277f, -0.000999f, -0.001555f, -0.000177f, -0.000695f, -0.005801f, 0.000533f, 0.002171f, -0.001220f, -0.002398f, -0.000381f, 0.003293f, 0.001648f, -0.001550f, 0.023815f, 0.000129f, -0.013326f, -0.012813f, -0.004407f, -0.009356f, -0.003617f, -0.007045f, 0.001802f, 0.001119f, -0.010537f, -0.006225f, -0.011570f, 0.021862f, 0.009273f, 0.001982f, -0.001255f, 0.011836f, -0.017736f, -0.000322f, -0.000385f, -0.011244f, -0.014922f, 0.013305f, 0.000266f, 0.009478f, -0.014964f, -0.006595f, -0.005213f, 0.005148f, -0.000530f, 0.006339f, -0.010316f, 0.003064f, 0.004234f, -0.011228f, -0.010736f, -0.009780f, 0.002341f, + -0.003264f, -0.002990f, 0.009374f, -0.002745f, 0.000979f, 0.000199f, -0.001932f, -0.010639f, -0.006574f, -0.001195f, -0.016103f, -0.010438f, -0.008520f, 0.004503f, 0.002993f, 0.006454f, -0.001663f, 0.002854f, -0.000261f, -0.001588f, 0.007377f, -0.005734f, 0.012910f, 0.001884f, 0.003847f, -0.001648f, -0.004381f, 0.005241f, 0.003927f, 0.010337f, -0.003193f, 0.001685f, 0.006171f, -0.003623f, 0.000028f, -0.013474f, 0.006286f, -0.010349f, 0.006511f, -0.007623f, -0.007613f, -0.014524f, -0.002961f, 0.003809f, 0.001494f, -0.002359f, 0.003296f, 0.001590f, 0.006569f, 0.001206f, -0.002146f, 0.005971f, 0.003080f, -0.005082f, 0.001156f, -0.004105f, 0.004476f, -0.001724f, 0.000655f, -0.001022f, -0.000656f, -0.003592f, -0.000266f, 0.000358f, 0.000576f, -0.002038f, 0.001613f, -0.002982f, 0.001101f, -0.000411f, -0.001704f, -0.002615f, 0.000584f, -0.001698f, 0.003800f, 0.001287f, -0.001197f, -0.001551f, -0.001741f, 0.003250f, 0.001895f, 0.003121f, 0.000143f, 0.000520f, 0.001370f, 0.028038f, 0.026535f, 0.019778f, -0.006850f, 0.007172f, 0.009947f, 0.005793f, 0.005560f, -0.010010f, -0.008762f, -0.013066f, + 0.011402f, -0.012268f, -0.001626f, -0.008957f, 0.015166f, -0.017093f, -0.012809f, -0.006445f, -0.002879f, -0.009469f, -0.014194f, 0.003887f, 0.000594f, 0.000698f, -0.017183f, -0.009513f, 0.004300f, 0.003445f, 0.004684f, -0.004746f, -0.006924f, 0.000409f, 0.004967f, 0.006418f, -0.004956f, 0.006097f, -0.009206f, -0.002531f, -0.022302f, 0.007984f, 0.002498f, -0.003945f, -0.004367f, -0.016460f, -0.007633f, 0.001921f, -0.004137f, -0.023066f, 0.012195f, 0.004968f, -0.000210f, -0.006333f, -0.005000f, -0.009843f, 0.002775f, -0.003587f, 0.006413f, -0.001589f, -0.003493f, -0.013187f, -0.002725f, -0.001458f, -0.007392f, 0.014168f, -0.010596f, 0.000040f, 0.008288f, -0.003728f, -0.011448f, -0.006473f, 0.009440f, 0.013839f, 0.006696f, -0.001232f, -0.000643f, 0.007245f, -0.015324f, 0.005986f, -0.001832f, -0.000899f, 0.000464f, 0.003086f, -0.001108f, -0.000797f, 0.000514f, -0.003122f, -0.009360f, -0.002632f, -0.003035f, 0.002608f, 0.001691f, 0.000883f, -0.003786f, -0.002027f, -0.004336f, -0.005199f, -0.001514f, -0.000366f, 0.005751f, 0.000395f, 0.000552f, 0.000568f, -0.002368f, -0.001396f, 0.002495f, -0.003338f, + -0.000769f, 0.000907f, 0.001453f, -0.003953f, -0.000236f, -0.000514f, 0.001935f, -0.002892f, -0.000936f, -0.001780f, -0.002926f, -0.005982f, -0.002960f, -0.000465f, -0.002823f, -0.000179f, -0.000003f, -0.000466f, -0.003509f, 0.034126f, 0.011482f, -0.004922f, -0.003921f, 0.012021f, -0.022968f, -0.004274f, 0.018692f, 0.009408f, -0.012946f, -0.000225f, -0.008770f, 0.003665f, 0.014382f, 0.035279f, 0.011667f, 0.027495f, -0.009676f, -0.001968f, -0.026647f, 0.009130f, -0.007749f, 0.007588f, -0.011653f, -0.000538f, 0.001160f, -0.004081f, 0.009611f, -0.004211f, 0.004604f, 0.011874f, -0.009008f, 0.005406f, 0.015083f, -0.004019f, 0.005059f, 0.000106f, 0.006073f, 0.008338f, 0.008493f, -0.045181f, 0.016570f, -0.005139f, -0.021190f, -0.003610f, 0.012956f, 0.004058f, -0.016371f, 0.008935f, 0.012915f, -0.026563f, 0.002143f, -0.007425f, 0.015688f, 0.003686f, 0.012957f, -0.003063f, -0.009336f, -0.018618f, 0.001141f, -0.011218f, 0.035338f, 0.006641f, -0.005821f, 0.011893f, 0.001469f, 0.011513f, -0.027832f, -0.003549f, 0.004272f, 0.008736f, 0.002025f, -0.012896f, -0.002077f, 0.004872f, 0.012348f, 0.010564f, + -0.008664f, 0.000352f, 0.012143f, -0.000410f, 0.005697f, -0.004124f, -0.002135f, 0.008662f, 0.000788f, -0.000543f, -0.001211f, 0.000554f, 0.004138f, -0.003907f, -0.001836f, -0.000389f, 0.003200f, 0.003281f, -0.000471f, -0.000997f, 0.008361f, -0.002554f, -0.001506f, -0.004314f, 0.000522f, 0.002413f, -0.002279f, 0.000284f, 0.002519f, 0.003566f, -0.003079f, -0.001242f, -0.005068f, 0.000500f, 0.003864f, -0.001762f, 0.000648f, 0.001954f, 0.001956f, 0.006918f, 0.000776f, 0.003455f, -0.000307f, -0.002817f, 0.004328f, 0.001218f, -0.040425f, -0.044335f, -0.015175f, -0.003448f, 0.000823f, 0.009437f, -0.018933f, 0.005991f, 0.022334f, -0.012794f, 0.011890f, 0.015475f, -0.010767f, 0.000351f, -0.005243f, 0.018925f, 0.026372f, -0.012611f, -0.014886f, 0.013284f, 0.001277f, -0.012637f, 0.005995f, 0.000237f, 0.003306f, 0.003798f, -0.006770f, -0.004904f, -0.028179f, -0.001420f, -0.008061f, -0.000618f, -0.000836f, 0.019190f, 0.005686f, -0.034358f, 0.000575f, 0.016617f, -0.018811f, 0.004987f, 0.020227f, -0.004414f, 0.007119f, 0.000447f, -0.005310f, -0.013032f, 0.026004f, 0.021924f, -0.016646f, 0.008754f, + -0.006193f, -0.000823f, 0.008091f, -0.005734f, 0.006785f, -0.010257f, -0.001178f, 0.022013f, -0.006245f, 0.004691f, 0.010373f, -0.007459f, -0.018063f, -0.000729f, 0.006197f, 0.003254f, -0.008683f, 0.001193f, 0.004864f, 0.007861f, 0.016062f, 0.009991f, 0.017675f, 0.009393f, 0.003412f, 0.008272f, -0.002907f, 0.015996f, -0.000527f, -0.012549f, -0.016969f, 0.002135f, 0.005503f, -0.002918f, 0.012679f, -0.006504f, -0.006856f, 0.005094f, -0.001605f, 0.001410f, 0.000638f, -0.007792f, -0.001103f, -0.004675f, 0.005760f, 0.002639f, 0.004630f, 0.009104f, 0.001121f, -0.003153f, -0.013140f, -0.000959f, 0.003039f, -0.003303f, -0.001366f, 0.001377f, -0.002934f, 0.002857f, 0.002908f, 0.000426f, -0.003107f, -0.002153f, 0.006416f, -0.000855f, 0.003006f, 0.001651f, 0.002068f, -0.004552f, -0.004895f, -0.002825f, 0.001107f, 0.002270f, 0.003834f, 0.002912f, 0.001869f, 0.001853f, 0.004821f, -0.001207f, -0.043529f, 0.048609f, -0.002797f, 0.031285f, 0.002409f, -0.018108f, -0.005410f, -0.010473f, -0.012706f, -0.001624f, 0.000894f, 0.022645f, -0.003552f, 0.015574f, -0.015602f, -0.000782f, 0.003888f, 0.003634f, + 0.001811f, 0.019696f, 0.019626f, 0.007218f, 0.003162f, -0.002414f, -0.003773f, -0.001060f, -0.003216f, -0.032659f, -0.011107f, 0.015154f, 0.009798f, -0.003573f, 0.001722f, -0.015412f, 0.007903f, -0.018915f, 0.004221f, 0.030265f, 0.003350f, 0.006639f, -0.025030f, 0.013495f, 0.011769f, 0.003315f, -0.016766f, -0.007273f, -0.007774f, 0.001478f, -0.015040f, 0.015553f, 0.018960f, 0.011500f, -0.001586f, 0.028401f, 0.010123f, 0.041521f, 0.016278f, -0.010959f, 0.034597f, 0.000899f, -0.012481f, 0.025099f, -0.003965f, 0.008373f, 0.015848f, -0.011234f, -0.009620f, 0.023235f, 0.024946f, 0.014808f, -0.020033f, 0.007794f, -0.000080f, -0.009165f, -0.016431f, 0.012426f, 0.022096f, 0.013433f, 0.032031f, 0.004556f, -0.006912f, -0.006953f, -0.019543f, -0.007293f, 0.012312f, 0.002072f, -0.003476f, 0.000959f, -0.012142f, -0.008410f, 0.001849f, 0.003333f, -0.000281f, 0.013398f, 0.010565f, 0.004831f, 0.000557f, 0.004073f, 0.006394f, 0.003439f, -0.005983f, -0.002258f, 0.001932f, -0.001182f, -0.001967f, 0.005790f, 0.000639f, -0.001332f, 0.004611f, 0.001950f, 0.001572f, 0.002005f, -0.003902f, 0.001285f, + 0.011694f, -0.004972f, 0.007424f, 0.003667f, 0.000446f, -0.004922f, -0.005638f, -0.002671f, 0.010692f, -0.023405f, 0.031075f, -0.009002f, -0.020459f, 0.006824f, 0.013496f, -0.013573f, -0.006905f, -0.028646f, 0.011959f, -0.010509f, -0.003492f, -0.026257f, -0.011577f, -0.008910f, -0.004532f, -0.011841f, 0.006150f, -0.005315f, -0.006512f, 0.006174f, 0.008626f, 0.015287f, 0.014932f, -0.006479f, -0.005466f, -0.021151f, 0.008285f, 0.000410f, 0.013871f, 0.003829f, 0.003676f, -0.004789f, 0.005516f, -0.013217f, -0.011260f, 0.006231f, 0.003112f, 0.006326f, -0.025867f, 0.008646f, 0.016814f, -0.000047f, -0.022795f, -0.023721f, -0.018565f, -0.054710f, 0.007662f, -0.006292f, 0.026409f, -0.012950f, 0.021925f, 0.007079f, 0.001417f, 0.028389f, 0.004237f, -0.003257f, 0.020302f, 0.007571f, -0.027897f, -0.013798f, 0.003229f, -0.008843f, -0.015880f, -0.009572f, 0.035747f, 0.016519f, -0.016975f, -0.002018f, -0.009581f, -0.004601f, 0.005135f, 0.025353f, 0.000354f, -0.006759f, 0.033386f, -0.011964f, -0.030537f, -0.028990f, -0.034546f, -0.006074f, 0.002523f, -0.000856f, -0.006172f, -0.004167f, -0.014839f, -0.002847f, + 0.004194f, -0.004518f, -0.004475f, 0.002960f, 0.002701f, -0.021598f, -0.009020f, -0.016901f, 0.000691f, -0.005688f, -0.005612f, -0.009018f, -0.002960f, 0.002489f, 0.013030f, 0.000200f, 0.016007f, 0.008001f, 0.011725f, 0.001324f, 0.005460f, -0.005462f, 0.010681f, 0.000002f, -0.007887f, -0.011531f, 0.006570f, 0.001131f, 0.003587f, -0.002963f, 0.002014f, -0.003583f, 0.003624f, -0.001243f, 0.004318f, -0.000857f, -0.002005f, 0.002929f, -0.000712f, 0.013652f, -0.022416f, -0.005579f, -0.005956f, -0.002873f, -0.001495f, 0.059818f, 0.009850f, 0.021919f, -0.010533f, 0.019154f, 0.038561f, -0.032915f, 0.050075f, 0.029730f, -0.013318f, 0.000532f, 0.003092f, -0.017898f, -0.030106f, 0.002163f, -0.017433f, -0.026825f, -0.012010f, 0.002483f, 0.000096f, -0.003215f, -0.012049f, -0.001929f, -0.011731f, -0.000723f, -0.013572f, -0.000895f, 0.009378f, -0.021050f, 0.011665f, 0.017916f, -0.013823f, -0.012783f, 0.009236f, 0.007055f, -0.001167f, 0.053753f, 0.004774f, 0.035871f, -0.025668f, -0.002380f, -0.031132f, -0.022767f, 0.005551f, -0.022833f, -0.031474f, -0.020892f, -0.023897f, -0.005099f, -0.006338f, -0.026456f, + -0.028850f, 0.037821f, 0.005954f, 0.002499f, -0.005074f, 0.019658f, 0.010875f, 0.023687f, -0.002303f, 0.022399f, -0.012416f, 0.005211f, -0.041622f, 0.034171f, 0.016487f, 0.002815f, -0.022846f, -0.001582f, 0.010362f, 0.002314f, 0.004012f, 0.016960f, 0.023481f, -0.018016f, -0.023323f, -0.015220f, -0.003626f, -0.000235f, 0.002584f, -0.013563f, 0.001594f, 0.004089f, 0.009692f, 0.012723f, -0.001561f, -0.007601f, 0.013120f, 0.006632f, -0.009745f, -0.000505f, 0.004757f, -0.005671f, -0.010301f, 0.002038f, -0.003477f, -0.003228f, -0.000289f, -0.004352f, 0.012029f, -0.012483f, 0.006993f, -0.000179f, 0.013304f, -0.013682f, -0.003338f, 0.002519f, -0.003491f, -0.005093f, -0.002201f, -0.010799f, -0.012056f, -0.002090f, 0.001298f, 0.003767f, 0.004416f, -0.008001f, 0.008351f, 0.006496f, -0.004911f, 0.007644f, -0.001427f, 0.004484f, 0.000405f, 0.004445f, -0.003317f, 0.029033f, -0.011950f, -0.009756f, 0.032421f, -0.027421f, -0.020928f, -0.005183f, -0.016663f, -0.002723f, -0.032640f, 0.007231f, -0.020127f, 0.015314f, 0.002093f, 0.005173f, 0.018538f, 0.005277f, 0.013060f, 0.017977f, 0.017057f, 0.014076f, + 0.023932f, 0.002774f, 0.016241f, 0.014555f, -0.017609f, 0.030245f, 0.007342f, 0.013938f, -0.016448f, 0.023584f, 0.010578f, 0.016536f, 0.004119f, 0.005845f, -0.003163f, -0.021914f, 0.005462f, 0.012257f, 0.014458f, 0.015810f, 0.003322f, -0.026634f, -0.016886f, 0.019006f, 0.010288f, 0.004254f, -0.010193f, 0.013127f, -0.009757f, -0.026698f, 0.038956f, 0.023762f, 0.017331f, -0.015128f, -0.007510f, -0.019915f, -0.061877f, -0.001966f, -0.008739f, 0.007878f, -0.014546f, -0.015605f, -0.027358f, 0.004719f, 0.008613f, 0.034469f, -0.027387f, 0.010959f, 0.000381f, 0.015817f, -0.024132f, -0.029559f, -0.018075f, 0.018937f, 0.005677f, 0.005859f, 0.009987f, -0.008182f, 0.003243f, 0.022215f, 0.007806f, 0.011205f, 0.014108f, -0.005782f, -0.005321f, -0.009446f, 0.000096f, 0.009658f, 0.011947f, 0.000361f, 0.004872f, 0.002348f, 0.001822f, 0.009071f, -0.005807f, -0.004960f, -0.008136f, -0.004585f, -0.008417f, -0.000347f, -0.012713f, -0.005162f, -0.013434f, -0.000835f, -0.008143f, -0.002388f, -0.001977f, -0.004699f, 0.003674f, -0.003415f, -0.017222f, -0.002650f, 0.006683f, 0.007371f, 0.013915f, -0.002200f, + -0.008518f, 0.003891f, -0.003458f, -0.012537f, 0.011301f, 0.009588f, 0.009153f, 0.021635f, 0.014078f, -0.001315f, -0.049731f, 0.028834f, 0.030676f, -0.014994f, 0.026185f, 0.009125f, -0.041913f, -0.007261f, 0.055490f, -0.007689f, -0.036616f, -0.005569f, -0.003357f, -0.031786f, 0.022566f, 0.004838f, -0.015940f, 0.024315f, 0.016194f, 0.057236f, 0.033621f, 0.001082f, 0.004386f, 0.054013f, -0.013613f, 0.013821f, -0.021794f, -0.031439f, -0.009243f, -0.021291f, 0.005037f, -0.001362f, 0.011043f, -0.001434f, -0.003664f, -0.008891f, 0.042617f, 0.002273f, -0.033229f, -0.026303f, -0.005840f, -0.006657f, -0.000994f, 0.014076f, 0.038916f, 0.024973f, 0.008383f, -0.023264f, 0.030318f, 0.055272f, -0.011437f, 0.025239f, 0.023600f, 0.066559f, 0.012820f, 0.012893f, 0.020263f, 0.028518f, 0.015881f, -0.022509f, -0.021681f, 0.015522f, -0.040451f, -0.024226f, -0.028930f, 0.027904f, 0.024393f, 0.017170f, -0.006395f, 0.020649f, 0.042771f, -0.023995f, 0.034114f, 0.034039f, -0.004325f, 0.033469f, -0.030978f, -0.013478f, -0.010663f, 0.069813f, -0.033717f, 0.034470f, 0.021591f, 0.012897f, 0.009940f, -0.030452f, + -0.002821f, -0.023874f, 0.026210f, 0.025016f, -0.000160f, 0.002164f, -0.012187f, 0.018800f, -0.006994f, 0.002201f, 0.007190f, 0.007928f, 0.000181f, 0.011628f, -0.007529f, -0.003801f, -0.002856f, -0.007348f, 0.003750f, 0.007185f, -0.005497f, 0.003505f, 0.008236f, 0.014502f, 0.002406f, -0.012579f, 0.005750f, -0.013663f, 0.002766f, 0.013128f, 0.008526f, 0.013869f, -0.002084f, 0.022105f, -0.008339f, 0.016442f, -0.003950f, -0.004735f, -0.002605f, 0.001360f, 0.017716f, -0.012235f, 0.008632f, 0.000100f, 0.008742f, -0.009861f, 0.002963f, 0.004699f, -0.004486f, 0.023458f, 0.011095f, 0.038143f, 0.067992f, 0.007346f, -0.006982f, 0.007253f, -0.003596f, -0.011124f, 0.002073f, 0.007164f, -0.016537f, -0.022036f, 0.007559f, -0.011404f, -0.006209f, 0.017393f, -0.000806f, 0.034094f, -0.017838f, 0.033431f, 0.016439f, 0.003380f, -0.019297f, 0.006402f, 0.033312f, 0.009740f, -0.016834f, 0.006692f, -0.003960f, 0.001065f, 0.019592f, -0.026927f, -0.014254f, 0.030338f, 0.000702f, -0.007317f, 0.026284f, -0.001145f, 0.009341f, 0.006118f, -0.025037f, -0.045587f, -0.009627f, 0.016041f, 0.029385f, 0.006517f, + -0.022441f, 0.029467f, -0.009532f, 0.059595f, -0.030017f, 0.040170f, -0.023294f, 0.014509f, 0.034349f, -0.050448f, -0.052295f, -0.000135f, -0.014756f, 0.013758f, 0.016762f, 0.002643f, -0.007644f, -0.030732f, 0.020946f, -0.004235f, 0.037236f, 0.017063f, 0.034676f, 0.009715f, 0.020207f, -0.008167f, 0.026634f, 0.009887f, -0.015849f, 0.003527f, -0.000406f, -0.076285f, -0.002223f, 0.013788f, 0.018571f, 0.032709f, 0.027504f, -0.008626f, 0.002344f, -0.005359f, 0.005167f, 0.000318f, -0.008491f, -0.019961f, 0.008844f, -0.011498f, 0.026580f, 0.003489f, 0.005199f, 0.013416f, 0.007740f, -0.007982f, 0.007676f, 0.019633f, 0.016887f, -0.005357f, -0.003052f, 0.003163f, -0.004078f, -0.002374f, -0.012006f, -0.001759f, -0.025161f, -0.003077f, 0.008633f, -0.020561f, 0.014565f, -0.015405f, -0.012862f, 0.004216f, -0.013083f, 0.013775f, 0.005164f, -0.004540f, 0.008685f, -0.000530f, -0.001448f, 0.006065f, 0.018470f, -0.012351f, 0.002867f, 0.003275f, 0.044315f, 0.057326f, -0.012553f, -0.002247f, 0.020195f, 0.075846f, 0.002087f, -0.044904f, -0.018000f, 0.009106f, 0.008589f, -0.014210f, 0.014459f, -0.010267f, + 0.023464f, -0.038079f, 0.001951f, 0.023695f, -0.015945f, -0.017183f, 0.003257f, -0.037634f, -0.011650f, -0.012264f, -0.059959f, -0.050587f, -0.029372f, 0.022074f, 0.025919f, -0.004559f, -0.042694f, 0.004799f, 0.001446f, -0.001506f, 0.008474f, -0.021401f, 0.051105f, -0.014604f, 0.006445f, 0.056707f, -0.049710f, 0.023941f, 0.008316f, -0.017305f, 0.020542f, -0.013402f, -0.040326f, 0.000846f, 0.034735f, -0.015567f, -0.025368f, 0.014516f, 0.004610f, 0.033212f, 0.000167f, -0.051156f, 0.004011f, -0.030237f, 0.050329f, -0.018273f, 0.007536f, 0.012413f, 0.005957f, -0.007224f, -0.032820f, 0.013685f, 0.034241f, 0.009993f, 0.035330f, -0.051863f, -0.028655f, -0.008531f, -0.000561f, 0.005607f, -0.040136f, 0.035876f, -0.005026f, -0.038143f, -0.012832f, 0.024161f, 0.022361f, -0.021112f, -0.029453f, 0.029012f, -0.023468f, -0.014612f, -0.000644f, -0.003563f, -0.003298f, -0.001864f, -0.008648f, -0.001588f, 0.014443f, -0.003270f, 0.013264f, -0.015281f, 0.010519f, 0.014003f, -0.003856f, 0.007585f, 0.002172f, -0.002782f, 0.000083f, 0.001953f, 0.024800f, 0.001366f, -0.004862f, 0.002191f, 0.005439f, -0.012363f, + 0.004365f, -0.015826f, -0.001356f, 0.018482f, -0.006697f, -0.014401f, -0.005443f, 0.008342f, 0.000192f, 0.000704f, 0.010784f, 0.000969f, -0.014593f, -0.007441f, 0.026370f, 0.019426f, -0.006442f, -0.001018f, -0.039321f, 0.057894f, 0.001686f, -0.099059f, 0.039732f, -0.013584f, 0.007759f, 0.010149f, 0.013341f, 0.024364f, 0.008904f, -0.017904f, -0.004299f, 0.024536f, 0.016599f, -0.019639f, -0.001019f, -0.015574f, -0.008061f, -0.048636f, -0.006178f, 0.023465f, 0.029126f, 0.006578f, -0.011514f, 0.032266f, -0.033166f, 0.036760f, -0.021126f, -0.011846f, 0.004408f, -0.011356f, 0.009821f, -0.029255f, -0.039519f, -0.044221f, -0.014138f, 0.022959f, -0.008824f, 0.000264f, 0.026983f, 0.007526f, 0.004737f, -0.000806f, 0.000942f, -0.009282f, 0.000388f, 0.029092f, 0.017909f, 0.030699f, 0.026026f, 0.030798f, 0.020952f, -0.018246f, -0.011642f, 0.007598f, -0.001939f, -0.035302f, 0.023785f, -0.006354f, -0.033376f, 0.041961f, -0.000457f, 0.006857f, -0.001152f, -0.015204f, -0.005020f, 0.017648f, 0.025513f, 0.021257f, 0.000659f, 0.013037f, -0.042764f, -0.006030f, -0.015238f, 0.023321f, 0.008038f, -0.011875f, + -0.013605f, 0.053909f, -0.016421f, -0.018404f, -0.005840f, 0.008735f, -0.013342f, -0.035444f, -0.002013f, -0.006030f, -0.019192f, 0.033317f, 0.006772f, 0.012574f, -0.010243f, -0.001727f, 0.007724f, 0.002053f, 0.009758f, 0.010607f, -0.003488f, 0.006528f, -0.006440f, 0.007392f, 0.002753f, -0.005823f, -0.004500f, 0.005493f, 0.007604f, 0.002144f, -0.006819f, -0.005547f, -0.006141f, -0.004422f, 0.000093f, 0.003874f, -0.005581f, -0.006604f, 0.001510f, -0.000455f, -0.001281f, 0.005852f, -0.002794f, 0.009229f, 0.002681f, 0.026882f, -0.002371f, -0.003277f, -0.006021f, -0.011538f, -0.015081f, 0.134734f, -0.132627f, -0.006793f, -0.144184f, -0.022446f, -0.054935f, -0.006823f, 0.034981f, -0.018011f, -0.040040f, 0.062685f, -0.017182f, -0.011104f, 0.001896f, 0.019214f, -0.002434f, 0.052072f, 0.034388f, 0.020569f, -0.031025f, 0.001898f, -0.021229f, -0.021558f, -0.014503f, 0.000619f, -0.006781f, -0.005934f, -0.017613f, -0.004042f, 0.028670f, 0.003390f, 0.018904f, 0.018910f, -0.001741f, 0.025298f, 0.036902f, 0.001820f, -0.007814f, -0.019540f, -0.023346f, 0.009074f, 0.009922f, -0.019370f, 0.031237f, -0.041741f, + -0.042261f, 0.004454f, -0.014931f, 0.022303f, -0.039198f, 0.016452f, -0.075180f, -0.040142f, -0.060229f, -0.005400f, -0.029838f, -0.002885f, -0.018296f, -0.022749f, -0.019830f, -0.001998f, 0.004869f, -0.058840f, 0.006472f, -0.013049f, 0.006518f, 0.000058f, -0.027314f, -0.047909f, 0.032778f, -0.028915f, -0.005327f, 0.029300f, -0.003192f, -0.009468f, 0.019328f, 0.024251f, -0.005243f, 0.024157f, 0.015765f, 0.029236f, 0.016054f, 0.029588f, 0.013928f, -0.017874f, -0.005102f, -0.015771f, 0.000529f, -0.013094f, 0.002577f, 0.010589f, 0.015090f, 0.016516f, -0.007594f, 0.007566f, 0.005411f, 0.010763f, -0.002769f, -0.004387f, 0.005565f, 0.012946f, 0.001573f, 0.002860f, 0.014341f, 0.007241f, 0.014771f, -0.002324f, 0.000539f, -0.001734f, 0.007134f, 0.010141f, -0.002021f, -0.017365f, 0.009279f, -0.003055f, 0.003523f, -0.005577f, 0.002257f, -0.005065f, -0.002667f, 0.000720f, -0.014437f, 0.000055f, 0.019482f, -0.012429f, -0.013042f, 0.001516f, 0.006580f, 0.006656f, 0.002206f, -0.012858f, 0.109891f, 0.055504f, 0.027164f, -0.025818f, -0.013069f, -0.056427f, 0.013185f, 0.046370f, -0.008321f, -0.010261f, + 0.075542f, -0.012810f, -0.016057f, 0.037709f, 0.055460f, 0.010107f, 0.056548f, -0.013387f, 0.008740f, 0.033653f, 0.037896f, 0.059525f, 0.048215f, -0.001905f, -0.020694f, 0.018316f, 0.022023f, 0.020897f, 0.025786f, 0.044673f, 0.022094f, 0.056649f, -0.021215f, -0.000885f, 0.016896f, 0.015814f, 0.047956f, 0.028193f, 0.051353f, -0.036068f, -0.011056f, 0.020902f, -0.039043f, 0.032519f, 0.032878f, 0.031653f, 0.013680f, -0.039228f, -0.014107f, 0.076141f, 0.019883f, 0.051529f, 0.042676f, 0.046927f, -0.009096f, 0.062003f, 0.096544f, 0.033709f, 0.008870f, 0.068043f, 0.046974f, -0.025371f, -0.015626f, -0.032060f, -0.025765f, 0.028981f, 0.033333f, 0.003453f, -0.027479f, 0.001161f, -0.024547f, -0.000579f, -0.010805f, 0.016845f, -0.058187f, -0.006104f, 0.006183f, -0.029058f, 0.022612f, 0.004516f, -0.018021f, 0.016189f, -0.036569f, -0.023379f, -0.040555f, -0.013080f, -0.019462f, 0.014976f, 0.004685f, -0.018412f, 0.004480f, 0.027199f, 0.008034f, -0.008179f, -0.016035f, -0.024625f, -0.009588f, 0.008888f, -0.035509f, -0.016078f, -0.002937f, 0.029171f, 0.009696f, -0.011639f, 0.006064f, -0.018686f, + -0.005208f, -0.005388f, -0.015878f, -0.009758f, 0.026791f, -0.005676f, -0.001894f, -0.006037f, 0.006299f, 0.017604f, 0.012131f, 0.015146f, 0.036855f, 0.000517f, 0.029672f, 0.001851f, 0.002937f, 0.019104f, 0.015828f, -0.024080f, -0.014381f, -0.001497f, 0.005540f, 0.003016f, -0.000015f, -0.034869f, 0.016883f, -0.041980f, 0.072718f, 0.103331f, 0.060073f, -0.026910f, -0.057205f, -0.021306f, 0.051004f, -0.015521f, -0.042694f, 0.076908f, -0.053783f, 0.045782f, 0.025809f, -0.061048f, -0.025379f, -0.006746f, -0.100384f, 0.003599f, 0.011303f, -0.048697f, 0.098487f, -0.034303f, 0.091466f, -0.069070f, 0.010010f, 0.003994f, 0.066845f, 0.098286f, -0.008283f, 0.033095f, 0.046467f, -0.055009f, 0.036498f, -0.074315f, -0.020488f, 0.139922f, -0.008009f, -0.039184f, -0.007678f, -0.079024f, 0.003317f, -0.025209f, 0.087765f, 0.032917f, 0.040833f, -0.013956f, -0.023249f, -0.044227f, -0.040483f, 0.009679f, 0.005589f, -0.000290f, 0.058476f, -0.014723f, 0.011166f, -0.061212f, -0.031440f, 0.040005f, -0.090362f, -0.036174f, -0.027146f, -0.031449f, 0.084460f, 0.005593f, 0.091260f, 0.064826f, 0.029152f, 0.034412f, + -0.020360f, -0.048771f, 0.040941f, -0.066182f, -0.039974f, 0.080343f, 0.024704f, -0.049351f, -0.080275f, -0.049270f, -0.057081f, 0.045333f, -0.049245f, 0.024987f, -0.035515f, -0.003757f, -0.030469f, 0.031956f, 0.019202f, 0.002181f, -0.026390f, -0.005623f, -0.018156f, 0.004681f, -0.035932f, -0.025790f, -0.013399f, 0.007203f, 0.020402f, -0.001500f, -0.014492f, -0.021381f, -0.033332f, -0.024841f, 0.021583f, 0.028324f, -0.008917f, 0.019261f, 0.041150f, 0.018667f, -0.037677f, -0.012070f, -0.013661f, 0.023074f, -0.022859f, -0.016194f, -0.005145f, 0.007877f, -0.030117f, -0.042117f, -0.028906f, -0.010782f, 0.017243f, -0.001588f, 0.004176f, -0.006880f, 0.023511f, 0.006153f, 0.065970f, -0.108958f, 0.116300f, -0.002730f, 0.009126f, -0.037024f, 0.093948f, 0.022187f, 0.060569f, 0.022988f, -0.039394f, 0.013662f, 0.033725f, -0.057229f, 0.040338f, 0.000868f, 0.026828f, -0.076454f, -0.005789f, 0.018929f, 0.070716f, -0.029279f, -0.057992f, -0.002415f, 0.070333f, 0.037152f, -0.026611f, -0.060345f, -0.002794f, 0.050776f, 0.006818f, 0.003656f, 0.014233f, 0.036947f, 0.093163f, -0.130934f, -0.021421f, 0.012789f, + 0.073094f, 0.016442f, -0.039512f, -0.009715f, 0.027975f, 0.066839f, -0.006530f, 0.003368f, -0.125483f, 0.036514f, 0.019861f, 0.034411f, -0.090985f, 0.080780f, 0.069672f, 0.026273f, -0.041038f, -0.004070f, -0.045429f, 0.034252f, 0.059705f, 0.025085f, 0.028061f, -0.005061f, 0.045315f, -0.065582f, 0.062524f, -0.018314f, -0.021994f, 0.073362f, 0.060576f, 0.004033f, -0.022578f, -0.060069f, 0.044324f, 0.048397f, -0.128713f, -0.010083f, 0.074392f, 0.018613f, -0.000578f, -0.045979f, -0.019606f, 0.126190f, -0.009411f, -0.042975f, -0.005212f, -0.023110f, -0.027801f, 0.042055f, -0.035191f, 0.012928f, 0.019387f, 0.025716f, -0.017451f, 0.002645f, -0.017721f, -0.021450f, -0.014131f, 0.019447f, 0.019613f, -0.019626f, -0.003684f, 0.009788f, -0.015422f, 0.038265f, -0.036355f, 0.009672f, -0.006320f, -0.011741f, 0.013826f, 0.063289f, 0.004421f, 0.000245f, -0.009864f, -0.022109f, 0.000380f, 0.034515f, 0.008475f, -0.001466f, -0.006385f, -0.016056f, 0.029561f, -0.007423f, -0.001428f, -0.017052f, 0.017076f, -0.097133f, 0.047828f, 0.009436f, 0.030558f, 0.036786f, 0.053389f, 0.019115f, 0.017372f, -0.025036f, + 0.027685f, 0.005327f, 0.063323f, -0.006962f, -0.018481f, 0.049803f, 0.038347f, -0.008037f, 0.003630f, -0.020882f, 0.001016f, 0.015975f, -0.004516f, -0.012357f, 0.028619f, -0.022207f, 0.003295f, 0.038530f, -0.007866f, 0.022360f, -0.038579f, -0.007659f, 0.005619f, -0.015766f, -0.005795f, 0.004748f, 0.028301f, -0.006811f, -0.046183f, 0.002112f, 0.093410f, 0.019547f, -0.049910f, 0.015335f, -0.050885f, -0.034893f, -0.026024f, -0.006921f, 0.059841f, -0.006172f, -0.046731f, 0.096208f, -0.103242f, 0.017902f, 0.106528f, 0.011487f, 0.075072f, -0.056639f, -0.105607f, 0.034561f, 0.004253f, 0.084922f, 0.005106f, -0.047440f, 0.039940f, -0.010406f, -0.008144f, -0.020013f, -0.002721f, -0.029414f, 0.015516f, 0.004422f, 0.023322f, -0.035979f, -0.030488f, -0.012117f, 0.038259f, 0.048563f, -0.015376f, 0.025992f, -0.003135f, 0.040704f, 0.029359f, -0.050519f, 0.041369f, -0.010101f, 0.006802f, -0.008296f, -0.014996f, 0.000159f, 0.000576f, 0.005846f, -0.003067f, 0.004618f, 0.004473f, 0.003236f, 0.006674f, -0.016408f, 0.001703f, 0.009701f, -0.013159f, -0.001458f, 0.009805f, -0.008608f, 0.012601f, 0.013316f, + -0.018261f, 0.023462f, 0.010298f, 0.024290f, -0.004415f, 0.011459f, 0.020189f, -0.036099f, 0.000482f, 0.011529f, 0.022224f, -0.012673f, -0.008723f, -0.012177f, -0.008106f, 0.041269f, -0.018879f, -0.198359f, -0.454772f, -0.180704f, -0.274016f, -0.400895f, 0.214368f, 0.058701f, 0.123047f, 0.569092f, 0.438548f, 0.255471f, 0.468413f, 0.349251f, 0.059117f, 0.114926f, 0.095592f, -0.223102f, -0.190921f, -0.093996f, -0.340683f, -0.325938f, -0.125180f, -0.167869f, -0.236532f, -0.099438f, -0.085379f, -0.240899f, -0.201022f, -0.017480f, -0.114784f, -0.195488f, -0.067485f, 0.061235f, -0.142002f, 0.041720f, 0.209827f, -0.016887f, -0.030767f, 0.284940f, 0.227650f, -0.010851f, 0.333327f, 0.386059f, 0.156566f, 0.362661f, 0.509533f, 0.303460f, 0.263835f, 0.611272f, 0.488006f, 0.366429f, 0.434915f, 0.576649f, 0.205973f, 0.081037f, 0.241295f, -0.191609f, -0.547770f, -0.397631f, -0.605760f, -0.981053f, -0.878396f, -0.932653f, -1.084023f, -1.105269f, -0.952714f, -0.830145f, -0.832054f, -0.585572f, -0.259411f, -0.176328f, -0.027012f, 0.282722f, 0.520917f, 0.525341f, 0.652962f, 0.939038f, 0.821290f, 0.750167f, + 1.037605f, 0.824013f, 0.465926f, 0.679515f, 0.476158f, 0.184016f, 0.167075f, 0.218857f, 0.022319f, -0.070385f, 0.042369f, 0.005284f, -0.154425f, -0.083130f, 0.013425f, -0.123736f, -0.227691f, -0.110192f, -0.156293f, -0.332232f, -0.209062f, -0.081682f, -0.247810f, -0.167429f, 0.033145f, -0.079676f, -0.115821f, 0.055716f, -0.068579f, -0.273779f, -0.209171f, -0.335830f, -0.566164f, -0.534045f, -0.511285f, -0.532028f, -0.466800f, -0.314614f, -0.245065f, -0.148489f, -0.028618f, 0.123723f, 0.221301f, 0.338515f, 0.428406f, 0.531015f, 0.553684f, 0.586103f, 0.654309f, 0.619517f, 0.569224f, 0.537309f, 0.356927f, 0.124772f, 0.012386f, -0.054136f, -0.151744f, -0.180295f, -0.156015f, -0.177570f, -0.197831f, -0.175482f, -0.175621f, -0.173389f, -0.144685f, -0.142426f, -0.147556f, -0.143501f, -0.123306f, -0.102567f, -0.084419f, -0.053044f, -0.024985f, 0.005979f, 0.018668f, 0.024489f, 0.017908f, 0.010913f, 0.007588f} + }, + { + {-0.015949f, 0.009434f, -0.012132f, 0.001472f, -0.005142f, -0.001607f, 0.004718f, -0.007524f, -0.013668f, -0.003497f, 0.001154f, -0.007839f, -0.004520f, 0.006625f, -0.003935f, 0.003063f, -0.017114f, -0.001474f, 0.011575f, 0.006162f, -0.019147f, -0.006600f, -0.005025f, -0.005093f, 0.006464f, -0.002801f, -0.009974f, -0.006273f, -0.007131f, -0.007266f, 0.012614f, 0.003936f, 0.008124f, -0.005275f, 0.010672f, 0.009692f, 0.006913f, -0.003850f, -0.009059f, -0.007126f, 0.000752f, 0.001797f, 0.014519f, 0.005138f, 0.002763f, -0.006850f, 0.001578f, 0.000617f, 0.001661f, 0.005744f, 0.003409f, -0.009870f, -0.008382f, -0.004343f, 0.005307f, 0.001225f, -0.001857f, -0.010551f, -0.003221f, 0.004123f, 0.004775f, -0.004265f, -0.001607f, 0.000223f, 0.005057f, -0.001103f, -0.005576f, -0.000007f, 0.000807f, -0.007205f, 0.015314f, 0.000949f, -0.010387f, -0.000031f, -0.001597f, 0.009814f, 0.000795f, 0.006636f, 0.009191f, 0.003427f, -0.000621f, 0.000425f, -0.003330f, -0.002196f, -0.002211f, 0.005814f, -0.001873f, -0.000778f, -0.002625f, 0.001989f, 0.000715f, -0.001158f, -0.000229f, -0.001552f, 0.000319f, -0.000251f, + 0.001198f, 0.001157f, 0.001965f, -0.010515f, -0.009515f, 0.010805f, 0.009911f, -0.008004f, 0.005971f, 0.000605f, 0.003082f, -0.026302f, 0.010185f, -0.003903f, -0.017957f, -0.023420f, 0.000642f, 0.016947f, 0.001035f, 0.010991f, 0.000422f, -0.021180f, -0.007300f, 0.002452f, 0.007425f, -0.003722f, -0.001799f, -0.008911f, 0.001197f, -0.001610f, 0.014991f, 0.007623f, 0.003198f, 0.002699f, 0.004085f, 0.005212f, 0.013670f, 0.008288f, -0.012047f, -0.001011f, 0.002821f, 0.002933f, -0.014332f, 0.004682f, -0.004251f, -0.009061f, -0.002553f, -0.000369f, 0.009831f, 0.002539f, -0.005470f, 0.009957f, 0.015510f, -0.003267f, -0.005863f, 0.003764f, -0.001095f, 0.008490f, 0.008652f, 0.006781f, -0.010346f, -0.007868f, 0.007445f, -0.003118f, -0.002588f, -0.007927f, 0.000874f, -0.011782f, 0.007042f, 0.006354f, 0.008331f, 0.002160f, 0.009680f, -0.010439f, -0.006559f, 0.013604f, 0.000723f, 0.005060f, 0.016049f, 0.006223f, 0.001590f, -0.006433f, 0.009419f, 0.001158f, -0.004761f, 0.002718f, -0.011328f, 0.000352f, -0.001184f, 0.001720f, 0.003055f, -0.001263f, -0.005042f, -0.002738f, -0.000813f, 0.002504f, + 0.002325f, 0.000816f, -0.001387f, 0.001419f, 0.003211f, 0.000601f, -0.001051f, 0.013413f, 0.001209f, 0.005208f, -0.011247f, -0.009550f, 0.005507f, -0.002631f, -0.004097f, -0.005213f, -0.004872f, 0.004091f, -0.013017f, -0.007455f, -0.016081f, -0.019329f, -0.003555f, 0.016131f, 0.010414f, -0.006484f, -0.001786f, -0.002216f, -0.003723f, -0.013916f, 0.010068f, -0.003477f, -0.003553f, 0.000903f, 0.006591f, -0.003119f, 0.000611f, -0.000461f, 0.009533f, -0.008765f, 0.009563f, 0.005225f, 0.011460f, -0.003879f, 0.008873f, 0.003951f, -0.005440f, 0.007992f, -0.005378f, 0.004609f, 0.008504f, -0.006376f, 0.008930f, -0.005296f, -0.004259f, -0.001327f, -0.002603f, 0.004499f, -0.002562f, -0.006751f, 0.002752f, -0.005859f, 0.001320f, 0.000816f, 0.000947f, 0.013436f, 0.002639f, -0.003070f, 0.000107f, -0.005488f, -0.007647f, 0.003983f, -0.001818f, 0.012825f, 0.013096f, 0.005312f, -0.003595f, -0.002004f, -0.000061f, -0.005137f, -0.005925f, 0.006602f, 0.010387f, 0.000345f, -0.001094f, 0.006380f, 0.006904f, -0.000887f, 0.002461f, 0.002217f, -0.004961f, 0.004747f, -0.000873f, 0.006808f, -0.003338f, -0.001294f, + -0.000223f, -0.002824f, -0.000275f, 0.004960f, -0.001050f, 0.001505f, 0.001487f, -0.003499f, 0.001133f, -0.000640f, -0.000671f, 0.001417f, 0.001333f, -0.002241f, 0.002592f, -0.000866f, -0.001062f, 0.000186f, -0.000251f, -0.000423f, -0.002007f, -0.001520f, 0.025522f, -0.010833f, 0.010449f, -0.013048f, -0.010979f, 0.000029f, -0.003066f, -0.002795f, 0.003535f, -0.005502f, 0.011022f, 0.010756f, 0.009209f, -0.002794f, -0.001231f, -0.004832f, -0.011818f, 0.001822f, -0.007111f, -0.001330f, 0.001266f, -0.003968f, 0.006691f, 0.002523f, -0.000834f, -0.019481f, -0.008153f, -0.012284f, 0.000432f, -0.008042f, -0.012366f, -0.005423f, -0.006846f, -0.007557f, 0.012253f, -0.009828f, 0.008628f, 0.000738f, -0.003514f, 0.004837f, 0.004137f, -0.008810f, -0.002440f, 0.000171f, 0.009455f, -0.000913f, -0.012998f, -0.016462f, -0.017157f, 0.004448f, -0.006287f, 0.000369f, -0.001388f, 0.002471f, 0.005758f, 0.009514f, -0.006608f, -0.003488f, 0.003103f, 0.003270f, 0.001188f, 0.011936f, -0.006711f, 0.007381f, -0.013747f, 0.026880f, 0.003273f, -0.002862f, 0.005194f, 0.002574f, 0.005108f, -0.007471f, -0.001349f, 0.002044f, + -0.000861f, -0.001605f, -0.013597f, -0.004505f, -0.009251f, -0.002738f, -0.001111f, -0.006640f, -0.006530f, 0.004838f, 0.005609f, 0.001730f, 0.001078f, -0.000608f, 0.004735f, 0.002815f, 0.005441f, -0.002724f, 0.000453f, 0.000187f, 0.004998f, -0.001998f, -0.000325f, -0.000286f, 0.000532f, -0.003957f, 0.000951f, -0.002856f, 0.001425f, 0.002034f, -0.000981f, -0.003323f, 0.000642f, 0.001062f, -0.001061f, -0.001122f, -0.003629f, 0.000985f, -0.000447f, -0.001803f, 0.002250f, 0.002655f, -0.000358f, -0.012410f, 0.001904f, 0.002405f, 0.000917f, -0.001887f, -0.007394f, 0.004539f, 0.003651f, -0.011202f, 0.013347f, -0.016448f, 0.020487f, -0.001915f, 0.006896f, 0.003094f, -0.000329f, -0.002112f, 0.004285f, 0.019204f, 0.021534f, -0.004027f, 0.003949f, -0.002502f, -0.002957f, 0.002925f, 0.004641f, 0.014788f, -0.001778f, 0.004538f, -0.007353f, 0.008145f, 0.001879f, 0.011677f, 0.005706f, 0.010943f, -0.015568f, 0.006687f, 0.005799f, -0.004846f, -0.000071f, 0.011874f, 0.000144f, 0.001008f, 0.003681f, 0.007258f, -0.002340f, -0.000935f, 0.022838f, 0.010909f, 0.002110f, 0.002157f, -0.004659f, 0.010414f, + -0.013649f, -0.020054f, -0.024287f, -0.001414f, 0.012914f, -0.000308f, 0.006486f, 0.017420f, 0.006945f, -0.002983f, -0.006003f, 0.009328f, -0.001701f, 0.022375f, 0.010111f, 0.003392f, 0.003209f, -0.012079f, 0.002679f, 0.009271f, -0.004584f, -0.013611f, 0.002499f, 0.005014f, -0.000504f, -0.004672f, -0.001655f, 0.002417f, -0.004358f, 0.002663f, 0.002629f, 0.002414f, -0.000793f, 0.002773f, -0.004276f, -0.003982f, -0.001250f, -0.002496f, 0.001488f, -0.003997f, 0.002452f, 0.004096f, 0.002724f, 0.003111f, 0.003117f, 0.001043f, 0.002031f, -0.005544f, -0.004668f, -0.001685f, -0.002409f, -0.002854f, -0.000524f, 0.001976f, 0.001130f, -0.000114f, 0.003614f, 0.002004f, -0.000186f, 0.004541f, 0.002850f, -0.029679f, 0.003213f, -0.002216f, 0.020408f, -0.015226f, 0.008974f, -0.031427f, 0.012413f, -0.002938f, -0.016002f, -0.017584f, -0.012291f, 0.009425f, 0.007371f, 0.023909f, 0.003203f, 0.007986f, 0.022890f, -0.003939f, -0.016593f, 0.002531f, -0.012776f, 0.003168f, 0.018673f, 0.003501f, -0.005186f, -0.002183f, -0.003526f, 0.005516f, 0.007259f, -0.001499f, 0.004867f, 0.009639f, -0.005950f, 0.003078f, + -0.011224f, -0.000837f, -0.014057f, -0.002175f, 0.001971f, -0.006651f, 0.010455f, 0.007144f, 0.008918f, 0.017717f, 0.001181f, 0.021434f, 0.016434f, 0.007958f, -0.011076f, 0.024575f, 0.010614f, 0.004346f, 0.021561f, -0.002325f, 0.000536f, 0.001825f, 0.007193f, -0.004453f, -0.006226f, -0.014706f, -0.014206f, -0.011608f, 0.000186f, -0.009154f, 0.018929f, -0.011348f, 0.007866f, 0.011807f, -0.006555f, 0.000630f, -0.005348f, -0.003141f, -0.018477f, -0.021200f, 0.009770f, -0.003680f, -0.007054f, -0.006275f, 0.001882f, 0.002500f, 0.001505f, 0.004171f, -0.007344f, 0.017369f, 0.001296f, 0.005233f, -0.003483f, 0.000977f, 0.005245f, -0.008450f, 0.002932f, 0.000334f, 0.003007f, 0.003941f, 0.000061f, 0.003079f, 0.006015f, 0.000018f, 0.001797f, 0.004275f, 0.004804f, 0.006143f, -0.000167f, 0.001054f, -0.003050f, -0.000875f, 0.000411f, -0.001468f, -0.004349f, 0.000315f, -0.001181f, -0.001925f, 0.000592f, 0.024925f, 0.001005f, 0.000358f, -0.002243f, -0.004804f, 0.004525f, 0.001090f, -0.012632f, -0.016205f, -0.021981f, -0.011493f, -0.023001f, -0.014607f, -0.007798f, -0.017009f, -0.010734f, -0.007410f, + -0.008812f, -0.023013f, 0.015879f, 0.009963f, 0.000643f, 0.008389f, 0.003888f, -0.006358f, 0.028696f, 0.001807f, -0.009838f, -0.005152f, -0.019354f, -0.008307f, 0.021386f, 0.001079f, -0.017835f, -0.017848f, 0.002669f, -0.018067f, 0.005865f, 0.006388f, -0.014042f, 0.000596f, 0.004472f, 0.001038f, 0.021055f, 0.006323f, -0.009519f, 0.002156f, -0.011425f, 0.010631f, 0.001576f, 0.004727f, -0.025599f, 0.017736f, -0.008751f, 0.007410f, 0.000666f, 0.003467f, 0.004287f, 0.000695f, -0.007402f, -0.000558f, -0.009949f, 0.000054f, -0.020161f, -0.000079f, -0.021754f, 0.028814f, -0.004817f, 0.018344f, -0.013387f, -0.006265f, -0.002812f, -0.013864f, -0.007679f, 0.011277f, -0.000321f, -0.000398f, 0.008418f, 0.010842f, 0.001817f, 0.017684f, 0.015366f, 0.021262f, 0.011393f, 0.004545f, 0.002679f, 0.009673f, 0.005238f, 0.003242f, 0.004013f, 0.002219f, 0.004826f, -0.001298f, 0.007826f, 0.001388f, -0.000399f, -0.001587f, 0.006121f, 0.002490f, 0.004387f, 0.002191f, -0.002727f, 0.002099f, 0.002482f, 0.002038f, -0.004557f, 0.008937f, 0.004902f, -0.000818f, -0.006682f, -0.000698f, -0.000911f, -0.004836f, + 0.001892f, 0.000934f, 0.005176f, -0.004114f, -0.009263f, -0.012770f, -0.000066f, 0.009373f, -0.024514f, -0.000020f, -0.010604f, -0.008491f, 0.017338f, -0.028273f, -0.026708f, 0.006947f, 0.035583f, 0.000902f, 0.003373f, 0.002727f, -0.005437f, 0.019481f, 0.018914f, 0.010923f, 0.005357f, -0.005143f, -0.028946f, 0.017141f, 0.000134f, -0.023192f, -0.007492f, 0.005365f, -0.001184f, 0.000183f, 0.002357f, -0.005594f, -0.022839f, -0.001298f, 0.000921f, -0.004185f, -0.009550f, 0.006837f, 0.019786f, -0.025556f, 0.015879f, -0.009590f, -0.004824f, 0.001504f, 0.012597f, 0.041491f, -0.026856f, -0.006780f, 0.002621f, -0.002677f, -0.004927f, 0.001356f, -0.010305f, 0.003565f, -0.009308f, 0.028519f, 0.009799f, 0.005329f, 0.007860f, -0.006049f, -0.001662f, 0.015087f, -0.002389f, 0.006547f, -0.012574f, 0.021888f, 0.000959f, -0.015527f, 0.030624f, -0.019543f, 0.014092f, 0.004000f, 0.006943f, 0.022262f, -0.008897f, 0.009467f, -0.001100f, 0.000023f, 0.002671f, -0.001514f, -0.015056f, -0.007990f, -0.000983f, -0.006671f, -0.002376f, -0.003646f, -0.009242f, -0.009452f, -0.007097f, 0.004372f, -0.008095f, 0.004632f, + -0.002175f, -0.000354f, -0.007105f, -0.004873f, -0.005246f, 0.004145f, -0.009804f, 0.000959f, 0.000932f, 0.005919f, 0.009283f, -0.003671f, -0.001785f, -0.008396f, -0.007166f, 0.000476f, -0.006306f, 0.001745f, -0.001182f, -0.005594f, 0.000089f, -0.001714f, 0.002517f, 0.003322f, -0.002352f, 0.030376f, 0.002390f, 0.007934f, 0.009024f, -0.005063f, -0.017460f, -0.013685f, 0.002117f, 0.030388f, 0.017232f, 0.003759f, -0.027141f, 0.003936f, -0.014920f, 0.000112f, 0.030401f, 0.029245f, 0.014778f, 0.019776f, -0.017805f, -0.036884f, -0.019310f, -0.026576f, 0.014766f, -0.000239f, -0.004481f, -0.000076f, -0.020116f, -0.005951f, 0.006242f, -0.003756f, -0.007635f, -0.007414f, 0.021544f, -0.001364f, 0.005872f, -0.006091f, 0.014129f, 0.003022f, -0.008132f, -0.017092f, -0.013140f, 0.039005f, -0.001666f, -0.008781f, 0.012464f, -0.022238f, 0.006996f, -0.012713f, -0.038902f, -0.008696f, -0.005052f, 0.011813f, 0.004523f, 0.010383f, 0.003296f, 0.015435f, 0.000587f, 0.001108f, 0.008533f, -0.037993f, -0.006000f, -0.010177f, -0.002708f, 0.003734f, 0.021848f, 0.024169f, 0.008704f, -0.006272f, -0.016630f, -0.021813f, + -0.007331f, -0.012815f, 0.002761f, -0.006351f, -0.006809f, -0.015007f, 0.022526f, 0.016278f, 0.006603f, 0.020758f, -0.004926f, 0.008319f, 0.012707f, -0.008040f, 0.007570f, -0.005161f, 0.001660f, 0.007605f, -0.002296f, -0.004957f, -0.002079f, -0.002713f, -0.001965f, -0.000121f, 0.000513f, 0.007540f, 0.000304f, 0.000949f, 0.002302f, -0.004102f, -0.011510f, 0.000522f, -0.002682f, -0.001436f, -0.002082f, -0.006714f, -0.000768f, 0.002319f, 0.010240f, 0.008478f, -0.004750f, 0.001245f, 0.006738f, -0.001362f, 0.001552f, -0.002356f, 0.001546f, 0.006531f, 0.000814f, 0.007161f, -0.043999f, -0.028777f, -0.006685f, -0.010498f, 0.022436f, 0.015403f, -0.003712f, 0.038657f, -0.039125f, -0.009143f, -0.014783f, 0.041293f, 0.019797f, -0.013604f, 0.015207f, 0.005772f, -0.016108f, 0.028513f, -0.031498f, 0.015559f, -0.014519f, 0.002439f, 0.003407f, -0.010526f, 0.027532f, -0.019387f, 0.016898f, -0.008085f, -0.040564f, -0.006744f, 0.028299f, -0.017163f, -0.027702f, 0.000362f, -0.003473f, -0.041434f, -0.007765f, 0.016604f, 0.007028f, 0.022075f, 0.016225f, -0.004693f, 0.039821f, -0.009546f, -0.012287f, -0.019606f, + -0.018262f, -0.017658f, 0.010919f, 0.014867f, -0.012842f, -0.014477f, 0.004756f, -0.012558f, 0.016689f, -0.004610f, 0.009052f, -0.006793f, -0.010373f, -0.007959f, -0.000244f, -0.023452f, 0.006335f, 0.016901f, -0.003967f, 0.007307f, 0.010147f, 0.012000f, 0.021631f, -0.015495f, 0.006951f, 0.016875f, -0.002187f, -0.035954f, -0.038280f, 0.004213f, -0.003647f, 0.002844f, -0.014015f, -0.005817f, 0.002813f, -0.013860f, -0.025156f, -0.007682f, 0.018975f, 0.015404f, -0.007569f, -0.003060f, 0.005838f, 0.005213f, -0.002997f, -0.006102f, 0.000455f, -0.000796f, -0.009887f, -0.003653f, 0.010513f, -0.003010f, 0.008449f, 0.001540f, -0.002621f, -0.005157f, 0.006792f, 0.006707f, 0.007861f, 0.000964f, -0.004394f, 0.004583f, -0.011765f, -0.007040f, 0.005826f, 0.002742f, 0.005004f, 0.009206f, -0.004664f, 0.001936f, 0.003627f, 0.004511f, 0.000887f, -0.005339f, -0.007701f, 0.003501f, -0.004176f, -0.002532f, 0.031769f, -0.019652f, -0.049898f, 0.000464f, 0.036021f, 0.045894f, 0.008801f, -0.016590f, -0.012357f, 0.004932f, -0.007872f, -0.006973f, 0.020342f, 0.020586f, -0.009689f, 0.019871f, -0.024603f, -0.002812f, + 0.018257f, -0.008532f, 0.022049f, 0.010468f, -0.002715f, -0.029693f, 0.011754f, -0.006775f, -0.006802f, 0.001761f, -0.001920f, -0.002963f, 0.041374f, -0.019962f, 0.021277f, 0.035402f, 0.024729f, 0.013060f, 0.000788f, -0.023038f, 0.023598f, -0.012807f, 0.022503f, -0.012292f, 0.005465f, -0.024237f, -0.004359f, -0.022898f, -0.014820f, 0.003700f, -0.021145f, -0.005757f, -0.007131f, -0.000695f, 0.019517f, -0.022370f, -0.019029f, -0.006897f, -0.010764f, -0.004396f, -0.018851f, -0.024672f, -0.030715f, 0.003318f, 0.024519f, -0.001499f, -0.014930f, 0.002757f, 0.005549f, 0.019343f, -0.020684f, -0.011903f, -0.006317f, -0.000366f, 0.014802f, 0.000426f, 0.004460f, -0.014376f, -0.005627f, 0.007764f, 0.029581f, 0.013238f, 0.020591f, 0.023589f, 0.030897f, 0.012036f, -0.003624f, -0.010497f, 0.007929f, 0.009603f, 0.013956f, 0.006019f, 0.001839f, 0.000315f, 0.019008f, 0.006912f, -0.006257f, 0.001783f, 0.010932f, 0.004499f, 0.003108f, -0.006448f, -0.006012f, -0.004396f, -0.008592f, 0.000958f, 0.009345f, 0.008706f, 0.002487f, -0.004621f, 0.012808f, 0.007366f, 0.016061f, 0.008392f, 0.001137f, 0.010667f, + 0.000823f, -0.007650f, 0.012507f, 0.000266f, -0.000887f, -0.004143f, 0.003065f, -0.002467f, 0.000502f, 0.010690f, -0.084133f, -0.039993f, 0.028068f, -0.068698f, -0.047624f, -0.003067f, -0.028032f, -0.019214f, 0.020962f, 0.023984f, 0.007341f, -0.004397f, 0.008679f, 0.068621f, -0.008416f, 0.010991f, 0.026405f, 0.030118f, -0.031297f, -0.016218f, -0.014828f, 0.025353f, 0.027641f, 0.013916f, 0.005078f, 0.025923f, -0.007623f, -0.012947f, 0.018173f, 0.035079f, 0.002482f, 0.011361f, 0.035632f, 0.026334f, 0.021426f, -0.015959f, 0.006737f, 0.010844f, -0.000086f, -0.000539f, 0.022862f, -0.007452f, -0.000380f, -0.002261f, 0.015259f, 0.000629f, -0.025048f, -0.016691f, 0.004995f, -0.033919f, 0.025719f, -0.007484f, 0.056853f, 0.002334f, 0.031167f, 0.006258f, -0.001394f, -0.018270f, -0.000916f, 0.007367f, -0.024091f, -0.012305f, -0.028139f, -0.003472f, 0.014334f, 0.019664f, -0.008588f, -0.045646f, 0.016518f, -0.007181f, 0.015549f, -0.016309f, -0.019644f, 0.014448f, -0.029682f, -0.022575f, 0.044082f, 0.000757f, 0.020263f, -0.004062f, -0.019187f, 0.005409f, 0.025926f, 0.006437f, 0.020598f, -0.033396f, + -0.001748f, -0.002164f, -0.005641f, -0.028692f, 0.028029f, -0.016659f, 0.001966f, -0.003171f, 0.003293f, -0.010565f, -0.001151f, 0.006027f, 0.008510f, -0.007009f, 0.018311f, -0.004420f, -0.006006f, -0.010668f, -0.009329f, -0.009187f, 0.008733f, -0.003455f, -0.006638f, -0.002603f, 0.002213f, -0.006956f, 0.012749f, -0.003721f, 0.014442f, -0.009004f, 0.006051f, 0.002388f, 0.005682f, 0.009577f, 0.001776f, 0.034149f, -0.015523f, -0.039443f, 0.016966f, -0.020587f, 0.008671f, -0.000497f, -0.019612f, 0.036350f, -0.048538f, -0.001979f, -0.058600f, 0.001457f, 0.047435f, 0.066327f, 0.031414f, -0.011361f, 0.030702f, -0.002302f, -0.004199f, 0.003321f, -0.005142f, 0.016328f, -0.001957f, -0.031007f, 0.001879f, -0.043099f, 0.015249f, -0.013323f, -0.009549f, 0.028942f, -0.000517f, -0.033137f, -0.036999f, 0.008617f, 0.005195f, -0.018452f, -0.015313f, 0.027787f, -0.040108f, -0.000196f, -0.008026f, 0.014204f, -0.010702f, -0.008697f, -0.032062f, -0.013646f, -0.014103f, -0.005980f, 0.023269f, -0.027472f, 0.009991f, -0.003332f, -0.004670f, 0.003629f, 0.010092f, -0.046518f, -0.004848f, 0.006331f, -0.004004f, 0.017240f, + -0.014552f, -0.020544f, -0.009267f, -0.052055f, -0.022857f, -0.022682f, 0.001207f, 0.022255f, 0.033598f, -0.015815f, 0.025456f, -0.043401f, 0.069730f, 0.004798f, -0.012373f, 0.036439f, -0.043057f, 0.036573f, 0.016469f, -0.009748f, 0.000894f, 0.012222f, 0.001107f, 0.005867f, 0.033432f, -0.014208f, 0.014350f, -0.007681f, 0.010426f, 0.016633f, 0.016502f, 0.020014f, -0.006732f, 0.016881f, 0.004133f, 0.002562f, -0.002635f, -0.022390f, 0.001019f, -0.015876f, 0.007503f, 0.010366f, -0.003274f, -0.002454f, 0.003175f, 0.002310f, 0.011403f, 0.005222f, -0.007934f, 0.012214f, 0.000046f, 0.001480f, 0.015243f, 0.010328f, 0.006234f, 0.027346f, -0.022201f, 0.000223f, 0.010222f, 0.000087f, -0.017373f, 0.004339f, -0.010946f, -0.010510f, 0.042545f, 0.002271f, -0.030636f, -0.000831f, -0.004761f, 0.019654f, 0.012909f, -0.018750f, 0.021340f, 0.000245f, -0.048128f, -0.052403f, -0.005140f, -0.015889f, 0.012907f, -0.002392f, -0.018585f, -0.047248f, -0.041216f, 0.022263f, -0.035086f, -0.007992f, 0.002091f, 0.010919f, 0.002497f, 0.033436f, 0.002701f, -0.017125f, 0.022389f, -0.003136f, 0.003182f, 0.020631f, + -0.027481f, -0.001942f, 0.005833f, -0.028083f, 0.016842f, 0.023068f, 0.010023f, 0.020512f, 0.010694f, 0.031848f, 0.008641f, 0.023148f, -0.032813f, -0.010358f, -0.005309f, -0.044063f, -0.000322f, -0.004889f, 0.018303f, -0.003078f, 0.020995f, -0.003649f, -0.025575f, -0.017492f, -0.001394f, -0.040759f, 0.017737f, 0.000991f, -0.007968f, 0.023627f, 0.014977f, 0.019606f, 0.020408f, 0.006142f, -0.002528f, 0.017108f, -0.055153f, 0.016586f, 0.006872f, 0.024543f, -0.009804f, -0.039011f, 0.024430f, -0.005993f, 0.042033f, -0.062202f, -0.022163f, -0.043594f, 0.029696f, -0.012790f, -0.040019f, -0.044661f, -0.029401f, -0.013290f, 0.014149f, 0.011074f, -0.012274f, -0.012764f, -0.006698f, -0.000903f, -0.013545f, -0.005215f, 0.022685f, 0.003434f, -0.002214f, 0.006586f, 0.004932f, 0.004083f, 0.012303f, -0.009651f, -0.012710f, -0.000401f, -0.022055f, -0.000079f, -0.007761f, -0.003216f, -0.014243f, -0.003904f, -0.019424f, -0.017434f, 0.021967f, -0.012349f, -0.000811f, 0.007341f, 0.010576f, -0.001915f, 0.018441f, -0.015400f, -0.004972f, 0.007593f, -0.018097f, -0.004992f, 0.021172f, 0.007581f, 0.004746f, -0.007262f, + -0.010932f, 0.008171f, 0.029169f, 0.027043f, 0.098929f, 0.074747f, 0.010132f, 0.021671f, 0.006285f, 0.057427f, 0.001591f, 0.027950f, -0.026074f, 0.068012f, -0.026929f, 0.061677f, -0.002757f, 0.039394f, -0.004567f, 0.027797f, -0.027637f, 0.006650f, 0.013916f, -0.015179f, -0.004932f, -0.008166f, -0.006354f, 0.018378f, 0.000475f, -0.015903f, -0.021834f, -0.033039f, -0.041940f, -0.020219f, -0.007025f, 0.000222f, 0.013260f, -0.035406f, 0.015046f, -0.019504f, -0.029972f, -0.006287f, -0.021882f, 0.009979f, -0.005285f, -0.046070f, -0.010885f, -0.023449f, -0.027667f, -0.029174f, 0.026523f, 0.035285f, -0.073830f, 0.016711f, 0.006647f, 0.020701f, 0.007407f, -0.009378f, 0.044799f, 0.025093f, 0.023487f, -0.061914f, -0.027587f, -0.000878f, 0.015346f, 0.051142f, 0.002019f, -0.006995f, 0.002583f, 0.043309f, 0.039076f, -0.037005f, 0.041811f, 0.003013f, 0.009474f, -0.007139f, 0.024584f, -0.052721f, -0.018326f, 0.054162f, -0.008214f, -0.003620f, -0.020779f, 0.036079f, 0.023757f, -0.018806f, -0.031537f, -0.005564f, -0.001239f, 0.003105f, 0.000596f, -0.006885f, -0.029386f, -0.010214f, 0.023137f, 0.030045f, + 0.018833f, -0.016788f, -0.004277f, -0.005007f, -0.014142f, 0.004498f, 0.004906f, 0.013808f, -0.002931f, -0.009996f, 0.008863f, 0.003227f, 0.005398f, 0.027158f, 0.003849f, -0.007757f, -0.010240f, 0.004535f, 0.009946f, 0.021101f, 0.004417f, -0.020853f, -0.010909f, -0.015707f, 0.006309f, 0.007744f, -0.016961f, -0.036624f, 0.011934f, -0.003175f, -0.005981f, -0.012934f, -0.022295f, 0.026644f, -0.011261f, 0.023150f, 0.036295f, -0.042103f, 0.012403f, -0.024278f, 0.068843f, -0.041584f, 0.038673f, 0.035599f, -0.014261f, -0.065315f, -0.038225f, -0.004797f, -0.017756f, -0.002453f, -0.030223f, -0.047727f, -0.063317f, -0.036521f, -0.042333f, 0.017519f, -0.036282f, 0.014366f, 0.003735f, -0.004643f, -0.004218f, -0.029985f, -0.009624f, -0.030791f, 0.008363f, 0.026500f, 0.034894f, 0.000105f, -0.010461f, -0.031600f, -0.007919f, 0.002548f, -0.018984f, 0.004728f, -0.025989f, -0.017154f, -0.004158f, -0.025847f, 0.019508f, -0.022895f, -0.066470f, 0.001891f, -0.002549f, -0.022346f, 0.027608f, 0.021460f, 0.031530f, 0.011724f, 0.024703f, 0.050424f, 0.008077f, -0.051307f, -0.012079f, 0.023293f, -0.011657f, -0.042753f, + 0.023069f, 0.032842f, 0.010770f, -0.000825f, -0.057534f, 0.050367f, -0.002924f, 0.040997f, -0.035010f, 0.041521f, 0.102728f, -0.009739f, -0.003447f, -0.051025f, 0.026668f, -0.041624f, 0.034123f, 0.016968f, -0.023055f, -0.005669f, -0.056218f, 0.012221f, -0.030873f, -0.000148f, 0.020979f, 0.020863f, -0.001235f, -0.015043f, -0.012914f, 0.014687f, 0.037259f, -0.018959f, -0.003406f, 0.005153f, -0.016903f, -0.005440f, -0.005647f, 0.007263f, -0.002279f, 0.015187f, -0.007701f, -0.018762f, -0.010499f, 0.004814f, 0.013827f, -0.018589f, -0.006025f, -0.000954f, 0.002022f, 0.012639f, 0.002438f, -0.005192f, 0.004313f, -0.031102f, -0.017861f, -0.002536f, -0.003227f, 0.005653f, 0.001371f, 0.001804f, -0.000987f, -0.005922f, 0.015115f, -0.001498f, 0.011165f, -0.001421f, -0.003756f, -0.011904f, -0.008119f, -0.081031f, 0.027691f, -0.106323f, 0.070431f, 0.025314f, -0.018069f, 0.075068f, -0.007081f, -0.038018f, 0.066576f, -0.025442f, -0.003505f, 0.014205f, 0.023358f, 0.061592f, 0.002612f, -0.004836f, 0.043481f, 0.018582f, 0.036529f, 0.044765f, 0.033177f, 0.003238f, 0.023219f, 0.003845f, -0.002226f, -0.024222f, + 0.015724f, 0.023598f, 0.005749f, -0.001197f, -0.026266f, 0.012868f, -0.024603f, 0.029944f, 0.029420f, 0.005330f, 0.034741f, -0.021108f, 0.022965f, 0.036181f, 0.023009f, -0.048244f, -0.052042f, 0.061510f, -0.005856f, 0.038577f, 0.059560f, 0.001681f, 0.000138f, -0.005914f, 0.011775f, 0.034651f, 0.032727f, 0.003701f, 0.027198f, 0.000314f, -0.030869f, -0.038323f, -0.057142f, 0.001315f, -0.023162f, 0.001134f, 0.032500f, 0.030687f, -0.053457f, 0.004916f, 0.020826f, -0.046620f, 0.007857f, 0.065642f, -0.028270f, -0.032248f, 0.035109f, -0.037342f, 0.008727f, -0.010249f, 0.068541f, -0.019569f, 0.042350f, -0.020642f, 0.035596f, -0.002989f, 0.013246f, 0.028774f, -0.044720f, -0.013270f, 0.017068f, -0.029279f, 0.021749f, -0.026238f, -0.007354f, -0.014656f, -0.013687f, 0.002290f, -0.007354f, -0.011824f, 0.007170f, 0.020739f, -0.010255f, 0.005944f, 0.007429f, -0.017288f, 0.003117f, 0.002799f, -0.004555f, -0.012109f, -0.005170f, -0.009262f, -0.028761f, -0.011024f, 0.006152f, -0.037356f, 0.013649f, -0.018952f, 0.014549f, -0.008393f, -0.003679f, -0.026075f, -0.013860f, 0.000723f, 0.007290f, -0.011288f, + -0.025851f, 0.004707f, 0.001726f, 0.014264f, 0.005915f, 0.000439f, 0.016753f, 0.013879f, 0.001382f, 0.007702f, -0.037235f, 0.008230f, -0.043127f, 0.088475f, 0.021671f, -0.047352f, 0.017944f, -0.011052f, -0.042140f, -0.049676f, -0.050381f, 0.014822f, -0.002518f, 0.044333f, 0.065838f, 0.031571f, 0.015928f, -0.008073f, 0.021846f, 0.001993f, -0.082928f, 0.036255f, 0.086080f, -0.056485f, -0.059279f, -0.051298f, -0.072450f, 0.052259f, -0.071340f, 0.031971f, 0.000426f, -0.009055f, -0.000503f, -0.023303f, -0.027623f, 0.035243f, -0.073392f, 0.075258f, 0.043227f, 0.009855f, -0.048305f, -0.036631f, -0.032010f, 0.006592f, 0.012548f, -0.031394f, -0.004375f, -0.023230f, 0.051873f, 0.023359f, -0.009433f, -0.001756f, 0.021295f, 0.004610f, 0.024314f, -0.042654f, -0.016880f, -0.004265f, -0.007587f, -0.039698f, -0.027862f, 0.023260f, -0.075187f, -0.044530f, 0.005652f, 0.087610f, 0.042310f, -0.026981f, -0.001866f, -0.066991f, 0.032417f, 0.101643f, 0.003534f, -0.022145f, -0.015381f, -0.048357f, 0.062683f, -0.020427f, -0.024309f, -0.002367f, 0.037132f, 0.023104f, -0.032322f, -0.029355f, -0.010453f, 0.032500f, + -0.008796f, 0.009324f, -0.002609f, -0.026293f, -0.008485f, 0.041237f, 0.023729f, 0.003113f, -0.019310f, -0.003369f, -0.002962f, 0.032082f, 0.026332f, 0.012891f, 0.011879f, -0.038708f, 0.014663f, 0.013519f, -0.005771f, 0.008401f, -0.006027f, -0.005808f, -0.033641f, -0.003892f, -0.001731f, -0.005085f, -0.010735f, 0.008690f, 0.012335f, 0.006145f, -0.039544f, -0.034368f, -0.016759f, -0.000452f, 0.002426f, -0.040241f, 0.014254f, 0.049806f, 0.010140f, -0.014261f, 0.000980f, 0.007423f, 0.000203f, -0.000069f, -0.041384f, -0.028563f, -0.082556f, 0.017834f, -0.060875f, -0.090927f, 0.021151f, 0.050016f, 0.012176f, 0.013307f, -0.038592f, -0.048216f, -0.012665f, -0.071356f, -0.035168f, 0.018431f, -0.059764f, 0.093696f, 0.018090f, -0.023226f, 0.019996f, -0.045145f, -0.089093f, -0.029986f, -0.068187f, 0.010629f, 0.019674f, -0.025110f, -0.048557f, -0.024694f, -0.030035f, 0.025917f, -0.035678f, -0.013115f, -0.004806f, 0.039998f, -0.029255f, -0.005480f, -0.013792f, 0.010093f, 0.016580f, 0.002886f, -0.012221f, 0.041271f, 0.053981f, 0.034486f, -0.027964f, -0.022909f, -0.079926f, -0.044531f, -0.018441f, 0.020944f, + 0.133704f, -0.023053f, 0.001351f, 0.059457f, -0.005639f, 0.025227f, -0.030693f, -0.031880f, -0.025876f, 0.028124f, -0.075844f, 0.000404f, -0.010263f, -0.001131f, 0.065188f, -0.028935f, 0.098802f, 0.008602f, 0.074813f, -0.095826f, -0.028940f, 0.027519f, -0.002150f, -0.041667f, -0.035226f, 0.077489f, -0.080290f, -0.066179f, 0.095009f, 0.016639f, 0.082456f, -0.032998f, -0.005765f, -0.005884f, 0.026359f, 0.011251f, -0.007850f, 0.028037f, 0.027950f, -0.001647f, 0.013004f, 0.008775f, 0.002714f, -0.009900f, -0.018088f, -0.004163f, -0.012061f, -0.015887f, 0.014432f, 0.008455f, -0.013648f, 0.009506f, -0.029489f, -0.002955f, 0.020367f, 0.035978f, -0.003163f, -0.022775f, -0.001994f, -0.025909f, 0.014520f, 0.024730f, -0.017550f, -0.014242f, 0.013643f, 0.016498f, -0.037197f, 0.013202f, 0.001359f, 0.024089f, -0.015975f, -0.016181f, -0.000450f, 0.007660f, 0.010951f, -0.041523f, 0.006481f, -0.017563f, 0.032691f, -0.011438f, -0.004933f, -0.082201f, 0.039102f, 0.060263f, -0.043764f, -0.035985f, -0.012321f, -0.039525f, -0.047602f, 0.012665f, 0.014043f, 0.036920f, 0.001600f, 0.032254f, 0.057444f, 0.059922f, + 0.039771f, 0.013723f, -0.043996f, 0.004270f, 0.022843f, 0.030278f, 0.046605f, 0.000433f, -0.024153f, -0.035171f, -0.013281f, 0.047217f, -0.019417f, 0.018527f, 0.041067f, 0.003971f, 0.080710f, 0.009225f, -0.051532f, 0.044444f, 0.043968f, 0.012595f, 0.018957f, 0.040711f, 0.006520f, 0.003361f, -0.047286f, 0.102051f, -0.108891f, -0.080161f, -0.092885f, -0.030866f, 0.019230f, -0.054723f, 0.028064f, 0.060802f, -0.018054f, 0.005840f, 0.053741f, 0.017029f, -0.058191f, -0.020350f, -0.045028f, -0.006608f, 0.003380f, 0.002809f, 0.051973f, 0.050909f, -0.011709f, -0.013063f, 0.032665f, 0.078467f, 0.013686f, 0.064518f, -0.054524f, 0.057323f, -0.025188f, 0.018868f, -0.011459f, -0.036895f, -0.025487f, -0.006027f, 0.026083f, 0.015731f, 0.064222f, -0.083268f, 0.042315f, -0.033098f, -0.020461f, -0.016432f, 0.030809f, -0.014893f, -0.002836f, 0.006422f, -0.033251f, 0.020581f, -0.016247f, -0.001418f, -0.025229f, 0.007512f, -0.005068f, 0.000799f, -0.028417f, 0.003899f, -0.002563f, 0.005349f, -0.002736f, -0.031379f, 0.012445f, -0.018035f, -0.016042f, -0.007695f, 0.023186f, 0.026406f, 0.029657f, -0.025794f, + 0.050948f, -0.038764f, -0.011513f, 0.002483f, -0.004091f, -0.028783f, -0.015175f, -0.002093f, -0.021189f, 0.005607f, -0.001683f, -0.001407f, -0.002454f, -0.021505f, 0.002788f, -0.004021f, -0.046487f, -0.093536f, -0.094146f, -0.068136f, 0.013992f, 0.174922f, 0.044214f, -0.024119f, -0.052877f, -0.126387f, -0.177780f, 0.040147f, 0.073641f, 0.088402f, -0.018594f, 0.007669f, -0.052126f, -0.090689f, 0.026157f, 0.016475f, 0.029518f, 0.004273f, -0.076056f, -0.023232f, 0.018590f, -0.015284f, -0.002996f, -0.014383f, 0.099111f, 0.087035f, 0.058688f, -0.005362f, -0.042535f, -0.072240f, -0.047819f, -0.043225f, 0.067703f, -0.011209f, 0.049543f, 0.022413f, 0.023205f, -0.030446f, -0.164670f, -0.113368f, 0.055993f, -0.089203f, -0.030440f, 0.190007f, 0.130646f, 0.098175f, -0.074402f, 0.053779f, -0.051529f, 0.003785f, 0.003783f, 0.027591f, 0.080602f, 0.142052f, -0.054370f, -0.005047f, -0.093642f, -0.075649f, -0.123932f, 0.013472f, -0.005103f, -0.133434f, -0.031954f, 0.085986f, 0.032144f, 0.060024f, 0.081348f, 0.146576f, -0.106737f, -0.064049f, 0.008498f, -0.087114f, -0.011207f, 0.048756f, 0.114182f, 0.058066f, + 0.017852f, -0.069630f, -0.066761f, 0.045122f, -0.018987f, 0.067313f, 0.059184f, -0.015932f, 0.027135f, 0.010926f, -0.011344f, -0.022342f, -0.012992f, -0.008399f, 0.020135f, 0.005874f, -0.000469f, 0.007044f, -0.002039f, 0.009762f, 0.000315f, 0.042629f, 0.035059f, 0.055553f, 0.010055f, -0.030440f, -0.064152f, -0.052398f, 0.021410f, 0.049930f, 0.057195f, -0.007096f, -0.036439f, -0.147624f, -0.075831f, -0.069844f, 0.001752f, 0.007562f, 0.015171f, -0.000444f, 0.011083f, -0.016640f, 0.000008f, -0.024663f, -0.022040f, 0.031326f, 0.027655f, 0.016114f, 0.016280f, 0.008230f, 0.003788f, 0.043330f, -0.070261f, -0.232704f, -0.216543f, -0.124283f, -0.135165f, -0.033678f, 0.224208f, 0.113939f, 0.230674f, 0.204713f, 0.320849f, 0.229166f, 0.197121f, 0.031842f, -0.085531f, -0.193386f, -0.309932f, -0.263180f, -0.265074f, -0.138506f, -0.066488f, -0.015570f, 0.002238f, 0.007673f, 0.054754f, 0.073199f, 0.184495f, 0.112087f, 0.217720f, 0.141874f, 0.186632f, 0.067577f, 0.180333f, 0.062705f, 0.044130f, 0.042739f, -0.010711f, -0.050554f, -0.122050f, -0.140791f, -0.261484f, -0.179066f, -0.331353f, -0.262102f, + -0.402167f, -0.238368f, -0.189195f, -0.045581f, 0.110525f, 0.058856f, 0.009934f, 0.110406f, 0.235826f, 0.315103f, 0.413032f, 0.492411f, 0.421274f, 0.307830f, 0.383779f, 0.316737f, 0.177505f, 0.079913f, -0.019692f, -0.131952f, -0.305488f, -0.362737f, -0.485894f, -0.627235f, -0.725990f, -0.655043f, -0.577414f, -0.410847f, -0.280587f, 0.086045f, 0.270586f, 0.329908f, 0.507880f, 0.424163f, 0.529662f, 0.556768f, 0.546060f, 0.629623f, 0.413234f, 0.107448f, -0.104066f, -0.201662f, -0.249751f, -0.161599f, -0.233906f, -0.200411f, -0.234098f, -0.316656f, -0.320430f, -0.372895f, -0.220911f, -0.171848f, -0.146649f, -0.081833f, -0.005044f, 0.022103f, 0.090516f, 0.246019f, 0.259060f, 0.368024f, 0.320192f, 0.420889f, 0.309344f, 0.206865f, 0.213257f, 0.081432f, -0.056075f, -0.091262f, -0.405984f, -0.523181f, -0.487361f, -0.429882f, -0.251888f, -0.197509f, -0.108200f, 0.009526f, 0.109542f, 0.167268f, 0.227143f, 0.271422f, 0.322529f, 0.306463f, 0.289496f, 0.255079f, 0.142338f, -0.000567f, -0.072406f, -0.168279f, -0.176298f, -0.150816f, -0.123358f, -0.128319f, -0.130115f, -0.102088f, -0.073510f, -0.043437f, + -0.018375f, -0.016628f, -0.012075f, 0.003653f, -0.012774f, -0.014846f, 0.017627f, 0.041846f, 0.046475f, 0.030613f, 0.021475f, 0.035935f, 0.043311f, 0.031792f, 0.028928f, 0.026921f, 0.016867f, 0.011463f, 0.009708f}, + {-0.022382f, 0.008214f, -0.012780f, 0.006803f, -0.007245f, -0.014779f, -0.025478f, 0.004400f, 0.000678f, 0.006315f, 0.005545f, -0.001848f, -0.001942f, 0.001843f, 0.015282f, -0.010980f, -0.019535f, 0.006374f, -0.008126f, -0.013117f, 0.000154f, -0.002024f, 0.007981f, 0.002794f, 0.005671f, -0.005939f, -0.001532f, -0.003922f, 0.013006f, -0.003649f, -0.005366f, -0.004741f, -0.002384f, -0.003244f, -0.005331f, -0.004724f, -0.003298f, 0.002505f, 0.001031f, 0.001625f, 0.000368f, 0.003319f, 0.005474f, 0.002731f, -0.005023f, -0.014861f, -0.000227f, -0.010362f, 0.001413f, -0.000788f, -0.004760f, 0.006518f, 0.000369f, -0.000046f, -0.014800f, -0.006106f, 0.001890f, -0.001247f, 0.005060f, 0.000282f, 0.004494f, -0.004368f, 0.001816f, -0.001948f, 0.008999f, -0.003314f, 0.004699f, -0.008221f, -0.008172f, -0.010324f, 0.000425f, -0.002524f, -0.003067f, -0.000029f, -0.003658f, -0.000161f, -0.004252f, 0.000788f, 0.000101f, -0.001854f, -0.006525f, 0.000546f, 0.000586f, 0.003609f, 0.003179f, -0.000065f, 0.003392f, -0.000465f, -0.002782f, -0.000987f, -0.001359f, 0.001259f, -0.000112f, 0.000094f, 0.001876f, 0.001328f, + -0.000334f, 0.001690f, -0.001280f, -0.016016f, -0.003346f, -0.002140f, -0.004575f, -0.002087f, -0.005506f, 0.005251f, -0.002210f, -0.001898f, -0.000508f, 0.000080f, -0.000377f, -0.003881f, 0.014099f, 0.009074f, 0.014737f, -0.006956f, 0.014666f, -0.008751f, -0.006183f, 0.005701f, 0.016245f, -0.000384f, -0.009955f, -0.014621f, -0.010558f, -0.002041f, 0.011555f, 0.004547f, 0.003861f, 0.005140f, -0.005187f, 0.007894f, 0.000929f, 0.005895f, -0.002967f, -0.013318f, 0.003536f, -0.009220f, -0.006391f, -0.006472f, -0.001626f, -0.016901f, -0.000874f, 0.000785f, -0.007151f, 0.015765f, -0.003090f, -0.005110f, -0.006441f, -0.000167f, 0.001638f, -0.006768f, 0.000127f, -0.008298f, -0.003227f, 0.000223f, -0.003527f, 0.011339f, 0.000241f, -0.003059f, 0.006244f, 0.004074f, 0.010394f, 0.004223f, 0.012516f, 0.003113f, 0.010210f, -0.011779f, 0.002939f, 0.009423f, -0.003346f, -0.008409f, -0.011713f, -0.000219f, -0.001036f, -0.002306f, 0.002721f, 0.003421f, -0.002592f, 0.009043f, -0.007903f, 0.003015f, 0.003016f, -0.005769f, 0.004086f, 0.000970f, -0.004376f, 0.002289f, -0.001213f, 0.000918f, -0.004115f, 0.001259f, + 0.000346f, 0.000766f, -0.000597f, -0.000249f, 0.001808f, 0.000542f, 0.003475f, 0.018138f, -0.008159f, -0.006265f, 0.001864f, -0.003975f, -0.002946f, 0.009127f, -0.007006f, 0.008792f, 0.004059f, 0.000252f, 0.004510f, -0.005790f, -0.005525f, -0.010202f, -0.011009f, 0.014634f, 0.006938f, 0.005191f, 0.007841f, -0.005030f, -0.003353f, -0.003682f, 0.018450f, -0.007049f, 0.020189f, -0.000606f, -0.005079f, -0.004775f, -0.010620f, -0.011396f, -0.013873f, -0.000782f, -0.003461f, 0.002599f, 0.013495f, -0.001064f, -0.006260f, -0.018674f, 0.000697f, 0.014988f, 0.021918f, -0.010179f, 0.005689f, 0.004119f, -0.005525f, -0.004859f, 0.005746f, 0.020818f, -0.004908f, 0.003358f, -0.001741f, -0.002929f, -0.001906f, 0.010041f, 0.014384f, -0.010766f, -0.005863f, 0.004552f, 0.018847f, 0.003244f, 0.013358f, -0.010782f, -0.010066f, -0.000447f, -0.001639f, 0.003922f, 0.002888f, -0.000134f, 0.001209f, 0.002063f, -0.004873f, 0.002399f, 0.006118f, 0.004790f, -0.003658f, 0.012141f, -0.003040f, 0.007675f, -0.003924f, -0.004029f, 0.004542f, 0.003919f, 0.004108f, 0.001038f, 0.004282f, 0.000936f, -0.006228f, -0.004126f, + 0.001240f, -0.000179f, 0.002327f, -0.001053f, 0.003465f, -0.000029f, 0.001944f, -0.001740f, -0.000326f, -0.000041f, -0.000897f, -0.002044f, -0.000179f, -0.001197f, -0.000314f, -0.001464f, -0.001344f, 0.003528f, -0.000031f, -0.001505f, 0.003707f, 0.000202f, 0.029583f, -0.020574f, -0.004657f, -0.008630f, 0.002182f, 0.007777f, 0.014133f, -0.014408f, 0.009642f, -0.003864f, -0.015247f, -0.024562f, -0.005152f, -0.010511f, 0.001587f, -0.002463f, -0.010479f, -0.005406f, 0.005547f, 0.005905f, 0.018947f, 0.010474f, 0.009566f, 0.000881f, 0.002874f, -0.010014f, -0.006851f, 0.015232f, 0.011600f, 0.007865f, 0.003547f, 0.007253f, 0.001425f, -0.000041f, -0.012967f, -0.018235f, 0.011981f, -0.004937f, -0.012355f, -0.005918f, -0.007823f, 0.006390f, -0.006908f, 0.015314f, 0.003406f, -0.008974f, -0.004479f, -0.006894f, -0.006048f, 0.007438f, 0.011168f, -0.001060f, 0.007478f, -0.005682f, -0.006395f, -0.000041f, 0.001378f, -0.006049f, -0.002472f, 0.008816f, -0.000045f, -0.003753f, -0.004529f, 0.004768f, 0.005251f, -0.000764f, 0.006378f, 0.000832f, -0.004777f, 0.015298f, -0.002343f, 0.001620f, 0.000588f, -0.018590f, + 0.007074f, 0.005738f, 0.009459f, 0.006194f, -0.006934f, -0.001619f, -0.016860f, -0.007749f, -0.015486f, -0.005694f, -0.007030f, -0.000007f, 0.001304f, -0.010173f, 0.000283f, -0.002508f, -0.000131f, 0.004241f, -0.001693f, -0.001931f, -0.000500f, -0.002863f, 0.000335f, -0.001492f, 0.000991f, -0.001786f, -0.003936f, -0.001964f, -0.001125f, -0.006385f, -0.000746f, -0.000357f, 0.001137f, -0.000457f, 0.000603f, -0.000409f, -0.000023f, -0.003442f, -0.004550f, 0.000377f, -0.000816f, -0.002015f, 0.000640f, -0.020138f, 0.005365f, 0.000350f, -0.005871f, -0.010967f, 0.004777f, -0.010474f, -0.001814f, 0.018483f, 0.027926f, 0.013824f, 0.015410f, -0.001006f, -0.007585f, 0.011625f, 0.010412f, 0.004479f, 0.005619f, 0.013836f, -0.001893f, 0.010100f, 0.009789f, 0.014352f, 0.013750f, -0.011020f, 0.009256f, -0.000582f, 0.003326f, -0.010258f, 0.003286f, -0.001254f, 0.009429f, -0.003470f, -0.002523f, -0.007203f, 0.006890f, -0.011244f, -0.009138f, 0.001056f, 0.009892f, 0.005481f, -0.005791f, -0.002923f, -0.001714f, -0.003766f, 0.006014f, -0.013556f, 0.012699f, 0.000075f, 0.015771f, -0.022114f, 0.001668f, -0.019903f, + -0.006229f, -0.006252f, 0.005561f, -0.001962f, -0.004472f, 0.004533f, 0.001749f, 0.005535f, 0.008747f, 0.014342f, -0.001673f, -0.011279f, 0.002542f, 0.019280f, 0.003996f, -0.005408f, -0.001316f, 0.011941f, -0.006142f, 0.007321f, -0.005931f, -0.020321f, 0.011911f, 0.012676f, 0.011714f, -0.009972f, -0.015089f, -0.010803f, 0.012946f, -0.001240f, -0.001881f, 0.009244f, 0.003451f, 0.002390f, 0.001652f, -0.000498f, 0.003627f, 0.004889f, -0.001497f, -0.002446f, 0.002762f, 0.000429f, -0.000811f, 0.001758f, -0.002479f, 0.000891f, 0.004219f, -0.001563f, 0.004427f, -0.001674f, -0.003134f, 0.001680f, -0.000010f, 0.000173f, 0.002283f, 0.001837f, 0.002317f, 0.001905f, 0.001688f, 0.000032f, 0.002239f, -0.030559f, 0.000469f, -0.006816f, 0.002761f, -0.017139f, 0.002040f, 0.002769f, 0.022608f, -0.018181f, 0.000185f, -0.024372f, 0.005498f, -0.014751f, -0.003623f, 0.000835f, -0.008002f, 0.006970f, 0.003075f, -0.012794f, 0.000200f, -0.000258f, 0.011738f, -0.007761f, 0.018931f, -0.000298f, -0.016468f, -0.008460f, 0.020152f, -0.002014f, 0.008051f, 0.005298f, -0.003359f, 0.011993f, -0.013381f, -0.012715f, + -0.009858f, 0.001303f, -0.012814f, 0.013518f, -0.007513f, 0.008642f, -0.012406f, -0.000227f, -0.015068f, 0.009804f, 0.001306f, 0.011759f, 0.010564f, -0.010111f, 0.019881f, 0.016882f, 0.016005f, 0.003082f, 0.016808f, 0.013736f, -0.014286f, 0.012163f, 0.005842f, 0.001039f, -0.013261f, 0.006016f, -0.011286f, 0.011089f, -0.004856f, -0.008991f, -0.001089f, 0.016588f, 0.005932f, -0.019306f, 0.018308f, -0.001611f, -0.006481f, -0.011079f, 0.018651f, 0.016033f, -0.013907f, 0.013657f, -0.000997f, -0.016684f, 0.000205f, -0.009531f, -0.005169f, 0.009004f, -0.007986f, 0.006394f, -0.000664f, 0.002765f, -0.003821f, 0.004838f, -0.000678f, -0.000634f, -0.001098f, -0.001962f, 0.001769f, 0.000833f, -0.004627f, 0.001523f, 0.002325f, -0.000140f, 0.001738f, 0.001887f, -0.004339f, 0.000798f, -0.000505f, -0.000054f, -0.003654f, 0.001157f, -0.001485f, -0.002373f, -0.004867f, 0.005472f, 0.001197f, -0.002821f, -0.000732f, 0.043555f, 0.007410f, -0.001728f, -0.015007f, -0.028200f, 0.007210f, -0.004145f, -0.041398f, 0.036336f, -0.017591f, -0.026267f, 0.005561f, -0.001667f, 0.004903f, -0.001685f, 0.007050f, 0.010488f, + 0.000147f, -0.000655f, -0.021153f, -0.001744f, -0.002000f, 0.024966f, -0.004549f, 0.000664f, 0.009192f, -0.004362f, -0.003064f, -0.010136f, 0.021315f, -0.015968f, 0.015404f, -0.003781f, -0.012758f, 0.002409f, -0.014264f, -0.007236f, -0.023171f, 0.004104f, 0.010651f, -0.006247f, -0.011556f, -0.009132f, 0.014021f, -0.021705f, -0.005129f, -0.010692f, -0.000294f, -0.003091f, 0.002839f, -0.018825f, 0.018373f, -0.025711f, -0.017589f, 0.007008f, 0.003118f, -0.000949f, 0.006885f, -0.013321f, -0.019197f, 0.002410f, -0.005212f, -0.000850f, 0.009442f, -0.011452f, 0.008561f, 0.005982f, 0.021201f, -0.005839f, 0.003054f, -0.001599f, 0.000320f, 0.029414f, 0.002477f, 0.029124f, -0.007008f, -0.010888f, 0.003331f, -0.014925f, -0.001318f, 0.014905f, 0.001213f, -0.017367f, -0.015220f, 0.004315f, -0.001601f, 0.000110f, 0.014951f, 0.001207f, -0.002788f, 0.006249f, -0.000831f, -0.000555f, -0.006955f, 0.002633f, 0.003288f, -0.003455f, -0.000073f, -0.001671f, 0.005790f, -0.002554f, -0.001143f, 0.003018f, 0.000793f, 0.001857f, -0.000520f, 0.003363f, -0.001058f, 0.000080f, 0.001791f, -0.003589f, 0.004571f, -0.002810f, + 0.001714f, 0.003886f, 0.002112f, 0.003678f, 0.001027f, -0.032104f, -0.004340f, -0.006651f, -0.026074f, -0.044780f, 0.013608f, 0.023026f, -0.016510f, -0.008013f, 0.012955f, -0.004960f, 0.027649f, -0.003241f, -0.015009f, -0.008994f, -0.041749f, 0.013923f, 0.004542f, -0.003927f, -0.029371f, 0.006774f, -0.016404f, -0.004415f, -0.014419f, -0.007432f, 0.020613f, -0.020056f, 0.008441f, -0.029633f, 0.018742f, 0.003641f, 0.000225f, -0.008636f, 0.002079f, -0.003975f, -0.016647f, -0.031189f, 0.005879f, -0.000064f, 0.006503f, 0.012911f, -0.007700f, -0.002604f, -0.020137f, -0.010393f, -0.005505f, 0.008353f, 0.005572f, 0.014625f, 0.023374f, 0.018290f, 0.009312f, 0.013931f, 0.004113f, 0.014526f, 0.013009f, -0.012932f, 0.014924f, 0.016935f, -0.003659f, 0.022717f, -0.002536f, 0.026672f, -0.012003f, -0.028862f, -0.004860f, 0.018253f, 0.020034f, 0.023113f, -0.004640f, -0.040229f, -0.004194f, -0.002223f, 0.001359f, -0.001445f, -0.010033f, 0.005672f, -0.029449f, 0.022717f, 0.014217f, 0.013744f, -0.015500f, -0.014568f, -0.003363f, 0.008401f, -0.001205f, -0.016284f, -0.000025f, -0.007994f, -0.013346f, -0.005370f, + -0.002352f, -0.006383f, 0.000419f, -0.005406f, 0.002496f, -0.003400f, -0.001996f, 0.004156f, 0.000621f, 0.001856f, -0.002278f, -0.005862f, -0.006601f, 0.004418f, -0.005303f, -0.000251f, -0.002053f, 0.002692f, -0.002273f, -0.001381f, -0.002254f, 0.006670f, 0.003383f, 0.001993f, -0.002284f, 0.042743f, -0.009394f, -0.010254f, 0.014258f, 0.023019f, -0.001648f, 0.010719f, 0.026649f, 0.019261f, -0.043748f, -0.040188f, 0.000328f, -0.003853f, 0.005895f, -0.017956f, -0.031919f, 0.007591f, 0.025583f, 0.016917f, -0.018533f, 0.030114f, 0.024314f, 0.022844f, -0.038354f, 0.010873f, 0.020101f, 0.001049f, 0.003049f, 0.017136f, 0.039494f, -0.007619f, -0.018072f, 0.012002f, 0.008941f, -0.005364f, 0.021338f, 0.031899f, 0.005937f, 0.033046f, 0.014420f, -0.024771f, 0.002776f, 0.027408f, -0.002977f, -0.011226f, 0.014166f, 0.002311f, 0.005374f, 0.028767f, 0.018434f, 0.009802f, 0.003385f, -0.033353f, -0.034026f, -0.002821f, 0.005361f, 0.008904f, -0.010521f, -0.001457f, -0.008821f, 0.003009f, 0.004210f, -0.012710f, 0.004791f, -0.007794f, -0.002018f, -0.010796f, 0.001185f, 0.021268f, -0.012601f, -0.030663f, + -0.004833f, -0.026076f, 0.005709f, -0.009288f, -0.000723f, -0.003474f, 0.012280f, -0.004581f, 0.008877f, -0.000084f, 0.007604f, 0.003650f, -0.003606f, -0.004129f, -0.005377f, -0.015106f, 0.005453f, 0.002011f, 0.003731f, 0.000546f, -0.011776f, 0.005928f, -0.009230f, -0.007662f, -0.002743f, -0.009850f, -0.002163f, -0.003189f, -0.003774f, -0.003066f, 0.006345f, -0.002794f, 0.004199f, -0.000349f, 0.003358f, 0.000665f, 0.008209f, -0.003528f, 0.002148f, -0.006642f, -0.001804f, -0.005687f, -0.005359f, -0.001032f, -0.003984f, 0.012826f, 0.005267f, 0.000546f, -0.001900f, -0.001731f, -0.071686f, -0.044835f, -0.013800f, 0.012654f, -0.004702f, -0.018133f, 0.002862f, -0.017682f, 0.049634f, -0.020563f, 0.031719f, 0.048985f, 0.026394f, 0.023962f, -0.019643f, 0.017134f, -0.009930f, -0.023218f, 0.019554f, 0.022907f, 0.015046f, 0.032870f, -0.000176f, -0.002092f, -0.015065f, -0.015402f, -0.013244f, -0.021073f, -0.020568f, -0.014213f, 0.007337f, 0.002407f, -0.000588f, -0.013405f, -0.007508f, -0.020465f, 0.007956f, -0.017734f, -0.016175f, -0.007450f, 0.007992f, -0.000514f, -0.011054f, -0.029618f, 0.003082f, -0.009066f, + 0.010161f, -0.034863f, -0.027089f, 0.029769f, -0.005041f, -0.006279f, -0.014406f, -0.009012f, 0.022206f, 0.006891f, -0.005126f, 0.011961f, -0.003830f, 0.012463f, 0.009810f, 0.014284f, -0.011016f, -0.017837f, -0.044240f, 0.002585f, -0.042923f, -0.003347f, -0.036406f, -0.005653f, 0.033540f, -0.004760f, 0.005561f, -0.024724f, -0.010970f, -0.012987f, 0.002248f, -0.016050f, -0.009535f, 0.014840f, 0.018542f, -0.002451f, -0.002421f, 0.001684f, -0.009174f, 0.002744f, -0.001481f, -0.009005f, -0.003991f, -0.007777f, -0.003373f, -0.004632f, -0.020211f, 0.002950f, -0.003816f, -0.003049f, 0.000703f, -0.005881f, -0.006903f, -0.014050f, -0.003697f, -0.008336f, -0.009894f, -0.002245f, -0.012328f, -0.005985f, 0.001420f, -0.007892f, -0.009137f, 0.000582f, -0.007731f, 0.001913f, 0.002260f, 0.008001f, -0.005677f, 0.005448f, 0.002270f, -0.008227f, -0.003473f, -0.002344f, -0.004141f, 0.001069f, -0.002271f, -0.002728f, 0.049130f, 0.000943f, -0.035602f, -0.030207f, 0.030825f, 0.024144f, -0.022785f, -0.022046f, 0.041341f, 0.026229f, 0.001524f, -0.024580f, 0.002975f, -0.010367f, 0.019620f, -0.015280f, 0.002351f, -0.006509f, + -0.004490f, 0.042681f, -0.006017f, -0.011706f, 0.007960f, 0.007204f, 0.012816f, 0.013131f, 0.001491f, -0.016946f, 0.012813f, 0.006382f, 0.014679f, 0.032978f, 0.015186f, -0.047689f, -0.013574f, -0.007852f, -0.036388f, 0.014015f, -0.006273f, 0.000647f, -0.020255f, 0.017066f, -0.007835f, 0.003178f, -0.026352f, 0.017806f, -0.021453f, 0.001656f, 0.021270f, -0.003521f, 0.022437f, -0.017587f, 0.027969f, -0.035891f, 0.017938f, 0.000277f, -0.012814f, 0.046659f, 0.012554f, -0.009865f, -0.027827f, 0.012001f, -0.005658f, 0.003708f, -0.004161f, 0.016974f, 0.025611f, 0.034251f, -0.021689f, 0.015313f, -0.008548f, 0.030614f, 0.011363f, 0.004242f, -0.002748f, 0.018288f, 0.003377f, -0.012386f, 0.015071f, -0.010814f, -0.017921f, -0.007972f, -0.024403f, 0.000147f, -0.027348f, -0.002506f, -0.018401f, 0.020971f, -0.006617f, 0.013415f, -0.014713f, 0.000372f, -0.008198f, 0.012644f, -0.003981f, -0.001422f, -0.008116f, 0.004139f, -0.006064f, -0.010123f, -0.005620f, 0.004089f, -0.009476f, 0.005606f, -0.007488f, 0.003356f, -0.004814f, -0.004982f, -0.004809f, -0.010786f, -0.006054f, 0.000040f, -0.007610f, -0.007233f, + 0.009857f, 0.008235f, 0.004701f, -0.005138f, -0.012312f, -0.001556f, 0.005502f, -0.000688f, -0.009528f, -0.005986f, -0.071788f, -0.046590f, 0.038214f, -0.028528f, -0.026784f, 0.014534f, 0.033423f, -0.055814f, -0.009494f, 0.012956f, 0.003314f, -0.029272f, -0.043721f, 0.081331f, -0.035446f, 0.010811f, -0.040264f, 0.021776f, -0.014194f, 0.037884f, 0.033647f, 0.003153f, 0.005755f, -0.045599f, -0.000312f, 0.021161f, -0.018618f, -0.027297f, 0.021235f, 0.005813f, 0.022917f, 0.018142f, -0.004092f, 0.007461f, -0.005342f, -0.003154f, 0.033919f, -0.029307f, -0.017306f, 0.027135f, -0.001353f, -0.022188f, 0.028775f, -0.001141f, -0.006601f, -0.019860f, -0.008876f, 0.010446f, -0.015529f, -0.002005f, 0.009995f, -0.019707f, -0.020142f, -0.013224f, 0.014497f, -0.042471f, 0.019964f, -0.002187f, 0.039956f, -0.037985f, 0.012362f, -0.028948f, 0.010411f, -0.017481f, -0.022155f, 0.035959f, -0.020188f, -0.009067f, -0.019654f, 0.015404f, -0.022454f, 0.012930f, -0.007748f, 0.026233f, 0.026991f, -0.003658f, -0.042501f, 0.016668f, 0.017456f, -0.002278f, -0.001506f, -0.024419f, -0.016868f, -0.004262f, -0.020987f, -0.016999f, + -0.006047f, -0.000746f, -0.010516f, -0.014020f, 0.015610f, 0.005036f, -0.009973f, -0.008474f, -0.010184f, -0.010877f, 0.011326f, 0.003983f, 0.002634f, -0.016224f, -0.006226f, 0.013494f, -0.008111f, -0.010053f, 0.006330f, -0.007269f, -0.000059f, 0.004758f, 0.007905f, -0.003522f, -0.013320f, 0.002395f, 0.007796f, -0.017911f, 0.000322f, 0.004334f, 0.000342f, -0.009558f, -0.005389f, 0.000206f, -0.004264f, 0.035950f, 0.017466f, -0.040483f, 0.013795f, 0.043551f, -0.003851f, 0.000099f, 0.020086f, -0.013026f, 0.030522f, 0.027637f, -0.036555f, -0.022404f, -0.006757f, 0.019301f, 0.034850f, 0.006198f, 0.018505f, 0.039367f, 0.029431f, -0.041396f, -0.004480f, 0.065793f, 0.016208f, -0.004372f, -0.007808f, -0.012368f, -0.019366f, 0.005814f, 0.016076f, 0.017979f, 0.016673f, -0.011749f, -0.028142f, 0.007572f, -0.014660f, 0.015450f, 0.045357f, -0.012051f, -0.045654f, 0.054603f, -0.016512f, -0.030044f, 0.044152f, -0.007947f, -0.013249f, -0.047300f, -0.008589f, 0.019596f, 0.009259f, -0.010252f, -0.020059f, 0.018317f, 0.001863f, -0.021895f, 0.018712f, -0.004365f, 0.043056f, -0.031719f, 0.004407f, -0.006167f, + 0.049334f, 0.016883f, -0.070331f, 0.022056f, -0.029455f, -0.012282f, -0.025218f, 0.030420f, 0.100406f, 0.036763f, 0.005717f, 0.023302f, 0.029138f, -0.037029f, -0.015856f, -0.010389f, -0.021300f, -0.012761f, -0.023566f, 0.022169f, -0.051767f, -0.013640f, 0.004515f, 0.006220f, -0.017078f, 0.003263f, 0.008940f, -0.005003f, -0.006724f, 0.017615f, 0.003052f, 0.011779f, 0.009566f, -0.010534f, 0.002809f, 0.008739f, 0.003118f, 0.007320f, -0.005502f, 0.004516f, -0.010238f, 0.001399f, -0.003255f, -0.009537f, -0.005285f, -0.002114f, 0.015507f, 0.000937f, 0.003847f, 0.000709f, -0.003518f, -0.003166f, 0.001070f, -0.001339f, -0.014849f, -0.001699f, 0.002094f, -0.003399f, -0.011522f, -0.026165f, -0.009812f, -0.007888f, 0.015154f, -0.002618f, 0.003085f, -0.015207f, -0.053090f, -0.022519f, 0.003759f, -0.021482f, -0.066856f, 0.058198f, -0.011044f, 0.026299f, 0.005053f, -0.030583f, -0.052728f, -0.050787f, 0.057201f, 0.034898f, 0.013204f, -0.020008f, -0.038092f, -0.028486f, -0.045253f, -0.011528f, 0.017008f, -0.006929f, 0.003798f, 0.007365f, -0.007353f, -0.023366f, -0.022501f, -0.038422f, -0.013747f, -0.007275f, + 0.019042f, 0.013365f, 0.020925f, -0.010202f, -0.017177f, -0.007095f, 0.027322f, 0.004018f, 0.024197f, -0.080463f, -0.018915f, 0.000038f, 0.017763f, -0.025570f, -0.001060f, -0.029617f, 0.023395f, 0.020690f, 0.003992f, 0.099725f, 0.001641f, 0.031275f, 0.041032f, 0.001939f, 0.013290f, 0.000786f, -0.007114f, -0.011809f, 0.020700f, 0.030482f, 0.039692f, -0.000718f, -0.007442f, 0.002899f, 0.026088f, 0.023846f, 0.000884f, 0.019367f, 0.016611f, 0.013096f, -0.005271f, 0.039156f, -0.011213f, 0.050196f, -0.049409f, -0.024534f, -0.060779f, -0.018754f, 0.010895f, 0.001649f, -0.015740f, 0.003437f, -0.000196f, 0.027409f, -0.005513f, 0.032803f, -0.014924f, -0.011938f, -0.016400f, 0.008603f, 0.018336f, -0.002808f, -0.008909f, -0.009728f, 0.011318f, 0.000332f, 0.038040f, -0.005867f, -0.002612f, 0.006985f, 0.010679f, 0.015840f, -0.013154f, -0.001015f, 0.005099f, 0.007899f, -0.018158f, 0.006472f, 0.006926f, 0.023482f, -0.023084f, 0.013281f, 0.008803f, -0.009681f, 0.019799f, -0.011014f, -0.013565f, 0.000236f, -0.004600f, 0.010300f, 0.005083f, -0.007989f, -0.000241f, 0.008491f, 0.001942f, 0.020479f, + -0.000948f, 0.013447f, 0.037791f, -0.006968f, 0.001666f, 0.009953f, -0.051718f, 0.002169f, 0.007422f, 0.032556f, 0.049664f, -0.042266f, 0.009364f, -0.026646f, 0.035401f, 0.032095f, 0.004066f, 0.061616f, 0.019224f, 0.024540f, -0.022454f, -0.003608f, -0.039323f, 0.061563f, -0.035770f, 0.009624f, 0.037673f, -0.008959f, -0.024217f, 0.019028f, -0.005530f, 0.009630f, 0.040446f, 0.001055f, -0.012809f, -0.003718f, 0.007595f, -0.001270f, -0.023977f, 0.017777f, -0.002279f, -0.006799f, 0.069051f, -0.053044f, 0.049964f, 0.032256f, 0.062348f, 0.025406f, -0.044048f, 0.034116f, 0.000710f, 0.031704f, 0.082101f, -0.059192f, -0.024511f, -0.007605f, 0.001616f, 0.055821f, -0.033086f, 0.002921f, -0.035531f, 0.002809f, 0.062945f, -0.007071f, 0.065321f, 0.018425f, 0.011191f, 0.029708f, -0.039866f, -0.006580f, 0.028734f, 0.040661f, -0.066003f, -0.002333f, -0.056549f, 0.025367f, -0.029395f, -0.000952f, 0.013408f, 0.018451f, 0.001427f, -0.020102f, -0.016009f, -0.061834f, -0.007014f, -0.043922f, 0.035665f, 0.003109f, -0.002760f, 0.027778f, 0.001576f, -0.000119f, 0.026680f, 0.019925f, 0.013425f, 0.000352f, + -0.008969f, 0.012600f, -0.020876f, -0.001538f, -0.014316f, 0.014355f, 0.014932f, -0.012603f, -0.002414f, -0.026819f, 0.011920f, -0.001645f, -0.000011f, -0.000712f, -0.026042f, -0.031385f, -0.010379f, 0.010180f, 0.023832f, 0.012134f, 0.010761f, -0.003775f, 0.019963f, 0.013898f, -0.000868f, -0.010141f, 0.017369f, -0.024716f, -0.006943f, 0.005168f, 0.027996f, 0.023151f, 0.005020f, -0.011261f, -0.039986f, 0.011232f, -0.069971f, -0.061669f, 0.000891f, 0.000832f, -0.039169f, 0.031764f, 0.009184f, -0.010713f, -0.036349f, 0.049389f, -0.011540f, 0.073528f, -0.010769f, 0.015776f, 0.026526f, -0.035905f, -0.011986f, 0.011123f, -0.042725f, -0.024148f, -0.037369f, 0.031948f, -0.029946f, -0.008263f, -0.009859f, 0.027629f, -0.025254f, -0.042746f, -0.059451f, -0.001913f, 0.049364f, 0.002767f, -0.027284f, -0.011805f, -0.034533f, -0.011773f, 0.000244f, 0.020377f, -0.038888f, -0.004583f, -0.008515f, -0.027940f, -0.038222f, 0.001569f, 0.006329f, 0.024424f, 0.008410f, 0.042152f, 0.011714f, 0.053257f, -0.022385f, 0.043920f, -0.011322f, -0.034791f, -0.009056f, 0.071592f, -0.031097f, 0.032466f, -0.022810f, 0.052444f, + -0.027948f, 0.017497f, 0.033417f, -0.002301f, -0.013850f, 0.006078f, -0.019132f, 0.047650f, -0.044000f, -0.016884f, 0.047834f, -0.006216f, -0.039984f, 0.001562f, 0.036560f, 0.020014f, 0.036564f, -0.037285f, -0.031440f, -0.020292f, -0.004075f, 0.035746f, 0.043614f, -0.077586f, 0.004070f, 0.022015f, -0.042408f, 0.006649f, 0.026764f, 0.020492f, 0.019634f, 0.018828f, 0.012820f, -0.006270f, 0.001412f, 0.014340f, 0.016444f, 0.013037f, 0.033005f, -0.010383f, 0.017356f, 0.006968f, 0.035732f, 0.020899f, -0.027573f, -0.035241f, 0.011113f, 0.037159f, -0.010676f, -0.010774f, -0.023900f, -0.041136f, 0.004710f, -0.035166f, -0.010912f, 0.007574f, -0.023135f, 0.021208f, 0.006205f, -0.007630f, -0.019099f, -0.004080f, -0.019797f, -0.002020f, 0.011036f, 0.004796f, 0.003145f, -0.003877f, -0.004825f, -0.066349f, 0.073166f, -0.024184f, 0.062319f, -0.012846f, 0.050085f, 0.004341f, -0.015495f, -0.034008f, -0.024018f, -0.004360f, 0.000885f, 0.036861f, -0.013840f, -0.002661f, 0.010665f, -0.033231f, 0.054077f, 0.020329f, 0.002154f, -0.044210f, 0.030600f, 0.016228f, -0.035273f, 0.034849f, 0.003172f, -0.005229f, + 0.008893f, -0.000848f, 0.045679f, -0.010193f, -0.057081f, 0.062089f, -0.031743f, -0.004778f, 0.046130f, -0.020049f, -0.009904f, -0.027229f, 0.072724f, -0.032273f, -0.008827f, -0.045142f, -0.008680f, 0.005799f, 0.065020f, -0.030125f, 0.012347f, 0.020929f, 0.038714f, -0.009881f, -0.041025f, 0.045116f, 0.027345f, 0.036680f, -0.017641f, -0.008449f, 0.004726f, 0.040616f, -0.022240f, -0.047035f, -0.052673f, 0.028404f, -0.036853f, 0.009753f, 0.039592f, 0.036920f, -0.025668f, -0.008541f, 0.053245f, -0.084413f, -0.001887f, 0.011996f, 0.029420f, -0.003619f, -0.030802f, -0.005864f, 0.048568f, -0.009099f, 0.099603f, 0.039243f, -0.028338f, -0.003526f, 0.003053f, -0.011665f, -0.035906f, -0.043815f, -0.032193f, 0.027994f, -0.020802f, -0.008247f, -0.000721f, 0.043719f, 0.018929f, -0.014701f, 0.019276f, 0.014341f, -0.000469f, 0.006725f, 0.008184f, -0.000184f, 0.006150f, 0.044781f, 0.036728f, 0.035715f, 0.024234f, 0.003752f, -0.021744f, 0.012161f, -0.016960f, 0.021666f, -0.026157f, 0.028942f, 0.041879f, 0.014251f, 0.053013f, 0.057394f, 0.023278f, -0.000155f, 0.030075f, 0.010683f, -0.005314f, -0.017770f, + 0.031260f, -0.007708f, -0.024742f, 0.000068f, 0.015226f, -0.006714f, 0.013275f, 0.024880f, 0.009444f, 0.025386f, -0.014153f, -0.016146f, -0.093703f, 0.031915f, 0.018244f, 0.083569f, 0.073230f, -0.010828f, -0.027030f, -0.086105f, 0.002538f, 0.028841f, -0.036854f, 0.028172f, 0.050441f, 0.049075f, -0.022717f, 0.059075f, 0.052809f, 0.002566f, -0.031834f, -0.034089f, 0.053925f, 0.046152f, -0.065472f, -0.089247f, 0.118744f, 0.006244f, -0.008369f, 0.015681f, 0.008836f, 0.044146f, 0.043826f, -0.017494f, -0.014935f, 0.061974f, 0.029468f, -0.010941f, -0.041068f, 0.025080f, 0.005012f, 0.003485f, 0.022100f, 0.003251f, -0.001863f, -0.024521f, 0.013932f, -0.007216f, -0.030173f, 0.055734f, -0.088329f, 0.061855f, 0.051250f, -0.083530f, -0.005739f, 0.042896f, 0.010867f, 0.048917f, -0.011320f, 0.007062f, 0.044712f, -0.005663f, 0.022882f, -0.041068f, -0.065299f, 0.184342f, -0.075209f, -0.105670f, -0.023051f, 0.205277f, 0.088646f, -0.087176f, -0.019670f, 0.036441f, 0.025160f, -0.001640f, -0.052668f, 0.077326f, 0.043266f, 0.032573f, 0.007743f, -0.103852f, -0.016953f, 0.017170f, 0.031130f, -0.042520f, + -0.070572f, 0.006469f, 0.022509f, 0.010005f, -0.033222f, -0.035107f, 0.017163f, 0.009733f, 0.025800f, -0.004529f, -0.008424f, -0.002350f, 0.027565f, 0.035025f, 0.024228f, -0.052184f, -0.020068f, 0.037193f, 0.027468f, -0.026188f, 0.000325f, 0.030364f, 0.053784f, 0.021134f, -0.028018f, -0.038040f, -0.049760f, 0.023805f, -0.015756f, 0.022153f, -0.042012f, 0.023956f, 0.012571f, 0.026963f, -0.019087f, -0.010016f, -0.033654f, -0.014225f, 0.033778f, 0.006334f, -0.027522f, 0.015574f, 0.050909f, 0.013435f, -0.036619f, -0.023114f, 0.046112f, 0.079855f, 0.005579f, 0.132623f, -0.058805f, -0.022616f, 0.076964f, 0.003800f, -0.004332f, -0.039578f, -0.079005f, 0.065681f, -0.041138f, -0.044844f, 0.034154f, -0.049780f, 0.024780f, -0.047203f, -0.052198f, -0.008821f, 0.011550f, 0.007398f, -0.012206f, 0.062825f, 0.015868f, 0.038304f, 0.018528f, 0.001059f, 0.001112f, -0.028402f, -0.060198f, 0.019282f, 0.060317f, -0.049167f, 0.042172f, -0.050121f, -0.005064f, -0.002775f, -0.077343f, 0.055140f, -0.026702f, 0.021455f, 0.001681f, -0.022839f, 0.001488f, -0.056085f, 0.057742f, -0.040618f, 0.019412f, -0.065293f, + -0.039481f, -0.085635f, 0.032518f, -0.040063f, -0.044822f, -0.036435f, -0.018522f, -0.000012f, 0.091285f, 0.032520f, 0.045240f, -0.012538f, -0.042405f, -0.053987f, 0.014446f, 0.003218f, -0.092650f, -0.043316f, -0.163076f, -0.076962f, -0.062940f, -0.009593f, -0.075035f, -0.062086f, -0.013434f, 0.059630f, 0.068328f, -0.055558f, -0.069873f, -0.080722f, 0.040789f, 0.096228f, 0.005132f, 0.077357f, 0.002203f, 0.046658f, 0.019013f, 0.005510f, 0.022804f, 0.008151f, -0.001628f, -0.028138f, 0.040259f, 0.032907f, 0.018029f, -0.033594f, -0.012999f, -0.004647f, 0.017392f, 0.017831f, -0.006391f, 0.019365f, -0.008373f, -0.022665f, -0.038937f, 0.004664f, 0.054794f, 0.019421f, -0.006199f, 0.015148f, -0.017334f, 0.028988f, -0.010435f, 0.037958f, 0.037284f, 0.004111f, -0.039578f, 0.006349f, 0.009156f, 0.043039f, 0.010828f, 0.048948f, -0.032687f, -0.020579f, 0.045687f, 0.046790f, 0.012853f, -0.012599f, -0.008319f, -0.046900f, -0.021913f, -0.093383f, 0.021989f, 0.032974f, -0.080859f, 0.044822f, 0.008932f, -0.023462f, 0.004838f, -0.022865f, -0.002261f, 0.017403f, 0.023606f, 0.041381f, -0.048706f, 0.004742f, + 0.056162f, -0.006241f, -0.026774f, 0.050509f, -0.022199f, 0.003538f, -0.029910f, -0.012140f, -0.059723f, 0.015569f, 0.001439f, 0.033742f, -0.023570f, 0.002503f, 0.041953f, -0.019860f, 0.000671f, 0.043291f, -0.084985f, 0.005528f, -0.097288f, -0.030951f, -0.065179f, 0.052034f, 0.018396f, -0.003818f, 0.021827f, -0.019092f, 0.023813f, 0.066130f, 0.017783f, 0.102674f, -0.057219f, -0.065642f, 0.060480f, 0.016466f, -0.044395f, -0.041672f, -0.017023f, 0.037914f, -0.036451f, -0.001407f, -0.031527f, -0.040698f, 0.023871f, 0.029882f, -0.060691f, -0.035281f, 0.052140f, -0.000927f, 0.018392f, -0.011309f, 0.028561f, 0.012686f, 0.052629f, -0.030675f, -0.022793f, 0.013348f, 0.012108f, -0.015233f, -0.055068f, -0.040251f, -0.043579f, 0.058250f, -0.027122f, -0.045108f, 0.013032f, -0.011812f, -0.014908f, -0.029742f, 0.011162f, 0.013319f, -0.005001f, -0.008859f, -0.016234f, -0.027413f, -0.004859f, -0.006231f, -0.020048f, 0.000715f, -0.009857f, -0.018817f, 0.011330f, -0.011113f, 0.010417f, -0.010966f, -0.009378f, 0.027493f, -0.010996f, 0.012985f, 0.009542f, -0.026224f, 0.011602f, 0.003450f, -0.010693f, -0.031799f, + 0.043111f, 0.028377f, -0.012359f, 0.006682f, -0.021361f, -0.016178f, 0.013057f, -0.000400f, -0.027415f, 0.009533f, -0.011059f, 0.024763f, -0.006771f, -0.004628f, 0.004630f, 0.011532f, -0.063054f, -0.127599f, -0.063727f, -0.024228f, 0.055947f, 0.072881f, -0.139275f, 0.024127f, -0.055242f, -0.075480f, -0.015382f, 0.087352f, 0.055924f, 0.047662f, -0.029938f, -0.033560f, -0.040066f, 0.044085f, 0.031200f, 0.067986f, 0.009013f, -0.088192f, -0.034417f, 0.066383f, -0.010035f, 0.019503f, 0.059570f, -0.028367f, -0.040979f, -0.064513f, -0.064478f, 0.000432f, 0.042293f, 0.090977f, 0.067521f, 0.044672f, 0.018457f, -0.093037f, -0.098957f, 0.034671f, -0.068216f, 0.016158f, 0.087530f, 0.034744f, 0.006110f, -0.044080f, -0.078878f, -0.013559f, -0.033881f, 0.026524f, 0.020852f, 0.014811f, 0.054952f, -0.008562f, -0.010394f, 0.014361f, 0.039943f, 0.064395f, 0.066961f, 0.022589f, 0.059657f, 0.019935f, 0.021570f, -0.013146f, -0.066355f, -0.026216f, -0.028651f, -0.054676f, 0.041335f, 0.038325f, 0.028801f, 0.028324f, -0.012442f, -0.065647f, 0.011101f, 0.019467f, -0.000785f, 0.043505f, 0.028319f, 0.022742f, + -0.004931f, 0.002865f, 0.006683f, 0.044783f, 0.045519f, 0.034219f, 0.010244f, -0.008443f, -0.032938f, -0.006312f, 0.019648f, 0.005473f, -0.009539f, -0.000349f, -0.026101f, -0.012468f, -0.014976f, -0.017538f, 0.013981f, 0.048874f, 0.024411f, -0.009190f, -0.004646f, -0.036908f, -0.003481f, 0.012632f, 0.025085f, 0.027290f, -0.008369f, -0.011979f, -0.056839f, -0.033266f, -0.007961f, 0.000151f, 0.023283f, 0.018856f, -0.010944f, -0.014037f, 0.009579f, 0.003369f, 0.006240f, 0.013793f, -0.015634f, -0.005984f, -0.002873f, 0.009058f, 0.015547f, 0.001163f, -0.005010f, -0.004578f, -0.023585f, 0.039474f, -0.112413f, -0.226147f, -0.116772f, 0.021830f, 0.088209f, 0.215084f, 0.210435f, 0.087623f, 0.089502f, 0.064231f, 0.003428f, -0.107239f, -0.181646f, -0.273697f, -0.081736f, -0.114546f, -0.019986f, 0.111586f, 0.198981f, 0.167269f, 0.147733f, 0.081374f, -0.001873f, -0.052191f, -0.069949f, -0.015031f, -0.121105f, -0.096220f, -0.091377f, -0.059930f, -0.049168f, -0.022872f, -0.004329f, 0.041614f, 0.098114f, 0.100993f, 0.099311f, 0.072658f, 0.094612f, 0.050127f, 0.054109f, -0.017775f, -0.003971f, -0.044730f, + -0.117278f, -0.169931f, -0.205241f, -0.099491f, -0.040024f, 0.031876f, -0.005289f, 0.021620f, 0.047729f, 0.062342f, 0.133150f, 0.153456f, 0.203468f, 0.129718f, 0.013116f, 0.059247f, -0.030726f, -0.112430f, -0.098284f, -0.195718f, -0.228251f, -0.170703f, -0.105475f, -0.045419f, -0.035741f, 0.082086f, 0.092806f, 0.257370f, 0.210826f, 0.154187f, 0.151035f, 0.072280f, -0.009207f, -0.102319f, -0.147844f, -0.108006f, -0.129449f, -0.177849f, -0.084427f, 0.004857f, -0.017360f, 0.004997f, 0.077763f, 0.108280f, 0.080093f, 0.041711f, 0.040498f, 0.068978f, 0.029501f, -0.005181f, -0.008243f, -0.033908f, -0.005669f, -0.030261f, -0.079626f, -0.042174f, -0.059370f, -0.096551f, -0.016948f, -0.016803f, 0.077179f, 0.070231f, 0.042363f, 0.075563f, 0.130945f, 0.093617f, -0.022931f, -0.015858f, -0.063073f, -0.056250f, -0.131721f, -0.136737f, -0.066051f, -0.027962f, 0.011425f, 0.046310f, 0.054982f, 0.081767f, 0.093317f, 0.090064f, 0.094746f, 0.024092f, -0.009560f, -0.050438f, -0.061449f, -0.081330f, -0.089872f, -0.090358f, -0.038813f, 0.020201f, 0.027171f, 0.039164f, 0.041110f, 0.028424f, 0.030490f, 0.031748f, + 0.010341f, 0.007421f, -0.010486f, -0.011239f, 0.019397f, -0.012832f, -0.031007f, 0.001906f, 0.007310f, -0.003752f, -0.009013f, -0.012802f, 0.001342f, -0.002205f, -0.012790f, -0.002648f, 0.001367f, 0.000123f, -0.000143f} + }, + { + {-0.008477f, -0.013211f, -0.009609f, 0.003730f, -0.001463f, -0.022610f, -0.012845f, -0.000988f, 0.003229f, -0.006959f, 0.002377f, -0.008396f, 0.001635f, -0.006069f, 0.015860f, -0.012931f, -0.005680f, -0.005688f, 0.010104f, 0.006978f, 0.016146f, 0.004260f, 0.003351f, -0.007390f, 0.007615f, 0.000969f, 0.002059f, -0.000904f, 0.006109f, 0.008382f, 0.000618f, 0.008355f, 0.007925f, -0.003862f, 0.004428f, -0.004720f, -0.005268f, 0.000588f, -0.004307f, 0.002688f, -0.006752f, -0.012211f, 0.003282f, 0.004359f, -0.003042f, 0.003397f, -0.005843f, 0.005497f, 0.007476f, -0.012897f, 0.002505f, -0.000713f, 0.004839f, 0.004147f, 0.000664f, -0.012729f, -0.003831f, -0.005594f, 0.004207f, -0.000150f, 0.001265f, -0.004086f, 0.002343f, -0.006529f, 0.000299f, 0.007085f, 0.004506f, 0.000480f, -0.003638f, 0.002346f, -0.010428f, -0.005845f, -0.007665f, 0.001387f, 0.001299f, -0.000650f, 0.010986f, 0.000054f, 0.009575f, 0.000140f, 0.001002f, 0.000897f, -0.000047f, -0.005194f, 0.003884f, -0.000314f, 0.001916f, -0.001111f, 0.001231f, 0.001822f, -0.000717f, -0.001812f, -0.000717f, -0.000544f, -0.000560f, -0.000301f, + -0.002798f, 0.000482f, 0.002876f, 0.001666f, 0.000028f, 0.000326f, -0.000788f, -0.001263f, 0.001217f, -0.026098f, -0.000831f, 0.001375f, 0.000369f, 0.004281f, -0.009216f, 0.006759f, 0.003792f, -0.004840f, -0.015558f, 0.010223f, 0.010483f, -0.002476f, 0.008722f, 0.006296f, -0.008629f, 0.017123f, 0.003558f, -0.007760f, 0.009195f, 0.000656f, 0.008591f, 0.001257f, -0.014933f, 0.005664f, -0.002842f, -0.005529f, -0.005808f, -0.004537f, 0.009755f, 0.007567f, 0.000598f, 0.007918f, 0.002853f, -0.007495f, -0.009287f, -0.000851f, -0.002183f, 0.003985f, 0.002696f, -0.007297f, 0.001725f, 0.003792f, 0.003572f, -0.006416f, -0.005392f, -0.008499f, -0.002997f, -0.002123f, 0.001689f, -0.002084f, 0.011388f, 0.004878f, -0.001781f, -0.005782f, 0.002123f, 0.004745f, 0.002445f, 0.012276f, -0.002062f, 0.006183f, -0.000744f, -0.004039f, -0.007474f, 0.005259f, -0.001704f, -0.003460f, 0.007187f, -0.002223f, 0.002383f, -0.001610f, -0.001506f, -0.008288f, 0.001805f, -0.002350f, 0.009729f, 0.012058f, -0.007272f, -0.007380f, -0.005200f, 0.002030f, -0.004668f, -0.002375f, -0.003017f, -0.002999f, -0.003256f, 0.001931f, + 0.004480f, -0.000292f, 0.001149f, 0.001341f, -0.000484f, 0.000144f, -0.002211f, -0.004928f, -0.007729f, -0.017762f, -0.010618f, -0.003879f, 0.012724f, 0.001615f, 0.002361f, 0.007774f, 0.002088f, 0.003331f, -0.018607f, -0.017100f, -0.010894f, -0.002891f, -0.000086f, 0.007833f, -0.005598f, 0.006119f, -0.003207f, -0.011514f, 0.003566f, -0.001724f, -0.007875f, -0.000171f, 0.010998f, 0.015973f, 0.007245f, -0.007381f, 0.004283f, 0.000467f, 0.011530f, -0.000098f, -0.009207f, -0.000360f, -0.005380f, 0.011310f, 0.004952f, 0.005281f, 0.011480f, -0.002031f, 0.000829f, 0.015381f, 0.013470f, -0.000550f, -0.000072f, 0.001018f, -0.000863f, 0.004063f, 0.001122f, -0.011279f, -0.014930f, -0.005305f, -0.001902f, 0.000010f, -0.004953f, -0.016664f, -0.001774f, 0.004573f, -0.009065f, -0.004453f, -0.005907f, -0.005074f, 0.001756f, 0.002098f, 0.005480f, -0.011624f, -0.009282f, 0.008906f, -0.003789f, -0.002058f, 0.001838f, -0.000723f, 0.005823f, -0.011195f, 0.004418f, 0.004107f, -0.004441f, -0.004286f, 0.004452f, -0.004909f, 0.007101f, -0.002823f, 0.000062f, -0.000032f, -0.002805f, 0.001379f, 0.005248f, 0.002891f, + 0.000591f, 0.003163f, 0.000900f, -0.001483f, -0.002869f, -0.001602f, -0.001655f, 0.000624f, 0.000801f, -0.000507f, -0.000422f, 0.000757f, -0.000259f, 0.023739f, -0.009109f, -0.007217f, -0.001155f, 0.000407f, -0.008877f, 0.000080f, -0.006211f, 0.011419f, -0.002794f, -0.014120f, -0.019666f, -0.005050f, -0.013027f, 0.018153f, 0.001474f, 0.012882f, 0.010852f, -0.017213f, -0.000969f, 0.007226f, 0.005226f, 0.009151f, 0.001703f, -0.001108f, -0.001562f, 0.004293f, -0.005706f, 0.006574f, 0.003630f, -0.006139f, 0.003798f, 0.000280f, 0.004435f, 0.009871f, -0.005330f, 0.003922f, -0.000631f, 0.005640f, 0.004853f, -0.002020f, 0.006689f, -0.001895f, 0.005818f, -0.004446f, 0.005306f, -0.013942f, -0.005927f, -0.005091f, 0.003922f, 0.012058f, -0.008857f, -0.005853f, -0.003269f, 0.000735f, -0.004048f, -0.005342f, -0.002830f, 0.004883f, 0.003956f, 0.006974f, -0.002314f, 0.003975f, -0.004108f, -0.004329f, -0.000406f, -0.002601f, 0.004826f, -0.000064f, -0.007284f, 0.004097f, -0.004253f, -0.007170f, -0.002663f, -0.004460f, 0.003154f, -0.005232f, -0.014200f, -0.002012f, -0.006139f, -0.006051f, 0.003080f, -0.003918f, + -0.008548f, -0.001739f, 0.001808f, -0.000613f, 0.000515f, -0.000084f, -0.005368f, 0.000172f, 0.002834f, -0.002030f, -0.002244f, 0.000570f, -0.000109f, 0.001026f, 0.000911f, 0.002786f, 0.000810f, -0.002418f, 0.001606f, -0.000429f, -0.000858f, -0.000935f, -0.002403f, -0.002253f, -0.002451f, 0.004035f, 0.006231f, -0.002406f, 0.009446f, -0.014751f, 0.006632f, -0.008805f, -0.009722f, 0.014319f, 0.005344f, -0.016831f, 0.001783f, 0.000138f, 0.005111f, -0.012102f, -0.007738f, -0.001026f, -0.009801f, -0.017889f, -0.017325f, -0.011417f, -0.017290f, 0.007479f, -0.001776f, 0.002667f, 0.009412f, -0.015171f, 0.010055f, -0.004259f, 0.004724f, 0.003133f, -0.001516f, 0.001613f, -0.002168f, -0.002146f, -0.009884f, -0.005898f, 0.012986f, -0.004735f, -0.010743f, -0.009871f, -0.000934f, -0.004410f, 0.004067f, -0.009433f, -0.014644f, 0.002290f, 0.013668f, -0.002031f, 0.008295f, -0.004674f, 0.004533f, -0.007284f, 0.005586f, 0.002321f, -0.010006f, 0.014789f, 0.002648f, -0.003059f, 0.003464f, 0.013603f, 0.012527f, 0.006620f, -0.001325f, -0.015083f, -0.002541f, -0.012566f, 0.003642f, -0.002728f, 0.002112f, 0.002223f, + 0.003523f, -0.011420f, -0.000088f, -0.000816f, 0.005539f, 0.011743f, -0.014650f, 0.001983f, -0.004289f, -0.013693f, -0.001550f, 0.004036f, -0.001402f, -0.000306f, -0.001317f, 0.004541f, 0.000886f, -0.003960f, -0.002732f, -0.002860f, -0.001757f, -0.004721f, 0.000162f, -0.000377f, 0.002655f, -0.005697f, -0.004015f, -0.000423f, -0.000767f, -0.000696f, 0.000259f, -0.000426f, 0.000914f, -0.002061f, -0.002148f, -0.000541f, -0.000366f, -0.001497f, -0.000390f, -0.000395f, 0.002537f, 0.002379f, -0.000049f, 0.000070f, -0.002650f, -0.004278f, -0.001534f, 0.000227f, -0.016801f, -0.016097f, -0.010457f, -0.017728f, -0.021008f, -0.020028f, 0.008486f, 0.009268f, -0.012883f, -0.003413f, -0.011663f, -0.019038f, 0.010192f, -0.004998f, -0.016510f, 0.005663f, -0.001123f, 0.000828f, 0.001679f, 0.005592f, 0.001842f, -0.000613f, 0.004256f, 0.005693f, -0.009492f, -0.009149f, -0.002454f, -0.011152f, -0.000785f, -0.011887f, -0.020518f, -0.001662f, 0.012431f, -0.014896f, -0.011386f, 0.008015f, -0.007834f, 0.000889f, 0.003167f, -0.007703f, -0.006168f, -0.006542f, -0.022105f, -0.009638f, 0.004759f, -0.006387f, -0.007320f, -0.014005f, + 0.006232f, 0.012370f, -0.004492f, 0.019112f, -0.010615f, -0.005085f, -0.000081f, -0.004711f, -0.016210f, -0.001227f, 0.003719f, -0.000622f, -0.003410f, -0.014246f, -0.002330f, 0.013846f, 0.007029f, 0.004018f, 0.007232f, 0.005074f, -0.003667f, 0.026558f, -0.008375f, -0.010447f, -0.009855f, -0.011921f, 0.004704f, 0.015045f, 0.010342f, 0.001061f, -0.002460f, -0.007749f, -0.002735f, -0.000332f, -0.003586f, 0.000541f, -0.004811f, 0.001753f, 0.011105f, 0.007077f, -0.005454f, -0.001268f, -0.001975f, 0.003898f, -0.002300f, 0.004251f, -0.004614f, -0.002442f, 0.000694f, 0.000771f, -0.001146f, 0.001368f, -0.002664f, 0.002763f, 0.000115f, 0.002150f, 0.001871f, 0.001232f, -0.001297f, -0.002259f, -0.000551f, -0.002282f, 0.029931f, 0.020388f, -0.000846f, 0.018626f, -0.001479f, 0.002794f, 0.003631f, -0.010063f, 0.016995f, 0.000260f, 0.015004f, 0.014379f, -0.011485f, 0.018653f, 0.000366f, -0.014092f, -0.023290f, 0.021411f, 0.010423f, 0.021271f, -0.017690f, 0.012247f, 0.006681f, -0.019501f, -0.019251f, -0.011381f, -0.005412f, 0.020494f, -0.019381f, 0.017292f, -0.001595f, -0.001877f, 0.012489f, 0.011758f, + 0.016028f, 0.005914f, -0.008651f, 0.007837f, 0.015069f, -0.009053f, 0.015066f, 0.022836f, 0.009767f, 0.013867f, 0.005818f, 0.003936f, 0.003956f, 0.000610f, -0.012348f, 0.004609f, 0.001331f, 0.000930f, 0.010534f, -0.007377f, 0.006315f, 0.007003f, -0.002958f, 0.019918f, -0.011601f, -0.007081f, -0.004421f, 0.017203f, -0.003052f, 0.014208f, 0.007258f, 0.009605f, 0.008694f, 0.001674f, -0.024215f, -0.003764f, -0.019395f, -0.010573f, 0.025389f, 0.013207f, -0.011209f, -0.000679f, -0.013836f, -0.012464f, -0.006410f, 0.021046f, 0.001972f, 0.007245f, 0.004207f, -0.003295f, 0.004422f, 0.007536f, 0.013298f, -0.003739f, 0.007826f, 0.005552f, 0.004892f, -0.004543f, -0.002768f, 0.002084f, -0.002226f, -0.000115f, 0.003724f, 0.004863f, 0.002156f, 0.002098f, 0.006001f, 0.005731f, 0.002281f, 0.000160f, 0.002959f, -0.001243f, 0.005121f, 0.007586f, 0.003760f, 0.000199f, 0.008492f, -0.026146f, 0.016632f, 0.015969f, 0.047117f, 0.001919f, 0.004144f, -0.002290f, -0.006383f, -0.003006f, 0.015983f, 0.014566f, 0.012705f, 0.018352f, 0.007487f, 0.028943f, 0.008520f, -0.011386f, 0.002827f, 0.025230f, + 0.010005f, 0.002609f, 0.003973f, -0.012894f, -0.018564f, 0.011989f, -0.009194f, -0.018195f, -0.038580f, -0.000569f, 0.015422f, -0.001138f, 0.009114f, -0.013339f, -0.007035f, -0.004961f, 0.002933f, -0.004199f, -0.011539f, -0.005618f, -0.031071f, -0.008088f, -0.026368f, 0.002261f, -0.013883f, 0.010643f, -0.015117f, 0.005797f, -0.014533f, -0.005032f, -0.000890f, 0.000466f, 0.002275f, 0.002976f, -0.019264f, 0.009350f, -0.002885f, 0.004298f, -0.010059f, 0.000290f, 0.015417f, 0.006219f, 0.021300f, 0.011938f, -0.006480f, -0.001245f, -0.004373f, -0.002160f, -0.004980f, -0.006763f, -0.000318f, 0.008749f, 0.005672f, 0.006506f, 0.004193f, -0.030433f, 0.020116f, 0.019737f, -0.007364f, 0.011308f, 0.008862f, -0.016082f, 0.007786f, 0.004835f, 0.001060f, -0.003408f, 0.002851f, 0.010407f, -0.009097f, 0.006070f, -0.002526f, 0.000536f, -0.000652f, 0.002302f, 0.005626f, -0.004642f, -0.002015f, 0.007729f, -0.005396f, 0.000396f, 0.000325f, 0.002937f, -0.003488f, -0.006457f, 0.004048f, 0.000261f, -0.001924f, -0.001926f, 0.001085f, -0.000226f, 0.003796f, 0.004281f, 0.004905f, 0.000072f, -0.004998f, 0.050712f, + 0.018284f, -0.008466f, 0.025051f, -0.016446f, 0.017474f, 0.011622f, -0.023860f, 0.005094f, -0.030016f, 0.000617f, -0.010192f, -0.021138f, 0.011324f, 0.000386f, 0.008672f, 0.012401f, 0.015397f, 0.024689f, 0.010324f, -0.001752f, -0.006353f, -0.016806f, -0.030251f, 0.010746f, 0.011890f, 0.003294f, -0.010539f, 0.016366f, 0.002168f, 0.017291f, 0.010318f, -0.031577f, -0.011951f, 0.004257f, -0.023199f, 0.001201f, -0.001625f, -0.004411f, 0.006885f, 0.005136f, -0.005431f, 0.023288f, -0.013405f, 0.000926f, 0.013105f, -0.011474f, 0.009019f, -0.005008f, -0.014067f, 0.009471f, -0.000057f, -0.001822f, 0.013474f, 0.008880f, 0.000562f, -0.006962f, 0.027831f, 0.001245f, 0.015689f, 0.001577f, -0.008576f, -0.009622f, -0.023197f, -0.008988f, 0.009801f, -0.000610f, 0.008379f, -0.002628f, -0.018049f, 0.007254f, 0.006084f, -0.026580f, 0.007830f, 0.013725f, -0.006998f, 0.014639f, 0.003551f, -0.015080f, -0.015255f, 0.017453f, -0.000237f, -0.034903f, 0.004494f, 0.003781f, 0.001616f, -0.003531f, 0.002206f, -0.004777f, 0.001027f, 0.010450f, -0.003040f, 0.001694f, 0.002786f, 0.003103f, -0.008632f, 0.002681f, + -0.002978f, 0.002451f, 0.006663f, 0.006896f, 0.005126f, 0.002413f, -0.005597f, 0.002652f, -0.000325f, -0.000493f, 0.002518f, -0.006408f, 0.000109f, 0.004444f, 0.006240f, -0.003988f, -0.002253f, -0.007509f, 0.001537f, 0.007951f, -0.007578f, 0.003210f, 0.002996f, -0.052684f, -0.017490f, 0.055060f, 0.015289f, 0.008792f, -0.008285f, -0.001482f, -0.008460f, 0.011230f, -0.017798f, 0.024070f, 0.013776f, 0.011285f, 0.011602f, -0.008527f, -0.000829f, -0.000993f, 0.007748f, 0.016200f, -0.024373f, -0.014473f, -0.007781f, 0.018523f, 0.006698f, 0.010331f, 0.011130f, -0.002546f, -0.017470f, 0.005727f, 0.001376f, 0.033630f, 0.026481f, 0.006953f, 0.020113f, 0.001092f, -0.009679f, 0.004161f, -0.002767f, -0.004622f, 0.012971f, 0.015922f, 0.013128f, 0.032537f, 0.015738f, 0.012760f, 0.014312f, -0.014769f, -0.024162f, -0.011349f, 0.011042f, -0.020628f, -0.010181f, 0.020034f, 0.021393f, 0.011714f, -0.009645f, 0.018902f, -0.007425f, 0.002053f, 0.004551f, 0.010854f, -0.005537f, -0.011806f, 0.006786f, -0.010648f, -0.033326f, 0.001441f, 0.010813f, -0.018190f, 0.002403f, -0.003286f, -0.004686f, -0.003337f, + -0.010765f, 0.027128f, -0.002804f, 0.015504f, -0.038876f, -0.037015f, -0.031313f, -0.014302f, 0.003222f, 0.003800f, -0.000990f, 0.002137f, -0.000631f, -0.008273f, 0.004089f, -0.009094f, -0.002646f, -0.003991f, 0.009521f, 0.001500f, 0.003465f, -0.007306f, -0.001316f, -0.006504f, -0.002325f, 0.005152f, 0.008230f, 0.008797f, 0.008490f, -0.000125f, -0.005629f, 0.004595f, 0.007484f, 0.004605f, 0.007452f, 0.002588f, -0.000674f, 0.003127f, 0.001098f, 0.001524f, -0.002197f, -0.005095f, 0.006025f, 0.006682f, -0.002174f, -0.001927f, -0.001448f, -0.001126f, 0.027113f, 0.042637f, -0.062846f, -0.008920f, 0.003724f, -0.000508f, -0.007554f, -0.015696f, 0.017180f, -0.020140f, -0.031986f, -0.003283f, 0.031184f, -0.004501f, -0.018273f, 0.005763f, -0.025555f, -0.013899f, 0.000987f, 0.016355f, -0.026786f, 0.002941f, 0.029172f, 0.029931f, 0.000749f, 0.010580f, 0.026144f, -0.014998f, -0.023413f, -0.032717f, 0.003138f, -0.032613f, -0.006993f, 0.013689f, 0.012870f, -0.028862f, -0.027238f, -0.016568f, 0.011684f, -0.007690f, -0.005116f, -0.007601f, 0.025959f, -0.038650f, -0.011331f, 0.005980f, -0.020861f, -0.007213f, + 0.000037f, -0.024395f, 0.001096f, 0.009992f, -0.001363f, 0.031913f, -0.002199f, -0.012968f, 0.002675f, -0.001647f, -0.010528f, 0.006098f, 0.015683f, -0.014576f, 0.022380f, -0.011105f, -0.041773f, 0.001929f, -0.016328f, -0.008969f, -0.001199f, -0.004497f, -0.055098f, -0.009276f, 0.025200f, 0.021765f, 0.015207f, 0.032835f, 0.033439f, -0.045334f, -0.005131f, 0.002892f, 0.009375f, -0.013193f, -0.022605f, -0.000451f, 0.010185f, 0.012050f, 0.010276f, 0.008021f, 0.003790f, 0.006466f, -0.012151f, 0.000044f, 0.007175f, -0.003834f, -0.002862f, 0.001326f, 0.002286f, 0.006504f, -0.007287f, 0.001310f, -0.002995f, 0.003038f, 0.004173f, -0.009689f, 0.001312f, -0.001008f, -0.006731f, 0.002815f, -0.001618f, 0.001256f, 0.000206f, -0.000178f, -0.008495f, 0.004276f, 0.000484f, 0.002226f, -0.005701f, -0.004206f, -0.003821f, -0.003550f, -0.060114f, 0.016755f, -0.011206f, 0.020461f, -0.019258f, -0.000228f, 0.031401f, -0.010538f, 0.044627f, 0.010244f, 0.008576f, -0.019224f, 0.008419f, 0.022112f, -0.013669f, -0.002796f, 0.028851f, 0.018588f, 0.021709f, 0.003051f, -0.033417f, 0.021210f, -0.021586f, -0.002036f, + -0.013023f, 0.003285f, -0.016621f, 0.009637f, -0.004352f, 0.009392f, 0.008938f, 0.015955f, 0.016176f, 0.017957f, -0.021334f, 0.005075f, 0.034016f, 0.007252f, -0.006133f, -0.006839f, -0.017113f, -0.013795f, -0.000092f, 0.001250f, 0.006107f, 0.028631f, 0.002450f, 0.015794f, 0.015294f, -0.001082f, -0.007317f, -0.006969f, 0.025972f, -0.030355f, -0.006622f, -0.026862f, -0.022150f, -0.006218f, 0.000167f, -0.045070f, 0.011697f, -0.014169f, 0.027584f, -0.005717f, 0.001184f, 0.019157f, 0.003899f, 0.046279f, 0.038204f, 0.055126f, 0.020828f, 0.002343f, -0.006428f, -0.005589f, -0.009321f, -0.002703f, -0.011082f, -0.030346f, 0.020535f, 0.025165f, 0.011967f, -0.004103f, 0.002782f, -0.021369f, -0.029110f, 0.013518f, 0.003562f, 0.004032f, -0.009411f, -0.003997f, -0.010210f, -0.005487f, 0.008879f, 0.002976f, 0.011649f, -0.000748f, 0.002529f, -0.006683f, 0.008094f, -0.024068f, -0.006451f, -0.000823f, -0.001065f, -0.004506f, 0.004128f, 0.001128f, 0.001440f, -0.001637f, -0.005993f, -0.001152f, -0.002574f, -0.001583f, 0.007376f, 0.000923f, 0.000792f, -0.004921f, 0.001466f, 0.001238f, -0.000536f, -0.010714f, + -0.007975f, -0.017605f, 0.023743f, -0.006931f, -0.005170f, 0.055384f, -0.011408f, -0.012159f, 0.061579f, -0.000858f, 0.035045f, 0.025869f, 0.002073f, 0.014524f, -0.008259f, 0.011394f, 0.010694f, 0.006802f, 0.008680f, 0.028471f, -0.019611f, 0.034306f, -0.018880f, -0.000562f, 0.007027f, -0.004613f, -0.024865f, -0.022190f, -0.000663f, -0.036034f, -0.011524f, -0.039366f, -0.002722f, -0.023377f, -0.017514f, -0.012791f, -0.011258f, 0.005898f, -0.031688f, 0.036794f, 0.005764f, -0.023860f, -0.017840f, -0.001112f, -0.004633f, -0.005826f, 0.009505f, 0.005073f, 0.036150f, 0.004174f, -0.000419f, -0.018450f, 0.003038f, 0.007515f, -0.001364f, -0.019683f, -0.008546f, 0.022714f, 0.024735f, -0.001443f, -0.021027f, 0.008621f, -0.004147f, 0.032297f, 0.035937f, -0.014015f, -0.009308f, -0.006618f, 0.004076f, -0.013784f, 0.014525f, -0.044713f, -0.004205f, 0.052899f, -0.047715f, -0.023493f, -0.011061f, 0.003449f, 0.004220f, 0.006332f, -0.004321f, 0.014180f, -0.008460f, -0.002365f, 0.025744f, -0.004037f, 0.018658f, -0.012612f, 0.018796f, -0.016439f, 0.012874f, 0.010508f, 0.025553f, -0.000519f, -0.004323f, 0.010803f, + 0.016821f, 0.001506f, -0.004028f, -0.002636f, 0.001712f, -0.009131f, -0.002785f, 0.008616f, 0.011354f, 0.003580f, -0.003680f, 0.011031f, -0.008613f, 0.009064f, 0.007569f, 0.008271f, 0.004554f, 0.000304f, -0.013429f, 0.013506f, 0.007983f, 0.006253f, 0.002966f, 0.006373f, 0.011815f, 0.002721f, -0.009269f, 0.004627f, -0.007554f, -0.005819f, 0.009779f, -0.002378f, 0.008466f, 0.009177f, -0.003581f, -0.006673f, 0.003776f, -0.032220f, -0.017657f, -0.005040f, 0.024936f, 0.030057f, 0.020600f, -0.019126f, -0.049087f, 0.084982f, 0.021379f, -0.053332f, -0.053509f, -0.008017f, 0.012958f, 0.036195f, -0.046553f, -0.008218f, 0.008693f, -0.000673f, -0.006695f, 0.048701f, 0.010450f, -0.028590f, 0.015266f, 0.002010f, -0.001367f, 0.025640f, -0.004678f, 0.014012f, -0.031741f, -0.010754f, 0.055776f, 0.020603f, 0.043984f, 0.013879f, 0.039766f, 0.006951f, -0.014606f, 0.027958f, 0.025483f, 0.039939f, 0.019669f, -0.045111f, -0.017105f, 0.009752f, 0.023316f, -0.018124f, 0.006878f, -0.017464f, -0.029167f, 0.002943f, -0.003372f, -0.017459f, 0.013569f, 0.018892f, 0.016408f, 0.011979f, 0.011249f, -0.008610f, + 0.030188f, -0.000249f, -0.029993f, -0.021789f, 0.027151f, 0.014709f, -0.047106f, 0.020474f, 0.008363f, 0.015133f, -0.041160f, -0.028148f, 0.026467f, 0.040873f, 0.023114f, -0.009204f, -0.044016f, 0.009946f, -0.001947f, 0.037520f, -0.012532f, -0.050481f, 0.021153f, 0.029424f, -0.011158f, 0.030624f, 0.025218f, 0.010379f, -0.020157f, 0.002626f, -0.000266f, 0.005873f, 0.002210f, -0.001388f, -0.010725f, -0.004528f, -0.013461f, -0.001417f, -0.002660f, 0.007012f, -0.008223f, -0.004956f, -0.002763f, -0.006186f, -0.003761f, -0.003301f, -0.003759f, 0.015615f, 0.004703f, 0.000159f, 0.015216f, -0.003809f, -0.014357f, -0.009671f, -0.007695f, -0.006237f, 0.000660f, -0.010501f, 0.004396f, 0.006333f, 0.005378f, 0.003973f, -0.013790f, -0.005395f, 0.011570f, 0.009510f, -0.001428f, 0.020299f, 0.039647f, 0.015284f, 0.041856f, 0.007018f, 0.019204f, 0.014305f, 0.069720f, 0.094859f, 0.007422f, 0.018987f, -0.060364f, -0.019179f, 0.036521f, -0.030760f, 0.071814f, -0.014287f, 0.011325f, 0.019346f, 0.042060f, 0.023329f, -0.010014f, -0.030467f, -0.035708f, -0.011784f, -0.005870f, -0.044781f, -0.021222f, -0.017819f, + 0.028737f, -0.016665f, 0.008560f, -0.028722f, 0.003828f, -0.011295f, -0.041903f, 0.043549f, 0.030208f, 0.035057f, 0.015444f, -0.021387f, -0.020705f, -0.048780f, 0.000901f, -0.043971f, -0.013356f, -0.003757f, 0.005797f, 0.022485f, 0.017743f, -0.014292f, -0.010125f, 0.018620f, 0.041185f, 0.011036f, 0.015747f, 0.030032f, -0.038306f, 0.027111f, -0.021759f, -0.020145f, -0.038676f, -0.016983f, 0.017686f, 0.014916f, 0.002465f, 0.045178f, -0.009901f, -0.016816f, 0.006926f, 0.011785f, 0.062116f, -0.020483f, 0.024901f, 0.024483f, -0.059713f, 0.000016f, 0.007461f, -0.013212f, -0.008800f, 0.020590f, -0.011851f, 0.001702f, 0.025301f, 0.013021f, -0.036749f, -0.044164f, -0.042594f, -0.019996f, -0.015855f, 0.035465f, 0.030963f, -0.008548f, -0.013538f, 0.001760f, 0.003931f, 0.023376f, -0.002644f, -0.007387f, 0.014532f, -0.002728f, -0.002424f, -0.006197f, 0.010526f, 0.014383f, -0.007654f, 0.013767f, 0.013010f, 0.013315f, 0.002351f, -0.005669f, 0.011771f, -0.008162f, 0.007052f, 0.014995f, 0.001106f, 0.008941f, 0.012005f, -0.020395f, -0.000890f, 0.009923f, 0.011097f, 0.014947f, 0.001759f, 0.013382f, + 0.000705f, 0.000862f, -0.004600f, 0.007684f, 0.011253f, 0.059425f, -0.014095f, 0.008686f, -0.026574f, -0.007613f, -0.035425f, 0.028147f, -0.050967f, 0.002342f, -0.041041f, 0.008121f, 0.017572f, 0.006377f, -0.024566f, 0.084186f, -0.005916f, -0.011326f, 0.007644f, -0.047915f, 0.002749f, -0.032376f, 0.001112f, 0.009098f, -0.009708f, -0.001104f, 0.019826f, -0.017594f, 0.000755f, 0.025478f, 0.002080f, 0.006446f, -0.041232f, 0.005249f, -0.003489f, -0.002572f, -0.010448f, -0.051149f, -0.028472f, 0.012639f, 0.004177f, 0.022709f, -0.059274f, 0.006462f, -0.055167f, 0.027969f, -0.037628f, -0.060181f, 0.030468f, 0.055486f, 0.009558f, 0.027292f, -0.041570f, 0.041157f, -0.010215f, 0.006144f, -0.025502f, 0.034280f, 0.013799f, 0.035596f, 0.011166f, 0.043189f, -0.039139f, 0.007473f, 0.002147f, -0.006709f, -0.031038f, -0.025301f, -0.029175f, 0.033096f, -0.008834f, 0.044980f, -0.027971f, -0.021455f, 0.005016f, 0.005991f, -0.025024f, 0.012985f, -0.014731f, -0.058589f, 0.025724f, 0.038812f, 0.064422f, 0.022537f, 0.045686f, -0.026421f, 0.000049f, -0.029788f, 0.048941f, 0.016508f, -0.009427f, -0.019522f, + 0.023210f, -0.016751f, -0.004760f, 0.002476f, -0.014828f, -0.024950f, -0.016678f, -0.011833f, -0.009969f, -0.033227f, -0.014516f, -0.027699f, 0.021274f, -0.005297f, 0.012609f, 0.024849f, 0.006482f, -0.018856f, -0.001903f, -0.018871f, -0.008194f, -0.028194f, -0.015672f, -0.029843f, -0.005334f, 0.048817f, 0.009843f, -0.003773f, 0.010841f, 0.014611f, -0.028386f, -0.013031f, -0.001785f, -0.003833f, -0.011868f, 0.012355f, -0.005720f, -0.043273f, -0.003882f, -0.009998f, -0.098361f, 0.012074f, -0.031423f, 0.091016f, -0.017132f, -0.045970f, 0.018275f, -0.002644f, -0.045797f, -0.007851f, 0.007622f, -0.027589f, 0.068717f, 0.009739f, 0.006592f, 0.031162f, -0.038645f, -0.059506f, -0.036661f, 0.083837f, -0.006694f, -0.017874f, 0.055421f, 0.031211f, -0.026435f, -0.026336f, -0.014809f, 0.066438f, 0.009322f, -0.016299f, -0.026009f, -0.012639f, -0.051947f, 0.034960f, -0.006052f, 0.014114f, 0.033417f, -0.011912f, -0.053798f, -0.006688f, 0.069382f, -0.003081f, -0.017304f, 0.033330f, -0.015193f, 0.041384f, 0.027243f, -0.003635f, -0.051266f, -0.026237f, -0.007028f, -0.047570f, -0.027843f, -0.027451f, 0.003722f, -0.006621f, + 0.040066f, -0.027975f, -0.009661f, -0.000265f, 0.103005f, 0.035718f, -0.017726f, 0.020768f, 0.012152f, -0.006134f, 0.052314f, 0.025361f, -0.019790f, 0.008132f, 0.042298f, 0.047717f, -0.029155f, -0.020874f, -0.069939f, -0.056222f, 0.031976f, -0.021034f, 0.034519f, -0.000995f, -0.041116f, 0.010012f, -0.003247f, 0.013007f, -0.027354f, -0.020924f, 0.038733f, 0.009751f, 0.005145f, -0.003883f, -0.004516f, 0.025678f, -0.012332f, 0.013209f, -0.006572f, 0.016010f, 0.032542f, 0.008616f, -0.023508f, 0.003845f, -0.009030f, 0.017697f, 0.014645f, 0.004824f, 0.021185f, 0.032907f, -0.012932f, 0.026541f, -0.002570f, -0.035288f, -0.009118f, 0.001103f, -0.019717f, 0.007917f, 0.025688f, -0.000507f, -0.013000f, 0.001571f, -0.004804f, 0.033480f, 0.028723f, 0.002909f, 0.013596f, 0.017245f, 0.009022f, 0.022363f, -0.028707f, -0.021377f, 0.010275f, 0.005765f, -0.006101f, -0.002553f, -0.004726f, -0.010740f, -0.010589f, -0.111164f, 0.038147f, -0.023810f, 0.059134f, 0.060123f, -0.034874f, 0.028379f, -0.059540f, -0.089399f, 0.002168f, -0.062881f, 0.008251f, -0.007892f, 0.048617f, -0.036132f, 0.034684f, 0.029750f, + 0.048762f, -0.074287f, 0.008089f, -0.045475f, -0.041667f, 0.004483f, -0.053786f, -0.034709f, 0.048795f, -0.014271f, 0.018522f, 0.056972f, -0.011316f, 0.018746f, -0.046973f, 0.005383f, -0.051790f, 0.047985f, -0.042932f, -0.028520f, -0.031693f, 0.053529f, 0.042908f, -0.030755f, 0.058676f, 0.038847f, -0.012417f, 0.058221f, -0.003248f, -0.061627f, -0.017028f, -0.007273f, -0.048012f, 0.010806f, -0.101583f, 0.010186f, -0.025843f, -0.048763f, -0.039371f, 0.045403f, -0.027120f, 0.094142f, 0.069967f, -0.105261f, 0.000048f, -0.002754f, 0.005056f, 0.048656f, -0.082630f, -0.057635f, 0.056852f, -0.047373f, -0.059185f, -0.068169f, 0.004623f, 0.140003f, 0.069609f, -0.065154f, -0.040993f, 0.005677f, 0.050989f, 0.019485f, -0.068093f, 0.010131f, -0.045475f, -0.026744f, -0.002372f, -0.008202f, 0.002677f, 0.044941f, 0.010679f, 0.026650f, 0.017726f, -0.052407f, 0.014142f, 0.023529f, -0.007344f, -0.018885f, 0.002834f, -0.044720f, 0.039879f, 0.014458f, 0.010954f, -0.059313f, 0.009970f, 0.030601f, 0.008706f, -0.014010f, -0.011021f, 0.026306f, -0.043203f, -0.002785f, -0.032199f, -0.017846f, 0.042479f, -0.044814f, + -0.001758f, 0.026719f, -0.022413f, 0.020950f, 0.025521f, 0.006629f, 0.003890f, 0.018683f, 0.006181f, -0.023844f, 0.034901f, -0.026868f, -0.020971f, -0.012192f, -0.036703f, -0.012682f, -0.034393f, -0.032969f, 0.011998f, 0.051605f, -0.059088f, 0.028396f, -0.098664f, -0.015528f, -0.038947f, -0.033998f, 0.050855f, -0.067630f, -0.105126f, 0.060074f, 0.090779f, 0.021426f, -0.018692f, -0.084069f, 0.004722f, 0.031828f, 0.031662f, -0.014732f, -0.034339f, 0.003417f, -0.009203f, -0.011659f, 0.009643f, -0.013022f, -0.028940f, -0.055286f, 0.005928f, -0.033555f, 0.007140f, -0.030150f, -0.063207f, 0.037934f, 0.027431f, 0.046814f, 0.000654f, 0.050696f, 0.027774f, 0.007047f, -0.017701f, -0.026945f, -0.043865f, -0.031220f, -0.018267f, 0.011507f, 0.028493f, -0.020444f, -0.010711f, -0.071517f, 0.065497f, 0.078232f, 0.042825f, -0.040779f, 0.041046f, -0.055456f, -0.001910f, 0.012080f, -0.121055f, 0.009279f, 0.010902f, 0.056219f, -0.072649f, 0.091961f, 0.035303f, -0.066697f, -0.038529f, 0.027410f, -0.012539f, -0.048964f, -0.060482f, -0.064521f, -0.088396f, 0.063951f, -0.028487f, 0.009750f, -0.134642f, -0.053560f, + 0.007303f, 0.001112f, 0.029753f, -0.021643f, 0.004510f, 0.022493f, 0.023080f, -0.064186f, -0.015568f, 0.010086f, 0.034502f, 0.025408f, -0.006417f, -0.024815f, -0.011382f, -0.005578f, 0.032148f, 0.005377f, -0.021600f, -0.002703f, -0.016991f, -0.006447f, 0.029659f, 0.013812f, -0.016040f, 0.032447f, -0.033423f, -0.019218f, -0.025172f, 0.031392f, -0.013462f, 0.003661f, -0.015426f, 0.013684f, -0.046142f, 0.006629f, 0.018021f, 0.007092f, -0.008818f, -0.019804f, -0.017886f, -0.023148f, 0.022052f, 0.004931f, -0.008518f, -0.026467f, 0.026535f, 0.001552f, 0.001136f, 0.003925f, -0.046961f, -0.022597f, -0.031027f, 0.003956f, -0.016113f, -0.009669f, -0.091649f, -0.012443f, 0.033008f, -0.043151f, -0.040269f, 0.037511f, 0.037956f, 0.007563f, -0.036427f, -0.123876f, -0.018510f, 0.024000f, 0.014409f, 0.053453f, -0.001525f, 0.031006f, -0.008428f, -0.000950f, -0.015941f, 0.002155f, 0.032362f, 0.003629f, 0.000946f, 0.031665f, -0.008896f, -0.007814f, -0.042229f, -0.003991f, -0.007155f, -0.004810f, 0.006752f, 0.025258f, 0.034219f, -0.006921f, -0.000455f, 0.027098f, -0.006635f, -0.052513f, -0.004092f, -0.046623f, + 0.006275f, 0.006254f, -0.061520f, 0.044161f, -0.084583f, 0.018746f, 0.022598f, -0.036934f, -0.003144f, 0.108940f, -0.031421f, 0.036739f, -0.023588f, 0.019423f, -0.082230f, 0.008755f, 0.047191f, -0.001323f, 0.040625f, -0.009636f, 0.003672f, -0.002691f, 0.052068f, -0.033937f, -0.041388f, 0.046748f, -0.043866f, -0.053357f, -0.001366f, -0.085206f, 0.056155f, 0.047261f, -0.017773f, 0.018250f, 0.007141f, -0.000500f, -0.073300f, -0.011933f, -0.006302f, 0.031995f, 0.011228f, -0.030575f, 0.028027f, -0.002049f, -0.037761f, -0.025034f, -0.023799f, 0.004953f, 0.004187f, -0.004997f, -0.001678f, 0.023235f, -0.023759f, -0.006532f, 0.015102f, -0.024363f, -0.014078f, 0.018873f, -0.025960f, 0.001727f, 0.021309f, 0.001480f, -0.007150f, 0.009746f, -0.001783f, 0.002304f, 0.018452f, -0.006970f, -0.006837f, -0.014702f, 0.005521f, -0.009233f, -0.009894f, 0.008627f, 0.009671f, -0.020712f, 0.002415f, -0.019325f, 0.017874f, -0.022014f, 0.011387f, -0.000004f, -0.004944f, 0.002377f, -0.005838f, -0.002418f, -0.001883f, -0.045345f, -0.136788f, -0.064387f, -0.021547f, 0.044479f, 0.100500f, -0.092358f, 0.019999f, -0.026836f, + -0.093142f, -0.013158f, 0.083404f, 0.022352f, 0.068680f, -0.058230f, 0.017129f, -0.020240f, 0.003916f, 0.040511f, 0.006727f, 0.021966f, -0.013300f, -0.118609f, 0.034993f, 0.005725f, -0.050449f, 0.051557f, 0.039285f, -0.035901f, 0.036305f, 0.004300f, -0.038735f, 0.011762f, -0.023988f, 0.074056f, 0.008958f, 0.029961f, 0.001297f, -0.076096f, -0.061043f, -0.020569f, -0.045270f, 0.049450f, 0.070963f, 0.073065f, 0.058697f, -0.020390f, 0.008070f, -0.059787f, -0.009156f, -0.006034f, -0.025299f, -0.031512f, 0.004935f, 0.005760f, -0.082289f, -0.024067f, -0.032271f, -0.002265f, 0.036625f, -0.040423f, -0.009496f, 0.014204f, -0.000088f, 0.042281f, -0.047029f, -0.001909f, -0.053256f, -0.027894f, -0.039423f, 0.021616f, 0.013917f, 0.042240f, -0.005918f, -0.004393f, -0.050229f, -0.015002f, -0.023972f, -0.006300f, 0.020896f, 0.028928f, 0.059205f, -0.038142f, 0.010578f, -0.033049f, 0.011609f, 0.022268f, 0.005946f, -0.018192f, -0.007720f, -0.006395f, -0.007728f, -0.002703f, 0.015393f, 0.016504f, -0.005008f, -0.001951f, -0.008272f, -0.011715f, 0.007301f, 0.016426f, 0.005227f, 0.001823f, 0.004096f, -0.013868f, + -0.016512f, -0.015111f, 0.024591f, -0.000715f, 0.016887f, 0.014246f, -0.002780f, -0.019463f, -0.021278f, 0.003102f, 0.005422f, -0.016152f, -0.005594f, -0.014059f, 0.009952f, -0.010190f, 0.003100f, 0.002946f, 0.010406f, -0.005502f, -0.006868f, 0.002651f, 0.003458f, 0.035520f, -0.057500f, -0.226750f, -0.119596f, 0.024483f, 0.095318f, 0.213397f, 0.163020f, 0.091835f, 0.030876f, 0.047889f, -0.015260f, -0.089787f, -0.173664f, -0.230975f, -0.058491f, -0.066958f, 0.003408f, 0.112470f, 0.160386f, 0.107574f, 0.143693f, 0.033081f, 0.030400f, -0.016828f, -0.072803f, -0.082384f, -0.066684f, -0.070793f, -0.087596f, -0.070189f, -0.030079f, -0.004516f, -0.001154f, 0.056096f, 0.072716f, 0.139180f, 0.065687f, 0.021654f, 0.057064f, 0.088827f, 0.028234f, 0.016952f, -0.071757f, -0.098103f, -0.160429f, -0.074100f, -0.084188f, -0.060860f, -0.036321f, -0.028436f, 0.011778f, 0.019759f, 0.067320f, 0.138051f, 0.110956f, 0.121202f, 0.089629f, 0.109962f, 0.081710f, -0.066132f, -0.060750f, -0.152793f, -0.118469f, -0.086605f, -0.194732f, -0.150514f, -0.092215f, 0.007320f, 0.117842f, 0.112447f, 0.132726f, 0.166136f, + 0.141916f, 0.076526f, 0.092062f, 0.003681f, -0.036237f, -0.097434f, -0.141674f, -0.142106f, -0.117444f, -0.070458f, -0.015365f, 0.020281f, 0.034131f, 0.039456f, 0.065527f, 0.047511f, 0.076672f, 0.048680f, 0.019043f, 0.012608f, -0.003139f, -0.007500f, -0.002032f, -0.053098f, -0.037334f, -0.007440f, -0.024927f, -0.063430f, -0.018055f, -0.022719f, -0.023852f, -0.004317f, 0.047234f, 0.089823f, 0.074182f, 0.007932f, 0.072904f, 0.051641f, -0.009840f, -0.060120f, -0.095598f, -0.088546f, -0.040414f, -0.043797f, -0.027733f, -0.015134f, 0.025004f, 0.055715f, 0.076832f, 0.087766f, 0.062847f, 0.024808f, 0.026731f, -0.016684f, -0.048214f, -0.080638f, -0.072657f, -0.031919f, -0.003550f, -0.023539f, -0.008044f, 0.023347f, 0.029196f, 0.030596f, 0.028668f, 0.007583f, 0.011745f, 0.018701f, -0.003557f, -0.016711f, 0.000197f, 0.006129f, -0.012697f, -0.013741f, -0.002277f, 0.005599f, 0.003718f, -0.008548f, -0.004716f, 0.004309f, 0.001632f, -0.005942f, -0.007926f, -0.003263f, 0.000861f, -0.000134f, -0.000168f}, + {-0.002911f, -0.004136f, -0.007931f, 0.004600f, 0.007370f, 0.013094f, 0.003518f, -0.009232f, -0.016407f, 0.003534f, -0.007678f, 0.000630f, 0.005118f, 0.001980f, 0.013230f, -0.010984f, -0.002727f, -0.001512f, -0.000896f, -0.009432f, 0.005771f, 0.002436f, 0.001183f, 0.000234f, -0.004624f, -0.003555f, -0.003358f, -0.001093f, 0.000432f, 0.002198f, -0.003496f, 0.005031f, 0.011839f, -0.000397f, 0.005243f, -0.008433f, -0.004915f, -0.010089f, -0.004891f, 0.010681f, 0.000481f, -0.002199f, 0.001871f, 0.011333f, 0.001192f, 0.005692f, -0.001465f, -0.005340f, -0.001702f, 0.006464f, -0.005600f, 0.010153f, 0.006228f, 0.011450f, 0.005626f, 0.000717f, -0.003543f, -0.007613f, -0.004247f, -0.006619f, -0.001054f, -0.004833f, 0.001872f, 0.000414f, -0.002634f, 0.001671f, -0.002269f, 0.004092f, -0.001064f, -0.001138f, 0.005754f, -0.000583f, -0.000455f, 0.000768f, -0.005651f, 0.002550f, -0.004148f, -0.006621f, -0.003855f, -0.002913f, 0.002835f, -0.000548f, -0.000506f, -0.007507f, -0.001295f, 0.001957f, 0.001430f, -0.002981f, 0.000234f, -0.002946f, 0.001272f, 0.002111f, 0.001522f, 0.000597f, -0.000570f, -0.001195f, + 0.000296f, -0.002315f, -0.001306f, 0.000518f, 0.000294f, 0.001038f, 0.000950f, 0.000937f, 0.000152f, -0.022863f, -0.005182f, 0.009372f, 0.001638f, 0.012779f, 0.006812f, -0.010526f, 0.002768f, -0.000232f, 0.004180f, -0.003771f, -0.017561f, 0.010130f, 0.006199f, 0.011608f, 0.014502f, 0.012493f, 0.004370f, 0.000167f, -0.017894f, -0.001846f, 0.008200f, -0.008156f, -0.007088f, -0.018676f, -0.001267f, -0.003126f, -0.002174f, -0.004755f, 0.002199f, -0.011149f, 0.005070f, -0.001957f, 0.004703f, 0.001387f, -0.007509f, 0.005782f, 0.004811f, 0.012951f, -0.001523f, -0.010376f, -0.005375f, 0.005614f, 0.002242f, -0.002597f, 0.000521f, 0.004133f, 0.000521f, -0.007582f, -0.000089f, 0.001596f, -0.000825f, 0.000480f, -0.004803f, -0.002098f, -0.006390f, -0.001312f, 0.007826f, 0.002804f, -0.002700f, 0.003352f, -0.001040f, -0.000404f, 0.001170f, -0.009103f, -0.000858f, -0.000451f, 0.005070f, 0.009858f, -0.002937f, -0.000993f, -0.006381f, -0.004923f, 0.002494f, 0.011218f, -0.009950f, -0.001552f, 0.002524f, -0.000537f, -0.002721f, -0.000171f, -0.002653f, 0.003655f, 0.003808f, 0.002030f, 0.006207f, -0.002960f, + -0.001944f, -0.000634f, 0.001438f, -0.001421f, 0.000231f, 0.001014f, 0.000860f, -0.000736f, -0.002650f, 0.001956f, -0.002639f, 0.012643f, 0.004745f, 0.004273f, -0.004240f, 0.000333f, 0.001189f, 0.001212f, -0.021709f, -0.011739f, -0.000984f, -0.005400f, -0.006719f, -0.000333f, -0.005657f, -0.022091f, 0.013167f, 0.003030f, 0.005960f, -0.002322f, 0.004535f, -0.005838f, 0.000280f, 0.000798f, 0.011383f, -0.004044f, -0.002398f, -0.001899f, -0.001924f, -0.001817f, -0.000806f, 0.012340f, -0.002389f, -0.000181f, -0.007026f, -0.000391f, -0.003392f, 0.004012f, 0.002029f, -0.011949f, 0.009269f, -0.012095f, -0.000231f, 0.010611f, -0.001519f, 0.000398f, 0.000809f, -0.000244f, -0.007412f, -0.005267f, 0.012181f, 0.007044f, -0.015095f, -0.008067f, 0.002389f, -0.008863f, -0.006431f, 0.006461f, -0.010864f, 0.002112f, 0.002632f, 0.006213f, 0.012974f, 0.009946f, 0.006085f, 0.004648f, -0.008839f, -0.009216f, -0.007891f, 0.002565f, 0.011290f, 0.004364f, -0.001936f, -0.005042f, 0.003702f, -0.004262f, -0.001858f, 0.002630f, -0.004185f, -0.006344f, -0.000853f, 0.005086f, -0.000921f, -0.004330f, 0.000577f, 0.000042f, + 0.004956f, 0.002064f, 0.004578f, 0.001043f, -0.002098f, -0.002152f, -0.001721f, -0.000899f, -0.000575f, 0.001472f, 0.002880f, 0.003422f, 0.003600f, 0.016594f, -0.004063f, -0.004241f, -0.004974f, 0.004680f, -0.005565f, 0.008114f, -0.015740f, -0.002017f, 0.011676f, 0.006113f, -0.011838f, 0.008759f, 0.014378f, 0.013569f, 0.008653f, 0.001659f, -0.000540f, -0.008875f, -0.011445f, 0.004854f, -0.001101f, 0.011471f, -0.000901f, 0.006859f, -0.007150f, -0.004758f, -0.003837f, 0.001135f, 0.003654f, -0.000651f, -0.013977f, 0.002947f, 0.004840f, 0.003515f, 0.006024f, 0.003695f, -0.007586f, -0.018677f, -0.006015f, 0.002733f, 0.003600f, 0.000877f, -0.000803f, 0.003541f, -0.007664f, -0.000128f, -0.013917f, 0.006501f, -0.014359f, -0.003789f, -0.006090f, -0.009450f, 0.006891f, 0.003045f, 0.002921f, -0.008252f, -0.004014f, -0.002431f, -0.008276f, 0.000780f, -0.000705f, 0.004418f, -0.003549f, -0.006969f, -0.005320f, -0.016529f, 0.005247f, 0.001912f, 0.007096f, 0.010465f, 0.013367f, 0.005215f, -0.005270f, -0.007877f, -0.003719f, 0.007261f, 0.007244f, -0.008209f, 0.008948f, 0.000378f, -0.005821f, 0.012902f, + -0.002504f, 0.002908f, 0.002188f, 0.003784f, -0.000232f, -0.002885f, 0.000836f, 0.004008f, 0.001439f, -0.000637f, 0.004343f, -0.002277f, -0.001783f, -0.003154f, 0.001489f, 0.000390f, -0.001613f, 0.002374f, -0.002304f, -0.004154f, -0.001742f, 0.003147f, -0.000758f, -0.000725f, 0.001135f, 0.008308f, 0.007676f, -0.001316f, 0.005436f, -0.016031f, 0.001907f, -0.007652f, 0.000862f, 0.002397f, -0.010063f, 0.003689f, 0.029534f, 0.003234f, -0.002585f, -0.016606f, 0.023781f, -0.000045f, 0.010003f, 0.001189f, -0.000471f, -0.012904f, 0.012565f, 0.003226f, -0.006905f, 0.001647f, 0.000976f, -0.005148f, 0.005097f, 0.013223f, -0.003818f, 0.014061f, -0.004133f, 0.006018f, -0.000195f, 0.009274f, 0.008263f, 0.009235f, 0.000130f, -0.005025f, 0.007260f, -0.005296f, 0.006398f, -0.001818f, 0.006450f, 0.006248f, 0.006012f, -0.000775f, -0.001812f, 0.002402f, -0.005166f, -0.007507f, -0.019167f, 0.012546f, -0.012383f, 0.008682f, 0.001137f, 0.003657f, -0.002211f, -0.022892f, -0.004930f, -0.006179f, -0.011125f, 0.001518f, 0.006967f, -0.014704f, -0.004625f, 0.006639f, 0.001252f, 0.010404f, 0.018186f, -0.000494f, + -0.004889f, -0.004341f, -0.018849f, 0.005792f, 0.003679f, -0.004218f, 0.001018f, 0.007498f, 0.007716f, 0.002230f, 0.001988f, 0.005429f, 0.000652f, -0.000829f, 0.008124f, 0.004774f, -0.004423f, 0.008288f, 0.006084f, 0.008137f, 0.002527f, -0.001381f, 0.000614f, -0.000525f, -0.000518f, -0.003001f, 0.001093f, -0.001820f, 0.001917f, -0.002301f, 0.003824f, 0.001369f, 0.000396f, 0.003150f, 0.000310f, -0.000946f, 0.000919f, -0.000671f, -0.000240f, -0.001071f, 0.003809f, 0.002323f, 0.000808f, 0.002704f, -0.000818f, 0.004298f, 0.000596f, 0.001385f, -0.008373f, -0.010114f, -0.000981f, 0.005448f, -0.003240f, -0.004879f, -0.007374f, 0.002158f, 0.013409f, 0.006020f, 0.002108f, -0.030481f, -0.013998f, -0.004242f, 0.006233f, -0.003631f, 0.010310f, 0.034805f, 0.010817f, -0.012765f, 0.001980f, -0.015103f, -0.004906f, 0.010608f, -0.012043f, -0.003042f, 0.015514f, 0.003762f, -0.003894f, 0.002224f, 0.008771f, -0.005262f, 0.004249f, 0.004633f, 0.004550f, -0.008617f, 0.003939f, -0.004023f, -0.004944f, -0.012739f, -0.004975f, -0.007439f, -0.014219f, 0.006236f, 0.000483f, -0.000948f, 0.014342f, 0.010497f, + 0.003672f, 0.011539f, 0.000063f, -0.014576f, 0.012283f, -0.001374f, -0.010002f, -0.007866f, -0.014519f, 0.000677f, 0.017472f, 0.001212f, -0.007702f, 0.007445f, -0.013023f, -0.008131f, 0.006731f, -0.010515f, -0.014024f, -0.007345f, -0.004425f, 0.007921f, -0.012392f, -0.003809f, -0.005771f, 0.015944f, 0.002292f, -0.005509f, 0.007809f, -0.004766f, -0.005812f, 0.000918f, 0.012611f, -0.002357f, 0.000833f, 0.006996f, 0.003994f, -0.016090f, -0.000616f, 0.009836f, 0.004670f, 0.005737f, -0.001313f, -0.003114f, 0.007223f, -0.004299f, 0.001245f, -0.003523f, 0.002059f, 0.002723f, 0.003734f, -0.008155f, 0.000048f, 0.000855f, 0.002055f, 0.000503f, 0.000087f, 0.003822f, -0.000716f, -0.000726f, -0.003602f, 0.002809f, 0.010595f, 0.007651f, -0.019786f, 0.018755f, -0.007078f, 0.001720f, -0.008654f, 0.016061f, -0.002289f, -0.010839f, -0.035324f, -0.004723f, 0.018318f, 0.004528f, -0.027541f, 0.012539f, -0.000028f, -0.005650f, -0.008838f, -0.007167f, -0.002728f, -0.016389f, -0.002771f, 0.013227f, 0.017231f, 0.020502f, 0.012446f, 0.018694f, -0.006137f, 0.014722f, 0.007095f, -0.029095f, -0.000693f, 0.007556f, + 0.010322f, 0.005024f, -0.010034f, 0.000557f, -0.002100f, 0.010250f, -0.017439f, -0.006283f, 0.012953f, -0.004294f, 0.007281f, 0.003811f, -0.011618f, -0.012915f, -0.006666f, -0.019344f, -0.005507f, -0.005954f, 0.007931f, 0.002860f, -0.011186f, -0.002588f, -0.023881f, -0.006039f, 0.009745f, -0.006999f, -0.023598f, -0.000375f, 0.013398f, -0.028650f, 0.008300f, 0.004739f, 0.009096f, -0.013599f, -0.006314f, -0.012928f, 0.000996f, -0.003903f, -0.014620f, -0.003876f, -0.002461f, 0.008760f, 0.004958f, 0.021374f, 0.001357f, 0.000193f, 0.003411f, -0.001659f, -0.010849f, 0.013495f, 0.004716f, -0.005611f, 0.011857f, 0.002110f, -0.005895f, 0.001912f, -0.000371f, 0.007168f, 0.001653f, 0.001370f, 0.004492f, -0.003893f, 0.000163f, -0.004178f, -0.000010f, -0.003342f, 0.003300f, -0.001399f, 0.001430f, 0.003989f, 0.000576f, -0.002628f, 0.003760f, 0.000876f, 0.004002f, 0.001013f, -0.001155f, -0.021898f, 0.004923f, 0.017601f, 0.022670f, 0.016905f, 0.017264f, 0.006690f, -0.011919f, 0.012104f, 0.020953f, -0.030928f, 0.015563f, 0.015564f, -0.033139f, -0.008667f, 0.008183f, 0.035809f, -0.002757f, -0.002239f, + -0.008492f, -0.009987f, 0.044291f, 0.021981f, 0.006187f, 0.005573f, 0.022987f, -0.000382f, -0.003463f, -0.008544f, 0.003461f, -0.019870f, -0.017944f, -0.004066f, 0.005593f, 0.013357f, 0.006072f, 0.003061f, -0.006757f, 0.001327f, -0.014590f, 0.006121f, -0.021638f, 0.021264f, -0.002352f, -0.010534f, -0.012431f, -0.014170f, -0.021832f, 0.003820f, -0.021133f, -0.007071f, 0.014541f, -0.003330f, -0.007226f, -0.006919f, -0.003368f, -0.018047f, -0.012553f, -0.008109f, -0.007693f, -0.004086f, 0.006670f, 0.003759f, 0.001119f, 0.001011f, -0.015972f, 0.027571f, 0.015836f, 0.000432f, -0.002010f, 0.036250f, -0.004350f, -0.006208f, -0.008872f, -0.018300f, -0.005011f, 0.012150f, 0.011655f, -0.001744f, 0.014179f, -0.028110f, 0.008343f, -0.010694f, 0.002712f, 0.010884f, -0.003760f, -0.000205f, 0.001779f, 0.000968f, 0.003492f, -0.004384f, 0.005261f, 0.006790f, -0.006324f, 0.002657f, 0.003567f, 0.004443f, 0.011522f, -0.008611f, -0.000777f, 0.001261f, -0.000203f, 0.002735f, 0.001289f, 0.002854f, 0.003638f, -0.003103f, 0.002341f, -0.000942f, 0.000289f, -0.006130f, -0.001324f, -0.001415f, 0.005257f, 0.040783f, + 0.013930f, 0.008630f, 0.019795f, -0.022339f, -0.013442f, 0.012780f, 0.013594f, 0.030272f, 0.004381f, 0.008444f, -0.020379f, -0.001163f, 0.010058f, -0.026714f, -0.008620f, 0.010745f, -0.008934f, 0.000371f, 0.007309f, 0.019804f, -0.006717f, 0.007760f, 0.004035f, 0.004383f, 0.016865f, 0.014735f, 0.017974f, -0.014135f, -0.009497f, 0.019523f, -0.024757f, -0.008188f, -0.008231f, -0.001634f, -0.006729f, -0.015784f, 0.015346f, -0.000531f, -0.017097f, 0.000826f, -0.006765f, -0.017756f, -0.022189f, -0.012302f, -0.013323f, 0.026182f, -0.008387f, -0.006649f, -0.015558f, -0.001276f, -0.007947f, 0.004057f, 0.030806f, -0.005776f, -0.010150f, 0.005258f, -0.001887f, 0.017807f, -0.020720f, 0.034972f, 0.006955f, -0.033650f, -0.024519f, 0.008872f, -0.022707f, 0.000368f, -0.024309f, 0.000107f, 0.005128f, -0.003109f, 0.026140f, 0.032829f, -0.015672f, 0.003974f, -0.006497f, -0.024307f, -0.009135f, -0.013244f, -0.015914f, -0.003660f, 0.011872f, -0.008261f, -0.018745f, 0.012356f, 0.000748f, -0.010138f, -0.008616f, 0.004062f, 0.006869f, -0.003031f, -0.002024f, -0.009549f, 0.000449f, -0.008819f, -0.001836f, -0.004426f, + 0.006069f, 0.006914f, 0.001589f, -0.008759f, 0.000859f, 0.000544f, 0.005570f, -0.000146f, -0.002242f, 0.000450f, -0.011049f, -0.001229f, -0.006267f, -0.004418f, 0.000772f, 0.002449f, -0.005848f, 0.004455f, -0.003439f, -0.003169f, 0.007367f, -0.003005f, -0.007354f, -0.035587f, 0.013658f, 0.074054f, -0.012638f, -0.000696f, -0.032204f, -0.013458f, 0.022100f, -0.003040f, 0.042537f, 0.025614f, 0.023677f, 0.000318f, 0.018307f, -0.034533f, 0.031716f, 0.016514f, 0.001652f, 0.004283f, -0.019955f, 0.008897f, -0.000142f, 0.032332f, 0.018106f, 0.021598f, -0.007642f, 0.002249f, 0.005752f, -0.021453f, -0.017283f, -0.007782f, 0.010028f, 0.037691f, -0.010252f, -0.012508f, -0.012626f, -0.006987f, 0.005031f, -0.023701f, -0.006777f, -0.001413f, -0.012621f, -0.025096f, -0.005187f, -0.031879f, -0.011502f, 0.019027f, -0.022133f, -0.009566f, -0.004241f, 0.001971f, -0.035962f, -0.021595f, -0.004559f, -0.003591f, -0.006743f, 0.022964f, 0.010169f, 0.001705f, 0.013894f, 0.023655f, -0.014286f, -0.005781f, -0.019541f, 0.009173f, -0.015334f, 0.013406f, 0.015312f, 0.018423f, 0.033257f, 0.009604f, -0.024756f, -0.003831f, + 0.055631f, 0.018301f, 0.031349f, 0.015274f, 0.009635f, -0.001907f, 0.003956f, -0.012888f, -0.016613f, 0.007816f, 0.005698f, -0.016415f, 0.004601f, 0.011896f, 0.010699f, -0.015746f, 0.012695f, 0.004528f, 0.009197f, 0.010742f, 0.000094f, 0.005328f, 0.008897f, 0.003866f, 0.010416f, -0.000757f, 0.002384f, -0.002948f, -0.006756f, 0.001778f, 0.009116f, 0.001621f, -0.003726f, 0.014718f, 0.009380f, 0.008150f, 0.000493f, -0.001442f, -0.002194f, -0.000071f, 0.000669f, -0.002040f, 0.005244f, 0.004269f, 0.004168f, 0.004706f, 0.002400f, -0.007363f, 0.038151f, 0.041809f, -0.042148f, 0.010368f, 0.030970f, 0.018726f, -0.011736f, -0.022408f, -0.019388f, 0.043577f, 0.003596f, 0.016419f, 0.022863f, -0.012969f, 0.006469f, 0.009598f, -0.026626f, -0.028281f, 0.023041f, 0.007865f, -0.041212f, -0.009477f, 0.053619f, 0.025742f, -0.000088f, -0.030536f, 0.010049f, 0.008084f, 0.032610f, 0.010816f, -0.015878f, 0.021376f, 0.003789f, -0.008935f, -0.003086f, -0.006408f, -0.025416f, -0.011976f, 0.003905f, 0.004434f, -0.030344f, -0.032714f, -0.019384f, -0.009353f, -0.036040f, 0.021472f, -0.002250f, -0.025551f, + 0.004884f, 0.000663f, -0.011106f, -0.003046f, 0.007739f, -0.000148f, 0.008145f, 0.009514f, 0.014523f, -0.014191f, -0.016915f, 0.022409f, 0.045307f, 0.020580f, 0.012369f, 0.033116f, -0.006207f, 0.018077f, 0.044033f, 0.027000f, 0.004139f, 0.004989f, -0.013781f, -0.026885f, 0.026190f, -0.025606f, 0.011526f, -0.010212f, 0.008000f, -0.033540f, 0.016109f, -0.000365f, -0.011006f, -0.006266f, 0.019091f, -0.018049f, -0.009138f, -0.004620f, 0.002890f, -0.000368f, 0.005638f, -0.007117f, -0.000926f, -0.012870f, -0.003298f, -0.000688f, 0.002362f, -0.003810f, 0.004462f, -0.004785f, 0.003867f, -0.004277f, 0.014638f, 0.004652f, -0.003784f, -0.006742f, 0.005532f, 0.000684f, 0.005073f, 0.004674f, -0.003515f, 0.004217f, 0.005384f, -0.003543f, 0.001406f, 0.006736f, -0.002023f, 0.002432f, 0.007326f, 0.007785f, 0.013394f, -0.008605f, -0.039558f, 0.011099f, -0.019073f, -0.008799f, -0.014743f, -0.002490f, 0.033859f, 0.033532f, -0.067852f, 0.020986f, 0.021531f, -0.021087f, -0.034521f, -0.045016f, 0.007937f, -0.013235f, 0.008329f, -0.015723f, -0.012360f, -0.007323f, 0.041997f, 0.010619f, -0.003661f, -0.000742f, + -0.006694f, -0.012576f, 0.010620f, 0.006964f, -0.000200f, 0.016825f, 0.003659f, -0.003580f, 0.005999f, 0.015266f, 0.043343f, 0.004331f, 0.005333f, -0.021449f, -0.009173f, -0.010171f, -0.010788f, -0.001345f, -0.003614f, 0.014324f, 0.020732f, 0.000949f, 0.023952f, -0.005602f, -0.004056f, -0.004948f, -0.002675f, -0.042056f, 0.047381f, 0.001181f, 0.003352f, -0.003529f, -0.012324f, 0.012534f, -0.003254f, 0.019194f, 0.001085f, -0.018442f, 0.004975f, 0.020351f, -0.014514f, 0.018896f, 0.004602f, -0.029023f, -0.004953f, -0.006245f, -0.052708f, -0.018044f, 0.013472f, 0.013569f, -0.021539f, -0.012431f, 0.012578f, 0.001704f, 0.035223f, -0.028113f, 0.012783f, 0.015680f, -0.002281f, 0.013707f, 0.012771f, 0.015543f, 0.006001f, 0.006892f, 0.006303f, 0.005120f, -0.002346f, -0.002923f, -0.009098f, 0.003579f, 0.013164f, 0.002294f, -0.009659f, -0.003810f, -0.005458f, 0.003068f, -0.004232f, -0.003635f, -0.006434f, 0.008469f, 0.004835f, 0.005757f, 0.000622f, -0.015398f, 0.006126f, -0.015650f, 0.001195f, 0.002430f, 0.005500f, -0.007460f, -0.003569f, -0.002379f, 0.005047f, 0.009266f, 0.004221f, 0.003864f, + 0.001311f, -0.011055f, 0.034452f, 0.009851f, 0.010544f, -0.025426f, 0.018774f, -0.010243f, 0.017882f, -0.014250f, 0.023092f, -0.021242f, -0.017349f, 0.031785f, 0.003853f, 0.008041f, -0.019127f, -0.042626f, -0.004201f, 0.012303f, 0.003167f, 0.018120f, -0.015322f, 0.002239f, -0.000352f, -0.031858f, -0.023027f, 0.010390f, -0.036000f, -0.023606f, 0.011278f, 0.000036f, -0.037640f, -0.005475f, -0.018838f, 0.023775f, 0.014166f, 0.004198f, -0.008907f, -0.023592f, -0.050067f, 0.017485f, -0.022526f, 0.027198f, -0.008418f, -0.009240f, -0.004803f, -0.013354f, 0.007414f, 0.007038f, -0.040068f, -0.017719f, 0.039079f, 0.034223f, -0.035652f, 0.045966f, 0.002194f, 0.033816f, -0.008323f, -0.008262f, -0.004470f, -0.013511f, 0.017440f, -0.013318f, -0.037404f, -0.019884f, 0.044018f, -0.010026f, -0.009086f, -0.002599f, 0.013500f, 0.008645f, 0.022140f, -0.050928f, 0.014793f, 0.034453f, 0.027057f, -0.011269f, -0.003047f, -0.011096f, -0.023197f, 0.002450f, 0.020911f, 0.032621f, -0.020328f, -0.020542f, -0.023280f, -0.002507f, -0.003972f, 0.001984f, -0.011275f, 0.005567f, 0.005566f, -0.004079f, -0.001826f, -0.005125f, + -0.010289f, 0.009656f, 0.000005f, 0.001309f, -0.015516f, -0.013077f, -0.003643f, -0.016904f, -0.006718f, -0.008576f, 0.001657f, -0.006132f, -0.000191f, 0.012675f, -0.005433f, 0.005167f, -0.000397f, -0.012217f, 0.002132f, -0.006267f, -0.001789f, 0.004961f, 0.011062f, 0.001386f, 0.004503f, 0.010337f, 0.010253f, 0.013698f, -0.004656f, -0.004002f, -0.002772f, 0.014048f, -0.002460f, -0.023276f, -0.001556f, 0.023827f, 0.018487f, -0.018025f, -0.030698f, -0.025756f, -0.015138f, -0.029845f, -0.001683f, 0.014093f, 0.032714f, -0.005689f, -0.001588f, -0.054818f, 0.032797f, 0.040852f, -0.006508f, -0.022243f, -0.022610f, -0.014013f, 0.061494f, -0.037486f, -0.000163f, -0.004442f, 0.016575f, -0.002776f, 0.070843f, 0.001710f, -0.038608f, -0.010172f, -0.036694f, 0.047831f, 0.041567f, -0.033593f, 0.039098f, 0.009791f, 0.031465f, 0.011773f, -0.059208f, 0.018549f, 0.031612f, -0.040990f, -0.011417f, -0.046508f, -0.023287f, 0.001608f, -0.042890f, -0.036555f, -0.001096f, -0.029615f, -0.000471f, 0.010416f, -0.010660f, -0.029372f, 0.024062f, 0.021874f, -0.048427f, -0.036960f, 0.020159f, 0.008541f, 0.012933f, 0.024536f, + 0.031976f, -0.011772f, -0.017456f, -0.000977f, -0.011339f, -0.000591f, -0.003662f, -0.016202f, 0.006373f, -0.067119f, 0.022810f, 0.032690f, -0.034706f, -0.028505f, 0.021586f, -0.021817f, -0.019879f, -0.009406f, 0.012046f, 0.001755f, 0.041596f, 0.000372f, 0.024273f, -0.002339f, -0.017046f, 0.009100f, 0.012498f, 0.013104f, -0.011024f, 0.000351f, 0.001279f, -0.001461f, -0.007102f, -0.016551f, 0.010911f, 0.017584f, -0.009032f, -0.029180f, 0.007392f, 0.002603f, 0.030950f, -0.002889f, -0.012183f, 0.009672f, 0.003397f, 0.015597f, -0.000070f, -0.009361f, 0.000178f, 0.012747f, 0.009376f, 0.003258f, -0.003382f, 0.002499f, -0.005817f, -0.004742f, -0.014609f, 0.007418f, 0.006924f, -0.009839f, 0.004770f, 0.004518f, 0.002628f, -0.001558f, -0.004943f, 0.001404f, -0.014007f, 0.015611f, 0.037881f, 0.070725f, 0.111310f, 0.003843f, -0.044273f, -0.057148f, -0.013025f, 0.002793f, -0.013265f, 0.054310f, 0.040835f, 0.028414f, 0.047249f, 0.034540f, 0.027993f, 0.002359f, 0.022645f, -0.028300f, 0.040984f, 0.047358f, 0.003648f, 0.049252f, -0.019608f, 0.004511f, 0.011769f, -0.044956f, -0.030107f, -0.010263f, + -0.026585f, -0.031352f, -0.004263f, 0.050617f, -0.000219f, -0.009136f, 0.006700f, 0.011240f, -0.006332f, -0.067383f, -0.008850f, 0.018309f, -0.009568f, -0.020265f, 0.008837f, 0.026819f, 0.047088f, 0.012059f, 0.024225f, 0.033565f, 0.041111f, -0.055590f, -0.038496f, 0.022655f, -0.015874f, 0.072012f, -0.006964f, 0.062002f, -0.049080f, 0.029885f, 0.050526f, 0.002487f, 0.008609f, 0.030629f, -0.053695f, -0.024575f, 0.001892f, 0.031536f, 0.001356f, 0.036214f, 0.014927f, 0.013999f, 0.036775f, 0.013719f, -0.004325f, -0.014664f, -0.042392f, -0.009300f, 0.002981f, 0.012009f, 0.001356f, 0.001577f, 0.001452f, -0.022741f, 0.012661f, 0.008808f, 0.020757f, -0.006329f, 0.015737f, 0.025567f, 0.015301f, 0.006959f, 0.000415f, -0.002323f, 0.005752f, -0.007965f, 0.005600f, -0.007583f, 0.000748f, 0.005791f, 0.005573f, -0.006628f, 0.011687f, 0.011506f, 0.014113f, 0.002188f, 0.001577f, 0.006360f, -0.004392f, 0.009947f, -0.006434f, 0.010040f, 0.022005f, -0.001951f, -0.003640f, 0.002312f, 0.019196f, -0.010843f, 0.004893f, -0.001576f, -0.002292f, -0.002894f, 0.003052f, 0.005818f, 0.008902f, 0.007054f, + 0.006904f, 0.017992f, -0.011733f, 0.021226f, -0.009554f, 0.079981f, 0.027006f, 0.028464f, 0.058470f, -0.003674f, 0.012847f, 0.025783f, 0.037770f, -0.040800f, -0.032616f, -0.013529f, -0.035830f, -0.005803f, -0.048337f, 0.025733f, 0.039622f, 0.029105f, 0.039353f, -0.025546f, -0.013932f, 0.030552f, 0.023856f, -0.015794f, 0.039904f, 0.024220f, -0.008468f, -0.047527f, 0.027313f, 0.029846f, -0.023885f, -0.003081f, 0.014624f, 0.007489f, -0.038209f, 0.045257f, 0.012536f, 0.048538f, 0.026790f, 0.019348f, -0.025476f, 0.022926f, -0.013247f, 0.073680f, -0.057023f, 0.006840f, 0.022699f, -0.010426f, -0.036587f, 0.024266f, 0.023930f, -0.004064f, 0.023558f, -0.021801f, 0.060291f, -0.027150f, 0.016370f, 0.013463f, -0.037223f, -0.015949f, -0.051642f, 0.022715f, 0.015972f, -0.038436f, 0.036981f, 0.031524f, -0.026255f, 0.022731f, -0.002229f, 0.060964f, 0.020450f, -0.029838f, -0.021516f, -0.021246f, 0.019742f, -0.012209f, 0.016936f, -0.007327f, 0.004271f, 0.020661f, 0.013503f, 0.010496f, -0.019220f, 0.052400f, 0.006472f, -0.019828f, -0.028872f, 0.025480f, 0.013228f, 0.024058f, -0.012841f, 0.007261f, + 0.019569f, 0.039560f, 0.010717f, -0.006194f, 0.033427f, -0.008567f, -0.008739f, -0.004388f, 0.003944f, 0.009055f, -0.018797f, -0.016929f, 0.008181f, -0.014621f, -0.008284f, 0.002035f, -0.006374f, -0.001897f, -0.001775f, -0.014388f, 0.010890f, 0.005966f, -0.027372f, 0.006871f, -0.020271f, -0.013000f, -0.005940f, 0.010388f, 0.006262f, 0.019415f, 0.009236f, -0.000550f, 0.006250f, 0.007135f, 0.009019f, 0.000744f, 0.003084f, 0.004432f, 0.017231f, -0.005401f, -0.070886f, 0.030895f, -0.060537f, 0.061667f, 0.074182f, -0.004470f, 0.012587f, -0.061204f, -0.001017f, -0.014053f, 0.005740f, 0.034795f, 0.035678f, -0.011195f, 0.018288f, 0.028852f, 0.004210f, 0.011836f, 0.008030f, 0.011683f, -0.008121f, 0.042306f, -0.006408f, 0.009259f, -0.024294f, 0.047687f, 0.009998f, -0.004950f, -0.002008f, 0.042897f, 0.016175f, 0.020045f, 0.047478f, -0.011065f, -0.030001f, 0.058427f, -0.062897f, -0.027348f, -0.011233f, 0.013522f, 0.040985f, 0.009307f, -0.017383f, -0.017774f, -0.030562f, -0.000905f, -0.005880f, 0.011762f, 0.065965f, 0.064232f, 0.040605f, 0.057945f, -0.005652f, 0.087375f, -0.029601f, 0.024257f, + -0.021110f, 0.001943f, 0.027247f, -0.013597f, 0.002957f, -0.026379f, -0.034183f, 0.000508f, -0.021569f, 0.017850f, -0.029202f, 0.043215f, -0.032763f, -0.052423f, -0.021902f, -0.013465f, -0.004955f, 0.063045f, -0.038282f, -0.008779f, -0.005586f, -0.039574f, -0.010191f, 0.023070f, 0.049374f, -0.004345f, -0.002346f, 0.001949f, -0.016439f, -0.033981f, 0.001201f, -0.001437f, -0.005360f, -0.003482f, -0.000170f, -0.019595f, 0.015654f, -0.016761f, 0.019382f, -0.007689f, -0.015161f, -0.016372f, 0.003885f, 0.015639f, -0.011115f, -0.013998f, -0.005137f, 0.012997f, 0.014122f, -0.010213f, 0.006552f, 0.008723f, 0.004940f, 0.008706f, -0.008317f, -0.007237f, 0.003851f, 0.000994f, 0.008850f, -0.010933f, 0.007764f, 0.014468f, -0.000766f, -0.004528f, -0.007504f, 0.012707f, -0.025572f, -0.011823f, 0.025018f, -0.015020f, -0.001891f, -0.003810f, 0.004756f, -0.015421f, 0.011220f, -0.004768f, 0.023060f, 0.019995f, 0.000329f, -0.024842f, 0.109064f, 0.151431f, 0.046435f, 0.118050f, -0.025845f, -0.082081f, -0.057534f, -0.040204f, 0.019913f, 0.021723f, -0.027374f, -0.044076f, 0.038201f, 0.051404f, 0.030013f, 0.051286f, + 0.039531f, 0.009784f, 0.015717f, 0.007767f, -0.002587f, -0.033710f, 0.014865f, -0.039950f, 0.028146f, 0.000280f, -0.037440f, 0.043394f, 0.026205f, 0.020769f, 0.074879f, 0.046062f, -0.021517f, -0.014445f, -0.027007f, -0.031946f, -0.039184f, -0.015431f, 0.001500f, -0.030945f, -0.009658f, 0.064730f, 0.098113f, 0.072328f, 0.009845f, 0.049365f, 0.052589f, 0.080495f, 0.036801f, -0.042645f, -0.070089f, -0.043669f, -0.044746f, 0.026450f, 0.022150f, -0.095731f, -0.065725f, -0.016901f, 0.040301f, 0.087125f, -0.065315f, -0.002579f, -0.056700f, -0.007355f, 0.071147f, -0.039199f, 0.026764f, -0.056865f, -0.009349f, -0.016994f, 0.047951f, -0.053306f, -0.030456f, 0.000860f, 0.021125f, -0.043282f, 0.099286f, -0.023418f, -0.001645f, 0.056484f, -0.024918f, 0.042456f, -0.013643f, -0.035118f, -0.027376f, 0.016471f, 0.001520f, 0.014033f, 0.008699f, -0.031371f, 0.000745f, -0.013281f, 0.037936f, 0.022215f, 0.006588f, 0.020723f, 0.023578f, 0.001237f, -0.000448f, -0.007628f, -0.023887f, 0.048420f, -0.015168f, 0.010062f, 0.000221f, -0.028241f, 0.000954f, 0.002948f, -0.009067f, -0.018629f, -0.004217f, -0.011009f, + 0.002476f, 0.007053f, -0.008461f, 0.001461f, 0.032849f, 0.023409f, -0.004494f, -0.005529f, 0.031094f, -0.013352f, -0.004225f, -0.026714f, -0.038390f, -0.014567f, -0.010356f, -0.004543f, -0.010755f, -0.043290f, -0.083644f, 0.009779f, 0.046028f, -0.038964f, 0.071514f, -0.029075f, 0.028241f, -0.009996f, -0.083336f, -0.042956f, -0.004331f, -0.049289f, -0.112375f, -0.031891f, 0.040147f, 0.061720f, -0.030635f, -0.048460f, -0.100287f, -0.030217f, 0.029254f, -0.020378f, -0.029247f, -0.050198f, 0.011545f, -0.011736f, -0.008670f, -0.009850f, 0.019972f, 0.039652f, -0.031489f, 0.030528f, 0.026255f, -0.032124f, -0.091493f, 0.006923f, 0.007189f, 0.023022f, 0.010819f, 0.059174f, 0.005849f, -0.091296f, 0.000427f, -0.100492f, -0.000624f, 0.034126f, 0.041685f, -0.008323f, 0.005397f, 0.045859f, -0.024426f, -0.018285f, -0.031428f, 0.029465f, 0.021756f, -0.014997f, 0.035724f, -0.011793f, 0.014983f, 0.016063f, 0.058559f, 0.007190f, -0.020921f, -0.063437f, -0.021725f, 0.031936f, 0.028197f, 0.049206f, 0.072575f, 0.125095f, 0.062532f, 0.029576f, -0.032832f, -0.126970f, -0.034690f, -0.018931f, 0.096491f, -0.016937f, + 0.005945f, -0.001140f, -0.030532f, 0.003409f, 0.028254f, 0.012766f, -0.000724f, 0.000619f, 0.000474f, -0.000604f, 0.046785f, -0.017701f, -0.013985f, -0.016346f, 0.032455f, 0.011616f, 0.016415f, -0.013613f, -0.039946f, 0.012316f, 0.016888f, -0.019049f, -0.002678f, 0.009284f, -0.002282f, 0.002207f, -0.007068f, -0.058340f, -0.018804f, -0.005534f, 0.026394f, 0.040379f, 0.004969f, -0.035319f, -0.033460f, 0.014368f, 0.005656f, -0.004144f, -0.005591f, 0.000893f, -0.003453f, -0.002713f, 0.030812f, -0.034785f, 0.004430f, -0.030059f, 0.030855f, -0.017943f, 0.000837f, -0.042856f, -0.006351f, 0.027038f, -0.008560f, 0.014047f, -0.023764f, 0.006600f, -0.081541f, -0.024918f, 0.056450f, -0.028011f, -0.023546f, -0.006158f, -0.018429f, -0.065376f, -0.072725f, -0.106256f, -0.033685f, 0.000095f, -0.008397f, 0.069371f, 0.018933f, 0.090645f, 0.055799f, 0.028005f, -0.012868f, -0.033627f, -0.006448f, 0.127171f, 0.007703f, 0.036593f, 0.020473f, -0.016061f, 0.063203f, -0.026538f, 0.050973f, -0.055969f, -0.005767f, -0.040353f, 0.047953f, -0.067934f, -0.014510f, 0.020666f, 0.021151f, 0.021711f, -0.059528f, 0.042138f, + -0.068104f, 0.013727f, -0.033481f, -0.022838f, 0.067326f, 0.003937f, 0.004214f, 0.023197f, -0.025870f, -0.001563f, 0.017425f, -0.082433f, 0.001991f, 0.018955f, -0.012219f, 0.053028f, -0.023985f, -0.010424f, 0.089036f, -0.033857f, -0.074520f, 0.000155f, -0.028298f, 0.005978f, -0.005870f, -0.003939f, -0.059868f, 0.031844f, -0.009960f, -0.081345f, 0.048695f, -0.100739f, 0.019301f, -0.023111f, -0.040138f, -0.063685f, -0.008471f, 0.017208f, 0.029022f, 0.002584f, 0.023447f, 0.029358f, -0.035032f, 0.061345f, -0.014471f, 0.016387f, -0.001097f, 0.029272f, -0.001616f, -0.003325f, -0.010257f, 0.017304f, -0.036955f, -0.004750f, 0.011711f, 0.007918f, -0.014547f, -0.000253f, -0.016252f, -0.021254f, 0.010634f, 0.008675f, 0.015845f, 0.010324f, -0.004937f, 0.012447f, 0.036181f, -0.018074f, -0.019295f, 0.006340f, -0.002094f, 0.007118f, 0.026749f, -0.003898f, 0.014431f, 0.013758f, 0.013664f, -0.018408f, -0.022353f, -0.005483f, -0.002098f, -0.023123f, -0.001644f, -0.004610f, 0.009438f, -0.025257f, 0.007226f, -0.035250f, -0.124304f, -0.127739f, -0.109051f, -0.054984f, 0.225378f, 0.070572f, -0.028198f, -0.029432f, + -0.111598f, -0.236249f, -0.026702f, 0.063381f, 0.079106f, 0.033935f, -0.036458f, -0.027314f, -0.069745f, -0.076792f, 0.057508f, -0.055369f, 0.141988f, 0.106417f, -0.165964f, 0.053441f, 0.021583f, -0.034941f, 0.012676f, 0.118821f, 0.016819f, 0.081896f, 0.162707f, -0.035717f, -0.134042f, 0.006025f, -0.023072f, -0.124957f, -0.034271f, 0.059978f, -0.005763f, 0.073886f, 0.119515f, 0.010424f, -0.104142f, -0.203613f, -0.174875f, -0.156344f, -0.016703f, 0.150926f, 0.042801f, 0.040055f, 0.022427f, -0.041409f, -0.204126f, -0.127825f, -0.065605f, -0.025162f, 0.012184f, 0.045751f, 0.044426f, 0.057170f, 0.058591f, 0.072924f, -0.088135f, -0.031938f, -0.072227f, -0.006428f, -0.078970f, 0.048600f, 0.048557f, 0.099868f, 0.110957f, 0.052831f, 0.001391f, -0.029986f, -0.020832f, -0.137472f, -0.109458f, 0.095551f, 0.149704f, 0.101832f, 0.119574f, -0.029152f, -0.053789f, -0.108854f, -0.062035f, 0.031733f, 0.000016f, 0.007092f, 0.033471f, 0.010986f, 0.008287f, -0.026635f, -0.035114f, -0.017598f, -0.026575f, 0.000644f, 0.026230f, 0.007179f, 0.010041f, -0.006358f, 0.015221f, -0.029018f, 0.019026f, -0.008884f, + -0.026876f, -0.026472f, -0.008120f, -0.043818f, -0.013605f, -0.026897f, 0.027388f, 0.030873f, 0.014866f, 0.011785f, -0.028568f, -0.058433f, -0.057789f, 0.015058f, -0.005617f, 0.025931f, 0.022823f, 0.012044f, -0.042164f, -0.021570f, -0.040155f, -0.061810f, 0.018293f, 0.042728f, -0.016524f, -0.226811f, -0.253925f, -0.172748f, -0.177688f, -0.047666f, 0.198477f, 0.133598f, 0.214166f, 0.238583f, 0.362532f, 0.240684f, 0.249076f, 0.160618f, -0.012691f, -0.179658f, -0.310446f, -0.366586f, -0.318307f, -0.251108f, -0.181837f, -0.044220f, -0.009637f, -0.026552f, 0.008794f, 0.078524f, 0.129436f, 0.179843f, 0.156214f, 0.213212f, 0.205830f, 0.266247f, 0.243377f, 0.068187f, 0.163206f, -0.035826f, 0.044302f, 0.032683f, 0.008786f, -0.022949f, -0.238114f, -0.285569f, -0.365186f, -0.428101f, -0.389447f, -0.216485f, -0.192638f, -0.158356f, -0.198510f, -0.229421f, -0.049623f, 0.055770f, 0.143328f, 0.210521f, 0.304611f, 0.364287f, 0.467479f, 0.617345f, 0.599182f, 0.455223f, 0.368984f, 0.307287f, 0.162096f, 0.258016f, -0.105338f, -0.210895f, -0.504688f, -0.577491f, -0.718246f, -0.689687f, -0.631185f, -0.597784f, + -0.577846f, -0.355669f, -0.220874f, -0.120086f, 0.321649f, 0.328123f, 0.501281f, 0.644527f, 0.558311f, 0.504751f, 0.510096f, 0.401110f, 0.305293f, 0.167904f, 0.021406f, -0.002726f, -0.095402f, -0.115352f, -0.167769f, -0.216601f, -0.298028f, -0.321519f, -0.293372f, -0.337408f, -0.261499f, -0.239500f, -0.226790f, -0.198609f, -0.103268f, -0.020458f, 0.104655f, 0.217388f, 0.203219f, 0.317900f, 0.350543f, 0.387434f, 0.456530f, 0.369958f, 0.215082f, 0.107703f, -0.066644f, -0.168663f, -0.169670f, -0.326170f, -0.303126f, -0.413731f, -0.330464f, -0.342958f, -0.221335f, -0.230397f, -0.135825f, -0.017401f, 0.115086f, 0.174568f, 0.306778f, 0.358350f, 0.346615f, 0.337822f, 0.327954f, 0.252898f, 0.088927f, -0.058198f, -0.084830f, -0.109163f, -0.121794f, -0.136902f, -0.163123f, -0.150598f, -0.112571f, -0.120995f, -0.110585f, -0.095146f, -0.069474f, -0.030835f, -0.022092f, -0.015661f, 0.003355f, 0.020054f, 0.012604f, 0.018728f, 0.047881f, 0.057591f, 0.051324f, 0.034162f, 0.023304f, 0.017519f, 0.016969f} + }, + { + {0.024972f, 0.002931f, -0.010883f, 0.003851f, -0.006848f, 0.001910f, -0.004429f, -0.002761f, -0.005952f, 0.004374f, 0.007482f, 0.002236f, 0.002394f, -0.013486f, 0.002761f, 0.000334f, 0.004320f, 0.005279f, 0.002938f, 0.007899f, -0.001552f, -0.004266f, 0.000919f, 0.009422f, 0.000154f, -0.007043f, -0.000623f, 0.008038f, 0.004409f, 0.000957f, 0.000175f, 0.002337f, -0.000105f, 0.000710f, 0.001635f, -0.000148f, -0.002735f, -0.000230f, 0.000170f, 0.003223f, -0.004548f, -0.010827f, 0.008171f, 0.008166f, 0.007146f, 0.006705f, -0.000237f, 0.003708f, 0.006405f, -0.006522f, -0.001387f, -0.000065f, -0.008715f, 0.002102f, 0.000756f, 0.008096f, 0.000938f, 0.004587f, 0.000246f, 0.010153f, 0.005212f, -0.001360f, 0.007170f, 0.004379f, -0.002175f, -0.008091f, 0.002168f, 0.002252f, -0.002050f, 0.000726f, -0.004541f, -0.001108f, 0.004314f, 0.003036f, 0.003606f, 0.008393f, -0.001254f, -0.002499f, 0.001253f, 0.005037f, 0.011492f, -0.006573f, 0.003155f, 0.003186f, 0.003437f, -0.000230f, -0.000639f, 0.003625f, -0.001835f, 0.000207f, 0.001793f, -0.002029f, -0.000243f, 0.000434f, 0.000724f, -0.001286f, + -0.001981f, 0.001440f, -0.000387f, 0.000372f, -0.000642f, 0.002190f, -0.000133f, 0.002585f, -0.000459f, 0.021112f, -0.014079f, 0.004774f, 0.011894f, 0.002793f, 0.008390f, 0.010151f, -0.009188f, 0.001950f, -0.000818f, 0.003958f, -0.011654f, -0.009258f, -0.001703f, 0.009093f, 0.012335f, -0.004707f, -0.004049f, 0.005911f, -0.009966f, -0.013357f, -0.002439f, -0.015711f, 0.005412f, 0.005222f, 0.001454f, -0.009761f, -0.009906f, 0.003537f, -0.005753f, 0.001346f, -0.000262f, 0.010360f, 0.010967f, 0.009876f, -0.001574f, 0.006920f, -0.010788f, 0.004708f, -0.006348f, -0.000589f, 0.000606f, 0.008449f, -0.009092f, -0.008109f, 0.000095f, 0.011113f, 0.004617f, 0.004337f, -0.006700f, 0.003759f, 0.002789f, -0.003286f, -0.013862f, -0.002263f, -0.004680f, -0.006116f, -0.005463f, 0.006360f, -0.005813f, -0.001903f, 0.001483f, 0.003943f, 0.010014f, -0.003840f, -0.000200f, -0.007544f, -0.003610f, 0.001543f, -0.010391f, -0.000664f, 0.002888f, 0.007116f, -0.002225f, -0.005428f, -0.002691f, -0.010880f, 0.005185f, 0.003163f, 0.000675f, -0.000908f, -0.009339f, 0.003840f, 0.000825f, -0.003369f, 0.003463f, -0.001362f, + 0.000882f, 0.003086f, 0.000360f, 0.000618f, 0.003674f, 0.001587f, 0.000803f, 0.000068f, 0.002959f, 0.001041f, -0.000490f, 0.001168f, 0.001761f, -0.007454f, -0.013502f, -0.003372f, 0.002316f, -0.004170f, -0.006838f, -0.003794f, -0.013460f, -0.007585f, 0.014212f, -0.000580f, -0.006312f, 0.007530f, -0.011400f, -0.002620f, -0.014217f, -0.002964f, -0.011206f, -0.005866f, 0.013144f, 0.000679f, -0.002689f, -0.014853f, -0.009268f, -0.003361f, -0.006371f, 0.002500f, -0.007914f, 0.000762f, 0.004904f, 0.015723f, 0.007707f, 0.005890f, 0.006803f, 0.012726f, -0.010713f, -0.000136f, -0.003216f, -0.008262f, 0.003397f, -0.001698f, -0.003222f, -0.008647f, 0.004496f, 0.009069f, 0.000945f, -0.006604f, -0.004232f, 0.023231f, 0.000094f, -0.006687f, -0.009306f, -0.013944f, -0.018575f, -0.002326f, -0.009633f, 0.002223f, -0.001889f, 0.005182f, 0.000963f, 0.002503f, -0.008536f, 0.001270f, 0.001394f, 0.011240f, 0.003799f, -0.008418f, 0.000471f, -0.002622f, -0.002500f, -0.002011f, 0.004019f, 0.006025f, 0.005904f, -0.005514f, -0.005366f, 0.003380f, 0.001606f, 0.002210f, 0.002432f, -0.002147f, -0.008238f, -0.009676f, + -0.001144f, 0.001743f, -0.002309f, 0.001005f, 0.000067f, -0.001315f, -0.002040f, -0.003034f, -0.001178f, -0.000584f, -0.001822f, -0.003371f, 0.000286f, 0.001097f, -0.001823f, 0.000639f, -0.001604f, 0.000317f, -0.002007f, -0.001007f, 0.000396f, 0.000527f, -0.002419f, 0.000359f, -0.000921f, -0.004349f, 0.000451f, -0.001530f, 0.002442f, -0.032469f, 0.012862f, -0.005802f, 0.005441f, -0.013433f, -0.005403f, -0.010516f, -0.009615f, 0.000661f, -0.003021f, -0.006587f, 0.016554f, 0.004295f, -0.001524f, -0.010028f, -0.003163f, 0.004660f, -0.011483f, -0.006079f, -0.010936f, -0.006086f, 0.015823f, 0.001547f, 0.010554f, -0.001002f, -0.000097f, -0.002649f, 0.002998f, 0.002929f, -0.008380f, 0.000111f, 0.002521f, 0.004737f, 0.017167f, -0.008963f, -0.010392f, -0.002050f, 0.018987f, 0.005981f, 0.020206f, 0.001795f, 0.001865f, -0.003562f, 0.009982f, -0.001724f, 0.014715f, -0.001486f, -0.001710f, -0.002635f, -0.006120f, 0.006264f, 0.001899f, -0.005238f, 0.004278f, 0.005554f, 0.010215f, -0.005891f, -0.000517f, -0.001819f, 0.009097f, -0.003704f, -0.001535f, -0.003410f, -0.002330f, 0.002206f, -0.002982f, 0.001074f, + 0.001534f, -0.002206f, 0.002249f, -0.015053f, 0.001441f, 0.009812f, 0.003433f, 0.013136f, 0.001061f, 0.001413f, 0.003155f, 0.008378f, 0.013379f, -0.008832f, 0.001280f, -0.000675f, 0.003155f, -0.000396f, -0.000340f, 0.004035f, 0.008672f, 0.003364f, 0.004251f, 0.000494f, -0.001514f, -0.002233f, 0.001170f, 0.004427f, -0.001549f, 0.002029f, 0.002002f, 0.002113f, -0.000091f, 0.000933f, 0.003682f, -0.000612f, 0.000963f, -0.000105f, 0.004249f, 0.002519f, -0.001390f, -0.000212f, 0.004571f, 0.002385f, -0.001386f, 0.003408f, 0.001861f, -0.006951f, -0.003430f, -0.000148f, -0.016054f, -0.002683f, 0.000151f, -0.007991f, -0.028413f, -0.006890f, -0.006127f, -0.012382f, -0.002416f, -0.003185f, 0.017793f, -0.006173f, 0.013457f, 0.006303f, 0.009707f, -0.018270f, -0.008208f, -0.018462f, -0.017151f, -0.000015f, 0.003229f, 0.010740f, -0.005179f, -0.008072f, -0.004961f, -0.012487f, 0.002673f, 0.005680f, 0.006538f, 0.004023f, -0.003783f, 0.004649f, -0.008329f, 0.000895f, -0.015025f, 0.005422f, -0.003873f, 0.002053f, 0.003314f, 0.005609f, 0.005994f, -0.005748f, 0.000229f, 0.014549f, -0.007798f, 0.007048f, + 0.007407f, -0.000491f, 0.004437f, 0.007153f, -0.002952f, 0.002812f, 0.007058f, 0.000378f, 0.012444f, -0.006525f, -0.008609f, -0.004178f, 0.004071f, -0.000046f, -0.016536f, -0.008403f, -0.018321f, -0.019958f, -0.003396f, 0.005384f, -0.016253f, 0.007235f, -0.002638f, -0.000301f, -0.005564f, 0.005432f, -0.009669f, -0.001562f, -0.003378f, -0.013664f, -0.012031f, -0.004002f, 0.007148f, 0.000215f, 0.006130f, -0.002595f, 0.003968f, 0.003158f, -0.007552f, 0.000026f, -0.001496f, 0.004256f, -0.005091f, -0.008538f, -0.002785f, 0.001143f, -0.000006f, -0.003298f, 0.001451f, -0.002053f, -0.000774f, 0.001341f, -0.000453f, 0.000078f, -0.000175f, -0.001954f, -0.000423f, -0.001897f, -0.001258f, -0.001232f, -0.000043f, 0.000861f, 0.000104f, 0.002406f, 0.000932f, -0.001190f, 0.009174f, -0.026446f, -0.001275f, 0.008217f, 0.005186f, -0.014037f, -0.001709f, -0.008932f, 0.002299f, 0.002682f, 0.001920f, -0.015331f, -0.020522f, -0.013990f, 0.002404f, -0.011184f, 0.012242f, 0.003873f, -0.019759f, 0.014278f, 0.012523f, 0.009905f, 0.008876f, -0.009822f, 0.016099f, 0.004249f, -0.000115f, -0.006265f, 0.005445f, 0.009643f, + -0.008831f, -0.012980f, 0.004811f, -0.004898f, -0.016076f, -0.002149f, -0.015512f, -0.005660f, 0.028123f, -0.007501f, -0.012622f, -0.015670f, 0.000889f, 0.002561f, 0.011199f, 0.004454f, -0.010279f, 0.009365f, -0.001180f, -0.008089f, -0.010687f, -0.011370f, 0.017338f, 0.007749f, 0.010933f, -0.008253f, -0.011277f, 0.005098f, 0.002821f, -0.011628f, -0.000570f, -0.007131f, 0.011216f, -0.002162f, 0.001017f, -0.013741f, 0.008792f, 0.007342f, -0.007797f, -0.005034f, -0.004832f, 0.015549f, 0.000205f, 0.002280f, -0.004475f, 0.010654f, -0.010867f, -0.018516f, -0.008243f, 0.001600f, -0.003529f, 0.010080f, -0.002056f, -0.001173f, -0.010775f, -0.005708f, 0.004691f, 0.000605f, -0.007664f, -0.005032f, 0.006572f, 0.003520f, -0.002068f, 0.000268f, 0.000113f, -0.000020f, -0.002100f, 0.002824f, 0.001278f, 0.004401f, 0.000718f, 0.000744f, 0.000171f, 0.001890f, -0.000891f, 0.002739f, -0.003616f, 0.003763f, -0.014200f, -0.000624f, 0.003497f, -0.003567f, -0.011353f, -0.016845f, -0.013498f, 0.013573f, 0.001572f, 0.016641f, 0.019871f, 0.019293f, 0.002918f, 0.026486f, 0.006352f, -0.002953f, 0.012248f, 0.009345f, + 0.024481f, 0.003521f, 0.014075f, -0.019332f, 0.031805f, 0.023393f, 0.011311f, -0.009663f, -0.007656f, 0.011484f, 0.002655f, 0.008237f, -0.004726f, 0.013710f, -0.004092f, -0.003568f, 0.012345f, 0.010017f, -0.012554f, 0.008453f, -0.003351f, 0.013353f, 0.014524f, -0.028474f, -0.005237f, 0.017549f, 0.005308f, 0.009556f, 0.007543f, 0.017377f, -0.008377f, 0.006972f, 0.000347f, -0.014630f, -0.007112f, -0.000400f, 0.003076f, -0.021482f, -0.001792f, 0.013592f, -0.010704f, 0.022814f, 0.017129f, -0.006886f, -0.000165f, 0.004380f, 0.008596f, 0.013324f, -0.005117f, -0.004295f, 0.021624f, -0.005092f, -0.000399f, 0.009402f, 0.000490f, 0.012634f, 0.010103f, 0.004163f, 0.007000f, 0.007288f, 0.006993f, 0.003225f, 0.003005f, -0.002995f, -0.004982f, -0.002106f, -0.004532f, -0.000532f, -0.003147f, 0.002402f, 0.002219f, -0.004564f, -0.003553f, -0.000535f, 0.003546f, 0.007068f, 0.005960f, 0.003353f, 0.000740f, 0.003519f, -0.006005f, -0.002733f, -0.003191f, 0.001359f, -0.002291f, 0.003158f, -0.006988f, 0.000781f, -0.000045f, 0.006106f, 0.002518f, 0.000313f, 0.001139f, 0.006329f, 0.002023f, -0.005441f, + 0.001894f, -0.000492f, 0.001566f, 0.055313f, -0.028928f, 0.004033f, 0.022811f, -0.002193f, 0.000829f, 0.030188f, 0.033103f, 0.003930f, -0.002511f, 0.006963f, -0.001576f, 0.007480f, 0.009527f, -0.012098f, -0.003687f, 0.019540f, 0.017279f, -0.008065f, -0.015704f, -0.016826f, -0.017427f, -0.009433f, 0.014544f, -0.011179f, 0.006399f, 0.000769f, -0.020365f, -0.001387f, -0.013521f, -0.001646f, 0.005891f, 0.008934f, -0.026416f, -0.012456f, -0.021022f, -0.006568f, 0.031972f, 0.004574f, -0.002826f, 0.002808f, -0.002840f, 0.001545f, 0.009486f, 0.005500f, 0.015998f, -0.000890f, 0.011973f, 0.007059f, -0.011048f, 0.007012f, -0.016844f, 0.000441f, -0.016917f, -0.017751f, 0.006768f, -0.019528f, 0.008274f, -0.000268f, 0.010004f, 0.007854f, 0.007239f, -0.010448f, 0.012211f, -0.017718f, -0.000285f, -0.008189f, -0.002669f, 0.022143f, 0.000883f, 0.011059f, 0.011095f, -0.002306f, -0.004123f, 0.008531f, -0.018248f, 0.007297f, 0.017557f, -0.026053f, -0.019006f, -0.005357f, 0.013306f, -0.001275f, -0.015872f, 0.005981f, -0.002219f, 0.006801f, -0.005769f, 0.002050f, -0.003225f, 0.011418f, -0.002018f, 0.010494f, + 0.005963f, 0.009795f, 0.003545f, 0.002675f, -0.005046f, 0.006613f, 0.003112f, -0.000287f, 0.004065f, 0.003319f, -0.001766f, 0.004915f, 0.004063f, -0.002487f, -0.002451f, -0.008566f, -0.001604f, -0.004920f, 0.000002f, -0.000279f, -0.002700f, 0.004307f, -0.001314f, 0.002497f, 0.001122f, 0.008807f, -0.006822f, -0.033023f, 0.006147f, 0.007977f, -0.022306f, 0.010076f, -0.000147f, 0.023382f, -0.006169f, -0.011896f, 0.009901f, -0.028908f, -0.009937f, 0.024371f, 0.010701f, -0.014848f, -0.035690f, 0.015880f, -0.004959f, 0.008714f, -0.022766f, -0.030204f, -0.020474f, 0.026098f, 0.002153f, 0.014386f, -0.002497f, -0.013857f, -0.020510f, 0.009655f, -0.005459f, -0.017891f, -0.020868f, 0.001482f, -0.018625f, -0.014368f, -0.007805f, -0.003721f, -0.020179f, 0.011282f, 0.013525f, 0.018231f, -0.008717f, 0.016200f, -0.013057f, 0.025658f, -0.004758f, -0.001411f, 0.019600f, 0.010035f, -0.004827f, -0.013203f, -0.006572f, 0.018863f, 0.004394f, -0.014089f, 0.006738f, 0.020039f, 0.019008f, 0.008121f, -0.023180f, -0.025665f, -0.002269f, 0.004939f, 0.001618f, -0.018487f, 0.005553f, 0.020318f, 0.005920f, -0.008719f, + -0.032792f, 0.008732f, -0.014253f, -0.032052f, 0.001026f, 0.001670f, -0.018064f, 0.025978f, -0.001856f, -0.010742f, -0.035457f, -0.000259f, -0.010418f, -0.001688f, 0.013346f, -0.007984f, -0.013545f, -0.000950f, 0.003079f, 0.003177f, -0.010734f, -0.010945f, -0.010806f, 0.003961f, -0.009325f, 0.000553f, -0.001665f, 0.001492f, -0.002578f, 0.002587f, 0.004790f, 0.004205f, 0.005472f, 0.002665f, 0.009820f, 0.012427f, 0.000723f, 0.003633f, 0.002308f, -0.004891f, -0.001336f, -0.003992f, 0.001546f, 0.001333f, 0.000754f, -0.012136f, 0.001450f, -0.001062f, -0.004395f, -0.000611f, -0.003949f, 0.003616f, -0.004831f, -0.005124f, -0.040859f, 0.025658f, 0.019795f, 0.021792f, 0.003117f, 0.023031f, 0.002367f, -0.014719f, -0.017029f, 0.002617f, 0.018493f, -0.012694f, 0.004337f, -0.027511f, 0.018951f, 0.020098f, -0.010041f, -0.005635f, 0.004695f, 0.022008f, 0.016080f, -0.011277f, -0.010063f, 0.015076f, -0.017936f, 0.006309f, -0.024546f, 0.000052f, -0.007170f, -0.032933f, -0.033962f, 0.006711f, 0.019786f, 0.009220f, -0.028970f, -0.015586f, 0.022391f, -0.024552f, -0.010087f, 0.019883f, -0.005174f, 0.024831f, + -0.008529f, -0.017135f, 0.006669f, -0.024972f, 0.029071f, -0.002944f, 0.005296f, -0.013401f, -0.006691f, -0.001042f, -0.026933f, -0.016425f, 0.002361f, -0.004264f, 0.002889f, -0.008637f, -0.028591f, 0.005566f, -0.023639f, 0.010794f, -0.005818f, 0.017364f, -0.028529f, 0.013093f, 0.005102f, -0.008004f, 0.021593f, -0.002529f, -0.014523f, -0.028043f, -0.003615f, 0.006382f, -0.022580f, 0.017001f, -0.015197f, 0.011094f, -0.029791f, -0.030481f, 0.014765f, 0.011796f, -0.012075f, -0.009483f, 0.009921f, 0.006805f, -0.006340f, -0.005305f, -0.008079f, -0.010484f, -0.000803f, -0.016950f, -0.001640f, -0.002338f, 0.001452f, 0.004867f, -0.002999f, 0.004919f, -0.003129f, -0.000944f, -0.009077f, -0.004470f, -0.002346f, -0.001092f, 0.013809f, -0.003944f, -0.001751f, 0.007983f, -0.008362f, 0.006001f, 0.003568f, -0.003216f, -0.001904f, -0.008493f, -0.007777f, -0.000271f, -0.004480f, -0.005422f, 0.013371f, -0.012946f, 0.004463f, 0.015918f, 0.023467f, -0.006152f, 0.002621f, -0.008274f, -0.031290f, -0.006635f, -0.006689f, 0.013657f, -0.027489f, -0.000022f, -0.015858f, 0.017128f, -0.019233f, -0.026166f, 0.017448f, 0.008081f, + 0.011347f, 0.036201f, -0.005963f, -0.010284f, 0.010185f, -0.023062f, -0.027002f, 0.002307f, 0.034561f, 0.010604f, 0.019394f, -0.013704f, -0.016992f, -0.027396f, 0.005472f, 0.035204f, -0.015758f, 0.018452f, 0.004190f, 0.027402f, -0.041793f, -0.013168f, -0.000734f, 0.005019f, 0.023750f, 0.011591f, -0.031867f, -0.008500f, -0.014814f, -0.001138f, -0.036692f, -0.005634f, -0.013240f, 0.002664f, -0.019339f, -0.001146f, 0.004423f, -0.053359f, 0.006074f, -0.016631f, 0.003225f, -0.021029f, -0.001217f, 0.013308f, 0.006655f, -0.007048f, -0.006849f, -0.028055f, 0.028291f, 0.027416f, 0.008914f, 0.006962f, -0.024557f, 0.037543f, 0.012937f, 0.019440f, -0.007440f, -0.058653f, 0.022848f, -0.001833f, 0.044051f, 0.041648f, 0.012991f, -0.005134f, 0.018177f, 0.001163f, 0.015905f, 0.001063f, 0.001739f, -0.010205f, 0.004884f, -0.009300f, -0.005182f, -0.002436f, 0.019141f, -0.000054f, 0.001059f, 0.005168f, -0.001327f, -0.010160f, -0.005454f, 0.002007f, 0.007693f, -0.003435f, 0.003772f, -0.005854f, 0.008006f, -0.006131f, -0.009930f, -0.004738f, -0.001539f, 0.004847f, 0.001653f, -0.001839f, -0.001834f, -0.001882f, + 0.012570f, -0.002496f, 0.000600f, 0.002385f, 0.006199f, 0.050692f, 0.017896f, 0.034704f, -0.033612f, 0.007853f, 0.035386f, -0.010592f, -0.012707f, 0.005031f, -0.021828f, 0.016726f, 0.004264f, -0.025499f, -0.033398f, -0.002479f, 0.028391f, -0.000701f, -0.002250f, 0.018586f, -0.027668f, -0.007026f, -0.022770f, 0.012842f, -0.038828f, 0.000673f, -0.008274f, 0.014167f, -0.040554f, -0.028011f, -0.017701f, 0.011928f, 0.013098f, 0.009074f, -0.013131f, 0.009895f, -0.009760f, 0.012066f, -0.008000f, -0.003524f, -0.002759f, -0.011367f, 0.007758f, 0.017994f, 0.010731f, 0.018114f, -0.001453f, -0.017511f, 0.002536f, -0.017436f, 0.046569f, -0.011731f, -0.045737f, -0.014230f, 0.012548f, 0.039789f, -0.039758f, -0.016378f, -0.002557f, 0.025595f, 0.001674f, -0.056287f, -0.006878f, 0.026020f, 0.053714f, 0.002018f, 0.037406f, 0.053867f, -0.003969f, 0.017360f, 0.025476f, -0.007012f, 0.045919f, -0.006137f, 0.055444f, 0.008853f, -0.015185f, -0.048023f, -0.030061f, 0.000387f, 0.014491f, 0.006932f, -0.007275f, -0.009310f, -0.014893f, -0.020353f, -0.018073f, 0.022068f, 0.006486f, -0.000241f, -0.031555f, -0.003543f, + 0.001202f, -0.005741f, -0.017928f, 0.004715f, 0.009551f, -0.002696f, -0.009272f, -0.006769f, -0.017564f, -0.010606f, -0.005136f, 0.011113f, -0.002134f, -0.009562f, 0.009646f, -0.013748f, 0.009941f, 0.010016f, -0.008587f, -0.016669f, 0.015293f, 0.022678f, 0.003511f, 0.000713f, 0.001420f, 0.013220f, -0.003896f, -0.015767f, 0.001904f, 0.015318f, 0.012721f, -0.015657f, -0.013262f, 0.002455f, 0.002557f, 0.000237f, 0.004578f, -0.002441f, 0.021347f, 0.025832f, -0.044202f, -0.043002f, 0.011455f, -0.010000f, 0.001417f, -0.017088f, 0.040233f, -0.018002f, -0.011479f, 0.014005f, 0.010124f, 0.000430f, -0.018307f, -0.013403f, -0.022291f, 0.009052f, -0.001230f, -0.010769f, -0.001718f, 0.026757f, 0.040184f, -0.043343f, -0.002704f, -0.042281f, -0.004442f, -0.010898f, 0.042023f, -0.017674f, -0.016864f, -0.008109f, 0.025602f, 0.008522f, 0.007114f, 0.010750f, 0.010287f, -0.007536f, 0.000573f, -0.005449f, 0.006889f, -0.004964f, 0.039347f, -0.010186f, 0.010497f, 0.027702f, -0.014330f, -0.031694f, 0.007137f, 0.010866f, -0.011091f, -0.012124f, -0.002578f, 0.006578f, 0.020000f, -0.027139f, 0.036519f, 0.053642f, + 0.036084f, -0.014991f, -0.021605f, -0.049569f, -0.063951f, -0.023507f, -0.000162f, -0.011533f, -0.003162f, -0.007241f, 0.015395f, -0.001278f, -0.024646f, 0.013038f, -0.010865f, -0.002307f, 0.023588f, 0.039244f, -0.009505f, 0.011064f, -0.006804f, 0.002196f, 0.035779f, 0.018075f, 0.030616f, 0.031116f, -0.024731f, -0.007592f, -0.005588f, 0.000930f, -0.000467f, 0.011106f, 0.000869f, 0.006826f, 0.031402f, 0.001350f, 0.014733f, -0.006586f, -0.006754f, -0.012771f, -0.003816f, 0.001870f, 0.014377f, -0.003910f, -0.011735f, -0.005532f, 0.006994f, -0.004880f, -0.002522f, -0.003627f, 0.004476f, 0.001178f, -0.004457f, -0.002437f, 0.003354f, 0.001634f, 0.001797f, 0.018098f, -0.007223f, 0.000497f, 0.002516f, 0.000312f, -0.009777f, 0.004606f, 0.005810f, 0.011577f, -0.022757f, 0.043163f, 0.019447f, 0.024584f, 0.036869f, 0.056935f, -0.021791f, 0.029494f, -0.058497f, -0.007142f, -0.026208f, -0.057474f, 0.023350f, 0.013697f, 0.017585f, 0.007766f, 0.022870f, 0.007032f, -0.041355f, 0.034947f, 0.061670f, -0.009148f, -0.009856f, 0.015160f, 0.006177f, -0.012799f, -0.054875f, 0.004572f, 0.000246f, -0.004923f, + 0.000793f, 0.018760f, -0.039220f, 0.008574f, 0.011201f, -0.008006f, -0.022604f, -0.010971f, -0.025199f, 0.025780f, -0.056343f, -0.008105f, -0.036225f, 0.020215f, 0.008194f, 0.020499f, -0.007137f, 0.005635f, -0.014379f, 0.034582f, 0.010428f, 0.028402f, -0.025737f, 0.027919f, -0.000595f, -0.027192f, 0.056354f, -0.009261f, 0.006932f, 0.038109f, -0.036515f, 0.042708f, 0.025513f, -0.033342f, 0.014132f, -0.012701f, 0.018768f, -0.046219f, 0.033869f, 0.004873f, 0.011920f, -0.004268f, 0.010987f, -0.037518f, 0.023966f, 0.042769f, -0.084791f, 0.008747f, 0.081837f, -0.052763f, -0.016938f, 0.005858f, 0.039902f, 0.028363f, 0.009860f, 0.024792f, -0.011133f, 0.014983f, -0.006184f, -0.018013f, 0.008974f, -0.003964f, -0.003023f, 0.015469f, 0.022342f, -0.001830f, -0.008661f, -0.007361f, 0.006624f, 0.014325f, -0.018875f, -0.006994f, -0.012912f, -0.007958f, -0.016877f, 0.016985f, 0.022333f, -0.004619f, 0.010290f, -0.006262f, 0.004189f, 0.014296f, 0.016050f, -0.018374f, 0.001587f, 0.006932f, -0.009678f, 0.014775f, 0.000774f, -0.000198f, 0.013316f, 0.006896f, -0.015973f, -0.013281f, 0.004566f, 0.002233f, + -0.004810f, 0.002827f, 0.034248f, -0.020890f, -0.025137f, -0.000894f, -0.024072f, -0.010993f, -0.063433f, -0.054148f, -0.007581f, -0.031103f, -0.037341f, -0.026940f, 0.016401f, -0.009650f, -0.018974f, -0.030347f, 0.027813f, 0.001794f, -0.045851f, -0.007291f, -0.000402f, -0.021834f, -0.006990f, 0.018480f, 0.013188f, -0.003288f, 0.000018f, 0.000798f, -0.011627f, 0.009687f, 0.021188f, -0.008067f, -0.005250f, 0.032706f, -0.061719f, -0.010089f, 0.017165f, 0.065585f, -0.027345f, -0.017085f, -0.024655f, -0.033364f, 0.014362f, 0.069606f, 0.012767f, 0.043100f, 0.008739f, -0.007133f, -0.003814f, -0.005200f, -0.033786f, 0.007325f, 0.007429f, -0.027403f, 0.005885f, 0.054370f, -0.009006f, -0.016816f, 0.008942f, -0.019569f, -0.004666f, 0.047964f, 0.070768f, 0.019122f, 0.042409f, 0.049208f, -0.017661f, -0.020582f, 0.005420f, -0.016286f, 0.002607f, -0.048716f, -0.000629f, -0.037963f, 0.011344f, 0.007908f, 0.022923f, -0.039516f, -0.014966f, -0.013484f, -0.015684f, -0.012377f, -0.014061f, 0.022000f, 0.004533f, 0.028360f, -0.007413f, 0.010815f, 0.028140f, -0.005203f, 0.000788f, -0.004104f, -0.011476f, -0.009042f, + -0.001762f, -0.006827f, -0.010571f, -0.000162f, 0.004069f, -0.005338f, 0.001686f, 0.013266f, -0.013510f, -0.012064f, 0.000684f, 0.009958f, 0.004924f, -0.006351f, -0.019912f, -0.019114f, -0.002578f, 0.004533f, -0.011910f, -0.006466f, 0.003896f, -0.003918f, 0.001831f, 0.001452f, 0.013228f, 0.004577f, 0.003189f, -0.014688f, 0.016094f, -0.006802f, 0.050497f, 0.057030f, -0.022731f, 0.128893f, -0.017591f, 0.003058f, -0.023722f, 0.015273f, -0.009973f, 0.015075f, 0.033183f, 0.009482f, -0.030741f, -0.016645f, -0.032125f, -0.000427f, -0.021776f, -0.039821f, 0.005469f, 0.026016f, -0.004268f, 0.007648f, 0.012411f, 0.015301f, -0.000118f, -0.011413f, -0.014932f, 0.007756f, 0.000021f, -0.019800f, 0.007935f, 0.055469f, 0.039254f, 0.022351f, -0.046826f, 0.033820f, 0.026484f, -0.012277f, -0.014199f, -0.014262f, -0.018651f, -0.007982f, 0.015351f, -0.033891f, 0.003387f, 0.004335f, 0.020537f, 0.052878f, 0.010334f, 0.011038f, 0.003014f, -0.006221f, -0.010535f, 0.022986f, -0.013731f, 0.053393f, 0.017296f, -0.005059f, 0.023499f, 0.004530f, -0.035768f, -0.025750f, 0.030458f, 0.035027f, 0.013144f, -0.008649f, + 0.023396f, 0.025082f, 0.035774f, 0.069667f, 0.007642f, -0.019914f, -0.035593f, -0.023807f, 0.018262f, 0.004021f, 0.006046f, -0.003221f, 0.024669f, 0.002688f, -0.002775f, -0.032386f, -0.015798f, 0.033911f, 0.038149f, -0.013431f, -0.025559f, -0.030693f, -0.008697f, 0.016610f, 0.010628f, 0.003134f, -0.010181f, 0.002771f, 0.000233f, -0.013537f, 0.000379f, -0.030010f, -0.007570f, -0.001052f, 0.021873f, -0.003793f, -0.006267f, 0.000263f, 0.017803f, -0.010392f, 0.012845f, -0.006419f, -0.013844f, 0.012350f, 0.017615f, 0.011259f, 0.012555f, -0.001460f, 0.013427f, 0.024985f, 0.011172f, 0.010741f, 0.007451f, -0.009057f, -0.003821f, 0.000814f, -0.001879f, 0.007601f, -0.006665f, 0.012333f, 0.016104f, 0.009448f, 0.001507f, -0.011840f, 0.005081f, 0.004497f, 0.013078f, 0.020895f, -0.020001f, 0.092100f, -0.013689f, 0.003916f, 0.010214f, -0.006945f, -0.001275f, 0.023106f, -0.017118f, -0.020238f, -0.010620f, 0.029818f, 0.026627f, -0.071154f, 0.013745f, 0.012226f, 0.029138f, -0.018152f, -0.028076f, -0.026698f, 0.020387f, 0.018503f, -0.028685f, -0.015599f, -0.011763f, 0.048012f, 0.024132f, 0.013581f, + -0.009265f, -0.049499f, 0.014091f, 0.012633f, 0.025616f, -0.006000f, 0.013629f, -0.013609f, 0.004869f, -0.042947f, 0.017937f, 0.017814f, 0.000663f, -0.010503f, -0.027010f, -0.053426f, 0.034805f, -0.022382f, 0.017911f, 0.018562f, 0.030753f, 0.004514f, -0.032646f, 0.054623f, 0.010682f, -0.052915f, -0.024634f, 0.032077f, 0.007598f, 0.041923f, 0.017645f, 0.007154f, -0.037866f, -0.018432f, 0.021176f, -0.065602f, 0.070996f, -0.050375f, 0.002891f, 0.042913f, -0.011428f, 0.084764f, 0.012673f, 0.015655f, -0.030570f, 0.098709f, 0.010272f, 0.064356f, -0.043428f, -0.019060f, -0.013657f, 0.025365f, -0.002635f, -0.009560f, 0.044641f, -0.036449f, 0.043056f, -0.050645f, 0.011042f, 0.005686f, 0.009366f, -0.009394f, 0.037963f, -0.004040f, 0.019377f, 0.017571f, 0.025234f, 0.014862f, 0.007449f, 0.018189f, 0.019722f, 0.001260f, 0.007295f, 0.002761f, -0.013213f, 0.017442f, 0.000597f, 0.012184f, 0.023865f, 0.012531f, 0.001608f, -0.000598f, 0.018295f, 0.020194f, 0.009885f, -0.010534f, 0.039939f, -0.001187f, -0.007892f, -0.007152f, 0.025664f, -0.018813f, 0.008966f, -0.003679f, 0.013828f, 0.001476f, + 0.005780f, 0.008163f, -0.005392f, -0.003759f, 0.003963f, 0.008247f, 0.006671f, 0.008600f, 0.010322f, -0.011421f, 0.032305f, 0.075925f, 0.025210f, 0.047676f, 0.060780f, -0.002615f, 0.069701f, -0.053721f, -0.019234f, -0.020238f, -0.017755f, 0.007435f, 0.011392f, -0.004633f, -0.023713f, -0.046229f, 0.044336f, 0.041788f, 0.017769f, 0.037732f, -0.061890f, -0.053673f, 0.018106f, 0.025532f, -0.028589f, -0.040279f, 0.025727f, -0.012774f, -0.057667f, -0.021323f, -0.010945f, 0.028431f, -0.053008f, 0.029239f, 0.019996f, 0.023132f, -0.024760f, -0.001629f, -0.024485f, -0.010936f, -0.070607f, -0.017385f, 0.034337f, -0.112176f, -0.035415f, -0.004466f, -0.002428f, 0.003697f, -0.067301f, -0.016954f, -0.101397f, -0.008649f, 0.020146f, -0.029095f, -0.031659f, -0.013339f, 0.030628f, -0.010523f, -0.036491f, -0.041943f, -0.105784f, -0.037979f, 0.049672f, -0.047094f, -0.071159f, 0.059439f, -0.018625f, -0.080369f, 0.024353f, 0.072129f, -0.038580f, -0.017804f, 0.008883f, -0.052810f, 0.065328f, 0.028664f, 0.041869f, -0.022122f, -0.004491f, 0.021154f, 0.062237f, 0.028635f, 0.009933f, -0.020200f, -0.004191f, 0.070148f, + 0.007008f, 0.010650f, -0.005024f, -0.041880f, -0.018287f, 0.032741f, -0.000567f, 0.001718f, -0.006561f, -0.037480f, -0.002638f, 0.015661f, -0.022829f, 0.026907f, -0.035299f, -0.023189f, 0.007507f, -0.012887f, 0.018653f, 0.007039f, -0.032081f, 0.012816f, 0.016455f, 0.008268f, 0.006405f, -0.013586f, 0.007988f, -0.000809f, -0.007627f, -0.023410f, 0.011675f, 0.008799f, -0.002377f, 0.016757f, -0.025112f, 0.002315f, -0.024018f, 0.000092f, 0.006784f, -0.009197f, -0.003871f, -0.001824f, 0.009973f, 0.000780f, 0.088654f, 0.122201f, -0.018029f, -0.002833f, -0.046566f, -0.046869f, -0.081446f, 0.035856f, -0.013054f, 0.122054f, -0.024641f, -0.051502f, -0.072014f, 0.005115f, 0.023623f, -0.026090f, 0.023797f, 0.080087f, -0.030480f, -0.013266f, -0.054416f, -0.024328f, 0.054493f, 0.062634f, -0.061350f, -0.016820f, 0.032758f, -0.012633f, 0.014973f, -0.017790f, 0.078678f, 0.063168f, 0.133506f, 0.044016f, 0.059526f, -0.025328f, 0.042926f, 0.090462f, 0.029960f, -0.004954f, 0.021772f, -0.002259f, 0.059316f, 0.031344f, 0.086109f, 0.024786f, -0.085149f, 0.030968f, 0.034063f, 0.071601f, -0.038794f, -0.032994f, + 0.041912f, 0.045262f, -0.020339f, 0.071966f, -0.024035f, 0.029950f, -0.077390f, 0.050289f, -0.017456f, 0.027913f, 0.028787f, 0.063183f, 0.055029f, -0.042300f, -0.043990f, -0.013711f, 0.066410f, 0.066926f, -0.024005f, -0.036008f, -0.069554f, -0.007297f, 0.050641f, 0.057046f, 0.038497f, -0.015747f, -0.045668f, -0.043420f, -0.006551f, 0.031373f, -0.029449f, 0.043458f, 0.011677f, 0.030551f, 0.006445f, -0.014568f, 0.035049f, 0.022067f, -0.003918f, -0.013763f, 0.011821f, 0.029433f, -0.040506f, 0.017429f, 0.022115f, 0.028681f, 0.016628f, 0.040287f, -0.011846f, 0.014573f, -0.017328f, -0.026666f, 0.017032f, 0.033976f, 0.030689f, 0.045413f, 0.000864f, -0.000092f, 0.014809f, 0.012405f, 0.081451f, 0.015813f, -0.002050f, -0.034608f, 0.001540f, 0.051615f, 0.027408f, 0.039933f, 0.024427f, -0.000818f, 0.002086f, -0.008607f, 0.001047f, 0.049535f, 0.042293f, 0.004472f, 0.016683f, -0.004852f, -0.006727f, 0.001886f, 0.022200f, 0.015825f, 0.015201f, -0.010682f, -0.009041f, 0.011853f, 0.003049f, -0.029611f, -0.098279f, 0.007009f, 0.150961f, 0.090199f, -0.020905f, -0.220947f, -0.031464f, -0.022370f, + 0.017440f, -0.025090f, 0.004342f, 0.023109f, -0.008285f, 0.010001f, -0.047925f, 0.030754f, 0.037126f, 0.068352f, -0.049218f, -0.062382f, 0.064756f, 0.102284f, 0.025971f, -0.045435f, -0.060349f, -0.013000f, 0.015415f, 0.005732f, 0.016373f, 0.000389f, 0.022714f, 0.009067f, 0.066973f, -0.021327f, -0.091484f, -0.039740f, 0.029701f, 0.010789f, -0.031497f, -0.040140f, 0.005558f, 0.043239f, 0.077023f, 0.070467f, -0.001286f, 0.001172f, 0.029138f, -0.027260f, -0.078901f, 0.024036f, -0.049125f, 0.095006f, 0.104465f, -0.002131f, 0.029692f, 0.014882f, 0.021056f, -0.046104f, -0.006350f, 0.099054f, -0.037036f, 0.000882f, -0.134317f, -0.017923f, 0.015551f, 0.031104f, 0.029648f, 0.027833f, -0.032983f, -0.021000f, 0.061307f, 0.089178f, -0.015376f, -0.003907f, 0.009052f, 0.035873f, 0.043943f, -0.020298f, 0.015063f, -0.048622f, -0.056912f, 0.005813f, 0.016168f, 0.021171f, -0.006554f, -0.009040f, -0.010401f, -0.012410f, 0.039641f, -0.000303f, -0.006864f, -0.020691f, -0.001148f, 0.024124f, 0.022445f, -0.011828f, 0.030525f, 0.006787f, 0.046189f, 0.003674f, 0.008605f, 0.001409f, -0.015515f, -0.013798f, + -0.007491f, -0.010759f, -0.002562f, -0.013891f, -0.009055f, 0.003367f, 0.038543f, 0.042841f, 0.013335f, 0.022181f, 0.008979f, 0.007651f, 0.037715f, -0.026977f, 0.028779f, 0.009979f, 0.046830f, -0.012595f, 0.012666f, 0.008308f, -0.018200f, 0.014442f, -0.008345f, 0.014736f, -0.004637f, 0.025302f, -0.008404f, -0.016177f, 0.013276f, 0.005291f, 0.006801f, 0.009794f, 0.006991f, 0.017832f, 0.004114f, 0.006455f, 0.003914f, 0.006033f, 0.006931f, 0.005095f, 0.012422f, 0.008186f, 0.001885f, 0.001203f, 0.003176f, 0.011065f, 0.008959f, 0.008250f, 0.010203f, -0.011708f, -0.099537f, -0.041292f, 0.079254f, 0.087399f, 0.082958f, 0.112603f, 0.019165f, -0.048706f, -0.149012f, -0.113107f, -0.021503f, 0.031382f, 0.094068f, 0.102457f, 0.048274f, 0.002160f, -0.050205f, -0.043356f, -0.019455f, 0.031923f, 0.087757f, 0.049907f, -0.011891f, 0.003112f, -0.007472f, -0.048427f, -0.066452f, -0.054222f, 0.009841f, 0.080990f, 0.060568f, 0.121831f, 0.078942f, 0.078440f, 0.110114f, -0.032230f, -0.076679f, -0.086878f, -0.115681f, -0.142049f, -0.053985f, -0.016789f, 0.041781f, 0.078158f, 0.112506f, 0.105497f, + 0.085321f, 0.054235f, 0.108037f, -0.021234f, -0.069036f, -0.003229f, -0.017939f, 0.028700f, 0.032341f, 0.129500f, 0.112582f, -0.042046f, 0.019774f, -0.029442f, -0.087113f, -0.025534f, 0.022454f, -0.052103f, 0.079933f, -0.032205f, 0.026190f, 0.006888f, -0.009762f, 0.069671f, 0.096154f, 0.077192f, 0.053680f, -0.040157f, -0.098463f, -0.111307f, 0.031156f, -0.046900f, 0.007930f, -0.005314f, 0.062199f, 0.009871f, 0.034906f, -0.029991f, -0.069245f, -0.063579f, -0.100578f, -0.086806f, 0.036201f, 0.020825f, 0.049609f, 0.075783f, 0.058224f, 0.002314f, -0.045330f, -0.071861f, -0.098284f, -0.053324f, -0.025668f, -0.035856f, 0.015343f, -0.013002f, -0.012095f, -0.011521f, -0.030408f, 0.000314f, -0.013952f, -0.019649f, -0.024327f, -0.014940f, -0.003968f, 0.015616f, -0.029280f, -0.017780f, 0.041552f, 0.004159f, -0.222520f, -0.234203f, -0.243610f, -0.249698f, -0.329950f, -0.035806f, -0.093332f, -0.022576f, 0.030829f, 0.150327f, 0.170836f, 0.176647f, 0.247251f, 0.341804f, 0.327505f, 0.321876f, 0.258607f, 0.186807f, 0.135746f, 0.040840f, -0.155939f, -0.074797f, -0.092124f, -0.057017f, -0.187280f, -0.031032f, + -0.077504f, -0.085344f, -0.154964f, -0.119058f, -0.121147f, -0.109721f, -0.114639f, -0.201457f, -0.178411f, -0.105239f, -0.095172f, -0.119540f, -0.165661f, -0.025115f, -0.145057f, -0.274953f, -0.235609f, -0.206825f, -0.109020f, -0.140481f, -0.025059f, -0.284584f, -0.126004f, -0.126006f, -0.058218f, -0.042402f, -0.146532f, 0.006593f, -0.146808f, -0.017636f, 0.022937f, 0.068930f, 0.006222f, 0.070844f, 0.105664f, 0.166155f, 0.177056f, 0.243618f, 0.159170f, 0.382231f, 0.241524f, 0.444894f, 0.302449f, 0.443221f, 0.514019f, 0.610416f, 0.501359f, 0.504827f, 0.568877f, 0.510524f, 0.518411f, 0.504615f, 0.437480f, 0.253233f, 0.202313f, 0.142871f, 0.104158f, 0.121982f, 0.181857f, 0.100378f, -0.036819f, -0.063084f, -0.072908f, -0.125213f, -0.162633f, -0.198217f, -0.182622f, -0.300092f, -0.290791f, -0.299418f, -0.362835f, -0.319416f, -0.403046f, -0.356776f, -0.418772f, -0.429987f, -0.405158f, -0.446967f, -0.404279f, -0.451332f, -0.358307f, -0.350959f, -0.290963f, -0.310434f, -0.320107f, -0.224889f, -0.201470f, -0.153801f, -0.078341f, 0.026640f, 0.085905f, 0.075473f, 0.096153f, 0.086246f, 0.097203f, 0.111847f, + 0.159486f, 0.191824f, 0.173252f, 0.156089f, 0.190557f, 0.177570f, 0.219173f, 0.199804f, 0.145945f, 0.133140f, 0.115604f, 0.102153f, 0.064259f, 0.049145f, 0.045518f, 0.029038f, 0.031555f, 0.013021f, 0.020615f, 0.018404f, 0.012527f, 0.018469f, 0.013294f, 0.008353f, 0.003073f, -0.006444f, -0.000925f, 0.000163f, -0.019177f, -0.029965f, -0.017185f, -0.013525f, -0.012390f, -0.008534f, -0.006057f, -0.005530f}, + {0.031749f, 0.004210f, -0.010404f, 0.004958f, 0.005622f, 0.001958f, -0.013180f, 0.006046f, 0.009380f, -0.010065f, -0.003006f, -0.012336f, -0.002700f, -0.005230f, -0.004512f, -0.001759f, 0.000700f, -0.000408f, 0.001273f, 0.004464f, -0.005489f, 0.002483f, -0.012642f, 0.004378f, 0.007796f, 0.001677f, -0.003312f, -0.010243f, 0.006725f, -0.004488f, 0.010866f, 0.009277f, -0.000383f, -0.004288f, 0.008862f, 0.010333f, 0.008311f, 0.008408f, 0.002101f, -0.006413f, 0.002032f, 0.007954f, -0.003314f, -0.006702f, 0.006053f, 0.009586f, -0.004187f, 0.005014f, -0.010874f, -0.000881f, -0.009537f, 0.006535f, -0.012699f, -0.003417f, -0.002356f, 0.004369f, 0.006351f, 0.004507f, -0.000351f, -0.006723f, 0.000837f, -0.009307f, -0.006142f, 0.001722f, -0.001143f, -0.005605f, 0.003084f, 0.003174f, 0.000814f, 0.005900f, -0.005227f, 0.002548f, -0.007064f, -0.002793f, -0.002998f, 0.003914f, -0.003657f, -0.007475f, -0.003345f, -0.002776f, 0.010319f, 0.008875f, 0.002262f, -0.004690f, 0.000625f, -0.000534f, 0.001816f, 0.003572f, 0.000670f, 0.000215f, 0.000643f, -0.000132f, 0.000167f, -0.001311f, 0.001046f, -0.003932f, + 0.000202f, -0.000287f, 0.001643f, 0.000865f, -0.001201f, -0.001713f, 0.000376f, 0.000726f, 0.000770f, 0.018102f, -0.018241f, 0.000693f, 0.000324f, -0.004617f, -0.005473f, -0.005830f, 0.001891f, -0.010279f, -0.010139f, 0.001435f, 0.004928f, -0.000375f, 0.005841f, 0.004552f, -0.005573f, 0.002300f, -0.020006f, -0.004893f, -0.004469f, -0.004654f, -0.006304f, -0.006955f, -0.017631f, -0.013698f, 0.001886f, 0.004132f, -0.000942f, 0.009552f, 0.007642f, 0.003217f, -0.003391f, -0.001898f, 0.008952f, -0.003449f, 0.001117f, -0.001297f, -0.009386f, 0.003151f, -0.003136f, -0.006393f, -0.002463f, 0.007689f, 0.018570f, -0.007069f, 0.002084f, 0.004526f, -0.003420f, 0.005853f, 0.002625f, -0.006476f, 0.003795f, -0.015327f, -0.007087f, 0.000183f, 0.006288f, 0.009753f, -0.005957f, -0.002759f, -0.000652f, -0.022217f, 0.003813f, 0.011504f, 0.000636f, 0.001681f, 0.006304f, -0.003605f, 0.009832f, 0.013248f, -0.001658f, 0.003774f, 0.007972f, 0.007565f, 0.001518f, 0.000426f, -0.003674f, -0.005298f, -0.003300f, 0.002357f, -0.005037f, 0.011066f, 0.007445f, -0.000235f, -0.005385f, -0.002756f, 0.006385f, 0.007500f, + -0.003730f, 0.005823f, -0.003521f, 0.001592f, -0.003590f, -0.002175f, -0.002455f, 0.000709f, 0.000186f, 0.000441f, 0.000514f, -0.000402f, -0.001182f, -0.004793f, -0.015628f, 0.003616f, 0.000567f, -0.015116f, 0.002310f, 0.008467f, 0.012460f, 0.003200f, -0.008971f, 0.021124f, -0.002840f, -0.004163f, 0.009926f, -0.006139f, -0.005983f, 0.001016f, -0.007719f, 0.009415f, 0.009407f, -0.003809f, -0.014218f, -0.007024f, 0.007068f, -0.009151f, 0.020092f, 0.017343f, -0.013869f, -0.016964f, 0.000602f, 0.003173f, -0.016148f, -0.001057f, 0.006665f, 0.004527f, -0.007908f, -0.004597f, 0.018523f, -0.001967f, 0.012748f, -0.001266f, -0.004148f, -0.004308f, -0.009548f, 0.001662f, -0.001362f, 0.009997f, -0.008539f, 0.002314f, -0.002243f, 0.001858f, -0.005032f, -0.000660f, 0.008428f, 0.006704f, -0.010567f, 0.016455f, 0.001354f, -0.000074f, -0.000267f, -0.001507f, 0.004459f, -0.002267f, -0.014735f, -0.002090f, -0.007783f, 0.012832f, 0.005371f, 0.000336f, 0.015757f, -0.008718f, 0.010539f, 0.010370f, 0.000949f, -0.007668f, -0.001572f, -0.001631f, -0.000171f, -0.002181f, -0.003183f, 0.004361f, 0.004615f, -0.006964f, + 0.003337f, -0.000410f, 0.004884f, 0.004319f, -0.001431f, 0.000677f, -0.002164f, -0.003271f, 0.002331f, -0.003010f, -0.002546f, 0.001293f, 0.003301f, -0.003040f, -0.002272f, -0.003957f, -0.001703f, 0.002383f, -0.001516f, -0.000575f, 0.000043f, 0.001210f, -0.002199f, -0.001245f, 0.003045f, 0.001015f, -0.000654f, -0.000958f, -0.003438f, -0.037659f, 0.008639f, 0.002012f, 0.026825f, -0.001458f, 0.010777f, -0.014440f, 0.003102f, -0.010823f, -0.002594f, -0.005308f, -0.001710f, 0.004921f, -0.002906f, 0.004595f, 0.009040f, 0.006898f, 0.025470f, 0.017572f, -0.011569f, 0.005832f, -0.000624f, 0.004693f, 0.003003f, -0.003261f, -0.025313f, 0.006400f, -0.001296f, -0.000256f, 0.009604f, -0.001517f, -0.007063f, -0.004920f, -0.001198f, -0.007870f, -0.004228f, -0.020236f, -0.004748f, 0.000522f, -0.007147f, -0.001280f, 0.008381f, 0.011987f, -0.003883f, 0.014815f, -0.011094f, 0.002429f, 0.005062f, 0.001930f, -0.003444f, -0.007817f, 0.005518f, -0.001974f, 0.003397f, -0.005812f, -0.008256f, 0.001527f, 0.004801f, -0.008344f, 0.007942f, -0.005706f, 0.018919f, 0.020065f, -0.006109f, 0.007317f, 0.007705f, -0.001055f, + -0.002609f, -0.002709f, -0.024533f, 0.010238f, 0.009963f, 0.000289f, -0.004134f, -0.010258f, 0.001071f, -0.003021f, -0.012505f, -0.028012f, 0.001831f, -0.006955f, 0.007175f, -0.000015f, -0.000121f, -0.004691f, -0.003174f, -0.005286f, -0.000533f, 0.002857f, -0.003663f, 0.004250f, -0.004509f, -0.002622f, -0.001910f, -0.001134f, 0.002278f, 0.001888f, -0.001529f, 0.000865f, 0.000617f, 0.001521f, 0.002485f, 0.001916f, -0.001326f, -0.002985f, 0.002091f, -0.001269f, -0.002233f, 0.000800f, 0.000706f, -0.001325f, 0.001542f, 0.002519f, 0.000846f, -0.008060f, -0.012306f, 0.012284f, 0.006999f, -0.001070f, 0.014198f, -0.007612f, 0.012737f, -0.014344f, -0.013771f, 0.006707f, -0.021976f, -0.007783f, 0.005545f, 0.013382f, 0.017487f, -0.003050f, 0.013053f, -0.000451f, 0.012432f, 0.004599f, 0.002021f, -0.002043f, 0.000681f, 0.012408f, -0.005913f, -0.001303f, 0.002257f, 0.001079f, -0.012224f, -0.001519f, -0.006632f, 0.025277f, -0.012082f, -0.012242f, -0.002974f, 0.011915f, 0.011987f, 0.010297f, 0.013771f, -0.002381f, 0.002529f, -0.003052f, -0.006837f, 0.005216f, -0.000618f, -0.001300f, -0.007819f, 0.019828f, + 0.012223f, -0.006123f, 0.003776f, 0.005863f, -0.010458f, 0.002225f, 0.007703f, -0.001947f, 0.014867f, -0.006000f, -0.001932f, -0.016160f, -0.006101f, -0.013739f, 0.000611f, 0.018962f, -0.007464f, 0.005358f, 0.003245f, 0.000659f, -0.005178f, -0.001751f, 0.000165f, -0.004629f, 0.009099f, -0.009350f, -0.004416f, -0.000826f, 0.019984f, 0.003171f, -0.000125f, 0.006318f, -0.005448f, -0.014992f, 0.003713f, 0.001516f, -0.002395f, 0.001092f, 0.003677f, -0.000987f, 0.000751f, 0.007295f, 0.001373f, -0.000581f, 0.001726f, 0.000111f, -0.000985f, -0.001737f, 0.006758f, -0.000327f, 0.000558f, -0.006184f, 0.003744f, 0.000961f, 0.003727f, -0.000912f, -0.002557f, -0.000759f, 0.001886f, 0.003068f, 0.001970f, -0.005040f, 0.000234f, 0.003575f, -0.001121f, -0.006359f, -0.004122f, -0.035498f, 0.025750f, 0.002715f, -0.013058f, -0.031351f, -0.003120f, 0.000799f, -0.018548f, -0.001671f, 0.008641f, 0.007365f, 0.000681f, -0.005360f, 0.006841f, 0.022414f, 0.022737f, -0.009738f, -0.010687f, -0.024652f, 0.004929f, -0.004442f, 0.023951f, -0.009757f, -0.000529f, -0.005617f, 0.009015f, -0.002684f, -0.024550f, 0.008066f, + -0.001152f, -0.014546f, 0.000014f, 0.002302f, -0.001993f, -0.002475f, -0.010091f, -0.014046f, 0.008541f, 0.002118f, 0.011170f, -0.009704f, 0.018801f, 0.008929f, -0.003884f, -0.016651f, -0.003308f, 0.006028f, 0.018387f, 0.005711f, -0.010400f, -0.004735f, 0.008544f, 0.005525f, -0.005342f, -0.002599f, 0.009006f, 0.007386f, 0.009507f, 0.018230f, 0.020334f, 0.009948f, 0.010826f, 0.012513f, -0.007323f, 0.001827f, -0.013463f, 0.013474f, 0.002120f, 0.006816f, -0.009618f, -0.014938f, 0.003415f, -0.019100f, -0.006890f, -0.008321f, 0.014031f, 0.014725f, 0.015395f, 0.004064f, -0.004367f, -0.004862f, 0.014381f, 0.002943f, -0.002014f, 0.003640f, -0.004534f, 0.009205f, 0.000475f, -0.000120f, 0.003017f, 0.003790f, -0.001432f, 0.007549f, -0.000006f, 0.001294f, -0.003615f, -0.002156f, 0.002074f, 0.005895f, -0.000362f, 0.002150f, 0.003402f, 0.001979f, 0.001133f, -0.001753f, 0.002812f, -0.002333f, -0.012769f, -0.000758f, 0.023889f, 0.014688f, 0.020196f, 0.003844f, -0.022100f, -0.007284f, 0.023456f, -0.006765f, -0.014864f, -0.015482f, -0.015248f, -0.016128f, 0.008867f, 0.009015f, 0.005783f, 0.005302f, + 0.005470f, 0.022572f, -0.002794f, 0.009798f, -0.019389f, -0.021810f, 0.014603f, -0.000774f, -0.011910f, 0.000856f, -0.030391f, -0.009920f, -0.010243f, 0.003735f, -0.001075f, -0.002803f, -0.021384f, -0.013991f, 0.002364f, 0.014766f, 0.023981f, -0.009512f, -0.009421f, 0.012786f, -0.016483f, -0.001179f, -0.000852f, 0.005517f, 0.010485f, 0.008566f, 0.016617f, -0.008923f, 0.024096f, 0.011377f, -0.026064f, 0.013020f, -0.014494f, -0.017275f, -0.014387f, -0.020898f, 0.018905f, 0.004450f, -0.022295f, 0.002553f, 0.004686f, 0.002071f, 0.003514f, -0.004080f, 0.015674f, -0.009099f, 0.012045f, -0.019380f, 0.014686f, -0.009831f, -0.008978f, 0.001921f, 0.006508f, -0.000751f, 0.010605f, 0.030437f, -0.002573f, -0.016315f, 0.009625f, 0.019949f, 0.001575f, -0.002163f, -0.015829f, -0.006893f, 0.014672f, -0.002492f, -0.001007f, 0.000506f, 0.002950f, -0.004114f, -0.002380f, -0.000359f, 0.004320f, -0.002506f, -0.000536f, -0.002880f, 0.008270f, -0.006067f, 0.001264f, -0.005702f, -0.007148f, 0.001884f, 0.002286f, -0.002227f, 0.001100f, -0.002066f, -0.001577f, -0.000448f, -0.000818f, -0.000172f, -0.003034f, -0.001781f, + 0.008490f, -0.000438f, 0.000049f, 0.049526f, -0.044644f, 0.020649f, 0.021546f, -0.020066f, -0.003621f, 0.029629f, 0.010743f, 0.018818f, 0.005628f, -0.006519f, 0.044573f, -0.001790f, -0.008339f, -0.000048f, 0.000152f, 0.021395f, 0.033530f, 0.012694f, -0.000229f, 0.000674f, 0.005035f, 0.011520f, -0.000158f, 0.006113f, -0.023432f, 0.011095f, 0.018270f, -0.003831f, 0.007454f, 0.000002f, 0.003397f, -0.015107f, -0.011784f, 0.000851f, -0.000515f, 0.020689f, 0.010224f, 0.008558f, -0.008710f, -0.010716f, -0.010700f, 0.011909f, 0.017314f, 0.000146f, -0.005561f, 0.033807f, 0.017516f, 0.022591f, -0.012171f, -0.025225f, -0.004798f, -0.026416f, -0.017374f, -0.007959f, -0.011009f, -0.001518f, 0.019780f, -0.006257f, 0.000769f, -0.016176f, -0.017265f, 0.019702f, -0.000988f, 0.009190f, 0.009845f, -0.010278f, 0.018936f, 0.004929f, 0.001704f, -0.006577f, -0.012669f, 0.014859f, -0.004546f, -0.026310f, 0.015217f, 0.012853f, 0.015911f, 0.007173f, -0.018529f, -0.003886f, 0.001734f, -0.019351f, 0.011065f, 0.011100f, -0.001805f, 0.008382f, 0.007012f, 0.007492f, -0.001811f, 0.011841f, 0.001766f, -0.000467f, + -0.006001f, 0.002942f, -0.000117f, 0.009433f, 0.002036f, -0.000263f, 0.001931f, -0.000091f, 0.006940f, -0.002953f, -0.000855f, -0.004598f, 0.002357f, -0.001226f, -0.003602f, 0.000784f, 0.000970f, -0.001369f, 0.001073f, 0.007642f, 0.005769f, -0.003304f, -0.002155f, -0.004930f, 0.001282f, -0.001062f, -0.000662f, -0.034615f, 0.004255f, 0.011428f, -0.017002f, 0.014180f, -0.029377f, 0.006711f, 0.008961f, -0.003866f, -0.011633f, -0.014929f, -0.017406f, -0.029474f, 0.003766f, 0.033521f, -0.011024f, 0.016169f, 0.008993f, 0.024929f, 0.013248f, -0.009419f, -0.021399f, 0.011031f, -0.005396f, -0.007609f, -0.022175f, -0.003314f, -0.002969f, -0.008849f, -0.009488f, -0.005100f, -0.015575f, -0.020478f, 0.023905f, -0.002344f, -0.013845f, 0.018747f, 0.006637f, -0.016351f, 0.002483f, -0.001200f, 0.010691f, -0.021727f, 0.006153f, 0.007470f, -0.032057f, 0.010720f, 0.010516f, -0.016523f, 0.004790f, 0.001252f, -0.005150f, 0.011858f, 0.001144f, -0.002237f, 0.001467f, 0.008033f, 0.021700f, 0.017231f, 0.022144f, 0.015259f, 0.007927f, -0.005719f, 0.032939f, -0.008360f, -0.016791f, 0.036473f, 0.002484f, 0.022043f, + 0.004793f, -0.007069f, -0.033806f, -0.031294f, -0.007727f, 0.001980f, -0.012319f, -0.005992f, -0.009662f, 0.021520f, -0.018796f, -0.005489f, -0.003153f, 0.005254f, -0.018345f, 0.013277f, -0.001411f, 0.004199f, -0.001537f, -0.007134f, -0.011922f, -0.008030f, -0.009380f, -0.007635f, -0.002226f, 0.001220f, -0.005751f, -0.004113f, -0.003190f, 0.007871f, -0.009109f, -0.008053f, -0.006538f, -0.007754f, -0.000284f, 0.006316f, -0.002757f, -0.003091f, 0.004560f, 0.001110f, -0.002248f, 0.003090f, -0.005685f, -0.006288f, 0.004862f, -0.007333f, -0.011778f, 0.004159f, 0.010630f, -0.005626f, 0.001186f, 0.007114f, -0.002391f, -0.005847f, -0.057632f, 0.028190f, 0.049653f, 0.003449f, -0.028179f, 0.012841f, -0.005205f, -0.001975f, 0.008140f, 0.004795f, 0.012782f, -0.015041f, 0.001736f, 0.044484f, 0.034187f, 0.029885f, -0.032635f, -0.001399f, 0.008019f, 0.017059f, -0.015659f, -0.017557f, -0.004469f, 0.005613f, 0.015466f, 0.007669f, -0.041969f, -0.047653f, 0.014822f, -0.001593f, 0.026846f, 0.027499f, -0.017753f, 0.022757f, 0.018334f, 0.024309f, -0.001656f, -0.014515f, -0.015090f, 0.011612f, -0.015981f, -0.006142f, + -0.000005f, -0.000698f, 0.014554f, 0.030914f, 0.017393f, -0.008475f, -0.007296f, -0.015321f, -0.003902f, 0.001357f, 0.008371f, -0.003304f, -0.005447f, 0.015196f, 0.009575f, -0.023360f, -0.000310f, 0.000965f, 0.028078f, -0.014132f, -0.016116f, -0.030619f, -0.010389f, 0.005242f, 0.002054f, 0.015814f, -0.003408f, 0.003957f, -0.013690f, -0.020345f, -0.018448f, -0.018642f, -0.010722f, 0.008897f, -0.038414f, 0.004588f, -0.005379f, -0.006029f, -0.008121f, 0.007599f, 0.021045f, 0.015328f, 0.002439f, -0.003445f, -0.019514f, -0.006226f, -0.001797f, -0.003970f, 0.012895f, 0.006581f, 0.003938f, 0.002838f, 0.006705f, 0.007823f, -0.002988f, -0.003272f, 0.000200f, -0.003544f, 0.000684f, 0.000862f, 0.002577f, 0.004300f, -0.012480f, 0.001927f, -0.001613f, 0.009470f, 0.002573f, -0.012556f, -0.000699f, -0.007950f, -0.006090f, -0.003135f, -0.002803f, -0.003336f, -0.001584f, 0.007098f, 0.006502f, 0.005482f, 0.009392f, 0.029043f, 0.002373f, 0.025202f, -0.003449f, 0.032713f, 0.016320f, 0.025509f, 0.015680f, 0.007432f, -0.012633f, -0.001278f, -0.007907f, 0.017484f, 0.005150f, 0.015355f, -0.014661f, -0.002564f, + 0.027128f, -0.033440f, -0.018691f, 0.026065f, -0.044109f, -0.019447f, 0.003290f, -0.008420f, -0.021840f, 0.044423f, -0.007939f, 0.030686f, 0.012312f, -0.026733f, -0.004090f, -0.010054f, -0.032322f, -0.041986f, 0.033537f, -0.000305f, -0.012217f, 0.008296f, 0.000611f, -0.005574f, 0.012214f, 0.004793f, -0.004329f, -0.015445f, 0.002966f, 0.031682f, 0.026862f, -0.022156f, 0.008793f, 0.001740f, 0.025061f, -0.011408f, 0.016986f, -0.036022f, -0.008718f, 0.024596f, 0.008265f, -0.008245f, 0.029354f, -0.009337f, 0.020580f, -0.039991f, -0.046111f, -0.016625f, 0.000905f, -0.032668f, 0.035304f, 0.024913f, 0.035865f, -0.016442f, -0.012100f, -0.012436f, 0.001868f, -0.018187f, -0.000186f, -0.027797f, -0.025230f, 0.001156f, 0.007119f, 0.025755f, 0.012183f, -0.002712f, -0.009489f, 0.008106f, 0.014878f, 0.009750f, 0.005954f, -0.009156f, 0.010760f, 0.009606f, 0.012126f, 0.008977f, 0.006572f, 0.009716f, -0.013329f, 0.011248f, -0.008060f, -0.004092f, 0.017639f, 0.015588f, 0.010489f, -0.001854f, 0.000637f, -0.004707f, 0.009050f, 0.002838f, -0.003702f, 0.004912f, 0.009181f, 0.001387f, 0.007139f, 0.006934f, + -0.009179f, 0.003051f, -0.006936f, -0.002029f, 0.002184f, 0.040214f, 0.028919f, 0.045315f, -0.040244f, -0.030249f, -0.068941f, 0.029705f, -0.007676f, -0.058913f, -0.011427f, 0.005589f, 0.008677f, -0.022014f, 0.023982f, 0.020261f, 0.002275f, -0.000267f, 0.003744f, -0.009762f, -0.020514f, 0.004521f, -0.011667f, -0.019199f, -0.000252f, 0.044662f, 0.001386f, -0.006780f, -0.035716f, 0.015066f, 0.028203f, -0.014593f, -0.043094f, -0.007819f, 0.014525f, 0.005151f, -0.009148f, 0.009390f, 0.003069f, 0.015500f, -0.004358f, 0.025565f, 0.039071f, 0.014780f, -0.025980f, 0.029445f, 0.013258f, -0.033277f, -0.035412f, 0.038491f, 0.018616f, -0.014991f, -0.017280f, -0.000856f, -0.031388f, 0.022975f, 0.030269f, -0.000722f, 0.001706f, 0.007621f, -0.003877f, 0.033126f, 0.011138f, 0.008611f, -0.013737f, 0.005352f, 0.011186f, 0.040907f, -0.009821f, 0.015674f, -0.031695f, -0.036104f, 0.032192f, -0.004859f, -0.003011f, 0.003324f, 0.030685f, 0.000671f, -0.001445f, 0.019363f, -0.009268f, 0.003858f, 0.017771f, 0.021688f, -0.010375f, -0.013517f, -0.029116f, -0.014369f, 0.009509f, -0.012870f, 0.010133f, -0.000330f, + 0.010753f, -0.005832f, 0.007930f, 0.001637f, -0.004487f, 0.003488f, 0.016277f, 0.004004f, 0.016203f, 0.004877f, -0.010260f, 0.000647f, 0.006759f, 0.005596f, -0.010069f, -0.009241f, -0.009809f, -0.004225f, -0.007708f, -0.007555f, -0.011979f, -0.005176f, 0.006663f, 0.004217f, -0.001227f, -0.001973f, 0.003639f, -0.007981f, -0.000202f, 0.010216f, -0.002896f, -0.001691f, -0.004940f, -0.004189f, -0.002162f, -0.015215f, -0.002144f, -0.005927f, -0.006524f, -0.009507f, -0.013537f, -0.046658f, -0.003847f, -0.030529f, -0.061930f, -0.063827f, -0.027590f, -0.048734f, -0.022096f, -0.007874f, 0.008753f, 0.027254f, 0.030406f, 0.003113f, -0.016453f, 0.032749f, -0.016652f, 0.016141f, -0.061144f, -0.006016f, -0.041946f, -0.028154f, 0.028410f, 0.019945f, 0.019407f, 0.006452f, 0.040912f, -0.004138f, -0.002561f, -0.029472f, -0.010217f, -0.005938f, -0.020059f, -0.020260f, -0.050245f, -0.019761f, -0.005549f, -0.008105f, -0.031087f, 0.027487f, 0.010947f, 0.016399f, -0.013687f, -0.005274f, -0.076248f, -0.021981f, -0.021017f, 0.017653f, 0.039077f, -0.024080f, -0.003693f, -0.044427f, -0.003208f, 0.022858f, -0.007281f, -0.015007f, + 0.009994f, 0.032785f, 0.055952f, 0.011757f, 0.001774f, -0.003098f, -0.015011f, -0.022402f, 0.014962f, -0.014763f, 0.050753f, 0.009977f, 0.021852f, 0.103500f, -0.020600f, -0.017621f, -0.026149f, -0.036284f, -0.004923f, 0.035356f, 0.015916f, 0.005053f, 0.011766f, -0.014957f, -0.011595f, -0.031581f, -0.007562f, 0.017752f, -0.002900f, -0.006985f, -0.002965f, -0.007365f, 0.003721f, -0.001166f, 0.006884f, 0.006975f, 0.007117f, 0.009339f, 0.010227f, 0.026363f, 0.016096f, -0.009773f, 0.015346f, -0.000410f, 0.000980f, 0.011028f, -0.012755f, 0.000240f, -0.014716f, -0.008902f, -0.020143f, -0.014964f, -0.021009f, -0.017438f, -0.011681f, 0.023037f, -0.014337f, -0.008094f, -0.016911f, 0.001055f, 0.005026f, -0.003660f, 0.006945f, 0.002793f, -0.000426f, -0.014292f, -0.051798f, 0.029384f, 0.048443f, -0.028681f, 0.001444f, 0.010852f, -0.016771f, -0.004056f, -0.036247f, -0.000775f, -0.020349f, 0.052590f, -0.000050f, -0.009960f, 0.042200f, -0.010770f, 0.012234f, -0.048508f, 0.025094f, 0.007453f, 0.032710f, -0.015341f, 0.024343f, 0.043018f, 0.046216f, 0.025917f, 0.041655f, 0.021318f, -0.006701f, 0.040486f, + -0.019690f, -0.026751f, -0.008621f, 0.016218f, 0.027421f, -0.066046f, -0.004578f, -0.042720f, 0.033774f, 0.015264f, -0.000917f, 0.011586f, 0.047326f, 0.001968f, 0.042228f, 0.018006f, 0.063990f, 0.005700f, -0.007376f, 0.027997f, 0.009195f, -0.032732f, 0.006945f, -0.003875f, -0.043904f, 0.030687f, -0.026512f, -0.042842f, -0.087553f, 0.006725f, -0.010862f, 0.051382f, -0.028735f, 0.068783f, 0.022648f, -0.001223f, -0.010605f, 0.026784f, 0.028246f, -0.050438f, -0.021586f, -0.037293f, 0.012904f, -0.016869f, 0.037750f, 0.011960f, 0.012652f, 0.018207f, -0.008774f, 0.003172f, -0.013304f, -0.004675f, 0.001004f, -0.005058f, -0.038971f, 0.015299f, -0.000123f, 0.011457f, 0.000328f, -0.011534f, 0.001201f, 0.015835f, -0.025940f, 0.022250f, -0.009534f, -0.000141f, 0.002495f, -0.021816f, -0.001898f, 0.013070f, 0.006613f, -0.015692f, -0.006495f, -0.003849f, -0.018358f, 0.006083f, -0.005255f, 0.026629f, -0.021442f, 0.009443f, 0.018582f, 0.006605f, -0.007924f, -0.005927f, 0.009027f, 0.004371f, 0.005595f, -0.004802f, 0.009361f, -0.028627f, 0.007627f, 0.006788f, 0.012258f, -0.008734f, -0.013367f, 0.000953f, + 0.011999f, 0.001605f, 0.033265f, -0.022242f, -0.024888f, -0.024485f, 0.031989f, 0.016596f, 0.041655f, 0.011564f, 0.128870f, -0.038273f, 0.000693f, 0.000970f, 0.059987f, 0.024840f, 0.027775f, -0.039350f, 0.017282f, -0.015515f, 0.001114f, -0.018201f, 0.004006f, 0.043357f, -0.011409f, 0.013753f, 0.083779f, 0.026302f, -0.037945f, -0.044428f, 0.005168f, 0.054640f, 0.028495f, 0.010387f, -0.021141f, 0.046516f, 0.007897f, -0.006898f, -0.051112f, 0.015630f, -0.008121f, 0.022032f, -0.046399f, -0.028317f, 0.002419f, -0.011799f, 0.006107f, -0.043262f, -0.001492f, -0.026387f, 0.012261f, 0.038367f, 0.030667f, 0.010042f, -0.059365f, 0.000506f, 0.005870f, -0.053492f, -0.047779f, -0.031659f, -0.026122f, -0.026074f, 0.042345f, 0.009679f, -0.001211f, 0.027616f, 0.044030f, 0.011755f, 0.038133f, 0.001040f, 0.025247f, 0.168371f, -0.038415f, 0.027750f, 0.019329f, -0.029577f, 0.006268f, -0.112177f, 0.002262f, 0.055716f, 0.014584f, -0.030856f, 0.042894f, 0.010348f, 0.016320f, -0.027983f, -0.006351f, -0.023905f, 0.008408f, 0.002095f, 0.002136f, 0.009619f, -0.034757f, 0.012882f, -0.019063f, -0.013858f, + -0.047589f, 0.011828f, 0.010942f, 0.009503f, 0.012267f, 0.059589f, 0.009008f, 0.006390f, 0.006853f, 0.004678f, 0.035623f, 0.004201f, 0.015052f, 0.012473f, 0.027181f, 0.010939f, -0.001615f, -0.006002f, -0.004925f, 0.004525f, 0.017247f, 0.020584f, 0.006105f, -0.031259f, -0.014347f, -0.006917f, -0.006911f, -0.010325f, -0.032641f, -0.007929f, 0.025086f, 0.068172f, -0.031690f, -0.001613f, -0.045729f, -0.033210f, 0.010835f, 0.029884f, -0.037831f, 0.045189f, 0.018954f, -0.059280f, 0.036489f, -0.023992f, -0.029358f, -0.002435f, -0.035507f, 0.008378f, -0.015886f, 0.045863f, -0.026397f, -0.002066f, 0.025255f, -0.088478f, 0.012699f, 0.027496f, -0.026687f, 0.021824f, -0.053455f, 0.053489f, 0.005869f, 0.009239f, -0.101172f, 0.091368f, 0.039193f, 0.030027f, 0.002038f, -0.057672f, 0.052927f, -0.003344f, -0.026185f, 0.093438f, -0.018573f, -0.040981f, -0.021581f, 0.011317f, 0.027058f, 0.025629f, 0.006843f, -0.015710f, -0.109948f, -0.012384f, 0.027541f, 0.001644f, 0.040408f, -0.057689f, 0.059611f, 0.006091f, 0.020176f, -0.058636f, -0.016931f, 0.009488f, 0.075972f, -0.031543f, 0.017776f, -0.054321f, + 0.048115f, 0.026995f, 0.045408f, -0.017455f, 0.020138f, 0.007887f, -0.059390f, -0.056700f, 0.031237f, 0.025549f, 0.048435f, 0.010420f, 0.062152f, -0.093565f, -0.122465f, 0.019611f, -0.025819f, 0.069268f, -0.045132f, -0.009728f, 0.008004f, -0.052106f, 0.002605f, -0.031084f, 0.027150f, 0.038528f, 0.003867f, 0.031272f, 0.034370f, 0.010263f, -0.031003f, -0.015606f, 0.055278f, 0.028821f, 0.007193f, 0.009732f, -0.016553f, 0.001393f, 0.033664f, 0.018934f, -0.027217f, -0.015322f, 0.031324f, -0.004350f, 0.019526f, 0.019692f, -0.012021f, -0.015904f, -0.016136f, 0.000226f, 0.016724f, 0.007660f, 0.021389f, 0.030740f, 0.002536f, -0.000864f, 0.025018f, 0.001659f, 0.005047f, 0.008022f, -0.010437f, 0.008682f, -0.018267f, 0.010537f, 0.003774f, 0.000550f, 0.007686f, -0.009112f, -0.085617f, 0.077965f, -0.016901f, -0.018911f, -0.030509f, -0.008963f, -0.067522f, -0.126031f, 0.043447f, 0.036102f, -0.005603f, -0.026035f, -0.051368f, -0.008542f, -0.015964f, -0.027353f, 0.049591f, -0.112714f, -0.048182f, -0.059533f, -0.017777f, -0.085834f, -0.007945f, -0.012979f, -0.003113f, -0.014424f, -0.017431f, 0.013767f, + -0.000883f, -0.038014f, -0.011922f, -0.000908f, -0.051981f, -0.027799f, -0.015354f, 0.003748f, 0.039968f, -0.020561f, 0.080137f, -0.041918f, -0.006023f, 0.033676f, -0.035768f, 0.021710f, 0.004545f, -0.054972f, -0.082216f, -0.020174f, 0.020984f, 0.074953f, 0.032511f, -0.057448f, -0.024304f, -0.164892f, -0.055183f, -0.011905f, 0.034687f, 0.089526f, -0.004747f, -0.095920f, 0.005333f, 0.052087f, -0.019165f, -0.004540f, 0.055236f, 0.058125f, 0.133370f, -0.147365f, -0.028567f, 0.020885f, 0.037299f, -0.046514f, -0.055217f, -0.078799f, -0.078227f, -0.043766f, -0.036367f, -0.010246f, -0.005592f, -0.091038f, -0.037725f, -0.033366f, 0.033710f, -0.017182f, -0.008965f, 0.082002f, 0.062115f, 0.004986f, -0.011704f, -0.003757f, -0.050644f, -0.002250f, 0.018054f, -0.036592f, -0.019597f, 0.006941f, 0.023147f, -0.015509f, -0.017926f, -0.012130f, 0.025829f, -0.017082f, 0.027067f, 0.001940f, 0.027954f, 0.019862f, 0.020152f, -0.015387f, 0.010207f, -0.038355f, 0.019808f, -0.005039f, 0.011685f, -0.033911f, -0.026252f, -0.003798f, 0.008782f, -0.019089f, 0.000518f, -0.042984f, -0.007517f, -0.005150f, 0.018430f, 0.022777f, + -0.027340f, 0.056144f, 0.001196f, 0.020842f, 0.012522f, 0.040681f, 0.040802f, -0.001966f, 0.025968f, -0.048649f, 0.011389f, -0.019842f, -0.117168f, 0.026189f, -0.020265f, 0.034291f, -0.032592f, -0.033526f, 0.002194f, -0.049162f, 0.008039f, -0.049566f, -0.001298f, -0.008845f, -0.019642f, 0.023474f, -0.037121f, -0.048245f, -0.044149f, -0.056608f, -0.009767f, -0.006404f, 0.062143f, 0.013588f, -0.045941f, -0.068008f, 0.008545f, -0.001665f, 0.015775f, -0.013432f, 0.037501f, -0.044793f, -0.018085f, -0.062812f, -0.040441f, -0.018218f, 0.001690f, -0.026644f, 0.064815f, -0.023007f, -0.056132f, 0.017099f, 0.067281f, 0.048903f, 0.019650f, -0.048072f, -0.031579f, -0.005088f, 0.061048f, 0.117469f, -0.001482f, 0.022962f, -0.022973f, -0.115335f, -0.025698f, 0.010276f, 0.043026f, 0.098079f, -0.054823f, -0.066818f, 0.038697f, 0.018379f, -0.023537f, 0.002940f, -0.037014f, 0.022453f, -0.097731f, -0.011367f, 0.005183f, 0.023484f, -0.059080f, 0.067550f, -0.095588f, -0.108489f, -0.100416f, 0.050360f, -0.020915f, 0.095213f, -0.133310f, -0.058042f, 0.010297f, 0.135608f, -0.011270f, -0.024277f, -0.075038f, -0.027449f, + -0.009081f, 0.065359f, -0.005901f, -0.000379f, 0.003570f, 0.011289f, 0.000962f, -0.001049f, -0.028597f, -0.024154f, 0.030905f, 0.013725f, 0.003468f, -0.071136f, 0.017505f, -0.018329f, -0.008718f, -0.036839f, 0.001353f, -0.003334f, -0.007026f, -0.083673f, 0.007439f, -0.018529f, -0.009870f, -0.007261f, 0.013894f, -0.000291f, 0.004891f, -0.000574f, 0.000221f, -0.000268f, 0.000108f, -0.030507f, -0.006183f, -0.019626f, -0.017117f, 0.014572f, 0.014897f, -0.024463f, 0.000674f, -0.017423f, 0.022525f, -0.008413f, 0.069562f, 0.021342f, -0.123912f, -0.021894f, -0.085463f, 0.038301f, 0.007245f, -0.170423f, 0.011726f, -0.052352f, -0.110384f, -0.085836f, -0.125983f, 0.078166f, -0.038370f, -0.099109f, -0.044510f, 0.032390f, -0.059054f, -0.050916f, -0.039734f, -0.023506f, -0.043814f, -0.043472f, -0.080418f, -0.058105f, -0.110364f, -0.062154f, -0.056074f, -0.018371f, -0.051897f, -0.010457f, -0.024185f, -0.001261f, 0.004413f, 0.014962f, 0.031187f, -0.030227f, 0.025987f, 0.003409f, 0.056986f, 0.025010f, 0.035698f, 0.036071f, -0.103358f, -0.026940f, 0.083516f, -0.013967f, -0.051240f, -0.057803f, -0.042729f, 0.033657f, + 0.134634f, -0.008580f, -0.001663f, -0.089752f, -0.091549f, -0.019062f, 0.019351f, 0.080634f, -0.005133f, 0.073528f, 0.027505f, -0.088154f, 0.160161f, 0.003410f, 0.124734f, 0.000665f, -0.031298f, 0.067107f, -0.089045f, -0.115255f, -0.073636f, -0.255734f, -0.154928f, -0.050597f, 0.117826f, 0.072355f, -0.102258f, -0.067237f, -0.156519f, 0.078232f, 0.104416f, -0.079871f, -0.079731f, 0.018804f, 0.069198f, 0.098105f, 0.027959f, 0.056412f, -0.051551f, -0.028343f, -0.038690f, -0.059378f, -0.023824f, -0.005097f, 0.006452f, 0.002741f, -0.031872f, 0.005388f, 0.023016f, 0.007562f, -0.004334f, -0.023380f, -0.015156f, -0.026687f, -0.009150f, -0.039573f, -0.007612f, 0.024792f, -0.037785f, -0.062706f, -0.008234f, -0.041070f, -0.027123f, -0.004630f, -0.052118f, -0.040840f, -0.009617f, 0.025671f, 0.027523f, 0.029586f, 0.000601f, -0.022475f, -0.002519f, 0.009731f, -0.012230f, 0.039674f, 0.003317f, 0.029302f, 0.003225f, 0.000130f, 0.030646f, 0.022777f, 0.034293f, 0.070988f, 0.046337f, 0.053022f, 0.046004f, -0.043528f, -0.105703f, 0.122929f, 0.117548f, -0.074333f, -0.096450f, -0.000448f, 0.105474f, -0.011432f, + -0.006124f, -0.032858f, 0.092231f, -0.010222f, -0.024617f, -0.002241f, 0.025471f, 0.047361f, 0.001267f, -0.035550f, -0.040474f, 0.056920f, 0.004223f, -0.024447f, -0.060868f, 0.034620f, 0.019092f, -0.006906f, -0.047978f, 0.015102f, 0.020636f, 0.017151f, -0.030350f, -0.018190f, 0.005352f, 0.046974f, -0.013821f, 0.016887f, -0.069084f, -0.019199f, 0.000100f, 0.045516f, -0.096165f, -0.017152f, 0.009342f, 0.069238f, -0.033279f, 0.010761f, -0.049147f, 0.006728f, 0.020324f, -0.033764f, -0.025781f, -0.003974f, 0.011225f, 0.021141f, -0.021937f, 0.001517f, -0.085717f, 0.046411f, -0.014351f, 0.080317f, -0.049805f, 0.035854f, -0.033908f, 0.037277f, 0.006931f, 0.025014f, 0.021140f, -0.062329f, 0.070506f, 0.013985f, 0.040661f, -0.068795f, 0.019095f, -0.017468f, 0.010903f, -0.019581f, 0.002692f, -0.004724f, 0.009342f, 0.023428f, -0.003718f, -0.027473f, -0.016414f, 0.007079f, -0.003759f, 0.001774f, -0.010771f, -0.026761f, 0.008932f, 0.007169f, -0.008375f, -0.007543f, -0.000561f, -0.008360f, 0.001198f, -0.014536f, -0.000531f, -0.007079f, 0.011980f, 0.007078f, -0.005064f, -0.010780f, 0.003678f, 0.000339f, + -0.009585f, 0.006997f, -0.029481f, -0.000226f, -0.003520f, 0.013140f, -0.000566f, 0.033928f, -0.022565f, -0.022832f, -0.007862f, 0.017929f, -0.024428f, 0.036390f, -0.030622f, 0.015458f, -0.015053f, 0.033175f, -0.029733f, 0.036496f, -0.020795f, 0.028540f, -0.025834f, 0.044344f, -0.041792f, 0.032119f, -0.009679f, 0.024177f, -0.022537f, 0.023757f, -0.025505f, 0.026795f, -0.025652f, 0.021497f, -0.017145f, 0.023752f, -0.018382f, 0.019811f, -0.018228f, 0.005776f, -0.005939f, 0.011937f, -0.008862f, 0.009644f, -0.007594f, 0.007536f, -0.004940f, 0.009866f, -0.036048f, -0.080117f, -0.106523f, 0.077635f, 0.051501f, -0.060768f, -0.086573f, -0.042447f, 0.040051f, 0.020982f, 0.053286f, 0.057346f, 0.011224f, -0.028978f, -0.008454f, 0.020034f, -0.019753f, -0.001660f, 0.011856f, 0.003210f, 0.032110f, 0.022411f, 0.009727f, -0.028961f, -0.001083f, -0.017954f, 0.018630f, -0.030343f, -0.026254f, 0.021946f, -0.007001f, -0.012384f, -0.012118f, -0.021114f, -0.028878f, 0.002154f, 0.023578f, 0.021463f, 0.018038f, -0.006911f, -0.023811f, -0.020738f, -0.014466f, 0.025660f, 0.034977f, -0.016361f, -0.024451f, -0.010634f, + 0.029025f, 0.014935f, 0.038831f, -0.027507f, -0.010442f, 0.015285f, -0.007321f, 0.001222f, -0.004163f, 0.013726f, 0.008263f, 0.011077f, 0.002336f, -0.026325f, 0.010873f, 0.004832f, -0.000974f, 0.020293f, -0.010570f, -0.005250f, 0.003511f, -0.003801f, 0.002607f, -0.007657f, 0.034468f, 0.008619f, -0.002791f, 0.032798f, 0.032895f, -0.033479f, -0.050627f, -0.018594f, -0.034676f, 0.000999f, 0.022931f, 0.006517f, -0.020742f, -0.025054f, -0.006677f, -0.004862f, 0.019927f, 0.009481f, 0.012419f, 0.018638f, 0.011393f, -0.010447f, 0.011536f, 0.008154f, -0.024371f, -0.032687f, 0.009778f, -0.008641f, 0.016246f, 0.011900f, -0.017915f, -0.004816f, -0.006088f, -0.006591f, -0.020817f, -0.011444f, -0.001298f, 0.006554f, 0.009937f, 0.027659f, -0.013786f, -0.010334f, 0.007089f, -0.006450f, 0.036523f, -0.088720f, -0.233572f, -0.085866f, 0.041896f, 0.121509f, 0.256637f, 0.171733f, 0.044203f, 0.065085f, -0.034293f, -0.104465f, -0.173477f, -0.150948f, -0.119999f, -0.034615f, 0.004624f, 0.083483f, 0.092054f, 0.195935f, 0.095134f, 0.062713f, -0.004912f, -0.041780f, -0.094305f, -0.048988f, -0.076254f, -0.087965f, + -0.054142f, -0.045352f, -0.003371f, 0.024486f, 0.073322f, 0.045301f, 0.052635f, 0.047814f, 0.048363f, 0.072701f, 0.006292f, 0.050365f, -0.009329f, -0.022644f, -0.061354f, -0.036590f, -0.091506f, -0.134747f, -0.117700f, 0.001365f, -0.020004f, 0.036922f, 0.063312f, 0.034683f, 0.097653f, 0.085228f, 0.123418f, 0.070218f, 0.083709f, 0.004117f, 0.004138f, -0.066016f, -0.107792f, -0.126020f, -0.151230f, -0.099447f, -0.123586f, -0.010427f, -0.000466f, 0.059471f, 0.062438f, 0.149380f, 0.117397f, 0.166866f, 0.067769f, 0.077994f, 0.032570f, -0.000739f, -0.099561f, -0.162488f, -0.108753f, -0.129820f, -0.080826f, -0.087919f, -0.008181f, 0.013552f, 0.051897f, 0.068003f, 0.092228f, 0.094066f, 0.090527f, 0.059210f, 0.064835f, 0.016827f, -0.011708f, -0.022310f, -0.072938f, -0.066585f, -0.087332f, -0.061793f, -0.087300f, -0.066603f, -0.006909f, 0.015546f, 0.046082f, 0.069454f, 0.062043f, 0.063845f, 0.105318f, 0.038066f, 0.064320f, 0.049290f, -0.066344f, -0.120215f, -0.052060f, -0.106009f, -0.066766f, -0.036415f, -0.007538f, 0.009379f, 0.033779f, 0.061077f, 0.042588f, 0.065708f, 0.041779f, 0.035741f, + 0.014472f, -0.004106f, -0.038187f, -0.012633f, -0.017898f, -0.067123f, -0.062625f, -0.017357f, -0.007059f, 0.003473f, 0.022056f, 0.025675f, 0.032704f, 0.026010f, 0.025855f, 0.009588f, 0.008724f, -0.000494f, -0.014676f, -0.007435f, -0.005390f, -0.015113f, -0.023948f, -0.008361f, -0.012079f, -0.014281f, -0.001866f, 0.005924f, 0.006823f, 0.009928f, 0.011066f, 0.010288f, 0.004310f, 0.001968f, 0.001330f, 0.001369f} + }, + { + {0.014252f, 0.001519f, -0.003851f, -0.004029f, 0.002484f, -0.006883f, -0.000100f, -0.013414f, 0.009628f, 0.012208f, 0.008530f, 0.012014f, -0.014405f, 0.001171f, 0.003302f, -0.005134f, -0.003951f, -0.003509f, -0.016872f, -0.002835f, 0.010042f, -0.017274f, -0.014036f, 0.008179f, 0.007415f, -0.011098f, -0.003866f, 0.007355f, 0.000949f, 0.008941f, 0.003836f, 0.009313f, -0.005837f, 0.001786f, 0.001298f, -0.002468f, 0.004342f, 0.003412f, 0.006326f, 0.002657f, -0.002782f, 0.000611f, 0.007067f, -0.001904f, -0.003202f, -0.001190f, -0.008528f, -0.018836f, 0.011210f, 0.005442f, -0.005886f, 0.008270f, -0.003301f, 0.000919f, -0.000281f, 0.003845f, -0.004963f, -0.001289f, 0.011141f, -0.010480f, -0.004195f, 0.003645f, 0.001827f, -0.001619f, -0.000508f, 0.004883f, 0.000567f, 0.004323f, -0.007463f, 0.007606f, 0.003921f, -0.009738f, 0.007769f, 0.000691f, 0.002821f, -0.001161f, -0.002887f, -0.011367f, -0.003509f, -0.000849f, 0.005853f, -0.001499f, 0.004789f, -0.002856f, 0.000577f, 0.001426f, 0.000582f, 0.003393f, -0.000596f, 0.000236f, -0.000405f, -0.002301f, -0.001040f, 0.000454f, -0.001227f, 0.000164f, + -0.000047f, -0.000522f, 0.003119f, 0.003129f, 0.001637f, 0.001305f, 0.001143f, 0.000405f, 0.000022f, 0.000419f, 0.000181f, -0.000472f, -0.001378f, -0.001559f, 0.022253f, -0.012816f, 0.003898f, -0.014164f, 0.001692f, 0.003300f, -0.014279f, -0.018053f, 0.004496f, -0.019586f, 0.004304f, -0.005116f, -0.001362f, -0.012017f, -0.001751f, -0.013493f, -0.006941f, 0.000043f, -0.014274f, 0.015147f, 0.005327f, -0.023669f, 0.002237f, -0.001315f, -0.004295f, -0.010139f, 0.005078f, 0.012262f, 0.000234f, -0.000917f, 0.011511f, -0.006782f, 0.000137f, -0.004322f, 0.007625f, -0.008957f, 0.002613f, 0.010756f, -0.009385f, 0.009404f, 0.003301f, 0.010173f, -0.000886f, 0.002296f, -0.001554f, -0.004318f, 0.013334f, -0.016582f, 0.003810f, -0.007350f, -0.003197f, -0.002180f, -0.006044f, -0.004479f, -0.013218f, -0.008320f, -0.002077f, 0.008577f, -0.000746f, 0.003206f, 0.012019f, -0.000305f, -0.010448f, -0.001367f, 0.000363f, 0.003239f, -0.005108f, -0.000011f, -0.010277f, 0.000190f, -0.004194f, 0.003363f, 0.005319f, 0.007818f, 0.002781f, -0.004459f, -0.005780f, 0.007673f, -0.002594f, -0.003559f, 0.001422f, 0.004253f, + 0.008858f, 0.001050f, 0.002531f, -0.000611f, 0.005187f, -0.001043f, -0.004138f, -0.002140f, -0.002056f, -0.000219f, 0.003513f, 0.000657f, -0.000249f, -0.001907f, 0.003403f, -0.000040f, -0.001296f, -0.000990f, -0.000890f, -0.001028f, 0.001610f, -0.000717f, -0.000185f, -0.002008f, -0.005358f, -0.018434f, -0.000218f, -0.011110f, -0.003506f, -0.001812f, -0.012956f, -0.001776f, -0.003018f, 0.006427f, 0.015110f, 0.015195f, 0.001807f, -0.006499f, 0.006077f, -0.014724f, -0.002105f, -0.005637f, 0.005132f, -0.021941f, 0.007746f, 0.003711f, -0.000801f, -0.006317f, -0.009457f, -0.004328f, -0.007802f, -0.006717f, 0.004104f, -0.001474f, -0.008409f, -0.002459f, 0.001703f, 0.014318f, -0.000553f, -0.014478f, 0.001133f, 0.006225f, -0.000181f, -0.004562f, 0.001201f, 0.005442f, -0.015726f, -0.001231f, -0.006838f, 0.011041f, 0.006727f, 0.001866f, -0.014538f, 0.001637f, 0.005600f, 0.008908f, 0.008342f, -0.009562f, -0.004493f, 0.000427f, -0.002986f, -0.003002f, 0.007771f, -0.004828f, 0.004757f, 0.001299f, -0.006109f, -0.001384f, -0.008393f, 0.010106f, 0.003798f, -0.009996f, -0.006890f, 0.001682f, 0.005302f, -0.007931f, + -0.009996f, -0.001706f, 0.000497f, -0.006653f, 0.001431f, -0.002733f, 0.003374f, -0.006341f, 0.009423f, 0.005044f, 0.007104f, 0.002027f, 0.000938f, 0.006388f, 0.008647f, 0.001006f, 0.002458f, -0.000828f, 0.001231f, 0.000145f, -0.000359f, 0.000964f, 0.000729f, 0.001001f, -0.001364f, 0.000048f, 0.000666f, -0.000484f, 0.000154f, 0.002880f, -0.001675f, 0.000656f, -0.002006f, -0.001610f, -0.001344f, 0.000296f, 0.001094f, 0.000735f, 0.000102f, -0.001868f, -0.001235f, -0.031374f, 0.010128f, 0.009057f, 0.015175f, -0.003954f, 0.009524f, -0.027063f, -0.007412f, 0.008461f, 0.000988f, -0.013395f, -0.003504f, -0.004469f, -0.023714f, -0.009619f, 0.002383f, -0.001105f, -0.016914f, 0.010535f, 0.014975f, -0.015418f, 0.011667f, -0.020186f, -0.006883f, -0.001828f, 0.006919f, -0.000128f, -0.008203f, 0.005514f, 0.002732f, -0.001367f, 0.008985f, -0.004382f, -0.005834f, -0.001832f, -0.003343f, -0.005989f, 0.008836f, -0.006833f, 0.002481f, 0.006617f, -0.001381f, -0.005296f, -0.009935f, -0.001224f, -0.007099f, -0.002181f, -0.008254f, -0.002247f, 0.018259f, 0.000351f, 0.011089f, -0.010232f, 0.009299f, -0.002940f, + -0.014979f, -0.008842f, 0.008241f, -0.005457f, -0.007635f, 0.005434f, -0.008972f, 0.007418f, 0.001967f, -0.002773f, 0.009696f, 0.008763f, 0.003843f, -0.009677f, -0.010963f, -0.000780f, 0.014514f, 0.002869f, 0.002171f, -0.008271f, 0.002114f, 0.005205f, -0.011134f, -0.004085f, 0.003573f, 0.007729f, 0.003810f, 0.006540f, -0.000406f, 0.000043f, 0.002381f, 0.000290f, -0.001284f, 0.000378f, -0.000985f, -0.001420f, -0.004947f, -0.003944f, 0.001160f, -0.002379f, -0.001443f, 0.001638f, 0.000710f, 0.001195f, -0.000345f, 0.001996f, -0.001338f, 0.000084f, -0.001765f, 0.000008f, -0.002134f, 0.001039f, 0.000323f, 0.001428f, -0.002773f, -0.016854f, -0.016025f, -0.010617f, 0.001904f, -0.002765f, 0.006460f, -0.005856f, -0.000064f, 0.001082f, -0.004836f, -0.001883f, 0.003946f, -0.004795f, 0.018589f, -0.012320f, 0.008567f, -0.003290f, -0.001355f, -0.008769f, -0.002469f, -0.001281f, 0.013530f, -0.009377f, 0.001138f, 0.002555f, -0.013431f, -0.008245f, -0.009201f, -0.007836f, -0.015558f, -0.005418f, 0.005484f, 0.010410f, 0.006566f, -0.012442f, -0.017513f, -0.003915f, 0.000449f, -0.008962f, 0.001542f, -0.006118f, + -0.009178f, -0.021663f, -0.010931f, -0.015211f, 0.008629f, -0.004001f, 0.006995f, -0.008776f, -0.021122f, -0.011244f, 0.000953f, -0.004375f, -0.006990f, -0.003230f, -0.008371f, 0.011144f, 0.000919f, 0.006450f, 0.008664f, 0.002126f, -0.000452f, -0.007386f, 0.000234f, 0.009420f, -0.001732f, -0.007134f, -0.009853f, 0.015563f, -0.013116f, -0.018277f, -0.012936f, -0.007490f, -0.010194f, 0.011296f, 0.018082f, -0.014578f, -0.010083f, 0.002140f, 0.008725f, 0.013456f, 0.010624f, 0.008273f, 0.008161f, -0.003016f, -0.003699f, -0.004215f, -0.004362f, 0.003261f, -0.002708f, 0.000819f, -0.003284f, -0.005233f, -0.002187f, -0.003795f, 0.002626f, -0.002405f, -0.004672f, -0.002768f, -0.002736f, -0.004696f, -0.005181f, -0.003277f, -0.001374f, 0.000927f, 0.000830f, 0.002305f, 0.000219f, -0.007998f, 0.000852f, -0.001307f, -0.003267f, 0.000841f, -0.001468f, -0.002479f, -0.005269f, -0.004363f, 0.000060f, -0.000076f, -0.001826f, -0.002091f, -0.000081f, 0.004301f, -0.034423f, 0.010615f, -0.002447f, 0.006085f, 0.018863f, 0.007403f, -0.004684f, 0.006383f, -0.014218f, 0.008778f, 0.010291f, -0.018755f, -0.004022f, -0.009499f, + 0.010559f, 0.009196f, 0.014334f, 0.016641f, -0.021646f, -0.011147f, 0.003548f, 0.018576f, -0.007067f, 0.008635f, -0.020696f, -0.006251f, -0.007270f, -0.004391f, -0.012537f, 0.003099f, -0.020491f, 0.014183f, -0.004038f, -0.003636f, 0.010347f, -0.000620f, 0.002349f, 0.011014f, 0.000282f, 0.009016f, 0.006023f, -0.002552f, -0.003571f, -0.001217f, -0.014393f, -0.010537f, -0.013153f, -0.000828f, 0.027292f, 0.006345f, 0.005264f, -0.000638f, -0.003832f, -0.000225f, 0.016302f, -0.003486f, 0.005089f, -0.031484f, 0.028957f, -0.007017f, -0.005194f, 0.001670f, 0.017728f, 0.006464f, -0.002990f, -0.010792f, 0.031028f, -0.005981f, -0.000397f, 0.009953f, -0.007885f, -0.000044f, 0.004431f, -0.006988f, 0.006112f, 0.006096f, 0.025619f, -0.012754f, -0.016081f, -0.002945f, 0.007653f, -0.009643f, 0.002130f, 0.006638f, 0.002098f, -0.005630f, 0.002519f, 0.006807f, -0.004311f, 0.000619f, -0.007359f, -0.002294f, -0.002180f, -0.005981f, 0.007848f, -0.005688f, -0.004856f, 0.003608f, -0.000251f, -0.006745f, -0.000634f, 0.001647f, 0.002883f, 0.000346f, 0.003396f, -0.002435f, -0.002118f, -0.001981f, 0.002273f, -0.002482f, + 0.004059f, 0.000465f, -0.001748f, 0.001888f, 0.004239f, -0.000095f, -0.001956f, 0.014898f, 0.008358f, 0.016579f, -0.006628f, -0.003938f, 0.009556f, -0.015287f, 0.013771f, 0.015715f, -0.007866f, -0.001317f, -0.024679f, 0.001178f, 0.008506f, 0.006885f, -0.005219f, -0.016788f, -0.034066f, 0.000557f, -0.005783f, -0.016164f, 0.003783f, 0.010880f, -0.014784f, -0.006296f, -0.016125f, 0.008173f, 0.000937f, -0.002394f, -0.005354f, -0.006988f, 0.017409f, 0.020308f, 0.007907f, 0.009681f, -0.004511f, -0.010183f, 0.028319f, 0.007049f, -0.004814f, -0.016614f, 0.012266f, 0.000521f, 0.016290f, -0.001425f, 0.020128f, 0.010074f, 0.014090f, 0.011919f, 0.006083f, 0.015673f, 0.019558f, -0.000548f, 0.003628f, -0.006228f, -0.000187f, 0.010680f, 0.004480f, 0.005815f, -0.017267f, -0.006331f, -0.003629f, -0.015035f, -0.014373f, -0.009464f, 0.008080f, 0.016629f, 0.021739f, 0.028438f, 0.006349f, 0.002504f, 0.022923f, -0.009109f, -0.017237f, -0.005992f, -0.008716f, 0.014844f, 0.012141f, 0.004664f, -0.016320f, -0.004430f, 0.002950f, 0.002398f, -0.003145f, -0.007510f, 0.002346f, 0.001950f, 0.009499f, -0.002240f, + -0.005188f, 0.001125f, 0.001884f, 0.002349f, 0.000227f, 0.000169f, 0.001929f, 0.004368f, -0.003008f, -0.002946f, 0.000343f, -0.000335f, -0.004240f, -0.000947f, -0.005423f, 0.006036f, 0.001992f, -0.004078f, -0.000109f, 0.004111f, -0.002062f, -0.000313f, -0.003190f, 0.001851f, 0.002210f, -0.001386f, 0.005267f, 0.004003f, 0.026315f, -0.024920f, -0.011710f, -0.003333f, 0.010091f, -0.023311f, 0.014767f, -0.022966f, 0.011327f, -0.000054f, 0.012017f, 0.019021f, -0.007764f, 0.017374f, 0.018997f, 0.018065f, -0.010446f, 0.015241f, -0.016377f, -0.013052f, -0.002016f, -0.010083f, -0.000146f, -0.008668f, 0.014929f, -0.011022f, 0.003295f, -0.010881f, -0.019123f, -0.008900f, -0.004018f, 0.023148f, -0.019380f, 0.018237f, 0.008031f, -0.026840f, 0.030821f, 0.007612f, 0.003449f, 0.021661f, 0.003854f, 0.000998f, -0.012244f, -0.000037f, -0.006833f, 0.024697f, 0.010430f, 0.017320f, -0.006727f, -0.004055f, 0.011916f, 0.020577f, -0.021472f, 0.021323f, 0.003900f, -0.003433f, -0.003996f, -0.020207f, 0.009764f, -0.009520f, 0.004129f, 0.000930f, -0.018335f, 0.006226f, 0.015541f, -0.014078f, 0.009861f, 0.006485f, + 0.021749f, 0.002343f, -0.001459f, 0.013228f, 0.019021f, 0.001579f, -0.010901f, 0.012799f, -0.014713f, -0.007636f, 0.003933f, -0.005929f, 0.003980f, -0.004747f, 0.001897f, 0.008253f, 0.006012f, -0.005975f, 0.005254f, -0.003060f, 0.004236f, -0.004185f, 0.013244f, 0.001368f, 0.012645f, -0.001485f, 0.003172f, -0.002639f, -0.001094f, -0.004003f, 0.008014f, 0.003398f, -0.006602f, 0.006937f, 0.008030f, -0.000856f, -0.001104f, 0.004934f, -0.000350f, -0.000383f, 0.006684f, -0.000172f, 0.001640f, 0.004349f, 0.002821f, -0.001005f, 0.005103f, -0.004192f, -0.000781f, 0.001018f, 0.001377f, 0.001170f, -0.000293f, -0.000570f, -0.005091f, 0.002452f, 0.007557f, -0.021243f, -0.015197f, 0.023118f, -0.029603f, 0.007468f, -0.015754f, 0.017601f, -0.018803f, 0.028748f, 0.009977f, 0.002787f, -0.024926f, 0.012716f, 0.021129f, 0.005584f, -0.012805f, -0.008332f, -0.007321f, 0.019604f, 0.010681f, -0.027354f, 0.003891f, -0.019353f, -0.001044f, 0.002216f, -0.016516f, 0.021685f, 0.021793f, -0.009884f, 0.004800f, 0.014765f, -0.018006f, -0.002747f, -0.005523f, -0.014937f, 0.031787f, -0.011548f, -0.007072f, -0.016000f, + -0.026682f, -0.004245f, 0.000528f, -0.009239f, 0.004004f, -0.022118f, 0.001985f, 0.001552f, -0.004395f, 0.017467f, -0.003605f, -0.013606f, 0.007118f, -0.000022f, -0.010134f, 0.008716f, 0.037690f, -0.007545f, 0.009008f, 0.002040f, -0.025526f, -0.004172f, 0.022865f, 0.010273f, 0.022701f, -0.002335f, 0.013148f, -0.018059f, 0.008153f, 0.007962f, 0.002722f, -0.015352f, 0.014239f, 0.004999f, -0.039732f, 0.003089f, -0.007126f, 0.026599f, -0.010154f, 0.020650f, 0.019205f, 0.015371f, -0.001838f, 0.005890f, 0.000974f, 0.001536f, -0.002520f, -0.004400f, 0.010471f, 0.004181f, -0.000064f, -0.006914f, -0.009561f, -0.002263f, 0.004213f, 0.006735f, 0.004923f, 0.008646f, 0.000393f, -0.002363f, -0.003485f, -0.002810f, 0.003228f, 0.005161f, -0.000381f, 0.004067f, 0.002782f, 0.000733f, 0.003853f, -0.000743f, 0.004027f, -0.006528f, -0.007936f, -0.010617f, -0.000389f, 0.004793f, 0.002306f, -0.005004f, -0.001687f, -0.003515f, -0.003730f, 0.006442f, 0.002107f, 0.002849f, -0.046490f, 0.052570f, 0.006200f, 0.020752f, -0.038140f, 0.020826f, 0.027100f, -0.031229f, 0.011902f, 0.015467f, 0.011965f, -0.020178f, + 0.002650f, 0.003566f, -0.006811f, 0.011787f, 0.024275f, -0.019483f, -0.016215f, -0.005927f, 0.020578f, 0.017800f, 0.025166f, -0.001209f, 0.010630f, -0.018748f, -0.004913f, -0.004867f, 0.004115f, 0.011835f, 0.032166f, 0.019158f, 0.011693f, 0.006122f, -0.001068f, 0.015372f, -0.005690f, -0.027597f, -0.005362f, 0.008120f, 0.008814f, -0.016149f, -0.012236f, -0.020001f, 0.003862f, -0.001584f, 0.007022f, -0.013110f, 0.023483f, 0.022964f, -0.019883f, 0.047276f, 0.002166f, -0.004339f, -0.000271f, -0.009836f, -0.002130f, -0.003022f, -0.019118f, 0.000322f, 0.000056f, 0.012554f, -0.039781f, 0.009750f, -0.014102f, 0.028901f, 0.034895f, 0.015110f, 0.014497f, 0.006525f, 0.002328f, 0.031509f, -0.005912f, -0.023292f, 0.019935f, -0.010488f, 0.005343f, 0.015568f, 0.028382f, 0.003993f, 0.002798f, -0.022719f, -0.000991f, 0.006652f, 0.018014f, -0.007825f, 0.009784f, 0.004724f, -0.006900f, 0.018302f, 0.003085f, 0.008208f, -0.005335f, -0.001683f, -0.005287f, 0.000898f, 0.002101f, -0.002785f, -0.000163f, 0.005516f, -0.003047f, 0.005590f, 0.003758f, -0.003893f, -0.000419f, 0.002600f, -0.001653f, 0.000450f, + -0.003754f, -0.012337f, -0.003553f, -0.001873f, 0.012897f, 0.015979f, 0.001562f, 0.002358f, -0.004596f, -0.005335f, 0.001338f, 0.001752f, -0.006687f, -0.005178f, -0.003479f, -0.003014f, 0.004281f, -0.007387f, -0.000366f, -0.005426f, 0.019119f, 0.003660f, -0.013314f, 0.012396f, 0.018605f, 0.016160f, 0.010198f, 0.019279f, -0.023461f, -0.014969f, 0.002603f, -0.021225f, -0.005304f, -0.003624f, 0.004657f, -0.005516f, -0.013790f, -0.017328f, -0.010429f, 0.008445f, 0.014511f, -0.025573f, 0.005340f, -0.002749f, -0.000746f, -0.030799f, -0.027662f, -0.004889f, -0.021473f, 0.010023f, -0.024479f, 0.001490f, 0.012987f, 0.018703f, -0.016719f, 0.022240f, 0.005619f, -0.002288f, -0.005003f, 0.033024f, -0.009307f, -0.001721f, -0.026682f, -0.015026f, 0.021598f, -0.001723f, 0.008123f, -0.025668f, -0.028114f, -0.007731f, -0.015905f, -0.002823f, 0.001133f, -0.010408f, -0.013350f, 0.007821f, -0.012401f, 0.001022f, -0.018232f, -0.009866f, -0.000561f, -0.029949f, 0.002653f, 0.019619f, 0.003650f, 0.010281f, 0.021323f, 0.036670f, -0.035538f, 0.006411f, -0.021969f, -0.021303f, -0.011996f, -0.016197f, -0.010485f, -0.009575f, + 0.035824f, 0.019734f, 0.019781f, 0.004097f, 0.005734f, -0.026011f, 0.001161f, -0.009180f, 0.004047f, -0.011308f, 0.015792f, 0.020967f, 0.001943f, -0.009530f, -0.006567f, -0.017948f, 0.001516f, 0.011005f, 0.005991f, -0.004355f, 0.011256f, 0.005468f, 0.011921f, -0.002598f, -0.002328f, 0.001965f, 0.007712f, -0.005004f, 0.003222f, -0.007354f, -0.010332f, 0.007375f, 0.002532f, 0.001517f, 0.001517f, -0.013914f, -0.008404f, -0.000072f, 0.010563f, -0.009006f, 0.005221f, -0.012067f, -0.004172f, -0.001927f, 0.004139f, 0.002904f, -0.003735f, -0.002942f, -0.016187f, 0.036910f, 0.039135f, 0.043005f, -0.032161f, 0.002242f, 0.023139f, 0.018204f, -0.018837f, -0.035926f, -0.004286f, -0.005439f, -0.028296f, -0.016392f, 0.053367f, 0.004114f, 0.003537f, 0.019921f, -0.002437f, 0.008466f, -0.007493f, -0.021308f, 0.013856f, 0.011596f, -0.028842f, -0.040909f, -0.031754f, -0.025225f, -0.024066f, 0.002216f, 0.006841f, 0.012062f, -0.016048f, 0.015522f, 0.003616f, -0.007895f, -0.016978f, -0.000647f, 0.000814f, -0.026096f, -0.020494f, 0.002908f, -0.004828f, 0.003473f, -0.015893f, 0.012667f, 0.003838f, -0.014921f, + -0.031966f, -0.012665f, -0.010878f, -0.042421f, -0.013480f, 0.003877f, 0.020794f, -0.002110f, 0.024647f, -0.004460f, -0.002221f, -0.036165f, -0.007806f, 0.014097f, 0.006629f, -0.060459f, 0.017168f, 0.005146f, -0.016971f, -0.010322f, -0.017698f, -0.019905f, -0.000931f, 0.000830f, -0.019289f, -0.006256f, 0.012083f, 0.017524f, 0.027589f, -0.021283f, 0.000875f, 0.015570f, -0.000844f, -0.046251f, -0.036942f, -0.000507f, -0.009879f, 0.011479f, -0.000479f, -0.011437f, -0.016670f, 0.007549f, -0.004900f, 0.006851f, 0.018735f, -0.000589f, -0.009472f, -0.015807f, -0.028996f, -0.009924f, 0.001623f, -0.004853f, -0.005004f, 0.001818f, 0.001754f, 0.012758f, -0.006712f, 0.001272f, 0.004688f, 0.002475f, -0.010563f, 0.001137f, -0.002783f, -0.025176f, 0.002433f, -0.009355f, -0.011470f, 0.004016f, 0.002957f, -0.007666f, -0.002520f, 0.008991f, 0.002503f, 0.002353f, -0.009407f, -0.010566f, -0.003825f, -0.000840f, 0.000424f, 0.006398f, 0.014799f, -0.012554f, 0.042015f, -0.035959f, -0.022138f, -0.007311f, -0.067989f, -0.035516f, -0.000187f, -0.043343f, 0.033653f, -0.015246f, -0.014047f, 0.003848f, 0.077062f, 0.037184f, + 0.002381f, 0.015817f, -0.003586f, -0.020692f, -0.002063f, -0.032011f, -0.023165f, 0.011006f, 0.011179f, 0.013815f, -0.022246f, 0.028478f, 0.017431f, 0.032220f, -0.032763f, 0.005249f, 0.047762f, 0.004450f, 0.001950f, 0.009409f, -0.045818f, 0.011674f, -0.011587f, 0.007514f, -0.018457f, -0.043273f, -0.002661f, 0.017454f, 0.021289f, 0.005489f, -0.006771f, 0.003113f, -0.001999f, 0.014302f, -0.032679f, -0.047563f, 0.008484f, -0.017384f, 0.028354f, -0.011391f, -0.011835f, 0.037025f, 0.008320f, 0.015900f, 0.002935f, -0.031374f, -0.012878f, -0.003791f, 0.016883f, 0.048844f, 0.037597f, -0.011275f, -0.043248f, -0.000942f, -0.005003f, 0.015956f, -0.026679f, -0.033443f, -0.018994f, 0.015757f, -0.033873f, -0.005342f, -0.028428f, 0.000118f, 0.022843f, -0.000761f, -0.042592f, -0.009422f, 0.005609f, 0.011130f, 0.005269f, -0.026598f, -0.017923f, -0.028462f, 0.004366f, -0.006029f, -0.012375f, -0.009548f, -0.012368f, 0.002333f, -0.005179f, -0.011859f, -0.003377f, 0.008245f, -0.000080f, -0.000461f, -0.014472f, -0.000426f, -0.001388f, -0.009274f, 0.000728f, 0.017663f, 0.005902f, 0.003141f, -0.018309f, 0.007013f, + -0.002054f, -0.002204f, 0.002829f, -0.000532f, -0.000400f, -0.003859f, -0.010917f, -0.012234f, -0.009998f, 0.012207f, 0.010709f, -0.005112f, -0.027180f, -0.010166f, -0.010116f, -0.002344f, -0.077320f, 0.029891f, 0.024533f, -0.011324f, -0.051093f, -0.011251f, -0.019664f, -0.020697f, 0.022581f, 0.027894f, -0.002819f, 0.007651f, -0.058053f, 0.020499f, -0.072667f, -0.018358f, -0.006267f, 0.014525f, 0.036635f, 0.058147f, 0.024169f, -0.033591f, 0.007878f, 0.040640f, 0.005462f, 0.012395f, 0.022091f, -0.034143f, -0.013129f, -0.005351f, 0.010440f, -0.024041f, -0.012886f, -0.007259f, -0.018020f, -0.013757f, 0.024755f, 0.024267f, 0.006299f, 0.002061f, 0.041860f, -0.007815f, 0.019595f, -0.047192f, 0.031412f, 0.009006f, -0.042740f, 0.004422f, 0.013817f, -0.040214f, -0.005101f, -0.039329f, 0.013272f, 0.016633f, 0.017792f, -0.026464f, -0.002171f, 0.026516f, -0.021951f, 0.000359f, -0.003445f, 0.043738f, -0.025751f, 0.032236f, 0.016426f, -0.040657f, 0.035861f, -0.029922f, 0.023124f, 0.030357f, -0.030487f, 0.017324f, -0.025991f, -0.032444f, -0.048852f, -0.040813f, -0.044659f, -0.010646f, 0.008125f, -0.013433f, + 0.039303f, 0.040725f, -0.017059f, 0.035897f, -0.005357f, -0.007506f, 0.045731f, -0.010092f, -0.030403f, 0.021307f, -0.004436f, -0.023809f, -0.018206f, 0.018073f, 0.003357f, 0.009393f, 0.014427f, 0.002575f, 0.011901f, 0.018182f, -0.004673f, 0.020381f, 0.014152f, 0.010192f, 0.011735f, 0.001749f, 0.007282f, 0.017327f, 0.014107f, 0.017566f, 0.002816f, 0.014594f, -0.002514f, 0.001060f, 0.012895f, -0.006234f, -0.022581f, 0.010841f, 0.003866f, 0.000076f, 0.000705f, 0.010352f, -0.019946f, 0.010412f, 0.014450f, 0.011579f, -0.013128f, 0.012705f, -0.061099f, -0.028814f, -0.029995f, 0.053710f, 0.001757f, 0.020165f, -0.008580f, 0.076109f, 0.012126f, -0.050602f, 0.003848f, 0.055960f, -0.020545f, 0.012576f, -0.009091f, 0.004983f, -0.032498f, -0.043869f, 0.069951f, 0.049840f, -0.018999f, 0.038289f, 0.015116f, 0.049763f, 0.056539f, -0.016347f, -0.013203f, 0.050312f, 0.036894f, 0.004221f, -0.015749f, -0.024793f, -0.026053f, 0.023368f, 0.044353f, 0.020939f, -0.007971f, 0.029878f, -0.015544f, 0.028364f, -0.012531f, 0.041297f, 0.073011f, 0.055656f, -0.059293f, 0.027268f, -0.010033f, -0.024067f, + -0.000702f, 0.020812f, 0.020071f, 0.133305f, -0.013371f, -0.001279f, -0.021606f, -0.023532f, 0.026018f, 0.048225f, -0.011711f, 0.036684f, 0.031310f, -0.004091f, 0.001184f, -0.025825f, 0.026481f, 0.022290f, 0.070932f, 0.072154f, 0.087586f, 0.036446f, -0.022276f, -0.018027f, -0.040153f, 0.039351f, -0.059424f, 0.043116f, -0.055776f, 0.032898f, -0.019633f, -0.033516f, 0.024345f, -0.090350f, -0.071465f, 0.013095f, 0.014108f, -0.025815f, -0.025032f, 0.042229f, 0.021077f, -0.038740f, 0.005820f, -0.008786f, -0.021188f, 0.007001f, 0.010927f, 0.003364f, 0.011072f, 0.012997f, 0.022834f, -0.010507f, 0.004495f, -0.012716f, -0.022555f, -0.013772f, 0.005467f, 0.002005f, 0.031297f, 0.006709f, -0.007505f, -0.025283f, 0.004072f, -0.010002f, -0.008091f, -0.011228f, 0.008797f, 0.018876f, 0.006733f, 0.016387f, 0.013765f, 0.021654f, -0.009035f, 0.016505f, 0.002240f, 0.004834f, -0.001420f, 0.001444f, -0.012647f, 0.015222f, 0.036328f, 0.019493f, -0.003766f, -0.004010f, 0.028887f, 0.024214f, -0.022260f, 0.007148f, 0.014553f, -0.011161f, 0.041785f, 0.009439f, -0.097950f, 0.022463f, 0.012831f, -0.072866f, + 0.004289f, -0.012504f, 0.003017f, 0.026685f, -0.003543f, -0.067350f, -0.011970f, -0.021478f, -0.003786f, 0.047665f, 0.057222f, -0.032593f, -0.008227f, -0.027362f, 0.014076f, -0.051615f, -0.100098f, -0.035881f, -0.030247f, 0.005229f, 0.001617f, 0.045482f, -0.068444f, 0.032569f, -0.015945f, -0.007598f, 0.028064f, 0.013163f, 0.047541f, 0.010808f, 0.018274f, 0.050864f, -0.058218f, 0.072541f, 0.057575f, 0.030004f, 0.053994f, -0.021042f, 0.020460f, -0.050685f, -0.010150f, -0.025540f, 0.044707f, -0.039746f, 0.009498f, -0.085288f, -0.105783f, 0.070508f, -0.003361f, 0.045472f, -0.032204f, 0.030081f, -0.021081f, 0.006482f, -0.012147f, -0.069311f, -0.022021f, -0.046355f, -0.022115f, 0.025011f, 0.102526f, 0.036589f, -0.090750f, -0.020567f, 0.023816f, -0.021061f, -0.013754f, -0.059924f, -0.031157f, 0.046176f, -0.017527f, 0.011133f, 0.008876f, -0.037369f, 0.023375f, -0.005510f, 0.001582f, -0.076631f, -0.022549f, -0.001687f, -0.035257f, -0.019910f, 0.002632f, -0.051877f, 0.005123f, 0.011543f, -0.042226f, -0.033047f, -0.059507f, -0.044202f, -0.004432f, -0.024506f, -0.012053f, 0.001427f, -0.017306f, -0.016783f, + -0.007315f, -0.026202f, -0.012916f, 0.003306f, 0.017402f, -0.023117f, -0.008650f, -0.039541f, 0.013537f, 0.009646f, 0.022802f, -0.016406f, 0.023717f, -0.051144f, -0.003483f, -0.000065f, -0.004062f, 0.007745f, -0.008792f, 0.005349f, -0.024211f, -0.024941f, 0.007173f, 0.006162f, -0.060045f, 0.031908f, 0.031879f, 0.056481f, -0.027323f, 0.020798f, -0.031428f, -0.036561f, 0.016539f, 0.074948f, 0.121366f, -0.007405f, -0.007861f, 0.002696f, -0.002514f, -0.053861f, 0.084982f, 0.040878f, 0.045290f, 0.034915f, -0.024376f, 0.029584f, -0.047621f, -0.068677f, -0.011703f, 0.051670f, 0.033694f, -0.024488f, -0.015716f, -0.003283f, 0.041874f, 0.001892f, 0.030573f, 0.029902f, 0.049551f, 0.016585f, -0.030884f, -0.029374f, 0.028410f, -0.033085f, -0.024583f, 0.014740f, 0.054410f, 0.050112f, -0.056946f, -0.044078f, 0.029648f, 0.035262f, 0.106790f, -0.024640f, -0.057867f, -0.060060f, 0.051200f, -0.038401f, 0.048319f, 0.054524f, 0.109883f, 0.232887f, -0.051865f, -0.029578f, -0.087047f, -0.138790f, -0.044100f, -0.069853f, 0.008207f, 0.096642f, -0.013999f, 0.051218f, 0.073132f, 0.047883f, -0.026762f, -0.085945f, + -0.140669f, 0.078708f, -0.005337f, 0.089513f, -0.045763f, -0.122087f, 0.042840f, -0.072330f, -0.096210f, -0.049435f, -0.030478f, 0.030776f, 0.030483f, 0.054995f, -0.003875f, -0.026680f, -0.004035f, -0.002194f, -0.049670f, -0.048295f, 0.024827f, -0.017075f, 0.049517f, 0.044949f, -0.021242f, 0.044749f, -0.035004f, 0.001009f, 0.044312f, 0.004758f, -0.068393f, 0.018325f, -0.034325f, -0.006006f, -0.010875f, -0.009199f, -0.050351f, -0.041419f, 0.008301f, 0.060021f, 0.064590f, -0.060258f, -0.006870f, 0.073282f, 0.070437f, 0.000083f, 0.015075f, -0.066372f, -0.034949f, 0.009822f, 0.039067f, -0.057384f, 0.014968f, 0.044677f, 0.022754f, 0.016892f, 0.005389f, 0.028166f, -0.047001f, 0.008745f, -0.042845f, -0.118152f, 0.029745f, -0.049367f, 0.049036f, 0.007210f, 0.027377f, 0.023998f, -0.108090f, -0.076577f, -0.037934f, -0.023815f, -0.025131f, -0.044175f, -0.013747f, -0.073390f, -0.046753f, 0.035303f, -0.047796f, 0.090956f, -0.067681f, 0.006963f, 0.018738f, -0.007193f, 0.007991f, -0.003903f, 0.021724f, -0.021093f, -0.022747f, -0.003935f, 0.016274f, -0.002864f, 0.038997f, -0.036818f, 0.008293f, 0.057000f, + 0.018249f, 0.008548f, 0.029007f, 0.003598f, -0.023237f, -0.014791f, 0.046234f, 0.010373f, -0.073129f, -0.032416f, -0.059343f, -0.027008f, 0.078593f, 0.073306f, -0.075751f, -0.008379f, -0.086126f, -0.020754f, -0.007184f, 0.019857f, 0.043145f, -0.070536f, 0.047026f, -0.060051f, -0.010188f, -0.040685f, 0.090490f, -0.018302f, 0.063814f, 0.059712f, 0.132866f, -0.061225f, 0.054776f, 0.008918f, 0.052041f, 0.018181f, 0.039693f, -0.066601f, -0.061212f, 0.088779f, 0.004290f, -0.003352f, -0.062916f, 0.071677f, -0.024312f, 0.036769f, -0.066223f, 0.139090f, -0.074579f, 0.077373f, -0.093369f, 0.036860f, -0.070392f, 0.038847f, -0.064861f, 0.048036f, -0.041108f, 0.028212f, -0.022982f, 0.015532f, -0.034995f, -0.021606f, -0.016617f, -0.004370f, 0.012264f, 0.002140f, 0.009868f, 0.000798f, 0.009690f, -0.005294f, -0.017935f, -0.028266f, 0.012697f, 0.014025f, 0.003945f, 0.012845f, -0.010688f, 0.004994f, -0.008505f, 0.005249f, 0.047679f, -0.012097f, -0.034486f, 0.004803f, -0.019622f, -0.036686f, 0.011449f, -0.020068f, 0.014418f, -0.016843f, 0.011937f, -0.032072f, 0.012759f, -0.041448f, 0.057931f, 0.008914f, + -0.106552f, -0.046931f, -0.066047f, 0.003594f, -0.015501f, -0.143856f, -0.065371f, -0.037769f, -0.076682f, -0.047784f, -0.144968f, -0.122388f, -0.022421f, 0.051958f, -0.079918f, -0.047808f, -0.011880f, -0.068102f, -0.015862f, -0.005719f, -0.065920f, -0.017803f, 0.013126f, 0.002939f, -0.087396f, -0.049864f, -0.049995f, -0.027926f, -0.031166f, -0.009230f, -0.060788f, 0.050057f, 0.032510f, 0.071597f, 0.104286f, 0.090645f, 0.022887f, 0.095851f, 0.038201f, 0.016772f, -0.043133f, 0.033314f, 0.034666f, 0.027323f, -0.011544f, -0.033370f, -0.015673f, 0.023678f, 0.042397f, 0.219569f, 0.029430f, 0.044891f, 0.031930f, 0.089521f, 0.034412f, 0.078566f, 0.143426f, -0.069872f, -0.141293f, 0.017052f, 0.089572f, 0.160294f, 0.070826f, -0.139368f, 0.018328f, -0.035150f, 0.202389f, 0.148752f, 0.181016f, 0.165909f, -0.145079f, -0.095934f, 0.118139f, 0.141901f, -0.042060f, -0.083389f, -0.100499f, 0.224070f, 0.149085f, -0.010292f, -0.193897f, 0.045676f, -0.007962f, -0.043689f, 0.052706f, 0.013627f, -0.017476f, -0.042250f, -0.001378f, 0.029668f, 0.082862f, 0.058509f, -0.050412f, -0.020932f, -0.014004f, -0.011605f, + 0.046482f, 0.033308f, 0.035890f, -0.000507f, 0.018913f, 0.075878f, 0.051397f, 0.009699f, 0.029972f, -0.022246f, 0.037550f, 0.048507f, 0.064350f, 0.081984f, 0.064034f, 0.048541f, -0.000304f, -0.012604f, -0.017826f, -0.007032f, -0.037870f, -0.021784f, -0.018582f, -0.047312f, -0.060484f, -0.069184f, -0.117799f, -0.067775f, -0.044301f, -0.071859f, -0.131025f, -0.091992f, -0.077575f, -0.090808f, -0.107367f, -0.113794f, -0.039433f, -0.044653f, -0.062577f, -0.036070f, -0.039314f, -0.027002f, -0.036964f, -0.036501f, -0.035666f, -0.035289f, -0.104105f, 0.167007f, 0.134841f, -0.116665f, 0.026081f, -0.002642f, 0.018769f, -0.004482f, -0.011559f, 0.043059f, -0.043224f, 0.042065f, -0.017147f, 0.000232f, 0.016564f, 0.013621f, 0.014938f, -0.000035f, -0.024543f, -0.015561f, 0.026789f, -0.021976f, -0.002914f, 0.026008f, -0.014236f, -0.014660f, -0.020687f, -0.037545f, -0.037967f, 0.027824f, -0.013948f, 0.010468f, -0.023957f, 0.004931f, -0.050657f, -0.008931f, 0.013636f, 0.032694f, -0.020867f, 0.007303f, 0.022045f, 0.035811f, -0.008780f, 0.029700f, -0.024200f, 0.094121f, -0.035155f, 0.032633f, 0.004009f, 0.018610f, + -0.017921f, 0.025180f, -0.010332f, 0.067194f, -0.011295f, 0.021036f, -0.047105f, 0.061704f, -0.032691f, -0.002155f, -0.009509f, 0.009294f, -0.018770f, 0.037232f, -0.042993f, 0.035023f, -0.039465f, 0.051000f, -0.053432f, 0.064579f, -0.043189f, -0.022604f, -0.027301f, -0.013018f, 0.001974f, -0.041778f, 0.026901f, -0.024577f, 0.023496f, 0.002404f, 0.032692f, 0.013022f, 0.022380f, 0.041087f, 0.016824f, -0.013616f, 0.010209f, 0.010426f, -0.006541f, 0.007806f, -0.013488f, 0.015202f, -0.007946f, 0.000608f, -0.013275f, 0.029141f, -0.029116f, 0.003234f, -0.003458f, 0.023784f, -0.005341f, 0.005404f, -0.006369f, 0.009976f, -0.014375f, 0.010989f, -0.012478f, -0.005286f, 0.020785f, 0.020469f, -0.007070f, -0.019017f, 0.011624f, 0.018266f, 0.017531f, -0.016290f, 0.013323f, -0.010961f, 0.009640f, 0.003612f, 0.002836f, -0.017427f, 0.018276f, -0.006232f, -0.024631f, 0.020340f, 0.016719f, -0.014360f, -0.004781f, -0.002109f, 0.003334f, -0.013761f, 0.019336f, -0.018185f, 0.005456f, -0.019940f, 0.017323f, -0.013926f, 0.014483f, -0.010818f, 0.018164f, -0.020616f, 0.022226f, -0.020206f, 0.009547f, -0.016431f, + 0.016340f, -0.019016f, 0.014753f, -0.011325f, 0.019331f, -0.021929f, 0.022680f, -0.019251f, -0.040948f, -0.084613f, -0.093099f, 0.079144f, 0.019993f, -0.024505f, -0.126165f, -0.050717f, 0.070274f, 0.014325f, 0.050750f, 0.056612f, -0.020457f, -0.035583f, 0.001657f, 0.013414f, 0.010385f, 0.009384f, -0.022347f, -0.016402f, -0.012431f, 0.000059f, 0.034090f, 0.018443f, -0.001704f, 0.007675f, -0.009891f, -0.016508f, -0.010602f, -0.008642f, 0.000550f, 0.010084f, -0.007832f, 0.013014f, 0.013588f, -0.046327f, -0.020666f, -0.020495f, 0.024653f, 0.017222f, -0.001649f, -0.021557f, -0.029261f, 0.025422f, 0.005509f, 0.017054f, 0.023603f, -0.042948f, -0.028709f, 0.007861f, 0.034495f, 0.017496f, -0.049007f, -0.030107f, -0.039839f, -0.018923f, 0.010104f, 0.009001f, -0.016485f, 0.018000f, -0.007514f, -0.017111f, 0.007529f, 0.016411f, -0.012375f, 0.003931f, -0.000625f, -0.015279f, -0.001554f, -0.005374f, -0.034866f, -0.035010f, -0.002321f, -0.037347f, -0.028206f, 0.001227f, 0.011170f, -0.008104f, 0.041078f, 0.030516f, 0.017178f, 0.001360f, -0.004132f, -0.018295f, 0.022671f, 0.011264f, 0.013150f, 0.012953f, + -0.011739f, -0.004781f, -0.001058f, 0.006645f, -0.021803f, -0.026220f, -0.003813f, 0.011687f, 0.001525f, 0.014769f, 0.010031f, -0.013607f, 0.004329f, 0.008191f, 0.005497f, -0.004284f, 0.014475f, -0.018126f, -0.011081f, 0.033769f, 0.019128f, -0.020531f, -0.015733f, -0.010365f, -0.018642f, 0.020590f, -0.000877f, 0.003115f, 0.009184f, 0.006265f, -0.000406f, -0.000570f, -0.013940f, 0.008985f, 0.005060f, 0.012275f, -0.006970f, -0.001756f, 0.007643f, 0.032850f, -0.081694f, -0.222703f, -0.084618f, 0.050787f, 0.107345f, 0.253070f, 0.148766f, 0.040512f, 0.053019f, -0.043771f, -0.081831f, -0.179134f, -0.120772f, -0.092573f, -0.030258f, 0.036810f, 0.098685f, 0.076724f, 0.095804f, 0.092582f, 0.062770f, -0.021070f, -0.072958f, -0.063143f, -0.064905f, -0.052139f, -0.075249f, 0.023212f, -0.047556f, 0.003585f, 0.035064f, 0.064804f, 0.036576f, 0.060668f, 0.079940f, 0.001593f, 0.023872f, 0.001870f, -0.001202f, -0.044548f, -0.005883f, -0.039627f, -0.077524f, -0.122324f, -0.068163f, -0.037244f, 0.009899f, 0.009427f, 0.072812f, 0.101141f, 0.097168f, 0.115736f, 0.016856f, 0.075995f, 0.030097f, -0.006724f, + -0.071123f, -0.069591f, -0.094600f, -0.124103f, -0.084674f, -0.096137f, -0.060937f, 0.000488f, 0.029855f, 0.069295f, 0.111757f, 0.164711f, 0.131898f, 0.119612f, 0.064716f, -0.024526f, -0.024355f, -0.064479f, -0.137437f, -0.105468f, -0.173680f, -0.114072f, -0.050588f, -0.038378f, 0.054288f, 0.104405f, 0.142894f, 0.100996f, 0.077233f, 0.047095f, 0.053532f, 0.047195f, -0.007524f, -0.053958f, -0.051613f, -0.081251f, -0.090099f, -0.071543f, -0.049063f, -0.045447f, -0.043368f, 0.020030f, 0.042222f, 0.074914f, 0.088687f, 0.072937f, 0.063921f, 0.036666f, 0.001252f, 0.002030f, 0.008233f, -0.053718f, -0.091469f, -0.037278f, -0.079892f, -0.090338f, -0.003094f, 0.022823f, 0.050412f, 0.052378f, 0.033309f, 0.055350f, 0.032000f, 0.044324f, -0.009366f, -0.000733f, -0.038774f, -0.023085f, -0.020633f, -0.025411f, -0.029408f, -0.023459f, 0.003831f, -0.009651f, -0.000028f, 0.027076f, 0.037195f, 0.023689f, 0.020349f, -0.004969f, -0.006645f, -0.000142f, -0.000684f, -0.011175f, -0.013588f, -0.002040f, -0.008126f, -0.007949f, -0.005068f, 0.000332f, -0.008575f, -0.002637f, 0.016111f, 0.005882f, 0.007048f, 0.010590f, + 0.007471f, 0.002264f, 0.000367f, -0.001858f, -0.002210f, -0.001332f, -0.000878f}, + {0.015042f, 0.009628f, 0.000264f, 0.000504f, 0.011849f, 0.002948f, -0.005897f, 0.004024f, 0.007887f, -0.004000f, -0.006537f, -0.023512f, 0.001258f, -0.007913f, 0.015702f, -0.007796f, 0.007877f, 0.006336f, -0.000811f, 0.005119f, 0.008694f, 0.002361f, 0.002040f, -0.004296f, -0.005151f, -0.004012f, -0.006492f, 0.005656f, 0.003396f, -0.003086f, 0.005126f, -0.003550f, -0.005182f, -0.006228f, -0.002978f, -0.004926f, 0.000440f, 0.000057f, -0.000891f, 0.010731f, -0.006195f, 0.008772f, -0.003150f, -0.002264f, 0.005935f, -0.003686f, 0.001877f, -0.003689f, 0.006508f, -0.001944f, -0.018336f, 0.005428f, 0.000682f, 0.002217f, 0.009282f, 0.004736f, 0.000710f, -0.002139f, -0.006031f, 0.015683f, -0.008270f, 0.006069f, 0.003252f, -0.006557f, 0.006675f, 0.002894f, -0.007632f, 0.006040f, -0.007871f, 0.000395f, -0.000759f, 0.006875f, 0.001206f, 0.007186f, -0.002729f, -0.016299f, -0.003403f, -0.003989f, -0.007640f, -0.006983f, -0.006768f, 0.005525f, 0.002546f, 0.001882f, 0.003485f, 0.003314f, 0.000762f, 0.001524f, -0.001815f, 0.001047f, -0.001313f, -0.000738f, -0.003869f, -0.000150f, -0.001219f, 0.002901f, + -0.000193f, -0.001054f, -0.000503f, 0.000211f, -0.001948f, 0.000594f, -0.000783f, 0.000998f, -0.000543f, 0.000089f, -0.002252f, -0.000415f, -0.002839f, -0.001944f, 0.028570f, -0.014160f, 0.001546f, -0.000897f, -0.000875f, 0.006467f, -0.005187f, -0.020586f, -0.018973f, 0.008867f, -0.006030f, -0.001801f, 0.004793f, 0.001002f, 0.004731f, 0.005278f, -0.009062f, 0.004820f, 0.003318f, -0.006443f, 0.007435f, 0.011213f, -0.007403f, -0.002476f, 0.000511f, -0.012219f, -0.005547f, 0.001162f, 0.014477f, -0.002409f, -0.000872f, -0.012176f, 0.007109f, -0.000063f, -0.010918f, -0.004713f, 0.003718f, -0.001721f, 0.002051f, -0.009468f, -0.000287f, 0.000564f, -0.003890f, 0.009960f, 0.002478f, 0.002175f, 0.009631f, -0.001089f, 0.012527f, -0.004313f, -0.016070f, 0.006384f, 0.006201f, -0.005718f, -0.002522f, -0.002047f, 0.001922f, 0.000631f, 0.004397f, -0.003752f, 0.002888f, -0.008817f, -0.000455f, 0.005650f, -0.008414f, -0.001067f, 0.004851f, 0.001475f, -0.004429f, 0.002789f, -0.003368f, 0.000820f, 0.008135f, 0.002865f, -0.011323f, 0.013603f, 0.005080f, 0.004959f, -0.001224f, 0.007799f, 0.008693f, -0.003868f, + -0.000593f, 0.001869f, 0.002200f, 0.002679f, 0.003643f, -0.000436f, 0.000259f, 0.002692f, -0.000437f, 0.000339f, 0.001683f, 0.004210f, -0.000725f, 0.004289f, -0.000203f, 0.000995f, 0.002185f, 0.000531f, -0.001296f, -0.000407f, 0.001484f, 0.001427f, -0.000288f, -0.001988f, -0.006987f, -0.016763f, -0.002070f, 0.001721f, 0.018343f, -0.007093f, 0.015710f, 0.003885f, -0.000617f, 0.000906f, 0.014046f, -0.003357f, -0.003944f, -0.004159f, 0.009875f, 0.020150f, 0.005216f, -0.014013f, -0.019002f, -0.026987f, 0.003446f, -0.007100f, -0.011399f, -0.006279f, -0.017630f, -0.000150f, -0.008227f, 0.001258f, 0.008343f, 0.008811f, -0.010089f, -0.009023f, -0.006449f, 0.001063f, -0.014974f, -0.001686f, 0.004545f, -0.006803f, -0.002540f, 0.001506f, 0.005918f, -0.008423f, 0.002099f, 0.019624f, -0.000901f, -0.001011f, -0.007339f, 0.008142f, -0.003737f, 0.000671f, 0.006169f, 0.008099f, 0.012022f, -0.001984f, 0.001701f, -0.003696f, -0.000249f, -0.002117f, 0.001515f, 0.018863f, -0.021095f, 0.000424f, 0.003996f, 0.011129f, -0.004735f, -0.005602f, -0.001324f, -0.005290f, 0.015019f, -0.008363f, -0.019893f, -0.001409f, + -0.005999f, -0.008328f, 0.004827f, -0.019637f, 0.007153f, -0.002130f, -0.005534f, 0.000365f, 0.013752f, -0.004131f, -0.005299f, -0.005368f, 0.006544f, -0.006250f, -0.001782f, 0.001146f, -0.000661f, 0.002367f, 0.000126f, 0.000914f, 0.004015f, 0.000317f, 0.000979f, -0.001042f, 0.003208f, 0.000714f, -0.000754f, -0.003737f, -0.002100f, -0.000289f, -0.002054f, 0.003826f, 0.002236f, -0.002188f, 0.002761f, 0.000290f, 0.000325f, -0.002028f, 0.000967f, -0.000886f, -0.000010f, -0.030749f, 0.011486f, -0.009617f, 0.012890f, -0.011583f, -0.001052f, 0.008926f, -0.017787f, -0.003052f, 0.005421f, -0.004838f, 0.025910f, -0.010869f, -0.003288f, -0.010368f, -0.008679f, 0.013320f, 0.014800f, 0.005738f, -0.017453f, -0.021048f, 0.019461f, 0.003274f, -0.019744f, 0.007381f, 0.000712f, 0.009348f, -0.005868f, 0.008921f, -0.011823f, 0.005769f, 0.019040f, 0.007890f, 0.008143f, 0.004343f, 0.000312f, -0.004835f, 0.003958f, 0.001505f, -0.013031f, 0.000238f, -0.004152f, -0.009533f, -0.009565f, -0.003598f, 0.007500f, -0.013688f, 0.001838f, -0.009894f, -0.001054f, -0.001488f, 0.004488f, 0.008164f, 0.017181f, 0.006113f, + -0.000142f, 0.007435f, -0.009249f, -0.013509f, -0.000288f, 0.003193f, 0.001359f, 0.016404f, -0.003774f, -0.001958f, -0.005285f, -0.002271f, 0.002273f, 0.007994f, -0.002213f, 0.003371f, -0.008177f, 0.013293f, -0.003535f, -0.004575f, -0.003119f, 0.004346f, -0.007252f, 0.000282f, 0.008125f, -0.000524f, -0.002418f, 0.001272f, 0.006437f, 0.005190f, -0.001086f, 0.004198f, -0.003594f, 0.002684f, -0.002205f, 0.001088f, 0.004581f, -0.001570f, 0.001912f, 0.002058f, -0.003260f, 0.003269f, 0.001872f, 0.000791f, -0.001449f, -0.002809f, -0.000779f, 0.003655f, 0.002285f, -0.001159f, 0.001344f, -0.000604f, 0.005761f, -0.000438f, -0.001731f, -0.015341f, -0.003556f, -0.009947f, -0.000989f, 0.020445f, 0.013079f, 0.009147f, -0.001522f, -0.017939f, 0.002538f, -0.011793f, -0.019015f, -0.006293f, 0.013738f, -0.010728f, -0.016858f, 0.004441f, 0.001480f, -0.008384f, 0.001835f, 0.009640f, 0.002677f, -0.022482f, -0.006350f, 0.014174f, 0.016693f, 0.008338f, -0.018626f, -0.006741f, 0.008531f, -0.003152f, -0.003987f, 0.001237f, 0.006275f, 0.001032f, 0.002337f, 0.019171f, 0.000065f, 0.011607f, 0.009004f, -0.000121f, + -0.008593f, -0.000186f, -0.005058f, 0.011440f, -0.006500f, -0.010864f, 0.000052f, 0.017933f, 0.001032f, 0.017815f, 0.009615f, 0.001750f, 0.011521f, -0.001914f, 0.024726f, 0.002017f, 0.012245f, 0.013945f, 0.001314f, -0.011488f, -0.001741f, -0.013749f, 0.007055f, -0.009847f, -0.005511f, -0.009078f, -0.005978f, -0.004346f, 0.004544f, 0.001550f, 0.006828f, -0.000262f, -0.007846f, -0.006829f, 0.002580f, 0.012742f, -0.003749f, 0.003166f, -0.013637f, 0.004345f, 0.011819f, 0.018134f, -0.006222f, -0.001332f, 0.003017f, -0.006214f, -0.000455f, 0.005996f, -0.001817f, 0.011002f, 0.000739f, 0.002515f, 0.000289f, 0.000536f, 0.004066f, -0.002666f, -0.001728f, -0.001417f, -0.000814f, 0.001121f, 0.001372f, -0.002059f, 0.001808f, -0.000622f, -0.002184f, -0.002663f, 0.000914f, -0.002529f, -0.001663f, -0.003173f, 0.001553f, 0.002206f, -0.000456f, 0.006199f, -0.004015f, 0.001094f, -0.000436f, -0.003513f, 0.005898f, -0.001703f, -0.000838f, 0.018626f, -0.027849f, -0.005138f, 0.023315f, -0.011587f, 0.004260f, -0.018008f, 0.007924f, 0.032796f, -0.004441f, 0.001720f, -0.001389f, -0.023196f, 0.001871f, -0.001494f, + 0.034813f, -0.011004f, -0.001704f, 0.015199f, -0.009595f, 0.021557f, -0.014547f, -0.002196f, -0.021994f, 0.024847f, 0.000345f, -0.009811f, 0.000319f, 0.009086f, -0.011560f, 0.017264f, -0.001835f, 0.015296f, -0.000105f, 0.007999f, -0.024036f, -0.015502f, -0.011210f, -0.003635f, 0.014500f, -0.021820f, 0.011656f, 0.008967f, 0.003049f, -0.009056f, -0.013127f, 0.029922f, 0.005963f, -0.003435f, 0.011634f, -0.010624f, 0.006314f, -0.014132f, -0.013827f, -0.005810f, -0.009278f, 0.032312f, 0.009679f, -0.006473f, -0.009599f, -0.012388f, 0.010190f, 0.008355f, 0.003078f, -0.011433f, -0.001371f, -0.004663f, 0.013845f, 0.001198f, 0.011204f, -0.026180f, 0.014233f, -0.002346f, 0.000725f, -0.002964f, 0.004621f, -0.011591f, -0.005336f, -0.018179f, -0.005904f, 0.006530f, 0.011083f, 0.011622f, 0.004352f, 0.004194f, 0.002759f, -0.006550f, 0.003898f, 0.002593f, -0.000448f, -0.004417f, -0.007201f, 0.003794f, 0.003646f, -0.005601f, 0.002889f, 0.000320f, -0.004527f, 0.002923f, 0.000868f, -0.002026f, -0.001044f, 0.000215f, 0.000924f, -0.003437f, 0.002375f, 0.001218f, -0.005215f, -0.001302f, -0.002659f, 0.000354f, + 0.003740f, 0.002465f, -0.000516f, 0.000082f, -0.002399f, 0.000286f, -0.002211f, 0.011789f, 0.005802f, 0.009715f, 0.002871f, 0.000105f, -0.003705f, -0.014925f, -0.004650f, -0.009632f, 0.005857f, -0.000575f, 0.022409f, -0.018864f, -0.024294f, -0.006166f, 0.007528f, -0.007609f, -0.005910f, 0.019046f, 0.003789f, -0.010592f, -0.012198f, -0.012649f, 0.020825f, -0.010578f, 0.014057f, -0.006867f, 0.015384f, -0.015465f, 0.003334f, 0.023632f, 0.008054f, -0.032366f, 0.007373f, 0.000650f, -0.004201f, -0.002955f, 0.003248f, -0.003941f, 0.003067f, -0.005355f, 0.002517f, -0.001397f, -0.014504f, 0.014369f, 0.014756f, -0.004509f, 0.016354f, -0.014104f, -0.002503f, -0.004127f, -0.006751f, 0.017993f, -0.013091f, -0.023152f, -0.013001f, 0.004249f, -0.018887f, -0.017615f, -0.008838f, -0.006008f, -0.012126f, -0.001094f, 0.015352f, 0.016164f, 0.002411f, 0.017433f, 0.005402f, 0.002263f, 0.013203f, -0.014294f, -0.002573f, -0.000084f, -0.011748f, -0.000204f, -0.011383f, 0.013594f, -0.004007f, -0.002586f, 0.011304f, -0.002175f, -0.003656f, -0.002441f, 0.013511f, -0.001749f, 0.004669f, -0.013313f, -0.004764f, 0.007310f, + -0.008653f, 0.000542f, 0.000168f, 0.001382f, -0.006611f, -0.004606f, -0.003512f, 0.000127f, -0.003654f, -0.004349f, 0.001293f, -0.000738f, -0.003906f, -0.001768f, 0.000431f, -0.000492f, -0.001264f, -0.001387f, -0.002276f, 0.000619f, -0.007170f, -0.005027f, -0.004851f, -0.004821f, -0.000007f, -0.000351f, -0.001752f, 0.001646f, 0.036000f, -0.017780f, -0.017115f, 0.011591f, 0.029258f, 0.005687f, 0.026351f, 0.015039f, 0.023932f, 0.010602f, -0.004477f, -0.010869f, 0.008571f, -0.017891f, -0.013609f, 0.019970f, 0.016705f, 0.041733f, -0.001076f, 0.005805f, -0.015459f, 0.016118f, 0.007303f, -0.018604f, -0.004410f, 0.023635f, -0.000077f, -0.026045f, -0.010519f, -0.014700f, -0.004987f, 0.014525f, 0.013345f, -0.009880f, -0.004787f, 0.018118f, -0.017555f, 0.008062f, 0.015273f, 0.018246f, -0.009735f, 0.015706f, -0.006629f, -0.023723f, 0.008390f, 0.021774f, -0.005811f, 0.006287f, 0.005333f, -0.007381f, 0.002679f, 0.006525f, -0.006748f, 0.002429f, 0.017657f, -0.010383f, -0.005463f, 0.016275f, -0.003466f, -0.003288f, -0.026960f, -0.009552f, -0.016266f, -0.026781f, -0.018006f, 0.013445f, -0.008745f, -0.011449f, + 0.023241f, 0.023202f, -0.005819f, 0.024954f, 0.010049f, 0.016394f, -0.004557f, -0.012905f, 0.010838f, -0.013383f, -0.026680f, -0.016104f, -0.006816f, 0.013188f, 0.006143f, 0.022108f, 0.003967f, -0.004771f, -0.003518f, -0.000015f, 0.003904f, -0.006880f, 0.000514f, -0.004001f, -0.000508f, 0.003875f, -0.000598f, 0.000615f, 0.007230f, -0.002607f, -0.001217f, 0.007100f, -0.005148f, -0.002688f, -0.003381f, 0.002089f, -0.003778f, 0.002580f, 0.001677f, 0.001093f, 0.003832f, 0.004765f, 0.002266f, 0.008613f, 0.001153f, 0.005879f, 0.002109f, 0.004411f, 0.005198f, -0.004500f, 0.004161f, 0.004326f, -0.003034f, -0.001007f, -0.000334f, -0.006287f, 0.001922f, -0.018175f, -0.019443f, 0.026336f, -0.004386f, 0.060164f, -0.024777f, -0.011651f, -0.001380f, 0.014681f, -0.008386f, -0.008195f, -0.024783f, -0.028680f, 0.012958f, 0.002490f, 0.039599f, 0.012827f, -0.004034f, -0.004521f, 0.026308f, 0.026848f, -0.022175f, 0.016114f, -0.021181f, 0.005570f, -0.009115f, -0.010927f, -0.006491f, 0.004507f, -0.003433f, 0.013941f, 0.007006f, 0.015600f, -0.001928f, -0.007454f, -0.014634f, -0.002844f, 0.017075f, 0.001519f, + -0.022639f, -0.002860f, 0.005537f, -0.009687f, 0.017976f, 0.015158f, 0.003182f, 0.005267f, -0.049455f, -0.018964f, 0.017322f, -0.001169f, 0.027805f, 0.007742f, 0.031339f, -0.003527f, -0.016902f, 0.016706f, -0.009434f, 0.011392f, 0.002072f, 0.045598f, 0.037760f, 0.004441f, 0.010718f, -0.006229f, 0.015047f, 0.015897f, 0.017254f, 0.018584f, 0.030303f, -0.000569f, 0.005487f, -0.011612f, -0.010045f, 0.009459f, -0.014085f, -0.035099f, -0.025952f, -0.000628f, 0.021859f, -0.011018f, -0.019773f, -0.011419f, -0.010629f, -0.001209f, -0.023615f, -0.000975f, 0.004477f, -0.000184f, -0.003112f, -0.002356f, 0.002540f, 0.005090f, -0.000560f, 0.003829f, -0.017604f, -0.010879f, -0.005560f, -0.012576f, 0.001204f, -0.004564f, -0.007215f, -0.004951f, -0.002883f, 0.007128f, 0.003029f, -0.006760f, 0.002303f, 0.015807f, 0.008261f, -0.003388f, -0.005541f, -0.007257f, -0.004086f, -0.005860f, -0.012278f, 0.004508f, -0.004663f, -0.001043f, 0.009119f, 0.002895f, -0.001657f, 0.001685f, -0.052257f, 0.041185f, -0.001213f, 0.004660f, -0.014497f, 0.023079f, -0.049617f, -0.031814f, -0.010052f, -0.012762f, -0.001231f, -0.044487f, + 0.008673f, 0.000885f, -0.001225f, -0.020330f, -0.020695f, 0.008383f, 0.028302f, 0.004364f, -0.037842f, -0.008220f, -0.030991f, 0.024434f, 0.015755f, 0.001206f, -0.013738f, -0.006507f, -0.007028f, 0.020133f, -0.002903f, -0.000429f, -0.004394f, -0.027415f, 0.014209f, 0.019184f, -0.011511f, -0.006152f, 0.014912f, -0.029837f, -0.021756f, -0.032915f, -0.011173f, 0.008259f, -0.021007f, -0.010037f, -0.000915f, -0.034083f, 0.010391f, 0.021002f, 0.037183f, 0.005343f, -0.003713f, 0.002272f, -0.024487f, -0.019202f, 0.028465f, -0.002044f, -0.010845f, -0.006742f, -0.043624f, -0.023410f, 0.008520f, -0.009224f, -0.005100f, -0.003412f, 0.028519f, -0.004960f, -0.027128f, 0.002165f, 0.021116f, -0.000554f, -0.013311f, -0.000272f, 0.001450f, -0.011214f, -0.019024f, 0.014932f, -0.034970f, -0.017311f, -0.000267f, 0.016894f, -0.021375f, 0.013512f, 0.008950f, 0.012311f, 0.013118f, -0.013428f, -0.003397f, 0.016099f, 0.003079f, -0.009845f, 0.009237f, 0.013325f, -0.012457f, 0.004631f, 0.011954f, 0.011290f, 0.017735f, 0.001199f, -0.005417f, -0.003027f, 0.002913f, 0.000246f, 0.007801f, 0.006575f, 0.000610f, -0.001607f, + -0.005655f, -0.001919f, 0.003913f, 0.007929f, -0.013097f, 0.001708f, -0.002476f, 0.005447f, 0.012665f, 0.000649f, 0.008877f, -0.004702f, 0.005906f, 0.007264f, 0.010689f, 0.008344f, 0.010435f, -0.000739f, 0.006007f, -0.001884f, 0.005106f, 0.027683f, 0.025424f, 0.009250f, 0.043056f, -0.019197f, -0.008937f, 0.007012f, -0.011230f, -0.003277f, 0.014090f, 0.046135f, -0.007397f, 0.009409f, -0.000246f, -0.002787f, -0.000719f, 0.050880f, -0.024588f, 0.026429f, -0.000227f, -0.033278f, 0.011095f, -0.033010f, -0.020161f, 0.019168f, -0.017371f, 0.013583f, 0.000779f, 0.001897f, 0.022830f, 0.018317f, -0.027334f, -0.030972f, -0.023273f, -0.007742f, 0.008936f, 0.009043f, 0.003409f, 0.006229f, -0.037241f, 0.005798f, -0.019966f, -0.046895f, 0.032058f, -0.009161f, 0.030151f, 0.032246f, 0.001924f, 0.012103f, -0.017105f, -0.020830f, -0.036930f, 0.008589f, 0.033987f, 0.006073f, -0.014819f, 0.002097f, -0.007422f, 0.005288f, -0.019851f, -0.016217f, -0.019820f, 0.003526f, -0.002333f, -0.006407f, 0.021940f, 0.019745f, 0.011922f, 0.031926f, 0.003677f, -0.033396f, 0.043370f, -0.031516f, -0.009631f, -0.007832f, + -0.008260f, 0.036355f, -0.005686f, -0.051834f, 0.044291f, -0.017159f, -0.010453f, 0.012208f, 0.011331f, 0.034146f, 0.021867f, 0.014355f, 0.016770f, 0.015150f, 0.011512f, 0.000758f, 0.014436f, 0.017303f, 0.004709f, 0.000341f, 0.018568f, -0.003161f, 0.002293f, -0.016814f, -0.003911f, -0.005280f, -0.008636f, 0.001528f, -0.001201f, 0.011223f, 0.008256f, 0.003419f, -0.001207f, 0.005469f, 0.002488f, 0.004019f, 0.007681f, -0.002195f, -0.002680f, 0.001691f, -0.002631f, 0.005699f, 0.002810f, 0.002727f, 0.004637f, 0.002674f, 0.017225f, 0.012559f, 0.003771f, 0.039436f, 0.044571f, 0.010417f, -0.083769f, 0.003040f, 0.023718f, -0.027643f, 0.016897f, 0.033549f, 0.001703f, 0.009137f, 0.021226f, 0.016305f, 0.006384f, 0.030158f, 0.006913f, -0.004142f, 0.056682f, 0.021098f, 0.007500f, 0.024508f, -0.018591f, 0.030056f, -0.020910f, -0.001791f, -0.002243f, -0.006893f, -0.030896f, 0.010449f, -0.021810f, 0.040367f, -0.003435f, -0.007887f, 0.059439f, 0.007958f, 0.008845f, 0.019765f, 0.002420f, 0.011408f, -0.013106f, -0.025796f, -0.002739f, 0.017469f, -0.030383f, 0.035534f, 0.032261f, 0.023685f, + 0.006420f, 0.014114f, -0.020914f, -0.021934f, -0.034607f, -0.015363f, -0.018562f, -0.017889f, 0.008534f, -0.003358f, -0.033868f, -0.015109f, 0.030264f, -0.000488f, -0.027886f, 0.015982f, -0.001293f, -0.019151f, -0.045429f, 0.003209f, -0.068988f, 0.040290f, -0.023300f, 0.036648f, 0.002062f, 0.010238f, 0.001490f, -0.013588f, 0.018721f, 0.061961f, 0.005989f, 0.017677f, -0.010526f, -0.048255f, 0.004590f, -0.005189f, 0.035641f, 0.020582f, -0.007993f, -0.001686f, -0.006984f, -0.003795f, 0.012347f, -0.013795f, 0.011619f, -0.001606f, -0.011795f, -0.012209f, 0.013400f, -0.014958f, -0.014387f, -0.020745f, -0.003825f, -0.014910f, 0.005074f, 0.013084f, 0.001277f, -0.003757f, -0.009288f, 0.019095f, -0.017482f, 0.004727f, 0.002740f, 0.001630f, -0.010069f, 0.007616f, 0.019219f, -0.000808f, -0.008871f, -0.002258f, 0.017601f, 0.017800f, -0.013757f, 0.017044f, -0.000725f, -0.004423f, 0.003238f, -0.001072f, 0.019389f, 0.004912f, 0.023097f, 0.017182f, 0.045651f, -0.062795f, 0.024741f, -0.036784f, 0.031322f, -0.015623f, -0.026405f, -0.007585f, -0.030409f, -0.012796f, -0.006822f, 0.010948f, 0.013945f, -0.008889f, + 0.043828f, -0.002091f, -0.007610f, -0.005919f, -0.039804f, -0.004429f, 0.000105f, -0.033476f, 0.010664f, -0.028554f, -0.036019f, -0.011674f, 0.021585f, -0.059582f, -0.040487f, -0.027059f, 0.002995f, -0.041793f, -0.035530f, -0.028775f, -0.014504f, -0.011703f, -0.005557f, -0.028269f, 0.030081f, 0.005108f, -0.003017f, -0.021119f, -0.021735f, 0.040716f, -0.035570f, -0.024341f, 0.010630f, 0.010800f, 0.014570f, -0.020689f, -0.028758f, -0.012183f, -0.005412f, 0.013274f, -0.020680f, -0.008341f, -0.008517f, -0.024666f, -0.042017f, -0.053073f, 0.050052f, -0.054991f, -0.003143f, 0.003826f, -0.009674f, -0.010219f, -0.049199f, 0.018960f, -0.011867f, -0.051574f, -0.001268f, -0.011369f, 0.048398f, 0.011954f, 0.034418f, 0.032786f, -0.009871f, 0.012811f, -0.005486f, -0.009416f, 0.024190f, -0.006173f, 0.013865f, -0.018645f, 0.001369f, -0.018776f, 0.015918f, 0.012482f, 0.002204f, 0.011425f, -0.004973f, -0.001803f, 0.012064f, 0.005785f, -0.011937f, 0.008767f, 0.019724f, -0.003064f, 0.004502f, -0.010778f, -0.025402f, -0.002671f, -0.002290f, -0.000847f, -0.017648f, -0.003816f, 0.002762f, -0.002539f, -0.009428f, 0.012027f, + -0.002250f, -0.006766f, -0.020551f, -0.020724f, 0.000268f, 0.011429f, 0.006680f, 0.004451f, -0.001418f, 0.015001f, 0.016944f, -0.007551f, 0.003643f, 0.004187f, -0.001139f, 0.005148f, -0.055872f, 0.064638f, 0.010236f, 0.006519f, -0.011208f, 0.032818f, 0.000405f, 0.054038f, -0.014736f, 0.037068f, 0.019985f, -0.053304f, 0.023104f, 0.008731f, 0.025306f, -0.004374f, -0.014193f, -0.021247f, -0.007810f, 0.026008f, 0.057292f, 0.006032f, -0.008367f, -0.036278f, 0.013691f, -0.039237f, -0.006195f, 0.039529f, -0.035738f, 0.000018f, 0.002525f, -0.006213f, -0.013481f, -0.015250f, 0.063505f, -0.013762f, -0.015581f, -0.007746f, 0.014415f, 0.021248f, 0.007999f, 0.001000f, -0.012922f, -0.000242f, 0.009520f, 0.038518f, -0.008838f, 0.055128f, 0.032275f, 0.016385f, -0.013250f, 0.048042f, 0.054685f, -0.004562f, -0.014461f, -0.002926f, -0.017748f, 0.005379f, -0.017572f, 0.027512f, 0.009426f, 0.039663f, 0.030731f, -0.048717f, -0.054781f, 0.065679f, 0.048895f, 0.007692f, -0.009255f, -0.026149f, -0.036059f, -0.014189f, 0.037073f, -0.034910f, -0.037635f, -0.005384f, -0.010107f, -0.060375f, -0.013360f, 0.013312f, + -0.023280f, 0.003153f, -0.000063f, 0.003118f, 0.005001f, 0.009947f, -0.017674f, -0.011041f, -0.018161f, -0.006703f, 0.000042f, 0.002618f, -0.009843f, -0.004836f, -0.001625f, -0.029853f, -0.009760f, -0.014271f, -0.006397f, -0.000898f, 0.002797f, 0.001125f, 0.005157f, -0.002030f, 0.001285f, -0.015779f, 0.009202f, -0.013607f, -0.015369f, 0.010952f, 0.004971f, -0.028047f, -0.002811f, -0.008876f, 0.014008f, 0.026452f, 0.000818f, -0.022835f, 0.018458f, -0.005340f, 0.005025f, 0.006203f, -0.007087f, -0.005486f, 0.001953f, -0.012305f, -0.015692f, 0.028580f, -0.023483f, -0.007631f, -0.004970f, 0.005623f, 0.000866f, -0.035274f, -0.102153f, 0.051137f, -0.049140f, 0.019989f, 0.072844f, 0.011106f, -0.030569f, 0.021010f, 0.025370f, -0.010624f, -0.023131f, -0.004817f, -0.050333f, 0.016592f, -0.052314f, -0.031773f, 0.020967f, 0.002150f, 0.009027f, -0.047263f, -0.009645f, -0.034121f, -0.028986f, -0.042098f, -0.014716f, 0.014401f, -0.025093f, -0.025453f, 0.024697f, 0.003404f, -0.002106f, 0.007851f, -0.048437f, -0.002993f, -0.037678f, 0.032222f, 0.008859f, -0.092156f, 0.023175f, 0.049368f, -0.010588f, 0.029444f, + 0.024754f, 0.016717f, 0.013378f, 0.047148f, 0.036938f, 0.001346f, -0.033791f, -0.007155f, 0.037332f, 0.024235f, -0.031324f, 0.002233f, -0.036585f, -0.011796f, 0.002421f, 0.026487f, 0.035444f, -0.065198f, -0.051590f, -0.028871f, 0.005438f, -0.019399f, -0.007219f, 0.060614f, 0.009923f, 0.014333f, 0.047169f, -0.019190f, 0.009688f, -0.012075f, 0.048262f, -0.024626f, 0.001916f, 0.004791f, 0.035736f, -0.010000f, -0.003862f, 0.013075f, 0.014628f, -0.001893f, 0.007108f, 0.023352f, 0.000866f, -0.000763f, -0.001027f, 0.022737f, -0.011608f, -0.007404f, 0.005403f, 0.009821f, 0.006608f, 0.002972f, 0.010653f, -0.005025f, -0.000044f, -0.010456f, -0.000388f, -0.007789f, -0.001249f, -0.010714f, 0.017353f, -0.013207f, -0.019463f, 0.018218f, 0.011864f, 0.012529f, -0.013782f, -0.017618f, -0.000141f, -0.031565f, -0.008785f, -0.016293f, -0.016664f, 0.006361f, -0.000342f, -0.016872f, 0.005483f, 0.006793f, -0.002042f, -0.010008f, -0.009803f, 0.007260f, 0.004346f, 0.014968f, 0.033763f, 0.032628f, -0.057095f, 0.011853f, -0.012348f, -0.015081f, -0.013313f, 0.038171f, 0.020262f, -0.027994f, -0.015975f, 0.029102f, + -0.052503f, 0.002882f, 0.019040f, 0.029152f, -0.006270f, 0.006374f, -0.061251f, -0.000332f, -0.027150f, 0.020372f, 0.007499f, 0.033869f, -0.053861f, -0.027266f, -0.007853f, 0.006532f, -0.004651f, 0.010403f, 0.003838f, 0.029254f, 0.055340f, -0.035158f, -0.045275f, 0.011811f, -0.047178f, -0.014027f, 0.019759f, -0.034414f, -0.033310f, 0.002661f, 0.020539f, 0.028689f, 0.020461f, -0.012997f, -0.002876f, -0.060194f, -0.040475f, 0.053200f, -0.036980f, 0.071855f, -0.030488f, 0.014523f, 0.010583f, -0.000703f, -0.052857f, 0.066147f, -0.030819f, -0.006423f, -0.011858f, 0.025735f, 0.049994f, -0.050650f, -0.028645f, 0.059125f, -0.043792f, -0.000250f, -0.016472f, 0.011945f, 0.068709f, 0.000213f, -0.004944f, -0.042631f, 0.052596f, -0.017285f, 0.013770f, 0.017169f, -0.033062f, -0.040214f, 0.004053f, 0.022896f, -0.011835f, 0.011638f, -0.094808f, -0.044488f, -0.013429f, -0.048630f, -0.023700f, 0.007888f, 0.031657f, -0.006839f, -0.008447f, -0.024973f, 0.000860f, -0.002577f, -0.017883f, -0.006463f, 0.011340f, 0.000707f, 0.015131f, 0.006759f, 0.014364f, -0.018903f, -0.002398f, -0.004152f, 0.019909f, 0.015300f, + -0.011485f, 0.035780f, 0.013588f, -0.014761f, 0.022168f, 0.005730f, -0.001826f, -0.011679f, 0.008620f, -0.008529f, -0.007380f, 0.015822f, 0.001754f, -0.007372f, -0.005941f, 0.013202f, -0.003323f, 0.011900f, -0.002341f, 0.021886f, 0.005082f, 0.002908f, 0.003237f, 0.033071f, -0.037062f, 0.010722f, 0.031280f, 0.030910f, 0.069784f, -0.043871f, 0.064133f, -0.010959f, -0.041472f, -0.040619f, 0.010832f, 0.026936f, -0.018151f, -0.008259f, -0.028438f, -0.011570f, 0.054405f, -0.037879f, -0.003200f, 0.043741f, -0.013707f, 0.026212f, -0.017006f, -0.008017f, 0.046454f, -0.001371f, 0.002711f, 0.044738f, 0.031194f, 0.011142f, -0.005113f, 0.037818f, 0.051652f, -0.052019f, 0.048568f, -0.045927f, 0.024802f, -0.033093f, 0.007350f, 0.039960f, 0.013974f, -0.090014f, 0.040448f, 0.025835f, 0.000097f, 0.045957f, -0.071231f, -0.013631f, 0.049116f, 0.041661f, 0.007343f, 0.065355f, -0.034248f, 0.000947f, -0.007914f, -0.009883f, 0.028376f, 0.011732f, 0.049253f, 0.040859f, -0.030079f, 0.027163f, -0.056209f, -0.017388f, 0.004978f, -0.002727f, -0.003948f, -0.009061f, -0.088209f, -0.048782f, -0.068020f, -0.046359f, + 0.051388f, -0.031537f, -0.007205f, 0.005943f, 0.083850f, -0.019828f, -0.028884f, 0.067035f, 0.041470f, -0.001846f, 0.054671f, 0.008314f, 0.010764f, -0.025248f, 0.000611f, -0.021111f, -0.021875f, -0.011468f, 0.018089f, -0.021354f, -0.010667f, 0.010427f, 0.004532f, 0.016819f, -0.006170f, -0.002787f, 0.022214f, 0.012639f, 0.001859f, -0.017127f, -0.013266f, -0.002118f, -0.004742f, 0.012905f, 0.022200f, -0.001606f, 0.004452f, 0.004996f, -0.008133f, 0.053812f, 0.017264f, 0.003810f, 0.002811f, -0.017621f, 0.014974f, -0.031480f, -0.001663f, 0.027067f, -0.001207f, -0.007215f, 0.020353f, 0.011203f, 0.006736f, -0.000530f, -0.016815f, 0.011608f, 0.013477f, 0.004139f, -0.022240f, 0.021447f, 0.055045f, -0.030399f, 0.021235f, 0.027170f, -0.039688f, 0.005082f, -0.048809f, 0.018552f, -0.005232f, -0.026015f, 0.038633f, 0.001128f, 0.060272f, -0.003708f, -0.045153f, 0.076308f, -0.013745f, 0.007607f, 0.010506f, -0.071637f, 0.021536f, 0.061648f, 0.021958f, -0.026814f, -0.046933f, 0.004875f, 0.011408f, 0.052720f, 0.033973f, -0.017195f, -0.010289f, -0.041084f, 0.000361f, 0.059655f, -0.081120f, 0.024609f, + 0.056658f, -0.051002f, 0.018685f, 0.005298f, 0.019622f, 0.059679f, 0.019896f, 0.023036f, -0.011084f, -0.058595f, 0.060641f, -0.011260f, -0.031051f, 0.127229f, 0.062567f, 0.032465f, 0.005538f, 0.002893f, -0.059901f, -0.049084f, -0.022298f, 0.037410f, -0.001300f, -0.034728f, -0.024555f, 0.047189f, -0.028851f, 0.032507f, 0.018407f, -0.023289f, 0.034682f, 0.015911f, -0.050434f, -0.025162f, -0.029604f, 0.008313f, 0.031509f, -0.063029f, 0.020689f, -0.064583f, -0.081659f, -0.051312f, 0.078241f, -0.027056f, 0.016139f, -0.018295f, -0.027236f, -0.003898f, -0.032458f, -0.022442f, -0.017309f, 0.004003f, -0.031121f, 0.003666f, 0.018139f, -0.000017f, -0.027411f, -0.020303f, 0.009493f, 0.003100f, 0.034692f, 0.004670f, -0.040092f, -0.015540f, -0.023019f, 0.032863f, -0.006778f, -0.013285f, -0.031765f, -0.000401f, 0.018905f, 0.008681f, 0.021549f, -0.010973f, -0.003682f, 0.006411f, 0.021939f, 0.014062f, -0.000747f, -0.012515f, 0.016292f, -0.015326f, -0.001744f, 0.008914f, -0.014429f, -0.000380f, 0.024524f, -0.000801f, 0.004422f, -0.027142f, -0.019260f, -0.020655f, 0.012118f, -0.021976f, 0.078078f, 0.130083f, + -0.021540f, -0.004224f, -0.106436f, -0.035661f, -0.078216f, -0.052138f, 0.072779f, 0.005248f, 0.019899f, -0.060234f, 0.019730f, -0.052881f, -0.119059f, 0.017475f, 0.057477f, -0.004637f, 0.007610f, 0.061763f, -0.081552f, 0.093414f, 0.046731f, 0.029219f, -0.046033f, 0.062832f, 0.121217f, -0.023971f, 0.037637f, 0.091965f, 0.077828f, 0.136991f, 0.030003f, 0.049236f, 0.037517f, 0.033418f, 0.117867f, -0.030508f, -0.013682f, 0.043434f, 0.026051f, -0.012682f, 0.064987f, 0.003996f, 0.013952f, -0.038272f, -0.104674f, 0.004181f, 0.070435f, 0.010776f, 0.042826f, -0.075691f, 0.005115f, -0.100682f, 0.000612f, -0.108209f, 0.007897f, 0.076094f, -0.009182f, -0.032179f, -0.102818f, 0.135398f, 0.025068f, 0.009196f, 0.140607f, -0.001565f, -0.031513f, -0.023528f, 0.007760f, 0.028153f, -0.007203f, 0.000624f, -0.010566f, -0.073961f, 0.044473f, 0.017182f, -0.045868f, -0.028340f, 0.037257f, -0.044639f, -0.076894f, -0.037690f, 0.017431f, 0.074193f, -0.076973f, 0.061784f, -0.002508f, 0.033006f, -0.013028f, 0.026952f, -0.018080f, -0.002637f, 0.007206f, 0.007620f, 0.025341f, 0.022607f, 0.005135f, 0.047408f, + -0.002010f, 0.019496f, 0.025387f, 0.014576f, 0.011347f, 0.011320f, 0.041319f, 0.030456f, 0.015125f, -0.016001f, -0.006329f, 0.035487f, -0.046907f, 0.018203f, -0.027870f, 0.006749f, -0.010193f, 0.031998f, 0.037261f, 0.075017f, 0.042251f, 0.070759f, 0.040868f, 0.014813f, 0.074670f, 0.077117f, 0.073730f, 0.042008f, -0.012403f, 0.043959f, 0.049011f, 0.030000f, 0.058940f, 0.044209f, 0.000183f, 0.013328f, 0.010184f, 0.009600f, 0.017366f, 0.012429f, -0.014950f, -0.015226f, 0.000801f, 0.012267f, -0.003589f, -0.040803f, -0.135672f, 0.006848f, 0.184060f, 0.027010f, -0.037124f, -0.035232f, -0.083323f, -0.054441f, 0.002900f, 0.114977f, 0.020634f, -0.076370f, -0.005066f, 0.031495f, 0.008001f, 0.002529f, -0.007056f, 0.020180f, -0.054229f, -0.020323f, 0.028525f, 0.063774f, 0.064694f, -0.060319f, -0.022657f, 0.004812f, 0.009188f, 0.016339f, -0.068941f, 0.006892f, 0.012046f, -0.018161f, 0.050776f, -0.000364f, 0.058505f, 0.087134f, 0.042398f, 0.018170f, 0.038670f, -0.049218f, 0.045679f, -0.039725f, 0.067949f, 0.118712f, 0.039899f, -0.063902f, -0.054370f, 0.053892f, 0.020532f, 0.101216f, + 0.076916f, 0.023380f, -0.017981f, -0.022498f, 0.004122f, 0.005435f, -0.034129f, 0.039467f, 0.035472f, 0.006722f, 0.092418f, 0.062697f, -0.007255f, 0.044754f, 0.050843f, 0.023351f, 0.050877f, 0.002296f, -0.085593f, -0.010586f, -0.019647f, -0.019924f, 0.100068f, 0.045651f, 0.017364f, 0.078702f, 0.047884f, 0.050214f, 0.062870f, 0.021374f, -0.061328f, -0.031023f, -0.000034f, -0.001004f, -0.020665f, -0.018304f, -0.036559f, 0.023779f, 0.016829f, 0.036996f, -0.015742f, 0.041265f, 0.013168f, 0.042720f, 0.030181f, -0.009361f, -0.020097f, 0.006477f, 0.013214f, 0.000481f, 0.006633f, 0.031299f, 0.004798f, 0.048923f, 0.067232f, 0.018817f, -0.003670f, 0.004870f, 0.048888f, 0.010895f, -0.012994f, -0.012435f, 0.039093f, -0.001886f, -0.009592f, -0.007169f, 0.014265f, 0.026405f, 0.054626f, -0.027670f, 0.006306f, -0.017932f, 0.006456f, 0.002128f, 0.045080f, -0.023003f, 0.023396f, 0.026027f, 0.017755f, -0.019505f, 0.008312f, 0.030276f, 0.006174f, 0.000889f, 0.031674f, 0.003998f, 0.020113f, 0.011053f, 0.005455f, -0.005677f, 0.007871f, -0.004125f, 0.009342f, 0.002075f, 0.009854f, 0.001679f, + 0.017073f, 0.003960f, 0.008687f, 0.002954f, 0.013350f, 0.002564f, 0.013962f, 0.002972f, -0.000980f, -0.027114f, -0.129342f, -0.028023f, 0.072057f, 0.038915f, 0.157756f, 0.008537f, -0.023004f, -0.070842f, -0.138668f, -0.152268f, -0.025469f, 0.065514f, 0.073595f, 0.047170f, -0.077012f, -0.101651f, -0.000872f, -0.012523f, 0.040376f, 0.105887f, 0.053773f, -0.010023f, -0.063729f, -0.086277f, -0.054386f, 0.003466f, -0.053295f, 0.020624f, -0.044653f, -0.021994f, 0.070378f, 0.058381f, 0.051706f, 0.020278f, -0.072892f, -0.020273f, -0.069761f, -0.053428f, -0.028280f, 0.040968f, -0.008108f, 0.043518f, 0.106748f, 0.111789f, -0.047074f, 0.012875f, -0.083001f, -0.056416f, -0.039913f, -0.007136f, 0.014866f, 0.064860f, 0.068587f, 0.095387f, 0.067182f, 0.024387f, -0.047842f, -0.043446f, -0.011087f, 0.030707f, -0.078564f, 0.005737f, 0.090322f, 0.072675f, -0.019787f, 0.098473f, 0.087046f, 0.049643f, 0.090975f, -0.173873f, 0.040508f, -0.049359f, -0.054541f, 0.029955f, -0.029715f, -0.002393f, 0.174491f, 0.148575f, 0.051620f, -0.045734f, -0.005129f, -0.069659f, -0.014810f, -0.093711f, -0.034458f, -0.015634f, + 0.035037f, 0.115095f, 0.059005f, 0.024261f, 0.019225f, -0.018354f, -0.058985f, -0.074101f, -0.001136f, -0.048853f, 0.037883f, -0.004085f, -0.001712f, 0.044288f, 0.034565f, 0.013813f, 0.035804f, 0.013417f, 0.056747f, -0.040466f, -0.002447f, -0.044631f, 0.016983f, -0.038780f, -0.037508f, 0.006516f, -0.012587f, 0.031289f, 0.053290f, 0.003655f, -0.052987f, -0.085750f, -0.027876f, -0.049577f, 0.003717f, 0.022674f, 0.038687f, -0.032950f, -0.013940f, 0.043922f, 0.003786f, -0.223460f, -0.253377f, -0.272436f, -0.275268f, -0.373245f, -0.022117f, -0.133665f, -0.043178f, 0.049561f, 0.124783f, 0.175092f, 0.180573f, 0.368993f, 0.395621f, 0.322124f, 0.239603f, 0.253850f, 0.242020f, 0.093368f, -0.035956f, -0.166189f, -0.166554f, -0.255561f, -0.083034f, -0.138435f, -0.103250f, -0.009534f, -0.216979f, -0.062278f, -0.193800f, -0.052605f, -0.222693f, -0.209842f, -0.096902f, -0.173215f, -0.017655f, -0.087400f, -0.080879f, -0.129480f, -0.085765f, -0.195594f, -0.138336f, -0.073355f, -0.067351f, -0.103383f, -0.063400f, -0.007433f, -0.083756f, 0.028409f, 0.125294f, -0.097376f, 0.148211f, 0.089002f, 0.197818f, 0.198851f, + 0.173504f, 0.214095f, 0.180761f, 0.298556f, 0.296422f, 0.236548f, 0.316286f, 0.271367f, 0.414220f, 0.408050f, 0.480678f, 0.374270f, 0.402698f, 0.438981f, 0.396401f, 0.474126f, 0.351226f, 0.513394f, 0.410189f, 0.156520f, 0.200582f, 0.053056f, 0.079464f, -0.277466f, -0.233016f, -0.259958f, -0.276877f, -0.291749f, -0.377180f, -0.354953f, -0.390362f, -0.428441f, -0.503904f, -0.420979f, -0.385658f, -0.428485f, -0.467517f, -0.557198f, -0.447132f, -0.494885f, -0.498354f, -0.377917f, -0.426297f, -0.245768f, -0.305325f, -0.208759f, -0.194057f, -0.102562f, -0.075199f, -0.106202f, -0.018434f, 0.050336f, 0.241971f, 0.229554f, 0.166433f, 0.188470f, 0.202450f, 0.274796f, 0.281172f, 0.304399f, 0.320721f, 0.276123f, 0.280233f, 0.206182f, 0.291563f, 0.298491f, 0.227063f, 0.159989f, 0.123195f, 0.179355f, 0.177060f, 0.138126f, 0.082407f, 0.045841f, 0.069324f, -0.018169f, 0.009033f, -0.032706f, -0.026455f, -0.132490f, -0.121834f, -0.088461f, -0.061817f, -0.080751f, -0.062516f, -0.029686f, -0.025136f, -0.032194f, -0.060541f, -0.055091f, -0.028240f, -0.035578f, -0.024448f, -0.019988f, 0.002779f, 0.009119f, + 0.000590f, -0.008130f, -0.002561f, 0.000811f, -0.001943f, -0.001991f, -0.001969f} + }, + { + {-0.005288f, 0.009776f, -0.000395f, 0.004012f, 0.001553f, -0.008552f, -0.006433f, 0.002231f, -0.005796f, -0.008599f, 0.004903f, -0.001018f, 0.001279f, -0.004936f, 0.003625f, 0.000350f, -0.007620f, -0.000346f, 0.008790f, 0.007144f, -0.005472f, -0.009639f, -0.008786f, 0.001293f, -0.002027f, -0.001722f, -0.007478f, 0.008134f, -0.002167f, 0.002292f, -0.003413f, -0.002070f, -0.000750f, 0.003085f, -0.002216f, -0.004282f, -0.016411f, 0.005580f, -0.001251f, 0.005303f, 0.003142f, 0.002229f, -0.000431f, 0.010939f, 0.002048f, 0.002186f, 0.001519f, -0.005597f, -0.003587f, -0.000519f, 0.000796f, -0.005603f, -0.001334f, 0.002181f, -0.000779f, -0.005294f, -0.002796f, 0.000195f, 0.005169f, -0.008106f, -0.011004f, -0.013626f, 0.004816f, 0.007807f, 0.000781f, 0.006457f, 0.004729f, 0.000907f, -0.012500f, -0.000325f, -0.003278f, -0.004382f, 0.000207f, 0.000698f, 0.005166f, -0.001115f, 0.007356f, 0.005215f, -0.002340f, -0.007481f, -0.003649f, -0.001336f, 0.001900f, 0.000572f, 0.002404f, 0.002803f, 0.005133f, -0.000109f, -0.000503f, -0.002422f, -0.002109f, -0.002005f, -0.000904f, -0.004174f, -0.001983f, -0.002360f, + 0.001287f, -0.000276f, -0.000537f, -0.001283f, 0.001945f, -0.002938f, 0.005896f, 0.007712f, -0.001795f, -0.000118f, -0.011066f, 0.009842f, -0.012673f, 0.004875f, 0.021301f, -0.004583f, -0.007953f, 0.001194f, 0.011105f, 0.001166f, -0.003183f, -0.001559f, -0.003208f, -0.002034f, -0.010038f, -0.003919f, 0.004918f, -0.007973f, -0.004570f, 0.000435f, -0.000463f, 0.008775f, -0.005389f, 0.001626f, -0.002099f, 0.001905f, -0.001139f, -0.005151f, 0.009715f, 0.016542f, 0.004174f, -0.000959f, -0.003125f, 0.017904f, 0.000815f, -0.007509f, 0.000482f, -0.013378f, 0.000030f, 0.006961f, -0.010275f, -0.001317f, 0.002183f, -0.008206f, -0.002482f, 0.009424f, 0.001328f, -0.001026f, 0.009092f, -0.006071f, -0.009592f, 0.005409f, 0.003582f, -0.006700f, -0.003328f, -0.007172f, -0.008405f, -0.009041f, -0.005007f, -0.005174f, 0.007310f, 0.005196f, 0.001425f, -0.000217f, -0.005088f, 0.004697f, -0.001109f, -0.003476f, 0.006194f, 0.006845f, -0.004898f, -0.000986f, -0.002320f, -0.003129f, 0.000956f, 0.007844f, -0.003971f, 0.001751f, 0.007480f, 0.004942f, -0.001722f, 0.001891f, -0.001313f, -0.000214f, 0.003169f, -0.000457f, + 0.000047f, 0.003225f, -0.003458f, 0.001395f, 0.000709f, -0.001113f, -0.003186f, 0.002433f, 0.000279f, -0.001429f, 0.000749f, 0.000344f, -0.001142f, 0.000358f, -0.000585f, -0.001066f, -0.001860f, 0.010891f, -0.015877f, -0.010482f, -0.003781f, -0.002310f, 0.000536f, 0.002042f, -0.015140f, 0.010513f, -0.004783f, 0.003435f, 0.002166f, 0.003499f, 0.006611f, -0.000048f, -0.002193f, -0.005039f, 0.010896f, -0.000862f, 0.007082f, 0.013458f, -0.002923f, 0.011443f, 0.009759f, -0.008463f, 0.005654f, 0.005723f, 0.006138f, -0.014933f, -0.001488f, 0.000892f, -0.004697f, -0.009393f, 0.000142f, 0.010958f, -0.002577f, -0.004695f, -0.003690f, 0.003351f, 0.010157f, 0.005017f, -0.005196f, -0.000087f, -0.004286f, 0.000430f, -0.001367f, -0.005065f, 0.009485f, -0.012266f, -0.010139f, -0.009310f, 0.002874f, -0.001310f, -0.000340f, -0.011444f, -0.012088f, 0.002942f, -0.000260f, 0.000682f, -0.001197f, -0.000644f, -0.009025f, -0.005340f, -0.009867f, 0.001931f, 0.008446f, -0.002636f, 0.007494f, 0.001403f, 0.006662f, -0.014404f, 0.000056f, 0.002079f, -0.004811f, -0.002175f, 0.001918f, -0.005134f, -0.000637f, 0.003771f, + 0.004069f, -0.003197f, -0.009640f, 0.008480f, 0.001324f, 0.000206f, -0.002135f, -0.001233f, -0.007720f, 0.000339f, 0.000526f, -0.001359f, 0.001386f, 0.000248f, -0.002728f, 0.001162f, 0.001243f, -0.000779f, -0.001116f, -0.000385f, -0.000466f, -0.000522f, 0.000419f, 0.004060f, 0.000062f, -0.001220f, 0.003355f, 0.001499f, -0.000271f, -0.001121f, -0.000339f, -0.005440f, 0.001342f, -0.001092f, 0.009348f, 0.014869f, 0.000943f, -0.005654f, -0.012644f, 0.005786f, 0.003755f, 0.003509f, 0.015751f, -0.010297f, 0.000364f, 0.001919f, -0.002855f, -0.005151f, 0.002330f, 0.000994f, 0.009495f, 0.020949f, -0.001844f, 0.003627f, 0.008760f, -0.003797f, 0.007814f, 0.013617f, -0.009501f, -0.000353f, -0.003540f, -0.000195f, 0.006075f, -0.010604f, 0.011460f, 0.002558f, 0.000135f, 0.006044f, -0.000992f, 0.008368f, -0.004533f, -0.001923f, -0.002353f, 0.013144f, 0.006127f, 0.008373f, -0.001584f, 0.006900f, -0.012751f, 0.014747f, -0.005705f, 0.005803f, -0.013423f, 0.005423f, 0.009750f, 0.017973f, 0.006601f, 0.003362f, -0.011820f, -0.004522f, 0.003269f, -0.008944f, -0.010643f, -0.002519f, 0.021233f, 0.024591f, + 0.004719f, 0.005791f, -0.007010f, -0.003109f, 0.013752f, 0.002688f, 0.006025f, -0.000825f, 0.004190f, 0.003691f, -0.001812f, 0.003150f, -0.002006f, 0.002376f, 0.001663f, 0.008691f, 0.007073f, -0.010899f, 0.009723f, -0.003184f, 0.005003f, -0.003429f, 0.003679f, -0.002893f, -0.004048f, -0.000071f, -0.006466f, 0.001021f, 0.004744f, 0.001083f, 0.002450f, -0.002294f, -0.002854f, -0.001469f, 0.001191f, 0.000208f, 0.001088f, -0.000415f, 0.000757f, -0.001825f, 0.000689f, 0.000702f, 0.003457f, 0.000208f, 0.002357f, -0.001103f, 0.002112f, 0.010371f, 0.000292f, 0.001296f, 0.014550f, -0.012249f, -0.014420f, 0.022486f, -0.005819f, -0.003594f, 0.014705f, 0.008804f, 0.001093f, -0.025786f, 0.027871f, -0.005096f, -0.003513f, -0.002919f, -0.001509f, 0.001116f, 0.001732f, 0.008722f, 0.013009f, 0.008573f, -0.001854f, 0.014594f, 0.009265f, 0.004697f, 0.003939f, -0.005354f, 0.006673f, -0.010472f, 0.008389f, -0.001587f, 0.003523f, -0.008862f, -0.012879f, 0.001670f, -0.001612f, 0.004747f, 0.007802f, -0.003816f, -0.012324f, -0.007187f, 0.003064f, -0.014799f, 0.009606f, 0.002997f, -0.023600f, 0.010698f, + 0.001663f, 0.006129f, 0.001563f, 0.003698f, 0.004046f, -0.000939f, -0.006629f, -0.005759f, -0.016089f, -0.011820f, -0.006543f, -0.008206f, -0.001775f, 0.000994f, -0.011762f, -0.016673f, -0.002446f, 0.010900f, 0.018770f, -0.000919f, -0.012416f, 0.002109f, -0.019552f, 0.001384f, -0.001284f, -0.007671f, 0.016596f, 0.015592f, 0.005294f, -0.000560f, -0.003938f, -0.001138f, -0.008627f, 0.004127f, 0.015921f, 0.008522f, 0.013170f, 0.002687f, -0.005915f, 0.006138f, 0.003236f, -0.000402f, 0.001322f, 0.000754f, 0.000454f, 0.002872f, 0.002988f, 0.002849f, -0.000817f, 0.004972f, 0.001406f, 0.009779f, 0.003875f, 0.002647f, 0.000531f, 0.000872f, 0.002643f, -0.000667f, 0.004643f, 0.001716f, 0.001843f, -0.002573f, 0.005758f, 0.001451f, -0.001952f, -0.000819f, -0.025305f, 0.013097f, -0.004820f, -0.008994f, -0.007131f, -0.008603f, -0.012024f, 0.023216f, -0.029536f, 0.006985f, 0.007153f, 0.009685f, 0.014452f, 0.002389f, 0.004024f, 0.005455f, 0.003923f, 0.003027f, 0.004904f, 0.012725f, 0.002305f, -0.006977f, -0.000003f, -0.001209f, -0.009087f, -0.008210f, 0.004222f, 0.008533f, 0.009171f, 0.001262f, + 0.006541f, -0.015375f, -0.001782f, -0.000200f, -0.000840f, -0.014568f, -0.008732f, -0.005233f, 0.009542f, 0.008577f, -0.000146f, -0.015946f, 0.000092f, -0.008628f, -0.006186f, -0.003119f, -0.004294f, 0.010048f, 0.013647f, 0.004163f, 0.014196f, -0.022694f, -0.015868f, 0.007576f, 0.004638f, 0.000792f, 0.003004f, 0.001506f, -0.007365f, -0.014267f, -0.009873f, 0.007594f, -0.006399f, 0.011602f, 0.011403f, -0.004136f, 0.010805f, -0.017174f, -0.008504f, -0.004817f, -0.005804f, 0.001278f, 0.031313f, -0.004481f, 0.008854f, -0.004976f, -0.004536f, -0.003169f, 0.006643f, 0.007146f, -0.000833f, 0.005773f, 0.003927f, -0.009747f, 0.002690f, 0.000770f, 0.004189f, 0.000933f, 0.000510f, -0.004903f, 0.003152f, -0.000182f, 0.003194f, 0.001046f, 0.001651f, -0.000888f, -0.001874f, 0.000958f, -0.002858f, -0.004088f, 0.001392f, -0.002227f, -0.003539f, -0.001021f, 0.001053f, 0.001421f, 0.001391f, 0.001558f, -0.000211f, 0.001126f, 0.002211f, 0.001875f, 0.000616f, 0.000566f, -0.000740f, -0.001161f, 0.002062f, 0.025913f, -0.004965f, 0.000723f, 0.010922f, -0.024638f, 0.016962f, 0.008610f, -0.013880f, 0.015440f, + 0.017273f, 0.005809f, -0.026602f, 0.016472f, 0.000732f, -0.002495f, 0.013491f, 0.014572f, -0.000810f, -0.004283f, 0.000441f, -0.010315f, 0.009683f, -0.005633f, -0.009827f, -0.020692f, 0.004853f, -0.022492f, 0.006060f, -0.005501f, -0.002501f, 0.006506f, -0.018323f, -0.007520f, 0.015265f, -0.001317f, -0.007102f, 0.009347f, 0.000637f, -0.007989f, 0.006924f, 0.002519f, 0.000696f, -0.003417f, 0.005285f, -0.011150f, -0.001153f, -0.016290f, 0.015445f, 0.015439f, -0.019184f, 0.012848f, -0.013681f, -0.005157f, 0.013277f, 0.018555f, -0.001327f, -0.009222f, 0.005624f, -0.001151f, 0.002692f, -0.022648f, -0.017900f, 0.003593f, 0.003235f, -0.004886f, -0.004639f, 0.005893f, -0.000680f, -0.008018f, 0.009600f, -0.009245f, 0.003265f, 0.006947f, -0.001568f, 0.010887f, -0.010878f, 0.011009f, -0.000057f, 0.017507f, -0.005981f, 0.005325f, 0.009894f, 0.001132f, -0.006253f, -0.001771f, -0.000632f, 0.005145f, -0.001695f, -0.008217f, 0.006958f, 0.001522f, -0.003434f, 0.003081f, -0.002304f, -0.000090f, -0.003222f, -0.000914f, 0.002389f, -0.002743f, 0.001794f, 0.004811f, -0.002469f, 0.001182f, 0.000351f, -0.001575f, + 0.003053f, 0.000827f, 0.002601f, -0.003851f, 0.001589f, -0.003943f, -0.004509f, 0.001700f, -0.000704f, 0.001855f, 0.001926f, 0.000587f, 0.007166f, 0.003122f, -0.009432f, 0.018181f, -0.006228f, 0.008845f, -0.018363f, -0.001304f, -0.004850f, -0.016671f, 0.000577f, 0.011771f, 0.020923f, 0.027376f, -0.015598f, -0.000440f, -0.019441f, -0.001457f, -0.012383f, 0.011049f, -0.011595f, -0.022925f, 0.001480f, -0.014694f, -0.001381f, 0.019003f, -0.011273f, -0.011246f, 0.020392f, 0.000627f, 0.003500f, -0.002137f, -0.011999f, 0.005090f, 0.004347f, 0.024576f, -0.016966f, 0.012051f, -0.014390f, 0.003582f, 0.004767f, -0.014198f, -0.008745f, 0.023599f, 0.006449f, -0.017562f, -0.004540f, -0.006429f, -0.014102f, -0.000599f, 0.023131f, 0.012389f, 0.016094f, 0.003675f, 0.006431f, -0.021122f, -0.003062f, 0.026849f, 0.002120f, -0.016695f, 0.008923f, 0.008873f, -0.012256f, -0.010672f, -0.005912f, -0.027594f, -0.004263f, 0.008187f, 0.013623f, 0.024217f, -0.006079f, -0.013258f, -0.003842f, -0.008255f, 0.019658f, -0.007323f, -0.017178f, -0.011707f, -0.005081f, -0.002351f, -0.005329f, -0.009932f, 0.021402f, -0.012279f, + -0.001500f, 0.001969f, 0.001015f, 0.006983f, 0.004350f, -0.006315f, -0.008479f, 0.006355f, 0.007631f, 0.008071f, -0.001859f, 0.003647f, -0.002249f, -0.001343f, 0.003602f, -0.000802f, -0.003766f, 0.003799f, 0.001774f, -0.000118f, -0.002470f, -0.000832f, -0.006269f, 0.000575f, -0.001564f, -0.005390f, -0.002759f, 0.002439f, 0.002120f, 0.000092f, 0.002491f, 0.011780f, -0.040896f, -0.028189f, -0.018069f, 0.002157f, -0.034266f, 0.005121f, 0.025471f, 0.008428f, 0.026226f, -0.014074f, -0.006491f, -0.002849f, -0.013632f, -0.005102f, -0.020464f, 0.036371f, 0.020765f, 0.014500f, -0.030729f, -0.005940f, -0.009891f, -0.019994f, 0.006914f, -0.002105f, 0.006483f, -0.024834f, -0.001710f, -0.002226f, -0.017836f, 0.010374f, 0.002951f, 0.018225f, 0.007329f, -0.015242f, 0.024010f, -0.011355f, 0.009743f, 0.005057f, -0.000205f, 0.019001f, 0.017657f, 0.004455f, -0.022917f, 0.027951f, -0.014154f, 0.020041f, 0.009133f, -0.010372f, -0.011539f, 0.022473f, 0.003294f, -0.002620f, 0.005846f, -0.018985f, -0.006810f, 0.010947f, -0.001594f, 0.019873f, -0.011495f, -0.017969f, 0.007360f, 0.005084f, 0.000605f, 0.019764f, + 0.008512f, 0.004018f, -0.012617f, 0.014383f, 0.005634f, -0.011026f, -0.001524f, -0.001184f, -0.006346f, -0.004612f, -0.005353f, 0.008651f, 0.021701f, 0.036583f, 0.016994f, -0.006172f, 0.001849f, -0.008399f, 0.008409f, 0.011256f, -0.000187f, -0.009348f, -0.005506f, -0.012202f, 0.007517f, -0.006667f, 0.001778f, -0.005765f, -0.001588f, 0.008117f, -0.000974f, 0.000879f, -0.007436f, 0.007938f, -0.004200f, -0.003563f, 0.004350f, -0.007302f, 0.007990f, -0.005595f, 0.004273f, -0.003955f, -0.000757f, 0.001791f, -0.005459f, -0.003877f, -0.002400f, -0.008883f, -0.008931f, -0.003917f, -0.000479f, -0.003148f, 0.007054f, 0.006519f, 0.003802f, -0.025822f, 0.034713f, 0.014394f, 0.039695f, -0.017795f, -0.021314f, 0.037827f, 0.001286f, -0.003896f, 0.008299f, 0.002911f, 0.022150f, 0.029511f, 0.003859f, -0.027390f, -0.043874f, 0.006176f, -0.012102f, 0.002698f, 0.001255f, -0.018977f, -0.001202f, 0.023928f, 0.019563f, 0.015394f, 0.030798f, -0.006930f, 0.026098f, -0.018299f, 0.023114f, 0.007626f, 0.017912f, -0.011973f, 0.031544f, 0.018178f, 0.023038f, -0.036513f, -0.000161f, 0.033270f, 0.018943f, 0.006067f, + -0.007870f, 0.050034f, 0.021124f, -0.019574f, -0.012069f, 0.012228f, -0.019058f, -0.001822f, -0.009140f, 0.002614f, 0.042006f, 0.044014f, 0.031956f, 0.011767f, 0.000386f, 0.016594f, -0.014579f, -0.003649f, 0.018036f, -0.018629f, 0.044480f, 0.027761f, 0.021841f, 0.008642f, -0.001693f, -0.020955f, 0.026418f, 0.001000f, 0.023047f, -0.010246f, 0.008968f, -0.014774f, -0.008473f, -0.000337f, 0.011635f, -0.017385f, 0.041414f, 0.017885f, -0.004530f, -0.020238f, -0.038983f, 0.019241f, 0.003443f, -0.012638f, -0.001169f, 0.004883f, -0.009088f, 0.005719f, 0.015085f, -0.002555f, -0.005151f, 0.000524f, -0.003162f, -0.003830f, 0.003432f, -0.004658f, -0.003423f, -0.006402f, 0.006779f, 0.003901f, -0.009769f, 0.005562f, 0.006316f, 0.006147f, -0.000175f, -0.002849f, -0.001079f, -0.000025f, 0.003281f, -0.000788f, 0.002431f, -0.005754f, 0.009578f, -0.011950f, 0.000220f, 0.004184f, 0.010735f, 0.042814f, -0.002576f, -0.021270f, -0.009629f, -0.016694f, -0.000709f, -0.026737f, 0.006843f, -0.023053f, 0.012933f, 0.002872f, -0.006271f, -0.018165f, -0.021665f, -0.032834f, -0.034026f, -0.010174f, 0.029389f, -0.002298f, + -0.019284f, 0.007835f, -0.018392f, 0.013962f, -0.015723f, 0.027495f, -0.028419f, 0.006527f, -0.020179f, -0.020686f, -0.003851f, 0.003398f, -0.006078f, 0.012923f, -0.040872f, 0.016324f, 0.003856f, -0.009939f, -0.002901f, -0.002818f, -0.020269f, -0.032486f, -0.034778f, 0.024853f, 0.012264f, -0.013683f, 0.021529f, 0.000575f, -0.009098f, -0.025651f, -0.053737f, -0.044301f, 0.024941f, -0.007847f, 0.000480f, -0.005436f, -0.002608f, -0.002690f, -0.036427f, 0.013684f, -0.043018f, -0.023038f, 0.001881f, -0.001488f, -0.009271f, -0.005915f, -0.005812f, 0.044136f, -0.013796f, -0.014588f, -0.012110f, 0.046181f, -0.008457f, -0.018765f, 0.029259f, -0.023196f, -0.014758f, -0.019147f, -0.016104f, -0.059919f, 0.011861f, 0.009400f, -0.020137f, -0.003081f, 0.013851f, -0.007977f, -0.005496f, -0.011324f, -0.010335f, -0.001634f, -0.005468f, -0.005489f, 0.020730f, -0.001923f, -0.002370f, 0.013744f, 0.016464f, -0.008412f, -0.006143f, -0.001575f, -0.003057f, 0.004016f, -0.010254f, 0.000926f, 0.001047f, 0.001663f, -0.006148f, -0.007662f, -0.003175f, 0.006565f, -0.002894f, -0.005764f, -0.000882f, 0.004065f, -0.013181f, -0.002314f, + 0.007283f, 0.000229f, -0.005321f, 0.006758f, -0.004658f, 0.005958f, -0.000137f, 0.005681f, 0.006225f, 0.006217f, -0.011529f, -0.001433f, -0.063313f, -0.047809f, -0.027350f, 0.055278f, -0.002817f, -0.009215f, -0.006755f, -0.004360f, -0.018218f, 0.019563f, 0.015123f, 0.049473f, -0.045659f, -0.008902f, 0.014060f, -0.033400f, -0.013367f, -0.011818f, 0.056988f, -0.000836f, 0.013136f, 0.029008f, 0.002624f, 0.027918f, -0.030148f, -0.037894f, -0.025359f, -0.006976f, -0.006447f, 0.004521f, 0.017807f, -0.000878f, -0.031920f, -0.022026f, -0.001636f, -0.017043f, -0.035810f, 0.031958f, -0.005345f, -0.017864f, -0.000228f, 0.010259f, 0.010151f, 0.005967f, -0.016184f, 0.003256f, -0.033300f, -0.014583f, -0.049384f, 0.023200f, 0.014917f, -0.005846f, -0.015507f, 0.018247f, -0.024607f, -0.006294f, 0.053272f, -0.005618f, 0.045147f, 0.020188f, 0.012104f, -0.011832f, -0.056706f, -0.023594f, -0.010909f, -0.030540f, -0.022829f, -0.014565f, 0.025380f, -0.011617f, 0.000578f, -0.022802f, 0.048351f, -0.017305f, 0.019944f, 0.013513f, -0.032991f, -0.013294f, 0.007275f, 0.030552f, 0.055818f, 0.046416f, 0.020120f, -0.003192f, + 0.019165f, 0.000117f, 0.001667f, -0.010974f, 0.005640f, -0.011345f, -0.007869f, -0.000239f, 0.003287f, -0.006865f, -0.009068f, -0.016385f, -0.013023f, 0.006909f, 0.005367f, 0.005622f, -0.006023f, -0.002574f, -0.032484f, -0.000682f, -0.014980f, -0.007110f, 0.005885f, 0.004432f, 0.001879f, 0.013348f, 0.000334f, -0.001984f, 0.001340f, -0.005512f, -0.023569f, -0.002334f, -0.013396f, 0.006605f, -0.011887f, -0.013058f, 0.001515f, 0.014915f, 0.006859f, -0.004415f, -0.008802f, -0.008289f, -0.003868f, 0.007936f, 0.002124f, -0.003793f, 0.032873f, -0.001521f, -0.018615f, 0.020307f, 0.011667f, 0.068679f, 0.002450f, 0.000855f, 0.024275f, -0.030837f, -0.021252f, -0.006031f, 0.005743f, 0.011223f, -0.008212f, 0.029151f, -0.017710f, 0.004178f, 0.027401f, 0.012436f, 0.010230f, 0.010273f, -0.020039f, 0.003979f, -0.000486f, -0.009685f, 0.004305f, -0.014445f, -0.025888f, -0.013398f, 0.002189f, -0.025427f, 0.033267f, -0.002215f, 0.003459f, -0.004338f, 0.022947f, 0.025932f, -0.004704f, -0.018762f, -0.001583f, -0.005829f, 0.030502f, 0.039167f, -0.027510f, -0.018782f, -0.013819f, 0.009987f, 0.029104f, -0.025609f, + 0.008835f, -0.000874f, 0.006268f, -0.013186f, -0.017809f, 0.005918f, 0.019280f, 0.003823f, -0.023356f, 0.021623f, 0.062902f, -0.020006f, 0.011901f, -0.004440f, 0.005087f, 0.024486f, 0.007093f, 0.028817f, 0.024108f, -0.005994f, 0.036819f, 0.066750f, 0.002959f, -0.024293f, 0.065350f, -0.001025f, 0.062501f, -0.021261f, -0.030173f, 0.028968f, 0.011356f, 0.043712f, -0.006764f, 0.061450f, 0.019626f, 0.014444f, -0.018010f, 0.029235f, 0.003694f, 0.003153f, 0.007132f, 0.023916f, 0.005310f, 0.027276f, 0.003629f, 0.006953f, 0.001275f, 0.004306f, 0.004682f, 0.008875f, -0.002384f, 0.009919f, 0.023120f, 0.009771f, 0.010787f, 0.003467f, 0.006484f, -0.012422f, 0.011506f, 0.004529f, 0.005481f, 0.008423f, 0.004735f, -0.000558f, 0.000242f, 0.006628f, -0.005974f, 0.002457f, 0.000719f, 0.005925f, 0.016661f, 0.006090f, -0.000104f, -0.007973f, 0.008994f, 0.001731f, 0.002504f, -0.001285f, 0.008801f, 0.005128f, 0.012809f, -0.043058f, -0.013885f, 0.067229f, 0.011257f, -0.031040f, 0.009270f, -0.023512f, 0.008728f, 0.012901f, -0.005437f, -0.035548f, -0.013352f, -0.053149f, 0.022090f, 0.018249f, + -0.020408f, 0.019794f, 0.030906f, 0.006361f, -0.008257f, -0.031041f, 0.007120f, 0.049687f, -0.023727f, 0.029823f, 0.028514f, 0.004508f, 0.021463f, 0.019862f, 0.000975f, 0.024769f, 0.016567f, -0.047306f, -0.006650f, -0.019060f, 0.048406f, 0.032076f, -0.033670f, 0.020759f, -0.003821f, 0.025533f, 0.080684f, -0.007611f, -0.013578f, 0.008073f, 0.072624f, 0.029810f, -0.004403f, 0.009298f, 0.013207f, 0.041906f, 0.037029f, -0.025269f, 0.044440f, 0.020377f, 0.041201f, -0.029116f, 0.004481f, 0.008276f, 0.008816f, 0.025458f, 0.037814f, -0.024550f, -0.019474f, 0.029929f, 0.015004f, -0.010143f, -0.010634f, 0.000122f, 0.045375f, -0.085446f, 0.020173f, -0.030368f, -0.022390f, 0.004140f, -0.029241f, -0.027187f, -0.003875f, -0.046714f, 0.033777f, -0.009914f, 0.035685f, -0.001264f, 0.031220f, -0.020565f, 0.012581f, 0.000779f, 0.010357f, -0.000937f, -0.011988f, 0.009472f, 0.006687f, 0.007572f, 0.015250f, -0.007400f, 0.007734f, 0.010524f, -0.008712f, 0.000844f, 0.014573f, 0.005429f, -0.007800f, 0.016259f, -0.010651f, 0.002217f, 0.008484f, -0.010391f, -0.007842f, 0.003353f, 0.003265f, 0.018134f, + 0.015000f, 0.010778f, 0.005462f, -0.001680f, 0.011704f, 0.002683f, 0.005165f, 0.005213f, 0.009714f, 0.011858f, -0.009775f, -0.008128f, -0.015820f, 0.012530f, 0.004943f, 0.001072f, 0.003947f, -0.016662f, -0.015969f, 0.011169f, 0.014536f, 0.015350f, -0.018907f, -0.022580f, -0.058448f, 0.002776f, -0.032594f, 0.053366f, 0.006555f, -0.013706f, -0.007857f, 0.032079f, 0.009260f, 0.052019f, 0.021000f, -0.013342f, 0.002214f, 0.011092f, 0.023685f, 0.039173f, -0.043614f, -0.037669f, -0.007874f, 0.065791f, -0.020166f, 0.008523f, 0.018788f, 0.028911f, 0.034956f, 0.050046f, 0.043167f, 0.003940f, -0.010211f, 0.046752f, 0.003688f, -0.029546f, 0.015868f, -0.027400f, 0.019974f, 0.005117f, -0.024484f, 0.022622f, 0.087722f, 0.048979f, -0.030881f, -0.023287f, -0.003113f, -0.024163f, -0.024022f, -0.020679f, 0.015131f, -0.011714f, -0.020427f, 0.004715f, 0.024198f, 0.014567f, 0.008079f, 0.034593f, 0.009322f, -0.008186f, 0.036459f, 0.030789f, -0.026203f, 0.018000f, -0.029590f, -0.023037f, -0.026226f, 0.000080f, -0.063468f, -0.018666f, 0.044314f, 0.032791f, -0.015043f, 0.022068f, -0.005255f, 0.001724f, + -0.038977f, 0.008933f, 0.023521f, 0.037373f, 0.021010f, 0.024803f, 0.013597f, 0.011950f, -0.016592f, -0.014543f, -0.017653f, 0.010094f, -0.003765f, 0.001536f, 0.007601f, 0.007927f, -0.000754f, 0.019386f, -0.006005f, -0.008363f, -0.009147f, 0.013631f, -0.017639f, -0.007068f, -0.021769f, -0.001083f, 0.004324f, -0.009331f, 0.000879f, -0.005131f, 0.013636f, -0.002543f, -0.028730f, 0.000506f, -0.001958f, 0.008636f, 0.011261f, 0.003707f, 0.012793f, -0.000751f, 0.020792f, 0.004307f, -0.001642f, -0.000506f, 0.002269f, 0.000927f, 0.001056f, -0.023863f, 0.019733f, 0.015930f, -0.030308f, -0.012953f, -0.065904f, -0.005244f, 0.054970f, 0.000691f, -0.040268f, 0.006523f, 0.001895f, -0.027025f, 0.036645f, 0.021218f, -0.014718f, 0.010466f, 0.016613f, 0.022658f, 0.012580f, 0.003957f, -0.016261f, 0.008905f, 0.013046f, 0.035057f, 0.052345f, -0.014339f, -0.035227f, -0.018523f, 0.009991f, 0.010927f, 0.043080f, -0.016440f, -0.033735f, -0.026258f, -0.026991f, 0.052144f, 0.095531f, 0.034720f, 0.004796f, 0.104818f, 0.006305f, 0.043470f, 0.024795f, -0.008799f, -0.021970f, 0.018648f, -0.029746f, -0.019812f, + 0.021245f, 0.001447f, -0.063138f, -0.065384f, -0.016357f, 0.027334f, -0.034115f, -0.042784f, -0.023559f, -0.031673f, -0.026079f, 0.022112f, -0.018161f, -0.048515f, 0.021824f, 0.001929f, -0.014144f, 0.011366f, -0.010933f, 0.024480f, 0.098328f, -0.060222f, 0.049571f, -0.068473f, -0.038829f, -0.022694f, -0.015494f, 0.038082f, 0.015387f, 0.018266f, -0.007396f, 0.021161f, 0.044129f, 0.011044f, 0.001035f, 0.000579f, -0.012801f, 0.006074f, 0.012100f, 0.035360f, -0.002124f, -0.017516f, -0.002614f, 0.027012f, 0.017364f, -0.007630f, 0.010246f, 0.012261f, -0.009747f, -0.000335f, -0.004168f, 0.033896f, 0.012284f, 0.016072f, 0.011932f, 0.009700f, -0.013954f, -0.009891f, -0.002193f, 0.008702f, -0.017075f, 0.002513f, -0.016840f, -0.011618f, 0.002749f, 0.001806f, -0.019355f, 0.018996f, 0.025955f, -0.002540f, -0.003303f, 0.015789f, 0.000233f, -0.006778f, 0.022976f, -0.009424f, 0.015945f, 0.001488f, 0.053224f, 0.034231f, 0.030863f, 0.045330f, -0.052897f, 0.020345f, -0.055404f, -0.002221f, 0.072413f, 0.064401f, 0.027454f, 0.001001f, 0.012531f, 0.008183f, -0.020765f, 0.016784f, 0.020851f, -0.091242f, + 0.005595f, 0.013416f, 0.027749f, -0.033434f, -0.051375f, 0.037689f, 0.017832f, 0.009592f, -0.021958f, 0.044703f, -0.006278f, 0.034751f, 0.028876f, -0.003440f, 0.004412f, -0.010092f, 0.035193f, -0.020875f, 0.010747f, 0.021178f, -0.001840f, 0.044976f, 0.026043f, -0.002511f, 0.023078f, 0.026224f, -0.001346f, -0.020291f, -0.068437f, -0.012613f, 0.007319f, -0.040523f, 0.003929f, 0.032354f, -0.062189f, -0.027586f, 0.009554f, -0.026726f, -0.004317f, 0.032841f, 0.001919f, -0.023207f, -0.030291f, 0.013511f, 0.013170f, -0.062866f, -0.020951f, -0.005202f, 0.000279f, 0.039518f, 0.019370f, 0.004439f, 0.069023f, -0.008672f, -0.002218f, 0.002749f, -0.039342f, 0.037308f, 0.000338f, 0.061210f, -0.023698f, -0.010203f, 0.018429f, 0.009273f, -0.052131f, 0.001730f, -0.007178f, -0.020833f, -0.016832f, 0.006555f, 0.002188f, -0.014686f, -0.001281f, -0.009109f, -0.006421f, 0.001936f, -0.022283f, 0.006476f, 0.003095f, -0.003079f, 0.008569f, 0.002389f, -0.014697f, 0.003049f, 0.004250f, 0.003963f, -0.014217f, 0.020869f, 0.004127f, 0.027140f, -0.019943f, 0.002579f, -0.016799f, -0.005885f, -0.003062f, -0.029931f, + 0.006414f, 0.002849f, -0.001220f, -0.003994f, -0.005383f, 0.011179f, -0.013480f, -0.010359f, 0.013092f, 0.017534f, -0.017334f, -0.064582f, -0.056287f, 0.010315f, -0.028969f, -0.009066f, -0.043371f, -0.054030f, -0.056848f, -0.037356f, 0.040564f, 0.055371f, 0.001494f, -0.045570f, 0.003629f, 0.002144f, 0.000631f, 0.021062f, 0.035350f, 0.035349f, 0.000902f, -0.022881f, -0.056713f, -0.032511f, -0.049641f, -0.010637f, 0.000241f, 0.004216f, 0.005155f, 0.007013f, 0.013710f, 0.017764f, 0.033456f, -0.052455f, 0.023065f, 0.009201f, 0.011612f, 0.028182f, 0.049814f, 0.055928f, -0.032179f, 0.024939f, -0.044488f, -0.013878f, -0.040367f, -0.003913f, -0.015724f, 0.092961f, 0.032991f, 0.066976f, 0.002834f, -0.035892f, -0.015419f, 0.042901f, 0.046419f, -0.027250f, 0.085744f, -0.035894f, 0.005355f, 0.003793f, 0.014896f, 0.031515f, 0.095383f, -0.006653f, 0.023359f, 0.053132f, 0.012131f, -0.042064f, 0.026745f, 0.097612f, -0.017812f, -0.023596f, -0.057560f, -0.004777f, 0.036003f, 0.022242f, 0.003021f, -0.055240f, -0.041865f, 0.007052f, -0.043686f, 0.013177f, 0.001933f, -0.054993f, -0.006237f, 0.005685f, + -0.008651f, 0.039755f, 0.037316f, 0.000849f, -0.010898f, -0.023678f, 0.025832f, -0.010936f, 0.044895f, -0.010214f, 0.000581f, 0.030781f, 0.030867f, 0.043956f, 0.033931f, -0.024768f, -0.009725f, 0.005946f, -0.008212f, 0.003031f, -0.018908f, -0.018138f, -0.018414f, 0.009657f, -0.022551f, -0.026222f, 0.015574f, 0.020397f, 0.001831f, -0.022515f, 0.014353f, 0.008059f, -0.005566f, -0.005683f, -0.015362f, -0.000237f, 0.008760f, -0.003805f, -0.013736f, -0.017793f, -0.003414f, -0.011653f, 0.014676f, 0.008341f, -0.007619f, -0.009854f, 0.018783f, 0.086671f, -0.004549f, -0.000539f, 0.036737f, 0.007091f, -0.119726f, -0.037664f, 0.084918f, 0.028222f, -0.025003f, -0.047723f, -0.006761f, -0.031547f, 0.043754f, 0.022711f, 0.008159f, -0.025311f, -0.056716f, 0.012098f, -0.097643f, -0.011978f, 0.047643f, 0.065074f, -0.007595f, -0.055361f, -0.037745f, -0.114249f, 0.033446f, -0.019884f, 0.044647f, 0.033745f, -0.032530f, -0.023677f, -0.101410f, -0.076171f, 0.039551f, 0.107924f, 0.043040f, 0.051232f, -0.036047f, -0.064244f, -0.061675f, -0.025880f, 0.091696f, 0.123572f, 0.064396f, -0.143746f, -0.052761f, -0.110165f, + -0.058962f, 0.136458f, 0.033196f, 0.030223f, -0.018210f, -0.131511f, -0.107727f, -0.108064f, -0.020168f, 0.010428f, 0.067998f, -0.025320f, 0.051708f, -0.104298f, 0.064735f, 0.025892f, 0.007823f, 0.131039f, 0.008338f, -0.012151f, -0.006350f, -0.177872f, -0.054414f, -0.012118f, 0.055934f, 0.029175f, 0.025529f, 0.078453f, -0.083985f, 0.005376f, -0.055601f, 0.060520f, 0.043660f, 0.004165f, 0.012016f, 0.012870f, -0.009984f, 0.035986f, 0.019227f, 0.009547f, 0.030589f, -0.020930f, -0.039156f, 0.009483f, 0.027975f, 0.042577f, 0.035030f, 0.023152f, -0.029417f, -0.047583f, -0.066739f, -0.005968f, 0.004697f, 0.053939f, 0.066779f, -0.010068f, -0.050982f, -0.087507f, -0.042086f, 0.006241f, 0.066807f, 0.107369f, 0.027897f, -0.105027f, -0.107889f, -0.110034f, -0.001293f, 0.089770f, 0.078942f, 0.083400f, -0.028102f, -0.040606f, -0.078369f, -0.078992f, 0.028861f, 0.053424f, 0.069533f, 0.035374f, -0.055308f, -0.052133f, -0.029612f, -0.008220f, 0.064510f, 0.034301f, 0.010561f, -0.002883f, -0.039754f, -0.028531f, -0.006038f, 0.007951f, -0.051391f, 0.098622f, 0.042326f, 0.045204f, -0.122174f, 0.024497f, + -0.170190f, -0.037625f, -0.000513f, 0.024025f, 0.009743f, -0.109088f, 0.059022f, -0.030301f, -0.019701f, -0.020600f, -0.023268f, -0.026814f, -0.033801f, 0.071316f, -0.020508f, -0.061454f, 0.019506f, -0.017472f, 0.007425f, 0.034334f, -0.069377f, -0.024904f, -0.004363f, 0.028954f, 0.002890f, 0.078458f, -0.006774f, -0.045055f, 0.103623f, -0.087884f, 0.051201f, -0.081509f, -0.027026f, 0.039612f, -0.066229f, 0.004735f, 0.047835f, -0.025118f, -0.005814f, -0.005023f, 0.061622f, 0.094091f, 0.054383f, -0.031784f, -0.013159f, -0.014814f, 0.005858f, 0.030166f, -0.012602f, -0.018823f, 0.018199f, 0.009622f, -0.170886f, -0.006961f, -0.006447f, 0.024773f, 0.021090f, 0.001033f, 0.000140f, 0.048500f, -0.053892f, -0.013893f, -0.005385f, 0.036944f, -0.137241f, -0.019298f, 0.123740f, -0.031831f, -0.050143f, -0.000527f, 0.093593f, -0.017336f, -0.022621f, 0.025467f, -0.037102f, -0.038713f, 0.057728f, 0.089627f, -0.032699f, -0.045648f, 0.015244f, 0.026835f, -0.014445f, -0.048115f, -0.001260f, 0.006920f, -0.010027f, -0.007046f, -0.015295f, -0.020972f, 0.009565f, 0.000641f, -0.019513f, -0.003504f, -0.001035f, -0.000733f, + -0.018021f, 0.010182f, -0.024034f, -0.025167f, -0.015047f, -0.015383f, 0.022950f, -0.003402f, -0.005259f, -0.000548f, -0.013638f, 0.019238f, -0.025541f, 0.007268f, 0.000337f, 0.001822f, 0.017066f, -0.000808f, -0.030640f, 0.003491f, -0.008401f, 0.005704f, 0.003711f, -0.027187f, 0.042432f, -0.011254f, -0.004502f, -0.004076f, 0.003480f, 0.010914f, -0.001464f, -0.009963f, -0.022765f, -0.041557f, -0.125027f, -0.102708f, 0.089755f, 0.076513f, 0.007001f, 0.081743f, -0.089613f, -0.005444f, -0.172778f, -0.061545f, -0.030827f, 0.083290f, 0.075802f, 0.046359f, -0.069729f, -0.024165f, -0.003336f, -0.033390f, 0.016097f, 0.029951f, 0.038963f, 0.052139f, -0.040257f, 0.029105f, -0.074930f, -0.047499f, -0.012107f, -0.016146f, 0.001697f, 0.049139f, -0.059219f, 0.050628f, -0.023058f, -0.033006f, -0.013310f, 0.004535f, -0.074270f, -0.001883f, -0.067268f, -0.025254f, -0.026300f, -0.063913f, 0.087264f, 0.039965f, 0.019604f, 0.021169f, -0.017213f, -0.089523f, -0.132591f, -0.077563f, -0.078090f, 0.052589f, 0.012359f, 0.056702f, 0.079134f, 0.065205f, -0.021687f, 0.015479f, -0.045956f, -0.035328f, -0.042003f, 0.032534f, + -0.044501f, -0.002331f, -0.042482f, -0.043898f, -0.027722f, 0.051332f, -0.041752f, -0.011907f, 0.003943f, -0.006134f, -0.060109f, -0.064658f, -0.039314f, -0.023310f, -0.087079f, -0.051889f, 0.012902f, 0.052086f, 0.054353f, 0.069408f, -0.004782f, -0.056952f, -0.073747f, -0.056749f, 0.028598f, 0.009036f, -0.009357f, 0.033685f, 0.085556f, 0.022592f, 0.022648f, -0.021894f, -0.016525f, -0.028429f, -0.017481f, -0.009286f, -0.027577f, -0.006503f, 0.032303f, -0.007173f, -0.014652f, -0.026622f, -0.029629f, -0.033281f, -0.010117f, 0.015993f, -0.009149f, 0.006778f, 0.003723f, -0.059803f, 0.006173f, -0.028571f, 0.024690f, 0.047861f, -0.024456f, 0.033037f, -0.004514f, 0.007993f, 0.000822f, -0.047295f, -0.007818f, -0.015452f, -0.012577f, 0.043052f, -0.027456f, -0.186219f, -0.252401f, -0.238497f, -0.226844f, -0.271955f, -0.045485f, -0.075187f, 0.048280f, 0.076965f, 0.243561f, 0.156475f, 0.206492f, 0.284566f, 0.312888f, 0.213615f, 0.271829f, 0.154735f, 0.072132f, -0.010854f, -0.051030f, -0.069331f, -0.114757f, -0.112634f, -0.155654f, -0.065806f, -0.057258f, -0.146436f, -0.109346f, -0.104699f, -0.119082f, -0.193754f, + -0.131974f, -0.101587f, -0.081590f, -0.149109f, -0.020782f, -0.044648f, -0.061999f, -0.144390f, -0.133372f, -0.109943f, -0.094010f, -0.068249f, -0.027760f, -0.091784f, 0.026582f, 0.047671f, -0.071860f, 0.080617f, 0.111961f, 0.107585f, 0.195229f, 0.158664f, 0.122219f, 0.134520f, 0.135339f, 0.134312f, 0.205304f, 0.231027f, 0.227031f, 0.155387f, 0.244862f, 0.241798f, 0.251908f, 0.256168f, 0.290874f, 0.258210f, 0.272652f, 0.361795f, 0.184574f, 0.186398f, 0.188916f, 0.176055f, -0.008285f, 0.080469f, 0.101207f, -0.057899f, -0.031222f, -0.099833f, -0.183200f, -0.165777f, -0.175096f, -0.315409f, -0.231549f, -0.140778f, -0.246707f, -0.261083f, -0.215610f, -0.229635f, -0.227481f, -0.273048f, -0.250365f, -0.252662f, -0.236616f, -0.220670f, -0.201378f, -0.186289f, -0.186682f, -0.154981f, -0.130736f, -0.206620f, -0.031597f, -0.092848f, -0.106848f, -0.023980f, -0.013269f, -0.104523f, -0.013284f, -0.040307f, -0.015033f, 0.038660f, 0.046270f, 0.121532f, 0.072069f, 0.101625f, 0.112625f, 0.122649f, 0.111250f, 0.155381f, 0.151522f, 0.161391f, 0.150542f, 0.180696f, 0.185490f, 0.182178f, 0.147263f, 0.190493f, + 0.200058f, 0.155346f, 0.104665f, 0.101449f, 0.061446f, 0.053326f, 0.014509f, -0.006362f, -0.006027f, -0.032861f, -0.029664f, -0.022541f, -0.013109f, -0.029180f, -0.031515f, -0.029154f, -0.013646f, -0.029152f, -0.037362f, -0.021682f, -0.007412f, -0.025508f, -0.035189f, -0.028119f, -0.023837f, -0.037304f, -0.037951f, -0.028523f, -0.018317f, -0.015898f, -0.014920f}, + {-0.011750f, 0.014856f, -0.001147f, 0.005983f, 0.003010f, 0.007047f, -0.012611f, -0.006811f, 0.008090f, 0.003912f, 0.000082f, -0.007015f, 0.001429f, -0.019566f, -0.012601f, -0.000686f, -0.007514f, -0.008498f, 0.003480f, 0.015281f, 0.002558f, 0.011635f, -0.002704f, 0.011498f, -0.006877f, -0.006138f, -0.000774f, -0.010391f, 0.002053f, 0.005155f, -0.003761f, -0.000259f, 0.002687f, 0.000481f, 0.004677f, -0.000565f, -0.011122f, 0.003968f, -0.006898f, -0.005203f, 0.003110f, -0.006855f, -0.010380f, 0.010307f, -0.010891f, 0.009808f, 0.009156f, 0.006024f, -0.000508f, -0.012779f, -0.007445f, 0.001423f, -0.002429f, 0.016414f, -0.010078f, 0.003980f, -0.001319f, 0.002155f, -0.012457f, -0.020781f, -0.003688f, -0.006253f, -0.006954f, -0.001654f, 0.008748f, -0.001924f, -0.009388f, 0.008191f, 0.003462f, -0.004185f, 0.006833f, -0.001363f, 0.002030f, -0.009580f, -0.000817f, -0.002410f, -0.000186f, 0.003636f, -0.004408f, 0.002940f, -0.008776f, 0.005876f, -0.001406f, 0.000600f, -0.003232f, -0.002919f, -0.000006f, 0.003558f, 0.001269f, -0.000153f, 0.001333f, -0.000093f, -0.005309f, 0.001493f, 0.000380f, 0.003281f, + -0.000582f, 0.000086f, -0.000065f, 0.000049f, -0.000387f, -0.001916f, 0.007975f, 0.007954f, 0.001127f, 0.014345f, -0.000163f, 0.006194f, 0.007709f, -0.000094f, -0.007001f, 0.000732f, -0.009947f, -0.012741f, -0.004836f, -0.014519f, -0.014985f, -0.004882f, 0.009850f, -0.003524f, -0.003413f, -0.007806f, -0.001975f, -0.013647f, 0.006668f, -0.003825f, 0.003368f, 0.008186f, 0.002777f, -0.002877f, 0.005629f, 0.005335f, -0.006660f, 0.004622f, 0.000614f, 0.001232f, 0.004991f, -0.011906f, -0.005137f, 0.008427f, -0.005406f, -0.000398f, -0.003439f, 0.009353f, -0.011991f, -0.001002f, -0.010043f, 0.006507f, -0.000597f, -0.000741f, 0.009073f, -0.003926f, -0.004360f, -0.003140f, -0.008480f, 0.000602f, -0.003841f, -0.000678f, 0.000561f, 0.005768f, 0.005864f, 0.001971f, -0.002605f, -0.010014f, -0.016376f, -0.005081f, -0.001138f, -0.004051f, 0.008802f, -0.003555f, -0.005049f, 0.007023f, -0.004526f, -0.007028f, 0.015541f, -0.003381f, -0.008693f, -0.000785f, 0.001427f, -0.002608f, 0.007666f, -0.000997f, -0.006852f, 0.000098f, 0.000301f, -0.001480f, -0.002064f, 0.006095f, 0.001377f, 0.000859f, -0.003637f, 0.000757f, + -0.001108f, 0.000411f, 0.002378f, -0.000535f, 0.001348f, 0.002828f, 0.000357f, -0.000574f, -0.000610f, 0.001198f, -0.003455f, -0.001292f, -0.000691f, -0.001595f, 0.001437f, 0.001191f, -0.000567f, 0.016649f, -0.010586f, -0.004991f, -0.007660f, 0.006186f, 0.001199f, -0.000742f, 0.012010f, 0.002893f, 0.003521f, -0.017399f, 0.003213f, -0.008109f, -0.009443f, -0.012265f, -0.000197f, 0.000457f, 0.014581f, -0.011897f, 0.005518f, -0.004980f, 0.018028f, -0.006483f, -0.005968f, 0.012842f, -0.004900f, 0.004445f, 0.001939f, -0.000832f, 0.002123f, -0.008580f, 0.001401f, 0.000426f, 0.003641f, 0.016962f, 0.005908f, 0.001604f, -0.007230f, 0.005950f, -0.013162f, -0.003631f, -0.002518f, 0.007234f, 0.006167f, 0.010259f, 0.006717f, -0.007651f, -0.011285f, -0.004901f, 0.008628f, -0.001033f, 0.004481f, -0.001789f, -0.001242f, 0.017249f, 0.004067f, -0.001280f, -0.020554f, -0.009142f, 0.000539f, 0.007180f, 0.011004f, 0.015507f, 0.008674f, -0.003709f, 0.002780f, -0.003762f, -0.005255f, 0.011136f, -0.006993f, 0.011465f, 0.000527f, -0.010292f, 0.003727f, -0.005288f, 0.008930f, -0.007630f, -0.000872f, 0.007790f, + 0.008908f, -0.008895f, -0.003420f, -0.001648f, -0.003653f, 0.005397f, -0.001196f, -0.003783f, 0.002478f, 0.001328f, 0.001365f, 0.001540f, 0.002162f, 0.001205f, 0.001294f, 0.000610f, -0.000639f, -0.000741f, -0.003302f, 0.005179f, -0.000196f, 0.000346f, 0.000593f, 0.000117f, 0.000822f, 0.002784f, 0.002674f, -0.000083f, -0.000697f, 0.003462f, 0.002610f, 0.002085f, 0.008730f, -0.002091f, -0.001463f, -0.003222f, -0.010219f, 0.000397f, 0.007339f, 0.007311f, 0.013676f, 0.006269f, -0.017960f, -0.015002f, -0.013019f, 0.000538f, -0.002206f, 0.000953f, -0.007093f, -0.004407f, -0.001104f, 0.005452f, -0.000074f, -0.011507f, 0.012433f, -0.001777f, -0.011553f, 0.002365f, 0.002728f, -0.000237f, -0.001110f, 0.004998f, 0.006583f, -0.004121f, 0.010062f, 0.000499f, 0.005895f, -0.013724f, 0.009762f, 0.003472f, 0.005629f, -0.009446f, -0.001038f, 0.006905f, 0.005909f, 0.014987f, -0.000561f, -0.020698f, -0.005662f, -0.009915f, 0.004849f, 0.003352f, -0.000859f, -0.005527f, 0.001579f, -0.008489f, -0.003009f, -0.015457f, -0.009099f, -0.000522f, 0.008605f, 0.009604f, -0.006937f, -0.005938f, -0.006079f, 0.009871f, + -0.003372f, -0.001217f, -0.014845f, 0.008944f, -0.014652f, -0.005089f, -0.000640f, -0.003099f, -0.003983f, 0.015583f, -0.001331f, -0.003624f, -0.004176f, 0.003091f, -0.009398f, 0.001080f, -0.016295f, -0.013096f, 0.004767f, -0.004573f, -0.002438f, 0.005820f, -0.002955f, 0.007765f, 0.001526f, 0.003566f, 0.005464f, -0.001463f, 0.002637f, 0.001782f, 0.001005f, -0.001150f, 0.001994f, 0.000807f, 0.000488f, -0.001214f, -0.001287f, 0.000317f, -0.004778f, -0.000091f, 0.002989f, 0.000716f, -0.000190f, 0.000566f, -0.002935f, -0.000949f, 0.001783f, -0.000878f, 0.004156f, -0.005401f, 0.007648f, -0.006150f, 0.000006f, 0.010556f, 0.019220f, 0.013297f, 0.002854f, -0.015049f, -0.011292f, 0.004039f, -0.002584f, -0.009651f, -0.003169f, -0.012432f, -0.005346f, 0.024980f, 0.002887f, -0.002661f, -0.004654f, 0.000015f, -0.005814f, -0.004020f, 0.016889f, -0.017526f, -0.002068f, 0.001731f, -0.003750f, 0.004400f, 0.010215f, -0.004694f, -0.005771f, 0.002584f, -0.007179f, -0.007004f, -0.016297f, -0.006036f, 0.004389f, -0.014589f, -0.002446f, 0.007240f, 0.010990f, 0.003911f, -0.022886f, -0.006905f, 0.004598f, 0.011536f, + -0.008979f, 0.019908f, -0.002321f, -0.010104f, -0.005638f, -0.004310f, -0.007868f, 0.010822f, -0.008095f, -0.002159f, -0.010690f, -0.008386f, -0.003925f, -0.008528f, 0.011442f, -0.004212f, -0.022943f, 0.008762f, 0.015391f, 0.000205f, 0.005561f, -0.027882f, 0.021757f, 0.000394f, -0.018284f, 0.001844f, -0.012352f, -0.002620f, 0.001928f, -0.013270f, -0.015571f, 0.010339f, 0.004830f, -0.013482f, -0.000929f, 0.000334f, -0.008350f, -0.001057f, -0.003093f, 0.002072f, -0.007413f, -0.003825f, -0.001477f, -0.003692f, -0.001889f, -0.005450f, 0.001771f, -0.000371f, 0.002782f, -0.005926f, 0.001375f, 0.003329f, -0.000102f, -0.003375f, 0.002147f, -0.003277f, 0.003085f, 0.002517f, -0.002527f, 0.002454f, -0.000485f, -0.001744f, -0.000832f, 0.000844f, 0.001166f, 0.000698f, -0.020632f, 0.004657f, -0.015187f, 0.016241f, 0.004146f, -0.006171f, -0.012255f, -0.021483f, -0.009328f, -0.015551f, 0.005391f, 0.030070f, 0.005151f, -0.007787f, -0.000430f, -0.004096f, -0.004598f, -0.013516f, -0.008875f, -0.013916f, 0.003813f, -0.001022f, 0.003100f, -0.004852f, 0.002355f, -0.014707f, -0.000969f, 0.003399f, -0.009976f, -0.003664f, + 0.001310f, -0.005437f, 0.001493f, -0.005003f, 0.022242f, -0.027098f, -0.004782f, 0.002225f, 0.007347f, -0.002775f, -0.011093f, -0.016612f, -0.011750f, 0.008947f, -0.002323f, 0.009923f, -0.008393f, 0.025737f, 0.003425f, -0.004966f, -0.000196f, -0.015256f, -0.019475f, -0.009847f, 0.007467f, -0.016655f, -0.000949f, 0.019601f, -0.000482f, -0.009258f, -0.018525f, -0.031414f, 0.001372f, 0.016138f, -0.004397f, 0.018516f, -0.001606f, -0.005789f, -0.011539f, -0.010260f, 0.001874f, 0.007356f, -0.005854f, 0.026845f, 0.008183f, -0.008615f, 0.004206f, -0.011027f, 0.004130f, 0.005077f, -0.003614f, 0.005819f, 0.010955f, 0.004624f, 0.000580f, -0.007205f, -0.019650f, 0.001327f, -0.004405f, -0.001989f, -0.002934f, 0.001419f, 0.000501f, -0.000259f, -0.008644f, 0.001375f, -0.004926f, 0.001637f, -0.004852f, -0.001639f, -0.001211f, -0.000455f, -0.000372f, -0.000955f, -0.003464f, -0.003172f, -0.003802f, -0.005704f, -0.005992f, -0.002541f, 0.000383f, 0.001595f, -0.003111f, -0.000098f, 0.000257f, 0.000589f, -0.002350f, 0.017643f, -0.007749f, -0.020407f, -0.005582f, -0.015242f, -0.007933f, -0.006624f, 0.021616f, -0.005435f, + -0.007236f, -0.009128f, 0.013898f, 0.012480f, 0.011034f, 0.030483f, 0.031950f, 0.014783f, 0.019864f, -0.007489f, -0.009180f, 0.013199f, 0.019601f, -0.008519f, 0.008624f, 0.006037f, -0.017003f, -0.016121f, 0.009524f, -0.002375f, -0.000196f, -0.016088f, -0.020403f, -0.004874f, -0.016536f, 0.018718f, 0.035033f, 0.007218f, 0.013837f, 0.004012f, -0.004102f, 0.012497f, -0.023903f, -0.006407f, 0.004994f, 0.013317f, -0.007859f, -0.019331f, 0.028228f, -0.000066f, -0.008646f, -0.006906f, 0.011594f, -0.003470f, 0.010338f, -0.007064f, 0.016214f, -0.001366f, -0.000406f, 0.020000f, 0.006237f, 0.009223f, 0.003613f, -0.003055f, 0.014961f, -0.022767f, -0.009113f, 0.008514f, 0.025771f, -0.015669f, -0.001809f, -0.003197f, -0.003617f, -0.010737f, -0.002354f, -0.005571f, -0.007373f, -0.001054f, 0.001742f, 0.007281f, -0.003017f, 0.020679f, 0.007544f, -0.011866f, -0.002855f, 0.001550f, 0.007902f, 0.002800f, -0.003581f, -0.007156f, -0.001556f, 0.004576f, -0.004601f, -0.004027f, -0.003520f, 0.004247f, 0.002648f, 0.004195f, 0.002189f, -0.003800f, -0.001505f, 0.000133f, -0.003839f, -0.000654f, 0.003010f, 0.001873f, + -0.000473f, -0.004260f, 0.005648f, -0.000761f, 0.003516f, -0.002370f, 0.001725f, -0.004950f, -0.000480f, -0.000714f, 0.000239f, -0.003294f, 0.012772f, -0.012498f, -0.004837f, 0.011532f, -0.008951f, 0.005001f, 0.008696f, -0.017061f, -0.018204f, 0.005224f, 0.014000f, -0.004729f, 0.012782f, -0.009255f, -0.004069f, 0.024317f, -0.027514f, 0.016629f, -0.007810f, 0.000219f, 0.000776f, 0.030022f, -0.006637f, 0.005948f, 0.009575f, 0.016551f, 0.009704f, 0.014502f, -0.002372f, -0.002307f, 0.004763f, 0.002352f, 0.002445f, -0.014461f, 0.022544f, -0.030001f, -0.006577f, -0.007882f, 0.016804f, -0.003360f, 0.020471f, -0.000918f, 0.001960f, -0.035703f, -0.009772f, 0.021801f, 0.037057f, -0.000315f, -0.018346f, -0.015459f, 0.015238f, 0.012255f, 0.009228f, 0.008750f, -0.015723f, -0.007187f, -0.009090f, 0.004836f, 0.000701f, -0.009655f, 0.005732f, 0.005000f, -0.004488f, -0.004931f, -0.021529f, -0.005658f, -0.007881f, 0.030841f, 0.002852f, 0.005836f, 0.011711f, 0.000954f, -0.024097f, 0.001232f, -0.014496f, 0.012075f, 0.028802f, -0.015226f, 0.008926f, -0.004360f, -0.014906f, 0.007252f, -0.012491f, -0.002135f, + 0.005251f, 0.003901f, 0.006614f, 0.002811f, -0.001016f, -0.005442f, 0.006258f, 0.013519f, 0.002293f, 0.006714f, 0.011121f, 0.004969f, 0.012570f, -0.003761f, 0.011890f, 0.000624f, 0.000302f, 0.002614f, 0.001350f, 0.003438f, -0.000341f, -0.005805f, -0.003224f, 0.000278f, 0.003199f, 0.003371f, -0.002261f, 0.005777f, 0.005469f, -0.004563f, 0.007724f, 0.013009f, -0.022385f, -0.008618f, -0.008422f, 0.004255f, -0.001291f, 0.033299f, -0.004187f, 0.001156f, 0.021139f, -0.018863f, -0.013696f, -0.017686f, -0.018511f, -0.004503f, -0.000683f, 0.008302f, 0.035621f, -0.003280f, -0.020508f, 0.036870f, 0.000604f, 0.010298f, 0.025212f, 0.017363f, 0.023529f, -0.006185f, 0.018587f, -0.012036f, 0.024632f, 0.021507f, -0.005844f, 0.011189f, -0.009919f, -0.009244f, 0.009301f, 0.028155f, 0.012693f, 0.011104f, 0.003989f, -0.009043f, -0.015584f, -0.015906f, 0.002569f, 0.019335f, -0.011288f, -0.013636f, -0.016688f, -0.006394f, -0.033075f, -0.007820f, 0.006335f, -0.024367f, 0.011745f, 0.001658f, -0.011092f, -0.028616f, -0.019088f, -0.000045f, -0.037865f, 0.011787f, 0.008376f, -0.000928f, 0.010544f, 0.006767f, + -0.003700f, -0.019821f, -0.011955f, -0.002325f, -0.012503f, 0.011551f, -0.013102f, 0.031243f, -0.021117f, 0.001001f, 0.013762f, 0.001094f, -0.009445f, -0.036306f, 0.006299f, 0.017605f, 0.004289f, 0.000904f, 0.019619f, 0.010689f, -0.011253f, -0.000130f, -0.001313f, 0.001321f, -0.000805f, -0.006407f, -0.012751f, -0.003964f, -0.013775f, 0.000611f, 0.003441f, 0.001518f, -0.003570f, -0.007289f, -0.003302f, -0.004927f, 0.005980f, 0.001625f, 0.007825f, 0.005394f, 0.004494f, 0.001536f, -0.000648f, -0.002908f, -0.002424f, -0.006439f, 0.002873f, 0.000200f, 0.002862f, -0.003229f, -0.000416f, -0.005441f, 0.000333f, -0.004310f, 0.001613f, -0.046225f, 0.016240f, 0.021118f, 0.037146f, -0.000101f, -0.027583f, 0.007796f, 0.013295f, -0.028552f, -0.029699f, -0.018552f, -0.000730f, 0.015873f, -0.000816f, -0.011620f, -0.000604f, -0.010165f, -0.006849f, -0.018398f, 0.030753f, 0.024037f, 0.009047f, -0.037687f, -0.011294f, 0.006087f, -0.002141f, -0.008373f, 0.047738f, 0.017514f, 0.015005f, 0.014077f, 0.022663f, 0.017028f, 0.004148f, 0.017828f, -0.001206f, -0.029601f, 0.016044f, -0.030450f, 0.009323f, -0.030145f, + 0.025501f, -0.007945f, 0.030790f, -0.016761f, 0.007490f, -0.013549f, 0.011105f, 0.018044f, 0.046993f, 0.009972f, -0.059733f, -0.003124f, -0.008304f, 0.012872f, 0.026117f, -0.005241f, -0.011593f, 0.019230f, -0.003380f, -0.009375f, 0.025727f, 0.001678f, -0.001130f, 0.001354f, 0.011024f, 0.020621f, 0.016301f, -0.017628f, -0.013133f, -0.011102f, -0.017925f, 0.004258f, -0.001650f, 0.020391f, 0.014627f, -0.027385f, -0.006610f, -0.015466f, 0.013325f, -0.007499f, -0.007323f, 0.004865f, 0.000900f, -0.010511f, 0.009076f, 0.002276f, 0.001514f, -0.001496f, 0.005163f, 0.005409f, 0.000856f, -0.015466f, 0.004343f, 0.002784f, -0.001993f, -0.002667f, -0.005163f, 0.000274f, -0.006909f, 0.003281f, 0.007796f, -0.002294f, -0.002317f, 0.007729f, 0.001194f, -0.007051f, -0.005471f, -0.001203f, 0.003722f, -0.003024f, -0.000748f, -0.004302f, 0.001170f, -0.002847f, 0.000029f, 0.007439f, -0.004932f, 0.050323f, -0.019099f, -0.033569f, -0.010701f, 0.013088f, -0.008317f, 0.024175f, 0.034983f, -0.014098f, 0.032082f, 0.020642f, 0.016116f, -0.005322f, -0.003893f, -0.006487f, 0.031118f, 0.005678f, 0.003728f, -0.018147f, + 0.007868f, -0.009491f, -0.000819f, -0.029960f, 0.020267f, -0.027493f, 0.000101f, -0.019396f, 0.032460f, -0.016617f, 0.000700f, 0.032083f, 0.024373f, 0.016481f, -0.001989f, -0.012753f, 0.014893f, -0.000480f, -0.002910f, -0.041000f, -0.012199f, -0.024769f, -0.020141f, -0.015711f, -0.007429f, 0.021302f, 0.013366f, 0.012419f, 0.000026f, 0.031357f, -0.016640f, 0.033182f, 0.029156f, 0.031299f, 0.054742f, -0.021184f, -0.016551f, 0.024070f, 0.004507f, -0.021262f, 0.033020f, -0.010884f, -0.015983f, 0.010711f, -0.004116f, -0.011475f, -0.009489f, 0.014179f, -0.019196f, 0.008675f, -0.011906f, 0.030333f, -0.012944f, 0.000454f, 0.008827f, 0.022110f, 0.030048f, 0.002384f, -0.026308f, -0.028573f, 0.009294f, -0.019048f, -0.061292f, -0.032276f, 0.009734f, -0.000729f, 0.017676f, 0.002224f, -0.010086f, -0.001207f, -0.005875f, 0.002556f, -0.010672f, -0.004725f, -0.007341f, -0.003122f, 0.000789f, -0.001378f, -0.019182f, -0.005086f, -0.012583f, -0.011321f, -0.008893f, 0.003823f, -0.000942f, 0.000707f, -0.013987f, -0.009788f, -0.000581f, -0.000613f, 0.002658f, 0.007099f, 0.005839f, 0.004293f, -0.010087f, 0.000395f, + 0.002221f, -0.013063f, 0.004500f, 0.000662f, 0.005571f, 0.002457f, 0.007124f, 0.003942f, -0.003013f, 0.005968f, -0.004727f, -0.003590f, -0.046957f, -0.039694f, -0.001922f, 0.008335f, -0.027104f, 0.001198f, 0.002394f, 0.043644f, -0.028476f, -0.032579f, 0.010552f, -0.013734f, -0.000058f, -0.023808f, 0.022668f, -0.024189f, -0.032404f, -0.019610f, 0.037437f, -0.025551f, -0.020873f, -0.004819f, 0.015196f, -0.011209f, -0.026863f, 0.008319f, -0.010883f, 0.000144f, 0.012216f, -0.035440f, -0.002676f, 0.019605f, 0.031524f, -0.004806f, 0.048190f, 0.021115f, -0.005499f, 0.002126f, 0.021913f, -0.009044f, -0.019604f, 0.003701f, 0.026103f, 0.002892f, 0.012529f, 0.000568f, -0.021385f, 0.007372f, -0.046941f, 0.004253f, 0.002546f, -0.005998f, -0.027650f, -0.025116f, 0.003043f, -0.011467f, -0.018986f, -0.012733f, -0.015286f, 0.017946f, -0.030918f, -0.017664f, -0.008919f, 0.013431f, -0.018194f, 0.037887f, -0.005712f, -0.031879f, -0.002766f, -0.018987f, -0.050548f, -0.015137f, 0.003340f, -0.001559f, -0.032841f, -0.017553f, -0.007502f, 0.007464f, -0.019521f, -0.009707f, 0.032389f, -0.011546f, -0.044222f, -0.015576f, + 0.005717f, 0.003365f, 0.014524f, 0.012272f, 0.009162f, -0.010292f, -0.012854f, -0.003080f, -0.008984f, 0.006436f, 0.001937f, -0.005687f, 0.009456f, 0.003928f, 0.005555f, -0.003839f, 0.004550f, 0.003401f, -0.000036f, -0.001899f, -0.003283f, -0.004120f, 0.000072f, 0.002550f, -0.015727f, 0.003354f, -0.009054f, 0.010088f, 0.003731f, -0.011641f, -0.010306f, -0.000913f, -0.008160f, -0.001208f, 0.003308f, -0.002962f, -0.005513f, -0.008638f, -0.006566f, 0.004532f, 0.001671f, -0.009782f, 0.003637f, 0.001003f, -0.006513f, -0.005546f, 0.035853f, 0.032045f, 0.009609f, 0.065598f, -0.012183f, -0.022912f, -0.020528f, -0.009614f, -0.035334f, 0.047746f, -0.028597f, -0.010438f, -0.023162f, -0.011950f, -0.010885f, 0.005637f, -0.033602f, 0.000528f, 0.000394f, -0.004632f, 0.009560f, -0.035523f, -0.009016f, 0.024375f, -0.024181f, 0.001334f, -0.031294f, 0.030055f, 0.000195f, -0.053376f, -0.027680f, -0.009662f, -0.001125f, 0.014849f, -0.032398f, -0.018174f, 0.022287f, -0.003801f, 0.015404f, 0.014151f, 0.013990f, -0.019449f, 0.002204f, 0.023619f, 0.008765f, -0.044061f, 0.028449f, 0.020520f, -0.023775f, 0.067688f, + -0.001150f, -0.048570f, 0.013530f, 0.015356f, -0.000989f, 0.036128f, -0.010975f, -0.060341f, 0.017126f, 0.008663f, 0.018197f, 0.021429f, -0.027466f, 0.043674f, 0.016564f, 0.013589f, -0.010243f, 0.066135f, -0.004930f, 0.001150f, 0.045279f, -0.007701f, 0.020742f, 0.035731f, 0.012407f, 0.005338f, -0.008407f, 0.017179f, 0.000914f, 0.030212f, -0.013090f, 0.029409f, 0.027157f, 0.001654f, 0.026877f, 0.015984f, 0.021459f, -0.010827f, 0.000140f, 0.024409f, 0.017803f, 0.013115f, 0.008077f, 0.008357f, -0.015887f, -0.001882f, 0.001014f, -0.007516f, 0.001254f, -0.002725f, -0.006658f, 0.014145f, -0.014271f, -0.002749f, -0.013991f, 0.012327f, -0.005802f, 0.014772f, -0.012313f, 0.002060f, -0.008489f, -0.012434f, 0.008930f, -0.004744f, -0.000023f, -0.012136f, -0.017723f, -0.013376f, 0.014252f, 0.001334f, -0.005428f, 0.001470f, 0.017678f, 0.012593f, -0.004924f, 0.006107f, 0.000571f, -0.004875f, 0.018290f, 0.000634f, 0.013213f, -0.046805f, -0.045939f, 0.094207f, 0.030382f, -0.058862f, -0.029609f, -0.027007f, -0.053908f, -0.004018f, -0.028459f, 0.039231f, -0.022205f, 0.000181f, 0.048928f, 0.001040f, + 0.008110f, -0.036060f, 0.045108f, 0.033624f, -0.000614f, -0.010900f, -0.003548f, -0.028037f, 0.002098f, 0.003549f, 0.005692f, -0.038522f, -0.005641f, -0.002240f, -0.011627f, -0.008586f, -0.026583f, 0.025140f, 0.049785f, 0.059839f, -0.004913f, -0.024253f, -0.010153f, -0.012406f, -0.008428f, -0.036741f, 0.012457f, 0.014346f, 0.013134f, -0.038286f, -0.051138f, 0.055225f, 0.020816f, 0.030927f, 0.040074f, 0.037617f, -0.016354f, -0.025725f, 0.036257f, -0.036946f, 0.018695f, -0.027652f, -0.021261f, -0.012335f, 0.043145f, -0.014320f, 0.008727f, 0.014852f, -0.007927f, -0.034930f, 0.072175f, -0.043667f, 0.004429f, 0.052330f, -0.047420f, -0.021420f, 0.005512f, 0.019156f, 0.053730f, 0.009660f, -0.031260f, 0.000918f, 0.006494f, -0.007279f, -0.013165f, 0.007778f, -0.021917f, 0.016784f, -0.018156f, -0.025358f, 0.013631f, 0.007749f, 0.019289f, 0.008764f, -0.000782f, -0.008759f, 0.002110f, 0.005479f, 0.005897f, 0.020774f, -0.001275f, 0.002934f, 0.012786f, -0.030588f, 0.004327f, -0.013740f, 0.003283f, 0.003497f, -0.005039f, -0.011526f, -0.014471f, -0.003433f, -0.014524f, 0.005750f, 0.007747f, 0.017804f, + -0.001654f, -0.011766f, 0.011202f, 0.013824f, 0.008258f, 0.008490f, -0.022163f, 0.000870f, 0.005462f, -0.005371f, 0.018883f, -0.007020f, 0.001325f, 0.002126f, 0.017426f, -0.008257f, 0.005139f, 0.024448f, -0.015739f, 0.015314f, 0.062728f, 0.037784f, -0.005724f, -0.040261f, 0.004156f, 0.064326f, 0.051208f, 0.010743f, -0.051015f, -0.019682f, -0.044051f, -0.003336f, 0.034380f, 0.042482f, -0.003175f, 0.016114f, 0.050502f, 0.053750f, 0.083434f, 0.083987f, -0.042018f, 0.018233f, -0.045369f, -0.008251f, -0.036790f, -0.013254f, 0.028909f, -0.006540f, 0.012625f, 0.011331f, -0.026158f, -0.019178f, 0.021259f, 0.023708f, 0.030778f, 0.021859f, -0.001098f, 0.022537f, 0.033977f, -0.018076f, 0.017179f, 0.020014f, 0.005921f, 0.019544f, 0.065058f, -0.048996f, -0.042187f, -0.009547f, 0.040178f, 0.038494f, -0.022967f, -0.000356f, 0.061754f, 0.049928f, -0.035088f, -0.023428f, 0.021182f, -0.042845f, 0.011839f, -0.020654f, -0.038866f, 0.012470f, -0.045656f, 0.047297f, 0.017339f, 0.052399f, -0.022100f, -0.030767f, -0.059342f, -0.012909f, 0.019300f, -0.052022f, -0.044503f, -0.024415f, 0.023143f, 0.013657f, + 0.010853f, -0.022970f, 0.009859f, -0.016468f, 0.006228f, 0.048158f, -0.020613f, 0.005565f, -0.027447f, 0.020615f, -0.011364f, -0.023098f, 0.016147f, 0.022412f, -0.012615f, -0.006597f, -0.007508f, 0.016055f, 0.035900f, -0.011655f, -0.024289f, 0.000395f, -0.000540f, -0.009101f, -0.003945f, -0.033685f, 0.004545f, -0.017972f, -0.008097f, 0.011996f, -0.011064f, -0.006128f, -0.001112f, -0.009467f, 0.014661f, -0.014910f, -0.023374f, -0.021243f, -0.017888f, 0.018682f, 0.009793f, -0.004513f, 0.008205f, 0.005420f, -0.015208f, -0.016646f, 0.005967f, -0.029357f, 0.024770f, 0.063113f, -0.004057f, -0.019523f, 0.040532f, 0.008343f, -0.002315f, -0.060067f, 0.052792f, -0.026037f, -0.057062f, -0.019384f, 0.003889f, 0.065815f, 0.006331f, 0.047167f, 0.019146f, -0.055835f, -0.012114f, -0.049464f, 0.007972f, -0.049305f, -0.035432f, -0.021163f, 0.002513f, 0.010380f, -0.038193f, 0.037523f, -0.012075f, 0.022806f, 0.024537f, 0.024265f, 0.045541f, 0.083025f, 0.048745f, -0.015834f, -0.040806f, -0.001420f, 0.087443f, 0.054466f, -0.029733f, 0.043525f, -0.016736f, 0.053164f, -0.026377f, 0.005169f, -0.019739f, -0.009802f, + -0.002947f, -0.014930f, 0.131405f, -0.024986f, -0.036231f, -0.041911f, -0.058918f, -0.022675f, -0.045404f, -0.002020f, 0.050801f, -0.020217f, 0.015025f, -0.016901f, -0.025882f, 0.046192f, -0.012820f, 0.077813f, 0.014444f, 0.062244f, -0.076002f, 0.031323f, 0.133587f, 0.048611f, -0.074466f, 0.044359f, 0.040640f, 0.002461f, 0.008646f, -0.022818f, 0.025472f, 0.117261f, 0.062380f, 0.026330f, 0.035592f, -0.036658f, 0.067891f, -0.007079f, 0.010464f, 0.010789f, 0.016788f, 0.007893f, 0.044671f, -0.036855f, -0.009169f, 0.003240f, 0.056942f, -0.009575f, 0.013995f, 0.065940f, -0.005146f, -0.036642f, -0.008437f, 0.024272f, 0.004045f, -0.015473f, -0.037130f, 0.021667f, 0.015557f, -0.025555f, -0.014991f, 0.017787f, -0.031402f, -0.026115f, 0.008556f, 0.013142f, -0.000057f, 0.009149f, 0.006235f, 0.010691f, -0.011471f, 0.011182f, -0.006961f, -0.009323f, 0.010323f, 0.004471f, 0.014263f, 0.002210f, 0.091285f, 0.042595f, 0.010136f, -0.002913f, -0.099757f, 0.046400f, 0.062583f, -0.045215f, -0.032881f, 0.077275f, 0.050418f, -0.062061f, -0.065808f, 0.002180f, -0.038476f, 0.016584f, 0.006343f, 0.015816f, + -0.061839f, 0.015994f, -0.012030f, -0.030966f, 0.054927f, -0.004005f, -0.009145f, 0.018280f, 0.046071f, 0.041197f, 0.028336f, -0.053110f, 0.001176f, -0.026031f, -0.056362f, 0.020323f, 0.015998f, 0.034502f, -0.011872f, -0.026543f, 0.072208f, -0.052062f, 0.022933f, 0.024798f, 0.020455f, 0.015214f, -0.008890f, 0.042359f, -0.039471f, -0.068619f, -0.011384f, -0.078568f, 0.068793f, 0.041888f, 0.067515f, -0.005785f, 0.013382f, -0.054775f, 0.056731f, 0.071026f, 0.025738f, -0.030733f, -0.079873f, -0.018792f, -0.105409f, 0.001152f, -0.019514f, -0.072004f, -0.060593f, 0.027376f, 0.004597f, 0.043594f, -0.033904f, 0.050027f, 0.042643f, -0.060366f, 0.012862f, -0.036263f, -0.009947f, -0.054607f, 0.007064f, 0.157034f, 0.039490f, 0.045703f, 0.057915f, 0.025218f, -0.044515f, -0.006690f, -0.000434f, 0.036824f, -0.008374f, 0.037843f, -0.017194f, -0.024260f, 0.001150f, -0.003272f, -0.043949f, 0.037376f, -0.006799f, -0.011450f, -0.013473f, -0.031577f, 0.004680f, -0.015251f, -0.019527f, -0.029412f, -0.022392f, 0.013374f, -0.016101f, 0.013073f, 0.015923f, -0.011702f, -0.018160f, -0.025525f, 0.011638f, -0.005177f, + 0.010860f, 0.037309f, 0.023960f, -0.001130f, -0.002870f, 0.011471f, 0.024045f, -0.024201f, 0.021248f, -0.024402f, -0.010283f, -0.062411f, 0.028139f, 0.021600f, -0.029125f, 0.010959f, -0.014781f, -0.094118f, -0.024583f, 0.024048f, -0.010554f, 0.011078f, -0.052288f, 0.069504f, -0.090172f, 0.007824f, -0.065942f, 0.046807f, 0.051296f, 0.017301f, 0.042992f, 0.005437f, -0.043347f, 0.075401f, -0.034447f, 0.008611f, 0.001558f, -0.042207f, 0.071253f, 0.005694f, 0.018776f, 0.016305f, 0.022511f, 0.012586f, 0.053485f, 0.063393f, 0.021531f, 0.073941f, -0.063123f, -0.004048f, 0.000450f, 0.094327f, -0.017448f, 0.075388f, 0.042045f, 0.103283f, 0.020591f, -0.022356f, -0.032217f, 0.041581f, -0.076130f, 0.073161f, -0.043148f, -0.024877f, -0.011666f, 0.015482f, 0.055239f, -0.011913f, -0.098831f, -0.026684f, 0.161327f, 0.012835f, -0.100804f, 0.025949f, -0.066594f, 0.020867f, 0.158959f, -0.042668f, -0.042898f, 0.110938f, -0.118203f, 0.060892f, 0.027728f, 0.036807f, 0.103702f, 0.066214f, -0.091254f, 0.113905f, 0.074937f, 0.004379f, 0.120981f, -0.048525f, -0.015934f, 0.088183f, 0.058135f, 0.011433f, + 0.024094f, 0.000910f, -0.000480f, 0.011568f, 0.030652f, -0.026005f, 0.032363f, 0.033516f, -0.026273f, 0.015136f, 0.022786f, -0.037650f, -0.002793f, 0.015564f, -0.002809f, 0.008455f, 0.049966f, 0.001915f, 0.033580f, -0.016170f, 0.001318f, 0.024885f, -0.014007f, -0.011242f, -0.031360f, 0.006690f, 0.030366f, 0.020844f, 0.028666f, -0.050675f, 0.029969f, 0.035089f, 0.016369f, 0.007150f, 0.015056f, -0.001154f, 0.031892f, 0.056347f, 0.014574f, 0.027844f, 0.026307f, -0.011465f, -0.013329f, 0.027521f, 0.040123f, 0.054541f, 0.103982f, 0.051776f, -0.049859f, 0.066497f, 0.019930f, 0.059994f, -0.017282f, -0.111047f, 0.112909f, 0.098050f, 0.060248f, 0.185111f, -0.017265f, -0.155298f, -0.080299f, -0.073282f, 0.164174f, 0.120702f, 0.029180f, -0.010412f, -0.030006f, -0.108559f, -0.051582f, -0.035147f, -0.062403f, 0.167116f, 0.135548f, 0.188485f, 0.003498f, -0.215505f, -0.335706f, -0.163646f, 0.187043f, 0.252487f, 0.257751f, 0.103997f, -0.213655f, -0.392435f, -0.240710f, -0.121362f, 0.181108f, 0.308064f, 0.174886f, 0.095261f, 0.025450f, -0.138725f, -0.186651f, -0.139496f, -0.010526f, 0.108495f, + 0.219552f, 0.262673f, 0.046681f, 0.051579f, -0.208288f, -0.344995f, -0.184078f, 0.172355f, 0.288862f, 0.274111f, 0.171004f, -0.100115f, -0.335815f, -0.217121f, -0.281600f, 0.001428f, 0.191172f, 0.206989f, 0.103572f, -0.081571f, -0.176815f, -0.156293f, -0.123902f, 0.037185f, 0.117749f, 0.083333f, 0.238225f, 0.086647f, -0.053338f, -0.140215f, -0.052328f, 0.159443f, 0.231892f, 0.079025f, -0.009136f, -0.141152f, -0.028932f, -0.031082f, 0.091457f, 0.035597f, -0.023522f, -0.097133f, -0.029624f, 0.006498f, -0.016002f, -0.028354f, -0.006677f, 0.024391f, 0.049333f, 0.085085f, 0.040128f, -0.081270f, -0.073899f, -0.067557f, 0.016153f, 0.089688f, 0.097714f, 0.046909f, 0.010040f, -0.061187f, -0.027547f, -0.121293f, -0.109228f, -0.007720f, 0.031715f, 0.136898f, 0.202662f, 0.079096f, -0.071401f, -0.165559f, -0.209417f, -0.085564f, 0.163221f, 0.272700f, 0.185046f, 0.058719f, -0.136526f, -0.219047f, -0.109218f, 0.001847f, 0.039555f, 0.042535f, 0.093458f, 0.050695f, 0.020050f, -0.053549f, -0.120388f, -0.087259f, 0.011646f, -0.023407f, -0.060251f, 0.069727f, 0.010105f, -0.100807f, 0.013095f, -0.026171f, + -0.040360f, 0.030445f, -0.030870f, -0.012253f, -0.053796f, 0.003230f, -0.020398f, -0.040215f, 0.016422f, -0.004444f, 0.013823f, 0.006653f, 0.033859f, -0.032786f, -0.010723f, 0.010275f, 0.004057f, 0.015706f, -0.013619f, 0.033922f, -0.023377f, 0.023425f, 0.011507f, -0.010744f, -0.024549f, -0.010591f, -0.046387f, 0.051241f, -0.004090f, 0.001953f, -0.008322f, -0.011934f, 0.003390f, -0.001240f, 0.001921f, 0.019969f, 0.012384f, -0.000334f, 0.029259f, -0.024495f, 0.009486f, -0.023253f, 0.026394f, 0.015950f, -0.018760f, 0.013888f, -0.023038f, -0.026507f, -0.020942f, -0.041005f, -0.003788f, 0.031190f, -0.027567f, -0.055871f, -0.037745f, 0.003517f, 0.034842f, 0.000847f, 0.026141f, -0.053196f, -0.013386f, -0.006091f, -0.004243f, -0.052040f, -0.012477f, 0.001813f, 0.008180f, -0.018627f, 0.054889f, 0.021908f, -0.017077f, 0.050100f, -0.004502f, -0.089623f, -0.003294f, -0.013076f, -0.007633f, 0.017230f, 0.011773f, 0.023750f, -0.027609f, 0.038432f, -0.065485f, 0.018911f, 0.012029f, -0.002901f, 0.000368f, -0.004431f, -0.004164f, 0.021921f, -0.003776f, 0.003723f, -0.009552f, -0.001179f, -0.018959f, 0.004714f, + 0.000489f, 0.038228f, 0.000019f, 0.016793f, -0.017394f, 0.001885f, -0.008574f, -0.023000f, 0.007375f, -0.000867f, -0.010930f, 0.027124f, -0.004883f, -0.007446f, -0.010783f, 0.019782f, -0.007313f, -0.038452f, 0.008162f, -0.007928f, 0.012124f, -0.016638f, 0.002058f, -0.005149f, -0.022932f, 0.021003f, -0.020247f, 0.014293f, -0.019325f, 0.009900f, -0.001448f, -0.007926f, -0.054442f, -0.089327f, -0.140335f, 0.005158f, 0.115860f, -0.044277f, -0.071071f, -0.075966f, -0.071780f, 0.015034f, 0.014924f, 0.133542f, -0.019290f, -0.019126f, -0.059372f, 0.006697f, 0.018099f, 0.042080f, -0.044623f, 0.022660f, -0.032446f, 0.052319f, 0.016701f, 0.017159f, 0.006325f, -0.032498f, -0.017666f, -0.021169f, -0.006970f, 0.018959f, -0.019583f, -0.017254f, 0.036907f, -0.033648f, -0.020977f, 0.030496f, -0.028979f, -0.010647f, -0.024872f, -0.040623f, 0.014394f, 0.026674f, 0.004930f, 0.025130f, -0.038189f, -0.009732f, -0.001105f, 0.022158f, 0.027473f, 0.033999f, 0.002405f, -0.003578f, -0.057448f, -0.059081f, -0.021821f, -0.019179f, -0.012902f, 0.027087f, 0.037174f, 0.052423f, 0.005809f, -0.023991f, 0.052612f, -0.037626f, + -0.016781f, 0.023352f, -0.016449f, 0.069001f, 0.003537f, -0.011574f, 0.011721f, -0.025305f, 0.020051f, 0.047765f, 0.039227f, -0.014244f, 0.014856f, -0.046580f, -0.030329f, -0.017351f, -0.011460f, 0.034371f, -0.004449f, 0.033548f, 0.008968f, -0.011229f, 0.004065f, 0.005888f, -0.040282f, 0.023819f, -0.029812f, 0.018373f, -0.013674f, -0.008596f, -0.002080f, 0.021788f, -0.020919f, 0.002398f, 0.003715f, 0.018979f, 0.033704f, -0.017390f, -0.005008f, -0.027050f, -0.010749f, 0.008973f, -0.010518f, 0.007059f, -0.008218f, -0.011288f, -0.018587f, -0.029580f, -0.016088f, 0.026304f, -0.010446f, 0.012754f, -0.019151f, -0.004850f, -0.001508f, -0.006500f, -0.017167f, -0.008185f, 0.001968f, -0.002467f, 0.000263f, -0.000454f, -0.025982f, 0.036575f, -0.090420f, -0.211368f, -0.161532f, -0.018644f, 0.069922f, 0.182362f, 0.153947f, 0.147005f, 0.150095f, 0.099079f, 0.041702f, -0.054096f, -0.096013f, -0.183177f, -0.135029f, -0.132622f, -0.132295f, -0.082235f, 0.079742f, 0.107571f, 0.157978f, 0.121372f, 0.101587f, 0.033582f, 0.067736f, -0.015213f, -0.017641f, -0.021253f, -0.037182f, -0.069328f, -0.056932f, -0.116797f, + -0.042663f, -0.092744f, -0.044323f, -0.021884f, 0.030280f, 0.006150f, 0.043369f, 0.010136f, 0.060780f, 0.044860f, 0.073545f, 0.098021f, 0.121526f, 0.077907f, 0.052141f, 0.086551f, 0.006534f, -0.029320f, -0.106940f, -0.125128f, -0.172431f, -0.153455f, -0.143736f, -0.054897f, -0.094400f, -0.049198f, 0.005608f, 0.026107f, 0.060648f, 0.116166f, 0.123490f, 0.138353f, 0.208612f, 0.117684f, 0.159776f, 0.111068f, 0.025088f, -0.016836f, -0.065763f, -0.166931f, -0.182936f, -0.173825f, -0.193241f, -0.141587f, -0.099091f, -0.079193f, -0.021943f, 0.040805f, 0.067898f, 0.086712f, 0.128533f, 0.136901f, 0.143776f, 0.136213f, 0.084580f, 0.059388f, 0.027911f, 0.003261f, -0.000604f, -0.040890f, -0.067406f, -0.096864f, -0.115661f, -0.122326f, -0.116178f, -0.081274f, -0.036846f, -0.032632f, -0.012663f, 0.021933f, 0.057491f, 0.072149f, 0.136003f, 0.096275f, 0.075613f, 0.076031f, 0.027112f, -0.002959f, -0.019914f, -0.023977f, -0.025912f, -0.065901f, -0.059604f, -0.042718f, -0.045216f, -0.032695f, 0.004113f, 0.010448f, 0.012827f, -0.007814f, 0.021444f, 0.000776f, 0.025415f, 0.026630f, 0.008430f, -0.009015f, + -0.001335f, 0.005821f, 0.003428f, 0.004235f, 0.011911f, 0.002768f, -0.006342f, -0.019124f, -0.004636f, 0.004359f, -0.000714f, 0.011876f, 0.009076f, -0.002015f, -0.001966f, -0.008177f, -0.006682f, -0.004432f, -0.003074f, -0.003653f, 0.002603f, -0.002224f, -0.001733f, -0.000508f, -0.004054f, -0.005399f, 0.000514f, 0.001086f, 0.001652f, 0.001186f, 0.000798f} + }, + { + {-0.017318f, 0.013452f, 0.000685f, 0.006191f, 0.006143f, 0.017404f, 0.008199f, -0.006398f, -0.008086f, -0.011289f, 0.008127f, -0.009873f, -0.007173f, 0.001639f, 0.002513f, 0.001094f, 0.010220f, -0.003309f, 0.009554f, -0.002419f, 0.008578f, -0.008080f, 0.003775f, -0.003557f, -0.008636f, -0.000589f, -0.016492f, 0.002499f, 0.004074f, 0.007406f, -0.006011f, -0.000076f, 0.006465f, -0.004722f, 0.007259f, 0.006835f, -0.004071f, 0.004914f, -0.005463f, -0.002531f, -0.004034f, -0.005904f, -0.007506f, 0.006758f, 0.009974f, -0.007431f, 0.004437f, 0.008023f, 0.006497f, 0.009818f, 0.001251f, -0.001454f, 0.005726f, 0.004349f, -0.010341f, -0.000378f, 0.001218f, 0.000677f, 0.003308f, 0.006732f, 0.001525f, 0.002451f, -0.003577f, -0.002261f, 0.004772f, 0.006688f, 0.003739f, -0.003522f, -0.006170f, 0.006894f, -0.005568f, -0.001802f, 0.003869f, -0.001149f, -0.000234f, 0.002944f, 0.000712f, 0.000198f, 0.006254f, -0.006095f, 0.004663f, 0.002539f, 0.003063f, 0.005769f, -0.002303f, -0.000660f, -0.001932f, -0.000801f, 0.000253f, 0.002827f, -0.002225f, -0.000403f, -0.001533f, -0.000887f, 0.000108f, -0.000217f, + -0.000888f, -0.000635f, 0.000648f, 0.000837f, -0.000005f, -0.000364f, -0.000612f, 0.000092f, -0.000187f, 0.000097f, -0.000884f, -0.000201f, 0.000908f, -0.001991f, 0.006860f, -0.003643f, 0.005025f, 0.000477f, -0.000430f, -0.013985f, 0.002240f, 0.011905f, -0.007316f, 0.004917f, -0.014851f, -0.015026f, -0.004955f, -0.012219f, -0.010667f, -0.001609f, 0.002198f, 0.008389f, 0.001331f, -0.004047f, 0.001896f, 0.005709f, -0.007389f, 0.010229f, -0.006937f, -0.007501f, 0.008665f, -0.004317f, 0.009983f, 0.012691f, 0.001754f, -0.009158f, 0.006403f, 0.004185f, 0.002564f, -0.004661f, -0.003381f, 0.005330f, 0.004448f, 0.000905f, -0.010353f, -0.002987f, -0.009564f, 0.008634f, -0.008633f, -0.005628f, 0.006352f, 0.000301f, 0.005513f, 0.001580f, 0.002113f, 0.009398f, 0.001586f, 0.010541f, -0.013593f, -0.006975f, -0.003146f, 0.006736f, 0.009518f, 0.010886f, 0.014804f, 0.001611f, -0.004224f, -0.001414f, -0.001993f, -0.000450f, -0.009630f, -0.004211f, -0.004193f, -0.001167f, 0.001480f, -0.007802f, -0.004629f, -0.001757f, -0.003331f, -0.006099f, 0.007328f, -0.007332f, -0.002509f, 0.004891f, -0.012579f, 0.003807f, + 0.006846f, 0.007610f, 0.003993f, 0.002212f, 0.004548f, -0.002224f, -0.004885f, -0.001221f, 0.001305f, -0.000515f, 0.001305f, 0.000250f, -0.001366f, 0.000107f, -0.001964f, -0.002287f, 0.002789f, 0.001271f, -0.000270f, -0.000009f, -0.000033f, 0.002138f, 0.000976f, -0.000816f, -0.000881f, -0.000852f, 0.000146f, 0.001586f, -0.001878f, -0.000298f, -0.000118f, -0.000330f, 0.001023f, -0.000034f, -0.000770f, 0.015925f, -0.011762f, -0.004398f, -0.002298f, 0.009801f, 0.008851f, -0.008882f, -0.000785f, -0.016509f, -0.003584f, 0.020073f, 0.007582f, -0.008040f, 0.014424f, 0.004723f, 0.005566f, 0.001495f, -0.004798f, -0.015755f, 0.002150f, -0.007081f, -0.004467f, -0.002858f, -0.009587f, -0.003378f, -0.007414f, 0.005222f, -0.003339f, -0.004331f, 0.009035f, -0.016958f, 0.015657f, -0.005482f, 0.002252f, -0.005292f, 0.004908f, -0.000607f, -0.001531f, -0.000394f, 0.006681f, 0.000356f, 0.004234f, -0.006044f, 0.011735f, -0.009078f, 0.013660f, 0.002930f, -0.001322f, -0.007606f, -0.008927f, 0.018555f, 0.003221f, -0.017343f, 0.017789f, 0.016769f, -0.009067f, -0.003306f, 0.005282f, -0.006830f, -0.001253f, -0.004199f, + 0.004228f, 0.010706f, -0.006474f, 0.002468f, -0.004844f, -0.004421f, 0.001772f, 0.014403f, -0.013163f, 0.008025f, -0.013568f, -0.010423f, -0.009795f, -0.001707f, 0.000286f, 0.000018f, 0.008240f, 0.012754f, 0.003337f, 0.003114f, 0.006230f, 0.005066f, 0.002797f, 0.003185f, 0.003740f, -0.001355f, 0.004024f, -0.001812f, -0.003934f, 0.006798f, -0.000333f, 0.000957f, -0.001224f, -0.001987f, -0.001174f, 0.000068f, 0.002869f, -0.000702f, 0.000646f, 0.000311f, -0.002547f, 0.000047f, 0.001412f, 0.001827f, -0.000208f, 0.001601f, 0.004541f, -0.006094f, 0.000737f, -0.012038f, 0.011600f, -0.016921f, 0.000722f, 0.017788f, -0.032133f, 0.022490f, 0.009034f, -0.008492f, 0.007133f, -0.000583f, 0.019617f, -0.001969f, -0.016086f, -0.011218f, 0.006652f, 0.007653f, 0.002263f, 0.000617f, 0.008393f, 0.002570f, 0.001459f, 0.011352f, 0.004709f, 0.003311f, 0.008220f, 0.005933f, 0.027948f, -0.007559f, 0.007517f, -0.000301f, -0.004462f, 0.007329f, 0.004603f, 0.002932f, 0.003649f, -0.004457f, -0.007594f, 0.000617f, 0.000105f, 0.000506f, 0.004148f, 0.008606f, -0.008550f, -0.009098f, 0.004097f, -0.002096f, + -0.003402f, -0.005402f, 0.011454f, -0.008022f, 0.016501f, 0.007808f, 0.000849f, 0.003958f, 0.001509f, 0.004591f, 0.020935f, 0.017596f, 0.001459f, 0.001104f, 0.004129f, -0.004069f, 0.007920f, -0.001597f, 0.007157f, 0.002283f, 0.000593f, 0.000131f, -0.008739f, 0.008622f, 0.006642f, -0.001775f, -0.004961f, 0.000831f, 0.008324f, 0.000929f, -0.002151f, 0.000596f, -0.006047f, 0.004617f, 0.001842f, 0.005849f, -0.001363f, 0.001830f, 0.002556f, 0.002523f, 0.002168f, 0.003569f, 0.001795f, 0.001669f, -0.007389f, -0.000297f, 0.003113f, 0.004383f, -0.002418f, 0.002897f, 0.002705f, 0.002409f, 0.002720f, 0.001236f, 0.002147f, 0.002621f, 0.002944f, 0.000592f, 0.001243f, 0.000953f, 0.001450f, 0.000558f, 0.000896f, 0.001881f, 0.000855f, -0.000171f, -0.001484f, -0.002026f, 0.004151f, -0.001864f, 0.009068f, 0.000246f, 0.010462f, -0.003951f, 0.009285f, -0.006954f, 0.019371f, -0.014746f, -0.005468f, -0.007021f, 0.019975f, 0.011308f, 0.007376f, 0.012678f, -0.011380f, -0.002285f, 0.018439f, 0.010460f, 0.008683f, 0.008952f, 0.004820f, 0.006157f, -0.002051f, 0.017656f, -0.001776f, -0.008098f, + -0.005978f, 0.006203f, -0.006593f, 0.004060f, -0.016618f, 0.006196f, -0.003138f, 0.000346f, -0.017858f, 0.007745f, -0.003783f, 0.016839f, -0.002683f, 0.005341f, 0.004677f, -0.007073f, -0.001699f, 0.007679f, 0.001118f, 0.005271f, -0.003729f, 0.009344f, 0.013291f, 0.001687f, -0.009163f, 0.003556f, 0.009367f, 0.006664f, 0.001298f, -0.006312f, -0.012937f, 0.010910f, -0.014411f, -0.006117f, 0.008189f, -0.019193f, -0.004327f, 0.011919f, -0.008799f, 0.002512f, 0.000239f, -0.001073f, -0.002494f, 0.004851f, -0.009500f, 0.000537f, -0.015912f, -0.008271f, -0.021774f, 0.001658f, -0.006051f, 0.000487f, -0.004154f, -0.000674f, -0.005477f, 0.005014f, 0.004871f, 0.001939f, -0.003370f, 0.004629f, -0.000439f, 0.001810f, -0.006213f, 0.001612f, 0.001378f, 0.002024f, 0.001469f, 0.004331f, -0.000468f, 0.004886f, -0.002049f, -0.000322f, 0.003483f, 0.004586f, 0.000807f, 0.002539f, -0.002854f, -0.001112f, -0.000739f, -0.001141f, -0.002022f, 0.001427f, 0.003670f, 0.000977f, 0.003868f, -0.003576f, -0.002049f, -0.002004f, -0.004865f, -0.005698f, 0.005226f, -0.035321f, 0.006163f, -0.011143f, -0.006492f, 0.008079f, + 0.006109f, 0.004296f, 0.001510f, -0.025954f, -0.002786f, 0.008065f, -0.013991f, -0.003665f, -0.019123f, -0.009721f, 0.004186f, -0.002281f, -0.017620f, 0.018262f, 0.010955f, -0.005607f, 0.001889f, 0.014365f, -0.009383f, 0.003848f, -0.006456f, -0.010049f, -0.006948f, -0.018162f, -0.006885f, 0.013668f, 0.006332f, 0.017470f, -0.008977f, -0.028637f, -0.012500f, 0.006972f, -0.009322f, -0.018677f, -0.003300f, -0.003539f, 0.016875f, 0.008648f, -0.020013f, 0.013219f, -0.014218f, -0.000909f, -0.010321f, -0.009840f, -0.009472f, -0.022035f, -0.013182f, 0.001534f, 0.013948f, 0.021228f, 0.013477f, 0.003883f, 0.008309f, -0.009833f, -0.016492f, -0.010176f, 0.010138f, -0.005103f, 0.010948f, -0.003479f, -0.010554f, -0.000632f, 0.000764f, -0.005123f, -0.011870f, 0.000606f, 0.008607f, -0.028687f, -0.019069f, 0.026541f, -0.008846f, 0.000419f, -0.014891f, 0.006917f, 0.003761f, -0.001854f, -0.001336f, 0.009631f, 0.007018f, 0.002069f, -0.003246f, -0.003765f, -0.000861f, -0.004191f, 0.002095f, 0.002742f, -0.005837f, -0.002971f, 0.001891f, 0.000507f, -0.000196f, 0.001543f, 0.005344f, -0.006051f, -0.002927f, -0.010957f, + -0.004613f, -0.001763f, -0.002233f, 0.000407f, 0.001330f, 0.002937f, 0.000008f, 0.003805f, -0.004896f, -0.003501f, 0.000618f, 0.000815f, 0.001362f, 0.013494f, -0.000379f, 0.006829f, -0.009255f, 0.006788f, -0.012648f, -0.000890f, 0.021965f, -0.010349f, 0.020750f, 0.021046f, 0.025938f, 0.006496f, 0.010380f, 0.022379f, 0.017514f, 0.012900f, -0.017343f, 0.002269f, 0.005487f, 0.015014f, -0.002951f, -0.012855f, 0.016662f, 0.016905f, -0.004787f, 0.011269f, -0.005602f, -0.005869f, 0.010598f, 0.009164f, -0.001277f, 0.010872f, 0.000964f, -0.017729f, -0.014180f, 0.015367f, 0.022275f, -0.001731f, -0.007702f, 0.004724f, 0.000694f, -0.010592f, -0.019892f, 0.010412f, -0.018809f, -0.009139f, 0.014401f, 0.003070f, 0.012742f, 0.000566f, 0.020396f, 0.002854f, 0.022397f, -0.026016f, 0.023635f, -0.004565f, -0.000878f, 0.007139f, 0.012503f, -0.009994f, -0.021531f, -0.006093f, 0.019783f, -0.003824f, -0.023040f, -0.013604f, -0.014106f, 0.003845f, 0.008376f, -0.020064f, 0.010189f, 0.011646f, 0.020901f, 0.006449f, 0.006608f, 0.000098f, 0.005909f, 0.001107f, 0.004632f, 0.003187f, -0.015178f, -0.001662f, + 0.007290f, 0.005118f, 0.012358f, -0.008045f, -0.002443f, -0.000104f, 0.001040f, 0.005910f, 0.000797f, 0.004888f, 0.002010f, -0.002325f, -0.001008f, 0.004661f, 0.004288f, 0.001672f, 0.004670f, 0.001330f, 0.002074f, 0.006147f, 0.000095f, -0.003247f, -0.001685f, 0.001379f, 0.002996f, -0.000376f, -0.001407f, 0.004978f, 0.002556f, 0.001139f, -0.005051f, -0.001588f, -0.002888f, -0.002482f, -0.000234f, 0.005317f, 0.000295f, 0.005061f, 0.007010f, 0.022452f, 0.002891f, 0.009387f, 0.026689f, 0.028768f, 0.008583f, 0.007253f, -0.021240f, -0.010705f, 0.023494f, -0.017409f, 0.024010f, 0.006809f, -0.000091f, -0.004745f, -0.008388f, -0.013831f, 0.002547f, 0.010680f, -0.025819f, -0.011644f, -0.010981f, 0.005783f, 0.005187f, 0.005715f, 0.000797f, 0.004446f, -0.000946f, 0.007846f, 0.006322f, -0.006784f, -0.012116f, -0.022259f, 0.003929f, -0.011993f, 0.020148f, 0.000882f, -0.011200f, -0.013972f, -0.004306f, 0.009439f, -0.017544f, 0.011053f, -0.005879f, 0.003702f, -0.000219f, -0.012400f, 0.012383f, 0.015786f, -0.010782f, 0.013300f, 0.003749f, -0.000919f, 0.037625f, -0.009370f, -0.024445f, 0.004732f, + 0.009155f, -0.005999f, 0.002009f, -0.010517f, 0.025531f, 0.014983f, -0.002572f, -0.005349f, 0.018117f, 0.017469f, -0.003672f, -0.014665f, -0.010785f, 0.035691f, -0.003320f, -0.004764f, -0.014388f, -0.009172f, -0.002913f, 0.003600f, -0.003772f, -0.009319f, 0.015266f, -0.004704f, 0.018124f, 0.005424f, -0.005789f, -0.001854f, 0.003193f, 0.000055f, -0.003177f, -0.003016f, 0.006340f, -0.007924f, -0.002053f, -0.002004f, 0.010436f, 0.001132f, -0.002361f, -0.000094f, -0.005431f, -0.004824f, -0.000742f, 0.001237f, 0.010936f, -0.002411f, 0.006449f, 0.002683f, -0.003667f, 0.002446f, 0.000364f, -0.005150f, 0.004024f, -0.002468f, 0.005589f, -0.000361f, -0.005905f, -0.004078f, -0.003415f, -0.004101f, -0.000168f, -0.001158f, -0.001939f, 0.002181f, 0.001921f, 0.003291f, 0.009172f, -0.019709f, -0.005642f, -0.006264f, 0.001543f, 0.008266f, 0.019253f, 0.016819f, -0.027107f, 0.000536f, 0.003085f, -0.002819f, -0.008155f, -0.018694f, -0.001999f, 0.006197f, 0.010967f, 0.008915f, -0.017183f, -0.003059f, -0.021758f, 0.020220f, 0.000792f, -0.002095f, 0.009658f, -0.009730f, -0.001868f, -0.023152f, 0.003768f, -0.013854f, + 0.009404f, -0.001884f, -0.003974f, -0.007884f, -0.015428f, -0.014974f, -0.001883f, -0.018451f, -0.030067f, -0.005651f, -0.013772f, -0.028868f, -0.002468f, -0.002560f, -0.015884f, 0.010231f, 0.015674f, -0.002051f, 0.007396f, -0.002081f, -0.002647f, 0.004200f, 0.004522f, -0.023399f, -0.007024f, 0.012698f, -0.011387f, 0.027796f, 0.004881f, 0.007351f, -0.018152f, -0.000262f, -0.008287f, -0.018449f, -0.002121f, 0.025796f, 0.011839f, 0.019580f, 0.010755f, -0.008659f, -0.021042f, -0.032708f, 0.021726f, 0.022360f, -0.002851f, 0.011514f, -0.025613f, 0.012093f, 0.010239f, 0.018193f, 0.002573f, -0.021854f, -0.002983f, -0.020376f, -0.007225f, 0.001605f, -0.006776f, 0.004224f, -0.004705f, -0.006815f, -0.001943f, 0.001884f, -0.001204f, -0.002282f, 0.005783f, -0.001942f, 0.002120f, -0.014811f, 0.000063f, -0.001289f, -0.002539f, -0.006762f, -0.003050f, 0.004346f, -0.006420f, -0.007299f, -0.002815f, -0.002677f, -0.003199f, -0.000114f, -0.001986f, -0.008070f, -0.006670f, -0.004067f, 0.002027f, 0.002586f, 0.004449f, 0.002140f, 0.004060f, 0.001385f, -0.006015f, 0.001080f, -0.001195f, -0.003644f, 0.001895f, -0.006791f, + 0.002598f, -0.003723f, -0.050496f, -0.012635f, 0.040151f, 0.013418f, 0.016378f, -0.010465f, 0.016542f, 0.027991f, 0.002061f, -0.004721f, -0.046632f, -0.010890f, -0.002186f, 0.026726f, 0.007530f, 0.010707f, -0.034933f, -0.009421f, -0.012986f, -0.008334f, 0.021728f, -0.012275f, -0.004246f, 0.003750f, 0.006228f, -0.011052f, -0.004814f, 0.005592f, -0.009752f, 0.021336f, -0.023930f, 0.002574f, 0.015789f, -0.020540f, 0.016851f, 0.028604f, 0.033348f, 0.015983f, 0.016328f, 0.021855f, -0.014989f, -0.027544f, 0.010999f, 0.011932f, 0.018212f, 0.014444f, -0.031083f, -0.008883f, 0.016362f, 0.009410f, 0.005963f, 0.019482f, 0.004404f, 0.022697f, -0.008437f, -0.004940f, 0.013030f, 0.011984f, 0.003649f, -0.020073f, -0.010686f, -0.021561f, -0.024617f, -0.001480f, -0.026926f, 0.001381f, -0.015667f, 0.001069f, -0.014248f, -0.008480f, -0.034593f, 0.023828f, 0.006321f, -0.005207f, -0.006187f, -0.003958f, 0.004649f, -0.012872f, -0.001778f, -0.030188f, -0.016489f, 0.010411f, 0.013647f, 0.005536f, 0.004592f, 0.001095f, -0.015782f, 0.007147f, 0.007230f, 0.005521f, -0.015080f, 0.003357f, 0.000600f, -0.012114f, + -0.004044f, 0.001989f, 0.001904f, -0.006298f, -0.009014f, 0.002862f, -0.004427f, -0.005645f, -0.001363f, 0.001186f, -0.001118f, -0.000807f, 0.003067f, -0.002938f, 0.004267f, -0.000864f, 0.006084f, -0.002832f, 0.005436f, 0.008371f, -0.006041f, 0.004597f, 0.000418f, 0.003149f, -0.003725f, -0.000522f, 0.004916f, 0.003789f, -0.007443f, 0.003790f, 0.003904f, 0.031657f, -0.015446f, -0.013218f, -0.011719f, 0.021793f, 0.027666f, -0.017396f, 0.044408f, 0.009312f, -0.019019f, 0.022723f, 0.006456f, -0.018531f, -0.021783f, -0.017581f, -0.001454f, -0.009452f, -0.006502f, -0.029009f, 0.011584f, 0.012048f, 0.040036f, 0.005402f, -0.006885f, -0.018116f, -0.018998f, 0.004771f, -0.002293f, -0.025379f, 0.004442f, -0.009432f, 0.001163f, 0.019545f, -0.015200f, 0.025858f, -0.022783f, -0.019130f, -0.001349f, -0.029764f, -0.035631f, 0.005740f, -0.004137f, -0.041087f, 0.002780f, 0.000439f, -0.019599f, 0.010223f, -0.009553f, 0.005148f, -0.027808f, -0.045334f, 0.029679f, -0.027752f, 0.046014f, 0.025119f, -0.032999f, -0.004258f, -0.033438f, -0.009036f, -0.004299f, 0.013814f, -0.012090f, 0.021103f, 0.026584f, 0.025270f, + -0.018339f, -0.014925f, 0.002295f, -0.022437f, -0.002165f, -0.007339f, -0.029639f, 0.017641f, 0.013017f, -0.015779f, 0.023193f, -0.034604f, -0.003400f, 0.002047f, -0.009135f, -0.005853f, 0.029955f, 0.022166f, 0.014688f, -0.001833f, -0.015767f, -0.012725f, -0.011908f, 0.005183f, 0.004753f, -0.000973f, 0.003313f, -0.000929f, -0.001479f, 0.000623f, -0.001353f, 0.001201f, 0.005899f, -0.007147f, 0.002753f, -0.000515f, 0.006500f, -0.003852f, -0.000783f, 0.003809f, 0.008717f, 0.003495f, 0.007017f, -0.008476f, -0.009350f, 0.004402f, -0.006260f, 0.001494f, -0.000135f, -0.009875f, -0.005612f, -0.005889f, 0.000008f, 0.003248f, 0.002835f, 0.001996f, 0.002220f, -0.026913f, -0.020467f, 0.013429f, 0.016268f, 0.017984f, 0.030402f, -0.011196f, 0.055934f, -0.001713f, -0.028936f, 0.012669f, 0.027582f, 0.007590f, 0.014505f, -0.012214f, -0.030991f, 0.046683f, 0.025918f, 0.019164f, 0.009079f, -0.016091f, 0.015046f, 0.038898f, -0.014250f, 0.008395f, -0.000360f, 0.008246f, 0.006720f, 0.027742f, -0.007939f, 0.009485f, -0.009736f, 0.008495f, -0.002600f, -0.001405f, 0.017218f, 0.003738f, -0.034270f, -0.022931f, + -0.032111f, -0.021941f, -0.017013f, -0.008387f, -0.024571f, -0.013841f, -0.012043f, -0.021254f, -0.014784f, 0.009513f, -0.022233f, -0.007591f, -0.017248f, 0.041467f, 0.021096f, 0.036115f, -0.032575f, -0.002965f, -0.029759f, -0.006200f, 0.033465f, 0.018483f, 0.039417f, 0.018875f, 0.024418f, -0.025773f, 0.011750f, 0.011590f, 0.036509f, 0.037120f, 0.011144f, 0.033598f, -0.028781f, -0.013667f, 0.021538f, -0.075557f, 0.001420f, 0.012552f, 0.001639f, 0.018902f, 0.012190f, 0.042787f, -0.003245f, -0.005782f, 0.046287f, 0.014087f, -0.004046f, -0.020582f, -0.000360f, 0.000479f, 0.037943f, 0.005154f, 0.001082f, 0.003187f, 0.007720f, 0.011940f, -0.002054f, -0.002024f, 0.012287f, 0.006004f, 0.004040f, 0.006592f, 0.008937f, 0.006996f, -0.000393f, 0.001639f, 0.001274f, 0.012785f, -0.002176f, 0.006815f, 0.012272f, 0.009147f, 0.013684f, -0.005812f, -0.004458f, 0.003385f, 0.004480f, -0.004440f, 0.000454f, 0.008009f, 0.012713f, -0.000620f, 0.003845f, 0.032560f, 0.021159f, -0.021374f, 0.041636f, 0.024688f, -0.002125f, -0.010440f, -0.005253f, 0.024968f, 0.061521f, 0.032825f, 0.008837f, 0.002513f, + 0.020209f, -0.005003f, 0.049668f, 0.028015f, 0.031024f, 0.001192f, -0.015815f, 0.010452f, 0.003741f, -0.026498f, -0.006509f, -0.001754f, -0.006239f, -0.007621f, 0.010089f, 0.005402f, -0.021666f, -0.010487f, -0.038287f, -0.004028f, -0.011898f, -0.049373f, -0.022121f, 0.001395f, 0.018447f, -0.025462f, 0.031719f, -0.008889f, -0.007567f, -0.004426f, -0.007736f, 0.022957f, -0.015517f, 0.016012f, -0.050513f, 0.015520f, 0.022046f, 0.016887f, 0.033670f, -0.033362f, 0.028834f, -0.029963f, -0.022281f, 0.024822f, -0.014608f, -0.004562f, 0.020945f, -0.033969f, 0.030022f, 0.047983f, -0.000973f, -0.007123f, 0.061391f, -0.013352f, 0.011828f, 0.034470f, -0.073771f, -0.037909f, 0.002518f, 0.002105f, 0.010022f, 0.017605f, 0.035905f, 0.021440f, -0.028203f, -0.022758f, -0.006682f, -0.008217f, -0.038099f, -0.003878f, -0.007581f, 0.009242f, -0.039808f, 0.000290f, -0.011983f, 0.016028f, -0.005993f, 0.020452f, 0.005558f, 0.000004f, -0.011775f, -0.008841f, -0.011070f, -0.011931f, -0.008979f, 0.007932f, -0.024188f, 0.017169f, -0.002862f, 0.009475f, 0.000617f, -0.001740f, -0.016501f, 0.008882f, -0.011710f, 0.002804f, + -0.012442f, -0.007003f, -0.000054f, -0.005718f, -0.014279f, 0.000858f, -0.004453f, 0.001379f, -0.009709f, -0.010952f, -0.011422f, 0.001864f, 0.002492f, 0.014300f, 0.015528f, -0.000330f, 0.000388f, -0.011236f, -0.058615f, -0.035298f, 0.042980f, 0.042735f, 0.004502f, -0.010238f, 0.036225f, -0.058795f, -0.031613f, -0.063608f, 0.027673f, 0.007604f, 0.002717f, 0.012210f, -0.028999f, 0.014530f, 0.019995f, 0.026250f, 0.044552f, 0.045795f, 0.038450f, -0.001660f, 0.008612f, 0.000402f, -0.016888f, -0.003571f, -0.014119f, -0.007339f, 0.053110f, -0.012531f, -0.049042f, -0.012471f, -0.010179f, 0.004273f, 0.076567f, -0.027827f, -0.027602f, 0.025844f, -0.041640f, 0.014252f, -0.046194f, 0.060087f, 0.016893f, -0.001797f, 0.015325f, -0.023340f, -0.029512f, 0.041129f, -0.050281f, -0.040190f, -0.036169f, 0.009875f, 0.014946f, 0.018645f, -0.033568f, 0.034188f, -0.010725f, 0.002459f, 0.052738f, -0.003739f, -0.009119f, 0.015435f, 0.042534f, -0.027750f, 0.070624f, 0.002494f, -0.081669f, -0.010052f, -0.003272f, -0.027360f, -0.007992f, -0.000151f, -0.007770f, -0.022372f, -0.018849f, 0.039978f, 0.026739f, -0.010016f, + 0.025868f, -0.046974f, 0.012996f, 0.020849f, 0.012910f, 0.001374f, 0.024901f, -0.004272f, -0.001265f, 0.009236f, 0.024336f, -0.010288f, -0.010844f, -0.008500f, 0.000965f, 0.009111f, -0.004883f, -0.019466f, -0.020934f, 0.000871f, -0.009918f, 0.007057f, -0.000422f, 0.004934f, 0.010852f, -0.013667f, -0.009107f, 0.023197f, -0.005573f, 0.004066f, -0.001980f, 0.000458f, -0.008155f, -0.009044f, -0.004683f, -0.003146f, -0.012601f, 0.005835f, 0.011158f, 0.006186f, -0.000414f, 0.000883f, 0.004920f, -0.009707f, 0.001980f, 0.010686f, -0.001301f, 0.009137f, -0.005500f, -0.017133f, -0.023166f, 0.000347f, 0.010169f, -0.016508f, -0.007505f, 0.077843f, 0.046149f, -0.062697f, -0.050649f, 0.062663f, 0.059741f, 0.037394f, 0.042948f, -0.074655f, -0.016350f, -0.020554f, 0.019752f, 0.007288f, -0.030106f, -0.055134f, -0.083517f, 0.024481f, 0.022103f, 0.006515f, 0.023034f, -0.011381f, -0.004145f, -0.019799f, 0.016644f, 0.028958f, 0.026015f, 0.006817f, 0.034548f, 0.011097f, -0.003853f, -0.014032f, -0.050742f, -0.002700f, -0.021315f, -0.017682f, 0.017725f, -0.054467f, 0.004941f, 0.002228f, -0.025370f, 0.022286f, + 0.020460f, 0.010113f, -0.036610f, -0.034086f, -0.089833f, -0.022853f, 0.000699f, -0.028772f, 0.005137f, 0.019017f, 0.018977f, 0.050296f, 0.024731f, -0.022183f, -0.015508f, -0.033378f, 0.042344f, -0.017750f, 0.073246f, 0.061181f, 0.017013f, -0.039051f, 0.080862f, 0.037201f, -0.032670f, 0.005039f, 0.040660f, 0.094029f, -0.038782f, -0.071828f, -0.037008f, 0.001013f, -0.025852f, 0.011369f, 0.025989f, 0.021673f, -0.018797f, -0.029359f, -0.016175f, -0.024431f, -0.026794f, 0.007483f, 0.029276f, 0.023362f, 0.013195f, 0.011654f, 0.004327f, 0.019654f, 0.002736f, 0.003183f, 0.028627f, 0.022415f, -0.001235f, -0.009354f, 0.006529f, -0.014853f, 0.015962f, -0.005644f, 0.016338f, -0.008310f, 0.006588f, 0.004271f, 0.010827f, 0.013865f, 0.008238f, 0.006459f, -0.013397f, -0.026540f, 0.003233f, -0.013469f, -0.006745f, 0.008019f, 0.002487f, -0.003921f, -0.005065f, 0.019190f, 0.006412f, 0.025958f, -0.008235f, 0.013887f, 0.014049f, -0.017655f, 0.018446f, 0.000967f, -0.014748f, 0.031206f, 0.011233f, -0.010719f, -0.030016f, 0.025406f, -0.050965f, -0.047124f, -0.016870f, 0.036799f, -0.020858f, -0.026721f, + -0.000104f, 0.042379f, 0.004626f, 0.043788f, -0.014426f, 0.052828f, 0.006253f, 0.028389f, -0.018279f, -0.012161f, 0.016848f, -0.054122f, -0.014948f, 0.020683f, -0.009474f, -0.007098f, -0.043493f, -0.041071f, 0.019400f, -0.024963f, -0.017847f, 0.034096f, 0.046681f, -0.006590f, 0.030791f, -0.054684f, 0.003612f, -0.014661f, 0.071603f, -0.029159f, 0.024028f, 0.043990f, 0.041899f, 0.012463f, -0.028737f, 0.018807f, 0.013589f, 0.012965f, 0.023351f, -0.069938f, 0.130024f, 0.041815f, -0.011051f, 0.007195f, 0.014900f, 0.036398f, -0.009645f, 0.028114f, 0.075991f, -0.003910f, -0.093131f, 0.039494f, 0.032923f, -0.032792f, 0.044323f, -0.009253f, -0.019198f, -0.049704f, 0.097296f, -0.049466f, 0.108286f, -0.070611f, 0.027089f, -0.000923f, 0.117613f, 0.052452f, -0.049674f, 0.048524f, 0.002518f, -0.030668f, 0.023975f, 0.004122f, 0.011024f, 0.026700f, 0.011585f, -0.029644f, -0.007407f, 0.036233f, 0.010012f, 0.020723f, -0.016025f, 0.022855f, -0.037381f, 0.014557f, -0.001700f, -0.011707f, 0.023951f, -0.012552f, -0.006924f, 0.017447f, -0.002453f, 0.003050f, -0.002555f, 0.028985f, -0.018210f, 0.028299f, + -0.015976f, 0.026220f, 0.036366f, 0.013886f, 0.010168f, 0.020407f, -0.004753f, -0.013604f, -0.013341f, 0.017682f, 0.006364f, -0.002313f, 0.000174f, -0.003936f, -0.025407f, -0.019312f, -0.003595f, 0.001347f, -0.015741f, 0.088721f, 0.010369f, 0.048050f, 0.024375f, -0.049216f, 0.002783f, 0.028786f, -0.009019f, -0.042891f, -0.008449f, -0.093236f, -0.026317f, -0.034893f, -0.020345f, 0.020045f, -0.003022f, 0.033029f, -0.016621f, 0.003357f, 0.032106f, -0.029139f, 0.002803f, 0.018243f, -0.002152f, -0.031944f, -0.000391f, -0.022017f, 0.063809f, -0.011486f, 0.036828f, 0.005789f, -0.000990f, 0.065554f, 0.047017f, -0.029193f, -0.034385f, 0.016455f, 0.029386f, 0.035884f, 0.043437f, -0.001032f, 0.015053f, 0.041357f, -0.002683f, -0.016947f, 0.012585f, 0.001238f, -0.037298f, -0.001057f, 0.023824f, -0.036478f, -0.049321f, -0.004836f, -0.003436f, -0.005449f, -0.016887f, -0.017856f, -0.058709f, -0.000235f, 0.056632f, 0.017407f, 0.031265f, 0.018594f, -0.008211f, -0.075411f, -0.055725f, 0.014649f, 0.048120f, 0.015722f, 0.024027f, 0.098654f, 0.102030f, 0.086663f, -0.007505f, 0.042993f, -0.028145f, -0.073063f, + -0.122180f, 0.020984f, 0.014335f, -0.005568f, 0.016218f, -0.038587f, 0.007566f, -0.009505f, 0.043861f, -0.003483f, 0.035069f, -0.044169f, 0.020966f, -0.054208f, -0.011228f, 0.022710f, 0.003123f, -0.027659f, 0.005685f, -0.022802f, -0.025338f, -0.010591f, 0.005690f, 0.020543f, 0.025868f, 0.034968f, -0.009295f, -0.002021f, 0.008218f, -0.009746f, 0.010415f, -0.036492f, -0.031911f, -0.021710f, -0.029936f, -0.028136f, -0.030568f, 0.019150f, 0.013102f, -0.005081f, -0.020401f, -0.029798f, 0.017074f, 0.000172f, 0.027514f, -0.007115f, 0.024259f, 0.018457f, 0.000142f, 0.007860f, 0.029243f, -0.036372f, -0.035046f, 0.020663f, -0.004114f, -0.026905f, -0.057325f, 0.017195f, -0.034116f, 0.017705f, -0.014448f, -0.040238f, -0.012006f, 0.000475f, 0.020976f, -0.016565f, 0.011010f, -0.059382f, 0.056955f, -0.125278f, -0.011921f, -0.030723f, -0.025131f, 0.017676f, 0.072838f, 0.012388f, 0.026877f, -0.061278f, 0.014620f, 0.023702f, 0.050290f, -0.024978f, -0.039426f, -0.027030f, -0.012902f, -0.001058f, -0.000354f, 0.030835f, 0.022549f, -0.016829f, -0.090319f, -0.042372f, -0.073311f, 0.009469f, 0.131300f, -0.091488f, + -0.035854f, -0.013309f, 0.076199f, -0.024333f, 0.032649f, -0.023205f, 0.037119f, -0.013480f, -0.021281f, -0.045944f, 0.024943f, -0.053387f, 0.051034f, 0.091714f, 0.012439f, -0.015785f, -0.016195f, 0.076245f, 0.020757f, 0.000290f, 0.040584f, 0.014039f, 0.015177f, -0.013510f, 0.087831f, -0.135838f, 0.099862f, -0.082375f, 0.040367f, 0.098828f, -0.077704f, 0.159636f, 0.108880f, -0.039650f, -0.012784f, 0.110118f, 0.040623f, -0.009323f, 0.072638f, 0.065431f, -0.082975f, 0.113603f, -0.067305f, 0.021083f, 0.022358f, -0.029113f, 0.022503f, 0.037854f, -0.021956f, -0.040114f, 0.014166f, -0.021112f, 0.010341f, 0.010547f, -0.010528f, -0.031189f, 0.013667f, 0.012651f, -0.012419f, 0.014708f, 0.011729f, -0.024855f, 0.064553f, 0.008074f, 0.002126f, 0.002493f, -0.012114f, 0.010902f, 0.009394f, 0.004534f, -0.019969f, 0.011970f, 0.003732f, -0.007904f, -0.017410f, 0.040554f, -0.014095f, 0.033219f, 0.037352f, -0.002496f, -0.012730f, 0.010874f, 0.009798f, 0.015415f, 0.044857f, 0.039154f, -0.033212f, 0.017080f, -0.013012f, -0.000728f, 0.019817f, -0.003044f, 0.092673f, 0.088361f, -0.074892f, 0.073639f, + 0.067744f, -0.063105f, -0.095482f, -0.141154f, 0.033191f, 0.212701f, 0.087481f, 0.000689f, 0.044048f, -0.202746f, -0.083665f, -0.006887f, 0.031144f, 0.153080f, 0.149659f, 0.026122f, -0.057445f, -0.112181f, -0.065782f, 0.007956f, 0.048431f, 0.073372f, 0.117691f, 0.071303f, -0.094567f, -0.223515f, -0.182319f, -0.017575f, 0.203189f, 0.221265f, 0.139696f, 0.043010f, -0.046792f, -0.089802f, -0.136177f, -0.077328f, -0.082798f, 0.162901f, 0.135312f, 0.085832f, 0.075721f, -0.114545f, -0.160980f, -0.186483f, -0.167304f, 0.064893f, 0.226748f, 0.279557f, 0.094416f, -0.084132f, -0.198684f, -0.237913f, -0.064824f, 0.038823f, 0.024652f, 0.149617f, 0.058529f, -0.055873f, -0.033403f, -0.114326f, -0.025071f, -0.130766f, 0.056815f, 0.156091f, 0.291023f, -0.017180f, -0.155654f, -0.337554f, -0.013267f, -0.113788f, -0.012204f, 0.162569f, 0.032039f, -0.014341f, -0.072375f, -0.151747f, -0.099908f, 0.073687f, 0.117981f, 0.039410f, -0.020735f, -0.051311f, -0.062237f, 0.061108f, 0.069447f, 0.043574f, 0.037122f, 0.017253f, 0.034595f, -0.002751f, 0.003144f, -0.033194f, -0.015819f, 0.004482f, 0.087619f, 0.077419f, + -0.004153f, -0.032269f, -0.008734f, -0.077708f, -0.052849f, -0.001313f, 0.029715f, 0.081738f, 0.062234f, 0.045026f, 0.003808f, -0.108459f, -0.098604f, -0.065825f, 0.025524f, 0.106107f, 0.203890f, 0.125816f, -0.094446f, -0.168708f, -0.150045f, -0.059486f, 0.003937f, 0.140699f, 0.175622f, 0.132186f, 0.022748f, -0.103531f, -0.237651f, -0.148540f, 0.047919f, 0.148262f, 0.167815f, 0.050194f, -0.025070f, -0.064255f, -0.077785f, 0.001317f, -0.019485f, 0.095631f, 0.055908f, -0.008534f, 0.020272f, 0.010267f, -0.068254f, -0.007221f, -0.005620f, 0.007335f, 0.002052f, 0.005351f, -0.025003f, -0.010080f, -0.009268f, -0.006388f, -0.011410f, 0.040689f, -0.014724f, 0.017413f, -0.030776f, -0.003213f, 0.012619f, -0.001576f, -0.009390f, 0.070345f, 0.009697f, -0.040026f, -0.046416f, 0.009617f, 0.009695f, -0.027382f, 0.007510f, 0.035259f, 0.018337f, 0.033175f, -0.034146f, 0.010177f, -0.001251f, 0.007856f, -0.024047f, 0.004414f, 0.026592f, 0.037553f, 0.009507f, -0.009981f, 0.011019f, 0.004097f, -0.008822f, 0.025541f, -0.038022f, 0.008401f, -0.061907f, -0.019556f, 0.025519f, -0.021187f, -0.024904f, 0.033447f, + -0.021496f, -0.057953f, -0.044744f, 0.039393f, -0.004980f, -0.008063f, 0.009063f, 0.019845f, 0.050133f, -0.032937f, -0.042653f, 0.001582f, -0.005892f, 0.033737f, 0.000209f, 0.019622f, 0.009047f, -0.003611f, 0.052076f, -0.068149f, -0.009995f, -0.009850f, -0.039924f, 0.009944f, 0.022271f, 0.000713f, -0.023804f, 0.010264f, -0.005416f, 0.006493f, -0.020593f, 0.014790f, -0.001127f, 0.002163f, -0.001886f, -0.005329f, 0.026367f, -0.026876f, 0.001993f, -0.004851f, -0.009633f, -0.008814f, 0.003008f, -0.011825f, 0.012041f, 0.015234f, -0.016271f, -0.004440f, -0.006284f, 0.013916f, 0.015699f, -0.008310f, 0.019370f, 0.001554f, -0.002909f, -0.013490f, 0.013931f, 0.004481f, -0.005676f, -0.022085f, 0.010126f, -0.020084f, 0.012559f, -0.011045f, -0.009680f, 0.017559f, 0.017801f, -0.024932f, 0.002793f, -0.006185f, -0.024166f, 0.007316f, -0.014196f, 0.015256f, -0.013997f, -0.056045f, -0.061808f, -0.147023f, 0.042492f, 0.042031f, -0.003006f, -0.123945f, -0.080134f, -0.011801f, -0.020346f, 0.082800f, 0.055847f, 0.026855f, -0.054884f, -0.022661f, -0.014561f, 0.051841f, 0.005673f, -0.014793f, -0.032226f, 0.021249f, + 0.009419f, 0.025782f, -0.001441f, -0.010554f, -0.013208f, -0.029681f, -0.014842f, -0.017969f, 0.049509f, 0.026464f, 0.005802f, 0.007412f, -0.032654f, -0.001765f, 0.003933f, 0.045209f, -0.003302f, 0.021063f, -0.016842f, -0.011730f, 0.009181f, -0.018658f, 0.012284f, 0.005394f, 0.013214f, 0.044100f, -0.003898f, 0.038698f, -0.000548f, 0.024845f, -0.019269f, 0.001616f, -0.028318f, -0.036631f, -0.038557f, -0.032989f, 0.010826f, 0.005701f, 0.002802f, -0.048573f, 0.023956f, -0.042279f, -0.004805f, 0.002182f, -0.026508f, -0.028690f, -0.015176f, 0.000507f, -0.050506f, -0.034166f, 0.031327f, -0.015255f, 0.029164f, 0.004627f, -0.008129f, -0.027308f, -0.031544f, -0.002062f, 0.044686f, 0.055402f, -0.013837f, -0.005690f, -0.020874f, -0.027790f, -0.019204f, 0.017655f, 0.009360f, 0.006785f, 0.017308f, -0.003441f, -0.011518f, 0.012000f, 0.006592f, 0.009986f, 0.015139f, -0.008514f, 0.005084f, -0.001692f, 0.000323f, -0.011567f, 0.020013f, 0.006342f, 0.004542f, -0.006021f, 0.002875f, -0.000437f, 0.031214f, 0.003980f, 0.009344f, -0.017526f, 0.001155f, -0.011348f, 0.020422f, 0.001413f, 0.000294f, -0.007197f, + 0.004729f, -0.002352f, 0.000244f, 0.009789f, 0.000915f, 0.012830f, -0.008737f, 0.004170f, 0.001340f, -0.016440f, -0.000900f, 0.009405f, 0.003605f, -0.003382f, 0.033056f, -0.071065f, -0.176229f, -0.168918f, -0.025624f, 0.051103f, 0.169986f, 0.146897f, 0.138487f, 0.148750f, 0.082825f, 0.020043f, -0.075075f, -0.075441f, -0.156782f, -0.121760f, -0.106737f, -0.067715f, -0.085163f, 0.117327f, 0.096544f, 0.127051f, 0.073298f, 0.103845f, -0.003733f, 0.027355f, -0.016648f, -0.040506f, -0.023135f, -0.048432f, -0.056305f, -0.056124f, -0.055326f, -0.065541f, -0.047942f, -0.038970f, -0.004378f, 0.010324f, 0.092152f, 0.077304f, 0.040788f, 0.043779f, 0.060811f, 0.056394f, 0.027212f, 0.131122f, 0.017110f, 0.001714f, 0.024659f, -0.048983f, -0.150384f, -0.043045f, -0.120536f, -0.129346f, -0.136592f, -0.096674f, -0.086027f, 0.004295f, 0.071454f, 0.072821f, 0.089024f, 0.161812f, 0.116538f, 0.142000f, 0.139639f, 0.089037f, 0.095824f, 0.032684f, -0.033619f, -0.109338f, -0.143365f, -0.163908f, -0.106540f, -0.147109f, -0.123528f, -0.141251f, -0.082334f, -0.009859f, 0.038775f, 0.114272f, 0.109147f, 0.110710f, + 0.184471f, 0.128450f, 0.152503f, 0.094919f, 0.015875f, -0.017926f, -0.046092f, -0.076353f, -0.085392f, -0.090602f, -0.088168f, -0.101778f, -0.087115f, -0.063842f, -0.039114f, -0.020344f, -0.015271f, 0.044118f, 0.042027f, 0.059073f, 0.095613f, 0.107596f, 0.068348f, 0.082191f, 0.050797f, -0.003183f, -0.022289f, -0.049702f, -0.062001f, -0.053297f, -0.045900f, -0.055710f, -0.020282f, -0.013857f, 0.001296f, 0.015630f, 0.017513f, 0.004308f, 0.002426f, 0.015298f, -0.002211f, -0.013522f, 0.012356f, 0.007176f, 0.008817f, 0.013498f, 0.004067f, 0.003498f, 0.008306f, 0.018802f, 0.016252f, 0.007283f, 0.001587f, -0.004347f, -0.016176f, -0.012473f, -0.014722f, -0.013014f, -0.005137f, -0.010124f, -0.008673f, -0.005064f, -0.003862f, -0.005597f, -0.001544f, 0.005774f, 0.005904f, 0.007069f, 0.011723f, 0.007457f, 0.005274f, 0.006603f, 0.001728f, 0.001194f, 0.000630f, 0.000011f, 0.000049f, 0.000121f}, + {-0.008237f, 0.013810f, 0.004811f, -0.002529f, 0.003495f, 0.004431f, 0.008280f, 0.013830f, -0.006657f, 0.004585f, -0.005673f, -0.004416f, 0.002769f, 0.000018f, 0.001145f, -0.009788f, -0.004760f, 0.003432f, 0.006883f, -0.000934f, 0.005798f, -0.010495f, -0.009309f, 0.005838f, 0.003732f, 0.001594f, 0.004248f, -0.003594f, 0.007498f, 0.008390f, 0.008148f, 0.011687f, -0.006503f, -0.005380f, 0.000407f, 0.001471f, -0.011233f, -0.000725f, -0.000985f, 0.003066f, 0.001093f, -0.007037f, -0.001741f, 0.009542f, -0.005117f, 0.001857f, -0.005868f, 0.002791f, 0.002942f, 0.001896f, -0.008736f, 0.007027f, 0.000633f, 0.001571f, -0.001213f, -0.002886f, -0.003630f, -0.005969f, 0.012649f, -0.002248f, -0.002344f, -0.002856f, 0.005612f, 0.001295f, -0.011983f, 0.003025f, -0.005479f, -0.008233f, 0.004838f, -0.005096f, -0.012971f, 0.005154f, 0.001892f, 0.000551f, -0.011953f, -0.014501f, -0.005926f, -0.007156f, 0.006706f, -0.001964f, -0.000028f, -0.003293f, -0.003926f, -0.003276f, 0.000090f, 0.005916f, 0.001070f, -0.002664f, -0.000225f, -0.002783f, -0.001238f, 0.002615f, 0.000791f, -0.002523f, -0.003401f, -0.001191f, + -0.001400f, 0.001288f, -0.000859f, 0.000475f, 0.000471f, 0.001406f, 0.000362f, 0.002022f, -0.000859f, 0.000465f, -0.000475f, 0.001420f, -0.000092f, 0.001302f, 0.008097f, 0.000964f, 0.000699f, 0.007204f, -0.010750f, 0.001801f, -0.008970f, -0.011356f, 0.003279f, 0.010655f, -0.006585f, 0.005059f, -0.004955f, -0.002394f, 0.002151f, 0.000537f, -0.005269f, -0.015659f, -0.015548f, 0.000281f, -0.003933f, -0.000140f, 0.008141f, 0.001306f, 0.009966f, 0.013461f, -0.007088f, 0.011625f, 0.001459f, 0.011800f, 0.000752f, 0.014002f, 0.001790f, -0.007832f, -0.002147f, 0.000790f, 0.006385f, -0.001724f, -0.002097f, 0.001392f, 0.004847f, -0.005817f, -0.000346f, -0.001794f, 0.004289f, 0.005219f, 0.000296f, -0.005300f, -0.000368f, -0.000958f, 0.003071f, 0.005481f, 0.009824f, -0.003422f, 0.006378f, -0.002868f, -0.008533f, -0.007623f, -0.005148f, 0.004836f, 0.005253f, -0.002882f, 0.008500f, 0.000283f, 0.003093f, 0.000446f, 0.010334f, 0.006850f, 0.007618f, 0.003095f, 0.004491f, 0.002771f, 0.004168f, 0.008441f, -0.001779f, -0.000431f, 0.011927f, 0.002397f, 0.000356f, 0.002484f, -0.004419f, 0.000667f, + 0.003528f, -0.000264f, -0.011124f, 0.003496f, 0.001197f, -0.001783f, -0.003853f, 0.002579f, 0.000774f, 0.006070f, -0.002227f, -0.001099f, -0.002309f, -0.001883f, 0.001546f, 0.000444f, 0.002444f, 0.001153f, 0.000575f, -0.002188f, -0.001726f, -0.001022f, -0.001067f, 0.000958f, -0.002883f, 0.002554f, -0.001029f, 0.000757f, -0.000689f, -0.001031f, -0.001596f, 0.000986f, -0.001285f, -0.000976f, -0.003141f, 0.011966f, -0.012386f, -0.008375f, -0.006892f, -0.010046f, 0.003072f, 0.004212f, -0.008092f, 0.001776f, 0.016381f, -0.012074f, 0.008269f, 0.014110f, 0.013960f, -0.008743f, -0.002446f, 0.006871f, 0.001259f, 0.002072f, -0.006375f, 0.003371f, -0.021432f, 0.016687f, 0.026208f, 0.004568f, 0.008783f, -0.004356f, -0.000424f, 0.013871f, -0.007401f, -0.016941f, -0.002868f, 0.000167f, -0.000112f, -0.013702f, 0.000949f, 0.003303f, -0.016243f, -0.007689f, 0.007454f, 0.002464f, -0.005813f, -0.001583f, 0.005555f, -0.007978f, 0.016706f, 0.005145f, 0.000724f, -0.010841f, -0.001112f, 0.005697f, -0.003700f, 0.000273f, -0.003888f, -0.000301f, -0.001648f, -0.008703f, 0.000494f, -0.008420f, 0.012534f, -0.012236f, + -0.008131f, -0.002808f, -0.014593f, 0.009668f, -0.007870f, -0.020341f, -0.003765f, -0.008822f, 0.002435f, 0.009226f, -0.009503f, 0.001092f, -0.006465f, 0.006527f, 0.000877f, -0.006778f, 0.005704f, -0.007337f, -0.009625f, 0.010594f, -0.006935f, 0.002966f, 0.000223f, 0.000887f, 0.003696f, -0.002191f, -0.003296f, -0.003724f, -0.005875f, 0.001876f, -0.008287f, 0.000390f, -0.001705f, 0.002514f, -0.002489f, -0.000283f, -0.000022f, 0.000141f, -0.004414f, 0.003845f, 0.000157f, 0.000661f, -0.002393f, -0.001739f, -0.001801f, -0.000202f, 0.002605f, -0.009446f, 0.006033f, -0.000273f, -0.001850f, 0.007161f, -0.006776f, -0.023807f, -0.004649f, -0.001461f, 0.010408f, 0.014742f, 0.013058f, 0.006284f, -0.005124f, -0.001600f, -0.014681f, -0.012442f, 0.004299f, 0.016751f, -0.004793f, 0.017160f, 0.010915f, -0.010579f, 0.005692f, -0.001621f, 0.005952f, -0.011824f, -0.007980f, 0.001959f, 0.008546f, -0.001073f, 0.005095f, 0.007127f, -0.013377f, -0.002676f, -0.006172f, -0.018207f, 0.011328f, 0.001816f, 0.004114f, 0.007909f, 0.014447f, 0.005051f, 0.000678f, 0.011347f, -0.002650f, -0.005782f, 0.011654f, -0.006122f, + 0.019696f, 0.009094f, 0.007831f, 0.000429f, -0.005668f, -0.006872f, 0.009653f, 0.013143f, -0.009756f, 0.002393f, 0.012526f, -0.002203f, 0.004070f, 0.027704f, -0.008377f, -0.003310f, 0.005375f, -0.013853f, -0.000568f, 0.002510f, -0.006195f, 0.006769f, -0.004490f, 0.004185f, 0.013732f, 0.000510f, -0.003173f, -0.009326f, -0.000780f, -0.011589f, 0.004904f, -0.004282f, -0.005722f, -0.002351f, 0.002195f, -0.003311f, -0.003362f, -0.002786f, 0.000619f, 0.004313f, 0.003155f, 0.000905f, -0.001004f, -0.001263f, -0.000999f, -0.000609f, -0.001944f, -0.003386f, -0.000679f, -0.001025f, 0.001792f, 0.000045f, 0.000893f, -0.003423f, 0.001449f, 0.001865f, -0.001313f, -0.002993f, -0.001146f, -0.003140f, -0.001699f, -0.001376f, 0.002328f, 0.000298f, -0.000524f, -0.000200f, 0.000528f, -0.004745f, -0.000942f, 0.001715f, -0.005947f, -0.033968f, -0.002641f, -0.000599f, -0.006695f, -0.010452f, -0.003337f, 0.018413f, -0.012839f, -0.019281f, 0.007415f, -0.007762f, 0.002904f, 0.003571f, 0.012406f, -0.008260f, -0.002394f, 0.002530f, 0.011546f, -0.005227f, -0.007360f, -0.002131f, -0.006313f, 0.008525f, 0.015544f, 0.007867f, + 0.000275f, -0.001162f, -0.008691f, -0.000418f, 0.024379f, 0.004377f, -0.002872f, 0.028122f, -0.001536f, 0.020943f, -0.006154f, 0.000278f, 0.014280f, 0.004403f, 0.003658f, 0.005156f, 0.002624f, 0.007888f, 0.004676f, -0.013194f, 0.024877f, 0.015140f, 0.020455f, 0.013727f, 0.009114f, -0.013426f, 0.006134f, 0.007001f, 0.001193f, -0.008191f, 0.023112f, 0.014008f, 0.020896f, 0.003803f, -0.003982f, -0.005003f, 0.015431f, -0.007338f, -0.015615f, 0.018664f, 0.005964f, -0.010083f, -0.005752f, 0.001032f, -0.004609f, 0.001927f, -0.001997f, 0.002731f, -0.006278f, -0.001652f, -0.014764f, 0.005843f, -0.001675f, -0.000274f, 0.005651f, -0.001722f, -0.002629f, 0.008896f, -0.000415f, 0.006938f, 0.009308f, 0.007610f, 0.004996f, 0.004918f, 0.002100f, 0.002924f, 0.000215f, -0.001777f, -0.001570f, 0.004130f, -0.000954f, -0.002335f, -0.002385f, 0.002029f, -0.002712f, -0.000625f, -0.000395f, 0.005123f, 0.002265f, 0.003708f, -0.003175f, 0.001191f, -0.002509f, -0.000815f, 0.003636f, -0.000334f, -0.001220f, -0.000975f, -0.000722f, -0.008545f, -0.001136f, -0.022247f, -0.008718f, -0.024892f, -0.017016f, 0.001943f, + -0.016123f, -0.012671f, 0.001625f, -0.002748f, 0.016852f, -0.011033f, 0.018665f, 0.022859f, 0.002461f, -0.019241f, -0.013466f, 0.020541f, -0.010250f, -0.005497f, 0.011597f, -0.014875f, -0.026451f, 0.010748f, 0.023073f, -0.011708f, 0.005995f, -0.000334f, 0.010141f, -0.027636f, 0.005667f, -0.011048f, 0.006840f, 0.000652f, -0.011493f, 0.019427f, 0.008980f, 0.008258f, 0.025890f, 0.012094f, 0.005465f, 0.014681f, 0.003068f, 0.004816f, 0.007497f, 0.002547f, 0.001320f, 0.004073f, 0.003663f, 0.029414f, 0.016637f, 0.000023f, 0.024749f, 0.015499f, 0.018308f, 0.028483f, -0.014369f, -0.012037f, 0.025020f, -0.008587f, -0.000812f, -0.014688f, -0.006106f, 0.008929f, 0.013344f, -0.011175f, -0.001179f, 0.003827f, -0.003037f, 0.006930f, -0.011767f, -0.002163f, -0.013633f, 0.026853f, -0.008507f, 0.014695f, -0.004009f, -0.007087f, 0.019845f, 0.003518f, -0.005617f, 0.006467f, -0.002284f, 0.000622f, -0.005419f, 0.007509f, -0.001248f, 0.002739f, 0.008134f, 0.004631f, 0.002543f, 0.004550f, 0.000510f, -0.000666f, 0.003363f, 0.000862f, -0.005292f, 0.001222f, -0.000978f, -0.002505f, 0.005111f, 0.000038f, + 0.002586f, 0.002064f, -0.000938f, 0.000982f, -0.003029f, 0.000702f, -0.002750f, 0.000281f, -0.001016f, 0.003605f, 0.001135f, 0.003100f, 0.001014f, 0.008482f, -0.009049f, 0.002923f, 0.001316f, 0.002897f, -0.012997f, 0.016917f, 0.009831f, 0.022982f, 0.004466f, -0.003108f, -0.025918f, -0.013861f, -0.009703f, 0.006625f, -0.013453f, -0.022453f, -0.006233f, 0.005757f, 0.002523f, -0.025075f, 0.020379f, 0.001567f, -0.001497f, -0.021360f, -0.012259f, 0.005039f, 0.002665f, -0.023732f, -0.007348f, 0.008673f, 0.000996f, 0.002393f, 0.012201f, 0.014209f, 0.008341f, -0.003676f, 0.007205f, 0.002214f, -0.008471f, -0.017569f, 0.030311f, -0.007602f, -0.014693f, 0.000285f, 0.007558f, 0.009777f, 0.022681f, 0.003714f, -0.000357f, -0.008512f, -0.000197f, 0.012542f, -0.001528f, 0.015672f, 0.030110f, 0.002516f, -0.006454f, 0.000901f, 0.025936f, 0.032346f, -0.016060f, 0.004504f, 0.004587f, 0.017482f, 0.009317f, 0.003072f, 0.005454f, -0.012898f, 0.008103f, 0.008329f, 0.008410f, -0.005584f, 0.000556f, 0.006337f, 0.009717f, -0.001377f, 0.003394f, 0.002209f, -0.010859f, 0.005260f, 0.000606f, -0.009889f, + -0.007082f, 0.010445f, -0.004608f, 0.007219f, -0.010407f, -0.008047f, -0.003485f, 0.002359f, -0.000063f, 0.009417f, 0.004416f, 0.001665f, 0.000568f, 0.004693f, 0.004466f, 0.001341f, -0.007864f, 0.000316f, -0.003237f, 0.001244f, -0.002408f, -0.001980f, 0.000020f, -0.000839f, -0.001014f, -0.002754f, -0.007691f, -0.002212f, 0.000976f, -0.005309f, -0.003226f, -0.003383f, 0.000274f, -0.003389f, -0.005374f, -0.001338f, 0.002752f, 0.004200f, -0.008360f, 0.011979f, -0.010548f, -0.019194f, 0.013417f, -0.001492f, -0.004617f, 0.005149f, 0.011433f, -0.032251f, 0.002064f, 0.024856f, -0.002801f, 0.044656f, 0.021381f, -0.013533f, -0.009915f, -0.004098f, -0.012800f, -0.005639f, 0.019979f, -0.007576f, -0.006451f, 0.020028f, 0.016266f, 0.005430f, 0.009360f, 0.018727f, 0.012413f, 0.014037f, -0.010148f, -0.006904f, 0.017774f, -0.003388f, 0.016096f, 0.000194f, -0.019062f, -0.012211f, 0.005253f, 0.015218f, -0.020741f, 0.001395f, -0.011041f, 0.005925f, -0.012629f, 0.017786f, 0.017711f, -0.017122f, -0.001763f, 0.005133f, -0.000488f, -0.023186f, -0.010372f, 0.004099f, 0.015513f, 0.025519f, 0.008709f, -0.018720f, + -0.004085f, -0.004472f, -0.002141f, 0.016095f, 0.002608f, 0.012921f, -0.019189f, 0.008760f, 0.001381f, -0.015153f, 0.018150f, 0.007802f, -0.002377f, -0.003935f, 0.003188f, -0.000561f, -0.015511f, 0.011855f, -0.003541f, 0.007119f, -0.012042f, -0.021281f, -0.011808f, 0.005189f, 0.009612f, 0.000356f, 0.005334f, 0.019343f, 0.000257f, -0.004784f, 0.012141f, -0.003611f, 0.011431f, 0.000804f, 0.003750f, -0.009627f, 0.001054f, 0.000393f, 0.005273f, 0.005876f, 0.008115f, 0.005262f, -0.001931f, -0.002218f, -0.003697f, 0.009701f, -0.004423f, 0.005124f, 0.001094f, 0.003150f, 0.003971f, 0.005501f, 0.002410f, -0.001685f, 0.004871f, 0.002047f, 0.001664f, -0.001699f, 0.006535f, 0.003226f, 0.001409f, -0.006286f, 0.002393f, -0.002378f, -0.000021f, 0.004576f, 0.020725f, -0.025328f, -0.003946f, -0.008023f, 0.026172f, -0.011549f, 0.021582f, -0.006602f, 0.020154f, 0.027294f, -0.011956f, 0.008681f, -0.006819f, 0.015593f, -0.005788f, 0.013001f, 0.010807f, 0.010196f, -0.002211f, 0.010719f, -0.005257f, -0.013384f, -0.006381f, 0.015169f, -0.017525f, 0.002895f, 0.000036f, 0.013526f, 0.027270f, -0.024756f, + 0.000975f, 0.024460f, -0.000496f, 0.022373f, 0.003140f, 0.009892f, -0.002973f, -0.001780f, 0.006108f, -0.034237f, 0.003481f, -0.000715f, -0.013568f, 0.009197f, 0.005721f, 0.025036f, 0.012499f, -0.002367f, 0.047433f, 0.011905f, -0.024856f, 0.006709f, 0.002484f, 0.016642f, -0.010663f, 0.003283f, 0.014054f, 0.001210f, 0.008592f, -0.002379f, -0.027167f, -0.027801f, 0.000134f, -0.009328f, 0.022499f, -0.037822f, 0.048840f, -0.000182f, 0.027222f, 0.031159f, 0.007536f, -0.008124f, -0.006138f, -0.014485f, -0.019263f, -0.001553f, 0.006294f, -0.004801f, 0.009819f, -0.006425f, -0.015506f, -0.009730f, -0.007814f, 0.002900f, -0.002386f, 0.001813f, 0.010486f, 0.005347f, 0.004992f, 0.003922f, -0.004325f, -0.005270f, 0.000342f, -0.001044f, 0.003022f, 0.000806f, 0.001233f, 0.003382f, 0.006084f, 0.003706f, -0.012065f, 0.002295f, -0.002268f, 0.008884f, 0.008882f, 0.005219f, -0.000809f, -0.002487f, 0.003488f, 0.002858f, -0.004270f, -0.004423f, -0.001115f, -0.002999f, 0.000847f, -0.003211f, -0.005855f, 0.002412f, 0.009768f, -0.002442f, 0.003932f, -0.007419f, 0.000962f, 0.004393f, 0.004474f, -0.000149f, + 0.002867f, 0.006370f, -0.045202f, -0.003287f, 0.015256f, 0.002435f, -0.017041f, -0.041984f, -0.000120f, 0.004692f, -0.007450f, -0.001846f, -0.012440f, 0.006400f, -0.010375f, 0.021484f, 0.007507f, -0.012949f, -0.016184f, -0.027627f, 0.020510f, -0.008874f, 0.001302f, 0.026753f, 0.036804f, 0.022417f, -0.003537f, 0.001848f, -0.025422f, -0.010908f, -0.010288f, 0.006718f, -0.036024f, 0.009307f, 0.009704f, 0.001980f, -0.018573f, 0.017657f, 0.027470f, -0.004517f, -0.000590f, 0.003147f, -0.016111f, -0.016987f, 0.009631f, 0.006602f, 0.020752f, -0.022995f, 0.024782f, -0.013169f, 0.013611f, -0.021290f, -0.016868f, -0.008453f, -0.000653f, -0.002569f, 0.008976f, -0.004631f, -0.037231f, -0.027889f, -0.007946f, 0.000942f, -0.037332f, 0.000474f, 0.018297f, -0.009894f, -0.004415f, 0.005602f, 0.015540f, -0.032787f, 0.016620f, -0.005796f, -0.005043f, -0.000192f, 0.013262f, 0.016684f, -0.019795f, -0.010070f, -0.013351f, -0.006449f, -0.004904f, 0.009696f, 0.003098f, -0.011890f, -0.005458f, -0.009121f, 0.006183f, 0.021754f, 0.014211f, -0.000128f, -0.000769f, -0.012166f, 0.000320f, -0.007435f, 0.010103f, -0.001869f, + 0.017727f, 0.005965f, 0.006088f, -0.006420f, 0.000223f, 0.000213f, -0.014452f, 0.015266f, 0.000984f, -0.002688f, 0.007797f, -0.002811f, -0.002580f, -0.000716f, 0.001006f, -0.012386f, 0.005282f, 0.007567f, 0.007831f, -0.001275f, -0.003109f, 0.002736f, 0.004345f, -0.004418f, -0.002819f, 0.004418f, -0.009624f, 0.001064f, -0.000429f, 0.008882f, -0.000880f, 0.040510f, 0.000989f, -0.008213f, 0.031508f, -0.006877f, -0.012806f, -0.003381f, -0.002891f, 0.039080f, 0.044689f, -0.005805f, 0.009514f, 0.011401f, -0.005699f, -0.021202f, 0.010454f, 0.041562f, 0.031698f, 0.027115f, -0.009831f, 0.011763f, 0.022318f, -0.028937f, -0.021560f, 0.025315f, -0.012900f, -0.014148f, -0.000968f, 0.031645f, -0.004756f, 0.029134f, 0.001918f, 0.026148f, -0.015632f, 0.035920f, 0.010925f, -0.011102f, -0.018304f, 0.006588f, -0.025899f, 0.003147f, -0.030733f, -0.010448f, -0.011022f, 0.017635f, -0.017596f, 0.029032f, -0.035489f, -0.061363f, 0.038374f, 0.017217f, -0.007544f, 0.000368f, 0.042325f, 0.019921f, 0.003363f, -0.011061f, 0.009143f, -0.004879f, 0.000507f, -0.027454f, -0.027905f, 0.016474f, -0.009371f, 0.009127f, + 0.052544f, -0.013694f, 0.011299f, -0.034252f, 0.040598f, -0.013535f, -0.018144f, -0.008632f, -0.005684f, 0.017014f, -0.034422f, 0.028834f, -0.033740f, 0.024386f, -0.017378f, -0.023458f, 0.023457f, -0.000953f, 0.007676f, -0.009471f, 0.013866f, -0.007553f, -0.010633f, -0.004681f, -0.016111f, 0.011150f, -0.000548f, -0.010412f, -0.004478f, 0.003980f, 0.017138f, 0.003320f, 0.002421f, 0.004650f, -0.000463f, -0.002860f, 0.008680f, -0.004833f, 0.003902f, 0.003706f, -0.004499f, -0.001191f, -0.001040f, 0.012396f, 0.010727f, -0.003894f, -0.006014f, -0.012821f, -0.000298f, -0.002562f, -0.001913f, -0.002031f, 0.000320f, 0.011886f, 0.003483f, -0.001353f, 0.014841f, -0.046053f, -0.034233f, -0.033193f, 0.046334f, 0.001549f, 0.019886f, 0.011845f, -0.040822f, -0.035696f, 0.023994f, -0.063684f, 0.018605f, 0.018904f, -0.004094f, -0.025345f, -0.023304f, 0.039663f, -0.021337f, -0.002813f, -0.006674f, -0.020573f, 0.030173f, 0.009598f, 0.027299f, 0.015866f, 0.018835f, -0.005984f, 0.030652f, -0.002834f, -0.020046f, -0.023619f, -0.005434f, 0.013289f, -0.017895f, 0.023788f, 0.015283f, -0.017958f, -0.064467f, -0.005430f, + -0.005295f, -0.001611f, 0.046845f, 0.001047f, -0.036691f, -0.021786f, -0.022435f, 0.019220f, -0.014140f, -0.030573f, -0.034099f, -0.021232f, -0.016579f, -0.076034f, 0.001827f, 0.009465f, 0.024979f, -0.039726f, 0.013007f, -0.032828f, -0.026837f, -0.009209f, 0.031787f, 0.008109f, 0.029505f, 0.055682f, 0.016772f, 0.012763f, 0.036338f, -0.028342f, -0.003605f, -0.013473f, -0.015527f, 0.029083f, 0.026930f, 0.042733f, 0.021028f, -0.039177f, -0.026065f, 0.030724f, -0.046237f, -0.050978f, -0.016003f, 0.037099f, 0.005905f, -0.009106f, 0.025337f, 0.020631f, -0.000196f, 0.005865f, 0.021488f, -0.014080f, 0.012721f, -0.010386f, -0.001959f, -0.010822f, -0.001985f, 0.002797f, 0.015060f, -0.009580f, -0.012053f, -0.000064f, 0.008509f, 0.002680f, 0.007740f, -0.001238f, -0.012048f, -0.002925f, -0.007972f, 0.000591f, -0.006657f, -0.001351f, -0.000921f, -0.013622f, 0.011042f, 0.001645f, 0.011239f, 0.014057f, 0.019508f, -0.007354f, -0.010342f, -0.000866f, 0.001906f, 0.022440f, -0.019692f, -0.041740f, 0.012151f, -0.000067f, -0.000287f, 0.002094f, 0.006421f, 0.009508f, 0.019069f, 0.006564f, 0.016130f, 0.009129f, + 0.019013f, 0.048460f, 0.002091f, -0.061953f, -0.022396f, 0.016340f, 0.001097f, -0.012488f, -0.039675f, -0.025947f, 0.008923f, 0.033045f, 0.013081f, -0.030628f, 0.017115f, 0.013691f, -0.034733f, -0.006167f, -0.043064f, 0.034636f, -0.017686f, -0.022235f, 0.031991f, -0.030100f, 0.008974f, 0.066207f, -0.007286f, 0.011153f, 0.019833f, 0.000324f, 0.009997f, -0.038104f, 0.009790f, 0.007238f, 0.006649f, 0.086819f, 0.058900f, -0.006025f, -0.029735f, -0.019525f, 0.027548f, 0.031916f, -0.034231f, -0.018886f, -0.046077f, 0.074150f, 0.020714f, 0.008946f, -0.011500f, -0.007640f, -0.016073f, -0.008709f, 0.053402f, -0.013795f, 0.014710f, 0.053363f, 0.009254f, -0.014554f, -0.038975f, 0.001404f, 0.016064f, -0.078665f, 0.017520f, 0.009033f, 0.054370f, 0.037309f, 0.029123f, 0.048642f, 0.027582f, -0.009176f, 0.005046f, 0.017215f, -0.005181f, 0.002745f, -0.003154f, 0.008054f, 0.004515f, 0.045478f, -0.001058f, 0.018912f, -0.007712f, 0.018284f, -0.001277f, 0.024278f, 0.005278f, 0.007063f, 0.021949f, -0.001363f, 0.009217f, 0.015067f, 0.000570f, 0.012264f, 0.016907f, 0.007788f, 0.013509f, 0.019900f, + 0.011359f, -0.006847f, -0.001255f, 0.004729f, 0.004933f, 0.000608f, -0.007666f, 0.004319f, 0.005245f, 0.002755f, 0.010495f, -0.000999f, 0.016382f, 0.009278f, -0.006528f, 0.017362f, -0.002186f, -0.010997f, -0.050519f, -0.007229f, 0.034851f, 0.019542f, -0.056594f, -0.074630f, 0.008617f, 0.050674f, 0.020523f, 0.030971f, -0.017564f, 0.023921f, 0.004049f, 0.000642f, -0.027051f, -0.009689f, -0.042146f, 0.062665f, 0.021049f, -0.050873f, -0.034855f, 0.022774f, 0.002472f, 0.012551f, -0.015172f, 0.031254f, 0.018320f, 0.021511f, 0.041080f, 0.036324f, 0.007555f, 0.035511f, -0.018626f, 0.020379f, -0.000023f, 0.024771f, 0.011468f, -0.005977f, -0.014857f, 0.017084f, -0.022100f, 0.058428f, -0.015610f, -0.011091f, 0.012092f, 0.028859f, 0.028684f, -0.019403f, 0.050471f, 0.049851f, 0.029143f, 0.012017f, 0.004314f, -0.016119f, -0.037791f, -0.064961f, -0.010403f, 0.022995f, -0.001251f, 0.028152f, 0.030936f, 0.032901f, 0.011657f, 0.018281f, 0.107926f, -0.053098f, -0.022965f, 0.010548f, 0.021006f, -0.002869f, -0.083934f, 0.019587f, -0.012881f, 0.012443f, 0.015128f, 0.037101f, 0.007697f, 0.000440f, + -0.033593f, 0.034879f, -0.012323f, 0.004842f, 0.030985f, 0.013727f, -0.032530f, -0.007340f, -0.018156f, -0.006552f, -0.013867f, 0.002027f, 0.001590f, 0.012919f, -0.002859f, 0.015811f, 0.016140f, 0.020586f, 0.000116f, -0.000531f, -0.012373f, -0.006086f, -0.016669f, -0.011869f, -0.004720f, 0.021843f, 0.007484f, -0.003936f, 0.001876f, -0.009173f, 0.003595f, 0.019057f, 0.022303f, -0.004861f, -0.019841f, -0.000888f, 0.001641f, 0.008934f, -0.005176f, 0.005990f, -0.009189f, 0.014261f, -0.027890f, 0.002265f, -0.008253f, -0.010633f, 0.000446f, 0.004960f, -0.017797f, 0.008132f, -0.003005f, 0.008018f, -0.009447f, -0.016614f, 0.006359f, 0.028234f, 0.027792f, -0.015285f, -0.020802f, 0.006220f, -0.019988f, -0.064090f, 0.066313f, -0.019313f, 0.018664f, 0.006174f, 0.055625f, 0.044362f, 0.027889f, -0.026481f, -0.004355f, 0.038067f, 0.020208f, 0.044798f, 0.119329f, -0.007346f, -0.047000f, -0.012217f, 0.035692f, -0.005284f, -0.055519f, 0.084910f, 0.044000f, -0.029880f, -0.046480f, -0.005691f, 0.010448f, -0.014734f, 0.033728f, 0.028688f, 0.033094f, 0.063402f, 0.010627f, 0.017945f, 0.011342f, -0.024496f, + -0.058962f, 0.034720f, -0.040118f, -0.030102f, 0.046565f, 0.024447f, 0.026271f, 0.013826f, 0.009602f, -0.002620f, -0.058226f, -0.051649f, 0.000975f, 0.030970f, -0.038491f, 0.036520f, -0.017071f, -0.043134f, 0.013628f, 0.037942f, -0.006996f, 0.007346f, 0.037639f, 0.037137f, 0.038509f, 0.002890f, -0.023492f, 0.021999f, 0.091491f, 0.011086f, 0.037208f, 0.052317f, 0.002559f, -0.016517f, -0.045974f, -0.018539f, -0.072455f, -0.024795f, -0.018135f, -0.008887f, 0.016471f, 0.002868f, -0.003293f, -0.020774f, -0.013721f, -0.012044f, 0.017901f, -0.018582f, -0.003725f, -0.016388f, 0.005355f, -0.010391f, -0.017853f, 0.000760f, -0.025696f, -0.009009f, 0.000438f, -0.023159f, -0.004390f, -0.020172f, -0.011680f, 0.002283f, -0.037106f, -0.003546f, 0.001740f, -0.000370f, 0.017531f, -0.023575f, -0.007782f, 0.025368f, 0.000493f, -0.009936f, -0.001100f, -0.008484f, 0.004877f, -0.010844f, -0.008230f, 0.012644f, -0.000870f, 0.000892f, 0.033841f, 0.027897f, 0.000988f, -0.021832f, -0.032375f, -0.057420f, 0.010593f, 0.035741f, 0.048782f, -0.040946f, -0.043676f, 0.054213f, 0.024508f, -0.001835f, -0.005182f, -0.022086f, + 0.010557f, -0.010147f, -0.023069f, 0.025009f, 0.030429f, 0.021140f, 0.002284f, -0.004118f, -0.016593f, 0.003898f, 0.012938f, 0.007936f, -0.018784f, -0.067062f, 0.015292f, -0.015046f, -0.019941f, 0.004009f, -0.008444f, 0.005909f, -0.066840f, 0.031548f, 0.024789f, -0.048053f, 0.034074f, 0.045162f, 0.037833f, -0.009820f, 0.006559f, -0.005745f, 0.024759f, -0.005277f, 0.000120f, 0.120212f, -0.035764f, 0.010238f, -0.031903f, -0.018404f, 0.067995f, 0.025049f, 0.023390f, 0.043599f, -0.054907f, -0.045400f, 0.068365f, -0.042850f, 0.035016f, 0.043271f, 0.004365f, 0.011742f, 0.016616f, 0.077535f, -0.026013f, -0.029242f, -0.070663f, -0.014922f, -0.030293f, 0.024290f, -0.044131f, 0.075367f, 0.041108f, 0.046144f, 0.022834f, 0.040367f, 0.021265f, 0.071960f, 0.017880f, 0.034772f, 0.026564f, -0.034948f, -0.016638f, -0.013342f, 0.006494f, 0.004372f, 0.035342f, 0.015606f, 0.000197f, -0.001354f, 0.008235f, 0.003567f, -0.013436f, -0.026554f, -0.014115f, -0.019861f, 0.025574f, -0.008626f, -0.014244f, 0.008490f, -0.005392f, 0.031608f, 0.014674f, -0.005261f, 0.017777f, -0.019833f, 0.009877f, 0.016072f, + -0.005493f, 0.030629f, 0.031162f, 0.021009f, -0.014322f, 0.025915f, 0.014925f, -0.024926f, -0.004661f, 0.002945f, -0.015071f, 0.002040f, 0.022311f, -0.025080f, -0.029158f, 0.013267f, 0.006021f, -0.002499f, -0.019278f, 0.049657f, -0.028699f, 0.026278f, 0.084362f, 0.041921f, 0.031952f, -0.047075f, 0.013335f, 0.047016f, -0.040065f, 0.066541f, 0.023891f, 0.035630f, 0.031900f, -0.020387f, 0.033044f, 0.028472f, 0.012026f, 0.065972f, 0.050023f, -0.003724f, -0.112706f, -0.013157f, 0.052468f, 0.050620f, 0.052031f, 0.012526f, 0.029079f, 0.002640f, 0.014682f, -0.003661f, -0.034842f, 0.072301f, -0.001797f, 0.068896f, 0.031086f, 0.049745f, -0.069373f, 0.047221f, 0.023581f, 0.021307f, -0.018115f, 0.016476f, -0.012847f, 0.015735f, 0.069253f, 0.027690f, 0.090331f, 0.004587f, 0.020054f, 0.052864f, -0.010552f, 0.083022f, 0.040947f, 0.007417f, -0.054793f, -0.034156f, 0.030318f, 0.003647f, -0.009061f, 0.001997f, -0.009280f, 0.006698f, -0.039911f, 0.026935f, -0.042507f, -0.063217f, -0.023666f, -0.003338f, -0.021121f, -0.016130f, 0.053799f, -0.006195f, 0.048998f, -0.046377f, 0.053831f, 0.007449f, + -0.059484f, 0.059167f, 0.049256f, -0.018206f, -0.008280f, 0.014308f, 0.025877f, 0.016839f, -0.002469f, -0.026787f, 0.017055f, -0.011428f, -0.001718f, 0.034243f, -0.006949f, -0.005337f, -0.027505f, -0.007103f, 0.007603f, 0.005567f, -0.001854f, 0.025814f, 0.022635f, -0.017622f, 0.006116f, -0.000172f, 0.000937f, 0.023767f, 0.007180f, -0.025376f, 0.017247f, -0.021670f, 0.011109f, -0.017481f, -0.007126f, -0.005373f, -0.004033f, 0.003256f, 0.004907f, 0.003375f, 0.001326f, -0.004840f, 0.004279f, -0.012079f, 0.008491f, 0.010020f, -0.002136f, -0.009867f, 0.007463f, -0.002059f, 0.012687f, -0.006936f, -0.006172f, -0.017541f, -0.000842f, -0.015556f, -0.050301f, -0.048089f, -0.019352f, -0.020830f, 0.038936f, -0.062965f, -0.078459f, -0.085306f, -0.103034f, 0.046034f, 0.050543f, -0.002943f, -0.008310f, -0.000322f, -0.024530f, 0.005970f, 0.012780f, -0.021724f, 0.070114f, 0.066067f, 0.043144f, 0.047262f, -0.043553f, 0.028920f, 0.002352f, 0.034440f, -0.013612f, -0.017746f, -0.064381f, 0.057563f, -0.058182f, -0.070429f, -0.018550f, -0.014796f, 0.075534f, -0.041533f, 0.010112f, -0.039205f, -0.011014f, 0.072870f, + 0.013467f, 0.023054f, 0.036031f, 0.066923f, 0.004068f, -0.007495f, -0.081810f, -0.015091f, -0.006605f, -0.002324f, 0.044747f, 0.024082f, 0.152204f, 0.007625f, -0.004755f, -0.050499f, -0.004108f, 0.060526f, 0.055472f, -0.005002f, -0.026807f, -0.075224f, 0.018751f, 0.047623f, -0.024436f, -0.054859f, -0.023282f, 0.046936f, -0.014367f, 0.034453f, -0.109024f, -0.060993f, -0.087155f, -0.023584f, 0.034981f, 0.018579f, -0.037968f, -0.036243f, -0.042662f, 0.017115f, 0.089797f, 0.027175f, -0.000385f, -0.031866f, -0.002577f, -0.024825f, -0.006776f, 0.010614f, 0.010623f, -0.028585f, -0.012904f, -0.002569f, 0.019496f, -0.048581f, -0.033031f, -0.011361f, 0.023895f, -0.003342f, 0.031436f, 0.010033f, 0.003736f, -0.010996f, -0.005389f, -0.021887f, -0.004595f, -0.032972f, -0.007291f, 0.036163f, 0.013050f, 0.016450f, -0.025212f, -0.045591f, 0.022620f, 0.021365f, -0.013135f, -0.000055f, -0.018724f, -0.003547f, 0.005778f, -0.002511f, 0.017144f, 0.010548f, 0.011253f, 0.021628f, 0.012131f, 0.017069f, 0.018597f, -0.003731f, 0.014963f, 0.007910f, -0.012468f, -0.030453f, -0.015801f, 0.074057f, 0.002429f, 0.000432f, + 0.131094f, 0.012980f, -0.097083f, -0.074550f, 0.091928f, 0.081603f, 0.005194f, -0.064663f, -0.080318f, -0.046063f, 0.016055f, 0.079384f, 0.070789f, 0.047423f, -0.028793f, 0.009398f, -0.028920f, 0.025989f, 0.060288f, 0.092919f, 0.101528f, -0.012591f, -0.053966f, -0.085476f, -0.127734f, -0.001215f, 0.068474f, 0.277294f, -0.035930f, -0.014673f, -0.133658f, -0.055293f, 0.011607f, 0.032117f, 0.165286f, 0.119156f, 0.073869f, -0.083700f, -0.047139f, -0.081777f, -0.004599f, 0.138315f, 0.128044f, 0.155884f, -0.042719f, -0.153224f, -0.111373f, -0.154712f, 0.039020f, 0.142211f, 0.125149f, 0.230464f, -0.109764f, -0.133693f, -0.117081f, -0.019446f, 0.102098f, 0.135910f, 0.190065f, 0.086064f, -0.039691f, -0.073776f, 0.017697f, -0.005551f, 0.054224f, 0.152010f, -0.033216f, 0.094497f, -0.033506f, -0.087334f, 0.001473f, 0.013724f, 0.082473f, 0.003980f, -0.007453f, 0.007902f, -0.021344f, -0.075532f, 0.031745f, -0.010361f, 0.025974f, -0.021325f, -0.062023f, -0.015032f, -0.014478f, 0.007067f, 0.041531f, 0.005813f, -0.011743f, 0.015930f, -0.014905f, -0.019346f, -0.003444f, 0.060277f, 0.015497f, 0.055353f, + -0.003842f, 0.006347f, -0.015624f, 0.007236f, 0.006566f, 0.011206f, 0.042924f, 0.073946f, -0.001984f, -0.019933f, -0.067498f, -0.089341f, 0.003735f, 0.005427f, 0.108382f, 0.069800f, 0.011929f, -0.037417f, -0.152221f, -0.085738f, -0.012926f, 0.069077f, 0.135110f, 0.070113f, -0.040622f, -0.050242f, -0.157816f, -0.058603f, 0.075546f, 0.138940f, 0.112281f, 0.007400f, -0.071328f, -0.080809f, -0.007852f, -0.002759f, 0.065735f, -0.011942f, -0.067815f, 0.088635f, -0.020696f, 0.104675f, -0.096622f, 0.000987f, -0.042285f, -0.100371f, 0.073211f, -0.052786f, 0.067765f, -0.053981f, -0.020877f, -0.005018f, 0.034836f, 0.007601f, -0.038533f, -0.020709f, -0.001776f, 0.054084f, -0.050583f, 0.062066f, 0.044582f, -0.034188f, 0.007695f, -0.042873f, -0.042993f, 0.072298f, -0.071661f, -0.036327f, 0.048076f, 0.110557f, -0.000886f, 0.014729f, -0.010253f, -0.048801f, -0.013655f, 0.044944f, -0.015759f, -0.073509f, 0.010281f, -0.016317f, -0.012467f, 0.021768f, -0.066819f, 0.033300f, -0.000267f, 0.022704f, 0.051394f, -0.116710f, -0.086187f, -0.028911f, -0.002661f, 0.119436f, -0.063600f, 0.043042f, 0.094136f, -0.052081f, + -0.030619f, -0.003648f, 0.051043f, 0.074056f, -0.040742f, 0.021133f, -0.015026f, 0.029086f, 0.115908f, -0.043445f, -0.130721f, 0.027409f, 0.059822f, 0.015169f, -0.069872f, 0.043177f, 0.018266f, 0.043345f, -0.013701f, -0.002375f, -0.048808f, -0.039165f, 0.028710f, 0.006887f, -0.052013f, 0.014859f, 0.035924f, -0.017847f, -0.000267f, -0.058113f, 0.008458f, -0.014772f, -0.063422f, -0.002624f, 0.028381f, 0.024190f, 0.010244f, -0.002137f, 0.015730f, -0.043784f, -0.010689f, 0.014903f, -0.020997f, 0.032834f, -0.020253f, -0.008949f, -0.019146f, -0.000428f, -0.020398f, 0.031370f, 0.005845f, -0.025692f, -0.021543f, -0.001543f, -0.000856f, 0.052043f, -0.018294f, 0.018096f, -0.009473f, -0.001561f, 0.011542f, -0.023283f, -0.020029f, 0.002881f, -0.044400f, -0.012940f, 0.013126f, -0.038476f, 0.001880f, -0.007666f, -0.013007f, 0.007495f, 0.024856f, -0.000683f, 0.003747f, -0.013917f, -0.009034f, -0.134905f, -0.042815f, 0.057914f, 0.079289f, 0.065839f, -0.067291f, 0.021454f, -0.187853f, -0.122157f, -0.103808f, -0.016535f, 0.087899f, 0.056570f, -0.004005f, -0.041306f, -0.051047f, 0.024884f, -0.031261f, -0.003198f, + 0.067172f, 0.018310f, 0.003077f, -0.066594f, -0.032134f, -0.006788f, -0.031599f, 0.020342f, -0.005642f, 0.036096f, -0.009549f, -0.000367f, -0.011914f, -0.002148f, -0.008689f, -0.038013f, -0.028866f, -0.063801f, -0.045143f, 0.032596f, 0.062362f, 0.068054f, 0.037774f, 0.059314f, -0.009101f, 0.050477f, -0.011863f, -0.023058f, -0.079743f, -0.003018f, -0.044081f, 0.034168f, 0.012984f, 0.100835f, -0.081430f, 0.028974f, 0.056424f, -0.031048f, -0.043307f, -0.024981f, -0.020229f, -0.020576f, 0.007238f, 0.071669f, 0.045926f, -0.018973f, -0.002751f, 0.051482f, -0.059530f, -0.065587f, 0.027064f, -0.076138f, -0.058791f, -0.051062f, 0.006314f, 0.024905f, 0.029535f, 0.088653f, 0.060062f, -0.009429f, 0.044689f, -0.025590f, 0.001727f, 0.011244f, 0.033098f, 0.053898f, 0.057950f, 0.041049f, 0.033812f, 0.027472f, 0.002262f, -0.074149f, -0.021114f, -0.038182f, -0.009682f, 0.043644f, -0.001945f, 0.006813f, -0.016262f, -0.032870f, 0.003623f, -0.016115f, -0.013583f, -0.035804f, 0.015854f, 0.027326f, -0.012101f, 0.010707f, 0.023908f, 0.013479f, 0.015570f, 0.003033f, 0.015328f, -0.010352f, 0.010524f, -0.004716f, + -0.019013f, 0.014787f, 0.018098f, -0.014591f, -0.021866f, 0.002245f, -0.014792f, -0.025095f, 0.019576f, 0.021473f, 0.008194f, 0.027578f, -0.002508f, -0.024752f, 0.042782f, -0.017575f, -0.161115f, -0.238003f, -0.292118f, -0.230868f, -0.344293f, -0.061108f, -0.125919f, 0.037801f, 0.071957f, 0.248747f, 0.145168f, 0.257691f, 0.262031f, 0.358838f, 0.261849f, 0.266199f, 0.196004f, 0.008165f, -0.057148f, -0.104226f, -0.064208f, -0.214762f, -0.146862f, -0.117020f, -0.119592f, -0.118332f, -0.118111f, -0.114640f, -0.123692f, -0.135705f, -0.101234f, -0.157745f, -0.129051f, -0.112493f, -0.050663f, -0.132592f, -0.041151f, 0.048427f, -0.098585f, -0.047752f, 0.026195f, 0.021340f, -0.083499f, 0.069139f, 0.088908f, 0.112672f, 0.152907f, 0.155444f, -0.012468f, 0.092332f, 0.150302f, 0.213441f, 0.168156f, 0.336346f, 0.315854f, 0.278970f, 0.225984f, 0.286220f, 0.141962f, 0.227834f, 0.277352f, 0.213579f, 0.136472f, 0.231658f, 0.074984f, 0.077678f, 0.142196f, 0.142697f, 0.101228f, 0.029212f, 0.082700f, -0.027833f, 0.004684f, 0.072407f, -0.082952f, -0.208024f, -0.310843f, -0.122941f, -0.425479f, -0.372147f, + -0.327394f, -0.378488f, -0.421138f, -0.352969f, -0.305631f, -0.294770f, -0.203314f, -0.267186f, -0.137354f, -0.169710f, -0.180477f, -0.273459f, -0.221109f, -0.159429f, -0.130706f, -0.110587f, -0.103775f, -0.065028f, 0.025525f, -0.000414f, -0.006504f, 0.076855f, 0.160518f, 0.133980f, 0.135550f, 0.216433f, 0.184883f, 0.192303f, 0.244019f, 0.230291f, 0.195759f, 0.186387f, 0.223400f, 0.190393f, 0.184389f, 0.195917f, 0.203063f, 0.172919f, 0.150959f, 0.139144f, 0.129804f, 0.170025f, 0.133090f, 0.100084f, 0.104340f, 0.078301f, 0.045414f, -0.026972f, -0.056563f, -0.073633f, -0.132445f, -0.112967f, -0.117381f, -0.139271f, -0.147678f, -0.135457f, -0.088667f, -0.098971f, -0.090010f, -0.091014f, -0.047272f, -0.051838f, -0.062948f, -0.042553f, -0.013963f, -0.015065f, -0.029420f, -0.017985f, 0.001851f, -0.009709f, -0.014410f, -0.010791f, -0.000557f, -0.000743f, -0.000813f, 0.000744f, 0.001311f, 0.000232f} + } +}; +const float CRendBin_Combined_BRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][2819]={ + { + {0.009763f, 0.004826f, -0.006570f, 0.009881f, -0.005791f, -0.002002f, 0.000151f, -0.003400f, -0.003805f, -0.007681f, 0.001838f, 0.011624f, 0.001194f, 0.002073f, 0.004945f, 0.001187f, -0.004128f, -0.001297f, -0.002453f, -0.002488f, 0.007055f, 0.001924f, 0.000928f, -0.002418f, 0.001304f, -0.000306f, -0.002679f, -0.004405f, 0.006838f, 0.005246f, 0.000978f, -0.001469f, 0.007930f, -0.011047f, -0.004108f, 0.004685f, -0.004570f, 0.009484f, 0.000974f, 0.006690f, 0.000864f, 0.000762f, 0.004341f, -0.003817f, -0.001583f, -0.000144f, -0.000106f, -0.002982f, -0.002374f, 0.004178f, -0.000209f, -0.010189f, 0.009547f, -0.001355f, 0.001625f, -0.008609f, 0.004085f, -0.003819f, 0.003384f, 0.000247f, -0.000296f, -0.003242f, -0.000332f, -0.004984f, 0.005131f, -0.009678f, -0.001093f, 0.007056f, -0.005603f, 0.002624f, 0.010545f, 0.003199f, 0.001057f, -0.005259f, 0.000556f, 0.002804f, -0.001992f, 0.003516f, -0.002220f, -0.001537f, -0.002978f, 0.003182f, -0.003473f, -0.005549f, 0.001757f, 0.000922f, -0.001396f, 0.006788f, -0.001729f, -0.001473f, -0.001665f, 0.002253f, 0.002466f, -0.000178f, 0.000264f, 0.001227f, + -0.001368f, 0.001216f, -0.002631f, -0.001082f, -0.000443f, -0.000548f, -0.001426f, -0.000049f, -0.000095f, -0.000291f, -0.000845f, -0.000062f, -0.001432f, 0.000753f, -0.000730f, 0.001637f, -0.001088f, 0.001220f, 0.001645f, 0.020362f, 0.003762f, -0.002850f, 0.006224f, -0.003076f, -0.002546f, -0.003260f, -0.001325f, -0.007645f, 0.010824f, 0.006253f, 0.004673f, 0.005031f, 0.004786f, -0.005016f, -0.006759f, 0.009111f, -0.001958f, -0.007069f, -0.013458f, 0.002204f, -0.003984f, 0.004224f, 0.000085f, -0.001142f, -0.003012f, 0.004236f, -0.004986f, -0.002520f, 0.006652f, 0.012636f, 0.003292f, 0.005749f, 0.001096f, 0.006355f, -0.001316f, 0.006761f, 0.004266f, 0.000764f, 0.003782f, 0.000336f, 0.001111f, 0.000348f, 0.009236f, 0.001956f, 0.002430f, -0.002087f, 0.001368f, -0.000655f, -0.001292f, 0.007494f, 0.008579f, -0.003085f, -0.003158f, 0.001729f, 0.007895f, -0.012851f, -0.000674f, -0.003491f, -0.009512f, -0.003872f, 0.001323f, -0.004056f, 0.004228f, 0.003425f, 0.000283f, -0.005801f, 0.002699f, -0.001237f, -0.005548f, 0.007116f, -0.009823f, -0.004645f, -0.010477f, -0.005187f, -0.001489f, 0.001558f, + 0.010569f, -0.004571f, -0.002756f, 0.003266f, -0.001669f, -0.002516f, 0.005005f, -0.000831f, -0.000208f, -0.002289f, -0.003546f, -0.004398f, -0.001175f, 0.003732f, 0.001485f, 0.001813f, 0.001731f, 0.001323f, 0.000131f, -0.000627f, -0.000274f, 0.000296f, 0.002634f, 0.001281f, 0.001386f, -0.000905f, 0.000215f, 0.000903f, 0.000745f, -0.000002f, 0.000168f, 0.000006f, -0.000203f, -0.000366f, -0.001846f, -0.001419f, -0.000960f, 0.001017f, 0.000852f, -0.000416f, 0.006145f, 0.002721f, -0.012411f, -0.001154f, 0.001828f, 0.008837f, -0.002669f, -0.015367f, 0.012384f, -0.014519f, 0.000761f, -0.006326f, -0.005048f, -0.015396f, -0.010259f, -0.005988f, -0.003900f, 0.006378f, 0.002140f, -0.010124f, 0.001428f, -0.005399f, 0.000068f, -0.000324f, 0.004173f, 0.000890f, -0.004445f, 0.000761f, 0.001075f, 0.002531f, -0.003146f, -0.002130f, -0.000951f, -0.004987f, -0.007643f, 0.010372f, 0.004779f, 0.001441f, -0.001438f, 0.008843f, 0.007597f, -0.008643f, 0.002416f, 0.000871f, -0.001673f, -0.005018f, 0.001130f, -0.008930f, 0.001998f, -0.001664f, -0.007349f, 0.009094f, 0.000132f, -0.000660f, 0.011308f, -0.009801f, + 0.008889f, 0.003335f, -0.001349f, -0.007251f, 0.002094f, -0.001011f, -0.007736f, -0.006382f, 0.000030f, -0.002771f, -0.003491f, -0.010612f, 0.000463f, 0.002317f, 0.004963f, -0.003051f, 0.004613f, 0.001455f, -0.001919f, -0.001444f, -0.006332f, 0.005483f, 0.001077f, 0.000839f, -0.010499f, 0.005528f, -0.000958f, 0.000786f, -0.005446f, 0.000210f, -0.009651f, 0.001210f, 0.002011f, 0.001338f, -0.000879f, 0.000989f, -0.000239f, 0.000115f, -0.001727f, 0.000571f, -0.000554f, 0.002161f, 0.001152f, 0.000926f, 0.001895f, 0.000078f, 0.000608f, 0.002012f, 0.001118f, -0.001308f, -0.000615f, 0.003166f, -0.001165f, 0.000670f, -0.001136f, 0.001217f, -0.003641f, -0.000836f, -0.001160f, 0.001522f, -0.000714f, -0.022861f, -0.021660f, 0.008398f, 0.014326f, 0.008683f, -0.019512f, 0.013897f, -0.004725f, -0.001770f, 0.001222f, -0.009028f, -0.006866f, 0.016395f, -0.000236f, -0.000020f, 0.001238f, -0.000383f, 0.005343f, -0.008144f, 0.004943f, -0.004311f, 0.004430f, 0.007510f, -0.004980f, -0.001341f, 0.004340f, -0.001243f, 0.007816f, -0.002430f, 0.003393f, 0.000686f, -0.000803f, 0.000661f, -0.006673f, -0.009267f, + 0.008749f, 0.001150f, -0.001692f, 0.000080f, -0.008698f, -0.010815f, -0.000307f, 0.000212f, 0.005630f, -0.010054f, -0.008579f, -0.001827f, -0.017877f, 0.006941f, -0.001414f, 0.003648f, -0.001379f, -0.004301f, 0.002728f, 0.022899f, 0.012704f, 0.006647f, -0.006868f, 0.009026f, -0.000109f, -0.011759f, 0.000028f, -0.012274f, 0.010425f, 0.001438f, 0.001226f, -0.006993f, 0.000059f, 0.007138f, 0.002607f, 0.001427f, 0.000887f, 0.000798f, 0.007659f, 0.005346f, 0.000976f, 0.005208f, 0.003087f, 0.004159f, 0.011213f, 0.004658f, 0.005511f, -0.005204f, 0.004206f, 0.003143f, -0.001356f, 0.008845f, 0.002672f, -0.000027f, -0.000810f, 0.002640f, 0.004690f, 0.000574f, -0.000075f, -0.001749f, 0.001115f, 0.003880f, 0.002126f, -0.000887f, 0.000364f, -0.003192f, 0.000896f, 0.000800f, -0.001443f, 0.000307f, -0.000220f, -0.000064f, 0.002151f, -0.000423f, 0.002245f, 0.003113f, 0.001100f, -0.001834f, -0.003546f, 0.000575f, -0.002245f, 0.001694f, 0.001506f, -0.002241f, 0.000890f, -0.032844f, -0.002500f, -0.007901f, -0.001149f, -0.005490f, -0.018632f, -0.000794f, -0.005012f, -0.007682f, -0.017467f, -0.002155f, + 0.012401f, -0.008668f, 0.008157f, -0.001446f, 0.011501f, -0.003899f, 0.009344f, -0.003082f, -0.009255f, -0.002485f, 0.000993f, -0.004061f, -0.008322f, -0.006688f, -0.008181f, 0.000262f, -0.007465f, 0.002718f, 0.000879f, 0.000744f, 0.003529f, -0.005617f, -0.007521f, 0.010846f, -0.000992f, 0.003214f, 0.000110f, -0.008521f, -0.005406f, -0.006017f, 0.000290f, -0.004321f, 0.007561f, 0.007685f, 0.001267f, -0.010438f, -0.003423f, 0.019189f, 0.004772f, -0.008123f, -0.006462f, -0.004115f, -0.007118f, -0.003765f, 0.014991f, 0.009120f, -0.010890f, 0.006656f, 0.008841f, 0.013053f, -0.003373f, 0.005303f, -0.000806f, 0.000111f, -0.005291f, -0.010877f, -0.001972f, 0.008017f, 0.000821f, 0.015532f, 0.011020f, 0.000733f, 0.003604f, 0.013100f, -0.010441f, -0.004787f, -0.003083f, -0.006432f, 0.004615f, 0.002027f, 0.002115f, -0.005638f, 0.003824f, -0.004097f, 0.004239f, -0.008015f, -0.000377f, -0.000743f, -0.003147f, -0.000197f, -0.000690f, 0.003935f, 0.001074f, 0.000882f, -0.003437f, -0.002324f, -0.001110f, -0.003237f, -0.000140f, -0.004669f, -0.002719f, 0.000189f, -0.000365f, 0.002909f, -0.001987f, 0.000796f, + -0.000962f, 0.001583f, 0.001142f, 0.004025f, -0.003328f, 0.042097f, 0.028257f, -0.008700f, -0.001586f, 0.000109f, -0.001146f, -0.004810f, 0.005880f, 0.014416f, 0.012167f, 0.006323f, -0.022083f, -0.009809f, 0.002840f, 0.001288f, 0.009385f, -0.016618f, 0.003361f, 0.022546f, 0.015172f, -0.002582f, 0.005406f, -0.001974f, -0.007610f, -0.010386f, 0.000580f, -0.008849f, -0.005167f, 0.002599f, 0.006999f, -0.006484f, -0.012088f, -0.005739f, 0.002078f, 0.011107f, 0.015501f, -0.002945f, -0.016394f, -0.003463f, -0.005863f, -0.016443f, -0.000993f, -0.000492f, -0.007897f, 0.002726f, 0.004429f, 0.009619f, -0.013800f, 0.005642f, 0.007112f, 0.001557f, -0.013346f, -0.009906f, 0.004541f, 0.000589f, 0.003459f, -0.001450f, -0.001311f, -0.000458f, -0.007402f, 0.003650f, 0.003856f, -0.005161f, 0.009254f, 0.010959f, 0.014973f, 0.003600f, 0.001114f, 0.014117f, 0.022999f, 0.003678f, 0.003140f, 0.003925f, 0.013521f, 0.001536f, 0.007997f, 0.022718f, 0.006731f, 0.004188f, 0.000618f, -0.004288f, -0.019423f, 0.002599f, -0.000531f, -0.003152f, -0.003728f, 0.002389f, -0.002708f, 0.004799f, 0.002119f, -0.002568f, + -0.001431f, -0.000657f, 0.003899f, 0.002493f, -0.001100f, -0.000756f, 0.002647f, 0.005770f, 0.000024f, -0.001448f, 0.001995f, 0.000220f, -0.002717f, -0.005368f, 0.003874f, -0.005055f, 0.003059f, 0.002134f, 0.003726f, -0.000254f, -0.000651f, 0.000077f, 0.001198f, -0.007051f, 0.000176f, 0.001027f, -0.000698f, 0.022154f, 0.000490f, 0.004617f, 0.005389f, 0.010684f, -0.004165f, 0.006804f, -0.005756f, -0.003672f, -0.018250f, 0.007284f, 0.012474f, -0.011292f, 0.009469f, -0.004673f, -0.015989f, 0.016658f, 0.009894f, -0.002967f, 0.010004f, 0.019508f, 0.013689f, -0.010062f, -0.005596f, 0.009834f, 0.003136f, -0.002221f, 0.007601f, 0.006949f, 0.010162f, 0.000642f, -0.004407f, -0.008699f, -0.015419f, -0.000507f, -0.012793f, 0.001579f, -0.004146f, 0.007164f, -0.010167f, -0.023455f, 0.005192f, -0.005818f, 0.010859f, 0.002729f, 0.000883f, -0.006492f, -0.013784f, -0.011595f, -0.001060f, -0.001187f, -0.010385f, 0.014674f, 0.019022f, 0.019709f, 0.008005f, -0.014114f, -0.001204f, 0.018674f, 0.001836f, -0.003221f, 0.008734f, -0.002444f, -0.004668f, -0.017729f, 0.009806f, 0.005136f, 0.025733f, 0.011877f, + -0.017417f, 0.005861f, 0.006601f, -0.001849f, -0.000282f, 0.006236f, -0.004209f, 0.001430f, -0.007443f, -0.018386f, 0.016657f, 0.003040f, 0.009945f, 0.004799f, -0.008627f, 0.014068f, -0.003082f, 0.003353f, 0.000800f, -0.003111f, 0.000579f, 0.000431f, 0.001161f, 0.007361f, 0.002480f, 0.001406f, 0.000678f, -0.002514f, -0.002916f, -0.003844f, -0.002229f, 0.002539f, -0.001174f, -0.000192f, -0.001423f, 0.002327f, -0.002108f, -0.001125f, 0.000270f, -0.000280f, 0.001035f, -0.004053f, 0.004761f, -0.001982f, 0.004196f, 0.001371f, -0.002117f, -0.002673f, 0.005904f, -0.005346f, 0.004751f, -0.001295f, -0.006824f, -0.011383f, -0.003071f, -0.002906f, -0.019650f, 0.000986f, 0.002413f, 0.009838f, -0.003715f, -0.008465f, 0.003528f, 0.001077f, 0.004652f, 0.000159f, 0.010678f, 0.004294f, 0.007376f, 0.001266f, -0.000822f, 0.006354f, 0.003716f, -0.019340f, -0.005977f, -0.027651f, 0.001256f, -0.005146f, 0.003199f, 0.004917f, 0.000374f, 0.013235f, 0.003368f, 0.018892f, 0.002324f, -0.022425f, 0.000461f, -0.009012f, -0.003709f, -0.001047f, -0.003362f, -0.001134f, -0.017788f, 0.003893f, -0.008561f, 0.021455f, + -0.022245f, 0.012369f, -0.004829f, -0.018985f, -0.003550f, -0.013342f, -0.002870f, -0.004046f, -0.020216f, 0.005829f, 0.006203f, -0.003679f, -0.003338f, -0.001265f, 0.007166f, -0.016038f, 0.000418f, 0.015092f, 0.002794f, 0.020985f, 0.034234f, 0.014169f, -0.030983f, -0.041336f, 0.020078f, 0.009019f, 0.030908f, -0.006369f, 0.014839f, 0.003200f, 0.014738f, 0.020650f, 0.026566f, -0.014081f, 0.007674f, 0.019791f, -0.016161f, 0.003047f, -0.002062f, -0.001997f, 0.001505f, 0.014144f, -0.002132f, 0.004858f, -0.009120f, 0.003347f, -0.007027f, -0.007395f, -0.003262f, -0.006170f, 0.001045f, -0.003621f, -0.010415f, -0.000345f, 0.006946f, 0.004350f, -0.001918f, -0.001890f, -0.001528f, 0.000195f, 0.003247f, 0.003432f, -0.002672f, -0.004025f, -0.001776f, 0.006046f, -0.001441f, 0.005860f, 0.000949f, 0.000904f, -0.001446f, 0.001460f, 0.001752f, 0.000543f, 0.001639f, 0.000337f, -0.004905f, -0.004753f, -0.003092f, 0.001600f, 0.005021f, -0.006967f, -0.004638f, -0.002156f, 0.002952f, -0.003241f, -0.037832f, 0.028247f, 0.005249f, -0.005034f, -0.000503f, -0.017184f, -0.014002f, 0.014724f, -0.003909f, -0.004851f, + 0.015367f, -0.011424f, -0.012191f, 0.000642f, 0.015287f, 0.006439f, -0.004841f, 0.000413f, -0.008636f, -0.001213f, 0.001279f, 0.008123f, 0.000445f, -0.019393f, -0.019154f, 0.004289f, -0.002488f, 0.004599f, -0.001833f, 0.007694f, 0.015047f, 0.027842f, -0.000341f, 0.017255f, -0.004158f, 0.004841f, 0.012026f, -0.011648f, 0.022869f, -0.003322f, -0.014043f, -0.020041f, -0.003711f, -0.016638f, -0.020805f, -0.005845f, 0.009753f, -0.006525f, -0.016132f, 0.008055f, 0.011700f, 0.018038f, 0.023503f, -0.019133f, 0.007395f, -0.005378f, -0.017412f, 0.006516f, -0.019475f, -0.003668f, -0.031879f, 0.012729f, -0.009413f, 0.004687f, -0.005624f, 0.004994f, -0.034277f, -0.034365f, -0.020676f, -0.008104f, 0.019198f, -0.018509f, 0.036308f, -0.012790f, 0.003763f, -0.003401f, 0.006913f, -0.003331f, -0.025398f, 0.003677f, 0.003172f, 0.006957f, 0.006129f, 0.002976f, 0.010105f, -0.005706f, -0.008576f, 0.000016f, 0.000608f, -0.008561f, 0.004095f, -0.011012f, 0.006443f, 0.003674f, 0.005269f, -0.001632f, 0.000247f, -0.003374f, -0.008257f, -0.006190f, -0.003244f, -0.003849f, 0.005898f, -0.003819f, -0.010012f, 0.003540f, + 0.004653f, -0.001902f, 0.007234f, -0.000596f, -0.001780f, -0.000049f, 0.001929f, -0.003000f, -0.002636f, 0.003698f, 0.005350f, 0.003777f, 0.002017f, -0.007477f, -0.005027f, -0.001622f, -0.005602f, 0.002199f, 0.000894f, -0.000070f, -0.004983f, 0.031777f, 0.002058f, 0.011874f, 0.008615f, 0.003174f, 0.018831f, 0.002376f, -0.025900f, 0.012376f, 0.003938f, 0.011807f, -0.000991f, -0.019522f, 0.027843f, 0.014750f, 0.011550f, -0.002820f, -0.008194f, 0.003352f, -0.001825f, -0.015538f, 0.010121f, 0.006717f, -0.008336f, 0.010896f, 0.017787f, 0.000247f, 0.006817f, 0.017291f, -0.018877f, 0.004348f, -0.006232f, 0.007628f, -0.035677f, 0.010719f, 0.017455f, -0.006268f, 0.004789f, 0.017054f, 0.009442f, 0.000027f, 0.005909f, -0.018212f, 0.004817f, -0.010828f, 0.001000f, 0.004941f, 0.003039f, -0.008467f, 0.034556f, -0.006454f, -0.006319f, -0.008316f, -0.029779f, -0.012463f, -0.018170f, -0.021590f, -0.003902f, 0.029228f, 0.032620f, -0.003515f, 0.010215f, 0.012643f, -0.026883f, -0.009095f, 0.022208f, 0.017828f, -0.010556f, -0.007951f, -0.026472f, -0.009035f, -0.009889f, -0.013231f, -0.014843f, 0.003635f, + -0.027009f, 0.004099f, 0.025757f, 0.035316f, 0.011199f, -0.010898f, -0.000524f, 0.018543f, -0.006416f, -0.013286f, 0.001465f, -0.002058f, -0.005452f, -0.009058f, 0.001492f, -0.001303f, 0.004448f, 0.005238f, 0.003501f, -0.003505f, 0.001870f, 0.002592f, 0.002582f, -0.000933f, -0.004993f, -0.011852f, 0.003482f, -0.001149f, -0.004435f, 0.008216f, 0.002943f, 0.004409f, -0.004627f, 0.006902f, -0.004973f, -0.004451f, -0.005626f, 0.005367f, 0.001397f, 0.003836f, 0.008832f, -0.001221f, -0.004192f, -0.002873f, 0.004552f, 0.001443f, -0.000132f, -0.000270f, 0.001435f, 0.000731f, -0.000251f, -0.002247f, 0.004625f, 0.005346f, 0.007447f, -0.002924f, -0.010066f, 0.006291f, 0.001700f, -0.013404f, -0.019826f, -0.021354f, -0.008491f, -0.020877f, -0.008637f, -0.008467f, 0.000381f, -0.019858f, 0.004499f, 0.008365f, 0.000985f, -0.022664f, 0.007118f, -0.028116f, 0.008765f, 0.015718f, 0.000525f, 0.024424f, 0.000824f, -0.007237f, -0.004366f, 0.016487f, -0.005827f, 0.022686f, 0.008167f, -0.007802f, -0.007656f, 0.004032f, -0.011434f, -0.006192f, 0.000979f, 0.021474f, -0.000585f, 0.011379f, 0.006582f, 0.002004f, + 0.015182f, -0.006677f, -0.013627f, 0.006180f, -0.009710f, -0.004508f, -0.026760f, 0.015244f, -0.009290f, -0.007879f, -0.005282f, -0.029602f, 0.035692f, 0.009299f, -0.004048f, 0.015558f, 0.005249f, 0.007624f, -0.015530f, -0.023538f, -0.026697f, -0.012882f, 0.001605f, -0.027065f, 0.010344f, 0.019806f, -0.030268f, -0.011014f, 0.011396f, -0.013913f, 0.007578f, 0.033992f, 0.001307f, -0.005364f, -0.008777f, 0.007775f, -0.018186f, 0.012176f, 0.006739f, -0.016490f, 0.005690f, 0.011941f, -0.006467f, -0.019546f, -0.016581f, -0.008672f, -0.000378f, 0.005525f, 0.004850f, 0.003824f, -0.003167f, -0.004782f, -0.002181f, 0.004488f, 0.000504f, -0.002638f, -0.010851f, -0.013117f, -0.003351f, 0.001058f, -0.009195f, -0.011214f, -0.007566f, -0.004627f, -0.004050f, -0.009817f, -0.008302f, -0.004477f, -0.005901f, -0.012571f, 0.002516f, 0.012097f, -0.000902f, -0.000968f, -0.004480f, -0.003460f, 0.004295f, -0.004330f, 0.001228f, -0.009873f, 0.000695f, -0.002751f, -0.005062f, 0.000138f, -0.004722f, 0.003287f, 0.005020f, -0.004054f, 0.007421f, -0.004781f, -0.001580f, -0.004946f, -0.000028f, 0.000972f, 0.021754f, 0.053626f, + 0.056697f, 0.016941f, 0.035263f, -0.024177f, -0.024062f, -0.005802f, -0.003369f, 0.001891f, 0.008186f, 0.017885f, 0.032668f, 0.010491f, 0.030257f, 0.003173f, 0.009329f, 0.004317f, -0.008044f, 0.013547f, -0.000100f, 0.005303f, 0.002587f, -0.015456f, -0.001628f, -0.008370f, -0.016299f, -0.010495f, 0.000542f, 0.001481f, -0.021698f, -0.009231f, 0.027982f, 0.019777f, 0.014688f, 0.023274f, -0.014240f, -0.000028f, -0.039966f, 0.001688f, 0.034869f, -0.006933f, -0.006575f, 0.003966f, -0.003397f, 0.026864f, -0.001832f, -0.004704f, 0.021180f, -0.025083f, -0.040006f, -0.016453f, 0.003936f, -0.021886f, 0.016373f, 0.022247f, -0.031422f, -0.012229f, 0.000612f, -0.000796f, -0.045231f, -0.029234f, 0.014969f, 0.006098f, -0.003046f, 0.014467f, -0.019523f, -0.012416f, -0.027775f, 0.006485f, 0.009430f, 0.002126f, 0.002343f, -0.018918f, -0.030643f, 0.025462f, -0.041803f, 0.012116f, -0.015053f, 0.040086f, 0.004616f, 0.016584f, -0.011061f, -0.016141f, 0.012140f, 0.005221f, 0.018521f, -0.017428f, -0.002648f, 0.012021f, -0.000340f, -0.009757f, -0.008414f, -0.009597f, 0.001385f, 0.009186f, 0.010854f, -0.011827f, + -0.004328f, -0.002120f, -0.014924f, -0.005719f, 0.003329f, -0.001926f, 0.001881f, -0.008322f, -0.013015f, -0.002163f, 0.000893f, 0.010384f, 0.003847f, -0.006807f, 0.008766f, 0.001168f, 0.004747f, -0.015176f, 0.003638f, -0.009158f, 0.007678f, 0.001083f, 0.008103f, 0.011774f, 0.004321f, -0.008665f, -0.016212f, 0.005038f, 0.006272f, -0.052489f, -0.037749f, 0.026148f, -0.005445f, 0.047546f, -0.011585f, 0.039143f, -0.031484f, 0.000948f, 0.014079f, -0.003119f, 0.001703f, 0.004598f, -0.002439f, -0.023633f, 0.008305f, 0.008892f, 0.010359f, 0.011778f, -0.007256f, 0.019426f, -0.017639f, -0.013035f, -0.010078f, 0.027324f, -0.015070f, -0.005083f, 0.002462f, -0.000570f, -0.014175f, 0.012184f, -0.015818f, -0.018843f, -0.035508f, 0.003241f, 0.006521f, -0.024123f, -0.011245f, 0.011620f, -0.004873f, 0.006210f, 0.001939f, 0.028052f, 0.001962f, 0.021113f, 0.009425f, 0.000909f, 0.016928f, 0.003844f, 0.005870f, -0.031818f, 0.032779f, 0.011607f, 0.025685f, -0.015603f, 0.006827f, -0.017077f, 0.026646f, 0.020209f, 0.032507f, 0.005182f, -0.008499f, -0.023620f, -0.001457f, 0.004166f, -0.020092f, 0.028560f, + 0.004620f, 0.004442f, 0.030770f, 0.006882f, -0.009200f, -0.012280f, -0.000983f, 0.018283f, 0.022087f, -0.007176f, 0.027541f, -0.032929f, -0.034478f, -0.015098f, 0.008045f, -0.010518f, 0.015072f, -0.003752f, 0.008106f, 0.026364f, -0.001144f, 0.013086f, -0.010946f, -0.010039f, 0.011562f, -0.001016f, 0.018526f, -0.005716f, -0.000082f, -0.005678f, -0.011381f, 0.002314f, -0.006679f, -0.002675f, 0.007663f, 0.002588f, -0.010336f, -0.009517f, 0.005602f, 0.013994f, 0.014578f, -0.001473f, 0.011953f, 0.012909f, -0.018052f, 0.008442f, 0.017186f, 0.013460f, 0.007661f, -0.013533f, -0.016318f, -0.017097f, -0.017152f, -0.017108f, 0.001506f, -0.005978f, -0.002319f, 0.001927f, -0.012515f, 0.008934f, 0.008194f, -0.006491f, 0.009738f, 0.003422f, 0.004655f, -0.011993f, 0.024190f, -0.057049f, -0.002593f, 0.029730f, -0.018988f, -0.006334f, 0.021919f, -0.023743f, -0.048229f, 0.009612f, 0.008223f, 0.007501f, -0.006264f, -0.028508f, 0.007239f, 0.008144f, 0.002194f, 0.015883f, -0.051089f, 0.023510f, -0.011828f, 0.012262f, -0.029083f, 0.023763f, -0.036811f, -0.023488f, 0.014380f, -0.009596f, -0.004222f, -0.027960f, + 0.022099f, 0.029065f, 0.000003f, 0.003313f, -0.013251f, 0.043571f, 0.010877f, 0.011951f, -0.007798f, -0.037525f, -0.007984f, 0.020890f, -0.003671f, 0.031216f, 0.000384f, -0.011150f, 0.007635f, -0.002044f, 0.019645f, -0.037090f, -0.004352f, -0.028408f, 0.031029f, -0.011346f, 0.010512f, -0.000705f, -0.000933f, -0.033573f, -0.011675f, 0.029817f, 0.009654f, 0.002837f, -0.008739f, 0.001069f, 0.003987f, -0.043042f, -0.044566f, 0.047886f, -0.020947f, -0.051558f, 0.021296f, 0.024693f, -0.041448f, -0.054302f, -0.037815f, -0.036310f, 0.006747f, 0.014750f, -0.004303f, -0.034877f, -0.000869f, -0.018547f, -0.008571f, -0.025203f, -0.001134f, 0.002833f, 0.002858f, -0.004805f, 0.024422f, -0.012808f, 0.009800f, -0.010822f, -0.000226f, 0.006916f, -0.005807f, -0.000627f, -0.013916f, 0.019158f, -0.004042f, 0.006945f, -0.010089f, -0.014900f, -0.002784f, 0.007740f, 0.008846f, 0.003019f, -0.014453f, 0.009183f, -0.001715f, -0.011544f, 0.012091f, -0.017663f, -0.003162f, -0.010760f, 0.018579f, -0.007541f, -0.019636f, 0.009198f, -0.007489f, -0.008208f, -0.026216f, -0.000929f, 0.006488f, 0.022889f, 0.009676f, -0.012710f, + -0.006250f, 0.002744f, -0.003050f, -0.006494f, 0.004677f, -0.000464f, -0.004553f, -0.004434f, -0.001183f, 0.022822f, -0.031766f, -0.016974f, -0.033193f, -0.002556f, 0.006202f, -0.043461f, 0.006525f, -0.021016f, 0.060580f, 0.003682f, -0.055498f, -0.012169f, 0.026124f, 0.016768f, 0.012463f, 0.028163f, 0.027291f, -0.039204f, -0.010675f, -0.014877f, 0.036647f, -0.012605f, 0.042876f, 0.000417f, -0.025659f, -0.019509f, -0.039406f, -0.044044f, 0.002059f, 0.005665f, -0.007875f, -0.022458f, -0.010374f, 0.003490f, 0.006446f, 0.015778f, -0.022397f, 0.011561f, -0.026235f, -0.029616f, 0.005252f, -0.005918f, -0.008661f, -0.030900f, -0.030435f, -0.013823f, -0.009849f, 0.043195f, 0.003294f, 0.014868f, 0.023321f, -0.000204f, 0.052992f, 0.022286f, -0.018551f, 0.003314f, 0.026950f, -0.010244f, 0.034296f, -0.008640f, 0.003699f, 0.002979f, -0.048175f, -0.048029f, 0.006479f, 0.034540f, 0.000019f, -0.010021f, -0.053823f, 0.003991f, 0.017428f, 0.011976f, -0.018948f, -0.014265f, -0.011286f, 0.007069f, -0.023670f, 0.056983f, 0.031082f, 0.035166f, 0.006134f, -0.039244f, 0.013750f, 0.018747f, 0.055435f, 0.013531f, + 0.005005f, 0.023135f, 0.008898f, -0.008589f, -0.000226f, 0.017861f, -0.002344f, 0.002930f, 0.004852f, -0.013681f, -0.010739f, 0.017383f, -0.000265f, -0.013003f, 0.016946f, -0.010397f, -0.004812f, -0.007833f, -0.008902f, 0.016297f, -0.010898f, -0.003978f, 0.007589f, -0.016378f, 0.006379f, -0.000980f, -0.010430f, 0.021294f, -0.008224f, 0.000559f, -0.027199f, 0.016714f, -0.008826f, -0.006342f, -0.017802f, -0.023679f, 0.003092f, -0.009225f, 0.016312f, -0.000012f, 0.009378f, 0.007056f, -0.000355f, -0.009557f, -0.000458f, -0.026399f, -0.024087f, 0.050858f, -0.015778f, -0.018823f, -0.002710f, -0.014006f, -0.034658f, 0.000753f, 0.023923f, -0.059409f, -0.001061f, 0.015431f, 0.018920f, -0.020253f, 0.013417f, -0.034012f, 0.002557f, -0.008771f, 0.010581f, -0.030463f, 0.018899f, -0.051878f, 0.008429f, 0.001432f, 0.029313f, 0.027654f, 0.013675f, -0.019375f, 0.021512f, -0.006317f, 0.024036f, -0.026271f, 0.004054f, 0.030766f, 0.024283f, -0.014445f, 0.004904f, 0.000772f, -0.006931f, 0.014923f, -0.005920f, -0.017916f, -0.020085f, 0.014227f, -0.036191f, 0.023819f, 0.005433f, -0.038683f, 0.036301f, 0.034870f, + 0.032675f, 0.011831f, -0.017204f, 0.042201f, 0.004918f, 0.018125f, -0.026084f, -0.022511f, -0.025017f, 0.007697f, 0.009457f, 0.015107f, -0.035038f, 0.003363f, 0.025446f, -0.066941f, 0.002311f, -0.022003f, 0.041733f, 0.027020f, 0.020845f, -0.005953f, 0.027578f, -0.026277f, -0.001615f, -0.018310f, -0.040485f, -0.001730f, -0.037309f, -0.031045f, 0.017883f, 0.049401f, -0.046743f, -0.011075f, -0.008771f, 0.049590f, -0.012562f, 0.021660f, -0.014530f, -0.008769f, -0.002210f, 0.017502f, -0.010697f, -0.004394f, 0.001108f, 0.011898f, 0.008478f, 0.006221f, -0.006960f, 0.001741f, 0.004831f, 0.024511f, -0.019820f, 0.020437f, -0.004838f, 0.014924f, -0.000352f, 0.003899f, 0.004838f, 0.009354f, -0.013273f, -0.003017f, -0.002906f, -0.016102f, -0.014718f, -0.014305f, 0.009415f, 0.007799f, -0.003360f, -0.006495f, -0.008695f, -0.011323f, -0.007402f, 0.000797f, -0.005455f, -0.000262f, 0.014322f, -0.000497f, -0.027600f, 0.012566f, -0.016368f, -0.002581f, 0.044219f, 0.009597f, 0.022390f, -0.063714f, 0.029534f, -0.035613f, 0.048237f, -0.004746f, 0.018755f, 0.036654f, -0.039525f, 0.070493f, 0.050453f, 0.038191f, + -0.017368f, 0.010394f, 0.048193f, -0.011972f, -0.015605f, -0.011112f, -0.002641f, -0.036313f, 0.009552f, -0.019244f, -0.044349f, 0.042998f, 0.014050f, 0.011945f, 0.005241f, 0.010107f, 0.016450f, 0.045261f, 0.009334f, -0.027925f, -0.002547f, -0.028983f, 0.005623f, 0.004412f, -0.051460f, -0.001982f, 0.027775f, 0.002240f, -0.003836f, -0.015452f, 0.054371f, 0.011450f, 0.023056f, 0.012222f, -0.029618f, -0.020823f, -0.016269f, 0.034109f, 0.019829f, -0.006568f, 0.020383f, -0.002804f, -0.037332f, 0.036265f, 0.004198f, 0.041539f, 0.004379f, 0.004479f, 0.000625f, -0.054608f, 0.007278f, 0.001688f, 0.005869f, 0.034330f, -0.013685f, 0.053893f, -0.081748f, -0.014244f, 0.060604f, -0.024389f, 0.019905f, -0.027524f, -0.043622f, -0.034722f, 0.024970f, -0.023654f, 0.023263f, -0.037319f, -0.008268f, 0.006579f, -0.009480f, -0.014514f, -0.004985f, -0.004163f, 0.016155f, 0.038038f, 0.003751f, 0.022684f, -0.007572f, -0.003495f, 0.027306f, -0.003732f, -0.008119f, 0.007909f, -0.014030f, 0.012538f, 0.023735f, -0.015737f, -0.002717f, -0.005950f, 0.004128f, 0.004812f, 0.011117f, 0.042982f, -0.008021f, 0.015352f, + 0.000494f, 0.010583f, 0.015230f, 0.008122f, 0.002116f, 0.024098f, 0.025402f, -0.006815f, -0.003900f, 0.010977f, 0.005282f, 0.009560f, -0.033349f, -0.002352f, 0.031096f, -0.006637f, 0.006216f, 0.012732f, -0.002060f, 0.032399f, 0.011428f, -0.066026f, -0.078991f, -0.006983f, -0.037021f, 0.005011f, 0.022497f, -0.031617f, 0.009234f, -0.048291f, 0.021015f, -0.026600f, -0.132016f, -0.008505f, 0.080555f, -0.034723f, -0.014916f, 0.080927f, -0.018977f, 0.004361f, 0.096977f, -0.023205f, 0.021459f, 0.009065f, -0.014140f, 0.078079f, -0.062849f, -0.008120f, -0.001692f, -0.011064f, -0.012625f, -0.012874f, -0.001532f, 0.025430f, -0.014279f, -0.042607f, 0.000519f, 0.000851f, 0.012631f, 0.015533f, 0.002863f, 0.035064f, -0.001295f, 0.016136f, -0.009521f, -0.042273f, 0.029522f, -0.005190f, -0.043465f, 0.001671f, 0.025166f, 0.076911f, 0.038972f, 0.064657f, 0.001430f, 0.015922f, 0.030936f, 0.007296f, -0.003697f, 0.060446f, -0.003106f, -0.023543f, 0.070839f, 0.012370f, 0.012592f, 0.000518f, -0.009894f, 0.040438f, 0.000078f, -0.023502f, -0.026452f, -0.005482f, -0.005157f, 0.061227f, -0.041423f, 0.005380f, + 0.007982f, -0.010863f, 0.071990f, 0.000622f, -0.045876f, 0.007743f, 0.023602f, -0.033753f, -0.001504f, 0.034448f, 0.028522f, -0.017340f, 0.002855f, -0.019598f, 0.016715f, -0.005254f, 0.002411f, -0.019282f, 0.018109f, 0.000276f, -0.001820f, -0.028037f, 0.011777f, 0.009647f, -0.018149f, 0.001499f, 0.006815f, -0.009400f, -0.006068f, 0.021768f, 0.003571f, 0.012176f, -0.007784f, 0.006447f, 0.037794f, -0.034043f, -0.015357f, -0.011098f, 0.040865f, 0.015262f, 0.021741f, -0.024444f, -0.022212f, -0.009000f, -0.002461f, -0.029656f, -0.033209f, 0.040275f, 0.016475f, -0.023377f, -0.021670f, -0.013241f, 0.000050f, -0.023162f, -0.020177f, 0.000530f, 0.006512f, 0.015464f, -0.003603f, -0.007206f, 0.003955f, 0.044871f, 0.036233f, -0.074052f, -0.036167f, 0.056851f, -0.010450f, -0.055515f, -0.000487f, 0.001096f, 0.020112f, 0.060115f, 0.053531f, -0.033015f, 0.009922f, -0.007547f, 0.000488f, -0.000634f, -0.034639f, 0.052124f, -0.015488f, -0.034312f, 0.012191f, -0.024661f, 0.029670f, 0.002501f, 0.042188f, -0.013099f, -0.040011f, -0.036273f, 0.031964f, -0.015493f, 0.041611f, -0.011285f, 0.026954f, -0.027480f, + -0.021272f, -0.013133f, 0.002980f, -0.034468f, 0.008420f, 0.001691f, 0.000559f, 0.033445f, -0.000394f, 0.011086f, -0.023330f, 0.016511f, -0.036817f, 0.039270f, -0.035420f, 0.023286f, 0.011894f, 0.032987f, -0.055432f, 0.001754f, 0.004653f, -0.016891f, -0.040058f, -0.067979f, -0.011368f, -0.058031f, -0.022277f, -0.046470f, -0.021600f, -0.084810f, -0.026331f, 0.038267f, 0.048629f, 0.026332f, 0.028302f, -0.004727f, 0.030750f, -0.060472f, -0.013811f, 0.009206f, 0.038944f, 0.010595f, -0.082983f, -0.003430f, -0.036491f, -0.024438f, 0.096986f, 0.065040f, -0.046011f, -0.018880f, -0.032315f, 0.010653f, -0.085520f, 0.005094f, 0.017826f, -0.024602f, -0.025386f, 0.015391f, 0.004980f, 0.000663f, -0.016433f, -0.014576f, -0.014076f, -0.014416f, 0.026674f, 0.024323f, -0.001762f, -0.007022f, -0.026332f, -0.030369f, -0.006431f, -0.007731f, 0.010160f, 0.025939f, -0.050981f, -0.004030f, 0.025489f, -0.000273f, 0.032622f, -0.011562f, -0.031277f, 0.016714f, 0.035261f, 0.017658f, -0.021214f, 0.002421f, 0.032629f, -0.041751f, -0.029638f, 0.054950f, 0.003005f, -0.002080f, -0.005641f, 0.008548f, 0.012671f, 0.016553f, + -0.006976f, -0.013627f, -0.097628f, 0.028567f, 0.015205f, -0.051275f, 0.020149f, 0.019152f, -0.037379f, -0.028542f, 0.043719f, 0.005523f, 0.023233f, -0.011706f, 0.028859f, -0.009142f, -0.004693f, 0.022903f, 0.010921f, 0.007568f, 0.000517f, -0.015330f, -0.026603f, -0.016058f, 0.041327f, -0.014524f, -0.036064f, 0.061193f, 0.037636f, 0.004928f, 0.027761f, 0.008372f, -0.031693f, -0.093219f, 0.038094f, -0.003009f, -0.050560f, 0.042448f, -0.004612f, -0.067909f, -0.057352f, -0.029623f, 0.044517f, 0.018050f, 0.046146f, 0.058459f, 0.017286f, -0.047003f, 0.014780f, 0.017098f, -0.060170f, -0.009542f, 0.033692f, -0.018585f, -0.065553f, -0.049464f, -0.079879f, -0.050670f, -0.011664f, 0.050570f, 0.072820f, 0.035339f, -0.004959f, 0.050430f, -0.012671f, -0.122968f, -0.097795f, 0.021664f, -0.049332f, -0.058160f, 0.083564f, 0.011296f, -0.112687f, -0.086767f, 0.029616f, 0.005466f, 0.019169f, 0.042140f, 0.100728f, 0.058114f, -0.008549f, 0.112564f, 0.035736f, -0.117462f, 0.001004f, -0.024778f, 0.060853f, 0.018631f, -0.038690f, 0.019280f, -0.029045f, -0.016861f, -0.025265f, 0.038676f, -0.007091f, 0.028396f, + 0.023489f, 0.030734f, -0.006778f, -0.029981f, -0.009859f, 0.021376f, -0.013090f, 0.018061f, 0.011362f, 0.013165f, -0.026377f, 0.003675f, 0.010704f, 0.001073f, 0.047485f, -0.001063f, 0.021113f, 0.005242f, -0.007829f, 0.025967f, 0.006147f, -0.003154f, 0.028241f, -0.012838f, -0.004274f, 0.017943f, 0.007124f, -0.001977f, -0.011411f, -0.015266f, 0.001849f, -0.017614f, -0.013620f, 0.010645f, 0.013608f, 0.092404f, 0.089382f, -0.027976f, 0.031039f, -0.036510f, 0.022299f, 0.001447f, 0.012849f, -0.043547f, 0.003360f, -0.037163f, -0.033484f, 0.000590f, -0.077203f, 0.002179f, -0.032925f, 0.008873f, 0.022547f, -0.000306f, 0.026139f, -0.037590f, 0.057311f, -0.028088f, -0.001155f, 0.040035f, -0.037543f, 0.014936f, 0.028530f, 0.035564f, 0.004931f, 0.013059f, 0.008575f, -0.055027f, -0.030973f, -0.008583f, 0.008009f, 0.008922f, -0.008407f, 0.037094f, -0.012019f, -0.000118f, -0.007188f, -0.015504f, 0.012802f, 0.007709f, -0.043978f, 0.013296f, -0.035382f, 0.010046f, -0.084743f, -0.003687f, -0.002305f, 0.000222f, 0.034332f, -0.013522f, -0.031025f, -0.013365f, 0.031521f, 0.000305f, -0.081919f, 0.114748f, + -0.010197f, -0.021461f, 0.024716f, -0.004584f, -0.017028f, -0.021028f, -0.022971f, -0.024105f, 0.078224f, -0.029924f, -0.045634f, 0.039274f, 0.003595f, -0.061493f, -0.014807f, 0.026272f, 0.020383f, -0.020007f, 0.042099f, -0.007061f, -0.011804f, 0.039524f, -0.029010f, -0.026070f, 0.049282f, -0.021507f, -0.008022f, -0.002305f, 0.020772f, 0.010525f, -0.000708f, -0.003089f, 0.001036f, 0.009749f, -0.010358f, -0.000387f, 0.009503f, 0.010666f, 0.012108f, -0.029984f, 0.007646f, 0.015693f, -0.029713f, 0.002867f, 0.006001f, -0.004877f, -0.012134f, 0.012290f, 0.003207f, -0.010309f, 0.001532f, -0.000649f, -0.005156f, -0.036844f, 0.020962f, -0.021658f, 0.006494f, 0.006657f, -0.033840f, -0.001523f, 0.001472f, 0.000148f, -0.000652f, -0.011023f, -0.001836f, 0.009888f, -0.001545f, -0.072586f, -0.107567f, -0.103111f, 0.228437f, 0.189876f, 0.215850f, 0.488305f, 0.127567f, -0.122178f, 0.038432f, -0.391412f, -0.415290f, -0.102628f, -0.261056f, -0.201625f, 0.123281f, -0.064041f, 0.025584f, 0.311162f, 0.154253f, 0.230674f, 0.442700f, 0.295266f, 0.077032f, 0.064306f, -0.130653f, -0.403059f, -0.308189f, -0.235682f, + -0.476458f, -0.192643f, 0.011301f, -0.084223f, -0.038068f, 0.241059f, 0.063773f, 0.032459f, 0.298323f, 0.037066f, 0.071250f, 0.424080f, 0.311577f, 0.197450f, 0.400716f, 0.199757f, -0.070494f, -0.005988f, -0.127014f, -0.624376f, -0.545060f, -0.440241f, -0.684428f, -0.521333f, -0.184891f, -0.246963f, 0.055539f, 0.475215f, 0.424202f, 0.587394f, 0.741393f, 0.551785f, 0.430169f, 0.418602f, 0.231369f, -0.078447f, -0.149510f, -0.340607f, -0.486475f, -0.477657f, -0.414102f, -0.474187f, -0.485424f, -0.390214f, -0.218500f, -0.158348f, 0.058520f, 0.371539f, 0.535607f, 0.764897f, 0.860173f, 0.513460f, 0.124230f, -0.073992f, -0.519084f, -0.493899f, -0.376592f, -0.292721f, -0.109399f, 0.054255f, 0.039877f, 0.052168f, 0.065318f, 0.030170f, 0.076996f, 0.108601f, 0.080243f, 0.131240f, 0.074065f, -0.034757f, -0.042350f, -0.117770f, -0.214542f, -0.059716f, -0.068114f, -0.078299f, 0.065425f, 0.055980f, -0.074059f, -0.094941f, -0.175354f, -0.285276f, -0.120947f, 0.159996f, 0.273548f, 0.532502f, 0.642740f, 0.436360f, 0.269884f, 0.070656f, -0.244208f, -0.356191f, -0.402866f, -0.470650f, -0.442619f, -0.340352f, + -0.276505f, -0.229417f, -0.140510f, -0.037888f, 0.114358f, 0.404628f, 0.566067f, 0.501938f, 0.359618f, 0.220305f, 0.044583f, -0.092457f, -0.138875f, -0.175045f, -0.126414f, -0.038056f, -0.011547f, -0.041284f, -0.064633f, -0.100537f, -0.157002f, -0.202540f, -0.196351f, -0.198117f, -0.120746f, 0.005950f, 0.056511f, 0.112177f, 0.147845f, 0.132421f, 0.076330f, 0.028348f, 0.008473f, 0.002222f, 0.001551f}, + {0.016671f, -0.002219f, 0.001353f, 0.013061f, -0.001661f, -0.000641f, -0.003788f, 0.014250f, 0.000860f, 0.006911f, 0.004244f, 0.004169f, -0.005871f, 0.002927f, -0.009106f, -0.001030f, 0.007097f, 0.001398f, 0.004164f, 0.006626f, -0.011252f, -0.007911f, 0.002700f, -0.000600f, 0.008381f, 0.005052f, -0.000418f, -0.004684f, -0.002906f, -0.005786f, -0.000900f, -0.000810f, -0.000848f, 0.001547f, 0.002200f, -0.005043f, 0.008396f, -0.001973f, -0.001296f, 0.002819f, -0.010675f, -0.002514f, 0.004635f, 0.001587f, 0.010556f, -0.000089f, -0.000762f, 0.002010f, 0.000728f, 0.004339f, 0.007310f, 0.009233f, -0.000529f, -0.001010f, 0.000175f, -0.005394f, -0.006772f, 0.003689f, 0.006061f, -0.004305f, -0.004072f, -0.002810f, 0.007726f, 0.004492f, -0.001059f, 0.001147f, -0.009102f, -0.002680f, 0.004736f, 0.003867f, 0.006735f, -0.009848f, 0.002224f, 0.003644f, -0.002041f, 0.006845f, -0.000445f, 0.005958f, 0.002863f, 0.001874f, 0.007633f, 0.003727f, 0.001924f, -0.000001f, 0.000896f, -0.001884f, 0.000636f, 0.000997f, -0.000608f, -0.002778f, 0.001334f, 0.001255f, -0.002016f, -0.000348f, -0.001364f, 0.001351f, + 0.002186f, 0.000021f, -0.000292f, -0.000192f, -0.002048f, 0.000930f, -0.000733f, 0.001622f, 0.000784f, 0.000449f, 0.000346f, -0.000981f, 0.000534f, 0.000178f, 0.000850f, -0.001690f, -0.000791f, -0.000431f, 0.000200f, 0.021638f, 0.006032f, -0.005027f, 0.011119f, -0.005432f, 0.011572f, -0.003882f, -0.005186f, 0.005802f, 0.010827f, -0.000382f, -0.005259f, 0.002825f, 0.002326f, -0.000490f, -0.015259f, 0.003544f, 0.004558f, 0.001184f, 0.009642f, 0.012843f, 0.006988f, 0.012648f, 0.008700f, 0.007692f, -0.001990f, 0.008548f, 0.004212f, -0.006548f, 0.002515f, 0.003931f, -0.008308f, -0.010683f, -0.001557f, 0.004164f, 0.000247f, -0.003874f, -0.005067f, -0.005045f, -0.002404f, 0.005717f, 0.011600f, 0.009728f, 0.003769f, 0.007468f, -0.012004f, 0.000740f, -0.002995f, 0.000096f, -0.013788f, 0.005127f, -0.001241f, -0.003291f, -0.000445f, -0.003784f, -0.006765f, -0.004836f, 0.004965f, 0.001152f, 0.003833f, -0.005071f, 0.009569f, 0.002425f, -0.010863f, 0.004523f, 0.001496f, 0.003043f, 0.006114f, 0.001819f, 0.011133f, -0.003519f, 0.001318f, -0.012875f, 0.002559f, 0.001244f, 0.000481f, 0.000309f, + -0.002311f, 0.009166f, -0.002686f, -0.004250f, 0.007066f, -0.007189f, -0.003394f, -0.002961f, -0.001219f, -0.003343f, 0.002444f, 0.000630f, 0.001335f, -0.000076f, -0.000193f, 0.000139f, -0.001188f, 0.000812f, 0.001334f, -0.000441f, -0.000434f, -0.000036f, -0.002251f, -0.003858f, 0.001566f, 0.000506f, -0.002933f, -0.000374f, -0.000203f, -0.000634f, -0.003577f, 0.000990f, 0.000122f, -0.000079f, 0.000396f, 0.000690f, 0.000546f, -0.001364f, 0.000091f, -0.002513f, 0.001206f, -0.004521f, -0.004291f, -0.001559f, 0.004155f, -0.007557f, 0.002292f, -0.014800f, 0.002873f, 0.002643f, -0.001589f, 0.010357f, 0.000784f, -0.001294f, 0.001062f, 0.005426f, -0.008877f, 0.001159f, 0.002873f, 0.005619f, -0.012678f, -0.006606f, -0.004711f, 0.004568f, 0.002037f, -0.004140f, -0.012813f, 0.003012f, -0.012745f, -0.000911f, 0.005223f, -0.002506f, 0.004006f, -0.002345f, 0.008783f, 0.012729f, 0.006908f, -0.006774f, 0.001364f, 0.009618f, 0.006134f, -0.006145f, 0.005176f, 0.001386f, -0.009907f, 0.003403f, 0.013896f, 0.006341f, 0.004738f, 0.015247f, 0.001496f, -0.005954f, -0.011643f, -0.000635f, -0.006484f, -0.008039f, + -0.003634f, 0.008330f, -0.007904f, 0.002679f, -0.004670f, -0.004600f, 0.009968f, -0.001411f, 0.001752f, 0.007731f, 0.010817f, -0.004871f, -0.009702f, 0.012377f, 0.009710f, 0.006000f, 0.000702f, -0.007631f, 0.001321f, 0.009756f, -0.009894f, 0.002930f, -0.006405f, -0.000338f, 0.006236f, -0.005857f, -0.000199f, -0.011161f, -0.002790f, -0.001092f, 0.001801f, -0.000708f, -0.004054f, -0.000619f, 0.002236f, -0.003381f, -0.000719f, 0.001392f, 0.001390f, 0.000827f, 0.001036f, -0.000290f, -0.000679f, -0.004477f, 0.002469f, -0.000361f, 0.002540f, -0.001808f, -0.002740f, 0.000894f, 0.002417f, -0.001625f, 0.002151f, -0.000467f, -0.000002f, -0.000304f, -0.000319f, 0.002300f, -0.001279f, 0.000819f, -0.001292f, -0.029090f, -0.010609f, -0.004503f, 0.015930f, -0.006062f, -0.002361f, -0.009422f, -0.007920f, -0.001384f, -0.020930f, 0.011723f, 0.003913f, -0.000620f, -0.007712f, 0.011543f, -0.003224f, 0.005851f, -0.004652f, 0.003688f, 0.007409f, -0.009237f, 0.001008f, 0.010149f, 0.005783f, 0.004076f, 0.010913f, 0.009709f, -0.006067f, -0.007803f, -0.009673f, -0.000179f, -0.012729f, 0.003031f, -0.016824f, -0.003245f, + 0.012461f, 0.006516f, -0.004236f, -0.001328f, -0.012645f, 0.005749f, -0.005382f, 0.011170f, -0.006399f, -0.011492f, -0.002314f, -0.004744f, -0.009386f, 0.003642f, -0.002115f, -0.006015f, -0.006071f, -0.020345f, 0.002827f, -0.006109f, -0.015021f, -0.004019f, 0.009342f, 0.004757f, -0.007744f, 0.006430f, 0.008331f, 0.007989f, 0.003023f, -0.010403f, -0.001680f, -0.002315f, 0.007255f, -0.007312f, -0.002753f, 0.003787f, 0.003909f, -0.011384f, -0.013496f, -0.024343f, -0.004106f, -0.014140f, 0.004712f, -0.000550f, -0.003317f, 0.007155f, -0.001451f, -0.003259f, 0.003183f, 0.004880f, 0.004754f, 0.003647f, 0.008537f, -0.003618f, -0.002915f, -0.002289f, 0.001312f, 0.000427f, -0.001858f, 0.002336f, 0.003432f, -0.000747f, 0.000861f, -0.001483f, -0.001853f, -0.000358f, -0.001177f, 0.000352f, 0.000813f, 0.000102f, -0.002059f, 0.000333f, -0.001362f, -0.000550f, 0.001295f, 0.002733f, -0.001133f, 0.003274f, 0.004069f, 0.000630f, -0.001070f, -0.003460f, -0.000612f, 0.002332f, 0.001638f, -0.025258f, -0.010152f, -0.004498f, -0.007527f, 0.008638f, 0.011214f, 0.010637f, -0.021155f, -0.015739f, 0.006036f, 0.025757f, + 0.015173f, 0.000014f, 0.003623f, 0.007355f, -0.009289f, 0.006128f, -0.008616f, 0.006213f, 0.009097f, 0.001432f, 0.007291f, 0.002308f, -0.000558f, 0.003824f, 0.002212f, -0.006881f, -0.008783f, 0.012087f, 0.004847f, -0.008801f, 0.008597f, -0.004796f, -0.000941f, 0.020763f, -0.009956f, 0.011758f, 0.023150f, 0.009476f, -0.001376f, 0.000900f, -0.008420f, 0.010853f, -0.011134f, -0.006055f, -0.018680f, 0.003512f, 0.014310f, -0.000360f, -0.013240f, -0.004700f, -0.018749f, -0.009495f, -0.003528f, -0.026592f, -0.014526f, -0.002635f, 0.002760f, -0.011649f, 0.005839f, -0.003095f, -0.009251f, 0.009941f, 0.029329f, 0.002720f, 0.014919f, 0.010149f, 0.008746f, -0.009322f, 0.003849f, -0.015873f, 0.001628f, 0.004537f, 0.003489f, -0.006182f, 0.000077f, -0.016122f, -0.005675f, -0.005675f, -0.001212f, 0.007794f, 0.008316f, -0.000407f, 0.003195f, 0.004527f, -0.002373f, -0.001795f, -0.001554f, 0.001469f, 0.000116f, 0.001088f, 0.000808f, 0.002529f, -0.001435f, -0.000131f, -0.003935f, -0.000523f, -0.000674f, 0.002710f, 0.001503f, -0.001745f, -0.002407f, -0.002303f, -0.002266f, -0.000792f, -0.002767f, 0.000908f, + 0.004880f, -0.003982f, -0.000589f, 0.001636f, 0.002740f, 0.039319f, 0.025151f, -0.013770f, 0.005253f, 0.012530f, -0.005063f, 0.007092f, -0.002287f, 0.011675f, 0.006126f, 0.003610f, 0.010943f, 0.005898f, 0.005505f, -0.003542f, -0.026254f, 0.012470f, -0.004322f, -0.006205f, 0.020862f, 0.012613f, 0.007327f, 0.009350f, 0.007262f, 0.005074f, -0.003867f, 0.002875f, 0.001020f, -0.006957f, 0.005646f, 0.008756f, -0.014733f, 0.002665f, -0.009473f, 0.006943f, 0.008434f, -0.023503f, -0.000206f, -0.027934f, 0.000654f, 0.003274f, 0.002531f, 0.007380f, 0.019102f, -0.002508f, -0.009634f, -0.005002f, -0.005091f, -0.007490f, 0.005623f, 0.005672f, 0.002006f, -0.003275f, -0.003229f, 0.018197f, -0.005929f, -0.003878f, -0.009870f, 0.016140f, -0.002310f, 0.013531f, -0.006292f, 0.014473f, -0.013962f, -0.029918f, -0.008663f, 0.001657f, 0.006185f, 0.009841f, -0.009835f, -0.007660f, 0.004243f, 0.002473f, -0.004469f, -0.007959f, 0.018747f, -0.007481f, 0.017842f, 0.004458f, 0.012656f, 0.004705f, 0.009266f, 0.007456f, -0.003029f, -0.001419f, 0.003742f, -0.000745f, 0.009807f, 0.000028f, -0.003028f, 0.000657f, + -0.010641f, -0.002366f, -0.002337f, 0.000524f, -0.003448f, -0.001613f, -0.001053f, -0.000488f, -0.001083f, -0.005901f, -0.004436f, 0.001143f, 0.000555f, -0.006599f, -0.000220f, 0.000699f, 0.001100f, 0.002355f, 0.001266f, 0.006015f, 0.000441f, -0.002359f, -0.000092f, -0.001099f, -0.002739f, -0.003673f, -0.001192f, 0.018428f, -0.007005f, -0.012347f, -0.000511f, 0.001889f, -0.017507f, -0.013797f, -0.004328f, 0.004708f, -0.002574f, 0.022728f, 0.013724f, 0.000528f, 0.021809f, 0.007774f, 0.006405f, -0.018741f, 0.017538f, -0.003360f, -0.004365f, -0.015826f, -0.007085f, 0.013881f, 0.013819f, -0.004028f, 0.009170f, -0.019023f, -0.002644f, 0.012611f, 0.009586f, -0.007180f, -0.013427f, -0.007656f, -0.008296f, -0.010480f, -0.008622f, 0.001953f, -0.014121f, -0.001484f, 0.019524f, -0.009523f, 0.002255f, -0.000866f, -0.004495f, 0.007481f, -0.003118f, 0.012623f, 0.000010f, 0.017854f, -0.004629f, -0.011479f, 0.006496f, -0.009103f, -0.008891f, -0.009107f, -0.025562f, 0.002814f, 0.010556f, 0.015055f, 0.010943f, 0.019830f, -0.002074f, -0.007850f, 0.011526f, -0.014370f, 0.003274f, 0.002026f, -0.002166f, 0.012779f, + 0.012051f, -0.003289f, -0.015468f, 0.002905f, -0.008010f, -0.014880f, -0.013660f, 0.007320f, 0.013150f, 0.008078f, -0.028589f, 0.006241f, 0.002993f, -0.001618f, 0.013415f, 0.007068f, 0.010966f, 0.003965f, -0.001124f, 0.014251f, 0.001887f, 0.006358f, 0.005194f, 0.000929f, -0.006553f, 0.000841f, -0.003683f, -0.008172f, 0.001448f, 0.002190f, 0.003707f, -0.001181f, 0.000957f, 0.000659f, 0.000630f, 0.002594f, 0.001769f, 0.001712f, -0.000377f, -0.005267f, 0.003474f, -0.002280f, -0.002338f, -0.002144f, -0.003660f, 0.006297f, 0.007326f, 0.006028f, 0.002449f, 0.000425f, 0.000987f, -0.001785f, 0.004795f, -0.022483f, -0.013162f, 0.002375f, -0.012843f, -0.033279f, 0.025222f, -0.000551f, -0.001653f, 0.003197f, 0.001998f, -0.022009f, 0.015401f, -0.022945f, 0.002053f, 0.010504f, -0.003011f, 0.003833f, 0.003712f, -0.024683f, -0.008303f, -0.010990f, -0.002274f, 0.005084f, -0.008102f, -0.005132f, -0.000988f, -0.001431f, 0.002278f, 0.010358f, 0.005550f, 0.022248f, -0.008047f, 0.030530f, -0.002118f, 0.000861f, -0.019926f, -0.002925f, 0.014843f, -0.002907f, -0.030656f, 0.012427f, 0.014281f, -0.009086f, + 0.007565f, -0.011416f, 0.021279f, 0.011809f, -0.000584f, -0.001203f, -0.013623f, -0.008653f, -0.014910f, 0.014037f, 0.013819f, 0.006124f, 0.001594f, 0.006358f, -0.012016f, -0.031595f, -0.011556f, 0.011164f, 0.004884f, -0.023410f, 0.000614f, 0.002852f, 0.003236f, -0.011182f, 0.008099f, 0.016767f, 0.008634f, 0.000439f, 0.006775f, 0.011574f, -0.006460f, 0.017191f, 0.000287f, -0.000344f, -0.016916f, -0.021511f, 0.013911f, -0.006472f, 0.006906f, 0.007152f, -0.001169f, -0.004503f, -0.004733f, -0.003481f, 0.002205f, -0.005180f, 0.007010f, 0.001774f, -0.001955f, 0.001943f, -0.002512f, 0.000445f, -0.008860f, 0.002386f, 0.000663f, -0.001362f, -0.004956f, 0.001838f, -0.004393f, -0.000048f, 0.001362f, -0.000704f, -0.002901f, 0.000152f, -0.002914f, 0.010898f, 0.008070f, 0.003255f, -0.001312f, -0.000689f, -0.003161f, 0.000295f, -0.001297f, 0.007069f, -0.002382f, -0.000667f, 0.006429f, 0.001781f, 0.002628f, 0.005034f, -0.003449f, -0.001541f, 0.004767f, 0.003212f, -0.001484f, -0.000480f, -0.035002f, 0.018790f, -0.004715f, 0.006868f, -0.010312f, -0.005753f, 0.014823f, -0.017151f, 0.016660f, -0.010406f, + -0.019834f, 0.008930f, -0.010657f, 0.042341f, 0.006369f, -0.014924f, -0.020553f, -0.003796f, -0.025505f, -0.011846f, -0.027476f, -0.001721f, 0.018470f, -0.013157f, 0.011416f, 0.018479f, -0.017168f, -0.000049f, -0.020049f, 0.011169f, 0.004023f, -0.000852f, 0.011903f, -0.012654f, -0.017977f, -0.015348f, 0.001096f, 0.003279f, 0.015197f, -0.021934f, 0.015578f, 0.002916f, -0.032164f, -0.017850f, -0.025952f, -0.010807f, 0.009928f, -0.008896f, -0.008630f, -0.049621f, -0.000985f, -0.011002f, -0.004486f, -0.031881f, -0.011007f, -0.004338f, 0.002504f, 0.025745f, 0.023637f, 0.019820f, 0.011531f, 0.024809f, -0.026817f, 0.020791f, 0.002954f, 0.009617f, 0.007083f, -0.019335f, 0.029886f, 0.018353f, 0.011814f, -0.013264f, -0.017571f, -0.012828f, 0.017368f, 0.001844f, 0.000120f, 0.009233f, 0.004573f, 0.009715f, -0.008644f, 0.026070f, 0.013821f, -0.002965f, -0.004235f, 0.005729f, 0.005338f, 0.003046f, -0.001525f, -0.001756f, 0.002482f, -0.000570f, -0.000415f, -0.011024f, 0.000687f, -0.006439f, 0.000440f, 0.003297f, 0.001251f, -0.000820f, 0.000102f, 0.001990f, 0.001943f, -0.010504f, -0.002692f, 0.003495f, + -0.002945f, -0.004208f, -0.000196f, 0.001218f, 0.001757f, 0.001834f, -0.001448f, -0.002317f, 0.001851f, -0.004689f, -0.007611f, -0.002120f, -0.001841f, -0.002689f, 0.001485f, -0.000785f, 0.006916f, 0.003020f, -0.002684f, 0.002823f, -0.001529f, 0.013271f, 0.024630f, 0.026681f, 0.010917f, 0.018665f, 0.015123f, 0.009027f, -0.004886f, 0.001993f, -0.007287f, 0.000615f, -0.002518f, -0.016135f, 0.020532f, 0.032571f, 0.012980f, -0.008924f, 0.014597f, 0.013872f, -0.000578f, 0.008611f, -0.015381f, -0.029638f, -0.019725f, -0.013499f, 0.008558f, -0.003601f, -0.015498f, 0.011558f, -0.005341f, -0.013865f, -0.000195f, 0.023990f, 0.012074f, 0.017770f, 0.006204f, 0.013078f, 0.014516f, -0.003345f, 0.013291f, -0.005196f, -0.015260f, 0.006412f, -0.017669f, 0.006568f, 0.006984f, -0.025953f, -0.016888f, 0.010622f, 0.026840f, -0.013947f, 0.018691f, 0.026127f, -0.021653f, 0.000878f, 0.023795f, 0.002563f, -0.008758f, -0.002023f, -0.012276f, -0.021387f, 0.000208f, -0.006505f, -0.011267f, 0.014665f, 0.000679f, -0.024482f, 0.031285f, -0.012980f, 0.025359f, -0.030108f, -0.020634f, 0.014660f, -0.018567f, 0.010180f, + -0.012513f, -0.009119f, -0.017451f, -0.010689f, -0.014225f, -0.035551f, 0.005766f, 0.021627f, -0.010104f, -0.001682f, 0.014948f, 0.015969f, 0.011295f, -0.002327f, -0.001407f, -0.009296f, -0.002998f, -0.004146f, -0.004935f, 0.003704f, -0.001103f, -0.003497f, 0.005068f, 0.004574f, -0.002367f, -0.000609f, -0.006512f, 0.002634f, -0.005755f, -0.010337f, -0.000885f, 0.009339f, -0.000098f, -0.005494f, -0.001600f, 0.015523f, 0.007665f, 0.000357f, -0.004914f, -0.005885f, -0.004372f, 0.000762f, 0.000866f, -0.004981f, -0.002013f, -0.000022f, 0.001625f, 0.006045f, 0.001263f, 0.009654f, 0.005687f, 0.006848f, 0.002450f, 0.002938f, -0.001716f, 0.000784f, -0.022430f, 0.014484f, -0.009760f, -0.023836f, 0.034453f, 0.018067f, -0.024495f, 0.017570f, 0.015505f, 0.004865f, 0.029021f, -0.059465f, 0.004184f, 0.024912f, 0.008315f, 0.002557f, 0.025960f, 0.001375f, 0.014153f, -0.034230f, -0.004799f, 0.009780f, 0.000305f, -0.016950f, 0.006617f, 0.014285f, 0.006597f, 0.006962f, 0.018299f, 0.015710f, 0.024363f, 0.019630f, -0.007697f, -0.007498f, 0.018820f, -0.011284f, 0.013159f, -0.021091f, -0.011808f, -0.027088f, + -0.012660f, 0.015539f, 0.005148f, -0.005952f, 0.022442f, -0.026408f, -0.036342f, -0.058213f, 0.018044f, 0.020634f, 0.015713f, 0.012784f, -0.013979f, 0.009711f, -0.008180f, 0.022529f, 0.058966f, -0.008818f, -0.012633f, -0.025335f, -0.008332f, 0.022533f, -0.015262f, 0.013080f, 0.021630f, 0.003948f, -0.000662f, -0.016788f, -0.005151f, 0.008532f, -0.041151f, -0.037456f, 0.003617f, 0.005507f, -0.014731f, 0.021158f, 0.015678f, 0.030286f, 0.048214f, 0.019669f, -0.011451f, -0.005514f, 0.010010f, 0.000113f, -0.026920f, 0.013077f, 0.010988f, 0.009920f, 0.002941f, 0.012823f, -0.000741f, 0.007271f, 0.005494f, 0.004224f, -0.006322f, 0.000883f, -0.000883f, -0.000453f, 0.009640f, 0.003323f, -0.000434f, 0.005560f, -0.010896f, 0.003421f, 0.001607f, -0.000950f, 0.010147f, 0.002463f, -0.003369f, -0.001384f, -0.006783f, 0.018942f, 0.000907f, 0.003581f, 0.007452f, -0.002333f, -0.003111f, 0.010845f, -0.011665f, 0.010790f, -0.008631f, 0.009016f, -0.000941f, -0.000322f, -0.002367f, 0.003920f, -0.002106f, 0.009310f, -0.007689f, -0.002589f, 0.002350f, -0.001213f, -0.002898f, -0.005168f, 0.006088f, 0.088737f, + 0.050044f, 0.032037f, -0.008266f, -0.008942f, -0.001185f, -0.007460f, -0.009203f, -0.013658f, -0.016650f, -0.028350f, 0.001179f, -0.001915f, 0.006870f, 0.012500f, 0.023554f, 0.035842f, -0.004854f, -0.046406f, -0.018256f, 0.040012f, -0.006297f, 0.015057f, -0.005243f, -0.000572f, 0.026517f, 0.009308f, 0.020119f, 0.011979f, -0.000906f, -0.001099f, -0.000447f, 0.013527f, 0.017081f, -0.006555f, -0.026267f, 0.034406f, 0.024512f, 0.017568f, 0.006357f, 0.009001f, -0.013998f, -0.025856f, 0.035690f, 0.020060f, 0.009136f, -0.016487f, -0.018527f, -0.025796f, -0.016020f, -0.004499f, -0.016273f, 0.009084f, -0.033205f, 0.004691f, 0.024383f, -0.015799f, 0.008555f, 0.001590f, 0.003513f, -0.037711f, 0.013331f, -0.016130f, 0.027522f, -0.060631f, 0.010351f, -0.015763f, -0.020584f, 0.005141f, -0.012450f, 0.012607f, 0.011771f, -0.039460f, 0.000358f, 0.027780f, 0.004065f, 0.008228f, 0.017330f, 0.007217f, 0.028792f, 0.011890f, 0.006034f, 0.002049f, -0.004258f, 0.018707f, -0.036800f, -0.000584f, -0.002216f, -0.003256f, 0.001375f, -0.000941f, -0.000351f, -0.003081f, -0.005475f, -0.006949f, 0.011358f, 0.009685f, + -0.005095f, -0.000706f, -0.017657f, 0.001841f, -0.001168f, -0.017245f, -0.000150f, -0.025634f, -0.019633f, 0.008790f, 0.003210f, 0.013667f, -0.015367f, 0.006690f, 0.013260f, 0.003055f, -0.000640f, 0.003570f, 0.007079f, 0.000716f, -0.003903f, 0.014227f, 0.000037f, 0.004705f, -0.008350f, -0.006109f, 0.005808f, 0.008574f, 0.001433f, -0.054407f, -0.028051f, 0.004091f, -0.047937f, 0.011043f, 0.034681f, -0.016659f, 0.042172f, 0.049609f, 0.006238f, 0.024816f, 0.030492f, 0.013764f, -0.029387f, 0.019193f, 0.023251f, -0.001088f, 0.005827f, 0.016510f, 0.014480f, 0.035027f, 0.005899f, -0.013422f, 0.022257f, 0.008064f, -0.003542f, 0.000566f, 0.014897f, -0.020383f, -0.009316f, -0.008594f, 0.012416f, 0.006531f, -0.028902f, 0.008569f, 0.024008f, 0.000697f, 0.028950f, -0.027399f, -0.051935f, 0.004198f, 0.023194f, 0.035238f, 0.032560f, 0.016897f, 0.015409f, 0.012459f, -0.035317f, -0.010262f, -0.001555f, 0.026489f, 0.041719f, -0.014397f, 0.008921f, -0.015336f, 0.009804f, 0.006697f, 0.025361f, 0.039455f, -0.015277f, -0.017221f, -0.003519f, 0.021638f, 0.027647f, 0.038885f, 0.000867f, -0.041930f, + -0.039678f, -0.006417f, 0.005034f, 0.000169f, -0.018240f, 0.000454f, -0.047825f, -0.030769f, -0.028300f, -0.032069f, 0.013596f, 0.004968f, 0.038368f, 0.030776f, 0.011497f, -0.018348f, -0.018448f, -0.017055f, -0.015615f, -0.026637f, 0.012490f, 0.008393f, 0.004843f, 0.017975f, 0.019852f, 0.000149f, 0.016923f, 0.003531f, 0.018077f, -0.006288f, 0.014976f, -0.004785f, -0.001463f, 0.004507f, -0.005638f, 0.025245f, 0.011260f, 0.015000f, 0.006670f, 0.017982f, 0.003921f, 0.008637f, 0.025651f, 0.022356f, 0.011859f, -0.001413f, -0.009977f, -0.008443f, -0.018317f, -0.010208f, -0.012060f, -0.007119f, -0.011130f, -0.013351f, -0.007834f, 0.007799f, 0.017061f, 0.004778f, -0.004126f, 0.000641f, -0.002645f, 0.010732f, 0.012576f, 0.010527f, -0.001220f, 0.004736f, 0.023079f, -0.050984f, 0.004642f, -0.010237f, 0.027942f, -0.015013f, -0.002298f, 0.008570f, 0.021168f, -0.028500f, -0.047837f, -0.008386f, -0.018735f, 0.001266f, -0.021581f, 0.012640f, 0.012572f, 0.001173f, -0.025809f, 0.016039f, 0.001623f, 0.043049f, -0.006883f, 0.023533f, -0.019931f, 0.044457f, 0.012849f, 0.027706f, 0.018673f, 0.030233f, + 0.044606f, -0.010978f, 0.017308f, -0.031318f, 0.032907f, 0.031882f, -0.000745f, 0.010283f, 0.032222f, -0.020747f, -0.019935f, -0.003410f, 0.064872f, 0.010425f, -0.018154f, 0.032092f, 0.004204f, 0.024580f, 0.035510f, 0.010226f, -0.002420f, 0.003209f, 0.005524f, 0.023303f, -0.008225f, 0.024997f, -0.017379f, 0.024394f, -0.013611f, 0.055237f, -0.008078f, 0.047475f, -0.043232f, -0.047598f, 0.065982f, -0.055436f, -0.029617f, 0.002058f, -0.017844f, -0.034484f, 0.030119f, -0.004206f, -0.042579f, -0.020316f, -0.021895f, -0.062763f, -0.023257f, 0.007519f, 0.014008f, -0.048479f, -0.012388f, 0.029076f, -0.005910f, 0.016605f, 0.028830f, -0.020867f, -0.004777f, 0.004477f, 0.018795f, 0.013306f, 0.014162f, -0.004926f, -0.002800f, 0.011422f, -0.001091f, -0.008029f, 0.006337f, 0.013195f, 0.002476f, 0.009082f, -0.000359f, -0.008964f, -0.000107f, 0.012124f, 0.004603f, -0.006632f, -0.015708f, -0.009748f, 0.018218f, -0.008731f, -0.024702f, 0.005535f, -0.014219f, -0.027128f, -0.000077f, 0.009753f, 0.000850f, -0.007290f, -0.002084f, 0.007010f, -0.005715f, -0.000005f, 0.009535f, -0.000896f, -0.004586f, -0.006145f, + 0.017266f, 0.032951f, 0.001718f, -0.012134f, -0.009844f, -0.005835f, -0.015839f, -0.003789f, -0.006698f, 0.006555f, -0.042696f, -0.028533f, 0.008368f, -0.055895f, -0.032539f, -0.038833f, -0.039438f, 0.048162f, -0.001107f, 0.001680f, 0.014432f, -0.014008f, -0.061345f, -0.045926f, -0.044912f, -0.091754f, 0.006755f, 0.010487f, 0.039802f, 0.023262f, 0.013889f, 0.019881f, 0.013882f, 0.004389f, -0.028819f, -0.042474f, -0.024355f, 0.033211f, -0.004008f, -0.024779f, -0.009867f, 0.032556f, -0.039004f, -0.025146f, -0.040060f, -0.019857f, -0.003224f, -0.038456f, 0.014598f, -0.031892f, 0.034945f, 0.024541f, -0.005143f, 0.024225f, -0.023362f, -0.048331f, 0.021480f, 0.028554f, -0.024790f, -0.055469f, 0.042262f, -0.003360f, 0.030698f, 0.025809f, -0.079389f, -0.056332f, 0.000849f, -0.012627f, 0.052212f, -0.029449f, -0.034074f, -0.008915f, 0.019481f, 0.003269f, -0.004447f, -0.017720f, 0.069261f, -0.033438f, -0.055743f, -0.075495f, 0.054790f, -0.012603f, -0.062088f, 0.029520f, 0.030035f, 0.018000f, 0.063209f, 0.067629f, 0.069404f, 0.029981f, -0.015231f, -0.005867f, -0.010265f, 0.023395f, -0.043714f, 0.028893f, + 0.005872f, 0.006073f, 0.021993f, 0.021361f, -0.017751f, 0.027221f, -0.020443f, 0.009479f, -0.029221f, -0.016346f, -0.011041f, -0.014795f, -0.005627f, -0.015965f, -0.003608f, 0.012056f, 0.031708f, 0.036940f, 0.002055f, 0.029145f, -0.016474f, 0.004833f, 0.017376f, 0.002989f, -0.031007f, 0.004624f, 0.008319f, -0.007979f, -0.022867f, -0.014226f, -0.013827f, 0.038460f, 0.024062f, 0.013029f, 0.018364f, 0.032632f, -0.004362f, -0.036948f, -0.023120f, -0.020830f, -0.026499f, -0.034206f, 0.006884f, -0.028502f, -0.050907f, -0.011649f, -0.010470f, 0.008442f, -0.051033f, -0.019445f, 0.022836f, 0.038829f, 0.077151f, 0.013373f, 0.040042f, 0.020338f, 0.018988f, -0.017142f, -0.006354f, -0.014529f, -0.043349f, -0.049547f, -0.071080f, -0.025037f, -0.064105f, -0.024347f, -0.033885f, -0.011818f, 0.033399f, 0.008959f, 0.022506f, 0.040661f, -0.000635f, 0.027652f, 0.007184f, 0.001946f, -0.001618f, -0.004733f, -0.054213f, 0.020035f, -0.007385f, -0.059915f, -0.038144f, 0.018206f, -0.039509f, -0.014349f, 0.013414f, 0.044430f, 0.052549f, 0.019062f, -0.011792f, 0.007857f, 0.034936f, 0.019603f, 0.006795f, -0.000539f, + -0.106196f, -0.020762f, 0.022606f, 0.027274f, 0.009951f, -0.003536f, -0.036298f, 0.025157f, -0.032465f, -0.023426f, -0.006986f, 0.006959f, -0.018389f, -0.055856f, 0.029361f, -0.006742f, 0.069327f, 0.027120f, 0.023192f, 0.027391f, 0.050758f, 0.116017f, 0.001002f, 0.002418f, -0.005624f, -0.033976f, 0.019765f, -0.023445f, 0.083256f, -0.007052f, -0.030926f, -0.026700f, 0.034729f, -0.045173f, -0.031573f, -0.005597f, 0.071088f, 0.002803f, 0.033499f, 0.053494f, 0.009924f, 0.043375f, 0.031787f, -0.005567f, 0.029075f, 0.032767f, 0.000264f, -0.021776f, -0.024673f, 0.007031f, 0.007386f, 0.027525f, 0.016631f, -0.000832f, -0.004901f, 0.005156f, 0.010222f, -0.019841f, -0.005053f, -0.004636f, -0.003493f, -0.031321f, 0.019073f, -0.022660f, 0.007176f, -0.004376f, -0.014581f, 0.004092f, 0.037652f, 0.033938f, -0.000794f, -0.002022f, -0.025368f, -0.009783f, -0.025224f, -0.003419f, -0.029217f, -0.040207f, 0.010976f, 0.028187f, 0.001045f, 0.001763f, 0.058622f, -0.007600f, 0.010315f, -0.064199f, -0.022264f, 0.076041f, -0.050831f, -0.013396f, -0.044075f, -0.128629f, -0.018731f, 0.039909f, 0.032242f, 0.006601f, + 0.008974f, -0.006647f, 0.071872f, -0.077572f, -0.000481f, -0.022112f, -0.052487f, -0.043787f, -0.006981f, 0.015097f, 0.012559f, 0.017726f, 0.046243f, 0.030570f, -0.033475f, -0.033331f, 0.092395f, 0.076126f, -0.006535f, 0.009161f, -0.010624f, 0.024999f, -0.000811f, 0.054403f, 0.019259f, 0.029043f, 0.007649f, 0.004457f, -0.096440f, 0.040052f, -0.004590f, -0.055038f, -0.028618f, 0.005732f, -0.015367f, -0.054782f, 0.052513f, -0.009108f, -0.039651f, -0.007957f, 0.005309f, 0.047192f, 0.052117f, 0.040219f, 0.014957f, 0.047057f, 0.049566f, -0.037368f, -0.041560f, -0.026053f, -0.007194f, 0.048738f, 0.064407f, 0.011331f, 0.022911f, 0.062417f, 0.036902f, -0.058130f, 0.042629f, 0.015884f, -0.013324f, 0.002499f, 0.119187f, -0.079044f, 0.060502f, 0.070022f, -0.070783f, -0.003933f, -0.046181f, -0.014567f, -0.101480f, 0.029229f, 0.044165f, -0.060641f, 0.036184f, -0.052455f, -0.038523f, 0.046158f, -0.029174f, -0.004101f, -0.017756f, 0.002368f, -0.025816f, 0.007913f, 0.011116f, -0.019043f, -0.027638f, -0.002016f, -0.029979f, 0.038645f, 0.006357f, -0.036115f, 0.007339f, -0.006008f, -0.020257f, -0.018940f, + 0.011852f, 0.024630f, 0.030236f, 0.012689f, -0.028371f, 0.071027f, -0.013760f, 0.007084f, -0.005240f, -0.037580f, 0.013704f, 0.020483f, -0.019723f, 0.030254f, 0.007059f, 0.022576f, -0.005965f, -0.036420f, 0.011573f, 0.054476f, -0.035106f, -0.051055f, -0.082637f, 0.016319f, -0.015810f, -0.026410f, -0.033413f, 0.018242f, -0.020272f, -0.009650f, 0.054388f, -0.017081f, -0.003033f, -0.042769f, 0.003502f, 0.027092f, -0.059727f, -0.037856f, -0.035725f, -0.017728f, 0.021758f, -0.080719f, -0.044797f, -0.116432f, 0.020256f, -0.001331f, -0.029513f, -0.013118f, -0.017144f, 0.024692f, 0.037368f, -0.041465f, 0.001585f, -0.014583f, -0.013952f, -0.072810f, 0.016013f, 0.055599f, 0.014785f, 0.042020f, 0.052997f, 0.047279f, -0.063658f, -0.019655f, -0.019198f, -0.030004f, 0.053630f, -0.054942f, -0.031535f, 0.001747f, 0.077863f, 0.017407f, -0.027274f, 0.078240f, -0.044043f, -0.041590f, 0.093587f, 0.089404f, 0.008696f, 0.022652f, -0.025403f, -0.085031f, -0.026054f, 0.085340f, -0.041378f, 0.077335f, -0.027882f, -0.122132f, -0.032082f, -0.057190f, 0.065139f, 0.000456f, 0.014676f, 0.058171f, -0.009202f, 0.047945f, + -0.062623f, -0.074064f, 0.057006f, -0.014942f, -0.124468f, 0.076852f, -0.039531f, 0.020899f, 0.025410f, -0.043672f, 0.082828f, -0.056535f, 0.030158f, -0.000947f, 0.022195f, 0.083657f, -0.021078f, -0.026524f, 0.003474f, -0.017497f, -0.022497f, -0.018978f, 0.009796f, 0.018775f, 0.004955f, -0.012058f, 0.010920f, -0.039922f, 0.036302f, 0.025098f, 0.020629f, 0.007955f, 0.000683f, -0.018683f, -0.019821f, -0.019433f, 0.017403f, 0.032680f, -0.031530f, 0.028340f, 0.066612f, 0.022172f, -0.056043f, 0.005465f, 0.021241f, -0.021036f, -0.036796f, 0.035175f, -0.031062f, -0.000725f, -0.002166f, -0.033833f, -0.042935f, -0.000453f, 0.025445f, -0.014456f, 0.057546f, -0.019085f, -0.036912f, 0.026269f, 0.022292f, 0.043050f, 0.003216f, -0.077554f, 0.045750f, 0.052723f, -0.064070f, 0.035023f, -0.000339f, -0.023209f, -0.027400f, -0.092474f, -0.040764f, 0.032454f, 0.005879f, 0.084808f, -0.068095f, -0.038559f, 0.015993f, -0.009402f, 0.054450f, -0.075634f, 0.000150f, 0.007738f, -0.063822f, 0.063880f, 0.035120f, 0.019487f, -0.029873f, 0.043748f, -0.051695f, 0.028623f, 0.022371f, 0.013466f, -0.003564f, -0.028927f, + 0.012131f, 0.058128f, -0.030428f, -0.011114f, 0.011512f, -0.045491f, 0.046576f, 0.001846f, 0.012323f, -0.062327f, 0.033807f, 0.008302f, 0.011603f, -0.146295f, 0.020247f, -0.041535f, 0.068578f, 0.056722f, 0.060301f, 0.030827f, -0.118847f, -0.020787f, 0.025703f, 0.002664f, 0.008099f, 0.083970f, -0.012301f, -0.050329f, -0.060335f, 0.002601f, -0.067125f, -0.058925f, -0.052129f, 0.025382f, -0.098007f, 0.069998f, 0.133773f, -0.034820f, -0.015778f, -0.104034f, -0.022479f, 0.040168f, 0.024913f, -0.034433f, -0.006845f, -0.125876f, -0.044014f, 0.126922f, 0.054241f, -0.039015f, 0.037397f, -0.071243f, -0.052510f, 0.014286f, 0.003196f, 0.008899f, -0.048086f, -0.016472f, -0.009745f, 0.000328f, -0.069858f, 0.015519f, -0.008569f, -0.021633f, 0.009835f, 0.029468f, -0.037894f, -0.018789f, -0.005503f, 0.014297f, -0.028964f, -0.007405f, -0.004528f, -0.027394f, 0.000984f, -0.051130f, 0.068037f, 0.022297f, -0.017072f, -0.006274f, -0.019211f, -0.002227f, 0.043926f, 0.013544f, -0.007331f, 0.023225f, -0.013356f, -0.063651f, 0.003661f, 0.003596f, 0.014293f, 0.029191f, -0.016101f, -0.011401f, 0.028786f, 0.034586f, + 0.015234f, -0.030223f, -0.095496f, 0.025952f, -0.041877f, -0.028499f, 0.029008f, -0.023395f, -0.033585f, 0.026575f, -0.044158f, -0.002721f, -0.050336f, 0.072676f, 0.001275f, -0.053153f, -0.015694f, 0.001200f, -0.005345f, 0.016879f, -0.035499f, -0.024621f, 0.007969f, 0.014606f, 0.008529f, 0.007080f, 0.027586f, -0.032021f, -0.012270f, -0.073585f, 0.027289f, 0.006794f, -0.022453f, 0.053009f, 0.029055f, -0.021895f, 0.081305f, 0.017874f, -0.051084f, 0.038413f, 0.006693f, 0.024922f, 0.053699f, -0.005213f, -0.013121f, 0.008147f, 0.044276f, 0.024729f, 0.001049f, -0.004803f, 0.047371f, -0.004509f, -0.054886f, -0.009836f, 0.010223f, 0.043061f, -0.019159f, 0.074370f, 0.082652f, -0.052801f, 0.043211f, 0.092400f, -0.024939f, 0.140496f, 0.079672f, -0.035714f, -0.031943f, -0.053540f, -0.059939f, -0.034424f, 0.018932f, -0.010982f, -0.010516f, -0.002341f, -0.008986f, -0.098970f, -0.037983f, -0.097728f, 0.022952f, 0.086657f, -0.032435f, -0.005797f, -0.047231f, 0.023094f, 0.006082f, 0.016274f, 0.024515f, 0.072606f, -0.003417f, 0.032696f, 0.034185f, -0.055464f, 0.002543f, -0.000659f, 0.012191f, 0.023492f, + -0.002914f, -0.013545f, 0.023044f, -0.003931f, -0.012439f, 0.002336f, -0.022547f, -0.006030f, 0.016963f, 0.002572f, -0.009559f, -0.053147f, 0.002914f, -0.024813f, -0.001761f, -0.021013f, 0.044175f, -0.015357f, 0.021664f, 0.025837f, -0.020724f, 0.031297f, 0.020702f, -0.000317f, -0.011105f, -0.020739f, 0.005198f, -0.002951f, -0.011252f, -0.002709f, 0.022101f, -0.017569f, 0.009749f, -0.006815f, 0.016008f, 0.124291f, 0.032942f, -0.044625f, 0.005073f, -0.058571f, -0.007563f, 0.020441f, -0.024180f, -0.031154f, -0.034547f, -0.013201f, 0.013452f, -0.007709f, -0.011015f, 0.015753f, 0.009242f, 0.021376f, -0.021979f, -0.013921f, 0.016080f, -0.005766f, 0.002988f, -0.032352f, 0.022076f, -0.037862f, 0.018312f, 0.012479f, -0.008001f, -0.001707f, 0.001546f, -0.021972f, 0.003849f, 0.004475f, -0.017344f, 0.031645f, -0.016852f, 0.007666f, 0.000351f, 0.001111f, 0.016175f, -0.015598f, -0.024088f, -0.007274f, 0.036758f, -0.027112f, 0.018107f, -0.049728f, -0.029397f, 0.009479f, -0.010561f, -0.000751f, -0.003086f, -0.029909f, 0.031982f, 0.025434f, 0.002525f, -0.021875f, -0.000871f, -0.013273f, 0.006759f, -0.016574f, + -0.000305f, -0.015899f, 0.012197f, -0.004327f, 0.003352f, 0.040344f, -0.033817f, -0.002807f, 0.006285f, 0.002571f, -0.007143f, 0.001080f, -0.015907f, 0.001054f, -0.013289f, 0.008425f, 0.016144f, -0.024236f, -0.019989f, 0.011837f, 0.001778f, -0.005612f, -0.019028f, 0.008508f, 0.002850f, -0.000635f, -0.004119f, 0.000371f, -0.004159f, 0.013649f, -0.008675f, -0.002270f, 0.006531f, -0.004284f, -0.000445f, 0.011008f, -0.006925f, -0.004491f, -0.002479f, 0.002551f, 0.011418f, -0.003526f, -0.012227f, 0.001035f, -0.007764f, 0.029264f, -0.011395f, 0.003865f, 0.006934f, -0.007047f, 0.023431f, -0.002994f, -0.019717f, 0.007526f, -0.011116f, 0.014604f, 0.007348f, -0.002812f, -0.000879f, -0.004945f, -0.005110f, 0.014469f, -0.008953f, -0.003847f, -0.001149f, -0.011888f, 0.016209f, -0.059631f, -0.088158f, 0.061438f, 0.282308f, 0.123681f, 0.129386f, -0.000827f, -0.261314f, -0.189126f, -0.098394f, -0.205926f, 0.099976f, 0.122882f, 0.063865f, 0.266350f, 0.119747f, -0.011530f, 0.088310f, -0.172299f, -0.219752f, -0.125384f, -0.153955f, -0.033139f, 0.118999f, 0.121939f, 0.051030f, 0.204822f, 0.101609f, -0.014175f, + 0.098469f, -0.090566f, -0.155556f, -0.089109f, -0.117035f, -0.183536f, 0.067588f, -0.001478f, -0.065968f, 0.197880f, 0.119029f, 0.067167f, 0.202390f, 0.049117f, -0.102881f, 0.099894f, -0.146667f, -0.166945f, -0.034286f, -0.175592f, -0.178460f, 0.070784f, -0.029596f, 0.043390f, 0.224819f, 0.154344f, 0.160272f, 0.151591f, 0.018264f, -0.084505f, -0.098123f, -0.163779f, -0.215416f, -0.112597f, -0.061465f, -0.044213f, 0.082113f, 0.128563f, 0.120292f, 0.170860f, 0.153882f, -0.023378f, -0.027341f, -0.027297f, -0.158250f, -0.047018f, -0.078008f, -0.117087f, 0.026146f, 0.048617f, 0.007660f, 0.109956f, 0.048728f, 0.001457f, 0.068438f, -0.052304f, -0.058270f, 0.002088f, -0.037924f, -0.011401f, 0.028484f, -0.005394f, 0.031641f, 0.042990f, -0.023524f, 0.033944f, 0.013470f, -0.050773f, 0.004743f, -0.023911f, -0.097587f, -0.000799f, -0.024886f, -0.040981f, 0.093976f, 0.028814f, 0.035240f, 0.124195f, 0.048904f, 0.036926f, 0.027121f, -0.060584f, -0.089693f, -0.082353f, -0.139566f, -0.113334f, -0.050853f, 0.005559f, 0.062712f, 0.144287f, 0.151925f, 0.140365f, 0.123621f, 0.077223f, -0.030424f, -0.086635f, + -0.174556f, -0.220259f, -0.170706f, -0.101514f, -0.036057f, 0.094137f, 0.172532f, 0.199253f, 0.203308f, 0.099085f, -0.024019f, -0.065708f, -0.081959f, -0.104886f, -0.076246f, -0.077385f, -0.063134f, -0.007723f, 0.020122f, 0.033231f, 0.054904f, 0.059901f, 0.054342f, 0.050691f, 0.028112f, 0.009877f, -0.005506f, -0.023450f, -0.037672f, -0.032073f, -0.020393f, -0.006436f, -0.001998f, 0.001574f, -0.001046f} + }, + { + {0.008957f, 0.005154f, -0.008124f, -0.001854f, -0.003005f, -0.000260f, 0.012161f, 0.000699f, -0.005208f, 0.006412f, 0.001303f, 0.000656f, 0.002136f, 0.001348f, 0.000104f, 0.009152f, 0.005154f, -0.006192f, -0.002392f, -0.000710f, -0.002181f, 0.002568f, 0.003901f, 0.002625f, -0.002658f, -0.003955f, 0.001516f, -0.007968f, -0.003630f, 0.005986f, 0.000520f, 0.004820f, 0.002460f, -0.003887f, 0.002939f, 0.000053f, -0.003439f, 0.008405f, -0.005630f, -0.002643f, 0.001066f, 0.002892f, -0.003852f, -0.001010f, -0.005529f, -0.010929f, 0.010217f, -0.002050f, -0.005708f, 0.000603f, 0.009392f, 0.000010f, 0.003629f, -0.004672f, -0.002741f, -0.001927f, 0.002880f, -0.003695f, 0.007509f, 0.001188f, 0.006774f, -0.009847f, 0.004157f, -0.002559f, 0.001637f, 0.004183f, -0.001708f, -0.001097f, -0.007286f, 0.000051f, 0.003924f, 0.000893f, -0.002038f, -0.000343f, 0.003491f, -0.001853f, -0.001950f, 0.005519f, -0.002529f, 0.001752f, -0.001061f, -0.000331f, -0.006804f, -0.002791f, -0.001865f, 0.002479f, -0.000522f, -0.003028f, -0.000536f, -0.000617f, -0.001924f, 0.001807f, -0.002300f, 0.000150f, 0.000496f, 0.001162f, + 0.001826f, -0.000807f, -0.001663f, 0.001729f, 0.000330f, -0.001246f, 0.000207f, 0.002946f, -0.000417f, -0.000285f, 0.001158f, 0.000102f, 0.000372f, 0.000478f, -0.000925f, -0.001596f, -0.000939f, 0.001261f, -0.000325f, 0.000142f, 0.000592f, -0.000855f, 0.000792f, 0.000020f, -0.000550f, 0.025675f, 0.008802f, -0.002032f, 0.006952f, 0.000355f, 0.012668f, 0.007960f, -0.001777f, 0.006513f, 0.011375f, 0.014878f, -0.008782f, -0.008595f, 0.003656f, -0.003468f, -0.002874f, 0.010639f, 0.008599f, 0.008190f, 0.005847f, 0.001101f, -0.000335f, -0.003715f, 0.004060f, 0.002835f, 0.013554f, 0.001371f, -0.000293f, -0.005995f, 0.002822f, 0.003969f, -0.000772f, -0.001848f, -0.002120f, 0.003675f, -0.000537f, -0.002186f, -0.004963f, 0.005263f, -0.001766f, -0.001782f, 0.007485f, 0.010618f, -0.002738f, -0.001303f, 0.006141f, 0.005494f, 0.009729f, 0.006026f, 0.002674f, 0.001000f, 0.008284f, 0.004686f, -0.011420f, 0.000010f, 0.003506f, -0.006582f, 0.000172f, 0.001074f, -0.008147f, 0.004147f, -0.003956f, 0.006107f, -0.001317f, -0.001057f, 0.003287f, 0.001055f, -0.005620f, -0.000504f, 0.003121f, -0.001107f, + -0.001391f, -0.001634f, 0.000606f, 0.006498f, 0.001147f, -0.006549f, -0.001557f, 0.001536f, -0.001953f, -0.000836f, 0.009617f, -0.001952f, 0.001169f, -0.001131f, -0.002461f, 0.002171f, 0.003577f, -0.000931f, 0.001625f, 0.001748f, -0.001783f, 0.000846f, 0.001600f, 0.000370f, -0.001187f, -0.003382f, -0.001051f, -0.002037f, -0.000947f, -0.000250f, 0.001071f, -0.000632f, 0.001289f, 0.000703f, -0.000295f, 0.008883f, -0.000692f, -0.016768f, -0.007806f, -0.003253f, -0.003629f, -0.009127f, -0.008384f, -0.005264f, 0.009088f, -0.009985f, -0.004663f, -0.004741f, 0.001828f, 0.015162f, -0.002276f, -0.001202f, 0.003708f, 0.008679f, -0.013268f, -0.002162f, 0.002708f, -0.005855f, 0.004685f, 0.007421f, -0.008181f, -0.000502f, 0.001055f, -0.004754f, -0.012042f, 0.002099f, -0.005070f, 0.001637f, -0.004668f, 0.006897f, -0.008314f, -0.007757f, -0.019112f, -0.005147f, 0.006573f, -0.001061f, -0.007333f, -0.003608f, -0.000922f, -0.007681f, 0.000388f, -0.001289f, 0.005282f, 0.004184f, -0.001979f, 0.000247f, -0.001955f, -0.008108f, 0.009911f, 0.001735f, 0.006699f, -0.002451f, 0.000025f, 0.001752f, 0.002899f, 0.007686f, + -0.002459f, -0.001845f, 0.002271f, -0.000207f, 0.008381f, 0.004489f, -0.007245f, -0.002865f, -0.001807f, -0.011461f, -0.001289f, -0.001073f, 0.006825f, -0.004385f, 0.006220f, 0.001081f, -0.000217f, -0.000626f, -0.001095f, -0.001226f, 0.001327f, -0.004616f, 0.002151f, -0.002656f, 0.002338f, 0.002008f, 0.000900f, 0.000587f, 0.006681f, 0.004917f, -0.001227f, 0.006097f, -0.000826f, -0.002033f, -0.001932f, 0.001206f, -0.000435f, 0.004179f, -0.001077f, 0.002616f, 0.002111f, -0.000353f, 0.001770f, 0.000016f, 0.001854f, 0.001851f, 0.000537f, 0.000648f, 0.002007f, 0.001357f, -0.002745f, -0.001492f, -0.000289f, 0.003400f, 0.003765f, 0.000031f, -0.000400f, 0.002065f, -0.036890f, -0.011556f, -0.003257f, -0.002985f, -0.003080f, 0.014236f, -0.013135f, 0.006318f, -0.003060f, 0.002886f, -0.003747f, -0.003060f, -0.010572f, 0.001725f, -0.003848f, 0.000788f, -0.015349f, 0.000295f, -0.001558f, -0.002766f, -0.000234f, 0.002871f, 0.002345f, -0.001472f, -0.001033f, -0.006177f, 0.001921f, -0.004963f, 0.003275f, -0.000025f, 0.002801f, 0.009574f, -0.002487f, -0.011013f, -0.004676f, -0.012893f, 0.001809f, 0.002299f, + -0.001138f, 0.002207f, -0.004466f, 0.004290f, 0.002249f, -0.005724f, 0.000526f, -0.015496f, -0.003264f, -0.010372f, 0.005700f, 0.010210f, -0.008977f, -0.000730f, 0.002975f, 0.001547f, -0.014720f, 0.002440f, 0.007632f, -0.007111f, -0.003329f, -0.016868f, 0.005764f, -0.002460f, 0.007012f, 0.012455f, 0.007165f, -0.010054f, 0.002179f, 0.002348f, 0.000607f, -0.011176f, 0.002939f, -0.004778f, 0.007486f, -0.003025f, -0.000296f, 0.003462f, 0.003094f, 0.008754f, 0.010053f, 0.006807f, -0.000435f, 0.002504f, 0.006022f, 0.002987f, -0.005806f, -0.001233f, -0.003845f, -0.003964f, 0.001880f, -0.000189f, 0.001048f, 0.000079f, -0.001080f, -0.000348f, 0.003688f, -0.001199f, -0.001084f, 0.000088f, -0.000920f, -0.002658f, 0.003362f, 0.000112f, 0.001650f, 0.003939f, -0.000382f, 0.000428f, -0.002996f, 0.001994f, 0.001496f, 0.000309f, -0.003007f, 0.001024f, 0.000167f, -0.022757f, 0.002443f, 0.004162f, -0.008254f, -0.000936f, 0.022255f, 0.017419f, 0.009344f, -0.002417f, -0.004119f, 0.011186f, 0.006901f, 0.003636f, 0.004143f, -0.008881f, 0.003002f, 0.000945f, 0.010435f, -0.009942f, -0.004643f, -0.001835f, + 0.001260f, -0.001973f, -0.011623f, -0.007762f, -0.008197f, -0.009539f, 0.005266f, 0.006526f, 0.004088f, 0.002937f, 0.000152f, 0.002872f, -0.001510f, -0.001172f, 0.000678f, -0.003422f, -0.001055f, 0.005141f, 0.003898f, -0.007784f, -0.008818f, -0.000744f, -0.008844f, 0.005337f, -0.002719f, -0.014795f, 0.001748f, 0.007631f, 0.010665f, 0.007482f, 0.000371f, 0.007073f, -0.010652f, -0.003340f, -0.004781f, -0.000676f, 0.000706f, 0.004824f, -0.003695f, -0.009651f, 0.011793f, -0.010674f, -0.005182f, 0.007380f, 0.017070f, 0.004105f, 0.003348f, -0.016643f, 0.018034f, 0.002219f, 0.012560f, 0.019451f, -0.004313f, 0.002125f, 0.002229f, -0.007885f, 0.016034f, 0.003814f, -0.005297f, 0.004485f, -0.002277f, 0.007979f, -0.013242f, -0.006993f, -0.013531f, -0.002573f, -0.006017f, 0.005462f, -0.003453f, 0.002351f, -0.006358f, -0.001575f, -0.001265f, -0.004018f, -0.000303f, -0.001483f, 0.001631f, -0.000251f, -0.001797f, -0.000894f, -0.000828f, 0.003237f, 0.000833f, -0.002392f, -0.005526f, 0.003115f, 0.003021f, 0.000600f, -0.000034f, -0.000052f, -0.002311f, 0.001010f, -0.001556f, 0.003372f, 0.000593f, 0.001914f, + -0.001944f, -0.002176f, -0.004395f, 0.034528f, 0.024324f, -0.008672f, -0.012673f, 0.019174f, 0.012502f, 0.020181f, 0.029639f, -0.014932f, 0.010285f, 0.004971f, 0.008621f, 0.003893f, 0.005189f, 0.012289f, 0.003072f, 0.012549f, 0.000436f, -0.007962f, 0.003385f, -0.002544f, 0.004244f, -0.001451f, 0.023016f, 0.003921f, 0.005089f, 0.003154f, 0.000930f, 0.008084f, 0.003439f, 0.000508f, -0.001461f, 0.005796f, -0.004430f, 0.011038f, -0.008563f, 0.013282f, -0.006245f, 0.008047f, 0.004205f, 0.004932f, 0.003898f, 0.019482f, 0.014876f, 0.000968f, -0.004178f, -0.010509f, 0.011531f, -0.012818f, 0.003234f, -0.005588f, 0.005676f, 0.012207f, 0.001471f, -0.020347f, -0.016535f, 0.001740f, -0.010287f, -0.011129f, -0.006435f, -0.012838f, 0.004592f, 0.022333f, 0.011193f, -0.008188f, 0.000516f, 0.002599f, -0.005847f, -0.006552f, -0.001090f, 0.010976f, 0.012178f, -0.012905f, 0.006120f, 0.014317f, 0.002841f, 0.004721f, 0.006895f, 0.011157f, -0.001929f, -0.007596f, 0.002953f, -0.003265f, -0.000662f, -0.007290f, 0.006735f, 0.010543f, 0.001598f, 0.001893f, 0.001442f, -0.007383f, -0.001088f, -0.000122f, + -0.000842f, 0.000749f, -0.001184f, 0.001216f, 0.000883f, 0.003610f, 0.000355f, -0.000067f, 0.000308f, 0.002317f, 0.003956f, 0.002073f, 0.004189f, 0.002300f, 0.000742f, 0.001234f, -0.000934f, -0.006888f, -0.007172f, 0.001441f, 0.005211f, 0.001336f, -0.001609f, 0.001270f, -0.000966f, 0.003305f, -0.002695f, -0.002452f, -0.004518f, 0.001936f, 0.015120f, 0.002982f, 0.021928f, -0.001853f, -0.000346f, -0.007221f, -0.005981f, 0.007473f, 0.016576f, -0.004770f, 0.004336f, 0.001286f, 0.017968f, 0.007563f, -0.008481f, -0.007661f, 0.001106f, 0.003887f, 0.016324f, 0.016184f, 0.024406f, 0.004558f, 0.006741f, -0.004184f, 0.009911f, 0.011462f, -0.004473f, -0.005500f, 0.008730f, -0.006628f, -0.009441f, 0.008936f, 0.002595f, -0.010728f, -0.013377f, 0.020381f, 0.010093f, -0.000542f, 0.012858f, 0.002668f, -0.009125f, 0.019372f, -0.004560f, 0.000741f, -0.000521f, 0.005148f, -0.007054f, 0.005151f, -0.007063f, 0.005021f, -0.006563f, 0.006056f, -0.005374f, 0.008184f, -0.006763f, -0.006649f, 0.017862f, -0.022241f, 0.001221f, 0.002845f, -0.007740f, 0.001688f, -0.025231f, -0.012192f, 0.012009f, -0.009852f, + 0.007368f, -0.002482f, 0.004963f, 0.002393f, 0.004254f, 0.002859f, -0.011449f, 0.006355f, -0.006663f, -0.000550f, -0.014533f, -0.007649f, -0.003651f, -0.003250f, 0.004121f, 0.013903f, 0.007907f, -0.010794f, 0.004245f, 0.002386f, 0.000090f, -0.005062f, 0.000748f, -0.000764f, 0.002684f, 0.001521f, -0.002799f, -0.003482f, -0.001460f, -0.000776f, -0.002120f, 0.008180f, 0.001476f, -0.002756f, -0.001692f, 0.002174f, -0.003234f, 0.000628f, 0.001608f, 0.000399f, 0.000455f, -0.008057f, -0.003360f, -0.001777f, 0.001292f, -0.002012f, -0.000303f, 0.005610f, -0.017828f, -0.015457f, -0.000002f, 0.006635f, 0.012593f, -0.014639f, 0.004264f, -0.013158f, 0.010899f, 0.008258f, -0.017958f, -0.003777f, 0.002007f, -0.021177f, -0.011952f, 0.012832f, -0.001593f, -0.000952f, 0.003122f, -0.001367f, -0.022055f, 0.020204f, 0.001383f, -0.014368f, -0.006896f, 0.002660f, -0.001773f, -0.013809f, -0.004044f, -0.007948f, 0.002377f, -0.000719f, -0.004302f, 0.004391f, -0.019098f, -0.008555f, 0.005053f, 0.025068f, -0.004101f, -0.014770f, -0.010332f, -0.008235f, 0.017181f, -0.018218f, -0.003538f, -0.001284f, -0.019343f, -0.024251f, + 0.006067f, -0.016814f, -0.002564f, 0.002494f, 0.012885f, 0.007132f, 0.001158f, 0.002758f, 0.015367f, -0.006597f, -0.004649f, 0.022609f, -0.014990f, 0.011776f, -0.005066f, -0.005654f, -0.002182f, -0.002730f, 0.024258f, 0.000565f, 0.009509f, -0.024837f, -0.017899f, 0.000611f, -0.003474f, 0.027769f, 0.001028f, 0.018940f, 0.008104f, 0.023685f, 0.014494f, -0.003571f, -0.016341f, -0.006175f, 0.011212f, 0.004849f, 0.007617f, -0.009122f, -0.010170f, -0.002830f, -0.003332f, 0.004929f, -0.002406f, -0.006635f, -0.001068f, -0.001594f, 0.000074f, -0.000792f, 0.001034f, -0.002690f, -0.003545f, 0.004550f, -0.000192f, 0.000319f, -0.001129f, -0.001971f, -0.001434f, 0.001265f, 0.003984f, -0.004005f, 0.001045f, -0.002441f, -0.003541f, 0.002645f, -0.000962f, -0.003380f, -0.003873f, -0.000733f, 0.003891f, 0.000440f, 0.000611f, 0.001473f, 0.006919f, -0.005691f, -0.004653f, -0.002868f, 0.000674f, 0.002803f, -0.029704f, 0.002813f, -0.002911f, 0.020287f, 0.002367f, -0.021609f, 0.025735f, 0.008231f, -0.015097f, -0.033171f, -0.013791f, 0.032667f, 0.001633f, -0.004209f, -0.005470f, 0.003316f, 0.001087f, 0.010038f, + 0.005353f, 0.010759f, -0.002340f, 0.019258f, -0.009963f, -0.022813f, 0.000972f, 0.001005f, -0.005412f, -0.000876f, 0.008538f, -0.005892f, -0.003473f, -0.002029f, 0.018209f, 0.014087f, 0.007324f, -0.001384f, -0.024776f, -0.000516f, -0.001284f, -0.001069f, -0.004109f, -0.000434f, -0.010835f, -0.020246f, -0.003156f, 0.013876f, 0.013540f, -0.005117f, 0.014547f, -0.004715f, 0.006293f, 0.015952f, 0.015297f, -0.033762f, 0.011590f, 0.012154f, 0.005068f, -0.008244f, -0.029569f, 0.017934f, 0.010619f, 0.005723f, -0.010532f, -0.005914f, -0.011928f, 0.006621f, -0.013234f, -0.002471f, 0.000266f, 0.012070f, -0.007462f, 0.006144f, 0.003376f, -0.021641f, -0.002945f, -0.014465f, 0.023749f, 0.010999f, -0.027819f, -0.005907f, 0.022122f, 0.011006f, -0.011428f, -0.005725f, -0.012626f, -0.004275f, 0.006650f, -0.003863f, -0.001470f, -0.004830f, -0.006026f, -0.010584f, 0.002120f, 0.000847f, -0.003333f, -0.001066f, 0.005505f, 0.003676f, -0.006613f, -0.002355f, 0.004997f, -0.001284f, 0.003844f, -0.004391f, -0.002977f, -0.000840f, 0.001083f, 0.005706f, -0.005943f, -0.004263f, 0.003142f, -0.006824f, -0.000439f, -0.004803f, + 0.003035f, -0.003805f, 0.006681f, -0.002287f, -0.001068f, -0.003346f, 0.004303f, 0.002868f, 0.007604f, 0.002368f, 0.018340f, 0.022855f, 0.023005f, 0.017972f, 0.022551f, -0.028424f, -0.018939f, -0.009679f, -0.009511f, -0.013511f, -0.010729f, -0.022779f, -0.008019f, 0.001739f, 0.013467f, 0.000174f, -0.013382f, -0.000431f, 0.013452f, 0.000851f, -0.011586f, -0.005145f, 0.030895f, 0.003200f, 0.011461f, 0.003765f, 0.012621f, 0.002793f, 0.003926f, -0.018986f, 0.010430f, 0.000880f, 0.004166f, -0.019915f, 0.006683f, -0.030675f, -0.000282f, -0.009601f, 0.007370f, -0.002676f, -0.022802f, -0.000403f, -0.022700f, 0.004247f, -0.018914f, 0.017144f, -0.009942f, 0.026871f, 0.000542f, -0.000366f, 0.013179f, 0.003020f, -0.004537f, -0.003814f, 0.005151f, -0.009023f, 0.006009f, 0.016614f, 0.008132f, -0.012166f, -0.006737f, 0.035470f, 0.002396f, 0.028311f, -0.026464f, -0.005399f, -0.003088f, 0.020617f, -0.023137f, 0.003317f, 0.010611f, -0.022607f, 0.015531f, -0.014170f, 0.003827f, 0.022145f, 0.002057f, 0.012507f, 0.005553f, 0.028904f, 0.012150f, -0.011893f, -0.009754f, -0.011460f, 0.001404f, 0.001158f, + 0.011783f, -0.007160f, -0.001719f, 0.007961f, 0.000208f, 0.006146f, 0.007952f, 0.001190f, -0.007042f, 0.008014f, 0.005759f, -0.000753f, 0.002115f, 0.002699f, -0.003318f, -0.002382f, -0.009844f, 0.006331f, -0.004917f, -0.004248f, -0.002246f, -0.004931f, 0.004243f, -0.003369f, -0.001539f, -0.005296f, -0.001704f, -0.001222f, 0.006252f, 0.004718f, -0.000643f, -0.001121f, -0.000827f, 0.003725f, 0.004132f, 0.003948f, 0.008117f, -0.001060f, -0.008717f, -0.028542f, 0.004255f, 0.027941f, 0.020798f, 0.022844f, -0.007634f, -0.005793f, 0.005641f, -0.003891f, 0.028138f, 0.009504f, 0.013371f, 0.023828f, -0.001786f, 0.008962f, -0.016207f, 0.023732f, 0.011759f, -0.005890f, -0.014586f, -0.013433f, 0.015807f, -0.027399f, 0.010650f, 0.015879f, -0.011560f, -0.015269f, -0.008846f, 0.014813f, 0.005422f, -0.005504f, -0.010165f, 0.000263f, -0.017040f, -0.025389f, 0.004516f, -0.024368f, -0.036539f, -0.004517f, 0.001274f, 0.036957f, -0.016059f, -0.012520f, 0.016280f, 0.027241f, 0.027053f, 0.014549f, -0.001822f, 0.006365f, -0.011908f, 0.002153f, -0.012480f, 0.030441f, 0.026622f, 0.017432f, -0.001436f, -0.031028f, + -0.000402f, -0.026496f, 0.029062f, 0.022790f, 0.013905f, -0.021993f, 0.017939f, 0.010387f, 0.012336f, -0.004086f, -0.018937f, -0.013547f, -0.015211f, 0.005103f, -0.021280f, -0.038424f, 0.007249f, 0.026099f, 0.013478f, 0.025622f, -0.008132f, -0.007034f, 0.025521f, 0.008632f, 0.003137f, 0.017203f, 0.005321f, 0.000506f, 0.014433f, 0.009322f, -0.001764f, 0.006765f, 0.006027f, 0.003889f, -0.005313f, -0.008498f, -0.011641f, 0.002994f, 0.006807f, 0.004189f, 0.014504f, 0.000367f, 0.010201f, -0.003384f, 0.003909f, 0.008408f, 0.000692f, -0.003898f, -0.002785f, -0.012440f, -0.011136f, 0.003704f, 0.002202f, 0.004903f, 0.012467f, 0.001873f, 0.009346f, -0.003780f, -0.002690f, 0.001651f, -0.010047f, -0.007544f, -0.003308f, -0.008095f, 0.003254f, -0.002730f, 0.002520f, 0.007167f, 0.009591f, 0.014255f, 0.023592f, 0.049709f, 0.022567f, 0.017120f, 0.016607f, -0.031347f, -0.004550f, -0.011696f, 0.039915f, -0.040603f, -0.037853f, 0.010570f, 0.026157f, -0.001100f, 0.031919f, 0.028301f, -0.001071f, 0.010656f, -0.018672f, -0.014071f, 0.030351f, -0.012241f, 0.020944f, 0.006917f, -0.013084f, -0.007381f, + -0.005642f, -0.007024f, -0.013668f, 0.011274f, 0.012750f, 0.010022f, 0.001252f, -0.016016f, -0.019795f, 0.025572f, -0.025284f, 0.019708f, 0.002124f, -0.031910f, 0.016140f, 0.029612f, -0.000348f, -0.008568f, -0.003551f, 0.002024f, 0.001984f, 0.020068f, -0.000825f, -0.015816f, -0.006174f, 0.017011f, -0.031515f, 0.007247f, -0.005082f, 0.025403f, 0.027486f, 0.017766f, 0.021564f, 0.027652f, 0.020413f, 0.006911f, -0.018020f, -0.021002f, 0.010172f, 0.013268f, -0.000762f, 0.011434f, 0.016406f, 0.042360f, -0.023931f, 0.026644f, -0.015836f, -0.010694f, 0.029656f, 0.004051f, -0.017372f, -0.015763f, -0.016014f, -0.026838f, -0.008809f, -0.013345f, 0.021334f, 0.000079f, -0.016688f, 0.008814f, 0.006069f, -0.004045f, 0.010115f, -0.020575f, 0.013350f, 0.000419f, -0.001689f, -0.002606f, 0.011369f, 0.001489f, 0.003134f, 0.011220f, -0.004664f, 0.001461f, 0.008707f, -0.013338f, 0.009273f, 0.000076f, 0.003566f, -0.006213f, 0.007424f, -0.003026f, 0.001024f, 0.009499f, 0.000205f, -0.002855f, 0.002704f, 0.006256f, 0.008626f, 0.013674f, 0.011673f, 0.003741f, -0.006393f, -0.005906f, -0.019953f, 0.003976f, + -0.016599f, -0.005426f, -0.007155f, -0.007366f, 0.008061f, -0.033324f, -0.005943f, 0.019385f, -0.023919f, 0.000756f, -0.015046f, -0.026325f, 0.038291f, 0.032725f, 0.027371f, 0.012968f, 0.007140f, 0.010766f, 0.028114f, 0.015523f, 0.028823f, -0.010674f, 0.024143f, -0.018187f, 0.029238f, 0.039257f, 0.024626f, 0.019622f, 0.010002f, 0.020268f, 0.020430f, -0.006071f, 0.040645f, 0.009755f, -0.024501f, 0.011625f, -0.024806f, -0.017068f, -0.005078f, -0.038595f, 0.000670f, -0.008230f, -0.010458f, -0.018764f, -0.009751f, -0.005391f, -0.001198f, -0.003808f, 0.001682f, 0.001613f, -0.022145f, -0.014631f, 0.004597f, -0.011699f, 0.009207f, 0.038009f, -0.019157f, -0.001547f, -0.003606f, 0.001405f, -0.018163f, 0.009792f, -0.008722f, 0.029423f, 0.006268f, 0.017575f, 0.027521f, 0.004699f, -0.001821f, -0.018146f, -0.040395f, 0.005336f, 0.030080f, 0.021832f, -0.005685f, -0.026923f, 0.022692f, 0.002393f, 0.013672f, -0.034468f, -0.024743f, -0.022696f, -0.034180f, -0.021161f, -0.025006f, 0.011654f, 0.003703f, 0.008756f, 0.011414f, 0.015787f, -0.007715f, 0.016070f, 0.018270f, 0.000583f, 0.009823f, -0.005856f, + -0.012128f, -0.012478f, -0.013131f, -0.005247f, -0.009575f, -0.000574f, 0.002885f, -0.001254f, 0.000863f, 0.002448f, -0.011115f, -0.010260f, -0.017598f, -0.006013f, -0.004089f, -0.009770f, 0.003857f, 0.001477f, -0.005210f, -0.015894f, -0.007336f, -0.005853f, -0.004124f, 0.013296f, 0.004037f, -0.005776f, -0.007363f, -0.002653f, -0.019123f, 0.005235f, -0.003920f, 0.009892f, 0.001095f, -0.005988f, -0.011297f, 0.011774f, 0.016734f, -0.057130f, -0.036651f, -0.017358f, 0.040815f, 0.029814f, -0.022179f, 0.025561f, 0.022980f, 0.019694f, 0.019190f, -0.019111f, 0.001929f, 0.011160f, -0.019099f, -0.057538f, -0.010539f, -0.015908f, -0.035340f, 0.003277f, -0.012065f, -0.008953f, 0.010792f, 0.006516f, -0.007866f, 0.001791f, 0.027001f, 0.028980f, -0.053109f, 0.012730f, 0.002709f, 0.024676f, 0.008372f, 0.001449f, -0.033065f, 0.010209f, -0.008468f, -0.009073f, -0.022730f, -0.016801f, 0.042573f, -0.019199f, -0.000742f, 0.005192f, -0.011222f, 0.047188f, 0.022379f, -0.020829f, -0.012640f, -0.036702f, -0.005275f, 0.035332f, 0.010377f, 0.010783f, -0.011511f, 0.021642f, -0.005014f, -0.009140f, 0.019858f, -0.011582f, + 0.032892f, -0.007565f, 0.024525f, -0.049698f, -0.016812f, 0.028722f, 0.007100f, -0.004423f, 0.008118f, -0.054988f, -0.025994f, 0.008556f, -0.021915f, 0.008605f, 0.002342f, 0.006308f, 0.033939f, -0.012475f, 0.013766f, -0.002488f, -0.027372f, -0.004582f, 0.020944f, 0.030337f, -0.000834f, -0.012430f, -0.023169f, 0.000848f, -0.032397f, -0.010380f, 0.002967f, 0.038500f, 0.034318f, 0.004885f, 0.014514f, 0.004525f, -0.005557f, 0.019206f, 0.014501f, -0.007284f, 0.015905f, 0.012134f, 0.006483f, -0.012925f, -0.000738f, -0.006568f, 0.011668f, 0.008300f, 0.010405f, -0.000563f, -0.015409f, 0.014996f, 0.000869f, -0.006958f, -0.014991f, -0.000410f, -0.001022f, -0.014012f, 0.010270f, -0.010083f, -0.016361f, 0.019079f, -0.007268f, -0.005961f, -0.008154f, 0.004568f, 0.002897f, 0.015415f, 0.003536f, -0.002129f, 0.006460f, 0.009737f, -0.016551f, 0.005101f, 0.011153f, -0.025692f, -0.070820f, -0.006860f, -0.007878f, -0.008552f, 0.011711f, -0.029370f, 0.056846f, -0.011056f, 0.003209f, 0.061073f, -0.072144f, -0.008405f, -0.013564f, -0.007780f, -0.082751f, 0.003813f, -0.012252f, -0.016979f, 0.028942f, -0.029503f, + 0.005031f, 0.004607f, 0.014116f, -0.003494f, -0.029791f, 0.019926f, -0.019366f, 0.042476f, -0.006873f, -0.050047f, -0.003044f, -0.002554f, -0.024239f, -0.050431f, 0.022803f, 0.024307f, -0.040920f, 0.032946f, -0.036963f, -0.030093f, -0.017418f, 0.002340f, 0.003533f, 0.004647f, 0.024456f, -0.005490f, -0.022337f, -0.054957f, 0.011500f, -0.073966f, -0.038325f, -0.026069f, -0.058047f, -0.035628f, -0.016415f, -0.004575f, -0.027025f, 0.040832f, 0.043458f, 0.008565f, -0.012544f, 0.046507f, 0.021840f, -0.006433f, -0.010311f, 0.033191f, 0.025624f, -0.012696f, 0.045629f, -0.039008f, -0.019090f, 0.048434f, 0.023644f, 0.068347f, -0.037527f, -0.043698f, 0.011406f, -0.033490f, 0.035296f, 0.002695f, 0.012517f, 0.064886f, -0.036000f, -0.040040f, -0.013992f, 0.012626f, 0.015407f, 0.015525f, 0.017240f, 0.018013f, -0.019940f, 0.006935f, 0.003471f, -0.002553f, -0.001986f, -0.014723f, -0.010484f, 0.018113f, -0.020462f, -0.002187f, 0.004574f, -0.011218f, 0.002958f, -0.011489f, -0.000391f, -0.002293f, 0.004678f, -0.017867f, 0.008857f, 0.019613f, 0.006502f, 0.003793f, 0.023335f, 0.015668f, -0.001285f, -0.023448f, + 0.020658f, 0.003881f, -0.007375f, -0.017846f, 0.021416f, 0.001829f, 0.000954f, 0.011500f, 0.016650f, -0.022449f, 0.011216f, 0.005446f, -0.014827f, -0.007695f, -0.023897f, 0.015405f, -0.003234f, -0.026166f, -0.013628f, 0.006958f, 0.055360f, 0.031944f, -0.005508f, 0.075597f, -0.009033f, 0.031181f, -0.035927f, 0.044223f, 0.041108f, -0.003539f, -0.033619f, 0.003745f, 0.011683f, -0.018353f, 0.019327f, -0.026889f, -0.000782f, -0.008106f, -0.009241f, -0.030587f, -0.022875f, -0.013794f, -0.002219f, -0.009753f, -0.024542f, 0.036187f, 0.024348f, 0.006900f, -0.010376f, 0.006360f, 0.034301f, 0.016532f, 0.025127f, 0.016241f, -0.019249f, -0.029077f, 0.058891f, -0.007523f, -0.032655f, -0.013260f, -0.014191f, -0.007504f, 0.042552f, 0.002075f, -0.033300f, -0.012378f, -0.082356f, -0.019978f, -0.009892f, 0.050809f, 0.034658f, -0.099520f, -0.043227f, -0.024028f, -0.000759f, 0.005250f, -0.040074f, 0.029569f, 0.015442f, 0.025767f, 0.049799f, -0.065196f, 0.063797f, 0.046225f, -0.021029f, -0.043700f, 0.002581f, -0.010714f, 0.016833f, 0.058542f, -0.030407f, -0.033545f, 0.047332f, -0.055733f, -0.062852f, -0.024987f, + 0.006230f, -0.017704f, -0.068846f, -0.027529f, -0.022373f, 0.001293f, 0.003602f, -0.019422f, -0.001539f, 0.003189f, 0.000680f, 0.006077f, -0.043547f, -0.015030f, -0.014512f, 0.003013f, 0.012007f, -0.003006f, -0.013997f, -0.007868f, 0.004507f, 0.022363f, 0.023574f, -0.003087f, -0.020652f, -0.005143f, 0.030037f, 0.001992f, -0.007917f, 0.006482f, -0.040939f, -0.011836f, -0.019340f, 0.002897f, 0.007017f, -0.039452f, -0.040443f, 0.010263f, 0.035114f, -0.014910f, 0.022981f, 0.007284f, -0.011330f, -0.003119f, 0.009339f, 0.007235f, -0.003310f, 0.007187f, 0.052112f, 0.007196f, 0.019493f, -0.040642f, -0.064589f, 0.093259f, 0.046468f, 0.004387f, 0.005953f, -0.020790f, -0.054971f, 0.019388f, -0.004422f, 0.047160f, 0.010356f, 0.017600f, 0.051381f, 0.028657f, -0.000740f, -0.005345f, 0.008552f, -0.031270f, -0.026004f, -0.033258f, -0.018808f, 0.031078f, -0.008633f, 0.002102f, 0.038513f, -0.006500f, 0.016802f, -0.053580f, -0.048437f, -0.032607f, 0.027737f, 0.011496f, -0.001959f, 0.012924f, -0.017258f, -0.048170f, 0.060818f, -0.057799f, 0.026521f, 0.027686f, 0.021512f, 0.009820f, 0.036748f, -0.023687f, + -0.059453f, 0.043951f, 0.124047f, -0.021769f, 0.059905f, -0.072163f, -0.039207f, 0.044818f, 0.025954f, -0.066990f, -0.019122f, -0.005537f, 0.058060f, -0.014368f, -0.006538f, -0.091137f, -0.058888f, -0.020843f, -0.067254f, 0.056153f, 0.059474f, 0.094357f, -0.083703f, 0.035998f, 0.010199f, -0.046287f, -0.002932f, -0.002082f, -0.096678f, 0.068883f, -0.028905f, 0.032587f, -0.010174f, 0.005472f, 0.130203f, -0.035126f, 0.044978f, 0.030039f, -0.031910f, 0.057001f, -0.000392f, -0.010822f, 0.003152f, 0.014813f, 0.036418f, 0.022637f, 0.014280f, -0.001144f, 0.034437f, -0.032459f, -0.016430f, 0.002909f, 0.008329f, 0.016318f, -0.009324f, 0.028278f, 0.003385f, 0.012672f, -0.005891f, 0.021487f, -0.002223f, -0.031000f, 0.017495f, -0.038116f, -0.023102f, -0.008685f, 0.015956f, -0.003853f, 0.019126f, 0.045089f, 0.068753f, 0.050246f, 0.013242f, 0.032436f, -0.019097f, 0.016658f, -0.001726f, -0.001082f, -0.003515f, 0.007048f, -0.014936f, 0.019353f, -0.018407f, -0.083125f, -0.047130f, -0.001718f, -0.012589f, -0.027861f, 0.010101f, 0.026801f, 0.002781f, -0.029446f, -0.001478f, -0.028228f, 0.076450f, -0.023484f, + 0.001759f, 0.057947f, -0.003249f, -0.059454f, -0.041353f, -0.040639f, -0.017993f, -0.021639f, 0.063695f, 0.006596f, 0.010515f, 0.031740f, -0.017444f, -0.017779f, -0.010689f, -0.018124f, -0.038828f, -0.009130f, 0.073013f, 0.023554f, 0.017365f, -0.048518f, 0.017914f, 0.003799f, -0.034540f, -0.004036f, -0.017300f, 0.079212f, -0.062637f, -0.054089f, -0.019043f, 0.009879f, -0.018647f, 0.002413f, 0.021407f, -0.041241f, -0.011057f, 0.067102f, -0.054051f, 0.009496f, -0.013527f, -0.032874f, -0.057329f, -0.043826f, 0.002151f, -0.079864f, -0.096547f, 0.022920f, 0.019808f, 0.015505f, -0.086269f, 0.066637f, 0.080981f, -0.027492f, -0.023419f, 0.005046f, -0.003348f, -0.018255f, -0.044811f, 0.032479f, 0.122185f, 0.031707f, -0.030163f, 0.000586f, 0.019418f, 0.040748f, 0.011057f, -0.072302f, -0.064454f, 0.069839f, -0.013358f, -0.028594f, -0.042102f, 0.014490f, 0.079860f, 0.024441f, -0.025234f, 0.014706f, -0.003089f, -0.014235f, -0.006975f, -0.004289f, 0.035340f, 0.019515f, -0.012004f, -0.019564f, 0.015999f, 0.009255f, -0.002964f, -0.008110f, 0.012934f, -0.018925f, 0.011746f, 0.030594f, -0.002814f, -0.016965f, + -0.005088f, -0.010934f, -0.018532f, -0.034315f, 0.005002f, 0.026136f, -0.017505f, -0.021658f, 0.010683f, -0.027026f, 0.000160f, -0.043943f, 0.021081f, 0.027334f, 0.069955f, -0.022310f, -0.009529f, -0.029008f, -0.029714f, 0.008351f, 0.015414f, 0.029058f, -0.003505f, -0.006343f, -0.029334f, 0.011750f, 0.007223f, 0.008754f, 0.018503f, 0.021286f, -0.026427f, -0.069767f, 0.019325f, 0.027253f, -0.103287f, 0.056581f, 0.002475f, -0.029451f, 0.009949f, 0.037693f, -0.053353f, 0.032971f, -0.049537f, 0.013382f, -0.002821f, -0.025001f, -0.013830f, -0.006774f, -0.036450f, 0.026151f, 0.022955f, -0.001069f, 0.012691f, 0.001587f, 0.020318f, 0.026412f, 0.025622f, 0.037883f, 0.032627f, -0.020143f, 0.005149f, -0.041338f, 0.043905f, -0.033890f, 0.010815f, -0.006531f, 0.009020f, 0.002150f, -0.031221f, 0.028478f, -0.015780f, -0.030256f, 0.063571f, -0.050789f, 0.015349f, -0.014639f, -0.025149f, 0.025632f, -0.006514f, 0.007617f, 0.039654f, -0.047799f, 0.002037f, -0.058567f, -0.115325f, -0.002922f, 0.036884f, -0.013839f, 0.148471f, 0.030235f, -0.057877f, 0.016332f, -0.080786f, 0.028125f, 0.057974f, 0.068396f, + -0.023401f, -0.013447f, -0.089823f, -0.103041f, -0.008570f, -0.064222f, 0.015329f, -0.004011f, -0.055991f, -0.013086f, -0.027674f, -0.061350f, 0.050412f, 0.099032f, -0.027676f, 0.007042f, 0.021456f, -0.026194f, 0.030726f, 0.039087f, -0.027010f, 0.004600f, 0.000197f, -0.049213f, 0.024715f, 0.004230f, 0.015064f, 0.018106f, -0.034722f, 0.013711f, -0.018376f, -0.027862f, -0.031553f, 0.026995f, -0.019543f, 0.011154f, -0.030499f, -0.010946f, -0.001990f, -0.037223f, 0.036650f, -0.023556f, 0.007408f, 0.011263f, -0.034681f, -0.005557f, 0.026905f, -0.003058f, 0.003914f, 0.006090f, -0.010067f, 0.016598f, 0.034700f, -0.004011f, 0.020193f, 0.023831f, -0.029485f, -0.055993f, 0.019077f, 0.008003f, 0.032501f, 0.038990f, -0.050666f, -0.049683f, 0.008807f, -0.073590f, 0.015131f, -0.005305f, -0.042969f, 0.019373f, -0.027914f, -0.018765f, -0.034685f, 0.017728f, -0.037766f, 0.048379f, -0.005173f, 0.017955f, -0.011173f, 0.064967f, -0.017667f, 0.035713f, -0.000613f, 0.042567f, -0.011889f, -0.021384f, 0.013852f, -0.024209f, -0.025685f, 0.003568f, 0.048333f, 0.031177f, -0.032935f, 0.035249f, -0.024705f, -0.037723f, + 0.010652f, 0.051809f, -0.019903f, -0.020983f, 0.027658f, 0.012510f, -0.025767f, 0.002987f, 0.035191f, -0.014569f, -0.033853f, 0.018552f, 0.014117f, 0.021735f, 0.039636f, 0.008423f, -0.023905f, -0.007751f, 0.087066f, 0.091566f, -0.025263f, -0.075616f, 0.058101f, -0.025202f, 0.016406f, 0.008364f, 0.098053f, 0.013607f, -0.050852f, -0.018460f, -0.012298f, 0.002899f, 0.015208f, 0.023806f, 0.031901f, -0.037700f, 0.012206f, 0.008763f, 0.056885f, -0.014019f, 0.040100f, 0.043246f, 0.023913f, 0.020716f, 0.012486f, 0.034481f, -0.032811f, 0.037096f, 0.047055f, 0.034076f, 0.005818f, -0.066372f, -0.009850f, -0.042733f, 0.002097f, 0.029028f, 0.009799f, -0.014466f, -0.023271f, -0.013479f, -0.003609f, -0.001479f, 0.012331f, -0.013570f, 0.003875f, -0.001209f, -0.010306f, 0.020507f, 0.008043f, -0.017940f, -0.008433f, -0.004426f, 0.024917f, 0.000234f, 0.005231f, -0.023594f, -0.016907f, -0.031375f, -0.014724f, -0.001669f, -0.002838f, 0.000697f, -0.005343f, -0.028078f, 0.007489f, -0.009408f, -0.004462f, 0.004498f, -0.007724f, -0.000107f, -0.024374f, -0.005550f, 0.001237f, 0.000694f, 0.000735f, -0.005952f, + -0.005975f, -0.001828f, -0.009515f, -0.013492f, 0.103720f, 0.043080f, -0.046302f, 0.010892f, -0.048388f, -0.026835f, -0.002973f, 0.017265f, -0.007414f, 0.037489f, -0.044719f, -0.001782f, 0.018164f, -0.001896f, 0.018877f, -0.003069f, 0.006869f, 0.003949f, -0.031937f, -0.010529f, 0.008875f, -0.030535f, -0.029988f, 0.002175f, 0.008205f, -0.021824f, 0.015742f, 0.014450f, -0.008647f, -0.015538f, -0.002026f, 0.002908f, -0.004910f, 0.012363f, 0.003674f, 0.009659f, -0.012910f, -0.006024f, 0.024044f, -0.000360f, 0.001628f, 0.011042f, -0.007218f, 0.012258f, -0.011646f, -0.022772f, -0.014125f, 0.022748f, -0.017955f, -0.013886f, 0.001862f, -0.018593f, -0.019245f, 0.027758f, -0.027561f, 0.044098f, 0.010194f, -0.020093f, 0.019922f, 0.002715f, -0.032516f, 0.002507f, -0.005448f, -0.006156f, 0.016111f, -0.000881f, -0.018884f, 0.037460f, -0.022232f, -0.009185f, 0.020059f, 0.005920f, -0.007772f, 0.000598f, 0.006537f, -0.001005f, -0.001112f, -0.004288f, 0.009187f, 0.015344f, -0.000118f, -0.026599f, 0.019265f, -0.013902f, -0.001535f, 0.022062f, -0.000984f, -0.007243f, -0.000422f, -0.019768f, 0.009881f, 0.006334f, + -0.001657f, 0.000051f, 0.008415f, -0.019259f, 0.001881f, -0.006849f, 0.002411f, 0.007433f, 0.002514f, -0.008405f, 0.019024f, -0.028529f, 0.004199f, 0.002948f, -0.001489f, 0.003107f, -0.003631f, -0.016274f, 0.018044f, -0.008516f, 0.013038f, -0.000169f, -0.001532f, 0.016139f, 0.006686f, -0.014206f, 0.005739f, -0.007350f, -0.005502f, 0.002794f, 0.010978f, 0.010269f, -0.003655f, -0.014027f, 0.007507f, -0.008144f, -0.062538f, -0.075206f, 0.063432f, 0.256890f, 0.100519f, 0.117856f, 0.001619f, -0.240515f, -0.177107f, -0.092588f, -0.141128f, 0.063333f, 0.121575f, 0.050131f, 0.214906f, 0.121602f, -0.008052f, 0.050517f, -0.108605f, -0.219157f, -0.087427f, -0.152215f, -0.024295f, 0.105483f, 0.088892f, 0.080451f, 0.133978f, 0.082660f, 0.022772f, 0.036819f, -0.009925f, -0.155929f, -0.068869f, -0.056142f, -0.215427f, 0.039996f, 0.028306f, -0.095660f, 0.155273f, 0.153633f, -0.005179f, 0.194377f, 0.095623f, -0.090239f, 0.060372f, -0.089711f, -0.186731f, -0.014781f, -0.112766f, -0.163426f, 0.028961f, 0.017530f, -0.009686f, 0.152460f, 0.147051f, 0.087823f, 0.130914f, 0.079562f, -0.050797f, -0.057295f, + -0.101878f, -0.174692f, -0.128853f, -0.061477f, -0.057573f, 0.031397f, 0.098773f, 0.067500f, 0.108513f, 0.163771f, 0.063802f, -0.021477f, -0.020377f, -0.113199f, -0.091342f, 0.008444f, -0.104862f, -0.047607f, 0.057076f, 0.014101f, 0.071424f, 0.057412f, -0.029101f, 0.019184f, -0.005761f, -0.039041f, 0.008794f, -0.017390f, -0.017533f, 0.036279f, 0.012716f, 0.015409f, 0.048360f, -0.027609f, -0.010579f, 0.026273f, -0.035757f, -0.029395f, 0.013845f, -0.085945f, -0.014121f, 0.029641f, -0.069150f, 0.034087f, 0.043547f, 0.004760f, 0.109045f, 0.103657f, 0.024047f, 0.042180f, -0.029972f, -0.092328f, -0.046129f, -0.122923f, -0.139469f, -0.079078f, -0.033426f, 0.026701f, 0.133573f, 0.154601f, 0.162073f, 0.143875f, 0.082390f, -0.017625f, -0.089962f, -0.142717f, -0.199087f, -0.170387f, -0.093493f, -0.024013f, 0.080935f, 0.144724f, 0.144592f, 0.129207f, 0.084328f, -0.015257f, -0.025241f, -0.040827f, -0.061691f, -0.043854f, -0.038289f, -0.045626f, -0.024071f, -0.012222f, -0.010065f, 0.010202f, 0.028290f, 0.036998f, 0.048388f, 0.044559f, 0.035706f, 0.016673f, 0.004294f, -0.014880f, -0.019821f, -0.021536f, + -0.012019f, -0.006727f, 0.000043f, -0.001458f}, + {0.001000f, 0.006407f, -0.008711f, -0.007089f, -0.001217f, 0.006868f, 0.010120f, -0.004765f, 0.005910f, -0.003272f, -0.008428f, -0.002310f, -0.004711f, 0.002771f, -0.001160f, -0.004072f, 0.003734f, 0.005669f, 0.001270f, 0.006853f, -0.012556f, -0.013566f, -0.008717f, 0.001264f, -0.000034f, -0.002318f, 0.000654f, 0.004143f, -0.001357f, 0.005594f, 0.004620f, -0.005925f, 0.002255f, -0.000442f, 0.007242f, 0.006681f, 0.002518f, -0.007095f, 0.004652f, -0.004226f, 0.002365f, 0.004659f, -0.011341f, 0.012393f, 0.018195f, 0.002385f, 0.008244f, -0.006697f, -0.001356f, -0.006287f, -0.003271f, 0.005641f, -0.001887f, -0.006502f, -0.001728f, -0.004092f, 0.003132f, -0.003991f, -0.003635f, 0.000369f, 0.003323f, -0.003308f, -0.003743f, -0.001616f, 0.006461f, 0.005826f, -0.004924f, -0.001805f, -0.005818f, 0.001344f, 0.007676f, 0.002140f, -0.002817f, -0.003664f, 0.002885f, -0.001026f, -0.005238f, -0.001905f, -0.003539f, -0.000502f, -0.001900f, 0.003043f, 0.002838f, 0.001534f, -0.001687f, -0.002313f, 0.005172f, -0.000695f, 0.001403f, 0.002694f, -0.000777f, -0.000065f, -0.001079f, 0.001587f, 0.000204f, 0.000405f, + -0.001521f, 0.000222f, -0.000486f, -0.001497f, 0.000068f, -0.000225f, 0.001112f, 0.002736f, -0.001522f, 0.000644f, -0.000301f, 0.001337f, 0.001619f, -0.000384f, -0.000676f, -0.000331f, -0.000091f, -0.001445f, -0.000618f, 0.000663f, -0.000565f, 0.000288f, -0.000040f, 0.001225f, 0.000256f, 0.027993f, 0.012883f, -0.000972f, 0.005860f, 0.005320f, -0.006716f, -0.003295f, 0.007761f, 0.003528f, 0.008446f, -0.006146f, 0.012283f, 0.004611f, -0.012131f, 0.009618f, 0.000505f, -0.000225f, -0.006407f, 0.007035f, -0.013118f, -0.011257f, -0.002421f, -0.004008f, -0.002189f, -0.004027f, 0.001505f, -0.002449f, -0.005465f, -0.003951f, 0.004545f, -0.004989f, 0.003168f, 0.002000f, 0.001258f, -0.005507f, 0.007691f, -0.016152f, -0.002862f, -0.000103f, -0.002854f, -0.002044f, 0.001364f, 0.002996f, -0.005206f, 0.004099f, -0.006304f, 0.005984f, 0.001868f, 0.001294f, 0.006157f, -0.004389f, -0.001088f, 0.002486f, 0.009651f, 0.002375f, 0.004025f, -0.002259f, -0.008448f, -0.011769f, 0.002118f, 0.006348f, 0.008280f, -0.003441f, -0.013176f, 0.001923f, -0.005415f, -0.003694f, -0.003086f, 0.003608f, 0.000336f, 0.012805f, + -0.000432f, 0.004287f, 0.002467f, -0.001980f, -0.003395f, -0.003619f, -0.013467f, -0.003980f, -0.002247f, -0.001865f, -0.002623f, 0.002454f, 0.006664f, 0.001834f, 0.006318f, -0.000115f, -0.000661f, -0.002083f, 0.001694f, 0.002278f, -0.000701f, -0.002646f, 0.002200f, -0.001387f, 0.000828f, -0.001185f, 0.001113f, -0.001978f, -0.001254f, 0.001769f, 0.000526f, 0.000974f, -0.000762f, 0.000577f, -0.001297f, 0.015061f, 0.003529f, -0.012754f, -0.014423f, 0.003940f, -0.004374f, -0.011987f, 0.013617f, -0.006690f, -0.002187f, -0.001873f, 0.010689f, 0.002224f, -0.006135f, 0.007458f, -0.005755f, 0.011282f, -0.015575f, -0.010320f, 0.012482f, -0.012995f, -0.013060f, -0.005277f, 0.010676f, 0.004643f, 0.005135f, -0.001264f, 0.009572f, 0.005753f, -0.000946f, -0.012598f, 0.003446f, -0.003515f, 0.004571f, 0.003976f, 0.003472f, 0.010904f, 0.002972f, -0.010777f, 0.001035f, 0.007473f, 0.011047f, 0.003691f, -0.005978f, -0.001441f, -0.008839f, 0.003784f, -0.015716f, -0.000632f, 0.017076f, 0.000898f, 0.001877f, -0.008748f, -0.010758f, 0.001646f, 0.002414f, 0.012510f, -0.002671f, 0.001066f, 0.001375f, -0.001863f, + 0.001346f, 0.004152f, 0.000805f, 0.008800f, -0.002328f, 0.005843f, 0.000930f, 0.001575f, 0.001125f, 0.010329f, 0.000499f, -0.001446f, 0.001979f, -0.002208f, -0.006918f, -0.003724f, -0.007133f, -0.000166f, 0.013086f, 0.002731f, -0.004183f, -0.001459f, -0.007350f, 0.004230f, -0.005736f, -0.004078f, 0.001494f, 0.000225f, 0.000520f, -0.003343f, -0.004662f, -0.000969f, 0.001263f, -0.001581f, 0.002813f, -0.000287f, 0.000086f, 0.002684f, 0.001761f, 0.002705f, 0.002315f, -0.000007f, 0.000980f, -0.002154f, 0.000222f, -0.001907f, -0.001974f, 0.001487f, 0.001851f, 0.003110f, 0.002343f, -0.001459f, -0.000273f, 0.001665f, -0.001084f, -0.002316f, 0.001447f, 0.000377f, -0.034626f, -0.022715f, -0.004934f, 0.003709f, 0.005639f, 0.000523f, 0.000012f, -0.013307f, -0.000759f, -0.002950f, -0.002157f, 0.000226f, -0.003310f, -0.001592f, -0.009734f, 0.005018f, -0.020547f, -0.007601f, 0.001912f, -0.004205f, -0.006234f, -0.003675f, -0.011661f, -0.006014f, -0.004805f, -0.005634f, 0.002663f, -0.009148f, -0.004924f, 0.011184f, 0.007406f, 0.000695f, 0.005476f, 0.003906f, -0.003611f, -0.007603f, 0.004549f, 0.016735f, + 0.001981f, 0.002044f, -0.006545f, -0.005980f, 0.005018f, -0.014447f, -0.007578f, 0.015888f, -0.014498f, 0.004348f, -0.003395f, -0.007407f, 0.003453f, 0.001021f, -0.003973f, 0.000893f, 0.002532f, -0.005098f, 0.000132f, -0.001049f, 0.009923f, 0.008679f, 0.001375f, 0.002305f, 0.004353f, -0.000334f, -0.001831f, -0.003438f, -0.020149f, 0.009758f, 0.006201f, -0.005552f, -0.000132f, -0.008509f, -0.002216f, 0.001168f, -0.006104f, 0.002774f, -0.007424f, -0.004215f, -0.008657f, -0.013009f, 0.008628f, -0.002500f, 0.000476f, -0.010998f, -0.002646f, 0.001391f, 0.001913f, -0.002917f, -0.000411f, -0.000630f, -0.002931f, -0.005700f, 0.001004f, -0.002937f, 0.002542f, -0.000473f, -0.001333f, -0.001188f, -0.000495f, 0.002758f, 0.000584f, -0.004222f, 0.000898f, -0.001283f, -0.000246f, 0.001334f, 0.000734f, -0.001111f, 0.001098f, -0.003316f, 0.001876f, -0.003015f, -0.000828f, -0.029965f, 0.004614f, 0.007031f, -0.001894f, -0.002625f, -0.016598f, -0.006788f, 0.004543f, -0.014815f, -0.014207f, 0.002902f, -0.013516f, -0.006953f, -0.000356f, -0.008153f, 0.004589f, -0.006427f, 0.010119f, -0.005347f, -0.003527f, 0.003199f, + 0.007070f, 0.013110f, 0.008175f, -0.014612f, -0.000814f, -0.001085f, 0.007181f, 0.010803f, 0.018333f, -0.008159f, -0.007242f, 0.009514f, -0.010056f, 0.002326f, 0.002850f, 0.015509f, 0.005655f, 0.008656f, -0.011575f, -0.005104f, -0.015793f, 0.012466f, 0.013019f, 0.015005f, -0.000275f, -0.003229f, -0.010096f, -0.002110f, 0.010047f, -0.004681f, -0.006521f, -0.005969f, -0.007940f, 0.001706f, 0.001809f, 0.002367f, -0.010853f, -0.000145f, -0.010636f, -0.000573f, -0.001637f, 0.004313f, 0.003673f, -0.003249f, -0.004861f, -0.013416f, -0.000844f, -0.001075f, 0.008206f, -0.005182f, 0.013676f, -0.007833f, 0.001647f, 0.006369f, 0.012416f, -0.009656f, 0.002820f, 0.006542f, -0.011289f, 0.005620f, -0.000073f, 0.013815f, 0.004535f, 0.003092f, 0.008419f, -0.000861f, 0.002250f, 0.006531f, 0.002565f, 0.000069f, -0.002494f, 0.000106f, 0.002673f, -0.000894f, 0.003416f, 0.005349f, 0.004294f, -0.002028f, 0.002343f, 0.000337f, -0.001540f, 0.002139f, 0.002730f, -0.000005f, 0.001200f, 0.003422f, 0.002426f, 0.002759f, 0.001231f, -0.001349f, -0.002324f, 0.002637f, -0.002489f, 0.002625f, -0.001480f, 0.000190f, + 0.003200f, 0.002508f, -0.000888f, 0.037072f, 0.031805f, -0.001155f, 0.000957f, 0.016528f, 0.002267f, 0.008088f, -0.004950f, 0.009066f, -0.006986f, 0.016685f, 0.005726f, 0.000012f, 0.003418f, 0.001151f, 0.021147f, 0.014259f, -0.013849f, -0.011556f, 0.004502f, 0.002218f, -0.004433f, -0.003027f, 0.002689f, 0.010118f, 0.007534f, 0.004608f, 0.001094f, 0.005331f, -0.003523f, -0.000300f, 0.011653f, -0.012817f, 0.005144f, 0.015529f, 0.011673f, 0.021120f, -0.002074f, -0.003241f, -0.001837f, 0.001308f, -0.006743f, 0.022952f, 0.021069f, 0.015022f, -0.006999f, -0.002125f, 0.008963f, 0.007268f, -0.006424f, 0.001404f, 0.012061f, -0.004540f, -0.005639f, 0.007636f, -0.022333f, -0.002632f, 0.001241f, 0.003249f, -0.007556f, -0.014642f, 0.005968f, 0.009949f, -0.011875f, -0.004465f, -0.012914f, 0.004772f, 0.000912f, -0.002762f, -0.002774f, -0.011316f, 0.018887f, -0.005020f, 0.002544f, -0.019258f, -0.004557f, -0.009225f, 0.022459f, -0.004020f, -0.003081f, 0.009942f, 0.004627f, -0.000124f, -0.007163f, 0.006583f, -0.004712f, -0.006759f, 0.010415f, 0.009628f, -0.000143f, 0.005985f, 0.000223f, -0.002839f, + 0.005528f, -0.000937f, 0.002160f, -0.001872f, -0.002434f, -0.000702f, 0.004302f, -0.003277f, -0.002432f, -0.000232f, -0.003255f, 0.001070f, -0.002934f, -0.001794f, 0.000284f, -0.000635f, 0.004275f, 0.000030f, 0.001258f, 0.002618f, 0.002745f, 0.000614f, 0.001423f, 0.002139f, 0.005697f, 0.000964f, 0.005370f, 0.000786f, 0.002663f, 0.003781f, 0.024407f, -0.000930f, 0.015419f, 0.021105f, -0.011152f, -0.025952f, 0.001077f, 0.019770f, -0.015302f, 0.013887f, -0.004141f, -0.018778f, -0.008688f, 0.018945f, -0.018505f, -0.016310f, 0.011879f, -0.018863f, 0.006277f, 0.009016f, 0.007394f, -0.005344f, 0.011422f, 0.003234f, 0.002136f, 0.007365f, -0.012069f, 0.016442f, 0.008077f, 0.007144f, -0.003404f, -0.001827f, 0.030622f, -0.010721f, 0.001891f, 0.007978f, 0.015404f, -0.020946f, -0.017258f, -0.016063f, 0.000608f, 0.001189f, -0.001087f, 0.009749f, 0.003022f, 0.017401f, 0.006992f, 0.010197f, -0.001651f, 0.001363f, -0.008615f, 0.015550f, -0.007055f, 0.015337f, -0.008379f, -0.013236f, 0.022810f, 0.018532f, -0.026258f, -0.023171f, -0.015241f, -0.011917f, 0.008250f, 0.001301f, -0.005328f, 0.012068f, + 0.013306f, -0.015993f, 0.009398f, -0.001305f, -0.032011f, -0.010584f, -0.016147f, -0.014649f, 0.005529f, -0.004996f, 0.010497f, -0.002436f, 0.001567f, 0.019126f, 0.019484f, -0.001827f, 0.005116f, -0.001716f, 0.003022f, 0.002737f, -0.006607f, 0.005469f, 0.001590f, -0.000271f, 0.016439f, 0.004922f, -0.000130f, 0.000470f, -0.002951f, 0.004838f, -0.000551f, 0.003176f, -0.003573f, -0.000221f, -0.003768f, 0.000976f, 0.004269f, 0.001324f, -0.000026f, -0.000541f, 0.003733f, 0.002386f, -0.002380f, 0.000297f, -0.000117f, 0.000536f, 0.001889f, 0.000810f, -0.013917f, -0.019393f, 0.011623f, -0.011125f, -0.008255f, -0.006887f, -0.022648f, -0.002313f, 0.010048f, -0.006049f, -0.001405f, -0.008189f, 0.018591f, 0.002950f, 0.011829f, 0.009135f, -0.015047f, 0.015498f, 0.023054f, -0.006993f, -0.009462f, 0.002569f, -0.004040f, 0.010057f, -0.028580f, 0.011029f, 0.024703f, -0.003194f, -0.008118f, -0.006952f, 0.010732f, 0.022250f, -0.005276f, 0.005695f, -0.009903f, 0.015279f, -0.018304f, -0.006901f, 0.003540f, -0.002750f, -0.014204f, 0.026238f, 0.018409f, 0.013913f, -0.005829f, -0.019568f, -0.002433f, -0.027845f, + 0.004823f, -0.001912f, -0.000900f, -0.000459f, -0.004222f, 0.015285f, 0.012832f, -0.019300f, 0.010860f, -0.011502f, 0.016071f, -0.001341f, -0.003257f, -0.001198f, -0.017020f, -0.003113f, -0.015526f, -0.034241f, -0.001558f, 0.004167f, 0.002720f, -0.013053f, -0.000441f, -0.003628f, -0.025674f, 0.000672f, 0.022313f, -0.013940f, 0.005849f, 0.007436f, -0.002816f, 0.001742f, -0.006588f, -0.003745f, 0.005252f, 0.006512f, 0.007011f, -0.001611f, -0.004461f, -0.001541f, -0.004795f, 0.004107f, 0.001952f, -0.003883f, -0.001151f, -0.003555f, -0.004039f, -0.000362f, -0.003627f, -0.005363f, 0.003436f, -0.000974f, -0.004222f, 0.003549f, -0.002949f, 0.002961f, 0.004268f, 0.001979f, 0.004104f, 0.003076f, -0.000017f, 0.002920f, 0.009237f, 0.004634f, -0.004547f, -0.002947f, -0.005224f, 0.000221f, -0.006768f, 0.003804f, -0.000363f, 0.005472f, -0.001360f, 0.004314f, -0.000666f, -0.002680f, 0.008731f, 0.004405f, -0.035975f, 0.002400f, 0.021192f, 0.011361f, -0.016320f, -0.013515f, 0.026532f, 0.005964f, 0.006068f, -0.005337f, 0.006966f, -0.000405f, -0.017519f, -0.004738f, -0.018407f, 0.008637f, -0.010911f, -0.001822f, + -0.017931f, -0.020132f, -0.026749f, 0.016689f, 0.011492f, -0.008758f, -0.009449f, 0.007421f, -0.024552f, -0.002387f, 0.001997f, 0.005831f, 0.010989f, 0.005167f, 0.000832f, -0.008676f, 0.003731f, -0.007978f, 0.006654f, -0.007658f, 0.004442f, 0.002154f, -0.007681f, -0.010289f, -0.019210f, -0.012898f, 0.005034f, -0.033152f, -0.008863f, 0.017986f, 0.009779f, -0.004114f, 0.043246f, -0.006372f, 0.020108f, 0.019622f, -0.031281f, 0.001918f, -0.004037f, -0.026668f, -0.013745f, -0.014735f, 0.000600f, 0.002979f, 0.029928f, -0.004923f, 0.003001f, 0.020066f, 0.015115f, -0.003650f, 0.020248f, -0.009663f, -0.007245f, -0.013565f, -0.017688f, -0.026080f, -0.009725f, 0.014685f, -0.028131f, -0.014543f, 0.021985f, 0.015807f, -0.009387f, 0.019849f, -0.008752f, -0.001499f, -0.000748f, 0.009488f, -0.006107f, 0.009456f, -0.005842f, 0.008074f, -0.002225f, 0.003269f, -0.003700f, 0.006513f, 0.006503f, 0.002643f, -0.000970f, 0.007368f, -0.004685f, -0.005591f, 0.005995f, -0.001745f, 0.006530f, 0.004540f, 0.003320f, 0.004193f, 0.002779f, 0.001116f, -0.010738f, -0.002121f, 0.000060f, 0.002936f, -0.002735f, -0.004711f, + -0.003680f, -0.010538f, 0.004127f, -0.000317f, 0.006756f, 0.003616f, 0.006583f, 0.004778f, 0.001538f, 0.002125f, 0.024777f, -0.004263f, 0.007960f, -0.012067f, 0.007113f, 0.010474f, -0.006393f, 0.008971f, -0.013785f, -0.015031f, 0.022996f, 0.012630f, 0.014845f, 0.018448f, -0.000101f, -0.015027f, 0.019866f, -0.017322f, -0.023402f, 0.000428f, 0.021936f, -0.003056f, -0.019013f, 0.002698f, 0.025820f, -0.003619f, 0.007090f, 0.002607f, 0.036227f, 0.002400f, 0.007755f, 0.017988f, -0.002271f, -0.009135f, -0.017351f, 0.002574f, -0.002402f, -0.016555f, 0.000550f, -0.009699f, 0.006660f, 0.024694f, 0.000254f, -0.014677f, -0.004383f, -0.013596f, -0.007300f, -0.001995f, -0.005785f, 0.003472f, -0.018302f, 0.019819f, -0.010374f, 0.033379f, -0.008361f, -0.023979f, 0.001400f, 0.001337f, 0.011810f, 0.005202f, 0.006402f, -0.024590f, -0.020049f, 0.014682f, -0.020877f, -0.028932f, 0.008382f, 0.005965f, -0.006586f, 0.031661f, -0.025579f, -0.035300f, 0.013313f, -0.024039f, 0.002364f, 0.003548f, 0.000732f, -0.023101f, -0.014147f, -0.030102f, 0.010438f, -0.002835f, -0.001626f, -0.004460f, -0.013449f, -0.005845f, + -0.010189f, -0.004828f, -0.003921f, 0.011807f, -0.008797f, 0.009129f, 0.003295f, 0.009422f, 0.001597f, 0.001441f, -0.012309f, -0.004254f, 0.003423f, -0.003717f, -0.013436f, 0.002935f, -0.002122f, -0.004991f, -0.004683f, 0.004583f, -0.005354f, 0.006094f, -0.003034f, 0.007343f, -0.001280f, 0.003893f, -0.006968f, -0.006604f, -0.000151f, 0.000839f, -0.002431f, 0.010962f, -0.009221f, -0.008530f, -0.005749f, 0.005495f, 0.005684f, -0.006837f, 0.001645f, -0.019432f, 0.010839f, 0.000967f, 0.026488f, 0.027530f, 0.040043f, 0.018103f, 0.008615f, 0.005428f, 0.013306f, -0.013669f, 0.015360f, -0.024150f, 0.011865f, -0.002463f, -0.001880f, -0.046195f, -0.017675f, -0.007672f, 0.015852f, -0.002076f, 0.003965f, 0.004892f, 0.004337f, -0.023660f, 0.024528f, -0.001026f, 0.010076f, 0.000708f, 0.022902f, -0.024546f, 0.017143f, -0.012118f, -0.000433f, 0.018329f, -0.020778f, -0.009454f, -0.022657f, -0.009179f, -0.025248f, 0.023028f, 0.017147f, 0.030972f, -0.001382f, 0.007250f, -0.028162f, 0.006344f, -0.029203f, 0.028410f, 0.008207f, -0.004738f, 0.027143f, 0.027452f, 0.014220f, -0.016526f, -0.024381f, -0.035415f, + -0.001434f, -0.012607f, -0.017667f, 0.019055f, -0.005146f, 0.044510f, -0.032927f, -0.012160f, 0.025632f, -0.026717f, -0.010459f, 0.006024f, 0.000587f, -0.003989f, -0.025427f, 0.011553f, 0.004457f, -0.014007f, 0.012754f, 0.026783f, -0.023007f, 0.025848f, 0.032430f, -0.009790f, -0.017012f, 0.013202f, -0.013035f, 0.012189f, 0.007968f, -0.013645f, -0.010439f, -0.002798f, -0.004115f, 0.018843f, 0.006489f, -0.003330f, -0.009112f, -0.015163f, -0.008424f, 0.004653f, -0.009542f, 0.004499f, 0.009213f, 0.005745f, -0.006395f, 0.004845f, -0.005223f, 0.007124f, 0.004776f, 0.007962f, 0.004958f, 0.000269f, -0.008429f, 0.005456f, 0.008540f, -0.008673f, 0.000406f, 0.002859f, 0.003211f, 0.007218f, 0.000718f, -0.001046f, 0.008113f, 0.009811f, 0.001980f, -0.004620f, -0.007698f, -0.000287f, 0.006900f, 0.008366f, 0.005866f, 0.041474f, -0.009440f, 0.005805f, -0.002177f, -0.013741f, 0.018667f, -0.006879f, 0.006941f, 0.002172f, 0.026718f, -0.008463f, 0.031148f, 0.000452f, 0.015524f, 0.013681f, -0.002419f, -0.010158f, -0.030266f, 0.014312f, 0.031575f, 0.001579f, -0.000182f, 0.021810f, 0.018598f, -0.001428f, + 0.003456f, 0.037464f, 0.023549f, -0.006892f, 0.008201f, 0.024597f, -0.006202f, -0.027440f, 0.000672f, -0.019954f, -0.003114f, -0.012689f, 0.001174f, -0.037927f, -0.011284f, -0.013890f, 0.000647f, 0.007803f, 0.007968f, 0.036674f, 0.040659f, 0.021325f, -0.028132f, -0.016715f, 0.022846f, 0.031939f, 0.006771f, -0.029408f, -0.004826f, -0.007066f, -0.030555f, -0.019417f, -0.023142f, 0.028128f, -0.010586f, 0.003739f, -0.028771f, 0.041684f, 0.030838f, -0.003613f, 0.012731f, 0.069277f, -0.003545f, -0.014381f, -0.026725f, -0.001769f, 0.018411f, 0.014453f, -0.010785f, 0.020768f, 0.041495f, -0.017964f, 0.026447f, -0.012240f, 0.008622f, -0.016852f, -0.009110f, -0.014569f, -0.018910f, -0.009876f, 0.012277f, -0.000238f, -0.004214f, 0.002815f, 0.005048f, 0.022208f, -0.002564f, 0.002027f, -0.000350f, -0.010570f, -0.001215f, -0.003922f, 0.001979f, 0.008840f, -0.005975f, -0.003015f, -0.007384f, -0.003692f, 0.002431f, 0.002512f, -0.002753f, -0.015055f, -0.013946f, -0.005001f, -0.017152f, -0.015137f, -0.002846f, 0.012917f, 0.011532f, 0.009798f, 0.002110f, -0.002630f, 0.000441f, 0.005316f, 0.004533f, -0.002146f, + 0.003062f, 0.001996f, 0.021084f, 0.001691f, -0.013155f, -0.018137f, -0.029737f, 0.038705f, -0.024188f, 0.029121f, -0.021223f, -0.032439f, 0.001814f, 0.040096f, 0.026224f, -0.030155f, -0.019723f, 0.006600f, 0.006187f, 0.013359f, -0.002126f, 0.026630f, 0.014577f, 0.035185f, -0.012721f, -0.006258f, -0.001037f, -0.007191f, -0.033987f, -0.025534f, -0.007688f, 0.035365f, 0.007633f, 0.002476f, 0.001408f, -0.033588f, -0.037670f, -0.029602f, 0.015315f, 0.016945f, -0.012762f, -0.008884f, 0.003492f, 0.003763f, -0.020013f, 0.005475f, 0.037815f, 0.006255f, 0.023750f, 0.022826f, 0.016826f, 0.040046f, 0.058157f, 0.018689f, 0.001168f, 0.007990f, 0.023057f, -0.012468f, -0.006287f, 0.015038f, -0.005076f, 0.007869f, -0.005214f, 0.024671f, 0.009025f, 0.017362f, -0.004787f, -0.007048f, 0.012863f, 0.033080f, -0.002301f, -0.027828f, 0.017695f, -0.043333f, -0.049678f, -0.017455f, 0.025894f, -0.017040f, -0.049133f, -0.030526f, -0.012412f, 0.017572f, 0.012400f, -0.027058f, 0.047918f, -0.015791f, -0.033401f, 0.008321f, 0.013189f, -0.011457f, 0.016717f, -0.017732f, -0.006705f, 0.005749f, 0.004588f, -0.009543f, + 0.008540f, 0.001127f, 0.015172f, -0.008826f, -0.017954f, -0.010986f, 0.003091f, -0.004485f, -0.003573f, -0.001941f, 0.000200f, -0.001970f, 0.012305f, -0.002628f, 0.002093f, -0.005493f, 0.005699f, 0.009570f, 0.002023f, 0.009146f, 0.003057f, -0.015627f, -0.006622f, -0.000504f, -0.012994f, -0.015963f, 0.007437f, 0.010239f, -0.008421f, -0.017004f, -0.018037f, 0.006788f, 0.003017f, -0.001397f, 0.011658f, -0.007370f, 0.015665f, -0.069447f, 0.003697f, 0.035253f, -0.006557f, -0.008223f, 0.042689f, -0.022888f, -0.023753f, -0.030152f, -0.010090f, -0.010167f, -0.020201f, 0.005996f, 0.009710f, 0.016509f, 0.011550f, -0.009627f, -0.007716f, -0.003379f, -0.008638f, 0.002891f, 0.007949f, 0.034833f, -0.015027f, -0.045067f, 0.023997f, 0.000213f, -0.001446f, -0.037482f, 0.016599f, 0.007299f, -0.004010f, 0.042738f, -0.012359f, 0.004662f, -0.004093f, 0.018855f, 0.022589f, -0.024983f, -0.002600f, -0.014012f, -0.001774f, 0.012790f, -0.009603f, 0.019578f, -0.030664f, -0.025470f, -0.016270f, -0.027214f, -0.004887f, 0.002480f, 0.004066f, -0.038067f, -0.025181f, 0.018124f, 0.030548f, -0.014580f, -0.017334f, 0.016142f, + -0.035002f, -0.031586f, -0.030735f, 0.033592f, -0.056869f, 0.018404f, -0.003236f, -0.033465f, -0.010856f, 0.028222f, 0.071894f, -0.009682f, -0.020100f, 0.023732f, 0.055077f, 0.019827f, -0.012676f, -0.013440f, -0.002742f, 0.015095f, -0.001251f, 0.007018f, 0.032692f, 0.002114f, -0.012526f, -0.023300f, 0.019060f, -0.027482f, -0.018934f, -0.013719f, 0.009465f, -0.011381f, -0.020100f, -0.012655f, -0.012322f, -0.000256f, -0.014892f, 0.004942f, -0.011595f, -0.001113f, -0.003959f, 0.013851f, -0.010794f, -0.008409f, -0.021873f, -0.006573f, -0.004088f, -0.007421f, 0.020307f, -0.015295f, -0.019692f, -0.001394f, -0.017314f, -0.015764f, -0.007387f, 0.002149f, 0.015152f, -0.002192f, -0.006843f, -0.003153f, -0.010456f, 0.007011f, -0.020838f, -0.001977f, 0.021013f, 0.009914f, 0.013658f, -0.005588f, 0.005014f, 0.006593f, -0.005382f, -0.008319f, -0.011886f, 0.003890f, 0.009975f, -0.004402f, -0.038846f, -0.062601f, -0.003405f, 0.071238f, -0.011234f, -0.005380f, -0.047059f, -0.003835f, -0.002960f, 0.004653f, 0.015829f, 0.001880f, 0.013187f, 0.000658f, -0.000596f, -0.033954f, 0.004970f, 0.030365f, -0.020525f, 0.037725f, + -0.015858f, -0.002636f, -0.033540f, 0.021301f, -0.016636f, -0.011194f, -0.038737f, -0.052999f, 0.027064f, -0.026018f, -0.025199f, 0.008959f, 0.005536f, -0.011641f, 0.002712f, 0.029560f, -0.008742f, -0.028772f, -0.017582f, -0.036763f, -0.004370f, 0.010142f, 0.025346f, 0.004893f, -0.007349f, -0.006536f, -0.015029f, 0.008468f, 0.026307f, 0.004061f, -0.016351f, 0.029561f, -0.028518f, 0.002786f, -0.049194f, -0.014784f, -0.009601f, 0.060433f, -0.038330f, 0.012130f, -0.012429f, 0.007702f, -0.007040f, -0.007053f, 0.001201f, 0.024419f, 0.007508f, -0.045072f, 0.049277f, 0.014780f, 0.017605f, 0.006094f, -0.019624f, -0.015275f, -0.005619f, 0.005954f, -0.001091f, 0.009564f, -0.026640f, -0.028031f, -0.004533f, 0.013243f, 0.029928f, -0.018827f, 0.025380f, -0.006537f, 0.009883f, -0.020359f, 0.011420f, -0.033001f, 0.036571f, 0.001298f, 0.004054f, 0.011701f, 0.016476f, 0.001288f, -0.022869f, -0.011343f, 0.006119f, -0.021992f, 0.005834f, 0.009848f, 0.009102f, -0.013223f, -0.008062f, 0.021584f, 0.003942f, -0.022615f, -0.003287f, 0.018662f, -0.007252f, -0.027752f, 0.030920f, -0.008798f, 0.011882f, -0.005612f, + -0.009021f, -0.014978f, 0.009408f, 0.002248f, 0.009782f, 0.001110f, 0.016506f, 0.001580f, 0.011814f, -0.006215f, 0.000637f, 0.007093f, -0.004433f, -0.007003f, -0.031020f, -0.017934f, 0.066114f, -0.007918f, 0.005479f, -0.034112f, 0.030839f, -0.017502f, 0.022701f, -0.017664f, 0.039930f, 0.004364f, 0.004051f, -0.019041f, -0.015916f, 0.023682f, 0.051761f, -0.021155f, -0.031574f, 0.015300f, -0.012440f, 0.034578f, 0.043132f, 0.021721f, -0.006489f, 0.027146f, -0.017739f, -0.016029f, 0.036237f, 0.050373f, -0.055846f, 0.005066f, 0.008330f, 0.009954f, -0.018899f, -0.000813f, 0.022549f, -0.055937f, 0.016964f, 0.033496f, 0.012414f, -0.024597f, -0.006943f, 0.041020f, 0.033177f, 0.011551f, -0.019067f, -0.024377f, -0.048851f, 0.070217f, 0.012619f, 0.036362f, -0.005213f, -0.014306f, 0.007806f, 0.021393f, 0.000658f, -0.000585f, -0.056777f, 0.009337f, 0.053554f, -0.009024f, 0.051318f, -0.030243f, -0.013833f, -0.020919f, 0.011964f, 0.048833f, -0.015216f, -0.000838f, 0.043662f, 0.053891f, -0.017407f, -0.038407f, -0.034778f, -0.029739f, -0.014128f, -0.012228f, 0.030667f, -0.036986f, 0.020447f, 0.023721f, + -0.008556f, 0.003247f, 0.024024f, -0.004058f, -0.013882f, 0.015068f, 0.010193f, 0.008321f, 0.022078f, 0.005475f, -0.004010f, 0.020653f, 0.007089f, 0.009097f, 0.010084f, -0.002819f, 0.001119f, -0.003932f, 0.008578f, -0.036197f, -0.010347f, 0.002198f, -0.007312f, 0.015001f, -0.027803f, -0.002477f, 0.000179f, 0.010476f, -0.000835f, 0.016266f, 0.010677f, -0.006775f, 0.021928f, 0.011963f, -0.007900f, 0.016652f, 0.017083f, 0.000862f, -0.011396f, 0.009124f, 0.016605f, 0.010933f, -0.002754f, -0.015524f, -0.008151f, 0.004982f, 0.002300f, 0.003348f, 0.026369f, 0.019397f, 0.046537f, -0.014077f, 0.033705f, -0.017839f, -0.007114f, 0.031325f, -0.001055f, 0.042698f, -0.051537f, 0.032289f, 0.005886f, 0.014339f, -0.020733f, 0.015627f, 0.038445f, 0.074759f, -0.017217f, 0.018979f, -0.001057f, -0.049633f, 0.045475f, 0.004581f, 0.017766f, -0.009098f, -0.023247f, -0.008667f, -0.001930f, -0.019295f, -0.012135f, 0.063433f, 0.004400f, 0.024358f, -0.018212f, 0.044935f, 0.000198f, 0.021761f, 0.009166f, -0.026399f, -0.005679f, -0.016320f, 0.000414f, 0.008043f, 0.053121f, 0.026977f, 0.002159f, 0.006206f, + -0.001980f, -0.004536f, 0.008619f, 0.005181f, 0.033210f, 0.026990f, 0.013539f, -0.015999f, 0.023010f, 0.048497f, -0.046095f, 0.042476f, 0.006691f, 0.012639f, -0.046342f, -0.022130f, -0.058199f, -0.047037f, -0.009436f, 0.030996f, 0.025841f, -0.080679f, -0.000816f, -0.036538f, 0.018821f, 0.080019f, 0.040045f, -0.051941f, 0.027964f, -0.021556f, -0.026931f, 0.043919f, 0.022051f, -0.023083f, -0.012996f, 0.038581f, 0.031551f, 0.017061f, 0.049186f, -0.013750f, 0.030020f, 0.026339f, -0.031970f, 0.043804f, 0.011744f, 0.050894f, 0.015230f, -0.005229f, 0.029804f, -0.003625f, 0.007440f, -0.036570f, 0.026679f, -0.018108f, 0.013655f, -0.013623f, 0.005753f, 0.016168f, 0.040399f, 0.010136f, 0.024347f, 0.005680f, 0.007414f, -0.014065f, -0.003578f, -0.005458f, 0.002785f, 0.019846f, 0.016960f, 0.030159f, 0.010823f, -0.004445f, 0.004331f, -0.007992f, -0.004685f, -0.031785f, -0.005848f, 0.006912f, 0.009162f, 0.025789f, 0.023080f, 0.020919f, 0.026131f, -0.067552f, -0.103699f, -0.027198f, -0.011670f, -0.025754f, 0.005769f, 0.034853f, -0.036554f, 0.052644f, 0.019321f, -0.076258f, -0.058386f, -0.011878f, + 0.041629f, 0.001321f, 0.003495f, -0.008149f, -0.024111f, -0.073848f, 0.003041f, -0.062081f, -0.051259f, 0.024932f, 0.019964f, 0.017980f, -0.008654f, -0.024218f, 0.055827f, 0.033236f, -0.023676f, -0.048496f, 0.036866f, 0.018394f, 0.008696f, -0.022948f, -0.056504f, 0.021246f, -0.026517f, 0.008228f, -0.048126f, 0.058263f, 0.001476f, -0.023711f, 0.005737f, 0.014455f, 0.048298f, 0.029893f, -0.012336f, -0.002707f, 0.016936f, 0.016426f, 0.018632f, -0.011298f, -0.075470f, -0.059695f, 0.012046f, -0.008496f, 0.044231f, -0.008807f, -0.018923f, -0.053612f, 0.061926f, 0.023402f, -0.043081f, -0.044850f, 0.063526f, 0.059143f, -0.000579f, 0.043286f, -0.005785f, 0.001131f, -0.017993f, -0.011347f, -0.034051f, 0.041688f, -0.007730f, -0.009942f, -0.018173f, 0.016953f, -0.053604f, 0.024912f, -0.015658f, -0.010503f, 0.038169f, -0.001255f, 0.006082f, 0.009147f, 0.035043f, 0.017458f, -0.014218f, 0.025531f, -0.007690f, 0.030910f, 0.012444f, -0.035664f, 0.008804f, -0.018337f, 0.016768f, -0.014968f, 0.000416f, -0.023852f, -0.011970f, 0.012403f, -0.023112f, 0.009394f, 0.007972f, 0.009663f, -0.020658f, -0.015267f, + -0.026598f, -0.023792f, 0.031105f, -0.011658f, 0.020092f, 0.012174f, -0.019009f, -0.003135f, -0.016623f, 0.000229f, -0.010541f, 0.038853f, 0.033149f, 0.022007f, 0.030963f, -0.008044f, -0.034364f, -0.039797f, -0.005637f, 0.011474f, 0.057268f, 0.034548f, -0.013223f, -0.011135f, -0.015435f, -0.028958f, -0.001769f, 0.012520f, 0.005786f, 0.036378f, 0.003564f, -0.025639f, -0.065873f, 0.103868f, 0.002618f, -0.080343f, -0.006081f, -0.029909f, 0.013587f, 0.039863f, 0.036209f, -0.044699f, -0.071729f, 0.012252f, -0.034331f, 0.010941f, -0.006995f, 0.031626f, -0.010383f, 0.004525f, 0.018789f, -0.029303f, -0.035933f, 0.003797f, 0.009432f, 0.031314f, -0.000718f, -0.050099f, 0.032953f, -0.027942f, 0.025898f, -0.024286f, -0.016534f, -0.002735f, -0.007951f, -0.053861f, 0.010118f, 0.015049f, -0.052076f, 0.022028f, -0.020468f, 0.010433f, -0.017377f, 0.050312f, 0.039175f, -0.050732f, -0.026929f, 0.034650f, 0.043417f, -0.051913f, 0.068532f, 0.004446f, 0.055182f, 0.040095f, 0.065118f, -0.020144f, -0.027639f, 0.014623f, -0.054038f, 0.008253f, 0.006826f, 0.094883f, -0.029420f, -0.089191f, 0.150566f, -0.071141f, + -0.054728f, 0.086809f, 0.039207f, -0.050651f, 0.084346f, 0.009387f, -0.068710f, 0.085443f, 0.010310f, 0.007649f, -0.014942f, 0.012551f, 0.056689f, -0.013873f, -0.019783f, -0.029523f, 0.042202f, -0.015385f, -0.010846f, -0.005944f, -0.017073f, -0.018217f, -0.026513f, 0.025329f, -0.003832f, -0.002388f, -0.009653f, -0.006555f, 0.003132f, -0.011460f, -0.019964f, 0.002502f, -0.016180f, -0.029860f, -0.031135f, 0.038532f, -0.016881f, 0.003544f, 0.035479f, -0.017178f, -0.016464f, 0.002462f, 0.017510f, 0.007550f, 0.007356f, 0.034196f, -0.021327f, 0.004898f, -0.015779f, -0.009787f, -0.007070f, 0.056585f, 0.027896f, -0.009272f, 0.007822f, -0.030092f, 0.009375f, -0.027548f, -0.017328f, 0.013212f, -0.007553f, -0.056790f, 0.034664f, 0.014207f, -0.010851f, -0.093609f, 0.013056f, 0.027918f, -0.070036f, 0.032008f, 0.018688f, -0.024689f, -0.006876f, -0.001316f, -0.017061f, -0.005722f, -0.009936f, -0.031347f, 0.001022f, -0.015666f, -0.003293f, -0.007740f, 0.015390f, 0.055816f, 0.046930f, -0.043153f, -0.004597f, 0.058751f, -0.010131f, -0.011069f, -0.059963f, 0.006929f, 0.019920f, -0.009851f, 0.051428f, 0.122845f, + -0.041141f, -0.051777f, 0.087657f, -0.005835f, -0.046969f, 0.054591f, 0.036132f, -0.028297f, -0.042165f, -0.052343f, 0.016175f, 0.028118f, -0.023115f, 0.082450f, 0.053989f, -0.102762f, -0.098427f, 0.057556f, -0.046205f, -0.060082f, 0.078228f, 0.012606f, 0.104647f, 0.050169f, -0.012426f, -0.013986f, -0.075096f, -0.058687f, 0.171745f, 0.047417f, -0.036543f, -0.082923f, 0.002569f, -0.033744f, -0.073862f, -0.011481f, 0.087101f, 0.037012f, 0.001376f, 0.071556f, 0.062762f, -0.019726f, -0.079298f, 0.012423f, 0.048000f, -0.019673f, -0.018315f, 0.099699f, 0.057577f, 0.009989f, -0.010155f, -0.051128f, -0.049895f, -0.012870f, 0.047754f, 0.019215f, -0.018935f, -0.009036f, -0.021958f, 0.018757f, -0.013989f, -0.019094f, -0.012021f, -0.002276f, 0.014618f, 0.019276f, 0.017393f, 0.007230f, -0.045180f, -0.015823f, -0.008523f, 0.017295f, -0.017301f, 0.003252f, -0.004283f, 0.042007f, -0.026593f, -0.018695f, 0.043737f, 0.012197f, -0.021417f, 0.034218f, -0.011397f, 0.010087f, 0.003209f, 0.007894f, -0.025595f, -0.006933f, 0.036155f, 0.035018f, 0.015055f, -0.013699f, 0.009917f, -0.015745f, -0.012184f, -0.009628f, + 0.019317f, -0.029077f, -0.005500f, 0.023353f, 0.093124f, 0.077307f, -0.020572f, 0.054907f, 0.005831f, -0.042831f, 0.027513f, 0.046885f, 0.015863f, 0.020213f, -0.061390f, -0.012644f, 0.007383f, 0.012343f, -0.008892f, -0.053640f, -0.019107f, 0.019190f, -0.012858f, -0.005805f, -0.045108f, 0.069405f, 0.008890f, -0.057487f, 0.032683f, 0.081501f, -0.041933f, -0.024681f, 0.012142f, 0.026786f, -0.026127f, -0.051547f, 0.044297f, 0.074095f, -0.005739f, -0.029351f, 0.009857f, 0.020861f, 0.034039f, 0.047402f, 0.003352f, 0.086419f, -0.001714f, -0.096606f, 0.000979f, -0.011035f, 0.031684f, -0.010273f, -0.078509f, -0.002360f, -0.033775f, -0.033397f, 0.047503f, 0.024666f, 0.027198f, 0.033770f, -0.070330f, -0.037097f, -0.012151f, -0.001129f, 0.028741f, 0.000810f, -0.014180f, 0.001800f, -0.023912f, -0.048285f, 0.004917f, 0.074620f, -0.038205f, 0.006940f, -0.029631f, -0.021582f, 0.051416f, -0.063109f, -0.000442f, 0.027461f, -0.021994f, 0.010137f, 0.008113f, 0.015471f, 0.018401f, -0.033429f, -0.039546f, 0.066779f, -0.013656f, -0.021928f, 0.034773f, -0.034579f, 0.021807f, 0.004101f, -0.013859f, 0.010339f, + 0.029261f, -0.005725f, 0.004192f, -0.014507f, 0.007248f, 0.001584f, -0.001647f, -0.012985f, 0.016117f, 0.007690f, -0.001311f, -0.001597f, 0.013567f, 0.010797f, -0.012082f, -0.022533f, 0.012469f, -0.001607f, 0.006491f, 0.001025f, -0.005491f, 0.011215f, 0.000611f, 0.009252f, -0.003401f, -0.002098f, -0.006183f, 0.001514f, 0.011058f, -0.002713f, 0.027135f, -0.011210f, -0.007842f, 0.000907f, -0.011388f, 0.007128f, -0.080510f, -0.115491f, -0.102131f, 0.205442f, 0.196113f, 0.195720f, 0.552552f, 0.196311f, -0.022749f, 0.036365f, -0.382052f, -0.465382f, -0.156345f, -0.261137f, -0.361876f, 0.046536f, -0.020068f, -0.060560f, 0.398572f, 0.243270f, 0.101645f, 0.622390f, 0.293871f, 0.054328f, 0.283814f, -0.067307f, -0.338580f, -0.324287f, -0.308900f, -0.428151f, -0.419142f, -0.098448f, -0.151255f, -0.246826f, 0.288292f, 0.132728f, -0.103721f, 0.416231f, 0.134534f, -0.048883f, 0.470713f, 0.428781f, 0.098871f, 0.444966f, 0.451598f, -0.017320f, 0.112226f, 0.051110f, -0.434426f, -0.504439f, -0.375560f, -0.710138f, -0.672402f, -0.403909f, -0.539308f, -0.405788f, 0.046121f, 0.333618f, 0.378714f, 0.813520f, + 0.739799f, 0.652238f, 0.702877f, 0.518345f, 0.263329f, 0.080382f, -0.056853f, -0.395940f, -0.477217f, -0.511002f, -0.575758f, -0.546403f, -0.465616f, -0.300983f, -0.218504f, -0.213814f, 0.041031f, 0.129659f, 0.254777f, 0.605463f, 0.628945f, 0.429950f, 0.537557f, 0.227234f, -0.073977f, -0.177895f, -0.275398f, -0.377711f, -0.273357f, -0.182919f, -0.181871f, -0.062742f, -0.016884f, 0.001562f, 0.097170f, 0.123163f, 0.117576f, 0.179756f, 0.113433f, 0.073254f, 0.090937f, -0.053543f, -0.049283f, 0.015322f, -0.145408f, -0.103061f, -0.037662f, -0.140699f, -0.086613f, -0.009700f, -0.141355f, -0.149580f, -0.099028f, -0.146771f, -0.096043f, 0.110666f, 0.207056f, 0.328873f, 0.485363f, 0.452733f, 0.387790f, 0.364282f, 0.197378f, -0.060051f, -0.302543f, -0.536194f, -0.636418f, -0.574216f, -0.464536f, -0.350892f, -0.164195f, 0.052837f, 0.208811f, 0.292450f, 0.315993f, 0.278708f, 0.249180f, 0.231517f, 0.233790f, 0.162606f, 0.077700f, 0.036015f, -0.019143f, -0.065578f, -0.058700f, -0.106877f, -0.114473f, -0.080750f, -0.059453f, -0.079311f, -0.075018f, -0.096653f, -0.108201f, -0.100722f, -0.068209f, -0.032261f, + 0.013400f, 0.020041f, 0.014214f, 0.000959f} + }, + { + {-0.006839f, 0.025744f, 0.013624f, 0.011354f, 0.006323f, -0.002728f, -0.000811f, -0.002637f, -0.005362f, -0.007433f, -0.005263f, -0.007596f, -0.003214f, 0.007232f, 0.002463f, -0.000378f, -0.000010f, 0.004741f, 0.002204f, -0.003000f, -0.003231f, -0.002432f, -0.013423f, 0.005563f, 0.001405f, 0.000130f, -0.002771f, 0.001742f, 0.000235f, -0.003710f, 0.001935f, 0.004912f, -0.000021f, -0.006129f, -0.001562f, -0.002650f, -0.002854f, 0.000755f, 0.005904f, -0.001530f, 0.001393f, -0.007017f, 0.004503f, -0.008670f, 0.005523f, 0.001223f, 0.000326f, 0.000066f, 0.005494f, -0.006656f, -0.004943f, -0.009071f, 0.002404f, 0.001629f, 0.000443f, 0.005175f, -0.005599f, 0.001206f, -0.000771f, 0.000147f, -0.004086f, 0.003590f, 0.001634f, -0.003011f, 0.005583f, -0.008921f, 0.004077f, -0.004871f, 0.009077f, 0.004134f, 0.001587f, 0.000644f, -0.001830f, -0.011131f, 0.008461f, -0.002677f, -0.000294f, 0.001447f, 0.002349f, 0.002013f, 0.002222f, 0.002672f, -0.000831f, 0.000770f, -0.001262f, 0.002607f, -0.000218f, 0.001478f, -0.003402f, 0.001136f, -0.000558f, 0.000721f, 0.001318f, 0.003608f, -0.000238f, -0.000636f, + 0.001192f, 0.001416f, -0.001504f, 0.001855f, -0.002253f, 0.001810f, 0.000351f, 0.001609f, 0.000083f, 0.001031f, -0.000621f, 0.000393f, 0.001377f, 0.000680f, -0.000285f, 0.001058f, -0.000287f, 0.024601f, 0.011721f, 0.016061f, 0.004401f, 0.005463f, -0.000932f, 0.006285f, 0.000661f, 0.005586f, -0.004117f, 0.010891f, -0.002762f, -0.012447f, -0.003410f, 0.000253f, 0.000686f, -0.003954f, 0.009547f, 0.000525f, 0.003731f, 0.009220f, 0.004518f, 0.000102f, -0.000009f, 0.002194f, -0.008410f, -0.005570f, 0.003348f, 0.004009f, -0.003057f, 0.000874f, 0.004119f, -0.008352f, 0.011774f, -0.001214f, 0.001739f, -0.001874f, 0.004375f, 0.006065f, 0.000309f, -0.006389f, -0.006506f, 0.012761f, 0.000289f, -0.003740f, -0.000537f, 0.007346f, 0.005441f, -0.003809f, -0.005122f, -0.011273f, -0.003494f, -0.004631f, 0.000471f, -0.004184f, 0.001008f, -0.010954f, -0.004470f, 0.001257f, -0.004459f, 0.002396f, 0.004414f, -0.002231f, -0.000294f, 0.002059f, -0.002780f, 0.004295f, -0.000316f, 0.005407f, 0.000067f, -0.001879f, -0.006296f, 0.000699f, -0.007809f, 0.002442f, 0.000143f, 0.004407f, 0.000080f, 0.004526f, + 0.005851f, 0.004970f, 0.000190f, -0.003253f, -0.000247f, -0.001200f, 0.006458f, -0.001757f, 0.000828f, 0.004114f, 0.004320f, -0.000318f, 0.002436f, 0.000855f, 0.002226f, -0.000928f, 0.002695f, -0.001038f, 0.003973f, 0.000893f, 0.000760f, -0.000345f, 0.000356f, 0.000386f, 0.005203f, -0.016608f, -0.005352f, -0.003798f, 0.002897f, 0.003254f, -0.011338f, -0.005111f, -0.002240f, 0.002699f, 0.006042f, 0.001875f, 0.008281f, -0.006851f, -0.009858f, 0.002834f, 0.000346f, -0.001796f, -0.006748f, 0.021902f, -0.001131f, 0.005809f, 0.001322f, 0.000659f, -0.000480f, -0.003403f, -0.008323f, -0.006568f, -0.002035f, 0.005578f, -0.004643f, 0.011456f, -0.003873f, -0.001095f, -0.009395f, -0.011223f, -0.000950f, -0.007167f, -0.003957f, 0.015247f, -0.008332f, -0.002338f, -0.008088f, 0.002946f, 0.000403f, -0.002963f, -0.008499f, -0.001647f, 0.000089f, -0.009691f, 0.001159f, -0.005227f, 0.007753f, 0.005062f, -0.004432f, -0.002393f, -0.002440f, 0.002346f, -0.000401f, 0.006119f, -0.003155f, -0.004060f, -0.004122f, 0.013903f, 0.012600f, -0.004340f, -0.012089f, 0.001619f, 0.003774f, -0.000412f, 0.003587f, -0.005055f, + 0.001019f, -0.005859f, 0.004194f, 0.000295f, 0.013403f, 0.008222f, 0.012745f, -0.011601f, 0.005045f, 0.007724f, 0.000331f, 0.005855f, 0.004271f, 0.000851f, 0.008782f, -0.001634f, -0.000893f, 0.002215f, 0.001254f, -0.003619f, 0.003529f, -0.002779f, -0.002317f, -0.000274f, 0.000932f, -0.000420f, 0.001370f, -0.002084f, 0.001070f, -0.000291f, 0.000320f, 0.001105f, 0.001658f, 0.000739f, 0.001915f, 0.001719f, -0.001282f, -0.001793f, 0.001439f, 0.000480f, -0.003091f, -0.001317f, 0.002587f, -0.001575f, -0.054568f, -0.008837f, -0.015724f, -0.017840f, 0.004801f, -0.006038f, -0.015511f, -0.012858f, 0.002159f, -0.012667f, 0.001806f, 0.018889f, -0.004687f, 0.008109f, 0.006154f, 0.015928f, 0.004151f, -0.011092f, 0.002557f, 0.017313f, -0.008066f, 0.008621f, -0.012756f, -0.011638f, 0.003837f, 0.004970f, 0.013627f, 0.000804f, -0.008321f, 0.007905f, -0.005573f, 0.006068f, -0.000674f, 0.008592f, -0.007248f, -0.004716f, -0.008087f, 0.000113f, 0.001513f, -0.003174f, 0.006278f, -0.014323f, 0.001887f, 0.014462f, 0.003175f, -0.004090f, 0.005613f, -0.007381f, -0.003698f, -0.018084f, -0.005310f, -0.000591f, + 0.002885f, 0.000316f, 0.009777f, -0.014517f, 0.001469f, -0.001983f, 0.007378f, 0.003925f, -0.002748f, 0.010362f, -0.009015f, -0.001210f, -0.007220f, -0.013948f, -0.005813f, -0.003199f, -0.003876f, 0.010512f, -0.009328f, -0.015069f, 0.000671f, 0.004955f, -0.001433f, -0.004336f, 0.005268f, 0.005782f, -0.004136f, -0.003387f, -0.005778f, -0.002404f, 0.012228f, -0.005620f, 0.006785f, -0.001987f, -0.000117f, -0.001098f, -0.000311f, -0.006271f, 0.001641f, -0.003746f, -0.000078f, -0.000425f, -0.000801f, 0.000171f, -0.001340f, -0.001948f, -0.001821f, -0.000507f, 0.000729f, -0.001192f, 0.002134f, 0.000922f, -0.027104f, 0.015445f, 0.017498f, -0.000989f, 0.009841f, 0.004413f, 0.020662f, 0.027359f, 0.003571f, 0.003547f, 0.007915f, 0.003366f, 0.004609f, -0.003933f, 0.005476f, -0.004555f, 0.007255f, 0.008346f, -0.023420f, 0.012127f, -0.002522f, -0.004389f, -0.007211f, -0.009545f, 0.003888f, 0.006633f, 0.010736f, 0.002048f, 0.001867f, -0.013746f, 0.000646f, -0.004040f, -0.004533f, -0.002070f, 0.001876f, 0.000751f, -0.001007f, 0.013435f, -0.000661f, -0.004513f, 0.004491f, -0.005278f, 0.006944f, 0.009063f, + 0.010220f, 0.005250f, 0.001152f, -0.005713f, 0.011409f, 0.003570f, 0.001564f, 0.001146f, 0.001529f, 0.000775f, -0.006552f, -0.009319f, 0.008448f, -0.008691f, 0.008093f, 0.007312f, 0.005432f, -0.001246f, -0.006083f, 0.005458f, 0.007189f, 0.015840f, 0.007360f, 0.005943f, 0.003745f, -0.015608f, -0.004765f, 0.001849f, -0.002525f, 0.006628f, -0.013454f, 0.000612f, 0.004462f, -0.012668f, -0.001176f, 0.004158f, -0.003046f, 0.001544f, -0.007381f, 0.002715f, 0.000952f, -0.003227f, 0.005811f, 0.003342f, 0.000229f, 0.006295f, -0.002891f, -0.002888f, -0.000648f, 0.001244f, 0.002595f, 0.009579f, 0.001566f, 0.003216f, 0.002264f, -0.000170f, 0.002092f, -0.001675f, -0.001854f, -0.002680f, 0.001681f, -0.001513f, -0.001262f, 0.001001f, 0.000998f, -0.001271f, 0.003245f, -0.002007f, 0.002257f, 0.002020f, -0.001000f, 0.003081f, 0.000874f, 0.001258f, 0.001540f, 0.000117f, 0.000294f, 0.003591f, -0.000318f, 0.050347f, 0.015185f, 0.003722f, 0.009851f, 0.025168f, 0.010145f, 0.030348f, 0.007437f, -0.006697f, -0.002176f, -0.002548f, -0.002896f, 0.008233f, 0.013009f, -0.006048f, 0.002795f, 0.009064f, + -0.003370f, -0.012619f, 0.010025f, -0.001192f, 0.004767f, -0.004302f, -0.006330f, 0.010309f, 0.002407f, -0.000953f, -0.002933f, -0.011498f, -0.005682f, 0.006218f, 0.001564f, -0.003960f, -0.002013f, 0.001734f, 0.004330f, 0.011555f, 0.003658f, -0.010663f, -0.002441f, 0.000681f, -0.003343f, 0.003826f, 0.005487f, -0.010747f, -0.012959f, -0.000762f, 0.003258f, -0.001385f, 0.010026f, -0.018492f, -0.003916f, -0.008394f, -0.010392f, -0.001153f, -0.000794f, 0.002719f, 0.009910f, -0.000110f, 0.001501f, 0.003186f, -0.001589f, 0.013187f, 0.008436f, -0.010851f, -0.009495f, 0.007221f, 0.016003f, -0.001399f, -0.007470f, 0.015756f, 0.008353f, 0.003638f, -0.006923f, -0.007542f, 0.007808f, 0.000383f, 0.005909f, -0.003592f, -0.011443f, -0.006337f, -0.007785f, -0.004965f, 0.004536f, -0.006414f, 0.000891f, 0.002705f, -0.002287f, 0.002622f, 0.001936f, 0.002228f, 0.001338f, -0.004162f, 0.002304f, -0.001336f, -0.002168f, -0.001036f, 0.003093f, 0.002380f, 0.000419f, -0.003584f, 0.003166f, -0.001441f, 0.005460f, -0.000895f, 0.000759f, -0.005238f, -0.006677f, 0.002183f, -0.006285f, -0.001268f, -0.000965f, -0.003605f, + -0.001704f, 0.000717f, -0.005643f, -0.002407f, -0.000572f, 0.000573f, -0.001178f, 0.003922f, 0.000564f, -0.001564f, 0.024705f, 0.012002f, 0.022245f, -0.007505f, 0.000178f, -0.005658f, 0.022411f, -0.023059f, -0.003280f, 0.005906f, -0.004423f, -0.004567f, 0.007499f, -0.002592f, -0.007115f, 0.019666f, 0.011109f, 0.002265f, 0.033221f, -0.009081f, -0.002220f, -0.007035f, 0.000245f, 0.005487f, -0.008586f, -0.001105f, -0.004461f, 0.012680f, -0.010732f, 0.002853f, 0.000736f, -0.003371f, 0.001147f, 0.007453f, 0.005072f, -0.010091f, -0.017608f, 0.000413f, 0.003611f, 0.014569f, 0.017089f, 0.017018f, 0.001541f, -0.009815f, 0.012235f, -0.029707f, -0.004899f, -0.011669f, -0.017300f, 0.012092f, -0.003989f, -0.005602f, 0.009418f, -0.003426f, -0.005076f, 0.025919f, 0.000297f, -0.007652f, 0.009016f, 0.000694f, 0.006858f, 0.005059f, 0.003369f, 0.015702f, -0.009428f, -0.005779f, 0.000910f, -0.013485f, -0.000121f, 0.002549f, -0.003435f, 0.004623f, 0.007749f, 0.016511f, -0.006244f, 0.005505f, 0.014248f, 0.008660f, 0.004211f, 0.002693f, -0.004930f, -0.010426f, 0.005318f, 0.007955f, -0.001753f, 0.000798f, + -0.001669f, -0.001331f, -0.005957f, 0.001165f, -0.001841f, 0.001021f, -0.005566f, -0.002791f, -0.000005f, -0.000970f, 0.005113f, 0.002237f, -0.000005f, -0.007139f, -0.003265f, 0.003549f, -0.004196f, -0.000072f, 0.002721f, 0.002805f, -0.004855f, 0.004490f, 0.003466f, 0.001155f, 0.004589f, 0.004170f, -0.008309f, -0.001471f, -0.003224f, 0.002249f, 0.004433f, 0.005462f, -0.001189f, -0.003041f, 0.000661f, -0.001651f, -0.038519f, -0.057906f, -0.009755f, 0.002858f, -0.000998f, 0.001590f, -0.002703f, -0.011622f, -0.006536f, -0.009266f, -0.002484f, 0.009403f, 0.011237f, -0.010205f, -0.015030f, 0.012850f, 0.002671f, -0.008264f, 0.000679f, -0.001378f, -0.009162f, -0.007698f, 0.021365f, 0.010867f, -0.011474f, 0.005832f, 0.002425f, 0.009136f, -0.011131f, 0.012400f, -0.012381f, 0.008523f, 0.005580f, -0.002622f, -0.005770f, 0.005506f, -0.023091f, -0.011464f, 0.014163f, 0.022794f, 0.012661f, -0.015950f, 0.000386f, -0.011309f, 0.015167f, 0.003138f, 0.003943f, 0.001081f, -0.012477f, 0.006069f, 0.018555f, 0.002100f, 0.014032f, 0.009932f, 0.006435f, 0.010730f, 0.022760f, -0.006304f, -0.022884f, 0.011111f, + 0.000081f, -0.005415f, 0.001184f, 0.019695f, -0.008024f, -0.013672f, 0.006730f, -0.003613f, -0.002311f, -0.005169f, -0.003055f, -0.006146f, -0.010683f, -0.005370f, 0.013223f, -0.017979f, -0.011264f, -0.006624f, -0.012896f, -0.012560f, -0.000723f, 0.007822f, -0.011819f, -0.000201f, -0.004350f, -0.004990f, -0.010642f, -0.006736f, -0.012224f, -0.000641f, -0.009386f, -0.000714f, -0.000186f, 0.008639f, 0.006185f, -0.004354f, -0.004617f, -0.006248f, -0.001832f, -0.004414f, -0.004166f, 0.005248f, -0.008281f, 0.003181f, 0.000810f, -0.005296f, 0.000672f, -0.003457f, 0.002116f, -0.001777f, -0.006734f, -0.008339f, 0.000034f, 0.002225f, 0.003589f, -0.001559f, 0.001596f, 0.002673f, 0.000128f, -0.004339f, -0.000459f, -0.005566f, 0.000725f, 0.002629f, 0.002561f, -0.022271f, -0.014511f, 0.003764f, 0.003568f, 0.029698f, -0.025958f, -0.017759f, -0.010024f, -0.004905f, -0.003217f, 0.009608f, 0.009284f, -0.013741f, 0.014129f, -0.003269f, 0.006409f, -0.009895f, 0.021062f, -0.004089f, -0.007928f, 0.013618f, 0.009824f, 0.007925f, -0.014315f, -0.013467f, 0.017831f, -0.009328f, 0.005268f, 0.004364f, -0.006449f, 0.015156f, + 0.004621f, -0.000009f, 0.003381f, 0.011127f, 0.014288f, 0.004404f, -0.012674f, 0.002959f, -0.018092f, 0.010813f, 0.004743f, -0.020271f, 0.014399f, 0.003351f, -0.010521f, 0.018576f, 0.005933f, -0.005026f, 0.010860f, -0.001677f, 0.020539f, -0.004685f, -0.005103f, -0.004343f, -0.002652f, 0.026688f, 0.005671f, 0.000462f, 0.007299f, -0.022419f, -0.013967f, -0.015234f, 0.001712f, 0.014200f, 0.001934f, 0.017611f, -0.022714f, -0.009359f, -0.014395f, -0.013385f, 0.033260f, -0.003380f, 0.011919f, 0.008514f, -0.007068f, -0.001667f, -0.004566f, 0.002514f, 0.001813f, 0.009065f, 0.005594f, 0.018158f, -0.009726f, 0.001505f, -0.003037f, 0.003943f, -0.000058f, -0.000360f, 0.000014f, -0.003878f, -0.017075f, 0.006378f, 0.004072f, 0.002536f, -0.004482f, -0.001622f, -0.002129f, -0.009578f, -0.000536f, -0.003436f, -0.006146f, 0.003472f, -0.005174f, 0.002226f, 0.003140f, 0.002395f, 0.004008f, -0.006673f, -0.003545f, -0.004527f, -0.004018f, 0.002375f, 0.004845f, 0.002779f, -0.001490f, -0.000920f, -0.001098f, -0.002094f, 0.007008f, -0.002401f, 0.005016f, 0.003059f, -0.001787f, 0.002059f, -0.001272f, -0.000021f, + 0.001825f, 0.001830f, -0.030054f, 0.009371f, -0.012898f, 0.007301f, -0.009016f, 0.024274f, 0.004114f, -0.017045f, 0.002698f, -0.017376f, 0.014102f, 0.026833f, -0.022878f, 0.015104f, 0.005622f, -0.000694f, 0.011095f, 0.028604f, -0.010923f, -0.000051f, 0.008779f, -0.031276f, 0.001858f, 0.014198f, -0.008662f, 0.010172f, 0.011126f, -0.005722f, 0.028078f, -0.013999f, -0.025343f, -0.010931f, 0.003087f, 0.000662f, -0.005161f, -0.010956f, 0.007680f, 0.007068f, 0.000046f, -0.017879f, -0.004158f, -0.004539f, 0.011974f, -0.007836f, 0.047077f, -0.005926f, 0.006773f, -0.002173f, -0.001960f, -0.022832f, 0.002384f, 0.016921f, 0.013736f, 0.045873f, -0.004891f, -0.004446f, -0.009459f, -0.001813f, -0.012872f, -0.000981f, 0.018442f, -0.009797f, -0.001857f, 0.003331f, 0.004386f, 0.018087f, 0.014764f, 0.004163f, 0.035562f, -0.006717f, -0.032847f, -0.032929f, -0.023177f, -0.004781f, 0.010438f, -0.003245f, -0.008597f, 0.015672f, -0.000905f, 0.013917f, -0.008526f, -0.001626f, 0.011349f, 0.009592f, -0.003433f, -0.003359f, 0.001205f, 0.002942f, -0.003603f, -0.007684f, -0.011001f, -0.003721f, -0.004644f, -0.001387f, + -0.007827f, 0.005899f, -0.002315f, 0.001778f, -0.003936f, -0.005660f, 0.007649f, 0.003412f, -0.003823f, -0.001042f, -0.003123f, -0.003374f, 0.003370f, -0.002098f, -0.003703f, -0.007474f, 0.005969f, 0.002352f, -0.003155f, -0.005658f, -0.007476f, -0.001401f, -0.005121f, -0.005225f, 0.006422f, -0.003754f, 0.001327f, 0.000271f, -0.002679f, 0.002747f, 0.001307f, -0.001018f, -0.001339f, -0.001653f, 0.053509f, -0.038564f, -0.029254f, -0.009360f, -0.018484f, -0.021140f, 0.025957f, 0.010531f, 0.005206f, -0.008156f, -0.005175f, 0.031495f, -0.009137f, -0.013232f, -0.037662f, -0.005433f, -0.000906f, 0.017795f, 0.006589f, -0.007642f, 0.002349f, 0.015606f, 0.007079f, 0.009767f, 0.024148f, 0.030298f, 0.008425f, -0.011263f, 0.007825f, -0.018168f, 0.012491f, 0.010231f, -0.006484f, 0.000630f, -0.014070f, 0.005706f, 0.000396f, -0.027302f, 0.026635f, -0.002383f, -0.012379f, 0.016442f, -0.025261f, -0.005836f, 0.027811f, 0.015866f, -0.000348f, 0.001046f, -0.035002f, 0.012292f, 0.019561f, 0.011162f, 0.006500f, -0.001915f, -0.025837f, -0.075924f, -0.006059f, 0.015478f, 0.021335f, -0.001949f, -0.022271f, 0.037509f, + -0.017378f, 0.017119f, 0.028395f, 0.023399f, 0.004349f, 0.028306f, 0.003217f, 0.010088f, 0.005987f, 0.017176f, 0.003374f, 0.005448f, 0.036051f, -0.012097f, -0.007883f, 0.030480f, 0.015887f, 0.008258f, -0.012606f, 0.003050f, 0.024789f, -0.002709f, 0.019859f, 0.004548f, 0.004313f, 0.012491f, -0.006752f, -0.000638f, 0.001304f, -0.001338f, -0.005639f, 0.009721f, 0.004497f, -0.013604f, 0.007414f, 0.005026f, 0.007134f, 0.003493f, -0.003947f, -0.000065f, -0.004379f, -0.005027f, 0.005945f, 0.007575f, 0.003113f, 0.004559f, -0.004118f, -0.004020f, -0.002770f, -0.004932f, -0.006468f, -0.009649f, 0.001304f, -0.006230f, 0.004457f, -0.002358f, 0.002540f, -0.008942f, -0.005939f, -0.001987f, -0.003026f, -0.002754f, -0.004174f, 0.000995f, 0.008335f, 0.008709f, 0.003158f, 0.000541f, -0.005143f, 0.006834f, 0.026733f, 0.025427f, -0.006727f, -0.013034f, -0.002535f, -0.007692f, 0.029250f, 0.019013f, -0.051086f, -0.005605f, 0.004090f, -0.023964f, 0.009425f, -0.034954f, 0.026465f, 0.006419f, -0.004213f, 0.014499f, 0.007106f, -0.007361f, -0.011853f, -0.008581f, 0.037390f, 0.001495f, -0.000421f, 0.008287f, + -0.005214f, 0.015020f, 0.044059f, 0.018000f, -0.006605f, -0.007817f, -0.006650f, 0.025596f, 0.008938f, 0.025917f, 0.017764f, 0.012930f, 0.007292f, -0.011294f, -0.012604f, 0.011560f, -0.026434f, 0.004483f, -0.014138f, -0.011660f, 0.000687f, 0.018122f, 0.002331f, 0.001458f, 0.006280f, -0.005702f, 0.030099f, 0.039329f, 0.044776f, -0.000212f, 0.020307f, -0.026715f, 0.010079f, 0.015482f, -0.012497f, 0.022902f, -0.018574f, -0.036589f, 0.004604f, -0.019172f, -0.003133f, 0.001733f, -0.019712f, 0.004901f, 0.026324f, -0.016144f, -0.016044f, 0.013412f, 0.024358f, -0.001080f, -0.009351f, 0.022678f, 0.001725f, 0.005099f, -0.015861f, -0.003188f, -0.001369f, 0.018730f, -0.009791f, 0.001558f, -0.004704f, 0.004142f, -0.000679f, 0.003672f, 0.004417f, 0.003379f, -0.000304f, 0.001901f, 0.003737f, 0.005322f, -0.004614f, -0.008411f, -0.001886f, -0.001199f, -0.008238f, -0.009528f, -0.001117f, -0.004339f, 0.006478f, -0.006412f, 0.004817f, 0.009163f, -0.001057f, -0.014907f, -0.002055f, 0.003052f, -0.005802f, -0.006965f, 0.000484f, 0.004295f, 0.022811f, 0.007933f, 0.006618f, -0.000575f, -0.000062f, -0.001864f, + 0.006206f, -0.001507f, 0.006636f, 0.019768f, 0.017206f, -0.002127f, -0.001715f, -0.003166f, 0.000203f, -0.031863f, 0.057983f, 0.003621f, 0.015106f, 0.044263f, -0.016333f, 0.004488f, -0.008412f, 0.011643f, -0.012734f, 0.012747f, -0.031140f, -0.037012f, -0.001088f, -0.021934f, -0.001633f, -0.002078f, -0.002440f, -0.006280f, 0.002410f, -0.010283f, 0.009284f, -0.029423f, -0.011705f, -0.039682f, -0.001959f, 0.009074f, 0.019067f, 0.042809f, 0.023796f, 0.007388f, 0.005518f, 0.012285f, 0.009546f, 0.007216f, 0.017352f, 0.018122f, -0.005701f, -0.036240f, -0.035865f, -0.024640f, -0.014662f, 0.003595f, 0.012173f, -0.013276f, -0.020994f, -0.036759f, 0.001129f, -0.014042f, 0.033616f, -0.014959f, 0.008501f, -0.025505f, -0.012235f, -0.004466f, -0.010413f, -0.049285f, -0.051277f, 0.014094f, 0.005334f, 0.001345f, 0.026412f, 0.015042f, 0.021219f, 0.017053f, -0.031910f, -0.006942f, 0.060101f, -0.011094f, -0.022618f, 0.008848f, -0.013120f, 0.006161f, -0.036954f, 0.015041f, -0.016902f, 0.002566f, -0.002343f, 0.024392f, 0.001540f, 0.009811f, -0.020977f, 0.004046f, -0.011783f, -0.005300f, -0.014354f, -0.010887f, + 0.007665f, 0.008536f, -0.019160f, -0.006401f, 0.001509f, 0.003717f, 0.004910f, 0.002629f, -0.007353f, 0.008519f, 0.003601f, 0.002994f, -0.000877f, -0.000432f, 0.002780f, 0.008652f, -0.009034f, 0.008748f, -0.002156f, -0.000159f, -0.003125f, 0.005625f, -0.005250f, -0.002993f, 0.007729f, -0.014119f, -0.000143f, 0.002971f, -0.008552f, -0.002802f, -0.019879f, 0.014615f, 0.017163f, -0.000939f, 0.004176f, 0.004758f, 0.005965f, -0.008686f, 0.009649f, 0.006318f, 0.007574f, -0.006232f, 0.004222f, 0.006000f, 0.008776f, 0.034399f, 0.026207f, 0.003416f, 0.027845f, -0.005214f, -0.011320f, 0.015237f, -0.021183f, -0.041492f, -0.061958f, 0.005194f, 0.001378f, 0.023972f, 0.017586f, -0.023118f, -0.011764f, -0.060585f, -0.004003f, -0.028219f, 0.006649f, -0.014204f, -0.006714f, -0.011662f, -0.004429f, -0.004726f, -0.020982f, -0.009472f, -0.024464f, 0.019561f, -0.004867f, 0.016739f, 0.043460f, -0.022928f, 0.012543f, -0.003565f, -0.010725f, 0.011180f, -0.023174f, -0.039498f, 0.019005f, 0.009276f, 0.018902f, 0.011795f, -0.082691f, -0.037558f, 0.011063f, -0.027541f, -0.002302f, -0.023531f, 0.034654f, 0.041703f, + -0.002017f, 0.046098f, 0.006528f, 0.020940f, -0.006066f, -0.001527f, -0.025766f, 0.016331f, 0.033345f, 0.007221f, 0.055510f, 0.001311f, 0.007654f, -0.016296f, -0.024382f, 0.032847f, 0.052091f, 0.018179f, 0.010124f, 0.005132f, 0.019705f, 0.001700f, 0.003773f, -0.048741f, -0.035743f, -0.003702f, 0.002605f, 0.006460f, 0.036654f, 0.039414f, -0.007255f, 0.002589f, -0.013527f, 0.008207f, -0.025242f, 0.000646f, -0.026714f, -0.022634f, 0.011687f, -0.000660f, 0.002943f, -0.015027f, 0.009647f, 0.011799f, 0.007937f, 0.011949f, 0.014111f, 0.001224f, -0.008010f, 0.006191f, -0.010942f, -0.002671f, -0.006753f, -0.016037f, -0.004607f, -0.008871f, -0.007142f, 0.013309f, 0.007350f, -0.004743f, -0.010547f, -0.015883f, -0.010403f, 0.010718f, -0.010557f, -0.001044f, 0.000848f, 0.007336f, -0.014989f, -0.011970f, 0.005308f, 0.018611f, 0.011860f, 0.004790f, -0.000030f, -0.011195f, -0.001371f, -0.006806f, -0.012980f, 0.022166f, -0.032445f, -0.015987f, -0.060619f, -0.075537f, -0.056012f, -0.025572f, 0.017130f, -0.000484f, -0.013285f, -0.027591f, 0.000060f, 0.049862f, 0.024415f, -0.043594f, -0.007174f, -0.009001f, + -0.030812f, -0.005481f, 0.002282f, 0.021003f, 0.015464f, -0.032515f, 0.023386f, -0.018360f, 0.009933f, -0.017101f, 0.005195f, -0.024903f, -0.009307f, 0.012372f, -0.045024f, -0.008581f, -0.016969f, 0.014821f, -0.011199f, -0.041577f, 0.048963f, 0.047240f, 0.000652f, -0.019034f, 0.026678f, -0.063725f, -0.019967f, 0.019040f, -0.021447f, -0.013501f, -0.001636f, -0.020560f, 0.004097f, -0.005254f, -0.042738f, 0.018404f, -0.005437f, -0.013080f, -0.014614f, -0.011228f, -0.002665f, -0.011640f, -0.018115f, 0.035540f, -0.016878f, -0.016696f, 0.016883f, -0.000376f, 0.058219f, -0.011571f, -0.036074f, 0.020716f, -0.018834f, -0.015926f, -0.028142f, 0.019611f, 0.035911f, -0.069954f, 0.005509f, 0.059221f, -0.009608f, -0.003568f, -0.023382f, 0.040409f, -0.002841f, -0.021808f, -0.002906f, -0.020465f, -0.016504f, 0.029311f, -0.017531f, -0.001363f, -0.009726f, -0.012092f, -0.020486f, 0.008786f, 0.006863f, 0.010803f, -0.002434f, -0.016400f, -0.011326f, 0.000727f, 0.002909f, -0.025036f, -0.007204f, -0.016057f, 0.025050f, -0.008236f, 0.001798f, 0.003701f, 0.003109f, 0.002800f, -0.020349f, 0.013886f, 0.000698f, -0.007629f, + 0.018278f, 0.002980f, 0.023913f, -0.004080f, 0.027629f, 0.006565f, 0.011161f, 0.013689f, -0.017863f, -0.011620f, 0.008747f, -0.014531f, -0.011462f, 0.004549f, 0.000084f, -0.010151f, -0.024147f, 0.012004f, -0.047802f, 0.095496f, 0.068115f, -0.001296f, -0.018206f, 0.015160f, -0.057249f, 0.000962f, 0.071273f, -0.012549f, -0.024759f, 0.001186f, 0.080783f, -0.011542f, 0.017754f, -0.017152f, -0.036498f, -0.029508f, -0.007439f, -0.013462f, 0.014921f, 0.020689f, 0.001165f, -0.030350f, -0.042508f, -0.039102f, -0.006268f, -0.008552f, -0.021054f, 0.019837f, 0.016073f, -0.017048f, -0.020807f, -0.022715f, 0.012902f, 0.004545f, 0.015846f, 0.040459f, -0.000146f, -0.034356f, 0.023513f, 0.009347f, 0.008015f, 0.002583f, -0.000530f, -0.016478f, 0.029997f, 0.015445f, -0.011833f, -0.014113f, -0.009333f, -0.038998f, 0.010946f, 0.028879f, 0.008864f, -0.027242f, 0.032252f, 0.023727f, 0.013440f, 0.003783f, -0.016691f, 0.009044f, -0.055661f, 0.008954f, -0.003294f, 0.050048f, -0.017711f, -0.024417f, 0.010763f, -0.012615f, -0.000848f, -0.035733f, -0.006322f, -0.009379f, 0.048578f, -0.031166f, -0.058444f, -0.037950f, + -0.076004f, 0.015256f, -0.015293f, -0.004750f, -0.040458f, -0.025650f, -0.067134f, -0.029519f, -0.023323f, -0.003152f, 0.016761f, -0.021411f, -0.003560f, -0.003765f, -0.003177f, -0.005638f, 0.014702f, -0.024905f, 0.011242f, -0.009553f, -0.019395f, 0.003438f, -0.005396f, 0.018504f, 0.009646f, 0.000789f, -0.009576f, 0.023800f, 0.022110f, 0.013616f, -0.008143f, -0.011191f, -0.011241f, -0.010181f, 0.024835f, 0.040585f, 0.005027f, 0.037351f, 0.040836f, 0.014031f, 0.001057f, -0.035673f, -0.003534f, 0.007322f, 0.005659f, -0.002818f, -0.009589f, -0.030062f, -0.000327f, 0.021219f, 0.003686f, -0.022378f, -0.005461f, -0.016643f, 0.091126f, 0.003176f, 0.015449f, -0.015566f, -0.029380f, -0.040460f, -0.012861f, 0.010891f, 0.026954f, 0.021578f, -0.018855f, -0.000542f, -0.039678f, -0.015074f, 0.014715f, -0.034171f, -0.017733f, -0.013225f, 0.049320f, 0.025118f, 0.027303f, 0.025027f, -0.028035f, 0.004776f, 0.010641f, 0.011125f, -0.002400f, 0.032594f, -0.006942f, 0.014100f, 0.025958f, 0.009372f, 0.007444f, 0.021206f, 0.030064f, -0.017983f, -0.034652f, 0.022916f, -0.003487f, -0.000357f, -0.036653f, -0.034868f, + 0.008207f, -0.017682f, -0.013097f, 0.029741f, -0.030854f, 0.039483f, 0.026075f, -0.018227f, 0.021314f, -0.023913f, -0.023347f, -0.029080f, 0.041535f, -0.029431f, 0.013257f, 0.012106f, -0.047062f, 0.003988f, 0.005709f, -0.037842f, -0.064130f, -0.058041f, 0.042120f, -0.043755f, -0.000600f, -0.039398f, -0.008799f, -0.028321f, -0.002172f, 0.017464f, 0.011159f, -0.028820f, 0.029470f, 0.033535f, 0.071320f, 0.018115f, -0.047774f, 0.016369f, -0.029377f, 0.015442f, -0.042032f, 0.022087f, -0.017968f, 0.002661f, -0.008595f, 0.016733f, -0.005170f, -0.017626f, -0.040388f, -0.040792f, 0.004495f, 0.003385f, 0.025510f, -0.018684f, -0.001746f, 0.039302f, 0.011256f, 0.027090f, 0.008344f, -0.007719f, -0.003079f, -0.009974f, -0.026692f, 0.009048f, -0.032203f, -0.019497f, 0.006839f, 0.026125f, -0.035175f, 0.019038f, 0.003569f, 0.024672f, -0.008652f, 0.013584f, 0.025312f, 0.027472f, 0.028026f, -0.013344f, 0.013590f, 0.021422f, 0.023529f, 0.004108f, 0.013963f, 0.006866f, -0.011011f, 0.043138f, 0.020017f, 0.021489f, -0.018304f, 0.001640f, -0.039920f, -0.000634f, 0.006706f, 0.007801f, -0.035207f, -0.036627f, + -0.057985f, 0.040285f, 0.004116f, 0.013877f, -0.009554f, 0.021374f, -0.015896f, -0.015572f, 0.011967f, 0.030704f, 0.007163f, 0.020215f, 0.062401f, -0.008970f, -0.037709f, -0.079993f, -0.011427f, -0.030861f, -0.015249f, -0.018987f, -0.037219f, -0.026110f, -0.055584f, -0.006360f, -0.000887f, 0.019550f, 0.057588f, -0.047855f, -0.018490f, -0.007780f, 0.018853f, 0.020521f, 0.057063f, 0.007887f, -0.065199f, -0.014843f, 0.013369f, 0.051125f, 0.013383f, -0.078819f, -0.031657f, 0.071615f, 0.006516f, 0.071447f, -0.041934f, 0.002470f, 0.005599f, 0.043324f, -0.003992f, 0.039445f, 0.059195f, 0.008558f, 0.050231f, 0.035402f, 0.008557f, 0.069715f, 0.059451f, 0.019478f, 0.092686f, 0.071362f, 0.044682f, -0.074835f, -0.004797f, 0.029635f, 0.017165f, -0.000643f, -0.054317f, -0.064810f, -0.033548f, -0.092865f, -0.014596f, -0.068990f, -0.026285f, -0.017545f, -0.099551f, -0.094318f, -0.065662f, 0.032791f, 0.001182f, -0.021576f, -0.000997f, -0.006888f, -0.001822f, -0.018102f, -0.009549f, 0.023502f, 0.009467f, 0.004338f, -0.002906f, 0.004014f, -0.004278f, 0.014704f, -0.002141f, -0.024545f, 0.043564f, 0.007346f, + 0.010735f, -0.012492f, 0.002435f, -0.001150f, 0.023032f, -0.000793f, 0.013598f, -0.007414f, -0.023274f, 0.009887f, 0.018741f, 0.048291f, 0.042988f, 0.003245f, 0.000040f, 0.031000f, 0.015706f, 0.036149f, 0.030195f, -0.009019f, 0.034768f, 0.019632f, 0.007488f, 0.021995f, 0.014527f, -0.011699f, -0.004902f, -0.026863f, 0.017432f, -0.023910f, -0.010169f, 0.013601f, -0.051617f, 0.055097f, -0.023900f, 0.036094f, 0.017565f, -0.046156f, 0.006707f, 0.028833f, -0.018341f, -0.048213f, 0.031822f, -0.012986f, 0.027190f, -0.016101f, 0.006799f, 0.011291f, -0.029947f, -0.003393f, -0.013312f, -0.000502f, -0.048884f, -0.038137f, 0.047152f, 0.002317f, 0.018950f, -0.037217f, 0.038514f, 0.034756f, -0.026250f, 0.022207f, -0.038015f, -0.007953f, -0.021390f, 0.027628f, 0.067117f, -0.000993f, 0.081481f, -0.020469f, -0.004134f, 0.004132f, 0.008123f, -0.005343f, -0.046332f, 0.080428f, 0.052026f, -0.005971f, 0.043655f, 0.034644f, 0.045323f, -0.016986f, -0.001319f, -0.081117f, 0.036550f, 0.038707f, -0.010882f, -0.013560f, 0.050690f, 0.027322f, 0.026587f, 0.063832f, 0.010307f, -0.032181f, -0.039608f, 0.012326f, + -0.012656f, -0.046415f, 0.038452f, -0.053828f, 0.001989f, 0.012504f, -0.038931f, -0.059826f, -0.041355f, -0.014883f, 0.003944f, 0.049158f, 0.032269f, 0.016033f, -0.092811f, -0.025481f, 0.055314f, -0.003907f, -0.020506f, 0.016967f, -0.050478f, -0.030706f, 0.041754f, 0.000332f, 0.000216f, -0.017264f, -0.000123f, 0.026184f, -0.008347f, -0.018344f, 0.014161f, -0.005976f, -0.036037f, -0.018804f, 0.003105f, -0.002100f, -0.002588f, 0.001144f, -0.016041f, 0.000610f, -0.024881f, -0.032332f, 0.004031f, -0.002473f, -0.054550f, -0.005502f, -0.033199f, -0.018341f, -0.006425f, 0.008783f, 0.009478f, 0.030286f, -0.027794f, -0.018050f, 0.005587f, 0.029528f, -0.030721f, -0.031847f, 0.045242f, -0.006534f, -0.002981f, -0.008133f, -0.000700f, -0.018552f, 0.007729f, 0.021973f, 0.011348f, 0.019199f, 0.000923f, 0.007567f, 0.000065f, 0.003242f, -0.068514f, 0.038899f, 0.060813f, -0.001330f, 0.070061f, 0.020982f, -0.060580f, -0.037574f, -0.004639f, -0.021304f, -0.036791f, 0.038883f, 0.045838f, -0.004585f, 0.031950f, 0.042660f, -0.033677f, 0.030036f, 0.051516f, -0.003307f, -0.069201f, 0.027060f, -0.001810f, -0.013947f, + 0.019305f, 0.052194f, -0.016559f, -0.026569f, 0.013026f, -0.023153f, -0.029900f, -0.002288f, 0.046215f, 0.039113f, -0.065189f, 0.020599f, 0.028179f, -0.044094f, -0.027850f, 0.052805f, -0.014211f, -0.077258f, -0.009618f, 0.064622f, -0.020910f, -0.111540f, 0.117043f, -0.033409f, -0.013211f, -0.057757f, 0.075731f, 0.024412f, -0.025716f, 0.054727f, -0.031985f, -0.024297f, -0.013781f, 0.140339f, 0.047223f, -0.058987f, -0.051715f, 0.053730f, -0.012143f, 0.078291f, 0.001803f, 0.058723f, -0.080692f, 0.064610f, 0.112026f, 0.010390f, -0.011631f, -0.019829f, -0.019099f, -0.044717f, 0.105737f, 0.070658f, -0.062619f, 0.017532f, -0.065834f, -0.011501f, 0.007566f, 0.013651f, 0.009735f, 0.019389f, 0.002280f, -0.072770f, 0.034420f, 0.004268f, -0.007084f, -0.001732f, 0.033847f, -0.014644f, 0.007865f, -0.010771f, 0.017787f, -0.007046f, 0.004953f, -0.011775f, 0.022292f, 0.000703f, -0.003890f, 0.012238f, 0.018017f, -0.039923f, 0.005316f, 0.024866f, 0.010048f, -0.028820f, 0.015823f, 0.044848f, -0.043582f, -0.068669f, 0.013992f, 0.008330f, 0.027358f, 0.026113f, -0.003065f, -0.062046f, -0.020382f, 0.016751f, + 0.009119f, 0.017237f, -0.008772f, 0.002424f, -0.001922f, -0.020823f, 0.018596f, -0.016329f, 0.050372f, 0.115200f, 0.022271f, -0.044548f, -0.010616f, -0.010927f, 0.020202f, 0.017335f, -0.035975f, -0.051294f, 0.013680f, -0.043408f, 0.008629f, -0.027022f, -0.031083f, -0.006758f, 0.005256f, 0.014723f, -0.034644f, -0.013994f, -0.013742f, -0.043111f, 0.036147f, -0.013563f, 0.002321f, -0.006399f, -0.028767f, 0.011407f, 0.008083f, 0.000999f, -0.006221f, 0.000319f, -0.001061f, -0.017005f, -0.036594f, 0.015645f, -0.018169f, 0.015868f, 0.011150f, -0.036572f, -0.029613f, -0.003365f, -0.004260f, -0.004169f, -0.007863f, 0.029811f, -0.020630f, 0.003051f, -0.038843f, 0.033163f, -0.038056f, -0.020141f, 0.018922f, 0.000537f, -0.030498f, 0.024252f, -0.041005f, 0.003131f, 0.012353f, -0.001077f, 0.004495f, 0.019664f, 0.009338f, -0.042245f, 0.021399f, 0.003018f, -0.025484f, 0.036268f, 0.014297f, -0.040085f, -0.004370f, -0.031954f, -0.004189f, 0.013053f, 0.010745f, -0.040804f, 0.052042f, -0.027464f, -0.015078f, 0.028994f, 0.019252f, 0.004790f, 0.019375f, -0.001553f, 0.027100f, -0.011978f, 0.005592f, -0.003283f, + 0.013150f, 0.010304f, -0.007706f, -0.009306f, 0.010477f, -0.012897f, 0.001454f, 0.002347f, 0.001802f, -0.007527f, 0.001371f, -0.007009f, -0.011643f, -0.006251f, -0.012671f, -0.000541f, 0.009687f, 0.016850f, 0.006323f, 0.002137f, 0.008955f, 0.011101f, -0.015090f, 0.023608f, 0.006277f, -0.000556f, -0.015300f, -0.008580f, 0.007485f, 0.018740f, -0.003464f, -0.000164f, -0.008957f, 0.003280f, 0.002823f, -0.007400f, -0.010212f, -0.008960f, -0.023969f, -0.008543f, -0.069148f, -0.086330f, -0.031656f, 0.260818f, 0.208748f, 0.138445f, 0.252441f, -0.100236f, -0.238829f, -0.076549f, -0.386005f, -0.150398f, 0.010923f, -0.090443f, 0.177047f, 0.241896f, 0.039568f, 0.153796f, 0.264084f, 0.005816f, 0.072796f, -0.017122f, -0.310374f, -0.256711f, -0.194028f, -0.192663f, -0.094971f, 0.147341f, 0.079142f, 0.114044f, 0.324170f, 0.137589f, 0.020126f, 0.194206f, 0.090232f, -0.111063f, 0.037868f, -0.093146f, -0.314556f, -0.075588f, -0.164357f, -0.323944f, -0.053874f, 0.007606f, -0.079197f, 0.219345f, 0.253036f, 0.099916f, 0.297543f, 0.301232f, 0.056183f, 0.116184f, 0.052210f, -0.190269f, -0.213444f, -0.199654f, + -0.359349f, -0.317424f, -0.121042f, -0.147375f, 0.031055f, 0.192561f, 0.263496f, 0.217861f, 0.336592f, 0.249822f, 0.133983f, 0.018615f, -0.042063f, -0.194107f, -0.236557f, -0.174586f, -0.207869f, -0.173264f, -0.007649f, -0.009762f, 0.039357f, 0.187031f, 0.090075f, 0.114257f, 0.179091f, -0.003741f, -0.055903f, -0.029620f, -0.112426f, -0.064253f, -0.037762f, -0.041482f, 0.045906f, 0.094692f, 0.036625f, 0.052394f, 0.059565f, -0.043580f, -0.015643f, -0.018599f, -0.114707f, 0.015717f, 0.047726f, -0.124267f, -0.001655f, -0.011615f, -0.125450f, 0.046432f, 0.020997f, -0.142069f, 0.089459f, 0.133357f, 0.031232f, 0.268836f, 0.167181f, -0.003626f, 0.142993f, 0.025515f, -0.182117f, -0.151400f, -0.237112f, -0.336437f, -0.252600f, -0.164616f, -0.088587f, 0.114316f, 0.248439f, 0.291118f, 0.362648f, 0.355257f, 0.251471f, 0.055188f, -0.027041f, -0.181187f, -0.330079f, -0.321106f, -0.285327f, -0.239839f, -0.052033f, 0.025199f, 0.041203f, 0.164198f, 0.174608f, 0.121000f, 0.124680f, 0.096655f, 0.041778f, 0.058983f, 0.042726f, -0.011092f, -0.022313f, -0.052497f, -0.104861f, -0.113731f, -0.112529f, -0.113930f, + -0.085341f, -0.017130f, 0.008478f, 0.030067f, 0.036100f, 0.020430f, 0.008192f, 0.002036f}, + {-0.009431f, 0.029314f, 0.011241f, 0.007123f, 0.002320f, -0.006218f, 0.000085f, 0.005619f, 0.010585f, 0.000141f, 0.001033f, 0.000614f, -0.003867f, 0.001025f, 0.003598f, -0.000729f, 0.003514f, 0.005404f, 0.007217f, 0.003021f, 0.002967f, 0.003791f, 0.003378f, -0.006636f, 0.006730f, 0.012614f, -0.005978f, 0.003576f, 0.001991f, 0.003511f, 0.000660f, 0.007461f, -0.004860f, -0.001752f, -0.004373f, 0.004297f, 0.012528f, -0.002128f, 0.006084f, -0.000189f, -0.002820f, -0.010339f, 0.003870f, -0.005368f, 0.004765f, 0.002386f, 0.005322f, -0.000618f, -0.003186f, 0.001652f, -0.002192f, 0.007142f, 0.000935f, -0.005709f, 0.007285f, -0.001624f, 0.005688f, 0.004350f, -0.000221f, 0.004173f, 0.008211f, -0.002344f, -0.002866f, -0.002365f, 0.004090f, -0.003392f, -0.004416f, 0.005066f, 0.000068f, 0.003387f, -0.005456f, 0.008029f, 0.000486f, -0.002317f, -0.000939f, -0.000938f, 0.003221f, -0.003068f, -0.004835f, 0.002816f, 0.004340f, 0.004057f, -0.003834f, -0.005784f, 0.002314f, -0.000251f, -0.000679f, -0.002261f, -0.002092f, 0.002821f, -0.000745f, -0.000475f, -0.001775f, -0.002163f, 0.000422f, -0.001572f, + 0.000658f, 0.000387f, 0.002130f, 0.001420f, -0.000630f, 0.000704f, 0.001214f, -0.001344f, -0.000531f, 0.000019f, -0.000583f, -0.001045f, 0.000741f, 0.001996f, 0.001180f, 0.001474f, 0.000030f, 0.022772f, 0.017871f, 0.008957f, 0.001317f, -0.003384f, 0.010363f, -0.006073f, -0.006493f, -0.001513f, -0.011352f, 0.006849f, 0.000476f, -0.004734f, 0.002707f, 0.006581f, 0.011359f, -0.005284f, 0.006560f, 0.014713f, -0.004186f, 0.000077f, 0.003397f, 0.007634f, -0.001909f, 0.008319f, 0.005931f, 0.008416f, 0.001969f, 0.006420f, -0.006538f, 0.011226f, -0.001318f, 0.010830f, 0.005414f, -0.001229f, 0.001380f, -0.001832f, -0.000220f, -0.003961f, -0.001822f, -0.004886f, -0.003543f, 0.003750f, -0.000985f, -0.010557f, -0.002327f, 0.001075f, -0.000259f, -0.005910f, -0.006028f, -0.003120f, -0.002587f, 0.008184f, -0.003258f, -0.009080f, -0.012033f, -0.013333f, -0.004548f, -0.005899f, -0.000441f, 0.002001f, 0.006454f, -0.008739f, -0.003911f, 0.000968f, -0.000844f, -0.003945f, 0.001003f, -0.009197f, -0.000828f, -0.010831f, 0.005796f, -0.005922f, -0.002825f, 0.007421f, -0.001053f, 0.005077f, 0.001516f, 0.001814f, + 0.005824f, 0.001388f, -0.004625f, -0.002192f, 0.000497f, -0.004603f, 0.002453f, 0.004570f, 0.002281f, -0.003619f, 0.002709f, 0.003812f, 0.000789f, 0.002039f, -0.001104f, -0.002152f, -0.001431f, -0.002152f, 0.001522f, -0.000276f, 0.001398f, -0.001808f, -0.001266f, 0.001427f, 0.012068f, -0.026164f, -0.007037f, -0.013250f, -0.002474f, 0.000003f, 0.014401f, -0.006998f, -0.023472f, -0.008253f, -0.000610f, 0.008947f, 0.002775f, -0.008689f, -0.020379f, -0.005226f, 0.005573f, -0.002267f, 0.011463f, 0.000468f, 0.005018f, -0.001116f, -0.009049f, -0.009817f, 0.005920f, 0.007254f, 0.000841f, 0.002370f, -0.000365f, 0.004446f, 0.001021f, -0.012076f, 0.000640f, 0.017069f, 0.002291f, -0.004206f, -0.001575f, -0.004497f, 0.001043f, -0.003874f, -0.007405f, 0.011442f, -0.003547f, -0.004717f, 0.010358f, -0.005382f, -0.009191f, 0.000459f, 0.000065f, 0.000338f, -0.013256f, 0.010821f, -0.004104f, -0.000215f, 0.009952f, 0.009088f, -0.014211f, -0.003562f, 0.002761f, 0.003498f, -0.001249f, 0.007836f, 0.002157f, 0.003917f, 0.005411f, 0.000857f, 0.004327f, 0.006576f, 0.001435f, 0.000091f, 0.006101f, -0.016166f, + -0.003577f, 0.000463f, 0.008281f, 0.004641f, -0.001980f, -0.001583f, 0.006028f, 0.005657f, -0.006450f, -0.000864f, -0.002285f, 0.000259f, 0.003576f, 0.004592f, 0.000925f, 0.005661f, -0.000545f, -0.003949f, -0.001876f, 0.000516f, 0.000438f, 0.000599f, -0.001486f, 0.003967f, -0.000778f, 0.001471f, -0.000571f, -0.001705f, 0.001173f, 0.000017f, -0.000749f, -0.001383f, 0.000349f, -0.001296f, -0.000199f, -0.002382f, -0.001869f, 0.000581f, -0.000345f, -0.001845f, -0.003758f, -0.001310f, 0.000858f, 0.003282f, -0.051986f, -0.020650f, -0.010391f, -0.014873f, 0.004772f, -0.005200f, -0.004863f, -0.000706f, 0.006704f, -0.006055f, -0.006994f, -0.010432f, 0.002203f, 0.009210f, 0.002200f, -0.007178f, -0.008685f, 0.002548f, 0.007882f, 0.007095f, -0.009890f, -0.014843f, 0.001243f, -0.013882f, 0.007485f, -0.000174f, 0.005263f, -0.000471f, 0.005083f, -0.005513f, -0.002151f, 0.014352f, -0.017334f, 0.007955f, 0.004206f, 0.001873f, -0.006063f, 0.003779f, 0.008735f, 0.002213f, -0.010508f, 0.002066f, -0.006617f, 0.005124f, -0.014391f, -0.000631f, -0.013024f, 0.010050f, -0.000940f, -0.002690f, -0.003600f, 0.005498f, + -0.021947f, 0.010106f, -0.006231f, -0.013447f, 0.005483f, 0.010680f, 0.012303f, 0.007094f, 0.002737f, -0.000939f, 0.001587f, -0.001178f, 0.007992f, -0.004552f, 0.002367f, 0.006104f, 0.015349f, 0.002355f, 0.000447f, -0.010989f, 0.007110f, -0.005497f, 0.001392f, 0.000239f, 0.008242f, -0.007245f, 0.000573f, 0.007370f, -0.000510f, -0.008883f, -0.011995f, 0.009979f, 0.000997f, 0.001822f, 0.005218f, -0.001104f, 0.002619f, 0.002107f, 0.000082f, 0.001755f, -0.000691f, 0.000246f, 0.002855f, 0.002444f, 0.002817f, -0.004464f, 0.001895f, -0.003365f, -0.001276f, -0.002843f, 0.002770f, -0.003218f, -0.029642f, 0.014523f, 0.023101f, 0.004516f, 0.001803f, 0.012876f, 0.004315f, 0.003954f, 0.007005f, 0.000988f, 0.007330f, 0.007419f, -0.005994f, -0.001074f, 0.000977f, -0.007245f, -0.004531f, -0.000073f, 0.003548f, -0.004265f, 0.024021f, 0.012798f, -0.003536f, 0.001741f, 0.007609f, 0.009636f, 0.010949f, -0.004575f, 0.007702f, 0.009022f, 0.000479f, 0.002646f, 0.002567f, 0.005146f, 0.003688f, 0.002281f, 0.005055f, 0.004874f, -0.010433f, -0.008023f, -0.016048f, 0.001752f, -0.005703f, -0.007990f, + 0.008213f, -0.002325f, 0.005160f, -0.019829f, 0.021828f, -0.001569f, -0.010422f, -0.001912f, 0.017298f, 0.012556f, -0.002790f, 0.000466f, 0.008362f, -0.003973f, 0.003581f, -0.006372f, -0.013668f, 0.001623f, 0.001249f, -0.010946f, -0.004364f, -0.010790f, 0.001903f, 0.004009f, 0.002417f, -0.005238f, -0.009576f, -0.014539f, -0.017367f, -0.012455f, -0.004885f, 0.001011f, -0.004244f, 0.001703f, 0.005735f, 0.005125f, -0.007233f, -0.000761f, -0.007886f, 0.002882f, -0.002764f, 0.002270f, -0.000128f, -0.003200f, 0.002274f, 0.002637f, -0.002337f, -0.001081f, -0.003036f, 0.004075f, -0.004842f, 0.001060f, 0.001522f, 0.001439f, -0.000510f, -0.001111f, 0.001008f, 0.002171f, 0.002138f, 0.001779f, 0.001337f, 0.001832f, 0.000578f, 0.003475f, -0.000817f, 0.003850f, -0.002413f, 0.001224f, -0.000731f, -0.000975f, -0.002775f, -0.002122f, -0.001852f, -0.002487f, 0.000968f, -0.001995f, -0.000285f, 0.001839f, 0.000594f, 0.054604f, 0.014480f, 0.004050f, -0.002024f, 0.032911f, 0.003863f, 0.015637f, 0.003228f, 0.010400f, 0.017143f, 0.006048f, -0.009515f, 0.010114f, 0.011784f, 0.001857f, -0.000860f, 0.002512f, + 0.021571f, 0.001490f, -0.007372f, -0.013122f, -0.003853f, -0.000404f, -0.014984f, 0.002505f, 0.004446f, 0.008589f, 0.003663f, 0.006059f, 0.016520f, -0.005171f, -0.002629f, 0.010138f, -0.001591f, -0.004491f, -0.000861f, -0.014791f, 0.009552f, 0.006243f, 0.000333f, 0.009490f, -0.004759f, -0.012959f, -0.027981f, -0.010262f, 0.010322f, 0.011401f, 0.000349f, 0.007995f, -0.007914f, -0.008603f, 0.022746f, -0.013194f, 0.010299f, -0.011622f, 0.002406f, -0.016933f, -0.017772f, 0.019243f, -0.007381f, -0.006954f, 0.026560f, 0.001976f, -0.003011f, -0.012516f, 0.009719f, 0.015326f, 0.000721f, -0.008305f, -0.015689f, -0.002490f, 0.011349f, -0.003676f, 0.003823f, -0.006953f, 0.005567f, -0.002670f, 0.001774f, 0.012090f, -0.013127f, 0.004052f, -0.003749f, 0.000768f, 0.001459f, -0.001552f, 0.013963f, 0.004339f, 0.002008f, -0.004215f, 0.000087f, -0.003353f, 0.005846f, -0.002917f, 0.004621f, 0.004638f, -0.004988f, -0.000037f, -0.000856f, -0.003262f, 0.006590f, 0.001048f, 0.003042f, 0.000173f, -0.002428f, 0.001269f, -0.000051f, 0.000037f, 0.001823f, 0.002864f, 0.001014f, 0.003780f, 0.001130f, -0.000393f, + 0.002083f, 0.001376f, -0.001603f, 0.000364f, -0.000750f, 0.000738f, 0.003355f, 0.003724f, 0.000516f, -0.000471f, 0.027735f, 0.009322f, 0.022976f, -0.014039f, 0.004576f, 0.012972f, -0.017596f, -0.005910f, -0.006895f, 0.001925f, -0.008908f, -0.005312f, 0.013607f, -0.004048f, -0.002602f, -0.000863f, 0.017036f, -0.006130f, -0.007945f, 0.018336f, 0.002919f, -0.012784f, 0.005404f, -0.002718f, 0.002883f, 0.007000f, -0.010489f, -0.002303f, -0.007892f, -0.013988f, 0.001678f, 0.000467f, 0.002641f, -0.013761f, -0.014490f, 0.005704f, -0.001296f, 0.005555f, -0.000629f, 0.008029f, 0.002282f, -0.000250f, -0.009277f, -0.008826f, 0.002425f, 0.009018f, 0.004273f, -0.002491f, 0.026106f, 0.006325f, 0.004416f, 0.012004f, 0.004340f, 0.008956f, 0.008939f, 0.006003f, 0.003550f, 0.004627f, -0.003869f, -0.001954f, 0.001919f, -0.010993f, 0.002864f, -0.017785f, 0.004813f, -0.011737f, 0.009197f, -0.006555f, 0.005016f, -0.002207f, -0.008757f, 0.003025f, -0.002375f, 0.009444f, -0.008217f, 0.025088f, 0.020974f, 0.009820f, -0.018088f, 0.005760f, 0.007918f, -0.007585f, 0.003240f, 0.002328f, 0.012165f, 0.011745f, + 0.004795f, -0.000164f, -0.001764f, -0.002406f, -0.007213f, 0.010951f, -0.000919f, -0.001215f, -0.000069f, -0.003025f, 0.001080f, 0.003716f, -0.003090f, 0.005748f, -0.002260f, -0.004563f, -0.004981f, -0.000082f, 0.003215f, 0.003320f, -0.001008f, -0.001076f, -0.003962f, -0.001573f, 0.001911f, -0.004532f, 0.005029f, 0.005410f, -0.003510f, 0.001040f, -0.004412f, -0.001331f, 0.000597f, 0.001817f, -0.003398f, 0.005726f, -0.034464f, -0.066318f, -0.002828f, -0.013291f, 0.011505f, -0.003419f, -0.018359f, -0.001780f, -0.014866f, -0.016399f, -0.014054f, 0.021689f, 0.011265f, -0.014485f, -0.008323f, 0.016508f, 0.009565f, 0.014733f, -0.010129f, 0.009530f, -0.008982f, -0.009078f, -0.002790f, -0.003964f, -0.028037f, 0.007667f, 0.016034f, 0.006903f, -0.016660f, -0.003827f, 0.002976f, 0.004280f, -0.014857f, -0.003308f, -0.021330f, 0.004720f, -0.010099f, -0.000937f, -0.007414f, 0.004096f, 0.022876f, -0.002451f, -0.004215f, 0.011462f, 0.016735f, -0.010089f, 0.004592f, 0.006329f, -0.014049f, 0.007562f, 0.007072f, -0.016525f, 0.002644f, 0.010726f, -0.002484f, -0.017399f, -0.010930f, -0.011214f, 0.015872f, 0.006157f, + 0.015546f, -0.009140f, -0.017848f, 0.004276f, 0.008990f, -0.003776f, -0.012755f, 0.008552f, 0.012589f, 0.011908f, -0.014628f, -0.007601f, -0.002980f, 0.023785f, -0.004970f, 0.014216f, 0.004248f, -0.016666f, -0.013531f, -0.002554f, 0.009407f, -0.015787f, -0.000846f, -0.002896f, 0.008805f, -0.001852f, 0.019734f, 0.002516f, -0.004393f, -0.005807f, -0.004868f, -0.005598f, -0.003557f, -0.001856f, 0.001921f, 0.000017f, -0.002187f, -0.007130f, -0.000573f, -0.006929f, -0.002935f, 0.002948f, -0.002315f, 0.001216f, -0.001896f, -0.005215f, 0.003337f, -0.000777f, 0.008556f, -0.001558f, -0.006678f, -0.004721f, 0.002841f, -0.001199f, 0.000466f, -0.001820f, -0.004224f, 0.001585f, 0.004889f, -0.004098f, -0.001140f, 0.006518f, 0.003163f, -0.003867f, 0.005325f, -0.033927f, -0.000032f, 0.000939f, 0.019566f, 0.004739f, -0.007801f, 0.011571f, -0.005560f, 0.005062f, -0.018375f, -0.005411f, -0.011639f, -0.006465f, -0.023233f, -0.008827f, -0.013870f, 0.032045f, 0.018431f, 0.019528f, -0.022789f, -0.019529f, -0.009328f, 0.010915f, -0.001028f, -0.000269f, 0.000683f, 0.006548f, -0.001535f, 0.009298f, -0.013248f, -0.011413f, + -0.000193f, -0.003257f, -0.016347f, -0.016501f, -0.013148f, -0.009575f, -0.007077f, -0.006588f, -0.020715f, 0.009493f, 0.025469f, -0.005546f, 0.011962f, 0.016316f, -0.011931f, 0.014116f, 0.009007f, 0.003332f, 0.023268f, -0.001145f, 0.019497f, 0.007181f, 0.002569f, -0.018296f, 0.007384f, 0.008978f, -0.004729f, 0.026708f, 0.021413f, 0.004113f, -0.007856f, -0.013381f, 0.007827f, -0.013156f, 0.005415f, -0.000311f, 0.015935f, -0.000091f, -0.023452f, 0.001644f, -0.009164f, -0.003811f, -0.017536f, 0.020587f, 0.010844f, 0.007423f, 0.005049f, 0.022981f, -0.006493f, -0.024214f, -0.003640f, 0.015116f, 0.000566f, -0.012509f, -0.003052f, 0.001655f, -0.005224f, 0.002869f, 0.007460f, -0.000150f, 0.000389f, -0.001634f, 0.002533f, -0.000485f, 0.008958f, 0.002599f, 0.002785f, -0.002162f, 0.003569f, 0.004554f, 0.008152f, -0.006801f, 0.004588f, 0.004523f, 0.000110f, 0.001353f, 0.008212f, 0.004349f, 0.002253f, -0.004990f, 0.007006f, -0.002115f, -0.003795f, -0.004727f, -0.000132f, -0.012110f, 0.007759f, 0.003747f, 0.001551f, -0.005793f, 0.006864f, 0.006588f, 0.012066f, 0.007314f, 0.002202f, 0.001948f, + 0.000790f, 0.009751f, -0.030714f, 0.013842f, 0.010150f, 0.013131f, -0.014351f, -0.025470f, 0.007362f, 0.007637f, 0.001259f, -0.021481f, 0.020510f, 0.005877f, -0.010979f, -0.018921f, 0.008509f, -0.008379f, 0.032845f, 0.038262f, 0.005624f, -0.006145f, -0.014315f, 0.021718f, -0.024770f, -0.008875f, 0.030494f, 0.007571f, -0.005974f, -0.016532f, -0.015254f, -0.008625f, 0.000499f, -0.020215f, 0.004508f, 0.021490f, -0.002784f, 0.008058f, -0.015816f, -0.014427f, -0.004932f, -0.011933f, 0.031214f, -0.011503f, 0.013988f, 0.011521f, 0.012634f, 0.003321f, 0.006178f, -0.021710f, -0.021800f, -0.020876f, -0.004708f, 0.015615f, 0.035987f, -0.014556f, -0.026105f, -0.006051f, -0.012065f, 0.006639f, 0.005527f, 0.020040f, -0.012331f, -0.000290f, -0.016318f, -0.003128f, 0.028801f, -0.003724f, -0.015795f, 0.020624f, 0.006697f, 0.003307f, 0.010774f, -0.023200f, 0.003463f, -0.007879f, 0.002164f, 0.010570f, 0.025305f, 0.007066f, -0.029579f, 0.010749f, 0.002500f, -0.004610f, -0.012378f, 0.000542f, -0.003230f, -0.001645f, -0.000882f, 0.004131f, 0.006710f, 0.008141f, 0.002618f, 0.000524f, -0.004855f, 0.001510f, + -0.001573f, 0.005835f, -0.010111f, 0.003714f, 0.003797f, -0.000249f, 0.000780f, 0.001647f, -0.007684f, -0.000238f, -0.005136f, 0.008223f, 0.007557f, 0.001871f, 0.009095f, -0.003631f, 0.001158f, 0.006991f, -0.001601f, 0.005532f, 0.001246f, 0.005118f, 0.001609f, -0.011687f, -0.000842f, -0.004203f, -0.000794f, 0.001543f, 0.000551f, -0.004148f, 0.000254f, -0.004880f, -0.000142f, -0.002396f, 0.049847f, -0.021629f, -0.017074f, -0.005133f, 0.010444f, -0.029134f, 0.011613f, -0.007820f, 0.014664f, -0.013045f, -0.006057f, 0.018170f, 0.013344f, 0.005171f, -0.009204f, -0.003251f, 0.024701f, 0.024439f, -0.005161f, 0.021343f, -0.006278f, 0.031358f, -0.014739f, -0.007652f, 0.005518f, 0.032844f, 0.023857f, 0.007966f, -0.017691f, -0.001200f, -0.036548f, -0.005478f, 0.005582f, 0.016787f, 0.019416f, 0.034599f, 0.008943f, -0.000612f, -0.001793f, -0.013256f, -0.022850f, -0.001618f, -0.019838f, 0.014266f, 0.004342f, 0.022051f, 0.012137f, -0.007524f, 0.021716f, -0.026012f, 0.011625f, -0.005802f, 0.001746f, -0.004527f, 0.027672f, 0.016293f, 0.007820f, 0.004951f, -0.050627f, -0.008044f, 0.029796f, 0.015103f, + 0.001712f, -0.000955f, 0.001372f, 0.024125f, 0.010096f, -0.038200f, -0.012603f, -0.014756f, 0.003425f, 0.000794f, -0.038084f, 0.001453f, -0.035611f, -0.023545f, -0.003230f, -0.015275f, -0.016668f, 0.022129f, 0.027834f, -0.003047f, -0.013753f, -0.001533f, 0.008444f, -0.003470f, 0.007183f, 0.011422f, -0.001076f, 0.012693f, 0.018496f, -0.005997f, -0.010534f, 0.001693f, -0.004578f, 0.005612f, 0.003527f, -0.002971f, -0.002751f, 0.000216f, 0.000133f, 0.005240f, -0.000714f, -0.006444f, 0.001164f, 0.006322f, 0.002218f, 0.005615f, -0.005046f, 0.008530f, -0.000142f, -0.003172f, 0.001965f, -0.005433f, 0.002033f, -0.010867f, -0.007085f, -0.008507f, 0.004247f, 0.000397f, -0.008197f, -0.001625f, 0.006772f, 0.004526f, 0.005860f, -0.003985f, 0.003169f, 0.000050f, -0.001468f, -0.010385f, -0.005457f, -0.011008f, 0.018087f, 0.035231f, -0.008918f, -0.014329f, 0.001972f, 0.013633f, 0.007762f, -0.021539f, -0.001406f, -0.017448f, -0.001024f, -0.023751f, -0.002690f, -0.020412f, 0.000867f, 0.021164f, 0.001568f, 0.046710f, -0.019700f, -0.009358f, -0.016766f, 0.019088f, 0.030997f, -0.024858f, -0.008447f, -0.038574f, + 0.007150f, -0.000262f, 0.010441f, 0.009586f, -0.021751f, -0.012759f, 0.016778f, -0.006256f, -0.004902f, -0.020939f, 0.042258f, -0.005566f, -0.045485f, 0.012858f, -0.012078f, -0.013369f, 0.016196f, 0.012829f, -0.013236f, -0.014324f, -0.004513f, -0.026082f, -0.015881f, 0.008886f, 0.005738f, 0.009269f, -0.008124f, -0.018791f, -0.022123f, -0.021881f, 0.018076f, -0.032209f, 0.000379f, 0.008019f, -0.010132f, 0.001069f, -0.000346f, -0.004166f, -0.025855f, -0.004522f, -0.010592f, 0.016612f, 0.020797f, -0.003633f, 0.032408f, -0.001599f, -0.000475f, -0.009718f, -0.002221f, 0.047071f, 0.004394f, -0.020869f, -0.008586f, 0.018472f, 0.013414f, -0.025715f, 0.000382f, 0.003977f, -0.017766f, 0.014961f, 0.003304f, 0.016715f, 0.002397f, 0.002773f, 0.002378f, 0.001555f, 0.007026f, 0.010172f, 0.000731f, 0.005232f, 0.015775f, 0.001511f, -0.005837f, 0.003046f, 0.007492f, -0.005778f, -0.001888f, 0.001182f, -0.007638f, 0.007192f, 0.006226f, 0.008270f, 0.001411f, -0.008403f, 0.001832f, -0.002696f, 0.001265f, -0.001546f, -0.001781f, 0.001043f, -0.005050f, 0.007199f, -0.003761f, -0.004502f, -0.005988f, 0.014270f, + -0.000046f, -0.014886f, 0.010898f, 0.008964f, 0.003565f, -0.000712f, 0.008290f, 0.006692f, -0.017072f, -0.022626f, 0.057293f, -0.014661f, -0.005147f, 0.005201f, 0.024360f, 0.017682f, -0.037386f, -0.015111f, -0.035526f, 0.007862f, 0.001914f, -0.010866f, -0.039097f, 0.001704f, -0.018321f, 0.008182f, 0.008455f, 0.019760f, 0.000867f, 0.014404f, 0.067306f, 0.014738f, 0.016695f, -0.010514f, -0.003889f, 0.029522f, -0.002716f, 0.002387f, 0.007662f, 0.001993f, -0.004475f, -0.015326f, 0.027019f, -0.028771f, 0.011852f, -0.042804f, -0.013205f, -0.019999f, -0.026621f, -0.022684f, -0.000207f, -0.046780f, -0.016105f, 0.006479f, 0.026650f, 0.015474f, -0.046181f, 0.026142f, 0.017192f, 0.019061f, -0.029391f, 0.021520f, -0.013881f, -0.033465f, -0.011574f, -0.033299f, 0.016113f, 0.039883f, 0.009908f, -0.003793f, -0.026180f, 0.021100f, -0.027873f, 0.041643f, -0.007856f, -0.004469f, -0.025203f, -0.027394f, 0.003946f, 0.032519f, 0.010627f, -0.022363f, -0.009145f, 0.005451f, -0.004686f, -0.008952f, 0.021258f, 0.010996f, -0.009971f, 0.027519f, -0.002271f, -0.039069f, 0.048947f, 0.026064f, 0.020149f, 0.009242f, + -0.006619f, -0.002416f, -0.004100f, 0.014625f, 0.003310f, 0.002145f, 0.032215f, 0.012579f, 0.000566f, 0.001535f, 0.004570f, 0.016823f, -0.013497f, 0.009483f, 0.000919f, 0.003166f, 0.003078f, 0.010833f, 0.005296f, 0.000667f, 0.018154f, 0.013888f, 0.001207f, -0.006355f, -0.006458f, -0.002388f, 0.014859f, 0.007432f, 0.008339f, 0.008011f, 0.009883f, -0.012299f, 0.012291f, -0.003271f, -0.003286f, 0.011386f, 0.017857f, -0.002604f, -0.004975f, -0.000120f, 0.016995f, 0.019578f, 0.007490f, 0.012061f, 0.009244f, 0.031489f, 0.005871f, -0.020123f, 0.009114f, -0.005805f, 0.009392f, 0.034539f, -0.048591f, -0.021983f, -0.039071f, 0.022244f, -0.007878f, 0.003894f, -0.012900f, 0.028200f, -0.027704f, -0.027872f, -0.012723f, -0.006448f, -0.019953f, -0.034510f, -0.016694f, 0.006549f, 0.022698f, -0.031750f, 0.020979f, -0.011908f, 0.002511f, 0.041292f, 0.031551f, -0.000457f, 0.016628f, 0.008043f, -0.006563f, -0.004912f, -0.055969f, 0.007833f, -0.005680f, 0.005585f, 0.010902f, -0.004329f, 0.001526f, 0.056618f, -0.050766f, 0.004845f, 0.061255f, 0.008057f, 0.016918f, -0.023959f, -0.006559f, 0.032084f, + 0.056233f, 0.002907f, 0.049869f, -0.019389f, 0.045115f, -0.015801f, 0.033394f, 0.033918f, -0.008382f, 0.066050f, -0.010985f, -0.002750f, -0.019604f, -0.029787f, -0.031608f, -0.014465f, -0.018973f, -0.045888f, -0.021437f, -0.009713f, 0.016985f, 0.016830f, 0.002154f, -0.023561f, -0.003941f, -0.006638f, 0.029537f, 0.009186f, -0.015401f, 0.025322f, 0.005696f, -0.003117f, -0.003570f, -0.018411f, -0.002835f, -0.007317f, 0.007708f, -0.018644f, -0.008916f, -0.013004f, -0.012940f, 0.023540f, 0.009089f, -0.007815f, 0.007109f, -0.006017f, 0.004498f, -0.014171f, 0.021095f, 0.000990f, 0.005916f, -0.000563f, -0.014226f, 0.013013f, -0.001733f, 0.004768f, 0.014984f, 0.010371f, 0.006383f, 0.001150f, -0.022134f, 0.010545f, -0.008490f, -0.001053f, 0.019034f, -0.000455f, 0.007048f, 0.004516f, 0.009088f, 0.012750f, -0.004626f, -0.010384f, -0.006850f, -0.008334f, 0.003960f, 0.011425f, 0.019594f, 0.011255f, -0.022906f, -0.002985f, -0.025094f, -0.021216f, -0.072760f, -0.051439f, -0.036602f, -0.003451f, 0.049214f, -0.032185f, -0.004203f, -0.024726f, -0.036088f, -0.029609f, -0.036866f, -0.038157f, -0.015265f, -0.045066f, + -0.049349f, -0.042650f, 0.012036f, -0.029400f, -0.015543f, -0.036690f, 0.035046f, 0.057696f, 0.004906f, -0.006485f, -0.020361f, 0.004866f, -0.003669f, -0.001372f, -0.004702f, 0.018273f, 0.003742f, 0.039389f, -0.034294f, 0.003138f, -0.029184f, 0.059794f, 0.014561f, -0.034853f, 0.027419f, -0.024940f, 0.022262f, -0.033534f, 0.019672f, 0.003024f, -0.020216f, 0.018221f, -0.031942f, -0.010515f, 0.010056f, 0.032739f, 0.014200f, 0.058007f, -0.013031f, -0.037195f, 0.003463f, -0.010524f, 0.004367f, -0.024605f, -0.021464f, -0.039706f, 0.005007f, -0.042222f, -0.008540f, -0.006501f, -0.037152f, 0.024925f, 0.031387f, -0.018156f, -0.002021f, -0.054480f, 0.062747f, 0.076255f, 0.012174f, -0.029920f, 0.010374f, 0.067120f, -0.031466f, -0.014155f, -0.035885f, -0.020773f, -0.039388f, 0.016290f, -0.001911f, -0.022086f, 0.017168f, -0.022124f, 0.009236f, -0.013723f, -0.006381f, 0.009226f, 0.004762f, -0.000053f, -0.014771f, -0.002824f, 0.012911f, 0.007657f, -0.024617f, 0.019549f, -0.017158f, 0.009074f, 0.011221f, -0.007627f, -0.014495f, 0.007897f, -0.011730f, 0.009702f, 0.006885f, -0.015176f, 0.005572f, -0.001957f, + 0.005871f, -0.008997f, -0.024834f, 0.006879f, 0.004301f, -0.010075f, 0.006382f, -0.009015f, 0.017620f, -0.000164f, 0.007174f, 0.002143f, 0.022907f, 0.003156f, -0.030842f, 0.017459f, 0.011378f, 0.005353f, -0.058631f, 0.107311f, 0.040619f, -0.008815f, -0.032334f, -0.009033f, -0.034341f, 0.036926f, 0.093121f, 0.002016f, -0.061761f, -0.028281f, 0.033602f, 0.012485f, -0.012283f, 0.044369f, -0.008571f, 0.005566f, 0.025457f, -0.002683f, -0.025605f, -0.008352f, 0.020969f, -0.026848f, -0.024395f, -0.009915f, 0.008730f, 0.001325f, -0.004642f, -0.011274f, 0.019759f, 0.002052f, 0.029242f, 0.023083f, -0.030118f, 0.014804f, 0.035940f, 0.020106f, -0.027834f, 0.010760f, 0.005978f, 0.024238f, 0.000626f, 0.008451f, 0.006541f, 0.009997f, 0.050668f, 0.047951f, 0.029720f, 0.064991f, -0.032014f, 0.033504f, -0.038571f, 0.024626f, -0.000426f, 0.022506f, 0.028223f, 0.009101f, 0.007341f, 0.034268f, 0.015929f, -0.009120f, 0.021752f, 0.000134f, 0.029176f, -0.030936f, -0.017691f, 0.002702f, 0.070333f, -0.048516f, 0.004693f, -0.061008f, -0.007251f, 0.007097f, 0.024038f, -0.029675f, -0.005871f, -0.030583f, + 0.007917f, 0.037751f, -0.023143f, -0.054545f, -0.011635f, -0.005347f, -0.014825f, 0.013269f, 0.009483f, -0.015421f, 0.005445f, -0.013189f, -0.012927f, 0.012261f, -0.001976f, -0.007342f, -0.024668f, 0.013406f, -0.001073f, -0.015588f, -0.012529f, 0.011677f, 0.033183f, 0.003248f, -0.009555f, -0.004391f, 0.012068f, 0.029838f, 0.005921f, 0.002613f, 0.024817f, -0.000704f, 0.006731f, -0.002294f, -0.004922f, -0.001122f, 0.008978f, 0.014136f, 0.008448f, -0.003975f, -0.005310f, 0.012597f, 0.008928f, -0.018689f, 0.017742f, 0.004828f, 0.034506f, -0.008581f, 0.008737f, 0.020813f, -0.014295f, -0.008729f, 0.011680f, -0.019611f, 0.089841f, 0.007364f, 0.006512f, -0.019779f, -0.012596f, 0.014856f, 0.013725f, 0.008192f, 0.034666f, 0.014444f, -0.014614f, 0.018306f, 0.036989f, -0.001550f, 0.040552f, -0.004015f, 0.019696f, -0.041360f, 0.074809f, -0.011225f, -0.008762f, 0.012452f, -0.056617f, -0.014665f, -0.027255f, 0.039803f, 0.021927f, 0.022489f, -0.026446f, 0.009529f, 0.009553f, -0.035323f, 0.009773f, 0.030034f, 0.025638f, 0.008709f, -0.008712f, 0.003500f, -0.016955f, 0.056746f, 0.008606f, 0.025584f, + 0.020961f, 0.030560f, -0.050608f, -0.004166f, -0.015241f, 0.009313f, -0.018776f, -0.022319f, 0.041937f, -0.040107f, 0.030739f, -0.025508f, 0.032359f, -0.007435f, -0.033871f, -0.003373f, -0.050904f, 0.031376f, 0.029227f, 0.035211f, -0.105293f, 0.030209f, 0.019032f, -0.032541f, -0.021662f, -0.030268f, 0.054271f, -0.077738f, 0.046590f, 0.108908f, 0.002105f, -0.052251f, -0.020848f, 0.031478f, 0.064059f, 0.017514f, -0.021824f, -0.047102f, -0.078834f, -0.006521f, -0.000404f, 0.031175f, -0.023555f, -0.010798f, -0.018034f, 0.053927f, 0.003542f, -0.001706f, -0.015419f, 0.011130f, 0.003192f, -0.000166f, 0.002229f, -0.000696f, 0.010248f, 0.034373f, 0.042231f, 0.022137f, -0.006162f, -0.003482f, 0.016881f, 0.004168f, -0.010250f, 0.004922f, -0.016574f, -0.010158f, -0.020218f, -0.029705f, -0.062164f, -0.024688f, 0.009794f, 0.003029f, 0.035290f, -0.024963f, -0.017521f, 0.044963f, 0.016949f, -0.011664f, -0.018283f, 0.014648f, -0.004258f, -0.017138f, 0.044780f, 0.005247f, -0.001789f, -0.013915f, 0.001644f, -0.017677f, -0.023553f, 0.014807f, -0.050692f, 0.007045f, -0.030243f, 0.045775f, 0.004188f, 0.012071f, + -0.025433f, 0.019972f, -0.006463f, -0.019255f, 0.009644f, -0.019795f, -0.010409f, -0.016878f, -0.040354f, -0.024399f, 0.031213f, 0.024558f, 0.020302f, 0.020827f, -0.048993f, -0.015077f, 0.010732f, -0.015338f, 0.030150f, 0.020042f, 0.002652f, 0.017031f, 0.050544f, -0.015524f, -0.050121f, 0.096356f, -0.041548f, -0.054866f, 0.060870f, -0.029699f, -0.016318f, 0.012789f, 0.031623f, -0.036740f, -0.010551f, 0.003096f, -0.022957f, 0.125678f, -0.000302f, -0.021226f, -0.007174f, 0.000559f, 0.032238f, -0.062404f, -0.046214f, -0.026948f, -0.023917f, -0.002686f, -0.052446f, -0.000640f, -0.003868f, 0.019057f, 0.080843f, 0.080209f, -0.030381f, 0.061884f, -0.060313f, -0.055077f, 0.033931f, 0.050002f, -0.016325f, 0.013474f, 0.007444f, 0.034121f, 0.043949f, -0.000426f, 0.003881f, 0.055960f, -0.049375f, -0.100618f, -0.010055f, -0.040376f, 0.023386f, 0.046704f, -0.003535f, -0.032097f, 0.065402f, 0.018613f, 0.014105f, -0.017804f, -0.051581f, -0.030027f, 0.006898f, -0.023294f, 0.031506f, -0.003157f, -0.017731f, -0.003147f, -0.020209f, -0.022478f, 0.031342f, -0.010089f, 0.013435f, -0.022480f, 0.033325f, -0.003195f, + -0.000581f, 0.020132f, 0.032042f, -0.003775f, -0.005018f, -0.021427f, 0.004115f, -0.018476f, -0.015053f, -0.013127f, -0.003892f, -0.031937f, 0.001463f, -0.014736f, -0.003880f, -0.032020f, 0.010716f, 0.036137f, 0.015444f, -0.022685f, -0.044656f, -0.003800f, -0.002532f, 0.024537f, -0.060663f, -0.013146f, 0.016312f, -0.013064f, 0.030732f, -0.000816f, 0.019367f, 0.004691f, -0.036506f, 0.039452f, 0.000376f, 0.024174f, -0.024954f, -0.037934f, 0.035224f, -0.037553f, 0.011525f, -0.008531f, 0.033090f, 0.000334f, 0.007141f, -0.019872f, 0.006179f, -0.013986f, -0.049346f, -0.038588f, 0.016254f, -0.002820f, -0.001552f, 0.008277f, 0.036323f, -0.016165f, -0.011497f, -0.030504f, 0.012942f, 0.011563f, -0.004136f, -0.005777f, -0.082745f, 0.004085f, 0.022782f, -0.029138f, 0.020108f, -0.045319f, -0.009003f, 0.003363f, 0.028115f, 0.036458f, 0.003900f, -0.016865f, 0.010988f, 0.065395f, 0.056246f, 0.056813f, -0.003091f, -0.004800f, 0.011505f, 0.007153f, -0.026512f, 0.017171f, 0.070775f, -0.050498f, -0.017183f, -0.014365f, -0.000498f, 0.003086f, 0.008597f, -0.037456f, -0.058378f, -0.021298f, -0.004158f, 0.116592f, + 0.058343f, 0.039835f, -0.006191f, -0.009800f, -0.030385f, 0.050913f, 0.006556f, 0.032718f, -0.012747f, -0.015324f, -0.024261f, -0.020388f, -0.086716f, -0.037705f, -0.046157f, 0.035982f, -0.004179f, -0.016416f, -0.003559f, -0.034928f, -0.017356f, 0.037674f, 0.055333f, -0.008456f, 0.048685f, 0.027013f, 0.019893f, 0.003305f, 0.022610f, 0.029961f, 0.024092f, -0.006036f, -0.002452f, 0.000642f, 0.032897f, -0.026509f, -0.035369f, -0.016449f, 0.017637f, -0.002993f, -0.025151f, -0.015575f, -0.025196f, 0.014543f, -0.006402f, 0.030941f, 0.060398f, 0.011692f, 0.036900f, 0.049314f, 0.023034f, 0.030649f, 0.014458f, 0.009831f, 0.012676f, -0.022356f, 0.031471f, -0.026539f, -0.018789f, 0.007248f, 0.001866f, -0.018921f, 0.008888f, 0.017616f, 0.031607f, 0.013358f, -0.038141f, 0.020559f, 0.014829f, 0.004079f, 0.016446f, -0.010027f, -0.079572f, 0.044738f, 0.038845f, -0.002020f, 0.063949f, 0.028940f, -0.043921f, -0.043019f, 0.018540f, -0.017604f, -0.039215f, 0.002638f, 0.003648f, 0.017586f, -0.009940f, 0.022914f, -0.005902f, 0.021701f, 0.027327f, -0.025341f, -0.103099f, 0.055348f, -0.015780f, -0.032117f, + 0.023184f, 0.036599f, 0.001042f, -0.068981f, -0.009301f, -0.002684f, -0.071342f, -0.044268f, 0.037208f, -0.010710f, -0.029133f, -0.024330f, 0.015843f, -0.069090f, -0.049354f, 0.093610f, -0.008204f, -0.054121f, 0.021016f, 0.050919f, 0.021542f, -0.076712f, 0.109619f, 0.044560f, -0.067956f, 0.037780f, 0.049428f, 0.008072f, -0.046101f, 0.047756f, 0.052951f, 0.032484f, -0.042508f, 0.040086f, 0.074266f, 0.004157f, 0.075026f, 0.093241f, -0.050058f, -0.029569f, -0.034928f, 0.088106f, 0.055803f, -0.038076f, 0.021238f, -0.022973f, -0.056200f, 0.048311f, 0.109474f, 0.015959f, -0.033197f, -0.027437f, 0.065688f, -0.006047f, -0.073980f, -0.052699f, 0.013218f, -0.002632f, 0.060897f, -0.010792f, 0.047001f, -0.091594f, -0.014245f, 0.003767f, 0.015568f, -0.018994f, 0.019291f, -0.000771f, 0.001718f, 0.010607f, 0.002445f, -0.023876f, 0.007121f, -0.011322f, 0.014647f, 0.005880f, -0.033523f, 0.029266f, 0.009384f, -0.027741f, -0.019980f, 0.005357f, -0.024227f, 0.004778f, 0.021931f, 0.024292f, 0.003336f, -0.022744f, -0.007511f, 0.007523f, -0.031334f, 0.018261f, 0.023025f, 0.007534f, 0.001831f, 0.023121f, + 0.008372f, -0.010391f, 0.011187f, -0.008383f, 0.001849f, -0.015977f, 0.009991f, 0.036982f, 0.064708f, 0.103699f, 0.041932f, -0.043131f, -0.015772f, -0.036191f, 0.022187f, -0.017646f, 0.028567f, 0.018722f, -0.047573f, 0.024175f, -0.048476f, -0.016424f, 0.000477f, -0.017932f, 0.002825f, 0.025282f, 0.019924f, 0.001342f, -0.038617f, 0.008678f, 0.031209f, -0.011825f, 0.004737f, -0.014065f, -0.045174f, 0.045791f, -0.027239f, 0.031702f, -0.046520f, -0.027526f, -0.006456f, -0.038323f, -0.011261f, 0.038904f, -0.037832f, 0.051299f, 0.003455f, 0.041837f, 0.016641f, -0.020841f, -0.055990f, 0.046037f, 0.028680f, 0.019176f, 0.011950f, 0.047468f, -0.035028f, -0.017866f, -0.020211f, 0.014848f, 0.017956f, -0.004638f, -0.044164f, -0.001990f, -0.005974f, -0.044729f, -0.017594f, 0.007098f, 0.012273f, 0.035343f, -0.004043f, -0.031409f, 0.042097f, -0.008043f, -0.007097f, 0.050473f, 0.024177f, -0.041329f, 0.013607f, -0.025306f, 0.016265f, -0.013239f, 0.019954f, -0.035678f, 0.020217f, -0.012328f, 0.039802f, 0.006861f, 0.015434f, -0.013355f, 0.000153f, -0.028931f, 0.011875f, 0.001959f, 0.001569f, -0.000679f, + 0.008585f, -0.011611f, -0.010579f, -0.001325f, 0.004996f, -0.003170f, 0.007918f, -0.014673f, -0.002523f, 0.011407f, -0.002414f, -0.000452f, -0.002048f, 0.000384f, 0.001031f, -0.023193f, 0.004771f, 0.018768f, 0.000750f, -0.002626f, -0.004635f, -0.002191f, -0.016897f, 0.001346f, -0.003911f, -0.002047f, -0.008560f, -0.014174f, -0.002769f, 0.014114f, -0.007635f, -0.004177f, 0.007026f, 0.003088f, 0.011200f, -0.010543f, -0.003606f, -0.001480f, -0.007967f, -0.012323f, -0.076850f, -0.090521f, -0.048479f, 0.268574f, 0.236102f, 0.142890f, 0.313292f, -0.066759f, -0.235338f, -0.082743f, -0.443705f, -0.232592f, -0.004577f, -0.114830f, 0.158712f, 0.290874f, 0.040849f, 0.170924f, 0.333269f, 0.055945f, 0.116320f, 0.011138f, -0.342220f, -0.285904f, -0.252416f, -0.278087f, -0.168509f, 0.138081f, 0.058565f, 0.138257f, 0.360217f, 0.217060f, 0.056320f, 0.267237f, 0.122111f, -0.163700f, 0.089064f, -0.119462f, -0.313314f, -0.038648f, -0.193651f, -0.356230f, -0.160604f, -0.036961f, -0.186658f, 0.208425f, 0.224396f, 0.106187f, 0.357297f, 0.403536f, 0.153281f, 0.199553f, 0.188434f, -0.209907f, -0.136611f, -0.268442f, + -0.419249f, -0.385730f, -0.247140f, -0.248310f, -0.071094f, 0.161280f, 0.208924f, 0.278989f, 0.393332f, 0.353135f, 0.206627f, 0.150703f, 0.027369f, -0.163634f, -0.237676f, -0.174341f, -0.226281f, -0.279752f, -0.094457f, -0.105617f, -0.051071f, 0.174552f, 0.121209f, 0.128984f, 0.271814f, 0.069320f, -0.011649f, 0.044834f, -0.074707f, -0.117356f, -0.064969f, -0.118590f, -0.035231f, 0.076107f, 0.029361f, 0.041957f, 0.096622f, -0.022559f, 0.020545f, 0.052512f, -0.088117f, -0.008813f, 0.111861f, -0.105331f, 0.009682f, 0.017753f, -0.209570f, -0.010608f, -0.003472f, -0.250921f, 0.020672f, 0.088486f, -0.031557f, 0.258666f, 0.235625f, 0.043161f, 0.252115f, 0.124160f, -0.010188f, 0.041904f, -0.066982f, -0.270961f, -0.281743f, -0.349375f, -0.396985f, -0.200310f, -0.031595f, 0.080714f, 0.250580f, 0.415360f, 0.476980f, 0.379173f, 0.281324f, 0.128541f, -0.051373f, -0.157795f, -0.346702f, -0.435036f, -0.319499f, -0.256749f, -0.243660f, 0.016175f, 0.121460f, 0.147900f, 0.242618f, 0.216148f, 0.143419f, 0.140582f, 0.102297f, 0.033270f, 0.042203f, 0.001044f, -0.073620f, -0.084969f, -0.106837f, -0.137669f, + -0.119599f, -0.080359f, -0.046544f, -0.003850f, 0.026200f, 0.015073f, 0.009636f, 0.000465f} + }, + { + {-0.000983f, 0.012034f, -0.001255f, 0.003665f, -0.002216f, 0.016058f, -0.006321f, -0.001542f, -0.000590f, 0.002001f, -0.002856f, 0.007361f, -0.001293f, -0.004943f, -0.000902f, 0.010059f, 0.000722f, -0.005074f, 0.004688f, 0.003483f, 0.006592f, 0.002720f, -0.005063f, -0.003322f, 0.011205f, 0.001572f, -0.002901f, -0.002212f, -0.002315f, 0.002216f, 0.002364f, -0.001440f, -0.014327f, -0.003573f, 0.000662f, 0.009878f, 0.003500f, -0.001218f, -0.000070f, -0.005690f, 0.007832f, -0.008024f, -0.010708f, 0.001387f, 0.000074f, -0.003614f, -0.002490f, -0.002980f, 0.001497f, 0.000975f, 0.000911f, -0.003737f, 0.009293f, 0.000286f, 0.012465f, -0.002013f, -0.005986f, 0.002739f, -0.000697f, 0.001785f, 0.002868f, 0.006314f, 0.004263f, -0.001618f, -0.003465f, -0.002927f, 0.008074f, -0.008259f, 0.000287f, 0.000228f, -0.001485f, -0.007086f, 0.006209f, -0.003576f, 0.000789f, 0.005415f, -0.003855f, -0.005125f, -0.004293f, 0.005490f, -0.000544f, -0.001723f, -0.001565f, 0.000171f, -0.001069f, -0.002244f, 0.002692f, 0.002785f, 0.002004f, 0.001261f, 0.000660f, 0.003808f, 0.000578f, -0.000096f, 0.000765f, -0.000392f, + 0.000097f, -0.000902f, -0.000515f, -0.000477f, 0.002541f, 0.000603f, -0.001768f, 0.002196f, -0.004770f, 0.004171f, 0.002469f, -0.005560f, -0.003098f, -0.000406f, 0.000495f, -0.000262f, -0.000850f, -0.002800f, 0.005036f, 0.001007f, -0.002205f, -0.002929f, -0.000175f, 0.010502f, -0.001489f, -0.004884f, 0.006680f, -0.002572f, -0.006335f, -0.000602f, 0.005340f, 0.004047f, -0.003481f, 0.000988f, -0.004345f, 0.002560f, 0.002435f, -0.002021f, 0.005333f, -0.001418f, -0.009697f, 0.001843f, 0.004987f, 0.004727f, 0.000632f, -0.000668f, -0.007038f, -0.002314f, -0.000951f, -0.003022f, 0.006302f, 0.008941f, 0.004112f, -0.012075f, 0.004076f, 0.014326f, 0.005876f, -0.000644f, -0.000124f, 0.006628f, -0.003281f, 0.002207f, -0.006048f, -0.005389f, 0.005495f, 0.006300f, 0.002982f, 0.001728f, 0.001074f, 0.001311f, 0.002919f, 0.000618f, -0.000597f, -0.002095f, 0.001466f, -0.004184f, -0.000832f, -0.001771f, -0.008692f, -0.004273f, 0.001781f, 0.003277f, 0.002625f, 0.005916f, 0.004588f, 0.004923f, 0.006974f, -0.004415f, -0.002855f, -0.001243f, 0.002191f, 0.002620f, 0.004100f, -0.000836f, -0.001423f, -0.000733f, + 0.002489f, -0.001788f, 0.002249f, 0.000619f, -0.000990f, -0.000723f, 0.000718f, -0.000379f, 0.001355f, 0.000617f, 0.000185f, -0.000535f, 0.000732f, 0.000740f, -0.000344f, 0.001164f, 0.000242f, 0.000321f, -0.000957f, 0.000239f, -0.000299f, 0.000064f, 0.001429f, 0.000205f, 0.000583f, 0.000579f, 0.008295f, -0.000581f, 0.003419f, -0.005342f, -0.007983f, -0.004981f, 0.004330f, -0.003623f, -0.003711f, -0.003930f, -0.005275f, 0.005077f, 0.000705f, 0.003726f, -0.001654f, 0.001099f, -0.010837f, -0.006955f, -0.004956f, 0.006946f, 0.001310f, 0.001548f, 0.003781f, -0.003831f, -0.001965f, -0.000862f, 0.001237f, -0.008203f, -0.001602f, -0.005534f, -0.006052f, 0.000350f, -0.005342f, 0.003579f, 0.003351f, 0.014308f, -0.003579f, 0.007277f, -0.004861f, 0.003008f, -0.003343f, 0.000749f, 0.012492f, 0.002007f, 0.005401f, -0.005927f, 0.003793f, -0.005332f, -0.002554f, -0.000826f, 0.007928f, -0.003924f, -0.002065f, -0.007074f, -0.003779f, -0.008353f, -0.001143f, 0.007892f, 0.001866f, 0.000585f, 0.001347f, 0.007235f, -0.007156f, -0.012518f, 0.002879f, 0.003937f, -0.008192f, -0.000604f, 0.001077f, -0.002029f, + 0.003279f, 0.009782f, 0.002027f, -0.002490f, 0.000206f, -0.003489f, 0.000631f, 0.000591f, -0.002812f, -0.000845f, -0.000905f, -0.003961f, -0.000946f, -0.002263f, 0.000824f, -0.000863f, -0.001571f, 0.003234f, -0.000626f, -0.003192f, 0.001355f, -0.002275f, 0.000090f, -0.002461f, -0.003586f, 0.002079f, -0.000656f, -0.000261f, 0.001133f, 0.001520f, 0.000457f, 0.003315f, -0.001581f, -0.000279f, 0.000554f, -0.001195f, -0.000511f, -0.000377f, -0.001653f, -0.000867f, 0.002730f, 0.000912f, 0.003890f, 0.000477f, 0.001747f, -0.001543f, 0.004604f, -0.012781f, 0.002134f, -0.004475f, -0.009399f, -0.006808f, 0.003836f, -0.001887f, -0.000421f, 0.009326f, 0.003114f, -0.001305f, 0.000832f, 0.007931f, -0.003716f, 0.005855f, -0.002640f, 0.001749f, -0.008376f, -0.001483f, 0.005710f, -0.001915f, 0.007089f, 0.007928f, 0.002631f, 0.004995f, 0.010406f, -0.002429f, -0.014602f, 0.003327f, -0.006485f, 0.000457f, -0.017889f, 0.000490f, 0.005774f, -0.003590f, 0.006711f, 0.000951f, -0.006437f, 0.002325f, -0.013446f, -0.008617f, -0.003260f, -0.003308f, -0.011153f, 0.005669f, 0.006225f, 0.000367f, 0.005796f, 0.000446f, + 0.001594f, -0.003622f, 0.005259f, 0.003987f, -0.002061f, 0.012340f, -0.002290f, 0.010195f, 0.008762f, -0.000501f, -0.001388f, 0.000027f, 0.002829f, 0.004165f, 0.001362f, 0.004662f, 0.001587f, 0.001584f, 0.013687f, 0.005212f, -0.005928f, -0.002741f, -0.000047f, -0.003289f, 0.002061f, -0.002380f, 0.013807f, 0.002300f, 0.006506f, -0.004947f, 0.005626f, -0.000062f, -0.002678f, 0.001183f, -0.004420f, -0.002904f, -0.000727f, -0.003201f, -0.001931f, -0.001939f, 0.001727f, -0.003004f, -0.000663f, -0.002116f, -0.001052f, -0.001031f, 0.003824f, -0.001614f, 0.002013f, -0.000544f, -0.003180f, -0.000537f, 0.002033f, 0.000799f, 0.000395f, 0.001238f, -0.001904f, 0.001665f, 0.001136f, 0.000975f, 0.001910f, -0.001074f, 0.000489f, -0.003151f, -0.000180f, 0.002415f, 0.002214f, 0.000524f, 0.000455f, 0.000301f, 0.001819f, -0.024377f, 0.000080f, -0.000059f, 0.006256f, 0.010717f, 0.003759f, -0.005380f, -0.008911f, -0.001410f, 0.011593f, -0.002186f, -0.002209f, -0.008576f, -0.000199f, -0.003560f, 0.008585f, 0.010218f, -0.017514f, 0.011444f, 0.007301f, -0.006626f, -0.001421f, -0.009169f, 0.000058f, -0.002756f, + 0.000219f, 0.006035f, 0.011649f, -0.004358f, 0.002693f, -0.003034f, -0.003985f, 0.004339f, 0.008039f, 0.005434f, -0.005050f, -0.008277f, 0.005780f, 0.004026f, -0.002985f, -0.001494f, 0.001013f, -0.010672f, 0.003886f, 0.003248f, -0.004278f, -0.007131f, 0.002763f, -0.005415f, 0.009505f, 0.004198f, -0.016690f, 0.007634f, -0.007148f, -0.018366f, -0.005330f, -0.001358f, 0.003688f, -0.007522f, -0.000350f, 0.004072f, -0.008119f, -0.007981f, -0.008356f, -0.002539f, 0.002092f, 0.017465f, 0.002743f, 0.003336f, -0.003756f, -0.009100f, 0.011885f, -0.003587f, -0.013959f, 0.000710f, -0.014089f, 0.001085f, -0.001368f, -0.005113f, -0.015434f, 0.004727f, 0.000206f, -0.003370f, 0.003769f, 0.009385f, 0.004291f, -0.001753f, -0.001603f, -0.000021f, 0.005101f, 0.000852f, 0.001244f, 0.002899f, 0.004966f, -0.000405f, -0.002341f, -0.002951f, -0.003093f, 0.001223f, -0.000254f, -0.002399f, -0.002490f, 0.002290f, 0.002165f, 0.004380f, 0.000899f, -0.000069f, -0.000267f, 0.001659f, -0.000783f, -0.000041f, -0.000715f, 0.002784f, -0.000339f, 0.001504f, -0.000431f, 0.015187f, 0.004055f, 0.003299f, 0.006622f, 0.009559f, + -0.002138f, 0.023348f, -0.003424f, 0.016705f, -0.019731f, 0.006783f, 0.011485f, -0.004174f, 0.001575f, -0.005554f, -0.000560f, 0.008992f, 0.016390f, -0.004659f, -0.008187f, -0.002414f, 0.007622f, 0.001615f, 0.016666f, 0.007882f, -0.001832f, 0.002383f, -0.000152f, -0.007826f, 0.001523f, -0.001762f, -0.002450f, 0.007277f, 0.009557f, -0.015150f, 0.017443f, -0.013323f, -0.007266f, 0.002950f, -0.005418f, 0.008779f, 0.000197f, -0.005078f, 0.012313f, 0.017280f, -0.012920f, -0.002349f, -0.001290f, 0.005336f, -0.012235f, -0.020127f, -0.009410f, -0.006170f, 0.005884f, -0.013966f, -0.008083f, -0.001647f, 0.014411f, 0.009060f, -0.010101f, 0.007172f, 0.003790f, -0.005507f, -0.008308f, -0.001335f, -0.005127f, -0.005928f, 0.000564f, -0.003952f, 0.010765f, -0.008199f, -0.001742f, 0.009123f, -0.007291f, 0.009861f, 0.011780f, 0.001586f, -0.001262f, 0.001015f, -0.014642f, -0.012987f, -0.003279f, 0.008114f, 0.000310f, -0.005704f, 0.005338f, 0.011972f, -0.008040f, -0.003749f, 0.003224f, -0.001105f, -0.005727f, -0.000053f, 0.001495f, -0.005533f, 0.000254f, -0.001541f, 0.002426f, 0.000708f, 0.004295f, 0.000580f, + 0.003361f, -0.002191f, -0.000947f, 0.000137f, 0.000348f, -0.000250f, 0.003004f, 0.001283f, 0.003511f, 0.003374f, 0.000288f, 0.000991f, -0.000563f, 0.002291f, 0.003491f, -0.001765f, 0.008900f, 0.007235f, 0.009722f, -0.009392f, -0.012426f, -0.006718f, 0.008441f, 0.000381f, 0.034950f, -0.002672f, -0.000868f, -0.008455f, -0.015809f, -0.023234f, -0.005139f, 0.007630f, 0.012278f, -0.007705f, -0.014882f, 0.001886f, 0.000119f, 0.014858f, -0.005002f, -0.006155f, 0.018384f, -0.010076f, 0.001184f, -0.014240f, 0.009076f, -0.002899f, 0.000058f, -0.003210f, -0.021624f, -0.013617f, 0.001135f, 0.011934f, 0.008004f, 0.000917f, -0.022406f, 0.014810f, -0.009063f, -0.009297f, -0.009676f, -0.012865f, -0.002020f, 0.012111f, -0.009939f, -0.010992f, 0.007500f, -0.003635f, 0.004301f, 0.022346f, -0.009798f, 0.000421f, 0.001099f, 0.009452f, -0.006648f, -0.006139f, -0.003112f, 0.014176f, -0.003226f, -0.007579f, -0.001339f, 0.011039f, 0.014413f, -0.014384f, -0.016299f, -0.005605f, -0.002426f, -0.005520f, 0.003448f, -0.011500f, -0.004055f, -0.010859f, -0.021530f, -0.008569f, -0.004985f, 0.002793f, -0.019801f, -0.005557f, + 0.000295f, 0.013931f, 0.000409f, -0.012248f, -0.000240f, -0.000584f, -0.003736f, -0.006812f, 0.000298f, 0.002809f, -0.001295f, 0.002061f, 0.001965f, -0.002765f, 0.004023f, -0.001741f, -0.004018f, 0.004293f, 0.005352f, -0.002397f, -0.005136f, -0.000238f, -0.001010f, 0.000821f, 0.004286f, 0.001523f, 0.000078f, 0.002943f, -0.001631f, -0.002661f, -0.002065f, -0.002912f, 0.004185f, -0.011406f, 0.009667f, 0.011813f, -0.008688f, -0.010516f, -0.008895f, 0.004820f, -0.000900f, 0.017119f, 0.029810f, -0.016729f, 0.001100f, -0.000688f, -0.002086f, 0.002787f, 0.008620f, -0.024474f, 0.021981f, -0.017243f, -0.008547f, 0.022144f, -0.005131f, -0.010571f, 0.007324f, 0.008192f, 0.000484f, -0.001223f, -0.017092f, 0.010678f, -0.002448f, 0.003719f, -0.011318f, 0.014111f, -0.001306f, -0.023546f, -0.025169f, 0.008425f, -0.004629f, -0.012977f, 0.006364f, -0.001061f, 0.038957f, 0.006556f, -0.007142f, -0.011586f, -0.022995f, -0.008132f, 0.004447f, -0.005575f, 0.017931f, -0.003780f, -0.026780f, -0.002572f, 0.018388f, -0.008021f, 0.002396f, 0.015922f, 0.010724f, -0.009003f, -0.001702f, 0.012899f, 0.017188f, -0.007825f, + 0.003346f, 0.002480f, -0.008315f, 0.003753f, -0.003840f, -0.001126f, 0.002546f, -0.003976f, -0.004865f, -0.016555f, -0.018157f, -0.015302f, 0.015272f, 0.008571f, 0.009941f, 0.004244f, 0.000095f, 0.006134f, -0.013256f, -0.007281f, -0.018544f, 0.009231f, -0.002365f, -0.002521f, -0.003793f, -0.002723f, -0.009475f, -0.005570f, 0.001908f, -0.003801f, 0.000540f, 0.000755f, 0.000634f, 0.003679f, 0.000440f, 0.004407f, -0.000511f, 0.003262f, -0.004338f, 0.002514f, -0.006490f, 0.000592f, -0.003103f, 0.005430f, 0.000223f, -0.003360f, -0.001047f, 0.001752f, -0.002816f, -0.003083f, -0.007586f, -0.007525f, -0.004239f, 0.007762f, 0.000471f, 0.002777f, 0.004802f, -0.019972f, 0.007575f, -0.021560f, 0.000835f, 0.007850f, -0.003487f, -0.016134f, -0.007594f, -0.003289f, 0.014448f, 0.011480f, -0.008605f, -0.008904f, 0.015406f, 0.006431f, -0.008926f, -0.009627f, -0.007514f, -0.001017f, 0.014897f, -0.002526f, 0.001351f, -0.000828f, -0.000184f, 0.019142f, 0.009485f, 0.012832f, -0.000900f, -0.000917f, 0.006602f, -0.009875f, -0.016661f, 0.013637f, 0.021908f, -0.014791f, 0.018834f, -0.005494f, -0.001908f, -0.008411f, + 0.009706f, 0.000634f, -0.010544f, 0.006462f, 0.017811f, 0.013978f, 0.006438f, -0.013331f, -0.005483f, -0.027034f, 0.004502f, 0.014158f, -0.008702f, -0.002121f, -0.010718f, 0.002862f, -0.006379f, 0.010570f, -0.006683f, 0.003567f, 0.012551f, 0.007218f, 0.023643f, 0.012431f, 0.008000f, 0.015187f, -0.012678f, 0.022764f, 0.007032f, 0.013870f, -0.004527f, -0.015565f, -0.024115f, -0.004504f, -0.004038f, -0.006215f, -0.005652f, 0.009070f, -0.016573f, 0.025172f, -0.004290f, -0.020196f, 0.011573f, 0.018842f, 0.007796f, 0.002514f, 0.003934f, 0.007137f, 0.002402f, -0.004054f, 0.004838f, -0.003702f, -0.000043f, 0.007984f, -0.000006f, -0.000184f, 0.008640f, 0.001351f, 0.004747f, -0.000599f, -0.004019f, 0.001437f, 0.000873f, -0.003315f, 0.002716f, 0.003661f, 0.000965f, -0.002318f, 0.002105f, 0.000858f, 0.006703f, 0.001619f, -0.001186f, 0.004373f, -0.005689f, 0.001828f, 0.001338f, -0.006078f, -0.009077f, -0.002387f, -0.003529f, -0.002177f, -0.004479f, -0.003016f, -0.001861f, -0.000605f, 0.011190f, -0.023811f, 0.017514f, 0.006064f, -0.003599f, 0.025849f, 0.020003f, -0.032825f, -0.021979f, 0.020712f, + 0.035554f, -0.003283f, 0.005254f, -0.003026f, -0.004478f, -0.003552f, -0.001466f, 0.009000f, 0.005362f, 0.021488f, 0.005301f, 0.020563f, 0.005819f, 0.008950f, -0.002782f, -0.011617f, 0.004999f, 0.001613f, -0.009472f, 0.015743f, 0.001631f, 0.006317f, 0.003689f, -0.003251f, -0.014586f, 0.001907f, -0.016549f, -0.005583f, -0.019154f, -0.012815f, -0.007740f, 0.016113f, 0.002313f, 0.007942f, 0.019730f, -0.008521f, -0.001636f, 0.002324f, 0.007094f, 0.002142f, 0.000495f, -0.005529f, 0.014609f, 0.032176f, 0.015488f, -0.025604f, -0.018247f, -0.018948f, 0.022228f, -0.003366f, -0.020573f, 0.012022f, -0.011528f, -0.001257f, -0.003361f, -0.001429f, -0.001580f, 0.000705f, 0.019487f, 0.032207f, 0.012183f, 0.027739f, 0.017793f, 0.008997f, 0.003616f, 0.006989f, -0.008926f, 0.029524f, 0.009559f, -0.015489f, -0.020737f, 0.009160f, 0.006825f, -0.005683f, 0.014796f, 0.027918f, 0.006443f, -0.010782f, 0.017396f, -0.001632f, -0.012792f, 0.002653f, 0.009755f, 0.001584f, -0.001694f, 0.001106f, 0.005357f, 0.009411f, 0.004179f, 0.004167f, 0.001070f, 0.006138f, -0.002604f, -0.001213f, -0.003624f, -0.001048f, + 0.012879f, -0.006849f, 0.004767f, -0.002030f, 0.003072f, 0.000302f, -0.003434f, 0.001907f, 0.004566f, 0.005594f, -0.002663f, 0.002283f, -0.005199f, -0.000159f, 0.002588f, -0.009326f, 0.003955f, -0.013318f, 0.003715f, 0.032026f, 0.006120f, 0.011247f, -0.010275f, 0.008207f, -0.015777f, -0.027908f, 0.000647f, 0.014845f, 0.004456f, 0.011909f, 0.016821f, 0.018447f, 0.001102f, -0.020258f, -0.017158f, -0.026818f, -0.041433f, -0.000782f, -0.004988f, 0.018261f, 0.013623f, -0.015616f, -0.008666f, 0.010684f, 0.021679f, -0.027187f, -0.017499f, -0.005277f, -0.014856f, -0.010187f, -0.005550f, 0.008331f, 0.016835f, 0.000696f, -0.010221f, -0.012623f, 0.017012f, -0.013648f, -0.005718f, -0.000469f, 0.023945f, -0.001745f, 0.001967f, -0.037648f, -0.002836f, 0.009112f, 0.019314f, 0.025032f, 0.005411f, -0.024275f, 0.011428f, 0.000418f, 0.011374f, 0.015734f, 0.002663f, 0.007872f, 0.018159f, 0.031654f, -0.021093f, -0.008408f, -0.001855f, 0.009645f, 0.033759f, 0.014138f, 0.011279f, 0.018858f, -0.006496f, -0.011230f, -0.020263f, -0.025605f, -0.015148f, -0.001066f, 0.016385f, 0.037507f, -0.023438f, -0.017305f, + -0.002403f, 0.036778f, -0.020630f, -0.012057f, -0.018426f, -0.003466f, -0.016514f, 0.005211f, 0.003157f, 0.008698f, 0.019582f, 0.003541f, 0.012546f, -0.008209f, -0.008065f, -0.010503f, 0.000851f, -0.005337f, -0.012206f, -0.011025f, -0.005339f, -0.002955f, -0.002528f, 0.012374f, -0.009314f, -0.002886f, -0.003501f, 0.008831f, 0.002251f, 0.006418f, -0.004193f, -0.004318f, 0.008915f, 0.002894f, 0.002366f, -0.007503f, 0.011486f, -0.005857f, -0.000294f, -0.004108f, 0.003663f, -0.004258f, 0.001210f, 0.007493f, 0.009136f, 0.016674f, 0.009421f, 0.023489f, -0.027782f, -0.019828f, -0.003094f, 0.040768f, 0.016484f, 0.001035f, 0.022059f, -0.013731f, 0.033100f, -0.007767f, -0.029056f, -0.005627f, -0.028874f, 0.023484f, 0.014031f, 0.009221f, 0.009144f, 0.000555f, -0.009259f, 0.011379f, 0.016921f, 0.008535f, -0.005894f, 0.015173f, 0.020267f, 0.018165f, -0.002259f, -0.015733f, 0.027462f, 0.006485f, -0.001676f, -0.004585f, 0.003305f, -0.017892f, 0.017823f, -0.003347f, -0.004935f, -0.022810f, -0.012423f, -0.014070f, 0.032038f, 0.011450f, 0.000350f, 0.004259f, 0.016565f, 0.023817f, 0.012147f, -0.030719f, + 0.028006f, -0.003264f, 0.016206f, 0.006943f, 0.024613f, -0.005601f, -0.032181f, 0.010144f, -0.001453f, 0.013371f, -0.005698f, -0.013118f, 0.011999f, -0.005081f, 0.008151f, 0.040596f, -0.004898f, -0.018606f, 0.000127f, 0.005395f, -0.019643f, 0.032737f, -0.014497f, -0.019636f, 0.028868f, -0.016708f, 0.014746f, 0.002028f, -0.020841f, -0.014763f, -0.020844f, 0.006679f, 0.017563f, -0.010332f, 0.010206f, 0.019504f, -0.010712f, 0.013798f, -0.004385f, 0.023070f, -0.008067f, 0.006975f, 0.007572f, -0.006175f, 0.000179f, 0.001036f, -0.010314f, -0.001199f, 0.009611f, -0.014450f, -0.002708f, 0.010902f, 0.005620f, 0.000506f, -0.008809f, 0.004649f, -0.002268f, 0.003811f, -0.009209f, -0.008863f, -0.004927f, 0.002136f, 0.002476f, -0.010698f, -0.006650f, 0.010432f, 0.001520f, 0.004692f, -0.010909f, 0.005322f, 0.001177f, -0.004782f, 0.002423f, 0.001828f, 0.003825f, -0.005649f, 0.000676f, -0.002616f, -0.000372f, -0.011628f, 0.008701f, -0.026831f, -0.005816f, 0.014456f, 0.002893f, -0.026240f, 0.006477f, -0.009197f, 0.018866f, 0.004691f, 0.009446f, -0.043829f, 0.012954f, 0.000833f, 0.016566f, 0.028286f, + 0.001040f, -0.003559f, 0.001897f, -0.014246f, 0.028230f, -0.027263f, 0.008414f, 0.017265f, 0.011327f, 0.015899f, -0.007725f, -0.013139f, -0.015737f, -0.028218f, 0.010710f, 0.004302f, 0.015960f, 0.029971f, -0.011796f, 0.025699f, 0.013509f, -0.024794f, -0.014603f, -0.000388f, 0.002210f, 0.001317f, -0.000725f, 0.012710f, 0.021560f, 0.020410f, 0.008125f, -0.051803f, 0.012300f, 0.015375f, 0.014815f, -0.034145f, 0.020132f, -0.017539f, 0.017396f, 0.002120f, 0.008938f, -0.004668f, 0.012908f, -0.004169f, 0.043492f, 0.021114f, -0.020253f, 0.002433f, -0.055915f, 0.009260f, -0.016887f, -0.016801f, 0.014974f, 0.011136f, -0.028399f, -0.055134f, 0.034252f, 0.021426f, -0.052323f, 0.020212f, -0.012301f, 0.019797f, -0.004947f, 0.004765f, 0.007485f, 0.000566f, -0.035470f, -0.012994f, -0.005679f, 0.011087f, -0.000966f, -0.008774f, 0.014013f, -0.018592f, -0.007998f, 0.019412f, -0.002332f, -0.001630f, 0.006074f, 0.004095f, 0.006938f, 0.003539f, -0.011059f, 0.004376f, -0.016214f, 0.009731f, -0.007486f, 0.005601f, 0.003431f, -0.004034f, -0.003063f, -0.002696f, -0.006229f, 0.002960f, -0.009632f, -0.001307f, + -0.008275f, -0.005471f, -0.013191f, 0.006539f, -0.004451f, -0.003170f, -0.007912f, 0.003456f, 0.005468f, 0.004279f, 0.002613f, 0.001391f, 0.001074f, 0.004894f, -0.001083f, 0.005303f, 0.003501f, 0.012116f, -0.007160f, -0.006425f, -0.011206f, 0.020340f, -0.015534f, 0.000172f, 0.003022f, 0.052217f, -0.007099f, 0.037712f, 0.009287f, 0.028403f, 0.001805f, 0.008128f, 0.009223f, 0.050348f, 0.050437f, -0.026037f, -0.023805f, 0.028825f, -0.036534f, 0.000045f, 0.009884f, -0.036410f, 0.020746f, 0.002951f, -0.002906f, -0.006600f, -0.011101f, 0.004417f, 0.003931f, 0.006856f, -0.022380f, 0.000211f, -0.005459f, -0.029405f, 0.015022f, 0.020532f, -0.032882f, -0.024453f, -0.012021f, 0.017763f, 0.017227f, 0.016518f, -0.001772f, -0.006639f, 0.015468f, 0.052429f, 0.028249f, -0.010285f, -0.006824f, -0.007111f, 0.035376f, -0.028257f, 0.013071f, 0.007529f, -0.044117f, -0.018255f, -0.001983f, 0.006036f, -0.037392f, 0.025786f, 0.016775f, 0.007535f, 0.007122f, 0.017891f, -0.035410f, -0.004264f, -0.029372f, 0.001330f, 0.018238f, 0.030697f, 0.018889f, -0.019385f, -0.010315f, -0.001522f, 0.001034f, -0.022276f, + 0.049874f, -0.003948f, 0.006645f, -0.011747f, 0.017114f, -0.003786f, 0.010013f, -0.004510f, 0.006229f, 0.004698f, 0.010862f, -0.001265f, 0.000197f, -0.004066f, 0.002588f, -0.000773f, -0.002793f, 0.014705f, -0.004374f, -0.010858f, -0.000610f, -0.001224f, 0.007542f, -0.011070f, 0.002543f, -0.009185f, -0.014372f, 0.008868f, -0.002650f, -0.009852f, 0.000824f, -0.000215f, 0.001734f, -0.008680f, 0.011524f, 0.002955f, 0.014146f, -0.017481f, -0.001176f, 0.008150f, -0.004368f, -0.014207f, -0.000224f, 0.015228f, 0.006933f, -0.004704f, 0.024055f, 0.037299f, -0.002598f, 0.002426f, -0.023102f, 0.001941f, -0.001018f, -0.016514f, -0.027587f, -0.005296f, -0.012774f, -0.020673f, -0.015113f, 0.023377f, -0.019816f, 0.016953f, -0.005973f, -0.004732f, 0.032740f, -0.022668f, -0.012647f, 0.005001f, 0.013207f, 0.001920f, -0.043316f, -0.026628f, 0.004955f, -0.006990f, 0.007027f, -0.006074f, -0.013596f, 0.027600f, 0.005915f, -0.002401f, -0.011342f, -0.062313f, 0.037410f, -0.011292f, -0.000679f, -0.005328f, 0.002382f, 0.017832f, -0.010375f, -0.017023f, -0.029074f, -0.002770f, 0.012838f, -0.017978f, -0.023037f, 0.009469f, + 0.036579f, -0.006241f, 0.034019f, 0.025016f, -0.024900f, 0.045767f, 0.030277f, -0.030235f, -0.046664f, -0.013454f, -0.020336f, 0.002467f, -0.014785f, -0.003660f, 0.022354f, -0.039053f, 0.019116f, -0.006375f, -0.021923f, -0.024520f, -0.024456f, -0.029672f, 0.006179f, 0.017758f, -0.015921f, 0.025389f, -0.003304f, -0.014870f, -0.030565f, 0.000467f, -0.003423f, 0.011788f, 0.036486f, -0.013223f, -0.027638f, -0.009679f, 0.000810f, 0.009350f, 0.024972f, 0.006537f, -0.003087f, -0.020491f, -0.000149f, 0.000736f, 0.009294f, 0.003835f, 0.000058f, 0.006871f, 0.010237f, -0.007696f, 0.012779f, -0.007389f, 0.005858f, 0.014798f, 0.013376f, 0.000786f, -0.020888f, -0.008617f, 0.003197f, 0.005128f, -0.014516f, 0.023561f, -0.014284f, 0.010754f, 0.012771f, -0.009709f, 0.001292f, 0.002564f, -0.005504f, -0.020027f, 0.004277f, 0.008951f, 0.001619f, 0.016774f, 0.011753f, -0.011456f, -0.039542f, 0.071956f, 0.101266f, -0.009770f, 0.012338f, 0.006503f, 0.024527f, 0.049106f, -0.046872f, 0.000565f, 0.008120f, 0.000933f, -0.016905f, 0.002537f, -0.020885f, 0.024653f, 0.060324f, -0.012731f, 0.001295f, 0.003449f, + 0.018273f, 0.001684f, 0.007082f, 0.023209f, -0.046483f, -0.003455f, 0.045602f, 0.046867f, -0.054768f, -0.011611f, 0.007874f, 0.007722f, 0.016296f, 0.041254f, 0.011598f, 0.083201f, 0.013841f, 0.025686f, 0.012249f, -0.013054f, -0.017268f, -0.000979f, -0.058386f, -0.083961f, -0.028442f, -0.027237f, -0.087500f, 0.013714f, -0.002095f, -0.048846f, -0.023860f, -0.081839f, -0.008969f, -0.011251f, 0.055776f, -0.054650f, 0.034086f, -0.037337f, -0.003063f, -0.024548f, -0.019410f, 0.021968f, 0.050119f, -0.038621f, -0.014520f, -0.003484f, -0.011460f, -0.004080f, 0.021128f, 0.040223f, 0.042901f, -0.030611f, 0.086313f, 0.057932f, 0.007522f, -0.032723f, -0.071062f, -0.016096f, -0.026465f, -0.019371f, 0.004666f, 0.022835f, -0.014933f, 0.008532f, 0.026780f, 0.004373f, -0.008529f, 0.027256f, 0.018112f, 0.009363f, 0.011926f, 0.028615f, 0.028815f, 0.000251f, 0.002336f, 0.011591f, 0.010788f, -0.004679f, -0.008616f, -0.004909f, 0.005252f, -0.000678f, -0.003657f, 0.001836f, -0.005762f, 0.004020f, 0.018783f, -0.000774f, 0.006614f, 0.022996f, -0.006024f, -0.008190f, -0.008807f, -0.000933f, -0.012769f, -0.002523f, + 0.010866f, -0.005924f, -0.003503f, 0.002249f, 0.000058f, 0.002009f, -0.001829f, 0.009087f, -0.006136f, -0.006273f, 0.014853f, 0.010579f, -0.011614f, -0.000541f, -0.006223f, -0.036161f, 0.066247f, 0.110277f, -0.025902f, -0.005616f, 0.019645f, 0.049385f, 0.016689f, -0.028636f, 0.018034f, -0.024451f, 0.006443f, 0.015657f, -0.005819f, -0.032986f, 0.010047f, 0.035215f, -0.008654f, -0.050248f, 0.039495f, -0.011474f, 0.032266f, -0.011811f, -0.007820f, -0.012321f, -0.020221f, -0.000716f, 0.035838f, 0.020051f, 0.006050f, 0.028984f, -0.013567f, -0.011327f, 0.011156f, -0.015300f, 0.020141f, 0.011782f, 0.030732f, 0.052519f, 0.046072f, -0.032918f, -0.061379f, -0.022333f, -0.003693f, 0.048313f, -0.018266f, 0.008718f, 0.019605f, -0.018941f, -0.028182f, -0.045219f, -0.046417f, 0.036883f, 0.039347f, -0.031103f, -0.111987f, 0.009453f, -0.007700f, -0.015195f, 0.008916f, -0.010998f, -0.044802f, -0.020819f, -0.010347f, -0.031075f, -0.013170f, 0.047954f, 0.018302f, 0.027735f, -0.010572f, -0.015404f, -0.009913f, 0.026768f, 0.004691f, 0.005202f, 0.023061f, 0.066463f, -0.005541f, -0.009490f, -0.033207f, -0.031392f, + -0.045944f, -0.004721f, 0.026387f, 0.018093f, -0.018601f, 0.014083f, -0.008455f, -0.010706f, -0.019009f, -0.017257f, 0.016215f, -0.013292f, 0.015829f, 0.007602f, 0.009057f, -0.009584f, -0.014138f, 0.016541f, 0.010330f, -0.003760f, 0.012548f, -0.016657f, 0.007413f, -0.001981f, 0.010390f, -0.005276f, -0.009420f, -0.005142f, -0.004530f, 0.011773f, 0.005943f, -0.000165f, -0.011639f, -0.002443f, 0.024161f, -0.016717f, -0.000148f, -0.016214f, 0.020777f, -0.010632f, -0.004307f, -0.014925f, 0.002497f, -0.006138f, 0.002498f, 0.017795f, 0.017782f, 0.004072f, 0.000578f, -0.006199f, -0.023452f, -0.003489f, -0.019336f, 0.010270f, -0.027495f, -0.045728f, -0.009647f, -0.007833f, 0.008749f, -0.015756f, 0.035374f, -0.021083f, -0.071071f, -0.038926f, 0.025057f, -0.033876f, 0.040022f, 0.035206f, -0.015313f, -0.005614f, 0.005497f, -0.021997f, 0.000469f, 0.011386f, -0.002743f, 0.006097f, 0.050605f, 0.041654f, -0.010797f, -0.066776f, -0.050107f, 0.003538f, 0.035637f, -0.026970f, -0.011121f, -0.031655f, -0.039904f, 0.003489f, -0.010993f, -0.047436f, -0.051049f, -0.075652f, 0.030707f, 0.010175f, 0.002030f, 0.043282f, + 0.058738f, -0.002520f, -0.043266f, -0.033353f, -0.034929f, -0.020176f, -0.012143f, 0.013049f, 0.022950f, -0.020395f, -0.031781f, -0.039431f, 0.021121f, 0.018058f, -0.038198f, -0.036941f, -0.014428f, -0.006633f, -0.022177f, 0.013679f, 0.094929f, 0.056586f, 0.110809f, 0.036721f, -0.058481f, 0.068621f, -0.002765f, -0.035487f, 0.003645f, -0.033424f, -0.072273f, -0.030225f, 0.016830f, 0.034341f, -0.007979f, 0.031617f, 0.018568f, 0.070139f, 0.076947f, 0.062946f, 0.021109f, -0.017988f, -0.010996f, -0.010656f, 0.013506f, 0.017617f, -0.026577f, -0.010117f, 0.004503f, 0.057148f, -0.007917f, 0.004711f, -0.006182f, 0.020514f, 0.020948f, 0.024288f, -0.001201f, 0.000232f, 0.000440f, 0.005084f, -0.002225f, 0.003219f, -0.020904f, -0.006952f, -0.007156f, -0.019858f, -0.020260f, -0.009621f, 0.007351f, 0.024016f, -0.015701f, 0.003409f, 0.008503f, 0.027325f, 0.037325f, 0.025309f, 0.023852f, 0.026334f, 0.005852f, -0.010234f, -0.020566f, -0.029861f, -0.036864f, -0.029274f, -0.017166f, -0.035223f, -0.035574f, -0.014016f, -0.006301f, 0.065893f, -0.037418f, 0.004297f, 0.019381f, -0.008315f, -0.048838f, 0.049399f, + 0.047200f, -0.027157f, -0.037337f, 0.005100f, 0.065356f, -0.034277f, 0.018648f, 0.041856f, 0.012845f, -0.015775f, -0.031184f, -0.020532f, 0.014535f, -0.004989f, 0.011091f, -0.018326f, 0.012245f, -0.040568f, 0.059375f, -0.005764f, 0.013382f, -0.002831f, -0.074713f, 0.023269f, -0.020634f, 0.038526f, 0.023292f, 0.041165f, -0.016018f, -0.072140f, 0.051851f, 0.023275f, -0.024441f, -0.044926f, 0.037196f, 0.019855f, 0.039552f, 0.039817f, -0.034687f, 0.015958f, 0.041738f, -0.061116f, 0.056048f, 0.027508f, -0.001698f, 0.017762f, -0.031596f, 0.070067f, -0.007827f, 0.046097f, 0.020791f, 0.081366f, -0.005634f, -0.014317f, 0.011539f, 0.033074f, 0.022058f, 0.023007f, 0.082309f, 0.004784f, 0.020175f, 0.048015f, -0.031706f, 0.032934f, 0.003974f, -0.054740f, 0.020434f, -0.018480f, 0.061929f, -0.045611f, -0.054681f, -0.057030f, 0.048741f, 0.079855f, -0.025439f, 0.020288f, -0.094155f, 0.008931f, 0.004608f, -0.003654f, -0.044059f, 0.007322f, 0.018742f, -0.014628f, -0.012064f, -0.011905f, 0.029917f, 0.013934f, -0.018760f, -0.020372f, -0.011653f, -0.004860f, -0.005831f, 0.008497f, -0.032415f, -0.019543f, + 0.017336f, 0.007058f, 0.006218f, 0.000971f, 0.014949f, -0.002611f, -0.001646f, -0.019161f, 0.025670f, 0.031842f, -0.013566f, -0.049759f, -0.033485f, -0.000448f, 0.000145f, 0.009441f, 0.002605f, -0.015755f, -0.024327f, -0.013502f, 0.009307f, 0.014252f, 0.039916f, 0.013366f, 0.002187f, 0.000562f, -0.029577f, -0.006203f, 0.030959f, 0.018117f, -0.120909f, 0.006640f, -0.014839f, 0.003779f, 0.093553f, 0.077061f, 0.110793f, 0.058549f, -0.029515f, -0.022561f, -0.045961f, -0.061199f, 0.021506f, 0.005385f, 0.016031f, 0.019478f, -0.017879f, 0.027878f, 0.047214f, 0.008701f, -0.012700f, -0.016002f, -0.033520f, -0.022250f, -0.020278f, 0.009245f, 0.015006f, -0.048067f, -0.028484f, -0.006628f, 0.032203f, -0.014558f, 0.020723f, 0.025806f, -0.068355f, -0.067302f, 0.012717f, 0.019506f, 0.014937f, -0.050805f, -0.023410f, -0.045634f, -0.022140f, -0.020896f, 0.043951f, -0.057841f, -0.080582f, -0.030281f, 0.015917f, 0.013686f, -0.062169f, -0.049885f, -0.039259f, -0.029702f, 0.033503f, 0.047299f, 0.002070f, -0.016083f, -0.019722f, -0.010984f, -0.010549f, -0.021392f, -0.069012f, 0.022665f, 0.051725f, 0.047055f, + 0.014579f, 0.064275f, 0.086872f, -0.007596f, -0.011264f, 0.066553f, -0.016207f, -0.040545f, -0.091667f, -0.031222f, 0.012388f, -0.050289f, -0.033739f, 0.023513f, -0.008325f, 0.032613f, 0.057018f, -0.034805f, -0.054053f, -0.017903f, -0.023253f, -0.013436f, -0.014748f, -0.014566f, 0.005970f, 0.008239f, 0.006567f, 0.011576f, -0.019493f, 0.016866f, -0.026887f, -0.003264f, 0.016532f, 0.022261f, -0.024042f, -0.033432f, 0.018993f, -0.007662f, 0.001111f, -0.023356f, 0.027414f, -0.016192f, -0.005934f, -0.006484f, 0.025358f, -0.021643f, 0.027518f, -0.012345f, -0.013050f, 0.018225f, 0.004682f, 0.014500f, -0.011691f, 0.001217f, 0.005270f, 0.029735f, -0.003647f, 0.007000f, 0.079369f, 0.027887f, 0.006401f, 0.029006f, -0.032934f, 0.002170f, -0.016841f, -0.024562f, 0.014650f, 0.005825f, -0.020570f, -0.034097f, -0.019663f, -0.031648f, -0.025819f, 0.010430f, -0.019936f, -0.009650f, 0.014847f, -0.009788f, 0.003320f, -0.010896f, 0.039416f, -0.030810f, 0.032302f, 0.011818f, 0.003584f, -0.029796f, -0.012935f, 0.023902f, 0.009591f, -0.000468f, 0.018967f, -0.003301f, -0.007975f, -0.012152f, -0.010399f, -0.008117f, + 0.003481f, -0.000075f, 0.003909f, -0.034912f, 0.018296f, -0.014550f, -0.013821f, 0.012289f, 0.008265f, 0.004664f, -0.006721f, 0.024646f, 0.021014f, -0.030541f, 0.027288f, -0.003747f, 0.018466f, 0.037072f, -0.007903f, 0.020107f, 0.018920f, -0.018302f, -0.013258f, -0.024423f, 0.002038f, 0.004309f, -0.039466f, 0.016314f, 0.005800f, 0.030696f, -0.012224f, -0.069629f, 0.043541f, 0.002742f, 0.001091f, 0.000991f, -0.030960f, -0.009633f, -0.008296f, -0.010318f, -0.045048f, 0.025641f, 0.012657f, 0.027647f, -0.020186f, 0.012218f, -0.022624f, -0.020372f, 0.000734f, 0.017580f, 0.013914f, 0.000546f, -0.002789f, -0.006210f, 0.001334f, -0.010207f, -0.002342f, 0.029812f, -0.012309f, 0.005991f, 0.002996f, 0.008525f, -0.018482f, 0.019872f, -0.000973f, -0.003688f, 0.004394f, -0.001891f, 0.004282f, 0.006708f, -0.016851f, -0.002211f, 0.000030f, -0.003042f, -0.003311f, 0.009144f, -0.010876f, 0.013308f, 0.018956f, 0.007325f, -0.012280f, -0.000535f, -0.002796f, -0.011122f, 0.013736f, -0.003831f, 0.007368f, -0.040940f, -0.115896f, -0.172578f, 0.036293f, 0.135465f, 0.005703f, 0.370960f, 0.342116f, 0.234898f, + 0.404212f, 0.310830f, 0.042352f, 0.006608f, -0.041880f, -0.296417f, -0.302215f, -0.229880f, -0.395870f, -0.369271f, -0.105517f, -0.123250f, -0.124513f, 0.029550f, 0.074978f, -0.061859f, -0.020578f, 0.118688f, 0.075664f, -0.004124f, 0.088323f, 0.061184f, 0.004634f, 0.073880f, 0.175048f, 0.115100f, 0.040144f, 0.179312f, 0.132754f, 0.010350f, 0.154123f, 0.208890f, 0.050167f, 0.022609f, 0.213119f, 0.058367f, -0.082979f, 0.107299f, 0.164160f, -0.083897f, 0.038346f, 0.229439f, 0.021795f, 0.037911f, 0.276989f, 0.217682f, 0.018384f, 0.172719f, 0.229086f, -0.079549f, -0.047137f, 0.065186f, -0.187417f, -0.313122f, -0.211329f, -0.345296f, -0.512926f, -0.471124f, -0.526955f, -0.671169f, -0.708180f, -0.626480f, -0.662043f, -0.623547f, -0.468169f, -0.373939f, -0.194777f, -0.048576f, 0.110108f, 0.384060f, 0.446984f, 0.485273f, 0.752987f, 0.736162f, 0.494250f, 0.636368f, 0.497283f, 0.197777f, 0.218611f, 0.309146f, 0.151191f, 0.098502f, 0.230987f, 0.164737f, -0.001056f, 0.078892f, 0.179492f, 0.044669f, 0.012399f, 0.133750f, 0.030799f, -0.139557f, 0.044959f, 0.109523f, -0.032225f, 0.098059f, + 0.261389f, 0.103389f, 0.058585f, 0.230055f, 0.125435f, -0.045520f, 0.026659f, -0.059858f, -0.276351f, -0.338432f, -0.336275f, -0.423989f, -0.478946f, -0.396251f, -0.380962f, -0.434352f, -0.392035f, -0.324221f, -0.373407f, -0.341858f, -0.230492f, -0.183543f, -0.175757f, -0.072643f, 0.040874f, 0.048861f, 0.155287f, 0.262841f, 0.276421f, 0.273273f, 0.308792f, 0.285204f, 0.203592f, 0.172427f, 0.153389f, 0.105381f, 0.085696f, 0.105797f, 0.093664f, 0.062624f, 0.065071f, 0.071356f, 0.059524f, 0.057886f, 0.074784f, 0.065060f, 0.043208f, 0.031964f, 0.023129f, -0.010026f, -0.020698f, -0.020894f, -0.020117f, -0.009408f, -0.002847f}, + {0.006995f, 0.009644f, -0.005667f, 0.000385f, 0.000319f, -0.006929f, 0.009254f, -0.003701f, -0.003609f, 0.002632f, -0.009536f, -0.004290f, 0.010232f, 0.002311f, -0.004163f, 0.007257f, 0.002256f, 0.001544f, -0.001492f, 0.003533f, -0.000056f, -0.012246f, -0.000579f, -0.004552f, -0.000544f, -0.000278f, -0.011708f, 0.000170f, -0.007525f, 0.000398f, 0.001188f, 0.005219f, 0.006259f, 0.002053f, 0.001558f, 0.001138f, 0.005408f, -0.002969f, 0.001852f, 0.000335f, 0.000853f, 0.001119f, -0.001618f, 0.004819f, 0.007225f, -0.013881f, 0.006450f, -0.003636f, -0.008339f, -0.005344f, 0.010649f, 0.005330f, -0.003590f, 0.006038f, 0.001764f, -0.003822f, 0.003756f, 0.000075f, 0.000000f, 0.000553f, 0.000733f, -0.001451f, 0.000087f, 0.000783f, -0.000609f, 0.004571f, -0.002839f, -0.006412f, -0.006203f, -0.000041f, 0.002094f, -0.000396f, 0.000304f, 0.003497f, -0.001373f, 0.006141f, -0.006484f, -0.001938f, 0.005003f, 0.005393f, -0.003703f, 0.006080f, 0.002145f, -0.001574f, -0.004097f, -0.001902f, -0.001746f, -0.001634f, -0.001618f, -0.000808f, -0.000226f, -0.000892f, -0.001705f, 0.000524f, 0.001234f, -0.002440f, + -0.000632f, -0.000783f, 0.001275f, -0.002121f, -0.000478f, 0.000306f, 0.005155f, 0.000370f, -0.004109f, 0.002569f, -0.002213f, -0.003295f, 0.000811f, -0.006932f, -0.000828f, -0.005198f, 0.001820f, 0.003230f, 0.003116f, 0.002466f, -0.005405f, -0.000394f, -0.004479f, 0.004782f, -0.009241f, -0.005258f, 0.004662f, -0.010142f, -0.001146f, -0.000684f, 0.002581f, 0.002207f, 0.004975f, 0.010494f, 0.004845f, -0.001328f, -0.000040f, -0.003780f, -0.002936f, -0.018583f, -0.017098f, -0.001164f, 0.012643f, -0.003163f, 0.010097f, 0.000863f, 0.002881f, -0.003164f, -0.014379f, 0.007410f, 0.002266f, -0.004346f, 0.003531f, -0.007640f, -0.001560f, 0.004293f, 0.001892f, 0.013452f, -0.009256f, 0.008153f, -0.004248f, -0.010636f, -0.004940f, -0.002917f, -0.002926f, 0.003736f, 0.003160f, -0.008579f, -0.003828f, -0.004895f, -0.001831f, 0.008241f, 0.008807f, 0.009465f, -0.006964f, 0.001168f, -0.004372f, -0.000590f, -0.003679f, -0.004695f, -0.005693f, -0.006394f, 0.003511f, 0.000990f, -0.000993f, -0.002330f, 0.000833f, 0.003580f, -0.003666f, -0.003220f, -0.001649f, 0.004103f, -0.001436f, -0.000790f, -0.001803f, -0.002087f, + -0.000526f, 0.000895f, -0.000060f, -0.000350f, 0.000679f, 0.000899f, -0.000274f, -0.000400f, 0.002625f, -0.002079f, -0.001320f, 0.001008f, -0.001281f, 0.002031f, -0.001284f, -0.001413f, -0.000289f, -0.000259f, 0.001269f, -0.000669f, -0.000648f, 0.000761f, 0.000160f, -0.002070f, 0.000665f, 0.000483f, 0.006908f, -0.006545f, -0.008447f, -0.007337f, 0.000219f, -0.002906f, -0.002335f, -0.005808f, 0.001263f, -0.006487f, -0.000463f, -0.002677f, 0.009942f, -0.006406f, -0.007001f, -0.015648f, -0.020286f, -0.004924f, -0.009039f, -0.008334f, -0.001979f, 0.004188f, -0.005144f, -0.012192f, 0.007561f, -0.017677f, 0.005318f, -0.002982f, -0.003163f, 0.011405f, 0.008066f, 0.004209f, 0.001594f, -0.001984f, -0.001804f, -0.004312f, 0.001864f, 0.007734f, -0.006221f, 0.007333f, 0.006809f, 0.001957f, 0.001028f, 0.003042f, 0.005224f, -0.011503f, -0.004956f, 0.010933f, -0.008462f, 0.000698f, -0.000141f, 0.006681f, -0.000807f, -0.002569f, 0.001302f, 0.011344f, 0.006328f, 0.003938f, 0.003704f, 0.006315f, -0.009992f, 0.007733f, -0.008147f, 0.007160f, 0.004771f, -0.002144f, -0.001393f, -0.003430f, -0.004448f, -0.007321f, + -0.000323f, -0.002296f, -0.005773f, -0.006461f, -0.003578f, -0.003764f, -0.000602f, -0.000448f, -0.001717f, 0.008613f, -0.003510f, -0.001629f, -0.005811f, 0.005967f, 0.000086f, -0.001335f, 0.001325f, -0.002526f, -0.004172f, 0.000082f, 0.002440f, -0.000296f, -0.000356f, -0.002755f, 0.000847f, -0.000917f, -0.002413f, 0.000151f, 0.000608f, 0.001350f, -0.000254f, 0.000883f, 0.000810f, 0.002016f, 0.000761f, -0.002220f, 0.000154f, 0.001134f, -0.000262f, -0.001948f, -0.001155f, 0.002834f, 0.001531f, -0.001542f, -0.000611f, -0.000617f, 0.004071f, -0.010753f, -0.000257f, -0.005046f, -0.009876f, -0.004593f, -0.001838f, -0.006886f, -0.002326f, -0.006353f, -0.002479f, 0.005003f, 0.006731f, -0.011158f, -0.006348f, 0.003655f, -0.002223f, -0.012191f, 0.008109f, 0.014521f, 0.003044f, -0.003421f, -0.006789f, 0.001606f, 0.007013f, 0.013136f, -0.006680f, -0.002783f, -0.008422f, -0.006753f, 0.007260f, 0.007288f, -0.010222f, 0.006004f, -0.003268f, -0.006521f, 0.010328f, -0.000027f, 0.005632f, -0.014149f, 0.000973f, -0.009073f, 0.002051f, -0.011272f, -0.007080f, -0.001842f, -0.002634f, 0.023510f, 0.007460f, 0.006096f, + 0.004586f, -0.017504f, 0.009785f, 0.006810f, -0.003869f, -0.000440f, 0.007629f, -0.001084f, 0.008061f, 0.009335f, 0.009281f, -0.005385f, 0.000677f, -0.003006f, 0.004938f, -0.004413f, -0.004671f, 0.003074f, -0.004388f, 0.002073f, 0.002902f, 0.000161f, 0.005464f, 0.002169f, -0.010385f, -0.001255f, -0.001328f, 0.003263f, -0.011771f, -0.003782f, -0.002992f, 0.008297f, -0.002533f, -0.001379f, -0.006366f, -0.001682f, 0.000408f, -0.000598f, -0.002970f, 0.000086f, -0.001931f, 0.002146f, 0.000751f, 0.000019f, 0.000337f, 0.000792f, -0.001531f, -0.004377f, 0.002311f, 0.000980f, -0.002528f, 0.001216f, -0.001387f, 0.000524f, 0.000531f, 0.001571f, -0.000362f, -0.000525f, -0.001110f, 0.001006f, -0.001822f, 0.001711f, -0.002072f, -0.000105f, -0.000181f, 0.001366f, -0.001380f, -0.000529f, -0.002000f, -0.001147f, -0.001847f, -0.014548f, -0.008119f, 0.005956f, -0.006375f, 0.017073f, 0.007506f, 0.016715f, -0.000260f, -0.008166f, -0.008711f, -0.011725f, 0.017837f, -0.004368f, 0.008146f, 0.009117f, 0.001880f, 0.006420f, 0.005816f, 0.005679f, 0.002253f, -0.011779f, -0.000680f, -0.004550f, -0.001773f, 0.008083f, + -0.000741f, -0.000719f, 0.005622f, 0.003560f, 0.005823f, -0.005117f, -0.018594f, -0.011084f, -0.007050f, 0.013688f, -0.012376f, -0.003739f, 0.008371f, -0.000941f, 0.001548f, -0.010369f, 0.017983f, 0.000985f, -0.007021f, 0.014214f, -0.008743f, 0.022017f, 0.011363f, -0.004965f, 0.002536f, -0.006268f, -0.004300f, -0.020276f, 0.007175f, -0.009234f, -0.001448f, -0.000788f, -0.004451f, 0.008697f, -0.003402f, -0.008848f, -0.008640f, 0.002016f, -0.007895f, -0.008677f, 0.004950f, 0.000777f, 0.006250f, -0.003383f, -0.018521f, 0.006405f, 0.008039f, 0.010359f, -0.009968f, -0.011198f, 0.001454f, 0.018364f, 0.002949f, -0.009473f, -0.004352f, -0.001593f, 0.005029f, 0.000935f, 0.005356f, -0.005381f, -0.002050f, -0.001042f, -0.006641f, -0.005417f, 0.008157f, -0.001337f, 0.003200f, -0.000685f, -0.002323f, -0.005167f, -0.000498f, 0.000232f, 0.002030f, -0.000940f, 0.001888f, -0.001314f, -0.004221f, -0.001661f, -0.000581f, -0.000062f, -0.000760f, 0.003215f, 0.000185f, 0.003479f, -0.001155f, -0.000204f, -0.000529f, -0.003702f, -0.000005f, 0.001987f, 0.001946f, 0.014687f, -0.013514f, 0.006749f, 0.017239f, -0.012429f, + 0.003410f, -0.006984f, -0.013554f, 0.020059f, 0.007493f, 0.018643f, 0.017165f, 0.002533f, -0.013703f, -0.008371f, 0.007104f, -0.000873f, 0.002959f, -0.014799f, 0.001545f, -0.026311f, -0.011073f, -0.020519f, 0.012658f, -0.011648f, -0.000430f, 0.003805f, -0.003405f, -0.005294f, 0.006222f, 0.006275f, 0.018201f, -0.002510f, -0.004052f, -0.013918f, -0.011923f, 0.011662f, 0.002492f, 0.004042f, 0.021770f, -0.006558f, 0.000141f, 0.011626f, -0.005215f, 0.005394f, 0.003982f, 0.011636f, 0.010428f, -0.007195f, -0.001145f, -0.014751f, 0.015371f, -0.010062f, -0.013358f, -0.012799f, 0.008113f, -0.004723f, -0.007047f, 0.015184f, -0.004730f, 0.015738f, -0.009675f, -0.007310f, -0.002020f, 0.010323f, 0.013322f, -0.000969f, -0.014413f, 0.005247f, -0.009218f, 0.018790f, 0.003873f, 0.011058f, -0.015096f, -0.006615f, 0.004027f, -0.003822f, 0.009075f, 0.001389f, -0.005149f, 0.005486f, 0.012032f, 0.017040f, 0.013097f, 0.000247f, -0.003088f, -0.000155f, 0.002821f, 0.000314f, -0.002960f, 0.002045f, -0.002495f, -0.000364f, 0.004833f, 0.000307f, -0.002397f, 0.005240f, -0.001676f, -0.002714f, 0.001343f, 0.001866f, + -0.000109f, -0.003214f, 0.001187f, -0.002199f, 0.000454f, -0.004391f, -0.005491f, 0.001415f, 0.002057f, -0.000114f, 0.004241f, -0.001495f, 0.001914f, 0.008687f, -0.022997f, 0.008000f, 0.006871f, 0.004559f, -0.017379f, 0.013260f, 0.021948f, -0.021409f, 0.008175f, -0.013178f, 0.008649f, 0.001129f, 0.007774f, -0.006371f, -0.000449f, 0.005016f, -0.014522f, -0.007252f, -0.006242f, 0.011486f, 0.012133f, -0.004007f, 0.005716f, -0.002994f, 0.008974f, 0.011381f, 0.004480f, 0.003415f, -0.011544f, -0.004377f, -0.014424f, -0.016044f, -0.011170f, 0.001042f, -0.005333f, -0.000782f, -0.006666f, -0.015977f, -0.005378f, 0.003213f, 0.001470f, -0.001005f, 0.024154f, -0.019568f, 0.007225f, -0.009766f, -0.002794f, -0.006101f, -0.006127f, 0.010217f, -0.006100f, 0.000744f, -0.007394f, -0.004988f, -0.008987f, 0.012271f, -0.011304f, 0.010059f, -0.002614f, 0.010048f, -0.000900f, 0.001486f, -0.001030f, 0.009710f, 0.005652f, -0.000326f, 0.020948f, 0.000789f, -0.010474f, 0.005470f, -0.009420f, -0.011630f, -0.013951f, 0.013536f, 0.004817f, 0.012053f, 0.012348f, 0.014417f, 0.008513f, -0.001787f, -0.002581f, -0.002659f, + 0.013926f, -0.002091f, 0.015612f, 0.003280f, -0.000657f, -0.002429f, 0.005361f, 0.007898f, 0.002087f, 0.003217f, 0.001104f, -0.001106f, 0.001562f, -0.002671f, 0.004203f, 0.000141f, 0.003606f, -0.001119f, 0.003422f, -0.000418f, -0.005444f, 0.002651f, 0.003758f, -0.000057f, 0.003058f, -0.001016f, 0.000178f, -0.003207f, 0.002641f, -0.000809f, 0.001295f, 0.005731f, 0.005778f, -0.024193f, -0.001923f, 0.003131f, -0.005603f, -0.019056f, 0.021787f, -0.001420f, 0.000794f, 0.018507f, -0.005192f, -0.019074f, 0.006709f, 0.012479f, 0.023631f, -0.001532f, 0.009976f, 0.002033f, -0.020832f, -0.006129f, -0.010841f, 0.010585f, 0.006018f, 0.005524f, -0.007812f, -0.001436f, -0.000901f, 0.001892f, -0.007062f, 0.009857f, 0.002714f, -0.008390f, 0.012190f, 0.001709f, -0.013697f, -0.011495f, 0.003168f, 0.014768f, 0.013241f, -0.018540f, 0.036215f, -0.001812f, 0.000656f, 0.009957f, -0.001468f, -0.004773f, -0.000352f, 0.023281f, -0.011685f, 0.011508f, -0.002837f, 0.016113f, 0.004835f, 0.014441f, -0.005519f, -0.011380f, 0.007999f, 0.012347f, -0.006155f, -0.013831f, -0.015046f, -0.013244f, -0.006009f, -0.002682f, + 0.013761f, 0.000333f, 0.011959f, -0.001446f, -0.003969f, 0.011879f, -0.010389f, -0.020050f, -0.005345f, -0.012804f, -0.012063f, -0.022294f, 0.016617f, 0.014501f, 0.005954f, -0.034570f, 0.008119f, 0.007279f, -0.002593f, -0.001016f, -0.012064f, 0.016516f, 0.008454f, 0.006539f, 0.004036f, 0.015168f, -0.001323f, -0.001087f, 0.001118f, -0.000156f, 0.003523f, 0.001720f, 0.000068f, 0.004649f, -0.002802f, -0.000629f, -0.003579f, 0.001038f, 0.001202f, 0.005122f, -0.003585f, -0.000563f, -0.001410f, 0.003946f, -0.001830f, 0.001467f, 0.002334f, 0.003158f, -0.002742f, 0.007579f, -0.000021f, -0.000233f, -0.002793f, 0.002958f, -0.004751f, 0.001673f, 0.000194f, -0.006940f, -0.001629f, -0.001152f, -0.013783f, -0.000931f, 0.001074f, 0.010039f, -0.014505f, 0.000736f, -0.002224f, -0.006055f, -0.030131f, -0.003651f, 0.014254f, 0.011000f, 0.014606f, 0.001688f, -0.016181f, 0.042807f, 0.018034f, 0.029113f, 0.003069f, -0.012749f, -0.005057f, -0.004137f, -0.018136f, -0.001147f, -0.007095f, 0.009122f, 0.000089f, 0.000942f, -0.005781f, -0.007772f, -0.015324f, 0.005178f, 0.001561f, 0.000756f, 0.007978f, -0.000656f, + 0.003417f, -0.001533f, -0.013302f, -0.010368f, 0.008134f, 0.000049f, 0.019505f, -0.024579f, 0.019732f, 0.012070f, -0.008616f, -0.017770f, -0.027695f, 0.005873f, 0.021975f, -0.011211f, 0.021275f, -0.001661f, -0.000877f, 0.004879f, -0.006155f, -0.024635f, 0.003031f, 0.011655f, 0.005271f, -0.010696f, -0.002724f, -0.006707f, 0.005529f, 0.011957f, -0.000544f, 0.003060f, -0.001538f, 0.011514f, -0.005067f, -0.003919f, 0.007937f, -0.006797f, 0.018194f, -0.004828f, -0.009082f, 0.006743f, -0.016301f, -0.008352f, 0.000232f, 0.006499f, -0.007010f, 0.003061f, -0.002488f, 0.003624f, 0.000221f, 0.004304f, 0.003826f, -0.001451f, 0.002329f, -0.007759f, 0.004318f, -0.001051f, -0.010386f, -0.003640f, -0.002864f, -0.006311f, 0.000110f, 0.001836f, -0.004795f, -0.003508f, -0.000115f, -0.006649f, 0.000597f, 0.001706f, -0.001330f, -0.007038f, 0.000750f, -0.000105f, -0.005197f, 0.002192f, 0.004062f, -0.004328f, -0.000150f, 0.001266f, 0.000557f, 0.002051f, 0.006352f, 0.005171f, -0.005195f, -0.004281f, 0.004771f, -0.033133f, 0.023707f, 0.021374f, 0.025243f, -0.008160f, -0.022510f, 0.007851f, 0.009052f, -0.033715f, + -0.030607f, 0.029603f, 0.003245f, -0.014557f, 0.011229f, -0.021094f, -0.023910f, 0.003339f, 0.062288f, 0.028852f, 0.011563f, -0.016995f, 0.000281f, -0.006110f, 0.000492f, -0.007179f, -0.003462f, -0.007965f, 0.002244f, 0.017657f, 0.003518f, 0.021787f, -0.008660f, -0.007322f, 0.004004f, 0.015202f, -0.002920f, -0.002280f, -0.032569f, -0.001462f, -0.018343f, -0.001056f, 0.025254f, 0.017940f, -0.006677f, 0.017534f, 0.035044f, -0.016762f, 0.010122f, 0.028956f, -0.021320f, 0.030610f, -0.002558f, 0.012551f, -0.007276f, 0.001226f, -0.004148f, 0.004193f, 0.007112f, 0.030367f, -0.011665f, -0.003904f, 0.007913f, -0.014246f, 0.008948f, 0.004640f, -0.008165f, -0.013880f, 0.029978f, -0.002044f, -0.016463f, -0.005500f, 0.018590f, -0.007874f, 0.012619f, -0.000135f, 0.000908f, -0.019826f, -0.021532f, -0.010405f, -0.018366f, -0.016645f, -0.017994f, -0.001138f, -0.004288f, 0.008719f, -0.001130f, 0.001549f, -0.001641f, 0.010986f, 0.007014f, 0.000765f, -0.013640f, 0.000481f, -0.002553f, -0.010168f, -0.002899f, -0.005243f, 0.005332f, 0.002017f, -0.006934f, -0.002334f, -0.005317f, -0.004182f, -0.000489f, 0.003800f, + 0.003721f, 0.003888f, 0.006678f, -0.004109f, 0.000849f, 0.004188f, -0.002903f, -0.004001f, 0.004906f, -0.006907f, -0.002717f, -0.002122f, 0.003094f, 0.001324f, 0.004969f, 0.000868f, 0.000510f, -0.001951f, -0.004991f, 0.040415f, 0.007240f, 0.005727f, -0.021033f, -0.012167f, 0.001048f, 0.004676f, 0.008167f, 0.009396f, -0.040093f, 0.001833f, 0.002518f, 0.028975f, 0.004619f, 0.007391f, -0.002766f, 0.026363f, -0.043053f, 0.001351f, 0.022034f, -0.025609f, 0.006401f, 0.005057f, 0.020749f, 0.004113f, 0.002199f, -0.007016f, 0.000657f, -0.021980f, 0.007446f, -0.005463f, 0.003890f, 0.006023f, -0.003781f, -0.016661f, 0.006102f, -0.013143f, -0.022943f, 0.012986f, -0.012977f, 0.008557f, -0.021572f, -0.013553f, -0.002292f, -0.006646f, 0.005138f, -0.009120f, 0.023625f, -0.000229f, 0.022526f, -0.023747f, -0.020122f, -0.006406f, 0.000320f, -0.000349f, -0.007005f, 0.020332f, 0.016554f, 0.042355f, -0.006802f, 0.027112f, -0.015865f, -0.002663f, 0.008147f, -0.032056f, 0.036637f, -0.000926f, 0.022808f, -0.000845f, -0.032002f, -0.019228f, 0.013461f, -0.042763f, 0.022291f, 0.006214f, 0.032541f, 0.041085f, + 0.005332f, -0.030354f, -0.023013f, -0.009424f, 0.023364f, -0.002794f, -0.005663f, 0.001350f, -0.008569f, 0.001301f, -0.006272f, -0.009162f, -0.003188f, -0.014774f, -0.000729f, 0.000719f, -0.006880f, -0.006137f, -0.008396f, -0.005937f, -0.002880f, 0.003772f, 0.007136f, 0.002697f, -0.001184f, 0.006560f, -0.004472f, -0.002449f, 0.001521f, 0.003488f, 0.004167f, -0.004127f, 0.005273f, -0.005390f, -0.002545f, -0.007886f, -0.013842f, 0.008601f, 0.001486f, -0.007835f, -0.007924f, -0.001490f, -0.010987f, 0.001529f, 0.000117f, 0.008191f, 0.020519f, 0.031783f, 0.010877f, -0.013073f, 0.029979f, -0.032206f, -0.003511f, -0.009854f, 0.003843f, 0.025825f, -0.023459f, 0.058131f, 0.007548f, 0.014442f, -0.017263f, -0.023371f, 0.007945f, 0.000252f, 0.049179f, -0.007024f, -0.017244f, -0.028147f, -0.019165f, 0.013802f, 0.008666f, 0.008095f, -0.003715f, -0.027705f, -0.042962f, 0.003265f, -0.025960f, 0.034390f, 0.004328f, 0.027940f, -0.017380f, 0.011718f, -0.011292f, 0.014509f, 0.040120f, -0.006624f, -0.004407f, -0.006019f, 0.010370f, 0.013454f, 0.006745f, 0.003017f, 0.004019f, 0.017546f, 0.015580f, -0.008986f, + -0.013957f, -0.012368f, -0.013976f, 0.046115f, 0.018051f, -0.026937f, 0.020693f, -0.006072f, -0.022224f, -0.015787f, 0.008007f, 0.016928f, -0.031623f, -0.041032f, 0.004468f, -0.018281f, 0.053874f, 0.028129f, -0.009392f, -0.006061f, 0.011319f, 0.024433f, 0.006115f, -0.004050f, -0.007295f, -0.037190f, -0.001865f, -0.009042f, -0.040583f, 0.015416f, 0.025369f, -0.004047f, 0.012650f, 0.007156f, 0.025879f, -0.014191f, -0.003952f, 0.009432f, -0.004168f, -0.011634f, -0.013364f, -0.000256f, -0.008114f, -0.019641f, -0.004181f, -0.008994f, 0.008485f, -0.003727f, -0.011014f, 0.007669f, 0.002910f, 0.001201f, -0.006865f, 0.007654f, 0.001969f, -0.012282f, 0.004204f, 0.005043f, -0.005892f, -0.017095f, -0.008581f, -0.003032f, -0.001962f, -0.000094f, -0.006596f, -0.000740f, -0.004919f, 0.002510f, 0.001940f, -0.003254f, 0.000689f, -0.000133f, -0.005246f, -0.010537f, -0.001504f, 0.002416f, 0.006106f, 0.003270f, -0.008146f, -0.005102f, 0.001917f, -0.015130f, -0.025692f, 0.014841f, -0.008634f, 0.022417f, 0.009973f, -0.023859f, -0.010312f, -0.011969f, 0.005015f, -0.032210f, 0.021792f, 0.030899f, -0.012660f, 0.019356f, + -0.004820f, -0.008226f, 0.014767f, -0.022495f, 0.013971f, 0.025144f, 0.006714f, 0.043207f, 0.020732f, -0.017779f, 0.018234f, 0.008031f, 0.016007f, 0.000979f, 0.022986f, 0.020335f, 0.030842f, 0.011909f, -0.012285f, -0.014298f, -0.019346f, -0.001592f, 0.047923f, 0.001265f, 0.020178f, -0.030031f, 0.062652f, -0.018395f, -0.049396f, -0.023036f, 0.039494f, 0.003379f, -0.005694f, -0.005196f, -0.003080f, 0.029796f, -0.021883f, 0.017358f, -0.004589f, 0.037456f, 0.056667f, 0.029506f, 0.027228f, -0.019960f, 0.032146f, 0.019788f, 0.019019f, 0.022228f, 0.032143f, -0.006479f, -0.056631f, -0.035961f, -0.041194f, 0.010893f, 0.014421f, 0.011961f, -0.009706f, 0.019350f, 0.049651f, 0.003753f, 0.003681f, 0.012409f, -0.002985f, -0.043462f, -0.047223f, -0.015827f, 0.009155f, 0.005279f, -0.002195f, -0.026627f, 0.006652f, 0.001601f, 0.002028f, 0.014394f, -0.003306f, 0.009253f, 0.002886f, 0.017707f, -0.004578f, 0.011920f, -0.009406f, 0.002369f, 0.001639f, 0.020510f, 0.009098f, 0.020476f, 0.002086f, 0.010571f, -0.003804f, 0.002564f, 0.008465f, -0.005298f, -0.013333f, 0.003326f, -0.008026f, -0.014509f, + -0.011867f, -0.002929f, -0.003396f, 0.019996f, 0.003931f, 0.000255f, -0.006176f, 0.003388f, -0.000085f, -0.006790f, -0.008245f, -0.005583f, 0.004273f, 0.012899f, -0.001780f, 0.001484f, 0.001404f, 0.005969f, 0.003790f, -0.012911f, 0.008201f, 0.020786f, 0.024340f, 0.008841f, 0.011414f, 0.019011f, -0.014989f, 0.044171f, 0.017381f, 0.008562f, -0.012628f, -0.033832f, -0.013692f, 0.018500f, -0.001872f, -0.047957f, 0.064586f, -0.022664f, -0.012695f, 0.019940f, 0.000946f, -0.006422f, 0.004650f, -0.012518f, -0.015204f, -0.003285f, -0.035191f, 0.008721f, -0.037816f, 0.001070f, -0.029986f, -0.033703f, -0.006801f, -0.007153f, -0.007433f, -0.024651f, 0.010788f, 0.026432f, 0.007046f, 0.020243f, -0.035104f, 0.034597f, 0.062968f, 0.006540f, -0.025340f, 0.039380f, -0.032327f, -0.051135f, 0.085121f, -0.008721f, 0.006004f, -0.005914f, -0.038123f, 0.029394f, -0.034565f, 0.014957f, 0.051993f, -0.001028f, 0.071426f, -0.055762f, 0.053795f, 0.015702f, -0.035411f, -0.018523f, 0.006703f, -0.033976f, -0.016983f, 0.037872f, -0.037177f, 0.024666f, -0.025016f, 0.013691f, 0.039508f, -0.086834f, -0.038323f, 0.040001f, + -0.074581f, 0.026350f, 0.023064f, 0.042644f, 0.037653f, 0.016983f, -0.003080f, 0.025034f, 0.037347f, -0.040600f, 0.040528f, -0.000747f, 0.013991f, -0.002130f, 0.012682f, 0.003299f, -0.007768f, 0.002810f, -0.011834f, -0.003858f, 0.002995f, -0.002091f, -0.020482f, 0.012876f, -0.003656f, 0.016768f, 0.009983f, -0.014458f, 0.011376f, 0.013995f, 0.010112f, 0.004219f, 0.007224f, 0.004397f, 0.009220f, -0.028367f, 0.015869f, -0.003704f, -0.007785f, 0.020172f, -0.016232f, -0.013154f, 0.006744f, -0.016752f, -0.013698f, -0.016508f, 0.009135f, -0.025026f, -0.074692f, -0.019438f, 0.024470f, 0.057665f, -0.018372f, 0.029118f, 0.000791f, 0.013756f, 0.029861f, 0.019347f, 0.051720f, -0.013370f, 0.002179f, 0.014223f, -0.045851f, -0.029462f, -0.013688f, -0.014810f, 0.010516f, 0.000797f, 0.003855f, -0.023869f, -0.003984f, -0.031605f, -0.025746f, 0.012386f, 0.063869f, 0.036786f, -0.016833f, -0.020431f, 0.030423f, 0.036513f, -0.021766f, 0.009657f, 0.028045f, -0.011094f, 0.061088f, 0.020827f, 0.008945f, -0.047123f, 0.029059f, 0.006011f, 0.022891f, -0.004807f, 0.005883f, -0.007748f, -0.010196f, -0.074317f, + 0.019674f, 0.051457f, 0.025367f, 0.006920f, -0.001478f, 0.025970f, -0.041861f, -0.077202f, 0.005707f, 0.102455f, 0.024606f, 0.081290f, 0.076991f, 0.001071f, 0.006682f, -0.048945f, -0.043925f, -0.004634f, -0.037688f, 0.051342f, -0.111839f, 0.021176f, -0.041929f, -0.089230f, 0.019789f, 0.041850f, 0.089214f, 0.008065f, 0.004410f, -0.056824f, 0.018530f, 0.026938f, -0.039823f, -0.003649f, 0.002757f, 0.041779f, -0.011243f, -0.026542f, 0.063083f, 0.013440f, -0.022633f, -0.000735f, -0.036619f, 0.004903f, -0.034666f, -0.006900f, -0.001263f, -0.016823f, 0.005186f, -0.013571f, -0.014583f, -0.007838f, -0.000237f, -0.006809f, 0.011607f, 0.032829f, -0.001940f, 0.000486f, 0.012107f, -0.029517f, -0.018004f, -0.003452f, 0.008867f, 0.009483f, -0.025905f, -0.014484f, 0.020382f, 0.012200f, 0.007022f, 0.005063f, 0.021523f, -0.000696f, 0.000251f, 0.002354f, -0.014739f, 0.002775f, -0.019382f, 0.054456f, 0.095565f, 0.002332f, 0.026243f, 0.017052f, -0.049949f, -0.014361f, 0.050191f, 0.015619f, 0.022234f, -0.012688f, 0.014721f, 0.008383f, -0.017543f, 0.000650f, 0.026136f, 0.027368f, 0.033721f, -0.014956f, + -0.003941f, -0.074243f, -0.069339f, 0.009452f, -0.042802f, 0.001352f, 0.037471f, 0.008889f, 0.004621f, -0.013011f, -0.008126f, 0.023785f, 0.058540f, -0.042528f, -0.024159f, -0.005674f, -0.041026f, -0.003145f, -0.039534f, -0.012490f, -0.041981f, 0.037110f, -0.050911f, -0.004304f, 0.009381f, 0.024608f, 0.089525f, 0.118993f, 0.031036f, -0.031473f, -0.063376f, -0.005758f, -0.043291f, -0.017214f, -0.067416f, 0.009967f, 0.065371f, 0.047938f, 0.039307f, 0.004555f, 0.009669f, 0.066642f, 0.065058f, 0.047514f, -0.003709f, 0.029935f, 0.011306f, 0.014715f, -0.076703f, 0.023041f, 0.008710f, -0.017890f, 0.046569f, 0.062806f, -0.008552f, -0.001224f, -0.030720f, -0.131538f, -0.002342f, 0.038700f, -0.018886f, 0.090787f, 0.064808f, -0.030191f, 0.006216f, -0.033643f, 0.022825f, 0.006116f, -0.011987f, -0.020200f, -0.008945f, -0.002025f, 0.014330f, 0.017416f, 0.027108f, 0.000593f, -0.016001f, -0.035197f, 0.002239f, -0.016689f, 0.013577f, -0.015758f, -0.021160f, -0.005485f, -0.005340f, 0.015698f, 0.006849f, -0.006176f, 0.008553f, 0.004432f, 0.006832f, 0.001398f, -0.011936f, -0.019517f, -0.009594f, 0.007144f, + 0.016428f, -0.001569f, 0.013438f, -0.000328f, -0.019182f, -0.020343f, 0.005839f, -0.024859f, -0.013688f, -0.000107f, -0.010634f, -0.003185f, 0.007175f, 0.009963f, -0.008987f, -0.023210f, 0.059460f, 0.042429f, -0.028358f, 0.028739f, 0.044163f, 0.005003f, -0.055368f, -0.066053f, 0.061697f, 0.021029f, 0.014259f, 0.048610f, 0.001060f, -0.021138f, 0.052132f, 0.013767f, -0.039589f, -0.020054f, -0.014369f, 0.017628f, 0.001072f, -0.023668f, 0.009132f, -0.026185f, -0.002665f, -0.011798f, -0.012788f, 0.035560f, 0.066194f, -0.022516f, 0.013702f, 0.031246f, -0.015554f, -0.013291f, 0.012761f, 0.037747f, 0.012022f, -0.028910f, -0.036688f, -0.044062f, 0.023622f, 0.024901f, 0.060074f, -0.028438f, -0.027043f, 0.021159f, 0.035771f, 0.056092f, -0.001643f, -0.103761f, -0.022277f, 0.033527f, 0.033330f, 0.015081f, -0.020335f, -0.000719f, -0.041577f, 0.006296f, -0.018007f, 0.043212f, 0.061793f, -0.018648f, 0.001294f, -0.036179f, -0.039324f, -0.015105f, -0.079571f, -0.015951f, -0.040490f, 0.035300f, -0.032420f, 0.036616f, 0.045295f, -0.091963f, -0.007751f, -0.038887f, 0.039343f, -0.016176f, 0.013828f, -0.028580f, + 0.004600f, -0.024341f, 0.027077f, 0.030274f, 0.052134f, 0.050432f, 0.024895f, 0.048522f, 0.022429f, 0.002913f, 0.025574f, 0.016524f, -0.007316f, 0.021613f, -0.024061f, 0.011585f, -0.012345f, 0.010032f, -0.030311f, 0.017937f, 0.000066f, 0.014208f, -0.022347f, -0.012643f, 0.014359f, -0.005811f, -0.007555f, 0.026032f, -0.020591f, -0.004710f, 0.020981f, 0.010413f, -0.014265f, -0.004480f, 0.008485f, 0.048038f, 0.025692f, 0.020938f, 0.028200f, 0.001916f, 0.030664f, 0.010366f, 0.009290f, 0.016090f, -0.000122f, 0.025827f, 0.007017f, -0.044455f, -0.020919f, -0.011883f, -0.021844f, -0.030178f, -0.049907f, -0.011313f, -0.027764f, -0.050624f, -0.076489f, 0.037417f, 0.039608f, 0.023357f, -0.051109f, -0.069560f, -0.053413f, -0.030285f, 0.012541f, -0.002271f, -0.067748f, -0.040426f, -0.046425f, 0.065799f, 0.020484f, 0.028696f, -0.020680f, -0.037370f, 0.083376f, 0.020681f, 0.026020f, -0.015880f, 0.004959f, 0.024719f, -0.017027f, 0.019670f, -0.006116f, 0.039858f, 0.056199f, 0.002586f, -0.045299f, -0.036263f, 0.044529f, 0.030629f, 0.039013f, 0.011416f, 0.009817f, -0.019926f, -0.008765f, 0.006625f, + 0.027282f, 0.059032f, -0.000446f, -0.109560f, -0.101692f, 0.001696f, -0.024804f, 0.066110f, 0.067076f, -0.074297f, -0.050298f, -0.031078f, 0.092870f, 0.082956f, -0.044708f, 0.013512f, -0.058568f, -0.056209f, 0.034545f, -0.025670f, 0.000468f, -0.008327f, -0.040592f, 0.029447f, 0.029991f, 0.024141f, 0.094111f, -0.068479f, -0.018381f, -0.005968f, 0.024251f, 0.008077f, 0.038830f, -0.137078f, -0.079755f, 0.029246f, 0.043344f, 0.043099f, 0.012296f, -0.044897f, -0.046206f, 0.001339f, 0.027659f, 0.080045f, 0.019552f, -0.025883f, 0.008381f, -0.050878f, 0.032176f, 0.028415f, 0.001864f, 0.045144f, 0.095677f, 0.023550f, -0.069774f, -0.036069f, -0.004699f, 0.008727f, 0.046357f, 0.040753f, 0.019269f, -0.020384f, -0.008305f, -0.013803f, -0.016249f, 0.042252f, -0.004573f, 0.004583f, -0.016203f, 0.041032f, -0.018321f, -0.006943f, -0.000685f, 0.035753f, 0.015695f, 0.013275f, -0.006985f, -0.043062f, -0.015297f, 0.015170f, 0.035507f, 0.006967f, -0.048274f, -0.066695f, -0.055867f, -0.000384f, 0.008754f, 0.011434f, 0.007393f, 0.092063f, -0.061119f, 0.057441f, 0.057310f, 0.036584f, -0.133364f, -0.053590f, + 0.044801f, -0.036286f, 0.025967f, -0.009542f, -0.055328f, 0.035489f, 0.010794f, 0.010573f, -0.024393f, -0.088361f, -0.008262f, -0.002700f, 0.000452f, -0.012617f, -0.064257f, 0.048121f, -0.039662f, 0.082187f, -0.008558f, -0.007188f, 0.040157f, 0.029809f, -0.039177f, -0.003647f, -0.029626f, 0.043914f, 0.069298f, 0.052651f, -0.058226f, 0.013081f, -0.038923f, 0.035205f, -0.033792f, -0.013925f, 0.005897f, -0.002972f, 0.037724f, -0.034540f, -0.080891f, 0.020838f, -0.028850f, 0.030256f, 0.031725f, -0.102535f, -0.017269f, -0.019557f, 0.003875f, 0.113541f, -0.030480f, -0.082631f, -0.021823f, 0.072165f, 0.034783f, -0.044750f, -0.014551f, 0.044767f, -0.000051f, 0.055269f, -0.082994f, -0.043910f, 0.050164f, -0.052185f, -0.126610f, -0.037392f, -0.017139f, 0.144641f, -0.039324f, -0.074729f, 0.039899f, -0.086210f, 0.227572f, 0.021537f, -0.211166f, -0.056263f, -0.037175f, 0.149988f, 0.081336f, -0.094291f, -0.049632f, -0.001225f, 0.110987f, 0.088394f, -0.013645f, -0.069503f, 0.027378f, -0.023514f, 0.100111f, -0.009679f, -0.050077f, -0.041577f, 0.065628f, -0.052414f, 0.034073f, -0.100367f, -0.000319f, -0.003845f, + -0.005715f, -0.005893f, 0.021229f, -0.055565f, 0.053939f, 0.004465f, 0.039597f, 0.001594f, -0.063257f, -0.048690f, 0.036234f, 0.042720f, 0.067240f, 0.025052f, -0.006718f, -0.043816f, 0.005969f, 0.010903f, -0.011445f, 0.002873f, 0.044113f, 0.006848f, -0.001964f, -0.050123f, 0.009763f, 0.035605f, 0.013273f, 0.001468f, -0.014545f, -0.036048f, -0.122102f, 0.034254f, -0.001971f, 0.041739f, 0.100926f, 0.032384f, 0.013877f, -0.056874f, -0.023635f, -0.056839f, -0.068134f, -0.022782f, 0.013361f, 0.038959f, 0.051484f, -0.005744f, 0.029931f, 0.036324f, -0.031642f, -0.064058f, 0.033918f, 0.012227f, -0.052117f, -0.017676f, 0.049441f, -0.016812f, -0.005578f, 0.045300f, 0.025339f, 0.020151f, 0.006262f, 0.025762f, -0.024680f, -0.059508f, -0.025933f, 0.016985f, -0.024439f, -0.014049f, 0.021760f, 0.001482f, -0.041981f, 0.043729f, 0.009389f, -0.038817f, 0.004929f, -0.009356f, 0.037568f, 0.020957f, -0.015230f, 0.017686f, -0.023237f, -0.052171f, 0.006945f, 0.012716f, -0.004793f, 0.000138f, 0.010993f, -0.022784f, 0.007160f, -0.019508f, 0.011671f, 0.037246f, -0.003997f, 0.016287f, 0.017169f, -0.014386f, + 0.000884f, -0.035524f, 0.012113f, 0.020970f, -0.064619f, 0.037498f, -0.040320f, 0.012710f, 0.001824f, -0.000179f, 0.017748f, 0.007214f, 0.042101f, 0.007698f, 0.011871f, -0.006085f, 0.021516f, -0.022655f, -0.014967f, 0.005226f, 0.003563f, -0.019824f, 0.007092f, -0.001767f, -0.005820f, -0.011450f, 0.004036f, -0.002257f, 0.022755f, -0.005843f, 0.002664f, 0.016337f, -0.011527f, 0.011351f, -0.007127f, 0.003984f, -0.011538f, -0.010005f, -0.011525f, -0.003012f, -0.005224f, 0.008628f, 0.006082f, -0.026737f, -0.007389f, -0.007812f, 0.018537f, -0.011034f, 0.006878f, 0.003198f, -0.029872f, 0.009910f, 0.019243f, 0.001269f, -0.007352f, 0.003223f, -0.008853f, -0.004413f, 0.098837f, -0.003598f, -0.003289f, -0.027444f, -0.026994f, 0.020346f, -0.001200f, 0.017614f, 0.000303f, -0.009659f, -0.013070f, 0.006699f, -0.018293f, 0.018542f, -0.017229f, 0.027016f, -0.021871f, 0.015743f, -0.018516f, -0.004120f, -0.003005f, -0.017221f, -0.013192f, 0.003895f, -0.007801f, -0.005438f, -0.000160f, -0.012949f, 0.001685f, -0.002572f, 0.004100f, -0.003045f, 0.007524f, -0.025961f, 0.023619f, -0.008888f, -0.007778f, 0.017923f, + -0.014414f, 0.000960f, -0.017995f, -0.015738f, 0.011428f, 0.010092f, -0.012652f, -0.008161f, 0.005062f, -0.000817f, -0.022000f, 0.005624f, 0.003843f, -0.000021f, 0.014410f, -0.005357f, -0.006221f, -0.005931f, -0.015027f, -0.004088f, 0.015727f, -0.016752f, 0.004298f, -0.008126f, -0.002076f, 0.001066f, -0.005107f, 0.003686f, 0.000080f, 0.010999f, -0.016011f, -0.001390f, 0.010320f, -0.020665f, 0.012026f, -0.009313f, 0.000129f, 0.009432f, -0.004588f, -0.009421f, 0.004252f, -0.001677f, -0.002708f, -0.000706f, -0.006731f, -0.000177f, 0.006972f, -0.000465f, -0.003288f, 0.001212f, -0.005833f, 0.004020f, 0.002936f, 0.001708f, -0.004711f, -0.001419f, 0.006041f, -0.007740f, 0.007709f, -0.003544f, 0.003350f, 0.008570f, -0.010335f, 0.002457f, 0.000690f, -0.013040f, 0.002365f, -0.004162f, 0.005362f, -0.001859f, 0.000387f, 0.007885f, -0.005213f, 0.001506f, -0.008394f, 0.001431f, 0.001204f, -0.002105f, -0.002031f, -0.001019f, -0.003031f, 0.000581f, -0.001536f, 0.000332f, 0.005804f, -0.008508f, 0.003710f, -0.046413f, -0.078364f, 0.029057f, 0.250978f, 0.062778f, 0.138384f, -0.005476f, -0.134827f, -0.043825f, + -0.132679f, -0.113395f, -0.040105f, -0.027377f, -0.009303f, 0.075112f, 0.100916f, 0.133401f, 0.168544f, 0.072702f, -0.043234f, -0.078172f, -0.165638f, -0.157481f, -0.064250f, -0.052685f, -0.035148f, 0.067909f, 0.092635f, 0.055323f, 0.085876f, 0.102994f, 0.034790f, 0.028166f, 0.019173f, -0.053538f, -0.024686f, -0.038373f, -0.083472f, -0.046133f, -0.062049f, -0.091918f, -0.050072f, 0.011259f, 0.009719f, 0.051164f, 0.124291f, 0.084982f, 0.070711f, 0.068887f, 0.021121f, 0.004980f, -0.007195f, -0.035934f, -0.051219f, -0.064793f, -0.092575f, -0.081859f, -0.045828f, -0.014461f, -0.031355f, 0.025666f, 0.047795f, 0.040600f, 0.070134f, 0.078203f, 0.050159f, 0.045432f, 0.044394f, -0.007062f, -0.021979f, -0.011099f, -0.063905f, -0.052944f, -0.013657f, -0.052406f, -0.056083f, -0.035545f, -0.050464f, -0.024570f, 0.014221f, 0.032044f, 0.058026f, 0.093135f, 0.057675f, 0.053483f, 0.059150f, 0.021822f, -0.007227f, -0.010940f, -0.032026f, -0.052816f, -0.054892f, -0.052288f, -0.057399f, -0.039914f, -0.036797f, -0.030545f, -0.012735f, 0.014172f, 0.035167f, 0.054658f, 0.082481f, 0.086922f, 0.084661f, 0.071980f, + 0.022616f, -0.018928f, -0.038864f, -0.062364f, -0.082598f, -0.093195f, -0.093138f, -0.073719f, -0.041723f, -0.010056f, 0.025282f, 0.076193f, 0.084657f, 0.084896f, 0.088821f, 0.073496f, 0.038436f, 0.012143f, -0.021185f, -0.059601f, -0.083458f, -0.073571f, -0.068976f, -0.054290f, -0.025521f, 0.002077f, 0.019953f, 0.040828f, 0.046085f, 0.045542f, 0.035997f, 0.016269f, 0.007218f, 0.002760f, -0.007138f, -0.008029f, -0.008278f, -0.010653f, -0.013359f, -0.010319f, -0.014733f, -0.009967f, -0.008525f, -0.005920f, -0.007543f, -0.002851f, -0.001730f, 0.003087f, 0.003135f, 0.007069f, 0.005689f, 0.005383f, 0.000642f, 0.001581f, -0.000869f} + }, + { + {0.005807f, 0.005797f, -0.005219f, -0.000924f, 0.008310f, 0.002729f, -0.004297f, 0.000896f, -0.004747f, -0.004229f, -0.003398f, -0.007449f, -0.002585f, 0.004541f, -0.000364f, 0.002515f, -0.001253f, -0.002112f, -0.002062f, -0.000905f, 0.006263f, -0.003956f, 0.000394f, -0.000283f, 0.000277f, 0.004969f, -0.000160f, 0.003418f, 0.010898f, 0.008495f, 0.008547f, 0.004427f, 0.001943f, -0.001379f, -0.010067f, 0.004135f, -0.003754f, 0.006460f, 0.002297f, -0.003419f, 0.003046f, -0.004497f, -0.008725f, -0.002691f, -0.003369f, -0.008268f, 0.000358f, -0.001016f, -0.001176f, -0.003873f, 0.000533f, 0.008629f, 0.003833f, 0.005865f, -0.000085f, 0.003607f, -0.003366f, -0.000243f, 0.004520f, -0.003728f, 0.003030f, -0.004622f, -0.004912f, 0.000501f, 0.010166f, 0.006693f, 0.003908f, -0.001976f, 0.001706f, 0.001090f, 0.000596f, -0.001833f, -0.003893f, -0.005965f, -0.004318f, 0.000136f, -0.003696f, -0.001851f, -0.003980f, 0.001322f, 0.000616f, 0.002064f, -0.001168f, 0.001698f, 0.002408f, 0.001974f, 0.000266f, 0.001240f, -0.000908f, -0.000994f, -0.000024f, -0.002483f, 0.002625f, 0.002149f, -0.000243f, 0.002715f, + 0.000808f, 0.000547f, -0.001218f, -0.000772f, -0.001559f, 0.000522f, 0.000886f, -0.000028f, -0.000486f, 0.000938f, -0.000593f, -0.002304f, -0.000644f, -0.001542f, -0.000085f, 0.000452f, 0.000577f, -0.002413f, 0.000440f, 0.003725f, 0.001915f, -0.006435f, 0.015197f, -0.000330f, 0.000916f, -0.001612f, -0.008029f, 0.005930f, -0.004191f, -0.004015f, -0.009357f, -0.007212f, -0.003037f, 0.005801f, 0.008344f, -0.001697f, 0.004932f, -0.001929f, 0.009051f, 0.009393f, -0.018776f, 0.003428f, 0.000080f, -0.001848f, 0.006340f, 0.009978f, -0.003093f, -0.001467f, 0.000191f, -0.000626f, -0.004781f, 0.003914f, -0.004820f, -0.003812f, -0.000402f, 0.004991f, -0.002845f, -0.010570f, -0.004706f, -0.007191f, 0.000826f, 0.000622f, -0.009386f, -0.001130f, -0.004105f, 0.001926f, -0.000295f, -0.001434f, 0.002287f, -0.003144f, 0.003163f, -0.005045f, 0.004911f, 0.007191f, 0.011060f, 0.004577f, -0.004858f, 0.003946f, 0.004630f, -0.001766f, -0.012558f, 0.000793f, 0.006512f, -0.005065f, 0.003747f, -0.007299f, -0.000101f, -0.004669f, -0.012759f, -0.003911f, -0.006682f, 0.003199f, 0.004715f, -0.004330f, 0.002010f, -0.002054f, + 0.005992f, 0.000439f, 0.003501f, 0.005004f, -0.002169f, 0.002044f, 0.000999f, 0.002090f, 0.004315f, -0.001055f, 0.001445f, 0.005382f, 0.003060f, 0.000688f, 0.003214f, 0.000535f, 0.001377f, -0.000275f, -0.000096f, -0.002995f, 0.001547f, 0.001810f, 0.002435f, 0.001626f, 0.000529f, 0.000737f, 0.000054f, 0.000878f, -0.000413f, -0.000884f, -0.000257f, 0.001934f, 0.001653f, 0.000453f, 0.001478f, 0.000291f, 0.001713f, 0.001428f, 0.012423f, 0.003422f, -0.016925f, 0.006019f, 0.008656f, 0.003183f, -0.001487f, 0.004422f, -0.010643f, 0.001511f, 0.004688f, -0.002370f, 0.004532f, -0.000717f, 0.005526f, 0.001346f, -0.007194f, 0.004512f, 0.006531f, 0.006481f, -0.001908f, 0.003098f, 0.003517f, 0.002461f, -0.019165f, 0.002689f, -0.008172f, -0.002411f, -0.002735f, 0.004470f, 0.002045f, -0.015621f, -0.005653f, -0.003501f, -0.002993f, 0.006350f, -0.005845f, -0.010933f, 0.002669f, 0.005064f, 0.003129f, -0.010879f, -0.005143f, 0.003481f, -0.010296f, -0.000833f, -0.011374f, 0.001662f, 0.005534f, -0.005820f, -0.001800f, 0.006486f, 0.008237f, -0.019288f, -0.001457f, -0.005362f, 0.005809f, 0.002386f, + 0.000930f, 0.001662f, -0.005462f, 0.004905f, 0.004215f, -0.014981f, 0.011470f, -0.001549f, 0.002797f, -0.007648f, -0.003230f, -0.006470f, -0.000841f, 0.001676f, -0.006032f, -0.008330f, 0.007351f, -0.002691f, 0.003007f, -0.000422f, -0.001543f, 0.002133f, 0.002470f, -0.003046f, -0.007738f, 0.004278f, 0.003846f, 0.000979f, 0.001762f, -0.000252f, 0.000540f, 0.001275f, -0.000103f, 0.001270f, 0.000851f, -0.000184f, 0.002917f, 0.000411f, 0.002223f, 0.002685f, 0.000108f, 0.003790f, -0.000150f, 0.000731f, 0.000977f, 0.001691f, 0.001320f, 0.001879f, -0.002893f, 0.001278f, -0.001342f, 0.000560f, 0.001212f, 0.000909f, 0.002186f, -0.000785f, -0.000726f, -0.008125f, -0.007624f, -0.006341f, -0.004018f, 0.012630f, -0.004412f, 0.001716f, -0.010262f, 0.010877f, 0.000731f, -0.007385f, -0.001940f, 0.006298f, -0.013141f, 0.004453f, -0.003876f, 0.002954f, 0.002125f, -0.006026f, -0.004268f, -0.015642f, -0.004205f, -0.017616f, 0.002283f, 0.003960f, -0.001886f, -0.002403f, -0.001606f, 0.002650f, -0.006888f, -0.012560f, -0.005830f, -0.004626f, -0.001935f, 0.004600f, -0.002889f, 0.007464f, 0.003322f, 0.005718f, + -0.007777f, -0.000448f, -0.000383f, -0.006516f, 0.001809f, 0.005117f, -0.000507f, -0.003255f, -0.007624f, -0.007064f, 0.004752f, 0.007094f, -0.000229f, 0.014057f, 0.011159f, -0.010088f, -0.002564f, 0.000015f, -0.010633f, -0.012178f, 0.018389f, -0.000312f, 0.000506f, 0.005755f, -0.011685f, -0.003857f, -0.007570f, 0.018146f, 0.004907f, 0.000930f, -0.014459f, -0.011495f, 0.001544f, -0.004745f, 0.009384f, -0.004828f, -0.000103f, 0.002560f, -0.005675f, 0.002046f, 0.005664f, -0.008521f, 0.000094f, -0.013580f, 0.001481f, 0.005094f, -0.003919f, 0.001969f, 0.001630f, 0.006640f, -0.000954f, 0.001056f, -0.001314f, -0.000270f, 0.002880f, 0.002947f, 0.002765f, -0.002061f, 0.000884f, -0.000145f, 0.001241f, 0.000080f, 0.001216f, -0.001993f, 0.004282f, 0.000026f, 0.001228f, 0.000637f, 0.001352f, 0.000995f, 0.001237f, -0.001153f, -0.001111f, -0.000978f, 0.000944f, 0.002863f, 0.003385f, 0.000591f, 0.001535f, -0.002802f, -0.021213f, 0.010620f, 0.006019f, 0.010829f, -0.005806f, 0.005938f, 0.006211f, 0.011129f, 0.002642f, -0.021173f, 0.005297f, 0.000919f, 0.008426f, 0.015379f, 0.000816f, 0.006683f, + 0.005857f, -0.012677f, 0.004463f, 0.001181f, 0.001764f, -0.003441f, -0.001755f, 0.007877f, 0.005224f, 0.000326f, -0.007752f, -0.000088f, -0.003695f, -0.004011f, 0.012696f, 0.005868f, -0.000525f, -0.001694f, -0.015326f, -0.013148f, -0.015056f, 0.004013f, 0.004079f, -0.015609f, 0.001116f, 0.001062f, -0.015465f, 0.000977f, 0.002397f, -0.002065f, 0.017791f, -0.002189f, -0.008733f, -0.002196f, 0.010220f, -0.000842f, -0.015836f, 0.017218f, 0.008926f, -0.010951f, 0.008385f, 0.001671f, 0.001616f, -0.000283f, 0.000972f, -0.004253f, -0.007950f, -0.007528f, 0.013767f, -0.000913f, -0.004013f, -0.000639f, 0.009903f, -0.009168f, -0.016190f, 0.000581f, 0.003694f, 0.003038f, -0.014151f, -0.007331f, 0.005456f, -0.001273f, 0.007919f, 0.003017f, -0.002509f, -0.002366f, -0.002158f, -0.001125f, 0.000280f, 0.012578f, 0.007334f, 0.004548f, 0.004029f, 0.004862f, 0.007328f, -0.003499f, -0.001166f, -0.003967f, -0.001205f, 0.001394f, 0.000365f, -0.002196f, -0.003540f, 0.003697f, 0.000567f, 0.001667f, -0.000058f, -0.002262f, 0.000811f, 0.001953f, -0.004473f, -0.000761f, 0.003584f, 0.000774f, 0.000213f, -0.001645f, + -0.000492f, -0.001070f, -0.001942f, 0.000479f, 0.001817f, 0.001449f, -0.001310f, 0.001478f, 0.000128f, 0.006352f, 0.024526f, 0.007254f, 0.019677f, -0.021645f, 0.000863f, -0.010707f, 0.000377f, 0.007133f, 0.008303f, -0.011142f, 0.004882f, -0.006472f, -0.005660f, -0.007758f, -0.012518f, -0.001883f, -0.029527f, -0.000323f, 0.009792f, -0.001345f, -0.001982f, 0.003209f, -0.015478f, 0.005417f, -0.014760f, -0.004710f, 0.015260f, 0.003045f, 0.005286f, 0.000321f, 0.004511f, 0.012949f, 0.011780f, 0.022591f, 0.011784f, -0.017155f, -0.001399f, 0.019026f, -0.002642f, -0.013992f, -0.002094f, 0.001730f, -0.006348f, 0.012736f, 0.009495f, -0.011013f, -0.003178f, 0.012213f, 0.013068f, -0.004681f, -0.008260f, 0.020634f, -0.008490f, -0.027901f, -0.018801f, 0.006105f, -0.028001f, -0.000594f, -0.008362f, 0.000103f, -0.002573f, -0.007869f, 0.010529f, 0.002969f, -0.002713f, -0.009195f, 0.008047f, -0.005522f, 0.014893f, 0.010123f, -0.004031f, -0.009886f, 0.002147f, 0.003855f, 0.001414f, 0.000526f, 0.003545f, -0.002083f, -0.010896f, -0.003196f, 0.015246f, -0.001791f, -0.006156f, -0.001675f, -0.003164f, -0.007893f, + -0.007607f, -0.004265f, -0.003638f, 0.000875f, -0.000038f, 0.007594f, -0.000632f, -0.002776f, 0.001103f, 0.002699f, -0.001798f, 0.001565f, -0.002589f, 0.005155f, -0.000133f, 0.003156f, 0.000509f, -0.005011f, -0.000472f, -0.000567f, -0.005203f, -0.001439f, -0.003153f, 0.002360f, 0.000189f, -0.000832f, 0.001833f, 0.000783f, -0.000491f, 0.000910f, -0.005823f, 0.001249f, 0.001705f, -0.023892f, 0.011341f, -0.002103f, 0.006075f, 0.007924f, 0.012958f, 0.002904f, -0.011310f, 0.015436f, -0.005696f, 0.006874f, -0.006851f, 0.005729f, -0.000995f, -0.028066f, -0.005760f, -0.004797f, -0.003248f, 0.001928f, -0.006685f, -0.004629f, 0.003810f, 0.006167f, 0.002184f, 0.015171f, 0.007056f, -0.014652f, -0.001020f, 0.000039f, -0.008194f, 0.017453f, -0.010371f, -0.010078f, 0.018432f, 0.019355f, -0.002340f, -0.000219f, -0.011977f, 0.004352f, 0.002686f, -0.006273f, 0.003280f, 0.011991f, 0.007470f, 0.014418f, -0.003515f, -0.011308f, 0.007109f, 0.001690f, 0.003532f, -0.013480f, -0.006918f, -0.007917f, 0.003250f, 0.007727f, 0.002897f, 0.002073f, 0.013917f, 0.016602f, 0.002548f, -0.007881f, 0.009517f, 0.007744f, + -0.011628f, 0.001640f, 0.002100f, -0.001332f, 0.001437f, -0.000261f, 0.009979f, -0.001077f, -0.007669f, 0.003952f, 0.013132f, 0.005812f, 0.007739f, 0.016190f, -0.010966f, 0.001977f, -0.003686f, 0.015364f, 0.008866f, 0.016455f, -0.007851f, -0.002100f, 0.002804f, -0.005841f, 0.000924f, 0.001625f, -0.001798f, 0.000020f, 0.003880f, 0.004408f, -0.001583f, 0.002412f, 0.001777f, 0.005715f, 0.005103f, -0.000669f, -0.000358f, -0.002560f, 0.000798f, -0.002578f, 0.001431f, -0.004545f, 0.004581f, -0.000066f, -0.001679f, -0.000059f, -0.000312f, 0.000191f, -0.001536f, -0.003535f, 0.005091f, -0.000616f, 0.000903f, -0.005597f, -0.004531f, -0.001227f, 0.004895f, -0.000498f, -0.000442f, 0.000486f, -0.000483f, 0.010008f, -0.020765f, -0.012369f, 0.008211f, -0.004814f, -0.019398f, 0.009890f, -0.010166f, -0.008807f, 0.012458f, -0.003749f, -0.004170f, -0.003058f, 0.003188f, 0.009294f, 0.004770f, 0.005020f, 0.005084f, -0.007662f, -0.004642f, -0.001562f, 0.011221f, 0.005841f, -0.019822f, 0.006346f, 0.006137f, -0.008254f, 0.018583f, 0.017127f, 0.009159f, 0.000708f, -0.006795f, -0.004334f, 0.000968f, -0.005758f, + -0.006993f, -0.011416f, 0.001634f, -0.013040f, 0.009470f, 0.003702f, 0.000085f, 0.002123f, 0.004983f, 0.004390f, 0.010140f, 0.015925f, -0.006048f, -0.025092f, -0.004416f, -0.017070f, 0.005871f, 0.002429f, -0.022798f, 0.008319f, -0.009590f, 0.028651f, 0.009457f, -0.017947f, -0.000651f, 0.018253f, 0.009450f, -0.014847f, -0.008915f, 0.019095f, 0.010894f, -0.013146f, 0.016220f, -0.013493f, -0.017921f, 0.002837f, -0.027117f, 0.016416f, 0.017547f, -0.003961f, -0.016338f, -0.002850f, 0.006370f, 0.003390f, 0.002693f, 0.001720f, 0.012563f, -0.017629f, 0.005662f, 0.019804f, 0.000292f, 0.000763f, -0.017415f, 0.008731f, 0.004815f, -0.015957f, -0.004044f, -0.008013f, -0.003879f, 0.000720f, 0.004976f, 0.004106f, 0.000525f, -0.004739f, 0.000447f, -0.005083f, 0.002098f, 0.003173f, -0.000706f, -0.002410f, -0.001776f, 0.003255f, 0.000955f, -0.000919f, -0.002757f, -0.005069f, -0.000641f, -0.004946f, 0.010013f, -0.009336f, -0.000081f, -0.000900f, 0.003803f, 0.002705f, -0.005494f, 0.001760f, -0.001744f, 0.008665f, -0.001138f, 0.002526f, 0.000189f, -0.004815f, -0.000552f, 0.005492f, -0.000059f, -0.016245f, + -0.011999f, 0.000384f, -0.019506f, 0.000058f, -0.045863f, -0.014436f, -0.005273f, -0.025062f, -0.008777f, -0.005249f, -0.010989f, -0.008495f, 0.005982f, -0.012081f, -0.022935f, 0.006107f, 0.014394f, -0.023428f, -0.006476f, 0.007219f, 0.011761f, 0.020208f, 0.012903f, 0.011903f, 0.013060f, 0.004720f, 0.023146f, -0.013775f, -0.005894f, 0.004899f, -0.011452f, 0.004356f, 0.006561f, 0.012114f, 0.001594f, 0.019810f, 0.004164f, 0.004882f, 0.013681f, -0.006048f, -0.011729f, 0.000207f, -0.017982f, -0.011504f, -0.020756f, -0.000874f, -0.000954f, -0.027294f, 0.009841f, -0.012369f, 0.005586f, -0.025781f, 0.003086f, -0.019513f, 0.029106f, 0.001455f, -0.025943f, 0.031124f, 0.038135f, 0.010698f, -0.012783f, -0.009482f, 0.009895f, -0.003333f, -0.001260f, 0.011254f, -0.018213f, 0.011851f, -0.018811f, 0.009944f, -0.007502f, -0.010615f, 0.004480f, 0.009986f, -0.005442f, -0.000599f, 0.011734f, 0.003056f, -0.005804f, 0.006585f, -0.002913f, -0.010788f, 0.001402f, 0.010028f, -0.001947f, -0.004001f, 0.003980f, 0.002896f, 0.008175f, 0.001611f, 0.000263f, 0.003500f, -0.002767f, 0.005681f, 0.001424f, 0.004699f, + 0.001616f, 0.003726f, 0.003017f, 0.003033f, 0.002443f, -0.003540f, 0.003921f, -0.004751f, -0.004401f, 0.000392f, 0.002563f, 0.000813f, 0.001270f, 0.002797f, 0.001846f, 0.000182f, -0.001557f, -0.003585f, 0.000013f, -0.003768f, 0.009921f, -0.004982f, 0.008937f, 0.013486f, 0.001986f, 0.012446f, -0.007038f, 0.019455f, -0.015129f, -0.014092f, -0.037074f, -0.008243f, -0.019225f, -0.045235f, 0.011346f, -0.026088f, -0.015842f, -0.021037f, 0.005770f, -0.040754f, 0.010894f, 0.003304f, -0.007829f, -0.000932f, -0.011723f, -0.004167f, 0.009763f, -0.013913f, -0.009903f, 0.000503f, 0.007440f, -0.012177f, -0.000949f, 0.013894f, -0.022363f, -0.005213f, 0.013039f, -0.012452f, -0.000766f, 0.000073f, -0.003543f, 0.018851f, -0.016531f, 0.011177f, -0.007524f, 0.015325f, 0.016209f, -0.016546f, -0.022042f, 0.020574f, -0.002234f, 0.004446f, 0.005386f, 0.001808f, -0.004734f, 0.011566f, -0.006297f, -0.025533f, 0.006647f, 0.005145f, -0.022082f, -0.002514f, -0.007905f, 0.013224f, 0.016154f, 0.007952f, 0.002724f, -0.006403f, -0.015687f, 0.016006f, 0.009928f, 0.014311f, -0.000985f, -0.022659f, -0.005285f, -0.003458f, + -0.009866f, -0.005622f, -0.002632f, 0.006486f, 0.010081f, -0.008781f, -0.007415f, -0.022514f, -0.010657f, 0.004290f, 0.009283f, 0.002459f, -0.001891f, 0.010246f, 0.009718f, 0.005760f, 0.011930f, -0.003705f, 0.009362f, 0.004193f, 0.006413f, 0.001033f, 0.000108f, -0.006240f, -0.004701f, -0.001180f, 0.003043f, -0.001518f, -0.005232f, -0.006651f, -0.000172f, -0.001132f, 0.001438f, -0.004538f, 0.001116f, -0.005403f, 0.001742f, 0.008916f, 0.002093f, -0.005179f, -0.005205f, 0.011360f, 0.006569f, -0.001455f, -0.000609f, -0.014471f, -0.001549f, -0.000213f, -0.012128f, 0.000269f, -0.004864f, -0.003831f, 0.003000f, 0.003757f, 0.001017f, -0.001446f, -0.011147f, 0.055062f, 0.031795f, 0.002119f, -0.017479f, -0.041694f, -0.005084f, 0.019387f, -0.009131f, -0.016845f, -0.031262f, -0.001827f, -0.006748f, 0.001010f, -0.010726f, 0.010026f, -0.000177f, 0.027217f, 0.010789f, -0.011470f, -0.000812f, -0.004950f, 0.002060f, -0.005707f, 0.005635f, 0.016842f, -0.019826f, 0.003762f, -0.011951f, 0.007803f, -0.008516f, -0.014524f, -0.028249f, -0.002355f, 0.016155f, 0.005345f, -0.003538f, 0.005890f, -0.002104f, 0.015344f, + 0.024381f, -0.008585f, -0.005569f, -0.028330f, -0.030643f, 0.008395f, 0.004536f, -0.013030f, -0.011212f, -0.025519f, -0.017498f, 0.010004f, -0.003309f, -0.000029f, 0.001287f, -0.002047f, 0.011619f, 0.006575f, -0.020954f, 0.000800f, -0.019097f, -0.001738f, -0.010305f, -0.006006f, 0.020266f, 0.041716f, 0.068841f, 0.002517f, 0.022141f, -0.020851f, -0.026464f, -0.037257f, -0.001964f, -0.000205f, 0.007534f, 0.007801f, -0.005088f, -0.047076f, 0.019507f, -0.008067f, -0.006490f, 0.002880f, -0.012325f, 0.001341f, -0.006702f, -0.019225f, 0.000240f, -0.007741f, 0.000181f, 0.001834f, 0.000734f, 0.013519f, 0.001975f, 0.001474f, -0.000731f, 0.000487f, -0.000568f, 0.005763f, 0.012820f, 0.003716f, -0.000452f, 0.002667f, 0.011625f, 0.000244f, 0.000150f, 0.004301f, -0.003845f, 0.001371f, -0.010621f, 0.003563f, 0.005567f, -0.010059f, 0.010222f, 0.000546f, 0.000896f, -0.003027f, -0.011105f, -0.003650f, 0.004990f, -0.000016f, -0.001117f, -0.002842f, 0.000400f, 0.020157f, 0.033546f, -0.016580f, 0.000042f, 0.006474f, -0.027399f, 0.000276f, -0.017698f, -0.017108f, 0.025769f, -0.007569f, -0.006497f, -0.013841f, + 0.029596f, 0.026050f, -0.000031f, 0.042784f, 0.004787f, 0.013376f, 0.009387f, -0.011902f, -0.013992f, -0.022240f, -0.011750f, 0.005233f, 0.000180f, 0.019183f, 0.001463f, -0.002073f, -0.003521f, 0.013560f, -0.019604f, -0.047814f, -0.016801f, 0.014124f, 0.004391f, -0.003913f, -0.014285f, 0.000866f, -0.023047f, -0.003442f, -0.021001f, -0.001434f, -0.002662f, -0.014758f, 0.014123f, 0.007049f, 0.026859f, -0.022203f, 0.041628f, 0.011200f, -0.008146f, -0.014733f, -0.007613f, 0.006578f, 0.023995f, -0.007384f, 0.013711f, -0.021225f, 0.017120f, -0.019274f, -0.021749f, 0.021416f, -0.031087f, 0.020359f, 0.017050f, 0.033035f, -0.033670f, 0.025566f, -0.003236f, 0.022793f, 0.008850f, -0.035326f, -0.006231f, -0.008293f, 0.009805f, -0.018741f, 0.055582f, -0.002729f, -0.019692f, 0.007899f, 0.025659f, 0.017472f, 0.011990f, 0.013284f, -0.001810f, 0.006332f, -0.002332f, -0.007367f, -0.004750f, 0.001967f, -0.000305f, -0.007308f, 0.002041f, -0.002143f, -0.011345f, -0.002339f, -0.004372f, 0.004753f, 0.005888f, 0.003248f, -0.001623f, 0.010990f, -0.001850f, 0.006086f, 0.002364f, 0.007779f, 0.002852f, -0.003918f, + -0.004960f, 0.001341f, -0.000657f, 0.005367f, -0.002247f, 0.000523f, 0.004472f, -0.002744f, 0.007713f, -0.003673f, -0.004381f, 0.002187f, -0.003307f, 0.008149f, 0.002861f, -0.002372f, 0.002396f, -0.023260f, -0.031201f, -0.063899f, -0.019626f, -0.037524f, 0.010446f, -0.001715f, -0.012797f, -0.018589f, -0.017706f, -0.015997f, -0.017345f, -0.016985f, 0.001758f, -0.013851f, -0.002517f, -0.030094f, -0.046179f, 0.056521f, -0.017651f, 0.030615f, -0.005890f, 0.007885f, 0.009726f, 0.016489f, 0.010855f, -0.002916f, -0.000969f, -0.024447f, -0.005566f, -0.005846f, -0.016464f, -0.025642f, 0.009950f, -0.002932f, 0.036139f, -0.025106f, 0.000610f, 0.050015f, -0.012124f, -0.041653f, -0.013480f, 0.001595f, -0.018918f, 0.029235f, 0.013398f, -0.016150f, 0.011817f, 0.015673f, -0.009771f, -0.000390f, 0.007839f, 0.019514f, -0.000805f, -0.019366f, -0.019067f, 0.023364f, 0.016681f, -0.012399f, -0.026800f, 0.016966f, 0.019645f, -0.017698f, -0.024129f, 0.016758f, -0.030578f, 0.058247f, 0.012455f, -0.004864f, 0.002282f, 0.014171f, 0.003120f, -0.010376f, 0.000842f, 0.004086f, 0.020846f, -0.013857f, 0.004087f, -0.041570f, + -0.037451f, -0.004292f, 0.002115f, -0.004195f, -0.018240f, 0.013070f, 0.030715f, -0.000988f, 0.007780f, -0.003026f, 0.006465f, 0.009190f, 0.010996f, -0.012058f, 0.013244f, -0.006320f, -0.003690f, 0.008719f, 0.016329f, -0.005007f, -0.016667f, 0.004563f, -0.001669f, 0.002607f, -0.001652f, -0.009018f, -0.002614f, -0.009320f, -0.005832f, -0.011469f, 0.011484f, 0.011753f, -0.007309f, -0.000185f, 0.014162f, 0.004371f, -0.006235f, 0.002823f, 0.017776f, 0.011622f, 0.012769f, 0.012858f, 0.011349f, 0.004094f, 0.016270f, 0.008490f, 0.006672f, 0.005911f, 0.015394f, -0.024052f, 0.000052f, 0.008893f, 0.006840f, -0.015763f, 0.037980f, 0.026779f, 0.054671f, 0.030193f, 0.020359f, 0.007911f, -0.047815f, -0.003949f, 0.006521f, -0.028196f, -0.007500f, 0.054056f, 0.004158f, -0.031387f, -0.030918f, 0.027981f, -0.042606f, -0.011103f, 0.001881f, 0.011363f, 0.004905f, -0.008186f, 0.013846f, -0.019306f, -0.000025f, -0.003964f, -0.012115f, -0.002747f, -0.008432f, -0.027910f, 0.014669f, -0.024207f, 0.014150f, 0.012512f, 0.016469f, 0.002882f, 0.010916f, -0.010196f, 0.044992f, 0.005915f, -0.047778f, -0.042141f, + 0.003856f, 0.018714f, 0.036569f, -0.012209f, -0.028702f, -0.012879f, -0.003803f, 0.003958f, 0.021474f, 0.004496f, -0.016943f, 0.049297f, -0.060666f, -0.010295f, 0.011483f, -0.042407f, -0.021863f, -0.011315f, 0.006234f, -0.068600f, -0.032389f, 0.048745f, -0.018571f, 0.014067f, -0.015928f, -0.055456f, -0.020913f, 0.026340f, -0.008173f, 0.010104f, 0.016894f, 0.034657f, -0.016671f, 0.003579f, -0.010473f, 0.021588f, 0.009870f, 0.009130f, 0.001343f, -0.001163f, 0.000511f, 0.018749f, 0.009703f, 0.010961f, -0.003034f, -0.000744f, 0.006963f, -0.013096f, -0.011799f, 0.004757f, 0.021948f, 0.010012f, 0.008455f, -0.021878f, 0.012554f, 0.039949f, -0.000331f, -0.000803f, -0.015612f, 0.010545f, 0.001644f, -0.009764f, -0.012720f, 0.001295f, 0.011771f, 0.013591f, 0.009942f, -0.012895f, 0.008193f, -0.008801f, 0.009317f, -0.016519f, -0.009074f, -0.003709f, -0.008701f, -0.010935f, -0.003435f, -0.026661f, -0.025118f, 0.003577f, -0.002062f, -0.004636f, 0.008573f, -0.000850f, -0.002708f, -0.000328f, 0.008479f, 0.028358f, -0.012507f, -0.087647f, -0.023466f, 0.005507f, 0.023962f, 0.024669f, 0.021179f, 0.022593f, + 0.038996f, 0.071988f, -0.041622f, 0.030460f, -0.011067f, -0.000776f, -0.011216f, -0.058168f, -0.044556f, -0.007845f, -0.003348f, 0.013090f, 0.022314f, 0.030590f, -0.010160f, -0.000520f, -0.016187f, 0.000600f, -0.003460f, 0.000168f, 0.030369f, 0.017074f, 0.009681f, 0.024335f, 0.027595f, -0.049133f, 0.023909f, -0.028369f, -0.037246f, -0.010375f, 0.022940f, 0.007232f, -0.025373f, 0.008591f, 0.002327f, 0.018100f, -0.002353f, -0.047760f, -0.035189f, -0.039540f, -0.040442f, 0.005619f, 0.032276f, -0.005771f, 0.118692f, -0.077652f, -0.059485f, 0.036319f, -0.011175f, -0.023576f, -0.008724f, -0.006181f, 0.000652f, -0.072753f, 0.007059f, -0.005043f, 0.009394f, 0.056196f, -0.004557f, 0.019839f, 0.020951f, 0.026936f, 0.091195f, -0.033836f, 0.115487f, 0.032563f, -0.003799f, 0.015537f, 0.006024f, -0.047464f, -0.042927f, -0.000525f, -0.011017f, 0.006200f, 0.017301f, 0.014506f, -0.008917f, -0.040673f, -0.034376f, 0.013732f, -0.023411f, 0.015049f, 0.015515f, 0.036477f, 0.034489f, 0.032488f, 0.005581f, 0.011503f, -0.001183f, -0.001320f, 0.023058f, -0.003652f, -0.002802f, 0.007891f, -0.035113f, -0.007895f, + 0.013795f, 0.000274f, -0.004211f, 0.022223f, 0.007560f, -0.031720f, 0.021348f, -0.017600f, -0.025746f, -0.013632f, -0.008498f, 0.006534f, 0.009647f, 0.011230f, -0.014110f, 0.016090f, 0.005869f, 0.010481f, 0.003651f, 0.013699f, -0.006296f, 0.008434f, -0.021522f, -0.003951f, -0.052482f, 0.019124f, 0.083798f, 0.002460f, 0.087448f, 0.046268f, -0.005458f, -0.033781f, 0.098631f, 0.014876f, -0.016819f, 0.012826f, -0.022707f, -0.006589f, -0.003603f, -0.006033f, 0.012239f, 0.027611f, 0.018958f, 0.003673f, 0.012415f, -0.019808f, -0.019462f, 0.006021f, -0.006145f, 0.032505f, 0.034920f, 0.022443f, -0.009376f, 0.002241f, -0.043160f, -0.026862f, -0.008302f, -0.029383f, -0.046683f, -0.027577f, 0.021694f, -0.026901f, -0.082086f, -0.037779f, 0.024554f, -0.033009f, -0.023710f, 0.001169f, -0.006440f, 0.038437f, 0.056074f, 0.074270f, -0.039794f, 0.021115f, -0.001034f, 0.002438f, -0.016466f, -0.049126f, -0.098524f, -0.064547f, 0.033521f, -0.065407f, -0.034817f, 0.017842f, 0.032710f, -0.024229f, 0.036947f, 0.107489f, 0.022095f, 0.020827f, -0.081794f, -0.108958f, -0.024145f, -0.033923f, -0.058690f, -0.016603f, + -0.049127f, 0.034667f, 0.019175f, 0.097435f, 0.039608f, -0.011295f, -0.020278f, -0.033859f, 0.022470f, 0.044268f, 0.087698f, 0.061730f, -0.043071f, -0.089206f, -0.044147f, -0.028477f, -0.053377f, -0.009874f, 0.044383f, 0.021538f, 0.055031f, 0.002350f, 0.038941f, 0.015717f, -0.013502f, -0.016714f, -0.019756f, 0.010696f, 0.023528f, 0.005953f, 0.030793f, 0.039159f, 0.023043f, 0.027893f, 0.012197f, 0.042287f, 0.036551f, 0.001437f, -0.001503f, 0.018473f, 0.041324f, -0.004250f, -0.011999f, -0.006436f, 0.035117f, 0.010885f, 0.000936f, -0.010815f, 0.021647f, 0.017067f, -0.006310f, 0.014133f, 0.016944f, 0.008639f, -0.004723f, 0.003740f, 0.011867f, 0.001398f, -0.021354f, 0.044901f, 0.089044f, -0.047530f, 0.067413f, 0.054111f, -0.009119f, -0.014091f, -0.030710f, 0.009006f, 0.060069f, 0.044571f, 0.070508f, -0.031127f, -0.014426f, -0.014775f, -0.004833f, -0.019391f, 0.018101f, -0.023746f, 0.051597f, 0.021769f, -0.086029f, -0.037297f, 0.000231f, 0.012479f, 0.036426f, -0.018031f, -0.032866f, 0.009218f, 0.009583f, -0.014142f, -0.016487f, 0.009212f, -0.024823f, -0.037668f, -0.017413f, 0.080207f, + 0.032886f, 0.013246f, -0.041401f, -0.013634f, -0.035204f, 0.019878f, 0.038608f, 0.012750f, 0.002107f, 0.022691f, -0.014190f, 0.051039f, 0.028734f, 0.002656f, 0.016613f, -0.002284f, 0.101468f, 0.020669f, -0.043864f, 0.016201f, 0.017167f, 0.009772f, 0.022634f, 0.000968f, -0.041870f, 0.048752f, 0.010395f, 0.008060f, 0.018847f, 0.008585f, -0.000486f, -0.030810f, 0.034721f, 0.039668f, 0.020304f, 0.114519f, 0.081284f, -0.044430f, -0.089050f, -0.062401f, -0.006472f, 0.007395f, -0.009427f, -0.075722f, -0.037758f, -0.027054f, -0.031380f, -0.031226f, 0.027700f, 0.021674f, -0.008239f, 0.004410f, -0.007063f, -0.042511f, 0.011899f, -0.008033f, -0.002591f, -0.043541f, -0.041916f, -0.007712f, 0.017435f, 0.020481f, 0.002333f, 0.021857f, 0.009228f, 0.027632f, 0.003837f, 0.005391f, -0.047440f, -0.028242f, 0.019958f, 0.005349f, -0.013239f, 0.024659f, 0.010384f, 0.004309f, -0.022858f, 0.021905f, 0.030116f, 0.021181f, 0.021849f, 0.027649f, -0.006184f, 0.030654f, 0.061455f, 0.048470f, 0.010928f, 0.006715f, -0.007876f, -0.010720f, -0.031605f, -0.039951f, 0.010509f, -0.004392f, -0.016650f, -0.104061f, + -0.013662f, 0.025814f, 0.029099f, -0.023974f, 0.036382f, 0.011077f, -0.015045f, -0.039213f, 0.008352f, -0.009846f, -0.058220f, -0.018909f, -0.020900f, 0.003758f, -0.080079f, -0.062928f, -0.011025f, 0.038602f, -0.005673f, -0.012709f, -0.048638f, 0.000300f, 0.040868f, 0.001273f, -0.029098f, -0.017239f, -0.006635f, -0.016939f, 0.009784f, 0.012966f, -0.041317f, -0.046295f, 0.006601f, -0.002349f, 0.009295f, 0.074325f, -0.046462f, -0.005565f, -0.003439f, -0.074014f, -0.022631f, -0.054379f, -0.008974f, -0.005320f, 0.051232f, 0.057578f, 0.070886f, 0.019670f, 0.011487f, -0.027960f, -0.063222f, 0.001710f, 0.024768f, -0.022531f, 0.087141f, 0.204501f, 0.196513f, 0.027967f, -0.126916f, -0.116692f, -0.046175f, -0.073687f, 0.241166f, 0.148831f, 0.093239f, 0.121386f, -0.002750f, -0.065621f, -0.173162f, -0.111279f, -0.043603f, -0.010058f, 0.068619f, 0.139659f, 0.124273f, -0.015696f, -0.104286f, -0.063477f, -0.094540f, -0.074473f, 0.012173f, 0.100915f, 0.147433f, 0.056669f, -0.008996f, 0.007481f, -0.057886f, -0.068152f, -0.067944f, 0.022593f, 0.009446f, 0.016685f, 0.058560f, 0.031051f, -0.007106f, -0.038961f, + -0.034178f, -0.022591f, -0.053420f, -0.011170f, 0.022007f, -0.020215f, 0.000230f, -0.007875f, 0.035159f, 0.026644f, -0.049802f, -0.030938f, -0.099460f, -0.079746f, -0.071464f, 0.044314f, 0.078323f, 0.029622f, 0.019374f, -0.029496f, -0.052177f, -0.154784f, -0.115266f, -0.069081f, 0.011973f, 0.042173f, 0.026180f, 0.005758f, -0.057916f, -0.047946f, -0.090946f, -0.149369f, -0.059793f, 0.016702f, 0.042263f, 0.075564f, 0.034005f, -0.000630f, -0.043149f, -0.016018f, -0.029062f, 0.053703f, -0.052531f, 0.060576f, 0.012454f, 0.006053f, -0.096439f, -0.032152f, 0.086181f, -0.057866f, 0.024413f, -0.000597f, -0.018434f, 0.025664f, 0.010689f, 0.044888f, 0.072895f, -0.042865f, -0.055531f, 0.014158f, -0.033445f, 0.044492f, -0.058053f, -0.031633f, -0.036360f, 0.003763f, -0.009148f, -0.034803f, 0.016448f, 0.068032f, -0.052888f, -0.060160f, -0.043072f, -0.014386f, -0.011966f, 0.091546f, 0.006542f, -0.003267f, -0.089735f, -0.023882f, 0.009401f, 0.076838f, 0.034475f, -0.014203f, -0.129771f, -0.093974f, 0.089503f, 0.096238f, 0.094306f, -0.043216f, -0.217083f, -0.043222f, 0.098473f, 0.081365f, 0.013020f, -0.025399f, + 0.014364f, -0.088107f, -0.051932f, 0.029624f, -0.025434f, 0.026814f, -0.015683f, 0.003572f, 0.092635f, -0.068578f, -0.035695f, 0.076474f, 0.060584f, 0.115394f, 0.049283f, -0.154025f, 0.048558f, 0.166432f, 0.036112f, 0.084296f, 0.021568f, -0.046679f, -0.001055f, 0.105934f, 0.073123f, 0.140680f, -0.184454f, 0.025344f, -0.000881f, -0.020869f, 0.073588f, 0.001003f, -0.095703f, 0.008220f, -0.003844f, -0.020060f, 0.014547f, -0.000770f, -0.058399f, 0.051035f, -0.023895f, -0.001848f, 0.003012f, -0.014382f, 0.002981f, 0.007256f, -0.015894f, -0.021862f, -0.031606f, -0.047543f, 0.046677f, -0.002878f, 0.017479f, 0.038774f, -0.044440f, 0.020760f, -0.001169f, -0.082362f, 0.000864f, 0.024619f, 0.088666f, -0.024119f, -0.121841f, -0.015387f, 0.059086f, 0.014663f, 0.052346f, -0.041544f, -0.033370f, -0.045696f, 0.021381f, -0.009078f, 0.032433f, -0.048357f, 0.024421f, 0.010596f, 0.015217f, -0.053754f, 0.006538f, 0.009675f, 0.038265f, -0.016345f, 0.009191f, -0.033477f, 0.013202f, -0.020714f, 0.033285f, -0.007579f, 0.027064f, -0.009956f, 0.012317f, -0.108557f, 0.012267f, 0.019414f, 0.010347f, 0.107031f, + 0.018028f, -0.008034f, -0.068334f, -0.011683f, -0.006727f, -0.016012f, -0.000687f, -0.012935f, 0.027378f, 0.012778f, -0.020151f, -0.003453f, 0.042494f, 0.000131f, -0.002401f, 0.004514f, -0.010650f, -0.018244f, 0.023840f, 0.021086f, 0.015994f, -0.026576f, 0.013957f, 0.039761f, 0.015581f, -0.002286f, 0.025635f, -0.004672f, -0.030448f, 0.008046f, 0.007699f, -0.024518f, -0.026660f, 0.026541f, 0.025832f, -0.025520f, 0.016336f, 0.015786f, -0.000242f, -0.009298f, 0.000173f, 0.020177f, -0.001132f, -0.022544f, 0.011714f, 0.013745f, -0.041884f, 0.010702f, 0.030941f, 0.010122f, -0.027238f, 0.004235f, 0.019197f, -0.035273f, 0.009563f, 0.016520f, 0.006960f, -0.009180f, -0.033643f, 0.039574f, -0.042862f, -0.003792f, 0.041213f, 0.000662f, -0.007128f, 0.000900f, -0.038768f, 0.017142f, -0.000589f, 0.022125f, 0.040983f, -0.018565f, -0.002970f, -0.023709f, 0.031340f, -0.006583f, -0.003524f, 0.032139f, -0.042004f, -0.018475f, 0.023290f, 0.019007f, 0.008327f, -0.034152f, 0.011782f, -0.007517f, -0.002166f, 0.016356f, 0.012424f, 0.002329f, -0.008712f, -0.004387f, 0.001564f, 0.009247f, -0.029824f, 0.021697f, + 0.004410f, -0.004159f, 0.008392f, -0.003924f, 0.018833f, -0.028052f, -0.005101f, 0.000561f, 0.001629f, 0.002780f, 0.012955f, 0.008572f, -0.047634f, 0.025161f, -0.005106f, -0.005554f, -0.002001f, 0.009671f, 0.013001f, -0.011818f, -0.004782f, 0.022135f, -0.018971f, -0.002451f, -0.014517f, 0.010516f, 0.100308f, 0.008798f, -0.012242f, -0.033545f, -0.022295f, 0.011752f, -0.014950f, 0.012936f, -0.019954f, -0.001589f, 0.015893f, -0.008992f, 0.007472f, 0.007319f, -0.027809f, 0.007678f, -0.009110f, -0.006059f, -0.022920f, 0.006463f, -0.006494f, -0.014459f, -0.006743f, 0.011070f, -0.010007f, -0.009911f, 0.014137f, -0.015714f, 0.007947f, 0.013440f, -0.027865f, 0.027457f, -0.006959f, -0.032783f, 0.017388f, 0.017293f, -0.015290f, 0.005306f, 0.009914f, -0.013854f, -0.012406f, 0.000074f, 0.001845f, 0.008918f, -0.004511f, -0.001698f, -0.013793f, 0.012636f, -0.010806f, -0.003506f, 0.015869f, -0.019187f, 0.005527f, -0.003497f, 0.000049f, -0.009047f, -0.012370f, -0.005061f, 0.021576f, -0.014778f, -0.005622f, 0.003463f, 0.004585f, 0.000595f, -0.013077f, 0.009931f, -0.005861f, -0.011315f, -0.000322f, -0.020720f, + 0.030254f, -0.013391f, 0.006132f, 0.006653f, -0.006221f, 0.010467f, -0.017994f, -0.014703f, 0.018424f, -0.009074f, -0.012480f, 0.012315f, -0.000819f, 0.003419f, -0.008315f, 0.002173f, -0.001834f, 0.005620f, -0.006630f, -0.005216f, 0.006993f, -0.004076f, -0.004828f, -0.001322f, 0.004421f, -0.002890f, -0.000390f, -0.002349f, 0.001190f, 0.004182f, -0.005882f, -0.005959f, 0.017348f, -0.005118f, -0.006181f, 0.005415f, -0.001965f, 0.005034f, -0.013879f, 0.000927f, -0.002286f, -0.000433f, -0.003655f, 0.016247f, 0.000247f, -0.014298f, 0.004720f, 0.001582f, -0.000577f, 0.000126f, 0.006364f, -0.004076f, -0.004068f, -0.001807f, -0.003662f, -0.001853f, 0.001844f, -0.004463f, -0.000052f, 0.001357f, -0.000562f, -0.049806f, -0.081434f, 0.037239f, 0.280845f, 0.043089f, 0.140272f, -0.032898f, -0.142824f, -0.051826f, -0.139194f, -0.091551f, -0.029166f, -0.015251f, 0.006527f, 0.082689f, 0.099247f, 0.137978f, 0.136877f, 0.043573f, -0.054248f, -0.087598f, -0.160905f, -0.123142f, -0.064903f, -0.025197f, -0.016543f, 0.049690f, 0.083233f, 0.064430f, 0.087702f, 0.085127f, 0.031264f, 0.027617f, 0.010310f, -0.062242f, + -0.023234f, -0.053513f, -0.092779f, -0.055997f, -0.054244f, -0.080315f, -0.017207f, 0.037577f, 0.028435f, 0.081986f, 0.107310f, 0.055944f, 0.071445f, 0.053872f, -0.007670f, -0.002317f, -0.005149f, -0.057749f, -0.071270f, -0.063433f, -0.095694f, -0.081394f, -0.028903f, -0.004758f, 0.011442f, 0.066343f, 0.060924f, 0.058859f, 0.073992f, 0.055363f, 0.018900f, 0.034995f, 0.019054f, -0.021551f, -0.010408f, -0.039858f, -0.084042f, -0.050448f, -0.047744f, -0.066071f, -0.031977f, -0.021163f, -0.037293f, 0.031435f, 0.059294f, 0.068638f, 0.109326f, 0.103157f, 0.043397f, 0.025620f, -0.001582f, -0.037376f, -0.044525f, -0.045765f, -0.066801f, -0.061028f, -0.056203f, -0.051378f, -0.032268f, -0.012750f, -0.000261f, 0.025027f, 0.058500f, 0.073120f, 0.067834f, 0.082050f, 0.056653f, 0.027545f, 0.011456f, -0.009529f, -0.042283f, -0.047557f, -0.066486f, -0.086510f, -0.087402f, -0.069301f, -0.058082f, -0.008827f, 0.034403f, 0.077399f, 0.103558f, 0.112295f, 0.086529f, 0.056491f, 0.024812f, -0.006801f, -0.043729f, -0.063753f, -0.086364f, -0.085523f, -0.061462f, -0.040211f, -0.012518f, 0.015438f, 0.030545f, 0.040811f, + 0.050824f, 0.044042f, 0.027208f, 0.023202f, 0.007909f, -0.000687f, -0.008576f, -0.010723f, -0.014199f, -0.013619f, -0.019867f, -0.016029f, -0.012979f, -0.010594f, -0.010968f, -0.007149f, -0.007377f, -0.001911f, 0.002202f, 0.009753f, 0.011182f, 0.015755f, 0.015405f, 0.014618f, 0.004749f, 0.001465f, -0.002053f, 0.000335f, -0.001275f}, + {-0.002126f, 0.011493f, -0.006458f, 0.001924f, -0.009600f, 0.002688f, 0.001081f, 0.014649f, -0.008772f, 0.000029f, -0.004614f, 0.007342f, 0.007498f, -0.004782f, -0.000909f, -0.004110f, -0.002356f, -0.004804f, -0.005980f, 0.004414f, 0.001445f, -0.003911f, 0.008180f, 0.007447f, 0.012729f, -0.000376f, 0.004823f, 0.002532f, -0.000209f, -0.011497f, 0.002995f, 0.004791f, -0.004535f, 0.002878f, -0.003342f, -0.003896f, -0.006306f, 0.003280f, 0.008128f, 0.000845f, 0.009484f, -0.003863f, -0.000801f, 0.009565f, 0.005008f, 0.000780f, -0.000111f, 0.009087f, 0.013646f, -0.010131f, 0.002281f, -0.003491f, -0.001563f, -0.015774f, -0.005594f, 0.006395f, -0.004894f, 0.004436f, 0.002053f, -0.002304f, -0.003819f, 0.002250f, -0.001300f, 0.004941f, 0.002683f, 0.002312f, 0.002534f, -0.008177f, 0.000324f, -0.003921f, 0.005056f, 0.008382f, 0.005880f, -0.001170f, 0.009074f, 0.000081f, 0.003859f, -0.001178f, -0.001995f, 0.000509f, 0.004561f, 0.005261f, -0.001693f, -0.003548f, -0.007358f, -0.000925f, -0.003234f, -0.003464f, -0.001947f, -0.002942f, -0.002104f, -0.003469f, -0.001812f, -0.000055f, -0.000025f, 0.000114f, + 0.002933f, -0.001980f, 0.001545f, -0.000692f, -0.001393f, 0.000117f, 0.001357f, 0.000527f, 0.001086f, 0.000041f, -0.000952f, 0.000060f, 0.001387f, 0.000494f, -0.001979f, -0.001512f, -0.000051f, 0.000066f, 0.000840f, 0.000167f, 0.001519f, -0.001961f, 0.006842f, -0.008387f, -0.008773f, 0.000332f, -0.011815f, 0.002169f, -0.003720f, 0.005742f, -0.003165f, -0.009372f, 0.001066f, 0.009188f, -0.001404f, 0.000317f, 0.012793f, 0.016080f, -0.006939f, -0.007378f, -0.002097f, -0.011953f, 0.005107f, 0.001092f, 0.002980f, -0.004203f, 0.006382f, -0.008328f, -0.001517f, 0.005704f, -0.004687f, -0.001708f, 0.000874f, 0.010362f, 0.000667f, 0.007498f, -0.009881f, 0.009709f, -0.001058f, 0.001405f, 0.006285f, -0.005422f, 0.005244f, -0.002461f, -0.002509f, 0.004518f, 0.005960f, -0.001008f, 0.003409f, -0.013104f, 0.007926f, 0.007694f, -0.013892f, -0.012227f, -0.003454f, -0.010140f, -0.002842f, 0.003870f, 0.002523f, 0.003695f, 0.000213f, -0.003378f, 0.008549f, -0.002861f, 0.000313f, -0.003415f, 0.002014f, -0.005174f, 0.007274f, 0.001786f, -0.005597f, -0.003126f, -0.002216f, -0.003241f, -0.002871f, 0.007370f, + 0.009652f, -0.000456f, -0.001968f, 0.000379f, 0.003091f, -0.002004f, 0.006743f, 0.003833f, -0.002756f, -0.000514f, -0.001722f, 0.002936f, -0.002827f, -0.000075f, -0.000746f, 0.000452f, 0.001068f, -0.000161f, -0.000829f, 0.001834f, -0.001416f, -0.000465f, 0.000379f, 0.001226f, 0.000096f, -0.002442f, -0.001690f, 0.000479f, -0.001613f, -0.001345f, 0.001618f, -0.000851f, -0.002993f, -0.001920f, -0.002408f, -0.000632f, 0.000381f, 0.002886f, 0.020666f, 0.003948f, -0.007642f, 0.009581f, 0.001220f, -0.006505f, 0.018877f, -0.012667f, -0.018145f, -0.010634f, -0.011002f, -0.003704f, 0.005369f, 0.006622f, -0.006271f, 0.009530f, -0.011957f, -0.006520f, -0.001446f, 0.003964f, 0.002983f, -0.003643f, -0.004699f, 0.010662f, 0.002053f, -0.000727f, -0.005977f, 0.007959f, -0.005821f, -0.001347f, -0.000012f, -0.000675f, -0.000836f, 0.003099f, 0.001656f, -0.001642f, 0.006646f, -0.003134f, 0.004052f, -0.000286f, -0.010841f, -0.004254f, -0.004330f, 0.011529f, -0.006391f, -0.007772f, -0.014079f, -0.016451f, -0.003006f, 0.000837f, -0.006569f, 0.012484f, 0.001686f, 0.006706f, -0.005042f, 0.010806f, 0.004609f, -0.006266f, + 0.017426f, -0.007896f, -0.008437f, 0.001349f, 0.010923f, 0.016012f, 0.011339f, 0.003754f, -0.005577f, -0.012602f, 0.005021f, -0.000155f, 0.012419f, 0.004994f, -0.003549f, -0.000430f, 0.006333f, 0.005087f, 0.000093f, -0.001187f, 0.000522f, -0.002481f, -0.005231f, -0.000495f, 0.001647f, 0.001296f, 0.004522f, -0.000161f, 0.002742f, -0.000960f, 0.002164f, -0.000551f, 0.000413f, -0.000466f, -0.003061f, 0.000287f, -0.000558f, -0.003926f, 0.003154f, -0.000725f, 0.001932f, -0.001067f, -0.002110f, 0.000292f, 0.000375f, -0.000153f, -0.001380f, 0.001454f, 0.000584f, -0.001038f, -0.000317f, -0.003021f, 0.000392f, -0.001705f, 0.001523f, -0.000568f, 0.003266f, -0.001476f, -0.019517f, 0.003033f, -0.007068f, 0.004512f, 0.001348f, 0.014030f, -0.018048f, -0.010351f, -0.013233f, 0.007090f, 0.005960f, 0.008515f, -0.009423f, 0.003239f, -0.002759f, 0.001184f, -0.014707f, -0.012615f, -0.009182f, -0.009175f, 0.014974f, -0.006029f, -0.001730f, -0.000292f, 0.005146f, -0.002398f, -0.015628f, 0.006595f, -0.006176f, -0.002072f, 0.007329f, 0.005434f, 0.008404f, 0.000517f, 0.004527f, -0.011017f, -0.004476f, 0.009841f, + 0.016450f, 0.009590f, -0.000639f, -0.012529f, 0.008993f, -0.004051f, -0.010729f, 0.014906f, 0.004508f, 0.005116f, -0.009106f, -0.005372f, 0.005201f, -0.003394f, -0.005034f, 0.007859f, -0.006126f, 0.002724f, 0.000475f, -0.010418f, -0.002123f, -0.006899f, 0.011013f, 0.005551f, -0.001431f, 0.001851f, -0.004939f, 0.006461f, 0.001172f, -0.000198f, 0.002010f, -0.012464f, -0.006399f, 0.007016f, 0.003480f, -0.002043f, -0.001516f, -0.008865f, 0.014609f, 0.017960f, 0.010015f, -0.008249f, 0.007460f, 0.001260f, 0.006381f, -0.002750f, 0.005261f, -0.003960f, 0.003438f, 0.006557f, 0.003631f, 0.003140f, 0.002476f, 0.000119f, -0.002121f, -0.000747f, 0.006528f, 0.000327f, 0.000518f, -0.002426f, -0.000372f, 0.001342f, 0.003961f, -0.000492f, 0.004639f, 0.000740f, 0.000206f, -0.000176f, 0.003782f, 0.004532f, -0.001894f, -0.000875f, -0.000422f, 0.000700f, 0.003334f, -0.000192f, 0.000964f, 0.000238f, 0.000866f, -0.001635f, -0.029517f, 0.009848f, 0.001498f, 0.007342f, 0.007951f, -0.005764f, -0.020875f, 0.016088f, 0.006835f, 0.015830f, -0.002910f, 0.008392f, -0.000164f, -0.005697f, -0.000391f, -0.014755f, + 0.018056f, 0.004123f, 0.001712f, -0.009293f, -0.005338f, -0.006294f, 0.005395f, -0.008287f, 0.013829f, 0.000608f, 0.004762f, 0.007704f, 0.004259f, -0.000887f, 0.004467f, 0.004267f, -0.003229f, 0.003591f, -0.015372f, 0.003998f, 0.007011f, 0.007173f, 0.013809f, 0.004795f, -0.009218f, 0.004623f, -0.004643f, 0.009391f, 0.001824f, 0.006834f, 0.010515f, 0.001723f, -0.002295f, 0.008238f, -0.005662f, -0.008951f, -0.003302f, 0.005747f, 0.014573f, -0.003453f, 0.000926f, 0.000261f, 0.001752f, 0.002861f, 0.006113f, 0.002073f, -0.003820f, -0.000687f, -0.005156f, 0.003752f, 0.001222f, -0.009231f, -0.008114f, 0.003244f, 0.005140f, 0.005141f, 0.009166f, -0.014097f, -0.007569f, -0.010276f, 0.012108f, -0.005332f, -0.007486f, 0.003919f, -0.006898f, -0.010048f, -0.003611f, 0.000281f, 0.010780f, -0.003803f, 0.003502f, -0.004283f, -0.002489f, -0.000625f, 0.003304f, 0.001424f, -0.001921f, -0.001633f, 0.002093f, 0.005344f, 0.001841f, 0.003081f, -0.001451f, -0.001016f, 0.003660f, -0.000144f, 0.000285f, 0.001362f, -0.002489f, 0.004774f, -0.001452f, -0.000333f, -0.002193f, -0.006088f, -0.000903f, -0.001341f, + -0.000407f, -0.000068f, -0.002243f, 0.000240f, 0.005502f, -0.001362f, -0.000478f, -0.001041f, -0.001967f, 0.007283f, 0.029978f, 0.015906f, 0.014243f, 0.020767f, 0.005652f, 0.003794f, -0.012700f, -0.000416f, -0.023751f, -0.004279f, 0.009052f, 0.006569f, 0.004225f, 0.005496f, 0.006542f, -0.005127f, -0.003470f, 0.013619f, 0.012284f, 0.010536f, -0.000793f, 0.001479f, -0.016959f, -0.014694f, -0.005558f, 0.010740f, 0.003483f, -0.002228f, 0.005841f, -0.009882f, 0.000944f, -0.005098f, 0.011822f, 0.009279f, 0.020757f, -0.002059f, 0.007837f, 0.006522f, -0.003329f, -0.010880f, 0.019530f, -0.011350f, -0.002565f, 0.008840f, 0.000434f, 0.005025f, 0.014084f, -0.004494f, 0.005260f, -0.013608f, -0.029079f, -0.016134f, -0.009641f, -0.003907f, 0.001360f, -0.001161f, -0.007489f, -0.015636f, -0.003246f, -0.011227f, 0.003461f, -0.000259f, 0.001399f, -0.017633f, -0.008015f, 0.011433f, 0.003961f, -0.000686f, -0.019535f, -0.017688f, 0.010542f, 0.001894f, 0.006423f, -0.012959f, -0.010329f, 0.000697f, -0.005263f, -0.011055f, -0.007846f, 0.006214f, -0.002385f, 0.002864f, 0.000832f, 0.007771f, 0.005706f, 0.002670f, + -0.003937f, 0.002105f, -0.000693f, -0.004704f, -0.004633f, 0.004475f, -0.001899f, 0.001329f, -0.002992f, -0.004539f, -0.000780f, -0.000357f, 0.004050f, -0.000440f, -0.003920f, 0.001074f, 0.001525f, 0.004476f, 0.000888f, 0.001089f, -0.001878f, 0.005602f, -0.002111f, 0.006377f, -0.003496f, 0.004735f, -0.004161f, 0.000748f, 0.002484f, 0.000239f, -0.000293f, 0.001043f, -0.000946f, -0.001660f, -0.015158f, 0.011469f, -0.006737f, -0.000569f, -0.039466f, -0.009331f, -0.014584f, -0.009662f, 0.001615f, 0.013022f, -0.002584f, 0.017222f, 0.009139f, -0.001031f, -0.016965f, -0.007042f, 0.025277f, 0.004212f, -0.015109f, -0.011066f, -0.004980f, 0.011831f, -0.009221f, 0.000127f, 0.008161f, 0.012873f, 0.014556f, -0.015959f, 0.010744f, 0.001438f, 0.003050f, 0.004539f, 0.005907f, 0.005112f, 0.014594f, 0.000385f, 0.004440f, -0.012794f, 0.017883f, -0.008996f, -0.004197f, 0.002985f, -0.014823f, 0.018333f, -0.002894f, -0.035889f, -0.011848f, -0.028821f, 0.001772f, -0.000441f, -0.008692f, 0.039035f, -0.006821f, -0.019361f, -0.006550f, -0.004779f, 0.017959f, -0.002483f, 0.008573f, 0.010499f, -0.007317f, 0.013378f, + 0.018509f, -0.009425f, 0.007053f, -0.016468f, 0.008030f, -0.005922f, -0.004636f, 0.018968f, -0.006942f, -0.001842f, -0.008434f, 0.000481f, 0.000334f, 0.007222f, 0.010735f, 0.011343f, -0.003020f, -0.003246f, 0.000459f, 0.014700f, 0.006992f, 0.007633f, 0.000306f, -0.012040f, 0.004840f, -0.005856f, -0.006530f, -0.003610f, -0.000108f, -0.000351f, 0.000793f, 0.002659f, 0.002819f, -0.000719f, 0.008012f, 0.001285f, 0.003510f, 0.001382f, 0.001596f, -0.002246f, 0.002135f, 0.000803f, -0.002350f, -0.003509f, -0.002260f, -0.006029f, -0.004695f, 0.004147f, 0.003361f, -0.005102f, 0.001410f, -0.000278f, 0.001454f, 0.005761f, 0.001246f, -0.002251f, 0.000650f, 0.001861f, 0.000153f, -0.004653f, 0.002089f, 0.017942f, -0.025054f, 0.005003f, 0.005128f, -0.007937f, 0.003370f, 0.018882f, 0.020247f, 0.007506f, 0.007246f, 0.009653f, -0.015654f, -0.002727f, -0.016714f, -0.000354f, 0.010691f, 0.006761f, -0.003512f, -0.013231f, -0.004276f, 0.008938f, -0.017325f, 0.000588f, -0.001226f, 0.007999f, 0.016523f, 0.001562f, -0.008885f, -0.006782f, 0.017681f, -0.011355f, -0.005466f, 0.010168f, -0.006309f, -0.020884f, + -0.007547f, 0.004754f, 0.003554f, -0.008349f, 0.001978f, 0.010881f, 0.007532f, 0.010496f, -0.001207f, 0.007915f, 0.015043f, -0.006614f, 0.007510f, 0.006463f, -0.010236f, 0.022284f, -0.021378f, 0.012776f, 0.005657f, -0.029751f, 0.028523f, -0.018418f, 0.004088f, -0.003277f, 0.022774f, -0.009634f, -0.016070f, -0.003413f, 0.000189f, 0.004141f, 0.017512f, -0.014824f, -0.000678f, 0.001082f, 0.001075f, -0.002648f, 0.005225f, -0.012047f, -0.001714f, -0.008583f, -0.016014f, -0.017781f, 0.009658f, 0.007808f, 0.007486f, 0.000207f, 0.011339f, -0.005163f, -0.012963f, 0.003428f, -0.023007f, -0.019202f, -0.003553f, 0.005685f, -0.000127f, -0.003514f, -0.002909f, 0.002817f, -0.012559f, -0.004159f, -0.002587f, -0.001992f, 0.005940f, -0.000542f, 0.001045f, 0.000553f, -0.004072f, 0.002158f, -0.004585f, 0.000438f, 0.002301f, -0.004964f, -0.000998f, 0.004381f, -0.003257f, 0.000129f, -0.002260f, -0.000084f, 0.001666f, 0.000269f, -0.006847f, -0.000970f, -0.000009f, -0.000214f, -0.001112f, -0.004101f, -0.007049f, -0.001568f, -0.000361f, -0.000837f, 0.005874f, 0.004454f, -0.019965f, 0.015827f, -0.045750f, 0.025045f, + -0.018213f, -0.012517f, -0.022371f, 0.002452f, -0.002693f, 0.003867f, 0.015959f, -0.013490f, -0.005172f, 0.012650f, 0.011614f, -0.003915f, 0.004510f, -0.006265f, -0.020972f, -0.002125f, 0.005263f, -0.010879f, 0.016895f, 0.002701f, -0.001987f, -0.010206f, -0.009901f, 0.002128f, 0.026041f, 0.000903f, -0.003674f, 0.006935f, -0.022535f, -0.004102f, 0.008217f, -0.015480f, 0.021880f, 0.013682f, -0.000797f, -0.006934f, -0.007345f, -0.008673f, -0.014983f, -0.018742f, 0.015549f, 0.000913f, 0.027630f, 0.002268f, -0.001440f, -0.012665f, 0.002294f, -0.005112f, 0.006203f, -0.000631f, -0.017419f, -0.013867f, -0.017750f, -0.030146f, -0.004164f, 0.026113f, -0.025205f, -0.001797f, -0.026392f, 0.003969f, 0.007439f, 0.005892f, 0.018842f, -0.002316f, -0.027130f, 0.019231f, -0.001880f, -0.013378f, -0.010943f, -0.023695f, -0.008022f, -0.018075f, 0.009786f, -0.027625f, -0.004556f, 0.010524f, -0.000200f, 0.001847f, 0.013108f, 0.006434f, 0.015742f, -0.000172f, -0.008501f, -0.003598f, -0.005821f, -0.000525f, 0.005820f, -0.001838f, 0.001031f, 0.000566f, 0.000644f, -0.004802f, -0.006653f, 0.003974f, -0.004654f, 0.001807f, + 0.000860f, -0.001182f, 0.002105f, 0.000471f, 0.000896f, 0.009223f, 0.001732f, -0.000786f, 0.001825f, 0.002761f, 0.002121f, -0.004986f, -0.000691f, -0.010244f, 0.003792f, 0.004955f, 0.007877f, 0.002591f, 0.002737f, -0.000386f, -0.005033f, 0.002818f, -0.000187f, 0.019590f, -0.007126f, 0.017414f, -0.016986f, -0.009103f, 0.012023f, 0.003774f, -0.022945f, 0.001438f, 0.030022f, -0.034544f, 0.002116f, 0.016067f, 0.038850f, -0.016620f, -0.009777f, -0.004289f, 0.030107f, 0.029435f, -0.031067f, -0.001501f, -0.023844f, -0.011496f, 0.015684f, 0.015648f, 0.020628f, 0.011629f, -0.003977f, 0.014407f, -0.017754f, -0.009654f, -0.001691f, -0.002770f, -0.025739f, 0.002266f, -0.000487f, 0.034167f, -0.005181f, 0.016832f, 0.004175f, 0.009974f, 0.022999f, -0.013868f, -0.006070f, -0.033774f, 0.023370f, -0.029765f, -0.005180f, 0.006831f, -0.003914f, -0.017190f, -0.004207f, 0.004883f, -0.012117f, 0.003354f, -0.001887f, -0.002599f, -0.037837f, -0.026874f, 0.001992f, -0.019481f, -0.026531f, 0.004926f, -0.024519f, 0.007860f, 0.016149f, -0.014452f, 0.027654f, 0.005800f, 0.017792f, 0.018981f, 0.004987f, -0.014041f, + -0.016555f, -0.020726f, 0.010790f, -0.021505f, 0.013080f, 0.015601f, 0.021602f, 0.003830f, -0.015167f, -0.009787f, 0.000558f, 0.002122f, -0.028364f, -0.000656f, -0.018319f, -0.003091f, -0.005084f, 0.001201f, -0.013372f, 0.001828f, -0.002951f, -0.000142f, -0.008630f, -0.006343f, 0.002249f, 0.014278f, 0.001655f, -0.001300f, 0.002088f, -0.001964f, -0.005107f, -0.005118f, -0.005536f, -0.002439f, -0.006597f, 0.007406f, 0.005539f, -0.000435f, -0.005422f, 0.008791f, 0.013244f, -0.002832f, -0.002079f, -0.003014f, -0.001140f, -0.000363f, 0.003417f, -0.004881f, 0.005400f, 0.004900f, 0.003521f, -0.004638f, -0.000490f, 0.002805f, 0.004034f, 0.009085f, -0.018281f, 0.047302f, 0.019829f, 0.008155f, 0.024440f, -0.009370f, 0.005203f, -0.025208f, -0.032321f, 0.020372f, 0.041728f, 0.012357f, -0.000119f, -0.041200f, 0.049751f, 0.007145f, 0.006192f, 0.007091f, 0.001917f, 0.008947f, 0.002911f, -0.007151f, -0.000232f, 0.012511f, -0.007627f, 0.015731f, 0.003101f, -0.012444f, -0.017148f, -0.004733f, 0.015804f, -0.004340f, 0.005206f, -0.007144f, -0.006245f, 0.000238f, 0.044639f, 0.007185f, 0.006515f, 0.005996f, + 0.003828f, 0.026690f, -0.009889f, 0.007664f, -0.017199f, 0.031806f, 0.044398f, 0.011536f, -0.002495f, -0.015800f, 0.046387f, 0.021756f, 0.000739f, -0.017943f, 0.006830f, -0.010769f, -0.001609f, -0.020581f, -0.007677f, -0.013737f, -0.018812f, 0.030482f, -0.009101f, 0.022462f, 0.004759f, -0.017532f, -0.000217f, -0.037508f, 0.035689f, -0.002590f, -0.017014f, -0.013324f, -0.021697f, -0.026788f, -0.014615f, 0.041481f, -0.012897f, 0.014943f, 0.018876f, -0.016765f, -0.015923f, -0.029929f, 0.004540f, 0.020180f, 0.006954f, 0.019297f, -0.004425f, -0.003809f, 0.000889f, 0.005490f, -0.008211f, 0.002313f, -0.014888f, 0.004853f, -0.000678f, 0.016934f, 0.011952f, -0.009141f, 0.000933f, -0.000489f, 0.010078f, -0.003408f, -0.013403f, 0.002990f, -0.000414f, -0.001073f, 0.004986f, 0.000941f, -0.002102f, -0.006704f, -0.007524f, -0.001428f, -0.001799f, 0.007985f, -0.000308f, 0.008010f, -0.010968f, 0.002674f, 0.008265f, -0.015526f, -0.011340f, 0.004121f, -0.004949f, 0.011678f, 0.014023f, -0.010442f, -0.011100f, 0.044099f, 0.043231f, 0.053406f, 0.032136f, 0.010606f, -0.013585f, -0.014099f, 0.007987f, 0.015516f, + 0.018977f, -0.028377f, -0.000844f, -0.003378f, 0.014232f, 0.011247f, -0.019700f, -0.024282f, -0.000099f, -0.009197f, 0.023147f, 0.027250f, -0.000016f, 0.014448f, 0.004750f, 0.005779f, 0.031459f, -0.019210f, -0.025474f, 0.020093f, -0.033359f, 0.002889f, -0.010284f, 0.018417f, 0.009391f, 0.000346f, 0.021528f, 0.019773f, -0.017975f, 0.022403f, -0.000053f, -0.009577f, 0.005295f, 0.024337f, -0.009410f, 0.010415f, 0.018037f, 0.008171f, -0.038883f, -0.022474f, 0.003827f, 0.002061f, -0.026437f, -0.018055f, 0.008777f, 0.012585f, 0.010688f, -0.036009f, -0.025160f, -0.025057f, -0.001992f, 0.015618f, 0.022764f, -0.057207f, -0.042053f, 0.007004f, 0.008789f, 0.033054f, 0.011650f, 0.012126f, 0.024059f, -0.002584f, -0.006178f, -0.008728f, 0.059070f, 0.020428f, -0.009324f, -0.030906f, 0.028239f, 0.018456f, -0.009240f, -0.008392f, 0.004357f, -0.008502f, 0.015082f, -0.005443f, -0.003234f, 0.008887f, -0.002204f, -0.003538f, -0.004660f, 0.009333f, 0.024212f, 0.000174f, 0.001719f, 0.000852f, 0.010526f, 0.013528f, -0.003453f, -0.008510f, 0.003653f, -0.000791f, 0.002717f, 0.001589f, 0.002066f, -0.011482f, + -0.006278f, 0.008142f, 0.000816f, -0.004671f, 0.003961f, 0.011330f, 0.008807f, -0.015193f, -0.003426f, -0.010100f, -0.009742f, 0.007214f, -0.011630f, 0.004558f, -0.006280f, 0.011287f, -0.013458f, -0.018767f, -0.036312f, -0.035352f, -0.029050f, 0.011207f, -0.003738f, 0.016393f, -0.032030f, -0.005287f, 0.001500f, -0.012367f, -0.014987f, 0.026036f, -0.009973f, 0.005266f, -0.000392f, 0.001805f, -0.026115f, -0.009619f, -0.022331f, 0.002964f, 0.002953f, 0.005796f, 0.061753f, -0.024063f, 0.017059f, 0.025987f, -0.013189f, -0.012457f, -0.018679f, -0.003783f, 0.028849f, -0.029439f, 0.020156f, -0.001938f, -0.004900f, 0.002698f, 0.002962f, 0.015806f, 0.001782f, -0.031231f, 0.023889f, -0.019458f, -0.044805f, -0.036281f, -0.018165f, 0.060650f, 0.051476f, -0.027986f, -0.008045f, -0.038417f, -0.032045f, -0.012666f, 0.037483f, 0.000966f, 0.025857f, 0.013501f, -0.017617f, 0.019694f, -0.013410f, -0.039986f, -0.003376f, -0.024250f, -0.004930f, -0.013000f, 0.078924f, 0.000712f, -0.065309f, 0.051275f, -0.020683f, -0.014574f, 0.051829f, 0.052653f, 0.000188f, -0.023072f, 0.010289f, 0.012869f, -0.070919f, -0.030531f, + 0.001898f, -0.010440f, 0.037155f, 0.015710f, -0.053795f, -0.008065f, -0.004302f, 0.024384f, 0.015538f, 0.010609f, 0.009666f, -0.011218f, 0.001938f, 0.004269f, 0.022537f, -0.002800f, 0.003117f, 0.004411f, 0.003867f, 0.013229f, 0.006297f, 0.000294f, -0.015357f, 0.019457f, -0.001742f, -0.000097f, 0.000926f, 0.000020f, -0.008288f, -0.012965f, -0.008861f, 0.001760f, -0.003185f, 0.005661f, -0.000861f, -0.005747f, 0.006210f, 0.014357f, -0.019084f, -0.006215f, -0.005808f, -0.002742f, 0.005468f, -0.000372f, -0.005439f, -0.010772f, -0.004016f, -0.002784f, 0.009730f, -0.031409f, -0.019529f, 0.009548f, 0.007455f, 0.017087f, 0.053771f, 0.009279f, -0.001363f, 0.012590f, 0.002823f, -0.022346f, -0.013719f, 0.012057f, 0.002784f, 0.043910f, 0.010385f, -0.002721f, 0.015901f, 0.023583f, 0.023909f, 0.025730f, 0.001411f, -0.018020f, -0.004983f, -0.041185f, -0.005577f, -0.046505f, 0.025974f, -0.028294f, -0.010937f, 0.000158f, 0.037695f, -0.021817f, 0.020987f, -0.015315f, 0.012728f, -0.019212f, 0.024069f, 0.036360f, 0.002503f, -0.007658f, -0.019526f, -0.028166f, 0.015803f, 0.018097f, 0.046106f, -0.006217f, + 0.002339f, 0.020333f, 0.073831f, -0.017194f, 0.011090f, -0.011916f, -0.041079f, 0.028892f, -0.005859f, 0.020555f, -0.002523f, 0.005121f, -0.024739f, 0.068363f, -0.102454f, 0.075475f, -0.117559f, 0.050731f, -0.060633f, 0.018889f, -0.047539f, 0.017170f, 0.031555f, -0.007494f, 0.023452f, -0.012011f, 0.085789f, -0.051980f, 0.056967f, -0.088202f, 0.044541f, -0.034565f, 0.042852f, -0.028742f, -0.031143f, -0.015209f, -0.007877f, 0.021667f, -0.005919f, -0.003782f, 0.002166f, 0.001356f, -0.011011f, 0.015421f, -0.016614f, 0.016296f, -0.012006f, 0.005009f, -0.019108f, -0.010675f, -0.014117f, 0.002554f, -0.012980f, 0.016091f, 0.017147f, -0.016226f, -0.000258f, 0.006518f, 0.015737f, -0.002360f, 0.005644f, 0.012909f, -0.012083f, 0.021335f, -0.005931f, 0.028212f, -0.016807f, 0.033792f, -0.024096f, 0.008701f, -0.001981f, 0.018851f, 0.015638f, -0.002987f, 0.009156f, -0.026027f, 0.029676f, -0.020386f, 0.007212f, -0.020715f, 0.015001f, -0.027635f, 0.009496f, -0.002327f, -0.010131f, 0.010448f, 0.026151f, 0.020887f, 0.082811f, -0.057588f, 0.024164f, 0.015124f, -0.049570f, -0.001394f, -0.009666f, -0.014130f, + -0.025422f, -0.001383f, 0.003031f, 0.032914f, 0.012380f, 0.017219f, 0.024849f, 0.020022f, 0.000854f, 0.027443f, -0.031554f, -0.004574f, 0.038260f, 0.004239f, -0.052246f, -0.012048f, -0.068402f, -0.012820f, 0.012062f, -0.012709f, -0.015858f, -0.002995f, 0.061356f, 0.015469f, 0.004807f, 0.007468f, 0.015447f, -0.004632f, -0.035014f, -0.010770f, -0.003782f, 0.006514f, -0.007983f, -0.016424f, 0.044466f, 0.023863f, -0.009049f, -0.002120f, -0.009411f, -0.040112f, -0.032798f, -0.024060f, -0.019870f, 0.044749f, 0.010903f, 0.016511f, -0.026853f, -0.026205f, 0.008548f, 0.018210f, 0.016926f, -0.007589f, -0.005181f, -0.030427f, -0.019976f, 0.026552f, 0.001324f, -0.073636f, 0.026023f, 0.040161f, 0.012980f, -0.032097f, -0.019614f, -0.015997f, 0.005401f, -0.023113f, 0.011531f, -0.054204f, -0.072314f, 0.029969f, 0.026251f, -0.014492f, -0.026511f, 0.020310f, -0.011804f, 0.005249f, 0.006411f, -0.010685f, 0.011712f, -0.006625f, -0.006697f, -0.003939f, 0.017529f, -0.012404f, -0.003545f, -0.013569f, -0.000080f, 0.001124f, 0.011754f, 0.012048f, -0.001248f, 0.007095f, -0.008454f, 0.014081f, -0.009717f, 0.011501f, + -0.026546f, -0.012143f, -0.003576f, 0.007686f, -0.008615f, -0.017395f, -0.013240f, 0.006343f, 0.013823f, -0.000524f, 0.017832f, 0.004978f, 0.007104f, 0.001084f, 0.011636f, -0.006542f, 0.011122f, -0.002670f, -0.021875f, -0.016893f, -0.006394f, 0.009994f, -0.012272f, 0.007264f, -0.068285f, 0.059770f, 0.072739f, -0.006846f, 0.052884f, 0.002117f, 0.008075f, 0.023004f, -0.046729f, 0.016954f, 0.034569f, 0.034082f, 0.014305f, 0.010532f, -0.033793f, 0.024677f, 0.014527f, -0.020533f, 0.010899f, -0.004112f, 0.040280f, 0.011073f, 0.010290f, 0.023778f, -0.009572f, -0.027479f, 0.007912f, 0.051295f, -0.018411f, -0.010027f, 0.046341f, -0.017072f, -0.020767f, -0.016928f, 0.015943f, 0.059597f, 0.082910f, -0.005196f, -0.053823f, 0.081316f, 0.027993f, -0.053612f, 0.060650f, 0.023203f, -0.015070f, -0.015591f, -0.022776f, -0.037784f, -0.002166f, 0.019804f, -0.032409f, -0.021231f, -0.068438f, -0.009314f, 0.039813f, -0.082904f, -0.044911f, 0.013075f, 0.013351f, 0.016340f, 0.050273f, 0.044489f, -0.073675f, 0.000599f, 0.002815f, -0.052141f, 0.014551f, 0.024803f, -0.026756f, -0.019097f, -0.022592f, 0.015106f, + 0.057888f, 0.018116f, 0.030104f, -0.039588f, 0.020172f, -0.044824f, 0.003920f, -0.030145f, -0.122471f, 0.093667f, 0.024071f, -0.034184f, 0.063403f, -0.021875f, -0.028891f, 0.017056f, 0.012957f, 0.016313f, 0.024792f, 0.010027f, -0.024906f, -0.007910f, 0.024323f, -0.000800f, 0.009359f, 0.003922f, -0.003994f, 0.005971f, -0.010925f, 0.008090f, 0.022725f, 0.008204f, -0.013410f, -0.009921f, 0.006938f, -0.006086f, -0.012167f, 0.004637f, 0.014177f, 0.008239f, -0.042359f, -0.012811f, -0.031196f, -0.016186f, 0.018182f, -0.013909f, -0.017437f, 0.016596f, 0.010723f, -0.018285f, 0.023226f, -0.017155f, -0.007507f, 0.008342f, -0.013465f, 0.015268f, -0.006792f, -0.025131f, -0.038859f, 0.044777f, 0.148460f, -0.047399f, 0.001308f, 0.011408f, 0.067031f, 0.059428f, -0.019451f, -0.025803f, -0.037439f, 0.001594f, 0.028393f, -0.000946f, -0.019141f, -0.019687f, 0.026794f, -0.014621f, -0.036015f, -0.032197f, -0.006504f, 0.054553f, 0.038264f, -0.043384f, 0.002915f, 0.000789f, -0.018916f, 0.021505f, 0.007957f, -0.015483f, -0.005111f, -0.012178f, -0.005818f, 0.069639f, -0.025934f, -0.046252f, -0.032374f, -0.026289f, + 0.061587f, 0.001702f, -0.014282f, 0.056710f, 0.038983f, 0.015494f, 0.028858f, 0.055764f, -0.033920f, 0.008595f, 0.054255f, 0.031720f, 0.041447f, -0.047092f, -0.013280f, -0.001766f, 0.019849f, 0.018699f, -0.044579f, 0.004246f, -0.058567f, -0.088082f, -0.004654f, -0.023310f, 0.040888f, 0.045473f, -0.011943f, -0.003622f, 0.009221f, -0.032036f, -0.085325f, 0.057402f, -0.041358f, 0.008863f, -0.015938f, -0.028864f, -0.016760f, -0.033470f, -0.067649f, 0.039921f, 0.035518f, 0.043107f, 0.008295f, -0.053765f, -0.094449f, -0.028058f, -0.026157f, -0.011576f, 0.029807f, -0.019342f, -0.004766f, 0.005673f, 0.003959f, -0.015051f, -0.006920f, -0.012098f, 0.001406f, -0.005410f, 0.009922f, -0.005961f, -0.007394f, 0.010915f, 0.014178f, 0.011246f, -0.022922f, 0.007439f, 0.001218f, -0.002109f, 0.000186f, -0.050240f, 0.002337f, 0.006893f, 0.007285f, -0.033124f, 0.021421f, -0.004799f, -0.027654f, -0.022589f, 0.013253f, 0.017647f, -0.003445f, 0.010452f, -0.017124f, -0.012013f, -0.011729f, 0.001273f, 0.020349f, 0.005121f, 0.019416f, -0.000563f, 0.008887f, -0.029256f, -0.004740f, 0.007041f, 0.003872f, -0.023207f, + -0.007033f, -0.072904f, -0.041792f, -0.033990f, -0.085829f, 0.099101f, -0.002272f, 0.052195f, -0.011911f, 0.002594f, -0.059821f, -0.032720f, -0.030866f, 0.006905f, 0.046873f, -0.002159f, -0.048805f, -0.036512f, -0.069767f, -0.077680f, 0.066615f, 0.024563f, -0.060457f, -0.018780f, 0.029829f, 0.055458f, 0.007772f, -0.068862f, -0.041860f, 0.013552f, 0.019260f, 0.017072f, 0.040191f, -0.042825f, -0.040621f, -0.006261f, -0.014416f, 0.005648f, 0.011970f, -0.082752f, -0.015247f, -0.057726f, -0.036954f, -0.076982f, -0.029172f, 0.105391f, 0.018180f, 0.003303f, 0.025860f, 0.026109f, 0.008261f, 0.078308f, 0.062023f, -0.020538f, 0.021073f, 0.105817f, -0.027727f, -0.024762f, -0.025279f, -0.078894f, -0.003038f, -0.043216f, -0.097948f, -0.102772f, -0.053855f, -0.053076f, 0.024002f, -0.039762f, 0.003477f, 0.020789f, -0.069795f, -0.025627f, 0.000445f, -0.000350f, 0.018021f, 0.045592f, 0.030353f, 0.054986f, 0.074540f, 0.054023f, -0.006658f, -0.039419f, -0.057101f, -0.004912f, 0.023634f, 0.006911f, -0.008034f, -0.000763f, 0.016191f, 0.013027f, 0.035109f, -0.004002f, 0.005598f, 0.000573f, -0.011699f, 0.011427f, + 0.001815f, -0.005707f, 0.030002f, 0.012925f, 0.006811f, -0.028177f, 0.018923f, -0.010151f, 0.014271f, -0.026746f, -0.074053f, -0.003536f, 0.029240f, -0.005593f, -0.039308f, -0.025298f, -0.028768f, -0.021767f, 0.009381f, 0.012839f, 0.014684f, 0.003932f, -0.002632f, 0.010941f, 0.028979f, 0.048293f, 0.045693f, 0.056730f, 0.048643f, -0.004750f, 0.032707f, 0.073998f, 0.005258f, -0.032640f, -0.046422f, -0.046858f, -0.063634f, -0.051799f, -0.024745f, -0.027884f, -0.003893f, 0.065606f, -0.042890f, 0.012960f, -0.049675f, -0.016843f, -0.054173f, 0.006958f, 0.065713f, -0.001511f, 0.040615f, -0.081242f, 0.071420f, 0.023935f, -0.014635f, 0.056610f, 0.007938f, 0.025754f, -0.022641f, -0.026724f, -0.000508f, 0.017346f, 0.013294f, -0.056727f, 0.052080f, -0.062864f, 0.007703f, 0.017596f, -0.021341f, 0.037057f, -0.039074f, -0.022196f, -0.004314f, -0.013941f, -0.019780f, -0.004364f, 0.008386f, -0.029027f, -0.034215f, -0.011084f, -0.005987f, -0.008398f, 0.020792f, 0.011301f, 0.008473f, -0.041505f, 0.011047f, 0.050504f, 0.066946f, -0.049382f, -0.024881f, 0.056926f, 0.077849f, -0.047196f, -0.029190f, 0.032833f, + 0.013780f, -0.037482f, 0.031124f, -0.088049f, -0.017340f, 0.035888f, 0.070391f, 0.009166f, -0.043665f, -0.039479f, 0.010685f, 0.084371f, 0.007355f, 0.012656f, 0.002532f, 0.028005f, -0.005404f, 0.062708f, -0.000686f, -0.069354f, 0.043777f, -0.045247f, -0.013878f, 0.019212f, -0.026485f, 0.006350f, -0.056468f, -0.021026f, 0.052362f, 0.024138f, -0.023459f, -0.033516f, -0.018349f, 0.004408f, -0.027223f, -0.008187f, -0.006002f, -0.016653f, -0.010229f, -0.008019f, -0.035345f, 0.022428f, -0.013210f, -0.015642f, -0.051196f, -0.012864f, 0.037661f, -0.026006f, -0.014382f, -0.013526f, -0.029238f, 0.056368f, 0.023117f, 0.002238f, -0.001849f, -0.031199f, -0.046865f, 0.003092f, 0.041923f, 0.034509f, 0.011547f, -0.035141f, -0.020597f, -0.015630f, 0.020453f, 0.003865f, -0.031346f, -0.007635f, 0.002037f, 0.012499f, -0.027881f, -0.018620f, -0.016446f, 0.043868f, 0.022422f, 0.002988f, -0.027081f, -0.023306f, 0.024515f, 0.052731f, -0.000527f, -0.022443f, -0.032346f, -0.010794f, 0.014620f, 0.001334f, -0.007454f, 0.002058f, -0.006453f, -0.004779f, 0.004979f, -0.105863f, -0.029621f, 0.018084f, -0.036006f, 0.104892f, + 0.076415f, 0.050450f, 0.026443f, 0.070815f, 0.049629f, 0.016772f, 0.033706f, -0.082966f, -0.111978f, -0.015378f, 0.000754f, -0.028591f, 0.014623f, -0.005187f, -0.029490f, -0.036476f, -0.030193f, 0.058022f, 0.050041f, -0.040172f, -0.005509f, -0.005470f, -0.010457f, -0.014185f, -0.021346f, -0.030370f, -0.043072f, -0.008009f, 0.075156f, -0.023981f, -0.042258f, -0.019866f, 0.070521f, -0.032928f, -0.032885f, 0.109811f, 0.038692f, 0.018633f, -0.026986f, -0.060052f, -0.042373f, -0.061946f, 0.016494f, 0.051465f, 0.138163f, -0.121468f, -0.051902f, 0.071590f, 0.098554f, 0.017459f, -0.006104f, 0.127118f, 0.060566f, -0.039830f, 0.040208f, -0.014399f, 0.000271f, -0.087671f, -0.044529f, -0.030496f, -0.144270f, -0.060889f, -0.023403f, 0.077802f, -0.042111f, -0.024056f, 0.057720f, -0.003627f, -0.007817f, 0.014075f, 0.040593f, -0.039139f, 0.028668f, 0.044293f, 0.000919f, -0.008160f, -0.081451f, 0.037767f, 0.029086f, -0.093809f, -0.006867f, 0.010413f, 0.006048f, -0.007771f, -0.041791f, 0.011351f, 0.007060f, 0.011975f, -0.006634f, -0.011836f, 0.030053f, 0.006653f, -0.006294f, 0.020970f, 0.008582f, 0.055505f, + -0.007580f, 0.018365f, 0.003483f, -0.043658f, -0.038252f, 0.027085f, -0.021297f, 0.016560f, 0.020636f, 0.013044f, 0.012741f, 0.000605f, 0.036525f, -0.011419f, -0.009150f, -0.014172f, 0.010482f, 0.028701f, -0.042854f, -0.015701f, 0.020581f, 0.009809f, -0.024279f, -0.043467f, -0.011174f, 0.012251f, 0.091814f, 0.033713f, -0.007667f, 0.023831f, -0.004661f, -0.008480f, -0.033842f, 0.016256f, 0.014015f, -0.026676f, -0.013005f, -0.097121f, -0.003953f, 0.040017f, -0.009383f, -0.040492f, 0.017732f, -0.009086f, 0.043705f, 0.008747f, -0.021169f, -0.000325f, 0.046788f, -0.026622f, 0.007530f, 0.016912f, -0.014233f, -0.000402f, -0.025309f, 0.051672f, -0.003101f, 0.007698f, 0.000829f, 0.024976f, -0.011304f, -0.009716f, -0.016148f, 0.010335f, 0.019419f, -0.008502f, 0.023069f, -0.009981f, 0.014216f, -0.024229f, -0.019090f, 0.029429f, 0.037737f, -0.048746f, 0.002281f, 0.000073f, 0.004572f, 0.015374f, -0.030671f, 0.047063f, -0.042145f, 0.037881f, 0.005305f, -0.065792f, -0.003585f, 0.051365f, -0.066973f, 0.031968f, 0.000295f, 0.008666f, -0.016078f, -0.010021f, 0.013538f, -0.019418f, 0.068595f, -0.050732f, + 0.007589f, -0.013606f, -0.006152f, 0.016928f, 0.000964f, -0.008316f, -0.001572f, 0.020753f, -0.000644f, -0.023793f, 0.006711f, 0.012092f, -0.039846f, 0.031011f, 0.013998f, 0.001470f, 0.028585f, -0.010454f, -0.008840f, 0.013466f, 0.006247f, 0.008544f, 0.004861f, -0.007878f, 0.016138f, 0.006955f, 0.001197f, -0.017427f, -0.002878f, 0.008522f, 0.015468f, -0.026455f, 0.013847f, 0.016490f, -0.023385f, 0.011098f, 0.003432f, 0.003986f, 0.012342f, -0.006955f, 0.002757f, -0.004359f, -0.033921f, -0.000510f, -0.008203f, 0.014818f, -0.009556f, 0.005658f, 0.003720f, -0.001399f, 0.004523f, 0.008585f, -0.005623f, 0.000008f, 0.001526f, -0.000244f, 0.002451f, 0.010308f, -0.010519f, 0.009658f, -0.007684f, -0.048940f, -0.138185f, -0.197370f, 0.066372f, 0.175533f, 0.038758f, 0.486518f, 0.400696f, 0.270736f, 0.458173f, 0.238667f, -0.016278f, -0.057163f, -0.180899f, -0.417714f, -0.344947f, -0.335486f, -0.466528f, -0.344912f, -0.101288f, -0.074698f, -0.012211f, 0.162345f, 0.075587f, -0.020167f, 0.102982f, 0.170327f, 0.083412f, 0.079811f, 0.155017f, 0.092355f, 0.071230f, 0.140456f, 0.220550f, 0.091829f, + 0.129473f, 0.207023f, 0.035535f, 0.014056f, 0.182930f, 0.108175f, -0.070128f, 0.088214f, 0.113675f, -0.118610f, -0.035385f, 0.131097f, -0.026405f, -0.078469f, 0.169341f, 0.089769f, -0.105051f, 0.090894f, 0.120560f, -0.160769f, -0.150498f, -0.064279f, -0.388264f, -0.515209f, -0.323133f, -0.455471f, -0.607134f, -0.423065f, -0.432947f, -0.559777f, -0.442663f, -0.306948f, -0.332812f, -0.198911f, 0.019010f, 0.124269f, 0.270123f, 0.441974f, 0.550919f, 0.678408f, 0.753754f, 0.823449f, 0.873157f, 0.784075f, 0.616558f, 0.569576f, 0.365097f, 0.110387f, 0.086709f, -0.058344f, -0.280318f, -0.220164f, -0.093426f, -0.208561f, -0.214424f, -0.045259f, -0.151049f, -0.289523f, -0.174844f, -0.126786f, -0.258976f, -0.220490f, -0.077907f, -0.195946f, -0.232790f, -0.018551f, -0.011621f, -0.104862f, 0.041663f, 0.024310f, -0.168790f, -0.125114f, -0.072618f, -0.240305f, -0.331107f, -0.270749f, -0.369819f, -0.458732f, -0.340311f, -0.273308f, -0.259242f, -0.113472f, 0.053175f, 0.137997f, 0.204730f, 0.282693f, 0.319020f, 0.286144f, 0.373073f, 0.478291f, 0.495797f, 0.463034f, 0.471564f, 0.454831f, 0.369279f, 0.416968f, + 0.376471f, 0.161857f, 0.021299f, -0.092382f, -0.203603f, -0.215223f, -0.177448f, -0.209600f, -0.204905f, -0.177372f, -0.174991f, -0.186551f, -0.153207f, -0.136814f, -0.130616f, -0.123318f, -0.095005f, -0.089971f, -0.093262f, -0.073794f, -0.048225f, -0.043355f, -0.027645f, -0.002970f, 0.011458f, 0.011913f, 0.014353f, 0.005395f, 0.003308f} + }, + { + {0.007552f, 0.018077f, 0.000306f, 0.000741f, -0.008639f, -0.006916f, 0.005212f, 0.003185f, 0.000467f, 0.007373f, -0.011144f, -0.003792f, 0.018044f, 0.001219f, 0.003508f, -0.004760f, -0.006105f, 0.008476f, 0.007088f, -0.002989f, 0.006976f, 0.000283f, 0.001127f, -0.006900f, 0.002465f, -0.006284f, -0.004907f, -0.006173f, 0.002081f, 0.000234f, -0.002021f, -0.000708f, 0.002093f, 0.005354f, -0.002583f, -0.009829f, 0.000152f, -0.007011f, -0.008961f, -0.002360f, 0.004015f, -0.001390f, 0.003582f, 0.002272f, 0.003282f, -0.001424f, -0.001277f, -0.001696f, -0.001466f, 0.003008f, -0.000123f, 0.006199f, -0.000854f, 0.007679f, 0.001261f, 0.001728f, 0.007300f, 0.002596f, 0.001856f, 0.009456f, -0.003868f, 0.003120f, -0.003310f, -0.006706f, 0.006126f, -0.002231f, -0.000002f, 0.002258f, -0.001143f, -0.005570f, -0.001735f, 0.003992f, -0.002613f, -0.000151f, -0.005419f, 0.002598f, 0.000339f, -0.003611f, 0.000414f, -0.005756f, 0.000841f, -0.005521f, -0.000519f, -0.000083f, -0.000764f, 0.003182f, 0.001514f, 0.000831f, 0.001729f, -0.000607f, 0.003193f, 0.002331f, -0.000291f, 0.000714f, 0.000690f, -0.000121f, + 0.000087f, 0.001067f, -0.001380f, 0.000738f, -0.001756f, 0.001474f, 0.000129f, -0.000272f, -0.000107f, 0.001221f, 0.000282f, -0.001127f, 0.000357f, -0.000059f, -0.000685f, -0.001702f, -0.023724f, -0.012320f, -0.005544f, -0.005150f, -0.000025f, 0.000059f, 0.001761f, 0.000334f, -0.001333f, -0.009722f, -0.004412f, -0.009963f, -0.015603f, -0.013035f, 0.007353f, 0.009070f, 0.009175f, -0.003620f, -0.001091f, -0.001038f, -0.002054f, 0.003376f, 0.001408f, -0.003323f, -0.007074f, 0.005089f, 0.004343f, 0.006359f, 0.001660f, -0.002145f, -0.003876f, 0.001802f, 0.003034f, -0.000728f, 0.006459f, -0.003148f, -0.000187f, 0.006278f, -0.004813f, -0.007633f, 0.000602f, 0.010550f, 0.002419f, 0.002332f, 0.001471f, 0.000089f, 0.001346f, -0.001636f, 0.001871f, -0.008341f, 0.001353f, 0.008650f, -0.001989f, 0.000125f, 0.000851f, -0.002956f, -0.001660f, -0.001203f, -0.001415f, -0.002318f, 0.005286f, -0.004971f, 0.005188f, 0.004423f, 0.009710f, -0.000677f, 0.005455f, 0.012404f, -0.002297f, -0.010002f, -0.011216f, -0.000543f, -0.001473f, 0.000601f, -0.009521f, 0.002756f, -0.006686f, -0.004972f, 0.002278f, 0.006939f, + -0.002865f, -0.005302f, -0.006350f, -0.001243f, -0.000704f, 0.001744f, 0.000553f, 0.003986f, 0.002353f, -0.000226f, 0.002007f, 0.000576f, 0.003930f, 0.002974f, 0.001865f, 0.000851f, 0.000852f, -0.000696f, 0.002627f, 0.000121f, 0.000783f, -0.000329f, 0.000049f, -0.001993f, -0.000008f, -0.000390f, 0.016484f, 0.013006f, 0.005529f, 0.006669f, -0.004304f, 0.003020f, 0.011398f, 0.005603f, 0.012276f, -0.004764f, 0.004949f, 0.007056f, -0.000356f, 0.009042f, -0.004670f, 0.005662f, 0.001027f, -0.005746f, -0.001468f, -0.001065f, -0.000362f, -0.001612f, 0.000673f, -0.002871f, 0.000905f, -0.002094f, 0.011228f, -0.002559f, -0.000621f, -0.000005f, -0.005068f, -0.014253f, 0.008122f, -0.003363f, 0.003135f, -0.005646f, -0.005367f, -0.006042f, -0.004023f, 0.003734f, 0.010771f, 0.008522f, 0.003577f, -0.000590f, -0.002316f, 0.003441f, 0.007741f, -0.001698f, -0.002544f, 0.009612f, -0.004251f, 0.004613f, -0.004782f, -0.003728f, -0.002293f, 0.003590f, 0.003797f, -0.006719f, -0.004639f, 0.000203f, 0.007205f, 0.009354f, 0.005065f, 0.007294f, -0.001003f, 0.006834f, 0.002679f, 0.007176f, -0.004032f, 0.002887f, + 0.016377f, 0.007648f, 0.006950f, -0.001667f, -0.004607f, -0.011156f, 0.006483f, 0.002805f, -0.004609f, -0.004615f, -0.001519f, 0.003420f, -0.003393f, -0.001555f, -0.003054f, 0.000114f, 0.002344f, -0.000985f, -0.004598f, 0.001341f, 0.001586f, 0.002650f, 0.002725f, 0.000382f, 0.003859f, 0.001910f, 0.001604f, 0.001202f, -0.001264f, 0.002731f, 0.000253f, -0.000000f, -0.001323f, -0.002007f, -0.002209f, 0.000547f, 0.001586f, 0.000664f, 0.000102f, 0.000498f, -0.000133f, 0.002454f, -0.003344f, -0.000788f, 0.001012f, -0.001328f, 0.001337f, 0.005131f, 0.018936f, 0.002699f, 0.006872f, 0.013718f, 0.000260f, -0.007839f, -0.003363f, -0.002352f, 0.000541f, -0.004938f, -0.013462f, 0.005406f, 0.000454f, 0.000294f, 0.005627f, -0.008927f, -0.004126f, 0.014064f, -0.003446f, -0.005307f, -0.008331f, 0.000289f, -0.007872f, -0.001311f, -0.002627f, -0.002365f, 0.001010f, 0.011365f, -0.000366f, -0.003562f, 0.003333f, -0.009029f, 0.012117f, -0.001541f, -0.002725f, 0.015153f, -0.008728f, 0.000724f, -0.010314f, -0.004712f, 0.000878f, 0.000485f, 0.003965f, 0.004786f, -0.009203f, 0.002745f, 0.003857f, 0.003143f, + 0.000883f, 0.004350f, 0.003154f, 0.006350f, -0.005826f, -0.003107f, 0.011955f, -0.004968f, 0.004569f, 0.001146f, 0.003435f, 0.003094f, -0.001017f, -0.004045f, -0.000627f, 0.008452f, -0.005027f, -0.000552f, -0.002672f, 0.001964f, 0.007539f, -0.004229f, -0.009404f, -0.018158f, 0.001135f, -0.000741f, -0.001564f, 0.000080f, -0.006986f, -0.004886f, -0.010132f, -0.003983f, 0.005044f, -0.000161f, 0.003139f, -0.001196f, 0.006312f, 0.004382f, -0.000058f, 0.003287f, -0.000253f, -0.000382f, 0.002192f, -0.003932f, -0.002104f, -0.003189f, -0.000020f, -0.003809f, 0.002280f, -0.000127f, 0.001089f, -0.001407f, -0.001223f, -0.000149f, -0.001371f, 0.000892f, 0.001444f, -0.003525f, 0.001695f, 0.001447f, 0.000840f, -0.003360f, 0.001797f, 0.001212f, 0.003199f, 0.003378f, -0.000295f, -0.001147f, -0.001751f, 0.001695f, -0.000878f, -0.000604f, 0.000642f, -0.008067f, -0.020422f, 0.010389f, -0.006805f, -0.011434f, 0.000391f, -0.021585f, 0.004552f, 0.006769f, -0.002530f, 0.015991f, -0.006210f, -0.018973f, 0.004444f, 0.007378f, -0.006789f, -0.013386f, 0.022952f, -0.001323f, -0.001523f, 0.005995f, -0.005250f, -0.002832f, + 0.002215f, -0.011179f, 0.006483f, -0.001075f, 0.003119f, -0.002244f, 0.010655f, -0.002608f, 0.005909f, 0.005445f, -0.010814f, -0.005110f, -0.006159f, 0.011214f, -0.005668f, -0.003193f, 0.008282f, -0.002820f, -0.006417f, 0.005007f, 0.015313f, -0.007735f, 0.007389f, -0.007995f, 0.010018f, -0.005491f, 0.005212f, 0.001142f, -0.005611f, -0.015710f, 0.008707f, 0.011510f, -0.001208f, -0.003526f, 0.006412f, 0.008100f, 0.007617f, -0.010781f, -0.001380f, -0.009499f, -0.001021f, 0.003488f, -0.006842f, 0.002687f, 0.007404f, -0.007919f, -0.000304f, 0.001644f, -0.007806f, -0.005500f, 0.007063f, -0.005044f, 0.005558f, -0.003251f, -0.009986f, 0.002098f, -0.009685f, 0.002570f, -0.003739f, 0.003430f, -0.010652f, 0.009797f, -0.008056f, 0.001074f, -0.007497f, -0.000175f, -0.000566f, 0.002063f, -0.000888f, 0.000018f, -0.002415f, 0.002625f, -0.007242f, 0.002564f, -0.005949f, -0.004647f, 0.000036f, 0.004354f, 0.001945f, 0.000851f, 0.001245f, 0.000328f, 0.002470f, 0.005523f, -0.004686f, 0.004599f, -0.003058f, -0.000569f, 0.002812f, 0.002354f, -0.003347f, 0.000013f, -0.008193f, 0.010351f, -0.011403f, -0.011350f, + -0.019411f, 0.008161f, 0.020544f, 0.003104f, -0.003670f, -0.001796f, -0.003444f, 0.017858f, -0.010711f, -0.009792f, -0.002297f, -0.010793f, -0.003297f, -0.011724f, -0.005041f, -0.008235f, -0.016245f, -0.004583f, -0.003571f, -0.000590f, -0.001771f, 0.004201f, 0.009716f, 0.003447f, 0.004820f, -0.014955f, 0.001869f, -0.000259f, -0.004660f, 0.005168f, 0.002784f, -0.004371f, -0.001905f, -0.010649f, -0.011771f, -0.001736f, 0.013098f, -0.003845f, -0.006700f, -0.001452f, -0.004336f, -0.009196f, 0.000182f, -0.009601f, 0.019647f, 0.016539f, 0.004311f, -0.005063f, -0.004564f, 0.001725f, 0.002985f, 0.003383f, 0.003265f, -0.001199f, 0.007336f, -0.006931f, 0.003265f, -0.006097f, 0.000224f, -0.000073f, 0.004136f, 0.002867f, 0.009244f, -0.003990f, -0.005618f, -0.005159f, -0.021269f, 0.000665f, 0.004480f, -0.002152f, 0.007766f, 0.003343f, -0.006369f, 0.001856f, -0.011142f, -0.004156f, 0.000972f, 0.008569f, 0.003695f, 0.011725f, 0.002401f, -0.001402f, 0.000115f, 0.004348f, -0.004807f, -0.000611f, 0.001168f, -0.002010f, 0.003048f, -0.004201f, 0.002258f, -0.003199f, -0.002567f, -0.000518f, -0.003540f, -0.003514f, + -0.004342f, -0.002309f, -0.001230f, 0.003303f, 0.002797f, -0.003250f, -0.004599f, -0.001408f, -0.003504f, 0.002478f, -0.003914f, 0.001961f, -0.002252f, -0.000643f, 0.004022f, 0.000290f, 0.003375f, -0.020058f, 0.003248f, 0.020450f, 0.019274f, -0.020715f, -0.018908f, 0.004885f, -0.015047f, -0.007992f, 0.002152f, -0.001057f, -0.006159f, 0.015518f, 0.006856f, -0.021883f, -0.001800f, 0.001297f, -0.000233f, 0.013973f, 0.005166f, -0.010171f, 0.014685f, 0.005480f, 0.001899f, -0.007896f, -0.008443f, 0.006292f, -0.005433f, -0.014825f, -0.002748f, -0.001938f, -0.006671f, -0.008849f, -0.012005f, 0.012723f, 0.000843f, 0.001879f, -0.008334f, 0.000204f, 0.008973f, -0.007117f, -0.015094f, -0.015245f, 0.015945f, 0.003595f, 0.015048f, -0.002406f, 0.004271f, 0.011126f, 0.022584f, 0.007310f, -0.002903f, -0.011556f, -0.005026f, -0.005760f, 0.003377f, 0.001227f, -0.009079f, -0.003660f, 0.013102f, 0.009301f, 0.017823f, 0.008377f, -0.012439f, -0.011835f, 0.014733f, 0.007873f, -0.007850f, 0.000092f, 0.015176f, 0.001194f, -0.000929f, -0.011840f, 0.013012f, 0.009809f, -0.002405f, 0.018218f, -0.002803f, -0.005246f, + -0.019117f, -0.002510f, 0.000869f, 0.010142f, -0.013223f, -0.000808f, 0.005777f, -0.003204f, -0.009540f, -0.008865f, -0.001286f, -0.000878f, -0.001821f, -0.011083f, -0.009899f, -0.005807f, 0.003447f, -0.000202f, -0.004608f, -0.001507f, -0.000708f, 0.000988f, 0.000824f, 0.001660f, -0.001042f, 0.003749f, -0.003175f, -0.000764f, -0.000010f, -0.002193f, -0.007436f, 0.000504f, 0.004156f, -0.001315f, -0.006581f, 0.000573f, -0.001666f, 0.002326f, 0.000274f, -0.000800f, -0.000685f, 0.002149f, -0.001105f, 0.003961f, 0.001931f, -0.000104f, -0.003692f, 0.002685f, -0.002935f, 0.002713f, 0.003340f, -0.008213f, 0.003251f, -0.003073f, -0.001656f, 0.010047f, -0.016741f, 0.010065f, -0.010977f, 0.001979f, 0.008776f, -0.000116f, -0.004464f, 0.003280f, -0.011496f, 0.000457f, -0.008955f, -0.025985f, -0.007955f, 0.010988f, 0.007104f, 0.003998f, -0.006330f, 0.005293f, 0.002363f, 0.027729f, 0.004750f, -0.009409f, 0.010303f, 0.002014f, 0.002178f, 0.018426f, -0.005340f, -0.005217f, 0.006389f, -0.013034f, 0.015614f, 0.014417f, -0.000377f, 0.008142f, -0.003081f, -0.007993f, -0.001083f, -0.010038f, 0.000793f, -0.009830f, + 0.003779f, -0.000171f, 0.002781f, 0.001098f, -0.016859f, -0.003494f, -0.002218f, 0.000901f, -0.008522f, 0.003635f, 0.003680f, -0.003262f, 0.022121f, -0.009718f, -0.019761f, 0.011732f, 0.019338f, 0.004369f, 0.004961f, -0.008594f, 0.016585f, -0.005709f, 0.002747f, 0.007442f, 0.002132f, -0.007573f, 0.007887f, 0.003406f, 0.000903f, -0.000083f, -0.015247f, -0.005399f, 0.007411f, 0.013470f, -0.005280f, -0.010016f, -0.013876f, -0.004537f, 0.004609f, 0.002524f, 0.006873f, -0.017085f, 0.003169f, 0.011465f, 0.001472f, -0.000685f, 0.004362f, -0.003580f, -0.001977f, -0.000495f, -0.000964f, 0.006009f, -0.001732f, 0.001900f, -0.001829f, -0.001264f, -0.001351f, -0.004376f, -0.002490f, 0.002057f, -0.003091f, 0.004138f, -0.000691f, -0.000757f, -0.002038f, -0.002461f, -0.012982f, 0.001213f, 0.006896f, -0.000354f, 0.002387f, -0.001251f, 0.004265f, 0.001442f, -0.002564f, -0.002991f, 0.002377f, 0.056604f, -0.015511f, 0.000341f, -0.005712f, -0.003621f, -0.012614f, -0.000286f, -0.033170f, 0.017224f, -0.011926f, -0.000843f, 0.019187f, 0.009475f, -0.012746f, -0.013676f, -0.005127f, -0.011696f, 0.010542f, -0.027442f, + 0.005053f, 0.011353f, 0.015683f, 0.003075f, 0.004664f, 0.000619f, 0.002541f, -0.003643f, -0.008643f, -0.025090f, -0.003725f, 0.003157f, 0.011510f, -0.009057f, 0.011097f, 0.004311f, -0.004591f, -0.001641f, 0.008586f, -0.009113f, -0.008616f, -0.004978f, -0.006594f, -0.001015f, -0.022229f, -0.010425f, -0.005334f, -0.000665f, 0.017548f, 0.003888f, 0.016738f, 0.005730f, -0.000810f, -0.010588f, 0.001243f, 0.000993f, 0.002513f, 0.005754f, 0.023474f, 0.002696f, -0.022065f, 0.005630f, -0.008682f, -0.000671f, -0.008354f, -0.009355f, -0.004407f, 0.008949f, 0.005779f, -0.039059f, -0.014689f, -0.011666f, 0.007333f, -0.001743f, -0.008431f, -0.005439f, 0.021956f, -0.009109f, 0.016855f, -0.016006f, -0.012043f, -0.017328f, -0.009477f, -0.018416f, -0.002937f, 0.024432f, 0.005665f, -0.003032f, 0.002858f, 0.010340f, -0.000286f, 0.012763f, -0.007308f, 0.004869f, 0.007102f, 0.008630f, 0.003360f, -0.001624f, -0.017083f, -0.006392f, -0.008818f, 0.000035f, 0.005418f, 0.004664f, -0.003532f, -0.001319f, 0.007076f, 0.002885f, -0.005708f, -0.002452f, -0.004035f, -0.001836f, 0.000210f, 0.003597f, -0.003087f, -0.003022f, + 0.009016f, 0.007593f, 0.002321f, -0.001188f, 0.003192f, 0.006190f, 0.000352f, -0.005699f, -0.000667f, -0.005815f, 0.001341f, -0.005234f, 0.002904f, -0.008737f, -0.009501f, 0.007094f, -0.017657f, 0.001039f, -0.041277f, 0.010001f, -0.013479f, 0.003984f, -0.014011f, -0.030543f, -0.004638f, -0.007146f, 0.021703f, 0.009127f, 0.007857f, -0.000777f, 0.028788f, -0.021631f, 0.005343f, 0.008115f, 0.022262f, -0.025608f, -0.014513f, -0.005105f, 0.002189f, -0.001753f, -0.007179f, -0.002415f, 0.007750f, -0.013805f, 0.002899f, 0.008106f, -0.001489f, 0.001075f, -0.011020f, -0.012759f, -0.007785f, 0.034310f, 0.000408f, -0.008381f, 0.013457f, -0.008278f, -0.017178f, -0.014183f, -0.009262f, -0.002507f, 0.006197f, 0.001249f, 0.001296f, 0.019049f, 0.017542f, -0.003166f, 0.006325f, 0.004190f, -0.021914f, -0.015136f, -0.000840f, -0.001776f, -0.005649f, -0.015039f, 0.018582f, 0.022289f, -0.018159f, 0.012032f, 0.011430f, -0.003580f, -0.017346f, -0.028210f, -0.027213f, -0.021090f, -0.012291f, -0.024343f, 0.002350f, -0.019927f, 0.012082f, 0.010754f, 0.001912f, 0.000241f, -0.033876f, 0.002228f, 0.000773f, 0.002510f, + -0.017293f, 0.005862f, 0.019472f, 0.002608f, 0.005049f, -0.015397f, -0.009400f, -0.001881f, -0.016087f, 0.003792f, 0.010254f, -0.004781f, -0.005878f, -0.007446f, 0.006464f, 0.010309f, -0.017868f, -0.009850f, -0.000733f, 0.012043f, 0.004615f, -0.005225f, 0.004382f, -0.000611f, -0.000032f, 0.005432f, -0.003301f, 0.006996f, -0.007830f, -0.002791f, 0.006007f, 0.005112f, -0.001815f, 0.013536f, 0.001040f, -0.008436f, -0.007016f, -0.001179f, -0.005745f, -0.005321f, 0.000908f, 0.003848f, -0.002330f, -0.016825f, -0.014301f, -0.009753f, -0.011214f, -0.003426f, -0.025341f, 0.001184f, 0.027447f, -0.009653f, 0.014400f, -0.005748f, 0.027362f, 0.023333f, 0.009486f, -0.028515f, -0.007476f, 0.038201f, -0.010019f, 0.028328f, 0.004269f, -0.027082f, -0.013914f, 0.031999f, 0.000516f, -0.021465f, 0.000330f, -0.018298f, -0.002697f, 0.006513f, 0.002449f, -0.003643f, -0.032043f, -0.028284f, 0.007639f, 0.020503f, -0.018379f, -0.001585f, 0.007811f, -0.001350f, 0.002957f, 0.034043f, 0.006093f, 0.004973f, 0.002777f, 0.011264f, -0.015233f, -0.010660f, -0.007899f, -0.035848f, -0.012335f, -0.013446f, -0.009447f, 0.009476f, + 0.006167f, -0.002258f, -0.003727f, -0.014178f, -0.021649f, 0.028069f, -0.006195f, -0.024649f, -0.011698f, 0.005021f, 0.018654f, -0.014891f, -0.004806f, -0.015806f, -0.003108f, -0.018887f, -0.003774f, -0.004022f, -0.038100f, 0.003487f, -0.012919f, 0.026304f, -0.006903f, -0.021372f, -0.040397f, -0.026555f, -0.005143f, 0.003344f, 0.014029f, -0.010417f, -0.009636f, -0.021943f, 0.019992f, 0.033953f, 0.003502f, -0.004025f, 0.011471f, -0.008869f, 0.012698f, -0.009576f, -0.004703f, 0.004371f, 0.009701f, 0.007047f, -0.011926f, 0.000413f, 0.002415f, -0.000157f, -0.000902f, -0.002981f, 0.003160f, 0.012054f, -0.005098f, -0.010599f, -0.000501f, -0.002378f, 0.005489f, -0.000088f, 0.011692f, 0.000812f, 0.004263f, 0.000412f, -0.007204f, 0.001881f, -0.002892f, 0.012581f, 0.000721f, -0.008025f, -0.001525f, -0.001954f, 0.008418f, 0.000825f, -0.009219f, -0.001429f, 0.006496f, -0.003015f, 0.001593f, 0.013106f, -0.046400f, -0.023748f, -0.015943f, -0.025432f, -0.013562f, -0.010432f, -0.026305f, 0.027641f, -0.007990f, 0.041740f, -0.021067f, -0.031567f, -0.006116f, -0.021207f, 0.035974f, -0.012418f, -0.018947f, -0.008824f, + 0.009656f, 0.018239f, 0.015713f, -0.003840f, -0.004208f, -0.008286f, 0.003975f, 0.029597f, -0.000779f, 0.002782f, -0.009535f, -0.003790f, -0.015515f, -0.005122f, 0.006894f, 0.005056f, -0.012826f, 0.000567f, -0.018984f, 0.003761f, -0.005667f, -0.005735f, 0.007765f, 0.003561f, -0.008837f, -0.003598f, 0.016239f, 0.006047f, -0.013435f, -0.017745f, 0.029535f, -0.001464f, -0.047012f, 0.024401f, -0.005208f, -0.020041f, 0.009482f, -0.002969f, 0.002165f, -0.004653f, 0.016364f, 0.006247f, 0.001685f, 0.045089f, 0.044600f, -0.015823f, 0.004879f, -0.033610f, -0.007113f, -0.006538f, 0.014248f, -0.005229f, 0.002325f, 0.013665f, -0.010132f, 0.025695f, -0.010894f, 0.002728f, -0.034933f, 0.014402f, -0.009084f, -0.024573f, 0.012295f, -0.005777f, 0.049212f, 0.011594f, 0.009391f, 0.018078f, 0.002049f, -0.017304f, -0.001356f, -0.007215f, -0.004211f, 0.004796f, -0.006079f, 0.009885f, 0.006160f, -0.007661f, 0.012554f, 0.006963f, -0.008211f, -0.002307f, 0.000768f, 0.001117f, -0.003358f, 0.002524f, 0.004416f, -0.001342f, -0.003668f, 0.000696f, 0.003930f, 0.002149f, 0.002983f, -0.008081f, 0.008055f, -0.016017f, + 0.014101f, -0.009489f, -0.005422f, -0.001257f, 0.007366f, 0.010300f, 0.002834f, -0.012223f, 0.000146f, -0.005055f, -0.002859f, 0.002684f, -0.011536f, -0.021215f, 0.006213f, 0.055829f, -0.041843f, -0.013374f, -0.026452f, -0.017585f, 0.021224f, -0.024056f, 0.051306f, -0.005973f, 0.015745f, 0.002883f, 0.012543f, -0.031801f, 0.005941f, 0.008404f, -0.002251f, -0.004745f, -0.002694f, 0.009457f, -0.019462f, -0.011819f, -0.002672f, -0.005494f, -0.024081f, -0.021433f, -0.005662f, -0.009887f, 0.029309f, -0.007563f, -0.013753f, -0.009960f, 0.010137f, -0.014957f, -0.006261f, -0.025923f, 0.012251f, -0.009877f, 0.010806f, -0.009148f, 0.013715f, -0.006912f, -0.044712f, -0.022778f, 0.006696f, -0.003452f, -0.002663f, -0.013933f, -0.026601f, -0.001495f, 0.011826f, 0.007940f, -0.005995f, 0.008832f, 0.013791f, 0.042515f, -0.018156f, 0.020161f, -0.047744f, 0.003048f, 0.007080f, -0.005646f, -0.013677f, 0.009729f, 0.001850f, 0.002248f, 0.010787f, 0.033799f, 0.022961f, 0.017335f, -0.009009f, -0.010867f, 0.016755f, -0.020325f, 0.005051f, 0.017114f, -0.012066f, 0.042272f, -0.000614f, 0.013138f, -0.011491f, 0.024390f, + -0.023157f, -0.022818f, 0.000776f, 0.008573f, -0.010449f, -0.002539f, 0.026414f, 0.000260f, 0.024050f, 0.008797f, -0.003692f, -0.003786f, -0.013689f, -0.001095f, -0.000707f, 0.006789f, -0.000874f, -0.011012f, 0.001929f, 0.004962f, 0.013635f, -0.019882f, 0.003442f, -0.010090f, 0.004210f, 0.011360f, -0.003881f, -0.000309f, -0.010378f, 0.003423f, 0.003880f, -0.006727f, -0.023945f, -0.014994f, -0.009464f, 0.004648f, -0.012655f, -0.007189f, -0.008488f, -0.007605f, 0.004816f, 0.009253f, -0.000265f, 0.007677f, 0.002948f, 0.004090f, 0.001402f, -0.017314f, 0.014689f, -0.012779f, 0.022423f, 0.066077f, 0.046809f, -0.012574f, -0.029303f, -0.019856f, 0.040119f, -0.047682f, 0.002553f, -0.012088f, -0.011694f, 0.019497f, -0.034952f, 0.004660f, -0.017881f, -0.000442f, -0.024321f, -0.018763f, 0.002835f, 0.001273f, 0.000977f, -0.023486f, 0.037439f, 0.007586f, -0.016752f, 0.006790f, -0.004949f, 0.003291f, 0.055820f, 0.017639f, -0.015586f, -0.013712f, 0.002708f, 0.017323f, 0.004670f, -0.041733f, -0.010278f, -0.028848f, -0.009638f, -0.013501f, 0.014097f, -0.007774f, -0.003967f, -0.000268f, -0.001440f, -0.020454f, + -0.023765f, 0.015491f, -0.009004f, 0.004203f, -0.001119f, 0.020792f, -0.016878f, -0.012053f, 0.005285f, 0.008697f, -0.022344f, 0.024953f, -0.015631f, -0.036364f, -0.033925f, -0.012109f, -0.009741f, -0.014694f, -0.007606f, -0.051702f, 0.018254f, -0.024524f, -0.007792f, -0.020470f, 0.028669f, 0.009332f, 0.013715f, 0.000008f, -0.004407f, -0.024993f, -0.007571f, 0.033788f, -0.027813f, 0.040941f, 0.031236f, 0.011008f, -0.007377f, 0.001447f, -0.005787f, 0.005917f, -0.018091f, -0.014504f, -0.009032f, 0.002535f, -0.002484f, 0.002641f, 0.007630f, -0.013088f, -0.003278f, 0.013273f, 0.013769f, -0.005367f, 0.008554f, -0.007266f, -0.011822f, -0.005152f, -0.003730f, 0.008818f, 0.002321f, 0.003364f, -0.011699f, -0.007574f, 0.003986f, -0.004244f, 0.003702f, 0.004949f, 0.008242f, 0.016479f, 0.006469f, 0.009298f, -0.011084f, -0.006233f, -0.003847f, 0.004947f, -0.005436f, 0.002344f, -0.005042f, 0.002452f, 0.016557f, 0.008002f, 0.004424f, -0.003033f, 0.010374f, 0.003487f, -0.004461f, -0.065192f, -0.008065f, 0.043435f, -0.053257f, -0.021186f, -0.001283f, -0.016280f, 0.019320f, -0.011043f, 0.060219f, -0.006002f, + -0.013082f, -0.009910f, -0.002653f, 0.017705f, -0.011957f, -0.011544f, 0.049141f, -0.035914f, -0.004371f, 0.011534f, -0.007951f, 0.030846f, 0.017343f, -0.002033f, -0.003853f, 0.013165f, 0.017471f, 0.019132f, 0.015589f, 0.032643f, 0.010365f, 0.014120f, 0.008464f, -0.010421f, 0.054417f, 0.006988f, 0.010157f, 0.013895f, 0.008093f, 0.039428f, -0.002818f, 0.009841f, 0.013529f, 0.011502f, 0.006404f, 0.026065f, -0.015364f, -0.012233f, 0.025781f, -0.004599f, -0.026072f, -0.006548f, -0.045569f, -0.015349f, -0.008771f, 0.043256f, -0.040840f, -0.005141f, 0.001743f, -0.001265f, -0.002379f, 0.025560f, 0.069620f, -0.012026f, 0.008704f, 0.008094f, 0.010531f, 0.033357f, -0.036045f, -0.036850f, -0.033640f, 0.059435f, 0.004358f, -0.022191f, 0.054428f, -0.020650f, 0.047448f, -0.025445f, 0.018186f, 0.002124f, -0.063174f, -0.009064f, -0.015819f, 0.018201f, -0.001339f, -0.005330f, 0.000376f, 0.011480f, -0.001726f, -0.019043f, 0.010290f, 0.000389f, -0.008967f, -0.000073f, -0.016836f, 0.022701f, -0.002463f, 0.008216f, -0.010758f, -0.009588f, -0.009621f, -0.012731f, -0.001239f, 0.000464f, 0.021529f, -0.000879f, + 0.002360f, -0.008538f, 0.002380f, -0.020347f, 0.006484f, -0.019610f, -0.003671f, -0.004173f, -0.017616f, 0.009409f, -0.013951f, -0.013926f, 0.003064f, -0.019458f, 0.005991f, 0.015697f, 0.014569f, -0.007281f, -0.006889f, 0.003837f, 0.005906f, 0.013654f, 0.017319f, 0.038621f, 0.003519f, -0.038923f, -0.114456f, 0.022932f, -0.027487f, -0.044245f, 0.049590f, -0.029698f, -0.015280f, -0.043571f, 0.011321f, -0.008618f, -0.042566f, -0.013780f, -0.025269f, 0.011952f, -0.023400f, 0.001202f, 0.009145f, 0.019211f, 0.009770f, 0.032498f, 0.005138f, -0.000166f, -0.003338f, -0.027238f, -0.020933f, -0.019374f, 0.015764f, 0.024315f, 0.011309f, 0.008691f, -0.000663f, 0.009438f, 0.019049f, 0.044399f, -0.020953f, -0.011599f, 0.007811f, -0.020062f, 0.021368f, 0.004714f, -0.019362f, 0.045188f, 0.016509f, -0.037890f, 0.015041f, -0.036445f, 0.004365f, 0.007060f, 0.019273f, -0.010299f, -0.012298f, 0.057436f, 0.022326f, -0.024579f, 0.015018f, 0.030425f, -0.023485f, -0.049922f, 0.027821f, -0.003933f, -0.000517f, 0.004197f, 0.012234f, 0.077695f, -0.007158f, 0.009799f, 0.014934f, -0.000154f, 0.017905f, 0.010520f, + -0.041107f, 0.008837f, -0.021835f, -0.019053f, -0.011455f, 0.009486f, -0.066426f, -0.007996f, 0.020845f, 0.003391f, 0.033147f, -0.024199f, 0.023508f, -0.015773f, -0.006865f, -0.008837f, 0.010582f, 0.004703f, -0.008046f, 0.000164f, 0.000087f, -0.011685f, 0.009509f, -0.014777f, 0.015753f, 0.002195f, 0.011007f, 0.009380f, -0.006615f, -0.005431f, 0.002853f, -0.004046f, 0.002386f, 0.003729f, -0.006419f, -0.002263f, -0.007392f, -0.005168f, -0.004813f, -0.013237f, 0.000363f, 0.001953f, 0.007871f, -0.004205f, 0.007586f, 0.018193f, -0.009375f, 0.003054f, -0.009407f, 0.004872f, 0.005858f, -0.015157f, 0.000270f, 0.004982f, -0.014298f, -0.007077f, 0.012642f, 0.000205f, 0.002600f, 0.002861f, 0.000579f, -0.035409f, -0.040747f, 0.087396f, 0.018696f, -0.005649f, -0.010520f, 0.019711f, 0.078988f, 0.036228f, 0.009461f, -0.002290f, 0.026490f, 0.065954f, 0.016426f, 0.022737f, 0.020583f, 0.047022f, -0.030301f, 0.030455f, 0.013556f, -0.090295f, 0.026765f, -0.012773f, 0.026789f, -0.028121f, 0.021256f, 0.014095f, 0.028069f, -0.000228f, 0.011920f, 0.004392f, -0.025601f, 0.012770f, 0.025428f, -0.021321f, + 0.012793f, -0.020704f, -0.012426f, 0.064728f, 0.006641f, 0.057309f, -0.040761f, 0.017843f, -0.002063f, -0.008211f, -0.001258f, -0.004990f, 0.008932f, 0.021001f, 0.014599f, -0.001605f, 0.032776f, -0.052214f, -0.049185f, 0.035690f, -0.027984f, -0.007227f, -0.006534f, -0.033771f, 0.017041f, -0.008910f, 0.009627f, 0.005224f, 0.055499f, 0.026930f, 0.029255f, 0.010967f, 0.007863f, -0.050473f, -0.011602f, 0.024808f, -0.000462f, 0.000618f, -0.000039f, -0.016206f, -0.043890f, 0.008386f, 0.004061f, -0.032878f, 0.004645f, -0.015808f, -0.012989f, 0.013777f, 0.009284f, 0.049776f, -0.007144f, 0.012642f, 0.011889f, -0.009610f, -0.012877f, -0.001424f, -0.012243f, -0.004741f, 0.029318f, 0.012230f, 0.005287f, 0.001435f, -0.000570f, 0.000668f, -0.000401f, -0.001783f, -0.019948f, -0.006126f, 0.012133f, -0.003523f, 0.001190f, -0.007430f, -0.010096f, -0.004151f, 0.003194f, 0.023758f, -0.015908f, -0.015392f, 0.013962f, 0.006812f, -0.017868f, 0.012520f, 0.007540f, -0.012700f, 0.015858f, 0.001255f, -0.009585f, -0.004509f, -0.006660f, -0.003063f, -0.003112f, 0.007830f, 0.003926f, 0.003877f, 0.008995f, 0.013086f, + 0.009713f, -0.002635f, 0.022689f, -0.079222f, 0.067586f, -0.028487f, 0.013354f, 0.043732f, -0.063330f, -0.001654f, -0.005089f, 0.015436f, 0.024129f, 0.027524f, 0.047810f, 0.008017f, -0.030117f, 0.016837f, 0.050897f, -0.071715f, -0.041776f, 0.048170f, 0.002899f, -0.000371f, 0.002706f, 0.004126f, -0.000866f, -0.001239f, 0.025056f, 0.015103f, -0.034010f, 0.002187f, -0.009255f, 0.059903f, 0.036666f, -0.012250f, 0.004061f, 0.007198f, 0.007891f, -0.000402f, 0.022212f, 0.002177f, 0.017168f, 0.061136f, 0.008882f, 0.006431f, -0.008806f, 0.015689f, -0.057711f, -0.025196f, -0.024006f, -0.002618f, 0.006588f, -0.051330f, 0.020572f, -0.045562f, 0.015740f, 0.047189f, -0.010028f, -0.042532f, -0.022525f, 0.017558f, -0.008079f, -0.086851f, 0.023949f, -0.060627f, -0.013037f, -0.007565f, 0.002142f, -0.024326f, 0.006288f, 0.030565f, -0.025031f, -0.057615f, -0.086458f, 0.067603f, 0.020635f, -0.010621f, 0.019346f, -0.020482f, 0.020670f, 0.037487f, -0.038953f, 0.067206f, 0.009274f, -0.007164f, 0.031229f, 0.017717f, -0.010830f, 0.017351f, 0.001271f, 0.018730f, -0.018228f, -0.009711f, 0.005059f, 0.013533f, + 0.023323f, 0.006931f, 0.021023f, -0.013921f, 0.011933f, 0.021842f, 0.019385f, -0.003252f, 0.017647f, -0.018969f, 0.007512f, 0.001789f, 0.008120f, 0.036418f, -0.024335f, 0.014474f, 0.001981f, -0.001389f, 0.028424f, 0.007760f, 0.037058f, -0.004889f, 0.018305f, 0.004842f, 0.014440f, 0.004128f, -0.007623f, 0.011086f, -0.019152f, 0.016523f, -0.007098f, 0.013680f, -0.003284f, 0.003664f, -0.001554f, 0.002747f, -0.000276f, 0.014323f, -0.003275f, -0.003574f, -0.001948f, 0.006100f, -0.000715f, -0.001606f, 0.000670f, 0.002980f, 0.002052f, 0.002473f, -0.001796f, 0.002471f, -0.002108f, 0.002335f, 0.001641f, 0.002613f, -0.004965f, 0.096578f, -0.103926f, 0.042017f, 0.052840f, -0.065110f, -0.020089f, -0.035051f, -0.019312f, 0.095892f, -0.043169f, 0.068054f, -0.031945f, -0.009158f, -0.017303f, 0.022311f, 0.008320f, -0.082912f, -0.015858f, -0.021940f, 0.035547f, 0.001875f, 0.014765f, 0.028878f, -0.040772f, -0.007461f, -0.026167f, 0.014593f, 0.033470f, 0.021108f, -0.052654f, -0.008995f, 0.010079f, 0.007150f, -0.003685f, -0.024475f, -0.010604f, -0.047010f, -0.009069f, -0.006365f, 0.043021f, -0.038329f, + 0.094447f, 0.021123f, -0.028149f, 0.042099f, 0.001073f, 0.054613f, 0.029270f, 0.051850f, 0.012266f, 0.047398f, 0.038057f, 0.046384f, 0.048252f, 0.007678f, 0.046683f, -0.059970f, -0.010781f, 0.012961f, -0.040094f, -0.006580f, 0.024628f, -0.046440f, -0.068833f, 0.027847f, 0.044112f, 0.001751f, 0.009931f, -0.047590f, -0.013205f, -0.039748f, -0.001851f, 0.046158f, 0.003524f, 0.085941f, 0.038558f, -0.021254f, 0.090085f, 0.048172f, -0.026839f, -0.009946f, -0.019229f, -0.028295f, -0.018402f, 0.022537f, -0.013045f, -0.044024f, 0.007138f, 0.031550f, 0.001023f, -0.014157f, -0.011805f, -0.008828f, -0.015056f, -0.026488f, 0.004626f, -0.005781f, -0.003649f, -0.020320f, -0.001996f, -0.006843f, 0.009059f, 0.015325f, -0.004576f, 0.003469f, -0.006033f, -0.015706f, 0.010495f, -0.003800f, -0.012612f, -0.030130f, 0.014210f, -0.041719f, -0.005946f, -0.028727f, -0.017912f, -0.023236f, -0.006202f, -0.003124f, -0.008692f, -0.016046f, -0.008251f, -0.018381f, -0.003559f, -0.001517f, -0.001464f, -0.012080f, 0.019402f, -0.014709f, 0.009184f, -0.134939f, 0.123038f, -0.027912f, -0.040786f, -0.035959f, 0.085288f, -0.064715f, + -0.010259f, -0.018586f, -0.000565f, 0.045644f, -0.050684f, -0.004671f, 0.020391f, -0.015364f, -0.006520f, 0.001158f, -0.028567f, 0.040804f, 0.002685f, -0.066804f, -0.016463f, -0.016258f, 0.004501f, -0.073214f, -0.000238f, 0.008601f, -0.014131f, 0.000514f, 0.020371f, 0.045006f, -0.018289f, -0.011517f, 0.010039f, -0.030334f, -0.093690f, 0.008024f, 0.075097f, -0.038229f, -0.057509f, 0.003859f, 0.060669f, -0.028250f, -0.017574f, -0.078168f, -0.012267f, 0.001468f, 0.056047f, 0.025690f, 0.007484f, -0.058979f, -0.033285f, 0.046208f, -0.055205f, 0.019511f, 0.092295f, 0.051901f, 0.071649f, -0.034504f, 0.041907f, 0.026385f, -0.079567f, -0.029445f, -0.042598f, -0.010606f, 0.047319f, -0.002264f, 0.051145f, 0.041261f, -0.079070f, 0.088418f, -0.053562f, -0.000257f, 0.004782f, -0.040663f, 0.087613f, -0.005939f, -0.020068f, 0.070137f, -0.056841f, -0.009888f, -0.081197f, -0.027792f, 0.037404f, -0.011634f, 0.033858f, 0.036118f, -0.008227f, -0.014312f, 0.006350f, -0.020008f, -0.022889f, -0.006533f, -0.016809f, -0.010274f, -0.013587f, 0.005779f, -0.016940f, 0.003308f, -0.021416f, -0.021333f, -0.018732f, 0.015789f, + -0.010991f, -0.001952f, 0.011167f, 0.002622f, -0.003744f, -0.023291f, -0.036115f, -0.023441f, -0.047131f, 0.034701f, 0.014547f, 0.030031f, 0.010949f, -0.025719f, -0.026007f, -0.013718f, -0.003544f, 0.038141f, -0.007871f, -0.000264f, 0.005202f, -0.006161f, -0.006169f, -0.003298f, -0.014254f, 0.026559f, -0.016671f, 0.034079f, -0.000176f, 0.080417f, 0.057072f, 0.008411f, -0.015387f, -0.041778f, 0.024474f, -0.003282f, -0.003727f, -0.002654f, -0.001371f, 0.000177f, -0.015963f, 0.020250f, -0.000384f, -0.071764f, 0.018039f, 0.006432f, -0.024792f, 0.000948f, 0.031039f, -0.010456f, 0.002113f, -0.051894f, 0.037826f, -0.018466f, -0.005558f, -0.005233f, 0.021552f, -0.028124f, -0.000999f, 0.006396f, 0.000897f, 0.005943f, -0.013297f, 0.038434f, -0.020098f, 0.067750f, -0.041640f, -0.044448f, 0.041939f, -0.046966f, 0.002524f, 0.035014f, -0.032369f, -0.014475f, 0.018728f, 0.021800f, 0.028937f, -0.103351f, 0.032982f, -0.000983f, -0.023567f, 0.065536f, -0.032812f, 0.004021f, 0.000418f, -0.055653f, 0.071411f, -0.003403f, -0.003027f, -0.037499f, -0.006677f, 0.058830f, -0.013629f, -0.002216f, 0.002431f, 0.016961f, + 0.009874f, -0.072654f, 0.035920f, 0.064739f, -0.033912f, 0.025938f, -0.050576f, 0.084872f, 0.003919f, -0.079214f, 0.001171f, 0.044187f, -0.004363f, -0.049210f, -0.010975f, 0.115636f, -0.017908f, -0.047632f, 0.008110f, 0.051013f, -0.013095f, -0.015945f, -0.005904f, -0.002263f, 0.003096f, 0.002302f, -0.012863f, 0.033676f, -0.005359f, -0.007912f, 0.001986f, 0.011503f, 0.028316f, -0.008424f, -0.013684f, 0.015546f, 0.003604f, -0.026097f, -0.009439f, 0.014008f, 0.003303f, -0.010902f, -0.005766f, 0.022499f, -0.020358f, -0.004115f, 0.003601f, 0.003239f, -0.019220f, -0.007799f, 0.025098f, -0.001352f, -0.017895f, -0.007615f, 0.018218f, -0.005324f, -0.013413f, -0.011465f, 0.015933f, -0.045099f, -0.149482f, -0.226614f, 0.015290f, 0.195996f, 0.003087f, 0.512756f, 0.464781f, 0.278253f, 0.536568f, 0.352054f, -0.058136f, 0.020366f, -0.068809f, -0.422378f, -0.239828f, -0.185862f, -0.412530f, -0.339270f, -0.100055f, -0.199164f, -0.228699f, -0.018637f, 0.013650f, -0.096749f, 0.021251f, 0.087534f, -0.111747f, -0.095009f, 0.149845f, 0.030654f, -0.036262f, 0.104562f, 0.140353f, -0.000177f, 0.143965f, 0.243653f, + 0.087363f, 0.066832f, 0.248454f, 0.167915f, 0.020343f, 0.182381f, 0.269142f, 0.118222f, 0.137646f, 0.306668f, 0.116510f, 0.041853f, 0.292951f, 0.288288f, 0.089155f, 0.347226f, 0.493838f, 0.184067f, 0.202761f, 0.344318f, 0.105095f, -0.111484f, 0.019802f, -0.114514f, -0.414853f, -0.395754f, -0.422600f, -0.678989f, -0.733859f, -0.784840f, -0.928142f, -0.971019f, -0.948387f, -0.923100f, -0.812624f, -0.729338f, -0.596309f, -0.394042f, -0.281196f, -0.097143f, 0.268073f, 0.434737f, 0.429483f, 0.795226f, 0.848073f, 0.660042f, 0.804393f, 0.842573f, 0.452384f, 0.471889f, 0.578726f, 0.280891f, 0.227249f, 0.375517f, 0.272549f, 0.127946f, 0.177408f, 0.237393f, 0.101047f, 0.082355f, 0.238594f, 0.125991f, -0.021624f, 0.130593f, 0.102106f, -0.074591f, 0.010399f, 0.093961f, -0.062012f, -0.027208f, 0.176419f, 0.069614f, 0.006696f, 0.169567f, 0.111547f, -0.016779f, 0.009220f, -0.074436f, -0.249732f, -0.340026f, -0.375796f, -0.493061f, -0.527310f, -0.526973f, -0.570600f, -0.576145f, -0.603146f, -0.605173f, -0.553032f, -0.549495f, -0.461063f, -0.356306f, -0.282023f, -0.118233f, 0.102660f, 0.220242f, + 0.367838f, 0.459937f, 0.487368f, 0.464364f, 0.423833f, 0.359710f, 0.292163f, 0.254092f, 0.222374f, 0.181837f, 0.163934f, 0.158788f, 0.144731f, 0.135148f, 0.141296f, 0.131086f, 0.109369f, 0.092388f, 0.071787f, 0.039073f, 0.014936f, -0.023538f, -0.052515f, -0.052787f, -0.033977f, -0.016373f, -0.003910f}, + {0.005473f, 0.017776f, 0.003983f, 0.002579f, -0.004035f, -0.001472f, -0.008775f, -0.000378f, -0.002241f, 0.006581f, 0.005838f, -0.005886f, -0.004232f, -0.003557f, -0.003370f, -0.004192f, 0.000460f, 0.005237f, -0.004162f, -0.004476f, -0.014653f, -0.010791f, -0.007927f, -0.000372f, 0.000789f, 0.010745f, -0.005921f, 0.005325f, 0.003295f, 0.002737f, 0.000646f, -0.008028f, 0.002058f, -0.017115f, 0.002088f, 0.000528f, 0.000808f, -0.001175f, -0.010554f, -0.004812f, -0.009098f, 0.000558f, 0.000586f, -0.005503f, -0.014128f, 0.009712f, -0.000682f, -0.008270f, -0.000039f, 0.005511f, 0.001200f, -0.002853f, 0.002008f, -0.004710f, -0.002031f, -0.004445f, 0.003422f, -0.004731f, 0.006661f, 0.005386f, -0.001069f, -0.009414f, 0.000492f, 0.001299f, -0.000837f, -0.003451f, 0.002384f, 0.001673f, -0.002147f, 0.005086f, 0.005541f, 0.003823f, 0.000366f, 0.000024f, 0.001772f, -0.005113f, 0.000709f, 0.007869f, 0.000920f, 0.001504f, 0.001457f, 0.005815f, 0.002235f, 0.001828f, 0.005219f, -0.001289f, 0.004109f, -0.001607f, 0.002682f, 0.001883f, -0.000716f, 0.001114f, 0.001515f, -0.000464f, 0.001917f, 0.002938f, + 0.000702f, 0.000063f, 0.002083f, 0.002769f, 0.002212f, -0.000333f, 0.000841f, 0.000908f, 0.001081f, 0.000318f, 0.000175f, -0.000214f, -0.000691f, -0.002188f, 0.001426f, 0.000160f, -0.018896f, -0.021209f, -0.001506f, -0.008383f, 0.006478f, -0.010390f, 0.002611f, 0.004811f, -0.007086f, 0.005799f, 0.021224f, 0.001198f, -0.001953f, 0.011641f, 0.001577f, 0.011689f, 0.000181f, 0.005341f, -0.008353f, -0.011061f, -0.000599f, 0.004212f, -0.007698f, -0.002467f, -0.000781f, -0.002160f, 0.002108f, -0.002250f, -0.004066f, 0.003860f, -0.001917f, -0.001599f, 0.008338f, 0.011906f, -0.003708f, -0.006377f, 0.002367f, 0.009533f, 0.003612f, 0.012214f, 0.000510f, -0.001696f, -0.000314f, 0.010903f, 0.000699f, -0.007765f, -0.004277f, 0.008566f, 0.006197f, 0.006670f, 0.001808f, -0.004216f, -0.008795f, 0.001765f, 0.004138f, 0.005164f, -0.001896f, -0.004579f, 0.009506f, 0.006417f, -0.001579f, -0.005288f, 0.000317f, -0.003669f, 0.009908f, 0.003076f, 0.001816f, 0.003205f, 0.001106f, 0.002099f, 0.006087f, 0.001122f, 0.006115f, -0.001138f, 0.009748f, 0.001244f, -0.009649f, -0.003763f, -0.003363f, 0.004848f, + 0.005956f, -0.000901f, 0.001590f, -0.006690f, -0.002457f, -0.006226f, -0.001913f, -0.004036f, -0.003496f, -0.001415f, 0.002045f, 0.000156f, 0.000054f, 0.000332f, 0.002696f, 0.000496f, 0.000612f, -0.000268f, -0.002897f, -0.000750f, 0.000150f, -0.000214f, 0.001168f, 0.000515f, 0.000499f, -0.001030f, 0.011136f, 0.007810f, 0.011726f, 0.012209f, -0.002927f, 0.006119f, -0.002617f, -0.006914f, -0.000645f, 0.018085f, 0.007915f, 0.004043f, 0.006433f, -0.007531f, 0.012889f, 0.005536f, 0.008636f, -0.002538f, -0.014309f, 0.006025f, -0.022326f, 0.004542f, -0.005703f, 0.004501f, 0.003518f, -0.000407f, -0.007686f, 0.001868f, 0.005014f, -0.002973f, 0.004702f, 0.011335f, -0.000813f, -0.009369f, -0.012792f, 0.002014f, 0.005717f, -0.011758f, 0.006547f, -0.011049f, -0.007221f, 0.008052f, -0.004670f, -0.009337f, -0.004561f, -0.006582f, 0.010334f, 0.014208f, 0.008036f, -0.005087f, 0.000061f, 0.007597f, 0.004527f, -0.000626f, -0.005801f, -0.002738f, -0.005091f, 0.005419f, 0.017550f, -0.000124f, -0.009520f, -0.007501f, 0.004071f, 0.001444f, -0.003568f, -0.010377f, -0.000193f, -0.008887f, -0.003497f, 0.001415f, + -0.001526f, 0.007077f, 0.001319f, 0.008883f, 0.010322f, -0.009043f, -0.003334f, 0.000519f, -0.007068f, -0.008471f, -0.001357f, 0.000053f, -0.005192f, 0.004986f, -0.004718f, -0.000577f, 0.003928f, 0.000801f, 0.000282f, 0.003892f, -0.004772f, -0.001640f, 0.001130f, 0.001804f, -0.002161f, 0.001557f, 0.000847f, 0.001758f, -0.000266f, -0.000030f, 0.001790f, -0.002430f, 0.003121f, -0.002434f, 0.001528f, 0.000485f, -0.000693f, -0.000186f, 0.001389f, -0.000998f, -0.001625f, -0.002751f, 0.001724f, -0.002019f, 0.000758f, 0.002635f, -0.000362f, -0.001677f, 0.024915f, -0.006694f, 0.002429f, 0.003557f, -0.016434f, -0.014003f, 0.000365f, 0.016284f, 0.012424f, 0.019684f, 0.006493f, -0.005556f, -0.008470f, 0.001451f, -0.004862f, 0.003880f, 0.001881f, 0.006651f, 0.012228f, 0.003895f, 0.009016f, -0.000254f, 0.005346f, -0.005426f, -0.011390f, -0.005970f, -0.008718f, 0.000118f, -0.002434f, 0.002658f, -0.013876f, -0.006928f, -0.001857f, 0.005134f, -0.006859f, 0.014378f, -0.016202f, 0.003476f, -0.010203f, -0.008276f, 0.004711f, 0.004128f, 0.013872f, -0.001541f, 0.003506f, -0.003961f, 0.009716f, 0.010268f, + 0.002855f, -0.002214f, -0.010440f, -0.001449f, 0.003603f, -0.008005f, 0.008023f, -0.008812f, 0.003780f, 0.014566f, 0.012209f, 0.000179f, -0.004705f, 0.002281f, 0.014563f, -0.001821f, 0.003580f, 0.002262f, 0.011900f, 0.000117f, -0.003178f, -0.007392f, 0.005189f, -0.011139f, 0.004053f, 0.023165f, 0.005694f, 0.010907f, 0.001080f, -0.015329f, 0.005540f, 0.002845f, -0.006050f, 0.006252f, -0.001944f, -0.001671f, -0.007647f, 0.003193f, 0.007519f, 0.003356f, 0.001444f, -0.003496f, -0.007527f, 0.001736f, -0.001501f, -0.001176f, 0.000482f, -0.000385f, -0.001426f, 0.002421f, -0.002569f, -0.002338f, -0.002214f, 0.003408f, 0.001362f, 0.002681f, -0.001518f, 0.002472f, 0.000135f, -0.002447f, 0.002617f, 0.001425f, -0.002173f, -0.004148f, -0.001516f, 0.003404f, 0.000208f, -0.000903f, 0.001709f, 0.001543f, 0.003700f, -0.000180f, -0.001457f, -0.009084f, -0.015538f, 0.007838f, -0.011079f, -0.011422f, 0.002354f, -0.005536f, -0.036553f, 0.003542f, 0.005648f, 0.033458f, 0.010841f, 0.002477f, -0.015189f, 0.013942f, 0.006047f, -0.006074f, 0.007313f, -0.001272f, 0.012166f, -0.007344f, -0.003760f, -0.002476f, + -0.003223f, -0.005045f, -0.002177f, 0.008633f, 0.007567f, 0.013065f, 0.004684f, 0.006406f, -0.000120f, -0.008516f, -0.009188f, 0.012374f, -0.006767f, 0.002743f, -0.001101f, -0.008754f, 0.012577f, -0.002109f, -0.005426f, 0.002178f, 0.009161f, -0.006096f, 0.013901f, -0.017610f, -0.014543f, -0.017860f, 0.004340f, -0.010068f, -0.015258f, -0.003532f, 0.014295f, -0.006069f, 0.004301f, 0.008452f, -0.006125f, -0.008077f, 0.000665f, 0.001295f, 0.004792f, 0.000851f, -0.004441f, -0.000537f, 0.018414f, 0.007781f, -0.007489f, -0.023186f, -0.018492f, 0.006739f, 0.021902f, 0.018380f, -0.014350f, 0.000338f, -0.009360f, 0.004117f, 0.003644f, -0.015726f, -0.001244f, 0.003077f, 0.001837f, -0.004294f, 0.000939f, 0.000905f, 0.000478f, 0.005286f, 0.004870f, -0.003173f, -0.003828f, 0.002571f, -0.001862f, 0.001181f, -0.005478f, 0.002205f, 0.001634f, -0.008782f, -0.001971f, 0.001834f, 0.001323f, 0.000674f, 0.001713f, -0.000587f, 0.000632f, 0.000598f, 0.000864f, -0.003241f, -0.000453f, 0.001070f, -0.001024f, -0.003930f, -0.001948f, 0.000468f, 0.000597f, 0.004162f, -0.006531f, 0.010830f, -0.018207f, -0.003030f, + -0.022563f, -0.006537f, 0.003345f, 0.007953f, -0.020567f, -0.005039f, 0.014087f, -0.001616f, -0.020586f, 0.010753f, -0.006590f, -0.011690f, 0.006449f, 0.010887f, 0.002444f, 0.002348f, 0.003722f, 0.014198f, -0.006699f, -0.005778f, 0.003689f, -0.006911f, -0.003567f, 0.000271f, -0.000795f, 0.000553f, 0.011313f, 0.005886f, -0.001316f, -0.000909f, 0.006611f, 0.002854f, 0.008120f, -0.000628f, 0.009167f, 0.009781f, 0.003868f, -0.010518f, 0.001531f, -0.001411f, -0.007536f, 0.010272f, -0.005783f, 0.004344f, -0.007001f, -0.002503f, -0.025210f, 0.002376f, 0.020465f, 0.001875f, 0.021756f, -0.003949f, -0.004890f, -0.022338f, 0.026288f, 0.012449f, 0.014979f, 0.002515f, 0.012278f, -0.000079f, -0.000096f, 0.010305f, -0.005989f, 0.003766f, -0.000042f, -0.025062f, 0.005764f, -0.005837f, 0.006638f, -0.003730f, 0.005991f, 0.023369f, 0.007032f, 0.006197f, -0.000283f, -0.014108f, 0.010627f, -0.005699f, 0.002132f, 0.005382f, 0.007007f, -0.007750f, -0.002060f, -0.003182f, -0.004220f, 0.004596f, -0.002654f, -0.001992f, -0.003315f, 0.000579f, 0.000851f, 0.000386f, -0.006522f, 0.002650f, 0.001131f, -0.001431f, + 0.001882f, 0.000942f, 0.001641f, 0.001390f, 0.003099f, 0.000057f, 0.000660f, -0.000370f, -0.001499f, 0.003932f, -0.000735f, 0.005530f, 0.000855f, 0.002316f, -0.001696f, 0.003053f, 0.001016f, -0.028948f, -0.000955f, 0.021761f, -0.004770f, 0.012879f, -0.013890f, -0.009584f, -0.025007f, 0.014275f, 0.007411f, 0.016575f, 0.007749f, -0.008184f, 0.013976f, -0.003546f, 0.013372f, -0.008819f, -0.008145f, 0.001000f, -0.002990f, 0.011568f, 0.002430f, 0.009752f, 0.010923f, -0.006563f, -0.005583f, -0.003884f, 0.007194f, -0.001503f, -0.004643f, 0.001460f, -0.009836f, 0.005058f, 0.003484f, -0.005202f, 0.007279f, 0.012758f, -0.005115f, -0.005831f, -0.001541f, -0.009688f, -0.004690f, 0.014666f, 0.002000f, -0.009133f, 0.017868f, -0.019676f, 0.003114f, 0.010490f, -0.004495f, -0.006501f, -0.001441f, 0.008356f, -0.014983f, 0.007476f, -0.006078f, -0.012908f, -0.009638f, -0.007815f, 0.000294f, -0.003714f, -0.008191f, 0.003501f, 0.022194f, 0.012199f, -0.002993f, -0.007665f, -0.021427f, 0.002226f, 0.011953f, -0.007041f, -0.023681f, 0.000585f, -0.003683f, 0.001139f, 0.003033f, 0.010826f, -0.000591f, -0.005589f, + -0.002056f, -0.008716f, -0.005060f, -0.004153f, 0.006585f, -0.005435f, 0.006116f, -0.012701f, 0.001126f, -0.005864f, -0.003800f, 0.007631f, -0.003599f, -0.003693f, -0.004350f, 0.001510f, -0.008006f, -0.003292f, -0.001784f, -0.000380f, 0.001805f, -0.005799f, 0.001700f, -0.004614f, 0.002591f, 0.002939f, 0.006721f, 0.001180f, 0.002482f, 0.003431f, 0.002759f, -0.001970f, 0.001161f, 0.000351f, 0.005025f, 0.002796f, -0.000421f, 0.002898f, -0.000161f, 0.000198f, -0.001944f, 0.000243f, 0.000103f, -0.003562f, 0.001125f, -0.002478f, -0.001765f, 0.000190f, 0.002711f, -0.000798f, 0.009631f, -0.004242f, 0.002450f, 0.014236f, 0.000925f, 0.016678f, 0.018079f, 0.040343f, 0.027512f, 0.016871f, -0.004289f, -0.021371f, -0.007456f, 0.019578f, 0.008464f, -0.020643f, 0.015400f, -0.003604f, -0.010247f, -0.012634f, 0.001879f, 0.034878f, -0.023648f, 0.025221f, 0.009837f, -0.005438f, 0.008277f, -0.006823f, 0.018042f, -0.006935f, 0.009525f, 0.001894f, -0.012538f, -0.008780f, -0.012216f, 0.000463f, 0.010313f, -0.002989f, -0.006894f, 0.006646f, 0.000847f, -0.002091f, -0.023608f, 0.007136f, -0.013232f, -0.010010f, + 0.006496f, 0.015547f, -0.011501f, -0.016550f, 0.000573f, 0.014035f, 0.001144f, -0.009438f, -0.003531f, -0.005621f, 0.006388f, 0.004662f, -0.005443f, -0.008921f, -0.013409f, 0.008279f, 0.021472f, 0.013160f, 0.006773f, -0.012473f, 0.006450f, 0.013596f, -0.015278f, -0.019937f, 0.003475f, -0.016462f, -0.007885f, -0.032270f, 0.000405f, -0.022161f, -0.011555f, 0.005957f, -0.002795f, -0.002134f, 0.009800f, 0.001668f, -0.018090f, -0.012543f, 0.008142f, -0.002505f, 0.000977f, -0.005629f, 0.000523f, 0.005278f, -0.000797f, 0.003498f, 0.003512f, 0.000723f, 0.000323f, 0.002596f, 0.003029f, 0.002016f, 0.000229f, 0.000625f, -0.001833f, 0.004775f, 0.000117f, 0.004395f, -0.000794f, -0.002926f, 0.001415f, 0.004091f, -0.005141f, -0.007543f, -0.003856f, -0.001092f, -0.002372f, 0.008577f, 0.003219f, -0.002699f, 0.003803f, -0.002173f, 0.000564f, -0.006912f, -0.000631f, 0.000502f, -0.003176f, 0.044143f, 0.000988f, -0.017279f, 0.019457f, -0.021283f, 0.024632f, 0.001998f, -0.015005f, -0.025696f, -0.006229f, 0.012610f, -0.020433f, 0.018134f, -0.002897f, 0.011692f, 0.013920f, -0.011949f, -0.004977f, -0.007190f, + -0.009525f, -0.003699f, -0.008899f, 0.001487f, -0.010876f, 0.011316f, 0.007140f, 0.009499f, 0.019256f, 0.009920f, -0.002877f, 0.022979f, 0.011705f, 0.004251f, -0.012335f, -0.013439f, 0.006886f, -0.010286f, 0.002362f, 0.007268f, -0.015347f, 0.013143f, 0.034995f, 0.002677f, 0.024887f, 0.011793f, 0.012038f, 0.017782f, 0.001030f, 0.009429f, 0.009942f, -0.022647f, -0.015373f, 0.015642f, 0.001040f, 0.014764f, 0.002621f, 0.015500f, -0.002508f, 0.005584f, 0.003849f, -0.032445f, -0.002143f, 0.008354f, 0.021712f, 0.004864f, 0.019042f, 0.001952f, -0.004495f, 0.006266f, 0.008542f, -0.018202f, -0.030813f, -0.016241f, 0.004234f, 0.007605f, 0.001028f, 0.022636f, 0.007971f, -0.035421f, 0.009020f, -0.005118f, 0.000187f, 0.010225f, -0.014227f, -0.000458f, -0.007666f, 0.006554f, 0.009165f, 0.000589f, 0.001979f, 0.006665f, 0.000270f, -0.000026f, -0.003071f, -0.003362f, 0.001206f, 0.000709f, 0.000228f, 0.005578f, 0.004020f, 0.001438f, 0.003337f, 0.002196f, 0.000159f, -0.005383f, 0.004348f, 0.003605f, -0.002126f, -0.000422f, -0.000739f, 0.000324f, 0.003187f, 0.002696f, 0.008419f, -0.006991f, + -0.001985f, 0.003221f, -0.001701f, 0.004482f, -0.003478f, 0.007449f, -0.001721f, -0.002165f, 0.001081f, 0.004307f, 0.003038f, -0.000945f, -0.000433f, -0.021294f, -0.001945f, -0.018947f, -0.009053f, 0.008139f, -0.009731f, 0.004407f, 0.006418f, -0.011303f, -0.028482f, 0.009246f, -0.028218f, -0.032212f, 0.006939f, -0.015762f, 0.014194f, 0.020515f, -0.005298f, 0.023916f, -0.005839f, 0.023632f, 0.031909f, 0.000209f, 0.001802f, -0.032143f, -0.006196f, 0.003685f, 0.005444f, -0.003592f, -0.021376f, 0.001673f, -0.018115f, 0.002489f, -0.004947f, 0.005103f, -0.007010f, -0.011750f, 0.002626f, -0.001934f, -0.006668f, 0.007776f, 0.000672f, -0.004733f, 0.023032f, 0.008780f, 0.017272f, -0.010769f, 0.003118f, -0.009049f, 0.006532f, -0.001869f, 0.009013f, -0.002852f, -0.006934f, -0.008668f, -0.020530f, -0.011871f, 0.032916f, 0.013555f, 0.021805f, -0.025126f, 0.005257f, 0.018923f, -0.016030f, 0.000343f, 0.012160f, -0.006431f, 0.012203f, 0.001952f, -0.022187f, -0.005550f, -0.034114f, -0.004012f, 0.013658f, 0.007297f, 0.022779f, 0.002786f, 0.015107f, 0.016390f, 0.005552f, -0.000814f, 0.029535f, 0.002709f, + 0.000699f, -0.004874f, -0.003000f, 0.015884f, 0.009110f, 0.015204f, -0.001859f, -0.002876f, -0.003918f, 0.011168f, 0.002147f, -0.002065f, 0.002877f, 0.007737f, -0.001886f, -0.004197f, -0.008804f, 0.000540f, -0.007048f, -0.002845f, -0.006030f, 0.005236f, -0.000823f, -0.009933f, -0.002011f, 0.001014f, 0.000614f, -0.000235f, -0.004956f, 0.007198f, -0.005763f, 0.002043f, 0.002465f, -0.007408f, -0.001591f, -0.004854f, 0.000880f, 0.006438f, -0.005646f, -0.004173f, -0.003581f, -0.003051f, 0.003260f, -0.020766f, -0.018910f, -0.019659f, -0.029155f, 0.019942f, 0.012583f, 0.001951f, -0.019693f, 0.017791f, -0.000379f, -0.024407f, -0.020330f, -0.006846f, -0.005236f, -0.015572f, -0.006431f, -0.009169f, -0.008146f, -0.005661f, -0.022972f, 0.011541f, 0.013084f, -0.001029f, -0.002354f, -0.003999f, -0.008643f, -0.026861f, -0.029705f, 0.001048f, 0.012543f, -0.007637f, -0.018394f, -0.010052f, 0.013565f, 0.010300f, 0.000418f, -0.005539f, -0.008054f, -0.007762f, 0.017213f, -0.008761f, 0.012020f, -0.008284f, 0.000097f, -0.029242f, -0.006668f, -0.002185f, 0.021904f, 0.006224f, -0.005467f, -0.016390f, -0.011761f, -0.022993f, + 0.037031f, -0.017036f, 0.035152f, 0.004636f, -0.015556f, 0.023495f, 0.022730f, 0.039894f, -0.039302f, 0.016265f, 0.006195f, 0.005371f, -0.008045f, -0.011103f, 0.016944f, 0.009034f, -0.003275f, -0.018205f, 0.020038f, -0.010588f, 0.021562f, 0.018164f, 0.016798f, -0.015403f, 0.033465f, -0.024855f, 0.013565f, 0.021876f, -0.012880f, 0.002816f, 0.000286f, 0.019016f, -0.005377f, 0.008500f, -0.010223f, 0.020311f, -0.000998f, 0.003636f, -0.011970f, 0.009319f, -0.001007f, 0.009609f, -0.003136f, 0.012921f, 0.005902f, 0.004133f, -0.007964f, 0.002509f, -0.006736f, 0.000449f, -0.005799f, -0.007210f, -0.001866f, -0.006360f, -0.004700f, -0.000609f, -0.003685f, -0.006339f, 0.003984f, 0.005421f, 0.007440f, 0.001908f, -0.007778f, 0.000770f, -0.005397f, 0.005051f, 0.001639f, -0.003533f, 0.000522f, 0.003553f, 0.001636f, -0.008196f, 0.001161f, 0.008375f, 0.002793f, -0.001231f, 0.001916f, 0.031520f, -0.052807f, -0.057096f, -0.035567f, -0.006152f, -0.024741f, 0.015130f, -0.020318f, 0.001943f, 0.010394f, -0.001695f, 0.037655f, 0.026848f, 0.009743f, -0.011154f, -0.008178f, 0.026069f, -0.004212f, 0.003898f, + -0.010567f, -0.023582f, 0.000247f, 0.009315f, 0.006459f, -0.013039f, 0.011528f, 0.001456f, -0.001347f, 0.022061f, 0.030786f, 0.002030f, -0.019389f, -0.008594f, -0.037359f, -0.014716f, -0.009528f, -0.011440f, 0.001867f, 0.006399f, -0.013474f, -0.005629f, -0.018917f, 0.020398f, 0.024852f, 0.020399f, 0.023216f, 0.017945f, 0.030328f, 0.003522f, 0.010518f, 0.006983f, -0.005310f, 0.011446f, 0.018141f, -0.018218f, -0.062180f, -0.014698f, 0.020873f, -0.032489f, 0.016628f, 0.020179f, 0.007523f, -0.010018f, 0.001720f, -0.007957f, -0.024881f, -0.007014f, 0.016448f, -0.020226f, -0.016794f, 0.005813f, -0.013609f, 0.040382f, 0.041429f, -0.015500f, 0.026727f, 0.006806f, -0.003764f, -0.018292f, 0.012848f, -0.024602f, -0.020026f, 0.021956f, 0.016890f, 0.011519f, -0.001438f, -0.002370f, -0.029586f, -0.021595f, -0.003798f, -0.006994f, -0.005421f, -0.004683f, -0.008679f, -0.007521f, -0.008087f, -0.004346f, 0.001179f, 0.006770f, 0.005639f, 0.009050f, -0.000695f, -0.004674f, -0.004368f, -0.003283f, 0.013485f, 0.012200f, 0.006514f, -0.001408f, -0.000784f, -0.003120f, -0.004951f, -0.008057f, -0.003385f, 0.001151f, + -0.002255f, 0.005158f, -0.002828f, 0.001774f, 0.002626f, 0.002029f, 0.005157f, -0.006238f, -0.000081f, 0.000936f, 0.004365f, -0.007468f, 0.012381f, -0.005404f, -0.003122f, 0.050812f, -0.042754f, -0.000887f, 0.007341f, -0.041089f, -0.012018f, -0.017407f, 0.006259f, -0.012621f, 0.035661f, 0.004462f, -0.000356f, 0.044288f, -0.002429f, -0.039508f, -0.031481f, -0.019472f, 0.015298f, -0.002459f, -0.038079f, 0.009603f, 0.010712f, 0.019870f, -0.022620f, 0.011333f, 0.019394f, 0.016598f, 0.013585f, -0.004871f, 0.023161f, 0.024707f, 0.008514f, -0.055798f, 0.040706f, -0.020169f, 0.015741f, -0.004301f, -0.005672f, 0.010386f, -0.024519f, -0.014337f, 0.026219f, -0.012222f, -0.003305f, 0.023335f, -0.026322f, 0.023465f, -0.009079f, 0.021760f, -0.029005f, 0.038539f, -0.017168f, 0.059786f, -0.007759f, 0.003453f, 0.015575f, -0.013635f, -0.009756f, -0.007653f, 0.005017f, -0.003437f, -0.030130f, -0.038371f, -0.010372f, 0.021689f, -0.011256f, -0.014192f, -0.038585f, 0.017446f, 0.004139f, -0.053323f, -0.000614f, 0.000291f, 0.007976f, 0.026798f, -0.018323f, 0.008073f, -0.023578f, -0.021219f, -0.031327f, -0.031871f, + -0.005405f, -0.018841f, 0.022913f, -0.004260f, 0.022386f, -0.011312f, 0.012830f, -0.002276f, -0.014040f, -0.020282f, -0.002094f, 0.001845f, 0.009850f, -0.005230f, 0.004439f, 0.001412f, 0.008095f, -0.001333f, -0.010320f, -0.002076f, -0.015708f, -0.001298f, 0.002761f, 0.002950f, 0.001082f, -0.006606f, -0.007523f, 0.008152f, 0.004234f, -0.003229f, 0.010128f, -0.013111f, -0.016467f, -0.000929f, 0.014984f, -0.000289f, 0.004478f, 0.005207f, 0.010311f, -0.000053f, 0.011517f, -0.009892f, 0.003835f, 0.001580f, 0.009402f, 0.014907f, -0.009507f, 0.001809f, -0.002084f, 0.001833f, 0.019329f, 0.059360f, 0.029209f, -0.017717f, 0.040458f, 0.013687f, -0.026256f, 0.010304f, 0.026062f, -0.003779f, -0.009201f, -0.035994f, -0.010075f, 0.022683f, 0.014394f, 0.010953f, 0.006360f, -0.006240f, -0.014787f, -0.033949f, 0.018015f, -0.011369f, 0.008870f, -0.025991f, -0.014451f, -0.000342f, -0.004260f, 0.034003f, 0.009949f, 0.005690f, 0.025592f, 0.012706f, -0.039219f, -0.004238f, 0.014078f, -0.006989f, 0.000621f, 0.033613f, 0.010767f, 0.038973f, -0.022681f, -0.013856f, -0.006523f, -0.014083f, 0.014984f, -0.014691f, + 0.028929f, 0.029315f, -0.012917f, -0.027969f, 0.047252f, -0.024059f, -0.010022f, -0.005338f, 0.013960f, 0.007576f, -0.026615f, -0.007540f, 0.016769f, -0.012224f, 0.021315f, -0.009800f, 0.030268f, -0.015443f, 0.006716f, 0.046884f, -0.001088f, 0.033141f, 0.056601f, 0.007552f, 0.027720f, -0.014021f, -0.068412f, -0.045882f, -0.009008f, -0.002532f, 0.038649f, -0.000872f, 0.012831f, 0.003694f, -0.009790f, -0.031227f, -0.070591f, 0.053720f, 0.003546f, 0.001987f, 0.017302f, 0.008725f, -0.017317f, 0.039828f, 0.001842f, 0.008743f, -0.000620f, 0.003080f, -0.034875f, -0.012478f, -0.023034f, -0.013391f, -0.001246f, -0.012480f, -0.013059f, 0.008512f, -0.002934f, -0.008446f, 0.025306f, -0.004286f, -0.025972f, -0.018029f, 0.006382f, 0.001736f, -0.007609f, 0.039836f, 0.011779f, -0.012694f, -0.015322f, 0.004572f, -0.003638f, -0.007671f, 0.001190f, 0.004118f, -0.008955f, 0.009846f, -0.000387f, 0.014003f, 0.017430f, 0.003947f, -0.001725f, -0.004761f, 0.011671f, 0.011911f, 0.010193f, -0.077011f, -0.018549f, 0.080650f, -0.030989f, -0.034405f, 0.071050f, -0.045485f, 0.040025f, 0.053707f, 0.021132f, 0.007528f, + -0.040693f, 0.015748f, -0.071353f, -0.034957f, 0.015621f, 0.037301f, 0.004218f, 0.008777f, 0.027077f, 0.072404f, 0.048837f, 0.015496f, 0.002757f, 0.000179f, 0.008109f, 0.006237f, -0.027914f, 0.000886f, 0.017968f, 0.022881f, 0.096436f, 0.054604f, 0.037252f, 0.069878f, 0.028570f, -0.009620f, 0.021062f, -0.000959f, 0.066816f, 0.024485f, -0.005248f, -0.010733f, 0.028053f, -0.003897f, 0.032196f, -0.098947f, 0.004530f, 0.034626f, -0.001799f, 0.041835f, -0.015219f, 0.011384f, 0.022345f, -0.092047f, -0.035448f, -0.006784f, -0.029308f, -0.037842f, -0.044837f, 0.042762f, -0.027286f, 0.008936f, -0.008095f, 0.042937f, -0.069124f, -0.018554f, -0.009405f, 0.022354f, 0.000083f, -0.005854f, 0.051665f, 0.089921f, -0.000007f, 0.028369f, -0.016475f, 0.008098f, 0.062984f, -0.065916f, -0.039043f, -0.055066f, -0.069745f, -0.005548f, -0.002314f, -0.027077f, -0.029282f, -0.027567f, -0.026269f, -0.033898f, -0.049575f, -0.021239f, -0.031963f, -0.019264f, 0.009270f, 0.044673f, 0.014623f, 0.007304f, 0.007172f, -0.003735f, 0.010371f, 0.004918f, -0.030739f, -0.027546f, -0.007548f, -0.039070f, -0.015214f, -0.016867f, + -0.013072f, -0.015003f, 0.018753f, -0.013813f, 0.001716f, 0.003340f, 0.008446f, 0.022509f, 0.033972f, 0.000254f, -0.007798f, 0.024863f, -0.011675f, 0.016077f, 0.006548f, 0.004008f, -0.005882f, 0.005048f, 0.003713f, -0.013612f, -0.018192f, -0.019742f, -0.002171f, 0.042483f, 0.036196f, -0.034035f, -0.123395f, -0.021583f, 0.049700f, 0.012033f, -0.014311f, -0.009285f, 0.003205f, -0.016555f, -0.023130f, 0.027482f, 0.019598f, 0.056235f, 0.019722f, 0.033971f, -0.013177f, 0.074695f, 0.012845f, 0.047507f, -0.007196f, 0.068940f, -0.026571f, 0.045062f, -0.044031f, 0.000810f, 0.004274f, 0.032321f, -0.013091f, -0.023360f, -0.058051f, 0.032479f, 0.003701f, 0.007014f, -0.028327f, -0.051149f, -0.003675f, 0.006450f, -0.006864f, 0.016282f, 0.032729f, 0.005494f, 0.023265f, 0.085356f, -0.036212f, 0.008991f, -0.028450f, 0.044322f, 0.037560f, -0.042097f, 0.039746f, 0.046393f, -0.033261f, 0.012152f, 0.010352f, 0.032304f, 0.015268f, 0.065127f, 0.019926f, -0.022425f, 0.003449f, 0.084031f, 0.026049f, -0.095000f, 0.027769f, 0.017608f, -0.082602f, -0.022342f, -0.026726f, -0.057556f, 0.003802f, 0.036355f, + 0.038912f, -0.022802f, 0.070290f, -0.017674f, -0.031048f, -0.015304f, 0.037012f, -0.138185f, -0.017280f, 0.002530f, 0.111537f, 0.015338f, 0.094530f, 0.046079f, 0.066258f, -0.001361f, 0.022542f, -0.012245f, 0.056117f, 0.057741f, 0.051075f, -0.011921f, -0.034496f, -0.013481f, 0.056093f, -0.006117f, -0.037079f, -0.015489f, 0.066528f, 0.009829f, -0.041775f, -0.013689f, 0.060016f, 0.017745f, 0.024877f, -0.000292f, 0.022562f, -0.016693f, -0.001370f, -0.000780f, 0.009691f, -0.001084f, 0.010504f, -0.007848f, -0.019689f, -0.022619f, -0.028418f, -0.003207f, -0.020764f, 0.000514f, -0.003779f, -0.007541f, 0.019911f, -0.022242f, -0.009373f, -0.022048f, -0.008406f, -0.040900f, -0.030894f, 0.042374f, 0.000743f, -0.076071f, 0.061680f, 0.133080f, 0.008862f, -0.073779f, 0.114621f, -0.025689f, -0.001714f, 0.016514f, 0.064994f, -0.037237f, 0.002750f, 0.130374f, -0.064592f, 0.031179f, 0.043839f, 0.042268f, -0.057771f, -0.005645f, 0.010319f, -0.028113f, 0.004909f, 0.013760f, -0.023498f, 0.023303f, -0.039827f, -0.011096f, -0.015958f, -0.002816f, -0.023917f, -0.020719f, -0.007736f, 0.012743f, -0.043428f, -0.040374f, + 0.060997f, 0.011284f, -0.038228f, -0.009803f, 0.036279f, 0.088299f, -0.007688f, -0.042731f, 0.045950f, 0.067775f, -0.019633f, -0.004792f, 0.001752f, 0.024686f, 0.000183f, 0.000295f, 0.030717f, -0.074384f, 0.051193f, -0.042811f, 0.000550f, -0.060780f, 0.034249f, -0.004535f, -0.091144f, 0.045230f, -0.006506f, -0.035025f, 0.061509f, 0.007476f, 0.060820f, -0.051196f, -0.019701f, -0.020534f, -0.047584f, -0.073590f, -0.097679f, 0.083157f, 0.033894f, 0.061285f, 0.056281f, 0.035083f, 0.013587f, -0.034868f, 0.053293f, -0.026228f, -0.022428f, 0.072406f, 0.024095f, -0.013318f, -0.006471f, 0.022260f, -0.051141f, 0.013449f, -0.020210f, 0.034137f, -0.013009f, -0.021585f, 0.032311f, 0.005775f, -0.038016f, 0.003357f, -0.018015f, -0.010292f, 0.008042f, -0.007994f, 0.006954f, -0.001769f, -0.027387f, -0.013528f, 0.011840f, -0.008792f, -0.017276f, 0.017444f, 0.026935f, 0.026797f, -0.021287f, -0.008371f, 0.030962f, -0.052195f, 0.015750f, 0.019604f, -0.022536f, -0.051853f, 0.026243f, 0.003648f, -0.023578f, 0.016705f, -0.025241f, -0.040264f, 0.010652f, 0.036859f, -0.030226f, -0.012630f, 0.012861f, 0.032237f, + -0.008785f, -0.003553f, 0.001735f, -0.021852f, 0.072163f, -0.029414f, 0.021377f, 0.016633f, -0.074850f, 0.067239f, 0.023529f, -0.019309f, 0.057777f, 0.004753f, 0.003846f, 0.028165f, -0.025118f, 0.073645f, -0.059220f, -0.031790f, 0.027465f, 0.025286f, 0.012518f, -0.055165f, -0.033556f, -0.061464f, 0.033859f, 0.008017f, 0.030918f, -0.000089f, 0.033204f, 0.013273f, 0.011071f, 0.001178f, 0.028286f, -0.012958f, 0.015533f, -0.028219f, 0.020942f, -0.026106f, -0.000325f, -0.034414f, -0.024425f, 0.001227f, -0.030560f, 0.014042f, 0.072445f, 0.017118f, -0.054530f, 0.028138f, 0.021692f, 0.038234f, 0.000934f, 0.063734f, -0.055160f, 0.008136f, 0.025367f, -0.053358f, -0.012559f, 0.106783f, 0.060101f, -0.142043f, -0.060373f, 0.075058f, -0.020792f, -0.067592f, 0.026300f, -0.007247f, -0.052114f, 0.037680f, 0.064216f, -0.087767f, 0.017028f, 0.077193f, -0.052846f, -0.047611f, 0.063173f, 0.008071f, -0.052511f, 0.008827f, 0.040943f, -0.046111f, -0.006666f, 0.049554f, -0.007690f, -0.022806f, -0.036195f, 0.045263f, -0.012468f, 0.024992f, 0.005557f, 0.025378f, -0.018177f, 0.016214f, 0.045788f, 0.017642f, + -0.034470f, 0.002171f, -0.024799f, -0.017125f, -0.034751f, -0.003759f, -0.009623f, -0.003106f, -0.023537f, 0.022872f, 0.019794f, -0.008761f, 0.052293f, -0.014102f, -0.056675f, 0.066828f, -0.008567f, -0.013627f, 0.011894f, 0.022874f, 0.002591f, -0.007091f, 0.056442f, 0.030516f, -0.040690f, 0.002532f, 0.015591f, -0.029965f, -0.024687f, 0.040355f, -0.021936f, -0.079173f, 0.074703f, 0.008670f, -0.076981f, -0.003210f, 0.039433f, -0.029651f, -0.064896f, 0.035992f, 0.048619f, -0.080116f, 0.010827f, 0.058502f, -0.035751f, -0.007182f, 0.064317f, -0.005913f, -0.027542f, 0.014187f, 0.026585f, -0.036829f, -0.010781f, 0.037125f, -0.009814f, 0.061760f, -0.134354f, -0.010475f, -0.023077f, -0.151157f, -0.026061f, -0.047209f, 0.015587f, 0.025006f, 0.045322f, -0.020679f, -0.057797f, -0.022993f, -0.083776f, 0.010505f, 0.031133f, 0.016698f, 0.014286f, -0.068882f, 0.042614f, 0.005814f, -0.080945f, 0.058943f, -0.087105f, -0.036780f, -0.032135f, 0.023084f, 0.064519f, 0.073034f, -0.005181f, -0.017400f, -0.141474f, 0.060357f, 0.145022f, 0.051776f, 0.004198f, -0.079957f, -0.115154f, -0.048427f, -0.008907f, 0.059858f, + -0.071786f, -0.044177f, -0.073767f, -0.024541f, 0.135544f, 0.144433f, -0.024399f, -0.067679f, -0.056776f, -0.031458f, -0.014434f, 0.072392f, -0.033858f, 0.021150f, 0.016147f, 0.047919f, -0.012470f, -0.033508f, -0.083885f, -0.037505f, 0.130081f, 0.054608f, 0.086881f, -0.079558f, -0.042806f, -0.037224f, 0.088768f, 0.001101f, -0.141989f, -0.138547f, 0.078134f, 0.132243f, 0.223883f, 0.038333f, -0.188398f, 0.031028f, -0.049056f, 0.063746f, 0.063050f, -0.232658f, -0.072998f, 0.044685f, 0.123270f, 0.029097f, -0.117061f, -0.027088f, -0.010762f, 0.068021f, 0.059666f, 0.015037f, -0.093509f, -0.015425f, 0.021877f, 0.041552f, 0.022137f, -0.025285f, 0.005227f, -0.052960f, -0.005432f, -0.001508f, 0.051834f, -0.035270f, 0.068746f, -0.043698f, 0.020541f, 0.038556f, -0.014850f, 0.031878f, 0.030097f, 0.052367f, 0.004098f, -0.026332f, -0.029134f, 0.004166f, 0.004020f, 0.008347f, 0.007009f, -0.002383f, -0.002063f, -0.019802f, -0.018704f, -0.004653f, 0.035039f, -0.009238f, 0.002522f, -0.007615f, 0.012820f, 0.001902f, 0.020324f, -0.067704f, 0.057694f, -0.060331f, -0.013888f, 0.002845f, 0.014786f, -0.010919f, + 0.013193f, 0.024260f, -0.039937f, -0.033171f, -0.001413f, 0.009478f, 0.024544f, -0.027861f, 0.003334f, 0.022273f, -0.017534f, 0.014096f, -0.009434f, 0.067017f, -0.001633f, -0.009505f, 0.037522f, 0.021453f, 0.033265f, -0.016654f, 0.020989f, -0.006385f, -0.001610f, 0.028518f, 0.019213f, 0.005176f, 0.007659f, 0.038276f, -0.035926f, -0.010124f, 0.003070f, 0.051463f, -0.001520f, -0.010960f, 0.046681f, -0.011530f, -0.021303f, -0.019987f, 0.038554f, -0.008793f, 0.016438f, 0.011027f, 0.005263f, -0.013260f, 0.006339f, 0.015842f, 0.004690f, 0.044882f, 0.021288f, 0.013151f, -0.019931f, -0.002326f, 0.016185f, -0.031062f, 0.010671f, 0.012631f, 0.031938f, 0.001045f, -0.004619f, 0.019094f, 0.003338f, -0.036131f, 0.040607f, 0.013260f, -0.010403f, 0.034969f, -0.024070f, -0.002257f, -0.018160f, -0.014586f, 0.033036f, 0.025379f, -0.003114f, 0.013031f, -0.020973f, 0.005367f, -0.028009f, -0.001925f, -0.025723f, 0.006238f, 0.015293f, 0.006542f, 0.002190f, -0.004718f, -0.004270f, 0.005453f, -0.015727f, 0.005035f, -0.007299f, 0.007769f, -0.010668f, -0.002749f, -0.009946f, -0.010867f, 0.004734f, -0.001292f, + -0.001660f, -0.003547f, 0.015120f, 0.006927f, -0.021202f, -0.020450f, -0.015377f, 0.005213f, 0.005708f, 0.016228f, 0.008248f, -0.018764f, -0.003833f, -0.006579f, 0.016993f, -0.003709f, 0.018393f, 0.008814f, -0.016797f, 0.000919f, 0.007628f, -0.008223f, 0.011380f, -0.006438f, 0.012986f, -0.008984f, -0.004122f, 0.005359f, -0.008864f, 0.107095f, 0.008556f, -0.039488f, -0.032815f, 0.005369f, 0.024139f, -0.001427f, 0.022031f, -0.008358f, -0.005982f, -0.029635f, -0.006591f, -0.020739f, 0.032981f, -0.020625f, -0.001746f, -0.013005f, -0.006219f, -0.007612f, 0.003562f, -0.021917f, 0.003315f, -0.009419f, -0.015530f, 0.004591f, -0.002515f, 0.001291f, -0.004238f, 0.007785f, 0.003686f, -0.018320f, -0.011845f, 0.000039f, -0.012498f, -0.010786f, 0.009074f, -0.002922f, -0.018812f, 0.001302f, -0.010475f, 0.008061f, -0.027767f, 0.013918f, -0.012085f, -0.020993f, 0.006372f, -0.009591f, -0.010938f, 0.002905f, -0.000204f, 0.001367f, -0.004636f, 0.004714f, -0.008502f, 0.009441f, -0.005840f, 0.001053f, 0.015450f, -0.011105f, 0.005177f, -0.002880f, -0.001651f, 0.004280f, -0.012797f, 0.011697f, -0.013451f, 0.011680f, + -0.002816f, -0.000494f, -0.008614f, 0.011049f, -0.012920f, 0.000925f, 0.004557f, -0.016899f, 0.016928f, -0.010257f, 0.007182f, -0.007746f, 0.006862f, -0.005947f, -0.007504f, 0.012677f, -0.007903f, -0.001463f, 0.012372f, -0.007893f, -0.000119f, 0.001130f, 0.001955f, -0.008731f, 0.000701f, -0.000677f, -0.003866f, -0.002361f, 0.002120f, -0.002652f, -0.004767f, -0.002235f, 0.005390f, -0.004797f, 0.004038f, -0.001258f, -0.000571f, -0.001438f, -0.003663f, 0.003593f, -0.002477f, -0.002724f, 0.003700f, -0.003716f, 0.002925f, 0.001529f, -0.002343f, 0.000748f, -0.000611f, 0.001202f, -0.007481f, 0.007347f, -0.007695f, 0.001516f, -0.001143f, -0.003835f, 0.001020f, -0.002021f, 0.005227f, -0.051473f, -0.083223f, 0.088220f, 0.306289f, 0.058822f, 0.091873f, -0.188610f, -0.262493f, -0.109521f, -0.137513f, 0.106184f, 0.245877f, 0.141527f, 0.094835f, 0.009605f, -0.135710f, -0.119919f, -0.120163f, -0.048987f, 0.067946f, 0.058184f, 0.061910f, 0.055880f, -0.002014f, -0.008925f, -0.014390f, -0.019234f, -0.028614f, -0.003737f, 0.037459f, -0.003232f, -0.022023f, -0.008457f, -0.031745f, -0.017647f, -0.005669f, -0.007739f, + 0.060200f, 0.056250f, 0.033025f, 0.035756f, 0.001646f, -0.043483f, -0.044644f, -0.081441f, -0.054523f, 0.007615f, 0.006465f, 0.016788f, 0.047940f, 0.068697f, 0.040952f, 0.034674f, -0.001778f, -0.038673f, -0.054225f, -0.046483f, -0.039334f, 0.005760f, 0.013742f, 0.025274f, 0.017139f, 0.011700f, 0.002288f, -0.013973f, 0.005327f, 0.001541f, 0.005690f, 0.034250f, -0.003419f, 0.015272f, 0.015267f, -0.025155f, -0.048155f, -0.049147f, -0.044727f, 0.012015f, 0.036237f, 0.026646f, 0.039670f, 0.035395f, -0.012055f, 0.009054f, 0.021511f, -0.013819f, -0.013408f, -0.030465f, -0.039802f, -0.015145f, -0.009608f, -0.003890f, 0.016473f, 0.008047f, 0.008768f, 0.026884f, 0.025073f, 0.026471f, 0.014697f, 0.006930f, -0.013424f, -0.016048f, -0.040912f, -0.044315f, -0.031874f, -0.022922f, 0.009765f, 0.029350f, 0.036332f, 0.049389f, 0.034819f, 0.022680f, 0.000041f, -0.014970f, -0.024322f, -0.050511f, -0.054143f, -0.018724f, 0.009332f, 0.026062f, 0.020271f, 0.018239f, 0.020291f, 0.015187f, -0.001292f, -0.003501f, 0.001884f, 0.000898f, -0.009229f, -0.007666f, -0.027502f, -0.017506f, -0.001044f, 0.010226f, + 0.013125f, 0.011013f, -0.004334f, -0.000055f, 0.009614f, 0.008209f, 0.000328f, 0.005854f, 0.004520f, -0.002699f, -0.013060f, -0.011052f, -0.011327f, -0.002052f, -0.003143f, 0.000322f, 0.002158f, 0.011912f, 0.012402f, 0.011776f, 0.004800f, 0.003328f, -0.004566f, -0.003270f, -0.003263f, 0.000555f, -0.001313f} + }, + { + {0.004058f, 0.011758f, 0.000993f, 0.007867f, -0.001811f, -0.001158f, -0.004253f, 0.008388f, 0.005298f, -0.004945f, -0.006519f, 0.004220f, -0.001670f, -0.010017f, -0.011604f, 0.002738f, 0.000564f, -0.003925f, -0.003967f, -0.007815f, 0.004968f, -0.009191f, 0.002333f, -0.000918f, 0.002063f, 0.000742f, 0.001950f, -0.004138f, -0.000619f, 0.001614f, 0.002620f, -0.000956f, 0.003209f, 0.002342f, -0.004093f, 0.003055f, -0.002485f, -0.007841f, 0.011092f, -0.002151f, 0.000484f, 0.002632f, -0.001416f, 0.006113f, 0.007813f, -0.001698f, 0.002917f, 0.005873f, 0.000471f, -0.006270f, -0.004812f, 0.001551f, 0.003701f, -0.001915f, 0.002011f, 0.007211f, -0.006392f, -0.005755f, 0.005980f, 0.001125f, -0.002411f, -0.003895f, -0.000198f, 0.001353f, 0.004528f, -0.007314f, 0.003556f, 0.001838f, -0.005723f, -0.006175f, 0.005220f, -0.003369f, -0.007575f, -0.003242f, -0.000744f, 0.011367f, 0.013114f, -0.001154f, 0.002145f, -0.001656f, 0.001983f, -0.002187f, 0.003454f, 0.002107f, -0.002211f, -0.000747f, -0.002346f, 0.001108f, -0.003115f, 0.002882f, 0.002542f, 0.000573f, -0.003643f, 0.000413f, -0.000217f, 0.001555f, + -0.000978f, 0.002421f, -0.001312f, 0.000421f, 0.000108f, 0.001499f, -0.000387f, 0.000513f, 0.000390f, 0.001549f, -0.000129f, -0.014467f, -0.006246f, -0.009983f, 0.006543f, -0.004846f, -0.006772f, -0.004598f, -0.006073f, -0.001216f, 0.002244f, 0.010931f, 0.001890f, -0.005854f, 0.009236f, 0.000352f, 0.009520f, -0.009158f, 0.014743f, 0.006831f, 0.015993f, -0.002880f, -0.005445f, -0.001110f, -0.008802f, -0.000760f, -0.000630f, -0.003200f, 0.002988f, 0.000284f, -0.006991f, -0.001707f, -0.000029f, 0.002152f, 0.006935f, 0.001588f, -0.010453f, -0.008716f, -0.003306f, 0.005856f, 0.000385f, 0.000275f, -0.005302f, 0.008687f, -0.000243f, 0.000623f, -0.003759f, 0.001094f, -0.002274f, 0.004551f, -0.001488f, 0.014490f, 0.000115f, -0.001926f, 0.005489f, -0.003680f, -0.006536f, -0.002719f, 0.004904f, 0.008736f, 0.001442f, 0.005343f, 0.001309f, 0.000886f, -0.004619f, -0.004520f, -0.007393f, -0.000350f, -0.007664f, 0.001880f, 0.006218f, 0.006630f, 0.004661f, -0.002391f, -0.003406f, 0.005949f, -0.004254f, -0.001794f, 0.003714f, -0.003434f, -0.000616f, -0.001798f, 0.003844f, 0.006843f, 0.003527f, 0.001989f, + -0.001754f, -0.000797f, 0.001222f, -0.000711f, 0.004582f, 0.000755f, -0.002262f, -0.001357f, -0.001048f, -0.000337f, 0.000627f, 0.000545f, 0.000056f, -0.000740f, 0.002114f, 0.001327f, 0.000086f, 0.000799f, -0.001682f, -0.001086f, -0.001347f, -0.001579f, -0.000571f, -0.001766f, -0.001727f, -0.000398f, 0.002164f, 0.010111f, 0.010939f, 0.005775f, 0.000018f, 0.008919f, -0.004806f, -0.007589f, 0.007407f, 0.007686f, 0.009769f, 0.014357f, 0.001400f, -0.009147f, 0.005358f, -0.008724f, -0.000527f, 0.002919f, 0.002158f, 0.015990f, 0.001334f, -0.012875f, -0.000518f, 0.002298f, 0.005491f, -0.000930f, -0.004286f, -0.014175f, -0.002696f, 0.012030f, 0.004252f, 0.007912f, 0.009362f, 0.007702f, 0.002243f, -0.001341f, 0.008333f, -0.010530f, -0.000225f, -0.007159f, 0.019309f, -0.001042f, 0.000635f, 0.008552f, -0.007029f, -0.001121f, 0.003101f, -0.001078f, 0.011554f, -0.001770f, 0.003556f, 0.010965f, -0.002040f, 0.003438f, 0.001003f, -0.000531f, -0.000018f, -0.001443f, -0.003080f, 0.004739f, 0.006453f, -0.001541f, 0.006423f, 0.002309f, 0.012622f, 0.014326f, -0.000678f, 0.003830f, 0.002454f, -0.007236f, + 0.007184f, -0.001772f, -0.005952f, 0.002526f, 0.007075f, 0.001975f, -0.001747f, 0.012695f, -0.001727f, 0.003447f, 0.003886f, 0.001880f, -0.006372f, -0.000374f, -0.001243f, 0.001024f, -0.003332f, -0.000703f, 0.000457f, 0.001348f, 0.001430f, 0.002336f, -0.000754f, 0.001142f, -0.003096f, -0.002148f, -0.003856f, 0.002987f, 0.001054f, -0.000584f, 0.001253f, -0.000541f, -0.003156f, 0.002024f, 0.000372f, 0.001466f, -0.000925f, -0.001127f, 0.000623f, 0.003774f, -0.003858f, 0.015984f, 0.015623f, -0.006138f, -0.008976f, -0.007806f, -0.005394f, 0.004044f, -0.017122f, -0.001632f, 0.002348f, -0.008148f, -0.015170f, 0.014749f, -0.003201f, -0.003655f, 0.002331f, 0.006829f, 0.006016f, -0.007451f, -0.003009f, -0.000245f, -0.000842f, 0.003601f, 0.005154f, -0.002782f, 0.006345f, -0.004698f, 0.009742f, -0.001092f, 0.000375f, -0.004916f, 0.005137f, 0.001989f, -0.001506f, -0.004893f, 0.002348f, -0.002737f, -0.004377f, -0.003567f, 0.000858f, 0.003314f, -0.009248f, 0.000894f, -0.017438f, -0.009972f, 0.006260f, -0.002519f, 0.002076f, 0.004000f, 0.011471f, -0.003585f, -0.005784f, -0.000290f, 0.000363f, 0.004943f, + 0.004645f, -0.005256f, -0.002359f, 0.012794f, 0.000490f, 0.002056f, 0.001085f, 0.005763f, -0.010563f, 0.000482f, 0.005364f, 0.009977f, 0.002076f, 0.004362f, 0.014990f, -0.003555f, -0.001399f, -0.007978f, 0.000119f, 0.002599f, 0.005258f, 0.000120f, -0.003217f, 0.004712f, -0.000379f, 0.008453f, 0.000097f, -0.000197f, 0.001040f, -0.010390f, -0.005405f, -0.006095f, 0.005885f, -0.000890f, -0.001674f, 0.000018f, 0.000798f, -0.000302f, 0.003105f, -0.000859f, -0.001725f, -0.002198f, -0.001109f, -0.003160f, -0.002094f, 0.002556f, 0.000184f, -0.000795f, -0.001622f, 0.000860f, 0.000683f, 0.000310f, -0.001419f, 0.002807f, 0.001200f, 0.001801f, -0.000361f, -0.000078f, -0.001855f, -0.001988f, 0.001418f, -0.000909f, 0.001903f, 0.002524f, -0.010122f, -0.015846f, 0.006802f, -0.005174f, 0.000325f, -0.008158f, 0.006355f, -0.018292f, -0.014991f, -0.017250f, -0.005781f, -0.003652f, -0.012014f, 0.006157f, 0.016524f, -0.012133f, 0.002579f, 0.019376f, -0.004447f, -0.005271f, -0.008876f, 0.001588f, -0.000017f, 0.008596f, 0.002840f, 0.006184f, 0.004358f, -0.006287f, -0.012269f, -0.005839f, 0.007382f, -0.004155f, + -0.007492f, 0.001918f, 0.003141f, 0.002438f, 0.001595f, 0.016874f, -0.007925f, 0.009195f, -0.004359f, 0.004626f, -0.004875f, 0.014043f, -0.010408f, 0.005743f, -0.000829f, -0.008317f, 0.007800f, -0.003076f, -0.002728f, 0.008380f, 0.004479f, -0.000703f, -0.003663f, 0.007618f, 0.003777f, -0.007805f, -0.009342f, 0.006431f, 0.010393f, 0.005850f, 0.000266f, -0.004498f, 0.000551f, 0.006625f, -0.002827f, 0.008004f, -0.001858f, -0.016262f, 0.000535f, -0.007136f, 0.023193f, 0.008102f, -0.013167f, -0.007418f, -0.002583f, -0.005962f, 0.005995f, 0.005804f, 0.004410f, -0.002834f, 0.005098f, 0.004099f, 0.001455f, -0.000970f, -0.006793f, 0.001353f, 0.002357f, -0.001941f, 0.001582f, 0.002374f, -0.000897f, -0.000284f, 0.001511f, -0.000430f, -0.002009f, -0.001688f, 0.000176f, 0.001781f, -0.001833f, 0.001685f, 0.001997f, -0.002549f, -0.003243f, -0.004102f, 0.000144f, 0.002440f, -0.001104f, 0.002167f, -0.001752f, -0.000168f, 0.001658f, -0.001166f, 0.000702f, 0.006077f, -0.013485f, -0.016445f, 0.014169f, -0.002953f, -0.013418f, 0.001215f, -0.003452f, 0.013855f, 0.006852f, -0.003399f, 0.002568f, -0.000577f, + -0.002043f, -0.002343f, 0.016000f, 0.003250f, 0.000875f, -0.010791f, -0.004971f, -0.002429f, 0.005623f, 0.007151f, 0.021540f, 0.000668f, 0.000730f, -0.000530f, 0.001488f, -0.009332f, 0.000451f, 0.004041f, -0.011742f, -0.008178f, -0.007596f, -0.000836f, 0.015752f, -0.012665f, 0.002203f, 0.007311f, 0.003136f, -0.005854f, 0.006572f, -0.015841f, 0.013080f, -0.002700f, 0.000022f, 0.007216f, -0.008056f, -0.009338f, -0.014653f, 0.003235f, -0.004782f, 0.014023f, 0.004849f, 0.000465f, 0.002665f, 0.004349f, 0.010920f, -0.004702f, -0.002385f, 0.011506f, -0.002326f, -0.006379f, -0.000226f, 0.011513f, 0.011562f, 0.010648f, 0.005714f, -0.006902f, 0.006775f, 0.009641f, -0.011247f, 0.014517f, -0.008799f, -0.008128f, 0.013070f, 0.001475f, 0.018853f, -0.000141f, -0.010571f, 0.004750f, -0.004706f, 0.012581f, 0.005964f, 0.003533f, 0.000847f, 0.004372f, -0.002199f, 0.007938f, 0.002738f, 0.003206f, 0.002372f, 0.004682f, -0.000367f, -0.000306f, 0.003596f, -0.000056f, 0.002640f, -0.001332f, 0.004352f, 0.008974f, -0.005180f, -0.002303f, 0.001567f, 0.001189f, 0.000570f, 0.002336f, -0.000451f, 0.000785f, + 0.001827f, 0.004433f, 0.000316f, 0.008265f, 0.001950f, 0.001024f, -0.003685f, 0.000999f, 0.002708f, -0.003616f, 0.000800f, 0.001676f, -0.000224f, 0.001117f, -0.029522f, -0.019450f, 0.005230f, 0.009484f, 0.020186f, -0.012302f, 0.010832f, 0.002018f, 0.011408f, -0.000582f, -0.005327f, -0.006934f, 0.007043f, 0.020914f, 0.001764f, -0.001831f, -0.019957f, -0.016690f, 0.000102f, -0.012267f, -0.007225f, 0.000717f, 0.002508f, -0.012572f, -0.003772f, 0.003056f, 0.007377f, 0.003946f, -0.008144f, -0.000018f, 0.009378f, 0.007653f, 0.001578f, -0.007705f, 0.001416f, -0.004709f, 0.002264f, 0.002646f, 0.004295f, -0.005928f, 0.007443f, 0.018229f, -0.001864f, -0.001342f, 0.003523f, -0.010138f, 0.004783f, 0.014687f, -0.014471f, -0.017036f, -0.008835f, 0.001433f, -0.022096f, 0.000572f, 0.000620f, 0.003108f, 0.000203f, -0.000297f, -0.010497f, -0.005622f, -0.006822f, -0.000899f, 0.015014f, 0.022214f, 0.000617f, 0.001494f, 0.010812f, -0.004500f, -0.001866f, 0.005059f, 0.024946f, 0.003192f, 0.008960f, 0.017565f, 0.003192f, -0.011333f, 0.004708f, 0.005280f, -0.005261f, 0.005434f, 0.004499f, -0.001128f, + -0.005440f, 0.002603f, 0.001585f, -0.001131f, -0.009287f, 0.004138f, 0.008502f, 0.003235f, 0.006192f, 0.003514f, 0.007475f, -0.001567f, -0.002821f, 0.006945f, 0.005714f, -0.001720f, -0.000392f, -0.002003f, 0.004919f, 0.005405f, -0.004322f, 0.005371f, 0.001421f, 0.000717f, 0.001328f, 0.002947f, 0.003982f, 0.000583f, 0.003479f, -0.002296f, -0.001267f, 0.000048f, -0.000629f, 0.001493f, -0.002327f, 0.000420f, -0.000702f, 0.001092f, -0.003134f, 0.015276f, 0.009445f, -0.013940f, -0.000693f, 0.030221f, 0.026538f, 0.005733f, 0.015974f, 0.019972f, 0.004934f, -0.000171f, 0.012964f, -0.005780f, 0.000070f, -0.011716f, 0.009601f, -0.000692f, 0.000407f, 0.004477f, 0.005077f, 0.016502f, -0.013890f, -0.012491f, 0.012453f, 0.002676f, 0.005645f, -0.009728f, 0.001699f, -0.003333f, 0.006367f, 0.000201f, 0.008967f, 0.008993f, -0.009129f, 0.007631f, 0.006202f, -0.010304f, 0.026621f, 0.004772f, 0.005111f, -0.020617f, -0.006740f, -0.001564f, 0.017219f, 0.016239f, -0.001745f, -0.017684f, 0.011514f, -0.015364f, -0.004911f, 0.013647f, -0.000503f, -0.010867f, 0.013117f, 0.016728f, -0.004348f, 0.005706f, + -0.006807f, -0.023210f, 0.000019f, 0.015047f, -0.006990f, -0.007873f, 0.009713f, -0.011081f, -0.017101f, 0.004320f, 0.011391f, 0.021081f, 0.010875f, -0.015621f, 0.006459f, -0.018369f, -0.021893f, 0.020187f, 0.009319f, 0.007450f, -0.013653f, -0.014501f, -0.002323f, 0.015241f, 0.004922f, 0.021732f, 0.009467f, 0.005558f, -0.023121f, 0.003814f, -0.006535f, 0.000971f, -0.005497f, 0.004881f, 0.001315f, 0.005888f, 0.009583f, 0.005165f, 0.000735f, 0.004378f, -0.003958f, -0.001802f, -0.004031f, 0.000032f, -0.003783f, -0.001002f, 0.001307f, 0.007333f, 0.001136f, -0.002940f, -0.001430f, 0.002398f, 0.000191f, -0.000570f, -0.007527f, 0.000482f, -0.003915f, 0.001476f, -0.005393f, -0.005720f, 0.003722f, 0.004637f, 0.007097f, -0.007040f, 0.031260f, 0.020053f, -0.013550f, -0.003712f, -0.000516f, 0.005466f, 0.004409f, -0.001980f, -0.012221f, 0.002955f, -0.008379f, 0.012996f, 0.000405f, 0.005003f, -0.004254f, -0.001944f, -0.012755f, -0.006800f, 0.026871f, 0.008872f, -0.016389f, 0.007744f, -0.016010f, -0.011320f, -0.025042f, 0.010872f, 0.000415f, 0.000373f, 0.005929f, -0.000712f, -0.011358f, 0.018860f, + 0.010797f, -0.004189f, -0.019028f, 0.019026f, -0.013065f, 0.005001f, -0.000496f, 0.006214f, 0.003757f, 0.012079f, 0.013960f, -0.003289f, 0.007729f, 0.022098f, 0.002835f, -0.006974f, -0.006336f, -0.003948f, 0.003434f, 0.014740f, -0.004063f, 0.005972f, 0.001160f, -0.013565f, 0.000517f, -0.003365f, 0.006599f, -0.020387f, -0.000344f, -0.033965f, -0.020572f, -0.018966f, -0.004792f, -0.018742f, 0.012578f, -0.004710f, -0.015485f, -0.004200f, -0.001740f, -0.012577f, -0.005447f, -0.000481f, 0.001260f, -0.007559f, -0.016269f, -0.016332f, 0.000879f, -0.003576f, 0.003982f, 0.009102f, -0.001455f, 0.004536f, 0.002279f, -0.000111f, -0.000266f, -0.008913f, -0.000378f, -0.000219f, -0.007125f, -0.000623f, 0.006720f, 0.012875f, -0.002230f, -0.006212f, 0.004843f, -0.008031f, 0.006768f, -0.006711f, -0.002484f, 0.001251f, -0.004854f, -0.006035f, -0.000031f, -0.003781f, 0.000942f, -0.001433f, -0.006026f, 0.002935f, -0.000235f, 0.007496f, 0.005084f, -0.005351f, 0.004560f, -0.003006f, 0.004243f, -0.002474f, 0.002889f, 0.002611f, 0.002070f, 0.000116f, 0.003034f, -0.003554f, -0.001866f, -0.003946f, -0.007856f, 0.001001f, + 0.002884f, -0.000862f, 0.001739f, -0.006225f, -0.021293f, -0.026768f, -0.012523f, -0.017818f, 0.046137f, -0.022339f, 0.010560f, -0.021097f, -0.005918f, 0.002217f, -0.003279f, -0.031435f, -0.000524f, -0.014941f, 0.001250f, 0.037008f, -0.011711f, 0.015525f, 0.020507f, 0.007356f, 0.008417f, 0.022255f, 0.006760f, -0.008674f, 0.006462f, 0.008721f, 0.009528f, 0.003980f, -0.004495f, 0.025901f, 0.001121f, -0.002091f, -0.004209f, 0.007017f, -0.002083f, -0.009028f, 0.008898f, -0.003348f, 0.006419f, -0.025108f, 0.001176f, -0.004862f, 0.022835f, -0.008973f, 0.007453f, 0.034034f, -0.002841f, 0.000701f, -0.008186f, -0.014083f, -0.000685f, -0.002321f, -0.014277f, 0.018073f, -0.003777f, 0.013110f, 0.001511f, 0.012380f, -0.007077f, -0.001350f, 0.027328f, 0.013302f, -0.021025f, -0.011078f, 0.005869f, 0.006529f, 0.003343f, 0.005788f, -0.006073f, 0.007688f, 0.010082f, 0.022594f, -0.028943f, 0.001733f, -0.012326f, 0.005907f, -0.000442f, 0.003307f, 0.010772f, 0.015516f, -0.010292f, 0.010958f, -0.007434f, -0.005112f, -0.004123f, -0.003886f, 0.008820f, -0.019772f, -0.003821f, -0.009134f, 0.011391f, 0.009152f, + 0.003964f, 0.004709f, -0.006570f, 0.007559f, 0.003519f, 0.005440f, -0.000731f, 0.004313f, -0.005830f, -0.003304f, -0.007325f, -0.000626f, -0.001172f, -0.006617f, -0.000087f, -0.000689f, -0.001757f, -0.000092f, 0.007842f, 0.004805f, -0.004316f, -0.007077f, 0.003692f, 0.002681f, 0.008987f, -0.006936f, 0.000541f, -0.002502f, 0.004031f, 0.004584f, -0.003771f, -0.007136f, -0.015273f, -0.013532f, -0.014776f, 0.016012f, -0.030909f, -0.008991f, -0.019393f, 0.009715f, 0.031896f, -0.017297f, 0.000873f, 0.001017f, -0.006329f, 0.012439f, -0.010356f, 0.005069f, -0.003258f, -0.013048f, 0.028454f, 0.001537f, -0.009359f, 0.000526f, -0.004228f, -0.012500f, 0.009898f, -0.009549f, 0.009290f, -0.017937f, -0.008441f, 0.012294f, 0.008896f, -0.030047f, -0.005459f, -0.025569f, 0.007616f, -0.004187f, -0.024741f, 0.030233f, -0.008458f, -0.000476f, -0.022887f, -0.024954f, 0.001432f, -0.022487f, -0.002976f, -0.019413f, -0.016691f, 0.019831f, 0.002161f, -0.025285f, 0.008320f, -0.022620f, 0.020251f, 0.007435f, -0.009833f, 0.000886f, 0.006508f, 0.021398f, -0.016477f, -0.023195f, 0.023575f, -0.016357f, -0.009393f, 0.012466f, + 0.017799f, -0.032918f, -0.016247f, 0.018887f, 0.013963f, 0.007391f, -0.001730f, 0.002432f, -0.023724f, 0.008256f, 0.007912f, 0.013194f, -0.004176f, -0.024997f, -0.018198f, 0.008989f, -0.021657f, -0.018860f, 0.007994f, -0.001152f, 0.000298f, 0.008012f, 0.018294f, 0.000128f, -0.000766f, 0.017138f, 0.001585f, -0.002672f, 0.002921f, -0.002222f, -0.003463f, 0.003771f, -0.004478f, -0.003063f, -0.008597f, -0.008132f, -0.005869f, 0.001612f, -0.004883f, 0.000171f, 0.003484f, 0.002873f, -0.000475f, -0.000004f, 0.003729f, -0.004213f, -0.006819f, 0.002154f, -0.000222f, 0.006620f, -0.006282f, -0.001694f, -0.007122f, 0.008374f, 0.008737f, 0.001987f, -0.000433f, -0.005288f, -0.002184f, -0.007478f, 0.000653f, 0.001331f, -0.004246f, 0.001426f, 0.001729f, 0.015709f, -0.024244f, -0.039527f, -0.031925f, 0.014384f, -0.038170f, -0.001846f, 0.028895f, -0.002561f, 0.002054f, 0.020749f, -0.013798f, -0.011737f, 0.045934f, -0.018202f, 0.010727f, 0.017488f, -0.003274f, -0.041665f, -0.003496f, 0.004395f, -0.010507f, -0.005775f, -0.009728f, 0.038876f, 0.000340f, 0.000441f, -0.001948f, -0.028004f, 0.005091f, -0.016124f, + -0.008138f, 0.001744f, 0.004646f, 0.008299f, 0.022537f, 0.005015f, -0.005858f, 0.044420f, 0.004635f, -0.010986f, -0.040660f, -0.005928f, 0.029753f, -0.006467f, -0.018684f, -0.024998f, -0.022063f, -0.018802f, -0.011877f, 0.031597f, 0.012239f, 0.001817f, 0.017513f, 0.026398f, 0.014673f, -0.005750f, -0.004682f, 0.027286f, -0.005438f, -0.008368f, 0.007875f, 0.020866f, 0.002920f, -0.021442f, 0.004877f, -0.002164f, -0.032106f, -0.002422f, 0.025451f, -0.012633f, -0.014792f, -0.003587f, 0.034234f, -0.027292f, -0.005529f, -0.015229f, 0.015605f, 0.009089f, 0.007200f, 0.010967f, -0.004554f, -0.005882f, 0.011553f, 0.009268f, 0.006354f, -0.001873f, 0.001374f, 0.007294f, -0.020207f, -0.003725f, 0.002582f, -0.010433f, 0.000211f, 0.011015f, -0.001173f, 0.002033f, -0.004389f, -0.001257f, 0.005981f, 0.007780f, 0.011623f, 0.006558f, -0.002013f, 0.004151f, -0.006733f, -0.008519f, 0.002387f, -0.001672f, -0.006979f, 0.007704f, 0.004049f, 0.005827f, 0.001190f, 0.002820f, 0.005944f, 0.003313f, -0.001778f, -0.004290f, -0.001173f, 0.002425f, -0.000030f, 0.002458f, 0.000462f, 0.003049f, 0.001813f, 0.005220f, + 0.000629f, -0.005026f, 0.011056f, 0.009074f, -0.008577f, -0.002897f, -0.004126f, 0.032345f, 0.003243f, -0.028873f, -0.001077f, 0.008675f, -0.001051f, -0.013155f, 0.012528f, -0.009729f, 0.025706f, -0.019769f, 0.017663f, 0.038640f, -0.010457f, -0.010274f, -0.009110f, -0.008020f, 0.034479f, -0.025538f, -0.028091f, -0.021412f, 0.007821f, -0.011161f, -0.018084f, -0.008297f, 0.012385f, -0.017310f, 0.009586f, 0.002296f, 0.013528f, 0.020113f, 0.002472f, -0.002541f, -0.003857f, 0.019827f, -0.005102f, 0.007025f, -0.024269f, -0.000187f, -0.008643f, 0.019335f, -0.025790f, 0.021210f, -0.008909f, -0.013263f, 0.021326f, 0.036980f, -0.020767f, 0.010548f, -0.004584f, 0.007528f, -0.055474f, -0.043954f, -0.026681f, 0.003881f, -0.016924f, 0.007345f, 0.001815f, -0.020576f, -0.016273f, 0.001826f, 0.044230f, 0.010461f, -0.027549f, -0.041165f, -0.021730f, -0.015175f, 0.027112f, -0.018747f, -0.026827f, 0.006467f, 0.005905f, -0.024779f, -0.001546f, -0.000363f, -0.012295f, -0.002778f, -0.000635f, -0.000982f, 0.012169f, 0.003051f, -0.014247f, -0.012602f, -0.006935f, -0.018193f, -0.009915f, 0.003105f, 0.020590f, 0.003534f, + 0.003887f, -0.005869f, -0.016836f, -0.002522f, 0.013859f, -0.000561f, -0.007807f, 0.012807f, -0.019198f, -0.009351f, 0.002942f, 0.003161f, -0.000267f, 0.002252f, 0.001411f, -0.006384f, -0.013419f, -0.004723f, 0.010341f, -0.005853f, -0.004735f, -0.005257f, -0.011964f, -0.013173f, 0.005046f, -0.004640f, -0.002841f, -0.012394f, 0.003170f, 0.008381f, 0.010028f, -0.000271f, -0.005911f, -0.006830f, 0.007251f, 0.006606f, 0.055551f, 0.036440f, -0.009604f, 0.003749f, 0.035919f, -0.014115f, 0.001173f, 0.015539f, 0.038884f, 0.022936f, -0.006856f, -0.008590f, -0.013540f, 0.003598f, -0.007496f, 0.000701f, 0.000903f, 0.041115f, 0.067758f, -0.003874f, 0.046709f, 0.029661f, 0.005957f, 0.007442f, -0.033462f, -0.032989f, -0.003871f, 0.008870f, -0.002498f, 0.008220f, -0.012567f, -0.024675f, -0.041926f, -0.003495f, -0.027024f, -0.022654f, -0.015197f, -0.023454f, -0.017051f, -0.000828f, 0.038689f, -0.001135f, -0.029606f, -0.002382f, 0.008246f, 0.028919f, -0.009194f, -0.007218f, -0.017745f, 0.013177f, -0.052995f, -0.047387f, -0.023004f, -0.023591f, -0.025546f, -0.015307f, 0.016682f, -0.021267f, -0.029779f, -0.024813f, + -0.044460f, 0.022805f, 0.011983f, -0.039270f, 0.020006f, 0.039861f, 0.077777f, 0.043101f, -0.000678f, 0.014327f, -0.045059f, -0.018264f, 0.023956f, 0.020505f, -0.011698f, -0.030263f, 0.003744f, 0.006460f, 0.027385f, -0.003421f, -0.028546f, -0.004866f, 0.044967f, 0.028950f, 0.032495f, 0.026108f, 0.045354f, 0.043002f, 0.012654f, 0.011757f, -0.010266f, -0.017941f, -0.005253f, -0.001481f, -0.015658f, 0.000039f, -0.018063f, -0.013204f, 0.020457f, 0.009285f, -0.005867f, -0.017876f, -0.007091f, -0.002055f, -0.000527f, -0.019909f, 0.019702f, 0.000350f, -0.016977f, 0.010117f, -0.010561f, -0.008571f, -0.002807f, 0.006338f, 0.027269f, 0.013564f, 0.032674f, 0.000242f, -0.006734f, 0.003861f, 0.012315f, 0.008478f, -0.004482f, 0.017477f, 0.000595f, -0.005502f, 0.002331f, 0.014490f, -0.007325f, -0.005964f, 0.005117f, -0.001100f, -0.057748f, -0.005209f, 0.092137f, -0.006513f, 0.003050f, 0.023321f, -0.034059f, 0.019174f, 0.065216f, 0.060733f, -0.061443f, -0.058342f, -0.000372f, -0.063319f, -0.024424f, 0.000110f, 0.006956f, 0.023373f, 0.034503f, 0.030977f, 0.054020f, 0.013035f, 0.021020f, 0.021855f, + -0.009623f, -0.003718f, 0.005492f, 0.007341f, 0.015630f, -0.029039f, 0.064959f, 0.028211f, 0.030076f, -0.005557f, 0.065957f, 0.008373f, 0.039560f, 0.016721f, 0.012035f, -0.015527f, -0.010662f, 0.033985f, 0.012510f, 0.015852f, -0.036229f, -0.019000f, -0.030350f, -0.017317f, -0.022232f, -0.000021f, -0.043778f, -0.046872f, -0.003314f, -0.018016f, -0.089136f, -0.065857f, -0.060276f, 0.017076f, 0.063948f, 0.083639f, -0.046791f, 0.057672f, 0.088997f, 0.015325f, 0.006936f, -0.005682f, 0.061029f, 0.004726f, 0.055140f, 0.024012f, 0.025461f, -0.037183f, -0.123741f, -0.097463f, -0.022701f, -0.003328f, 0.001909f, 0.004308f, 0.044773f, 0.042966f, 0.036704f, -0.023360f, 0.002252f, -0.012230f, -0.064211f, 0.006340f, 0.004271f, 0.031812f, 0.004146f, 0.046812f, 0.041575f, 0.010388f, 0.036044f, -0.015737f, 0.024126f, -0.022300f, -0.025792f, -0.009364f, 0.009020f, 0.040590f, -0.010077f, -0.011684f, 0.005093f, -0.020393f, -0.010817f, 0.020405f, -0.006825f, 0.014008f, -0.026672f, 0.034718f, 0.009597f, 0.000061f, -0.003436f, 0.026601f, -0.007666f, 0.001542f, 0.003326f, -0.000901f, 0.017204f, -0.013606f, + -0.007870f, -0.000597f, 0.016447f, -0.026620f, 0.002333f, 0.008883f, -0.013968f, 0.001476f, 0.003558f, 0.002744f, -0.007001f, 0.045172f, -0.010145f, -0.080768f, -0.007395f, 0.129357f, 0.023333f, -0.023806f, 0.033018f, -0.010303f, 0.021399f, -0.009961f, -0.014260f, -0.042120f, -0.016255f, -0.004248f, -0.007385f, -0.019965f, 0.030246f, -0.027187f, -0.029901f, -0.001643f, 0.004456f, 0.027431f, 0.011878f, 0.007839f, 0.011255f, -0.010626f, -0.000039f, 0.040772f, -0.020897f, -0.047687f, -0.009911f, 0.004642f, -0.016524f, 0.034013f, -0.017842f, -0.010892f, 0.028024f, 0.008387f, 0.021093f, -0.049272f, -0.056260f, 0.019058f, -0.011084f, -0.018594f, -0.024256f, -0.029122f, -0.061923f, 0.000631f, -0.005686f, 0.021048f, -0.039749f, -0.081835f, 0.061376f, 0.017449f, 0.057674f, 0.006942f, -0.018980f, -0.016953f, 0.014807f, -0.030494f, 0.047773f, 0.010065f, 0.057396f, 0.040756f, 0.085355f, -0.007963f, -0.082528f, -0.063429f, -0.036642f, 0.047824f, 0.047261f, -0.035645f, 0.037467f, 0.075396f, -0.044432f, -0.006305f, 0.080220f, 0.013019f, 0.061546f, -0.008693f, -0.031929f, -0.083286f, -0.032896f, 0.009935f, + 0.053132f, 0.047100f, -0.027867f, 0.023891f, 0.021678f, 0.044688f, 0.014911f, -0.043625f, -0.052507f, -0.020116f, 0.035700f, 0.077006f, -0.002291f, -0.006484f, 0.039479f, 0.021414f, 0.003264f, -0.006213f, -0.017131f, -0.020320f, -0.017073f, 0.013435f, 0.007644f, 0.024621f, -0.010540f, -0.002468f, 0.001940f, 0.015015f, 0.018543f, -0.023921f, 0.000057f, 0.027765f, -0.003486f, -0.007685f, -0.030814f, 0.022409f, -0.000420f, -0.012795f, -0.009719f, 0.030902f, -0.001813f, -0.019365f, -0.010884f, -0.068042f, 0.070546f, 0.095724f, 0.016669f, 0.004346f, 0.021258f, -0.014612f, 0.041758f, 0.023360f, 0.043638f, -0.008853f, -0.046115f, 0.102416f, 0.000571f, -0.038511f, 0.004717f, 0.069246f, 0.031689f, 0.013567f, -0.043909f, 0.004742f, -0.023524f, -0.017176f, 0.006836f, -0.032669f, 0.002724f, 0.008759f, 0.039330f, -0.055928f, -0.009556f, -0.006734f, 0.033205f, -0.012681f, -0.020700f, -0.019692f, -0.000319f, 0.021156f, -0.043530f, 0.003125f, 0.011390f, -0.088982f, 0.012189f, -0.024158f, -0.062759f, 0.041155f, -0.046411f, -0.081325f, 0.107214f, -0.000910f, 0.006118f, -0.008547f, -0.029946f, 0.064662f, + -0.045916f, -0.004402f, 0.009526f, -0.029664f, -0.002544f, 0.081720f, 0.042179f, -0.072299f, -0.078246f, 0.076918f, -0.036920f, 0.044756f, 0.073800f, -0.066516f, -0.114408f, -0.079236f, 0.131722f, -0.007993f, -0.103618f, 0.094390f, -0.069162f, -0.131367f, -0.002294f, 0.112936f, -0.005129f, -0.136339f, -0.002199f, -0.046037f, 0.000982f, 0.167633f, -0.025893f, -0.123820f, 0.017650f, 0.065533f, 0.001100f, 0.076670f, 0.004171f, 0.001264f, -0.024657f, 0.002861f, 0.017269f, 0.061823f, -0.013322f, -0.017040f, 0.061131f, -0.008516f, 0.014304f, 0.042765f, -0.007748f, -0.063019f, 0.040539f, 0.029346f, 0.047535f, -0.015197f, -0.001525f, 0.016707f, -0.014220f, -0.046501f, -0.020773f, 0.018696f, 0.001003f, -0.009444f, 0.060372f, -0.002193f, -0.068136f, 0.015437f, 0.054824f, 0.031684f, -0.024037f, 0.002652f, -0.027488f, -0.015435f, 0.066559f, 0.055863f, -0.015185f, -0.064896f, -0.021210f, 0.026062f, 0.021020f, 0.017149f, -0.012738f, -0.002802f, -0.045145f, 0.069381f, -0.013442f, 0.020440f, 0.045486f, 0.031235f, 0.034619f, 0.081757f, 0.036374f, -0.021184f, 0.013679f, 0.019458f, 0.027579f, -0.030858f, + 0.080093f, 0.074181f, 0.011047f, 0.025070f, -0.017781f, -0.000991f, -0.080559f, 0.036346f, -0.042259f, 0.027962f, -0.002720f, -0.030779f, 0.044570f, -0.018459f, -0.032237f, 0.016655f, -0.045767f, 0.029815f, 0.001908f, -0.009774f, 0.013399f, 0.018264f, 0.029374f, 0.028508f, 0.028639f, 0.083188f, -0.007667f, 0.008202f, 0.027205f, 0.055728f, -0.004969f, 0.014100f, 0.000823f, 0.043371f, 0.053246f, -0.018129f, 0.013292f, -0.003319f, -0.007956f, -0.097140f, 0.008341f, 0.040014f, -0.022346f, -0.024509f, 0.021957f, -0.041049f, -0.058965f, 0.004336f, 0.034499f, 0.070061f, -0.090594f, 0.033946f, -0.003998f, -0.003541f, 0.001091f, 0.034706f, 0.077184f, 0.000374f, -0.055133f, 0.017528f, 0.062769f, -0.034620f, -0.048415f, 0.003762f, 0.027928f, -0.027315f, 0.049857f, -0.010560f, 0.038484f, 0.002296f, -0.036985f, 0.045357f, 0.037971f, 0.005339f, 0.030104f, -0.017577f, 0.019065f, -0.010017f, 0.010416f, 0.014160f, 0.045496f, -0.010516f, -0.053589f, -0.008004f, 0.063615f, 0.003855f, -0.007287f, 0.054893f, 0.012391f, -0.001272f, 0.014168f, 0.037781f, 0.058400f, -0.038035f, 0.014945f, 0.006889f, + -0.002023f, 0.027331f, -0.007519f, -0.043005f, 0.014541f, 0.039058f, -0.016402f, 0.009466f, 0.014379f, -0.013999f, 0.016341f, -0.027702f, 0.019789f, 0.016133f, -0.022526f, -0.051282f, 0.022238f, 0.027646f, -0.012492f, -0.019311f, 0.027494f, -0.002987f, -0.015452f, 0.043238f, -0.082144f, -0.064982f, -0.000603f, -0.099968f, -0.033590f, -0.037344f, 0.077104f, -0.002779f, -0.027793f, 0.034670f, -0.017527f, 0.018971f, 0.005534f, -0.038504f, 0.045851f, -0.103014f, -0.009203f, 0.005676f, -0.025102f, 0.018349f, 0.005090f, -0.020536f, -0.003134f, 0.002476f, 0.026328f, 0.001020f, -0.029532f, -0.099953f, -0.072001f, -0.055767f, -0.026965f, 0.061114f, -0.011979f, 0.001806f, -0.099052f, 0.006953f, -0.006430f, -0.013987f, 0.003646f, -0.096755f, 0.052053f, -0.047223f, 0.024223f, -0.019613f, 0.066058f, -0.036272f, -0.062981f, -0.031010f, -0.000042f, 0.047079f, 0.087192f, 0.090608f, -0.111880f, -0.083628f, -0.056870f, 0.038294f, 0.092850f, 0.111303f, -0.018977f, -0.028498f, -0.097860f, -0.036924f, 0.088087f, 0.053079f, -0.000536f, -0.000397f, -0.001569f, -0.083535f, 0.056135f, -0.017102f, 0.054202f, 0.129568f, + -0.144674f, 0.175596f, 0.050254f, -0.095710f, 0.027205f, -0.191494f, -0.186220f, 0.137489f, 0.059367f, 0.013240f, 0.041671f, -0.071079f, -0.033419f, 0.128133f, -0.004327f, 0.086072f, -0.007911f, -0.069777f, -0.022087f, 0.076016f, -0.024811f, -0.001975f, 0.025360f, -0.006416f, -0.043895f, 0.024517f, -0.035519f, 0.016447f, 0.049277f, -0.050852f, 0.048553f, 0.015867f, -0.005796f, 0.017931f, -0.002296f, -0.011585f, 0.008625f, -0.017740f, 0.009685f, -0.036108f, 0.032559f, 0.033110f, 0.007470f, 0.000999f, -0.010374f, 0.016946f, 0.006940f, 0.006735f, 0.017208f, 0.031910f, -0.038920f, -0.013449f, -0.036061f, -0.028119f, 0.003668f, 0.001432f, 0.032394f, -0.041042f, -0.030672f, -0.039529f, -0.024200f, -0.010552f, -0.082967f, 0.068584f, -0.041119f, 0.042074f, 0.022419f, 0.026458f, 0.015756f, -0.053332f, 0.058138f, -0.008888f, -0.020621f, -0.019310f, -0.022886f, 0.017507f, -0.011971f, 0.025019f, 0.015151f, -0.003594f, -0.005969f, -0.044701f, 0.025916f, 0.010236f, -0.011304f, 0.009603f, 0.023535f, -0.006969f, 0.013402f, -0.022867f, 0.026771f, -0.010234f, 0.003530f, 0.010539f, 0.011448f, -0.012177f, + 0.041213f, -0.001911f, -0.038516f, -0.002875f, 0.017935f, 0.008477f, -0.029437f, 0.014053f, 0.034527f, -0.006787f, -0.016599f, -0.016640f, -0.002145f, 0.009157f, -0.004056f, 0.040099f, -0.027073f, -0.010725f, -0.009545f, -0.020620f, -0.001610f, -0.006509f, 0.014926f, 0.010408f, -0.016598f, -0.002825f, 0.015648f, -0.016642f, -0.008294f, -0.005178f, 0.025099f, -0.015749f, 0.010826f, 0.016502f, -0.038622f, -0.015886f, 0.012513f, -0.040675f, 0.061379f, 0.016112f, 0.019605f, 0.028009f, -0.017827f, -0.000732f, -0.005200f, -0.028079f, 0.005692f, 0.008946f, 0.022474f, -0.004670f, -0.009313f, 0.013415f, -0.014043f, -0.006035f, 0.013511f, -0.000063f, -0.003203f, 0.011128f, 0.003553f, -0.007443f, -0.000238f, -0.008192f, 0.017971f, -0.017108f, 0.027223f, 0.001026f, 0.006062f, -0.011493f, -0.000933f, -0.004286f, -0.008404f, -0.004624f, 0.006538f, 0.003118f, 0.007891f, -0.000303f, -0.006314f, -0.004422f, -0.020939f, 0.021101f, -0.016799f, 0.009497f, -0.003932f, 0.012287f, -0.006863f, -0.019713f, 0.001384f, 0.010095f, -0.016008f, 0.024064f, -0.019095f, 0.010499f, -0.007244f, 0.095946f, 0.012486f, -0.032495f, + -0.025268f, -0.018909f, -0.001859f, -0.003072f, 0.002075f, -0.002599f, -0.003742f, -0.054234f, 0.001146f, -0.010787f, -0.012563f, 0.006902f, -0.021341f, -0.009649f, 0.009839f, -0.014835f, 0.004188f, 0.016855f, -0.022800f, 0.014365f, -0.008466f, -0.012055f, -0.001971f, -0.012056f, 0.005607f, -0.011186f, -0.006017f, -0.013183f, -0.002619f, -0.000164f, -0.000347f, -0.007902f, -0.008284f, 0.002536f, 0.004288f, -0.009450f, 0.012805f, -0.015769f, -0.001439f, -0.006262f, -0.002051f, -0.002921f, -0.012585f, 0.017253f, 0.010521f, -0.017198f, 0.020959f, -0.002074f, 0.004448f, -0.009420f, 0.020112f, -0.020061f, 0.001487f, 0.001800f, 0.005299f, -0.003252f, -0.005236f, 0.015109f, -0.009993f, 0.002317f, 0.000779f, -0.002974f, 0.004790f, -0.006452f, -0.000923f, 0.008488f, -0.004235f, -0.003739f, 0.009503f, -0.003608f, -0.004163f, -0.008734f, 0.004587f, 0.004434f, -0.019595f, 0.023563f, -0.013244f, 0.005417f, 0.001609f, 0.000436f, -0.007594f, 0.003360f, 0.009644f, -0.007037f, -0.003631f, 0.005291f, -0.007214f, -0.000338f, 0.005907f, -0.002308f, 0.002353f, 0.001415f, -0.005346f, 0.001061f, 0.000691f, 0.004935f, + -0.008681f, 0.000847f, -0.000979f, -0.003290f, 0.003629f, -0.004137f, 0.002090f, -0.002632f, -0.007593f, 0.004387f, -0.006582f, -0.003651f, 0.002444f, -0.003987f, 0.001528f, 0.003963f, 0.000426f, -0.005608f, 0.006106f, -0.001032f, -0.003757f, -0.046882f, -0.076276f, 0.085179f, 0.286472f, 0.029157f, 0.065804f, -0.155847f, -0.238325f, -0.059885f, -0.124476f, 0.097009f, 0.199726f, 0.105253f, 0.066592f, -0.014920f, -0.077446f, -0.076179f, -0.057293f, -0.053207f, 0.019050f, 0.034077f, 0.019737f, 0.036679f, 0.004896f, 0.002944f, 0.014523f, 0.004166f, 0.016482f, 0.013113f, -0.009727f, -0.036476f, -0.026945f, -0.032147f, -0.043377f, -0.022920f, 0.024528f, 0.031613f, 0.058719f, 0.082888f, 0.030084f, 0.012014f, -0.027478f, -0.065669f, -0.063522f, -0.044373f, -0.030762f, 0.006340f, 0.024526f, 0.035195f, 0.037574f, 0.031659f, 0.021389f, 0.002510f, -0.002439f, -0.020849f, -0.014371f, -0.009184f, -0.010389f, -0.004039f, -0.011748f, -0.003364f, -0.013941f, -0.013639f, 0.005117f, -0.001066f, 0.018202f, 0.029864f, 0.017783f, 0.044402f, 0.039577f, -0.018974f, -0.038908f, -0.039000f, -0.058060f, -0.016323f, + -0.013929f, -0.003087f, 0.035829f, 0.031932f, -0.005567f, 0.027775f, 0.034650f, 0.011781f, 0.024228f, -0.002124f, -0.027849f, -0.020183f, -0.047852f, -0.030121f, -0.011302f, -0.002926f, -0.003492f, 0.008703f, 0.022672f, 0.035918f, 0.045295f, 0.038344f, 0.012829f, -0.020828f, -0.034170f, -0.032683f, -0.036481f, -0.016326f, -0.009246f, -0.003705f, 0.008120f, 0.018096f, 0.014350f, 0.025286f, 0.013808f, 0.016642f, 0.015083f, 0.000220f, -0.012430f, -0.016189f, -0.020352f, -0.019943f, -0.017820f, -0.009374f, -0.009814f, 0.005808f, 0.010312f, 0.020822f, 0.030081f, 0.029120f, 0.011065f, 0.002159f, -0.016523f, -0.019996f, -0.023682f, -0.023645f, -0.006949f, -0.000927f, -0.004563f, 0.005823f, 0.018474f, 0.024220f, 0.011905f, 0.002817f, -0.001298f, 0.000528f, -0.004861f, -0.005265f, -0.009110f, -0.005405f, -0.006938f, -0.004693f, -0.003039f, 0.000341f, 0.000003f, 0.005605f, 0.010353f, 0.011171f, 0.004990f, 0.002204f, -0.002870f, -0.001447f, -0.002179f, 0.000445f, -0.001016f}, + {0.007429f, 0.012093f, 0.003175f, 0.010678f, 0.000184f, -0.011008f, -0.007593f, -0.008016f, -0.001247f, -0.005503f, 0.012912f, -0.009651f, -0.002453f, -0.004379f, -0.001543f, -0.007739f, 0.007448f, -0.004561f, -0.003574f, 0.006269f, 0.010389f, 0.011760f, 0.001814f, -0.000835f, 0.002448f, 0.000630f, 0.001663f, -0.005311f, -0.005722f, 0.002808f, -0.005187f, -0.005191f, -0.006962f, -0.007316f, 0.002239f, -0.004842f, 0.006487f, -0.008076f, -0.001094f, 0.003578f, 0.003400f, 0.003003f, -0.012534f, -0.002240f, -0.006949f, -0.001198f, -0.002912f, -0.007636f, -0.000149f, 0.009145f, 0.002788f, 0.004450f, 0.004210f, 0.004952f, 0.000639f, 0.006209f, 0.003907f, 0.006928f, -0.003900f, 0.004631f, -0.002258f, 0.003205f, 0.000379f, -0.006361f, 0.007476f, 0.008458f, -0.004508f, -0.005643f, 0.002506f, 0.007776f, 0.001866f, 0.002093f, -0.002581f, -0.000488f, 0.004222f, 0.002651f, 0.000695f, -0.001513f, 0.000531f, 0.003574f, 0.004340f, -0.000500f, -0.006730f, -0.004106f, -0.002257f, -0.002849f, 0.001582f, -0.000621f, -0.000599f, 0.003230f, -0.002348f, -0.000767f, 0.000001f, 0.000589f, -0.001587f, -0.000435f, + 0.000253f, -0.002533f, -0.000280f, 0.003166f, -0.000451f, 0.001687f, -0.002260f, 0.001339f, 0.000683f, -0.000130f, -0.001481f, -0.018892f, -0.004963f, -0.008522f, 0.006252f, -0.017711f, 0.003880f, -0.007808f, -0.004126f, 0.002509f, 0.000348f, 0.001977f, 0.002644f, 0.001993f, 0.007681f, -0.003421f, 0.000799f, -0.000781f, -0.009357f, 0.006889f, 0.011511f, -0.009378f, -0.008804f, 0.006681f, 0.001713f, 0.008249f, 0.002610f, 0.011083f, -0.001546f, 0.003731f, -0.005877f, -0.001794f, 0.011299f, 0.000897f, -0.007382f, -0.009105f, -0.009835f, 0.000410f, 0.008134f, 0.004126f, -0.000060f, 0.009257f, 0.007378f, 0.000284f, -0.007581f, 0.011840f, 0.003018f, 0.009130f, 0.009282f, -0.001632f, 0.005912f, 0.006987f, -0.000854f, 0.004126f, 0.004788f, -0.004614f, 0.000946f, -0.001435f, 0.004550f, -0.010415f, -0.006669f, 0.003355f, -0.006448f, -0.002490f, 0.008921f, -0.003618f, 0.004900f, -0.002097f, -0.014014f, 0.002359f, -0.000071f, 0.007359f, -0.011542f, -0.006209f, 0.005213f, 0.001316f, -0.001112f, 0.002974f, -0.005442f, 0.001578f, 0.001385f, -0.001667f, -0.003431f, 0.004717f, 0.004288f, 0.002966f, + 0.000537f, -0.001778f, 0.001139f, -0.001317f, -0.002079f, 0.001553f, 0.001334f, -0.002815f, 0.002029f, -0.001574f, -0.001197f, 0.002533f, -0.001822f, -0.003746f, -0.000057f, -0.001397f, -0.000459f, -0.001775f, -0.001951f, 0.000784f, -0.000146f, 0.001141f, -0.000010f, 0.001120f, -0.002761f, 0.000802f, -0.000804f, 0.011882f, 0.012544f, 0.005519f, 0.009278f, 0.007246f, 0.012563f, 0.014319f, -0.005328f, -0.001538f, 0.004819f, -0.014307f, -0.000481f, -0.004718f, -0.002732f, 0.006549f, -0.008331f, -0.000976f, 0.010583f, 0.001955f, 0.006783f, -0.003358f, -0.002456f, -0.003567f, -0.013456f, -0.002206f, 0.000912f, 0.007114f, -0.002167f, 0.012243f, 0.004822f, -0.002117f, 0.004892f, 0.002536f, 0.006289f, -0.004552f, -0.000954f, 0.014296f, -0.001917f, 0.013506f, 0.006336f, -0.005930f, 0.001414f, 0.011893f, 0.006189f, -0.007850f, 0.010839f, -0.002979f, 0.000728f, 0.000560f, -0.002196f, 0.002077f, 0.001198f, -0.009810f, 0.006249f, 0.004568f, -0.000854f, 0.000351f, -0.002197f, -0.008863f, -0.000000f, 0.004974f, -0.001025f, -0.001050f, -0.005976f, -0.013031f, -0.004489f, 0.004843f, 0.010920f, -0.016615f, + -0.008871f, 0.003100f, -0.007265f, 0.004250f, -0.000353f, -0.000082f, -0.010014f, -0.007591f, -0.004461f, -0.006497f, -0.003224f, 0.000363f, 0.001102f, -0.002333f, 0.003744f, 0.002993f, 0.000591f, 0.002758f, -0.003064f, -0.001130f, 0.000049f, -0.004481f, -0.001007f, 0.000439f, -0.005709f, 0.002379f, 0.001341f, -0.001093f, 0.000133f, 0.001181f, 0.002695f, 0.000303f, 0.000349f, 0.000043f, -0.002802f, -0.000355f, -0.000877f, 0.002022f, 0.001363f, 0.002768f, -0.002010f, 0.017509f, 0.018702f, -0.003771f, -0.007772f, -0.008584f, 0.017935f, -0.015563f, 0.000473f, -0.002574f, -0.007187f, -0.009868f, 0.003544f, -0.002741f, -0.013335f, -0.016326f, 0.000669f, -0.001264f, -0.008458f, 0.003042f, 0.004566f, -0.006026f, -0.008971f, -0.008456f, 0.011948f, -0.012877f, -0.001499f, -0.015041f, 0.000228f, 0.008321f, 0.002900f, 0.001397f, -0.008363f, -0.008128f, 0.007419f, -0.005718f, -0.008548f, 0.001038f, -0.003076f, 0.005235f, 0.000161f, 0.002099f, -0.008522f, -0.003199f, -0.002364f, 0.008209f, 0.005702f, 0.005701f, -0.016927f, 0.002662f, 0.004790f, 0.003855f, 0.004844f, -0.004866f, -0.003037f, 0.000587f, + 0.003500f, 0.006698f, -0.001107f, 0.004419f, -0.004857f, 0.013095f, -0.023731f, 0.008340f, 0.000737f, -0.012675f, -0.000485f, 0.013976f, -0.004175f, -0.006578f, -0.012696f, -0.004319f, 0.001052f, -0.003558f, 0.000045f, 0.005725f, 0.007363f, 0.006089f, -0.001748f, -0.001020f, -0.007444f, -0.001541f, -0.001863f, -0.003788f, 0.001097f, -0.001544f, -0.001429f, 0.003042f, -0.003737f, -0.001763f, 0.003720f, -0.001835f, 0.002422f, -0.000565f, -0.001455f, -0.001324f, -0.000955f, -0.005498f, -0.003377f, 0.002388f, 0.002751f, -0.002611f, -0.002053f, -0.001777f, 0.002078f, -0.001299f, -0.000733f, -0.002159f, 0.001464f, 0.001499f, -0.002517f, 0.001028f, -0.000313f, -0.002341f, -0.000506f, -0.001326f, 0.001559f, -0.000778f, 0.002295f, 0.003177f, -0.008307f, -0.026351f, 0.004820f, -0.012026f, 0.002647f, 0.002180f, -0.001509f, 0.018663f, 0.001048f, -0.011978f, 0.015977f, 0.007668f, 0.005494f, -0.002426f, 0.003320f, -0.004888f, 0.012526f, -0.002106f, 0.001435f, 0.018823f, 0.018411f, 0.007845f, 0.008436f, 0.008075f, 0.009168f, 0.006083f, -0.018179f, -0.005714f, -0.000249f, -0.004817f, -0.015475f, -0.001742f, + -0.003669f, -0.004128f, -0.008315f, -0.000200f, -0.002443f, 0.013275f, -0.004278f, 0.023306f, -0.000147f, 0.001925f, -0.004334f, -0.003425f, 0.000168f, -0.000718f, -0.001881f, -0.004130f, -0.002750f, -0.011490f, 0.002770f, 0.001825f, -0.001383f, -0.005966f, 0.007971f, 0.005866f, 0.006905f, -0.002483f, -0.005034f, 0.000083f, 0.006011f, 0.006483f, -0.005286f, -0.015000f, -0.007662f, 0.001560f, 0.012431f, -0.001778f, 0.010156f, -0.008148f, -0.011786f, 0.008720f, -0.004146f, -0.009710f, 0.005571f, 0.005793f, -0.010859f, -0.008618f, -0.011948f, -0.004020f, -0.004145f, 0.006774f, -0.003770f, 0.002017f, -0.000813f, 0.004493f, 0.002771f, 0.002457f, -0.002301f, -0.001341f, -0.006252f, -0.003184f, -0.001713f, -0.000147f, 0.002689f, -0.000602f, 0.000126f, 0.005076f, 0.001946f, -0.000329f, -0.000017f, 0.003232f, -0.002249f, 0.000817f, 0.000880f, -0.001828f, 0.001918f, -0.001632f, 0.001234f, 0.000944f, 0.001385f, -0.001022f, -0.003940f, 0.003656f, -0.006580f, 0.009679f, -0.011463f, -0.012535f, 0.006033f, -0.003591f, -0.001049f, -0.006581f, -0.003762f, 0.006427f, 0.009135f, 0.004762f, -0.002054f, 0.001399f, + -0.001029f, -0.002082f, -0.008607f, 0.002937f, -0.023297f, -0.006759f, -0.007374f, 0.006475f, 0.008086f, 0.000699f, 0.004053f, -0.014519f, 0.004048f, 0.002274f, 0.004031f, -0.013085f, 0.024853f, -0.001083f, 0.004684f, 0.003287f, -0.011631f, 0.001885f, -0.016711f, 0.010823f, -0.003498f, -0.014018f, 0.002918f, 0.001115f, -0.006968f, 0.000806f, 0.001620f, 0.011145f, 0.020066f, 0.008693f, -0.003963f, 0.006514f, 0.008290f, -0.018556f, -0.006755f, -0.008479f, 0.005256f, 0.004298f, -0.003012f, 0.002988f, 0.006556f, 0.004168f, 0.008421f, 0.015631f, 0.000441f, -0.005761f, -0.001523f, -0.000625f, 0.012321f, -0.008767f, 0.000123f, 0.005688f, 0.016588f, 0.000098f, -0.010912f, -0.010685f, -0.000878f, -0.013132f, -0.001718f, 0.005021f, 0.020296f, 0.017447f, -0.001961f, -0.009220f, 0.007520f, 0.000580f, 0.002240f, 0.001910f, -0.000638f, 0.002576f, -0.000650f, -0.002536f, 0.002261f, 0.002924f, -0.002806f, 0.004087f, 0.003821f, 0.003690f, -0.001017f, -0.002974f, 0.002394f, 0.003284f, -0.000498f, 0.000980f, -0.002497f, 0.000406f, -0.000524f, 0.004760f, 0.001753f, 0.002972f, 0.002304f, 0.000743f, + 0.001546f, -0.000021f, 0.001869f, 0.004256f, 0.000894f, 0.001748f, 0.003038f, 0.004139f, -0.001985f, -0.001040f, 0.000988f, 0.001231f, 0.003117f, 0.004861f, -0.024268f, -0.006602f, -0.009021f, 0.010382f, 0.000298f, -0.004980f, -0.031184f, -0.004101f, -0.004235f, 0.012905f, 0.030746f, -0.008868f, 0.020631f, 0.003568f, -0.018296f, -0.018610f, 0.003163f, 0.004738f, -0.010666f, 0.011677f, -0.008446f, 0.009411f, -0.011667f, 0.005617f, 0.003927f, -0.011016f, -0.009347f, -0.007073f, 0.003592f, 0.012063f, -0.015790f, 0.000590f, -0.016599f, -0.000919f, -0.006356f, 0.004034f, 0.011999f, 0.001272f, -0.005289f, -0.004617f, 0.012994f, -0.000037f, 0.019843f, 0.006118f, -0.007573f, -0.007221f, -0.005831f, 0.002853f, 0.012428f, -0.000256f, 0.020644f, -0.036873f, -0.027258f, -0.022004f, -0.005155f, -0.018768f, 0.001155f, -0.007064f, 0.006614f, 0.016749f, 0.002945f, 0.006933f, 0.010678f, 0.017729f, 0.009054f, 0.002714f, -0.012290f, -0.030523f, -0.032229f, 0.017264f, 0.001106f, 0.021915f, -0.015672f, -0.011236f, 0.009542f, -0.022593f, 0.000388f, -0.008070f, -0.000912f, -0.014571f, 0.000515f, 0.004862f, + 0.013106f, 0.002380f, 0.002073f, -0.004201f, 0.004689f, -0.000962f, 0.001514f, 0.003677f, 0.005906f, 0.007675f, -0.002136f, -0.003223f, 0.005536f, 0.002830f, -0.002179f, -0.004047f, 0.000801f, -0.000675f, -0.000538f, -0.001714f, 0.000818f, 0.000059f, -0.002242f, -0.000747f, 0.002250f, 0.004151f, 0.003288f, 0.002852f, 0.001448f, -0.009358f, -0.005190f, -0.003579f, -0.003364f, 0.005028f, -0.000815f, -0.001550f, 0.000010f, 0.001434f, 0.000339f, 0.014619f, 0.006387f, -0.011645f, -0.000318f, 0.027837f, 0.023599f, -0.002181f, -0.020398f, -0.034418f, -0.003927f, -0.012082f, 0.012312f, -0.010314f, -0.010153f, -0.038976f, -0.016724f, -0.034910f, 0.012885f, -0.001141f, -0.008507f, 0.009304f, -0.001222f, 0.000215f, 0.002530f, -0.011203f, 0.000991f, -0.012869f, -0.002285f, 0.007826f, 0.005822f, -0.013126f, 0.004734f, 0.013410f, 0.021822f, -0.003295f, -0.003049f, -0.007251f, 0.001245f, 0.011337f, 0.016088f, -0.002299f, 0.002383f, -0.003457f, -0.002780f, 0.019173f, 0.013952f, 0.000575f, 0.014391f, 0.004180f, -0.017618f, 0.003343f, -0.001764f, 0.022821f, 0.008925f, 0.002890f, 0.011018f, 0.014814f, + 0.004087f, -0.012999f, -0.022280f, -0.005127f, 0.004666f, 0.011980f, 0.006124f, 0.000767f, 0.004687f, 0.017707f, 0.003914f, 0.005774f, 0.008165f, 0.004781f, -0.011349f, -0.012827f, -0.011147f, -0.012670f, -0.011601f, 0.019685f, 0.002790f, 0.015208f, -0.013330f, -0.011759f, -0.002247f, 0.012715f, -0.007924f, 0.006785f, 0.003905f, 0.002046f, -0.006727f, -0.004264f, -0.006214f, -0.004244f, -0.007085f, 0.002853f, 0.002313f, -0.001921f, 0.004690f, -0.003058f, 0.002220f, -0.001222f, 0.000532f, 0.002153f, -0.006269f, -0.003887f, -0.006291f, -0.004066f, -0.007668f, -0.002190f, -0.006355f, -0.003033f, -0.003676f, -0.004833f, -0.000299f, 0.005593f, 0.001839f, 0.002344f, -0.001979f, -0.000524f, -0.000679f, -0.001309f, 0.004361f, -0.002036f, 0.048824f, 0.010699f, -0.015047f, 0.008724f, -0.008755f, -0.028940f, -0.005840f, -0.028388f, -0.015534f, 0.014703f, 0.019621f, 0.007581f, 0.004088f, 0.001672f, 0.003693f, 0.018593f, -0.013106f, 0.026301f, -0.016893f, -0.017275f, 0.021095f, 0.009343f, -0.033722f, 0.014837f, 0.008795f, 0.010765f, 0.022483f, 0.011040f, 0.016778f, -0.001096f, 0.009196f, -0.005269f, + 0.014372f, 0.003756f, 0.003255f, 0.009492f, -0.018850f, -0.010275f, -0.005610f, 0.012269f, 0.005572f, 0.004430f, 0.009987f, 0.002877f, 0.003722f, -0.017199f, 0.000455f, 0.018720f, -0.003062f, 0.002359f, 0.002656f, 0.002471f, 0.022633f, 0.008672f, 0.030349f, 0.007007f, -0.003962f, 0.028633f, -0.024245f, -0.003111f, -0.003556f, -0.009718f, -0.001906f, 0.006077f, 0.028648f, 0.002815f, -0.005658f, -0.010897f, 0.006208f, -0.011461f, -0.004585f, -0.007336f, -0.015129f, -0.002376f, 0.004521f, 0.024328f, -0.001633f, -0.023275f, -0.006093f, -0.013923f, -0.006655f, 0.017030f, 0.014035f, 0.015963f, -0.012210f, 0.002743f, -0.013625f, -0.001990f, -0.004351f, -0.008324f, -0.004322f, -0.011462f, -0.006339f, -0.002036f, -0.004536f, -0.015081f, -0.005593f, -0.004222f, -0.002670f, -0.003296f, -0.004909f, 0.000830f, -0.002132f, -0.011824f, -0.000178f, -0.005605f, -0.003015f, -0.000836f, 0.000301f, 0.002291f, 0.000052f, 0.005561f, 0.005724f, 0.001101f, 0.001393f, -0.003657f, -0.002914f, -0.000705f, -0.003608f, 0.005704f, 0.003733f, 0.005372f, 0.005356f, 0.002309f, 0.007325f, 0.004756f, 0.002192f, 0.003405f, + -0.000463f, -0.002594f, 0.005335f, 0.007169f, -0.017501f, -0.027163f, -0.009708f, -0.026745f, 0.019228f, -0.022830f, -0.016676f, -0.013475f, 0.012181f, 0.030446f, -0.030891f, -0.011063f, -0.034823f, 0.009925f, 0.004945f, 0.003202f, -0.009951f, 0.002652f, 0.039364f, -0.020631f, -0.003377f, 0.014805f, 0.010237f, 0.007709f, 0.013897f, 0.009131f, -0.012849f, -0.021913f, -0.004005f, -0.012171f, -0.016409f, -0.020238f, 0.000398f, -0.004781f, 0.005040f, 0.025887f, 0.016514f, -0.014660f, -0.007804f, -0.001710f, -0.007458f, 0.006278f, 0.049452f, -0.016841f, 0.034519f, 0.010709f, 0.005864f, -0.002339f, -0.005509f, 0.005744f, -0.018839f, 0.008969f, 0.026884f, 0.001051f, 0.004356f, 0.021373f, 0.013998f, 0.008219f, -0.018018f, 0.015047f, -0.010715f, -0.016204f, -0.043537f, -0.013810f, 0.028406f, -0.016196f, 0.007417f, -0.030779f, 0.022038f, -0.011641f, -0.012023f, 0.019106f, -0.030530f, -0.022707f, 0.034740f, -0.024790f, -0.023197f, 0.013832f, -0.015891f, 0.003152f, 0.000126f, 0.009853f, -0.025031f, 0.007829f, 0.000728f, 0.024969f, -0.018563f, 0.006155f, -0.002576f, -0.014220f, 0.018627f, 0.003706f, + -0.015379f, -0.011253f, -0.010575f, 0.001586f, 0.000027f, -0.007823f, 0.000274f, 0.009642f, -0.000746f, 0.006823f, 0.007785f, 0.006090f, -0.013845f, 0.007698f, 0.007148f, 0.011135f, -0.000220f, 0.000796f, -0.010054f, -0.004067f, -0.004919f, -0.005269f, 0.002396f, -0.001188f, 0.006530f, -0.009220f, -0.005747f, 0.003453f, -0.008847f, -0.007520f, 0.003223f, -0.019716f, -0.014699f, -0.002000f, 0.022412f, -0.010623f, 0.039396f, 0.036696f, 0.007187f, 0.011746f, -0.021347f, 0.002628f, -0.017296f, 0.027536f, -0.005562f, 0.008098f, -0.013212f, -0.008541f, 0.004633f, 0.003687f, -0.012698f, 0.021082f, -0.006039f, 0.004438f, 0.007808f, -0.013882f, 0.005162f, -0.017705f, -0.000003f, 0.009983f, 0.011945f, 0.000218f, 0.015814f, 0.019999f, -0.001595f, -0.037665f, -0.006424f, -0.011205f, 0.026807f, -0.022797f, -0.028321f, -0.020220f, -0.013580f, 0.003820f, -0.016101f, -0.012660f, -0.008162f, -0.002418f, 0.004835f, -0.055211f, 0.034674f, 0.027012f, 0.039545f, -0.012727f, 0.006243f, 0.026461f, -0.025541f, -0.023670f, 0.004528f, 0.017239f, 0.011276f, -0.003123f, 0.005217f, -0.014058f, -0.016732f, -0.021319f, + -0.006371f, 0.073144f, 0.005738f, -0.040767f, -0.007428f, -0.022407f, 0.013813f, 0.010800f, -0.025354f, 0.005239f, -0.007907f, 0.001919f, -0.012611f, 0.015515f, 0.015796f, -0.002551f, -0.008308f, -0.009788f, -0.032115f, 0.009445f, 0.004942f, -0.001463f, 0.012972f, -0.006549f, 0.001891f, 0.004934f, -0.015364f, 0.005616f, 0.008818f, 0.020724f, 0.010883f, 0.001113f, -0.018236f, -0.000065f, 0.016161f, 0.000763f, -0.000266f, 0.012079f, -0.000017f, 0.003989f, 0.011824f, 0.010048f, -0.002164f, 0.005402f, 0.009947f, 0.009250f, -0.004829f, 0.003921f, 0.011985f, 0.014858f, 0.010817f, -0.000568f, -0.008261f, -0.002049f, 0.000001f, 0.009200f, -0.000385f, -0.002965f, 0.000267f, 0.003205f, -0.006303f, 0.003219f, 0.005475f, -0.006044f, 0.003350f, -0.010592f, -0.020973f, -0.040481f, 0.003270f, -0.033818f, 0.015928f, 0.005453f, -0.027221f, 0.015353f, 0.017664f, 0.024624f, 0.007121f, 0.009731f, -0.028251f, -0.000578f, -0.005635f, 0.026299f, 0.012241f, 0.001148f, 0.024599f, 0.027398f, -0.003304f, -0.013145f, 0.003130f, 0.033788f, -0.022015f, -0.017457f, 0.017416f, 0.009494f, -0.022395f, -0.004997f, + -0.020723f, 0.038641f, -0.033007f, 0.009129f, 0.020558f, -0.012487f, 0.018894f, 0.006763f, -0.009442f, -0.010081f, -0.010162f, -0.015805f, 0.021631f, 0.029105f, 0.005805f, -0.022445f, 0.002303f, -0.024786f, -0.009440f, 0.015997f, -0.003083f, -0.012367f, -0.009045f, 0.004023f, -0.032901f, 0.000879f, -0.003480f, -0.019078f, 0.025636f, -0.025412f, -0.001743f, -0.005970f, -0.018742f, 0.019666f, -0.001608f, 0.011305f, -0.009553f, -0.002123f, -0.001165f, -0.012161f, 0.009186f, -0.011224f, -0.002090f, -0.011058f, 0.029645f, 0.012561f, -0.035297f, -0.007950f, -0.058134f, 0.033314f, -0.000137f, -0.026416f, 0.023440f, 0.002300f, 0.003440f, 0.008345f, 0.000380f, 0.013209f, 0.016417f, 0.003452f, -0.004303f, 0.008795f, 0.017658f, -0.010388f, -0.006268f, 0.006897f, 0.002530f, 0.004069f, 0.005182f, 0.008678f, 0.012028f, -0.008173f, 0.006269f, 0.003504f, -0.009548f, -0.009031f, 0.007635f, 0.001279f, -0.001001f, -0.006694f, -0.005798f, -0.010730f, 0.010294f, 0.010304f, 0.001785f, -0.007285f, -0.021923f, 0.000134f, 0.001972f, 0.006798f, -0.014081f, 0.001206f, 0.011130f, -0.006447f, 0.012879f, 0.005470f, + -0.000851f, 0.003221f, 0.007005f, 0.000257f, 0.002547f, 0.003523f, 0.008610f, 0.035430f, 0.001335f, -0.026976f, -0.011596f, 0.015933f, 0.025807f, 0.027659f, 0.000994f, -0.006509f, 0.038888f, 0.016915f, 0.043222f, 0.005250f, 0.003665f, -0.020842f, -0.008572f, -0.012370f, 0.011530f, 0.006229f, 0.023376f, -0.026822f, 0.001810f, -0.015980f, 0.014338f, -0.023257f, 0.008820f, 0.025681f, -0.003876f, -0.000821f, -0.013445f, 0.003598f, -0.013533f, -0.046232f, 0.006335f, -0.007152f, 0.003202f, -0.020684f, -0.004546f, 0.017977f, 0.034859f, -0.003675f, -0.012677f, 0.020239f, 0.009528f, 0.004892f, 0.023991f, 0.008305f, -0.012833f, -0.006182f, 0.015483f, -0.002185f, 0.014131f, -0.016932f, -0.015066f, 0.005178f, -0.014159f, -0.027130f, -0.012538f, -0.030892f, -0.006905f, 0.010367f, -0.024258f, -0.003508f, -0.027859f, -0.012201f, -0.000214f, 0.010935f, -0.033197f, 0.014502f, 0.002451f, -0.019755f, 0.024717f, -0.008824f, 0.006539f, 0.043823f, 0.049616f, 0.003185f, 0.017443f, 0.036288f, 0.043393f, 0.043074f, -0.004254f, -0.028719f, -0.044031f, -0.016003f, -0.029194f, 0.027566f, -0.005942f, -0.012999f, + 0.007049f, -0.000707f, 0.003003f, -0.000515f, -0.013054f, 0.014011f, 0.003950f, 0.005262f, 0.001010f, 0.018944f, -0.010600f, -0.000185f, -0.005822f, 0.013153f, -0.012197f, -0.005166f, -0.001300f, 0.018719f, -0.004879f, 0.011323f, 0.015412f, -0.014114f, -0.003036f, -0.005938f, -0.016026f, -0.006428f, -0.003678f, 0.006970f, 0.000548f, 0.021942f, 0.005937f, 0.014875f, -0.001409f, -0.014027f, 0.003939f, 0.000437f, 0.059299f, 0.068596f, 0.003307f, 0.022153f, 0.020675f, -0.002620f, -0.049437f, -0.001043f, -0.002252f, -0.018389f, 0.013587f, 0.013114f, -0.027037f, 0.014834f, 0.018457f, 0.003348f, -0.007401f, 0.010429f, -0.007110f, 0.035050f, -0.006251f, -0.016052f, -0.000050f, 0.008141f, -0.003553f, -0.002068f, -0.000899f, -0.055260f, 0.015747f, -0.001044f, -0.038600f, -0.015679f, 0.006362f, -0.003392f, -0.026388f, 0.009284f, -0.031094f, -0.002580f, 0.002768f, -0.049272f, -0.009113f, 0.021438f, -0.016142f, 0.002511f, 0.030954f, 0.019333f, 0.023621f, 0.007636f, -0.013699f, -0.022907f, 0.023510f, -0.012062f, 0.013063f, -0.021754f, -0.011715f, 0.015974f, 0.026440f, 0.004117f, 0.031722f, -0.021220f, + 0.027413f, -0.023195f, -0.028423f, -0.019922f, 0.027324f, 0.029061f, -0.026885f, 0.014010f, -0.073825f, -0.006506f, 0.021401f, 0.007061f, -0.011778f, -0.029109f, 0.013280f, -0.041231f, 0.006463f, -0.021147f, 0.019432f, -0.031786f, -0.020652f, 0.032339f, 0.000503f, 0.016377f, 0.003430f, 0.014310f, -0.007441f, 0.006060f, -0.003854f, -0.023741f, -0.004558f, -0.010933f, 0.007254f, -0.007475f, 0.004052f, 0.001225f, 0.003780f, 0.002202f, -0.005497f, -0.007014f, 0.000806f, -0.014906f, 0.005210f, 0.004604f, 0.008515f, -0.009437f, 0.008456f, 0.008364f, 0.005109f, 0.007242f, 0.004900f, -0.010141f, 0.000902f, 0.005397f, -0.007923f, 0.014290f, -0.001464f, -0.005084f, -0.008190f, 0.000260f, 0.001044f, 0.006988f, -0.005287f, 0.006651f, -0.005114f, 0.015039f, 0.006255f, -0.012026f, -0.003424f, -0.002720f, -0.006037f, -0.004851f, -0.053983f, 0.003973f, 0.066842f, -0.045189f, -0.004228f, -0.003924f, 0.003571f, -0.017883f, 0.008554f, -0.028510f, -0.029167f, -0.009637f, -0.007953f, 0.007049f, -0.007324f, 0.015199f, -0.021860f, 0.000715f, 0.043004f, -0.035239f, -0.031072f, -0.007551f, 0.037634f, 0.005244f, + -0.047079f, 0.020038f, -0.017457f, -0.020162f, 0.004701f, 0.064724f, -0.036402f, -0.020323f, 0.046107f, 0.034116f, 0.002989f, -0.019081f, 0.001285f, -0.007110f, -0.014617f, 0.013165f, 0.012058f, -0.007872f, -0.037328f, 0.047819f, 0.022491f, 0.009028f, -0.050823f, -0.007812f, 0.015815f, 0.017565f, -0.006305f, 0.026708f, -0.004297f, 0.009064f, -0.011639f, -0.030654f, 0.019976f, -0.021881f, 0.013127f, 0.006771f, -0.026821f, 0.050663f, 0.007814f, 0.036478f, 0.036619f, 0.006504f, -0.055050f, -0.010589f, 0.000537f, -0.021892f, -0.011079f, 0.002065f, -0.001744f, 0.023901f, 0.044969f, -0.013006f, -0.004387f, -0.019851f, -0.008852f, 0.018670f, -0.012599f, 0.010847f, 0.033436f, -0.029232f, 0.033234f, -0.006533f, 0.009994f, -0.012638f, -0.006769f, -0.010609f, 0.001443f, 0.006203f, 0.007339f, -0.005560f, 0.000186f, 0.007584f, 0.004324f, 0.017566f, 0.008246f, -0.008865f, 0.000756f, 0.001603f, 0.016026f, -0.008878f, 0.004665f, 0.007404f, 0.002501f, -0.000624f, 0.000568f, -0.020897f, 0.010272f, -0.007691f, 0.010057f, 0.013114f, 0.001763f, -0.002117f, 0.006671f, -0.000684f, 0.005107f, 0.001738f, + -0.002175f, -0.007716f, -0.007850f, 0.015585f, 0.002666f, -0.003643f, 0.004376f, -0.009695f, -0.001824f, 0.015890f, 0.020844f, 0.002878f, -0.019186f, -0.096028f, 0.006308f, -0.025025f, 0.003311f, 0.048140f, 0.004594f, -0.009231f, 0.008763f, 0.001907f, -0.032625f, -0.035157f, -0.031720f, -0.030392f, 0.039621f, -0.007878f, 0.047291f, 0.004259f, -0.044680f, -0.001508f, 0.004927f, 0.038341f, 0.007536f, -0.006120f, -0.007610f, 0.011001f, -0.024060f, -0.009149f, 0.042331f, -0.008561f, -0.054976f, -0.041919f, 0.025092f, -0.005385f, -0.011428f, 0.012712f, -0.003946f, -0.028245f, 0.008539f, 0.016715f, 0.038116f, -0.007599f, -0.031643f, 0.000517f, -0.039909f, 0.015441f, 0.045179f, -0.007145f, -0.055450f, 0.017546f, -0.000635f, 0.003211f, 0.013366f, -0.017373f, 0.034127f, 0.002656f, -0.023022f, 0.018000f, -0.012464f, -0.007608f, 0.048766f, -0.024881f, -0.008386f, -0.008100f, 0.030727f, 0.012448f, -0.053935f, 0.027468f, -0.043462f, -0.010269f, -0.023447f, 0.005710f, -0.014297f, -0.013076f, -0.004481f, 0.024878f, -0.008043f, -0.015160f, 0.029327f, -0.016987f, 0.030107f, -0.000050f, -0.015885f, -0.009458f, + 0.007504f, 0.008396f, 0.005983f, -0.017977f, -0.005965f, 0.004561f, -0.000989f, -0.011718f, 0.000291f, 0.011282f, 0.017211f, 0.007280f, 0.008872f, 0.001525f, 0.016925f, -0.009438f, 0.005526f, 0.013481f, -0.005029f, 0.001804f, 0.005495f, -0.003211f, 0.002719f, 0.005421f, -0.016490f, 0.014111f, 0.006021f, -0.016516f, -0.013580f, 0.001102f, -0.019512f, 0.001842f, -0.014354f, 0.018829f, -0.033710f, 0.000065f, -0.007057f, 0.003699f, -0.008693f, 0.010689f, -0.005519f, 0.005055f, 0.003909f, -0.046917f, 0.009606f, 0.077449f, 0.050455f, 0.023073f, -0.038431f, 0.028793f, 0.036417f, 0.053873f, 0.026026f, 0.006362f, 0.001917f, 0.033749f, 0.058271f, -0.013155f, -0.007094f, 0.032992f, -0.065228f, 0.023735f, 0.058210f, -0.012073f, -0.020150f, 0.015104f, 0.045202f, 0.036393f, -0.024320f, -0.041692f, -0.002435f, 0.020968f, -0.007046f, 0.005050f, 0.000693f, 0.048894f, -0.027896f, 0.031323f, 0.047329f, -0.018931f, -0.005688f, 0.033393f, -0.004968f, 0.117090f, -0.049061f, 0.021085f, 0.080189f, -0.046148f, 0.015175f, 0.005368f, -0.064921f, -0.002011f, 0.012191f, -0.028648f, 0.063620f, 0.004816f, + -0.008658f, 0.004952f, -0.026358f, 0.087146f, 0.024117f, -0.069833f, 0.067483f, -0.028158f, 0.002598f, 0.020691f, 0.025135f, 0.044737f, 0.021918f, -0.012069f, -0.043543f, -0.058718f, -0.021925f, -0.023528f, -0.003906f, -0.018008f, 0.037061f, -0.022442f, -0.038793f, 0.004378f, 0.010902f, 0.007951f, 0.014332f, -0.022013f, -0.021321f, -0.013010f, -0.014044f, -0.046272f, -0.019400f, -0.015733f, -0.031809f, -0.015340f, 0.011626f, -0.013566f, -0.029807f, -0.001398f, 0.011848f, 0.020183f, -0.004550f, 0.009519f, 0.022138f, -0.001217f, -0.014687f, -0.000878f, -0.008821f, 0.012260f, 0.017716f, -0.024488f, 0.021814f, -0.012662f, 0.000504f, 0.003294f, -0.011146f, 0.022734f, 0.009005f, -0.031803f, 0.019874f, 0.003034f, -0.011052f, 0.023590f, -0.026496f, 0.010803f, -0.004721f, 0.011565f, -0.006086f, -0.007381f, 0.004780f, -0.004313f, -0.002392f, 0.008349f, -0.004505f, -0.018189f, 0.008828f, -0.001627f, 0.005939f, -0.000728f, 0.015669f, 0.019182f, -0.090132f, 0.052504f, 0.002349f, 0.031745f, 0.052255f, -0.086391f, 0.019715f, 0.044490f, 0.010034f, 0.033202f, -0.033321f, 0.036549f, 0.010609f, -0.033856f, + 0.000455f, -0.021331f, -0.063323f, 0.034747f, 0.019661f, 0.057879f, -0.032062f, -0.042365f, -0.014877f, 0.013595f, -0.008875f, -0.071716f, -0.035473f, 0.022079f, -0.005426f, 0.010759f, -0.030358f, -0.009359f, 0.023788f, -0.020198f, -0.010183f, -0.030599f, -0.007261f, 0.011188f, -0.034029f, 0.003612f, -0.074216f, -0.060957f, 0.018750f, -0.063408f, 0.005416f, -0.066339f, -0.046643f, -0.031981f, 0.031111f, 0.062008f, 0.076160f, -0.018006f, 0.033772f, 0.041410f, 0.019891f, 0.017989f, -0.029744f, 0.084991f, 0.086437f, -0.058774f, 0.058863f, -0.046223f, 0.029542f, 0.061008f, 0.057721f, 0.070685f, 0.084048f, 0.059814f, -0.067174f, -0.047477f, -0.000662f, 0.001790f, 0.025178f, -0.015835f, -0.013047f, -0.040024f, -0.022423f, -0.059432f, 0.012923f, 0.050160f, -0.020369f, 0.012409f, 0.052050f, 0.024763f, -0.035930f, 0.040283f, -0.002639f, 0.014354f, -0.004094f, -0.006915f, 0.011413f, -0.012444f, 0.017590f, 0.015183f, -0.013490f, -0.015923f, 0.015156f, -0.010785f, 0.000368f, 0.000685f, -0.001437f, 0.004588f, 0.001342f, -0.021256f, 0.019812f, -0.008893f, 0.009379f, 0.011710f, -0.008153f, 0.012599f, + -0.015516f, -0.011008f, 0.009980f, -0.012067f, -0.016022f, -0.006757f, 0.006108f, -0.005960f, 0.003725f, -0.014074f, 0.000306f, 0.005525f, 0.012982f, 0.020016f, -0.004897f, 0.011394f, -0.013288f, 0.000276f, -0.002643f, 0.006258f, 0.004341f, -0.000906f, -0.010338f, 0.111522f, -0.081633f, -0.041530f, 0.043969f, -0.026173f, 0.042001f, -0.032746f, -0.036535f, 0.012334f, -0.086337f, -0.003908f, 0.058034f, -0.014015f, 0.029822f, -0.049520f, -0.012183f, -0.019556f, 0.001955f, 0.061911f, 0.018712f, 0.013754f, -0.011065f, 0.033980f, 0.010920f, 0.084589f, 0.020796f, 0.049381f, 0.003501f, -0.038630f, -0.036538f, 0.049216f, -0.023956f, 0.022753f, -0.000495f, -0.063544f, 0.045786f, -0.056619f, 0.109911f, -0.081964f, 0.050003f, 0.044769f, -0.047074f, -0.039566f, -0.029237f, 0.040578f, -0.003127f, 0.042465f, -0.000564f, 0.005518f, -0.075201f, -0.040423f, 0.017459f, -0.036978f, 0.012200f, -0.022563f, 0.022044f, 0.012507f, 0.057695f, -0.034345f, -0.011858f, -0.014670f, -0.028345f, 0.078237f, 0.014445f, 0.007327f, -0.072952f, -0.023658f, 0.039162f, 0.023098f, 0.024923f, 0.067754f, 0.043339f, 0.059907f, + 0.069140f, -0.002072f, 0.030585f, -0.028835f, 0.091980f, 0.006871f, -0.015258f, 0.033482f, -0.007930f, 0.070573f, 0.001213f, -0.014287f, -0.014661f, 0.008397f, 0.049593f, -0.037742f, 0.025582f, -0.012063f, -0.004160f, 0.014663f, 0.009790f, 0.019256f, -0.012234f, 0.012505f, 0.023091f, -0.006175f, -0.008926f, 0.015611f, -0.002669f, -0.002557f, -0.001887f, 0.004122f, 0.002441f, 0.007451f, -0.016992f, 0.021985f, -0.013163f, -0.007329f, -0.003719f, 0.013387f, -0.019235f, 0.001796f, -0.013818f, 0.018336f, 0.033289f, -0.011345f, -0.009441f, -0.004604f, 0.022789f, 0.011139f, 0.023804f, -0.002101f, -0.014160f, 0.010799f, 0.011311f, -0.003625f, 0.011194f, 0.008722f, -0.032844f, 0.004854f, 0.037070f, -0.005206f, -0.168332f, 0.117026f, -0.072522f, -0.050716f, 0.001302f, 0.024060f, 0.030278f, 0.005500f, -0.026871f, 0.091133f, 0.046283f, 0.012791f, -0.045478f, 0.029951f, -0.001429f, 0.034044f, -0.043405f, -0.029999f, 0.023437f, 0.068178f, -0.077927f, 0.003293f, 0.025459f, 0.008405f, -0.019051f, -0.011438f, -0.009663f, 0.003250f, -0.003787f, 0.017750f, 0.086023f, 0.005655f, -0.038601f, 0.057857f, + -0.013279f, -0.055672f, -0.071795f, 0.068706f, 0.022637f, -0.009386f, 0.025757f, 0.015995f, 0.057275f, -0.077281f, -0.007974f, -0.039231f, -0.010952f, 0.044409f, -0.032388f, 0.017399f, -0.037377f, 0.018313f, 0.118579f, 0.009107f, -0.067465f, -0.075868f, -0.004427f, 0.036360f, 0.035811f, -0.030325f, 0.007640f, 0.057730f, -0.023892f, -0.111334f, 0.063853f, -0.038298f, -0.063110f, 0.027972f, 0.106018f, -0.072910f, 0.053576f, 0.073843f, 0.025728f, -0.063714f, -0.052967f, -0.032688f, 0.026918f, 0.023179f, -0.021709f, 0.066287f, 0.032660f, -0.004024f, -0.001513f, 0.004103f, -0.054834f, -0.020968f, -0.038676f, 0.020254f, 0.018285f, 0.013263f, 0.018486f, 0.013675f, 0.041191f, -0.020241f, -0.009431f, 0.007917f, 0.000687f, -0.031326f, 0.027709f, -0.001094f, 0.017607f, -0.007761f, 0.013440f, -0.020148f, -0.005553f, -0.012120f, 0.019822f, 0.003715f, 0.004659f, 0.000617f, 0.012279f, 0.029943f, -0.011021f, -0.056964f, 0.005513f, -0.028103f, -0.004624f, 0.017084f, -0.023215f, -0.015657f, 0.033363f, -0.030283f, -0.005745f, 0.000263f, 0.016607f, -0.032438f, 0.003411f, 0.097262f, 0.031185f, 0.007031f, + -0.007705f, 0.015941f, 0.026572f, -0.008043f, 0.012067f, -0.014016f, -0.000756f, -0.010948f, 0.044769f, -0.050318f, -0.006339f, 0.031065f, -0.071363f, 0.023509f, -0.017881f, 0.005943f, -0.008897f, -0.019193f, 0.012034f, -0.004862f, -0.029426f, 0.078122f, -0.059772f, -0.016044f, 0.054428f, -0.034678f, -0.006004f, -0.010530f, 0.011505f, 0.055047f, 0.003635f, -0.052528f, 0.072214f, -0.038749f, 0.025348f, 0.045963f, 0.019621f, -0.016364f, 0.003427f, -0.039420f, 0.009187f, -0.023648f, -0.019643f, 0.098098f, -0.023249f, -0.038304f, 0.012119f, -0.017585f, 0.022576f, -0.014588f, 0.024847f, 0.063321f, -0.035090f, 0.021341f, 0.047358f, -0.055790f, 0.025238f, 0.031234f, 0.013450f, 0.038950f, -0.044329f, -0.010963f, 0.066466f, -0.045706f, -0.010780f, 0.019710f, -0.019343f, 0.064531f, -0.064126f, 0.011369f, 0.022324f, -0.028794f, 0.021699f, 0.025016f, -0.061098f, 0.022110f, 0.050994f, 0.000011f, -0.016105f, -0.001864f, 0.032591f, -0.006285f, -0.057412f, 0.046766f, 0.021311f, -0.024390f, 0.008869f, -0.013181f, 0.019891f, -0.007413f, -0.026031f, 0.030523f, 0.001065f, -0.005929f, -0.022710f, 0.021393f, + 0.003350f, -0.028871f, 0.009930f, 0.020344f, -0.004682f, -0.009043f, 0.003713f, 0.018858f, -0.003302f, -0.018352f, 0.018784f, 0.013299f, 0.001770f, -0.000344f, 0.015610f, 0.003741f, 0.005091f, -0.021912f, 0.028046f, -0.015144f, 0.029953f, -0.054583f, -0.147069f, -0.231299f, 0.021111f, 0.221556f, 0.018314f, 0.501569f, 0.517857f, 0.257846f, 0.542173f, 0.361620f, -0.074732f, -0.007583f, -0.118933f, -0.434827f, -0.381559f, -0.235791f, -0.444094f, -0.347565f, -0.100713f, -0.217638f, -0.182043f, 0.065083f, 0.109843f, -0.052464f, 0.029157f, 0.098123f, -0.074614f, -0.043488f, 0.138203f, 0.122750f, 0.014709f, 0.137171f, 0.233753f, 0.078516f, 0.169330f, 0.319515f, 0.153910f, 0.081558f, 0.286497f, 0.239543f, 0.032713f, 0.172283f, 0.335669f, 0.067101f, 0.079768f, 0.271267f, 0.117491f, -0.028380f, 0.192187f, 0.181372f, -0.015836f, 0.160264f, 0.206745f, -0.002490f, -0.149625f, -0.069278f, -0.352904f, -0.583719f, -0.518941f, -0.553496f, -0.845752f, -0.759688f, -0.710741f, -0.864744f, -0.840053f, -0.689108f, -0.621188f, -0.558855f, -0.323137f, -0.123796f, 0.110477f, 0.234127f, 0.447637f, 0.666939f, + 0.728107f, 0.810900f, 1.057906f, 1.043998f, 0.821686f, 0.898741f, 0.794792f, 0.329442f, 0.358991f, 0.305142f, -0.011874f, -0.048917f, 0.089148f, -0.011394f, -0.135376f, 0.018563f, 0.092716f, -0.087557f, -0.034093f, 0.082008f, -0.041823f, -0.172260f, -0.056148f, -0.045886f, -0.249629f, -0.176687f, -0.046796f, -0.195637f, -0.221595f, -0.014388f, -0.077862f, -0.224190f, -0.107117f, -0.100868f, -0.315508f, -0.299167f, -0.270911f, -0.489372f, -0.529035f, -0.441027f, -0.470369f, -0.507699f, -0.363303f, -0.309743f, -0.268534f, -0.194147f, -0.103861f, -0.046080f, -0.011384f, 0.042471f, 0.175745f, 0.239379f, 0.368553f, 0.600005f, 0.678490f, 0.750495f, 0.876548f, 0.856700f, 0.755161f, 0.643957f, 0.452968f, 0.197610f, 0.053316f, -0.040684f, -0.138055f, -0.162889f, -0.159486f, -0.161158f, -0.164436f, -0.152670f, -0.136756f, -0.147401f, -0.150168f, -0.140723f, -0.150471f, -0.164408f, -0.153986f, -0.143525f, -0.131423f, -0.094664f, -0.043980f, -0.010207f, 0.002737f, 0.003902f, 0.000883f} + }, + { + {0.003031f, 0.012017f, -0.005986f, 0.003317f, -0.001243f, 0.000684f, 0.000563f, -0.004865f, -0.005516f, 0.003597f, -0.001010f, -0.004436f, -0.005656f, -0.003495f, 0.004980f, -0.000533f, 0.006685f, 0.001392f, -0.008487f, -0.008776f, -0.006224f, 0.002543f, 0.002165f, 0.004529f, -0.000681f, 0.005185f, -0.003977f, -0.000750f, -0.009178f, -0.001426f, -0.001713f, 0.001879f, 0.003451f, 0.003449f, 0.006776f, -0.003390f, -0.004539f, 0.003651f, 0.002068f, -0.004440f, -0.004514f, 0.000195f, 0.003152f, 0.001494f, 0.007524f, -0.002881f, -0.002386f, 0.008511f, 0.002607f, 0.015971f, 0.006796f, -0.004508f, -0.000154f, -0.009864f, 0.000184f, -0.011241f, -0.000740f, -0.004219f, 0.007752f, 0.000796f, 0.004161f, 0.005656f, 0.003073f, 0.005422f, 0.003622f, 0.000750f, -0.009413f, -0.001070f, -0.004718f, 0.006466f, 0.009473f, -0.006668f, -0.004730f, -0.002881f, -0.003835f, -0.005039f, -0.008070f, -0.001857f, 0.002420f, -0.004781f, -0.003933f, -0.001700f, -0.006634f, 0.000746f, -0.001334f, -0.004503f, 0.001431f, 0.000215f, -0.000026f, -0.002229f, 0.000396f, 0.000393f, 0.002467f, -0.000709f, 0.001592f, -0.000843f, + 0.001152f, -0.000344f, -0.001490f, 0.000383f, 0.001939f, 0.000304f, -0.001738f, -0.001813f, -0.000183f, 0.003280f, 0.000767f, -0.000664f, 0.000533f, -0.000995f, -0.018872f, -0.020175f, -0.001603f, -0.005786f, 0.000777f, -0.004378f, -0.001189f, 0.011226f, -0.002007f, 0.006035f, -0.002774f, -0.005396f, -0.007458f, 0.001370f, -0.001542f, -0.008908f, 0.010269f, 0.003085f, 0.000706f, 0.005474f, 0.005223f, 0.008467f, 0.005965f, -0.000562f, -0.006300f, 0.005882f, 0.001371f, -0.008493f, -0.003752f, -0.003830f, -0.002544f, 0.007592f, -0.002600f, -0.012952f, -0.004386f, -0.001481f, 0.002705f, -0.004026f, -0.008427f, 0.000275f, -0.000822f, 0.009790f, 0.001451f, -0.000079f, 0.003577f, -0.000225f, 0.013210f, -0.002279f, 0.001216f, -0.002920f, -0.005241f, 0.000005f, 0.005673f, 0.002565f, 0.001548f, 0.005361f, -0.004918f, -0.008196f, -0.005862f, -0.001180f, 0.001079f, -0.001912f, 0.000235f, -0.006152f, -0.001362f, 0.003224f, -0.001962f, 0.006417f, 0.003349f, -0.000362f, 0.001191f, -0.006017f, -0.005124f, 0.009958f, 0.002263f, 0.004242f, 0.002889f, -0.001770f, -0.000585f, -0.007563f, 0.000534f, -0.004321f, + 0.001857f, -0.001473f, 0.001926f, 0.002053f, 0.005856f, -0.000608f, -0.002047f, 0.000346f, 0.001255f, 0.000785f, 0.000210f, 0.000208f, -0.001764f, -0.001387f, 0.000711f, -0.000636f, -0.001520f, 0.002381f, -0.001204f, 0.001224f, 0.001811f, -0.001713f, -0.000511f, 0.001371f, -0.000517f, 0.002457f, -0.001477f, 0.001221f, -0.001177f, -0.000854f, -0.003069f, 0.002825f, 0.013047f, -0.000722f, 0.006695f, 0.003932f, 0.008928f, 0.010940f, -0.002487f, 0.000890f, 0.006747f, 0.006649f, 0.004462f, 0.012516f, 0.002550f, -0.004110f, 0.000555f, 0.010947f, 0.003868f, 0.005160f, 0.009516f, 0.012764f, 0.008445f, -0.002923f, -0.008751f, 0.006141f, 0.004211f, -0.005094f, -0.008453f, 0.000429f, -0.004934f, 0.002221f, 0.003246f, -0.003125f, -0.004217f, 0.004214f, 0.003366f, 0.007509f, -0.005049f, -0.010340f, -0.005163f, -0.004505f, -0.006863f, -0.002434f, -0.007840f, 0.004640f, -0.010733f, 0.004551f, 0.000914f, 0.002418f, -0.004774f, 0.010183f, 0.007815f, -0.007318f, 0.009004f, 0.003312f, -0.001335f, 0.002890f, -0.006531f, -0.002166f, 0.006155f, 0.002107f, 0.002577f, 0.001529f, 0.007351f, 0.002894f, + 0.009089f, -0.004553f, -0.000553f, -0.000682f, 0.003525f, 0.005173f, -0.002104f, 0.003409f, -0.004779f, 0.002318f, 0.003189f, 0.002775f, 0.009972f, 0.000270f, 0.007440f, 0.008243f, 0.004678f, -0.007703f, -0.001466f, -0.001289f, -0.001995f, 0.000573f, 0.004221f, -0.001860f, 0.000125f, -0.000422f, 0.000477f, 0.001427f, -0.001248f, 0.001695f, 0.002907f, -0.002149f, -0.001096f, 0.002661f, 0.000090f, -0.000085f, -0.000149f, -0.001692f, 0.000685f, -0.000881f, 0.000220f, 0.002032f, 0.003500f, 0.000037f, -0.000485f, 0.001655f, 0.001348f, 0.000440f, 0.000805f, 0.000560f, 0.000851f, -0.000249f, -0.000496f, 0.001441f, 0.001894f, -0.001881f, 0.000991f, -0.000755f, 0.036080f, 0.000301f, 0.031947f, 0.002573f, 0.020234f, -0.004341f, -0.003484f, 0.005546f, -0.015104f, 0.016519f, -0.009389f, 0.011086f, 0.008168f, -0.006031f, 0.004821f, -0.000428f, 0.000612f, -0.002775f, 0.004592f, 0.006544f, 0.008090f, 0.013361f, 0.003250f, 0.004281f, -0.000525f, 0.015713f, -0.018022f, 0.000467f, -0.001386f, 0.004354f, 0.007637f, -0.009446f, 0.003617f, 0.004313f, 0.002190f, 0.006310f, 0.003383f, -0.007278f, + 0.003470f, 0.014077f, -0.002649f, 0.004336f, -0.002389f, -0.002142f, -0.000694f, -0.010038f, 0.015519f, -0.000196f, 0.001485f, 0.011671f, -0.001665f, 0.000946f, 0.014385f, -0.021106f, 0.005768f, -0.000345f, 0.006288f, 0.017175f, 0.005065f, 0.004194f, 0.005886f, -0.001799f, -0.004839f, -0.003181f, 0.004130f, 0.001624f, 0.009135f, -0.003262f, 0.007495f, 0.003590f, -0.002643f, 0.001620f, -0.006112f, -0.003851f, 0.000731f, -0.001700f, -0.008415f, -0.005227f, -0.008609f, 0.005128f, 0.007456f, -0.001952f, 0.002239f, -0.001687f, -0.005757f, -0.000154f, 0.003031f, 0.003233f, -0.010263f, -0.000328f, 0.000853f, -0.001467f, 0.000477f, -0.001995f, 0.000109f, -0.002149f, -0.004996f, 0.000010f, -0.003341f, -0.002503f, -0.004147f, 0.000288f, -0.004058f, -0.001114f, -0.003939f, -0.002807f, -0.000222f, -0.001271f, -0.002143f, -0.000097f, 0.000419f, 0.001985f, -0.002156f, -0.014399f, -0.017746f, -0.007009f, -0.002686f, -0.006613f, 0.014160f, 0.006085f, -0.011348f, 0.012647f, -0.001795f, -0.009183f, 0.002722f, 0.005521f, -0.005155f, -0.008391f, -0.007608f, -0.015975f, -0.008105f, 0.006930f, -0.010172f, -0.016222f, + 0.004549f, 0.006596f, 0.001274f, -0.005954f, 0.012139f, 0.001527f, 0.011221f, -0.000683f, -0.002628f, 0.006452f, 0.010627f, -0.015145f, -0.007266f, 0.004157f, -0.003443f, 0.003740f, -0.009964f, -0.000699f, 0.002628f, 0.003617f, -0.008514f, -0.015381f, -0.004388f, 0.004520f, -0.002660f, -0.001917f, 0.000882f, 0.005005f, -0.001580f, 0.002790f, -0.005249f, 0.008961f, -0.011787f, -0.008744f, -0.003128f, -0.008565f, -0.002638f, -0.002295f, 0.003360f, -0.006276f, 0.004698f, 0.009729f, -0.000907f, 0.002307f, 0.002547f, 0.004684f, 0.009406f, -0.003573f, -0.001890f, -0.001766f, -0.004004f, 0.009894f, -0.004086f, -0.017145f, -0.011044f, -0.007225f, 0.016426f, 0.000321f, 0.009389f, 0.004379f, 0.001353f, 0.002594f, -0.001224f, -0.000332f, 0.007862f, -0.002602f, -0.001896f, 0.002612f, -0.001479f, 0.001319f, -0.003647f, -0.002117f, 0.001731f, -0.000439f, 0.001912f, -0.000470f, 0.001089f, 0.003024f, 0.002044f, 0.002830f, -0.000078f, 0.001985f, -0.000529f, 0.002900f, 0.003033f, 0.005136f, 0.003085f, 0.004087f, 0.000856f, 0.002744f, 0.002216f, 0.001720f, 0.002309f, 0.003396f, -0.001621f, 0.000310f, + -0.000761f, -0.001377f, 0.001278f, 0.002028f, -0.004118f, -0.015590f, -0.036245f, -0.003374f, 0.002511f, 0.000396f, -0.011751f, -0.005194f, -0.013336f, -0.003427f, -0.015729f, -0.018006f, -0.014079f, -0.003252f, -0.009326f, -0.020292f, -0.012705f, 0.004220f, 0.006285f, -0.005593f, 0.012219f, 0.006778f, -0.004518f, 0.015086f, 0.003229f, 0.001266f, 0.002425f, -0.020601f, -0.000755f, 0.003456f, 0.007769f, -0.006460f, -0.005740f, 0.012311f, 0.023910f, -0.017861f, 0.006439f, -0.005237f, -0.000920f, -0.015738f, -0.001385f, -0.000154f, -0.008035f, -0.010173f, -0.007403f, -0.008650f, -0.004615f, 0.005186f, 0.017558f, -0.008173f, 0.006589f, 0.011889f, 0.010743f, -0.003597f, 0.001222f, -0.003815f, -0.003401f, -0.016154f, -0.008003f, 0.009200f, -0.005827f, 0.002019f, -0.005562f, 0.004653f, 0.002465f, -0.001756f, -0.000602f, -0.007521f, -0.006216f, 0.001450f, -0.002237f, 0.003355f, -0.019137f, -0.020225f, -0.002166f, -0.002930f, -0.008688f, -0.000013f, 0.006442f, -0.009925f, -0.007648f, -0.008457f, -0.014721f, 0.010457f, -0.001050f, -0.002172f, 0.004022f, -0.000539f, 0.003612f, 0.006915f, 0.002409f, 0.003861f, + 0.002209f, 0.005093f, -0.001487f, 0.000950f, 0.000846f, 0.001197f, 0.001701f, -0.001271f, -0.001224f, 0.000330f, 0.001592f, 0.002003f, -0.001212f, 0.001652f, -0.001777f, -0.003414f, 0.001924f, 0.001417f, -0.001329f, 0.004579f, 0.002095f, 0.000357f, 0.001794f, -0.002689f, -0.002917f, -0.000722f, -0.001522f, -0.001180f, -0.022508f, -0.004434f, -0.027103f, -0.006079f, -0.019200f, -0.002295f, 0.003625f, 0.004887f, 0.020853f, -0.013009f, 0.004671f, 0.005626f, -0.011301f, -0.005108f, 0.016782f, 0.001777f, -0.004888f, 0.002105f, -0.013801f, 0.012531f, -0.017687f, -0.005848f, 0.007905f, 0.004909f, -0.001829f, 0.003021f, -0.003482f, 0.005796f, -0.007539f, -0.013297f, 0.000921f, 0.006431f, 0.005280f, -0.010634f, 0.002963f, 0.011948f, -0.012273f, -0.015578f, 0.012431f, -0.010624f, 0.008122f, -0.007647f, 0.004539f, -0.000317f, -0.011037f, -0.014386f, -0.008841f, 0.003916f, -0.000558f, 0.005371f, -0.007497f, -0.007332f, -0.018344f, 0.009570f, -0.013144f, -0.006021f, 0.007166f, 0.016292f, -0.002097f, -0.003386f, -0.024018f, -0.018941f, -0.006295f, -0.006754f, 0.009056f, -0.002565f, -0.014063f, -0.002261f, + 0.000761f, -0.007837f, -0.001908f, -0.016824f, 0.011225f, 0.004351f, 0.014151f, 0.017256f, 0.009115f, 0.000702f, 0.007536f, 0.015392f, -0.001264f, -0.003557f, -0.001036f, -0.004716f, -0.015289f, 0.000846f, 0.001149f, 0.003290f, 0.008220f, -0.003343f, 0.001831f, -0.000016f, -0.006003f, -0.003269f, 0.005617f, 0.005377f, 0.005114f, -0.003931f, 0.001556f, 0.002112f, 0.001964f, 0.001876f, 0.002262f, 0.000730f, 0.004281f, 0.004223f, 0.002901f, -0.000868f, 0.001985f, -0.000735f, 0.001706f, 0.003045f, 0.001106f, 0.001222f, 0.000096f, -0.001065f, -0.000933f, -0.000071f, -0.002636f, -0.001244f, 0.013369f, 0.007007f, 0.038825f, 0.018783f, 0.025153f, -0.007783f, -0.000957f, -0.000420f, -0.038293f, 0.002007f, 0.016548f, -0.007593f, -0.002952f, 0.001311f, 0.024170f, -0.004098f, 0.014012f, -0.002872f, 0.013420f, 0.007354f, 0.016569f, 0.023254f, 0.003013f, 0.015523f, -0.004790f, 0.013433f, -0.001801f, 0.024885f, 0.013265f, -0.000429f, 0.014184f, 0.011427f, -0.004176f, 0.010907f, 0.006589f, 0.009416f, -0.007437f, -0.005992f, -0.020106f, -0.001246f, 0.014279f, 0.002730f, 0.001829f, -0.004699f, + -0.007514f, -0.006024f, -0.006624f, 0.035017f, -0.022523f, 0.008914f, 0.010654f, 0.006017f, 0.003037f, -0.013471f, -0.017880f, -0.004599f, -0.002659f, -0.000854f, -0.030987f, -0.015400f, -0.015928f, 0.000733f, -0.000730f, 0.009184f, -0.001016f, 0.008154f, 0.010985f, 0.019815f, 0.003644f, -0.005148f, 0.006674f, -0.012533f, 0.003413f, -0.009205f, 0.003333f, 0.007638f, 0.004335f, 0.012600f, -0.008550f, -0.009753f, 0.045469f, 0.006180f, 0.008239f, 0.005704f, 0.015420f, -0.010981f, -0.005671f, 0.009660f, -0.001152f, -0.000327f, 0.001763f, 0.003134f, 0.008887f, -0.004494f, -0.000711f, 0.001611f, 0.005100f, 0.001098f, -0.004738f, 0.008558f, 0.000283f, -0.002121f, 0.000157f, -0.001086f, -0.004667f, -0.004421f, -0.002074f, -0.004910f, -0.000060f, -0.001985f, 0.002051f, 0.006087f, -0.000627f, -0.000712f, -0.006867f, -0.001544f, 0.003309f, -0.000866f, 0.000347f, 0.000511f, 0.005300f, -0.002901f, -0.000869f, 0.001601f, 0.001955f, -0.006072f, 0.059482f, 0.006414f, 0.008850f, 0.006735f, -0.003733f, -0.024086f, 0.016261f, 0.017233f, -0.009657f, 0.007577f, 0.007715f, -0.014409f, -0.002047f, 0.014224f, + 0.008115f, -0.025411f, 0.006463f, -0.006821f, -0.013069f, -0.000137f, 0.007467f, 0.002202f, -0.000261f, -0.000291f, 0.010994f, -0.003244f, 0.006196f, -0.019704f, 0.007972f, -0.001829f, 0.007829f, 0.004727f, -0.003632f, 0.014421f, -0.019354f, -0.008095f, -0.019112f, 0.016883f, 0.007879f, 0.027391f, 0.013426f, 0.000179f, 0.005837f, -0.021734f, -0.000182f, 0.006705f, 0.007025f, 0.006986f, 0.001476f, 0.004170f, -0.005817f, 0.006569f, 0.019502f, 0.026554f, 0.011370f, -0.011637f, -0.006578f, -0.002380f, -0.005177f, 0.010099f, 0.013279f, -0.008866f, 0.007861f, 0.015011f, 0.004515f, -0.019878f, -0.039931f, -0.019358f, 0.008030f, 0.017855f, -0.007517f, 0.005632f, -0.001499f, -0.003274f, -0.000128f, 0.018645f, 0.003358f, -0.014628f, 0.024695f, 0.011605f, -0.028602f, 0.001779f, -0.003426f, -0.008742f, -0.003192f, -0.003872f, -0.000002f, 0.010411f, 0.004192f, -0.007215f, -0.004078f, 0.006386f, 0.010691f, -0.004217f, 0.008142f, 0.002639f, -0.006620f, -0.001165f, 0.001097f, 0.000835f, -0.001207f, 0.001156f, -0.003257f, -0.001815f, 0.002418f, 0.001280f, -0.002880f, -0.002533f, 0.000249f, -0.001395f, + -0.004807f, 0.003682f, -0.001629f, -0.001880f, 0.001459f, 0.005762f, -0.005375f, -0.007937f, 0.000024f, -0.000546f, -0.012572f, -0.001459f, 0.003260f, 0.000741f, -0.007540f, -0.000145f, -0.002711f, 0.003236f, 0.001924f, 0.004795f, 0.003281f, -0.036389f, 0.010853f, 0.017442f, -0.019643f, 0.012752f, 0.021206f, -0.051833f, 0.011112f, 0.002358f, 0.011294f, -0.019243f, 0.029244f, -0.040862f, -0.000474f, -0.002788f, -0.003473f, -0.004054f, -0.012054f, -0.015348f, -0.002661f, 0.014854f, 0.001388f, 0.000568f, -0.007943f, 0.010508f, -0.001736f, -0.004897f, 0.007680f, 0.018308f, -0.012149f, 0.013256f, -0.002501f, 0.008122f, 0.003860f, 0.012469f, 0.018718f, -0.004164f, 0.004835f, -0.024207f, -0.012345f, -0.004839f, -0.009364f, -0.022022f, 0.002271f, -0.007883f, -0.014583f, 0.021563f, -0.020128f, -0.006446f, -0.009557f, -0.010587f, 0.014462f, -0.016325f, 0.009153f, -0.005549f, 0.014864f, -0.007657f, 0.016290f, -0.021409f, -0.006280f, 0.003066f, 0.019753f, -0.034716f, -0.013321f, 0.001593f, -0.000140f, -0.005919f, 0.013797f, -0.017843f, -0.035739f, 0.008048f, -0.031404f, 0.016179f, -0.011333f, 0.000443f, + -0.032830f, -0.012431f, 0.035019f, 0.020268f, -0.026691f, -0.021800f, -0.018971f, 0.001465f, 0.010461f, -0.004251f, -0.012082f, 0.023270f, 0.007944f, -0.003651f, -0.005232f, -0.008220f, -0.002044f, 0.009368f, -0.008664f, 0.010046f, -0.001413f, -0.006294f, 0.000936f, -0.004714f, 0.003244f, 0.008559f, -0.005165f, 0.004022f, 0.005664f, 0.004647f, -0.001040f, 0.009894f, -0.009343f, 0.009369f, -0.002872f, 0.008297f, -0.010824f, -0.005001f, 0.001203f, 0.001128f, 0.010491f, 0.004101f, 0.006154f, -0.003217f, -0.006607f, 0.004049f, -0.012375f, -0.000706f, -0.026962f, -0.011574f, 0.033968f, 0.001429f, -0.028010f, 0.026366f, -0.012342f, 0.001746f, -0.029208f, 0.004483f, 0.011586f, -0.025781f, -0.006290f, -0.023043f, -0.000159f, 0.001452f, -0.007759f, -0.006410f, 0.022489f, 0.003443f, -0.015228f, 0.003802f, -0.032631f, 0.019594f, 0.031099f, -0.010076f, 0.012989f, 0.022039f, -0.001645f, -0.004526f, 0.002716f, 0.002658f, 0.012924f, 0.002184f, 0.002989f, 0.006763f, -0.018242f, -0.001336f, -0.020971f, -0.021451f, -0.008790f, 0.008986f, 0.012725f, -0.000694f, -0.025232f, 0.004951f, 0.006616f, 0.012394f, + 0.026976f, -0.027681f, 0.040483f, -0.033593f, 0.001479f, -0.006785f, -0.005822f, -0.016256f, -0.031157f, -0.042050f, -0.016307f, -0.004832f, 0.010700f, -0.003209f, 0.001737f, 0.006165f, -0.000315f, 0.029581f, 0.013995f, -0.030389f, -0.004749f, -0.000640f, 0.019369f, -0.021010f, 0.001389f, -0.042323f, 0.007912f, 0.033030f, -0.029557f, -0.011620f, 0.004170f, -0.000343f, 0.008251f, 0.046292f, 0.000677f, -0.006133f, 0.002393f, 0.023557f, -0.016030f, 0.006292f, 0.008600f, -0.003523f, -0.001734f, -0.000335f, -0.000645f, 0.010472f, -0.003458f, -0.002436f, -0.009113f, 0.015259f, -0.003340f, 0.004473f, 0.001509f, 0.002664f, 0.003787f, 0.011087f, -0.007770f, -0.002017f, 0.011745f, -0.008577f, -0.012084f, 0.009908f, 0.000444f, 0.004820f, 0.006662f, 0.003746f, 0.012144f, -0.009511f, 0.005628f, 0.006701f, -0.004264f, 0.017203f, 0.005869f, 0.010509f, 0.003815f, -0.010422f, -0.003845f, -0.001801f, -0.001862f, -0.001882f, -0.017342f, -0.035178f, 0.042048f, 0.017965f, -0.020607f, 0.027299f, 0.027314f, 0.038798f, -0.014312f, -0.013394f, 0.028316f, -0.004163f, -0.005607f, 0.009875f, 0.012588f, 0.005031f, + 0.006019f, -0.038589f, -0.004103f, 0.000124f, 0.000318f, 0.002141f, -0.004370f, 0.016377f, 0.031735f, 0.003226f, 0.002163f, -0.000528f, 0.001510f, 0.029250f, 0.007758f, -0.002047f, -0.006395f, 0.007500f, 0.006457f, -0.004573f, 0.003344f, -0.016670f, -0.003496f, 0.025438f, -0.025246f, -0.012251f, -0.021775f, 0.028421f, -0.026050f, 0.013061f, -0.010678f, 0.008369f, -0.005678f, 0.006751f, -0.020938f, 0.004800f, 0.031551f, -0.020771f, 0.001628f, -0.055106f, -0.002477f, -0.019468f, 0.001464f, -0.051436f, -0.002306f, -0.002535f, -0.015899f, -0.011056f, 0.041954f, -0.045071f, 0.007481f, -0.012192f, -0.016854f, 0.012110f, -0.015291f, -0.035216f, -0.024737f, 0.003399f, 0.001811f, 0.007247f, -0.017492f, -0.023725f, 0.013446f, 0.001113f, 0.002583f, 0.015758f, -0.026341f, 0.019665f, -0.019180f, -0.009012f, -0.008283f, 0.004642f, 0.000614f, 0.005577f, -0.003468f, -0.006759f, 0.001566f, -0.003871f, 0.005459f, 0.012205f, 0.007064f, 0.004449f, 0.003380f, 0.003249f, 0.003159f, -0.001400f, 0.013244f, 0.002441f, -0.002662f, 0.009861f, 0.010117f, 0.003725f, -0.005794f, -0.000680f, -0.008403f, 0.013179f, + 0.004592f, 0.010569f, -0.005367f, 0.010844f, 0.009642f, 0.014228f, 0.006918f, -0.004207f, -0.007656f, 0.011923f, 0.002296f, 0.010285f, 0.002206f, 0.002644f, 0.002579f, 0.002932f, 0.035269f, 0.012416f, -0.004658f, 0.007635f, -0.017667f, -0.018603f, -0.015263f, 0.034374f, -0.030702f, -0.038148f, 0.018297f, -0.035490f, 0.013192f, 0.001420f, 0.009702f, -0.015835f, -0.003815f, -0.019283f, -0.008184f, -0.014870f, 0.007212f, 0.017725f, 0.012208f, -0.028633f, 0.033382f, 0.004111f, 0.011677f, 0.003115f, 0.016086f, -0.003384f, 0.015453f, 0.003859f, -0.006871f, 0.009926f, 0.003611f, 0.013132f, 0.009005f, -0.021703f, 0.008765f, -0.006308f, 0.006160f, -0.004359f, -0.008101f, -0.006659f, -0.015270f, 0.014327f, 0.015270f, 0.016030f, -0.002969f, 0.029261f, 0.034880f, 0.014033f, 0.004579f, 0.015908f, 0.036152f, 0.017922f, 0.039436f, 0.025412f, 0.029399f, -0.031505f, -0.031792f, 0.006550f, -0.006450f, -0.008479f, 0.002483f, -0.015836f, 0.013224f, 0.009970f, 0.006217f, 0.030104f, -0.007055f, -0.019346f, -0.016279f, -0.014286f, 0.003492f, -0.006773f, -0.064477f, -0.027973f, -0.025099f, -0.009044f, + -0.013037f, -0.006697f, -0.009787f, -0.018230f, 0.000665f, -0.010928f, -0.010548f, 0.004353f, -0.010583f, -0.003244f, -0.016265f, 0.001041f, 0.000836f, -0.002482f, -0.023175f, 0.009654f, -0.000081f, 0.001208f, -0.017439f, 0.005376f, 0.006171f, 0.006837f, 0.001883f, 0.020349f, -0.013095f, -0.004852f, 0.004105f, 0.002359f, -0.001502f, 0.008487f, -0.009284f, -0.007699f, -0.001717f, 0.014510f, -0.001506f, 0.010609f, 0.011850f, -0.002369f, -0.014982f, -0.013196f, -0.001662f, 0.015157f, 0.001109f, -0.010510f, 0.001468f, -0.002147f, -0.007337f, -0.005228f, -0.002369f, 0.001074f, -0.011221f, -0.009256f, 0.028680f, 0.019479f, -0.062808f, -0.046389f, -0.014445f, -0.000606f, 0.020701f, -0.008637f, -0.001473f, -0.050009f, 0.007081f, -0.026207f, 0.018706f, -0.003668f, 0.024783f, -0.021282f, -0.005282f, -0.025253f, 0.004383f, 0.020498f, -0.009828f, 0.005929f, -0.014418f, 0.001000f, -0.033745f, -0.009456f, -0.001613f, 0.002321f, 0.025050f, 0.032458f, 0.001151f, -0.030036f, -0.021025f, -0.009803f, 0.003092f, -0.008050f, 0.009543f, -0.034525f, -0.010646f, -0.004878f, -0.008897f, -0.019483f, -0.004500f, -0.009085f, + 0.023435f, 0.033773f, 0.022949f, 0.008173f, 0.014036f, 0.014027f, -0.016336f, 0.056524f, 0.034452f, -0.044975f, -0.038655f, 0.041449f, -0.032730f, -0.019172f, 0.006484f, 0.004353f, -0.031766f, 0.030566f, 0.002071f, -0.096375f, 0.025790f, 0.060014f, -0.041674f, 0.041250f, 0.055682f, -0.018850f, -0.005692f, 0.029371f, -0.034654f, -0.023352f, 0.011662f, -0.019275f, -0.021646f, 0.024834f, -0.042059f, -0.013198f, 0.005485f, 0.000574f, 0.002465f, -0.004467f, 0.015510f, -0.011448f, 0.006669f, 0.001847f, -0.011127f, 0.021868f, 0.011456f, -0.001172f, -0.014164f, 0.016759f, -0.010748f, 0.012825f, -0.011447f, 0.015695f, 0.001727f, 0.002882f, 0.016414f, -0.013156f, -0.014197f, 0.003819f, -0.013097f, -0.008573f, -0.000588f, 0.000919f, -0.008715f, -0.016249f, 0.007496f, -0.037491f, -0.000001f, 0.016533f, -0.013647f, 0.009524f, -0.004179f, 0.004524f, -0.015495f, -0.000154f, 0.008488f, -0.007788f, 0.005557f, 0.032675f, -0.014795f, -0.014465f, 0.032666f, -0.024180f, -0.003974f, 0.026907f, -0.019597f, -0.012396f, 0.020599f, 0.012720f, 0.013509f, -0.003333f, -0.020223f, -0.016145f, 0.019014f, -0.015185f, + -0.001445f, 0.005667f, -0.028597f, 0.018589f, 0.015128f, -0.011562f, -0.009408f, -0.022295f, 0.000539f, -0.013795f, 0.019206f, -0.031307f, 0.002316f, 0.011996f, -0.001738f, -0.014898f, -0.032523f, -0.007308f, -0.014196f, -0.003165f, -0.025191f, 0.034234f, -0.033527f, 0.005845f, -0.012248f, 0.008599f, -0.047452f, 0.048802f, 0.009187f, 0.004865f, -0.019631f, 0.011113f, 0.007853f, 0.002116f, 0.004337f, -0.008739f, -0.037478f, -0.006500f, -0.016289f, -0.023993f, -0.032222f, -0.011617f, -0.008213f, -0.031929f, -0.012333f, -0.001528f, 0.021920f, 0.010120f, -0.029011f, -0.025286f, 0.015421f, -0.006679f, -0.036799f, -0.015873f, 0.008870f, 0.030117f, 0.029849f, 0.030425f, 0.048527f, -0.009430f, -0.033158f, -0.031623f, -0.002158f, 0.021298f, 0.037751f, 0.016955f, 0.007983f, -0.038756f, 0.021597f, 0.008006f, 0.036805f, 0.025583f, 0.016576f, 0.012560f, -0.000180f, 0.003167f, 0.021573f, -0.005294f, 0.001321f, 0.003724f, 0.006079f, 0.007346f, 0.006782f, 0.010374f, 0.025903f, 0.008070f, 0.001656f, 0.008834f, -0.000901f, 0.008223f, 0.002132f, 0.001371f, 0.015937f, -0.019891f, -0.014329f, -0.005405f, + 0.007005f, -0.010176f, 0.006124f, -0.004564f, 0.020076f, 0.000551f, 0.003023f, -0.010897f, -0.013676f, 0.000928f, 0.011493f, -0.011484f, -0.001712f, 0.013574f, -0.011857f, -0.000914f, 0.006006f, -0.020042f, 0.023649f, 0.012712f, -0.004828f, 0.005518f, -0.001454f, -0.000533f, -0.006374f, 0.013396f, 0.022623f, 0.061227f, -0.054004f, -0.001561f, -0.021549f, -0.028568f, -0.017149f, 0.028019f, -0.015378f, -0.016630f, 0.014299f, 0.036084f, 0.022651f, -0.027071f, 0.017436f, -0.028406f, 0.020833f, 0.001186f, -0.003268f, -0.013728f, -0.021268f, -0.017062f, 0.003521f, 0.003927f, -0.033598f, 0.021314f, 0.003437f, -0.002979f, -0.012807f, -0.014174f, 0.023729f, -0.032482f, -0.001621f, 0.035473f, 0.041551f, -0.037253f, -0.002585f, -0.007341f, -0.024266f, -0.031183f, 0.034109f, 0.007875f, 0.021648f, -0.006611f, 0.002560f, -0.002854f, 0.021549f, -0.008326f, 0.001070f, -0.026699f, 0.038349f, 0.032186f, -0.046985f, -0.057179f, -0.012255f, 0.000823f, -0.018973f, 0.002068f, -0.014131f, 0.004542f, -0.029202f, 0.030999f, -0.037513f, -0.032585f, -0.012337f, 0.005592f, 0.025690f, -0.013289f, 0.037278f, 0.004153f, + -0.013481f, -0.012564f, -0.009941f, -0.023312f, 0.022663f, 0.017264f, -0.006320f, 0.014648f, 0.011176f, -0.018167f, -0.018548f, -0.015345f, 0.028859f, 0.007955f, -0.020876f, 0.003059f, 0.008044f, 0.010201f, -0.031070f, 0.016386f, 0.012229f, 0.006454f, -0.000455f, -0.008044f, 0.003991f, -0.008844f, -0.027659f, 0.006418f, -0.003795f, -0.004269f, -0.003356f, 0.003464f, -0.008477f, -0.009750f, -0.000705f, -0.003032f, 0.013623f, -0.006536f, -0.003952f, 0.008766f, -0.003809f, -0.012132f, 0.010734f, -0.012077f, -0.004344f, -0.021652f, 0.011920f, 0.003300f, -0.003330f, 0.004916f, -0.010214f, 0.020979f, -0.001381f, 0.004378f, 0.022525f, 0.017209f, -0.006368f, -0.006362f, 0.010802f, 0.007135f, -0.007842f, 0.005421f, -0.007195f, -0.005490f, -0.001437f, 0.006186f, -0.082865f, 0.122767f, -0.084348f, -0.021576f, 0.022213f, 0.066278f, 0.053880f, -0.019938f, -0.021576f, 0.003463f, 0.003077f, 0.034143f, 0.012609f, -0.045328f, 0.013584f, -0.009868f, -0.015898f, 0.004350f, 0.018521f, -0.000357f, -0.033920f, -0.030022f, 0.015839f, 0.012818f, 0.020975f, -0.011596f, 0.025964f, 0.005924f, 0.030452f, -0.003293f, + -0.010375f, 0.022394f, -0.002714f, -0.024225f, 0.004212f, 0.027837f, -0.001184f, -0.032083f, 0.015873f, 0.037045f, -0.034257f, 0.013378f, -0.036799f, 0.014419f, -0.046503f, -0.030550f, 0.051258f, 0.047616f, 0.022475f, 0.062054f, -0.011918f, 0.074109f, 0.027644f, 0.028477f, 0.039930f, -0.067424f, 0.056763f, 0.019209f, 0.022993f, 0.026018f, 0.006318f, -0.033005f, 0.005414f, 0.062501f, 0.071448f, -0.001027f, -0.080739f, 0.039539f, 0.002271f, 0.016713f, -0.002710f, 0.001723f, -0.017512f, -0.061115f, 0.012401f, -0.010328f, 0.013832f, -0.011564f, 0.030284f, -0.034460f, -0.036600f, -0.026059f, 0.005466f, -0.011369f, -0.016383f, 0.019419f, 0.007898f, -0.026541f, -0.027679f, -0.022264f, -0.016214f, -0.003207f, -0.004168f, 0.014249f, -0.000180f, -0.022818f, 0.018056f, 0.003223f, -0.005302f, 0.000672f, 0.009059f, -0.011560f, -0.005233f, 0.010845f, -0.019437f, -0.008747f, -0.013164f, 0.011226f, 0.014912f, -0.016951f, 0.005395f, -0.044859f, 0.001401f, 0.001813f, 0.002998f, -0.009072f, -0.007751f, -0.020464f, -0.014456f, 0.009798f, 0.007236f, 0.009374f, 0.016284f, -0.015226f, 0.001983f, 0.005619f, + 0.004776f, -0.014941f, 0.000928f, 0.003213f, 0.000363f, -0.012352f, -0.000820f, 0.081324f, -0.003119f, -0.096436f, -0.048938f, -0.056714f, -0.021838f, 0.000645f, 0.031740f, -0.082175f, -0.018563f, 0.013098f, -0.038500f, -0.044040f, -0.040371f, -0.043965f, -0.007244f, 0.048846f, 0.024870f, -0.019154f, 0.023255f, 0.009743f, -0.022460f, 0.025275f, -0.028335f, -0.006092f, 0.011588f, 0.016775f, -0.056136f, 0.028265f, -0.027711f, 0.016173f, -0.011197f, -0.044813f, 0.012291f, 0.014108f, 0.006742f, 0.007528f, -0.018889f, -0.063679f, 0.002358f, 0.013306f, 0.013660f, 0.000764f, 0.007710f, -0.026373f, -0.000576f, -0.002149f, 0.057676f, -0.008815f, -0.095574f, -0.042961f, -0.010641f, -0.079082f, 0.017731f, -0.024110f, -0.020511f, -0.038089f, -0.017400f, -0.056932f, -0.056187f, -0.068483f, -0.007156f, 0.072186f, 0.009566f, -0.045620f, 0.020672f, 0.000662f, -0.005430f, -0.025660f, -0.036469f, 0.015166f, 0.029319f, 0.022625f, 0.011888f, -0.013675f, -0.058856f, -0.041702f, -0.059260f, 0.008637f, 0.005992f, -0.002081f, 0.020455f, -0.031023f, -0.037966f, -0.005324f, -0.014424f, -0.038339f, 0.007780f, 0.022000f, + 0.002445f, 0.008014f, 0.036191f, -0.006693f, -0.008301f, -0.006367f, 0.001728f, -0.013286f, -0.008047f, 0.016367f, 0.024423f, 0.027413f, 0.017768f, -0.007712f, 0.000455f, 0.004187f, -0.012297f, 0.025356f, -0.011263f, 0.037047f, -0.013923f, 0.017319f, -0.018607f, -0.005083f, 0.036849f, 0.012368f, 0.004262f, -0.000338f, -0.015709f, 0.014702f, 0.002284f, -0.018543f, 0.007343f, -0.015899f, -0.021204f, 0.005661f, 0.005035f, -0.012677f, -0.013175f, 0.012676f, -0.000362f, 0.017894f, 0.002831f, 0.012118f, -0.007811f, 0.005223f, 0.003993f, 0.053071f, -0.005838f, 0.042437f, 0.055868f, -0.047313f, -0.058176f, -0.062278f, 0.016758f, 0.021138f, -0.084164f, -0.049447f, 0.002244f, 0.001913f, 0.026069f, -0.099044f, 0.011096f, 0.022260f, 0.068896f, -0.079444f, 0.009918f, 0.012425f, -0.009263f, 0.043009f, -0.024482f, 0.075759f, -0.003613f, 0.006204f, 0.023590f, 0.029109f, -0.028241f, -0.062129f, 0.036495f, 0.042982f, 0.010629f, 0.054523f, 0.011283f, -0.007513f, -0.019978f, -0.047075f, 0.072677f, -0.032756f, 0.068918f, 0.026470f, -0.004425f, 0.019705f, -0.028246f, 0.036428f, 0.037152f, -0.025979f, + 0.027804f, 0.013376f, -0.070945f, 0.051710f, 0.053787f, -0.007173f, -0.035834f, 0.006457f, -0.001073f, 0.001877f, -0.012184f, 0.098156f, -0.001118f, -0.057659f, -0.031330f, 0.010758f, -0.081840f, -0.108591f, 0.015568f, 0.134908f, 0.030683f, -0.009961f, -0.085640f, -0.022332f, -0.013553f, 0.091828f, -0.062266f, -0.040799f, -0.151094f, -0.022382f, -0.026962f, -0.036166f, -0.027628f, 0.055458f, 0.060489f, -0.059749f, -0.022158f, 0.019236f, 0.009187f, -0.011210f, 0.025430f, -0.010790f, -0.017782f, -0.019023f, 0.022090f, 0.008088f, 0.007873f, -0.007890f, 0.021722f, -0.021669f, -0.006177f, 0.017916f, 0.009520f, -0.001521f, 0.000304f, -0.016234f, 0.008881f, -0.010869f, 0.040578f, -0.011072f, -0.020189f, -0.017845f, -0.032441f, -0.011719f, 0.027281f, 0.029087f, 0.081431f, 0.030219f, -0.007736f, -0.061360f, -0.083098f, -0.039817f, 0.002698f, 0.034320f, 0.029438f, -0.022779f, -0.032137f, -0.017318f, -0.012240f, 0.020729f, 0.037942f, 0.007824f, 0.003680f, -0.004772f, -0.011305f, -0.011183f, -0.134865f, 0.039154f, 0.065275f, -0.086858f, -0.007425f, 0.048685f, -0.020569f, -0.039084f, 0.035314f, -0.037712f, + -0.020218f, 0.002859f, -0.027937f, 0.045787f, -0.015011f, -0.020931f, -0.007559f, 0.024185f, 0.083297f, -0.012922f, -0.037723f, -0.042638f, 0.015807f, 0.039588f, 0.024133f, -0.037690f, -0.005483f, 0.045055f, 0.001668f, -0.034168f, 0.011769f, -0.030503f, 0.077068f, -0.034694f, -0.082575f, 0.028616f, -0.013524f, 0.039564f, -0.055176f, -0.054775f, 0.055371f, -0.004494f, -0.070749f, -0.037919f, -0.067581f, 0.087993f, 0.042907f, 0.023664f, -0.092349f, 0.016400f, 0.038742f, -0.065171f, 0.004280f, -0.046853f, -0.034991f, 0.036225f, -0.031064f, 0.041581f, -0.025583f, -0.056661f, -0.012307f, -0.014145f, -0.007910f, 0.019288f, 0.007237f, -0.035473f, 0.110213f, -0.013692f, 0.049160f, 0.049694f, 0.030880f, -0.015170f, 0.012055f, -0.025149f, 0.062212f, 0.014953f, -0.015068f, 0.007110f, 0.026721f, 0.042547f, -0.010150f, -0.093439f, -0.005823f, 0.028718f, -0.008765f, 0.048854f, -0.020343f, 0.016623f, -0.006993f, 0.000916f, 0.020754f, 0.004527f, 0.012823f, 0.024703f, 0.015356f, 0.028732f, -0.006523f, 0.009047f, 0.015880f, 0.001588f, -0.029472f, 0.035421f, -0.014441f, -0.000244f, 0.005989f, -0.018404f, + 0.009663f, 0.001364f, -0.004350f, 0.024453f, -0.010856f, 0.001330f, 0.036446f, -0.000895f, 0.020468f, -0.018153f, -0.010987f, 0.018915f, -0.004209f, -0.013962f, -0.018522f, 0.000417f, 0.002897f, 0.003934f, -0.005992f, 0.004028f, 0.011539f, -0.004673f, 0.097570f, 0.020355f, 0.042106f, -0.003329f, 0.009957f, 0.015770f, -0.035871f, 0.015943f, 0.033868f, 0.000604f, -0.041233f, -0.021631f, -0.030666f, -0.012172f, -0.041324f, -0.039340f, 0.004659f, -0.031301f, 0.046042f, 0.015287f, -0.011099f, -0.033275f, -0.016400f, -0.010755f, 0.024662f, -0.007419f, -0.039101f, -0.031743f, 0.007810f, 0.008627f, 0.021931f, 0.008735f, -0.008875f, 0.010628f, -0.034141f, -0.102712f, 0.003986f, 0.125296f, -0.003989f, -0.090560f, -0.015094f, 0.059802f, 0.016241f, 0.010025f, -0.002010f, -0.039153f, -0.049517f, -0.029095f, 0.010867f, -0.002695f, -0.045829f, 0.017135f, -0.091836f, -0.016033f, 0.084409f, 0.025288f, 0.108678f, -0.013986f, -0.043359f, -0.012630f, -0.009941f, 0.029556f, 0.006007f, -0.000446f, -0.059802f, -0.029537f, -0.028781f, -0.003634f, 0.068663f, -0.008894f, -0.017223f, 0.023095f, 0.027606f, 0.004870f, + -0.037077f, -0.056927f, -0.004496f, 0.023634f, -0.002903f, -0.028045f, -0.007643f, 0.016439f, -0.012418f, -0.010287f, -0.019127f, 0.035039f, 0.036180f, -0.017936f, -0.009987f, -0.016441f, 0.014499f, 0.021996f, -0.010358f, 0.003563f, -0.004195f, -0.002554f, -0.007195f, -0.026957f, 0.002650f, 0.016112f, -0.016988f, 0.004565f, -0.004369f, 0.001703f, -0.015249f, -0.004540f, -0.006632f, -0.009285f, -0.011660f, -0.011121f, -0.003663f, 0.049435f, -0.024669f, 0.000773f, -0.009937f, 0.003178f, 0.026721f, -0.017802f, -0.002929f, -0.004745f, 0.008181f, -0.000771f, 0.007414f, -0.013552f, -0.043171f, -0.144375f, -0.222360f, 0.052273f, 0.199479f, 0.062624f, 0.487611f, 0.458819f, 0.204428f, 0.473100f, 0.200180f, -0.086074f, -0.001192f, -0.142615f, -0.389207f, -0.212877f, -0.203691f, -0.399397f, -0.290366f, -0.167156f, -0.251186f, -0.169320f, 0.037023f, -0.014939f, -0.080219f, 0.095037f, 0.089318f, -0.000661f, 0.095736f, 0.258977f, 0.109074f, 0.048547f, 0.248405f, 0.221769f, 0.074829f, 0.264238f, 0.323893f, -0.000814f, 0.191968f, 0.326000f, 0.123810f, 0.130144f, 0.332872f, 0.198420f, -0.026108f, 0.259302f, + 0.182444f, -0.071107f, 0.102134f, 0.206180f, -0.092251f, -0.164220f, -0.036814f, -0.346707f, -0.581270f, -0.563271f, -0.625726f, -1.001658f, -0.866514f, -0.715360f, -0.926421f, -0.794822f, -0.510352f, -0.605542f, -0.462344f, -0.128386f, -0.041171f, 0.195494f, 0.364744f, 0.600649f, 0.805387f, 0.877962f, 1.024662f, 1.112340f, 1.039608f, 0.984164f, 1.044645f, 0.794230f, 0.630174f, 0.747032f, 0.407789f, 0.064716f, 0.094243f, -0.151435f, -0.552153f, -0.464150f, -0.343011f, -0.495610f, -0.506269f, -0.316379f, -0.359504f, -0.453919f, -0.332308f, -0.302755f, -0.426533f, -0.383254f, -0.249605f, -0.318060f, -0.341036f, -0.112226f, -0.107436f, -0.201904f, -0.021281f, 0.075952f, -0.057759f, 0.010167f, 0.075912f, -0.109339f, -0.140686f, -0.134140f, -0.292477f, -0.323546f, -0.226237f, -0.170644f, -0.124064f, 0.041057f, 0.197702f, 0.268255f, 0.381031f, 0.487777f, 0.509941f, 0.540362f, 0.598248f, 0.566790f, 0.515682f, 0.536524f, 0.486262f, 0.360798f, 0.247529f, 0.063928f, -0.096958f, -0.248161f, -0.360048f, -0.403971f, -0.425017f, -0.380076f, -0.291161f, -0.255944f, -0.215568f, -0.177357f, -0.152950f, -0.135737f, + -0.102010f, -0.080437f, -0.073900f, -0.073093f, -0.051707f, -0.040916f, -0.033194f, -0.015331f, 0.010235f, 0.031010f, 0.059291f, 0.059421f, 0.057100f, 0.050854f, 0.032928f, 0.012507f, 0.007024f, 0.000373f}, + {-0.001031f, 0.020775f, -0.010300f, 0.000820f, -0.006145f, -0.000472f, 0.008781f, 0.004167f, 0.005509f, -0.004806f, 0.006824f, -0.007055f, 0.007661f, 0.003830f, 0.009233f, 0.003900f, -0.001758f, -0.010426f, 0.011212f, 0.007732f, 0.002841f, 0.001320f, 0.001038f, -0.004430f, -0.005079f, 0.005801f, 0.003548f, 0.003791f, 0.005562f, -0.005657f, -0.000442f, 0.005227f, 0.006181f, -0.000805f, -0.004628f, -0.008777f, 0.000021f, 0.001642f, -0.005319f, 0.001988f, 0.001399f, -0.007911f, -0.004294f, -0.000600f, 0.004005f, 0.000093f, -0.003873f, 0.007392f, 0.001360f, -0.002496f, -0.005490f, -0.001214f, 0.000627f, -0.010330f, 0.004748f, 0.006479f, -0.003618f, 0.008296f, 0.006765f, -0.001071f, 0.005590f, 0.003326f, 0.010951f, 0.003465f, 0.002024f, -0.001700f, 0.004104f, -0.008824f, 0.001104f, 0.004246f, -0.004412f, 0.004860f, 0.005811f, 0.006435f, 0.003970f, 0.008454f, -0.001852f, -0.005115f, -0.002703f, -0.002156f, 0.001078f, -0.001940f, -0.006603f, 0.003124f, -0.003140f, -0.003439f, -0.004025f, 0.001530f, -0.000051f, -0.002002f, -0.001638f, 0.002630f, 0.000146f, -0.000285f, -0.000752f, -0.000241f, + 0.001182f, 0.001772f, -0.000335f, -0.000085f, -0.001539f, 0.000436f, -0.002730f, 0.000276f, 0.001739f, 0.002393f, -0.001745f, -0.001776f, 0.000358f, 0.001568f, -0.019711f, -0.013786f, -0.001963f, -0.008876f, -0.007597f, 0.003739f, -0.011226f, -0.010823f, 0.003114f, -0.004902f, -0.004400f, 0.004507f, -0.003546f, -0.007666f, -0.000839f, -0.000578f, -0.002171f, -0.003506f, -0.002075f, -0.008792f, -0.000553f, -0.006340f, -0.004593f, -0.000239f, 0.007858f, -0.001744f, 0.011358f, -0.005904f, 0.006821f, 0.007846f, -0.008815f, 0.003074f, -0.002239f, 0.001711f, -0.006244f, 0.003094f, 0.004024f, 0.006055f, -0.003118f, -0.007388f, -0.002585f, -0.004049f, 0.002355f, 0.002876f, -0.008978f, -0.001121f, -0.006170f, -0.004939f, 0.001669f, -0.007336f, -0.011777f, -0.002194f, 0.011534f, 0.002567f, 0.004026f, 0.000642f, 0.002638f, 0.001594f, 0.004234f, 0.004581f, 0.012936f, 0.000988f, -0.005775f, -0.007416f, -0.001617f, -0.003521f, -0.000978f, -0.015014f, 0.003096f, -0.001047f, 0.004778f, -0.001987f, 0.001312f, -0.003564f, -0.001784f, 0.014740f, 0.002928f, 0.013519f, -0.004604f, -0.002434f, 0.001006f, 0.003866f, + 0.001283f, 0.004604f, -0.004515f, 0.004998f, -0.005260f, -0.003214f, 0.002655f, 0.001972f, -0.000224f, 0.000269f, 0.000080f, -0.001099f, 0.000339f, -0.001962f, -0.000216f, -0.000651f, -0.000359f, 0.000912f, 0.000990f, -0.001068f, -0.001938f, -0.001143f, 0.000092f, 0.000115f, 0.000290f, 0.000673f, -0.000827f, -0.000828f, -0.000842f, 0.000250f, -0.000345f, 0.001090f, 0.016001f, 0.018501f, 0.014192f, 0.010580f, 0.014920f, 0.006087f, 0.006469f, -0.001338f, 0.004219f, 0.015755f, 0.001651f, 0.004822f, -0.005874f, -0.003873f, 0.012027f, -0.008065f, -0.014777f, 0.004486f, -0.012351f, 0.010658f, 0.002479f, 0.012784f, -0.004093f, -0.000780f, -0.003176f, 0.004215f, 0.005080f, -0.000160f, -0.012583f, -0.002570f, 0.010725f, -0.007139f, 0.004819f, 0.002865f, -0.002455f, -0.003076f, 0.011921f, 0.009029f, 0.020818f, 0.008362f, 0.001700f, 0.005009f, -0.001794f, 0.001282f, 0.006536f, 0.003930f, 0.017738f, -0.007597f, -0.005103f, 0.001251f, 0.004544f, -0.002786f, 0.008204f, -0.007704f, 0.001567f, -0.000497f, -0.005958f, 0.001853f, 0.001750f, -0.008020f, -0.010898f, -0.006715f, 0.008568f, 0.004176f, + 0.000001f, -0.000692f, 0.006457f, 0.000497f, 0.002117f, 0.011265f, 0.005520f, -0.002680f, -0.001829f, 0.010014f, -0.008717f, 0.001153f, -0.007862f, -0.003520f, -0.010151f, 0.002757f, -0.002142f, -0.005995f, -0.003966f, 0.005869f, 0.003581f, 0.001049f, 0.003410f, -0.005617f, -0.000981f, -0.000479f, 0.004314f, 0.000126f, 0.000272f, 0.000804f, 0.001261f, 0.003201f, 0.003553f, 0.002833f, 0.000181f, 0.001514f, 0.003212f, 0.000183f, -0.002994f, 0.002735f, -0.001539f, -0.000585f, 0.000627f, -0.000498f, 0.002349f, 0.002171f, 0.001049f, -0.000005f, -0.000869f, -0.000861f, 0.000987f, 0.001367f, 0.000460f, 0.002087f, -0.004262f, -0.002699f, 0.002075f, -0.000149f, 0.034813f, -0.000618f, 0.017055f, -0.003094f, -0.002668f, 0.018291f, -0.017908f, -0.006206f, -0.001397f, 0.009032f, 0.006275f, -0.003841f, 0.003482f, 0.001685f, -0.016224f, 0.004095f, 0.008673f, 0.007697f, -0.018186f, -0.006404f, 0.002043f, -0.013049f, -0.003596f, 0.000983f, 0.000576f, 0.001758f, -0.002018f, 0.008287f, -0.005889f, 0.006585f, 0.013613f, 0.013595f, -0.003976f, -0.007834f, -0.001417f, 0.015314f, -0.000901f, -0.000853f, + 0.000089f, 0.001478f, -0.007997f, 0.001329f, 0.006426f, 0.000932f, 0.001501f, 0.006141f, -0.004126f, 0.004120f, 0.002382f, -0.001731f, 0.010749f, 0.001015f, 0.008537f, 0.001646f, -0.002914f, 0.003692f, 0.005690f, 0.004891f, -0.000294f, -0.008491f, -0.007725f, -0.010215f, -0.004573f, -0.000420f, -0.000041f, -0.001253f, 0.007502f, 0.006426f, -0.004967f, -0.010031f, 0.000262f, 0.005097f, 0.006163f, -0.006171f, -0.001196f, 0.005803f, -0.000591f, -0.000899f, 0.007755f, 0.003575f, 0.003638f, -0.003007f, -0.002586f, -0.000561f, 0.003298f, 0.004929f, 0.000037f, 0.003704f, 0.001291f, 0.000210f, 0.000653f, 0.001157f, 0.004593f, 0.003400f, 0.005177f, -0.002787f, 0.002392f, 0.000234f, 0.000570f, -0.000893f, 0.000452f, 0.000650f, 0.000132f, 0.000549f, -0.000966f, 0.002376f, 0.002362f, -0.002438f, 0.000497f, 0.001255f, 0.001437f, -0.000908f, 0.004755f, -0.009356f, -0.025957f, -0.006806f, -0.008788f, 0.001634f, 0.004330f, -0.004475f, -0.005199f, -0.049042f, 0.000981f, 0.015665f, -0.011435f, -0.018411f, 0.013719f, -0.020829f, -0.003147f, -0.009374f, -0.010918f, -0.006877f, -0.006862f, 0.000632f, + 0.008311f, -0.001636f, 0.004627f, -0.005415f, 0.006263f, -0.004931f, -0.007439f, 0.003144f, -0.002798f, -0.011842f, -0.014976f, 0.007019f, 0.000698f, 0.006927f, 0.002147f, 0.015662f, 0.002218f, 0.005343f, -0.007605f, -0.013291f, -0.003831f, -0.006670f, 0.013123f, -0.006276f, 0.000328f, 0.003270f, -0.006539f, 0.018231f, 0.012159f, 0.000118f, -0.014652f, -0.018717f, -0.006317f, 0.006035f, -0.016768f, -0.000567f, -0.008163f, -0.016094f, 0.001469f, -0.025118f, -0.005535f, -0.002806f, -0.009298f, 0.016640f, -0.001048f, -0.002794f, -0.000284f, 0.010368f, 0.013412f, 0.003885f, -0.013444f, -0.004495f, -0.003408f, 0.007088f, 0.003384f, 0.004006f, -0.007554f, -0.009773f, 0.007545f, 0.004996f, 0.001894f, 0.002391f, -0.000474f, 0.004166f, 0.001199f, 0.006352f, 0.001845f, 0.001369f, -0.000548f, -0.000335f, 0.001040f, 0.004047f, 0.005975f, 0.003525f, -0.001456f, 0.002240f, -0.007461f, 0.003722f, 0.004452f, -0.001388f, -0.000618f, 0.001237f, -0.001677f, -0.000602f, -0.000405f, -0.002430f, -0.002405f, -0.001447f, -0.000701f, 0.001278f, 0.002976f, -0.000589f, -0.003432f, -0.000145f, -0.004852f, 0.001538f, + 0.006686f, 0.002746f, 0.003955f, 0.002675f, 0.010391f, -0.028031f, -0.041317f, 0.005015f, -0.009467f, 0.009153f, -0.011600f, -0.020566f, 0.000466f, 0.018807f, 0.003810f, 0.011520f, 0.009194f, 0.007109f, 0.004542f, -0.006661f, 0.005007f, 0.012486f, -0.019677f, -0.009238f, -0.006575f, -0.004443f, 0.007151f, -0.001657f, 0.002433f, 0.012965f, 0.011286f, -0.004635f, -0.011114f, 0.002571f, -0.006241f, -0.004751f, -0.010772f, -0.007476f, -0.016383f, 0.003921f, -0.006145f, -0.000141f, 0.014489f, -0.002906f, 0.002754f, 0.003838f, -0.010442f, 0.008756f, 0.008627f, 0.012108f, -0.010638f, 0.019118f, -0.003131f, -0.013977f, -0.011827f, -0.015289f, 0.014239f, -0.005379f, -0.016258f, 0.004943f, -0.002508f, -0.011446f, 0.012192f, 0.016389f, -0.005656f, -0.013674f, 0.010157f, 0.003227f, 0.007966f, -0.001182f, 0.022044f, 0.012960f, -0.012848f, -0.006374f, -0.006054f, -0.005006f, 0.007374f, 0.010093f, 0.013096f, -0.000017f, 0.001754f, 0.005026f, -0.005166f, 0.004781f, -0.001401f, 0.008456f, 0.012038f, -0.016282f, -0.007238f, -0.008207f, -0.005081f, -0.008385f, -0.000606f, -0.005943f, 0.002794f, -0.000360f, + -0.000472f, -0.000732f, 0.002239f, -0.004046f, 0.010251f, -0.001312f, 0.004411f, 0.001496f, 0.002190f, -0.002032f, 0.000477f, 0.000233f, 0.000688f, -0.003486f, 0.000813f, -0.002286f, -0.003472f, -0.005424f, -0.001482f, -0.000376f, -0.000780f, 0.000145f, 0.000757f, -0.001148f, -0.000600f, -0.002079f, -0.001741f, 0.003138f, -0.038582f, -0.000026f, -0.007008f, 0.002558f, -0.000070f, 0.014559f, 0.010678f, 0.015080f, -0.002445f, 0.020570f, -0.009559f, 0.013989f, 0.017124f, 0.003159f, 0.017068f, 0.003689f, 0.004439f, -0.004781f, -0.001742f, -0.007171f, 0.013533f, -0.000831f, -0.001536f, 0.019064f, 0.011517f, 0.000187f, 0.005140f, -0.001613f, -0.000635f, 0.012402f, -0.007081f, -0.012251f, -0.000007f, -0.001691f, 0.006299f, -0.034662f, 0.020856f, 0.022501f, 0.008883f, 0.004387f, 0.000601f, -0.011015f, -0.023117f, 0.015284f, -0.009314f, -0.010506f, -0.007036f, 0.013719f, -0.009650f, 0.008467f, 0.008591f, -0.008206f, -0.005435f, -0.019963f, 0.009199f, -0.012984f, 0.007713f, 0.001293f, 0.006907f, 0.012143f, 0.019384f, 0.008317f, -0.008937f, -0.021316f, -0.003755f, 0.013046f, 0.021360f, 0.016034f, + -0.003236f, -0.004239f, -0.013730f, -0.022831f, -0.002417f, 0.015790f, 0.007048f, 0.004977f, -0.005067f, 0.020955f, -0.000715f, 0.007043f, 0.002028f, -0.004071f, 0.001980f, -0.010717f, -0.005214f, -0.005431f, 0.003561f, -0.002711f, -0.007649f, -0.004535f, -0.005287f, -0.005740f, 0.002282f, -0.008159f, -0.003391f, 0.001537f, 0.001396f, 0.006258f, 0.000327f, 0.000860f, 0.001072f, -0.001741f, 0.005124f, -0.001656f, 0.005828f, 0.002072f, -0.001685f, -0.004527f, -0.000248f, 0.005590f, 0.003992f, -0.000756f, -0.005504f, -0.001496f, 0.004836f, 0.004299f, 0.000601f, -0.001048f, -0.000683f, -0.003383f, 0.003717f, 0.014762f, 0.050423f, 0.027558f, -0.002427f, 0.004900f, 0.004506f, 0.011231f, 0.019959f, -0.002660f, 0.003954f, 0.033859f, 0.003488f, -0.001340f, 0.020391f, 0.014330f, -0.013996f, 0.008514f, 0.002089f, 0.013712f, 0.009392f, -0.023289f, 0.017885f, -0.010707f, -0.001491f, 0.002148f, 0.014013f, 0.002642f, 0.003837f, 0.010757f, 0.012235f, -0.011479f, 0.012567f, 0.037403f, -0.006518f, 0.017100f, 0.017458f, -0.009133f, 0.013705f, 0.003747f, -0.008910f, -0.009574f, 0.006676f, -0.008545f, + -0.023123f, -0.002871f, -0.001034f, 0.002509f, -0.029615f, -0.007120f, 0.009165f, -0.018646f, -0.012594f, -0.030792f, 0.010261f, 0.014338f, -0.021102f, -0.007428f, -0.010164f, 0.022484f, 0.000569f, -0.012697f, -0.008939f, -0.014155f, 0.007184f, 0.018824f, -0.013291f, 0.007311f, -0.005645f, 0.009120f, 0.021184f, 0.008981f, 0.016688f, 0.017039f, 0.021149f, 0.003314f, -0.011853f, -0.011758f, 0.008476f, 0.013468f, 0.001931f, 0.009068f, -0.009488f, 0.003852f, -0.001172f, -0.002887f, -0.009966f, 0.001420f, -0.004434f, 0.000620f, 0.008075f, 0.003472f, 0.003390f, 0.002780f, 0.008915f, -0.005512f, 0.000292f, -0.001466f, 0.002629f, -0.001023f, 0.000271f, 0.003844f, 0.000972f, -0.003131f, 0.004747f, -0.001033f, -0.006919f, 0.004289f, -0.004960f, -0.003928f, -0.005144f, -0.010314f, 0.005522f, -0.002365f, 0.004659f, -0.000550f, -0.001041f, 0.001375f, 0.007606f, 0.005159f, 0.006775f, 0.003176f, -0.000172f, 0.002792f, 0.007811f, -0.003233f, 0.051833f, 0.013948f, 0.002101f, -0.002904f, -0.007519f, 0.000413f, 0.009693f, -0.006201f, -0.011997f, -0.017650f, 0.001323f, 0.012767f, -0.015801f, 0.007863f, + 0.010365f, -0.004350f, 0.034979f, 0.012474f, -0.008729f, -0.005873f, -0.002650f, 0.012674f, -0.005202f, -0.011566f, -0.012869f, 0.008153f, -0.028063f, 0.001100f, -0.007942f, -0.010132f, 0.008936f, 0.002098f, -0.010317f, -0.006231f, -0.009918f, 0.014107f, -0.004662f, -0.022083f, -0.002746f, 0.000631f, 0.001603f, -0.012755f, -0.018171f, 0.001836f, -0.003448f, -0.002334f, 0.006090f, -0.003713f, 0.016901f, 0.003634f, 0.010052f, -0.010703f, 0.024631f, 0.007307f, -0.012414f, 0.016486f, 0.031176f, -0.008834f, -0.007771f, 0.016150f, 0.014693f, 0.006300f, 0.008905f, -0.019142f, -0.005235f, -0.020706f, 0.006039f, 0.019707f, 0.008752f, -0.024297f, -0.005073f, 0.007903f, -0.024262f, -0.037735f, -0.003390f, 0.001409f, 0.010657f, 0.034579f, 0.002638f, -0.003751f, -0.010861f, -0.007975f, 0.005277f, 0.008895f, 0.007209f, -0.000359f, 0.003761f, 0.000507f, -0.007722f, 0.004887f, 0.005816f, -0.009513f, -0.009388f, 0.010623f, -0.003627f, 0.006318f, 0.004533f, 0.003275f, -0.002764f, 0.002425f, -0.000397f, 0.003798f, 0.000741f, 0.005678f, 0.000005f, 0.005039f, 0.003252f, 0.001275f, -0.004622f, 0.010295f, + 0.003067f, 0.009417f, -0.002094f, -0.002894f, 0.003211f, -0.005991f, -0.001211f, 0.004585f, -0.005974f, 0.001693f, 0.003193f, 0.002251f, 0.002032f, 0.005139f, -0.002111f, -0.008803f, -0.000286f, -0.000745f, -0.009716f, 0.001605f, -0.004174f, -0.040228f, 0.018914f, 0.053473f, -0.021995f, 0.037529f, -0.008490f, -0.008087f, -0.011757f, -0.019386f, 0.014370f, 0.000552f, 0.009805f, 0.009719f, -0.035139f, 0.000468f, 0.016315f, -0.014236f, -0.007561f, -0.022118f, 0.039113f, -0.024411f, 0.019282f, 0.018230f, -0.023335f, -0.009595f, -0.008166f, 0.016430f, -0.018675f, -0.007597f, 0.018944f, -0.003297f, -0.005111f, -0.009233f, 0.023114f, 0.004091f, -0.003773f, -0.009504f, 0.000585f, -0.017596f, 0.019053f, -0.002250f, 0.008752f, 0.047594f, 0.031912f, -0.027381f, -0.019403f, 0.007490f, -0.002489f, 0.019921f, -0.010958f, -0.016048f, -0.005722f, -0.029844f, -0.011537f, -0.003529f, -0.022939f, -0.013089f, 0.050857f, 0.012151f, 0.000176f, -0.002481f, -0.000564f, 0.014989f, 0.017919f, -0.003761f, 0.017702f, 0.001442f, -0.009718f, 0.001938f, -0.027131f, -0.002020f, -0.025138f, -0.013554f, 0.015164f, 0.022228f, + -0.033333f, 0.013559f, -0.008532f, -0.010556f, 0.016170f, -0.002337f, -0.015332f, -0.000842f, -0.005997f, -0.011991f, 0.006187f, 0.004501f, -0.008370f, -0.020653f, -0.009946f, -0.002025f, -0.001609f, 0.016414f, 0.004884f, 0.004153f, -0.008877f, 0.000222f, -0.003637f, 0.008848f, 0.009845f, -0.005157f, 0.004228f, 0.007495f, 0.008107f, 0.006443f, 0.009216f, -0.003526f, 0.000681f, -0.006194f, 0.000546f, -0.007227f, -0.003870f, 0.002943f, -0.001989f, -0.005791f, -0.001358f, 0.003301f, -0.009766f, -0.004669f, -0.005274f, -0.002774f, -0.003698f, -0.004278f, -0.042601f, 0.007229f, 0.039609f, -0.010486f, -0.010045f, 0.008459f, -0.012231f, -0.010111f, 0.011212f, -0.001588f, -0.002177f, -0.000588f, -0.026798f, 0.045451f, -0.048384f, -0.004777f, -0.001062f, 0.016477f, 0.010032f, 0.000474f, -0.018339f, -0.013341f, 0.005842f, 0.035458f, -0.002845f, -0.015816f, -0.010680f, -0.025383f, -0.001673f, -0.014964f, -0.011754f, -0.005335f, 0.007967f, -0.000978f, 0.001234f, -0.017239f, 0.003488f, 0.004716f, 0.010983f, 0.008957f, 0.011059f, -0.023352f, 0.000156f, -0.004881f, 0.015307f, 0.003720f, 0.031004f, 0.006544f, + -0.007114f, 0.002589f, -0.016781f, -0.000275f, 0.013574f, 0.017297f, -0.026512f, -0.020757f, -0.001874f, 0.027573f, -0.043310f, 0.011242f, 0.050137f, 0.027383f, -0.013319f, 0.004482f, -0.026839f, 0.011207f, 0.024814f, -0.042486f, 0.009551f, -0.020775f, -0.005742f, -0.057546f, 0.000386f, -0.024327f, 0.022473f, 0.001401f, -0.026575f, 0.017593f, -0.001605f, -0.034545f, -0.004487f, -0.021896f, 0.014302f, -0.012260f, -0.017863f, 0.024333f, -0.004616f, 0.004204f, -0.008039f, -0.010742f, -0.002785f, 0.010326f, 0.007938f, -0.006007f, -0.001365f, 0.000315f, -0.005937f, 0.003677f, 0.006065f, 0.008527f, -0.008624f, 0.003328f, 0.004762f, -0.010507f, 0.000779f, 0.004448f, -0.007320f, 0.000599f, -0.004693f, 0.011376f, 0.006288f, 0.013871f, -0.006497f, -0.005341f, 0.004815f, -0.013444f, -0.001285f, -0.003944f, -0.001960f, -0.000813f, 0.002964f, -0.007595f, 0.000616f, -0.001116f, 0.002752f, 0.002453f, 0.000608f, -0.007665f, -0.011608f, -0.032340f, 0.051165f, 0.015047f, 0.026761f, -0.030142f, -0.034015f, -0.006037f, 0.008948f, -0.009215f, -0.004603f, 0.017432f, 0.004658f, 0.005597f, 0.015121f, -0.037419f, + -0.004188f, 0.000767f, 0.009515f, -0.025942f, 0.003379f, 0.004729f, -0.018302f, -0.009798f, -0.025189f, -0.018617f, -0.000205f, 0.008336f, -0.020402f, 0.001786f, -0.009290f, -0.017810f, 0.006945f, 0.000213f, 0.014352f, -0.039687f, -0.041790f, 0.008896f, -0.003672f, 0.015893f, 0.034884f, 0.004113f, -0.022107f, 0.031459f, -0.015688f, -0.029203f, -0.022742f, -0.009504f, 0.002396f, -0.031033f, -0.012170f, 0.030799f, 0.041497f, 0.017680f, 0.011533f, 0.008790f, -0.004934f, 0.026613f, 0.014861f, -0.030873f, -0.017021f, 0.000243f, 0.002956f, 0.029105f, 0.018525f, 0.004711f, -0.004610f, -0.003547f, -0.014400f, 0.019324f, 0.014977f, 0.033566f, 0.007512f, 0.009798f, 0.003919f, 0.060237f, 0.006666f, 0.023344f, -0.025088f, 0.002157f, 0.022722f, -0.054565f, 0.004299f, 0.007215f, 0.015193f, -0.005669f, 0.007990f, -0.007144f, -0.002040f, 0.009345f, -0.004726f, 0.028901f, -0.011815f, 0.016882f, -0.004675f, -0.010299f, -0.005718f, -0.011142f, 0.000092f, 0.004486f, 0.005447f, -0.002358f, -0.005827f, 0.012007f, -0.003864f, 0.008013f, -0.004550f, -0.004685f, -0.009065f, 0.008990f, 0.009621f, 0.002029f, + 0.000664f, -0.007488f, -0.013070f, 0.005860f, -0.001418f, 0.000291f, 0.014873f, -0.004407f, 0.012981f, -0.002194f, 0.007441f, 0.005122f, 0.009902f, 0.002156f, -0.009840f, -0.001967f, 0.034505f, 0.002299f, 0.042877f, -0.001542f, -0.019945f, -0.021706f, -0.040591f, 0.007301f, -0.017260f, -0.001245f, 0.003219f, 0.014394f, 0.020917f, 0.035621f, 0.036806f, -0.005863f, 0.032736f, -0.002586f, -0.003120f, 0.012341f, 0.027545f, 0.011968f, 0.007525f, -0.044375f, -0.022969f, -0.036109f, 0.017977f, 0.035909f, 0.006745f, -0.015699f, 0.024911f, 0.036022f, -0.005145f, 0.005486f, -0.008715f, 0.030267f, 0.025435f, 0.021676f, -0.013154f, -0.023048f, -0.003898f, -0.006071f, -0.051271f, 0.008782f, 0.006732f, 0.004429f, -0.013221f, -0.006890f, -0.057146f, -0.020253f, -0.051889f, -0.009155f, -0.038919f, -0.020160f, 0.037061f, 0.009787f, 0.039060f, 0.002505f, -0.032414f, -0.015758f, -0.033717f, -0.064067f, 0.008800f, -0.039626f, -0.011764f, 0.037642f, 0.015517f, 0.014763f, 0.002887f, -0.007243f, -0.002982f, 0.007361f, -0.027761f, 0.022040f, -0.047202f, -0.048479f, -0.002904f, -0.004159f, -0.006264f, -0.035607f, + -0.008303f, 0.047070f, -0.002779f, 0.002955f, -0.012757f, -0.040669f, 0.020500f, -0.027320f, -0.010966f, -0.027192f, -0.017074f, -0.012657f, -0.008907f, -0.009731f, -0.006266f, 0.000756f, 0.004642f, -0.025416f, -0.011194f, 0.005062f, 0.004385f, 0.014429f, 0.006497f, -0.008344f, -0.010951f, 0.009487f, -0.017447f, -0.002452f, 0.005164f, -0.013057f, 0.004016f, 0.004198f, 0.009444f, -0.008858f, -0.003319f, -0.004639f, -0.000872f, 0.006583f, -0.003951f, -0.000375f, -0.005241f, 0.010360f, 0.013883f, -0.004432f, -0.002427f, 0.003994f, 0.004556f, 0.009032f, 0.012287f, 0.002492f, -0.002278f, -0.002793f, 0.020168f, 0.040633f, 0.035366f, 0.038104f, -0.021961f, -0.038225f, 0.029399f, -0.017373f, 0.030385f, 0.009134f, -0.048811f, 0.012312f, 0.009093f, -0.054951f, 0.029549f, -0.025018f, -0.025585f, 0.015042f, 0.016725f, 0.002676f, 0.019853f, 0.001556f, 0.000992f, -0.012839f, -0.007445f, 0.012130f, -0.007634f, -0.018791f, 0.001267f, -0.035361f, 0.012805f, -0.044967f, -0.027377f, 0.001749f, 0.017874f, -0.006071f, -0.018618f, 0.007065f, 0.014100f, 0.010571f, 0.000833f, 0.036358f, -0.083369f, -0.018847f, + -0.022827f, -0.027604f, 0.036180f, -0.029073f, -0.003980f, -0.067160f, -0.018805f, -0.007893f, 0.003516f, 0.044945f, -0.010811f, 0.005773f, -0.027071f, 0.022850f, -0.033685f, -0.021718f, 0.017524f, -0.077978f, 0.011378f, 0.041849f, 0.054225f, 0.041522f, 0.026231f, 0.061080f, 0.033682f, -0.000609f, -0.015067f, -0.015528f, -0.023566f, -0.052439f, -0.005686f, 0.005044f, -0.074330f, -0.029283f, -0.022462f, -0.016642f, 0.023813f, 0.062425f, 0.072778f, 0.048341f, -0.024402f, 0.020035f, -0.015725f, -0.003255f, 0.016492f, 0.011361f, -0.006329f, 0.004103f, 0.005439f, -0.001277f, 0.002523f, -0.011263f, 0.006565f, 0.020614f, -0.009595f, 0.002918f, -0.018004f, 0.004626f, -0.008426f, -0.001025f, -0.000873f, 0.015988f, 0.027990f, -0.009822f, 0.001767f, 0.007028f, 0.011407f, -0.016700f, -0.026178f, 0.000730f, 0.020404f, 0.006167f, -0.016694f, 0.015896f, 0.008246f, -0.016723f, 0.011911f, 0.007865f, -0.006521f, -0.004939f, -0.001800f, -0.002892f, 0.003088f, 0.006646f, -0.005943f, 0.011726f, -0.071581f, 0.000097f, 0.011946f, 0.050196f, -0.016342f, 0.023200f, 0.021110f, 0.011105f, 0.011524f, -0.078302f, + 0.061740f, 0.033624f, 0.076496f, 0.028062f, -0.003339f, -0.028482f, -0.018076f, -0.017862f, -0.027748f, 0.019719f, 0.014510f, -0.028220f, -0.032048f, 0.016836f, 0.022902f, 0.039877f, 0.011135f, -0.024929f, -0.037154f, 0.007747f, 0.006197f, 0.002442f, 0.004355f, 0.070847f, 0.023915f, 0.013427f, 0.023251f, 0.025530f, 0.028764f, 0.000506f, -0.045177f, 0.031528f, 0.098846f, -0.010299f, -0.027754f, -0.060447f, -0.013143f, 0.079628f, 0.009130f, 0.032820f, 0.010846f, -0.110606f, 0.022543f, 0.019573f, 0.002079f, 0.011092f, -0.007976f, 0.001428f, 0.022255f, -0.059700f, -0.024942f, 0.050135f, 0.018419f, 0.006608f, -0.045044f, 0.031655f, 0.011546f, -0.040650f, -0.044095f, -0.029720f, 0.039734f, 0.082985f, 0.077208f, 0.085070f, 0.086289f, 0.003077f, -0.038970f, -0.032133f, -0.076157f, -0.025245f, 0.023557f, -0.061898f, -0.000959f, -0.050528f, 0.000257f, 0.066905f, 0.025819f, 0.027294f, 0.033000f, 0.020412f, -0.020996f, -0.007305f, -0.025799f, 0.036120f, -0.022626f, -0.020048f, 0.006112f, -0.004769f, -0.013683f, -0.024748f, -0.007562f, 0.024391f, 0.022959f, -0.011538f, 0.035783f, -0.002272f, + 0.000354f, -0.017074f, 0.004778f, 0.018149f, -0.005345f, -0.014917f, -0.014485f, 0.008710f, -0.008311f, 0.019823f, 0.012276f, 0.015903f, 0.023541f, -0.025408f, 0.005595f, 0.001411f, 0.010389f, -0.005889f, -0.011309f, 0.021007f, 0.004465f, 0.016979f, -0.010373f, 0.005667f, -0.015334f, -0.005647f, 0.034471f, 0.073210f, -0.147344f, -0.050634f, 0.010454f, -0.084503f, -0.079394f, -0.032925f, -0.048592f, 0.006459f, -0.036033f, 0.093805f, -0.010830f, -0.031820f, -0.014278f, -0.069943f, -0.020632f, -0.056224f, -0.024811f, 0.011114f, -0.074849f, -0.011275f, 0.056294f, -0.046816f, -0.014742f, 0.017645f, -0.001221f, 0.025040f, 0.004078f, 0.001249f, 0.020419f, 0.009095f, -0.037646f, -0.005696f, 0.031764f, -0.015330f, -0.046656f, -0.013823f, -0.056379f, -0.026095f, -0.098069f, 0.010710f, -0.067093f, 0.033204f, 0.010916f, -0.023013f, -0.086605f, 0.009208f, -0.010029f, 0.106894f, 0.041076f, 0.003246f, 0.056419f, 0.026155f, -0.000356f, 0.047916f, -0.055855f, -0.024819f, 0.003229f, 0.042545f, -0.046411f, -0.026321f, 0.152211f, -0.013312f, 0.078425f, -0.060497f, -0.001013f, -0.042836f, 0.032419f, -0.014346f, + 0.051058f, 0.082850f, 0.001315f, -0.056517f, 0.048682f, -0.060294f, -0.028796f, 0.021957f, -0.064716f, -0.041482f, -0.021203f, 0.047620f, 0.087735f, -0.104170f, 0.087964f, 0.018991f, 0.025138f, 0.011033f, 0.011649f, 0.010696f, -0.013925f, 0.017294f, 0.045187f, -0.022004f, 0.007271f, -0.003253f, 0.005210f, -0.048643f, -0.009757f, -0.014012f, 0.014266f, 0.016693f, 0.048354f, -0.029389f, -0.018570f, -0.022612f, 0.033323f, -0.042243f, 0.009720f, 0.017385f, 0.014028f, 0.017536f, -0.072499f, -0.015737f, 0.025122f, -0.010987f, -0.031405f, -0.002651f, 0.007728f, 0.003209f, 0.029675f, 0.016809f, 0.023413f, -0.022744f, -0.022266f, 0.025925f, 0.006488f, 0.017926f, -0.016864f, 0.018053f, 0.010610f, 0.004655f, 0.005487f, -0.005233f, -0.008137f, 0.001915f, -0.055285f, 0.114250f, -0.065657f, 0.042017f, 0.037436f, -0.059444f, 0.032558f, 0.017959f, 0.012794f, -0.010564f, 0.045082f, 0.023332f, -0.057502f, 0.040735f, 0.047331f, 0.009212f, 0.007953f, 0.028661f, -0.000843f, -0.057130f, 0.074133f, -0.042405f, 0.016688f, -0.031548f, -0.007387f, 0.009300f, -0.014031f, 0.060455f, 0.013464f, -0.008042f, + -0.014689f, -0.003219f, 0.011703f, -0.061632f, 0.019363f, -0.031988f, -0.021735f, -0.014853f, -0.000317f, -0.030294f, -0.014554f, 0.007249f, 0.063731f, 0.000589f, -0.013601f, -0.040833f, 0.016811f, 0.011137f, 0.001681f, 0.049494f, -0.012287f, -0.005289f, 0.058789f, 0.018437f, 0.003201f, -0.057076f, -0.030047f, 0.036618f, 0.020301f, -0.053484f, 0.001439f, -0.121372f, -0.060318f, 0.108541f, -0.025749f, 0.058644f, 0.076726f, 0.021762f, 0.012804f, 0.034712f, -0.015184f, -0.042727f, 0.022546f, 0.007011f, -0.003098f, 0.048882f, 0.031545f, -0.035395f, -0.084989f, -0.017685f, 0.034125f, 0.010824f, -0.002425f, 0.027274f, -0.032362f, 0.047312f, -0.023660f, 0.017600f, 0.021759f, 0.009543f, 0.032166f, 0.024549f, 0.039072f, 0.004314f, -0.010700f, 0.014128f, 0.037849f, -0.010208f, 0.033077f, 0.019941f, -0.022148f, 0.006593f, 0.017359f, 0.011829f, 0.006882f, 0.023887f, 0.019665f, 0.008653f, 0.039694f, -0.012901f, 0.004148f, -0.005959f, -0.003045f, -0.010375f, 0.035183f, 0.029307f, 0.023198f, -0.011306f, 0.004079f, 0.041839f, -0.011375f, 0.030632f, 0.027221f, -0.000083f, 0.047750f, -0.043711f, + 0.005746f, 0.065924f, 0.008086f, 0.018581f, -0.014102f, 0.046369f, 0.008634f, 0.064852f, -0.020018f, -0.108398f, 0.018432f, -0.013083f, 0.037336f, 0.011394f, -0.036749f, 0.019023f, 0.022373f, -0.041925f, -0.046002f, -0.030827f, -0.076813f, -0.077342f, 0.053192f, -0.012365f, -0.079440f, -0.024402f, 0.008130f, 0.026237f, 0.025147f, -0.048711f, -0.052776f, 0.005133f, 0.073393f, -0.035169f, 0.028309f, -0.049454f, 0.017525f, -0.055786f, 0.036254f, 0.038245f, -0.027365f, -0.057413f, -0.039509f, -0.006456f, 0.022452f, -0.024681f, -0.016292f, -0.020559f, -0.073033f, -0.063119f, 0.032984f, -0.053002f, -0.010913f, 0.018805f, -0.043812f, -0.070663f, 0.026858f, 0.036991f, -0.004838f, -0.085056f, 0.037910f, 0.033304f, 0.107377f, 0.000446f, 0.028100f, 0.020995f, -0.046041f, 0.017537f, -0.014402f, -0.092951f, -0.014367f, 0.056748f, 0.013376f, -0.047044f, -0.116730f, 0.073588f, 0.093956f, -0.028023f, 0.075963f, 0.088556f, 0.004406f, 0.003968f, 0.069854f, -0.045397f, 0.003350f, 0.117237f, -0.086632f, 0.050245f, -0.074237f, -0.020371f, -0.006203f, 0.050469f, -0.017321f, 0.007305f, 0.028153f, -0.000916f, + -0.065735f, 0.072191f, -0.013285f, -0.008494f, 0.010920f, 0.030139f, -0.049461f, 0.021566f, 0.012505f, -0.007445f, 0.014844f, 0.017553f, -0.045853f, -0.006191f, 0.010475f, 0.024003f, 0.049694f, -0.004206f, -0.043939f, 0.022255f, 0.051007f, -0.040722f, 0.049747f, -0.023642f, -0.005495f, -0.017545f, 0.056120f, -0.038918f, 0.013163f, 0.035199f, -0.024528f, 0.008855f, 0.006012f, -0.032432f, 0.006901f, 0.014031f, -0.006376f, -0.024614f, 0.015815f, 0.020486f, -0.011679f, 0.040709f, -0.061370f, 0.015115f, 0.017605f, 0.000894f, 0.003433f, 0.042028f, -0.009443f, 0.023576f, -0.048800f, -0.154522f, 0.041787f, -0.017859f, 0.115415f, -0.039730f, -0.025342f, -0.046375f, -0.132183f, 0.060423f, -0.077022f, -0.045093f, 0.002374f, -0.000217f, 0.101995f, -0.073021f, -0.051054f, 0.067091f, 0.040006f, 0.034944f, -0.012634f, 0.033383f, -0.023613f, -0.033707f, -0.030931f, 0.078681f, 0.065544f, 0.102316f, -0.032536f, -0.038404f, 0.001860f, -0.006842f, 0.037647f, -0.061729f, 0.013273f, -0.064878f, 0.034675f, 0.063476f, 0.021879f, -0.052423f, 0.035734f, -0.046224f, 0.103972f, 0.052830f, 0.014773f, 0.013921f, + -0.015987f, -0.081564f, 0.046120f, -0.110614f, 0.023160f, 0.020519f, 0.054079f, 0.042804f, -0.095420f, 0.028741f, -0.060081f, -0.035760f, 0.026078f, -0.009530f, 0.035710f, 0.022782f, -0.087233f, 0.035649f, 0.080283f, 0.106009f, -0.030692f, 0.031310f, -0.043221f, 0.074401f, -0.105648f, -0.005598f, -0.019178f, 0.033378f, 0.069643f, 0.099886f, -0.079877f, 0.019917f, -0.106913f, 0.068785f, 0.141055f, -0.035801f, -0.095978f, -0.007720f, -0.072363f, 0.092574f, 0.023588f, -0.047250f, -0.013275f, 0.005394f, -0.015733f, 0.066126f, 0.024994f, -0.037336f, 0.035676f, -0.052872f, 0.003546f, 0.049646f, -0.010257f, -0.060938f, 0.067692f, -0.097244f, 0.028299f, -0.014647f, 0.038988f, -0.002409f, 0.024259f, -0.022383f, -0.011899f, 0.009945f, 0.008649f, 0.010373f, 0.046247f, -0.047144f, -0.039548f, 0.002259f, 0.010755f, -0.010843f, -0.049122f, -0.035940f, 0.072207f, 0.019513f, -0.031944f, -0.036888f, -0.082191f, 0.098606f, 0.077239f, -0.029956f, -0.026302f, -0.057385f, 0.002285f, 0.073707f, -0.121385f, 0.086680f, -0.011231f, -0.003413f, 0.028843f, 0.024145f, 0.034343f, 0.009498f, 0.016828f, -0.042774f, + 0.040601f, 0.011008f, -0.043458f, 0.029293f, -0.017220f, -0.000803f, 0.039702f, 0.022817f, -0.061870f, 0.034703f, -0.029214f, 0.051508f, -0.037475f, 0.012940f, -0.019084f, 0.023900f, -0.018181f, 0.010914f, -0.027136f, 0.059254f, -0.005110f, 0.001480f, 0.017827f, 0.019767f, -0.029924f, -0.006415f, 0.013747f, 0.019660f, 0.018266f, -0.021037f, 0.007715f, 0.000711f, -0.060150f, -0.005179f, 0.015855f, 0.022035f, 0.009870f, 0.014062f, -0.054079f, 0.008475f, -0.002934f, 0.005304f, 0.012723f, -0.010923f, 0.012048f, 0.008880f, 0.005361f, -0.013308f, -0.012018f, -0.004371f, 0.063105f, -0.022283f, 0.012763f, 0.023177f, -0.012903f, 0.022044f, -0.025005f, 0.021237f, 0.011387f, -0.017108f, -0.025155f, 0.015793f, -0.015354f, 0.012344f, -0.022596f, -0.019932f, -0.008785f, 0.028692f, -0.007195f, 0.002587f, 0.006031f, -0.002284f, 0.007131f, -0.023073f, 0.017558f, -0.014957f, 0.038269f, -0.035571f, 0.016762f, -0.021300f, 0.019142f, -0.017431f, 0.015352f, 0.000233f, 0.025914f, -0.022446f, 0.012210f, -0.011578f, 0.001493f, 0.004356f, 0.015348f, -0.016171f, 0.003919f, -0.017435f, 0.024564f, -0.020648f, + -0.005546f, 0.012171f, 0.005189f, -0.010169f, -0.002833f, 0.013772f, 0.009349f, -0.033915f, 0.018980f, 0.001494f, 0.000317f, -0.003736f, 0.006936f, -0.004385f, 0.003712f, -0.002784f, 0.004485f, 0.000959f, 0.008908f, -0.009713f, 0.024218f, -0.030819f, 0.096578f, -0.006981f, -0.031249f, -0.047700f, -0.021656f, -0.026787f, 0.035051f, 0.020236f, -0.025451f, 0.002097f, 0.003019f, 0.011417f, 0.001587f, 0.024230f, 0.008387f, 0.019077f, -0.006539f, -0.000717f, -0.005721f, 0.008926f, 0.020722f, -0.019261f, -0.000113f, -0.009549f, 0.000685f, 0.025217f, -0.014315f, 0.002428f, -0.006465f, 0.009915f, 0.005142f, -0.013888f, -0.005129f, 0.014828f, -0.004561f, 0.024198f, 0.017242f, -0.025323f, 0.008110f, 0.005326f, 0.013270f, 0.005573f, -0.023898f, 0.016141f, -0.004474f, 0.015696f, 0.012587f, -0.028569f, 0.007828f, 0.000046f, 0.006423f, -0.003223f, -0.012535f, 0.020304f, -0.005003f, 0.009194f, 0.000484f, -0.006150f, 0.009414f, -0.012187f, -0.001710f, 0.016925f, -0.011662f, -0.014031f, 0.028276f, -0.018304f, 0.026378f, -0.002792f, -0.021378f, 0.043685f, -0.040157f, 0.034863f, -0.012385f, -0.020968f, + 0.022107f, -0.020602f, 0.006085f, 0.007078f, -0.020125f, 0.016893f, -0.003632f, -0.001346f, 0.010808f, -0.014038f, 0.018294f, -0.005982f, -0.001420f, 0.004460f, -0.003136f, 0.006378f, -0.003079f, 0.000982f, 0.005326f, -0.005209f, 0.008522f, -0.001054f, -0.004879f, 0.010444f, -0.016298f, 0.008594f, -0.007259f, -0.003403f, 0.010133f, 0.000788f, -0.003081f, 0.005207f, -0.003887f, 0.005168f, 0.002645f, -0.007610f, 0.005030f, 0.000960f, -0.001739f, -0.001354f, 0.004539f, 0.000914f, 0.008403f, -0.006717f, 0.002369f, 0.001011f, -0.004795f, 0.009271f, -0.002739f, -0.001557f, -0.047306f, -0.081142f, 0.102355f, 0.293207f, 0.046342f, 0.028416f, -0.214370f, -0.265014f, -0.084947f, -0.052099f, 0.179234f, 0.273425f, 0.140667f, 0.040770f, -0.092066f, -0.197830f, -0.180487f, -0.151145f, 0.011916f, 0.226517f, 0.189400f, 0.108643f, 0.036835f, -0.096937f, -0.125790f, -0.099859f, -0.096581f, -0.034037f, 0.045714f, 0.062915f, 0.130053f, 0.093163f, 0.022534f, -0.031544f, -0.018635f, -0.104728f, -0.050958f, -0.052920f, -0.071772f, 0.042696f, 0.080386f, 0.046543f, 0.117058f, 0.031126f, -0.027891f, -0.044983f, + -0.077950f, -0.061530f, -0.009713f, -0.019014f, 0.023838f, 0.048490f, 0.043110f, 0.030880f, 0.020944f, -0.010632f, -0.042832f, -0.030210f, -0.035635f, 0.011479f, 0.041408f, 0.013713f, 0.010118f, -0.017977f, -0.037266f, -0.006926f, -0.000161f, -0.000509f, 0.030052f, 0.027017f, 0.030123f, 0.011956f, -0.010476f, -0.032331f, -0.046963f, -0.047952f, -0.031285f, 0.033302f, 0.049167f, 0.061120f, 0.042169f, -0.010590f, -0.023957f, -0.025310f, -0.050331f, -0.022161f, 0.018272f, 0.009700f, 0.009034f, 0.014693f, 0.006969f, 0.005658f, -0.007855f, -0.010048f, 0.007864f, 0.017495f, -0.000435f, -0.001472f, -0.012089f, -0.016497f, -0.008664f, -0.010007f, -0.005970f, 0.012981f, -0.002348f, 0.027110f, 0.033357f, 0.019363f, -0.011639f, -0.018946f, -0.021344f, -0.026849f, -0.019718f, -0.026571f, 0.014178f, 0.036708f, 0.033391f, 0.019845f, 0.020834f, 0.007951f, -0.020606f, -0.040141f, -0.041168f, -0.020846f, -0.004297f, 0.013050f, 0.029249f, 0.043066f, 0.035251f, 0.006691f, -0.022769f, -0.037818f, -0.027793f, -0.009167f, 0.000231f, 0.010401f, 0.006563f, 0.016272f, 0.020732f, 0.006194f, -0.009014f, -0.012223f, + -0.006915f, -0.005084f, -0.005010f, -0.001387f, 0.001462f, 0.009676f, 0.005820f, 0.000693f, -0.000119f, -0.000576f, -0.001858f, -0.004215f, -0.004414f, 0.001334f, 0.001359f, 0.000827f, -0.000331f, 0.000400f} + }, + { + {-0.005343f, 0.020366f, 0.002374f, 0.005529f, 0.001946f, 0.002922f, -0.004913f, -0.012293f, -0.002380f, 0.006525f, 0.002318f, -0.006075f, -0.000860f, 0.004995f, -0.001288f, -0.007318f, 0.002209f, -0.008438f, -0.005245f, -0.000243f, 0.002323f, -0.002386f, -0.001915f, 0.005261f, -0.007297f, -0.000155f, 0.000921f, 0.003546f, 0.002792f, 0.002703f, 0.008906f, 0.004042f, -0.011082f, -0.002807f, -0.005042f, 0.001420f, -0.000294f, -0.000821f, -0.006982f, -0.009075f, 0.012036f, -0.005544f, 0.002937f, 0.003521f, 0.003010f, -0.011414f, -0.006505f, -0.002979f, 0.001252f, -0.000881f, -0.000366f, -0.001036f, 0.001917f, 0.004372f, -0.005986f, -0.000002f, 0.003194f, 0.003742f, 0.004441f, 0.001651f, 0.000072f, 0.004320f, 0.001519f, -0.001860f, -0.000560f, 0.007006f, -0.005203f, -0.005484f, -0.002975f, -0.002196f, 0.005966f, 0.003540f, 0.001412f, -0.002226f, 0.005748f, -0.002563f, 0.002973f, -0.006805f, -0.000662f, 0.000527f, 0.001403f, 0.001415f, -0.005511f, 0.001489f, 0.003878f, 0.001959f, 0.000645f, -0.000495f, 0.005077f, 0.002425f, -0.000528f, 0.003263f, 0.001925f, 0.000847f, -0.000761f, 0.001094f, + 0.000862f, 0.000708f, -0.000987f, 0.001239f, 0.000335f, -0.001026f, -0.000830f, 0.001763f, 0.000372f, -0.000174f, 0.000005f, 0.000068f, 0.000279f, -0.001646f, 0.001160f, -0.000463f, 0.000907f, -0.001296f, -0.011577f, -0.006970f, 0.004932f, -0.011325f, -0.016014f, 0.003115f, 0.001376f, 0.001976f, 0.002341f, 0.002255f, -0.013767f, -0.002248f, 0.003998f, -0.008729f, 0.009173f, 0.008918f, 0.007652f, -0.003094f, 0.000703f, 0.002072f, 0.005860f, 0.001337f, -0.000199f, 0.001154f, -0.003984f, 0.003699f, -0.001439f, -0.001450f, -0.001873f, 0.011312f, -0.006749f, 0.003916f, -0.004260f, -0.003668f, -0.003826f, 0.003002f, 0.006186f, -0.006601f, -0.003292f, -0.003576f, 0.004527f, 0.004264f, 0.006878f, 0.004676f, 0.000918f, 0.006028f, -0.005134f, 0.003624f, 0.001377f, 0.001575f, 0.012623f, 0.002987f, 0.006241f, -0.010359f, -0.002798f, 0.004273f, -0.005184f, 0.004916f, -0.002241f, -0.003812f, 0.001349f, 0.007576f, 0.005108f, 0.003495f, -0.001854f, 0.001552f, 0.005645f, -0.006831f, 0.009011f, -0.001228f, 0.007385f, -0.003000f, 0.006093f, 0.007276f, 0.006126f, -0.003421f, -0.009090f, -0.013416f, + -0.009064f, 0.000876f, -0.004756f, 0.008864f, 0.001469f, 0.001389f, 0.002370f, -0.006325f, -0.001960f, -0.002845f, 0.003182f, -0.001711f, -0.001219f, 0.003905f, -0.004769f, -0.001683f, 0.001887f, -0.002646f, 0.000219f, -0.002953f, -0.002361f, -0.001870f, -0.000531f, -0.003149f, 0.019453f, 0.013978f, 0.011453f, 0.009532f, 0.010742f, 0.004538f, -0.000847f, -0.000237f, -0.003989f, -0.001189f, 0.014133f, -0.006168f, -0.006358f, 0.009753f, 0.007240f, 0.009377f, -0.006554f, 0.002840f, -0.002478f, 0.002120f, 0.004178f, 0.005855f, 0.000857f, -0.004272f, -0.003175f, -0.005497f, -0.001964f, -0.003396f, -0.010024f, -0.001214f, 0.008441f, -0.006568f, -0.001143f, 0.003123f, -0.005164f, -0.004676f, 0.004775f, -0.002576f, -0.006695f, -0.003585f, 0.003816f, -0.005718f, -0.007365f, -0.003355f, -0.002186f, 0.002490f, -0.005138f, -0.010645f, 0.000757f, -0.001749f, -0.001489f, 0.003092f, -0.008739f, -0.004249f, 0.000164f, -0.003639f, 0.004823f, -0.001213f, 0.002084f, -0.015677f, -0.004752f, 0.008901f, -0.003493f, -0.008621f, 0.002581f, 0.001554f, 0.002442f, -0.003192f, -0.012438f, -0.005624f, 0.014013f, 0.000981f, + 0.005171f, 0.002992f, -0.002002f, 0.004300f, 0.005846f, 0.002486f, -0.002887f, -0.006667f, -0.000002f, 0.001707f, -0.005063f, 0.002334f, -0.006565f, -0.000634f, -0.004182f, -0.002010f, -0.005540f, -0.001014f, -0.003161f, -0.003986f, -0.003097f, 0.000662f, -0.001370f, 0.000765f, -0.001503f, 0.000604f, -0.002786f, 0.002057f, 0.001093f, -0.000714f, -0.000499f, 0.002663f, -0.000045f, -0.000878f, -0.002474f, -0.001218f, -0.001113f, -0.000125f, 0.000255f, 0.000127f, 0.027586f, 0.016947f, 0.016041f, 0.000295f, 0.001613f, 0.001291f, -0.006558f, -0.014595f, -0.005501f, 0.011035f, -0.008317f, 0.005001f, 0.014925f, 0.001211f, -0.004703f, -0.001857f, -0.002996f, -0.001573f, 0.006052f, 0.008577f, 0.000333f, 0.002532f, 0.003526f, 0.005592f, 0.000366f, -0.007842f, 0.002450f, -0.012640f, -0.003778f, -0.001597f, -0.003484f, -0.002298f, 0.001610f, -0.003027f, -0.006601f, -0.005175f, -0.002353f, 0.000542f, -0.002811f, -0.007674f, 0.009154f, -0.003430f, 0.000703f, -0.002381f, -0.005936f, 0.007470f, 0.020872f, 0.005000f, -0.007203f, 0.012293f, 0.002862f, -0.003827f, 0.003798f, -0.002168f, -0.007978f, -0.000004f, + -0.003318f, 0.003067f, -0.006905f, -0.012081f, 0.000520f, 0.001952f, -0.014551f, 0.004310f, 0.003065f, 0.008103f, 0.004678f, 0.010725f, -0.003607f, -0.007331f, -0.004228f, -0.002321f, 0.005294f, -0.001979f, -0.009341f, 0.006341f, -0.004534f, -0.008597f, 0.005871f, -0.008588f, -0.004627f, 0.002635f, -0.003044f, 0.002893f, -0.001994f, -0.003582f, 0.002869f, 0.007176f, -0.001635f, -0.003626f, -0.001258f, -0.000068f, 0.002574f, 0.005025f, 0.001499f, -0.001547f, -0.001862f, -0.001926f, -0.000586f, 0.001144f, -0.003650f, -0.001353f, -0.001054f, 0.005515f, 0.002866f, 0.003884f, -0.000635f, 0.000245f, 0.003082f, 0.001990f, 0.001502f, -0.000234f, 0.000541f, -0.014195f, -0.022437f, -0.006889f, -0.011226f, 0.016077f, -0.003669f, -0.001968f, 0.006021f, -0.014841f, -0.010456f, 0.008907f, -0.007190f, -0.006678f, -0.000369f, -0.000607f, 0.001583f, 0.005868f, -0.002467f, 0.002670f, -0.003868f, -0.002878f, -0.000274f, -0.002547f, -0.006502f, -0.000585f, -0.001396f, 0.006791f, 0.006878f, 0.006031f, -0.008054f, 0.003739f, 0.002730f, 0.011265f, -0.005676f, -0.000421f, -0.003860f, -0.008621f, 0.012279f, -0.011647f, + -0.005714f, -0.004536f, 0.002901f, 0.010186f, -0.009424f, 0.010537f, -0.001136f, 0.005680f, 0.008790f, 0.001425f, 0.006779f, -0.012546f, 0.002775f, -0.004732f, 0.000660f, -0.013288f, 0.000263f, -0.004580f, -0.011884f, -0.009141f, 0.000729f, 0.008780f, 0.000478f, -0.006398f, 0.010012f, -0.003433f, 0.005803f, -0.000786f, -0.012332f, 0.017287f, -0.010770f, -0.002137f, -0.006118f, 0.004323f, 0.007037f, 0.004651f, 0.006494f, 0.014000f, 0.010703f, -0.001780f, 0.002255f, 0.006615f, 0.004188f, -0.004975f, 0.007132f, 0.005546f, -0.001023f, 0.003157f, -0.006950f, -0.009609f, -0.001004f, -0.003090f, 0.005428f, -0.005628f, -0.001148f, -0.005409f, -0.001228f, -0.002478f, -0.000782f, 0.001637f, 0.002034f, 0.001120f, -0.000214f, -0.001349f, 0.003273f, 0.001665f, -0.003330f, 0.002442f, 0.000184f, -0.008313f, -0.000718f, -0.002980f, 0.004789f, -0.001255f, -0.000537f, 0.001756f, -0.000887f, 0.001676f, 0.003762f, -0.000230f, 0.002450f, 0.002607f, -0.000475f, 0.000987f, 0.005295f, 0.006048f, -0.015886f, -0.022655f, 0.002548f, 0.001907f, 0.001283f, 0.014612f, -0.004719f, -0.015892f, 0.001696f, 0.001862f, + -0.004182f, -0.000902f, -0.013968f, -0.002747f, 0.001761f, 0.002095f, 0.015670f, -0.002721f, 0.014046f, -0.003370f, -0.003596f, 0.001194f, -0.013893f, 0.005963f, -0.005220f, 0.008502f, -0.002319f, -0.003556f, -0.005143f, -0.002501f, 0.000526f, -0.010378f, 0.018026f, -0.012443f, -0.020204f, 0.006080f, 0.000962f, -0.014180f, -0.004167f, -0.027241f, 0.000505f, -0.009680f, -0.000097f, -0.010512f, -0.008519f, 0.001515f, 0.001005f, 0.004735f, -0.008588f, 0.006924f, -0.009695f, -0.018794f, 0.002284f, 0.005253f, -0.005667f, 0.006211f, -0.003188f, -0.010410f, -0.009163f, -0.012665f, -0.005989f, -0.001312f, 0.002126f, -0.003760f, 0.011836f, 0.000080f, -0.003637f, 0.001068f, 0.000758f, 0.002498f, 0.001881f, 0.001430f, -0.011267f, -0.010533f, 0.002290f, 0.007543f, 0.004476f, 0.001288f, -0.002449f, 0.009360f, 0.005169f, -0.004292f, -0.003156f, -0.010374f, -0.004259f, 0.004701f, 0.002238f, -0.005631f, 0.002335f, -0.001532f, -0.001639f, -0.002612f, -0.003251f, -0.001084f, -0.004303f, -0.003239f, 0.001828f, 0.000918f, 0.002637f, 0.004535f, 0.000388f, 0.003987f, 0.000228f, -0.002531f, 0.003752f, 0.002391f, + -0.000722f, 0.000607f, -0.002099f, -0.002064f, -0.000031f, 0.000257f, -0.002356f, 0.000176f, -0.000703f, -0.000042f, 0.000000f, -0.000448f, 0.002447f, -0.003823f, -0.000599f, -0.001088f, 0.000220f, 0.001423f, 0.002505f, -0.034983f, -0.008828f, 0.001423f, -0.008976f, -0.006499f, -0.011220f, 0.002915f, 0.003884f, 0.007996f, -0.006061f, -0.007442f, -0.008497f, 0.004248f, 0.009371f, -0.004666f, -0.004077f, -0.002374f, -0.001495f, 0.004491f, -0.019572f, -0.004799f, 0.010986f, 0.003619f, -0.005765f, 0.002111f, 0.009727f, -0.000939f, -0.002538f, 0.003440f, -0.000660f, 0.023988f, -0.010356f, 0.005884f, 0.001886f, -0.010073f, 0.003279f, 0.002275f, -0.011524f, 0.008128f, -0.016357f, -0.001566f, 0.014400f, 0.003194f, -0.000458f, -0.003020f, -0.011192f, -0.009613f, 0.002537f, 0.006228f, -0.004234f, 0.003043f, 0.011930f, 0.005949f, -0.005001f, 0.007394f, -0.010651f, -0.024961f, -0.003336f, -0.010953f, 0.006919f, -0.007010f, 0.017714f, 0.008902f, -0.000843f, -0.002894f, -0.023029f, 0.007274f, 0.008769f, -0.007038f, 0.014036f, -0.010904f, 0.004269f, -0.018286f, 0.008475f, 0.006441f, -0.020864f, -0.013246f, + -0.004292f, 0.005171f, 0.006910f, 0.015215f, -0.002121f, -0.000710f, 0.009851f, 0.002312f, 0.000042f, -0.004376f, 0.002251f, 0.002313f, 0.002957f, 0.003262f, 0.000803f, -0.000375f, -0.001899f, -0.002128f, -0.005624f, -0.004641f, 0.003744f, 0.002688f, 0.001929f, 0.004680f, -0.001881f, 0.002278f, 0.002370f, -0.001148f, 0.004004f, -0.000499f, -0.000032f, -0.000917f, -0.004519f, -0.000952f, 0.005216f, 0.001210f, 0.003877f, -0.001399f, 0.001432f, -0.002009f, 0.006204f, 0.000631f, 0.005207f, 0.002336f, -0.002533f, 0.001399f, 0.008793f, 0.014766f, 0.034164f, 0.036427f, 0.007319f, 0.010917f, 0.000119f, 0.005207f, 0.000343f, 0.003845f, -0.009731f, 0.004529f, -0.006046f, 0.008077f, 0.007655f, 0.018760f, 0.002905f, -0.003786f, 0.011768f, 0.008486f, 0.014151f, 0.000706f, 0.008808f, 0.005122f, -0.004351f, 0.004408f, 0.021056f, 0.003355f, -0.009078f, -0.004894f, 0.015584f, 0.009637f, 0.007501f, 0.014487f, -0.011132f, 0.004352f, 0.017268f, -0.017193f, -0.020547f, 0.006798f, 0.011026f, 0.017927f, -0.007762f, -0.013373f, 0.010854f, 0.003937f, -0.001621f, 0.006742f, -0.002714f, -0.001636f, + -0.000098f, 0.025512f, -0.009223f, 0.005173f, -0.006152f, -0.003953f, -0.003004f, 0.013302f, -0.001760f, 0.029690f, 0.014240f, -0.014257f, 0.016595f, 0.003617f, 0.007736f, 0.003566f, 0.003606f, 0.004045f, -0.005435f, 0.010015f, -0.023487f, -0.006209f, 0.010749f, -0.023926f, 0.008192f, -0.019335f, 0.004541f, 0.021332f, 0.005276f, -0.000149f, 0.005864f, 0.002026f, -0.005744f, 0.001433f, -0.006105f, 0.000695f, 0.004917f, -0.014386f, 0.008239f, -0.002625f, -0.003422f, 0.000957f, 0.004460f, -0.003784f, -0.005733f, 0.001920f, 0.005181f, -0.002755f, -0.004851f, -0.004790f, -0.002806f, 0.001977f, -0.003428f, -0.003088f, 0.003226f, 0.004490f, 0.002105f, -0.002408f, 0.002937f, -0.002152f, -0.007414f, -0.003377f, -0.000121f, -0.003797f, 0.002108f, 0.001506f, 0.003095f, 0.005016f, 0.007390f, -0.003534f, 0.010426f, -0.003690f, -0.006110f, -0.002115f, 0.003689f, 0.000760f, -0.006213f, -0.004066f, 0.056326f, 0.009822f, 0.008845f, -0.016481f, 0.024274f, -0.008051f, -0.001081f, -0.006369f, 0.001332f, -0.015775f, -0.001219f, 0.007491f, 0.001754f, -0.012846f, 0.016010f, -0.003834f, -0.008345f, 0.002351f, + 0.005001f, -0.016542f, -0.023322f, 0.009707f, -0.009648f, -0.013718f, 0.002679f, -0.000026f, -0.007099f, 0.012189f, -0.012259f, 0.004086f, 0.011784f, -0.002039f, 0.017183f, 0.005478f, -0.021839f, -0.022741f, -0.009778f, 0.001536f, 0.004121f, -0.017956f, 0.006485f, 0.006618f, 0.003399f, 0.005862f, 0.007925f, -0.018663f, -0.009373f, 0.005499f, -0.020911f, -0.007486f, -0.000527f, -0.021557f, -0.011614f, -0.007325f, 0.004354f, -0.011006f, -0.023536f, -0.011074f, -0.012589f, 0.027314f, 0.013132f, -0.002147f, 0.003703f, -0.007221f, 0.021633f, 0.026071f, 0.002897f, 0.017502f, 0.012681f, 0.005100f, 0.003110f, -0.009973f, -0.002206f, -0.008799f, 0.012602f, -0.016536f, 0.000542f, -0.003921f, -0.025519f, -0.007649f, -0.003694f, 0.013920f, -0.012637f, 0.007018f, 0.005942f, 0.002672f, 0.001317f, 0.006079f, -0.006110f, 0.004866f, -0.003689f, 0.005394f, -0.001361f, 0.007943f, 0.002292f, 0.000747f, -0.004139f, -0.001461f, -0.009972f, 0.005410f, -0.001391f, 0.008536f, -0.008138f, 0.000053f, -0.000848f, 0.005116f, -0.000894f, 0.004578f, 0.001910f, 0.002523f, 0.002400f, 0.001341f, -0.005453f, 0.006369f, + 0.008016f, -0.004012f, -0.005781f, -0.006704f, -0.002809f, -0.000376f, -0.002435f, 0.000755f, -0.038426f, 0.025943f, 0.041640f, -0.031234f, -0.018603f, 0.008580f, 0.007471f, -0.006336f, 0.013683f, 0.003722f, -0.011642f, -0.014225f, -0.000291f, -0.004569f, -0.010157f, 0.005203f, -0.004668f, 0.000670f, 0.011520f, -0.015488f, 0.003267f, 0.002085f, -0.009195f, 0.001328f, -0.014606f, 0.002864f, 0.021459f, 0.010954f, -0.002140f, -0.006880f, -0.001749f, -0.012231f, -0.013025f, 0.006430f, 0.010862f, -0.003405f, -0.005990f, -0.004254f, 0.006504f, 0.010832f, 0.005206f, 0.019830f, -0.010643f, 0.008177f, -0.005119f, 0.001979f, 0.012379f, -0.004415f, -0.003888f, -0.023543f, -0.003590f, -0.018221f, 0.009203f, 0.006302f, 0.023503f, -0.020086f, -0.007391f, -0.019439f, -0.032028f, -0.005347f, 0.013403f, -0.022101f, 0.004941f, -0.002412f, -0.016125f, -0.019006f, -0.023979f, 0.032281f, 0.001248f, 0.019191f, 0.014108f, 0.016311f, -0.007331f, -0.021399f, -0.016201f, -0.020022f, 0.007046f, 0.015779f, -0.014994f, 0.007145f, 0.016816f, -0.011306f, 0.001959f, 0.013659f, 0.015673f, 0.003813f, -0.005564f, 0.006760f, + -0.002765f, 0.003637f, -0.016630f, -0.001466f, 0.006436f, -0.005594f, 0.002175f, 0.001101f, 0.000754f, 0.003796f, 0.006321f, -0.006527f, -0.002318f, 0.003897f, 0.005636f, 0.001645f, 0.002758f, 0.005544f, -0.001141f, 0.005986f, -0.004941f, 0.004126f, 0.006016f, 0.006746f, 0.000776f, -0.002444f, 0.005243f, -0.004160f, 0.001326f, -0.000878f, -0.003577f, -0.001704f, -0.003528f, -0.000882f, 0.001707f, -0.004318f, -0.012144f, 0.004383f, 0.006683f, -0.030059f, 0.021713f, -0.002735f, -0.011273f, 0.018595f, 0.006567f, -0.018109f, -0.025932f, -0.010019f, 0.000067f, 0.000529f, 0.001241f, -0.009245f, 0.029461f, 0.012210f, 0.008892f, 0.006801f, 0.009254f, -0.008971f, 0.002216f, 0.005854f, 0.004292f, 0.026472f, 0.002741f, -0.039455f, 0.004839f, 0.016416f, -0.014738f, -0.022184f, -0.004719f, -0.012047f, -0.007140f, 0.001845f, 0.027872f, 0.016706f, -0.002853f, -0.000642f, -0.008438f, -0.024432f, -0.008290f, -0.020181f, 0.014379f, 0.019709f, 0.000224f, -0.010948f, -0.004018f, -0.004526f, 0.009008f, 0.012550f, 0.013285f, -0.030775f, 0.005908f, 0.001067f, 0.002690f, 0.021406f, -0.012516f, 0.008770f, + -0.011424f, -0.008205f, 0.002231f, 0.014013f, 0.025179f, -0.003989f, -0.016329f, 0.005290f, -0.029373f, 0.023454f, 0.012629f, -0.002890f, -0.012148f, 0.006351f, -0.006803f, -0.014473f, -0.012072f, -0.013118f, -0.006290f, -0.002739f, 0.000872f, 0.012436f, -0.009502f, 0.034170f, 0.001420f, -0.005163f, 0.001957f, 0.010216f, 0.000459f, -0.000359f, 0.011074f, 0.007655f, 0.005713f, 0.000459f, -0.005371f, -0.004120f, -0.001277f, -0.000717f, -0.004954f, -0.013813f, 0.007339f, 0.007019f, -0.005232f, 0.001983f, -0.007685f, -0.005683f, -0.002651f, -0.001430f, -0.000192f, 0.012298f, -0.002506f, -0.003745f, -0.001971f, -0.000621f, 0.007519f, 0.013700f, -0.004427f, 0.007729f, -0.002044f, -0.008398f, 0.009856f, -0.009100f, -0.007426f, -0.004801f, -0.007494f, 0.001726f, 0.005819f, 0.003085f, 0.005967f, 0.000222f, -0.002197f, -0.000414f, -0.006056f, 0.003794f, -0.003456f, -0.013018f, -0.003185f, 0.014419f, -0.025835f, -0.007331f, 0.016726f, -0.021002f, -0.002155f, -0.002085f, -0.002797f, -0.024461f, 0.024320f, 0.010546f, -0.016926f, -0.002909f, -0.007254f, -0.006199f, -0.037172f, -0.005211f, -0.016979f, -0.041958f, + 0.008976f, 0.006500f, -0.019079f, -0.015778f, -0.022485f, -0.025601f, 0.021838f, 0.012326f, 0.022990f, 0.000824f, 0.048232f, 0.002278f, 0.025199f, 0.034672f, -0.004005f, 0.010608f, 0.035721f, -0.024044f, 0.011026f, -0.014484f, 0.024578f, -0.007705f, 0.047854f, 0.021750f, -0.014881f, -0.022483f, 0.003748f, 0.011103f, 0.019968f, 0.005376f, -0.017292f, -0.003979f, 0.015853f, 0.035563f, -0.014837f, 0.023854f, -0.008674f, 0.014562f, -0.027824f, 0.010999f, -0.015122f, 0.011018f, 0.001831f, 0.003676f, -0.005039f, 0.021984f, 0.030694f, -0.055740f, 0.016932f, 0.011621f, 0.008300f, -0.010163f, 0.007355f, -0.039989f, 0.003429f, 0.000718f, -0.006217f, -0.015274f, -0.013261f, -0.013211f, -0.003831f, 0.028538f, -0.016416f, -0.009645f, -0.023101f, 0.000850f, 0.020523f, -0.010265f, -0.011452f, 0.015890f, -0.000565f, 0.011542f, 0.002573f, -0.002814f, 0.000292f, 0.005098f, -0.011031f, 0.005603f, 0.002238f, -0.009487f, -0.007942f, -0.004635f, 0.002792f, 0.006441f, 0.006629f, 0.019345f, -0.002040f, 0.014655f, 0.007209f, 0.004782f, -0.009653f, -0.002997f, -0.014582f, -0.006579f, -0.002422f, -0.004880f, + -0.006918f, 0.008118f, 0.004711f, 0.009697f, 0.012426f, 0.002340f, -0.002795f, -0.001567f, -0.007931f, 0.004837f, 0.027791f, 0.029536f, -0.006442f, 0.030710f, -0.001576f, -0.006405f, 0.002427f, 0.017268f, -0.006465f, -0.007821f, -0.003586f, -0.021828f, 0.003585f, -0.006255f, 0.034388f, 0.022636f, -0.016389f, -0.017365f, -0.032645f, -0.011952f, 0.023710f, 0.042711f, -0.019436f, 0.013194f, 0.002863f, 0.005621f, 0.023270f, 0.016653f, -0.033444f, 0.006644f, -0.011938f, -0.006797f, -0.013795f, -0.007541f, -0.014559f, -0.032238f, 0.005653f, 0.021558f, 0.008270f, 0.050494f, -0.012269f, -0.006965f, 0.035088f, -0.012792f, -0.001950f, -0.007831f, 0.009301f, -0.038532f, -0.024722f, 0.013386f, 0.028830f, 0.042000f, 0.050142f, -0.036847f, -0.019107f, -0.001938f, 0.016780f, -0.001658f, 0.056894f, 0.015827f, 0.008513f, -0.044141f, 0.003074f, 0.000318f, 0.021354f, 0.027847f, -0.020744f, -0.006886f, 0.008717f, -0.009053f, 0.000011f, 0.031640f, 0.011429f, -0.031288f, 0.008177f, 0.016499f, -0.015009f, 0.049208f, -0.017005f, -0.026317f, -0.036926f, 0.027304f, -0.005897f, -0.031007f, -0.024562f, -0.005631f, + -0.001129f, -0.012339f, 0.000753f, -0.013433f, 0.002634f, -0.018702f, 0.001330f, 0.009136f, -0.006427f, 0.007195f, 0.001455f, -0.011311f, 0.001292f, -0.000179f, -0.002142f, 0.001206f, -0.007650f, 0.009290f, 0.000128f, -0.004743f, 0.010661f, 0.010787f, 0.000526f, -0.002977f, 0.004792f, -0.010167f, -0.004182f, -0.008169f, -0.001491f, 0.008391f, -0.006558f, 0.003672f, 0.008327f, -0.015292f, -0.005412f, -0.003153f, 0.002581f, -0.002891f, 0.006654f, 0.014807f, -0.004117f, -0.008852f, -0.004246f, 0.009562f, 0.002788f, 0.000900f, 0.007742f, -0.004445f, -0.003101f, -0.002791f, 0.006841f, 0.058331f, 0.027670f, -0.015324f, -0.004913f, -0.053820f, 0.004212f, 0.014248f, 0.003778f, 0.080286f, -0.010124f, -0.006074f, -0.035236f, -0.030467f, 0.012540f, -0.024911f, -0.015185f, -0.016705f, -0.011205f, 0.019950f, -0.012988f, -0.022902f, -0.019718f, 0.001794f, 0.020171f, -0.025900f, 0.005883f, 0.011719f, 0.002649f, 0.028972f, -0.003309f, 0.002280f, -0.029386f, -0.041433f, -0.017008f, 0.018996f, -0.022803f, 0.005554f, -0.019135f, -0.072339f, -0.038892f, 0.021695f, 0.001614f, -0.041448f, 0.006457f, 0.057757f, + -0.002601f, -0.001490f, -0.022481f, 0.012645f, -0.024814f, -0.044591f, 0.001194f, 0.006789f, -0.017236f, 0.008575f, 0.016860f, -0.004121f, -0.014511f, 0.012048f, 0.015688f, 0.028991f, -0.016595f, 0.021793f, 0.027988f, 0.011780f, 0.048620f, 0.005471f, -0.030100f, 0.035422f, 0.002223f, 0.005954f, -0.006364f, -0.007095f, 0.021964f, -0.021611f, -0.003011f, 0.053893f, 0.042342f, -0.026103f, 0.027143f, -0.007765f, 0.050091f, 0.021104f, -0.017216f, -0.039869f, -0.001618f, -0.014546f, -0.017205f, 0.011314f, -0.015486f, -0.000414f, -0.003863f, -0.013891f, -0.023236f, -0.004512f, 0.019930f, -0.021222f, 0.000266f, -0.013152f, 0.002185f, 0.008410f, -0.008453f, -0.024833f, -0.004224f, -0.011713f, 0.015343f, 0.009267f, -0.005892f, -0.016400f, -0.006662f, -0.017648f, 0.010868f, -0.008621f, 0.005996f, 0.007063f, 0.010377f, 0.008223f, -0.013582f, -0.009670f, -0.015279f, 0.004689f, 0.010164f, 0.001411f, 0.020021f, 0.021114f, 0.011634f, 0.008653f, -0.041907f, -0.044476f, -0.053132f, 0.073243f, -0.040553f, 0.009623f, -0.002246f, -0.023304f, 0.037196f, -0.043754f, 0.018923f, 0.077884f, 0.047947f, 0.011100f, + -0.063157f, -0.003576f, -0.041671f, -0.021169f, -0.038053f, -0.003646f, 0.010816f, -0.006883f, 0.029924f, -0.014417f, 0.004977f, 0.014760f, 0.041820f, 0.005784f, 0.005774f, 0.050583f, -0.033322f, -0.004759f, 0.022324f, -0.009802f, -0.025844f, -0.017213f, 0.025504f, -0.022274f, 0.010696f, 0.043288f, -0.012060f, -0.078161f, -0.004775f, 0.019509f, -0.095956f, 0.057854f, 0.044648f, -0.036451f, 0.059507f, 0.040282f, 0.026554f, 0.061677f, 0.001327f, 0.031660f, 0.003656f, 0.003677f, 0.022237f, -0.039309f, 0.039151f, 0.053114f, 0.040928f, -0.042318f, -0.008268f, 0.058378f, -0.028379f, 0.046269f, 0.042496f, 0.099260f, 0.059930f, 0.003321f, 0.006872f, -0.012946f, 0.012462f, 0.017202f, -0.057593f, -0.082520f, -0.028707f, 0.007054f, 0.003074f, -0.011964f, 0.064489f, 0.030280f, 0.012149f, -0.028486f, 0.025572f, -0.020228f, -0.025476f, -0.013150f, 0.029195f, 0.033873f, 0.006560f, -0.006268f, -0.006552f, 0.000869f, -0.039956f, -0.009616f, -0.010320f, 0.012766f, 0.007424f, -0.020897f, -0.015797f, -0.001139f, 0.031497f, -0.008954f, -0.012141f, 0.000655f, -0.012574f, -0.032104f, 0.015974f, -0.007075f, + -0.012489f, -0.018915f, 0.000110f, 0.010397f, 0.002085f, -0.056956f, -0.003218f, 0.027745f, -0.004248f, 0.000897f, 0.004669f, 0.007878f, 0.023799f, 0.018701f, 0.000831f, -0.000505f, -0.009141f, -0.003196f, 0.044722f, 0.055321f, -0.108540f, -0.099392f, 0.043350f, -0.028564f, -0.031302f, -0.013030f, -0.037828f, 0.013441f, -0.061279f, 0.077374f, 0.029089f, -0.032237f, -0.000693f, -0.031534f, -0.023718f, -0.025417f, -0.029101f, -0.018857f, -0.073918f, -0.066413f, -0.012390f, -0.015079f, 0.004225f, 0.006315f, 0.012851f, -0.004659f, 0.009428f, 0.012386f, 0.032888f, 0.036433f, -0.013742f, -0.018395f, -0.021573f, -0.018285f, -0.041833f, 0.062264f, -0.021990f, 0.015197f, 0.046221f, 0.043710f, -0.016591f, -0.018707f, -0.034834f, -0.022856f, -0.028605f, 0.047858f, 0.005088f, 0.005916f, -0.059220f, -0.020990f, 0.085568f, -0.008291f, 0.079662f, -0.016088f, -0.029868f, -0.018822f, -0.033763f, -0.034555f, -0.006359f, 0.000386f, -0.047541f, 0.003996f, 0.022694f, -0.001922f, 0.017832f, -0.109686f, -0.044350f, -0.030708f, 0.058226f, -0.013919f, 0.009565f, 0.019899f, 0.091420f, 0.025943f, -0.008452f, -0.009316f, + 0.078718f, 0.047561f, 0.011591f, 0.015362f, -0.004055f, 0.062519f, -0.026086f, -0.035655f, 0.019250f, 0.029384f, 0.052160f, 0.048549f, -0.028479f, 0.032947f, 0.024620f, 0.026550f, 0.007874f, -0.018987f, -0.037521f, -0.031840f, 0.019805f, 0.027477f, 0.014653f, 0.009876f, 0.032424f, -0.003206f, -0.009009f, -0.001865f, -0.002737f, 0.016893f, 0.010118f, 0.022047f, 0.038524f, 0.027209f, 0.044072f, 0.011897f, -0.039701f, 0.012578f, 0.010559f, 0.034461f, -0.000689f, 0.027001f, 0.011487f, 0.025965f, 0.000561f, -0.049892f, -0.006487f, -0.010977f, -0.003391f, -0.057345f, 0.119110f, -0.038461f, -0.023909f, 0.070588f, -0.044746f, -0.067564f, 0.062671f, -0.090950f, -0.026301f, 0.021442f, 0.015621f, -0.063441f, -0.024880f, 0.054459f, 0.000355f, -0.010731f, -0.035415f, 0.042745f, -0.042398f, 0.002812f, 0.033654f, -0.011227f, 0.030901f, 0.000222f, -0.015255f, 0.010352f, 0.007345f, -0.018421f, 0.029383f, -0.016163f, -0.006547f, 0.008777f, -0.000575f, 0.001830f, -0.005514f, 0.008726f, 0.018649f, 0.030145f, 0.043392f, 0.021286f, -0.017917f, -0.004996f, -0.027518f, 0.025443f, -0.009150f, -0.039760f, + 0.009342f, 0.000171f, -0.022651f, -0.054353f, 0.038279f, 0.002906f, -0.025153f, 0.061451f, 0.003538f, -0.019009f, -0.011082f, 0.091015f, -0.085129f, -0.091634f, 0.055886f, 0.087241f, -0.160943f, 0.000798f, -0.059574f, -0.054076f, -0.023941f, 0.058579f, -0.045237f, 0.077520f, -0.010970f, -0.001899f, 0.104158f, -0.029396f, -0.080635f, 0.100138f, 0.117926f, -0.114513f, 0.128024f, -0.043124f, 0.003155f, 0.105853f, -0.035422f, -0.040486f, 0.029022f, 0.028465f, -0.013612f, -0.005329f, 0.019642f, 0.003933f, 0.002506f, -0.025169f, 0.034808f, 0.000227f, -0.002278f, 0.000693f, 0.004671f, 0.015755f, 0.009512f, -0.012668f, -0.013885f, 0.014675f, 0.034707f, -0.030017f, -0.027863f, -0.007447f, 0.036342f, -0.001229f, 0.019411f, -0.005219f, 0.008089f, 0.000203f, 0.008278f, -0.004084f, -0.006392f, -0.042880f, -0.018045f, 0.010835f, -0.015526f, -0.004249f, -0.015277f, -0.023120f, 0.036277f, 0.022777f, -0.063183f, 0.025313f, 0.032736f, -0.006317f, -0.000277f, -0.022137f, 0.032400f, 0.070874f, -0.033128f, -0.044900f, -0.012343f, 0.011250f, 0.072036f, 0.053810f, -0.018808f, -0.005732f, 0.022495f, 0.058620f, + -0.019526f, -0.003284f, 0.035953f, -0.046075f, -0.039618f, 0.031587f, -0.021036f, -0.015695f, -0.019373f, -0.001743f, -0.031918f, 0.002561f, 0.021880f, -0.013409f, 0.016896f, -0.015010f, -0.009442f, -0.009453f, -0.044148f, 0.006608f, -0.017886f, 0.027100f, 0.057784f, 0.003231f, 0.028791f, 0.023935f, 0.002192f, 0.010970f, 0.018072f, 0.061371f, -0.043402f, 0.029684f, 0.026044f, -0.031354f, 0.020997f, 0.020516f, 0.006509f, -0.027821f, -0.055755f, -0.056316f, 0.018571f, 0.020263f, -0.021304f, -0.094149f, 0.076584f, -0.025750f, -0.041287f, -0.023795f, 0.077038f, -0.036205f, 0.084247f, 0.000045f, 0.028288f, -0.079278f, 0.074953f, -0.034310f, 0.033198f, -0.010114f, -0.108541f, -0.034170f, 0.021361f, -0.067008f, 0.068917f, 0.007432f, -0.099514f, -0.111855f, -0.057583f, 0.077796f, 0.019197f, -0.069428f, 0.084657f, -0.091041f, -0.004494f, 0.164447f, 0.024597f, 0.009366f, 0.016342f, 0.012483f, -0.043167f, 0.044961f, 0.003327f, 0.022983f, -0.028975f, 0.043218f, -0.023875f, -0.022738f, -0.019072f, -0.002409f, -0.001195f, 0.013100f, -0.004344f, -0.006340f, 0.008475f, -0.015045f, -0.031151f, 0.028344f, + -0.010467f, -0.004861f, -0.036965f, 0.016898f, 0.008202f, 0.016038f, 0.004385f, 0.018504f, -0.013724f, 0.004369f, 0.051122f, -0.005946f, 0.000532f, 0.027106f, -0.029065f, -0.006119f, 0.001494f, -0.002908f, 0.019881f, -0.020566f, 0.022321f, -0.007808f, -0.057816f, 0.003736f, -0.015120f, 0.016997f, -0.019244f, 0.022361f, -0.035900f, -0.068619f, 0.000289f, -0.072891f, 0.020012f, -0.006514f, -0.013036f, 0.024346f, 0.040265f, -0.025843f, 0.005785f, 0.044223f, -0.034668f, 0.059989f, -0.007999f, -0.066041f, 0.056646f, -0.027267f, -0.012108f, 0.050415f, -0.064608f, 0.017017f, 0.001107f, 0.023431f, -0.010140f, -0.023737f, -0.098607f, 0.022604f, -0.040691f, -0.099078f, 0.119763f, -0.080633f, -0.033569f, -0.016021f, -0.027247f, -0.060864f, 0.034163f, 0.082631f, -0.051133f, 0.023183f, -0.074179f, -0.041985f, -0.042257f, 0.037337f, 0.006745f, 0.108433f, -0.018637f, -0.009060f, -0.032333f, -0.093558f, 0.000128f, 0.045469f, -0.034554f, 0.038166f, 0.045936f, -0.038757f, 0.003893f, -0.033052f, -0.138167f, -0.072503f, -0.042506f, -0.145214f, 0.092842f, 0.122263f, 0.057538f, -0.123129f, -0.098939f, -0.220876f, + 0.031964f, 0.262570f, 0.121486f, 0.046387f, -0.069000f, -0.242265f, -0.055000f, 0.056084f, 0.165619f, 0.166051f, -0.112818f, -0.095462f, -0.044304f, 0.021670f, 0.011466f, 0.180391f, 0.003058f, -0.021986f, 0.014710f, -0.017883f, -0.044021f, 0.063461f, 0.011418f, -0.013608f, 0.035143f, -0.028772f, -0.049102f, 0.034832f, 0.030166f, -0.083659f, 0.056372f, -0.012516f, -0.018409f, -0.044573f, 0.047348f, -0.045037f, 0.054189f, -0.026652f, 0.055464f, -0.065379f, 0.026175f, -0.018273f, 0.000880f, 0.047268f, 0.077321f, 0.021907f, -0.028723f, -0.020426f, -0.004808f, 0.042733f, -0.006824f, 0.061447f, -0.048050f, -0.037822f, 0.017686f, 0.060915f, 0.007165f, 0.037139f, -0.103956f, 0.075413f, -0.014800f, -0.016509f, 0.001872f, 0.033964f, 0.000644f, -0.006508f, 0.025132f, 0.008641f, 0.008371f, 0.040066f, -0.025391f, -0.000283f, 0.020806f, -0.007255f, -0.003782f, 0.025262f, -0.023457f, -0.005694f, 0.007105f, 0.039710f, -0.026255f, -0.018639f, 0.022230f, -0.001056f, 0.012478f, -0.039348f, 0.051600f, -0.012309f, 0.017411f, -0.011288f, 0.006645f, 0.028109f, 0.012372f, -0.006621f, 0.024189f, -0.009234f, + 0.024448f, -0.019294f, -0.001447f, 0.025210f, -0.005821f, -0.010530f, -0.050951f, 0.005127f, 0.039371f, 0.004078f, 0.018449f, -0.025839f, -0.008192f, -0.015497f, -0.016209f, -0.006705f, 0.028479f, -0.010464f, 0.017352f, -0.022515f, -0.026829f, -0.011582f, 0.006369f, 0.052016f, -0.019991f, 0.023611f, 0.001556f, 0.005102f, -0.025474f, 0.013832f, 0.027032f, 0.001370f, -0.024628f, 0.018938f, -0.016414f, 0.012664f, -0.010018f, -0.007339f, -0.009585f, 0.003435f, 0.018959f, -0.009652f, -0.004875f, 0.008673f, -0.001143f, -0.014510f, -0.003093f, 0.014050f, 0.012002f, -0.012598f, 0.002113f, 0.012829f, 0.000525f, -0.007970f, 0.002076f, -0.012680f, 0.009408f, -0.000885f, 0.004804f, -0.005815f, 0.002444f, 0.008132f, -0.004124f, 0.009546f, 0.001833f, 0.008698f, 0.006701f, -0.014314f, -0.014445f, -0.004984f, 0.025218f, -0.016158f, 0.017515f, 0.013938f, -0.010265f, -0.026144f, 0.019732f, -0.016817f, 0.022296f, -0.002171f, -0.003724f, -0.009266f, 0.003697f, 0.003631f, -0.001380f, -0.003060f, 0.001869f, 0.098955f, 0.019685f, -0.053078f, -0.037654f, -0.058621f, -0.018549f, 0.011244f, 0.031150f, -0.009754f, + -0.012544f, -0.010869f, -0.010406f, -0.009908f, 0.014258f, -0.007258f, -0.001952f, -0.003173f, -0.010272f, -0.002502f, 0.015672f, 0.002198f, -0.004481f, -0.015666f, 0.017982f, -0.023309f, 0.013722f, -0.008353f, -0.022790f, 0.000052f, 0.010458f, 0.011663f, 0.009213f, -0.013539f, 0.003059f, -0.004375f, -0.007334f, 0.027452f, -0.024434f, -0.004521f, -0.000938f, -0.001745f, 0.002639f, -0.004151f, -0.014323f, 0.012055f, -0.022734f, 0.021688f, -0.003118f, -0.015328f, 0.005345f, -0.007935f, 0.019416f, -0.011370f, -0.006765f, 0.020828f, -0.018639f, 0.006455f, -0.008879f, -0.002115f, 0.016101f, -0.011496f, -0.004462f, 0.014303f, -0.009767f, 0.003723f, 0.001569f, -0.011714f, 0.028452f, -0.024823f, -0.002019f, 0.010864f, -0.006204f, 0.018071f, -0.008122f, -0.004049f, 0.004841f, 0.005934f, -0.001854f, 0.003971f, -0.001503f, -0.008076f, 0.007305f, -0.000049f, 0.000807f, 0.003909f, -0.000412f, 0.005618f, -0.005604f, 0.001623f, 0.001242f, 0.001236f, -0.000598f, -0.003564f, 0.004733f, -0.000700f, -0.001115f, -0.003381f, 0.004197f, 0.006634f, -0.002155f, -0.003445f, 0.002185f, 0.003866f, -0.004806f, 0.004036f, + -0.003600f, -0.003223f, 0.010778f, -0.001661f, 0.004044f, 0.005599f, -0.007280f, 0.018131f, -0.005859f, -0.000975f, -0.000813f, -0.010500f, 0.010945f, -0.006792f, -0.010758f, -0.046850f, -0.070402f, 0.092275f, 0.287858f, 0.024648f, 0.025062f, -0.196236f, -0.248225f, -0.051718f, -0.052574f, 0.146219f, 0.248871f, 0.127710f, 0.024587f, -0.090046f, -0.175216f, -0.123678f, -0.088425f, -0.004587f, 0.121251f, 0.177180f, 0.095755f, 0.021943f, -0.062117f, -0.110414f, -0.061825f, -0.059484f, -0.055709f, 0.035214f, 0.072193f, 0.071154f, 0.071684f, 0.017237f, -0.031071f, -0.012749f, -0.047225f, -0.073929f, -0.008188f, -0.022043f, -0.014917f, 0.066759f, 0.038575f, 0.055773f, 0.033829f, -0.025281f, -0.060833f, -0.014648f, -0.039538f, -0.006104f, 0.027659f, 0.008480f, 0.014946f, 0.030173f, -0.015290f, -0.021399f, -0.004924f, -0.012571f, 0.012179f, 0.019484f, 0.001060f, 0.024052f, 0.014272f, -0.025239f, -0.024281f, -0.038691f, -0.033089f, 0.001476f, 0.039927f, 0.060522f, 0.029154f, 0.007661f, -0.014064f, -0.040502f, -0.006948f, -0.045669f, -0.028021f, 0.021514f, 0.016876f, 0.051167f, 0.017238f, -0.013013f, + 0.015077f, -0.026516f, -0.046022f, 0.008109f, 0.011674f, 0.015439f, 0.014265f, -0.002873f, -0.005751f, -0.004396f, -0.019136f, -0.014660f, 0.010037f, 0.015621f, 0.015705f, 0.015940f, -0.004416f, -0.015398f, -0.010210f, -0.005910f, 0.000407f, -0.000317f, -0.017424f, 0.004465f, 0.021938f, 0.011842f, 0.013651f, -0.004064f, -0.022082f, -0.012826f, -0.013039f, 0.005099f, 0.015479f, 0.010215f, 0.009560f, 0.004140f, -0.003168f, -0.016748f, -0.022071f, -0.010101f, 0.001340f, 0.013636f, 0.021746f, 0.013319f, 0.013396f, 0.008458f, -0.013860f, -0.025697f, -0.032994f, -0.021388f, 0.009194f, 0.018457f, 0.023937f, 0.033222f, 0.010066f, -0.010005f, -0.016845f, -0.013658f, -0.010169f, -0.009592f, -0.009776f, -0.002875f, 0.007341f, 0.014590f, 0.012818f, 0.010056f, 0.006927f, 0.001490f, -0.009461f, -0.016307f, -0.015792f, -0.008083f, -0.000509f, 0.005885f, 0.005922f, 0.003451f, 0.000632f, 0.000498f, -0.000173f}, + {0.002348f, 0.006368f, 0.005018f, -0.001687f, 0.003852f, 0.001794f, 0.011038f, -0.001952f, -0.000264f, 0.001356f, 0.008087f, -0.001625f, -0.008375f, -0.003941f, -0.008038f, 0.001932f, -0.002842f, -0.000709f, -0.000989f, 0.001913f, 0.000809f, 0.001602f, 0.004705f, 0.008555f, -0.003788f, -0.002150f, 0.001746f, -0.004093f, -0.000529f, 0.006665f, -0.003610f, 0.008247f, 0.000885f, -0.003013f, 0.005534f, -0.007552f, -0.001893f, -0.005274f, 0.007377f, -0.000260f, -0.002680f, -0.002039f, 0.000121f, 0.006785f, 0.000309f, 0.008175f, 0.003190f, -0.006796f, 0.005504f, -0.002995f, -0.005011f, -0.004164f, 0.005656f, -0.001214f, 0.017952f, 0.001860f, 0.004539f, 0.003219f, -0.008317f, 0.000083f, -0.001198f, 0.002145f, -0.004708f, -0.003246f, 0.009371f, 0.007610f, 0.000726f, 0.003140f, -0.000822f, 0.004722f, -0.007671f, 0.000748f, 0.005818f, 0.003609f, 0.000621f, -0.000631f, 0.004155f, -0.006571f, -0.002981f, 0.006924f, -0.004544f, 0.001447f, 0.003418f, 0.004082f, 0.001294f, -0.005258f, -0.003455f, 0.002723f, 0.000636f, 0.002700f, -0.000802f, 0.000756f, -0.002583f, -0.000177f, -0.001274f, -0.000797f, + 0.001513f, 0.002836f, 0.001230f, -0.001692f, -0.000623f, -0.001153f, 0.000698f, 0.001726f, -0.001015f, 0.001268f, 0.000970f, 0.001798f, -0.000239f, 0.002163f, -0.000868f, 0.000525f, 0.001360f, 0.001691f, -0.013665f, -0.012346f, -0.007671f, -0.006998f, -0.006051f, 0.002319f, 0.008636f, 0.017581f, 0.003383f, 0.004532f, -0.000025f, -0.012555f, -0.005242f, -0.004664f, -0.011264f, 0.017547f, 0.004678f, 0.006970f, 0.004833f, -0.003880f, 0.001803f, 0.016802f, 0.006723f, -0.003951f, -0.000306f, -0.004073f, 0.000372f, -0.007773f, 0.004698f, -0.002448f, -0.003463f, 0.000671f, 0.008951f, 0.000951f, 0.003139f, 0.005603f, 0.007766f, -0.013860f, 0.000207f, 0.003534f, 0.008100f, 0.012416f, -0.006871f, -0.001386f, -0.003311f, 0.010361f, 0.005637f, 0.006688f, -0.001069f, 0.003112f, 0.020727f, -0.013050f, 0.002660f, 0.001240f, -0.008697f, 0.003745f, -0.012165f, -0.001618f, 0.003177f, -0.002616f, -0.018360f, 0.005189f, 0.001321f, -0.004948f, -0.005051f, -0.000822f, -0.002716f, 0.006247f, -0.005784f, -0.002554f, 0.001869f, -0.000162f, -0.005623f, -0.000241f, 0.004715f, -0.007673f, 0.000746f, -0.002068f, + -0.001784f, -0.002364f, -0.001292f, 0.001212f, -0.004426f, -0.003349f, 0.000737f, -0.002653f, -0.003483f, -0.003620f, -0.001179f, -0.002391f, 0.004547f, -0.003902f, -0.001035f, 0.000672f, 0.002328f, -0.000220f, 0.000236f, -0.001333f, 0.000357f, -0.002321f, 0.001864f, -0.003330f, 0.018464f, 0.001703f, 0.006573f, -0.000700f, -0.005058f, 0.000469f, 0.012947f, 0.006737f, 0.008324f, 0.013536f, -0.006034f, 0.000204f, 0.012990f, 0.004248f, 0.005657f, 0.000811f, 0.001520f, 0.007729f, -0.007026f, -0.001978f, 0.009633f, -0.006554f, 0.003708f, 0.005600f, -0.004239f, 0.004133f, 0.012944f, -0.006116f, 0.004719f, 0.001100f, 0.000409f, 0.000232f, -0.002815f, -0.008833f, -0.002858f, -0.007391f, -0.000889f, 0.003184f, 0.006139f, 0.006667f, -0.001296f, -0.011098f, -0.001133f, 0.016364f, -0.006157f, 0.003357f, -0.003043f, -0.017081f, 0.009896f, 0.002585f, 0.007314f, -0.001177f, 0.008344f, 0.008323f, -0.014720f, 0.005897f, 0.000308f, 0.005540f, -0.001221f, -0.010159f, -0.000632f, -0.001369f, -0.002027f, -0.001854f, 0.006380f, 0.000046f, 0.001123f, 0.013325f, 0.002412f, 0.010611f, 0.000183f, 0.001105f, + 0.001859f, -0.005694f, -0.009258f, 0.006314f, -0.007047f, 0.004181f, 0.002392f, -0.000270f, 0.004174f, -0.004508f, -0.002782f, 0.003003f, -0.000017f, -0.008697f, 0.002663f, 0.001129f, 0.000968f, -0.001687f, 0.003640f, 0.000455f, -0.001695f, 0.004337f, -0.001144f, -0.000275f, -0.003711f, 0.001356f, -0.001942f, 0.000703f, -0.000153f, -0.000430f, 0.000666f, -0.001251f, 0.002110f, 0.000622f, -0.001087f, 0.000756f, -0.000727f, 0.000343f, -0.000293f, -0.001317f, 0.030346f, 0.017074f, 0.025962f, 0.008446f, -0.010795f, 0.005534f, -0.004849f, 0.000748f, 0.002496f, -0.022134f, -0.005934f, -0.006084f, 0.005689f, 0.008719f, -0.003620f, -0.000496f, 0.002892f, 0.000715f, 0.015818f, -0.001736f, -0.016660f, 0.005426f, -0.009649f, 0.007397f, 0.008388f, 0.006733f, 0.009777f, -0.002353f, -0.003435f, 0.003990f, -0.002983f, -0.003860f, 0.002786f, -0.002577f, 0.005850f, 0.008442f, -0.003687f, -0.012798f, 0.004083f, -0.012449f, -0.008062f, -0.001568f, -0.025942f, 0.000252f, -0.004416f, 0.010153f, 0.009645f, 0.004678f, 0.015822f, 0.015960f, 0.007029f, 0.003549f, -0.001201f, 0.000769f, 0.000855f, -0.007250f, + 0.014773f, -0.001988f, 0.005107f, -0.004712f, -0.005696f, -0.002052f, -0.008514f, 0.007455f, -0.003963f, -0.003150f, 0.014486f, -0.012123f, -0.003761f, 0.003060f, -0.005598f, -0.001701f, -0.000493f, 0.005073f, 0.005966f, 0.004016f, 0.010303f, -0.003411f, -0.002861f, -0.001526f, -0.006557f, 0.003418f, 0.006603f, 0.009101f, -0.000208f, -0.001405f, -0.001976f, 0.000087f, 0.001933f, 0.001899f, -0.002774f, 0.003009f, -0.000071f, 0.002162f, 0.001828f, -0.000397f, -0.000750f, 0.003893f, -0.001160f, 0.001953f, 0.001584f, 0.001794f, 0.001594f, -0.001150f, 0.001443f, 0.006593f, -0.000517f, 0.000301f, 0.000754f, 0.004859f, 0.000853f, -0.001124f, -0.003501f, -0.011560f, -0.026610f, -0.009519f, -0.002764f, 0.003766f, -0.003286f, 0.008038f, -0.001750f, 0.012989f, -0.011699f, 0.006855f, -0.002871f, 0.023910f, 0.010075f, -0.005299f, -0.010225f, 0.005474f, -0.014562f, -0.007888f, 0.005674f, -0.005230f, -0.008666f, 0.016501f, 0.006964f, -0.001051f, -0.007606f, -0.010464f, 0.007087f, 0.005304f, 0.005308f, -0.000564f, -0.002516f, -0.006514f, 0.009828f, -0.012858f, -0.005395f, -0.000714f, 0.009131f, 0.006807f, + -0.000575f, 0.009860f, 0.001339f, -0.004803f, 0.002114f, -0.004785f, -0.004763f, -0.005757f, 0.007121f, -0.005296f, -0.000077f, 0.009162f, 0.013980f, 0.014076f, 0.005921f, 0.004896f, -0.000822f, 0.007909f, -0.003128f, 0.011436f, -0.001900f, 0.007239f, 0.005808f, -0.004915f, 0.000714f, -0.005371f, 0.005755f, 0.004768f, 0.002096f, -0.001938f, -0.009609f, 0.006729f, -0.010467f, -0.001418f, -0.011335f, 0.004076f, -0.000711f, -0.001235f, 0.002323f, -0.009872f, 0.000595f, 0.002406f, 0.015965f, 0.005006f, 0.002816f, 0.003626f, 0.006327f, 0.002597f, 0.003364f, -0.004836f, 0.003714f, 0.002569f, -0.006313f, -0.000670f, 0.000523f, 0.001259f, 0.002949f, -0.003322f, 0.002236f, -0.002195f, 0.000629f, -0.000517f, 0.004183f, 0.000296f, 0.000693f, 0.000357f, 0.001538f, -0.000956f, 0.003817f, -0.002104f, 0.001556f, 0.001284f, 0.003689f, 0.001539f, 0.005045f, -0.003629f, 0.002005f, -0.000950f, 0.005788f, 0.002022f, 0.002195f, -0.000845f, -0.000579f, 0.000316f, -0.000884f, -0.003766f, -0.012385f, -0.026109f, -0.021027f, 0.001283f, -0.017964f, -0.008892f, -0.025454f, -0.013597f, -0.015509f, 0.006146f, + -0.008280f, -0.011071f, -0.003766f, 0.000570f, -0.006540f, -0.024778f, 0.006655f, -0.004414f, 0.002495f, -0.011239f, 0.011174f, 0.004097f, 0.000260f, -0.010006f, -0.004432f, 0.012619f, 0.008639f, 0.000517f, -0.001882f, -0.008541f, 0.005300f, 0.002700f, 0.005487f, -0.010219f, -0.000946f, -0.008312f, -0.007414f, -0.008134f, 0.000838f, 0.016352f, -0.013384f, 0.000234f, -0.012752f, 0.001250f, 0.005929f, 0.007385f, -0.013449f, 0.013462f, 0.016405f, -0.005472f, -0.003915f, -0.002928f, -0.000660f, 0.005154f, 0.006611f, 0.001575f, 0.004492f, -0.008069f, -0.001573f, -0.003041f, 0.014104f, -0.004495f, 0.015609f, -0.000474f, -0.004821f, 0.012395f, -0.001328f, -0.007537f, 0.002638f, 0.013433f, 0.015530f, -0.001249f, -0.004904f, -0.008558f, 0.005325f, -0.011397f, -0.001161f, 0.007485f, -0.005837f, 0.003322f, -0.000445f, -0.000161f, -0.004706f, 0.000009f, -0.003662f, -0.005756f, -0.000631f, 0.004691f, 0.002475f, 0.004671f, -0.002196f, -0.001645f, -0.003882f, 0.001390f, -0.003153f, 0.004863f, 0.002455f, 0.006834f, 0.000581f, -0.001725f, -0.000697f, -0.001337f, -0.002541f, 0.003071f, -0.002262f, -0.001362f, + 0.001211f, 0.000956f, -0.003516f, -0.001304f, 0.000814f, -0.000007f, -0.001993f, -0.003424f, -0.000317f, -0.003168f, -0.002225f, -0.001396f, 0.003876f, -0.000411f, 0.001256f, 0.001080f, 0.000037f, -0.002509f, -0.000855f, -0.020203f, -0.019987f, -0.023211f, 0.006868f, -0.018808f, -0.007749f, 0.017974f, 0.008850f, -0.020408f, -0.001308f, 0.000148f, 0.009007f, 0.013260f, 0.022800f, -0.006201f, -0.008110f, -0.022403f, -0.027374f, -0.016262f, -0.005455f, 0.011138f, -0.011065f, 0.005334f, -0.015743f, 0.016385f, -0.011796f, 0.013148f, -0.006053f, 0.001799f, 0.003515f, -0.002705f, -0.011631f, 0.018490f, -0.015935f, -0.000865f, -0.008466f, 0.002211f, -0.009875f, 0.002230f, -0.040018f, 0.000588f, 0.018746f, -0.023930f, 0.005539f, 0.016241f, 0.005947f, -0.012497f, -0.001288f, 0.019561f, -0.024093f, -0.000153f, 0.010003f, 0.009426f, 0.009411f, -0.003567f, -0.003395f, -0.015721f, -0.007655f, 0.006335f, 0.010787f, 0.016921f, 0.020845f, -0.030608f, 0.011730f, -0.009293f, 0.002354f, -0.021605f, -0.008634f, 0.017646f, 0.004449f, 0.002355f, -0.011702f, -0.000068f, 0.011557f, 0.008239f, 0.005226f, -0.010741f, + -0.006763f, 0.011013f, -0.002820f, -0.004785f, -0.002272f, -0.007931f, 0.006819f, -0.001382f, -0.006071f, -0.002463f, -0.001996f, 0.001512f, -0.003876f, -0.004355f, 0.001609f, 0.001425f, 0.001844f, -0.002523f, -0.003406f, 0.002932f, -0.002127f, -0.008203f, -0.000575f, -0.002514f, 0.005054f, -0.003864f, 0.000397f, 0.000285f, 0.002109f, -0.005181f, -0.002705f, -0.001944f, 0.000687f, 0.005272f, -0.000482f, -0.001399f, 0.003469f, -0.000057f, 0.003415f, -0.001662f, -0.003457f, -0.001485f, -0.005966f, 0.001258f, 0.000105f, -0.004387f, 0.002440f, 0.023901f, 0.040019f, 0.022176f, 0.026104f, 0.003910f, 0.009302f, 0.034993f, -0.001047f, 0.000992f, 0.024042f, -0.011786f, 0.000108f, 0.006843f, 0.012011f, 0.019736f, -0.016056f, -0.023022f, 0.012712f, 0.006978f, -0.013284f, 0.002807f, 0.008243f, -0.005168f, 0.004759f, -0.012417f, -0.002743f, -0.014493f, 0.004496f, 0.015690f, 0.004947f, 0.013739f, 0.010713f, 0.011172f, -0.027260f, 0.001386f, 0.031848f, -0.003828f, -0.000512f, 0.029586f, -0.003849f, -0.001090f, 0.004446f, -0.003947f, -0.000813f, 0.016361f, 0.025820f, -0.025347f, -0.004068f, 0.005015f, + -0.007711f, 0.011914f, -0.003965f, 0.001142f, 0.001935f, -0.005549f, 0.022739f, -0.002935f, -0.008203f, 0.008472f, -0.008508f, -0.014176f, 0.004939f, 0.015431f, 0.005901f, -0.001740f, 0.003190f, 0.014767f, 0.007784f, 0.013229f, 0.004056f, 0.001632f, -0.000092f, -0.013010f, -0.002631f, -0.010194f, -0.002271f, -0.004286f, -0.023091f, -0.010034f, 0.001552f, 0.014924f, -0.006077f, 0.005768f, -0.003910f, -0.012244f, 0.005491f, 0.001329f, -0.003835f, 0.001923f, -0.007398f, 0.000376f, 0.001912f, 0.004579f, 0.006572f, -0.001554f, 0.004255f, -0.005613f, -0.008268f, -0.009956f, -0.000998f, 0.009023f, -0.001571f, -0.000702f, 0.003069f, 0.000501f, 0.001052f, 0.004863f, -0.002296f, -0.000890f, -0.002594f, 0.006992f, 0.000219f, -0.001029f, 0.000877f, -0.001758f, -0.003667f, -0.004464f, 0.001905f, 0.003977f, 0.004997f, 0.002736f, 0.002015f, -0.000861f, -0.000262f, 0.000086f, -0.001557f, -0.006863f, 0.067447f, 0.009351f, -0.001439f, -0.000408f, -0.032369f, -0.009469f, 0.003126f, -0.007550f, 0.014284f, 0.006284f, 0.023152f, -0.002947f, 0.000038f, -0.004994f, -0.009785f, 0.015532f, 0.002922f, 0.005943f, + 0.008723f, 0.012160f, -0.011433f, -0.011515f, -0.013308f, -0.009262f, -0.007623f, -0.003341f, -0.018283f, -0.003587f, 0.029530f, 0.013922f, -0.005616f, -0.001995f, -0.003470f, 0.002466f, 0.010461f, -0.005114f, 0.042199f, -0.007334f, -0.001148f, -0.019152f, 0.007655f, 0.018411f, -0.003165f, -0.014092f, -0.001828f, 0.007093f, 0.014133f, 0.006106f, 0.019867f, 0.029676f, 0.009668f, -0.000630f, 0.017628f, 0.014403f, 0.005385f, 0.011133f, -0.036988f, 0.008588f, 0.000978f, -0.032726f, 0.012023f, -0.000763f, -0.014101f, 0.009229f, -0.014954f, -0.014548f, 0.017359f, 0.013662f, -0.007710f, -0.028953f, -0.013105f, 0.006965f, -0.016645f, -0.003385f, 0.007282f, 0.028459f, -0.004611f, 0.005764f, -0.014826f, -0.031241f, -0.016781f, -0.014962f, -0.006782f, 0.014948f, 0.002046f, -0.010353f, -0.003140f, -0.006446f, -0.006303f, 0.009573f, 0.007954f, 0.003093f, 0.006794f, 0.008084f, -0.006776f, -0.004952f, -0.005033f, 0.001117f, -0.005520f, -0.008177f, -0.007962f, 0.003500f, -0.002696f, -0.001137f, 0.001137f, 0.002994f, -0.006760f, 0.003888f, -0.001450f, -0.000768f, -0.002991f, -0.001046f, -0.004248f, 0.010719f, + -0.006579f, -0.002243f, 0.001902f, -0.006792f, -0.006590f, -0.004964f, 0.000418f, 0.005487f, -0.035747f, 0.022513f, -0.004142f, -0.023097f, -0.000915f, 0.020941f, -0.023959f, -0.005090f, -0.019317f, 0.012768f, 0.004154f, -0.007155f, -0.008225f, -0.003009f, 0.012863f, 0.009786f, 0.005525f, 0.013325f, 0.011748f, 0.001137f, 0.014187f, 0.016212f, 0.006734f, 0.008939f, -0.016591f, -0.008195f, -0.011552f, 0.010185f, 0.013384f, 0.004695f, 0.004140f, -0.007963f, -0.005771f, -0.004920f, -0.004281f, -0.014190f, 0.012899f, 0.002858f, 0.000838f, -0.015185f, -0.004505f, 0.023841f, -0.017248f, -0.018522f, -0.028230f, 0.009738f, -0.021174f, 0.030602f, 0.035550f, 0.024364f, 0.014336f, 0.001234f, 0.027787f, -0.014835f, 0.021838f, -0.002992f, -0.015583f, 0.000997f, 0.001271f, -0.033591f, -0.014884f, 0.012383f, 0.001908f, -0.005831f, 0.005044f, 0.027868f, 0.019169f, -0.032404f, -0.008163f, -0.000669f, -0.000867f, 0.009099f, 0.013704f, -0.000851f, -0.025861f, 0.010192f, -0.015016f, -0.048147f, -0.013970f, -0.009969f, 0.014858f, 0.023990f, 0.008153f, 0.000985f, 0.001215f, 0.000507f, 0.002138f, 0.017017f, + 0.000040f, 0.002336f, 0.002197f, 0.008481f, -0.015276f, -0.001041f, 0.004663f, 0.011144f, 0.013681f, 0.004620f, 0.008114f, 0.011902f, 0.015981f, 0.020402f, 0.007858f, 0.009980f, 0.010063f, 0.000271f, -0.000963f, -0.003982f, -0.002568f, -0.000137f, 0.004188f, -0.012312f, -0.003007f, 0.006789f, 0.011292f, -0.001461f, 0.003155f, -0.001798f, 0.004732f, -0.000174f, 0.007237f, -0.001425f, 0.006939f, -0.005437f, 0.008892f, -0.000083f, 0.008398f, -0.029980f, 0.002988f, 0.003334f, 0.018752f, 0.004039f, 0.047910f, 0.007625f, -0.019774f, -0.006400f, -0.016650f, 0.030273f, -0.038840f, -0.003473f, 0.026846f, -0.058670f, -0.023155f, -0.019802f, -0.020512f, -0.038916f, 0.003677f, -0.006826f, -0.016691f, -0.002132f, 0.018405f, 0.002311f, 0.002439f, -0.011484f, 0.004561f, -0.003890f, 0.004533f, 0.000017f, 0.002908f, 0.015002f, -0.003649f, -0.000936f, 0.030527f, -0.019753f, -0.003980f, 0.005268f, 0.026293f, -0.013813f, 0.037544f, -0.011374f, -0.015171f, -0.032152f, -0.041831f, -0.012211f, -0.031136f, 0.015180f, -0.009450f, -0.023383f, 0.003189f, 0.003770f, 0.017219f, 0.014560f, 0.006085f, -0.002966f, + 0.053135f, 0.029402f, -0.003359f, 0.005177f, 0.018194f, 0.013598f, 0.008835f, -0.007202f, -0.001041f, -0.009542f, -0.012392f, -0.011467f, 0.008006f, 0.041436f, -0.028978f, -0.007103f, -0.016505f, 0.029859f, -0.007873f, 0.009249f, -0.004266f, 0.014017f, -0.032822f, -0.024552f, -0.008481f, 0.013943f, 0.004416f, 0.012039f, -0.007266f, 0.007425f, 0.011229f, 0.009861f, 0.004673f, -0.001963f, -0.014007f, 0.008811f, 0.003283f, -0.011886f, -0.008346f, 0.007434f, -0.007826f, -0.005924f, -0.000260f, 0.008005f, -0.007457f, 0.009647f, -0.006056f, 0.013782f, -0.007689f, 0.001542f, 0.004793f, 0.002507f, -0.006663f, -0.012594f, 0.009742f, -0.003783f, -0.002853f, -0.000984f, -0.001335f, -0.003981f, 0.009236f, 0.011556f, 0.007995f, 0.007071f, -0.001403f, 0.004079f, 0.013233f, -0.007149f, 0.005211f, 0.002304f, -0.000346f, 0.002922f, -0.000893f, 0.000718f, -0.004832f, -0.023885f, -0.022960f, 0.012946f, -0.010295f, -0.043007f, 0.021295f, -0.012811f, 0.017004f, -0.012359f, 0.021403f, 0.014602f, 0.017792f, 0.028540f, 0.004601f, 0.024155f, 0.009676f, 0.006266f, 0.016353f, 0.005692f, 0.004462f, 0.001212f, + -0.000717f, -0.015284f, 0.013621f, -0.031076f, 0.013581f, 0.003302f, -0.008954f, -0.016721f, -0.000479f, 0.012086f, -0.013937f, -0.005748f, -0.020821f, -0.007991f, -0.025622f, 0.001683f, 0.014038f, -0.000190f, -0.003358f, -0.016165f, -0.028286f, -0.020438f, 0.022035f, 0.007448f, -0.009243f, -0.016145f, -0.004017f, -0.001213f, -0.027655f, 0.023471f, 0.021240f, -0.027108f, -0.026473f, -0.043220f, -0.006633f, -0.051727f, 0.013925f, 0.020291f, 0.010582f, -0.003120f, -0.006656f, -0.005237f, 0.021233f, 0.021627f, 0.024775f, -0.016035f, -0.012890f, 0.016726f, -0.007205f, -0.007606f, -0.030431f, 0.013639f, 0.024793f, 0.028581f, -0.006739f, 0.015725f, -0.008785f, 0.004835f, 0.015516f, 0.008187f, -0.010998f, 0.005315f, -0.018801f, -0.011249f, -0.007821f, 0.002967f, 0.007884f, 0.006979f, -0.007472f, -0.006627f, -0.002809f, -0.008216f, -0.001697f, -0.011387f, -0.014468f, -0.007370f, -0.006052f, -0.004214f, -0.001960f, -0.003982f, -0.005775f, 0.001485f, -0.000302f, 0.008596f, -0.002932f, 0.010922f, -0.002851f, 0.008775f, 0.000540f, -0.004569f, 0.002141f, 0.021860f, 0.006653f, 0.011280f, -0.005016f, -0.008460f, + 0.001742f, 0.008138f, -0.007583f, 0.015948f, 0.015709f, 0.004800f, 0.007357f, 0.003581f, -0.018051f, -0.009180f, 0.041322f, 0.047888f, -0.018977f, -0.001001f, 0.012843f, -0.038622f, -0.007242f, 0.048178f, 0.001617f, -0.052338f, 0.005692f, 0.016178f, -0.001315f, 0.018278f, 0.042987f, -0.017586f, 0.038850f, 0.021151f, 0.033154f, 0.009378f, -0.025475f, -0.027023f, 0.021669f, -0.024515f, -0.038650f, -0.011146f, -0.045911f, 0.010164f, -0.003124f, 0.016357f, 0.013968f, 0.010084f, 0.005148f, -0.001781f, 0.001264f, 0.023380f, 0.011355f, -0.044906f, -0.005286f, 0.015132f, 0.028894f, 0.016181f, 0.035803f, 0.032379f, 0.025291f, -0.011896f, -0.004333f, 0.006764f, 0.065204f, -0.027240f, 0.004772f, 0.013892f, 0.025575f, -0.010473f, -0.036255f, -0.007538f, -0.009143f, -0.021759f, -0.040096f, -0.043716f, 0.012023f, -0.024489f, -0.018537f, 0.011401f, 0.034483f, 0.042551f, 0.000807f, -0.002332f, -0.000512f, 0.032702f, -0.022129f, -0.011238f, 0.038628f, -0.042027f, 0.004677f, -0.033186f, -0.022303f, 0.002556f, 0.044795f, -0.007190f, -0.030629f, 0.040025f, -0.040884f, 0.001745f, -0.049356f, -0.004271f, + -0.006190f, 0.014625f, 0.027468f, -0.020236f, -0.011545f, -0.014279f, 0.003707f, 0.001107f, -0.015280f, 0.008781f, -0.004511f, -0.004220f, -0.006509f, -0.005168f, -0.018093f, 0.004183f, -0.008706f, 0.006530f, 0.004904f, -0.001207f, -0.003985f, 0.011117f, 0.000027f, 0.000286f, -0.021336f, 0.003325f, -0.001797f, -0.000581f, 0.019948f, 0.002134f, 0.005653f, -0.008183f, 0.003247f, -0.004662f, -0.011579f, 0.005234f, -0.023628f, 0.008043f, -0.008128f, 0.017877f, -0.014048f, -0.001755f, 0.003300f, -0.001810f, -0.003651f, -0.007198f, 0.013191f, -0.008522f, 0.014361f, -0.004905f, 0.008479f, 0.022479f, -0.026419f, -0.059151f, -0.013956f, -0.020640f, -0.019489f, -0.012238f, 0.002747f, -0.020282f, -0.017155f, 0.005643f, 0.013178f, -0.012743f, 0.031314f, -0.003417f, 0.020979f, -0.010618f, -0.001250f, 0.018044f, -0.025814f, -0.016186f, -0.008789f, 0.026928f, -0.006502f, -0.029625f, -0.011183f, 0.004444f, -0.014359f, 0.012264f, -0.019850f, -0.019985f, 0.029001f, 0.008398f, -0.022990f, 0.013928f, -0.002777f, -0.018145f, -0.001764f, -0.030066f, -0.025835f, 0.005094f, 0.045029f, 0.018127f, 0.014027f, -0.036125f, + 0.027798f, -0.003226f, 0.021296f, -0.012611f, -0.025134f, 0.012187f, -0.046356f, 0.038686f, -0.062761f, -0.039805f, 0.014530f, 0.034520f, 0.002670f, 0.041340f, -0.018104f, 0.010820f, -0.028715f, 0.038778f, 0.012472f, 0.028833f, 0.013284f, 0.006750f, -0.009114f, -0.009698f, -0.018956f, -0.006646f, -0.001140f, -0.033471f, -0.019973f, 0.002900f, -0.050696f, 0.002826f, 0.056927f, 0.016945f, 0.020500f, 0.005456f, -0.025829f, -0.019467f, -0.005269f, -0.006259f, -0.001837f, -0.010065f, -0.013589f, 0.011315f, 0.007444f, 0.010265f, 0.016082f, -0.016272f, 0.010556f, -0.006197f, -0.008778f, -0.006650f, 0.014321f, -0.004868f, -0.015628f, -0.023694f, -0.000165f, -0.014276f, -0.006713f, -0.014635f, -0.004061f, -0.009603f, -0.005760f, 0.022260f, -0.012172f, 0.005073f, 0.006904f, -0.017901f, 0.020393f, 0.000168f, 0.012193f, 0.016042f, -0.007472f, 0.007923f, 0.003598f, -0.000742f, 0.004962f, 0.013423f, -0.007794f, -0.007637f, 0.012377f, 0.001041f, 0.009840f, -0.044453f, -0.041457f, 0.004092f, 0.017087f, -0.020962f, -0.093790f, -0.019605f, -0.000479f, 0.012259f, -0.031724f, 0.002743f, -0.017689f, -0.003688f, + -0.025274f, -0.028222f, 0.025072f, -0.027445f, -0.033673f, -0.005695f, -0.023568f, -0.025921f, 0.008928f, -0.037655f, -0.012461f, 0.022720f, 0.052034f, 0.042025f, -0.002004f, -0.025639f, 0.008997f, 0.037827f, -0.001744f, 0.025157f, -0.007217f, 0.031690f, 0.017823f, -0.032552f, 0.051812f, -0.039488f, -0.020849f, 0.034872f, -0.038421f, 0.011597f, -0.008823f, -0.028922f, 0.003417f, 0.043835f, -0.009087f, -0.025766f, 0.016424f, 0.021510f, -0.000607f, 0.008903f, -0.063031f, 0.015223f, 0.002650f, 0.031807f, 0.015416f, -0.027653f, 0.027482f, -0.014733f, -0.002375f, -0.025628f, 0.013638f, 0.036941f, -0.007589f, -0.007309f, -0.037841f, -0.053550f, 0.030489f, -0.003874f, 0.024571f, -0.029286f, 0.022312f, 0.017808f, -0.038087f, 0.002199f, 0.033964f, 0.019386f, -0.017766f, -0.030642f, 0.027785f, 0.004526f, -0.023781f, 0.022601f, 0.003766f, 0.010077f, 0.002722f, 0.009365f, 0.001795f, 0.025253f, 0.000392f, 0.008696f, -0.001667f, 0.001050f, 0.022466f, -0.007225f, 0.000601f, 0.005102f, -0.005833f, 0.004094f, 0.002053f, 0.015490f, -0.000752f, -0.017235f, -0.002077f, 0.002196f, -0.010210f, -0.003052f, + 0.001150f, -0.006882f, 0.023263f, -0.005476f, -0.013277f, 0.001477f, 0.014816f, 0.006948f, -0.000749f, 0.008423f, 0.001225f, -0.009662f, -0.001176f, 0.024401f, 0.016694f, -0.016499f, -0.012050f, 0.003526f, 0.035352f, 0.035468f, -0.095639f, 0.036058f, 0.048476f, -0.012336f, 0.033721f, -0.000341f, 0.017475f, -0.007764f, -0.019670f, -0.012704f, 0.020338f, 0.004799f, -0.027631f, -0.017947f, -0.002559f, -0.012958f, -0.007079f, -0.002969f, 0.059155f, 0.011894f, 0.013095f, -0.036600f, 0.025468f, -0.026062f, 0.000380f, 0.004584f, -0.040000f, 0.018678f, -0.014833f, 0.002085f, -0.016199f, -0.028915f, 0.000781f, 0.019194f, 0.054813f, 0.019716f, 0.005691f, 0.033909f, 0.014348f, -0.004093f, 0.005565f, 0.000855f, 0.009564f, 0.005556f, 0.037177f, 0.016275f, 0.011232f, 0.006136f, -0.004776f, -0.011558f, -0.036617f, -0.030735f, 0.004260f, -0.004394f, -0.022596f, 0.003209f, 0.027450f, -0.041887f, 0.040459f, 0.010429f, -0.014915f, -0.001682f, -0.010846f, -0.003358f, 0.024502f, 0.010718f, 0.007975f, -0.028463f, -0.005800f, -0.038903f, -0.012014f, 0.010834f, 0.014210f, 0.014174f, -0.016860f, -0.013524f, + 0.030136f, -0.003555f, -0.048884f, 0.007022f, -0.000909f, -0.000533f, -0.028874f, 0.009460f, 0.021561f, -0.002980f, 0.031042f, 0.020943f, -0.010468f, -0.000575f, -0.013496f, 0.016776f, -0.001475f, 0.005529f, 0.002520f, -0.007063f, -0.005932f, -0.001295f, -0.006149f, 0.006804f, -0.013417f, -0.001313f, 0.000756f, 0.007237f, -0.006935f, -0.008029f, -0.009595f, 0.000522f, -0.002372f, 0.005330f, 0.003028f, -0.000283f, -0.006014f, 0.006470f, 0.004850f, 0.000955f, 0.007037f, 0.001290f, 0.005017f, 0.004688f, 0.006673f, -0.001861f, -0.024563f, -0.000928f, -0.007043f, -0.085000f, 0.131732f, -0.130244f, -0.058902f, -0.029763f, -0.008891f, 0.076197f, 0.022391f, 0.085301f, 0.021299f, -0.017442f, 0.067208f, 0.029081f, -0.022758f, 0.031507f, 0.028514f, 0.015945f, 0.026677f, 0.025873f, -0.023070f, -0.037249f, -0.026526f, 0.004292f, -0.024395f, 0.012864f, 0.007639f, 0.016680f, -0.002613f, 0.011524f, 0.003882f, 0.041874f, 0.009916f, 0.003928f, 0.012874f, -0.009782f, -0.000610f, 0.014766f, -0.026304f, -0.037391f, -0.025434f, -0.021764f, 0.003691f, 0.011063f, -0.026378f, -0.004313f, -0.015886f, -0.064812f, + 0.032598f, -0.011737f, 0.016481f, -0.034105f, -0.011612f, -0.031594f, -0.043297f, 0.016316f, 0.011434f, 0.042069f, -0.001853f, 0.037062f, -0.015742f, 0.031040f, 0.003623f, 0.044314f, -0.031449f, 0.027408f, 0.032919f, 0.018207f, 0.019079f, 0.001590f, -0.013509f, 0.051894f, 0.034704f, -0.003476f, 0.062597f, 0.014973f, 0.007292f, 0.026786f, 0.040335f, 0.000457f, 0.018522f, 0.023281f, 0.010610f, 0.010147f, -0.004728f, 0.002019f, -0.036660f, -0.009410f, -0.004987f, 0.005775f, 0.007634f, 0.007193f, 0.024293f, 0.010711f, 0.012359f, -0.009593f, -0.001387f, 0.009508f, 0.000959f, 0.000738f, -0.008759f, 0.009943f, 0.008432f, 0.004747f, -0.006851f, 0.012648f, -0.001995f, 0.002189f, -0.009929f, -0.009246f, -0.003742f, 0.000920f, 0.001070f, -0.006091f, -0.020200f, 0.004574f, 0.004309f, -0.005557f, -0.001071f, -0.005271f, 0.001460f, -0.007486f, 0.004902f, -0.007217f, 0.000247f, 0.017940f, -0.005193f, -0.018018f, 0.011563f, 0.008291f, 0.007014f, -0.004441f, -0.002446f, 0.080423f, 0.006968f, -0.048450f, -0.071172f, -0.037757f, -0.029691f, 0.009550f, 0.058937f, -0.000977f, -0.024899f, 0.052703f, + 0.004361f, -0.042599f, 0.038338f, 0.041565f, -0.007594f, -0.000787f, -0.004010f, -0.037710f, 0.041928f, 0.002356f, 0.023821f, -0.013300f, -0.033514f, -0.058639f, 0.010711f, 0.007400f, 0.009098f, -0.008279f, 0.018462f, -0.019501f, -0.000203f, -0.037583f, -0.046798f, 0.016444f, -0.005896f, 0.014905f, -0.006734f, -0.017373f, -0.042371f, -0.065815f, 0.033786f, -0.036780f, 0.015129f, 0.031656f, -0.002181f, -0.016943f, -0.032281f, -0.023285f, 0.075819f, 0.017225f, -0.003419f, 0.009852f, -0.009975f, -0.030633f, -0.010017f, 0.043948f, -0.042455f, -0.071487f, -0.024939f, -0.022689f, -0.100142f, -0.078265f, -0.042112f, -0.043522f, 0.010792f, -0.000451f, -0.034829f, -0.066822f, -0.026411f, -0.031577f, -0.022652f, -0.018274f, -0.013433f, -0.039965f, -0.038290f, 0.030317f, -0.034002f, 0.002165f, 0.005189f, -0.041872f, -0.007310f, -0.030550f, -0.038274f, -0.009281f, -0.006213f, 0.017799f, 0.007498f, 0.023930f, -0.024441f, 0.006332f, 0.014098f, -0.000060f, -0.032885f, -0.018575f, -0.022054f, -0.002088f, 0.010775f, -0.011130f, -0.015986f, 0.028608f, 0.017031f, 0.020616f, -0.033617f, 0.005813f, -0.016340f, -0.001777f, + 0.001461f, 0.003463f, -0.003993f, 0.034115f, 0.002720f, -0.005860f, 0.004342f, 0.012047f, 0.017208f, 0.014257f, -0.002203f, 0.020295f, -0.014464f, -0.007578f, -0.006203f, -0.026184f, -0.000705f, -0.007872f, -0.033828f, -0.028164f, 0.004946f, 0.001613f, -0.000518f, -0.008478f, -0.007411f, 0.055260f, -0.006569f, 0.052643f, 0.077913f, -0.014353f, -0.084588f, -0.081845f, -0.017723f, 0.039263f, 0.005263f, -0.064229f, 0.050315f, -0.010975f, -0.042236f, 0.051775f, -0.097414f, -0.020418f, 0.000307f, -0.017198f, -0.015123f, 0.118011f, -0.049673f, 0.110592f, -0.005710f, 0.023302f, -0.008433f, -0.043626f, 0.070553f, 0.018846f, 0.073364f, -0.050398f, -0.050000f, 0.016135f, -0.080487f, -0.023971f, -0.013186f, -0.055708f, 0.115719f, -0.010040f, -0.120692f, -0.001763f, -0.053992f, 0.015751f, 0.029304f, 0.048332f, 0.038848f, -0.047473f, -0.030112f, -0.073905f, -0.022037f, -0.034190f, 0.031333f, 0.021029f, -0.004394f, 0.021885f, -0.015191f, -0.052404f, -0.021885f, -0.061167f, 0.062411f, -0.047274f, -0.033131f, 0.056463f, 0.012932f, 0.095398f, 0.045802f, 0.008441f, 0.049905f, -0.067306f, -0.025570f, -0.069495f, + -0.068047f, -0.010310f, -0.010252f, -0.084803f, 0.087143f, -0.015278f, -0.068352f, -0.101021f, 0.006221f, -0.019927f, 0.073711f, -0.004575f, 0.003446f, 0.010108f, -0.013684f, 0.014215f, 0.016279f, 0.034958f, -0.023700f, -0.023315f, -0.015416f, 0.001223f, -0.004656f, -0.004708f, -0.022405f, 0.024736f, 0.014802f, 0.029474f, -0.007278f, -0.015684f, -0.013957f, -0.005022f, 0.005117f, 0.039417f, 0.041331f, -0.006633f, 0.001927f, 0.022828f, -0.006681f, -0.052093f, -0.025733f, 0.003423f, 0.006832f, -0.003947f, -0.033659f, 0.011827f, -0.004297f, -0.007773f, -0.038485f, 0.015098f, 0.012593f, 0.045600f, 0.007132f, 0.011342f, -0.002539f, 0.018838f, 0.002993f, -0.010696f, -0.157769f, 0.081510f, 0.018647f, -0.033952f, -0.025795f, 0.050399f, 0.027556f, -0.030347f, -0.008445f, -0.074106f, -0.031200f, 0.031669f, -0.064306f, 0.002587f, 0.011357f, -0.019474f, -0.042950f, -0.029069f, 0.057452f, 0.023278f, -0.011744f, -0.082687f, 0.027871f, 0.052262f, 0.029907f, -0.063990f, -0.042909f, 0.000418f, 0.069619f, 0.006374f, -0.017074f, 0.011156f, 0.002065f, 0.035829f, -0.093205f, -0.080303f, 0.099406f, 0.015620f, + 0.041478f, -0.094559f, 0.020451f, -0.004089f, 0.069258f, -0.062084f, -0.012087f, -0.094783f, 0.033042f, 0.068643f, 0.015877f, -0.041994f, 0.027040f, 0.099549f, -0.044689f, -0.047173f, -0.037340f, 0.014343f, 0.003985f, 0.087369f, -0.026181f, 0.006918f, -0.047141f, 0.015662f, -0.051676f, -0.001440f, 0.032934f, -0.064110f, 0.061409f, 0.018951f, -0.044846f, -0.069360f, -0.042410f, -0.003231f, 0.061963f, -0.112040f, -0.024596f, 0.101970f, 0.013275f, -0.045537f, -0.021676f, -0.032012f, 0.095643f, -0.010268f, -0.100472f, -0.011301f, -0.000150f, -0.024374f, 0.040816f, -0.006633f, -0.014176f, 0.031447f, -0.002900f, -0.020175f, -0.026408f, -0.002327f, -0.023293f, 0.007493f, 0.016954f, 0.023005f, -0.020275f, -0.014389f, 0.020793f, -0.013199f, 0.019692f, -0.009982f, -0.020206f, 0.028113f, -0.015217f, 0.025384f, 0.034148f, 0.002752f, -0.049651f, -0.002820f, -0.029616f, 0.012877f, 0.018259f, 0.012546f, -0.034701f, 0.000954f, -0.026211f, 0.025081f, -0.007393f, -0.014370f, -0.010024f, 0.005947f, 0.008368f, 0.104286f, 0.053247f, 0.024267f, 0.023999f, 0.025314f, -0.016675f, -0.016104f, -0.035254f, 0.004729f, + 0.011202f, 0.009504f, -0.002201f, -0.059595f, 0.028551f, 0.012077f, -0.041779f, -0.035014f, -0.018191f, -0.020333f, 0.015362f, -0.015102f, -0.017818f, 0.005483f, -0.001618f, -0.031458f, 0.040616f, -0.028902f, -0.009626f, -0.030041f, -0.027743f, 0.020217f, -0.011917f, -0.003613f, 0.010096f, 0.013342f, -0.003490f, -0.040083f, 0.009490f, 0.063556f, 0.013323f, -0.098623f, -0.006426f, -0.021073f, -0.030947f, 0.021297f, 0.022185f, 0.051711f, 0.024530f, -0.064159f, 0.069915f, -0.016905f, -0.048721f, 0.146382f, -0.029557f, -0.012022f, -0.048277f, -0.115536f, 0.052988f, 0.059399f, 0.019305f, 0.022724f, -0.099306f, 0.029314f, -0.007878f, -0.023551f, -0.017582f, 0.004457f, -0.009538f, 0.016010f, 0.018781f, 0.004590f, -0.014804f, -0.027896f, 0.030003f, 0.038284f, 0.052554f, -0.025532f, -0.005403f, 0.011683f, -0.007804f, 0.028087f, -0.068125f, 0.007094f, 0.012002f, -0.031402f, 0.005244f, -0.026077f, 0.010396f, 0.000985f, 0.008341f, -0.003893f, 0.001872f, 0.003125f, -0.001375f, -0.000414f, -0.009059f, -0.006557f, 0.018198f, -0.009554f, -0.000663f, 0.013956f, 0.003016f, 0.001116f, 0.022273f, -0.017835f, + 0.013668f, 0.016479f, -0.000936f, -0.002691f, -0.018766f, 0.015758f, -0.035131f, -0.009368f, 0.023061f, 0.007152f, -0.009508f, -0.023297f, 0.007316f, -0.005016f, 0.028712f, -0.058831f, -0.141937f, -0.239180f, 0.019166f, 0.243897f, 0.023079f, 0.518107f, 0.522984f, 0.190146f, 0.524829f, 0.304648f, -0.088781f, -0.008070f, -0.047818f, -0.397697f, -0.330154f, -0.231353f, -0.413332f, -0.394342f, -0.112828f, -0.248094f, -0.216603f, 0.049290f, 0.068854f, -0.053264f, 0.076525f, 0.113039f, -0.000456f, 0.008241f, 0.224245f, 0.150098f, 0.056876f, 0.166339f, 0.310264f, 0.146523f, 0.170880f, 0.384515f, 0.151725f, 0.069438f, 0.331989f, 0.320674f, 0.013761f, 0.205248f, 0.362196f, 0.001069f, 0.091738f, 0.215274f, -0.008738f, -0.175277f, 0.086690f, -0.036275f, -0.338343f, -0.314845f, -0.289938f, -0.562535f, -0.832397f, -0.578894f, -0.809885f, -1.078273f, -0.761467f, -0.616577f, -0.834321f, -0.532344f, -0.256711f, -0.246777f, -0.047299f, 0.248831f, 0.500935f, 0.567925f, 0.759267f, 1.034058f, 1.015367f, 0.961258f, 1.082026f, 1.081117f, 0.882190f, 0.710818f, 0.760393f, 0.505955f, 0.179460f, 0.241351f, + 0.058701f, -0.443528f, -0.285866f, -0.301417f, -0.619889f, -0.522872f, -0.376663f, -0.440183f, -0.510167f, -0.316934f, -0.277660f, -0.385261f, -0.318570f, -0.164973f, -0.265146f, -0.348178f, -0.210017f, -0.147563f, -0.276908f, -0.155737f, 0.035857f, -0.086301f, -0.099403f, 0.111080f, -0.004453f, -0.140042f, -0.018521f, -0.088134f, -0.317523f, -0.220325f, -0.167297f, -0.293895f, -0.132187f, 0.073322f, 0.140175f, 0.260351f, 0.432589f, 0.503807f, 0.527904f, 0.592827f, 0.630337f, 0.621475f, 0.572207f, 0.533234f, 0.452033f, 0.359886f, 0.219959f, 0.165356f, 0.018603f, -0.141650f, -0.248591f, -0.396133f, -0.570266f, -0.553786f, -0.472488f, -0.427510f, -0.372036f, -0.254468f, -0.215697f, -0.192117f, -0.140173f, -0.092185f, -0.083834f, -0.036115f, -0.024264f, -0.017373f, -0.003801f, 0.030033f, 0.050725f, 0.067396f, 0.078476f, 0.092364f, 0.085115f, 0.076594f, 0.046140f, 0.031854f, 0.006745f, 0.007675f, -0.002778f} + }, + { + {0.019095f, -0.000790f, -0.001011f, 0.006083f, -0.002474f, 0.006948f, -0.003677f, -0.008916f, 0.003142f, 0.008958f, 0.001328f, -0.001390f, 0.011901f, 0.000405f, 0.000497f, -0.004058f, -0.002258f, 0.018540f, 0.002584f, -0.012583f, -0.009302f, 0.013077f, -0.001187f, 0.013561f, 0.000956f, -0.002576f, -0.001272f, 0.010243f, 0.002031f, 0.021502f, 0.009472f, 0.005921f, -0.001154f, 0.004778f, 0.009730f, -0.002390f, -0.007246f, -0.009104f, -0.001742f, 0.008212f, 0.007063f, 0.010956f, 0.003080f, -0.006123f, -0.006368f, -0.002650f, 0.004578f, -0.001465f, 0.002519f, -0.001245f, -0.009747f, -0.007523f, 0.002986f, 0.007121f, 0.004383f, -0.003524f, -0.004021f, -0.000269f, 0.010632f, 0.005411f, -0.001165f, -0.002376f, 0.004930f, 0.003329f, 0.002116f, -0.005419f, 0.002727f, 0.005099f, -0.000654f, 0.007787f, 0.009188f, -0.016046f, 0.005895f, 0.003282f, 0.010476f, 0.003163f, 0.000834f, 0.004783f, -0.002123f, -0.007480f, -0.002780f, -0.004506f, -0.001504f, -0.000927f, 0.004556f, -0.000229f, -0.003647f, 0.000057f, 0.000537f, 0.002722f, -0.002369f, 0.000443f, -0.000459f, 0.000974f, 0.001392f, 0.000975f, + 0.001797f, 0.000182f, 0.001110f, 0.005368f, 0.008358f, 0.018064f, -0.014683f, 0.003306f, -0.003223f, 0.000205f, -0.018867f, 0.001893f, 0.011351f, -0.016785f, -0.003478f, 0.011211f, 0.029759f, 0.004263f, -0.000200f, 0.002114f, -0.018636f, -0.000603f, 0.013742f, 0.012193f, 0.000338f, -0.000390f, 0.001135f, 0.006399f, 0.010722f, 0.011294f, 0.012215f, -0.005457f, 0.002645f, -0.000745f, 0.004714f, 0.001318f, 0.003042f, -0.018915f, -0.005177f, 0.002948f, 0.001552f, -0.010462f, -0.000328f, 0.007135f, -0.008313f, 0.006569f, 0.006073f, 0.011195f, 0.005252f, -0.004283f, 0.005598f, 0.012512f, -0.006998f, -0.011302f, 0.003802f, 0.002620f, 0.002218f, 0.005930f, -0.004999f, -0.009139f, -0.013609f, 0.010999f, -0.002014f, -0.002577f, -0.004419f, 0.004827f, -0.000156f, 0.007133f, 0.014117f, 0.002854f, 0.000973f, -0.000760f, -0.003391f, -0.011002f, 0.017124f, 0.004210f, -0.002027f, 0.008843f, -0.001374f, -0.010142f, -0.008901f, -0.001981f, 0.003383f, -0.014791f, 0.001236f, -0.008769f, -0.001638f, 0.004513f, -0.000239f, 0.002373f, -0.002628f, -0.004837f, -0.001008f, 0.002444f, 0.003371f, 0.002483f, + -0.000495f, -0.001484f, -0.000067f, 0.002417f, -0.001254f, -0.002463f, -0.001819f, -0.008856f, -0.007687f, -0.009608f, -0.013653f, 0.007642f, -0.000178f, -0.006523f, -0.002598f, -0.003334f, 0.002962f, -0.005419f, -0.009375f, 0.002133f, -0.006097f, 0.016013f, 0.021284f, 0.016834f, -0.011649f, -0.000448f, -0.000770f, 0.004503f, -0.006467f, 0.013207f, 0.008280f, -0.001884f, 0.006394f, 0.010017f, 0.000809f, 0.002429f, 0.003494f, 0.009733f, -0.000932f, 0.003622f, 0.011645f, 0.001188f, -0.000134f, -0.005085f, 0.008379f, -0.012654f, 0.005112f, -0.001769f, -0.002602f, 0.008438f, -0.008150f, -0.001026f, 0.000287f, -0.010998f, 0.004571f, -0.002215f, 0.005096f, -0.000351f, -0.004755f, 0.003346f, 0.003501f, -0.000575f, 0.009775f, -0.000693f, 0.011277f, -0.000163f, -0.007495f, -0.003330f, 0.000434f, -0.005112f, 0.010057f, 0.005254f, 0.008634f, 0.009797f, -0.004278f, -0.009685f, -0.006331f, -0.000004f, -0.001796f, -0.002058f, 0.007982f, 0.010077f, -0.001503f, -0.005508f, 0.003507f, 0.002757f, -0.003854f, -0.005255f, 0.001811f, -0.007552f, 0.001848f, -0.000135f, -0.000233f, -0.002014f, -0.007155f, 0.001630f, + -0.002815f, 0.000308f, 0.003209f, 0.000012f, -0.003653f, 0.001849f, -0.005011f, -0.000075f, 0.000327f, -0.001136f, 0.000426f, 0.000979f, -0.002738f, 0.000066f, 0.000340f, -0.003232f, 0.000694f, -0.000958f, -0.000195f, -0.001689f, -0.000041f, 0.000929f, -0.028150f, -0.006645f, -0.008763f, -0.015233f, 0.005197f, 0.003982f, -0.001808f, 0.007075f, -0.000973f, 0.005970f, 0.008448f, -0.003716f, -0.009839f, -0.012416f, -0.004726f, -0.011563f, 0.000914f, 0.001273f, -0.005027f, 0.006557f, -0.005650f, 0.003515f, -0.002578f, -0.006599f, -0.017520f, -0.006825f, 0.001568f, 0.002752f, 0.004612f, -0.006521f, 0.004659f, 0.007042f, 0.002337f, 0.015986f, 0.003983f, -0.000413f, 0.012385f, -0.008754f, 0.007155f, 0.001173f, -0.004161f, -0.005929f, 0.007988f, 0.001070f, 0.002527f, -0.018880f, -0.003478f, -0.006242f, 0.018968f, 0.008125f, 0.006833f, 0.007693f, 0.008708f, 0.006886f, 0.009656f, -0.005113f, -0.002070f, 0.005914f, 0.009485f, -0.001281f, 0.011077f, -0.005968f, 0.002423f, -0.002409f, 0.009382f, 0.014046f, -0.021953f, 0.005747f, -0.005433f, 0.000695f, -0.010359f, -0.005332f, 0.001728f, -0.003152f, + -0.004453f, -0.008796f, -0.003967f, 0.004128f, -0.000219f, 0.009388f, -0.000997f, 0.003613f, 0.008138f, 0.012935f, -0.000494f, 0.003408f, -0.001526f, 0.006014f, 0.000955f, 0.002919f, -0.004031f, -0.001427f, 0.000416f, 0.002740f, -0.001809f, -0.002951f, 0.000128f, 0.000147f, -0.002289f, 0.000329f, 0.001299f, 0.000037f, 0.003757f, -0.001677f, -0.001783f, 0.000411f, 0.003270f, -0.001351f, 0.000053f, -0.001215f, 0.001938f, 0.003010f, -0.000446f, 0.002878f, 0.003147f, -0.000791f, -0.001390f, 0.010990f, 0.006748f, 0.003984f, -0.002086f, 0.000904f, 0.001200f, 0.014195f, -0.011269f, 0.014240f, -0.001885f, 0.007761f, 0.014601f, -0.009135f, 0.011315f, -0.007068f, 0.005811f, 0.002214f, 0.017166f, 0.007591f, -0.009545f, -0.015723f, 0.003592f, -0.011787f, 0.009709f, -0.002414f, 0.012650f, -0.009414f, -0.001521f, -0.007537f, 0.004370f, 0.002814f, 0.003627f, -0.000937f, -0.001332f, -0.013721f, -0.006009f, 0.011297f, -0.008983f, -0.001819f, 0.007353f, 0.000357f, -0.007029f, 0.002308f, 0.000649f, -0.001568f, -0.006091f, 0.012352f, 0.003952f, -0.017559f, -0.007913f, -0.014172f, -0.002465f, -0.012528f, + -0.021611f, -0.004911f, 0.009460f, 0.026666f, 0.005848f, 0.002220f, 0.012580f, -0.000311f, -0.009807f, -0.008571f, 0.007036f, 0.002758f, 0.004760f, 0.007717f, -0.018826f, -0.004607f, -0.017313f, -0.003779f, 0.004894f, -0.006840f, -0.015998f, 0.001658f, 0.006974f, -0.003392f, -0.005924f, -0.002785f, 0.002826f, -0.002340f, -0.000632f, 0.003558f, -0.002157f, -0.002324f, -0.003190f, -0.002303f, -0.007297f, 0.002685f, -0.001867f, 0.003442f, -0.001195f, 0.002043f, 0.004688f, 0.000720f, -0.001201f, -0.000361f, -0.003863f, -0.002521f, -0.006148f, -0.005558f, 0.000918f, 0.000762f, 0.000059f, 0.002300f, 0.003692f, 0.002633f, 0.000063f, 0.002410f, 0.002020f, -0.001593f, 0.001489f, 0.001585f, -0.003168f, 0.030640f, 0.007293f, 0.022185f, -0.010402f, -0.001443f, -0.007401f, -0.001708f, 0.023570f, -0.020107f, 0.006747f, 0.002283f, 0.030867f, 0.016437f, 0.020483f, 0.003743f, -0.005097f, 0.009669f, -0.006741f, -0.025593f, 0.004866f, 0.001456f, 0.003000f, 0.020171f, 0.001915f, -0.011851f, -0.001048f, 0.000531f, 0.006394f, 0.006982f, -0.000609f, -0.002641f, 0.008230f, -0.009642f, -0.002661f, -0.004882f, + -0.002479f, 0.002490f, 0.000365f, 0.017769f, 0.002554f, 0.013953f, 0.016078f, 0.004453f, 0.014180f, -0.001051f, 0.004689f, 0.008625f, -0.009317f, -0.013903f, 0.001737f, 0.014005f, -0.022379f, 0.006661f, -0.017175f, -0.016039f, -0.009848f, -0.004445f, -0.015114f, -0.014628f, -0.015497f, -0.007940f, -0.003865f, 0.010398f, 0.000242f, 0.012458f, 0.001875f, -0.010258f, 0.015697f, -0.016330f, -0.006207f, -0.006759f, -0.006721f, -0.008656f, -0.011415f, 0.016305f, 0.012671f, -0.007125f, 0.006216f, 0.005134f, 0.012874f, 0.000053f, 0.009295f, -0.004572f, 0.011687f, 0.005914f, -0.006918f, 0.000404f, -0.006252f, 0.007456f, -0.007132f, 0.000796f, 0.005746f, 0.000445f, 0.004393f, -0.001248f, 0.000696f, 0.003072f, -0.001041f, -0.003122f, 0.002892f, -0.000831f, 0.000491f, -0.006009f, -0.005006f, -0.004792f, -0.003771f, -0.000621f, -0.002113f, -0.004148f, -0.000206f, 0.000886f, -0.001971f, 0.000505f, -0.000156f, -0.016441f, -0.016735f, -0.009697f, -0.010310f, -0.005351f, -0.004299f, -0.019740f, -0.016036f, -0.013382f, -0.002152f, -0.001066f, -0.002584f, 0.013859f, 0.001300f, 0.007202f, 0.010477f, 0.012451f, + 0.001860f, 0.024249f, 0.030159f, -0.000534f, 0.008674f, 0.006916f, -0.003758f, 0.013319f, 0.007088f, -0.027092f, -0.000993f, -0.009315f, 0.001488f, 0.021110f, 0.008279f, -0.021647f, -0.005860f, 0.009761f, 0.009510f, 0.001418f, 0.027741f, -0.011442f, 0.011134f, 0.011443f, 0.012308f, 0.007341f, 0.014351f, -0.024404f, 0.008884f, -0.009472f, 0.014461f, 0.000628f, 0.006179f, -0.018301f, 0.013411f, 0.009865f, -0.002464f, 0.009555f, -0.001679f, 0.002729f, -0.000272f, -0.009505f, 0.002402f, -0.006046f, 0.005911f, -0.007479f, 0.009321f, 0.003047f, 0.023482f, 0.017715f, -0.005653f, 0.006385f, -0.019539f, 0.017015f, -0.005417f, 0.010470f, 0.018183f, 0.018054f, 0.000738f, 0.018439f, 0.012567f, 0.008768f, 0.009199f, 0.016951f, 0.001557f, 0.003731f, -0.013887f, -0.002299f, -0.004073f, 0.003254f, -0.010054f, 0.001580f, -0.007362f, 0.002348f, -0.007335f, 0.002301f, -0.002779f, -0.004416f, -0.004384f, 0.003074f, 0.000178f, -0.002179f, -0.001837f, -0.005756f, -0.002031f, 0.001131f, -0.001843f, -0.004123f, 0.000487f, 0.004474f, -0.010192f, -0.006119f, -0.005690f, 0.004156f, -0.006308f, 0.003890f, + -0.000102f, 0.002278f, -0.005252f, -0.007422f, -0.001843f, 0.001490f, 0.015914f, -0.014180f, -0.003772f, 0.012747f, -0.006825f, 0.021808f, -0.007003f, -0.015356f, 0.028885f, 0.039363f, 0.008687f, -0.015503f, 0.010806f, -0.008165f, 0.016098f, 0.009423f, -0.003585f, -0.016447f, -0.010837f, -0.027984f, 0.007268f, 0.011957f, -0.024771f, -0.002926f, 0.014292f, 0.003760f, -0.001268f, 0.000600f, -0.003099f, -0.013366f, 0.003179f, 0.016601f, 0.000604f, 0.003597f, 0.005929f, 0.023509f, -0.015559f, -0.000413f, 0.016996f, -0.015599f, 0.022853f, 0.001216f, 0.032149f, -0.026793f, -0.024249f, 0.013325f, 0.001113f, -0.003189f, 0.006847f, -0.002188f, 0.008891f, 0.005541f, 0.017840f, 0.017110f, -0.014197f, 0.002617f, -0.009308f, -0.005531f, 0.010642f, -0.001297f, -0.005605f, -0.002349f, 0.000424f, 0.016074f, -0.030714f, 0.023382f, -0.007401f, -0.010385f, 0.017230f, -0.013937f, 0.013795f, -0.018766f, -0.010656f, -0.003445f, -0.014061f, -0.004784f, -0.009956f, -0.015595f, -0.010628f, 0.003466f, -0.003659f, -0.003710f, -0.000323f, -0.007235f, -0.002425f, -0.001032f, 0.009599f, -0.000447f, 0.001308f, 0.003958f, + -0.004188f, -0.001542f, -0.003563f, 0.002408f, 0.004640f, 0.001355f, -0.002059f, 0.011453f, -0.000043f, 0.008513f, -0.009292f, -0.005875f, -0.005564f, -0.003865f, 0.004236f, 0.002176f, 0.000197f, 0.006691f, -0.005052f, 0.005124f, 0.001885f, 0.004772f, 0.002547f, 0.000729f, -0.005946f, -0.019502f, -0.014851f, -0.006552f, -0.013926f, -0.021259f, -0.004443f, 0.007705f, 0.026104f, 0.004216f, -0.015719f, -0.029185f, -0.006063f, 0.009024f, -0.005077f, 0.031292f, 0.009877f, -0.011100f, -0.022123f, -0.027703f, -0.052406f, -0.004305f, -0.005760f, 0.020063f, 0.014887f, -0.010764f, 0.001390f, -0.008334f, -0.004511f, 0.018828f, -0.000470f, 0.000979f, -0.002270f, 0.021364f, 0.003650f, -0.006440f, -0.001035f, -0.000814f, 0.005816f, -0.019485f, -0.006102f, -0.007677f, 0.030823f, 0.007159f, -0.032358f, 0.008332f, -0.016779f, -0.009482f, 0.004800f, -0.030163f, 0.009410f, 0.021708f, 0.019302f, 0.015007f, 0.003702f, 0.006050f, -0.000942f, 0.003180f, -0.018975f, 0.006885f, -0.029726f, -0.005733f, 0.017079f, 0.006209f, 0.017497f, 0.017203f, 0.014276f, -0.009767f, -0.021928f, -0.019234f, -0.014820f, 0.004806f, + 0.005986f, 0.010147f, 0.010150f, 0.002171f, 0.006799f, 0.021461f, 0.030129f, -0.007242f, 0.010769f, -0.007514f, -0.008043f, 0.009171f, -0.013152f, -0.004700f, 0.000596f, -0.008403f, 0.007885f, -0.007307f, -0.006276f, -0.003527f, 0.001940f, -0.001949f, 0.004325f, 0.000034f, 0.006233f, -0.001503f, -0.003681f, -0.001775f, -0.003601f, -0.009554f, 0.002611f, 0.005062f, -0.000391f, 0.003310f, -0.000849f, 0.004545f, 0.008833f, 0.008348f, 0.006610f, -0.006780f, -0.003336f, 0.006408f, -0.001890f, -0.002639f, 0.000688f, -0.001141f, 0.006576f, -0.001524f, -0.000290f, -0.001059f, 0.015350f, 0.027139f, 0.031456f, 0.022724f, 0.038883f, -0.018207f, 0.027637f, -0.023690f, -0.018551f, 0.020443f, 0.026170f, 0.030872f, -0.031875f, -0.000211f, 0.008044f, -0.023648f, 0.011196f, -0.010415f, -0.016727f, 0.019049f, -0.024819f, 0.026904f, -0.025513f, 0.025200f, -0.018311f, -0.006788f, -0.001671f, -0.033420f, -0.004628f, 0.036761f, -0.009407f, -0.026348f, 0.005633f, 0.017042f, -0.019175f, 0.009453f, 0.039801f, 0.021348f, 0.008061f, 0.017552f, -0.021047f, 0.014001f, -0.012642f, -0.036314f, -0.010995f, -0.009546f, + 0.002693f, 0.016374f, 0.020313f, -0.009066f, -0.015895f, 0.014401f, 0.000101f, 0.011003f, 0.006917f, -0.005987f, 0.001979f, -0.014504f, 0.002190f, 0.004499f, -0.000200f, 0.004642f, 0.032730f, -0.004150f, 0.003228f, 0.009267f, 0.001940f, 0.003928f, -0.016667f, -0.018324f, 0.012643f, -0.021796f, -0.029491f, -0.031021f, 0.024022f, 0.015461f, 0.004608f, -0.001781f, -0.003603f, 0.011373f, -0.001848f, -0.008784f, 0.010987f, 0.030167f, 0.020434f, -0.008121f, -0.005184f, 0.009261f, 0.005382f, -0.002244f, -0.004841f, 0.003303f, 0.004225f, -0.001395f, 0.001192f, 0.016312f, 0.003883f, 0.002222f, 0.006388f, -0.005479f, 0.001144f, 0.005098f, 0.010900f, -0.001192f, 0.000725f, -0.010854f, 0.003409f, -0.005720f, -0.004140f, 0.011048f, 0.008918f, 0.000434f, 0.006972f, -0.006231f, -0.003009f, 0.003206f, -0.000013f, -0.003386f, -0.006255f, -0.006834f, 0.004182f, 0.001750f, -0.002986f, 0.003660f, -0.025214f, -0.039964f, 0.014208f, 0.051966f, 0.025403f, -0.009711f, -0.040190f, -0.013929f, 0.002541f, 0.005634f, -0.007825f, 0.019748f, 0.013287f, -0.014566f, -0.007567f, -0.001930f, -0.026594f, 0.036955f, + -0.016835f, 0.013183f, -0.003096f, -0.008677f, -0.032394f, 0.010640f, 0.006717f, -0.004008f, 0.003907f, 0.014537f, -0.005296f, 0.036145f, -0.008092f, -0.005476f, 0.030117f, -0.003327f, -0.021625f, -0.019299f, -0.037355f, 0.005175f, -0.008293f, -0.011564f, -0.008143f, -0.027361f, -0.011475f, -0.025619f, 0.002744f, -0.022542f, 0.020419f, -0.012718f, -0.000414f, 0.006401f, 0.002543f, 0.011845f, -0.010839f, -0.027676f, 0.012084f, -0.003136f, 0.006914f, -0.006141f, -0.002782f, 0.000885f, 0.026732f, 0.040036f, 0.010883f, -0.012480f, 0.013842f, 0.014582f, 0.015910f, -0.006457f, -0.013328f, 0.020458f, 0.009690f, 0.027317f, 0.006381f, 0.007357f, 0.000822f, 0.008275f, 0.024580f, 0.033577f, 0.016537f, 0.005746f, 0.012646f, 0.005389f, -0.006932f, -0.022847f, -0.014478f, 0.002706f, 0.011193f, 0.001851f, -0.000496f, -0.008493f, -0.003101f, 0.004810f, 0.003287f, -0.018032f, -0.003344f, 0.004199f, -0.000658f, -0.008926f, -0.007444f, -0.009989f, 0.002027f, -0.001672f, 0.007003f, 0.012958f, 0.007682f, 0.000533f, -0.004150f, 0.007973f, 0.009589f, 0.000745f, 0.003297f, -0.012546f, -0.000326f, -0.004173f, + -0.012834f, 0.002850f, 0.002512f, -0.011477f, -0.001042f, -0.002597f, 0.004529f, -0.004385f, 0.011069f, 0.000179f, 0.015146f, 0.077258f, 0.002239f, -0.021044f, 0.064870f, 0.032401f, 0.028890f, 0.055853f, 0.056222f, 0.015712f, 0.018155f, 0.013762f, 0.061074f, 0.002832f, -0.021001f, 0.025913f, 0.006012f, -0.024002f, -0.026259f, 0.023039f, 0.023048f, 0.043300f, -0.003848f, 0.002851f, 0.001016f, 0.005655f, -0.025479f, 0.028839f, 0.020721f, 0.008630f, -0.019691f, 0.030538f, -0.008920f, -0.001967f, -0.040554f, -0.009287f, -0.002663f, -0.002944f, -0.021181f, 0.013815f, -0.019670f, -0.011852f, -0.011339f, 0.005500f, -0.013490f, -0.019230f, -0.025724f, 0.027295f, -0.019473f, 0.029050f, 0.013446f, 0.023793f, 0.007901f, -0.024932f, -0.000801f, -0.039867f, -0.017867f, -0.021901f, 0.008688f, -0.027805f, -0.014547f, -0.005363f, 0.000592f, 0.028076f, 0.003332f, -0.004842f, -0.045192f, 0.017663f, 0.015767f, -0.001470f, -0.000103f, -0.023450f, 0.017978f, 0.001521f, -0.019492f, 0.053524f, 0.012411f, -0.007435f, -0.000376f, -0.022149f, 0.003875f, 0.026602f, -0.006881f, -0.002663f, -0.029716f, -0.018188f, + 0.011146f, -0.004637f, -0.013981f, 0.017058f, 0.010965f, -0.018300f, 0.016155f, -0.006634f, 0.005297f, -0.006433f, 0.015821f, 0.002897f, -0.002188f, -0.000030f, 0.004030f, -0.021974f, 0.000495f, -0.008417f, 0.006639f, 0.006897f, 0.010781f, -0.009311f, 0.007938f, 0.005292f, 0.004878f, 0.007411f, 0.009574f, -0.001166f, 0.007441f, -0.010847f, 0.018453f, -0.008730f, 0.015657f, -0.011151f, 0.007085f, -0.023616f, -0.043310f, 0.013301f, 0.013044f, -0.013401f, 0.028191f, -0.031172f, 0.033860f, -0.024427f, -0.014227f, 0.010899f, 0.007836f, 0.087389f, 0.034146f, 0.013091f, -0.054535f, -0.001451f, -0.012944f, -0.028905f, -0.008399f, -0.010565f, -0.009568f, -0.003236f, -0.045351f, -0.000873f, -0.017159f, 0.000562f, 0.022078f, -0.024057f, 0.028650f, -0.009393f, -0.031709f, -0.028290f, 0.022697f, 0.017411f, -0.007092f, -0.015620f, 0.028950f, -0.015622f, -0.014754f, 0.022754f, -0.000650f, 0.007001f, -0.023444f, -0.000792f, -0.013784f, 0.029185f, -0.004400f, 0.041866f, -0.015660f, 0.006290f, 0.012617f, -0.001199f, 0.001602f, 0.012770f, -0.026995f, -0.004332f, 0.034406f, 0.002787f, 0.009445f, -0.000324f, + -0.027898f, 0.011921f, -0.019474f, 0.009913f, 0.030080f, 0.039016f, 0.042558f, 0.044797f, -0.009664f, 0.015717f, -0.000357f, 0.024035f, 0.054304f, -0.059647f, 0.046370f, -0.027581f, 0.012466f, 0.037265f, -0.023515f, 0.002389f, 0.011711f, 0.010153f, -0.002777f, 0.025932f, -0.010046f, -0.008219f, 0.010981f, -0.006238f, 0.025006f, -0.003724f, 0.009487f, -0.020164f, -0.003261f, -0.000621f, -0.016214f, -0.006847f, -0.020455f, 0.000193f, 0.005939f, 0.001967f, 0.022752f, -0.007528f, 0.001558f, 0.002426f, 0.009689f, 0.002348f, 0.009775f, -0.013503f, 0.010170f, 0.003083f, -0.000537f, 0.007190f, 0.009977f, -0.011365f, 0.010366f, -0.021823f, -0.019207f, 0.013395f, -0.006406f, -0.015498f, -0.002170f, 0.006279f, -0.009875f, 0.017490f, -0.020780f, -0.046239f, -0.008818f, 0.009156f, 0.000779f, 0.010642f, -0.034093f, -0.004807f, -0.006880f, -0.048875f, -0.037584f, 0.019210f, 0.020348f, 0.009195f, 0.014063f, -0.025101f, -0.012122f, -0.017839f, 0.053372f, 0.012634f, 0.001575f, 0.039747f, 0.023058f, 0.019911f, 0.018152f, 0.015538f, -0.028032f, 0.020075f, 0.008283f, -0.008790f, 0.015965f, -0.014328f, + -0.013939f, 0.027680f, -0.012030f, 0.017391f, 0.036792f, 0.001146f, 0.007089f, -0.000788f, 0.002430f, -0.008132f, -0.021511f, -0.027361f, -0.044215f, 0.018002f, -0.037450f, 0.013942f, 0.014618f, 0.018731f, 0.000154f, 0.001016f, -0.005227f, -0.028974f, -0.013671f, 0.014521f, -0.009985f, 0.014988f, 0.036776f, -0.011433f, 0.028134f, 0.012755f, 0.003132f, -0.001736f, -0.010023f, -0.026846f, -0.001122f, -0.036233f, -0.012537f, 0.038541f, -0.020667f, 0.006000f, -0.063806f, 0.030144f, -0.011821f, 0.009616f, -0.049238f, -0.043940f, 0.004134f, 0.011602f, 0.022519f, -0.050973f, -0.005390f, 0.000490f, 0.034630f, 0.028225f, 0.032049f, -0.010378f, 0.000668f, 0.004711f, 0.016753f, 0.003833f, 0.009208f, 0.026335f, 0.015033f, -0.010269f, 0.009600f, 0.002416f, 0.001881f, -0.000748f, -0.005646f, -0.022052f, 0.007670f, -0.010773f, 0.003256f, 0.008489f, -0.000294f, 0.001764f, -0.000311f, 0.008504f, -0.005415f, 0.035540f, 0.009690f, -0.001603f, 0.019914f, 0.011874f, 0.001644f, 0.005779f, -0.000624f, -0.016157f, 0.020934f, -0.007077f, 0.002804f, 0.024830f, 0.013903f, -0.008041f, 0.000085f, -0.010211f, + 0.016486f, 0.011198f, 0.013777f, 0.012638f, 0.037861f, -0.089946f, -0.022378f, -0.053346f, 0.017872f, -0.047888f, -0.016319f, -0.054298f, 0.014385f, -0.028221f, -0.021992f, -0.004459f, -0.046473f, -0.016634f, -0.049777f, -0.024847f, -0.057603f, 0.012582f, -0.053306f, -0.020806f, -0.027781f, -0.015268f, -0.014768f, -0.012208f, -0.050885f, -0.028796f, -0.038751f, -0.019596f, -0.011311f, 0.022102f, -0.003337f, 0.016551f, -0.031723f, -0.004932f, 0.001662f, -0.036160f, 0.006877f, -0.002341f, 0.002933f, 0.009734f, -0.036959f, -0.001871f, 0.013435f, -0.004342f, 0.015166f, 0.030780f, 0.055247f, -0.045794f, 0.002697f, 0.061774f, 0.000170f, 0.030432f, -0.021702f, 0.038364f, 0.006852f, -0.008892f, -0.051302f, -0.029922f, 0.042388f, 0.026458f, 0.041394f, 0.001739f, -0.029058f, 0.010796f, 0.014895f, 0.029903f, -0.055756f, 0.000622f, 0.010450f, -0.030500f, -0.010329f, -0.013057f, -0.018718f, -0.044380f, 0.068901f, -0.012449f, -0.022240f, -0.013931f, 0.014230f, 0.016790f, -0.039054f, -0.036012f, -0.001501f, 0.011772f, 0.001751f, 0.000348f, -0.007657f, -0.012939f, -0.000216f, 0.034987f, 0.021494f, 0.000003f, + -0.028663f, -0.019581f, 0.003184f, -0.010814f, 0.007558f, 0.009405f, 0.004658f, -0.002789f, -0.014780f, 0.006267f, 0.007311f, -0.003858f, 0.011080f, -0.006220f, -0.025415f, -0.011852f, -0.001440f, 0.007605f, -0.001870f, -0.007957f, -0.037169f, -0.014654f, -0.008485f, 0.003026f, 0.004709f, -0.015865f, -0.028762f, 0.011493f, 0.017363f, -0.015083f, 0.000759f, -0.013240f, 0.014650f, -0.004624f, -0.025652f, 0.038439f, -0.064829f, -0.000598f, -0.012929f, 0.028066f, -0.014353f, -0.039817f, 0.034745f, -0.069956f, -0.060496f, -0.049771f, 0.028472f, -0.014758f, 0.001494f, -0.027115f, -0.025844f, -0.029997f, 0.016781f, 0.014696f, 0.048715f, 0.023047f, 0.009768f, 0.045526f, -0.012202f, 0.016547f, -0.016508f, 0.014275f, 0.008111f, 0.027145f, 0.043675f, 0.022929f, -0.009226f, -0.026729f, -0.016097f, -0.005419f, 0.024473f, -0.008064f, 0.006739f, 0.000976f, -0.011427f, 0.023303f, -0.001600f, 0.019136f, 0.014046f, -0.037249f, 0.030623f, 0.056538f, 0.008669f, 0.047297f, 0.045616f, 0.020780f, 0.015010f, 0.000135f, 0.024034f, -0.015032f, -0.055096f, -0.017872f, 0.040667f, 0.000418f, -0.020356f, 0.021037f, + 0.057810f, -0.013222f, 0.004284f, -0.041934f, 0.041164f, 0.037053f, -0.002851f, 0.011927f, -0.019091f, 0.095114f, -0.059849f, -0.051821f, -0.049074f, 0.004147f, 0.001571f, -0.014397f, 0.042234f, -0.059552f, -0.001189f, -0.038067f, 0.014379f, 0.016867f, -0.002854f, 0.041320f, 0.009350f, -0.003503f, -0.022553f, -0.000279f, 0.010255f, 0.030104f, -0.020819f, -0.026572f, 0.010900f, -0.015838f, -0.004348f, 0.003675f, 0.007040f, 0.002452f, -0.000012f, -0.002000f, -0.025170f, 0.002364f, 0.005810f, 0.017152f, -0.014974f, -0.008403f, 0.009496f, 0.004542f, 0.006548f, 0.000573f, -0.016520f, -0.001884f, -0.018728f, -0.014161f, 0.018464f, 0.009414f, 0.010314f, 0.007244f, -0.000827f, 0.003559f, -0.005248f, 0.011232f, 0.001358f, -0.005154f, -0.001291f, -0.016375f, -0.006317f, -0.010914f, 0.006380f, 0.103992f, -0.022923f, 0.057922f, 0.099927f, -0.034083f, 0.047911f, 0.021133f, -0.062933f, 0.057448f, 0.008740f, -0.027580f, 0.042401f, 0.017995f, 0.039840f, -0.000409f, -0.033592f, 0.031718f, 0.010952f, 0.000095f, 0.010031f, -0.009694f, -0.035531f, -0.021272f, -0.017001f, -0.030842f, -0.022815f, -0.005898f, + 0.023674f, -0.021253f, -0.012697f, -0.030377f, 0.006446f, 0.002530f, 0.004882f, 0.041536f, -0.024872f, 0.009964f, -0.023071f, -0.013117f, 0.023913f, -0.019133f, -0.042655f, -0.054914f, 0.063205f, 0.028005f, -0.015632f, 0.043492f, -0.040013f, -0.035147f, -0.021283f, -0.003574f, 0.006449f, 0.000238f, -0.037235f, -0.027482f, -0.029102f, -0.064176f, -0.039996f, -0.034603f, 0.012448f, 0.021452f, -0.001697f, 0.037169f, 0.007150f, -0.038420f, -0.033012f, 0.050169f, -0.042988f, 0.005984f, 0.044101f, -0.005872f, -0.075683f, 0.052841f, -0.027844f, 0.008306f, 0.003522f, 0.043687f, -0.010416f, -0.017023f, -0.002102f, -0.025330f, 0.013284f, -0.043539f, 0.014873f, -0.055926f, -0.035527f, 0.021314f, -0.023469f, -0.007068f, -0.002893f, -0.033321f, 0.011013f, -0.019578f, 0.016023f, -0.005323f, -0.000413f, 0.001410f, 0.020818f, -0.015171f, -0.011638f, 0.003338f, -0.020684f, -0.009529f, 0.003411f, -0.013953f, -0.014405f, -0.010372f, -0.005980f, -0.016232f, -0.008643f, 0.022177f, -0.018022f, 0.008369f, 0.013851f, -0.003608f, 0.014803f, -0.019673f, 0.002442f, -0.013928f, 0.028595f, 0.004973f, 0.010499f, -0.020128f, + 0.025174f, 0.016742f, 0.019362f, 0.007695f, 0.002797f, 0.005746f, 0.014205f, -0.013926f, 0.001877f, -0.050279f, 0.030130f, -0.014071f, 0.050998f, 0.035390f, -0.081610f, -0.010018f, 0.008615f, -0.049414f, -0.008129f, -0.007889f, 0.060198f, 0.043710f, 0.040203f, 0.050371f, -0.001911f, -0.034911f, -0.027250f, -0.027747f, 0.001281f, -0.077619f, 0.009296f, 0.066868f, -0.060814f, -0.109477f, 0.011116f, -0.040841f, 0.080862f, -0.000342f, 0.002593f, 0.054448f, -0.024928f, 0.011336f, -0.002585f, -0.014555f, 0.047042f, -0.013416f, 0.023757f, 0.079387f, -0.058381f, -0.033098f, -0.053222f, 0.026615f, 0.004312f, 0.053192f, -0.030516f, 0.021048f, 0.002718f, 0.048451f, 0.028337f, -0.023477f, -0.015844f, 0.018413f, -0.008867f, -0.002019f, -0.034259f, -0.033527f, 0.017520f, -0.007391f, -0.010074f, -0.019021f, 0.043579f, -0.016482f, -0.017737f, 0.073467f, 0.078257f, 0.050903f, -0.066828f, -0.005822f, -0.021132f, 0.025985f, 0.097480f, -0.012273f, -0.074625f, -0.004800f, -0.030861f, 0.043919f, 0.019417f, -0.049821f, 0.026071f, 0.019433f, 0.025423f, -0.048081f, -0.017559f, 0.003621f, 0.042416f, 0.002672f, + -0.007085f, 0.007029f, -0.014843f, 0.003391f, 0.042377f, 0.020719f, -0.017985f, -0.021306f, -0.005092f, 0.013439f, 0.016795f, 0.022515f, -0.021532f, -0.008088f, -0.039260f, -0.008195f, 0.024432f, -0.024514f, -0.004114f, -0.015159f, -0.014291f, -0.023046f, -0.005091f, 0.015616f, -0.003782f, -0.001727f, 0.003646f, 0.009913f, -0.010630f, -0.029432f, -0.030729f, 0.018281f, 0.013846f, 0.025569f, -0.013113f, 0.018725f, 0.054863f, 0.002765f, -0.033302f, -0.005452f, 0.002695f, -0.003119f, -0.020950f, -0.047945f, 0.007242f, -0.039356f, 0.036248f, 0.020783f, -0.038398f, 0.065490f, 0.099383f, 0.002765f, -0.004574f, -0.034047f, -0.034336f, 0.005731f, 0.005786f, -0.016814f, 0.089901f, -0.008165f, 0.067068f, 0.053640f, -0.067639f, -0.002202f, -0.022641f, -0.072487f, 0.018319f, 0.016708f, 0.039610f, 0.067687f, -0.002000f, -0.019441f, 0.022343f, 0.024486f, 0.053399f, 0.022254f, 0.004943f, 0.043821f, 0.046268f, 0.015809f, -0.010587f, 0.040175f, 0.017993f, 0.048297f, 0.010403f, 0.013855f, 0.030316f, 0.051156f, -0.008520f, -0.040742f, -0.046942f, -0.015438f, -0.016306f, 0.080521f, 0.044212f, 0.124349f, + -0.005783f, -0.062851f, 0.055250f, -0.019070f, -0.021480f, -0.018925f, -0.042331f, 0.006137f, 0.023792f, -0.001034f, -0.023714f, 0.088312f, -0.017651f, 0.104233f, -0.028576f, 0.056037f, 0.004913f, -0.017740f, -0.056947f, -0.081428f, 0.076240f, -0.007495f, -0.013026f, -0.023482f, 0.070851f, -0.000149f, -0.074358f, 0.136204f, 0.042854f, 0.014725f, -0.015656f, -0.057351f, 0.028659f, 0.001410f, 0.028846f, -0.026735f, 0.020572f, 0.010226f, -0.012876f, -0.019798f, 0.003516f, -0.023905f, -0.011165f, -0.027139f, 0.003139f, -0.004904f, -0.000377f, 0.008779f, 0.022247f, -0.022834f, 0.008691f, -0.011248f, -0.000706f, 0.029735f, 0.019915f, -0.010903f, -0.037497f, -0.001404f, -0.002271f, 0.004771f, 0.034151f, -0.022407f, -0.013178f, 0.008366f, 0.021395f, -0.031380f, 0.001997f, 0.020295f, -0.000567f, -0.002644f, -0.032633f, 0.016616f, -0.001147f, 0.015103f, -0.034113f, 0.003587f, 0.014276f, 0.011119f, 0.016671f, -0.032885f, -0.034445f, 0.022337f, 0.092375f, -0.054895f, -0.035330f, 0.007505f, 0.016641f, -0.010447f, 0.065353f, 0.050936f, 0.051397f, 0.017390f, 0.025347f, 0.043289f, 0.026668f, -0.015649f, + -0.025844f, -0.058082f, -0.009470f, 0.031958f, 0.010858f, 0.006930f, -0.021717f, -0.054929f, -0.016119f, -0.007673f, 0.055971f, 0.000815f, -0.006773f, 0.042550f, -0.006830f, 0.011805f, 0.008992f, -0.094612f, 0.024200f, 0.025622f, -0.016616f, -0.040417f, 0.007619f, -0.053331f, -0.027252f, -0.081712f, 0.024648f, -0.068213f, -0.135412f, 0.015771f, -0.001930f, 0.095364f, -0.003353f, 0.032434f, 0.078613f, -0.012835f, -0.020477f, 0.035024f, -0.000772f, -0.068604f, -0.024070f, 0.009084f, 0.011360f, 0.050719f, 0.021013f, 0.045172f, 0.039009f, -0.028046f, -0.021105f, 0.019281f, 0.057441f, -0.023893f, -0.012136f, -0.052751f, -0.036537f, 0.014077f, -0.071365f, 0.020730f, -0.080147f, 0.015273f, -0.021190f, 0.056897f, -0.024899f, 0.040346f, -0.085891f, -0.017430f, 0.011646f, -0.051015f, 0.012826f, 0.009104f, 0.008745f, -0.038467f, 0.020149f, -0.037666f, 0.010680f, -0.002832f, -0.016150f, -0.006841f, -0.003866f, 0.012118f, -0.013235f, -0.005961f, -0.010633f, 0.024608f, -0.016068f, 0.014404f, -0.036327f, 0.019144f, -0.002191f, -0.002855f, 0.005105f, 0.035165f, 0.012115f, 0.015063f, -0.042099f, 0.005532f, + -0.017320f, -0.051820f, 0.020741f, -0.016562f, -0.013302f, -0.019110f, 0.019231f, -0.009288f, 0.009219f, 0.010938f, -0.005124f, 0.002336f, -0.012834f, 0.003706f, 0.010504f, -0.002434f, -0.001691f, -0.019765f, 0.072589f, 0.077367f, 0.180809f, 0.021312f, -0.101191f, -0.075978f, -0.055925f, -0.064555f, 0.126566f, 0.168923f, 0.057282f, -0.016113f, -0.053110f, 0.001883f, -0.064277f, 0.070760f, 0.066908f, 0.019856f, 0.009700f, -0.041901f, -0.006057f, 0.077865f, 0.018166f, 0.031289f, 0.026370f, 0.081706f, 0.068750f, -0.026490f, -0.060743f, -0.080310f, -0.054126f, -0.008045f, 0.022393f, 0.073456f, 0.044061f, -0.015323f, 0.039815f, -0.055741f, -0.018973f, -0.125355f, -0.019797f, 0.123398f, 0.095369f, -0.019195f, 0.250029f, 0.078439f, 0.007336f, -0.137076f, -0.023360f, -0.011754f, -0.032158f, 0.035021f, 0.019439f, 0.029675f, 0.052474f, -0.111853f, -0.120498f, -0.060537f, -0.081292f, -0.011596f, 0.027529f, 0.101215f, -0.060537f, 0.037035f, 0.157745f, 0.078872f, 0.027459f, 0.044235f, 0.032185f, -0.095278f, -0.157715f, 0.080675f, -0.039025f, 0.034743f, 0.084442f, 0.093448f, 0.008232f, -0.056498f, + -0.074480f, -0.060697f, 0.065264f, 0.037760f, 0.011352f, 0.065181f, -0.064993f, -0.011279f, -0.010441f, -0.028748f, -0.033662f, -0.002863f, -0.001010f, 0.021148f, 0.006515f, -0.009321f, 0.000127f, -0.000819f, 0.001022f, 0.005580f, 0.012011f, 0.018825f, -0.018904f, -0.025721f, -0.088335f, -0.048304f, -0.043713f, 0.052092f, 0.030742f, 0.018614f, -0.072363f, -0.070772f, -0.114118f, -0.031122f, 0.044684f, 0.057270f, 0.074421f, 0.029223f, 0.021655f, 0.008672f, 0.007055f, -0.002168f, 0.016563f, -0.004037f, 0.053222f, 0.037778f, 0.007387f, 0.000375f, 0.000161f, -0.009232f, -0.000349f, -0.038457f, -0.165541f, -0.039445f, 0.092284f, 0.176712f, 0.155687f, 0.373256f, 0.195359f, 0.132561f, 0.116635f, 0.053087f, -0.020873f, -0.188551f, -0.236703f, -0.353119f, -0.270416f, -0.277399f, -0.105532f, 0.001404f, 0.106242f, 0.197655f, 0.163054f, 0.168517f, 0.116145f, 0.158562f, 0.124120f, 0.175561f, 0.083609f, 0.065492f, 0.031323f, -0.045109f, -0.069424f, -0.106330f, -0.064283f, -0.231010f, -0.097572f, -0.218643f, -0.157754f, -0.250251f, -0.148763f, -0.232937f, -0.082718f, -0.115443f, -0.037579f, 0.017901f, + 0.118303f, 0.310213f, 0.295392f, 0.413894f, 0.280146f, 0.191134f, 0.248147f, 0.338938f, 0.298272f, 0.250552f, 0.174820f, 0.021156f, -0.169400f, -0.168138f, -0.208471f, -0.396763f, -0.438060f, -0.477119f, -0.476472f, -0.523169f, -0.452493f, -0.381139f, -0.336163f, -0.218847f, 0.025224f, 0.249170f, 0.433328f, 0.572828f, 0.713996f, 0.794505f, 0.553876f, 0.528282f, 0.342832f, 0.207782f, 0.196309f, -0.011638f, -0.064784f, -0.304204f, -0.583212f, -0.628058f, -0.509907f, -0.394053f, -0.232184f, -0.187789f, -0.191308f, -0.105423f, -0.164287f, -0.066369f, -0.018234f, 0.126350f, 0.239674f, 0.197000f, 0.256200f, 0.275462f, 0.293726f, 0.259547f, 0.346274f, 0.257473f, 0.210864f, 0.109091f, 0.022414f, -0.058306f, -0.268206f, -0.237405f, -0.318417f, -0.422038f, -0.382509f, -0.438311f, -0.450635f, -0.131222f, 0.014758f, 0.229208f, 0.280336f, 0.298759f, 0.346533f, 0.362148f, 0.307051f, 0.267287f, 0.204812f, 0.155522f, 0.056172f, -0.039806f, -0.119426f, -0.215171f, -0.316481f, -0.296218f, -0.264675f, -0.197723f, -0.093227f, -0.040770f, -0.019498f, -0.011357f, 0.029165f, 0.061253f, 0.073917f, 0.079862f, + 0.065641f, 0.052875f, 0.056920f, 0.046689f, 0.034522f, 0.063773f, 0.071031f, 0.054793f, 0.026045f, 0.013525f, 0.020838f, 0.027059f, 0.006411f, -0.001161f, -0.002481f, -0.007501f, -0.011974f, -0.004983f, -0.003283f}, + {0.024074f, 0.001085f, 0.004053f, 0.003381f, -0.009811f, -0.005067f, 0.013338f, 0.023226f, 0.003744f, 0.012381f, -0.005017f, 0.002354f, -0.000638f, 0.010487f, -0.008297f, -0.018913f, 0.007657f, 0.008875f, -0.011034f, 0.012811f, 0.006303f, 0.011688f, 0.003696f, 0.002791f, -0.005097f, -0.001619f, 0.000611f, 0.007795f, 0.000704f, -0.011704f, 0.000517f, -0.000936f, 0.002536f, -0.001620f, 0.002089f, 0.002823f, 0.006984f, 0.005079f, 0.001668f, 0.002196f, 0.000693f, 0.003436f, -0.003609f, -0.005835f, -0.012982f, 0.002517f, 0.002852f, 0.001059f, 0.009941f, -0.003514f, 0.007724f, 0.002143f, -0.003090f, -0.006124f, -0.003975f, 0.013934f, 0.002975f, 0.007777f, 0.001287f, 0.003069f, -0.002683f, 0.000479f, 0.000922f, 0.004006f, -0.001215f, -0.005188f, -0.002821f, -0.010802f, 0.001187f, 0.002110f, 0.009224f, -0.002970f, 0.007046f, -0.001233f, 0.004606f, 0.000078f, 0.004146f, 0.003228f, 0.001922f, -0.001738f, 0.004768f, 0.006600f, 0.004592f, 0.004306f, -0.000175f, 0.000923f, 0.001053f, -0.003661f, 0.001505f, 0.000809f, 0.003182f, 0.001640f, 0.001292f, 0.001691f, 0.002265f, -0.001315f, + 0.001354f, -0.001010f, -0.000166f, 0.008924f, 0.008618f, 0.003933f, 0.003524f, 0.004705f, 0.005697f, 0.008424f, -0.003677f, 0.008741f, 0.000095f, 0.009340f, -0.002052f, 0.016631f, 0.005650f, 0.005490f, -0.011343f, -0.001598f, -0.002576f, -0.014761f, 0.008058f, 0.006784f, -0.004664f, -0.019335f, -0.008806f, -0.002916f, 0.009411f, 0.012941f, 0.008163f, -0.005195f, 0.002758f, -0.008302f, 0.000386f, 0.000701f, -0.006754f, -0.003376f, -0.017490f, 0.001424f, -0.002203f, -0.007338f, 0.000750f, 0.000988f, -0.002382f, -0.000575f, 0.016719f, -0.004044f, 0.013615f, 0.002631f, -0.010549f, 0.000759f, 0.001008f, 0.007641f, -0.003458f, 0.002151f, 0.001798f, 0.000564f, 0.010416f, 0.003598f, 0.010693f, 0.007855f, -0.005520f, 0.009743f, 0.004734f, 0.007107f, 0.000647f, 0.002304f, -0.002527f, -0.004675f, -0.008848f, -0.010891f, 0.011288f, -0.011315f, -0.008737f, -0.009365f, 0.005202f, 0.004697f, 0.002049f, 0.002019f, 0.006599f, -0.004306f, 0.004958f, -0.003260f, -0.004554f, 0.007207f, -0.006701f, 0.001089f, 0.003353f, -0.005650f, 0.001321f, 0.000778f, -0.000913f, -0.000917f, -0.000535f, 0.003762f, + -0.001288f, 0.001378f, -0.001728f, 0.002879f, -0.000859f, 0.001594f, -0.002065f, -0.015076f, -0.014017f, 0.003019f, 0.000280f, -0.003040f, 0.008401f, -0.001107f, -0.001461f, 0.008716f, -0.009598f, 0.001878f, -0.008378f, -0.005429f, -0.003024f, 0.000090f, 0.014247f, 0.016178f, -0.007515f, 0.006338f, -0.011654f, -0.001117f, -0.004562f, 0.015718f, -0.004648f, -0.000893f, 0.001646f, -0.022139f, -0.003850f, -0.010934f, -0.003603f, -0.002715f, 0.008247f, 0.010954f, 0.004489f, 0.014806f, -0.001895f, -0.006743f, -0.006841f, 0.008551f, 0.022222f, 0.015534f, -0.008665f, -0.010133f, 0.011119f, -0.009971f, 0.001902f, 0.003548f, 0.018211f, -0.006699f, -0.008966f, 0.001987f, -0.005559f, 0.003485f, 0.004648f, 0.011577f, -0.012666f, -0.008218f, 0.007444f, 0.013986f, -0.001273f, -0.006487f, -0.008224f, -0.019765f, 0.007521f, -0.000032f, 0.005913f, 0.000928f, 0.000536f, -0.003105f, 0.003653f, -0.005044f, 0.003158f, 0.004275f, 0.004335f, -0.007014f, 0.005183f, -0.001282f, -0.004898f, 0.000478f, -0.010352f, 0.006512f, 0.001013f, 0.000829f, -0.004093f, -0.001413f, -0.003457f, -0.007235f, -0.005462f, 0.003856f, + 0.000397f, 0.001564f, -0.001312f, 0.000514f, -0.000368f, -0.002065f, -0.001592f, -0.003019f, 0.000360f, -0.001730f, -0.001251f, -0.000419f, 0.000729f, -0.000529f, 0.001042f, -0.000552f, 0.003691f, 0.001414f, -0.002059f, 0.002482f, 0.001550f, -0.002838f, -0.036658f, -0.012079f, -0.001942f, 0.006247f, 0.004198f, 0.009111f, -0.017516f, -0.005256f, -0.000806f, -0.018172f, -0.012987f, 0.004543f, 0.010966f, 0.006425f, 0.012101f, -0.001572f, 0.006940f, 0.016113f, 0.014219f, 0.013356f, 0.007690f, -0.005189f, -0.004132f, -0.008325f, -0.003701f, -0.008365f, 0.017195f, 0.007973f, -0.002677f, -0.007674f, -0.004688f, -0.007837f, -0.011387f, -0.012292f, -0.015423f, 0.009229f, 0.006608f, -0.017129f, 0.003987f, -0.000956f, 0.011748f, 0.001732f, 0.005762f, 0.007566f, -0.016183f, -0.002597f, -0.000638f, 0.002049f, 0.008424f, 0.012767f, -0.005198f, -0.001961f, -0.003825f, -0.010264f, 0.003075f, 0.001924f, -0.001121f, -0.002883f, 0.009702f, 0.000420f, -0.005440f, -0.001940f, 0.004573f, 0.006117f, -0.002568f, -0.000401f, 0.001579f, -0.008959f, 0.006504f, -0.000809f, -0.013331f, 0.001399f, -0.016260f, 0.002445f, + 0.011993f, -0.004155f, -0.000543f, -0.018337f, -0.008943f, -0.013662f, -0.008267f, -0.001264f, -0.001459f, 0.008257f, 0.001577f, 0.009716f, -0.005979f, 0.003173f, 0.005293f, 0.001632f, 0.005207f, 0.000453f, -0.003602f, 0.001881f, -0.001643f, 0.001529f, 0.000098f, 0.000535f, -0.000724f, -0.002673f, -0.000980f, 0.002047f, -0.002465f, 0.001475f, 0.004115f, 0.001946f, 0.001021f, -0.000084f, 0.000081f, -0.001079f, -0.001678f, -0.002900f, 0.001950f, 0.002459f, -0.001639f, 0.001541f, -0.001729f, 0.020116f, 0.007600f, 0.003394f, -0.005014f, 0.014819f, 0.005764f, 0.008373f, 0.023509f, 0.025434f, 0.000992f, -0.004136f, -0.009000f, -0.013833f, 0.005100f, 0.010050f, -0.005180f, -0.001035f, 0.001461f, -0.002424f, -0.008097f, 0.009537f, -0.009305f, 0.004401f, -0.026900f, -0.003888f, -0.006527f, -0.006541f, -0.013277f, -0.002775f, -0.001692f, 0.000207f, -0.006789f, -0.009740f, -0.007644f, 0.001069f, -0.005053f, -0.010332f, 0.006214f, 0.008883f, 0.000760f, -0.008475f, -0.009481f, 0.003500f, -0.007292f, 0.008378f, -0.010438f, 0.006757f, 0.002480f, -0.000124f, -0.014887f, -0.013813f, 0.003241f, -0.010007f, + 0.016288f, 0.002909f, 0.013674f, -0.007060f, 0.013764f, 0.002681f, 0.008874f, 0.003014f, 0.008410f, -0.007703f, -0.010993f, -0.000218f, 0.017688f, -0.001718f, -0.011857f, -0.006298f, 0.007729f, -0.004929f, -0.006763f, 0.001798f, -0.018925f, 0.012814f, 0.015456f, -0.000952f, -0.013125f, -0.016593f, -0.000480f, 0.013975f, 0.010117f, -0.007900f, 0.010746f, 0.001126f, -0.001534f, -0.002079f, -0.001083f, -0.000889f, 0.002976f, -0.004675f, -0.004028f, 0.000369f, 0.001624f, -0.003511f, 0.001308f, -0.001640f, -0.000471f, 0.003717f, -0.001467f, -0.000796f, 0.000622f, -0.005843f, 0.003122f, 0.000784f, 0.000558f, 0.001363f, 0.001876f, -0.000245f, 0.000520f, -0.001140f, -0.001112f, -0.000871f, -0.000653f, 0.028933f, 0.005930f, 0.015906f, -0.006236f, 0.011923f, 0.008874f, 0.018554f, -0.013707f, -0.009769f, -0.003121f, 0.001105f, 0.013196f, -0.006159f, 0.020023f, -0.001454f, 0.011390f, 0.009852f, -0.005571f, 0.004074f, 0.011541f, 0.010688f, 0.002751f, 0.002981f, 0.010516f, -0.021651f, 0.003569f, 0.016813f, 0.013132f, -0.011687f, 0.014660f, -0.017254f, 0.010524f, -0.015215f, -0.007678f, -0.003976f, + 0.015902f, -0.003221f, 0.016650f, 0.003715f, 0.003598f, 0.000840f, -0.000548f, 0.006597f, 0.009776f, 0.021682f, 0.003418f, 0.018713f, -0.009191f, 0.013681f, 0.018011f, -0.000558f, -0.003220f, -0.006486f, 0.006970f, -0.025714f, -0.002128f, 0.002543f, -0.009625f, -0.015256f, -0.000851f, -0.000963f, -0.002056f, 0.006745f, -0.015708f, 0.007957f, 0.006938f, 0.009997f, -0.024773f, 0.008540f, 0.005966f, -0.014640f, -0.001715f, 0.008086f, 0.018245f, -0.023096f, -0.002857f, 0.001785f, -0.021833f, -0.001910f, 0.003215f, -0.006048f, 0.014360f, -0.003193f, 0.001254f, 0.004058f, -0.002509f, -0.000698f, -0.000975f, 0.002587f, -0.005649f, 0.000875f, -0.002929f, 0.001769f, 0.000520f, -0.003183f, -0.000348f, 0.004009f, -0.001758f, -0.000756f, 0.000102f, -0.004576f, -0.001751f, 0.000947f, -0.001770f, -0.002057f, -0.000660f, 0.000935f, -0.002557f, -0.001026f, 0.003230f, 0.004407f, -0.005595f, -0.000086f, 0.000916f, -0.025711f, -0.031512f, -0.025231f, -0.022786f, -0.000783f, 0.016053f, -0.033261f, 0.023677f, 0.015300f, -0.037345f, 0.023508f, 0.009981f, 0.008031f, 0.003712f, 0.003599f, 0.008463f, -0.005889f, + -0.006084f, -0.012296f, -0.000352f, 0.014308f, 0.012128f, 0.007037f, -0.021257f, 0.014512f, -0.015189f, 0.000391f, -0.013355f, 0.016658f, -0.008827f, -0.006927f, 0.005282f, -0.025041f, 0.002512f, -0.008315f, -0.007465f, -0.002697f, 0.001805f, 0.024572f, -0.011589f, -0.003798f, -0.009351f, 0.018679f, -0.011367f, -0.006167f, 0.005779f, 0.005593f, 0.005288f, 0.006587f, -0.007754f, 0.008989f, 0.002312f, -0.020556f, 0.028218f, 0.011183f, 0.004567f, 0.002902f, -0.000135f, -0.013185f, 0.016153f, 0.013485f, 0.005659f, 0.018056f, 0.001934f, 0.007920f, 0.018200f, 0.009217f, 0.003919f, -0.012593f, 0.014996f, -0.006637f, 0.028644f, -0.003181f, 0.000763f, -0.007880f, -0.030046f, 0.003859f, -0.007287f, -0.003646f, 0.015419f, -0.001387f, -0.016301f, -0.009365f, 0.013252f, 0.011006f, 0.001728f, 0.012764f, 0.003384f, -0.009534f, 0.004479f, -0.001004f, -0.003164f, -0.002725f, 0.001041f, 0.007504f, -0.003601f, 0.000833f, 0.001346f, 0.004169f, 0.001619f, -0.003573f, 0.005555f, 0.000692f, 0.001476f, -0.000452f, 0.001433f, 0.000562f, -0.002181f, 0.003053f, -0.002204f, 0.002488f, 0.002046f, -0.001760f, + 0.006258f, -0.000994f, 0.001539f, -0.002277f, -0.001425f, 0.018368f, 0.012497f, -0.002117f, -0.011529f, 0.030176f, 0.047954f, -0.006329f, -0.006677f, 0.023201f, 0.005625f, 0.007654f, 0.006135f, -0.034548f, 0.003785f, -0.022340f, 0.017851f, 0.025484f, -0.006712f, -0.012313f, 0.004140f, 0.016138f, -0.009715f, 0.019494f, -0.007681f, 0.037627f, -0.011034f, 0.007274f, -0.001877f, 0.010204f, 0.026777f, -0.010134f, 0.002606f, -0.002379f, 0.007718f, -0.009956f, -0.004839f, 0.015246f, 0.032849f, 0.002732f, 0.024036f, -0.008933f, 0.003277f, -0.004548f, 0.007982f, 0.017580f, 0.026198f, 0.020440f, 0.019389f, 0.020188f, 0.012734f, -0.003716f, 0.003066f, -0.002808f, 0.000454f, 0.003988f, -0.013186f, -0.003811f, 0.021089f, -0.018607f, 0.007344f, -0.008200f, -0.004957f, -0.009688f, -0.038345f, 0.004248f, 0.020695f, 0.013105f, -0.004787f, -0.018191f, -0.044192f, -0.007144f, 0.017890f, -0.003748f, 0.007018f, -0.013791f, 0.010195f, -0.012722f, 0.011583f, 0.024984f, -0.011058f, -0.013567f, -0.025043f, 0.007496f, 0.003007f, 0.004064f, -0.019819f, 0.001389f, 0.000039f, -0.006015f, 0.001055f, 0.009278f, + 0.000326f, 0.006367f, 0.002754f, 0.004111f, 0.004982f, -0.000912f, 0.007884f, 0.001870f, 0.000716f, -0.001692f, -0.002687f, -0.002235f, 0.007501f, 0.002528f, -0.000366f, 0.005068f, 0.002575f, 0.003649f, -0.000818f, 0.004190f, 0.005033f, 0.006938f, -0.003031f, 0.000712f, -0.002959f, -0.033144f, -0.026043f, 0.003233f, 0.015618f, -0.014994f, -0.009548f, 0.001757f, -0.007808f, -0.049534f, -0.042419f, 0.018402f, 0.017282f, 0.002994f, 0.002695f, -0.018233f, 0.028504f, 0.034267f, 0.021404f, -0.017899f, 0.016754f, 0.022450f, -0.003337f, -0.028808f, -0.012747f, 0.039475f, -0.011583f, 0.003834f, 0.002598f, 0.022119f, -0.017668f, -0.031955f, 0.007096f, 0.014487f, -0.007635f, 0.009224f, 0.020808f, -0.010137f, -0.007727f, -0.001068f, -0.044251f, -0.013003f, 0.015485f, -0.008574f, -0.029502f, 0.005248f, -0.000591f, -0.009473f, 0.006102f, -0.002934f, -0.027959f, -0.023997f, -0.041947f, -0.033627f, 0.006738f, 0.014642f, 0.001582f, -0.010155f, -0.013862f, 0.000221f, -0.009413f, 0.008867f, -0.020042f, 0.000565f, -0.006963f, -0.005970f, -0.006648f, -0.001953f, 0.008125f, -0.009328f, -0.040220f, 0.005950f, + -0.005604f, 0.009866f, 0.011305f, 0.000642f, 0.007924f, 0.009252f, 0.003203f, -0.002430f, 0.005155f, -0.005866f, 0.002503f, -0.012724f, -0.006443f, -0.005772f, -0.006693f, 0.002754f, 0.011381f, -0.005946f, 0.002003f, -0.014445f, 0.001901f, -0.001549f, -0.010364f, 0.004523f, -0.003124f, 0.002569f, 0.004611f, 0.002383f, 0.002204f, 0.008919f, 0.002239f, 0.001063f, 0.003282f, -0.000089f, 0.001511f, 0.001138f, -0.002305f, -0.006946f, -0.001080f, -0.007030f, 0.003550f, -0.005375f, 0.008041f, -0.000029f, 0.011402f, 0.005010f, -0.006402f, -0.004532f, -0.003354f, -0.000521f, 0.016120f, 0.051744f, 0.045991f, 0.035924f, -0.003826f, 0.035121f, 0.011404f, 0.049018f, 0.020777f, -0.001012f, 0.059824f, -0.012456f, -0.003121f, -0.038095f, -0.010037f, -0.000784f, -0.026852f, 0.016069f, 0.024015f, -0.007816f, -0.000329f, -0.021638f, -0.037081f, -0.021900f, -0.028271f, -0.008269f, -0.017078f, -0.005398f, -0.002686f, 0.016970f, 0.004313f, -0.003561f, -0.015283f, -0.005307f, -0.010203f, 0.005395f, 0.000399f, -0.015180f, 0.008001f, 0.010032f, 0.003975f, -0.011746f, -0.015382f, 0.005090f, 0.014206f, -0.002073f, + -0.000537f, -0.027237f, 0.048753f, 0.008129f, -0.009281f, -0.001386f, 0.004317f, 0.020813f, 0.017711f, -0.018403f, 0.010327f, -0.007238f, 0.002203f, -0.003165f, -0.004649f, -0.027944f, -0.024897f, -0.033452f, 0.005029f, -0.001481f, -0.007078f, 0.020864f, -0.006700f, 0.059058f, -0.005868f, -0.003288f, -0.014614f, -0.006611f, 0.007629f, 0.010070f, 0.007098f, -0.000606f, 0.025402f, 0.018138f, -0.003825f, -0.012431f, 0.003310f, -0.007464f, -0.000099f, 0.002271f, -0.008268f, -0.002835f, 0.000144f, -0.002885f, 0.003925f, -0.010215f, 0.005921f, 0.011126f, -0.003532f, 0.005768f, -0.003567f, -0.002924f, -0.004643f, 0.001706f, 0.006143f, -0.002807f, 0.008273f, 0.001429f, 0.002846f, 0.011415f, 0.004868f, -0.001703f, 0.012028f, 0.005314f, 0.008296f, 0.010794f, 0.008311f, 0.000762f, -0.000177f, 0.007943f, -0.007619f, 0.000072f, 0.004788f, 0.002531f, 0.005497f, 0.005062f, 0.002654f, 0.006545f, -0.031832f, -0.044664f, -0.025278f, 0.033671f, 0.026006f, -0.022711f, -0.024058f, 0.036086f, 0.021329f, -0.022441f, -0.031281f, -0.004882f, 0.004921f, 0.003611f, 0.004027f, -0.017881f, 0.018527f, -0.013301f, + 0.036612f, -0.005601f, -0.026366f, 0.006187f, 0.009093f, -0.000098f, 0.002462f, -0.011332f, -0.017274f, -0.000825f, 0.014666f, -0.009105f, 0.011081f, -0.018073f, -0.048927f, -0.039299f, 0.024578f, -0.030593f, 0.024230f, 0.007269f, 0.002502f, -0.010176f, 0.014079f, 0.004713f, -0.004221f, -0.006963f, 0.006394f, 0.014866f, -0.013724f, 0.041170f, -0.010750f, 0.013898f, -0.012773f, 0.003689f, -0.003862f, -0.016043f, 0.039297f, -0.030986f, 0.042782f, -0.001500f, -0.021847f, -0.032571f, 0.016296f, 0.005908f, 0.005027f, 0.001978f, 0.017159f, 0.011821f, 0.015513f, -0.033534f, -0.010574f, 0.000959f, 0.000068f, 0.008538f, -0.025849f, -0.012276f, -0.008804f, -0.004301f, -0.032265f, -0.006444f, -0.011129f, -0.035777f, -0.002402f, -0.020261f, 0.004733f, -0.009474f, 0.002217f, 0.004688f, 0.015191f, 0.009353f, -0.006512f, -0.000937f, -0.013697f, 0.007332f, -0.001464f, 0.006372f, -0.015998f, 0.000915f, -0.006751f, 0.003807f, -0.014800f, 0.002869f, 0.002668f, 0.000779f, -0.003752f, 0.005051f, -0.008952f, 0.006447f, -0.013642f, 0.005063f, -0.009956f, 0.004625f, 0.001857f, 0.006460f, -0.005475f, 0.016448f, + 0.005813f, 0.000304f, -0.010521f, -0.008093f, -0.002207f, 0.010996f, -0.002914f, -0.005305f, -0.005775f, 0.007546f, 0.006585f, 0.076853f, 0.025608f, -0.017119f, 0.039447f, 0.036777f, -0.019046f, -0.024218f, 0.059319f, -0.005317f, 0.013012f, -0.035208f, 0.086359f, 0.003008f, -0.024248f, 0.012530f, 0.004265f, 0.041938f, 0.000666f, 0.052965f, -0.038146f, 0.000792f, -0.041667f, 0.003177f, 0.029170f, 0.001326f, -0.025565f, 0.036080f, 0.019224f, 0.010594f, 0.008610f, -0.012672f, -0.012268f, 0.003235f, -0.018135f, 0.023592f, -0.021189f, -0.028178f, 0.024716f, 0.009336f, -0.032726f, 0.017637f, 0.002027f, -0.023792f, -0.013425f, -0.008012f, 0.012336f, -0.002895f, -0.014426f, 0.017315f, -0.021229f, -0.008471f, -0.007385f, 0.029038f, -0.019302f, 0.013968f, 0.022223f, 0.010238f, -0.013418f, -0.027373f, 0.017088f, -0.023433f, 0.031312f, -0.039827f, 0.052148f, -0.015646f, -0.007563f, -0.007600f, 0.023624f, -0.001886f, 0.008432f, 0.014076f, 0.008356f, 0.020072f, -0.019999f, -0.037832f, 0.002404f, 0.031800f, -0.021594f, -0.010310f, -0.022566f, -0.013596f, 0.005627f, -0.002421f, -0.006684f, 0.013621f, + 0.009690f, 0.007091f, -0.003795f, 0.020867f, 0.012636f, -0.010038f, -0.005455f, 0.003915f, 0.000828f, 0.017614f, 0.011020f, -0.001710f, -0.006128f, -0.004798f, 0.019188f, 0.001535f, -0.010329f, 0.012076f, 0.003368f, 0.000229f, 0.009963f, 0.004384f, -0.002169f, -0.010817f, 0.002577f, 0.012516f, -0.009884f, -0.002688f, 0.014236f, -0.001266f, -0.003404f, -0.004008f, 0.008232f, 0.001334f, -0.000157f, -0.004197f, -0.045603f, -0.006035f, 0.042377f, -0.012614f, -0.025849f, 0.011284f, -0.011944f, -0.002583f, 0.019415f, -0.045961f, -0.026449f, 0.017332f, 0.023855f, 0.031716f, -0.001895f, -0.006351f, 0.013280f, -0.003390f, -0.044749f, -0.031200f, 0.053459f, -0.004322f, -0.046120f, -0.027288f, -0.018329f, -0.015667f, 0.004707f, 0.015333f, 0.001236f, -0.008043f, -0.022815f, -0.035773f, 0.005175f, 0.004452f, -0.000846f, 0.028761f, -0.019412f, -0.055950f, 0.022986f, 0.016123f, -0.064636f, 0.038583f, -0.010116f, -0.033099f, -0.026657f, -0.002696f, 0.037426f, 0.008605f, -0.011850f, -0.013652f, 0.010984f, 0.019216f, -0.026977f, 0.020732f, 0.003794f, 0.015214f, -0.011444f, -0.028723f, 0.025695f, -0.000145f, + 0.028767f, -0.088252f, 0.011610f, 0.013376f, -0.012600f, 0.024251f, 0.028837f, 0.083476f, 0.002795f, -0.055465f, -0.025052f, -0.014638f, -0.053281f, -0.052921f, 0.003163f, -0.030134f, 0.000815f, -0.020084f, 0.020151f, -0.020431f, -0.019473f, 0.035137f, 0.009099f, -0.001367f, -0.001514f, 0.020561f, -0.003951f, -0.002229f, 0.012432f, 0.009705f, -0.007193f, 0.006591f, -0.018456f, -0.004299f, 0.005693f, -0.003699f, -0.005057f, -0.009225f, -0.009253f, -0.005086f, -0.011511f, 0.004675f, -0.014745f, 0.003179f, -0.002196f, 0.014130f, -0.002924f, -0.007528f, -0.005885f, -0.008653f, -0.008731f, -0.002538f, -0.005972f, -0.011226f, -0.007807f, 0.008093f, -0.010603f, -0.005752f, -0.019304f, 0.006036f, 0.008372f, 0.020338f, 0.005042f, -0.002658f, 0.001098f, -0.038388f, 0.006108f, 0.023699f, 0.021085f, -0.034067f, 0.060636f, 0.042294f, -0.019500f, 0.025300f, -0.049164f, -0.010891f, -0.016505f, 0.077567f, 0.049645f, -0.018454f, -0.029635f, -0.036189f, -0.008089f, 0.002074f, 0.014205f, 0.052046f, 0.011025f, 0.008862f, 0.011213f, 0.001461f, -0.017200f, 0.002118f, -0.003290f, 0.024002f, 0.032317f, 0.041054f, + 0.026663f, 0.017432f, -0.004072f, -0.007543f, 0.006486f, 0.037229f, 0.005854f, 0.006644f, -0.037839f, -0.019172f, 0.063823f, 0.025968f, 0.019175f, 0.000529f, 0.038237f, 0.020491f, 0.080596f, -0.004455f, 0.083100f, 0.005967f, -0.025790f, 0.026968f, -0.022450f, -0.016719f, -0.002934f, -0.015270f, 0.000929f, 0.015504f, 0.033264f, 0.005861f, -0.007061f, -0.036332f, 0.011773f, 0.003098f, 0.024050f, -0.028471f, 0.007649f, -0.012520f, 0.004343f, -0.036231f, 0.018488f, -0.031864f, -0.003840f, -0.043405f, -0.059801f, -0.009869f, -0.009302f, 0.049401f, 0.013330f, -0.001407f, 0.009288f, 0.015505f, 0.019263f, 0.003392f, -0.000677f, 0.000943f, -0.034624f, 0.011145f, 0.000557f, 0.032487f, -0.013062f, -0.001410f, -0.008580f, 0.023149f, 0.004643f, 0.021170f, -0.000181f, -0.024188f, 0.011959f, -0.001060f, 0.008139f, -0.018321f, -0.008317f, 0.004677f, 0.005188f, -0.013545f, 0.001395f, 0.012883f, 0.007938f, -0.011867f, -0.013400f, 0.024019f, -0.023839f, 0.010244f, -0.007307f, -0.019206f, 0.006249f, 0.004768f, 0.006300f, 0.008429f, -0.008864f, -0.000798f, 0.011471f, 0.001267f, 0.008004f, -0.003008f, + -0.009062f, -0.008927f, -0.020280f, -0.031094f, 0.009510f, -0.035665f, -0.000019f, 0.042943f, 0.013545f, 0.036591f, -0.042530f, -0.019739f, 0.020909f, 0.004178f, 0.060966f, -0.031076f, 0.036474f, -0.013901f, -0.018402f, -0.045527f, -0.017601f, -0.024533f, 0.030490f, 0.006993f, -0.040417f, 0.050558f, -0.026163f, -0.024516f, 0.004958f, 0.019614f, -0.014779f, 0.034922f, -0.016971f, -0.024510f, -0.012524f, 0.011500f, -0.004253f, -0.006839f, 0.003826f, 0.034802f, -0.023659f, 0.063819f, -0.024809f, -0.000977f, 0.059293f, -0.012054f, 0.010456f, -0.080993f, 0.003612f, 0.014297f, -0.018230f, 0.035505f, -0.064844f, -0.079500f, 0.030131f, -0.014241f, 0.043893f, -0.032921f, -0.030922f, 0.003368f, -0.010166f, 0.067283f, -0.008202f, -0.003259f, 0.015037f, -0.062830f, 0.003575f, -0.063491f, -0.025361f, 0.003475f, 0.015137f, -0.079225f, -0.035285f, -0.009880f, -0.003857f, 0.025413f, -0.033913f, 0.040300f, -0.016622f, 0.004373f, -0.051939f, -0.002806f, -0.045889f, 0.017164f, 0.009937f, 0.033981f, 0.043538f, -0.016395f, 0.028555f, 0.003689f, -0.009337f, 0.014422f, 0.009137f, -0.014191f, -0.014185f, -0.025273f, + -0.000891f, -0.015106f, -0.015596f, 0.005236f, -0.003662f, 0.021462f, -0.029031f, -0.005239f, -0.018239f, 0.007031f, 0.010621f, -0.010272f, -0.001310f, -0.015644f, -0.015395f, 0.017169f, 0.028514f, 0.031854f, 0.006638f, 0.001891f, -0.008551f, 0.005897f, 0.005369f, -0.012292f, -0.019212f, 0.006421f, -0.010078f, -0.014325f, 0.021751f, 0.014911f, 0.012746f, -0.020003f, -0.022807f, -0.048934f, 0.039902f, -0.034980f, -0.010044f, 0.032040f, 0.073206f, -0.020664f, 0.060004f, 0.021554f, 0.015495f, -0.027653f, 0.066476f, 0.010689f, 0.031034f, 0.003183f, -0.038946f, 0.014475f, -0.039108f, -0.038667f, 0.024369f, -0.038517f, -0.008324f, -0.008779f, 0.039420f, 0.003693f, -0.013173f, 0.013079f, 0.017564f, -0.007791f, -0.037089f, -0.008385f, 0.028610f, 0.069510f, 0.015985f, -0.038642f, 0.004329f, -0.007152f, 0.016623f, 0.021336f, 0.035112f, -0.015173f, 0.000835f, 0.023044f, 0.005260f, -0.000856f, 0.046300f, 0.042130f, 0.049793f, 0.017502f, 0.041837f, 0.006056f, 0.025089f, -0.019356f, -0.003528f, 0.005886f, -0.038930f, 0.003267f, 0.065783f, -0.008031f, -0.014467f, 0.014181f, -0.001044f, 0.018027f, + -0.039268f, 0.052200f, -0.032627f, -0.014212f, -0.008995f, 0.002982f, 0.006015f, 0.006995f, -0.057109f, 0.072243f, -0.015706f, -0.022696f, -0.008643f, 0.061391f, -0.007083f, 0.013030f, -0.048440f, -0.033303f, 0.000843f, 0.025730f, 0.023218f, 0.039364f, -0.062909f, -0.019340f, 0.059922f, -0.021270f, 0.006471f, 0.051727f, 0.012079f, 0.011556f, -0.003523f, 0.002074f, -0.019815f, -0.001226f, 0.004725f, 0.014974f, -0.009073f, 0.012512f, -0.022848f, -0.012440f, 0.001027f, -0.006112f, -0.004108f, -0.052432f, -0.041052f, 0.003619f, 0.026307f, -0.024615f, -0.042818f, -0.017143f, -0.035221f, 0.010068f, 0.001266f, -0.013143f, 0.033245f, -0.009414f, 0.013404f, 0.015587f, -0.018563f, -0.012648f, -0.003372f, 0.004344f, -0.001685f, 0.025540f, -0.000726f, 0.001820f, -0.012610f, -0.002551f, -0.019653f, 0.117547f, -0.006900f, 0.023543f, -0.000981f, -0.012112f, 0.003323f, -0.054404f, -0.023208f, -0.016745f, 0.021147f, 0.015063f, 0.026610f, 0.003019f, -0.028607f, 0.029959f, -0.024296f, 0.034544f, 0.025449f, -0.028004f, -0.029971f, 0.003539f, 0.042298f, -0.043392f, 0.018169f, 0.019957f, -0.024768f, 0.011005f, + -0.003196f, 0.015114f, -0.001919f, -0.063247f, 0.035463f, 0.021763f, -0.053267f, 0.064249f, -0.034063f, -0.008207f, -0.021085f, 0.051862f, -0.010280f, -0.044153f, -0.000074f, 0.000653f, 0.042894f, 0.043598f, 0.002908f, -0.033639f, 0.048916f, -0.007899f, 0.008659f, -0.062027f, 0.048872f, 0.019923f, 0.002983f, -0.035577f, -0.026923f, -0.003771f, 0.017039f, -0.028579f, -0.051079f, -0.021735f, 0.040448f, 0.025072f, -0.005915f, 0.065619f, 0.003979f, -0.010596f, -0.047223f, 0.057927f, -0.053695f, -0.017281f, 0.059170f, 0.018762f, 0.007751f, -0.022125f, 0.009277f, 0.058363f, 0.013037f, 0.025664f, 0.036997f, -0.095181f, -0.020763f, -0.015690f, -0.007768f, -0.039373f, -0.006875f, -0.004514f, 0.058046f, 0.015877f, 0.004063f, 0.029632f, 0.041532f, 0.029188f, -0.020336f, 0.011267f, 0.024937f, -0.004669f, 0.009764f, 0.010932f, 0.013421f, 0.008817f, 0.041331f, 0.022541f, 0.002782f, -0.011678f, -0.018292f, -0.035310f, 0.005439f, 0.000360f, 0.009885f, 0.012028f, 0.005837f, 0.062253f, -0.008205f, 0.022755f, 0.013723f, -0.016471f, -0.048819f, -0.007554f, -0.017862f, -0.030195f, -0.032652f, 0.006122f, + -0.005088f, -0.039395f, 0.000508f, 0.015644f, -0.003541f, -0.003417f, 0.014330f, -0.009320f, -0.030040f, -0.047135f, 0.001495f, -0.052768f, 0.049356f, 0.077127f, 0.035807f, 0.043871f, -0.067346f, -0.060034f, -0.047185f, 0.004500f, 0.083448f, -0.015493f, 0.031001f, 0.054231f, 0.027317f, -0.030028f, 0.001751f, 0.039575f, -0.051174f, -0.042787f, -0.036717f, 0.041467f, 0.028898f, -0.053675f, -0.075747f, 0.102570f, 0.063250f, -0.073292f, 0.033077f, -0.008657f, 0.030297f, 0.003146f, -0.022214f, -0.050944f, 0.046362f, -0.001356f, -0.037759f, -0.056533f, 0.014372f, 0.013083f, -0.014329f, 0.001388f, -0.005292f, -0.027956f, -0.012306f, -0.014781f, 0.026118f, -0.049560f, 0.054486f, -0.037423f, 0.001948f, 0.085721f, -0.082866f, -0.020101f, 0.078099f, 0.005596f, 0.018219f, -0.011714f, -0.024542f, 0.024429f, -0.009163f, -0.034561f, 0.004394f, -0.078690f, 0.133186f, -0.013201f, -0.147073f, 0.055539f, 0.144883f, 0.085459f, -0.179298f, -0.052210f, 0.033795f, 0.012880f, -0.027406f, -0.041394f, 0.022239f, 0.054698f, -0.067552f, -0.018676f, -0.117770f, -0.020351f, 0.040494f, 0.014774f, -0.036089f, -0.058924f, + 0.023023f, 0.051564f, -0.001244f, -0.015941f, -0.028365f, 0.040983f, 0.024236f, 0.016649f, -0.003606f, -0.012401f, 0.004732f, 0.022890f, 0.017650f, -0.004198f, -0.047300f, -0.029386f, 0.048893f, 0.020999f, -0.025440f, -0.017160f, 0.035029f, 0.011757f, -0.005084f, -0.071523f, -0.032954f, -0.035672f, 0.039975f, 0.010999f, 0.008606f, -0.007430f, 0.000843f, 0.039048f, -0.008115f, -0.006940f, -0.034263f, 0.006760f, -0.011204f, 0.054523f, 0.011392f, -0.012198f, 0.006451f, 0.055046f, -0.007346f, -0.037164f, 0.008553f, 0.036581f, 0.085434f, -0.035787f, 0.027837f, -0.045173f, -0.119821f, 0.064721f, -0.030186f, -0.065484f, -0.045435f, -0.066943f, 0.032114f, 0.022409f, -0.090161f, 0.057963f, -0.031440f, -0.002171f, -0.001123f, -0.046162f, 0.035662f, 0.035667f, 0.031329f, -0.002848f, 0.040991f, 0.021564f, -0.024909f, 0.002400f, -0.051433f, -0.018478f, -0.045638f, -0.031663f, -0.002279f, 0.074273f, -0.061955f, -0.013065f, -0.013391f, -0.055315f, 0.032479f, -0.062411f, 0.032372f, 0.028284f, -0.042528f, 0.033664f, -0.068337f, 0.019797f, -0.059425f, 0.038710f, -0.022302f, -0.031193f, -0.032608f, -0.048197f, + -0.013117f, 0.024566f, 0.042115f, -0.048918f, 0.032754f, 0.018594f, 0.051299f, 0.063384f, 0.036545f, -0.052294f, -0.024469f, -0.098527f, -0.025046f, -0.028456f, 0.032746f, -0.115020f, -0.021961f, -0.068319f, -0.006054f, 0.068980f, 0.063170f, 0.041814f, 0.014617f, 0.092810f, 0.101286f, 0.090493f, -0.031133f, -0.040344f, 0.034189f, 0.088591f, 0.163262f, 0.012040f, 0.038125f, 0.020160f, -0.008880f, 0.030439f, -0.029587f, 0.018048f, -0.007796f, -0.000191f, -0.019122f, 0.030883f, 0.035305f, -0.012130f, -0.029463f, -0.021996f, 0.026704f, 0.012122f, 0.030300f, -0.016457f, 0.011651f, -0.005803f, -0.013661f, -0.008464f, 0.030085f, 0.060022f, 0.028401f, -0.030771f, 0.015600f, -0.010479f, 0.021235f, 0.009823f, 0.010409f, 0.029481f, -0.019018f, -0.039119f, 0.003088f, 0.030507f, 0.023549f, 0.008394f, -0.006068f, -0.013317f, -0.054262f, 0.053367f, 0.014661f, -0.012273f, -0.056411f, -0.012906f, -0.038821f, 0.019506f, -0.018878f, 0.013907f, 0.106861f, -0.063105f, 0.039811f, 0.048828f, -0.022734f, 0.004596f, 0.018411f, -0.005802f, 0.051705f, 0.002824f, 0.037366f, -0.047929f, -0.007043f, 0.041958f, + 0.006642f, -0.065101f, 0.041986f, -0.025921f, -0.021494f, -0.024784f, -0.006735f, -0.024176f, 0.024478f, 0.034687f, 0.016571f, -0.005927f, -0.018423f, 0.030098f, -0.010048f, -0.047827f, 0.038974f, -0.080820f, -0.020656f, -0.016581f, -0.018053f, 0.046237f, 0.050255f, 0.090694f, -0.026859f, 0.038831f, -0.001714f, 0.017531f, 0.059141f, -0.004288f, 0.006076f, -0.039583f, -0.125111f, 0.061845f, 0.011630f, -0.060240f, -0.041579f, 0.006124f, 0.032361f, -0.005727f, -0.035648f, 0.018365f, -0.036547f, 0.047717f, 0.026332f, -0.020785f, -0.043784f, 0.086478f, 0.009230f, 0.004597f, -0.008215f, 0.011993f, 0.005823f, 0.003774f, -0.029362f, -0.061458f, 0.016706f, -0.009004f, -0.022163f, -0.056646f, -0.014226f, -0.001686f, 0.050224f, 0.020825f, -0.063941f, 0.037092f, 0.006320f, -0.002437f, -0.007357f, 0.020679f, 0.026226f, -0.005279f, -0.012194f, -0.004542f, -0.011558f, 0.009766f, 0.015462f, -0.000731f, 0.008738f, 0.017656f, -0.006835f, 0.025505f, 0.010557f, 0.007803f, 0.013118f, -0.007242f, 0.031682f, 0.005352f, -0.007083f, 0.020833f, -0.025563f, 0.008074f, 0.014220f, -0.006042f, -0.011111f, 0.028752f, + 0.041209f, -0.037229f, -0.007194f, -0.013165f, -0.013049f, 0.014774f, 0.012554f, -0.023424f, 0.012617f, 0.010303f, 0.008948f, 0.010784f, -0.021274f, 0.014896f, -0.001917f, 0.008745f, -0.006923f, 0.005972f, 0.118911f, 0.060648f, 0.119655f, -0.110491f, 0.009554f, 0.057432f, -0.022277f, 0.065416f, 0.126252f, 0.069282f, 0.004026f, -0.034019f, -0.035080f, 0.006545f, 0.054717f, 0.058594f, 0.013313f, -0.000147f, -0.087136f, -0.017960f, 0.085931f, 0.028429f, -0.023969f, 0.047459f, -0.040377f, -0.056481f, -0.015515f, -0.003771f, 0.066438f, 0.086773f, 0.077954f, 0.029537f, -0.030222f, -0.046458f, -0.086188f, -0.085701f, 0.074645f, 0.031305f, 0.006117f, 0.115284f, 0.006984f, -0.035300f, -0.047177f, -0.047933f, 0.023316f, 0.049254f, 0.039199f, 0.075621f, 0.005370f, 0.054413f, -0.003568f, -0.009780f, 0.027565f, 0.050380f, 0.036855f, 0.032017f, -0.028737f, -0.010886f, -0.022666f, -0.051102f, -0.040942f, -0.074475f, -0.024928f, 0.019967f, -0.012227f, 0.054182f, 0.065135f, -0.001061f, 0.000618f, -0.026668f, -0.047612f, 0.009823f, 0.062939f, -0.003626f, 0.034837f, 0.015280f, -0.004569f, -0.019716f, + -0.009065f, 0.005761f, 0.021977f, 0.017135f, -0.016818f, -0.035230f, -0.043551f, -0.040866f, -0.015833f, 0.016607f, -0.004250f, -0.025679f, -0.013137f, -0.017816f, -0.015061f, 0.008437f, -0.002271f, 0.024137f, 0.034531f, 0.007763f, -0.041975f, -0.021569f, -0.025143f, -0.005696f, 0.028332f, 0.006854f, 0.006976f, -0.034316f, -0.032511f, -0.037041f, -0.019019f, 0.032377f, 0.022053f, 0.027954f, 0.015017f, -0.013486f, -0.016717f, 0.011886f, 0.010732f, -0.002858f, 0.007280f, -0.014133f, -0.011391f, 0.008461f, 0.005929f, 0.011707f, -0.006813f, -0.014039f, -0.006483f, -0.010745f, -0.002031f, -0.063164f, -0.123185f, 0.048606f, 0.200874f, 0.204245f, 0.172882f, 0.125268f, -0.077322f, -0.088180f, -0.095292f, -0.126731f, -0.193939f, -0.156231f, -0.135704f, 0.062990f, 0.145763f, 0.108407f, 0.234429f, 0.181190f, 0.094462f, -0.034872f, -0.063208f, -0.157617f, -0.123066f, -0.121848f, -0.024938f, -0.074670f, -0.060659f, 0.018060f, 0.032952f, 0.066384f, 0.066613f, 0.091417f, 0.090662f, 0.116989f, 0.068205f, 0.029990f, -0.017072f, -0.019789f, -0.051536f, -0.077940f, -0.094130f, -0.115043f, -0.075383f, -0.141293f, + -0.094171f, -0.070672f, 0.070646f, 0.134020f, 0.144506f, 0.099972f, 0.068080f, 0.106698f, 0.081607f, 0.102398f, 0.080438f, 0.028180f, -0.038096f, -0.179431f, -0.126933f, -0.129365f, -0.200754f, -0.125953f, -0.109040f, -0.105806f, 0.038361f, 0.106329f, 0.168852f, 0.139039f, 0.198516f, 0.178172f, 0.174201f, 0.124187f, -0.067908f, -0.061460f, -0.139600f, -0.184568f, -0.203382f, -0.166815f, -0.080136f, -0.022812f, -0.042239f, 0.054915f, 0.145354f, 0.102458f, 0.069163f, 0.116570f, 0.097935f, 0.034942f, -0.023218f, -0.023387f, -0.007709f, -0.028672f, -0.078429f, -0.049318f, -0.056088f, -0.030360f, -0.025251f, -0.058456f, -0.021772f, 0.019958f, -0.019728f, 0.064457f, 0.085099f, 0.093509f, 0.098914f, 0.006014f, 0.029393f, 0.028758f, -0.008652f, -0.135913f, -0.108504f, -0.084817f, -0.075782f, -0.059713f, -0.056656f, 0.062291f, 0.093131f, 0.101236f, 0.096878f, 0.079836f, 0.054674f, 0.049182f, -0.000986f, -0.014880f, -0.078747f, -0.106216f, -0.095140f, -0.079411f, -0.050754f, -0.033145f, 0.003545f, 0.047454f, 0.096582f, 0.072208f, 0.045836f, 0.033064f, 0.008821f, -0.001022f, -0.000310f, -0.019750f, + -0.025628f, -0.021343f, -0.025085f, 0.005387f, -0.009736f, -0.034471f, 0.003959f, 0.015582f, -0.006601f, -0.009174f, -0.007624f, 0.003133f, 0.005732f, -0.007803f, 0.001490f, 0.008673f, 0.002502f, 0.000940f, 0.000034f} + }, + { + {-0.006192f, 0.006233f, 0.005383f, 0.011961f, -0.016344f, 0.003472f, 0.010816f, 0.019685f, -0.002106f, 0.011068f, -0.000443f, 0.010044f, 0.002462f, 0.015432f, -0.000290f, -0.005075f, 0.010451f, 0.014785f, 0.014081f, 0.008243f, 0.002291f, -0.005784f, -0.004492f, 0.001334f, 0.007197f, -0.003707f, 0.003358f, 0.000822f, 0.008179f, -0.004010f, -0.000203f, 0.001968f, -0.009709f, -0.005726f, -0.002837f, -0.010234f, 0.002460f, -0.002942f, -0.000059f, -0.001457f, -0.008433f, 0.006511f, 0.010117f, -0.002164f, 0.000840f, 0.000849f, -0.001581f, 0.010625f, -0.012959f, -0.000123f, 0.005407f, 0.001355f, 0.001748f, -0.003208f, -0.010727f, -0.002839f, 0.004218f, 0.004858f, 0.005535f, -0.001071f, 0.000224f, -0.000024f, 0.002216f, -0.001925f, 0.011303f, 0.000216f, -0.000955f, -0.007486f, 0.001036f, -0.005392f, -0.004041f, 0.004341f, 0.004881f, 0.011510f, 0.000449f, 0.011314f, 0.001337f, 0.001128f, 0.000808f, -0.006147f, 0.000413f, -0.002259f, -0.003030f, 0.001122f, 0.003696f, -0.002422f, 0.001517f, -0.002503f, 0.002943f, -0.003146f, -0.000898f, -0.001674f, 0.001721f, -0.001087f, 0.001610f, -0.001474f, + 0.001890f, 0.003127f, 0.001662f, -0.001709f, -0.000383f, -0.000939f, -0.000748f, 0.000805f, 0.000737f, 0.012926f, 0.020968f, 0.002802f, 0.010439f, -0.003792f, 0.006201f, 0.008089f, -0.002488f, -0.006493f, 0.010995f, 0.018957f, -0.003717f, 0.002101f, 0.007337f, -0.009082f, 0.005653f, 0.008091f, -0.016575f, 0.004659f, 0.001621f, -0.003733f, 0.000004f, -0.017265f, 0.000705f, 0.004832f, -0.008204f, 0.001515f, 0.000292f, 0.011054f, 0.007901f, -0.004155f, -0.001179f, -0.001054f, -0.011750f, -0.007906f, 0.001295f, 0.004744f, 0.001065f, 0.005271f, -0.007762f, 0.001169f, 0.003880f, 0.000798f, -0.007186f, -0.005267f, -0.001591f, 0.002498f, 0.005818f, 0.006012f, 0.004015f, 0.007019f, 0.006876f, -0.007719f, -0.002359f, 0.000309f, 0.009773f, -0.001491f, 0.007013f, -0.004615f, -0.004770f, -0.001481f, -0.008778f, -0.004056f, 0.001802f, 0.005120f, -0.007492f, 0.007332f, -0.002073f, -0.002194f, -0.001462f, -0.002975f, -0.003788f, 0.001513f, 0.005708f, 0.002124f, 0.009527f, -0.013217f, -0.010650f, -0.002350f, 0.003950f, -0.000145f, -0.002170f, 0.002016f, 0.000299f, 0.002446f, 0.004022f, 0.006729f, + 0.000123f, -0.000401f, 0.001597f, -0.000629f, -0.000095f, 0.001034f, -0.003073f, -0.001656f, -0.006378f, 0.002517f, 0.012185f, 0.017168f, 0.009994f, -0.004345f, 0.007403f, -0.004526f, -0.003005f, -0.014724f, -0.011680f, 0.005279f, 0.011278f, 0.010991f, 0.011497f, 0.002541f, 0.000641f, 0.007090f, -0.009456f, 0.009516f, 0.007744f, 0.000695f, 0.006655f, 0.017021f, 0.011612f, 0.003231f, -0.012223f, 0.000339f, 0.004137f, 0.002625f, 0.002041f, -0.013432f, 0.003233f, 0.002452f, 0.008999f, 0.009894f, -0.003094f, 0.006348f, -0.004806f, -0.005374f, 0.007236f, 0.004077f, -0.012823f, -0.012171f, -0.005306f, -0.006847f, -0.005065f, -0.005443f, -0.014818f, -0.013444f, -0.001199f, 0.004828f, -0.000070f, -0.001436f, -0.009981f, 0.001313f, 0.011880f, -0.003349f, -0.003734f, 0.004450f, -0.000010f, 0.008562f, 0.004327f, 0.004365f, -0.005523f, -0.006854f, 0.012754f, 0.005809f, -0.005088f, 0.008373f, -0.001106f, 0.006522f, -0.005523f, 0.001009f, 0.009417f, -0.003595f, -0.003038f, 0.006759f, 0.000841f, 0.002678f, 0.004047f, -0.004704f, 0.005285f, -0.002224f, 0.004331f, 0.004328f, 0.003375f, -0.003028f, + 0.001108f, -0.001523f, -0.002545f, -0.003295f, 0.000189f, 0.000360f, 0.002132f, 0.001794f, 0.000500f, -0.000199f, 0.001674f, 0.000488f, 0.001166f, -0.023761f, -0.013971f, -0.004391f, 0.004512f, -0.009804f, 0.002995f, -0.002695f, 0.006843f, -0.001676f, -0.013290f, -0.010593f, 0.009207f, 0.007512f, 0.019034f, 0.016786f, -0.002549f, 0.012139f, -0.018289f, -0.002996f, 0.014223f, 0.004265f, 0.003301f, -0.001895f, -0.005975f, -0.002808f, 0.001967f, -0.001654f, -0.000556f, 0.007175f, -0.008971f, 0.001978f, 0.003257f, -0.000239f, 0.005659f, -0.006189f, -0.005057f, 0.003233f, -0.003935f, 0.005037f, -0.010032f, 0.001637f, -0.006030f, -0.002396f, -0.006716f, -0.005048f, -0.007629f, -0.011328f, 0.006917f, -0.000102f, 0.011799f, -0.011075f, -0.009469f, -0.000109f, 0.002249f, -0.001329f, -0.002285f, 0.000748f, 0.007099f, 0.003374f, 0.001515f, -0.004893f, -0.004706f, -0.002694f, -0.008841f, 0.001367f, -0.002306f, 0.000998f, -0.000437f, -0.009535f, -0.000820f, -0.000792f, -0.010081f, 0.000238f, -0.001922f, 0.001128f, -0.001722f, -0.011241f, 0.000985f, 0.004991f, -0.002253f, 0.007356f, 0.002018f, -0.004002f, + 0.003088f, 0.007719f, 0.002525f, 0.001294f, 0.001726f, -0.001692f, 0.000933f, 0.006027f, -0.000508f, -0.001012f, 0.002202f, 0.002447f, 0.000930f, 0.001963f, 0.000396f, 0.000794f, -0.004101f, 0.000400f, -0.000363f, -0.002044f, -0.001502f, -0.001520f, -0.002114f, 0.000264f, -0.001745f, 0.008253f, -0.012686f, 0.005160f, -0.014188f, -0.002484f, 0.000772f, -0.010531f, 0.009979f, 0.007553f, -0.021104f, -0.002147f, 0.003627f, -0.001962f, -0.009198f, -0.012423f, 0.002625f, -0.006257f, -0.010270f, -0.005104f, 0.006186f, 0.005424f, 0.015076f, 0.019523f, -0.001640f, 0.017444f, -0.010649f, 0.006853f, 0.007661f, -0.001566f, 0.007546f, -0.004311f, 0.000218f, -0.001157f, -0.003541f, -0.001887f, -0.003972f, 0.014521f, -0.000762f, -0.010865f, -0.002537f, 0.007258f, 0.004580f, 0.005797f, 0.001214f, -0.005097f, 0.010679f, 0.021622f, 0.001401f, 0.002151f, 0.001319f, -0.001646f, 0.003478f, -0.001491f, 0.012421f, -0.009499f, 0.011882f, 0.008165f, -0.007475f, 0.003815f, 0.007752f, 0.005235f, -0.008971f, -0.009806f, -0.019251f, -0.003200f, -0.001785f, 0.002401f, 0.007494f, -0.001863f, 0.004891f, -0.001690f, + -0.005093f, -0.005159f, 0.009994f, -0.002325f, 0.010597f, -0.015643f, -0.006124f, 0.003530f, -0.009860f, 0.002516f, 0.010655f, 0.000954f, -0.000052f, 0.000725f, 0.002291f, 0.001404f, -0.005968f, -0.001976f, -0.000955f, 0.000813f, -0.001044f, 0.001890f, 0.002746f, 0.001344f, -0.001717f, -0.004090f, 0.004425f, 0.001635f, 0.001732f, 0.001085f, 0.001296f, 0.000251f, 0.000126f, -0.002016f, 0.001851f, 0.000793f, 0.000730f, 0.000244f, 0.001941f, 0.001216f, 0.002323f, -0.002767f, -0.001629f, -0.003236f, -0.002926f, -0.000865f, 0.002323f, -0.001928f, 0.000218f, 0.005607f, 0.002482f, 0.000285f, 0.007534f, 0.021865f, 0.025771f, -0.006691f, -0.000599f, 0.005434f, -0.003902f, 0.016697f, 0.016287f, -0.010255f, 0.015965f, 0.012557f, 0.004829f, 0.007284f, 0.006501f, 0.003331f, -0.001411f, 0.001166f, 0.002134f, -0.008810f, -0.010796f, 0.002832f, -0.003032f, -0.000132f, 0.001850f, -0.009530f, 0.009602f, 0.019311f, -0.000620f, -0.011586f, 0.018863f, 0.002295f, 0.000559f, 0.007411f, -0.003338f, -0.005665f, 0.002724f, -0.007105f, 0.002809f, 0.019277f, 0.008234f, -0.000147f, 0.006864f, 0.010473f, + 0.027182f, -0.004459f, 0.011709f, -0.002346f, -0.011867f, 0.007765f, 0.000667f, -0.003947f, 0.005312f, 0.016672f, 0.004239f, 0.002951f, -0.000292f, 0.006667f, 0.024039f, 0.010785f, 0.002958f, 0.002427f, 0.006285f, -0.006965f, 0.012265f, -0.003198f, -0.023906f, 0.002886f, -0.002624f, 0.014346f, 0.016850f, 0.007300f, -0.007308f, -0.006596f, -0.006248f, -0.000873f, 0.005184f, 0.000470f, 0.003480f, 0.002404f, 0.003648f, 0.010762f, 0.004576f, -0.008588f, -0.003812f, 0.001155f, 0.002882f, 0.000517f, -0.000320f, 0.000287f, -0.004808f, 0.004934f, 0.001057f, 0.000969f, 0.000421f, 0.000966f, 0.000336f, 0.003677f, -0.001644f, 0.002666f, -0.002844f, -0.000849f, -0.004417f, 0.000810f, -0.001785f, -0.000289f, 0.001440f, -0.029027f, -0.003347f, -0.012277f, -0.014652f, -0.003792f, -0.010472f, 0.000567f, 0.008860f, -0.013594f, 0.014078f, -0.030157f, 0.004216f, -0.008876f, -0.016188f, -0.021547f, 0.022483f, 0.011340f, 0.001370f, -0.019083f, -0.012613f, 0.007230f, -0.024963f, -0.017319f, 0.005822f, 0.005361f, 0.025186f, -0.003202f, 0.002021f, 0.018802f, -0.011220f, 0.018471f, 0.006227f, 0.006820f, + -0.003667f, -0.010995f, -0.001378f, 0.015397f, -0.008341f, 0.001386f, 0.019156f, -0.006938f, -0.005748f, -0.009224f, -0.011500f, -0.009793f, -0.007479f, -0.015449f, -0.001971f, 0.004753f, -0.005390f, 0.003503f, -0.005156f, -0.007864f, 0.010746f, -0.013782f, 0.008369f, -0.011702f, -0.014920f, 0.000807f, 0.012172f, 0.000884f, -0.003735f, 0.004940f, -0.009966f, -0.004911f, -0.013940f, -0.024677f, -0.011746f, 0.003611f, -0.007550f, 0.028376f, 0.011213f, -0.019657f, -0.009991f, -0.002841f, -0.007155f, 0.009172f, 0.019149f, 0.012692f, -0.009314f, 0.008965f, -0.011037f, 0.006714f, 0.000972f, 0.008988f, -0.009770f, -0.002222f, 0.000850f, -0.004203f, -0.008330f, -0.006871f, 0.001286f, -0.000365f, -0.001939f, 0.004459f, 0.001675f, 0.000772f, -0.002749f, 0.002706f, -0.000533f, -0.002047f, -0.006041f, -0.000041f, -0.003093f, 0.000626f, 0.002718f, -0.001897f, -0.006704f, -0.000684f, -0.002826f, 0.031503f, 0.020495f, 0.021559f, -0.006320f, -0.030644f, -0.002479f, -0.015705f, 0.003892f, 0.006781f, 0.016438f, -0.007755f, 0.007181f, -0.012614f, 0.002101f, -0.011129f, -0.028529f, -0.015386f, 0.010847f, -0.010420f, + -0.022618f, -0.021250f, -0.019780f, -0.030845f, 0.003785f, -0.010822f, -0.023506f, -0.021136f, 0.003656f, 0.029643f, -0.004016f, -0.004979f, -0.009970f, -0.018019f, 0.003665f, -0.007187f, 0.001922f, -0.022471f, 0.001385f, -0.023405f, 0.003216f, -0.001925f, 0.012516f, 0.009713f, 0.010410f, 0.005355f, -0.000933f, 0.008664f, -0.005785f, 0.017063f, 0.004758f, 0.008631f, 0.005140f, -0.005599f, 0.006037f, 0.017197f, -0.002292f, 0.009603f, -0.002488f, 0.027055f, 0.003442f, 0.010163f, 0.001281f, -0.015177f, -0.011653f, 0.000534f, -0.005420f, 0.003500f, -0.003967f, 0.008971f, 0.007958f, 0.010429f, -0.004831f, 0.005953f, -0.020798f, 0.011058f, 0.030318f, -0.014627f, -0.003116f, 0.008082f, -0.017511f, -0.001180f, 0.010905f, -0.006844f, -0.001114f, -0.003610f, 0.009485f, -0.009738f, -0.002350f, 0.002671f, -0.005474f, 0.002672f, -0.001912f, 0.004044f, -0.005064f, -0.005005f, 0.005589f, -0.002494f, -0.005559f, 0.003956f, -0.002202f, 0.000156f, -0.007844f, 0.006027f, 0.001998f, -0.001259f, -0.001304f, 0.003454f, 0.001209f, 0.003351f, 0.002409f, 0.000636f, -0.003358f, -0.005874f, -0.001727f, -0.015177f, + -0.044175f, -0.007263f, -0.015454f, -0.023181f, 0.012450f, -0.044282f, -0.005806f, -0.015727f, -0.008644f, 0.012837f, -0.014170f, 0.018784f, 0.016104f, 0.002612f, 0.014515f, 0.001327f, 0.007644f, -0.011519f, -0.020452f, -0.022416f, -0.012624f, -0.020541f, 0.015974f, 0.021047f, -0.000969f, -0.011040f, 0.006001f, 0.006090f, -0.007805f, 0.001576f, -0.035122f, -0.018509f, 0.016233f, -0.008908f, 0.000404f, 0.016025f, -0.001590f, 0.009924f, 0.008396f, -0.004536f, 0.009617f, -0.000088f, -0.018759f, 0.020830f, -0.014699f, 0.001028f, 0.001075f, -0.011454f, 0.007572f, 0.012429f, -0.007389f, 0.014197f, 0.001522f, -0.001082f, -0.013028f, 0.016035f, -0.000160f, -0.012948f, -0.004366f, -0.025963f, -0.010970f, -0.014813f, -0.001945f, 0.017892f, 0.005092f, -0.001677f, 0.000232f, -0.016795f, 0.003719f, 0.012957f, -0.017028f, 0.000998f, 0.025917f, -0.010672f, 0.002489f, 0.001992f, -0.018528f, -0.011088f, 0.011760f, 0.009922f, -0.030109f, 0.006078f, 0.022419f, -0.000089f, 0.002628f, 0.000157f, 0.005364f, -0.001692f, 0.014135f, -0.003225f, -0.000639f, 0.001841f, 0.002676f, -0.006411f, 0.001584f, 0.005022f, + 0.001494f, 0.008457f, 0.003053f, -0.000155f, -0.003141f, -0.006616f, -0.001963f, 0.003182f, -0.004155f, 0.003011f, -0.004259f, -0.000094f, 0.005803f, 0.003166f, -0.004156f, -0.005557f, 0.000255f, 0.000220f, 0.012398f, -0.004985f, 0.000985f, 0.006838f, 0.002719f, 0.006681f, 0.078588f, 0.017488f, -0.010310f, -0.015768f, -0.001545f, -0.004987f, 0.013910f, -0.003105f, 0.011753f, 0.022287f, -0.009018f, 0.001121f, -0.014781f, -0.010100f, 0.004708f, -0.002434f, 0.011419f, -0.022033f, -0.012951f, 0.010400f, 0.022041f, 0.014578f, -0.000729f, 0.005232f, -0.005458f, -0.013268f, 0.009543f, 0.017261f, 0.018050f, 0.021845f, -0.018145f, -0.004285f, -0.010433f, -0.022438f, -0.002893f, 0.001167f, -0.004976f, 0.010316f, 0.013548f, -0.000029f, 0.006655f, -0.004024f, -0.023906f, -0.012973f, -0.031953f, -0.032355f, -0.009511f, 0.010846f, -0.004799f, -0.014326f, 0.027054f, 0.010266f, -0.001175f, -0.025426f, -0.001234f, -0.007824f, -0.018263f, 0.000240f, -0.008396f, -0.011772f, -0.025264f, -0.003214f, -0.009381f, -0.027678f, -0.000083f, 0.021208f, -0.014314f, -0.006731f, 0.007748f, -0.011889f, 0.004661f, -0.011778f, + 0.017178f, -0.005495f, -0.016756f, -0.025857f, -0.042601f, 0.008439f, 0.007107f, 0.032543f, 0.013003f, 0.011306f, -0.000237f, 0.009922f, -0.007730f, 0.010515f, -0.001046f, 0.003752f, 0.005123f, 0.012469f, 0.005596f, 0.000578f, -0.002351f, -0.000535f, 0.004831f, 0.003154f, 0.012803f, 0.010201f, 0.006682f, 0.002296f, -0.002705f, -0.006710f, 0.003637f, 0.008461f, 0.000665f, 0.000643f, -0.001650f, -0.005911f, -0.001121f, -0.000774f, -0.002971f, -0.002022f, -0.004734f, 0.004007f, 0.005604f, -0.005192f, -0.005507f, -0.000163f, -0.000792f, 0.003127f, 0.017680f, -0.062270f, -0.035481f, 0.033012f, -0.008577f, 0.002123f, -0.017104f, 0.014404f, -0.005900f, -0.024025f, 0.011553f, 0.033373f, 0.004291f, -0.029197f, 0.008249f, -0.006355f, -0.006669f, 0.019217f, 0.019938f, -0.002684f, -0.004041f, 0.042024f, 0.009404f, -0.006037f, -0.025810f, 0.011442f, -0.037022f, -0.030476f, -0.028077f, 0.011405f, -0.005298f, -0.003005f, 0.024159f, 0.009637f, -0.024505f, -0.020485f, 0.005353f, 0.023853f, 0.008182f, -0.002714f, 0.001374f, 0.015907f, -0.011470f, -0.025890f, 0.033815f, -0.009923f, 0.003526f, 0.013656f, + 0.002126f, 0.004693f, 0.034774f, 0.000614f, 0.022157f, 0.001011f, -0.023275f, 0.003382f, 0.004991f, -0.004817f, 0.004455f, 0.015828f, -0.011765f, -0.003567f, 0.004056f, -0.046031f, 0.012223f, 0.009422f, -0.000258f, 0.011055f, 0.008616f, -0.017077f, 0.008102f, 0.063236f, 0.027184f, 0.015626f, 0.004586f, 0.015361f, -0.048615f, -0.023043f, 0.024602f, 0.000986f, -0.000227f, -0.018653f, 0.016439f, 0.019901f, 0.016661f, 0.002777f, 0.003489f, -0.006677f, 0.000263f, -0.011569f, -0.004209f, 0.009128f, -0.002067f, -0.005837f, 0.004738f, 0.000367f, 0.004545f, -0.006752f, -0.002871f, 0.002255f, -0.001244f, 0.004598f, -0.008084f, -0.002803f, 0.005726f, -0.006455f, 0.004625f, 0.001667f, 0.000574f, 0.000156f, 0.000028f, -0.005243f, 0.002577f, 0.004790f, -0.002452f, -0.002458f, -0.005627f, 0.002417f, -0.000382f, -0.041753f, 0.029344f, 0.031349f, 0.010149f, 0.017281f, -0.011566f, 0.050054f, -0.005853f, 0.019076f, 0.013104f, -0.023128f, -0.009434f, -0.010688f, 0.029145f, -0.017334f, -0.005340f, 0.018303f, 0.015469f, -0.017038f, -0.004562f, -0.049203f, 0.009250f, -0.005484f, -0.014380f, 0.004226f, + 0.001390f, 0.003599f, 0.004582f, 0.016617f, 0.000742f, 0.018205f, 0.002233f, 0.008857f, -0.004648f, -0.015876f, -0.016830f, 0.031742f, -0.011255f, -0.023043f, -0.019305f, -0.008815f, -0.010592f, 0.013752f, 0.008618f, 0.010583f, 0.014118f, 0.004180f, -0.017350f, 0.009946f, -0.028335f, -0.009330f, -0.024751f, 0.017040f, -0.029888f, -0.021534f, -0.006293f, -0.010124f, 0.009012f, 0.020114f, -0.015948f, 0.018987f, 0.031382f, 0.015515f, 0.030233f, -0.012690f, 0.040562f, 0.003671f, 0.034374f, 0.019423f, 0.004336f, -0.018327f, -0.045949f, -0.031114f, -0.025213f, -0.014384f, -0.014105f, -0.004535f, -0.021363f, 0.016128f, 0.026971f, -0.010372f, -0.020568f, -0.018835f, -0.014828f, -0.028015f, 0.017695f, 0.012738f, -0.007380f, -0.007231f, -0.010814f, 0.001425f, -0.006102f, 0.015079f, 0.000099f, 0.003860f, -0.007988f, -0.006912f, -0.011286f, -0.002096f, -0.013530f, -0.013051f, 0.013428f, -0.000946f, 0.001688f, 0.000330f, 0.004957f, -0.005337f, -0.000452f, -0.008017f, 0.000322f, 0.000047f, -0.000299f, 0.004128f, 0.000489f, -0.006561f, -0.004260f, -0.004708f, 0.001368f, -0.007050f, -0.007629f, -0.009695f, + 0.002671f, 0.023250f, 0.011852f, -0.013229f, 0.039148f, 0.004427f, -0.038206f, 0.047718f, 0.003203f, -0.020322f, 0.016846f, -0.039187f, -0.007497f, -0.024948f, -0.007785f, -0.004414f, -0.007650f, -0.017831f, 0.005005f, -0.033854f, -0.013089f, -0.012202f, -0.045684f, 0.005559f, -0.033128f, -0.023545f, -0.037167f, 0.007470f, -0.028040f, -0.008457f, -0.009284f, 0.000316f, 0.014151f, -0.011388f, 0.019917f, 0.001044f, 0.026426f, -0.006137f, 0.022987f, 0.028967f, -0.034735f, -0.000503f, 0.009334f, 0.021271f, 0.000843f, 0.025574f, 0.008572f, 0.024660f, -0.000503f, -0.018807f, -0.011823f, -0.001790f, 0.015961f, -0.003649f, -0.007320f, -0.001578f, 0.029547f, 0.018668f, -0.007006f, -0.024316f, 0.008174f, 0.013396f, 0.009524f, 0.026211f, -0.035057f, -0.025920f, -0.007396f, 0.002498f, -0.009859f, 0.000309f, -0.010053f, -0.021902f, 0.061547f, -0.030364f, -0.035255f, 0.026358f, 0.015181f, 0.022903f, 0.007035f, 0.008441f, 0.004749f, 0.013405f, -0.012623f, 0.035377f, -0.006166f, 0.008703f, -0.006818f, 0.004766f, 0.002136f, -0.001902f, 0.022549f, 0.002858f, 0.001987f, -0.022180f, 0.010075f, 0.003360f, + -0.003247f, -0.018056f, -0.001839f, -0.003705f, 0.000492f, -0.005724f, 0.016248f, 0.003793f, 0.004551f, -0.013038f, 0.008945f, -0.006176f, 0.001832f, 0.007867f, -0.000312f, -0.003829f, -0.004186f, -0.011597f, 0.006781f, 0.011932f, -0.005646f, -0.001279f, -0.004187f, 0.001806f, -0.006738f, -0.015624f, -0.004722f, -0.000491f, -0.010713f, 0.011157f, -0.000950f, -0.001479f, 0.003775f, -0.010497f, -0.011905f, 0.004887f, -0.008197f, -0.010436f, 0.031020f, 0.022844f, 0.036679f, -0.012212f, -0.009083f, -0.050376f, 0.058493f, 0.026811f, -0.077910f, -0.041698f, 0.024962f, 0.034679f, 0.034885f, -0.022410f, -0.018193f, 0.042212f, 0.010009f, 0.009688f, 0.029262f, 0.023656f, -0.043083f, 0.013201f, 0.018149f, -0.003226f, 0.020325f, 0.003910f, -0.005542f, 0.004213f, -0.014035f, 0.071921f, 0.018822f, 0.009369f, -0.001988f, -0.008894f, -0.004847f, -0.040795f, 0.007809f, 0.011990f, -0.009620f, -0.013375f, -0.066057f, -0.031552f, 0.013807f, 0.011516f, -0.021693f, -0.021200f, -0.003013f, -0.031441f, 0.012985f, 0.011674f, -0.004600f, 0.013134f, 0.026015f, 0.001309f, -0.001383f, -0.008340f, -0.013947f, -0.004547f, + 0.002306f, -0.048675f, -0.006513f, 0.011437f, 0.029647f, -0.052682f, 0.011669f, 0.018887f, -0.004181f, -0.024801f, -0.022429f, 0.039784f, 0.039283f, -0.005750f, -0.024588f, -0.046578f, 0.009769f, 0.018684f, 0.009739f, 0.000777f, -0.050826f, 0.021427f, 0.046183f, -0.015648f, 0.005176f, 0.014525f, -0.019065f, -0.030341f, -0.016091f, 0.004631f, -0.009464f, -0.002409f, -0.014357f, -0.012325f, -0.010503f, -0.004427f, -0.004172f, 0.006180f, -0.001171f, -0.000925f, -0.013095f, 0.005376f, -0.006188f, 0.002803f, 0.000030f, 0.004216f, 0.007829f, 0.009209f, -0.014630f, 0.005850f, -0.011326f, -0.018936f, -0.010028f, 0.002720f, -0.001998f, 0.008277f, -0.001923f, 0.005391f, 0.011094f, 0.000562f, -0.000607f, -0.009817f, -0.005573f, 0.014809f, 0.007417f, -0.006196f, -0.003885f, 0.023175f, -0.017067f, 0.006324f, -0.014223f, -0.012541f, 0.002178f, 0.015711f, 0.031355f, -0.057753f, -0.075371f, -0.052374f, -0.067429f, 0.058555f, -0.039057f, 0.023585f, -0.006604f, -0.047350f, 0.008473f, -0.012837f, -0.017603f, -0.061474f, -0.056336f, -0.042045f, -0.016055f, 0.002223f, -0.032597f, -0.009411f, 0.008611f, 0.026517f, + 0.002100f, -0.016439f, 0.000067f, -0.017580f, 0.025413f, -0.031926f, 0.044184f, 0.038112f, -0.009104f, -0.012071f, -0.052388f, -0.030511f, -0.031857f, 0.003882f, 0.007050f, -0.008489f, 0.042824f, 0.012252f, 0.034717f, 0.006896f, -0.004080f, -0.015692f, 0.031238f, 0.021622f, 0.009816f, -0.031301f, 0.016814f, -0.052972f, -0.005900f, -0.005568f, -0.035183f, -0.005730f, 0.000464f, 0.040623f, 0.026903f, 0.000843f, 0.018792f, -0.000672f, -0.039948f, 0.020445f, 0.005694f, 0.033430f, -0.018844f, -0.038398f, 0.022996f, -0.069063f, -0.015817f, 0.024554f, -0.010334f, -0.010926f, 0.016987f, -0.004423f, -0.013582f, 0.012893f, -0.005712f, -0.044280f, -0.038956f, -0.006365f, 0.018322f, 0.029608f, 0.041591f, 0.041692f, -0.017567f, -0.014048f, 0.008263f, 0.015179f, 0.013682f, 0.005784f, -0.018404f, 0.016356f, 0.000397f, -0.003332f, 0.002192f, 0.010189f, 0.016971f, -0.004815f, 0.002954f, 0.016071f, -0.003589f, -0.000197f, -0.015983f, 0.008169f, -0.003388f, -0.000986f, 0.013403f, -0.002465f, -0.005797f, 0.006099f, -0.018164f, -0.006627f, 0.018761f, 0.005481f, 0.006191f, -0.006426f, -0.004180f, -0.002591f, + -0.014428f, -0.001759f, -0.007958f, 0.011249f, -0.031547f, -0.075343f, -0.007042f, -0.047964f, 0.002928f, -0.035321f, 0.032139f, -0.025222f, -0.002711f, 0.006348f, 0.011976f, 0.038795f, 0.012971f, -0.017533f, 0.041840f, 0.013070f, -0.071319f, 0.011796f, -0.042813f, -0.002986f, 0.008096f, -0.005913f, 0.035135f, -0.010369f, 0.006342f, 0.008972f, 0.003045f, -0.022793f, 0.035655f, -0.020608f, -0.002026f, -0.041701f, -0.000099f, 0.007158f, -0.006676f, -0.014622f, -0.019237f, -0.021750f, 0.054067f, 0.002244f, 0.027956f, -0.048142f, 0.005357f, -0.000530f, 0.016463f, 0.028855f, -0.033255f, 0.058971f, 0.084697f, -0.003799f, 0.008072f, -0.029531f, 0.013452f, 0.019810f, -0.016511f, 0.004298f, 0.015829f, 0.032981f, -0.001224f, 0.002007f, -0.010365f, -0.028564f, -0.043177f, 0.021977f, -0.032432f, -0.013568f, -0.021315f, 0.009399f, 0.028768f, 0.026036f, -0.005350f, 0.009813f, -0.058584f, 0.038622f, -0.007412f, 0.008446f, -0.017379f, 0.037733f, -0.052629f, 0.062537f, 0.045214f, 0.052108f, -0.021312f, -0.001210f, -0.051621f, -0.027807f, -0.019391f, 0.016902f, 0.013956f, -0.042482f, -0.031503f, 0.001202f, + -0.011181f, -0.030999f, -0.000480f, -0.021457f, -0.025877f, -0.009535f, -0.004237f, 0.001959f, -0.017274f, 0.003003f, 0.005229f, 0.025738f, 0.022580f, -0.003600f, 0.021246f, -0.010721f, -0.027634f, -0.015041f, -0.006336f, -0.013711f, -0.002630f, -0.010203f, 0.014795f, 0.004612f, 0.058699f, 0.007802f, -0.021018f, -0.007051f, 0.004689f, -0.031022f, -0.019991f, 0.007333f, 0.000572f, -0.008074f, 0.002402f, -0.000027f, -0.034548f, -0.003598f, 0.021904f, -0.016747f, 0.094617f, 0.027089f, 0.068797f, 0.022020f, -0.071817f, 0.028885f, 0.019891f, -0.023842f, 0.004808f, 0.046410f, 0.001977f, 0.044423f, 0.039215f, -0.046019f, 0.025280f, -0.046038f, -0.031238f, -0.004312f, 0.092585f, 0.028551f, -0.041944f, 0.039567f, 0.025332f, -0.050956f, -0.022630f, -0.003425f, 0.051760f, 0.007729f, -0.047584f, -0.026631f, -0.001608f, -0.012931f, 0.028675f, 0.041622f, -0.015154f, 0.036619f, -0.023673f, -0.031786f, -0.001232f, 0.075364f, 0.006871f, -0.043152f, 0.024459f, -0.001950f, -0.004437f, 0.021157f, -0.049206f, -0.042317f, -0.040402f, 0.029593f, -0.026509f, 0.009607f, 0.012416f, 0.045104f, 0.022127f, 0.046368f, + 0.004788f, -0.001902f, 0.037593f, 0.069380f, 0.041031f, -0.068423f, 0.001276f, 0.006769f, -0.011756f, 0.013331f, 0.018860f, -0.052808f, -0.008132f, 0.010600f, 0.009011f, -0.062914f, -0.059905f, -0.033375f, -0.036466f, 0.062716f, 0.022983f, 0.003037f, 0.027439f, -0.050928f, 0.020900f, 0.014282f, 0.009150f, -0.004371f, -0.011881f, 0.043391f, 0.025787f, -0.017146f, 0.007183f, -0.012888f, 0.028009f, -0.007979f, 0.001755f, 0.006097f, 0.003950f, 0.021214f, -0.003580f, -0.033997f, -0.001694f, 0.006593f, 0.008699f, 0.017770f, -0.005047f, 0.001768f, 0.012869f, -0.026294f, -0.016003f, -0.002255f, -0.048514f, -0.007181f, 0.013030f, -0.003350f, 0.004880f, 0.027811f, -0.004298f, -0.019009f, 0.003740f, 0.006923f, 0.017534f, 0.021631f, -0.021038f, -0.012490f, -0.001797f, -0.017282f, -0.011865f, -0.033349f, -0.040471f, 0.011372f, 0.000154f, -0.017760f, -0.015612f, -0.018124f, -0.036006f, 0.026964f, -0.071948f, 0.052069f, 0.058150f, 0.016122f, 0.063325f, -0.064900f, -0.031775f, -0.017554f, -0.093291f, 0.052566f, 0.005237f, 0.032547f, 0.042753f, 0.041851f, 0.003198f, -0.001297f, 0.042499f, -0.006713f, + -0.050542f, -0.052419f, 0.031706f, -0.059229f, 0.057784f, -0.016576f, 0.012636f, 0.057304f, 0.051621f, -0.025982f, 0.078627f, -0.045590f, 0.005049f, -0.047406f, 0.007619f, -0.016192f, 0.030923f, 0.010542f, -0.033697f, 0.030198f, 0.045824f, 0.067411f, -0.039023f, 0.014432f, 0.041316f, -0.056833f, 0.002561f, -0.022833f, -0.082270f, -0.035356f, 0.021881f, -0.045139f, 0.016014f, -0.037893f, -0.000985f, 0.055369f, -0.026344f, 0.023461f, 0.063709f, 0.045563f, 0.016991f, 0.084818f, -0.132187f, -0.024890f, 0.044024f, -0.005085f, 0.025619f, -0.040908f, -0.071481f, 0.086729f, -0.001337f, -0.043690f, 0.018624f, 0.054884f, 0.136095f, 0.051575f, -0.103098f, -0.056226f, 0.034992f, 0.038086f, 0.016414f, -0.071948f, -0.006380f, 0.015769f, -0.022345f, 0.048568f, 0.017266f, 0.030998f, 0.036794f, 0.027678f, -0.019014f, 0.021367f, -0.057281f, 0.008204f, 0.030400f, -0.003705f, -0.030470f, 0.017680f, -0.018668f, 0.030271f, 0.033344f, -0.014385f, -0.028077f, -0.007571f, 0.061675f, -0.011130f, -0.007452f, -0.024305f, 0.027763f, -0.024140f, -0.015065f, 0.017805f, -0.011787f, 0.058196f, -0.004702f, -0.014525f, + 0.058344f, -0.005336f, 0.013404f, 0.035795f, -0.003034f, -0.003173f, 0.003119f, 0.005222f, -0.027910f, 0.012417f, 0.001155f, -0.040108f, 0.026809f, -0.012527f, 0.051156f, -0.028087f, 0.016139f, 0.004807f, 0.069743f, -0.061314f, -0.005553f, -0.029308f, -0.036337f, 0.055889f, -0.021753f, 0.073383f, -0.007285f, -0.056630f, 0.088033f, 0.127252f, -0.018172f, -0.040660f, -0.061493f, 0.014597f, 0.067597f, 0.013277f, -0.014268f, -0.042201f, 0.009995f, 0.009932f, -0.009368f, 0.010395f, -0.006052f, -0.020764f, -0.021192f, 0.019445f, 0.027743f, -0.002183f, 0.037510f, -0.036268f, 0.076977f, 0.057982f, 0.033394f, -0.002866f, 0.004504f, 0.010906f, -0.040846f, -0.035748f, -0.039602f, -0.020845f, -0.010919f, 0.024604f, 0.021582f, 0.041723f, -0.020293f, -0.005069f, -0.018002f, 0.047470f, 0.092716f, -0.022008f, -0.059845f, -0.038540f, -0.002568f, -0.080938f, 0.062714f, -0.109907f, 0.031527f, 0.046437f, 0.047641f, -0.047968f, 0.010995f, 0.048354f, -0.111376f, -0.052679f, 0.022627f, -0.011882f, -0.055931f, -0.049307f, -0.006596f, -0.025897f, 0.082455f, 0.035341f, -0.030538f, -0.028003f, -0.046175f, 0.126546f, + 0.026952f, 0.066046f, -0.005043f, 0.019191f, 0.023641f, 0.028264f, -0.041761f, -0.005453f, 0.052273f, 0.036113f, 0.021342f, -0.017539f, -0.022953f, -0.000156f, 0.016007f, 0.024098f, 0.016042f, -0.032859f, 0.004222f, 0.000161f, 0.007998f, 0.023362f, 0.023123f, -0.034418f, 0.015416f, -0.021295f, -0.026425f, 0.002507f, 0.026186f, 0.010661f, -0.016743f, 0.003455f, -0.002976f, -0.005128f, -0.014476f, 0.050341f, -0.015725f, -0.000117f, -0.031071f, 0.006841f, -0.012046f, 0.033077f, 0.009897f, -0.007437f, -0.018771f, 0.018664f, 0.014756f, -0.023602f, 0.000582f, -0.038235f, -0.016009f, 0.008621f, 0.014475f, 0.021031f, -0.001413f, -0.047835f, 0.014407f, 0.073407f, 0.002429f, -0.025062f, 0.061623f, 0.043785f, -0.012549f, -0.039652f, -0.059598f, 0.011229f, 0.117767f, 0.025643f, 0.060477f, -0.005497f, 0.005459f, -0.004967f, -0.013628f, -0.000220f, 0.005592f, 0.028251f, 0.009607f, -0.023077f, 0.019767f, -0.020236f, -0.021794f, -0.025132f, 0.000821f, 0.023329f, 0.005321f, 0.018590f, 0.020446f, 0.016070f, -0.016328f, -0.029471f, 0.009460f, -0.020524f, -0.050342f, -0.015295f, 0.011684f, -0.017969f, + 0.059282f, -0.061305f, 0.049839f, -0.016095f, 0.000591f, 0.073049f, -0.011296f, -0.002397f, 0.096121f, -0.015129f, -0.038807f, 0.006636f, -0.033220f, -0.008017f, -0.031352f, 0.106378f, -0.029989f, 0.025316f, -0.025440f, -0.011970f, -0.014415f, 0.017267f, -0.026655f, -0.065966f, 0.029133f, -0.008012f, -0.072407f, 0.037499f, -0.018803f, 0.039917f, 0.091465f, -0.046243f, -0.000747f, -0.005227f, -0.013260f, -0.049731f, -0.008336f, 0.044494f, 0.018329f, 0.027083f, -0.041148f, 0.011724f, 0.007625f, -0.040588f, -0.010615f, 0.008339f, 0.020873f, 0.025101f, 0.002412f, 0.004322f, 0.017063f, -0.004599f, -0.019607f, 0.028361f, -0.011124f, -0.009385f, 0.026661f, 0.002951f, -0.006959f, 0.038643f, -0.002312f, -0.003608f, 0.000641f, 0.012183f, -0.011474f, 0.019176f, -0.014987f, -0.008316f, -0.011777f, 0.009658f, -0.000013f, -0.002106f, 0.006014f, 0.017559f, -0.021361f, 0.004029f, -0.002600f, 0.012402f, 0.004207f, -0.004861f, 0.022689f, -0.014321f, 0.012386f, -0.004547f, 0.006933f, 0.000856f, 0.017063f, -0.026040f, 0.000075f, 0.122449f, 0.062222f, 0.128469f, -0.071842f, -0.018665f, 0.042516f, -0.040183f, + 0.030808f, 0.132155f, 0.031463f, 0.019112f, -0.034730f, -0.032866f, 0.038025f, -0.020025f, 0.053708f, -0.008792f, -0.012055f, -0.015538f, -0.075785f, 0.018297f, 0.091547f, -0.048253f, 0.055442f, 0.048193f, -0.030725f, -0.009312f, 0.038218f, -0.060700f, 0.030497f, -0.004293f, 0.045996f, 0.015514f, -0.037770f, -0.012228f, -0.076191f, -0.039176f, 0.036021f, 0.026956f, 0.059572f, 0.092644f, 0.010090f, 0.001478f, -0.080021f, -0.049010f, -0.047707f, -0.039445f, 0.021198f, -0.032724f, -0.009174f, -0.007514f, 0.024211f, -0.061272f, -0.009712f, 0.031732f, 0.016558f, 0.050521f, -0.006588f, -0.024199f, 0.050428f, -0.009109f, 0.030974f, -0.038707f, -0.023193f, -0.005998f, -0.012762f, 0.024637f, 0.036726f, 0.051671f, 0.014758f, 0.004243f, -0.035543f, -0.010069f, -0.018173f, 0.043259f, 0.000622f, 0.064838f, 0.011415f, 0.048828f, -0.047390f, -0.017072f, -0.000208f, -0.001204f, 0.035501f, -0.005671f, -0.017474f, -0.009618f, 0.008801f, 0.002401f, 0.009305f, 0.016302f, 0.014728f, -0.009048f, -0.010489f, 0.000608f, -0.006171f, 0.013725f, 0.014816f, 0.003379f, -0.012254f, 0.000458f, -0.016097f, -0.006860f, + -0.003481f, 0.027794f, 0.010049f, -0.003733f, 0.007313f, -0.018760f, -0.021996f, -0.015017f, 0.007023f, 0.015194f, -0.013098f, -0.001415f, 0.000258f, 0.011292f, 0.006366f, -0.001871f, 0.012179f, 0.001776f, -0.000614f, -0.012144f, 0.005770f, 0.003378f, -0.004904f, -0.033676f, -0.125775f, 0.003264f, 0.202395f, 0.182518f, 0.171671f, 0.072738f, -0.072908f, -0.101083f, -0.100213f, -0.089628f, -0.164509f, -0.117495f, -0.114507f, 0.088534f, 0.136079f, 0.110969f, 0.177104f, 0.147292f, 0.031268f, -0.006901f, -0.063363f, -0.123523f, -0.073677f, -0.129795f, -0.070448f, -0.043498f, 0.000716f, -0.017417f, 0.032566f, 0.055603f, 0.094650f, 0.059450f, 0.099446f, 0.075591f, 0.079018f, 0.006043f, -0.065020f, -0.029735f, 0.002290f, -0.071175f, -0.093838f, -0.122178f, -0.119961f, -0.085237f, -0.011952f, 0.059433f, 0.023570f, 0.086524f, 0.061338f, 0.098698f, 0.088042f, 0.095697f, 0.111221f, 0.059680f, -0.008503f, -0.018106f, -0.072558f, -0.059570f, -0.195977f, -0.156969f, -0.125633f, -0.098390f, 0.011479f, -0.043050f, 0.002822f, 0.133710f, 0.165380f, 0.226025f, 0.143088f, 0.085816f, 0.058560f, 0.013473f, + -0.086628f, -0.079629f, -0.120785f, -0.156401f, -0.132265f, -0.123620f, -0.057880f, 0.008659f, 0.062567f, 0.102573f, 0.101557f, 0.086168f, 0.054527f, 0.057747f, 0.024937f, 0.015377f, -0.002765f, -0.048252f, -0.041784f, -0.038453f, -0.042518f, -0.022917f, -0.047524f, -0.034291f, 0.011804f, 0.003787f, -0.027615f, 0.014739f, 0.039216f, 0.021964f, 0.044741f, 0.069381f, 0.072531f, 0.031675f, -0.044778f, -0.019704f, -0.006237f, -0.091748f, -0.096392f, -0.084436f, -0.035055f, 0.025746f, 0.041339f, 0.034081f, 0.057954f, 0.065113f, 0.080847f, 0.053223f, 0.033103f, -0.012781f, -0.054115f, -0.055473f, -0.061298f, -0.083026f, -0.058590f, -0.032987f, 0.028284f, 0.044369f, 0.029110f, 0.017155f, 0.052428f, 0.034855f, 0.021570f, 0.004436f, -0.007719f, -0.017292f, 0.001808f, -0.020681f, -0.023797f, -0.009424f, 0.008156f, -0.014592f, -0.010328f, 0.001518f, 0.010905f, 0.000599f, -0.005209f, -0.008015f, 0.008244f, -0.000863f, -0.003639f, -0.008184f, 0.003551f, 0.002458f, 0.005033f, -0.002333f, 0.003005f}, + {0.002045f, -0.002350f, 0.008276f, 0.009304f, 0.004997f, -0.003601f, -0.014059f, -0.012897f, 0.004673f, 0.007399f, -0.002735f, 0.013819f, -0.002680f, 0.008243f, -0.009823f, -0.008665f, 0.003773f, 0.000338f, -0.002554f, 0.003649f, 0.008958f, -0.003907f, 0.001238f, -0.005129f, -0.000518f, 0.000471f, 0.003667f, 0.003413f, 0.004597f, 0.000757f, 0.002734f, 0.010232f, -0.003958f, -0.004797f, -0.005179f, -0.009282f, 0.002661f, -0.001957f, 0.016958f, 0.003292f, -0.001285f, 0.001329f, 0.010285f, -0.000957f, -0.002252f, -0.002631f, -0.006046f, -0.001113f, 0.007906f, -0.001223f, 0.003274f, 0.007998f, -0.002521f, -0.000582f, -0.012883f, -0.007573f, -0.011749f, -0.002303f, -0.003420f, 0.001728f, 0.000630f, 0.001686f, 0.004177f, -0.002821f, 0.002013f, 0.000125f, 0.001026f, 0.001783f, -0.004296f, 0.004046f, -0.001399f, -0.004887f, -0.000632f, -0.004928f, -0.001512f, 0.000454f, -0.007683f, 0.002026f, 0.000334f, 0.005906f, 0.000608f, -0.000109f, -0.003538f, 0.000785f, 0.005880f, 0.002875f, -0.001483f, 0.000650f, 0.001296f, 0.001427f, 0.004481f, 0.000531f, 0.000265f, -0.001093f, -0.000692f, 0.000445f, + 0.000162f, -0.000468f, 0.002952f, 0.001612f, 0.001747f, 0.001248f, 0.000909f, 0.000375f, 0.000879f, 0.009535f, 0.022561f, 0.008881f, 0.005355f, 0.006244f, -0.013223f, -0.001576f, 0.005737f, -0.001813f, 0.002257f, -0.012103f, 0.011901f, 0.016074f, 0.002797f, 0.007170f, -0.003368f, -0.009447f, -0.014585f, -0.016011f, -0.010612f, 0.012657f, -0.011945f, -0.007623f, -0.010106f, 0.003228f, 0.008442f, 0.001571f, 0.001161f, 0.004689f, -0.000457f, 0.002955f, 0.010398f, -0.001477f, 0.008648f, -0.008238f, 0.007892f, 0.005459f, 0.005025f, -0.004349f, -0.013404f, -0.002876f, 0.007704f, 0.004532f, -0.003733f, -0.000468f, 0.002677f, -0.000587f, -0.006459f, -0.001377f, 0.005510f, -0.001904f, 0.000626f, -0.003219f, -0.000692f, 0.000380f, 0.001852f, 0.009461f, 0.003981f, -0.004877f, 0.000836f, 0.000766f, -0.003203f, 0.001710f, -0.004673f, -0.000568f, 0.007706f, 0.002484f, 0.008644f, -0.006182f, -0.005275f, -0.003183f, -0.001349f, 0.004373f, 0.009796f, -0.005661f, -0.007062f, 0.008401f, -0.000777f, -0.000181f, 0.000306f, 0.002887f, 0.002096f, 0.007058f, -0.001978f, 0.003280f, -0.004301f, -0.004060f, + 0.000332f, 0.001894f, -0.000284f, 0.000126f, 0.001639f, 0.001752f, 0.001368f, -0.003662f, 0.004112f, -0.000859f, 0.006606f, 0.002811f, -0.007418f, -0.006988f, -0.007949f, -0.001237f, -0.006489f, -0.013655f, -0.013017f, 0.013446f, -0.000295f, 0.002840f, -0.000101f, 0.008195f, -0.012107f, 0.018000f, 0.015975f, 0.000839f, 0.000852f, 0.000036f, 0.000475f, -0.001765f, 0.006256f, 0.004879f, 0.000396f, -0.010227f, 0.004438f, -0.003165f, 0.004924f, -0.001416f, 0.010910f, -0.002530f, -0.006349f, -0.002866f, -0.001712f, 0.004054f, -0.000068f, 0.006758f, -0.010832f, 0.005852f, 0.001889f, -0.006001f, 0.017047f, -0.002696f, -0.002441f, -0.000347f, -0.000266f, -0.004483f, -0.001451f, 0.009110f, 0.007448f, -0.015965f, -0.007537f, 0.008134f, 0.002339f, -0.003810f, 0.013901f, 0.000520f, 0.003116f, 0.013699f, 0.005652f, 0.010757f, 0.003036f, -0.004115f, -0.005581f, -0.010740f, -0.010418f, 0.001526f, 0.005545f, 0.013332f, 0.000508f, -0.005419f, -0.006796f, 0.002330f, -0.000125f, -0.003708f, 0.004323f, -0.001489f, -0.003418f, 0.003130f, 0.007219f, 0.002353f, -0.003620f, 0.003632f, 0.003760f, 0.004728f, + 0.003025f, 0.000252f, 0.000450f, -0.004459f, -0.000940f, -0.000048f, 0.002292f, 0.001946f, 0.003677f, 0.003570f, 0.002954f, 0.001136f, -0.000290f, -0.018225f, -0.006365f, -0.008862f, 0.008272f, -0.006050f, 0.005370f, -0.006543f, -0.002719f, 0.015472f, 0.007549f, -0.010256f, 0.004673f, 0.014757f, 0.002152f, -0.005163f, -0.010367f, -0.012435f, -0.008540f, -0.012504f, 0.008297f, 0.001896f, 0.004561f, -0.002395f, -0.005672f, -0.005968f, -0.011031f, 0.000579f, -0.000351f, 0.002624f, -0.002697f, -0.010018f, 0.000154f, 0.010711f, -0.002382f, 0.000128f, -0.005344f, -0.010672f, -0.015806f, -0.001356f, 0.011376f, 0.004141f, 0.001190f, -0.005354f, 0.001449f, -0.008569f, -0.002816f, -0.006447f, 0.000813f, 0.001459f, -0.009769f, 0.011021f, -0.006212f, 0.014023f, 0.005296f, 0.001334f, -0.006378f, -0.003343f, 0.003596f, -0.000802f, 0.003402f, 0.007528f, 0.001523f, 0.002987f, -0.008338f, 0.004920f, -0.004195f, 0.012890f, 0.015957f, 0.007324f, 0.010722f, 0.004995f, -0.001643f, -0.011197f, -0.007237f, 0.000924f, 0.008247f, 0.008318f, -0.006660f, 0.000874f, 0.007837f, -0.010255f, 0.010123f, 0.000650f, + -0.005201f, 0.003339f, -0.002186f, -0.000491f, -0.005784f, 0.001135f, 0.001634f, 0.000998f, -0.004641f, 0.001229f, -0.003281f, -0.004351f, -0.001524f, 0.000309f, 0.001917f, -0.002839f, 0.000698f, -0.001231f, -0.004037f, 0.000432f, 0.003321f, 0.001394f, -0.002891f, 0.001869f, -0.002176f, 0.006102f, -0.014716f, 0.001933f, -0.015736f, -0.000070f, 0.002419f, 0.001464f, 0.007108f, 0.000712f, 0.001136f, 0.027845f, -0.003482f, -0.012299f, -0.013253f, 0.013987f, 0.009383f, -0.010552f, 0.002564f, -0.011768f, -0.005030f, 0.000395f, 0.013334f, -0.016512f, 0.004830f, -0.000643f, 0.002649f, -0.001257f, 0.016927f, -0.008742f, 0.004787f, -0.002642f, -0.004457f, 0.002575f, -0.000792f, 0.005075f, -0.005154f, -0.004799f, -0.014287f, 0.002250f, -0.004729f, -0.003073f, 0.001157f, -0.005059f, 0.004245f, -0.008064f, -0.004778f, -0.014193f, -0.000402f, -0.012600f, -0.005295f, -0.014987f, 0.011172f, 0.002276f, -0.004570f, 0.009811f, -0.011334f, -0.000042f, -0.021624f, -0.001149f, 0.007522f, -0.000573f, 0.006455f, 0.013800f, -0.004800f, -0.001920f, 0.017283f, 0.007299f, 0.006699f, 0.010553f, -0.005407f, -0.015913f, + -0.001646f, -0.009516f, 0.007012f, 0.015907f, -0.002810f, 0.004689f, 0.008502f, 0.007145f, -0.000792f, -0.001300f, 0.002022f, 0.000342f, -0.002879f, 0.004318f, 0.003893f, -0.006570f, 0.002262f, 0.005630f, -0.002742f, -0.001967f, -0.009756f, -0.002228f, -0.004064f, -0.001304f, -0.004218f, 0.000922f, -0.000967f, 0.000830f, -0.000367f, 0.000733f, 0.002613f, -0.002826f, 0.001106f, -0.001118f, -0.002869f, -0.000324f, -0.000417f, -0.000819f, 0.000307f, 0.001763f, 0.002876f, -0.002660f, 0.001055f, -0.002236f, 0.000506f, -0.000181f, -0.002987f, -0.001132f, -0.002005f, 0.007866f, 0.008896f, 0.003217f, -0.005355f, 0.003849f, 0.002338f, 0.016937f, -0.002565f, -0.003643f, -0.022835f, -0.006462f, 0.017199f, 0.016772f, 0.010810f, 0.008498f, 0.024476f, 0.001504f, -0.029188f, -0.007497f, -0.004847f, -0.007084f, 0.015592f, -0.002479f, -0.005644f, 0.018144f, 0.002858f, -0.007496f, -0.002578f, 0.007237f, -0.006424f, -0.002557f, 0.002236f, -0.002332f, -0.010155f, -0.004626f, -0.000459f, -0.009845f, -0.004486f, -0.004141f, 0.006884f, -0.004628f, 0.013243f, 0.012844f, 0.001269f, 0.012217f, 0.008599f, -0.005535f, + -0.001861f, -0.004204f, -0.018963f, 0.002124f, 0.003941f, -0.018070f, -0.002572f, -0.005130f, 0.006490f, 0.016491f, 0.002536f, -0.016744f, 0.002483f, -0.006461f, -0.011253f, 0.009123f, -0.002613f, -0.011995f, 0.005464f, 0.004607f, 0.013278f, -0.001065f, -0.001610f, 0.009754f, 0.011575f, 0.012688f, -0.012999f, 0.009197f, -0.001627f, -0.002219f, 0.003466f, 0.013698f, -0.000571f, -0.003664f, 0.004381f, 0.002083f, -0.011574f, -0.001538f, 0.016009f, 0.003516f, -0.000971f, -0.002007f, -0.007148f, 0.005137f, -0.002586f, -0.003280f, 0.000606f, -0.000478f, 0.003760f, -0.000247f, -0.004883f, -0.003557f, 0.006723f, -0.000829f, 0.002702f, -0.003004f, 0.003298f, -0.002481f, -0.001766f, -0.002454f, 0.001764f, 0.003544f, 0.011660f, -0.029881f, 0.012434f, -0.003256f, -0.006816f, -0.006133f, 0.005128f, -0.002831f, -0.017719f, -0.018868f, 0.002308f, 0.029450f, 0.008118f, -0.021411f, 0.004838f, 0.017479f, -0.012563f, 0.002277f, -0.003169f, 0.010427f, -0.000062f, 0.009623f, 0.025761f, 0.018766f, 0.011716f, -0.000427f, -0.002122f, -0.011894f, -0.012747f, 0.005088f, -0.033359f, -0.005265f, 0.015826f, 0.001782f, + -0.001678f, -0.015969f, -0.005689f, -0.000669f, -0.000715f, -0.007754f, -0.016514f, 0.018528f, -0.006390f, -0.004048f, -0.002976f, -0.015297f, -0.017208f, -0.000529f, -0.008393f, 0.001207f, 0.008206f, 0.006287f, 0.006946f, -0.013654f, -0.003541f, -0.006703f, -0.004263f, 0.021991f, -0.002311f, -0.010025f, 0.000714f, 0.028198f, -0.015031f, 0.004748f, 0.020756f, 0.000657f, -0.004758f, -0.010449f, 0.006321f, 0.001208f, 0.014950f, -0.008028f, 0.012651f, 0.010273f, 0.019581f, 0.009484f, 0.014667f, 0.001564f, -0.009594f, 0.002074f, -0.000390f, -0.005528f, 0.008865f, 0.012626f, -0.010460f, 0.006896f, 0.003780f, -0.009399f, 0.001240f, 0.003353f, 0.002643f, 0.003431f, -0.005372f, 0.003063f, -0.005889f, -0.001767f, -0.001627f, 0.000424f, 0.001106f, 0.002546f, 0.003227f, -0.000656f, 0.004833f, -0.000349f, -0.002153f, 0.001684f, 0.003217f, -0.001080f, 0.001953f, -0.005025f, 0.002002f, 0.017178f, 0.024659f, 0.015060f, 0.002516f, -0.005296f, -0.009227f, -0.020487f, -0.005927f, 0.013503f, -0.027857f, -0.011441f, 0.025381f, -0.035178f, -0.006362f, 0.019645f, 0.024690f, -0.002554f, -0.024793f, 0.003416f, + -0.009487f, 0.033141f, 0.014702f, -0.022801f, -0.014666f, -0.003527f, -0.014060f, -0.028690f, -0.014349f, -0.012744f, -0.010383f, -0.023239f, 0.011672f, 0.004097f, 0.014330f, -0.008863f, -0.004295f, -0.020446f, -0.002102f, -0.017744f, 0.001836f, -0.011804f, 0.002598f, 0.006172f, -0.027371f, -0.009009f, -0.010428f, -0.007286f, 0.005884f, 0.005818f, -0.008748f, 0.026948f, -0.001762f, -0.007076f, -0.005074f, 0.002582f, -0.006346f, -0.002250f, 0.010021f, 0.008528f, 0.011220f, 0.014779f, 0.014030f, 0.001091f, 0.009196f, -0.004514f, 0.021026f, 0.022488f, -0.011336f, -0.005908f, 0.013798f, -0.000416f, -0.034154f, 0.001551f, -0.017353f, 0.010565f, 0.010781f, 0.019287f, -0.014663f, 0.008200f, -0.020569f, -0.002016f, 0.011730f, -0.005036f, 0.018331f, -0.004797f, -0.002250f, 0.003668f, 0.001189f, 0.002559f, -0.001229f, 0.001065f, 0.007788f, -0.005797f, -0.001491f, 0.007487f, -0.001167f, 0.005877f, -0.008790f, -0.007642f, 0.005154f, -0.001238f, 0.001609f, 0.000807f, -0.001057f, 0.001343f, -0.005261f, -0.001381f, -0.000921f, -0.002292f, -0.003558f, -0.001241f, 0.002781f, 0.003343f, -0.000172f, -0.018926f, + -0.022901f, -0.011217f, -0.022125f, -0.031572f, 0.022337f, 0.002209f, 0.012499f, -0.017449f, -0.018156f, -0.025039f, -0.016939f, 0.007729f, -0.018571f, -0.016676f, 0.022713f, -0.005688f, 0.001068f, 0.005492f, 0.012975f, -0.010090f, -0.007654f, 0.003746f, -0.006130f, 0.003549f, -0.001157f, -0.011214f, -0.021465f, -0.033598f, 0.011097f, -0.024133f, -0.022134f, 0.001163f, -0.005839f, -0.001552f, -0.012463f, 0.005631f, 0.006395f, -0.027388f, -0.000608f, -0.006015f, -0.010731f, -0.015228f, 0.008647f, 0.001851f, 0.027359f, 0.003264f, -0.015372f, -0.000956f, 0.002529f, 0.011289f, 0.004712f, 0.024271f, -0.002100f, -0.026412f, 0.011289f, -0.005605f, 0.011914f, -0.015793f, 0.003428f, 0.008962f, -0.046717f, -0.022183f, 0.016493f, -0.001435f, -0.005030f, 0.007173f, -0.002394f, 0.029492f, -0.001056f, 0.018678f, 0.016213f, -0.023906f, -0.027762f, 0.001615f, -0.030754f, -0.000707f, -0.001536f, 0.000622f, 0.004450f, 0.019264f, -0.000693f, -0.012098f, 0.011026f, 0.014496f, -0.013549f, 0.002375f, 0.004340f, 0.014582f, -0.007146f, 0.000512f, -0.007246f, 0.004932f, -0.000419f, 0.003088f, 0.004830f, 0.007857f, + 0.007933f, -0.000241f, -0.007660f, 0.000342f, 0.005635f, 0.001775f, 0.001167f, -0.006981f, 0.000741f, -0.006992f, -0.001044f, 0.003785f, -0.001142f, 0.006870f, 0.005083f, -0.000294f, 0.001435f, 0.005563f, -0.005182f, 0.009811f, -0.000221f, -0.004301f, 0.004388f, 0.015944f, 0.065488f, -0.016197f, -0.043927f, -0.004010f, -0.019193f, 0.047496f, 0.003712f, 0.026566f, 0.014436f, -0.008379f, -0.021015f, -0.009527f, -0.022900f, -0.005986f, 0.032065f, -0.035773f, 0.001548f, -0.029200f, 0.007939f, 0.002338f, 0.014256f, 0.003207f, -0.013930f, -0.023679f, -0.027469f, -0.005185f, -0.026947f, -0.021206f, 0.003492f, 0.006207f, 0.020099f, -0.018841f, -0.039089f, -0.008271f, -0.013551f, 0.004623f, -0.018360f, -0.012497f, 0.005675f, -0.009861f, -0.015531f, -0.001129f, 0.001734f, -0.008026f, 0.038161f, -0.007882f, -0.006223f, 0.009568f, 0.009996f, -0.011374f, -0.004773f, 0.028152f, 0.023696f, 0.015476f, 0.029789f, 0.023250f, 0.000083f, 0.009712f, 0.016939f, -0.012613f, -0.011780f, 0.003434f, 0.012217f, 0.019756f, 0.008152f, 0.040129f, 0.004442f, 0.026903f, -0.007596f, -0.015571f, -0.009983f, 0.056971f, + 0.010164f, -0.007410f, -0.006836f, -0.020474f, -0.019546f, -0.014114f, -0.013695f, -0.016389f, 0.006582f, 0.013131f, -0.013920f, 0.004487f, 0.014204f, 0.007040f, -0.012850f, 0.002615f, 0.014488f, -0.003616f, 0.008034f, -0.007214f, -0.001992f, 0.003237f, -0.002416f, -0.001619f, -0.004303f, -0.009214f, -0.001407f, -0.008345f, 0.004454f, 0.006991f, 0.003595f, -0.006957f, 0.009276f, 0.006008f, -0.005089f, -0.006078f, -0.009409f, -0.002804f, -0.002578f, 0.002490f, -0.002033f, 0.004403f, 0.003302f, 0.000827f, -0.000891f, 0.000166f, -0.007500f, 0.003149f, 0.012689f, -0.057639f, -0.020990f, 0.028460f, -0.006554f, -0.029576f, -0.027181f, -0.009537f, 0.031436f, 0.016322f, -0.024748f, 0.013610f, -0.033033f, -0.013934f, -0.003733f, -0.022142f, -0.029648f, 0.024905f, 0.014089f, -0.026901f, -0.009135f, 0.057232f, 0.013602f, -0.025629f, -0.034736f, 0.000492f, 0.019082f, 0.003104f, 0.003470f, -0.040163f, -0.000952f, -0.004603f, -0.028566f, -0.016845f, -0.011398f, -0.023103f, -0.010710f, 0.006651f, 0.001100f, -0.024376f, -0.024141f, 0.003087f, 0.015488f, -0.000418f, 0.020688f, 0.034315f, -0.023953f, 0.021264f, + 0.016225f, 0.006760f, 0.004806f, 0.025872f, 0.008237f, 0.015954f, 0.010836f, 0.014380f, -0.004684f, -0.003113f, 0.029689f, 0.046186f, 0.007798f, -0.010741f, 0.005809f, -0.006639f, -0.017351f, 0.029397f, -0.014226f, -0.024770f, -0.039035f, -0.013459f, -0.045510f, 0.022831f, -0.018484f, -0.007871f, -0.002532f, -0.006558f, -0.016282f, -0.002724f, 0.018299f, -0.020770f, -0.001712f, 0.009607f, -0.005851f, -0.020251f, 0.010296f, 0.001679f, 0.005780f, -0.001326f, -0.002287f, -0.007227f, -0.000678f, -0.003734f, 0.010981f, 0.002886f, 0.003123f, 0.001794f, 0.003670f, 0.000178f, 0.005653f, 0.003782f, 0.009750f, -0.013447f, -0.001462f, 0.001149f, 0.009058f, -0.003655f, 0.007570f, -0.008089f, 0.002933f, 0.002025f, -0.001635f, -0.004457f, 0.007940f, -0.003513f, -0.000490f, 0.004548f, 0.001522f, 0.000487f, -0.010813f, -0.025267f, 0.021472f, 0.012905f, -0.003829f, 0.014379f, 0.010644f, 0.030590f, 0.023541f, -0.049652f, -0.016507f, 0.055269f, -0.043549f, -0.012828f, -0.026390f, 0.039396f, 0.017510f, 0.018176f, 0.007624f, 0.005809f, 0.015741f, 0.041793f, 0.019858f, -0.018345f, -0.000377f, 0.001426f, + -0.001182f, 0.016572f, 0.018568f, 0.002304f, 0.010984f, 0.010556f, -0.009591f, 0.012981f, 0.007762f, 0.025844f, -0.012396f, -0.024765f, -0.021316f, -0.016556f, 0.004909f, -0.002115f, 0.009846f, 0.011233f, 0.011243f, 0.022766f, -0.009966f, 0.004841f, -0.010045f, -0.017670f, -0.007178f, 0.001929f, -0.020423f, 0.026136f, 0.031571f, -0.034266f, 0.011692f, -0.023724f, 0.019410f, -0.003841f, 0.007544f, -0.002563f, -0.018997f, -0.004586f, 0.021845f, -0.017051f, -0.005262f, 0.003906f, -0.035034f, -0.013354f, 0.007337f, -0.027064f, -0.001885f, 0.043387f, 0.021558f, -0.002893f, -0.009927f, 0.034624f, 0.009083f, 0.024941f, -0.007839f, -0.011156f, 0.036118f, -0.012240f, 0.011272f, 0.004828f, 0.005128f, -0.007423f, -0.005452f, -0.006635f, -0.004605f, -0.012144f, -0.007512f, -0.008460f, 0.001212f, 0.007828f, -0.002883f, -0.017063f, -0.005491f, -0.002347f, 0.001924f, -0.000516f, -0.004257f, 0.000080f, 0.004812f, 0.008342f, -0.006661f, -0.000199f, -0.018418f, 0.003120f, -0.002302f, -0.003477f, 0.012416f, -0.000218f, -0.001204f, -0.007330f, 0.007592f, 0.002087f, 0.011245f, -0.003844f, -0.000665f, -0.007546f, + -0.000833f, 0.034499f, -0.002807f, -0.008057f, -0.028675f, 0.001216f, 0.002734f, -0.007737f, -0.000607f, -0.013339f, 0.005045f, -0.041238f, 0.037617f, -0.007638f, -0.013303f, -0.026117f, -0.029439f, -0.003083f, 0.035887f, -0.006548f, 0.009952f, -0.022215f, -0.012800f, -0.006232f, -0.021576f, -0.026096f, 0.023825f, -0.014762f, -0.011982f, 0.021068f, 0.020539f, -0.029078f, 0.010126f, 0.010935f, 0.025151f, 0.020722f, -0.007578f, -0.018421f, -0.011585f, -0.028277f, 0.031070f, 0.020387f, 0.010319f, 0.022111f, -0.022938f, 0.015665f, -0.003325f, 0.014356f, 0.015965f, -0.015072f, -0.001182f, 0.050512f, 0.042383f, -0.032086f, 0.012835f, 0.026202f, -0.020169f, 0.006203f, -0.047247f, 0.014110f, -0.025563f, 0.021087f, -0.014830f, -0.016382f, -0.011548f, 0.056360f, 0.003226f, -0.016478f, 0.005004f, 0.018926f, 0.002495f, 0.011241f, -0.030394f, -0.003503f, 0.050659f, -0.001706f, -0.019895f, -0.031024f, 0.000958f, -0.022975f, 0.014318f, 0.014571f, 0.017707f, -0.031686f, -0.033050f, -0.008863f, 0.005564f, 0.010830f, 0.003451f, 0.000132f, 0.000811f, 0.012008f, -0.008109f, -0.003292f, -0.002511f, -0.005367f, + 0.005937f, 0.004992f, -0.010109f, -0.007002f, -0.015529f, 0.009457f, -0.005696f, 0.004110f, 0.006801f, 0.009957f, 0.007949f, 0.003392f, 0.015601f, 0.000951f, -0.003636f, 0.007431f, -0.011593f, 0.006435f, 0.004490f, 0.003133f, 0.010326f, 0.011024f, 0.002049f, -0.001575f, 0.006525f, 0.000703f, -0.001002f, -0.012247f, -0.015998f, -0.003070f, -0.001235f, -0.002026f, -0.031186f, -0.001618f, -0.003710f, 0.009090f, -0.045282f, -0.020974f, -0.025369f, 0.021396f, -0.010744f, 0.031838f, 0.019418f, 0.040537f, -0.020073f, -0.001702f, -0.031770f, 0.027017f, 0.049297f, -0.015361f, -0.039015f, 0.003807f, -0.007903f, 0.060380f, -0.014788f, -0.023720f, 0.023120f, 0.012670f, 0.009738f, 0.022729f, 0.007846f, -0.075941f, 0.000383f, -0.005117f, 0.029758f, 0.053308f, -0.050265f, 0.001975f, 0.015226f, -0.024184f, -0.004781f, -0.068860f, -0.015467f, 0.035089f, -0.056535f, -0.033922f, -0.017269f, -0.022186f, 0.022709f, -0.013742f, -0.020065f, 0.030323f, 0.009347f, 0.011048f, 0.031401f, 0.003428f, -0.010642f, 0.022239f, 0.032944f, -0.031943f, -0.023668f, 0.048819f, 0.033706f, 0.011320f, 0.015640f, 0.011527f, + -0.021855f, -0.031748f, 0.000087f, 0.000409f, -0.006400f, 0.009987f, -0.019084f, 0.013627f, -0.026479f, 0.010783f, 0.062231f, -0.028917f, -0.023755f, 0.034147f, 0.009973f, -0.011640f, 0.021741f, 0.030012f, 0.022445f, 0.026522f, 0.013277f, -0.013492f, 0.011077f, -0.032748f, 0.017637f, 0.007414f, 0.009387f, -0.016619f, -0.004827f, 0.003473f, -0.001411f, -0.003322f, -0.004850f, 0.010746f, 0.021173f, -0.008222f, -0.020182f, 0.012888f, 0.024467f, 0.012704f, 0.009708f, -0.028807f, 0.017586f, 0.001872f, 0.009580f, -0.004620f, -0.009721f, -0.002302f, 0.014849f, 0.001340f, -0.002575f, -0.012430f, -0.000879f, -0.007248f, -0.003437f, -0.005745f, 0.006688f, 0.013897f, -0.008217f, 0.000550f, 0.008916f, -0.003435f, -0.001383f, -0.007593f, 0.001530f, -0.005088f, -0.005524f, 0.018013f, 0.016267f, 0.026528f, -0.061446f, -0.113488f, -0.052308f, -0.007956f, 0.038627f, 0.002735f, 0.042596f, 0.039349f, -0.011902f, 0.006378f, -0.009640f, -0.021584f, -0.035486f, -0.020652f, -0.025616f, -0.014899f, 0.040466f, -0.052598f, -0.009145f, -0.043838f, -0.054372f, -0.009522f, -0.054874f, -0.044151f, 0.005406f, -0.011551f, + -0.006333f, 0.009985f, 0.048156f, 0.003362f, -0.034947f, 0.001992f, -0.004192f, -0.010515f, -0.045381f, -0.002975f, 0.054094f, 0.005004f, -0.000923f, 0.021917f, 0.042024f, 0.028289f, 0.007350f, -0.017114f, 0.014653f, -0.014376f, -0.038519f, -0.070637f, 0.067194f, -0.008506f, 0.055975f, -0.004713f, 0.000745f, -0.020115f, -0.032344f, 0.059007f, -0.033529f, -0.027244f, -0.002833f, -0.042994f, -0.040394f, 0.033586f, 0.024632f, 0.012928f, -0.004287f, 0.017110f, -0.029828f, 0.011607f, -0.024206f, -0.034170f, -0.037295f, -0.029085f, -0.011992f, 0.028899f, 0.001840f, 0.010387f, -0.017253f, 0.010234f, -0.022574f, 0.016453f, 0.012779f, 0.011723f, -0.007351f, -0.000927f, 0.014561f, -0.003946f, -0.017608f, -0.013270f, -0.017429f, -0.001489f, -0.012862f, -0.002959f, -0.004514f, -0.004666f, 0.005155f, 0.002137f, -0.006912f, 0.003016f, 0.009170f, -0.002380f, -0.005808f, -0.013625f, -0.000089f, -0.009348f, -0.001267f, -0.001481f, -0.006467f, 0.015996f, -0.014953f, -0.013984f, -0.006600f, 0.008523f, -0.013233f, -0.013295f, 0.001939f, -0.011101f, -0.000051f, -0.001922f, 0.006278f, -0.001384f, 0.002133f, -0.008934f, + 0.003674f, -0.018594f, -0.009381f, -0.002734f, -0.039422f, -0.028863f, -0.043747f, -0.000451f, -0.041845f, -0.048590f, -0.008221f, -0.022198f, -0.053369f, -0.073892f, 0.008372f, -0.027959f, 0.013627f, -0.005324f, 0.027708f, 0.062257f, 0.003145f, 0.006452f, -0.031589f, -0.033793f, 0.028141f, 0.015738f, -0.022879f, 0.000138f, 0.018353f, -0.042091f, -0.032398f, -0.002249f, 0.053422f, -0.045910f, 0.000597f, 0.001136f, 0.024585f, -0.039203f, 0.040884f, 0.021519f, 0.011574f, -0.001022f, -0.017053f, -0.045495f, -0.000481f, -0.010846f, 0.016453f, -0.024661f, -0.060453f, 0.049859f, -0.036432f, -0.016173f, -0.002557f, 0.048797f, -0.037082f, 0.017164f, -0.030462f, 0.018938f, -0.011045f, -0.044744f, 0.021425f, -0.057028f, -0.012618f, -0.016310f, 0.019937f, 0.046892f, -0.027095f, 0.017418f, 0.047421f, -0.037889f, 0.006260f, 0.011552f, 0.011137f, 0.014114f, -0.069203f, -0.020618f, -0.011720f, 0.025015f, 0.005231f, -0.000002f, 0.012637f, -0.012053f, 0.027616f, -0.004920f, 0.006288f, -0.026489f, 0.023049f, 0.006045f, -0.042655f, -0.019331f, 0.020088f, 0.025276f, -0.003559f, -0.006252f, -0.016684f, 0.023702f, + 0.002974f, 0.000544f, -0.044365f, 0.007404f, -0.021341f, -0.033421f, -0.010158f, -0.006592f, -0.004322f, -0.019582f, -0.025448f, 0.009337f, -0.005854f, -0.012331f, 0.007333f, -0.002361f, -0.003637f, 0.001692f, -0.006804f, 0.002636f, 0.013746f, -0.025657f, 0.002627f, 0.005094f, -0.008507f, 0.018880f, 0.017390f, 0.019998f, 0.007963f, 0.012167f, -0.012432f, 0.005423f, 0.000673f, 0.005918f, -0.005634f, 0.000507f, -0.000347f, 0.008524f, -0.004997f, -0.011309f, 0.081530f, 0.007891f, 0.034660f, 0.092682f, -0.043137f, -0.024820f, -0.036090f, -0.013971f, 0.043237f, 0.002440f, 0.053167f, 0.013821f, -0.001578f, -0.020096f, 0.040249f, -0.025260f, 0.009400f, -0.017006f, 0.016796f, -0.026738f, 0.030734f, -0.015193f, -0.006803f, -0.017765f, 0.023693f, 0.015655f, -0.025475f, -0.006510f, 0.024925f, 0.007066f, -0.016258f, 0.001272f, -0.020994f, -0.070286f, 0.030589f, -0.037108f, -0.053500f, 0.032855f, 0.014982f, 0.035564f, -0.003130f, -0.035382f, -0.012855f, -0.009749f, 0.021105f, 0.027519f, 0.031239f, 0.051369f, 0.051266f, -0.023022f, 0.007257f, -0.054404f, 0.000760f, -0.039714f, -0.070091f, -0.007288f, + -0.057111f, 0.018224f, -0.045574f, -0.030502f, -0.030122f, -0.043295f, 0.004438f, -0.010542f, 0.003796f, -0.013140f, -0.005246f, -0.004106f, -0.074167f, 0.011520f, 0.011464f, 0.016610f, 0.035847f, -0.007088f, -0.058947f, 0.033889f, -0.038127f, 0.021788f, 0.021964f, 0.047946f, -0.026063f, -0.024326f, -0.015739f, -0.009684f, -0.034182f, 0.013469f, 0.008059f, 0.004068f, -0.008088f, 0.011886f, -0.017005f, 0.017149f, -0.002731f, 0.003377f, 0.005284f, -0.021421f, 0.000016f, 0.008094f, 0.021114f, -0.005713f, -0.012512f, 0.009027f, 0.014661f, 0.017818f, -0.011123f, -0.000030f, 0.010191f, -0.001368f, -0.001822f, -0.006817f, -0.013234f, 0.009300f, -0.000138f, 0.005904f, -0.007344f, -0.001147f, 0.012380f, -0.008233f, -0.012445f, -0.007305f, 0.002088f, -0.005440f, -0.021955f, 0.035418f, -0.008912f, -0.007388f, 0.003184f, 0.006728f, -0.005834f, 0.006465f, 0.008616f, -0.003542f, -0.000877f, -0.004875f, -0.007134f, 0.058026f, 0.108572f, -0.059602f, -0.048141f, -0.084143f, -0.171045f, -0.042360f, -0.017922f, 0.038180f, 0.023105f, -0.014853f, -0.033012f, 0.046679f, 0.057113f, 0.004889f, -0.002765f, 0.000264f, + -0.045129f, -0.026671f, -0.032008f, -0.024640f, -0.047736f, -0.000711f, -0.012062f, -0.005829f, 0.032745f, -0.044892f, 0.035923f, 0.033640f, -0.010521f, 0.017289f, -0.001973f, -0.079832f, -0.056837f, -0.031782f, -0.029056f, -0.013446f, 0.006298f, 0.030683f, 0.009965f, 0.016464f, 0.077025f, 0.069976f, 0.015861f, -0.052108f, -0.027074f, -0.002335f, -0.026757f, -0.049416f, -0.123169f, -0.103574f, -0.046560f, -0.011165f, 0.005084f, 0.026896f, -0.085441f, -0.049301f, 0.044313f, 0.051349f, 0.061734f, -0.056324f, -0.068296f, 0.022195f, -0.041659f, 0.101300f, -0.051095f, -0.005881f, -0.030062f, -0.016319f, 0.014016f, 0.029939f, -0.014938f, -0.040104f, 0.037230f, 0.036054f, -0.008156f, 0.041308f, 0.036767f, -0.080324f, 0.071871f, -0.046585f, 0.000250f, -0.013727f, -0.047970f, -0.013495f, 0.024337f, 0.018097f, -0.003870f, 0.009369f, -0.029239f, 0.000659f, 0.014752f, 0.019844f, 0.031366f, -0.023540f, 0.004798f, -0.006737f, -0.012738f, -0.033324f, -0.004050f, -0.032103f, 0.028351f, -0.005233f, -0.034067f, 0.005425f, -0.039028f, -0.002626f, 0.004757f, -0.009082f, -0.016857f, 0.001144f, 0.003175f, 0.004085f, + 0.012794f, -0.002424f, -0.000556f, 0.022786f, 0.007478f, -0.023000f, -0.026314f, 0.007182f, -0.017440f, -0.037193f, -0.012722f, -0.034988f, 0.011548f, 0.011055f, 0.027529f, 0.003734f, -0.028314f, -0.020319f, 0.020098f, 0.102047f, -0.034013f, 0.032900f, -0.001436f, -0.045417f, 0.007011f, -0.091697f, -0.020657f, 0.019715f, 0.001801f, -0.053375f, 0.031593f, 0.093487f, 0.065576f, -0.028926f, -0.058540f, -0.024925f, 0.006576f, 0.098238f, 0.013213f, 0.002479f, 0.000372f, 0.045425f, 0.046699f, 0.012213f, 0.035702f, 0.028960f, 0.054899f, -0.015643f, 0.006265f, 0.035080f, -0.032017f, -0.048729f, 0.027370f, 0.080605f, 0.017463f, 0.039064f, 0.003739f, 0.023983f, -0.107904f, 0.019970f, -0.004226f, 0.024371f, 0.105771f, 0.042684f, 0.014294f, -0.010506f, 0.047396f, -0.010831f, -0.022240f, 0.016749f, 0.029449f, 0.062252f, -0.020080f, 0.038689f, 0.007036f, 0.010728f, 0.024485f, 0.031495f, -0.000996f, -0.041241f, -0.025603f, 0.009630f, 0.079774f, 0.054642f, 0.042442f, 0.045960f, 0.038475f, -0.011048f, -0.098811f, -0.070991f, -0.135542f, -0.001919f, 0.041310f, 0.077993f, 0.012133f, -0.056941f, + 0.018786f, -0.035256f, 0.011293f, 0.026910f, 0.008135f, -0.016541f, -0.009168f, 0.000240f, -0.007658f, 0.021806f, -0.015001f, -0.039468f, 0.000739f, 0.013061f, 0.017517f, -0.025558f, -0.011584f, -0.047481f, 0.011739f, 0.020552f, -0.018227f, -0.016439f, 0.011843f, -0.009383f, -0.011730f, -0.010356f, -0.036865f, -0.008021f, 0.038003f, 0.023693f, 0.034408f, -0.018678f, -0.038965f, -0.029012f, 0.025274f, 0.019808f, -0.009184f, -0.001874f, -0.002381f, 0.006925f, -0.010969f, 0.022666f, -0.026000f, -0.014862f, 0.001805f, 0.004133f, 0.014967f, -0.032317f, 0.006633f, -0.023802f, 0.062660f, -0.018609f, 0.013663f, -0.020688f, 0.007225f, -0.038852f, -0.016265f, 0.083389f, -0.003397f, -0.039016f, 0.009535f, -0.007578f, -0.031703f, -0.025784f, 0.004644f, 0.043871f, 0.119685f, 0.053466f, 0.106082f, 0.055200f, 0.047112f, 0.044588f, -0.031581f, -0.026722f, -0.030220f, 0.012944f, 0.086920f, 0.027644f, -0.072721f, 0.030995f, -0.078185f, 0.038748f, -0.049611f, -0.010891f, -0.043563f, -0.047126f, -0.002317f, 0.005645f, -0.000767f, -0.058873f, 0.076113f, -0.015860f, 0.028546f, -0.074361f, 0.019716f, -0.017590f, + -0.022879f, 0.037959f, -0.031510f, 0.076310f, 0.008939f, -0.030648f, 0.003843f, -0.023191f, -0.031532f, 0.021179f, -0.052089f, -0.011571f, 0.065219f, -0.014681f, 0.026632f, -0.003951f, -0.047446f, 0.051469f, -0.028066f, -0.108216f, 0.013326f, 0.007657f, -0.000528f, 0.011439f, -0.014957f, -0.021446f, -0.006126f, 0.048347f, -0.092731f, 0.054294f, -0.021939f, -0.013348f, 0.060853f, -0.037966f, 0.017820f, 0.022028f, 0.088388f, 0.030346f, 0.039013f, -0.006743f, 0.052776f, -0.042716f, 0.041839f, 0.006418f, -0.016316f, 0.010764f, 0.002414f, 0.001269f, -0.022960f, -0.006402f, 0.003965f, -0.010203f, -0.017220f, 0.035492f, 0.000484f, -0.003048f, -0.010729f, 0.011521f, -0.014237f, 0.031588f, 0.018506f, 0.016768f, 0.003831f, -0.000623f, -0.003195f, 0.026363f, -0.021650f, -0.028012f, 0.010438f, 0.013601f, -0.001481f, 0.023622f, -0.010510f, -0.005298f, 0.001040f, -0.008668f, -0.026984f, -0.027274f, -0.002721f, 0.008525f, -0.013521f, 0.004193f, 0.008368f, 0.009124f, -0.007446f, -0.001091f, 0.017359f, -0.025375f, -0.045034f, 0.073925f, 0.068874f, 0.239792f, 0.096949f, -0.130644f, -0.061262f, -0.063996f, + -0.100267f, 0.069975f, 0.215709f, 0.086319f, 0.041036f, -0.054041f, -0.014743f, -0.003617f, -0.002407f, 0.103519f, 0.071047f, 0.045175f, 0.155903f, -0.186526f, 0.012289f, 0.097540f, -0.023485f, 0.020075f, 0.102340f, 0.017941f, -0.029023f, 0.055141f, -0.102718f, -0.206358f, -0.019531f, 0.020307f, -0.079873f, -0.009050f, 0.110765f, 0.018679f, 0.006685f, 0.042066f, -0.087141f, -0.177797f, -0.162285f, -0.073896f, 0.053924f, 0.105727f, 0.234323f, 0.058849f, -0.029746f, -0.029415f, -0.063264f, -0.140002f, -0.042362f, 0.102484f, 0.103300f, 0.108189f, 0.105662f, 0.066240f, 0.055119f, 0.015934f, 0.024204f, -0.089962f, -0.055101f, 0.013401f, 0.025355f, 0.046149f, 0.056713f, 0.139161f, 0.036607f, 0.081000f, -0.053137f, -0.052582f, -0.094266f, -0.020527f, -0.072061f, -0.017231f, 0.145237f, 0.186310f, 0.004173f, -0.007552f, -0.115909f, -0.133798f, -0.075234f, -0.031815f, 0.074434f, 0.039567f, -0.008043f, 0.027598f, -0.010207f, -0.019156f, -0.034931f, -0.033161f, -0.004374f, 0.008392f, 0.006926f, 0.040913f, -0.002928f, -0.000925f, -0.020923f, 0.000664f, -0.026061f, -0.008811f, 0.000096f, -0.038503f, + -0.017312f, 0.000767f, -0.010500f, -0.002760f, 0.022500f, 0.019939f, 0.046982f, -0.020757f, -0.008537f, -0.047677f, -0.038569f, -0.029307f, 0.048663f, 0.030814f, 0.015253f, 0.016117f, -0.015115f, -0.042362f, -0.034143f, 0.001471f, -0.024078f, 0.041325f, 0.061379f, -0.015865f, -0.170373f, -0.106176f, 0.062160f, 0.160489f, 0.188230f, 0.389793f, 0.238771f, 0.160973f, 0.143432f, 0.110437f, -0.018659f, -0.169804f, -0.184502f, -0.359977f, -0.381421f, -0.362862f, -0.230865f, -0.081491f, 0.081156f, 0.138433f, 0.232371f, 0.227009f, 0.160437f, 0.157154f, 0.202376f, 0.192921f, 0.174328f, 0.109492f, 0.077224f, 0.066924f, -0.006281f, -0.012441f, -0.222845f, -0.159909f, -0.199335f, -0.242752f, -0.101214f, -0.237077f, -0.190262f, -0.348964f, -0.304217f, -0.216760f, -0.143798f, -0.022196f, 0.181687f, 0.218719f, 0.185442f, 0.196842f, 0.183444f, 0.338254f, 0.441852f, 0.393682f, 0.391710f, 0.344503f, 0.333812f, 0.247084f, 0.248225f, 0.052405f, -0.166680f, -0.348562f, -0.332252f, -0.498488f, -0.414828f, -0.605274f, -0.719689f, -0.640709f, -0.607377f, -0.366622f, -0.254375f, 0.045882f, 0.121140f, 0.283508f, + 0.423010f, 0.650766f, 0.564671f, 0.813885f, 0.704002f, 0.503313f, 0.496057f, 0.224887f, 0.016660f, -0.046063f, -0.176358f, -0.309124f, -0.368192f, -0.441077f, -0.381274f, -0.346505f, -0.333282f, -0.271834f, -0.278976f, -0.230234f, -0.201647f, -0.062353f, -0.042866f, 0.054645f, 0.130095f, 0.148426f, 0.194916f, 0.276120f, 0.335334f, 0.356427f, 0.374168f, 0.273765f, 0.227520f, 0.219479f, 0.081789f, 0.052935f, -0.124404f, -0.298864f, -0.396660f, -0.406972f, -0.454241f, -0.289686f, -0.329137f, -0.220696f, -0.158524f, -0.045087f, 0.078520f, 0.153784f, 0.235626f, 0.243387f, 0.368329f, 0.377122f, 0.363342f, 0.306781f, 0.276258f, 0.108457f, 0.027658f, -0.070726f, -0.157010f, -0.300183f, -0.352209f, -0.294060f, -0.198994f, -0.177297f, -0.123428f, -0.114161f, -0.059607f, -0.009612f, 0.013690f, 0.008045f, 0.052104f, 0.057900f, 0.094101f, 0.078453f, 0.073878f, 0.067391f, 0.078304f, 0.052772f, 0.050564f, 0.055861f, 0.056861f, 0.020775f, 0.006321f, -0.013502f, -0.002813f, -0.008730f, 0.004202f} + }, + { + {-0.009636f, -0.025798f, -0.002176f, -0.004122f, -0.003524f, 0.000383f, -0.004304f, 0.001608f, 0.002528f, 0.010573f, -0.003571f, -0.000425f, -0.009753f, 0.000719f, 0.009802f, 0.000683f, 0.007084f, -0.002091f, 0.002973f, -0.004095f, -0.006160f, 0.000208f, 0.006734f, -0.000864f, -0.008442f, -0.000347f, 0.008170f, 0.002666f, -0.003504f, -0.002915f, -0.000388f, -0.001121f, -0.001913f, 0.000102f, -0.001386f, -0.002807f, -0.000362f, 0.001684f, 0.001140f, -0.000366f, -0.006433f, 0.009567f, 0.013019f, 0.000429f, 0.001512f, -0.005252f, -0.002994f, 0.001046f, -0.006805f, -0.007532f, 0.004506f, -0.006115f, 0.004453f, 0.005794f, 0.005749f, 0.002177f, -0.000876f, 0.001579f, 0.001199f, 0.004367f, -0.009364f, 0.000833f, -0.001213f, -0.006786f, -0.009222f, 0.000299f, 0.004600f, -0.003480f, -0.000492f, -0.001038f, -0.000654f, 0.006532f, 0.003218f, 0.000907f, 0.002541f, -0.002082f, -0.007589f, 0.002989f, 0.001226f, 0.006539f, -0.007802f, -0.005866f, 0.004398f, -0.003444f, -0.001627f, -0.005762f, 0.001314f, -0.003365f, -0.003173f, 0.000130f, -0.002544f, -0.002715f, 0.000760f, -0.001443f, -0.000702f, -0.003096f, + 0.001945f, -0.000335f, 0.000183f, -0.000784f, 0.001589f, -0.000242f, 0.000515f, -0.000503f, -0.000497f, -0.023631f, -0.005584f, 0.009208f, -0.001422f, -0.007267f, 0.002972f, -0.017518f, -0.006888f, -0.002523f, -0.003299f, -0.009051f, -0.009713f, 0.005200f, 0.007823f, 0.006859f, -0.009093f, -0.013178f, 0.001362f, -0.007707f, -0.014226f, 0.003248f, -0.001029f, 0.004012f, 0.015707f, -0.005193f, -0.001806f, -0.009982f, 0.013554f, 0.001080f, 0.006697f, 0.004740f, 0.011105f, 0.005737f, 0.003343f, -0.011129f, -0.001396f, -0.010231f, -0.002959f, 0.000470f, -0.004436f, 0.003467f, 0.002780f, -0.004829f, -0.009646f, 0.006084f, 0.009794f, 0.002813f, -0.004852f, -0.007328f, -0.004684f, 0.002375f, -0.008395f, -0.010458f, -0.003102f, 0.005207f, -0.003012f, 0.002578f, 0.006473f, 0.004182f, -0.005007f, 0.009572f, 0.000746f, 0.008156f, -0.006922f, -0.005716f, -0.003428f, -0.003986f, 0.005578f, -0.003175f, 0.000239f, 0.009664f, 0.003335f, 0.000263f, -0.009220f, 0.002509f, -0.003732f, 0.006786f, 0.009737f, -0.001672f, 0.000727f, -0.004462f, 0.003641f, 0.008671f, -0.003148f, 0.005413f, 0.002370f, 0.001170f, + 0.004379f, 0.001799f, 0.000147f, 0.003579f, 0.001280f, -0.000258f, -0.000044f, 0.001599f, 0.001375f, -0.001573f, 0.001136f, 0.001227f, 0.001765f, -0.004828f, 0.006094f, 0.008424f, 0.003394f, -0.005245f, 0.003664f, -0.002453f, 0.002536f, 0.015828f, 0.009745f, -0.013336f, 0.009058f, -0.007331f, -0.003633f, -0.001915f, 0.000260f, 0.006739f, 0.000246f, 0.018508f, 0.005336f, -0.007081f, -0.004670f, -0.004590f, 0.013015f, 0.003079f, 0.012534f, 0.004129f, 0.008436f, 0.013098f, 0.014998f, 0.005722f, -0.001704f, -0.001488f, 0.002255f, -0.012016f, -0.011201f, 0.003587f, -0.008506f, 0.004839f, 0.002310f, -0.002870f, -0.001265f, 0.003537f, 0.012512f, -0.004095f, -0.004268f, -0.006431f, 0.015986f, -0.002156f, -0.019966f, -0.009946f, -0.007925f, -0.007250f, 0.008228f, 0.007930f, 0.006951f, 0.010436f, 0.004613f, 0.006544f, -0.000307f, -0.000619f, -0.000311f, 0.010495f, 0.003392f, 0.006161f, -0.013904f, 0.000917f, 0.000623f, 0.000760f, 0.000900f, 0.006050f, 0.004215f, 0.001759f, -0.006747f, -0.006694f, 0.003877f, 0.003251f, -0.002000f, -0.000411f, -0.005439f, -0.006882f, -0.005650f, 0.003841f, + 0.006651f, 0.000824f, 0.000367f, 0.002335f, -0.001951f, -0.000234f, -0.001547f, 0.001217f, 0.001160f, 0.000706f, -0.000941f, 0.002012f, 0.003183f, -0.000462f, 0.000299f, 0.000718f, -0.000530f, 0.000857f, -0.001341f, 0.002347f, -0.000002f, -0.000441f, -0.001528f, 0.002075f, -0.004046f, 0.002280f, 0.000644f, 0.001719f, -0.000316f, 0.035122f, 0.007783f, 0.005358f, -0.004197f, -0.002434f, 0.003493f, 0.002461f, 0.009456f, 0.012396f, -0.000481f, 0.018250f, 0.007368f, -0.006436f, -0.005936f, -0.000461f, 0.008822f, -0.001030f, -0.004673f, 0.009658f, 0.001450f, 0.026317f, 0.006986f, 0.005209f, 0.001180f, -0.002543f, 0.001338f, 0.003981f, 0.005202f, -0.001197f, 0.000153f, 0.014119f, 0.002076f, 0.015543f, -0.007717f, -0.007476f, 0.005232f, 0.023339f, 0.006867f, 0.005636f, -0.001918f, -0.010100f, -0.003861f, 0.003152f, 0.000802f, -0.000236f, 0.000965f, -0.014331f, 0.001125f, -0.006309f, 0.005849f, 0.004514f, -0.005543f, 0.003290f, 0.005140f, 0.003371f, -0.006615f, -0.006920f, 0.001765f, 0.002439f, 0.000141f, -0.008895f, 0.002446f, -0.003467f, 0.005826f, -0.000828f, 0.001235f, 0.003612f, + -0.001243f, 0.001993f, -0.003043f, 0.000969f, 0.020621f, 0.002314f, 0.007393f, 0.000238f, -0.005509f, 0.003360f, 0.001359f, 0.006341f, -0.011259f, -0.007949f, 0.004037f, -0.001678f, 0.002483f, -0.002974f, 0.004484f, 0.003635f, 0.000604f, -0.005053f, -0.001762f, -0.006873f, -0.001074f, -0.001585f, 0.004565f, -0.003173f, -0.000687f, 0.000743f, -0.000452f, -0.001657f, -0.001495f, 0.001279f, -0.001596f, -0.002312f, 0.000136f, 0.000081f, 0.001403f, -0.004655f, -0.001640f, 0.001170f, 0.000844f, -0.005067f, -0.001058f, -0.000345f, -0.006333f, -0.000740f, 0.005173f, -0.007745f, -0.001344f, 0.007878f, -0.003991f, -0.012215f, -0.000080f, 0.020156f, -0.001402f, 0.015825f, 0.008099f, 0.021891f, 0.002628f, 0.002049f, 0.007947f, -0.006147f, -0.013071f, -0.017156f, 0.004022f, -0.008730f, 0.020157f, 0.011557f, 0.014231f, -0.002661f, -0.005965f, 0.001808f, 0.003167f, 0.006697f, 0.018856f, 0.002292f, 0.007833f, -0.008604f, 0.005977f, -0.006097f, 0.002537f, -0.003274f, 0.006171f, 0.010847f, 0.001410f, 0.010365f, 0.003735f, 0.005203f, -0.003051f, -0.002468f, 0.013757f, -0.003199f, -0.003525f, 0.010440f, + -0.006300f, -0.000560f, 0.001414f, -0.004532f, -0.006120f, 0.004635f, -0.007010f, -0.001301f, -0.008930f, -0.018855f, -0.002204f, -0.002848f, -0.000585f, -0.019650f, -0.007607f, -0.005985f, -0.005195f, 0.007413f, 0.019278f, -0.004922f, 0.006122f, 0.010151f, -0.002939f, 0.001920f, 0.001600f, 0.001163f, -0.007179f, 0.007719f, -0.009078f, 0.002348f, 0.006311f, 0.018170f, 0.005548f, 0.005384f, 0.001519f, -0.000235f, 0.005343f, -0.006565f, -0.000196f, 0.003748f, 0.001632f, 0.000322f, -0.007502f, 0.004385f, 0.005208f, 0.005384f, -0.001176f, 0.004006f, 0.002025f, 0.001126f, 0.003491f, 0.002105f, 0.000270f, 0.002059f, -0.000679f, 0.001594f, 0.000860f, 0.001340f, 0.001934f, 0.002631f, 0.002944f, 0.002154f, 0.001911f, 0.002334f, -0.001584f, 0.002108f, -0.025561f, 0.002239f, 0.013688f, 0.007249f, -0.014357f, -0.001055f, 0.000634f, 0.003402f, 0.005207f, -0.000800f, -0.011191f, -0.010656f, 0.001611f, 0.018113f, 0.008551f, 0.010749f, 0.018152f, -0.012304f, 0.012933f, 0.024050f, -0.002277f, 0.005434f, -0.013704f, 0.004696f, 0.004840f, -0.011679f, -0.006382f, -0.002508f, 0.005443f, -0.011801f, + -0.015693f, 0.003004f, 0.001604f, -0.013357f, 0.000945f, 0.004244f, -0.002860f, 0.028508f, -0.001762f, -0.020161f, -0.001528f, 0.007000f, 0.015881f, 0.005943f, 0.007025f, -0.012917f, 0.003400f, 0.004115f, -0.011729f, -0.000730f, -0.002159f, 0.019807f, 0.011906f, -0.003257f, -0.007001f, -0.015295f, 0.006390f, 0.006170f, -0.009268f, -0.000284f, 0.003446f, 0.006022f, 0.005927f, -0.007778f, -0.000453f, -0.001678f, 0.018320f, -0.015574f, 0.001674f, -0.004041f, 0.016466f, -0.001179f, -0.004338f, -0.006989f, 0.001839f, -0.007234f, -0.017279f, 0.000491f, 0.012681f, 0.003892f, 0.007848f, 0.002040f, -0.006401f, -0.002421f, -0.003365f, 0.011037f, 0.004103f, -0.002981f, -0.000688f, 0.010023f, 0.007204f, -0.002813f, 0.000791f, 0.001588f, 0.001872f, -0.000183f, 0.003723f, 0.002788f, 0.002162f, 0.000263f, -0.001694f, -0.000634f, 0.000503f, -0.001431f, 0.000182f, -0.001998f, -0.000961f, 0.001641f, 0.009712f, 0.008842f, 0.003107f, -0.006489f, 0.001799f, 0.004232f, 0.029886f, 0.019852f, 0.014847f, 0.021054f, 0.008476f, -0.001828f, 0.002947f, 0.007782f, -0.021296f, 0.010880f, 0.000247f, 0.011697f, + -0.008636f, -0.004356f, -0.013768f, 0.003864f, 0.024031f, -0.023618f, -0.015066f, -0.025109f, 0.012613f, -0.005757f, 0.000698f, -0.011455f, 0.001368f, -0.004300f, -0.011531f, 0.004316f, 0.005487f, -0.017879f, -0.002548f, 0.003173f, -0.004045f, 0.009359f, -0.025970f, -0.012579f, 0.026338f, 0.002592f, -0.000576f, -0.002681f, 0.000824f, -0.013503f, -0.014378f, 0.000776f, -0.020868f, -0.004860f, 0.001984f, 0.005493f, -0.009033f, -0.002124f, 0.025665f, -0.001733f, 0.008942f, 0.019105f, -0.017965f, -0.006278f, 0.004095f, 0.004474f, 0.003340f, -0.005543f, -0.012865f, 0.014574f, -0.001713f, -0.013687f, 0.009917f, -0.002506f, 0.002255f, 0.003763f, -0.007444f, -0.004500f, -0.003204f, -0.005605f, -0.008058f, -0.009627f, -0.009298f, -0.011794f, -0.003644f, -0.005002f, -0.001248f, -0.001543f, -0.000228f, 0.001540f, -0.004917f, -0.003849f, 0.002701f, 0.003271f, 0.005309f, -0.000293f, -0.002258f, -0.006921f, -0.002032f, -0.007998f, -0.005183f, -0.001057f, 0.001510f, -0.000553f, 0.001030f, -0.001992f, -0.001241f, 0.006009f, 0.002260f, 0.004188f, -0.004064f, 0.001114f, 0.000941f, 0.001626f, -0.008183f, 0.000680f, + 0.002408f, 0.000092f, 0.004331f, -0.049578f, -0.027788f, 0.022573f, -0.008798f, -0.010441f, 0.013445f, 0.011964f, -0.021397f, -0.028557f, -0.009358f, -0.010113f, -0.010955f, -0.001795f, -0.019911f, -0.014080f, 0.007054f, 0.000933f, -0.026731f, -0.029116f, -0.016582f, -0.007862f, -0.001660f, 0.015161f, -0.001262f, -0.010769f, 0.008049f, -0.024205f, 0.000551f, -0.000970f, 0.000850f, 0.008686f, 0.004487f, -0.017585f, -0.013553f, 0.010834f, 0.003536f, 0.039804f, 0.009522f, -0.013014f, 0.001587f, 0.001474f, 0.000191f, 0.010650f, 0.001783f, 0.004561f, -0.004296f, -0.008515f, 0.002357f, -0.022589f, -0.004489f, -0.009733f, -0.012288f, 0.002834f, -0.018371f, 0.021337f, -0.002961f, 0.009043f, 0.014875f, 0.004699f, 0.007772f, -0.000769f, -0.010053f, -0.000194f, -0.001505f, -0.011972f, 0.015620f, -0.006342f, 0.027987f, -0.000693f, -0.000893f, 0.001556f, -0.007576f, -0.015043f, 0.004517f, -0.011748f, -0.005113f, 0.016794f, -0.021606f, -0.020736f, 0.013824f, 0.013654f, 0.011236f, -0.017524f, 0.012591f, 0.005629f, 0.007239f, -0.000258f, 0.003032f, 0.003782f, 0.009738f, 0.004556f, 0.002209f, 0.007708f, + -0.001229f, -0.000152f, -0.006315f, -0.004410f, -0.001215f, 0.005359f, -0.006762f, 0.001216f, -0.000988f, -0.003507f, -0.002600f, 0.002008f, -0.008632f, -0.004787f, -0.006498f, -0.000753f, 0.002475f, 0.000311f, 0.005992f, -0.001725f, 0.006280f, 0.000934f, 0.002190f, 0.001406f, 0.004813f, -0.003539f, -0.003402f, 0.010256f, 0.036718f, -0.020423f, 0.017418f, 0.007400f, 0.012949f, -0.005060f, -0.020189f, 0.003040f, -0.005378f, -0.018583f, 0.037886f, -0.002506f, -0.010675f, -0.037287f, 0.022912f, 0.006565f, -0.000530f, -0.013828f, -0.016315f, 0.000599f, 0.038472f, 0.014529f, -0.001616f, -0.003646f, -0.016673f, -0.013323f, 0.011023f, 0.005085f, -0.013069f, -0.008963f, 0.013346f, 0.003516f, -0.000678f, 0.011720f, 0.017692f, 0.002945f, 0.023393f, 0.026817f, 0.016065f, -0.006015f, 0.005751f, 0.002313f, 0.004273f, 0.014049f, -0.019903f, 0.020928f, -0.001570f, -0.010452f, -0.016167f, 0.000217f, 0.013516f, 0.009683f, -0.019060f, 0.004261f, 0.014801f, 0.002409f, -0.013850f, -0.029442f, -0.027033f, 0.007193f, 0.011731f, 0.002103f, -0.010583f, -0.001287f, 0.021308f, -0.009752f, -0.016368f, -0.031110f, + 0.003132f, 0.006154f, -0.023454f, 0.008840f, 0.023102f, -0.010499f, 0.017927f, 0.006382f, -0.021744f, -0.015896f, 0.001488f, 0.022232f, -0.002491f, 0.023348f, -0.004235f, -0.008073f, 0.004698f, 0.011941f, 0.002956f, -0.003896f, -0.006456f, 0.004062f, 0.010300f, 0.008606f, 0.001225f, 0.013887f, 0.002336f, 0.009979f, 0.002234f, 0.013620f, 0.001812f, 0.008431f, -0.000378f, 0.006746f, 0.003359f, -0.003293f, -0.010162f, 0.000902f, -0.011846f, -0.001575f, -0.005006f, 0.001859f, -0.001785f, -0.000407f, -0.010564f, -0.000930f, 0.004535f, -0.004999f, 0.000386f, -0.001192f, 0.000441f, -0.000659f, -0.007739f, 0.001157f, 0.044214f, 0.029519f, 0.006368f, -0.008645f, -0.005055f, -0.005961f, -0.030842f, -0.012091f, -0.000693f, 0.019763f, -0.014342f, -0.007601f, -0.006869f, 0.000587f, 0.031874f, -0.024766f, -0.007008f, -0.001140f, 0.014800f, -0.004988f, -0.018786f, -0.030697f, 0.010762f, -0.021140f, -0.010090f, -0.013103f, -0.014738f, 0.004761f, -0.024541f, -0.011549f, 0.021182f, 0.032409f, 0.001168f, -0.019936f, -0.018273f, 0.029899f, -0.003626f, -0.015879f, 0.030688f, 0.001164f, 0.001600f, 0.001506f, + -0.034109f, 0.013951f, -0.012830f, 0.012482f, 0.011058f, -0.022794f, -0.002810f, -0.023128f, 0.008755f, -0.022427f, -0.004155f, 0.009651f, 0.012550f, -0.007379f, 0.007507f, -0.027264f, 0.018580f, -0.001966f, 0.012578f, 0.010982f, 0.007516f, -0.005931f, -0.006053f, 0.027504f, -0.019223f, 0.013735f, -0.004952f, -0.023138f, -0.014358f, -0.001410f, 0.024273f, -0.013929f, 0.011212f, 0.003440f, -0.007879f, 0.000447f, -0.027689f, 0.034754f, 0.020986f, -0.003967f, -0.009720f, 0.017090f, 0.007061f, -0.004879f, -0.009181f, 0.002032f, -0.006219f, 0.008854f, -0.002116f, 0.004704f, 0.014078f, 0.005268f, 0.011085f, 0.000081f, 0.003748f, 0.001784f, -0.002407f, 0.000394f, -0.001346f, 0.009924f, 0.003592f, 0.013734f, 0.002006f, -0.007572f, 0.009672f, -0.003910f, -0.000569f, 0.007547f, -0.007476f, -0.002308f, -0.004080f, -0.003002f, 0.005884f, 0.003825f, 0.002921f, 0.012768f, -0.004090f, -0.004345f, 0.017400f, 0.003328f, -0.011518f, -0.026423f, -0.001444f, -0.034342f, 0.005912f, 0.003060f, 0.016799f, -0.013715f, -0.003276f, 0.008908f, 0.007415f, 0.009799f, -0.023238f, 0.032867f, 0.023315f, 0.004296f, + 0.017240f, -0.007769f, -0.033103f, 0.007818f, -0.013935f, -0.015506f, 0.015611f, 0.038093f, 0.006677f, -0.010505f, -0.013801f, -0.030553f, 0.000078f, 0.001424f, 0.046997f, -0.018490f, -0.000721f, 0.001410f, -0.001410f, -0.028301f, -0.031920f, 0.025286f, 0.001016f, 0.014372f, -0.004085f, -0.036173f, -0.020810f, 0.002892f, -0.006025f, -0.007649f, -0.010302f, 0.023679f, -0.004970f, 0.015383f, -0.016562f, 0.032982f, -0.038913f, 0.019283f, 0.020232f, 0.012052f, 0.010718f, 0.009766f, 0.030852f, 0.015836f, -0.002196f, 0.006578f, 0.000285f, 0.030448f, 0.045799f, -0.005275f, 0.003703f, -0.013445f, 0.019195f, 0.030724f, -0.020963f, 0.006457f, -0.052893f, 0.034606f, 0.035797f, 0.023850f, 0.033309f, -0.015157f, -0.026475f, -0.001906f, -0.003783f, -0.007844f, -0.005495f, -0.015921f, -0.010985f, -0.005887f, -0.001311f, -0.008905f, 0.005430f, 0.009728f, 0.003880f, -0.014961f, 0.003097f, -0.008312f, -0.008630f, -0.005526f, 0.006364f, 0.005760f, -0.002487f, -0.003726f, -0.001168f, -0.002597f, 0.001771f, -0.014477f, 0.004986f, 0.002095f, 0.009552f, 0.002095f, -0.000439f, -0.000423f, 0.002252f, 0.008202f, + 0.003039f, -0.007494f, 0.006192f, 0.000005f, 0.001089f, -0.038496f, -0.005730f, -0.049244f, -0.025313f, 0.019397f, -0.020204f, -0.043793f, 0.004034f, -0.023609f, 0.001052f, 0.000864f, -0.028134f, -0.026691f, 0.012039f, 0.025807f, 0.007745f, -0.029977f, 0.014309f, -0.033721f, -0.011868f, -0.012414f, 0.010520f, -0.013848f, -0.006360f, 0.016228f, 0.002730f, -0.011088f, -0.024058f, 0.025445f, 0.024615f, 0.032062f, 0.004142f, -0.003550f, 0.001091f, 0.010286f, -0.002467f, 0.013159f, -0.014504f, 0.017298f, -0.006849f, 0.019924f, 0.015919f, 0.012035f, -0.005832f, 0.000846f, -0.031019f, 0.010561f, -0.007847f, 0.023315f, 0.004187f, -0.054130f, 0.008267f, 0.026710f, 0.035850f, -0.020633f, -0.028267f, 0.033787f, 0.015275f, 0.023760f, -0.042350f, 0.020930f, 0.052890f, 0.055788f, 0.003492f, 0.001343f, 0.031676f, -0.021947f, -0.029329f, 0.018767f, -0.032467f, 0.012184f, -0.015156f, -0.012736f, -0.007223f, -0.069783f, -0.040373f, -0.033978f, 0.025009f, 0.009530f, 0.006981f, -0.024781f, -0.010158f, -0.018719f, -0.003620f, -0.010050f, 0.027333f, 0.006527f, -0.010979f, -0.024341f, -0.005503f, 0.015781f, + -0.002600f, -0.006724f, 0.004758f, 0.016518f, -0.005965f, -0.009744f, -0.004767f, -0.003609f, -0.001216f, 0.012847f, 0.012801f, 0.011215f, -0.011422f, 0.014696f, -0.000850f, 0.004205f, 0.016684f, -0.007539f, -0.007684f, 0.014645f, 0.026167f, -0.006142f, -0.008699f, -0.004182f, 0.003040f, -0.004736f, -0.018232f, 0.002924f, 0.013091f, 0.003566f, -0.018368f, -0.017463f, 0.008094f, 0.005918f, -0.001123f, -0.001122f, -0.003340f, -0.012990f, -0.008856f, -0.029033f, -0.055661f, 0.042555f, 0.004484f, 0.014280f, -0.007194f, 0.030135f, 0.000821f, -0.025724f, 0.019916f, 0.008087f, -0.009085f, -0.015529f, -0.012143f, 0.003825f, 0.007288f, 0.026695f, -0.015181f, 0.020949f, 0.006697f, 0.038069f, -0.054606f, -0.014665f, -0.008633f, 0.007033f, 0.022330f, 0.032361f, 0.007377f, -0.026282f, 0.017776f, 0.025462f, 0.021463f, -0.005992f, 0.007509f, 0.001546f, -0.008942f, -0.003670f, 0.001584f, 0.008244f, 0.002998f, 0.018830f, 0.003138f, -0.023741f, 0.022220f, -0.024615f, -0.031399f, 0.004893f, 0.022762f, -0.011046f, -0.008120f, 0.008269f, 0.011129f, 0.019600f, -0.011151f, 0.009299f, 0.044286f, -0.017647f, + -0.046980f, -0.060891f, -0.030739f, -0.041253f, 0.018784f, 0.035827f, 0.022947f, 0.008769f, 0.021588f, 0.012678f, 0.023856f, -0.020371f, 0.026961f, 0.014002f, 0.010965f, 0.028069f, 0.036497f, -0.011325f, -0.008095f, 0.009982f, -0.002350f, 0.032831f, 0.012753f, -0.004990f, 0.005579f, -0.040004f, -0.027950f, 0.005571f, -0.001535f, 0.007143f, 0.002744f, 0.008439f, -0.007439f, 0.021125f, -0.011103f, -0.012849f, -0.012396f, -0.021022f, -0.007594f, -0.004132f, 0.006961f, 0.005654f, -0.003106f, -0.018048f, -0.001007f, 0.006026f, 0.002063f, -0.007218f, 0.004331f, 0.000295f, 0.007039f, -0.007522f, 0.003161f, 0.001505f, 0.008482f, -0.003976f, 0.013027f, -0.007976f, -0.009194f, 0.002808f, -0.001517f, -0.006705f, 0.002207f, 0.009032f, 0.000827f, -0.001309f, 0.055798f, 0.005323f, 0.008814f, -0.011626f, 0.020313f, -0.063798f, -0.028066f, -0.043619f, -0.044889f, 0.017802f, -0.039162f, 0.038524f, 0.043981f, 0.001882f, 0.009597f, -0.006802f, 0.008112f, -0.041728f, 0.017212f, 0.046097f, -0.026205f, -0.053706f, 0.007178f, -0.020217f, -0.017041f, -0.052382f, 0.009144f, 0.019200f, -0.000129f, -0.007128f, + 0.016914f, -0.029880f, -0.004898f, 0.019405f, -0.010637f, -0.026481f, 0.003278f, -0.013225f, 0.027429f, -0.018136f, -0.009987f, 0.025607f, 0.022302f, 0.047295f, 0.006340f, 0.011414f, -0.004279f, 0.012697f, 0.016923f, 0.029221f, -0.008351f, -0.000960f, -0.018091f, 0.038555f, -0.048520f, 0.052208f, 0.001935f, -0.020808f, 0.024537f, -0.018971f, -0.013896f, 0.048023f, -0.069242f, 0.011316f, -0.014549f, 0.013572f, -0.026815f, 0.012962f, 0.027577f, -0.014230f, -0.002463f, -0.007305f, -0.011402f, -0.006145f, 0.051177f, -0.057946f, -0.019714f, 0.097453f, -0.036599f, -0.042991f, 0.042263f, 0.025253f, 0.028239f, -0.024520f, 0.002028f, -0.024371f, -0.013565f, -0.003810f, -0.027762f, 0.006119f, 0.003857f, -0.007240f, 0.010132f, 0.008993f, -0.012520f, -0.023676f, -0.005990f, -0.001972f, 0.009423f, -0.020891f, -0.014570f, 0.000578f, -0.001980f, 0.005305f, 0.013168f, 0.031056f, -0.013994f, -0.000674f, -0.003273f, -0.003211f, 0.009050f, 0.003539f, -0.018325f, -0.013889f, 0.014961f, -0.011979f, 0.005741f, 0.003870f, -0.011096f, 0.004326f, -0.002430f, -0.018826f, -0.015322f, 0.009309f, 0.006242f, -0.002804f, + -0.000183f, 0.011846f, -0.027691f, -0.042851f, 0.004192f, -0.016276f, -0.014468f, -0.024147f, -0.030158f, 0.038020f, 0.016415f, 0.002363f, 0.017903f, 0.045038f, 0.026685f, -0.003153f, 0.009238f, 0.030255f, 0.038726f, -0.034409f, 0.016075f, 0.032322f, 0.014131f, 0.011800f, 0.044716f, 0.021465f, 0.009359f, -0.001432f, 0.020141f, -0.002319f, 0.022786f, 0.018726f, 0.010323f, -0.020996f, 0.039557f, -0.032563f, -0.004029f, 0.049397f, 0.048953f, -0.011726f, -0.043336f, 0.016248f, -0.000630f, 0.042365f, 0.073081f, 0.016242f, -0.011160f, 0.005085f, -0.041885f, -0.005034f, -0.011048f, -0.009095f, 0.000869f, 0.037194f, -0.015970f, 0.016320f, 0.044883f, 0.007530f, -0.041469f, 0.027367f, -0.002096f, 0.017374f, 0.042172f, 0.059263f, -0.016721f, -0.015834f, -0.005069f, -0.047115f, -0.068824f, 0.001787f, -0.031290f, -0.005165f, -0.037939f, -0.003995f, 0.001242f, 0.005074f, 0.028196f, -0.000889f, -0.019603f, -0.032719f, 0.023856f, -0.010161f, 0.020414f, 0.000657f, 0.038009f, 0.013994f, 0.014038f, 0.000046f, -0.011797f, 0.021245f, -0.016267f, -0.018955f, -0.005670f, -0.014276f, -0.005479f, 0.000991f, + 0.001522f, -0.005190f, 0.005859f, 0.008279f, 0.000708f, -0.002251f, 0.011075f, -0.009604f, -0.013466f, 0.008145f, 0.009754f, 0.001851f, -0.011641f, -0.014113f, -0.008164f, 0.011196f, 0.015206f, 0.001895f, -0.002132f, 0.016732f, 0.004622f, 0.007932f, 0.006995f, 0.011935f, 0.003403f, -0.002317f, -0.008877f, 0.004736f, 0.009598f, -0.019825f, 0.046452f, -0.087169f, 0.047944f, -0.036668f, -0.086077f, -0.025398f, -0.021733f, -0.002970f, -0.019896f, 0.010525f, -0.023840f, -0.053202f, -0.032237f, -0.015842f, -0.004906f, 0.006207f, -0.021981f, 0.021550f, 0.041724f, 0.001657f, -0.002657f, 0.011559f, 0.002537f, -0.007676f, -0.015529f, -0.008624f, 0.011276f, 0.012539f, -0.003727f, 0.011933f, 0.051285f, 0.014254f, -0.015014f, -0.050765f, -0.008139f, 0.036090f, -0.043792f, -0.020452f, -0.016683f, 0.000666f, -0.003346f, 0.027761f, -0.009113f, 0.003453f, 0.038025f, 0.013718f, 0.042185f, -0.005790f, -0.019900f, -0.008996f, -0.010806f, -0.010787f, 0.020363f, 0.002359f, 0.013779f, 0.025861f, -0.045183f, 0.006797f, -0.011938f, -0.027979f, -0.021193f, 0.044322f, 0.031850f, 0.001773f, -0.021528f, 0.009100f, + 0.018691f, 0.002110f, 0.012952f, -0.030174f, -0.074953f, -0.034565f, -0.027406f, 0.027655f, 0.002847f, -0.003263f, -0.012602f, 0.005581f, -0.008387f, -0.023499f, -0.024503f, -0.012603f, 0.030438f, 0.023150f, -0.033795f, -0.042117f, -0.016454f, 0.003191f, 0.025804f, 0.010651f, -0.008093f, -0.011112f, -0.008598f, 0.006248f, -0.018663f, 0.003070f, -0.012701f, 0.001354f, 0.019529f, 0.020980f, 0.005630f, -0.010426f, 0.006831f, 0.015211f, -0.000333f, -0.002906f, 0.011217f, -0.014896f, 0.021344f, 0.019297f, 0.007568f, -0.000031f, -0.000684f, -0.001806f, 0.017951f, -0.006629f, -0.009159f, -0.010359f, -0.015007f, -0.014593f, 0.005038f, -0.005159f, 0.006695f, -0.003924f, 0.003473f, 0.011572f, -0.005237f, -0.010424f, -0.015432f, -0.003972f, 0.007569f, -0.010772f, 0.025179f, -0.034404f, 0.041394f, -0.003287f, -0.065431f, 0.013394f, -0.031535f, -0.006494f, -0.004717f, -0.007702f, -0.041645f, 0.013160f, 0.002212f, 0.033080f, -0.071216f, 0.001210f, 0.035175f, 0.004290f, -0.016860f, -0.035995f, -0.002751f, 0.020746f, 0.030817f, -0.025476f, -0.009045f, 0.016677f, 0.035220f, 0.032169f, -0.030909f, -0.006250f, + -0.050151f, 0.023490f, 0.025589f, 0.015866f, -0.014221f, -0.003853f, -0.013569f, -0.005264f, -0.016641f, 0.004914f, 0.036754f, -0.013504f, -0.014314f, -0.012497f, -0.020658f, 0.041676f, 0.035883f, -0.003413f, 0.050483f, -0.002204f, 0.018032f, -0.044373f, 0.036639f, 0.016300f, -0.049850f, -0.016090f, 0.057392f, 0.023815f, 0.015661f, 0.011213f, -0.026787f, -0.021152f, -0.028730f, 0.049776f, -0.025558f, 0.038467f, 0.039891f, -0.045006f, 0.104454f, -0.022270f, 0.064847f, 0.002896f, -0.014485f, -0.027870f, 0.048764f, 0.018827f, -0.037540f, -0.022977f, -0.080862f, 0.032476f, -0.010959f, 0.037334f, -0.049716f, 0.055819f, -0.042566f, 0.016515f, -0.016400f, -0.012734f, 0.036854f, 0.003487f, 0.003589f, 0.020482f, 0.014479f, -0.009340f, 0.024240f, -0.002915f, 0.007235f, -0.016758f, 0.003451f, -0.002271f, -0.010457f, -0.016846f, 0.000783f, -0.018701f, 0.009154f, 0.008088f, -0.004199f, 0.016210f, -0.005627f, -0.009712f, -0.013395f, 0.009562f, 0.002180f, -0.002239f, -0.026644f, 0.012183f, -0.005137f, -0.032319f, -0.010070f, 0.009301f, -0.008940f, -0.016716f, 0.011439f, -0.009069f, 0.009491f, -0.017012f, + 0.008284f, -0.017336f, -0.002760f, -0.002597f, 0.009668f, -0.004077f, 0.001984f, -0.005622f, -0.005710f, 0.025015f, 0.042908f, 0.003558f, -0.035981f, 0.017433f, -0.069487f, -0.018428f, -0.063124f, -0.087315f, 0.003002f, -0.033522f, 0.011260f, -0.006402f, -0.013678f, -0.033164f, -0.022848f, 0.019628f, 0.052633f, -0.043753f, -0.009387f, -0.075444f, -0.066295f, 0.018381f, 0.026601f, -0.041384f, -0.043395f, 0.002827f, 0.009646f, -0.070082f, 0.003766f, 0.001600f, 0.036500f, -0.031404f, 0.001410f, 0.030333f, -0.019677f, -0.036440f, -0.040853f, -0.019663f, -0.037254f, -0.030461f, -0.038893f, 0.054569f, -0.069237f, -0.042854f, 0.062611f, -0.001929f, 0.017656f, -0.052339f, -0.009165f, -0.014875f, 0.001364f, 0.088332f, -0.012537f, -0.001675f, 0.008689f, 0.041410f, 0.000928f, -0.039047f, -0.017368f, -0.028146f, 0.009458f, 0.105660f, 0.020490f, -0.037194f, 0.079542f, 0.057542f, -0.051161f, 0.059344f, 0.097287f, 0.000852f, -0.038068f, 0.066266f, -0.011594f, 0.069711f, 0.062726f, 0.005280f, -0.003362f, -0.018723f, 0.043754f, 0.035657f, 0.020195f, -0.037219f, -0.012504f, -0.024031f, 0.055425f, -0.007051f, + -0.038341f, -0.018615f, -0.038551f, -0.016541f, 0.037848f, 0.004305f, -0.020215f, -0.006826f, -0.024714f, -0.004134f, 0.033791f, -0.016411f, 0.008148f, -0.003419f, -0.032662f, 0.035117f, 0.004013f, 0.014087f, 0.016801f, -0.022652f, 0.006752f, 0.032266f, -0.006025f, 0.001272f, -0.017584f, -0.000072f, 0.002376f, -0.010629f, -0.010043f, 0.006098f, 0.023711f, -0.015398f, 0.009215f, -0.020560f, -0.010078f, 0.001219f, -0.007121f, 0.023572f, -0.009349f, 0.001010f, 0.001971f, 0.008605f, 0.000488f, -0.011267f, 0.049117f, -0.124808f, -0.075416f, -0.081011f, -0.027864f, -0.053879f, 0.067131f, 0.025705f, 0.055044f, -0.007903f, -0.106649f, -0.015956f, 0.017183f, 0.073612f, -0.003113f, 0.017356f, 0.067245f, -0.024836f, -0.048797f, 0.005339f, -0.003316f, 0.085440f, 0.055318f, -0.027411f, -0.038647f, 0.090756f, 0.006341f, 0.045609f, 0.021797f, 0.084704f, 0.072841f, 0.056553f, 0.005953f, -0.047214f, -0.025898f, -0.035978f, 0.070488f, -0.033455f, -0.048125f, -0.025897f, 0.002609f, -0.001639f, 0.031219f, -0.030251f, 0.011268f, -0.142854f, 0.016155f, 0.022575f, 0.023641f, -0.059563f, -0.055424f, 0.017440f, + 0.050563f, -0.061496f, 0.024199f, -0.034830f, -0.027268f, -0.041192f, -0.003584f, 0.044351f, -0.029352f, 0.048701f, -0.012150f, 0.019288f, -0.089121f, -0.057060f, -0.002081f, 0.047797f, 0.033347f, -0.064582f, -0.069822f, -0.032133f, 0.006773f, 0.074613f, 0.030777f, -0.006761f, -0.051932f, -0.059776f, -0.020239f, 0.012965f, 0.052740f, -0.004222f, 0.017652f, 0.035590f, -0.013204f, 0.013127f, -0.034549f, 0.022016f, 0.012667f, -0.021086f, -0.017608f, 0.002361f, 0.027276f, -0.025439f, -0.000715f, 0.043425f, 0.007070f, 0.006767f, 0.000353f, -0.011745f, -0.028847f, 0.007994f, -0.032067f, 0.038613f, 0.033035f, 0.025364f, 0.003327f, -0.002474f, -0.037592f, 0.024598f, -0.007269f, 0.044988f, -0.010340f, -0.049578f, -0.030492f, -0.005604f, 0.049292f, 0.014399f, -0.010028f, -0.004327f, -0.038891f, -0.018310f, -0.015399f, -0.001673f, 0.022547f, 0.021983f, -0.039210f, -0.021160f, -0.023828f, -0.023021f, -0.008154f, 0.008222f, -0.002882f, -0.012770f, -0.023707f, -0.024005f, 0.003782f, -0.000475f, -0.012116f, -0.011905f, 0.022126f, 0.161650f, 0.016336f, -0.086391f, -0.194186f, -0.017673f, 0.115081f, 0.028865f, + 0.050180f, -0.005398f, 0.069983f, -0.011881f, 0.030744f, -0.016342f, 0.039638f, 0.055876f, 0.029807f, -0.027237f, -0.064138f, 0.075338f, 0.085586f, -0.019358f, -0.084837f, -0.051691f, 0.008822f, 0.049298f, 0.016366f, 0.017631f, 0.003097f, 0.012558f, 0.005623f, 0.012448f, -0.016718f, -0.098265f, -0.000621f, 0.060718f, 0.046651f, -0.019342f, 0.004671f, 0.037383f, 0.081805f, 0.050293f, 0.040080f, -0.048224f, -0.033760f, -0.008213f, -0.008955f, -0.073177f, 0.051789f, 0.030839f, 0.053804f, 0.110104f, -0.056665f, -0.036202f, -0.005133f, -0.030390f, -0.026489f, -0.047960f, 0.085245f, -0.051582f, -0.055853f, -0.057200f, -0.020059f, 0.109168f, 0.027820f, 0.042675f, -0.002386f, -0.008901f, -0.025272f, 0.068007f, 0.054691f, -0.027773f, -0.063683f, 0.022319f, -0.008378f, 0.026586f, -0.059709f, -0.022879f, -0.034751f, -0.044837f, 0.027516f, 0.045388f, 0.008370f, 0.002162f, -0.024069f, 0.013843f, -0.009428f, 0.042249f, 0.003316f, -0.013834f, -0.008302f, 0.014427f, 0.026789f, 0.030024f, -0.017154f, 0.018864f, 0.009562f, 0.010063f, -0.001374f, -0.030840f, -0.004125f, -0.024897f, -0.010166f, 0.002098f, + 0.004267f, 0.009260f, 0.009121f, 0.011194f, 0.027397f, 0.041166f, 0.036247f, -0.002574f, -0.008916f, 0.005387f, -0.017737f, 0.023078f, -0.024933f, -0.002188f, 0.020307f, -0.000387f, -0.004910f, -0.039670f, 0.020305f, -0.039563f, 0.013536f, -0.008195f, 0.006483f, -0.002644f, 0.004712f, -0.001009f, -0.025021f, 0.014976f, 0.012563f, -0.001191f, 0.008543f, -0.000525f, 0.007360f, -0.002417f, -0.006374f, -0.000321f, -0.001872f, 0.002314f, -0.001011f, 0.002371f, 0.001287f, -0.007618f, -0.003264f, -0.000784f, 0.006026f, 0.002501f, -0.001571f, -0.004100f, -0.002769f, -0.047289f, 0.004766f, 0.123336f, 0.096071f, 0.014282f, 0.007878f, -0.068009f, -0.129141f, -0.114176f, -0.054973f, 0.092430f, 0.102414f, 0.105057f, 0.059142f, -0.016204f, -0.066802f, -0.062916f, -0.040340f, 0.025907f, 0.041798f, 0.071664f, 0.007115f, -0.055763f, -0.046124f, -0.010887f, -0.046216f, -0.022439f, 0.010639f, 0.074229f, 0.107344f, 0.068567f, 0.033453f, 0.029622f, -0.066601f, -0.008657f, -0.134318f, -0.151314f, -0.093947f, -0.046161f, -0.040981f, 0.069665f, 0.110647f, 0.121495f, 0.110850f, 0.094972f, 0.040003f, 0.005715f, + -0.045874f, -0.013461f, -0.074116f, -0.132749f, -0.010605f, 0.011561f, 0.013152f, 0.043083f, 0.026437f, 0.043718f, -0.147542f, -0.081528f, -0.052566f, -0.086382f, -0.036078f, 0.062697f, -0.037577f, 0.041991f, 0.006156f, -0.039745f, 0.031748f, -0.033329f, 0.035657f, 0.040552f, -0.031226f, -0.064165f, -0.130727f, -0.127623f, -0.094523f, 0.045705f, 0.016546f, -0.018855f, 0.024668f, 0.006155f, 0.000631f, -0.061282f, -0.042407f, -0.113436f, -0.037238f, -0.042256f, -0.004388f, 0.081741f, 0.088302f, 0.012212f, 0.045660f, -0.027998f, -0.060989f, -0.110374f, -0.072151f, -0.068451f, -0.002259f, 0.032849f, 0.019292f, 0.026647f, 0.029520f, -0.020896f, 0.017933f, -0.019747f, 0.018601f, 0.003958f, -0.000575f, -0.004675f, 0.015382f, 0.012842f, 0.029266f, -0.007306f, -0.006790f, 0.026671f, 0.021678f, -0.222005f, -0.113538f, -0.059099f, 0.074740f, 0.017355f, 0.284895f, 0.292032f, 0.220130f, 0.284724f, 0.298311f, 0.271074f, 0.194573f, 0.176653f, 0.195978f, 0.078062f, -0.011625f, -0.121195f, -0.187389f, -0.258915f, -0.251603f, -0.375001f, -0.227579f, -0.147974f, -0.117591f, -0.167149f, -0.087988f, -0.024030f, + -0.125331f, -0.097221f, -0.102781f, -0.023132f, -0.061728f, -0.021874f, -0.083570f, -0.042323f, 0.049795f, 0.051700f, 0.015396f, -0.015307f, 0.054266f, 0.044094f, -0.126445f, 0.026417f, 0.085455f, 0.187295f, 0.137254f, 0.178329f, 0.073060f, 0.070961f, 0.296819f, 0.160900f, 0.303739f, 0.101891f, 0.284868f, 0.196885f, 0.248702f, 0.335678f, 0.317752f, 0.257890f, 0.289349f, 0.321693f, 0.349847f, 0.299040f, 0.344858f, 0.235539f, 0.349802f, 0.281129f, 0.249187f, 0.265982f, 0.145043f, 0.297753f, 0.143904f, 0.087613f, -0.109504f, 0.007474f, -0.161737f, -0.181434f, -0.277971f, -0.327811f, -0.504394f, -0.492155f, -0.465267f, -0.434693f, -0.410138f, -0.346207f, -0.422872f, -0.520031f, -0.513311f, -0.425356f, -0.450734f, -0.423410f, -0.425356f, -0.362574f, -0.395367f, -0.378614f, -0.282872f, -0.311882f, -0.240079f, -0.223702f, -0.206735f, -0.131344f, -0.170347f, -0.038450f, -0.063446f, 0.029524f, 0.039238f, 0.124291f, 0.183077f, 0.192472f, 0.221628f, 0.197403f, 0.296697f, 0.336968f, 0.333264f, 0.385802f, 0.402268f, 0.399224f, 0.303875f, 0.271955f, 0.238068f, 0.221390f, 0.214889f, 0.221298f, + 0.207331f, 0.158562f, 0.101663f, 0.116242f, 0.089243f, 0.070168f, 0.046279f, -0.035160f, -0.046788f, -0.048401f, -0.060196f, -0.072783f, -0.082835f, -0.057441f, -0.064093f, -0.050362f, -0.052182f, -0.044364f, -0.032377f, -0.038020f, -0.031643f, -0.029837f, -0.037579f, -0.033576f, -0.038148f, -0.028839f, -0.023912f, -0.031544f, -0.036839f, -0.012652f, -0.003020f, -0.002551f, -0.000954f, 0.002805f, 0.000016f, 0.001218f}, + {-0.014319f, -0.028270f, -0.004980f, 0.000408f, -0.006512f, -0.013286f, -0.004421f, 0.009792f, -0.015688f, -0.008620f, -0.005211f, -0.003035f, 0.004949f, -0.002204f, 0.005513f, 0.002567f, 0.004826f, -0.000507f, 0.005980f, -0.005204f, 0.000953f, -0.002264f, 0.001112f, 0.015142f, -0.003239f, -0.000895f, -0.007512f, 0.009374f, 0.005774f, 0.004529f, 0.011629f, -0.005921f, -0.003408f, 0.004022f, 0.010411f, -0.002777f, -0.000717f, -0.008384f, -0.009248f, -0.006133f, 0.006568f, -0.008152f, -0.007044f, -0.000847f, 0.009365f, -0.012660f, -0.002720f, -0.010570f, -0.005165f, -0.002995f, 0.001443f, -0.000914f, -0.007623f, 0.009795f, 0.001648f, 0.008820f, -0.003564f, -0.002181f, -0.010949f, -0.000193f, -0.003849f, -0.004078f, 0.006288f, 0.003588f, -0.001971f, 0.003438f, 0.006961f, -0.001939f, 0.002985f, -0.004947f, -0.002894f, -0.001161f, -0.004721f, 0.004231f, 0.001447f, 0.003234f, -0.007481f, 0.005413f, 0.003080f, 0.012149f, 0.007189f, -0.001931f, -0.007696f, -0.000576f, 0.001669f, 0.001008f, 0.002385f, -0.000303f, -0.002610f, 0.000158f, -0.001775f, 0.000068f, -0.002146f, 0.000818f, -0.002087f, -0.000084f, + 0.002328f, 0.000842f, 0.001201f, -0.001435f, -0.001049f, 0.001161f, 0.001601f, 0.000785f, -0.000238f, -0.023263f, -0.008386f, 0.006733f, -0.006188f, -0.002742f, -0.002632f, 0.003192f, -0.001212f, -0.006113f, 0.009673f, 0.008705f, 0.002871f, -0.001058f, 0.004470f, -0.011926f, -0.001776f, -0.011785f, -0.005978f, 0.008748f, -0.001480f, 0.001587f, -0.001218f, -0.001323f, 0.000173f, 0.018269f, 0.016672f, 0.007490f, 0.008889f, 0.010597f, -0.002063f, -0.001184f, -0.003662f, 0.009354f, -0.000932f, -0.003505f, 0.002597f, -0.005399f, 0.003704f, 0.006742f, -0.003453f, 0.007596f, 0.008524f, 0.016706f, -0.006546f, -0.007835f, 0.007119f, -0.004278f, 0.000218f, 0.003545f, -0.009714f, 0.000614f, -0.005092f, -0.005656f, 0.012826f, 0.007580f, 0.009227f, -0.005255f, -0.006990f, 0.004926f, -0.008134f, 0.005728f, 0.024770f, 0.001430f, 0.001684f, 0.005598f, 0.002404f, 0.002314f, 0.014093f, -0.007523f, -0.001931f, 0.002617f, 0.001825f, -0.007002f, -0.005179f, -0.007148f, -0.003422f, -0.002598f, 0.006472f, -0.001081f, 0.006501f, 0.006701f, -0.006716f, -0.007147f, -0.001862f, 0.004548f, 0.006269f, -0.007495f, + -0.001476f, -0.002213f, -0.005179f, -0.000609f, -0.004907f, 0.001294f, -0.000339f, 0.002635f, -0.001509f, 0.001023f, -0.001912f, -0.000464f, -0.001472f, -0.006812f, 0.007375f, 0.011862f, -0.005694f, 0.005866f, 0.018692f, 0.006227f, 0.004280f, -0.013095f, 0.010834f, 0.002822f, -0.016817f, 0.007105f, -0.004719f, -0.010126f, 0.004070f, -0.001433f, 0.003922f, 0.009743f, -0.010263f, -0.010814f, -0.004797f, 0.014635f, 0.000414f, 0.007248f, 0.015186f, -0.022613f, -0.018212f, 0.002933f, 0.011130f, -0.008192f, 0.000724f, 0.015046f, 0.003892f, -0.001976f, -0.004528f, 0.018011f, 0.002215f, -0.004419f, 0.002533f, -0.016392f, 0.001869f, -0.009052f, 0.008346f, 0.001433f, 0.008865f, -0.004484f, -0.002209f, 0.003978f, 0.000279f, 0.001140f, 0.000523f, 0.008473f, 0.006853f, -0.009345f, 0.005351f, 0.007497f, -0.012782f, 0.001502f, -0.005753f, 0.002380f, -0.002921f, -0.009913f, 0.000174f, 0.008506f, 0.007425f, 0.016433f, -0.010178f, 0.012720f, -0.008412f, -0.001716f, 0.007572f, -0.008268f, -0.012277f, -0.004464f, 0.000598f, -0.000796f, -0.000611f, -0.001348f, 0.002454f, 0.005226f, -0.007133f, -0.000111f, + 0.003424f, -0.000676f, 0.002943f, -0.005879f, -0.003345f, -0.002342f, -0.004289f, 0.001247f, -0.000913f, -0.003393f, 0.001872f, 0.001898f, -0.002806f, -0.004344f, -0.000208f, -0.001024f, 0.004483f, -0.000240f, -0.000708f, 0.000800f, 0.000980f, -0.000795f, -0.001315f, 0.002984f, 0.001020f, -0.002416f, -0.001191f, -0.001854f, 0.000293f, 0.037582f, 0.016848f, 0.022766f, -0.001843f, -0.006299f, -0.008210f, -0.008235f, 0.004478f, -0.006917f, 0.010481f, -0.001192f, 0.014383f, 0.000866f, 0.007608f, 0.009440f, 0.007300f, 0.006246f, 0.008277f, -0.027925f, -0.008257f, -0.002631f, -0.005887f, -0.005173f, -0.008791f, -0.019895f, 0.000893f, 0.013618f, -0.008389f, 0.008173f, -0.006738f, -0.009934f, -0.007493f, 0.001122f, -0.006325f, -0.002358f, -0.006486f, -0.000462f, 0.016432f, 0.000865f, 0.007385f, 0.010376f, 0.013509f, -0.006360f, 0.003163f, -0.003035f, -0.010429f, 0.011828f, -0.006628f, -0.000497f, -0.010323f, 0.007531f, -0.000104f, 0.000158f, -0.002852f, -0.004820f, 0.003491f, 0.010564f, -0.004443f, 0.005945f, 0.005641f, 0.004730f, 0.018186f, -0.018322f, -0.007744f, 0.000425f, -0.010087f, -0.013082f, + -0.005190f, -0.016008f, 0.002389f, 0.018723f, -0.012941f, -0.006192f, -0.014778f, 0.000930f, -0.004661f, -0.007089f, -0.017324f, 0.010149f, 0.013273f, 0.005230f, 0.009271f, -0.004743f, 0.001481f, -0.003524f, 0.003836f, 0.000132f, 0.009175f, -0.002412f, 0.003940f, -0.000221f, -0.002369f, 0.003165f, 0.002182f, 0.004175f, 0.003516f, -0.000641f, 0.000828f, 0.002264f, 0.000914f, 0.001757f, -0.000172f, -0.001801f, -0.003339f, 0.001607f, 0.000846f, -0.002319f, 0.001616f, 0.001760f, -0.000584f, 0.000739f, 0.002161f, -0.000717f, -0.001998f, -0.000725f, 0.011680f, 0.016655f, -0.009228f, 0.008657f, -0.007532f, -0.003680f, -0.002989f, -0.020692f, 0.015024f, -0.004407f, -0.002199f, 0.023811f, 0.014833f, 0.015903f, -0.006478f, 0.000575f, 0.002848f, -0.003709f, 0.005310f, -0.012197f, -0.000319f, -0.008358f, 0.009738f, -0.009501f, -0.006516f, -0.001034f, 0.001663f, -0.011724f, 0.002253f, 0.001196f, 0.015349f, 0.000066f, -0.020967f, 0.012039f, 0.011325f, 0.016085f, -0.002560f, 0.004015f, -0.011595f, -0.008793f, -0.003659f, -0.008538f, 0.003336f, 0.002171f, -0.003164f, -0.001323f, 0.008776f, 0.013618f, + -0.018708f, -0.004092f, -0.000007f, -0.007721f, -0.007991f, 0.012314f, -0.009952f, 0.004618f, -0.009767f, -0.012991f, -0.009633f, -0.006443f, 0.004472f, 0.001768f, 0.023141f, -0.003965f, -0.006209f, 0.006850f, -0.006949f, -0.002081f, -0.006169f, 0.006402f, -0.005708f, 0.008265f, -0.004155f, -0.003873f, 0.005717f, 0.013852f, 0.003866f, -0.013096f, 0.000080f, -0.006477f, -0.013232f, 0.003710f, 0.009371f, -0.003158f, 0.002171f, 0.003220f, 0.000465f, -0.001470f, 0.004826f, 0.000053f, -0.005362f, -0.000004f, -0.001929f, -0.001046f, -0.002786f, 0.004356f, -0.001037f, -0.003657f, -0.003866f, 0.000495f, 0.004074f, -0.001870f, -0.000272f, -0.005471f, 0.000512f, 0.000928f, 0.001837f, -0.001030f, -0.004588f, -0.002440f, 0.004036f, -0.001694f, -0.004952f, 0.001955f, -0.028745f, 0.027649f, 0.014841f, -0.016497f, -0.016637f, 0.006821f, 0.021949f, -0.000318f, 0.006439f, 0.025560f, 0.008572f, 0.007695f, -0.004319f, 0.013322f, 0.012176f, 0.014033f, -0.025300f, -0.015540f, -0.015349f, 0.012120f, 0.010458f, 0.013330f, 0.000639f, -0.015444f, 0.006351f, -0.002343f, 0.006989f, -0.022201f, 0.008581f, 0.013450f, + -0.010412f, 0.005817f, 0.010885f, 0.003048f, -0.000323f, 0.002333f, -0.003487f, 0.019436f, 0.013211f, 0.010399f, 0.000393f, 0.006754f, 0.015005f, -0.013392f, -0.007201f, 0.000661f, 0.019840f, 0.012691f, 0.007811f, -0.014943f, 0.000558f, 0.010157f, 0.011852f, -0.004169f, 0.003679f, 0.011570f, 0.014335f, 0.004523f, 0.013256f, 0.005258f, -0.001472f, -0.012227f, -0.000068f, -0.020363f, -0.008331f, -0.009769f, 0.001717f, 0.006714f, -0.011783f, -0.004779f, -0.021524f, 0.009368f, -0.005967f, -0.000157f, 0.011441f, 0.016658f, 0.020144f, 0.002500f, -0.002078f, -0.012489f, -0.003715f, 0.006379f, 0.006894f, -0.013251f, 0.004179f, -0.005963f, 0.004876f, 0.000889f, -0.004456f, 0.000085f, 0.002386f, -0.004200f, 0.001900f, -0.001109f, -0.004996f, -0.002577f, -0.003137f, 0.003163f, 0.003876f, -0.000674f, -0.002890f, 0.002082f, -0.002216f, -0.001605f, -0.003881f, -0.000537f, -0.000817f, -0.004541f, 0.003776f, 0.024357f, 0.007637f, -0.004131f, -0.011038f, -0.028862f, -0.013989f, 0.017712f, -0.006184f, -0.026525f, -0.007065f, -0.004186f, 0.004083f, 0.014708f, 0.022457f, -0.001282f, 0.006634f, -0.005103f, + 0.011210f, -0.012481f, -0.013292f, -0.014307f, -0.025452f, 0.013653f, 0.007797f, -0.021256f, 0.000696f, -0.015512f, -0.005893f, 0.013774f, 0.007820f, 0.011248f, -0.003110f, -0.002912f, -0.003612f, 0.024251f, 0.018898f, 0.020014f, -0.009038f, -0.017047f, 0.013559f, -0.002268f, -0.006005f, 0.017250f, 0.003116f, 0.016971f, -0.000490f, 0.009500f, -0.011856f, -0.000597f, 0.008568f, -0.036293f, -0.005429f, 0.001771f, -0.026537f, 0.006919f, -0.006726f, 0.024832f, 0.015871f, -0.015187f, 0.001253f, 0.022671f, -0.002296f, 0.011557f, -0.007556f, 0.015585f, -0.007188f, 0.003084f, -0.005957f, 0.000388f, 0.010960f, -0.014753f, 0.015981f, 0.008169f, 0.009202f, 0.002605f, 0.021222f, -0.008313f, -0.024162f, 0.004192f, 0.016854f, -0.007952f, -0.014983f, -0.010864f, -0.007622f, 0.017370f, 0.000437f, -0.007453f, 0.000787f, 0.000413f, -0.003313f, -0.003338f, 0.001156f, 0.003335f, -0.001876f, -0.002288f, -0.001197f, 0.003713f, -0.001877f, -0.006544f, 0.001898f, -0.007244f, 0.006686f, 0.004286f, -0.000013f, -0.000756f, 0.001839f, -0.002122f, 0.003006f, 0.000267f, 0.002105f, 0.000368f, 0.000979f, 0.007661f, + 0.002761f, -0.004053f, 0.002250f, -0.058507f, -0.012362f, 0.031373f, -0.025322f, -0.009184f, 0.026673f, 0.010039f, -0.008439f, 0.002818f, -0.022057f, 0.019695f, -0.002481f, -0.035581f, 0.002566f, -0.001866f, 0.013470f, 0.013200f, -0.007049f, -0.027871f, -0.011921f, -0.010641f, 0.000614f, -0.014860f, -0.008144f, -0.018949f, -0.005424f, 0.020662f, -0.016941f, -0.008516f, -0.006498f, -0.011028f, -0.011625f, -0.015809f, 0.010827f, 0.002202f, 0.013460f, 0.002357f, -0.009882f, -0.015317f, -0.015100f, -0.003106f, 0.010104f, 0.014879f, -0.005220f, -0.013536f, 0.014261f, 0.005933f, -0.021272f, -0.023727f, -0.048378f, -0.004267f, -0.015432f, -0.009342f, 0.007214f, 0.007375f, 0.004470f, 0.021765f, -0.002229f, -0.010369f, -0.001271f, -0.011175f, 0.024841f, 0.013202f, -0.004782f, 0.013275f, -0.013913f, 0.006974f, 0.005750f, -0.013619f, -0.005949f, -0.012211f, 0.008789f, 0.006171f, -0.022474f, 0.014875f, 0.022824f, -0.001471f, -0.001047f, -0.023034f, -0.008932f, 0.010178f, -0.007115f, 0.006732f, 0.022631f, -0.007534f, 0.005018f, 0.002308f, 0.001806f, -0.007125f, 0.001381f, -0.001137f, -0.009378f, -0.005656f, + -0.000805f, 0.003378f, 0.000604f, 0.002665f, -0.009780f, 0.001199f, -0.005209f, 0.002527f, -0.005636f, -0.005478f, -0.003291f, -0.000306f, 0.001307f, -0.004180f, 0.001365f, 0.002445f, -0.000520f, 0.001038f, 0.004260f, 0.002395f, -0.007745f, -0.005109f, -0.002371f, 0.000870f, 0.002992f, -0.001207f, 0.003035f, 0.010445f, 0.038804f, -0.018110f, 0.014747f, -0.009486f, -0.000091f, 0.022268f, -0.006419f, -0.009885f, -0.005246f, -0.002048f, 0.003914f, 0.015148f, 0.051132f, -0.002790f, 0.003086f, 0.014212f, 0.003312f, 0.000264f, -0.023919f, -0.024863f, 0.003833f, 0.003431f, -0.015639f, -0.007956f, -0.003607f, 0.014196f, -0.006282f, 0.002777f, -0.000326f, 0.006213f, -0.006404f, 0.029881f, 0.016578f, -0.013922f, 0.016418f, 0.014897f, -0.018067f, 0.003184f, 0.007687f, 0.006006f, -0.005029f, -0.006095f, 0.024860f, -0.021746f, 0.009207f, 0.027529f, -0.009597f, 0.003449f, 0.017618f, -0.001899f, 0.015317f, 0.008461f, 0.000217f, 0.008453f, 0.013136f, 0.018126f, 0.011358f, 0.001499f, -0.000694f, -0.012450f, -0.013842f, 0.000546f, 0.001498f, -0.043370f, 0.028304f, -0.006636f, -0.013462f, -0.015058f, + -0.031862f, -0.035924f, -0.023390f, 0.004386f, 0.017748f, -0.006496f, 0.002150f, -0.002884f, 0.017630f, -0.006582f, -0.014369f, 0.008154f, 0.004191f, -0.005950f, 0.002114f, 0.012075f, -0.011728f, 0.002341f, -0.014898f, -0.004957f, -0.006729f, 0.003567f, -0.001807f, 0.007634f, 0.004654f, 0.001623f, -0.002231f, 0.003889f, 0.005117f, -0.000116f, -0.010839f, 0.006029f, -0.000633f, 0.009177f, 0.008648f, 0.004373f, -0.004522f, 0.007951f, 0.001608f, -0.001248f, -0.000413f, 0.000474f, -0.007320f, 0.007977f, -0.000886f, -0.005274f, 0.007514f, 0.015331f, -0.003204f, -0.003268f, 0.007695f, -0.003100f, -0.005668f, -0.002047f, 0.052518f, 0.052781f, -0.001521f, -0.043632f, 0.008505f, 0.008981f, -0.005039f, 0.011484f, 0.006539f, 0.003865f, -0.000524f, -0.007335f, 0.042607f, 0.007942f, -0.006876f, -0.047421f, -0.026713f, 0.011287f, -0.002968f, -0.016436f, -0.028493f, 0.004063f, 0.004812f, 0.007403f, -0.007115f, -0.031128f, -0.033323f, 0.036200f, 0.034160f, 0.010765f, 0.031371f, -0.026725f, 0.003638f, 0.014166f, -0.005665f, -0.016901f, -0.030600f, -0.015016f, 0.005399f, -0.001179f, -0.014364f, 0.014890f, + 0.000270f, 0.014458f, 0.011617f, 0.000925f, -0.032898f, -0.018990f, -0.015476f, -0.002524f, 0.003377f, 0.004482f, -0.005601f, -0.009175f, 0.002258f, 0.005447f, -0.029418f, -0.007273f, 0.004804f, 0.006752f, -0.013360f, -0.036655f, -0.008596f, -0.009110f, 0.027164f, -0.000917f, 0.012222f, -0.012162f, -0.009339f, -0.016329f, -0.018410f, -0.010640f, 0.002967f, -0.001237f, 0.022804f, -0.013412f, 0.003953f, 0.026502f, -0.001842f, 0.013311f, 0.011793f, 0.025751f, 0.005685f, -0.007293f, -0.013119f, -0.011384f, -0.004519f, 0.015629f, 0.002391f, 0.015755f, 0.008295f, -0.001075f, -0.000423f, 0.000915f, 0.001260f, -0.006808f, -0.008732f, 0.000178f, -0.002168f, -0.000684f, 0.002527f, -0.001536f, 0.001978f, -0.009980f, -0.002367f, 0.006386f, -0.000376f, 0.004099f, -0.017364f, -0.001783f, -0.000711f, -0.003225f, 0.003535f, 0.002872f, 0.002212f, 0.003191f, 0.003947f, -0.007963f, 0.009490f, -0.006103f, 0.022876f, -0.011761f, 0.003997f, -0.008860f, 0.001771f, 0.006012f, -0.014396f, -0.009740f, -0.025701f, -0.028417f, -0.018664f, -0.007308f, -0.001302f, 0.000712f, -0.015725f, -0.014569f, -0.029468f, 0.014178f, + -0.029533f, -0.038005f, 0.024549f, -0.022782f, -0.029002f, 0.027017f, 0.005132f, -0.006089f, 0.028976f, 0.016731f, -0.022514f, 0.020825f, -0.057406f, -0.003873f, -0.014753f, -0.006118f, -0.026989f, 0.047253f, 0.022123f, -0.013823f, 0.006936f, 0.014904f, -0.009889f, 0.016453f, 0.000248f, 0.000746f, -0.013499f, 0.015980f, 0.018392f, 0.024881f, -0.038945f, -0.001334f, -0.000270f, 0.011553f, -0.017658f, -0.006716f, -0.017973f, -0.017642f, 0.030954f, 0.010032f, -0.023190f, 0.011975f, -0.014347f, -0.015192f, -0.024903f, -0.045235f, 0.011819f, 0.029931f, 0.002028f, 0.030150f, 0.040906f, -0.002411f, -0.016760f, -0.038757f, 0.003021f, -0.004945f, 0.002478f, -0.009656f, 0.008010f, -0.017020f, 0.036623f, 0.020302f, 0.032036f, 0.006517f, -0.003952f, -0.009724f, 0.013078f, 0.015145f, 0.006817f, -0.002740f, -0.004584f, 0.001456f, 0.017238f, -0.003019f, 0.007228f, -0.010850f, 0.004694f, -0.017945f, 0.001752f, 0.002238f, -0.007904f, 0.016957f, 0.009803f, -0.004338f, -0.011140f, -0.009730f, -0.003214f, -0.000887f, 0.005444f, -0.011395f, 0.002951f, 0.002056f, -0.000834f, -0.007872f, 0.002987f, -0.017092f, + -0.003462f, -0.004048f, -0.004773f, 0.002964f, -0.000311f, -0.032771f, 0.004391f, -0.073099f, -0.049110f, -0.035205f, 0.019051f, 0.036257f, -0.051715f, 0.011998f, 0.036662f, 0.022645f, -0.000524f, 0.013420f, 0.034567f, -0.015879f, -0.002067f, -0.010070f, 0.001019f, -0.022463f, 0.015969f, 0.000331f, 0.001888f, 0.005900f, 0.046335f, -0.002349f, -0.020444f, -0.019914f, 0.011045f, 0.034111f, -0.013779f, -0.034554f, 0.010255f, 0.034615f, 0.020209f, -0.004675f, 0.016809f, 0.011351f, 0.016195f, 0.003595f, 0.013718f, 0.023478f, -0.002933f, -0.039602f, 0.001983f, 0.012204f, -0.037108f, -0.027098f, 0.036296f, 0.028473f, -0.028028f, -0.018371f, 0.008865f, -0.001888f, 0.017803f, 0.044134f, -0.009491f, -0.008554f, 0.008392f, -0.002293f, 0.016341f, 0.008155f, -0.016093f, -0.012652f, -0.006075f, 0.012918f, 0.011745f, -0.011761f, -0.031993f, -0.005658f, -0.048143f, 0.045538f, 0.007680f, -0.008374f, 0.004334f, 0.018860f, -0.000980f, -0.021176f, 0.007857f, -0.009218f, -0.013727f, 0.010703f, -0.002881f, -0.020957f, -0.034440f, -0.011267f, -0.014045f, 0.028420f, -0.004539f, 0.009365f, 0.005409f, 0.003458f, + -0.002679f, -0.002492f, 0.004434f, -0.007657f, 0.001237f, 0.010278f, -0.001246f, -0.005410f, -0.003088f, -0.023501f, -0.007254f, -0.000652f, -0.004413f, -0.017115f, -0.015353f, -0.006465f, -0.003516f, -0.001559f, -0.005028f, -0.000926f, 0.000284f, 0.012856f, 0.004551f, -0.002138f, -0.005235f, 0.002005f, -0.004631f, -0.003918f, 0.008348f, -0.004229f, -0.009993f, -0.002948f, -0.007532f, 0.000884f, -0.009263f, 0.000246f, 0.006110f, 0.001914f, -0.008889f, -0.002965f, -0.028243f, -0.001222f, 0.004885f, -0.034620f, -0.009098f, 0.026028f, 0.033856f, 0.023961f, 0.063178f, 0.038109f, 0.057248f, 0.021371f, 0.015085f, -0.029580f, 0.032129f, -0.010818f, -0.003621f, -0.023688f, -0.015775f, 0.031044f, -0.010170f, 0.070410f, 0.032757f, 0.020317f, -0.003773f, 0.016280f, -0.011087f, -0.032872f, -0.016633f, -0.020405f, 0.014830f, -0.019241f, -0.000448f, -0.020590f, 0.012038f, 0.028640f, 0.025845f, -0.001709f, 0.037380f, 0.031232f, 0.001447f, -0.010887f, -0.014303f, -0.025634f, -0.008830f, 0.058944f, 0.022843f, 0.067855f, -0.021897f, 0.000333f, -0.002328f, 0.015814f, 0.054441f, 0.018652f, 0.001277f, 0.035005f, + 0.040095f, 0.042369f, -0.003874f, -0.025059f, -0.009245f, -0.006931f, -0.007270f, 0.028082f, 0.019134f, 0.026650f, 0.040652f, -0.025397f, 0.061509f, -0.041361f, -0.077647f, -0.012016f, -0.024264f, 0.015801f, 0.037384f, 0.018313f, -0.021019f, -0.002156f, -0.022823f, -0.017027f, -0.011337f, 0.000272f, 0.030904f, 0.005211f, -0.008854f, 0.004834f, 0.002232f, 0.009271f, 0.009791f, 0.006725f, 0.012032f, 0.003278f, 0.007528f, 0.002769f, 0.008358f, 0.000524f, -0.025105f, -0.009673f, -0.000379f, -0.023344f, 0.002451f, -0.024373f, -0.012931f, -0.014802f, -0.013800f, -0.011558f, -0.008588f, -0.003274f, 0.001279f, 0.006984f, 0.025518f, 0.003471f, -0.016376f, 0.007425f, 0.001377f, 0.023186f, -0.004537f, 0.009999f, -0.000341f, 0.000284f, -0.012601f, 0.002920f, 0.036751f, 0.059756f, -0.029753f, -0.023561f, 0.021494f, -0.018027f, -0.003278f, -0.008576f, 0.008023f, 0.025950f, 0.028141f, 0.041348f, -0.045666f, 0.051026f, -0.018587f, 0.004170f, -0.023771f, 0.020837f, 0.038755f, 0.015291f, 0.007086f, 0.002052f, 0.047214f, 0.010960f, -0.001690f, -0.016340f, -0.007352f, -0.049358f, -0.006705f, -0.024399f, + -0.058667f, 0.004213f, -0.003664f, 0.023099f, -0.061102f, -0.012771f, 0.014148f, 0.021698f, 0.050592f, -0.014825f, 0.014619f, 0.026818f, 0.004016f, -0.007969f, 0.014180f, -0.014404f, -0.003641f, -0.077068f, 0.006510f, -0.033352f, -0.038318f, -0.043403f, 0.016993f, -0.069124f, 0.022308f, -0.026432f, -0.034446f, -0.047293f, 0.041785f, 0.044783f, 0.044582f, 0.008705f, 0.007995f, 0.042003f, -0.058972f, -0.005793f, -0.018341f, 0.023795f, -0.070030f, -0.024059f, -0.007447f, 0.022355f, 0.017511f, 0.014345f, 0.027956f, -0.026115f, 0.010084f, -0.031522f, -0.009529f, -0.018899f, -0.007629f, -0.006426f, 0.000632f, -0.029870f, 0.013409f, 0.018762f, -0.003463f, 0.001320f, -0.014869f, -0.004578f, 0.014139f, -0.019265f, -0.000615f, 0.009477f, -0.024083f, 0.010952f, -0.021603f, 0.000301f, 0.013173f, 0.003230f, -0.017750f, -0.011466f, 0.006562f, -0.009700f, 0.010661f, 0.007689f, 0.012332f, -0.001548f, -0.015575f, 0.029372f, -0.014130f, -0.006947f, -0.019160f, 0.013159f, -0.006665f, 0.001955f, -0.017793f, 0.002450f, -0.021572f, -0.003282f, 0.015454f, -0.004838f, -0.009280f, -0.022292f, 0.002382f, 0.003113f, + -0.003183f, -0.029290f, -0.055293f, -0.000948f, -0.019828f, 0.065375f, 0.013483f, 0.046255f, -0.015287f, 0.063124f, -0.039802f, -0.074253f, 0.016600f, 0.012638f, 0.008304f, -0.036889f, -0.042246f, -0.032916f, 0.012163f, -0.033152f, 0.014421f, -0.017563f, 0.049335f, -0.016102f, -0.007650f, 0.035747f, 0.000936f, -0.088862f, -0.037117f, -0.001152f, 0.058419f, -0.006681f, -0.018544f, -0.050927f, 0.008685f, -0.012527f, -0.044031f, -0.051898f, -0.006185f, 0.009573f, -0.018043f, -0.019727f, -0.052143f, 0.034103f, -0.013048f, 0.012295f, -0.026030f, 0.001202f, 0.015282f, 0.009477f, 0.045754f, 0.000527f, -0.015929f, -0.059598f, -0.021172f, 0.028902f, -0.040973f, -0.020755f, 0.015002f, 0.032896f, 0.025498f, 0.065511f, 0.049825f, 0.001017f, 0.037788f, 0.038933f, 0.013131f, 0.001616f, 0.022637f, -0.019311f, 0.098679f, -0.045333f, -0.107963f, 0.028783f, -0.091909f, -0.003450f, -0.071956f, -0.000389f, 0.087853f, 0.011131f, -0.041969f, 0.014056f, 0.014880f, -0.027251f, -0.022558f, -0.030845f, 0.006664f, -0.009233f, 0.028122f, -0.022116f, 0.018783f, -0.037126f, 0.010377f, -0.001107f, -0.006145f, -0.008320f, + 0.025497f, 0.049009f, 0.015253f, 0.020016f, 0.033741f, 0.010467f, -0.033749f, 0.010010f, -0.012523f, 0.022754f, -0.007033f, -0.010307f, -0.001302f, -0.002080f, -0.009071f, -0.027568f, -0.018239f, -0.012083f, -0.001530f, 0.004201f, -0.002011f, -0.017369f, -0.039744f, -0.024598f, 0.006000f, -0.006736f, -0.000678f, -0.014921f, 0.005382f, 0.029033f, 0.041344f, -0.062665f, -0.041683f, -0.025881f, -0.022002f, 0.025206f, 0.039125f, -0.023008f, 0.002610f, 0.034921f, -0.070684f, 0.005230f, 0.016569f, -0.053319f, 0.027623f, -0.017750f, 0.024370f, 0.009176f, 0.027464f, 0.002983f, -0.034554f, 0.035795f, -0.045035f, -0.009804f, 0.087221f, -0.035781f, 0.031955f, -0.020757f, 0.035913f, 0.032743f, -0.011442f, -0.038250f, 0.040647f, 0.105727f, -0.057928f, 0.015056f, -0.076882f, 0.038897f, 0.023398f, -0.041653f, 0.046150f, 0.004333f, -0.092316f, 0.013253f, 0.004541f, 0.042142f, -0.011304f, -0.006551f, -0.048503f, -0.047224f, -0.024227f, 0.115246f, -0.017593f, 0.058474f, -0.051389f, 0.038437f, 0.018862f, -0.010687f, -0.039505f, -0.007440f, 0.032535f, 0.064716f, -0.023470f, -0.021890f, -0.006848f, 0.012574f, + 0.056443f, -0.014477f, -0.013320f, -0.042060f, 0.012894f, -0.063249f, -0.028052f, 0.044816f, 0.054525f, 0.005930f, -0.004485f, -0.029803f, -0.048441f, -0.140948f, 0.087847f, 0.033137f, 0.050474f, 0.004709f, -0.045736f, 0.050100f, -0.028310f, 0.021032f, 0.030036f, 0.028920f, 0.067835f, -0.001578f, 0.015893f, 0.018434f, -0.007528f, -0.029993f, -0.009777f, 0.049210f, 0.030634f, -0.028091f, -0.005988f, -0.019217f, -0.004762f, 0.022796f, 0.006943f, -0.032834f, -0.020902f, 0.030740f, 0.007349f, -0.010173f, 0.016227f, -0.027834f, -0.016645f, -0.006069f, 0.013692f, 0.021584f, 0.014360f, 0.003839f, 0.017441f, -0.014331f, -0.018264f, 0.002915f, -0.001672f, -0.025067f, 0.003128f, -0.025849f, -0.000815f, -0.015966f, -0.003558f, 0.003574f, -0.012937f, -0.024783f, 0.008477f, -0.059247f, 0.041389f, 0.040516f, -0.080275f, 0.007552f, -0.042175f, 0.004990f, -0.088375f, 0.088608f, 0.077273f, -0.008172f, -0.040316f, -0.014252f, -0.016157f, 0.042857f, -0.044203f, 0.055345f, -0.073895f, -0.043117f, 0.021079f, 0.025898f, 0.006009f, 0.024989f, 0.070401f, 0.019979f, 0.032482f, 0.008333f, 0.033754f, 0.023683f, + -0.015802f, 0.006701f, 0.028589f, -0.002327f, -0.002405f, 0.055871f, 0.025260f, 0.073428f, -0.006724f, 0.041690f, 0.000143f, -0.054337f, 0.055214f, -0.028918f, -0.006165f, 0.016609f, -0.051138f, -0.035014f, 0.019897f, 0.079857f, 0.043887f, 0.028547f, -0.103436f, -0.024558f, -0.072520f, -0.001199f, 0.116063f, 0.075810f, 0.087814f, 0.006339f, -0.085147f, 0.025926f, 0.086431f, 0.017558f, -0.021602f, 0.076312f, 0.008337f, 0.050800f, -0.132444f, -0.110525f, 0.079009f, -0.006357f, -0.035630f, -0.084848f, -0.018319f, -0.032289f, 0.036033f, 0.032681f, 0.039453f, 0.039786f, -0.016690f, 0.011905f, 0.073208f, 0.066883f, 0.070713f, 0.005121f, 0.101600f, 0.049934f, -0.017973f, -0.040996f, 0.000664f, -0.020602f, 0.006081f, 0.050865f, -0.008098f, 0.001459f, 0.037656f, 0.040653f, 0.004043f, -0.000624f, 0.016115f, 0.045100f, 0.016225f, 0.020694f, 0.031310f, 0.010294f, 0.024373f, -0.002033f, -0.013664f, -0.006857f, -0.005187f, 0.001044f, 0.032371f, -0.013250f, 0.005760f, -0.027363f, 0.039166f, 0.018052f, 0.017151f, -0.001386f, 0.019793f, -0.000918f, 0.067075f, 0.016290f, 0.068864f, -0.019563f, + 0.060249f, 0.026648f, 0.008958f, 0.025229f, 0.025966f, 0.028408f, -0.007784f, -0.006392f, 0.041242f, 0.013222f, 0.034566f, -0.076695f, 0.045212f, 0.060324f, 0.004576f, 0.020529f, -0.054663f, 0.042566f, -0.024892f, 0.020327f, 0.001931f, 0.000036f, 0.036063f, -0.011333f, 0.023451f, -0.007734f, -0.043921f, 0.011521f, -0.003120f, 0.048827f, 0.042729f, 0.060751f, 0.020213f, -0.046896f, -0.038642f, 0.039334f, 0.044325f, 0.020318f, 0.003771f, 0.013790f, -0.012297f, -0.038541f, 0.006346f, -0.014470f, 0.053968f, 0.037519f, 0.032847f, 0.042594f, 0.043825f, -0.061124f, 0.066716f, 0.065452f, 0.047999f, -0.033040f, -0.029320f, -0.042638f, 0.058059f, 0.033713f, 0.095495f, -0.058697f, -0.057993f, -0.045011f, -0.084968f, -0.022491f, 0.091205f, 0.014145f, 0.071550f, -0.077077f, -0.082287f, 0.017436f, 0.051709f, -0.072129f, 0.010882f, -0.057551f, 0.022387f, -0.066367f, -0.005586f, 0.030824f, 0.032727f, -0.060410f, 0.023230f, -0.046084f, -0.091209f, -0.003527f, 0.107049f, 0.055135f, 0.043081f, -0.030578f, -0.077397f, 0.116312f, 0.094008f, 0.025997f, -0.105565f, -0.004675f, -0.025230f, 0.074271f, + 0.037659f, 0.045812f, -0.055199f, 0.040454f, -0.025122f, 0.026287f, -0.038453f, 0.012783f, -0.042962f, 0.060542f, -0.012788f, 0.009433f, -0.073717f, 0.020507f, 0.008379f, -0.004027f, -0.017156f, 0.014181f, 0.006840f, 0.006976f, -0.046040f, 0.018350f, 0.045158f, 0.002236f, 0.026771f, 0.022779f, 0.018345f, 0.002380f, 0.008107f, 0.000271f, 0.001456f, 0.001332f, -0.015471f, -0.002341f, 0.013394f, -0.000950f, 0.027825f, 0.023840f, -0.014292f, -0.003265f, 0.012154f, 0.005035f, 0.021108f, -0.042812f, -0.001293f, -0.147437f, -0.030258f, -0.002958f, 0.001731f, 0.052425f, -0.137805f, -0.014867f, 0.062239f, -0.100750f, 0.022786f, -0.022295f, 0.118207f, 0.063439f, -0.072557f, 0.018670f, 0.079425f, 0.008939f, -0.031959f, 0.027068f, 0.018841f, 0.011291f, -0.001823f, -0.007117f, 0.005799f, 0.013843f, 0.026940f, 0.082805f, 0.065249f, 0.072509f, 0.048521f, 0.091096f, 0.043450f, 0.093121f, 0.037472f, 0.082693f, 0.000575f, 0.051654f, 0.045140f, 0.051191f, 0.037934f, -0.002910f, 0.014431f, -0.062055f, -0.038147f, 0.120394f, 0.000847f, -0.047029f, -0.014059f, 0.038317f, 0.062348f, 0.129491f, + -0.018085f, -0.070092f, -0.036367f, -0.051477f, 0.072633f, 0.084638f, 0.093264f, 0.029923f, -0.004136f, 0.064331f, -0.108791f, 0.099102f, 0.036544f, -0.051150f, -0.001708f, -0.167405f, 0.003240f, -0.110414f, -0.154867f, -0.037662f, -0.091343f, -0.038619f, 0.173814f, 0.160001f, 0.149024f, -0.117187f, -0.012862f, -0.012758f, 0.117005f, 0.185279f, -0.041920f, -0.051421f, 0.101486f, 0.105740f, 0.089593f, -0.010081f, -0.015363f, -0.050446f, -0.065129f, 0.010022f, -0.024452f, 0.028978f, 0.043625f, 0.039280f, 0.026002f, 0.003266f, 0.016568f, 0.050042f, 0.007671f, 0.000892f, -0.014785f, 0.003406f, 0.002584f, 0.014039f, 0.009384f, 0.010677f, 0.050352f, -0.003893f, -0.031238f, 0.031887f, 0.036382f, 0.009256f, 0.058584f, 0.014597f, 0.027947f, 0.065482f, 0.086081f, 0.064072f, 0.045711f, 0.019343f, 0.007997f, 0.025872f, 0.058779f, 0.026751f, 0.060284f, 0.045805f, 0.028579f, 0.043127f, 0.014974f, 0.058369f, 0.049827f, 0.041709f, 0.062103f, 0.036634f, 0.011104f, 0.018085f, -0.003926f, -0.040983f, 0.105886f, 0.128672f, -0.106579f, -0.097764f, 0.032888f, 0.112489f, 0.002795f, -0.052732f, + 0.000369f, 0.030522f, 0.033756f, -0.093051f, 0.034590f, -0.012427f, 0.049104f, -0.051095f, -0.024600f, -0.059871f, 0.063191f, -0.008626f, -0.027956f, -0.055982f, 0.040995f, 0.024205f, -0.009712f, -0.047315f, 0.022105f, 0.020948f, 0.011145f, -0.041809f, -0.006063f, -0.002100f, 0.048304f, -0.036441f, -0.008920f, -0.053291f, -0.014067f, 0.018438f, 0.042386f, -0.055448f, -0.021228f, 0.059100f, 0.050541f, -0.015521f, -0.035831f, -0.000219f, -0.018316f, 0.049378f, -0.028290f, -0.015556f, 0.023811f, 0.017945f, 0.030077f, -0.027078f, 0.008475f, -0.037317f, 0.043043f, 0.051068f, 0.024104f, 0.008005f, -0.040042f, 0.045395f, -0.032227f, 0.070251f, -0.051456f, 0.056484f, -0.088595f, 0.059859f, 0.007418f, -0.004994f, -0.062359f, -0.018382f, 0.020116f, -0.015695f, 0.005916f, -0.015163f, 0.017464f, -0.007541f, 0.019556f, -0.019116f, -0.026801f, -0.016681f, 0.018565f, 0.001690f, -0.002488f, -0.004344f, -0.014905f, 0.009526f, 0.021729f, -0.010993f, -0.002978f, 0.001730f, 0.002792f, -0.000775f, 0.003694f, -0.003469f, 0.015654f, 0.000921f, 0.020341f, -0.018231f, 0.003205f, -0.008148f, 0.020510f, -0.021924f, + 0.020186f, -0.022606f, 0.013422f, 0.007369f, 0.025598f, -0.005539f, 0.024192f, -0.021968f, -0.018463f, -0.003059f, 0.039466f, -0.018729f, 0.030295f, -0.010335f, 0.003704f, 0.005138f, 0.021142f, -0.008698f, 0.010332f, 0.005035f, -0.000635f, -0.000566f, 0.006571f, -0.001403f, -0.014800f, 0.028867f, -0.017602f, 0.005664f, -0.014367f, 0.010082f, -0.013715f, 0.015658f, -0.020326f, 0.023623f, -0.019073f, 0.020318f, -0.025596f, 0.023158f, -0.032192f, 0.031050f, -0.020326f, 0.022568f, -0.023891f, 0.024026f, -0.024334f, 0.025087f, -0.022964f, 0.024040f, -0.003417f, -0.022962f, 0.102616f, 0.109204f, -0.064262f, -0.038061f, 0.021650f, 0.104289f, 0.064787f, 0.038864f, 0.037375f, -0.016604f, -0.043644f, -0.013206f, 0.024501f, -0.000376f, -0.010285f, 0.031113f, 0.000536f, 0.021929f, 0.002683f, -0.011663f, -0.039107f, -0.010378f, -0.002295f, 0.002887f, -0.001555f, -0.031771f, 0.035459f, 0.005918f, -0.014285f, -0.000803f, -0.001105f, 0.000499f, 0.022886f, 0.042053f, 0.017926f, 0.004250f, -0.015154f, -0.021771f, -0.005659f, 0.013660f, 0.028178f, 0.037955f, -0.021200f, -0.020930f, 0.004722f, 0.038367f, + 0.017294f, 0.008549f, -0.017354f, -0.034837f, 0.029688f, -0.006137f, 0.000818f, 0.002006f, 0.009550f, 0.009164f, -0.004244f, -0.001285f, -0.022729f, 0.003471f, 0.020003f, -0.009530f, 0.011941f, -0.006731f, -0.016205f, 0.010258f, -0.003098f, 0.005539f, -0.001262f, 0.017390f, 0.011785f, -0.025988f, 0.007633f, 0.001215f, -0.047129f, -0.062619f, 0.001765f, 0.003636f, 0.014232f, 0.038081f, 0.004147f, -0.016815f, -0.016459f, 0.014978f, 0.016361f, 0.024842f, 0.016927f, 0.001026f, 0.007202f, -0.002705f, -0.018930f, -0.007894f, 0.002845f, -0.025976f, -0.024853f, 0.015943f, 0.016937f, -0.000446f, 0.019054f, -0.027110f, -0.004952f, -0.001316f, 0.001309f, -0.008412f, 0.004250f, 0.014572f, 0.020252f, 0.009845f, 0.017048f, -0.010865f, -0.021271f, 0.012395f, 0.001943f, -0.005271f, -0.036276f, -0.135419f, 0.057499f, 0.208843f, 0.192554f, 0.164381f, 0.065562f, -0.155954f, -0.097630f, -0.140202f, -0.157131f, -0.140471f, -0.040931f, 0.030391f, 0.118413f, 0.123371f, 0.147719f, 0.097874f, 0.098678f, 0.002472f, -0.103817f, -0.099117f, -0.122246f, -0.095586f, -0.053245f, -0.003559f, -0.034310f, 0.037187f, + 0.045779f, 0.074282f, 0.081520f, 0.082865f, 0.049321f, 0.004210f, 0.021898f, -0.018205f, 0.011717f, -0.056653f, -0.041247f, -0.052389f, -0.085734f, -0.067949f, -0.052150f, -0.036749f, -0.060974f, 0.008508f, 0.103971f, 0.117575f, 0.065568f, 0.122938f, 0.030414f, 0.071763f, 0.036835f, 0.021115f, -0.030950f, -0.065555f, -0.089967f, -0.126242f, -0.096905f, -0.144022f, -0.059725f, -0.064094f, 0.041287f, 0.041465f, 0.120442f, 0.138927f, 0.123601f, 0.110186f, 0.107599f, 0.067421f, 0.008191f, -0.037640f, -0.115255f, -0.072202f, -0.150532f, -0.128235f, -0.178518f, -0.028831f, -0.016071f, 0.044029f, 0.056369f, 0.101757f, 0.119565f, 0.100176f, 0.089320f, 0.066353f, 0.039022f, 0.005575f, -0.033332f, -0.047833f, -0.064588f, -0.099529f, -0.070059f, -0.086652f, -0.060406f, -0.030883f, -0.009034f, 0.019690f, 0.019020f, 0.095173f, 0.087594f, 0.086949f, 0.067678f, 0.049763f, 0.005820f, 0.030952f, -0.034568f, -0.057079f, -0.044614f, -0.123606f, -0.144263f, -0.027783f, -0.009828f, -0.006210f, 0.070198f, 0.057604f, 0.076622f, 0.053818f, 0.070009f, 0.021429f, 0.018012f, -0.005396f, -0.029827f, -0.038174f, + -0.049499f, -0.054656f, -0.033785f, -0.007048f, -0.042796f, -0.022471f, 0.033984f, 0.048675f, 0.032501f, 0.042168f, 0.028631f, 0.020929f, 0.005303f, -0.003773f, -0.014959f, -0.020870f, -0.016358f, -0.026098f, -0.013855f, -0.005119f, -0.009984f, -0.013247f, 0.002810f, 0.010100f, 0.002006f, 0.015343f, 0.019259f, 0.014616f, 0.009736f, 0.008503f, 0.002560f, -0.001576f, -0.005496f, -0.001396f, -0.002080f, 0.000734f} + }, + { + {-0.009620f, -0.009836f, -0.008129f, 0.002252f, -0.004664f, -0.000752f, -0.001333f, 0.004711f, 0.018830f, -0.005038f, 0.001896f, -0.017939f, -0.009798f, 0.005466f, -0.008528f, -0.006655f, -0.002517f, -0.007580f, -0.002008f, 0.015622f, -0.006711f, -0.010009f, 0.016884f, 0.013513f, -0.004769f, -0.003137f, 0.015455f, 0.004394f, 0.005994f, 0.002981f, 0.000757f, -0.003959f, -0.006513f, 0.006123f, -0.004852f, 0.004575f, 0.001663f, 0.001760f, -0.002163f, -0.005315f, -0.004166f, 0.003771f, -0.004796f, -0.007581f, -0.003416f, -0.003391f, -0.009650f, 0.010918f, 0.016878f, -0.009712f, 0.005509f, 0.000464f, -0.003788f, 0.002672f, -0.000418f, 0.000136f, -0.005651f, 0.010436f, -0.006192f, -0.007653f, 0.008688f, 0.002649f, -0.000454f, -0.000978f, 0.004774f, 0.000300f, -0.000135f, -0.003000f, -0.001503f, 0.009170f, -0.013396f, 0.004557f, 0.002466f, -0.003262f, -0.003202f, -0.004682f, -0.006817f, 0.000049f, 0.006581f, 0.006719f, 0.001960f, -0.000133f, 0.001524f, -0.003740f, 0.004898f, -0.001861f, 0.002883f, -0.002089f, -0.001341f, -0.001013f, -0.001219f, -0.000980f, 0.002262f, -0.000113f, 0.000935f, 0.001361f, + 0.000832f, 0.002342f, 0.002967f, -0.000986f, -0.000681f, -0.001335f, -0.000915f, -0.001893f, -0.000555f, -0.001266f, -0.001031f, -0.001926f, -0.000753f, -0.000225f, -0.029660f, -0.004685f, -0.010836f, -0.002668f, 0.002399f, -0.008088f, -0.018078f, 0.013251f, -0.004438f, 0.003084f, 0.008874f, -0.002822f, -0.000902f, -0.001108f, 0.004087f, -0.003141f, 0.014928f, -0.000623f, 0.011516f, 0.016877f, -0.020260f, 0.004241f, 0.014080f, 0.000963f, 0.002808f, 0.009738f, 0.018010f, 0.002567f, -0.004049f, 0.009056f, -0.002410f, -0.004705f, 0.004062f, 0.003194f, 0.004018f, -0.005084f, 0.018352f, -0.008484f, 0.004631f, 0.006833f, -0.000083f, -0.000912f, -0.008955f, 0.001442f, -0.010376f, 0.008698f, -0.010600f, -0.008157f, 0.005869f, -0.009901f, 0.006776f, -0.006919f, 0.002845f, -0.005591f, 0.003765f, 0.007963f, 0.015635f, 0.004775f, 0.001768f, 0.007584f, 0.000114f, -0.013544f, 0.001791f, 0.003767f, 0.005140f, -0.003433f, 0.000705f, -0.001896f, 0.002566f, 0.007501f, 0.004543f, 0.010260f, 0.003550f, 0.001328f, -0.006281f, -0.003251f, 0.006064f, 0.004683f, -0.006015f, 0.007155f, 0.003515f, 0.007827f, + -0.002468f, -0.001947f, -0.002476f, 0.000306f, -0.001534f, -0.006383f, -0.001173f, 0.000977f, 0.001046f, 0.004016f, 0.000446f, -0.001285f, -0.001566f, 0.001654f, 0.000862f, -0.003165f, -0.000472f, -0.000310f, 0.000018f, 0.001164f, 0.000330f, -0.001517f, -0.000209f, -0.001443f, -0.010830f, 0.008082f, 0.005178f, 0.001695f, 0.010120f, -0.000467f, 0.005651f, 0.013920f, 0.008531f, 0.018231f, 0.003462f, -0.002601f, -0.018638f, 0.003008f, -0.011446f, -0.003729f, 0.001387f, 0.004274f, -0.007185f, 0.000081f, 0.017834f, -0.009064f, -0.000524f, -0.009050f, 0.004301f, 0.000173f, 0.003428f, 0.007384f, 0.008565f, -0.005336f, 0.006416f, 0.006754f, 0.012891f, 0.000576f, -0.012731f, 0.001314f, 0.013668f, -0.001267f, -0.000898f, -0.001814f, 0.009178f, -0.010654f, 0.000864f, 0.007121f, 0.009186f, 0.011128f, -0.004198f, -0.007161f, -0.000964f, 0.015960f, 0.001448f, 0.005811f, -0.012956f, -0.005707f, 0.003103f, 0.002739f, -0.002243f, 0.008488f, -0.000612f, -0.001678f, 0.004694f, -0.008060f, 0.000488f, -0.001210f, 0.005524f, 0.008590f, -0.012584f, -0.002755f, 0.004041f, 0.008467f, -0.005402f, -0.005101f, + 0.003462f, 0.010020f, -0.000902f, 0.006750f, 0.004732f, 0.006919f, 0.002867f, 0.007712f, 0.011528f, 0.000500f, 0.003219f, -0.003141f, 0.004687f, 0.003407f, -0.002215f, -0.005156f, -0.000992f, -0.003642f, 0.001200f, -0.003328f, 0.001454f, -0.001494f, 0.000804f, -0.002694f, 0.000062f, -0.000229f, 0.000566f, -0.001605f, 0.002567f, -0.002415f, -0.001071f, -0.001060f, -0.001319f, 0.000352f, 0.001445f, 0.001535f, 0.000827f, -0.000706f, -0.000546f, -0.001114f, 0.003474f, 0.032246f, 0.015655f, 0.012708f, -0.011991f, -0.002123f, -0.016735f, -0.011965f, 0.017974f, 0.001621f, -0.011306f, -0.005271f, 0.003870f, -0.010718f, -0.000940f, 0.018258f, 0.007335f, -0.000759f, 0.005893f, 0.026775f, -0.017796f, 0.004273f, -0.003308f, -0.008664f, 0.015432f, 0.007821f, 0.008025f, -0.005999f, 0.006935f, 0.008837f, -0.002682f, 0.005670f, -0.001767f, -0.007640f, 0.001631f, 0.002864f, -0.001286f, 0.009063f, 0.002281f, -0.003281f, 0.010077f, -0.004589f, -0.004683f, -0.005818f, 0.002863f, 0.003842f, 0.000777f, 0.007199f, 0.001013f, 0.022659f, 0.001536f, -0.000020f, -0.005218f, -0.004738f, 0.005485f, -0.016877f, + 0.000748f, 0.010111f, 0.008089f, -0.009116f, 0.013405f, 0.000218f, 0.006024f, 0.010663f, -0.002978f, 0.008253f, 0.006462f, -0.002943f, -0.009574f, -0.007357f, 0.006085f, 0.015159f, 0.004377f, -0.006606f, -0.003194f, -0.003748f, 0.010489f, -0.008856f, -0.000453f, 0.008602f, 0.010038f, 0.001371f, 0.001307f, -0.002773f, -0.004132f, 0.000170f, -0.000925f, -0.003520f, -0.000679f, -0.001609f, -0.001695f, -0.002709f, -0.001313f, 0.003537f, 0.002455f, -0.000719f, 0.004642f, 0.001350f, 0.001900f, -0.000603f, 0.001611f, -0.000817f, -0.000359f, -0.000193f, 0.000575f, 0.000563f, 0.001330f, 0.002495f, 0.000678f, 0.000284f, -0.000722f, 0.007764f, 0.002094f, 0.021091f, 0.005289f, 0.012569f, -0.000532f, 0.002783f, 0.003573f, 0.003500f, -0.003452f, 0.012852f, -0.005378f, 0.013906f, -0.006793f, -0.005395f, 0.003693f, -0.009205f, -0.002585f, -0.002904f, 0.003970f, 0.005778f, -0.003636f, -0.013474f, 0.006178f, -0.016290f, -0.006516f, -0.002777f, -0.000318f, -0.002565f, 0.003246f, 0.014576f, 0.008306f, 0.000977f, -0.015107f, -0.014591f, 0.000568f, 0.009825f, -0.005130f, 0.001526f, -0.001796f, -0.006480f, + -0.009680f, 0.000994f, 0.006668f, 0.014056f, 0.012762f, -0.001642f, 0.004146f, -0.017658f, 0.006096f, 0.011708f, 0.013383f, -0.001658f, 0.012208f, 0.002585f, 0.017742f, 0.010442f, 0.003443f, 0.007983f, -0.000744f, -0.004638f, -0.003085f, -0.001811f, 0.011152f, -0.004274f, -0.006226f, -0.007756f, 0.011128f, -0.002701f, -0.019411f, 0.003849f, 0.007404f, 0.010879f, 0.014138f, 0.024092f, -0.010090f, -0.008300f, 0.014287f, 0.015054f, 0.011898f, 0.005070f, -0.002500f, -0.002775f, -0.009413f, -0.010580f, -0.002959f, -0.003841f, 0.003138f, -0.000463f, -0.003100f, -0.000463f, -0.005872f, 0.001222f, -0.000825f, 0.002709f, 0.000323f, -0.004500f, -0.000423f, 0.000434f, -0.000807f, -0.000448f, 0.002044f, 0.003907f, 0.003906f, 0.003211f, 0.000790f, 0.000770f, -0.006051f, 0.000228f, 0.004070f, -0.002755f, 0.002188f, 0.000455f, -0.001787f, -0.001476f, -0.000865f, 0.004057f, 0.002960f, 0.000573f, -0.000510f, 0.002195f, 0.000052f, -0.028013f, 0.013608f, 0.019194f, 0.002592f, 0.015976f, 0.002261f, -0.014322f, -0.001291f, -0.006686f, -0.003466f, 0.014749f, -0.019139f, -0.005358f, 0.006781f, 0.007540f, + 0.017442f, -0.003429f, 0.007584f, -0.027238f, -0.013787f, 0.006969f, 0.016184f, -0.010608f, -0.007539f, -0.011371f, -0.013633f, 0.007169f, -0.001620f, 0.000137f, 0.005181f, 0.002488f, 0.005403f, 0.021131f, -0.012726f, 0.020507f, -0.001068f, 0.004194f, 0.004616f, 0.004458f, -0.006120f, 0.007133f, -0.014444f, -0.002761f, -0.007838f, -0.001531f, -0.010712f, 0.013066f, 0.002376f, 0.036187f, 0.001226f, -0.002319f, -0.009092f, 0.001601f, -0.007603f, 0.018912f, -0.011605f, 0.002506f, -0.021100f, 0.015878f, 0.014681f, -0.017529f, 0.010781f, 0.010878f, 0.004604f, -0.009500f, -0.009589f, 0.015931f, 0.004196f, -0.023057f, 0.011131f, -0.010948f, -0.005859f, 0.005212f, -0.005671f, 0.002060f, 0.004751f, 0.006211f, -0.011914f, -0.029213f, 0.004345f, 0.006551f, -0.000804f, -0.006282f, 0.011625f, -0.004978f, -0.003640f, -0.005413f, 0.007768f, -0.009458f, -0.003631f, -0.005379f, -0.003871f, 0.002370f, -0.003497f, 0.005006f, 0.000836f, -0.008412f, 0.006273f, 0.000802f, -0.004195f, -0.000268f, 0.005668f, 0.001799f, 0.000386f, -0.000758f, -0.001405f, -0.004466f, 0.000496f, 0.001222f, 0.000689f, -0.000463f, + 0.002675f, -0.005054f, 0.000678f, 0.000940f, -0.005479f, -0.005011f, 0.012316f, 0.002374f, -0.000223f, -0.010398f, -0.017439f, 0.006174f, -0.009347f, -0.003782f, 0.016922f, -0.023023f, -0.009566f, -0.016964f, -0.001703f, 0.014542f, -0.001326f, -0.012001f, -0.016628f, -0.018700f, 0.007313f, 0.019779f, -0.005643f, 0.012358f, 0.018630f, -0.005151f, -0.004267f, 0.007286f, 0.010372f, 0.022086f, -0.003175f, 0.012417f, 0.001827f, 0.026261f, 0.019336f, 0.005288f, -0.006156f, 0.002655f, -0.014528f, 0.025497f, 0.005953f, -0.011242f, -0.012454f, 0.014707f, 0.012446f, 0.008943f, 0.006395f, 0.004370f, 0.013229f, -0.005700f, 0.005853f, -0.008727f, 0.001290f, 0.000720f, -0.013226f, -0.017705f, -0.006254f, -0.012503f, 0.008072f, -0.007629f, -0.005642f, -0.019310f, -0.012124f, 0.003711f, -0.006571f, -0.002307f, 0.009315f, 0.019361f, 0.024437f, 0.012700f, 0.010133f, -0.008988f, -0.019843f, 0.000356f, -0.013879f, -0.032120f, 0.000312f, -0.002248f, 0.012018f, 0.008096f, -0.007833f, -0.017891f, -0.009699f, 0.008671f, -0.000395f, -0.001983f, -0.007379f, 0.003975f, 0.004119f, 0.003248f, -0.001874f, -0.010180f, + 0.002184f, 0.001355f, 0.001031f, -0.002291f, -0.001220f, -0.001364f, 0.001309f, -0.004975f, -0.005100f, -0.000524f, 0.000661f, -0.004133f, 0.000401f, -0.000813f, 0.003875f, 0.005144f, -0.005503f, -0.000183f, 0.004056f, -0.000662f, -0.002288f, 0.000956f, 0.000621f, 0.005579f, -0.001687f, 0.003596f, 0.002848f, -0.002370f, -0.037047f, -0.011473f, 0.002045f, 0.018035f, -0.012994f, 0.008791f, 0.005789f, -0.000792f, 0.027206f, -0.003691f, 0.025604f, -0.015125f, 0.007520f, 0.008052f, 0.000321f, -0.023442f, -0.009668f, -0.008787f, -0.026562f, 0.009012f, -0.006607f, 0.005584f, -0.001659f, 0.009580f, -0.000034f, -0.010448f, 0.005545f, -0.017152f, 0.012619f, 0.007328f, 0.029125f, -0.001293f, 0.000881f, 0.026545f, -0.023504f, 0.020594f, 0.025316f, -0.015891f, 0.016305f, -0.006867f, -0.007647f, -0.013347f, 0.003356f, 0.002997f, 0.018005f, 0.011509f, -0.004639f, -0.007566f, -0.015303f, 0.008311f, 0.009550f, -0.017638f, -0.007893f, 0.016342f, -0.028797f, 0.002599f, -0.022244f, 0.012470f, 0.001231f, -0.000530f, 0.006730f, -0.007655f, 0.002560f, 0.026432f, -0.010938f, 0.005698f, 0.012920f, 0.008041f, + 0.001423f, -0.014099f, 0.006188f, 0.005080f, -0.008139f, -0.022784f, 0.000249f, -0.005282f, -0.017970f, 0.013526f, -0.004893f, 0.004923f, -0.000716f, 0.002494f, 0.005725f, 0.005478f, -0.010039f, 0.002454f, -0.001000f, 0.002218f, -0.000801f, 0.006702f, 0.003393f, -0.001753f, -0.001242f, -0.009867f, -0.000382f, -0.006768f, 0.001178f, 0.001040f, 0.007106f, -0.010426f, 0.003858f, 0.005529f, -0.003918f, -0.006497f, 0.002315f, -0.000996f, -0.003792f, 0.003051f, -0.000811f, -0.004079f, 0.001444f, -0.001415f, -0.004637f, -0.001353f, -0.002996f, -0.006281f, 0.002959f, -0.001953f, 0.000594f, -0.003459f, -0.000700f, -0.003534f, 0.001683f, 0.006635f, -0.000861f, -0.015145f, 0.044032f, -0.016374f, 0.008513f, 0.006333f, 0.015682f, 0.004944f, 0.009498f, 0.021997f, -0.017045f, -0.010445f, -0.001441f, 0.030601f, -0.011851f, -0.013022f, -0.015226f, 0.007564f, 0.005066f, 0.016747f, -0.034978f, 0.000331f, 0.000694f, -0.002373f, 0.017909f, -0.004358f, 0.013800f, 0.025683f, -0.018714f, -0.008379f, 0.007274f, -0.014012f, -0.017664f, 0.011847f, -0.016412f, 0.024150f, -0.004169f, -0.024871f, -0.003332f, -0.014283f, + 0.007855f, 0.019696f, -0.000424f, 0.009959f, -0.001264f, 0.003824f, 0.023429f, 0.000715f, 0.016982f, 0.006718f, -0.012793f, 0.013277f, 0.011325f, 0.001560f, 0.009507f, 0.033671f, -0.005628f, -0.015161f, 0.007964f, -0.019187f, 0.001462f, 0.032159f, 0.010887f, 0.005061f, -0.006170f, -0.009233f, -0.006240f, -0.011402f, 0.019361f, -0.012763f, -0.003434f, -0.007964f, 0.021976f, -0.040484f, 0.013806f, 0.014242f, 0.024317f, 0.005757f, 0.001819f, 0.021436f, -0.006104f, -0.009302f, -0.012183f, 0.000284f, -0.010139f, -0.001032f, -0.008728f, 0.007020f, 0.000620f, -0.007771f, -0.008199f, -0.006862f, 0.002575f, 0.008373f, 0.006702f, 0.001430f, 0.000463f, -0.003596f, -0.008872f, -0.002969f, -0.002314f, 0.003628f, 0.003699f, -0.001498f, -0.002210f, 0.001718f, -0.005332f, -0.000033f, -0.005175f, -0.002614f, -0.006803f, -0.009150f, -0.002573f, 0.003109f, 0.010125f, 0.001620f, -0.002850f, -0.002727f, 0.003955f, -0.000995f, 0.009709f, 0.004388f, 0.001668f, 0.001351f, 0.065080f, 0.019422f, -0.011861f, -0.015806f, -0.013315f, 0.047150f, -0.040633f, 0.003234f, 0.015916f, 0.002354f, -0.022029f, -0.004983f, + 0.011060f, -0.002360f, 0.002570f, 0.019559f, -0.020239f, -0.017003f, 0.008347f, 0.025495f, 0.015716f, 0.006585f, -0.012350f, -0.012072f, -0.011620f, -0.013540f, 0.012630f, 0.005016f, 0.018098f, 0.014516f, 0.008274f, -0.019204f, -0.009127f, -0.020458f, -0.004054f, -0.013421f, -0.030898f, -0.005758f, 0.013819f, 0.003071f, -0.014328f, -0.014452f, 0.000374f, 0.007478f, 0.019357f, 0.002461f, 0.009821f, 0.002804f, 0.037395f, -0.032436f, 0.021236f, 0.003982f, -0.033090f, -0.005977f, -0.009966f, -0.008187f, 0.005099f, -0.014488f, 0.008760f, 0.006363f, 0.014837f, -0.018068f, 0.006417f, 0.028943f, 0.013571f, 0.045985f, -0.010269f, -0.001141f, -0.011285f, -0.005780f, 0.001268f, -0.000913f, -0.043584f, 0.019439f, -0.001815f, -0.002550f, 0.011849f, 0.011710f, -0.012343f, -0.018569f, -0.020303f, -0.007549f, 0.014446f, 0.006152f, -0.004722f, -0.011996f, 0.010609f, -0.018865f, 0.009902f, -0.003088f, -0.008524f, -0.010662f, -0.011560f, -0.004173f, -0.003840f, 0.001839f, -0.004815f, -0.003263f, 0.002414f, -0.003461f, -0.003222f, 0.002010f, -0.009445f, -0.004307f, -0.000641f, -0.003214f, -0.005399f, -0.002410f, + -0.009592f, 0.001367f, 0.007211f, 0.009706f, 0.011395f, -0.008256f, -0.010106f, -0.007170f, -0.009137f, 0.000353f, -0.000006f, -0.005605f, -0.006374f, 0.002463f, -0.000837f, 0.006332f, -0.001953f, -0.000455f, 0.004914f, 0.004919f, -0.003939f, -0.021783f, 0.005297f, 0.011852f, -0.000453f, -0.013384f, -0.009288f, -0.028932f, -0.034378f, 0.007138f, -0.015234f, -0.007256f, 0.005064f, -0.000287f, -0.003593f, -0.015341f, -0.007609f, -0.000147f, 0.012079f, 0.012869f, -0.018881f, -0.010834f, 0.011899f, -0.016922f, -0.008306f, -0.027715f, 0.026838f, -0.003492f, 0.024179f, 0.002116f, 0.009074f, 0.025686f, 0.019419f, -0.011404f, 0.005857f, 0.013061f, -0.013712f, -0.005583f, 0.012729f, -0.004719f, -0.030783f, -0.005722f, -0.021567f, 0.031651f, -0.003340f, -0.008401f, -0.018089f, -0.026400f, 0.009468f, 0.005599f, 0.006233f, 0.013029f, 0.000309f, -0.004812f, 0.013636f, 0.003483f, -0.002600f, 0.004797f, -0.007615f, 0.020917f, -0.004937f, 0.013198f, 0.039049f, 0.008708f, 0.007339f, 0.009145f, 0.014411f, -0.033987f, -0.027508f, 0.010474f, -0.030024f, 0.020795f, -0.004237f, 0.023825f, 0.006295f, 0.046450f, + 0.018242f, 0.003163f, -0.013496f, -0.005988f, -0.023885f, -0.001610f, 0.007454f, 0.004666f, 0.005079f, 0.008211f, 0.021198f, -0.008816f, -0.017190f, -0.005976f, -0.004777f, 0.006672f, 0.019235f, 0.006803f, -0.004637f, 0.005546f, 0.005642f, -0.000991f, -0.004446f, -0.011196f, 0.000753f, 0.001262f, -0.005464f, -0.007409f, -0.001412f, -0.011873f, 0.008328f, 0.004728f, -0.005583f, -0.001810f, -0.011794f, -0.005781f, 0.005452f, 0.010322f, -0.005185f, -0.004792f, -0.000218f, -0.009477f, 0.010049f, -0.000476f, 0.007238f, -0.009804f, 0.000004f, -0.010158f, 0.005946f, -0.012054f, -0.002735f, -0.055456f, -0.038837f, 0.014410f, -0.015469f, -0.032073f, -0.048684f, -0.001186f, 0.003883f, -0.009440f, -0.007776f, 0.046433f, 0.012184f, -0.033577f, 0.007026f, -0.020490f, -0.017236f, -0.016639f, -0.029987f, -0.004953f, 0.002765f, -0.041294f, -0.039102f, -0.014855f, 0.006469f, 0.003851f, 0.023692f, 0.020053f, 0.012459f, -0.009942f, -0.000386f, 0.009165f, -0.021178f, -0.011806f, -0.007226f, 0.007014f, -0.019896f, -0.012152f, 0.013598f, 0.008238f, -0.000539f, -0.003053f, -0.003716f, 0.011337f, -0.028651f, -0.016325f, + -0.014106f, 0.019009f, -0.022209f, 0.015099f, 0.025454f, 0.034873f, -0.002319f, 0.010038f, -0.008268f, -0.016634f, -0.021839f, -0.005882f, 0.021531f, 0.008104f, -0.039096f, 0.001737f, 0.040460f, -0.026863f, 0.001308f, -0.005727f, 0.002157f, 0.009627f, 0.020634f, -0.004268f, 0.006556f, 0.024777f, 0.017035f, 0.010919f, -0.018951f, -0.022801f, 0.016670f, -0.016496f, -0.031241f, -0.030001f, 0.032696f, 0.012457f, 0.018061f, 0.007763f, -0.005149f, -0.006292f, 0.015600f, 0.011063f, 0.002941f, 0.015037f, -0.005993f, -0.019682f, -0.010170f, -0.013713f, 0.005516f, 0.019929f, 0.009702f, 0.002423f, 0.011792f, 0.006557f, 0.010995f, -0.002088f, -0.005642f, 0.006781f, -0.002458f, -0.007613f, -0.006494f, 0.005262f, -0.018192f, 0.004015f, 0.010670f, -0.006401f, 0.013200f, 0.009064f, -0.000761f, -0.001425f, 0.012444f, 0.001556f, -0.002878f, -0.007914f, -0.007788f, 0.002192f, 0.006560f, 0.001509f, 0.005282f, -0.007886f, -0.032411f, 0.017885f, -0.026237f, -0.046767f, 0.008437f, -0.028433f, -0.016528f, 0.055264f, 0.003748f, 0.041382f, 0.037226f, -0.007463f, 0.039203f, 0.054263f, 0.038572f, -0.048524f, + -0.006491f, -0.022550f, -0.022863f, -0.013971f, 0.000960f, -0.020001f, 0.042329f, 0.012590f, 0.023221f, -0.019821f, 0.022226f, 0.017132f, 0.005678f, -0.025246f, -0.019666f, 0.040319f, -0.007384f, -0.037591f, -0.002585f, -0.043510f, -0.006302f, 0.012125f, -0.015633f, 0.000989f, -0.035548f, 0.016343f, 0.032174f, 0.017476f, -0.004774f, -0.017395f, -0.006542f, -0.004348f, -0.006077f, -0.016288f, -0.043674f, 0.029526f, 0.016543f, 0.015450f, 0.018432f, -0.024747f, 0.038456f, 0.004895f, -0.011676f, -0.008523f, -0.030752f, -0.013472f, 0.019838f, 0.012375f, 0.032873f, -0.003486f, -0.037772f, -0.066120f, -0.003969f, -0.000396f, 0.000188f, -0.023782f, -0.033427f, -0.006281f, 0.021990f, -0.011564f, -0.013578f, 0.008850f, -0.003067f, 0.033697f, -0.006728f, -0.029825f, -0.010798f, 0.031386f, 0.001903f, 0.006031f, -0.030567f, -0.010747f, -0.005853f, 0.012676f, 0.016199f, -0.007980f, 0.005562f, 0.001327f, 0.012099f, 0.008053f, -0.001348f, 0.005516f, 0.016246f, 0.004061f, -0.000403f, -0.005368f, 0.001728f, 0.010879f, -0.000486f, 0.005562f, 0.018588f, 0.002814f, -0.006557f, -0.013794f, -0.001646f, 0.010105f, + -0.009730f, 0.005185f, -0.004444f, -0.002911f, -0.006528f, -0.008280f, -0.006427f, 0.000175f, 0.011698f, 0.009257f, -0.012678f, -0.023055f, -0.006948f, 0.008652f, 0.002994f, 0.003138f, 0.070553f, 0.044499f, -0.006317f, -0.041094f, 0.008647f, 0.020490f, 0.011806f, 0.029945f, 0.044943f, -0.019832f, 0.003700f, -0.040170f, 0.011374f, 0.003316f, -0.015592f, 0.072389f, 0.027428f, 0.062462f, 0.025780f, 0.016115f, -0.054430f, 0.000844f, 0.030347f, 0.005538f, -0.028981f, 0.012253f, -0.044298f, -0.017286f, 0.003032f, 0.013353f, -0.013279f, -0.008604f, 0.009584f, 0.007835f, 0.003181f, 0.039224f, 0.024346f, 0.006462f, -0.015719f, 0.027018f, -0.017583f, -0.012603f, -0.025843f, -0.008588f, 0.033664f, -0.053204f, -0.000838f, 0.023893f, -0.026573f, -0.008338f, 0.010108f, 0.008993f, 0.049118f, -0.002820f, -0.000578f, -0.022923f, 0.048022f, -0.021389f, 0.006043f, 0.005059f, 0.033245f, -0.007745f, -0.012040f, 0.031686f, -0.053462f, 0.013946f, 0.005094f, -0.022133f, 0.042699f, -0.053384f, -0.006806f, -0.017833f, -0.035888f, -0.017924f, -0.003214f, 0.015225f, 0.033536f, 0.055384f, 0.026979f, 0.036607f, + 0.055690f, -0.022650f, 0.010238f, 0.014041f, -0.023844f, 0.032246f, 0.000606f, -0.042639f, 0.022349f, 0.011861f, -0.015661f, 0.001525f, 0.032913f, 0.024951f, 0.007310f, 0.019700f, 0.005809f, 0.006462f, 0.018050f, -0.003186f, 0.007650f, 0.016216f, -0.003984f, 0.003617f, -0.003006f, -0.000839f, 0.011353f, 0.002337f, 0.001164f, -0.009892f, -0.005987f, -0.006821f, -0.014158f, 0.003167f, -0.007844f, -0.022454f, 0.008601f, 0.013647f, -0.004727f, -0.000123f, 0.005993f, -0.007680f, -0.000335f, 0.023956f, -0.003675f, -0.006535f, -0.015137f, -0.068379f, 0.018946f, 0.003602f, 0.082586f, 0.018862f, 0.015526f, -0.002267f, 0.040280f, 0.010874f, -0.060541f, -0.009294f, 0.064773f, -0.019190f, -0.013639f, 0.005465f, -0.004479f, 0.001472f, -0.011794f, 0.067456f, 0.076740f, -0.041263f, 0.018629f, 0.020664f, 0.011221f, 0.021803f, -0.033776f, -0.046654f, 0.035913f, 0.009872f, -0.025805f, -0.044601f, -0.013390f, -0.015143f, 0.040803f, 0.033352f, 0.018719f, -0.037759f, 0.020771f, -0.016355f, 0.013244f, 0.002278f, 0.017531f, 0.038478f, 0.008856f, -0.085992f, -0.026353f, 0.015811f, -0.034452f, 0.010491f, + 0.036496f, 0.012278f, 0.063551f, -0.021011f, -0.095454f, -0.002189f, -0.038051f, 0.033233f, 0.028830f, -0.010393f, -0.020300f, 0.029518f, -0.045838f, -0.008162f, -0.024765f, 0.021672f, 0.029854f, 0.025516f, 0.027737f, -0.020652f, -0.038842f, -0.115606f, -0.055278f, -0.067266f, 0.010637f, -0.045581f, -0.022097f, -0.009260f, -0.050156f, 0.026919f, -0.090302f, 0.028151f, -0.064935f, -0.047031f, 0.046323f, 0.054741f, -0.016807f, -0.002194f, 0.029648f, 0.038604f, -0.052997f, 0.001178f, 0.008689f, -0.007598f, 0.009361f, 0.028522f, -0.003629f, 0.012628f, -0.002400f, 0.011162f, -0.023427f, -0.012259f, -0.010679f, -0.015399f, -0.003347f, 0.022389f, 0.009297f, 0.020159f, 0.000763f, -0.021262f, -0.019333f, 0.003398f, 0.011744f, -0.004375f, 0.012471f, 0.013036f, 0.031406f, 0.003112f, 0.010810f, 0.003447f, 0.007492f, -0.013798f, -0.004229f, 0.005780f, -0.011228f, 0.000604f, -0.005142f, 0.001355f, 0.005835f, 0.032827f, -0.003012f, -0.019432f, -0.021565f, 0.002163f, -0.001220f, -0.034288f, -0.020107f, 0.014196f, -0.022550f, -0.001111f, -0.000291f, -0.089430f, -0.013154f, 0.059552f, -0.070687f, 0.007137f, + 0.026434f, 0.000956f, 0.018540f, -0.005075f, -0.055994f, -0.004466f, 0.030542f, 0.010484f, 0.045493f, 0.031041f, -0.048028f, -0.051769f, -0.006895f, -0.022273f, -0.007373f, -0.085474f, 0.032061f, 0.034192f, 0.059963f, 0.027476f, 0.054580f, -0.023397f, 0.007501f, 0.056269f, -0.017706f, 0.061219f, 0.016996f, 0.032463f, 0.010916f, -0.015367f, 0.030176f, -0.036883f, 0.001808f, 0.077308f, -0.059893f, 0.005670f, -0.077903f, -0.034949f, -0.056027f, -0.037974f, -0.009820f, 0.004216f, -0.018428f, -0.059268f, -0.010751f, -0.098521f, 0.111353f, 0.039164f, 0.000625f, -0.015009f, -0.026963f, 0.006246f, -0.049062f, 0.009115f, -0.073503f, 0.001724f, 0.003695f, 0.016453f, 0.047023f, 0.067839f, 0.002286f, -0.113738f, -0.052323f, 0.048757f, -0.024867f, -0.022723f, -0.027611f, -0.015137f, 0.056073f, 0.011657f, -0.031596f, 0.023544f, -0.052769f, 0.009147f, -0.010063f, -0.023440f, -0.053279f, -0.030178f, 0.033571f, -0.016075f, -0.012977f, 0.018043f, -0.019879f, -0.006240f, 0.033400f, -0.039264f, -0.026679f, -0.011530f, -0.008282f, 0.041976f, 0.019503f, 0.011320f, 0.024771f, 0.009668f, -0.004251f, 0.019302f, + -0.000572f, 0.014132f, 0.020182f, 0.031561f, -0.012491f, -0.000377f, -0.003701f, 0.023231f, 0.035347f, 0.013036f, -0.008713f, -0.002700f, -0.010973f, -0.025930f, 0.045210f, -0.013471f, 0.023195f, -0.013570f, 0.006995f, -0.014418f, -0.010522f, 0.011436f, 0.020525f, -0.044356f, 0.031424f, 0.050877f, 0.018737f, -0.023238f, -0.030949f, 0.014833f, -0.039955f, 0.063240f, 0.052655f, 0.080149f, -0.057171f, -0.070389f, -0.017705f, -0.001602f, -0.035643f, 0.047149f, 0.057151f, -0.042261f, -0.000179f, -0.075371f, -0.022293f, -0.035677f, -0.068107f, 0.021567f, 0.056148f, 0.034082f, -0.044285f, -0.017102f, 0.005150f, 0.037925f, 0.005629f, -0.002657f, 0.014184f, -0.004181f, -0.019185f, -0.060901f, -0.041407f, 0.015843f, -0.005734f, -0.033068f, 0.035999f, 0.032182f, 0.020398f, -0.062308f, -0.056974f, 0.054017f, 0.032502f, 0.040204f, -0.040675f, -0.103881f, -0.019674f, 0.043997f, 0.043485f, -0.010464f, 0.105240f, -0.012875f, 0.105793f, -0.158865f, -0.197258f, -0.080813f, -0.118850f, 0.001631f, 0.046286f, 0.024631f, 0.128480f, -0.014350f, -0.008439f, 0.024199f, -0.025716f, -0.101126f, -0.090360f, -0.100251f, + 0.080312f, 0.066093f, -0.024928f, -0.006514f, -0.168182f, 0.047138f, -0.002256f, -0.074744f, 0.031082f, 0.048401f, 0.074220f, 0.058593f, 0.026859f, -0.004858f, -0.050041f, 0.001812f, 0.002373f, -0.013664f, -0.021598f, 0.059651f, 0.036462f, 0.023426f, 0.060365f, -0.046250f, 0.011019f, -0.012712f, -0.028991f, 0.038209f, -0.006066f, -0.065796f, -0.000569f, 0.021189f, -0.023836f, 0.031711f, -0.012713f, 0.008726f, -0.014740f, 0.073735f, 0.057207f, 0.068337f, -0.057445f, -0.012689f, 0.070325f, 0.052414f, -0.050067f, -0.030559f, -0.050428f, -0.029342f, 0.041002f, 0.047010f, -0.016501f, -0.004433f, 0.078431f, 0.003619f, 0.007210f, -0.010010f, 0.013953f, 0.013850f, 0.012874f, 0.022594f, -0.076190f, 0.066479f, 0.050865f, 0.020700f, 0.062941f, -0.037032f, 0.023299f, -0.104087f, -0.050074f, 0.027190f, 0.038553f, 0.017476f, 0.013582f, 0.012778f, 0.027070f, -0.012787f, 0.118450f, 0.010507f, 0.073832f, 0.020996f, -0.035349f, 0.089963f, -0.012078f, 0.035225f, 0.002060f, 0.032131f, -0.003220f, -0.002116f, 0.019982f, 0.045049f, 0.013368f, 0.032860f, 0.002510f, -0.006996f, 0.071339f, 0.007913f, + -0.014812f, 0.001038f, -0.005412f, -0.036007f, -0.010065f, 0.019851f, 0.013418f, -0.080473f, -0.019434f, 0.009950f, 0.018752f, 0.083752f, 0.068585f, -0.083208f, -0.045578f, 0.006665f, -0.018207f, 0.092246f, 0.009187f, 0.085068f, -0.059866f, 0.042732f, 0.008814f, 0.004545f, 0.039753f, 0.087434f, 0.057009f, 0.011513f, 0.077613f, 0.030264f, -0.036330f, -0.078289f, 0.068616f, -0.062471f, 0.041535f, -0.082212f, 0.000461f, -0.130274f, 0.135113f, -0.033570f, 0.004727f, -0.091271f, 0.082032f, -0.031980f, 0.025995f, -0.067012f, 0.079226f, -0.041446f, -0.037210f, -0.027246f, -0.049772f, 0.015324f, -0.027892f, 0.023464f, -0.025866f, 0.043231f, -0.048628f, 0.043316f, -0.051203f, 0.028065f, -0.059957f, 0.047776f, -0.020743f, 0.053046f, -0.018615f, 0.027750f, -0.022676f, 0.017873f, -0.025867f, 0.000840f, -0.028270f, 0.032174f, 0.013107f, 0.009050f, -0.011338f, 0.003035f, -0.022611f, 0.017274f, -0.023233f, 0.040625f, -0.033805f, -0.040210f, -0.018216f, 0.016175f, -0.047798f, 0.036758f, -0.011914f, 0.020174f, -0.013700f, 0.011473f, -0.022081f, 0.010234f, -0.011477f, 0.012269f, -0.003782f, -0.130310f, + -0.032561f, -0.010102f, 0.013741f, 0.011698f, -0.081110f, -0.047126f, 0.073301f, -0.028427f, 0.027039f, -0.032436f, 0.007166f, 0.092084f, 0.148425f, 0.010293f, -0.005285f, 0.074554f, 0.032480f, 0.030881f, 0.091892f, 0.002071f, 0.055624f, 0.067502f, 0.064775f, -0.025397f, 0.027986f, 0.058352f, 0.081190f, 0.066483f, 0.099856f, 0.056432f, 0.127522f, 0.135387f, 0.097779f, 0.107954f, 0.073501f, -0.008042f, 0.035962f, 0.019152f, -0.028023f, -0.027613f, 0.021141f, 0.063038f, 0.014270f, 0.002919f, -0.000460f, 0.031162f, 0.093695f, 0.072957f, 0.157423f, 0.031791f, -0.081943f, 0.032674f, 0.001435f, 0.033408f, -0.042188f, 0.062637f, -0.114432f, -0.147340f, 0.041005f, 0.148159f, 0.064250f, 0.029603f, -0.183876f, 0.001061f, 0.069573f, 0.110949f, 0.148786f, -0.063352f, 0.008965f, -0.256936f, -0.169675f, 0.068627f, 0.095961f, -0.143123f, -0.122386f, -0.076163f, 0.140164f, 0.093654f, -0.168350f, -0.217045f, -0.044248f, 0.088317f, -0.104210f, 0.049352f, -0.016316f, -0.037634f, -0.056520f, 0.007658f, 0.021837f, 0.036420f, -0.007008f, -0.089947f, -0.078181f, 0.009432f, -0.024729f, 0.037517f, + 0.004569f, -0.009527f, -0.034743f, -0.022835f, 0.013565f, -0.002254f, -0.075302f, -0.037862f, -0.057188f, -0.029532f, 0.009485f, -0.029145f, -0.021920f, -0.067211f, -0.089672f, -0.122814f, -0.123067f, -0.103645f, -0.088544f, -0.097244f, -0.097054f, -0.074014f, -0.102357f, -0.108092f, -0.092459f, -0.103895f, -0.067769f, -0.018505f, -0.060283f, -0.086915f, -0.058175f, 0.002128f, -0.032487f, -0.017797f, -0.021680f, 0.044142f, 0.046641f, 0.000865f, 0.020185f, 0.023790f, 0.012762f, 0.013132f, -0.001344f, 0.009937f, 0.006606f, -0.049979f, 0.124657f, 0.137316f, -0.154968f, -0.066215f, 0.061613f, -0.044979f, 0.031556f, -0.058545f, 0.053649f, -0.049781f, 0.013688f, -0.001418f, -0.021484f, 0.010570f, 0.004621f, -0.016233f, -0.009103f, -0.040085f, -0.008363f, 0.007078f, 0.006697f, -0.040832f, 0.039456f, -0.037581f, -0.010507f, -0.032789f, 0.005575f, -0.031456f, 0.063194f, -0.002892f, 0.018175f, -0.018076f, 0.018124f, -0.019128f, 0.019418f, 0.035770f, 0.052865f, -0.015461f, 0.019062f, 0.017103f, 0.046647f, -0.029594f, 0.030711f, -0.026594f, 0.055645f, -0.015933f, -0.028611f, 0.015667f, -0.011517f, -0.018035f, + 0.007991f, -0.006530f, 0.024922f, -0.014102f, -0.028814f, -0.031581f, 0.006469f, 0.003937f, -0.051533f, 0.014393f, -0.006481f, -0.007177f, 0.010984f, -0.016912f, -0.007327f, 0.003556f, -0.006768f, 0.005468f, -0.026956f, 0.031730f, -0.093593f, 0.048402f, -0.038902f, 0.061937f, -0.041053f, 0.055229f, 0.001047f, 0.029072f, 0.019803f, 0.023241f, 0.013395f, 0.002191f, 0.012797f, -0.004108f, -0.038346f, -0.010505f, 0.003731f, -0.018392f, -0.005706f, -0.010680f, -0.002387f, 0.000059f, -0.013334f, -0.003483f, 0.007742f, -0.003723f, -0.022985f, 0.024565f, -0.002386f, 0.012014f, -0.024520f, 0.010523f, -0.014288f, 0.008597f, -0.017002f, 0.019739f, -0.025880f, 0.037570f, -0.005251f, 0.003025f, -0.038928f, 0.026105f, 0.000456f, 0.018224f, -0.036727f, 0.007263f, -0.013812f, 0.003364f, -0.005378f, 0.000938f, -0.023086f, 0.009932f, -0.002424f, -0.018964f, 0.004524f, 0.028976f, -0.033217f, -0.000876f, -0.011059f, 0.015499f, -0.022159f, 0.020606f, -0.017002f, 0.002788f, -0.011089f, 0.014600f, -0.003164f, 0.005895f, -0.003775f, 0.006802f, -0.010237f, 0.003473f, -0.002113f, -0.008251f, 0.003285f, 0.001041f, + 0.002795f, -0.003670f, 0.009750f, -0.002627f, 0.002308f, -0.007480f, 0.013788f, -0.018405f, 0.006187f, -0.025270f, 0.118374f, 0.071784f, -0.039027f, -0.044895f, -0.003932f, 0.147082f, 0.061453f, 0.020624f, 0.040716f, -0.035665f, -0.045022f, 0.012547f, 0.028554f, 0.007449f, 0.002591f, -0.015662f, -0.012204f, 0.013840f, 0.014111f, 0.034242f, 0.015240f, -0.018461f, -0.008139f, -0.009128f, -0.018608f, -0.000207f, 0.003283f, 0.009121f, 0.011611f, 0.000355f, -0.004940f, 0.013666f, -0.039479f, -0.015004f, 0.017563f, 0.025182f, 0.031223f, -0.017576f, -0.010226f, -0.018686f, 0.031936f, 0.022092f, -0.006047f, 0.010146f, -0.036909f, -0.031943f, 0.029470f, 0.022918f, 0.007229f, -0.055938f, -0.028759f, 0.002295f, 0.009318f, 0.036812f, 0.026319f, -0.004138f, 0.010824f, 0.013075f, -0.017487f, 0.015982f, 0.017341f, -0.005135f, -0.010672f, 0.010300f, -0.018724f, 0.001747f, -0.003205f, -0.013144f, -0.020059f, 0.027822f, 0.005685f, 0.006156f, 0.038328f, 0.046624f, 0.016504f, 0.037729f, 0.035321f, -0.005588f, -0.009551f, -0.010634f, -0.006823f, 0.014720f, 0.024092f, -0.009371f, 0.007409f, -0.021655f, + -0.007879f, -0.001082f, 0.005135f, -0.011820f, -0.014107f, 0.014564f, 0.027885f, 0.012049f, 0.007727f, 0.011669f, -0.013421f, 0.001077f, 0.013262f, 0.002586f, -0.004181f, 0.003333f, -0.001378f, -0.016265f, 0.033067f, 0.010766f, -0.026479f, -0.025011f, 0.010050f, -0.004968f, 0.026073f, 0.013796f, -0.003348f, 0.009735f, 0.003339f, -0.005405f, -0.001216f, -0.007546f, 0.007632f, 0.011959f, 0.001846f, -0.003141f, -0.010370f, 0.008861f, -0.002065f, -0.042465f, -0.117106f, 0.040564f, 0.215367f, 0.169339f, 0.162175f, 0.051849f, -0.150729f, -0.090426f, -0.133615f, -0.134055f, -0.122150f, -0.042640f, 0.065922f, 0.084939f, 0.133634f, 0.119675f, 0.072119f, 0.012118f, 0.011818f, -0.057891f, -0.091491f, -0.131015f, -0.050326f, -0.035555f, 0.011851f, -0.007368f, 0.066586f, 0.044940f, 0.019190f, 0.088936f, 0.050014f, 0.038081f, -0.007671f, 0.033420f, -0.060282f, -0.045490f, -0.037549f, -0.043936f, -0.057818f, -0.034867f, -0.023010f, -0.058878f, -0.040655f, 0.015677f, 0.086785f, 0.083716f, 0.095152f, 0.074692f, 0.108779f, 0.018842f, 0.027939f, -0.072208f, -0.053386f, -0.045830f, -0.108289f, -0.107905f, + -0.096750f, -0.045744f, -0.056653f, 0.013353f, 0.042137f, 0.060555f, 0.121726f, 0.119517f, 0.114464f, 0.102641f, 0.089893f, 0.019224f, -0.052674f, -0.085932f, -0.153465f, -0.131889f, -0.096115f, -0.131088f, -0.060752f, -0.027331f, 0.005888f, 0.128722f, 0.100960f, 0.148066f, 0.146322f, 0.106880f, 0.030007f, -0.029477f, -0.043619f, -0.050640f, -0.045111f, -0.087078f, -0.107684f, -0.075247f, -0.051350f, -0.045425f, 0.005823f, 0.030341f, 0.048279f, 0.041570f, 0.086800f, 0.094856f, 0.071737f, 0.057053f, 0.009623f, -0.019976f, -0.040789f, -0.066815f, -0.057375f, -0.040699f, -0.064092f, -0.086891f, -0.009088f, 0.005116f, -0.014206f, 0.075015f, 0.099003f, 0.063385f, 0.055703f, 0.004245f, 0.015828f, -0.010195f, -0.017300f, -0.043139f, -0.050710f, -0.033251f, -0.037873f, 0.005534f, -0.015043f, 0.005038f, 0.000875f, 0.034270f, 0.018492f, 0.017777f, 0.032048f, 0.032750f, 0.000204f, -0.008360f, -0.023002f, -0.022891f, -0.006421f, -0.004967f, -0.010993f, -0.010766f, 0.002418f, 0.003138f, -0.002499f, 0.006000f, 0.006444f, 0.006217f, 0.002059f, 0.021662f, 0.008178f, 0.000235f, 0.003860f, 0.000070f, + -0.006743f, -0.005685f, -0.005704f, -0.003118f, -0.001942f, 0.000467f, -0.000715f}, + {-0.006247f, -0.007775f, -0.011480f, 0.003879f, -0.005610f, -0.011332f, -0.007258f, 0.005155f, -0.014317f, -0.007933f, -0.017510f, 0.006085f, 0.007822f, 0.009960f, 0.005430f, -0.006128f, 0.013263f, -0.009081f, 0.002677f, 0.000278f, -0.001911f, -0.009596f, -0.004918f, -0.010554f, 0.000409f, -0.004486f, 0.005906f, 0.003913f, -0.005040f, -0.001609f, -0.001155f, -0.009687f, -0.000409f, -0.002153f, 0.004300f, -0.000172f, 0.008757f, -0.003118f, 0.011081f, -0.004800f, 0.000136f, 0.001785f, -0.008103f, 0.005629f, -0.002492f, -0.003108f, 0.000907f, -0.002190f, 0.004234f, -0.016968f, 0.007852f, 0.010222f, 0.001417f, 0.005811f, 0.003097f, -0.007509f, -0.001068f, -0.008149f, 0.011048f, -0.002933f, -0.007024f, 0.006715f, -0.010306f, 0.000458f, 0.003837f, -0.011575f, 0.001258f, -0.002697f, -0.004550f, 0.004015f, 0.000725f, 0.001092f, -0.005633f, -0.003467f, -0.018791f, -0.002231f, 0.003862f, -0.002922f, 0.000728f, 0.002403f, 0.009746f, 0.008580f, 0.000313f, 0.002926f, 0.001008f, -0.001454f, -0.001575f, -0.002339f, -0.001520f, -0.000630f, -0.002097f, -0.001541f, -0.000272f, 0.001992f, 0.001005f, 0.001406f, + -0.003082f, 0.000184f, -0.000298f, -0.000614f, -0.000404f, 0.000890f, -0.000618f, 0.000304f, -0.001595f, -0.000897f, -0.001447f, 0.000151f, -0.001372f, 0.001943f, -0.026588f, -0.015937f, 0.002921f, -0.008598f, 0.001613f, -0.008871f, -0.015286f, -0.010132f, 0.017288f, 0.010105f, -0.002714f, 0.011757f, 0.002731f, 0.002910f, 0.003261f, -0.005656f, -0.001577f, 0.009562f, -0.007707f, 0.004358f, 0.006926f, -0.007412f, -0.011798f, 0.005422f, -0.009649f, 0.001100f, 0.005485f, 0.014160f, -0.003213f, -0.006783f, -0.005989f, 0.002232f, 0.007659f, -0.010408f, -0.000113f, 0.008622f, 0.003357f, 0.000938f, -0.000594f, -0.000770f, 0.011132f, -0.000391f, 0.010196f, 0.006753f, -0.002620f, 0.006729f, -0.002381f, -0.000573f, -0.001069f, -0.018623f, 0.006434f, 0.010584f, -0.006129f, -0.003442f, 0.002547f, 0.002908f, 0.002971f, 0.001686f, -0.001039f, -0.002214f, 0.000607f, -0.004655f, 0.012752f, -0.005690f, 0.001462f, 0.006979f, 0.005522f, -0.004528f, 0.005021f, 0.001636f, 0.003263f, 0.007050f, 0.006162f, -0.009227f, 0.009574f, 0.010677f, -0.003630f, 0.000223f, -0.000693f, 0.006989f, -0.008523f, -0.004380f, + 0.001848f, 0.001261f, 0.000308f, 0.000505f, -0.001826f, -0.002811f, 0.001695f, -0.001304f, -0.000744f, 0.000544f, 0.002423f, -0.001757f, -0.000438f, 0.000106f, -0.003346f, 0.001190f, -0.001988f, -0.001996f, -0.001613f, 0.001302f, 0.000172f, -0.000904f, -0.002001f, 0.000530f, -0.010436f, 0.013369f, 0.008894f, 0.020731f, -0.003370f, 0.002151f, 0.006460f, -0.010201f, -0.002014f, 0.003949f, -0.004097f, -0.013826f, -0.000735f, 0.001398f, 0.009303f, -0.011185f, -0.027040f, -0.021982f, -0.013410f, 0.005131f, 0.012970f, -0.013066f, 0.007375f, -0.006453f, 0.010036f, 0.007653f, 0.006824f, 0.011853f, 0.006722f, -0.009457f, -0.008578f, 0.001527f, 0.006454f, -0.000590f, 0.000610f, 0.016611f, -0.000068f, 0.002808f, 0.008381f, 0.008678f, 0.001517f, 0.000144f, 0.020719f, -0.001555f, -0.007704f, -0.002445f, 0.004748f, 0.005914f, -0.003955f, 0.010992f, 0.002229f, 0.005846f, -0.007900f, -0.007163f, -0.002667f, -0.004778f, 0.002736f, -0.003817f, 0.012140f, -0.014087f, -0.012423f, 0.014969f, -0.001545f, -0.000762f, -0.017513f, 0.005322f, -0.008477f, 0.009335f, -0.007270f, -0.019575f, -0.000862f, 0.009860f, + -0.008294f, 0.012783f, -0.007750f, 0.005807f, 0.012100f, -0.003566f, 0.005074f, 0.012003f, -0.000776f, -0.009131f, 0.000770f, 0.005780f, 0.002768f, -0.004507f, 0.008386f, 0.000391f, 0.004426f, 0.001494f, 0.001211f, 0.002997f, 0.000581f, -0.001440f, -0.000085f, 0.000260f, 0.001281f, -0.003562f, -0.001721f, -0.001949f, 0.003212f, 0.000198f, 0.003271f, 0.003218f, -0.003182f, 0.000583f, 0.000818f, -0.002031f, -0.001375f, -0.000858f, 0.000598f, -0.001870f, 0.000655f, 0.032323f, 0.007708f, 0.008566f, 0.003785f, -0.007473f, 0.015625f, -0.007426f, -0.004326f, 0.019713f, -0.001412f, 0.015841f, -0.001603f, -0.018255f, 0.006510f, -0.006234f, 0.020144f, 0.010502f, -0.001324f, -0.018030f, -0.012490f, 0.016538f, 0.019762f, -0.023041f, 0.011591f, 0.009153f, 0.006999f, -0.001564f, 0.002307f, 0.001856f, -0.001670f, 0.022696f, -0.000960f, -0.003961f, -0.006201f, -0.007695f, -0.009667f, -0.003274f, -0.000445f, -0.013177f, -0.004597f, 0.003360f, -0.009065f, 0.000446f, 0.000598f, 0.013556f, -0.005036f, 0.000364f, 0.006407f, 0.000475f, 0.013090f, 0.005815f, 0.013607f, 0.006632f, 0.004193f, -0.014377f, + 0.001575f, -0.010669f, -0.009848f, 0.002312f, 0.013873f, -0.000600f, 0.011924f, -0.005030f, -0.008896f, -0.002142f, 0.000636f, 0.003430f, 0.008207f, -0.003822f, -0.000009f, -0.004512f, 0.004612f, 0.003055f, -0.011611f, 0.002214f, 0.002486f, 0.001493f, -0.003225f, 0.012158f, -0.001236f, -0.002444f, 0.001368f, 0.005676f, 0.002575f, -0.004068f, -0.001241f, -0.001681f, -0.002881f, 0.002344f, -0.003456f, 0.005708f, -0.003423f, -0.000739f, 0.000753f, -0.002778f, -0.000731f, 0.003151f, -0.003723f, -0.000914f, -0.004013f, 0.001527f, 0.001745f, 0.003219f, -0.004390f, 0.000832f, -0.001771f, 0.002196f, -0.001472f, -0.005358f, -0.001666f, 0.009143f, 0.006401f, 0.007355f, 0.020834f, 0.010908f, -0.009044f, -0.008078f, -0.022426f, -0.001448f, -0.000497f, -0.011959f, 0.004552f, 0.018008f, 0.002185f, -0.014168f, 0.013172f, 0.012525f, -0.001299f, 0.005016f, 0.012688f, 0.003020f, -0.011514f, -0.001762f, 0.026878f, 0.013235f, 0.002789f, -0.017707f, -0.006333f, 0.016190f, 0.005575f, -0.002394f, 0.009118f, 0.008162f, 0.008539f, -0.000046f, 0.016693f, -0.000127f, -0.002122f, 0.004228f, -0.008268f, -0.010830f, + -0.000530f, 0.001864f, 0.006220f, 0.003434f, -0.010124f, 0.010332f, 0.018105f, 0.009313f, -0.000474f, 0.013461f, -0.015267f, 0.008754f, -0.009085f, 0.009616f, -0.002528f, -0.010968f, -0.000533f, -0.014298f, -0.023437f, -0.008529f, -0.009295f, -0.001106f, -0.000069f, -0.012246f, 0.002414f, -0.003736f, 0.007160f, 0.004744f, 0.008475f, -0.001304f, 0.003433f, -0.011786f, 0.002088f, 0.001919f, 0.016524f, -0.006323f, -0.000479f, -0.005676f, 0.003524f, 0.014876f, 0.007664f, -0.008560f, -0.013726f, 0.004406f, -0.005462f, -0.001836f, 0.007216f, -0.000959f, 0.002459f, 0.001742f, -0.008149f, 0.000450f, -0.006204f, 0.001839f, -0.005889f, -0.003942f, -0.002108f, -0.000186f, -0.000741f, 0.001148f, -0.003746f, -0.000328f, -0.001219f, -0.002968f, -0.002498f, 0.000986f, -0.000600f, -0.001501f, 0.000477f, 0.001486f, 0.004633f, -0.001537f, 0.002743f, -0.001894f, -0.004516f, 0.003488f, -0.004946f, 0.004916f, -0.000373f, -0.003156f, -0.000465f, -0.021940f, -0.014547f, 0.031098f, -0.006822f, -0.006793f, 0.001804f, -0.001064f, 0.033295f, -0.009713f, -0.017994f, 0.000465f, -0.017751f, 0.004447f, 0.014124f, 0.015230f, + 0.004790f, -0.030895f, 0.025402f, -0.019982f, 0.010615f, -0.013652f, -0.010412f, -0.007631f, 0.012677f, 0.013673f, -0.020474f, 0.001646f, 0.008923f, -0.006324f, 0.004085f, 0.006032f, -0.007408f, 0.000972f, -0.016863f, -0.011299f, -0.026021f, 0.015428f, -0.003649f, 0.026246f, -0.012225f, 0.005716f, 0.017500f, -0.004350f, -0.005209f, -0.007727f, 0.020060f, 0.014676f, -0.024647f, 0.007054f, -0.013943f, -0.004655f, -0.005419f, -0.013815f, 0.008307f, 0.004432f, 0.021695f, 0.015296f, -0.027262f, -0.004445f, -0.011712f, 0.015947f, 0.005539f, 0.001392f, -0.015908f, 0.002404f, -0.001676f, 0.013405f, -0.002239f, 0.001697f, -0.018294f, -0.000397f, 0.012986f, -0.011958f, 0.002009f, -0.003760f, -0.003572f, -0.009661f, 0.001946f, -0.001255f, 0.023024f, 0.010172f, 0.010530f, -0.004198f, -0.002573f, -0.003984f, -0.006273f, -0.003349f, 0.005137f, -0.007031f, -0.002242f, -0.006897f, 0.005227f, 0.004403f, -0.003759f, -0.002102f, 0.004861f, -0.006495f, 0.003229f, 0.001003f, -0.001748f, -0.002056f, 0.001748f, -0.000170f, -0.000588f, -0.001238f, 0.004253f, -0.006269f, 0.000839f, 0.000574f, 0.003186f, 0.003448f, + 0.003449f, -0.003180f, 0.000950f, -0.002243f, 0.004607f, 0.001078f, 0.003378f, 0.007565f, -0.008340f, 0.000554f, -0.017599f, -0.002222f, -0.020311f, 0.003159f, -0.005084f, 0.011642f, -0.000817f, 0.009873f, -0.013915f, -0.026228f, 0.005563f, 0.017606f, 0.002304f, -0.002153f, 0.013751f, 0.009227f, -0.021431f, -0.000373f, -0.008081f, 0.027098f, -0.001209f, 0.003128f, 0.002128f, 0.000245f, -0.000853f, -0.009767f, 0.021495f, -0.001862f, -0.030482f, -0.005759f, 0.018464f, -0.011938f, 0.003074f, -0.000525f, 0.002462f, -0.003857f, 0.002934f, -0.005650f, 0.007276f, -0.011734f, 0.011000f, 0.015399f, -0.012118f, -0.003135f, -0.007178f, -0.021272f, 0.008485f, -0.015119f, 0.013102f, -0.013297f, -0.022915f, -0.006313f, 0.013597f, -0.004309f, -0.008196f, 0.009040f, 0.012571f, 0.007140f, 0.013778f, 0.023537f, 0.018991f, -0.001289f, 0.003682f, 0.003153f, -0.012681f, 0.002347f, -0.013260f, -0.014497f, 0.007853f, -0.011077f, 0.003560f, -0.000726f, 0.008278f, 0.008358f, -0.010972f, 0.012644f, -0.003505f, -0.005297f, -0.002371f, 0.008865f, -0.001670f, -0.008346f, -0.005659f, -0.011786f, 0.013348f, -0.006801f, + -0.001785f, 0.002215f, -0.000583f, -0.005049f, -0.004249f, 0.000804f, 0.001741f, 0.000488f, -0.002370f, 0.002989f, 0.002240f, -0.002733f, 0.000208f, 0.001883f, 0.001183f, -0.001710f, -0.000073f, -0.002261f, 0.000805f, -0.003715f, -0.003353f, 0.001924f, 0.000995f, 0.004334f, 0.004835f, 0.000297f, 0.003314f, -0.000079f, -0.030131f, -0.024908f, 0.014462f, 0.027025f, -0.000144f, -0.001388f, 0.004979f, -0.012698f, -0.006390f, -0.030802f, -0.016645f, -0.008580f, -0.000429f, -0.022345f, 0.032118f, 0.006620f, 0.017812f, -0.020350f, -0.024672f, -0.018241f, -0.007328f, 0.005125f, -0.027988f, -0.012252f, 0.012752f, -0.005305f, -0.034012f, -0.011267f, 0.004417f, 0.000581f, 0.020861f, 0.007289f, -0.006748f, -0.015834f, 0.019837f, -0.011371f, -0.001314f, 0.015291f, 0.004311f, -0.016170f, -0.008566f, -0.001041f, -0.027558f, 0.007138f, 0.021177f, -0.009044f, -0.011906f, 0.003348f, -0.014012f, -0.004884f, 0.002623f, -0.008602f, -0.006892f, 0.007470f, -0.010473f, -0.021623f, 0.010687f, -0.012224f, -0.016433f, -0.022160f, -0.011322f, 0.002485f, -0.009065f, 0.003979f, 0.027454f, 0.015827f, -0.003462f, 0.026537f, + 0.026586f, -0.011294f, 0.003615f, 0.007678f, -0.013922f, -0.008707f, -0.029376f, 0.003289f, -0.009467f, -0.023405f, -0.000321f, 0.012746f, 0.021958f, 0.013843f, 0.006396f, 0.002743f, -0.019974f, -0.002210f, -0.004607f, 0.005505f, -0.007591f, -0.000580f, 0.000409f, 0.000008f, 0.004740f, 0.001226f, -0.001853f, 0.004575f, -0.001816f, -0.005972f, 0.005009f, -0.003901f, -0.005668f, 0.001164f, 0.002035f, 0.002198f, 0.000417f, 0.006425f, -0.000649f, 0.004227f, 0.002269f, 0.000784f, 0.001215f, 0.000285f, -0.004769f, 0.001394f, -0.006547f, 0.001843f, -0.010447f, -0.002270f, -0.000466f, -0.006550f, -0.008182f, -0.000739f, -0.008086f, -0.001169f, -0.001721f, -0.018973f, 0.048496f, -0.001809f, 0.029698f, -0.014887f, -0.042641f, 0.012258f, 0.003586f, -0.001574f, -0.020030f, -0.001847f, -0.013218f, 0.033813f, 0.024613f, 0.022166f, 0.016056f, -0.026322f, -0.000229f, 0.003738f, 0.023393f, -0.040015f, -0.004625f, -0.009715f, -0.011797f, 0.006132f, -0.013290f, 0.005257f, 0.008864f, 0.006750f, 0.007069f, 0.009406f, -0.002863f, -0.003841f, -0.019584f, -0.004540f, -0.003053f, 0.019270f, -0.000075f, -0.017432f, + -0.004199f, 0.020960f, -0.002502f, 0.012241f, 0.015515f, -0.011191f, -0.006762f, -0.025734f, -0.015096f, 0.050693f, 0.013250f, 0.022622f, 0.012023f, 0.003044f, 0.001829f, -0.031943f, 0.018927f, 0.003118f, 0.005505f, 0.016479f, 0.017778f, 0.027906f, -0.032062f, -0.013097f, -0.017824f, -0.002129f, 0.004367f, -0.004111f, -0.009036f, -0.005136f, -0.026898f, -0.033605f, -0.021966f, -0.031488f, -0.004169f, -0.020541f, -0.035449f, -0.014843f, 0.011434f, 0.019495f, -0.007434f, -0.030148f, -0.001137f, -0.004458f, 0.007108f, -0.008209f, 0.001889f, 0.017506f, 0.000744f, -0.001168f, -0.001135f, 0.002323f, 0.003007f, -0.005032f, -0.004675f, -0.012054f, -0.013682f, 0.007368f, -0.003790f, 0.006604f, 0.005832f, -0.002114f, 0.003959f, 0.005463f, 0.009755f, 0.007053f, -0.004302f, 0.002254f, 0.012446f, 0.002504f, -0.012664f, -0.010344f, -0.005738f, -0.002542f, 0.000917f, -0.004349f, 0.007198f, 0.008066f, -0.001948f, 0.012124f, 0.001559f, -0.003272f, -0.002607f, 0.002880f, 0.065267f, 0.014766f, -0.009418f, -0.013555f, 0.002097f, -0.020958f, -0.040931f, 0.030116f, 0.000131f, 0.019377f, -0.014664f, 0.014013f, + 0.033501f, -0.003331f, 0.003733f, -0.008456f, 0.029155f, 0.024534f, 0.009518f, -0.039537f, 0.002848f, 0.005792f, 0.024408f, 0.035517f, -0.010509f, -0.007301f, -0.004719f, 0.009502f, 0.012670f, 0.010522f, -0.017998f, 0.008182f, -0.020745f, 0.015816f, 0.021133f, -0.010152f, -0.020987f, 0.013191f, -0.022836f, -0.020905f, -0.000912f, 0.006013f, 0.029671f, 0.003539f, -0.004113f, 0.025262f, -0.004740f, 0.022683f, 0.041966f, 0.021003f, 0.000429f, -0.026736f, -0.002591f, -0.015428f, -0.012511f, 0.026780f, 0.010430f, -0.027120f, -0.000377f, -0.020751f, -0.005307f, 0.035516f, 0.016302f, 0.005116f, 0.015168f, 0.021359f, 0.011041f, -0.028770f, 0.014715f, 0.023862f, 0.008131f, -0.019690f, 0.008006f, 0.002192f, 0.004022f, -0.015431f, 0.023582f, -0.006604f, -0.005776f, 0.028367f, 0.030073f, 0.004355f, 0.008491f, 0.032698f, 0.001833f, 0.016093f, -0.011599f, -0.000451f, 0.018790f, 0.010842f, -0.008470f, 0.009647f, 0.016945f, -0.004723f, 0.000030f, 0.021628f, 0.004380f, 0.009145f, -0.006545f, -0.010974f, -0.003411f, 0.005958f, 0.003043f, 0.004892f, 0.005020f, -0.003666f, -0.003517f, -0.002936f, + 0.001555f, 0.006403f, 0.007752f, -0.005400f, -0.001715f, 0.013431f, 0.001861f, 0.018045f, -0.003393f, 0.004830f, -0.002593f, 0.002210f, 0.008051f, 0.004878f, 0.000534f, -0.000243f, -0.007821f, -0.005516f, -0.004021f, -0.008343f, 0.010422f, 0.009512f, -0.015926f, -0.000738f, -0.020322f, -0.047591f, 0.016409f, -0.018911f, 0.005219f, 0.001768f, 0.033360f, -0.022933f, -0.020405f, -0.008464f, -0.009359f, -0.012211f, 0.024640f, -0.021774f, -0.030912f, 0.009332f, -0.057731f, 0.001797f, -0.010897f, -0.024296f, 0.031011f, -0.001875f, -0.001857f, 0.013177f, -0.012319f, 0.009937f, -0.003134f, -0.034334f, -0.037627f, -0.000247f, 0.007939f, 0.022183f, 0.010651f, -0.002374f, -0.003961f, -0.021530f, -0.010255f, 0.021905f, -0.034015f, 0.047103f, 0.027907f, 0.006429f, 0.034747f, -0.023019f, -0.009899f, -0.021057f, -0.021663f, -0.009218f, 0.015897f, 0.044509f, 0.000443f, -0.022735f, -0.003804f, 0.002338f, -0.002419f, -0.002192f, -0.014023f, 0.012141f, 0.011053f, 0.030080f, -0.000474f, 0.033990f, 0.017501f, 0.009483f, -0.000758f, 0.007409f, -0.050389f, 0.026824f, -0.006323f, -0.029336f, 0.021188f, 0.000183f, + 0.027864f, 0.012528f, -0.046660f, 0.036517f, 0.028469f, -0.024259f, 0.039542f, 0.015391f, 0.029584f, 0.011900f, -0.003942f, -0.001408f, -0.001076f, -0.005278f, -0.010135f, -0.002919f, 0.004536f, -0.010065f, -0.015491f, 0.000392f, -0.010029f, -0.018170f, -0.010791f, -0.013542f, 0.008971f, -0.008220f, 0.010992f, 0.003144f, 0.011223f, 0.005465f, -0.000950f, -0.005600f, 0.002163f, 0.001328f, -0.000546f, 0.001818f, -0.002946f, -0.007356f, 0.004006f, -0.000404f, 0.004835f, 0.005168f, 0.000554f, 0.004420f, 0.002290f, 0.007405f, 0.006486f, -0.010782f, -0.006250f, -0.018031f, -0.013659f, -0.088952f, -0.007257f, 0.053165f, -0.010120f, 0.001848f, 0.045818f, -0.010453f, 0.000149f, 0.005920f, 0.011934f, -0.013619f, 0.011906f, -0.004502f, -0.015818f, 0.015173f, 0.017162f, -0.051865f, 0.005763f, -0.046126f, -0.001658f, -0.023761f, -0.026618f, -0.005469f, -0.008282f, -0.025181f, 0.012356f, 0.004495f, 0.015690f, 0.022236f, -0.032050f, 0.040106f, 0.002348f, -0.036965f, 0.002658f, -0.025425f, -0.013398f, -0.027367f, -0.025595f, -0.010567f, 0.025989f, -0.022430f, 0.012168f, 0.027030f, -0.016429f, -0.028183f, + -0.026700f, -0.038216f, -0.041977f, -0.024088f, -0.012249f, 0.003567f, -0.006702f, 0.011785f, 0.007456f, -0.024308f, -0.002223f, 0.028059f, 0.015501f, -0.040619f, 0.015662f, -0.002771f, -0.011831f, -0.037606f, 0.025198f, -0.013269f, 0.034938f, 0.045076f, 0.000748f, 0.042893f, -0.023834f, 0.025029f, -0.018851f, 0.026891f, 0.033355f, 0.003291f, -0.044896f, -0.001009f, -0.061115f, 0.020021f, 0.012714f, 0.024473f, 0.011007f, -0.023406f, -0.021107f, -0.000005f, -0.014299f, 0.014116f, -0.015434f, -0.000114f, -0.001368f, -0.014515f, -0.012121f, 0.010665f, -0.006286f, -0.016462f, -0.002047f, 0.005690f, 0.012145f, 0.007191f, 0.026857f, -0.002385f, 0.001858f, -0.007671f, 0.018705f, -0.002245f, -0.004595f, 0.017273f, -0.001371f, 0.002996f, 0.003551f, 0.023137f, -0.004088f, -0.008714f, 0.001901f, 0.016149f, 0.014332f, -0.014368f, -0.001896f, 0.010859f, -0.017693f, 0.010175f, -0.003233f, 0.012895f, 0.000281f, -0.014111f, -0.042051f, 0.033908f, -0.080572f, -0.005206f, -0.007363f, -0.007178f, 0.007852f, -0.046897f, 0.003585f, -0.009593f, -0.003651f, 0.020769f, 0.008659f, 0.024231f, -0.018766f, 0.017009f, + -0.008810f, -0.041744f, -0.016351f, -0.030770f, -0.018568f, 0.019509f, -0.035787f, 0.004244f, -0.013097f, -0.027787f, -0.004621f, 0.026212f, -0.035598f, -0.034966f, 0.014353f, 0.020220f, -0.000929f, -0.016811f, 0.019552f, 0.019921f, 0.025223f, 0.021039f, 0.009140f, 0.028983f, 0.035159f, -0.019301f, 0.005434f, -0.017090f, 0.044045f, -0.004095f, -0.030169f, 0.036037f, 0.016219f, 0.008239f, -0.017216f, -0.023645f, 0.005548f, 0.013358f, 0.014153f, -0.001813f, -0.018959f, 0.013926f, -0.022108f, 0.000039f, -0.021823f, 0.067145f, 0.010570f, -0.020098f, 0.055751f, -0.007443f, 0.017119f, -0.015063f, 0.028036f, 0.040906f, -0.025738f, 0.039037f, 0.042200f, 0.054336f, 0.042304f, 0.003260f, 0.031424f, -0.025286f, -0.004813f, 0.005196f, -0.013597f, 0.023566f, 0.001114f, -0.002303f, -0.002412f, -0.007824f, 0.011839f, 0.005212f, 0.033332f, -0.011711f, 0.012304f, -0.008129f, 0.000188f, 0.005473f, 0.009799f, -0.014875f, 0.005141f, 0.013116f, -0.006112f, -0.016625f, -0.003122f, -0.026170f, 0.008685f, 0.006996f, 0.006782f, -0.007573f, 0.004102f, 0.012361f, 0.007396f, -0.004147f, 0.012646f, 0.004774f, + -0.008421f, -0.005204f, -0.002786f, 0.019852f, 0.026985f, 0.013425f, 0.006126f, 0.003851f, 0.009132f, 0.015066f, -0.010933f, -0.005405f, 0.007123f, -0.002785f, 0.001315f, 0.006327f, 0.083275f, 0.021943f, -0.014362f, -0.011992f, 0.019234f, 0.005773f, 0.008114f, -0.001760f, -0.033488f, 0.028269f, -0.076265f, 0.008626f, 0.016572f, -0.003065f, -0.014061f, -0.028876f, -0.013555f, 0.003806f, 0.022421f, 0.034843f, -0.020585f, -0.043991f, -0.035977f, -0.004770f, 0.001162f, -0.025802f, 0.053559f, -0.024741f, -0.016574f, 0.022497f, -0.007713f, 0.004307f, -0.004981f, 0.046413f, 0.007530f, -0.045905f, 0.018145f, 0.006172f, 0.031819f, -0.011108f, 0.003296f, -0.018805f, 0.015721f, 0.007352f, 0.040155f, -0.009519f, 0.018027f, 0.019436f, -0.024547f, -0.026569f, 0.001741f, 0.024788f, -0.047642f, -0.055841f, -0.016698f, -0.022758f, -0.003208f, -0.007845f, 0.005409f, 0.013030f, -0.011560f, 0.002221f, -0.065008f, -0.054774f, 0.043617f, 0.046813f, -0.056333f, -0.042869f, -0.054225f, -0.028003f, -0.022558f, 0.028295f, -0.029686f, -0.051834f, 0.001349f, 0.002524f, -0.032064f, -0.006520f, 0.045208f, -0.006580f, + 0.002342f, 0.014857f, -0.000646f, 0.002851f, -0.002182f, -0.015822f, -0.020115f, -0.000833f, -0.005838f, 0.013295f, -0.002282f, -0.001031f, -0.014611f, 0.007455f, -0.022505f, -0.000317f, 0.006647f, 0.007611f, 0.010561f, 0.012353f, 0.002083f, 0.007073f, -0.005143f, 0.001327f, -0.011542f, 0.004302f, 0.000972f, -0.012680f, 0.012990f, 0.013303f, -0.020828f, 0.001412f, 0.014908f, 0.012579f, 0.023135f, -0.004720f, -0.027261f, 0.007631f, 0.008680f, -0.013282f, 0.008429f, -0.014812f, -0.007181f, -0.002253f, -0.004883f, -0.012603f, 0.004422f, -0.046453f, -0.005653f, -0.011253f, 0.013988f, -0.022013f, -0.005972f, -0.072230f, 0.063962f, 0.041076f, -0.006924f, 0.087677f, -0.008594f, -0.048114f, -0.004414f, 0.019666f, -0.029710f, -0.039248f, -0.008225f, -0.026800f, -0.001240f, 0.007432f, -0.040280f, 0.059117f, 0.001993f, 0.006332f, -0.037160f, -0.010751f, 0.004029f, -0.010663f, 0.009506f, 0.013433f, 0.048638f, 0.008670f, -0.002466f, 0.039248f, 0.032436f, -0.011531f, 0.019137f, -0.024863f, 0.007018f, 0.021932f, 0.021386f, 0.054921f, -0.054333f, 0.033353f, 0.100826f, 0.000681f, 0.016566f, 0.034438f, + 0.003957f, 0.006802f, 0.016301f, 0.012494f, -0.033678f, -0.040216f, -0.014588f, 0.032227f, 0.009638f, -0.041794f, -0.022595f, -0.001899f, -0.020035f, 0.037030f, 0.003415f, 0.028579f, -0.063640f, -0.039509f, 0.018566f, 0.043573f, 0.026746f, 0.017502f, 0.060526f, 0.035263f, -0.025415f, 0.041597f, -0.031411f, -0.006495f, -0.004515f, 0.023336f, -0.004938f, -0.026123f, 0.022596f, 0.009723f, 0.002161f, -0.029952f, 0.020666f, -0.000581f, 0.000401f, -0.013447f, 0.017416f, -0.014349f, -0.011473f, -0.011041f, 0.008300f, -0.011521f, -0.021859f, 0.007178f, 0.001533f, -0.000315f, -0.011899f, -0.002482f, -0.014901f, -0.012931f, -0.011919f, -0.007697f, -0.004602f, -0.005787f, -0.004539f, 0.001914f, 0.000422f, -0.028425f, 0.018960f, 0.007265f, -0.008927f, -0.021097f, -0.029758f, -0.000943f, -0.016213f, -0.011148f, 0.010742f, -0.008077f, 0.018428f, 0.008955f, -0.006506f, 0.002974f, 0.017234f, -0.007999f, -0.002878f, -0.008535f, 0.014521f, 0.003174f, 0.006027f, -0.014970f, 0.029312f, -0.083496f, 0.001256f, -0.000054f, -0.003227f, -0.010156f, 0.038701f, 0.003599f, -0.023119f, -0.041634f, 0.042103f, -0.037393f, + 0.000441f, 0.027834f, 0.021481f, -0.029315f, -0.008518f, -0.047493f, -0.000759f, 0.014144f, 0.016176f, 0.019816f, 0.004555f, -0.030804f, -0.039459f, 0.032394f, 0.015967f, 0.016323f, 0.005714f, 0.016594f, 0.004304f, 0.023940f, -0.042523f, -0.070656f, 0.019132f, -0.010368f, -0.015691f, 0.039970f, -0.007515f, -0.020777f, 0.034455f, 0.033377f, 0.026861f, -0.002200f, -0.018446f, -0.030227f, -0.008483f, -0.040090f, 0.094396f, -0.007785f, 0.033608f, 0.007653f, -0.032148f, 0.026207f, -0.012675f, -0.029938f, 0.029061f, 0.023854f, -0.052872f, 0.036733f, -0.006196f, 0.050836f, -0.051761f, -0.038301f, 0.050930f, -0.001826f, -0.042393f, 0.042929f, -0.016298f, 0.073123f, -0.031581f, -0.024753f, -0.044643f, 0.028207f, 0.004500f, -0.035510f, 0.013600f, -0.046238f, -0.034637f, 0.003337f, 0.029480f, -0.026406f, -0.017019f, -0.052563f, -0.048587f, 0.056483f, -0.007191f, 0.024775f, 0.038723f, 0.053607f, -0.000459f, -0.005111f, -0.004860f, 0.014372f, 0.020682f, 0.004288f, 0.009089f, 0.033128f, 0.013646f, 0.018392f, 0.009988f, 0.008537f, -0.007186f, -0.002742f, 0.019439f, 0.015697f, 0.025707f, -0.012224f, + 0.016673f, 0.018740f, -0.029695f, 0.007690f, 0.006474f, -0.015433f, -0.008863f, 0.000277f, 0.006461f, -0.012478f, 0.020002f, 0.001472f, -0.005649f, -0.005619f, 0.016830f, 0.000995f, 0.004656f, 0.001940f, 0.004088f, 0.004337f, -0.017064f, -0.007723f, 0.011474f, -0.010244f, -0.024101f, 0.062353f, -0.014261f, 0.042248f, -0.066026f, -0.011536f, -0.001573f, -0.078673f, -0.017351f, 0.011466f, 0.038648f, -0.019309f, -0.018498f, 0.001788f, -0.006102f, 0.055349f, -0.005285f, -0.027708f, 0.058600f, -0.007186f, -0.003033f, 0.011153f, -0.023417f, 0.050758f, 0.003356f, -0.010234f, 0.024285f, 0.020904f, -0.027624f, -0.009360f, -0.012798f, 0.039571f, -0.078808f, -0.001219f, -0.015244f, -0.027692f, 0.013557f, -0.028152f, 0.045971f, -0.011888f, -0.056747f, -0.005738f, 0.086408f, -0.052198f, 0.037917f, -0.058207f, -0.016709f, 0.058315f, 0.042589f, -0.031162f, 0.014865f, -0.038040f, -0.050137f, 0.010914f, -0.021970f, 0.022133f, 0.006475f, -0.003286f, 0.008706f, -0.073386f, -0.028627f, -0.037289f, -0.053642f, 0.025252f, -0.020248f, -0.014728f, -0.029647f, -0.052045f, -0.043783f, 0.034733f, -0.006669f, 0.107763f, + 0.019074f, 0.010210f, 0.038622f, 0.067890f, 0.009095f, -0.048470f, 0.059570f, 0.045187f, -0.037658f, 0.010348f, -0.009333f, -0.037466f, -0.029485f, -0.025209f, -0.002631f, -0.022979f, 0.009069f, 0.016160f, 0.005837f, -0.017819f, 0.031895f, 0.005266f, 0.014912f, -0.003972f, -0.005181f, 0.015317f, 0.009503f, -0.014769f, -0.013259f, -0.012710f, 0.014855f, 0.007281f, 0.017886f, 0.018946f, 0.001100f, -0.009569f, 0.014486f, -0.007641f, 0.030637f, 0.014730f, -0.035896f, -0.006762f, -0.026358f, 0.003659f, -0.008342f, -0.012521f, 0.038300f, -0.001598f, -0.011341f, 0.010133f, 0.012335f, -0.013348f, -0.002332f, -0.018521f, 0.008901f, 0.014170f, -0.002168f, -0.005527f, 0.018093f, 0.041343f, -0.024290f, -0.032082f, 0.035970f, -0.056875f, -0.006165f, -0.012055f, 0.003786f, 0.039341f, -0.025568f, 0.043707f, 0.019368f, 0.009616f, 0.013644f, -0.072436f, 0.049392f, 0.008727f, -0.050192f, 0.019422f, -0.053268f, 0.008762f, 0.072559f, -0.009348f, -0.042219f, -0.045822f, 0.019850f, 0.032353f, 0.026905f, 0.013703f, -0.047098f, -0.032963f, -0.014277f, -0.009220f, 0.062043f, -0.039373f, -0.022944f, 0.091331f, + -0.050513f, -0.004296f, 0.036797f, -0.000186f, 0.038738f, -0.005945f, -0.030443f, -0.021048f, -0.055687f, 0.028321f, 0.040354f, -0.060217f, 0.089970f, 0.029481f, -0.067090f, -0.061914f, -0.058299f, -0.070699f, -0.056498f, 0.002624f, 0.028538f, 0.005222f, -0.047013f, -0.018249f, 0.032073f, -0.001143f, -0.029306f, 0.032413f, -0.063437f, 0.003785f, -0.014300f, -0.059290f, -0.054690f, 0.009273f, -0.021531f, 0.041392f, -0.075996f, -0.010538f, -0.026680f, -0.056187f, 0.004191f, 0.089792f, 0.023456f, -0.040102f, 0.019711f, -0.049312f, 0.020260f, -0.020178f, 0.002078f, 0.002450f, 0.025834f, -0.002973f, 0.009052f, 0.031851f, 0.000662f, -0.018010f, -0.007864f, 0.025496f, 0.018526f, 0.011624f, 0.006600f, -0.050757f, -0.004844f, 0.003608f, 0.028600f, 0.013942f, -0.025910f, -0.000701f, 0.003278f, 0.043947f, 0.002734f, 0.013982f, -0.013388f, -0.008889f, 0.006766f, 0.014221f, -0.001568f, -0.013215f, -0.024544f, 0.003461f, -0.009163f, -0.017306f, 0.008661f, -0.012120f, -0.012035f, 0.016934f, -0.013532f, -0.019927f, -0.027164f, -0.024334f, -0.004299f, 0.006981f, 0.000255f, -0.021169f, 0.043746f, -0.109513f, + -0.101285f, -0.087786f, -0.056741f, 0.022960f, -0.023980f, 0.112927f, 0.029811f, -0.012034f, -0.025908f, -0.014244f, 0.031946f, -0.073419f, 0.085967f, 0.113791f, 0.045199f, -0.006833f, 0.089909f, -0.028497f, 0.054362f, 0.103432f, -0.018903f, 0.005757f, 0.019335f, 0.137643f, -0.034925f, -0.008618f, 0.081732f, 0.031093f, 0.026253f, -0.022472f, -0.083891f, 0.005869f, -0.066496f, 0.031802f, -0.082388f, -0.096348f, -0.001189f, -0.005426f, -0.067366f, -0.003468f, -0.032782f, -0.068915f, -0.055196f, -0.089948f, -0.004324f, 0.092032f, -0.029363f, -0.017494f, -0.084786f, -0.045300f, -0.031249f, -0.028962f, 0.028648f, -0.020647f, 0.153006f, -0.036093f, -0.002156f, -0.055742f, 0.115468f, 0.095049f, -0.067152f, 0.077334f, -0.027036f, -0.112037f, -0.020094f, -0.010614f, 0.023579f, -0.025903f, -0.025508f, -0.013911f, -0.045534f, 0.013372f, 0.056271f, -0.066332f, -0.009493f, 0.019496f, 0.011645f, -0.077044f, 0.050267f, 0.035772f, 0.116041f, -0.049138f, 0.031843f, 0.049372f, -0.002901f, 0.013928f, -0.001486f, 0.017446f, -0.012848f, 0.038236f, 0.015991f, 0.031155f, 0.026076f, 0.003050f, 0.026864f, 0.009314f, + -0.009938f, 0.029238f, -0.001590f, 0.005837f, 0.003198f, 0.020841f, 0.014671f, -0.019585f, -0.016132f, -0.025134f, 0.040460f, -0.025935f, 0.006186f, 0.026102f, 0.010624f, 0.046263f, 0.038717f, 0.068308f, 0.045955f, 0.039532f, 0.002893f, 0.026643f, -0.034777f, 0.033969f, 0.024403f, -0.006079f, -0.033366f, -0.061657f, -0.024393f, 0.020421f, -0.034965f, -0.011230f, -0.025234f, -0.060131f, -0.053451f, -0.023358f, -0.039613f, -0.021702f, -0.033978f, -0.041695f, -0.045977f, -0.012111f, -0.012714f, -0.018357f, -0.033488f, -0.033767f, 0.045531f, 0.195491f, 0.021919f, -0.121142f, -0.031034f, -0.042244f, 0.008650f, 0.061680f, 0.108528f, 0.032157f, -0.092328f, -0.000793f, 0.062816f, 0.014770f, 0.000785f, -0.001847f, 0.015986f, -0.007743f, -0.011686f, 0.076451f, 0.046744f, 0.043180f, -0.064610f, -0.040531f, 0.043167f, 0.017966f, 0.025321f, -0.021142f, 0.007616f, 0.085148f, 0.001586f, 0.072384f, 0.037078f, 0.040019f, 0.069294f, 0.011253f, -0.037289f, 0.009733f, -0.042631f, 0.011811f, 0.029215f, 0.008698f, 0.113631f, -0.036802f, -0.073638f, -0.069547f, 0.087757f, 0.041800f, 0.046674f, 0.033265f, + -0.050541f, -0.062001f, -0.038666f, -0.000917f, 0.019059f, -0.012567f, 0.030975f, 0.059561f, -0.004062f, 0.043547f, 0.038378f, -0.057765f, -0.011697f, 0.018105f, -0.027655f, -0.023696f, -0.029006f, -0.096099f, -0.016400f, 0.043422f, 0.003804f, 0.086314f, 0.056798f, -0.039948f, 0.030226f, 0.001760f, -0.028103f, -0.022586f, -0.046906f, -0.103940f, -0.055909f, 0.005593f, 0.002171f, -0.022002f, -0.005987f, -0.009650f, 0.034020f, 0.036450f, 0.018584f, -0.005091f, 0.002979f, 0.027944f, -0.012786f, 0.018016f, -0.046963f, -0.021252f, -0.005723f, 0.026689f, -0.006040f, 0.011293f, 0.017207f, 0.017651f, 0.002782f, 0.046694f, -0.035833f, -0.031713f, -0.032457f, 0.024904f, -0.020767f, -0.033198f, -0.033130f, 0.025173f, -0.010431f, -0.023901f, -0.012187f, 0.019175f, 0.005494f, 0.027529f, -0.043369f, -0.028077f, -0.004157f, -0.001845f, 0.009862f, 0.021569f, -0.008627f, -0.016590f, 0.030971f, -0.014644f, -0.017357f, -0.015515f, 0.030142f, -0.006846f, -0.013822f, 0.009282f, -0.000291f, -0.015034f, 0.001883f, -0.020388f, -0.011481f, -0.008946f, 0.000589f, -0.006286f, 0.006835f, -0.005203f, 0.004701f, -0.002040f, + 0.006303f, -0.011216f, 0.004818f, -0.004902f, 0.005683f, -0.007795f, 0.007347f, -0.012406f, -0.010955f, -0.047332f, 0.005291f, 0.153387f, 0.039434f, 0.064440f, -0.032092f, -0.140043f, -0.071056f, -0.103143f, -0.034798f, 0.069121f, 0.158813f, 0.070747f, 0.017601f, -0.075695f, -0.071254f, 0.049920f, 0.078974f, 0.039037f, 0.095924f, -0.004241f, -0.062853f, -0.092067f, -0.044788f, -0.014368f, 0.071255f, 0.008552f, 0.041170f, 0.036534f, 0.006169f, 0.095076f, 0.066776f, -0.007555f, -0.009160f, -0.088042f, -0.021427f, -0.002085f, 0.001783f, 0.050100f, 0.089854f, 0.054791f, 0.043130f, 0.084168f, 0.048717f, -0.087807f, -0.070434f, -0.022214f, -0.055209f, 0.058314f, 0.039750f, 0.086385f, 0.067459f, 0.076388f, 0.022657f, 0.013346f, -0.062919f, -0.066019f, -0.061786f, 0.021601f, 0.031472f, -0.000357f, -0.008385f, 0.136387f, 0.034589f, -0.009580f, -0.012896f, 0.093336f, -0.099653f, 0.020801f, -0.189751f, -0.042607f, 0.047498f, -0.066552f, 0.061974f, 0.034898f, 0.000984f, 0.136227f, 0.064717f, -0.077598f, -0.153998f, -0.074273f, -0.069743f, -0.038075f, -0.025900f, -0.020082f, 0.067369f, 0.042595f, + 0.090871f, 0.010751f, -0.066848f, -0.046252f, -0.070147f, -0.065494f, -0.064902f, 0.028514f, 0.006114f, 0.028199f, 0.038751f, -0.018446f, 0.035841f, 0.018783f, -0.024983f, -0.003106f, -0.027680f, -0.009097f, -0.059845f, -0.063533f, -0.023710f, -0.027698f, 0.001094f, -0.059530f, 0.031626f, -0.004423f, 0.011000f, 0.016498f, -0.039657f, -0.082301f, -0.074366f, -0.004129f, 0.016303f, 0.016886f, 0.048880f, 0.012041f, -0.024564f, -0.046378f, 0.015357f, 0.010853f, -0.221464f, -0.135362f, -0.073799f, 0.065249f, 0.018635f, 0.302160f, 0.322438f, 0.195941f, 0.357554f, 0.292176f, 0.309272f, 0.214192f, 0.261679f, 0.212247f, 0.003973f, -0.101243f, -0.144247f, -0.138752f, -0.289806f, -0.347936f, -0.363389f, -0.253819f, -0.199475f, -0.078574f, 0.013961f, -0.102791f, 0.062881f, -0.129544f, -0.046743f, -0.008915f, -0.039962f, 0.030660f, -0.118750f, 0.163366f, 0.028018f, 0.148928f, 0.095826f, 0.055668f, 0.039042f, 0.082395f, 0.053845f, 0.084505f, 0.194651f, 0.184826f, 0.147565f, 0.180627f, 0.228739f, 0.208032f, 0.196383f, 0.359893f, 0.126478f, 0.253222f, 0.330242f, 0.226757f, 0.300011f, 0.159132f, + 0.213861f, 0.166959f, 0.200781f, 0.216949f, 0.080649f, 0.140468f, 0.106843f, 0.131472f, 0.127540f, 0.034749f, -0.024549f, -0.137902f, -0.050675f, -0.183984f, -0.160379f, -0.272138f, -0.307624f, -0.310274f, -0.654123f, -0.554366f, -0.594635f, -0.590573f, -0.688473f, -0.697039f, -0.429313f, -0.500271f, -0.371825f, -0.441407f, -0.334903f, -0.317865f, -0.276017f, -0.277721f, -0.158936f, -0.070631f, -0.100867f, -0.102823f, -0.083217f, 0.015846f, 0.133243f, 0.069204f, 0.277028f, 0.237800f, 0.350046f, 0.358916f, 0.332018f, 0.413617f, 0.384094f, 0.443906f, 0.347828f, 0.424700f, 0.450868f, 0.503070f, 0.440841f, 0.262764f, 0.263668f, 0.262443f, 0.267445f, 0.245874f, 0.173714f, 0.161771f, 0.068027f, 0.047439f, -0.005033f, 0.007709f, 0.033532f, -0.091221f, -0.133711f, -0.145631f, -0.089117f, -0.079577f, -0.149017f, -0.174044f, -0.202422f, -0.147373f, -0.187389f, -0.173816f, -0.146069f, -0.157385f, -0.160046f, -0.160443f, -0.041448f, -0.037802f, -0.019486f, -0.036063f, 0.021088f, -0.004977f, -0.003713f, -0.033861f, -0.011852f, 0.011944f, 0.021730f, 0.007507f, 0.030084f, 0.020716f, 0.036278f, 0.001196f, + 0.006179f, -0.004607f, 0.015418f, -0.004623f, 0.007741f, -0.006052f, 0.007177f} + }, + { + {0.010258f, 0.000177f, -0.003781f, -0.000892f, -0.009139f, -0.006321f, 0.004095f, 0.000335f, -0.005747f, 0.007150f, 0.004833f, -0.001585f, 0.000457f, -0.001003f, 0.005798f, -0.008047f, 0.003030f, 0.005977f, 0.005321f, -0.011568f, -0.008066f, -0.005763f, 0.007771f, 0.001846f, 0.002551f, -0.003245f, 0.008287f, 0.003074f, -0.002032f, 0.000187f, -0.002336f, 0.001590f, 0.003116f, -0.001869f, -0.002359f, -0.006980f, 0.007412f, 0.012281f, 0.001474f, 0.007788f, -0.001434f, 0.001541f, 0.002825f, 0.003367f, -0.009326f, 0.000623f, -0.009744f, -0.002276f, -0.001370f, 0.003035f, -0.004910f, -0.000199f, 0.002148f, 0.000944f, -0.005680f, 0.000185f, 0.000654f, 0.004617f, -0.006041f, -0.007630f, -0.001016f, 0.010258f, 0.016527f, -0.000008f, 0.002710f, 0.001106f, -0.003539f, -0.009971f, -0.002527f, 0.006883f, -0.003170f, 0.006856f, 0.002672f, 0.006982f, -0.000384f, 0.002689f, 0.002484f, -0.005972f, -0.008023f, -0.000887f, 0.003024f, 0.004562f, 0.002227f, 0.002016f, 0.001371f, 0.001506f, -0.002757f, -0.004423f, -0.002993f, -0.002428f, -0.001155f, 0.000039f, -0.001660f, -0.000270f, 0.001456f, 0.002322f, + 0.002078f, -0.000376f, 0.000134f, 0.001358f, -0.000047f, -0.001781f, 0.004698f, -0.010364f, -0.002352f, -0.009830f, 0.005683f, 0.000636f, -0.004531f, 0.020952f, -0.008190f, -0.015016f, 0.001143f, 0.006952f, -0.001270f, -0.011301f, -0.003221f, -0.004913f, -0.001853f, -0.005361f, -0.001766f, 0.007769f, -0.000549f, -0.005074f, 0.008912f, 0.001307f, 0.008657f, -0.002308f, -0.002133f, 0.003328f, 0.000219f, 0.003877f, -0.001630f, 0.008170f, 0.013350f, -0.003685f, -0.008989f, -0.006585f, 0.005502f, -0.000021f, -0.020577f, -0.001959f, -0.008205f, -0.003057f, 0.010062f, -0.007035f, -0.005350f, 0.006940f, -0.004549f, -0.000998f, 0.009227f, 0.003181f, -0.007291f, 0.003258f, -0.005254f, -0.012155f, 0.003877f, 0.004762f, -0.009233f, -0.005344f, -0.002674f, -0.003883f, -0.000092f, 0.003950f, 0.006294f, 0.009535f, 0.010662f, -0.002552f, 0.001087f, -0.004216f, 0.004596f, 0.002925f, -0.002375f, 0.004461f, 0.006848f, -0.006551f, -0.003343f, 0.001100f, 0.000128f, 0.002634f, 0.007868f, -0.000999f, -0.002112f, 0.007131f, 0.001044f, -0.004955f, -0.003102f, -0.000381f, -0.003042f, 0.002179f, -0.001265f, -0.002742f, + 0.001117f, -0.003110f, -0.002450f, 0.001537f, -0.003124f, -0.002117f, 0.000087f, 0.002065f, -0.003865f, 0.000440f, -0.000942f, -0.001351f, -0.001865f, -0.000179f, -0.003016f, -0.000862f, -0.002888f, -0.016868f, -0.008567f, 0.005182f, 0.007473f, 0.002911f, 0.008107f, -0.006937f, 0.008485f, 0.010408f, -0.002925f, 0.011518f, -0.001572f, 0.008483f, -0.004034f, 0.000256f, -0.003618f, 0.010849f, 0.004237f, -0.000446f, 0.009698f, -0.005170f, -0.004101f, 0.007091f, -0.016845f, -0.002940f, 0.000923f, -0.003593f, -0.015012f, -0.009179f, 0.006231f, -0.005891f, -0.003913f, 0.000207f, 0.011749f, -0.002831f, -0.008220f, -0.000658f, 0.003025f, 0.006633f, -0.001008f, -0.010662f, -0.006865f, -0.001970f, -0.005456f, 0.001760f, -0.009271f, 0.004593f, -0.008723f, -0.012835f, 0.000412f, 0.004485f, 0.005217f, -0.004115f, -0.002945f, -0.008429f, 0.010889f, 0.006283f, 0.001521f, 0.000098f, -0.000302f, -0.003710f, -0.001980f, 0.003669f, 0.004651f, 0.016415f, -0.001849f, 0.004122f, 0.001081f, -0.000507f, -0.008042f, -0.006127f, 0.011138f, -0.004803f, 0.001097f, 0.002750f, 0.001614f, -0.001764f, 0.008419f, 0.000431f, + 0.000309f, -0.009150f, 0.008829f, 0.004936f, -0.003411f, -0.002048f, -0.000989f, -0.002670f, 0.001221f, 0.006349f, -0.000087f, 0.002511f, 0.001928f, -0.000912f, 0.001477f, 0.003271f, -0.000343f, -0.000015f, 0.001012f, 0.001513f, 0.001318f, 0.001860f, 0.003403f, 0.001254f, -0.002498f, 0.002597f, 0.001213f, -0.001859f, -0.001441f, -0.000319f, 0.000389f, 0.004085f, 0.005028f, 0.004490f, 0.010742f, -0.007126f, -0.010634f, -0.008593f, 0.005385f, 0.011870f, -0.002219f, 0.009090f, -0.008104f, -0.009857f, 0.008130f, -0.004110f, 0.000829f, 0.003025f, 0.010192f, 0.003775f, 0.016191f, -0.007073f, -0.008652f, 0.003771f, -0.004799f, -0.004528f, 0.009172f, -0.014342f, -0.008849f, 0.001425f, -0.002782f, 0.006517f, -0.004876f, 0.001787f, 0.011512f, -0.010739f, 0.008002f, -0.006484f, 0.005181f, -0.006075f, -0.001734f, -0.000988f, 0.011932f, 0.002239f, 0.000417f, -0.008748f, 0.000423f, -0.010407f, 0.003895f, 0.002562f, -0.006956f, -0.000172f, -0.002883f, 0.018011f, 0.002420f, 0.001150f, -0.015639f, -0.009170f, -0.013190f, 0.010296f, -0.006722f, -0.000744f, 0.005426f, 0.022981f, 0.016223f, -0.006488f, + -0.014142f, -0.005889f, -0.012278f, 0.012984f, -0.002492f, -0.003587f, -0.005682f, -0.003769f, -0.001065f, -0.005929f, -0.003931f, -0.000980f, -0.004812f, 0.003468f, -0.003366f, 0.004861f, -0.017873f, 0.001234f, -0.001474f, -0.005631f, -0.002648f, -0.005979f, -0.001201f, -0.009359f, 0.000768f, -0.003863f, -0.000313f, 0.005726f, -0.001801f, -0.001975f, -0.004006f, -0.004422f, -0.001249f, 0.001315f, -0.000249f, -0.000339f, -0.001594f, -0.000642f, -0.001886f, -0.000255f, 0.000460f, 0.001164f, -0.001335f, -0.001523f, -0.002125f, -0.001877f, -0.001626f, -0.002852f, -0.009066f, 0.006515f, -0.009381f, -0.016659f, 0.016995f, 0.007713f, -0.017859f, 0.017860f, -0.002878f, -0.001022f, -0.025090f, 0.014952f, 0.009940f, -0.020258f, 0.006021f, -0.003322f, 0.007671f, 0.001803f, 0.008842f, 0.005707f, 0.002247f, -0.009405f, 0.000868f, 0.003504f, -0.012484f, -0.005283f, -0.014729f, -0.002490f, -0.009161f, -0.004862f, 0.001660f, -0.011488f, -0.004258f, -0.016945f, 0.006411f, 0.001728f, 0.001454f, 0.001535f, -0.007316f, -0.014744f, -0.004628f, 0.005246f, -0.002406f, -0.001235f, 0.015475f, -0.022921f, 0.009643f, 0.011780f, + -0.001710f, 0.000786f, -0.004477f, -0.001768f, -0.007453f, -0.011298f, -0.007746f, -0.008891f, -0.005988f, 0.005751f, 0.003145f, 0.005126f, 0.007743f, -0.001797f, -0.004139f, 0.011110f, 0.021117f, 0.014953f, -0.000325f, -0.017931f, 0.004935f, -0.002707f, 0.002638f, 0.019103f, -0.000131f, 0.019243f, 0.017119f, -0.002298f, -0.005750f, -0.004552f, 0.001334f, 0.001707f, 0.006376f, 0.019512f, 0.005181f, 0.000827f, -0.002010f, -0.012011f, 0.001424f, 0.003775f, -0.004096f, -0.000541f, 0.000605f, -0.000104f, 0.002231f, 0.001748f, 0.001364f, -0.001461f, 0.002344f, 0.002214f, 0.002094f, 0.002452f, -0.006547f, -0.000993f, -0.004707f, 0.001922f, -0.003680f, 0.001599f, -0.001059f, -0.001631f, -0.003938f, 0.000798f, 0.000968f, -0.005669f, -0.001836f, 0.001395f, 0.027068f, 0.006924f, -0.004808f, -0.001310f, 0.008328f, -0.002843f, 0.026221f, -0.002783f, -0.004027f, 0.033226f, 0.000209f, 0.016801f, -0.006245f, 0.000463f, -0.001448f, 0.002736f, -0.004249f, 0.002308f, -0.000519f, -0.000949f, -0.018027f, -0.001724f, -0.004295f, -0.003226f, -0.007512f, 0.011540f, 0.005398f, 0.006867f, -0.010112f, -0.001121f, + -0.015981f, -0.006398f, 0.003003f, -0.001301f, -0.009715f, -0.002994f, 0.005342f, 0.012057f, 0.007298f, -0.003824f, -0.014858f, -0.000522f, 0.004231f, -0.002497f, 0.007873f, 0.005230f, 0.010673f, 0.014711f, -0.004784f, -0.000098f, -0.015867f, -0.019291f, 0.018206f, 0.009773f, -0.000658f, -0.000812f, -0.000603f, -0.007038f, -0.007714f, -0.000154f, 0.014574f, 0.008420f, 0.002646f, 0.017780f, -0.013631f, 0.003994f, -0.011180f, -0.008630f, 0.007651f, 0.007856f, 0.006473f, 0.026782f, -0.000966f, -0.012108f, 0.002104f, -0.011870f, 0.005376f, 0.003120f, 0.009784f, -0.005288f, 0.000156f, 0.001202f, -0.008997f, -0.001613f, 0.006297f, -0.000947f, 0.001633f, -0.003915f, -0.001992f, -0.000594f, 0.004362f, -0.002310f, 0.002756f, -0.004153f, 0.000392f, -0.005369f, 0.001719f, -0.002856f, -0.001835f, 0.000849f, 0.002712f, -0.003327f, 0.003594f, 0.002287f, 0.004386f, 0.000259f, 0.002604f, -0.001130f, 0.001594f, 0.000786f, 0.001613f, -0.001677f, -0.000025f, -0.001571f, -0.000213f, 0.000778f, 0.002276f, -0.014860f, -0.019955f, 0.007748f, -0.018650f, 0.000006f, 0.020760f, -0.021722f, 0.007950f, 0.009752f, + -0.005829f, -0.026811f, 0.000353f, 0.015685f, -0.017349f, 0.010790f, -0.001216f, -0.007688f, -0.022497f, -0.000631f, -0.016232f, 0.002877f, -0.008243f, -0.012645f, -0.015791f, 0.006494f, -0.002242f, -0.000921f, 0.015006f, -0.009079f, 0.012659f, -0.009612f, -0.003851f, 0.019405f, 0.006646f, -0.010346f, 0.007962f, 0.004690f, -0.008980f, 0.004740f, 0.004877f, -0.003436f, -0.003837f, 0.000784f, -0.004330f, -0.005107f, 0.003174f, 0.003561f, 0.026399f, -0.024849f, 0.004017f, 0.001597f, -0.008913f, 0.017884f, 0.010169f, -0.006123f, -0.019277f, 0.001727f, -0.001956f, -0.005806f, -0.012168f, -0.014237f, 0.017382f, 0.011287f, 0.001438f, -0.001725f, 0.009258f, 0.004714f, -0.004214f, 0.007423f, 0.005320f, -0.004809f, 0.018494f, -0.006855f, 0.011312f, -0.007561f, 0.005626f, 0.005831f, 0.004166f, -0.000546f, -0.010297f, 0.009851f, -0.008018f, -0.008327f, -0.005729f, 0.002881f, -0.000022f, 0.001236f, -0.009767f, 0.005321f, 0.004100f, -0.006165f, 0.000633f, -0.000226f, -0.003092f, 0.000599f, -0.002050f, 0.004739f, -0.001366f, 0.000741f, 0.003947f, -0.001775f, -0.003005f, 0.002643f, -0.003425f, 0.002784f, + -0.000618f, -0.000018f, -0.003943f, -0.001743f, -0.000138f, -0.004282f, 0.004241f, 0.002427f, 0.000955f, 0.002840f, -0.000916f, 0.001942f, 0.008807f, -0.020124f, 0.014768f, -0.008423f, -0.003691f, -0.011553f, -0.008287f, 0.007032f, -0.006607f, 0.005751f, 0.022559f, 0.007715f, 0.012405f, -0.028758f, -0.019007f, -0.010251f, -0.006858f, 0.003107f, -0.000112f, 0.004954f, -0.024112f, 0.012911f, 0.005402f, 0.003220f, 0.023042f, 0.000382f, -0.013032f, 0.021606f, 0.008522f, -0.009652f, 0.004433f, -0.012404f, 0.011376f, 0.005347f, 0.015155f, -0.012986f, -0.009199f, 0.003827f, -0.013106f, 0.016540f, -0.015161f, -0.000274f, 0.014720f, 0.013538f, -0.027998f, -0.000801f, 0.001381f, 0.003250f, 0.004643f, 0.030592f, 0.007075f, 0.001905f, -0.009357f, -0.007745f, -0.016535f, -0.008967f, 0.022629f, 0.000540f, -0.026998f, 0.000401f, 0.006259f, -0.015345f, -0.016874f, 0.001998f, -0.010943f, 0.004483f, 0.024798f, 0.012159f, 0.010439f, -0.010180f, -0.026490f, 0.002128f, -0.004531f, 0.012152f, -0.002379f, -0.022199f, -0.002696f, 0.005781f, 0.006116f, 0.005983f, -0.001871f, 0.018780f, 0.003549f, -0.011961f, + 0.015503f, -0.001154f, 0.009278f, -0.000319f, -0.002314f, -0.008076f, 0.011456f, 0.007871f, 0.004480f, -0.005865f, -0.002288f, -0.001549f, -0.003868f, 0.002167f, -0.000025f, -0.004987f, 0.002478f, 0.001500f, -0.002800f, -0.003714f, -0.001545f, -0.002809f, -0.000410f, 0.003475f, -0.003564f, 0.001787f, 0.004381f, 0.005239f, -0.001351f, 0.002230f, -0.002794f, -0.035468f, -0.010548f, 0.010014f, 0.027418f, 0.003897f, 0.014236f, 0.048633f, 0.008118f, 0.008290f, -0.007487f, -0.023330f, 0.013255f, -0.011319f, 0.012217f, -0.002943f, 0.032219f, 0.023444f, -0.012375f, -0.026355f, -0.020909f, 0.015886f, -0.013913f, 0.019476f, 0.008607f, 0.006340f, -0.006690f, -0.002577f, 0.023201f, -0.004579f, 0.020481f, 0.020448f, 0.010615f, 0.014341f, -0.015864f, 0.015531f, 0.008421f, -0.008339f, 0.022677f, -0.009983f, 0.020607f, 0.001539f, 0.002370f, -0.030181f, 0.018232f, 0.001656f, -0.005626f, 0.014900f, -0.020984f, -0.008352f, 0.012651f, 0.010294f, -0.019329f, 0.003116f, -0.012346f, -0.007132f, 0.019244f, 0.002573f, 0.005844f, -0.002035f, -0.022053f, 0.014833f, 0.014141f, 0.000959f, 0.011192f, 0.004993f, + -0.009738f, -0.010291f, -0.000777f, 0.011785f, -0.019962f, -0.000727f, 0.001343f, 0.000865f, -0.000130f, 0.008762f, 0.011573f, 0.023643f, 0.013332f, 0.000782f, -0.033166f, -0.010927f, -0.012378f, -0.001114f, 0.002523f, -0.009335f, -0.019632f, -0.006205f, -0.008809f, 0.005196f, 0.000831f, -0.005613f, 0.002175f, -0.005755f, 0.009229f, -0.003292f, -0.003851f, -0.005428f, 0.000174f, 0.002648f, -0.011772f, 0.007434f, -0.007545f, 0.003092f, -0.001884f, -0.004369f, 0.000284f, -0.007293f, 0.002436f, -0.006578f, -0.004719f, -0.000936f, -0.003723f, -0.003498f, 0.004148f, 0.007009f, 0.004278f, 0.006749f, 0.008858f, -0.001813f, 0.001388f, 0.043848f, 0.012926f, 0.005784f, -0.016203f, -0.039607f, 0.028692f, 0.008873f, -0.026151f, 0.007786f, -0.002755f, 0.006690f, 0.005647f, -0.018999f, -0.040455f, -0.031781f, 0.010805f, 0.024822f, -0.004837f, 0.026065f, -0.012002f, 0.020333f, 0.024951f, 0.033650f, -0.007329f, 0.024864f, -0.021992f, 0.008409f, -0.011949f, 0.002983f, 0.013525f, -0.000590f, -0.007071f, 0.006051f, 0.016961f, -0.012020f, -0.022290f, -0.022678f, 0.047603f, 0.000082f, -0.002248f, -0.021429f, + 0.022144f, 0.007161f, -0.043695f, -0.025380f, 0.009959f, -0.006167f, -0.007629f, 0.017114f, 0.005926f, 0.042408f, 0.023554f, -0.001503f, -0.024506f, -0.024184f, -0.013591f, -0.009940f, -0.027817f, 0.025852f, -0.018978f, 0.020460f, 0.017725f, -0.017694f, -0.022675f, -0.022050f, -0.032050f, 0.007851f, -0.000387f, -0.011564f, -0.014418f, -0.023613f, -0.008308f, -0.023256f, 0.005055f, 0.002830f, -0.007763f, 0.003186f, 0.019231f, -0.048679f, -0.018754f, -0.039721f, 0.020226f, 0.013996f, -0.016897f, -0.005734f, 0.008330f, -0.007477f, -0.000081f, 0.009440f, -0.007207f, -0.015889f, -0.001607f, -0.004564f, -0.004849f, -0.000178f, -0.001901f, -0.006741f, 0.000434f, 0.001430f, 0.008666f, -0.011710f, 0.003282f, 0.006465f, -0.000555f, -0.004834f, -0.007343f, -0.002167f, -0.000973f, 0.001692f, -0.002416f, -0.000618f, -0.004380f, 0.002266f, -0.001647f, -0.007467f, 0.013517f, 0.001405f, 0.004213f, -0.023579f, -0.045452f, -0.010096f, -0.011795f, 0.002520f, -0.010548f, 0.001977f, 0.004806f, -0.004882f, 0.019534f, -0.025167f, -0.007621f, -0.023884f, -0.001155f, -0.011885f, 0.027686f, 0.030950f, 0.024741f, -0.034504f, + 0.024492f, -0.012455f, 0.018606f, -0.007129f, 0.013742f, -0.011448f, -0.014738f, 0.005325f, -0.019043f, 0.012269f, 0.014784f, -0.001825f, 0.008883f, -0.017457f, -0.002190f, 0.029572f, -0.023503f, 0.001130f, -0.006971f, -0.009637f, -0.018949f, -0.001055f, 0.029213f, 0.038496f, -0.024285f, 0.011640f, -0.003049f, -0.023354f, -0.023884f, -0.025652f, -0.011744f, 0.048730f, 0.029416f, -0.009108f, 0.015639f, -0.010343f, 0.013543f, -0.026663f, 0.015652f, -0.000803f, -0.014595f, 0.037092f, 0.019098f, 0.007573f, 0.012100f, 0.010615f, 0.034699f, 0.004600f, -0.029513f, 0.011991f, 0.022444f, 0.017611f, -0.051489f, 0.031403f, -0.021889f, -0.019428f, -0.009668f, 0.003194f, -0.020246f, 0.022218f, 0.049237f, -0.008574f, 0.006985f, 0.025189f, 0.004213f, -0.004136f, 0.005924f, 0.002564f, 0.014302f, 0.012910f, 0.007699f, 0.023626f, 0.012043f, -0.006597f, 0.016005f, 0.009983f, -0.007195f, -0.014403f, 0.008028f, -0.002009f, 0.008695f, -0.004144f, 0.002532f, 0.007129f, 0.002715f, -0.002077f, -0.001876f, 0.003206f, 0.010966f, 0.002390f, -0.002720f, 0.002421f, 0.008392f, -0.003777f, 0.000337f, 0.014301f, + 0.005415f, -0.003852f, 0.007719f, 0.002427f, 0.001958f, 0.005857f, -0.000283f, 0.004821f, -0.002389f, -0.009187f, -0.008443f, 0.007066f, 0.031623f, 0.020818f, 0.085941f, 0.024198f, -0.014521f, 0.005667f, 0.014416f, 0.000502f, 0.028591f, 0.021467f, 0.019788f, -0.025439f, -0.042791f, 0.042885f, -0.024265f, 0.004213f, 0.014727f, 0.047047f, 0.018753f, -0.028245f, 0.025565f, -0.025532f, -0.005387f, -0.035162f, -0.046449f, -0.005038f, 0.012436f, 0.012654f, 0.009248f, 0.011979f, -0.003757f, -0.031677f, -0.011855f, 0.010380f, 0.010662f, -0.016704f, 0.035240f, 0.022563f, -0.021268f, 0.011866f, 0.017499f, 0.007042f, 0.000985f, -0.019395f, -0.002517f, -0.013561f, -0.008180f, 0.002146f, 0.021887f, 0.054843f, -0.014945f, 0.005114f, 0.007970f, 0.020535f, -0.019672f, 0.069475f, -0.006090f, 0.006843f, 0.005700f, -0.031351f, -0.030957f, -0.049689f, -0.021255f, 0.027384f, -0.009648f, 0.013826f, 0.010943f, 0.047831f, 0.007533f, 0.008672f, 0.002426f, 0.037711f, 0.018063f, -0.015624f, 0.034414f, -0.031322f, 0.004942f, 0.031899f, 0.040918f, 0.037834f, 0.014786f, -0.021433f, -0.035194f, -0.015073f, + -0.011318f, -0.025558f, -0.014371f, -0.014514f, -0.004148f, -0.021457f, 0.005339f, -0.007348f, -0.003630f, -0.018707f, -0.002308f, -0.011650f, 0.018445f, 0.001958f, 0.003953f, -0.016651f, -0.003322f, -0.022886f, 0.001489f, 0.009823f, -0.000839f, 0.016778f, 0.010469f, 0.000051f, 0.006825f, -0.003468f, -0.010442f, -0.006064f, -0.004750f, -0.019635f, 0.001706f, 0.003922f, 0.004572f, 0.005852f, -0.009817f, 0.013854f, 0.014911f, 0.006609f, -0.011761f, -0.007856f, -0.004004f, 0.003351f, 0.008186f, 0.004474f, -0.007920f, -0.004051f, -0.009049f, -0.035807f, 0.020168f, 0.009567f, 0.024757f, -0.006665f, -0.054756f, 0.004347f, -0.036742f, -0.032586f, 0.009626f, 0.007767f, 0.015212f, -0.009537f, 0.010930f, -0.001958f, -0.018781f, 0.029807f, -0.004878f, -0.009904f, -0.012018f, -0.020961f, -0.018019f, 0.010832f, -0.022695f, 0.005504f, -0.014555f, -0.009970f, -0.006339f, 0.029252f, -0.005844f, 0.031402f, 0.019543f, -0.008259f, 0.010325f, 0.010858f, 0.022211f, -0.015429f, -0.021177f, 0.003158f, 0.013035f, 0.017135f, 0.029359f, -0.032529f, -0.031670f, 0.013524f, 0.010398f, 0.036353f, -0.018013f, -0.002600f, + 0.017964f, 0.000107f, 0.004980f, -0.006715f, 0.023718f, 0.029892f, 0.013652f, -0.003801f, 0.018708f, 0.062694f, -0.013908f, -0.018295f, 0.023240f, -0.002574f, 0.036584f, 0.008804f, 0.017058f, 0.020639f, -0.006726f, 0.014447f, 0.042350f, -0.011565f, -0.050922f, 0.035813f, 0.010452f, -0.016776f, 0.004879f, -0.077586f, 0.051745f, -0.000516f, 0.032080f, -0.020375f, 0.016738f, 0.002365f, -0.030934f, -0.029486f, -0.004057f, 0.005723f, -0.022860f, 0.000122f, 0.003512f, -0.004200f, -0.007605f, -0.004764f, -0.025004f, -0.004154f, -0.015010f, 0.000215f, -0.007848f, -0.002268f, -0.008989f, 0.015047f, -0.011165f, -0.008524f, -0.016132f, -0.007800f, -0.018407f, -0.003396f, 0.004128f, -0.010243f, -0.001158f, -0.008389f, -0.009151f, -0.009912f, -0.000606f, -0.008206f, -0.006114f, 0.002961f, -0.002633f, 0.008007f, -0.005707f, -0.011759f, -0.012869f, 0.000084f, 0.002233f, -0.008102f, -0.001652f, -0.003647f, 0.003954f, -0.017297f, -0.033169f, -0.001638f, 0.051663f, 0.025360f, -0.066540f, 0.010186f, -0.012006f, 0.005552f, 0.010881f, -0.003475f, -0.034303f, 0.004546f, -0.005308f, 0.029550f, 0.057797f, -0.009809f, + 0.018613f, 0.037832f, -0.001700f, -0.010961f, -0.009774f, 0.014803f, 0.057724f, -0.001456f, -0.003995f, 0.047178f, -0.019303f, 0.012507f, 0.000134f, -0.001081f, -0.012369f, 0.017558f, -0.052953f, 0.001352f, 0.016789f, 0.038403f, 0.041177f, -0.034175f, 0.001461f, 0.036890f, -0.002215f, 0.068928f, -0.025089f, -0.034214f, 0.004697f, 0.050002f, 0.008929f, -0.038884f, -0.018050f, 0.011182f, -0.000079f, 0.021632f, -0.056169f, 0.006627f, 0.002607f, -0.012001f, -0.040712f, -0.036410f, 0.009707f, -0.011223f, -0.002406f, 0.001807f, -0.042363f, -0.044784f, 0.009599f, 0.006776f, -0.044898f, -0.015450f, -0.029129f, 0.026029f, -0.071045f, -0.027128f, 0.023522f, -0.043396f, 0.023830f, -0.011841f, -0.017202f, 0.023433f, -0.007122f, 0.035293f, 0.033811f, 0.007424f, 0.021041f, -0.009615f, 0.004395f, -0.025248f, 0.027311f, -0.019606f, 0.016316f, -0.026434f, 0.019596f, 0.001207f, 0.008822f, -0.002385f, 0.000277f, -0.015225f, 0.018133f, -0.019923f, 0.003582f, 0.002173f, 0.010269f, -0.021844f, 0.011459f, -0.008883f, -0.005939f, 0.006790f, -0.004467f, -0.010281f, 0.014799f, 0.006108f, 0.015808f, 0.006848f, + -0.001455f, -0.007419f, -0.007309f, -0.002025f, 0.003091f, -0.010386f, 0.003823f, -0.007583f, 0.003834f, -0.020891f, -0.010731f, -0.008563f, 0.010879f, 0.012350f, -0.006687f, 0.002779f, -0.002922f, -0.017362f, 0.037571f, 0.000045f, 0.020780f, -0.039221f, -0.002957f, -0.037121f, 0.038930f, 0.017304f, 0.050939f, 0.035970f, -0.018092f, 0.006945f, 0.040234f, 0.020748f, 0.020474f, 0.013212f, -0.034207f, -0.009697f, 0.016794f, 0.002795f, 0.019838f, -0.043513f, -0.032376f, 0.019810f, 0.065284f, 0.008998f, -0.021615f, 0.041364f, 0.011735f, 0.025895f, 0.006799f, 0.005156f, -0.036878f, -0.037425f, 0.000638f, 0.000737f, -0.064561f, 0.005334f, -0.013289f, -0.003206f, 0.020388f, -0.025068f, 0.015402f, 0.050806f, 0.005290f, -0.082522f, -0.059455f, -0.009573f, -0.018326f, -0.020436f, -0.000654f, 0.015158f, 0.013057f, -0.020149f, 0.022862f, 0.021827f, 0.019641f, -0.012670f, 0.016899f, -0.009213f, -0.021544f, -0.004972f, 0.018874f, -0.061562f, -0.014128f, -0.027734f, -0.032204f, -0.012687f, 0.008634f, -0.016265f, -0.001741f, 0.068037f, 0.038584f, -0.025988f, 0.000182f, 0.000883f, -0.011761f, -0.011988f, + 0.005917f, 0.045675f, 0.016603f, 0.007024f, -0.014179f, -0.010131f, -0.023690f, -0.027124f, -0.029099f, -0.006531f, 0.003677f, 0.009146f, -0.010225f, 0.008187f, -0.002469f, -0.006500f, -0.002566f, -0.007651f, -0.025559f, -0.006223f, -0.000282f, -0.006314f, -0.022115f, 0.002934f, -0.008040f, 0.024193f, -0.012204f, 0.008291f, -0.002495f, 0.010076f, -0.000164f, -0.019312f, 0.001617f, 0.023494f, 0.003527f, 0.021151f, -0.005827f, 0.010907f, -0.006758f, 0.006985f, -0.001483f, -0.014284f, -0.006449f, -0.001373f, -0.002618f, -0.002688f, -0.000133f, 0.013937f, 0.026614f, -0.037051f, -0.009458f, -0.015727f, 0.009786f, 0.077344f, 0.012156f, -0.038119f, 0.009996f, 0.034144f, -0.007415f, 0.031900f, 0.040583f, -0.021033f, 0.009531f, 0.020491f, 0.013928f, 0.000873f, -0.006074f, -0.012617f, 0.005980f, 0.024085f, 0.012350f, 0.022493f, -0.033852f, -0.052069f, -0.005622f, 0.023189f, 0.020387f, 0.016642f, -0.006006f, -0.048034f, 0.015383f, 0.010623f, 0.071829f, 0.075582f, 0.017886f, -0.056277f, 0.040615f, -0.021445f, -0.057573f, -0.013460f, -0.068121f, -0.051858f, -0.022962f, -0.024995f, -0.052843f, 0.009179f, + -0.021342f, -0.060438f, -0.055361f, 0.015961f, 0.035825f, -0.005937f, -0.046745f, 0.013857f, 0.001265f, 0.014920f, 0.029309f, 0.028620f, -0.036183f, 0.046596f, 0.031952f, 0.004060f, 0.012805f, 0.032422f, -0.001765f, 0.084810f, -0.060549f, -0.028923f, -0.002098f, -0.069007f, 0.056564f, 0.004127f, 0.071121f, 0.021974f, 0.015860f, -0.003606f, 0.014038f, 0.030168f, 0.001117f, -0.028095f, -0.000520f, -0.014999f, 0.011227f, 0.010866f, 0.020292f, -0.008542f, -0.026062f, -0.000175f, 0.024093f, 0.011429f, -0.015482f, -0.007715f, 0.012644f, -0.017322f, -0.000136f, 0.000373f, 0.022132f, 0.008680f, -0.012144f, -0.005262f, -0.013789f, -0.022248f, -0.019306f, -0.001069f, 0.004182f, -0.011030f, -0.008128f, 0.002588f, -0.011140f, 0.017429f, 0.008484f, -0.000209f, 0.010461f, 0.035201f, -0.013405f, -0.006700f, 0.003963f, 0.009453f, -0.018993f, 0.020632f, -0.006953f, -0.000637f, 0.003522f, 0.015429f, 0.025964f, -0.037701f, 0.009893f, -0.075290f, -0.020404f, -0.004665f, -0.018531f, 0.082659f, 0.026045f, -0.021956f, -0.051938f, -0.026327f, -0.021385f, -0.032897f, -0.024153f, 0.012643f, -0.075820f, -0.016318f, + 0.055633f, -0.006583f, -0.006264f, -0.057919f, 0.055237f, 0.027389f, 0.001231f, -0.021963f, 0.023532f, 0.011687f, -0.013210f, 0.025226f, -0.039162f, -0.010380f, -0.020011f, 0.011233f, -0.009161f, -0.024657f, 0.027986f, -0.021031f, 0.011661f, 0.000816f, -0.038052f, -0.023676f, -0.005957f, -0.047592f, -0.046759f, -0.062568f, -0.016178f, 0.028710f, -0.021037f, -0.011456f, 0.036079f, -0.044030f, -0.036234f, 0.039041f, -0.000343f, -0.002250f, 0.035121f, 0.000526f, -0.030109f, -0.017266f, 0.011832f, 0.025437f, -0.038894f, -0.012193f, 0.047262f, 0.020456f, 0.045603f, 0.023673f, -0.009377f, 0.024057f, -0.001872f, -0.061789f, 0.019382f, -0.046738f, 0.033854f, 0.005950f, 0.012392f, -0.019655f, -0.053500f, 0.011281f, -0.008015f, -0.046368f, -0.018638f, 0.020855f, -0.023589f, 0.001008f, 0.007272f, 0.015198f, -0.015151f, 0.000856f, 0.002211f, -0.003958f, 0.009646f, -0.006914f, 0.005384f, 0.019077f, -0.003561f, 0.006568f, 0.004957f, -0.012295f, 0.003849f, 0.009182f, 0.005157f, -0.009169f, 0.012486f, 0.008743f, -0.000962f, -0.012855f, -0.026432f, 0.005487f, -0.020925f, 0.017019f, -0.021364f, 0.014042f, + 0.017410f, 0.000885f, 0.000966f, 0.000567f, 0.009876f, 0.001608f, -0.009131f, 0.020601f, 0.016381f, -0.008070f, -0.012908f, -0.021507f, 0.056412f, 0.019695f, 0.002082f, 0.006888f, -0.014733f, 0.022367f, 0.034762f, 0.088063f, 0.076916f, 0.006651f, -0.033862f, 0.015665f, 0.044599f, 0.012747f, 0.034535f, 0.024908f, 0.016724f, -0.026102f, -0.033519f, -0.040283f, -0.002808f, 0.014966f, 0.028372f, 0.057209f, 0.030275f, 0.036690f, 0.021335f, 0.034017f, 0.017165f, 0.032768f, -0.021884f, 0.006178f, 0.061850f, -0.001663f, 0.047583f, 0.012612f, 0.038482f, -0.061057f, -0.009930f, -0.017998f, -0.017991f, 0.014240f, 0.023781f, 0.044222f, 0.071541f, 0.059926f, -0.021242f, 0.010642f, -0.079446f, 0.019299f, 0.018294f, 0.069999f, -0.055647f, 0.044271f, -0.014448f, -0.039010f, 0.029894f, 0.009225f, 0.024949f, 0.043849f, -0.014267f, -0.056157f, 0.029066f, -0.036103f, -0.049507f, -0.023532f, 0.066237f, -0.057497f, -0.081613f, -0.041186f, -0.013523f, 0.043047f, -0.004494f, -0.029349f, -0.056328f, -0.042526f, 0.026936f, -0.003848f, -0.001054f, 0.036486f, -0.039743f, 0.011364f, 0.040808f, 0.015895f, + 0.027319f, 0.039526f, -0.026769f, -0.013488f, -0.022624f, 0.030231f, 0.006712f, 0.015566f, 0.011019f, -0.027204f, 0.033785f, 0.008350f, 0.005354f, -0.013327f, -0.049397f, -0.047188f, 0.004703f, -0.022458f, -0.009321f, -0.021302f, -0.018527f, -0.008132f, 0.008704f, -0.000283f, -0.020836f, 0.026606f, 0.022297f, -0.003001f, -0.023652f, 0.003877f, 0.014243f, -0.016902f, -0.007658f, -0.009707f, 0.000197f, 0.011498f, -0.005310f, -0.011684f, -0.009460f, 0.008085f, 0.006764f, 0.012970f, 0.016177f, -0.008482f, 0.009243f, 0.010010f, 0.055335f, -0.017455f, -0.061149f, 0.004291f, -0.025540f, -0.087419f, -0.044216f, 0.114647f, 0.016034f, -0.051780f, -0.056851f, 0.006398f, 0.001015f, 0.023675f, 0.029765f, -0.040104f, -0.026626f, -0.063976f, 0.014895f, -0.023215f, -0.015357f, 0.097745f, 0.020993f, -0.013534f, -0.100899f, -0.006531f, -0.053876f, 0.053384f, 0.065962f, 0.006901f, 0.051319f, -0.060473f, -0.023784f, -0.038215f, -0.009020f, 0.099812f, 0.124329f, 0.019837f, -0.033183f, -0.044422f, -0.089760f, 0.001207f, 0.011617f, 0.108507f, 0.060571f, -0.015884f, -0.178413f, -0.092442f, 0.015366f, -0.017152f, + 0.156717f, 0.052504f, -0.075209f, -0.031317f, -0.134271f, -0.042519f, 0.004735f, 0.087806f, 0.090623f, 0.101716f, 0.004854f, 0.024086f, -0.010692f, 0.008769f, 0.125151f, -0.046199f, 0.091933f, -0.022278f, -0.094386f, -0.028277f, -0.100056f, -0.032157f, 0.131038f, 0.059565f, 0.093567f, -0.031021f, 0.073379f, -0.082160f, -0.013087f, 0.019523f, 0.039118f, 0.077817f, -0.026258f, -0.001699f, 0.004917f, -0.007381f, 0.012033f, 0.020756f, -0.022260f, 0.003384f, -0.023407f, -0.042354f, 0.019048f, 0.034405f, 0.019195f, -0.004472f, -0.025423f, -0.056666f, -0.055796f, -0.029438f, 0.018891f, 0.052147f, 0.029394f, 0.040337f, -0.054849f, -0.071921f, -0.055467f, 0.006229f, 0.063002f, 0.069951f, 0.053748f, -0.032120f, -0.136973f, -0.088039f, 0.002671f, 0.068946f, 0.148855f, 0.057670f, 0.012240f, -0.067781f, -0.089288f, -0.031033f, -0.028412f, 0.078005f, 0.086215f, 0.032223f, -0.005110f, -0.074827f, -0.056118f, 0.017090f, 0.025779f, 0.063444f, 0.030840f, -0.032796f, -0.022947f, -0.039269f, -0.018686f, 0.018429f, 0.016853f, -0.079486f, 0.088155f, 0.000149f, -0.022973f, -0.136964f, -0.036870f, -0.036987f, + -0.061795f, 0.132593f, 0.001421f, 0.059403f, -0.090631f, 0.050321f, 0.042258f, -0.040784f, 0.026538f, -0.007844f, 0.023724f, -0.000021f, 0.067842f, 0.023950f, -0.065805f, 0.039738f, 0.032810f, -0.000234f, 0.045815f, -0.033882f, -0.017373f, 0.057460f, 0.040315f, 0.038259f, 0.019147f, 0.033283f, -0.099174f, 0.086554f, -0.049759f, -0.031718f, 0.018982f, -0.069595f, 0.101655f, -0.028947f, 0.010253f, 0.073321f, 0.002643f, -0.011231f, 0.040000f, 0.040724f, 0.072041f, -0.017631f, -0.066655f, -0.068129f, 0.007695f, -0.024656f, 0.031668f, -0.041246f, -0.019877f, -0.027956f, 0.020516f, -0.127969f, 0.002236f, 0.094843f, 0.026426f, 0.038553f, -0.003422f, -0.010554f, 0.025171f, -0.033866f, -0.038482f, 0.023714f, 0.013369f, -0.041735f, -0.046122f, 0.176115f, -0.018908f, -0.057419f, 0.016167f, 0.082481f, -0.002151f, -0.065199f, 0.026943f, -0.012342f, -0.024498f, 0.053045f, 0.067649f, -0.049544f, -0.080711f, 0.018143f, 0.019597f, -0.018791f, -0.048226f, 0.002269f, 0.024513f, -0.007579f, -0.007738f, -0.003347f, -0.008225f, 0.012830f, 0.014520f, -0.016752f, 0.001933f, 0.007112f, 0.003728f, -0.010134f, + 0.003818f, -0.000699f, -0.022295f, 0.015983f, 0.006984f, 0.031061f, 0.015571f, -0.011990f, 0.012829f, -0.006314f, 0.018467f, -0.001457f, -0.004701f, 0.025308f, -0.006236f, 0.017296f, -0.005026f, -0.020156f, -0.001664f, 0.022768f, -0.006364f, 0.025937f, -0.024632f, 0.032602f, 0.007765f, -0.023668f, 0.009962f, 0.000386f, 0.012111f, -0.004091f, -0.009409f, -0.002505f, 0.025611f, -0.068324f, 0.024333f, 0.107814f, 0.169806f, -0.075080f, 0.055351f, -0.112107f, -0.033038f, -0.068296f, -0.009305f, 0.104343f, 0.110746f, 0.088002f, -0.002752f, -0.070277f, -0.042486f, 0.038263f, 0.002891f, 0.019192f, 0.057891f, -0.001063f, 0.028827f, -0.073667f, -0.018771f, -0.042612f, -0.051878f, 0.028482f, 0.023747f, 0.001607f, 0.051923f, -0.044073f, -0.001560f, 0.011691f, -0.062115f, -0.001716f, 0.004379f, -0.039280f, -0.014805f, 0.014729f, -0.026220f, 0.058510f, -0.019119f, 0.088630f, 0.067048f, -0.043698f, -0.012247f, -0.060742f, -0.069407f, -0.090153f, 0.028845f, 0.041553f, 0.120511f, 0.091893f, 0.042953f, 0.058397f, 0.011200f, -0.066382f, -0.043869f, -0.037191f, -0.045184f, -0.009614f, 0.025303f, -0.002447f, + -0.031049f, 0.008076f, -0.031328f, 0.019688f, 0.044896f, 0.008740f, -0.046836f, 0.036588f, -0.022458f, -0.023858f, -0.046873f, 0.024237f, 0.020781f, 0.010618f, 0.005740f, 0.106223f, 0.081191f, 0.066390f, 0.011265f, -0.015447f, -0.090012f, -0.018880f, -0.009427f, 0.088473f, 0.050691f, 0.023030f, 0.026724f, 0.076617f, -0.012254f, -0.030577f, -0.041453f, -0.034729f, -0.016375f, -0.007820f, 0.006925f, 0.000877f, 0.000488f, 0.039721f, -0.004697f, -0.023826f, -0.014643f, -0.008226f, 0.000755f, 0.019600f, 0.035387f, 0.015452f, -0.004602f, 0.021877f, -0.036868f, 0.014263f, 0.033638f, 0.013672f, 0.066424f, -0.027414f, 0.000282f, 0.011250f, -0.027949f, 0.007112f, -0.044369f, -0.002430f, 0.015262f, 0.000377f, 0.017792f, -0.012803f, -0.184350f, -0.106790f, -0.061480f, 0.105984f, 0.049767f, 0.282069f, 0.265205f, 0.273899f, 0.277180f, 0.296835f, 0.208933f, 0.108960f, 0.158240f, 0.094966f, -0.047194f, -0.087927f, -0.135411f, -0.263548f, -0.237297f, -0.246223f, -0.178332f, -0.180912f, -0.133935f, -0.111195f, -0.058975f, 0.005946f, -0.104187f, -0.053428f, -0.021542f, -0.016563f, -0.056337f, 0.014451f, + 0.070650f, 0.079105f, 0.029611f, 0.093476f, 0.119217f, 0.029421f, 0.023560f, 0.023470f, 0.117154f, 0.121836f, 0.154032f, 0.172171f, 0.150915f, 0.170984f, 0.259996f, 0.105243f, 0.203035f, 0.276753f, 0.178189f, 0.210056f, 0.165392f, 0.082661f, 0.098869f, 0.109081f, 0.097243f, 0.131797f, 0.130125f, 0.080563f, 0.015933f, 0.040016f, 0.076760f, -0.004878f, 0.009058f, -0.036901f, -0.042232f, -0.130691f, -0.058631f, -0.226439f, -0.284257f, -0.227902f, -0.259335f, -0.353236f, -0.340841f, -0.202299f, -0.380732f, -0.345735f, -0.315275f, -0.356920f, -0.300893f, -0.229792f, -0.288318f, -0.212427f, -0.058609f, -0.141107f, -0.174199f, -0.069044f, -0.068730f, -0.056785f, -0.062344f, -0.027874f, 0.017482f, 0.035815f, 0.069888f, 0.090152f, 0.103608f, 0.116440f, 0.120632f, 0.169842f, 0.104385f, 0.200098f, 0.224307f, 0.106678f, 0.208383f, 0.197906f, 0.125869f, 0.151692f, 0.220484f, 0.149757f, 0.248834f, 0.187668f, 0.235977f, 0.165044f, 0.150336f, 0.155562f, 0.145682f, 0.114188f, 0.131107f, 0.113757f, 0.090385f, 0.067868f, 0.066587f, 0.053865f, 0.023825f, -0.016587f, -0.012484f, -0.009354f, + -0.077637f, -0.127255f, -0.121694f, -0.125372f, -0.136017f, -0.126474f, -0.140720f, -0.102217f, -0.105152f, -0.086418f, -0.063171f, -0.049754f, -0.055931f, -0.055690f, -0.041457f, -0.029327f, -0.031470f, -0.042738f, -0.020701f, -0.010020f, -0.022534f, -0.036217f, -0.018511f, -0.012201f, -0.015503f, -0.017286f, 0.002300f, 0.006880f, 0.009664f, 0.001125f, 0.003365f}, + {0.020074f, 0.001053f, -0.001324f, -0.000691f, -0.001576f, -0.010276f, -0.010429f, 0.009985f, 0.002398f, -0.005964f, -0.009108f, -0.004384f, -0.006883f, -0.011866f, 0.015180f, 0.001840f, 0.005499f, 0.007572f, 0.021869f, -0.000558f, 0.003492f, -0.005267f, -0.001945f, -0.004051f, -0.014256f, 0.003183f, -0.004362f, 0.001410f, 0.009907f, -0.003911f, -0.000975f, 0.002158f, 0.001047f, -0.002354f, 0.000462f, -0.013169f, 0.002731f, -0.000316f, -0.004729f, 0.004120f, 0.001887f, -0.008864f, 0.013988f, 0.000491f, 0.002007f, 0.013020f, -0.005060f, -0.005624f, -0.012843f, -0.006504f, 0.008859f, 0.000556f, 0.009443f, -0.004630f, -0.010508f, 0.004567f, -0.009796f, -0.004380f, -0.018901f, 0.007766f, 0.006598f, 0.004027f, 0.005673f, 0.012960f, 0.003347f, -0.005692f, 0.006978f, 0.010764f, -0.007062f, 0.005329f, -0.000060f, -0.002274f, -0.003675f, -0.002902f, 0.007231f, -0.001470f, 0.008026f, -0.004072f, 0.003205f, -0.002514f, 0.002895f, 0.005866f, -0.003215f, 0.002137f, -0.002232f, 0.004740f, 0.003814f, 0.003247f, -0.001671f, 0.001124f, 0.000086f, -0.002644f, 0.001276f, 0.004631f, 0.000773f, 0.001570f, + -0.002787f, 0.001819f, -0.001544f, 0.001077f, -0.002153f, 0.000460f, 0.002681f, -0.007941f, 0.002140f, -0.004915f, -0.010071f, -0.000981f, -0.011896f, -0.014418f, -0.009117f, -0.006905f, -0.015914f, 0.000644f, -0.005752f, -0.003197f, 0.004888f, 0.016951f, 0.001545f, -0.004024f, -0.001950f, 0.002728f, -0.000337f, 0.007043f, 0.012024f, -0.001015f, 0.013502f, -0.001553f, -0.000890f, -0.001616f, 0.007688f, -0.010169f, 0.001578f, 0.001234f, -0.002503f, -0.000579f, -0.006080f, -0.010106f, 0.013880f, -0.004724f, -0.001039f, -0.002475f, 0.006121f, -0.006605f, -0.005691f, 0.002420f, 0.002054f, 0.009700f, -0.006659f, 0.007989f, -0.004674f, -0.007999f, -0.000636f, -0.003305f, 0.002165f, 0.004353f, -0.000180f, 0.005649f, 0.002682f, 0.004118f, -0.005360f, -0.006291f, -0.010430f, -0.007660f, 0.000971f, 0.012446f, 0.001565f, 0.010109f, 0.002617f, -0.005205f, 0.006944f, 0.003301f, -0.007517f, 0.013171f, 0.002189f, -0.012403f, 0.003225f, 0.005622f, 0.001108f, 0.003734f, 0.003219f, -0.008787f, 0.003197f, 0.003078f, 0.002160f, -0.000505f, 0.006462f, 0.002176f, -0.001662f, -0.002122f, -0.000052f, 0.002588f, + -0.000081f, 0.003514f, -0.000117f, 0.000171f, 0.002020f, -0.000840f, -0.001935f, -0.001241f, 0.000343f, -0.001716f, -0.001841f, 0.002262f, -0.000222f, 0.002171f, 0.001901f, -0.000529f, -0.000196f, -0.014763f, -0.013121f, 0.002782f, 0.001476f, 0.010984f, -0.008507f, 0.011299f, -0.005771f, -0.002563f, -0.017800f, -0.001183f, 0.001134f, -0.006146f, -0.001115f, 0.009485f, 0.008934f, 0.013450f, -0.003361f, -0.002114f, 0.008355f, 0.003900f, 0.007494f, -0.018375f, 0.018067f, -0.003971f, -0.000336f, 0.002815f, -0.002305f, -0.000206f, -0.001717f, -0.001319f, 0.011165f, -0.000396f, 0.014686f, -0.002612f, -0.006155f, -0.012366f, 0.001332f, -0.005639f, -0.004985f, 0.008428f, 0.006463f, 0.008815f, 0.000187f, 0.001028f, -0.013208f, -0.009519f, -0.000255f, 0.011850f, 0.004009f, -0.001610f, 0.003875f, -0.005045f, 0.012583f, -0.000755f, -0.011086f, -0.013999f, -0.005091f, 0.015529f, 0.011671f, 0.011977f, 0.005483f, 0.000381f, -0.013174f, -0.005908f, -0.001959f, -0.007709f, 0.007937f, -0.001442f, -0.003767f, 0.006817f, -0.018710f, 0.005505f, -0.002489f, 0.004358f, -0.001533f, -0.005382f, 0.008374f, 0.003149f, + -0.008902f, -0.009425f, 0.004691f, -0.002486f, 0.005484f, 0.001460f, -0.004062f, 0.002848f, 0.003471f, -0.000195f, 0.001307f, -0.000029f, 0.000357f, -0.001599f, -0.000072f, -0.002614f, -0.000015f, -0.002280f, 0.003652f, 0.001995f, -0.002846f, 0.001387f, -0.000757f, 0.000961f, 0.000954f, 0.001271f, -0.002124f, -0.001832f, 0.000627f, 0.001358f, -0.003873f, 0.003723f, -0.004202f, -0.008097f, -0.001338f, -0.006273f, 0.002868f, 0.010150f, 0.003975f, 0.000357f, -0.004141f, -0.023602f, -0.015560f, -0.000513f, 0.006828f, 0.008261f, 0.000472f, 0.001665f, -0.003335f, 0.008190f, 0.003626f, 0.006561f, -0.010293f, 0.009749f, 0.005595f, -0.011096f, 0.004150f, 0.010164f, -0.000564f, 0.003282f, 0.001650f, 0.009216f, -0.007176f, 0.005467f, -0.000943f, -0.001251f, -0.008827f, 0.000532f, 0.009434f, -0.006030f, -0.004369f, -0.008269f, 0.011074f, -0.001091f, 0.002150f, -0.008699f, -0.024782f, -0.007232f, 0.003633f, 0.002277f, 0.009147f, -0.006601f, -0.004078f, -0.003768f, -0.001663f, -0.007973f, 0.000242f, -0.007200f, 0.016228f, 0.005702f, 0.013237f, -0.013422f, -0.002649f, -0.005574f, 0.012403f, -0.003789f, + -0.002295f, -0.010340f, 0.006405f, -0.000225f, -0.006913f, 0.010555f, 0.003267f, 0.001279f, 0.012112f, 0.002582f, -0.010633f, -0.001498f, 0.001280f, -0.002902f, -0.003594f, 0.000065f, -0.009032f, 0.017895f, 0.007373f, 0.002590f, 0.011154f, 0.004830f, 0.004404f, 0.008187f, -0.002355f, 0.006926f, -0.003986f, 0.001182f, 0.000710f, 0.000403f, -0.002079f, 0.001240f, 0.000530f, -0.000672f, -0.001219f, -0.001173f, 0.000853f, -0.000930f, 0.000072f, 0.005926f, 0.000616f, -0.000188f, -0.000108f, -0.000093f, -0.000809f, 0.004700f, 0.001211f, 0.006589f, -0.005248f, 0.004182f, 0.000396f, -0.002713f, 0.011200f, 0.008519f, -0.000863f, -0.015278f, -0.020381f, -0.015756f, 0.005833f, 0.000004f, -0.008803f, -0.002305f, 0.001033f, -0.002013f, 0.022936f, 0.003951f, -0.016571f, -0.004416f, -0.004953f, 0.000824f, -0.007800f, 0.012962f, -0.009695f, -0.012719f, 0.011876f, -0.005005f, 0.003261f, 0.003142f, -0.005432f, -0.014973f, 0.001994f, -0.007986f, -0.007044f, -0.007341f, -0.000914f, 0.011633f, -0.001611f, -0.002655f, 0.017211f, 0.003143f, 0.002635f, -0.022225f, -0.002480f, 0.011827f, 0.013864f, -0.007687f, + 0.003760f, 0.001878f, -0.021917f, -0.002953f, -0.001347f, -0.002256f, 0.005516f, 0.000225f, -0.012299f, 0.001577f, -0.009837f, 0.009400f, -0.003353f, 0.012105f, 0.002411f, -0.013952f, 0.006159f, 0.026099f, -0.010162f, 0.000197f, -0.019489f, 0.004683f, 0.016364f, -0.029398f, 0.004173f, -0.002128f, -0.002565f, 0.007257f, -0.004762f, -0.007710f, 0.013754f, 0.013127f, -0.011414f, -0.001432f, 0.008600f, -0.003891f, 0.002007f, 0.004012f, 0.002524f, 0.000779f, -0.003356f, 0.007289f, -0.000227f, 0.004743f, 0.000169f, 0.006503f, 0.004435f, 0.004077f, -0.000385f, 0.001349f, 0.007272f, 0.000719f, -0.001544f, 0.002496f, 0.002233f, 0.000794f, 0.006031f, -0.003447f, 0.001886f, 0.000891f, -0.001399f, 0.000359f, 0.002143f, 0.001441f, 0.000686f, -0.000666f, 0.019643f, 0.002444f, 0.008809f, 0.013919f, -0.017162f, -0.005267f, -0.013097f, 0.006589f, 0.007600f, 0.015116f, 0.029261f, 0.004607f, -0.022316f, -0.002086f, -0.005610f, -0.002315f, -0.009651f, 0.000036f, -0.001080f, 0.011062f, 0.008806f, 0.003206f, -0.000791f, 0.000443f, -0.003437f, -0.002553f, 0.012674f, -0.004134f, -0.001698f, 0.009472f, + -0.001190f, 0.005581f, -0.000946f, 0.012056f, -0.009205f, -0.018226f, 0.022670f, -0.001336f, 0.005382f, -0.017061f, 0.001257f, -0.005191f, 0.025153f, 0.003963f, 0.011386f, -0.002382f, 0.010097f, 0.006795f, -0.022766f, -0.003589f, -0.012784f, -0.010991f, 0.001534f, 0.016043f, 0.002013f, -0.003224f, 0.024904f, -0.002639f, -0.014075f, -0.010748f, -0.007365f, 0.012223f, 0.037628f, -0.000078f, 0.010441f, 0.002699f, -0.011995f, -0.002634f, 0.000206f, 0.011165f, 0.017105f, 0.001573f, 0.013748f, 0.012266f, -0.022533f, 0.000746f, -0.004027f, -0.000574f, 0.011290f, -0.005040f, 0.002933f, 0.005332f, -0.001738f, -0.011571f, -0.008034f, -0.016901f, 0.004042f, 0.006737f, -0.000853f, 0.002601f, 0.002485f, 0.002054f, -0.000208f, -0.005248f, 0.001109f, 0.002490f, -0.000300f, 0.002306f, -0.002745f, 0.004502f, -0.000392f, 0.002262f, -0.001249f, -0.000810f, -0.002180f, 0.000572f, -0.001173f, 0.000792f, 0.003717f, 0.005978f, 0.004938f, 0.000749f, 0.001287f, 0.003662f, 0.002030f, 0.000115f, 0.002062f, -0.006698f, -0.029061f, 0.006586f, -0.002941f, 0.009966f, 0.006384f, 0.027043f, 0.005438f, -0.005126f, + 0.006476f, 0.020690f, 0.022901f, 0.009451f, 0.016126f, 0.016495f, -0.012811f, -0.009957f, -0.020753f, -0.022424f, 0.002437f, 0.009654f, -0.018975f, -0.013500f, -0.001047f, -0.021947f, -0.018198f, 0.009203f, 0.002933f, -0.009762f, -0.006509f, -0.014407f, 0.011927f, 0.008707f, 0.019624f, 0.037323f, -0.004166f, -0.010613f, -0.004012f, -0.018430f, -0.000243f, -0.014367f, -0.015895f, 0.019111f, 0.002157f, 0.002606f, -0.024616f, 0.025365f, 0.005020f, -0.015844f, -0.005108f, 0.013042f, 0.000850f, 0.002802f, -0.000459f, 0.002096f, 0.007404f, -0.012144f, 0.014183f, 0.000283f, -0.010004f, -0.002818f, -0.017123f, 0.002628f, -0.017580f, -0.015609f, 0.013433f, 0.013867f, -0.013988f, -0.022217f, 0.005619f, -0.010731f, -0.001632f, -0.005949f, 0.007431f, -0.006387f, 0.009816f, 0.003118f, 0.011890f, -0.002737f, 0.008872f, 0.004555f, -0.019945f, -0.007001f, 0.004863f, 0.002584f, 0.000323f, -0.009879f, -0.005591f, -0.002977f, 0.006547f, -0.003837f, -0.003339f, 0.000260f, 0.005237f, 0.004069f, -0.000264f, -0.000314f, -0.005745f, -0.003102f, 0.001062f, -0.001375f, -0.000611f, 0.004657f, 0.000476f, -0.000350f, + -0.004230f, 0.004019f, 0.001258f, -0.001551f, -0.000847f, -0.002843f, -0.000570f, -0.003144f, 0.004232f, -0.001071f, 0.001931f, -0.001250f, -0.011083f, -0.012094f, 0.014612f, -0.004505f, -0.003474f, 0.008459f, -0.012223f, -0.012837f, 0.014730f, 0.019739f, 0.000291f, -0.001206f, 0.006637f, -0.016992f, 0.028934f, -0.017796f, 0.002051f, 0.013861f, -0.006645f, 0.012931f, 0.015581f, 0.005144f, -0.016474f, 0.017688f, -0.002694f, 0.006640f, -0.012930f, -0.002420f, -0.024537f, 0.008410f, -0.014600f, 0.005594f, -0.025252f, 0.014776f, -0.018474f, -0.012879f, 0.010485f, 0.014585f, 0.004861f, 0.001597f, 0.000560f, -0.015862f, -0.014747f, -0.009415f, 0.038293f, 0.021011f, -0.006072f, -0.035552f, -0.005049f, 0.009953f, 0.020640f, -0.011736f, 0.001652f, -0.024590f, -0.008465f, -0.003085f, 0.006362f, 0.003547f, -0.005529f, -0.000498f, 0.010756f, -0.012207f, -0.000681f, -0.013908f, 0.007530f, 0.008995f, 0.026487f, 0.011186f, -0.012870f, 0.005400f, -0.007161f, -0.020079f, -0.002520f, 0.011508f, 0.001659f, 0.032912f, -0.018858f, -0.009276f, 0.005118f, -0.017250f, 0.008798f, 0.002685f, -0.003214f, 0.016688f, + 0.004179f, 0.007335f, 0.000164f, 0.000544f, -0.002574f, 0.008220f, 0.012384f, 0.002917f, -0.003513f, 0.008991f, -0.004672f, 0.002783f, -0.008467f, -0.002905f, 0.000035f, -0.011267f, -0.000139f, -0.004418f, -0.001932f, -0.004409f, -0.007215f, -0.003418f, 0.002558f, 0.002781f, 0.002021f, -0.002415f, -0.000293f, 0.004903f, -0.008126f, 0.000804f, 0.000777f, -0.025277f, -0.003716f, 0.005187f, 0.014922f, 0.007268f, 0.019482f, 0.003553f, -0.023288f, 0.014832f, -0.019701f, -0.021084f, 0.000590f, -0.001909f, 0.016053f, 0.019961f, 0.018357f, 0.026776f, 0.006551f, -0.027607f, 0.030245f, 0.016547f, -0.012208f, 0.023279f, -0.002996f, 0.002857f, -0.020392f, -0.007039f, -0.005870f, -0.009023f, 0.019518f, -0.032738f, -0.007393f, -0.015366f, -0.014618f, 0.002737f, 0.015814f, -0.007446f, -0.018889f, -0.020024f, -0.026100f, -0.026372f, -0.013397f, -0.004456f, 0.011414f, -0.020692f, -0.026852f, -0.015845f, -0.006748f, -0.013149f, -0.008794f, 0.023457f, -0.013141f, 0.002246f, 0.012451f, -0.021199f, -0.012598f, -0.014272f, 0.023087f, -0.009793f, 0.015046f, 0.033089f, -0.003186f, 0.007462f, 0.003255f, -0.010077f, + -0.013250f, -0.009028f, 0.015636f, -0.002278f, 0.017899f, 0.001124f, 0.013520f, 0.003193f, -0.022667f, 0.028160f, -0.012100f, -0.003538f, -0.024081f, 0.014841f, 0.031651f, 0.005390f, -0.004301f, 0.008442f, 0.003692f, -0.020199f, -0.009417f, 0.001243f, -0.004759f, -0.002133f, -0.008694f, -0.008493f, -0.001379f, 0.001552f, 0.001293f, 0.014744f, -0.001672f, 0.001910f, -0.007254f, 0.005628f, 0.000632f, 0.011090f, 0.004827f, 0.005026f, 0.002118f, -0.001289f, -0.004729f, -0.003974f, -0.006578f, -0.001402f, -0.004948f, 0.003349f, 0.001725f, -0.000077f, -0.003440f, -0.002904f, -0.002514f, -0.000979f, 0.001178f, -0.001155f, 0.006081f, 0.046849f, 0.029538f, 0.021497f, -0.015534f, -0.033721f, -0.009103f, 0.020533f, -0.031942f, -0.017402f, 0.000616f, 0.025092f, 0.017982f, 0.014580f, -0.018508f, 0.013968f, -0.004987f, 0.013964f, -0.003662f, 0.036279f, 0.021744f, -0.001789f, -0.033368f, -0.003432f, 0.025288f, 0.021521f, 0.000892f, 0.043979f, 0.019887f, -0.008831f, -0.000021f, 0.003044f, -0.005205f, -0.012273f, -0.016940f, -0.002655f, -0.047555f, 0.013481f, -0.016316f, 0.002269f, -0.001678f, 0.012427f, + 0.017689f, 0.000455f, 0.004706f, -0.021213f, 0.015119f, -0.007704f, 0.031483f, 0.000728f, 0.004495f, -0.076698f, -0.003300f, 0.020472f, 0.010564f, 0.021774f, -0.007466f, -0.021472f, 0.011932f, 0.004171f, -0.017595f, 0.016756f, 0.003396f, -0.016861f, 0.000247f, 0.000728f, 0.005884f, -0.006193f, -0.028079f, -0.028128f, -0.001155f, -0.010117f, 0.009433f, 0.009922f, 0.004173f, 0.010560f, -0.034381f, -0.011783f, 0.001772f, 0.007629f, 0.008303f, -0.013688f, 0.010801f, 0.002523f, -0.004920f, 0.003638f, 0.009744f, -0.006475f, 0.001310f, -0.002089f, 0.004031f, -0.006588f, -0.010304f, -0.003478f, 0.012259f, -0.009267f, 0.001308f, -0.006925f, 0.004912f, -0.002865f, 0.004349f, 0.007065f, -0.000850f, -0.007029f, 0.005754f, -0.001190f, -0.008219f, -0.005245f, 0.002957f, 0.003800f, 0.000454f, -0.003323f, 0.001638f, -0.000671f, 0.005073f, -0.002397f, 0.009832f, -0.003363f, -0.000631f, -0.032367f, -0.052074f, 0.008399f, 0.018025f, 0.018723f, 0.000437f, 0.043273f, -0.030789f, 0.010145f, 0.005915f, -0.008783f, -0.027333f, -0.011516f, -0.015551f, 0.018347f, -0.008069f, -0.016837f, -0.027821f, -0.002580f, + -0.010291f, -0.005324f, -0.020989f, 0.011173f, -0.001332f, -0.009829f, 0.011281f, 0.014369f, 0.017004f, -0.022114f, 0.040355f, 0.002441f, -0.005824f, -0.024812f, -0.023331f, -0.004755f, -0.003083f, -0.024203f, -0.025234f, -0.019367f, 0.016237f, -0.011225f, 0.026940f, 0.008617f, 0.044968f, 0.015422f, 0.017052f, -0.005794f, 0.024097f, -0.004218f, 0.005774f, 0.034170f, -0.010455f, 0.012384f, -0.041148f, -0.052369f, 0.011372f, -0.002496f, -0.033271f, 0.002050f, 0.000775f, -0.045204f, 0.012668f, -0.013333f, -0.008989f, -0.017670f, 0.016997f, -0.016512f, 0.000886f, -0.001846f, 0.008165f, 0.000019f, -0.024787f, 0.014487f, -0.003624f, 0.005753f, -0.031249f, -0.043081f, -0.038389f, 0.002104f, -0.009149f, -0.043622f, -0.009237f, 0.041858f, 0.022015f, 0.009689f, 0.007930f, -0.019384f, 0.000584f, -0.004470f, 0.001817f, -0.006400f, -0.005215f, -0.000250f, -0.000531f, 0.001644f, -0.000116f, -0.013542f, -0.003308f, 0.003541f, -0.002593f, 0.006491f, 0.010627f, 0.008927f, -0.000151f, -0.001524f, -0.004697f, 0.014166f, 0.008120f, 0.009318f, 0.007731f, 0.005703f, -0.001104f, -0.005424f, -0.004910f, 0.011051f, + -0.008615f, 0.006586f, 0.009264f, 0.003625f, 0.004547f, 0.000743f, 0.002706f, -0.007487f, 0.000638f, -0.002167f, -0.006453f, 0.003083f, 0.008386f, 0.031690f, 0.041365f, -0.001136f, 0.011018f, 0.026165f, 0.021449f, -0.002150f, -0.052632f, 0.036085f, -0.003535f, 0.009855f, -0.010716f, 0.018519f, -0.001282f, -0.022741f, 0.006436f, 0.041459f, 0.006365f, -0.027153f, 0.023984f, 0.017157f, 0.011241f, -0.020418f, 0.022072f, 0.016372f, 0.001973f, 0.026353f, -0.010465f, 0.007069f, 0.042449f, 0.030928f, 0.001289f, 0.009794f, 0.020875f, -0.040025f, -0.008027f, -0.002554f, -0.006211f, -0.035075f, 0.009041f, 0.010599f, 0.002082f, -0.027206f, -0.000361f, -0.046570f, 0.002555f, -0.033286f, -0.006516f, 0.017118f, -0.014136f, -0.020163f, -0.016135f, 0.009858f, 0.008194f, -0.018610f, 0.007426f, -0.006740f, 0.023017f, -0.011982f, -0.013434f, 0.011932f, 0.021508f, -0.002108f, 0.009398f, 0.008250f, -0.050799f, -0.001217f, -0.003708f, -0.025969f, 0.002726f, 0.033057f, 0.010122f, -0.009339f, -0.004058f, 0.024141f, 0.016999f, 0.010523f, -0.006818f, 0.038331f, 0.000401f, -0.031913f, 0.004288f, 0.038360f, + 0.019927f, 0.019463f, 0.011536f, 0.002071f, -0.009477f, -0.010893f, 0.006927f, 0.006220f, 0.009117f, 0.014392f, -0.003584f, 0.011361f, 0.006922f, 0.001109f, -0.001974f, -0.001193f, 0.005081f, -0.005212f, -0.002027f, -0.005169f, -0.000149f, -0.002452f, 0.005594f, -0.011600f, 0.001954f, 0.003929f, 0.001210f, 0.008819f, -0.015695f, -0.006555f, 0.002607f, 0.002978f, -0.001616f, 0.009025f, -0.003380f, -0.003028f, -0.004397f, 0.001017f, 0.005764f, 0.006837f, -0.008775f, 0.001267f, 0.003968f, -0.008010f, -0.005141f, -0.004435f, 0.020225f, -0.046566f, 0.019788f, -0.048222f, -0.057211f, -0.037011f, 0.002425f, -0.031579f, 0.030751f, -0.009683f, -0.038464f, -0.001339f, -0.009774f, 0.005186f, 0.007179f, -0.009012f, -0.004956f, 0.025337f, -0.007565f, 0.009643f, -0.013819f, -0.013809f, 0.040390f, -0.013635f, -0.004624f, -0.001250f, 0.009216f, 0.024849f, -0.050683f, -0.003469f, 0.027173f, 0.026175f, 0.024600f, 0.003206f, -0.009163f, 0.052124f, 0.017718f, 0.016398f, 0.020398f, 0.009225f, -0.007321f, 0.000323f, 0.030759f, 0.009891f, -0.021675f, 0.011447f, 0.056613f, -0.029917f, 0.039142f, 0.014293f, + -0.059673f, 0.014415f, 0.040165f, -0.004394f, 0.018101f, -0.000259f, -0.045207f, 0.022847f, 0.056425f, 0.003159f, 0.038396f, -0.023238f, 0.033981f, 0.028032f, -0.000836f, -0.005091f, 0.031203f, 0.016476f, -0.040852f, 0.040916f, -0.010037f, -0.009353f, 0.024920f, -0.012033f, -0.014633f, -0.018264f, 0.006474f, 0.002126f, 0.006912f, -0.001717f, -0.008196f, 0.030748f, -0.027380f, 0.004743f, -0.005591f, -0.008971f, -0.022357f, -0.021298f, 0.012652f, -0.001612f, -0.013740f, -0.018999f, -0.015871f, -0.027068f, -0.019152f, -0.001054f, -0.013232f, -0.007956f, -0.001894f, -0.014023f, 0.005996f, -0.012340f, -0.012672f, -0.003426f, 0.003224f, 0.004530f, -0.006335f, -0.000772f, -0.019888f, 0.007988f, -0.020865f, 0.016031f, -0.005289f, -0.001297f, -0.009106f, -0.004965f, -0.000952f, 0.024001f, 0.012083f, -0.002416f, 0.005785f, 0.016539f, 0.009038f, -0.008984f, -0.004217f, 0.006527f, -0.008128f, 0.013515f, 0.003091f, -0.005125f, -0.018130f, -0.032180f, 0.077282f, 0.038239f, -0.090116f, -0.037148f, 0.009565f, -0.014938f, 0.026034f, 0.030650f, 0.032889f, 0.037622f, -0.023113f, 0.071278f, -0.010727f, 0.001801f, + -0.023330f, 0.026862f, 0.035794f, -0.025793f, -0.029423f, -0.006187f, -0.016945f, 0.003173f, 0.014276f, 0.002211f, -0.018522f, -0.006992f, 0.029353f, -0.002331f, 0.014833f, 0.003592f, 0.035322f, 0.052951f, 0.020083f, -0.025440f, -0.059642f, -0.004988f, -0.010125f, 0.006733f, -0.013804f, 0.019697f, 0.033059f, 0.003012f, -0.012255f, -0.027226f, 0.065206f, 0.057047f, -0.007567f, 0.027870f, -0.015522f, -0.020811f, -0.062814f, 0.034749f, -0.029311f, -0.006726f, -0.001880f, -0.019603f, 0.011002f, 0.038611f, 0.005898f, -0.016993f, 0.018310f, -0.007846f, -0.025932f, 0.039483f, 0.008010f, -0.054641f, 0.070055f, -0.047427f, -0.025426f, 0.027126f, 0.027804f, 0.023337f, 0.000394f, -0.058364f, -0.005028f, 0.005163f, -0.003396f, -0.019154f, 0.011310f, -0.010000f, 0.004134f, 0.007286f, -0.024243f, 0.028042f, 0.019509f, 0.009422f, 0.003762f, -0.011459f, -0.008514f, -0.000536f, 0.009883f, 0.000893f, 0.007623f, -0.004552f, -0.018779f, 0.005706f, -0.027525f, -0.008703f, 0.008754f, -0.008116f, 0.015054f, -0.012739f, -0.001886f, -0.010823f, 0.011995f, 0.001062f, 0.014753f, 0.017165f, 0.011792f, 0.000508f, + -0.012994f, 0.009439f, 0.015957f, -0.003151f, -0.001867f, -0.017093f, -0.007545f, 0.019854f, -0.006787f, 0.013409f, -0.001165f, -0.007463f, 0.007036f, 0.006664f, -0.000410f, -0.011262f, 0.020507f, -0.024867f, 0.002773f, 0.035555f, 0.010544f, -0.048238f, -0.038693f, -0.009262f, 0.060354f, 0.006312f, -0.028984f, -0.077848f, -0.021657f, -0.003534f, 0.018485f, 0.053584f, 0.041050f, -0.005729f, 0.000509f, 0.035252f, 0.028686f, 0.001339f, 0.007866f, -0.105050f, -0.066236f, -0.032274f, -0.051905f, 0.004514f, -0.028953f, 0.046489f, -0.010642f, -0.003643f, -0.000227f, -0.018721f, -0.021377f, 0.033686f, 0.020991f, 0.011924f, -0.004763f, -0.016040f, -0.014367f, 0.016782f, -0.037646f, -0.014105f, 0.006660f, -0.013051f, -0.018334f, 0.015702f, -0.054414f, -0.076140f, 0.018109f, 0.023792f, 0.029551f, -0.044462f, -0.023642f, 0.024621f, 0.009348f, -0.074224f, -0.065191f, 0.003962f, -0.031550f, -0.032636f, 0.012140f, -0.059965f, 0.030431f, -0.023196f, 0.025009f, 0.023999f, -0.014876f, -0.033797f, -0.078099f, -0.027379f, -0.023463f, 0.043840f, -0.037892f, -0.024713f, 0.013367f, 0.044815f, 0.026124f, 0.000251f, + -0.015254f, -0.005019f, 0.013409f, -0.013439f, 0.045289f, -0.028063f, -0.021996f, -0.010630f, -0.003936f, 0.012452f, -0.033363f, 0.019650f, 0.015063f, -0.013976f, -0.023362f, 0.005435f, -0.001354f, 0.022747f, -0.029178f, -0.038059f, -0.009655f, 0.006023f, -0.021055f, -0.003170f, -0.025461f, 0.001102f, 0.006211f, -0.011457f, 0.017765f, -0.004786f, -0.012590f, 0.005518f, -0.008510f, 0.005183f, -0.007251f, -0.026450f, -0.001163f, 0.001942f, 0.025251f, 0.019806f, -0.012154f, 0.000091f, -0.001361f, -0.014933f, -0.019105f, 0.009266f, -0.004854f, 0.030880f, 0.042629f, -0.006877f, -0.057109f, 0.025858f, -0.008473f, -0.023922f, -0.049215f, 0.014679f, 0.021218f, -0.073191f, 0.027753f, 0.025972f, 0.066110f, 0.005948f, -0.016403f, 0.004073f, -0.080608f, -0.023463f, -0.009673f, 0.001046f, 0.014917f, -0.027605f, 0.049628f, 0.019817f, 0.061311f, -0.012286f, 0.053947f, 0.034550f, 0.021410f, 0.049046f, 0.024965f, 0.032367f, 0.041804f, 0.001825f, -0.054432f, -0.051480f, 0.010613f, 0.058942f, 0.042691f, -0.078531f, -0.002151f, -0.013301f, -0.010934f, -0.008243f, -0.054301f, 0.013936f, -0.038651f, 0.034884f, + -0.025822f, 0.078713f, -0.020597f, -0.112924f, -0.011901f, -0.038915f, 0.022567f, 0.016770f, 0.032280f, 0.073288f, 0.016492f, -0.009954f, 0.040246f, -0.023688f, 0.082009f, 0.013787f, 0.054909f, 0.025762f, 0.005120f, -0.020756f, -0.018658f, 0.134402f, 0.000931f, -0.092767f, -0.018521f, 0.074154f, -0.044180f, 0.009735f, -0.020307f, 0.032562f, 0.068220f, 0.039319f, -0.078414f, -0.005060f, -0.077191f, 0.010760f, -0.010522f, -0.045769f, -0.005259f, -0.012362f, -0.020133f, -0.000096f, -0.039455f, -0.043459f, 0.015203f, 0.016452f, -0.002000f, -0.048637f, 0.035324f, -0.043089f, -0.066609f, -0.028408f, 0.016797f, -0.016522f, -0.029586f, -0.038278f, 0.007216f, 0.016241f, -0.034586f, -0.026508f, 0.013067f, -0.015341f, -0.027865f, 0.022969f, 0.018482f, -0.001608f, -0.003319f, 0.001366f, -0.006218f, -0.011422f, -0.012026f, 0.004520f, -0.025689f, 0.015252f, -0.009041f, 0.005829f, -0.032714f, 0.036997f, 0.016022f, -0.076777f, -0.028803f, -0.087189f, 0.013292f, 0.076855f, -0.056630f, -0.053104f, 0.050782f, 0.023875f, -0.086917f, -0.082370f, 0.026411f, 0.004360f, 0.012094f, 0.028042f, -0.003431f, -0.024730f, + -0.012574f, 0.052636f, -0.037684f, 0.064995f, 0.010595f, -0.015219f, 0.013896f, 0.037551f, -0.000123f, -0.011242f, -0.069549f, -0.030524f, 0.007733f, -0.037273f, 0.032174f, 0.048041f, 0.003482f, 0.007956f, -0.049751f, 0.059354f, -0.020827f, -0.026528f, 0.048421f, -0.018593f, 0.000119f, -0.034711f, -0.003507f, -0.024401f, -0.085521f, 0.029370f, -0.009560f, 0.063595f, 0.081579f, -0.001185f, -0.014536f, -0.051684f, -0.016317f, -0.014379f, 0.077633f, -0.073769f, -0.052059f, -0.122284f, 0.002893f, -0.050619f, 0.014069f, 0.042444f, -0.022850f, -0.006370f, 0.083456f, 0.053822f, 0.038079f, 0.006586f, 0.003847f, 0.063330f, -0.068623f, -0.002979f, 0.019533f, -0.008100f, 0.037919f, 0.018188f, 0.161032f, 0.025466f, -0.043946f, -0.002462f, -0.030101f, -0.079342f, -0.031416f, 0.002961f, 0.013513f, -0.015277f, -0.016421f, -0.015016f, -0.056661f, -0.000709f, -0.004634f, -0.030097f, 0.008065f, 0.020218f, -0.048570f, 0.003193f, -0.032941f, 0.012927f, -0.002214f, -0.011442f, -0.006504f, 0.002832f, 0.028681f, 0.016729f, 0.001327f, 0.031737f, -0.019445f, -0.004095f, -0.009225f, 0.029873f, 0.020027f, 0.014225f, + 0.030749f, 0.014309f, -0.021852f, -0.010491f, -0.003532f, 0.015241f, -0.027504f, -0.007070f, 0.000952f, -0.031058f, -0.009599f, 0.005675f, 0.074445f, -0.054685f, 0.018975f, -0.018776f, -0.026542f, -0.025881f, 0.112524f, -0.015093f, 0.055250f, -0.044615f, 0.076780f, -0.026636f, 0.001153f, 0.041352f, 0.044358f, 0.105863f, 0.005085f, 0.017300f, 0.015583f, -0.044981f, 0.054701f, 0.016920f, -0.032076f, 0.053258f, -0.022205f, 0.067080f, 0.051327f, -0.015874f, 0.044676f, 0.002059f, 0.041728f, 0.008371f, 0.070713f, -0.043132f, 0.035350f, -0.071373f, -0.017731f, 0.023968f, 0.076669f, -0.003352f, 0.006356f, 0.032971f, -0.000063f, -0.025784f, -0.091914f, -0.056933f, 0.015967f, -0.039538f, -0.001517f, 0.029116f, -0.080035f, 0.049142f, -0.003267f, 0.058439f, -0.027534f, -0.054606f, -0.009255f, 0.151004f, 0.034564f, -0.137327f, 0.024490f, 0.035011f, 0.008864f, 0.149512f, -0.008717f, -0.110057f, 0.114554f, -0.038479f, -0.007039f, 0.125140f, -0.013107f, 0.082340f, 0.013607f, -0.074282f, 0.003519f, 0.127949f, -0.103997f, 0.054875f, -0.063579f, -0.072037f, 0.053861f, 0.032292f, -0.065589f, -0.024073f, + -0.040575f, -0.022133f, -0.023537f, 0.012069f, -0.039968f, -0.008160f, 0.016574f, -0.041290f, -0.029273f, 0.021711f, -0.048121f, -0.011646f, 0.017669f, 0.006941f, -0.010682f, 0.036688f, -0.015245f, -0.012113f, -0.017071f, -0.032752f, 0.016598f, -0.021020f, -0.023949f, -0.005521f, 0.004866f, 0.048944f, 0.000836f, 0.014077f, -0.039537f, 0.004444f, 0.052227f, -0.009297f, -0.005458f, -0.003733f, 0.003223f, 0.003965f, 0.036721f, -0.018672f, -0.021413f, -0.010653f, -0.033677f, -0.040485f, 0.011651f, -0.019942f, 0.008999f, 0.013328f, -0.005274f, -0.110403f, -0.008387f, 0.017399f, -0.041257f, -0.011691f, -0.115874f, 0.073770f, 0.112787f, -0.049148f, 0.016068f, -0.085370f, -0.250249f, -0.047491f, 0.011744f, 0.127530f, 0.106843f, -0.104074f, -0.093002f, -0.093449f, -0.076979f, -0.053982f, 0.066399f, -0.010981f, 0.146110f, 0.099341f, -0.029225f, -0.120197f, -0.301726f, -0.194869f, 0.013809f, 0.335670f, 0.255193f, 0.047303f, -0.131314f, -0.329217f, -0.337640f, -0.023978f, 0.196919f, 0.304910f, 0.333831f, 0.035043f, -0.107685f, -0.135913f, -0.180901f, -0.162437f, 0.011172f, 0.113456f, 0.210252f, 0.145297f, + 0.115787f, -0.149828f, -0.184240f, -0.216013f, -0.260730f, 0.029940f, 0.313079f, 0.309027f, 0.062997f, -0.110626f, -0.293115f, -0.384056f, -0.129791f, 0.030308f, 0.143349f, 0.351700f, 0.129591f, -0.000225f, -0.193288f, -0.157818f, -0.066386f, 0.080397f, 0.137634f, 0.241585f, 0.063382f, 0.126408f, -0.009833f, -0.161123f, -0.133406f, 0.008007f, 0.155933f, 0.170213f, -0.077035f, -0.147250f, -0.180680f, -0.045012f, 0.029926f, 0.043257f, 0.027953f, -0.090103f, -0.077963f, -0.032134f, 0.058160f, 0.000229f, 0.001244f, 0.013140f, 0.046597f, 0.037606f, 0.029207f, -0.015707f, -0.109870f, -0.073062f, 0.008571f, 0.056989f, 0.105576f, 0.051161f, -0.029413f, -0.069656f, -0.091984f, -0.057639f, -0.036764f, -0.048197f, 0.105888f, 0.110496f, 0.121359f, 0.100694f, -0.046386f, -0.192847f, -0.163313f, -0.088040f, 0.074774f, 0.244135f, 0.236756f, 0.013376f, -0.149039f, -0.233417f, -0.209940f, -0.013601f, 0.117013f, 0.109968f, 0.053630f, 0.048353f, 0.003074f, -0.062589f, -0.074889f, -0.094936f, -0.014010f, 0.088896f, 0.109335f, -0.029740f, 0.053864f, 0.041415f, -0.094987f, 0.001037f, 0.048856f, -0.039245f, + 0.054002f, -0.002193f, -0.009904f, -0.003874f, 0.010883f, 0.041057f, -0.016138f, 0.048382f, 0.032886f, 0.019710f, 0.021881f, 0.016625f, -0.004204f, -0.027679f, 0.045220f, -0.000594f, 0.027585f, -0.016444f, 0.024559f, -0.008435f, -0.003543f, 0.016726f, -0.022398f, -0.023577f, 0.003452f, -0.010122f, 0.036599f, 0.036223f, -0.033192f, 0.016590f, -0.019781f, 0.022799f, 0.000452f, 0.014985f, 0.005659f, 0.019440f, -0.023647f, 0.016422f, -0.027211f, -0.011744f, -0.003803f, -0.003016f, 0.021919f, -0.041412f, -0.008226f, -0.017059f, -0.036949f, -0.003211f, -0.014548f, 0.008887f, 0.035119f, -0.010503f, -0.048797f, 0.007904f, 0.030209f, 0.059101f, -0.002636f, 0.005266f, -0.031872f, -0.024118f, 0.027438f, 0.002561f, -0.010477f, 0.000893f, 0.048140f, 0.021396f, 0.015154f, 0.026090f, 0.044354f, -0.050272f, 0.020031f, -0.008536f, -0.075152f, -0.008695f, 0.058041f, -0.010717f, 0.051631f, -0.002258f, 0.032040f, -0.037949f, 0.023429f, -0.025799f, -0.007747f, 0.050958f, -0.014704f, 0.004740f, 0.000999f, -0.000177f, 0.018540f, -0.000036f, -0.007698f, -0.004292f, -0.001483f, -0.003564f, 0.009241f, 0.014634f, + 0.021251f, 0.002443f, -0.018338f, -0.008207f, -0.023688f, 0.008894f, -0.024559f, 0.013229f, 0.009968f, -0.007553f, 0.013596f, 0.004364f, -0.025472f, 0.000398f, -0.000142f, 0.008075f, -0.043671f, 0.015192f, 0.009546f, 0.003771f, -0.001309f, -0.012074f, 0.014130f, -0.022079f, 0.022087f, -0.001793f, -0.002820f, 0.005914f, -0.010783f, 0.018703f, -0.021212f, 0.005812f, 0.010555f, -0.034650f, 0.088562f, 0.152586f, 0.013041f, -0.099828f, 0.033504f, -0.007518f, 0.123733f, 0.058121f, 0.121629f, -0.011450f, -0.057761f, -0.015731f, 0.027004f, 0.051101f, 0.040022f, -0.022552f, 0.003962f, 0.021689f, 0.015798f, 0.048273f, -0.033717f, 0.008125f, -0.045482f, -0.007394f, 0.000700f, 0.011678f, 0.023788f, 0.005183f, -0.019358f, 0.036958f, -0.003347f, -0.032717f, 0.044669f, -0.007657f, -0.015885f, 0.011811f, -0.006560f, 0.034688f, 0.055464f, 0.001326f, 0.014546f, -0.018667f, -0.011550f, 0.032009f, 0.023287f, 0.026501f, 0.005345f, -0.016862f, -0.034747f, -0.035789f, -0.038773f, 0.031061f, 0.034257f, 0.033460f, 0.050044f, 0.053483f, 0.023233f, 0.002797f, -0.046646f, 0.028621f, -0.004920f, -0.042457f, + 0.052501f, -0.003878f, 0.034560f, 0.018036f, -0.052431f, 0.014506f, -0.015510f, 0.011204f, 0.035620f, 0.006616f, -0.043809f, -0.031211f, -0.025800f, -0.046046f, 0.028122f, -0.002849f, 0.048458f, -0.000519f, 0.007981f, 0.000944f, -0.026043f, -0.016846f, 0.009261f, -0.039507f, 0.012012f, -0.000430f, -0.007594f, 0.014213f, -0.021871f, 0.013335f, 0.008744f, -0.001797f, -0.018512f, 0.024344f, -0.006096f, 0.021591f, -0.036438f, -0.026906f, -0.015816f, -0.014169f, 0.017291f, -0.007289f, -0.004468f, -0.004672f, -0.018222f, -0.009947f, -0.011185f, 0.000010f, 0.033857f, 0.004495f, -0.008568f, -0.000567f, -0.019654f, 0.014321f, -0.010928f, -0.001946f, -0.007483f, 0.016048f, -0.001381f, 0.002112f, -0.003405f, -0.011653f, -0.007903f, -0.053928f, -0.120350f, 0.008092f, 0.166909f, 0.220475f, 0.189432f, 0.130488f, -0.005429f, 0.008017f, -0.096354f, -0.114900f, -0.192755f, -0.145851f, -0.154738f, -0.050291f, 0.013197f, 0.050334f, 0.084873f, 0.210253f, 0.175156f, 0.117766f, 0.038302f, -0.018673f, -0.075929f, -0.056752f, -0.078951f, -0.100688f, -0.055822f, -0.057637f, -0.070680f, -0.033085f, -0.046463f, 0.009750f, + 0.033037f, 0.027531f, 0.089741f, 0.082605f, 0.073536f, 0.047891f, 0.055731f, 0.034867f, 0.066721f, 0.015923f, 0.057747f, 0.002431f, -0.014922f, -0.100676f, -0.043602f, -0.121317f, -0.140758f, -0.157705f, -0.123402f, -0.092935f, -0.032761f, 0.023648f, 0.090699f, 0.096353f, 0.076214f, 0.156421f, 0.127047f, 0.135475f, 0.125761f, 0.117057f, 0.047206f, 0.075652f, -0.030262f, -0.075559f, -0.078909f, -0.186297f, -0.185857f, -0.179874f, -0.191087f, -0.157869f, -0.053754f, -0.026710f, 0.042643f, 0.106587f, 0.116467f, 0.141946f, 0.171333f, 0.152532f, 0.119183f, 0.107968f, 0.079810f, 0.029590f, -0.002774f, -0.064238f, -0.094109f, -0.095270f, -0.108301f, -0.091194f, -0.101864f, -0.106568f, -0.089604f, -0.070148f, -0.034842f, 0.003930f, 0.046545f, 0.089036f, 0.083795f, 0.082219f, 0.097435f, 0.107195f, 0.083398f, 0.083066f, 0.037426f, -0.039341f, -0.028320f, -0.068973f, -0.087161f, -0.073257f, -0.059743f, -0.042485f, -0.052796f, -0.038727f, 0.004901f, 0.010831f, 0.018871f, 0.046838f, 0.041794f, 0.026020f, 0.006819f, 0.017428f, 0.018401f, 0.005013f, 0.023209f, -0.014671f, -0.015454f, -0.013126f, + 0.008961f, -0.003020f, 0.000760f, -0.001714f, -0.002669f, -0.017645f, -0.011616f, -0.005574f, 0.016843f, -0.000677f, 0.007961f, 0.001837f, -0.008613f, -0.011707f, -0.005322f, -0.008485f, 0.002721f, -0.001242f, 0.003175f, 0.000858f, 0.004170f, -0.005234f, 0.004205f, -0.003965f, 0.001143f, 0.000845f, 0.007884f, -0.000970f, 0.004468f, -0.002981f, 0.003164f} + }, + { + {0.019357f, 0.010286f, -0.001158f, 0.006752f, 0.001689f, 0.001541f, -0.021194f, -0.009223f, -0.010498f, 0.008258f, -0.001136f, -0.006887f, 0.007508f, 0.007751f, 0.000509f, 0.007442f, -0.003109f, -0.000256f, -0.000437f, -0.004595f, -0.002392f, -0.010186f, 0.005264f, -0.015060f, 0.006289f, -0.007856f, 0.006412f, 0.011973f, 0.005466f, -0.002282f, -0.003386f, 0.008847f, -0.001427f, 0.000409f, 0.008374f, -0.008973f, -0.000262f, -0.003037f, -0.005167f, 0.001097f, -0.001257f, 0.001853f, 0.008583f, 0.014144f, -0.004495f, 0.000253f, 0.011748f, 0.000891f, 0.003090f, -0.004329f, -0.006584f, -0.000970f, 0.001974f, -0.011100f, -0.002914f, 0.005798f, 0.000754f, 0.002093f, 0.003444f, -0.001595f, -0.003469f, -0.003283f, -0.003891f, 0.004291f, 0.003516f, -0.002048f, -0.006360f, -0.007821f, 0.003864f, 0.000068f, -0.006491f, 0.006847f, -0.001496f, -0.000457f, 0.001044f, 0.001932f, -0.003239f, 0.004095f, -0.004361f, -0.001476f, 0.005358f, -0.003703f, 0.002135f, -0.006267f, -0.004792f, -0.002309f, -0.001552f, -0.000403f, 0.000847f, -0.002529f, -0.003164f, -0.000320f, -0.001802f, 0.000705f, -0.000668f, -0.000576f, + -0.000863f, 0.000667f, 0.000186f, -0.000665f, -0.001292f, -0.000782f, -0.000481f, -0.000122f, -0.000700f, -0.000451f, -0.000988f, 0.000903f, -0.001448f, -0.000899f, -0.006957f, -0.001912f, 0.000055f, -0.006590f, -0.006667f, -0.004000f, 0.015998f, -0.011237f, -0.004620f, -0.007847f, -0.014288f, 0.005336f, 0.002450f, 0.000556f, 0.012266f, 0.011613f, 0.011638f, 0.003758f, -0.002177f, 0.001800f, 0.008773f, -0.003753f, 0.003784f, 0.004432f, -0.010350f, 0.014737f, 0.002859f, 0.004583f, 0.010899f, -0.004193f, -0.010875f, 0.000733f, 0.007386f, -0.005207f, -0.002362f, -0.006942f, 0.007351f, -0.000191f, -0.000749f, -0.012065f, -0.000523f, -0.001468f, 0.007428f, 0.003792f, -0.006616f, 0.013195f, 0.004870f, 0.002744f, 0.004623f, -0.002155f, 0.007399f, -0.002885f, 0.000365f, -0.009213f, -0.011003f, 0.008818f, 0.006907f, 0.012217f, 0.001193f, 0.003294f, -0.009464f, -0.014651f, -0.007192f, -0.004398f, -0.004268f, -0.006771f, -0.005831f, 0.003017f, -0.001697f, 0.004442f, -0.005500f, -0.002110f, 0.002414f, 0.002731f, -0.001654f, 0.007452f, 0.002264f, -0.005602f, 0.011253f, -0.004417f, 0.003461f, 0.014197f, + 0.003028f, 0.001945f, -0.004404f, 0.000195f, -0.004836f, -0.005780f, -0.000932f, 0.003265f, -0.000067f, 0.000417f, 0.000176f, -0.001569f, -0.000503f, 0.000139f, -0.001420f, 0.003327f, 0.002133f, -0.001249f, -0.000308f, 0.000093f, 0.000873f, 0.000469f, -0.002214f, -0.001198f, -0.000534f, 0.000243f, 0.000985f, -0.001033f, -0.001593f, 0.001367f, -0.000820f, 0.001048f, -0.000571f, -0.000884f, -0.001108f, -0.013779f, -0.012835f, 0.007521f, 0.001720f, 0.010535f, -0.016281f, -0.002300f, -0.006468f, 0.001748f, 0.019403f, 0.011069f, -0.016951f, 0.006417f, 0.001620f, -0.007072f, -0.007857f, -0.009618f, -0.015606f, 0.000557f, 0.001885f, -0.005790f, 0.002789f, -0.003337f, 0.000612f, 0.004711f, 0.003655f, 0.010069f, -0.008791f, 0.015853f, -0.009648f, 0.009207f, 0.007321f, -0.005936f, 0.004292f, 0.000770f, 0.006607f, -0.002636f, 0.003463f, 0.006047f, 0.002040f, 0.000943f, -0.002400f, 0.004714f, 0.001437f, -0.002102f, 0.011301f, -0.014740f, 0.001039f, -0.008927f, 0.017780f, 0.006275f, -0.015473f, 0.006030f, 0.020326f, -0.019074f, -0.009071f, 0.002305f, -0.001540f, -0.007228f, 0.006079f, -0.002527f, + 0.013545f, -0.011363f, -0.001105f, -0.003752f, -0.000761f, -0.000680f, 0.013090f, -0.012110f, -0.004000f, -0.001304f, -0.012495f, 0.006761f, 0.005244f, 0.013516f, 0.005521f, 0.011510f, 0.010386f, 0.001718f, -0.004162f, 0.003269f, -0.000345f, -0.001428f, -0.003097f, -0.000282f, -0.004754f, -0.001894f, -0.001059f, -0.006668f, 0.004266f, 0.000371f, -0.004644f, -0.000773f, -0.003762f, 0.000368f, -0.000146f, 0.002588f, -0.000884f, -0.001494f, 0.000335f, -0.002133f, -0.000059f, 0.002237f, 0.000833f, -0.000469f, -0.001494f, 0.006140f, -0.009486f, 0.001205f, -0.005961f, 0.006287f, 0.002240f, -0.009548f, 0.027592f, -0.017553f, 0.005515f, 0.029890f, -0.021135f, 0.009837f, -0.000580f, 0.009775f, -0.002622f, -0.018065f, -0.003983f, 0.014918f, 0.013343f, 0.003699f, -0.000156f, 0.007553f, 0.003675f, 0.000273f, 0.006223f, 0.006281f, -0.005216f, 0.008003f, -0.002249f, 0.012614f, -0.010190f, -0.015685f, 0.003322f, -0.013693f, 0.004701f, 0.000257f, -0.003942f, -0.004383f, -0.006278f, -0.009319f, 0.001785f, 0.003285f, 0.000308f, 0.002370f, 0.002690f, -0.005746f, -0.012048f, 0.009455f, 0.002095f, 0.001551f, + -0.000611f, 0.013894f, 0.002775f, 0.005818f, 0.014660f, -0.009019f, 0.003537f, 0.000587f, 0.004410f, 0.010280f, 0.008037f, -0.013399f, -0.011758f, -0.003027f, -0.006726f, -0.001544f, 0.000461f, -0.005771f, 0.003048f, -0.010715f, 0.000509f, -0.010310f, 0.005082f, 0.005047f, -0.005982f, -0.007843f, 0.000860f, 0.004303f, 0.000788f, -0.009065f, 0.001268f, -0.005190f, 0.003889f, 0.003229f, 0.001444f, -0.001701f, -0.002550f, 0.001802f, -0.000269f, -0.000976f, -0.000064f, -0.002338f, -0.001970f, -0.006221f, -0.001544f, 0.005669f, 0.002479f, -0.001627f, -0.001128f, 0.003958f, -0.001364f, 0.001189f, -0.001755f, 0.000071f, -0.000441f, 0.000212f, -0.002254f, -0.001497f, -0.000860f, -0.000644f, -0.000813f, -0.000938f, 0.000189f, -0.000619f, -0.001423f, -0.001168f, 0.000750f, 0.008712f, -0.003725f, 0.007889f, -0.001488f, 0.003933f, -0.004533f, 0.000540f, -0.002977f, 0.002620f, -0.001433f, -0.017223f, 0.013080f, 0.008393f, 0.021574f, -0.014157f, 0.008834f, -0.017515f, -0.003010f, 0.010684f, 0.011561f, -0.012293f, 0.003517f, -0.014241f, 0.001052f, -0.016698f, 0.005468f, -0.012509f, -0.015524f, -0.013889f, + 0.006971f, -0.011222f, 0.000483f, -0.013161f, 0.001708f, 0.001933f, -0.001987f, -0.009635f, 0.006046f, 0.008457f, 0.005035f, 0.003938f, -0.010301f, 0.005601f, -0.010803f, -0.003416f, 0.006623f, 0.000214f, -0.001502f, -0.002909f, -0.000422f, 0.006851f, -0.007971f, -0.015360f, -0.003252f, 0.004727f, -0.003251f, -0.011389f, -0.011521f, -0.016333f, 0.003899f, -0.004711f, -0.015298f, 0.010933f, -0.009808f, -0.009612f, 0.018471f, -0.006680f, -0.003656f, 0.001511f, -0.003357f, -0.006028f, 0.001483f, -0.010140f, -0.005034f, -0.008531f, -0.006738f, -0.002800f, 0.005494f, 0.013991f, 0.000699f, 0.008409f, 0.000690f, 0.006275f, 0.004347f, 0.011303f, -0.000840f, -0.000254f, 0.001147f, 0.004179f, -0.002319f, 0.000484f, -0.001127f, 0.008266f, -0.000345f, 0.003993f, 0.000573f, 0.001593f, -0.001439f, 0.001848f, -0.005098f, 0.005541f, 0.000101f, 0.000110f, -0.004176f, -0.001052f, -0.005632f, 0.002659f, -0.002897f, 0.001905f, -0.000791f, 0.005590f, -0.002762f, 0.001107f, -0.004910f, -0.003905f, -0.000407f, -0.001698f, 0.001313f, 0.014272f, -0.020560f, 0.003702f, 0.017986f, -0.006672f, 0.019698f, 0.005488f, + 0.001242f, -0.005713f, -0.013757f, -0.009050f, 0.023450f, -0.012598f, -0.000110f, -0.004354f, 0.001832f, 0.014115f, 0.012680f, -0.007685f, 0.018318f, 0.018291f, -0.008624f, -0.004510f, 0.011140f, -0.009413f, -0.008241f, -0.000591f, -0.012658f, -0.000285f, -0.003737f, 0.001633f, 0.021977f, 0.007503f, 0.001185f, -0.010075f, -0.029237f, -0.003563f, 0.016425f, 0.004032f, -0.010959f, 0.008405f, 0.013351f, 0.011666f, 0.014106f, -0.023103f, 0.004668f, 0.001123f, -0.011467f, 0.006216f, -0.010321f, 0.007350f, -0.005824f, 0.009116f, 0.020490f, 0.027085f, 0.017094f, 0.007855f, -0.011238f, -0.003101f, -0.013413f, -0.014098f, -0.002970f, 0.015881f, 0.003905f, 0.000250f, 0.003737f, -0.015545f, 0.004037f, 0.001934f, -0.000143f, -0.007868f, 0.004209f, 0.008507f, -0.008995f, -0.016951f, 0.038604f, 0.004988f, -0.006917f, 0.002382f, 0.004154f, 0.017590f, -0.003544f, 0.004840f, 0.005995f, 0.008731f, -0.006076f, -0.002979f, -0.006560f, 0.003115f, -0.001818f, 0.003435f, 0.003201f, -0.002279f, -0.003592f, 0.006547f, 0.000871f, 0.001731f, -0.001250f, 0.003957f, -0.006793f, -0.004845f, -0.003270f, -0.001205f, + 0.007545f, 0.002779f, 0.005044f, 0.003850f, 0.003954f, 0.000280f, 0.000876f, -0.001680f, -0.004760f, 0.004654f, 0.001121f, 0.001968f, -0.003318f, -0.010635f, -0.002987f, -0.006525f, -0.002481f, 0.004943f, -0.006697f, 0.030446f, -0.002992f, 0.008578f, 0.021869f, 0.002858f, -0.003240f, -0.014304f, 0.008057f, -0.007726f, -0.009631f, -0.028905f, -0.012894f, 0.005806f, -0.001501f, -0.005601f, -0.020826f, 0.007279f, 0.011547f, -0.016436f, -0.008537f, -0.004423f, -0.017143f, 0.006842f, 0.001278f, -0.009107f, -0.007414f, -0.003144f, -0.023177f, -0.008292f, 0.011585f, 0.019308f, -0.014565f, -0.018298f, -0.005239f, -0.001080f, -0.014783f, -0.012220f, 0.004729f, 0.008129f, -0.016199f, 0.032592f, 0.000245f, 0.013249f, -0.007330f, 0.012449f, -0.008345f, 0.003745f, -0.023046f, -0.004882f, 0.009545f, -0.023153f, 0.006458f, -0.005239f, -0.011682f, -0.026290f, -0.000468f, 0.014577f, 0.000333f, -0.027730f, -0.004064f, 0.005033f, 0.011281f, 0.020327f, -0.007351f, 0.009092f, 0.023888f, 0.007921f, 0.003045f, -0.010815f, -0.001904f, -0.006752f, 0.001563f, -0.008046f, 0.001998f, -0.015189f, -0.001851f, 0.011622f, + 0.003488f, 0.002253f, -0.006439f, -0.011778f, 0.006709f, -0.002183f, 0.006921f, -0.002513f, 0.001063f, -0.001535f, -0.003218f, -0.003138f, 0.004566f, 0.001699f, -0.000689f, -0.001560f, 0.000334f, -0.004580f, 0.002334f, -0.004677f, -0.005643f, -0.003680f, 0.002257f, 0.000274f, 0.000224f, -0.004415f, 0.003666f, -0.000557f, -0.002075f, -0.006238f, -0.001756f, 0.000389f, 0.001032f, 0.002528f, 0.006838f, 0.002101f, 0.001751f, 0.003336f, 0.009006f, -0.002950f, -0.008989f, 0.010958f, 0.002010f, -0.016950f, -0.026463f, -0.021726f, -0.027390f, 0.023573f, -0.014292f, -0.003609f, 0.007837f, -0.026057f, -0.010710f, -0.018156f, -0.007976f, -0.005867f, 0.011829f, -0.022846f, -0.012070f, 0.007153f, 0.009087f, 0.013027f, -0.000129f, 0.000339f, -0.003987f, -0.000147f, -0.005272f, 0.003153f, -0.017970f, -0.009814f, -0.015795f, 0.010907f, 0.005543f, 0.008424f, 0.011134f, -0.022049f, -0.001508f, -0.002476f, 0.020034f, -0.007614f, 0.006357f, 0.010760f, -0.004019f, 0.011528f, -0.007554f, 0.012866f, 0.018280f, -0.007232f, -0.001187f, 0.015512f, -0.013290f, 0.021493f, -0.009186f, -0.034478f, 0.005409f, 0.017684f, + -0.006734f, 0.001936f, -0.000530f, 0.013541f, 0.017179f, -0.017479f, -0.007509f, 0.003945f, 0.011846f, -0.020540f, -0.015451f, -0.012516f, 0.024808f, -0.000699f, -0.028333f, -0.006271f, -0.011759f, 0.009591f, 0.001328f, 0.007217f, -0.010610f, 0.017438f, 0.000792f, 0.003036f, 0.005106f, -0.016338f, -0.005480f, 0.001102f, -0.001989f, -0.004195f, -0.004678f, 0.004437f, -0.004455f, -0.004490f, 0.003476f, 0.005072f, 0.002698f, -0.009641f, -0.000820f, -0.003906f, -0.002748f, 0.003851f, 0.003552f, 0.007906f, -0.001065f, -0.004041f, 0.003102f, -0.009059f, -0.001023f, -0.000172f, -0.005811f, 0.000700f, 0.000585f, -0.002316f, 0.001146f, -0.010283f, -0.001822f, -0.001319f, 0.001180f, 0.001207f, 0.004306f, -0.000635f, 0.004831f, 0.002637f, 0.002504f, 0.000234f, -0.015942f, -0.006453f, 0.010950f, 0.004054f, 0.015688f, 0.005381f, 0.007675f, -0.030810f, -0.012073f, 0.012022f, -0.008117f, -0.005813f, -0.010265f, 0.003156f, 0.016052f, 0.004211f, 0.003825f, -0.020642f, -0.006981f, -0.003768f, 0.007652f, 0.018126f, -0.022016f, 0.010379f, -0.017947f, -0.004773f, -0.016510f, 0.002118f, 0.002287f, -0.000842f, + 0.006896f, -0.015416f, -0.004442f, -0.014447f, -0.005941f, 0.000259f, -0.000668f, -0.018143f, 0.010397f, 0.011643f, -0.004340f, 0.013817f, 0.027177f, 0.002784f, 0.020586f, 0.026403f, 0.002076f, 0.000851f, 0.006368f, -0.005555f, 0.008751f, 0.001787f, -0.005783f, -0.008904f, 0.033167f, -0.003454f, 0.019381f, 0.008568f, -0.009782f, -0.011355f, -0.007906f, 0.009264f, -0.007580f, 0.012041f, 0.029213f, 0.014803f, -0.003885f, 0.000465f, -0.024504f, -0.016889f, -0.014951f, 0.022988f, 0.036091f, -0.015853f, -0.000146f, -0.014669f, -0.002425f, 0.022064f, -0.006989f, -0.001353f, -0.034828f, -0.004670f, -0.006354f, -0.003706f, 0.013205f, 0.000924f, 0.002734f, 0.004013f, -0.007001f, 0.005530f, 0.002940f, 0.004926f, -0.004187f, 0.007146f, -0.003462f, -0.000811f, -0.008839f, -0.002104f, 0.007658f, -0.002849f, -0.000250f, -0.001523f, 0.007350f, -0.001894f, -0.005368f, 0.003098f, 0.003251f, 0.001855f, 0.002553f, 0.002695f, -0.002922f, 0.000722f, 0.005177f, 0.008986f, 0.007778f, 0.005036f, 0.002709f, 0.000531f, 0.000654f, -0.005650f, -0.000541f, 0.003533f, -0.003486f, 0.003722f, -0.001305f, 0.001277f, + 0.004860f, -0.002143f, 0.020841f, 0.057787f, 0.025187f, -0.007854f, -0.002006f, -0.010736f, 0.026633f, -0.026682f, -0.015163f, -0.040793f, -0.000470f, 0.020115f, 0.025024f, 0.004507f, -0.009936f, -0.024456f, -0.017897f, 0.018022f, -0.003663f, 0.028624f, -0.000086f, -0.009194f, 0.013506f, 0.004922f, -0.000250f, -0.007119f, 0.018681f, -0.003475f, 0.016137f, -0.000258f, -0.008806f, 0.035216f, -0.008430f, 0.014283f, 0.034612f, 0.012171f, -0.001470f, -0.016923f, -0.003197f, -0.027564f, -0.032300f, 0.007028f, 0.020669f, -0.004966f, 0.002887f, -0.035247f, -0.013414f, 0.020413f, 0.011048f, -0.009138f, 0.006734f, -0.010460f, -0.005089f, -0.016077f, -0.027030f, 0.001626f, -0.006395f, -0.019081f, -0.031197f, -0.026894f, -0.008778f, -0.024705f, 0.011341f, -0.011065f, 0.003892f, 0.003190f, -0.000217f, 0.000588f, -0.004029f, -0.005540f, 0.015962f, 0.031782f, -0.021461f, 0.003877f, -0.009040f, 0.011489f, -0.011997f, -0.000478f, -0.008674f, -0.003908f, 0.029211f, 0.021251f, 0.004753f, -0.003297f, 0.000257f, -0.011966f, 0.004095f, 0.011909f, -0.002309f, -0.010350f, -0.005953f, 0.010311f, -0.012540f, 0.001139f, + 0.005285f, 0.004998f, -0.004440f, -0.003993f, 0.004424f, 0.005618f, -0.004352f, 0.006692f, 0.003822f, 0.005550f, -0.000644f, 0.007329f, -0.000833f, 0.004635f, 0.002228f, 0.002726f, 0.001631f, -0.001621f, 0.008566f, -0.008479f, -0.001317f, 0.001846f, -0.002608f, -0.002157f, -0.004054f, 0.003837f, 0.000278f, -0.007311f, -0.002815f, 0.004772f, -0.005324f, -0.023809f, -0.026934f, 0.006992f, 0.010344f, 0.032324f, -0.027311f, 0.008732f, 0.008402f, -0.045492f, -0.002092f, 0.000340f, -0.038003f, -0.020694f, -0.013426f, 0.009727f, -0.003016f, 0.002327f, -0.010704f, 0.016051f, 0.025227f, 0.013315f, -0.003553f, -0.038570f, -0.016783f, -0.020951f, 0.007870f, 0.002409f, -0.016903f, -0.001272f, 0.013333f, -0.011196f, 0.023012f, -0.020663f, -0.000580f, -0.012027f, -0.038556f, 0.006629f, -0.016393f, -0.018481f, 0.014406f, 0.021360f, -0.023882f, 0.009299f, 0.028260f, -0.009176f, 0.012403f, 0.009723f, -0.006583f, 0.003885f, -0.031300f, 0.047470f, 0.018707f, 0.011271f, 0.045334f, -0.055246f, -0.004111f, -0.007615f, 0.005899f, 0.022595f, 0.023468f, 0.009034f, 0.011209f, 0.029000f, -0.002733f, -0.019659f, + -0.034168f, 0.013270f, -0.012906f, 0.001303f, 0.009279f, -0.006815f, 0.014005f, 0.037137f, -0.022877f, 0.017317f, -0.011080f, -0.010619f, 0.028088f, 0.002138f, 0.008774f, 0.027231f, 0.022486f, -0.009881f, -0.011362f, -0.023956f, -0.006031f, 0.000119f, 0.012506f, 0.013099f, 0.000047f, 0.003106f, 0.001900f, -0.000480f, 0.002630f, 0.003011f, 0.001028f, 0.007393f, -0.003679f, 0.001104f, 0.005341f, 0.002947f, 0.001571f, -0.003330f, 0.007182f, 0.004656f, 0.001110f, -0.004093f, -0.005708f, -0.013589f, 0.008131f, -0.000559f, -0.001206f, 0.004093f, -0.006490f, -0.000802f, 0.004563f, 0.006210f, 0.009415f, 0.005260f, 0.002618f, 0.002566f, -0.000059f, 0.006785f, 0.029727f, 0.034798f, 0.008797f, 0.021438f, -0.013923f, 0.010057f, 0.009948f, -0.057317f, 0.016278f, 0.018480f, 0.003998f, -0.018310f, -0.000335f, -0.035402f, 0.041663f, 0.024979f, -0.012972f, -0.014054f, -0.020572f, -0.010859f, 0.030182f, -0.030512f, -0.017341f, -0.004627f, -0.004975f, -0.006622f, 0.004495f, -0.020220f, -0.020457f, -0.012174f, -0.015726f, -0.004336f, -0.020488f, -0.002889f, -0.013703f, -0.045295f, -0.028743f, -0.011208f, + -0.007042f, 0.006296f, 0.007711f, -0.000273f, 0.001484f, 0.013097f, 0.006470f, 0.006704f, 0.032023f, 0.006653f, 0.010939f, 0.019879f, 0.042964f, 0.036585f, 0.002115f, -0.014456f, -0.027883f, 0.025581f, -0.006090f, 0.069092f, 0.014146f, 0.030994f, -0.003172f, 0.003978f, -0.027230f, -0.001049f, 0.024182f, 0.013900f, 0.018389f, -0.020688f, -0.013484f, -0.026596f, -0.050351f, 0.029270f, -0.044404f, -0.005380f, 0.059116f, 0.004007f, 0.023844f, 0.011328f, 0.017610f, 0.000619f, -0.031524f, 0.031003f, -0.000262f, -0.027814f, -0.024709f, 0.001028f, 0.010006f, 0.020905f, 0.005860f, -0.024358f, 0.001575f, -0.004732f, 0.005260f, -0.009506f, -0.007729f, 0.004473f, 0.004248f, -0.007441f, 0.001052f, -0.002299f, -0.000384f, -0.009836f, -0.003345f, -0.003025f, 0.004970f, -0.002494f, -0.005786f, 0.008190f, -0.004600f, -0.001784f, -0.013812f, -0.014811f, 0.000385f, 0.000553f, -0.005837f, -0.003728f, 0.005270f, 0.003891f, -0.005926f, -0.009819f, -0.000251f, 0.006713f, -0.041041f, 0.012212f, 0.015255f, -0.027281f, -0.021345f, 0.000563f, 0.016750f, 0.040106f, -0.002192f, -0.030683f, -0.031250f, -0.001503f, + -0.017749f, 0.005348f, 0.005517f, -0.034276f, -0.029833f, -0.056084f, -0.016759f, -0.016178f, -0.038424f, -0.025809f, -0.000408f, -0.017676f, -0.011337f, -0.009955f, -0.003285f, -0.037708f, -0.020456f, -0.023138f, -0.011674f, 0.011770f, -0.032336f, 0.002511f, 0.026630f, 0.031990f, -0.007640f, 0.008823f, 0.018086f, -0.031453f, 0.017674f, -0.013571f, 0.027897f, -0.013491f, 0.002402f, -0.014548f, -0.003346f, 0.055790f, -0.011607f, 0.021050f, -0.040869f, -0.006658f, -0.000184f, -0.038554f, 0.035907f, 0.001449f, -0.013365f, 0.025950f, -0.010757f, 0.006721f, 0.050994f, -0.020233f, -0.028154f, 0.019338f, -0.005492f, -0.057406f, 0.023204f, -0.076121f, -0.041036f, 0.030608f, 0.023708f, 0.004942f, 0.016002f, 0.000134f, -0.000554f, -0.057421f, -0.031038f, -0.013495f, 0.005110f, -0.032624f, 0.007895f, 0.004567f, 0.013330f, -0.021295f, 0.001128f, 0.016512f, 0.012379f, 0.009506f, 0.000951f, 0.007827f, -0.018860f, -0.011952f, -0.012779f, -0.003511f, -0.002752f, -0.001643f, 0.014941f, -0.007737f, 0.007765f, 0.015087f, -0.007580f, 0.004668f, -0.012152f, -0.009124f, -0.000732f, 0.003888f, -0.010940f, 0.004727f, + -0.013673f, 0.011843f, -0.004929f, -0.002380f, 0.000338f, 0.010624f, -0.003529f, 0.004243f, -0.009666f, 0.008504f, 0.006264f, 0.019627f, 0.004439f, 0.016119f, -0.016107f, -0.005346f, -0.019129f, -0.009855f, -0.009478f, 0.077216f, 0.042286f, 0.000060f, -0.039755f, 0.020424f, -0.041456f, -0.033729f, 0.006135f, 0.034295f, 0.067806f, -0.010676f, 0.034283f, -0.012266f, 0.024337f, 0.041089f, 0.022989f, 0.026257f, 0.014092f, -0.007711f, -0.033632f, -0.034820f, -0.010530f, -0.032909f, -0.009673f, -0.006061f, -0.007401f, 0.026273f, -0.004478f, -0.067590f, 0.003968f, 0.016272f, 0.015610f, 0.040385f, -0.004170f, -0.080662f, 0.045854f, -0.036118f, 0.011807f, -0.007934f, 0.027131f, 0.039468f, -0.043963f, -0.003123f, -0.021967f, -0.038380f, 0.027751f, -0.019114f, -0.047210f, 0.018477f, 0.027574f, 0.045329f, 0.012018f, -0.007132f, 0.004963f, 0.037098f, -0.029900f, 0.058594f, -0.018441f, -0.016408f, -0.005280f, 0.035678f, -0.037184f, 0.003358f, 0.004537f, -0.103563f, -0.015350f, 0.031968f, -0.014903f, 0.005301f, 0.014370f, 0.007442f, -0.005082f, 0.008349f, 0.035493f, 0.042322f, -0.033576f, 0.012033f, + -0.024598f, -0.004274f, 0.041958f, -0.000976f, -0.004374f, 0.001468f, -0.002844f, -0.021839f, 0.005985f, 0.001369f, -0.012710f, -0.032309f, 0.000423f, -0.007790f, 0.009840f, -0.014974f, -0.013922f, -0.017601f, 0.014825f, 0.003330f, 0.009084f, 0.007212f, 0.000606f, 0.005296f, -0.007151f, -0.014861f, 0.022553f, -0.002374f, -0.010952f, -0.000454f, -0.007900f, -0.005049f, -0.009120f, 0.001045f, 0.002765f, -0.001441f, 0.006238f, 0.016325f, -0.000637f, -0.004119f, -0.006734f, 0.001376f, -0.008371f, -0.004859f, 0.009384f, -0.007320f, -0.006012f, -0.008934f, -0.021774f, -0.012304f, 0.003001f, 0.013953f, -0.011454f, -0.003019f, 0.044255f, 0.029358f, -0.082281f, -0.046778f, 0.056355f, 0.065316f, -0.035108f, -0.011896f, -0.092589f, -0.051177f, 0.013336f, -0.004200f, 0.012313f, -0.049216f, -0.030842f, -0.033730f, 0.049966f, 0.074249f, -0.003615f, 0.020046f, -0.012091f, -0.006503f, -0.000948f, 0.017054f, 0.032170f, 0.007832f, -0.011464f, -0.006156f, -0.007562f, -0.044351f, -0.025163f, -0.045090f, -0.006007f, 0.013942f, -0.018969f, 0.027827f, -0.020617f, -0.007713f, 0.043164f, -0.020924f, 0.024251f, 0.016870f, + -0.007934f, -0.041581f, -0.030124f, -0.024787f, 0.007474f, 0.077763f, 0.013666f, 0.041818f, 0.049254f, 0.038580f, 0.028529f, 0.025569f, -0.042923f, 0.001038f, -0.007048f, 0.057567f, 0.027321f, 0.033675f, 0.060063f, -0.029492f, -0.040454f, 0.014851f, 0.050795f, -0.086112f, -0.001585f, 0.006885f, 0.040029f, -0.069634f, -0.104996f, -0.018654f, 0.029385f, 0.007367f, 0.011869f, 0.032934f, 0.002074f, -0.023253f, -0.034485f, 0.001173f, 0.004705f, 0.006846f, 0.031752f, 0.047141f, 0.022257f, 0.003530f, 0.000140f, -0.000479f, 0.003860f, 0.004773f, -0.011918f, 0.017416f, 0.002146f, -0.015857f, -0.028001f, 0.003504f, -0.011947f, 0.006045f, 0.003034f, -0.002486f, 0.001757f, -0.011552f, 0.012033f, -0.006183f, 0.008074f, -0.012422f, -0.008077f, -0.022191f, -0.021947f, 0.001082f, 0.011535f, -0.009797f, 0.023108f, 0.000661f, 0.006875f, -0.006931f, 0.024699f, 0.002106f, 0.011316f, -0.012187f, -0.006691f, -0.003859f, -0.015379f, -0.002981f, 0.016651f, -0.028801f, 0.022199f, -0.001111f, -0.021131f, -0.037420f, 0.014100f, -0.018241f, -0.036489f, 0.026258f, 0.050655f, 0.015463f, -0.019171f, 0.029980f, + 0.050965f, 0.018738f, 0.010714f, 0.003537f, -0.005382f, 0.023835f, -0.042112f, 0.002462f, -0.060680f, 0.032535f, -0.048908f, -0.004190f, 0.026805f, 0.014581f, -0.027746f, 0.005881f, -0.032148f, 0.066580f, 0.008989f, 0.021570f, 0.035105f, 0.073461f, -0.029967f, 0.023835f, -0.034781f, 0.012674f, 0.026842f, 0.059060f, 0.014363f, -0.012038f, 0.060987f, 0.008160f, -0.003813f, -0.034869f, 0.002757f, 0.037942f, -0.012391f, 0.036473f, -0.044442f, 0.069202f, 0.072252f, -0.086287f, -0.001769f, -0.005444f, 0.019342f, -0.014698f, -0.010823f, 0.037126f, -0.030820f, -0.092038f, 0.001608f, 0.081861f, -0.064066f, 0.032444f, -0.014415f, -0.008169f, -0.038820f, 0.090376f, -0.005321f, 0.014983f, 0.008827f, -0.060741f, 0.079222f, 0.006190f, 0.070518f, -0.138433f, 0.013725f, -0.012978f, -0.041226f, -0.011168f, 0.024857f, -0.032195f, 0.022209f, -0.029010f, -0.018816f, -0.038195f, 0.048816f, -0.018488f, 0.003838f, -0.040726f, 0.002303f, -0.029901f, -0.009685f, 0.013990f, -0.020133f, 0.009723f, 0.001824f, -0.027583f, 0.025526f, -0.011264f, 0.004116f, -0.011753f, 0.023221f, -0.016981f, 0.004102f, 0.001660f, + -0.005779f, 0.030128f, -0.016816f, -0.020954f, -0.011641f, -0.023492f, -0.032299f, -0.016402f, 0.003719f, 0.002145f, -0.023105f, -0.013327f, -0.015341f, -0.022781f, -0.017565f, 0.008024f, 0.005880f, -0.000601f, 0.058531f, 0.006750f, -0.044433f, 0.004330f, -0.090583f, -0.020960f, 0.004793f, -0.017840f, -0.072167f, -0.008276f, -0.047303f, -0.012069f, 0.043793f, 0.009839f, 0.057348f, 0.023435f, 0.021775f, 0.013112f, -0.019291f, 0.045538f, -0.023054f, -0.000766f, 0.021859f, 0.009657f, -0.027882f, 0.022439f, 0.009525f, 0.053932f, 0.022542f, -0.010089f, 0.033019f, -0.026439f, 0.044512f, 0.014844f, -0.048444f, -0.050472f, 0.026130f, 0.032162f, 0.013764f, 0.004900f, -0.023406f, -0.032462f, 0.010039f, -0.031954f, -0.047407f, -0.015052f, -0.007807f, -0.044232f, -0.016043f, 0.015943f, -0.029725f, -0.049841f, 0.014184f, 0.017849f, 0.001981f, -0.006527f, -0.002625f, -0.008871f, 0.017991f, 0.083614f, 0.017406f, -0.003241f, -0.002934f, -0.030221f, -0.047726f, -0.021802f, 0.069503f, 0.073858f, 0.038387f, 0.006544f, 0.067787f, 0.031939f, -0.014997f, -0.094453f, -0.071337f, -0.059497f, -0.111911f, -0.065922f, + 0.016163f, 0.090603f, -0.040102f, 0.030279f, -0.044871f, 0.014208f, -0.003404f, 0.030753f, -0.014340f, -0.005862f, -0.040000f, -0.023713f, -0.009509f, -0.036526f, 0.046215f, -0.007749f, -0.023588f, -0.011951f, 0.005079f, -0.026602f, 0.018998f, 0.013134f, 0.030055f, 0.006221f, 0.008768f, -0.029803f, -0.033708f, -0.004572f, -0.024790f, -0.016504f, -0.028957f, -0.042927f, 0.002637f, -0.011685f, 0.003068f, 0.002420f, 0.032841f, 0.031762f, -0.011643f, -0.007087f, -0.013922f, 0.030655f, 0.021175f, 0.012965f, 0.005302f, -0.007030f, 0.018333f, -0.025421f, -0.009445f, -0.004693f, -0.027932f, -0.055589f, 0.029261f, -0.001682f, -0.017242f, -0.008060f, 0.020939f, 0.038761f, -0.016497f, 0.050003f, -0.057273f, 0.046189f, -0.005735f, 0.061725f, -0.039977f, 0.035551f, -0.059024f, 0.051290f, -0.047666f, -0.020451f, 0.071913f, 0.016284f, 0.057801f, 0.082085f, 0.008643f, -0.006916f, -0.034171f, -0.003024f, 0.052481f, 0.012897f, -0.018324f, -0.058181f, 0.005165f, 0.011174f, 0.027589f, 0.016459f, 0.023013f, 0.013960f, -0.033548f, -0.054148f, -0.022618f, 0.051930f, 0.020256f, 0.166237f, -0.052617f, -0.044726f, + 0.054572f, 0.085233f, 0.018226f, -0.001690f, 0.022788f, 0.005433f, 0.027760f, -0.025342f, 0.010240f, 0.039747f, 0.044493f, 0.029270f, 0.129571f, -0.016602f, -0.016311f, -0.008588f, 0.067059f, 0.039674f, -0.033390f, 0.034751f, -0.000307f, 0.011226f, -0.027386f, 0.059011f, -0.058561f, 0.003964f, 0.091722f, -0.067332f, 0.196400f, -0.090078f, 0.094276f, 0.085855f, -0.083876f, -0.077301f, 0.087742f, 0.003635f, -0.049686f, -0.021389f, 0.048784f, -0.132392f, 0.021415f, -0.015659f, -0.084445f, 0.055647f, -0.065932f, 0.005204f, 0.005785f, -0.026946f, -0.065010f, 0.017803f, -0.004213f, -0.003015f, 0.013607f, -0.013652f, -0.020778f, 0.011763f, 0.028622f, -0.010525f, 0.005227f, 0.021443f, -0.019086f, 0.029861f, 0.024121f, -0.047654f, 0.007947f, -0.026772f, 0.013286f, -0.001906f, 0.005046f, -0.024382f, 0.011329f, 0.006374f, 0.001101f, -0.012225f, 0.038087f, 0.008318f, -0.000044f, 0.035169f, -0.023521f, -0.022689f, 0.005142f, 0.015198f, 0.005220f, 0.016937f, 0.010202f, -0.048996f, -0.023895f, 0.012673f, -0.027244f, 0.042224f, -0.015525f, 0.032346f, 0.043617f, -0.101306f, -0.041933f, 0.061000f, + -0.129026f, -0.081107f, -0.053469f, 0.090127f, 0.194385f, 0.052841f, -0.150970f, -0.034929f, -0.154250f, -0.081634f, 0.127340f, 0.074908f, 0.119778f, 0.064721f, -0.089040f, -0.143375f, -0.107879f, -0.026751f, 0.065308f, 0.072552f, 0.044959f, 0.024050f, -0.036810f, -0.156656f, -0.186729f, -0.041255f, 0.144584f, 0.255564f, 0.174624f, -0.033364f, -0.119283f, -0.173111f, -0.127049f, -0.104118f, 0.001000f, 0.040732f, 0.140831f, 0.148764f, -0.079987f, -0.051247f, -0.186950f, -0.175252f, -0.061914f, 0.016616f, 0.182247f, 0.267166f, 0.119736f, -0.079654f, -0.279721f, -0.208623f, -0.151691f, 0.073110f, 0.160724f, 0.099127f, 0.064043f, 0.053064f, -0.166512f, -0.031368f, -0.094551f, 0.034886f, -0.012302f, 0.098565f, 0.156810f, 0.123149f, -0.144565f, -0.294146f, -0.219699f, 0.023889f, 0.172558f, -0.004837f, 0.238914f, 0.009308f, -0.060296f, -0.072185f, -0.051587f, 0.000086f, 0.172903f, 0.147790f, 0.028241f, -0.059660f, -0.020120f, -0.011471f, 0.091235f, 0.098986f, 0.012962f, 0.003749f, -0.014509f, -0.003218f, -0.018105f, -0.024862f, -0.014991f, -0.009411f, 0.035585f, 0.053269f, 0.045139f, -0.065535f, + -0.072582f, -0.028955f, -0.029453f, -0.029747f, 0.068205f, 0.054275f, 0.071681f, 0.020173f, -0.029166f, -0.053572f, -0.101418f, -0.065907f, 0.044171f, 0.089983f, 0.138315f, 0.093398f, 0.009002f, -0.212064f, -0.184772f, -0.063901f, 0.077601f, 0.118429f, 0.160267f, 0.119402f, -0.008139f, -0.120829f, -0.176000f, -0.171617f, -0.029925f, 0.185680f, 0.194051f, 0.097481f, -0.045100f, -0.129180f, -0.088382f, -0.060849f, 0.006804f, -0.034167f, 0.068281f, 0.021723f, -0.055936f, -0.052115f, -0.000186f, -0.084177f, -0.010801f, 0.012856f, 0.009315f, -0.007016f, 0.001758f, -0.028090f, -0.003901f, -0.003010f, 0.014225f, -0.009478f, 0.038595f, -0.010016f, -0.007861f, -0.010553f, -0.012597f, 0.024609f, 0.006582f, -0.011393f, 0.037360f, 0.002709f, -0.067443f, -0.033172f, 0.018103f, 0.033143f, -0.011547f, 0.004317f, 0.045585f, -0.000817f, 0.005894f, -0.037283f, -0.017176f, 0.011890f, -0.008558f, -0.008043f, -0.005378f, 0.030720f, 0.010620f, -0.011597f, -0.036372f, -0.014020f, -0.002506f, -0.032505f, 0.002744f, -0.037170f, -0.025481f, -0.017137f, -0.033709f, 0.052521f, -0.009814f, -0.023326f, 0.021682f, -0.000061f, + -0.051737f, -0.002703f, 0.050859f, 0.041882f, -0.024240f, 0.032496f, 0.004999f, 0.031016f, -0.034704f, -0.050269f, 0.018970f, 0.022589f, 0.019223f, 0.017309f, -0.019516f, 0.019075f, -0.038144f, 0.025837f, -0.051880f, -0.045002f, 0.033032f, -0.026211f, 0.022404f, 0.031622f, 0.001848f, -0.023942f, 0.007359f, 0.009146f, -0.002480f, -0.001701f, -0.001268f, 0.020699f, -0.017576f, 0.013541f, -0.018353f, 0.024212f, -0.021404f, -0.011143f, 0.008356f, -0.006968f, -0.001219f, 0.009737f, 0.001821f, 0.006599f, 0.017980f, -0.014440f, -0.009209f, 0.010848f, 0.005882f, 0.021357f, -0.017590f, 0.006136f, -0.002544f, -0.012902f, -0.013727f, 0.005696f, 0.002904f, -0.012758f, -0.019887f, 0.005877f, -0.000241f, -0.003352f, 0.011879f, -0.018260f, 0.020958f, 0.006716f, -0.019074f, -0.020389f, 0.016763f, -0.028767f, 0.019376f, -0.002963f, 0.013251f, -0.001179f, 0.004193f, 0.025700f, -0.041116f, 0.082509f, 0.126357f, -0.016669f, -0.046474f, -0.040272f, 0.116514f, 0.052402f, 0.112770f, 0.060535f, 0.000371f, -0.052446f, -0.011461f, 0.028549f, 0.053079f, 0.025123f, -0.024281f, -0.006211f, 0.025472f, 0.037052f, + 0.004820f, 0.008175f, -0.025836f, 0.004568f, -0.012368f, 0.016782f, 0.019237f, 0.049066f, 0.042632f, -0.022734f, 0.003889f, -0.025497f, 0.006796f, 0.022276f, 0.033777f, 0.002281f, -0.015774f, -0.000269f, -0.028665f, 0.023879f, -0.006456f, 0.009721f, 0.022694f, 0.000246f, 0.030163f, -0.014985f, -0.008023f, -0.007252f, -0.030628f, -0.018712f, -0.046818f, -0.009147f, -0.053415f, 0.003412f, -0.018247f, 0.043860f, 0.006754f, 0.012728f, -0.041257f, 0.017247f, 0.000495f, -0.018724f, 0.030589f, -0.016682f, -0.008336f, 0.007257f, 0.020296f, -0.002720f, -0.010816f, 0.068029f, 0.022436f, 0.015490f, 0.025866f, -0.018822f, -0.000707f, -0.006496f, 0.035931f, 0.049318f, 0.047907f, -0.028798f, -0.030913f, -0.004590f, -0.012170f, 0.012129f, 0.032358f, 0.033044f, 0.001685f, 0.018357f, -0.002034f, -0.005479f, 0.011144f, 0.020921f, -0.001821f, 0.016350f, -0.013803f, 0.002634f, 0.000460f, 0.005436f, -0.004597f, 0.018332f, 0.011107f, -0.002403f, -0.005026f, 0.005244f, 0.003536f, 0.019944f, 0.001369f, -0.012504f, -0.012869f, -0.007981f, 0.005972f, 0.006470f, 0.013294f, -0.016337f, 0.002443f, -0.004837f, + 0.010736f, -0.008284f, 0.015057f, -0.005522f, 0.005781f, -0.008854f, -0.006665f, 0.004164f, -0.012656f, -0.000480f, 0.014573f, 0.003022f, -0.005615f, 0.000759f, -0.047168f, -0.102222f, -0.013857f, 0.135170f, 0.208272f, 0.174937f, 0.138155f, -0.009261f, 0.016199f, -0.101450f, -0.115167f, -0.187626f, -0.108097f, -0.118143f, -0.037273f, 0.014936f, 0.081682f, 0.058251f, 0.177880f, 0.154983f, 0.051132f, 0.010894f, -0.027652f, -0.060382f, -0.095641f, -0.034930f, -0.098034f, -0.026027f, -0.047721f, -0.030754f, -0.022902f, 0.005253f, 0.001647f, 0.033326f, 0.048055f, 0.073189f, 0.079171f, 0.095187f, 0.082051f, -0.009786f, 0.007954f, -0.000918f, 0.015391f, -0.046978f, 0.018996f, -0.050218f, -0.125847f, -0.061672f, -0.094202f, -0.158143f, -0.046416f, -0.013655f, -0.064147f, 0.021823f, 0.048635f, 0.110603f, 0.130199f, 0.192329f, 0.121365f, 0.099056f, 0.098320f, 0.061295f, -0.019064f, 0.010110f, -0.096996f, -0.083420f, -0.140466f, -0.166836f, -0.192824f, -0.140272f, -0.108197f, -0.011150f, -0.005249f, 0.015424f, 0.056334f, 0.095506f, 0.171795f, 0.170044f, 0.169155f, 0.135779f, 0.058168f, 0.087652f, + 0.013731f, -0.043804f, -0.066175f, -0.156319f, -0.142278f, -0.125864f, -0.108666f, -0.086884f, -0.052616f, -0.031813f, -0.010900f, 0.007966f, 0.052702f, 0.062626f, 0.082374f, 0.068339f, 0.097644f, 0.088509f, 0.057876f, 0.066758f, 0.044822f, -0.012037f, -0.036134f, -0.041616f, -0.099522f, -0.086199f, -0.077695f, -0.058122f, -0.031691f, -0.001050f, -0.003781f, 0.025584f, 0.039236f, 0.030625f, 0.036409f, 0.023350f, 0.007362f, -0.000621f, 0.010611f, 0.002626f, -0.012121f, 0.013280f, 0.015918f, 0.001271f, 0.008607f, -0.002231f, -0.003445f, 0.001637f, 0.006005f, -0.000062f, -0.013383f, -0.017787f, -0.017476f, -0.020195f, -0.013656f, -0.003918f, -0.004553f, 0.006171f, 0.002538f, 0.001982f, 0.007075f, 0.008196f, 0.006545f, 0.008852f, 0.013615f, 0.011732f, 0.006740f, 0.008187f, 0.002974f, -0.002385f, -0.000607f, -0.003115f, -0.004784f, -0.001720f, -0.002591f, -0.000769f, -0.000979f, 0.000279f}, + {0.013781f, 0.005240f, -0.006918f, -0.001174f, 0.004798f, -0.000848f, 0.005105f, -0.012612f, -0.009000f, -0.002201f, -0.010630f, 0.004455f, -0.002374f, -0.001169f, -0.007185f, -0.003199f, 0.006666f, 0.006670f, -0.002622f, -0.002029f, -0.004438f, -0.010193f, 0.011356f, 0.006763f, 0.000281f, 0.001198f, -0.000636f, 0.000333f, 0.009142f, -0.004639f, 0.001667f, -0.014643f, -0.012022f, -0.003004f, 0.001073f, -0.010204f, -0.001912f, 0.003631f, 0.000861f, 0.000186f, -0.005142f, -0.003939f, 0.009560f, -0.004434f, -0.004106f, -0.001344f, -0.001373f, 0.004223f, -0.002236f, -0.006272f, -0.000244f, 0.005505f, -0.007862f, 0.000341f, -0.008421f, 0.000592f, -0.006175f, 0.009324f, -0.000557f, -0.009822f, -0.001457f, -0.000953f, 0.001142f, -0.014027f, -0.001727f, 0.001168f, -0.009410f, 0.004318f, 0.000170f, -0.010807f, 0.004884f, 0.006646f, -0.005802f, -0.006620f, -0.011914f, 0.006222f, 0.003554f, 0.011023f, 0.005399f, -0.001639f, 0.002101f, -0.001530f, 0.003299f, 0.003505f, 0.007561f, 0.001936f, -0.003359f, -0.000118f, 0.000844f, -0.000249f, 0.004298f, 0.001126f, -0.001548f, -0.002113f, 0.002063f, 0.001690f, + 0.003205f, 0.001627f, 0.001212f, 0.001950f, 0.001715f, 0.000730f, 0.001040f, -0.000207f, -0.000620f, 0.000695f, 0.000402f, 0.000827f, -0.000521f, 0.000976f, -0.000101f, -0.010197f, 0.004600f, -0.012720f, -0.003566f, -0.001767f, -0.006456f, 0.006148f, 0.014226f, -0.005812f, -0.001922f, 0.000688f, -0.005918f, 0.004112f, -0.000914f, -0.004775f, -0.008166f, -0.004310f, 0.012828f, 0.012430f, 0.006950f, 0.014437f, 0.008461f, 0.004608f, 0.013551f, -0.008417f, 0.002961f, 0.005827f, -0.000297f, 0.002363f, -0.004063f, 0.002626f, -0.018819f, 0.000425f, -0.001123f, 0.006810f, -0.004285f, -0.002363f, -0.001343f, 0.005224f, -0.005980f, -0.000934f, 0.001660f, 0.003688f, 0.003532f, -0.000973f, -0.006412f, 0.001236f, 0.002201f, 0.004631f, 0.003443f, 0.005382f, -0.006030f, -0.003532f, -0.001130f, -0.010611f, -0.001291f, 0.002858f, 0.009116f, 0.010246f, -0.001431f, 0.005665f, 0.004164f, -0.000729f, 0.003763f, 0.004555f, 0.006572f, -0.002612f, -0.000118f, -0.004912f, 0.000827f, -0.004227f, 0.002906f, -0.006276f, -0.005992f, 0.003617f, -0.000064f, -0.011754f, -0.001132f, -0.008792f, -0.002422f, -0.001215f, + -0.001516f, -0.011683f, 0.001107f, 0.004178f, -0.003480f, -0.003304f, 0.002003f, 0.001522f, 0.000831f, -0.002280f, -0.006319f, -0.000283f, -0.002777f, 0.002437f, 0.000072f, 0.000211f, -0.000718f, -0.002562f, -0.002904f, -0.003229f, 0.000222f, -0.001372f, 0.001411f, -0.002006f, 0.000803f, 0.000539f, -0.001878f, 0.000006f, -0.002089f, -0.000705f, 0.000116f, 0.000059f, -0.001857f, -0.000401f, -0.000317f, -0.012874f, -0.012175f, 0.004538f, -0.001451f, 0.010115f, 0.010129f, 0.000856f, 0.000215f, 0.019543f, -0.005311f, -0.000445f, 0.016369f, 0.000698f, -0.009518f, -0.013868f, 0.010041f, -0.004045f, 0.000025f, -0.008583f, 0.002627f, -0.006125f, 0.006804f, 0.030507f, -0.011175f, -0.008940f, -0.011041f, -0.011879f, 0.002128f, -0.009684f, -0.024072f, -0.000587f, 0.002359f, 0.000077f, -0.009604f, -0.001992f, 0.007752f, -0.009794f, -0.005842f, 0.014268f, 0.004636f, -0.003611f, -0.003454f, 0.009194f, -0.004610f, 0.006587f, 0.005943f, -0.012991f, -0.008689f, -0.007685f, 0.008447f, -0.006581f, -0.003988f, -0.003569f, -0.004396f, -0.000665f, -0.008839f, 0.000090f, -0.002717f, 0.002186f, -0.001284f, -0.019036f, + 0.008765f, -0.010637f, 0.008332f, 0.001589f, -0.015735f, 0.003198f, 0.010387f, 0.003246f, 0.017348f, -0.007354f, 0.000871f, 0.002055f, 0.003991f, 0.006257f, -0.006967f, 0.002624f, 0.002206f, -0.010115f, 0.013794f, 0.001016f, -0.002070f, 0.005913f, -0.002098f, 0.002659f, -0.002644f, -0.005279f, -0.000477f, -0.003394f, 0.004452f, -0.001174f, 0.000753f, 0.005429f, 0.001760f, 0.002072f, -0.001323f, 0.002956f, 0.000404f, -0.000789f, 0.001824f, 0.003946f, -0.002975f, 0.000259f, -0.003134f, 0.001880f, -0.001109f, 0.005697f, -0.008011f, 0.003733f, 0.004184f, -0.004429f, 0.002062f, -0.002217f, -0.017410f, 0.005329f, 0.016516f, 0.013613f, 0.015496f, 0.002641f, -0.003227f, -0.013281f, -0.006836f, -0.006272f, -0.004889f, 0.013613f, 0.019091f, 0.001309f, -0.001186f, 0.013481f, -0.021856f, 0.000371f, -0.001654f, -0.000456f, -0.007038f, -0.007450f, 0.008131f, 0.009818f, 0.000451f, -0.002261f, 0.004082f, -0.010748f, -0.007950f, 0.008111f, -0.008776f, 0.016983f, 0.015596f, 0.002510f, 0.009659f, 0.007963f, 0.001772f, -0.007061f, 0.002565f, -0.000460f, -0.011902f, 0.011604f, -0.000892f, 0.005381f, + 0.009653f, -0.011395f, -0.004244f, -0.013525f, -0.002891f, 0.002984f, 0.012758f, -0.013036f, -0.004993f, 0.009356f, -0.001840f, -0.008375f, 0.013983f, -0.011618f, -0.024059f, 0.003982f, -0.013485f, -0.006191f, 0.006740f, -0.005952f, 0.001319f, 0.001344f, -0.005757f, 0.010235f, -0.009309f, -0.010836f, -0.012746f, -0.001530f, -0.005443f, 0.000749f, 0.003581f, -0.007990f, 0.002239f, 0.002158f, 0.000735f, -0.003863f, 0.002241f, 0.001580f, 0.005550f, 0.000706f, -0.001582f, -0.003805f, -0.002229f, -0.001749f, -0.000813f, -0.001415f, -0.002143f, 0.000594f, 0.001206f, 0.001457f, 0.000644f, -0.000827f, -0.001683f, -0.000840f, 0.002838f, -0.002845f, -0.002705f, -0.000955f, 0.000077f, -0.000358f, 0.002209f, 0.002325f, 0.002431f, -0.001524f, 0.000957f, 0.000386f, 0.001056f, 0.005292f, -0.002631f, 0.000339f, -0.021910f, 0.004692f, 0.020616f, 0.001690f, 0.003212f, 0.006297f, 0.019312f, 0.002683f, -0.018608f, 0.020665f, 0.009051f, 0.007489f, 0.012547f, 0.010937f, 0.000076f, -0.003819f, 0.011836f, 0.009104f, 0.003090f, -0.008478f, 0.010295f, 0.004898f, 0.015246f, 0.017844f, 0.006765f, -0.004338f, + 0.000403f, -0.000077f, 0.007415f, 0.022642f, 0.013420f, -0.012480f, 0.021863f, 0.000934f, -0.002691f, 0.002949f, -0.016120f, 0.017978f, -0.002384f, 0.000386f, -0.002138f, 0.004633f, -0.002417f, 0.009317f, -0.012997f, 0.018370f, 0.015614f, -0.000515f, -0.002909f, -0.010108f, -0.019388f, -0.006584f, 0.007703f, -0.004443f, -0.007268f, 0.010361f, 0.012082f, -0.008104f, -0.007274f, -0.024799f, -0.008620f, -0.003001f, -0.001204f, -0.027757f, 0.014183f, 0.001636f, -0.016567f, -0.013547f, 0.004580f, -0.006384f, 0.001702f, -0.004035f, 0.000904f, -0.007245f, -0.001604f, -0.006453f, 0.004734f, 0.009378f, -0.002615f, 0.007156f, 0.000852f, -0.002858f, 0.008340f, 0.002985f, 0.000434f, 0.006946f, -0.000779f, -0.003046f, -0.004299f, -0.004783f, -0.005062f, -0.004743f, -0.005920f, -0.004257f, 0.000326f, -0.002312f, -0.005553f, -0.002669f, 0.000586f, -0.001104f, -0.002049f, 0.001281f, 0.002288f, 0.001178f, -0.002518f, -0.003545f, -0.004480f, 0.000573f, -0.004247f, 0.004037f, -0.002319f, -0.002377f, -0.002288f, 0.000171f, -0.001623f, 0.010265f, -0.012965f, -0.000104f, 0.000134f, 0.000481f, 0.020941f, 0.011520f, + -0.000182f, 0.026112f, 0.012061f, 0.023578f, 0.005623f, 0.007989f, 0.025151f, -0.009926f, -0.016763f, -0.010578f, 0.023517f, 0.005785f, -0.013267f, 0.017972f, -0.004909f, -0.010436f, 0.016033f, 0.038096f, -0.009821f, 0.001958f, 0.006081f, 0.007327f, -0.009897f, 0.001311f, 0.020953f, 0.002307f, 0.025765f, -0.005548f, 0.027668f, 0.019641f, 0.006630f, 0.016480f, 0.010394f, -0.009774f, 0.006882f, -0.002451f, -0.002462f, 0.002726f, 0.001881f, -0.001703f, 0.007301f, 0.005149f, 0.017878f, 0.012144f, -0.014942f, 0.005319f, 0.006732f, -0.010926f, 0.000660f, -0.025915f, -0.033723f, 0.013618f, -0.008638f, -0.021917f, -0.004727f, -0.011739f, 0.014528f, 0.003320f, -0.006847f, -0.016502f, 0.013033f, -0.011899f, 0.007952f, -0.013367f, 0.001988f, -0.005290f, 0.020437f, 0.003965f, -0.007975f, 0.008028f, -0.017424f, 0.016034f, 0.002588f, -0.014819f, 0.000687f, -0.001379f, -0.004299f, -0.001625f, 0.002138f, 0.004609f, -0.004358f, 0.007490f, -0.001619f, -0.002691f, -0.003318f, -0.002394f, -0.006452f, -0.000335f, -0.002291f, -0.006063f, -0.002310f, 0.002446f, -0.003878f, 0.004200f, 0.000619f, -0.002024f, + 0.001065f, -0.003953f, -0.000771f, -0.002695f, -0.000358f, 0.000083f, 0.000201f, 0.002270f, 0.002504f, 0.003010f, 0.000134f, 0.001639f, -0.000132f, -0.014757f, 0.001982f, 0.000598f, 0.003916f, -0.008991f, 0.010182f, 0.011248f, -0.001213f, -0.007478f, -0.025912f, -0.022191f, -0.017091f, 0.007995f, 0.002317f, 0.004161f, -0.021242f, 0.013499f, 0.009506f, 0.016792f, -0.018210f, 0.017318f, 0.013291f, -0.010421f, -0.008672f, -0.005244f, 0.017602f, 0.012183f, -0.007731f, 0.001787f, 0.026632f, 0.013538f, 0.006883f, 0.015476f, 0.010614f, 0.004199f, -0.008802f, 0.002046f, 0.001239f, -0.003699f, -0.009771f, 0.023702f, 0.011059f, -0.021954f, 0.014895f, 0.014856f, 0.014753f, 0.011610f, 0.003134f, -0.013659f, 0.000440f, -0.001767f, 0.020645f, 0.002804f, 0.009244f, 0.018792f, -0.003329f, -0.020374f, 0.004572f, 0.011079f, 0.020864f, -0.027703f, -0.015632f, 0.007688f, 0.000328f, 0.002641f, -0.016416f, -0.003986f, -0.015917f, -0.002136f, 0.007624f, -0.005166f, -0.008684f, -0.010523f, 0.004543f, -0.002543f, -0.005253f, -0.013030f, 0.000531f, -0.017474f, -0.000276f, -0.001613f, -0.008849f, -0.009805f, + 0.011330f, -0.003786f, -0.002758f, -0.005512f, -0.010766f, 0.003928f, 0.005271f, 0.003712f, 0.004139f, 0.003064f, -0.005922f, -0.003147f, -0.001764f, -0.001368f, -0.005562f, -0.010439f, -0.004622f, -0.000163f, -0.003521f, -0.000208f, -0.005592f, 0.000599f, -0.003008f, -0.002047f, -0.004048f, -0.004503f, -0.002362f, 0.004724f, -0.003276f, -0.001496f, 0.000753f, 0.001980f, 0.001279f, -0.002132f, 0.003566f, 0.005374f, 0.005369f, -0.001350f, 0.009844f, 0.001279f, -0.017226f, 0.017544f, 0.011277f, -0.005247f, 0.006977f, 0.010568f, -0.011644f, -0.003941f, 0.044900f, -0.001471f, 0.017520f, 0.012245f, -0.037452f, -0.019924f, -0.002093f, -0.001581f, -0.000420f, 0.021276f, 0.004797f, -0.010361f, 0.022013f, 0.013507f, -0.002730f, -0.003616f, 0.007043f, -0.003584f, -0.007747f, -0.016702f, -0.019763f, 0.010946f, -0.004311f, -0.009328f, -0.000937f, -0.030835f, -0.005700f, 0.002033f, 0.017048f, -0.020374f, -0.005856f, 0.002636f, 0.001408f, 0.004442f, 0.001560f, 0.021742f, -0.025295f, -0.008437f, 0.005683f, -0.000826f, -0.014906f, -0.003158f, 0.019776f, 0.016959f, 0.014721f, -0.004045f, -0.025180f, -0.011518f, + 0.009192f, -0.002876f, 0.017008f, -0.000991f, -0.000266f, -0.012584f, -0.007731f, 0.014796f, -0.018029f, 0.012392f, 0.009760f, -0.013050f, -0.006401f, -0.003035f, 0.002174f, -0.014050f, 0.006925f, 0.004866f, -0.006811f, -0.002151f, -0.019077f, 0.006949f, 0.014927f, 0.021205f, 0.001962f, 0.005703f, 0.010155f, 0.003118f, -0.016642f, 0.011509f, -0.003904f, 0.001913f, 0.000166f, -0.005364f, -0.005658f, -0.003081f, 0.007918f, 0.001413f, 0.006640f, -0.000687f, 0.001196f, -0.009287f, -0.003046f, -0.004254f, 0.007169f, -0.000679f, -0.002897f, 0.004906f, -0.003448f, 0.003854f, -0.002144f, 0.000666f, -0.007563f, 0.001847f, -0.001655f, -0.001556f, -0.004799f, 0.001816f, -0.000640f, -0.004301f, -0.007817f, -0.001734f, 0.000936f, -0.003153f, 0.003372f, -0.000782f, -0.033864f, -0.002231f, 0.004786f, 0.022737f, 0.002981f, -0.001057f, 0.013956f, -0.010138f, 0.030120f, -0.030062f, -0.002740f, -0.006532f, 0.005149f, -0.001579f, -0.002314f, 0.007578f, -0.005503f, -0.010294f, -0.006666f, -0.006129f, -0.017838f, -0.002954f, 0.012905f, -0.003044f, -0.007853f, 0.018902f, -0.000163f, 0.022759f, -0.022233f, -0.012918f, + 0.028434f, -0.002983f, -0.001591f, 0.001585f, -0.017684f, -0.002168f, -0.022110f, 0.006421f, -0.026566f, -0.000765f, 0.019980f, -0.006569f, 0.013660f, 0.017702f, 0.010474f, 0.013922f, -0.017922f, 0.017913f, 0.002136f, -0.047144f, -0.007774f, 0.006773f, -0.003707f, -0.005311f, -0.020039f, 0.015842f, -0.017058f, -0.003452f, -0.019363f, -0.018370f, -0.028183f, 0.025202f, 0.000325f, 0.029386f, -0.014519f, 0.022137f, 0.029580f, -0.019398f, 0.024133f, -0.029561f, -0.024383f, -0.026763f, -0.009136f, -0.018872f, 0.006194f, 0.008826f, -0.000876f, -0.003525f, 0.000008f, -0.021170f, 0.001818f, 0.000194f, 0.012369f, 0.004787f, 0.004948f, 0.008644f, 0.005082f, -0.004630f, -0.000009f, -0.008633f, -0.004948f, 0.000198f, 0.003696f, 0.000125f, 0.004157f, -0.002850f, 0.004457f, -0.001315f, 0.002450f, -0.013113f, 0.000990f, 0.004985f, 0.004001f, 0.007273f, -0.003941f, -0.005786f, -0.007477f, -0.000185f, -0.000450f, -0.006129f, -0.006466f, 0.000697f, -0.000870f, 0.001129f, 0.000256f, -0.001940f, 0.003696f, 0.010445f, -0.002333f, -0.002420f, -0.001099f, -0.002826f, 0.009600f, 0.000401f, 0.001359f, -0.003213f, + 0.005801f, -0.006046f, 0.022340f, 0.037306f, 0.005487f, -0.010088f, -0.020108f, 0.012445f, 0.034611f, 0.000198f, 0.010004f, 0.001651f, 0.013880f, 0.009361f, 0.010678f, 0.018659f, -0.022545f, -0.001939f, -0.008307f, 0.029481f, 0.022098f, -0.001225f, 0.034218f, 0.017878f, 0.003168f, -0.032229f, -0.015793f, -0.024614f, -0.011197f, 0.002327f, 0.009337f, -0.008934f, 0.001423f, 0.034521f, -0.006371f, -0.000135f, 0.001904f, 0.035472f, -0.021650f, -0.008941f, -0.008739f, -0.003669f, -0.021182f, 0.024377f, 0.001779f, 0.016291f, -0.025438f, 0.003307f, -0.002651f, -0.015408f, -0.005922f, -0.028401f, 0.008985f, 0.000352f, 0.006074f, -0.003652f, -0.001582f, -0.032946f, -0.011006f, 0.012610f, 0.020951f, -0.006232f, 0.005576f, 0.043359f, -0.002702f, 0.002331f, 0.008124f, 0.019438f, -0.018331f, 0.004039f, 0.022189f, -0.013284f, 0.016162f, 0.004508f, 0.016838f, -0.022426f, -0.011192f, 0.002818f, 0.005206f, 0.011062f, 0.012863f, 0.012006f, -0.008263f, 0.003336f, 0.007634f, 0.014567f, 0.023109f, 0.010461f, -0.010839f, -0.005296f, -0.008514f, 0.003511f, 0.004943f, 0.009823f, 0.009193f, 0.005303f, + 0.009705f, -0.010580f, -0.002014f, -0.010787f, 0.009177f, -0.012329f, 0.012343f, 0.008631f, -0.009145f, 0.005231f, -0.001068f, -0.005823f, 0.001416f, 0.001648f, -0.003266f, 0.002595f, 0.015294f, -0.000678f, 0.000008f, -0.009587f, 0.004837f, -0.000622f, -0.000275f, -0.008724f, 0.008760f, -0.007451f, 0.002750f, 0.003562f, 0.006941f, -0.000972f, -0.003292f, -0.020489f, -0.030886f, 0.008479f, -0.003195f, -0.031445f, 0.008712f, 0.003019f, 0.028514f, 0.024966f, -0.023148f, -0.028060f, 0.006385f, -0.021453f, -0.011103f, 0.000755f, 0.042414f, 0.000478f, -0.005258f, -0.037926f, -0.018815f, -0.003389f, -0.028080f, -0.042963f, 0.029509f, -0.011163f, -0.013415f, -0.002576f, 0.031993f, -0.010085f, 0.003601f, -0.006498f, -0.006288f, -0.018627f, -0.009767f, 0.003011f, -0.044643f, -0.028882f, -0.008162f, -0.016428f, -0.015046f, -0.005324f, -0.017451f, 0.015128f, 0.007078f, 0.004793f, -0.010599f, 0.007616f, -0.064494f, 0.059993f, 0.035368f, -0.006165f, -0.008089f, 0.033721f, 0.002145f, -0.020292f, -0.028684f, -0.003735f, -0.009996f, -0.012055f, -0.017216f, -0.017758f, 0.022212f, 0.020567f, -0.009242f, 0.045257f, + -0.025098f, -0.020753f, -0.018578f, 0.000061f, 0.014905f, -0.053126f, 0.015788f, -0.016829f, 0.027841f, -0.030119f, 0.013294f, -0.002767f, -0.010088f, 0.020733f, -0.038997f, 0.036713f, 0.002183f, -0.000516f, -0.008189f, 0.001062f, -0.000447f, -0.018576f, 0.003735f, -0.005149f, 0.009783f, 0.012353f, -0.011256f, 0.005648f, 0.007984f, 0.017346f, 0.000712f, -0.005664f, -0.000882f, -0.001550f, -0.006811f, 0.005086f, -0.002609f, -0.004155f, 0.004523f, -0.006884f, -0.002103f, 0.001689f, 0.005081f, 0.005961f, -0.013777f, -0.010604f, -0.009105f, 0.001580f, 0.005765f, 0.000009f, 0.003833f, 0.003245f, 0.009379f, 0.004862f, -0.007444f, 0.007009f, 0.001479f, 0.030806f, 0.002494f, 0.071766f, 0.023320f, -0.001417f, 0.003034f, -0.027719f, -0.036005f, 0.044829f, -0.013324f, 0.005107f, 0.059418f, -0.015472f, -0.002931f, -0.012701f, 0.046319f, 0.008939f, -0.019236f, 0.027395f, -0.010021f, 0.040682f, 0.021283f, 0.010141f, 0.005957f, -0.004499f, -0.015640f, -0.005074f, -0.004296f, -0.043602f, -0.011028f, -0.007029f, 0.024045f, -0.013512f, 0.004472f, 0.008011f, -0.031317f, -0.046551f, -0.001741f, 0.040166f, + -0.002766f, 0.035677f, -0.006266f, -0.049912f, -0.019405f, 0.002247f, 0.011221f, 0.008999f, -0.040671f, 0.000314f, -0.011708f, 0.029441f, -0.030206f, 0.037224f, 0.055009f, 0.035691f, -0.011309f, 0.006621f, 0.022135f, -0.007973f, 0.043079f, 0.049912f, 0.043959f, 0.014346f, 0.048210f, -0.001703f, -0.019561f, 0.006186f, -0.025360f, -0.031953f, 0.017305f, -0.013752f, 0.039377f, 0.020331f, 0.010368f, -0.013631f, -0.048714f, -0.044148f, 0.030828f, -0.019593f, -0.039440f, 0.026178f, 0.052338f, 0.031440f, -0.016926f, 0.024943f, 0.015266f, -0.005546f, -0.012505f, 0.014761f, -0.018755f, -0.005767f, -0.002112f, -0.012957f, 0.001590f, -0.002886f, 0.010684f, 0.006421f, -0.002619f, -0.017223f, 0.009425f, 0.008557f, 0.005872f, -0.003832f, 0.000442f, -0.016121f, 0.001174f, -0.000306f, 0.004033f, 0.003606f, 0.000297f, 0.009367f, -0.003440f, 0.013015f, 0.014758f, 0.003684f, 0.011962f, 0.000933f, -0.009679f, -0.022854f, 0.005013f, 0.000365f, 0.004762f, -0.016278f, -0.036211f, 0.021191f, 0.026542f, -0.000422f, 0.012999f, 0.008723f, 0.012865f, 0.010656f, 0.004919f, -0.002890f, 0.006298f, -0.007605f, + 0.013808f, -0.024622f, -0.068588f, -0.027532f, 0.037649f, 0.002171f, -0.011157f, -0.022976f, -0.000091f, 0.031636f, 0.040440f, 0.008610f, -0.024747f, -0.004373f, 0.032366f, -0.039109f, 0.003787f, -0.004873f, 0.028976f, 0.033001f, -0.026396f, 0.050070f, 0.009783f, 0.001994f, 0.070803f, 0.000348f, -0.022104f, 0.024766f, -0.011724f, 0.003532f, -0.015016f, 0.005254f, 0.047097f, 0.005421f, 0.059973f, 0.025269f, -0.052172f, -0.057220f, -0.012398f, 0.014882f, 0.032087f, -0.044368f, -0.015581f, -0.006413f, 0.054015f, 0.049370f, -0.042157f, -0.001630f, -0.025678f, 0.016301f, -0.008785f, 0.056448f, 0.000852f, -0.012395f, 0.037163f, -0.007523f, -0.043691f, -0.022090f, -0.007060f, 0.045529f, -0.040229f, 0.024454f, 0.070826f, 0.033513f, 0.047579f, -0.012670f, 0.019418f, -0.012763f, -0.029241f, -0.028185f, 0.014962f, -0.020023f, -0.001226f, -0.007160f, 0.013034f, -0.000281f, 0.028852f, -0.006400f, -0.013088f, -0.004641f, -0.005624f, 0.007122f, -0.004422f, 0.011121f, -0.019563f, 0.014617f, -0.012889f, -0.005882f, 0.004205f, -0.005106f, -0.005993f, 0.009269f, -0.008500f, -0.003200f, -0.002416f, -0.007054f, + -0.024068f, -0.013565f, -0.002193f, -0.002734f, -0.006994f, -0.009381f, -0.002066f, 0.007335f, -0.004053f, 0.004376f, -0.003560f, -0.000091f, 0.005672f, -0.018454f, 0.002240f, -0.002466f, -0.013872f, -0.032981f, 0.024488f, 0.036962f, 0.030154f, -0.052766f, -0.025717f, 0.033943f, 0.101280f, 0.006565f, 0.021690f, -0.029112f, 0.008782f, -0.001051f, -0.005173f, -0.027306f, 0.007978f, -0.009329f, 0.048384f, 0.039119f, -0.051417f, -0.022169f, 0.053502f, 0.027807f, 0.018958f, 0.006171f, 0.028712f, 0.034412f, 0.010396f, 0.020764f, 0.018292f, -0.024159f, 0.003200f, -0.023644f, -0.011243f, 0.007119f, -0.005170f, 0.004587f, -0.021241f, -0.018171f, 0.014016f, -0.003333f, 0.019493f, 0.016221f, -0.047586f, 0.035761f, 0.006609f, 0.028904f, -0.032262f, 0.018807f, 0.028202f, -0.021636f, -0.036784f, -0.036047f, -0.040693f, -0.039727f, -0.033800f, 0.012596f, 0.059142f, 0.016412f, 0.017931f, 0.028884f, 0.001550f, 0.000150f, -0.023664f, 0.040585f, -0.051020f, -0.100817f, 0.034350f, -0.022459f, 0.003991f, -0.085396f, 0.020848f, 0.028172f, 0.004269f, 0.018037f, 0.014076f, -0.011889f, -0.022456f, -0.033272f, + 0.010398f, 0.008522f, -0.026492f, 0.020005f, -0.010349f, -0.043115f, -0.024503f, 0.000504f, -0.008334f, 0.005686f, 0.002531f, 0.014125f, 0.005651f, 0.003429f, -0.001308f, 0.011452f, -0.006833f, -0.012999f, -0.025470f, -0.013918f, -0.016627f, -0.004511f, -0.009391f, 0.010358f, 0.013672f, 0.011706f, -0.020408f, -0.000502f, -0.008870f, 0.001286f, 0.010996f, 0.004659f, -0.018108f, -0.031451f, -0.003290f, 0.002561f, 0.002215f, -0.010427f, -0.005426f, -0.010944f, -0.002978f, -0.014661f, -0.017232f, 0.012054f, -0.016858f, 0.007984f, 0.002217f, -0.007183f, -0.003868f, 0.011630f, -0.009946f, 0.005244f, -0.011969f, 0.024131f, 0.017388f, 0.023048f, -0.032901f, -0.017112f, -0.004625f, 0.021068f, -0.043908f, 0.073053f, 0.034722f, -0.005987f, 0.039863f, 0.023927f, 0.037989f, -0.019997f, -0.025567f, -0.024867f, 0.046012f, 0.016319f, 0.008311f, 0.041473f, -0.036331f, -0.117653f, -0.007836f, 0.007833f, 0.013996f, -0.066238f, 0.051316f, 0.037292f, -0.071098f, -0.054754f, 0.001754f, 0.029278f, 0.002488f, 0.016623f, 0.037692f, -0.010017f, 0.023404f, -0.034366f, -0.039325f, -0.031373f, -0.040852f, -0.063619f, + 0.017723f, 0.006577f, -0.042701f, 0.056362f, 0.021915f, -0.013783f, -0.013437f, -0.033284f, -0.024923f, -0.057990f, -0.031496f, 0.020617f, 0.051454f, -0.019605f, 0.005162f, 0.021166f, -0.045636f, 0.032932f, 0.044590f, 0.006574f, -0.011427f, 0.038109f, 0.010437f, 0.004293f, -0.027318f, -0.031948f, -0.002343f, 0.056978f, -0.017522f, -0.052574f, -0.000924f, -0.066994f, -0.069790f, -0.072686f, -0.034858f, -0.038350f, -0.024495f, 0.031261f, -0.004392f, 0.028103f, -0.005809f, -0.009279f, -0.026304f, -0.007070f, -0.007754f, 0.015094f, -0.011563f, -0.016811f, -0.003331f, -0.006598f, 0.002463f, -0.024510f, 0.004631f, -0.011300f, -0.009823f, 0.012965f, -0.011754f, -0.003916f, 0.004232f, -0.008728f, 0.019080f, -0.012107f, 0.002844f, 0.030981f, 0.003785f, 0.018099f, -0.006940f, -0.010883f, 0.031388f, 0.004703f, -0.016658f, 0.000607f, 0.000297f, 0.002439f, 0.004435f, -0.008914f, 0.019594f, 0.001190f, -0.001509f, -0.009485f, -0.009872f, -0.025845f, -0.044406f, -0.023408f, -0.023801f, 0.028912f, 0.057165f, 0.021000f, -0.025889f, -0.055060f, 0.059140f, 0.031717f, -0.028323f, -0.015379f, -0.015041f, 0.003285f, + 0.014045f, -0.018200f, 0.030828f, 0.028508f, 0.001769f, -0.019172f, -0.017989f, -0.017105f, -0.002010f, 0.011100f, -0.008425f, -0.018921f, -0.044865f, 0.013909f, 0.039826f, -0.022726f, 0.035241f, 0.001102f, 0.023728f, -0.019611f, 0.026364f, 0.075877f, -0.028198f, 0.033144f, 0.066104f, 0.011489f, -0.011303f, -0.018235f, 0.019340f, 0.001485f, 0.033862f, -0.025659f, 0.090644f, -0.027911f, -0.060456f, 0.014016f, -0.027412f, 0.071616f, 0.023700f, -0.022294f, 0.004361f, -0.043076f, -0.058951f, 0.072729f, 0.008561f, -0.019463f, 0.072026f, -0.037080f, 0.009614f, -0.020900f, 0.041857f, -0.052963f, -0.059293f, -0.042403f, 0.013480f, 0.025715f, 0.047902f, 0.020459f, 0.050614f, 0.079032f, -0.009447f, 0.015998f, -0.010153f, 0.010095f, -0.002249f, 0.003307f, -0.057740f, 0.002294f, -0.079835f, -0.026616f, -0.015519f, 0.014317f, -0.002434f, 0.017679f, -0.006073f, -0.023822f, -0.024899f, -0.005628f, -0.016367f, -0.018325f, -0.031653f, 0.000133f, -0.003055f, 0.024401f, 0.010639f, -0.019528f, 0.018264f, 0.008557f, 0.015127f, 0.019736f, -0.025225f, 0.007295f, -0.010293f, -0.004682f, 0.025919f, -0.008380f, + 0.013083f, 0.017461f, -0.010002f, -0.027579f, -0.013821f, 0.010344f, -0.045351f, -0.014070f, 0.001389f, -0.006254f, -0.009963f, 0.020862f, -0.021221f, -0.023655f, 0.017119f, 0.027988f, -0.012338f, 0.023422f, 0.055652f, -0.008442f, 0.001847f, 0.066191f, 0.007457f, -0.036560f, -0.041959f, -0.037523f, 0.068422f, -0.046060f, 0.027300f, 0.031696f, -0.021662f, 0.006244f, -0.037236f, -0.008853f, 0.030700f, -0.027540f, 0.022247f, -0.009494f, -0.046837f, -0.103787f, -0.008962f, 0.092553f, 0.039246f, 0.009083f, -0.018071f, -0.028423f, -0.004719f, -0.037158f, 0.012280f, -0.052197f, 0.062348f, 0.004113f, 0.007915f, 0.004612f, -0.020448f, -0.062848f, -0.023393f, 0.049622f, -0.040429f, -0.010951f, -0.027817f, 0.021917f, -0.019780f, 0.068852f, -0.010669f, 0.013845f, -0.024751f, -0.065150f, 0.014866f, -0.049843f, -0.010593f, -0.004775f, -0.090062f, -0.076866f, -0.071694f, 0.023575f, -0.012758f, -0.039538f, -0.024868f, -0.025436f, -0.022492f, -0.035319f, -0.022961f, -0.006452f, -0.080751f, 0.022348f, 0.009712f, 0.029625f, -0.017420f, 0.070329f, -0.006777f, 0.013282f, -0.023906f, -0.010087f, 0.038742f, -0.075802f, + 0.032683f, 0.049132f, -0.050121f, -0.033176f, 0.003700f, 0.007696f, -0.012785f, -0.024699f, -0.039108f, -0.002735f, 0.001547f, -0.024237f, 0.021011f, -0.017943f, -0.031018f, -0.017760f, -0.012964f, 0.019794f, 0.000077f, 0.000425f, -0.000087f, 0.014730f, -0.038330f, -0.011400f, -0.004056f, -0.007807f, -0.002066f, 0.000441f, -0.046067f, 0.001264f, -0.014490f, -0.012531f, -0.003383f, -0.021124f, 0.006368f, -0.006141f, 0.004839f, 0.000664f, -0.003432f, -0.005386f, -0.011024f, -0.002097f, -0.008940f, -0.002405f, 0.007149f, -0.010756f, -0.016482f, 0.000361f, -0.003500f, -0.003982f, -0.010076f, -0.019107f, -0.012266f, -0.005022f, -0.001787f, -0.013609f, -0.015877f, 0.028129f, 0.017019f, 0.034038f, -0.012825f, -0.070750f, 0.020410f, 0.001019f, 0.117485f, 0.120244f, 0.014547f, 0.001189f, 0.028331f, 0.014213f, 0.030264f, 0.051897f, 0.019346f, 0.053888f, 0.081423f, -0.020258f, 0.010701f, -0.066857f, -0.009461f, 0.008778f, -0.008625f, -0.019877f, -0.040529f, -0.034081f, 0.018916f, 0.018802f, -0.088841f, 0.063447f, 0.017162f, 0.089528f, -0.005426f, -0.017672f, 0.029292f, -0.006146f, 0.094239f, 0.024047f, + -0.004796f, 0.018178f, 0.018670f, -0.025210f, -0.057502f, -0.045047f, -0.022587f, 0.070400f, 0.000970f, 0.077376f, 0.009535f, 0.075651f, -0.021769f, -0.103925f, -0.038876f, -0.030121f, 0.053872f, 0.006625f, -0.050496f, -0.073146f, -0.051108f, -0.010130f, 0.063261f, -0.054953f, -0.047876f, -0.031506f, 0.056464f, -0.027739f, -0.016410f, -0.072820f, -0.072487f, 0.022947f, 0.012282f, 0.097724f, 0.025135f, -0.010264f, -0.026395f, 0.030698f, 0.031734f, 0.104333f, 0.001918f, -0.033708f, -0.045133f, -0.002831f, -0.004627f, 0.002455f, 0.016241f, 0.015083f, -0.024264f, -0.005419f, 0.007890f, 0.021803f, -0.023301f, -0.018873f, 0.029320f, 0.043215f, 0.020079f, 0.013267f, 0.016798f, -0.018147f, -0.007732f, -0.011413f, -0.002361f, -0.002399f, 0.009494f, 0.000160f, 0.056336f, 0.011850f, -0.002401f, -0.017185f, -0.029561f, 0.028289f, 0.045721f, -0.016524f, 0.000757f, 0.001811f, 0.005724f, 0.026200f, 0.011415f, 0.019469f, 0.019863f, 0.005076f, 0.015462f, 0.005096f, -0.000972f, 0.005117f, -0.013919f, -0.004696f, 0.003416f, -0.008387f, 0.005588f, 0.001554f, 0.071902f, 0.027316f, -0.034946f, 0.067771f, + -0.004207f, -0.133103f, -0.040536f, 0.083970f, 0.093273f, -0.065612f, -0.065705f, -0.066778f, 0.037278f, 0.057137f, 0.114159f, 0.034577f, 0.014740f, -0.065083f, -0.006607f, -0.003990f, 0.025681f, 0.057165f, 0.041498f, 0.003392f, -0.069052f, -0.134124f, -0.035556f, -0.067838f, 0.100949f, 0.106932f, 0.186550f, -0.055832f, -0.179413f, -0.039055f, -0.061638f, 0.139484f, 0.047436f, 0.141469f, 0.036440f, -0.047224f, -0.136692f, -0.092385f, 0.004985f, 0.017066f, 0.153272f, 0.062307f, -0.005318f, -0.126089f, -0.220039f, -0.057480f, 0.004716f, 0.101722f, 0.231548f, 0.050524f, 0.069832f, -0.149144f, -0.228601f, 0.009940f, 0.052523f, 0.182119f, 0.107056f, 0.076570f, -0.042219f, -0.147243f, -0.120476f, -0.001093f, 0.034030f, -0.003080f, 0.091946f, -0.075794f, -0.070973f, -0.017501f, -0.162401f, 0.025489f, 0.007862f, 0.044443f, -0.032580f, -0.065548f, -0.035256f, -0.027628f, -0.074241f, 0.017231f, 0.021828f, -0.023608f, -0.003635f, -0.069581f, 0.010063f, 0.020416f, 0.023101f, 0.032714f, 0.010506f, -0.035484f, 0.012677f, -0.011027f, -0.006004f, 0.005535f, 0.056838f, 0.010067f, -0.001594f, -0.014128f, + -0.042884f, -0.008082f, -0.016980f, 0.017041f, -0.007566f, 0.018878f, 0.012281f, -0.039038f, -0.089140f, -0.043604f, -0.065388f, 0.054148f, 0.054410f, 0.064726f, 0.037222f, -0.082893f, -0.074807f, -0.115771f, -0.027673f, 0.094844f, 0.104791f, 0.102283f, 0.005455f, -0.111626f, -0.083529f, -0.064773f, -0.000855f, 0.168011f, 0.116649f, 0.048065f, -0.089200f, -0.103677f, -0.077674f, 0.039219f, 0.040410f, 0.058766f, 0.031082f, -0.076333f, 0.101439f, -0.002192f, 0.014723f, -0.042696f, -0.096621f, 0.057565f, -0.097298f, 0.103076f, 0.014786f, 0.009220f, 0.021508f, -0.061941f, 0.061198f, 0.006044f, 0.042449f, -0.059393f, 0.020699f, 0.000537f, 0.073500f, -0.029357f, 0.017822f, 0.049242f, -0.056319f, -0.032282f, 0.005042f, -0.051058f, 0.082506f, -0.018564f, -0.034588f, 0.074580f, 0.085262f, -0.022883f, -0.063851f, -0.015590f, -0.056341f, -0.010259f, 0.034056f, -0.005327f, -0.070069f, 0.008380f, 0.036965f, -0.024423f, 0.041750f, -0.034930f, 0.015801f, 0.045370f, -0.018687f, 0.029935f, -0.079766f, -0.079657f, 0.080597f, 0.045311f, 0.124677f, -0.005050f, -0.032379f, 0.106406f, -0.061277f, -0.053884f, + 0.036632f, 0.036015f, 0.059615f, -0.054594f, -0.026809f, 0.016344f, -0.012336f, 0.060360f, -0.048848f, -0.149003f, 0.038061f, 0.083605f, 0.000370f, -0.068936f, 0.012333f, 0.042654f, -0.017428f, -0.017880f, -0.056431f, -0.017772f, -0.046723f, 0.046444f, 0.010479f, -0.032253f, -0.009574f, 0.055429f, -0.039983f, -0.013732f, -0.036220f, -0.003949f, 0.025979f, -0.038705f, 0.019970f, 0.057915f, 0.021302f, -0.000593f, -0.017276f, -0.003023f, -0.022190f, -0.026691f, 0.042794f, -0.018015f, 0.018978f, -0.005914f, -0.023127f, 0.000029f, 0.003893f, 0.004334f, 0.015047f, 0.019427f, -0.034175f, -0.009963f, 0.015724f, 0.014082f, 0.032218f, -0.004208f, -0.029512f, 0.011495f, -0.034231f, 0.016113f, -0.031269f, -0.016931f, -0.000312f, -0.006417f, -0.021253f, 0.046980f, -0.021325f, 0.009759f, 0.019569f, 0.004519f, 0.015158f, 0.031207f, -0.001440f, -0.005442f, 0.000656f, -0.002994f, -0.039264f, -0.024745f, 0.151473f, 0.040988f, 0.042422f, -0.128358f, -0.031541f, -0.100629f, -0.084234f, 0.076068f, 0.080874f, 0.158861f, 0.074041f, -0.021521f, -0.030182f, -0.018715f, 0.050869f, 0.034810f, 0.001720f, 0.077207f, + 0.015748f, -0.030952f, -0.035902f, -0.029583f, 0.056274f, 0.000001f, 0.049305f, 0.022679f, 0.030032f, 0.007322f, -0.011547f, 0.005663f, 0.000344f, 0.007305f, -0.011998f, -0.003216f, 0.016602f, 0.013410f, 0.104937f, 0.083933f, 0.069271f, -0.006017f, 0.019416f, -0.042482f, -0.006368f, -0.026422f, -0.047214f, -0.049911f, 0.015732f, 0.027230f, 0.040299f, 0.048597f, 0.040729f, -0.025077f, -0.063350f, 0.097389f, -0.068911f, -0.030432f, -0.017170f, 0.033450f, 0.004990f, 0.047706f, 0.050304f, 0.043561f, -0.057980f, -0.020950f, 0.008570f, -0.022968f, -0.093895f, 0.063264f, -0.021594f, -0.016964f, 0.036283f, 0.073420f, 0.083799f, 0.060794f, 0.059989f, 0.051410f, -0.054199f, 0.007198f, -0.013489f, -0.016951f, 0.031770f, 0.024874f, 0.033812f, 0.016242f, -0.014724f, -0.027231f, -0.039029f, -0.042697f, -0.085352f, -0.034235f, 0.013125f, -0.004843f, 0.052758f, -0.000029f, -0.023419f, -0.007916f, -0.033737f, 0.013033f, 0.004398f, -0.002463f, -0.000047f, 0.022283f, 0.049433f, -0.005952f, 0.002831f, 0.027085f, 0.002346f, 0.000385f, -0.009445f, -0.003135f, -0.011289f, -0.011151f, 0.003298f, -0.023281f, + 0.010755f, 0.013446f, -0.016839f, -0.025344f, 0.007379f, 0.005208f, -0.008895f, 0.025033f, 0.033822f, -0.004473f, 0.005383f, -0.010794f, -0.033468f, -0.014158f, 0.005895f, -0.195214f, -0.097393f, -0.134050f, 0.096789f, 0.021470f, 0.277208f, 0.286641f, 0.285491f, 0.326370f, 0.321279f, 0.230931f, 0.143617f, 0.180129f, 0.079588f, 0.016832f, -0.151982f, -0.132192f, -0.331897f, -0.290116f, -0.260575f, -0.153436f, -0.193754f, -0.147536f, -0.012167f, -0.047104f, -0.019087f, -0.023220f, 0.001138f, -0.000306f, 0.008746f, 0.037905f, 0.040580f, 0.038856f, 0.114364f, 0.117488f, 0.124403f, 0.088977f, 0.248887f, 0.065151f, 0.104589f, 0.174341f, 0.194222f, 0.072284f, 0.195463f, 0.235359f, 0.185458f, 0.161162f, 0.163727f, 0.018095f, 0.098001f, 0.198096f, 0.195595f, 0.126177f, 0.164132f, 0.143638f, -0.002025f, -0.053092f, -0.037502f, -0.097838f, -0.120879f, -0.015487f, -0.135846f, -0.207020f, -0.161456f, -0.192822f, -0.285316f, -0.130499f, -0.192948f, -0.213721f, -0.302823f, -0.246130f, -0.279274f, -0.318910f, -0.212600f, -0.360605f, -0.426734f, -0.428150f, -0.233116f, -0.289712f, -0.365252f, -0.071763f, + -0.162733f, -0.076302f, -0.041087f, 0.119678f, 0.053131f, 0.175587f, 0.093103f, 0.165861f, 0.157754f, 0.103820f, 0.081700f, 0.128587f, 0.238035f, 0.242331f, 0.243035f, 0.248359f, 0.257924f, 0.313570f, 0.279984f, 0.232555f, 0.285835f, 0.322663f, 0.257734f, 0.193957f, 0.231322f, 0.194732f, 0.125610f, 0.158829f, 0.107224f, 0.053339f, 0.022726f, 0.049033f, 0.014115f, -0.020148f, -0.014161f, -0.025964f, -0.062343f, -0.094567f, -0.094231f, -0.102487f, -0.087836f, -0.109565f, -0.172517f, -0.154967f, -0.178290f, -0.200858f, -0.234201f, -0.233388f, -0.193555f, -0.194227f, -0.159448f, -0.101254f, -0.114372f, -0.077880f, -0.055108f, 0.005580f, -0.001480f, 0.000028f, 0.008599f, 0.034308f, 0.039283f, 0.012924f, 0.030750f, 0.049999f, 0.039235f, 0.017040f, 0.019409f, 0.036693f, 0.020619f, 0.008226f, 0.013541f, 0.019868f, 0.016744f, 0.009773f, 0.008455f, 0.006378f, 0.002691f, 0.000657f} + } +}; +const float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS][2870]={ {-0.000055f, -0.000016f, -0.000030f, -0.000018f, -0.000046f, -0.000008f, -0.000074f, -0.000017f, -0.000239f, 0.000164f, -0.000016f, 0.000165f, -0.000036f, 0.000073f, 0.000441f, -0.000049f, -0.000525f, -0.000519f, -0.000172f, -0.000319f, 0.000042f, -0.000258f, -0.000703f, 0.000200f, -0.000177f, -0.000125f, 0.000186f, 0.000060f, -0.000237f, -0.000368f, -0.000480f, 0.000065f, -0.000289f, -0.000175f, 0.000101f, -0.000504f, 0.000450f, 0.000472f, -0.000271f, -0.000032f, -0.000174f, -0.000470f, 0.000042f, -0.000423f, -0.000335f, 0.000326f, -0.000217f, 0.000489f, 0.002039f, -0.000885f, 0.000905f, -0.000382f, 0.000324f, -0.000012f, 0.000474f, -0.000204f, 0.000119f, 0.000203f, 0.000244f, 0.000260f, 0.000450f, -0.000109f, 0.000054f, 0.000822f, 0.000616f, -0.001615f, 0.000323f, -0.000206f, 0.000083f, -0.000549f, 0.000365f, -0.000692f, 0.000693f, 0.000575f, 0.000285f, -0.000088f, -0.000216f, -0.000253f, 0.000493f, 0.000452f, -0.000200f, 0.000104f, 0.000849f, -0.000315f, -0.000015f, -0.000287f, 0.000102f, 0.000132f, -0.000021f, -0.000238f, 0.000400f, 0.000062f, -0.000120f, 0.000303f, 0.008189f, -0.000591f, + 0.001141f, -0.000020f, 0.000362f, 0.000158f, 0.000276f, 0.000188f, 0.000784f, -0.000451f, 0.000331f, -0.000160f, 0.000136f, 0.000431f, 0.000671f, 0.000268f, 0.000130f, -0.000322f, 0.000611f, -0.000442f, 0.000233f, -0.000205f, -0.000644f, 0.000067f, 0.000224f, 0.000023f, -0.000201f, 0.000057f, -0.000225f, 0.000423f, -0.000869f, 0.000203f, -0.000201f, 0.000230f, -0.000009f, -0.001218f, -0.000423f, 0.000124f, 0.000193f, 0.000141f, -0.000211f, -0.000275f, -0.000238f, 0.000173f, 0.000472f, -0.000195f, 0.000209f, 0.004940f, -0.005836f, 0.001168f, -0.001401f, 0.000771f, -0.000907f, 0.000713f, -0.001241f, -0.000370f, -0.000765f, -0.000137f, -0.000637f, 0.000059f, 0.001149f, 0.001671f, 0.000701f, 0.000375f, 0.000033f, 0.000528f, 0.001196f, 0.000871f, -0.000541f, -0.000650f, -0.000870f, -0.000411f, -0.000501f, 0.000051f, -0.000079f, -0.000072f, 0.000027f, 0.000259f, -0.000403f, 0.000521f, -0.000531f, -0.000706f, 0.000263f, -0.000005f, 0.000055f, 0.000155f, -0.000491f, -0.000555f, 0.000173f, -0.000335f, -0.000457f, -0.000081f, 0.000067f, 0.000365f, -0.011317f, 0.002256f, -0.000570f, 0.000287f, + 0.000244f, -0.000948f, -0.000427f, 0.000900f, -0.000147f, 0.000077f, 0.001010f, 0.000327f, -0.000386f, -0.000704f, 0.000704f, 0.000061f, -0.000854f, -0.001223f, -0.001770f, 0.000571f, -0.000787f, 0.000182f, -0.000255f, 0.000331f, -0.000181f, 0.000125f, -0.000919f, -0.000907f, -0.000566f, -0.000242f, -0.000572f, 0.000171f, -0.000277f, 0.000323f, 0.001062f, 0.000183f, 0.000185f, 0.000703f, 0.000194f, 0.000163f, -0.000023f, -0.000138f, -0.000701f, -0.000166f, 0.000163f, -0.000129f, -0.000033f, -0.013529f, 0.005063f, -0.001263f, 0.001626f, -0.000794f, 0.001173f, -0.000647f, -0.000183f, -0.001153f, 0.000888f, -0.001365f, 0.000910f, -0.000233f, 0.001273f, -0.001728f, 0.000450f, 0.001612f, 0.000476f, -0.001357f, -0.000476f, -0.000816f, -0.000335f, 0.000516f, 0.000268f, 0.000382f, -0.000208f, -0.000461f, -0.000649f, -0.000637f, -0.000048f, -0.000731f, -0.000122f, -0.000679f, -0.000475f, -0.001889f, -0.000522f, -0.000264f, 0.000111f, 0.000045f, 0.000664f, 0.000282f, 0.000654f, -0.000066f, 0.000760f, 0.000179f, 0.000076f, 0.000188f, 0.001689f, 0.005892f, -0.001625f, 0.002614f, -0.001586f, 0.000684f, + -0.001711f, 0.001347f, -0.000123f, 0.001468f, -0.000117f, -0.000147f, 0.001443f, -0.000238f, -0.000200f, 0.001262f, -0.000616f, -0.001158f, -0.001846f, 0.001640f, -0.000133f, 0.001122f, 0.000131f, 0.000797f, 0.000386f, -0.001071f, 0.000456f, 0.000435f, -0.000072f, 0.000553f, 0.000845f, -0.001065f, 0.000141f, -0.000032f, -0.000090f, -0.000611f, -0.000275f, -0.000598f, 0.000163f, -0.000124f, 0.000462f, 0.001381f, 0.000054f, 0.000700f, -0.000124f, 0.000135f, -0.000148f, 0.000212f, 0.000559f, -0.000254f, 0.017789f, -0.004387f, 0.001691f, -0.000849f, 0.001497f, -0.000654f, 0.001149f, -0.000639f, 0.000395f, -0.001731f, 0.000804f, -0.001653f, 0.001266f, -0.000505f, 0.000374f, -0.000481f, 0.001783f, 0.000245f, 0.000449f, -0.000855f, 0.001165f, -0.000104f, -0.000537f, 0.000992f, -0.000768f, -0.001193f, 0.000031f, -0.000372f, 0.000570f, -0.000005f, -0.000178f, -0.000389f, 0.000174f, -0.000039f, 0.000225f, -0.000821f, 0.000194f, -0.000363f, 0.001282f, -0.000239f, 0.000614f, 0.000116f, 0.000516f, 0.000960f, -0.000659f, 0.000052f, 0.000223f, -0.000327f, 0.000754f, -0.000155f, 0.001499f, -0.009227f, + 0.003644f, -0.002847f, 0.001680f, -0.001418f, 0.000488f, -0.001869f, 0.001214f, -0.000747f, 0.001696f, -0.000189f, 0.000740f, -0.001491f, -0.000629f, -0.000097f, -0.000542f, -0.000506f, 0.001956f, -0.001442f, 0.000249f, 0.000911f, -0.001787f, 0.000460f, 0.000632f, -0.000448f, 0.000615f, 0.000206f, 0.000354f, -0.001138f, -0.000100f, -0.000365f, 0.000702f, -0.000567f, 0.000384f, -0.001343f, -0.000271f, 0.000983f, 0.000475f, 0.000312f, -0.000342f, -0.000202f, -0.001025f, -0.001090f, 0.000593f, 0.000221f, -0.000048f, -0.000160f, -0.000095f, 0.000097f, 0.000096f, -0.000228f, -0.000223f, 0.000135f, 0.000143f, -0.000374f, -0.014916f, 0.004886f, -0.002641f, 0.000678f, -0.000246f, 0.000834f, -0.001117f, 0.001208f, -0.000493f, -0.000420f, -0.000146f, 0.000874f, -0.000470f, -0.000698f, 0.000512f, 0.001681f, -0.000230f, 0.000071f, -0.002815f, 0.000243f, 0.000047f, 0.001374f, -0.000445f, -0.000211f, -0.002152f, -0.000737f, 0.000028f, 0.000041f, 0.000750f, 0.001029f, -0.001626f, -0.001492f, 0.000966f, 0.000243f, -0.001676f, -0.001287f, 0.000632f, 0.000365f, -0.000098f, -0.000049f, -0.000643f, 0.000659f, + -0.000202f, 0.000241f, 0.000087f, -0.000879f, -0.000371f, 0.000470f, -0.001357f, -0.000679f, -0.000271f, 0.000287f, -0.000272f, 0.000024f, -0.000678f, -0.000059f, -0.014890f, 0.006590f, -0.003641f, 0.002766f, -0.002540f, 0.001260f, -0.002891f, 0.000667f, -0.001885f, 0.002976f, -0.001506f, 0.001050f, -0.000184f, 0.000022f, -0.001364f, -0.000389f, -0.000564f, 0.002694f, -0.000512f, 0.001375f, 0.002183f, 0.001253f, 0.000323f, -0.000291f, 0.000524f, -0.000477f, 0.001222f, 0.001181f, 0.000168f, -0.000594f, 0.000208f, 0.000226f, -0.000814f, -0.000366f, 0.000618f, 0.000888f, -0.000670f, -0.000656f, -0.000679f, 0.000045f, -0.000282f, 0.000380f, -0.000655f, 0.000468f, -0.001030f, 0.000304f, -0.000565f, -0.000038f, 0.000105f, -0.000409f, -0.000560f, -0.000712f, -0.000668f, -0.000886f, 0.000111f, -0.000808f, 0.005531f, 0.005748f, -0.002123f, 0.001915f, -0.002331f, 0.000361f, 0.000710f, 0.000064f, -0.000931f, 0.001074f, 0.000276f, 0.002279f, 0.001190f, 0.002573f, -0.000391f, 0.001519f, -0.000410f, 0.000972f, 0.001356f, -0.000179f, -0.001874f, 0.001793f, -0.000193f, 0.000756f, -0.000417f, 0.000001f, + 0.000259f, 0.002192f, 0.000329f, -0.001185f, -0.000400f, 0.000292f, -0.000652f, 0.001654f, 0.000708f, -0.000254f, -0.000426f, -0.000931f, 0.000739f, -0.000912f, 0.000943f, 0.000990f, -0.000725f, 0.000570f, 0.000515f, 0.000267f, -0.000070f, 0.001606f, 0.000994f, 0.001177f, -0.000042f, 0.000147f, 0.000529f, -0.000337f, -0.000129f, -0.000105f, -0.000343f, -0.000004f, 0.000088f, 0.000151f, -0.000282f, -0.000660f, -0.000691f, 0.016813f, -0.006003f, 0.002085f, -0.002806f, 0.001914f, -0.001848f, 0.002460f, -0.000844f, 0.000115f, -0.001845f, 0.003693f, -0.000531f, 0.003328f, 0.000208f, 0.000570f, -0.002230f, 0.000796f, 0.003346f, -0.001029f, -0.002816f, 0.000416f, 0.000120f, 0.001306f, -0.002030f, 0.001664f, -0.000016f, 0.000146f, -0.000176f, -0.001960f, -0.000575f, 0.000327f, -0.002355f, 0.000391f, 0.000960f, 0.000788f, -0.000661f, -0.000187f, -0.000087f, 0.001105f, 0.000334f, -0.000188f, -0.000482f, 0.000861f, 0.000595f, 0.002138f, 0.000553f, -0.000318f, 0.001195f, 0.000479f, -0.000122f, 0.000395f, 0.000907f, 0.000598f, 0.000126f, 0.000144f, -0.000693f, 0.000150f, -0.000067f, 0.000886f, + -0.000091f, 0.000351f, -0.000096f, 0.000315f, 0.005629f, -0.008132f, 0.004872f, -0.003616f, 0.001521f, 0.000550f, -0.000369f, -0.000307f, 0.000967f, -0.002047f, -0.001302f, -0.001060f, -0.000826f, -0.002799f, 0.001418f, -0.002600f, -0.000105f, -0.002080f, 0.000764f, -0.001566f, -0.001234f, -0.000623f, 0.002365f, 0.000332f, 0.002301f, 0.001209f, 0.001577f, 0.002278f, 0.000118f, -0.000289f, -0.000349f, 0.000642f, 0.001750f, -0.000146f, -0.000128f, -0.001169f, 0.000888f, -0.000142f, -0.000699f, 0.000649f, 0.000540f, 0.001828f, 0.000746f, 0.000862f, -0.001295f, -0.000602f, -0.000076f, -0.000240f, 0.000891f, -0.002616f, 0.000565f, -0.000643f, -0.000442f, -0.000811f, -0.000919f, -0.000310f, -0.000909f, 0.000370f, -0.000636f, -0.000104f, -0.001381f, -0.001355f, -0.000001f, -0.017258f, -0.003771f, 0.000791f, -0.003274f, -0.001353f, 0.000139f, -0.000104f, -0.002790f, 0.000798f, -0.002779f, 0.000080f, 0.002235f, -0.000418f, -0.000372f, 0.001226f, 0.000804f, 0.001248f, 0.000073f, 0.001510f, -0.000838f, 0.000427f, 0.001753f, -0.000121f, -0.000110f, -0.001151f, 0.001669f, -0.001295f, -0.000710f, 0.000435f, + 0.000676f, 0.001272f, 0.003932f, -0.001079f, -0.000639f, -0.001697f, 0.000097f, -0.001251f, 0.000299f, -0.000501f, -0.001849f, -0.000118f, 0.002368f, 0.000664f, -0.001594f, -0.000796f, 0.000787f, -0.000970f, -0.001208f, 0.000223f, -0.000569f, 0.000136f, 0.000252f, 0.001487f, 0.000215f, 0.000728f, 0.000394f, -0.001258f, -0.000640f, 0.000783f, 0.000739f, -0.000509f, 0.000442f, -0.000103f, -0.021154f, 0.017460f, -0.006103f, 0.005188f, -0.003822f, 0.002922f, -0.001109f, 0.001861f, -0.002028f, 0.001249f, 0.001457f, 0.002107f, -0.001371f, 0.002551f, 0.001262f, 0.004340f, -0.000679f, 0.000366f, -0.002297f, 0.000583f, -0.000805f, -0.001435f, -0.001779f, -0.002047f, -0.001886f, 0.002814f, -0.000127f, 0.003379f, 0.000877f, 0.000620f, -0.000057f, 0.000431f, -0.001491f, 0.000240f, -0.000544f, 0.000704f, 0.002002f, 0.000359f, 0.000660f, 0.000119f, 0.000209f, -0.001521f, -0.000833f, -0.000058f, -0.000116f, 0.000204f, -0.000464f, -0.001401f, 0.000034f, 0.001505f, -0.000484f, 0.000444f, 0.000438f, -0.001242f, 0.000854f, 0.000368f, 0.000470f, -0.000255f, 0.000142f, -0.000135f, -0.000388f, 0.000111f, + 0.001352f, 0.012327f, -0.001896f, -0.003977f, -0.001382f, -0.000838f, -0.000639f, -0.003504f, -0.001840f, 0.000977f, 0.000601f, 0.001000f, 0.001247f, -0.002355f, 0.000952f, -0.000462f, 0.000847f, 0.003777f, -0.003817f, 0.001320f, 0.001324f, 0.001028f, -0.000983f, -0.002209f, 0.001725f, 0.000514f, 0.001236f, 0.002328f, 0.000007f, 0.003209f, 0.000283f, 0.001492f, 0.000130f, 0.001013f, -0.000876f, 0.001214f, 0.000880f, 0.001159f, -0.000441f, 0.000386f, -0.000086f, 0.001486f, 0.001837f, -0.002713f, 0.003667f, 0.000313f, 0.001029f, 0.000163f, 0.000644f, 0.000713f, -0.000766f, 0.002198f, 0.001192f, 0.000088f, 0.002017f, 0.000859f, -0.001099f, -0.000089f, -0.000733f, -0.000794f, -0.000594f, 0.000369f, -0.000149f, 0.000128f, -0.000041f, -0.002240f, 0.001163f, -0.000885f, 0.000325f, -0.000298f, -0.000123f, -0.000552f, -0.000311f, 0.009770f, 0.000855f, 0.001991f, -0.002527f, -0.000478f, -0.006278f, 0.001502f, -0.000300f, -0.004266f, 0.003579f, -0.001974f, 0.000128f, 0.002627f, 0.001182f, 0.001973f, -0.001509f, 0.000872f, -0.001979f, 0.000040f, -0.001693f, 0.000635f, -0.002573f, 0.003691f, + 0.002663f, 0.002180f, 0.002540f, 0.000567f, -0.000839f, -0.001593f, 0.000719f, 0.002028f, 0.000006f, 0.001383f, -0.000997f, 0.000283f, 0.001343f, 0.000950f, 0.001209f, 0.000088f, 0.000435f, -0.000150f, -0.000860f, 0.000859f, -0.000595f, 0.000403f, 0.000354f, -0.000879f, 0.001202f, -0.001625f, 0.001457f, -0.000761f, 0.001031f, 0.001572f, -0.001914f, 0.000194f, 0.000225f, -0.000781f, -0.001507f, 0.001069f, -0.002446f, -0.001891f, 0.001178f, 0.000497f, 0.000551f, 0.000476f, 0.001528f, 0.001468f, -0.000528f, 0.000207f, 0.000894f, -0.000352f, -0.000003f, 0.015411f, -0.012811f, 0.004347f, -0.003188f, 0.001129f, 0.004004f, 0.003256f, -0.002147f, 0.003904f, 0.002199f, 0.002359f, -0.001615f, 0.001099f, -0.000824f, 0.004635f, 0.001289f, 0.001311f, 0.001795f, 0.001963f, 0.001244f, 0.001342f, -0.003806f, 0.000612f, -0.006880f, -0.002393f, -0.000638f, -0.003941f, 0.000991f, 0.002115f, -0.001486f, -0.002137f, -0.002514f, -0.002414f, -0.001288f, 0.001388f, 0.001095f, -0.003504f, -0.004054f, -0.000311f, -0.002068f, 0.001107f, 0.000901f, 0.000387f, -0.000290f, 0.001919f, -0.001007f, 0.000098f, + -0.000267f, -0.000859f, -0.002604f, 0.002019f, 0.003427f, -0.000463f, -0.000429f, 0.001612f, -0.002415f, 0.002933f, 0.000757f, -0.001486f, -0.000055f, -0.001380f, -0.000581f, -0.000349f, -0.000987f, -0.000264f, -0.000667f, -0.002021f, 0.000527f, 0.000726f, 0.000683f, 0.000720f, 0.000232f, -0.023850f, 0.002367f, -0.002129f, 0.000875f, 0.002430f, 0.001744f, 0.004864f, -0.002001f, -0.000170f, 0.000391f, 0.005823f, 0.002021f, -0.004564f, -0.002983f, 0.002568f, 0.003443f, -0.000866f, -0.001304f, -0.000097f, 0.001587f, 0.003559f, 0.003615f, -0.000054f, -0.006480f, -0.001876f, -0.000672f, -0.000780f, 0.003754f, -0.001729f, 0.002190f, 0.000213f, -0.000416f, -0.003363f, 0.000261f, 0.002673f, -0.004304f, -0.002523f, -0.001017f, -0.000756f, -0.002045f, -0.001707f, -0.004025f, -0.000746f, -0.002732f, 0.000022f, 0.000582f, 0.002892f, -0.001983f, -0.001306f, 0.000241f, -0.000296f, 0.000443f, -0.002503f, 0.000971f, 0.000942f, 0.000303f, 0.000135f, -0.001898f, -0.001720f, -0.000964f, -0.000545f, -0.000159f, -0.003234f, 0.000646f, 0.000934f, -0.001404f, -0.002974f, 0.001175f, -0.000151f, -0.001499f, -0.000301f, + -0.000703f, -0.000503f, 0.001865f, -0.014008f, 0.014866f, -0.002124f, 0.000938f, 0.003502f, 0.004200f, -0.003165f, 0.002022f, 0.000799f, 0.002594f, 0.001757f, 0.003662f, 0.002069f, -0.002480f, -0.004122f, 0.000586f, 0.004361f, 0.008712f, -0.002107f, -0.002959f, 0.002280f, 0.001415f, -0.001667f, -0.004292f, -0.000876f, -0.000863f, -0.003886f, 0.003401f, 0.004048f, 0.000064f, 0.000939f, -0.000080f, 0.003182f, -0.002485f, -0.007704f, 0.003248f, -0.000928f, 0.002577f, 0.001231f, 0.000109f, -0.001911f, -0.002960f, 0.002047f, 0.002427f, 0.001768f, -0.000344f, -0.000162f, 0.002669f, 0.001494f, 0.000823f, -0.001594f, 0.002247f, 0.001872f, -0.000311f, -0.000587f, -0.001302f, 0.001535f, 0.000050f, -0.003804f, 0.003128f, 0.001867f, -0.000708f, 0.000893f, -0.000473f, 0.000098f, -0.000072f, 0.000924f, 0.000246f, 0.001137f, 0.001845f, 0.000982f, -0.000281f, -0.001121f, -0.000737f, 0.002657f, 0.001058f, -0.000503f, -0.000815f, -0.000134f, 0.004188f, 0.000172f, -0.003224f, -0.006604f, 0.001598f, -0.000344f, -0.005449f, 0.001842f, -0.001805f, 0.000255f, -0.002063f, -0.001608f, 0.001718f, 0.004149f, + 0.000512f, 0.005496f, 0.002494f, -0.002766f, -0.003635f, 0.006014f, -0.002607f, -0.000192f, 0.000538f, -0.005644f, -0.000042f, 0.002987f, -0.003275f, -0.000868f, 0.003780f, 0.000240f, 0.001975f, 0.000059f, 0.002489f, -0.000420f, -0.001689f, -0.000226f, 0.003305f, 0.004463f, -0.001463f, 0.000907f, 0.000776f, 0.002977f, -0.001772f, -0.000311f, 0.000580f, -0.000752f, 0.001931f, 0.000874f, 0.000160f, -0.001013f, 0.001545f, 0.001718f, 0.000089f, 0.000085f, 0.001285f, 0.002009f, -0.002412f, -0.000008f, 0.000673f, 0.001103f, -0.001235f, 0.001000f, 0.000495f, 0.000036f, 0.000700f, -0.000762f, 0.000336f, 0.000799f, 0.001666f, 0.002014f, -0.001624f, 0.000184f, 0.031279f, -0.002987f, 0.000540f, 0.001968f, -0.002784f, -0.004826f, -0.002796f, -0.001185f, -0.005491f, -0.005900f, 0.000476f, -0.005223f, -0.002282f, -0.001493f, -0.001268f, 0.003244f, 0.003780f, 0.001210f, 0.007888f, 0.001449f, -0.003870f, 0.006796f, -0.000654f, 0.004819f, -0.001508f, -0.000482f, -0.004436f, 0.000192f, 0.003975f, -0.000113f, -0.001898f, -0.000743f, 0.000430f, -0.000968f, -0.000808f, 0.001547f, -0.003526f, 0.001463f, + 0.000561f, -0.001663f, -0.003343f, -0.002264f, 0.002627f, 0.002581f, 0.003082f, -0.005132f, 0.002923f, 0.000816f, -0.000093f, 0.000255f, 0.000542f, 0.000589f, 0.000700f, -0.000419f, 0.000307f, 0.002744f, -0.000736f, 0.001091f, 0.001310f, -0.001116f, 0.002294f, 0.002608f, 0.000466f, -0.000212f, 0.002425f, 0.001724f, 0.001354f, 0.001629f, -0.001976f, -0.000913f, 0.000499f, -0.000205f, -0.000263f, 0.000150f, 0.001105f, 0.000304f, -0.001914f, -0.018376f, -0.030813f, 0.011131f, -0.000800f, 0.004619f, -0.005408f, 0.000235f, -0.006262f, -0.000830f, -0.009021f, 0.003870f, 0.004134f, -0.000222f, -0.000720f, -0.000134f, 0.000819f, -0.002176f, -0.007694f, 0.014109f, 0.000961f, -0.001834f, 0.004826f, 0.000838f, -0.002574f, 0.006761f, 0.007520f, -0.003264f, 0.004428f, 0.000839f, -0.000981f, -0.007096f, -0.003892f, 0.005499f, -0.002863f, 0.000753f, -0.000402f, 0.003729f, -0.005787f, -0.006512f, 0.000897f, 0.000066f, -0.004404f, 0.002616f, 0.000517f, -0.002766f, 0.001914f, -0.003044f, -0.002533f, 0.001164f, 0.001128f, 0.000127f, -0.000830f, -0.001454f, 0.001774f, 0.002987f, 0.000418f, 0.000915f, + -0.000891f, -0.000904f, 0.002616f, 0.000279f, 0.000568f, -0.002728f, -0.000644f, -0.001835f, 0.001460f, 0.002167f, -0.000004f, 0.001776f, -0.000050f, 0.002379f, -0.001981f, 0.001173f, -0.000052f, -0.000159f, -0.001873f, -0.000064f, -0.001609f, -0.000255f, -0.009906f, 0.029760f, -0.013222f, 0.002227f, 0.001946f, 0.007463f, -0.000949f, 0.004766f, -0.004710f, 0.000292f, -0.009030f, -0.001726f, 0.000043f, 0.003640f, 0.000602f, 0.003749f, -0.002590f, -0.005480f, 0.000707f, -0.008244f, -0.008693f, 0.000257f, -0.002858f, -0.000154f, 0.000741f, 0.001252f, -0.002157f, -0.001434f, -0.003105f, -0.004697f, 0.001892f, 0.002289f, -0.006129f, -0.002764f, -0.007703f, 0.000132f, -0.003404f, 0.002779f, 0.003237f, -0.006334f, 0.000999f, 0.005250f, 0.004713f, -0.002431f, 0.001716f, -0.001792f, -0.000898f, 0.001491f, -0.002874f, -0.000601f, 0.002673f, 0.002105f, 0.001831f, 0.002264f, 0.001199f, -0.000649f, 0.001764f, 0.001183f, -0.001324f, -0.000049f, 0.003600f, -0.000358f, -0.001661f, -0.000507f, 0.001483f, -0.001523f, -0.003688f, -0.000246f, -0.001290f, 0.000963f, 0.000781f, -0.000516f, -0.001496f, -0.002199f, + -0.002601f, 0.002654f, -0.000885f, -0.000082f, -0.000586f, -0.000165f, -0.000328f, -0.024587f, -0.007617f, 0.002768f, -0.003888f, 0.003509f, -0.001623f, 0.000034f, -0.007248f, -0.008707f, -0.001184f, -0.003048f, 0.003644f, 0.001039f, -0.001061f, -0.017996f, 0.009032f, 0.000642f, 0.007871f, 0.009792f, 0.006772f, -0.009408f, -0.002299f, -0.000910f, -0.002351f, 0.002031f, 0.002231f, -0.000161f, -0.003430f, 0.003807f, -0.006366f, -0.003401f, 0.005647f, 0.000292f, -0.002435f, 0.006612f, 0.000146f, 0.006936f, -0.002399f, -0.001108f, 0.000823f, 0.002174f, -0.004967f, -0.003665f, -0.000875f, 0.003908f, -0.001424f, 0.000636f, -0.001565f, 0.002613f, 0.003274f, 0.000638f, 0.000174f, -0.005758f, -0.000601f, 0.002822f, 0.003160f, -0.001801f, 0.003540f, 0.001169f, -0.000980f, 0.000927f, -0.003597f, -0.001122f, -0.002407f, 0.002376f, 0.000372f, -0.000838f, 0.000856f, -0.006141f, 0.000039f, 0.001175f, 0.002942f, 0.000974f, -0.001611f, 0.002850f, 0.000270f, -0.003868f, -0.001762f, -0.001981f, -0.000546f, 0.000822f, 0.015736f, 0.005306f, -0.009468f, -0.001618f, -0.004080f, 0.003295f, -0.005717f, 0.004777f, + -0.001067f, 0.005556f, 0.003858f, 0.006746f, -0.009074f, 0.010907f, -0.006694f, 0.006387f, -0.003664f, 0.003835f, 0.000716f, 0.003259f, -0.005806f, -0.013289f, 0.005161f, 0.009283f, -0.003365f, 0.003823f, -0.004715f, 0.001135f, -0.003097f, 0.009762f, -0.000095f, -0.000936f, 0.002323f, -0.004702f, -0.003293f, -0.002745f, 0.004271f, 0.000072f, -0.001575f, 0.000034f, -0.000843f, 0.006717f, 0.004484f, -0.002472f, 0.002168f, 0.002574f, -0.002777f, -0.001581f, -0.002501f, -0.005038f, -0.000698f, 0.000133f, -0.000686f, -0.001835f, -0.005140f, -0.000184f, 0.007852f, 0.004287f, -0.003279f, 0.004409f, -0.000468f, -0.000049f, 0.003681f, 0.001949f, -0.003743f, 0.001440f, 0.000837f, 0.003893f, 0.004637f, -0.003656f, 0.001674f, 0.002730f, 0.003541f, -0.000289f, -0.000101f, -0.001248f, -0.000645f, 0.002012f, -0.000322f, 0.003638f, -0.000810f, 0.033311f, -0.027211f, -0.004587f, 0.001331f, -0.000553f, -0.007542f, 0.002492f, 0.001938f, 0.010617f, -0.003515f, 0.002063f, 0.008720f, 0.000207f, 0.005232f, 0.017265f, -0.003788f, -0.001157f, -0.009031f, -0.008449f, 0.000356f, 0.002830f, -0.003827f, 0.001610f, + 0.015219f, 0.008790f, 0.001237f, 0.000545f, 0.001212f, 0.008408f, -0.007070f, -0.003146f, -0.000420f, 0.004321f, -0.000704f, 0.001015f, -0.003600f, 0.001317f, -0.006372f, -0.003763f, -0.004824f, 0.000046f, -0.004323f, 0.000996f, -0.007679f, 0.003498f, -0.015316f, -0.003946f, 0.002071f, 0.002792f, -0.000598f, -0.003557f, 0.001158f, 0.000419f, 0.001808f, -0.004216f, 0.001837f, -0.002482f, -0.002790f, -0.006781f, -0.005053f, -0.001518f, -0.000865f, 0.000297f, 0.001122f, 0.002128f, 0.000389f, 0.000998f, -0.004049f, -0.000064f, -0.004937f, -0.000777f, -0.000361f, 0.000094f, 0.001614f, 0.004869f, -0.003091f, -0.001407f, -0.000345f, -0.002656f, -0.004556f, 0.000975f, -0.021140f, -0.014733f, -0.001146f, -0.003034f, 0.010991f, 0.000300f, 0.001984f, -0.013896f, 0.000657f, 0.001838f, 0.000735f, 0.001003f, 0.008288f, -0.010465f, 0.002143f, -0.002284f, -0.007228f, -0.003541f, 0.006557f, -0.002379f, 0.005328f, -0.001904f, 0.003062f, 0.001627f, -0.001175f, -0.000884f, 0.003474f, -0.000541f, -0.000113f, -0.008969f, 0.004344f, 0.003926f, 0.003707f, 0.004278f, -0.008060f, -0.008307f, 0.004734f, 0.007086f, + -0.008662f, 0.003102f, 0.001166f, 0.007364f, 0.004206f, 0.000649f, 0.004925f, -0.002694f, -0.005258f, -0.000847f, -0.010073f, -0.007369f, -0.000891f, -0.000435f, 0.001510f, -0.004835f, 0.001583f, -0.003891f, -0.012890f, -0.003822f, -0.003537f, -0.012705f, -0.000063f, -0.002130f, -0.001562f, 0.001379f, 0.003849f, -0.003785f, 0.002340f, 0.001541f, -0.005796f, -0.003713f, -0.004476f, -0.001003f, -0.001389f, -0.000184f, -0.001901f, 0.002357f, -0.002867f, -0.000773f, -0.002450f, 0.004087f, -0.004687f, 0.002675f, -0.000818f, -0.001083f, 0.000159f, 0.001106f, -0.001173f, -0.013165f, 0.020018f, -0.010526f, -0.004497f, -0.006161f, 0.001575f, 0.001712f, 0.002943f, -0.001281f, 0.008734f, 0.006581f, -0.006288f, -0.011157f, 0.004165f, -0.004194f, 0.010246f, 0.000833f, 0.004371f, 0.005375f, -0.003888f, -0.003775f, 0.013617f, -0.007816f, -0.001891f, -0.003972f, 0.000472f, -0.001642f, 0.001802f, -0.002314f, -0.000913f, -0.010517f, 0.009267f, -0.003244f, -0.000832f, 0.010967f, -0.007523f, -0.009481f, 0.000852f, -0.004302f, -0.006242f, -0.000041f, -0.003203f, 0.002485f, -0.013681f, -0.004543f, -0.003364f, -0.000323f, + 0.004808f, 0.000068f, 0.000951f, 0.002500f, -0.002356f, 0.001913f, 0.003208f, 0.002791f, 0.003043f, -0.001738f, -0.002911f, -0.002520f, 0.003460f, -0.008260f, -0.001823f, -0.001934f, -0.002060f, 0.005431f, -0.003682f, -0.005771f, 0.005850f, 0.001809f, 0.003514f, 0.006979f, -0.002570f, -0.002299f, 0.003417f, -0.003736f, -0.004780f, -0.004360f, 0.002587f, 0.002024f, -0.002609f, 0.002428f, 0.000776f, 0.002860f, 0.000483f, -0.005198f, 0.003474f, -0.001706f, -0.027533f, 0.013750f, 0.014815f, 0.007582f, 0.006884f, -0.004940f, 0.006997f, -0.011906f, 0.000373f, -0.013986f, -0.001855f, -0.006117f, 0.006467f, -0.006699f, -0.005566f, -0.001540f, -0.010266f, 0.002987f, -0.004706f, 0.004501f, -0.009639f, 0.016011f, -0.005297f, 0.007551f, -0.006612f, 0.000620f, -0.006625f, -0.002137f, 0.003602f, 0.010241f, 0.011486f, -0.005798f, 0.000012f, -0.003437f, -0.006115f, -0.004674f, -0.016479f, -0.000428f, 0.002722f, -0.015506f, 0.005999f, 0.003015f, 0.004203f, 0.007367f, 0.004632f, 0.002445f, -0.005233f, -0.001739f, -0.005833f, -0.002983f, 0.003064f, -0.012413f, 0.004842f, 0.002379f, 0.000754f, -0.005890f, + -0.003487f, 0.003133f, 0.009935f, 0.004150f, 0.002540f, -0.003980f, 0.004120f, 0.000530f, -0.004774f, 0.001226f, -0.003465f, -0.005450f, -0.002855f, -0.001328f, -0.004933f, 0.005513f, 0.003113f, 0.004475f, 0.002474f, -0.004130f, 0.001299f, 0.006899f, -0.001419f, 0.006403f, 0.003385f, 0.002329f, 0.004311f, -0.002337f, -0.002656f, 0.001619f, 0.001087f, 0.022785f, -0.015698f, -0.006594f, -0.002015f, -0.000096f, 0.011082f, -0.002127f, 0.003613f, -0.006426f, 0.003415f, -0.004005f, -0.018046f, -0.012417f, -0.004643f, 0.006430f, -0.000800f, -0.009988f, -0.009364f, -0.019685f, -0.006372f, 0.002482f, 0.002628f, 0.000874f, -0.002055f, -0.001194f, -0.006126f, 0.001560f, 0.002526f, 0.003302f, 0.000732f, -0.000936f, -0.002389f, -0.009412f, -0.002426f, -0.002169f, 0.004681f, -0.001020f, -0.007518f, -0.002978f, 0.002129f, -0.008445f, 0.001404f, -0.008708f, 0.004788f, 0.006737f, -0.006479f, -0.012585f, -0.002467f, -0.003986f, -0.005787f, 0.000563f, 0.001092f, 0.001194f, 0.003037f, 0.000116f, -0.004972f, 0.007826f, 0.012172f, -0.005937f, 0.005020f, 0.002002f, 0.005742f, -0.008893f, 0.003289f, 0.001079f, + 0.003107f, -0.012773f, 0.010012f, 0.001175f, 0.001081f, -0.001594f, -0.007326f, 0.001845f, 0.000865f, 0.001738f, 0.002164f, -0.007979f, -0.004250f, 0.001518f, 0.003666f, -0.002053f, -0.000069f, 0.002902f, 0.001105f, -0.001477f, -0.003867f, 0.002706f, 0.037102f, -0.020680f, 0.001932f, -0.002051f, -0.004378f, -0.015425f, -0.000798f, -0.000828f, 0.012614f, 0.005777f, 0.025446f, -0.010079f, 0.001016f, 0.002803f, 0.006125f, -0.002577f, -0.001133f, 0.010322f, -0.006426f, 0.014845f, 0.009029f, -0.020589f, 0.019684f, 0.006942f, -0.007047f, -0.005104f, -0.007690f, -0.004018f, 0.001452f, 0.000915f, -0.005516f, 0.013063f, 0.001714f, -0.006245f, -0.005496f, 0.001282f, -0.006814f, -0.012106f, 0.000158f, 0.007236f, 0.002918f, 0.008797f, -0.004044f, 0.002739f, 0.009459f, 0.013551f, 0.003236f, -0.014021f, 0.004641f, -0.004514f, -0.007692f, 0.002041f, 0.005969f, 0.003407f, -0.001676f, -0.012730f, -0.011108f, 0.015695f, -0.002038f, 0.012128f, 0.001423f, -0.004784f, 0.005980f, -0.010527f, -0.004628f, 0.005067f, -0.001329f, 0.010428f, -0.008360f, -0.016628f, -0.004639f, -0.000824f, -0.005078f, -0.003995f, + 0.010365f, -0.003471f, 0.001927f, -0.009502f, -0.009245f, 0.004523f, 0.002405f, 0.003808f, -0.004015f, 0.003887f, 0.000421f, -0.002230f, -0.000457f, -0.041951f, -0.027308f, 0.009837f, -0.014256f, 0.004368f, -0.007193f, -0.025440f, -0.018860f, 0.033635f, -0.015684f, 0.015111f, 0.008476f, -0.008964f, 0.007728f, -0.005150f, 0.010494f, 0.011643f, -0.000902f, -0.003492f, 0.020100f, -0.006725f, -0.023014f, 0.000228f, -0.009722f, 0.002188f, 0.002022f, 0.013549f, 0.007117f, 0.002702f, 0.006562f, -0.006311f, -0.000143f, 0.014849f, 0.009444f, -0.002853f, 0.003718f, -0.013394f, -0.020622f, -0.015243f, -0.010701f, -0.003111f, -0.003061f, 0.003641f, -0.002059f, -0.005856f, 0.012976f, 0.003302f, -0.010015f, -0.009381f, -0.002810f, 0.003663f, -0.010090f, 0.003819f, 0.012095f, -0.000400f, 0.004436f, -0.008566f, 0.006378f, 0.004599f, 0.001355f, 0.004694f, -0.007556f, -0.011599f, -0.016266f, 0.007937f, 0.006192f, 0.000400f, 0.006144f, 0.001037f, -0.007549f, -0.001714f, 0.000408f, -0.013044f, -0.001329f, -0.020177f, -0.011163f, 0.003187f, -0.005272f, 0.003682f, 0.000315f, -0.002807f, -0.002892f, -0.002042f, + -0.003889f, 0.003391f, -0.000060f, -0.000752f, -0.049993f, 0.017027f, -0.003981f, -0.003287f, 0.008928f, 0.002184f, 0.004978f, 0.021769f, 0.012997f, 0.016437f, 0.008272f, 0.022449f, -0.003948f, -0.021891f, 0.003224f, -0.002474f, -0.009376f, -0.019397f, -0.008456f, 0.016928f, 0.003843f, -0.001191f, 0.003536f, -0.001311f, 0.000240f, 0.014259f, 0.001815f, 0.005276f, -0.002159f, 0.003510f, 0.014229f, -0.003960f, -0.009567f, 0.007203f, -0.016991f, -0.017103f, -0.010975f, -0.002190f, 0.000475f, 0.007044f, 0.016676f, 0.000225f, -0.005750f, -0.016653f, -0.027228f, -0.009618f, -0.003969f, -0.001663f, -0.000177f, 0.010016f, -0.012474f, 0.022441f, 0.011687f, -0.002174f, 0.006476f, -0.008891f, 0.001619f, 0.000146f, 0.010406f, 0.020045f, 0.013557f, -0.011860f, -0.004958f, 0.003321f, -0.001897f, -0.002557f, 0.001045f, -0.006143f, -0.019450f, -0.001511f, -0.003579f, -0.001433f, 0.003062f, -0.007616f, -0.002546f, -0.013317f, -0.001398f, 0.001828f, 0.013923f, 0.006789f, 0.001967f, 0.002209f, 0.003530f, 0.000402f, -0.011755f, 0.002392f, -0.002724f, 0.003109f, -0.001416f, -0.001584f, -0.006424f, 0.000969f, + -0.006770f, 0.020477f, 0.020727f, 0.007141f, 0.013919f, 0.010085f, 0.021742f, -0.018828f, 0.022598f, -0.027237f, -0.004655f, 0.025778f, 0.035288f, 0.007495f, -0.002072f, 0.012956f, -0.010637f, -0.012421f, 0.025574f, 0.004269f, -0.003753f, 0.006360f, 0.020593f, -0.005199f, 0.012695f, -0.003932f, -0.004953f, -0.002278f, 0.009388f, -0.023489f, -0.002719f, 0.011670f, -0.005081f, 0.001382f, -0.008203f, 0.005083f, 0.018910f, -0.017112f, 0.005757f, -0.004947f, 0.006301f, -0.008865f, 0.012765f, 0.001248f, 0.004728f, 0.005281f, -0.020775f, 0.010417f, -0.028994f, -0.005762f, 0.016722f, 0.001960f, -0.010235f, 0.018451f, -0.006119f, -0.010846f, 0.013448f, -0.005279f, -0.003597f, -0.001919f, 0.008202f, -0.001030f, 0.002310f, -0.015759f, 0.005988f, 0.001647f, 0.031360f, -0.023262f, -0.010009f, 0.002951f, -0.005828f, 0.007196f, 0.008990f, -0.011107f, 0.021997f, 0.008316f, 0.000107f, 0.003738f, 0.007508f, -0.003378f, -0.011610f, 0.004821f, -0.005887f, 0.002103f, -0.002194f, 0.005834f, -0.007281f, 0.002433f, 0.000289f, -0.003829f, 0.005228f, -0.001607f, -0.001113f, -0.000408f, 0.041784f, -0.026060f, + 0.001049f, -0.004139f, -0.006928f, 0.000898f, -0.009498f, -0.003991f, -0.030840f, -0.025804f, -0.025701f, 0.008661f, -0.005329f, 0.008560f, -0.005840f, -0.018674f, 0.029896f, 0.020845f, -0.013829f, -0.011609f, -0.016334f, -0.003387f, 0.006430f, 0.009888f, 0.012120f, -0.000816f, 0.009388f, -0.002653f, -0.011772f, -0.014376f, 0.009044f, -0.006528f, 0.027294f, 0.017113f, 0.025177f, 0.003573f, 0.009176f, 0.024794f, 0.017196f, -0.005401f, 0.004555f, -0.001070f, 0.000342f, 0.002656f, -0.011509f, -0.008276f, 0.004479f, -0.014401f, -0.014839f, 0.014429f, 0.016405f, -0.017922f, -0.000560f, 0.031929f, 0.022247f, -0.001109f, -0.010517f, -0.002290f, 0.006637f, 0.006027f, -0.004287f, -0.011848f, 0.014283f, -0.000925f, 0.003520f, 0.010242f, 0.012989f, -0.013538f, 0.005854f, -0.002194f, 0.005416f, -0.021063f, 0.003927f, 0.019076f, -0.018935f, -0.015546f, -0.008053f, 0.008489f, 0.015054f, -0.008458f, 0.008294f, -0.007287f, -0.000720f, 0.000467f, 0.003157f, 0.005660f, -0.002601f, -0.001131f, 0.003443f, 0.003191f, 0.000063f, -0.000397f, 0.002494f, 0.033849f, 0.013052f, -0.004486f, -0.001058f, 0.010637f, + -0.012626f, -0.016436f, 0.014157f, -0.019643f, -0.025434f, 0.006797f, -0.013629f, -0.017590f, -0.009151f, 0.016858f, 0.041329f, 0.017115f, -0.022425f, 0.042314f, 0.004955f, -0.006601f, 0.007669f, -0.024667f, 0.006330f, 0.003436f, -0.017650f, 0.015334f, -0.004708f, 0.003044f, -0.012691f, 0.007180f, -0.011593f, 0.021420f, -0.025290f, -0.009316f, -0.008699f, 0.012091f, 0.013992f, 0.012433f, -0.013411f, 0.003953f, -0.014022f, -0.004030f, 0.007567f, 0.017899f, 0.008320f, -0.008208f, 0.017487f, 0.008896f, 0.014120f, 0.000950f, 0.016450f, -0.007160f, 0.009126f, -0.024939f, 0.028093f, -0.002430f, 0.003971f, -0.007429f, -0.014542f, 0.000749f, 0.009432f, 0.022387f, 0.006655f, -0.026778f, 0.011492f, -0.010836f, 0.022132f, 0.001904f, -0.008347f, 0.004271f, -0.007207f, 0.004594f, -0.015516f, 0.006229f, 0.001564f, 0.001356f, 0.002575f, -0.003057f, 0.001688f, -0.004206f, -0.006455f, 0.008728f, 0.005557f, 0.005028f, -0.011479f, 0.003804f, -0.006188f, 0.005390f, 0.001298f, -0.000725f, 0.002789f, 0.001285f, -0.069152f, 0.003157f, 0.011692f, 0.027320f, 0.009043f, -0.042494f, 0.056852f, 0.020922f, + -0.025891f, 0.009468f, 0.056545f, 0.012807f, -0.013615f, -0.001584f, -0.034111f, 0.017702f, 0.001722f, -0.008615f, 0.005021f, 0.011845f, -0.022089f, 0.011995f, -0.027703f, 0.003075f, -0.025242f, -0.022635f, -0.009603f, 0.010852f, 0.016386f, -0.012307f, 0.014342f, -0.024555f, -0.003458f, 0.027897f, 0.002658f, -0.009855f, -0.003167f, 0.005578f, -0.006335f, -0.018163f, -0.020354f, -0.002546f, -0.009294f, 0.020208f, -0.028045f, 0.029976f, 0.009586f, 0.003994f, -0.009890f, -0.003092f, 0.013880f, -0.010982f, 0.018693f, 0.004807f, 0.016905f, -0.006009f, -0.009671f, -0.029258f, 0.010154f, -0.002770f, -0.030279f, 0.009320f, -0.001972f, 0.018695f, 0.029842f, -0.012360f, 0.006838f, 0.014897f, 0.015727f, 0.003430f, -0.009014f, -0.001550f, -0.036693f, -0.001568f, 0.003419f, 0.009312f, -0.000131f, 0.024944f, 0.005407f, 0.012527f, -0.013833f, -0.009692f, 0.018540f, -0.001644f, -0.003712f, 0.011450f, -0.002554f, -0.002881f, -0.000166f, -0.000351f, 0.001246f, -0.001732f, 0.010350f, 0.085614f, 0.038881f, 0.007884f, 0.013690f, -0.017862f, -0.012073f, -0.004425f, 0.032193f, -0.023260f, 0.003425f, -0.019398f, + -0.053057f, -0.025582f, 0.011853f, -0.013753f, 0.008463f, -0.021184f, -0.001315f, -0.022759f, 0.019046f, -0.023040f, -0.016638f, -0.049258f, -0.009392f, -0.007965f, -0.013128f, 0.025251f, -0.008546f, -0.020713f, 0.006403f, 0.019418f, 0.007055f, 0.006411f, -0.003187f, -0.004411f, -0.013198f, 0.009764f, -0.016918f, -0.004779f, -0.010606f, -0.029490f, 0.004205f, -0.020551f, 0.007942f, 0.002329f, -0.006192f, -0.000945f, -0.021526f, -0.001501f, -0.005085f, 0.030844f, -0.009202f, -0.001031f, 0.012427f, -0.017370f, -0.007816f, 0.031300f, -0.018677f, 0.011779f, 0.000595f, 0.027801f, 0.039702f, -0.002657f, 0.004933f, 0.003675f, 0.013590f, 0.006909f, -0.030690f, 0.002478f, 0.007480f, 0.010432f, -0.013261f, -0.020610f, 0.001911f, 0.005569f, -0.005523f, -0.008041f, -0.032896f, -0.016457f, -0.019011f, 0.000984f, 0.003915f, -0.006498f, -0.009193f, -0.010543f, -0.002714f, -0.005463f, -0.005926f, 0.006465f, -0.003413f, 0.002952f, -0.011961f, 0.000492f, -0.004743f, -0.008498f, 0.001712f, 0.004435f}, + {-0.000064f, -0.000019f, -0.000070f, 0.000004f, -0.000045f, 0.000103f, 0.000068f, -0.000324f, 0.000004f, -0.000211f, -0.000252f, 0.000067f, 0.000210f, 0.000205f, 0.000074f, -0.000463f, -0.000284f, 0.000093f, -0.000145f, 0.000025f, 0.000093f, 0.000121f, 0.000192f, -0.000140f, -0.000156f, -0.000287f, -0.000168f, -0.000000f, -0.000653f, -0.000012f, -0.000065f, -0.000187f, 0.000133f, -0.000371f, -0.000325f, -0.000655f, -0.000092f, -0.000575f, -0.000178f, -0.000012f, 0.000456f, 0.000128f, 0.000346f, -0.000175f, 0.000365f, -0.000094f, 0.000072f, 0.000319f, 0.001951f, -0.001521f, 0.000953f, -0.001201f, 0.000619f, -0.000584f, -0.000576f, -0.000345f, -0.000326f, 0.000356f, 0.000407f, -0.001488f, -0.000078f, 0.000224f, -0.000146f, -0.000246f, -0.000870f, -0.000314f, 0.000626f, 0.000948f, 0.000476f, 0.001492f, 0.000305f, -0.000260f, 0.000308f, 0.000262f, -0.000149f, 0.000491f, 0.001061f, -0.000401f, -0.000008f, 0.000456f, -0.000011f, -0.000097f, -0.000754f, -0.000024f, 0.000387f, 0.000313f, 0.000065f, 0.000027f, -0.000249f, 0.000273f, -0.000025f, 0.000039f, 0.000018f, -0.000253f, 0.007069f, -0.000456f, + 0.000620f, -0.000443f, 0.000460f, -0.000532f, 0.000117f, -0.000127f, -0.000121f, 0.000410f, -0.000369f, -0.001278f, 0.000374f, 0.000137f, 0.000401f, 0.000872f, 0.000468f, 0.000316f, -0.000112f, -0.000739f, -0.000251f, 0.000346f, -0.000097f, -0.000116f, 0.000729f, -0.000915f, -0.000288f, -0.000011f, -0.000153f, -0.000223f, 0.000353f, 0.000387f, 0.000477f, 0.000138f, 0.000173f, -0.000189f, 0.000660f, -0.000025f, 0.000508f, 0.000359f, -0.000113f, -0.000061f, 0.000243f, 0.000010f, -0.000137f, -0.000063f, 0.000012f, 0.005193f, -0.004960f, 0.000779f, -0.001340f, 0.000719f, -0.000090f, 0.000519f, -0.000475f, 0.000934f, -0.000396f, 0.000566f, -0.001184f, 0.000047f, -0.000687f, 0.000197f, -0.000108f, -0.000162f, -0.000318f, -0.000872f, -0.000088f, 0.000103f, -0.000429f, 0.000714f, -0.000322f, -0.000519f, -0.000655f, 0.000392f, -0.000419f, 0.001015f, -0.000106f, 0.000003f, 0.000300f, 0.000004f, 0.000023f, -0.000453f, -0.000380f, -0.000106f, 0.000104f, -0.000174f, -0.000436f, 0.000387f, 0.000279f, 0.000697f, -0.000161f, 0.000229f, -0.000096f, 0.000129f, -0.012182f, 0.001429f, -0.000914f, 0.000026f, + -0.000142f, -0.001022f, 0.001104f, -0.000273f, 0.000098f, 0.000467f, 0.000141f, 0.001280f, -0.000064f, -0.000523f, 0.001535f, 0.000620f, 0.001385f, -0.000029f, -0.001838f, -0.001100f, -0.000887f, 0.000758f, -0.000959f, 0.000080f, -0.000350f, -0.000325f, 0.000110f, 0.000285f, -0.000280f, -0.000577f, -0.000430f, 0.000371f, 0.000418f, 0.000801f, -0.000066f, -0.000112f, -0.000052f, 0.000496f, -0.000558f, 0.000144f, 0.000218f, 0.000367f, -0.000455f, 0.000474f, -0.000552f, -0.000098f, 0.000182f, -0.015385f, 0.005576f, -0.002247f, 0.002579f, -0.001791f, 0.001184f, -0.001941f, 0.001104f, -0.001441f, 0.000558f, 0.001073f, 0.000055f, 0.000412f, 0.000984f, -0.000632f, 0.000708f, -0.000811f, -0.000597f, -0.001790f, 0.001634f, -0.001051f, 0.001096f, 0.000083f, -0.000003f, -0.001717f, -0.000059f, 0.000333f, -0.000241f, -0.000055f, -0.000060f, 0.000719f, -0.000103f, -0.000502f, 0.000546f, 0.000167f, -0.000215f, 0.000038f, 0.000028f, 0.000064f, 0.000317f, -0.000462f, 0.001198f, -0.000094f, -0.000744f, -0.000075f, -0.000403f, -0.000040f, 0.000774f, 0.007013f, -0.001488f, 0.002671f, -0.001202f, 0.000927f, + -0.000972f, 0.003324f, -0.000621f, 0.001780f, -0.000186f, -0.000115f, 0.000464f, 0.000013f, -0.002257f, 0.000531f, -0.000188f, -0.001011f, -0.000231f, 0.000053f, -0.002843f, -0.000065f, 0.000254f, 0.000919f, -0.000004f, -0.000530f, -0.000092f, 0.000994f, 0.000199f, -0.000472f, -0.000943f, 0.001486f, -0.000894f, -0.000022f, -0.001341f, -0.000137f, 0.000024f, 0.000250f, -0.000310f, 0.000374f, 0.000609f, -0.000564f, 0.000488f, -0.000009f, 0.000394f, -0.000008f, 0.000696f, -0.000328f, -0.000183f, 0.000620f, 0.018465f, -0.005382f, 0.000805f, -0.000911f, 0.001216f, 0.000015f, -0.000012f, -0.002481f, 0.001115f, -0.001083f, 0.000763f, 0.000268f, 0.000393f, 0.000803f, 0.001251f, 0.000195f, 0.000438f, -0.002087f, 0.000771f, 0.000775f, -0.001341f, -0.000259f, 0.001419f, 0.000918f, 0.000908f, 0.002010f, 0.001129f, 0.000295f, 0.000538f, -0.000750f, 0.000643f, -0.000178f, 0.001161f, 0.001503f, -0.000206f, 0.000508f, 0.000950f, -0.000396f, 0.000332f, -0.001306f, -0.000346f, 0.001308f, 0.000028f, -0.000917f, -0.000308f, 0.000395f, 0.000975f, -0.000068f, 0.000555f, -0.000007f, 0.001309f, -0.009877f, + 0.004152f, -0.002883f, 0.001876f, -0.001716f, 0.002215f, -0.001449f, 0.000088f, -0.001234f, -0.001519f, -0.002122f, 0.000142f, -0.001262f, 0.000604f, 0.000703f, 0.001592f, -0.002618f, 0.001605f, -0.000630f, 0.002231f, 0.000486f, -0.000139f, 0.000171f, 0.000165f, -0.000534f, -0.000455f, 0.000334f, -0.001073f, 0.000695f, 0.001258f, -0.001725f, -0.000387f, -0.000109f, 0.000683f, -0.000662f, 0.001802f, -0.001894f, 0.000357f, -0.000009f, 0.000105f, -0.000818f, 0.000119f, -0.000516f, 0.000469f, 0.000067f, 0.000082f, -0.000584f, -0.000111f, -0.001204f, -0.000416f, -0.000075f, 0.000253f, 0.000086f, -0.000449f, -0.001522f, -0.015921f, 0.005041f, -0.003263f, -0.000222f, -0.000668f, 0.000991f, -0.002752f, 0.000189f, 0.000868f, 0.000717f, -0.000965f, 0.000539f, -0.001231f, -0.002019f, -0.000791f, 0.000247f, -0.001210f, 0.004215f, 0.000110f, -0.001178f, -0.000390f, -0.001418f, -0.000667f, 0.001283f, 0.000766f, 0.001666f, -0.000158f, 0.000739f, -0.000950f, 0.000381f, -0.000860f, -0.000298f, -0.000506f, 0.000274f, 0.000516f, -0.000275f, -0.000816f, 0.000193f, 0.000299f, 0.001151f, -0.000208f, -0.000433f, + -0.001514f, -0.001240f, -0.000593f, -0.000246f, 0.000278f, 0.000197f, -0.000623f, -0.000263f, 0.000107f, 0.000546f, 0.000282f, 0.000089f, -0.000276f, 0.000555f, -0.015328f, 0.007183f, -0.003396f, 0.003202f, -0.001680f, 0.001894f, 0.000935f, 0.000574f, -0.001750f, 0.000206f, -0.000895f, 0.000254f, -0.002289f, 0.000851f, 0.001422f, 0.000456f, -0.002436f, -0.001211f, -0.001229f, -0.001279f, -0.000841f, 0.001734f, 0.000411f, 0.001219f, 0.000976f, -0.000437f, -0.000106f, -0.001842f, 0.002361f, -0.000681f, -0.000246f, 0.000145f, -0.000514f, -0.000734f, -0.000865f, -0.000202f, -0.001936f, 0.000566f, -0.001030f, 0.000765f, 0.000667f, 0.001101f, -0.000306f, 0.000116f, -0.001259f, 0.000468f, 0.000918f, 0.000215f, -0.000211f, 0.000181f, 0.000717f, 0.001074f, 0.000464f, 0.000998f, 0.000041f, 0.000150f, 0.004975f, 0.006155f, -0.002780f, 0.001649f, -0.000855f, 0.000619f, -0.000661f, 0.000355f, 0.000543f, 0.003014f, -0.001066f, 0.001243f, 0.002833f, -0.000771f, -0.000114f, -0.000477f, 0.000689f, 0.001463f, 0.001501f, 0.001950f, 0.000528f, 0.001660f, -0.000422f, -0.000980f, -0.003318f, 0.000700f, + -0.000502f, -0.001666f, -0.001187f, -0.000056f, -0.000313f, 0.001072f, -0.000152f, -0.001926f, -0.001987f, 0.000536f, -0.001726f, 0.000233f, 0.001053f, -0.001552f, -0.001038f, -0.000659f, 0.000774f, 0.000701f, -0.000049f, -0.000204f, 0.001164f, 0.000249f, -0.000447f, 0.000468f, -0.001001f, 0.000128f, -0.000527f, -0.000754f, -0.000508f, 0.000792f, -0.000402f, 0.000598f, -0.000445f, -0.000968f, 0.000266f, 0.000538f, -0.000339f, 0.017709f, -0.006163f, 0.003344f, -0.002310f, 0.003324f, -0.002342f, 0.002039f, -0.000757f, 0.002071f, 0.000504f, 0.001458f, -0.001693f, 0.001739f, -0.000593f, -0.001443f, -0.000148f, -0.001550f, -0.002474f, -0.001306f, -0.000268f, 0.001257f, -0.001694f, -0.002267f, -0.002777f, -0.000498f, -0.000242f, 0.002224f, 0.001219f, 0.001429f, -0.000975f, 0.001156f, -0.000881f, -0.000866f, -0.000476f, 0.001467f, 0.001267f, 0.000396f, -0.000008f, -0.000052f, 0.000042f, -0.000410f, -0.000230f, 0.001016f, 0.000199f, 0.002498f, -0.000956f, -0.000300f, -0.002080f, 0.001364f, -0.000542f, -0.000323f, -0.000489f, -0.000129f, 0.000123f, -0.000346f, 0.000381f, -0.000557f, 0.000009f, -0.000790f, + -0.000347f, 0.000177f, 0.000816f, -0.000423f, 0.004975f, -0.007600f, 0.004456f, -0.002843f, 0.003461f, -0.000039f, 0.002149f, 0.000607f, -0.003332f, -0.001580f, -0.001123f, 0.000408f, 0.000835f, 0.000467f, 0.003762f, -0.002115f, 0.003006f, 0.000524f, 0.000382f, -0.002056f, -0.000446f, 0.002599f, -0.000171f, -0.002206f, 0.002512f, 0.001919f, 0.000425f, -0.001034f, -0.000817f, -0.000219f, -0.000175f, 0.001165f, -0.000571f, 0.000520f, -0.001407f, -0.000311f, 0.000811f, -0.002028f, 0.000776f, -0.000786f, 0.000726f, -0.000587f, -0.000180f, 0.002394f, 0.001033f, 0.001365f, -0.000106f, 0.000565f, 0.000877f, -0.000179f, -0.000660f, -0.001055f, 0.000361f, 0.000484f, 0.000850f, 0.001030f, 0.000241f, -0.000230f, -0.001059f, -0.000479f, -0.001071f, -0.000954f, 0.000123f, -0.018898f, -0.003853f, -0.000551f, -0.003191f, -0.001350f, 0.002777f, 0.001160f, -0.000866f, -0.000776f, -0.002307f, -0.001548f, -0.001880f, -0.002104f, -0.001752f, -0.001133f, -0.001589f, -0.002675f, -0.002293f, 0.000823f, -0.002327f, 0.000718f, -0.003116f, 0.000058f, -0.001313f, -0.001059f, 0.002638f, -0.000317f, -0.001342f, 0.001688f, + -0.001981f, 0.001787f, 0.000510f, 0.001888f, 0.001277f, -0.000079f, -0.000962f, 0.001989f, -0.000065f, -0.000351f, 0.001812f, -0.000808f, -0.002550f, -0.002882f, -0.000766f, 0.000906f, 0.000568f, -0.000884f, -0.000119f, -0.000821f, 0.000146f, 0.000003f, 0.000112f, 0.001745f, 0.000665f, -0.001323f, -0.000519f, 0.000196f, 0.001095f, 0.000225f, 0.001652f, 0.000427f, -0.000175f, -0.000899f, -0.022179f, 0.019303f, -0.007865f, 0.005356f, -0.005040f, 0.001232f, -0.002476f, 0.003264f, 0.000618f, 0.000378f, -0.001580f, 0.002210f, 0.000450f, -0.003989f, 0.000405f, 0.000584f, -0.002004f, -0.003076f, 0.003037f, 0.003761f, -0.001215f, -0.001000f, 0.000630f, 0.001729f, -0.001017f, 0.003424f, -0.000107f, 0.000861f, -0.002490f, -0.000893f, -0.001483f, 0.002228f, -0.000496f, 0.000478f, 0.000485f, -0.001293f, 0.002169f, 0.002069f, 0.000570f, 0.000704f, 0.002543f, -0.001561f, -0.000409f, -0.000336f, -0.001844f, 0.000385f, -0.001202f, 0.000438f, -0.000055f, 0.000152f, 0.002079f, -0.000093f, -0.000469f, 0.000446f, 0.000112f, 0.001343f, -0.001258f, 0.000462f, -0.000079f, 0.002645f, -0.000790f, -0.000122f, + -0.001043f, 0.014829f, -0.001760f, -0.003067f, -0.000710f, 0.002015f, 0.001052f, 0.000924f, -0.000084f, -0.002033f, 0.000534f, 0.001276f, 0.001441f, -0.000915f, -0.000861f, 0.003012f, 0.001046f, -0.002309f, 0.000526f, 0.003890f, -0.004803f, 0.003252f, 0.000416f, 0.004152f, -0.000248f, 0.000263f, 0.000836f, 0.000861f, 0.002196f, -0.001573f, -0.000579f, 0.000842f, 0.001586f, -0.000586f, -0.000014f, 0.000231f, 0.000393f, 0.001011f, -0.001952f, -0.000014f, 0.001185f, 0.000360f, -0.001061f, -0.000306f, 0.002585f, 0.001914f, 0.000927f, -0.000944f, -0.000683f, 0.000768f, -0.000295f, -0.000594f, 0.000484f, -0.000752f, -0.001194f, 0.002661f, 0.001066f, 0.001723f, 0.000302f, 0.001309f, 0.001071f, 0.001169f, 0.000163f, 0.001408f, 0.000723f, 0.001012f, -0.000757f, 0.000221f, 0.000405f, -0.001130f, 0.000459f, -0.000526f, -0.000075f, 0.007039f, 0.002049f, 0.001702f, -0.001023f, -0.000684f, -0.001902f, -0.001360f, 0.000357f, -0.000744f, -0.000931f, -0.002733f, 0.002341f, 0.001618f, -0.001695f, 0.002918f, -0.002734f, -0.000828f, 0.001235f, -0.002032f, 0.001193f, 0.001895f, 0.002903f, 0.002553f, + 0.002445f, 0.001264f, -0.005129f, 0.000001f, -0.001065f, 0.001030f, -0.000481f, 0.002011f, 0.001378f, -0.000664f, -0.001235f, 0.001319f, -0.000903f, 0.003392f, 0.000016f, 0.001120f, 0.003457f, 0.003291f, -0.002469f, 0.000205f, -0.001621f, -0.002964f, -0.000301f, 0.000551f, -0.000358f, -0.000613f, -0.000296f, 0.000249f, -0.001366f, 0.000177f, -0.001596f, -0.000460f, -0.000169f, 0.000422f, 0.000034f, -0.000953f, -0.000984f, 0.002054f, -0.000704f, 0.000306f, 0.000946f, 0.001130f, -0.000605f, -0.000654f, -0.000276f, -0.001642f, -0.001083f, 0.000164f, 0.000382f, 0.016619f, -0.011686f, 0.004260f, -0.004436f, -0.000338f, -0.003099f, 0.002812f, 0.002794f, 0.000903f, 0.000572f, 0.002642f, 0.007256f, -0.006369f, -0.000881f, -0.001653f, -0.002568f, 0.005629f, 0.004242f, -0.000863f, -0.003850f, 0.001566f, -0.003144f, -0.002514f, -0.004407f, 0.000568f, -0.004513f, -0.001489f, 0.002667f, 0.000388f, -0.001380f, -0.003725f, 0.000012f, -0.000897f, 0.002271f, 0.002087f, 0.000967f, -0.001691f, 0.000260f, -0.000104f, 0.000922f, 0.001801f, -0.001137f, -0.000574f, -0.002016f, 0.003067f, -0.000375f, 0.000455f, + 0.002739f, -0.000562f, -0.000244f, 0.001094f, -0.001369f, -0.000141f, 0.001191f, -0.002030f, 0.000467f, -0.000376f, -0.000173f, -0.002117f, 0.001034f, -0.000453f, 0.000187f, 0.000521f, -0.000778f, 0.001389f, -0.001088f, -0.000283f, -0.002262f, 0.000204f, -0.000310f, 0.000943f, 0.001000f, -0.025902f, 0.003552f, 0.000334f, 0.001790f, -0.002016f, -0.003257f, -0.000042f, 0.002139f, 0.003414f, -0.000237f, 0.005206f, 0.002889f, -0.003566f, -0.003184f, 0.002420f, 0.000415f, -0.002547f, -0.004710f, -0.005399f, -0.003470f, -0.003990f, -0.004463f, 0.000780f, 0.001392f, 0.001161f, -0.003308f, -0.003180f, 0.000461f, -0.000852f, -0.000560f, -0.000442f, -0.002643f, 0.002201f, -0.004536f, -0.001708f, -0.000708f, -0.000183f, 0.001425f, 0.000491f, -0.000330f, 0.002069f, -0.000653f, 0.002063f, 0.001177f, -0.001617f, 0.000239f, 0.003363f, -0.001367f, -0.001366f, 0.000070f, 0.001963f, 0.000495f, -0.001418f, -0.001821f, 0.001640f, 0.000071f, -0.002383f, 0.003238f, 0.003657f, 0.000427f, -0.001059f, 0.000421f, -0.000079f, 0.000762f, 0.001610f, -0.000175f, 0.002141f, 0.001352f, 0.001221f, 0.001063f, 0.000549f, + 0.000883f, -0.001086f, -0.000096f, -0.015846f, 0.013547f, -0.004530f, 0.002895f, -0.000074f, 0.002257f, -0.005485f, 0.002123f, -0.003739f, 0.000019f, -0.002530f, 0.005086f, 0.004327f, 0.001636f, 0.000352f, -0.004178f, -0.002772f, -0.000430f, -0.001680f, 0.004827f, -0.003944f, -0.000156f, -0.001953f, 0.007069f, -0.002246f, 0.000633f, -0.000197f, 0.001219f, 0.000558f, 0.001214f, 0.000894f, -0.001169f, 0.000640f, -0.000284f, 0.002472f, 0.000381f, 0.004683f, 0.002428f, -0.001505f, -0.000317f, -0.000578f, 0.000086f, -0.001781f, -0.001260f, -0.000442f, 0.000835f, 0.005710f, 0.000518f, 0.000388f, -0.001568f, 0.002334f, -0.000865f, -0.001212f, 0.000751f, -0.001177f, 0.000702f, -0.001463f, -0.003196f, 0.001592f, 0.001411f, -0.000436f, 0.003333f, 0.000719f, 0.000789f, 0.001208f, -0.000899f, 0.000405f, 0.001077f, -0.002752f, -0.001302f, -0.000202f, -0.001264f, 0.001282f, 0.001965f, -0.000738f, 0.003372f, 0.002235f, -0.000089f, -0.000914f, -0.000694f, -0.000248f, 0.010332f, -0.000241f, 0.002323f, -0.007036f, -0.001176f, 0.000879f, -0.005678f, 0.000444f, 0.007848f, -0.001378f, 0.000557f, -0.003553f, + -0.004864f, 0.001226f, -0.004445f, 0.006913f, -0.004815f, 0.001651f, 0.001629f, 0.003697f, 0.002874f, -0.000766f, -0.004297f, -0.000508f, -0.000404f, 0.002185f, -0.003015f, -0.000593f, -0.000891f, -0.001442f, -0.001028f, 0.002088f, 0.001282f, 0.005603f, 0.001897f, -0.002102f, 0.002320f, -0.001540f, -0.001619f, 0.001715f, 0.004798f, -0.000703f, -0.002491f, -0.002335f, 0.002546f, -0.000075f, -0.003491f, -0.003220f, 0.001633f, 0.001516f, -0.001455f, -0.002664f, -0.004410f, 0.001203f, 0.001628f, 0.001088f, -0.002495f, 0.001852f, 0.001137f, 0.000763f, -0.000893f, -0.000286f, 0.001351f, -0.003320f, -0.000442f, 0.001439f, 0.001704f, -0.000331f, 0.000824f, 0.000053f, 0.035220f, -0.002214f, 0.001445f, 0.003250f, -0.003055f, -0.001287f, -0.001028f, -0.008264f, 0.005597f, -0.000874f, -0.005116f, 0.001138f, -0.002611f, 0.003050f, 0.002419f, 0.003869f, -0.001342f, 0.005242f, 0.004494f, 0.002884f, -0.004575f, 0.003558f, -0.006285f, -0.003697f, -0.004269f, 0.001725f, -0.003274f, -0.000571f, -0.001100f, -0.004179f, -0.002259f, 0.003576f, -0.002616f, -0.001971f, -0.003990f, 0.001330f, 0.001321f, 0.003033f, + -0.001673f, 0.005201f, 0.001318f, 0.005926f, -0.000652f, 0.001099f, 0.001214f, -0.003231f, 0.002349f, 0.006066f, -0.002055f, -0.000140f, 0.001667f, -0.001728f, -0.002411f, 0.001461f, -0.002403f, -0.001281f, -0.003148f, -0.002052f, 0.002377f, 0.002129f, 0.001438f, 0.002284f, 0.002859f, 0.002729f, 0.004088f, 0.000694f, -0.001179f, 0.002137f, 0.001456f, 0.000012f, -0.000378f, 0.000206f, -0.001494f, -0.000288f, 0.000347f, 0.000409f, -0.000060f, -0.015588f, -0.030559f, 0.011318f, 0.000097f, 0.000612f, -0.003065f, -0.003278f, -0.000747f, 0.001035f, -0.001991f, 0.007963f, -0.003707f, -0.006989f, 0.000396f, 0.000422f, -0.000939f, -0.002477f, 0.005417f, 0.000967f, -0.002466f, 0.002511f, -0.004852f, 0.006098f, -0.003450f, -0.001807f, -0.004197f, 0.006810f, -0.002980f, -0.001013f, -0.004161f, -0.001938f, 0.003680f, -0.001757f, 0.003987f, -0.005217f, -0.006097f, 0.000472f, 0.001024f, 0.001025f, -0.000193f, -0.003169f, 0.000549f, 0.001593f, 0.000773f, 0.003140f, -0.000052f, 0.004939f, 0.000655f, 0.004627f, 0.006060f, 0.001241f, -0.000496f, 0.001121f, -0.003452f, -0.000904f, -0.005742f, -0.005112f, + 0.001455f, 0.001481f, 0.000961f, -0.000384f, -0.001665f, -0.000883f, -0.001430f, -0.000809f, -0.001428f, -0.000004f, -0.000166f, 0.001034f, -0.000388f, -0.000699f, -0.001989f, -0.000184f, -0.002303f, -0.000307f, -0.003045f, -0.000430f, -0.001158f, -0.000367f, -0.010243f, 0.029825f, -0.013612f, 0.006210f, -0.002902f, 0.009460f, -0.001512f, -0.004206f, -0.004387f, 0.002470f, -0.001320f, -0.000583f, 0.000199f, 0.001835f, -0.010048f, -0.004917f, -0.002604f, 0.003969f, 0.003336f, 0.005831f, 0.001055f, -0.000910f, -0.000940f, 0.007001f, -0.009135f, 0.005265f, -0.004402f, -0.000934f, -0.004636f, 0.007232f, 0.002900f, -0.004735f, 0.000616f, -0.002087f, 0.000772f, 0.003056f, -0.013103f, -0.005489f, 0.001070f, 0.004582f, -0.002701f, 0.000950f, 0.003353f, -0.001383f, -0.001484f, -0.000497f, 0.005064f, 0.001982f, 0.000865f, 0.000549f, 0.001951f, 0.005934f, -0.003615f, 0.002704f, -0.008360f, -0.001462f, 0.001883f, 0.004014f, 0.000756f, 0.000566f, 0.000195f, 0.002166f, -0.001635f, 0.000234f, -0.000587f, -0.001986f, -0.001715f, 0.003108f, 0.003043f, -0.001165f, -0.001578f, -0.005217f, -0.002198f, -0.001181f, + -0.000929f, 0.003776f, -0.001444f, -0.001435f, -0.002542f, -0.002314f, -0.000182f, -0.026788f, -0.005789f, 0.002609f, -0.006362f, 0.001588f, 0.001155f, 0.003913f, -0.000031f, 0.007469f, 0.004872f, 0.002694f, -0.002062f, -0.003681f, -0.000202f, 0.007903f, -0.006779f, -0.002595f, -0.005256f, -0.000125f, -0.014346f, -0.011311f, 0.000700f, 0.007006f, 0.009643f, 0.002221f, -0.003525f, 0.003285f, -0.003131f, -0.002091f, -0.002136f, 0.000948f, 0.002517f, 0.000610f, 0.003746f, -0.002858f, -0.005110f, 0.004214f, 0.002765f, 0.008858f, -0.001098f, 0.001438f, -0.001282f, 0.007144f, -0.007450f, -0.003741f, -0.001771f, -0.005651f, 0.003584f, -0.002334f, 0.003008f, -0.006053f, 0.006022f, 0.005848f, 0.005377f, -0.002199f, 0.004766f, 0.000254f, 0.001658f, 0.002797f, 0.001987f, -0.002531f, 0.000436f, -0.000789f, -0.000144f, 0.005497f, 0.002049f, -0.002418f, 0.004448f, -0.000723f, -0.003856f, -0.001276f, -0.000281f, -0.005421f, -0.000220f, 0.002263f, 0.002950f, 0.000471f, -0.000114f, -0.002239f, 0.000822f, 0.001315f, 0.019448f, 0.012657f, -0.003944f, 0.005757f, -0.012875f, 0.009100f, 0.003356f, 0.006856f, + -0.002310f, -0.001691f, -0.007035f, -0.003599f, -0.012046f, -0.002064f, -0.009585f, -0.002894f, -0.005895f, -0.006039f, -0.008140f, 0.003267f, -0.011132f, 0.001525f, 0.004850f, -0.002122f, 0.001546f, -0.004782f, -0.000039f, -0.001477f, -0.001568f, -0.006526f, -0.000860f, 0.000776f, -0.000425f, -0.000989f, -0.003407f, -0.002960f, 0.002040f, 0.002169f, 0.002851f, 0.014199f, -0.005698f, -0.000310f, 0.005762f, -0.001358f, -0.002342f, -0.005423f, 0.001698f, 0.004833f, 0.007980f, 0.002703f, 0.006656f, -0.006471f, -0.009735f, 0.000948f, 0.006410f, 0.003595f, -0.005248f, 0.006134f, -0.004596f, 0.002964f, 0.001236f, 0.005577f, 0.003157f, 0.002058f, 0.003780f, -0.003740f, 0.002416f, 0.002017f, 0.001155f, 0.005478f, 0.001272f, 0.004430f, -0.000643f, -0.001750f, 0.000717f, 0.001065f, 0.000934f, 0.005318f, -0.000832f, -0.002969f, -0.000268f, 0.039181f, -0.025388f, -0.001395f, 0.002923f, 0.000772f, 0.003071f, 0.005353f, -0.001101f, -0.000880f, 0.002994f, -0.004545f, -0.004345f, -0.000727f, 0.003456f, 0.014091f, 0.000574f, 0.004858f, -0.004563f, 0.000269f, -0.013968f, 0.008603f, -0.008456f, -0.012033f, + 0.002777f, 0.003359f, -0.004478f, 0.003998f, 0.001665f, 0.009301f, 0.010293f, -0.001728f, -0.003912f, -0.002952f, -0.015430f, -0.008414f, 0.012061f, 0.003971f, 0.004426f, -0.006966f, -0.007153f, 0.002100f, -0.001403f, -0.006153f, 0.005335f, -0.001181f, -0.003860f, -0.004450f, 0.003014f, -0.003988f, -0.002144f, 0.014149f, -0.008652f, 0.002607f, -0.003117f, 0.003268f, -0.003905f, -0.001611f, -0.010586f, 0.001764f, -0.003932f, -0.002650f, 0.008424f, 0.002020f, 0.002336f, 0.005091f, 0.006105f, 0.001805f, 0.004220f, -0.001908f, -0.000521f, -0.006962f, 0.003155f, 0.005708f, -0.001328f, 0.000354f, -0.000655f, -0.001466f, -0.001805f, 0.000619f, -0.001855f, -0.000859f, -0.024487f, -0.012104f, 0.004432f, -0.001603f, 0.008759f, -0.001344f, -0.002415f, -0.007139f, -0.007984f, 0.004084f, -0.008342f, -0.002950f, -0.004770f, -0.001018f, -0.005028f, -0.003481f, -0.004055f, -0.002134f, -0.005007f, -0.009432f, 0.005273f, -0.018615f, -0.000283f, 0.016482f, 0.003958f, -0.000186f, -0.004619f, 0.001076f, -0.016844f, 0.006818f, 0.004126f, 0.001056f, 0.005970f, 0.008900f, -0.007185f, -0.003841f, -0.007473f, 0.000983f, + 0.000179f, -0.004485f, -0.005087f, -0.005653f, -0.003374f, -0.000361f, 0.003599f, 0.000196f, 0.002938f, 0.001602f, 0.000295f, 0.011394f, 0.002689f, -0.001962f, 0.009044f, -0.004567f, -0.010436f, -0.003297f, -0.001288f, -0.001602f, -0.000740f, -0.003699f, -0.000872f, -0.004585f, -0.001140f, -0.004661f, 0.000398f, 0.002335f, -0.005033f, -0.001529f, -0.002800f, 0.000092f, -0.005101f, -0.006518f, -0.002827f, 0.002476f, 0.004477f, 0.001711f, -0.001551f, -0.000291f, 0.001687f, -0.000945f, -0.001104f, -0.002362f, 0.000980f, 0.002271f, 0.000447f, -0.000226f, -0.002867f, -0.015074f, 0.020182f, -0.010042f, -0.005012f, -0.016592f, 0.012843f, -0.004610f, 0.007540f, 0.000417f, 0.000398f, -0.005073f, 0.010049f, -0.002582f, 0.003226f, 0.002455f, -0.004704f, -0.001630f, -0.001571f, -0.008815f, 0.001675f, 0.001538f, -0.006849f, -0.011422f, -0.007136f, -0.010512f, -0.002618f, 0.005625f, 0.002898f, -0.006206f, -0.006201f, 0.009102f, 0.006223f, -0.007955f, 0.007200f, -0.003986f, 0.006361f, -0.010069f, -0.008000f, -0.007685f, 0.002642f, -0.006810f, 0.004210f, -0.003096f, 0.001737f, -0.001903f, -0.001043f, 0.001539f, + 0.007229f, -0.016011f, -0.002096f, 0.003152f, -0.001533f, -0.004892f, -0.011600f, -0.001061f, 0.010505f, -0.000062f, 0.009093f, 0.006724f, 0.001884f, -0.001339f, 0.006924f, -0.006973f, -0.005769f, 0.004437f, -0.001751f, -0.004340f, 0.002882f, 0.000837f, -0.003456f, -0.004981f, 0.008310f, -0.007840f, -0.004337f, -0.004694f, 0.004681f, 0.000221f, -0.003447f, -0.001919f, 0.002398f, -0.007236f, -0.000066f, 0.001919f, 0.001386f, 0.000156f, -0.002548f, -0.003524f, -0.034641f, 0.012869f, 0.005438f, -0.008735f, 0.004268f, -0.009878f, 0.008841f, 0.007617f, 0.006485f, -0.017768f, 0.010705f, 0.018752f, -0.002626f, 0.006350f, 0.000267f, -0.005888f, -0.007685f, 0.020658f, -0.000309f, -0.001867f, -0.011419f, -0.022547f, -0.012223f, 0.001098f, -0.009994f, 0.008257f, -0.014784f, -0.004949f, -0.008744f, 0.002339f, -0.003442f, -0.011055f, 0.001806f, -0.002593f, 0.007188f, -0.002490f, -0.008689f, -0.003377f, -0.026523f, 0.004686f, -0.000866f, 0.012181f, -0.007541f, -0.008369f, 0.011372f, 0.002335f, 0.001828f, -0.004642f, -0.007143f, 0.002457f, 0.005148f, 0.003698f, -0.001915f, 0.003932f, 0.002123f, 0.000390f, + -0.002376f, -0.002578f, -0.008795f, 0.000606f, -0.003532f, -0.005175f, 0.004527f, 0.002496f, 0.012828f, 0.002612f, -0.008749f, -0.008816f, 0.001856f, -0.005745f, -0.004220f, 0.001355f, -0.004340f, -0.000290f, -0.002035f, -0.002634f, 0.002393f, -0.003529f, 0.001196f, -0.000528f, -0.000756f, -0.001379f, -0.001964f, -0.004313f, -0.005174f, -0.001692f, -0.004468f, 0.028889f, -0.011377f, 0.000199f, 0.001621f, 0.012087f, -0.001530f, -0.002327f, 0.008296f, 0.014242f, -0.009576f, -0.011055f, 0.008657f, -0.001626f, 0.007533f, 0.010913f, 0.009087f, 0.007846f, 0.006287f, 0.007415f, 0.028053f, -0.002346f, 0.002083f, 0.005485f, 0.015484f, -0.003171f, -0.005651f, 0.005990f, -0.000401f, -0.005013f, -0.006208f, -0.005406f, 0.000163f, -0.007037f, 0.010708f, 0.016153f, -0.000822f, -0.003963f, 0.006760f, -0.003880f, 0.009669f, 0.006961f, 0.000265f, -0.008279f, 0.006365f, -0.000590f, -0.002696f, 0.001362f, -0.001114f, 0.018801f, -0.001553f, 0.008215f, -0.004096f, 0.016760f, -0.001524f, 0.001562f, -0.005769f, -0.010079f, 0.008563f, -0.004976f, 0.016888f, 0.003774f, 0.008024f, 0.000140f, 0.000125f, 0.004963f, + 0.001356f, 0.012126f, 0.006787f, 0.002276f, 0.006121f, -0.006981f, 0.002736f, 0.005632f, 0.000679f, -0.001917f, 0.009965f, 0.002544f, -0.003171f, -0.003156f, 0.004046f, -0.001737f, 0.000103f, 0.005679f, -0.001637f, 0.003498f, 0.001460f, -0.002992f, 0.037373f, -0.010780f, 0.003504f, -0.003578f, 0.001659f, 0.004817f, 0.012559f, -0.009744f, 0.005259f, -0.000204f, 0.000673f, 0.006818f, -0.005579f, 0.007290f, -0.019694f, -0.008926f, 0.003294f, 0.007333f, 0.005188f, 0.015662f, -0.015590f, 0.002434f, -0.002339f, -0.021358f, 0.009086f, -0.008308f, -0.005431f, -0.003115f, -0.017543f, 0.005691f, 0.006151f, 0.002728f, -0.009159f, -0.015330f, 0.005995f, -0.009499f, 0.008288f, -0.014688f, 0.000188f, -0.017573f, -0.004332f, -0.011739f, -0.010200f, 0.010384f, 0.016158f, 0.002245f, 0.005933f, -0.007469f, 0.002996f, -0.012526f, 0.005292f, -0.008229f, 0.002258f, 0.011983f, 0.006084f, -0.004229f, 0.007250f, 0.001197f, 0.006275f, -0.005410f, 0.010527f, 0.018024f, 0.000952f, -0.010913f, -0.007559f, -0.004884f, -0.002016f, 0.001146f, 0.008082f, 0.001591f, 0.013137f, -0.000062f, 0.005017f, -0.011965f, + -0.001782f, -0.008644f, -0.001656f, -0.001303f, 0.002685f, -0.010851f, 0.001463f, -0.000846f, 0.003239f, 0.001158f, 0.002017f, 0.001079f, 0.000841f, -0.038108f, -0.031968f, 0.013507f, -0.004010f, 0.015707f, -0.001222f, 0.005140f, -0.019100f, -0.017919f, -0.010897f, 0.005989f, -0.014786f, -0.010201f, -0.004371f, 0.002971f, 0.010816f, 0.003862f, -0.021678f, 0.005846f, 0.012128f, -0.030751f, -0.003665f, 0.001486f, -0.032645f, -0.011200f, 0.014542f, -0.030241f, 0.014820f, 0.015596f, 0.000200f, -0.004362f, -0.001233f, -0.007276f, -0.008027f, 0.005429f, 0.006681f, 0.022687f, -0.013404f, -0.007036f, -0.005634f, -0.010527f, 0.000622f, -0.017973f, -0.004481f, 0.001373f, -0.000507f, -0.005846f, -0.000913f, -0.009898f, -0.002008f, 0.005530f, -0.002472f, -0.006451f, 0.007504f, -0.003512f, -0.007345f, -0.010492f, 0.022339f, -0.000931f, 0.013611f, 0.001798f, 0.005108f, 0.014727f, 0.002130f, 0.010033f, -0.006677f, 0.011149f, 0.008093f, 0.002425f, 0.002927f, 0.002734f, 0.009718f, 0.004430f, 0.001808f, 0.009385f, -0.003985f, 0.001368f, -0.001087f, -0.014659f, 0.006861f, 0.003482f, 0.002007f, -0.008976f, + -0.002554f, 0.001665f, 0.002851f, -0.002583f, -0.061833f, 0.023317f, -0.006832f, -0.027738f, -0.006770f, 0.000698f, -0.007174f, 0.010709f, -0.024015f, 0.011563f, -0.001938f, -0.027615f, -0.019037f, 0.003778f, 0.010963f, 0.010355f, 0.007600f, 0.016257f, 0.004643f, 0.026740f, 0.014640f, 0.031342f, 0.004072f, 0.025459f, -0.019617f, -0.015456f, 0.005267f, 0.002209f, -0.015561f, 0.004347f, 0.003294f, -0.002174f, -0.005935f, 0.015085f, 0.002885f, -0.033307f, -0.014851f, 0.011154f, 0.003841f, -0.007073f, 0.009520f, 0.009707f, 0.015126f, 0.003245f, 0.004486f, 0.002818f, 0.004390f, 0.005514f, -0.011574f, 0.001750f, 0.002124f, -0.024637f, 0.011603f, 0.008534f, 0.010446f, -0.016891f, -0.009802f, 0.012301f, 0.000012f, -0.003286f, -0.002550f, -0.007233f, -0.006385f, 0.000028f, -0.008496f, -0.018945f, 0.006438f, 0.020176f, -0.014200f, 0.001955f, -0.008073f, -0.003291f, -0.005885f, -0.001848f, 0.010405f, 0.002481f, 0.008597f, 0.002489f, -0.009155f, -0.006523f, -0.007436f, -0.004469f, -0.006082f, 0.001438f, -0.003857f, -0.000849f, -0.005821f, 0.001837f, 0.003012f, 0.003292f, -0.001768f, -0.005835f, + 0.000097f, 0.025950f, 0.017542f, 0.012129f, 0.006593f, 0.000803f, -0.006048f, -0.009215f, 0.008134f, -0.025892f, 0.027317f, -0.016931f, 0.004391f, -0.028107f, -0.001040f, 0.026431f, 0.010370f, -0.009367f, 0.016757f, -0.026702f, 0.010653f, 0.004972f, 0.001853f, -0.032880f, -0.009876f, 0.002009f, 0.005274f, 0.021113f, -0.032362f, -0.004376f, -0.010763f, -0.030458f, -0.006700f, 0.007295f, 0.015194f, 0.022821f, 0.017716f, 0.017649f, -0.001531f, -0.011358f, 0.011604f, 0.003506f, -0.007001f, 0.004159f, -0.014903f, 0.023643f, 0.011042f, 0.007994f, -0.012366f, -0.027066f, -0.007266f, 0.000609f, -0.032829f, -0.026530f, -0.007012f, -0.023798f, 0.015244f, 0.005904f, 0.004712f, -0.010967f, -0.011815f, 0.004564f, 0.003273f, 0.001982f, 0.007299f, -0.004591f, 0.005502f, 0.015630f, 0.007059f, 0.002637f, 0.002069f, -0.010326f, -0.008700f, -0.007777f, 0.004495f, -0.002781f, -0.021058f, -0.016820f, -0.001746f, -0.013550f, -0.012051f, -0.003470f, -0.017400f, -0.010917f, -0.002798f, 0.000909f, -0.002558f, -0.001161f, 0.004064f, -0.003345f, -0.001339f, 0.000905f, 0.000536f, -0.005077f, 0.029861f, -0.023299f, + 0.006269f, -0.003295f, -0.003024f, 0.000547f, 0.008262f, -0.014513f, 0.019426f, -0.005605f, 0.013323f, -0.001297f, -0.010810f, 0.020665f, 0.020389f, 0.014590f, -0.006824f, 0.031315f, 0.011598f, -0.035010f, 0.036112f, 0.003298f, -0.000095f, 0.026100f, 0.001161f, -0.011318f, -0.015135f, 0.025762f, -0.016128f, -0.021518f, 0.020853f, 0.018184f, -0.011832f, -0.028618f, 0.011237f, -0.009819f, 0.003989f, -0.020129f, -0.016491f, -0.006834f, 0.019529f, 0.017530f, 0.002331f, 0.016088f, -0.023341f, 0.007540f, -0.006123f, -0.008695f, 0.011215f, 0.001581f, 0.003458f, -0.032689f, -0.008922f, 0.018204f, -0.023342f, -0.006071f, -0.029288f, -0.005451f, -0.010915f, 0.004955f, -0.007045f, 0.003326f, 0.003064f, -0.000992f, 0.002989f, -0.007828f, -0.026003f, -0.004899f, 0.013336f, -0.001756f, 0.009267f, -0.010016f, -0.022807f, -0.004041f, 0.005106f, 0.014557f, 0.003608f, 0.007973f, -0.000783f, 0.003284f, 0.005561f, 0.003362f, -0.007880f, 0.002031f, -0.003185f, 0.003447f, -0.006259f, 0.003779f, 0.001613f, 0.000455f, -0.000637f, -0.005462f, -0.002667f, 0.027055f, 0.002077f, -0.007877f, -0.019391f, -0.000662f, + -0.009271f, 0.007203f, -0.016018f, 0.010176f, 0.006479f, -0.014006f, -0.014366f, 0.021659f, -0.025550f, -0.001008f, 0.016486f, -0.018501f, 0.005953f, 0.021168f, -0.016854f, 0.014516f, 0.010660f, 0.015537f, -0.025588f, 0.022087f, -0.025694f, 0.007734f, -0.019561f, 0.002434f, -0.010009f, 0.017389f, 0.000525f, 0.010640f, 0.005484f, -0.018258f, -0.011137f, -0.025237f, 0.014709f, -0.017098f, 0.014791f, -0.020559f, -0.023407f, -0.039197f, 0.003817f, 0.020564f, -0.003147f, -0.000613f, 0.006497f, 0.017723f, -0.006016f, 0.004751f, -0.021652f, 0.005494f, 0.028743f, -0.002915f, 0.026060f, 0.034091f, -0.000224f, 0.005699f, 0.007010f, -0.014581f, 0.007564f, -0.017663f, -0.000886f, -0.018130f, -0.017564f, 0.001015f, -0.006653f, -0.029780f, 0.020174f, 0.000460f, 0.015009f, -0.017584f, -0.008964f, -0.006739f, 0.007699f, -0.000191f, -0.004640f, -0.004651f, -0.002994f, -0.001165f, 0.001720f, 0.001899f, -0.003527f, 0.004019f, -0.004046f, -0.004052f, -0.002236f, 0.005683f, 0.004263f, 0.004720f, -0.002308f, 0.003551f, -0.061278f, 0.015582f, 0.022986f, 0.006399f, -0.026534f, -0.003860f, 0.043266f, -0.049653f, + -0.001221f, -0.008350f, -0.032454f, -0.008162f, -0.021977f, 0.008102f, 0.008069f, 0.019033f, 0.007745f, -0.025942f, -0.009175f, 0.018762f, -0.029594f, -0.008387f, -0.031652f, 0.027091f, 0.008172f, 0.021199f, 0.036117f, -0.012668f, -0.007558f, -0.005908f, -0.018012f, 0.017344f, -0.008419f, -0.021481f, -0.024079f, -0.004184f, 0.009318f, -0.000628f, 0.004989f, 0.005935f, 0.014102f, -0.006122f, -0.000594f, 0.010462f, -0.009975f, 0.020470f, 0.023301f, 0.021970f, -0.017696f, 0.002436f, -0.005467f, 0.010543f, 0.043895f, 0.032926f, 0.062808f, 0.005040f, 0.024880f, 0.020132f, -0.009452f, -0.002094f, -0.003203f, -0.005788f, 0.008005f, 0.001914f, 0.022669f, 0.017077f, -0.007569f, -0.002242f, -0.013327f, -0.026265f, 0.010670f, -0.000310f, 0.009090f, -0.001844f, -0.018112f, -0.002596f, 0.002837f, -0.010091f, 0.006248f, -0.006409f, -0.008743f, 0.000321f, -0.008761f, 0.000031f, -0.002359f, -0.002119f, 0.000163f, 0.001426f, -0.005434f, 0.000851f, 0.000455f, 0.000042f, 0.002319f, 0.095118f, 0.045863f, 0.016303f, 0.014684f, -0.022672f, 0.014538f, -0.018327f, 0.021799f, 0.017838f, 0.016724f, 0.004228f, + -0.031215f, -0.017507f, 0.033926f, 0.005805f, -0.002028f, -0.007282f, 0.037984f, -0.041305f, -0.017399f, -0.010436f, -0.003136f, -0.029288f, 0.006894f, -0.025325f, -0.014156f, 0.004074f, -0.016055f, 0.023486f, -0.022799f, -0.009917f, -0.005660f, 0.025107f, -0.041941f, -0.008167f, -0.031233f, -0.001001f, -0.000231f, -0.027472f, 0.004408f, 0.021396f, 0.011583f, -0.000617f, -0.012937f, 0.001038f, 0.012853f, -0.017332f, 0.034530f, 0.046932f, -0.003050f, -0.029370f, -0.027644f, 0.019276f, -0.007081f, -0.006473f, 0.040394f, -0.008737f, 0.012829f, -0.001234f, 0.025365f, -0.005228f, 0.003227f, -0.005013f, -0.016220f, -0.045102f, -0.026972f, -0.004350f, -0.012170f, -0.031129f, -0.020495f, 0.011539f, 0.026020f, -0.002282f, -0.003449f, -0.002916f, -0.004293f, 0.014177f, 0.008954f, 0.001916f, -0.008876f, 0.009905f, -0.005889f, -0.020687f, -0.019790f, 0.002428f, 0.013427f, -0.016156f, 0.010462f, -0.001154f, -0.006245f, -0.005476f, 0.000324f, -0.009086f, -0.007026f, 0.000275f, -0.002771f, -0.001462f} +}; +const float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS][2870]={ {-0.004481f, 0.002514f, -0.001425f, 0.000635f, -0.000793f, 0.000202f, -0.000577f, -0.000144f, 0.000043f, 0.001204f, -0.000761f, 0.000531f, -0.001239f, 0.000940f, -0.001392f, -0.001895f, -0.001655f, 0.000398f, -0.000160f, 0.000274f, 0.000053f, -0.000833f, 0.000504f, 0.000853f, -0.000454f, 0.000677f, -0.000086f, -0.000273f, -0.000558f, -0.000091f, 0.000184f, 0.000458f, -0.000306f, 0.000668f, -0.000248f, 0.000422f, 0.000610f, -0.000419f, -0.000394f, 0.000036f, -0.000404f, 0.000121f, 0.000025f, -0.000176f, 0.000409f, 0.000071f, -0.000165f, 0.001707f, -0.001764f, -0.000327f, -0.000370f, -0.000411f, -0.000125f, -0.000029f, -0.000334f, -0.000244f, 0.000005f, 0.000072f, -0.000244f, 0.000142f, -0.000546f, -0.000163f, -0.000087f, 0.000331f, -0.001876f, -0.000178f, 0.000390f, -0.000180f, -0.000226f, 0.000163f, 0.000038f, 0.000132f, 0.000867f, -0.000418f, -0.000275f, -0.000463f, -0.000084f, 0.000254f, 0.000391f, -0.000397f, -0.000295f, 0.000461f, -0.000421f, -0.000630f, -0.000067f, -0.000172f, 0.000222f, -0.000187f, -0.000177f, 0.000104f, 0.000196f, -0.000388f, 0.000130f, 0.000147f, -0.006023f, -0.004100f, + -0.001658f, -0.001906f, -0.001056f, -0.000999f, -0.000936f, -0.000431f, -0.001130f, -0.000900f, -0.000385f, -0.000702f, -0.000086f, -0.000256f, -0.000602f, -0.000828f, -0.000916f, -0.000367f, -0.000528f, -0.000933f, -0.000115f, -0.001166f, 0.000011f, -0.000092f, -0.000154f, -0.000707f, -0.000114f, -0.000536f, 0.000011f, -0.000690f, -0.000431f, 0.000234f, -0.000498f, 0.000086f, -0.001166f, -0.000219f, 0.000580f, 0.000349f, -0.000014f, -0.000173f, -0.000330f, 0.000093f, 0.000115f, 0.000542f, -0.000318f, -0.000056f, -0.000160f, -0.007922f, -0.000437f, 0.001025f, -0.000022f, 0.000309f, -0.000060f, 0.000013f, -0.000640f, 0.000681f, 0.000261f, 0.000819f, 0.000575f, 0.001674f, 0.001221f, 0.000099f, -0.000665f, -0.000375f, -0.000161f, 0.000317f, -0.000229f, -0.001469f, -0.001329f, -0.000681f, -0.000210f, 0.000069f, 0.000182f, 0.000277f, -0.000058f, 0.000051f, 0.000157f, -0.000305f, -0.000047f, -0.000038f, -0.000913f, 0.000539f, 0.000215f, -0.000096f, -0.000015f, -0.000343f, -0.000509f, 0.000318f, 0.000115f, -0.000325f, 0.000310f, 0.000272f, 0.000379f, -0.000167f, 0.008884f, 0.006243f, 0.001224f, 0.002418f, + 0.000498f, 0.000801f, 0.001968f, 0.001016f, 0.000311f, 0.001187f, 0.000480f, -0.000520f, -0.000261f, 0.000413f, 0.000684f, -0.001204f, -0.000164f, -0.000722f, 0.001602f, 0.000798f, 0.000408f, 0.000798f, 0.000405f, 0.000413f, 0.000018f, -0.000078f, -0.000396f, 0.000628f, 0.000758f, 0.000648f, 0.000807f, 0.000978f, 0.000583f, 0.001429f, 0.000321f, -0.000081f, 0.000507f, 0.000094f, -0.000251f, -0.000113f, -0.000224f, -0.000283f, 0.000005f, 0.000663f, 0.000157f, 0.000109f, 0.000384f, 0.013257f, 0.005638f, 0.001703f, 0.001552f, 0.001084f, 0.000672f, 0.000213f, 0.000052f, 0.001453f, 0.000295f, 0.000805f, 0.001097f, 0.000578f, -0.000076f, -0.000405f, 0.002318f, -0.000211f, -0.001266f, -0.000727f, 0.000577f, 0.000031f, 0.001240f, 0.000405f, 0.000154f, -0.000230f, -0.000575f, -0.000165f, -0.000263f, 0.000542f, -0.000092f, 0.000224f, 0.000057f, 0.000083f, -0.000295f, 0.000439f, 0.001611f, 0.001016f, 0.001071f, 0.000961f, 0.000798f, 0.000433f, 0.000313f, 0.000181f, 0.000529f, -0.000447f, 0.000325f, -0.000212f, 0.004354f, -0.004589f, -0.001404f, -0.001974f, -0.001732f, -0.000924f, + -0.000289f, 0.000653f, -0.000652f, 0.000081f, -0.001715f, 0.000594f, -0.000632f, -0.001532f, 0.000397f, -0.001092f, -0.001484f, -0.001042f, 0.001398f, 0.001073f, -0.000507f, 0.000551f, -0.000986f, 0.000390f, -0.001786f, 0.000103f, 0.000283f, -0.000292f, -0.000426f, 0.000381f, -0.001415f, -0.000629f, 0.000172f, -0.000482f, -0.000424f, -0.000311f, 0.000106f, 0.000158f, 0.000701f, 0.000050f, 0.001215f, -0.000465f, -0.000344f, -0.000377f, -0.000613f, -0.000180f, -0.000311f, 0.000180f, -0.000529f, -0.000797f, -0.015738f, -0.007994f, -0.002855f, -0.002254f, -0.002436f, -0.001543f, -0.002105f, -0.001386f, -0.002293f, -0.000428f, -0.001033f, -0.000277f, 0.000110f, -0.000966f, -0.000258f, 0.000140f, 0.000016f, -0.001463f, -0.000960f, -0.000668f, 0.000140f, -0.001969f, 0.000198f, -0.000899f, -0.001738f, 0.000140f, -0.000021f, 0.000111f, -0.000042f, -0.000624f, -0.000469f, 0.000011f, -0.000131f, -0.000031f, -0.000649f, 0.000012f, 0.000177f, 0.000517f, 0.000201f, -0.000686f, 0.000388f, -0.000685f, 0.000459f, -0.001172f, -0.000793f, 0.000167f, -0.000643f, 0.000024f, -0.000243f, -0.000943f, -0.009307f, 0.004880f, + 0.002055f, 0.000756f, 0.001265f, 0.000229f, 0.000342f, 0.001103f, 0.001243f, 0.000665f, 0.000829f, -0.000633f, -0.000262f, -0.000984f, 0.001193f, 0.000243f, 0.000218f, 0.001618f, 0.000056f, -0.001094f, 0.001933f, -0.001286f, 0.000159f, 0.001589f, -0.000479f, 0.000413f, 0.000209f, -0.000042f, -0.000798f, -0.000196f, 0.000444f, 0.000455f, 0.000080f, -0.000290f, 0.000034f, -0.000569f, 0.001824f, 0.000150f, -0.000026f, -0.000722f, -0.000358f, -0.000469f, -0.000431f, 0.000980f, 0.000946f, -0.000250f, 0.000096f, -0.000068f, 0.000287f, 0.000063f, -0.000060f, -0.000200f, 0.000226f, 0.000142f, -0.000274f, -0.000263f, 0.014014f, 0.005953f, 0.001591f, 0.003214f, 0.001866f, 0.000799f, 0.001399f, 0.001205f, 0.000001f, 0.000879f, 0.001389f, 0.000321f, 0.000001f, 0.000711f, 0.001957f, -0.000663f, -0.000362f, -0.001549f, 0.000392f, 0.001786f, 0.000753f, 0.000083f, -0.001011f, -0.000542f, -0.000436f, 0.001881f, 0.000581f, 0.000984f, 0.000547f, -0.000893f, -0.001441f, 0.001631f, 0.000891f, -0.001002f, -0.000483f, 0.001585f, 0.001330f, -0.000067f, 0.000327f, -0.000166f, 0.000692f, 0.000445f, + -0.000160f, 0.000323f, -0.000565f, -0.000262f, 0.000848f, -0.000450f, -0.000355f, 0.000912f, 0.000773f, 0.000433f, 0.000149f, 0.000190f, 0.000185f, 0.000651f, 0.016574f, 0.003606f, 0.002758f, 0.001228f, 0.001262f, 0.000546f, 0.001299f, 0.001552f, 0.002450f, 0.001519f, -0.000471f, 0.001946f, -0.000380f, 0.000532f, 0.000424f, 0.001649f, 0.002410f, 0.001568f, -0.000426f, 0.002713f, -0.000521f, -0.000266f, -0.001430f, 0.000397f, -0.000432f, 0.000456f, 0.000719f, -0.000804f, -0.001143f, -0.000457f, 0.000213f, -0.000897f, -0.000309f, 0.000430f, 0.000591f, -0.001054f, -0.000921f, -0.000366f, 0.000340f, 0.000008f, 0.000272f, -0.000373f, -0.000019f, -0.000247f, -0.000372f, 0.000449f, -0.000627f, 0.000603f, -0.000672f, -0.000215f, -0.000515f, 0.000124f, -0.000194f, 0.000677f, 0.000284f, -0.000036f, 0.001906f, -0.007339f, -0.002373f, -0.002613f, -0.001706f, 0.000469f, -0.000432f, -0.001562f, 0.000889f, 0.000082f, 0.001096f, -0.000108f, 0.000104f, -0.001703f, -0.001225f, -0.000783f, -0.001260f, 0.000124f, -0.001340f, -0.002547f, 0.000497f, 0.000318f, -0.001201f, -0.000242f, -0.001091f, 0.000246f, + 0.000353f, -0.000191f, -0.002656f, -0.000731f, 0.000157f, -0.000276f, 0.000216f, 0.000731f, -0.001893f, -0.000546f, -0.001187f, 0.000630f, -0.000156f, -0.000081f, 0.001223f, -0.001230f, -0.000094f, 0.000405f, -0.000168f, -0.000392f, 0.000587f, 0.000335f, -0.000757f, -0.000898f, -0.001470f, -0.000203f, -0.001125f, -0.000885f, -0.000485f, -0.000606f, -0.000381f, -0.000153f, -0.000351f, -0.000544f, -0.000764f, -0.000412f, 0.000264f, -0.017218f, -0.005865f, -0.003510f, -0.000911f, -0.001809f, -0.000083f, -0.000971f, -0.001295f, -0.001563f, 0.001947f, 0.000063f, -0.000764f, -0.000168f, -0.002876f, -0.001611f, -0.001409f, 0.002356f, -0.001979f, -0.004140f, 0.000335f, 0.000529f, 0.000317f, -0.001510f, -0.000414f, 0.000896f, -0.001920f, -0.000178f, -0.001958f, -0.000562f, 0.001083f, -0.000917f, 0.000260f, 0.002145f, 0.000226f, -0.000418f, -0.000521f, 0.000599f, 0.000654f, 0.000555f, -0.000638f, -0.000095f, 0.000680f, 0.000959f, 0.000560f, 0.000340f, -0.001795f, 0.000363f, -0.000090f, -0.000883f, -0.000342f, 0.000201f, -0.000245f, -0.000893f, -0.000610f, -0.000927f, -0.000276f, 0.000075f, 0.000132f, -0.000118f, + -0.000667f, -0.000094f, -0.000519f, -0.000016f, -0.011435f, 0.002648f, 0.000174f, -0.001397f, 0.002054f, -0.001297f, -0.000998f, 0.000516f, -0.001928f, -0.001155f, -0.000407f, 0.000802f, -0.001520f, 0.002082f, 0.000049f, -0.000057f, 0.000978f, 0.000970f, 0.001531f, -0.000164f, 0.002107f, 0.003020f, 0.002187f, 0.000689f, 0.001872f, -0.000607f, 0.001191f, -0.001379f, -0.001401f, -0.000589f, 0.000179f, 0.000914f, -0.000734f, -0.001324f, -0.000709f, -0.000034f, 0.000823f, -0.001280f, 0.000929f, 0.000315f, 0.000718f, -0.000328f, -0.001160f, -0.001574f, -0.001863f, 0.000487f, -0.000950f, 0.000507f, -0.001976f, -0.000577f, 0.000898f, -0.001254f, 0.000213f, -0.000882f, 0.000606f, -0.000286f, 0.000589f, 0.000134f, -0.000346f, -0.000035f, -0.000791f, 0.001487f, 0.000635f, 0.007650f, 0.012631f, 0.003665f, 0.003285f, 0.004560f, 0.003697f, 0.000730f, 0.002934f, 0.002611f, 0.001424f, 0.005528f, 0.001321f, 0.000943f, 0.002397f, 0.002219f, 0.001171f, 0.000988f, 0.000588f, 0.000928f, -0.000706f, 0.002798f, -0.000740f, 0.000279f, -0.000870f, 0.001776f, 0.000096f, -0.000446f, 0.001469f, 0.001751f, + 0.000622f, 0.002321f, -0.001628f, -0.002696f, -0.000603f, -0.000147f, 0.000595f, -0.000176f, 0.001175f, -0.001072f, 0.001070f, 0.002339f, 0.001010f, -0.002061f, -0.000421f, 0.001068f, 0.000421f, -0.001004f, 0.001473f, 0.000587f, 0.000875f, 0.000974f, 0.001316f, 0.000440f, -0.000358f, 0.000331f, -0.001176f, -0.000302f, 0.001111f, 0.001020f, -0.000564f, -0.000007f, 0.000278f, -0.000491f, 0.029002f, 0.003003f, -0.000292f, 0.001814f, -0.000055f, 0.002498f, 0.000028f, 0.000686f, 0.000313f, 0.002632f, 0.001220f, -0.001056f, 0.000876f, 0.001273f, 0.000671f, -0.001558f, -0.003281f, -0.001484f, -0.001379f, 0.000602f, -0.002015f, -0.000333f, -0.000129f, 0.000562f, 0.003607f, 0.002026f, 0.000679f, 0.001468f, -0.002247f, -0.000115f, -0.001178f, -0.000428f, -0.000928f, 0.001377f, -0.000519f, 0.002291f, -0.001043f, -0.000386f, -0.001164f, -0.000495f, -0.001681f, -0.000758f, 0.000386f, 0.000391f, -0.000088f, 0.000045f, -0.000922f, 0.000549f, 0.001563f, 0.000153f, -0.000841f, 0.001008f, -0.001381f, 0.000632f, 0.000608f, -0.000108f, -0.000429f, -0.000265f, -0.000060f, -0.000231f, 0.000070f, 0.000966f, + -0.000103f, -0.008442f, -0.010046f, -0.001867f, -0.000560f, -0.000411f, -0.001597f, -0.000660f, 0.003048f, 0.001805f, 0.000643f, 0.000832f, -0.001330f, -0.000266f, 0.002289f, -0.000842f, 0.003725f, -0.002891f, -0.000789f, 0.003038f, -0.000585f, -0.000339f, -0.001765f, 0.002083f, 0.002302f, 0.000045f, 0.002269f, -0.000824f, 0.001007f, -0.000045f, -0.001268f, -0.000198f, -0.001003f, -0.000417f, -0.000650f, 0.001255f, -0.000921f, -0.000217f, -0.001418f, 0.000963f, -0.000736f, 0.002100f, -0.003309f, 0.001394f, 0.001156f, -0.001998f, 0.000044f, -0.001319f, 0.000358f, -0.001501f, 0.000480f, 0.000631f, -0.001908f, -0.000285f, -0.000693f, -0.002840f, -0.001645f, -0.000785f, -0.001411f, -0.000304f, -0.000235f, 0.000159f, -0.001153f, 0.000168f, -0.002232f, 0.000630f, 0.000278f, -0.000766f, 0.000284f, -0.000765f, -0.000203f, -0.000496f, -0.000229f, -0.007420f, -0.004255f, -0.005756f, -0.002955f, -0.003845f, -0.000435f, 0.003711f, -0.003877f, 0.002983f, 0.001903f, -0.002113f, 0.004230f, -0.000669f, 0.000823f, -0.002762f, -0.000298f, -0.001228f, -0.000177f, 0.000018f, 0.001042f, 0.000510f, 0.002207f, 0.004234f, + -0.001147f, 0.000584f, -0.002026f, -0.002115f, -0.001880f, 0.000428f, 0.001759f, -0.000620f, -0.000617f, -0.000562f, -0.001310f, 0.001468f, -0.000463f, -0.000098f, -0.001283f, -0.001008f, -0.000855f, -0.001321f, -0.000114f, -0.000058f, -0.001120f, 0.000732f, -0.001713f, 0.000632f, -0.000996f, -0.000178f, 0.000617f, -0.001263f, 0.001558f, -0.002715f, -0.000848f, 0.000256f, -0.000808f, -0.001449f, 0.000707f, -0.000400f, -0.001634f, 0.002676f, 0.001510f, 0.000370f, 0.000507f, 0.000537f, 0.000653f, -0.001353f, -0.000891f, 0.000344f, -0.000485f, -0.000938f, 0.001007f, -0.020663f, -0.002362f, 0.001673f, -0.001511f, 0.003433f, 0.001587f, -0.004179f, 0.000570f, 0.000708f, -0.001344f, -0.003499f, -0.001293f, -0.000849f, 0.001005f, 0.000256f, -0.003235f, -0.001219f, -0.001723f, -0.003114f, -0.002622f, -0.006109f, -0.003176f, -0.003566f, -0.004327f, 0.003447f, -0.002297f, 0.001264f, 0.002588f, -0.001862f, -0.002931f, -0.001127f, -0.000625f, 0.000709f, 0.001946f, 0.001132f, -0.002426f, -0.003017f, 0.002392f, 0.001497f, 0.001894f, 0.002659f, 0.000394f, -0.000005f, 0.001052f, -0.000120f, -0.001163f, 0.000679f, + -0.000623f, -0.000397f, 0.001569f, 0.003979f, -0.001307f, -0.001980f, 0.000936f, -0.001259f, -0.000109f, 0.002054f, -0.003917f, -0.000047f, -0.001284f, -0.000207f, -0.000071f, 0.000032f, -0.000455f, 0.000793f, -0.001157f, 0.001433f, 0.001561f, 0.000662f, -0.000079f, -0.000002f, -0.001312f, 0.016556f, 0.014438f, 0.003911f, 0.008779f, 0.002429f, 0.005056f, -0.000820f, -0.000802f, 0.002457f, 0.003322f, 0.001764f, -0.005733f, -0.001901f, 0.003574f, 0.004037f, -0.001489f, -0.001946f, 0.000655f, 0.001681f, 0.001909f, 0.000284f, -0.002983f, -0.006407f, -0.002408f, 0.003497f, -0.000311f, 0.003594f, -0.000852f, -0.001144f, 0.000726f, -0.002979f, -0.001727f, -0.001733f, 0.003291f, -0.004104f, -0.002832f, 0.000737f, 0.000686f, -0.001057f, -0.000132f, -0.001177f, 0.001231f, 0.001678f, 0.001439f, 0.003251f, 0.001892f, 0.000055f, -0.002663f, 0.002504f, -0.000239f, 0.001387f, -0.001303f, 0.000968f, 0.001979f, -0.000302f, -0.000533f, -0.001240f, -0.001472f, 0.000901f, 0.000199f, 0.001274f, -0.001274f, 0.001064f, 0.002570f, -0.000541f, -0.001413f, 0.001792f, 0.002328f, -0.000947f, 0.001037f, 0.001167f, + 0.000931f, 0.002225f, 0.001898f, 0.020077f, 0.003747f, -0.003936f, 0.003266f, 0.002107f, -0.003801f, -0.000868f, 0.001947f, 0.000098f, 0.000627f, -0.000331f, -0.000792f, -0.004226f, -0.004106f, 0.001800f, 0.003887f, 0.003982f, -0.003953f, -0.008046f, 0.001125f, -0.000157f, -0.003213f, -0.004134f, -0.000723f, 0.002012f, -0.001414f, 0.003003f, 0.004884f, -0.001870f, -0.001595f, -0.000697f, -0.000724f, -0.000992f, -0.007470f, 0.003861f, 0.003556f, -0.000179f, 0.002292f, -0.002307f, -0.000721f, -0.002103f, 0.003011f, 0.003177f, 0.000357f, -0.000848f, -0.001177f, 0.001751f, 0.000430f, -0.001095f, -0.001896f, -0.000039f, 0.001590f, -0.002467f, -0.001506f, -0.001364f, 0.000407f, 0.000728f, -0.003052f, 0.001508f, 0.003363f, -0.002793f, -0.000039f, -0.000708f, -0.000476f, -0.000068f, 0.000333f, 0.000142f, -0.000198f, 0.000556f, -0.000912f, -0.001846f, -0.002125f, -0.000981f, -0.000522f, -0.001130f, -0.002131f, -0.001604f, -0.000513f, 0.001487f, -0.000718f, -0.005505f, -0.003629f, 0.000518f, 0.004979f, -0.005014f, 0.003560f, 0.001625f, 0.000774f, 0.001012f, 0.000854f, 0.003245f, 0.005258f, 0.000137f, + 0.001579f, 0.000577f, -0.004535f, -0.004119f, 0.004008f, 0.000538f, -0.004686f, 0.002753f, -0.004002f, 0.000651f, 0.004902f, -0.000321f, -0.001350f, 0.005599f, 0.000865f, 0.000375f, 0.000452f, 0.000159f, 0.000496f, -0.002474f, 0.001469f, 0.002252f, 0.003690f, -0.002945f, -0.001465f, 0.000567f, 0.000505f, -0.001355f, -0.002662f, 0.001688f, -0.000977f, 0.001180f, 0.000620f, -0.000931f, -0.000867f, 0.000372f, 0.001674f, -0.001284f, -0.000572f, -0.000293f, 0.000958f, -0.002695f, -0.001263f, 0.001241f, 0.000260f, -0.000914f, -0.000476f, 0.001122f, -0.001142f, 0.000348f, -0.000775f, -0.000194f, 0.000904f, 0.000260f, 0.000526f, -0.002326f, -0.001659f, 0.000616f, -0.021590f, -0.019822f, -0.004433f, -0.009184f, -0.008065f, -0.004568f, -0.001387f, -0.003430f, -0.004131f, 0.002807f, 0.000749f, -0.000959f, 0.004709f, 0.001729f, 0.005658f, 0.004384f, 0.001259f, 0.001756f, 0.002062f, -0.008676f, 0.004088f, -0.000670f, -0.001840f, -0.001625f, -0.005136f, -0.001589f, -0.001785f, 0.004931f, -0.001652f, -0.002945f, -0.001471f, 0.000785f, -0.000647f, -0.000984f, 0.001083f, -0.001304f, -0.000850f, 0.003017f, + -0.002962f, -0.000258f, -0.000961f, 0.005427f, 0.002150f, 0.002170f, -0.004179f, 0.000322f, 0.003712f, -0.001952f, 0.000883f, 0.000018f, 0.000899f, 0.000024f, 0.000308f, -0.000285f, 0.002365f, -0.000309f, -0.000776f, 0.001725f, -0.001229f, 0.000967f, 0.002061f, -0.000966f, -0.001438f, 0.000639f, 0.000786f, -0.001551f, -0.000638f, -0.002862f, -0.002269f, 0.000751f, -0.000262f, -0.000504f, -0.000054f, 0.000377f, -0.000185f, -0.001816f, -0.000856f, -0.013522f, 0.028554f, 0.017910f, 0.005763f, 0.001739f, 0.001972f, 0.002010f, 0.003214f, 0.002800f, 0.006054f, 0.012065f, 0.000699f, 0.001361f, 0.002641f, 0.002461f, 0.003120f, -0.002269f, 0.011739f, 0.008342f, -0.007771f, 0.005736f, 0.001077f, -0.001267f, 0.002829f, 0.007071f, -0.006635f, -0.001906f, 0.000552f, -0.005532f, -0.003752f, -0.003956f, 0.008067f, -0.000366f, -0.001424f, 0.001063f, 0.000453f, -0.002416f, -0.006463f, 0.004480f, 0.003672f, -0.001105f, 0.002006f, 0.004594f, -0.003055f, 0.002500f, 0.000265f, -0.001204f, 0.003638f, 0.003095f, 0.000728f, 0.000415f, 0.000375f, 0.002493f, 0.003530f, 0.000026f, -0.000635f, -0.000038f, + -0.001115f, 0.002471f, 0.000520f, -0.001006f, -0.001234f, -0.000905f, 0.001881f, 0.000868f, 0.004273f, -0.001292f, 0.001528f, -0.000951f, 0.001066f, -0.001744f, -0.000619f, 0.000525f, -0.000948f, -0.001220f, 0.000108f, 0.000207f, 0.000548f, 0.001156f, 0.030926f, -0.010900f, -0.010707f, 0.004849f, 0.001192f, -0.004052f, -0.003568f, -0.005667f, -0.005617f, -0.004108f, -0.003481f, 0.005121f, 0.001194f, 0.000619f, -0.002904f, -0.002535f, -0.009053f, -0.000009f, -0.003578f, -0.006222f, 0.005185f, 0.003449f, 0.001070f, 0.003206f, 0.000901f, -0.001091f, -0.002005f, -0.000169f, -0.001694f, 0.002624f, 0.004444f, -0.004717f, -0.001736f, 0.000069f, 0.002428f, 0.006160f, 0.001855f, 0.008262f, -0.004236f, 0.002608f, 0.006890f, 0.004060f, -0.003428f, -0.001021f, 0.000811f, -0.001746f, 0.002986f, -0.000462f, 0.000180f, 0.004400f, 0.002428f, 0.000706f, 0.000439f, -0.000107f, -0.001821f, -0.000051f, 0.000559f, -0.001974f, -0.001086f, 0.001953f, -0.000727f, -0.003744f, -0.000509f, 0.000114f, -0.000611f, -0.003899f, 0.001057f, 0.000805f, 0.001020f, 0.001092f, -0.000769f, -0.001617f, -0.000506f, -0.000815f, + 0.003219f, 0.001359f, -0.001189f, 0.000886f, -0.000243f, 0.000672f, 0.000098f, 0.009930f, 0.018867f, 0.007414f, 0.005058f, 0.005916f, -0.001715f, 0.001908f, -0.005377f, 0.009387f, 0.003703f, 0.009018f, 0.002704f, 0.003444f, -0.008213f, 0.010281f, 0.015231f, 0.001946f, 0.009879f, -0.001966f, -0.007997f, -0.007914f, 0.007251f, -0.002316f, 0.005792f, 0.001087f, 0.002328f, -0.004421f, 0.004486f, -0.001538f, -0.001587f, 0.007408f, 0.005147f, -0.003854f, 0.006917f, 0.000800f, 0.001273f, -0.001366f, -0.005197f, 0.001475f, 0.000399f, -0.002872f, -0.003270f, 0.003082f, 0.004302f, 0.001437f, -0.001502f, 0.002055f, 0.000175f, 0.004598f, -0.002745f, -0.000371f, -0.004533f, 0.000562f, 0.004454f, 0.003022f, -0.002055f, 0.000016f, 0.001569f, -0.004003f, -0.000297f, -0.002723f, -0.001529f, 0.000873f, 0.001069f, 0.002744f, -0.003181f, 0.001412f, -0.003660f, 0.000353f, 0.004545f, 0.001629f, 0.000898f, -0.002844f, 0.000428f, 0.000376f, -0.004739f, -0.001225f, 0.000552f, 0.000841f, 0.001878f, 0.000797f, -0.000102f, -0.022037f, -0.001202f, -0.004978f, 0.006255f, -0.004766f, 0.005145f, 0.000155f, + 0.004124f, -0.000574f, 0.003557f, -0.011013f, 0.003236f, -0.001294f, -0.003974f, 0.001935f, -0.004840f, 0.002967f, -0.004886f, -0.002579f, -0.010794f, 0.006140f, 0.012924f, -0.005074f, -0.001721f, -0.001479f, -0.002124f, 0.001969f, 0.002558f, 0.003747f, -0.009602f, 0.002866f, -0.005985f, -0.001712f, -0.000345f, 0.004921f, 0.001857f, -0.002474f, 0.001019f, 0.001048f, 0.003498f, 0.003592f, -0.006007f, -0.001973f, 0.000842f, -0.004365f, -0.003916f, -0.000738f, -0.002805f, 0.001184f, 0.003323f, 0.000449f, 0.000555f, -0.000789f, 0.003097f, 0.008432f, 0.004732f, -0.005175f, 0.001020f, 0.001915f, -0.002591f, 0.002974f, 0.000748f, -0.003312f, -0.000340f, 0.003800f, 0.000381f, 0.003638f, -0.004915f, -0.001136f, 0.002911f, 0.000146f, -0.001632f, -0.003396f, -0.000282f, -0.001799f, 0.002786f, -0.000791f, 0.001732f, -0.000833f, -0.000383f, -0.040453f, -0.015181f, 0.008214f, 0.002961f, -0.005196f, 0.005749f, 0.004739f, 0.007590f, -0.001834f, -0.003312f, 0.006631f, 0.000294f, -0.004466f, 0.009031f, -0.010108f, -0.013153f, -0.006214f, -0.007051f, 0.004615f, 0.006650f, -0.000150f, 0.001730f, 0.010471f, + 0.004629f, -0.010604f, -0.004773f, -0.006522f, 0.001974f, -0.009846f, -0.008571f, -0.000518f, 0.001353f, -0.003764f, -0.004098f, -0.005999f, -0.003094f, -0.005488f, -0.005358f, -0.002015f, 0.000489f, -0.001955f, -0.000290f, -0.003698f, -0.000543f, -0.002831f, -0.006231f, 0.013535f, 0.001128f, 0.003211f, -0.005486f, 0.003595f, -0.000322f, 0.001846f, -0.004398f, -0.000165f, -0.000685f, -0.003668f, -0.002273f, -0.001663f, 0.004430f, 0.003226f, 0.003475f, 0.002157f, 0.002703f, -0.000606f, 0.000077f, -0.003172f, -0.000546f, -0.000137f, -0.000211f, 0.004173f, 0.001168f, 0.002455f, 0.002582f, -0.001859f, -0.004452f, 0.001943f, -0.001686f, -0.000781f, 0.001874f, 0.005345f, -0.000543f, 0.021219f, 0.007790f, 0.017098f, 0.002689f, 0.001165f, -0.006842f, 0.002644f, 0.010226f, 0.003868f, 0.000744f, 0.006891f, -0.006146f, -0.002724f, 0.005590f, -0.004230f, 0.001950f, 0.009856f, 0.003167f, 0.001371f, 0.003140f, -0.001759f, 0.004282f, -0.003216f, 0.000119f, 0.001703f, 0.000581f, -0.002473f, -0.002694f, 0.001100f, 0.010129f, -0.003236f, 0.002516f, -0.009288f, -0.004978f, 0.004310f, 0.010672f, -0.008152f, + 0.000077f, 0.005182f, 0.001305f, 0.002001f, -0.006767f, -0.002322f, -0.005847f, -0.010201f, -0.002695f, -0.005651f, -0.006008f, 0.004911f, 0.001956f, 0.001730f, -0.003508f, -0.002106f, -0.000689f, -0.009796f, -0.000913f, 0.005571f, -0.003892f, 0.004481f, 0.009105f, 0.001435f, 0.006033f, 0.004025f, 0.000350f, -0.001764f, 0.005236f, -0.006553f, -0.000302f, -0.000342f, 0.004167f, 0.002067f, 0.003840f, 0.000203f, 0.004258f, -0.000210f, 0.000889f, 0.000705f, 0.004532f, 0.000088f, 0.000055f, 0.004111f, -0.002179f, 0.002583f, 0.000903f, 0.000740f, -0.001303f, 0.025767f, -0.005654f, -0.007917f, 0.001269f, 0.005924f, 0.004823f, 0.004930f, -0.001434f, 0.005318f, 0.001673f, -0.006327f, -0.012654f, 0.008472f, 0.002281f, 0.006128f, 0.003666f, -0.003373f, 0.001495f, -0.004851f, -0.008274f, 0.008595f, -0.005376f, -0.010303f, 0.001103f, -0.001693f, 0.001281f, -0.001029f, -0.001031f, -0.002620f, -0.004071f, 0.003030f, 0.006957f, -0.010044f, 0.009830f, -0.008499f, -0.011072f, 0.001072f, 0.002987f, -0.006263f, 0.004944f, -0.000892f, 0.003143f, -0.005394f, -0.002653f, 0.009158f, 0.003771f, 0.009273f, + 0.002491f, 0.000698f, 0.002981f, -0.000033f, 0.000378f, 0.004855f, -0.000391f, 0.000852f, -0.004304f, -0.002963f, -0.002534f, 0.003417f, -0.003338f, -0.002886f, 0.005562f, -0.000169f, 0.006225f, 0.000938f, -0.004483f, 0.007401f, 0.005800f, -0.000480f, 0.003794f, -0.003803f, -0.006203f, 0.002393f, -0.002251f, -0.004500f, 0.000421f, 0.003950f, 0.005414f, -0.002037f, 0.001713f, 0.002599f, -0.000324f, 0.001109f, -0.005357f, 0.002061f, 0.001901f, -0.002700f, 0.021591f, 0.026307f, -0.004035f, 0.000161f, -0.013238f, -0.001497f, -0.009661f, -0.007224f, -0.002309f, -0.004940f, 0.007447f, 0.000004f, 0.005776f, -0.012354f, 0.010265f, -0.007780f, 0.010483f, 0.000373f, 0.008323f, -0.003008f, 0.010491f, 0.003451f, -0.004999f, 0.002214f, -0.007460f, 0.004948f, -0.004159f, 0.011815f, 0.003518f, 0.007766f, -0.012926f, -0.007401f, -0.003175f, -0.006548f, -0.002746f, -0.004481f, 0.000416f, 0.015971f, -0.007386f, 0.008031f, 0.013532f, 0.001919f, 0.005948f, 0.000080f, -0.003039f, -0.006319f, -0.004824f, 0.000673f, -0.003483f, 0.008172f, -0.005300f, 0.003747f, 0.009882f, -0.001301f, -0.000821f, -0.000792f, + 0.008081f, 0.008740f, 0.002733f, -0.004058f, -0.003562f, -0.002143f, 0.003412f, -0.008007f, 0.001499f, -0.001436f, -0.002209f, 0.000113f, 0.005281f, 0.000472f, 0.007480f, 0.006854f, 0.001353f, 0.001645f, -0.003261f, -0.000163f, 0.007690f, -0.000993f, 0.000451f, 0.003228f, -0.004114f, 0.000079f, -0.004708f, -0.005120f, 0.000738f, 0.000739f, -0.001031f, -0.020502f, -0.018371f, 0.008183f, -0.002437f, 0.010123f, -0.005760f, -0.004755f, -0.006875f, -0.005642f, -0.002609f, -0.016179f, -0.005932f, 0.006231f, 0.008700f, 0.003593f, -0.011273f, -0.003200f, -0.005410f, 0.004785f, 0.016313f, 0.009137f, 0.003990f, 0.000644f, 0.001241f, 0.000853f, 0.002871f, 0.008442f, 0.000691f, 0.002225f, -0.004794f, 0.000404f, -0.006874f, 0.002703f, 0.003372f, 0.006111f, 0.000802f, -0.004156f, -0.002081f, 0.008054f, -0.003727f, 0.003051f, 0.001661f, 0.002933f, 0.010287f, -0.005698f, -0.008666f, 0.003282f, 0.007339f, 0.001955f, 0.007335f, 0.008799f, 0.004257f, 0.006107f, 0.002368f, 0.001330f, 0.004845f, 0.014654f, -0.008127f, 0.000011f, 0.002425f, 0.001319f, -0.006299f, -0.001100f, 0.004889f, -0.000064f, + -0.005649f, 0.002273f, 0.010641f, -0.008625f, 0.002835f, -0.008168f, 0.004752f, 0.003231f, 0.001325f, 0.000333f, -0.003845f, -0.003832f, 0.007490f, 0.004051f, 0.001541f, -0.002268f, 0.005253f, -0.000736f, 0.000033f, -0.003626f, 0.003875f, 0.001448f, -0.041269f, -0.014405f, -0.000926f, -0.004118f, -0.010177f, 0.006217f, 0.008302f, 0.014006f, 0.004603f, 0.008806f, -0.008177f, -0.017255f, 0.008036f, -0.004078f, 0.000432f, -0.009291f, 0.009140f, -0.005489f, -0.000434f, 0.008494f, -0.023539f, 0.002268f, 0.012242f, -0.022847f, -0.006040f, -0.008098f, 0.001105f, 0.000846f, 0.005588f, -0.006358f, 0.007407f, 0.001050f, -0.011978f, -0.006179f, 0.001415f, -0.001544f, -0.005935f, 0.005214f, 0.013925f, 0.002967f, 0.003851f, -0.002244f, -0.003469f, 0.008115f, 0.001481f, -0.004092f, -0.020007f, -0.003199f, 0.002521f, -0.010156f, 0.004814f, 0.004084f, 0.000808f, -0.007853f, -0.007014f, -0.008372f, 0.017955f, 0.004749f, -0.002741f, 0.003460f, -0.015269f, 0.001775f, -0.007150f, -0.008230f, 0.007945f, -0.001377f, 0.000099f, -0.005198f, -0.019103f, 0.002555f, 0.005801f, 0.003334f, -0.001397f, 0.011275f, + 0.000374f, -0.004760f, -0.000759f, -0.007442f, 0.011703f, 0.006352f, 0.003273f, -0.001960f, 0.000795f, 0.003746f, -0.003485f, 0.001451f, 0.001613f, 0.000533f, 0.043790f, 0.011029f, 0.011302f, 0.009602f, -0.002796f, 0.000378f, 0.045032f, 0.013006f, -0.003726f, 0.027509f, -0.015431f, 0.011477f, 0.002412f, 0.007015f, 0.011243f, -0.003476f, -0.007849f, 0.008477f, -0.001542f, -0.027198f, 0.006954f, 0.007053f, 0.005757f, 0.012948f, 0.008202f, 0.008457f, -0.007662f, 0.001689f, -0.007399f, -0.003860f, 0.008061f, 0.002676f, -0.015877f, -0.009480f, -0.013307f, -0.019811f, -0.003034f, 0.004087f, 0.009677f, 0.008354f, 0.007197f, 0.006036f, -0.002934f, 0.010363f, 0.005765f, -0.012611f, -0.004825f, 0.003364f, 0.009498f, 0.000228f, 0.002048f, 0.016723f, -0.002995f, -0.001416f, -0.004333f, -0.000872f, 0.008522f, -0.007278f, 0.000126f, -0.010294f, -0.009147f, -0.005861f, 0.010714f, 0.014725f, -0.004273f, 0.001190f, -0.002838f, -0.009141f, -0.006196f, 0.002375f, -0.010589f, -0.002815f, -0.002830f, -0.006845f, 0.018758f, 0.004110f, 0.006275f, 0.005469f, -0.000544f, 0.000024f, 0.003241f, 0.000985f, + 0.005899f, 0.003718f, 0.000105f, -0.000597f, 0.044544f, 0.026341f, 0.001874f, 0.016732f, 0.012748f, 0.003666f, 0.019290f, 0.005463f, -0.000087f, -0.005979f, -0.004472f, -0.012568f, -0.034179f, -0.002510f, 0.003296f, -0.011634f, -0.006670f, -0.001288f, 0.023819f, 0.007834f, -0.006215f, 0.000273f, 0.001629f, -0.003386f, 0.010027f, -0.001665f, -0.006224f, -0.004196f, -0.005869f, 0.003799f, -0.008611f, -0.020936f, 0.000445f, -0.010913f, -0.016994f, 0.003357f, 0.007285f, 0.010652f, 0.005947f, 0.009432f, -0.006441f, -0.018029f, -0.011816f, -0.016214f, 0.006344f, 0.015261f, 0.012509f, 0.008143f, 0.015169f, 0.000421f, 0.009467f, 0.020674f, -0.017117f, 0.003111f, -0.007746f, 0.000110f, 0.005899f, 0.006186f, 0.010002f, -0.000875f, -0.020915f, -0.016100f, 0.003438f, -0.004530f, -0.005969f, -0.003952f, -0.004592f, -0.014265f, 0.001233f, 0.009718f, -0.001067f, 0.007411f, -0.004466f, -0.000351f, -0.000831f, 0.003721f, 0.014158f, 0.010033f, 0.008619f, -0.008167f, 0.000451f, -0.004902f, 0.000560f, -0.013106f, 0.002620f, 0.002196f, 0.001410f, -0.000245f, -0.001623f, -0.003760f, 0.003265f, 0.000168f, + 0.005910f, 0.010848f, -0.022256f, 0.002756f, -0.017035f, 0.007619f, -0.032524f, -0.000881f, -0.010791f, -0.016775f, 0.030030f, 0.016989f, -0.010714f, -0.026970f, -0.006827f, -0.009837f, -0.023575f, 0.018346f, 0.000978f, -0.016289f, -0.006061f, 0.009427f, -0.015429f, -0.010491f, -0.008107f, -0.018276f, -0.007017f, -0.000365f, -0.014793f, -0.013410f, 0.018832f, -0.007026f, -0.005879f, -0.001732f, -0.004210f, 0.016019f, -0.017743f, -0.008283f, 0.003747f, -0.004720f, -0.000020f, -0.004019f, 0.009236f, -0.016813f, 0.005992f, -0.026885f, 0.002737f, -0.007683f, -0.010738f, 0.028248f, 0.002935f, -0.010431f, 0.005386f, 0.005909f, -0.022799f, 0.015826f, -0.003858f, -0.004902f, -0.001726f, 0.009053f, -0.003770f, 0.000410f, -0.010917f, 0.005948f, 0.007400f, 0.012717f, -0.010976f, -0.028144f, 0.019658f, -0.002244f, 0.008118f, 0.009632f, -0.005829f, 0.005561f, 0.014536f, -0.018554f, 0.000999f, -0.006532f, -0.002018f, -0.019260f, 0.006577f, -0.002989f, 0.000778f, -0.000475f, 0.002555f, -0.003236f, -0.002910f, 0.005311f, -0.004876f, 0.003849f, 0.001133f, -0.003612f, 0.002181f, 0.000599f, -0.042512f, -0.023705f, + 0.005324f, -0.015120f, 0.001833f, -0.010931f, -0.005656f, -0.016026f, -0.011024f, 0.008063f, 0.023885f, 0.025087f, 0.003995f, 0.017699f, -0.012225f, 0.030926f, 0.022712f, -0.018101f, -0.016274f, 0.005116f, 0.005109f, 0.026138f, 0.009492f, 0.016733f, -0.006033f, 0.006701f, -0.003395f, -0.002815f, -0.005539f, 0.024437f, 0.010945f, 0.023406f, 0.021269f, 0.004077f, -0.001254f, -0.010363f, 0.010268f, -0.001237f, -0.021410f, -0.014288f, -0.004070f, -0.011078f, -0.002470f, -0.011385f, -0.009980f, 0.006745f, -0.003022f, -0.007211f, 0.017879f, 0.021058f, -0.012122f, -0.004065f, 0.028743f, 0.011709f, -0.019624f, -0.019312f, -0.006952f, 0.007249f, -0.000911f, -0.003608f, -0.013962f, 0.011780f, 0.003644f, -0.004565f, 0.003284f, 0.003225f, -0.017311f, -0.007647f, 0.001658f, -0.006552f, -0.008399f, -0.009107f, 0.023517f, -0.018437f, -0.016488f, 0.006757f, 0.012076f, 0.017162f, -0.008696f, -0.002809f, 0.001680f, -0.007934f, 0.008236f, -0.001255f, 0.006192f, -0.005187f, -0.002101f, 0.001574f, 0.002427f, -0.002988f, -0.002560f, -0.000251f, -0.003134f, -0.016170f, -0.023757f, -0.020397f, -0.000177f, -0.016048f, + -0.020658f, 0.005338f, -0.001781f, -0.028758f, 0.020546f, 0.003697f, -0.001759f, 0.010279f, 0.031671f, 0.030318f, 0.013044f, -0.037020f, 0.013758f, 0.009888f, -0.036333f, -0.000450f, -0.017546f, -0.008455f, 0.018699f, -0.021906f, 0.012748f, 0.000063f, -0.003789f, -0.007784f, 0.003764f, -0.001755f, 0.006285f, -0.004154f, -0.019460f, 0.018968f, 0.008931f, 0.022704f, -0.002364f, -0.007541f, -0.010948f, 0.009248f, -0.009867f, 0.026808f, 0.005620f, 0.016141f, -0.020824f, 0.016678f, 0.000640f, 0.005968f, -0.013518f, 0.004639f, -0.016054f, -0.002430f, -0.016467f, 0.006837f, 0.011386f, -0.021758f, 0.000886f, -0.017907f, 0.008436f, 0.010756f, 0.010367f, -0.001304f, -0.030903f, 0.000181f, 0.008165f, -0.002540f, 0.013743f, -0.029442f, 0.007589f, -0.012174f, 0.003977f, -0.010293f, 0.002160f, 0.007777f, -0.003318f, 0.000025f, -0.003204f, -0.003706f, 0.001196f, -0.007830f, 0.010037f, 0.002401f, -0.000237f, -0.012560f, -0.001157f, 0.001483f, -0.000889f, 0.005479f, -0.005460f, 0.001371f, -0.000555f, -0.002650f, 0.044506f, 0.053900f, 0.022604f, 0.018769f, -0.031053f, 0.029875f, 0.043472f, -0.047551f, + 0.005732f, 0.030784f, 0.005412f, -0.056707f, -0.005609f, -0.030798f, 0.009982f, 0.011243f, -0.014275f, -0.005637f, 0.010388f, -0.026050f, -0.002024f, -0.010222f, -0.012731f, 0.005054f, -0.019681f, 0.021239f, 0.015213f, 0.027475f, -0.013562f, 0.004474f, -0.002910f, -0.011233f, 0.034777f, -0.000703f, -0.015918f, -0.007569f, 0.007563f, -0.007498f, -0.009030f, -0.010688f, 0.017724f, 0.006541f, 0.024616f, -0.001760f, 0.009066f, 0.032207f, -0.020382f, 0.004258f, -0.013819f, 0.025553f, -0.009981f, 0.011944f, 0.005139f, -0.001038f, -0.009625f, -0.018234f, -0.012252f, 0.005117f, 0.023176f, -0.021762f, 0.019565f, 0.023043f, 0.011657f, 0.026934f, -0.013103f, -0.010735f, 0.017624f, -0.003057f, -0.003198f, -0.024877f, -0.001505f, -0.020527f, 0.004284f, 0.025974f, 0.012818f, 0.006532f, 0.011983f, 0.007077f, -0.011097f, -0.005047f, -0.019430f, 0.022045f, 0.000995f, -0.008777f, 0.005899f, 0.001976f, -0.010179f, 0.005352f, -0.001397f, 0.006317f, -0.000987f, 0.009591f, 0.004665f, -0.020561f, -0.070739f, -0.029435f, -0.050922f, -0.027246f, -0.021880f, 0.011854f, -0.032765f, -0.033147f, -0.016125f, -0.044348f, + -0.014669f, 0.033654f, -0.001235f, 0.001442f, -0.009283f, -0.007770f, -0.004426f, 0.003149f, -0.000768f, -0.029685f, -0.004961f, -0.005792f, 0.042936f, -0.005513f, 0.038145f, 0.003193f, -0.010571f, 0.010059f, 0.031353f, -0.001570f, 0.000072f, -0.012657f, -0.003977f, -0.013292f, 0.007248f, -0.005585f, -0.011628f, 0.005791f, -0.015618f, 0.012522f, 0.012389f, 0.002502f, 0.027393f, -0.012488f, 0.013819f, -0.011675f, 0.015276f, 0.010568f, 0.028861f, 0.004024f, -0.012185f, 0.015707f, -0.002306f, -0.009742f, 0.036720f, -0.002739f, -0.002552f, 0.021352f, 0.006256f, 0.028736f, -0.022697f, -0.021816f, -0.003660f, -0.009447f, -0.003349f, -0.035312f, -0.008376f, 0.012262f, -0.005142f, -0.015198f, -0.025203f, 0.001686f, 0.007236f, -0.012427f, -0.012268f, -0.021611f, -0.008071f, 0.009178f, 0.009091f, 0.019134f, -0.003455f, -0.001767f, -0.001072f, 0.006380f, 0.007244f, 0.001291f, 0.011716f, 0.003328f, 0.000893f, -0.001638f, -0.001573f, 0.008669f, -0.004133f, 0.008565f, 0.009231f, -0.000431f}, + {-0.005154f, 0.002787f, -0.001446f, 0.001705f, -0.001002f, 0.001433f, -0.002977f, 0.000142f, -0.000111f, -0.000330f, 0.000690f, 0.001478f, -0.000045f, -0.000131f, -0.001599f, -0.000630f, 0.000692f, 0.000401f, -0.000180f, 0.000629f, -0.000185f, 0.000223f, -0.000694f, -0.000466f, -0.000466f, -0.000152f, 0.000070f, -0.000340f, -0.000237f, 0.000800f, -0.000454f, 0.000483f, -0.000439f, -0.000068f, -0.000337f, 0.000427f, 0.000158f, 0.000346f, 0.000579f, 0.000719f, 0.000269f, 0.000194f, -0.000057f, 0.000082f, 0.000108f, -0.000130f, 0.000132f, 0.001823f, -0.002086f, -0.000280f, -0.000384f, -0.000519f, 0.000338f, -0.001036f, 0.000352f, -0.000024f, 0.000472f, 0.000414f, -0.000822f, -0.000292f, 0.001254f, -0.000132f, 0.000268f, -0.000233f, 0.000545f, 0.001150f, 0.001330f, 0.000226f, 0.000573f, -0.000020f, -0.001050f, -0.000032f, 0.000114f, -0.000228f, 0.000004f, 0.000578f, -0.000603f, -0.000811f, 0.000353f, -0.000392f, -0.000362f, -0.000569f, -0.000025f, 0.000597f, 0.000150f, -0.000177f, -0.000217f, -0.000239f, -0.000004f, 0.000132f, -0.000320f, 0.000117f, -0.000366f, 0.000220f, -0.005238f, -0.003708f, + -0.001823f, -0.001359f, -0.001056f, -0.001071f, -0.000380f, -0.000790f, -0.000255f, -0.000495f, -0.001302f, 0.000254f, 0.000654f, -0.000104f, 0.000370f, -0.000246f, -0.000679f, -0.000670f, -0.001022f, -0.000344f, 0.000236f, 0.000031f, -0.000579f, 0.000386f, -0.000698f, -0.000679f, 0.000439f, -0.000000f, 0.000014f, 0.000359f, 0.000398f, 0.000108f, -0.000166f, -0.000203f, -0.000277f, 0.000138f, 0.000062f, -0.000358f, 0.000182f, -0.000711f, -0.000316f, -0.000178f, -0.000084f, -0.000508f, -0.000112f, -0.000189f, -0.000021f, -0.007452f, -0.000981f, 0.000557f, 0.000129f, 0.000525f, 0.000077f, -0.000426f, 0.000288f, -0.000332f, -0.000331f, -0.000683f, -0.000544f, 0.000254f, -0.000191f, 0.000458f, -0.000439f, -0.000008f, -0.000424f, 0.000124f, 0.000774f, -0.000213f, 0.000580f, 0.000016f, -0.000498f, -0.000119f, 0.000703f, 0.000329f, 0.000464f, 0.000490f, -0.000694f, 0.000466f, -0.000272f, -0.000073f, -0.000366f, -0.000199f, 0.000227f, 0.000294f, 0.000185f, -0.000187f, 0.000571f, 0.000462f, 0.000306f, -0.000180f, -0.000337f, 0.000036f, -0.000274f, 0.000046f, 0.008773f, 0.006964f, 0.001664f, 0.003111f, + 0.000766f, 0.002404f, 0.001711f, 0.000510f, 0.001723f, 0.000675f, 0.001310f, 0.000552f, -0.000456f, 0.001291f, 0.000932f, -0.000365f, -0.000102f, -0.002427f, -0.000244f, 0.000115f, 0.001492f, 0.000160f, 0.000074f, 0.000745f, 0.000078f, 0.000674f, 0.000644f, 0.000095f, -0.000032f, 0.000235f, 0.001025f, 0.000767f, 0.000669f, -0.000068f, -0.000239f, 0.000039f, 0.000487f, -0.000178f, -0.000029f, 0.000520f, 0.000193f, -0.000259f, 0.000008f, 0.000112f, -0.000493f, 0.000642f, -0.000353f, 0.015448f, 0.005604f, 0.002767f, 0.001580f, 0.001027f, 0.000958f, 0.000984f, 0.001536f, 0.000427f, 0.002530f, 0.000394f, 0.000196f, 0.001146f, -0.000640f, 0.000310f, -0.000307f, -0.000231f, -0.000467f, 0.001697f, 0.000872f, -0.000087f, 0.001219f, -0.000815f, -0.000259f, -0.000254f, 0.001904f, -0.000130f, 0.000660f, 0.000208f, 0.000915f, 0.000220f, -0.000320f, 0.000557f, 0.000616f, -0.000243f, 0.000196f, 0.000325f, 0.000139f, 0.000455f, -0.000163f, 0.000514f, 0.000376f, -0.001187f, 0.000239f, 0.000209f, 0.000205f, 0.000919f, 0.005963f, -0.004425f, -0.001482f, -0.002076f, -0.001209f, -0.001257f, + 0.000860f, -0.000742f, -0.001777f, -0.000514f, -0.002379f, -0.000626f, -0.001011f, -0.002384f, -0.000547f, 0.000464f, -0.001429f, -0.000553f, 0.000268f, -0.001704f, -0.000035f, 0.001827f, 0.000462f, 0.000206f, -0.000830f, -0.000032f, 0.000697f, -0.000055f, -0.000762f, -0.000915f, 0.000905f, -0.000149f, -0.001090f, 0.000032f, -0.000443f, 0.001301f, -0.000005f, 0.000543f, -0.000188f, 0.001112f, -0.000749f, 0.000397f, 0.000192f, 0.000198f, 0.000047f, 0.000223f, -0.000002f, -0.000465f, 0.000757f, 0.000477f, -0.016282f, -0.009141f, -0.001923f, -0.002248f, -0.001621f, -0.001962f, -0.002873f, -0.000222f, 0.000024f, -0.000793f, 0.000653f, -0.000735f, 0.000064f, -0.000049f, -0.000982f, -0.000993f, -0.001671f, -0.000538f, 0.001534f, -0.001488f, -0.000229f, 0.001463f, 0.000860f, -0.000210f, 0.000469f, -0.000195f, -0.001625f, -0.000765f, -0.001347f, -0.000425f, -0.000003f, -0.000314f, 0.000681f, -0.001366f, -0.001149f, -0.000040f, -0.001398f, -0.001029f, -0.001009f, -0.001095f, 0.001084f, -0.000343f, -0.001473f, -0.000453f, 0.000316f, 0.000430f, -0.000546f, -0.000728f, -0.000395f, -0.001349f, -0.010083f, 0.005841f, + 0.002020f, 0.001061f, 0.000859f, 0.000997f, 0.000316f, -0.000942f, 0.000163f, -0.000509f, -0.000300f, 0.001908f, 0.000977f, 0.001662f, 0.001460f, 0.001749f, -0.001466f, 0.000814f, 0.001636f, 0.000410f, 0.001412f, -0.001668f, 0.000231f, -0.000324f, -0.000230f, -0.000542f, 0.000537f, -0.000101f, -0.000079f, 0.001719f, -0.001741f, -0.000361f, 0.000520f, 0.001048f, -0.000530f, 0.000897f, -0.000750f, -0.000938f, 0.001176f, -0.000500f, -0.000155f, -0.000218f, 0.000382f, -0.000023f, 0.000489f, -0.000494f, -0.000341f, -0.000433f, -0.000256f, -0.000359f, 0.000854f, 0.000235f, 0.000209f, -0.000442f, -0.000807f, 0.000196f, 0.014879f, 0.006006f, 0.001349f, 0.003317f, 0.002712f, 0.000452f, 0.001250f, 0.003135f, 0.001527f, -0.000137f, 0.000754f, 0.000339f, -0.000400f, 0.000857f, 0.002819f, 0.000587f, 0.003351f, 0.001536f, -0.002628f, 0.000451f, 0.000170f, 0.000502f, 0.002496f, 0.001310f, 0.001050f, -0.000265f, -0.000302f, -0.000379f, -0.000333f, 0.000327f, -0.000454f, 0.000758f, 0.000321f, 0.001051f, -0.000145f, -0.000328f, 0.000482f, 0.000852f, 0.000568f, -0.000142f, -0.001106f, -0.000543f, + -0.000578f, 0.001018f, 0.000849f, 0.001156f, 0.000744f, 0.000141f, 0.000255f, 0.000985f, 0.000893f, 0.000637f, 0.000193f, 0.000120f, 0.000596f, 0.000512f, 0.016606f, 0.004693f, 0.002123f, 0.002533f, 0.000481f, 0.002446f, -0.000350f, -0.001010f, 0.000002f, 0.000588f, 0.000322f, -0.000130f, 0.000531f, 0.002498f, -0.000319f, -0.001647f, -0.001060f, 0.001185f, 0.000372f, 0.001390f, 0.002339f, 0.001951f, -0.000079f, 0.001285f, -0.001394f, 0.000113f, -0.001070f, 0.001490f, 0.000937f, -0.001777f, 0.001067f, -0.000867f, 0.000179f, -0.000707f, 0.001081f, -0.000682f, 0.001341f, 0.000985f, 0.000886f, 0.001621f, 0.000599f, -0.000070f, -0.000351f, -0.000031f, 0.000280f, 0.001803f, 0.000006f, 0.000016f, 0.000186f, 0.000859f, 0.000648f, 0.000040f, -0.000172f, -0.000295f, -0.000915f, -0.000193f, 0.002348f, -0.007105f, -0.002799f, -0.001204f, -0.001549f, -0.000795f, -0.000545f, 0.000045f, 0.001072f, -0.001092f, -0.001842f, 0.001715f, -0.002226f, -0.002244f, -0.000338f, -0.000570f, 0.001057f, -0.000683f, 0.000015f, -0.002172f, -0.001196f, -0.002608f, -0.002732f, -0.003174f, -0.000369f, 0.000658f, + -0.002110f, -0.000651f, 0.000372f, 0.000167f, 0.000156f, -0.000347f, -0.002091f, -0.001406f, 0.000998f, 0.000294f, -0.000440f, 0.001971f, -0.001303f, -0.000681f, 0.000571f, 0.001182f, 0.001083f, -0.000245f, -0.000247f, 0.000423f, 0.000364f, -0.001390f, 0.000184f, -0.000845f, -0.000289f, 0.000034f, -0.000473f, 0.000005f, 0.000964f, 0.000131f, -0.000123f, 0.000159f, -0.000934f, 0.000540f, 0.000881f, -0.000242f, 0.000024f, -0.018019f, -0.005642f, -0.003423f, -0.001387f, -0.002469f, -0.001931f, -0.000598f, -0.001372f, -0.000604f, -0.001839f, -0.002537f, -0.001776f, -0.000638f, -0.003700f, -0.000914f, -0.001493f, -0.002280f, -0.000257f, 0.000365f, 0.001234f, -0.001344f, -0.001839f, -0.000711f, 0.001548f, 0.001936f, 0.002425f, 0.001266f, -0.000046f, -0.001211f, -0.000520f, -0.000009f, -0.001445f, 0.000590f, 0.001014f, 0.001232f, -0.000834f, -0.000751f, -0.000662f, -0.000357f, -0.000269f, -0.000533f, 0.000990f, -0.000302f, 0.000648f, -0.001261f, -0.002135f, -0.000923f, -0.000064f, 0.001062f, -0.001846f, 0.000600f, -0.000876f, 0.000859f, -0.000892f, 0.000506f, -0.000743f, -0.000058f, -0.000477f, -0.000069f, + 0.000334f, 0.000671f, -0.000450f, -0.000641f, -0.010335f, 0.002755f, 0.000764f, 0.000010f, 0.001809f, -0.001738f, 0.000461f, -0.003998f, -0.001304f, 0.001387f, 0.000980f, 0.002574f, -0.000194f, 0.002807f, -0.001646f, -0.000419f, 0.001338f, -0.002452f, -0.000906f, -0.001446f, 0.002732f, -0.000182f, -0.002281f, 0.001134f, 0.002175f, -0.001953f, -0.001492f, -0.001760f, 0.000495f, -0.000420f, 0.000931f, -0.000683f, -0.000568f, -0.000484f, -0.001075f, 0.001532f, -0.001260f, 0.000284f, 0.000999f, -0.000144f, 0.001156f, -0.000698f, 0.002548f, 0.000365f, -0.000274f, -0.000918f, -0.000908f, 0.000017f, -0.001043f, -0.001275f, -0.000796f, 0.000176f, 0.000858f, -0.000147f, 0.000223f, -0.001118f, -0.001112f, -0.001583f, -0.000639f, -0.000525f, -0.000428f, 0.000415f, 0.000620f, 0.008925f, 0.012845f, 0.004407f, 0.004475f, 0.006064f, 0.004422f, -0.000633f, 0.000911f, -0.000491f, 0.000861f, 0.000733f, 0.001164f, 0.000813f, 0.002240f, 0.000829f, 0.001426f, 0.000419f, 0.004381f, 0.001005f, 0.002181f, 0.001249f, 0.001177f, 0.003404f, 0.000874f, 0.004268f, 0.002277f, -0.000870f, 0.003085f, 0.000789f, + 0.001560f, 0.003013f, 0.000690f, 0.001795f, -0.000837f, -0.000312f, 0.000931f, 0.001356f, -0.001758f, 0.001576f, -0.000979f, -0.002000f, -0.001092f, 0.001659f, 0.002574f, 0.001887f, -0.000271f, 0.000612f, 0.000667f, 0.000933f, 0.001401f, 0.000754f, 0.001573f, 0.000899f, -0.001318f, -0.000039f, 0.001134f, 0.001433f, 0.000525f, 0.000466f, 0.000350f, -0.001420f, -0.000481f, -0.000878f, 0.030895f, 0.002251f, -0.001489f, 0.002405f, -0.001597f, 0.003414f, 0.001130f, 0.003589f, -0.001728f, 0.000276f, 0.000097f, 0.002130f, -0.003807f, 0.000694f, 0.002582f, -0.000595f, -0.000491f, 0.003152f, 0.005142f, -0.002170f, -0.001088f, 0.000554f, 0.002588f, -0.001175f, 0.001713f, 0.000022f, -0.001540f, -0.001418f, -0.001209f, 0.001014f, 0.001630f, 0.001716f, -0.001182f, 0.001901f, -0.001167f, 0.001846f, 0.001809f, -0.000490f, -0.001036f, 0.000603f, -0.001724f, -0.002628f, 0.000681f, -0.001811f, 0.000834f, 0.000136f, 0.000394f, 0.001056f, 0.000097f, 0.001293f, 0.000208f, -0.001793f, 0.000817f, -0.000496f, 0.000955f, -0.001318f, -0.000133f, 0.000165f, 0.001009f, -0.000733f, -0.002094f, -0.000408f, + -0.000839f, -0.010502f, -0.010212f, -0.002306f, 0.000782f, -0.000450f, -0.001551f, -0.001662f, -0.002292f, -0.000609f, 0.001674f, -0.000553f, -0.000591f, -0.002353f, 0.002459f, -0.000151f, -0.002053f, -0.001763f, 0.004272f, -0.003892f, 0.000383f, 0.002834f, -0.000356f, 0.000459f, -0.003768f, 0.001186f, -0.001629f, 0.000886f, -0.002627f, -0.001715f, 0.000405f, 0.000681f, -0.001241f, -0.001376f, 0.000106f, -0.000571f, 0.000162f, -0.001607f, -0.000927f, 0.001657f, -0.000207f, -0.000794f, -0.000498f, 0.002109f, 0.000912f, -0.001220f, -0.001870f, -0.001648f, 0.000526f, -0.000262f, -0.000804f, 0.000169f, 0.000324f, -0.000911f, 0.002492f, 0.001357f, -0.000290f, -0.000205f, -0.000682f, 0.000294f, -0.000762f, -0.000741f, -0.000785f, -0.000156f, -0.001451f, -0.001138f, -0.001939f, 0.000436f, -0.002073f, -0.000083f, -0.000543f, -0.000506f, -0.000136f, -0.004148f, -0.003490f, -0.004269f, -0.003000f, -0.002258f, -0.001435f, 0.000288f, 0.000003f, -0.001114f, -0.000379f, 0.000964f, 0.003710f, -0.003241f, 0.001651f, -0.001117f, -0.001968f, 0.002536f, -0.000173f, 0.000466f, 0.003444f, 0.000454f, 0.001478f, -0.002175f, + -0.000455f, -0.006243f, -0.000657f, 0.001131f, 0.000819f, 0.000494f, 0.000681f, 0.000831f, -0.001322f, -0.001898f, 0.001472f, -0.000203f, 0.001394f, 0.000636f, -0.001582f, 0.001311f, -0.000082f, -0.004434f, -0.003564f, -0.000645f, -0.003371f, 0.000409f, 0.001124f, -0.000270f, -0.000826f, -0.000429f, 0.000207f, -0.001045f, -0.000265f, -0.000234f, -0.000544f, 0.001029f, 0.000335f, 0.000318f, -0.000565f, -0.000479f, 0.001738f, 0.000408f, -0.001047f, 0.001137f, -0.000224f, -0.000818f, -0.001737f, 0.000014f, -0.000927f, -0.000334f, 0.001299f, 0.000979f, 0.001379f, -0.020058f, -0.004573f, 0.000297f, -0.003990f, 0.001612f, 0.000399f, 0.004813f, -0.002252f, 0.000288f, -0.001323f, 0.003227f, -0.006579f, -0.006310f, 0.002659f, -0.003057f, 0.004745f, 0.001719f, -0.003815f, -0.006683f, -0.000153f, -0.001890f, -0.003244f, -0.001328f, 0.000763f, 0.001084f, -0.001567f, 0.005724f, 0.000306f, -0.000568f, -0.002394f, 0.001950f, 0.002168f, 0.002337f, 0.002510f, -0.000310f, -0.001486f, -0.000561f, 0.001484f, -0.000115f, 0.001791f, -0.001683f, -0.000663f, -0.000578f, 0.002075f, 0.001668f, -0.001818f, 0.002361f, + -0.001315f, -0.001641f, 0.000202f, -0.000744f, -0.001562f, 0.001613f, -0.001849f, -0.000243f, 0.000470f, -0.000445f, -0.000753f, 0.000426f, 0.001548f, -0.000957f, 0.001484f, -0.001224f, 0.000996f, -0.000678f, -0.000767f, -0.000477f, 0.000299f, 0.001920f, 0.000347f, 0.001799f, -0.001141f, 0.018397f, 0.016163f, 0.003383f, 0.004321f, -0.000857f, 0.005283f, 0.004238f, 0.005322f, -0.000215f, 0.002141f, 0.001288f, -0.004987f, -0.004222f, 0.002328f, 0.000460f, -0.003568f, -0.003773f, -0.002102f, 0.000249f, 0.002156f, 0.000635f, 0.005063f, 0.004620f, 0.002036f, -0.001059f, -0.001105f, 0.003062f, 0.002876f, 0.000234f, 0.002523f, -0.000802f, 0.003222f, 0.000188f, -0.000669f, 0.004461f, 0.002341f, 0.003660f, 0.002383f, 0.000812f, 0.002588f, 0.001298f, 0.000917f, 0.002381f, -0.001271f, 0.000485f, 0.003181f, -0.000023f, -0.001998f, 0.001881f, 0.001891f, 0.001341f, -0.001393f, -0.000025f, 0.001870f, 0.002776f, -0.001349f, 0.003355f, 0.003857f, -0.000652f, -0.002031f, 0.000367f, 0.000915f, 0.000606f, 0.001715f, 0.000005f, 0.000639f, 0.001308f, -0.000890f, 0.000107f, -0.001281f, -0.000322f, + -0.001741f, -0.001006f, -0.000178f, 0.022313f, 0.001823f, -0.000633f, 0.001580f, 0.001076f, -0.003654f, 0.000957f, 0.001001f, 0.000003f, 0.002384f, 0.003411f, 0.005109f, -0.002275f, -0.002299f, -0.003605f, -0.002909f, 0.003294f, -0.000249f, 0.004756f, -0.001133f, -0.001152f, 0.001972f, 0.004133f, 0.001654f, -0.004147f, 0.003297f, -0.001209f, 0.002640f, -0.001367f, 0.002052f, -0.002496f, 0.001547f, -0.000197f, 0.002407f, 0.000295f, 0.001378f, 0.000739f, -0.004195f, -0.002310f, -0.000379f, -0.000846f, -0.000381f, -0.001307f, 0.002044f, 0.000777f, 0.004352f, -0.000666f, -0.002955f, -0.001725f, -0.000284f, 0.000265f, -0.003288f, 0.001119f, -0.001110f, -0.000142f, -0.000306f, -0.001923f, 0.001771f, 0.003364f, -0.001043f, 0.001734f, 0.000415f, -0.001880f, -0.000165f, -0.001789f, -0.001481f, 0.000306f, -0.002615f, -0.001863f, 0.001112f, -0.000129f, 0.000603f, 0.001810f, -0.002475f, 0.003013f, 0.000309f, -0.001221f, -0.002995f, 0.000875f, -0.001100f, 0.006445f, -0.001539f, -0.006152f, -0.004161f, -0.005546f, 0.005130f, -0.004097f, 0.001137f, 0.006269f, -0.000277f, -0.006358f, 0.000436f, -0.006674f, + 0.005563f, -0.001934f, 0.005545f, 0.000042f, -0.002111f, 0.004776f, 0.000179f, 0.000999f, -0.003588f, -0.004524f, -0.000728f, 0.001604f, 0.000975f, -0.000875f, -0.002091f, 0.002120f, -0.000646f, 0.001587f, 0.002425f, 0.002956f, 0.001363f, 0.001641f, -0.005973f, 0.000511f, -0.001354f, -0.002029f, 0.000819f, 0.002974f, -0.002495f, -0.004574f, -0.002026f, 0.001358f, 0.000523f, -0.004017f, -0.001643f, 0.001894f, 0.002750f, -0.002408f, -0.001577f, -0.001850f, 0.002813f, 0.003750f, 0.000755f, -0.001242f, 0.000423f, 0.002692f, -0.001283f, -0.000090f, -0.001759f, 0.001893f, -0.002201f, -0.000242f, 0.002611f, 0.001579f, -0.000761f, -0.000380f, -0.000065f, -0.000825f, -0.022514f, -0.022810f, -0.003697f, -0.011181f, -0.006940f, -0.003969f, -0.006206f, -0.000756f, 0.004680f, -0.010226f, 0.003734f, -0.002095f, 0.003406f, 0.000588f, 0.002087f, -0.004243f, 0.001075f, -0.000533f, -0.002214f, -0.009381f, -0.001914f, -0.004879f, -0.005966f, -0.000624f, 0.001505f, 0.000315f, -0.002031f, 0.001297f, -0.001928f, -0.000572f, 0.004979f, -0.000108f, -0.001661f, 0.000308f, 0.003257f, 0.004378f, 0.002933f, -0.000000f, + 0.002342f, 0.002707f, -0.000266f, 0.000024f, -0.004873f, 0.001788f, -0.004027f, 0.000752f, 0.003883f, -0.002676f, -0.004876f, 0.001407f, -0.002735f, -0.002617f, 0.000540f, -0.000041f, -0.002310f, 0.001121f, -0.000548f, 0.005253f, 0.002952f, 0.001607f, 0.000651f, 0.001926f, -0.000190f, 0.000579f, -0.002069f, -0.003727f, -0.000613f, 0.000321f, -0.002658f, -0.001847f, -0.001458f, -0.001246f, -0.001504f, 0.000832f, -0.000770f, -0.000228f, -0.001668f, -0.013345f, 0.024830f, 0.019552f, 0.001183f, 0.004006f, 0.001544f, 0.004364f, 0.006569f, 0.001547f, 0.006379f, 0.001191f, -0.006784f, 0.004528f, 0.005374f, 0.001639f, 0.001585f, 0.004079f, 0.005295f, -0.005297f, 0.004412f, -0.002780f, 0.003872f, 0.000617f, -0.003263f, 0.000657f, 0.004384f, 0.002534f, -0.005269f, 0.002567f, -0.002168f, 0.007644f, -0.000658f, 0.001804f, -0.001190f, -0.004894f, 0.004941f, 0.004948f, 0.002337f, 0.001275f, -0.000232f, 0.001791f, 0.005247f, 0.001239f, 0.003750f, 0.000487f, 0.002604f, 0.001439f, -0.000355f, 0.002859f, -0.003448f, -0.005340f, -0.002359f, -0.004070f, -0.003464f, -0.001762f, -0.003557f, 0.004791f, + 0.003395f, 0.000424f, -0.000857f, -0.001697f, -0.000563f, -0.000117f, 0.000036f, 0.000243f, 0.000665f, 0.001006f, 0.000552f, -0.000094f, -0.001262f, -0.001069f, -0.000179f, -0.000095f, -0.000458f, 0.000544f, -0.000554f, 0.002889f, -0.000648f, 0.003792f, 0.033314f, -0.013044f, -0.007067f, 0.001210f, -0.000069f, -0.001648f, -0.009243f, -0.003948f, 0.002370f, -0.000446f, -0.001316f, -0.001806f, 0.001435f, -0.007601f, -0.002161f, 0.003957f, 0.007420f, 0.004045f, 0.003337f, -0.002368f, -0.002237f, -0.004373f, 0.005124f, -0.007202f, -0.001245f, 0.001793f, -0.004736f, 0.001564f, 0.002057f, 0.005811f, -0.008860f, -0.000740f, -0.000143f, -0.001828f, 0.002372f, -0.008209f, -0.004274f, 0.009054f, 0.005969f, 0.001248f, -0.001539f, 0.005411f, -0.001569f, -0.000693f, 0.001022f, 0.004233f, 0.002449f, -0.002606f, 0.000570f, -0.001519f, 0.003478f, -0.005532f, -0.002481f, -0.003348f, -0.003514f, 0.006783f, 0.001873f, 0.000847f, -0.002979f, -0.000245f, -0.001001f, -0.001190f, -0.003124f, 0.000510f, -0.002961f, -0.000122f, 0.001038f, 0.002616f, -0.004500f, -0.003121f, -0.003976f, -0.001213f, 0.002164f, 0.000384f, + 0.002869f, -0.000379f, -0.003695f, -0.000388f, -0.001662f, 0.001730f, -0.000154f, 0.009896f, 0.022791f, 0.003742f, 0.008698f, 0.007856f, 0.007541f, 0.002518f, 0.005639f, 0.003472f, -0.001630f, -0.004625f, -0.002932f, -0.001334f, 0.006459f, -0.005511f, -0.006099f, -0.000416f, -0.000271f, -0.002495f, -0.004666f, 0.013818f, 0.012985f, 0.009770f, 0.000489f, -0.005571f, 0.000999f, 0.000930f, -0.002769f, 0.003184f, 0.002049f, 0.005579f, 0.000662f, 0.002281f, -0.000252f, -0.003832f, 0.006333f, 0.005242f, 0.003792f, -0.000900f, -0.004993f, 0.000313f, -0.000368f, -0.001393f, -0.010214f, 0.007377f, -0.004644f, 0.008507f, 0.000503f, 0.004603f, -0.000957f, 0.005075f, 0.007721f, 0.001543f, -0.003465f, -0.000255f, 0.001433f, -0.002536f, 0.001375f, -0.000983f, -0.003250f, -0.001787f, 0.001092f, -0.000792f, 0.003249f, 0.001146f, -0.005443f, 0.000349f, -0.000730f, -0.005877f, -0.001363f, 0.001200f, -0.002218f, 0.000648f, 0.005009f, 0.002052f, -0.000271f, -0.001725f, -0.001305f, 0.000108f, 0.002196f, -0.000599f, 0.002373f, -0.023931f, -0.003178f, -0.014917f, 0.000168f, 0.002625f, -0.005064f, -0.008724f, + -0.010090f, -0.009567f, -0.005664f, -0.007803f, -0.001913f, -0.000531f, -0.002016f, 0.002504f, -0.001556f, 0.000506f, 0.006124f, 0.002748f, -0.000606f, 0.014487f, -0.003181f, 0.002900f, -0.002119f, 0.001214f, 0.002103f, 0.000769f, -0.000814f, 0.002126f, 0.006785f, 0.002040f, 0.002402f, 0.000759f, 0.002714f, 0.005728f, 0.007897f, 0.002480f, 0.009582f, -0.002567f, -0.008261f, 0.008343f, -0.002646f, -0.001758f, -0.001682f, 0.004716f, 0.007321f, 0.005517f, -0.000141f, -0.001903f, -0.004189f, -0.010682f, 0.006580f, 0.007474f, 0.005291f, -0.006380f, 0.003861f, 0.000995f, -0.000642f, 0.006052f, 0.001023f, 0.004064f, -0.003381f, 0.001982f, -0.004215f, -0.000407f, 0.003657f, -0.001068f, 0.002751f, -0.000582f, -0.001539f, -0.001506f, -0.005134f, 0.000517f, 0.000385f, -0.000044f, 0.000988f, -0.001140f, -0.006333f, 0.000480f, 0.000332f, -0.041877f, -0.018801f, 0.008526f, -0.001637f, -0.001434f, 0.001485f, -0.005246f, -0.004612f, -0.001577f, -0.002086f, -0.007335f, 0.005169f, 0.000564f, 0.010938f, -0.006122f, -0.005265f, -0.008957f, -0.005021f, -0.009225f, 0.000740f, 0.003368f, -0.013779f, 0.008870f, + 0.007627f, -0.001103f, 0.001510f, 0.005775f, 0.000842f, 0.005080f, -0.010447f, -0.010510f, -0.005841f, -0.006898f, -0.005318f, 0.017000f, 0.005530f, -0.003761f, -0.006124f, -0.008727f, 0.004113f, 0.002325f, -0.004153f, 0.003381f, 0.003336f, -0.006161f, 0.000555f, 0.001356f, 0.004818f, -0.005724f, 0.013990f, -0.006156f, -0.004919f, 0.002169f, -0.001535f, -0.000096f, -0.004246f, -0.001612f, 0.000409f, 0.008883f, -0.002794f, 0.012809f, 0.002706f, 0.000815f, 0.001402f, 0.003405f, -0.003882f, -0.001407f, -0.005095f, -0.004115f, -0.003913f, -0.000040f, 0.006879f, -0.004527f, -0.003344f, -0.001929f, -0.002619f, -0.002431f, -0.000332f, -0.001616f, -0.002422f, -0.002121f, 0.006582f, 0.021207f, 0.010855f, 0.006791f, 0.004559f, -0.007416f, 0.000723f, -0.005993f, 0.009385f, -0.000988f, -0.001281f, 0.003235f, 0.002044f, 0.002221f, -0.000310f, 0.003351f, 0.001171f, 0.003536f, -0.002919f, 0.009234f, 0.001216f, -0.000805f, 0.027568f, 0.001536f, -0.002132f, -0.007032f, 0.004084f, -0.006539f, 0.006135f, 0.014895f, -0.001189f, 0.003670f, 0.003641f, -0.007623f, -0.008582f, 0.000284f, 0.000159f, 0.006558f, + -0.004256f, 0.000263f, -0.000474f, 0.004837f, 0.004934f, 0.008304f, 0.003091f, 0.002896f, 0.003408f, 0.000373f, 0.005439f, 0.002568f, -0.010074f, 0.002175f, -0.005204f, -0.012884f, -0.001137f, 0.003653f, 0.000047f, 0.001102f, -0.001735f, 0.000272f, -0.000435f, -0.000045f, 0.001605f, 0.000306f, 0.005860f, -0.003500f, -0.000568f, 0.001169f, 0.001216f, 0.000194f, -0.002278f, 0.004090f, 0.006891f, 0.006795f, 0.001402f, -0.001408f, -0.000712f, 0.002436f, -0.000339f, -0.000824f, -0.000157f, 0.001360f, 0.003175f, -0.000531f, -0.001247f, -0.002255f, -0.001427f, 0.031032f, -0.009047f, -0.003429f, -0.008416f, 0.015617f, 0.005746f, 0.001287f, 0.003162f, -0.002285f, -0.003653f, 0.005494f, 0.000502f, -0.005423f, 0.001395f, -0.007151f, -0.005417f, 0.000350f, -0.007249f, 0.000980f, 0.002356f, -0.005355f, -0.009419f, 0.000892f, 0.000498f, 0.006367f, 0.010454f, 0.007288f, -0.004914f, -0.000080f, 0.006489f, 0.011864f, -0.012436f, 0.004686f, -0.002341f, -0.000209f, -0.005679f, -0.007975f, 0.000671f, 0.007151f, 0.002093f, 0.003199f, 0.004512f, -0.000501f, 0.003011f, -0.000722f, 0.002151f, 0.004586f, + -0.008304f, -0.005818f, 0.012885f, -0.001033f, -0.000409f, -0.002927f, 0.005141f, 0.016682f, 0.004169f, 0.002507f, 0.005405f, -0.004403f, -0.004971f, -0.000007f, -0.003713f, -0.009574f, 0.006147f, 0.000780f, -0.004778f, 0.002616f, 0.001425f, -0.002720f, -0.004501f, 0.006075f, -0.002105f, -0.007275f, 0.003388f, 0.003357f, 0.005128f, -0.005074f, 0.000461f, 0.002206f, -0.000897f, -0.001945f, 0.007691f, -0.000630f, 0.001410f, -0.003434f, -0.000457f, -0.000107f, 0.026496f, 0.025105f, -0.008171f, 0.006850f, 0.002069f, 0.005323f, 0.013470f, -0.001656f, -0.007029f, -0.002461f, 0.026019f, -0.014616f, -0.002777f, -0.007240f, -0.005803f, -0.011841f, 0.013016f, -0.003746f, -0.017680f, -0.013172f, -0.016130f, -0.006179f, 0.014300f, -0.001686f, 0.006756f, -0.002511f, -0.007290f, 0.006388f, 0.001894f, 0.008086f, -0.007760f, 0.007198f, 0.005722f, 0.002966f, 0.003333f, -0.012685f, 0.003682f, -0.010584f, 0.008996f, 0.019013f, 0.005521f, 0.005737f, -0.012056f, 0.017030f, 0.004570f, -0.001733f, -0.002610f, -0.003413f, 0.005347f, 0.008535f, 0.002089f, -0.001941f, -0.000473f, 0.002337f, -0.004088f, -0.002901f, + -0.003933f, -0.003019f, -0.000302f, 0.006261f, -0.004148f, 0.009339f, 0.003367f, 0.005728f, -0.001914f, -0.013303f, -0.008927f, 0.003433f, 0.000922f, -0.003948f, 0.004990f, -0.000218f, -0.000445f, 0.002713f, -0.001864f, 0.003934f, -0.000655f, -0.000427f, 0.001909f, -0.002282f, -0.000397f, -0.002471f, -0.001502f, -0.003108f, 0.002052f, 0.000178f, 0.000664f, -0.024932f, -0.014862f, 0.003570f, 0.001949f, -0.000149f, -0.010969f, 0.006484f, 0.003657f, -0.006627f, -0.017944f, 0.014609f, 0.003571f, 0.005411f, 0.008259f, 0.004852f, -0.002376f, 0.002644f, -0.004543f, 0.012122f, -0.010145f, -0.017551f, -0.000600f, -0.000919f, -0.008326f, -0.019076f, 0.000575f, -0.003966f, -0.010022f, -0.005574f, -0.003153f, 0.004194f, 0.000696f, 0.006923f, 0.013978f, -0.006024f, -0.011587f, 0.003569f, -0.001375f, 0.000062f, 0.005714f, -0.008280f, -0.007507f, -0.001094f, 0.006745f, -0.008952f, 0.007364f, -0.002634f, 0.014216f, -0.002110f, -0.004473f, -0.001754f, 0.000065f, 0.002770f, -0.016287f, 0.002273f, -0.014094f, 0.014328f, 0.000049f, 0.008963f, 0.005375f, -0.005594f, -0.000727f, -0.007390f, 0.003572f, -0.000874f, + 0.002833f, 0.002616f, -0.009702f, -0.001555f, -0.009359f, -0.004209f, 0.004164f, -0.002921f, -0.005744f, 0.002663f, -0.000088f, -0.009771f, -0.004782f, 0.000952f, 0.000332f, -0.004081f, 0.004230f, -0.002252f, -0.002484f, 0.001984f, -0.005825f, 0.002966f, -0.034515f, -0.015936f, -0.005796f, -0.003888f, -0.001051f, 0.003588f, -0.011998f, -0.008662f, 0.003198f, -0.010117f, 0.003194f, -0.011234f, -0.003483f, -0.010864f, -0.013057f, 0.013795f, 0.005757f, 0.002041f, -0.000809f, -0.011458f, -0.019333f, 0.009618f, -0.025361f, 0.009165f, 0.000399f, -0.008176f, 0.001358f, -0.005088f, 0.001964f, 0.017639f, -0.008878f, -0.000989f, -0.019052f, 0.014956f, -0.004410f, 0.006784f, -0.006698f, -0.002289f, -0.001533f, -0.000766f, 0.008899f, 0.003007f, 0.018515f, 0.022183f, -0.002316f, 0.000278f, -0.007336f, 0.000772f, -0.002848f, 0.003420f, 0.007102f, 0.000827f, 0.016107f, 0.004506f, -0.005965f, 0.002520f, 0.003355f, 0.000044f, -0.001116f, 0.000453f, 0.012250f, -0.009177f, -0.018384f, -0.007607f, 0.000292f, 0.004291f, 0.003216f, 0.009201f, -0.000912f, 0.003901f, -0.004645f, -0.007454f, -0.010234f, -0.008245f, + 0.000714f, -0.002679f, 0.005016f, 0.001273f, -0.002807f, -0.001342f, 0.008839f, -0.000196f, 0.004917f, -0.002170f, 0.001695f, -0.002200f, -0.002013f, -0.003383f, 0.044002f, 0.019643f, 0.013575f, 0.005631f, -0.005010f, -0.008003f, -0.013734f, 0.007615f, 0.013165f, 0.005438f, -0.006163f, 0.015536f, 0.008747f, 0.015532f, 0.001055f, -0.011242f, -0.004363f, 0.023323f, -0.024351f, -0.005007f, 0.016100f, -0.009543f, -0.005351f, 0.037667f, -0.004727f, 0.010764f, 0.034156f, -0.005486f, -0.002248f, -0.001003f, 0.004244f, -0.001899f, 0.014808f, 0.009520f, 0.012205f, -0.008646f, -0.020179f, 0.008059f, -0.007963f, 0.009687f, -0.003783f, 0.003513f, 0.014380f, 0.008325f, 0.000841f, 0.006320f, 0.002914f, 0.006085f, 0.013902f, 0.007831f, -0.001485f, 0.013511f, 0.005665f, 0.001921f, 0.003213f, 0.024892f, 0.014934f, 0.000023f, 0.013566f, -0.005993f, 0.017151f, -0.004281f, 0.003780f, -0.004878f, 0.002052f, 0.009822f, -0.005455f, -0.000400f, -0.000975f, 0.003405f, 0.000379f, -0.006447f, 0.000257f, -0.005523f, -0.009860f, 0.001645f, -0.013126f, 0.005096f, 0.008048f, -0.003301f, -0.005621f, -0.003782f, + 0.007050f, 0.002079f, 0.000377f, -0.002955f, 0.056788f, 0.025665f, -0.011502f, 0.004963f, 0.029342f, 0.000692f, 0.021190f, -0.006225f, 0.008382f, 0.017666f, -0.013309f, 0.001610f, 0.030825f, 0.027690f, 0.022538f, 0.007964f, 0.019357f, 0.003261f, 0.016969f, 0.005922f, 0.005135f, -0.010608f, -0.012457f, -0.017716f, -0.035105f, 0.011191f, 0.000416f, -0.009529f, -0.003359f, 0.012148f, -0.007979f, -0.001206f, 0.001371f, 0.006831f, -0.031106f, -0.005031f, 0.022573f, 0.017382f, -0.006281f, 0.011485f, 0.009808f, 0.006362f, -0.003813f, -0.007229f, -0.003140f, -0.004863f, -0.003150f, -0.011489f, -0.009763f, 0.007967f, -0.019381f, 0.006417f, 0.015902f, -0.004714f, -0.011345f, -0.017676f, 0.016584f, -0.000517f, -0.008376f, -0.005473f, -0.003824f, -0.006065f, 0.003493f, -0.002800f, -0.006165f, 0.006301f, 0.025815f, -0.012900f, -0.007759f, 0.003299f, -0.005016f, 0.005961f, 0.000237f, 0.013313f, 0.002572f, -0.001293f, -0.001116f, -0.013824f, -0.006526f, -0.002147f, 0.001178f, 0.001069f, 0.004948f, 0.003059f, 0.000576f, 0.002224f, 0.002572f, 0.008157f, 0.000674f, 0.000226f, -0.005296f, 0.002676f, + 0.003941f, 0.001634f, -0.022438f, -0.006261f, -0.026972f, -0.005867f, -0.026956f, 0.012954f, -0.025684f, 0.013814f, -0.004461f, -0.014870f, -0.004509f, -0.006963f, 0.031396f, 0.004869f, -0.022895f, 0.000437f, -0.014957f, -0.011784f, 0.015458f, -0.017467f, -0.016166f, -0.018231f, 0.027381f, -0.003692f, 0.018070f, -0.027879f, -0.014881f, 0.011089f, -0.013011f, 0.010576f, 0.030309f, 0.019919f, 0.018748f, 0.003213f, -0.003238f, -0.014725f, -0.020954f, -0.001122f, 0.004639f, -0.019400f, 0.000407f, -0.011434f, 0.005596f, 0.008565f, -0.022212f, -0.018853f, -0.034798f, -0.005441f, 0.002379f, -0.014955f, -0.021525f, 0.021194f, 0.001070f, 0.021769f, 0.021350f, -0.002628f, -0.003031f, -0.008680f, 0.012313f, 0.010672f, 0.001530f, 0.005273f, -0.001758f, -0.001096f, 0.010413f, -0.002753f, -0.012215f, -0.009380f, -0.015377f, -0.012909f, -0.004782f, -0.000600f, -0.002120f, -0.019429f, -0.011274f, 0.006324f, 0.001464f, -0.006914f, 0.008354f, -0.001707f, 0.000424f, 0.013134f, 0.010847f, 0.006986f, 0.002764f, 0.008408f, 0.001240f, 0.000219f, 0.003890f, 0.002762f, -0.001856f, 0.000798f, -0.038326f, -0.006605f, + 0.003372f, -0.003536f, 0.000053f, 0.010376f, -0.008491f, 0.009227f, 0.008731f, -0.006050f, 0.011820f, -0.016429f, 0.020590f, 0.014126f, 0.000701f, -0.015133f, 0.001215f, 0.010051f, -0.044783f, 0.009290f, 0.018257f, -0.032069f, 0.013194f, -0.016419f, -0.023530f, -0.021444f, 0.010889f, -0.005361f, -0.033438f, 0.017969f, 0.009610f, -0.020243f, -0.033831f, 0.006845f, 0.003985f, -0.010651f, -0.002465f, -0.017383f, 0.016336f, 0.013495f, 0.023771f, -0.019031f, 0.003094f, -0.025276f, -0.009567f, 0.004360f, -0.016175f, 0.006723f, -0.002012f, -0.012690f, -0.019083f, -0.020621f, 0.030153f, -0.020330f, -0.009619f, -0.007652f, 0.001259f, 0.013854f, 0.008210f, 0.010105f, 0.000098f, 0.011824f, -0.003985f, 0.001891f, -0.005024f, -0.012502f, 0.002460f, 0.026775f, 0.004148f, 0.000616f, -0.000110f, -0.017249f, 0.011215f, 0.018014f, 0.018794f, 0.003757f, 0.001394f, -0.000823f, -0.001508f, 0.002718f, 0.000363f, -0.008582f, -0.000195f, 0.001726f, 0.001255f, 0.000128f, 0.000169f, 0.006648f, -0.002312f, 0.000849f, -0.001685f, 0.000351f, 0.011585f, -0.025449f, -0.013522f, -0.026874f, 0.007652f, -0.004773f, + 0.010668f, -0.007323f, 0.005055f, 0.008798f, -0.008997f, -0.015345f, 0.022898f, -0.006008f, -0.010209f, 0.026603f, -0.005478f, -0.006200f, 0.030405f, -0.017591f, 0.004474f, 0.007443f, 0.002369f, -0.026814f, 0.000086f, -0.003913f, -0.016121f, 0.009215f, -0.012665f, 0.017058f, -0.003008f, 0.018987f, -0.020783f, 0.012918f, -0.036796f, 0.000406f, -0.020079f, 0.022401f, -0.003458f, 0.003061f, -0.003864f, -0.020420f, -0.001490f, 0.017789f, 0.046946f, 0.003464f, 0.002944f, 0.009975f, 0.016039f, -0.002726f, -0.004532f, 0.001465f, -0.000816f, 0.041290f, -0.003754f, 0.006358f, 0.016569f, -0.016096f, -0.027521f, 0.000083f, -0.029086f, -0.003573f, -0.014941f, -0.010711f, -0.005850f, -0.012280f, 0.006889f, 0.010227f, -0.016950f, 0.021366f, 0.017737f, -0.002547f, -0.004418f, -0.017470f, 0.012175f, 0.004319f, 0.011547f, -0.009799f, 0.004760f, -0.001914f, 0.008726f, 0.000995f, 0.008442f, -0.004319f, 0.006183f, -0.001063f, 0.000126f, 0.002052f, 0.009575f, 0.004585f, 0.002913f, -0.003177f, 0.000215f, 0.000863f, 0.044242f, 0.048216f, 0.000336f, -0.014794f, -0.011897f, 0.040382f, -0.026570f, -0.030269f, + 0.031458f, -0.028595f, 0.018366f, 0.005588f, 0.025444f, 0.023474f, 0.015827f, 0.002536f, -0.016093f, -0.013878f, 0.033029f, -0.014058f, -0.001464f, 0.008051f, 0.028131f, 0.040762f, -0.001287f, 0.027841f, -0.022859f, -0.023842f, 0.002646f, -0.008821f, 0.013114f, 0.008322f, -0.020389f, 0.002753f, 0.012887f, 0.033517f, 0.011396f, 0.013723f, 0.012570f, 0.014979f, 0.003823f, -0.001202f, 0.021244f, 0.003721f, 0.016982f, 0.027236f, 0.005652f, -0.011237f, -0.009558f, 0.024547f, 0.006403f, 0.050382f, 0.011733f, 0.019842f, -0.020594f, -0.032353f, -0.003144f, -0.037770f, -0.024221f, -0.008633f, -0.012941f, 0.001391f, -0.001955f, 0.000276f, 0.000488f, -0.028253f, -0.023404f, -0.012371f, -0.024166f, 0.008796f, 0.009562f, -0.007331f, -0.001898f, -0.022425f, -0.003544f, 0.006580f, -0.006407f, -0.001948f, 0.002266f, -0.014163f, 0.005888f, -0.004370f, 0.001670f, 0.002484f, 0.000065f, 0.000944f, 0.003053f, -0.003401f, 0.000513f, 0.003267f, -0.000142f, 0.000763f, 0.000945f, -0.021037f, -0.074026f, -0.030548f, -0.060417f, -0.013550f, -0.021133f, -0.008534f, 0.005490f, -0.019809f, -0.024006f, -0.038365f, + -0.030519f, 0.027258f, -0.004872f, -0.024412f, -0.025958f, 0.005865f, -0.034537f, -0.048705f, 0.008013f, -0.011347f, -0.010463f, -0.010480f, 0.009340f, -0.029039f, 0.030517f, -0.017776f, 0.020717f, -0.014466f, -0.013902f, 0.000316f, 0.016725f, -0.023690f, -0.022640f, 0.012110f, -0.004311f, 0.033404f, -0.014684f, 0.019133f, 0.028780f, 0.013672f, -0.010535f, -0.004820f, -0.003049f, 0.023610f, -0.008334f, 0.015840f, 0.031862f, -0.026837f, -0.046802f, -0.018449f, 0.015820f, 0.019420f, -0.022107f, 0.036264f, -0.011732f, -0.013165f, -0.004432f, -0.004019f, -0.011290f, -0.029439f, -0.012475f, -0.030418f, -0.029136f, -0.018067f, 0.021415f, 0.005020f, -0.005215f, 0.001915f, 0.033137f, 0.031128f, 0.002152f, -0.014470f, 0.005893f, -0.003315f, 0.013612f, 0.004239f, -0.006009f, -0.013786f, -0.001289f, -0.002803f, -0.021865f, -0.005694f, 0.008246f, 0.022588f, -0.010185f, -0.000025f, 0.008581f, -0.012767f, -0.000458f, -0.000932f, 0.000324f, -0.006676f, 0.008426f, 0.000455f, 0.002150f, -0.001106f} +}; + +/********************** Sample Rate = 16000 **********************/ + +const float CRendBin_Combined_BRIR_latency_s_16kHz = 0.000145833328133f; +const int16_t CRendBin_Combined_BRIR_max_num_iterations_16kHz = 23; +const uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][BINAURAL_CHANNELS]={{23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23}, {23, 23} }; +const uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS] = {40, 40}; +const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][23]={{{77, 76, 77, 77, 77, 76, 77, 76, 77, 76, 77, 77, 77, 78, 76, 76, 77, 77, 77, 77, 77, 76, 80},{77, 76, 77, 77, 77, 76, 77, 76, 77, 76, 77, 77, 77, 78, 76, 76, 77, 77, 77, 77, 77, 76, 80}},{{76, 77, 77, 75, 77, 78, 77, 76, 77, 77, 76, 77, 77, 77, 77, 77, 76, 77, 76, 76, 77, 78, 80},{76, 77, 77, 75, 77, 78, 77, 76, 77, 77, 76, 77, 77, 77, 77, 77, 76, 77, 76, 76, 77, 78, 80}},{{77, 76, 76, 78, 75, 76, 74, 78, 77, 76, 77, 77, 77, 76, 76, 77, 78, 78, 77, 77, 77, 77, 80},{77, 76, 76, 78, 75, 76, 74, 78, 77, 76, 77, 77, 77, 76, 76, 77, 78, 78, 77, 77, 77, 77, 80}},{{76, 76, 76, 76, 77, 77, 76, 78, 77, 77, 77, 77, 78, 78, 77, 77, 77, 77, 77, 78, 77, 78, 80},{76, 76, 76, 76, 77, 77, 76, 78, 77, 77, 77, 77, 78, 78, 77, 77, 77, 77, 77, 78, 77, 78, 80}},{{76, 77, 77, 76, 77, 77, 75, 77, 77, 77, 76, 77, 77, 77, 77, 78, 77, 77, 77, 77, 76, 76, 80},{76, 77, 77, 76, 77, 77, 75, 77, 77, 77, 76, 77, 77, 77, 77, 78, 77, 77, 77, 77, 76, 76, 80}},{{77, 76, 77, 77, 77, 77, 77, 77, 76, 78, 76, 78, 75, 76, 77, 77, 76, 76, 77, 78, 78, 77, 80},{77, 76, 77, 77, 77, 77, 77, 77, 76, 78, 76, 78, 75, 76, 77, 77, 76, 76, 77, 78, 78, 77, 80}},{{77, 77, 75, 76, 76, 77, 77, 77, 77, 77, 77, 75, 77, 76, 76, 76, 77, 77, 76, 77, 76, 77, 80},{77, 77, 75, 76, 76, 77, 77, 77, 77, 77, 77, 75, 77, 76, 76, 76, 77, 77, 76, 77, 76, 77, 80}},{{75, 76, 77, 77, 75, 77, 75, 76, 76, 77, 77, 77, 78, 78, 77, 77, 76, 77, 78, 78, 78, 76, 80},{75, 76, 77, 77, 75, 77, 75, 76, 76, 77, 77, 77, 78, 78, 77, 77, 76, 77, 78, 78, 78, 76, 80}},{{77, 77, 77, 76, 77, 77, 76, 76, 76, 77, 77, 75, 76, 78, 78, 77, 77, 78, 78, 77, 76, 76, 80},{77, 77, 77, 76, 77, 77, 76, 76, 76, 77, 77, 75, 76, 78, 78, 77, 77, 78, 78, 77, 76, 76, 80}},{{76, 75, 76, 76, 77, 77, 77, 77, 77, 77, 74, 78, 77, 78, 78, 77, 76, 77, 77, 77, 77, 76, 80},{76, 75, 76, 76, 77, 77, 77, 77, 77, 77, 74, 78, 77, 78, 78, 77, 76, 77, 77, 77, 77, 76, 80}},{{76, 76, 77, 76, 77, 77, 76, 76, 76, 76, 77, 77, 76, 76, 77, 75, 77, 76, 76, 76, 77, 77, 80},{76, 76, 77, 76, 77, 77, 76, 76, 76, 76, 77, 77, 76, 76, 77, 75, 77, 76, 76, 76, 77, 77, 80}},{{76, 76, 77, 75, 78, 77, 77, 77, 77, 77, 77, 77, 77, 76, 78, 77, 76, 78, 76, 77, 76, 77, 80},{76, 76, 77, 75, 78, 77, 77, 77, 77, 77, 77, 77, 77, 76, 78, 77, 76, 78, 76, 77, 76, 77, 80}},{{76, 77, 77, 76, 76, 77, 77, 75, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 77, 76, 76, 78, 80},{76, 77, 77, 76, 76, 77, 77, 75, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 77, 76, 76, 78, 80}},{{74, 76, 74, 76, 75, 76, 76, 76, 76, 77, 77, 78, 77, 78, 75, 76, 77, 76, 78, 76, 78, 77, 80},{74, 76, 74, 76, 75, 76, 76, 76, 76, 77, 77, 78, 77, 78, 75, 76, 77, 76, 78, 76, 78, 77, 80}},{{76, 77, 77, 77, 76, 78, 77, 76, 75, 77, 77, 77, 76, 78, 77, 78, 78, 78, 77, 76, 77, 75, 80},{76, 77, 77, 77, 76, 78, 77, 76, 75, 77, 77, 77, 76, 78, 77, 78, 78, 78, 77, 76, 77, 75, 80}}}; +const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz = 77; +const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]={0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f}; +const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40]={{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77},{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77}}; +const float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774]={ + { + {0.010832f, 0.002712f, -0.004173f, 0.000188f, -0.002118f, 0.002726f, 0.010885f, -0.000914f, -0.007116f, -0.010756f, 0.001174f, -0.008083f, -0.002332f, -0.002440f, 0.001864f, 0.005777f, -0.008313f, -0.004040f, -0.002553f, 0.000455f, -0.004910f, -0.008631f, -0.003371f, -0.007258f, -0.003869f, 0.001568f, -0.000354f, -0.003350f, -0.000643f, -0.000920f, 0.000933f, -0.007724f, -0.001925f, 0.003126f, 0.006652f, 0.003422f, -0.000986f, -0.000941f, 0.000320f, -0.007324f, -0.004978f, 0.001622f, 0.000486f, 0.001950f, -0.001956f, 0.001611f, -0.001588f, 0.002919f, -0.001525f, 0.005462f, 0.005550f, -0.000510f, -0.000125f, 0.004259f, 0.001657f, -0.000296f, 0.000411f, -0.008943f, -0.005621f, -0.001358f, 0.003347f, -0.003679f, -0.007892f, -0.004968f, -0.003761f, -0.005550f, 0.003359f, -0.010204f, 0.003130f, 0.010428f, -0.005504f, -0.002617f, -0.005058f, 0.005816f, -0.002310f, -0.006421f, 0.001701f, -0.009205f, 0.009235f, -0.003556f, -0.000119f, 0.008653f, -0.005126f, 0.003328f, -0.000784f, 0.001148f, -0.006096f, -0.012503f, -0.002727f, 0.004827f, -0.003367f, 0.002923f, 0.004129f, 0.003619f, -0.002924f, 0.002040f, + -0.007896f, -0.001437f, 0.001716f, 0.003166f, -0.000481f, -0.000184f, 0.000726f, 0.001899f, -0.006684f, -0.005343f, 0.002006f, 0.004474f, -0.002488f, 0.004692f, 0.008633f, -0.011933f, 0.001419f, -0.005681f, -0.004175f, 0.002728f, -0.001795f, 0.007420f, -0.002599f, 0.006700f, 0.003149f, 0.001171f, -0.000820f, 0.003639f, -0.000148f, -0.000614f, -0.004107f, 0.010858f, -0.007844f, -0.002127f, 0.003367f, 0.004316f, -0.000613f, -0.003470f, 0.001619f, -0.003841f, 0.003699f, 0.000990f, 0.001028f, 0.000119f, -0.001937f, -0.001107f, 0.005025f, -0.014096f, 0.002796f, -0.001594f, -0.008915f, -0.001143f, 0.006375f, 0.003674f, 0.003685f, -0.005967f, 0.004348f, -0.017398f, 0.012247f, -0.006959f, 0.002170f, 0.001696f, -0.000326f, -0.004296f, -0.001011f, -0.010096f, -0.012397f, 0.002466f, -0.002965f, 0.002920f, 0.002952f, 0.009792f, -0.009331f, 0.000528f, 0.006426f, 0.006200f, -0.007716f, -0.008181f, -0.004684f, -0.007203f, -0.000139f, -0.002904f, -0.005772f, -0.004621f, -0.000715f, -0.012553f, -0.012018f, -0.003134f, 0.001492f, -0.001782f, 0.000175f, -0.002117f, 0.001792f, -0.006976f, 0.006378f, -0.003308f, + 0.003281f, -0.001682f, 0.002072f, -0.006462f, 0.001097f, 0.003108f, 0.003892f, 0.001219f, 0.000047f, 0.000846f, -0.002910f, -0.005557f, 0.008629f, 0.006321f, 0.002087f, -0.004483f, 0.010858f, 0.007065f, -0.004372f, 0.006554f, -0.001654f, -0.006902f, -0.002551f, -0.003185f, -0.006420f, 0.002309f, 0.002701f, 0.000716f, -0.005367f, 0.007097f, -0.006979f, 0.003533f, 0.005444f, -0.002855f, -0.001149f, -0.012072f, -0.006967f, -0.012810f, 0.000373f, 0.013930f, 0.006364f, -0.005457f, 0.002356f, 0.001740f, 0.022282f, -0.006678f, 0.006376f, 0.010766f, -0.002109f, 0.009775f, 0.004036f, 0.006602f, -0.008821f, -0.003416f, -0.010329f, -0.004943f, 0.007003f, -0.000369f, -0.004885f, 0.000999f, -0.007208f, -0.000763f, -0.004694f, 0.006419f, -0.002843f, -0.001138f, -0.002545f, 0.003282f, 0.001633f, -0.000181f, -0.000758f, 0.002617f, -0.010802f, -0.008698f, 0.003861f, 0.000684f, -0.000940f, -0.005866f, 0.013113f, 0.003368f, -0.001536f, 0.003907f, 0.005289f, -0.000400f, 0.002701f, 0.000783f, -0.006251f, 0.005351f, -0.007462f, -0.006276f, 0.007039f, -0.008686f, 0.007235f, 0.002582f, -0.005949f, 0.009969f, + 0.005940f, 0.003404f, -0.002649f, 0.008874f, 0.002490f, -0.002092f, -0.002517f, 0.002066f, 0.001412f, -0.002624f, -0.011000f, -0.002703f, -0.001859f, 0.002238f, -0.006249f, 0.007523f, -0.002645f, 0.005501f, -0.006974f, 0.023049f, -0.019580f, -0.017219f, -0.005712f, 0.017590f, -0.002731f, -0.009912f, 0.011974f, -0.008383f, 0.005533f, -0.000691f, -0.013528f, -0.009286f, 0.010980f, -0.007505f, 0.005328f, -0.007819f, 0.007186f, -0.003536f, -0.002271f, -0.001078f, -0.007540f, 0.003641f, 0.005163f, -0.007590f, 0.001608f, -0.003963f, 0.001329f, 0.003155f, -0.001259f, 0.004622f, 0.001285f, 0.003752f, 0.006089f, -0.008217f, -0.006060f, 0.007073f, 0.000228f, 0.005463f, 0.005361f, -0.005250f, -0.007705f, -0.003161f, 0.001206f, 0.009856f, -0.010873f, 0.004344f, -0.012115f, -0.014761f, -0.003509f, -0.008459f, -0.001442f, -0.009986f, -0.018927f, -0.010037f, 0.008784f, 0.008212f, 0.005353f, -0.006252f, 0.018162f, -0.005484f, 0.003142f, -0.009875f, -0.009321f, 0.002682f, 0.000158f, -0.000653f, -0.011718f, -0.003536f, -0.000435f, -0.001927f, -0.002016f, -0.005759f, -0.004816f, 0.002262f, -0.001272f, -0.002112f, + 0.030034f, -0.009616f, 0.014166f, -0.003566f, 0.018986f, -0.003499f, -0.002673f, 0.003299f, 0.004034f, -0.003062f, -0.021320f, 0.002226f, -0.001811f, -0.005658f, -0.000042f, -0.000963f, 0.007982f, -0.002411f, 0.018689f, -0.002392f, 0.002417f, -0.001298f, 0.010755f, -0.002043f, 0.003971f, -0.008608f, 0.000079f, -0.005939f, -0.005728f, -0.001818f, -0.001331f, -0.000004f, 0.007140f, -0.011894f, -0.003000f, 0.003876f, -0.000848f, 0.008005f, 0.002412f, -0.002244f, -0.004846f, -0.005583f, -0.005149f, -0.011022f, 0.004697f, 0.004302f, 0.004704f, -0.019102f, -0.002050f, 0.012933f, 0.008212f, -0.003391f, 0.000219f, -0.006245f, -0.012042f, -0.014161f, 0.014590f, -0.004743f, -0.008166f, -0.005708f, 0.008511f, 0.005259f, 0.001866f, 0.005898f, 0.004047f, 0.005589f, -0.001722f, -0.014348f, -0.002965f, -0.007106f, -0.005026f, 0.008648f, 0.008631f, -0.002555f, 0.013476f, 0.014636f, -0.045502f, 0.023720f, 0.008101f, -0.002889f, -0.002831f, -0.000703f, -0.007649f, -0.013262f, -0.003554f, 0.005270f, 0.018054f, 0.011900f, -0.018092f, -0.004089f, -0.011114f, 0.006221f, -0.001738f, -0.024063f, -0.007733f, 0.013514f, + 0.007962f, 0.004121f, 0.011249f, 0.006584f, -0.002106f, -0.002277f, 0.002710f, -0.009597f, -0.006106f, 0.001318f, 0.009698f, -0.005162f, -0.009758f, -0.013563f, -0.007348f, 0.005741f, 0.019950f, 0.000778f, -0.004513f, 0.003761f, -0.005155f, -0.016071f, 0.000288f, -0.011513f, -0.009434f, -0.010765f, 0.005480f, -0.001194f, -0.015326f, 0.002154f, 0.004634f, 0.005138f, -0.016503f, -0.009179f, -0.006671f, -0.004345f, -0.002540f, -0.006205f, -0.003625f, -0.007851f, -0.016014f, -0.002087f, -0.013713f, -0.015742f, -0.010396f, -0.002903f, 0.001893f, -0.009284f, -0.014380f, 0.004087f, 0.010178f, -0.000331f, -0.002746f, -0.000827f, 0.007192f, -0.011101f, 0.007947f, -0.019134f, 0.006288f, -0.009773f, -0.002283f, 0.001800f, 0.004724f, -0.001352f, 0.008800f, -0.000330f, -0.002700f, -0.026457f, 0.011212f, -0.005334f, -0.006331f, 0.008805f, -0.015871f, -0.021124f, 0.007554f, -0.007682f, -0.010585f, -0.003478f, 0.017721f, 0.011332f, -0.007778f, -0.004394f, 0.007694f, -0.002926f, -0.001941f, 0.002196f, 0.007429f, 0.015254f, 0.008825f, 0.012316f, -0.003030f, -0.000773f, -0.000828f, -0.008484f, 0.000948f, -0.003657f, + 0.019956f, -0.016311f, -0.010617f, -0.008655f, -0.009294f, 0.005029f, 0.001543f, 0.007557f, -0.002633f, -0.010671f, -0.015735f, -0.004082f, -0.019297f, -0.024720f, -0.006521f, 0.000820f, 0.017669f, 0.004020f, -0.016983f, -0.003676f, 0.012669f, -0.005823f, 0.002944f, 0.004719f, 0.006079f, -0.011056f, -0.019436f, -0.007116f, -0.011205f, 0.028392f, 0.000348f, -0.008244f, 0.002799f, 0.005408f, -0.006178f, 0.004361f, 0.000218f, 0.016233f, 0.005320f, -0.000982f, 0.011271f, -0.001731f, -0.013450f, -0.002173f, -0.000985f, 0.013892f, -0.007410f, -0.001400f, -0.003934f, 0.002627f, -0.004007f, 0.001304f, 0.004567f, 0.006874f, 0.009344f, 0.006554f, 0.003038f, 0.024228f, 0.009441f, 0.008368f, -0.000922f, -0.018053f, 0.001298f, -0.014900f, 0.004804f, -0.009857f, 0.002619f, 0.000769f, 0.006034f, 0.029887f, 0.008277f, -0.003716f, 0.010461f, -0.007380f, 0.008895f, -0.004207f, 0.015141f, -0.007339f, -0.000144f, -0.010404f, 0.006865f, 0.012634f, -0.013643f, 0.028524f, -0.006836f, 0.003239f, -0.004343f, -0.006045f, 0.002793f, -0.006805f, -0.023630f, 0.005498f, -0.006062f, 0.000340f, -0.014683f, 0.005216f, + -0.005331f, -0.022236f, -0.011151f, -0.004653f, -0.021578f, 0.014416f, 0.030556f, 0.039829f, -0.035772f, -0.024335f, -0.015271f, 0.004665f, 0.008652f, -0.007386f, 0.004933f, -0.008356f, 0.003264f, 0.021235f, 0.014997f, -0.023769f, 0.038320f, 0.002295f, 0.023101f, 0.009307f, -0.005963f, -0.006307f, 0.021546f, -0.010265f, 0.014215f, 0.017005f, -0.000375f, -0.009469f, 0.002263f, 0.017511f, 0.010710f, 0.009687f, 0.008847f, -0.000024f, 0.004271f, 0.006798f, 0.022076f, 0.015732f, -0.009175f, -0.007931f, 0.000067f, -0.003369f, -0.000516f, -0.009370f, -0.005374f, 0.011537f, 0.019746f, 0.005873f, 0.028903f, -0.006307f, 0.031457f, 0.002579f, 0.015793f, 0.033861f, 0.024983f, 0.008591f, 0.008556f, 0.015902f, -0.001318f, -0.012091f, 0.001856f, 0.014959f, -0.006039f, -0.014117f, 0.002570f, -0.001429f, 0.031900f, 0.024908f, 0.001798f, 0.034610f, -0.000847f, 0.018933f, 0.011804f, 0.015058f, 0.000424f, -0.011037f, 0.017547f, -0.002554f, 0.020243f, 0.012492f, 0.040132f, -0.020752f, -0.000712f, -0.042319f, 0.012171f, -0.021139f, 0.000782f, 0.018622f, -0.003629f, 0.006179f, -0.024180f, -0.017627f, + 0.009119f, -0.014142f, 0.008566f, -0.008345f, 0.002619f, 0.022989f, -0.003670f, -0.020779f, 0.005882f, -0.008412f, 0.021788f, -0.022167f, -0.015812f, 0.009841f, 0.010471f, 0.016470f, 0.000537f, -0.000911f, 0.010164f, -0.005526f, -0.015641f, 0.010390f, -0.006530f, -0.011625f, 0.003537f, 0.012955f, -0.009120f, 0.023682f, 0.008990f, 0.000064f, 0.002705f, 0.012118f, 0.004558f, -0.038009f, 0.015562f, -0.002972f, -0.004532f, -0.005658f, 0.020289f, 0.001242f, 0.021594f, 0.002094f, 0.001406f, 0.003659f, -0.006405f, -0.001086f, 0.010119f, -0.011138f, 0.002314f, 0.036862f, 0.002431f, 0.027559f, 0.001293f, -0.003722f, -0.003625f, -0.015881f, -0.037260f, -0.024774f, 0.011214f, 0.018629f, -0.008096f, 0.029938f, 0.011024f, -0.017710f, -0.012521f, 0.027981f, 0.017250f, 0.019667f, 0.004349f, -0.004682f, -0.000447f, 0.002480f, -0.015923f, 0.000426f, -0.007732f, 0.012530f, 0.025007f, 0.010569f, 0.009513f, 0.028450f, 0.024078f, 0.020360f, 0.002439f, 0.008630f, 0.003148f, -0.002672f, -0.003519f, 0.006060f, -0.000428f, -0.014368f, 0.005211f, 0.017396f, 0.001517f, -0.002874f, 0.006568f, -0.037528f, + 0.014745f, -0.013955f, 0.011429f, 0.014927f, 0.013686f, -0.013069f, 0.009640f, 0.000128f, 0.001388f, 0.024844f, 0.018682f, 0.001868f, 0.010807f, 0.008367f, -0.001423f, -0.011614f, 0.004958f, 0.012964f, 0.001955f, 0.018168f, 0.006691f, 0.016592f, 0.031219f, 0.003182f, 0.013646f, 0.014271f, 0.017560f, 0.000990f, -0.008362f, 0.027133f, -0.008089f, 0.022240f, -0.022444f, -0.018217f, 0.029695f, 0.000321f, 0.011018f, 0.018213f, 0.026162f, 0.033302f, 0.015106f, 0.006198f, -0.013533f, 0.008879f, -0.001271f, -0.026101f, 0.025829f, 0.017119f, -0.021048f, 0.001113f, 0.003566f, -0.026004f, 0.012079f, 0.026482f, 0.016571f, 0.004303f, -0.065736f, -0.041149f, 0.012336f, 0.013077f, 0.025782f, 0.043419f, -0.013085f, -0.007572f, -0.015035f, -0.013653f, -0.017605f, -0.018358f, 0.000373f, 0.006555f, 0.004469f, 0.027308f, 0.000052f, 0.026819f, -0.002594f, 0.008932f, 0.011382f, 0.009276f, 0.019019f, 0.014087f, -0.000340f, 0.017531f, -0.001647f, -0.002467f, -0.011795f, 0.011799f, -0.003168f, -0.026962f, -0.024665f, 0.014221f, -0.005002f, 0.031580f, 0.017269f, 0.020253f, 0.005776f, -0.040198f, + 0.007780f, 0.025015f, -0.005801f, 0.007197f, -0.008150f, 0.004895f, 0.029511f, -0.001174f, 0.024308f, 0.044109f, 0.000210f, -0.016695f, -0.002840f, 0.000460f, -0.030184f, 0.037505f, 0.015294f, -0.004938f, -0.004812f, 0.027221f, 0.010018f, -0.032838f, -0.029700f, 0.010660f, -0.014668f, 0.015849f, 0.008257f, 0.005111f, -0.016204f, -0.023254f, -0.004304f, 0.006052f, 0.001374f, 0.025389f, -0.036400f, 0.004809f, -0.002274f, 0.046377f, -0.054445f, -0.014992f, -0.026357f, -0.000791f, 0.009046f, 0.001780f, 0.037102f, -0.037586f, 0.018299f, -0.004854f, 0.007702f, -0.004271f, 0.020562f, -0.010807f, -0.018375f, -0.001254f, -0.005064f, 0.014574f, -0.000771f, 0.009954f, 0.021799f, -0.004136f, -0.015581f, -0.001831f, 0.024484f, -0.013829f, 0.006192f, 0.005721f, 0.001429f, -0.001868f, 0.024360f, -0.000585f, -0.005654f, -0.039551f, 0.013346f, -0.009543f, -0.024645f, -0.021583f, -0.005264f, -0.023957f, -0.013736f, -0.020756f, 0.010602f, -0.024549f, 0.025455f, -0.022497f, 0.016042f, -0.011449f, 0.030781f, -0.028803f, -0.016245f, -0.004019f, 0.018177f, 0.007570f, 0.000912f, -0.011605f, -0.023099f, 0.002844f, + 0.010181f, 0.034555f, 0.018774f, 0.007899f, -0.018587f, 0.012082f, -0.016335f, -0.019032f, 0.018066f, -0.018441f, 0.010112f, 0.022640f, 0.019578f, -0.004404f, -0.005891f, -0.015514f, 0.027761f, 0.002966f, 0.022202f, 0.032460f, 0.044195f, -0.042713f, 0.034810f, 0.024837f, 0.003100f, 0.018416f, 0.058094f, -0.013854f, -0.014169f, 0.007240f, 0.018506f, 0.025201f, 0.009670f, -0.020011f, 0.026777f, -0.007232f, 0.051560f, 0.000555f, -0.006196f, 0.017884f, 0.015011f, 0.014720f, 0.001447f, 0.048341f, -0.036686f, 0.011220f, 0.001263f, 0.014538f, -0.014169f, -0.030447f, 0.017960f, 0.014331f, 0.014997f, -0.009593f, -0.006644f, 0.040532f, 0.016499f, 0.050476f, 0.006362f, -0.016534f, -0.000069f, 0.012360f, -0.002399f, 0.052179f, -0.004558f, 0.028999f, -0.003120f, 0.046823f, 0.018370f, 0.013489f, -0.009314f, -0.001454f, 0.026757f, 0.001457f, 0.028482f, 0.021108f, 0.025303f, -0.030812f, 0.006574f, 0.022986f, 0.028495f, 0.020443f, 0.016825f, 0.036350f, 0.045891f, -0.034557f, -0.003069f, 0.066951f, -0.015567f, -0.020090f, 0.044348f, 0.056565f, 0.000833f, -0.004861f, -0.033860f, 0.021294f, + 0.044660f, 0.000029f, 0.015862f, -0.033302f, 0.036967f, -0.015693f, -0.008304f, -0.028956f, -0.017389f, 0.066669f, 0.003917f, -0.042982f, -0.017104f, 0.000898f, 0.003344f, -0.003783f, 0.052971f, 0.025370f, -0.000928f, -0.018674f, 0.001424f, 0.015126f, -0.002674f, 0.068245f, 0.017656f, 0.031086f, 0.013709f, -0.013002f, -0.033746f, 0.010702f, 0.003438f, 0.007724f, -0.025087f, -0.001264f, -0.015538f, 0.024124f, 0.004346f, 0.005426f, 0.027528f, -0.019253f, -0.010909f, 0.006304f, 0.005647f, 0.008608f, -0.027308f, -0.023501f, -0.050032f, -0.027043f, 0.007512f, -0.029663f, 0.009563f, -0.021014f, -0.008076f, 0.042661f, 0.018665f, -0.017966f, 0.018334f, 0.006624f, 0.006253f, 0.041409f, 0.000056f, 0.049896f, 0.025429f, -0.017933f, -0.050347f, 0.013020f, 0.017653f, 0.035546f, -0.008147f, -0.037654f, -0.004455f, 0.017271f, 0.014320f, -0.002917f, -0.014231f, 0.029341f, -0.034216f, -0.002874f, 0.050042f, -0.011835f, 0.014315f, 0.004342f, 0.006043f, -0.048587f, 0.038892f, -0.004971f, -0.038721f, -0.023402f, 0.019410f, -0.006828f, 0.009461f, -0.001420f, -0.016313f, -0.013011f, 0.006381f, -0.013079f, + -0.003199f, -0.002004f, -0.055654f, -0.015836f, -0.037426f, 0.006745f, 0.012803f, -0.001838f, -0.016640f, 0.004991f, -0.008110f, 0.020040f, -0.049163f, 0.001585f, 0.008265f, 0.026209f, -0.021517f, 0.024225f, -0.021174f, 0.014671f, 0.004252f, 0.018281f, -0.032076f, 0.007689f, -0.015950f, -0.036109f, 0.021938f, -0.029741f, -0.055270f, 0.005708f, -0.005248f, 0.040981f, -0.021050f, 0.003425f, 0.019961f, 0.026044f, 0.032664f, 0.000522f, -0.011194f, -0.023781f, 0.000674f, 0.012117f, 0.021554f, -0.046744f, 0.048225f, -0.004489f, -0.032483f, -0.028917f, -0.043237f, 0.012364f, 0.010555f, 0.010960f, 0.007702f, 0.037798f, -0.015818f, 0.036091f, -0.042942f, -0.002171f, 0.020532f, -0.010971f, -0.046373f, -0.009049f, -0.066839f, 0.029397f, -0.073668f, 0.040762f, -0.051595f, -0.045150f, 0.010184f, 0.035122f, 0.025546f, -0.026549f, 0.023812f, 0.044707f, 0.006098f, 0.005038f, 0.008757f, 0.002285f, -0.029732f, 0.031547f, -0.058431f, -0.036794f, 0.000847f, -0.005373f, -0.005947f, -0.009351f, -0.016374f, 0.005620f, 0.049259f, 0.011499f, 0.004714f, 0.002988f, -0.026838f, 0.028168f, -0.008006f, -0.053831f, + -0.010651f, -0.000701f, -0.001598f, -0.037379f, -0.027932f, 0.025582f, -0.011811f, 0.045196f, 0.005716f, -0.001723f, -0.041342f, -0.022692f, 0.010829f, 0.004349f, -0.013848f, 0.038548f, -0.035475f, -0.021022f, -0.005249f, -0.004000f, 0.033836f, 0.001473f, 0.039931f, -0.001570f, -0.041256f, 0.007496f, -0.036483f, 0.022084f, -0.010652f, 0.030690f, 0.053394f, -0.094962f, 0.022795f, 0.011666f, 0.005103f, 0.034194f, -0.011076f, 0.005465f, 0.073531f, 0.063213f, -0.022023f, -0.028514f, -0.004645f, -0.053221f, 0.026229f, -0.005708f, 0.007878f, 0.001127f, -0.028708f, 0.073647f, -0.036124f, -0.137452f, -0.023065f, 0.024234f, -0.094101f, -0.018159f, 0.024959f, -0.079412f, 0.007187f, 0.047508f, -0.038845f, 0.047436f, -0.051495f, 0.040452f, 0.049586f, -0.036363f, 0.010825f, -0.007236f, -0.002557f, -0.016680f, -0.024813f, -0.006114f, 0.028930f, -0.023288f, -0.039002f, -0.021320f, -0.032217f, -0.005068f, -0.026190f, -0.005646f, 0.007689f, -0.007243f, 0.027878f, -0.030123f, -0.038846f, 0.025794f, -0.040921f, -0.056187f, -0.074090f, -0.026016f, -0.006063f, 0.011932f, 0.034386f, -0.017806f, 0.012835f, 0.016723f, + -0.017501f, -0.007431f, 0.059235f, -0.043695f, -0.006611f, 0.042593f, 0.008445f, 0.033309f, -0.013981f, 0.011491f, 0.043005f, 0.024025f, -0.008654f, -0.006815f, -0.036546f, 0.011483f, 0.041325f, -0.046975f, -0.022137f, -0.015970f, 0.067134f, 0.045189f, -0.064967f, -0.013601f, 0.057938f, -0.018242f, -0.035812f, -0.026027f, -0.035858f, -0.022037f, 0.058721f, 0.034794f, -0.004429f, 0.025569f, -0.006031f, 0.031280f, -0.019938f, -0.012520f, 0.065508f, -0.028380f, 0.012321f, -0.020256f, -0.006384f, -0.002306f, 0.018493f, 0.051196f, 0.021165f, -0.037677f, -0.009659f, -0.003622f, -0.004505f, 0.027654f, 0.004977f, 0.050987f, -0.014631f, 0.006766f, -0.004355f, 0.012937f, -0.043436f, 0.024034f, -0.039900f, 0.024893f, -0.000823f, 0.037724f, -0.009242f, 0.026913f, -0.012485f, 0.005868f, 0.019008f, -0.021634f, 0.019718f, 0.037061f, 0.053368f, -0.031935f, 0.054730f, 0.017261f, 0.064680f, -0.023410f, 0.013872f, -0.008224f, -0.005574f, -0.018475f, -0.002059f, -0.027891f, -0.100433f, -0.072690f, -0.017339f, -0.010278f, 0.017398f, -0.003136f, 0.026851f, 0.026234f, -0.053149f, -0.019797f, -0.019428f, 0.049498f, + -0.075217f, 0.067901f, -0.021707f, -0.022273f, 0.016454f, 0.030746f, -0.059146f, -0.013162f, -0.000353f, 0.009913f, 0.001768f, -0.003303f, 0.027656f, -0.019258f, 0.002428f, 0.013517f, 0.015600f, 0.022423f, 0.018755f, 0.004912f, -0.032908f, -0.008186f, 0.041919f, -0.043705f, -0.036968f, 0.042810f, 0.014119f, 0.029669f, 0.047728f, 0.073795f, -0.018253f, -0.050118f, 0.063006f, -0.027861f, -0.011836f, 0.064746f, 0.019989f, -0.026559f, -0.070628f, -0.048080f, -0.007922f, -0.027849f, 0.031884f, 0.063653f, 0.032873f, -0.024766f, 0.066779f, 0.020527f, -0.025257f, 0.016406f, 0.074706f, 0.019563f, 0.013949f, -0.018202f, -0.061038f, -0.083429f, -0.065024f, -0.006972f, 0.048421f, 0.012628f, 0.030517f, 0.113331f, 0.056728f, -0.071480f, -0.046729f, 0.028496f, -0.095726f, -0.046056f, 0.082998f, 0.027773f, -0.105678f, -0.090011f, -0.039794f, -0.067781f, -0.061571f, -0.032106f, -0.100637f, 0.074109f, 0.033391f, 0.025659f, 0.031490f, -0.008625f, 0.038076f, 0.031370f, 0.044216f, -0.005514f, 0.059638f, -0.033370f, 0.046003f, -0.013461f, -0.029925f, -0.008302f, -0.050965f, 0.007709f, -0.016687f, 0.021141f, + -0.010485f, -0.018967f, 0.055172f, -0.057682f, 0.041830f, -0.000205f, -0.022497f, -0.008637f, 0.026527f, 0.027682f, 0.022407f, 0.050719f, 0.043308f, -0.026881f, -0.002101f, -0.023962f, 0.026003f, -0.021151f, 0.021268f, 0.024960f, 0.015015f, 0.014491f, 0.013122f, -0.012871f, 0.058677f, -0.004055f, 0.020760f, 0.006325f, 0.029808f, 0.014651f, -0.059769f, 0.004870f, -0.033499f, 0.010420f, 0.034145f, -0.004925f, -0.021617f, -0.024943f, 0.066581f, -0.063803f, -0.045035f, 0.094594f, -0.033188f, 0.024154f, 0.017107f, 0.029723f, -0.005872f, 0.014862f, -0.056563f, 0.003012f, 0.074800f, -0.036395f, -0.013230f, 0.052345f, 0.012193f, -0.049929f, 0.023293f, -0.070180f, -0.257008f, -0.276355f, -0.018995f, -0.162327f, 0.126407f, 0.481837f, 0.204525f, 0.287108f, 0.364389f, -0.149994f, -0.109337f, -0.048478f, -0.345265f, -0.243473f, -0.085693f, -0.376715f, -0.170040f, -0.041240f, -0.160117f, 0.027486f, 0.335938f, 0.305678f, 0.330087f, 0.432214f, 0.255670f, -0.031941f, 0.089278f, -0.106672f, -0.401570f, -0.220717f, -0.167263f, -0.333282f, -0.232979f, 0.004902f, -0.260417f, -0.089899f, 0.045609f, -0.257674f, + -0.138142f, 0.180388f, 0.063038f, 0.196442f, 0.496633f, 0.405009f, 0.323275f, 0.592511f, 0.425195f, -0.013328f, 0.053234f, -0.117484f, -0.545613f, -0.517944f, -0.537888f, -0.828601f, -0.566691f, -0.348893f, -0.345782f, 0.000958f, 0.260105f, 0.299377f, 0.415785f, 0.638892f, 0.586423f, 0.500960f, 0.489710f, 0.286589f, 0.098520f, 0.023999f, -0.026560f, -0.208883f, -0.373671f, -0.445265f, -0.477228f, -0.624737f, -0.476615f, -0.186451f, 0.054341f, 0.053551f}, + {0.016394f, 0.003508f, -0.000366f, -0.002725f, -0.005240f, -0.003985f, 0.004793f, 0.006277f, 0.003167f, 0.005132f, 0.000969f, -0.003613f, -0.000492f, 0.000282f, -0.003748f, -0.003799f, -0.007416f, 0.010633f, -0.004831f, 0.009252f, -0.006533f, -0.008086f, 0.001099f, 0.013007f, -0.000873f, 0.005309f, -0.001478f, 0.003674f, 0.005456f, 0.004156f, 0.006924f, 0.004429f, -0.012967f, 0.000752f, -0.007141f, 0.002178f, -0.003372f, -0.001600f, -0.002531f, 0.000472f, -0.001100f, -0.002449f, 0.000097f, -0.001281f, 0.006619f, 0.001953f, 0.000706f, 0.005540f, 0.005299f, 0.001018f, -0.002933f, -0.002556f, -0.002782f, 0.003073f, -0.000192f, 0.000415f, -0.005086f, 0.013371f, 0.006090f, 0.003227f, -0.002376f, -0.002842f, 0.005882f, 0.001541f, -0.000502f, 0.001817f, -0.002937f, 0.001690f, -0.004191f, 0.000138f, 0.003490f, -0.005721f, -0.003868f, -0.002079f, 0.000276f, 0.000751f, 0.003185f, -0.014805f, 0.006690f, -0.016793f, 0.002901f, 0.000858f, 0.000710f, -0.011572f, -0.004298f, 0.002746f, -0.002775f, 0.003311f, 0.005540f, 0.003180f, -0.000457f, 0.004255f, -0.012994f, -0.000050f, -0.000790f, -0.000673f, + 0.006684f, 0.010247f, -0.011415f, -0.002863f, -0.007032f, -0.002569f, 0.003686f, 0.006910f, 0.000909f, 0.001433f, -0.003006f, -0.004001f, -0.003211f, -0.002629f, -0.005317f, 0.002390f, -0.005350f, -0.003830f, 0.005575f, -0.005346f, 0.003943f, 0.000304f, -0.012782f, -0.004645f, -0.007133f, -0.002048f, 0.005139f, -0.004104f, -0.001286f, -0.004043f, -0.003953f, -0.003032f, 0.005058f, 0.007546f, 0.001318f, 0.004024f, 0.003380f, -0.004599f, -0.008094f, 0.003906f, 0.003451f, -0.002124f, -0.006925f, -0.006108f, 0.005164f, 0.000684f, 0.003904f, 0.001492f, -0.010481f, -0.003830f, -0.003768f, 0.005511f, 0.002637f, -0.010926f, 0.003252f, -0.005894f, -0.000942f, -0.019987f, 0.013961f, -0.009309f, 0.001780f, -0.000834f, -0.003313f, 0.010843f, -0.008709f, -0.005569f, 0.000391f, 0.011457f, -0.003678f, -0.000113f, -0.000798f, 0.009589f, -0.005097f, -0.013976f, -0.002866f, -0.006911f, -0.009798f, 0.000951f, -0.000466f, 0.002266f, 0.006203f, 0.010270f, 0.006353f, 0.001552f, 0.015102f, 0.006390f, 0.000807f, 0.011195f, 0.011360f, -0.000223f, -0.005671f, 0.001104f, 0.005167f, 0.004609f, 0.000186f, -0.001411f, + -0.008322f, -0.006828f, -0.003464f, 0.009225f, 0.003749f, 0.015360f, 0.008488f, 0.000160f, 0.005106f, 0.006776f, 0.002206f, -0.008192f, 0.010019f, -0.002990f, 0.005332f, 0.000546f, 0.003302f, -0.009823f, -0.001533f, -0.002410f, 0.004007f, -0.002221f, -0.003894f, 0.012412f, -0.000596f, -0.007250f, 0.003534f, -0.005136f, 0.005464f, -0.002214f, 0.008679f, 0.008856f, 0.008396f, 0.004523f, -0.007368f, 0.006442f, -0.000309f, 0.007016f, 0.003895f, 0.004409f, 0.000037f, -0.004148f, 0.004075f, 0.001509f, 0.001080f, 0.001874f, -0.016398f, 0.005094f, -0.010544f, 0.001571f, 0.003087f, 0.003379f, -0.004989f, 0.008464f, 0.001089f, -0.003295f, -0.001766f, 0.009916f, 0.006898f, -0.004464f, -0.005921f, -0.004697f, 0.003556f, 0.007028f, -0.004636f, -0.004776f, 0.001041f, -0.018398f, -0.000409f, -0.007881f, -0.003468f, -0.007831f, -0.010598f, -0.001294f, 0.008878f, 0.002529f, -0.008741f, -0.002228f, 0.007510f, 0.002396f, -0.005563f, 0.008999f, -0.004394f, -0.012537f, -0.004236f, 0.007070f, -0.003631f, 0.008374f, 0.015397f, 0.012939f, 0.001222f, -0.000115f, 0.003919f, -0.001878f, -0.010018f, 0.000193f, + 0.002904f, -0.006625f, 0.005007f, -0.013229f, -0.002703f, 0.000985f, -0.006412f, -0.004182f, 0.005044f, 0.011862f, -0.009941f, -0.009279f, 0.005078f, 0.006263f, 0.010111f, 0.003906f, -0.007190f, 0.009239f, 0.007290f, 0.027761f, -0.010473f, -0.004489f, -0.001538f, 0.020074f, -0.001749f, 0.015234f, -0.010691f, 0.013448f, -0.012869f, -0.011276f, 0.002990f, 0.006477f, -0.007506f, -0.001692f, 0.004176f, -0.000807f, 0.005375f, -0.007773f, 0.009427f, 0.003523f, -0.009645f, -0.000185f, 0.004183f, 0.003275f, 0.001986f, 0.018855f, 0.015106f, 0.011817f, 0.000218f, 0.007722f, 0.000926f, 0.002335f, 0.005809f, -0.017091f, -0.002422f, 0.010639f, 0.007047f, 0.008276f, 0.000016f, -0.002944f, 0.004012f, -0.000583f, 0.021272f, -0.003108f, 0.003757f, 0.002179f, 0.001234f, -0.006186f, 0.012837f, -0.001411f, 0.013339f, -0.007235f, -0.007383f, 0.005419f, -0.004847f, -0.017586f, -0.007864f, 0.003447f, -0.001444f, -0.012662f, 0.003735f, -0.000125f, 0.016572f, 0.001222f, 0.001694f, -0.005249f, 0.006259f, 0.005707f, -0.000962f, -0.001335f, 0.014805f, 0.010096f, 0.011091f, -0.007366f, -0.008926f, -0.008525f, + 0.019845f, -0.016425f, -0.000822f, -0.017147f, -0.011458f, -0.006890f, 0.014103f, 0.008201f, -0.020740f, -0.028035f, -0.011154f, 0.009470f, 0.006450f, -0.004447f, 0.008970f, -0.000187f, -0.002904f, 0.000815f, -0.015134f, 0.004139f, -0.002503f, 0.000983f, 0.004000f, 0.000767f, -0.000679f, 0.005918f, 0.004724f, -0.009868f, -0.010326f, 0.010850f, -0.004189f, -0.005576f, 0.006026f, -0.019093f, 0.003767f, 0.003838f, -0.018247f, 0.006255f, 0.017268f, 0.010868f, 0.011566f, 0.002482f, 0.005970f, 0.017123f, 0.002308f, 0.003251f, -0.020644f, 0.010401f, 0.013847f, 0.012173f, 0.001290f, 0.012392f, -0.015126f, 0.013900f, -0.005299f, -0.013688f, -0.022484f, -0.000060f, -0.014813f, -0.010725f, -0.006042f, -0.012731f, -0.033782f, 0.001691f, 0.000132f, -0.000730f, 0.003361f, 0.016341f, 0.004168f, 0.006959f, 0.002254f, -0.010857f, -0.000522f, 0.006340f, 0.002102f, 0.005519f, -0.043936f, 0.021284f, 0.002540f, -0.017218f, 0.003894f, -0.002110f, -0.005242f, -0.003711f, -0.009849f, 0.004919f, -0.005161f, 0.000766f, 0.006070f, 0.005557f, 0.018708f, -0.007905f, -0.018316f, 0.009591f, -0.023164f, -0.010146f, + 0.003524f, 0.002901f, 0.002399f, 0.007176f, 0.008992f, 0.007676f, -0.000380f, 0.010242f, 0.000473f, -0.004426f, 0.013735f, 0.008386f, -0.004453f, 0.008041f, -0.014626f, 0.027002f, 0.000829f, 0.004824f, -0.002754f, -0.023638f, -0.004247f, -0.008944f, -0.008389f, 0.003403f, 0.019310f, 0.000333f, 0.000631f, -0.002723f, -0.005564f, -0.012823f, 0.003815f, -0.002263f, 0.006804f, -0.016072f, 0.005194f, 0.008344f, 0.003560f, -0.011893f, -0.004354f, 0.003043f, 0.001359f, 0.009538f, 0.001719f, 0.033184f, -0.009609f, -0.013983f, -0.016192f, -0.004597f, 0.000214f, 0.012261f, -0.016079f, -0.001374f, -0.006874f, 0.008466f, -0.023166f, 0.001121f, -0.005066f, -0.006189f, 0.019143f, -0.006930f, -0.005319f, 0.003676f, 0.005205f, -0.016490f, -0.016699f, -0.015255f, -0.014456f, -0.023146f, 0.013588f, -0.013766f, 0.003331f, 0.004952f, 0.019859f, -0.003925f, -0.005572f, 0.015565f, 0.003024f, 0.002857f, -0.019603f, -0.012880f, 0.008557f, 0.003537f, 0.006641f, 0.010620f, -0.020652f, -0.000257f, 0.007723f, 0.018520f, -0.000982f, 0.001337f, -0.003664f, -0.000435f, -0.013801f, -0.002896f, -0.004873f, -0.024571f, + -0.002794f, 0.006968f, -0.014732f, 0.005535f, -0.015969f, -0.000471f, -0.011346f, -0.002514f, -0.004193f, 0.001010f, 0.018510f, -0.006013f, -0.000730f, 0.009665f, -0.006597f, 0.005553f, -0.017206f, -0.029070f, -0.016725f, -0.008971f, -0.005190f, 0.002860f, 0.018068f, -0.009206f, 0.003970f, 0.004556f, -0.015046f, 0.004605f, -0.011901f, -0.003744f, 0.005760f, 0.019586f, -0.004258f, -0.000837f, 0.005072f, -0.000057f, -0.018983f, 0.019723f, 0.020672f, -0.005666f, 0.002364f, 0.021680f, -0.021044f, -0.018631f, 0.016671f, -0.003346f, 0.002684f, 0.015244f, -0.002441f, -0.003474f, 0.015147f, -0.026652f, 0.012046f, -0.000662f, 0.005054f, 0.013818f, 0.014102f, -0.014653f, 0.003327f, -0.020342f, 0.006874f, -0.005700f, -0.001812f, -0.013958f, -0.000320f, -0.020263f, 0.002446f, -0.017472f, 0.013096f, -0.005713f, 0.002817f, 0.023235f, 0.010895f, 0.010769f, -0.017616f, 0.003987f, 0.021360f, -0.004280f, -0.029345f, 0.016658f, -0.003214f, 0.003606f, -0.005433f, -0.013102f, 0.020091f, 0.007776f, 0.016457f, 0.004716f, 0.002765f, -0.012501f, -0.016701f, 0.006898f, 0.008498f, 0.009323f, 0.011897f, 0.027049f, + -0.000371f, -0.019733f, -0.012767f, 0.016526f, -0.001726f, -0.016929f, -0.004020f, -0.000513f, -0.004145f, -0.021750f, 0.001047f, 0.003344f, 0.006298f, -0.008026f, 0.013576f, -0.001184f, 0.001990f, 0.015997f, 0.014966f, -0.018975f, 0.021479f, -0.005248f, 0.022736f, -0.019186f, 0.016734f, 0.001554f, -0.002165f, 0.028436f, -0.015386f, 0.001405f, -0.014948f, -0.004656f, 0.043460f, 0.020847f, 0.008934f, 0.006043f, 0.012091f, -0.007297f, -0.000436f, -0.037342f, 0.006503f, -0.001829f, -0.016407f, 0.017492f, 0.012945f, -0.000824f, 0.002779f, -0.021676f, 0.018482f, -0.010257f, 0.019651f, 0.012880f, 0.010311f, -0.015606f, -0.003091f, -0.013153f, 0.018855f, 0.004204f, -0.007392f, 0.033886f, 0.015919f, -0.004057f, 0.001413f, -0.028455f, 0.004424f, 0.001121f, 0.022077f, -0.010260f, -0.029094f, -0.005111f, -0.008295f, -0.005740f, -0.040944f, -0.020378f, -0.043568f, -0.022158f, -0.015742f, 0.004995f, -0.011123f, 0.020354f, 0.002348f, -0.023398f, 0.013955f, -0.015629f, 0.022036f, -0.019644f, -0.015903f, 0.011631f, 0.019925f, 0.019608f, 0.000614f, -0.017788f, -0.013363f, 0.009542f, -0.028256f, -0.033299f, + -0.022524f, -0.004481f, -0.001795f, -0.005594f, 0.006202f, 0.010053f, 0.006642f, -0.001503f, 0.002938f, -0.011635f, 0.005291f, -0.022075f, -0.029967f, -0.000667f, 0.020610f, 0.002250f, -0.009061f, 0.015941f, 0.009064f, 0.015347f, 0.027285f, 0.002031f, -0.010165f, -0.019954f, -0.015930f, 0.006605f, -0.018068f, -0.013403f, 0.002971f, -0.015086f, -0.030537f, -0.017893f, -0.002965f, -0.005328f, 0.005467f, -0.008560f, 0.014800f, 0.002644f, 0.004750f, 0.020264f, -0.004989f, 0.000466f, 0.003767f, -0.020131f, 0.019628f, 0.001117f, -0.020961f, -0.034335f, 0.006611f, 0.000313f, -0.024713f, 0.021854f, 0.014337f, -0.024284f, 0.005632f, 0.017662f, 0.009895f, 0.002402f, 0.015338f, -0.011159f, -0.008787f, -0.002262f, -0.011485f, -0.019015f, 0.023819f, -0.027339f, -0.004953f, 0.005090f, -0.000436f, 0.035218f, -0.038145f, 0.004746f, -0.008289f, -0.007392f, 0.005682f, -0.003066f, 0.004589f, -0.008861f, -0.021904f, 0.017243f, -0.038716f, -0.027789f, 0.018702f, -0.001997f, -0.035369f, 0.016500f, -0.021162f, 0.037715f, 0.006631f, -0.052092f, -0.007624f, 0.003590f, -0.014026f, 0.002796f, 0.007760f, 0.017077f, + 0.014374f, -0.030678f, -0.002437f, 0.001748f, -0.007286f, -0.028188f, -0.005337f, -0.006652f, -0.010466f, -0.009295f, -0.001523f, 0.001009f, 0.021999f, 0.024338f, -0.008972f, 0.012652f, 0.010675f, 0.010531f, 0.024149f, -0.000666f, 0.005704f, -0.030068f, -0.011067f, 0.009268f, -0.006803f, 0.013061f, 0.033629f, 0.004124f, -0.031338f, -0.068591f, -0.001125f, -0.021835f, 0.018263f, -0.013780f, -0.007776f, -0.014298f, -0.037356f, 0.014865f, 0.048056f, 0.001805f, 0.012113f, -0.039386f, 0.007355f, -0.005468f, -0.017684f, 0.003223f, 0.018481f, 0.008502f, 0.015134f, -0.017793f, 0.024659f, 0.012864f, -0.027130f, -0.043195f, -0.000221f, -0.031595f, -0.073943f, -0.046809f, 0.033268f, 0.026633f, 0.043675f, -0.000489f, 0.017175f, 0.003903f, 0.013787f, -0.000973f, 0.008920f, -0.019866f, -0.023220f, -0.014945f, -0.020740f, -0.013986f, -0.014706f, 0.017233f, 0.042284f, 0.008564f, -0.051151f, -0.012883f, 0.009278f, -0.014369f, 0.012874f, -0.030142f, -0.002006f, -0.001814f, 0.002132f, 0.013446f, 0.011332f, 0.001087f, -0.003006f, -0.007541f, 0.012547f, 0.022206f, -0.017980f, -0.029995f, 0.019937f, 0.007998f, + 0.025995f, 0.010293f, 0.037507f, -0.026653f, -0.007984f, 0.022046f, 0.035953f, 0.028934f, 0.019061f, 0.007028f, -0.006328f, 0.000693f, -0.003138f, -0.001568f, 0.013488f, -0.047474f, 0.026042f, -0.005507f, 0.008272f, -0.005040f, 0.036448f, -0.012727f, 0.001414f, -0.009881f, 0.024116f, 0.016263f, -0.036623f, 0.025404f, -0.030535f, -0.004356f, -0.013869f, -0.019430f, 0.018486f, 0.000112f, -0.047825f, -0.006383f, -0.000267f, 0.041501f, -0.044984f, -0.000462f, -0.025345f, -0.072412f, -0.008109f, -0.026329f, -0.057121f, 0.012155f, 0.000123f, -0.010544f, 0.004105f, 0.031649f, -0.001535f, -0.032041f, 0.011691f, 0.002042f, -0.010079f, -0.007134f, -0.005409f, 0.002422f, 0.036108f, -0.007218f, -0.000912f, 0.017026f, 0.012366f, -0.004290f, 0.017658f, 0.016695f, -0.007263f, -0.006584f, -0.013995f, 0.020809f, -0.004418f, -0.033215f, 0.005535f, -0.001240f, 0.012047f, 0.045886f, -0.029639f, -0.046867f, -0.030009f, -0.012846f, 0.006866f, 0.017233f, 0.008713f, 0.035402f, 0.017225f, -0.022687f, -0.013739f, -0.031363f, 0.028500f, 0.018986f, 0.003223f, 0.007640f, -0.018802f, 0.003700f, -0.019953f, 0.036229f, + 0.033628f, 0.004390f, -0.015920f, -0.006594f, 0.003030f, 0.033654f, 0.062052f, 0.041045f, -0.006497f, -0.011051f, 0.000089f, 0.023213f, 0.007627f, 0.022289f, 0.024056f, -0.020112f, -0.002513f, -0.040610f, -0.026240f, 0.016213f, 0.018892f, -0.032425f, -0.000935f, -0.015242f, 0.030101f, -0.026408f, 0.009021f, 0.005811f, 0.055777f, -0.029257f, -0.006205f, -0.030186f, -0.003899f, -0.029780f, -0.024377f, -0.016805f, 0.013702f, -0.032278f, -0.022357f, -0.035379f, -0.006450f, -0.002609f, -0.008379f, -0.014234f, -0.039540f, 0.014438f, -0.026908f, 0.015486f, -0.028372f, 0.042508f, 0.009600f, 0.020829f, -0.004002f, -0.033849f, 0.023484f, 0.014731f, -0.008809f, 0.023093f, 0.031490f, -0.011756f, -0.036172f, -0.018122f, 0.057370f, -0.019590f, 0.002151f, 0.004687f, -0.005112f, 0.015100f, 0.038752f, 0.009512f, 0.018904f, -0.007790f, 0.029074f, 0.003767f, 0.023923f, 0.009418f, 0.011143f, 0.002900f, 0.006669f, 0.046014f, 0.017719f, 0.105263f, -0.056959f, 0.043317f, 0.061054f, -0.010902f, 0.006981f, 0.032673f, -0.014635f, -0.001988f, 0.053501f, 0.022801f, 0.000211f, 0.029316f, -0.000153f, 0.054087f, + 0.060808f, -0.001624f, 0.043319f, 0.042820f, -0.004710f, 0.017782f, -0.047805f, -0.016895f, 0.038420f, 0.001039f, 0.037989f, 0.052995f, 0.044164f, -0.012225f, 0.028252f, -0.049881f, -0.074721f, -0.034392f, -0.028933f, 0.014365f, -0.001400f, 0.015503f, 0.018930f, 0.040588f, 0.032723f, 0.008365f, -0.036065f, -0.007845f, 0.033668f, 0.007491f, -0.018133f, 0.018580f, 0.047071f, -0.009341f, 0.015885f, -0.043230f, 0.018050f, -0.035107f, -0.008965f, -0.023948f, -0.041071f, 0.020457f, 0.002514f, 0.007547f, 0.048494f, -0.031066f, -0.029546f, 0.012627f, 0.050610f, -0.044711f, -0.026084f, 0.011087f, -0.012147f, 0.065688f, 0.053595f, -0.055813f, -0.017734f, -0.045558f, 0.003635f, 0.037219f, -0.018259f, -0.036659f, -0.011400f, -0.004124f, 0.013376f, -0.043214f, 0.012268f, 0.065134f, 0.009803f, -0.056275f, -0.068252f, 0.051796f, -0.063638f, -0.067895f, -0.023503f, 0.008746f, -0.016000f, 0.008158f, 0.002957f, -0.069698f, -0.042358f, -0.053232f, 0.008946f, 0.024081f, 0.005410f, 0.038916f, 0.033599f, 0.050364f, 0.012167f, 0.055397f, 0.021575f, 0.034720f, -0.023286f, -0.010320f, -0.023474f, -0.048047f, + -0.037312f, -0.072634f, -0.046453f, -0.016101f, -0.045830f, 0.006435f, -0.006800f, -0.003492f, 0.011364f, 0.011427f, 0.000897f, 0.031657f, -0.014069f, -0.030058f, 0.034775f, 0.001871f, -0.059399f, -0.024804f, -0.011784f, -0.065896f, -0.055001f, -0.048833f, -0.001936f, 0.021792f, -0.000296f, -0.025658f, -0.009848f, 0.026191f, 0.009611f, 0.063594f, 0.004730f, -0.086339f, -0.036217f, -0.014784f, 0.005924f, 0.013900f, -0.018113f, -0.022025f, 0.023274f, -0.046464f, -0.018025f, -0.036517f, 0.019184f, -0.072884f, -0.057195f, -0.058354f, -0.060921f, 0.006103f, -0.040861f, -0.016772f, -0.064590f, 0.030657f, 0.070266f, 0.004676f, 0.032132f, -0.024957f, -0.018409f, 0.048252f, 0.019380f, 0.048571f, -0.081738f, 0.033952f, 0.060380f, -0.007263f, 0.069743f, -0.038644f, -0.107365f, -0.056973f, -0.000940f, -0.012369f, 0.011744f, -0.040158f, 0.037050f, 0.050379f, -0.046921f, 0.039498f, -0.025498f, -0.033748f, -0.074320f, -0.032822f, -0.042389f, -0.030795f, -0.033652f, 0.031157f, 0.005883f, -0.069682f, -0.084768f, 0.061953f, 0.015815f, 0.020242f, -0.018737f, 0.002057f, -0.021726f, -0.002678f, 0.021370f, 0.026439f, + 0.028948f, 0.068915f, 0.004374f, -0.055882f, 0.072624f, -0.011462f, -0.015810f, -0.036894f, 0.032407f, -0.062331f, -0.035919f, 0.028168f, -0.026878f, -0.050031f, -0.053065f, -0.054808f, -0.006743f, 0.001090f, 0.009567f, -0.021199f, 0.065620f, 0.045657f, 0.000034f, -0.036354f, -0.045470f, -0.065834f, 0.020599f, 0.004454f, -0.004680f, -0.014383f, 0.091447f, -0.003963f, -0.015719f, 0.025372f, 0.027236f, -0.067364f, 0.051912f, 0.034108f, 0.102120f, 0.045441f, 0.003217f, -0.032866f, 0.049169f, 0.000261f, 0.004274f, -0.022108f, 0.044858f, -0.050044f, 0.038065f, 0.037107f, 0.038500f, 0.019543f, -0.013257f, 0.051450f, 0.063496f, -0.011516f, 0.026523f, -0.037645f, 0.063787f, 0.028431f, 0.021624f, -0.038913f, -0.087860f, 0.019095f, -0.026702f, -0.018603f, -0.035519f, -0.043515f, 0.027505f, 0.013904f, -0.021751f, 0.006769f, 0.002241f, -0.022065f, -0.107818f, -0.004892f, -0.022930f, -0.009164f, -0.001766f, 0.077988f, 0.051707f, -0.023316f, 0.019299f, -0.047980f, 0.005194f, 0.039671f, -0.057752f, -0.050829f, -0.044302f, 0.071177f, -0.050266f, 0.016775f, 0.054281f, -0.071919f, -0.070375f, 0.066435f, + 0.049297f, 0.056344f, 0.069805f, 0.029440f, -0.093469f, 0.023828f, 0.024627f, -0.004653f, 0.146412f, -0.011715f, -0.026417f, -0.063368f, -0.063088f, 0.034829f, -0.060265f, 0.040762f, 0.002168f, 0.046653f, -0.014685f, 0.025333f, 0.077791f, 0.009215f, -0.061107f, 0.094245f, 0.024951f, -0.003067f, 0.067806f, 0.035289f, 0.055346f, 0.022740f, -0.075555f, -0.014108f, -0.026603f, 0.039956f, 0.093784f, -0.054631f, 0.017308f, -0.024552f, 0.043141f, 0.049871f, -0.059019f, 0.054593f, -0.046960f, -0.041179f, 0.025016f, 0.045571f, 0.004155f, 0.017367f, 0.035221f, -0.046438f, 0.046210f, 0.006857f, 0.055835f, -0.006080f, -0.012071f, 0.020972f, 0.081485f, -0.032166f, 0.066136f, -0.027524f, 0.014786f, 0.020371f, 0.065896f, -0.000152f, -0.002542f, 0.025735f, 0.098198f, 0.010073f, -0.074231f, -0.002399f, -0.089804f, 0.058444f, 0.001218f, 0.153032f, 0.032755f, -0.039720f, -0.012667f, 0.036944f, -0.032727f, 0.056432f, 0.097305f, 0.070784f, 0.000990f, 0.032559f, 0.041180f, -0.000437f, -0.046980f, -0.001678f, -0.012881f, -0.150932f, 0.093246f, 0.077681f, 0.061042f, 0.021952f, -0.075556f, 0.059982f, + -0.034908f, 0.060946f, -0.053198f, 0.010381f, 0.030070f, -0.026973f, 0.005581f, 0.012268f, -0.013301f, -0.028339f, -0.053548f, 0.085093f, -0.017086f, -0.015725f, -0.026229f, -0.003918f, -0.009667f, 0.028100f, -0.054600f, -0.015646f, -0.033340f, 0.012782f, -0.033446f, 0.034753f, 0.002014f, 0.018131f, -0.036940f, -0.071089f, 0.005794f, -0.051887f, -0.052137f, 0.025117f, -0.039323f, -0.035150f, 0.071834f, -0.025315f, -0.037666f, 0.005417f, -0.038714f, 0.019710f, 0.029073f, -0.007444f, -0.030907f, -0.009775f, 0.022947f, 0.017537f, -0.012195f, -0.001368f, 0.064323f, -0.010784f, -0.034193f, -0.047719f, -0.003340f, -0.020862f, -0.068331f, 0.067642f, 0.027066f, -0.082460f, 0.054672f, -0.003432f, -0.030791f, 0.159266f, 0.093387f, 0.073696f, 0.042734f, 0.023107f, -0.033890f, 0.007034f, 0.021143f, 0.020476f, 0.010405f, 0.072350f, 0.018078f, -0.015808f, -0.033721f, -0.128221f, -0.071311f, 0.124376f, 0.017133f, 0.041792f, 0.023413f, -0.028930f, 0.024289f, 0.036167f, 0.010052f, -0.001947f, -0.028289f, -0.003611f, 0.009776f, -0.012271f, -0.009170f, 0.006788f, 0.015157f, 0.037403f, -0.023415f, 0.016712f, + 0.002781f, 0.030226f, -0.008770f, 0.007371f, 0.010686f, -0.031033f, 0.027915f, 0.006078f, 0.007842f, 0.011354f, 0.011067f, -0.018957f, 0.023339f, -0.016066f, 0.005705f, 0.023071f, -0.010409f, 0.022684f, -0.007869f, 0.028128f, 0.021405f, 0.013775f, -0.031459f, 0.026291f, 0.019462f, 0.016814f, 0.041463f, -0.036880f, -0.002495f, 0.001748f, -0.007421f, 0.014062f, -0.019316f, -0.030073f, 0.022880f, 0.027275f, 0.013229f, -0.000790f, 0.005914f, -0.001116f, 0.013530f, -0.008900f, 0.005693f, -0.021474f, 0.022102f, -0.034638f, 0.035273f, 0.022247f, -0.011810f, 0.002226f, 0.014379f, 0.003902f, 0.012672f, 0.003278f, 0.001030f, 0.002141f, 0.023543f, -0.098202f, -0.228618f, -0.036631f, 0.133471f, 0.121293f, 0.298624f, 0.156033f, -0.080702f, -0.024723f, -0.165795f, -0.280909f, -0.019727f, -0.127615f, -0.018154f, 0.204788f, 0.087017f, 0.158273f, 0.242346f, -0.028084f, -0.036032f, -0.123121f, -0.210201f, -0.166493f, -0.011283f, -0.062375f, -0.024309f, 0.174530f, 0.054641f, 0.113679f, 0.205299f, 0.034136f, -0.001524f, 0.021760f, -0.125987f, -0.189176f, 0.031824f, -0.195454f, -0.129020f, 0.044084f, + -0.020557f, 0.032495f, 0.251349f, 0.029633f, 0.095760f, 0.206710f, -0.042021f, 0.007204f, 0.044890f, -0.197680f, -0.166673f, -0.057726f, -0.227124f, -0.086490f, 0.027601f, 0.042934f, 0.154391f, 0.220462f, 0.154957f, 0.111661f, 0.094727f, -0.035018f, -0.133822f, -0.107030f, -0.165173f, -0.170050f, -0.075287f, -0.041371f, -0.000487f, 0.146936f, 0.170490f, 0.057180f, 0.132906f, 0.043652f, -0.043896f, 0.034991f, -0.092458f, -0.097676f, -0.014884f, -0.016038f} + }, + { + {0.014085f, 0.003015f, -0.003886f, -0.001391f, -0.012989f, -0.006968f, 0.003037f, -0.000664f, -0.000688f, 0.011340f, 0.009528f, 0.002088f, -0.002756f, -0.002327f, -0.006276f, 0.005696f, 0.000631f, -0.003797f, -0.001952f, -0.003632f, -0.001690f, -0.000933f, -0.008573f, -0.007868f, 0.007024f, 0.006528f, 0.002812f, -0.008093f, -0.003750f, -0.001893f, 0.003547f, -0.002993f, -0.004002f, -0.000711f, 0.000351f, 0.001679f, 0.003808f, 0.000765f, 0.005449f, -0.006988f, -0.006472f, -0.008698f, -0.006355f, -0.003515f, 0.000815f, -0.001142f, -0.001206f, -0.003676f, 0.001338f, -0.001025f, 0.000739f, 0.006166f, 0.004616f, -0.002338f, -0.004630f, -0.003376f, 0.001808f, 0.001424f, 0.000608f, -0.000514f, 0.012116f, 0.007436f, 0.001175f, -0.002393f, 0.000596f, -0.007037f, 0.000435f, -0.000466f, 0.001926f, -0.001106f, -0.003904f, 0.006675f, -0.008500f, 0.000402f, 0.000820f, -0.000836f, -0.008431f, 0.008433f, 0.001963f, -0.004904f, -0.002288f, -0.010673f, -0.002996f, 0.008553f, -0.004829f, -0.003591f, 0.002509f, -0.001582f, -0.000519f, 0.000337f, -0.002984f, -0.002467f, 0.010437f, 0.004945f, -0.001479f, 0.000295f, + -0.001765f, -0.003401f, 0.001279f, 0.003564f, 0.005663f, -0.001729f, 0.002053f, 0.002458f, -0.009588f, -0.003130f, -0.000202f, -0.002118f, 0.005584f, 0.000268f, -0.002164f, 0.004929f, -0.004146f, 0.001485f, 0.007870f, -0.004747f, 0.000321f, 0.000795f, 0.005924f, -0.002651f, 0.008241f, -0.012267f, -0.004568f, 0.004893f, -0.002580f, -0.010465f, 0.000512f, 0.001700f, 0.003154f, 0.003119f, -0.001328f, -0.004735f, 0.000133f, -0.004348f, -0.002951f, 0.000777f, 0.004750f, 0.004195f, -0.007050f, 0.005494f, -0.007711f, 0.006119f, 0.000032f, 0.005265f, -0.002640f, -0.005379f, -0.002562f, 0.003244f, -0.001261f, -0.001743f, -0.001779f, 0.004453f, -0.006406f, -0.028480f, 0.009344f, -0.010351f, -0.004133f, -0.008471f, -0.008714f, 0.004955f, -0.002918f, -0.007337f, -0.003966f, 0.010011f, 0.014835f, -0.008105f, -0.003047f, -0.000698f, -0.010725f, -0.010025f, 0.000726f, -0.000983f, 0.006506f, 0.002241f, 0.004836f, -0.004245f, -0.002720f, -0.005508f, 0.001529f, 0.009643f, 0.004124f, 0.001925f, -0.006223f, 0.004755f, 0.001375f, 0.002944f, -0.004080f, 0.000438f, 0.001371f, 0.002243f, -0.005530f, -0.003914f, + 0.001452f, -0.007463f, -0.007788f, 0.003435f, 0.005819f, -0.006473f, -0.003372f, -0.002407f, 0.000422f, 0.006001f, 0.004665f, 0.002205f, 0.000836f, 0.015312f, 0.005889f, -0.004584f, 0.005839f, 0.004413f, -0.004258f, 0.007387f, -0.002716f, -0.001531f, -0.000091f, -0.002824f, 0.006304f, -0.003248f, 0.001622f, 0.004204f, 0.003026f, -0.005225f, 0.002188f, 0.001562f, 0.001108f, -0.001366f, -0.002839f, -0.000403f, 0.008831f, 0.001667f, 0.003866f, 0.021828f, 0.008796f, -0.001355f, 0.001139f, 0.005121f, 0.002753f, -0.001311f, -0.009208f, 0.000458f, 0.008468f, -0.008370f, -0.000794f, -0.015844f, 0.004359f, 0.006671f, 0.000596f, -0.003656f, 0.011858f, 0.008378f, -0.007374f, 0.003800f, 0.000607f, -0.006452f, 0.010602f, 0.005912f, -0.000513f, 0.004375f, 0.010112f, -0.002922f, -0.001886f, 0.000828f, 0.000229f, 0.000403f, 0.002559f, 0.012379f, 0.002632f, 0.001992f, -0.019571f, -0.000872f, 0.001073f, 0.002535f, -0.008760f, 0.002247f, -0.007032f, -0.005349f, -0.007448f, -0.004794f, 0.000219f, 0.002485f, -0.004485f, 0.004853f, -0.011172f, -0.006314f, -0.000524f, 0.000058f, 0.003804f, -0.004331f, + -0.000898f, -0.003895f, 0.002617f, 0.006372f, -0.003572f, 0.000896f, -0.003088f, -0.000342f, 0.009634f, 0.007710f, -0.002928f, 0.007244f, -0.003312f, -0.005711f, -0.007477f, -0.000321f, -0.000844f, 0.034857f, -0.014233f, 0.003467f, -0.000600f, -0.005654f, 0.006084f, 0.010248f, -0.005577f, 0.010972f, 0.000083f, 0.011662f, 0.003698f, 0.004553f, -0.004088f, 0.006909f, 0.003062f, 0.007063f, -0.012805f, 0.007897f, -0.007303f, 0.003185f, -0.006025f, 0.009145f, -0.001644f, 0.009214f, -0.004335f, 0.003849f, -0.002608f, -0.000011f, 0.000297f, -0.000120f, 0.004023f, 0.018427f, 0.001467f, 0.005953f, -0.004200f, -0.007415f, 0.001046f, 0.000954f, 0.001056f, 0.003505f, -0.004958f, 0.012430f, -0.000004f, 0.010578f, 0.001423f, -0.003319f, -0.004555f, -0.013668f, 0.007944f, 0.005698f, -0.006016f, 0.001748f, 0.006671f, 0.004138f, -0.016126f, 0.011229f, 0.000323f, 0.008359f, -0.009261f, -0.009761f, -0.004335f, -0.009385f, -0.000895f, 0.013795f, 0.003737f, -0.003164f, 0.002033f, 0.008765f, -0.000872f, -0.003569f, -0.001150f, -0.003829f, 0.006770f, -0.006320f, 0.001650f, -0.002003f, 0.009023f, -0.020887f, + 0.004346f, -0.006515f, -0.019104f, -0.014665f, 0.007906f, 0.008876f, 0.011571f, -0.005578f, -0.002931f, 0.008074f, 0.003819f, 0.012008f, 0.003880f, -0.001164f, 0.001223f, 0.007740f, 0.014750f, -0.003595f, 0.004292f, 0.000013f, 0.011935f, 0.002954f, -0.000754f, -0.002180f, -0.009152f, -0.013636f, 0.000110f, -0.001750f, 0.004120f, -0.000528f, 0.003209f, 0.002701f, 0.000782f, 0.001177f, 0.002689f, -0.004432f, 0.000451f, 0.006914f, 0.010228f, -0.004712f, 0.001130f, -0.004094f, -0.006031f, 0.008898f, -0.006653f, -0.015894f, -0.006524f, -0.003756f, 0.007701f, 0.001094f, 0.008502f, 0.008362f, -0.004326f, 0.000843f, -0.006908f, -0.000415f, -0.003057f, 0.010672f, -0.012899f, 0.000228f, 0.004126f, -0.012850f, -0.015354f, 0.000923f, 0.004518f, 0.010361f, -0.006876f, -0.015246f, 0.008219f, -0.013918f, 0.017188f, 0.010809f, 0.002798f, 0.008594f, 0.000347f, -0.003371f, -0.046890f, 0.009075f, 0.001866f, -0.023796f, -0.029892f, -0.005223f, -0.023184f, 0.017967f, 0.004815f, -0.014187f, 0.000388f, -0.006870f, 0.001589f, -0.009848f, 0.000737f, -0.001037f, -0.000347f, 0.012510f, -0.005103f, -0.003541f, + -0.005874f, -0.005297f, -0.012715f, -0.008738f, 0.011881f, -0.005596f, 0.007360f, -0.007370f, 0.002949f, -0.000306f, 0.006623f, -0.007676f, 0.004925f, -0.007709f, 0.002743f, -0.003270f, -0.004875f, 0.003938f, -0.011849f, 0.003892f, -0.006203f, -0.002618f, -0.008688f, 0.019638f, 0.009265f, 0.017154f, -0.007847f, 0.006933f, 0.005708f, -0.004030f, 0.002878f, -0.008892f, 0.008641f, 0.018856f, 0.015114f, -0.011196f, -0.003030f, 0.004015f, -0.007852f, -0.005717f, -0.013601f, -0.025845f, -0.008593f, 0.012451f, 0.004748f, -0.006782f, 0.002756f, 0.000794f, -0.006565f, -0.012568f, -0.011596f, 0.008085f, 0.001873f, -0.019151f, 0.003426f, 0.001328f, 0.002087f, -0.017994f, -0.007402f, -0.004526f, 0.013896f, -0.003416f, 0.003414f, -0.013941f, -0.014642f, 0.000977f, 0.004419f, -0.008398f, -0.004839f, -0.007852f, 0.016932f, 0.003996f, -0.005543f, -0.011978f, -0.012030f, -0.011533f, -0.003224f, 0.006018f, 0.016954f, 0.005822f, 0.009592f, -0.007232f, 0.018022f, 0.010642f, 0.003329f, 0.000583f, 0.018505f, -0.010418f, 0.001751f, 0.006267f, 0.012499f, -0.019846f, -0.010353f, 0.009274f, 0.003508f, -0.002351f, + 0.021055f, -0.008774f, 0.005893f, 0.013215f, 0.003861f, 0.002631f, 0.009189f, 0.004286f, 0.004494f, 0.005259f, 0.001862f, 0.005996f, -0.000491f, 0.008596f, -0.002070f, 0.020299f, -0.014579f, 0.016820f, 0.012657f, -0.010654f, 0.012503f, 0.002974f, 0.010556f, 0.011625f, -0.024475f, 0.000016f, -0.001342f, -0.006582f, 0.003452f, -0.005829f, 0.006249f, -0.001953f, 0.014917f, -0.000781f, 0.001926f, 0.007426f, 0.003832f, 0.024475f, -0.006088f, -0.003467f, -0.005614f, 0.017495f, 0.009368f, 0.002104f, 0.006908f, -0.011395f, 0.026104f, 0.008776f, -0.001672f, 0.009957f, 0.012816f, -0.020802f, -0.001022f, 0.005194f, 0.002863f, 0.000180f, 0.018213f, -0.008357f, -0.010371f, 0.024680f, 0.004152f, -0.001556f, -0.001966f, 0.012971f, 0.001468f, -0.001693f, -0.001895f, -0.005788f, 0.006911f, -0.003537f, 0.009064f, 0.006131f, -0.014852f, -0.014488f, 0.002437f, 0.029033f, 0.000290f, 0.006019f, -0.017167f, 0.008914f, 0.012571f, -0.007277f, 0.009539f, 0.011017f, -0.017301f, -0.010952f, -0.001446f, -0.023083f, -0.011416f, -0.013754f, 0.005002f, -0.004676f, -0.004134f, -0.002488f, 0.017371f, -0.022286f, + 0.011040f, 0.004895f, -0.005966f, 0.013670f, -0.007319f, 0.001338f, -0.017189f, -0.000371f, 0.013118f, 0.010209f, 0.023398f, -0.025218f, -0.003848f, -0.027995f, -0.003008f, -0.000526f, -0.002606f, 0.003470f, 0.017064f, -0.017954f, 0.001184f, -0.010793f, 0.032278f, -0.012852f, -0.007108f, 0.028016f, 0.021311f, 0.004371f, -0.037717f, -0.008818f, 0.018241f, 0.001947f, -0.001223f, -0.004947f, -0.002394f, -0.002487f, 0.003310f, 0.006427f, 0.006053f, 0.005631f, 0.034600f, -0.006615f, -0.004272f, 0.000487f, 0.005096f, -0.009674f, 0.006638f, 0.004038f, -0.000589f, -0.010722f, -0.006314f, 0.012664f, 0.013829f, 0.025241f, 0.007064f, -0.009868f, 0.007002f, 0.000020f, 0.007099f, 0.000778f, 0.014540f, -0.011206f, -0.016383f, -0.017418f, 0.012350f, -0.004822f, 0.003216f, 0.004776f, -0.005498f, -0.001048f, 0.030348f, 0.010142f, -0.024017f, 0.017700f, 0.006561f, 0.029793f, -0.014594f, -0.014826f, 0.009634f, 0.015784f, 0.012159f, 0.005749f, -0.001631f, 0.000304f, 0.008896f, -0.010617f, -0.001465f, -0.000902f, 0.014191f, -0.010919f, 0.027267f, -0.003463f, 0.001951f, -0.017389f, -0.010893f, -0.023254f, + -0.019799f, -0.008042f, 0.006546f, 0.006687f, 0.034591f, 0.033495f, -0.004438f, 0.002176f, 0.001046f, -0.000326f, -0.000834f, -0.007637f, -0.023294f, -0.018139f, -0.009477f, 0.007479f, -0.006781f, -0.020511f, -0.006025f, 0.003147f, -0.001851f, -0.031128f, -0.009321f, 0.006105f, -0.003461f, 0.002234f, 0.001780f, 0.008505f, 0.013117f, 0.001509f, -0.010015f, 0.009230f, 0.010046f, 0.006579f, -0.000649f, 0.012687f, -0.026959f, 0.008286f, -0.023887f, 0.028854f, -0.021125f, 0.007396f, -0.022375f, -0.004355f, -0.024953f, -0.013791f, -0.015563f, -0.017407f, 0.011439f, -0.015375f, -0.002856f, 0.004554f, -0.000157f, -0.008464f, -0.005580f, -0.003164f, -0.024167f, 0.000242f, 0.001777f, 0.011536f, -0.037669f, 0.000431f, -0.000644f, 0.017294f, 0.021713f, -0.014748f, -0.008288f, 0.000623f, 0.017109f, -0.031355f, 0.021147f, -0.013796f, -0.007804f, 0.002412f, -0.028018f, 0.004243f, -0.019473f, -0.048377f, -0.020233f, -0.010337f, 0.006686f, 0.011303f, -0.016923f, -0.007194f, -0.020916f, -0.018444f, 0.007460f, -0.016349f, 0.013899f, 0.004995f, 0.009518f, -0.003146f, -0.016865f, 0.025361f, 0.008937f, 0.013661f, + -0.020713f, 0.006838f, 0.001784f, -0.028972f, 0.015441f, 0.009074f, -0.000721f, -0.020075f, -0.009037f, 0.008155f, 0.008100f, -0.001599f, 0.001598f, 0.012334f, -0.015020f, -0.010843f, 0.013989f, -0.032681f, -0.033064f, -0.042012f, -0.011124f, 0.012137f, -0.037914f, -0.031006f, -0.020195f, -0.000373f, 0.010912f, 0.003185f, 0.001589f, -0.000283f, -0.012501f, -0.015213f, -0.036088f, 0.017093f, 0.002876f, 0.040373f, -0.012073f, 0.000347f, -0.027766f, -0.031156f, 0.001525f, 0.019054f, -0.001062f, -0.019794f, 0.010188f, 0.004640f, 0.025456f, 0.002321f, 0.000798f, -0.013942f, -0.005482f, 0.011607f, -0.030681f, -0.051658f, -0.017965f, -0.012826f, -0.043003f, -0.032873f, -0.014541f, 0.024075f, -0.000976f, 0.040560f, 0.008948f, -0.002662f, -0.021160f, 0.008673f, 0.042138f, -0.042172f, -0.037342f, -0.012105f, -0.005118f, -0.026282f, 0.026818f, 0.008012f, 0.015206f, 0.016990f, -0.025462f, -0.002749f, 0.012328f, -0.016556f, 0.033347f, 0.000826f, 0.008793f, -0.008937f, 0.009555f, -0.020731f, -0.010191f, -0.007007f, 0.013801f, 0.005828f, 0.021241f, -0.031548f, 0.004844f, -0.000197f, -0.021492f, 0.025740f, + -0.013216f, -0.037725f, 0.009715f, 0.013440f, 0.005109f, -0.011442f, -0.000263f, -0.015945f, 0.005171f, 0.012498f, 0.008157f, -0.026149f, 0.012911f, -0.006358f, -0.025627f, -0.017480f, -0.032014f, 0.000103f, -0.002196f, -0.001723f, 0.008009f, 0.020639f, 0.030430f, 0.021226f, -0.007537f, -0.020658f, 0.010526f, -0.006374f, 0.001089f, -0.016711f, 0.032522f, 0.020997f, 0.000001f, 0.040259f, -0.022116f, 0.010864f, 0.031645f, 0.016232f, -0.037901f, 0.004987f, 0.000649f, -0.023938f, 0.003724f, -0.053449f, -0.046112f, -0.010982f, -0.000169f, 0.002091f, -0.000917f, -0.018975f, -0.000408f, -0.005395f, 0.017407f, 0.003374f, -0.000801f, 0.003223f, -0.040189f, 0.013975f, 0.007850f, 0.022422f, 0.009631f, 0.009656f, 0.026709f, 0.013039f, 0.004144f, 0.065894f, 0.014456f, 0.025229f, 0.035378f, 0.001422f, 0.025057f, 0.005933f, -0.013374f, 0.015740f, 0.001493f, 0.007368f, -0.013080f, 0.000590f, -0.008356f, 0.005126f, -0.008324f, 0.018032f, 0.002611f, -0.012176f, -0.014067f, 0.001284f, -0.038806f, 0.021977f, 0.015747f, -0.002907f, -0.003170f, 0.007917f, -0.010040f, -0.009824f, -0.012485f, -0.016872f, + 0.013317f, -0.013937f, 0.021756f, 0.023107f, 0.024740f, 0.023856f, -0.005733f, -0.041839f, 0.000864f, 0.013605f, 0.039813f, -0.012908f, -0.001534f, 0.014064f, 0.027189f, 0.034358f, -0.007194f, 0.007436f, 0.034080f, 0.043730f, -0.029467f, -0.030860f, -0.041421f, 0.040752f, -0.002329f, -0.013801f, 0.015258f, 0.015001f, 0.038141f, 0.032303f, 0.003744f, 0.035257f, 0.048996f, 0.015519f, -0.022272f, 0.024757f, -0.020489f, -0.010288f, -0.002835f, -0.013358f, -0.016930f, 0.011959f, -0.007670f, -0.006980f, -0.020806f, 0.053722f, 0.008193f, -0.024958f, 0.001759f, -0.001270f, 0.024775f, 0.026815f, 0.011361f, -0.013471f, 0.026301f, -0.004071f, 0.016906f, -0.044350f, 0.004223f, 0.022247f, -0.018410f, 0.009529f, -0.020161f, -0.015026f, 0.050279f, 0.023071f, 0.016388f, -0.000397f, -0.041243f, -0.007367f, 0.014194f, 0.012438f, 0.008703f, -0.006917f, 0.035952f, -0.020655f, 0.020747f, -0.007774f, 0.014304f, 0.017537f, 0.028819f, 0.040483f, -0.040841f, 0.002963f, 0.023529f, 0.014969f, 0.032341f, 0.034501f, -0.040914f, 0.005316f, -0.010421f, -0.015975f, -0.000424f, -0.015177f, 0.010019f, 0.032470f, + 0.064808f, 0.002664f, -0.031047f, 0.008624f, -0.020756f, 0.013265f, -0.018018f, -0.019603f, 0.058928f, -0.044915f, 0.074006f, 0.045076f, -0.010827f, 0.014671f, 0.035853f, 0.004926f, -0.055602f, 0.021625f, -0.044969f, 0.010456f, 0.004243f, -0.022621f, 0.001209f, -0.003380f, 0.032542f, -0.016503f, -0.001299f, -0.001633f, -0.009465f, 0.067735f, -0.003529f, -0.010686f, 0.009204f, 0.022481f, -0.022769f, -0.049545f, 0.039197f, -0.006725f, -0.002426f, 0.043554f, -0.025372f, -0.007775f, -0.030276f, 0.007632f, -0.020932f, 0.024251f, 0.023683f, 0.046247f, -0.012708f, 0.012380f, 0.032170f, -0.045302f, 0.006313f, -0.029199f, -0.043885f, -0.058149f, -0.029151f, -0.062861f, -0.068592f, -0.010758f, 0.005624f, -0.033866f, -0.034062f, 0.020644f, -0.001177f, -0.021105f, -0.036608f, 0.025929f, -0.018764f, 0.005379f, 0.036209f, -0.067201f, -0.016785f, -0.014980f, 0.031313f, 0.071998f, 0.003372f, -0.019625f, 0.020230f, -0.010082f, -0.030806f, -0.045274f, -0.034495f, 0.036756f, -0.031306f, 0.014423f, 0.034972f, 0.014515f, 0.022208f, -0.043258f, 0.060453f, 0.037708f, 0.032640f, -0.025384f, 0.043096f, -0.005618f, + 0.028233f, 0.018202f, 0.005671f, 0.014925f, 0.020476f, 0.012045f, -0.007975f, -0.011857f, -0.010620f, 0.003417f, -0.030358f, -0.035790f, 0.018607f, 0.007531f, 0.010361f, -0.029736f, 0.006751f, 0.007479f, 0.020309f, 0.030610f, 0.046833f, -0.028472f, 0.006038f, 0.066826f, 0.013423f, 0.005789f, 0.005213f, -0.015702f, 0.003529f, 0.066249f, 0.018133f, 0.042189f, 0.010843f, -0.049084f, -0.021472f, -0.036411f, 0.096711f, 0.037866f, -0.040330f, -0.026290f, -0.036411f, 0.003204f, -0.024952f, -0.056348f, 0.009411f, -0.043488f, 0.057190f, -0.007241f, -0.053721f, 0.062816f, 0.049166f, 0.004687f, -0.019523f, 0.006686f, -0.036608f, 0.040548f, -0.047785f, 0.017608f, -0.007463f, 0.045472f, -0.098125f, -0.067444f, 0.037256f, 0.017546f, 0.012716f, 0.031823f, -0.034328f, -0.043884f, -0.025026f, -0.036221f, 0.018782f, -0.038761f, 0.009779f, 0.024757f, 0.040213f, 0.000870f, 0.033434f, 0.019853f, 0.004259f, -0.011514f, -0.037989f, -0.026065f, 0.019693f, -0.044865f, 0.021099f, 0.005055f, 0.036340f, 0.028869f, -0.015911f, -0.055557f, -0.037842f, -0.003316f, -0.004574f, -0.014553f, 0.036147f, -0.066889f, + -0.007110f, 0.002664f, -0.072241f, -0.000933f, -0.010680f, -0.005068f, 0.005433f, 0.041813f, -0.042250f, -0.109664f, 0.039008f, 0.045967f, 0.024529f, 0.087279f, -0.073324f, -0.007809f, 0.045391f, 0.038120f, -0.047096f, -0.018957f, -0.014960f, 0.069863f, 0.010571f, 0.067076f, -0.096623f, 0.016313f, -0.114817f, -0.063916f, -0.067926f, 0.080361f, 0.021200f, -0.045530f, 0.042119f, 0.009807f, -0.045676f, 0.048542f, -0.061475f, 0.034280f, 0.083970f, 0.031270f, -0.029855f, -0.019284f, 0.011675f, -0.020932f, -0.024891f, -0.002585f, 0.039015f, -0.006344f, 0.007276f, -0.040979f, -0.008622f, 0.057752f, -0.041868f, 0.032211f, 0.074630f, 0.037969f, -0.003354f, -0.013646f, -0.024808f, -0.047151f, -0.035427f, 0.041901f, -0.023786f, 0.039402f, 0.027505f, 0.014050f, 0.001419f, 0.015916f, -0.012376f, -0.059945f, -0.021598f, 0.044413f, 0.033927f, 0.037109f, -0.039076f, 0.067386f, -0.017748f, 0.026853f, -0.049786f, 0.046032f, 0.076607f, -0.014443f, -0.028374f, -0.001685f, 0.001967f, -0.015989f, 0.015980f, 0.035098f, -0.064461f, 0.042972f, 0.039388f, -0.008553f, 0.045775f, 0.026225f, 0.019092f, -0.028299f, + 0.004972f, 0.043376f, -0.089713f, -0.077355f, -0.034038f, 0.022382f, -0.041925f, -0.118343f, 0.049120f, 0.034322f, -0.016470f, -0.019010f, 0.000334f, -0.005973f, -0.040876f, -0.109688f, -0.004426f, -0.002141f, 0.040643f, 0.053909f, 0.001096f, -0.061007f, 0.080535f, -0.022766f, -0.056420f, 0.050335f, -0.008229f, -0.030750f, 0.038854f, 0.010310f, -0.008309f, 0.032756f, -0.045258f, 0.042626f, -0.015461f, 0.001281f, -0.013308f, -0.011372f, -0.063084f, 0.024712f, -0.024237f, 0.009706f, -0.025467f, -0.002294f, -0.019082f, 0.017769f, -0.011332f, 0.067693f, 0.011648f, 0.044176f, -0.017694f, 0.010817f, 0.027656f, -0.012256f, 0.018928f, -0.004203f, 0.033393f, -0.002088f, -0.012014f, 0.053243f, -0.048622f, 0.026301f, 0.035918f, -0.022013f, 0.040666f, -0.025941f, -0.001971f, 0.020776f, -0.017286f, 0.048160f, 0.042517f, 0.008398f, 0.071388f, -0.045555f, -0.104131f, -0.018101f, -0.065139f, -0.042904f, 0.148028f, -0.004828f, 0.043835f, -0.008132f, -0.065760f, -0.002924f, 0.060087f, 0.087684f, 0.050798f, 0.088014f, -0.052516f, -0.016842f, -0.026999f, -0.054797f, 0.026295f, 0.046913f, -0.046932f, 0.059007f, + -0.033631f, 0.009103f, 0.001206f, 0.007112f, -0.043083f, -0.005792f, -0.038793f, -0.032203f, 0.001573f, -0.012079f, -0.028823f, -0.011089f, 0.023798f, -0.024907f, 0.022110f, -0.011263f, 0.063858f, -0.027846f, 0.020313f, 0.004714f, -0.013655f, -0.049001f, -0.016440f, 0.038954f, 0.008824f, -0.011536f, 0.051892f, -0.035987f, -0.035128f, -0.004180f, 0.049821f, -0.042405f, -0.003748f, 0.009392f, 0.015334f, -0.047324f, 0.017043f, 0.017657f, -0.014590f, -0.049510f, 0.003694f, -0.038226f, 0.019527f, 0.009858f, 0.018119f, -0.076100f, -0.029670f, 0.044975f, 0.122061f, -0.052637f, -0.003717f, 0.010657f, -0.016066f, -0.032321f, 0.003578f, 0.100308f, 0.027398f, -0.008759f, -0.003752f, -0.024731f, -0.000673f, -0.018450f, 0.044398f, 0.003805f, -0.017863f, -0.024323f, 0.008967f, 0.020097f, -0.030625f, 0.033556f, 0.020057f, 0.036753f, 0.016364f, 0.045091f, -0.074081f, 0.101338f, 0.015101f, 0.024037f, 0.025305f, -0.021868f, -0.025344f, 0.002196f, -0.008958f, 0.015461f, 0.034287f, -0.045078f, 0.016659f, -0.008552f, 0.013383f, 0.012472f, 0.009202f, 0.027583f, 0.022022f, -0.018552f, 0.019953f, 0.017320f, + -0.014611f, -0.026471f, 0.009875f, -0.008642f, -0.021488f, 0.014897f, 0.012742f, -0.000785f, -0.013507f, 0.001573f, -0.009420f, -0.004170f, 0.002593f, 0.007097f, 0.012094f, -0.019548f, -0.001483f, 0.017683f, -0.005770f, 0.015979f, 0.004501f, 0.011833f, 0.023434f, 0.007534f, -0.020460f, 0.003420f, 0.022531f, -0.010687f, 0.000754f, 0.011133f, -0.033387f, -0.001075f, -0.006753f, -0.031838f, 0.047549f, -0.010528f, 0.000252f, 0.028027f, 0.006900f, -0.019296f, 0.010424f, -0.018426f, -0.001331f, 0.015962f, -0.015378f, -0.005687f, 0.036747f, -0.034901f, 0.007352f, 0.003926f, 0.016405f, -0.015299f, 0.016171f, -0.004846f, 0.019167f, -0.006821f, 0.023609f, -0.098966f, -0.201561f, -0.025806f, 0.126632f, 0.097500f, 0.279449f, 0.134640f, -0.065125f, -0.056680f, -0.132487f, -0.231762f, -0.029367f, -0.089669f, -0.027974f, 0.164127f, 0.104350f, 0.111812f, 0.213116f, -0.007109f, -0.047328f, -0.080036f, -0.211023f, -0.115981f, -0.037631f, -0.038735f, 0.005663f, 0.096470f, 0.074112f, 0.079423f, 0.148563f, 0.087620f, -0.055003f, 0.079912f, -0.083676f, -0.193887f, 0.024542f, -0.129890f, -0.181988f, 0.071515f, + -0.016005f, -0.032932f, 0.222868f, 0.073917f, 0.058885f, 0.193284f, -0.021177f, -0.037007f, 0.058027f, -0.128084f, -0.160875f, -0.042143f, -0.137885f, -0.121628f, 0.025301f, 0.027685f, 0.054704f, 0.169111f, 0.147923f, 0.091372f, 0.105804f, 0.022019f, -0.085083f, -0.089088f, -0.113181f, -0.152452f, -0.073104f, -0.037201f, -0.053618f, 0.048840f, 0.147164f, 0.099735f, 0.094220f, 0.082421f, -0.057406f, 0.005118f, 0.011821f, -0.094694f, -0.026192f, -0.013995f}, + {0.010523f, 0.001233f, -0.009159f, -0.002329f, -0.002385f, -0.001025f, -0.002392f, 0.004557f, 0.010740f, 0.001637f, 0.008729f, 0.003248f, -0.002100f, -0.004759f, 0.004082f, -0.001445f, 0.008632f, 0.006097f, -0.002946f, -0.005422f, -0.006346f, 0.003188f, -0.002123f, 0.000742f, -0.004603f, -0.001929f, -0.001176f, 0.003696f, -0.004506f, 0.003654f, -0.001447f, -0.005044f, 0.006486f, 0.006559f, 0.001073f, 0.002454f, 0.001303f, -0.001286f, -0.004234f, -0.013756f, 0.003805f, -0.004438f, 0.004191f, -0.004394f, -0.005325f, 0.003961f, -0.004692f, 0.002290f, 0.002512f, -0.009690f, 0.000403f, 0.001455f, 0.002411f, -0.003813f, 0.005131f, -0.005090f, -0.003276f, -0.001706f, -0.002315f, 0.003380f, -0.000562f, 0.001633f, 0.002908f, 0.004279f, -0.000754f, -0.004583f, -0.004632f, 0.000302f, -0.009714f, -0.004214f, -0.000897f, 0.008788f, 0.002650f, 0.003527f, 0.002741f, 0.004923f, -0.002073f, 0.004902f, 0.008563f, -0.006586f, -0.005715f, -0.008775f, 0.007741f, 0.003805f, 0.000573f, 0.011506f, -0.001274f, -0.000253f, -0.003666f, -0.002982f, 0.002406f, -0.003214f, -0.006168f, 0.003297f, 0.000866f, 0.009591f, + 0.013137f, -0.003560f, -0.007919f, -0.009718f, -0.000727f, -0.005604f, -0.005419f, -0.003743f, -0.000865f, -0.007765f, 0.007242f, -0.002854f, -0.003024f, -0.005176f, -0.003868f, 0.001298f, 0.008143f, -0.000979f, -0.002533f, 0.002385f, -0.008284f, 0.005985f, -0.005228f, -0.018367f, 0.008891f, 0.005891f, 0.009887f, 0.010302f, 0.001812f, 0.005362f, -0.005627f, 0.001415f, 0.007709f, 0.000480f, -0.000301f, -0.002044f, -0.001271f, 0.004093f, -0.004095f, -0.002936f, -0.000066f, 0.003867f, -0.003639f, -0.004342f, -0.006433f, 0.007616f, 0.002721f, 0.000747f, -0.002349f, -0.008067f, -0.000812f, 0.005527f, 0.002940f, -0.001545f, -0.002417f, 0.005114f, -0.002144f, -0.027383f, 0.014247f, -0.001369f, 0.000378f, 0.004943f, 0.006964f, -0.010213f, -0.001328f, -0.001849f, 0.005782f, 0.002194f, -0.006274f, 0.019442f, -0.002126f, -0.001223f, 0.008615f, 0.007092f, 0.002278f, 0.004917f, 0.015835f, -0.007878f, 0.000447f, -0.004023f, 0.001536f, -0.004904f, 0.000339f, 0.000482f, 0.001724f, -0.008833f, 0.000693f, -0.002132f, -0.003388f, -0.000393f, 0.005468f, -0.003071f, 0.005074f, 0.007486f, -0.013030f, 0.001727f, + -0.005355f, -0.001451f, -0.008070f, 0.003954f, -0.004838f, -0.000836f, -0.002787f, -0.008125f, 0.002968f, -0.005465f, 0.003557f, 0.001994f, -0.004155f, -0.005938f, 0.000026f, 0.005424f, 0.003941f, 0.009889f, 0.004403f, -0.004373f, -0.012434f, -0.000908f, 0.001912f, 0.015299f, -0.005050f, -0.002475f, -0.000480f, -0.003175f, -0.008387f, -0.004058f, -0.007894f, -0.001321f, 0.005698f, -0.001866f, 0.006745f, 0.003974f, 0.002907f, 0.003360f, -0.004609f, 0.020586f, 0.011022f, -0.002621f, -0.007444f, 0.012048f, -0.012753f, -0.001611f, 0.008022f, -0.004895f, -0.003381f, -0.005128f, 0.013787f, -0.004026f, 0.004668f, 0.001731f, 0.004619f, 0.018650f, -0.017514f, 0.006021f, 0.009660f, -0.005398f, -0.016165f, -0.008096f, -0.000554f, 0.001697f, -0.001784f, -0.002377f, 0.007617f, 0.010872f, -0.000245f, -0.006567f, 0.001146f, -0.008490f, 0.003335f, -0.005069f, 0.003844f, 0.011607f, 0.004608f, -0.010244f, 0.000326f, 0.001399f, 0.016949f, 0.003799f, 0.008800f, -0.001586f, 0.004259f, 0.003646f, -0.019098f, 0.001127f, 0.010004f, 0.005167f, 0.011120f, -0.008398f, -0.005021f, -0.008325f, 0.003186f, 0.006855f, + -0.001191f, 0.003001f, 0.001220f, -0.003588f, 0.002483f, -0.002368f, 0.003888f, 0.004165f, 0.000089f, 0.006140f, 0.001788f, 0.000742f, 0.002965f, 0.013420f, 0.003046f, 0.008167f, 0.008640f, 0.041812f, -0.010028f, -0.003261f, -0.005626f, 0.009006f, 0.006265f, 0.014586f, 0.006216f, -0.001523f, 0.007382f, 0.000235f, 0.008190f, 0.003426f, 0.011133f, 0.000720f, 0.009464f, 0.011892f, -0.011949f, 0.002736f, 0.003990f, 0.002560f, 0.002723f, 0.003258f, -0.006784f, 0.000393f, -0.007913f, -0.000860f, 0.000450f, -0.014308f, -0.009201f, 0.004027f, 0.000723f, -0.000186f, 0.006643f, 0.006036f, -0.002176f, -0.012376f, 0.004619f, 0.011666f, 0.008351f, 0.010870f, -0.002017f, 0.005950f, 0.011423f, -0.017423f, 0.006457f, 0.007867f, -0.007800f, 0.010977f, -0.006671f, -0.001540f, 0.001999f, 0.002153f, -0.004914f, 0.005107f, -0.000584f, -0.002079f, -0.005112f, -0.005133f, 0.007101f, 0.005900f, 0.003791f, 0.005725f, 0.010441f, 0.004742f, 0.014138f, -0.003257f, -0.013541f, 0.013562f, 0.003522f, 0.006156f, 0.004242f, -0.003462f, 0.005146f, 0.001357f, 0.002380f, 0.007935f, 0.017481f, -0.021719f, + 0.013133f, 0.002209f, 0.013446f, 0.002594f, -0.008893f, 0.001948f, 0.010124f, -0.013806f, -0.003678f, 0.000861f, -0.015736f, -0.003550f, -0.012331f, -0.007567f, -0.009266f, -0.009674f, 0.002869f, -0.014699f, -0.009808f, -0.011798f, -0.003923f, 0.010392f, 0.002853f, -0.014035f, -0.006386f, -0.014631f, -0.004640f, 0.002679f, 0.019206f, -0.016792f, 0.005533f, -0.004533f, -0.007241f, -0.012552f, -0.000690f, 0.001793f, 0.011761f, 0.006607f, 0.000309f, -0.011306f, -0.020622f, -0.000463f, 0.004227f, 0.014981f, 0.003811f, 0.004759f, -0.012685f, 0.004037f, 0.007918f, 0.000750f, -0.000135f, -0.005902f, -0.007597f, -0.001850f, 0.003786f, 0.001220f, -0.005636f, 0.000442f, -0.014160f, -0.001321f, -0.012308f, 0.007102f, -0.004213f, 0.007266f, -0.012287f, -0.007642f, -0.016223f, -0.000385f, -0.011360f, -0.002225f, 0.001076f, -0.011276f, -0.008454f, 0.005058f, 0.005095f, -0.008884f, -0.051093f, 0.008031f, 0.005660f, -0.014892f, -0.003413f, -0.000265f, 0.000383f, -0.003031f, -0.005001f, -0.003992f, -0.015237f, 0.011410f, -0.007421f, 0.001355f, -0.012682f, -0.004747f, 0.018175f, 0.016249f, -0.010531f, -0.006617f, + 0.000492f, -0.000596f, -0.008625f, -0.010348f, -0.007121f, 0.000866f, 0.000787f, -0.000035f, -0.001016f, 0.003902f, -0.012394f, 0.003518f, 0.000473f, -0.022299f, -0.002572f, -0.006947f, 0.010100f, 0.014249f, 0.002378f, -0.002986f, 0.000804f, -0.013267f, -0.015974f, 0.008200f, 0.016052f, 0.017291f, -0.004636f, 0.002789f, 0.010501f, 0.010220f, -0.005356f, 0.009388f, 0.016226f, -0.001133f, 0.013699f, 0.010985f, -0.013253f, 0.003945f, 0.000990f, 0.014017f, -0.008660f, -0.009906f, 0.008554f, 0.010541f, -0.003169f, 0.000578f, -0.015669f, 0.010800f, -0.008713f, 0.011484f, -0.019615f, 0.001939f, 0.004714f, 0.009364f, 0.000553f, -0.008077f, -0.016634f, -0.020177f, 0.006549f, -0.017876f, 0.021617f, 0.020795f, 0.000193f, -0.029176f, 0.011442f, 0.001213f, -0.005833f, 0.019429f, -0.000391f, -0.017539f, -0.002305f, 0.021170f, -0.027545f, 0.000462f, -0.007264f, -0.021743f, -0.006440f, 0.000007f, -0.004711f, -0.011313f, 0.005784f, -0.009430f, 0.006846f, -0.008082f, -0.014996f, 0.007355f, -0.001617f, 0.010731f, -0.022086f, 0.008447f, 0.016403f, -0.007155f, 0.000835f, 0.016711f, 0.024355f, -0.006954f, + -0.005666f, -0.021321f, 0.000643f, -0.017639f, -0.002010f, -0.012366f, -0.000006f, 0.001393f, 0.009453f, 0.004538f, 0.008574f, -0.006921f, 0.001052f, 0.005433f, -0.001747f, 0.022743f, -0.015938f, -0.007790f, 0.029579f, 0.030163f, -0.006703f, -0.002137f, -0.019800f, -0.009953f, 0.000225f, -0.005471f, -0.013395f, 0.018215f, 0.004865f, -0.004885f, 0.026119f, 0.005185f, -0.013774f, -0.000291f, -0.025599f, -0.012169f, -0.014842f, 0.024345f, -0.006614f, -0.000361f, 0.016711f, -0.004095f, 0.009817f, -0.005517f, -0.021507f, -0.001431f, -0.000132f, -0.004425f, -0.012829f, -0.014147f, 0.007169f, -0.011200f, 0.019576f, -0.006081f, -0.014566f, 0.012247f, 0.024587f, -0.006150f, 0.006705f, -0.006647f, 0.014070f, 0.000354f, -0.030461f, 0.010792f, 0.016444f, 0.001728f, -0.005360f, -0.017478f, 0.014351f, 0.009920f, 0.009087f, 0.002014f, 0.005558f, 0.019783f, -0.014344f, 0.002560f, 0.003377f, -0.010847f, -0.021722f, 0.020322f, 0.010689f, 0.037727f, -0.002509f, 0.016720f, -0.006166f, -0.011678f, 0.001318f, -0.001706f, -0.001280f, -0.003218f, -0.013062f, 0.027150f, -0.000256f, 0.002258f, 0.002860f, -0.003620f, + 0.021161f, 0.002964f, 0.017436f, 0.007897f, 0.001836f, 0.019999f, -0.010832f, -0.022212f, -0.006044f, 0.004151f, 0.001001f, -0.009277f, 0.008700f, -0.006817f, -0.033817f, 0.002274f, 0.003013f, -0.018541f, 0.020792f, -0.031843f, 0.006387f, 0.015687f, 0.022892f, -0.022015f, -0.002305f, 0.016562f, 0.011879f, 0.014272f, 0.003372f, 0.029046f, 0.006235f, 0.012606f, -0.002453f, 0.002622f, 0.012633f, 0.007311f, 0.014431f, 0.002015f, -0.017503f, -0.026141f, 0.015446f, 0.007905f, -0.004069f, 0.004134f, 0.009184f, -0.024404f, 0.001353f, -0.015053f, 0.008616f, 0.000071f, 0.017764f, -0.004386f, 0.008589f, -0.002900f, 0.005490f, 0.003210f, 0.000503f, 0.010291f, 0.013721f, 0.005408f, 0.008491f, -0.018929f, 0.009508f, -0.002570f, -0.033313f, -0.022083f, 0.007258f, -0.024366f, -0.000341f, 0.021827f, -0.013804f, 0.042446f, 0.016515f, -0.007446f, 0.024103f, 0.001970f, -0.005740f, -0.015850f, -0.014873f, -0.022153f, -0.001753f, 0.014383f, -0.014538f, -0.001148f, 0.017082f, 0.007737f, 0.010772f, 0.031346f, 0.006349f, 0.020850f, 0.003119f, 0.004969f, -0.029144f, 0.010433f, 0.006488f, -0.017245f, + -0.000614f, 0.010632f, -0.000233f, 0.007404f, -0.017617f, 0.013468f, -0.001131f, 0.003777f, 0.012665f, -0.023900f, -0.016316f, 0.004063f, -0.000342f, 0.012734f, 0.026798f, -0.002777f, 0.006683f, 0.028479f, -0.010692f, -0.019860f, -0.001113f, 0.020723f, -0.004558f, -0.024702f, 0.001966f, 0.008535f, -0.004759f, -0.008075f, -0.001770f, 0.030717f, -0.005932f, 0.026331f, 0.020317f, 0.023934f, 0.001357f, 0.001368f, 0.014325f, 0.004127f, -0.004987f, 0.004321f, -0.019442f, 0.013850f, 0.024520f, 0.014567f, 0.002048f, 0.012793f, -0.010859f, 0.009542f, -0.010595f, 0.014332f, -0.014028f, -0.000882f, -0.001295f, -0.002325f, 0.043454f, -0.007888f, -0.002738f, -0.005274f, 0.005706f, 0.010443f, 0.022552f, 0.024507f, -0.014915f, 0.004354f, 0.025448f, -0.016819f, -0.019079f, 0.008528f, -0.009039f, 0.008526f, 0.048458f, -0.026821f, 0.001416f, 0.000653f, -0.015850f, -0.003379f, -0.017384f, -0.027178f, -0.020978f, -0.028282f, -0.011118f, 0.002566f, 0.021814f, 0.015889f, 0.005578f, 0.022807f, 0.006672f, 0.013680f, 0.012814f, -0.006982f, 0.019973f, 0.021340f, 0.015235f, -0.030370f, -0.016917f, -0.017898f, + 0.006223f, -0.012583f, 0.000594f, 0.007708f, -0.008836f, -0.021724f, 0.013373f, -0.010730f, 0.004655f, 0.003686f, 0.021246f, -0.023137f, 0.034556f, -0.035108f, 0.035331f, -0.000981f, 0.017717f, -0.018113f, 0.006234f, -0.039232f, -0.021298f, -0.019617f, 0.016916f, 0.006738f, 0.024539f, -0.003502f, 0.000028f, -0.013523f, -0.030526f, 0.018881f, -0.016561f, -0.009903f, 0.014829f, 0.033556f, 0.033950f, 0.014498f, -0.001919f, -0.024135f, 0.013780f, -0.036400f, -0.002294f, -0.021343f, 0.011757f, 0.036218f, -0.035701f, 0.011607f, 0.017415f, -0.024208f, -0.001597f, -0.005569f, 0.013288f, -0.016651f, -0.020958f, 0.002791f, -0.008767f, -0.031659f, -0.027311f, -0.031606f, -0.010212f, 0.017298f, -0.024567f, 0.013164f, -0.033056f, -0.007516f, -0.013774f, -0.012978f, -0.026525f, -0.004191f, -0.010949f, -0.016910f, 0.010276f, -0.018639f, 0.016250f, 0.001728f, 0.012360f, -0.024031f, -0.042648f, -0.005518f, 0.006914f, -0.019330f, -0.014119f, 0.004552f, 0.003858f, -0.022309f, -0.011014f, 0.026382f, 0.012455f, -0.006035f, 0.014250f, 0.038789f, 0.000093f, 0.002870f, 0.002879f, -0.005503f, -0.001967f, 0.003630f, + 0.004253f, -0.034052f, -0.012688f, -0.041113f, -0.013354f, -0.038570f, -0.018069f, -0.000689f, 0.040996f, 0.016907f, -0.021792f, -0.027230f, 0.014762f, 0.030326f, 0.020160f, -0.017833f, 0.024710f, -0.012779f, -0.002558f, -0.047794f, -0.013775f, -0.009112f, -0.005872f, -0.034036f, -0.049049f, 0.011896f, -0.000087f, -0.039787f, 0.009423f, 0.051512f, 0.008002f, 0.001413f, -0.034035f, -0.008890f, 0.001749f, 0.000544f, -0.034888f, 0.022490f, -0.034394f, -0.007092f, 0.007898f, -0.016521f, 0.039066f, -0.032528f, -0.033812f, -0.027193f, 0.037674f, 0.017071f, -0.022533f, -0.019801f, -0.013790f, -0.004008f, -0.012530f, -0.012123f, 0.001253f, 0.014452f, 0.036951f, -0.003889f, 0.015297f, 0.014286f, 0.012773f, -0.024753f, -0.032214f, -0.022113f, 0.025389f, -0.004092f, 0.030981f, 0.011135f, -0.004592f, -0.043145f, -0.036773f, -0.003058f, 0.001700f, -0.024669f, -0.017143f, -0.011164f, -0.013533f, -0.056538f, -0.013913f, -0.013130f, -0.022212f, -0.009176f, -0.015160f, -0.025301f, 0.016759f, 0.036884f, 0.018032f, 0.002176f, 0.019150f, 0.028150f, -0.011695f, 0.009898f, 0.004569f, 0.004149f, -0.003551f, -0.005227f, + 0.016224f, 0.009356f, 0.028765f, -0.005422f, 0.000015f, 0.013401f, 0.058834f, 0.001644f, 0.029283f, 0.044574f, -0.007969f, -0.033327f, -0.001879f, 0.040259f, -0.000780f, -0.025848f, -0.036112f, -0.026584f, 0.038116f, 0.028587f, -0.056005f, 0.021703f, 0.026471f, -0.007321f, 0.020023f, 0.059062f, 0.007536f, 0.015520f, -0.016654f, 0.016054f, -0.017775f, -0.010131f, -0.008120f, 0.007223f, 0.017312f, 0.023288f, -0.000004f, 0.011463f, -0.003218f, -0.000253f, -0.007942f, 0.018042f, 0.055759f, -0.014038f, -0.014185f, 0.022232f, 0.016238f, 0.005214f, -0.035604f, 0.028273f, -0.027806f, 0.020974f, 0.024934f, 0.005877f, 0.008470f, -0.002880f, 0.039250f, 0.031062f, 0.003194f, 0.022106f, -0.011681f, 0.027004f, 0.006801f, 0.030094f, 0.041432f, 0.002935f, 0.012690f, -0.001147f, -0.011268f, 0.002999f, 0.019755f, 0.023033f, -0.033819f, -0.018137f, 0.011658f, 0.044366f, -0.016298f, 0.031099f, 0.020923f, 0.009926f, -0.039660f, 0.010231f, 0.010021f, -0.045824f, 0.033648f, -0.022914f, -0.030335f, -0.058529f, 0.019786f, 0.046182f, -0.013295f, -0.028266f, 0.012763f, 0.052975f, 0.034000f, 0.013887f, + 0.040148f, 0.028859f, -0.010610f, -0.080052f, 0.008954f, 0.039018f, 0.018644f, 0.007859f, -0.035091f, -0.001049f, -0.024256f, 0.004691f, -0.002482f, 0.005621f, 0.011845f, 0.015621f, 0.007046f, -0.044252f, 0.024997f, -0.007163f, 0.007621f, 0.031556f, 0.012728f, 0.004838f, -0.011582f, 0.039299f, -0.001231f, 0.038981f, -0.048843f, -0.015948f, 0.015973f, -0.030202f, -0.024363f, 0.000067f, -0.006046f, -0.024143f, 0.003089f, 0.033886f, -0.000673f, 0.000456f, -0.018202f, -0.041043f, -0.024265f, -0.013251f, 0.016850f, -0.006491f, 0.004491f, -0.021493f, -0.020106f, -0.012639f, 0.031884f, -0.023868f, 0.018767f, 0.009402f, 0.010999f, 0.000723f, -0.031150f, -0.048679f, -0.002703f, 0.027662f, -0.036992f, 0.015243f, -0.031668f, 0.017232f, -0.033350f, -0.005194f, -0.032863f, 0.044571f, -0.042895f, -0.030086f, 0.012378f, 0.003917f, 0.022900f, 0.014246f, -0.010945f, -0.009262f, 0.013334f, -0.066704f, -0.008581f, 0.021296f, 0.005976f, -0.015111f, -0.023157f, 0.003269f, -0.021963f, -0.001102f, -0.034467f, 0.034274f, -0.012264f, 0.021856f, -0.045116f, -0.025107f, 0.000072f, 0.057633f, -0.045254f, -0.002924f, + -0.035193f, -0.027713f, -0.007766f, 0.036561f, -0.007190f, 0.016876f, 0.017637f, -0.017641f, -0.039115f, 0.057813f, 0.025727f, -0.031174f, 0.007370f, 0.005416f, 0.016728f, -0.030232f, 0.029389f, -0.001175f, -0.058065f, 0.007631f, 0.013015f, 0.016688f, -0.047871f, -0.010276f, 0.007396f, 0.044746f, 0.009461f, 0.025676f, -0.062023f, -0.036803f, 0.020709f, 0.001755f, 0.042629f, -0.009220f, -0.005617f, 0.005118f, 0.022385f, 0.021308f, 0.008762f, -0.078257f, 0.024120f, -0.006996f, 0.019887f, 0.045451f, -0.012088f, -0.001031f, -0.047547f, 0.018960f, 0.023577f, -0.022384f, -0.014034f, 0.048215f, 0.071034f, 0.022763f, 0.011535f, -0.014535f, -0.058942f, -0.038845f, -0.013923f, -0.001440f, -0.033928f, 0.025446f, -0.069491f, 0.002507f, -0.042972f, 0.021043f, -0.016439f, -0.047680f, -0.004946f, -0.013444f, -0.017297f, -0.054181f, -0.039727f, 0.010344f, 0.041312f, -0.029048f, 0.051192f, -0.045051f, -0.029843f, 0.008715f, -0.005051f, 0.022822f, -0.015424f, -0.016189f, -0.022166f, -0.006736f, -0.073585f, -0.021701f, 0.001471f, -0.003863f, -0.012766f, -0.029375f, 0.022321f, -0.026043f, 0.038405f, -0.012681f, + -0.005357f, -0.028194f, -0.025886f, -0.048844f, -0.021431f, 0.017343f, 0.007005f, -0.003359f, 0.002901f, -0.017761f, -0.013319f, -0.022726f, -0.018916f, 0.009577f, 0.014310f, 0.006541f, -0.041892f, 0.047867f, 0.006674f, -0.020881f, 0.038709f, 0.027500f, 0.046231f, -0.008561f, 0.027346f, -0.062471f, -0.033060f, -0.058874f, 0.061431f, -0.018921f, -0.040597f, -0.039764f, -0.083993f, -0.035047f, 0.061916f, -0.002859f, -0.027766f, 0.014855f, 0.074460f, 0.095565f, -0.009716f, -0.043121f, -0.010785f, -0.016547f, -0.043783f, 0.018183f, 0.000495f, -0.031588f, 0.091061f, 0.031541f, -0.022528f, -0.063931f, -0.006522f, 0.015107f, 0.015891f, 0.018438f, 0.043016f, -0.012811f, -0.022651f, 0.020485f, -0.080643f, -0.053345f, -0.021832f, -0.005795f, 0.007482f, -0.042587f, -0.039968f, 0.040957f, 0.031431f, -0.025045f, -0.049418f, 0.030644f, -0.000347f, 0.054054f, -0.045237f, -0.009994f, -0.016328f, -0.002611f, -0.036128f, -0.051610f, 0.042043f, -0.031925f, -0.021766f, -0.039364f, -0.010389f, 0.026338f, 0.022961f, -0.015726f, 0.001818f, 0.004830f, 0.031124f, 0.050476f, 0.035269f, -0.064158f, -0.032710f, -0.037991f, + -0.011367f, 0.022140f, 0.006205f, -0.043903f, -0.065118f, 0.053671f, 0.001582f, -0.052693f, -0.089017f, 0.043679f, -0.012967f, 0.023013f, 0.020594f, 0.021920f, 0.002497f, 0.014789f, -0.033078f, -0.017667f, 0.009090f, 0.034252f, 0.042273f, -0.051220f, -0.042918f, 0.124006f, -0.009434f, -0.011500f, -0.018010f, -0.038377f, -0.003738f, 0.045141f, 0.072074f, -0.032339f, -0.019404f, -0.006623f, -0.032057f, -0.007448f, -0.017852f, 0.029126f, -0.028916f, 0.033264f, 0.016043f, -0.010453f, -0.040521f, -0.002259f, -0.016375f, 0.062386f, -0.033303f, -0.000020f, 0.000660f, -0.005302f, 0.028446f, -0.016879f, -0.001732f, 0.013721f, -0.007817f, -0.059217f, 0.031338f, -0.026463f, -0.031101f, -0.006288f, -0.033177f, -0.018618f, -0.060823f, 0.060060f, 0.003539f, -0.038087f, -0.071281f, 0.043258f, -0.041601f, -0.040280f, 0.001630f, -0.031022f, 0.015785f, 0.028085f, 0.083403f, -0.021837f, 0.033612f, -0.005325f, -0.038039f, -0.032053f, -0.007957f, 0.125282f, -0.106743f, -0.006096f, 0.116002f, -0.101802f, -0.036287f, 0.060533f, -0.004858f, -0.044727f, 0.114419f, -0.052017f, -0.016390f, 0.060481f, -0.072153f, 0.068926f, + -0.009206f, -0.039269f, 0.038072f, 0.014809f, -0.004468f, 0.009738f, 0.007079f, -0.005793f, 0.015297f, -0.012114f, -0.016375f, -0.006210f, -0.023528f, -0.019193f, -0.046137f, -0.016231f, 0.043904f, 0.041566f, -0.057871f, 0.022472f, 0.034260f, 0.029134f, -0.007996f, -0.057002f, -0.002999f, -0.026966f, -0.067146f, 0.046356f, 0.113856f, -0.061420f, -0.004440f, 0.081743f, -0.019950f, -0.025601f, 0.066879f, 0.050431f, 0.026197f, -0.023180f, -0.049103f, 0.020120f, -0.018333f, -0.029825f, 0.119369f, 0.088757f, -0.067354f, -0.048645f, 0.065969f, -0.111545f, -0.037237f, -0.029141f, -0.016532f, 0.083763f, 0.056773f, 0.038785f, 0.042117f, -0.130960f, -0.043282f, 0.132636f, 0.078454f, 0.019656f, -0.030022f, 0.049044f, -0.040638f, -0.086416f, -0.056037f, 0.050478f, -0.027803f, -0.000627f, 0.058371f, 0.103819f, -0.003666f, -0.044500f, 0.018027f, 0.051667f, -0.113109f, 0.050477f, 0.001637f, -0.010636f, 0.059586f, -0.008889f, -0.043083f, 0.023270f, 0.021338f, 0.058266f, 0.033516f, -0.029882f, 0.002770f, 0.009900f, 0.040311f, 0.010144f, -0.043995f, -0.000684f, -0.001449f, 0.010256f, -0.040826f, -0.044721f, + 0.067484f, -0.022851f, -0.068193f, 0.036731f, 0.062752f, -0.033591f, -0.010587f, 0.005090f, 0.043425f, -0.049318f, -0.064903f, 0.019193f, 0.057116f, -0.011072f, -0.022530f, -0.012777f, -0.012304f, 0.025327f, 0.011701f, 0.015536f, 0.142172f, 0.008785f, -0.016570f, 0.002915f, 0.005893f, 0.077021f, 0.003932f, -0.026068f, 0.018721f, -0.058505f, -0.033249f, 0.016325f, 0.002052f, 0.066226f, 0.053736f, -0.032751f, -0.007855f, -0.030973f, 0.003635f, 0.024132f, 0.008258f, 0.007875f, 0.025986f, -0.016356f, -0.066372f, 0.017925f, 0.049968f, -0.022026f, 0.045036f, -0.064377f, 0.034796f, 0.018507f, -0.050279f, 0.008006f, 0.008500f, -0.022033f, 0.035526f, -0.077503f, -0.246333f, -0.290766f, -0.029615f, -0.202794f, 0.074387f, 0.481573f, 0.257237f, 0.390458f, 0.411570f, -0.048837f, -0.123547f, 0.031848f, -0.306396f, -0.373475f, -0.118104f, -0.410737f, -0.330674f, 0.079319f, -0.238933f, -0.067603f, 0.464840f, 0.166171f, 0.327535f, 0.568958f, 0.336902f, 0.148970f, 0.112212f, 0.037212f, -0.258731f, -0.320758f, -0.108456f, -0.436824f, -0.437544f, 0.054007f, -0.328087f, -0.269392f, 0.156520f, -0.276046f, + -0.284240f, 0.209026f, 0.082707f, -0.041548f, 0.497022f, 0.465836f, 0.295989f, 0.632666f, 0.595563f, 0.202160f, 0.235419f, 0.183577f, -0.303999f, -0.303979f, -0.384388f, -0.758024f, -0.894930f, -0.643369f, -0.640880f, -0.472231f, 0.015292f, 0.043676f, 0.311361f, 0.539493f, 0.664786f, 0.607021f, 0.704483f, 0.605433f, 0.359743f, 0.245404f, 0.088322f, -0.106947f, -0.250885f, -0.358890f, -0.297171f, -0.433306f, -0.462534f, -0.278542f, -0.133698f, -0.066015f} + }, + { + {-0.000387f, 0.003966f, 0.004430f, 0.012898f, -0.001574f, 0.002067f, 0.001524f, -0.000787f, 0.007292f, 0.005492f, -0.010060f, -0.005690f, -0.009159f, -0.005399f, -0.001026f, -0.006505f, 0.000105f, 0.000704f, 0.000466f, -0.000907f, -0.000582f, -0.008937f, -0.001421f, 0.002066f, 0.003452f, -0.004293f, 0.005535f, 0.001699f, -0.004441f, -0.002937f, 0.001016f, 0.005526f, -0.001841f, -0.001914f, -0.002757f, -0.007439f, 0.001494f, -0.009652f, -0.000804f, -0.004791f, -0.004409f, -0.003184f, 0.002028f, -0.003266f, -0.005482f, -0.003852f, -0.000562f, -0.002800f, -0.007660f, -0.003264f, -0.002159f, -0.001943f, -0.005691f, 0.000797f, -0.002763f, 0.006634f, 0.001325f, -0.007673f, -0.004419f, 0.009380f, -0.002790f, 0.002623f, -0.005097f, 0.002508f, 0.004292f, 0.003953f, -0.006923f, 0.003582f, 0.004978f, 0.003624f, -0.000348f, -0.004138f, -0.002657f, -0.003767f, 0.002586f, -0.001166f, 0.001968f, -0.017090f, -0.020271f, 0.009721f, 0.000125f, 0.014906f, 0.005068f, 0.006342f, 0.003847f, 0.005807f, -0.000696f, -0.000622f, -0.003988f, -0.010478f, -0.006351f, 0.002273f, -0.001054f, -0.002253f, -0.001759f, 0.004966f, + 0.003592f, -0.000320f, 0.004243f, -0.004886f, -0.012046f, 0.003284f, -0.003275f, 0.000928f, -0.006462f, 0.004235f, -0.005417f, -0.002731f, -0.002541f, 0.007877f, -0.002602f, -0.000415f, -0.004107f, -0.001258f, -0.009965f, 0.002817f, -0.002282f, 0.004708f, -0.005137f, 0.000302f, -0.002831f, -0.007722f, 0.001593f, -0.001013f, -0.002800f, 0.003049f, 0.005308f, -0.001521f, -0.004584f, -0.011125f, 0.000133f, -0.006702f, 0.002117f, -0.000115f, -0.005108f, -0.000382f, -0.002749f, -0.001723f, -0.008837f, 0.004885f, -0.007990f, 0.003661f, -0.003818f, -0.004827f, -0.005093f, -0.008540f, 0.003403f, 0.000239f, 0.001005f, 0.004808f, -0.006757f, -0.008895f, 0.003983f, -0.028955f, 0.000000f, -0.003549f, 0.008010f, 0.000496f, 0.003262f, -0.002059f, 0.004120f, 0.001121f, 0.003632f, -0.003000f, 0.019176f, -0.003710f, -0.002397f, -0.007701f, 0.002975f, -0.009371f, -0.002898f, 0.001178f, -0.004524f, 0.000394f, 0.007168f, 0.004449f, 0.002860f, 0.005166f, 0.006954f, -0.007691f, -0.002922f, 0.000369f, 0.004484f, -0.007191f, 0.007741f, -0.005908f, -0.003079f, 0.006634f, -0.000965f, 0.002009f, -0.004633f, 0.006220f, + 0.006012f, 0.006932f, -0.009467f, -0.002249f, 0.010562f, 0.000582f, -0.001418f, -0.001581f, 0.011488f, 0.008183f, 0.008915f, 0.000981f, -0.001920f, -0.001760f, -0.000496f, 0.000672f, 0.001412f, 0.004353f, -0.010847f, 0.000023f, -0.004992f, -0.005406f, -0.000734f, 0.003015f, -0.005575f, 0.002749f, -0.004231f, -0.000268f, -0.001632f, 0.001308f, 0.003941f, 0.005101f, -0.001805f, 0.000472f, -0.002218f, -0.006869f, -0.001573f, 0.010296f, 0.012132f, -0.007861f, 0.001402f, -0.006657f, 0.011150f, 0.002319f, -0.004113f, -0.005996f, -0.005244f, -0.000839f, 0.001730f, 0.003197f, 0.014736f, -0.008215f, -0.000990f, -0.003062f, 0.006007f, -0.015716f, -0.001498f, 0.010571f, 0.000104f, 0.008939f, 0.004198f, 0.007240f, 0.007582f, 0.003468f, -0.000992f, -0.007186f, 0.002909f, -0.001753f, 0.001389f, 0.012332f, 0.003462f, 0.010641f, -0.004939f, -0.002429f, 0.001255f, -0.013428f, 0.002105f, 0.010725f, -0.002530f, 0.001377f, -0.008113f, 0.006952f, 0.000400f, 0.003343f, -0.009654f, 0.006482f, -0.006271f, -0.003340f, -0.006547f, -0.007910f, 0.005516f, 0.002196f, -0.002032f, -0.003731f, -0.003336f, -0.002375f, + -0.001241f, 0.005447f, -0.003863f, -0.007821f, -0.012244f, 0.013017f, 0.010408f, 0.001418f, -0.012018f, 0.005043f, -0.004972f, 0.006393f, -0.002655f, 0.002367f, -0.006023f, -0.003335f, -0.007541f, -0.002354f, 0.005155f, 0.049793f, -0.018495f, 0.022308f, -0.017729f, 0.001521f, 0.005287f, 0.005236f, -0.014642f, -0.004968f, -0.004928f, -0.024499f, -0.000150f, 0.001296f, -0.008850f, -0.001429f, -0.000131f, 0.017516f, 0.003209f, -0.012220f, 0.008887f, 0.009738f, 0.002134f, 0.017755f, -0.013251f, -0.004837f, -0.007110f, 0.003744f, 0.014164f, -0.001040f, 0.000828f, 0.005283f, -0.002622f, 0.006345f, 0.002784f, 0.016239f, -0.002551f, 0.006354f, -0.010756f, 0.009696f, -0.007577f, 0.010824f, -0.000331f, -0.011368f, -0.001856f, 0.016355f, -0.000895f, 0.011052f, 0.006465f, 0.010623f, 0.000737f, -0.008482f, -0.007102f, 0.000127f, -0.005368f, 0.008697f, 0.005506f, -0.008726f, 0.000859f, -0.006840f, 0.011175f, -0.003223f, 0.008839f, 0.010977f, 0.001445f, 0.011306f, -0.001096f, -0.005651f, -0.002547f, -0.007188f, -0.000471f, 0.014831f, -0.010377f, -0.009823f, -0.004907f, 0.004009f, -0.005073f, -0.041562f, + 0.004447f, -0.012300f, -0.008829f, -0.013479f, -0.016333f, 0.006320f, 0.014419f, -0.002270f, 0.005545f, 0.002220f, 0.007353f, 0.001614f, 0.000443f, 0.004426f, -0.008993f, 0.020533f, -0.001178f, -0.012065f, 0.013416f, -0.004201f, 0.005632f, -0.013586f, -0.008523f, -0.009643f, 0.004039f, 0.002459f, 0.010472f, 0.000265f, -0.006685f, 0.001053f, -0.005981f, -0.006504f, -0.007270f, -0.002536f, -0.010078f, -0.005097f, 0.009181f, -0.008689f, -0.000720f, -0.006804f, -0.010684f, -0.004749f, 0.001221f, 0.003357f, 0.006614f, -0.005358f, -0.004983f, 0.006609f, 0.001064f, 0.002472f, 0.001672f, 0.004084f, 0.006142f, -0.010151f, -0.003470f, -0.001055f, -0.014264f, 0.003732f, -0.001062f, 0.008276f, -0.008372f, -0.006401f, -0.007814f, 0.001281f, 0.008785f, 0.006731f, 0.015535f, 0.010304f, -0.009562f, 0.003724f, -0.004270f, 0.007079f, 0.004745f, -0.010824f, -0.053484f, 0.013818f, -0.016426f, -0.013804f, -0.010114f, 0.001095f, -0.003422f, 0.030418f, 0.002390f, 0.006752f, -0.004141f, -0.000575f, -0.013452f, 0.011991f, 0.003031f, -0.002553f, 0.001873f, 0.015858f, -0.008978f, -0.003583f, 0.003144f, 0.000425f, + 0.007633f, -0.007970f, -0.003945f, 0.008403f, 0.002663f, 0.007675f, 0.000308f, -0.009692f, -0.006559f, 0.004276f, -0.001585f, -0.003809f, -0.006304f, -0.004007f, -0.001101f, 0.014908f, 0.003221f, -0.003647f, -0.000428f, 0.000343f, -0.005537f, 0.010484f, 0.007871f, -0.003540f, -0.012694f, 0.002118f, -0.007123f, 0.009893f, 0.007506f, -0.009277f, 0.002390f, -0.011767f, -0.010600f, -0.009436f, -0.011641f, -0.004635f, 0.001354f, -0.007389f, -0.000528f, -0.008080f, -0.007139f, 0.011392f, 0.006678f, -0.011536f, -0.015497f, 0.000537f, 0.010637f, -0.010414f, -0.008550f, 0.009088f, 0.006136f, 0.010479f, -0.027969f, -0.002922f, 0.004529f, 0.013352f, -0.002780f, -0.007265f, 0.003032f, 0.019689f, -0.025160f, 0.005612f, -0.005202f, -0.004843f, -0.011382f, 0.006570f, -0.020164f, -0.013264f, 0.006799f, -0.010699f, 0.006256f, 0.028361f, -0.005135f, 0.011331f, -0.013508f, 0.013576f, -0.003645f, 0.003889f, -0.012102f, 0.005398f, 0.003386f, -0.006693f, 0.002815f, -0.001538f, -0.006214f, -0.000650f, 0.007847f, 0.012065f, -0.009623f, -0.015603f, -0.012152f, -0.011517f, 0.001498f, 0.008784f, 0.023949f, -0.000509f, + 0.016159f, 0.016576f, -0.015558f, 0.011795f, -0.022904f, -0.008634f, 0.001570f, -0.010449f, -0.009405f, 0.006169f, -0.022126f, -0.004603f, 0.015664f, -0.006876f, -0.005643f, 0.001870f, -0.006600f, 0.006175f, -0.006526f, 0.010727f, 0.014288f, -0.004011f, 0.004633f, 0.000487f, -0.013924f, 0.001152f, -0.008880f, -0.006395f, -0.010869f, 0.006333f, 0.005352f, -0.010969f, 0.001865f, 0.005787f, 0.066203f, -0.002903f, -0.025752f, -0.002997f, -0.000816f, 0.002750f, 0.008644f, 0.003623f, -0.002665f, -0.002487f, -0.012758f, -0.006015f, 0.007739f, 0.016287f, -0.012803f, -0.008137f, 0.011157f, 0.001019f, -0.003452f, 0.004432f, -0.000621f, -0.015174f, -0.015115f, 0.021250f, -0.001520f, -0.001294f, -0.003074f, 0.010902f, -0.000369f, 0.001146f, 0.007408f, -0.011630f, 0.012799f, 0.005053f, 0.002510f, 0.004598f, 0.012812f, -0.029719f, -0.012719f, -0.007378f, 0.027788f, 0.003290f, 0.002578f, -0.008674f, -0.008705f, 0.007823f, -0.000678f, 0.009060f, -0.002812f, -0.019374f, 0.002587f, 0.001761f, -0.002301f, 0.008548f, 0.004688f, 0.001726f, 0.015672f, 0.035975f, -0.002359f, -0.004113f, 0.014576f, 0.003098f, + -0.003817f, 0.008273f, 0.029176f, -0.004831f, 0.005966f, 0.008451f, 0.008773f, 0.005112f, 0.007970f, 0.005587f, 0.006788f, -0.011410f, 0.011420f, 0.014922f, -0.005431f, 0.013037f, 0.014563f, -0.019149f, -0.005711f, -0.016314f, 0.015642f, 0.029406f, -0.014437f, -0.003666f, -0.016518f, -0.007439f, -0.019932f, 0.013728f, -0.012222f, -0.005277f, -0.001423f, -0.000247f, -0.007993f, -0.010082f, 0.017626f, -0.016519f, -0.006046f, 0.001407f, 0.012025f, 0.012475f, -0.018621f, -0.005922f, 0.007092f, -0.016446f, 0.009042f, -0.013163f, -0.005167f, 0.004149f, 0.000386f, -0.007464f, -0.001895f, 0.003261f, 0.020790f, 0.001991f, 0.004758f, -0.000588f, -0.017633f, 0.018758f, -0.009383f, -0.015161f, 0.011769f, -0.011012f, -0.011548f, 0.014589f, -0.006713f, 0.001250f, -0.003156f, 0.001322f, 0.020319f, -0.004191f, 0.004778f, -0.018334f, -0.001068f, 0.019614f, 0.004913f, 0.019394f, 0.017709f, -0.006585f, -0.004019f, -0.024460f, 0.004074f, -0.004909f, 0.016111f, 0.018141f, -0.010450f, 0.003746f, -0.033995f, -0.010498f, 0.012088f, -0.012984f, 0.018508f, 0.012209f, -0.014886f, 0.005490f, -0.013912f, -0.001236f, + -0.018896f, 0.031783f, -0.009016f, 0.002474f, -0.009698f, -0.028351f, 0.016769f, 0.006153f, -0.021202f, 0.013632f, -0.009444f, -0.006719f, 0.007686f, 0.030177f, -0.014679f, 0.029179f, -0.000392f, -0.019794f, 0.001014f, 0.007162f, -0.017638f, 0.020095f, -0.010160f, 0.015014f, 0.031743f, 0.003581f, -0.014644f, -0.003625f, -0.001574f, 0.007773f, -0.012459f, -0.006313f, -0.001607f, 0.016149f, -0.005486f, -0.005668f, -0.020628f, -0.000088f, -0.024413f, -0.003869f, 0.027763f, -0.005550f, 0.015814f, 0.002201f, 0.004226f, -0.035596f, 0.000501f, -0.022472f, 0.018717f, 0.033380f, 0.010021f, 0.009054f, 0.001984f, 0.005810f, -0.019040f, 0.007692f, 0.010082f, -0.007380f, -0.002442f, -0.006321f, -0.004857f, 0.015976f, 0.000255f, 0.019262f, 0.054483f, 0.021610f, 0.005428f, -0.016705f, -0.017314f, -0.008627f, 0.011131f, -0.013955f, -0.008288f, 0.055545f, -0.032323f, -0.002282f, -0.016802f, -0.030354f, -0.040077f, 0.009269f, -0.013862f, 0.009909f, -0.038024f, 0.005760f, 0.011521f, 0.010318f, -0.016854f, -0.034922f, -0.027924f, -0.023554f, -0.001248f, -0.014270f, -0.026007f, -0.018205f, -0.010106f, -0.021334f, + -0.015490f, 0.001977f, 0.023683f, -0.002020f, 0.002035f, -0.002252f, -0.023778f, 0.012338f, -0.003590f, 0.002690f, -0.006525f, -0.015995f, 0.010939f, -0.019600f, -0.027178f, 0.021688f, -0.026544f, 0.003705f, -0.001775f, -0.036228f, -0.022458f, 0.012518f, -0.002149f, 0.015705f, -0.012694f, -0.038280f, -0.001633f, 0.000248f, 0.012423f, 0.013836f, 0.033332f, -0.021065f, -0.072984f, -0.025896f, -0.025755f, 0.015258f, -0.047923f, -0.016453f, -0.008977f, -0.043314f, -0.015351f, -0.001150f, -0.009114f, -0.008275f, 0.008534f, -0.011573f, -0.001575f, -0.010582f, 0.009866f, -0.024513f, 0.009559f, 0.021524f, -0.022912f, -0.032214f, 0.013819f, 0.017191f, -0.004745f, -0.005438f, -0.015812f, -0.017184f, 0.042570f, 0.016334f, -0.038622f, 0.014667f, -0.020841f, -0.000863f, -0.018940f, -0.039007f, 0.012224f, -0.019670f, -0.008423f, 0.003036f, 0.001486f, -0.008805f, -0.033782f, -0.019594f, 0.016913f, -0.019283f, -0.000412f, -0.016798f, -0.028214f, -0.009286f, 0.031526f, 0.006872f, 0.005621f, -0.025514f, -0.009228f, -0.003611f, -0.003656f, 0.013251f, 0.013658f, 0.019978f, 0.021819f, -0.008432f, 0.012164f, 0.006757f, + -0.013000f, 0.010343f, -0.021705f, -0.015942f, -0.016491f, 0.009739f, -0.019049f, 0.003844f, -0.028472f, -0.021402f, -0.013224f, 0.032246f, 0.021959f, 0.025476f, 0.023542f, -0.018687f, 0.029603f, 0.004915f, 0.013099f, 0.046001f, -0.009625f, -0.003243f, 0.005669f, -0.015342f, 0.007021f, -0.004250f, -0.027476f, 0.009115f, 0.019573f, -0.018752f, -0.019914f, 0.004296f, 0.020398f, -0.009390f, -0.016504f, -0.037560f, 0.041475f, -0.033639f, 0.042970f, 0.023751f, 0.015928f, 0.008656f, 0.016449f, 0.017943f, 0.016515f, 0.046238f, -0.017156f, 0.002608f, -0.003871f, -0.008806f, -0.002168f, 0.005107f, -0.005114f, 0.008311f, -0.003810f, 0.013954f, 0.011538f, -0.003380f, -0.008922f, -0.047528f, -0.017474f, -0.034691f, -0.002391f, 0.017122f, 0.017207f, 0.004959f, 0.008333f, 0.012690f, 0.010260f, 0.012259f, 0.032598f, 0.049141f, 0.032593f, 0.005907f, -0.007321f, -0.010533f, -0.015346f, 0.016582f, 0.016776f, 0.019036f, -0.015923f, -0.012668f, -0.019536f, -0.004044f, 0.023190f, -0.000804f, 0.027967f, -0.018782f, 0.014356f, 0.008280f, 0.024846f, -0.055943f, -0.040630f, -0.017322f, -0.023517f, -0.023854f, + 0.005140f, -0.010629f, 0.032720f, 0.008675f, -0.040308f, -0.004860f, 0.060095f, -0.022822f, 0.017076f, -0.011469f, 0.022915f, -0.014229f, -0.010875f, -0.001607f, -0.027801f, -0.014333f, 0.021563f, 0.008940f, 0.015702f, 0.042202f, 0.002888f, 0.027912f, 0.041261f, 0.028341f, -0.019808f, -0.043635f, -0.002211f, -0.020514f, 0.045355f, 0.012385f, 0.035278f, -0.006051f, -0.020055f, -0.008033f, -0.021805f, 0.007391f, -0.016936f, 0.001017f, -0.018770f, 0.008449f, -0.013892f, -0.006519f, -0.029687f, -0.029723f, -0.003518f, -0.042171f, 0.021900f, 0.014529f, -0.012955f, 0.020062f, -0.010651f, 0.007159f, 0.022880f, -0.027094f, -0.034694f, 0.004989f, -0.007999f, 0.056189f, 0.023825f, -0.063996f, -0.017458f, -0.018997f, -0.032883f, -0.035513f, -0.070634f, 0.011174f, -0.025523f, -0.007830f, 0.009765f, 0.001278f, 0.014220f, -0.004105f, -0.008476f, -0.054595f, 0.006254f, -0.025619f, 0.006572f, 0.029728f, 0.006735f, 0.019371f, -0.031384f, -0.043750f, 0.009053f, 0.024337f, 0.018403f, 0.007896f, 0.017927f, 0.025039f, 0.035755f, 0.032536f, 0.075273f, 0.049443f, 0.069023f, 0.003735f, -0.014530f, -0.048199f, + -0.014663f, 0.007088f, 0.010330f, -0.012163f, -0.037270f, -0.014130f, 0.059626f, 0.023994f, -0.008955f, 0.017502f, -0.001966f, -0.023127f, -0.007060f, -0.015467f, 0.040507f, -0.004212f, 0.001842f, 0.016643f, 0.000607f, 0.018995f, -0.000759f, 0.027317f, -0.026755f, 0.031611f, 0.006113f, -0.016545f, -0.009776f, -0.018239f, 0.029112f, -0.042416f, -0.044857f, 0.026630f, 0.045856f, 0.000708f, 0.031497f, 0.042493f, -0.050086f, 0.014902f, 0.009612f, -0.004390f, -0.000973f, 0.005616f, -0.019134f, 0.032737f, -0.021514f, -0.018593f, 0.013415f, -0.000259f, -0.004313f, -0.010170f, -0.010918f, 0.002733f, -0.033350f, -0.012198f, 0.025732f, -0.034851f, -0.008117f, -0.024552f, 0.000096f, 0.062414f, -0.021320f, 0.000987f, 0.016622f, -0.003226f, -0.016039f, -0.044829f, 0.038707f, 0.013941f, -0.083862f, 0.014449f, 0.016795f, -0.034227f, -0.081667f, 0.072156f, 0.042890f, 0.022699f, 0.015858f, 0.035512f, -0.082444f, 0.033460f, 0.037613f, 0.015971f, -0.052925f, 0.028976f, 0.052800f, 0.024342f, 0.058231f, 0.021069f, 0.000583f, -0.002659f, -0.002292f, -0.010339f, 0.024346f, 0.041268f, 0.039131f, 0.013457f, + -0.012774f, -0.021132f, 0.004307f, -0.019316f, -0.022754f, 0.022680f, 0.015186f, 0.003851f, -0.022945f, -0.022124f, -0.005652f, -0.019372f, 0.008516f, 0.047128f, -0.009636f, -0.016288f, 0.014914f, 0.007784f, 0.012808f, 0.015737f, -0.005186f, -0.010741f, 0.036768f, 0.024253f, 0.010690f, 0.015651f, -0.005205f, -0.039687f, 0.006505f, 0.023812f, 0.000639f, -0.030275f, 0.035055f, 0.007872f, 0.049520f, -0.000356f, 0.043660f, 0.002445f, -0.020172f, -0.008109f, 0.006053f, 0.064223f, -0.014963f, 0.020171f, 0.008885f, 0.026949f, 0.006915f, -0.006225f, -0.015197f, 0.012264f, 0.076650f, -0.010651f, -0.010323f, -0.051870f, 0.059364f, 0.000268f, 0.052713f, 0.002393f, 0.004770f, -0.045638f, -0.013057f, -0.019964f, 0.037049f, 0.010118f, 0.017202f, 0.010441f, -0.034476f, 0.004527f, 0.004321f, -0.030569f, -0.043635f, -0.045182f, 0.017125f, -0.016255f, 0.043538f, 0.003267f, -0.011739f, -0.010081f, 0.010673f, -0.015472f, 0.004362f, 0.013065f, -0.015981f, 0.010645f, 0.015876f, 0.005513f, 0.005802f, 0.032416f, 0.055194f, -0.009844f, 0.001399f, 0.027414f, 0.023829f, 0.032683f, -0.021951f, -0.008841f, + 0.011609f, -0.031490f, 0.005078f, 0.003204f, -0.040448f, 0.055089f, -0.000662f, 0.027951f, 0.025884f, 0.017012f, -0.030209f, 0.003306f, 0.029689f, -0.022253f, 0.051220f, 0.013627f, -0.015830f, 0.040683f, 0.032731f, 0.021368f, -0.066278f, -0.013998f, 0.015632f, -0.023504f, 0.005577f, -0.038396f, -0.007878f, -0.058186f, -0.015298f, -0.009416f, -0.015613f, -0.064867f, -0.008223f, -0.017476f, 0.070446f, 0.033735f, 0.030111f, 0.023363f, -0.010412f, 0.015999f, 0.036687f, 0.035435f, 0.017823f, -0.034564f, -0.040524f, 0.023445f, -0.002187f, 0.017966f, -0.004227f, 0.041381f, -0.024159f, -0.002152f, -0.005711f, 0.036526f, -0.020697f, 0.061271f, 0.074901f, 0.075887f, 0.008507f, -0.009818f, 0.015810f, -0.005824f, 0.021778f, 0.000464f, 0.003708f, -0.017656f, -0.053891f, -0.015826f, -0.051424f, 0.035327f, 0.034131f, -0.030793f, -0.021469f, -0.030907f, -0.011877f, -0.001571f, 0.079924f, 0.004243f, -0.034477f, -0.038208f, 0.001659f, 0.056244f, 0.029463f, -0.102946f, -0.017534f, -0.015594f, 0.018063f, 0.043027f, -0.042064f, -0.011557f, -0.023479f, 0.015028f, -0.059035f, 0.034160f, -0.006731f, 0.001313f, + 0.021057f, 0.005165f, -0.027460f, 0.064465f, -0.003195f, 0.031603f, 0.069065f, 0.137926f, 0.083637f, -0.001039f, 0.046781f, 0.069385f, 0.088572f, 0.094742f, 0.023602f, 0.051044f, 0.020299f, -0.009680f, -0.026819f, 0.039066f, -0.040685f, 0.078089f, -0.005339f, -0.009376f, 0.004652f, 0.063257f, -0.036193f, -0.002509f, 0.001338f, 0.005365f, 0.024328f, -0.010561f, 0.033667f, 0.015532f, -0.003096f, 0.012120f, 0.006127f, 0.029326f, -0.071696f, -0.018148f, 0.000069f, 0.013234f, -0.005126f, -0.048505f, 0.046428f, 0.003238f, 0.008005f, 0.021925f, -0.033464f, -0.010035f, -0.080167f, 0.027897f, -0.017676f, 0.022095f, 0.061076f, -0.009770f, 0.013692f, -0.000860f, 0.029473f, -0.041778f, -0.064563f, 0.064593f, -0.004780f, 0.012535f, 0.010084f, 0.065512f, 0.042129f, 0.058239f, -0.000952f, -0.058292f, 0.039346f, 0.027675f, -0.016458f, -0.014179f, 0.036988f, 0.003071f, 0.046670f, 0.090007f, 0.060001f, 0.021835f, 0.003225f, 0.070722f, -0.014215f, 0.031153f, 0.044957f, -0.018389f, 0.051833f, 0.050168f, 0.015254f, -0.021069f, -0.024737f, -0.030662f, -0.005348f, -0.003460f, -0.103189f, 0.022922f, + -0.017364f, -0.004733f, 0.079961f, 0.033705f, -0.025337f, -0.020348f, -0.000394f, -0.052848f, -0.063577f, 0.004344f, 0.000650f, -0.036890f, 0.038156f, 0.003404f, -0.036407f, 0.021914f, 0.069403f, -0.010610f, -0.039271f, 0.023524f, -0.022819f, -0.027051f, 0.013585f, 0.054436f, -0.017434f, 0.006507f, 0.016302f, -0.019076f, -0.040680f, -0.029257f, 0.056525f, 0.017509f, -0.053271f, 0.044625f, 0.019745f, -0.039551f, -0.017974f, 0.074630f, -0.023287f, -0.061345f, -0.028445f, 0.099735f, -0.098844f, -0.049305f, 0.062058f, -0.029748f, -0.030062f, -0.098892f, 0.077554f, -0.064431f, 0.024802f, 0.000194f, -0.008569f, -0.111675f, -0.028888f, 0.089653f, 0.062018f, -0.076831f, -0.016435f, -0.035338f, -0.011122f, 0.011372f, 0.024353f, 0.020345f, -0.123840f, 0.066139f, 0.058334f, 0.052275f, 0.005381f, 0.025235f, -0.058867f, -0.060126f, 0.110727f, 0.041244f, -0.084115f, 0.015296f, 0.106476f, 0.033657f, 0.012036f, 0.003449f, 0.008650f, 0.045909f, 0.062852f, -0.013710f, 0.012351f, 0.016544f, -0.009931f, 0.037925f, -0.018970f, -0.004884f, -0.014141f, 0.029189f, 0.022215f, -0.011393f, 0.020515f, -0.027887f, + -0.022125f, 0.029069f, -0.017583f, 0.031885f, -0.020138f, -0.009094f, 0.000334f, 0.017506f, -0.000104f, 0.013058f, 0.006206f, 0.032359f, -0.021999f, -0.004456f, 0.001619f, -0.012683f, 0.032154f, 0.027049f, -0.021162f, -0.007839f, -0.012549f, 0.007180f, -0.027563f, 0.015509f, 0.010063f, 0.014209f, -0.010250f, -0.008761f, 0.036639f, -0.042582f, -0.006053f, 0.017837f, -0.010196f, -0.007853f, 0.019883f, -0.052385f, 0.014036f, -0.019068f, 0.004599f, -0.018684f, 0.046710f, -0.014872f, -0.017909f, 0.018405f, -0.008562f, -0.029708f, 0.059289f, -0.001581f, 0.007928f, -0.012631f, -0.019701f, -0.025441f, 0.032278f, -0.030915f, -0.009979f, 0.026240f, -0.080321f, -0.224455f, -0.184641f, 0.095419f, 0.026374f, 0.220224f, 0.394662f, 0.057369f, 0.123475f, 0.043965f, -0.317289f, -0.101364f, -0.215684f, -0.260450f, 0.005906f, 0.039882f, -0.109394f, 0.155065f, 0.203534f, 0.113520f, 0.325427f, 0.186971f, -0.043382f, -0.079049f, -0.152966f, -0.296623f, -0.234394f, -0.070184f, -0.209147f, -0.030446f, 0.178033f, 0.028468f, 0.040461f, 0.269634f, 0.137036f, 0.084088f, 0.281409f, 0.042095f, -0.079266f, 0.109062f, + -0.149251f, -0.294650f, -0.123898f, -0.248799f, -0.310780f, -0.005912f, -0.065792f, -0.082854f, 0.205106f, 0.225923f, 0.143556f, 0.341585f, 0.275648f, 0.129280f, 0.117099f, 0.067179f, -0.229950f, -0.211832f, -0.267625f, -0.353361f, -0.283130f, -0.120038f, -0.082267f, 0.006631f, 0.202540f, 0.246053f, 0.258287f, 0.247356f, 0.230211f, 0.049736f, 0.006617f, -0.036712f, -0.169894f, -0.186156f, -0.100231f, -0.181902f, -0.041978f, 0.022171f, 0.002014f}, + {-0.001329f, 0.002296f, 0.006628f, 0.008642f, 0.000113f, -0.004743f, 0.006038f, 0.003391f, 0.007143f, 0.008806f, -0.003533f, -0.001013f, -0.007112f, 0.003974f, 0.001243f, -0.002997f, -0.008503f, 0.002850f, 0.004328f, 0.005820f, 0.000336f, -0.008059f, -0.004587f, 0.004665f, -0.005540f, 0.004872f, -0.001200f, 0.001632f, 0.001913f, 0.001833f, -0.008173f, 0.002557f, 0.002996f, -0.005618f, -0.009468f, -0.009054f, 0.000491f, 0.000723f, 0.001863f, -0.000543f, 0.000070f, -0.002627f, 0.004379f, -0.000777f, 0.003823f, -0.005796f, -0.000726f, 0.006083f, 0.011223f, 0.000880f, -0.000236f, 0.001456f, 0.006569f, 0.004245f, -0.008038f, 0.002104f, 0.003937f, 0.002497f, 0.000020f, 0.004284f, 0.003871f, 0.002459f, 0.002503f, 0.001537f, -0.002070f, -0.004696f, 0.006075f, 0.002632f, -0.003753f, -0.000720f, -0.003076f, 0.004070f, -0.000081f, -0.002792f, 0.003409f, 0.002277f, 0.001675f, -0.019901f, -0.024173f, 0.011876f, -0.004587f, 0.010354f, -0.005445f, -0.005593f, -0.010912f, 0.002301f, 0.002089f, -0.000711f, -0.000006f, -0.001438f, -0.008377f, -0.001194f, -0.004861f, -0.005640f, -0.005278f, -0.000448f, + 0.000456f, -0.000665f, -0.001079f, 0.003807f, -0.001280f, -0.012676f, 0.007575f, 0.003566f, -0.004367f, 0.000962f, -0.000255f, -0.000151f, 0.001614f, 0.007688f, -0.004569f, 0.000176f, -0.014180f, 0.006707f, 0.001273f, 0.002857f, 0.004757f, 0.007583f, -0.004513f, -0.003680f, -0.001688f, -0.007401f, 0.000484f, -0.001401f, 0.006037f, -0.003632f, -0.000486f, -0.003776f, -0.003980f, 0.007082f, -0.005660f, -0.003085f, 0.000659f, -0.005475f, 0.004222f, -0.000583f, -0.002411f, 0.004198f, 0.008439f, 0.000110f, -0.000323f, -0.001621f, 0.007239f, -0.007629f, 0.000095f, -0.001597f, 0.003823f, -0.002270f, -0.003235f, 0.007312f, -0.000092f, 0.001044f, -0.002202f, -0.028829f, 0.004607f, 0.003132f, 0.009762f, -0.004169f, 0.002776f, 0.011408f, -0.004775f, 0.002947f, -0.007334f, -0.010604f, 0.003522f, -0.007292f, -0.008334f, -0.008315f, 0.002151f, 0.002854f, -0.014079f, 0.007880f, 0.005082f, -0.002573f, -0.005349f, 0.003001f, -0.001560f, -0.003366f, 0.000688f, 0.004347f, 0.003064f, 0.007078f, 0.001085f, -0.002449f, 0.007186f, -0.004007f, 0.016058f, 0.003465f, 0.009756f, 0.003665f, 0.008509f, 0.003716f, + 0.005747f, 0.003074f, 0.000360f, 0.000104f, 0.012028f, 0.001864f, -0.002380f, 0.000576f, 0.006154f, 0.004602f, 0.000305f, -0.000813f, -0.002970f, 0.001118f, 0.014705f, 0.004067f, 0.006551f, -0.007599f, -0.004222f, -0.008011f, -0.005351f, -0.007800f, 0.005134f, 0.003221f, -0.005294f, -0.003761f, 0.002841f, -0.003945f, 0.003209f, -0.002088f, -0.001718f, -0.005628f, -0.009351f, 0.003258f, -0.014851f, -0.002581f, -0.003766f, 0.016415f, 0.022490f, -0.006460f, 0.006283f, -0.010677f, -0.000262f, 0.000996f, 0.028640f, -0.002554f, -0.007163f, -0.011859f, 0.000605f, 0.008478f, 0.013346f, -0.002580f, -0.016775f, -0.004555f, -0.006198f, -0.004300f, 0.006130f, -0.000879f, 0.011197f, 0.001596f, -0.005832f, -0.013436f, 0.004470f, -0.000897f, 0.003536f, -0.001260f, 0.001886f, 0.007194f, 0.002812f, -0.016969f, 0.002423f, 0.011632f, 0.005835f, 0.001829f, 0.003012f, -0.002329f, 0.008090f, -0.009805f, -0.000666f, 0.008983f, -0.005512f, 0.000517f, 0.014130f, -0.005833f, -0.000304f, -0.004115f, 0.008833f, -0.008339f, -0.006265f, 0.004737f, -0.008892f, -0.003921f, 0.012399f, 0.007751f, -0.010392f, -0.003254f, + -0.001249f, -0.001912f, -0.004537f, 0.004674f, -0.003844f, 0.005301f, 0.000226f, 0.001598f, 0.002286f, 0.010105f, -0.000715f, 0.013640f, 0.006745f, -0.008397f, -0.004254f, -0.003376f, 0.007502f, 0.003398f, -0.000093f, 0.052424f, -0.019996f, 0.010276f, -0.015381f, -0.002002f, 0.000065f, -0.001537f, -0.008373f, 0.003884f, 0.005621f, 0.001033f, -0.006220f, -0.012696f, -0.000928f, 0.007042f, 0.004847f, -0.005829f, -0.009698f, -0.001184f, 0.007782f, 0.014646f, -0.008619f, -0.001532f, -0.006629f, -0.013640f, 0.000989f, -0.007077f, 0.003514f, -0.005351f, 0.009773f, -0.018460f, 0.011670f, -0.001228f, -0.011244f, 0.002188f, 0.004003f, -0.001696f, -0.006209f, -0.000069f, 0.013570f, -0.000950f, 0.001780f, -0.002407f, 0.004845f, 0.002079f, -0.003896f, -0.005700f, -0.012176f, 0.007120f, -0.003025f, -0.003803f, 0.003842f, -0.000304f, -0.020131f, 0.014605f, -0.021645f, -0.012467f, -0.015557f, 0.002857f, -0.002482f, 0.008576f, -0.005653f, 0.004428f, -0.009792f, 0.004018f, -0.003263f, -0.003911f, -0.010889f, 0.005830f, 0.005793f, 0.011713f, -0.004230f, -0.001240f, 0.001595f, -0.003650f, -0.000692f, -0.041691f, + 0.004303f, 0.000454f, -0.003481f, -0.006434f, 0.007373f, -0.005672f, 0.004942f, -0.001525f, 0.000023f, 0.006704f, 0.008888f, -0.005455f, 0.006585f, -0.001955f, -0.003438f, -0.011787f, -0.000435f, -0.015912f, -0.011460f, 0.013801f, 0.005127f, -0.005523f, -0.001801f, -0.001784f, 0.009839f, 0.004927f, -0.004778f, 0.008618f, 0.006058f, 0.003244f, 0.003255f, 0.003518f, 0.006926f, 0.005520f, 0.005925f, 0.015284f, 0.014241f, 0.005747f, 0.001797f, -0.010000f, 0.011022f, -0.014727f, 0.003104f, -0.004391f, 0.011935f, -0.009213f, -0.011157f, 0.019203f, -0.004291f, -0.011027f, -0.009096f, 0.014094f, 0.009288f, -0.000046f, 0.007835f, 0.009986f, 0.005192f, 0.016486f, -0.000698f, -0.003464f, 0.010079f, 0.005136f, 0.000913f, -0.000517f, -0.008586f, 0.004367f, 0.005936f, 0.012772f, 0.006029f, 0.007429f, -0.004893f, -0.008434f, -0.014563f, -0.004775f, -0.056389f, 0.014141f, -0.012672f, -0.018317f, -0.018169f, 0.010014f, -0.013709f, 0.008770f, -0.017022f, 0.008179f, 0.006754f, 0.003960f, -0.017902f, 0.010962f, -0.001091f, 0.006369f, -0.015011f, 0.007176f, 0.015781f, 0.012090f, -0.000468f, -0.006640f, + 0.001402f, -0.004254f, -0.018962f, -0.004281f, -0.009631f, 0.003497f, -0.012321f, 0.009113f, 0.008517f, -0.004363f, -0.001458f, 0.012797f, -0.003994f, 0.008510f, -0.008387f, -0.012214f, 0.004970f, -0.000739f, 0.005155f, 0.015937f, 0.008856f, -0.001117f, -0.029883f, -0.014242f, -0.005206f, 0.003518f, -0.005671f, 0.015360f, -0.026222f, 0.007471f, 0.002050f, -0.000646f, 0.006436f, -0.003596f, 0.010680f, -0.026467f, -0.013682f, 0.009828f, -0.027811f, -0.005124f, 0.010641f, 0.004187f, -0.007500f, -0.017659f, 0.004712f, 0.011247f, 0.006389f, -0.003074f, -0.020429f, -0.001360f, -0.002094f, -0.001565f, -0.025480f, 0.003471f, 0.005038f, 0.021117f, -0.018648f, 0.022987f, 0.007052f, -0.001195f, -0.004524f, -0.001816f, 0.002823f, -0.015769f, -0.002363f, 0.005814f, -0.004584f, -0.009036f, -0.001784f, 0.016021f, -0.015147f, -0.002934f, 0.016865f, 0.000607f, -0.005466f, 0.006172f, -0.006879f, 0.012301f, 0.006114f, 0.000364f, 0.006855f, -0.006329f, -0.009771f, -0.000265f, 0.001849f, 0.009317f, -0.017817f, -0.009679f, -0.007234f, -0.005332f, -0.004457f, -0.005220f, 0.004011f, 0.001431f, 0.002794f, -0.013577f, + -0.013195f, -0.010968f, 0.001742f, -0.017567f, -0.008615f, 0.011383f, -0.005887f, 0.002958f, 0.002666f, 0.000246f, 0.006110f, 0.007046f, 0.007797f, 0.007934f, 0.012444f, -0.001186f, 0.013427f, 0.000023f, 0.007841f, -0.000125f, -0.005270f, 0.000500f, -0.009637f, 0.008464f, -0.011451f, 0.014321f, -0.012780f, 0.001249f, -0.012857f, 0.003356f, -0.012273f, -0.013257f, 0.012850f, 0.021386f, 0.073791f, 0.001966f, -0.019880f, 0.004405f, -0.010303f, 0.030092f, -0.003670f, 0.009268f, 0.003190f, 0.002524f, -0.024407f, -0.011930f, 0.015187f, 0.013546f, -0.019014f, -0.002387f, 0.000444f, 0.019010f, 0.009835f, 0.007952f, 0.018562f, 0.003919f, 0.002193f, 0.016376f, -0.004276f, -0.021975f, 0.004464f, 0.018897f, 0.011519f, -0.005504f, 0.001388f, 0.013558f, 0.008562f, 0.004599f, 0.000371f, -0.011756f, 0.007351f, -0.012881f, 0.002435f, -0.025340f, 0.008002f, 0.009473f, -0.001127f, -0.010945f, 0.017915f, 0.010200f, -0.002476f, 0.014475f, 0.007082f, -0.009713f, 0.021303f, 0.003576f, -0.006164f, 0.006127f, 0.021819f, 0.004689f, 0.000489f, -0.015859f, -0.009094f, 0.003966f, 0.008075f, 0.025282f, + -0.006789f, -0.007750f, 0.003077f, 0.014648f, -0.007342f, -0.008479f, 0.000079f, 0.019122f, 0.013314f, -0.002277f, -0.012285f, 0.001446f, 0.015890f, -0.003874f, 0.031527f, 0.015414f, 0.007748f, -0.026856f, -0.003628f, -0.014103f, 0.025047f, -0.010806f, 0.011197f, 0.001237f, 0.015376f, 0.005315f, 0.001540f, -0.002461f, 0.005759f, -0.008575f, -0.011865f, -0.031742f, -0.023432f, 0.006288f, 0.019345f, 0.025802f, -0.010705f, -0.014435f, -0.012353f, 0.004768f, -0.007083f, -0.002662f, -0.001787f, 0.002331f, 0.003444f, 0.016707f, -0.010257f, 0.000337f, 0.003825f, 0.007428f, -0.009318f, -0.007886f, -0.014964f, -0.011193f, -0.010577f, -0.018601f, -0.044000f, -0.001999f, -0.006310f, -0.020213f, 0.003741f, -0.003665f, -0.024010f, 0.006335f, -0.020393f, 0.003506f, -0.002787f, -0.003299f, 0.009825f, 0.011445f, -0.000664f, -0.021249f, 0.005496f, -0.014033f, -0.013718f, 0.016937f, 0.016796f, 0.017017f, -0.006289f, 0.001103f, 0.002442f, -0.011685f, 0.001480f, -0.006755f, 0.029660f, -0.007108f, -0.002961f, -0.005256f, -0.000088f, -0.020505f, -0.022394f, 0.008552f, -0.028358f, 0.010656f, 0.003534f, 0.030222f, + -0.020185f, -0.011247f, -0.006709f, 0.016278f, -0.015338f, -0.014451f, 0.013242f, 0.009243f, -0.015571f, -0.015299f, -0.015407f, -0.033878f, 0.022340f, 0.021493f, 0.022212f, -0.009209f, 0.006883f, 0.022666f, -0.032401f, 0.000542f, 0.020873f, 0.020120f, 0.008606f, 0.000522f, -0.010614f, 0.002765f, -0.005306f, -0.027189f, 0.003154f, 0.008325f, 0.003677f, 0.019207f, -0.016721f, 0.002541f, -0.030900f, -0.003023f, 0.005493f, -0.015823f, 0.005902f, 0.006080f, 0.013003f, 0.017639f, 0.022491f, -0.003663f, -0.009784f, -0.026794f, -0.020689f, 0.009833f, 0.040230f, -0.011435f, -0.002580f, -0.017523f, -0.010965f, -0.013509f, 0.007817f, 0.010709f, -0.004273f, 0.003100f, -0.031263f, -0.002041f, 0.018965f, -0.014107f, -0.015602f, 0.014431f, -0.007187f, 0.020346f, 0.002261f, -0.009805f, -0.000577f, -0.015708f, -0.009509f, 0.000151f, -0.018406f, 0.040192f, -0.020885f, -0.011103f, -0.001540f, -0.002076f, -0.029765f, 0.001145f, -0.022110f, 0.014731f, -0.040920f, -0.006587f, -0.013575f, 0.012990f, -0.014554f, -0.014648f, -0.034741f, 0.022181f, -0.014715f, 0.008676f, -0.011676f, 0.006106f, 0.017372f, -0.013911f, + -0.023047f, -0.008254f, 0.014512f, 0.030901f, 0.009419f, 0.012483f, 0.000802f, -0.032682f, -0.017858f, -0.017992f, -0.009633f, 0.004768f, 0.028111f, 0.011639f, 0.016020f, 0.014954f, -0.005261f, -0.007592f, -0.010586f, -0.027538f, 0.000566f, -0.019504f, 0.027958f, -0.014123f, 0.018944f, 0.003309f, -0.011375f, 0.005685f, -0.007934f, -0.010057f, -0.016773f, 0.022658f, 0.005114f, 0.038962f, 0.007618f, -0.044285f, -0.011974f, 0.012601f, 0.009921f, 0.005004f, -0.003828f, 0.002423f, 0.043629f, 0.021046f, -0.009265f, 0.003169f, -0.013952f, 0.030787f, -0.003256f, -0.003573f, 0.010481f, -0.031940f, -0.014867f, -0.025362f, 0.014489f, 0.032906f, -0.003705f, -0.001875f, -0.001200f, 0.030552f, 0.009168f, 0.006994f, 0.004862f, 0.003227f, 0.004837f, -0.012646f, 0.001838f, -0.038831f, 0.005070f, -0.018943f, 0.015597f, 0.038816f, -0.005547f, 0.002411f, -0.031425f, 0.040938f, 0.019626f, 0.017129f, -0.005606f, -0.023221f, 0.002287f, -0.008232f, 0.020548f, 0.014592f, -0.019272f, 0.000526f, 0.010626f, 0.007347f, -0.015020f, -0.013427f, 0.060186f, -0.014569f, -0.011025f, 0.012268f, -0.015891f, -0.011789f, + 0.018834f, 0.018346f, 0.000302f, 0.006708f, 0.006427f, -0.024053f, -0.012110f, -0.001607f, 0.007572f, 0.019916f, 0.004665f, 0.004187f, -0.026913f, -0.003209f, 0.007440f, -0.036939f, 0.007574f, -0.010875f, -0.003986f, -0.007555f, 0.010351f, -0.011736f, -0.019885f, -0.022091f, -0.033406f, 0.002948f, -0.013533f, -0.007980f, 0.021397f, -0.009081f, 0.007332f, -0.040074f, 0.001151f, 0.029376f, -0.019105f, -0.019197f, 0.045846f, -0.027353f, 0.007239f, -0.017483f, 0.054066f, 0.011480f, 0.010108f, -0.017243f, -0.020259f, 0.001961f, 0.015583f, -0.016557f, -0.026187f, -0.015701f, -0.038144f, -0.014976f, -0.022285f, -0.000078f, -0.051290f, 0.003567f, 0.028212f, 0.017146f, 0.023139f, -0.015985f, 0.006297f, 0.024725f, -0.002496f, 0.017910f, 0.007092f, 0.027944f, -0.013605f, 0.023294f, 0.019059f, 0.013219f, 0.030876f, -0.017058f, 0.018650f, -0.009345f, -0.010175f, -0.007216f, 0.007379f, -0.058897f, -0.018095f, -0.036620f, 0.043128f, -0.026714f, -0.029274f, -0.006463f, 0.024815f, 0.000666f, -0.009769f, 0.033323f, -0.010821f, -0.010519f, -0.022995f, -0.059455f, 0.004172f, 0.005640f, 0.026208f, -0.024807f, + 0.001604f, -0.015006f, -0.018402f, 0.032124f, -0.004587f, 0.016341f, -0.032593f, -0.033166f, -0.018791f, 0.027289f, -0.000283f, -0.015715f, -0.015174f, 0.001021f, -0.023152f, -0.001193f, 0.028666f, 0.002838f, -0.009963f, 0.014233f, -0.025080f, 0.046896f, 0.029169f, -0.001402f, -0.022889f, -0.025961f, 0.009433f, -0.007409f, -0.003154f, -0.002487f, 0.042886f, -0.022689f, -0.000064f, -0.016169f, 0.015256f, -0.028436f, -0.025776f, -0.050333f, 0.010554f, -0.021224f, -0.028395f, -0.004668f, -0.047453f, -0.024252f, 0.012408f, 0.008603f, -0.007150f, 0.022926f, 0.001539f, 0.028054f, -0.013711f, -0.042013f, -0.006857f, -0.031189f, -0.006339f, -0.010416f, -0.039568f, 0.003574f, 0.031083f, -0.090834f, 0.010705f, -0.001365f, 0.021563f, -0.006059f, -0.028350f, -0.054651f, 0.020586f, -0.008220f, 0.019228f, 0.010054f, -0.006945f, 0.029097f, -0.038925f, 0.052036f, -0.013966f, 0.028129f, 0.062499f, 0.023152f, 0.044373f, 0.015500f, 0.011379f, -0.008292f, 0.023036f, -0.010949f, -0.024786f, -0.035261f, -0.021576f, -0.003284f, 0.018295f, -0.004559f, 0.076500f, 0.062542f, 0.056522f, -0.011412f, 0.001413f, -0.045773f, + 0.036370f, 0.044641f, 0.016121f, 0.043137f, 0.018124f, 0.015374f, 0.016120f, -0.006363f, 0.007205f, 0.012667f, -0.009302f, -0.044202f, -0.026011f, -0.000685f, -0.028575f, -0.034048f, -0.080731f, 0.019001f, 0.015726f, 0.022341f, -0.014202f, -0.004743f, -0.009372f, 0.001431f, -0.024118f, 0.000083f, -0.017968f, 0.023551f, 0.020601f, -0.010990f, -0.014258f, -0.042639f, 0.074742f, -0.022125f, 0.016166f, 0.000608f, 0.006482f, 0.012250f, -0.028375f, 0.036962f, -0.016519f, 0.012941f, 0.010047f, -0.026779f, -0.026123f, -0.004825f, -0.000495f, 0.017211f, 0.079076f, -0.006233f, 0.013501f, 0.002662f, 0.025326f, 0.016530f, 0.019437f, -0.013782f, -0.001906f, 0.006314f, -0.035062f, 0.006977f, -0.029662f, -0.051834f, 0.019971f, 0.000227f, 0.006254f, -0.039370f, -0.087430f, 0.035442f, 0.042454f, 0.022136f, -0.048133f, -0.044701f, -0.088656f, 0.072551f, 0.011220f, 0.012404f, -0.029879f, -0.021716f, -0.094256f, 0.025322f, 0.066529f, 0.019957f, -0.059866f, -0.030311f, 0.009156f, -0.023726f, -0.015149f, 0.026852f, -0.031376f, 0.016634f, 0.014941f, 0.012106f, -0.034861f, 0.011652f, 0.010203f, -0.016794f, + -0.032642f, -0.019294f, -0.012833f, -0.008991f, -0.031152f, -0.027154f, -0.015006f, -0.032338f, 0.024546f, -0.012491f, -0.041315f, -0.014785f, 0.024637f, -0.005855f, -0.028797f, -0.016272f, -0.014930f, -0.000764f, -0.022950f, -0.014214f, -0.037737f, -0.036033f, 0.014532f, -0.013235f, 0.045880f, 0.029893f, 0.002363f, 0.027096f, -0.041300f, 0.025644f, -0.039321f, 0.031798f, -0.006430f, 0.015992f, -0.018209f, 0.057006f, -0.015548f, 0.031703f, -0.009676f, 0.046843f, 0.017328f, 0.011046f, -0.051045f, 0.052570f, 0.039640f, 0.018080f, 0.015985f, -0.038457f, -0.012581f, 0.015392f, 0.017484f, -0.007127f, -0.011732f, -0.057036f, 0.056339f, -0.001882f, 0.029186f, -0.029507f, -0.006766f, -0.004087f, -0.003674f, -0.003529f, 0.034615f, 0.005287f, -0.021166f, 0.024829f, 0.007673f, 0.019190f, 0.029953f, 0.030540f, 0.005519f, -0.017931f, 0.096412f, -0.020705f, 0.075104f, 0.005213f, 0.008406f, -0.035453f, -0.013406f, 0.011455f, 0.038530f, 0.021840f, -0.006976f, 0.033046f, 0.009954f, -0.033842f, 0.010729f, 0.010743f, 0.044219f, 0.003660f, 0.028208f, -0.024244f, 0.004328f, 0.032335f, 0.017802f, 0.028008f, + 0.064403f, 0.053556f, -0.003068f, 0.030517f, 0.000725f, 0.052899f, -0.033335f, 0.037360f, 0.017408f, 0.004266f, 0.032981f, -0.008794f, 0.078251f, -0.006393f, 0.040346f, -0.020250f, -0.018848f, 0.007908f, 0.083347f, 0.032435f, -0.067515f, 0.071656f, 0.004020f, 0.030135f, -0.049325f, 0.026577f, 0.011952f, -0.101316f, 0.051842f, 0.092917f, 0.038031f, -0.025150f, -0.016323f, 0.029137f, 0.078921f, 0.018692f, 0.022074f, 0.014481f, -0.016269f, -0.008067f, -0.029171f, 0.037859f, 0.006479f, 0.025194f, -0.019463f, 0.050344f, -0.016757f, 0.023405f, 0.008759f, 0.010340f, 0.008416f, 0.004205f, -0.051520f, -0.030778f, 0.001532f, 0.004389f, 0.037267f, 0.029245f, -0.041575f, 0.003815f, -0.022207f, -0.022157f, 0.012128f, 0.001872f, -0.013092f, 0.016880f, 0.071199f, -0.047057f, -0.001870f, 0.105322f, -0.062886f, 0.006383f, 0.039992f, -0.020872f, -0.013580f, 0.020548f, 0.037296f, -0.039895f, 0.021147f, -0.071178f, -0.005059f, 0.101530f, 0.007071f, 0.027185f, -0.008291f, 0.054237f, 0.059634f, -0.018233f, 0.001935f, -0.029616f, 0.009605f, -0.022868f, -0.047289f, -0.035750f, -0.056908f, -0.048070f, + 0.070447f, 0.022933f, 0.023385f, 0.084673f, -0.059516f, -0.042402f, 0.015106f, 0.027708f, -0.021094f, 0.009661f, -0.023056f, 0.041514f, 0.032506f, 0.007230f, 0.036826f, 0.113663f, 0.012401f, -0.013014f, -0.029456f, 0.027404f, -0.005754f, 0.060234f, -0.051251f, 0.015272f, -0.002049f, -0.015122f, -0.013659f, -0.005759f, 0.019671f, 0.012946f, 0.013935f, -0.000864f, 0.034434f, 0.007688f, -0.040937f, -0.031654f, -0.002854f, -0.017755f, -0.022780f, 0.007647f, 0.028801f, -0.001725f, -0.004330f, -0.037062f, 0.021102f, -0.004150f, 0.041899f, -0.011469f, -0.075249f, 0.011635f, -0.021008f, -0.009379f, 0.001978f, -0.060245f, -0.031013f, -0.051388f, 0.002860f, -0.001541f, -0.013164f, -0.068693f, -0.026997f, -0.003749f, 0.039122f, 0.043625f, 0.005267f, 0.005727f, 0.022009f, 0.007205f, -0.046854f, 0.045572f, 0.060363f, -0.022507f, 0.010871f, -0.022465f, 0.012602f, 0.002806f, 0.046519f, -0.046759f, -0.034134f, -0.110840f, -0.038443f, 0.032218f, 0.047957f, 0.036387f, 0.031510f, -0.024161f, -0.007820f, 0.027117f, 0.022711f, 0.054457f, 0.022735f, 0.026891f, 0.030951f, 0.012653f, -0.089485f, 0.040161f, + -0.025349f, 0.005163f, 0.066959f, 0.056070f, -0.019500f, -0.007463f, 0.035562f, -0.019248f, -0.019789f, -0.016722f, 0.006717f, -0.004780f, -0.000169f, 0.009223f, -0.004807f, 0.033430f, 0.078744f, -0.030867f, -0.057309f, 0.061027f, -0.043759f, -0.011247f, 0.003085f, 0.075736f, 0.008493f, -0.021393f, 0.024758f, 0.021880f, -0.075049f, -0.021874f, 0.015893f, -0.002042f, -0.033884f, -0.001867f, 0.017920f, -0.113673f, -0.049589f, 0.057515f, -0.052946f, -0.062192f, -0.035119f, 0.046955f, -0.056264f, -0.093664f, 0.098946f, -0.027503f, -0.055020f, -0.003156f, 0.041620f, -0.036157f, -0.058851f, -0.001587f, 0.034167f, -0.003480f, -0.076435f, 0.018867f, 0.004722f, -0.037382f, 0.092559f, 0.080152f, 0.000771f, -0.034484f, -0.056392f, 0.096934f, 0.022089f, 0.014700f, 0.043401f, -0.028236f, -0.085640f, 0.037598f, 0.085084f, 0.050049f, -0.023191f, 0.006061f, -0.092700f, 0.012257f, 0.090996f, 0.050404f, 0.014315f, 0.000719f, -0.014300f, 0.025039f, -0.029606f, 0.075917f, -0.003828f, 0.021624f, 0.029168f, -0.023586f, 0.002807f, -0.001309f, -0.026405f, 0.001811f, 0.012508f, 0.043476f, 0.001655f, -0.023821f, + 0.014614f, 0.035401f, -0.003734f, 0.054975f, -0.039350f, 0.010616f, 0.013737f, 0.015872f, 0.047727f, -0.023086f, 0.005844f, 0.000367f, -0.058138f, 0.010646f, -0.017798f, -0.030581f, 0.015812f, -0.010258f, 0.048908f, 0.036187f, -0.022901f, -0.051454f, 0.027346f, 0.007548f, 0.012584f, 0.032434f, 0.067202f, -0.008673f, 0.015382f, -0.023999f, 0.039367f, 0.029499f, 0.029912f, -0.028410f, 0.044854f, -0.011870f, -0.016862f, -0.034564f, -0.001437f, -0.011619f, 0.057615f, -0.037993f, 0.005026f, 0.017563f, -0.010585f, -0.021098f, 0.079923f, 0.001420f, 0.020885f, -0.001414f, 0.012246f, 0.000812f, 0.025825f, 0.007873f, -0.000599f, 0.029754f, -0.083988f, -0.233402f, -0.221893f, 0.094458f, 0.008146f, 0.210646f, 0.448086f, 0.096902f, 0.179902f, 0.095086f, -0.334425f, -0.150715f, -0.225255f, -0.330749f, -0.023136f, 0.037297f, -0.156539f, 0.136569f, 0.234117f, 0.142298f, 0.403936f, 0.246795f, 0.001378f, -0.039191f, -0.144127f, -0.359385f, -0.290519f, -0.126635f, -0.275190f, -0.082805f, 0.156186f, 0.044775f, 0.039057f, 0.368980f, 0.142481f, 0.088415f, 0.342716f, 0.014301f, -0.017829f, 0.156270f, + -0.079220f, -0.285002f, -0.137353f, -0.284813f, -0.413327f, -0.047805f, -0.187817f, -0.155250f, 0.132161f, 0.254355f, 0.118667f, 0.451045f, 0.361172f, 0.207284f, 0.274481f, 0.090875f, -0.133913f, -0.209096f, -0.275398f, -0.444123f, -0.353560f, -0.239680f, -0.201359f, -0.064677f, 0.155777f, 0.232610f, 0.263157f, 0.349646f, 0.298501f, 0.138309f, 0.055323f, 0.077633f, -0.110385f, -0.176101f, -0.114121f, -0.250248f, -0.135718f, -0.003095f, -0.017737f} + }, + { + {-0.002684f, 0.000038f, 0.004022f, -0.007594f, -0.002239f, -0.004807f, -0.006689f, -0.000587f, 0.008250f, 0.001430f, -0.004459f, -0.004223f, 0.011405f, -0.005154f, 0.001089f, -0.003708f, -0.003806f, -0.005893f, -0.001447f, 0.014284f, 0.000939f, -0.000712f, 0.002677f, 0.003685f, 0.001215f, -0.004622f, 0.007917f, 0.000245f, -0.000277f, -0.003551f, 0.000999f, -0.002685f, 0.001182f, 0.005253f, 0.000387f, -0.000216f, -0.000298f, -0.000373f, -0.001242f, -0.006992f, 0.001633f, 0.005909f, -0.001762f, -0.003447f, 0.005516f, -0.006408f, -0.000491f, -0.002724f, 0.004046f, -0.010331f, 0.003815f, -0.000785f, 0.001553f, -0.002335f, -0.002149f, -0.000285f, -0.002916f, 0.000419f, 0.003121f, 0.002301f, -0.000635f, 0.002037f, 0.009214f, -0.005820f, -0.004625f, 0.000472f, -0.002183f, -0.004383f, 0.001216f, -0.004718f, 0.002588f, -0.005679f, 0.000587f, -0.002892f, -0.004781f, -0.000695f, -0.009260f, -0.003483f, 0.002330f, -0.001621f, -0.005267f, -0.000275f, 0.012684f, -0.006322f, 0.001618f, -0.002606f, 0.000020f, -0.004691f, 0.009187f, -0.004582f, -0.004815f, -0.005541f, 0.010927f, -0.006303f, -0.001489f, -0.002937f, + 0.003214f, 0.005040f, 0.006488f, -0.008802f, 0.000184f, 0.008563f, 0.003971f, 0.001516f, -0.000249f, -0.001005f, 0.004065f, 0.008713f, 0.002327f, -0.011078f, -0.005489f, -0.005946f, 0.009966f, -0.000962f, 0.007675f, -0.004632f, 0.003710f, 0.009736f, -0.004448f, -0.007308f, 0.002901f, -0.002736f, -0.000177f, -0.006555f, -0.002316f, -0.004910f, 0.002206f, -0.008906f, -0.002567f, -0.002310f, 0.000099f, 0.011967f, -0.003516f, -0.001872f, 0.000004f, -0.003231f, -0.000784f, -0.001234f, 0.007770f, 0.003643f, 0.004997f, -0.006399f, 0.005170f, 0.004638f, -0.003615f, 0.001773f, 0.003575f, -0.003490f, -0.003545f, 0.004761f, -0.006679f, 0.004925f, -0.000821f, -0.000101f, -0.000405f, -0.006036f, 0.006094f, 0.000601f, -0.002846f, -0.004154f, -0.001256f, -0.002170f, -0.000152f, -0.005107f, -0.003995f, 0.002710f, -0.000955f, -0.002028f, -0.008884f, -0.001410f, 0.007934f, -0.005567f, -0.001541f, 0.006010f, -0.003700f, -0.006630f, -0.005170f, 0.004080f, -0.000148f, -0.000715f, -0.001444f, -0.006340f, 0.001922f, -0.002854f, -0.001664f, 0.007036f, -0.004094f, -0.009651f, -0.003061f, 0.000499f, 0.002679f, 0.002502f, + 0.000622f, -0.007308f, -0.001890f, -0.008887f, -0.008287f, -0.002158f, 0.008254f, -0.001430f, -0.016945f, -0.000699f, 0.005418f, 0.004968f, -0.003674f, 0.003391f, 0.003375f, 0.000463f, 0.004748f, -0.008855f, -0.006612f, -0.000652f, 0.002379f, 0.000653f, 0.001622f, -0.000677f, 0.002109f, 0.002501f, 0.003225f, -0.000078f, 0.001883f, 0.002606f, -0.001953f, 0.004187f, -0.001130f, -0.007796f, -0.007457f, -0.003166f, -0.000932f, 0.007966f, 0.004602f, 0.011771f, 0.001089f, -0.001971f, -0.001083f, 0.008399f, -0.001876f, 0.004627f, -0.007091f, -0.000528f, 0.000152f, 0.004518f, 0.003325f, 0.007531f, 0.005493f, -0.003509f, -0.006966f, -0.005765f, 0.004477f, -0.002336f, 0.005985f, 0.003730f, 0.001142f, -0.000162f, 0.005057f, 0.003469f, -0.002975f, 0.004017f, -0.007478f, -0.000927f, -0.006893f, -0.006108f, -0.008372f, 0.002721f, 0.005472f, -0.000793f, 0.007447f, -0.005305f, 0.006944f, -0.012996f, 0.005522f, 0.002340f, 0.010191f, 0.002936f, 0.003989f, 0.005312f, 0.000284f, -0.003280f, 0.004156f, 0.008516f, 0.003427f, 0.004134f, -0.000804f, -0.000134f, -0.011425f, -0.000804f, 0.002510f, 0.002282f, + -0.001142f, 0.006348f, 0.012675f, -0.004114f, -0.007993f, 0.005637f, 0.001969f, -0.006316f, 0.000623f, -0.003094f, -0.005426f, 0.000414f, 0.009442f, 0.001670f, 0.003957f, 0.000695f, 0.006554f, 0.006321f, -0.005641f, 0.009522f, -0.003066f, -0.005891f, -0.008876f, 0.002385f, -0.011817f, -0.000472f, 0.001461f, 0.003619f, -0.007469f, 0.005259f, 0.000077f, 0.001413f, 0.003409f, 0.002294f, 0.002910f, -0.010029f, -0.000509f, -0.002004f, -0.006576f, 0.004303f, 0.002167f, 0.001917f, 0.005974f, 0.020784f, -0.001332f, 0.001440f, 0.003078f, 0.005448f, 0.002163f, -0.016329f, 0.003645f, -0.002346f, -0.001761f, 0.009628f, 0.000432f, 0.005037f, 0.006779f, -0.007773f, -0.004452f, -0.001873f, -0.007858f, -0.016659f, 0.000973f, -0.005925f, -0.000873f, -0.000918f, -0.000188f, -0.003378f, -0.008244f, 0.003026f, -0.007877f, -0.001888f, 0.001994f, -0.008272f, 0.009478f, 0.003950f, 0.002837f, -0.002986f, -0.000481f, -0.000634f, 0.002068f, -0.002003f, 0.005008f, -0.006405f, 0.002705f, 0.012234f, 0.009560f, -0.002096f, 0.005040f, -0.003106f, 0.002386f, -0.006734f, 0.000327f, 0.013593f, -0.017364f, 0.000682f, + -0.010717f, 0.005404f, 0.007805f, 0.009546f, -0.001556f, -0.009160f, 0.000161f, 0.009406f, 0.001939f, 0.001764f, -0.007189f, -0.000995f, -0.012531f, 0.016498f, -0.000970f, -0.012777f, 0.013691f, 0.003412f, 0.003982f, -0.000940f, -0.005086f, -0.001668f, -0.006688f, -0.006522f, 0.004968f, 0.007188f, -0.001610f, 0.006779f, -0.005770f, -0.003559f, -0.000156f, 0.009476f, 0.008847f, -0.002578f, -0.005262f, 0.007363f, 0.004537f, 0.000642f, 0.006068f, 0.001438f, -0.007602f, 0.007701f, 0.004599f, -0.000646f, -0.002828f, 0.002075f, -0.008239f, 0.021109f, -0.001411f, -0.000836f, 0.015440f, -0.001520f, -0.010034f, -0.005330f, -0.001556f, 0.003746f, -0.010497f, 0.006757f, 0.001559f, 0.000115f, -0.009692f, -0.007816f, -0.016763f, -0.001579f, 0.006755f, 0.003559f, 0.008222f, -0.005264f, -0.004647f, 0.018813f, -0.006649f, 0.002837f, -0.004514f, -0.008356f, -0.017896f, 0.000116f, -0.007355f, -0.008336f, 0.002918f, -0.010071f, 0.000577f, 0.007454f, 0.004152f, 0.015253f, -0.024599f, 0.016320f, -0.002390f, 0.007342f, -0.004515f, -0.003196f, -0.012827f, 0.012013f, 0.010498f, 0.002964f, -0.011394f, -0.000250f, + -0.006507f, -0.000404f, 0.012297f, 0.008828f, 0.002046f, 0.011942f, 0.000016f, 0.001019f, 0.001300f, 0.000034f, -0.007908f, 0.017678f, -0.001583f, 0.000618f, 0.020155f, -0.012451f, 0.004907f, -0.005681f, -0.001198f, 0.006822f, -0.002646f, -0.009683f, 0.019344f, 0.015548f, -0.000489f, 0.005418f, 0.008111f, 0.021375f, -0.002687f, -0.003176f, -0.011312f, 0.002578f, 0.003911f, -0.011332f, -0.012826f, -0.010566f, 0.013333f, 0.000990f, -0.005677f, 0.009956f, 0.006357f, 0.000881f, -0.003476f, 0.003821f, -0.007628f, -0.000977f, -0.008383f, -0.000815f, 0.006832f, -0.013528f, 0.002586f, -0.001827f, -0.011395f, 0.007724f, -0.004084f, 0.002285f, -0.003607f, -0.001839f, 0.002324f, 0.013313f, 0.014097f, 0.002036f, -0.012961f, -0.002089f, -0.012346f, 0.004597f, 0.030812f, 0.007362f, 0.021191f, 0.007608f, -0.000224f, -0.020574f, -0.005484f, 0.002976f, 0.019041f, -0.009013f, -0.004867f, -0.007897f, 0.001302f, 0.015376f, -0.012118f, 0.007340f, 0.012994f, 0.002656f, 0.004360f, -0.009289f, 0.016147f, -0.003993f, 0.021204f, -0.000605f, -0.007451f, -0.020979f, 0.001734f, -0.000350f, 0.023703f, -0.007847f, + -0.002874f, 0.015093f, -0.000810f, 0.001572f, -0.006038f, -0.016600f, 0.000682f, 0.008715f, -0.012662f, -0.009693f, 0.001215f, -0.019918f, 0.009307f, 0.010027f, -0.004635f, -0.001997f, 0.003941f, 0.010105f, -0.002565f, -0.007626f, -0.002061f, 0.015023f, -0.004056f, -0.003618f, -0.008327f, 0.019430f, 0.018433f, -0.000153f, -0.006847f, 0.001347f, -0.004575f, 0.002981f, 0.004982f, -0.004486f, 0.006646f, -0.012580f, 0.002948f, 0.000683f, -0.013501f, 0.014303f, 0.010926f, 0.001149f, -0.008875f, -0.009944f, -0.004205f, -0.020077f, 0.023973f, 0.018185f, -0.003573f, 0.006967f, 0.002381f, -0.003533f, 0.018212f, -0.001073f, -0.008141f, 0.026993f, -0.028630f, 0.007833f, 0.012624f, 0.000292f, -0.011607f, 0.013083f, 0.002135f, 0.018748f, -0.006935f, -0.001560f, 0.005038f, 0.007748f, 0.001373f, -0.002081f, 0.026804f, 0.011946f, -0.012099f, -0.017985f, 0.012901f, -0.017986f, -0.005287f, -0.020768f, -0.002708f, 0.032231f, 0.013017f, 0.015825f, 0.000105f, -0.016384f, -0.002841f, -0.007760f, -0.003729f, 0.024244f, -0.003804f, -0.025700f, -0.002256f, 0.005630f, -0.016849f, -0.002273f, 0.010502f, 0.008947f, + -0.011505f, -0.005361f, 0.011092f, 0.015672f, -0.004893f, 0.016295f, -0.000318f, 0.004435f, 0.005163f, 0.001771f, 0.005240f, 0.009880f, 0.007889f, 0.009274f, -0.006529f, -0.018669f, -0.023468f, 0.011859f, -0.001302f, 0.011072f, -0.021605f, 0.007984f, 0.006381f, 0.003372f, -0.014077f, -0.011768f, -0.015003f, 0.012018f, 0.006368f, -0.010693f, -0.010632f, 0.015066f, 0.005059f, -0.001024f, -0.008903f, -0.014905f, -0.005924f, 0.006303f, -0.009417f, 0.001326f, -0.017857f, -0.004889f, 0.002364f, 0.006383f, 0.012083f, -0.001720f, 0.007811f, 0.010501f, -0.010238f, -0.024951f, 0.017593f, 0.001010f, -0.003711f, 0.016710f, -0.002255f, 0.000899f, -0.010807f, 0.014747f, -0.008945f, -0.011480f, -0.004272f, 0.012183f, 0.018364f, 0.015478f, 0.005062f, 0.003419f, -0.031446f, 0.014866f, -0.001547f, 0.006533f, -0.010588f, -0.001575f, -0.011875f, -0.003707f, -0.002567f, -0.015705f, -0.007757f, -0.005968f, -0.008441f, 0.017785f, -0.004907f, 0.023015f, -0.002042f, -0.000087f, 0.014475f, 0.017151f, 0.027305f, 0.019916f, 0.000492f, -0.006481f, 0.000105f, 0.002866f, -0.010875f, 0.006920f, -0.006542f, -0.009112f, + -0.034434f, 0.006902f, -0.023883f, -0.014524f, 0.021434f, 0.016554f, -0.039231f, -0.036000f, 0.000602f, 0.014549f, -0.009579f, 0.008767f, -0.013344f, -0.001989f, -0.023016f, -0.006409f, -0.020831f, -0.001991f, -0.006122f, 0.000118f, 0.007205f, 0.005857f, 0.012038f, -0.002072f, -0.011312f, 0.008850f, -0.013374f, -0.005617f, 0.003572f, 0.000351f, 0.006004f, 0.012938f, -0.002682f, 0.001268f, 0.002572f, -0.005826f, -0.001911f, -0.019969f, -0.023689f, -0.022814f, -0.000434f, -0.022917f, 0.007140f, 0.002702f, -0.009348f, -0.010749f, -0.004914f, -0.003952f, -0.002307f, -0.013596f, -0.021593f, -0.001287f, 0.033449f, 0.018585f, -0.005025f, -0.020101f, -0.021049f, 0.023446f, -0.022047f, -0.006960f, -0.004016f, -0.014216f, -0.011138f, -0.014344f, -0.017404f, -0.023503f, -0.032681f, -0.003749f, -0.005086f, -0.003390f, 0.011307f, 0.012100f, 0.003220f, 0.011477f, -0.006145f, 0.002998f, -0.027039f, 0.003974f, 0.014716f, 0.016036f, 0.014792f, 0.006807f, 0.028482f, -0.010116f, -0.019639f, -0.004402f, 0.004163f, -0.003177f, 0.009421f, 0.019478f, 0.037933f, 0.024506f, 0.014223f, 0.018436f, -0.013955f, -0.026563f, + -0.009025f, -0.019605f, 0.023875f, 0.006420f, -0.004568f, -0.015633f, 0.026982f, 0.024047f, -0.008151f, -0.000491f, 0.000177f, -0.012561f, -0.011249f, -0.019482f, 0.006399f, 0.008470f, 0.012022f, -0.018266f, 0.001970f, 0.006999f, -0.008785f, -0.017619f, 0.000681f, 0.012581f, 0.014737f, 0.004024f, -0.037259f, -0.011735f, -0.018384f, 0.009301f, 0.022248f, 0.001705f, -0.020970f, 0.006776f, -0.020271f, 0.013059f, -0.004996f, 0.003729f, -0.014450f, 0.032124f, 0.023633f, -0.005338f, -0.007123f, -0.015155f, -0.001348f, 0.026402f, 0.005353f, 0.032049f, 0.028343f, 0.026408f, 0.013837f, 0.007733f, -0.019094f, -0.007417f, -0.025171f, 0.032719f, -0.015895f, -0.002062f, 0.016032f, 0.026126f, -0.022176f, -0.027364f, -0.023412f, 0.031120f, -0.009360f, 0.021702f, 0.002148f, 0.002997f, 0.048266f, -0.002811f, 0.005778f, -0.017542f, -0.029243f, 0.010691f, -0.002337f, 0.011365f, 0.007937f, 0.000337f, -0.015733f, 0.008040f, 0.009124f, 0.006137f, -0.014733f, 0.014327f, 0.010588f, 0.036505f, -0.013071f, 0.005405f, 0.020632f, 0.021867f, 0.003081f, 0.022110f, -0.002410f, 0.004048f, 0.019232f, 0.017614f, + 0.006189f, -0.003931f, -0.024540f, -0.016903f, 0.018181f, 0.003153f, -0.003763f, -0.001662f, 0.006418f, 0.039938f, 0.000197f, -0.008735f, 0.020855f, -0.004864f, 0.019865f, 0.008329f, 0.054642f, -0.005954f, 0.000827f, 0.004300f, 0.010283f, 0.022422f, -0.000924f, -0.001258f, 0.014175f, -0.019424f, 0.022555f, 0.042030f, 0.013467f, -0.002061f, 0.023054f, -0.001807f, 0.001407f, 0.047925f, -0.021677f, 0.015872f, 0.018789f, 0.001103f, 0.002640f, 0.003492f, 0.007262f, -0.027758f, -0.009267f, 0.016219f, -0.010484f, -0.015231f, -0.014005f, -0.014056f, 0.000360f, 0.016398f, -0.004198f, -0.041403f, -0.001921f, -0.031805f, 0.009801f, 0.011548f, -0.001772f, 0.004700f, -0.015391f, -0.003144f, 0.013999f, -0.039613f, 0.007564f, -0.009733f, 0.019119f, 0.013390f, 0.007338f, 0.000318f, -0.017534f, -0.035825f, -0.004195f, -0.031466f, 0.016218f, -0.001053f, -0.011587f, 0.030455f, 0.013921f, -0.013946f, -0.012666f, -0.007886f, -0.007535f, -0.010141f, -0.019874f, 0.001818f, 0.002048f, 0.044641f, -0.004500f, -0.034108f, -0.003073f, 0.021139f, -0.001508f, -0.018211f, 0.007388f, -0.026833f, 0.013624f, -0.012141f, + 0.007735f, -0.016259f, 0.003152f, -0.027550f, 0.064787f, 0.001057f, 0.043361f, -0.006225f, -0.017320f, 0.010572f, -0.019876f, -0.016936f, 0.021586f, 0.023636f, -0.027705f, -0.062055f, 0.051406f, -0.022422f, -0.021366f, -0.010856f, -0.003691f, -0.029692f, -0.010733f, -0.009303f, -0.025517f, -0.044814f, -0.011237f, 0.000278f, -0.023843f, 0.011092f, -0.010326f, 0.019280f, -0.017230f, -0.007606f, -0.024438f, 0.057295f, 0.048731f, -0.011501f, 0.010765f, 0.033036f, -0.035432f, 0.035241f, -0.014987f, -0.015514f, 0.012843f, 0.004119f, 0.006083f, -0.005896f, -0.007795f, 0.000362f, 0.011612f, 0.009350f, -0.015653f, 0.017306f, -0.016841f, -0.028855f, 0.020540f, 0.017257f, -0.023301f, -0.029869f, -0.033492f, -0.005694f, -0.005360f, 0.008645f, -0.021733f, -0.028353f, -0.013772f, 0.045298f, 0.016487f, 0.014851f, -0.019358f, 0.016930f, 0.024721f, -0.019824f, 0.045818f, 0.007509f, -0.015637f, -0.022173f, 0.012776f, -0.018796f, -0.038015f, 0.008459f, 0.000385f, -0.000137f, 0.022121f, 0.018685f, -0.015949f, 0.002156f, -0.048402f, -0.007303f, -0.018086f, 0.039885f, 0.004317f, 0.004446f, -0.021414f, 0.017764f, + -0.037034f, -0.008548f, -0.021648f, 0.027089f, 0.028503f, 0.025839f, 0.017311f, -0.000326f, 0.023557f, 0.021468f, 0.003368f, -0.004160f, 0.009323f, -0.000002f, -0.024520f, -0.002940f, 0.008900f, -0.018996f, 0.026741f, -0.028258f, 0.022248f, 0.024589f, -0.007463f, -0.005570f, 0.010024f, 0.032834f, 0.024165f, -0.029687f, -0.006955f, -0.007941f, -0.002878f, 0.007428f, -0.014395f, -0.014488f, 0.031634f, 0.000824f, 0.045641f, -0.030201f, -0.029339f, 0.023314f, -0.016165f, 0.008420f, -0.018948f, 0.015568f, 0.016903f, 0.011726f, -0.008166f, -0.026548f, 0.001639f, 0.008829f, -0.023157f, -0.040583f, -0.002567f, 0.003670f, -0.025217f, 0.043782f, -0.006392f, -0.012499f, 0.056705f, 0.054739f, 0.003790f, -0.007774f, -0.003922f, -0.011912f, 0.011102f, -0.029042f, 0.024582f, 0.003188f, -0.018366f, 0.032059f, 0.002057f, 0.005900f, -0.013066f, -0.018681f, -0.048391f, 0.008100f, -0.020985f, -0.010170f, -0.048562f, -0.111814f, 0.036804f, 0.034853f, -0.012955f, 0.007395f, -0.027313f, 0.047537f, 0.030205f, -0.027728f, 0.007243f, 0.006041f, 0.000169f, -0.012749f, -0.009358f, -0.057902f, 0.023755f, 0.027849f, + -0.007082f, -0.000512f, -0.003756f, 0.018578f, -0.014936f, 0.035903f, 0.010241f, -0.043765f, -0.025071f, 0.054442f, 0.035514f, -0.036314f, -0.008988f, -0.013240f, -0.022497f, 0.002908f, -0.009335f, 0.007312f, 0.070797f, 0.018928f, 0.074199f, 0.042185f, 0.047600f, 0.043377f, 0.085535f, -0.006216f, -0.008614f, 0.020026f, -0.006716f, -0.072859f, 0.057941f, -0.026004f, 0.032938f, -0.048414f, -0.038658f, -0.072024f, 0.013474f, -0.007292f, -0.024672f, 0.016638f, -0.034288f, -0.000700f, -0.048702f, -0.048749f, 0.012572f, 0.026954f, -0.039807f, -0.011427f, -0.027993f, -0.038710f, -0.043231f, -0.031710f, 0.021534f, -0.020116f, -0.054388f, 0.072842f, 0.044412f, 0.071775f, -0.015381f, -0.041853f, -0.107606f, 0.044710f, 0.053629f, -0.026190f, -0.012202f, -0.004053f, 0.060879f, 0.000722f, 0.011922f, 0.011858f, -0.016048f, 0.011101f, 0.027573f, -0.007083f, -0.029338f, 0.005684f, 0.051479f, -0.029329f, -0.019050f, 0.010332f, -0.008912f, 0.038364f, -0.011471f, 0.016589f, -0.022004f, -0.025824f, -0.026112f, 0.024686f, -0.009464f, 0.021757f, 0.025217f, -0.008271f, 0.001831f, -0.001177f, -0.023723f, 0.005920f, + -0.021725f, 0.022140f, 0.055782f, 0.093233f, -0.003073f, -0.004151f, -0.042029f, 0.020166f, 0.028963f, -0.002470f, 0.032712f, 0.048153f, 0.018777f, 0.026630f, -0.045856f, -0.027935f, 0.033957f, 0.092747f, -0.019710f, -0.057448f, 0.011667f, -0.020522f, -0.003586f, 0.023405f, -0.002214f, -0.027767f, -0.014927f, -0.015787f, -0.067270f, -0.029966f, -0.002671f, 0.007086f, 0.019187f, -0.008016f, -0.028150f, -0.019741f, 0.002471f, -0.017654f, -0.028521f, 0.012798f, 0.033692f, 0.011136f, 0.017650f, 0.006830f, 0.050856f, -0.016161f, -0.006388f, -0.020131f, 0.011820f, -0.012570f, 0.011229f, 0.057569f, 0.011464f, -0.061347f, -0.014843f, -0.018035f, -0.052221f, 0.033052f, 0.015841f, -0.006272f, 0.007560f, 0.003040f, -0.023301f, -0.000445f, -0.001439f, -0.023568f, -0.006734f, 0.050150f, 0.074375f, 0.034702f, -0.025483f, -0.041083f, 0.019660f, 0.033601f, 0.004219f, 0.026832f, -0.018361f, -0.013303f, 0.028371f, 0.008553f, 0.001012f, -0.062395f, -0.080358f, -0.002836f, -0.046622f, -0.027720f, 0.017829f, 0.067644f, 0.015684f, 0.003219f, -0.018552f, -0.023577f, -0.032747f, -0.029964f, 0.006970f, 0.020438f, + -0.005666f, -0.033638f, -0.052430f, 0.021691f, 0.003501f, -0.029954f, -0.048160f, -0.033850f, -0.052847f, -0.099855f, -0.057284f, -0.008227f, -0.008001f, 0.121932f, -0.009757f, -0.002839f, 0.076077f, 0.010625f, 0.013059f, 0.045416f, -0.009395f, -0.028693f, 0.038304f, -0.053993f, 0.013809f, 0.008767f, -0.023455f, -0.075762f, 0.051786f, 0.015524f, -0.004768f, -0.076694f, 0.020573f, 0.012141f, -0.040495f, 0.007010f, 0.035721f, 0.022122f, 0.010474f, -0.034562f, -0.006994f, -0.012732f, 0.006237f, -0.012832f, 0.003327f, -0.026675f, -0.038676f, 0.042843f, -0.029266f, 0.064964f, -0.039762f, -0.035793f, -0.024338f, -0.045066f, 0.004139f, -0.000520f, 0.068071f, -0.049953f, -0.052889f, 0.027739f, 0.017687f, -0.043546f, -0.058200f, -0.006086f, -0.032664f, 0.038264f, 0.008360f, -0.047969f, 0.031743f, -0.007860f, -0.073968f, 0.049221f, -0.032710f, 0.032250f, -0.054792f, -0.013188f, -0.000911f, -0.022951f, -0.008795f, 0.006632f, 0.070725f, -0.018677f, -0.005478f, -0.020024f, 0.021227f, -0.033182f, 0.027424f, 0.054194f, -0.001411f, 0.054098f, 0.045559f, -0.007965f, 0.091152f, -0.007654f, 0.014454f, -0.007320f, + 0.030851f, 0.075759f, 0.000651f, 0.050941f, -0.101392f, 0.002744f, -0.113977f, -0.038923f, -0.020279f, 0.033253f, 0.103122f, 0.087484f, 0.031510f, 0.051188f, -0.035122f, -0.029768f, 0.003896f, -0.008832f, 0.022965f, 0.006487f, -0.024748f, 0.033789f, 0.050290f, 0.041589f, 0.030763f, 0.025815f, -0.002133f, 0.003566f, -0.018801f, 0.047442f, 0.021439f, -0.010657f, -0.031394f, 0.008684f, 0.018618f, -0.006730f, 0.062358f, 0.065152f, -0.039992f, -0.030013f, -0.000087f, 0.050171f, 0.030708f, 0.006642f, 0.004733f, -0.014095f, -0.025008f, 0.011074f, 0.077834f, -0.034142f, -0.041194f, -0.044894f, 0.039693f, 0.014834f, -0.025826f, -0.039368f, -0.061485f, -0.072818f, 0.005552f, 0.012781f, 0.010412f, -0.018376f, -0.007628f, -0.022469f, 0.011308f, -0.059534f, -0.094978f, -0.045343f, -0.009413f, -0.019904f, -0.039275f, 0.041353f, 0.073489f, -0.022898f, 0.035660f, 0.078504f, 0.050648f, 0.011245f, -0.065153f, -0.004189f, -0.063201f, 0.052016f, -0.005965f, 0.044780f, 0.027364f, 0.001619f, 0.029857f, -0.012250f, -0.002749f, 0.025849f, 0.031465f, 0.005387f, 0.000683f, -0.000388f, -0.027645f, -0.017660f, + 0.008034f, -0.038613f, 0.001553f, -0.014110f, 0.001439f, -0.032629f, 0.006148f, 0.002516f, -0.029821f, 0.025952f, 0.011205f, 0.017787f, -0.037593f, -0.009589f, 0.007596f, -0.001310f, 0.003164f, 0.022504f, 0.005224f, 0.006803f, -0.003985f, -0.007733f, -0.005590f, -0.002419f, 0.014431f, -0.005667f, -0.023952f, 0.020379f, -0.033081f, -0.009773f, -0.011166f, 0.004721f, -0.016079f, -0.018651f, 0.025666f, -0.002523f, -0.025293f, 0.016307f, -0.035391f, 0.029210f, 0.009004f, 0.002053f, 0.029442f, 0.033365f, 0.004577f, 0.009995f, -0.024549f, 0.032348f, -0.015612f, -0.021047f, -0.002084f, 0.005261f, 0.059536f, -0.026436f, -0.044811f, 0.038219f, -0.015345f, 0.037891f, -0.007940f, 0.002047f, -0.018555f, 0.017348f, 0.027202f, -0.017814f, -0.170289f, -0.320998f, -0.116906f, -0.252163f, -0.286958f, 0.065399f, -0.013656f, 0.091089f, 0.362595f, 0.393777f, 0.276623f, 0.396670f, 0.324990f, 0.105557f, 0.111155f, 0.081659f, -0.225077f, -0.231102f, -0.130670f, -0.224347f, -0.242822f, -0.083346f, -0.074399f, -0.204522f, -0.155609f, -0.027747f, -0.093757f, -0.112889f, -0.031156f, -0.086954f, -0.152528f, -0.087407f, + 0.024033f, -0.062187f, -0.077128f, 0.085118f, -0.018299f, -0.084790f, 0.072095f, 0.137808f, -0.035409f, 0.033423f, 0.213449f, 0.028691f, -0.072000f, 0.142867f, 0.123107f, -0.124580f, 0.069291f, 0.158586f, -0.050822f, 0.018336f, 0.273252f, 0.211043f, 0.105167f, 0.387947f, 0.429381f, 0.223336f, 0.396606f, 0.515550f, 0.323212f, 0.309658f, 0.424308f, 0.279953f, 0.179179f, 0.204015f, 0.110233f, -0.095752f, -0.206051f, -0.274731f, -0.490449f, -0.586507f, -0.670406f, -0.735399f, -0.710309f, -0.591944f, -0.279099f, -0.175983f}, + {0.001818f, 0.002056f, 0.003999f, 0.004770f, 0.005359f, 0.003863f, 0.000813f, -0.000185f, -0.003831f, 0.003760f, -0.006051f, -0.004578f, 0.001901f, 0.001685f, -0.005802f, 0.010857f, -0.003356f, 0.003234f, -0.003473f, -0.003151f, 0.002335f, -0.000959f, -0.001879f, -0.001051f, 0.000673f, -0.003444f, -0.001604f, -0.006794f, 0.004090f, 0.003100f, -0.005362f, -0.002356f, -0.002338f, -0.005934f, 0.001897f, 0.001044f, -0.000234f, 0.001354f, 0.002233f, 0.000451f, 0.001939f, 0.006170f, -0.008732f, 0.001668f, -0.001377f, 0.005904f, 0.005052f, -0.004066f, 0.011634f, -0.007137f, -0.007577f, 0.001899f, 0.005189f, 0.003233f, -0.001327f, -0.001699f, -0.001204f, 0.001684f, 0.001931f, -0.000659f, -0.004529f, -0.003784f, -0.002390f, -0.005843f, 0.000760f, 0.003704f, 0.001135f, -0.001350f, -0.000885f, 0.007003f, 0.003098f, 0.002704f, 0.005273f, 0.001929f, 0.001999f, 0.002603f, -0.008114f, 0.006800f, 0.007275f, -0.003401f, 0.007299f, -0.004348f, -0.000931f, 0.009716f, -0.003935f, 0.004645f, 0.002835f, -0.010681f, -0.004813f, 0.008102f, -0.003113f, -0.001488f, 0.005091f, 0.003406f, 0.003633f, 0.001021f, + 0.012421f, 0.002173f, -0.003168f, 0.002838f, -0.004269f, 0.007743f, -0.002196f, -0.004164f, -0.001822f, -0.009978f, -0.003389f, -0.007332f, 0.002438f, -0.000060f, 0.002725f, -0.002894f, 0.004218f, 0.002061f, -0.000456f, 0.001364f, 0.000678f, 0.001050f, 0.001359f, -0.005229f, 0.013258f, 0.002042f, -0.004839f, 0.009914f, -0.002373f, -0.008387f, -0.009312f, 0.009169f, -0.001823f, -0.000619f, 0.005980f, 0.000787f, -0.001588f, 0.004813f, -0.000534f, 0.002848f, 0.000749f, 0.003596f, -0.001838f, 0.003916f, -0.001736f, 0.004640f, 0.006452f, 0.003722f, -0.003879f, -0.003728f, -0.001971f, 0.001999f, -0.004113f, 0.003201f, -0.001977f, 0.004002f, -0.000031f, 0.008536f, 0.001703f, 0.001968f, 0.007167f, 0.000122f, 0.005180f, 0.002485f, -0.000553f, 0.000582f, -0.005546f, 0.002641f, 0.000475f, 0.008778f, 0.003122f, 0.002903f, 0.000418f, 0.002620f, 0.009615f, -0.009019f, 0.005146f, 0.001389f, -0.005957f, -0.002643f, -0.003687f, -0.001178f, -0.003422f, 0.002461f, 0.011088f, 0.007001f, 0.008282f, 0.006599f, 0.011297f, 0.008251f, -0.010239f, -0.018558f, -0.002351f, 0.000892f, -0.004533f, 0.009809f, + -0.000421f, 0.014679f, -0.006857f, -0.006861f, 0.006309f, 0.000350f, 0.000508f, 0.005803f, -0.010736f, 0.002741f, -0.007699f, 0.010132f, 0.005947f, -0.000065f, 0.015381f, 0.000647f, -0.001520f, -0.001964f, -0.002760f, -0.003896f, 0.007244f, 0.003811f, -0.003820f, -0.001347f, -0.010806f, -0.004869f, -0.001494f, 0.011065f, 0.007602f, 0.001131f, 0.005574f, -0.000115f, 0.005929f, -0.000442f, 0.002350f, -0.007120f, 0.006326f, 0.014936f, 0.004073f, 0.000255f, 0.000040f, 0.003913f, 0.003593f, 0.000505f, 0.001976f, 0.003070f, -0.000692f, -0.000730f, 0.003931f, 0.016980f, 0.005346f, 0.013162f, -0.008163f, -0.006669f, -0.003029f, -0.008541f, -0.010029f, -0.004202f, 0.006557f, -0.012157f, -0.002155f, -0.001774f, -0.019024f, 0.003334f, -0.019223f, -0.006602f, -0.003029f, 0.004056f, -0.000489f, 0.003513f, -0.004210f, -0.000573f, -0.013191f, 0.004250f, -0.004769f, -0.007442f, 0.000732f, 0.003152f, -0.001202f, 0.000524f, 0.004768f, 0.009161f, -0.016761f, 0.003991f, 0.000428f, -0.005190f, -0.005819f, -0.001483f, 0.001518f, -0.002614f, -0.010426f, -0.002760f, 0.001882f, 0.004552f, -0.001451f, 0.011499f, + 0.000247f, -0.000031f, 0.004069f, -0.008315f, 0.010506f, 0.002965f, 0.005846f, 0.002279f, 0.004699f, -0.002029f, -0.002091f, 0.002389f, 0.000935f, -0.002777f, -0.004491f, -0.004355f, 0.009156f, 0.010002f, -0.000324f, 0.011031f, 0.000695f, -0.001460f, 0.001361f, 0.000901f, -0.002036f, -0.000134f, -0.007695f, -0.004430f, 0.006905f, 0.008065f, -0.009457f, -0.002301f, 0.003971f, -0.006365f, -0.018109f, 0.004467f, 0.006749f, 0.007833f, -0.004125f, -0.004869f, -0.006423f, 0.009830f, 0.011334f, 0.001862f, 0.004507f, -0.008940f, -0.007116f, 0.008297f, 0.003230f, -0.006736f, 0.011712f, -0.011780f, 0.002008f, 0.001003f, 0.010991f, 0.003892f, -0.002346f, 0.001650f, -0.003713f, 0.005850f, -0.014175f, -0.004379f, -0.020454f, -0.009133f, 0.010468f, -0.001056f, 0.016012f, -0.002379f, -0.013237f, 0.008200f, 0.001922f, -0.005691f, -0.000569f, 0.000368f, -0.005333f, 0.003224f, 0.009592f, 0.010404f, 0.000326f, 0.004738f, -0.000485f, 0.011770f, -0.006253f, 0.004739f, -0.001217f, -0.000889f, 0.000261f, 0.003381f, -0.001505f, 0.014151f, 0.001060f, -0.000436f, -0.003526f, 0.011660f, -0.014765f, -0.001647f, + -0.009860f, -0.010256f, 0.004295f, 0.002535f, 0.022621f, 0.001615f, 0.008618f, -0.018037f, -0.003963f, 0.004547f, -0.009147f, 0.006815f, 0.002318f, 0.002031f, 0.005872f, 0.006723f, 0.015006f, 0.006941f, -0.001832f, 0.005070f, -0.006776f, 0.002583f, 0.006338f, 0.000069f, 0.001689f, 0.006920f, 0.008809f, 0.020587f, 0.004409f, -0.002519f, -0.013288f, -0.000106f, 0.010928f, -0.015815f, 0.002281f, -0.000720f, 0.005601f, -0.007687f, -0.009145f, 0.017902f, -0.010651f, 0.004079f, -0.000222f, -0.010422f, 0.025653f, 0.006990f, 0.013675f, 0.007607f, 0.014906f, -0.002153f, -0.004962f, 0.009705f, -0.008017f, 0.007581f, -0.006304f, 0.004363f, 0.010393f, 0.006015f, -0.004032f, -0.000233f, 0.005492f, -0.008270f, -0.006136f, 0.001055f, -0.000701f, 0.015451f, -0.007904f, -0.013369f, -0.001889f, 0.008339f, 0.012601f, -0.007100f, -0.013436f, -0.001793f, -0.006504f, 0.006059f, -0.024736f, 0.013039f, 0.003368f, -0.006002f, 0.006676f, -0.020298f, -0.017095f, 0.001536f, -0.008781f, 0.018052f, 0.015888f, 0.017022f, -0.012429f, 0.006270f, -0.000423f, 0.016981f, 0.000551f, 0.011846f, 0.004273f, -0.005803f, + -0.016498f, -0.014865f, 0.003860f, -0.019620f, -0.001002f, -0.005038f, -0.009993f, -0.013268f, -0.008214f, -0.000405f, 0.014619f, -0.000453f, 0.005247f, -0.022331f, -0.012936f, -0.002815f, -0.014435f, 0.000465f, 0.012945f, -0.015299f, 0.005362f, -0.000656f, -0.005830f, -0.001846f, -0.003945f, 0.014623f, 0.007325f, 0.007063f, -0.004396f, -0.005043f, 0.019995f, -0.006727f, -0.006448f, -0.017568f, 0.011724f, -0.024752f, 0.002544f, -0.008431f, 0.003012f, 0.008204f, -0.006642f, -0.013414f, -0.008808f, 0.000442f, 0.016846f, -0.009316f, -0.002727f, -0.011920f, -0.009990f, 0.005182f, 0.005350f, 0.013320f, -0.017034f, -0.001011f, 0.003851f, 0.002059f, -0.023531f, 0.004898f, 0.001034f, 0.002617f, -0.031953f, 0.026484f, -0.000425f, -0.001798f, -0.001517f, -0.011257f, 0.002303f, -0.000878f, 0.008977f, -0.009925f, 0.010201f, 0.001891f, -0.007792f, -0.013215f, -0.015750f, 0.006148f, 0.000497f, -0.002641f, 0.000223f, -0.009971f, 0.008509f, 0.005529f, 0.016382f, 0.008749f, 0.006057f, 0.007992f, -0.002919f, -0.010942f, -0.007739f, -0.000951f, -0.005601f, 0.005858f, -0.008949f, -0.014238f, -0.014428f, -0.000805f, + -0.019495f, 0.007012f, 0.009460f, -0.013041f, 0.011148f, -0.015437f, 0.006501f, -0.021993f, 0.002391f, -0.005535f, 0.001201f, -0.007243f, -0.000522f, -0.020724f, -0.003301f, -0.008446f, -0.012010f, -0.005231f, -0.009316f, 0.000871f, -0.008300f, -0.007004f, -0.011849f, 0.003093f, -0.011192f, -0.003165f, 0.018986f, -0.005551f, 0.001244f, 0.003530f, -0.003159f, -0.021269f, -0.020075f, -0.005806f, -0.012639f, 0.001477f, 0.008685f, 0.005857f, -0.019416f, -0.000914f, 0.003237f, -0.018212f, -0.020503f, 0.010765f, -0.020101f, 0.003485f, 0.013229f, -0.010108f, -0.023023f, -0.010288f, 0.000517f, 0.014675f, -0.006146f, 0.026223f, -0.001804f, -0.002647f, -0.015360f, -0.011535f, -0.001720f, 0.004794f, 0.001641f, -0.006159f, -0.004470f, -0.001926f, -0.005556f, -0.012169f, 0.009668f, -0.010245f, -0.005547f, 0.009236f, 0.003277f, -0.017001f, -0.016858f, -0.016704f, 0.014066f, -0.015643f, -0.015468f, 0.024960f, -0.015812f, 0.010420f, -0.001760f, 0.005922f, -0.022837f, 0.009570f, 0.001953f, -0.005002f, -0.000488f, -0.005830f, 0.008282f, 0.004212f, 0.022827f, -0.006960f, -0.003337f, 0.008984f, 0.022229f, 0.004301f, + 0.005300f, -0.011735f, -0.005567f, -0.019302f, -0.002533f, -0.002285f, 0.001132f, 0.010786f, -0.002547f, 0.004762f, 0.023943f, -0.005563f, 0.001036f, -0.004745f, 0.001744f, -0.024499f, -0.022823f, 0.009320f, -0.001783f, 0.011072f, -0.001906f, -0.004961f, -0.007077f, 0.009361f, 0.005714f, -0.005519f, 0.004158f, 0.009526f, -0.005282f, -0.033284f, -0.014576f, -0.006698f, -0.003864f, 0.014565f, -0.026118f, -0.019250f, 0.015733f, 0.009656f, 0.039872f, 0.011071f, 0.009052f, 0.010787f, 0.004898f, -0.007411f, 0.000621f, -0.007802f, 0.012581f, 0.000323f, 0.012704f, 0.000131f, -0.000543f, -0.017852f, 0.008944f, -0.012210f, 0.009089f, -0.002129f, 0.009544f, 0.003536f, 0.012872f, -0.020675f, 0.002219f, -0.014465f, 0.016818f, 0.000664f, -0.017186f, 0.022115f, 0.016507f, 0.010264f, -0.010341f, -0.034756f, 0.009750f, -0.004230f, -0.004366f, 0.016246f, -0.001722f, 0.007162f, 0.016159f, -0.004273f, -0.020665f, -0.000944f, 0.009193f, 0.005129f, -0.005558f, -0.003317f, -0.015107f, 0.004403f, 0.002070f, 0.001726f, -0.002272f, 0.000297f, 0.012910f, -0.010524f, 0.005461f, -0.005519f, 0.009126f, -0.008862f, + -0.036754f, 0.008202f, 0.009688f, 0.038420f, -0.007331f, -0.005515f, 0.018523f, 0.024079f, -0.037719f, -0.021314f, 0.021575f, -0.010332f, 0.001336f, 0.009136f, -0.023783f, -0.052960f, -0.020359f, 0.030936f, 0.024830f, 0.020978f, -0.005557f, 0.011980f, -0.005580f, 0.011063f, -0.010478f, 0.004208f, -0.026315f, 0.007089f, -0.008842f, 0.014299f, 0.014141f, 0.000918f, -0.012045f, 0.013029f, 0.008647f, 0.022164f, -0.001538f, -0.013111f, -0.006001f, -0.033901f, -0.016791f, 0.008748f, -0.001554f, -0.022641f, 0.016332f, 0.021640f, -0.029509f, 0.029518f, -0.002023f, -0.003019f, 0.019194f, 0.003940f, 0.018205f, -0.002194f, 0.007042f, -0.006598f, -0.002702f, 0.008755f, 0.035833f, -0.012804f, 0.023154f, -0.002149f, 0.003001f, 0.007944f, 0.020349f, -0.018565f, 0.003090f, 0.027497f, 0.009548f, -0.014355f, 0.008729f, 0.009239f, 0.003908f, 0.019109f, 0.017517f, -0.002111f, -0.024689f, -0.006609f, 0.024800f, 0.015525f, 0.018647f, -0.012748f, -0.006461f, -0.002464f, -0.002885f, 0.026387f, 0.003269f, -0.028233f, -0.012520f, -0.009049f, 0.017607f, 0.002851f, 0.003700f, 0.014432f, 0.032928f, -0.049498f, + 0.032310f, -0.007153f, -0.005808f, -0.013379f, 0.009632f, 0.009160f, 0.019058f, 0.002118f, 0.018199f, -0.002763f, -0.004740f, 0.004698f, -0.002894f, 0.008289f, 0.016852f, 0.000948f, -0.001036f, 0.020846f, -0.016040f, -0.004168f, 0.005664f, -0.003108f, 0.019691f, -0.024078f, 0.002499f, -0.020856f, 0.003655f, -0.022106f, -0.002377f, -0.000849f, 0.011971f, 0.026459f, -0.015655f, -0.010686f, -0.016162f, -0.002769f, -0.023884f, -0.018005f, -0.015273f, 0.008967f, 0.021413f, -0.001924f, 0.041454f, -0.027785f, 0.037399f, -0.027812f, -0.004092f, 0.008315f, 0.010328f, 0.032563f, 0.023161f, -0.029785f, 0.017381f, -0.014289f, -0.031717f, -0.001599f, -0.022745f, -0.013655f, 0.002072f, 0.033315f, -0.003376f, 0.016142f, 0.031162f, -0.021672f, 0.012998f, -0.036172f, 0.025933f, -0.021242f, -0.009045f, 0.039926f, 0.015272f, 0.042845f, -0.014691f, 0.002730f, -0.015715f, 0.014130f, 0.054387f, 0.015755f, 0.020159f, -0.023726f, -0.002408f, 0.003735f, 0.022565f, 0.020054f, 0.035804f, -0.024528f, -0.006706f, -0.026908f, -0.022207f, 0.004289f, 0.004749f, 0.019819f, -0.014250f, 0.014609f, -0.037074f, 0.027426f, + 0.021774f, 0.011443f, -0.003915f, -0.002280f, 0.005469f, 0.014293f, 0.006845f, 0.005777f, 0.002770f, 0.029538f, 0.026252f, 0.012474f, 0.005174f, -0.018081f, -0.017040f, 0.058365f, 0.005320f, 0.009412f, 0.034519f, 0.016223f, -0.005375f, -0.004178f, 0.023417f, 0.042660f, -0.025449f, -0.009810f, -0.028964f, -0.028281f, 0.043567f, 0.019812f, 0.004881f, -0.005745f, 0.017955f, 0.031581f, 0.024633f, 0.031633f, 0.015033f, -0.011816f, 0.001059f, -0.001687f, 0.011638f, -0.026457f, -0.020011f, -0.007958f, -0.024839f, 0.027059f, -0.003687f, -0.007199f, -0.023758f, -0.004031f, -0.022204f, -0.053432f, 0.008530f, -0.006654f, -0.017581f, 0.012006f, -0.029073f, -0.001708f, -0.016295f, -0.042668f, -0.010678f, -0.018428f, -0.021171f, 0.034306f, -0.010112f, -0.012116f, -0.007226f, -0.000521f, -0.009724f, -0.011740f, -0.003040f, 0.009389f, 0.027749f, 0.022217f, -0.002022f, -0.001181f, -0.049738f, 0.003528f, 0.005329f, 0.020511f, -0.012542f, -0.009380f, 0.072175f, -0.011874f, -0.037425f, -0.034112f, 0.029001f, -0.019525f, 0.007231f, -0.040436f, 0.008663f, -0.010558f, -0.023884f, -0.018022f, -0.048919f, 0.008790f, + 0.011630f, 0.034804f, 0.007846f, -0.016772f, 0.024254f, 0.004563f, 0.022515f, 0.029099f, 0.076995f, 0.022849f, 0.002667f, -0.029450f, -0.037973f, -0.007979f, -0.000340f, -0.003474f, -0.036749f, 0.013971f, 0.028082f, 0.006684f, -0.010287f, -0.031769f, -0.013490f, -0.004642f, 0.010346f, -0.011435f, 0.019571f, -0.009635f, -0.012657f, 0.037367f, 0.019820f, 0.042436f, 0.001100f, -0.012034f, -0.016058f, 0.044938f, -0.037794f, -0.014152f, 0.052870f, -0.031332f, 0.011139f, 0.011017f, 0.014287f, 0.003201f, 0.030119f, -0.009036f, 0.027226f, -0.009915f, 0.006642f, 0.006396f, -0.012667f, 0.019685f, -0.028761f, -0.020637f, -0.018276f, -0.008824f, -0.025354f, -0.048662f, -0.007745f, -0.014562f, 0.008927f, -0.012539f, -0.063458f, 0.017989f, 0.041960f, -0.002351f, -0.007258f, 0.063605f, -0.077334f, -0.017066f, 0.045519f, -0.010786f, 0.035773f, -0.025068f, -0.013783f, 0.011837f, -0.073319f, 0.024339f, -0.023580f, 0.037635f, 0.029829f, -0.039943f, 0.081314f, 0.011724f, 0.006798f, -0.003927f, 0.033996f, -0.056930f, 0.026636f, -0.002418f, -0.005322f, 0.015718f, -0.032467f, 0.052925f, 0.052943f, -0.086409f, + 0.018374f, 0.017285f, 0.004324f, 0.050221f, -0.019756f, -0.060392f, -0.060648f, 0.006893f, 0.009625f, -0.025536f, 0.018187f, -0.032814f, 0.013030f, -0.013780f, 0.034033f, 0.043225f, 0.003207f, 0.041907f, 0.038138f, -0.018108f, 0.001354f, -0.023713f, -0.004607f, -0.003947f, 0.015880f, -0.000393f, -0.002101f, -0.002153f, -0.039889f, -0.060969f, -0.023503f, 0.035215f, 0.027399f, -0.024823f, -0.029265f, 0.020539f, 0.020387f, -0.038713f, 0.022683f, -0.024911f, -0.003118f, 0.034276f, 0.046144f, 0.002860f, -0.024134f, 0.019514f, 0.005430f, 0.030200f, 0.006870f, 0.025725f, 0.025843f, -0.003834f, -0.088333f, 0.013215f, 0.004628f, 0.039697f, -0.011017f, 0.040545f, 0.039426f, -0.021444f, -0.120180f, -0.012970f, 0.007632f, -0.011080f, 0.076529f, 0.081271f, 0.056924f, 0.081013f, -0.016747f, 0.040533f, -0.026890f, 0.056079f, 0.039920f, -0.055580f, 0.081100f, -0.073835f, -0.061524f, -0.056180f, -0.046284f, -0.089462f, 0.021587f, 0.036191f, -0.002675f, 0.048894f, 0.020063f, -0.055500f, -0.012379f, 0.014742f, 0.016463f, 0.018401f, -0.009501f, 0.029332f, 0.004476f, -0.014747f, -0.005743f, 0.012124f, + 0.040354f, 0.052428f, 0.039821f, 0.062397f, -0.055293f, -0.013260f, -0.012751f, -0.056037f, -0.011935f, 0.012897f, 0.005155f, 0.009377f, -0.021257f, -0.023612f, 0.032056f, 0.070098f, -0.029599f, 0.037672f, -0.020485f, 0.012089f, -0.018702f, -0.000444f, -0.050102f, -0.015849f, -0.000720f, -0.069224f, -0.040095f, -0.067596f, -0.057567f, 0.043171f, 0.095986f, 0.078227f, 0.004660f, -0.001048f, 0.002798f, -0.013075f, -0.029539f, -0.109611f, -0.035172f, -0.012297f, 0.012163f, 0.008963f, -0.036961f, -0.023749f, 0.018020f, 0.054307f, 0.033379f, 0.020597f, 0.036619f, 0.060628f, 0.026398f, -0.051358f, 0.048070f, -0.028496f, -0.011179f, 0.037739f, 0.082568f, 0.019781f, 0.102890f, -0.039345f, -0.064266f, 0.039385f, -0.006407f, -0.038970f, 0.018507f, 0.041733f, 0.036263f, -0.075167f, -0.064766f, 0.015779f, -0.030131f, 0.007271f, 0.036521f, -0.020314f, -0.014721f, 0.060053f, 0.016398f, -0.008895f, -0.019236f, -0.017665f, 0.022742f, -0.014131f, -0.002603f, -0.002330f, -0.024528f, -0.010094f, -0.040848f, -0.055160f, 0.019646f, 0.029150f, -0.034256f, 0.024523f, 0.017464f, -0.012598f, -0.023627f, 0.002954f, + 0.043444f, 0.024070f, 0.008134f, -0.043952f, -0.047856f, -0.024357f, 0.013511f, 0.053166f, -0.039979f, -0.022368f, -0.017830f, 0.031301f, 0.087723f, 0.022017f, -0.084433f, -0.020017f, -0.009218f, 0.042566f, 0.001876f, 0.021400f, -0.010136f, -0.021553f, -0.017772f, -0.049697f, 0.046161f, 0.045988f, 0.020549f, 0.048522f, -0.014232f, 0.030487f, -0.013350f, -0.038751f, -0.038223f, -0.045908f, 0.009946f, -0.084179f, 0.087300f, -0.008957f, -0.028060f, -0.052740f, 0.058778f, 0.042474f, 0.012224f, 0.003122f, 0.024225f, 0.021262f, -0.050837f, -0.070506f, 0.015235f, 0.043268f, 0.064897f, -0.006278f, -0.022501f, -0.051313f, -0.032741f, 0.023248f, -0.007405f, -0.044869f, -0.083340f, -0.083602f, 0.009593f, -0.029973f, 0.036446f, -0.095383f, -0.035853f, 0.010191f, 0.006057f, 0.009764f, -0.034703f, 0.005708f, -0.009136f, -0.023821f, -0.010108f, -0.048788f, 0.031419f, 0.039865f, 0.028169f, -0.063339f, -0.036883f, -0.008894f, 0.011853f, 0.020442f, 0.022893f, 0.016353f, -0.013624f, -0.011879f, -0.015000f, 0.031946f, 0.103339f, 0.061870f, -0.065485f, -0.065143f, -0.044037f, -0.081695f, 0.078072f, 0.037270f, + -0.035102f, -0.084848f, -0.081416f, 0.073546f, 0.041860f, 0.001640f, 0.054211f, -0.075854f, -0.017256f, -0.005952f, -0.027597f, -0.003932f, -0.035982f, -0.077577f, 0.004259f, -0.061977f, 0.054680f, 0.054186f, -0.040136f, -0.019138f, -0.017077f, -0.022412f, 0.044120f, -0.070179f, 0.062505f, 0.092193f, 0.099585f, -0.110691f, 0.020962f, -0.002442f, -0.009231f, 0.048417f, -0.019890f, -0.031972f, 0.032932f, 0.017953f, 0.068006f, -0.005588f, -0.053731f, 0.003033f, -0.024588f, 0.041600f, -0.061909f, -0.020315f, -0.029254f, -0.039522f, 0.056084f, -0.039537f, -0.006258f, 0.040624f, 0.022068f, -0.011833f, -0.022142f, -0.055870f, 0.006821f, 0.078155f, 0.045640f, -0.001193f, 0.021825f, -0.015024f, 0.061292f, -0.039700f, 0.027742f, -0.020848f, 0.037565f, 0.066566f, -0.015418f, -0.039287f, 0.019362f, -0.054399f, 0.092903f, 0.013578f, -0.051365f, -0.014544f, -0.079431f, 0.012556f, 0.110254f, -0.017718f, -0.067241f, -0.043289f, 0.066990f, 0.023061f, -0.037446f, 0.000712f, 0.016250f, 0.040859f, 0.092883f, -0.074573f, 0.033207f, 0.079092f, -0.012288f, -0.089769f, -0.088242f, -0.051000f, 0.155871f, -0.113314f, + 0.041259f, -0.113476f, -0.041612f, 0.040193f, -0.105279f, 0.017998f, -0.094601f, 0.041210f, 0.044283f, 0.087600f, 0.038692f, 0.019722f, 0.022783f, -0.027936f, -0.067539f, -0.047343f, -0.044406f, 0.018333f, 0.010790f, -0.012041f, 0.040100f, 0.061500f, -0.027914f, -0.039629f, 0.043023f, 0.007019f, -0.057522f, -0.013890f, 0.025968f, -0.048094f, -0.008396f, 0.009741f, 0.024133f, 0.012104f, 0.034158f, 0.057715f, 0.010396f, -0.038114f, -0.004214f, 0.010432f, -0.029502f, -0.014111f, 0.027512f, -0.021671f, -0.037318f, 0.051259f, -0.012355f, -0.013876f, -0.020491f, -0.021489f, 0.034142f, 0.007611f, 0.008092f, 0.043999f, -0.021117f, -0.035855f, -0.001561f, 0.002261f, -0.014243f, 0.010401f, -0.001878f, -0.013528f, -0.001604f, -0.045028f, 0.010493f, 0.007431f, -0.006678f, 0.022488f, 0.016837f, 0.007144f, 0.011537f, -0.046350f, 0.054719f, -0.020941f, -0.018264f, 0.016024f, -0.047920f, 0.016707f, -0.035958f, 0.008640f, -0.047856f, 0.079735f, -0.003143f, 0.045509f, -0.039544f, 0.005878f, -0.006360f, 0.014939f, 0.013734f, 0.024742f, -0.011204f, 0.018404f, -0.009916f, 0.010480f, -0.000712f, 0.008433f, + 0.020081f, -0.001619f, 0.030576f, -0.011136f, 0.023388f, 0.001861f, 0.000183f, -0.007672f, 0.015417f, -0.010720f, 0.014061f, -0.006972f, 0.002098f, -0.005705f, 0.008279f, -0.004577f, 0.018020f, -0.004700f, -0.010476f, 0.027389f, -0.017290f, 0.014529f, 0.012653f, 0.004573f, 0.014402f, -0.016081f, -0.010036f, 0.012700f, 0.012988f, -0.006936f, -0.000058f, 0.013427f, 0.000357f, -0.018126f, 0.009659f, -0.009165f, 0.011081f, 0.012868f, 0.007731f, 0.004391f, 0.005920f, -0.019812f, 0.011514f, 0.005395f, -0.004004f, 0.006941f, -0.007227f, 0.004084f, -0.002424f, -0.001490f, -0.000126f, 0.006089f, 0.015854f, -0.019492f, 0.019256f, -0.004699f, -0.003341f, 0.007466f, -0.009272f, 0.003263f, 0.012431f, -0.003385f, 0.019973f, -0.066082f, -0.206808f, -0.030069f, 0.100934f, 0.052444f, 0.244841f, 0.045894f, 0.052877f, 0.033523f, -0.065590f, -0.092332f, -0.065834f, -0.118474f, -0.101966f, -0.057505f, -0.023548f, 0.068565f, 0.185925f, 0.147805f, 0.127069f, 0.072641f, -0.056968f, -0.092455f, -0.068262f, -0.127605f, -0.121246f, -0.036659f, -0.016908f, -0.027752f, 0.047177f, 0.074197f, 0.048781f, 0.090372f, + 0.069445f, 0.021856f, 0.063866f, 0.013653f, -0.009449f, 0.006546f, -0.038448f, -0.100523f, -0.086034f, -0.072407f, -0.102612f, -0.042244f, 0.029937f, 0.021351f, 0.065647f, 0.075157f, 0.064950f, 0.067527f, 0.068066f, 0.044016f, 0.042137f, 0.005483f, -0.037965f, -0.069837f, -0.048398f, -0.065653f, -0.088126f, -0.042376f, -0.040488f, -0.031858f, 0.012361f, 0.034471f, 0.031877f, 0.063377f, 0.077735f, 0.038873f, 0.054860f, 0.048165f, -0.012849f, 0.006943f, 0.021269f, -0.024280f, -0.024220f, -0.036967f, -0.033727f, -0.018175f} + }, + { + {0.002918f, 0.005029f, 0.000714f, 0.002853f, 0.006330f, -0.001978f, 0.006738f, 0.001745f, 0.001243f, -0.007809f, -0.001932f, -0.007740f, -0.000934f, 0.007770f, 0.005638f, -0.000557f, 0.003545f, -0.001114f, 0.002949f, -0.000970f, 0.003689f, 0.003121f, 0.003992f, 0.009549f, 0.004008f, -0.007040f, -0.000639f, -0.007973f, 0.004108f, 0.002956f, -0.001205f, 0.000809f, 0.000887f, -0.001728f, -0.002500f, 0.004773f, -0.002182f, 0.001543f, 0.004268f, -0.004246f, 0.007171f, -0.001680f, -0.000003f, 0.003410f, -0.001536f, 0.001121f, 0.000808f, 0.003604f, 0.005625f, 0.000110f, 0.000861f, -0.002056f, -0.000272f, 0.000339f, -0.003171f, -0.003005f, 0.003559f, 0.009655f, -0.000884f, -0.005397f, -0.004841f, 0.003040f, 0.004768f, 0.005496f, 0.003106f, 0.007846f, 0.000459f, 0.005688f, -0.004512f, -0.002993f, 0.003590f, -0.001157f, 0.004790f, -0.000295f, -0.001576f, 0.002565f, -0.006599f, 0.005035f, 0.003170f, -0.006503f, -0.001134f, 0.008382f, 0.002490f, 0.002101f, 0.004612f, -0.001045f, 0.001265f, -0.002123f, -0.008725f, -0.003379f, -0.000435f, -0.001870f, 0.002503f, -0.002642f, -0.000856f, -0.007330f, + -0.000023f, 0.001341f, -0.005238f, -0.001066f, -0.006612f, -0.002270f, -0.002127f, -0.007898f, -0.003695f, 0.002622f, 0.003439f, 0.009026f, 0.005250f, 0.011511f, -0.001288f, -0.001769f, 0.001619f, -0.003843f, 0.009871f, 0.000686f, 0.004626f, 0.007978f, 0.001311f, -0.003080f, 0.003146f, -0.004095f, -0.005677f, -0.001291f, -0.002507f, -0.002980f, -0.010427f, -0.003223f, -0.000051f, 0.001737f, 0.002978f, 0.000989f, 0.005143f, -0.005734f, 0.004520f, 0.000093f, 0.001033f, 0.003412f, -0.004203f, -0.009001f, -0.004062f, 0.004024f, 0.005586f, 0.004462f, 0.000249f, 0.004539f, 0.003250f, 0.006112f, 0.002961f, 0.002663f, -0.003915f, 0.000272f, -0.000241f, -0.004951f, 0.004395f, -0.007530f, -0.004684f, 0.011697f, -0.002076f, 0.010320f, -0.005516f, 0.000850f, 0.005038f, 0.002137f, 0.000201f, -0.007214f, -0.010130f, -0.010594f, 0.000982f, 0.000091f, -0.003087f, 0.001235f, -0.009357f, 0.018188f, 0.001946f, -0.010401f, 0.002591f, -0.005539f, -0.005953f, 0.005291f, 0.007668f, -0.000308f, 0.001636f, 0.003525f, -0.000676f, -0.000158f, 0.006008f, -0.003554f, -0.001597f, 0.000161f, 0.011039f, -0.000430f, + -0.001394f, -0.004423f, -0.006665f, 0.003212f, -0.001702f, -0.006979f, -0.003123f, -0.008363f, 0.001027f, -0.007615f, 0.000112f, -0.005833f, -0.001890f, -0.005170f, -0.010257f, -0.004461f, -0.000665f, 0.009367f, 0.001412f, -0.003093f, 0.005270f, 0.008517f, 0.001361f, -0.012380f, 0.005592f, -0.000408f, 0.002326f, 0.003539f, -0.002689f, 0.007161f, -0.003653f, -0.007351f, -0.006890f, -0.013219f, 0.001470f, -0.005099f, -0.004044f, -0.006708f, -0.009669f, 0.014989f, -0.004304f, -0.014464f, 0.000656f, 0.004333f, 0.000036f, 0.003950f, 0.003201f, -0.011569f, 0.003574f, -0.003062f, -0.000832f, -0.000033f, -0.002404f, 0.007981f, -0.002986f, -0.006009f, -0.000843f, 0.006258f, 0.003910f, 0.001989f, 0.003635f, 0.015881f, 0.003992f, -0.006186f, 0.007081f, -0.007443f, 0.001948f, -0.006130f, 0.015113f, 0.001810f, -0.005345f, -0.003640f, -0.005352f, -0.002379f, 0.009933f, -0.008828f, -0.007197f, -0.002773f, 0.008184f, 0.004168f, -0.008141f, 0.001498f, 0.001480f, -0.005340f, -0.000058f, -0.017589f, 0.005315f, -0.004680f, -0.003487f, -0.011501f, 0.015890f, 0.000024f, -0.008693f, -0.007547f, -0.008530f, -0.000337f, + -0.002041f, -0.000123f, -0.000300f, -0.010781f, 0.012553f, -0.008385f, -0.006869f, 0.003831f, 0.001135f, 0.003701f, -0.003825f, -0.002203f, -0.008117f, -0.000883f, 0.001450f, -0.011808f, -0.007843f, -0.001377f, 0.013389f, 0.000399f, 0.002892f, -0.011107f, 0.003407f, 0.006342f, 0.004651f, -0.000497f, -0.005552f, 0.014373f, 0.002516f, -0.002915f, 0.006928f, 0.005598f, -0.006717f, 0.008775f, -0.005913f, 0.014500f, 0.002093f, 0.012929f, -0.001386f, 0.002217f, -0.005061f, -0.014799f, 0.001632f, 0.000211f, 0.000548f, -0.002642f, 0.003075f, 0.007663f, -0.001901f, -0.007674f, -0.004951f, -0.010876f, -0.002917f, -0.005429f, -0.005628f, 0.000844f, 0.003765f, 0.005681f, -0.006849f, 0.004654f, -0.004561f, -0.005931f, -0.000710f, 0.004739f, 0.000993f, 0.001014f, -0.010680f, -0.010597f, -0.001897f, -0.003320f, -0.007791f, 0.016864f, 0.008017f, -0.001370f, 0.003367f, 0.006572f, -0.017219f, -0.009082f, 0.011645f, -0.006834f, 0.010917f, 0.002055f, -0.002231f, -0.012055f, -0.008544f, 0.013272f, 0.007294f, 0.012446f, -0.013749f, -0.001645f, -0.009623f, -0.001600f, 0.003108f, -0.006126f, 0.000815f, 0.001331f, + -0.022524f, 0.001244f, -0.002855f, 0.006152f, -0.013611f, 0.004408f, -0.004560f, 0.022852f, -0.006005f, -0.011783f, -0.004280f, -0.009879f, 0.003140f, 0.008506f, -0.002652f, 0.015982f, 0.001684f, -0.004670f, 0.003896f, 0.001979f, 0.004208f, -0.005615f, -0.000940f, 0.005971f, 0.009418f, 0.003741f, -0.001809f, 0.004529f, -0.008297f, -0.002571f, 0.011836f, 0.008454f, 0.013890f, 0.009848f, -0.000162f, -0.006994f, -0.014670f, 0.010217f, -0.001535f, -0.010710f, 0.005664f, -0.002797f, -0.016427f, 0.000478f, -0.013675f, -0.001044f, 0.012545f, -0.002062f, -0.009153f, -0.004209f, 0.012001f, -0.010244f, -0.016739f, 0.017181f, -0.003091f, -0.004090f, 0.004160f, 0.002251f, 0.002191f, 0.004204f, 0.004308f, 0.002378f, -0.012219f, -0.004607f, 0.009840f, -0.001164f, -0.003405f, 0.003063f, 0.016821f, -0.008164f, -0.008720f, -0.003931f, 0.007333f, 0.003756f, -0.013911f, -0.006107f, -0.019650f, -0.000280f, 0.005430f, 0.019194f, 0.019824f, -0.006202f, 0.009938f, -0.012521f, 0.004298f, 0.008519f, 0.012776f, -0.003541f, 0.019096f, -0.003422f, 0.016214f, -0.008648f, 0.013602f, -0.006630f, -0.022304f, -0.004945f, + 0.005715f, -0.007592f, 0.008769f, -0.004708f, -0.005278f, 0.002574f, -0.024473f, -0.007799f, -0.000407f, -0.004126f, -0.001382f, -0.011733f, -0.004012f, -0.004093f, 0.003995f, 0.025201f, 0.014523f, -0.014426f, 0.008043f, 0.020182f, 0.005039f, -0.006885f, 0.005058f, -0.005145f, -0.005910f, 0.014567f, 0.010087f, -0.009889f, -0.001306f, 0.010426f, 0.021528f, -0.006777f, 0.011717f, 0.032050f, 0.013745f, -0.014567f, 0.005945f, 0.003846f, -0.017791f, 0.002797f, -0.014721f, 0.006695f, -0.016059f, -0.003647f, 0.000591f, 0.007691f, -0.010553f, -0.002781f, -0.005325f, -0.009401f, 0.012075f, 0.010625f, -0.000870f, -0.006918f, 0.001435f, 0.008229f, -0.004772f, -0.020490f, 0.004167f, -0.016555f, 0.002149f, -0.005801f, 0.020358f, -0.011034f, 0.002497f, 0.004997f, 0.001631f, 0.007074f, -0.003484f, 0.022290f, 0.001365f, -0.015245f, -0.003161f, -0.011368f, -0.002151f, -0.004023f, -0.010592f, -0.013278f, -0.003676f, -0.008721f, -0.004277f, 0.014092f, 0.005044f, -0.012789f, 0.004443f, -0.015178f, -0.003141f, 0.010236f, -0.020417f, -0.018182f, 0.009754f, 0.009020f, 0.004591f, -0.001052f, -0.012501f, 0.004390f, + -0.006309f, -0.011946f, -0.005606f, 0.000204f, 0.003375f, 0.018659f, -0.007772f, -0.002546f, 0.000770f, 0.008521f, 0.004459f, -0.006950f, -0.008730f, -0.015603f, -0.004853f, -0.003671f, -0.008579f, -0.010047f, 0.006097f, 0.012548f, -0.000195f, -0.008271f, 0.013990f, 0.002662f, -0.007063f, 0.001784f, -0.002157f, -0.001648f, -0.004959f, -0.002381f, 0.009017f, -0.006637f, -0.011186f, -0.005172f, 0.005016f, -0.005918f, 0.010531f, 0.019916f, -0.014552f, -0.000389f, 0.013675f, -0.006337f, -0.009427f, 0.012462f, -0.019274f, -0.001133f, 0.003891f, -0.002502f, -0.006984f, -0.008581f, -0.003810f, 0.003375f, -0.000701f, 0.009323f, 0.005083f, -0.003179f, -0.007046f, -0.005508f, 0.015811f, 0.000502f, -0.018370f, 0.008649f, -0.011431f, -0.011817f, 0.007649f, 0.013377f, 0.014342f, 0.010284f, 0.000221f, 0.006857f, 0.005406f, 0.006432f, -0.005553f, -0.000601f, -0.004914f, -0.013868f, 0.006378f, -0.003850f, -0.000024f, -0.003374f, 0.002075f, -0.002661f, 0.015763f, 0.027383f, 0.005428f, -0.005327f, 0.000808f, -0.020429f, 0.020242f, -0.014147f, -0.007801f, -0.013684f, -0.014927f, 0.026379f, 0.002614f, -0.015784f, + -0.004234f, 0.017874f, 0.010938f, -0.015022f, -0.009158f, 0.020468f, 0.003288f, 0.001196f, 0.029411f, -0.014318f, 0.009571f, -0.011113f, -0.025158f, 0.011642f, 0.016124f, 0.000874f, -0.011383f, 0.008644f, 0.011252f, 0.021463f, 0.019606f, -0.001541f, 0.016615f, 0.007052f, 0.016960f, 0.016332f, -0.029080f, 0.009537f, -0.009880f, -0.013023f, -0.009651f, -0.003434f, -0.018789f, -0.004550f, 0.003737f, -0.016236f, -0.032446f, 0.006494f, -0.002917f, -0.029388f, -0.021681f, -0.019525f, -0.011150f, 0.000233f, -0.006050f, 0.006003f, -0.004451f, 0.010576f, 0.021517f, -0.013511f, 0.006877f, -0.005809f, -0.010836f, -0.008221f, 0.000684f, -0.003008f, -0.001589f, 0.015690f, -0.001355f, 0.015813f, 0.020920f, 0.005590f, 0.008622f, 0.013422f, -0.002551f, 0.002009f, -0.022004f, 0.019034f, -0.018077f, -0.007034f, -0.006235f, 0.000836f, -0.005509f, -0.017542f, -0.015334f, -0.033028f, 0.028323f, -0.033743f, -0.032483f, 0.004345f, 0.029704f, 0.009753f, -0.004719f, -0.008755f, 0.013196f, -0.016511f, 0.016666f, -0.006307f, 0.001312f, 0.000555f, -0.012638f, 0.010890f, -0.014915f, -0.012605f, 0.003302f, 0.014052f, + 0.018109f, 0.018054f, 0.019651f, 0.045146f, 0.020779f, 0.026101f, -0.011699f, 0.041812f, -0.022611f, 0.001815f, 0.009946f, 0.000483f, -0.014564f, 0.005788f, -0.003356f, -0.034410f, 0.014219f, -0.008207f, 0.004720f, -0.002679f, -0.010638f, 0.000610f, 0.011418f, -0.013582f, -0.006334f, -0.001653f, 0.009276f, -0.020844f, 0.014601f, 0.005631f, -0.018522f, -0.001034f, 0.009088f, -0.017279f, 0.007772f, -0.020839f, 0.010971f, -0.001392f, -0.005725f, -0.000417f, -0.012723f, 0.018277f, 0.022356f, -0.019798f, -0.010281f, 0.009474f, -0.005915f, 0.005925f, 0.006392f, 0.001619f, 0.001996f, 0.024621f, -0.004809f, -0.016127f, 0.016478f, -0.000491f, -0.011442f, -0.010711f, -0.018852f, 0.003909f, 0.006966f, 0.010048f, 0.011180f, -0.009567f, -0.014306f, 0.008467f, 0.005821f, 0.029940f, 0.004554f, -0.004651f, 0.001937f, 0.000630f, -0.008227f, -0.006525f, -0.023674f, -0.026634f, 0.045280f, 0.031699f, 0.040499f, 0.002911f, -0.025532f, 0.009447f, 0.021249f, 0.015304f, -0.006336f, -0.015957f, -0.004570f, -0.005622f, -0.007703f, -0.013669f, -0.005434f, -0.011411f, 0.030178f, 0.005197f, 0.005127f, 0.000638f, + 0.001907f, 0.003602f, -0.010944f, 0.020271f, 0.011332f, -0.000756f, 0.007324f, -0.002395f, 0.020517f, 0.004202f, -0.001742f, -0.032985f, -0.002427f, 0.002542f, 0.003209f, -0.005817f, 0.004182f, -0.015391f, 0.027108f, 0.022419f, 0.021162f, 0.018953f, -0.014636f, -0.019723f, 0.015359f, 0.005194f, 0.007422f, -0.000909f, -0.023643f, -0.016569f, 0.001139f, -0.012845f, -0.000105f, -0.010747f, -0.005147f, 0.014417f, 0.004109f, -0.009745f, 0.003158f, -0.025684f, 0.000271f, -0.043783f, -0.022981f, -0.041432f, 0.035115f, 0.032360f, 0.033564f, 0.041711f, 0.019026f, -0.007255f, -0.020249f, -0.006283f, -0.003614f, 0.004852f, 0.027538f, -0.015721f, -0.021218f, 0.019149f, 0.024835f, -0.011864f, 0.023097f, 0.003403f, -0.009376f, 0.009343f, -0.032728f, -0.010102f, 0.009676f, -0.010392f, -0.019899f, -0.038082f, 0.019171f, -0.016304f, 0.004843f, 0.024854f, 0.006390f, 0.028951f, 0.022556f, 0.012630f, 0.005245f, -0.016977f, -0.004464f, -0.008866f, 0.002133f, 0.016120f, 0.008985f, 0.003355f, 0.014366f, 0.039267f, -0.001365f, -0.033354f, -0.013928f, 0.005404f, 0.008786f, -0.001907f, 0.001652f, 0.003158f, + -0.013357f, 0.000871f, -0.030473f, 0.007055f, -0.031856f, -0.011996f, -0.024368f, 0.012513f, -0.011535f, -0.020895f, 0.033111f, 0.008922f, 0.003950f, -0.014350f, -0.017644f, 0.004769f, 0.009181f, 0.002813f, 0.012145f, -0.016273f, 0.037770f, -0.043456f, 0.013491f, -0.018069f, -0.023943f, -0.014702f, 0.025611f, 0.006994f, -0.021457f, 0.017643f, -0.015734f, 0.048485f, 0.000574f, -0.005234f, -0.016114f, 0.002016f, 0.045347f, 0.046662f, 0.044014f, 0.009310f, -0.011914f, -0.007482f, -0.028498f, 0.022964f, 0.000599f, 0.013426f, -0.008579f, 0.004235f, -0.010463f, -0.008115f, -0.016500f, 0.008752f, -0.017175f, 0.027965f, -0.073388f, -0.021483f, 0.000466f, -0.022325f, 0.015703f, -0.022949f, 0.004637f, -0.008961f, 0.023010f, 0.003950f, 0.022151f, 0.001450f, -0.005285f, -0.000521f, 0.008083f, -0.025859f, -0.018496f, -0.020160f, -0.002867f, 0.024818f, -0.049355f, 0.016921f, 0.042857f, 0.005072f, -0.031589f, -0.001454f, -0.026610f, -0.025701f, 0.017612f, -0.003572f, -0.021744f, 0.011823f, 0.001773f, -0.008358f, -0.012303f, 0.006739f, 0.017792f, 0.010529f, -0.025265f, -0.018742f, 0.014371f, 0.021383f, + -0.017826f, -0.023865f, 0.011473f, 0.023910f, -0.029754f, -0.001545f, -0.026631f, -0.036916f, 0.042913f, -0.007935f, 0.006240f, -0.009050f, 0.026020f, -0.007579f, 0.005062f, -0.016107f, 0.018788f, -0.011349f, -0.003625f, -0.038003f, -0.019257f, -0.010983f, -0.032663f, -0.045663f, -0.010889f, -0.017210f, 0.037362f, 0.009163f, 0.056966f, 0.007873f, -0.020117f, 0.004954f, 0.008438f, -0.051910f, -0.000129f, 0.039984f, 0.024352f, -0.031513f, 0.000959f, 0.018462f, -0.042276f, -0.009339f, -0.022658f, 0.013653f, -0.018396f, 0.007936f, -0.000345f, -0.010866f, -0.000901f, -0.003224f, -0.015701f, 0.010241f, -0.029797f, -0.013627f, -0.014588f, -0.036771f, -0.010196f, -0.007701f, -0.002659f, -0.000921f, -0.012379f, -0.013954f, 0.057880f, 0.014945f, -0.027093f, -0.046821f, -0.019096f, 0.000782f, 0.040745f, -0.014422f, -0.009297f, -0.028526f, -0.010220f, -0.021326f, 0.032523f, -0.033554f, 0.028498f, 0.036755f, -0.045415f, 0.022927f, 0.006195f, -0.022248f, -0.019999f, 0.005101f, 0.014598f, -0.095673f, -0.016897f, -0.005816f, -0.017786f, 0.017707f, -0.018279f, -0.074171f, -0.033625f, -0.026002f, -0.012862f, 0.010160f, + 0.060116f, -0.001940f, -0.069988f, -0.039394f, -0.043225f, -0.008369f, -0.023789f, -0.001305f, -0.035323f, 0.058012f, 0.035016f, -0.006645f, 0.046290f, 0.000910f, 0.049946f, 0.011376f, -0.028038f, -0.039488f, -0.023951f, -0.032015f, -0.013370f, 0.007035f, 0.022094f, -0.007658f, 0.007815f, -0.026706f, 0.005348f, -0.038247f, -0.002393f, -0.003001f, 0.013946f, -0.014975f, 0.061170f, 0.006783f, -0.000287f, 0.038792f, -0.014079f, -0.029304f, -0.015072f, 0.023277f, -0.000254f, -0.017210f, 0.008425f, -0.001455f, 0.052918f, 0.011311f, 0.002184f, -0.021150f, -0.028615f, -0.079224f, 0.007415f, -0.063281f, 0.033897f, 0.104550f, -0.072998f, -0.017776f, 0.020225f, -0.014673f, -0.010023f, -0.022899f, 0.021388f, -0.023500f, -0.069306f, -0.021213f, -0.068667f, -0.017025f, 0.002804f, -0.047532f, -0.000950f, -0.067549f, 0.034863f, -0.007906f, -0.034817f, 0.102504f, 0.015530f, 0.044020f, -0.022680f, -0.124197f, -0.013700f, -0.032375f, -0.035345f, 0.044084f, 0.034814f, -0.044084f, -0.034997f, 0.083867f, -0.010419f, 0.026630f, 0.003556f, -0.005288f, -0.010581f, -0.010074f, -0.028321f, -0.001171f, 0.008981f, 0.014304f, + 0.009446f, 0.029417f, -0.024589f, -0.001451f, -0.023981f, -0.014691f, 0.008601f, 0.042098f, 0.026840f, 0.037071f, 0.033259f, -0.008517f, 0.011540f, 0.019545f, -0.000725f, -0.035707f, -0.007116f, 0.047384f, -0.009408f, -0.069797f, -0.031143f, 0.006694f, -0.059184f, -0.026123f, -0.060633f, -0.041986f, -0.038185f, 0.054474f, 0.037055f, -0.012847f, 0.037086f, 0.013756f, 0.052631f, 0.035108f, 0.016388f, -0.094737f, -0.021784f, 0.003520f, -0.083412f, -0.061075f, -0.024026f, -0.016647f, -0.097578f, 0.020369f, 0.052659f, 0.071370f, 0.085093f, -0.029109f, -0.056863f, -0.000603f, -0.057333f, -0.041750f, -0.079204f, -0.086684f, -0.062063f, -0.051293f, 0.058779f, -0.035244f, -0.089411f, 0.039011f, 0.007432f, -0.059813f, 0.061667f, 0.032200f, 0.021063f, -0.010630f, -0.053201f, -0.011008f, 0.004660f, 0.057888f, 0.075739f, 0.007470f, 0.022669f, 0.007954f, 0.005278f, -0.000151f, 0.012842f, -0.027133f, 0.105424f, 0.027939f, -0.030429f, -0.030083f, -0.011877f, 0.007922f, 0.053074f, -0.020795f, -0.004578f, 0.003483f, 0.028361f, -0.020816f, 0.016382f, 0.005256f, -0.002609f, -0.080997f, -0.023447f, 0.030754f, + 0.046909f, 0.019242f, -0.006347f, -0.020687f, -0.052729f, -0.002346f, 0.012268f, -0.009479f, 0.004143f, -0.010738f, -0.032793f, 0.040136f, -0.005122f, 0.016884f, -0.035199f, -0.004121f, 0.101818f, 0.011383f, -0.007513f, 0.015509f, 0.016335f, 0.013305f, 0.053156f, -0.014160f, -0.018756f, 0.040975f, -0.000394f, 0.025859f, 0.017645f, 0.036029f, -0.008297f, -0.033043f, 0.022968f, -0.013777f, 0.007833f, 0.141362f, 0.139740f, 0.058518f, 0.029876f, 0.060412f, 0.001237f, -0.079811f, -0.026948f, 0.008235f, 0.002673f, -0.024967f, 0.046246f, 0.019382f, 0.012950f, -0.025606f, 0.055343f, -0.011400f, -0.006783f, -0.024648f, 0.025487f, 0.014983f, -0.057248f, -0.078605f, -0.028519f, 0.004500f, -0.004598f, -0.021005f, -0.074192f, -0.013904f, 0.014422f, -0.002045f, -0.031051f, -0.016350f, -0.028835f, -0.032399f, 0.006057f, 0.011390f, -0.051395f, -0.054174f, -0.025956f, -0.065441f, 0.006034f, 0.044000f, -0.054824f, 0.042056f, -0.033295f, -0.034167f, -0.060728f, -0.077095f, -0.089541f, -0.081587f, -0.049332f, -0.006974f, 0.017114f, 0.006170f, 0.016698f, -0.046220f, -0.099771f, -0.041485f, -0.096709f, -0.154970f, + -0.069043f, 0.112746f, 0.191550f, 0.113306f, -0.063651f, -0.046801f, -0.195848f, -0.169619f, 0.098851f, 0.013617f, 0.133720f, 0.148494f, 0.144346f, 0.048358f, -0.081313f, -0.084854f, -0.106840f, -0.105852f, -0.028356f, -0.008364f, 0.012416f, -0.048211f, 0.063258f, 0.029689f, 0.055898f, -0.128731f, 0.026813f, 0.015719f, -0.041198f, 0.027111f, -0.031405f, -0.015769f, -0.010936f, -0.019434f, 0.052518f, 0.099765f, -0.031638f, 0.019197f, -0.016429f, 0.023179f, 0.048908f, -0.016622f, -0.011836f, -0.028778f, 0.012233f, -0.018472f, -0.058242f, 0.040008f, 0.066043f, -0.009581f, -0.038597f, -0.033376f, -0.075007f, -0.020237f, 0.052102f, 0.037035f, 0.016350f, -0.079727f, -0.049003f, -0.034685f, 0.067676f, 0.061347f, 0.050831f, -0.155174f, -0.106298f, -0.012118f, 0.074092f, 0.164801f, -0.002100f, -0.196634f, -0.075226f, 0.007571f, 0.063947f, -0.004271f, 0.034011f, 0.029004f, -0.088633f, -0.036162f, -0.026075f, -0.049854f, 0.001599f, -0.094949f, 0.013527f, 0.040950f, -0.118600f, -0.072218f, -0.037251f, -0.011577f, 0.130071f, 0.003418f, -0.197981f, 0.024550f, 0.031360f, 0.038287f, 0.084732f, 0.052091f, + 0.043731f, -0.105551f, 0.014728f, -0.077696f, 0.013964f, 0.064990f, 0.057951f, 0.018320f, -0.037497f, 0.006768f, -0.022153f, -0.006379f, -0.027435f, -0.021425f, 0.014606f, 0.002785f, -0.039864f, -0.005794f, 0.021560f, -0.005733f, 0.003048f, 0.006244f, -0.024942f, -0.026950f, 0.000231f, 0.015287f, 0.003253f, -0.042707f, 0.004554f, 0.019225f, 0.007863f, 0.002955f, 0.044294f, -0.006794f, -0.009920f, 0.013181f, 0.018092f, -0.031367f, -0.030370f, 0.021367f, 0.006588f, -0.027370f, 0.018732f, 0.004357f, 0.010358f, -0.020302f, 0.009476f, 0.016237f, 0.005066f, -0.027757f, 0.035951f, -0.007673f, -0.033808f, -0.002808f, 0.032419f, 0.004814f, -0.020446f, 0.017494f, 0.011410f, -0.038667f, 0.018376f, -0.003598f, 0.039408f, -0.037076f, 0.008273f, 0.017313f, -0.048621f, -0.005426f, 0.030464f, -0.009024f, 0.024187f, -0.018473f, -0.025902f, -0.006550f, -0.026081f, 0.020693f, -0.050893f, 0.086476f, 0.013224f, 0.039734f, -0.032010f, 0.015886f, -0.005982f, 0.011452f, 0.010556f, -0.013109f, 0.006979f, 0.016765f, -0.007733f, 0.035147f, 0.002817f, 0.002240f, 0.012871f, 0.012249f, 0.000053f, -0.007548f, + 0.015858f, -0.001139f, -0.008677f, -0.000953f, 0.015960f, -0.014649f, 0.004760f, 0.008220f, -0.018629f, 0.026129f, -0.003549f, -0.010985f, 0.039902f, -0.014757f, -0.021163f, 0.018725f, 0.011270f, -0.009564f, 0.018203f, 0.014387f, -0.003082f, -0.004381f, -0.001412f, 0.006030f, 0.011197f, 0.006620f, 0.001572f, -0.005648f, 0.021464f, -0.020114f, 0.020675f, 0.003928f, -0.000594f, 0.006241f, 0.007767f, 0.007084f, 0.002642f, -0.017870f, 0.007084f, 0.017063f, -0.009673f, 0.000802f, 0.001889f, 0.013155f, 0.000662f, -0.003990f, 0.020544f, -0.008696f, 0.011930f, -0.018564f, -0.005234f, 0.019381f, -0.015979f, 0.018629f, -0.003197f, 0.012532f, 0.019770f, -0.070532f, -0.225272f, -0.011565f, 0.121119f, 0.054361f, 0.258217f, 0.021981f, 0.054344f, 0.002235f, -0.075611f, -0.094942f, -0.064571f, -0.115674f, -0.081231f, -0.050869f, 0.001528f, 0.088389f, 0.173669f, 0.128139f, 0.111097f, 0.036410f, -0.060948f, -0.088836f, -0.080382f, -0.094116f, -0.104972f, -0.042190f, -0.020484f, -0.008916f, 0.050569f, 0.067972f, 0.050599f, 0.094957f, 0.060639f, 0.022993f, 0.063016f, 0.001833f, -0.028132f, -0.017867f, + -0.057581f, -0.116530f, -0.071658f, -0.068005f, -0.070392f, 0.004160f, 0.031934f, 0.023036f, 0.085352f, 0.071092f, 0.047973f, 0.069990f, 0.073112f, 0.021618f, 0.021497f, -0.007054f, -0.064086f, -0.087366f, -0.068009f, -0.087471f, -0.063435f, -0.020870f, -0.016041f, 0.006697f, 0.047776f, 0.039137f, 0.033784f, 0.069701f, 0.056193f, 0.043402f, 0.070577f, 0.021929f, -0.013445f, 0.000837f, -0.026097f, -0.054986f, -0.031575f, -0.053702f, -0.034234f, -0.014690f}, + {-0.000974f, -0.000544f, -0.001053f, 0.007468f, 0.004839f, 0.000821f, -0.002807f, 0.003869f, 0.006696f, -0.002052f, 0.007410f, -0.004715f, -0.001510f, 0.004824f, 0.001644f, -0.008346f, 0.002647f, 0.005176f, -0.011583f, -0.000211f, 0.009561f, -0.005616f, -0.008028f, 0.008018f, -0.006457f, 0.001631f, -0.004731f, 0.000691f, 0.000623f, 0.000710f, -0.000425f, -0.005849f, 0.008387f, -0.003795f, -0.001920f, -0.005160f, -0.005383f, 0.000329f, -0.001152f, -0.003904f, -0.006648f, -0.005349f, 0.010195f, -0.001120f, 0.003981f, 0.002811f, -0.000651f, 0.007783f, 0.002081f, 0.005424f, -0.000607f, -0.004044f, 0.005315f, -0.007496f, -0.004059f, 0.000068f, -0.000799f, 0.000762f, 0.001814f, 0.005628f, -0.001923f, -0.001122f, -0.002282f, 0.001571f, -0.000779f, -0.001392f, 0.003496f, -0.000117f, 0.004366f, -0.000820f, -0.003615f, -0.003065f, -0.000014f, 0.000885f, -0.001373f, 0.001829f, -0.004964f, 0.001424f, 0.006222f, -0.000341f, 0.000731f, -0.008753f, -0.004307f, 0.001512f, 0.012049f, -0.007454f, 0.002670f, -0.012122f, 0.012835f, 0.001028f, 0.004830f, -0.001257f, 0.002202f, -0.002175f, -0.004139f, -0.010507f, + 0.004737f, -0.010532f, -0.004810f, -0.005851f, 0.006305f, 0.005053f, 0.002548f, 0.005260f, 0.009743f, 0.000839f, -0.008422f, 0.005907f, 0.001157f, -0.000182f, 0.004894f, -0.001489f, -0.002897f, -0.012404f, 0.002297f, -0.003382f, 0.003018f, 0.005555f, -0.006597f, -0.002479f, 0.006513f, 0.002220f, 0.001020f, -0.006171f, 0.016520f, 0.010056f, 0.001891f, 0.008137f, 0.006770f, 0.006557f, -0.014505f, 0.001233f, -0.001092f, -0.003608f, 0.004008f, 0.002797f, -0.001987f, -0.002417f, -0.000374f, -0.004065f, 0.004836f, -0.001276f, 0.009135f, 0.000111f, -0.001648f, -0.003630f, -0.006919f, -0.000868f, 0.006563f, 0.000320f, 0.002266f, 0.007467f, 0.003241f, 0.000983f, 0.003262f, 0.000922f, 0.004089f, 0.013668f, -0.006290f, 0.004710f, -0.003478f, -0.005611f, -0.002157f, -0.003820f, 0.007583f, -0.005852f, -0.011018f, -0.002662f, 0.003210f, -0.009171f, -0.005423f, 0.010810f, 0.018562f, -0.002875f, 0.007254f, -0.006069f, -0.006352f, -0.000082f, 0.002195f, -0.000595f, 0.000080f, 0.007007f, -0.011336f, 0.004000f, -0.000577f, -0.002220f, -0.009503f, 0.001066f, 0.000520f, 0.005730f, 0.001948f, -0.007442f, + 0.010406f, -0.007821f, 0.009737f, -0.000837f, 0.002029f, 0.004058f, -0.000782f, -0.004487f, 0.007706f, 0.002045f, 0.010193f, 0.001739f, -0.008329f, 0.015994f, 0.012885f, -0.004110f, -0.000906f, -0.002768f, -0.010554f, -0.005640f, -0.001397f, -0.001590f, 0.004841f, -0.005709f, 0.000923f, 0.004660f, 0.000475f, 0.000215f, -0.000222f, -0.000602f, -0.005479f, 0.010032f, 0.000824f, 0.000428f, -0.002476f, -0.000185f, -0.008238f, -0.005972f, -0.014817f, 0.016466f, -0.004563f, -0.002824f, 0.011532f, -0.005616f, 0.005557f, 0.026616f, -0.004096f, 0.000024f, -0.011295f, -0.009261f, -0.013875f, 0.006779f, -0.006210f, 0.002906f, 0.006381f, -0.009020f, -0.007847f, -0.005947f, -0.000234f, 0.001907f, -0.010983f, -0.004777f, 0.003609f, 0.003011f, -0.004861f, -0.002452f, 0.005369f, -0.007205f, 0.000161f, -0.003985f, -0.001999f, -0.005265f, 0.002959f, -0.004900f, 0.000841f, 0.002828f, -0.002529f, 0.010707f, -0.000369f, -0.002384f, -0.009376f, 0.000190f, 0.011459f, 0.000870f, 0.003294f, -0.012116f, -0.016969f, -0.006699f, -0.014724f, -0.013093f, -0.001199f, -0.006150f, -0.001362f, -0.015725f, 0.011809f, -0.014641f, + 0.001132f, 0.008495f, -0.009395f, -0.015302f, -0.011106f, -0.003991f, 0.008637f, 0.007448f, 0.011861f, -0.008574f, -0.007497f, -0.006413f, -0.005430f, 0.008004f, 0.001466f, -0.005197f, -0.002961f, 0.002744f, 0.014912f, 0.001510f, -0.006023f, 0.000791f, -0.004973f, -0.001177f, 0.010471f, 0.017457f, -0.005967f, -0.006231f, -0.015869f, 0.001908f, 0.004058f, 0.008937f, -0.005922f, 0.009634f, 0.001644f, 0.014896f, -0.011950f, 0.001782f, -0.022649f, -0.002672f, 0.002878f, -0.005742f, -0.004949f, -0.002196f, 0.008595f, -0.007071f, -0.011757f, 0.003196f, -0.017328f, -0.004043f, -0.008172f, 0.003657f, -0.001574f, 0.005717f, 0.001108f, -0.013632f, -0.014115f, 0.000156f, 0.008095f, 0.014080f, -0.002424f, -0.006082f, 0.012458f, -0.013489f, -0.006700f, 0.006127f, 0.006245f, 0.009222f, -0.008464f, 0.000077f, 0.004304f, -0.005968f, -0.001231f, 0.005346f, -0.007462f, 0.010456f, -0.003834f, -0.002226f, -0.010521f, -0.009712f, 0.005576f, -0.000220f, 0.001309f, -0.001777f, -0.005792f, 0.006513f, -0.003035f, 0.008197f, 0.001429f, -0.010846f, -0.009590f, 0.004422f, -0.003451f, 0.002611f, -0.012728f, 0.009837f, + -0.023469f, 0.006547f, -0.009714f, 0.009861f, 0.011075f, -0.010581f, -0.020506f, 0.003941f, -0.002027f, 0.014478f, -0.007312f, 0.020553f, -0.007448f, 0.013944f, -0.015240f, -0.004937f, 0.007471f, 0.010653f, 0.003464f, 0.000967f, -0.009079f, -0.000237f, -0.006995f, -0.008597f, 0.006092f, -0.007160f, 0.003947f, 0.003010f, 0.004686f, -0.003555f, 0.009808f, -0.000550f, 0.008526f, -0.000584f, -0.014346f, -0.001293f, -0.004146f, 0.002759f, 0.015639f, 0.002217f, -0.000659f, 0.000525f, -0.005461f, 0.006530f, -0.005128f, 0.009299f, 0.009154f, 0.004536f, 0.003865f, 0.016579f, -0.003190f, -0.001207f, -0.011556f, 0.010189f, 0.008103f, 0.003245f, 0.002439f, 0.003310f, 0.001088f, 0.006227f, 0.009627f, 0.008054f, 0.003892f, 0.005372f, -0.002012f, 0.014162f, 0.004366f, -0.000146f, -0.009037f, 0.007234f, -0.002664f, 0.020370f, 0.009863f, 0.005464f, -0.008392f, 0.000579f, -0.030843f, -0.016498f, 0.006801f, -0.005569f, 0.013095f, 0.013160f, 0.019456f, 0.008451f, 0.008124f, 0.005295f, -0.022440f, -0.004490f, -0.002766f, 0.002693f, -0.001917f, 0.007773f, 0.005402f, -0.008109f, -0.006691f, 0.006565f, + 0.011431f, 0.014753f, 0.012381f, 0.016679f, -0.008494f, -0.007978f, -0.011372f, 0.013063f, -0.006922f, 0.010945f, -0.002412f, 0.000273f, -0.010727f, -0.005684f, -0.006115f, 0.010070f, 0.011437f, 0.002868f, 0.011397f, 0.017159f, -0.006486f, 0.005017f, 0.019046f, -0.008686f, 0.006098f, 0.007424f, 0.000565f, 0.015334f, 0.018206f, 0.014991f, 0.031669f, 0.006950f, -0.004855f, -0.004867f, -0.005863f, 0.000727f, 0.005155f, 0.010785f, -0.002315f, -0.001992f, -0.004022f, -0.007387f, 0.002842f, 0.005831f, 0.007398f, -0.018685f, -0.003759f, 0.006331f, 0.012022f, 0.010555f, -0.018449f, -0.011241f, 0.001503f, 0.004567f, 0.011668f, 0.007785f, 0.015385f, -0.001761f, 0.003348f, 0.013136f, 0.019289f, 0.010877f, -0.020697f, 0.000221f, -0.022020f, -0.015701f, -0.009261f, -0.001735f, -0.013312f, 0.016419f, 0.006407f, 0.009746f, -0.027384f, -0.001917f, 0.018587f, 0.009302f, -0.007710f, -0.011631f, -0.006666f, 0.007118f, -0.020760f, -0.001221f, -0.013138f, 0.020918f, -0.002208f, -0.006123f, 0.002806f, -0.000768f, -0.002977f, 0.003658f, -0.004884f, 0.009665f, 0.007584f, 0.013900f, -0.000320f, 0.000642f, + 0.022301f, -0.006898f, 0.015221f, -0.002434f, -0.001688f, 0.037855f, 0.005420f, -0.004178f, -0.007617f, -0.029474f, 0.004112f, -0.030209f, -0.003978f, 0.031562f, -0.007777f, -0.006280f, -0.020763f, -0.006572f, 0.002142f, -0.011940f, 0.007845f, -0.001238f, -0.014510f, 0.017089f, 0.007941f, 0.005571f, 0.006753f, -0.011881f, 0.015434f, -0.020295f, 0.008682f, 0.008219f, 0.004291f, -0.001981f, -0.003584f, -0.004583f, 0.002369f, 0.013037f, -0.024269f, 0.011420f, -0.008135f, -0.011938f, -0.011357f, 0.010145f, 0.012766f, 0.007729f, 0.021651f, 0.016159f, 0.003786f, 0.006990f, -0.015805f, 0.004010f, 0.008059f, 0.016954f, 0.003796f, -0.007140f, 0.006590f, 0.008278f, -0.014114f, 0.002825f, -0.014498f, 0.012477f, 0.011390f, 0.014521f, -0.012842f, 0.008897f, 0.015454f, -0.006041f, 0.004439f, 0.020355f, -0.000001f, -0.011528f, -0.009109f, 0.005050f, -0.002671f, -0.011733f, -0.004518f, 0.000888f, 0.003458f, 0.007379f, -0.007982f, 0.014387f, 0.008900f, -0.002503f, 0.017118f, -0.001416f, 0.006807f, 0.022365f, -0.022607f, 0.043256f, -0.019146f, 0.006463f, 0.013318f, -0.003866f, -0.001943f, 0.005965f, + 0.029290f, -0.001033f, -0.003624f, -0.000350f, -0.006520f, 0.014506f, 0.016036f, -0.004620f, 0.006976f, 0.005944f, 0.005310f, 0.009879f, 0.012494f, 0.001092f, 0.013387f, 0.002623f, -0.011687f, 0.014720f, 0.019223f, 0.012006f, -0.019247f, 0.038520f, -0.011361f, 0.007707f, -0.027278f, 0.011568f, -0.024040f, 0.019567f, 0.002611f, -0.004855f, -0.013308f, 0.018489f, 0.003074f, 0.011934f, 0.012568f, 0.006497f, -0.020089f, 0.010994f, -0.011881f, -0.001950f, 0.010074f, 0.010528f, 0.003086f, -0.003549f, -0.020088f, 0.003195f, 0.019905f, 0.002416f, 0.013154f, 0.014132f, -0.020981f, 0.012200f, -0.010290f, -0.010703f, 0.016804f, 0.017948f, 0.010005f, 0.010157f, 0.003552f, 0.009719f, -0.021612f, -0.009882f, -0.006362f, 0.000731f, 0.024640f, 0.011508f, 0.010245f, -0.001724f, 0.011281f, -0.000519f, 0.027063f, 0.009689f, 0.010757f, 0.003992f, -0.000677f, -0.038901f, 0.015193f, 0.009138f, -0.002819f, -0.002804f, -0.028251f, 0.000230f, -0.010338f, 0.006932f, 0.026013f, -0.004178f, -0.013741f, 0.029668f, -0.000607f, 0.017080f, -0.009087f, 0.000969f, -0.017414f, -0.000485f, -0.007391f, 0.007180f, + -0.000993f, 0.024186f, -0.022262f, 0.002457f, 0.008192f, 0.010619f, -0.038102f, 0.024085f, 0.005971f, -0.027036f, -0.017886f, 0.013878f, 0.032147f, -0.012205f, -0.007076f, -0.023406f, 0.046375f, 0.017960f, 0.001817f, 0.007454f, -0.026110f, -0.016567f, -0.002282f, 0.001668f, 0.023336f, 0.004962f, 0.017641f, 0.020986f, -0.002329f, 0.000995f, 0.013404f, -0.004222f, -0.017378f, -0.015441f, -0.005450f, 0.020871f, -0.013080f, 0.026496f, -0.014142f, 0.039042f, 0.015625f, 0.031477f, -0.010493f, 0.004971f, 0.023385f, -0.019897f, 0.009717f, 0.011372f, 0.008533f, -0.011385f, 0.011158f, 0.003250f, 0.001803f, 0.011562f, 0.021487f, 0.020369f, -0.023458f, -0.004713f, 0.007568f, -0.019936f, -0.016047f, -0.005064f, -0.044684f, 0.011355f, -0.024185f, -0.012275f, -0.000242f, -0.004422f, 0.009436f, 0.027229f, 0.011631f, 0.012218f, -0.019951f, -0.000228f, -0.029219f, -0.043323f, 0.024096f, -0.017387f, 0.019834f, 0.006776f, 0.009821f, 0.011921f, -0.028965f, -0.053041f, 0.005162f, 0.008165f, 0.030556f, -0.029276f, -0.032145f, 0.028542f, -0.010800f, 0.013219f, -0.005716f, 0.007128f, 0.004886f, 0.007847f, + -0.014406f, 0.007601f, -0.001710f, -0.004209f, 0.019004f, 0.007374f, -0.002239f, -0.023685f, -0.002860f, -0.000252f, -0.004008f, -0.000711f, -0.012617f, -0.031556f, -0.013782f, 0.023930f, -0.009561f, 0.012024f, -0.017693f, 0.013882f, 0.007375f, 0.000202f, -0.008679f, -0.039245f, 0.022400f, 0.021739f, 0.027849f, -0.018710f, -0.007645f, 0.037658f, 0.033375f, 0.015636f, 0.007559f, 0.021467f, 0.008235f, 0.019328f, -0.009640f, 0.016837f, -0.030865f, -0.001584f, 0.009281f, -0.007773f, 0.037882f, 0.001836f, 0.020968f, -0.011819f, -0.019517f, 0.043494f, -0.000170f, 0.017436f, -0.005167f, 0.000907f, -0.050259f, -0.003751f, 0.011530f, -0.022904f, -0.029695f, -0.009325f, -0.007681f, -0.050197f, -0.047094f, -0.013097f, -0.000702f, 0.033727f, 0.027347f, 0.026944f, -0.011718f, -0.005532f, -0.007889f, 0.028819f, 0.011958f, -0.013586f, -0.003077f, -0.011043f, 0.020754f, 0.015689f, -0.013298f, -0.018547f, -0.016840f, -0.033829f, 0.012873f, -0.000194f, 0.000147f, 0.006028f, -0.005657f, 0.011286f, 0.045289f, -0.027341f, 0.013157f, 0.001598f, -0.018442f, -0.011320f, -0.021743f, 0.006818f, -0.010014f, -0.011765f, + 0.023212f, 0.001735f, -0.008545f, 0.022864f, -0.003835f, -0.011840f, 0.007850f, 0.016334f, -0.010152f, 0.017635f, 0.033454f, 0.031444f, -0.022736f, -0.001567f, 0.007834f, 0.017158f, -0.028564f, -0.007167f, -0.008001f, 0.033987f, 0.014935f, -0.005072f, -0.021417f, -0.025057f, -0.020979f, 0.030615f, 0.026755f, -0.051623f, -0.041418f, -0.032989f, -0.021364f, 0.006754f, -0.018373f, 0.011897f, 0.007009f, 0.005101f, 0.040066f, 0.031415f, 0.019321f, 0.002411f, -0.027116f, -0.014521f, -0.004616f, 0.010179f, 0.016412f, -0.024307f, 0.005673f, 0.000634f, -0.020502f, -0.010374f, 0.015805f, -0.012852f, 0.012515f, 0.004584f, 0.014812f, -0.019757f, -0.000367f, -0.042933f, 0.006018f, -0.054074f, 0.021567f, 0.020396f, -0.020778f, 0.023124f, 0.028835f, -0.000400f, 0.008122f, -0.035471f, 0.020045f, 0.000637f, -0.014248f, 0.017079f, -0.004407f, -0.001242f, -0.000331f, 0.000688f, 0.035731f, -0.005691f, 0.000014f, 0.042052f, -0.000333f, -0.022066f, -0.057712f, -0.049521f, 0.053070f, 0.030877f, 0.013264f, 0.011136f, -0.021846f, -0.046899f, -0.021580f, 0.004598f, -0.016753f, 0.032226f, -0.001448f, 0.001788f, + 0.038085f, -0.010812f, -0.011178f, -0.011847f, -0.023159f, -0.044013f, -0.031411f, 0.086709f, -0.043668f, -0.024962f, 0.026487f, -0.052085f, -0.033138f, 0.025183f, 0.045399f, 0.003601f, -0.011968f, 0.004094f, 0.010459f, -0.038006f, -0.028196f, -0.019899f, -0.034804f, -0.003751f, 0.031775f, -0.003028f, 0.006057f, 0.015251f, 0.009985f, -0.028220f, -0.013911f, -0.023455f, -0.012758f, 0.028439f, -0.009486f, -0.003921f, -0.004568f, 0.016931f, 0.017075f, 0.051868f, 0.007832f, 0.037961f, -0.002811f, 0.012272f, -0.021645f, -0.016718f, 0.013353f, -0.027701f, -0.030383f, 0.000110f, 0.008890f, -0.016219f, 0.011751f, -0.018864f, 0.004975f, -0.048162f, 0.025861f, 0.013758f, 0.021071f, 0.001657f, -0.019668f, -0.040626f, -0.014569f, -0.004650f, 0.032158f, -0.026020f, -0.015141f, 0.007864f, 0.074148f, -0.021935f, 0.075400f, -0.047919f, 0.017969f, -0.018665f, 0.032890f, -0.014837f, 0.057162f, -0.055898f, 0.082041f, -0.009781f, 0.016635f, 0.033416f, -0.061362f, 0.051905f, -0.065480f, 0.041023f, -0.106491f, 0.053952f, -0.054732f, 0.043637f, -0.071225f, 0.055682f, 0.002429f, 0.025910f, -0.032066f, -0.029006f, + 0.035206f, 0.060181f, -0.048627f, 0.076102f, -0.003665f, 0.000587f, -0.002170f, 0.013685f, -0.021719f, -0.015948f, -0.032897f, -0.006993f, 0.001843f, 0.000584f, 0.000596f, 0.030155f, 0.005860f, 0.032986f, 0.032629f, -0.019827f, 0.012511f, 0.068242f, 0.022966f, 0.014895f, 0.010980f, -0.058523f, 0.003804f, -0.009251f, -0.006568f, -0.053726f, -0.010608f, 0.031220f, 0.009569f, 0.010467f, 0.016405f, 0.039398f, 0.011055f, -0.012084f, -0.003232f, -0.003410f, 0.015528f, -0.026839f, -0.015681f, 0.040406f, 0.025948f, 0.018634f, 0.032115f, 0.022810f, -0.012924f, -0.007321f, -0.046088f, -0.021160f, 0.019713f, 0.014263f, 0.035974f, -0.026397f, -0.012091f, -0.010074f, 0.026507f, 0.013807f, 0.023773f, 0.007912f, -0.018113f, -0.019261f, 0.058631f, -0.020536f, -0.056774f, 0.009695f, 0.040731f, 0.023555f, -0.001674f, -0.011503f, 0.002841f, -0.001619f, -0.001279f, 0.016623f, -0.022118f, -0.118373f, 0.033990f, -0.013470f, -0.006626f, 0.030408f, -0.019319f, 0.032580f, -0.003340f, -0.050578f, -0.008576f, 0.006237f, 0.018998f, 0.024350f, 0.006176f, -0.035406f, 0.037063f, -0.012937f, -0.002569f, -0.021204f, + -0.009437f, 0.020833f, -0.003224f, 0.018766f, 0.029902f, -0.005337f, -0.037197f, 0.009861f, 0.042045f, -0.037110f, 0.014740f, 0.033749f, -0.005361f, -0.023958f, -0.047206f, -0.030534f, 0.034049f, 0.087847f, -0.026148f, -0.032664f, 0.097445f, -0.004585f, -0.013669f, 0.071686f, 0.040959f, 0.036579f, 0.028293f, 0.013426f, -0.020350f, 0.037468f, 0.033221f, 0.024811f, 0.010663f, -0.062162f, 0.040206f, 0.037685f, -0.067804f, -0.036991f, -0.024382f, -0.016673f, -0.018738f, 0.076449f, 0.036872f, -0.039795f, 0.039440f, -0.013012f, -0.039744f, 0.020045f, 0.019931f, -0.014494f, -0.017035f, -0.058854f, 0.006619f, 0.014227f, 0.044758f, 0.026246f, 0.003424f, -0.032026f, -0.130165f, 0.039664f, 0.073118f, -0.045788f, -0.009614f, -0.035731f, 0.075304f, 0.050276f, 0.031758f, -0.006510f, -0.026433f, 0.004871f, 0.030372f, 0.013551f, -0.013121f, -0.003547f, 0.041615f, -0.003460f, -0.015270f, -0.056515f, -0.026344f, 0.046153f, 0.027430f, -0.030583f, 0.023876f, -0.022480f, -0.006663f, 0.013013f, 0.013398f, -0.014113f, 0.008730f, -0.050124f, 0.014188f, 0.064672f, -0.008174f, -0.014349f, -0.064669f, -0.040607f, + 0.031734f, -0.052915f, -0.027550f, 0.009856f, 0.013299f, -0.017839f, 0.042827f, 0.037981f, -0.041039f, 0.013094f, 0.023357f, 0.064015f, 0.061292f, -0.012394f, 0.020281f, -0.004621f, 0.070049f, 0.027028f, 0.028624f, 0.062472f, -0.029127f, -0.047078f, -0.021728f, -0.059573f, 0.046975f, 0.017165f, 0.023172f, 0.006727f, 0.079501f, -0.058385f, -0.011707f, 0.026902f, -0.018026f, 0.029636f, -0.000883f, -0.004450f, 0.019089f, -0.053102f, 0.032865f, 0.054022f, 0.047434f, 0.048887f, 0.062013f, -0.031440f, 0.049365f, -0.088660f, -0.037431f, 0.037441f, 0.010724f, 0.069655f, 0.032965f, 0.059860f, -0.022346f, 0.010476f, -0.047037f, 0.036536f, 0.057786f, 0.053412f, 0.007432f, 0.038776f, -0.085507f, -0.054095f, 0.056818f, 0.019025f, -0.052476f, -0.025087f, 0.008938f, 0.083800f, 0.027089f, -0.029486f, -0.039182f, 0.011555f, -0.009916f, 0.052961f, 0.055630f, -0.001812f, -0.006586f, 0.014168f, -0.013093f, 0.067701f, 0.020482f, -0.011506f, 0.014954f, -0.026721f, -0.016075f, -0.139720f, -0.046797f, 0.029576f, -0.020456f, -0.017397f, 0.001305f, -0.021682f, -0.023921f, 0.070186f, 0.046083f, -0.028609f, + 0.062110f, 0.129151f, 0.027741f, 0.093588f, 0.014521f, 0.023261f, 0.067450f, 0.048545f, -0.032321f, -0.033663f, -0.066805f, -0.036779f, -0.000835f, -0.061371f, 0.030466f, 0.000862f, -0.059642f, -0.035085f, -0.034694f, 0.002265f, 0.060283f, -0.002789f, 0.051783f, -0.027845f, 0.016453f, -0.103656f, 0.033785f, -0.012977f, 0.058689f, -0.010447f, -0.060233f, 0.067523f, -0.020373f, 0.012995f, 0.040478f, 0.030489f, 0.062812f, -0.005928f, 0.012944f, -0.008190f, 0.071174f, -0.011289f, 0.016843f, 0.049693f, -0.049728f, 0.049000f, -0.009264f, 0.031058f, 0.049011f, -0.009226f, 0.014403f, 0.010259f, 0.009054f, -0.011690f, 0.024437f, 0.022033f, -0.003287f, -0.023621f, -0.000176f, -0.028014f, -0.005274f, -0.003244f, 0.029901f, -0.010318f, -0.043850f, -0.029582f, 0.056354f, 0.054438f, -0.044017f, -0.038648f, 0.066673f, 0.074777f, -0.022699f, -0.004749f, 0.057464f, 0.004503f, 0.032273f, 0.040297f, -0.081983f, -0.023539f, -0.000231f, 0.087179f, 0.013650f, -0.003721f, -0.077402f, 0.018860f, 0.039049f, 0.023756f, 0.009545f, 0.024678f, 0.015696f, 0.013691f, 0.114402f, -0.001532f, 0.016239f, 0.061932f, + 0.060897f, -0.104794f, -0.007909f, -0.088681f, -0.082517f, 0.020111f, 0.016376f, 0.014610f, 0.001119f, 0.077468f, 0.043300f, 0.099893f, 0.108473f, -0.012195f, -0.055048f, 0.011376f, -0.015880f, -0.010006f, 0.022407f, 0.010689f, -0.010202f, -0.050280f, -0.056665f, 0.060005f, 0.026026f, -0.006491f, 0.007467f, 0.010108f, 0.003701f, 0.011478f, -0.007540f, -0.013763f, -0.083542f, 0.002419f, 0.044688f, -0.013008f, -0.065081f, -0.019819f, 0.049247f, -0.094849f, -0.035409f, 0.061518f, 0.034022f, 0.073371f, -0.004846f, 0.006451f, -0.069567f, -0.066033f, -0.087856f, 0.072786f, 0.097882f, -0.131659f, -0.069754f, -0.005350f, 0.064037f, -0.051085f, -0.012404f, 0.123989f, 0.045655f, 0.032992f, 0.076564f, 0.061225f, 0.084194f, -0.029715f, 0.083377f, -0.010920f, -0.074405f, -0.099044f, -0.029473f, 0.041975f, -0.086710f, -0.012465f, 0.010726f, -0.013201f, -0.035566f, 0.021978f, -0.077599f, 0.059177f, -0.005378f, 0.017851f, 0.022711f, 0.021952f, 0.000411f, -0.026403f, 0.041900f, 0.010216f, 0.040438f, -0.009143f, -0.086741f, -0.008234f, 0.024659f, -0.028809f, -0.031937f, -0.019770f, -0.029454f, 0.034812f, + -0.009329f, -0.031134f, -0.002019f, 0.032345f, -0.044297f, 0.030424f, -0.015535f, 0.015986f, -0.043625f, -0.011238f, 0.017342f, -0.004157f, -0.004227f, 0.004915f, 0.024132f, -0.004760f, -0.004142f, -0.030767f, 0.014923f, -0.008785f, 0.004708f, 0.008904f, 0.003041f, 0.021986f, -0.033022f, -0.025624f, 0.034349f, 0.029196f, -0.041386f, 0.019168f, -0.033433f, 0.037952f, -0.032271f, 0.013947f, 0.009964f, -0.027918f, 0.060592f, 0.005242f, -0.067210f, 0.030353f, 0.008355f, -0.052817f, 0.029520f, -0.019919f, 0.031546f, -0.046032f, 0.023769f, -0.048808f, 0.022804f, 0.032934f, -0.029578f, 0.016429f, -0.030834f, -0.000207f, 0.004421f, 0.002055f, 0.014145f, -0.042098f, -0.231169f, -0.398456f, -0.147947f, -0.314023f, -0.310886f, 0.131760f, 0.009054f, 0.192345f, 0.463806f, 0.415638f, 0.336677f, 0.416329f, 0.245885f, 0.037111f, 0.061639f, -0.085411f, -0.349035f, -0.345209f, -0.264003f, -0.335968f, -0.237430f, -0.067059f, -0.167484f, -0.222475f, -0.109178f, -0.047285f, -0.126158f, -0.071564f, -0.024037f, -0.073881f, -0.114324f, -0.002202f, 0.058386f, -0.048465f, 0.089658f, 0.144601f, -0.016882f, 0.011256f, + 0.203470f, 0.090726f, -0.018813f, 0.190105f, 0.152001f, -0.059587f, 0.062178f, 0.177356f, -0.022207f, -0.001890f, 0.258981f, 0.131575f, 0.045034f, 0.318583f, 0.353022f, 0.166619f, 0.335221f, 0.421561f, 0.101376f, 0.047246f, 0.166506f, -0.079373f, -0.218144f, -0.128078f, -0.277971f, -0.486486f, -0.483974f, -0.545019f, -0.725272f, -0.724235f, -0.690894f, -0.697735f, -0.615231f, -0.506852f, -0.382700f, -0.196101f, 0.001719f, 0.322431f, 0.383469f, 0.258023f} + }, + { + {0.013548f, -0.006997f, 0.003290f, -0.000917f, 0.001273f, -0.001926f, 0.006944f, 0.010525f, -0.005045f, 0.003679f, -0.001194f, 0.003670f, -0.004751f, -0.000556f, 0.002762f, -0.006361f, -0.006367f, 0.002066f, 0.003341f, -0.007454f, 0.003414f, -0.004137f, -0.005592f, 0.000365f, -0.002932f, -0.005570f, -0.007021f, -0.001256f, 0.005896f, -0.001273f, 0.002242f, 0.003896f, 0.002182f, 0.002802f, 0.003312f, 0.002856f, 0.006833f, -0.010079f, 0.002622f, -0.006562f, 0.003667f, 0.007104f, 0.000429f, -0.001520f, -0.006127f, 0.002419f, -0.001036f, 0.001077f, 0.002160f, 0.001185f, -0.002412f, -0.005300f, -0.003939f, -0.006843f, 0.001451f, 0.000007f, 0.000838f, 0.003220f, 0.004436f, 0.001317f, 0.007887f, 0.000451f, -0.004923f, 0.005366f, -0.001514f, -0.001001f, -0.001678f, -0.007289f, 0.006305f, 0.003100f, 0.005528f, -0.006518f, -0.010567f, -0.003182f, 0.004674f, 0.003495f, -0.005450f, -0.015743f, 0.001800f, 0.010441f, 0.003611f, 0.006817f, -0.009820f, -0.005376f, 0.000512f, -0.001715f, 0.002717f, 0.008264f, -0.019725f, -0.000112f, 0.006585f, 0.003932f, 0.006079f, -0.005713f, -0.007917f, 0.008667f, + -0.000057f, 0.002422f, 0.005487f, 0.007165f, 0.002738f, 0.001495f, 0.006542f, -0.000956f, -0.001956f, -0.005574f, 0.003109f, -0.001581f, -0.000790f, -0.002910f, 0.003823f, 0.009393f, 0.000166f, -0.001990f, 0.004564f, -0.006065f, -0.008877f, -0.005030f, -0.001683f, -0.005902f, 0.000678f, -0.001416f, 0.003944f, -0.003722f, 0.001218f, -0.007399f, -0.000529f, -0.006111f, -0.000103f, -0.002863f, -0.002182f, 0.002941f, -0.003266f, -0.000492f, 0.005170f, -0.002761f, 0.006137f, 0.006977f, 0.000768f, 0.009467f, -0.004682f, -0.000569f, 0.004912f, -0.001953f, 0.003432f, 0.004064f, 0.002716f, -0.005494f, 0.002378f, 0.001816f, 0.002052f, -0.000383f, -0.003796f, 0.025978f, -0.007706f, 0.002240f, -0.006014f, -0.000763f, -0.002678f, 0.002728f, 0.001756f, 0.008706f, 0.002485f, 0.001271f, 0.003206f, -0.002488f, -0.018434f, -0.017685f, -0.005708f, 0.002005f, 0.005039f, -0.004729f, 0.000712f, -0.005973f, -0.002293f, -0.000047f, 0.002801f, -0.008043f, -0.008668f, -0.002824f, -0.000812f, 0.004177f, 0.001213f, -0.002242f, -0.006333f, 0.000705f, -0.003612f, -0.000201f, 0.003965f, -0.006526f, 0.002677f, 0.005070f, + -0.004540f, -0.011681f, -0.003220f, 0.003689f, -0.000947f, 0.002906f, -0.000827f, 0.002446f, -0.000801f, 0.002716f, 0.000340f, -0.010997f, 0.001794f, 0.003819f, -0.001944f, 0.002410f, 0.000213f, -0.001144f, -0.002371f, -0.000456f, -0.006490f, -0.001149f, -0.001996f, -0.008466f, -0.001620f, -0.000930f, 0.006645f, -0.007622f, 0.011116f, 0.012487f, 0.010126f, -0.005457f, -0.002506f, -0.003473f, 0.004630f, -0.003198f, -0.003479f, 0.001337f, -0.024600f, 0.000024f, -0.003632f, 0.001894f, -0.000662f, -0.012653f, -0.002258f, -0.002531f, 0.004212f, 0.006414f, -0.008387f, 0.007038f, -0.001978f, 0.004902f, 0.004962f, -0.002410f, 0.010539f, 0.000799f, 0.000682f, -0.001622f, 0.002022f, -0.002393f, 0.002140f, -0.002709f, 0.000627f, -0.006571f, 0.000973f, 0.007607f, 0.000256f, 0.003306f, 0.008094f, -0.007521f, -0.007842f, 0.003567f, -0.003405f, 0.006449f, -0.006046f, -0.001724f, -0.012949f, -0.010021f, -0.008543f, 0.004064f, 0.001463f, 0.004916f, -0.004480f, -0.003213f, -0.000654f, 0.008537f, -0.008838f, 0.004031f, 0.001980f, 0.000929f, 0.005056f, -0.002953f, -0.003804f, -0.005263f, 0.003811f, 0.002089f, + -0.007687f, -0.008659f, -0.009956f, 0.000030f, -0.001740f, 0.003759f, 0.000056f, -0.001578f, 0.001540f, 0.001832f, 0.005267f, -0.011993f, 0.002187f, 0.007628f, 0.011226f, 0.011419f, 0.009680f, -0.000835f, -0.005796f, -0.013152f, 0.010313f, -0.006348f, 0.012037f, 0.015273f, 0.010022f, 0.001177f, 0.005468f, 0.002281f, 0.012753f, -0.004897f, -0.004923f, 0.004610f, -0.000403f, 0.006019f, 0.010129f, -0.011218f, 0.005337f, 0.012621f, 0.006665f, 0.000533f, 0.001258f, 0.002718f, -0.003885f, 0.001273f, -0.003591f, -0.005547f, -0.000435f, 0.012050f, -0.002636f, 0.006335f, -0.002322f, -0.005150f, 0.014187f, -0.009772f, 0.009991f, 0.010786f, 0.003271f, 0.007355f, -0.006841f, -0.000855f, -0.001836f, -0.001193f, 0.007417f, 0.003230f, -0.007419f, 0.002886f, 0.000627f, 0.003137f, -0.000409f, 0.004668f, 0.004607f, 0.012142f, -0.009592f, 0.006873f, 0.005835f, 0.000397f, 0.005845f, 0.002723f, 0.008234f, 0.007711f, 0.005618f, -0.001997f, 0.007017f, 0.010875f, 0.001634f, 0.007104f, -0.001945f, 0.012701f, 0.013375f, 0.014241f, -0.001324f, -0.006707f, 0.005251f, 0.000992f, 0.007134f, 0.006093f, + 0.020275f, -0.001862f, -0.006403f, 0.019346f, -0.007722f, 0.008740f, -0.004767f, -0.018357f, 0.003137f, -0.005179f, 0.000397f, 0.022285f, -0.008787f, -0.010280f, 0.000596f, 0.011857f, -0.019000f, -0.006685f, 0.013714f, -0.004642f, 0.004175f, 0.006963f, -0.005409f, 0.006400f, -0.004355f, -0.006089f, 0.000824f, -0.001398f, -0.002799f, -0.001937f, 0.007256f, -0.005772f, 0.014622f, 0.004333f, -0.000334f, -0.008165f, -0.003305f, 0.009926f, -0.011458f, 0.002926f, 0.002880f, -0.000977f, -0.015792f, 0.010932f, 0.001763f, 0.003288f, 0.000303f, -0.001227f, 0.006599f, -0.003691f, 0.009344f, 0.006919f, -0.005356f, -0.017182f, 0.006719f, 0.005921f, -0.001927f, -0.004033f, 0.002789f, 0.012915f, 0.010171f, -0.000037f, 0.005143f, -0.009353f, 0.005688f, -0.000433f, -0.006026f, 0.006224f, 0.006597f, -0.004728f, 0.006128f, 0.003577f, -0.007371f, -0.000994f, 0.003111f, -0.003538f, 0.011420f, 0.007544f, 0.006850f, 0.019881f, 0.003345f, -0.003998f, -0.023543f, 0.008348f, 0.014667f, 0.009086f, 0.006251f, -0.001247f, 0.007885f, 0.027333f, -0.002371f, 0.013064f, 0.002059f, 0.007663f, 0.003478f, 0.001292f, + 0.006190f, -0.001414f, -0.010455f, -0.002363f, -0.007541f, -0.001388f, -0.010992f, 0.005091f, 0.001248f, 0.014721f, 0.003636f, -0.005670f, 0.005518f, -0.001170f, -0.002475f, 0.009725f, 0.004140f, 0.007473f, 0.004843f, -0.003044f, -0.014564f, 0.001771f, 0.010007f, 0.000197f, -0.001987f, 0.004869f, -0.007198f, -0.002669f, -0.013441f, -0.017093f, 0.010330f, 0.011170f, 0.009140f, -0.001694f, -0.001853f, 0.000983f, 0.000814f, 0.006147f, 0.000232f, 0.006663f, 0.006368f, 0.000715f, 0.006564f, -0.004072f, 0.002700f, -0.001697f, 0.004481f, 0.004852f, 0.018199f, 0.001046f, 0.015207f, -0.004121f, -0.012657f, -0.000159f, -0.000327f, -0.004146f, 0.012869f, 0.000672f, 0.008863f, -0.021527f, -0.000643f, 0.022142f, 0.030333f, -0.012453f, 0.003434f, 0.004953f, -0.010505f, -0.005977f, 0.001188f, -0.008600f, -0.009166f, 0.021390f, 0.002926f, -0.013855f, -0.002299f, -0.008956f, -0.005305f, 0.014026f, -0.004431f, -0.005860f, 0.012399f, 0.008000f, 0.012508f, -0.005086f, 0.002448f, 0.012641f, 0.000368f, -0.007092f, 0.003182f, -0.000738f, 0.001319f, -0.015273f, -0.010896f, 0.005042f, -0.001382f, 0.004110f, + -0.014685f, 0.007165f, 0.004939f, 0.003794f, -0.025718f, -0.014401f, -0.006814f, -0.002700f, 0.003188f, -0.010599f, -0.007874f, 0.003001f, 0.018947f, 0.013349f, 0.006351f, -0.002881f, -0.002715f, -0.006763f, 0.004982f, -0.001515f, -0.015073f, -0.010345f, -0.002087f, 0.000453f, 0.019533f, 0.011991f, -0.011016f, -0.010528f, 0.013039f, 0.003595f, -0.009685f, 0.000904f, 0.011243f, 0.005652f, -0.001325f, -0.015556f, 0.015892f, -0.005474f, 0.008631f, 0.003807f, 0.004538f, -0.005490f, 0.009355f, -0.011089f, 0.013479f, -0.000825f, -0.003158f, 0.007340f, -0.012832f, 0.004890f, 0.007592f, 0.001823f, 0.005426f, 0.006615f, -0.003179f, 0.014969f, -0.006467f, -0.024524f, -0.014411f, -0.002896f, 0.001384f, -0.004894f, -0.010227f, -0.011253f, -0.007480f, 0.024847f, -0.006368f, -0.001541f, 0.003958f, -0.004690f, 0.003353f, 0.020465f, -0.009216f, 0.009928f, -0.005813f, -0.012492f, 0.012011f, 0.008764f, 0.005793f, 0.018408f, 0.000874f, 0.008903f, -0.000307f, 0.002591f, -0.000213f, -0.005451f, 0.004465f, -0.000898f, 0.013544f, 0.003092f, -0.008445f, -0.001801f, -0.002041f, -0.000083f, -0.014063f, 0.006444f, + -0.013832f, 0.004104f, 0.020032f, -0.012016f, -0.023608f, 0.006330f, 0.004064f, 0.011897f, -0.004163f, 0.000640f, 0.012184f, -0.006005f, 0.006493f, 0.009574f, 0.003422f, -0.003556f, 0.012507f, 0.004612f, 0.016067f, -0.018631f, 0.045316f, -0.009732f, 0.020761f, 0.002558f, 0.009096f, 0.006713f, 0.000624f, -0.024354f, 0.022027f, -0.030535f, 0.010848f, 0.008097f, 0.028865f, -0.012563f, 0.013441f, -0.019238f, 0.013741f, -0.005840f, -0.020554f, -0.009674f, 0.005840f, 0.006012f, 0.008624f, 0.004496f, 0.012053f, 0.007855f, 0.017853f, -0.004785f, -0.013074f, -0.012084f, 0.005758f, 0.000295f, -0.006002f, 0.011807f, 0.005860f, -0.001934f, 0.007692f, 0.014467f, -0.000381f, 0.003997f, -0.001174f, 0.007289f, 0.005048f, -0.017750f, -0.006885f, -0.023380f, -0.004463f, -0.003792f, 0.000451f, 0.011531f, 0.011116f, 0.001645f, -0.005491f, -0.000035f, -0.002498f, -0.005571f, 0.004239f, 0.033243f, 0.004100f, -0.000808f, 0.011708f, -0.000951f, 0.013280f, -0.005438f, 0.001351f, -0.008232f, 0.034594f, 0.007422f, -0.012461f, -0.016270f, -0.009216f, 0.000599f, 0.000555f, -0.022134f, 0.002349f, 0.004299f, + 0.001866f, 0.023033f, 0.001742f, 0.019097f, 0.011539f, 0.018694f, 0.006159f, -0.019662f, 0.018703f, -0.012751f, 0.032528f, -0.021586f, -0.006415f, -0.029719f, -0.006316f, -0.003614f, 0.012881f, -0.014150f, 0.018977f, 0.014802f, -0.009351f, 0.000459f, 0.021749f, 0.030041f, -0.009837f, 0.000063f, -0.004050f, 0.008867f, 0.000120f, -0.004399f, 0.004441f, 0.007557f, -0.014637f, 0.010121f, 0.002111f, 0.011679f, 0.004854f, 0.000893f, -0.024961f, -0.005147f, 0.029046f, -0.004652f, 0.009758f, 0.020973f, 0.006476f, -0.003075f, -0.007697f, -0.011685f, -0.006065f, -0.000529f, -0.009462f, -0.007381f, 0.016884f, 0.013755f, 0.004948f, 0.023882f, 0.017214f, -0.007499f, -0.002521f, 0.001256f, 0.006023f, -0.010384f, -0.020560f, 0.024095f, 0.011804f, -0.008564f, 0.024508f, 0.022257f, 0.028503f, 0.008503f, 0.004094f, -0.014936f, 0.000334f, -0.019994f, -0.012355f, -0.014332f, -0.030188f, 0.025154f, 0.001098f, 0.004252f, -0.004246f, 0.001685f, -0.003684f, -0.039177f, 0.004088f, -0.000821f, -0.007366f, -0.003347f, -0.019443f, 0.021377f, 0.022002f, 0.024569f, -0.041063f, 0.012627f, 0.007993f, 0.000503f, + 0.039676f, 0.015929f, -0.020375f, -0.002878f, 0.039147f, 0.004101f, 0.006611f, 0.007485f, -0.012098f, 0.005993f, 0.007677f, 0.023937f, 0.011974f, -0.019471f, -0.031447f, 0.010995f, 0.006780f, -0.016322f, -0.003512f, 0.000732f, -0.019626f, 0.001354f, 0.022556f, 0.009029f, 0.012312f, 0.017950f, 0.029787f, 0.001933f, 0.026089f, 0.004301f, -0.011552f, -0.002631f, -0.016868f, -0.009479f, 0.005622f, 0.007880f, 0.005823f, 0.012202f, -0.020412f, -0.010072f, 0.032852f, -0.004080f, -0.008980f, -0.020843f, 0.014412f, 0.012865f, 0.002962f, 0.004070f, -0.002798f, 0.007074f, -0.017976f, 0.021688f, -0.016205f, -0.018048f, -0.017094f, -0.012849f, 0.025263f, 0.000455f, -0.009608f, 0.035913f, 0.042312f, -0.011189f, 0.011721f, -0.003410f, -0.012668f, 0.002142f, -0.028720f, -0.017954f, -0.001441f, -0.006093f, 0.056923f, -0.026060f, 0.007161f, -0.036661f, -0.005458f, 0.021737f, -0.009414f, -0.020613f, -0.021274f, -0.008186f, 0.008666f, 0.010824f, -0.001467f, -0.002291f, -0.023838f, 0.005122f, 0.016665f, 0.007904f, 0.010239f, 0.002514f, 0.003771f, -0.014458f, -0.004483f, 0.008742f, 0.003515f, -0.000628f, + 0.001176f, -0.017401f, 0.007623f, -0.018308f, -0.002680f, -0.001156f, 0.005347f, -0.020319f, -0.001771f, 0.008846f, 0.014346f, -0.023126f, -0.011391f, 0.038802f, -0.014873f, -0.032147f, 0.026672f, -0.026377f, -0.007565f, -0.012261f, -0.004063f, -0.020606f, -0.012982f, -0.005272f, -0.019045f, -0.029350f, 0.045962f, 0.023569f, 0.020953f, 0.012226f, -0.016708f, -0.008689f, -0.010861f, 0.010556f, -0.020134f, 0.012355f, -0.009915f, 0.002581f, -0.003535f, 0.058082f, -0.028532f, 0.024258f, -0.055193f, 0.012949f, -0.035706f, -0.008141f, 0.017248f, -0.003471f, 0.010448f, 0.018067f, 0.014144f, -0.025124f, 0.015698f, 0.001778f, 0.011165f, -0.006836f, 0.016153f, 0.014710f, -0.005335f, 0.001629f, 0.009041f, 0.010245f, -0.018859f, -0.007764f, -0.026728f, -0.004981f, 0.020394f, -0.001301f, -0.012176f, 0.000366f, 0.006484f, -0.000380f, -0.010796f, -0.019796f, 0.002861f, -0.014032f, 0.009865f, -0.013383f, 0.040876f, -0.005990f, -0.024826f, -0.028132f, 0.004205f, -0.016377f, 0.011714f, -0.031347f, -0.024611f, -0.031835f, 0.005155f, -0.027233f, -0.007691f, -0.038190f, 0.024069f, 0.003136f, 0.015624f, 0.008525f, + -0.040636f, 0.000791f, -0.005241f, -0.016777f, -0.023537f, -0.008162f, -0.020361f, -0.025557f, -0.014805f, 0.008648f, 0.013354f, 0.020290f, -0.015121f, 0.001191f, 0.007184f, -0.034270f, 0.011875f, -0.023097f, -0.049211f, -0.013801f, 0.056683f, 0.050117f, 0.028581f, -0.023418f, 0.025323f, 0.037554f, -0.023687f, 0.033194f, -0.025519f, 0.030643f, 0.008037f, -0.001638f, 0.010911f, -0.000306f, 0.016897f, -0.023573f, -0.005748f, -0.010518f, 0.013193f, -0.022429f, -0.019210f, 0.031983f, -0.001898f, -0.006530f, 0.004223f, -0.030709f, 0.000580f, 0.049480f, 0.028297f, 0.005569f, 0.000895f, 0.010427f, 0.048236f, 0.019804f, 0.002190f, 0.007649f, -0.011421f, -0.005869f, -0.009554f, 0.019736f, -0.008765f, 0.012982f, 0.004271f, 0.023495f, -0.026655f, -0.001212f, 0.000185f, 0.000031f, -0.006035f, 0.012612f, 0.023672f, -0.005983f, -0.003930f, 0.020771f, 0.004842f, 0.001577f, 0.051845f, 0.006514f, 0.003353f, -0.023996f, 0.012887f, -0.018349f, 0.026035f, -0.028114f, -0.019870f, 0.001735f, -0.019026f, -0.026677f, -0.032889f, 0.007913f, -0.006630f, 0.017142f, 0.001812f, 0.008636f, -0.040089f, 0.040178f, + -0.065395f, 0.025427f, 0.026610f, -0.046938f, -0.006008f, -0.040442f, -0.014218f, -0.036473f, -0.017170f, 0.038542f, -0.015034f, -0.004441f, -0.029469f, -0.006992f, 0.005161f, -0.043278f, -0.002920f, 0.025088f, -0.052809f, 0.000302f, -0.036454f, -0.020605f, -0.000556f, 0.002161f, -0.024553f, -0.020373f, -0.020767f, -0.007309f, -0.018020f, -0.002787f, 0.007715f, -0.006798f, 0.011853f, -0.026895f, -0.017240f, 0.031792f, -0.016919f, 0.016367f, -0.021187f, 0.017068f, 0.016113f, 0.001069f, 0.003420f, 0.015699f, -0.000367f, 0.023149f, 0.030576f, -0.008002f, 0.003494f, 0.045160f, 0.001581f, 0.022150f, -0.002945f, -0.020971f, -0.038491f, 0.004003f, 0.024564f, -0.043413f, -0.000792f, -0.026589f, -0.014080f, -0.055822f, 0.021556f, 0.032448f, -0.010753f, 0.014046f, -0.010335f, 0.035089f, 0.040391f, -0.006873f, -0.044126f, -0.044646f, 0.055298f, -0.049793f, 0.013158f, 0.002109f, 0.012103f, 0.069838f, 0.078729f, -0.004325f, -0.058642f, 0.058618f, -0.064119f, 0.009339f, 0.027888f, 0.006992f, -0.006381f, -0.029629f, 0.034122f, -0.014885f, -0.011423f, -0.030242f, -0.017014f, -0.009392f, -0.037207f, -0.020807f, + -0.016222f, -0.009474f, -0.005478f, 0.026270f, 0.000400f, 0.022666f, 0.000994f, -0.009937f, -0.032316f, -0.036497f, -0.008274f, -0.001513f, 0.000462f, -0.005746f, -0.012595f, -0.015973f, 0.018434f, 0.041556f, -0.021659f, 0.014063f, -0.013062f, -0.015045f, 0.017828f, -0.016674f, -0.025021f, 0.058270f, -0.005180f, 0.004840f, 0.004260f, -0.033467f, -0.005779f, -0.007580f, 0.018166f, -0.043190f, -0.017195f, 0.044039f, 0.008898f, -0.020011f, 0.026166f, 0.044584f, -0.024068f, -0.033270f, 0.018683f, -0.028512f, 0.002562f, -0.052410f, 0.018718f, 0.041699f, -0.002014f, 0.020703f, 0.015793f, 0.005317f, 0.052482f, 0.012783f, 0.002633f, 0.024715f, 0.001146f, -0.096543f, -0.068017f, 0.026649f, -0.029555f, -0.027853f, -0.082365f, -0.024579f, 0.016005f, 0.005539f, -0.017276f, -0.046240f, -0.001901f, 0.021731f, -0.003009f, 0.001991f, 0.022331f, 0.040960f, -0.037855f, 0.094669f, -0.026038f, -0.032867f, -0.011092f, -0.006438f, -0.001001f, -0.038941f, -0.000594f, -0.007700f, 0.018743f, -0.013812f, 0.027118f, -0.012853f, -0.025904f, 0.009006f, 0.010232f, -0.022728f, 0.022144f, -0.073891f, -0.001063f, -0.006775f, + 0.027427f, 0.034274f, -0.027226f, 0.031917f, -0.014379f, 0.008499f, -0.017526f, -0.006133f, -0.011546f, 0.025411f, -0.005480f, 0.033745f, 0.051976f, -0.047830f, -0.015277f, 0.024557f, -0.033915f, 0.018393f, -0.038344f, -0.020627f, -0.020417f, -0.021839f, -0.039410f, -0.019601f, 0.014228f, 0.013202f, 0.025015f, 0.035740f, 0.023051f, -0.045232f, 0.001534f, 0.007014f, 0.005816f, 0.007159f, 0.022371f, -0.017481f, 0.011054f, -0.022100f, -0.067155f, 0.046690f, -0.085317f, 0.056073f, -0.010568f, -0.039530f, -0.033889f, -0.037789f, -0.026127f, -0.021076f, -0.000347f, 0.040381f, -0.005581f, -0.038364f, 0.036041f, 0.051545f, -0.085010f, -0.024676f, 0.003731f, -0.009420f, -0.014973f, -0.006743f, -0.013523f, -0.017363f, -0.026107f, 0.028114f, -0.012770f, -0.025715f, -0.041423f, -0.041949f, 0.036704f, 0.007302f, -0.008998f, -0.007075f, -0.001871f, -0.011492f, -0.012412f, 0.005637f, -0.036585f, 0.015994f, 0.037658f, 0.026532f, 0.016567f, 0.034717f, 0.042083f, -0.028289f, 0.007564f, -0.039424f, 0.037503f, -0.025630f, -0.008208f, -0.003429f, -0.059006f, 0.015335f, 0.045478f, 0.004721f, -0.021043f, -0.019122f, + 0.060059f, -0.028236f, -0.028178f, 0.013860f, -0.064372f, -0.010821f, -0.032560f, -0.002116f, -0.062695f, 0.022291f, 0.009769f, 0.021941f, -0.100236f, -0.088405f, 0.014532f, -0.031333f, -0.017136f, 0.009749f, 0.077583f, -0.098184f, 0.108112f, 0.034745f, 0.000470f, 0.012800f, -0.071202f, 0.019782f, 0.039237f, -0.008912f, 0.092580f, -0.020909f, 0.042242f, -0.026806f, 0.101552f, 0.000964f, -0.009314f, -0.032811f, -0.009839f, 0.018870f, -0.006033f, 0.044294f, 0.034565f, -0.005645f, 0.006440f, -0.033613f, 0.018450f, 0.044118f, 0.043528f, -0.038334f, 0.021916f, -0.003535f, 0.046233f, -0.006397f, 0.031398f, -0.020442f, -0.016283f, -0.052457f, 0.007731f, -0.031211f, -0.050193f, 0.082182f, -0.030142f, -0.001191f, -0.010705f, -0.012719f, 0.014344f, 0.012167f, 0.031151f, -0.006870f, 0.045774f, 0.010005f, 0.079824f, 0.035289f, 0.088028f, 0.077550f, -0.002649f, 0.054153f, 0.040961f, -0.005749f, 0.047594f, 0.065127f, -0.019853f, -0.050826f, 0.038529f, 0.028920f, 0.053476f, 0.032180f, 0.001950f, 0.007538f, -0.054421f, 0.002648f, -0.008848f, -0.013299f, 0.096125f, 0.003866f, 0.034463f, 0.033463f, + -0.069782f, 0.138885f, -0.016892f, -0.013653f, -0.007000f, 0.101438f, -0.059534f, 0.051645f, -0.065323f, 0.065146f, 0.014713f, -0.010898f, 0.003494f, 0.038739f, -0.014113f, 0.036192f, -0.014217f, 0.001117f, 0.072092f, 0.022910f, -0.015981f, 0.001096f, 0.019519f, 0.015098f, -0.065999f, 0.019448f, -0.022716f, -0.004915f, -0.033760f, 0.035901f, 0.035085f, 0.006331f, 0.017780f, 0.059723f, -0.017251f, -0.092081f, 0.024499f, 0.062146f, -0.021424f, -0.060215f, 0.018546f, 0.044764f, 0.017082f, 0.001055f, -0.071110f, -0.034223f, -0.041146f, 0.041782f, 0.018899f, 0.043007f, -0.086037f, 0.006621f, -0.013940f, -0.096711f, -0.022956f, 0.015356f, 0.046599f, 0.062545f, -0.030411f, 0.115992f, 0.024659f, 0.003145f, -0.021474f, -0.045118f, -0.029967f, 0.023093f, -0.051286f, 0.110012f, -0.032934f, 0.006478f, 0.065542f, -0.039627f, 0.040086f, -0.037557f, -0.023218f, 0.095934f, -0.032566f, -0.080489f, 0.046272f, 0.029620f, 0.046317f, -0.018266f, -0.012796f, 0.018738f, 0.000456f, 0.005359f, 0.002081f, 0.009120f, 0.002569f, -0.012712f, 0.060018f, -0.013964f, -0.040620f, 0.017281f, -0.000578f, -0.036309f, + 0.013137f, 0.008194f, 0.025172f, -0.016895f, -0.026757f, 0.029193f, -0.023010f, -0.003514f, -0.006350f, 0.023844f, -0.040931f, 0.013868f, -0.025067f, 0.020726f, -0.035879f, 0.012614f, -0.011433f, 0.005846f, 0.081395f, -0.055855f, 0.011466f, 0.017155f, -0.048851f, 0.017507f, 0.024075f, -0.037592f, -0.006561f, -0.014825f, 0.068128f, 0.004931f, -0.076143f, 0.045606f, -0.061240f, 0.010606f, 0.033804f, -0.030838f, 0.038544f, -0.045670f, -0.035393f, 0.050043f, -0.006977f, 0.020766f, -0.074479f, 0.013422f, 0.018408f, -0.004892f, -0.009690f, -0.001426f, 0.033222f, 0.000489f, -0.098905f, 0.060996f, -0.003486f, 0.023654f, -0.023036f, -0.029556f, 0.102458f, 0.005234f, 0.034075f, -0.017315f, -0.203540f, -0.428395f, -0.173420f, -0.323505f, -0.393224f, 0.133832f, -0.005698f, 0.137415f, 0.533525f, 0.465626f, 0.263012f, 0.510669f, 0.282811f, 0.028610f, 0.173729f, 0.105666f, -0.198664f, -0.141220f, -0.044525f, -0.219301f, -0.264839f, -0.090322f, -0.136009f, -0.209874f, -0.055746f, -0.012642f, -0.266690f, -0.184279f, -0.031140f, -0.162765f, -0.210452f, -0.063088f, -0.104980f, -0.227485f, -0.046485f, 0.020542f, + -0.129249f, -0.098254f, 0.092180f, -0.035988f, -0.137931f, 0.026980f, 0.087146f, -0.067722f, 0.052840f, 0.196445f, -0.030594f, -0.052472f, 0.193727f, 0.104804f, -0.049299f, 0.325286f, 0.440098f, 0.276439f, 0.464917f, 0.697823f, 0.535909f, 0.513360f, 0.745839f, 0.650861f, 0.478885f, 0.590955f, 0.535874f, 0.349197f, 0.308019f, 0.177718f, -0.040048f, -0.207534f, -0.392995f, -0.554872f, -0.668770f, -0.827554f, -0.887498f, -0.903782f, -1.015445f, -0.782287f, -0.328791f, -0.239100f}, + {0.015411f, -0.004835f, 0.003598f, 0.002703f, -0.005164f, 0.006210f, 0.004807f, -0.001574f, 0.008486f, -0.000062f, 0.003607f, -0.012048f, 0.004522f, 0.004561f, -0.006273f, 0.012698f, 0.001577f, 0.006213f, -0.000874f, -0.001550f, 0.000757f, 0.008771f, 0.009662f, -0.009656f, -0.003025f, -0.004316f, 0.006311f, -0.003000f, -0.002298f, 0.001390f, -0.005192f, -0.008012f, 0.004325f, -0.007579f, 0.004329f, 0.004266f, 0.004248f, -0.000168f, 0.002384f, -0.000085f, 0.006220f, -0.002180f, 0.000959f, -0.006256f, -0.001556f, -0.011929f, -0.005601f, 0.001504f, 0.004265f, -0.000517f, 0.005970f, -0.000565f, 0.003038f, -0.007430f, 0.002075f, 0.003668f, 0.004347f, 0.001095f, -0.003381f, 0.000296f, -0.001629f, 0.002803f, 0.003272f, 0.001405f, -0.000289f, -0.002635f, -0.001525f, 0.006098f, -0.001585f, 0.002727f, 0.005248f, 0.003306f, -0.002841f, 0.006124f, 0.000130f, 0.001911f, -0.001890f, -0.013352f, 0.000381f, 0.010588f, 0.007286f, 0.007307f, 0.004615f, 0.002884f, -0.004168f, 0.000127f, -0.004740f, 0.011309f, 0.006969f, 0.002682f, 0.001674f, 0.001592f, -0.000103f, -0.003641f, 0.005617f, 0.007751f, + 0.007556f, 0.004537f, -0.005655f, -0.008306f, -0.008955f, -0.008633f, -0.000825f, 0.004401f, -0.008735f, 0.007285f, -0.001681f, 0.012787f, -0.002042f, 0.008092f, 0.000222f, -0.010754f, 0.003179f, -0.001459f, 0.008769f, 0.000508f, -0.000858f, -0.004444f, -0.007142f, 0.000567f, 0.004308f, -0.009462f, -0.012612f, 0.008855f, -0.007203f, -0.006931f, -0.006217f, 0.004951f, -0.004831f, 0.002056f, -0.001991f, -0.000718f, -0.007230f, -0.002360f, -0.004786f, -0.007576f, 0.002856f, 0.005758f, -0.001734f, -0.008303f, -0.001131f, -0.001716f, -0.003599f, -0.007139f, 0.000068f, -0.005769f, -0.006118f, -0.001142f, 0.001316f, 0.001808f, -0.001296f, 0.001423f, 0.000008f, 0.025178f, -0.008730f, -0.005689f, -0.007782f, -0.005314f, 0.000627f, -0.016743f, 0.002875f, -0.008267f, -0.016425f, -0.003437f, 0.014136f, -0.010060f, 0.002776f, -0.001107f, 0.004755f, 0.007224f, 0.007642f, 0.012426f, -0.002625f, -0.006951f, 0.003153f, 0.003093f, -0.005654f, -0.000693f, -0.003822f, -0.002357f, 0.001514f, -0.006328f, -0.004049f, -0.000792f, -0.008153f, -0.009401f, 0.004872f, 0.007557f, -0.004400f, -0.010808f, -0.001947f, -0.002388f, + 0.001530f, 0.009074f, 0.000558f, -0.003466f, -0.000625f, 0.012105f, 0.001442f, -0.007034f, -0.007055f, 0.003328f, 0.002200f, 0.009751f, 0.005329f, -0.000338f, -0.009119f, 0.000808f, -0.000605f, 0.008104f, -0.008416f, -0.002459f, 0.004486f, 0.009408f, -0.002655f, 0.001188f, -0.006972f, -0.003440f, 0.004062f, 0.000694f, 0.000725f, 0.002914f, -0.002854f, 0.003773f, 0.000748f, 0.004521f, 0.002194f, 0.002032f, 0.015335f, 0.004952f, -0.018520f, -0.004415f, -0.008779f, 0.008360f, 0.002065f, 0.000119f, 0.005936f, -0.003653f, -0.014323f, -0.007608f, 0.009410f, -0.000611f, 0.009699f, -0.000822f, -0.005583f, 0.010717f, 0.004008f, 0.023608f, -0.004518f, 0.010186f, 0.001450f, -0.011286f, 0.002762f, -0.009609f, 0.006095f, 0.002051f, 0.002368f, -0.010273f, 0.005025f, -0.001905f, -0.003634f, 0.004016f, 0.016093f, 0.005848f, -0.000143f, -0.013117f, 0.011182f, -0.002540f, -0.000003f, 0.007765f, -0.011840f, -0.002398f, 0.008068f, -0.005028f, -0.004268f, -0.013523f, -0.014595f, -0.001344f, 0.008723f, 0.004924f, -0.005910f, -0.000439f, 0.005639f, 0.006879f, 0.002756f, -0.001805f, -0.002918f, -0.013107f, + 0.005857f, 0.015456f, 0.007050f, -0.005022f, -0.002429f, 0.004512f, 0.007333f, -0.001177f, -0.002650f, 0.001208f, -0.010855f, -0.002760f, -0.007832f, -0.004453f, -0.001350f, -0.005867f, 0.011054f, 0.008503f, -0.004962f, -0.014224f, 0.015127f, -0.013706f, 0.013782f, -0.000490f, -0.011638f, -0.026954f, -0.010835f, -0.007989f, 0.003626f, 0.013591f, 0.010556f, -0.003708f, -0.002495f, -0.003590f, -0.007986f, -0.002543f, -0.008929f, 0.002598f, 0.002803f, 0.004944f, 0.008417f, 0.004863f, 0.016424f, -0.000280f, 0.003041f, -0.006237f, -0.001727f, -0.004326f, 0.005821f, 0.001545f, -0.008143f, -0.011600f, 0.000127f, -0.008411f, 0.000683f, 0.007368f, -0.013101f, 0.008705f, -0.021815f, -0.006200f, -0.016263f, 0.002453f, -0.001299f, 0.000008f, -0.006560f, -0.008677f, 0.002673f, 0.007377f, 0.005159f, 0.001787f, -0.013104f, 0.003695f, -0.009134f, -0.003568f, -0.002817f, -0.017640f, -0.007082f, 0.005065f, 0.006498f, -0.000744f, -0.012267f, 0.001949f, 0.004340f, -0.002424f, -0.002599f, 0.001371f, 0.010283f, 0.003714f, -0.002514f, -0.003382f, 0.001709f, -0.024893f, 0.001683f, 0.006253f, 0.005809f, 0.016687f, + 0.017864f, -0.004444f, 0.000346f, 0.011793f, -0.005949f, -0.005602f, 0.017654f, -0.013324f, -0.031499f, -0.020724f, -0.012093f, 0.019018f, 0.008228f, 0.002639f, -0.018164f, 0.019382f, -0.008200f, 0.005419f, -0.004847f, 0.007586f, 0.009513f, -0.000810f, 0.000429f, -0.000227f, -0.002952f, -0.010092f, -0.007876f, -0.002545f, 0.001272f, 0.008704f, 0.005216f, 0.013635f, 0.006803f, -0.006130f, -0.002956f, 0.012091f, -0.008557f, 0.014852f, -0.011748f, 0.003046f, 0.006867f, 0.004054f, -0.009460f, 0.013012f, -0.001000f, 0.013975f, 0.019045f, 0.002601f, -0.007180f, -0.007560f, 0.008241f, -0.009343f, -0.018721f, -0.005271f, 0.004333f, -0.012619f, 0.007317f, 0.005223f, -0.003711f, -0.008083f, -0.002888f, -0.003442f, 0.004028f, -0.002066f, -0.010356f, -0.004755f, 0.018896f, 0.014127f, 0.008398f, -0.022946f, -0.021279f, -0.012884f, 0.021216f, 0.009262f, -0.001136f, 0.001193f, -0.009185f, 0.002344f, 0.008189f, 0.012395f, -0.001457f, 0.004320f, -0.021388f, -0.007723f, 0.002663f, 0.006318f, -0.026342f, -0.003594f, 0.010322f, -0.008482f, -0.017379f, 0.009624f, -0.020094f, -0.014998f, -0.008386f, 0.000922f, + -0.007733f, -0.005566f, -0.001317f, 0.013631f, -0.012928f, 0.002410f, -0.004560f, -0.005885f, -0.010979f, -0.003645f, -0.015712f, -0.005287f, -0.001105f, 0.002064f, -0.011173f, -0.003035f, -0.007283f, 0.000136f, -0.004024f, -0.005494f, 0.002134f, 0.011028f, 0.002395f, -0.007020f, 0.005285f, -0.009903f, -0.002850f, 0.002615f, -0.004036f, 0.005044f, -0.002505f, -0.001544f, -0.042306f, 0.001881f, -0.015016f, 0.006159f, 0.005508f, 0.008297f, -0.023486f, -0.024389f, 0.002675f, -0.000161f, 0.005012f, -0.000866f, 0.012060f, -0.006139f, 0.006395f, 0.007264f, -0.004359f, 0.018364f, -0.006431f, -0.014182f, -0.002944f, -0.012242f, -0.000497f, -0.023063f, 0.000242f, 0.007114f, 0.016392f, -0.032395f, 0.008977f, 0.001573f, 0.009318f, 0.013282f, 0.002668f, -0.012509f, -0.027460f, 0.002092f, -0.010896f, 0.021181f, -0.008237f, 0.004417f, 0.001906f, 0.004546f, 0.016307f, -0.007015f, -0.000073f, -0.007397f, -0.003725f, 0.004116f, -0.003559f, 0.014862f, 0.011599f, 0.003092f, -0.002669f, 0.000077f, 0.010516f, -0.001189f, 0.005368f, -0.000424f, -0.007676f, 0.007056f, -0.001532f, -0.006436f, 0.009437f, 0.014650f, + 0.000673f, 0.005502f, 0.001702f, -0.010311f, -0.005510f, 0.017723f, -0.008069f, 0.008201f, 0.013954f, -0.018087f, 0.013271f, 0.006097f, 0.007134f, -0.008453f, 0.013643f, 0.002964f, -0.001386f, 0.015608f, 0.001469f, -0.001103f, -0.006803f, -0.005386f, 0.000915f, -0.008306f, -0.016607f, -0.005882f, 0.018931f, 0.012105f, 0.015789f, -0.003276f, -0.014493f, 0.004573f, 0.019939f, -0.005750f, -0.012145f, -0.003433f, -0.008130f, -0.006079f, 0.000003f, -0.015200f, -0.004280f, -0.024685f, -0.007003f, -0.014214f, -0.016768f, -0.015933f, -0.005425f, 0.022013f, 0.024005f, 0.032873f, 0.007618f, -0.012236f, -0.007340f, 0.027227f, 0.000228f, -0.006106f, 0.021034f, -0.001986f, 0.001241f, -0.032173f, 0.014968f, 0.008291f, -0.021237f, 0.030047f, -0.003820f, 0.013561f, -0.003282f, 0.007135f, 0.013645f, 0.000123f, 0.023854f, 0.009089f, 0.007021f, -0.002663f, -0.007983f, 0.002296f, 0.014589f, -0.003798f, 0.004577f, 0.006671f, 0.019203f, -0.000904f, -0.005369f, 0.012113f, -0.013949f, -0.009042f, 0.006784f, 0.020721f, -0.008913f, -0.011280f, -0.003220f, 0.017001f, 0.000444f, 0.002241f, -0.006140f, -0.003150f, + 0.006401f, 0.008791f, 0.001020f, -0.007700f, -0.023540f, 0.002470f, 0.007133f, 0.022193f, 0.006655f, -0.002271f, 0.017373f, 0.030491f, -0.006446f, 0.010288f, 0.007137f, 0.012208f, -0.002862f, -0.011583f, 0.005583f, -0.027563f, 0.040277f, -0.019271f, 0.009710f, -0.000803f, -0.012904f, 0.030808f, 0.007863f, 0.004377f, -0.031098f, 0.008895f, -0.011915f, -0.013903f, 0.004362f, -0.013568f, 0.016970f, 0.010343f, -0.001848f, 0.003803f, -0.006924f, -0.002968f, -0.010675f, -0.006901f, -0.012979f, -0.020948f, -0.004332f, -0.014507f, -0.003047f, 0.008698f, -0.005058f, -0.007584f, 0.018063f, 0.011192f, 0.018158f, -0.013510f, -0.000465f, -0.002329f, -0.014231f, 0.000628f, -0.006989f, -0.037820f, 0.004582f, 0.001156f, -0.004649f, 0.013745f, -0.000070f, 0.015112f, 0.013785f, 0.005035f, 0.024458f, 0.020947f, -0.018764f, -0.005099f, 0.001707f, -0.000298f, 0.008808f, 0.003209f, 0.021261f, -0.003725f, 0.033036f, 0.000425f, -0.016615f, -0.014493f, 0.004319f, 0.006146f, 0.008418f, 0.023268f, 0.008090f, 0.006262f, 0.023585f, 0.029099f, 0.003441f, -0.016727f, -0.014286f, -0.000628f, -0.003620f, -0.002536f, + 0.030188f, 0.024598f, 0.002691f, 0.016850f, -0.016628f, 0.008676f, 0.002295f, -0.000463f, 0.011471f, 0.025933f, -0.006006f, -0.001455f, 0.024044f, -0.029742f, -0.016087f, -0.012530f, -0.034045f, 0.007694f, -0.010119f, -0.004118f, 0.005210f, -0.023081f, 0.027212f, 0.020563f, 0.028866f, 0.013296f, -0.016236f, 0.002457f, 0.002219f, 0.021635f, -0.002708f, 0.000159f, 0.000364f, -0.012084f, 0.002250f, -0.006751f, 0.012888f, -0.012848f, -0.003887f, -0.003748f, -0.004578f, -0.015161f, 0.008958f, -0.022631f, -0.002128f, -0.000717f, 0.016329f, 0.009730f, 0.003585f, 0.001264f, -0.002424f, 0.002777f, 0.002025f, 0.013386f, 0.004756f, 0.004732f, 0.000081f, -0.035615f, -0.014946f, 0.005621f, 0.017656f, 0.019784f, -0.026290f, 0.020943f, 0.008589f, -0.009560f, 0.005962f, 0.008330f, -0.003239f, 0.030423f, 0.004435f, 0.008349f, -0.001616f, -0.035133f, -0.007130f, -0.012293f, 0.003904f, 0.035115f, 0.004739f, 0.013576f, -0.022780f, -0.020748f, 0.010329f, 0.017712f, 0.001199f, -0.007689f, 0.033694f, 0.009854f, -0.000846f, -0.010671f, 0.006575f, -0.003759f, -0.004805f, -0.002367f, -0.006923f, 0.000538f, + -0.012490f, -0.028596f, 0.008128f, 0.001739f, 0.007461f, 0.001639f, 0.014378f, 0.003559f, -0.017360f, -0.034593f, -0.000011f, 0.001403f, -0.003560f, -0.030416f, -0.015155f, -0.005518f, 0.007377f, -0.007509f, 0.002471f, -0.026747f, 0.000458f, -0.006838f, -0.000602f, 0.001462f, 0.006376f, -0.003871f, -0.024836f, -0.023291f, -0.014507f, 0.008225f, 0.006245f, -0.007000f, -0.005613f, -0.039755f, -0.022447f, -0.001841f, -0.038227f, 0.033681f, -0.036060f, -0.010795f, -0.023437f, 0.036263f, 0.011647f, -0.027160f, 0.012998f, -0.003904f, 0.014004f, -0.023117f, -0.007329f, 0.000345f, 0.015405f, -0.021641f, -0.007999f, -0.007288f, -0.020824f, 0.002140f, 0.015221f, 0.000117f, -0.003944f, 0.029952f, 0.067723f, -0.011217f, -0.023648f, -0.022178f, -0.019922f, -0.027580f, 0.002267f, -0.045661f, -0.002408f, -0.035685f, -0.017736f, 0.008702f, 0.019198f, 0.010477f, -0.017389f, -0.003809f, 0.018090f, -0.003085f, 0.021175f, -0.015607f, -0.016303f, -0.014069f, 0.008745f, -0.009822f, -0.012993f, 0.002116f, -0.015159f, -0.014647f, 0.013432f, 0.035818f, 0.011654f, 0.014415f, 0.004568f, -0.023613f, -0.007801f, -0.019449f, + -0.019539f, -0.004245f, -0.005764f, -0.015605f, -0.025270f, -0.046745f, -0.007071f, -0.017956f, 0.002929f, -0.009897f, 0.013919f, 0.014148f, 0.005805f, 0.014872f, 0.008352f, -0.003311f, 0.028329f, 0.043569f, 0.007348f, -0.054508f, 0.007172f, -0.011134f, -0.034731f, 0.002605f, 0.011186f, 0.005741f, -0.002833f, 0.012660f, -0.005330f, -0.027200f, -0.003271f, 0.009764f, -0.030533f, -0.015716f, -0.029605f, -0.046740f, 0.027514f, 0.001151f, -0.001596f, 0.050077f, -0.039199f, 0.043079f, -0.004875f, -0.006658f, -0.023714f, -0.009717f, -0.023537f, -0.020484f, 0.022636f, -0.022542f, 0.011214f, 0.051710f, 0.018773f, -0.009436f, -0.025005f, -0.021763f, 0.022773f, -0.021060f, -0.033785f, -0.015241f, 0.002446f, 0.001364f, -0.038400f, 0.000824f, -0.012263f, 0.017653f, -0.012717f, -0.002526f, 0.003489f, 0.053894f, -0.014376f, -0.020010f, 0.026305f, -0.023832f, 0.031775f, -0.021391f, 0.023048f, 0.001573f, -0.018071f, -0.018328f, 0.029479f, -0.041815f, 0.028982f, -0.019684f, 0.002209f, -0.012337f, 0.015424f, -0.016673f, -0.007805f, -0.003859f, -0.012983f, 0.053524f, -0.017379f, 0.035157f, 0.014079f, 0.013794f, + -0.001382f, 0.010346f, 0.023778f, 0.023218f, -0.009021f, -0.032390f, -0.001368f, 0.017311f, 0.007557f, -0.010650f, -0.036251f, 0.038185f, -0.012173f, -0.039028f, -0.011828f, -0.029403f, 0.009245f, 0.004961f, -0.058765f, -0.025410f, 0.035169f, -0.007618f, -0.015163f, 0.040949f, 0.003449f, -0.022128f, 0.015222f, 0.022031f, 0.018650f, 0.002427f, -0.036327f, -0.015367f, 0.004970f, 0.004717f, 0.018227f, 0.011813f, 0.020629f, -0.018877f, -0.014931f, 0.006507f, -0.005445f, 0.016722f, -0.034149f, -0.006296f, -0.036895f, -0.012380f, 0.006138f, -0.005631f, -0.005027f, 0.038358f, 0.007674f, -0.029514f, -0.004822f, 0.001680f, -0.029949f, -0.004652f, 0.001020f, 0.017076f, 0.044396f, -0.016585f, 0.014565f, -0.025712f, 0.003354f, -0.015434f, -0.019358f, 0.017532f, 0.038788f, -0.031825f, 0.002597f, 0.034132f, -0.016176f, -0.004040f, -0.013514f, 0.022007f, 0.005105f, -0.029277f, -0.000762f, -0.010852f, -0.009635f, -0.003809f, -0.014378f, 0.020110f, -0.050642f, 0.009518f, 0.003746f, -0.022311f, 0.027639f, 0.041830f, 0.029939f, 0.080752f, 0.024390f, -0.022552f, -0.029667f, -0.025599f, -0.013619f, 0.036505f, + -0.100088f, -0.008132f, 0.050202f, -0.077039f, -0.007716f, 0.010006f, -0.079563f, 0.029342f, 0.004699f, 0.055919f, -0.010513f, 0.016984f, 0.013218f, -0.070407f, -0.059323f, -0.025622f, -0.009934f, -0.037408f, -0.045375f, -0.025860f, 0.032859f, 0.022010f, 0.017975f, -0.001950f, -0.000639f, 0.007471f, -0.002621f, -0.052440f, -0.023005f, -0.066098f, -0.024815f, 0.029924f, 0.005023f, 0.018695f, 0.072151f, 0.015514f, 0.023826f, -0.005928f, 0.009918f, 0.063464f, 0.045588f, 0.009442f, 0.027777f, 0.025943f, 0.062019f, 0.050866f, -0.080469f, 0.041260f, -0.010645f, 0.039116f, 0.038514f, 0.013337f, 0.074714f, 0.066509f, -0.047156f, 0.029805f, -0.008244f, 0.027859f, -0.067903f, -0.000696f, -0.002249f, -0.004667f, -0.022866f, 0.030485f, 0.030830f, -0.047662f, -0.024626f, -0.032044f, 0.001828f, -0.042667f, -0.055459f, 0.027192f, 0.047691f, 0.010543f, 0.043803f, -0.036338f, -0.029891f, 0.045062f, 0.080695f, -0.010329f, -0.108449f, -0.034339f, 0.011961f, -0.008018f, -0.017234f, -0.023500f, 0.001318f, -0.062038f, -0.036447f, -0.051471f, -0.007283f, -0.014782f, 0.018467f, -0.036689f, -0.009399f, 0.010304f, + 0.018686f, -0.000139f, 0.020725f, 0.038015f, 0.009313f, 0.054704f, -0.033478f, 0.013344f, 0.003898f, 0.052153f, 0.015444f, -0.010011f, -0.050407f, 0.034940f, -0.006959f, 0.047535f, -0.037618f, -0.031484f, -0.027824f, -0.015969f, -0.045745f, -0.006543f, -0.005689f, -0.045320f, 0.027848f, 0.051764f, -0.021966f, 0.007723f, -0.063861f, 0.064585f, -0.016849f, -0.035102f, 0.033252f, 0.025803f, -0.034295f, 0.003364f, -0.019486f, 0.008442f, -0.012687f, 0.080746f, 0.002324f, -0.007011f, -0.014063f, 0.142442f, 0.010151f, -0.019633f, 0.068407f, 0.048564f, -0.043492f, 0.039608f, -0.053798f, -0.036822f, -0.054697f, 0.047664f, -0.030821f, 0.017288f, -0.032541f, -0.148662f, 0.008733f, 0.092581f, -0.058779f, -0.039862f, 0.074070f, -0.056995f, -0.005297f, -0.017525f, 0.071051f, -0.126824f, 0.068159f, 0.039562f, -0.036937f, 0.011133f, 0.066574f, 0.046800f, -0.025550f, 0.025939f, 0.010875f, -0.021000f, 0.030459f, -0.002672f, 0.017833f, 0.027535f, -0.014215f, 0.005117f, -0.004797f, 0.012050f, -0.019685f, -0.016615f, -0.002757f, 0.023272f, -0.075688f, -0.038775f, 0.035257f, -0.010440f, -0.050720f, -0.060160f, + 0.008451f, 0.070038f, -0.032923f, -0.048300f, 0.033890f, 0.051656f, -0.013401f, 0.011325f, -0.011155f, 0.047926f, -0.028900f, 0.072961f, -0.011859f, -0.002126f, 0.039492f, -0.001409f, 0.007722f, -0.055718f, 0.082132f, -0.045705f, -0.054476f, 0.037560f, -0.057666f, -0.020709f, 0.007300f, 0.025469f, 0.075308f, -0.029802f, 0.045908f, -0.012103f, 0.022607f, -0.133599f, -0.103520f, -0.020692f, -0.042502f, 0.017588f, -0.015312f, -0.053727f, -0.027629f, 0.031141f, -0.065692f, 0.054987f, -0.056572f, -0.070158f, 0.032404f, -0.036519f, -0.025792f, 0.032685f, -0.032765f, 0.026403f, -0.026673f, 0.009475f, 0.069155f, -0.071044f, -0.009095f, -0.015386f, 0.057638f, 0.002950f, 0.001562f, -0.064383f, -0.059522f, -0.025240f, -0.020365f, -0.014278f, -0.022009f, 0.005150f, -0.000925f, -0.011907f, 0.005052f, 0.007294f, 0.002284f, 0.004211f, -0.015420f, 0.022739f, -0.022815f, 0.021364f, -0.056352f, -0.004624f, -0.046372f, -0.061632f, -0.036350f, 0.066352f, -0.035401f, -0.039134f, -0.027758f, 0.009665f, -0.018382f, 0.025200f, 0.043651f, -0.057332f, 0.040817f, 0.000143f, -0.072466f, -0.042567f, 0.138514f, 0.065300f, + -0.111380f, -0.029101f, 0.064871f, -0.043963f, -0.042908f, 0.017801f, -0.037578f, -0.084852f, 0.049830f, 0.013212f, -0.105088f, 0.029445f, 0.047046f, -0.073432f, -0.044851f, 0.043345f, -0.024624f, 0.091827f, 0.128941f, -0.048000f, 0.143982f, -0.008517f, -0.036462f, -0.027254f, -0.045715f, -0.001236f, 0.025949f, 0.086405f, 0.004969f, 0.028673f, -0.019190f, -0.069031f, 0.003316f, 0.005738f, 0.049373f, 0.012200f, -0.052650f, 0.104525f, -0.041519f, 0.022261f, 0.047171f, -0.047036f, -0.039385f, -0.068498f, -0.030040f, 0.048108f, 0.056876f, 0.072209f, -0.024513f, -0.163795f, 0.038428f, 0.091430f, 0.113370f, 0.100458f, -0.000402f, -0.043846f, -0.058460f, 0.024534f, 0.058123f, -0.032118f, -0.018504f, -0.143976f, -0.090277f, 0.084479f, 0.134902f, 0.032365f, -0.003202f, -0.027624f, -0.058390f, -0.008615f, 0.037509f, -0.046653f, 0.020498f, -0.001827f, 0.084889f, 0.002166f, 0.032941f, -0.159993f, -0.021455f, 0.008416f, 0.101440f, 0.085780f, -0.002947f, -0.042581f, -0.014830f, 0.129045f, 0.053352f, -0.134038f, -0.178453f, -0.059571f, 0.032782f, 0.284702f, 0.026446f, -0.035117f, 0.035627f, 0.013451f, + -0.023511f, 0.057841f, -0.067765f, 0.001475f, -0.027485f, 0.014895f, -0.042045f, 0.038429f, 0.010511f, -0.022948f, -0.042313f, -0.021445f, -0.008194f, 0.011416f, -0.057552f, 0.012371f, -0.028223f, -0.011850f, -0.045000f, -0.022113f, 0.036413f, -0.039322f, -0.013509f, -0.006307f, 0.017905f, 0.010966f, -0.014773f, 0.019509f, -0.032672f, -0.003783f, 0.000685f, 0.016445f, -0.021199f, 0.029991f, 0.023748f, -0.025083f, -0.027034f, -0.011881f, 0.045010f, -0.033416f, 0.014679f, 0.031555f, 0.008089f, -0.033713f, -0.011514f, 0.012269f, -0.019300f, 0.013352f, 0.002472f, 0.005541f, -0.028616f, 0.004460f, -0.022948f, -0.002918f, 0.023830f, 0.026430f, 0.023586f, -0.018466f, 0.022725f, 0.000518f, -0.024615f, -0.006189f, 0.001945f, 0.029181f, -0.006431f, 0.004119f, 0.029958f, -0.008614f, -0.032925f, 0.047105f, -0.017051f, 0.026608f, 0.025469f, 0.002343f, 0.011644f, -0.021523f, -0.016385f, -0.053199f, 0.102672f, 0.010360f, 0.006617f, -0.039875f, 0.024606f, -0.002270f, 0.027678f, 0.021534f, 0.032195f, 0.004685f, 0.008917f, -0.016288f, 0.005998f, 0.029892f, -0.001889f, 0.016972f, -0.001599f, 0.006334f, + 0.007190f, 0.012981f, -0.011284f, 0.023059f, -0.013936f, 0.003434f, -0.001597f, 0.008818f, -0.001184f, 0.005862f, 0.017182f, 0.019600f, -0.008034f, 0.009545f, 0.004180f, -0.002428f, -0.007131f, 0.025698f, -0.006801f, 0.006777f, -0.006284f, 0.014305f, 0.000445f, -0.009752f, 0.024655f, -0.013211f, -0.004758f, 0.008273f, -0.010971f, -0.004969f, -0.003177f, 0.002971f, -0.004048f, 0.002439f, -0.002067f, -0.004153f, 0.008409f, -0.013394f, 0.009942f, 0.008901f, -0.005269f, 0.012653f, -0.007867f, 0.014660f, -0.006423f, 0.004916f, 0.002144f, -0.004633f, 0.011634f, 0.002930f, 0.001071f, -0.000615f, 0.015306f, -0.015646f, 0.019147f, -0.010208f, 0.000195f, 0.009367f, 0.019110f, -0.093018f, -0.231172f, 0.035597f, 0.175452f, 0.163079f, 0.282991f, -0.072566f, -0.076245f, -0.193157f, -0.263831f, -0.054517f, 0.094834f, 0.101754f, 0.191540f, 0.104126f, 0.007767f, -0.050003f, -0.134519f, -0.095414f, -0.016958f, -0.015024f, 0.047241f, 0.044217f, 0.025074f, 0.016281f, 0.012321f, -0.007117f, -0.033511f, -0.002583f, 0.037454f, 0.000283f, 0.007396f, -0.002165f, -0.029158f, -0.021808f, -0.049168f, -0.047481f, + 0.020897f, 0.019975f, 0.043419f, 0.067164f, 0.049552f, 0.024676f, 0.008174f, -0.072237f, -0.051921f, -0.039434f, -0.040422f, -0.044065f, 0.008504f, 0.028468f, 0.048339f, 0.062971f, 0.051126f, 0.011607f, -0.006877f, -0.041254f, -0.043201f, -0.024854f, -0.013018f, 0.004504f, 0.006305f, 0.014553f, 0.000597f, -0.013016f, 0.004044f, -0.021007f, 0.010881f, 0.019261f, 0.001900f, 0.037985f, 0.044796f, 0.015386f, -0.007376f, -0.046282f, -0.059850f, -0.015115f, -0.000186f, -0.001366f} + }, + { + {0.013420f, -0.000209f, 0.005181f, 0.005615f, 0.001992f, 0.002040f, 0.002951f, 0.004505f, 0.008385f, 0.003966f, -0.000592f, -0.003196f, 0.000563f, -0.004413f, -0.004280f, 0.000795f, -0.000774f, 0.001794f, -0.000829f, -0.001739f, -0.004675f, 0.006127f, 0.001248f, -0.000221f, -0.008309f, 0.000727f, 0.005836f, 0.008334f, -0.005496f, -0.001211f, -0.001522f, 0.004249f, -0.000613f, -0.000284f, 0.001900f, 0.000669f, -0.001158f, 0.003107f, -0.003384f, 0.001505f, -0.008440f, -0.006124f, 0.002785f, 0.003340f, 0.012023f, -0.004514f, -0.004511f, -0.002546f, 0.004971f, -0.003818f, -0.007079f, -0.004891f, -0.008346f, 0.000921f, -0.005535f, 0.005018f, 0.006468f, 0.001583f, 0.002777f, -0.003821f, 0.002505f, -0.000577f, -0.009330f, 0.010984f, 0.007395f, 0.005305f, 0.001905f, -0.003562f, -0.001580f, 0.004679f, -0.002822f, 0.001426f, 0.000530f, 0.000330f, -0.000813f, -0.002734f, -0.007743f, -0.010960f, -0.000232f, 0.002290f, 0.001724f, 0.007665f, 0.000941f, -0.001047f, -0.005079f, 0.011303f, 0.006971f, 0.000269f, -0.001474f, 0.011222f, 0.003779f, -0.003726f, -0.009996f, 0.006230f, -0.002921f, 0.004811f, + -0.009510f, 0.000495f, -0.002313f, -0.007142f, -0.001953f, -0.003655f, -0.001352f, 0.000415f, 0.000006f, -0.005247f, -0.003181f, -0.000942f, -0.001018f, -0.003316f, 0.003385f, -0.000461f, -0.003430f, 0.005937f, -0.010120f, -0.004933f, 0.004814f, -0.006210f, 0.000832f, -0.003913f, -0.005544f, 0.003622f, 0.003435f, -0.003131f, 0.003812f, 0.007151f, 0.004143f, -0.003956f, -0.004401f, 0.000629f, 0.001484f, -0.004647f, 0.004902f, 0.007879f, -0.006805f, -0.002391f, 0.004056f, 0.002765f, -0.001532f, -0.002323f, -0.003230f, 0.004208f, 0.001509f, -0.005584f, 0.006251f, 0.002657f, -0.004728f, -0.004071f, 0.006694f, -0.005227f, -0.005676f, -0.012158f, -0.009275f, 0.004257f, 0.014873f, -0.001041f, -0.002566f, -0.005595f, 0.009663f, -0.004604f, -0.000148f, -0.007212f, -0.007667f, -0.009799f, -0.004371f, 0.008268f, -0.007819f, -0.002754f, -0.002481f, 0.003068f, -0.001627f, -0.010975f, 0.006310f, 0.003132f, 0.022378f, -0.001940f, 0.010714f, -0.001751f, -0.000082f, -0.000701f, 0.001606f, -0.004338f, 0.008981f, -0.001947f, -0.001214f, -0.004848f, -0.000427f, -0.001557f, 0.013694f, 0.002717f, -0.000789f, -0.012071f, + -0.000700f, -0.002108f, 0.004303f, -0.007580f, -0.001571f, 0.002382f, 0.002392f, -0.001913f, -0.000677f, -0.004620f, -0.001161f, -0.005607f, -0.001933f, 0.011615f, -0.002610f, 0.003843f, 0.007119f, -0.001295f, -0.005366f, -0.007870f, 0.002966f, 0.002138f, 0.003362f, 0.005272f, 0.006950f, 0.005147f, 0.003894f, -0.002031f, -0.001047f, -0.002393f, -0.010169f, -0.002529f, 0.000223f, 0.005707f, 0.006283f, -0.002700f, 0.001562f, -0.019505f, -0.004962f, -0.000661f, -0.004377f, -0.003134f, 0.006472f, -0.013797f, -0.011580f, -0.006922f, -0.004675f, 0.001625f, 0.014933f, -0.003598f, -0.000278f, 0.001521f, -0.011126f, -0.003157f, -0.009325f, -0.001719f, 0.015855f, -0.001556f, -0.008045f, -0.005405f, -0.000011f, 0.002963f, 0.003016f, -0.004833f, -0.020570f, -0.010073f, -0.002916f, -0.008186f, 0.000544f, 0.000047f, 0.008081f, -0.005648f, 0.007169f, 0.001467f, -0.003920f, -0.011233f, -0.009274f, 0.012313f, -0.010565f, 0.006622f, 0.001921f, -0.007012f, -0.002604f, -0.006293f, -0.004369f, 0.005638f, -0.011275f, 0.005493f, 0.001931f, -0.000482f, 0.001860f, 0.000490f, -0.001115f, -0.000039f, -0.005655f, -0.008077f, + 0.000616f, -0.002649f, -0.005666f, -0.002590f, -0.008774f, 0.010094f, 0.007253f, 0.001550f, 0.008689f, 0.000782f, -0.003322f, 0.010309f, -0.005186f, -0.003663f, -0.003086f, 0.007851f, -0.007072f, -0.012786f, 0.015983f, 0.018140f, 0.005052f, 0.005008f, -0.005032f, 0.008571f, 0.004310f, -0.010312f, 0.003387f, 0.006981f, -0.012474f, -0.010740f, 0.011106f, -0.009368f, -0.001327f, -0.005939f, 0.011173f, 0.002699f, -0.001223f, -0.003804f, -0.000043f, -0.006903f, 0.006722f, -0.003280f, 0.004074f, -0.001402f, -0.000045f, 0.007580f, 0.002847f, 0.001383f, -0.002806f, 0.007467f, 0.004486f, 0.002509f, -0.000632f, 0.007746f, -0.000604f, 0.001776f, -0.004666f, 0.009389f, 0.001958f, 0.004038f, 0.006481f, -0.017449f, -0.005897f, -0.003020f, -0.006502f, -0.005706f, 0.001737f, 0.010580f, -0.004416f, -0.002078f, -0.005585f, -0.001831f, 0.002053f, 0.005059f, -0.012470f, -0.000055f, 0.004188f, 0.001228f, -0.001115f, 0.006133f, 0.003352f, -0.010767f, -0.003393f, -0.001656f, 0.007004f, -0.006694f, 0.009952f, 0.011943f, 0.005555f, 0.003338f, -0.005291f, 0.000922f, 0.000697f, 0.019275f, -0.004332f, -0.000919f, + 0.006634f, 0.004074f, 0.002886f, 0.006081f, 0.017044f, -0.005567f, -0.002263f, -0.017672f, -0.000304f, -0.015275f, -0.019216f, 0.000027f, 0.007269f, -0.024623f, 0.007496f, 0.007210f, 0.003653f, -0.007921f, -0.006410f, -0.008583f, -0.003669f, -0.000178f, -0.000152f, 0.006987f, 0.009415f, -0.002023f, -0.010585f, -0.006664f, 0.006789f, -0.011307f, -0.005980f, -0.009659f, 0.001263f, -0.015213f, 0.006569f, 0.000498f, -0.001680f, 0.001685f, -0.001172f, -0.003991f, -0.000699f, 0.008713f, -0.011543f, 0.012441f, -0.010686f, -0.001830f, 0.001671f, -0.007276f, -0.006156f, 0.004450f, 0.001749f, -0.002774f, -0.005857f, 0.009091f, 0.003261f, -0.007514f, -0.014504f, 0.000880f, 0.002286f, 0.007282f, -0.001245f, -0.004257f, -0.000269f, 0.003500f, -0.004269f, 0.018246f, -0.007451f, -0.003866f, -0.014748f, -0.009803f, 0.020086f, 0.007774f, -0.006352f, -0.002531f, -0.002167f, 0.004762f, 0.012122f, -0.017853f, -0.010801f, 0.011234f, -0.009646f, -0.010307f, -0.011152f, -0.013303f, 0.008366f, -0.003941f, -0.001009f, -0.003667f, -0.000150f, -0.014744f, -0.003393f, 0.005584f, 0.006388f, 0.000777f, -0.007945f, -0.011527f, + -0.009448f, -0.012126f, 0.001746f, 0.012643f, 0.001288f, 0.003518f, 0.004110f, 0.003646f, -0.008413f, 0.007448f, 0.004698f, -0.006798f, -0.005223f, -0.019166f, 0.002388f, 0.003205f, -0.014771f, -0.002025f, 0.004042f, -0.003588f, 0.001426f, -0.002192f, -0.015737f, 0.012212f, -0.014651f, 0.010392f, 0.000353f, 0.004788f, -0.016384f, -0.009948f, -0.014654f, -0.012316f, 0.001972f, -0.004971f, -0.005230f, -0.007328f, -0.000080f, 0.006315f, -0.013365f, -0.001104f, 0.003983f, -0.005184f, -0.014758f, -0.010184f, -0.002860f, 0.002018f, 0.007620f, 0.002409f, -0.011796f, 0.012481f, -0.003577f, -0.003327f, 0.013860f, -0.017071f, -0.004921f, 0.027334f, -0.022642f, -0.011459f, -0.014806f, 0.012307f, 0.005122f, -0.007005f, 0.006153f, 0.000907f, 0.016522f, 0.002050f, 0.000946f, -0.014068f, 0.011470f, 0.018473f, 0.018947f, 0.016288f, -0.007711f, -0.000105f, 0.003046f, -0.008452f, -0.005930f, 0.003804f, 0.001774f, -0.012642f, -0.006176f, -0.004534f, 0.007457f, 0.000331f, -0.009906f, -0.003414f, 0.004078f, 0.009860f, 0.001637f, -0.001389f, 0.000724f, -0.005818f, 0.000372f, 0.001184f, 0.001711f, -0.014243f, + 0.009877f, 0.012751f, 0.002822f, 0.007503f, 0.007093f, -0.010993f, 0.019031f, 0.018649f, 0.003635f, -0.009402f, 0.007166f, -0.001874f, -0.016506f, -0.002037f, -0.004807f, 0.002170f, 0.001647f, 0.002248f, -0.009705f, -0.006488f, -0.020583f, -0.014784f, 0.000924f, 0.013844f, -0.009004f, 0.007890f, 0.002161f, -0.002888f, -0.016450f, 0.002354f, 0.011056f, -0.002114f, 0.010147f, 0.023231f, 0.006661f, -0.000519f, -0.024362f, 0.003474f, -0.008597f, -0.032893f, -0.025141f, 0.007313f, 0.001030f, -0.004977f, 0.006794f, 0.017062f, -0.001797f, 0.010572f, 0.009389f, 0.005869f, -0.001809f, -0.007901f, 0.007941f, -0.006589f, 0.001678f, -0.005521f, 0.010909f, 0.019455f, -0.015906f, -0.003881f, 0.001809f, 0.007678f, 0.002575f, -0.004243f, -0.002256f, -0.005246f, 0.000297f, -0.006707f, 0.010585f, 0.003159f, -0.010944f, 0.014072f, -0.012294f, -0.003144f, 0.016812f, 0.015180f, 0.012708f, -0.012519f, -0.008125f, -0.011079f, 0.014937f, 0.020282f, 0.000533f, -0.002809f, 0.016018f, -0.021189f, 0.003589f, 0.007217f, -0.001314f, -0.017547f, 0.017776f, 0.007222f, 0.009469f, 0.017217f, 0.001731f, -0.021302f, + 0.006857f, 0.010750f, -0.004891f, -0.000194f, 0.016570f, -0.014649f, -0.014266f, -0.011497f, 0.002549f, 0.021869f, 0.011862f, -0.001117f, 0.024028f, -0.028858f, -0.010454f, 0.002102f, 0.015117f, -0.026599f, 0.027913f, 0.011639f, -0.000149f, -0.002289f, 0.002829f, 0.005197f, 0.015373f, -0.002334f, 0.002172f, -0.004274f, -0.002891f, 0.008841f, 0.004856f, 0.010180f, 0.004822f, 0.006063f, -0.017972f, -0.007236f, 0.031616f, 0.003575f, 0.009782f, 0.013472f, 0.005450f, -0.010126f, -0.018986f, 0.006474f, -0.007603f, 0.001114f, 0.007417f, -0.009359f, -0.010891f, 0.014281f, 0.016893f, -0.008187f, -0.005516f, 0.012981f, -0.015031f, 0.007112f, -0.011451f, 0.005669f, -0.011071f, 0.017083f, 0.002860f, -0.001997f, 0.006428f, 0.029121f, 0.008474f, 0.011382f, -0.002776f, 0.001623f, 0.005406f, 0.021473f, -0.001386f, 0.030690f, 0.001361f, 0.014589f, -0.000091f, 0.027634f, 0.010202f, 0.020579f, 0.016056f, -0.003569f, -0.008847f, -0.002647f, -0.010171f, -0.011878f, 0.016585f, -0.003590f, -0.005925f, 0.002073f, 0.000692f, -0.008910f, -0.003451f, 0.001548f, 0.008148f, -0.000030f, 0.030956f, -0.009141f, + -0.001132f, -0.039939f, -0.002275f, 0.020188f, -0.011871f, 0.017471f, -0.025855f, 0.002926f, 0.001533f, -0.001386f, -0.034038f, -0.002127f, -0.056079f, 0.001987f, -0.007132f, -0.023638f, -0.005114f, 0.002535f, -0.013206f, 0.001570f, 0.012758f, 0.001645f, -0.013794f, 0.001876f, -0.005129f, 0.011774f, -0.014812f, 0.000386f, 0.016354f, 0.003609f, 0.000124f, -0.002968f, 0.012152f, -0.009008f, 0.000001f, -0.000315f, 0.008923f, 0.001786f, -0.020085f, -0.010076f, -0.014658f, 0.015224f, -0.036403f, 0.016752f, 0.012194f, 0.011855f, 0.004933f, 0.002604f, -0.017005f, 0.010919f, -0.024395f, -0.005218f, -0.006648f, -0.004489f, -0.002980f, 0.001692f, 0.005181f, -0.017008f, -0.008970f, 0.029703f, 0.010010f, -0.010134f, -0.014775f, 0.003845f, -0.007649f, 0.009732f, -0.008588f, -0.000804f, -0.012272f, 0.027805f, 0.010537f, -0.007419f, -0.001523f, -0.010916f, -0.000305f, 0.020586f, 0.020777f, 0.012267f, 0.010945f, -0.009452f, 0.012113f, 0.020063f, -0.014211f, -0.000030f, -0.037447f, 0.022147f, 0.015066f, -0.004856f, 0.009026f, -0.001889f, 0.003274f, 0.014031f, -0.008225f, 0.021650f, -0.018795f, 0.002425f, + 0.023917f, 0.011002f, 0.001621f, 0.018941f, -0.006344f, 0.009055f, 0.004938f, 0.010470f, 0.016296f, -0.008909f, -0.001889f, 0.030594f, 0.014976f, 0.000049f, 0.004122f, -0.019544f, 0.027483f, -0.022438f, -0.001533f, 0.024850f, 0.007374f, 0.026712f, -0.016429f, 0.004941f, -0.001236f, -0.005555f, 0.003258f, -0.024254f, -0.017848f, 0.024452f, -0.012079f, -0.004218f, -0.008350f, -0.025796f, 0.018519f, -0.005408f, -0.004880f, -0.010915f, 0.011121f, 0.027999f, -0.021940f, -0.003411f, 0.017605f, -0.019096f, -0.009483f, 0.017309f, 0.021949f, -0.036599f, -0.010949f, -0.002139f, 0.015040f, 0.000613f, 0.017619f, -0.003173f, 0.019230f, 0.041291f, 0.007582f, -0.025090f, -0.009298f, 0.007795f, -0.055267f, 0.001352f, -0.000214f, -0.008924f, -0.003257f, 0.024956f, -0.041906f, 0.008778f, 0.018699f, -0.015479f, 0.016480f, 0.031669f, 0.007258f, -0.029742f, 0.007306f, -0.007642f, -0.001240f, -0.029110f, -0.009465f, 0.026221f, -0.003717f, 0.024056f, -0.007145f, -0.008586f, 0.003155f, -0.020549f, -0.012340f, -0.014785f, -0.011787f, -0.008071f, 0.018854f, -0.021794f, 0.002631f, 0.038152f, 0.024779f, 0.008677f, + -0.039712f, 0.006560f, 0.024403f, 0.010798f, 0.000464f, -0.013610f, -0.017905f, -0.041101f, -0.029694f, 0.006208f, -0.015306f, -0.013781f, -0.002031f, 0.018084f, 0.011247f, -0.011949f, -0.000779f, 0.025696f, -0.011059f, -0.003610f, -0.000305f, 0.033793f, -0.000261f, -0.000800f, 0.015213f, 0.006268f, -0.039287f, 0.011728f, 0.009146f, 0.001213f, -0.032931f, 0.014820f, 0.016602f, -0.011737f, -0.010055f, -0.012003f, 0.043414f, 0.002692f, -0.008417f, -0.000256f, 0.019325f, -0.008838f, 0.005505f, -0.004275f, 0.004736f, 0.016719f, -0.029582f, 0.031862f, 0.035848f, 0.010430f, 0.015265f, -0.011676f, 0.020373f, 0.047358f, 0.001661f, -0.004956f, -0.008534f, 0.020411f, -0.006993f, -0.010928f, -0.003899f, 0.007522f, -0.023346f, 0.010842f, -0.020592f, 0.023998f, 0.005326f, 0.024163f, -0.014953f, 0.022060f, 0.006336f, 0.028736f, 0.004544f, 0.006388f, -0.010322f, 0.018046f, 0.004176f, -0.005179f, 0.025132f, -0.009507f, -0.018469f, 0.036353f, 0.028272f, 0.010969f, 0.026629f, 0.039702f, 0.047128f, -0.014510f, -0.015605f, -0.016538f, 0.005217f, -0.021647f, 0.024989f, -0.002980f, -0.003336f, -0.036505f, + 0.007406f, 0.041724f, 0.041108f, -0.001598f, -0.007013f, -0.029129f, -0.001225f, 0.027480f, -0.016058f, -0.017501f, 0.013339f, 0.002029f, -0.017783f, 0.004708f, -0.005674f, -0.058374f, -0.041344f, 0.018804f, 0.006179f, -0.031559f, 0.001202f, 0.011100f, -0.028819f, -0.018988f, -0.013452f, 0.030141f, 0.012627f, 0.008231f, -0.012004f, -0.009939f, -0.009884f, -0.022143f, -0.028468f, -0.049216f, 0.022823f, 0.018863f, -0.011677f, 0.051008f, 0.023888f, 0.048868f, 0.033404f, 0.001055f, -0.017966f, 0.011298f, 0.004684f, 0.020966f, 0.025114f, 0.027204f, -0.005781f, -0.007488f, 0.011047f, -0.015655f, -0.004583f, -0.014098f, -0.023521f, -0.038613f, -0.012015f, 0.034502f, -0.010570f, -0.017158f, -0.022293f, 0.012234f, 0.020964f, 0.012402f, 0.000112f, 0.019255f, 0.041059f, -0.027799f, -0.012844f, -0.021995f, -0.015406f, -0.043393f, -0.011251f, 0.007772f, -0.019824f, -0.017106f, -0.048255f, -0.069552f, 0.006153f, -0.046688f, -0.070627f, -0.052779f, -0.022299f, 0.042490f, 0.014393f, 0.025053f, 0.019410f, -0.048541f, -0.020766f, 0.002033f, 0.021873f, 0.004530f, -0.109491f, -0.018862f, 0.032401f, -0.038530f, + 0.012848f, -0.016176f, -0.060474f, -0.020047f, 0.060151f, 0.076727f, -0.044013f, -0.000360f, -0.016709f, -0.065902f, -0.053442f, -0.050002f, -0.053923f, -0.029248f, -0.036104f, -0.004459f, 0.008478f, -0.010613f, 0.010553f, 0.010491f, -0.023712f, -0.007355f, -0.031614f, 0.010596f, -0.048287f, -0.042548f, 0.007039f, 0.005591f, -0.015277f, -0.016497f, 0.032795f, -0.011944f, 0.046616f, 0.009579f, 0.042924f, -0.032490f, 0.016891f, 0.011673f, 0.052495f, 0.028477f, 0.016240f, 0.004064f, 0.005057f, -0.007832f, 0.012906f, 0.021750f, -0.021572f, -0.026307f, 0.035340f, -0.006531f, -0.052688f, -0.094990f, -0.116786f, -0.082498f, 0.009512f, -0.001200f, -0.109255f, 0.033117f, 0.013658f, 0.025292f, -0.040210f, 0.003522f, 0.007924f, 0.003646f, 0.049471f, 0.053911f, 0.105530f, 0.035406f, -0.062353f, -0.076295f, -0.047711f, -0.020250f, -0.009923f, 0.059170f, -0.017328f, -0.114839f, -0.033778f, 0.092734f, -0.014265f, 0.019978f, 0.012032f, 0.016626f, 0.031463f, 0.026054f, 0.007988f, -0.019337f, -0.008320f, 0.003940f, -0.021718f, -0.005376f, 0.032935f, -0.031417f, -0.019865f, -0.031436f, -0.008945f, 0.004830f, + 0.002392f, 0.007759f, 0.014504f, -0.023855f, 0.019327f, 0.051013f, -0.002557f, -0.030170f, 0.001089f, -0.019748f, -0.008414f, 0.030351f, -0.033773f, 0.003627f, 0.008473f, 0.037290f, 0.052226f, -0.034121f, -0.021234f, 0.021124f, 0.001213f, 0.006228f, 0.004607f, -0.022307f, -0.059707f, -0.009849f, -0.028628f, 0.053484f, -0.101901f, -0.065231f, -0.028649f, -0.010067f, 0.027590f, 0.007074f, -0.036723f, -0.004831f, -0.041965f, -0.042795f, -0.016733f, -0.030422f, 0.005141f, 0.027800f, 0.120371f, 0.024188f, -0.017623f, -0.075598f, -0.062567f, 0.021117f, 0.000968f, -0.070820f, 0.045835f, 0.037325f, -0.043088f, -0.138309f, 0.016031f, 0.017539f, -0.007655f, -0.005647f, -0.013531f, -0.042391f, 0.012164f, -0.012171f, 0.065802f, -0.074735f, -0.017499f, 0.068760f, -0.006303f, -0.052901f, -0.008948f, 0.038848f, 0.049170f, 0.027924f, -0.012193f, 0.033104f, -0.030971f, 0.020916f, -0.014211f, -0.014004f, -0.027104f, 0.036344f, 0.025073f, -0.031250f, -0.014941f, -0.008625f, 0.038762f, -0.008782f, 0.001780f, -0.031615f, 0.025313f, 0.012946f, -0.033242f, 0.050300f, -0.000059f, -0.055564f, 0.041674f, -0.060079f, + -0.031187f, 0.043580f, -0.108148f, -0.073498f, 0.054975f, -0.042902f, 0.040130f, -0.073679f, 0.012488f, 0.017570f, -0.039277f, -0.005951f, -0.005351f, -0.076905f, -0.018502f, 0.063165f, 0.072889f, -0.094537f, -0.030974f, 0.016711f, -0.071311f, 0.078484f, 0.086258f, 0.001392f, -0.130021f, -0.079555f, 0.132326f, -0.086299f, -0.017642f, 0.091611f, -0.068656f, -0.156088f, -0.036780f, -0.019201f, -0.074203f, -0.069949f, -0.001737f, -0.088249f, -0.026048f, -0.037481f, -0.035393f, -0.026586f, 0.057451f, -0.006159f, -0.018341f, -0.024050f, 0.011252f, -0.030774f, -0.073627f, 0.057329f, 0.017973f, 0.049615f, 0.015453f, 0.051356f, -0.020265f, -0.031037f, 0.011308f, -0.052780f, 0.041412f, -0.047690f, -0.010206f, 0.032470f, -0.036619f, -0.007006f, -0.022226f, -0.057648f, 0.008840f, -0.043252f, -0.031802f, -0.037544f, -0.028468f, -0.016549f, -0.039099f, 0.008065f, 0.043586f, -0.028149f, -0.010298f, 0.006724f, 0.040269f, -0.016779f, 0.014470f, -0.039478f, 0.067051f, 0.022578f, 0.029044f, 0.020120f, 0.064518f, -0.001763f, -0.074502f, 0.018739f, 0.028137f, -0.018571f, 0.000784f, 0.042091f, -0.051027f, -0.049142f, + -0.059118f, 0.055373f, 0.017506f, -0.071421f, 0.031597f, -0.045712f, -0.006374f, -0.065686f, 0.035205f, 0.054073f, 0.016468f, -0.071542f, 0.053059f, 0.066085f, 0.123797f, -0.029301f, 0.061567f, 0.012325f, -0.028810f, -0.054739f, -0.031818f, 0.072226f, -0.023206f, 0.013779f, 0.028171f, -0.006800f, 0.066472f, -0.009274f, 0.052217f, 0.054750f, -0.066354f, 0.034813f, -0.017189f, 0.002101f, 0.024684f, 0.020766f, -0.002037f, 0.011317f, 0.020004f, 0.066944f, 0.068542f, 0.053210f, -0.038385f, -0.012671f, -0.090639f, -0.002252f, 0.021636f, 0.041476f, 0.009632f, -0.074681f, 0.033092f, -0.044653f, 0.058472f, -0.052227f, -0.036675f, 0.004216f, -0.043917f, -0.007180f, -0.025289f, 0.090099f, -0.048895f, -0.023727f, -0.093906f, -0.030375f, -0.049210f, 0.132981f, 0.080950f, -0.027940f, -0.089269f, -0.096019f, -0.056770f, 0.065850f, 0.086513f, 0.043288f, 0.013052f, -0.115831f, -0.053064f, 0.036788f, 0.032779f, 0.003458f, 0.042190f, -0.026155f, -0.075193f, 0.032520f, -0.128001f, 0.134704f, -0.012828f, -0.098942f, 0.208685f, 0.013875f, 0.005205f, -0.053976f, 0.037667f, -0.076521f, 0.048457f, -0.031023f, + 0.079086f, -0.034592f, -0.003071f, 0.045548f, 0.008503f, 0.004796f, -0.019708f, -0.016609f, 0.002538f, -0.029112f, 0.033584f, -0.002876f, 0.035606f, -0.026549f, -0.026773f, 0.010318f, 0.001768f, -0.026848f, 0.017971f, -0.002371f, 0.015697f, -0.007381f, -0.007271f, 0.015948f, -0.013772f, 0.000166f, 0.011172f, -0.004332f, -0.006517f, 0.057116f, -0.003691f, -0.017149f, -0.009884f, 0.028015f, -0.002374f, -0.028679f, 0.016090f, 0.034327f, 0.006516f, 0.002620f, -0.019424f, 0.008798f, -0.015831f, 0.017011f, 0.039298f, -0.011846f, 0.017711f, -0.012558f, -0.004956f, -0.013799f, -0.008375f, 0.013211f, 0.012003f, -0.020115f, 0.012943f, 0.007468f, -0.004191f, -0.019430f, 0.002404f, 0.012587f, -0.019130f, 0.029647f, 0.018308f, -0.036205f, 0.007317f, -0.031655f, -0.048178f, 0.038304f, -0.022002f, 0.046766f, -0.044322f, 0.097181f, 0.019249f, 0.024758f, -0.011096f, 0.009962f, -0.001693f, 0.019385f, 0.006828f, 0.042132f, 0.003892f, -0.020985f, 0.014544f, -0.013256f, 0.007366f, 0.009631f, -0.017737f, 0.002260f, 0.005571f, -0.019023f, 0.019541f, 0.006047f, -0.007313f, 0.026210f, -0.007889f, 0.011170f, + -0.006614f, 0.005986f, 0.005741f, 0.003643f, -0.002146f, -0.005975f, -0.002423f, 0.004892f, 0.001583f, -0.002719f, -0.011151f, 0.010493f, -0.007184f, 0.005989f, 0.008891f, -0.006779f, 0.002690f, -0.006204f, 0.003140f, -0.010709f, -0.018990f, 0.022149f, -0.010139f, -0.003689f, 0.009608f, 0.005688f, -0.002634f, 0.004059f, 0.018527f, -0.017705f, 0.009274f, -0.005512f, 0.016132f, -0.014473f, 0.010123f, 0.006565f, -0.002103f, 0.005654f, 0.001139f, 0.002412f, 0.008201f, -0.008006f, 0.006489f, 0.007690f, -0.002229f, 0.001863f, 0.013832f, 0.001360f, 0.004820f, -0.010909f, 0.020685f, 0.017873f, -0.085595f, -0.212125f, 0.045502f, 0.175809f, 0.118833f, 0.248087f, -0.081468f, -0.069826f, -0.143128f, -0.228827f, -0.022754f, 0.070799f, 0.093704f, 0.122075f, 0.061622f, 0.006333f, -0.020142f, -0.053424f, -0.075636f, -0.011924f, -0.020252f, 0.006941f, 0.017288f, -0.001416f, 0.004327f, 0.008598f, 0.004045f, 0.029361f, 0.035538f, 0.021502f, -0.004034f, 0.003510f, -0.026224f, -0.055773f, -0.058691f, -0.029459f, -0.038438f, 0.031095f, 0.058666f, 0.061437f, 0.068366f, 0.036676f, -0.010827f, -0.027650f, + -0.049887f, -0.053692f, -0.036524f, -0.021466f, -0.002075f, 0.012587f, 0.026060f, 0.026799f, 0.023611f, 0.019181f, -0.002994f, 0.004533f, -0.005422f, 0.001791f, -0.003887f, -0.003614f, -0.000955f, -0.019662f, -0.018946f, -0.015143f, -0.028809f, -0.000842f, -0.004575f, 0.002887f, 0.051688f, 0.065685f, 0.024037f, 0.021911f, -0.015979f, -0.036729f, -0.021507f, -0.042052f, -0.020942f, 0.004099f, -0.000533f}, + {0.011661f, 0.000092f, 0.015194f, 0.000707f, -0.004832f, -0.001199f, 0.000104f, 0.001400f, 0.007083f, -0.002935f, 0.003623f, -0.007161f, 0.002410f, -0.000752f, 0.004930f, -0.003340f, 0.007122f, 0.001822f, -0.003633f, 0.000512f, -0.007243f, 0.008074f, -0.000753f, -0.001652f, -0.000004f, 0.001191f, 0.001695f, 0.001232f, 0.005961f, -0.010484f, 0.000784f, 0.006613f, 0.001309f, -0.000521f, -0.001165f, -0.000606f, -0.000243f, -0.000867f, -0.010733f, -0.000891f, 0.003172f, -0.003730f, 0.003613f, -0.008412f, 0.000042f, 0.004716f, -0.004945f, 0.009471f, 0.009166f, 0.006836f, 0.005827f, 0.007501f, 0.000927f, 0.003767f, -0.003558f, -0.001509f, -0.006177f, -0.002477f, -0.000342f, -0.005389f, -0.001810f, -0.007661f, 0.001078f, -0.006495f, -0.008498f, 0.001611f, -0.006217f, 0.004699f, 0.000685f, -0.006917f, 0.004759f, 0.003021f, -0.007686f, 0.002296f, 0.000166f, 0.008992f, 0.002643f, -0.011910f, 0.001583f, 0.003866f, 0.003755f, 0.018907f, 0.005193f, 0.004038f, -0.005508f, 0.000777f, -0.009480f, 0.002296f, 0.008860f, -0.004402f, 0.000504f, -0.001804f, -0.004616f, -0.007528f, 0.005941f, -0.012627f, + -0.006300f, -0.006317f, 0.006971f, 0.007569f, 0.004071f, 0.001841f, 0.005560f, 0.004539f, 0.009117f, -0.003094f, 0.003271f, 0.005635f, 0.001312f, 0.001877f, -0.006438f, -0.002800f, -0.002611f, -0.002444f, 0.006229f, -0.011629f, 0.002098f, -0.004014f, 0.012371f, 0.000315f, -0.002036f, -0.003043f, -0.004863f, -0.001659f, -0.005074f, -0.015357f, -0.004674f, -0.002998f, -0.002281f, -0.003439f, 0.001805f, -0.002876f, -0.000496f, -0.000991f, 0.005626f, 0.002401f, -0.000436f, 0.003424f, -0.002733f, 0.006575f, -0.004024f, -0.007195f, 0.007240f, 0.007190f, -0.002774f, -0.006960f, 0.001058f, 0.003635f, 0.003293f, 0.003068f, -0.002723f, -0.000316f, 0.003341f, 0.002768f, 0.017181f, -0.003063f, -0.001500f, 0.001956f, 0.004839f, -0.012442f, 0.007962f, -0.014793f, -0.000534f, -0.007100f, -0.000920f, -0.004655f, -0.000982f, -0.001046f, 0.007644f, -0.006204f, 0.008270f, -0.008352f, -0.009092f, 0.004030f, 0.012568f, -0.014519f, -0.003902f, -0.006968f, 0.000269f, -0.003575f, 0.004125f, 0.005352f, 0.002828f, 0.005448f, -0.008322f, 0.000411f, 0.012116f, 0.004786f, 0.001710f, -0.008564f, -0.012178f, -0.007351f, + 0.002101f, -0.006237f, -0.003365f, 0.002509f, 0.008252f, -0.007154f, -0.006910f, 0.002978f, -0.004984f, 0.009311f, 0.003333f, -0.000870f, 0.006760f, 0.006256f, 0.000256f, 0.010444f, 0.005408f, 0.003315f, 0.003040f, 0.006861f, 0.011013f, -0.006995f, 0.002373f, 0.002989f, -0.007181f, 0.000707f, 0.006487f, -0.002354f, 0.015863f, -0.004766f, -0.003666f, -0.003231f, 0.006183f, 0.007827f, -0.009492f, -0.004171f, 0.003329f, -0.021797f, -0.003438f, -0.004779f, -0.003794f, -0.001860f, -0.002569f, 0.011751f, 0.014042f, -0.003086f, 0.011479f, 0.004429f, -0.006170f, 0.003051f, -0.009408f, 0.001764f, 0.002129f, -0.012721f, -0.001781f, 0.002064f, 0.002351f, 0.008924f, -0.001592f, 0.007756f, -0.005043f, -0.009761f, -0.010258f, -0.002914f, -0.005139f, -0.007819f, 0.008246f, -0.003153f, -0.001472f, -0.001396f, 0.001799f, 0.004452f, -0.012466f, 0.000060f, 0.001841f, -0.005953f, 0.015051f, 0.001161f, -0.003616f, -0.003269f, 0.016050f, -0.001181f, 0.002089f, 0.009399f, 0.000328f, 0.005705f, 0.002284f, 0.000442f, 0.008838f, -0.000166f, -0.006171f, 0.007774f, 0.004226f, 0.004913f, 0.007128f, 0.002164f, + -0.005907f, 0.003898f, 0.005767f, 0.005416f, 0.008663f, -0.000311f, -0.008417f, -0.006982f, 0.010041f, 0.013878f, -0.013593f, 0.001967f, -0.004078f, -0.003192f, 0.002175f, 0.004309f, 0.003963f, -0.016194f, 0.017125f, 0.015849f, 0.011947f, -0.008454f, 0.009332f, 0.016859f, -0.004310f, 0.013149f, 0.004942f, 0.001891f, -0.002100f, 0.014494f, 0.006868f, -0.003531f, -0.010501f, 0.005953f, -0.004365f, -0.005728f, 0.005893f, 0.006849f, 0.003046f, -0.010542f, 0.001672f, 0.009179f, -0.004566f, 0.003000f, -0.020457f, 0.002770f, -0.001652f, 0.009665f, 0.002406f, -0.004441f, -0.006167f, 0.012397f, -0.010853f, 0.000654f, -0.008763f, 0.000785f, -0.002681f, 0.006787f, -0.001462f, -0.002569f, -0.010734f, -0.002869f, -0.001886f, 0.013025f, 0.000674f, -0.012537f, -0.000441f, -0.001036f, 0.004181f, 0.005988f, -0.005418f, -0.000398f, -0.006917f, 0.006936f, -0.001612f, 0.008436f, -0.004813f, 0.012755f, 0.006616f, -0.015294f, 0.015567f, -0.002926f, -0.010746f, 0.001057f, 0.014224f, 0.001997f, 0.002194f, -0.012558f, -0.000742f, -0.005765f, -0.006193f, -0.007773f, 0.000617f, 0.018357f, -0.006597f, -0.013650f, + -0.000907f, -0.020368f, -0.000230f, -0.017534f, -0.006231f, 0.011693f, -0.012566f, -0.013853f, 0.003874f, 0.000912f, 0.001010f, -0.003419f, -0.004682f, -0.010097f, 0.006464f, -0.019545f, -0.006159f, 0.001723f, 0.011751f, 0.000465f, 0.011922f, 0.004075f, 0.026461f, 0.009975f, -0.000515f, 0.000919f, 0.012472f, -0.003299f, -0.004052f, -0.002658f, 0.001853f, -0.008690f, -0.004442f, -0.014470f, -0.001265f, -0.006811f, -0.004190f, 0.017166f, -0.000013f, 0.010614f, -0.004691f, 0.004129f, -0.001432f, 0.006179f, -0.002530f, 0.005714f, -0.006374f, -0.007808f, -0.001595f, 0.001709f, -0.007933f, -0.007918f, 0.000196f, 0.003420f, 0.007609f, -0.001638f, -0.004361f, -0.002156f, 0.007074f, 0.012593f, 0.000011f, -0.009536f, -0.013614f, -0.000467f, 0.002560f, 0.000612f, 0.016320f, -0.011783f, -0.002018f, 0.006826f, -0.004774f, -0.010426f, 0.009467f, 0.003712f, 0.002208f, 0.001174f, 0.016612f, -0.012717f, -0.002580f, 0.001084f, -0.000978f, -0.000442f, -0.010478f, -0.008040f, -0.001124f, 0.007001f, 0.002540f, 0.002840f, 0.002940f, 0.007367f, -0.001492f, 0.006749f, 0.005435f, -0.017195f, -0.006618f, -0.020183f, + 0.005270f, -0.007053f, 0.010211f, -0.006474f, -0.008926f, -0.006459f, 0.005320f, -0.013388f, -0.011199f, 0.015813f, -0.008540f, 0.017147f, -0.003990f, 0.005270f, -0.005954f, -0.011287f, 0.012664f, -0.009530f, -0.010864f, -0.000886f, -0.005881f, -0.012590f, -0.009812f, -0.015910f, 0.000737f, 0.010674f, 0.006060f, -0.005968f, 0.018043f, 0.006934f, -0.006501f, -0.007951f, -0.012882f, 0.001007f, -0.004745f, -0.008592f, -0.004445f, -0.003292f, -0.006246f, 0.004064f, 0.014540f, -0.000127f, 0.001140f, -0.008865f, 0.004796f, 0.005892f, -0.008208f, -0.005472f, 0.003737f, 0.019037f, 0.007327f, -0.002228f, -0.001820f, -0.000473f, -0.016830f, 0.024803f, -0.003550f, 0.000935f, -0.002957f, 0.016499f, 0.015655f, 0.006075f, -0.023575f, -0.003073f, -0.028841f, 0.018643f, 0.008374f, 0.001518f, 0.031669f, 0.015581f, -0.001786f, -0.012732f, 0.013583f, -0.004839f, 0.004048f, 0.005371f, 0.002896f, 0.011153f, -0.008064f, 0.018313f, 0.007438f, 0.002776f, -0.004340f, -0.007653f, 0.012551f, 0.010971f, -0.001037f, 0.007538f, -0.013811f, 0.003896f, -0.018737f, 0.009143f, 0.001940f, 0.011159f, -0.015252f, 0.004519f, + -0.004434f, 0.004749f, 0.019103f, 0.016710f, 0.001530f, 0.005707f, -0.010584f, 0.016180f, 0.001199f, 0.033054f, 0.034381f, -0.003199f, -0.008220f, -0.007880f, -0.006546f, -0.018198f, -0.004737f, -0.024147f, 0.002237f, -0.000805f, -0.000744f, -0.003854f, 0.009588f, 0.016399f, 0.024195f, 0.023277f, 0.017452f, -0.026404f, -0.019285f, 0.000469f, 0.001839f, 0.030394f, -0.020157f, 0.016708f, -0.000810f, -0.005936f, -0.008538f, 0.017214f, 0.003740f, -0.012512f, -0.006941f, 0.032277f, 0.031622f, 0.035580f, -0.003472f, -0.001304f, -0.006044f, 0.006171f, 0.017291f, 0.020168f, 0.005734f, -0.008305f, -0.017122f, -0.034393f, 0.010189f, -0.020209f, -0.004614f, -0.001763f, -0.004574f, 0.002696f, -0.001191f, -0.005982f, -0.000943f, -0.019693f, -0.008165f, 0.001643f, -0.003944f, -0.022003f, -0.009724f, 0.002415f, 0.016052f, -0.004093f, 0.000173f, -0.017336f, -0.006358f, 0.000798f, 0.011494f, -0.006645f, 0.006901f, -0.019346f, -0.005980f, 0.005332f, 0.007140f, -0.004761f, 0.026366f, -0.004763f, -0.003924f, -0.013186f, -0.005173f, 0.011648f, 0.003072f, -0.000344f, 0.013348f, 0.020331f, 0.021913f, -0.003004f, + -0.012115f, -0.011803f, -0.000683f, 0.003791f, 0.004347f, -0.007932f, 0.006216f, 0.010912f, 0.006862f, 0.009300f, 0.021161f, 0.016815f, 0.008294f, 0.000566f, 0.002667f, -0.020236f, -0.007864f, -0.033920f, 0.039793f, -0.002226f, 0.004929f, 0.021276f, -0.000684f, -0.008915f, 0.000089f, -0.040951f, -0.025352f, -0.012481f, 0.005281f, -0.008935f, 0.003461f, -0.019731f, 0.011809f, -0.007602f, -0.001281f, 0.023511f, -0.025107f, -0.017060f, 0.021897f, -0.008320f, -0.034870f, 0.001281f, -0.021948f, 0.003179f, -0.002890f, 0.011508f, 0.004264f, 0.005233f, 0.001376f, -0.005222f, 0.013782f, -0.002832f, 0.018032f, 0.010603f, -0.008107f, -0.012747f, -0.012120f, 0.004041f, -0.006638f, 0.004055f, 0.002382f, 0.010099f, 0.001929f, -0.022556f, -0.000166f, 0.005943f, -0.008831f, -0.000416f, -0.016211f, -0.004615f, -0.000295f, -0.000432f, 0.032048f, -0.007325f, 0.022202f, 0.027181f, -0.009746f, 0.013798f, -0.006707f, -0.002465f, -0.018093f, 0.008419f, 0.022043f, 0.015220f, 0.001190f, 0.004730f, 0.012169f, -0.003153f, 0.009085f, -0.007561f, -0.011225f, -0.015164f, 0.000898f, 0.025919f, 0.038839f, 0.005336f, + 0.009440f, -0.009652f, -0.005011f, 0.026210f, -0.017865f, -0.004482f, -0.034855f, 0.031942f, 0.016653f, 0.001867f, -0.011997f, -0.033122f, 0.003067f, -0.009195f, 0.003776f, -0.037128f, 0.012845f, 0.018766f, -0.021458f, -0.005674f, 0.003002f, 0.001636f, 0.006910f, 0.020333f, 0.025660f, -0.000593f, -0.000198f, 0.004130f, 0.000854f, -0.016391f, -0.018018f, -0.012638f, -0.023696f, -0.012423f, 0.019998f, 0.008497f, -0.007607f, -0.010863f, -0.006670f, -0.042408f, 0.008933f, 0.008951f, -0.019474f, 0.030700f, 0.001079f, 0.022565f, -0.008588f, 0.014172f, -0.005124f, -0.021773f, 0.001803f, 0.017518f, -0.010456f, 0.008911f, 0.012072f, 0.032180f, 0.009299f, 0.008921f, 0.032293f, 0.016636f, 0.012195f, -0.046732f, 0.009205f, 0.004660f, 0.008614f, -0.001519f, -0.018333f, 0.029691f, -0.024170f, 0.015350f, 0.019321f, -0.032923f, -0.006360f, 0.035138f, -0.034535f, 0.001766f, 0.001288f, -0.021961f, -0.032400f, -0.015084f, -0.014332f, -0.043031f, 0.026949f, 0.003020f, 0.028864f, 0.000306f, 0.002985f, -0.015831f, -0.008851f, 0.013301f, -0.002462f, 0.013795f, -0.016467f, -0.006272f, 0.001385f, -0.008294f, + -0.013722f, 0.016702f, -0.019844f, 0.020167f, -0.008903f, 0.005563f, -0.006001f, -0.016179f, -0.014535f, 0.004813f, -0.006119f, -0.001679f, 0.009809f, 0.041771f, 0.001764f, -0.007088f, -0.015962f, 0.004662f, 0.033598f, -0.008011f, -0.007072f, -0.021950f, -0.008395f, 0.001303f, -0.020627f, -0.008680f, -0.028853f, 0.016001f, -0.035025f, -0.062508f, -0.007778f, 0.000218f, 0.027579f, -0.031789f, 0.026403f, 0.016326f, -0.015723f, -0.030208f, -0.006022f, 0.002741f, 0.006767f, -0.000964f, 0.016042f, -0.013834f, -0.006014f, -0.062189f, -0.009699f, 0.059684f, 0.004310f, -0.012853f, -0.010091f, -0.034751f, 0.022169f, -0.013150f, 0.031452f, 0.028376f, -0.005587f, -0.007903f, 0.000102f, -0.038701f, 0.029896f, -0.023509f, -0.018879f, -0.014091f, 0.012921f, 0.006782f, 0.027934f, 0.005684f, -0.011133f, -0.013580f, -0.014044f, 0.015611f, -0.003743f, -0.006384f, 0.025795f, 0.028381f, 0.011486f, -0.014759f, 0.024003f, 0.036909f, -0.010379f, -0.004898f, 0.032440f, 0.010258f, 0.008690f, -0.016732f, 0.002721f, 0.030878f, -0.038890f, 0.031340f, -0.003465f, 0.006564f, 0.019985f, 0.023450f, 0.002627f, 0.013089f, + -0.016809f, -0.013273f, 0.013609f, 0.042245f, 0.013415f, 0.012447f, 0.017793f, -0.017049f, 0.007045f, 0.020436f, 0.013006f, -0.000303f, 0.016981f, 0.011819f, -0.020787f, 0.022368f, -0.020186f, 0.008431f, 0.019743f, -0.014962f, 0.016813f, -0.018844f, -0.006082f, 0.007818f, 0.003582f, 0.018275f, -0.006499f, 0.016588f, -0.006893f, 0.006545f, 0.006680f, 0.001427f, -0.007939f, -0.010965f, 0.046151f, -0.027405f, 0.028623f, -0.010859f, -0.028579f, -0.037224f, -0.010385f, -0.004114f, 0.021680f, -0.032901f, -0.005181f, -0.004275f, 0.017189f, 0.031775f, 0.026906f, 0.016092f, 0.002770f, -0.008876f, -0.004699f, -0.003968f, 0.023069f, 0.017964f, -0.003977f, 0.002209f, -0.004464f, 0.013827f, -0.034742f, 0.020219f, 0.012242f, 0.015595f, 0.006309f, 0.002858f, 0.031218f, -0.012985f, -0.025018f, -0.000900f, -0.007555f, 0.000678f, -0.034856f, -0.021030f, -0.000945f, 0.028826f, -0.019012f, -0.007667f, 0.006334f, -0.002522f, 0.002395f, 0.028143f, 0.013544f, -0.006003f, 0.004415f, 0.012955f, 0.011516f, 0.032838f, -0.007945f, 0.014101f, 0.019872f, 0.007687f, -0.002952f, 0.003900f, -0.034530f, 0.014212f, + -0.003775f, -0.000144f, -0.004972f, -0.022492f, -0.023584f, 0.003704f, -0.008480f, -0.039535f, 0.014587f, -0.033819f, -0.016765f, -0.007178f, -0.039565f, -0.030176f, 0.019313f, -0.046909f, -0.052127f, 0.034110f, 0.030774f, 0.011679f, 0.033162f, 0.054434f, 0.016747f, -0.017951f, 0.018730f, -0.005898f, -0.013010f, 0.026062f, 0.003486f, -0.019351f, 0.014912f, 0.019401f, 0.005691f, 0.008245f, 0.002994f, 0.004867f, 0.049652f, 0.001200f, 0.011898f, 0.006740f, 0.031378f, 0.004055f, 0.049176f, 0.002111f, -0.019432f, 0.040461f, 0.009279f, -0.014432f, -0.004494f, 0.022621f, -0.002761f, 0.002145f, 0.017163f, -0.026411f, 0.030233f, -0.003506f, -0.041033f, -0.009198f, 0.005397f, -0.039596f, -0.003553f, -0.001636f, 0.019741f, 0.020843f, 0.032902f, -0.019383f, 0.005864f, 0.008099f, 0.007552f, 0.016743f, -0.019425f, -0.019586f, 0.012727f, 0.002837f, 0.024966f, 0.023350f, 0.006616f, 0.054588f, -0.008135f, -0.003808f, -0.034603f, 0.056163f, 0.009049f, 0.040679f, 0.021570f, -0.052649f, 0.007334f, 0.011241f, 0.033691f, -0.011649f, 0.011664f, 0.031213f, -0.068165f, 0.039278f, 0.040132f, -0.018239f, + 0.009109f, 0.004774f, 0.010503f, -0.000666f, 0.031981f, -0.024665f, -0.005532f, -0.026442f, -0.000578f, -0.015459f, 0.001976f, 0.005654f, -0.037272f, 0.015428f, 0.040025f, -0.028959f, -0.026656f, -0.028418f, 0.053476f, -0.024798f, -0.013157f, 0.003521f, -0.018296f, -0.057014f, 0.009875f, 0.038702f, -0.055127f, -0.026710f, 0.019370f, 0.027966f, 0.008387f, -0.010191f, 0.013216f, -0.021473f, -0.008710f, -0.002944f, 0.027964f, -0.039631f, -0.029271f, 0.019180f, 0.035160f, 0.011402f, -0.042132f, -0.016143f, 0.002034f, -0.004305f, -0.006388f, 0.020047f, -0.005457f, 0.031391f, -0.026223f, -0.008600f, 0.001463f, -0.034255f, 0.021703f, -0.039536f, -0.023385f, 0.008845f, -0.014309f, 0.032745f, 0.054078f, 0.027409f, -0.031432f, 0.014946f, -0.006871f, -0.013450f, -0.020356f, -0.010677f, -0.034678f, 0.027151f, 0.028345f, 0.011405f, 0.038166f, 0.064305f, -0.001492f, -0.050460f, 0.009448f, -0.060014f, 0.009074f, 0.025786f, 0.011558f, 0.002546f, 0.034430f, 0.025217f, -0.002638f, -0.006427f, -0.049837f, -0.027313f, -0.000343f, -0.023860f, 0.065001f, -0.013091f, -0.016064f, -0.029573f, 0.002466f, 0.023797f, + 0.016289f, -0.001972f, 0.011666f, 0.018279f, -0.030428f, 0.008934f, 0.055566f, 0.018961f, -0.040044f, -0.028566f, 0.017267f, -0.020401f, -0.003781f, 0.012624f, -0.009783f, -0.033331f, -0.008835f, 0.002645f, 0.052849f, -0.012986f, 0.010827f, -0.015713f, -0.044824f, 0.006247f, 0.053629f, -0.016192f, -0.034021f, 0.008055f, -0.021276f, 0.011816f, -0.012636f, -0.015066f, 0.036550f, -0.011435f, -0.005370f, 0.016492f, -0.033475f, 0.009628f, 0.038916f, -0.018774f, 0.002597f, -0.025883f, 0.069410f, -0.015580f, 0.007917f, 0.019504f, -0.016365f, -0.007721f, -0.018230f, 0.005137f, -0.019676f, -0.023517f, -0.018248f, -0.107338f, -0.037096f, -0.001183f, 0.035339f, -0.017358f, -0.053323f, -0.019617f, -0.007135f, 0.027271f, 0.007694f, -0.006466f, -0.025966f, 0.029019f, 0.050983f, -0.022034f, 0.038736f, 0.010261f, -0.071050f, 0.027540f, 0.034519f, -0.011105f, -0.028420f, -0.004751f, 0.045070f, 0.047972f, -0.003124f, -0.035121f, 0.003290f, -0.003388f, -0.003851f, -0.029167f, 0.008161f, 0.014311f, -0.046606f, 0.033381f, 0.028565f, -0.032748f, 0.006953f, -0.036833f, 0.014030f, 0.092268f, -0.081121f, 0.085342f, + 0.039056f, 0.004448f, 0.052529f, 0.026357f, -0.052289f, 0.032448f, -0.039160f, -0.008363f, 0.044210f, 0.002595f, 0.013125f, -0.021721f, -0.038185f, 0.118562f, -0.027139f, 0.002193f, 0.047079f, -0.022013f, 0.009612f, 0.003977f, 0.029238f, 0.066889f, 0.063663f, 0.060165f, 0.004183f, -0.000844f, -0.009148f, 0.003359f, -0.015577f, 0.004902f, 0.051727f, -0.012571f, -0.015060f, 0.028556f, -0.006396f, -0.078929f, 0.037197f, -0.057152f, 0.082501f, 0.010378f, -0.069817f, 0.016707f, 0.001728f, 0.033960f, 0.016845f, -0.016509f, 0.061499f, 0.015330f, 0.004312f, 0.040844f, -0.030892f, -0.044229f, 0.002821f, 0.023947f, 0.082687f, -0.010960f, 0.001689f, -0.008071f, 0.060115f, 0.006788f, -0.044912f, -0.027122f, 0.010491f, -0.004806f, 0.027690f, -0.044897f, 0.023560f, 0.007660f, 0.015317f, -0.003792f, -0.015649f, 0.010508f, 0.020288f, 0.000373f, 0.056638f, -0.087587f, 0.010005f, -0.030822f, -0.016779f, -0.011226f, -0.061570f, -0.093163f, -0.093772f, -0.070116f, 0.010337f, 0.000370f, -0.052911f, -0.000462f, -0.006943f, 0.006010f, -0.031266f, -0.089859f, 0.092225f, -0.001625f, -0.009093f, 0.018010f, + -0.083524f, -0.006018f, -0.017223f, 0.016575f, 0.030845f, 0.120822f, 0.095404f, -0.009545f, 0.005022f, -0.001737f, 0.030534f, 0.038876f, 0.029828f, -0.021005f, 0.111434f, -0.102892f, 0.019745f, -0.018405f, 0.005899f, 0.046030f, -0.030440f, 0.012814f, 0.003586f, -0.111486f, 0.004748f, -0.010952f, 0.007481f, 0.014850f, -0.048559f, -0.017090f, -0.081666f, -0.019800f, -0.001950f, 0.006385f, -0.029500f, -0.022001f, -0.034211f, -0.013356f, 0.038538f, 0.009770f, 0.075529f, 0.019815f, -0.022204f, -0.023983f, 0.047539f, -0.047975f, 0.088719f, -0.065152f, 0.022418f, -0.052119f, 0.004101f, 0.053877f, -0.090844f, 0.090739f, 0.018929f, 0.012508f, -0.061059f, -0.010554f, -0.008568f, 0.002430f, 0.034867f, 0.033422f, 0.043129f, -0.071901f, 0.002547f, -0.026592f, -0.020637f, -0.025869f, -0.035055f, -0.024855f, 0.006934f, 0.045728f, -0.039563f, 0.015456f, -0.077332f, -0.024766f, 0.028489f, 0.028440f, 0.012634f, -0.091894f, -0.042536f, -0.030332f, -0.038186f, -0.036530f, 0.015619f, -0.028010f, 0.065581f, 0.018793f, 0.044187f, -0.013175f, 0.046702f, -0.089391f, 0.135043f, -0.102576f, -0.011084f, -0.062206f, + 0.011852f, 0.000568f, -0.037395f, -0.053452f, 0.061422f, 0.040460f, 0.019269f, -0.027840f, 0.027168f, 0.007375f, 0.058206f, -0.047133f, -0.030243f, 0.034911f, 0.060660f, -0.078395f, 0.031439f, -0.004156f, 0.037030f, -0.029281f, 0.011180f, -0.035752f, 0.007572f, -0.065696f, 0.021630f, 0.066873f, -0.001572f, -0.007160f, 0.086137f, 0.012864f, -0.038410f, -0.085452f, 0.072320f, -0.039911f, 0.033317f, -0.032964f, 0.086509f, 0.035077f, -0.007920f, 0.006089f, -0.047712f, 0.003748f, 0.022992f, -0.026846f, 0.025770f, -0.106333f, 0.042638f, 0.090068f, 0.075536f, -0.044175f, -0.039319f, -0.046194f, 0.050309f, -0.000481f, -0.011676f, -0.000855f, 0.124503f, -0.064055f, -0.023303f, 0.041104f, -0.035442f, -0.115373f, 0.051827f, 0.017201f, -0.071492f, 0.035378f, 0.083225f, 0.056470f, -0.010578f, -0.043213f, -0.088477f, 0.045554f, -0.006186f, 0.011032f, -0.033073f, 0.026801f, -0.000434f, 0.014149f, 0.003653f, 0.003870f, -0.019183f, 0.012682f, 0.046346f, -0.061638f, 0.050973f, -0.010153f, -0.032778f, 0.009358f, -0.022559f, 0.012710f, -0.023062f, -0.019625f, 0.014533f, -0.049549f, -0.005737f, 0.062721f, + -0.093377f, 0.024675f, 0.003683f, -0.016977f, -0.029167f, -0.035184f, -0.022565f, 0.065760f, -0.056052f, -0.009515f, 0.021169f, -0.057923f, 0.013748f, 0.029262f, 0.020179f, 0.008898f, 0.009297f, -0.033496f, 0.024624f, -0.084616f, 0.000834f, 0.070707f, -0.030589f, -0.010026f, -0.016460f, -0.022395f, -0.000681f, -0.060634f, 0.031071f, 0.021497f, -0.048383f, 0.043345f, 0.012899f, -0.057504f, 0.023113f, -0.013063f, 0.040649f, 0.032508f, -0.050630f, 0.015394f, 0.058169f, -0.056478f, 0.031546f, -0.041110f, 0.032156f, 0.032081f, -0.051753f, 0.028173f, 0.000609f, -0.029682f, 0.049131f, 0.013960f, -0.046530f, -0.229101f, -0.467833f, -0.202659f, -0.320526f, -0.426071f, 0.121698f, 0.025014f, 0.101222f, 0.563044f, 0.464164f, 0.296465f, 0.479413f, 0.316894f, 0.012707f, 0.057662f, 0.033783f, -0.299037f, -0.203093f, -0.148361f, -0.338129f, -0.344138f, -0.115640f, -0.116113f, -0.224494f, -0.086101f, -0.070065f, -0.263966f, -0.231058f, -0.093131f, -0.139229f, -0.250221f, -0.081507f, -0.063862f, -0.201701f, -0.046235f, 0.095690f, -0.078340f, -0.068361f, 0.154957f, 0.085268f, -0.097743f, 0.134937f, 0.239281f, + 0.005680f, 0.125097f, 0.299879f, 0.135986f, 0.059849f, 0.327383f, 0.234072f, 0.169973f, 0.403730f, 0.554033f, 0.435232f, 0.509509f, 0.665895f, 0.431195f, 0.279088f, 0.371350f, 0.237630f, -0.074832f, -0.020378f, -0.170581f, -0.416907f, -0.587730f, -0.626955f, -0.839264f, -0.948278f, -1.002784f, -0.955856f, -0.908067f, -0.879758f, -0.704786f, -0.470026f, -0.362649f, 0.038999f, 0.300998f, 0.196537f} + }, + { + {0.021751f, -0.001344f, -0.000264f, 0.002367f, -0.002589f, -0.002741f, -0.001962f, 0.005069f, -0.013051f, 0.004925f, -0.003574f, 0.000009f, 0.000693f, -0.000520f, -0.001667f, 0.000794f, 0.002928f, 0.005473f, -0.002548f, 0.006101f, -0.004929f, -0.005469f, -0.003901f, 0.002747f, -0.005111f, -0.003286f, 0.003947f, 0.000769f, -0.001651f, 0.004862f, -0.001116f, 0.000007f, 0.003177f, 0.001717f, -0.002393f, -0.003334f, -0.003598f, -0.004090f, -0.009305f, 0.002470f, -0.002208f, -0.000736f, 0.014139f, 0.001233f, -0.002869f, 0.008104f, -0.002965f, 0.000140f, -0.003650f, -0.006742f, 0.008367f, -0.002690f, -0.001381f, 0.000095f, -0.005786f, 0.001855f, -0.000254f, 0.004249f, -0.000852f, 0.004260f, 0.001657f, -0.001172f, 0.005120f, -0.000664f, 0.001873f, 0.002498f, -0.000150f, -0.011651f, -0.000134f, -0.001703f, -0.004402f, 0.002948f, -0.000979f, -0.002507f, -0.001387f, -0.007215f, 0.004723f, 0.007449f, -0.002352f, 0.006645f, -0.000848f, 0.007004f, 0.003611f, -0.001277f, -0.002469f, 0.007096f, 0.000768f, 0.001592f, -0.007636f, -0.001032f, -0.000383f, -0.000126f, 0.010867f, 0.005449f, -0.000219f, -0.007794f, + -0.005667f, -0.003222f, 0.001140f, 0.000046f, 0.002471f, 0.005146f, 0.001646f, 0.002045f, -0.007952f, -0.001013f, -0.007743f, 0.000551f, -0.004228f, 0.005394f, 0.005273f, -0.001820f, -0.004139f, 0.005630f, 0.001257f, -0.001788f, -0.007192f, -0.000753f, -0.004591f, 0.001544f, 0.004524f, -0.007155f, -0.003553f, -0.001001f, -0.002852f, 0.019098f, 0.004517f, 0.011123f, 0.000796f, 0.003802f, -0.000100f, -0.005224f, -0.005100f, -0.006213f, 0.002968f, -0.005092f, 0.003715f, 0.000330f, 0.004519f, 0.004971f, 0.011393f, 0.003683f, -0.001207f, -0.000418f, -0.007194f, 0.011359f, 0.009927f, 0.001901f, 0.002693f, 0.002935f, 0.002632f, 0.025704f, -0.006521f, -0.005828f, -0.002462f, -0.005547f, 0.000861f, -0.012788f, 0.000641f, 0.002063f, 0.000313f, 0.008008f, 0.000656f, -0.002166f, -0.007741f, 0.004328f, -0.010781f, -0.009494f, 0.002985f, -0.004872f, -0.002381f, -0.002037f, 0.001487f, 0.006585f, 0.009425f, 0.000228f, -0.001744f, 0.010990f, 0.003914f, -0.001197f, 0.000196f, -0.005246f, -0.000068f, 0.012068f, -0.000197f, -0.006446f, -0.004939f, -0.001958f, 0.004104f, -0.006458f, -0.007372f, -0.007992f, + -0.006177f, 0.005106f, -0.005808f, 0.001475f, -0.007012f, 0.001716f, 0.008215f, -0.000190f, 0.005819f, -0.003282f, -0.004783f, -0.003123f, 0.004041f, -0.001086f, 0.006309f, 0.008419f, 0.001338f, -0.003738f, -0.004810f, -0.001221f, -0.000684f, -0.000617f, 0.000355f, -0.009315f, -0.000769f, -0.005039f, -0.004029f, 0.002651f, 0.001036f, 0.001081f, 0.003278f, -0.011426f, -0.005095f, 0.002049f, -0.001376f, 0.004410f, -0.019464f, -0.010054f, -0.004880f, -0.013595f, -0.005277f, -0.013092f, 0.002717f, -0.001983f, -0.008458f, -0.009673f, -0.002165f, -0.008076f, -0.001030f, 0.005015f, -0.001300f, -0.011816f, -0.004886f, -0.000782f, -0.005098f, -0.004475f, 0.002312f, 0.009296f, 0.012308f, -0.003079f, -0.004333f, 0.006412f, 0.007573f, -0.003591f, -0.002759f, -0.002653f, -0.006732f, 0.000817f, 0.001936f, -0.006335f, -0.004792f, -0.002245f, 0.004282f, 0.010207f, -0.000044f, -0.004796f, -0.000764f, -0.006681f, -0.002847f, -0.010026f, -0.004986f, -0.005032f, -0.014966f, -0.002563f, -0.007192f, -0.005542f, -0.016340f, 0.008623f, -0.007513f, -0.007107f, 0.002073f, -0.002061f, -0.001815f, 0.000945f, -0.013648f, -0.004481f, + -0.005308f, -0.002150f, -0.008129f, -0.002156f, -0.004141f, 0.002295f, 0.003924f, -0.005378f, -0.002791f, -0.007364f, 0.001729f, -0.002093f, -0.001625f, -0.001145f, -0.009729f, -0.001394f, -0.007883f, -0.034236f, -0.002539f, -0.016751f, 0.015405f, -0.008593f, 0.027579f, -0.017289f, 0.017416f, -0.015270f, -0.000838f, 0.000084f, -0.011918f, 0.009669f, 0.000398f, -0.004106f, 0.002843f, -0.003526f, -0.001560f, -0.011273f, -0.000119f, -0.008381f, 0.006950f, 0.002901f, 0.008493f, -0.004528f, 0.012674f, 0.011988f, -0.011243f, 0.003673f, -0.009599f, 0.010648f, -0.000057f, -0.006453f, 0.000415f, -0.000370f, -0.000567f, 0.008050f, 0.000856f, -0.010316f, 0.004281f, 0.008629f, -0.000810f, 0.010094f, -0.004665f, 0.008402f, -0.011754f, -0.004987f, 0.007097f, -0.005706f, 0.001474f, 0.010958f, -0.009617f, 0.015806f, 0.005384f, -0.013709f, 0.003030f, -0.013122f, 0.004502f, 0.008968f, 0.004693f, 0.008732f, 0.010230f, 0.004885f, -0.002103f, 0.000385f, -0.000107f, 0.004808f, 0.006940f, -0.001271f, 0.013828f, 0.004437f, 0.009039f, 0.007236f, 0.001672f, 0.002671f, 0.022336f, -0.000281f, -0.006609f, -0.002480f, + -0.008907f, -0.010531f, 0.016186f, -0.003620f, -0.002850f, 0.014855f, -0.001618f, -0.003331f, 0.006301f, 0.011482f, 0.002937f, 0.005516f, -0.000757f, -0.013321f, -0.003891f, 0.009366f, -0.015226f, -0.014979f, -0.005955f, 0.002846f, -0.010888f, -0.006607f, -0.000282f, -0.001806f, 0.009729f, -0.004286f, -0.002748f, 0.010446f, 0.014485f, -0.013330f, 0.002875f, -0.003425f, 0.004940f, 0.001175f, -0.006312f, -0.001571f, 0.005684f, 0.009256f, -0.003135f, -0.013800f, -0.003618f, -0.001486f, -0.004156f, -0.007025f, 0.000372f, -0.001138f, 0.001837f, -0.002132f, 0.001237f, 0.012351f, -0.009987f, 0.000955f, -0.007784f, -0.006001f, -0.010467f, -0.003173f, -0.006368f, -0.013713f, -0.001235f, 0.000731f, -0.006036f, -0.001206f, -0.006374f, 0.005068f, 0.005719f, -0.001132f, 0.001085f, -0.004903f, -0.002225f, 0.016360f, -0.002951f, -0.006493f, -0.021922f, 0.030264f, 0.033905f, 0.007090f, -0.011296f, 0.008342f, 0.013817f, 0.013907f, 0.008138f, 0.010710f, 0.005168f, 0.017027f, -0.000916f, -0.001156f, -0.005891f, 0.011010f, -0.005255f, -0.013422f, -0.018962f, 0.003120f, -0.008740f, -0.007250f, 0.007635f, -0.001192f, + -0.004560f, 0.017435f, -0.000529f, 0.021455f, 0.000866f, -0.007222f, -0.004922f, 0.008128f, 0.005414f, -0.003128f, -0.015669f, 0.024410f, 0.014171f, 0.001076f, 0.013310f, 0.008549f, 0.008843f, -0.006742f, 0.009894f, 0.005734f, 0.002412f, -0.001864f, -0.003678f, -0.009374f, -0.014117f, 0.005119f, 0.007543f, -0.010390f, 0.005016f, 0.010834f, 0.015087f, 0.004888f, 0.013639f, 0.007158f, 0.011642f, -0.015585f, 0.005244f, 0.002531f, 0.003601f, 0.001412f, -0.000922f, 0.008022f, 0.006550f, 0.007169f, 0.009115f, -0.002096f, 0.004357f, 0.003406f, 0.012843f, 0.016588f, -0.008420f, -0.009147f, 0.027587f, 0.009090f, 0.012449f, -0.009356f, 0.004399f, -0.023942f, 0.001776f, -0.017116f, 0.013854f, 0.009645f, -0.007043f, 0.011935f, 0.006819f, -0.011330f, -0.002594f, 0.018032f, -0.000202f, 0.012656f, -0.002925f, 0.003139f, 0.014161f, -0.016440f, -0.001016f, 0.003608f, 0.005349f, 0.001969f, 0.005837f, 0.001570f, 0.017034f, -0.006903f, -0.004583f, -0.004166f, 0.012907f, 0.002546f, -0.005755f, 0.008669f, 0.021580f, -0.013940f, 0.002814f, 0.003912f, -0.001145f, 0.009705f, -0.004188f, 0.017450f, + 0.005617f, 0.005285f, -0.013291f, -0.000136f, -0.003456f, 0.008818f, 0.005784f, 0.009476f, -0.009128f, -0.004663f, 0.007856f, -0.014644f, -0.008922f, 0.005118f, 0.017333f, 0.012016f, 0.015347f, -0.015008f, -0.005169f, -0.015177f, -0.004243f, 0.006996f, -0.001242f, -0.013948f, 0.002398f, -0.007569f, 0.000334f, -0.014975f, -0.020393f, -0.005700f, -0.013883f, 0.004769f, -0.033109f, -0.029965f, -0.021911f, 0.005123f, 0.005165f, 0.022708f, -0.011798f, 0.021516f, -0.010525f, -0.038605f, -0.004601f, -0.004642f, -0.015764f, -0.025372f, -0.010136f, -0.001673f, -0.016234f, -0.001263f, -0.024286f, 0.000555f, -0.025541f, 0.012753f, -0.007433f, 0.008998f, -0.006098f, -0.001527f, -0.008886f, -0.009828f, 0.013586f, 0.001856f, -0.005739f, 0.015900f, 0.000505f, 0.001676f, 0.004421f, 0.014571f, 0.012298f, 0.009427f, -0.001165f, -0.019501f, -0.003370f, 0.007876f, 0.001240f, 0.010340f, -0.006896f, 0.004075f, -0.028615f, 0.007626f, 0.014883f, -0.021493f, 0.010603f, 0.003312f, 0.017859f, 0.013917f, -0.001560f, -0.005986f, -0.002011f, 0.012301f, 0.004941f, -0.018133f, -0.015639f, -0.024724f, -0.013142f, -0.016805f, + -0.005189f, -0.020561f, -0.005774f, -0.007271f, 0.018750f, -0.009964f, 0.008520f, -0.005641f, -0.004434f, -0.006836f, -0.015469f, -0.007571f, -0.040245f, 0.034146f, -0.007213f, 0.020912f, 0.013030f, 0.001005f, -0.025908f, 0.023701f, 0.004959f, -0.000200f, 0.015861f, 0.011534f, -0.009473f, 0.001484f, 0.025697f, 0.009497f, -0.008585f, 0.018406f, -0.007058f, -0.005776f, -0.002906f, 0.006970f, 0.002310f, -0.001498f, 0.004511f, 0.008740f, 0.008709f, 0.008142f, -0.015085f, 0.012263f, -0.012096f, 0.021166f, -0.009828f, 0.021057f, 0.008762f, 0.003324f, -0.016697f, -0.018081f, -0.003906f, -0.005079f, 0.025414f, 0.007855f, 0.020915f, 0.009044f, -0.013527f, 0.002011f, -0.000879f, 0.009196f, 0.003350f, 0.008255f, 0.000953f, -0.009589f, -0.003335f, 0.012932f, 0.032059f, 0.022187f, 0.005628f, 0.008523f, 0.001311f, -0.002674f, 0.018357f, 0.013821f, -0.001617f, 0.019705f, 0.029676f, 0.037525f, 0.004847f, -0.019173f, -0.020592f, 0.010289f, 0.009143f, 0.000720f, 0.011281f, 0.002233f, -0.002420f, 0.002158f, 0.027874f, 0.019018f, -0.029077f, 0.023509f, 0.009421f, -0.020084f, 0.045251f, 0.006281f, + -0.023754f, 0.004793f, 0.012328f, 0.000579f, 0.008815f, 0.032127f, -0.031722f, 0.019776f, -0.013021f, 0.017431f, -0.007237f, 0.003118f, -0.029353f, 0.004148f, -0.003433f, 0.010853f, -0.011402f, 0.000761f, 0.001983f, -0.000600f, -0.017292f, 0.015423f, 0.001503f, -0.002766f, 0.007504f, -0.004306f, 0.007399f, -0.005150f, 0.022882f, 0.017067f, 0.022652f, 0.021526f, -0.003862f, 0.006680f, 0.009661f, -0.000318f, -0.012128f, 0.014677f, -0.019253f, 0.004414f, 0.018692f, -0.012792f, 0.009790f, -0.022758f, 0.006501f, -0.003582f, -0.005301f, -0.003675f, 0.001303f, 0.004554f, 0.005913f, 0.020136f, -0.015027f, -0.002973f, 0.014200f, 0.029254f, -0.028732f, 0.004555f, -0.007688f, 0.006740f, -0.006150f, 0.043093f, -0.029745f, 0.006593f, -0.017509f, -0.012872f, 0.001950f, 0.000133f, -0.000455f, -0.045044f, 0.020473f, -0.029058f, -0.006884f, 0.038865f, -0.012855f, -0.001728f, 0.020412f, 0.004070f, 0.012252f, -0.030639f, 0.027591f, 0.000906f, 0.001231f, -0.008495f, -0.018761f, -0.003424f, -0.003658f, -0.020108f, -0.012438f, 0.020238f, -0.007635f, 0.003083f, -0.011304f, -0.047659f, 0.014912f, 0.001106f, + -0.015295f, 0.007883f, 0.017191f, -0.002736f, 0.001119f, -0.004708f, 0.003669f, 0.011171f, 0.003024f, 0.018584f, 0.012605f, 0.001963f, 0.016334f, -0.015005f, -0.014523f, -0.020613f, 0.006478f, 0.010039f, 0.002405f, -0.032076f, 0.007884f, -0.027625f, 0.037324f, -0.010370f, 0.012716f, 0.031208f, -0.013689f, 0.019272f, 0.004322f, 0.021042f, 0.008237f, -0.012446f, -0.034270f, -0.025668f, -0.019529f, -0.004355f, -0.020448f, -0.005837f, -0.017963f, -0.013231f, 0.032855f, 0.004984f, -0.015098f, -0.015332f, 0.006052f, 0.009476f, -0.003631f, 0.001213f, -0.061869f, 0.019771f, 0.002833f, 0.011966f, -0.039200f, -0.047708f, 0.026538f, -0.024119f, -0.027945f, -0.008922f, 0.016076f, 0.034836f, -0.025325f, 0.000607f, 0.015684f, -0.006505f, -0.009072f, 0.007999f, 0.004454f, 0.025897f, 0.007470f, -0.027459f, -0.002662f, -0.014563f, -0.002606f, -0.016832f, -0.022237f, 0.001873f, 0.018720f, -0.002784f, 0.007316f, -0.018286f, 0.003110f, 0.019000f, 0.013786f, 0.001100f, -0.000385f, 0.011389f, 0.009977f, 0.006375f, 0.016440f, -0.024769f, 0.023548f, 0.017206f, 0.004076f, -0.020721f, -0.000914f, 0.013619f, + -0.017771f, 0.016020f, -0.014708f, 0.018301f, -0.007881f, 0.024288f, -0.043127f, 0.041424f, 0.007172f, 0.038942f, -0.000412f, -0.010085f, -0.006001f, 0.013014f, -0.002394f, -0.035408f, -0.002229f, -0.004139f, -0.038791f, 0.009213f, 0.020858f, -0.035222f, 0.023381f, -0.031429f, 0.004489f, 0.008856f, 0.001107f, -0.039442f, -0.022923f, -0.021567f, -0.001597f, -0.003439f, -0.021372f, -0.020791f, 0.033149f, 0.007215f, 0.022038f, 0.021383f, 0.006470f, -0.015346f, 0.004175f, 0.055498f, -0.037081f, 0.009726f, -0.006002f, -0.019953f, 0.001852f, 0.008006f, 0.009472f, 0.000374f, 0.000747f, -0.010179f, -0.015239f, -0.024039f, -0.011870f, 0.019239f, -0.015042f, -0.024177f, 0.014821f, -0.008293f, 0.006026f, -0.002706f, 0.011619f, -0.009992f, 0.023868f, -0.007881f, 0.003042f, -0.000013f, 0.002967f, 0.021996f, 0.007796f, -0.009517f, 0.011924f, -0.008701f, 0.018054f, -0.010198f, 0.007636f, -0.024857f, -0.018053f, -0.013193f, 0.004752f, -0.012339f, -0.021687f, 0.009465f, 0.016574f, 0.004915f, -0.011479f, 0.007583f, 0.011686f, 0.013044f, 0.035359f, 0.048487f, 0.066134f, -0.006994f, 0.010489f, 0.015543f, + 0.009196f, 0.008301f, 0.010355f, -0.014393f, 0.025811f, -0.004918f, 0.033639f, 0.040561f, 0.030161f, 0.010172f, 0.016307f, 0.002233f, 0.057521f, 0.009670f, -0.014529f, 0.000835f, 0.067374f, 0.054113f, -0.021627f, -0.009379f, -0.026024f, 0.017003f, 0.009218f, 0.033447f, -0.004146f, -0.012939f, -0.004743f, -0.019937f, 0.006364f, 0.001770f, 0.032186f, -0.010503f, 0.013112f, -0.040183f, 0.024410f, -0.002405f, 0.017765f, 0.000561f, 0.016327f, 0.003168f, -0.021405f, -0.011406f, -0.018025f, -0.014626f, 0.018964f, 0.041236f, 0.019875f, -0.004366f, -0.010409f, -0.000141f, -0.001140f, 0.010494f, 0.016108f, -0.025757f, 0.001919f, -0.008880f, -0.006193f, -0.028149f, -0.019223f, -0.045775f, 0.003540f, -0.002368f, 0.019305f, -0.013898f, 0.032266f, -0.022583f, -0.006797f, 0.058369f, 0.061351f, -0.040783f, 0.012282f, 0.033066f, -0.016143f, -0.010205f, 0.020974f, -0.007542f, -0.020800f, 0.064083f, -0.012263f, -0.100860f, 0.037286f, -0.003167f, -0.046687f, 0.036859f, 0.046600f, -0.017686f, 0.034349f, 0.033598f, -0.012304f, -0.003433f, 0.028622f, -0.031198f, 0.012587f, -0.026345f, -0.013968f, 0.002996f, + 0.009814f, 0.020331f, 0.008856f, -0.019342f, -0.005156f, 0.014681f, -0.020554f, 0.017147f, -0.011243f, -0.025384f, 0.019495f, 0.009614f, 0.008663f, -0.007428f, -0.008092f, -0.009877f, -0.003295f, 0.016690f, -0.039525f, 0.017217f, -0.002991f, 0.029853f, -0.021914f, -0.001210f, -0.026737f, 0.009416f, -0.042120f, 0.003210f, -0.000581f, -0.016976f, -0.014388f, 0.005288f, -0.029228f, -0.047346f, 0.025587f, -0.003594f, 0.005930f, -0.028323f, 0.014244f, -0.005314f, 0.015456f, 0.018519f, 0.006971f, -0.020057f, 0.013300f, -0.009930f, -0.006946f, -0.036365f, 0.002397f, -0.025955f, -0.030737f, -0.041142f, -0.019585f, 0.006273f, 0.008401f, -0.042191f, -0.023752f, 0.002321f, -0.018078f, -0.056255f, -0.047882f, -0.045572f, -0.012685f, -0.026735f, 0.021206f, 0.035599f, 0.006148f, -0.032249f, -0.042881f, -0.043328f, -0.007882f, 0.001094f, 0.020243f, -0.026397f, 0.052548f, 0.058211f, -0.010828f, 0.040161f, -0.008136f, -0.011908f, -0.012109f, 0.039269f, -0.029348f, -0.004417f, -0.012725f, 0.060736f, 0.004567f, 0.024134f, 0.009947f, -0.002364f, 0.031156f, 0.019256f, 0.025893f, 0.010619f, -0.001419f, -0.006879f, + 0.024802f, -0.000464f, -0.019965f, 0.031009f, 0.001395f, 0.027637f, -0.024956f, 0.022368f, 0.008777f, -0.023972f, -0.019217f, 0.053884f, 0.034621f, 0.000621f, 0.019968f, 0.018840f, -0.030045f, -0.017090f, 0.012434f, 0.011991f, 0.024162f, 0.006825f, 0.006679f, 0.012857f, 0.028995f, 0.015456f, 0.008681f, -0.022844f, 0.076789f, 0.054894f, 0.007388f, -0.029260f, 0.018361f, -0.006712f, 0.010863f, -0.002952f, 0.017558f, -0.006147f, 0.003961f, 0.046522f, -0.027342f, -0.008672f, -0.037246f, 0.016115f, -0.009142f, -0.001338f, 0.036714f, 0.016632f, 0.006024f, 0.008505f, -0.012672f, -0.023748f, 0.023805f, -0.016629f, -0.037706f, 0.103364f, -0.112793f, -0.011817f, -0.058573f, 0.075281f, 0.021588f, 0.014374f, -0.027013f, 0.008220f, -0.021680f, 0.067465f, -0.009848f, -0.003029f, 0.008689f, -0.002099f, -0.023939f, 0.011043f, 0.017052f, 0.021131f, -0.042636f, -0.022397f, -0.020908f, 0.010203f, -0.011368f, -0.011040f, 0.000782f, 0.000540f, 0.031603f, -0.014217f, 0.003784f, 0.023037f, -0.000375f, -0.028644f, 0.006154f, 0.024122f, -0.000289f, -0.045715f, 0.037300f, 0.004897f, 0.003259f, 0.000610f, + -0.016936f, 0.015968f, -0.083261f, -0.059446f, -0.005578f, -0.020945f, 0.006772f, 0.007094f, -0.037352f, 0.063799f, -0.022098f, 0.087663f, -0.009268f, -0.030176f, 0.032982f, 0.005310f, 0.029820f, 0.040651f, 0.016008f, -0.041320f, -0.008281f, 0.046732f, 0.111487f, 0.003573f, -0.024488f, 0.044939f, 0.007007f, 0.052796f, 0.011511f, 0.071223f, -0.016099f, -0.004481f, -0.000242f, 0.013259f, 0.002869f, 0.147570f, 0.044653f, 0.014953f, -0.006365f, -0.017542f, -0.023125f, 0.047188f, 0.042901f, -0.052942f, 0.028735f, 0.021706f, 0.003407f, -0.016998f, -0.029264f, -0.071627f, -0.028314f, 0.020997f, 0.005225f, -0.024014f, 0.040236f, -0.015210f, 0.014943f, 0.015518f, -0.012531f, -0.011386f, 0.041864f, -0.000311f, -0.019290f, 0.026128f, -0.026637f, 0.052763f, -0.029255f, -0.017713f, -0.005708f, 0.019584f, 0.008370f, 0.053274f, -0.019880f, -0.034524f, -0.014800f, 0.012771f, 0.000498f, 0.027602f, 0.004646f, 0.000682f, -0.015571f, 0.021708f, 0.099269f, 0.041699f, -0.042323f, 0.030816f, -0.024350f, -0.033708f, 0.020902f, -0.003751f, 0.002583f, -0.004929f, 0.013136f, -0.030459f, -0.047131f, -0.113621f, + -0.035059f, 0.035326f, -0.021202f, -0.042341f, 0.009164f, -0.014128f, 0.008201f, -0.050504f, -0.048106f, -0.026202f, 0.005436f, 0.006987f, 0.038550f, -0.006428f, -0.024757f, -0.061164f, -0.021972f, 0.034449f, -0.025114f, 0.092434f, 0.077804f, 0.037200f, -0.019501f, -0.030632f, 0.055999f, 0.048229f, -0.059996f, -0.011030f, -0.036235f, 0.054167f, -0.007570f, -0.073424f, -0.031249f, 0.028090f, 0.048167f, -0.085123f, 0.036079f, -0.058513f, 0.023536f, -0.033992f, -0.007830f, 0.043013f, -0.012720f, 0.007690f, 0.027893f, 0.056810f, -0.035052f, -0.059643f, 0.014886f, -0.003548f, 0.007847f, 0.058089f, 0.015511f, 0.043607f, -0.052653f, -0.008833f, 0.018358f, -0.046964f, 0.079477f, -0.008195f, 0.047990f, -0.005688f, -0.010091f, 0.039329f, 0.039395f, -0.021502f, 0.087147f, -0.019694f, -0.036928f, 0.042063f, 0.074765f, 0.004422f, 0.013848f, 0.003599f, 0.032960f, -0.035173f, 0.026263f, 0.112095f, 0.051543f, -0.004455f, 0.048565f, 0.059223f, -0.046052f, -0.139826f, 0.008598f, 0.080324f, 0.091033f, 0.021841f, -0.013769f, -0.046004f, 0.040378f, 0.096058f, 0.026437f, 0.007794f, 0.060991f, -0.127381f, + 0.093234f, 0.017718f, -0.059787f, -0.001256f, 0.050979f, -0.037561f, -0.001022f, 0.027737f, -0.039875f, 0.001332f, -0.036169f, -0.023035f, 0.032637f, -0.032085f, -0.020106f, -0.065448f, 0.024731f, 0.060475f, 0.014459f, -0.029372f, -0.050418f, -0.008966f, 0.032434f, 0.017935f, -0.043674f, -0.002306f, 0.045412f, -0.007594f, -0.000082f, -0.017674f, -0.015419f, 0.113530f, -0.058540f, -0.014886f, -0.016455f, 0.018482f, 0.049389f, -0.057180f, -0.035633f, 0.074799f, -0.012918f, -0.005245f, -0.094295f, -0.074812f, 0.026928f, 0.050529f, 0.023285f, -0.092304f, 0.058746f, -0.001503f, -0.018833f, 0.013608f, -0.070888f, -0.017706f, -0.013619f, -0.031892f, 0.054131f, -0.045267f, -0.031242f, -0.048437f, -0.034550f, -0.063942f, 0.013776f, -0.100529f, -0.035251f, 0.014881f, -0.058081f, 0.016232f, 0.020930f, 0.017152f, -0.009192f, -0.012115f, -0.046894f, 0.063853f, -0.023975f, 0.006790f, -0.071758f, 0.043873f, -0.001029f, 0.056677f, -0.011293f, 0.058567f, 0.007733f, -0.007428f, 0.026604f, 0.067831f, 0.032998f, 0.017321f, 0.014111f, 0.008542f, 0.027290f, -0.034335f, -0.002122f, -0.025857f, -0.026199f, 0.041416f, + 0.026712f, 0.015592f, -0.011212f, -0.010932f, -0.004101f, 0.043127f, 0.007578f, -0.019907f, -0.030610f, -0.002102f, -0.006468f, 0.032082f, 0.006040f, 0.026627f, 0.052661f, -0.015280f, -0.129463f, 0.007578f, 0.107361f, 0.009977f, -0.076604f, -0.011287f, 0.031312f, 0.022240f, 0.043080f, 0.036486f, -0.001662f, -0.026189f, -0.023758f, 0.031505f, -0.018628f, 0.001884f, 0.013237f, -0.137619f, -0.021833f, -0.028232f, 0.023285f, 0.104270f, -0.000138f, 0.006028f, -0.022861f, 0.004487f, 0.023932f, 0.041711f, 0.025373f, -0.029738f, -0.011825f, -0.069504f, -0.001853f, 0.041200f, -0.017790f, -0.014025f, 0.018867f, 0.040554f, 0.039281f, -0.017251f, 0.010106f, -0.030885f, -0.240792f, -0.429438f, -0.188509f, -0.299231f, -0.339953f, 0.168310f, 0.041546f, 0.152529f, 0.511839f, 0.325936f, 0.257865f, 0.399761f, 0.186314f, -0.012574f, 0.142185f, 0.015737f, -0.196823f, -0.145973f, -0.162090f, -0.338305f, -0.279741f, -0.135519f, -0.253092f, -0.276085f, -0.129292f, -0.179675f, -0.284090f, -0.159012f, -0.005439f, -0.187772f, -0.173976f, 0.007826f, -0.057185f, -0.172958f, 0.141435f, 0.084002f, -0.148849f, 0.099135f, + 0.162988f, 0.004630f, 0.083368f, 0.352382f, 0.155384f, 0.089883f, 0.419455f, 0.287502f, 0.157559f, 0.414177f, 0.563062f, 0.340957f, 0.503743f, 0.658674f, 0.465968f, 0.303083f, 0.406418f, 0.206165f, -0.231230f, -0.157120f, -0.298233f, -0.676755f, -0.676240f, -0.684163f, -1.024754f, -1.011077f, -1.011680f, -1.052600f, -0.988040f, -0.959040f, -0.745086f, -0.590007f, -0.428513f, -0.151438f, 0.117942f, 0.226351f, 0.521703f, 0.785957f, 0.557523f, 0.409130f}, + {0.023532f, 0.002482f, 0.004373f, 0.007645f, -0.010314f, -0.002805f, -0.005886f, -0.001249f, -0.002683f, -0.006388f, -0.000719f, -0.000947f, -0.006281f, 0.007830f, -0.005144f, -0.003243f, -0.000530f, -0.002877f, 0.006772f, -0.003076f, -0.004820f, 0.002004f, 0.002484f, 0.007150f, -0.000722f, 0.001520f, -0.004581f, -0.000902f, 0.000521f, 0.002130f, 0.000485f, -0.000192f, 0.007349f, -0.004303f, 0.001656f, 0.000445f, -0.004555f, -0.010538f, -0.004225f, 0.002260f, 0.003681f, 0.003798f, -0.010297f, 0.008021f, -0.003968f, -0.004321f, 0.004323f, 0.001737f, -0.009056f, 0.003479f, -0.009267f, -0.002719f, 0.003919f, -0.007238f, -0.002884f, 0.006243f, -0.002342f, -0.004110f, -0.005291f, -0.010321f, 0.007995f, 0.002852f, -0.003287f, -0.003163f, -0.006960f, -0.007903f, -0.009066f, -0.001970f, -0.005979f, -0.000097f, -0.000415f, -0.000505f, 0.000569f, -0.000573f, -0.005788f, -0.013216f, -0.001484f, 0.011844f, -0.011118f, 0.003915f, -0.018534f, -0.000068f, -0.006916f, 0.007079f, -0.006487f, 0.001427f, -0.004515f, -0.007855f, -0.002310f, -0.000951f, 0.005173f, 0.006714f, -0.006943f, -0.011662f, 0.005623f, 0.001853f, + 0.003806f, 0.002344f, 0.004343f, -0.006815f, -0.005399f, 0.001023f, -0.001692f, 0.005817f, 0.003865f, -0.005224f, -0.001545f, 0.004417f, 0.007982f, 0.005074f, -0.000414f, -0.006744f, 0.003070f, -0.001242f, -0.004039f, 0.004569f, 0.001492f, -0.006169f, -0.005637f, -0.004202f, 0.002842f, -0.006020f, -0.003788f, 0.004968f, 0.001330f, -0.000210f, -0.006868f, 0.002283f, -0.006018f, -0.013840f, 0.000688f, -0.004695f, -0.009641f, 0.004136f, -0.003287f, -0.002501f, -0.003847f, 0.000261f, 0.005976f, 0.004188f, 0.001410f, 0.003209f, 0.004190f, -0.010302f, 0.004404f, -0.004011f, -0.005128f, -0.002164f, 0.002205f, 0.000785f, 0.005867f, 0.027662f, -0.002339f, 0.005079f, 0.006077f, -0.002817f, 0.002850f, 0.011041f, -0.008617f, -0.001491f, 0.003120f, -0.004238f, -0.000879f, 0.008138f, -0.002658f, -0.001774f, -0.000612f, 0.003196f, -0.001604f, 0.003965f, -0.002798f, -0.002616f, -0.001308f, -0.006197f, -0.010800f, -0.001930f, -0.003522f, -0.001339f, 0.006228f, -0.011252f, 0.013870f, 0.000202f, 0.000142f, 0.000608f, 0.002529f, -0.000200f, -0.005482f, 0.000993f, 0.004184f, 0.010697f, 0.000399f, 0.000094f, + -0.001738f, -0.003370f, 0.006867f, 0.003523f, -0.002705f, 0.004075f, -0.007130f, 0.001415f, 0.002069f, -0.005040f, -0.018307f, -0.005423f, -0.000623f, -0.000792f, -0.001039f, -0.001301f, -0.002491f, -0.000997f, -0.003634f, 0.004789f, 0.013180f, 0.007947f, 0.000394f, 0.000379f, -0.000552f, 0.005114f, -0.002931f, -0.011704f, -0.000622f, -0.005803f, 0.003787f, -0.006572f, 0.003834f, -0.016801f, -0.000489f, -0.000908f, -0.024123f, -0.023256f, -0.008602f, -0.003250f, -0.003111f, 0.000246f, 0.006185f, 0.001641f, 0.005075f, -0.010809f, 0.005708f, 0.007091f, 0.006899f, 0.008005f, -0.005763f, 0.001888f, 0.018595f, -0.011125f, -0.000128f, -0.007866f, -0.011434f, -0.001194f, -0.000548f, 0.010360f, -0.004636f, 0.001272f, -0.008452f, 0.005810f, 0.003806f, 0.004602f, -0.019301f, 0.003221f, -0.003268f, -0.006684f, -0.001525f, 0.000097f, -0.014214f, -0.009232f, -0.007780f, -0.000468f, 0.012513f, 0.004401f, 0.004395f, 0.006021f, -0.005059f, 0.003614f, -0.004486f, 0.010565f, 0.016400f, -0.001333f, -0.001047f, 0.004706f, 0.001561f, 0.004286f, 0.009446f, -0.004076f, 0.009778f, -0.001328f, 0.000218f, 0.005612f, + 0.008059f, -0.002761f, -0.010322f, -0.009946f, 0.004451f, -0.001344f, -0.001251f, -0.004438f, 0.005588f, -0.008435f, 0.003778f, 0.006033f, 0.011253f, -0.006542f, 0.010796f, 0.005817f, 0.003708f, -0.026716f, 0.011457f, -0.012005f, 0.021338f, -0.020014f, 0.015596f, 0.007899f, -0.008338f, -0.010437f, -0.005815f, 0.003995f, 0.003633f, -0.005680f, 0.012582f, -0.004633f, -0.012099f, -0.002554f, 0.013028f, 0.008856f, -0.013227f, 0.002019f, -0.001667f, -0.013928f, -0.005735f, -0.008993f, -0.002076f, -0.010686f, -0.002801f, -0.004512f, -0.014568f, -0.005297f, 0.007446f, 0.010538f, -0.002003f, -0.012600f, -0.002467f, 0.008775f, -0.002647f, 0.000219f, 0.000699f, 0.000112f, -0.012325f, -0.000456f, -0.001358f, -0.003242f, -0.000431f, 0.002110f, -0.008731f, 0.005002f, -0.009334f, -0.000294f, 0.000166f, 0.000112f, 0.007340f, 0.000060f, -0.002988f, 0.002797f, 0.005250f, 0.011605f, 0.005732f, 0.002566f, -0.002938f, -0.007351f, -0.006318f, -0.002951f, -0.006866f, -0.005480f, 0.005101f, 0.007521f, -0.004804f, -0.009595f, -0.005450f, 0.002788f, 0.002899f, -0.009137f, 0.033385f, 0.013760f, -0.001361f, 0.008176f, + -0.004403f, 0.019043f, 0.008561f, 0.033665f, 0.001476f, -0.031054f, 0.009027f, 0.020062f, -0.010597f, 0.004136f, 0.014178f, -0.009467f, 0.010274f, -0.007542f, -0.000880f, -0.009479f, -0.008795f, -0.002354f, 0.003648f, -0.000340f, 0.005368f, -0.003666f, 0.015080f, -0.007730f, 0.004978f, 0.003298f, 0.010185f, -0.016127f, -0.007740f, -0.005947f, -0.000943f, -0.005277f, 0.002652f, 0.010937f, 0.008414f, 0.016968f, -0.001276f, -0.000550f, -0.008156f, -0.002398f, 0.011448f, -0.009389f, 0.009685f, -0.008745f, -0.002730f, 0.015608f, 0.022860f, 0.016130f, 0.004006f, -0.010761f, 0.009325f, 0.006581f, -0.004696f, 0.013220f, -0.006874f, 0.003123f, 0.003474f, -0.022339f, 0.001354f, -0.021135f, -0.007133f, 0.004137f, -0.004027f, -0.009721f, -0.007022f, 0.002519f, 0.016989f, 0.004468f, -0.003882f, -0.006823f, -0.004167f, 0.002322f, 0.005039f, 0.020590f, 0.041323f, -0.017459f, -0.012847f, -0.003235f, -0.004401f, 0.014611f, -0.013208f, -0.024498f, -0.008178f, 0.002056f, -0.005641f, 0.007439f, 0.003824f, 0.012671f, 0.005652f, -0.004669f, 0.018278f, 0.016961f, -0.007200f, 0.001477f, -0.010978f, -0.001697f, + 0.001151f, -0.006828f, -0.000839f, 0.012686f, 0.018419f, 0.000940f, 0.003507f, 0.007565f, 0.005284f, 0.003079f, 0.001822f, -0.006568f, -0.012220f, 0.001665f, -0.017829f, 0.000844f, 0.004901f, -0.005716f, 0.007934f, -0.004518f, -0.009507f, -0.000644f, 0.010667f, 0.004544f, -0.003702f, 0.030300f, 0.000693f, 0.009863f, -0.017143f, -0.003875f, 0.013164f, -0.005648f, -0.012411f, 0.007942f, -0.014653f, -0.013851f, 0.004158f, 0.017232f, -0.012971f, -0.007747f, -0.003039f, 0.000849f, -0.005160f, -0.006159f, 0.024371f, 0.013693f, -0.000663f, 0.001534f, -0.009237f, -0.007432f, -0.002466f, 0.007520f, 0.015965f, -0.029304f, -0.004159f, -0.022067f, -0.012683f, -0.020008f, -0.005288f, -0.003268f, -0.003229f, -0.007829f, 0.008577f, -0.028085f, 0.014067f, -0.009721f, 0.008258f, 0.003511f, 0.011364f, 0.000444f, 0.004559f, -0.011436f, -0.005031f, 0.005006f, -0.011454f, -0.008314f, 0.013426f, 0.003589f, 0.005932f, 0.005320f, -0.001672f, 0.003507f, 0.020113f, -0.007478f, 0.001691f, -0.009354f, 0.016120f, -0.010057f, -0.036688f, 0.011125f, 0.005459f, 0.015184f, 0.008016f, 0.020987f, -0.014537f, -0.005782f, + 0.012482f, -0.005420f, -0.012467f, -0.005876f, 0.006369f, -0.017799f, 0.017225f, -0.000707f, 0.011396f, -0.015025f, -0.006815f, -0.005498f, -0.016450f, -0.003360f, -0.013124f, -0.005921f, 0.001133f, 0.018613f, 0.014793f, -0.001724f, -0.023087f, -0.013059f, -0.004404f, 0.018104f, 0.014823f, 0.010902f, 0.009981f, -0.006451f, -0.026508f, -0.006874f, -0.000592f, 0.005850f, -0.039312f, -0.047250f, -0.027203f, 0.017687f, 0.000352f, -0.009809f, -0.010919f, -0.015936f, -0.002708f, 0.003760f, -0.026832f, -0.003695f, 0.015097f, -0.011163f, -0.008175f, 0.016874f, 0.003659f, -0.013213f, 0.003470f, -0.012836f, 0.025803f, -0.009964f, -0.007475f, 0.007415f, -0.015057f, -0.010063f, -0.009262f, 0.003248f, -0.010761f, -0.004952f, 0.003467f, 0.001925f, -0.032603f, 0.012785f, 0.012749f, -0.010443f, 0.023454f, 0.008040f, 0.001350f, 0.022079f, 0.012418f, 0.002803f, 0.002334f, 0.023952f, -0.003460f, -0.005742f, -0.002623f, 0.014143f, 0.007823f, -0.024431f, 0.008035f, 0.005720f, -0.001016f, -0.013742f, -0.037892f, 0.014828f, -0.003225f, -0.010696f, -0.023997f, -0.014727f, 0.013585f, -0.004681f, -0.007415f, -0.017188f, + -0.030726f, 0.001281f, -0.004652f, -0.017863f, -0.007086f, -0.030477f, -0.004717f, -0.008525f, -0.005261f, -0.003537f, 0.010858f, 0.019300f, -0.039251f, 0.031888f, 0.001994f, 0.016352f, -0.002654f, -0.001209f, 0.003255f, 0.017603f, 0.002035f, -0.002116f, -0.023493f, 0.008519f, -0.002254f, -0.018393f, 0.005205f, -0.012038f, -0.008823f, 0.034132f, 0.010169f, 0.010462f, -0.006884f, 0.012154f, 0.015296f, 0.014172f, -0.007730f, 0.012335f, 0.007066f, -0.014542f, 0.010003f, -0.014173f, -0.004163f, 0.008728f, 0.004944f, -0.001682f, -0.007012f, -0.007556f, 0.023515f, -0.006900f, -0.009140f, -0.006705f, 0.005528f, 0.004592f, -0.009923f, -0.018704f, -0.000350f, -0.020074f, -0.001282f, -0.018172f, -0.005595f, -0.004685f, 0.004646f, -0.009548f, -0.014128f, 0.018842f, -0.006723f, -0.021947f, 0.015026f, 0.022160f, -0.009589f, -0.007984f, 0.013068f, 0.007645f, 0.024219f, 0.013830f, 0.004010f, -0.001064f, -0.021401f, 0.004693f, 0.024196f, 0.016903f, -0.013763f, 0.015962f, 0.020635f, -0.013615f, -0.032253f, -0.012650f, -0.028102f, 0.008259f, -0.062202f, 0.030808f, 0.009195f, -0.002267f, 0.043063f, -0.001808f, + 0.022116f, -0.018251f, -0.003796f, 0.004058f, 0.000906f, 0.024961f, 0.016045f, -0.032195f, 0.021177f, 0.002284f, 0.012954f, -0.028914f, -0.000559f, 0.017881f, -0.028519f, 0.037173f, 0.010445f, 0.000369f, -0.012447f, 0.002943f, 0.016326f, -0.025342f, 0.002944f, 0.007452f, 0.005138f, -0.015314f, -0.005462f, 0.016033f, 0.009103f, -0.000833f, 0.002727f, -0.009776f, -0.017680f, 0.008319f, -0.030216f, -0.000436f, 0.044255f, 0.043679f, -0.013366f, 0.006167f, -0.001579f, 0.013131f, 0.031087f, 0.003480f, 0.014952f, 0.005797f, -0.016051f, -0.000299f, -0.003020f, -0.045588f, -0.021025f, 0.029761f, 0.001218f, 0.009871f, -0.011471f, -0.001828f, 0.009860f, 0.015014f, -0.001837f, 0.036972f, -0.000292f, 0.029170f, 0.002352f, 0.007237f, 0.002077f, -0.016734f, -0.025220f, 0.030362f, 0.003302f, -0.011499f, 0.021689f, -0.045174f, 0.019027f, 0.029522f, -0.003392f, 0.009252f, 0.013579f, -0.006330f, -0.003863f, 0.018501f, -0.006153f, 0.027730f, -0.025190f, 0.014768f, 0.033944f, -0.035100f, 0.001956f, -0.016311f, 0.021597f, 0.009639f, 0.017976f, -0.017386f, -0.013710f, 0.000536f, 0.045589f, 0.001270f, + 0.023253f, -0.009382f, 0.001761f, -0.002349f, -0.003661f, -0.019284f, -0.000450f, -0.004858f, 0.009497f, -0.008181f, -0.012739f, -0.010152f, -0.000594f, -0.003033f, 0.020605f, 0.004283f, -0.011119f, -0.009458f, -0.010262f, -0.003029f, -0.004865f, 0.034078f, 0.001489f, 0.017495f, 0.001135f, -0.007238f, -0.007352f, 0.028459f, 0.020549f, -0.007225f, -0.026280f, 0.015484f, 0.009889f, -0.056795f, 0.003016f, 0.033196f, 0.031250f, 0.008115f, 0.024673f, -0.033974f, 0.056269f, 0.005749f, 0.010161f, 0.012066f, 0.026282f, -0.001189f, -0.025290f, -0.006159f, -0.029725f, 0.034715f, -0.014367f, 0.017062f, -0.034443f, -0.027705f, 0.023869f, 0.019870f, 0.049539f, -0.018223f, -0.013548f, -0.009534f, 0.009110f, -0.021865f, -0.002812f, 0.007578f, -0.001705f, 0.026084f, 0.017115f, -0.022272f, 0.001821f, 0.005466f, 0.015431f, -0.025325f, 0.025676f, -0.001325f, 0.011416f, -0.005267f, -0.011639f, -0.026628f, 0.009207f, -0.005447f, -0.010623f, 0.004128f, -0.015482f, -0.016388f, -0.003097f, 0.006941f, 0.031555f, -0.047504f, -0.027556f, -0.026190f, -0.027515f, -0.009194f, 0.032963f, -0.020365f, -0.000118f, 0.030486f, + -0.003795f, -0.015692f, -0.026576f, -0.008839f, -0.010759f, -0.058458f, -0.042992f, -0.013983f, 0.011417f, -0.006992f, 0.011567f, -0.014265f, -0.007329f, 0.025419f, 0.018380f, -0.030229f, -0.012430f, -0.033695f, -0.010080f, 0.000756f, 0.015740f, -0.007660f, 0.006833f, -0.029258f, -0.017826f, -0.022015f, 0.004071f, 0.002420f, 0.007185f, -0.028004f, 0.007250f, 0.033242f, 0.018464f, -0.024581f, 0.004503f, -0.002816f, 0.056079f, 0.006020f, 0.026884f, -0.023574f, -0.016188f, -0.005865f, -0.026776f, -0.016919f, -0.025901f, -0.011988f, -0.016923f, 0.030460f, 0.007309f, 0.007635f, 0.031068f, -0.000908f, -0.002234f, 0.014146f, 0.027837f, 0.044196f, 0.031849f, -0.006730f, -0.012582f, -0.051067f, 0.013435f, 0.015881f, 0.005553f, -0.031904f, 0.036029f, 0.014527f, 0.020807f, -0.006182f, 0.001189f, 0.020707f, 0.044984f, 0.044499f, 0.024777f, 0.005163f, 0.046645f, 0.000950f, -0.015432f, 0.015161f, 0.027664f, 0.023126f, 0.041542f, 0.022230f, -0.000553f, 0.004641f, -0.027558f, 0.010621f, -0.066554f, -0.011817f, -0.008467f, 0.013528f, 0.048755f, 0.027673f, 0.005149f, 0.035856f, -0.029462f, -0.025674f, + 0.002351f, -0.064408f, -0.018240f, 0.000764f, 0.008435f, 0.012384f, 0.012496f, -0.006394f, 0.022795f, 0.000275f, 0.008521f, 0.047057f, -0.038735f, -0.020513f, -0.019596f, -0.042835f, -0.013091f, 0.008393f, 0.033417f, 0.060723f, -0.023568f, 0.001497f, 0.010650f, -0.010652f, 0.056574f, 0.010263f, -0.026744f, 0.049256f, -0.009284f, -0.016131f, 0.035869f, -0.031531f, -0.017701f, 0.002352f, 0.003997f, 0.004539f, 0.023910f, 0.012410f, 0.019630f, -0.005599f, 0.010932f, 0.028113f, 0.002815f, 0.019148f, 0.004658f, 0.000717f, 0.032193f, -0.040544f, -0.013468f, -0.013832f, 0.028277f, -0.020783f, -0.004015f, -0.012348f, 0.028127f, -0.011574f, 0.060911f, 0.043195f, -0.038979f, 0.019520f, -0.047078f, 0.006613f, 0.019243f, 0.009050f, 0.012253f, -0.062498f, -0.010223f, -0.060345f, 0.009834f, 0.004358f, 0.009287f, -0.010081f, -0.008748f, 0.027925f, -0.049449f, 0.017020f, -0.020025f, -0.098123f, -0.033943f, -0.032719f, 0.018692f, -0.015105f, 0.017699f, 0.047718f, 0.055094f, 0.028369f, 0.030854f, 0.024255f, 0.011429f, -0.039916f, 0.045388f, -0.002298f, 0.016817f, -0.075512f, -0.034227f, -0.025122f, + 0.015877f, -0.057174f, 0.022699f, -0.033477f, 0.051705f, -0.056804f, -0.072648f, -0.014319f, -0.009108f, 0.060015f, 0.030026f, 0.027750f, -0.013355f, 0.008634f, -0.034404f, -0.027054f, 0.008321f, 0.014129f, -0.044802f, -0.041196f, -0.028663f, -0.001854f, 0.025000f, 0.018893f, -0.030968f, -0.039003f, -0.022214f, -0.022113f, -0.054093f, -0.029964f, 0.026307f, -0.013241f, 0.001299f, -0.005325f, 0.019771f, 0.031169f, -0.005874f, -0.080962f, 0.036938f, 0.072430f, 0.027764f, 0.001184f, -0.082019f, -0.017153f, 0.038311f, -0.007462f, 0.095407f, -0.006890f, -0.073678f, 0.015727f, -0.010911f, 0.009702f, 0.003899f, -0.011440f, 0.022089f, 0.028989f, -0.077818f, -0.017089f, 0.006155f, 0.032714f, -0.013078f, -0.035662f, 0.037751f, 0.009027f, -0.025608f, -0.073320f, -0.091028f, -0.040496f, -0.005608f, 0.014887f, 0.072336f, 0.114018f, 0.045977f, 0.005181f, 0.138866f, 0.127380f, -0.055447f, 0.065440f, 0.057994f, -0.017956f, -0.011111f, -0.032073f, -0.017685f, -0.037496f, -0.026419f, 0.105300f, -0.006819f, 0.060717f, -0.000229f, 0.001534f, -0.000126f, -0.043649f, 0.009124f, 0.007160f, -0.093465f, 0.012187f, + 0.021562f, -0.050354f, -0.011007f, -0.016702f, -0.007432f, 0.011973f, -0.003516f, 0.001051f, 0.040060f, 0.014713f, -0.020519f, 0.010695f, 0.064368f, -0.000852f, 0.029369f, -0.003591f, 0.023910f, -0.037890f, -0.043753f, -0.026351f, -0.079868f, 0.019054f, 0.008549f, -0.037605f, -0.096823f, -0.065459f, -0.090458f, 0.063261f, -0.046974f, 0.007650f, 0.016276f, 0.012192f, 0.012649f, 0.067264f, -0.067277f, -0.002690f, -0.037461f, 0.070973f, -0.166072f, 0.030625f, 0.013620f, 0.049412f, 0.049475f, -0.004054f, -0.014139f, -0.030347f, -0.005829f, -0.054026f, 0.037403f, 0.091424f, -0.005444f, 0.011761f, 0.063050f, -0.043087f, -0.040591f, 0.062456f, -0.110538f, 0.085516f, -0.042399f, -0.027862f, -0.015602f, 0.012890f, -0.028164f, -0.020503f, 0.041787f, -0.005481f, -0.073913f, 0.033102f, 0.000562f, 0.019823f, -0.012431f, 0.076367f, -0.052099f, 0.008346f, 0.034744f, -0.014018f, 0.027667f, -0.040930f, 0.009390f, -0.034302f, -0.014910f, 0.050138f, 0.011243f, 0.023890f, -0.019318f, 0.048858f, -0.006528f, -0.013349f, 0.022066f, -0.019428f, -0.015812f, -0.007193f, -0.008389f, -0.037025f, -0.052733f, -0.009372f, + 0.038736f, 0.007653f, -0.012154f, -0.051358f, 0.008633f, -0.038879f, 0.003432f, 0.026364f, -0.039188f, -0.003383f, 0.040656f, 0.042445f, 0.031998f, -0.048513f, -0.019604f, 0.047983f, 0.020425f, 0.007979f, 0.039795f, -0.177416f, -0.034829f, -0.010920f, -0.075989f, 0.018804f, 0.032868f, 0.006096f, 0.026009f, 0.051932f, -0.011695f, -0.026824f, 0.023040f, -0.021539f, 0.004521f, 0.058009f, 0.000314f, 0.124291f, -0.017304f, -0.035867f, 0.003276f, -0.015010f, 0.060592f, 0.010765f, -0.006957f, 0.058204f, 0.058125f, 0.018920f, 0.021300f, 0.032197f, -0.075822f, -0.041409f, 0.059179f, -0.008847f, -0.062798f, -0.031055f, -0.029795f, 0.041505f, 0.019990f, -0.022411f, -0.090045f, 0.027175f, 0.011117f, 0.011689f, 0.011634f, -0.010363f, 0.006021f, -0.065331f, 0.055717f, 0.041235f, 0.018525f, -0.032283f, -0.031217f, 0.000646f, 0.025961f, -0.005489f, 0.026967f, 0.014444f, -0.073025f, -0.029485f, 0.006975f, -0.068180f, -0.000046f, 0.015095f, -0.065746f, -0.084381f, -0.016773f, 0.028407f, -0.055196f, -0.102270f, -0.051247f, -0.024437f, 0.062444f, -0.037906f, 0.070755f, -0.011862f, -0.003007f, 0.037435f, + -0.002745f, -0.112259f, -0.015846f, 0.011148f, 0.045952f, -0.097239f, -0.154872f, 0.019478f, -0.021393f, -0.080887f, 0.037599f, 0.039529f, -0.021726f, 0.022156f, 0.060470f, -0.056993f, 0.012264f, 0.064604f, 0.028879f, 0.144296f, -0.052137f, -0.054857f, -0.019130f, 0.003392f, 0.137628f, -0.012445f, 0.115092f, -0.070586f, -0.023765f, 0.051849f, -0.076800f, -0.021650f, -0.071816f, 0.018678f, 0.085952f, -0.103528f, -0.033505f, -0.003579f, 0.039791f, 0.004893f, 0.018898f, 0.036107f, -0.000873f, -0.063479f, -0.057056f, 0.009075f, 0.052295f, 0.127367f, -0.019769f, 0.038853f, -0.027606f, 0.065911f, 0.009535f, 0.012993f, -0.009137f, -0.065688f, 0.010217f, 0.072206f, -0.003321f, 0.002270f, -0.016423f, -0.056338f, 0.090881f, 0.037679f, 0.063716f, 0.080035f, 0.005411f, 0.010871f, 0.055056f, -0.110914f, 0.050342f, -0.052500f, 0.149310f, -0.006039f, 0.024235f, 0.028278f, -0.029584f, -0.033295f, 0.025606f, -0.051076f, 0.100633f, -0.042959f, -0.052003f, -0.056422f, 0.106450f, 0.041825f, 0.068838f, 0.000193f, 0.070443f, 0.069030f, -0.035835f, 0.004639f, -0.025261f, 0.020381f, 0.012084f, -0.103537f, + 0.070471f, -0.073612f, 0.008605f, -0.033901f, 0.026912f, -0.002810f, 0.038450f, -0.006151f, -0.034162f, 0.058130f, -0.020927f, -0.007873f, 0.008279f, -0.024030f, -0.021843f, 0.067277f, -0.016551f, -0.008758f, -0.008662f, -0.002937f, 0.029811f, -0.022844f, 0.006277f, -0.016496f, 0.014306f, -0.014252f, -0.012486f, -0.035116f, 0.051340f, -0.031575f, 0.016188f, 0.009342f, 0.035080f, -0.039864f, 0.007786f, -0.015637f, 0.039828f, 0.006567f, 0.001781f, 0.033875f, 0.008157f, -0.052800f, -0.009644f, -0.007885f, 0.013319f, 0.025167f, 0.018017f, -0.047632f, 0.019206f, -0.035516f, 0.024351f, -0.019454f, 0.003589f, -0.010340f, 0.023884f, -0.008254f, 0.005399f, -0.053049f, 0.010838f, 0.028791f, -0.027422f, 0.027142f, 0.001213f, 0.011371f, 0.013423f, -0.020008f, 0.035986f, 0.017134f, -0.003929f, -0.010059f, 0.017263f, -0.010238f, 0.034629f, -0.029198f, -0.004532f, -0.027508f, -0.043452f, 0.086600f, 0.006871f, 0.010538f, -0.035182f, -0.026040f, -0.055630f, 0.036623f, -0.015886f, -0.011703f, -0.024393f, -0.001373f, -0.021786f, -0.003101f, -0.003208f, 0.009268f, 0.010480f, -0.002153f, -0.002946f, -0.016162f, + 0.014264f, 0.013222f, -0.013397f, 0.005672f, -0.029940f, 0.011312f, 0.005383f, -0.005658f, -0.004957f, -0.010355f, 0.009057f, 0.001583f, -0.021415f, -0.006153f, -0.006530f, -0.017979f, 0.028318f, 0.002501f, -0.018659f, 0.002290f, -0.007521f, 0.024462f, -0.009005f, -0.012203f, 0.004510f, -0.015432f, 0.028826f, 0.000305f, -0.016446f, 0.004074f, -0.006891f, 0.013709f, -0.018703f, -0.004207f, 0.005756f, -0.007255f, 0.012507f, -0.007879f, 0.003415f, 0.005211f, -0.016873f, 0.001701f, 0.016213f, -0.025848f, -0.001910f, 0.006965f, -0.023617f, 0.041879f, -0.039168f, 0.018649f, 0.006948f, -0.023205f, 0.044116f, -0.031136f, 0.007516f, 0.004011f, 0.019997f, -0.093506f, -0.215416f, 0.056111f, 0.198816f, 0.168002f, 0.225606f, -0.111710f, -0.144588f, -0.217378f, -0.222080f, 0.014894f, 0.165119f, 0.182218f, 0.199773f, 0.066144f, -0.043760f, -0.159071f, -0.262945f, -0.144326f, 0.066623f, 0.103149f, 0.175021f, 0.132419f, 0.036102f, -0.023947f, -0.055521f, -0.132015f, -0.085434f, -0.081561f, -0.015024f, 0.068923f, 0.106172f, 0.055536f, 0.070847f, 0.035469f, -0.040097f, -0.006672f, -0.085606f, -0.119469f, + -0.020450f, -0.028201f, 0.020925f, 0.111861f, 0.064660f, 0.055305f, 0.016433f, -0.042505f, -0.043331f, -0.037760f, -0.061644f, -0.016582f, 0.002753f, 0.026019f, 0.032297f, 0.053303f, 0.015383f, -0.002282f, -0.027022f, -0.050373f, -0.004146f, 0.017684f, 0.018657f, 0.031239f, -0.007802f, -0.025281f, -0.011746f, -0.025172f, -0.019309f, 0.005560f, 0.014780f, 0.040948f, 0.035180f, 0.034066f, 0.003686f, -0.014302f, -0.060203f, -0.041094f, -0.003967f, -0.002504f} + }, + { + {0.020249f, 0.008776f, 0.009484f, 0.000073f, -0.003806f, -0.009247f, -0.003374f, -0.006663f, -0.006940f, 0.001440f, -0.005649f, -0.003511f, -0.000952f, 0.005654f, -0.000415f, 0.001909f, -0.006101f, -0.003127f, -0.007244f, -0.011766f, 0.006374f, 0.004600f, -0.004967f, 0.002559f, -0.003041f, -0.000623f, 0.007413f, -0.004352f, -0.000865f, -0.005601f, -0.003495f, 0.002938f, 0.004028f, 0.005674f, 0.004976f, -0.007998f, 0.001103f, 0.004212f, 0.000127f, 0.006028f, 0.000775f, 0.001878f, -0.006329f, -0.003385f, 0.001092f, -0.001790f, 0.001516f, 0.000503f, -0.003799f, 0.006675f, 0.004629f, -0.008090f, -0.000344f, -0.000441f, 0.002056f, 0.006981f, 0.002837f, -0.007655f, 0.001110f, 0.002649f, -0.005710f, 0.002140f, 0.002646f, -0.001057f, 0.003033f, -0.000809f, -0.001542f, -0.000643f, -0.004581f, -0.000970f, -0.001860f, -0.003502f, -0.000643f, 0.000066f, -0.000563f, -0.001215f, -0.001935f, -0.010394f, -0.009177f, 0.011250f, -0.002396f, 0.008971f, 0.002553f, 0.013378f, -0.003221f, -0.007018f, -0.004881f, 0.008154f, 0.000136f, -0.003046f, -0.000892f, 0.009235f, -0.002571f, 0.001636f, 0.003158f, -0.006287f, + -0.004854f, -0.002077f, 0.001606f, -0.006516f, 0.001536f, 0.001280f, -0.007619f, -0.002473f, -0.004608f, 0.000605f, -0.003403f, 0.001176f, 0.012113f, 0.006255f, -0.003710f, 0.000567f, -0.005948f, 0.004451f, -0.001704f, 0.007230f, -0.015155f, -0.001646f, 0.002171f, -0.005333f, 0.000804f, 0.007292f, 0.005390f, -0.006732f, -0.005168f, -0.005397f, -0.001188f, -0.004260f, -0.002373f, -0.006539f, 0.002319f, -0.000517f, -0.007837f, -0.003873f, -0.003304f, -0.000293f, 0.001331f, -0.001557f, -0.001055f, 0.003409f, 0.001010f, -0.003450f, 0.001565f, 0.008297f, -0.004535f, -0.000881f, -0.009160f, -0.003116f, -0.001189f, 0.003829f, -0.004335f, 0.001174f, 0.000611f, 0.000558f, 0.014554f, -0.004728f, 0.005094f, 0.012246f, -0.008983f, -0.010224f, -0.001037f, -0.002176f, 0.000418f, 0.006477f, 0.003884f, -0.014425f, 0.002893f, -0.008069f, -0.011211f, -0.000271f, 0.004895f, 0.005157f, -0.003261f, -0.000018f, -0.000670f, 0.006889f, -0.000732f, 0.005747f, -0.001859f, 0.001085f, 0.001771f, 0.002074f, -0.006836f, 0.003604f, 0.006402f, -0.002242f, 0.007997f, -0.003612f, -0.000149f, -0.008732f, 0.007198f, 0.002105f, + -0.001751f, -0.006672f, -0.006373f, -0.002753f, -0.001709f, 0.004020f, -0.000061f, 0.003531f, 0.003782f, -0.005872f, 0.004690f, -0.008044f, 0.003809f, 0.005394f, 0.010166f, 0.009477f, -0.006969f, 0.004305f, 0.000339f, -0.001610f, 0.006354f, -0.003741f, -0.004104f, -0.003313f, 0.005406f, 0.002678f, 0.006803f, -0.005352f, 0.009799f, -0.002401f, 0.000620f, 0.003091f, 0.002577f, 0.005588f, -0.002721f, 0.007748f, 0.010480f, 0.016508f, 0.008330f, -0.017160f, -0.018456f, 0.002121f, -0.001468f, 0.004398f, 0.004166f, 0.012201f, 0.005598f, 0.005808f, 0.003042f, -0.006013f, 0.002402f, 0.015377f, -0.010201f, -0.001223f, 0.000599f, 0.012305f, 0.007585f, 0.001630f, 0.005639f, -0.001092f, 0.004402f, 0.005580f, 0.012863f, 0.006888f, 0.007310f, 0.003667f, 0.003250f, 0.006004f, 0.002451f, -0.009051f, 0.005653f, 0.007083f, -0.002366f, 0.005067f, 0.007262f, -0.002717f, 0.002470f, 0.008465f, 0.003515f, -0.002434f, 0.003441f, 0.008588f, -0.000148f, -0.000481f, -0.001436f, 0.002036f, 0.008721f, -0.002930f, -0.004360f, 0.001925f, -0.002518f, 0.003887f, 0.005665f, -0.006826f, 0.001772f, -0.004675f, + 0.000785f, 0.001845f, 0.007543f, 0.005021f, -0.014300f, -0.000893f, 0.007841f, -0.004733f, -0.005550f, -0.000238f, 0.001837f, 0.006093f, 0.000180f, -0.017212f, -0.006005f, 0.003502f, -0.003303f, 0.005507f, -0.000633f, -0.031693f, 0.003988f, 0.002822f, 0.014202f, -0.000979f, 0.011008f, 0.005427f, 0.002519f, -0.018764f, -0.000355f, -0.000713f, -0.014604f, 0.001839f, 0.010262f, 0.001574f, -0.000576f, -0.001798f, -0.006044f, -0.006972f, 0.002538f, 0.003725f, -0.000868f, 0.002319f, 0.002908f, 0.012287f, 0.001104f, 0.005158f, 0.005606f, -0.007217f, 0.001088f, -0.002105f, -0.002210f, -0.001394f, 0.004346f, -0.001280f, -0.003566f, -0.005687f, -0.003432f, 0.001060f, -0.009467f, -0.007060f, 0.003461f, -0.007851f, 0.001988f, -0.012521f, -0.014624f, -0.004282f, 0.017214f, -0.005327f, -0.001444f, 0.009700f, 0.003064f, 0.000049f, 0.010683f, -0.002320f, 0.000788f, -0.002185f, 0.002781f, 0.006337f, -0.003305f, -0.011963f, 0.006557f, -0.007370f, -0.012932f, -0.005855f, -0.004106f, -0.001013f, 0.003801f, 0.012289f, -0.000756f, -0.001301f, -0.006234f, -0.001794f, 0.006632f, -0.005239f, -0.005787f, 0.007274f, + 0.027993f, 0.001036f, -0.001562f, -0.010450f, -0.005947f, 0.014823f, -0.005816f, 0.011596f, 0.010022f, -0.011106f, -0.001681f, 0.008721f, -0.006128f, -0.002921f, -0.002778f, -0.003958f, 0.002011f, 0.003199f, 0.000698f, 0.005486f, -0.002270f, 0.000954f, 0.002212f, -0.002143f, -0.005083f, -0.005388f, -0.006015f, 0.000609f, 0.007462f, 0.003274f, -0.005918f, 0.000692f, 0.003091f, 0.013964f, -0.003859f, 0.012517f, -0.011030f, 0.005241f, 0.009199f, -0.005756f, -0.003318f, -0.011365f, 0.005728f, 0.000038f, -0.007769f, 0.008167f, -0.009691f, 0.011406f, -0.000269f, 0.016083f, 0.004020f, 0.001932f, 0.004233f, 0.006836f, 0.003944f, -0.004905f, 0.008283f, -0.001203f, -0.007902f, -0.012815f, -0.003060f, 0.005876f, -0.006016f, -0.003900f, 0.005714f, -0.006914f, 0.015033f, -0.013341f, 0.000678f, 0.009815f, -0.007039f, -0.002430f, -0.013490f, -0.000179f, -0.004407f, -0.001896f, -0.002268f, 0.013397f, 0.023750f, -0.007004f, -0.010425f, 0.002689f, -0.004297f, 0.006531f, 0.021600f, 0.000105f, -0.005064f, 0.006852f, 0.003647f, 0.006395f, 0.003802f, -0.011812f, 0.000346f, -0.010540f, 0.005764f, 0.005081f, + 0.002990f, 0.019806f, -0.001069f, 0.014768f, -0.000519f, -0.000365f, 0.004355f, -0.000122f, 0.015393f, 0.002061f, 0.009623f, -0.003609f, 0.013082f, -0.005969f, 0.006877f, 0.026284f, -0.004508f, -0.006617f, 0.018293f, 0.003917f, 0.011819f, -0.000273f, -0.011786f, 0.003616f, -0.006936f, 0.007970f, -0.014192f, -0.001821f, -0.007555f, 0.007868f, -0.001551f, 0.001662f, 0.013904f, -0.006898f, -0.014829f, 0.004097f, -0.001725f, -0.000598f, 0.011109f, 0.002348f, 0.001077f, -0.005129f, -0.010102f, -0.009883f, -0.004060f, -0.008096f, -0.007041f, 0.008815f, -0.005193f, -0.000505f, -0.004118f, 0.001429f, -0.001070f, 0.008251f, 0.003511f, -0.007845f, -0.014148f, 0.033373f, -0.016439f, 0.012162f, 0.001164f, 0.006344f, -0.007168f, -0.005495f, -0.002865f, 0.007787f, 0.009886f, 0.002622f, -0.004270f, -0.008824f, 0.005718f, 0.009702f, -0.001006f, 0.003502f, -0.004064f, 0.010509f, 0.004428f, -0.017846f, -0.005289f, 0.006613f, -0.000281f, -0.007213f, 0.000438f, 0.009070f, -0.005358f, 0.003507f, -0.011199f, 0.007670f, 0.016063f, -0.005652f, 0.016955f, 0.001194f, -0.002060f, 0.011370f, 0.000424f, 0.001476f, + 0.010601f, -0.020296f, 0.004065f, 0.007004f, 0.009848f, 0.006681f, 0.007917f, -0.008737f, -0.006313f, 0.000340f, 0.004337f, -0.009503f, 0.004386f, 0.010582f, 0.009931f, 0.003991f, 0.028200f, -0.007828f, -0.002292f, -0.011544f, -0.004117f, -0.007291f, -0.010103f, 0.014766f, 0.007066f, 0.014477f, -0.000842f, -0.020971f, 0.014080f, -0.006773f, 0.008441f, 0.007293f, 0.004625f, 0.004930f, -0.015489f, 0.021824f, 0.006581f, -0.040925f, -0.034721f, -0.032170f, 0.005033f, 0.004452f, 0.000806f, -0.000438f, -0.003899f, -0.004181f, -0.000907f, -0.007011f, -0.012740f, -0.009506f, -0.021008f, -0.010382f, -0.011067f, 0.009669f, -0.016528f, -0.008452f, -0.010082f, 0.000592f, -0.001508f, -0.005765f, 0.002658f, -0.003220f, -0.017071f, -0.002262f, 0.012476f, -0.000142f, -0.015399f, -0.014136f, 0.003657f, -0.006922f, 0.010215f, 0.006311f, -0.014632f, 0.010763f, 0.018588f, -0.019042f, -0.019021f, -0.011398f, 0.004736f, 0.013950f, -0.013108f, -0.014015f, 0.004434f, -0.009041f, -0.000406f, -0.003759f, -0.003142f, -0.020727f, 0.001849f, 0.008854f, -0.007425f, 0.004031f, -0.010883f, -0.013330f, -0.012560f, -0.007842f, + -0.020417f, 0.029409f, -0.008568f, -0.004788f, 0.003744f, 0.000749f, 0.004913f, 0.001508f, 0.008001f, 0.001560f, 0.006588f, 0.016591f, -0.027729f, 0.014393f, -0.008458f, -0.008794f, -0.003438f, -0.038526f, 0.029457f, 0.007838f, 0.006339f, -0.007075f, 0.028755f, -0.004456f, 0.013439f, 0.000088f, 0.012035f, -0.017029f, 0.006555f, 0.006948f, 0.002339f, -0.008220f, 0.025383f, -0.006695f, 0.007464f, 0.006232f, 0.026271f, -0.017655f, -0.001634f, 0.007817f, -0.005148f, -0.012782f, 0.007421f, -0.011958f, 0.002613f, 0.003915f, -0.015247f, 0.006203f, 0.000493f, 0.001330f, 0.028599f, 0.018994f, -0.003270f, -0.011328f, -0.010258f, 0.007282f, -0.002493f, -0.016826f, 0.004001f, -0.000720f, 0.004121f, 0.014137f, 0.018390f, -0.012473f, 0.012064f, 0.007642f, -0.010099f, 0.007401f, 0.003720f, -0.012747f, -0.008990f, -0.007503f, 0.012384f, -0.013844f, -0.014554f, -0.033285f, -0.027236f, 0.008485f, -0.006779f, -0.003426f, -0.015538f, -0.025196f, 0.007897f, 0.003897f, -0.003478f, 0.015171f, 0.008181f, 0.018063f, 0.005889f, 0.006354f, -0.004702f, 0.005467f, 0.012263f, -0.009989f, 0.011168f, -0.045756f, + 0.043837f, 0.031727f, -0.011847f, -0.009851f, 0.012392f, 0.000912f, 0.001817f, 0.021365f, 0.015299f, 0.001420f, -0.002278f, 0.009106f, -0.004033f, -0.002136f, 0.006538f, -0.008365f, 0.012304f, 0.008785f, -0.008886f, 0.013338f, -0.000616f, 0.004239f, -0.000186f, -0.019627f, -0.000427f, 0.015829f, 0.016189f, 0.006984f, 0.007337f, 0.009220f, -0.008855f, -0.011154f, 0.005917f, 0.010251f, 0.000303f, -0.003702f, -0.009856f, 0.005363f, -0.002414f, 0.014187f, 0.016195f, -0.000713f, 0.018560f, -0.008267f, 0.020599f, 0.011874f, 0.024683f, 0.002830f, 0.004144f, -0.005796f, -0.009201f, -0.000703f, 0.019056f, 0.031326f, 0.002417f, 0.024207f, -0.009330f, -0.020733f, 0.003496f, 0.009678f, -0.018738f, 0.021508f, -0.006150f, 0.008627f, -0.041982f, -0.016594f, 0.000118f, -0.008381f, 0.008548f, 0.016068f, 0.029743f, 0.008509f, 0.000525f, -0.011537f, -0.024001f, 0.013326f, -0.016209f, 0.032913f, -0.011434f, 0.005576f, 0.025125f, 0.025860f, 0.000149f, -0.011984f, -0.005465f, -0.005509f, 0.003739f, -0.016042f, -0.012181f, 0.016746f, 0.005753f, 0.011402f, 0.013731f, 0.015630f, -0.004151f, 0.010762f, + -0.001332f, 0.012531f, 0.046882f, 0.012326f, -0.019479f, 0.022745f, 0.026226f, 0.002823f, -0.001802f, 0.003048f, -0.009711f, -0.014646f, -0.006359f, 0.026343f, 0.018769f, 0.015389f, 0.023202f, 0.006031f, -0.001244f, -0.007797f, -0.024132f, 0.014115f, 0.016444f, 0.009604f, -0.001702f, -0.001432f, -0.006591f, 0.005567f, 0.024227f, 0.016787f, -0.022048f, 0.018284f, -0.018082f, 0.023973f, 0.007574f, 0.010256f, 0.012822f, -0.001605f, -0.008680f, -0.001445f, 0.012122f, 0.040288f, -0.002610f, 0.021342f, -0.004772f, -0.014753f, 0.024196f, 0.020822f, 0.009017f, 0.007019f, 0.023336f, 0.009593f, 0.007080f, 0.001604f, 0.016092f, -0.007714f, 0.016321f, 0.020880f, -0.023400f, 0.016229f, 0.009354f, -0.005331f, 0.001601f, 0.011333f, -0.009773f, -0.020407f, 0.031373f, 0.007230f, 0.006031f, 0.006345f, 0.018587f, 0.005941f, -0.018727f, 0.020536f, -0.026877f, -0.030739f, 0.002692f, 0.004391f, -0.017428f, -0.005015f, -0.051402f, -0.035592f, -0.027521f, -0.008508f, -0.028345f, -0.013083f, 0.010388f, -0.024475f, 0.017419f, 0.017142f, -0.020938f, 0.027444f, 0.013779f, -0.004293f, -0.003118f, -0.012807f, + 0.000105f, -0.023573f, 0.053352f, 0.016788f, 0.007801f, -0.025830f, 0.005897f, -0.007191f, 0.035022f, -0.006029f, -0.001718f, -0.031412f, 0.031060f, 0.003391f, 0.011557f, 0.011665f, 0.017580f, 0.011908f, -0.008371f, 0.012083f, -0.017160f, 0.017600f, -0.007240f, 0.011030f, -0.027022f, 0.059207f, 0.007006f, -0.025088f, 0.012451f, 0.018517f, 0.010753f, 0.021348f, 0.013822f, -0.024167f, -0.039683f, 0.013673f, -0.003734f, -0.002060f, 0.026700f, -0.002547f, -0.002254f, 0.004412f, 0.024101f, -0.003745f, 0.014869f, -0.008782f, -0.010797f, -0.014251f, -0.018709f, 0.037939f, 0.020656f, 0.015089f, -0.009328f, -0.030782f, -0.038385f, 0.021516f, 0.015322f, -0.012195f, 0.011554f, -0.007592f, 0.002904f, 0.037864f, 0.017544f, -0.007948f, 0.021208f, -0.004305f, 0.011943f, -0.009674f, 0.014039f, -0.024125f, -0.036813f, -0.012788f, -0.015336f, -0.000632f, 0.047328f, -0.034589f, 0.023321f, 0.014648f, 0.011244f, -0.005744f, 0.019837f, 0.010436f, -0.033471f, -0.042591f, -0.014056f, -0.018007f, 0.053073f, 0.039645f, -0.010353f, -0.020085f, 0.000130f, -0.020607f, -0.002895f, 0.040026f, 0.036490f, 0.022483f, + -0.028288f, 0.009625f, -0.021613f, 0.040468f, 0.019851f, -0.000580f, 0.002343f, 0.016107f, -0.019691f, 0.008762f, 0.035448f, 0.022019f, -0.026483f, 0.037037f, -0.009236f, 0.021669f, -0.031679f, -0.011497f, 0.056823f, 0.027183f, 0.033291f, 0.009357f, -0.044759f, 0.015845f, -0.036108f, 0.026238f, 0.070514f, 0.026345f, 0.044660f, -0.017809f, 0.013703f, 0.022013f, -0.000972f, 0.007087f, -0.016698f, 0.006465f, 0.028290f, 0.003435f, -0.006258f, -0.022539f, 0.014516f, 0.012291f, -0.024128f, 0.015277f, -0.008615f, 0.021459f, 0.028260f, 0.031471f, 0.035920f, 0.005963f, -0.026400f, 0.009891f, 0.017350f, 0.002319f, 0.048507f, 0.006931f, -0.054190f, -0.031614f, 0.016305f, -0.011017f, -0.064141f, 0.005433f, 0.028245f, 0.013413f, 0.003497f, -0.002523f, 0.034707f, -0.023275f, -0.032694f, -0.002693f, -0.011367f, -0.028425f, -0.001272f, 0.006547f, -0.018332f, -0.023413f, -0.016543f, 0.006151f, 0.004579f, -0.035097f, 0.012612f, -0.011160f, 0.010461f, 0.052679f, -0.005525f, -0.009190f, 0.033479f, 0.002381f, 0.028599f, -0.015944f, 0.020354f, 0.013576f, -0.020929f, -0.006785f, 0.046135f, 0.005354f, + -0.064963f, -0.029773f, 0.039080f, -0.058147f, 0.031869f, -0.055056f, 0.003647f, -0.009377f, -0.079379f, -0.011043f, 0.034603f, 0.071672f, 0.022260f, -0.011169f, 0.016780f, -0.028393f, -0.010090f, -0.063743f, -0.004297f, -0.043482f, -0.006958f, -0.009987f, -0.030410f, -0.032021f, -0.011220f, 0.017497f, -0.029249f, 0.019069f, 0.035362f, -0.037774f, 0.012739f, 0.011506f, 0.005640f, -0.040131f, -0.006795f, -0.000895f, -0.042246f, 0.010359f, 0.052159f, -0.004466f, -0.077471f, 0.026754f, -0.047054f, -0.118790f, 0.032715f, -0.049361f, -0.061522f, 0.002848f, -0.028499f, 0.008062f, 0.020330f, -0.012051f, 0.030601f, -0.026444f, 0.026687f, -0.021900f, -0.053486f, -0.000117f, 0.037426f, 0.035870f, -0.069290f, 0.009587f, -0.008662f, -0.051894f, -0.014123f, -0.013515f, 0.088747f, 0.043434f, 0.051835f, 0.022310f, 0.022143f, 0.052889f, 0.078353f, -0.021983f, -0.039210f, -0.015252f, 0.100881f, 0.109385f, -0.068805f, -0.028851f, 0.047103f, -0.025434f, 0.017175f, -0.033914f, 0.006278f, -0.034719f, -0.063264f, 0.079407f, 0.008797f, 0.023244f, 0.017886f, 0.005239f, 0.007535f, 0.000087f, 0.013339f, 0.018052f, + -0.061512f, -0.050233f, -0.045384f, -0.041870f, -0.033114f, -0.020847f, -0.018949f, -0.033239f, -0.021132f, -0.028401f, 0.026586f, 0.020995f, 0.008040f, -0.016359f, 0.002553f, -0.063278f, -0.034535f, 0.015159f, -0.059594f, -0.006664f, 0.023584f, 0.046941f, 0.003391f, 0.008106f, -0.024395f, -0.037272f, -0.046384f, 0.033258f, -0.008418f, 0.033069f, -0.123338f, 0.006796f, -0.017734f, 0.013275f, 0.069228f, 0.008696f, 0.008325f, 0.008196f, -0.025290f, -0.024407f, -0.003207f, -0.004345f, -0.070961f, 0.015269f, -0.028413f, 0.061490f, 0.000323f, -0.064132f, -0.093257f, -0.053304f, -0.014413f, -0.059720f, -0.063967f, -0.033990f, 0.043278f, -0.008975f, -0.016753f, -0.027821f, 0.120032f, -0.065000f, 0.047665f, 0.085469f, -0.036269f, 0.014309f, 0.069761f, -0.081275f, 0.007114f, 0.011769f, 0.044685f, -0.091682f, 0.009313f, 0.008487f, 0.035148f, -0.038955f, 0.004946f, 0.018765f, -0.050659f, 0.010045f, 0.000588f, -0.008622f, 0.035405f, -0.007548f, -0.003158f, 0.014338f, -0.001852f, -0.008039f, 0.035463f, -0.026640f, 0.014085f, -0.010362f, 0.013736f, -0.016856f, -0.003523f, -0.020899f, 0.006981f, 0.005011f, + 0.065381f, 0.020065f, 0.035697f, -0.005383f, 0.008344f, 0.043680f, 0.006246f, -0.016114f, 0.032789f, 0.018019f, -0.010518f, -0.056679f, 0.061458f, -0.056633f, 0.019368f, 0.026813f, 0.046404f, -0.056039f, 0.070952f, 0.094815f, -0.039710f, -0.097775f, 0.143324f, 0.044920f, -0.049346f, 0.028481f, -0.045422f, -0.078027f, -0.019983f, -0.015709f, -0.059293f, 0.062672f, -0.087281f, 0.030600f, 0.083212f, -0.048965f, -0.104672f, 0.111537f, -0.027091f, 0.066181f, -0.041653f, -0.032972f, -0.067226f, -0.030174f, 0.041739f, 0.032869f, -0.017170f, -0.021385f, 0.022677f, 0.055267f, -0.022152f, 0.042067f, 0.049621f, -0.033076f, -0.004038f, 0.031212f, -0.006816f, 0.001336f, -0.008987f, 0.004110f, -0.048907f, 0.015161f, -0.010264f, 0.003251f, 0.012695f, -0.008402f, 0.010934f, -0.019002f, -0.041001f, -0.018044f, -0.071903f, 0.010758f, 0.000389f, -0.009095f, 0.013950f, 0.008662f, -0.004269f, -0.014738f, 0.029552f, 0.047865f, -0.048026f, 0.072604f, -0.007662f, 0.011332f, 0.010522f, 0.064461f, 0.028923f, 0.047719f, -0.057254f, -0.012253f, -0.010637f, 0.083553f, -0.075984f, -0.023928f, 0.037260f, -0.000640f, + -0.087811f, 0.008097f, -0.018081f, -0.012834f, 0.040179f, 0.046206f, 0.003221f, -0.030684f, 0.071260f, -0.027505f, 0.118911f, 0.004109f, -0.053947f, 0.002731f, -0.007680f, -0.058766f, 0.122656f, 0.029059f, -0.009249f, -0.101965f, 0.028453f, 0.037975f, 0.023831f, 0.091479f, -0.015379f, 0.022402f, -0.006786f, -0.043918f, 0.024828f, -0.027122f, -0.014923f, 0.020783f, 0.041678f, -0.039875f, 0.047717f, 0.007797f, -0.000881f, 0.096762f, -0.017753f, -0.007832f, 0.071920f, -0.042431f, 0.063617f, 0.029712f, -0.013614f, 0.027758f, 0.027370f, 0.061166f, 0.061525f, 0.020644f, -0.048191f, 0.105975f, -0.102290f, 0.006745f, 0.094622f, -0.047139f, 0.021459f, -0.007639f, -0.011587f, -0.105102f, 0.074312f, 0.023310f, 0.033142f, 0.038566f, -0.022345f, -0.050020f, -0.040581f, -0.028685f, 0.005132f, 0.107834f, 0.000531f, 0.085795f, -0.027292f, -0.057339f, 0.002919f, 0.028655f, -0.051940f, 0.088884f, 0.032891f, 0.047029f, 0.080939f, 0.059878f, -0.089357f, 0.040874f, -0.127865f, -0.147535f, 0.001045f, 0.140396f, 0.079537f, 0.021368f, -0.096050f, -0.318409f, -0.064971f, 0.118986f, 0.111901f, 0.189645f, + -0.017495f, 0.013457f, -0.081176f, 0.068197f, -0.050975f, -0.008907f, -0.032928f, 0.031596f, -0.036963f, -0.001737f, -0.003673f, -0.010279f, 0.007903f, 0.034694f, -0.036579f, 0.015953f, 0.003268f, -0.008873f, 0.000933f, 0.024265f, -0.030729f, -0.008950f, -0.004057f, 0.050709f, -0.051253f, 0.013237f, -0.022094f, 0.033356f, -0.037163f, -0.011360f, 0.013694f, -0.007973f, 0.007959f, -0.025168f, -0.003495f, 0.021388f, -0.005829f, 0.007756f, 0.007977f, 0.003785f, 0.028705f, -0.026549f, 0.018459f, 0.019008f, 0.025874f, -0.004486f, -0.056104f, 0.006268f, 0.008133f, 0.022212f, 0.022738f, -0.005391f, 0.007217f, -0.010952f, -0.024475f, -0.005813f, 0.013656f, -0.006379f, 0.036652f, -0.029921f, -0.007430f, -0.058261f, 0.019006f, 0.004298f, -0.006631f, 0.010657f, 0.013557f, -0.003017f, -0.026415f, 0.006605f, 0.031777f, -0.008525f, -0.000283f, 0.007436f, -0.006364f, 0.015628f, -0.004338f, -0.046033f, 0.112572f, 0.030901f, 0.028019f, -0.014553f, -0.035683f, -0.034282f, 0.010080f, 0.022114f, 0.003696f, -0.000963f, 0.000130f, -0.016078f, -0.002740f, 0.008220f, -0.004109f, 0.003737f, -0.001522f, -0.016084f, + -0.000627f, 0.008499f, 0.013050f, -0.011072f, 0.003368f, 0.008593f, -0.016165f, 0.027266f, -0.016112f, -0.013847f, -0.013944f, 0.004078f, 0.008060f, 0.012886f, -0.013417f, 0.017825f, -0.024880f, 0.017049f, 0.015005f, -0.010593f, -0.000957f, -0.000340f, -0.002703f, 0.013420f, -0.013767f, 0.004551f, -0.004284f, -0.017540f, 0.025730f, -0.013767f, -0.000317f, -0.010050f, -0.003146f, 0.018368f, -0.023102f, 0.010037f, 0.006606f, -0.009571f, 0.008700f, -0.019234f, 0.005909f, 0.008897f, -0.014598f, 0.001026f, 0.008064f, -0.012932f, 0.013827f, -0.018080f, 0.005350f, 0.020084f, -0.028130f, 0.008971f, -0.010713f, 0.002848f, 0.011112f, -0.007505f, -0.004375f, 0.016571f, -0.087039f, -0.203864f, 0.057367f, 0.199040f, 0.136809f, 0.216459f, -0.120920f, -0.128706f, -0.175392f, -0.203003f, 0.004100f, 0.156150f, 0.161353f, 0.168451f, 0.032873f, -0.056027f, -0.110884f, -0.159066f, -0.134835f, 0.010211f, 0.104308f, 0.123741f, 0.111343f, 0.026424f, -0.031075f, -0.019534f, -0.087369f, -0.097732f, -0.041350f, -0.002932f, 0.037254f, 0.081902f, 0.039910f, 0.029532f, 0.040933f, -0.020831f, -0.049105f, -0.008279f, + -0.078366f, -0.036933f, 0.000640f, 0.012130f, 0.059339f, 0.069074f, 0.005941f, -0.010777f, -0.006723f, -0.051441f, -0.014068f, -0.000979f, -0.010845f, 0.017460f, 0.034078f, -0.007556f, -0.002898f, -0.013689f, -0.021564f, 0.004163f, 0.001963f, -0.002545f, 0.038535f, 0.025989f, 0.009572f, -0.001139f, -0.036519f, -0.052829f, -0.041680f, 0.002974f, 0.039363f, 0.033767f, 0.044535f, 0.006306f, 0.001904f, 0.010811f, -0.052897f, -0.028637f, -0.013606f, 0.000698f, 0.002378f}, + {0.020349f, 0.012716f, 0.004800f, -0.000581f, 0.010379f, 0.000762f, 0.000153f, -0.002023f, 0.004059f, 0.008144f, 0.001153f, -0.005362f, 0.007314f, 0.005394f, -0.003062f, 0.000762f, 0.001721f, -0.005434f, -0.003180f, 0.003653f, 0.001179f, 0.007023f, -0.004192f, 0.004185f, -0.005769f, -0.000256f, 0.001542f, -0.005767f, 0.001799f, -0.002682f, 0.005277f, -0.007022f, 0.009761f, -0.001358f, -0.005192f, -0.009347f, 0.003408f, 0.007683f, -0.002749f, 0.001684f, -0.004166f, 0.001969f, 0.005531f, -0.000275f, -0.001935f, -0.001960f, -0.001885f, 0.004686f, -0.004653f, -0.004184f, 0.001251f, 0.002229f, 0.003360f, 0.000406f, -0.003560f, 0.009993f, 0.001182f, 0.001271f, 0.006133f, -0.001918f, 0.002930f, -0.000058f, -0.001757f, -0.000949f, -0.000830f, 0.003408f, 0.006774f, -0.001137f, 0.001716f, 0.001159f, 0.008373f, -0.001620f, -0.003091f, -0.001748f, -0.002791f, -0.003812f, -0.000723f, -0.007978f, -0.005220f, 0.002510f, -0.001869f, -0.002377f, -0.003756f, 0.001180f, 0.008179f, -0.002344f, 0.000282f, 0.001010f, 0.013845f, -0.000072f, 0.002865f, -0.005397f, -0.003612f, -0.001200f, -0.003378f, -0.003745f, + -0.003401f, -0.002324f, -0.003209f, -0.004449f, 0.004200f, 0.006636f, -0.003233f, 0.001159f, 0.000588f, -0.007155f, 0.000544f, 0.000010f, -0.004854f, 0.009985f, -0.004655f, 0.005752f, 0.002500f, -0.001334f, -0.005246f, -0.005031f, 0.005449f, -0.002455f, -0.001486f, -0.007580f, -0.001543f, -0.000544f, -0.003208f, 0.010529f, -0.001792f, -0.000468f, 0.004816f, -0.000567f, -0.008113f, -0.004238f, -0.007066f, -0.004906f, 0.012365f, -0.003105f, 0.013718f, 0.000168f, 0.000086f, -0.002143f, 0.002195f, 0.000806f, -0.007093f, -0.008042f, 0.006817f, 0.000993f, 0.004934f, -0.000220f, 0.005678f, 0.003326f, -0.006605f, 0.000389f, 0.003558f, 0.004582f, 0.001096f, 0.003863f, 0.018380f, -0.000954f, -0.001724f, -0.004147f, -0.009365f, -0.011651f, -0.010629f, 0.001683f, 0.010303f, 0.003904f, 0.013607f, 0.004979f, -0.005543f, 0.002046f, -0.015246f, -0.012826f, 0.006600f, -0.004211f, 0.009119f, -0.000359f, -0.006543f, -0.003016f, 0.017684f, 0.004310f, 0.007718f, 0.000123f, 0.006004f, -0.002119f, -0.001709f, 0.003875f, -0.001970f, -0.007083f, -0.000151f, 0.003217f, -0.000479f, 0.000004f, 0.011376f, 0.007249f, + -0.011414f, 0.000726f, -0.007105f, 0.012896f, 0.007733f, 0.000975f, -0.004050f, -0.004090f, 0.006086f, 0.003645f, 0.009634f, -0.008172f, 0.015075f, 0.018526f, -0.004655f, 0.018057f, 0.000285f, 0.009668f, 0.006029f, -0.002830f, 0.003321f, 0.014537f, -0.001412f, -0.009125f, 0.008366f, 0.003019f, 0.000057f, -0.000737f, -0.001572f, 0.000926f, 0.008268f, -0.005029f, 0.002910f, 0.002384f, 0.004107f, -0.006815f, 0.007201f, 0.001469f, -0.001980f, -0.015978f, -0.012579f, 0.003373f, -0.007298f, 0.004452f, -0.009007f, -0.012679f, -0.011688f, 0.001099f, -0.008823f, 0.007235f, 0.005278f, -0.011331f, -0.002602f, 0.003908f, 0.000672f, 0.004913f, -0.003548f, 0.005091f, 0.006571f, -0.010151f, 0.002744f, 0.002627f, -0.008053f, 0.003991f, 0.000477f, -0.009675f, 0.006458f, 0.005956f, -0.003541f, 0.006550f, 0.000733f, 0.005229f, 0.004987f, 0.001600f, -0.003703f, -0.001466f, -0.011196f, -0.003921f, -0.005692f, 0.005117f, 0.005808f, 0.001741f, -0.017756f, 0.002683f, 0.007141f, -0.004634f, 0.012079f, -0.010757f, -0.013583f, 0.000314f, -0.004186f, 0.003553f, -0.009757f, 0.016656f, -0.001135f, -0.006570f, + 0.001482f, -0.000551f, 0.009676f, -0.001351f, -0.006010f, -0.001192f, -0.004171f, -0.006175f, -0.007038f, 0.002326f, -0.012537f, 0.000369f, 0.000086f, 0.002665f, 0.007726f, 0.001702f, 0.005221f, 0.007900f, -0.007047f, -0.038459f, -0.001855f, -0.005770f, 0.024969f, -0.000643f, 0.000316f, 0.004386f, -0.004935f, 0.012011f, 0.001969f, -0.015317f, -0.008899f, -0.017755f, 0.001627f, -0.002339f, -0.007017f, -0.005966f, -0.007412f, -0.005033f, 0.019051f, -0.010544f, -0.006005f, -0.006465f, -0.016931f, -0.001805f, -0.005216f, 0.004174f, 0.006303f, -0.003653f, -0.001533f, 0.003425f, -0.006213f, -0.002413f, -0.003492f, -0.006736f, 0.004754f, 0.011475f, -0.003007f, -0.003171f, 0.008418f, -0.014236f, 0.006999f, -0.011578f, -0.022751f, -0.014493f, -0.022690f, -0.004272f, -0.013647f, -0.009133f, 0.000576f, 0.007377f, 0.002597f, 0.004983f, -0.004820f, 0.006271f, -0.010709f, -0.003043f, 0.005862f, -0.001043f, 0.008787f, -0.005439f, 0.001386f, -0.008449f, -0.007577f, 0.004519f, -0.014923f, 0.002451f, 0.007560f, -0.013585f, -0.000931f, -0.004369f, -0.008232f, -0.009341f, -0.010087f, -0.003704f, -0.006381f, 0.000053f, + 0.024088f, 0.000381f, -0.013033f, -0.012582f, -0.004092f, -0.009145f, -0.003280f, -0.006853f, 0.002161f, 0.001290f, -0.010155f, -0.006072f, -0.011164f, 0.021996f, 0.009703f, 0.002096f, -0.000799f, 0.011931f, -0.017255f, -0.000245f, 0.000123f, -0.011185f, -0.014387f, 0.013346f, 0.000829f, 0.009501f, -0.014371f, -0.006590f, -0.004590f, 0.005135f, 0.000125f, 0.006309f, -0.009628f, 0.003015f, 0.004957f, -0.011294f, -0.009977f, -0.009863f, 0.003139f, -0.003365f, -0.002151f, 0.009256f, -0.001863f, 0.000844f, 0.001126f, -0.002083f, -0.009663f, -0.006742f, -0.000166f, -0.016287f, -0.009352f, -0.008720f, 0.005651f, 0.002778f, 0.007669f, -0.001891f, 0.004143f, -0.000503f, -0.000215f, 0.007124f, -0.004268f, 0.012648f, 0.003458f, 0.003579f, 0.000051f, -0.004649f, 0.007087f, 0.003666f, 0.012364f, -0.003435f, 0.003942f, 0.005968f, -0.001050f, -0.000100f, -0.010405f, 0.006306f, -0.005946f, 0.027633f, 0.026134f, 0.019369f, -0.007246f, 0.006758f, 0.009554f, 0.005375f, 0.005171f, -0.010432f, -0.009147f, -0.013494f, 0.011021f, -0.012701f, -0.002003f, -0.009396f, 0.014793f, -0.017538f, -0.013179f, -0.006896f, + -0.003245f, -0.009928f, -0.014557f, 0.003420f, 0.000235f, 0.000224f, -0.017538f, -0.009996f, 0.003950f, 0.002953f, 0.004339f, -0.005248f, -0.007264f, -0.000104f, 0.004632f, 0.005892f, -0.005285f, 0.005558f, -0.009529f, -0.003084f, -0.022618f, 0.007416f, 0.002190f, -0.004530f, -0.004667f, -0.017066f, -0.007924f, 0.001295f, -0.004416f, -0.023716f, 0.011929f, 0.004290f, -0.000462f, -0.007042f, -0.005234f, -0.010588f, 0.002562f, -0.004373f, 0.006225f, -0.002423f, -0.003652f, -0.014079f, -0.002847f, -0.002419f, -0.007468f, 0.013122f, -0.010614f, -0.001114f, 0.008349f, -0.005023f, -0.011279f, -0.007964f, 0.009770f, 0.012058f, 0.007291f, -0.003493f, 0.000499f, 0.033923f, 0.011275f, -0.005121f, -0.004134f, 0.011826f, -0.023185f, -0.004465f, 0.018469f, 0.009220f, -0.013175f, -0.000410f, -0.009005f, 0.003483f, 0.014141f, 0.035099f, 0.011420f, 0.027317f, -0.009930f, -0.002144f, -0.026908f, 0.008956f, -0.008017f, 0.007414f, -0.011930f, -0.000712f, 0.000876f, -0.004255f, 0.009318f, -0.004385f, 0.004302f, 0.011699f, -0.009320f, 0.005230f, 0.014762f, -0.004197f, 0.004727f, -0.000075f, 0.005730f, 0.008153f, + 0.008139f, -0.045370f, 0.016203f, -0.005334f, -0.021569f, -0.003812f, 0.012564f, 0.003848f, -0.016778f, 0.008715f, 0.012494f, -0.026795f, 0.001706f, -0.007671f, 0.015234f, 0.003423f, 0.012486f, -0.003346f, -0.009826f, -0.018925f, 0.000630f, -0.011555f, 0.034806f, 0.006268f, -0.006377f, 0.011473f, 0.000888f, 0.011035f, -0.028440f, -0.004106f, 0.003635f, 0.008069f, 0.001360f, -0.013731f, -0.002761f, 0.003723f, 0.011696f, -0.040812f, -0.044724f, -0.015561f, -0.003838f, 0.000438f, 0.009045f, -0.019317f, 0.005597f, 0.021951f, -0.013191f, 0.011507f, 0.015075f, -0.011150f, -0.000052f, -0.005625f, 0.018518f, 0.025990f, -0.013022f, -0.015269f, 0.012868f, 0.000893f, -0.013057f, 0.005611f, -0.000189f, 0.002921f, 0.003366f, -0.007156f, -0.005342f, -0.028567f, -0.001866f, -0.008450f, -0.001072f, -0.001227f, 0.018726f, 0.005293f, -0.034831f, 0.000180f, 0.016132f, -0.019208f, 0.004490f, 0.019828f, -0.004926f, 0.006717f, -0.000081f, -0.005715f, -0.013578f, 0.025596f, 0.021357f, -0.017058f, 0.008163f, -0.006609f, -0.001440f, 0.007670f, -0.006383f, 0.006360f, -0.010942f, -0.001608f, 0.021285f, -0.006680f, + 0.003912f, 0.009932f, -0.008301f, -0.018509f, -0.001647f, 0.005746f, 0.002239f, -0.009137f, 0.000052f, 0.004408f, 0.006549f, 0.015613f, 0.008435f, 0.017248f, 0.007449f, 0.003050f, 0.005590f, -0.042199f, 0.049941f, -0.001469f, 0.032618f, 0.003736f, -0.016772f, -0.004085f, -0.009135f, -0.011384f, -0.000284f, 0.002214f, 0.023987f, -0.002234f, 0.016919f, -0.014286f, 0.000565f, 0.005202f, 0.004985f, 0.003122f, 0.021050f, 0.020933f, 0.008576f, 0.004465f, -0.001052f, -0.002475f, 0.000307f, -0.001923f, -0.031287f, -0.009819f, 0.016530f, 0.011080f, -0.002191f, 0.002995f, -0.014023f, 0.009168f, -0.017518f, 0.005475f, 0.031669f, 0.004593f, 0.008052f, -0.023801f, 0.014918f, 0.012981f, 0.004749f, -0.015574f, -0.005828f, -0.006605f, 0.002937f, -0.013898f, 0.017026f, 0.020068f, 0.012988f, -0.000517f, 0.029907f, 0.011143f, 0.043046f, 0.017240f, -0.009413f, 0.035486f, 0.002469f, -0.011682f, 0.026693f, -0.003281f, 0.009993f, 0.016383f, -0.009588f, -0.009283f, 0.024902f, 0.025012f, 0.016485f, -0.020357f, 0.009448f, -0.001001f, -0.007634f, -0.018364f, 0.013465f, 0.018415f, 0.012207f, -0.021862f, + 0.032563f, -0.007430f, -0.018996f, 0.008424f, 0.014933f, -0.011942f, -0.005492f, -0.026984f, 0.013348f, -0.008816f, -0.002127f, -0.024531f, -0.010235f, -0.007149f, -0.003212f, -0.010046f, 0.007449f, -0.003483f, -0.005235f, 0.008044f, 0.009883f, 0.017196f, 0.016169f, -0.004529f, -0.004249f, -0.019158f, 0.009483f, 0.002447f, 0.015051f, 0.005912f, 0.004837f, -0.002657f, 0.006659f, -0.011035f, -0.010134f, 0.008466f, 0.004221f, 0.008618f, -0.024774f, 0.010996f, 0.017891f, 0.002365f, -0.021734f, -0.021243f, -0.017520f, -0.052163f, 0.008692f, -0.003672f, 0.027424f, -0.010253f, 0.022925f, 0.009858f, 0.002400f, 0.031256f, 0.005203f, -0.000296f, 0.021250f, 0.010631f, -0.026970f, -0.010632f, 0.004130f, -0.005566f, -0.015011f, -0.006179f, 0.036571f, 0.020026f, -0.016216f, 0.001593f, -0.008926f, -0.000926f, 0.005606f, 0.028961f, 0.000436f, -0.003753f, 0.031746f, 0.014957f, -0.021085f, -0.004299f, -0.004599f, -0.001617f, -0.000111f, 0.061049f, 0.011262f, 0.023127f, -0.009092f, 0.020339f, 0.040032f, -0.031753f, 0.051577f, 0.030869f, -0.011784f, 0.001649f, 0.004660f, -0.016803f, -0.028503f, 0.003236f, + -0.015794f, -0.025774f, -0.010334f, 0.003511f, 0.001813f, -0.002209f, -0.010290f, -0.000946f, -0.009928f, 0.000237f, -0.011722f, 0.000043f, 0.011279f, -0.020137f, 0.013618f, 0.018805f, -0.011813f, -0.011921f, 0.011307f, 0.007891f, 0.000969f, 0.054560f, 0.006980f, 0.036648f, -0.023386f, -0.001636f, -0.028766f, -0.022059f, 0.008007f, -0.022165f, -0.028917f, -0.020268f, -0.021229f, -0.004526f, -0.003545f, -0.025942f, -0.025917f, 0.038263f, 0.009049f, 0.002854f, -0.001794f, 0.019904f, 0.014375f, 0.023791f, 0.001460f, 0.022310f, -0.008328f, 0.004847f, -0.037115f, 0.033389f, 0.021568f, 0.001328f, -0.016897f, -0.004459f, 0.026484f, -0.014482f, -0.012324f, 0.029904f, -0.030007f, -0.023431f, -0.007790f, -0.019152f, -0.005352f, -0.035117f, 0.004578f, -0.022593f, 0.012637f, -0.000364f, 0.002469f, 0.016090f, 0.002545f, 0.010619f, 0.015216f, 0.014621f, 0.011284f, 0.021501f, -0.000052f, 0.013812f, 0.011694f, -0.020036f, 0.027346f, 0.004914f, 0.010998f, -0.018878f, 0.020602f, 0.008144f, 0.013508f, 0.001678f, 0.002769f, -0.005613f, -0.025043f, 0.003002f, 0.009072f, 0.011984f, 0.012565f, 0.000830f, + -0.029945f, -0.019399f, 0.015625f, 0.007750f, 0.000796f, -0.012762f, 0.009585f, -0.012362f, -0.030333f, 0.036309f, 0.020025f, 0.014633f, -0.018979f, -0.010269f, -0.023894f, -0.064709f, -0.006090f, -0.011660f, 0.003587f, -0.017576f, -0.020089f, -0.030524f, 0.000004f, 0.005272f, 0.029475f, -0.030958f, 0.005613f, -0.003507f, 0.010011f, -0.028486f, -0.036008f, -0.023188f, 0.011494f, -0.000919f, -0.047961f, 0.030557f, 0.032494f, -0.013318f, 0.028051f, 0.010754f, -0.039998f, -0.005680f, 0.057454f, -0.006155f, -0.034603f, -0.004083f, -0.001293f, -0.030347f, 0.024682f, 0.006228f, -0.013772f, 0.025656f, 0.018415f, 0.058527f, 0.035898f, 0.002323f, 0.006720f, 0.055201f, -0.011220f, 0.014957f, -0.019340f, -0.030358f, -0.006726f, -0.020265f, 0.007620f, -0.000393f, 0.013694f, -0.000525f, -0.000940f, -0.008044f, 0.045416f, 0.003056f, -0.030349f, -0.025586f, -0.002875f, -0.006011f, 0.002062f, 0.014648f, 0.042069f, 0.025467f, 0.011641f, -0.022853f, 0.033690f, 0.055594f, -0.007941f, 0.025465f, 0.027232f, 0.066683f, 0.016604f, 0.012905f, 0.024216f, 0.028408f, 0.020027f, -0.022755f, -0.017316f, 0.015126f, + -0.035831f, -0.024791f, -0.024005f, 0.027149f, 0.029686f, 0.016198f, -0.000639f, 0.019434f, 0.049131f, -0.025465f, 0.041320f, 0.032381f, 0.004230f, 0.032209f, -0.018875f, -0.005259f, 0.011545f, 0.038639f, 0.068396f, 0.007887f, -0.006624f, 0.007840f, -0.003285f, -0.010490f, 0.002337f, 0.007844f, -0.016320f, -0.021310f, 0.007728f, -0.010631f, -0.006088f, 0.018213f, -0.000735f, 0.034962f, -0.017817f, 0.034348f, 0.016409f, 0.004346f, -0.019380f, 0.007418f, 0.033176f, 0.010807f, -0.017025f, 0.007811f, -0.004208f, 0.002237f, 0.019286f, -0.025700f, -0.014620f, 0.031622f, 0.000272f, -0.005975f, 0.025789f, 0.000257f, 0.008778f, 0.007581f, -0.025671f, -0.044060f, -0.010335f, 0.017636f, 0.028599f, 0.008181f, -0.023310f, 0.031204f, -0.010490f, 0.061409f, -0.031067f, 0.042064f, -0.024445f, 0.016489f, 0.033091f, -0.048378f, -0.053668f, 0.002031f, -0.016254f, 0.016029f, 0.015128f, 0.005026f, -0.009426f, -0.028225f, 0.019003f, -0.001590f, 0.035119f, 0.019868f, 0.032375f, 0.012717f, 0.017722f, -0.004893f, 0.023998f, 0.013632f, -0.018479f, 0.008517f, -0.002369f, -0.052750f, 0.041880f, 0.054895f, + -0.014992f, -0.004676f, 0.017751f, 0.073419f, -0.000363f, -0.047329f, -0.020455f, 0.006681f, 0.006127f, -0.016636f, 0.011989f, -0.012693f, 0.020986f, -0.040507f, -0.000535f, 0.021263f, -0.018441f, -0.019619f, 0.000751f, -0.040076f, -0.014166f, -0.014714f, -0.062486f, -0.053045f, -0.031910f, 0.019606f, 0.023368f, -0.007039f, -0.045258f, 0.002305f, -0.001132f, -0.004016f, 0.005881f, -0.023931f, 0.048497f, -0.017155f, 0.003822f, 0.054131f, -0.052351f, 0.021336f, 0.005658f, -0.019942f, 0.017866f, -0.016077f, -0.043022f, -0.001873f, 0.032019f, -0.018337f, -0.028106f, 0.011687f, 0.001848f, 0.030315f, -0.002619f, -0.054132f, 0.001199f, -0.033308f, 0.047490f, -0.021456f, 0.004667f, 0.009094f, 0.003056f, -0.010707f, -0.035757f, 0.009999f, 0.031262f, 0.006053f, 0.032300f, -0.056128f, -0.031758f, -0.013216f, -0.003788f, 0.000391f, -0.043670f, 0.030225f, -0.010077f, -0.038827f, 0.058338f, 0.002230f, -0.098666f, 0.040326f, -0.013241f, 0.008404f, 0.010442f, 0.014036f, 0.024606f, 0.009650f, -0.017713f, -0.003501f, 0.024676f, 0.017449f, -0.019551f, -0.000116f, -0.015539f, -0.007104f, -0.048656f, -0.005167f, + 0.023391f, 0.030192f, 0.006448f, -0.010391f, 0.032079f, -0.031986f, 0.036515f, -0.019887f, -0.012151f, 0.005707f, -0.011723f, 0.011182f, -0.029686f, -0.038094f, -0.044718f, -0.012646f, 0.022393f, -0.007263f, -0.000373f, 0.028615f, 0.006814f, 0.006443f, -0.001596f, 0.002725f, -0.010155f, 0.002252f, 0.028132f, 0.019858f, 0.029647f, 0.028066f, 0.029647f, 0.023088f, -0.019503f, -0.009404f, 0.006226f, 0.000407f, -0.036797f, 0.026250f, -0.007985f, -0.030782f, 0.040180f, 0.002278f, 0.004910f, 0.001742f, -0.017334f, -0.001947f, 0.015312f, 0.028794f, 0.018692f, 0.004187f, 0.010234f, -0.038938f, -0.009026f, -0.011078f, 0.020536f, 0.011620f, -0.011387f, -0.014921f, 0.134877f, -0.132455f, -0.006654f, -0.143998f, -0.022311f, -0.054733f, -0.006688f, 0.035201f, -0.017875f, -0.039799f, 0.062825f, -0.016918f, -0.010958f, 0.002185f, 0.019368f, -0.002115f, 0.052237f, 0.034738f, 0.020747f, -0.030640f, 0.002093f, -0.020807f, -0.021344f, -0.014039f, 0.000856f, -0.006272f, -0.005670f, -0.017055f, -0.003749f, 0.029282f, 0.003717f, 0.019576f, 0.019275f, -0.001005f, 0.025707f, 0.037709f, 0.002279f, -0.006929f, + -0.019026f, -0.022376f, 0.009650f, 0.010988f, -0.018724f, 0.032407f, -0.041016f, -0.040974f, 0.005269f, -0.013514f, 0.023220f, -0.037635f, 0.017486f, -0.073453f, -0.038976f, -0.058315f, -0.004080f, -0.027710f, -0.001386f, -0.015923f, -0.021041f, -0.017170f, -0.000042f, 0.007866f, -0.056586f, 0.009873f, -0.010431f, 0.010408f, 0.003134f, -0.022819f, -0.044241f, 0.038034f, -0.024436f, 0.000904f, 0.035003f, 0.004268f, -0.000790f, 0.026626f, -0.010571f, 0.112135f, 0.057833f, 0.029362f, -0.023451f, -0.010920f, -0.054023f, 0.015283f, 0.048808f, -0.006277f, -0.007791f, 0.077528f, -0.010310f, -0.014131f, 0.040238f, 0.057322f, 0.012661f, 0.058342f, -0.010808f, 0.010463f, 0.036253f, 0.039543f, 0.062145f, 0.049782f, 0.000733f, -0.019212f, 0.020971f, 0.023415f, 0.023566f, 0.027082f, 0.047354f, 0.023287f, 0.059340f, -0.020131f, 0.001814f, 0.017864f, 0.018519f, 0.048799f, 0.030901f, 0.052062f, -0.033358f, -0.010492f, 0.023611f, -0.038634f, 0.035225f, 0.033117f, 0.034354f, 0.013737f, -0.036535f, -0.014251f, 0.078825f, 0.019519f, 0.054202f, 0.042069f, 0.049587f, -0.009972f, 0.064649f, 0.095367f, + 0.036341f, 0.007353f, 0.070663f, 0.045071f, -0.022759f, -0.017976f, -0.029448f, -0.028640f, 0.031608f, 0.029828f, 0.006123f, -0.031766f, 0.003922f, -0.029853f, 0.002358f, -0.017555f, 0.020085f, -0.067364f, -0.002959f, -0.009016f, -0.035445f, 0.016421f, -0.042672f, 0.072368f, 0.102521f, 0.059832f, -0.027841f, -0.057338f, -0.022361f, 0.050978f, -0.016703f, -0.042616f, 0.075596f, -0.053602f, 0.044336f, 0.026092f, -0.062631f, -0.024996f, -0.008471f, -0.099901f, 0.001728f, 0.011884f, -0.050720f, 0.099165f, -0.036483f, 0.092240f, -0.071412f, 0.010879f, 0.001482f, 0.067808f, 0.095598f, -0.007228f, 0.030223f, 0.047614f, -0.058074f, 0.037733f, -0.077583f, -0.019165f, 0.136441f, -0.006600f, -0.042890f, -0.006184f, -0.082967f, 0.004891f, -0.029405f, 0.089417f, 0.028451f, 0.042558f, -0.018710f, -0.021457f, -0.049291f, -0.038630f, 0.004279f, 0.007493f, -0.006054f, 0.060418f, -0.020887f, 0.013130f, -0.067815f, -0.029479f, 0.032913f, -0.088436f, -0.043813f, -0.025302f, -0.039712f, 0.086149f, -0.003390f, 0.092682f, 0.054994f, 0.030117f, 0.023547f, -0.020203f, -0.060963f, 0.039545f, -0.080311f, -0.045028f, + 0.061008f, 0.066673f, -0.108215f, 0.116961f, -0.001948f, 0.009744f, -0.036204f, 0.094522f, 0.023045f, 0.061096f, 0.023882f, -0.038915f, 0.014592f, 0.034154f, -0.056264f, 0.040715f, 0.001868f, 0.027150f, -0.075420f, -0.005523f, 0.019997f, 0.070921f, -0.028178f, -0.057850f, -0.001281f, 0.070407f, 0.038319f, -0.026608f, -0.059144f, -0.002866f, 0.052011f, 0.006665f, 0.004925f, 0.013994f, 0.038251f, 0.092831f, -0.129595f, -0.021852f, 0.014165f, 0.072556f, 0.017856f, -0.040168f, -0.008261f, 0.027192f, 0.068335f, -0.007453f, 0.004909f, -0.126560f, 0.038103f, 0.018613f, 0.036053f, -0.092424f, 0.082481f, 0.068017f, 0.028041f, -0.042937f, -0.002226f, -0.047609f, 0.036185f, 0.057199f, 0.027127f, 0.025170f, -0.002885f, 0.041964f, -0.063236f, 0.058609f, -0.015741f, -0.026616f, 0.076250f, 0.055033f, 0.007383f, -0.029376f, -0.055983f, 0.035687f, 0.053788f, -0.140387f, -0.001928f, -0.094626f, 0.050376f, 0.011902f, 0.033148f, 0.039211f, 0.056024f, 0.021500f, 0.020052f, -0.022690f, 0.030411f, 0.007635f, 0.066095f, -0.004692f, -0.015660f, 0.052036f, 0.041217f, -0.005842f, 0.006552f, -0.018723f, + 0.003992f, 0.018098f, -0.001485f, -0.010271f, 0.031708f, -0.020156f, 0.006443f, 0.040545f, -0.004656f, 0.024340f, -0.035303f, -0.005716f, 0.008963f, -0.013858f, -0.002378f, 0.006621f, 0.031794f, -0.004973f, -0.042610f, 0.003914f, 0.097069f, 0.021313f, -0.046159f, 0.017066f, -0.047036f, -0.033198f, -0.022069f, -0.005262f, 0.063912f, -0.004549f, -0.042534f, 0.097795f, -0.098905f, 0.019452f, 0.111019f, 0.013000f, 0.079736f, -0.055163f, -0.100744f, 0.036000f, 0.009344f, 0.086326f, 0.010466f, -0.046070f, 0.045626f, -0.009064f, -0.002054f, -0.018691f, 0.003893f, -0.028089f, 0.022850f, 0.005805f, 0.031729f, -0.034386f, -0.020248f, -0.009804f, 0.052314f, 0.020563f, -0.039536f, -0.219107f, -0.475374f, -0.201489f, -0.294556f, -0.421711f, 0.193896f, 0.037861f, 0.102650f, 0.548234f, 0.418233f, 0.234601f, 0.448188f, 0.328377f, 0.038991f, 0.094055f, 0.075573f, -0.243962f, -0.210822f, -0.114836f, -0.360455f, -0.346748f, -0.144812f, -0.188640f, -0.256010f, -0.120158f, -0.104688f, -0.261555f, -0.220145f, -0.038056f, -0.133702f, -0.215969f, -0.086176f, 0.040869f, -0.160442f, 0.021491f, 0.191668f, -0.036953f, + -0.048611f, 0.265068f, 0.210160f, -0.030494f, 0.316239f, 0.366689f, 0.139936f, 0.343616f, 0.493428f, 0.284804f, 0.248338f, 0.593082f, 0.473217f, 0.348802f, 0.420961f, 0.559709f, 0.193013f, 0.064940f, 0.229533f, -0.206658f, -0.558066f, -0.411359f, -0.614235f, -0.993089f, -0.884557f, -0.942476f, -1.087174f, -1.112119f, -0.951825f, -0.832858f, -0.825504f, -0.582218f, -0.244430f, -0.163321f, 0.001863f, 0.313772f, 0.578457f, 0.611424f, 0.730503f, 0.614709f, 0.402061f} + }, + { + {-0.000246f, -0.000125f, 0.000592f, -0.012374f, 0.002214f, -0.000343f, 0.000393f, -0.007583f, 0.002277f, -0.013588f, -0.007281f, 0.003431f, -0.002907f, 0.004367f, 0.007197f, -0.004373f, 0.005096f, -0.006870f, -0.000749f, 0.006236f, -0.001860f, 0.003853f, -0.010508f, 0.001281f, -0.000024f, 0.003145f, -0.002468f, 0.003660f, -0.005238f, -0.002844f, 0.003683f, -0.009042f, 0.002679f, 0.002601f, -0.002939f, -0.004941f, 0.013041f, -0.003018f, 0.003506f, -0.005229f, -0.001820f, 0.001758f, -0.010830f, -0.007003f, -0.005797f, -0.004128f, -0.005221f, -0.005334f, -0.000098f, 0.000268f, -0.005093f, 0.001782f, 0.000363f, 0.005152f, -0.004259f, -0.002033f, -0.000488f, 0.002273f, -0.002616f, -0.007328f, 0.007933f, 0.006107f, 0.003430f, -0.002293f, 0.003225f, 0.000714f, 0.004980f, -0.006074f, -0.011528f, -0.009813f, 0.001294f, -0.006024f, 0.004277f, 0.009353f, 0.002070f, 0.006179f, -0.016268f, 0.009110f, -0.012446f, 0.001143f, -0.005450f, -0.001941f, 0.004415f, -0.007863f, -0.013966f, -0.003841f, 0.000862f, -0.008188f, -0.004806f, 0.006271f, -0.004216f, 0.002705f, -0.017389f, -0.001837f, 0.011307f, 0.005793f, + -0.019409f, -0.006973f, -0.005281f, -0.005472f, 0.006214f, -0.003185f, -0.010217f, -0.006661f, -0.007367f, -0.007659f, 0.012386f, 0.003537f, 0.007903f, -0.005679f, 0.010459f, 0.009283f, 0.006707f, -0.004265f, -0.009256f, -0.007547f, 0.000563f, 0.001370f, 0.014340f, 0.004705f, 0.002593f, -0.007290f, 0.001418f, 0.000171f, 0.001512f, 0.005291f, 0.003270f, -0.010331f, -0.008510f, -0.004812f, 0.005191f, 0.000746f, -0.001962f, -0.011040f, -0.003314f, 0.003623f, 0.004693f, -0.004778f, -0.001677f, -0.000306f, 0.004995f, -0.001652f, -0.005632f, -0.000581f, 0.000748f, -0.007812f, 0.015237f, 0.000291f, -0.010521f, -0.000774f, -0.001889f, -0.010345f, -0.009354f, 0.010985f, 0.010062f, -0.007815f, 0.006114f, 0.000804f, 0.003215f, -0.026094f, 0.010309f, -0.003686f, -0.017843f, -0.023193f, 0.000748f, 0.017183f, 0.001131f, 0.011237f, 0.000507f, -0.020924f, -0.007223f, 0.002718f, 0.007491f, -0.003446f, -0.001743f, -0.008625f, 0.001243f, -0.001313f, 0.015026f, 0.007931f, 0.003223f, 0.003017f, 0.004098f, 0.005542f, 0.013672f, 0.008629f, -0.012057f, -0.000658f, 0.002799f, 0.003298f, -0.014367f, 0.005060f, + -0.004299f, -0.008671f, -0.002615f, 0.000035f, 0.009754f, 0.002958f, -0.005563f, 0.010390f, 0.015400f, -0.002818f, -0.005991f, 0.004229f, -0.001243f, 0.008972f, 0.008482f, 0.007282f, -0.010541f, -0.007348f, 0.007221f, -0.002576f, -0.002846f, -0.007362f, 0.000574f, -0.011192f, 0.006689f, 0.006974f, 0.007910f, 0.002814f, 0.009161f, -0.009741f, -0.007226f, 0.014362f, -0.000198f, 0.005920f, 0.014573f, 0.013126f, 0.000929f, 0.004914f, -0.011521f, -0.009851f, 0.005240f, -0.002939f, -0.004358f, -0.005529f, -0.005126f, 0.003768f, -0.013265f, -0.007785f, -0.016323f, -0.019667f, -0.003790f, 0.015785f, 0.010185f, -0.006838f, -0.002008f, -0.002579f, -0.003938f, -0.014289f, 0.009860f, -0.003859f, -0.003754f, 0.000511f, 0.006397f, -0.003522f, 0.000424f, -0.000875f, 0.009354f, -0.009191f, 0.009391f, 0.004786f, 0.011296f, -0.004330f, 0.008717f, 0.003485f, -0.005587f, 0.007510f, -0.005517f, 0.004110f, 0.008375f, -0.006893f, 0.008811f, -0.005833f, -0.004369f, -0.001887f, -0.002702f, 0.003915f, -0.002649f, -0.007363f, 0.002676f, -0.006502f, 0.001257f, 0.000139f, 0.000897f, 0.012719f, 0.002604f, -0.003833f, + 0.000088f, -0.006304f, -0.007650f, 0.003103f, -0.001804f, 0.011869f, 0.013127f, 0.004260f, -0.003548f, -0.003178f, -0.000004f, -0.006475f, -0.005871f, 0.005026f, 0.010384f, 0.025694f, -0.010668f, 0.010628f, -0.012889f, -0.010793f, 0.000182f, -0.002872f, -0.002647f, 0.003736f, -0.005360f, 0.011232f, 0.010893f, 0.009428f, -0.002662f, -0.001003f, -0.004705f, -0.011580f, 0.001946f, -0.006862f, -0.001211f, 0.001525f, -0.003853f, 0.006961f, 0.002635f, -0.000552f, -0.019373f, -0.007858f, -0.012178f, 0.000741f, -0.007939f, -0.012043f, -0.005323f, -0.006509f, -0.007458f, 0.012607f, -0.009731f, 0.008999f, 0.000833f, -0.003125f, 0.004931f, 0.004546f, -0.008715f, -0.002010f, 0.000265f, 0.009909f, -0.000819f, -0.012520f, -0.016367f, -0.016652f, 0.004544f, -0.005751f, 0.000467f, -0.000819f, 0.002571f, 0.006365f, 0.009616f, -0.005959f, -0.003382f, 0.003799f, 0.003380f, 0.001940f, 0.012050f, -0.005894f, 0.007499f, -0.012851f, 0.027003f, 0.004266f, -0.002736f, 0.006313f, 0.002701f, 0.006397f, -0.007353f, 0.000195f, 0.002129f, 0.001116f, -0.001644f, -0.010470f, -0.012201f, 0.002110f, 0.002617f, 0.001120f, + -0.001673f, -0.007194f, 0.004755f, 0.003848f, -0.010985f, 0.013540f, -0.016229f, 0.020675f, -0.001695f, 0.007080f, 0.003314f, -0.000150f, -0.001891f, 0.004459f, 0.019425f, 0.021702f, -0.003806f, 0.004112f, -0.002282f, -0.002801f, 0.003145f, 0.004791f, 0.015006f, -0.001636f, 0.004754f, -0.007219f, 0.008359f, 0.002005f, 0.011888f, 0.005822f, 0.011151f, -0.015462f, 0.006891f, 0.005895f, -0.004646f, 0.000014f, 0.012069f, 0.000217f, 0.001197f, 0.003740f, 0.007440f, -0.002295f, -0.000761f, 0.022866f, 0.011073f, 0.002121f, 0.002311f, -0.004667f, 0.010554f, -0.013679f, -0.019928f, -0.024340f, -0.001305f, 0.012834f, -0.000219f, 0.006376f, 0.017485f, 0.006801f, -0.002948f, -0.006185f, 0.009327f, -0.001927f, 0.022329f, 0.009834f, 0.003287f, 0.002872f, -0.012265f, 0.002273f, 0.008960f, -0.005066f, -0.014156f, 0.001968f, 0.003572f, -0.028590f, 0.004311f, -0.001136f, 0.021516f, -0.014154f, 0.010093f, -0.030363f, 0.013542f, -0.001882f, -0.014861f, -0.016534f, -0.011138f, 0.010468f, 0.008537f, 0.024947f, 0.004382f, 0.009019f, 0.024084f, -0.002911f, -0.015384f, 0.003555f, -0.011552f, 0.004188f, + 0.019914f, 0.004519f, -0.003927f, -0.001167f, -0.002249f, 0.006530f, 0.008556f, -0.000486f, 0.006185f, 0.010653f, -0.004610f, 0.004093f, -0.009860f, 0.000181f, -0.012668f, -0.001153f, 0.003388f, -0.005625f, 0.011901f, 0.008178f, 0.010396f, 0.018760f, 0.002693f, 0.022487f, 0.017983f, 0.009025f, -0.009486f, 0.025658f, 0.012249f, 0.005449f, 0.023247f, -0.001197f, 0.002277f, 0.002984f, 0.008997f, -0.003257f, -0.004350f, -0.013463f, -0.012247f, -0.010306f, 0.002242f, -0.007776f, 0.021103f, -0.009869f, 0.010184f, 0.013424f, -0.004053f, 0.002444f, -0.002597f, -0.001023f, -0.015357f, -0.018552f, 0.013535f, 0.000273f, 0.024932f, 0.001027f, 0.000352f, -0.002205f, -0.004823f, 0.004579f, 0.001059f, -0.012560f, -0.016248f, -0.021891f, -0.011548f, -0.022892f, -0.014671f, -0.007668f, -0.017082f, -0.010584f, -0.007491f, -0.008640f, -0.023102f, 0.016075f, 0.009868f, 0.000863f, 0.008289f, 0.004134f, -0.006462f, 0.028968f, 0.001700f, -0.009537f, -0.005262f, -0.019024f, -0.008417f, 0.021748f, 0.000970f, -0.017440f, -0.017955f, 0.003099f, -0.018169f, 0.006333f, 0.006293f, -0.013534f, 0.000509f, 0.005022f, + 0.000963f, 0.021651f, 0.006263f, -0.008875f, 0.002114f, -0.010728f, 0.010612f, 0.002331f, 0.004735f, -0.024782f, 0.017777f, -0.007866f, 0.007492f, 0.001626f, 0.003599f, 0.005330f, 0.000887f, -0.006265f, -0.000292f, -0.008705f, 0.000412f, -0.018793f, 0.000395f, -0.020239f, 0.029437f, -0.003121f, 0.019163f, -0.011460f, -0.005178f, -0.000568f, -0.012390f, -0.004945f, 0.013368f, 0.003375f, 0.003016f, -0.012912f, -0.000228f, 0.009250f, -0.024697f, -0.000124f, -0.010808f, -0.008576f, 0.017113f, -0.028340f, -0.026955f, 0.006898f, 0.035313f, 0.000871f, 0.003079f, 0.002714f, -0.005756f, 0.019485f, 0.018570f, 0.010945f, 0.004986f, -0.005104f, -0.029345f, 0.017197f, -0.000294f, -0.023119f, -0.007950f, 0.005455f, -0.001674f, 0.000290f, 0.001833f, -0.005470f, -0.023400f, -0.001157f, 0.000322f, -0.004027f, -0.010189f, 0.007013f, 0.019103f, -0.025363f, 0.015149f, -0.009379f, -0.005604f, 0.001733f, 0.011762f, 0.041738f, -0.027751f, -0.006515f, 0.001660f, -0.002392f, -0.005961f, 0.001660f, -0.011420f, 0.003889f, -0.010513f, 0.028865f, 0.008490f, 0.005696f, 0.006435f, -0.005659f, -0.003224f, 0.015502f, + -0.004111f, 0.006988f, -0.014488f, 0.022357f, -0.001189f, -0.015025f, 0.028181f, -0.019003f, 0.011265f, 0.004585f, 0.003584f, 0.022908f, -0.013060f, 0.010191f, -0.006774f, 0.000462f, 0.030387f, 0.002409f, 0.007938f, 0.009052f, -0.005067f, -0.017423f, -0.013696f, 0.002163f, 0.030370f, 0.017288f, 0.003734f, -0.027074f, 0.003904f, -0.014842f, 0.000073f, 0.030491f, 0.029201f, 0.014879f, 0.019726f, -0.017691f, -0.036941f, -0.019182f, -0.026639f, 0.014908f, -0.000307f, -0.004324f, -0.000150f, -0.019942f, -0.006031f, 0.006433f, -0.003842f, -0.007426f, -0.007506f, 0.021774f, -0.001461f, 0.006123f, -0.006195f, 0.014404f, 0.002912f, -0.007832f, -0.017208f, -0.012813f, 0.038882f, -0.001309f, -0.008911f, 0.012854f, -0.022377f, 0.007422f, -0.012860f, -0.038436f, -0.008852f, -0.004543f, 0.011647f, 0.005081f, 0.010205f, 0.003909f, 0.015244f, 0.001262f, 0.000902f, 0.009280f, -0.038217f, -0.005171f, -0.010422f, -0.001783f, 0.003464f, 0.022885f, 0.023869f, 0.009877f, -0.006608f, -0.015293f, -0.022191f, -0.005790f, -0.013231f, 0.004555f, -0.006744f, -0.004735f, -0.014417f, -0.043059f, -0.027851f, -0.005730f, + -0.009584f, 0.023405f, 0.016305f, -0.002727f, 0.039548f, -0.038123f, -0.008263f, -0.013763f, 0.042163f, 0.020835f, -0.012745f, 0.016265f, 0.006622f, -0.015028f, 0.029354f, -0.030396f, 0.016392f, -0.013393f, 0.003265f, 0.004559f, -0.009708f, 0.028710f, -0.018576f, 0.018106f, -0.007281f, -0.039325f, -0.005947f, 0.029572f, -0.016372f, -0.026393f, 0.001147f, -0.002124f, -0.040655f, -0.006374f, 0.017379f, 0.008465f, 0.022844f, 0.017712f, -0.003929f, 0.041363f, -0.008788f, -0.010685f, -0.018853f, -0.016593f, -0.016910f, 0.012661f, 0.015609f, -0.011017f, -0.013741f, 0.006675f, -0.011829f, 0.018712f, -0.003889f, 0.011196f, -0.006081f, -0.008089f, -0.007259f, 0.002204f, -0.022766f, 0.008977f, 0.017569f, -0.001088f, 0.007950f, 0.013320f, 0.012610f, 0.025185f, -0.014933f, 0.011021f, 0.017358f, 0.002638f, -0.035611f, 0.033851f, -0.017562f, -0.047822f, 0.002564f, 0.038093f, 0.048005f, 0.010869f, -0.014465f, -0.010289f, 0.007072f, -0.005804f, -0.004815f, 0.022414f, 0.022763f, -0.007613f, 0.022070f, -0.022520f, -0.000590f, 0.020348f, -0.006283f, 0.024151f, 0.012745f, -0.000600f, -0.027384f, 0.013885f, + -0.004431f, -0.004652f, 0.004142f, 0.000250f, -0.000541f, 0.043568f, -0.017495f, 0.023499f, 0.037919f, 0.026981f, 0.015630f, 0.003076f, -0.020408f, 0.025924f, -0.010112f, 0.024874f, -0.009526f, 0.007885f, -0.021392f, -0.001882f, -0.019965f, -0.012280f, 0.006730f, -0.018534f, -0.002618f, -0.004440f, 0.002567f, 0.022300f, -0.018969f, -0.016140f, -0.003338f, -0.007755f, -0.000655f, -0.015701f, -0.020719f, -0.027401f, 0.007520f, 0.028028f, 0.003002f, -0.011188f, 0.007623f, 0.009577f, 0.024668f, -0.016295f, -0.005981f, -0.001456f, 0.006381f, 0.020325f, 0.008423f, 0.011059f, -0.004051f, 0.004123f, 0.024830f, -0.084627f, -0.040478f, 0.027564f, -0.069174f, -0.048139f, -0.003535f, -0.028558f, -0.019674f, 0.020425f, 0.023530f, 0.006793f, -0.004844f, 0.008118f, 0.068179f, -0.008990f, 0.010554f, 0.025819f, 0.029686f, -0.031898f, -0.016647f, -0.015442f, 0.024926f, 0.027013f, 0.013490f, 0.004435f, 0.025497f, -0.008281f, -0.013375f, 0.017499f, 0.034649f, 0.001792f, 0.010927f, 0.034926f, 0.025894f, 0.020704f, -0.016407f, 0.005998f, 0.010386f, -0.000841f, -0.001010f, 0.022090f, -0.007938f, -0.001169f, + -0.002767f, 0.014455f, 0.000101f, -0.025869f, -0.017245f, 0.004160f, -0.034506f, 0.024870f, -0.008109f, 0.055993f, 0.001663f, 0.030298f, 0.005533f, -0.002268f, -0.019060f, -0.001788f, 0.006500f, -0.024953f, -0.013267f, -0.028977f, -0.004548f, 0.013540f, 0.018446f, -0.009305f, -0.047042f, 0.015930f, -0.008804f, 0.015189f, -0.018225f, -0.019581f, 0.012149f, -0.028709f, -0.025275f, 0.047693f, 0.035262f, -0.014408f, -0.038331f, 0.018085f, -0.019475f, 0.009797f, 0.000616f, -0.018478f, 0.037467f, -0.047394f, -0.000857f, -0.057445f, 0.002586f, 0.048604f, 0.067465f, 0.032598f, -0.010214f, 0.031904f, -0.001143f, -0.002977f, 0.004495f, -0.003897f, 0.017518f, -0.000687f, -0.029800f, 0.003178f, -0.041872f, 0.016579f, -0.012072f, -0.008183f, 0.030217f, 0.000888f, -0.031834f, -0.035551f, 0.009951f, 0.006693f, -0.017083f, -0.013762f, 0.029194f, -0.038496f, 0.001253f, -0.006346f, 0.015699f, -0.008946f, -0.007149f, -0.030220f, -0.012041f, -0.012163f, -0.004311f, 0.025319f, -0.025730f, 0.012169f, -0.001509f, -0.002344f, 0.005545f, 0.012588f, -0.044497f, -0.002150f, 0.008474f, -0.001067f, 0.019524f, -0.011326f, + -0.018094f, -0.005684f, -0.049406f, -0.018826f, -0.019789f, 0.005818f, 0.025455f, 0.038991f, -0.012206f, 0.031963f, -0.039205f, 0.077980f, 0.010003f, -0.000857f, 0.044853f, -0.014264f, 0.042723f, 0.002455f, -0.030463f, -0.000642f, -0.004593f, 0.019848f, 0.013072f, -0.018550f, 0.021498f, 0.000450f, -0.047976f, -0.052192f, -0.004994f, -0.015671f, 0.013047f, -0.002167f, -0.018450f, -0.047016f, -0.041087f, 0.022502f, -0.034964f, -0.007746f, 0.002206f, 0.011173f, 0.002603f, 0.033699f, 0.002800f, -0.016853f, 0.022479f, -0.002854f, 0.003262f, 0.020923f, -0.027412f, -0.001638f, 0.005890f, -0.027766f, 0.016885f, 0.023398f, 0.010052f, 0.020856f, 0.010705f, 0.032208f, 0.008632f, 0.023525f, -0.032844f, -0.009962f, -0.005367f, -0.043646f, -0.000410f, -0.004449f, 0.018179f, -0.002613f, 0.020828f, -0.003156f, -0.025793f, -0.016968f, -0.001675f, -0.040201f, 0.017380f, 0.001587f, -0.008421f, 0.024264f, 0.014401f, 0.020289f, 0.019674f, 0.006870f, -0.003473f, 0.017881f, -0.056392f, 0.017392f, 0.005203f, 0.025340f, -0.012154f, -0.038349f, 0.020791f, -0.006023f, 0.033770f, -0.055268f, 0.029152f, 0.027033f, + 0.098902f, 0.074745f, 0.010096f, 0.021676f, 0.006238f, 0.057437f, 0.001533f, 0.027966f, -0.026144f, 0.068033f, -0.027013f, 0.061701f, -0.002855f, 0.039422f, -0.004682f, 0.027828f, -0.027768f, 0.006684f, 0.013766f, -0.015144f, -0.005101f, -0.008129f, -0.006544f, 0.018415f, 0.000262f, -0.015866f, -0.022072f, -0.033003f, -0.042206f, -0.020184f, -0.007320f, 0.000254f, 0.012933f, -0.035377f, 0.014683f, -0.019479f, -0.030373f, -0.006266f, -0.022325f, 0.009994f, -0.005776f, -0.046062f, -0.011428f, -0.023449f, -0.028267f, -0.029184f, 0.025857f, 0.035264f, -0.074569f, 0.016677f, 0.005824f, 0.020650f, 0.006489f, -0.009448f, 0.043770f, 0.024999f, 0.022326f, -0.062037f, -0.028904f, -0.001040f, 0.013837f, 0.050931f, 0.000268f, -0.007271f, 0.000520f, 0.042942f, 0.036588f, -0.037504f, 0.038703f, 0.002307f, 0.005361f, -0.008202f, 0.018492f, -0.054479f, -0.030659f, 0.023624f, -0.014275f, 0.020124f, 0.033284f, -0.045136f, 0.009395f, -0.027318f, 0.065836f, -0.044634f, 0.035666f, 0.032540f, -0.017269f, -0.068385f, -0.041235f, -0.007879f, -0.020770f, -0.005547f, -0.033243f, -0.050835f, -0.066344f, -0.039644f, + -0.045369f, 0.014380f, -0.039330f, 0.011209f, 0.000674f, -0.007818f, -0.007295f, -0.033180f, -0.012722f, -0.034008f, 0.005243f, 0.023260f, 0.031747f, -0.003159f, -0.013639f, -0.034892f, -0.011134f, -0.000772f, -0.022240f, 0.001376f, -0.029294f, -0.020540f, -0.007521f, -0.029271f, 0.016079f, -0.026360f, -0.069978f, -0.001619f, -0.006148f, -0.025906f, 0.023899f, 0.017843f, 0.027692f, 0.008043f, 0.020708f, 0.046670f, 0.003892f, -0.055146f, -0.016497f, 0.019356f, -0.016367f, -0.046807f, 0.017985f, 0.028645f, 0.005200f, -0.005199f, -0.063759f, 0.045763f, -0.010069f, 0.036086f, -0.043532f, 0.036163f, 0.091928f, -0.015829f, -0.018891f, -0.080452f, 0.028206f, -0.105681f, 0.070882f, 0.026017f, -0.017685f, 0.075831f, -0.006765f, -0.037197f, 0.066822f, -0.024562f, -0.003331f, 0.015141f, 0.023458f, 0.062585f, 0.002636f, -0.003787f, 0.043426f, 0.019685f, 0.036392f, 0.045923f, 0.032955f, 0.004449f, 0.022909f, 0.005109f, -0.002627f, -0.022905f, 0.015227f, 0.024967f, 0.005152f, 0.000224f, -0.026969f, 0.014340f, -0.025417f, 0.031466f, 0.028490f, 0.006903f, 0.033687f, -0.019485f, 0.021779f, 0.037853f, + 0.021684f, -0.046524f, -0.053518f, 0.063279f, -0.007493f, 0.040393f, 0.057748f, 0.003544f, -0.001863f, -0.004006f, 0.009565f, 0.036603f, 0.030287f, 0.005695f, 0.024503f, 0.002347f, -0.033851f, -0.036253f, -0.060451f, 0.003416f, -0.026848f, 0.003259f, 0.028371f, 0.032826f, -0.058115f, 0.007053f, 0.015514f, -0.044512f, 0.001707f, 0.067671f, -0.035557f, -0.030409f, 0.026131f, -0.036025f, -0.003292f, -0.011727f, 0.006683f, -0.038233f, 0.007190f, -0.044104f, 0.087414f, 0.020714f, -0.048435f, 0.017007f, -0.012157f, -0.043057f, -0.050802f, -0.051279f, 0.013673f, -0.003397f, 0.043162f, 0.064977f, 0.030378f, 0.015084f, -0.009288f, 0.021019f, 0.000756f, -0.083738f, 0.034996f, 0.085284f, -0.057766f, -0.060061f, -0.052601f, -0.073219f, 0.050935f, -0.072098f, 0.030625f, -0.000323f, -0.010421f, -0.001244f, -0.024690f, -0.028358f, 0.033836f, -0.074125f, 0.073832f, 0.042494f, 0.008410f, -0.049042f, -0.038093f, -0.032756f, 0.005115f, 0.011789f, -0.032885f, -0.005154f, -0.024731f, 0.051066f, 0.021850f, -0.010277f, -0.003267f, 0.020402f, 0.003101f, 0.023357f, -0.044151f, -0.017918f, -0.005739f, -0.008732f, + -0.041134f, -0.029142f, 0.021886f, -0.076644f, -0.045806f, 0.003961f, 0.086487f, 0.040310f, -0.027854f, -0.004288f, -0.067434f, 0.029401f, 0.102016f, -0.000359f, -0.019908f, -0.020692f, -0.039244f, -0.001683f, -0.043022f, -0.030152f, -0.084217f, 0.016271f, -0.062558f, -0.092463f, 0.019447f, 0.048509f, 0.010452f, 0.011830f, -0.040335f, -0.049663f, -0.014426f, -0.072770f, -0.036945f, 0.017051f, -0.061557f, 0.092351f, 0.016282f, -0.024535f, 0.018176f, -0.046415f, -0.090925f, -0.031216f, -0.070029f, 0.009441f, 0.017824f, -0.026254f, -0.050413f, -0.025792f, -0.031895f, 0.024868f, -0.037540f, -0.014113f, -0.006667f, 0.039055f, -0.031112f, -0.006365f, -0.015641f, 0.009269f, 0.014744f, 0.002127f, -0.014038f, 0.040581f, 0.052189f, 0.033870f, -0.029723f, -0.023444f, -0.081642f, -0.044980f, -0.020102f, 0.020588f, 0.132115f, -0.023307f, -0.000146f, 0.059315f, -0.007016f, 0.025208f, -0.031915f, -0.031761f, -0.026892f, 0.028400f, -0.076584f, 0.000859f, -0.010622f, -0.000466f, 0.065366f, -0.028013f, 0.099770f, 0.009853f, 0.077005f, -0.094108f, -0.024697f, 0.030085f, 0.005918f, -0.035508f, -0.006029f, -0.083344f, + 0.038051f, 0.059070f, -0.044771f, -0.037231f, -0.013286f, -0.040824f, -0.048528f, 0.011309f, 0.013154f, 0.035505f, 0.000747f, 0.030778f, 0.056625f, 0.058382f, 0.038983f, 0.012116f, -0.044755f, 0.002594f, 0.022110f, 0.028529f, 0.045897f, -0.001392f, -0.024839f, -0.037075f, -0.013948f, 0.045230f, -0.020067f, 0.016453f, 0.040429f, 0.001805f, 0.080083f, 0.006962f, -0.052154f, 0.042079f, 0.043349f, 0.010122f, 0.018336f, 0.038124f, 0.005891f, 0.000653f, -0.047927f, 0.099213f, -0.109551f, -0.083137f, -0.093570f, -0.033990f, 0.018512f, -0.058006f, 0.027304f, 0.057345f, -0.018866f, 0.002195f, 0.052866f, 0.013178f, -0.059142f, -0.024429f, -0.046071f, -0.010941f, 0.002229f, -0.001809f, 0.050695f, 0.045964f, -0.013133f, -0.018387f, 0.031077f, 0.072694f, 0.011927f, 0.058194f, -0.056428f, 0.050294f, -0.027105f, 0.010866f, -0.012839f, -0.046461f, -0.023097f, -0.046223f, -0.093253f, -0.093899f, -0.067832f, 0.014221f, 0.175248f, 0.044428f, -0.023770f, -0.052679f, -0.126013f, -0.177596f, 0.040548f, 0.073813f, 0.088830f, -0.018434f, 0.008127f, -0.051977f, -0.090200f, 0.026296f, 0.016998f, 0.029649f, + 0.004831f, -0.075934f, -0.022636f, 0.018705f, -0.014649f, -0.002887f, -0.013704f, 0.099215f, 0.087760f, 0.058788f, -0.004589f, -0.042439f, -0.071415f, -0.047726f, -0.042344f, 0.067795f, -0.010268f, 0.049634f, 0.023419f, 0.023297f, -0.029369f, -0.164577f, -0.112216f, 0.056088f, -0.087969f, -0.030342f, 0.191331f, 0.130748f, 0.099595f, -0.074296f, 0.055307f, -0.051419f, 0.005430f, 0.003898f, 0.029365f, 0.080722f, 0.143968f, -0.054247f, -0.002972f, -0.093517f, -0.073398f, -0.123808f, 0.015918f, -0.004985f, -0.130773f, -0.031853f, 0.088879f, 0.032213f, 0.063155f, 0.081359f, 0.149908f, -0.106830f, -0.060699f, 0.008212f, -0.084681f, 0.034899f, -0.078727f, -0.241100f, -0.225043f, -0.132642f, -0.143697f, -0.041999f, 0.215644f, 0.105658f, 0.222078f, 0.196473f, 0.312222f, 0.220969f, 0.188464f, 0.023691f, -0.094219f, -0.201490f, -0.318650f, -0.271234f, -0.273821f, -0.146508f, -0.075264f, -0.023515f, -0.006568f, -0.000212f, 0.045919f, 0.065379f, 0.175631f, 0.104336f, 0.208826f, 0.134198f, 0.177710f, 0.059982f, 0.171382f, 0.055200f, 0.035150f, 0.035331f, -0.019721f, -0.057854f, -0.131089f, -0.147972f, + -0.270552f, -0.186114f, -0.340449f, -0.268998f, -0.411291f, -0.245094f, -0.198345f, -0.052111f, 0.101350f, 0.052551f, 0.000737f, 0.104366f, 0.226611f, 0.309376f, 0.403805f, 0.487058f, 0.412043f, 0.302934f, 0.374559f, 0.312407f, 0.168317f, 0.076303f, -0.028816f, -0.134624f, -0.314492f, -0.364143f, -0.494686f, -0.626851f, -0.734404f, -0.651958f, -0.585112f, -0.403252f, -0.286759f, 0.102712f, 0.269038f, 0.375690f, 0.469566f, 0.298396f, 0.198381f}, + {0.008274f, -0.003285f, 0.004846f, -0.012740f, -0.001221f, -0.004851f, 0.006044f, 0.001098f, -0.005217f, 0.007805f, -0.006884f, -0.001734f, 0.006210f, -0.002438f, 0.002703f, -0.010549f, -0.001854f, -0.001329f, -0.011036f, 0.001401f, 0.000151f, -0.000373f, 0.003080f, -0.005560f, 0.001310f, -0.002029f, -0.000708f, 0.011497f, -0.001256f, -0.007934f, -0.003791f, 0.000763f, 0.002716f, -0.007655f, 0.001994f, -0.005791f, -0.000128f, -0.002228f, -0.003490f, 0.006315f, 0.006160f, -0.004409f, 0.008160f, 0.008300f, -0.010337f, -0.001738f, -0.001092f, -0.009697f, -0.004175f, -0.006715f, -0.007642f, 0.001699f, 0.001843f, -0.000955f, 0.000874f, 0.003636f, 0.003931f, -0.002167f, 0.001250f, 0.003518f, 0.009760f, 0.005613f, 0.004378f, -0.004932f, 0.000434f, -0.002756f, 0.006093f, -0.006917f, -0.004986f, 0.005359f, -0.003193f, 0.005810f, -0.006740f, -0.003320f, -0.002268f, -0.004094f, -0.022622f, 0.007968f, -0.013016f, 0.006553f, -0.007475f, -0.015034f, -0.025701f, 0.004140f, 0.000460f, 0.006052f, 0.005334f, -0.002115f, -0.002146f, 0.001572f, 0.015085f, -0.011255f, -0.019723f, 0.006096f, -0.008306f, -0.013397f, + -0.000018f, -0.002307f, 0.007818f, 0.002508f, 0.005519f, -0.006227f, -0.001673f, -0.004213f, 0.012876f, -0.003941f, -0.005484f, -0.005035f, -0.002489f, -0.003539f, -0.005421f, -0.005021f, -0.003373f, 0.002208f, 0.000973f, 0.001328f, 0.000327f, 0.003021f, 0.005454f, 0.002435f, -0.005021f, -0.015157f, -0.000201f, -0.010655f, 0.001466f, -0.001080f, -0.004677f, 0.006230f, 0.000486f, -0.000329f, -0.014643f, -0.006384f, 0.002090f, -0.001517f, 0.005313f, 0.000022f, 0.004808f, -0.004614f, 0.002202f, -0.002178f, 0.009474f, -0.003520f, 0.005285f, -0.008394f, -0.007444f, -0.010448f, 0.001343f, -0.002573f, -0.001877f, 0.000052f, -0.002042f, -0.016047f, -0.003386f, -0.002162f, -0.004624f, -0.002100f, -0.005564f, 0.005246f, -0.002277f, -0.001893f, -0.000584f, 0.000093f, -0.000462f, -0.003858f, 0.014005f, 0.009106f, 0.014634f, -0.006915f, 0.014554f, -0.008701f, -0.006304f, 0.005760f, 0.016114f, -0.000315f, -0.010095f, -0.014542f, -0.010707f, -0.001952f, 0.011396f, 0.004645f, 0.003693f, 0.005248f, -0.005366f, 0.008013f, 0.000740f, 0.006024f, -0.003165f, -0.013178f, 0.003328f, -0.009068f, -0.006609f, -0.006310f, + -0.001854f, -0.016727f, -0.001112f, 0.000971f, -0.007400f, 0.015965f, -0.003348f, -0.004897f, -0.006710f, 0.000060f, 0.001360f, -0.006526f, -0.000161f, -0.008039f, -0.003524f, 0.000500f, -0.003833f, 0.011635f, -0.000073f, -0.002741f, 0.005924f, 0.004417f, 0.010070f, 0.004596f, 0.012192f, 0.003522f, 0.009891f, -0.011322f, 0.002634f, 0.009947f, -0.003621f, -0.007778f, -0.011925f, 0.000628f, -0.001098f, 0.018140f, -0.008155f, -0.006267f, 0.001872f, -0.003979f, -0.002936f, 0.009120f, -0.006994f, 0.008781f, 0.004074f, 0.000238f, 0.004527f, -0.005808f, -0.005505f, -0.010224f, -0.010987f, 0.014607f, 0.006963f, 0.005160f, 0.007868f, -0.005066f, -0.003324f, -0.003723f, 0.018481f, -0.007096f, 0.020223f, -0.000659f, -0.005043f, -0.004834f, -0.010581f, -0.011462f, -0.013832f, -0.000856f, -0.003417f, 0.002516f, 0.013541f, -0.001156f, -0.006211f, -0.018776f, 0.000748f, 0.014874f, 0.021972f, -0.010306f, 0.005746f, 0.003978f, -0.005465f, -0.005016f, 0.005808f, 0.020643f, -0.004842f, 0.003161f, -0.001672f, -0.003149f, -0.001834f, 0.009793f, 0.014459f, -0.011047f, -0.005785f, 0.004233f, 0.018927f, 0.002878f, + 0.013440f, -0.011205f, -0.009983f, -0.000940f, -0.001559f, 0.003338f, 0.002961f, -0.000839f, 0.001267f, 0.001189f, -0.004849f, 0.001269f, 0.006063f, 0.003212f, -0.003934f, 0.029189f, -0.020967f, -0.005051f, -0.009024f, 0.001786f, 0.007383f, 0.013736f, -0.014804f, 0.009243f, -0.004261f, -0.015648f, -0.024961f, -0.005557f, -0.010913f, 0.001179f, -0.002868f, -0.010891f, -0.005815f, 0.005130f, 0.005491f, 0.018525f, 0.010056f, 0.009138f, 0.000457f, 0.002439f, -0.010445f, -0.007292f, 0.014793f, 0.011151f, 0.007419f, 0.003089f, 0.006797f, 0.000958f, -0.000507f, -0.013445f, -0.018713f, 0.011492f, -0.005427f, -0.012857f, -0.006423f, -0.008339f, 0.005869f, -0.007439f, 0.014775f, 0.002858f, -0.009534f, -0.005047f, -0.007476f, -0.006637f, 0.006830f, 0.010555f, -0.001698f, 0.006838f, -0.006355f, -0.007065f, -0.000754f, 0.000672f, -0.006809f, -0.003220f, 0.007999f, -0.000843f, -0.004638f, -0.005386f, 0.003800f, 0.004320f, -0.001838f, 0.005352f, -0.000381f, -0.005931f, 0.013894f, -0.003681f, -0.000062f, -0.001043f, -0.020729f, 0.004880f, 0.002672f, 0.005412f, -0.019484f, 0.006023f, 0.001001f, -0.005209f, + -0.010320f, 0.005443f, -0.009830f, -0.001144f, 0.019124f, 0.028601f, 0.014462f, 0.016090f, -0.000371f, -0.006900f, 0.012257f, 0.011103f, 0.005108f, 0.006315f, 0.014462f, -0.001191f, 0.010723f, 0.010497f, 0.014972f, 0.014465f, -0.010403f, 0.009979f, 0.000032f, 0.004057f, -0.009647f, 0.004026f, -0.000648f, 0.010179f, -0.002867f, -0.001763f, -0.006604f, 0.007661f, -0.010649f, -0.008355f, 0.001646f, 0.010689f, 0.006066f, -0.004980f, -0.002343f, -0.000886f, -0.003194f, 0.006860f, -0.012991f, 0.013564f, 0.000632f, 0.016659f, -0.021567f, 0.002581f, -0.019367f, -0.005289f, -0.005730f, 0.006533f, -0.001456f, -0.003464f, 0.005020f, 0.002798f, 0.005998f, 0.009843f, 0.014772f, -0.000521f, -0.010889f, 0.003758f, 0.019614f, 0.005287f, -0.005153f, 0.000063f, 0.012074f, -0.004667f, 0.007249f, -0.004376f, -0.020814f, 0.013365f, 0.010908f, -0.030717f, 0.000323f, -0.006985f, 0.002626f, -0.017320f, 0.001916f, 0.002576f, 0.022495f, -0.018387f, 0.000083f, -0.024590f, 0.005407f, -0.014982f, -0.003704f, 0.000591f, -0.008073f, 0.006712f, 0.003014f, -0.013066f, 0.000150f, -0.000544f, 0.011698f, -0.008062f, + 0.018900f, -0.000614f, -0.016490f, -0.008791f, 0.020140f, -0.002361f, 0.008049f, 0.004934f, -0.003351f, 0.011612f, -0.013365f, -0.013115f, -0.009832f, 0.000884f, -0.012779f, 0.013079f, -0.007469f, 0.008182f, -0.012354f, -0.000708f, -0.015008f, 0.009299f, 0.001375f, 0.011230f, 0.010641f, -0.010666f, 0.019965f, 0.016298f, 0.016097f, 0.002468f, 0.016906f, 0.013089f, -0.014181f, 0.011480f, 0.005952f, 0.000316f, -0.013146f, 0.005247f, -0.011167f, 0.010269f, -0.004734f, -0.009872f, -0.000967f, 0.015633f, 0.006052f, -0.020356f, 0.018420f, -0.002793f, -0.006387f, -0.012469f, 0.018703f, 0.014224f, -0.014012f, 0.010231f, 0.044373f, 0.008232f, -0.000914f, -0.014180f, -0.027389f, 0.008043f, -0.003336f, -0.040560f, 0.037144f, -0.016746f, -0.025460f, 0.006414f, -0.000861f, 0.005764f, -0.000880f, 0.007921f, 0.011295f, 0.001029f, 0.000153f, -0.020260f, -0.000935f, -0.001095f, 0.025778f, -0.003632f, 0.001479f, 0.010125f, -0.003544f, -0.002115f, -0.009314f, 0.022281f, -0.015140f, 0.016389f, -0.002946f, -0.011753f, 0.003250f, -0.013236f, -0.006387f, -0.022118f, 0.004962f, 0.011732f, -0.005378f, -0.010446f, + -0.008252f, 0.015165f, -0.020813f, -0.003948f, -0.009784f, 0.000928f, -0.002167f, 0.004106f, -0.017883f, 0.019692f, -0.024747f, -0.016213f, 0.007995f, 0.004559f, 0.000067f, 0.008401f, -0.012273f, -0.017594f, 0.003497f, -0.003507f, 0.000283f, 0.011267f, -0.010261f, 0.010533f, 0.007246f, 0.023355f, -0.004480f, 0.005444f, -0.000108f, 0.003039f, 0.031109f, 0.005707f, 0.031190f, -0.002738f, -0.007645f, -0.033030f, -0.005251f, -0.007593f, -0.026970f, -0.045737f, 0.012726f, 0.022053f, -0.017377f, -0.009003f, 0.012102f, -0.005967f, 0.026810f, -0.004266f, -0.015834f, -0.010037f, -0.042559f, 0.012861f, 0.003746f, -0.005010f, -0.030153f, 0.005671f, -0.017171f, -0.005541f, -0.015172f, -0.008581f, 0.019875f, -0.021230f, 0.007717f, -0.030834f, 0.018034f, 0.002412f, -0.000468f, -0.009895f, 0.001403f, -0.005267f, -0.017306f, -0.032517f, 0.005238f, -0.001430f, 0.005879f, 0.011503f, -0.008304f, -0.004058f, -0.020721f, -0.011897f, -0.006068f, 0.006792f, 0.005032f, 0.013000f, 0.022859f, 0.016595f, 0.008823f, 0.012155f, 0.003653f, 0.012658f, 0.012581f, -0.014907f, 0.014531f, 0.014834f, -0.004012f, 0.020467f, + -0.002843f, 0.024244f, -0.012256f, -0.031509f, -0.005047f, 0.015332f, 0.019931f, 0.019837f, -0.004632f, -0.043981f, -0.004024f, -0.006652f, 0.001797f, -0.006927f, -0.009021f, -0.001779f, 0.042749f, -0.009409f, -0.010228f, 0.014223f, 0.023063f, -0.001704f, 0.010782f, 0.026570f, 0.019342f, -0.043849f, -0.040090f, 0.000203f, -0.003738f, 0.005745f, -0.017824f, -0.032095f, 0.007738f, 0.025381f, 0.017080f, -0.018763f, 0.030292f, 0.024055f, 0.023037f, -0.038642f, 0.011080f, 0.019781f, 0.001270f, 0.002696f, 0.017370f, 0.039107f, -0.007371f, -0.018495f, 0.012262f, 0.008480f, -0.005091f, 0.020837f, 0.032184f, 0.005394f, 0.033343f, 0.013832f, -0.024462f, 0.002140f, 0.027729f, -0.003664f, -0.010894f, 0.013425f, 0.002655f, 0.004575f, 0.029122f, 0.017572f, 0.010169f, 0.002455f, -0.032974f, -0.035031f, -0.002428f, 0.004275f, 0.009312f, -0.011697f, -0.001032f, -0.010098f, 0.003455f, 0.002819f, -0.012238f, 0.003269f, -0.007286f, -0.003694f, -0.010240f, -0.000674f, 0.021896f, -0.014688f, -0.029923f, -0.007221f, -0.025149f, 0.002891f, -0.008004f, -0.004223f, -0.001295f, -0.074018f, -0.047155f, -0.016145f, + 0.010345f, -0.007060f, -0.020431f, 0.000490f, -0.019971f, 0.047248f, -0.022843f, 0.029317f, 0.046713f, 0.023975f, 0.021698f, -0.022079f, 0.014876f, -0.012384f, -0.025470f, 0.017081f, 0.020660f, 0.012552f, 0.030628f, -0.002691f, -0.004331f, -0.017603f, -0.017640f, -0.015806f, -0.023309f, -0.023155f, -0.016448f, 0.004723f, 0.000171f, -0.003231f, -0.015643f, -0.010180f, -0.022706f, 0.005252f, -0.019979f, -0.018913f, -0.009702f, 0.005218f, -0.002773f, -0.013867f, -0.031887f, 0.000228f, -0.011346f, 0.007262f, -0.037158f, -0.030035f, 0.027457f, -0.008039f, -0.008610f, -0.017459f, -0.011366f, 0.019092f, 0.004510f, -0.008306f, 0.009550f, -0.007081f, 0.010017f, 0.006481f, 0.011799f, -0.014428f, -0.020366f, -0.047743f, 0.000008f, -0.046522f, -0.005971f, -0.040102f, -0.008314f, 0.029762f, -0.007424f, 0.001751f, -0.027271f, 0.050015f, 0.001786f, -0.034677f, -0.029404f, 0.031790f, 0.024904f, -0.021781f, -0.021329f, 0.042384f, 0.026902f, 0.002606f, -0.023953f, 0.004095f, -0.009785f, 0.020778f, -0.014745f, 0.003546f, -0.006022f, -0.003258f, 0.043118f, -0.004748f, -0.011319f, 0.009265f, 0.007539f, 0.014157f, + 0.013412f, 0.002868f, -0.016721f, 0.014225f, 0.006548f, 0.016126f, 0.033084f, 0.016667f, -0.047646f, -0.012060f, -0.007875f, -0.034841f, 0.013923f, -0.004693f, 0.000483f, -0.018645f, 0.016825f, -0.006195f, 0.002856f, -0.024685f, 0.017398f, -0.019761f, 0.001155f, 0.022985f, -0.004120f, 0.024170f, -0.018293f, 0.029717f, -0.036714f, 0.019694f, -0.000673f, -0.011059f, 0.045567f, 0.014298f, -0.011114f, -0.026109f, 0.010576f, -0.003988f, 0.002079f, -0.002569f, 0.015108f, 0.027082f, 0.032104f, -0.020407f, 0.012822f, -0.007568f, 0.027685f, 0.011837f, 0.000717f, -0.003226f, 0.013799f, -0.000000f, -0.018085f, -0.071184f, -0.045955f, 0.038788f, -0.027862f, -0.026239f, 0.015231f, 0.033939f, -0.055085f, -0.009008f, 0.013718f, 0.003772f, -0.028476f, -0.043292f, 0.082160f, -0.035045f, 0.011675f, -0.039891f, 0.022676f, -0.013848f, 0.038821f, 0.033964f, 0.004129f, 0.006044f, -0.044584f, -0.000051f, 0.022217f, -0.018384f, -0.026198f, 0.021441f, 0.006955f, 0.023095f, 0.019331f, -0.003941f, 0.008698f, -0.005220f, -0.001867f, 0.034013f, -0.027967f, -0.017241f, 0.028531f, -0.001317f, -0.020733f, 0.028782f, + 0.000376f, -0.006623f, -0.018275f, -0.008928f, 0.012102f, -0.015611f, -0.000272f, 0.009881f, -0.017889f, -0.020287f, -0.011315f, 0.014320f, -0.040461f, 0.019755f, -0.000066f, 0.039713f, -0.035739f, 0.012085f, -0.026561f, 0.010099f, -0.014932f, -0.022503f, 0.038696f, -0.020572f, -0.006107f, -0.020071f, 0.018634f, -0.022896f, 0.016491f, -0.008184f, 0.030202f, 0.026692f, 0.000766f, -0.041147f, 0.034512f, 0.016042f, -0.041937f, 0.012384f, 0.042080f, -0.005250f, -0.001393f, 0.018695f, -0.014539f, 0.029139f, 0.026101f, -0.037931f, -0.023966f, -0.008129f, 0.017710f, 0.033481f, 0.004577f, 0.017137f, 0.037712f, 0.028062f, -0.043087f, -0.005852f, 0.064063f, 0.014833f, -0.006145f, -0.009190f, -0.014187f, -0.020756f, 0.003946f, 0.014676f, 0.016057f, 0.015260f, -0.013731f, -0.029571f, 0.005527f, -0.016107f, 0.013334f, 0.043889f, -0.014244f, -0.047147f, 0.052325f, -0.018033f, -0.032414f, 0.042598f, -0.010420f, -0.014841f, -0.049887f, -0.010224f, 0.016882f, 0.007574f, -0.013109f, -0.021803f, 0.015301f, 0.000052f, -0.025093f, 0.016822f, -0.007770f, 0.041072f, -0.035364f, 0.002312f, -0.010090f, 0.047104f, + 0.012633f, -0.072727f, 0.017414f, -0.032061f, -0.017401f, -0.028100f, 0.024710f, 0.097148f, 0.030300f, 0.001905f, 0.015846f, 0.024402f, -0.045854f, -0.022605f, -0.021500f, -0.033961f, 0.002941f, -0.015362f, -0.053222f, -0.022685f, 0.003638f, -0.021660f, -0.066964f, 0.058009f, -0.011140f, 0.026100f, 0.004970f, -0.030792f, -0.052797f, -0.051006f, 0.057147f, 0.034668f, 0.013165f, -0.020249f, -0.038116f, -0.028737f, -0.045260f, -0.011790f, 0.017018f, -0.007201f, 0.003826f, 0.007082f, -0.007306f, -0.023661f, -0.022434f, -0.038729f, -0.013659f, -0.007594f, 0.019153f, 0.013033f, 0.021060f, -0.010548f, -0.017017f, -0.007455f, 0.027508f, 0.003642f, 0.024413f, -0.080856f, -0.018669f, -0.000372f, 0.018043f, -0.026000f, -0.000745f, -0.030069f, 0.023750f, 0.020215f, 0.004389f, 0.099224f, 0.002084f, 0.030746f, 0.041526f, 0.001378f, 0.013841f, 0.000190f, -0.006501f, -0.012444f, 0.021384f, 0.029804f, 0.040457f, -0.001442f, -0.006581f, 0.002127f, 0.027063f, 0.023028f, 0.002001f, 0.018514f, 0.017915f, 0.012240f, -0.003705f, 0.038385f, -0.009259f, 0.049721f, -0.047090f, -0.023533f, 0.040593f, -0.004172f, + 0.004473f, 0.012743f, -0.048906f, 0.004953f, 0.010239f, 0.035334f, 0.052485f, -0.039494f, 0.012189f, -0.023881f, 0.038230f, 0.034854f, 0.006898f, 0.064367f, 0.022059f, 0.027284f, -0.019617f, -0.000871f, -0.036484f, 0.064292f, -0.032931f, 0.012346f, 0.040513f, -0.006245f, -0.021378f, 0.021734f, -0.002693f, 0.012327f, 0.043280f, 0.003743f, -0.009979f, -0.001039f, 0.010419f, 0.001399f, -0.021161f, 0.020437f, 0.000527f, -0.004151f, 0.071844f, -0.050407f, 0.052742f, 0.034880f, 0.065107f, 0.028017f, -0.041312f, 0.036712f, 0.003417f, 0.034283f, 0.084773f, -0.056633f, -0.021882f, -0.005068f, 0.004193f, 0.058332f, -0.030573f, 0.005399f, -0.033100f, 0.005248f, 0.065275f, -0.004683f, 0.067522f, 0.020745f, 0.013224f, 0.031936f, -0.038058f, -0.004485f, 0.030230f, 0.042552f, -0.064965f, -0.000776f, -0.056242f, 0.026306f, -0.030480f, -0.001408f, 0.008272f, -0.012818f, -0.041485f, 0.009618f, -0.071413f, -0.063340f, -0.000494f, -0.000897f, -0.040496f, 0.029978f, 0.007915f, -0.012557f, -0.037560f, 0.047487f, -0.012693f, 0.071567f, -0.011864f, 0.013756f, 0.025490f, -0.037984f, -0.012963f, 0.008983f, + -0.043642f, -0.026349f, -0.038226f, 0.029685f, -0.030743f, -0.010588f, -0.010595f, 0.025240f, -0.025928f, -0.045199f, -0.060063f, -0.004433f, 0.048815f, 0.000180f, -0.027769f, -0.014461f, -0.034954f, -0.014500f, -0.000112f, 0.017577f, -0.039179f, -0.007459f, -0.008739f, -0.030895f, -0.038380f, -0.001468f, 0.006239f, 0.021301f, 0.008387f, 0.038938f, 0.011757f, 0.049945f, -0.022274f, 0.040502f, -0.011146f, -0.038325f, -0.008817f, 0.067928f, -0.030798f, 0.028653f, -0.022455f, 0.048455f, -0.027547f, 0.013293f, 0.033852f, -0.006781f, -0.013402f, 0.001219f, -0.018708f, 0.042229f, -0.043671f, -0.023238f, 0.047908f, -0.014409f, -0.040668f, -0.064035f, 0.075437f, -0.021824f, 0.064546f, -0.010437f, 0.052272f, 0.006800f, -0.013348f, -0.031498f, -0.021909f, -0.001796f, 0.002957f, 0.039481f, -0.011803f, 0.000018f, 0.012668f, -0.030490f, 0.056047f, 0.023134f, 0.004092f, -0.041338f, 0.032508f, 0.019172f, -0.033395f, 0.037868f, 0.005022f, -0.002132f, 0.010716f, 0.002333f, 0.047476f, -0.006924f, -0.055309f, 0.065451f, -0.029995f, -0.001317f, 0.047856f, -0.016481f, -0.008199f, -0.023548f, 0.074409f, -0.028469f, + -0.007162f, -0.041207f, -0.007033f, 0.009876f, 0.066650f, -0.025893f, 0.013961f, 0.025329f, 0.040313f, -0.005295f, -0.039440f, 0.049908f, 0.028916f, 0.041700f, -0.016083f, -0.003173f, 0.006271f, 0.046183f, -0.020711f, -0.041132f, -0.051161f, 0.034696f, -0.035363f, 0.016509f, 0.041052f, 0.044242f, -0.024250f, -0.000503f, 0.054600f, -0.075418f, -0.000624f, 0.022394f, 0.030576f, 0.009252f, -0.029483f, 0.014202f, 0.026392f, -0.013127f, -0.015161f, -0.092657f, 0.032877f, 0.019309f, 0.084508f, 0.074314f, -0.009913f, -0.025928f, -0.085215f, 0.003657f, 0.029704f, -0.035719f, 0.029008f, 0.051592f, 0.049883f, -0.021551f, 0.059853f, 0.053989f, 0.003314f, -0.030640f, -0.033375f, 0.055132f, 0.046832f, -0.064253f, -0.088603f, 0.119975f, 0.006851f, -0.007127f, 0.016247f, 0.010087f, 0.044671f, 0.045086f, -0.017015f, -0.013667f, 0.062405f, 0.030743f, -0.010561f, -0.039787f, 0.025404f, 0.006297f, 0.003750f, 0.023389f, 0.003451f, -0.000572f, -0.024391f, 0.015222f, -0.007162f, -0.028885f, 0.055702f, -0.087045f, 0.061729f, 0.052526f, -0.083763f, -0.004472f, 0.042542f, 0.012119f, 0.048424f, -0.010088f, + 0.006407f, 0.045917f, -0.006510f, 0.024053f, -0.042151f, -0.064176f, 0.182967f, -0.074150f, -0.107422f, -0.022083f, 0.203020f, 0.089485f, -0.090136f, -0.019014f, 0.032509f, 0.025592f, -0.006074f, 0.009460f, -0.040546f, -0.027134f, 0.042234f, 0.075791f, 0.001752f, 0.128517f, -0.062579f, -0.026763f, 0.073245f, -0.000387f, -0.007993f, -0.043803f, -0.082605f, 0.061420f, -0.044676f, -0.049139f, 0.030682f, -0.054109f, 0.021377f, -0.051563f, -0.055527f, -0.013212f, 0.008297f, 0.002980f, -0.015377f, 0.058379f, 0.012782f, 0.033834f, 0.015534f, -0.003433f, -0.001785f, -0.032913f, -0.062991f, 0.014755f, 0.057635f, -0.053708f, 0.039611f, -0.054671f, -0.007496f, -0.007330f, -0.079635f, 0.050585f, -0.028841f, 0.016906f, -0.000290f, -0.027374f, -0.000299f, -0.060597f, 0.056160f, -0.045096f, 0.018057f, -0.069722f, -0.040580f, -0.089998f, 0.031707f, -0.044337f, -0.045303f, -0.040590f, -0.018622f, -0.004010f, 0.091628f, 0.028734f, 0.046109f, -0.016037f, -0.040905f, -0.057092f, 0.016721f, 0.000672f, -0.089398f, -0.045038f, -0.158548f, -0.077383f, -0.056633f, -0.007664f, -0.065707f, -0.052792f, -0.022591f, -0.094204f, + 0.021454f, 0.032010f, -0.081251f, 0.043715f, 0.008683f, -0.024713f, 0.004733f, -0.024262f, -0.002221f, 0.015858f, 0.023793f, 0.039686f, -0.048370f, 0.002896f, 0.056648f, -0.008242f, -0.026134f, 0.048350f, -0.021402f, 0.001218f, -0.028953f, -0.014626f, -0.058602f, 0.012913f, 0.002730f, 0.030909f, -0.022105f, -0.000511f, 0.043598f, -0.023062f, 0.002503f, 0.039892f, -0.082958f, 0.001924f, -0.095058f, -0.034770f, -0.062737f, 0.047988f, 0.021063f, -0.008103f, 0.024730f, -0.023631f, 0.026967f, 0.061320f, 0.021206f, 0.097574f, -0.053509f, -0.071056f, 0.064501f, 0.010712f, -0.040036f, -0.047798f, -0.012295f, 0.031378f, -0.031315f, -0.008399f, -0.025936f, -0.048203f, 0.029975f, 0.021793f, -0.054000f, -0.044043f, 0.059512f, -0.010480f, 0.026572f, -0.021809f, 0.037725f, 0.001023f, 0.063033f, -0.043816f, -0.010734f, -0.001754f, 0.026582f, -0.033097f, -0.036896f, -0.062604f, -0.127158f, -0.063266f, -0.023798f, 0.056419f, 0.073302f, -0.138791f, 0.024538f, -0.054747f, -0.075078f, -0.014875f, 0.087747f, 0.056443f, 0.048048f, -0.029405f, -0.033182f, -0.039520f, 0.044456f, 0.031759f, 0.068350f, 0.009586f, + -0.087835f, -0.033829f, 0.066733f, -0.009432f, 0.019847f, 0.060189f, -0.028028f, -0.040344f, -0.064179f, -0.063826f, 0.000761f, 0.042962f, 0.091301f, 0.068207f, 0.044992f, 0.019163f, -0.092719f, -0.098232f, 0.034985f, -0.067471f, 0.016471f, 0.088296f, 0.035055f, 0.006898f, -0.043770f, -0.078066f, -0.013249f, -0.033046f, 0.026835f, 0.021712f, 0.015122f, 0.055839f, -0.008248f, -0.009480f, 0.014678f, 0.040887f, 0.064715f, 0.067936f, 0.022915f, 0.060663f, 0.020266f, 0.022610f, -0.012808f, -0.065282f, -0.025871f, -0.027546f, -0.054324f, 0.042465f, 0.038685f, 0.029936f, 0.028691f, -0.011369f, -0.065262f, 0.011861f, 0.020065f, 0.042206f, -0.109679f, -0.223418f, -0.114036f, 0.024556f, 0.090946f, 0.217806f, 0.213173f, 0.090342f, 0.092241f, 0.066945f, 0.006167f, -0.104531f, -0.178908f, -0.270994f, -0.078999f, -0.111848f, -0.017251f, 0.114277f, 0.201714f, 0.169952f, 0.150462f, 0.084050f, 0.000852f, -0.049523f, -0.067230f, -0.012373f, -0.118392f, -0.093571f, -0.088673f, -0.057293f, -0.046474f, -0.020247f, -0.001646f, 0.044225f, 0.100783f, 0.103589f, 0.101963f, 0.075238f, 0.097244f, 0.052688f, + 0.056717f, -0.015235f, -0.001391f, -0.042213f, -0.114733f, -0.167442f, -0.202739f, -0.097034f, -0.037574f, 0.034296f, -0.002903f, 0.023996f, 0.050035f, 0.064665f, 0.135355f, 0.155714f, 0.205545f, 0.131895f, 0.015025f, 0.061320f, -0.029039f, -0.110496f, -0.096900f, -0.193973f, -0.227290f, -0.169230f, -0.105135f, -0.044357f, -0.036357f, 0.082473f, 0.090592f, 0.256514f, 0.205581f, 0.150538f, 0.138277f, 0.056630f, -0.051997f, -0.066059f, -0.040091f} + }, + { + {0.018235f, -0.003472f, 0.005490f, -0.000571f, 0.007113f, 0.008802f, 0.006134f, 0.011158f, -0.006845f, 0.012061f, -0.004063f, 0.001631f, -0.011202f, 0.000524f, -0.011671f, 0.002543f, 0.002049f, 0.000973f, 0.000325f, 0.004340f, -0.006223f, -0.007391f, 0.006076f, -0.000559f, 0.004647f, 0.002762f, -0.001027f, -0.005085f, 0.000972f, 0.009242f, 0.005653f, 0.002995f, 0.003590f, 0.002764f, 0.001017f, 0.003343f, -0.000734f, 0.000448f, -0.000733f, 0.010487f, -0.002163f, 0.005451f, -0.003895f, 0.004636f, 0.012323f, -0.003269f, 0.011536f, 0.001765f, -0.004865f, 0.003436f, 0.005153f, -0.001661f, -0.002003f, 0.000326f, 0.008742f, -0.002760f, 0.002791f, -0.001620f, 0.005558f, 0.002326f, 0.007581f, -0.002523f, -0.000523f, 0.002931f, -0.003002f, -0.006192f, 0.001175f, -0.002024f, -0.000788f, -0.002434f, 0.004980f, 0.000794f, 0.003142f, -0.001468f, 0.006725f, 0.003439f, -0.008512f, -0.013235f, -0.009654f, 0.003716f, -0.001518f, -0.022613f, -0.012911f, -0.000980f, 0.003154f, -0.006940f, 0.002291f, -0.008365f, 0.001540f, -0.006027f, 0.015754f, -0.012877f, -0.005796f, -0.005622f, 0.009978f, 0.007056f, + 0.016012f, 0.004350f, 0.003207f, -0.007286f, 0.007460f, 0.001086f, 0.001895f, -0.000773f, 0.005935f, 0.008527f, 0.000434f, 0.008514f, 0.007732f, -0.003687f, 0.004225f, -0.004529f, -0.005480f, 0.000795f, -0.004529f, 0.002912f, -0.006984f, -0.011968f, 0.003041f, 0.004620f, -0.003294f, 0.003679f, -0.006104f, 0.005800f, 0.007205f, -0.012571f, 0.002223f, -0.000363f, 0.004547f, 0.004523f, 0.000362f, -0.012325f, -0.004143f, -0.005160f, 0.003885f, 0.000318f, 0.000932f, -0.003580f, 0.002000f, -0.005980f, -0.000054f, 0.007683f, 0.004143f, 0.001137f, -0.004012f, 0.003073f, -0.010815f, -0.005027f, -0.008066f, 0.002329f, 0.000872f, 0.000511f, -0.025739f, -0.000475f, 0.001737f, 0.000722f, 0.004646f, -0.008865f, 0.007128f, 0.004140f, -0.004468f, -0.015213f, 0.010599f, 0.010826f, -0.002096f, 0.009063f, 0.006680f, -0.008290f, 0.017511f, 0.003895f, -0.007367f, 0.009531f, 0.001054f, 0.008925f, 0.001660f, -0.014600f, 0.006072f, -0.002510f, -0.005116f, -0.005477f, -0.004118f, 0.010085f, 0.007992f, 0.000928f, 0.008349f, 0.003182f, -0.007056f, -0.008958f, -0.000405f, -0.001853f, 0.004439f, 0.003027f, + -0.006835f, 0.002057f, 0.004264f, 0.003906f, -0.005935f, -0.005056f, -0.008008f, -0.002658f, -0.001621f, 0.002031f, -0.001570f, 0.011735f, 0.005407f, -0.001429f, -0.005238f, 0.002482f, 0.005305f, 0.002812f, 0.012854f, -0.001685f, 0.006783f, -0.000355f, -0.003414f, -0.007070f, 0.005912f, -0.001281f, -0.002773f, 0.007631f, -0.001493f, 0.002854f, -0.000827f, -0.001009f, -0.007436f, 0.002313f, -0.001413f, 0.010121f, 0.012896f, -0.002187f, -0.004895f, -0.007713f, -0.017720f, -0.010609f, -0.003829f, 0.012726f, 0.001674f, 0.002355f, 0.007841f, 0.002074f, 0.003409f, -0.018628f, -0.017013f, -0.010922f, -0.002794f, -0.000121f, 0.007941f, -0.005640f, 0.006238f, -0.003257f, -0.011384f, 0.003509f, -0.001582f, -0.007939f, -0.000017f, 0.010927f, 0.016141f, 0.007167f, -0.007200f, 0.004198f, 0.000663f, 0.011437f, 0.000113f, -0.009307f, -0.000132f, -0.005487f, 0.011555f, 0.004837f, 0.005545f, 0.011357f, -0.001746f, 0.000699f, 0.015688f, 0.013331f, -0.000219f, -0.000219f, 0.001375f, -0.001018f, 0.004449f, 0.000957f, -0.010861f, -0.015104f, -0.004851f, -0.002087f, 0.000504f, -0.005148f, -0.016125f, -0.001981f, + 0.005164f, -0.009284f, -0.003801f, -0.006139f, -0.004349f, 0.001509f, 0.002910f, 0.005217f, -0.010704f, -0.009564f, 0.009965f, -0.004093f, -0.000809f, 0.001507f, 0.000809f, 0.005454f, -0.009130f, 0.023536f, -0.009314f, -0.007417f, -0.001363f, 0.000209f, -0.009088f, -0.000116f, -0.006426f, 0.011225f, -0.003012f, -0.014312f, -0.019888f, -0.005241f, -0.013254f, 0.017963f, 0.001243f, 0.012694f, 0.010617f, -0.017400f, -0.001209f, 0.007039f, 0.004980f, 0.008964f, 0.001452f, -0.001294f, -0.001819f, 0.004106f, -0.005969f, 0.006387f, 0.003361f, -0.006327f, 0.003522f, 0.000091f, 0.004152f, 0.009681f, -0.005621f, 0.003730f, -0.000929f, 0.005447f, 0.004546f, -0.002216f, 0.006373f, -0.002093f, 0.005493f, -0.004648f, 0.004971f, -0.014148f, -0.006272f, -0.005301f, 0.003567f, 0.011844f, -0.009223f, -0.006072f, -0.003646f, 0.000510f, -0.004435f, -0.005574f, -0.003228f, 0.004644f, 0.003549f, 0.006728f, -0.002729f, 0.003719f, -0.004528f, -0.004594f, -0.000825f, -0.002876f, 0.004417f, -0.000349f, -0.007663f, 0.003803f, -0.004564f, -0.007466f, -0.002817f, -0.004728f, 0.003425f, -0.005108f, 0.003556f, 0.005755f, + -0.002888f, 0.008973f, -0.015236f, 0.006162f, -0.009294f, -0.010190f, 0.013826f, 0.004879f, -0.017327f, 0.001320f, -0.000363f, 0.004650f, -0.012607f, -0.008197f, -0.001536f, -0.010258f, -0.018404f, -0.017780f, -0.011938f, -0.017744f, 0.006952f, -0.002227f, 0.002134f, 0.008962f, -0.015712f, 0.009607f, -0.004807f, 0.004278f, 0.002576f, -0.001961f, 0.001048f, -0.002611f, -0.002721f, -0.010325f, -0.006484f, 0.012547f, -0.005333f, -0.011181f, -0.010482f, -0.001370f, -0.005034f, 0.003634f, -0.010074f, -0.015075f, 0.001632f, 0.013240f, -0.002710f, 0.007870f, -0.005375f, 0.004112f, -0.008011f, 0.005169f, 0.001565f, -0.010418f, 0.013999f, 0.002243f, -0.003890f, 0.003068f, 0.012725f, 0.012142f, 0.005684f, -0.001693f, -0.016090f, -0.002886f, -0.013661f, 0.003329f, -0.003940f, 0.001851f, 0.000849f, 0.003349f, -0.013039f, -0.000098f, -0.002871f, 0.005921f, 0.008341f, -0.017860f, -0.017162f, -0.011511f, -0.018799f, -0.022056f, -0.021104f, 0.007444f, 0.008187f, -0.013919f, -0.004500f, -0.012693f, -0.020130f, 0.009168f, -0.006095f, -0.017527f, 0.004562f, -0.002135f, -0.000278f, 0.000674f, 0.004482f, 0.000843f, + -0.001728f, 0.003264f, 0.004573f, -0.010478f, -0.010272f, -0.003434f, -0.012279f, -0.001758f, -0.013018f, -0.021485f, -0.002796f, 0.011471f, -0.016033f, -0.012340f, 0.006875f, -0.008782f, -0.000254f, 0.002225f, -0.008848f, -0.007104f, -0.007688f, -0.023035f, -0.010785f, 0.003833f, -0.007534f, -0.008242f, -0.015152f, 0.005314f, 0.011224f, -0.005406f, 0.017968f, -0.011528f, -0.006226f, -0.000995f, -0.005847f, -0.017127f, -0.002356f, 0.002797f, -0.001744f, -0.004344f, -0.015357f, -0.003280f, 0.012748f, 0.006052f, 0.002937f, 0.006212f, 0.004013f, -0.004753f, 0.025520f, -0.009571f, -0.011459f, -0.011244f, -0.012916f, 0.002920f, 0.014020f, 0.030357f, 0.020789f, -0.000396f, 0.019002f, -0.001005f, 0.003145f, 0.004130f, -0.009737f, 0.017518f, 0.000560f, 0.015551f, 0.014654f, -0.010913f, 0.018901f, 0.000962f, -0.013870f, -0.022670f, 0.021606f, 0.011067f, 0.021439f, -0.017022f, 0.012387f, 0.007373f, -0.019389f, -0.018535f, -0.011298f, -0.004671f, 0.020548f, -0.018615f, 0.017316f, -0.000804f, -0.001883f, 0.013305f, 0.011720f, 0.016869f, 0.005844f, -0.007785f, 0.007733f, 0.015961f, -0.009190f, 0.015984f, + 0.022663f, 0.010711f, 0.013659f, 0.006789f, 0.003690f, 0.004954f, 0.000325f, -0.011323f, 0.004284f, 0.002384f, 0.000564f, 0.011616f, -0.007787f, 0.007426f, 0.006549f, -0.001817f, 0.019416f, -0.010428f, -0.007631f, -0.003216f, 0.016603f, -0.001812f, 0.013558f, 0.008536f, 0.008904f, 0.010015f, 0.000926f, -0.022840f, -0.004548f, -0.017948f, -0.011363f, 0.026953f, 0.012501f, -0.009395f, -0.000945f, -0.026185f, 0.016600f, 0.015925f, 0.047091f, 0.001868f, 0.004124f, -0.002347f, -0.006397f, -0.003068f, 0.015975f, 0.014498f, 0.012703f, 0.018278f, 0.007491f, 0.028863f, 0.008530f, -0.011471f, 0.002843f, 0.025139f, 0.010026f, 0.002513f, 0.003999f, -0.012995f, -0.018533f, 0.011884f, -0.009158f, -0.018304f, -0.038540f, -0.000682f, 0.015466f, -0.001254f, 0.009162f, -0.013459f, -0.006984f, -0.005083f, 0.002986f, -0.004324f, -0.011483f, -0.005744f, -0.031014f, -0.008214f, -0.026311f, 0.002136f, -0.013827f, 0.010520f, -0.015063f, 0.005677f, -0.014483f, -0.005147f, -0.000847f, 0.000357f, 0.002310f, 0.002877f, -0.019241f, 0.009262f, -0.002877f, 0.004225f, -0.010071f, 0.000237f, 0.015380f, 0.006191f, + 0.021230f, 0.011939f, -0.006592f, -0.001206f, -0.004540f, -0.002073f, -0.005219f, -0.006618f, -0.000652f, 0.008964f, 0.005211f, 0.006796f, 0.003562f, -0.030114f, 0.019294f, 0.051560f, 0.019130f, -0.007615f, 0.025894f, -0.015592f, 0.018315f, 0.012480f, -0.023021f, 0.005956f, -0.029180f, 0.001482f, -0.009357f, -0.020269f, 0.012157f, 0.001260f, 0.009504f, 0.013280f, 0.016227f, 0.025572f, 0.011154f, -0.000863f, -0.005524f, -0.015912f, -0.029423f, 0.011646f, 0.012717f, 0.004200f, -0.009711f, 0.017279f, 0.002996f, 0.018211f, 0.011146f, -0.030648f, -0.011123f, 0.005194f, -0.022369f, 0.002147f, -0.000795f, -0.003455f, 0.007717f, 0.006102f, -0.004596f, 0.024266f, -0.012568f, 0.001917f, 0.013946f, -0.010469f, 0.009864f, -0.003988f, -0.013217f, 0.010508f, 0.000799f, -0.000767f, 0.014337f, 0.009956f, 0.001434f, -0.005863f, 0.028715f, 0.002371f, 0.016585f, 0.002734f, -0.007663f, -0.008431f, -0.022265f, -0.007756f, 0.010758f, 0.000671f, 0.009365f, -0.001288f, -0.017028f, 0.008667f, 0.007143f, -0.025075f, 0.008913f, 0.015346f, -0.005965f, -0.051852f, -0.016638f, 0.055871f, 0.016160f, 0.009583f, + -0.007393f, -0.000711f, -0.007549f, 0.011979f, -0.016867f, 0.024798f, 0.014728f, 0.011992f, 0.012574f, -0.007842f, 0.000163f, -0.000331f, 0.008760f, 0.016840f, -0.023339f, -0.013856f, -0.006727f, 0.019115f, 0.007775f, 0.010898f, 0.012229f, -0.002004f, -0.016348f, 0.006242f, 0.002522f, 0.034118f, 0.027651f, 0.007412f, 0.021310f, 0.001521f, -0.008455f, 0.004558f, -0.001515f, -0.004258f, 0.014253f, 0.016252f, 0.014442f, 0.032829f, 0.017086f, 0.013013f, 0.015698f, -0.014558f, -0.022736f, -0.011183f, 0.012514f, -0.020510f, -0.008659f, 0.020099f, 0.022970f, 0.011721f, -0.008003f, 0.018847f, -0.005708f, 0.001927f, 0.006356f, 0.010649f, -0.003626f, -0.012101f, 0.008829f, -0.011046f, -0.031114f, 0.000921f, 0.013248f, -0.018859f, 0.005151f, -0.004144f, -0.001469f, -0.004455f, -0.006761f, 0.025582f, 0.002849f, 0.012628f, 0.026218f, 0.041770f, -0.063768f, -0.009758f, 0.002774f, -0.001317f, -0.008533f, -0.016476f, 0.016173f, -0.020891f, -0.033021f, -0.004003f, 0.030121f, -0.005191f, -0.019365f, 0.005105f, -0.026675f, -0.014525f, -0.000162f, 0.015762f, -0.027965f, 0.002382f, 0.027963f, 0.029407f, + -0.000491f, 0.010092f, 0.024873f, -0.015448f, -0.024717f, -0.033128f, 0.001801f, -0.032983f, -0.008364f, 0.013363f, 0.011462f, -0.029143f, -0.028683f, -0.016801f, 0.010199f, -0.007872f, -0.006642f, -0.007728f, 0.024389f, -0.038718f, -0.012949f, 0.005975f, -0.022529f, -0.007149f, -0.001687f, -0.024256f, -0.000688f, 0.010215f, -0.003214f, 0.032229f, -0.004126f, -0.012547f, 0.000662f, -0.001106f, -0.012640f, 0.006778f, 0.013453f, -0.013733f, 0.020008f, -0.010065f, -0.044324f, 0.003213f, -0.019112f, -0.007375f, -0.004304f, -0.002486f, -0.058675f, -0.006667f, 0.020845f, 0.025333f, 0.009307f, 0.038329f, 0.022576f, -0.003330f, -0.059918f, 0.016999f, -0.011035f, 0.020728f, -0.019113f, 0.000061f, 0.031519f, -0.010228f, 0.044717f, 0.010575f, 0.008638f, -0.018873f, 0.008450f, 0.022483f, -0.013668f, -0.002407f, 0.028820f, 0.018995f, 0.021645f, 0.003476f, -0.033516f, 0.021651f, -0.021721f, -0.001579f, -0.013196f, 0.003758f, -0.016833f, 0.010123f, -0.004605f, 0.009892f, 0.008641f, 0.016467f, 0.015834f, 0.018480f, -0.021724f, 0.005608f, 0.033575f, 0.007794f, -0.006627f, -0.006290f, -0.017664f, -0.013241f, + -0.000704f, 0.001806f, 0.005430f, 0.029189f, 0.001704f, 0.016349f, 0.014473f, -0.000532f, -0.008219f, -0.006429f, 0.024981f, -0.029829f, -0.007710f, -0.026356f, -0.023343f, -0.005739f, -0.001143f, -0.044627f, 0.010256f, -0.013774f, 0.025998f, -0.005385f, -0.000566f, 0.019406f, 0.001964f, 0.046418f, 0.036065f, 0.055115f, 0.018474f, 0.002120f, -0.008950f, -0.006172f, -0.011641f, -0.016643f, 0.024728f, -0.005991f, -0.004162f, 0.056304f, -0.010376f, -0.011259f, 0.062636f, 0.000022f, 0.036129f, 0.026730f, 0.003184f, 0.015368f, -0.007119f, 0.012220f, 0.011865f, 0.007612f, 0.009882f, 0.029265f, -0.018376f, 0.035085f, -0.017610f, 0.000203f, 0.008334f, -0.003863f, -0.023519f, -0.021452f, 0.000724f, -0.035309f, -0.010094f, -0.038652f, -0.001245f, -0.022674f, -0.015987f, -0.012097f, -0.009678f, 0.006584f, -0.030051f, 0.037473f, 0.007463f, -0.023186f, -0.016073f, -0.000442f, -0.002793f, -0.005158f, 0.011425f, 0.005742f, 0.038159f, 0.004846f, 0.001688f, -0.017772f, 0.005255f, 0.008205f, 0.000976f, -0.018977f, -0.006066f, 0.023443f, 0.027376f, -0.000684f, -0.018199f, 0.009423f, -0.001098f, 0.033157f, + 0.039252f, -0.013076f, -0.005667f, -0.005567f, 0.008129f, -0.012572f, 0.019123f, -0.043259f, 0.001154f, 0.054747f, -0.041171f, -0.020914f, -0.002171f, -0.005958f, 0.004500f, -0.031516f, -0.016923f, -0.004346f, 0.025679f, 0.030739f, 0.021353f, -0.018455f, -0.048326f, 0.085642f, 0.022149f, -0.052684f, -0.052730f, -0.007381f, 0.013744f, 0.036818f, -0.045759f, -0.007608f, 0.009495f, -0.000076f, -0.005885f, 0.049283f, 0.011267f, -0.028022f, 0.016090f, 0.002563f, -0.000536f, 0.026176f, -0.003840f, 0.014533f, -0.030896f, -0.010251f, 0.056627f, 0.021089f, 0.044842f, 0.014346f, 0.040630f, 0.007399f, -0.013735f, 0.028386f, 0.026360f, 0.040346f, 0.020553f, -0.044725f, -0.016215f, 0.010115f, 0.024213f, -0.017785f, 0.007782f, -0.017149f, -0.028255f, 0.003232f, -0.002451f, -0.017195f, 0.014500f, 0.019128f, 0.017351f, 0.012187f, 0.012206f, -0.008430f, 0.031164f, -0.000097f, -0.028993f, -0.021663f, 0.028185f, 0.014812f, -0.046022f, 0.020561f, 0.009522f, 0.015218f, -0.039878f, -0.028034f, 0.027970f, 0.041103f, 0.025016f, -0.008328f, 0.021476f, 0.040850f, 0.016435f, 0.043085f, 0.008143f, 0.020459f, + 0.015404f, 0.071000f, 0.095931f, 0.008729f, 0.020033f, -0.059031f, -0.018160f, 0.037880f, -0.029768f, 0.073199f, -0.013323f, 0.012736f, 0.020282f, 0.043499f, 0.024237f, -0.008549f, -0.029588f, -0.034215f, -0.010934f, -0.004351f, -0.043962f, -0.019675f, -0.017031f, 0.030311f, -0.015908f, 0.010161f, -0.027998f, 0.005457f, -0.010605f, -0.040248f, 0.044202f, 0.031891f, 0.035673f, 0.017153f, -0.020810f, -0.018970f, -0.048245f, 0.002661f, -0.043480f, -0.011572f, -0.003314f, 0.007603f, 0.022877f, 0.019569f, -0.013956f, -0.008282f, 0.018894f, 0.043039f, 0.011242f, 0.017605f, 0.030160f, -0.036451f, 0.027150f, -0.019921f, -0.020209f, -0.036873f, -0.017170f, 0.019426f, 0.014577f, 0.004104f, 0.044648f, -0.008426f, -0.017597f, 0.008135f, 0.010652f, 0.062879f, -0.022155f, 0.024866f, 0.021832f, 0.058972f, -0.014532f, 0.008218f, -0.026997f, -0.008097f, -0.035834f, 0.027647f, -0.051362f, 0.001824f, -0.041423f, 0.007587f, 0.017204f, 0.005824f, -0.024921f, 0.083616f, -0.006259f, -0.011915f, 0.007312f, -0.048523f, 0.002429f, -0.033004f, 0.000802f, 0.008450f, -0.010007f, -0.001772f, 0.019536f, -0.018283f, + 0.000475f, 0.024768f, 0.001808f, 0.005713f, -0.041495f, 0.004494f, -0.003745f, -0.003350f, -0.010697f, -0.051951f, -0.028715f, 0.011813f, 0.003939f, 0.021858f, -0.059506f, 0.005585f, -0.055395f, 0.027067f, -0.037852f, -0.061109f, 0.030248f, 0.054531f, 0.009342f, 0.026309f, -0.041783f, 0.040146f, -0.010422f, 0.005106f, -0.025703f, 0.033214f, 0.013608f, 0.034503f, 0.010991f, 0.042072f, -0.039287f, 0.006334f, 0.002041f, -0.007864f, -0.031072f, -0.026464f, -0.029085f, 0.031944f, -0.008517f, 0.043870f, -0.027215f, -0.022461f, 0.006735f, 0.005215f, -0.020561f, 0.012217f, -0.099204f, 0.011233f, -0.032270f, 0.090178f, -0.017982f, -0.046806f, 0.017421f, -0.003478f, -0.046654f, -0.008683f, 0.006760f, -0.028421f, 0.067850f, 0.008909f, 0.005720f, 0.030333f, -0.039522f, -0.060334f, -0.037544f, 0.083009f, -0.007583f, -0.018702f, 0.054525f, 0.030384f, -0.027339f, -0.027164f, -0.015721f, 0.065609f, 0.008402f, -0.017129f, -0.026938f, -0.013469f, -0.052886f, 0.034128f, -0.007002f, 0.013280f, 0.032457f, -0.012748f, -0.054771f, -0.007527f, 0.068396f, -0.003922f, -0.018304f, 0.032486f, -0.016209f, 0.040536f, + 0.026210f, -0.004487f, -0.052317f, -0.027094f, -0.008099f, -0.048432f, -0.028936f, -0.028319f, 0.002605f, -0.007495f, 0.038922f, -0.028855f, -0.010835f, -0.001152f, 0.101796f, 0.034824f, -0.018974f, 0.019868f, 0.010857f, -0.007036f, 0.050962f, 0.024466f, -0.021219f, 0.007268f, 0.040755f, 0.046946f, -0.030894f, -0.021351f, -0.072107f, -0.055465f, -0.001824f, -0.007850f, -0.007673f, -0.108283f, 0.041079f, -0.020936f, 0.062086f, 0.062993f, -0.031900f, 0.031247f, -0.056542f, -0.086530f, 0.005193f, -0.060008f, 0.011305f, -0.005013f, 0.051705f, -0.033244f, 0.037807f, 0.032649f, 0.051924f, -0.071372f, 0.011293f, -0.042543f, -0.038417f, 0.007438f, -0.050485f, -0.031729f, 0.052151f, -0.011261f, 0.021936f, 0.060016f, -0.007837f, 0.021830f, -0.043424f, 0.008511f, -0.048165f, 0.051165f, -0.039224f, -0.025283f, -0.027894f, 0.056832f, 0.046806f, -0.027378f, 0.062683f, 0.042308f, -0.008290f, 0.061777f, 0.001012f, -0.057963f, -0.012621f, -0.003484f, -0.043440f, 0.014738f, -0.096825f, 0.014285f, -0.020876f, -0.044470f, -0.034164f, 0.049926f, -0.021635f, 0.098940f, 0.075777f, -0.100127f, 0.006245f, 0.002798f, + 0.011724f, 0.054746f, -0.075373f, -0.050822f, 0.064876f, -0.039523f, -0.050099f, -0.058661f, 0.015330f, 0.152723f, -0.011288f, -0.032959f, -0.031614f, 0.013474f, 0.052922f, -0.057569f, 0.029675f, -0.097100f, -0.014284f, -0.037337f, -0.032790f, 0.052514f, -0.066457f, -0.103416f, 0.061213f, 0.092541f, 0.022532f, -0.016874f, -0.082997f, 0.006599f, 0.032867f, 0.033600f, -0.013727f, -0.032336f, 0.004390f, -0.007131f, -0.010719f, 0.011788f, -0.012115f, -0.026718f, -0.054413f, 0.008233f, -0.032716f, 0.009534f, -0.029346f, -0.060716f, 0.038702f, 0.030025f, 0.047545f, 0.003359f, 0.051388f, 0.030601f, 0.007698f, -0.014739f, -0.026337f, -0.040756f, -0.030657f, -0.014996f, 0.012021f, 0.031946f, -0.019984f, -0.007055f, -0.071116f, 0.069383f, 0.078566f, 0.046974f, -0.040519f, 0.045500f, -0.055282f, 0.002901f, 0.012151f, -0.115819f, 0.009229f, 0.016654f, 0.056017f, -0.066255f, 0.091564f, 0.042519f, -0.067353f, -0.030219f, 0.026382f, -0.002684f, -0.050580f, -0.048244f, -0.067259f, -0.071721f, -0.009635f, -0.091601f, -0.012422f, 0.033070f, -0.043143f, -0.040192f, 0.037507f, 0.038047f, 0.007546f, -0.036320f, + -0.123906f, -0.018387f, 0.023958f, 0.014548f, 0.053398f, -0.001369f, 0.030940f, -0.008254f, -0.001029f, -0.015748f, 0.002064f, 0.032574f, 0.003525f, 0.001179f, 0.031548f, -0.008642f, -0.007944f, -0.041953f, -0.004134f, -0.006854f, -0.004967f, 0.007078f, 0.025087f, 0.034573f, -0.007108f, -0.000071f, 0.026895f, -0.006218f, -0.052733f, -0.003641f, -0.046862f, 0.006764f, 0.005995f, -0.060990f, 0.043880f, -0.084006f, 0.018440f, 0.023225f, -0.037269f, -0.002459f, 0.108573f, -0.030671f, 0.036333f, -0.022764f, 0.018971f, -0.081320f, 0.008248f, 0.048203f, -0.001900f, 0.041759f, -0.010301f, 0.004956f, -0.003471f, 0.053542f, -0.034872f, -0.039665f, 0.045599f, -0.041803f, -0.054821f, 0.001190f, -0.087155f, 0.059493f, 0.044498f, -0.013027f, 0.013946f, 0.015041f, -0.008372f, -0.047493f, -0.138937f, -0.066535f, -0.023696f, 0.042332f, 0.098351f, -0.094505f, 0.017850f, -0.028982f, -0.095290f, -0.015303f, 0.081257f, 0.020207f, 0.066534f, -0.060374f, 0.014984f, -0.022382f, 0.001773f, 0.038370f, 0.004586f, 0.019826f, -0.015439f, -0.120748f, 0.032857f, 0.003587f, -0.052581f, 0.049421f, 0.037157f, -0.038036f, + 0.034182f, 0.002167f, -0.040852f, 0.009629f, -0.026099f, 0.071925f, 0.006854f, 0.027831f, -0.000798f, -0.078225f, -0.063128f, -0.022696f, -0.047343f, 0.047323f, 0.068904f, 0.070940f, 0.056654f, -0.022514f, 0.006047f, -0.061910f, -0.011156f, -0.008156f, -0.027272f, -0.033633f, 0.002996f, 0.003640f, -0.084187f, -0.026186f, -0.034119f, -0.004383f, 0.034841f, -0.042539f, -0.011199f, 0.012089f, -0.001683f, 0.040165f, -0.048475f, -0.004027f, -0.054489f, -0.030020f, -0.040330f, 0.019464f, 0.013559f, 0.040012f, -0.005205f, -0.006908f, -0.046665f, -0.019222f, 0.037496f, -0.055585f, -0.224711f, -0.117745f, 0.026583f, 0.097106f, 0.215560f, 0.164744f, 0.094060f, 0.032536f, 0.050177f, -0.013665f, -0.087436f, -0.172136f, -0.228561f, -0.057029f, -0.064480f, 0.004800f, 0.115013f, 0.161708f, 0.110182f, 0.144942f, 0.035757f, 0.031576f, -0.014085f, -0.071704f, -0.079572f, -0.065664f, -0.067910f, -0.086658f, -0.067233f, -0.029227f, -0.001485f, -0.000390f, 0.059203f, 0.073386f, 0.142366f, 0.066259f, 0.024922f, 0.057532f, 0.092180f, 0.028592f, 0.020393f, -0.071518f, -0.094570f, -0.160316f, -0.070472f, -0.084211f, + -0.057132f, -0.036493f, -0.024605f, 0.011441f, 0.023700f, 0.066801f, 0.142106f, 0.110232f, 0.125377f, 0.088673f, 0.114262f, 0.080484f, -0.061704f, -0.062294f, -0.148234f, -0.120399f, -0.081919f, -0.197143f, -0.145716f, -0.095253f, 0.012192f, 0.113942f, 0.117291f, 0.127536f, 0.170682f, 0.134524f, 0.079862f, 0.079730f, -0.000739f, -0.060909f, -0.061511f, -0.035386f}, + {0.015743f, -0.001957f, 0.007460f, -0.002574f, -0.000238f, 0.014217f, -0.007542f, -0.000708f, 0.004007f, -0.001486f, 0.004724f, 0.005419f, -0.012324f, 0.004971f, 0.004639f, 0.002648f, -0.000595f, -0.004016f, 0.008438f, -0.010738f, -0.009087f, -0.001976f, 0.000234f, 0.004376f, -0.009224f, -0.006758f, -0.000981f, -0.005989f, 0.009856f, 0.000526f, -0.004195f, 0.007851f, -0.007178f, 0.000871f, -0.001608f, -0.004228f, -0.000654f, 0.006124f, 0.006216f, 0.003715f, 0.009627f, 0.007999f, -0.000726f, 0.002487f, -0.004048f, 0.010238f, 0.006362f, -0.004515f, 0.001049f, 0.001436f, 0.001012f, -0.006136f, 0.005412f, 0.001894f, -0.000956f, 0.010866f, -0.005802f, -0.006491f, -0.000898f, 0.003323f, 0.000678f, -0.001315f, -0.004057f, -0.002588f, 0.003371f, -0.002920f, -0.000720f, -0.002203f, 0.003531f, -0.001443f, 0.008130f, 0.004019f, -0.005395f, -0.003026f, 0.004578f, -0.005000f, -0.002789f, -0.004011f, -0.007812f, 0.004727f, 0.007487f, 0.013224f, 0.003633f, -0.009099f, -0.016294f, 0.003669f, -0.007568f, 0.000768f, 0.005226f, 0.002120f, 0.013336f, -0.010840f, -0.002623f, -0.001365f, -0.000794f, -0.009282f, + 0.005871f, 0.002589f, 0.001281f, 0.000391f, -0.004528f, -0.003395f, -0.003263f, -0.000929f, 0.000525f, 0.002366f, -0.003405f, 0.005203f, 0.011928f, -0.000221f, 0.005331f, -0.008252f, -0.004829f, -0.009903f, -0.004805f, 0.010872f, 0.000565f, -0.002003f, 0.001954f, 0.011534f, 0.001275f, 0.005900f, -0.001384f, -0.005126f, -0.001620f, 0.006685f, -0.005518f, 0.010382f, 0.006311f, 0.011688f, 0.005710f, 0.000963f, -0.003456f, -0.007355f, -0.004157f, -0.006350f, -0.000959f, -0.004550f, 0.001974f, 0.000713f, -0.002520f, 0.001988f, -0.002140f, 0.004433f, -0.000912f, -0.000768f, 0.005943f, -0.000176f, -0.000206f, 0.001229f, -0.005286f, 0.003074f, -0.022865f, -0.005181f, 0.009368f, 0.001643f, 0.012772f, 0.006820f, -0.010536f, 0.002779f, -0.000245f, 0.004195f, -0.003787f, -0.017542f, 0.010112f, 0.006221f, 0.011587f, 0.014528f, 0.012469f, 0.004400f, 0.000140f, -0.017859f, -0.001875f, 0.008239f, -0.008188f, -0.007043f, -0.018710f, -0.001218f, -0.003163f, -0.002119f, -0.004794f, 0.002259f, -0.011190f, 0.005136f, -0.002000f, 0.004776f, 0.001341f, -0.007430f, 0.005734f, 0.004898f, 0.012900f, -0.001429f, + -0.010429f, -0.005272f, 0.005559f, 0.002354f, -0.002655f, 0.000643f, 0.004073f, 0.000655f, -0.007643f, 0.000058f, 0.001532f, -0.000665f, 0.000414f, -0.004627f, -0.002166f, -0.006197f, -0.001382f, 0.008040f, 0.002733f, -0.002463f, 0.003279f, -0.000773f, -0.000477f, 0.001471f, -0.009175f, -0.000514f, -0.000522f, 0.005470f, 0.009790f, -0.002461f, -0.001053f, -0.005794f, -0.004969f, 0.003267f, 0.011195f, -0.008766f, -0.001593f, 0.000830f, -0.000767f, -0.002678f, 0.001924f, -0.002666f, 0.012610f, 0.004720f, 0.004239f, -0.004263f, 0.000299f, 0.001169f, 0.001177f, -0.021727f, -0.011774f, -0.000999f, -0.005435f, -0.006732f, -0.000367f, -0.005666f, -0.022124f, 0.013161f, 0.002998f, 0.005958f, -0.002354f, 0.004537f, -0.005868f, 0.000286f, 0.000769f, 0.011394f, -0.004071f, -0.002382f, -0.001924f, -0.001904f, -0.001839f, -0.000779f, 0.012321f, -0.002356f, -0.000196f, -0.006988f, -0.000402f, -0.003347f, 0.004006f, 0.002081f, -0.011951f, 0.009328f, -0.012091f, -0.000163f, 0.010621f, -0.001443f, 0.000416f, 0.000893f, -0.000219f, -0.007319f, -0.005233f, 0.012285f, 0.007088f, -0.014981f, -0.008012f, 0.002513f, + -0.008795f, -0.006297f, 0.006544f, -0.010719f, 0.002211f, 0.002784f, 0.006331f, 0.013133f, 0.010083f, 0.006243f, 0.004808f, -0.008695f, -0.009038f, -0.007793f, 0.002745f, 0.011258f, 0.004442f, 0.016665f, -0.003998f, -0.004164f, -0.004915f, 0.004764f, -0.005513f, 0.008205f, -0.015694f, -0.001919f, 0.011717f, 0.006217f, -0.011803f, 0.008871f, 0.014407f, 0.013689f, 0.008678f, 0.001787f, -0.000521f, -0.008739f, -0.011431f, 0.004998f, -0.001093f, 0.011623f, -0.000898f, 0.007021f, -0.007152f, -0.004587f, -0.003844f, 0.001316f, 0.003642f, -0.000459f, -0.013993f, 0.003150f, 0.004819f, 0.003729f, 0.005998f, 0.003922f, -0.007617f, -0.018437f, -0.006050f, 0.002987f, 0.003561f, 0.001146f, -0.000846f, 0.003826f, -0.007712f, 0.000174f, -0.013968f, 0.006822f, -0.014414f, -0.003447f, -0.006148f, -0.009086f, 0.006830f, 0.003434f, 0.002857f, -0.007835f, -0.004080f, -0.001982f, -0.008343f, 0.001264f, -0.000773f, 0.004944f, -0.003618f, -0.006395f, -0.005387f, -0.015896f, 0.005182f, 0.002618f, 0.007034f, 0.011264f, 0.013309f, 0.006143f, -0.005322f, -0.006763f, -0.003739f, 0.008480f, 0.008446f, 0.007813f, + -0.001177f, 0.005572f, -0.015892f, 0.002042f, -0.007511f, 0.000996f, 0.002540f, -0.009930f, 0.003833f, 0.029667f, 0.003380f, -0.002453f, -0.016458f, 0.023913f, 0.000105f, 0.010135f, 0.001341f, -0.000338f, -0.012749f, 0.012698f, 0.003384f, -0.006772f, 0.001808f, 0.001109f, -0.004984f, 0.005232f, 0.013392f, -0.003683f, 0.014233f, -0.003997f, 0.006194f, -0.000058f, 0.009455f, 0.008402f, 0.009422f, 0.000271f, -0.004833f, 0.007404f, -0.005097f, 0.006545f, -0.001613f, 0.006600f, 0.006461f, 0.006166f, -0.000552f, -0.001652f, 0.002635f, -0.005000f, -0.007262f, -0.018994f, 0.012804f, -0.012202f, 0.008956f, 0.001328f, 0.003949f, -0.002006f, -0.022578f, -0.004710f, -0.005839f, -0.010884f, 0.001891f, 0.007234f, -0.014291f, -0.004324f, 0.007105f, 0.001599f, 0.010941f, 0.018599f, 0.000142f, -0.004377f, -0.003554f, -0.018173f, 0.006847f, 0.004688f, -0.002271f, -0.008630f, -0.010373f, -0.001235f, 0.005188f, -0.003492f, -0.005141f, -0.007624f, 0.001895f, 0.013161f, 0.005756f, 0.001863f, -0.030747f, -0.014240f, -0.004509f, 0.005994f, -0.003899f, 0.010074f, 0.034536f, 0.010585f, -0.013035f, 0.001753f, + -0.015375f, -0.005129f, 0.010335f, -0.012261f, -0.003316f, 0.015302f, 0.003486f, -0.004100f, 0.001947f, 0.008571f, -0.005541f, 0.004057f, 0.004353f, 0.004365f, -0.008899f, 0.003763f, -0.004307f, -0.005109f, -0.013025f, -0.005130f, -0.007728f, -0.014362f, 0.005944f, 0.000355f, -0.001244f, 0.014229f, 0.010198f, 0.003577f, 0.011235f, -0.000013f, -0.014886f, 0.012230f, -0.001691f, -0.010029f, -0.008191f, -0.014517f, 0.000341f, 0.017510f, 0.000862f, -0.007622f, 0.007079f, -0.012893f, -0.008520f, 0.006921f, -0.010933f, -0.013758f, -0.007803f, -0.004061f, 0.007402f, -0.011897f, -0.004421f, -0.005088f, 0.015167f, 0.003273f, -0.006667f, 0.010157f, 0.007201f, -0.020212f, 0.018294f, -0.007492f, 0.001248f, -0.009056f, 0.015577f, -0.002677f, -0.011335f, -0.035699f, -0.005230f, 0.017956f, 0.004010f, -0.027889f, 0.012011f, -0.000362f, -0.006190f, -0.009157f, -0.007718f, -0.003032f, -0.016951f, -0.003058f, 0.012653f, 0.016961f, 0.019917f, 0.012194f, 0.018097f, -0.006371f, 0.014113f, 0.006880f, -0.029717f, -0.000887f, 0.006922f, 0.010149f, 0.004376f, -0.010184f, -0.000105f, -0.002226f, 0.009574f, -0.017538f, + -0.006975f, 0.012882f, -0.005002f, 0.007240f, 0.003085f, -0.011627f, -0.013660f, -0.006640f, -0.020111f, -0.005443f, -0.006744f, 0.008036f, 0.002045f, -0.011034f, -0.003434f, -0.023680f, -0.006920f, 0.010002f, -0.007921f, -0.023279f, -0.001346f, 0.013786f, -0.029683f, 0.008765f, 0.003626f, 0.009646f, -0.014818f, -0.005671f, -0.014297f, 0.001734f, -0.005502f, -0.013801f, -0.005864f, -0.001644f, 0.005974f, -0.021036f, 0.005765f, 0.018484f, 0.023493f, 0.017809f, 0.018068f, 0.007615f, -0.011134f, 0.013051f, 0.021719f, -0.029959f, 0.016311f, 0.016556f, -0.032409f, -0.007651f, 0.008896f, 0.036851f, -0.002063f, -0.001172f, -0.007815f, -0.008893f, 0.044950f, 0.023103f, 0.006829f, 0.006724f, 0.023611f, 0.000799f, -0.002857f, -0.007331f, 0.004049f, -0.018623f, -0.017374f, -0.002783f, 0.006144f, 0.014677f, 0.006605f, 0.004421f, -0.006243f, 0.002730f, -0.014096f, 0.007569f, -0.021163f, 0.022760f, -0.001898f, -0.008986f, -0.011998f, -0.012567f, -0.021421f, 0.005483f, -0.020746f, -0.005342f, 0.014904f, -0.001530f, -0.006889f, -0.005041f, -0.003059f, -0.016083f, -0.012275f, -0.006049f, -0.007448f, -0.001919f, + 0.006878f, 0.006046f, 0.001285f, 0.003433f, -0.015853f, 0.030146f, 0.015898f, 0.003181f, -0.002016f, 0.039194f, -0.004441f, -0.003055f, -0.009076f, -0.014974f, -0.005384f, 0.040562f, 0.013718f, 0.008399f, 0.019592f, -0.022580f, -0.013637f, 0.012529f, 0.013408f, 0.030011f, 0.004203f, 0.008173f, -0.020550f, -0.001445f, 0.009896f, -0.027008f, -0.008775f, 0.010440f, -0.009082f, 0.000054f, 0.007168f, 0.019475f, -0.006852f, 0.007419f, 0.003906f, 0.004028f, 0.016743f, 0.014367f, 0.017856f, -0.014518f, -0.009609f, 0.019126f, -0.024865f, -0.008600f, -0.008334f, -0.002062f, -0.006828f, -0.016229f, 0.015249f, -0.000993f, -0.017192f, 0.000346f, -0.006859f, -0.018256f, -0.022281f, -0.012822f, -0.013416f, 0.025641f, -0.008482f, -0.007213f, -0.015656f, -0.001866f, -0.008051f, 0.003440f, 0.030696f, -0.006423f, -0.010269f, 0.004579f, -0.002019f, 0.017092f, -0.020868f, 0.034216f, 0.006786f, -0.034454f, -0.024716f, 0.008013f, -0.022940f, -0.000556f, -0.024587f, -0.000898f, 0.004789f, -0.004216f, 0.025718f, 0.031585f, -0.016215f, 0.002541f, -0.007275f, -0.033476f, 0.015766f, 0.076169f, -0.010533f, 0.001424f, + -0.030100f, -0.011331f, 0.024205f, -0.000907f, 0.044642f, 0.027756f, 0.025783f, 0.002469f, 0.020416f, -0.032371f, 0.033829f, 0.018688f, 0.003770f, 0.006470f, -0.017831f, 0.011099f, 0.001989f, 0.034550f, 0.020245f, 0.023833f, -0.005493f, 0.004504f, 0.007912f, -0.019176f, -0.015111f, -0.005482f, 0.012215f, 0.040017f, -0.008049f, -0.010154f, -0.010405f, -0.004602f, 0.007272f, -0.021281f, -0.004513f, 0.001043f, -0.010333f, -0.022598f, -0.002871f, -0.029336f, -0.009153f, 0.021621f, -0.019750f, -0.006916f, -0.001817f, 0.004682f, -0.033493f, -0.018815f, -0.002038f, -0.000734f, -0.004163f, 0.025909f, 0.012818f, 0.004748f, 0.016622f, 0.026809f, -0.011465f, -0.002500f, -0.016608f, 0.012600f, -0.012267f, 0.017000f, 0.018546f, 0.022208f, 0.036703f, 0.013604f, -0.021024f, 0.000397f, 0.059779f, 0.022703f, 0.036276f, 0.019162f, 0.037599f, 0.041300f, -0.042744f, 0.009901f, 0.030330f, 0.018300f, -0.012421f, -0.022792f, -0.020119f, 0.043234f, 0.002818f, 0.016117f, 0.022037f, -0.013229f, 0.005593f, 0.009379f, -0.027553f, -0.028460f, 0.022061f, 0.007729f, -0.042247f, -0.009572f, 0.052528f, 0.025689f, + -0.001238f, -0.030547f, 0.008837f, 0.008117f, 0.031333f, 0.010893f, -0.017223f, 0.021498f, 0.002373f, -0.008767f, -0.004578f, -0.006192f, -0.026988f, -0.011712f, 0.002247f, 0.004750f, -0.032093f, -0.032346f, -0.021231f, -0.008930f, -0.037993f, 0.021953f, -0.004318f, -0.025009f, 0.002690f, 0.001270f, -0.013439f, -0.002370f, 0.005252f, 0.000602f, 0.005487f, 0.010344f, 0.011671f, -0.013273f, -0.019988f, 0.023423f, 0.041977f, 0.021701f, 0.008739f, 0.034355f, -0.010199f, 0.019452f, 0.039599f, 0.028529f, -0.000857f, 0.006697f, -0.019521f, -0.024968f, 0.019400f, -0.023445f, 0.003090f, -0.007819f, -0.003531f, -0.008661f, -0.039615f, 0.011045f, -0.019130f, -0.008852f, -0.014800f, -0.002542f, 0.033802f, 0.033483f, -0.067909f, 0.020939f, 0.021475f, -0.021131f, -0.034575f, -0.045056f, 0.007884f, -0.013272f, 0.008278f, -0.015756f, -0.012409f, -0.007352f, 0.041950f, 0.010595f, -0.003704f, -0.000761f, -0.006734f, -0.012588f, 0.010584f, 0.006958f, -0.000231f, 0.016826f, 0.003633f, -0.003570f, 0.005979f, 0.015284f, 0.043329f, 0.004359f, 0.005326f, -0.021410f, -0.009173f, -0.010120f, -0.010780f, -0.001280f, + -0.003596f, 0.014404f, 0.020761f, 0.001046f, 0.023992f, -0.005486f, -0.004003f, -0.004809f, -0.002607f, -0.041891f, 0.047466f, 0.001376f, 0.003456f, -0.003298f, -0.012198f, 0.012809f, -0.003102f, 0.019523f, 0.001268f, -0.018045f, 0.005196f, 0.020836f, -0.014245f, 0.019497f, 0.004937f, -0.028263f, -0.004523f, -0.005257f, -0.052126f, -0.016711f, 0.014348f, 0.015463f, -0.019840f, -0.013011f, 0.032479f, 0.007913f, 0.008551f, -0.027348f, 0.016761f, -0.012149f, 0.015848f, -0.016141f, 0.021035f, -0.023119f, -0.019429f, 0.029921f, 0.001747f, 0.006190f, -0.021259f, -0.044464f, -0.006362f, 0.010476f, 0.000976f, 0.016305f, -0.017545f, 0.000435f, -0.002609f, -0.033653f, -0.025321f, 0.008605f, -0.038332f, -0.025381f, 0.008904f, -0.001731f, -0.040060f, -0.007234f, -0.021306f, 0.022025f, 0.011644f, 0.002455f, -0.011487f, -0.025328f, -0.052709f, 0.015757f, -0.025236f, 0.025477f, -0.011203f, -0.010956f, -0.007673f, -0.015063f, 0.004452f, 0.005335f, -0.043133f, -0.019417f, 0.035898f, 0.032530f, -0.038964f, 0.044278f, -0.001267f, 0.032133f, -0.011957f, -0.009941f, -0.008306f, -0.015185f, 0.013366f, -0.014987f, + -0.041766f, -0.021548f, 0.039303f, -0.011684f, -0.014249f, -0.004246f, 0.007749f, 0.007017f, 0.015572f, -0.052508f, 0.006983f, 0.033024f, 0.016964f, 0.023950f, 0.018585f, -0.017876f, -0.030625f, -0.025579f, -0.015088f, -0.029639f, -0.001655f, 0.014328f, 0.032721f, -0.005423f, -0.001601f, -0.054520f, 0.032764f, 0.041183f, -0.006558f, -0.021878f, -0.022677f, -0.013611f, 0.061410f, -0.037046f, -0.000261f, -0.003963f, 0.016463f, -0.002256f, 0.070719f, 0.002273f, -0.038743f, -0.009564f, -0.036838f, 0.048486f, 0.041416f, -0.032888f, 0.038942f, 0.010548f, 0.031306f, 0.012586f, -0.059369f, 0.019420f, 0.031453f, -0.040057f, -0.011572f, -0.045509f, -0.023434f, 0.002678f, -0.043024f, -0.035409f, -0.001213f, -0.028388f, -0.000565f, 0.011731f, -0.010725f, -0.027960f, 0.024035f, 0.023391f, -0.048406f, -0.035327f, 0.020239f, 0.010304f, 0.013091f, 0.026445f, 0.032232f, -0.009697f, -0.017072f, 0.001293f, -0.010787f, 0.001911f, -0.002878f, -0.013415f, 0.007485f, -0.063962f, 0.024426f, 0.036365f, -0.032223f, -0.023998f, 0.025943f, -0.015011f, 0.017496f, 0.039743f, 0.072633f, 0.113148f, 0.005773f, -0.042458f, + -0.055195f, -0.011235f, 0.004769f, -0.011500f, 0.056308f, 0.042575f, 0.030434f, 0.048963f, 0.036583f, 0.029681f, 0.004424f, 0.024306f, -0.026212f, 0.042616f, 0.049470f, 0.005251f, 0.051387f, -0.018035f, 0.006671f, 0.013311f, -0.042772f, -0.028599f, -0.008054f, -0.025110f, -0.029116f, -0.002824f, 0.052880f, 0.001182f, -0.006846f, 0.008062f, 0.013559f, -0.005012f, -0.065033f, -0.007574f, 0.020691f, -0.008338f, -0.017849f, 0.010016f, 0.029272f, 0.048214f, 0.014551f, 0.025294f, 0.036099f, 0.042118f, -0.053011f, -0.037555f, 0.025285f, -0.015005f, 0.074698f, -0.006174f, 0.064751f, -0.048376f, 0.032704f, 0.051136f, 0.005387f, 0.009115f, 0.033624f, -0.053303f, -0.021468f, 0.002158f, 0.034778f, 0.001488f, 0.039623f, 0.014921f, 0.017620f, 0.036646f, 0.017617f, -0.004488f, -0.010413f, 0.078670f, 0.025738f, 0.027109f, 0.057243f, -0.005075f, 0.011661f, 0.024335f, 0.036624f, -0.042295f, -0.033724f, -0.015074f, -0.036902f, -0.007400f, -0.049373f, 0.024084f, 0.038620f, 0.027402f, 0.038385f, -0.027305f, -0.014868f, 0.028735f, 0.022951f, -0.017670f, 0.039029f, 0.022281f, -0.009315f, -0.049529f, + 0.026493f, 0.027778f, -0.024680f, -0.005218f, 0.013853f, 0.005282f, -0.038958f, 0.042975f, 0.011807f, 0.046180f, 0.026080f, 0.016910f, -0.026171f, 0.020405f, -0.013929f, 0.071072f, -0.057693f, 0.004142f, 0.022036f, -0.013218f, -0.037246f, 0.021375f, 0.023270f, -0.007057f, 0.022894f, -0.024902f, 0.059616f, -0.030363f, 0.015677f, 0.010134f, -0.037941f, -0.019399f, -0.052396f, 0.019140f, 0.015171f, -0.042137f, 0.036117f, 0.027699f, -0.027203f, 0.018791f, -0.003288f, 0.056930f, 0.019240f, -0.033914f, -0.022939f, -0.025236f, 0.017995f, -0.015740f, 0.014637f, -0.008442f, -0.068380f, 0.033397f, -0.058026f, 0.064164f, 0.076699f, -0.001978f, 0.015109f, -0.058716f, 0.001509f, -0.011570f, 0.008272f, 0.037273f, 0.038216f, -0.008721f, 0.020832f, 0.031321f, 0.006760f, 0.014300f, 0.010586f, 0.014143f, -0.005558f, 0.044760f, -0.003837f, 0.011709f, -0.021716f, 0.050132f, 0.012585f, -0.002509f, 0.000589f, 0.045333f, 0.018781f, 0.022477f, 0.050096f, -0.008638f, -0.027370f, 0.060850f, -0.060251f, -0.024930f, -0.008571f, 0.015937f, 0.043666f, 0.011719f, -0.014681f, -0.015365f, -0.027835f, 0.001503f, + -0.003124f, 0.014169f, 0.068755f, 0.066640f, 0.043436f, 0.060356f, -0.002771f, 0.089792f, -0.026660f, 0.026685f, -0.018094f, 0.004386f, 0.030357f, -0.011132f, 0.006187f, -0.023880f, -0.030796f, 0.003056f, -0.017971f, 0.020472f, -0.025312f, 0.045950f, -0.028448f, -0.049511f, -0.016933f, -0.010257f, 0.001119f, 0.066801f, -0.030039f, -0.003858f, 0.020069f, 0.017073f, -0.002732f, -0.027698f, 0.105930f, 0.148639f, 0.043224f, 0.115319f, -0.029135f, -0.084752f, -0.060906f, -0.042818f, 0.016455f, 0.019164f, -0.030920f, -0.046582f, 0.034563f, 0.048951f, 0.026278f, 0.048882f, 0.035695f, 0.007427f, 0.011776f, 0.005456f, -0.006638f, -0.035978f, 0.010699f, -0.042175f, 0.023858f, -0.001906f, -0.041855f, 0.041246f, 0.021655f, 0.018657f, 0.070187f, 0.043983f, -0.026360f, -0.016492f, -0.032008f, -0.033966f, -0.044356f, -0.017425f, -0.003852f, -0.032917f, -0.015204f, 0.062777f, 0.092360f, 0.070390f, 0.003868f, 0.047439f, 0.046369f, 0.078574f, 0.030317f, -0.044565f, -0.076860f, -0.045596f, -0.051835f, 0.024508f, 0.014710f, -0.097699f, -0.073557f, -0.018908f, 0.032025f, 0.085062f, -0.074097f, -0.004723f, + -0.066070f, -0.009615f, 0.061083f, -0.041630f, 0.015858f, -0.059562f, -0.021311f, -0.020144f, 0.034608f, -0.057310f, -0.005266f, -0.011518f, -0.043972f, -0.084447f, 0.009139f, 0.045185f, -0.039561f, 0.070632f, -0.029629f, 0.027319f, -0.010505f, -0.084298f, -0.043420f, -0.005334f, -0.049705f, -0.113418f, -0.032259f, 0.039063f, 0.061402f, -0.031762f, -0.048725f, -0.101457f, -0.030427f, 0.028040f, -0.020530f, -0.030506f, -0.050290f, 0.010238f, -0.011764f, -0.010027f, -0.009812f, 0.018563f, 0.039761f, -0.032953f, 0.030713f, 0.024733f, -0.031858f, -0.093077f, 0.007274f, 0.005539f, 0.023466f, 0.009098f, 0.059719f, 0.004051f, -0.090643f, -0.001455f, -0.099721f, -0.002600f, 0.035027f, 0.039607f, -0.007280f, 0.003205f, 0.047061f, -0.026748f, -0.016906f, -0.033896f, 0.031043f, 0.019121f, -0.013191f, 0.032894f, -0.009724f, 0.011925f, 0.018439f, 0.055230f, 0.009933f, -0.024576f, -0.060245f, -0.025777f, 0.035696f, 0.023656f, 0.053718f, 0.067436f, 0.130685f, 0.056713f, 0.036948f, -0.039008f, 0.006861f, -0.081306f, -0.024628f, 0.056660f, -0.027692f, -0.023361f, -0.005808f, -0.018267f, -0.064995f, -0.072586f, + -0.105840f, -0.033566f, 0.000545f, -0.008298f, 0.069858f, 0.019013f, 0.091171f, 0.055861f, 0.028571f, -0.012822f, -0.033018f, -0.006417f, 0.127824f, 0.007721f, 0.037293f, 0.020477f, -0.015312f, 0.063197f, -0.025736f, 0.050957f, -0.055111f, -0.005790f, -0.039436f, 0.047923f, -0.066954f, -0.014545f, 0.021714f, 0.021114f, 0.022831f, -0.059565f, 0.043337f, -0.068138f, 0.015011f, -0.033511f, -0.021460f, 0.067305f, 0.005417f, 0.004203f, 0.024789f, -0.025865f, 0.000155f, 0.017449f, -0.080574f, 0.002039f, 0.020975f, -0.012141f, 0.055233f, -0.023871f, -0.008002f, 0.089195f, -0.031177f, -0.074307f, 0.003150f, -0.028019f, 0.009367f, -0.005508f, -0.000038f, -0.059402f, 0.036442f, -0.009351f, -0.075733f, 0.049525f, -0.093497f, 0.020580f, -0.012734f, -0.037252f, -0.043856f, -0.037166f, -0.126253f, -0.129623f, -0.111031f, -0.056833f, 0.223366f, 0.068757f, -0.030240f, -0.031210f, -0.113669f, -0.237990f, -0.028803f, 0.061679f, 0.076975f, 0.032273f, -0.038618f, -0.028934f, -0.071935f, -0.078368f, 0.055289f, -0.056899f, 0.139740f, 0.104936f, -0.168242f, 0.052010f, 0.019274f, -0.036319f, 0.010337f, 0.117500f, + 0.014448f, 0.080636f, 0.160304f, -0.036914f, -0.136478f, 0.004897f, -0.025543f, -0.126013f, -0.036779f, 0.059001f, -0.008308f, 0.072993f, 0.116930f, 0.009622f, -0.106770f, -0.204317f, -0.177549f, -0.156940f, -0.019426f, 0.150448f, 0.040025f, 0.039706f, 0.019592f, -0.041616f, -0.207025f, -0.127874f, -0.068575f, -0.025033f, 0.009135f, 0.046078f, 0.041290f, 0.057723f, 0.055357f, 0.073736f, -0.091475f, -0.030825f, -0.075680f, -0.004958f, -0.082532f, 0.050507f, 0.044921f, 0.102337f, 0.107378f, 0.056101f, -0.001685f, -0.025295f, -0.021761f, -0.128311f, 0.029311f, -0.030022f, -0.240143f, -0.267502f, -0.185992f, -0.191341f, -0.060819f, 0.184751f, 0.120540f, 0.200369f, 0.225623f, 0.348666f, 0.227829f, 0.235143f, 0.147871f, -0.026688f, -0.192290f, -0.324505f, -0.379097f, -0.332426f, -0.263491f, -0.196013f, -0.056466f, -0.023869f, -0.038653f, -0.005490f, 0.066579f, 0.115103f, 0.168065f, 0.141835f, 0.201614f, 0.191409f, 0.254844f, 0.228919f, 0.056997f, 0.148716f, -0.046782f, 0.029786f, 0.021985f, -0.005747f, -0.033361f, -0.252655f, -0.295662f, -0.379724f, -0.437834f, -0.403966f, -0.225809f, -0.207119f, + -0.167213f, -0.212929f, -0.237735f, -0.063948f, 0.048090f, 0.129139f, 0.203594f, 0.290614f, 0.358266f, 0.453750f, 0.612432f, 0.585828f, 0.451692f, 0.356159f, 0.305522f, 0.150023f, 0.258568f, -0.116313f, -0.207195f, -0.514013f, -0.569319f, -0.724973f, -0.674765f, -0.633527f, -0.571699f, -0.571859f, -0.307912f, -0.194162f, -0.005457f, 0.402584f, 0.315610f, 0.209594f} + }, + { + {-0.012901f, 0.021523f, -0.005750f, 0.003586f, -0.006979f, 0.002754f, -0.015214f, 0.000844f, -0.004535f, 0.005489f, -0.008256f, -0.005958f, -0.001589f, 0.005589f, -0.001142f, -0.000926f, -0.003156f, -0.004308f, -0.010181f, -0.002142f, -0.008497f, -0.004551f, -0.007192f, 0.003227f, -0.001518f, 0.000560f, 0.003628f, 0.002154f, -0.005012f, 0.002316f, -0.001760f, -0.000417f, -0.001872f, -0.001597f, -0.004479f, 0.000328f, -0.008156f, 0.010269f, -0.003097f, -0.002449f, -0.001584f, 0.000650f, -0.000069f, 0.001221f, -0.009504f, 0.000705f, 0.004120f, 0.000328f, 0.001784f, -0.000208f, 0.002152f, 0.007758f, -0.002440f, 0.004782f, 0.005578f, -0.008173f, -0.002568f, -0.001945f, 0.007663f, -0.001435f, 0.002354f, 0.008740f, 0.000059f, -0.002416f, 0.001889f, 0.002565f, 0.002551f, 0.000748f, 0.004485f, 0.000056f, -0.001367f, 0.003680f, -0.003779f, 0.001174f, -0.000202f, -0.006743f, 0.025308f, 0.003267f, -0.010547f, 0.004187f, -0.006513f, 0.002247f, -0.004094f, -0.002424f, -0.005617f, 0.004711f, 0.007815f, 0.002574f, 0.002727f, -0.013148f, 0.003093f, 0.000673f, 0.004651f, 0.005618f, 0.003269f, 0.008239f, + -0.001222f, -0.003925f, 0.001248f, 0.009764f, 0.000481f, -0.006701f, -0.000297f, 0.008381f, 0.004734f, 0.001301f, 0.000497f, 0.002682f, 0.000216f, 0.001057f, 0.001953f, 0.000200f, -0.002420f, 0.000120f, 0.000481f, 0.003576f, -0.004241f, -0.010472f, 0.008473f, 0.008524f, 0.007444f, 0.007066f, 0.000054f, 0.004072f, 0.006689f, -0.006155f, -0.001111f, 0.000307f, -0.008449f, 0.002479f, 0.001011f, 0.008478f, 0.001179f, 0.004975f, 0.000471f, 0.010548f, 0.005418f, -0.000956f, 0.007353f, 0.004792f, -0.002019f, -0.007668f, 0.002291f, 0.002686f, -0.001967f, 0.001172f, -0.004504f, -0.000652f, 0.004305f, 0.003490f, 0.003574f, 0.008772f, 0.021260f, -0.013926f, 0.004916f, 0.012053f, 0.002931f, 0.008554f, 0.010284f, -0.009019f, 0.002079f, -0.000642f, 0.004083f, -0.011472f, -0.009136f, -0.001514f, 0.009212f, 0.012531f, -0.004592f, -0.003846f, 0.006024f, -0.009755f, -0.013247f, -0.002220f, -0.015602f, 0.005639f, 0.005328f, 0.001689f, -0.009655f, -0.009662f, 0.003641f, -0.005500f, 0.001451f, 0.000000f, 0.010465f, 0.011240f, 0.009982f, -0.001290f, 0.007028f, -0.010494f, 0.004818f, -0.006042f, + -0.000475f, 0.000924f, 0.008567f, -0.008762f, -0.007986f, 0.000438f, 0.011244f, 0.004974f, 0.004477f, -0.006328f, 0.003910f, 0.003177f, -0.003122f, -0.013458f, -0.002082f, -0.004259f, -0.005916f, -0.005024f, 0.006585f, -0.005354f, -0.001649f, 0.001962f, 0.004235f, 0.010515f, -0.003500f, 0.000323f, -0.007141f, -0.003066f, 0.002030f, -0.009826f, -0.000060f, 0.003466f, 0.007899f, -0.001652f, -0.004332f, -0.002178f, -0.008819f, -0.008105f, -0.014156f, -0.004020f, 0.001659f, -0.004815f, -0.007499f, -0.004435f, -0.014125f, -0.008223f, 0.013542f, -0.001216f, -0.006987f, 0.006897f, -0.012079f, -0.003251f, -0.014901f, -0.003593f, -0.011896f, -0.006492f, 0.012448f, 0.000055f, -0.003391f, -0.015476f, -0.009977f, -0.003981f, -0.007087f, 0.001881f, -0.008637f, 0.000145f, 0.004173f, 0.015108f, 0.006967f, 0.005276f, 0.006053f, 0.012113f, -0.011473f, -0.000748f, -0.003988f, -0.008873f, 0.002613f, -0.002308f, -0.004019f, -0.009256f, 0.003685f, 0.008461f, 0.000118f, -0.007213f, -0.005077f, 0.022623f, -0.000770f, -0.007296f, -0.010192f, -0.014554f, -0.019486f, -0.002936f, -0.010571f, 0.001610f, -0.002859f, 0.004565f, + -0.000043f, 0.001882f, -0.009585f, 0.000641f, 0.000294f, 0.010600f, 0.002637f, -0.009074f, -0.000769f, -0.003306f, -0.003841f, -0.002739f, 0.002538f, 0.005219f, 0.004214f, -0.006472f, -0.032166f, 0.013156f, -0.005490f, 0.005726f, -0.013112f, -0.005126f, -0.010185f, -0.009346f, 0.001001f, -0.002760f, -0.006237f, 0.016807f, 0.004655f, -0.001278f, -0.009658f, -0.002924f, 0.005041f, -0.011251f, -0.005688f, -0.010710f, -0.005683f, 0.016042f, 0.001961f, 0.010766f, -0.000577f, 0.000110f, -0.002212f, 0.003199f, 0.003379f, -0.008184f, 0.000574f, 0.002713f, 0.005212f, 0.017354f, -0.008475f, -0.010209f, -0.001547f, 0.019167f, 0.006497f, 0.020383f, 0.002326f, 0.002040f, -0.003016f, 0.010156f, -0.001163f, 0.014888f, -0.000909f, -0.001537f, -0.002042f, -0.005945f, 0.006874f, 0.002078f, -0.004612f, 0.004460f, 0.006198f, 0.010405f, -0.005230f, -0.000319f, -0.001140f, 0.009307f, -0.003007f, -0.001311f, -0.002698f, -0.002087f, 0.002932f, -0.002715f, 0.001810f, 0.001832f, -0.001466f, 0.002584f, -0.014326f, 0.001825f, 0.010494f, 0.003878f, 0.013694f, 0.001583f, 0.001656f, 0.004107f, -0.007277f, -0.003754f, + -0.000476f, -0.016375f, -0.003013f, -0.000167f, -0.008323f, -0.028729f, -0.007223f, -0.006440f, -0.012717f, -0.002725f, -0.003520f, 0.017487f, -0.006510f, 0.013154f, 0.005965f, 0.009408f, -0.018608f, -0.008503f, -0.018800f, -0.017442f, -0.000354f, 0.002942f, 0.010402f, -0.005461f, -0.008410f, -0.005238f, -0.012825f, 0.002401f, 0.005343f, 0.006271f, 0.003688f, -0.004044f, 0.004316f, -0.008583f, 0.000563f, -0.015273f, 0.005093f, -0.004115f, 0.001726f, 0.003080f, 0.005286f, 0.005766f, -0.006067f, 0.000010f, 0.014233f, -0.008010f, 0.006739f, 0.007204f, -0.000794f, 0.004243f, 0.006857f, -0.003137f, 0.002525f, 0.006883f, 0.000101f, 0.012279f, -0.006789f, -0.008763f, -0.004426f, 0.003928f, -0.000275f, -0.016668f, -0.008608f, -0.018442f, -0.020131f, -0.003506f, 0.005254f, -0.016352f, 0.007167f, -0.002728f, -0.000271f, -0.005646f, 0.005640f, -0.009731f, -0.000977f, 0.008842f, -0.026790f, -0.001592f, 0.007858f, 0.004882f, -0.014409f, -0.001999f, -0.009318f, 0.002022f, 0.002283f, 0.001658f, -0.015745f, -0.020770f, -0.014418f, 0.002171f, -0.011626f, 0.012023f, 0.003418f, -0.019964f, 0.013808f, 0.012333f, + 0.009420f, 0.008702f, -0.010321f, 0.015940f, 0.003734f, -0.000258f, -0.006796f, 0.005319f, 0.009097f, -0.008940f, -0.013543f, 0.004719f, -0.005477f, -0.016149f, -0.002745f, -0.015567f, -0.006274f, 0.028087f, -0.008132f, -0.012637f, -0.016320f, 0.000895f, 0.001891f, 0.011228f, 0.003765f, -0.010226f, 0.008656f, -0.001103f, -0.008820f, -0.010583f, -0.012122f, 0.017470f, 0.006974f, 0.011096f, -0.009050f, -0.011081f, 0.004278f, 0.003052f, -0.012471f, -0.000301f, -0.007997f, 0.011528f, -0.003047f, 0.001374f, -0.014640f, 0.009199f, 0.006441f, -0.007337f, -0.005914f, -0.004318f, 0.014741f, 0.000766f, 0.001673f, -0.003914f, 0.010659f, -0.010545f, -0.013674f, -0.000105f, 0.004028f, -0.003054f, -0.010816f, -0.016339f, -0.012955f, 0.014072f, 0.002120f, 0.017132f, 0.020423f, 0.019776f, 0.003475f, 0.026961f, 0.006913f, -0.002487f, 0.012813f, 0.009803f, 0.025048f, 0.003969f, 0.014646f, -0.018894f, 0.032378f, 0.023820f, 0.011886f, -0.009247f, -0.007080f, 0.011889f, 0.003233f, 0.008629f, -0.004148f, 0.014090f, -0.003514f, -0.003201f, 0.012922f, 0.010369f, -0.011979f, 0.008791f, -0.002780f, 0.013674f, + 0.015092f, -0.028170f, -0.004674f, 0.017834f, 0.005864f, 0.009821f, 0.008090f, 0.017620f, -0.007841f, 0.007191f, 0.000869f, -0.014437f, -0.006606f, -0.000236f, 0.003562f, -0.021350f, -0.001332f, 0.013686f, -0.010277f, 0.022865f, 0.017516f, -0.006884f, 0.000168f, 0.004321f, 0.008858f, 0.013190f, -0.004952f, -0.004528f, 0.021651f, -0.005458f, -0.000582f, 0.008837f, -0.000049f, 0.011738f, 0.008839f, 0.002583f, 0.003291f, 0.056929f, -0.027295f, 0.005632f, 0.024463f, -0.000610f, 0.002499f, 0.031755f, 0.034792f, 0.005482f, -0.000802f, 0.008501f, 0.000155f, 0.009004f, 0.011279f, -0.010587f, -0.001912f, 0.021037f, 0.019077f, -0.006579f, -0.013881f, -0.015351f, -0.015579f, -0.007969f, 0.016418f, -0.009725f, 0.008302f, 0.002213f, -0.018434f, 0.000048f, -0.011559f, -0.000218f, 0.007885f, 0.010355f, -0.024388f, -0.011041f, -0.018958f, -0.005158f, 0.034072f, 0.005981f, -0.000686f, 0.004212f, -0.000657f, 0.002950f, 0.011714f, 0.006906f, 0.018274f, 0.000520f, 0.014300f, 0.008475f, -0.008666f, 0.008438f, -0.014402f, 0.001881f, -0.014410f, -0.016292f, 0.009345f, -0.018045f, 0.010927f, 0.001248f, + 0.012742f, 0.009414f, 0.010071f, -0.008832f, 0.015146f, -0.016025f, 0.002767f, -0.006391f, 0.000512f, 0.024086f, 0.004205f, 0.013216f, 0.014567f, 0.000178f, -0.000526f, 0.011562f, -0.014712f, 0.011270f, -0.034102f, 0.005096f, 0.006868f, -0.023329f, 0.008939f, -0.001143f, 0.022216f, -0.007136f, -0.013091f, 0.008961f, -0.030134f, -0.010848f, 0.023115f, 0.009817f, -0.016136f, -0.036546f, 0.014561f, -0.005787f, 0.007362f, -0.023566f, -0.031588f, -0.021245f, 0.024679f, 0.001411f, 0.012932f, -0.003209f, -0.015347f, -0.021192f, 0.008127f, -0.006110f, -0.019458f, -0.021489f, -0.000126f, -0.019214f, -0.016019f, -0.008361f, -0.005416f, -0.020702f, 0.009541f, 0.013038f, 0.016440f, -0.009168f, 0.014357f, -0.013470f, 0.023759f, -0.005132f, -0.003370f, 0.019268f, 0.008012f, -0.005115f, -0.015297f, -0.006813f, 0.016693f, 0.004204f, -0.016343f, 0.006602f, 0.017690f, 0.018934f, 0.005667f, -0.023187f, -0.028241f, -0.002200f, 0.002221f, 0.001775f, -0.021374f, 0.005814f, 0.017224f, 0.006306f, -0.012079f, -0.032249f, 0.005012f, -0.013506f, -0.036308f, 0.002041f, -0.003540f, -0.016773f, 0.017720f, -0.042149f, + 0.024346f, 0.018525f, 0.020457f, 0.001869f, 0.021674f, 0.001140f, -0.016098f, -0.018236f, 0.001213f, 0.017307f, -0.014121f, 0.003171f, -0.028963f, 0.017805f, 0.018622f, -0.011166f, -0.007137f, 0.003589f, 0.020480f, 0.014993f, -0.012832f, -0.011130f, 0.013493f, -0.018984f, 0.004696f, -0.025575f, -0.001590f, -0.008179f, -0.034606f, -0.034952f, 0.005005f, 0.018814f, 0.007481f, -0.029923f, -0.017361f, 0.021456f, -0.026364f, -0.011003f, 0.018031f, -0.006073f, 0.022937f, -0.009411f, -0.019074f, 0.005804f, -0.026958f, 0.028223f, -0.004981f, 0.004463f, -0.015493f, -0.007511f, -0.003194f, -0.027740f, -0.018643f, 0.001564f, -0.006556f, 0.002099f, -0.011010f, -0.029379f, 0.003100f, -0.024430f, 0.008220f, -0.006622f, 0.014664f, -0.029359f, 0.010238f, 0.004224f, -0.011053f, 0.020631f, -0.005835f, -0.015636f, -0.031722f, -0.005013f, 0.002081f, -0.024599f, 0.011312f, -0.018684f, -0.006124f, 0.012638f, -0.013617f, 0.003700f, 0.015277f, 0.022674f, -0.006761f, 0.001799f, -0.008851f, -0.032141f, -0.007179f, -0.007570f, 0.013147f, -0.028399f, -0.000499f, -0.016798f, 0.016687f, -0.020202f, -0.026571f, 0.016450f, + 0.007712f, 0.010320f, 0.035871f, -0.007020f, -0.010575f, 0.009099f, -0.023313f, -0.028119f, 0.002098f, 0.033414f, 0.010439f, 0.018216f, -0.013824f, -0.018201f, -0.027469f, 0.004232f, 0.035181f, -0.017031f, 0.018481f, 0.002884f, 0.027486f, -0.043131f, -0.013026f, -0.002107f, 0.005222f, 0.022343f, 0.011859f, -0.033308f, -0.008162f, -0.016292f, -0.000726f, -0.038205f, -0.005142f, -0.014790f, 0.003244f, -0.020925f, -0.000470f, 0.002801f, -0.052579f, 0.004418f, -0.015734f, 0.001539f, -0.020001f, -0.002925f, 0.014485f, 0.004937f, -0.005700f, -0.008552f, -0.026508f, 0.026655f, 0.029198f, 0.007456f, 0.009015f, -0.025547f, 0.039833f, 0.013411f, 0.020277f, 0.051610f, 0.018784f, 0.035651f, -0.032755f, 0.008830f, 0.036213f, -0.009585f, -0.011911f, 0.006068f, -0.021063f, 0.017793f, 0.004997f, -0.024403f, -0.032697f, -0.001352f, 0.029059f, 0.000455f, -0.001617f, 0.019773f, -0.027069f, -0.005808f, -0.022207f, 0.014091f, -0.038302f, 0.001954f, -0.007786f, 0.015479f, -0.040106f, -0.026666f, -0.017295f, 0.013306f, 0.013461f, 0.010485f, -0.012814f, 0.011340f, -0.009491f, 0.013545f, -0.007782f, -0.002009f, + -0.002596f, -0.009817f, 0.007863f, 0.019581f, 0.010773f, 0.019739f, -0.001479f, -0.015849f, 0.002437f, -0.015736f, 0.046388f, -0.009992f, -0.046008f, -0.012454f, 0.012177f, 0.041603f, -0.040241f, -0.014526f, -0.003168f, 0.027482f, 0.000915f, -0.054367f, -0.007809f, 0.027970f, 0.052580f, 0.003989f, 0.036029f, 0.055850f, -0.005645f, 0.019338f, 0.023426f, -0.005066f, 0.043392f, -0.004270f, 0.052307f, 0.010547f, -0.019046f, -0.046316f, 0.021256f, 0.025759f, -0.044313f, -0.043054f, 0.011327f, -0.010032f, 0.001271f, -0.017099f, 0.040069f, -0.017991f, -0.011661f, 0.014038f, 0.009926f, 0.000487f, -0.018521f, -0.013323f, -0.022520f, 0.009158f, -0.001474f, -0.010637f, -0.001977f, 0.026916f, 0.039910f, -0.043156f, -0.002990f, -0.042064f, -0.004741f, -0.010650f, 0.041711f, -0.017393f, -0.017187f, -0.007794f, 0.025269f, 0.008873f, 0.006771f, 0.011140f, 0.009935f, -0.007105f, 0.000215f, -0.004973f, 0.006526f, -0.004441f, 0.038981f, -0.009611f, 0.010130f, 0.028334f, -0.014695f, -0.031001f, 0.006778f, 0.011626f, -0.011439f, -0.011288f, -0.002909f, 0.007499f, 0.019693f, -0.026122f, 0.036245f, 0.054769f, + 0.035857f, -0.013737f, -0.021767f, -0.048164f, -0.064023f, -0.021920f, -0.000107f, -0.009721f, -0.002924f, -0.005139f, 0.015905f, 0.001214f, -0.023705f, 0.016099f, -0.009179f, 0.001693f, 0.026757f, 0.045232f, -0.022260f, 0.043657f, 0.019946f, 0.025076f, 0.037371f, 0.057425f, -0.021287f, 0.029982f, -0.057990f, -0.006656f, -0.025698f, -0.056990f, 0.023863f, 0.014180f, 0.018100f, 0.008247f, 0.023388f, 0.007512f, -0.040834f, 0.035426f, 0.062194f, -0.008670f, -0.009329f, 0.015638f, 0.006707f, -0.012320f, -0.054342f, 0.005051f, 0.000782f, -0.004443f, 0.001333f, 0.019241f, -0.038676f, 0.009057f, 0.011748f, -0.007519f, -0.022052f, -0.010481f, -0.024643f, 0.026275f, -0.055783f, -0.007604f, -0.035660f, 0.020723f, 0.008765f, 0.021016f, -0.006559f, 0.006162f, -0.013794f, 0.035122f, 0.011021f, 0.028957f, -0.025134f, 0.028493f, 0.000020f, -0.026595f, 0.056984f, -0.008637f, 0.007581f, 0.038766f, -0.035841f, 0.043406f, 0.026219f, -0.032592f, 0.014882f, -0.011888f, 0.019581f, -0.045326f, 0.034779f, 0.005865f, 0.012987f, -0.003154f, 0.012354f, -0.036277f, 0.026101f, 0.043997f, -0.077330f, 0.008778f, + 0.034698f, -0.020424f, -0.024702f, -0.000411f, -0.023652f, -0.010492f, -0.063027f, -0.053630f, -0.007190f, -0.030567f, -0.036964f, -0.026385f, 0.016764f, -0.009075f, -0.018623f, -0.029751f, 0.028151f, 0.002411f, -0.045526f, -0.006651f, -0.000089f, -0.021171f, -0.006689f, 0.019167f, 0.013478f, -0.002575f, 0.000296f, 0.001538f, -0.011359f, 0.010455f, 0.021445f, -0.007270f, -0.005003f, 0.033535f, -0.061481f, -0.009227f, 0.017394f, 0.066482f, -0.027125f, -0.016150f, -0.024444f, -0.032390f, 0.014566f, 0.070623f, 0.012964f, 0.044163f, 0.008930f, -0.006020f, -0.003629f, -0.004033f, -0.033604f, 0.008551f, 0.007609f, -0.026112f, 0.006066f, 0.055732f, -0.008822f, -0.015372f, 0.009133f, -0.018034f, -0.004461f, 0.049604f, 0.070994f, 0.020886f, 0.042668f, 0.051121f, -0.017351f, -0.018484f, 0.005810f, -0.013945f, 0.003125f, -0.046036f, 0.000105f, -0.034756f, 0.012475f, 0.012102f, 0.024178f, 0.050970f, 0.057513f, -0.022269f, 0.129387f, -0.017141f, 0.003562f, -0.023284f, 0.015786f, -0.009549f, 0.015598f, 0.033593f, 0.010013f, -0.030346f, -0.016106f, -0.031745f, 0.000120f, -0.021413f, -0.039267f, 0.005814f, + 0.026579f, -0.003943f, 0.008217f, 0.012716f, 0.015877f, 0.000165f, -0.010829f, -0.014674f, 0.008346f, 0.000253f, -0.019205f, 0.008139f, 0.056070f, 0.039426f, 0.022957f, -0.046688f, 0.034430f, 0.026583f, -0.011662f, -0.014141f, -0.013645f, -0.018640f, -0.007362f, 0.015310f, -0.033270f, 0.003287f, 0.004955f, 0.020372f, 0.053495f, 0.010094f, 0.011649f, 0.002688f, -0.005617f, -0.010960f, 0.023576f, -0.014271f, 0.053965f, 0.016619f, -0.004514f, 0.022660f, 0.005038f, -0.036803f, -0.025294f, 0.029180f, 0.035409f, 0.011560f, -0.008372f, 0.021414f, 0.025205f, 0.033253f, 0.069560f, 0.004350f, -0.020390f, -0.040088f, -0.024928f, 0.011565f, 0.001496f, 0.013157f, 0.020973f, -0.019921f, 0.092176f, -0.013608f, 0.003992f, 0.010298f, -0.006869f, -0.001188f, 0.023182f, -0.017028f, -0.020163f, -0.010526f, 0.029893f, 0.026726f, -0.071079f, 0.013850f, 0.012301f, 0.029250f, -0.018079f, -0.027956f, -0.026626f, 0.020516f, 0.018573f, -0.028546f, -0.015532f, -0.011612f, 0.048075f, 0.024297f, 0.013639f, -0.009085f, -0.049448f, 0.014289f, 0.012676f, 0.025833f, -0.005967f, 0.013869f, -0.013589f, 0.005135f, + -0.042944f, 0.018232f, 0.017797f, 0.000991f, -0.010544f, -0.026645f, -0.053498f, 0.035213f, -0.022492f, 0.018368f, 0.018405f, 0.031265f, 0.004298f, -0.032070f, 0.054333f, 0.011333f, -0.053297f, -0.023898f, 0.031578f, 0.008435f, 0.041271f, 0.018601f, 0.006305f, -0.036770f, -0.019545f, 0.022443f, -0.067075f, 0.072471f, -0.052356f, 0.004623f, 0.040181f, -0.009369f, 0.080842f, 0.015154f, 0.009624f, -0.027564f, 0.087941f, 0.013105f, 0.025374f, -0.015368f, 0.028344f, 0.071993f, 0.021234f, 0.043758f, 0.056788f, -0.006519f, 0.065694f, -0.057611f, -0.023257f, -0.024114f, -0.021794f, 0.003573f, 0.007336f, -0.008481f, -0.027786f, -0.050063f, 0.040245f, 0.037967f, 0.013660f, 0.033926f, -0.066017f, -0.057465f, 0.013959f, 0.021755f, -0.032756f, -0.044041f, 0.021539f, -0.016520f, -0.061876f, -0.025053f, -0.015176f, 0.024718f, -0.057263f, 0.025543f, 0.015717f, 0.019455f, -0.029064f, -0.005287f, -0.028816f, -0.014572f, -0.074965f, -0.020999f, 0.029950f, -0.115766f, -0.039832f, -0.008028f, -0.006876f, 0.000164f, -0.071781f, -0.020454f, -0.105910f, -0.012113f, 0.015599f, -0.032518f, -0.036242f, -0.016715f, + 0.026009f, -0.013845f, -0.041145f, -0.045201f, -0.110474f, -0.041162f, 0.044948f, -0.050185f, -0.075913f, 0.056460f, -0.023402f, -0.083205f, 0.019563f, 0.069482f, -0.043369f, -0.020185f, 0.004106f, -0.054756f, 0.060448f, 0.089518f, 0.122972f, -0.017073f, -0.002156f, -0.045518f, -0.046287f, -0.080305f, 0.036344f, -0.011822f, 0.122445f, -0.023316f, -0.051209f, -0.070598f, 0.005309f, 0.025132f, -0.025996f, 0.025399f, 0.080078f, -0.028784f, -0.013380f, -0.052624f, -0.024549f, 0.056381f, 0.062304f, -0.059366f, -0.017262f, 0.034841f, -0.013190f, 0.017156f, -0.018467f, 0.080963f, 0.062369f, 0.135895f, 0.043090f, 0.062021f, -0.026386f, 0.045530f, 0.089268f, 0.032675f, -0.006291f, 0.024602f, -0.003744f, 0.062264f, 0.029703f, 0.089180f, 0.022981f, -0.081952f, 0.028990f, 0.037391f, 0.069438f, -0.035329f, -0.035352f, 0.045518f, 0.042694f, -0.016585f, 0.069173f, -0.020126f, 0.026912f, -0.073318f, 0.046984f, -0.013213f, 0.024312f, 0.033206f, 0.059251f, 0.059633f, -0.046608f, -0.039200f, -0.018460f, 0.071381f, 0.061642f, -0.018884f, -0.041987f, -0.064386f, -0.014298f, 0.055469f, 0.047950f, 0.040299f, + -0.024656f, -0.093296f, 0.011937f, 0.155974f, 0.095104f, -0.015859f, -0.216063f, -0.026382f, -0.017506f, 0.022559f, -0.020242f, 0.009502f, 0.027942f, -0.003081f, 0.014822f, -0.042675f, 0.035566f, 0.042425f, 0.073158f, -0.043867f, -0.057580f, 0.070163f, 0.107085f, 0.031437f, -0.040633f, -0.054819f, -0.008193f, 0.021012f, 0.010548f, 0.022042f, 0.005216f, 0.028459f, 0.013911f, 0.072800f, -0.016463f, -0.085569f, -0.034850f, 0.035711f, 0.015710f, -0.025386f, -0.035183f, 0.011778f, 0.048240f, 0.083361f, 0.075519f, 0.005180f, 0.006282f, 0.035743f, -0.022080f, -0.072143f, 0.029296f, -0.042200f, 0.100359f, 0.111576f, 0.003331f, 0.037010f, 0.020471f, 0.028606f, -0.040367f, 0.001464f, 0.104966f, -0.028918f, 0.007000f, -0.125844f, -0.011558f, 0.024449f, 0.037765f, 0.039068f, 0.034853f, -0.022890f, -0.013544f, 0.072324f, 0.097152f, -0.002925f, 0.004600f, 0.024422f, 0.008654f, -0.013163f, -0.101185f, -0.042656f, 0.077503f, 0.086121f, 0.081099f, 0.111406f, 0.017192f, -0.049824f, -0.151104f, -0.114151f, -0.023720f, 0.030409f, 0.091719f, 0.101552f, 0.045787f, 0.001318f, -0.052838f, -0.044137f, + -0.022242f, 0.031200f, 0.084807f, 0.049237f, -0.015013f, 0.002493f, -0.010776f, -0.048999f, -0.069950f, -0.054750f, 0.006137f, 0.080502f, 0.056645f, 0.121379f, 0.074784f, 0.078020f, 0.105704f, -0.032621f, -0.081359f, -0.087246f, -0.120653f, -0.142397f, -0.059272f, -0.017122f, 0.036152f, 0.077834f, 0.106503f, 0.105177f, 0.078910f, 0.053913f, 0.101176f, -0.021565f, -0.076395f, -0.003576f, -0.025851f, 0.028331f, 0.023808f, 0.129100f, 0.103347f, -0.042484f, 0.009739f, -0.029925f, -0.098070f, -0.026066f, 0.010419f, -0.052684f, 0.066622f, -0.032823f, 0.011340f, 0.006265f, -0.026508f, 0.069131f, 0.077015f, 0.076934f, 0.031479f, -0.039797f, -0.122488f, 0.053299f, 0.015965f, -0.210843f, -0.222351f, -0.232017f, -0.237811f, -0.318452f, -0.023897f, -0.081942f, -0.010657f, 0.042097f, 0.162244f, 0.181967f, 0.188548f, 0.258231f, 0.353676f, 0.338317f, 0.333703f, 0.269234f, 0.198574f, 0.146168f, 0.052531f, -0.145741f, -0.063202f, -0.082175f, -0.045537f, -0.177603f, -0.019690f, -0.068128f, -0.074163f, -0.145920f, -0.108067f, -0.112470f, -0.098951f, -0.106368f, -0.190943f, -0.170592f, -0.095022f, -0.087855f, + -0.109667f, -0.158907f, -0.015640f, -0.138934f, -0.265940f, -0.230198f, -0.198349f, -0.104417f, -0.132632f, -0.021375f, -0.277471f, -0.123376f, -0.119759f, -0.056812f, -0.037184f, -0.146549f, 0.010581f, -0.148501f, -0.015136f, 0.019248f, 0.069612f, 0.000126f, 0.069271f, 0.096616f, 0.161740f, 0.164321f, 0.235538f, 0.141716f, 0.369296f, 0.217842f, 0.425284f, 0.270191f, 0.413938f, 0.469188f, 0.565918f, 0.435974f, 0.432438f, 0.454483f, 0.299365f, 0.128237f, 0.082628f}, + {-0.017642f, 0.019321f, -0.011241f, 0.000801f, -0.009383f, 0.004387f, 0.002124f, 0.003191f, -0.010388f, -0.007148f, 0.000225f, -0.006680f, -0.000759f, 0.004320f, -0.000816f, -0.002311f, -0.001183f, 0.004840f, -0.002007f, -0.003259f, 0.013307f, -0.000032f, -0.010422f, -0.004840f, 0.004458f, 0.001062f, 0.004150f, -0.009208f, 0.001005f, -0.009683f, 0.001462f, 0.008124f, -0.001016f, 0.005127f, 0.005314f, 0.004901f, -0.005454f, -0.002367f, -0.003187f, 0.001758f, -0.001378f, 0.003424f, -0.009015f, -0.004308f, -0.003822f, 0.000461f, -0.002275f, 0.005031f, 0.006558f, 0.010401f, -0.004126f, -0.005629f, -0.002680f, 0.002568f, 0.006815f, 0.007778f, 0.006301f, -0.001414f, -0.009127f, 0.011647f, -0.007642f, 0.004156f, -0.008037f, 0.006696f, -0.005328f, 0.004010f, -0.004847f, 0.000364f, -0.005148f, -0.003638f, -0.000379f, -0.001869f, 0.004009f, 0.002573f, -0.000680f, -0.008320f, 0.031894f, 0.004351f, -0.010256f, 0.005095f, 0.005774f, 0.002093f, -0.013024f, 0.006177f, 0.009540f, -0.009936f, -0.002841f, -0.012211f, -0.002530f, -0.005107f, -0.004338f, -0.001639f, 0.000879f, -0.000291f, 0.001457f, 0.004579f, + -0.005299f, 0.002595f, -0.012448f, 0.004489f, 0.007996f, 0.001785f, -0.003105f, -0.010136f, 0.006938f, -0.004383f, 0.011087f, 0.009381f, -0.000155f, -0.004185f, 0.009098f, 0.010435f, 0.008556f, 0.008510f, 0.002355f, -0.006312f, 0.002296f, 0.008056f, -0.003039f, -0.006599f, 0.006340f, 0.009690f, -0.003886f, 0.005121f, -0.010558f, -0.000771f, -0.009204f, 0.006649f, -0.012347f, -0.003297f, -0.001983f, 0.004497f, 0.006749f, 0.004646f, 0.000077f, -0.006571f, 0.001302f, -0.009137f, -0.005634f, 0.001916f, -0.000580f, -0.005378f, 0.003718f, 0.003448f, 0.001544f, 0.006242f, -0.004359f, 0.002999f, -0.005979f, -0.002156f, -0.001513f, 0.004937f, 0.018000f, -0.018341f, 0.000590f, 0.000225f, -0.004721f, -0.005571f, -0.005935f, 0.001795f, -0.010385f, -0.010234f, 0.001328f, 0.004835f, -0.000483f, 0.005749f, 0.004443f, -0.005663f, 0.002190f, -0.020095f, -0.005004f, -0.004555f, -0.004765f, -0.006389f, -0.007067f, -0.017714f, -0.013811f, 0.001804f, 0.004019f, -0.001022f, 0.009438f, 0.007564f, 0.003103f, -0.003467f, -0.002013f, 0.008877f, -0.003563f, 0.001044f, -0.001413f, -0.009457f, 0.003035f, -0.003206f, + -0.006509f, -0.002532f, 0.007574f, 0.018502f, -0.007185f, 0.002017f, 0.004411f, -0.003487f, 0.005737f, 0.002558f, -0.006592f, 0.003727f, -0.015443f, -0.007156f, 0.000068f, 0.006216f, 0.009638f, -0.006033f, -0.002874f, -0.000734f, -0.022332f, 0.003722f, 0.011390f, 0.000534f, 0.001568f, 0.006185f, -0.003716f, 0.009690f, 0.013141f, -0.001833f, 0.003677f, 0.007753f, 0.007490f, 0.001241f, 0.000410f, -0.004002f, -0.005076f, -0.005043f, -0.015883f, 0.003371f, 0.000307f, -0.015357f, 0.002045f, 0.008230f, 0.012190f, 0.002967f, -0.009247f, 0.020895f, -0.003122f, -0.004388f, 0.009638f, -0.006360f, -0.006277f, 0.000799f, -0.008020f, 0.009200f, 0.009099f, -0.004020f, -0.014533f, -0.007232f, 0.006745f, -0.009357f, 0.019760f, 0.017140f, -0.014209f, -0.017164f, 0.000253f, 0.002974f, -0.016508f, -0.001253f, 0.006295f, 0.004332f, -0.008289f, -0.004791f, 0.018130f, -0.002160f, 0.012342f, -0.001459f, -0.004568f, -0.004501f, -0.009984f, 0.001468f, -0.001815f, 0.009802f, -0.009010f, 0.002116f, -0.002735f, 0.001656f, -0.005547f, -0.000867f, 0.007886f, 0.006489f, -0.011140f, 0.016231f, 0.000746f, -0.000311f, + -0.000917f, -0.001760f, 0.003759f, -0.002542f, -0.015496f, -0.002395f, -0.008621f, 0.012485f, 0.004432f, -0.000072f, 0.014682f, -0.009218f, 0.009264f, 0.009718f, -0.000645f, -0.008611f, -0.038023f, 0.008270f, 0.001654f, 0.026451f, -0.001811f, 0.010396f, -0.014789f, 0.002715f, -0.011168f, -0.002987f, -0.005648f, -0.002111f, 0.004585f, -0.003314f, 0.004262f, 0.008624f, 0.006569f, 0.025046f, 0.017247f, -0.012001f, 0.005510f, -0.001065f, 0.004374f, 0.002552f, -0.003576f, -0.025774f, 0.006087f, -0.001768f, -0.000566f, 0.009120f, -0.001825f, -0.007559f, -0.005225f, -0.001708f, -0.008173f, -0.004752f, -0.020536f, -0.005288f, 0.000224f, -0.007704f, -0.001576f, 0.007807f, 0.011693f, -0.004478f, 0.014522f, -0.011710f, 0.002138f, 0.004422f, 0.001640f, -0.004111f, -0.008105f, 0.004822f, -0.002261f, 0.002669f, -0.006097f, -0.009021f, 0.001244f, 0.003994f, -0.008624f, 0.007087f, -0.005983f, 0.018010f, 0.019793f, -0.007082f, 0.007052f, 0.006656f, -0.001311f, -0.003747f, -0.002950f, -0.025778f, 0.010018f, 0.008591f, 0.000096f, -0.005652f, -0.010449f, -0.000588f, -0.003869f, -0.012379f, -0.007727f, -0.011978f, + 0.012621f, 0.007322f, -0.000727f, 0.014516f, -0.007265f, 0.013050f, -0.013992f, -0.013463f, 0.007064f, -0.021674f, -0.007422f, 0.005841f, 0.013748f, 0.017779f, -0.002680f, 0.013339f, -0.000077f, 0.012711f, 0.004978f, 0.002295f, -0.001659f, 0.000948f, 0.012796f, -0.005652f, -0.000909f, 0.002511f, 0.001477f, -0.011977f, -0.001116f, -0.006393f, 0.025685f, -0.011850f, -0.011829f, -0.002750f, 0.012333f, 0.012202f, 0.010720f, 0.013978f, -0.001952f, 0.002726f, -0.002618f, -0.006649f, 0.005656f, -0.000441f, -0.000854f, -0.007653f, 0.020280f, 0.012376f, -0.005664f, 0.003917f, 0.006328f, -0.010331f, 0.002697f, 0.007816f, -0.001467f, 0.014964f, -0.005512f, -0.001852f, -0.015663f, -0.006039f, -0.013234f, 0.000654f, 0.019475f, -0.007441f, 0.005878f, 0.003246f, 0.001184f, -0.005195f, -0.001232f, 0.000134f, -0.004143f, 0.009075f, -0.008994f, -0.004320f, -0.001082f, -0.003766f, -0.035133f, 0.026098f, 0.003089f, -0.012719f, -0.030967f, -0.002788f, 0.001193f, -0.018224f, -0.001267f, 0.008958f, 0.007780f, 0.000991f, -0.004933f, 0.007145f, 0.022852f, 0.023034f, -0.009288f, -0.010395f, -0.024188f, 0.005215f, + -0.003964f, 0.024232f, -0.009266f, -0.000254f, -0.005110f, 0.009286f, -0.002162f, -0.024284f, 0.008605f, -0.000890f, -0.013990f, 0.000273f, 0.002877f, -0.001738f, -0.001881f, -0.009838f, -0.013431f, 0.008792f, 0.002756f, 0.011418f, -0.009043f, 0.019047f, 0.009616f, -0.003639f, -0.015938f, -0.003063f, 0.006771f, 0.018631f, 0.006485f, -0.010155f, -0.003926f, 0.008789f, 0.006372f, -0.005096f, -0.001710f, 0.009254f, 0.008320f, 0.009757f, 0.019215f, 0.020586f, 0.010990f, 0.011080f, 0.013619f, -0.007070f, 0.003006f, -0.013211f, 0.014737f, 0.002366f, 0.008173f, -0.009389f, -0.013481f, 0.003608f, -0.017562f, -0.006784f, -0.006890f, 0.013846f, -0.012860f, -0.000849f, 0.023798f, 0.014597f, 0.020106f, 0.003753f, -0.022190f, -0.007375f, 0.023367f, -0.006856f, -0.014952f, -0.015573f, -0.015336f, -0.016219f, 0.008781f, 0.008923f, 0.005697f, 0.005211f, 0.005385f, 0.022481f, -0.002877f, 0.009707f, -0.019470f, -0.021901f, 0.014524f, -0.000865f, -0.011987f, 0.000764f, -0.030465f, -0.010012f, -0.010314f, 0.003642f, -0.001143f, -0.002896f, -0.021449f, -0.014086f, 0.002304f, 0.014669f, 0.023926f, -0.009610f, + -0.009471f, 0.012685f, -0.016527f, -0.001284f, -0.000889f, 0.005408f, 0.010457f, 0.008452f, 0.016599f, -0.009045f, 0.024089f, 0.011245f, -0.026057f, 0.012877f, -0.014471f, -0.017434f, -0.014346f, -0.021077f, 0.018969f, 0.004245f, -0.022202f, 0.002312f, 0.004814f, 0.001784f, 0.003687f, -0.004434f, 0.015906f, -0.009548f, 0.012357f, -0.019970f, 0.015110f, -0.010650f, -0.008378f, 0.000686f, 0.007422f, -0.002976f, 0.012172f, 0.051098f, -0.043076f, 0.022225f, 0.023110f, -0.018486f, -0.002060f, 0.031214f, 0.012301f, 0.020408f, 0.007184f, -0.004923f, 0.046127f, -0.000188f, -0.006787f, 0.001561f, 0.001702f, 0.023010f, 0.035079f, 0.014317f, 0.001319f, 0.002304f, 0.006584f, 0.013159f, 0.001391f, 0.007760f, -0.021882f, 0.012753f, 0.019821f, -0.002163f, 0.009008f, 0.001681f, 0.004953f, -0.013416f, -0.010224f, 0.002555f, 0.001051f, 0.022408f, 0.011795f, 0.010292f, -0.007131f, -0.008965f, -0.009113f, 0.013678f, 0.018911f, 0.001936f, -0.003952f, 0.035621f, 0.019141f, 0.024430f, -0.010529f, -0.023357f, -0.003134f, -0.024515f, -0.015685f, -0.006021f, -0.009290f, 0.000463f, 0.021537f, -0.004225f, + 0.002571f, -0.014085f, -0.015407f, 0.021866f, 0.000940f, 0.011443f, 0.011863f, -0.007913f, 0.021070f, 0.007440f, 0.003992f, -0.003866f, -0.010173f, 0.017870f, -0.001765f, -0.022769f, 0.018313f, 0.017918f, -0.035265f, 0.003640f, 0.010741f, -0.017582f, 0.013457f, -0.029923f, 0.005951f, 0.008449f, -0.004664f, -0.012110f, -0.015764f, -0.017850f, -0.030348f, 0.003357f, 0.032607f, -0.011400f, 0.015214f, 0.008651f, 0.023933f, 0.012940f, -0.010459f, -0.021673f, 0.009947f, -0.005637f, -0.008739f, -0.022381f, -0.004492f, -0.003141f, -0.010076f, -0.009625f, -0.006378f, -0.015678f, -0.021810f, 0.023837f, -0.003733f, -0.013878f, 0.017300f, 0.006640f, -0.017860f, 0.002523f, -0.002775f, 0.010768f, -0.023372f, 0.006266f, 0.005750f, -0.031905f, 0.008920f, 0.010706f, -0.018410f, 0.005020f, -0.000729f, -0.004880f, 0.009774f, 0.001455f, -0.004435f, 0.001821f, 0.005709f, 0.022096f, 0.014765f, 0.022585f, 0.012632f, 0.008413f, -0.008533f, 0.033471f, -0.011392f, -0.016212f, 0.033181f, 0.003111f, 0.018430f, 0.005467f, -0.011089f, -0.033092f, -0.035850f, -0.007002f, -0.003307f, -0.011782f, -0.012023f, -0.059698f, + 0.026114f, 0.047595f, 0.001363f, -0.030228f, 0.010743f, -0.007248f, -0.004085f, 0.006104f, 0.002672f, 0.010751f, -0.017178f, -0.000290f, 0.042331f, 0.032164f, 0.027716f, -0.034655f, -0.003586f, 0.006002f, 0.014854f, -0.017675f, -0.019782f, -0.006485f, 0.003366f, 0.013450f, 0.005399f, -0.043988f, -0.049948f, 0.012801f, -0.003914f, 0.024822f, 0.025150f, -0.019782f, 0.020378f, 0.016299f, 0.021898f, -0.003698f, -0.016961f, -0.017140f, 0.009127f, -0.018040f, -0.008667f, -0.002076f, -0.003268f, 0.012471f, 0.028297f, 0.015297f, -0.011144f, -0.009408f, -0.018047f, -0.006030f, -0.001433f, 0.006225f, -0.006162f, -0.007613f, 0.012260f, 0.007389f, -0.026382f, -0.002518f, -0.002154f, 0.025848f, -0.017360f, -0.018366f, -0.033972f, -0.012655f, 0.001742f, -0.000221f, 0.012142f, -0.005675f, 0.000078f, -0.015919f, -0.024484f, -0.020568f, -0.023135f, -0.012549f, 0.003822f, -0.038866f, 0.007927f, 0.007292f, 0.006351f, 0.010142f, 0.029953f, 0.003084f, 0.026154f, -0.002777f, 0.033707f, 0.016953f, 0.026546f, 0.016274f, 0.008513f, -0.012077f, -0.000152f, -0.007390f, 0.018656f, 0.005628f, 0.016575f, -0.014223f, + -0.001295f, 0.027527f, -0.032120f, -0.018332f, 0.027438f, -0.043791f, -0.018019f, 0.003566f, -0.006935f, -0.021605f, 0.045967f, -0.007747f, 0.032293f, 0.012459f, -0.025060f, -0.003988f, -0.008312f, -0.032268f, -0.040170f, 0.033543f, 0.001589f, -0.012262f, 0.010273f, 0.000514f, -0.003507f, 0.012063f, 0.006958f, -0.004538f, -0.013176f, 0.002696f, 0.034067f, 0.026527f, -0.019646f, 0.008389f, 0.004390f, 0.024583f, -0.008601f, 0.016428f, -0.033040f, -0.009364f, 0.027780f, 0.007522f, -0.004826f, 0.028503f, -0.005639f, 0.019609f, -0.035957f, -0.047219f, -0.012169f, -0.000362f, -0.027663f, 0.033850f, 0.030682f, 0.034192f, -0.009498f, -0.013999f, -0.003383f, 0.040161f, 0.028872f, 0.045254f, -0.040284f, -0.030318f, -0.068975f, 0.029627f, -0.007704f, -0.058999f, -0.011449f, 0.005492f, 0.008658f, -0.022120f, 0.023967f, 0.020144f, 0.002265f, -0.000396f, 0.003736f, -0.009903f, -0.020519f, 0.004368f, -0.011671f, -0.019365f, -0.000255f, 0.044482f, 0.001383f, -0.006974f, -0.035719f, 0.014856f, 0.028198f, -0.014820f, -0.043101f, -0.008064f, 0.014514f, 0.004888f, -0.009162f, 0.009106f, 0.003049f, 0.015195f, + -0.004385f, 0.025236f, 0.039036f, 0.014426f, -0.026026f, 0.029064f, 0.013201f, -0.033689f, -0.035482f, 0.038046f, 0.018530f, -0.015472f, -0.017385f, -0.001378f, -0.031514f, 0.022405f, 0.030119f, -0.001346f, 0.001529f, 0.006934f, -0.004086f, 0.032363f, 0.010894f, 0.007757f, -0.014021f, 0.004383f, 0.010859f, 0.039790f, -0.010194f, 0.014356f, -0.032115f, -0.037708f, 0.031734f, -0.006903f, -0.003485f, 0.000503f, 0.030202f, -0.004078f, -0.007629f, -0.010603f, -0.014653f, -0.047743f, -0.004973f, -0.031604f, -0.063065f, -0.064891f, -0.028735f, -0.049787f, -0.023251f, -0.008916f, 0.007589f, 0.026223f, 0.029232f, 0.002093f, -0.017636f, 0.031742f, -0.017845f, 0.015146f, -0.062347f, -0.006999f, -0.043159f, -0.029124f, 0.027188f, 0.018988f, 0.018174f, 0.005509f, 0.039669f, -0.005068f, -0.003814f, -0.030388f, -0.011481f, -0.006840f, -0.021334f, -0.021148f, -0.051533f, -0.020634f, -0.006849f, -0.008963f, -0.032400f, 0.026643f, 0.009619f, 0.015571f, -0.015030f, -0.006088f, -0.077608f, -0.022781f, -0.022395f, 0.016866f, 0.037680f, -0.024855f, -0.005112f, -0.045192f, -0.004652f, 0.022100f, -0.008754f, -0.015762f, + 0.008488f, 0.032027f, 0.054407f, 0.010986f, 0.000184f, -0.003896f, -0.016657f, -0.023249f, 0.013248f, -0.015698f, 0.048953f, 0.008888f, 0.019940f, 0.102129f, -0.022660f, -0.019560f, -0.028399f, -0.039613f, -0.050569f, 0.030584f, 0.049700f, -0.027511f, 0.002728f, 0.011992f, -0.015460f, -0.002948f, -0.034910f, 0.000301f, -0.018987f, 0.053634f, 0.001337f, -0.008950f, 0.043610f, -0.009795f, 0.013668f, -0.047569f, 0.026551f, 0.008356f, 0.034188f, -0.014476f, 0.025842f, 0.043843f, 0.047735f, 0.026702f, 0.043194f, 0.022062f, -0.005143f, 0.041187f, -0.018115f, -0.026094f, -0.007029f, 0.016830f, 0.029028f, -0.065481f, -0.002957f, -0.042204f, 0.035409f, 0.015730f, 0.000730f, 0.012000f, 0.048983f, 0.002327f, 0.043894f, 0.018310f, 0.065663f, 0.005946f, -0.005698f, 0.028182f, 0.010875f, -0.032609f, 0.008625f, -0.003817f, -0.042227f, 0.030678f, -0.024841f, -0.042919f, -0.085892f, 0.006577f, -0.009216f, 0.051161f, -0.027107f, 0.068488f, 0.024252f, -0.001592f, -0.009029f, 0.026339f, 0.029787f, -0.050961f, -0.020083f, -0.037907f, 0.014362f, -0.017636f, 0.039121f, 0.010624f, 0.013054f, 0.011319f, + 0.035638f, -0.019817f, -0.022566f, -0.022008f, 0.034260f, 0.019126f, 0.043875f, 0.014147f, 0.131040f, -0.035636f, 0.002812f, 0.003663f, 0.062056f, 0.027589f, 0.029794f, -0.036543f, 0.019249f, -0.012649f, 0.003031f, -0.015275f, 0.005871f, 0.046346f, -0.009596f, 0.016805f, 0.085539f, 0.029420f, -0.036238f, -0.041242f, 0.006822f, 0.057897f, 0.030093f, 0.013717f, -0.019600f, 0.049922f, 0.009381f, -0.003412f, -0.049687f, 0.019199f, -0.006758f, 0.025689f, -0.045099f, -0.024566f, 0.003654f, -0.007951f, 0.007273f, -0.039309f, -0.000397f, -0.022323f, 0.013280f, 0.042550f, 0.031605f, 0.014354f, -0.058512f, 0.004957f, 0.006631f, -0.048890f, -0.047119f, -0.026892f, -0.025571f, -0.021125f, 0.042773f, 0.014832f, -0.000921f, 0.032996f, 0.044164f, 0.017393f, 0.038087f, 0.006975f, 0.024993f, 0.174651f, -0.038902f, 0.034443f, 0.018613f, -0.022369f, 0.005515f, -0.104200f, 0.003588f, 0.030014f, 0.073157f, -0.026817f, 0.003431f, -0.040907f, -0.028105f, 0.015606f, 0.035053f, -0.033108f, 0.050426f, 0.023632f, -0.053973f, 0.041123f, -0.018613f, -0.024766f, 0.003021f, -0.030955f, 0.013914f, -0.011373f, + 0.051483f, -0.021920f, 0.003642f, 0.029699f, -0.082678f, 0.017110f, 0.033394f, -0.022306f, 0.027824f, -0.049103f, 0.059597f, 0.010195f, 0.015463f, -0.096871f, 0.097712f, 0.043472f, 0.036500f, 0.006297f, -0.051062f, 0.057169f, 0.003411f, -0.021959f, 0.100350f, -0.014359f, -0.033902f, -0.017377f, 0.018577f, 0.031256f, 0.033083f, 0.011036f, -0.008045f, -0.105756f, -0.004490f, 0.031735f, 0.009790f, 0.044607f, -0.049266f, 0.063817f, 0.014820f, 0.024390f, -0.049566f, -0.012708f, 0.018941f, 0.080199f, -0.021654f, 0.021997f, -0.043933f, 0.052307f, 0.037960f, 0.049521f, -0.005815f, 0.024062f, 0.020318f, -0.055909f, -0.043386f, 0.033578f, 0.039407f, 0.012493f, -0.004230f, -0.080879f, 0.082929f, -0.012228f, -0.013860f, -0.025895f, -0.003818f, -0.062962f, -0.120787f, 0.047959f, 0.041453f, -0.001133f, -0.020571f, -0.046935f, -0.002956f, -0.011562f, -0.021639f, 0.053968f, -0.106861f, -0.043824f, -0.053534f, -0.013432f, -0.079678f, -0.003606f, -0.006657f, 0.001228f, -0.007923f, -0.013081f, 0.020460f, 0.003484f, -0.031116f, -0.007528f, 0.006211f, -0.047550f, -0.020441f, -0.010876f, 0.011364f, 0.044507f, + -0.012666f, 0.084750f, -0.033719f, -0.001321f, 0.042207f, -0.030958f, 0.030604f, 0.009482f, -0.045676f, -0.077127f, -0.010433f, 0.026253f, 0.085190f, 0.037993f, -0.046653f, -0.018568f, -0.153465f, -0.049144f, 0.000245f, 0.041090f, 0.102515f, 0.002099f, -0.081946f, 0.012723f, 0.067241f, -0.011094f, 0.012056f, 0.064178f, 0.076536f, 0.143462f, -0.126578f, -0.016881f, 0.044960f, 0.051371f, -0.017465f, -0.037003f, -0.040830f, -0.048087f, 0.019982f, -0.049625f, 0.010467f, -0.020872f, -0.118035f, 0.025106f, -0.021075f, 0.033156f, -0.033344f, -0.034714f, 0.001501f, -0.050402f, 0.007408f, -0.050859f, -0.001865f, -0.010192f, -0.020142f, 0.022073f, -0.037552f, -0.049701f, -0.044508f, -0.058120f, -0.010050f, -0.007974f, 0.061940f, 0.011958f, -0.046060f, -0.069700f, 0.008514f, -0.003422f, 0.015840f, -0.015257f, 0.037665f, -0.046690f, -0.017813f, -0.064786f, -0.040054f, -0.020272f, 0.002201f, -0.028786f, 0.065460f, -0.025243f, -0.055342f, 0.014761f, 0.068228f, 0.046452f, 0.020770f, -0.050646f, -0.030270f, -0.007799f, 0.062566f, 0.114604f, 0.000267f, 0.019923f, -0.020965f, -0.118572f, -0.023400f, 0.006811f, + 0.045653f, 0.094347f, -0.051820f, -0.070867f, 0.042134f, 0.013945f, -0.019594f, -0.001969f, -0.032471f, 0.016936f, -0.092465f, -0.017691f, 0.011335f, 0.016017f, -0.051815f, 0.058315f, -0.086900f, -0.120947f, -0.089933f, 0.070259f, 0.021991f, -0.123160f, -0.021289f, -0.084652f, 0.038868f, 0.008121f, -0.169889f, 0.012673f, -0.051847f, -0.109360f, -0.085353f, -0.124875f, 0.078631f, -0.037172f, -0.098657f, -0.043216f, 0.032834f, -0.057655f, -0.050474f, -0.038225f, -0.023061f, -0.042184f, -0.043018f, -0.078661f, -0.057636f, -0.108469f, -0.061665f, -0.054031f, -0.017855f, -0.049695f, -0.009908f, -0.021814f, -0.000672f, 0.006967f, 0.015598f, 0.033938f, -0.029536f, 0.028949f, 0.004163f, 0.060177f, 0.025836f, 0.039136f, 0.036978f, -0.099652f, -0.025942f, 0.087514f, -0.012866f, -0.046923f, -0.056587f, -0.038064f, 0.035002f, 0.139683f, -0.007091f, 0.003811f, -0.088101f, -0.085603f, -0.017229f, 0.025826f, 0.082673f, 0.001941f, 0.075804f, 0.035264f, -0.085606f, 0.168710f, 0.006281f, 0.134208f, 0.003927f, -0.020722f, 0.070864f, -0.077137f, -0.110830f, -0.060115f, -0.250315f, -0.139622f, -0.043393f, 0.130960f, + -0.042926f, -0.105215f, 0.123646f, 0.117922f, -0.073501f, -0.096190f, 0.000500f, 0.105619f, -0.010368f, -0.006093f, -0.031676f, 0.092146f, -0.008922f, -0.024818f, -0.000820f, 0.025153f, 0.048902f, 0.000832f, -0.033884f, -0.041029f, 0.058711f, 0.003547f, -0.022528f, -0.061667f, 0.036670f, 0.018168f, -0.004724f, -0.049029f, 0.017420f, 0.019454f, 0.019610f, -0.031664f, -0.015588f, 0.003901f, 0.049724f, -0.015412f, 0.019790f, -0.070820f, -0.016138f, -0.001785f, 0.048739f, -0.098205f, -0.013759f, 0.007141f, 0.072808f, -0.035647f, 0.014515f, -0.051690f, 0.010674f, 0.017597f, -0.029617f, -0.028702f, 0.000384f, 0.008098f, 0.025720f, -0.025281f, 0.006330f, -0.089293f, 0.051469f, -0.018176f, 0.085632f, -0.053898f, 0.041436f, -0.038289f, 0.043133f, 0.002241f, 0.031142f, 0.016123f, -0.055953f, 0.065153f, 0.020536f, 0.034996f, -0.062260f, 0.013246f, -0.011461f, 0.005283f, -0.036363f, -0.080423f, -0.106846f, 0.077336f, 0.051170f, -0.061059f, -0.086913f, -0.042730f, 0.039703f, 0.020705f, 0.052928f, 0.057077f, 0.010857f, -0.029240f, -0.008831f, 0.019778f, -0.020140f, -0.001909f, 0.011458f, 0.002968f, + 0.031701f, 0.022176f, 0.009306f, -0.029190f, -0.001516f, -0.018176f, 0.018185f, -0.030558f, -0.026712f, 0.021737f, -0.007472f, -0.012587f, -0.012604f, -0.021310f, -0.029380f, 0.001965f, 0.023061f, 0.021281f, 0.017504f, -0.007086f, -0.024363f, -0.020906f, -0.015036f, 0.025499f, 0.034387f, -0.016514f, -0.025062f, -0.010779f, 0.028391f, 0.014799f, 0.038174f, -0.027634f, -0.011124f, 0.015168f, -0.008029f, 0.001118f, -0.004898f, 0.013636f, 0.007500f, 0.011003f, 0.001545f, -0.026378f, 0.010053f, 0.004804f, -0.001818f, 0.020301f, -0.011434f, -0.005191f, 0.002642f, -0.003663f, 0.001757f, -0.007383f, 0.033686f, 0.009167f, -0.003437f, 0.034109f, 0.031288f, 0.037284f, -0.087947f, -0.232823f, -0.085079f, 0.042633f, 0.122308f, 0.257362f, 0.172545f, 0.044916f, 0.065910f, -0.033593f, -0.103626f, -0.172790f, -0.150094f, -0.119326f, -0.033746f, 0.005284f, 0.084367f, 0.092699f, 0.196837f, 0.095764f, 0.063632f, -0.004297f, -0.040842f, -0.093707f, -0.048030f, -0.075674f, -0.086984f, -0.053581f, -0.044347f, -0.002831f, 0.025517f, 0.073841f, 0.046360f, 0.053130f, 0.048904f, 0.048832f, 0.073825f, 0.006732f, + 0.051528f, -0.008920f, -0.021439f, -0.060979f, -0.035337f, -0.091169f, -0.133441f, -0.117406f, 0.002733f, -0.019758f, 0.038360f, 0.063505f, 0.036201f, 0.097785f, 0.086840f, 0.123480f, 0.071940f, 0.083690f, 0.005971f, 0.004025f, -0.064004f, -0.108015f, -0.123814f, -0.151583f, -0.096997f, -0.124097f, -0.007665f, -0.001170f, 0.062647f, 0.061494f, 0.153127f, 0.116142f, 0.171448f, 0.066082f, 0.083899f, 0.030162f, 0.007428f, -0.103700f, -0.130423f, -0.054680f, -0.037216f} + }, + { + {-0.011648f, 0.011284f, -0.008970f, 0.013289f, -0.002614f, -0.008362f, 0.002620f, 0.006764f, -0.003104f, 0.001663f, 0.006230f, -0.009285f, -0.006331f, -0.001735f, -0.005665f, 0.017967f, -0.007115f, 0.017668f, 0.005119f, 0.005993f, -0.002325f, -0.003817f, -0.006236f, -0.008200f, 0.000229f, 0.007699f, 0.000643f, 0.000997f, -0.004656f, 0.005098f, 0.007054f, 0.000604f, -0.003833f, -0.009288f, 0.006245f, -0.001724f, 0.007158f, -0.003047f, 0.001299f, 0.003204f, -0.005192f, 0.000033f, -0.009129f, 0.012456f, -0.000132f, 0.001842f, -0.001141f, -0.010910f, -0.002817f, -0.003217f, 0.000880f, 0.001760f, 0.006378f, 0.002867f, -0.004297f, -0.006640f, 0.003219f, -0.003981f, -0.002069f, 0.007896f, -0.004392f, 0.005589f, -0.007763f, 0.004229f, -0.008993f, 0.004500f, -0.006026f, -0.003205f, 0.009115f, 0.004184f, 0.004955f, -0.001339f, 0.000714f, 0.002010f, 0.002247f, 0.003204f, 0.014190f, 0.001462f, -0.003918f, -0.004082f, 0.002412f, -0.006932f, -0.000176f, -0.013457f, 0.009548f, 0.012169f, 0.008445f, 0.011981f, -0.014495f, 0.001142f, 0.003207f, -0.005158f, -0.004050f, -0.003528f, -0.016977f, -0.002848f, + 0.009932f, -0.017283f, -0.014151f, 0.008176f, 0.007294f, -0.011095f, -0.003992f, 0.007364f, 0.000818f, 0.008956f, 0.003698f, 0.009335f, -0.005982f, 0.001815f, 0.001147f, -0.002432f, 0.004184f, 0.003456f, 0.006160f, 0.002709f, -0.002956f, 0.000672f, 0.006885f, -0.001834f, -0.003393f, -0.001110f, -0.008729f, -0.018745f, 0.010999f, 0.005545f, -0.006110f, 0.008387f, -0.003538f, 0.001051f, -0.000532f, 0.003993f, -0.005231f, -0.001122f, 0.010855f, -0.010291f, -0.004502f, 0.003860f, 0.001495f, -0.001373f, -0.000868f, 0.005167f, 0.000174f, 0.004657f, -0.007897f, 0.008005f, 0.003438f, -0.009245f, 0.007224f, 0.001331f, 0.002191f, -0.000255f, -0.003723f, 0.022370f, -0.012703f, 0.004019f, -0.014055f, 0.001817f, 0.003405f, -0.014149f, -0.017951f, 0.004631f, -0.019487f, 0.004445f, -0.005019f, -0.001215f, -0.011922f, -0.001597f, -0.013400f, -0.006780f, 0.000135f, -0.014106f, 0.015238f, 0.005504f, -0.023579f, 0.002422f, -0.001226f, -0.004100f, -0.010050f, 0.005283f, 0.012350f, 0.000450f, -0.000828f, 0.011739f, -0.006692f, 0.000377f, -0.004232f, 0.007879f, -0.008865f, 0.002882f, 0.010850f, -0.009099f, + 0.009501f, 0.003605f, 0.010272f, -0.000563f, 0.002400f, -0.001208f, -0.004211f, 0.013704f, -0.016470f, 0.004207f, -0.007231f, -0.002770f, -0.002054f, -0.005582f, -0.004344f, -0.012718f, -0.008175f, -0.001531f, 0.008735f, -0.000148f, 0.003379f, 0.012678f, -0.000114f, -0.009715f, -0.001154f, 0.001185f, 0.003481f, -0.004173f, 0.000268f, -0.009196f, 0.000519f, -0.002914f, 0.003765f, 0.006887f, 0.008339f, 0.004815f, -0.003680f, -0.002774f, -0.005813f, -0.018890f, -0.000672f, -0.011567f, -0.003959f, -0.002269f, -0.013408f, -0.002234f, -0.003468f, 0.005970f, 0.014662f, 0.014738f, 0.001360f, -0.006955f, 0.005633f, -0.015180f, -0.002546f, -0.006092f, 0.004693f, -0.022394f, 0.007310f, 0.003260f, -0.001234f, -0.006766f, -0.009886f, -0.004775f, -0.008228f, -0.007160f, 0.003681f, -0.001913f, -0.008827f, -0.002894f, 0.001289f, 0.013888f, -0.000963f, -0.014902f, 0.000728f, 0.005808f, -0.000580f, -0.004971f, 0.000808f, 0.005042f, -0.016112f, -0.001621f, -0.007217f, 0.010663f, 0.006356f, 0.001502f, -0.014900f, 0.001289f, 0.005247f, 0.008578f, 0.008001f, -0.009870f, -0.004821f, 0.000145f, -0.003299f, -0.003253f, + 0.007476f, -0.005041f, 0.004484f, 0.001131f, -0.006355f, -0.001494f, -0.008606f, 0.010069f, 0.003631f, -0.009938f, -0.006994f, 0.001869f, 0.005292f, -0.007561f, -0.009855f, -0.001050f, 0.000937f, -0.005464f, -0.031614f, 0.009873f, 0.008831f, 0.014907f, -0.004165f, 0.009242f, -0.027259f, -0.007708f, 0.008280f, 0.000679f, -0.013560f, -0.003826f, -0.004619f, -0.024049f, -0.009753f, 0.002035f, -0.001222f, -0.017275f, 0.010436f, 0.014601f, -0.015500f, 0.011280f, -0.020250f, -0.007283f, -0.001873f, 0.006506f, -0.000153f, -0.008628f, 0.005509f, 0.002294f, -0.001351f, 0.008534f, -0.004343f, -0.006298f, -0.001771f, -0.003820f, -0.005903f, 0.008346f, -0.006722f, 0.001978f, 0.006755f, -0.001898f, -0.005129f, -0.010465f, -0.001027f, -0.007642f, -0.001951f, -0.008812f, -0.001982f, 0.017687f, 0.000654f, 0.010503f, -0.009888f, 0.008698f, -0.002551f, -0.015595f, -0.008403f, 0.007610f, -0.004962f, -0.008283f, 0.005992f, -0.009636f, 0.008049f, 0.001286f, -0.002058f, 0.008997f, 0.009579f, 0.003127f, -0.008735f, -0.011693f, 0.000324f, 0.013779f, 0.004200f, 0.001463f, -0.006579f, 0.001566f, -0.018418f, -0.017598f, + -0.012173f, 0.000323f, -0.004313f, 0.004870f, -0.007396f, -0.001664f, -0.000450f, -0.006445f, -0.003407f, 0.002327f, -0.006311f, 0.016961f, -0.013829f, 0.006928f, -0.004792f, -0.003004f, -0.010263f, -0.004129f, -0.002769f, 0.011859f, -0.010858f, -0.000545f, 0.001081f, -0.015125f, -0.009713f, -0.010909f, -0.009298f, -0.017278f, -0.006874f, 0.003750f, 0.008959f, 0.004818f, -0.013887f, -0.019276f, -0.005354f, -0.001328f, -0.010396f, -0.000252f, -0.007547f, -0.010989f, -0.023087f, -0.012760f, -0.016631f, 0.006780f, -0.005417f, 0.005126f, -0.010189f, -0.023013f, -0.012653f, -0.000962f, -0.005782f, -0.008930f, -0.004633f, -0.010339f, 0.009743f, -0.001079f, 0.005051f, 0.006632f, 0.000728f, -0.002522f, -0.008782f, -0.001877f, 0.008026f, -0.003891f, -0.008523f, -0.012064f, 0.014183f, -0.015387f, -0.019642f, -0.015271f, -0.008821f, -0.012586f, 0.010033f, 0.015686f, -0.015622f, 0.004637f, -0.034126f, 0.010989f, -0.002188f, 0.006497f, 0.019083f, 0.007853f, -0.004503f, 0.006871f, -0.014076f, 0.009305f, 0.010392f, -0.018189f, -0.003961f, -0.008895f, 0.010578f, 0.009839f, 0.014311f, 0.017324f, -0.021712f, -0.010424f, + 0.003438f, 0.019340f, -0.007223f, 0.009440f, -0.020897f, -0.005404f, -0.007520f, -0.003501f, -0.012836f, 0.004033f, -0.020841f, 0.015163f, -0.004441f, -0.002609f, 0.009889f, 0.000454f, 0.001833f, 0.012139f, -0.000295f, 0.010193f, 0.005382f, -0.001321f, -0.004280f, 0.000071f, -0.015173f, -0.009189f, -0.014010f, 0.000584f, 0.026352f, 0.007824f, 0.004236f, 0.000913f, -0.004958f, 0.001405f, 0.015070f, -0.001772f, 0.003738f, -0.029676f, 0.027473f, -0.005105f, -0.006830f, 0.003700f, 0.015915f, 0.008631f, -0.005012f, -0.008463f, 0.028748f, -0.003454f, -0.003005f, 0.012734f, -0.010939f, 0.003082f, 0.000710f, -0.003357f, 0.001209f, 0.010249f, 0.000448f, -0.001398f, 0.015426f, 0.008932f, 0.017091f, -0.006038f, -0.003442f, 0.010161f, -0.014806f, 0.014392f, 0.016179f, -0.007228f, -0.000869f, -0.024026f, 0.001610f, 0.009176f, 0.007300f, -0.004532f, -0.016391f, -0.033361f, 0.000937f, -0.005060f, -0.015802f, 0.004523f, 0.011224f, -0.014024f, -0.005972f, -0.015345f, 0.008477f, 0.001738f, -0.002111f, -0.004532f, -0.006727f, 0.018253f, 0.020546f, 0.008774f, 0.009896f, -0.003618f, -0.009995f, 0.029238f, + 0.007210f, -0.003867f, -0.016483f, 0.013242f, 0.000621f, 0.017299f, -0.001360f, 0.021172f, 0.010102f, 0.015171f, 0.011907f, 0.007207f, 0.015615f, 0.020727f, -0.000656f, 0.004848f, -0.006393f, 0.001092f, 0.010449f, 0.005824f, 0.005509f, -0.015847f, -0.006725f, -0.002119f, -0.015534f, -0.012755f, -0.010091f, 0.009833f, 0.015843f, 0.023667f, 0.027446f, 0.008517f, 0.001241f, 0.025457f, -0.010718f, 0.026713f, -0.024507f, -0.011325f, -0.002906f, 0.010462f, -0.022870f, 0.015123f, -0.022511f, 0.011669f, 0.000416f, 0.012346f, 0.019505f, -0.007450f, 0.017873f, 0.019297f, 0.018578f, -0.010161f, 0.015769f, -0.016107f, -0.012509f, -0.001761f, -0.009525f, 0.000095f, -0.008094f, 0.015154f, -0.010432f, 0.003505f, -0.010274f, -0.018928f, -0.008277f, -0.003839f, 0.023789f, -0.019217f, 0.018897f, 0.008177f, -0.026162f, 0.030951f, 0.008310f, 0.003562f, 0.022379f, 0.003950f, 0.001737f, -0.012165f, 0.000725f, -0.006771f, 0.025482f, 0.010476f, 0.018131f, -0.006698f, -0.003217f, 0.011929f, 0.021444f, -0.021474f, 0.022221f, 0.003884f, -0.002501f, -0.004023f, -0.019238f, 0.009729f, -0.008509f, 0.004092f, + 0.001987f, -0.018366f, 0.007336f, 0.015529f, -0.012906f, 0.009888f, 0.007729f, 0.021851f, 0.003674f, -0.001217f, 0.014666f, 0.019537f, 0.003154f, -0.009770f, 0.014567f, -0.011277f, -0.021309f, -0.015246f, 0.023036f, -0.029635f, 0.007369f, -0.015769f, 0.017486f, -0.018800f, 0.028616f, 0.009998f, 0.002638f, -0.024887f, 0.012551f, 0.021187f, 0.005402f, -0.012727f, -0.008531f, -0.007223f, 0.019388f, 0.010799f, -0.027587f, 0.004031f, -0.019603f, -0.000883f, 0.001947f, -0.016331f, 0.021398f, 0.022002f, -0.010190f, 0.005035f, 0.014440f, -0.017744f, -0.003093f, -0.005233f, -0.015303f, 0.032108f, -0.011935f, -0.006719f, -0.016410f, -0.026294f, -0.004679f, 0.000953f, -0.009698f, 0.004470f, -0.022603f, 0.002496f, 0.001039f, -0.003835f, 0.016924f, -0.002991f, -0.014181f, 0.007791f, -0.000631f, -0.009394f, 0.008070f, 0.038508f, -0.008231f, 0.009913f, 0.001311f, -0.024518f, -0.004949f, 0.023995f, 0.009444f, 0.023977f, -0.003221f, 0.014606f, -0.019007f, 0.009845f, 0.006948f, 0.004726f, -0.016433f, 0.016688f, 0.003860f, -0.036575f, 0.001926f, -0.002558f, 0.025338f, -0.045755f, 0.053303f, 0.006937f, + 0.021482f, -0.037400f, 0.021553f, 0.027842f, -0.030505f, 0.012646f, 0.016188f, 0.012711f, -0.019460f, 0.003397f, 0.004280f, -0.006062f, 0.012499f, 0.025024f, -0.018775f, -0.015464f, -0.005223f, 0.021329f, 0.018500f, 0.025918f, -0.000512f, 0.011383f, -0.018056f, -0.004160f, -0.004179f, 0.004868f, 0.012518f, 0.032918f, 0.019838f, 0.012445f, 0.006797f, -0.000317f, 0.016042f, -0.004939f, -0.026931f, -0.004613f, 0.008781f, 0.009562f, -0.015494f, -0.011491f, -0.019350f, 0.004605f, -0.000939f, 0.007763f, -0.012470f, 0.024220f, 0.023600f, -0.019149f, 0.047907f, 0.002897f, -0.003714f, 0.000457f, -0.009216f, -0.001405f, -0.002408f, -0.018395f, 0.000930f, 0.000778f, 0.013156f, -0.039057f, 0.010343f, -0.013372f, 0.029480f, 0.035639f, 0.015669f, 0.015273f, 0.007045f, 0.003166f, 0.031949f, -0.004941f, -0.023044f, 0.021227f, -0.010811f, 0.007919f, 0.018371f, 0.002937f, -0.014087f, 0.011698f, 0.017808f, 0.015487f, 0.009377f, 0.018632f, -0.024308f, -0.015590f, 0.001732f, -0.021820f, -0.006200f, -0.004192f, 0.003737f, -0.006057f, -0.014735f, -0.017842f, -0.011399f, 0.007959f, 0.013515f, -0.026029f, + 0.004318f, -0.003176f, -0.001794f, -0.031196f, -0.028737f, -0.005254f, -0.022574f, 0.009690f, -0.025607f, 0.001191f, 0.011830f, 0.018440f, -0.017904f, 0.022013f, 0.004404f, -0.002478f, -0.006248f, 0.032874f, -0.010584f, -0.001829f, -0.027990f, -0.015091f, 0.020256f, -0.001741f, 0.006746f, -0.025636f, -0.029528f, -0.007648f, -0.017356f, -0.002684f, -0.000358f, -0.010209f, -0.014882f, 0.008084f, -0.013975f, 0.001353f, -0.019852f, -0.009460f, -0.002229f, -0.029463f, 0.000936f, 0.020191f, 0.001882f, 0.010944f, 0.019504f, 0.037424f, -0.037404f, 0.007247f, -0.023869f, -0.020423f, -0.013890f, -0.015401f, -0.012228f, -0.009372f, 0.034776f, 0.035439f, 0.037642f, 0.041556f, -0.033678f, 0.000814f, 0.021599f, 0.016797f, -0.020402f, -0.037313f, -0.005875f, -0.006805f, -0.029910f, -0.017737f, 0.051726f, 0.002788f, 0.001870f, 0.018615f, -0.004132f, 0.007179f, -0.009217f, -0.022576f, 0.012103f, 0.010347f, -0.030626f, -0.042140f, -0.033571f, -0.026437f, -0.025917f, 0.001022f, 0.004955f, 0.010887f, -0.017971f, 0.014364f, 0.001655f, -0.009035f, -0.018980f, -0.001770f, -0.001232f, -0.027201f, -0.022585f, 0.001820f, + -0.006968f, 0.002402f, -0.018085f, 0.011613f, 0.001590f, -0.015959f, -0.034275f, -0.013687f, -0.013253f, -0.043429f, -0.015926f, 0.002884f, 0.018268f, -0.003090f, 0.022032f, -0.005429f, -0.004936f, -0.037126f, -0.010635f, 0.013142f, 0.003667f, -0.061414f, 0.014047f, 0.004184f, -0.020287f, -0.011303f, -0.021263f, -0.020922f, -0.004833f, -0.000254f, -0.023686f, -0.007459f, 0.006844f, 0.016125f, 0.020424f, -0.022509f, 0.014579f, -0.012800f, 0.041821f, -0.036233f, -0.022307f, -0.007613f, -0.068133f, -0.035845f, -0.000307f, -0.043701f, 0.033556f, -0.015635f, -0.014121f, 0.003428f, 0.077011f, 0.036733f, 0.002353f, 0.015333f, -0.003592f, -0.021210f, -0.002047f, -0.032564f, -0.023128f, 0.010417f, 0.011236f, 0.013188f, -0.022168f, 0.027811f, 0.017528f, 0.031512f, -0.032646f, 0.004498f, 0.047898f, 0.003654f, 0.002104f, 0.008566f, -0.045647f, 0.010782f, -0.011398f, 0.006569f, -0.018251f, -0.044272f, -0.002440f, 0.016396f, 0.021524f, 0.004369f, -0.006523f, 0.001926f, -0.001738f, 0.013044f, -0.032409f, -0.048899f, 0.008762f, -0.018802f, 0.028638f, -0.012899f, -0.011548f, 0.035419f, 0.008607f, 0.014187f, + 0.003217f, -0.033205f, -0.012605f, -0.005751f, 0.017141f, 0.046740f, 0.037835f, -0.013537f, -0.043035f, -0.003377f, -0.004809f, 0.013340f, -0.026463f, -0.036226f, -0.018575f, 0.012889f, -0.032106f, -0.075206f, 0.032012f, 0.026643f, -0.009195f, -0.048985f, -0.009111f, -0.017557f, -0.018544f, 0.024691f, 0.030063f, -0.000704f, 0.009838f, -0.055931f, 0.022707f, -0.070536f, -0.016127f, -0.004123f, 0.016783f, 0.038793f, 0.060433f, 0.026345f, -0.031272f, 0.010074f, 0.042995f, 0.007682f, 0.014789f, 0.024337f, -0.031706f, -0.010852f, -0.002866f, 0.012751f, -0.021504f, -0.010536f, -0.004665f, -0.015627f, -0.011100f, 0.027197f, 0.026994f, 0.008795f, 0.004865f, 0.044417f, -0.004926f, 0.022219f, -0.044209f, 0.034113f, 0.012094f, -0.039953f, 0.007628f, 0.016701f, -0.036876f, -0.002107f, -0.035842f, 0.016392f, 0.020291f, 0.021056f, -0.022611f, 0.001260f, 0.030597f, -0.018324f, 0.004708f, 0.000414f, 0.048408f, -0.021612f, 0.037298f, 0.020908f, -0.035105f, 0.040777f, -0.023737f, 0.028610f, 0.037403f, -0.024213f, 0.025619f, -0.018524f, -0.022113f, -0.039244f, -0.026227f, -0.027973f, 0.023939f, 0.015193f, + -0.058604f, -0.026333f, -0.027494f, 0.056182f, 0.004262f, 0.022626f, -0.006072f, 0.078559f, 0.014637f, -0.048164f, 0.006360f, 0.058383f, -0.018034f, 0.014984f, -0.006581f, 0.007374f, -0.029992f, -0.041497f, 0.072453f, 0.052192f, -0.016503f, 0.040619f, 0.017604f, 0.052069f, 0.059017f, -0.014068f, -0.010735f, 0.052562f, 0.039348f, 0.006440f, -0.013310f, -0.022608f, -0.023633f, 0.025515f, 0.046752f, 0.023045f, -0.005595f, 0.031939f, -0.013195f, 0.030375f, -0.010213f, 0.043252f, 0.075293f, 0.057548f, -0.057052f, 0.029091f, -0.007838f, -0.022322f, 0.001440f, 0.022468f, 0.022152f, 0.134859f, -0.011360f, 0.000157f, -0.019677f, -0.022234f, 0.027853f, 0.049361f, -0.009988f, 0.037625f, 0.032900f, -0.003388f, 0.002617f, -0.025421f, 0.027725f, 0.022308f, 0.071946f, 0.071653f, 0.088321f, 0.035207f, -0.021872f, -0.020415f, -0.040095f, 0.034861f, -0.059386f, 0.032090f, -0.040868f, 0.027728f, 0.023143f, -0.023509f, 0.006163f, 0.013211f, -0.012060f, 0.040350f, 0.008623f, -0.099482f, 0.021730f, 0.011199f, -0.073518f, 0.002556f, -0.013075f, 0.001178f, 0.026193f, -0.005490f, -0.067764f, -0.014030f, + -0.021814f, -0.005962f, 0.047407f, 0.054925f, -0.032774f, -0.010649f, -0.027466f, 0.011522f, -0.051643f, -0.102789f, -0.035835f, -0.033082f, 0.005351f, -0.001369f, 0.045680f, -0.071589f, 0.032842f, -0.019259f, -0.007251f, 0.024572f, 0.013585f, 0.043858f, 0.011305f, 0.014387f, 0.051435f, -0.062324f, 0.073187f, 0.053234f, 0.030725f, 0.049398f, -0.020246f, 0.015587f, -0.049816f, -0.015328f, -0.024597f, 0.039194f, -0.038729f, 0.003611f, -0.084199f, -0.112088f, 0.071669f, -0.010140f, 0.046704f, -0.039527f, 0.031382f, -0.029035f, 0.007851f, -0.020849f, -0.067873f, -0.031629f, -0.044848f, -0.032858f, 0.026591f, 0.090279f, 0.038233f, -0.105260f, -0.019137f, 0.003247f, -0.028560f, 0.003880f, 0.002866f, -0.063338f, 0.028607f, 0.028583f, 0.053170f, -0.030627f, 0.017474f, -0.034741f, -0.039901f, 0.013212f, 0.071588f, 0.118022f, -0.010788f, -0.011225f, -0.000715f, -0.005902f, -0.057303f, 0.081565f, 0.037400f, 0.041841f, 0.031397f, -0.027861f, 0.026021f, -0.051147f, -0.072292f, -0.015276f, 0.047998f, 0.030069f, -0.028223f, -0.019400f, -0.007089f, 0.038125f, -0.001992f, 0.026753f, 0.025930f, 0.045650f, + 0.012516f, -0.034874f, -0.033552f, 0.024319f, -0.037385f, -0.028787f, 0.010303f, 0.050081f, 0.045522f, -0.061417f, -0.048842f, 0.025017f, 0.030301f, 0.101976f, -0.029827f, -0.062890f, -0.065508f, 0.045937f, -0.044151f, 0.042776f, 0.048419f, 0.104012f, 0.226360f, -0.058127f, -0.036614f, -0.093781f, -0.146453f, -0.051414f, -0.078306f, 0.000161f, 0.087157f, -0.022999f, 0.040327f, 0.062837f, 0.034932f, -0.038944f, -0.102290f, -0.155955f, 0.055147f, -0.027580f, 0.028177f, -0.051275f, 0.004444f, -0.047094f, -0.122481f, 0.025519f, -0.053726f, 0.044832f, 0.002821f, 0.023193f, 0.019576f, -0.112255f, -0.081035f, -0.042082f, -0.028310f, -0.029264f, -0.048709f, -0.017867f, -0.077965f, -0.050862f, 0.030685f, -0.051896f, 0.086293f, -0.071774f, 0.002252f, 0.014649f, -0.011956f, 0.003904f, -0.008719f, 0.017635f, -0.025966f, -0.026841f, -0.008869f, 0.012170f, -0.007863f, 0.034880f, -0.041887f, 0.004156f, 0.051858f, 0.014086f, 0.003326f, 0.024812f, -0.001710f, -0.027474f, -0.020191f, 0.041945f, 0.004873f, -0.077483f, -0.038025f, -0.063777f, -0.032735f, 0.074059f, 0.067449f, -0.080411f, -0.014380f, -0.090943f, + -0.026915f, -0.012198f, 0.013519f, 0.037878f, -0.077075f, 0.041432f, -0.066816f, -0.016213f, -0.047709f, 0.083882f, -0.025627f, 0.056397f, 0.052036f, 0.124278f, -0.069317f, 0.044401f, 0.000322f, 0.038715f, 0.008954f, 0.020835f, -0.076612f, -0.092757f, 0.064941f, 0.015847f, -0.099465f, -0.040079f, -0.058886f, 0.010365f, -0.008267f, -0.137169f, -0.058065f, -0.031168f, -0.069307f, -0.041272f, -0.137523f, -0.115967f, -0.014909f, 0.058285f, -0.072340f, -0.041580f, -0.004237f, -0.061975f, -0.008155f, 0.000302f, -0.058151f, -0.011891f, 0.020956f, 0.008737f, -0.079506f, -0.044185f, -0.042047f, -0.022374f, -0.023162f, -0.003809f, -0.052730f, 0.055338f, 0.040621f, 0.076730f, 0.112447f, 0.095620f, 0.031096f, 0.100658f, 0.046455f, 0.021398f, -0.034838f, 0.037744f, 0.042998f, 0.031541f, -0.003180f, -0.029384f, -0.007284f, 0.027409f, 0.050805f, 0.223017f, 0.037846f, 0.048022f, 0.040343f, 0.092295f, 0.042807f, 0.080931f, 0.151782f, -0.067981f, -0.133001f, 0.018387f, 0.097766f, 0.160965f, 0.078871f, -0.139507f, 0.026157f, -0.036299f, 0.209897f, 0.146306f, 0.188038f, 0.161746f, -0.138828f, -0.102448f, + 0.123018f, 0.132031f, -0.035273f, -0.103911f, 0.166844f, 0.135215f, -0.117007f, 0.026633f, -0.003163f, 0.019502f, -0.005184f, -0.010646f, 0.042177f, -0.042129f, 0.041001f, -0.015869f, -0.001014f, 0.018027f, 0.012191f, 0.016586f, -0.001650f, -0.022707f, -0.017363f, 0.028815f, -0.023967f, -0.000696f, 0.023826f, -0.011823f, -0.017035f, -0.018077f, -0.040115f, -0.035155f, 0.025056f, -0.010932f, 0.007500f, -0.020733f, 0.001759f, -0.047220f, -0.012310f, 0.017290f, 0.029106f, -0.016991f, 0.003502f, 0.026149f, 0.031796f, -0.004443f, 0.025466f, -0.019622f, 0.089666f, -0.030331f, 0.027955f, 0.009087f, 0.013708f, -0.012580f, 0.020054f, -0.004720f, 0.061847f, -0.005403f, 0.015473f, -0.040923f, 0.055934f, -0.026208f, -0.008116f, -0.002714f, 0.003171f, -0.011651f, 0.030993f, -0.035540f, 0.028741f, -0.031665f, 0.044803f, -0.045270f, 0.058688f, -0.034638f, -0.027774f, -0.018251f, -0.016639f, 0.012360f, -0.041343f, -0.085008f, -0.093494f, 0.078752f, 0.019599f, -0.024894f, -0.126556f, -0.051101f, 0.069887f, 0.013946f, 0.050368f, 0.056241f, -0.020833f, -0.035947f, 0.001290f, 0.013060f, 0.010027f, 0.009041f, + -0.022694f, -0.016734f, -0.012764f, -0.000259f, 0.033771f, 0.018139f, -0.002006f, 0.007388f, -0.010175f, -0.016778f, -0.010865f, -0.008892f, 0.000311f, 0.009855f, -0.008045f, 0.012808f, 0.013405f, -0.046507f, -0.020816f, -0.020647f, 0.024540f, 0.017100f, -0.001720f, -0.021646f, -0.029286f, 0.025369f, 0.005536f, 0.017041f, 0.023688f, -0.042918f, -0.028557f, 0.007939f, 0.034722f, 0.017627f, -0.048694f, -0.029919f, -0.039427f, -0.018669f, 0.010631f, 0.009327f, -0.015825f, 0.018408f, -0.006694f, -0.016609f, 0.008539f, 0.017021f, -0.011135f, 0.004668f, 0.000905f, -0.014388f, 0.000345f, -0.004286f, -0.032472f, -0.033652f, 0.000785f, -0.035543f, -0.023894f, 0.004176f, 0.019253f, 0.006571f, 0.031948f, -0.082632f, -0.223568f, -0.085593f, 0.049960f, 0.106335f, 0.252281f, 0.147720f, 0.039761f, 0.051937f, -0.044483f, -0.082948f, -0.179805f, -0.121924f, -0.093204f, -0.031446f, 0.036222f, 0.097462f, 0.076179f, 0.094545f, 0.092082f, 0.061477f, -0.021524f, -0.074287f, -0.063549f, -0.066270f, -0.052495f, -0.076649f, 0.022908f, -0.048992f, 0.003335f, 0.033591f, 0.064612f, 0.035067f, 0.060536f, 0.078395f, + 0.001525f, 0.022291f, 0.001870f, -0.002819f, -0.044474f, -0.007536f, -0.039473f, -0.079212f, -0.122084f, -0.069885f, -0.036910f, 0.008146f, 0.009865f, 0.071029f, 0.101695f, 0.095359f, 0.116421f, 0.015026f, 0.076830f, 0.028255f, -0.005714f, -0.072966f, -0.068376f, -0.096427f, -0.122640f, -0.086457f, -0.094367f, -0.062632f, 0.002650f, 0.028317f, 0.071975f, 0.110495f, 0.168113f, 0.131126f, 0.124086f, 0.064861f, -0.018311f, -0.022329f, -0.055011f, -0.130740f, -0.087548f, -0.121066f, -0.032746f, -0.016849f}, + {-0.011529f, 0.010633f, -0.010855f, 0.008283f, -0.004712f, 0.002128f, -0.015443f, 0.008527f, 0.002102f, -0.000520f, -0.002793f, 0.006484f, -0.008040f, -0.001722f, -0.003263f, 0.006761f, -0.017150f, -0.004849f, -0.009769f, -0.004507f, 0.003563f, 0.002620f, 0.008341f, -0.013277f, 0.003993f, 0.001405f, 0.000761f, -0.005464f, -0.001490f, -0.007098f, -0.000907f, -0.009698f, 0.003179f, -0.010750f, -0.000954f, -0.009158f, -0.007333f, 0.001503f, -0.008120f, -0.010336f, -0.012650f, 0.003362f, -0.001474f, -0.002550f, 0.004997f, 0.003713f, -0.004920f, 0.000104f, 0.013474f, -0.006885f, -0.004400f, -0.010331f, -0.003020f, 0.005821f, 0.003213f, 0.003298f, -0.004866f, 0.004193f, -0.005892f, 0.000671f, -0.007184f, -0.000806f, 0.000472f, -0.007504f, -0.002781f, 0.001088f, -0.001091f, -0.008434f, -0.015750f, -0.006711f, -0.005645f, -0.001976f, -0.000442f, -0.003701f, -0.004485f, -0.001071f, 0.014918f, 0.009490f, 0.000155f, 0.000351f, 0.011754f, 0.002780f, -0.005978f, 0.003841f, 0.007820f, -0.004198f, -0.006590f, -0.023726f, 0.001219f, -0.008144f, 0.015677f, -0.008043f, 0.007866f, 0.006072f, -0.000808f, 0.004838f, + 0.008711f, 0.002063f, 0.002071f, -0.004613f, -0.005106f, -0.004348f, -0.006433f, 0.005301f, 0.003468f, -0.003461f, 0.005213f, -0.003945f, -0.005081f, -0.006645f, -0.002862f, -0.005365f, 0.000569f, -0.000406f, -0.000746f, 0.010244f, -0.006036f, 0.008259f, -0.002976f, -0.002805f, 0.006125f, -0.004256f, 0.002083f, -0.004288f, 0.006729f, -0.002576f, -0.018098f, 0.004761f, 0.000936f, 0.001513f, 0.009554f, 0.003992f, 0.000999f, -0.002927f, -0.005724f, 0.014849f, -0.007945f, 0.005182f, 0.003596f, -0.007501f, 0.007038f, 0.001887f, -0.007249f, 0.004963f, -0.007467f, -0.000761f, -0.000336f, 0.005636f, 0.001644f, 0.005866f, -0.002306f, -0.017655f, -0.003314f, 0.028867f, -0.013865f, 0.001845f, -0.000604f, -0.000574f, 0.006758f, -0.004883f, -0.020295f, -0.018666f, 0.009157f, -0.005720f, -0.001511f, 0.005108f, 0.001291f, 0.005050f, 0.005567f, -0.008738f, 0.005110f, 0.003647f, -0.006152f, 0.007770f, 0.011505f, -0.007062f, -0.002183f, 0.000859f, -0.011924f, -0.005192f, 0.001459f, 0.014840f, -0.002110f, -0.000499f, -0.011874f, 0.007492f, 0.000242f, -0.010524f, -0.004403f, 0.004124f, -0.001408f, 0.002469f, + -0.009149f, 0.000146f, 0.000889f, -0.003441f, 0.010291f, 0.002945f, 0.002513f, 0.010119f, -0.000742f, 0.013038f, -0.003957f, -0.015533f, 0.006750f, 0.006766f, -0.005339f, -0.001924f, -0.001653f, 0.002558f, 0.001041f, 0.005078f, -0.003322f, 0.003621f, -0.008362f, 0.000339f, 0.006135f, -0.007546f, -0.000545f, 0.005809f, 0.002045f, -0.003359f, 0.003422f, -0.002157f, 0.001543f, 0.009529f, 0.003726f, -0.009693f, 0.014725f, 0.006929f, -0.006647f, -0.016420f, -0.001734f, 0.002069f, 0.018676f, -0.006742f, 0.016040f, 0.004241f, -0.000290f, 0.001268f, 0.014371f, -0.002989f, -0.003621f, -0.003786f, 0.010196f, 0.020530f, 0.005536f, -0.013626f, -0.018684f, -0.026592f, 0.003764f, -0.006697f, -0.011081f, -0.005867f, -0.017312f, 0.000271f, -0.007909f, 0.001689f, 0.008661f, 0.009253f, -0.009769f, -0.008570f, -0.006128f, 0.001530f, -0.014651f, -0.001206f, 0.004871f, -0.006307f, -0.002211f, 0.002018f, 0.006251f, -0.007893f, 0.002437f, 0.020173f, -0.000558f, -0.000440f, -0.006990f, 0.008737f, -0.003380f, 0.001293f, 0.006536f, 0.008750f, 0.012399f, -0.001299f, 0.002091f, -0.002974f, 0.000156f, -0.001353f, + 0.001939f, 0.019676f, -0.020647f, 0.001294f, 0.004474f, 0.012065f, -0.004220f, -0.004587f, -0.000759f, -0.004180f, 0.015651f, -0.007136f, -0.019162f, -0.000035f, -0.005115f, -0.006758f, 0.005989f, -0.017761f, -0.030608f, 0.011630f, -0.009478f, 0.013037f, -0.011447f, -0.000902f, 0.009059f, -0.017634f, -0.002920f, 0.005577f, -0.004708f, 0.026070f, -0.010741f, -0.003125f, -0.010242f, -0.008512f, 0.013444f, 0.014972f, 0.005861f, -0.017277f, -0.020926f, 0.019640f, 0.003394f, -0.019559f, 0.007500f, 0.000902f, 0.009466f, -0.005673f, 0.009039f, -0.011623f, 0.005887f, 0.019247f, 0.008007f, 0.008357f, 0.004461f, 0.000533f, -0.004717f, 0.004186f, 0.001625f, -0.012795f, 0.000359f, -0.003907f, -0.009410f, -0.009310f, -0.003472f, 0.007766f, -0.013558f, 0.002116f, -0.009759f, -0.000762f, -0.001346f, 0.004794f, 0.008313f, 0.017505f, 0.006273f, 0.000201f, 0.007608f, -0.008883f, -0.013319f, 0.000106f, 0.003405f, 0.001788f, 0.016644f, -0.003303f, -0.001680f, -0.004760f, -0.001941f, 0.002873f, 0.008395f, -0.001506f, 0.003878f, -0.007303f, 0.013961f, -0.002360f, -0.003636f, -0.001237f, -0.016070f, -0.004282f, + -0.010679f, -0.001711f, 0.019710f, 0.012359f, 0.008408f, -0.002240f, -0.018684f, 0.001821f, -0.012543f, -0.019731f, -0.007048f, 0.013023f, -0.011489f, -0.017572f, 0.003673f, 0.000765f, -0.009159f, 0.001120f, 0.008857f, 0.001961f, -0.023273f, -0.007067f, 0.013374f, 0.015974f, 0.007528f, -0.019346f, -0.007561f, 0.007808f, -0.003984f, -0.004713f, 0.000391f, 0.005545f, 0.000173f, 0.001603f, 0.018296f, -0.000674f, 0.010716f, 0.008259f, -0.001030f, -0.009344f, -0.001115f, -0.005818f, 0.010488f, -0.007268f, -0.011839f, -0.000726f, 0.016930f, 0.000242f, 0.016782f, 0.008812f, 0.000683f, 0.010702f, -0.003021f, 0.023890f, 0.000867f, 0.011388f, 0.012745f, 0.000433f, -0.012745f, -0.002651f, -0.015073f, 0.006111f, -0.011249f, -0.006497f, -0.010572f, -0.007016f, -0.005953f, 0.003439f, -0.000194f, 0.005628f, -0.002181f, -0.009191f, -0.008989f, 0.000932f, 0.009952f, 0.018615f, -0.027876f, -0.005135f, 0.023274f, -0.011568f, 0.004204f, -0.017974f, 0.007853f, 0.032845f, -0.004528f, 0.001783f, -0.001492f, -0.023117f, 0.001752f, -0.001399f, 0.034678f, -0.010894f, -0.001855f, 0.015325f, -0.009762f, 0.021699f, + -0.014732f, -0.002037f, -0.022197f, 0.025023f, 0.000124f, -0.009618f, 0.000079f, 0.009298f, -0.011819f, 0.017494f, -0.002113f, 0.015546f, -0.000405f, 0.008270f, -0.024357f, -0.015210f, -0.011554f, -0.003319f, 0.014133f, -0.021480f, 0.011264f, 0.009332f, 0.002631f, -0.008662f, -0.013572f, 0.030346f, 0.005490f, -0.002979f, 0.011130f, -0.010132f, 0.005777f, -0.013601f, -0.014397f, -0.005233f, -0.009886f, 0.032939f, 0.009032f, -0.005788f, -0.010289f, -0.011635f, 0.009455f, 0.009190f, 0.002295f, -0.010498f, -0.002205f, -0.003601f, 0.012960f, 0.002428f, 0.010271f, -0.024713f, 0.013268f, -0.000511f, -0.000219f, -0.000456f, 0.003895f, -0.007179f, -0.000580f, -0.003073f, 0.010918f, 0.004943f, 0.008840f, 0.002015f, -0.000776f, -0.004559f, -0.015811f, -0.005501f, -0.010523f, 0.005008f, -0.001473f, 0.021562f, -0.019768f, -0.025140f, -0.007077f, 0.006683f, -0.008529f, -0.006754f, 0.018118f, 0.002945f, -0.011529f, -0.013042f, -0.013596f, 0.019981f, -0.011536f, 0.013212f, -0.007835f, 0.014537f, -0.016446f, 0.002486f, 0.022638f, 0.007204f, -0.033374f, 0.006521f, -0.000374f, -0.005056f, -0.003995f, 0.002390f, + -0.005000f, 0.002204f, -0.006434f, 0.001649f, -0.002498f, -0.015377f, 0.013244f, 0.013877f, -0.005661f, 0.015468f, -0.015285f, -0.003396f, -0.005341f, -0.007652f, 0.016742f, -0.014002f, -0.024446f, -0.013923f, 0.002907f, -0.019819f, -0.019014f, -0.009782f, -0.007474f, -0.013081f, -0.002640f, 0.014387f, 0.014517f, 0.001439f, 0.015656f, 0.004433f, 0.000308f, 0.012262f, -0.016516f, -0.003415f, -0.002772f, 0.036300f, -0.017491f, -0.016802f, 0.011866f, 0.029584f, 0.005949f, 0.026688f, 0.015287f, 0.024281f, 0.010837f, -0.004116f, -0.010648f, 0.008944f, -0.017684f, -0.013225f, 0.020162f, 0.017100f, 0.041910f, -0.000670f, 0.005966f, -0.015042f, 0.016264f, 0.007732f, -0.018475f, -0.003970f, 0.023747f, 0.000373f, -0.025950f, -0.010058f, -0.014624f, -0.004515f, 0.014582f, 0.013828f, -0.009842f, -0.004294f, 0.018136f, -0.017051f, 0.008059f, 0.015788f, 0.018220f, -0.009209f, 0.015656f, -0.006093f, -0.023797f, 0.008937f, 0.021674f, -0.005252f, 0.006160f, 0.005904f, -0.007538f, 0.003261f, 0.006338f, -0.006154f, 0.002209f, 0.018264f, -0.010640f, -0.004843f, 0.015981f, -0.002832f, -0.003625f, -0.026311f, + -0.009935f, -0.015600f, -0.027215f, -0.017320f, 0.012952f, -0.008036f, -0.012007f, 0.023978f, 0.022568f, -0.005044f, 0.024231f, 0.010873f, 0.015566f, -0.003686f, -0.013836f, 0.011134f, -0.018228f, -0.019486f, 0.026273f, -0.004421f, 0.060089f, -0.024804f, -0.011739f, -0.001400f, 0.014580f, -0.008399f, -0.008310f, -0.024790f, -0.028810f, 0.012955f, 0.002343f, 0.039599f, 0.012663f, -0.004031f, -0.004703f, 0.026313f, 0.026646f, -0.022170f, 0.015891f, -0.021176f, 0.005325f, -0.009113f, -0.011196f, -0.006492f, 0.004211f, -0.003439f, 0.013618f, 0.006993f, 0.015246f, -0.001949f, -0.007840f, -0.014666f, -0.003265f, 0.017030f, 0.001060f, -0.022700f, -0.003361f, 0.005457f, -0.010234f, 0.017874f, 0.014561f, 0.003054f, 0.004615f, -0.049614f, -0.019679f, 0.017126f, -0.001953f, 0.027566f, 0.006879f, 0.031049f, -0.004479f, -0.017252f, 0.015651f, -0.009856f, 0.010216f, 0.001564f, 0.044280f, 0.037146f, 0.002952f, 0.009976f, -0.007929f, 0.014145f, 0.013932f, 0.016151f, 0.016270f, 0.028942f, -0.003362f, 0.003791f, -0.015119f, -0.012180f, 0.004724f, -0.016761f, -0.042545f, -0.052222f, 0.041230f, -0.001187f, + 0.004716f, -0.014477f, 0.023148f, -0.049602f, -0.031731f, -0.010041f, -0.012662f, -0.001222f, -0.044370f, 0.008682f, 0.001022f, -0.001215f, -0.020172f, -0.020682f, 0.008565f, 0.028320f, 0.004571f, -0.037817f, -0.007986f, -0.030956f, 0.024697f, 0.015802f, 0.001501f, -0.013677f, -0.006177f, -0.006950f, 0.020500f, -0.002805f, -0.000021f, -0.004272f, -0.026964f, 0.014357f, 0.019683f, -0.011331f, -0.005601f, 0.015128f, -0.029231f, -0.021499f, -0.032248f, -0.010868f, 0.008993f, -0.020649f, -0.009230f, -0.000494f, -0.033195f, 0.010883f, 0.021979f, 0.037759f, 0.006419f, -0.003040f, 0.003459f, -0.023701f, -0.017890f, 0.029385f, -0.000590f, -0.009766f, -0.005125f, -0.042352f, -0.021604f, 0.010026f, -0.007196f, -0.003303f, -0.001115f, 0.030688f, -0.002333f, -0.024473f, 0.005213f, 0.024432f, 0.003059f, -0.009049f, 0.004158f, 0.007154f, -0.005428f, -0.011533f, 0.006694f, 0.029249f, 0.027035f, 0.010795f, 0.044692f, -0.017672f, -0.007275f, 0.008519f, -0.009541f, -0.001788f, 0.015807f, 0.047609f, -0.005649f, 0.010867f, 0.001533f, -0.001343f, 0.001093f, 0.052312f, -0.022742f, 0.027850f, 0.001655f, -0.031868f, + 0.013016f, -0.031608f, -0.018200f, 0.020563f, -0.015368f, 0.014973f, 0.002827f, 0.003283f, 0.024925f, 0.019702f, -0.025189f, -0.029587f, -0.021076f, -0.006354f, 0.011190f, 0.010437f, 0.005722f, 0.007631f, -0.034864f, 0.007210f, -0.017521f, -0.045467f, 0.034576f, -0.007716f, 0.032747f, 0.033715f, 0.004604f, 0.013601f, -0.014332f, -0.019298f, -0.034057f, 0.010163f, 0.036971f, 0.007698f, -0.011713f, 0.003782f, -0.004181f, 0.007046f, -0.016458f, -0.014370f, -0.016252f, 0.005481f, 0.001435f, -0.004319f, 0.025943f, 0.021997f, 0.016207f, 0.034384f, 0.008315f, -0.030676f, 0.048473f, -0.028470f, -0.003832f, -0.004414f, -0.000555f, 0.041236f, 0.046381f, 0.012208f, -0.081948f, 0.004822f, 0.025549f, -0.025870f, 0.018739f, 0.035314f, 0.003557f, 0.010894f, 0.023092f, 0.018055f, 0.008262f, 0.031901f, 0.008805f, -0.002406f, 0.058586f, 0.022829f, 0.009418f, 0.026233f, -0.016658f, 0.031777f, -0.018962f, -0.000075f, -0.000279f, -0.005181f, -0.028915f, 0.012158f, -0.019813f, 0.042074f, -0.001419f, -0.006182f, 0.061474f, 0.009662f, 0.010900f, 0.021469f, 0.004496f, 0.013112f, -0.011008f, -0.024089f, + -0.000618f, 0.019178f, -0.028237f, 0.037248f, 0.034434f, 0.025404f, 0.008622f, 0.015839f, -0.018682f, -0.020201f, -0.032340f, -0.013622f, -0.016259f, -0.016139f, 0.010878f, -0.001598f, -0.031479f, -0.013341f, 0.032703f, 0.001287f, -0.025389f, 0.017757f, 0.001270f, -0.017387f, -0.042789f, 0.004937f, -0.066255f, 0.041934f, -0.020454f, 0.038100f, 0.005046f, 0.011246f, 0.004635f, -0.013755f, 0.021918f, 0.056844f, 0.022108f, 0.016227f, 0.044629f, -0.063715f, 0.023689f, -0.037668f, 0.030240f, -0.016469f, -0.027516f, -0.008391f, -0.031548f, -0.013561f, -0.007988f, 0.010225f, 0.012754f, -0.009568f, 0.042612f, -0.002723f, -0.008849f, -0.006504f, -0.041064f, -0.004964f, -0.001176f, -0.033958f, 0.009364f, -0.028982f, -0.037337f, -0.012044f, 0.020250f, -0.059892f, -0.041837f, -0.027304f, 0.001631f, -0.041972f, -0.036905f, -0.028882f, -0.015890f, -0.011735f, -0.006950f, -0.028222f, 0.028682f, 0.005241f, -0.004419f, -0.020896f, -0.023137f, 0.041036f, -0.036969f, -0.023916f, 0.009238f, 0.011337f, 0.013189f, -0.020029f, -0.030123f, -0.011390f, -0.006755f, 0.014215f, -0.021995f, -0.007239f, -0.009796f, -0.023384f, + -0.043250f, -0.051590f, 0.048877f, -0.053280f, -0.004246f, 0.005796f, -0.010687f, -0.007948f, -0.050101f, 0.021581f, -0.012630f, -0.048540f, -0.001859f, -0.007844f, 0.048023f, 0.016094f, 0.034516f, -0.056606f, 0.063858f, 0.009546f, 0.005691f, -0.011854f, 0.031940f, -0.000200f, 0.053108f, -0.015300f, 0.036084f, 0.019459f, -0.054344f, 0.022615f, 0.007633f, 0.024852f, -0.005532f, -0.014614f, -0.022468f, -0.008199f, 0.024722f, 0.056933f, 0.004678f, -0.008697f, -0.037703f, 0.013386f, -0.040737f, -0.006475f, 0.037952f, -0.035996f, -0.001641f, 0.002286f, -0.007959f, -0.013702f, -0.017086f, 0.063298f, -0.015693f, -0.015777f, -0.009778f, 0.014226f, 0.019108f, 0.007813f, -0.001253f, -0.013111f, -0.002617f, 0.009324f, 0.036013f, -0.009048f, 0.052483f, 0.032042f, 0.013589f, -0.013514f, 0.045083f, 0.054379f, -0.007698f, -0.014825f, -0.006257f, -0.018185f, 0.001834f, -0.018106f, 0.023729f, 0.008767f, 0.035615f, 0.029910f, -0.053065f, -0.055814f, 0.060988f, 0.047579f, 0.002605f, -0.010958f, -0.031701f, -0.038308f, -0.020296f, 0.034008f, -0.041691f, -0.042038f, -0.013030f, -0.017036f, -0.059373f, 0.026878f, + -0.025185f, -0.009334f, -0.006671f, 0.003918f, -0.000835f, -0.036979f, -0.103854f, 0.049430f, -0.050842f, 0.018281f, 0.071141f, 0.009397f, -0.032274f, 0.019300f, 0.023664f, -0.012335f, -0.024840f, -0.006529f, -0.052046f, 0.014879f, -0.054031f, -0.033485f, 0.019245f, 0.000437f, 0.007299f, -0.048974f, -0.011380f, -0.035831f, -0.030728f, -0.043805f, -0.016468f, 0.012697f, -0.026856f, -0.027154f, 0.022922f, 0.001709f, -0.003896f, 0.006164f, -0.050244f, -0.004670f, -0.039504f, 0.030556f, 0.007012f, -0.093807f, 0.021302f, 0.047735f, -0.012489f, 0.027834f, 0.022819f, 0.015134f, 0.011405f, 0.045599f, 0.034920f, -0.000161f, -0.035861f, -0.008610f, 0.035202f, 0.022843f, -0.033527f, 0.000921f, -0.038874f, -0.013010f, 0.000029f, 0.025397f, 0.032928f, -0.066134f, -0.054259f, -0.029610f, 0.002581f, -0.019897f, -0.010300f, 0.060394f, 0.006603f, 0.014288f, 0.043862f, -0.020516f, 0.010527f, 0.035929f, 0.034766f, -0.054901f, 0.013965f, -0.010125f, -0.012995f, -0.011061f, 0.040232f, 0.022545f, -0.025957f, -0.013661f, 0.031115f, -0.050156f, 0.004872f, 0.021420f, 0.031119f, -0.003855f, 0.008321f, -0.058801f, + 0.001594f, -0.024663f, 0.022277f, 0.010024f, 0.035755f, -0.051296f, -0.025399f, -0.005247f, 0.008381f, -0.002003f, 0.012235f, 0.006530f, 0.031070f, 0.058079f, -0.033358f, -0.042488f, 0.013597f, -0.044340f, -0.012255f, 0.022650f, -0.032654f, -0.030363f, 0.004410f, 0.023545f, 0.030428f, 0.023529f, -0.011267f, 0.000259f, -0.058470f, -0.037269f, 0.054918f, -0.033699f, 0.073571f, -0.027125f, 0.016237f, 0.014034f, 0.001013f, -0.049309f, 0.067866f, -0.027165f, -0.004698f, -0.008086f, 0.027469f, 0.053900f, -0.048904f, -0.024586f, 0.060885f, -0.039552f, 0.001526f, -0.012014f, 0.013738f, 0.073445f, 0.002019f, 0.000170f, -0.040815f, 0.058280f, -0.015435f, 0.019863f, 0.014726f, 0.003671f, 0.033559f, -0.036683f, 0.011264f, 0.031605f, 0.031508f, 0.070056f, -0.043216f, 0.064350f, -0.010247f, -0.041308f, -0.039848f, 0.010941f, 0.027767f, -0.018097f, -0.007366f, -0.028440f, -0.010614f, 0.054347f, -0.036858f, -0.003316f, 0.044830f, -0.013883f, 0.027372f, -0.017242f, -0.006783f, 0.046156f, -0.000058f, 0.002349f, 0.046133f, 0.030766f, 0.012623f, -0.005609f, 0.039391f, 0.051085f, -0.050346f, 0.047926f, + -0.044149f, 0.024083f, -0.031201f, 0.006550f, 0.041977f, 0.013089f, -0.087862f, 0.039473f, 0.028136f, -0.000974f, 0.048423f, -0.072404f, -0.010981f, 0.047834f, 0.044519f, 0.005945f, 0.068449f, -0.035772f, 0.004312f, -0.009574f, -0.006202f, 0.026568f, 0.015785f, 0.047285f, 0.045358f, -0.032223f, 0.032208f, -0.058546f, -0.011661f, 0.002429f, 0.003878f, -0.006727f, -0.001281f, -0.091234f, -0.039347f, -0.071286f, -0.034401f, 0.047992f, -0.015107f, -0.008366f, 0.030844f, -0.022335f, 0.021358f, 0.054941f, -0.030483f, 0.021120f, 0.027088f, -0.039815f, 0.005001f, -0.048949f, 0.018470f, -0.005389f, -0.026101f, 0.038458f, 0.001036f, 0.060076f, -0.003807f, -0.045371f, 0.076199f, -0.013987f, 0.007485f, 0.010237f, -0.071774f, 0.021237f, 0.061493f, 0.021627f, -0.026990f, -0.047299f, 0.004675f, 0.011004f, 0.052492f, 0.033529f, -0.017454f, -0.010777f, -0.041378f, -0.000175f, 0.059321f, -0.081707f, 0.024231f, 0.056015f, -0.051431f, 0.017982f, 0.004813f, 0.018854f, 0.059130f, 0.019059f, 0.022416f, -0.011998f, -0.059295f, 0.059645f, -0.012050f, -0.032137f, 0.126336f, 0.061384f, 0.031455f, 0.004250f, + 0.001750f, -0.061303f, -0.050381f, -0.023823f, 0.035935f, -0.002957f, -0.036412f, -0.026352f, 0.045259f, -0.030792f, 0.030283f, 0.016327f, -0.025871f, 0.032488f, 0.012887f, -0.052668f, -0.028744f, -0.031668f, 0.004005f, 0.030241f, -0.068342f, 0.021757f, 0.078169f, 0.130217f, -0.021490f, -0.004047f, -0.106426f, -0.035441f, -0.078247f, -0.051872f, 0.072708f, 0.005560f, 0.019790f, -0.059875f, 0.019582f, -0.052473f, -0.119245f, 0.017934f, 0.057252f, -0.004125f, 0.007348f, 0.062330f, -0.081852f, 0.094037f, 0.046394f, 0.029901f, -0.046408f, 0.063577f, 0.120805f, -0.023162f, 0.037188f, 0.092843f, 0.077342f, 0.137941f, 0.029480f, 0.050264f, 0.036956f, 0.034528f, 0.117268f, -0.029310f, -0.014319f, 0.044727f, 0.025375f, -0.011287f, 0.064272f, 0.005504f, 0.013199f, -0.036642f, -0.105468f, 0.005946f, 0.069600f, 0.012691f, 0.041947f, -0.073608f, 0.004192f, -0.098409f, -0.000359f, -0.105719f, 0.006876f, 0.078836f, -0.010260f, -0.029141f, -0.103961f, 0.138790f, 0.023847f, 0.013020f, 0.139285f, 0.002801f, -0.032973f, -0.018460f, 0.006094f, 0.034173f, -0.009212f, 0.008025f, -0.013223f, -0.064337f, + 0.040328f, 0.031243f, -0.036721f, -0.131593f, 0.010934f, 0.188136f, 0.031102f, -0.033049f, -0.031134f, -0.079249f, -0.050336f, 0.006974f, 0.119091f, 0.024709f, -0.072248f, -0.000988f, 0.035628f, 0.012081f, 0.006673f, -0.002971f, 0.024336f, -0.050138f, -0.016153f, 0.032622f, 0.067958f, 0.068800f, -0.056119f, -0.018543f, 0.009030f, 0.013314f, 0.020576f, -0.064803f, 0.011149f, 0.016198f, -0.013882f, 0.054943f, 0.003939f, 0.062691f, 0.091463f, 0.046603f, 0.022526f, 0.042898f, -0.044832f, 0.049931f, -0.035306f, 0.072230f, 0.123165f, 0.044211f, -0.059412f, -0.050023f, 0.058423f, 0.024918f, 0.105790f, 0.081345f, 0.028002f, -0.013502f, -0.017825f, 0.008658f, 0.010162f, -0.029529f, 0.044251f, 0.040145f, 0.011568f, 0.097175f, 0.067605f, -0.002401f, 0.049724f, 0.055811f, 0.028376f, 0.055980f, 0.007356f, -0.080328f, -0.005537f, -0.014176f, -0.014991f, 0.105830f, 0.050209f, 0.023778f, -0.005694f, -0.031729f, -0.134158f, -0.032542f, 0.067135f, 0.034490f, 0.152725f, 0.004204f, -0.028148f, -0.075087f, -0.143928f, -0.156427f, -0.030850f, 0.061440f, 0.068087f, 0.043178f, -0.082651f, -0.105562f, + -0.006649f, -0.016356f, 0.034456f, 0.102131f, 0.047703f, -0.013704f, -0.069956f, -0.089884f, -0.060779f, -0.000069f, -0.059864f, 0.017158f, -0.051406f, -0.025392f, 0.063430f, 0.055050f, 0.044549f, 0.017010f, -0.080271f, -0.023480f, -0.077378f, -0.056576f, -0.036152f, 0.037876f, -0.016256f, 0.040478f, 0.098303f, 0.108797f, -0.055843f, 0.009925f, -0.092126f, -0.059330f, -0.049428f, -0.010022f, 0.004918f, 0.061990f, 0.058156f, 0.092518f, 0.056207f, 0.021499f, -0.059437f, -0.046379f, -0.023395f, 0.027689f, -0.091705f, 0.002577f, 0.076190f, 0.069285f, -0.035122f, 0.094710f, 0.070208f, 0.045265f, 0.072193f, -0.179324f, 0.019090f, -0.056880f, -0.079685f, 0.017546f, -0.057269f, -0.029357f, 0.070015f, 0.029797f, -0.197300f, -0.227465f, -0.246226f, -0.249471f, -0.346999f, 0.003548f, -0.107400f, -0.017663f, 0.075828f, 0.150130f, 0.201344f, 0.205733f, 0.395214f, 0.420571f, 0.348294f, 0.264320f, 0.279949f, 0.266480f, 0.119374f, -0.011780f, -0.140299f, -0.142694f, -0.229812f, -0.059522f, -0.112856f, -0.080122f, 0.015845f, -0.194277f, -0.037135f, -0.171571f, -0.027738f, -0.200990f, -0.185294f, -0.075786f, + -0.149039f, 0.002805f, -0.063655f, -0.061157f, -0.106234f, -0.066875f, -0.172929f, -0.120388f, -0.051366f, -0.050476f, -0.082182f, -0.047755f, 0.012843f, -0.069532f, 0.047595f, 0.137868f, -0.079485f, 0.158848f, 0.105345f, 0.206161f, 0.213325f, 0.179097f, 0.226289f, 0.183015f, 0.307933f, 0.294554f, 0.242385f, 0.309235f, 0.272671f, 0.400494f, 0.403401f, 0.458092f, 0.361545f, 0.367873f, 0.414794f, 0.343670f, 0.432523f, 0.269798f, 0.441880f, 0.273503f, 0.009097f, -0.122623f, -0.216074f, -0.174379f} + }, + { + {-0.006438f, -0.004315f, -0.005702f, -0.006947f, -0.006513f, 0.006489f, -0.015155f, 0.001720f, -0.002707f, -0.005306f, 0.013576f, -0.004390f, -0.004031f, 0.008676f, 0.001340f, -0.006469f, 0.002079f, -0.002638f, 0.002283f, 0.001768f, -0.001096f, 0.007134f, -0.002417f, -0.007501f, -0.000643f, 0.002223f, 0.003674f, 0.004660f, 0.000117f, 0.002859f, -0.001918f, 0.010614f, 0.007185f, -0.007961f, -0.004507f, -0.003812f, 0.003084f, -0.005590f, -0.006529f, 0.007636f, -0.003302f, -0.000129f, -0.000709f, 0.002070f, 0.006926f, 0.006304f, -0.002933f, -0.001857f, 0.004927f, 0.002290f, 0.001503f, 0.000528f, 0.004114f, -0.005940f, -0.003941f, 0.000374f, 0.003541f, -0.004281f, 0.002956f, -0.007551f, -0.000495f, 0.005203f, 0.003778f, -0.002589f, 0.004454f, 0.000518f, 0.006269f, 0.002267f, -0.002906f, 0.008517f, 0.011459f, 0.004190f, -0.001935f, -0.000890f, -0.005512f, 0.009554f, -0.000621f, 0.003792f, 0.001326f, -0.008771f, -0.006662f, 0.002014f, -0.006027f, -0.008815f, 0.004670f, -0.001233f, 0.001044f, -0.005148f, 0.003388f, 0.000139f, -0.007859f, -0.000556f, 0.008549f, 0.006936f, -0.005716f, -0.009846f, + -0.009033f, 0.001088f, -0.002276f, -0.001925f, -0.007730f, 0.007932f, -0.002422f, 0.002092f, -0.003671f, -0.002269f, -0.001011f, 0.002888f, -0.002482f, -0.004479f, -0.016681f, 0.005385f, -0.001525f, 0.005109f, 0.002863f, 0.002037f, -0.000715f, 0.010749f, 0.001760f, 0.001997f, 0.001224f, -0.005785f, -0.003889f, -0.000706f, 0.000486f, -0.005789f, -0.001652f, 0.001995f, -0.001106f, -0.005481f, -0.003134f, 0.000007f, 0.004818f, -0.008296f, -0.011369f, -0.013819f, 0.004433f, 0.007607f, 0.000377f, 0.006247f, 0.004297f, 0.000682f, -0.012967f, -0.000578f, -0.003797f, -0.004682f, -0.000391f, 0.000307f, 0.004410f, -0.001710f, 0.005748f, 0.007560f, -0.001938f, -0.000274f, -0.011205f, 0.009681f, -0.012808f, 0.004710f, 0.021170f, -0.004753f, -0.008080f, 0.001019f, 0.010982f, 0.000987f, -0.003302f, -0.001742f, -0.003322f, -0.002223f, -0.010149f, -0.004112f, 0.004812f, -0.008171f, -0.004673f, 0.000232f, -0.000561f, 0.008567f, -0.005483f, 0.001413f, -0.002189f, 0.001687f, -0.001225f, -0.005374f, 0.009632f, 0.016314f, 0.004096f, -0.001192f, -0.003199f, 0.017665f, 0.000745f, -0.007753f, 0.000416f, -0.013628f, + -0.000031f, 0.006706f, -0.010332f, -0.001577f, 0.002131f, -0.008471f, -0.002530f, 0.009154f, 0.001284f, -0.001300f, 0.009053f, -0.006349f, -0.009625f, 0.005128f, 0.003553f, -0.006982f, -0.003351f, -0.007455f, -0.008423f, -0.009320f, -0.005019f, -0.005446f, 0.007305f, 0.004938f, 0.001426f, -0.000451f, -0.005079f, 0.004508f, -0.001091f, -0.003587f, 0.006224f, 0.006890f, 0.010852f, -0.015919f, -0.010517f, -0.003826f, -0.002342f, 0.000488f, 0.002013f, -0.015191f, 0.010488f, -0.004837f, 0.003414f, 0.002109f, 0.003481f, 0.006552f, -0.000061f, -0.002256f, -0.005048f, 0.010831f, -0.000867f, 0.007014f, 0.013458f, -0.002994f, 0.011448f, 0.009685f, -0.008453f, 0.005577f, 0.005738f, 0.006058f, -0.014912f, -0.001570f, 0.000918f, -0.004783f, -0.009360f, 0.000053f, 0.010998f, -0.002669f, -0.004648f, -0.003786f, 0.003405f, 0.010058f, 0.005080f, -0.005299f, -0.000016f, -0.004393f, 0.000512f, -0.001479f, -0.004974f, 0.009368f, -0.012163f, -0.010262f, -0.009194f, 0.002744f, -0.001180f, -0.000477f, -0.011298f, -0.012234f, 0.003105f, -0.000417f, 0.000866f, -0.001366f, -0.000437f, -0.009210f, -0.005105f, -0.010072f, + 0.002201f, 0.008217f, -0.002324f, 0.007230f, 0.001771f, 0.006351f, -0.013958f, -0.000323f, 0.002647f, -0.005296f, -0.001374f, 0.001264f, -0.005060f, 0.001718f, -0.000707f, 0.009719f, 0.015259f, 0.001308f, -0.005261f, -0.012285f, 0.006183f, 0.004109f, 0.003909f, 0.016098f, -0.009893f, 0.000704f, 0.002325f, -0.002522f, -0.004742f, 0.002656f, 0.001405f, 0.009812f, 0.021363f, -0.001535f, 0.004042f, 0.009059f, -0.003380f, 0.008104f, 0.014035f, -0.009222f, 0.000067f, -0.003271f, 0.000225f, 0.006331f, -0.010184f, 0.011704f, 0.002978f, 0.000366f, 0.006463f, -0.000776f, 0.008786f, -0.004332f, -0.001508f, -0.002169f, 0.013557f, 0.006292f, 0.008783f, -0.001438f, 0.007306f, -0.012627f, 0.015148f, -0.005604f, 0.006197f, -0.013348f, 0.005809f, 0.009797f, 0.018349f, 0.006617f, 0.003725f, -0.011838f, -0.004175f, 0.003213f, -0.008617f, -0.010742f, -0.002217f, 0.021085f, 0.024860f, 0.004516f, 0.006015f, -0.007276f, -0.002947f, 0.013416f, 0.002761f, 0.005609f, -0.000890f, 0.003690f, 0.003390f, 0.011004f, 0.000940f, 0.001914f, 0.015214f, -0.011645f, -0.013739f, 0.023076f, -0.005121f, -0.003018f, + 0.015421f, 0.009369f, 0.001828f, -0.025234f, 0.028625f, -0.004556f, -0.002739f, -0.002389f, -0.000714f, 0.001635f, 0.002549f, 0.009231f, 0.013849f, 0.009073f, -0.000989f, 0.015085f, 0.010155f, 0.005180f, 0.004856f, -0.004879f, 0.007618f, -0.010004f, 0.009364f, -0.001125f, 0.004529f, -0.008405f, -0.011840f, 0.002123f, -0.000537f, 0.005198f, 0.008914f, -0.003367f, -0.011171f, -0.006739f, 0.004261f, -0.014348f, 0.010849f, 0.003451f, -0.022307f, 0.011158f, 0.003012f, 0.006598f, 0.002972f, 0.004180f, 0.005520f, -0.000441f, -0.005081f, -0.005239f, -0.014461f, -0.011272f, -0.004824f, -0.007621f, 0.000047f, 0.001626f, -0.009823f, -0.015979f, -0.000371f, 0.011676f, 0.021003f, -0.000033f, -0.009995f, 0.003146f, -0.016905f, 0.002638f, 0.001634f, -0.006090f, 0.019824f, -0.025010f, 0.013395f, -0.004528f, -0.008691f, -0.006842f, -0.008297f, -0.011738f, 0.023527f, -0.029252f, 0.007301f, 0.007435f, 0.010005f, 0.014732f, 0.002714f, 0.004302f, 0.005786f, 0.004201f, 0.003363f, 0.005180f, 0.013068f, 0.002581f, -0.006628f, 0.000274f, -0.000853f, -0.008811f, -0.007847f, 0.004499f, 0.008903f, 0.009451f, + 0.001641f, 0.006822f, -0.014987f, -0.001498f, 0.000198f, -0.000553f, -0.014161f, -0.008439f, -0.004814f, 0.009839f, 0.009008f, 0.000158f, -0.015503f, 0.000404f, -0.008171f, -0.005866f, -0.002647f, -0.003962f, 0.010538f, 0.013991f, 0.004671f, 0.014555f, -0.022165f, -0.015492f, 0.008129f, 0.005035f, 0.001373f, 0.003426f, 0.002119f, -0.006912f, -0.013616f, -0.009384f, 0.008291f, -0.005864f, 0.012356f, 0.011995f, -0.003309f, 0.011468f, -0.016250f, -0.007746f, -0.003757f, -0.004915f, 0.002546f, 0.032395f, -0.002854f, 0.010277f, -0.002570f, 0.026230f, -0.004642f, 0.001034f, 0.011252f, -0.024334f, 0.017299f, 0.008908f, -0.013536f, 0.015733f, 0.017625f, 0.006096f, -0.026242f, 0.016753f, 0.001099f, -0.002220f, 0.013867f, 0.014842f, -0.000425f, -0.004018f, 0.000836f, -0.010056f, 0.010089f, -0.005379f, -0.009412f, -0.020444f, 0.005280f, -0.022249f, 0.006499f, -0.005263f, -0.002049f, 0.006739f, -0.017857f, -0.007293f, 0.015746f, -0.001095f, -0.006605f, 0.009564f, 0.001151f, -0.007778f, 0.007457f, 0.002724f, 0.001250f, -0.003218f, 0.005861f, -0.010957f, -0.000552f, -0.016102f, 0.016074f, 0.015619f, + -0.018524f, 0.013022f, -0.012986f, -0.004989f, 0.014010f, 0.018716f, -0.000549f, -0.009069f, 0.006452f, -0.001006f, 0.003580f, -0.022511f, -0.016943f, 0.003721f, 0.004274f, -0.004767f, -0.003501f, 0.006002f, 0.000580f, -0.007919f, 0.011012f, -0.009154f, 0.004874f, 0.007032f, 0.000305f, 0.010982f, -0.008624f, 0.007352f, 0.003314f, -0.009253f, 0.018379f, -0.006054f, 0.009050f, -0.018196f, -0.001092f, -0.004688f, -0.016452f, 0.000733f, 0.011997f, 0.021074f, 0.027610f, -0.015453f, -0.000198f, -0.019301f, -0.001207f, -0.012249f, 0.011308f, -0.011466f, -0.022658f, 0.001604f, -0.014418f, -0.001262f, 0.019288f, -0.011159f, -0.010950f, 0.020501f, 0.000933f, 0.003604f, -0.001820f, -0.011901f, 0.005418f, 0.004440f, 0.024917f, -0.016877f, 0.012404f, -0.014306f, 0.003948f, 0.004846f, -0.013818f, -0.008671f, 0.023995f, 0.006519f, -0.017149f, -0.004474f, -0.005999f, -0.014041f, -0.000150f, 0.023188f, 0.012859f, 0.016148f, 0.004167f, 0.006483f, -0.020605f, -0.003012f, 0.027393f, 0.002170f, -0.016121f, 0.008975f, 0.009481f, -0.012199f, -0.010026f, -0.005844f, -0.026903f, -0.004174f, 0.008930f, 0.013751f, + 0.025022f, -0.005878f, -0.012375f, -0.003490f, -0.007267f, 0.020371f, -0.006183f, 0.010340f, -0.042335f, -0.029629f, -0.019509f, 0.000715f, -0.035707f, 0.003678f, 0.024027f, 0.006981f, 0.024780f, -0.015523f, -0.007941f, -0.004304f, -0.015086f, -0.006562f, -0.021924f, 0.034905f, 0.019299f, 0.013028f, -0.032203f, -0.007421f, -0.011373f, -0.021483f, 0.005423f, -0.003603f, 0.004982f, -0.026343f, -0.003222f, -0.003747f, -0.019362f, 0.008839f, 0.001411f, 0.016675f, 0.005774f, -0.016808f, 0.022437f, -0.012939f, 0.008151f, 0.003453f, -0.001819f, 0.017375f, 0.016020f, 0.002803f, -0.024581f, 0.026272f, -0.015847f, 0.018332f, 0.007407f, -0.012116f, -0.013302f, 0.020690f, 0.001490f, -0.004447f, 0.003995f, -0.020863f, -0.008713f, 0.009010f, -0.003557f, 0.017869f, -0.013526f, -0.020054f, 0.005250f, 0.002903f, -0.001597f, 0.017465f, 0.006203f, 0.001569f, -0.015053f, 0.011738f, 0.003047f, -0.013943f, -0.004295f, -0.004510f, -0.009339f, -0.008662f, -0.008604f, 0.002488f, -0.024982f, 0.035530f, 0.015256f, 0.040489f, -0.016912f, -0.020546f, 0.038730f, 0.002029f, -0.002974f, 0.009014f, 0.003852f, 0.022837f, + 0.030470f, 0.004516f, -0.026415f, -0.043248f, 0.007167f, -0.011508f, 0.003704f, 0.001814f, -0.017957f, -0.000679f, 0.024962f, 0.020048f, 0.016440f, 0.031242f, -0.005873f, 0.026499f, -0.017231f, 0.023470f, 0.008703f, 0.018220f, -0.010889f, 0.031800f, 0.019268f, 0.023238f, -0.035418f, -0.000020f, 0.034369f, 0.019019f, 0.007166f, -0.007865f, 0.051133f, 0.021052f, -0.018479f, -0.012225f, 0.013316f, -0.019308f, -0.000744f, -0.009494f, 0.003678f, 0.041535f, 0.045058f, 0.031351f, 0.012785f, -0.000371f, 0.017579f, -0.015513f, -0.002707f, 0.016893f, -0.017741f, 0.043085f, 0.028579f, 0.020136f, 0.009370f, -0.003790f, -0.020343f, 0.023802f, 0.001457f, 0.019712f, -0.009998f, 0.004547f, -0.014815f, -0.014753f, -0.000771f, 0.001273f, -0.017680f, 0.042823f, -0.002538f, -0.021288f, -0.009560f, -0.016739f, -0.000609f, -0.026808f, 0.006976f, -0.023148f, 0.013100f, 0.002754f, -0.006068f, -0.018305f, -0.021426f, -0.032995f, -0.033748f, -0.010355f, 0.029707f, -0.002497f, -0.018924f, 0.007619f, -0.017988f, 0.013731f, -0.015274f, 0.027251f, -0.027922f, 0.006271f, -0.019632f, -0.020952f, -0.003252f, 0.003124f, + -0.005424f, 0.012644f, -0.040159f, 0.016042f, 0.004630f, -0.010222f, -0.002062f, -0.003097f, -0.019361f, -0.032758f, -0.033796f, 0.024592f, 0.013324f, -0.013928f, 0.022673f, 0.000353f, -0.007863f, -0.025844f, -0.052404f, -0.044457f, 0.026380f, -0.007955f, 0.002035f, -0.005485f, -0.000926f, -0.002664f, -0.034603f, 0.013804f, -0.041035f, -0.022800f, 0.004044f, -0.001101f, -0.006902f, -0.005335f, -0.003202f, 0.044969f, -0.010899f, -0.013415f, -0.008861f, 0.047831f, -0.004757f, -0.016396f, 0.033574f, -0.019604f, -0.009519f, -0.012841f, -0.007524f, -0.063877f, -0.048386f, -0.027901f, 0.054688f, -0.003354f, -0.009818f, -0.007278f, -0.004976f, -0.018727f, 0.018934f, 0.014628f, 0.048832f, -0.046139f, -0.009555f, 0.013594f, -0.034065f, -0.013819f, -0.012495f, 0.056551f, -0.001524f, 0.012715f, 0.028309f, 0.002218f, 0.027208f, -0.030537f, -0.038615f, -0.025733f, -0.007707f, -0.006806f, 0.003780f, 0.017465f, -0.001628f, -0.032245f, -0.022785f, -0.001945f, -0.017811f, -0.036103f, 0.031182f, -0.005621f, -0.018648f, -0.000488f, 0.009469f, 0.009909f, 0.005171f, -0.016409f, 0.002455f, -0.033509f, -0.015388f, -0.049577f, + 0.022393f, 0.014740f, -0.006654f, -0.015668f, 0.017440f, -0.024753f, -0.007097f, 0.053139f, -0.006413f, 0.045026f, 0.019406f, 0.011993f, -0.012597f, -0.056811f, -0.024330f, -0.011011f, -0.031234f, -0.022934f, -0.015192f, 0.025262f, -0.012132f, 0.000430f, -0.023109f, 0.048147f, -0.017151f, 0.019631f, 0.015128f, -0.032610f, 0.036750f, 0.002331f, -0.014711f, 0.024136f, 0.015599f, 0.072486f, 0.006412f, 0.004643f, 0.028269f, -0.027068f, -0.017224f, -0.002279f, 0.009806f, 0.014959f, -0.004110f, 0.032873f, -0.013567f, 0.007887f, 0.031587f, 0.016135f, 0.014463f, 0.013962f, -0.015757f, 0.007660f, 0.003848f, -0.006010f, 0.008696f, -0.010775f, -0.021437f, -0.009731f, 0.006705f, -0.021760f, 0.037852f, 0.001453f, 0.008119f, -0.000666f, 0.027687f, 0.029610f, 0.000124f, -0.015075f, 0.003339f, -0.002131f, 0.035528f, 0.042881f, -0.022371f, -0.015049f, -0.008555f, 0.013744f, 0.034505f, -0.021824f, 0.014389f, 0.002946f, 0.011993f, -0.009324f, -0.011891f, 0.009831f, 0.025416f, 0.007797f, -0.016969f, 0.025673f, 0.069580f, -0.015863f, 0.018922f, -0.000178f, 0.012518f, 0.028900f, 0.015026f, 0.033436f, + 0.032669f, -0.001083f, 0.046193f, 0.072115f, 0.013429f, -0.018107f, 0.077316f, 0.007168f, 0.074380f, 0.000790f, 0.015572f, -0.040229f, -0.011187f, 0.070125f, 0.013890f, -0.028076f, 0.011839f, -0.020480f, 0.011233f, 0.016002f, -0.002996f, -0.032376f, -0.010974f, -0.049904f, 0.024405f, 0.021568f, -0.018157f, 0.023188f, 0.033095f, 0.009833f, -0.006131f, -0.027490f, 0.009182f, 0.053320f, -0.021729f, 0.033540f, 0.030448f, 0.008313f, 0.023333f, 0.023757f, 0.002780f, 0.028758f, 0.018306f, -0.043220f, -0.004977f, -0.014872f, 0.050013f, 0.036372f, -0.032129f, 0.025167f, -0.002349f, 0.030060f, 0.082089f, -0.002959f, -0.012241f, 0.012859f, 0.073892f, 0.034739f, -0.003204f, 0.014380f, 0.014338f, 0.047153f, 0.038092f, -0.019841f, 0.045439f, 0.026002f, 0.042138f, -0.023271f, 0.005363f, 0.014366f, 0.009651f, 0.031826f, 0.038617f, -0.017862f, -0.018678f, 0.036993f, 0.015833f, -0.002626f, -0.009704f, 0.008203f, 0.046533f, -0.076622f, 0.021812f, -0.020486f, -0.019667f, -0.016442f, -0.015695f, 0.011334f, 0.014862f, 0.015461f, -0.018528f, -0.022525f, -0.058018f, 0.002775f, -0.032112f, 0.053307f, + 0.007088f, -0.013824f, -0.007273f, 0.031902f, 0.009895f, 0.051781f, 0.021685f, -0.013642f, 0.002949f, 0.010729f, 0.024471f, 0.038743f, -0.042778f, -0.038165f, -0.006988f, 0.065226f, -0.019231f, 0.007887f, 0.019774f, 0.028202f, 0.035991f, 0.049262f, 0.044253f, 0.003078f, -0.009075f, 0.045809f, 0.004875f, -0.030573f, 0.017105f, -0.028515f, 0.021262f, 0.003911f, -0.023146f, 0.021321f, 0.089112f, 0.047578f, -0.029440f, -0.024793f, -0.001621f, -0.025779f, -0.022478f, -0.022411f, 0.016726f, -0.013569f, -0.018779f, 0.002730f, 0.025898f, 0.012443f, 0.009831f, 0.032322f, 0.011128f, -0.010614f, 0.038321f, 0.028194f, -0.024279f, 0.015227f, -0.027593f, -0.025999f, -0.024133f, -0.003082f, -0.061224f, -0.022044f, 0.046857f, 0.029139f, -0.011695f, -0.022187f, 0.021421f, 0.017595f, -0.028607f, -0.011297f, -0.064188f, -0.003595f, 0.056701f, 0.002333f, -0.038520f, 0.008160f, 0.003662f, -0.025391f, 0.038433f, 0.022850f, -0.012909f, 0.012098f, 0.018445f, 0.024291f, 0.014437f, 0.005594f, -0.014377f, 0.010548f, 0.014960f, 0.036707f, 0.054289f, -0.012678f, -0.033249f, -0.016850f, 0.012004f, 0.012616f, + 0.045131f, -0.014732f, -0.031642f, -0.024527f, -0.024853f, 0.053901f, 0.097717f, 0.036509f, 0.007034f, 0.106643f, 0.008600f, 0.045338f, 0.027153f, -0.006881f, -0.019543f, 0.020623f, -0.027243f, -0.017770f, 0.023832f, 0.003569f, -0.060455f, -0.063170f, -0.013567f, 0.029657f, -0.031202f, -0.040331f, -0.020504f, -0.029063f, -0.022858f, 0.024912f, -0.014741f, -0.045482f, 0.025486f, 0.005255f, -0.010179f, 0.015068f, -0.006576f, 0.028681f, 0.103217f, -0.055328f, 0.055229f, -0.062543f, -0.031934f, -0.014992f, -0.006144f, 0.050197f, 0.002271f, 0.054023f, 0.034998f, 0.031678f, 0.046080f, -0.052069f, 0.021078f, -0.054562f, -0.001505f, 0.073270f, 0.065098f, 0.028323f, 0.001679f, 0.013413f, 0.008841f, -0.019871f, 0.017422f, 0.021757f, -0.090626f, 0.006512f, 0.014010f, 0.028676f, -0.032863f, -0.050438f, 0.038236f, 0.018778f, 0.010113f, -0.021003f, 0.045198f, -0.005316f, 0.035218f, 0.029845f, -0.003003f, 0.005387f, -0.009685f, 0.036173f, -0.020502f, 0.011731f, 0.021517f, -0.000854f, 0.045277f, 0.027031f, -0.002251f, 0.024064f, 0.026441f, -0.000364f, -0.020123f, -0.067460f, -0.012497f, 0.008287f, + -0.040464f, 0.004884f, 0.032348f, -0.061253f, -0.027665f, 0.010466f, -0.026888f, -0.003439f, 0.032582f, 0.002752f, -0.023582f, -0.029518f, 0.012996f, 0.013861f, -0.063555f, -0.020376f, -0.006115f, 0.000687f, 0.038306f, 0.019525f, 0.002804f, 0.068764f, -0.010942f, -0.003230f, -0.000547f, -0.042022f, -0.016441f, -0.063662f, -0.055422f, 0.011261f, -0.028131f, -0.008093f, -0.042561f, -0.053030f, -0.056067f, -0.036330f, 0.041317f, 0.056424f, 0.002218f, -0.044490f, 0.004323f, 0.003250f, 0.001296f, 0.022194f, 0.035984f, 0.036508f, 0.001505f, -0.021696f, -0.056143f, -0.031300f, -0.049104f, -0.009400f, 0.000744f, 0.005479f, 0.005622f, 0.008302f, 0.014140f, 0.019077f, 0.033848f, -0.051116f, 0.023416f, 0.010564f, 0.011920f, 0.029569f, 0.050077f, 0.057338f, -0.031964f, 0.026370f, -0.044325f, -0.012427f, -0.040260f, -0.002443f, -0.015678f, 0.094447f, 0.032971f, 0.068474f, 0.002740f, -0.034385f, -0.015597f, 0.044410f, 0.046148f, -0.025746f, 0.085365f, -0.034406f, 0.004850f, 0.005251f, 0.014242f, 0.032923f, 0.094549f, -0.005323f, 0.022301f, 0.054341f, 0.010786f, -0.041040f, 0.025019f, 0.098346f, + -0.020072f, -0.023338f, -0.060625f, -0.005362f, 0.031557f, 0.019861f, -0.004478f, -0.049148f, -0.008183f, -0.010396f, 0.018200f, 0.086151f, -0.005150f, -0.001035f, 0.036118f, 0.006620f, -0.120359f, -0.038107f, 0.084270f, 0.027807f, -0.025664f, -0.048107f, -0.007434f, -0.031898f, 0.043072f, 0.022395f, 0.007468f, -0.025590f, -0.057414f, 0.011858f, -0.098347f, -0.012176f, 0.046935f, 0.064920f, -0.008306f, -0.055467f, -0.038457f, -0.114304f, 0.032735f, -0.019885f, 0.043939f, 0.033803f, -0.033233f, -0.023556f, -0.102106f, -0.075983f, 0.038865f, 0.108186f, 0.042367f, 0.051573f, -0.036704f, -0.063815f, -0.062312f, -0.025358f, 0.091082f, 0.124198f, 0.063809f, -0.143005f, -0.053317f, -0.109297f, -0.059481f, 0.137469f, 0.032721f, 0.031394f, -0.018636f, -0.130156f, -0.108098f, -0.106498f, -0.020477f, 0.012241f, 0.067755f, -0.023211f, 0.051533f, -0.101825f, 0.064618f, 0.028827f, 0.007733f, 0.134592f, 0.008181f, -0.007700f, -0.006848f, -0.171939f, -0.056208f, -0.002972f, 0.004358f, -0.055039f, 0.095084f, 0.038622f, 0.041719f, -0.125935f, 0.021065f, -0.174010f, -0.041005f, -0.004394f, 0.020697f, 0.005800f, + -0.112365f, 0.055015f, -0.033526f, -0.023775f, -0.023773f, -0.027410f, -0.029935f, -0.038014f, 0.068246f, -0.024795f, -0.064470f, 0.015142f, -0.020436f, 0.002980f, 0.031424f, -0.073906f, -0.027759f, -0.008982f, 0.026156f, -0.001823f, 0.075718f, -0.011587f, -0.047735f, 0.098704f, -0.090502f, 0.046169f, -0.084063f, -0.032179f, 0.037126f, -0.071512f, 0.002320f, 0.042411f, -0.027457f, -0.011390f, -0.007281f, 0.055879f, 0.091920f, 0.048456f, -0.033861f, -0.019289f, -0.016787f, -0.000498f, 0.028308f, -0.019213f, -0.020553f, 0.011298f, 0.008039f, -0.178121f, -0.008376f, -0.014072f, 0.023556f, 0.012999f, 0.000052f, -0.008520f, 0.047809f, -0.063270f, -0.014217f, -0.015711f, 0.037107f, -0.148913f, -0.018448f, 0.109916f, -0.029890f, -0.068387f, 0.003717f, 0.045925f, -0.025938f, -0.044791f, -0.128137f, -0.106002f, 0.086708f, 0.073159f, 0.004018f, 0.078330f, -0.092531f, -0.008915f, -0.175630f, -0.065075f, -0.033611f, 0.079703f, 0.073087f, 0.042715f, -0.072373f, -0.027865f, -0.005908f, -0.037146f, 0.013599f, 0.026138f, 0.036542f, 0.048270f, -0.042599f, 0.025182f, -0.077191f, -0.051478f, -0.014283f, -0.020178f, + -0.000391f, 0.045052f, -0.061216f, 0.046488f, -0.024960f, -0.037199f, -0.015112f, 0.000290f, -0.075966f, -0.006180f, -0.068853f, -0.029601f, -0.027766f, -0.068309f, 0.085923f, 0.035520f, 0.018398f, 0.016679f, -0.018274f, -0.094057f, -0.133492f, -0.082138f, -0.078818f, 0.047977f, 0.011823f, 0.052057f, 0.078813f, 0.060534f, -0.021764f, 0.010791f, -0.045752f, -0.040022f, -0.041471f, 0.027847f, -0.043576f, -0.006990f, -0.041073f, -0.048503f, -0.025698f, 0.046813f, -0.038908f, -0.016307f, 0.007950f, -0.010441f, -0.054286f, -0.069453f, -0.029298f, 0.058230f, -0.012372f, -0.170957f, -0.237421f, -0.223160f, -0.211979f, -0.256553f, -0.030744f, -0.059729f, 0.062885f, 0.092469f, 0.258019f, 0.172013f, 0.220790f, 0.300129f, 0.327013f, 0.229190f, 0.285767f, 0.170311f, 0.085867f, 0.004711f, -0.037514f, -0.053793f, -0.101479f, -0.097137f, -0.142635f, -0.050366f, -0.044520f, -0.131074f, -0.096915f, -0.089435f, -0.106987f, -0.178611f, -0.120247f, -0.086593f, -0.070268f, -0.134295f, -0.009908f, -0.030050f, -0.051621f, -0.130049f, -0.123547f, -0.095908f, -0.084804f, -0.054578f, -0.019252f, -0.078545f, 0.034300f, 0.060394f, + -0.065044f, 0.092724f, 0.117739f, 0.118950f, 0.199804f, 0.169134f, 0.125383f, 0.143898f, 0.136832f, 0.142347f, 0.204790f, 0.237388f, 0.224072f, 0.159632f, 0.238864f, 0.243313f, 0.242052f, 0.254077f, 0.275976f, 0.251194f, 0.250914f, 0.347732f, 0.153056f, 0.161496f, 0.142205f, 0.132108f, -0.082783f, -0.014351f, -0.064351f, -0.180844f, -0.115747f}, + {0.003399f, 0.002832f, 0.002207f, 0.005144f, -0.001655f, 0.000476f, -0.002302f, -0.007713f, -0.014466f, 0.002985f, -0.005530f, -0.007801f, -0.010465f, 0.002541f, 0.001967f, 0.007756f, 0.002143f, 0.009220f, -0.001335f, -0.013678f, 0.005117f, -0.007222f, -0.000902f, 0.002930f, -0.005804f, -0.008938f, 0.001197f, -0.005846f, -0.000891f, -0.002954f, 0.005329f, 0.005346f, 0.001708f, -0.012749f, -0.002759f, -0.004892f, 0.009835f, 0.002052f, 0.002953f, 0.011477f, 0.005472f, 0.005150f, -0.000183f, 0.003106f, 0.018065f, 0.008873f, -0.003095f, 0.000860f, -0.008696f, 0.006218f, -0.000514f, 0.000982f, -0.010708f, -0.001419f, -0.005685f, -0.007291f, -0.002966f, 0.008071f, 0.006209f, 0.000093f, 0.000035f, -0.006998f, -0.006573f, -0.002431f, -0.006700f, -0.013773f, 0.007038f, -0.005745f, -0.001248f, -0.012966f, -0.003457f, 0.007790f, 0.003923f, -0.000582f, -0.011896f, 0.014704f, -0.001289f, 0.005827f, 0.002874f, 0.006885f, -0.012742f, -0.006977f, 0.007964f, 0.003742f, -0.000038f, -0.007190f, 0.001316f, -0.019745f, -0.012708f, -0.000870f, -0.007615f, -0.008686f, 0.003385f, 0.015089f, 0.002470f, 0.011439f, + -0.002784f, 0.011298f, -0.006950f, -0.006342f, -0.000839f, -0.010598f, 0.001997f, 0.004944f, -0.003809f, -0.000473f, 0.002649f, 0.000263f, 0.004649f, -0.000786f, -0.011140f, 0.003744f, -0.006905f, -0.005430f, 0.003114f, -0.007084f, -0.010363f, 0.010075f, -0.010860f, 0.009574f, 0.009202f, 0.005788f, -0.000446f, -0.013017f, -0.007364f, 0.001184f, -0.002328f, 0.016174f, -0.009955f, 0.003741f, -0.001170f, 0.001916f, -0.012279f, -0.021018f, -0.003475f, -0.006487f, -0.006701f, -0.001885f, 0.009050f, -0.002148f, -0.009025f, 0.007978f, 0.003902f, -0.004385f, 0.007376f, -0.001538f, 0.002721f, -0.009711f, 0.000114f, -0.002423f, 0.007776f, 0.007752f, 0.000933f, 0.014138f, -0.000352f, 0.005983f, 0.007523f, -0.000308f, -0.007182f, 0.000514f, -0.010123f, -0.012963f, -0.005007f, -0.014745f, -0.015151f, -0.005112f, 0.009689f, -0.003756f, -0.003569f, -0.008042f, -0.002126f, -0.013885f, 0.006523f, -0.004067f, 0.003229f, 0.007942f, 0.002643f, -0.003124f, 0.005501f, 0.005086f, -0.006782f, 0.004370f, 0.000498f, 0.000978f, 0.004881f, -0.012162f, -0.005240f, 0.008170f, -0.005502f, -0.000656f, -0.003528f, 0.009094f, + -0.012074f, -0.001261f, -0.010119f, 0.006249f, -0.000666f, -0.000999f, 0.009011f, -0.004182f, -0.004415f, -0.003393f, -0.008528f, 0.000353f, -0.003882f, -0.000922f, 0.000527f, 0.005530f, 0.005836f, 0.001743f, -0.002629f, -0.010230f, -0.016397f, -0.005281f, -0.001160f, -0.004229f, 0.008774f, -0.003703f, -0.005090f, 0.006918f, -0.004596f, -0.007069f, 0.015413f, -0.003312f, 0.017169f, -0.010075f, -0.004463f, -0.007156f, 0.006722f, 0.001694f, -0.000196f, 0.012498f, 0.003448f, 0.004001f, -0.016835f, 0.003686f, -0.007536f, -0.008978f, -0.011682f, 0.000261f, 0.001051f, 0.015032f, -0.011293f, 0.005962f, -0.004364f, 0.018465f, -0.005856f, -0.005539f, 0.013482f, -0.004477f, 0.005097f, 0.002355f, -0.000166f, 0.002532f, -0.007900f, 0.001804f, 0.001121f, 0.004036f, 0.017673f, 0.006297f, 0.002331f, -0.006848f, 0.006695f, -0.012786f, -0.002866f, -0.002149f, 0.008019f, 0.006529f, 0.011067f, 0.007073f, -0.006819f, -0.010935f, -0.004043f, 0.008972f, -0.000145f, 0.004819f, -0.000869f, -0.000910f, 0.018205f, 0.004394f, -0.000284f, -0.020231f, -0.008100f, 0.000859f, 0.008275f, 0.011321f, 0.016664f, 0.008991f, + -0.002480f, 0.003101f, -0.002446f, -0.004926f, 0.012561f, -0.006646f, 0.013032f, 0.000908f, -0.008529f, 0.004179f, -0.003209f, 0.009553f, 0.002016f, 0.008674f, -0.002172f, -0.001506f, -0.003315f, -0.010249f, 0.000292f, 0.007322f, 0.007194f, 0.013672f, 0.006140f, -0.017950f, -0.015143f, -0.012996f, 0.000386f, -0.002168f, 0.000789f, -0.007040f, -0.004583f, -0.001036f, 0.005264f, 0.000010f, -0.011707f, 0.012533f, -0.001989f, -0.011435f, 0.002141f, 0.002864f, -0.000473f, -0.000956f, 0.004750f, 0.006757f, -0.004382f, 0.010256f, 0.000225f, 0.006110f, -0.014011f, 0.010001f, 0.003172f, 0.005891f, -0.009760f, -0.000751f, 0.006577f, 0.006224f, 0.014645f, -0.000217f, -0.021055f, -0.005286f, -0.010287f, 0.005259f, 0.002963f, -0.000412f, -0.005933f, 0.002066f, -0.008912f, -0.002478f, -0.015897f, -0.008519f, -0.000982f, 0.009240f, 0.009124f, -0.006240f, -0.006438f, -0.005313f, 0.009348f, -0.002526f, -0.001763f, -0.013905f, 0.008375f, -0.013603f, -0.005683f, 0.000535f, -0.003717f, -0.002671f, 0.014940f, -0.001263f, 0.003766f, -0.005781f, 0.007253f, -0.006525f, -0.000394f, 0.010186f, 0.018814f, 0.012931f, + 0.002442f, -0.015410f, -0.011710f, 0.003682f, -0.003007f, -0.010004f, -0.003598f, -0.012781f, -0.005782f, 0.024636f, 0.002445f, -0.003001f, -0.005103f, -0.000322f, -0.006270f, -0.004352f, 0.016426f, -0.017855f, -0.002539f, 0.001406f, -0.004229f, 0.004078f, 0.009728f, -0.005012f, -0.006266f, 0.002269f, -0.007683f, -0.007316f, -0.016810f, -0.006344f, 0.003867f, -0.014894f, -0.002979f, 0.006938f, 0.010447f, 0.003611f, -0.023439f, -0.007202f, 0.004034f, 0.011241f, -0.009556f, 0.019615f, -0.002909f, -0.010396f, -0.006239f, -0.004600f, -0.008481f, 0.010531f, -0.008721f, -0.002449f, -0.011327f, -0.008678f, -0.004573f, -0.008822f, 0.010784f, -0.004511f, -0.023607f, 0.008458f, 0.014728f, -0.000108f, 0.004910f, -0.028205f, 0.021142f, 0.000060f, -0.018816f, 0.001513f, -0.012663f, -0.021366f, 0.003918f, -0.015916f, 0.015498f, 0.003422f, -0.006919f, -0.012975f, -0.022236f, -0.010043f, -0.016309f, 0.004681f, 0.029307f, 0.004446f, -0.008555f, -0.001131f, -0.004869f, -0.005294f, -0.014293f, -0.009567f, -0.014698f, 0.003126f, -0.001809f, 0.002417f, -0.005644f, 0.001677f, -0.015504f, -0.001642f, 0.002598f, -0.010646f, + -0.004470f, 0.000644f, -0.006248f, 0.000831f, -0.005817f, 0.021584f, -0.027916f, -0.005437f, 0.001403f, 0.006695f, -0.003601f, -0.011742f, -0.017441f, -0.012397f, 0.008117f, -0.002968f, 0.009090f, -0.009036f, 0.024904f, 0.002782f, -0.005798f, -0.000840f, -0.016086f, -0.020120f, -0.010672f, 0.006818f, -0.017473f, -0.001604f, 0.018794f, -0.001145f, -0.010049f, -0.019200f, -0.032181f, 0.000680f, 0.015405f, -0.005113f, 0.017834f, -0.002356f, -0.006394f, -0.012339f, -0.010745f, 0.001001f, 0.007074f, -0.006843f, 0.026943f, 0.006990f, -0.007628f, 0.017816f, -0.007588f, -0.020221f, -0.005435f, -0.015044f, -0.007800f, -0.006412f, 0.021735f, -0.005212f, -0.007130f, -0.008893f, 0.013989f, 0.012727f, 0.011111f, 0.030742f, 0.032012f, 0.015053f, 0.019911f, -0.007208f, -0.009149f, 0.013491f, 0.019617f, -0.008217f, 0.008624f, 0.006350f, -0.017020f, -0.015798f, 0.009490f, -0.002042f, -0.000247f, -0.015746f, -0.020471f, -0.004524f, -0.016622f, 0.019078f, 0.034928f, 0.007585f, 0.013712f, 0.004387f, -0.004246f, 0.012878f, -0.024067f, -0.006020f, 0.004808f, 0.013709f, -0.008066f, -0.018936f, 0.027998f, 0.000332f, + -0.008898f, -0.006506f, 0.011318f, -0.003071f, 0.010037f, -0.006668f, 0.015888f, -0.000975f, -0.000759f, 0.020384f, 0.005857f, 0.009596f, 0.003204f, -0.002697f, 0.014524f, -0.022426f, -0.009579f, 0.008834f, 0.025278f, -0.015371f, -0.002325f, -0.002914f, -0.004145f, -0.010437f, -0.002862f, -0.005118f, -0.007695f, 0.013184f, -0.012080f, -0.004430f, 0.011957f, -0.008551f, 0.005432f, 0.009091f, -0.016623f, -0.017813f, 0.005670f, 0.014385f, -0.004277f, 0.013163f, -0.008795f, -0.003693f, 0.024786f, -0.027141f, 0.017106f, -0.007442f, 0.000704f, 0.001142f, 0.030517f, -0.006275f, 0.006452f, 0.009934f, 0.017065f, 0.010061f, 0.015026f, -0.002018f, -0.001771f, 0.005116f, 0.002899f, 0.002796f, -0.013902f, 0.022895f, -0.029429f, -0.006227f, -0.007297f, 0.017155f, -0.002760f, 0.020823f, -0.000303f, 0.002313f, -0.035072f, -0.009416f, 0.022449f, 0.037416f, 0.000351f, -0.017982f, -0.014772f, 0.015608f, 0.012964f, 0.009605f, 0.009482f, -0.015338f, -0.006429f, -0.008696f, 0.005621f, 0.001106f, -0.008839f, 0.006150f, 0.005850f, -0.004057f, -0.004045f, -0.021085f, -0.004733f, -0.007428f, 0.031808f, 0.003307f, + 0.006842f, 0.012143f, 0.001985f, -0.023751f, 0.002236f, -0.014436f, 0.012822f, 0.011505f, -0.023885f, -0.010126f, -0.009920f, 0.002743f, -0.002788f, 0.031781f, -0.005682f, -0.000368f, 0.019645f, -0.020394f, -0.015191f, -0.019224f, -0.020008f, -0.006049f, -0.002181f, 0.006747f, 0.034120f, -0.004845f, -0.022013f, 0.035296f, -0.000905f, 0.008712f, 0.023697f, 0.015766f, 0.022008f, -0.007795f, 0.017058f, -0.013661f, 0.023094f, 0.019868f, -0.007392f, 0.009534f, -0.011479f, -0.010916f, 0.007729f, 0.026465f, 0.011106f, 0.009395f, 0.002385f, -0.010772f, -0.017206f, -0.017657f, 0.000926f, 0.017561f, -0.012954f, -0.015435f, -0.018380f, -0.008220f, -0.034796f, -0.009674f, 0.004581f, -0.026252f, 0.009954f, -0.000259f, -0.012925f, -0.030569f, -0.020969f, -0.002035f, -0.039801f, 0.009756f, 0.006377f, -0.003004f, 0.008472f, 0.004642f, -0.005859f, -0.022001f, -0.014216f, -0.004568f, -0.014887f, 0.009234f, -0.015633f, 0.028825f, -0.023818f, -0.001608f, 0.010906f, -0.002569f, -0.045857f, 0.016586f, 0.021508f, 0.037469f, 0.000311f, -0.027282f, 0.008230f, 0.013573f, -0.028096f, -0.029445f, -0.018074f, -0.000499f, + 0.016373f, -0.000609f, -0.011098f, -0.000421f, -0.009620f, -0.006691f, -0.017830f, 0.030886f, 0.024627f, 0.009154f, -0.037073f, -0.011214f, 0.006725f, -0.002089f, -0.007711f, 0.047762f, 0.018202f, 0.015000f, 0.014789f, 0.022628f, 0.017767f, 0.004080f, 0.018594f, -0.001307f, -0.028807f, 0.015909f, -0.029627f, 0.009152f, -0.029292f, 0.025291f, -0.007060f, 0.030540f, -0.015842f, 0.007197f, -0.012595f, 0.010766f, 0.019036f, 0.046604f, 0.011003f, -0.060175f, -0.002050f, -0.008805f, 0.013992f, 0.025552f, -0.004071f, -0.012229f, 0.020455f, -0.004094f, -0.008089f, 0.024923f, 0.003030f, -0.002037f, 0.002782f, 0.009997f, 0.022133f, 0.015129f, -0.016021f, -0.014479f, -0.009390f, -0.019489f, 0.006071f, -0.003482f, 0.022239f, 0.012566f, -0.025743f, 0.050414f, -0.018996f, -0.033493f, -0.010587f, 0.013149f, -0.008192f, 0.024220f, 0.035118f, -0.014069f, 0.032225f, 0.020652f, 0.016266f, -0.005332f, -0.003736f, -0.006518f, 0.031280f, 0.005625f, 0.003894f, -0.018224f, 0.008037f, -0.009593f, -0.000648f, -0.030089f, 0.020438f, -0.027651f, 0.000270f, -0.019585f, 0.032627f, -0.016839f, 0.000863f, 0.031826f, + 0.024530f, 0.016186f, -0.001841f, -0.013088f, 0.015031f, -0.000858f, -0.002786f, -0.041425f, -0.012091f, -0.025244f, -0.020052f, -0.016241f, -0.007362f, 0.020713f, 0.013407f, 0.011765f, 0.000034f, 0.030633f, -0.016669f, 0.032379f, 0.029083f, 0.030410f, 0.054617f, -0.022168f, -0.016738f, 0.022979f, 0.004246f, -0.022474f, 0.032669f, -0.012235f, -0.016444f, 0.009198f, -0.004711f, -0.013178f, -0.010252f, 0.012244f, -0.020177f, 0.006450f, -0.013173f, 0.027720f, -0.014606f, -0.002732f, 0.006584f, 0.017883f, 0.026808f, -0.005568f, -0.028450f, -0.049142f, -0.041851f, -0.004134f, 0.006205f, -0.029345f, -0.000904f, 0.000124f, 0.041569f, -0.030774f, -0.034626f, 0.008225f, -0.015753f, -0.002414f, -0.025799f, 0.020281f, -0.026152f, -0.034822f, -0.021544f, 0.034987f, -0.027456f, -0.023355f, -0.006695f, 0.012680f, -0.013054f, -0.029414f, 0.006506f, -0.013470f, -0.001637f, 0.009592f, -0.037188f, -0.005339f, 0.017891f, 0.028821f, -0.006484f, 0.045444f, 0.019475f, -0.008289f, 0.000525f, 0.019076f, -0.010603f, -0.022490f, 0.002186f, 0.023166f, 0.001424f, 0.009535f, -0.000849f, -0.024438f, 0.006009f, -0.050058f, + 0.002951f, -0.000641f, -0.007234f, -0.030912f, -0.026278f, -0.000302f, -0.012547f, -0.022422f, -0.013721f, -0.018825f, 0.017065f, -0.034572f, -0.018420f, -0.012705f, 0.012823f, -0.022135f, 0.037456f, -0.009838f, -0.032090f, -0.007120f, -0.018919f, -0.055200f, -0.014700f, -0.001729f, -0.000608f, -0.038587f, -0.015791f, -0.014683f, 0.036861f, 0.033001f, 0.010670f, 0.066502f, -0.011069f, -0.022058f, -0.019360f, -0.008812f, -0.034111f, 0.048497f, -0.027319f, -0.009737f, -0.021827f, -0.011300f, -0.009494f, 0.006236f, -0.032151f, 0.001076f, 0.001905f, -0.004136f, 0.011133f, -0.035079f, -0.007380f, 0.024766f, -0.022480f, 0.001672f, -0.029526f, 0.030338f, 0.002033f, -0.053148f, -0.025771f, -0.009490f, 0.000859f, 0.014963f, -0.030338f, -0.018120f, 0.024428f, -0.003810f, 0.017629f, 0.014079f, 0.016302f, -0.019588f, 0.004607f, 0.023409f, 0.011265f, -0.044345f, 0.031051f, 0.020158f, -0.021066f, 0.067243f, 0.001672f, -0.049105f, 0.016474f, 0.014724f, 0.002084f, 0.035390f, -0.007763f, -0.061197f, 0.020487f, 0.007675f, 0.021719f, 0.020291f, -0.023769f, 0.042364f, 0.020453f, 0.012077f, -0.006143f, 0.064382f, + -0.000597f, -0.000897f, 0.049871f, -0.010114f, 0.025624f, 0.032858f, 0.017604f, 0.001946f, -0.003075f, 0.013203f, 0.013638f, -0.046373f, -0.045521f, 0.094647f, 0.030793f, -0.058415f, -0.029203f, -0.026552f, -0.053509f, -0.003554f, -0.028065f, 0.039703f, -0.021817f, 0.000661f, 0.049312f, 0.001530f, 0.008489f, -0.035562f, 0.045483f, 0.034131f, -0.000243f, -0.010383f, -0.003181f, -0.027509f, 0.002462f, 0.004087f, 0.006054f, -0.037974f, -0.005281f, -0.001682f, -0.011268f, -0.008017f, -0.026225f, 0.025719f, 0.050143f, 0.060430f, -0.004553f, -0.023651f, -0.009792f, -0.011794f, -0.008063f, -0.036118f, 0.012826f, 0.014979f, 0.013509f, -0.037644f, -0.050756f, 0.055876f, 0.021207f, 0.031586f, 0.040478f, 0.038281f, -0.015936f, -0.025057f, 0.036692f, -0.036278f, 0.019152f, -0.026989f, -0.020778f, -0.011684f, 0.043660f, -0.013693f, 0.009281f, 0.015441f, -0.007325f, -0.034402f, 0.072834f, -0.043238f, 0.005158f, 0.052597f, -0.046607f, -0.021427f, 0.006420f, 0.018642f, 0.054732f, 0.025299f, -0.014884f, 0.016158f, 0.063585f, 0.038621f, -0.004865f, -0.039432f, 0.005015f, 0.065146f, 0.052065f, 0.011551f, + -0.050161f, -0.018887f, -0.043201f, -0.002556f, 0.035224f, 0.043246f, -0.002338f, 0.016861f, 0.051329f, 0.054477f, 0.084250f, 0.084692f, -0.041215f, 0.018914f, -0.044580f, -0.007595f, -0.036018f, -0.012626f, 0.029662f, -0.005943f, 0.013357f, 0.011895f, -0.025450f, -0.018650f, 0.021941f, 0.024198f, 0.031429f, 0.022307f, -0.000479f, 0.022939f, 0.034559f, -0.017724f, 0.017721f, 0.020312f, 0.006417f, 0.019783f, 0.065505f, -0.048820f, -0.041797f, -0.009442f, 0.040505f, 0.038523f, -0.022711f, -0.000410f, 0.061931f, 0.049782f, -0.035001f, -0.023675f, 0.021166f, -0.043203f, 0.011705f, -0.021135f, -0.039137f, 0.011852f, -0.046088f, 0.046527f, 0.016715f, 0.051459f, -0.022958f, -0.031895f, -0.060494f, -0.014246f, 0.017762f, -0.053580f, -0.046583f, -0.028503f, 0.025663f, 0.063929f, -0.003126f, -0.018745f, 0.041502f, 0.009082f, -0.001305f, -0.059366f, 0.053841f, -0.025374f, -0.055974f, -0.018758f, 0.005018f, 0.066403f, 0.007499f, 0.047717f, 0.020355f, -0.055322f, -0.010864f, -0.048988f, 0.009263f, -0.048866f, -0.034100f, -0.020760f, 0.003887f, 0.010747f, -0.036777f, 0.037853f, -0.010616f, 0.023102f, + 0.026040f, 0.024525f, 0.047087f, 0.083253f, 0.050335f, -0.015639f, -0.039171f, -0.001257f, 0.089123f, 0.054599f, -0.028006f, 0.043629f, -0.014962f, 0.053242f, -0.024555f, 0.005224f, -0.017868f, -0.009767f, -0.001026f, -0.014911f, 0.133377f, -0.024976f, -0.034207f, -0.041904f, -0.056839f, -0.022662f, -0.043268f, -0.001989f, 0.052997f, -0.020152f, 0.017286f, -0.016781f, -0.023550f, 0.046395f, -0.010407f, 0.078143f, 0.016957f, 0.062763f, -0.073356f, 0.032132f, 0.136433f, 0.049888f, -0.071269f, 0.046458f, 0.044564f, 0.005534f, -0.002119f, 0.086969f, 0.038253f, 0.005832f, -0.007271f, -0.104051f, 0.042026f, 0.058298f, -0.049607f, -0.037158f, 0.072865f, 0.046148f, -0.066490f, -0.070073f, -0.002270f, -0.042738f, 0.012113f, 0.002084f, 0.011321f, -0.066098f, 0.011477f, -0.016291f, -0.035508f, 0.050664f, -0.008572f, -0.013414f, 0.013686f, 0.041795f, 0.036576f, 0.024051f, -0.057758f, -0.003122f, -0.030708f, -0.060675f, 0.015619f, 0.011668f, 0.029769f, -0.016224f, -0.031304f, 0.067831f, -0.056850f, 0.018527f, 0.019983f, 0.016015f, 0.010376f, -0.013370f, 0.037500f, -0.043996f, -0.073495f, -0.015962f, + -0.083454f, 0.064155f, 0.037000f, 0.062806f, -0.010661f, 0.008592f, -0.059620f, 0.051845f, 0.066236f, 0.020741f, -0.035429f, -0.085003f, -0.023338f, -0.110695f, -0.003158f, -0.024988f, -0.075943f, -0.066294f, 0.024034f, -0.001379f, 0.041253f, -0.040211f, 0.049482f, 0.035953f, -0.057285f, 0.005708f, -0.008541f, -0.060756f, 0.029968f, 0.023169f, -0.027207f, 0.012443f, -0.012773f, -0.092719f, -0.022484f, 0.025362f, -0.008362f, 0.012307f, -0.050002f, 0.070648f, -0.087788f, 0.008882f, -0.063458f, 0.047779f, 0.053882f, 0.018186f, 0.045684f, 0.006233f, -0.040546f, 0.076109f, -0.031533f, 0.009227f, 0.004590f, -0.041684f, 0.074408f, 0.006122f, 0.022059f, 0.016635f, 0.025929f, 0.012816f, 0.057045f, 0.063518f, 0.025241f, 0.073957f, -0.059254f, -0.004145f, 0.004489f, 0.094111f, -0.013226f, 0.075048f, 0.046464f, 0.102811f, 0.025223f, -0.022970f, -0.027352f, 0.040815f, -0.071009f, 0.072230f, -0.037742f, -0.025989f, -0.005939f, 0.014171f, 0.061328f, -0.013447f, -0.092324f, -0.028473f, 0.168321f, 0.010753f, -0.093227f, 0.023519f, -0.058306f, 0.018016f, 0.168145f, -0.046049f, -0.032532f, 0.106861f, + -0.106186f, 0.055841f, 0.042278f, 0.030265f, 0.122870f, 0.057051f, -0.058159f, 0.081069f, 0.040091f, 0.054542f, 0.103918f, 0.051810f, -0.049957f, 0.066563f, 0.019798f, 0.060092f, -0.017450f, -0.110916f, 0.112706f, 0.098213f, 0.060009f, 0.185306f, -0.017541f, -0.155071f, -0.080612f, -0.073022f, 0.163822f, 0.120995f, 0.028787f, -0.010086f, -0.030440f, -0.108199f, -0.052057f, -0.034753f, -0.062922f, 0.167545f, 0.134984f, 0.188950f, 0.002886f, -0.215004f, -0.336366f, -0.163108f, 0.186332f, 0.253064f, 0.256987f, 0.104614f, -0.214473f, -0.391776f, -0.241587f, -0.120659f, 0.180170f, 0.308813f, 0.173884f, 0.096058f, 0.024381f, -0.137878f, -0.187790f, -0.138595f, -0.011740f, 0.109453f, 0.218259f, 0.263692f, 0.045305f, 0.052662f, -0.209753f, -0.343844f, -0.185634f, 0.173577f, 0.287209f, 0.275408f, 0.169252f, -0.098743f, -0.337664f, -0.215681f, -0.283541f, 0.002915f, 0.189164f, 0.208470f, 0.101562f, -0.080238f, -0.178637f, -0.155505f, -0.124794f, 0.036084f, -0.025331f, -0.062194f, 0.067820f, 0.008144f, -0.102695f, 0.011115f, -0.028042f, -0.042361f, 0.028593f, -0.032891f, -0.014087f, -0.055838f, + 0.001415f, -0.022463f, -0.042010f, 0.014333f, -0.006220f, 0.011709f, 0.004898f, 0.031718f, -0.034518f, -0.012892f, 0.008566f, 0.001857f, 0.014023f, -0.015853f, 0.032266f, -0.025646f, 0.021798f, 0.009198f, -0.012339f, -0.026900f, -0.012151f, -0.048785f, 0.049719f, -0.006539f, 0.000474f, -0.010827f, -0.013366f, 0.000823f, -0.002620f, -0.000716f, 0.018648f, 0.009670f, -0.001588f, 0.026457f, -0.025673f, 0.006586f, -0.024344f, 0.023381f, 0.014960f, -0.021901f, 0.013014f, -0.026327f, -0.027245f, -0.024404f, -0.041581f, -0.007455f, 0.030807f, -0.031478f, -0.056020f, -0.041952f, 0.003656f, 0.030266f, 0.001351f, 0.021093f, -0.052222f, -0.019058f, -0.004486f, -0.010789f, -0.049533f, -0.020349f, 0.005741f, -0.002011f, -0.011939f, 0.039243f, 0.038264f, -0.044458f, -0.055573f, -0.090486f, -0.141439f, 0.003970f, 0.114783f, -0.045493f, -0.072120f, -0.077212f, -0.072803f, 0.013759f, 0.013926f, 0.132236f, -0.020262f, -0.020463f, -0.060320f, 0.005329f, 0.017175f, 0.040681f, -0.045523f, 0.021228f, -0.033323f, 0.050855f, 0.015846f, 0.015662f, 0.005492f, -0.034029f, -0.018479f, -0.022733f, -0.007764f, 0.017360f, + -0.020358f, -0.018888f, 0.036149f, -0.035317f, -0.021719f, 0.028791f, -0.029708f, -0.012388f, -0.025589f, -0.042400f, 0.013686f, 0.024860f, 0.004230f, 0.023279f, -0.038886f, -0.011620f, -0.001803f, 0.020234f, 0.026769f, 0.032040f, 0.001689f, -0.005571f, -0.058182f, -0.061106f, -0.022585f, -0.021232f, -0.013707f, 0.025010f, 0.036314f, 0.050330f, 0.004871f, -0.026090f, 0.051569f, -0.039712f, -0.017967f, 0.021304f, -0.017835f, 0.067036f, 0.001870f, -0.013382f, 0.009642f, -0.026817f, 0.017331f, 0.046834f, 0.035386f, -0.013884f, 0.007795f, 0.034174f, -0.092828f, -0.213763f, -0.163945f, -0.021031f, 0.067504f, 0.179983f, 0.151525f, 0.144636f, 0.147671f, 0.096720f, 0.039276f, -0.056445f, -0.098440f, -0.185514f, -0.137455f, -0.134947f, -0.134719f, -0.084548f, 0.077321f, 0.105272f, 0.155563f, 0.119088f, 0.099178f, 0.031313f, 0.065337f, -0.017464f, -0.020029f, -0.023486f, -0.039555f, -0.071541f, -0.059287f, -0.118988f, -0.044998f, -0.094911f, -0.046633f, -0.024025f, 0.028001f, 0.004038f, 0.041126f, 0.008058f, 0.058581f, 0.042819f, 0.071397f, 0.096021f, 0.119441f, 0.075957f, 0.050130f, 0.084659f, + 0.004613f, -0.031144f, -0.108752f, -0.126870f, -0.174107f, -0.155096f, -0.145246f, -0.056411f, -0.095701f, -0.050552f, 0.004574f, 0.024962f, 0.059961f, 0.115301f, 0.123264f, 0.137873f, 0.209018f, 0.117753f, 0.161084f, 0.111958f, 0.027748f, -0.014646f, -0.060920f, -0.162501f, -0.174135f, -0.164951f, -0.175443f, -0.118887f, -0.036739f, -0.002198f, 0.004347f} + }, + { + {0.004627f, -0.001247f, 0.003163f, 0.002375f, 0.004371f, -0.000807f, -0.003535f, 0.006836f, -0.000962f, -0.010817f, -0.003143f, -0.012016f, 0.008397f, 0.001616f, -0.001813f, 0.001689f, -0.002308f, 0.001607f, -0.010072f, 0.008299f, -0.001014f, 0.002932f, -0.009426f, -0.003428f, -0.003458f, -0.013063f, -0.005021f, -0.001107f, -0.000166f, -0.000846f, 0.004906f, -0.001861f, -0.004828f, -0.003774f, -0.010108f, -0.000930f, -0.010092f, -0.000593f, 0.002258f, 0.002530f, -0.002650f, 0.000242f, -0.001839f, -0.000342f, -0.003490f, -0.003296f, 0.002182f, -0.002113f, -0.002515f, 0.004000f, 0.013333f, 0.000640f, 0.005849f, 0.010699f, -0.000998f, -0.002204f, 0.010010f, -0.005495f, -0.000756f, -0.002224f, 0.000462f, 0.004186f, 0.001793f, -0.004491f, -0.005257f, 0.005688f, 0.003223f, 0.006391f, -0.003809f, -0.003521f, -0.005040f, -0.002158f, -0.001952f, -0.002389f, -0.003433f, 0.001183f, -0.017397f, 0.013370f, 0.000607f, 0.006107f, 0.006067f, 0.017318f, 0.008123f, -0.006486f, -0.008161f, -0.011379f, 0.008053f, -0.009966f, -0.007246f, 0.001543f, 0.002440f, 0.000994f, 0.010147f, -0.003412f, 0.009481f, -0.002525f, + 0.008505f, -0.008190f, 0.003700f, -0.003672f, -0.008712f, -0.000708f, -0.016570f, 0.002376f, 0.003995f, 0.007278f, -0.006093f, -0.000210f, 0.006380f, -0.004861f, 0.007171f, 0.006690f, -0.004164f, 0.004763f, -0.005560f, -0.002689f, -0.004137f, -0.006068f, -0.007616f, 0.006586f, 0.009857f, -0.007610f, 0.004311f, 0.007835f, 0.006361f, 0.009621f, 0.001102f, -0.001660f, 0.005563f, 0.004132f, -0.010520f, -0.000606f, 0.001019f, 0.000437f, 0.003086f, 0.006480f, 0.001275f, 0.002184f, -0.003863f, -0.002543f, 0.004442f, 0.006390f, 0.003353f, -0.003837f, -0.006632f, 0.006560f, -0.006135f, -0.002157f, 0.003145f, -0.001523f, -0.001218f, 0.002570f, -0.000674f, 0.006880f, -0.003621f, 0.005041f, 0.000502f, -0.000416f, -0.013957f, 0.002251f, 0.011936f, -0.007307f, 0.004951f, -0.014844f, -0.014988f, -0.004951f, -0.012178f, -0.010664f, -0.001564f, 0.002199f, 0.008438f, 0.001330f, -0.003993f, 0.001893f, 0.005767f, -0.007393f, 0.010292f, -0.006943f, -0.007433f, 0.008658f, -0.004244f, 0.009975f, 0.012769f, 0.001745f, -0.009074f, 0.006392f, 0.004276f, 0.002553f, -0.004563f, -0.003393f, 0.005436f, 0.004436f, + 0.001019f, -0.010365f, -0.002864f, -0.009575f, 0.008768f, -0.008643f, -0.005483f, 0.006344f, 0.000458f, 0.005507f, 0.001751f, 0.002111f, 0.009585f, 0.001588f, 0.010745f, -0.013585f, -0.006750f, -0.003130f, 0.006985f, 0.009543f, 0.011163f, 0.014842f, 0.001923f, -0.004168f, -0.001060f, -0.001914f, -0.000044f, -0.009520f, -0.003737f, -0.004039f, -0.000601f, 0.001698f, -0.007098f, -0.004316f, -0.000825f, -0.002867f, -0.004687f, 0.007900f, 0.015673f, -0.012013f, -0.004650f, -0.002548f, 0.009549f, 0.008601f, -0.009134f, -0.001033f, -0.016762f, -0.003832f, 0.019820f, 0.007335f, -0.008294f, 0.014177f, 0.004469f, 0.005320f, 0.001241f, -0.005042f, -0.016009f, 0.001907f, -0.007336f, -0.004710f, -0.003112f, -0.009828f, -0.003633f, -0.007654f, 0.004967f, -0.003578f, -0.004585f, 0.008798f, -0.017211f, 0.015422f, -0.005735f, 0.002019f, -0.005545f, 0.004677f, -0.000859f, -0.001760f, -0.000645f, 0.006455f, 0.000106f, 0.004011f, -0.006292f, 0.011515f, -0.009323f, 0.013444f, 0.002687f, -0.001534f, -0.007846f, -0.009134f, 0.018319f, 0.003019f, -0.017574f, 0.017594f, 0.016545f, -0.009255f, -0.003522f, 0.005104f, + -0.007036f, -0.001422f, -0.004391f, 0.004072f, 0.010531f, -0.006613f, 0.002316f, -0.004962f, -0.004542f, 0.001681f, 0.014325f, -0.013215f, 0.008005f, -0.013561f, -0.010358f, -0.009683f, -0.001503f, 0.000653f, 0.000650f, 0.003112f, 0.006045f, -0.004576f, 0.002234f, -0.010513f, 0.013091f, -0.015387f, 0.002207f, 0.019330f, -0.030653f, 0.024042f, 0.010510f, -0.006930f, 0.008605f, 0.000990f, 0.021084f, -0.000385f, -0.014622f, -0.009622f, 0.008112f, 0.009261f, 0.003721f, 0.002238f, 0.009848f, 0.004206f, 0.002913f, 0.013003f, 0.006161f, 0.004979f, 0.009671f, 0.007618f, 0.029399f, -0.005855f, 0.008968f, 0.001423f, -0.003011f, 0.009074f, 0.006054f, 0.004701f, 0.005102f, -0.002663f, -0.006139f, 0.002439f, 0.001563f, 0.002358f, 0.005609f, 0.010492f, -0.007084f, -0.007175f, 0.005568f, -0.000132f, -0.001925f, -0.003392f, 0.012937f, -0.005961f, 0.017992f, 0.009928f, 0.002348f, 0.006146f, 0.003018f, 0.006858f, 0.022456f, 0.019958f, 0.002991f, 0.003580f, 0.005675f, -0.001449f, 0.009480f, 0.001208f, 0.008732f, 0.005344f, 0.002182f, 0.003574f, -0.007138f, 0.012733f, 0.008260f, -0.001481f, + 0.004724f, -0.001347f, 0.009669f, 0.000735f, 0.011091f, -0.003491f, 0.009943f, -0.006522f, 0.020058f, -0.014341f, -0.004752f, -0.006645f, 0.020721f, 0.011656f, 0.008152f, 0.012997f, -0.010573f, -0.001995f, 0.019277f, 0.010721f, 0.009553f, 0.009183f, 0.005722f, 0.006359f, -0.001116f, 0.017827f, -0.000807f, -0.007957f, -0.004973f, 0.006312f, -0.005552f, 0.004138f, -0.015538f, 0.006241f, -0.002019f, 0.000358f, -0.016698f, 0.007723f, -0.002580f, 0.016782f, -0.001434f, 0.005249f, 0.005975f, -0.007201f, -0.000351f, 0.007514f, 0.002522f, 0.005067f, -0.002266f, 0.009102f, 0.014818f, 0.001405f, -0.007566f, 0.003234f, 0.011043f, 0.006301f, 0.003061f, -0.006715f, -0.011075f, 0.010467f, -0.012434f, -0.006596f, 0.010302f, -0.019706f, -0.002050f, 0.011383f, -0.006315f, 0.001971f, 0.002995f, -0.001588f, 0.000646f, 0.004435f, -0.005755f, 0.000401f, -0.010970f, -0.007208f, -0.009628f, -0.006702f, 0.004236f, -0.036338f, 0.005185f, -0.012173f, -0.007457f, 0.007037f, 0.005157f, 0.003241f, 0.000572f, -0.027021f, -0.003711f, 0.006984f, -0.014903f, -0.004759f, -0.020021f, -0.010827f, 0.003302f, -0.003401f, + -0.018490f, 0.017129f, 0.010099f, -0.006754f, 0.001048f, 0.013204f, -0.010210f, 0.002673f, -0.007267f, -0.011238f, -0.007743f, -0.019366f, -0.007663f, 0.012450f, 0.005570f, 0.016236f, -0.009722f, -0.029886f, -0.013226f, 0.005707f, -0.010029f, -0.019959f, -0.003986f, -0.004838f, 0.016210f, 0.007331f, -0.020656f, 0.011884f, -0.014836f, -0.002264f, -0.010913f, -0.011216f, -0.010037f, -0.023432f, -0.013716f, 0.000114f, 0.013449f, 0.019783f, 0.013017f, 0.002411f, 0.007893f, -0.011334f, -0.016856f, -0.011710f, 0.009837f, -0.006673f, 0.010724f, -0.005091f, -0.010678f, -0.002294f, 0.000775f, -0.006851f, -0.011660f, -0.001216f, 0.009143f, -0.030697f, -0.017860f, 0.023383f, 0.014059f, 0.000161f, 0.007419f, -0.008741f, 0.007403f, -0.012158f, -0.000251f, 0.022430f, -0.009685f, 0.021189f, 0.021736f, 0.026352f, 0.007210f, 0.010769f, 0.023120f, 0.017876f, 0.013666f, -0.017007f, 0.003061f, 0.005796f, 0.015833f, -0.002669f, -0.012010f, 0.016916f, 0.017777f, -0.004561f, 0.012169f, -0.005404f, -0.004940f, 0.010767f, 0.010122f, -0.001139f, 0.011859f, 0.001072f, -0.016711f, -0.014104f, 0.016416f, 0.022318f, + -0.000649f, -0.007692f, 0.005840f, 0.000670f, -0.009442f, -0.019952f, 0.011599f, -0.018906f, -0.007914f, 0.014265f, 0.004335f, 0.012565f, 0.001874f, 0.020177f, 0.004207f, 0.022134f, -0.024614f, 0.023324f, -0.003112f, -0.001239f, 0.008649f, 0.012089f, -0.008422f, -0.022002f, -0.004453f, 0.019249f, -0.002108f, -0.023641f, -0.011800f, -0.014782f, 0.005750f, 0.007615f, -0.018037f, 0.009328f, 0.013823f, 0.019911f, 0.008813f, 0.005383f, 0.006639f, 0.022093f, 0.002507f, 0.009039f, 0.026293f, 0.028432f, 0.008173f, 0.006928f, -0.021663f, -0.011019f, 0.023056f, -0.017713f, 0.023558f, 0.006516f, -0.000559f, -0.005028f, -0.008871f, -0.014105f, 0.002048f, 0.010415f, -0.026334f, -0.011900f, -0.011514f, 0.005535f, 0.004636f, 0.005475f, 0.000228f, 0.004214f, -0.001534f, 0.007620f, 0.005714f, -0.007004f, -0.012744f, -0.022473f, 0.003279f, -0.012201f, 0.019475f, 0.000677f, -0.011897f, -0.014173f, -0.005028f, 0.009241f, -0.018291f, 0.010857f, -0.006655f, 0.003506f, -0.001023f, -0.012598f, 0.011547f, 0.015586f, -0.011651f, 0.013095f, 0.002844f, -0.001130f, 0.036682f, -0.009592f, -0.025429f, 0.004497f, + 0.008127f, -0.006252f, 0.000932f, -0.010794f, 0.024402f, 0.014676f, -0.003760f, -0.005698f, 0.016868f, 0.017064f, -0.004986f, -0.015150f, -0.012163f, 0.035085f, -0.004741f, -0.005584f, -0.015768f, 0.008379f, -0.020507f, -0.006430f, -0.007067f, 0.000761f, 0.007456f, 0.018475f, 0.016003f, -0.027881f, -0.000286f, 0.002316f, -0.003648f, -0.008920f, -0.019530f, -0.002759f, 0.005353f, 0.010210f, 0.008063f, -0.017936f, -0.003920f, -0.022507f, 0.019350f, 0.000046f, -0.002975f, 0.008916f, -0.010621f, -0.002606f, -0.024054f, 0.003033f, -0.014769f, 0.008673f, -0.002812f, -0.004702f, -0.008826f, -0.016152f, -0.015932f, -0.002604f, -0.019426f, -0.030784f, -0.006645f, -0.014485f, -0.029882f, -0.003176f, -0.003597f, -0.016588f, 0.009169f, 0.014975f, -0.003141f, 0.006702f, -0.003203f, -0.003335f, 0.003042f, 0.003841f, -0.024598f, -0.007697f, 0.011452f, -0.012050f, 0.026495f, 0.004230f, 0.005987f, -0.018788f, -0.001703f, -0.008902f, -0.019983f, -0.002710f, 0.024146f, 0.011289f, 0.017785f, 0.010264f, -0.010646f, -0.021439f, -0.034960f, 0.021498f, 0.019722f, -0.002696f, 0.008258f, -0.023692f, -0.051137f, -0.013285f, + 0.039518f, 0.012759f, 0.015753f, -0.011134f, 0.015925f, 0.027312f, 0.001452f, -0.005410f, -0.047234f, -0.011590f, -0.002782f, 0.026015f, 0.006939f, 0.009984f, -0.035518f, -0.010156f, -0.013567f, -0.009081f, 0.021151f, -0.013035f, -0.004819f, 0.002977f, 0.005657f, -0.011839f, -0.005384f, 0.004792f, -0.010321f, 0.020521f, -0.024499f, 0.001745f, 0.015219f, -0.021384f, 0.016279f, 0.027745f, 0.032771f, 0.015109f, 0.015746f, 0.020965f, -0.015578f, -0.028450f, 0.010401f, 0.011010f, 0.017603f, 0.013506f, -0.031706f, -0.009837f, 0.015721f, 0.008439f, 0.005301f, 0.018496f, 0.003717f, 0.021696f, -0.009154f, -0.005956f, 0.012277f, 0.010954f, 0.002852f, -0.021114f, -0.011534f, -0.022611f, -0.025530f, -0.002535f, -0.027916f, 0.000327f, -0.016753f, 0.000022f, -0.015451f, -0.009511f, -0.035940f, 0.022824f, 0.004804f, -0.006188f, -0.007870f, -0.005049f, 0.002781f, 0.031133f, -0.015981f, -0.013732f, -0.012263f, 0.021290f, 0.027113f, -0.017887f, 0.043845f, 0.008833f, -0.019590f, 0.022257f, 0.005876f, -0.018984f, -0.022370f, -0.018020f, -0.002048f, -0.009877f, -0.007104f, -0.029417f, 0.010975f, 0.011657f, + 0.039420f, 0.005028f, -0.007507f, -0.018472f, -0.019626f, 0.004435f, -0.002927f, -0.025694f, 0.003803f, -0.009725f, 0.000518f, 0.019275f, -0.015850f, 0.025614f, -0.023437f, -0.019347f, -0.002008f, -0.029952f, -0.036295f, 0.005584f, -0.004805f, -0.041209f, 0.002109f, 0.000354f, -0.020274f, 0.010178f, -0.010232f, 0.005147f, -0.028489f, -0.045286f, 0.028996f, -0.027650f, 0.045330f, 0.025282f, -0.033683f, -0.004028f, -0.034120f, -0.008729f, -0.004976f, 0.014210f, -0.012757f, 0.021602f, 0.025934f, 0.025893f, -0.018959f, -0.014152f, 0.001728f, -0.021474f, -0.002637f, -0.006122f, -0.029925f, 0.019228f, 0.013129f, -0.013549f, 0.024343f, -0.030224f, -0.025954f, -0.019536f, 0.014415f, 0.017173f, 0.019000f, 0.031281f, -0.010151f, 0.056788f, -0.000637f, -0.028106f, 0.013777f, 0.028387f, 0.008731f, 0.015287f, -0.011039f, -0.030232f, 0.047893f, 0.026654f, 0.020411f, 0.009793f, -0.014806f, 0.015739f, 0.040222f, -0.013579f, 0.009761f, 0.000291f, 0.009656f, 0.007351f, 0.029198f, -0.007327f, 0.010990f, -0.009143f, 0.010050f, -0.002025f, 0.000205f, 0.017776f, 0.005405f, -0.033728f, -0.021202f, -0.031586f, + -0.020147f, -0.016502f, -0.006523f, -0.024074f, -0.011901f, -0.011557f, -0.019232f, -0.014308f, 0.011624f, -0.021765f, -0.005383f, -0.016784f, 0.043782f, 0.021559f, 0.038548f, -0.032108f, -0.000400f, -0.029283f, -0.003486f, 0.033959f, 0.021367f, 0.039941f, 0.021954f, 0.024987f, -0.022465f, 0.012386f, 0.015172f, 0.037247f, 0.041039f, 0.012038f, 0.037951f, -0.027637f, -0.008718f, 0.023115f, -0.069669f, 0.003948f, 0.032903f, 0.021506f, -0.021038f, 0.041988f, 0.025016f, -0.001770f, -0.010120f, -0.004896f, 0.025278f, 0.061879f, 0.033125f, 0.009195f, 0.002801f, 0.020565f, -0.004728f, 0.050021f, 0.028276f, 0.031373f, 0.001438f, -0.015472f, 0.010682f, 0.004076f, -0.026285f, -0.006183f, -0.001561f, -0.005925f, -0.007448f, 0.010389f, 0.005553f, -0.021382f, -0.010360f, -0.038023f, -0.003927f, -0.011656f, -0.049300f, -0.021905f, 0.001438f, 0.018633f, -0.025451f, 0.031871f, -0.008912f, -0.007456f, -0.004488f, -0.007671f, 0.022854f, -0.015506f, 0.015863f, -0.050565f, 0.015321f, 0.021921f, 0.016633f, 0.033459f, -0.033678f, 0.028520f, -0.030347f, -0.022718f, 0.024362f, -0.015193f, -0.005110f, 0.020178f, + -0.034617f, 0.029029f, 0.047219f, -0.002252f, -0.008024f, 0.059740f, -0.014419f, 0.009676f, 0.033197f, -0.076625f, -0.039452f, -0.001386f, 0.000177f, 0.004380f, 0.015015f, 0.026735f, 0.016703f, -0.040139f, -0.011114f, -0.058470f, -0.035198f, 0.043148f, 0.042811f, 0.004692f, -0.010185f, 0.036438f, -0.058765f, -0.031377f, -0.063602f, 0.027931f, 0.007586f, 0.002998f, 0.012168f, -0.028695f, 0.014463f, 0.020322f, 0.026158f, 0.044903f, 0.045678f, 0.038823f, -0.001803f, 0.009009f, 0.000233f, -0.016467f, -0.003767f, -0.013674f, -0.007563f, 0.053579f, -0.012785f, -0.048548f, -0.012754f, -0.009659f, 0.003959f, 0.077113f, -0.028172f, -0.027029f, 0.025465f, -0.041040f, 0.013839f, -0.045566f, 0.059637f, 0.017549f, -0.002285f, 0.016011f, -0.023870f, -0.028795f, 0.040555f, -0.049530f, -0.040811f, -0.035384f, 0.009201f, 0.015768f, 0.017913f, -0.032706f, 0.033391f, -0.009818f, 0.001589f, 0.053694f, -0.004694f, -0.008106f, 0.014378f, 0.043614f, -0.028932f, 0.071788f, 0.001151f, -0.080395f, -0.011612f, -0.001843f, -0.029235f, -0.006319f, -0.002543f, -0.005639f, -0.025811f, -0.015545f, 0.032583f, 0.014916f, + -0.011762f, -0.002754f, 0.082589f, 0.050905f, -0.057949f, -0.045884f, 0.067416f, 0.064517f, 0.042152f, 0.047736f, -0.069888f, -0.011547f, -0.015777f, 0.024572f, 0.012078f, -0.025265f, -0.050329f, -0.078653f, 0.029304f, 0.026994f, 0.011357f, 0.027954f, -0.006515f, 0.000808f, -0.014909f, 0.021634f, 0.033877f, 0.031047f, 0.011768f, 0.039626f, 0.016083f, 0.001275f, -0.009008f, -0.045556f, 0.002366f, -0.016067f, -0.012568f, 0.023045f, -0.049299f, 0.010339f, 0.007454f, -0.019883f, 0.027577f, 0.026045f, 0.015477f, -0.030914f, -0.028641f, -0.084011f, -0.017316f, 0.006665f, -0.023131f, 0.011266f, 0.024777f, 0.025295f, 0.056192f, 0.031267f, -0.016130f, -0.008716f, -0.027140f, 0.049439f, -0.011292f, 0.080706f, 0.067906f, 0.024919f, -0.031995f, 0.089326f, 0.044680f, -0.023485f, 0.013081f, 0.050818f, 0.102866f, -0.027212f, -0.061751f, -0.023045f, 0.013496f, -0.004085f, 0.034979f, 0.014598f, -0.017005f, 0.018894f, 0.001718f, -0.014401f, 0.032058f, 0.011478f, -0.009765f, -0.029872f, 0.026464f, -0.050925f, -0.045962f, -0.016935f, 0.038067f, -0.021029f, -0.025346f, -0.000382f, 0.043864f, 0.004238f, + 0.045385f, -0.014926f, 0.054539f, 0.005638f, 0.030218f, -0.019012f, -0.010212f, 0.015992f, -0.052048f, -0.015930f, 0.022886f, -0.010586f, -0.004762f, -0.044741f, -0.038596f, 0.018009f, -0.022343f, -0.019389f, 0.036869f, 0.044982f, -0.003657f, 0.028925f, -0.051582f, 0.001568f, -0.011379f, 0.069368f, -0.025686f, 0.021588f, 0.047668f, 0.039237f, 0.016362f, -0.031641f, 0.022946f, 0.010418f, 0.017366f, 0.019884f, -0.065250f, 0.126225f, 0.046823f, -0.015227f, 0.012562f, 0.010290f, 0.042173f, -0.014762f, 0.034362f, 0.070267f, 0.002893f, -0.099601f, 0.046969f, 0.025509f, -0.024479f, 0.035648f, 0.000162f, -0.029678f, -0.038719f, 0.083861f, -0.035788f, 0.086876f, -0.037806f, -0.015465f, 0.088989f, 0.010650f, 0.048309f, 0.024660f, -0.048968f, 0.003072f, 0.029022f, -0.008729f, -0.042669f, -0.008158f, -0.093030f, -0.026027f, -0.034705f, -0.020057f, 0.020212f, -0.002737f, 0.033173f, -0.016339f, 0.003476f, 0.032383f, -0.029049f, 0.003075f, 0.018301f, -0.001887f, -0.031921f, -0.000133f, -0.022033f, 0.064060f, -0.011544f, 0.037071f, 0.005683f, -0.000755f, 0.065397f, 0.047244f, -0.029408f, -0.034166f, + 0.016177f, 0.029599f, 0.035535f, 0.043644f, -0.001459f, 0.015255f, 0.040843f, -0.002483f, -0.017558f, 0.012786f, 0.000517f, -0.037090f, -0.001901f, 0.024044f, -0.037461f, -0.049081f, -0.005978f, -0.003164f, -0.006773f, -0.016568f, -0.019391f, -0.058321f, -0.002017f, 0.057120f, 0.015332f, 0.031894f, 0.016167f, -0.007379f, -0.078272f, -0.054597f, 0.011241f, 0.049688f, 0.011597f, 0.026266f, 0.093541f, 0.105335f, 0.080069f, -0.002467f, 0.033769f, -0.020956f, -0.077170f, -0.023309f, -0.053661f, 0.020725f, -0.030382f, 0.021172f, -0.010643f, -0.036832f, -0.008125f, 0.003821f, 0.024935f, -0.013277f, 0.015050f, -0.056151f, 0.061079f, -0.122102f, -0.007709f, -0.027602f, -0.020827f, 0.020744f, 0.077238f, 0.015403f, 0.031379f, -0.058315f, 0.019228f, 0.026613f, 0.055010f, -0.022117f, -0.034588f, -0.024221f, -0.007940f, 0.001700f, 0.004739f, 0.033543f, 0.027782f, -0.014173f, -0.084938f, -0.039768f, -0.067772f, 0.012019f, 0.137008f, -0.088993f, -0.029966f, -0.010872f, 0.082281f, -0.021956f, 0.038939f, -0.020893f, 0.043634f, -0.011236f, -0.014523f, -0.043774f, 0.031964f, -0.051299f, 0.058344f, 0.093711f, + 0.020062f, -0.013893f, -0.008227f, 0.078016f, 0.029104f, 0.001916f, 0.049347f, 0.015489f, 0.024400f, -0.012281f, 0.097559f, -0.134897f, 0.110139f, -0.081830f, 0.051228f, 0.098792f, -0.066261f, 0.158633f, 0.120792f, -0.042710f, -0.000900f, 0.097942f, 0.019423f, -0.003389f, 0.092230f, 0.088067f, -0.075383f, 0.073397f, 0.067206f, -0.063294f, -0.096068f, -0.141290f, 0.032559f, 0.212621f, 0.086802f, 0.000666f, 0.043324f, -0.202710f, -0.084435f, -0.006792f, 0.030329f, 0.153238f, 0.148798f, 0.026344f, -0.058350f, -0.111891f, -0.066732f, 0.008315f, 0.047436f, 0.073804f, 0.116650f, 0.071811f, -0.095654f, -0.222928f, -0.183450f, -0.016904f, 0.202012f, 0.222024f, 0.138473f, 0.043863f, -0.048061f, -0.088852f, -0.137491f, -0.076274f, -0.084159f, 0.164067f, 0.133906f, 0.087116f, 0.074269f, -0.113134f, -0.162477f, -0.184936f, -0.168844f, 0.066586f, 0.225166f, 0.281407f, 0.092794f, -0.082112f, -0.200340f, -0.235709f, -0.066511f, 0.041225f, 0.022944f, 0.152231f, 0.056810f, -0.053035f, -0.035117f, -0.111260f, -0.026756f, -0.127483f, 0.055191f, 0.159534f, 0.289500f, -0.013753f, -0.157040f, -0.334677f, + -0.014577f, -0.113397f, 0.001321f, -0.019527f, 0.095682f, 0.055817f, -0.008436f, 0.020132f, 0.010411f, -0.068443f, -0.007031f, -0.005859f, 0.007571f, 0.001760f, 0.005634f, -0.025349f, -0.009751f, -0.009669f, -0.006011f, -0.011869f, 0.041113f, -0.015243f, 0.017887f, -0.031356f, -0.002689f, 0.011974f, -0.001001f, -0.010103f, 0.070973f, 0.008913f, -0.039343f, -0.047275f, 0.010357f, 0.008756f, -0.026583f, 0.006487f, 0.036121f, 0.017224f, 0.034102f, -0.035354f, 0.011174f, -0.002563f, 0.008927f, -0.025469f, 0.005564f, 0.025051f, 0.038789f, 0.007836f, -0.008654f, 0.009206f, 0.005525f, -0.010790f, 0.027078f, -0.040162f, 0.010059f, -0.064238f, -0.017764f, 0.022975f, -0.019245f, -0.027689f, 0.035560f, -0.024556f, -0.055645f, -0.048121f, 0.041926f, -0.008728f, -0.005265f, 0.004872f, 0.022959f, 0.045401f, -0.029437f, -0.048074f, 0.005571f, -0.012249f, 0.038386f, -0.007597f, 0.025312f, -0.001881f, 0.004354f, -0.057409f, -0.063156f, -0.148402f, 0.041161f, 0.040639f, -0.004319f, -0.125350f, -0.081426f, -0.013218f, -0.021618f, 0.081374f, 0.054598f, 0.025419f, -0.056109f, -0.024106f, -0.015760f, 0.050389f, + 0.004502f, -0.016250f, -0.033367f, 0.019786f, 0.008310f, 0.024316f, -0.002516f, -0.012024f, -0.014245f, -0.031152f, -0.015838f, -0.019439f, 0.048555f, 0.024995f, 0.004896f, 0.005945f, -0.033508f, -0.003226f, 0.003134f, 0.043754f, -0.004040f, 0.019617f, -0.017513f, -0.013166f, 0.008585f, -0.020080f, 0.011770f, 0.003988f, 0.012793f, 0.042714f, -0.004217f, 0.037336f, -0.000751f, 0.023510f, -0.019339f, 0.000315f, -0.028237f, -0.037893f, -0.038301f, -0.034204f, 0.011287f, 0.004542f, 0.003505f, -0.049666f, 0.024951f, -0.043290f, -0.003454f, 0.001271f, -0.024710f, -0.029476f, -0.012802f, -0.000119f, -0.047360f, -0.034576f, 0.035571f, -0.015349f, 0.035125f, 0.005107f, 0.029999f, -0.074171f, -0.179238f, -0.172072f, -0.028583f, 0.047901f, 0.167078f, 0.143649f, 0.135631f, 0.145455f, 0.080021f, 0.016702f, -0.077825f, -0.078828f, -0.159478f, -0.125193f, -0.109376f, -0.071194f, -0.087744f, 0.113803f, 0.094022f, 0.123482f, 0.070838f, 0.100231f, -0.006130f, 0.023697f, -0.018979f, -0.044208f, -0.025396f, -0.052178f, -0.058495f, -0.059913f, -0.057440f, -0.069373f, -0.049976f, -0.042844f, -0.006327f, 0.006408f, + 0.090294f, 0.073348f, 0.039027f, 0.039785f, 0.059154f, 0.052363f, 0.025669f, 0.127058f, 0.015692f, -0.002379f, 0.023380f, -0.053101f, -0.151508f, -0.047181f, -0.121483f, -0.133491f, -0.137336f, -0.100814f, -0.086533f, 0.000178f, 0.071231f, 0.068754f, 0.089146f, 0.157833f, 0.117093f, 0.138168f, 0.140754f, 0.085445f, 0.097694f, 0.029486f, -0.030681f, -0.111870f, -0.138810f, -0.165241f, -0.099287f, -0.146024f, -0.110967f, -0.133844f, -0.053083f, 0.030150f, 0.053929f, 0.036036f}, + {-0.001762f, -0.001927f, -0.005387f, -0.011765f, 0.000513f, -0.000946f, -0.008111f, 0.001718f, -0.000350f, -0.002172f, -0.002009f, 0.008071f, 0.007900f, 0.002005f, 0.011372f, -0.008689f, 0.008113f, 0.005199f, -0.007543f, 0.006350f, -0.014101f, -0.003699f, -0.022708f, -0.003347f, 0.004833f, -0.004680f, 0.003424f, 0.003284f, 0.001225f, -0.000676f, -0.002191f, -0.004385f, -0.001145f, 0.003789f, 0.004209f, 0.000485f, 0.005467f, -0.002181f, -0.004344f, 0.004546f, 0.005509f, 0.003640f, -0.009044f, -0.008412f, -0.005900f, -0.005315f, -0.005729f, 0.006423f, 0.004356f, -0.004930f, -0.008493f, -0.014221f, -0.001555f, -0.005097f, 0.003557f, 0.006529f, 0.001865f, -0.003169f, 0.000241f, 0.006130f, -0.005291f, 0.006801f, 0.000284f, -0.000893f, -0.016942f, -0.003569f, -0.006901f, -0.001780f, 0.008577f, -0.001167f, -0.004455f, -0.000708f, 0.007405f, -0.005220f, 0.000468f, 0.000620f, -0.008335f, 0.013709f, 0.004714f, -0.002633f, 0.003401f, 0.004325f, 0.008188f, 0.013722f, -0.006747f, 0.004475f, -0.005761f, -0.004529f, 0.002684f, -0.000098f, 0.001061f, -0.009906f, -0.004842f, 0.003312f, 0.006802f, -0.001057f, + 0.005719f, -0.010620f, -0.009386f, 0.005711f, 0.003656f, 0.001464f, 0.004174f, -0.003726f, 0.007425f, 0.008255f, 0.008075f, 0.011551f, -0.006574f, -0.005518f, 0.000336f, 0.001331f, -0.011303f, -0.000867f, -0.001055f, 0.002923f, 0.001023f, -0.007181f, -0.001811f, 0.009397f, -0.005188f, 0.001712f, -0.005940f, 0.002647f, 0.002869f, 0.001753f, -0.008812f, 0.006886f, 0.000555f, 0.001434f, -0.001295f, -0.003018f, -0.003716f, -0.006095f, 0.012559f, -0.002365f, -0.002441f, -0.002959f, 0.005508f, 0.001209f, -0.012096f, 0.002965f, -0.005602f, -0.008259f, 0.004705f, -0.005074f, -0.013113f, 0.005248f, 0.001754f, 0.000757f, -0.012033f, -0.014097f, -0.005361f, 0.008524f, 0.001387f, 0.001128f, 0.007625f, -0.010318f, 0.002219f, -0.008535f, -0.010941f, 0.003716f, 0.011067f, -0.006145f, 0.005469f, -0.004512f, -0.001988f, 0.002597f, 0.000939f, -0.004821f, -0.015260f, -0.015097f, 0.000677f, -0.003479f, 0.000252f, 0.008598f, 0.001694f, 0.010427f, 0.013844f, -0.006625f, 0.012005f, 0.001925f, 0.012174f, 0.001223f, 0.014371f, 0.002264f, -0.007468f, -0.001669f, 0.001148f, 0.006866f, -0.001372f, -0.001611f, + 0.001737f, 0.005338f, -0.005479f, 0.000150f, -0.001465f, 0.004790f, 0.005538f, 0.000802f, -0.004990f, 0.000144f, -0.000660f, 0.003589f, 0.005766f, 0.010349f, -0.003152f, 0.006910f, -0.002614f, -0.007994f, -0.007389f, -0.004601f, 0.005048f, 0.005808f, -0.002696f, 0.009063f, 0.000437f, 0.003663f, 0.000561f, 0.010909f, 0.006916f, 0.008192f, 0.003099f, 0.005050f, 0.002690f, 0.004678f, 0.008236f, -0.001437f, -0.000860f, 0.011141f, 0.011491f, -0.012848f, -0.008864f, -0.007342f, -0.010548f, 0.002635f, 0.003697f, -0.008517f, 0.001246f, 0.015969f, -0.012618f, 0.007869f, 0.013552f, 0.013573f, -0.009315f, -0.002821f, 0.006284f, 0.000897f, 0.001469f, -0.006724f, 0.002752f, -0.021769f, 0.016051f, 0.025884f, 0.003915f, 0.008472f, -0.005027f, -0.000722f, 0.013181f, -0.007686f, -0.017650f, -0.003139f, -0.000561f, -0.000370f, -0.014452f, 0.000705f, 0.002532f, -0.016473f, -0.008484f, 0.007239f, 0.001646f, -0.006013f, -0.002428f, 0.005371f, -0.008849f, 0.016538f, 0.004245f, 0.000573f, -0.011772f, -0.001246f, 0.004733f, -0.003816f, -0.000727f, -0.003985f, -0.001340f, -0.001725f, -0.009783f, 0.000437f, + -0.009546f, 0.012498f, -0.013412f, -0.008145f, -0.004040f, -0.014587f, 0.008374f, -0.007844f, -0.021704f, -0.003726f, -0.010263f, 0.002476f, 0.007697f, -0.009491f, -0.000534f, -0.006558f, 0.004814f, 0.000413f, -0.008281f, 0.000331f, 0.003129f, -0.008905f, 0.006548f, 0.000276f, -0.001344f, 0.007718f, -0.006279f, -0.023242f, -0.004161f, -0.000888f, 0.010886f, 0.015323f, 0.013526f, 0.006874f, -0.004666f, -0.001003f, -0.014234f, -0.011837f, 0.004736f, 0.017363f, -0.004367f, 0.017780f, 0.011328f, -0.009951f, 0.006094f, -0.000986f, 0.006341f, -0.011181f, -0.007604f, 0.002610f, 0.008908f, -0.000414f, 0.005442f, 0.007794f, -0.013045f, -0.002001f, -0.005856f, -0.017525f, 0.011628f, 0.002507f, 0.004396f, 0.008608f, 0.014710f, 0.005759f, 0.000921f, 0.012064f, -0.002428f, -0.005056f, 0.011853f, -0.005386f, 0.019870f, 0.009840f, 0.007979f, 0.001186f, -0.005549f, -0.006104f, 0.009741f, 0.013923f, -0.009702f, 0.003186f, 0.012543f, -0.001396f, 0.004047f, 0.028527f, -0.008443f, -0.002471f, 0.005262f, -0.012996f, -0.000728f, 0.003382f, -0.006398f, 0.007647f, -0.004713f, 0.005023f, 0.013581f, -0.004075f, + -0.000251f, 0.002365f, -0.005235f, -0.033339f, -0.001907f, 0.000009f, -0.005940f, -0.009866f, -0.002561f, 0.018978f, -0.012042f, -0.018737f, 0.008234f, -0.007240f, 0.003746f, 0.004071f, 0.013270f, -0.007783f, -0.001507f, 0.002985f, 0.012458f, -0.004796f, -0.006424f, -0.001724f, -0.005352f, 0.008906f, 0.016531f, 0.008223f, 0.001288f, -0.000833f, -0.007650f, -0.000116f, 0.025449f, 0.004651f, -0.001771f, 0.028366f, -0.000404f, 0.021156f, -0.004988f, 0.000458f, 0.015482f, 0.004549f, 0.004899f, 0.005265f, 0.003905f, 0.007959f, 0.006000f, -0.013165f, 0.026249f, 0.015125f, 0.021879f, 0.013664f, 0.010594f, -0.013542f, 0.007676f, 0.006829f, 0.002806f, -0.008426f, 0.024805f, 0.013703f, 0.022679f, 0.003418f, -0.002093f, -0.005479f, 0.017444f, -0.007922f, -0.013452f, 0.017951f, 0.008313f, -0.010962f, -0.003169f, -0.000077f, -0.001720f, 0.000446f, 0.001291f, 0.000529f, -0.001548f, -0.008331f, -0.000903f, -0.022052f, -0.008467f, -0.024716f, -0.016746f, 0.002100f, -0.015833f, -0.012533f, 0.001934f, -0.002629f, 0.017181f, -0.010934f, 0.019014f, 0.022939f, 0.002829f, -0.019181f, -0.013078f, 0.020581f, + -0.009841f, -0.005477f, 0.012028f, -0.014876f, -0.025999f, 0.010726f, 0.023547f, -0.011751f, 0.006491f, -0.000399f, 0.010661f, -0.027723f, 0.006210f, -0.011159f, 0.007408f, 0.000517f, -0.010899f, 0.019267f, 0.009600f, 0.008073f, 0.026537f, 0.011882f, 0.006141f, 0.014441f, 0.003773f, 0.004548f, 0.008234f, 0.002249f, 0.002091f, 0.003744f, 0.004469f, 0.029051f, 0.017479f, -0.000375f, 0.025631f, 0.015064f, 0.019233f, 0.028009f, -0.013398f, -0.012554f, 0.026042f, -0.009149f, 0.000267f, -0.015299f, -0.004964f, 0.008266f, 0.014560f, -0.011894f, 0.000125f, 0.003044f, -0.001621f, 0.006074f, -0.010195f, -0.003115f, -0.011801f, 0.025728f, -0.006064f, 0.012561f, 0.008515f, -0.009010f, 0.002950f, 0.001360f, 0.002918f, -0.012948f, 0.016931f, 0.009884f, 0.022988f, 0.004523f, -0.003110f, -0.025857f, -0.013871f, -0.009639f, 0.006605f, -0.013386f, -0.022482f, -0.006164f, 0.005718f, 0.002594f, -0.025126f, 0.020452f, 0.001505f, -0.001424f, -0.021435f, -0.012186f, 0.004951f, 0.002737f, -0.023835f, -0.007277f, 0.008554f, 0.001064f, 0.002258f, 0.012267f, 0.014057f, 0.008403f, -0.003848f, 0.007261f, + 0.002021f, -0.008422f, -0.017784f, 0.030352f, -0.007842f, -0.014662f, 0.000018f, 0.007577f, 0.009481f, 0.022685f, 0.003386f, -0.000371f, -0.008876f, -0.000233f, 0.012138f, -0.001591f, 0.015224f, 0.030015f, 0.002018f, -0.006589f, 0.000346f, 0.025750f, 0.031726f, -0.016310f, 0.003808f, 0.004256f, 0.016697f, 0.008879f, 0.002181f, 0.004870f, -0.013919f, 0.007314f, 0.007144f, 0.007311f, -0.006986f, -0.001063f, 0.004623f, 0.007000f, -0.007481f, 0.012867f, -0.009679f, -0.018295f, 0.014278f, -0.000583f, -0.003765f, 0.006069f, 0.012277f, -0.031320f, 0.002899f, 0.025797f, -0.001974f, 0.045609f, 0.022201f, -0.012567f, -0.009103f, -0.003119f, -0.011996f, -0.004647f, 0.020777f, -0.006569f, -0.005660f, 0.021050f, 0.017050f, 0.006467f, 0.010138f, 0.019781f, 0.013185f, 0.015108f, -0.009383f, -0.005814f, 0.018535f, -0.002279f, 0.016852f, 0.001324f, -0.018312f, -0.011059f, 0.005999f, 0.016394f, -0.019999f, 0.002596f, -0.010302f, 0.007154f, -0.011892f, 0.019045f, 0.018446f, -0.015832f, -0.001028f, 0.006459f, 0.000247f, -0.021822f, -0.009634f, 0.005506f, 0.016255f, 0.026973f, 0.009459f, -0.017213f, + -0.003325f, -0.002906f, -0.001365f, 0.017727f, 0.003407f, 0.014629f, -0.018358f, 0.010556f, 0.002257f, -0.013255f, 0.019093f, 0.009820f, -0.001332f, -0.001776f, 0.004401f, 0.001755f, -0.013984f, 0.021594f, -0.024441f, -0.003093f, -0.007119f, 0.027008f, -0.010629f, 0.022400f, -0.005664f, 0.020955f, 0.028248f, -0.011173f, 0.009652f, -0.006054f, 0.016582f, -0.005041f, 0.014007f, 0.011536f, 0.011219f, -0.001501f, 0.011760f, -0.004566f, -0.012325f, -0.005709f, 0.016247f, -0.016873f, 0.003991f, 0.000668f, 0.014641f, 0.027881f, -0.023623f, 0.001564f, 0.025613f, 0.000071f, 0.023545f, 0.003684f, 0.011086f, -0.002454f, -0.000566f, 0.006603f, -0.033001f, 0.003950f, 0.000543f, -0.013127f, 0.010479f, 0.006133f, 0.026343f, 0.012880f, -0.001035f, 0.047781f, 0.013264f, -0.024544f, 0.008097f, 0.002758f, 0.018059f, -0.010433f, 0.004734f, 0.014237f, 0.002696f, 0.008721f, -0.000854f, -0.027099f, -0.026233f, 0.000127f, -0.007710f, 0.022403f, -0.036146f, 0.048630f, 0.001566f, 0.026859f, 0.032999f, 0.006952f, -0.006152f, -0.007076f, -0.012304f, -0.020872f, 0.001039f, 0.002874f, -0.045001f, -0.003065f, + 0.015437f, 0.002678f, -0.016880f, -0.041719f, 0.000023f, 0.004979f, -0.007325f, -0.001535f, -0.012333f, 0.006735f, -0.010285f, 0.021845f, 0.007581f, -0.012563f, -0.016125f, -0.027213f, 0.020554f, -0.008433f, 0.001331f, 0.027224f, 0.036820f, 0.022918f, -0.003534f, 0.002381f, -0.025432f, -0.010342f, -0.010309f, 0.007319f, -0.036055f, 0.009944f, 0.009664f, 0.002655f, -0.018621f, 0.018372f, 0.027415f, -0.003759f, -0.000650f, 0.003950f, -0.016175f, -0.016136f, 0.009566f, 0.007505f, 0.020688f, -0.022037f, 0.024721f, -0.012151f, 0.013558f, -0.020207f, -0.016910f, -0.007300f, -0.000678f, -0.001337f, 0.008974f, -0.003313f, -0.037202f, -0.026473f, -0.007875f, 0.002468f, -0.037205f, 0.002130f, 0.018498f, -0.008085f, -0.004113f, 0.007598f, 0.015983f, -0.030556f, 0.017261f, -0.003251f, -0.004102f, 0.002803f, 0.014693f, 0.020417f, -0.017415f, -0.004754f, -0.007677f, 0.040086f, 0.000562f, -0.008635f, 0.031076f, -0.007296f, -0.013244f, -0.003799f, -0.003334f, 0.038662f, 0.044239f, -0.006224f, 0.009057f, 0.010981f, -0.006165f, -0.021625f, 0.009979f, 0.041137f, 0.031214f, 0.026685f, -0.010325f, 0.011328f, + 0.021813f, -0.029379f, -0.022076f, 0.024865f, -0.013429f, -0.014607f, -0.001510f, 0.031175f, -0.005311f, 0.028651f, 0.001348f, 0.025651f, -0.016218f, 0.035407f, 0.010324f, -0.011634f, -0.018921f, 0.006036f, -0.026532f, 0.002572f, -0.031383f, -0.011049f, -0.011688f, 0.017005f, -0.018279f, 0.028369f, -0.036188f, -0.062064f, 0.037660f, 0.016473f, -0.008270f, -0.000423f, 0.041589f, 0.019074f, 0.002621f, -0.011970f, 0.008403f, -0.005861f, -0.000222f, -0.028520f, -0.028607f, 0.015309f, -0.010023f, 0.007844f, 0.051977f, -0.015120f, 0.010879f, -0.035852f, 0.040428f, -0.015354f, -0.017865f, -0.010736f, -0.004519f, 0.014530f, -0.031106f, 0.025298f, -0.045925f, -0.034092f, -0.033078f, 0.046489f, 0.001652f, 0.020056f, 0.011937f, -0.040635f, -0.035614f, 0.024198f, -0.063612f, 0.018827f, 0.018967f, -0.003853f, -0.025291f, -0.023042f, 0.039709f, -0.021054f, -0.002774f, -0.006367f, -0.020541f, 0.030504f, 0.009624f, 0.027656f, 0.015886f, 0.019219f, -0.005969f, 0.031066f, -0.002824f, -0.019600f, -0.023613f, -0.004954f, 0.013292f, -0.017379f, 0.023787f, 0.015838f, -0.017963f, -0.063870f, -0.005437f, -0.004654f, + -0.001622f, 0.047536f, 0.001033f, -0.035948f, -0.021803f, -0.021635f, 0.019199f, -0.013278f, -0.030598f, -0.033168f, -0.021263f, -0.015573f, -0.076072f, 0.002917f, 0.009417f, 0.026161f, -0.039787f, 0.014292f, -0.032907f, -0.025435f, -0.009314f, 0.033322f, 0.007968f, 0.031191f, 0.055491f, 0.018635f, 0.012498f, 0.038410f, -0.028715f, -0.001282f, -0.014010f, -0.012897f, 0.028285f, 0.029929f, 0.041493f, 0.024314f, 0.024584f, -0.017565f, -0.039578f, 0.014262f, 0.002116f, 0.001809f, 0.004300f, 0.008505f, 0.011737f, 0.021142f, 0.008820f, 0.018194f, 0.011413f, 0.021069f, 0.050774f, 0.004142f, -0.059607f, -0.020350f, 0.018721f, 0.003141f, -0.010071f, -0.037632f, -0.023490f, 0.010967f, 0.035544f, 0.015128f, -0.028083f, 0.019167f, 0.016285f, -0.032672f, -0.003522f, -0.040993f, 0.037338f, -0.015602f, -0.019472f, 0.034091f, -0.027271f, 0.011093f, 0.069106f, -0.005144f, 0.014129f, 0.022002f, 0.003384f, 0.012198f, -0.034952f, 0.012029f, 0.010491f, 0.008931f, 0.090182f, 0.061234f, -0.002539f, -0.027342f, -0.015902f, 0.030010f, 0.035692f, -0.031687f, -0.014936f, -0.043435f, 0.078299f, 0.023473f, + 0.013324f, -0.008599f, -0.002992f, -0.012998f, -0.003739f, 0.056695f, -0.008433f, 0.018285f, 0.059219f, 0.013202f, -0.008048f, -0.034504f, 0.008827f, 0.021322f, -0.069758f, 0.024177f, 0.021803f, 0.056265f, -0.010875f, -0.050386f, -0.007120f, 0.034995f, 0.019637f, -0.056441f, -0.074550f, 0.008778f, 0.050737f, 0.020690f, 0.031016f, -0.017392f, 0.023946f, 0.004225f, 0.000647f, -0.026873f, -0.009706f, -0.041967f, 0.062625f, 0.021226f, -0.050938f, -0.034681f, 0.022683f, 0.002641f, 0.012432f, -0.015010f, 0.031105f, 0.018472f, 0.021331f, 0.041220f, 0.036111f, 0.007680f, 0.035262f, -0.018519f, 0.020092f, 0.000062f, 0.024444f, 0.011528f, -0.006346f, -0.014828f, 0.016669f, -0.022106f, 0.057964f, -0.015658f, -0.011607f, 0.011995f, 0.028287f, 0.028531f, -0.020035f, 0.050250f, 0.049153f, 0.028844f, 0.011248f, 0.003921f, -0.016964f, -0.038296f, -0.065889f, -0.011042f, 0.021976f, -0.002054f, 0.027032f, 0.029928f, 0.031670f, 0.010391f, 0.016928f, 0.106322f, -0.054587f, -0.025024f, 0.008908f, 0.018299f, -0.004671f, -0.087634f, 0.017622f, -0.018310f, 0.010389f, 0.005850f, 0.035233f, -0.009863f, + -0.017006f, 0.005916f, 0.027864f, 0.027318f, -0.015635f, -0.021308f, 0.005887f, -0.020530f, -0.064409f, 0.065733f, -0.019622f, 0.018041f, 0.005874f, 0.054957f, 0.044067f, 0.027173f, -0.026774f, -0.005124f, 0.037773f, 0.019383f, 0.044500f, 0.118443f, -0.007653f, -0.047950f, -0.012535f, 0.034672f, -0.005619f, -0.056614f, 0.084554f, 0.042824f, -0.030262f, -0.047743f, -0.006105f, 0.009091f, -0.015186f, 0.032270f, 0.028190f, 0.031525f, 0.062851f, 0.008937f, 0.017331f, 0.009521f, -0.025183f, -0.060927f, 0.033949f, -0.042242f, -0.030974f, 0.044266f, 0.023459f, 0.023776f, 0.012701f, 0.006888f, -0.003907f, -0.061187f, -0.053128f, -0.002268f, 0.029262f, -0.042058f, 0.034535f, -0.021015f, -0.045460f, 0.009237f, 0.035194f, -0.011926f, 0.004061f, 0.032042f, 0.033152f, 0.032057f, -0.002042f, -0.031095f, 0.015717f, 0.082213f, 0.002704f, 0.025100f, 0.039976f, -0.017148f, -0.041635f, 0.033608f, 0.027706f, 0.000711f, -0.021978f, -0.032695f, -0.057523f, 0.010228f, 0.035682f, 0.048374f, -0.040961f, -0.044129f, 0.054244f, 0.024010f, -0.001759f, -0.005725f, -0.021964f, 0.009967f, -0.009978f, -0.023705f, + 0.025226f, 0.029744f, 0.021407f, 0.001550f, -0.003801f, -0.017377f, 0.004266f, 0.012102f, 0.008358f, -0.019673f, -0.066585f, 0.014348f, -0.014511f, -0.020943f, 0.004603f, -0.009506f, 0.006566f, -0.067964f, 0.032269f, 0.023600f, -0.047262f, 0.032815f, 0.046026f, 0.036501f, -0.008878f, 0.005149f, -0.004721f, 0.023264f, -0.004163f, -0.001465f, 0.121422f, -0.037447f, 0.011553f, -0.033694f, -0.016974f, 0.066083f, 0.026607f, 0.021344f, 0.045300f, -0.057106f, -0.043538f, 0.065989f, -0.040804f, 0.032431f, 0.045532f, 0.001526f, 0.014256f, 0.013458f, 0.080353f, -0.029592f, -0.026050f, -0.074836f, -0.011260f, -0.035391f, 0.028548f, -0.050933f, 0.080354f, 0.030502f, 0.044121f, -0.018299f, 0.050628f, -0.027716f, 0.027241f, 0.085347f, 0.042872f, 0.032937f, -0.046139f, 0.014317f, 0.047937f, -0.039088f, 0.067442f, 0.024861f, 0.036510f, 0.032860f, -0.019532f, 0.033993f, 0.029300f, 0.012960f, 0.066769f, 0.050941f, -0.002961f, -0.111808f, -0.012431f, 0.053343f, 0.051304f, 0.052881f, 0.013165f, 0.029900f, 0.003229f, 0.015471f, -0.003125f, -0.034088f, 0.072777f, -0.001082f, 0.069307f, 0.031759f, + 0.050085f, -0.068747f, 0.047484f, 0.024157f, 0.021484f, -0.017594f, 0.016558f, -0.012385f, 0.015713f, 0.069649f, 0.027552f, 0.090657f, 0.004320f, 0.020305f, 0.052453f, -0.010381f, 0.082448f, 0.041032f, 0.006658f, -0.054799f, -0.035125f, 0.030216f, 0.002434f, -0.009260f, 0.000499f, -0.009578f, 0.004860f, -0.040300f, 0.024685f, -0.042970f, -0.065983f, -0.024165f, -0.006770f, -0.021576f, -0.020470f, 0.053562f, -0.011864f, 0.049384f, -0.054206f, 0.055327f, -0.002993f, -0.017411f, -0.052090f, -0.050011f, -0.021074f, -0.022819f, 0.037282f, -0.065022f, -0.080046f, -0.087431f, -0.104554f, 0.043841f, 0.049090f, -0.005205f, -0.009695f, -0.002652f, -0.025847f, 0.003569f, 0.011532f, -0.024195f, 0.068936f, 0.063525f, 0.042036f, 0.044648f, -0.044590f, 0.026233f, 0.001387f, 0.031680f, -0.014504f, -0.020581f, -0.065199f, 0.054653f, -0.058923f, -0.073416f, -0.019213f, -0.017861f, 0.074951f, -0.044676f, 0.009612f, -0.042429f, -0.011429f, 0.069565f, 0.013140f, 0.019668f, 0.035796f, 0.063453f, 0.003930f, -0.011048f, -0.081846f, -0.018727f, -0.006533f, -0.006043f, 0.044936f, 0.020282f, 0.152519f, 0.003744f, + -0.004301f, -0.054455f, -0.003498f, 0.056501f, 0.056259f, -0.009086f, -0.025812f, -0.079350f, 0.019996f, 0.043483f, -0.022878f, -0.058971f, -0.021313f, 0.042926f, -0.011822f, 0.030675f, -0.105599f, -0.064288f, -0.082196f, -0.025851f, 0.043293f, 0.018570f, -0.007635f, -0.025647f, -0.010942f, 0.078835f, 0.007315f, 0.005182f, 0.136005f, 0.017702f, -0.092148f, -0.069858f, 0.096887f, 0.086265f, 0.010177f, -0.060032f, -0.075312f, -0.041464f, 0.021083f, 0.083951f, 0.075839f, 0.051957f, -0.023723f, 0.013897f, -0.023830f, 0.030453f, 0.065397f, 0.097347f, 0.106654f, -0.008200f, -0.048824f, -0.081125f, -0.122577f, 0.003096f, 0.073644f, 0.281563f, -0.030749f, -0.010449f, -0.128468f, -0.051115f, 0.016803f, 0.036247f, 0.170486f, 0.123233f, 0.079069f, -0.079678f, -0.041943f, -0.077814f, 0.000587f, 0.142214f, 0.133214f, 0.159714f, -0.037573f, -0.149470f, -0.106260f, -0.151043f, 0.044089f, 0.145785f, 0.130158f, 0.233931f, -0.104833f, -0.130350f, -0.112254f, -0.016247f, 0.106787f, 0.138935f, 0.194570f, 0.088877f, -0.035436f, -0.071231f, 0.021602f, -0.003354f, 0.057618f, 0.153737f, -0.030612f, 0.095562f, + -0.032247f, -0.087158f, -0.010738f, -0.066484f, 0.089711f, -0.019237f, 0.105623f, -0.095035f, 0.001805f, -0.040571f, -0.099684f, 0.075053f, -0.052230f, 0.069736f, -0.053559f, -0.018778f, -0.004731f, 0.037066f, 0.007751f, -0.036172f, -0.020699f, 0.000717f, 0.053950f, -0.047955f, 0.061787f, 0.047346f, -0.034617f, 0.010598f, -0.043454f, -0.039949f, 0.071559f, -0.068475f, -0.037230f, 0.051409f, 0.109486f, 0.002596f, 0.013483f, -0.006618f, -0.050230f, -0.009864f, 0.043326f, -0.011808f, -0.075328f, 0.014397f, -0.018346f, -0.008181f, 0.019516f, -0.062358f, 0.030812f, 0.004375f, 0.019962f, 0.056223f, -0.119724f, -0.081164f, -0.032219f, 0.002563f, 0.115806f, -0.058169f, 0.039059f, 0.099783f, -0.056457f, -0.024750f, -0.008465f, 0.057139f, 0.068736f, -0.034414f, 0.015232f, -0.008469f, 0.022499f, 0.122684f, -0.050859f, -0.123759f, 0.018965f, 0.066885f, 0.005386f, -0.062929f, 0.031543f, 0.024327f, 0.028057f, -0.020149f, -0.015232f, -0.141170f, -0.048980f, 0.051614f, 0.073156f, 0.059504f, -0.073391f, 0.015084f, -0.193921f, -0.128563f, -0.109844f, -0.022979f, 0.081895f, 0.050088f, -0.009977f, -0.047828f, + -0.056986f, 0.018321f, -0.037168f, -0.009803f, 0.061298f, 0.011661f, -0.002764f, -0.073288f, -0.037942f, -0.013529f, -0.037374f, 0.013550f, -0.011382f, 0.029252f, -0.015254f, -0.007266f, -0.017584f, -0.009106f, -0.014322f, -0.045034f, -0.034461f, -0.070889f, -0.050699f, 0.025436f, 0.056846f, 0.060816f, 0.032301f, 0.051990f, -0.014531f, 0.043060f, -0.017246f, -0.030579f, -0.085078f, -0.010655f, -0.049363f, 0.026400f, 0.007757f, 0.092917f, -0.086597f, 0.020882f, 0.051323f, -0.039346f, -0.048337f, -0.033526f, -0.025180f, -0.029426f, 0.002374f, 0.062430f, 0.041159f, -0.028724f, -0.007411f, 0.041021f, -0.064078f, -0.077099f, 0.022620f, -0.089354f, -0.063185f, -0.067424f, 0.057336f, -0.003188f, -0.146400f, -0.223790f, -0.277248f, -0.216835f, -0.329274f, -0.047263f, -0.110757f, 0.051449f, 0.087256f, 0.262190f, 0.160599f, 0.270919f, 0.277590f, 0.371841f, 0.277528f, 0.278966f, 0.211799f, 0.020683f, -0.041244f, -0.091972f, -0.048201f, -0.202785f, -0.130760f, -0.105339f, -0.103401f, -0.106965f, -0.101840f, -0.103609f, -0.107350f, -0.125035f, -0.084832f, -0.147463f, -0.112600f, -0.102629f, -0.034177f, -0.123184f, + -0.024647f, 0.057338f, -0.082081f, -0.039387f, 0.042676f, 0.029103f, -0.067069f, 0.076234f, 0.105255f, 0.119018f, 0.169131f, 0.160947f, 0.003583f, 0.096875f, 0.166117f, 0.216882f, 0.183656f, 0.338509f, 0.330937f, 0.279630f, 0.240516f, 0.285089f, 0.155764f, 0.224532f, 0.290178f, 0.207591f, 0.147975f, 0.222268f, 0.084655f, 0.063842f, 0.149252f, 0.122812f, 0.104368f, 0.000607f, 0.079515f, -0.070202f, -0.010326f, 0.003784f, -0.133341f, -0.321848f, -0.259567f, -0.181902f} + } +}; +const float CRendBin_Combined_BRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][1774]={ + { + {-0.005305f, -0.009306f, -0.004660f, 0.000333f, -0.002579f, 0.006024f, -0.007170f, -0.011927f, -0.010003f, 0.001646f, 0.000000f, -0.003347f, 0.004923f, -0.000346f, 0.005562f, -0.007755f, -0.006056f, 0.001699f, -0.000024f, -0.001048f, -0.006565f, 0.001634f, 0.001073f, 0.001625f, 0.006711f, 0.004247f, -0.000942f, 0.002216f, 0.002039f, 0.002592f, -0.001572f, 0.000352f, 0.008799f, 0.005499f, 0.002320f, -0.004538f, -0.002513f, -0.001091f, -0.002906f, -0.003718f, 0.007095f, 0.002758f, 0.002912f, -0.000917f, 0.001438f, 0.000680f, 0.001594f, 0.001458f, 0.000755f, 0.004720f, -0.005079f, -0.003379f, -0.000617f, -0.000728f, -0.006900f, -0.003016f, -0.008830f, -0.005266f, 0.001599f, 0.002809f, -0.002623f, -0.007413f, -0.002008f, 0.002161f, -0.000588f, 0.004980f, 0.000251f, -0.001006f, 0.014358f, -0.007133f, -0.005107f, -0.001288f, 0.002992f, 0.001899f, -0.008580f, 0.002506f, -0.000384f, 0.009348f, 0.005239f, -0.006985f, 0.010292f, -0.006208f, -0.001592f, -0.000268f, -0.002990f, -0.004227f, -0.007273f, 0.001414f, 0.012032f, 0.000768f, 0.002481f, 0.004517f, 0.001594f, -0.004558f, -0.000890f, -0.002887f, + -0.002081f, 0.006618f, 0.002331f, 0.000488f, -0.002010f, 0.000860f, 0.000102f, -0.003126f, -0.003996f, 0.006386f, 0.005656f, 0.000522f, -0.001058f, 0.007469f, -0.010634f, -0.004575f, 0.005100f, -0.005042f, 0.009901f, 0.000496f, 0.007110f, 0.000379f, 0.001184f, 0.003849f, -0.003391f, -0.002083f, 0.000286f, -0.000615f, -0.002547f, -0.002893f, 0.004619f, -0.000739f, -0.009742f, 0.009004f, -0.000900f, 0.001068f, -0.008145f, 0.003512f, -0.003345f, 0.002791f, 0.000734f, -0.000911f, -0.002741f, -0.000975f, -0.004465f, 0.004456f, -0.009138f, -0.001810f, 0.007623f, -0.006373f, 0.003222f, 0.009701f, 0.003836f, 0.000101f, -0.004582f, -0.000605f, 0.003482f, 0.020249f, 0.003864f, -0.002974f, 0.006315f, -0.003212f, -0.002466f, -0.003407f, -0.001256f, -0.007804f, 0.010881f, 0.006083f, 0.004719f, 0.004849f, 0.004820f, -0.005210f, -0.006736f, 0.008905f, -0.001946f, -0.007287f, -0.013457f, 0.001973f, -0.003996f, 0.003980f, 0.000062f, -0.001399f, -0.003048f, 0.003965f, -0.005034f, -0.002804f, 0.006592f, 0.012338f, 0.003219f, 0.005436f, 0.001009f, 0.006026f, -0.001417f, 0.006416f, 0.004151f, 0.000402f, + 0.003652f, -0.000043f, 0.000966f, -0.000049f, 0.009074f, 0.001539f, 0.002252f, -0.002523f, 0.001172f, -0.001113f, -0.001507f, 0.007012f, 0.008344f, -0.003592f, -0.003415f, 0.001194f, 0.007615f, -0.013416f, -0.000980f, -0.004089f, -0.009846f, -0.004507f, 0.000956f, -0.004735f, 0.003825f, 0.002697f, -0.000164f, -0.006589f, 0.002199f, -0.002097f, -0.006114f, 0.006163f, -0.010479f, -0.005726f, -0.011270f, -0.006460f, -0.002545f, -0.000132f, 0.005432f, 0.003435f, -0.013124f, -0.000439f, 0.001115f, 0.009554f, -0.003381f, -0.014648f, 0.011671f, -0.013798f, 0.000047f, -0.005602f, -0.005764f, -0.014669f, -0.010977f, -0.005257f, -0.004620f, 0.007113f, 0.001418f, -0.009385f, 0.000703f, -0.004655f, -0.000661f, 0.000426f, 0.003439f, 0.001646f, -0.005183f, 0.001524f, 0.000330f, 0.003301f, -0.003896f, -0.001352f, -0.001709f, -0.004200f, -0.008409f, 0.011168f, 0.004004f, 0.002247f, -0.002223f, 0.009661f, 0.006799f, -0.007813f, 0.001606f, 0.001715f, -0.002498f, -0.004159f, 0.000288f, -0.008054f, 0.001136f, -0.000769f, -0.008233f, 0.010010f, -0.000776f, 0.000279f, 0.010371f, -0.008835f, 0.007918f, 0.004331f, + -0.002361f, -0.006221f, 0.001034f, 0.000058f, -0.008854f, -0.005268f, -0.001160f, -0.001602f, -0.004772f, -0.009380f, -0.000936f, 0.003626f, 0.003404f, -0.001648f, 0.002822f, 0.002977f, -0.004078f, 0.000227f, -0.009090f, -0.022975f, -0.021564f, 0.008266f, 0.014403f, 0.008532f, -0.019453f, 0.013727f, -0.004684f, -0.001960f, 0.001245f, -0.009238f, -0.006861f, 0.016166f, -0.000249f, -0.000271f, 0.001207f, -0.000655f, 0.005294f, -0.008438f, 0.004876f, -0.004627f, 0.004344f, 0.007170f, -0.005085f, -0.001705f, 0.004215f, -0.001632f, 0.007671f, -0.002847f, 0.003228f, 0.000242f, -0.000989f, 0.000189f, -0.006882f, -0.009770f, 0.008519f, 0.000614f, -0.001946f, -0.000489f, -0.008977f, -0.011422f, -0.000612f, -0.000433f, 0.005298f, -0.010741f, -0.008940f, -0.002559f, -0.018269f, 0.006160f, -0.001840f, 0.002814f, -0.001840f, -0.005193f, 0.002228f, 0.021943f, 0.012161f, 0.005619f, -0.007459f, 0.007917f, -0.000753f, -0.012960f, -0.000676f, -0.013580f, 0.009651f, 0.000009f, 0.000371f, -0.008570f, -0.000891f, 0.005382f, 0.001539f, -0.000556f, -0.000329f, -0.001486f, 0.006251f, 0.002631f, -0.000691f, 0.001764f, + -0.033100f, -0.002240f, -0.008153f, -0.000885f, -0.005737f, -0.018366f, -0.001037f, -0.004742f, -0.007919f, -0.017196f, -0.002387f, 0.012675f, -0.008894f, 0.008433f, -0.001665f, 0.011778f, -0.004110f, 0.009623f, -0.003286f, -0.008976f, -0.002682f, 0.001273f, -0.004249f, -0.008042f, -0.006866f, -0.007901f, 0.000095f, -0.007186f, 0.002561f, 0.001158f, 0.000599f, 0.003806f, -0.005749f, -0.007246f, 0.010728f, -0.000719f, 0.003111f, 0.000380f, -0.008608f, -0.005139f, -0.006086f, 0.000553f, -0.004370f, 0.007820f, 0.007657f, 0.001521f, -0.010442f, -0.003174f, 0.019210f, 0.005014f, -0.008072f, -0.006227f, -0.004032f, -0.006892f, -0.003645f, 0.015209f, 0.009282f, -0.010682f, 0.006866f, 0.009037f, 0.013318f, -0.003189f, 0.005633f, -0.000637f, 0.000519f, -0.005137f, -0.010374f, -0.001836f, 0.008638f, 0.000939f, 0.016306f, 0.011117f, 0.001715f, 0.003681f, 0.014384f, -0.010370f, 0.042281f, 0.028049f, -0.008539f, -0.001817f, 0.000248f, -0.001401f, -0.004694f, 0.005601f, 0.014508f, 0.011864f, 0.006393f, -0.022410f, -0.009763f, 0.002489f, 0.001311f, 0.009009f, -0.016619f, 0.002959f, 0.022521f, 0.014744f, + -0.002631f, 0.004951f, -0.002048f, -0.008092f, -0.010485f, 0.000070f, -0.008973f, -0.005706f, 0.002448f, 0.006430f, -0.006662f, -0.012688f, -0.005944f, 0.001446f, 0.010873f, 0.014835f, -0.003208f, -0.017095f, -0.003756f, -0.006601f, -0.016768f, -0.001770f, -0.000850f, -0.008716f, 0.002334f, 0.003567f, 0.009190f, -0.014709f, 0.005174f, 0.006151f, 0.001047f, -0.014362f, -0.010461f, 0.003465f, -0.000015f, 0.002317f, -0.002107f, -0.002527f, -0.001175f, -0.008702f, 0.002866f, 0.002458f, -0.006023f, 0.007742f, 0.010004f, 0.013322f, 0.002531f, -0.000711f, 0.012899f, 0.020944f, 0.002252f, 0.000754f, 0.002173f, 0.010603f, -0.000839f, 0.004005f, 0.018296f, 0.021401f, 0.001222f, 0.003842f, 0.006098f, 0.009888f, -0.003478f, 0.005986f, -0.005092f, -0.004511f, -0.017609f, 0.006425f, 0.013092f, -0.012173f, 0.010062f, -0.005575f, -0.015420f, 0.015734f, 0.010437f, -0.003911f, 0.010521f, 0.018542f, 0.014179f, -0.011051f, -0.005134f, 0.008823f, 0.003568f, -0.003254f, 0.008003f, 0.005893f, 0.010532f, -0.000437f, -0.004071f, -0.009802f, -0.015118f, -0.001635f, -0.012529f, 0.000426f, -0.003920f, 0.005985f, + -0.009983f, -0.024661f, 0.005332f, -0.007052f, 0.010951f, 0.001466f, 0.000924f, -0.007785f, -0.013799f, -0.012920f, -0.001135f, -0.002546f, -0.010527f, 0.013279f, 0.018808f, 0.018276f, 0.007709f, -0.015589f, -0.001591f, 0.017156f, 0.001346f, -0.004788f, 0.008127f, -0.004063f, -0.005410f, -0.019407f, 0.008904f, 0.003392f, 0.024643f, 0.010058f, -0.018734f, 0.003957f, 0.005009f, -0.003848f, -0.002202f, 0.004148f, -0.006422f, -0.007485f, -0.010735f, -0.003746f, -0.002272f, -0.020338f, 0.001606f, 0.001711f, 0.010445f, -0.004431f, -0.007872f, 0.002799f, 0.001656f, 0.003908f, 0.000723f, 0.009920f, 0.004844f, 0.006602f, 0.001800f, -0.001611f, 0.006873f, 0.002910f, -0.018838f, -0.006799f, -0.027165f, 0.000416f, -0.004677f, 0.002342f, 0.005367f, -0.000503f, 0.013667f, 0.002471f, 0.019304f, 0.001405f, -0.022034f, -0.000481f, -0.008643f, -0.004676f, -0.000702f, -0.004357f, -0.000814f, -0.018811f, 0.004187f, -0.009616f, 0.021720f, -0.023336f, 0.012603f, -0.005960f, -0.018785f, -0.004724f, -0.013179f, -0.004094f, -0.003922f, -0.021497f, 0.005909f, 0.004857f, -0.003648f, -0.004760f, -0.001288f, 0.005654f, + -0.016121f, -0.001202f, 0.014940f, 0.001040f, 0.020756f, 0.032312f, 0.013852f, -0.033124f, -0.041756f, 0.017639f, 0.008483f, 0.028039f, -0.007037f, 0.011286f, 0.002398f, 0.009894f, 0.019795f, 0.017751f, -0.037638f, 0.028082f, 0.005472f, -0.005171f, -0.000251f, -0.017294f, -0.013719f, 0.014641f, -0.003595f, -0.004908f, 0.015713f, -0.011455f, -0.011812f, 0.000636f, 0.015699f, 0.006458f, -0.004394f, 0.000457f, -0.008153f, -0.001144f, 0.001799f, 0.008216f, 0.001003f, -0.019277f, -0.018556f, 0.004428f, -0.001848f, 0.004761f, -0.001150f, 0.007878f, 0.015774f, 0.028048f, 0.000433f, 0.017482f, -0.003335f, 0.005089f, 0.012901f, -0.011379f, 0.023799f, -0.003033f, -0.013055f, -0.019733f, -0.002663f, -0.016311f, -0.019691f, -0.005501f, 0.010937f, -0.006164f, -0.014873f, 0.008431f, 0.013040f, 0.018428f, 0.024932f, -0.018731f, 0.008921f, -0.004966f, -0.015778f, 0.006935f, -0.017722f, -0.003245f, -0.029992f, 0.013152f, -0.007372f, 0.005105f, -0.003405f, 0.005400f, -0.031849f, -0.033980f, -0.017996f, -0.007749f, 0.022193f, -0.018196f, 0.039710f, -0.012527f, 0.007706f, -0.003159f, -0.003854f, 0.030651f, + 0.003190f, 0.010752f, 0.009749f, 0.002054f, 0.019967f, 0.001259f, -0.024761f, 0.011263f, 0.005079f, 0.010698f, 0.000152f, -0.020629f, 0.028988f, 0.013648f, 0.012697f, -0.003919f, -0.007045f, 0.002257f, -0.000674f, -0.016629f, 0.011273f, 0.005630f, -0.007183f, 0.009812f, 0.018941f, -0.000833f, 0.007972f, 0.016215f, -0.017723f, 0.003276f, -0.005077f, 0.006560f, -0.034522f, 0.009655f, 0.018609f, -0.007328f, 0.005941f, 0.015997f, 0.010592f, -0.001026f, 0.007057f, -0.019262f, 0.005961f, -0.011876f, 0.002140f, 0.003896f, 0.004175f, -0.009511f, 0.035685f, -0.007498f, -0.005198f, -0.009362f, -0.028667f, -0.013511f, -0.017070f, -0.022645f, -0.002816f, 0.028163f, 0.033688f, -0.004595f, 0.011260f, 0.011540f, -0.025866f, -0.010232f, 0.023190f, 0.016642f, -0.009620f, -0.009210f, -0.025599f, -0.010404f, -0.009101f, -0.014758f, -0.014162f, 0.001938f, -0.025678f, 0.007759f, -0.003203f, -0.009721f, 0.006045f, 0.002079f, -0.013618f, -0.019414f, -0.021535f, -0.008044f, -0.021025f, -0.008156f, -0.008583f, 0.000897f, -0.019942f, 0.005050f, 0.008314f, 0.001572f, -0.022682f, 0.007742f, -0.028100f, 0.009425f, + 0.015766f, 0.001224f, 0.024506f, 0.001562f, -0.007122f, -0.003588f, 0.016637f, -0.005008f, 0.022870f, 0.009027f, -0.007583f, -0.006752f, 0.004285f, -0.010486f, -0.005903f, 0.001974f, 0.021799f, 0.000457f, 0.011740f, 0.007675f, 0.002401f, 0.016326f, -0.006243f, -0.012428f, 0.006650f, -0.008454f, -0.004001f, -0.025443f, 0.015788f, -0.007909f, -0.007299f, -0.003834f, -0.028987f, 0.037214f, 0.009947f, -0.002447f, 0.016235f, 0.006935f, 0.008326f, -0.013750f, -0.022822f, -0.024812f, -0.012165f, 0.003608f, -0.026372f, 0.012483f, 0.020433f, -0.027967f, -0.010532f, 0.013897f, -0.013736f, 0.010338f, 0.033491f, 0.004420f, -0.007684f, -0.005791f, 0.022965f, 0.052419f, 0.057912f, 0.015739f, 0.036483f, -0.025375f, -0.022838f, -0.006996f, -0.002140f, 0.000702f, 0.009419f, 0.016700f, 0.033905f, 0.009311f, 0.031499f, 0.001999f, 0.010575f, 0.003147f, -0.006793f, 0.012382f, 0.001155f, 0.004144f, 0.003847f, -0.016610f, -0.000363f, -0.009519f, -0.015029f, -0.011638f, 0.001817f, 0.000343f, -0.020417f, -0.010363f, 0.029269f, 0.018651f, 0.015982f, 0.022153f, -0.012940f, -0.001143f, -0.038658f, 0.000578f, + 0.036185f, -0.008038f, -0.005250f, 0.002865f, -0.002062f, 0.025768f, -0.000485f, -0.005797f, 0.022541f, -0.026174f, -0.038630f, -0.017543f, 0.005330f, -0.022977f, 0.017788f, 0.021153f, -0.029981f, -0.013332f, 0.002085f, -0.001912f, -0.043718f, -0.030371f, 0.016532f, 0.004927f, -0.001417f, 0.013245f, -0.017805f, -0.013714f, -0.025930f, 0.005066f, 0.011463f, 0.000513f, 0.004679f, -0.020866f, -0.027754f, 0.022831f, -0.037235f, -0.053212f, -0.037023f, 0.025429f, -0.004714f, 0.046829f, -0.010848f, 0.038428f, -0.030741f, 0.000234f, 0.014830f, -0.003832f, 0.002462f, 0.003883f, -0.001670f, -0.024348f, 0.009085f, 0.008175f, 0.011150f, 0.011058f, -0.006452f, 0.018703f, -0.016821f, -0.013761f, -0.009244f, 0.026593f, -0.014218f, -0.005819f, 0.003333f, -0.001312f, -0.013283f, 0.011437f, -0.014903f, -0.019597f, -0.034569f, 0.002480f, 0.007488f, -0.024892f, -0.010248f, 0.010844f, -0.003843f, 0.005426f, 0.003005f, 0.027260f, 0.003068f, 0.020313f, 0.010576f, 0.000102f, 0.018128f, 0.003030f, 0.007123f, -0.032638f, 0.034093f, 0.010784f, 0.027067f, -0.016427f, 0.008284f, -0.017898f, 0.028189f, 0.019398f, + 0.034147f, 0.004388f, -0.006748f, -0.024384f, 0.000422f, 0.003452f, -0.018067f, 0.027925f, 0.006814f, 0.003932f, 0.033154f, 0.006573f, -0.006616f, -0.012257f, 0.001748f, 0.018863f, 0.024550f, -0.006319f, 0.023158f, 0.024551f, -0.057355f, -0.002179f, 0.029476f, -0.018519f, -0.006535f, 0.022443f, -0.023891f, -0.047650f, 0.009517f, 0.008859f, 0.007458f, -0.005570f, -0.028499f, 0.007990f, 0.008205f, 0.003004f, 0.015996f, -0.050219f, 0.023675f, -0.010897f, 0.012479f, -0.028089f, 0.024034f, -0.035753f, -0.023165f, 0.015503f, -0.009220f, -0.003032f, -0.027531f, 0.023358f, 0.029548f, 0.001332f, 0.003850f, -0.011849f, 0.044162f, 0.012354f, 0.012598f, -0.006244f, -0.036822f, -0.006350f, 0.021649f, -0.001954f, 0.032033f, 0.002187f, -0.010276f, 0.009528f, -0.001111f, 0.021631f, -0.036097f, -0.002270f, -0.027354f, 0.033214f, -0.010231f, 0.012804f, 0.000473f, 0.001471f, -0.032331f, -0.009153f, 0.031125f, 0.012300f, 0.004211f, -0.005960f, 0.002512f, 0.006905f, -0.041527f, -0.041501f, 0.049479f, -0.017726f, -0.049876f, 0.024681f, 0.026492f, -0.037884f, -0.052301f, -0.034005f, -0.033767f, 0.024630f, + -0.033540f, -0.015133f, -0.034932f, -0.000682f, 0.004499f, -0.041556f, 0.004859f, -0.019080f, 0.058952f, 0.005648f, -0.057086f, -0.010174f, 0.024577f, 0.018792f, 0.010958f, 0.030214f, 0.025831f, -0.037126f, -0.012089f, -0.012772f, 0.035281f, -0.010474f, 0.041561f, 0.002573f, -0.026922f, -0.017328f, -0.040614f, -0.041839f, 0.000910f, 0.007893f, -0.008963f, -0.020208f, -0.011397f, 0.005761f, 0.005493f, 0.018070f, -0.023276f, 0.013871f, -0.027035f, -0.027288f, 0.004537f, -0.003573f, -0.009282f, -0.028541f, -0.030955f, -0.011451f, -0.010259f, 0.045576f, 0.003006f, 0.017256f, 0.023169f, 0.002187f, 0.052992f, 0.024675f, -0.018377f, 0.005696f, 0.027322f, -0.007879f, 0.034900f, -0.006300f, 0.004576f, 0.005279f, -0.046966f, -0.045787f, 0.008098f, 0.036697f, 0.002165f, -0.007986f, -0.050967f, 0.005848f, 0.021304f, 0.013585f, -0.013430f, -0.012932f, -0.002462f, -0.023843f, -0.026628f, 0.053431f, -0.018304f, -0.016230f, -0.005223f, -0.011391f, -0.037161f, 0.003391f, 0.021430f, -0.056746f, -0.003546f, 0.018122f, 0.016442f, -0.017530f, 0.010943f, -0.031256f, 0.000087f, -0.005979f, 0.008113f, -0.027631f, + 0.016432f, -0.049003f, 0.005961f, 0.004354f, 0.026842f, 0.030628f, 0.011201f, -0.016344f, 0.019031f, -0.003225f, 0.021549f, -0.023111f, 0.001557f, 0.034001f, 0.021775f, -0.011128f, 0.002382f, 0.004180f, -0.009469f, 0.018431f, -0.008477f, -0.014295f, -0.022663f, 0.017974f, -0.038794f, 0.027707f, 0.002802f, -0.034634f, 0.033637f, 0.039101f, 0.029973f, 0.016270f, -0.019950f, 0.046882f, 0.002120f, 0.023088f, -0.028943f, -0.017214f, -0.027948f, 0.013393f, 0.006439f, 0.021291f, -0.038162f, 0.010153f, 0.022189f, -0.059375f, -0.001117f, -0.013409f, 0.038078f, 0.037046f, 0.016872f, 0.006225f, 0.023123f, -0.010412f, -0.006943f, 0.006219f, 0.043586f, 0.010191f, 0.021716f, -0.063159f, 0.028819f, -0.035097f, 0.047479f, -0.004268f, 0.017954f, 0.037095f, -0.040371f, 0.070898f, 0.049561f, 0.038560f, -0.018307f, 0.010727f, 0.047206f, -0.011674f, -0.016642f, -0.010848f, -0.003730f, -0.036083f, 0.008410f, -0.019047f, -0.045546f, 0.043162f, 0.012796f, 0.012075f, 0.003927f, 0.010206f, 0.015075f, 0.045328f, 0.007893f, -0.027889f, -0.004056f, -0.028978f, 0.004044f, 0.004388f, -0.053115f, -0.002036f, + 0.026041f, 0.002157f, -0.005654f, -0.015562f, 0.052463f, 0.011313f, 0.021052f, 0.012060f, -0.031726f, -0.021008f, -0.018488f, 0.033902f, 0.017487f, -0.006794f, 0.017908f, -0.003045f, -0.039956f, 0.036012f, 0.001406f, 0.041281f, 0.001397f, 0.004224f, -0.002577f, -0.054848f, 0.003815f, 0.001479f, 0.002088f, 0.034177f, -0.017868f, 0.053838f, -0.086469f, -0.014130f, 0.055111f, -0.023959f, 0.013164f, -0.026366f, -0.052099f, 0.030453f, 0.013289f, -0.068058f, -0.077215f, -0.009102f, -0.035330f, 0.002804f, 0.024104f, -0.033914f, 0.010758f, -0.050678f, 0.022454f, -0.029079f, -0.130662f, -0.011078f, 0.081825f, -0.037392f, -0.013731f, 0.078160f, -0.017877f, 0.001493f, 0.097990f, -0.026177f, 0.022385f, 0.005986f, -0.013303f, 0.074889f, -0.062102f, -0.011425f, -0.001036f, -0.014490f, -0.012062f, -0.016424f, -0.001063f, 0.021748f, -0.013906f, -0.046426f, 0.000793f, -0.003115f, 0.012805f, 0.011413f, 0.002933f, 0.030779f, -0.001332f, 0.011674f, -0.009668f, -0.046925f, 0.029261f, -0.010049f, -0.043843f, -0.003414f, 0.024666f, 0.071578f, 0.038346f, 0.059047f, 0.000671f, 0.009999f, 0.030040f, 0.001019f, + -0.004737f, 0.053759f, -0.004296f, -0.030712f, 0.069491f, 0.004623f, 0.011078f, -0.007943f, -0.011580f, 0.031062f, -0.001788f, -0.034108f, -0.028504f, -0.017879f, -0.007395f, 0.045815f, -0.043724f, -0.017728f, 0.000876f, 0.047975f, 0.033181f, -0.070921f, -0.039192f, 0.060009f, -0.013449f, -0.052331f, -0.003459f, 0.004306f, 0.017167f, 0.063352f, 0.050613f, -0.029752f, 0.007031f, -0.004257f, -0.002375f, 0.002683f, -0.037474f, 0.055469f, -0.018295f, -0.030940f, 0.009413f, -0.021261f, 0.026921f, 0.005929f, 0.039468f, -0.009642f, -0.042702f, -0.032787f, 0.029303f, -0.011978f, 0.038981f, -0.007739f, 0.024354f, -0.023903f, -0.023841f, -0.009525f, 0.000443f, -0.030827f, 0.005915f, 0.005367f, -0.001913f, 0.037156f, -0.002834f, 0.014834f, -0.025737f, 0.020297f, -0.039191f, 0.043097f, -0.037761f, 0.027157f, 0.009585f, 0.036903f, -0.057710f, 0.005721f, 0.002405f, -0.012869f, -0.042278f, -0.063896f, -0.013565f, -0.053878f, -0.024456f, -0.042239f, -0.023770f, -0.080486f, -0.028508f, 0.042699f, 0.046419f, 0.030893f, 0.026009f, -0.000023f, 0.028251f, -0.055662f, -0.016945f, 0.013787f, 0.031726f, -0.097862f, + 0.028741f, 0.014909f, -0.051158f, 0.019791f, 0.019213f, -0.037803f, -0.028536f, 0.043227f, 0.005474f, 0.022671f, -0.011808f, 0.028223f, -0.009295f, -0.005405f, 0.022698f, 0.010130f, 0.007312f, -0.000357f, -0.015636f, -0.027565f, -0.016413f, 0.040274f, -0.014929f, -0.037214f, 0.060738f, 0.036383f, 0.004423f, 0.026400f, 0.007817f, -0.033169f, -0.093824f, 0.036495f, -0.003666f, -0.052289f, 0.041739f, -0.006482f, -0.068672f, -0.059372f, -0.030441f, 0.042334f, 0.017174f, 0.043787f, 0.057523f, 0.014735f, -0.048002f, 0.012018f, 0.016032f, -0.063162f, -0.010681f, 0.030444f, -0.019802f, -0.069085f, -0.050767f, -0.083731f, -0.052069f, -0.015878f, 0.049064f, 0.068192f, 0.033708f, -0.010067f, 0.048654f, -0.018344f, -0.124920f, -0.104144f, 0.019496f, -0.056512f, -0.060603f, 0.075330f, 0.008488f, -0.122324f, -0.090080f, 0.017964f, 0.001406f, 0.004155f, 0.036953f, 0.076707f, 0.090723f, 0.091119f, -0.029602f, 0.032832f, -0.038080f, 0.024149f, -0.000066f, 0.014755f, -0.045004f, 0.005323f, -0.038564f, -0.031464f, -0.000754f, -0.075124f, 0.000893f, -0.030787f, 0.007645f, 0.024745f, -0.001475f, 0.028397f, + -0.038700f, 0.059631f, -0.029137f, 0.001228f, 0.039048f, -0.035095f, 0.014013f, 0.031044f, 0.034706f, 0.007512f, 0.012268f, 0.011226f, -0.055748f, -0.028251f, -0.009233f, 0.010804f, 0.008347f, -0.005536f, 0.036596f, -0.009069f, -0.000534f, -0.004157f, -0.015834f, 0.015917f, 0.007470f, -0.040775f, 0.013153f, -0.032088f, 0.010008f, -0.081353f, -0.003613f, 0.001185f, 0.000420f, 0.037926f, -0.013188f, -0.027321f, -0.012879f, 0.035338f, 0.000965f, -0.077983f, 0.115609f, -0.006138f, -0.020362f, 0.028900f, -0.003194f, -0.012721f, -0.019271f, -0.018549f, -0.021861f, 0.082736f, -0.026992f, -0.041088f, 0.043272f, 0.008035f, -0.055564f, -0.010989f, -0.070194f, -0.110332f, -0.101091f, 0.225298f, 0.191523f, 0.212334f, 0.489578f, 0.123670f, -0.121284f, 0.034150f, -0.390901f, -0.419965f, -0.102506f, -0.266131f, -0.201899f, 0.117796f, -0.064720f, 0.019677f, 0.310067f, 0.147912f, 0.229152f, 0.435910f, 0.293301f, 0.069776f, 0.061883f, -0.138396f, -0.405959f, -0.316441f, -0.239081f, -0.485245f, -0.196566f, 0.001950f, -0.088698f, -0.048017f, 0.236000f, 0.053187f, 0.026778f, 0.287055f, 0.030719f, 0.059249f, + 0.417018f, 0.298784f, 0.189613f, 0.387060f, 0.191078f, -0.085095f, -0.015589f, -0.142658f, -0.634996f, -0.561862f, -0.451995f, -0.702527f, -0.534358f, -0.204458f, -0.261431f, 0.034296f, 0.459096f, 0.401020f, 0.569358f, 0.715940f, 0.531493f, 0.402013f, 0.395612f, 0.199941f, -0.104729f, -0.184990f, -0.370999f, -0.527100f, -0.513325f, -0.461475f, -0.516861f, -0.542007f, -0.442561f, -0.288258f, -0.224376f, -0.030303f, 0.292413f, 0.359055f, 0.229948f, 0.019701f}, + {-0.006448f, -0.013510f, -0.005207f, -0.007604f, 0.000151f, 0.002616f, 0.008048f, -0.003880f, 0.000648f, -0.005956f, -0.004635f, -0.006334f, 0.003120f, -0.007287f, 0.001648f, -0.006135f, 0.012057f, -0.000682f, 0.000952f, -0.000570f, -0.008507f, 0.005430f, 0.012815f, 0.000208f, -0.003189f, 0.000662f, -0.002445f, 0.004132f, -0.001517f, -0.002179f, -0.002248f, -0.015186f, -0.004820f, 0.001228f, -0.002259f, 0.003936f, -0.004522f, 0.003400f, -0.000925f, 0.004108f, -0.002582f, 0.004413f, 0.000831f, 0.006221f, 0.003053f, -0.001982f, 0.002512f, 0.001591f, -0.003263f, -0.005955f, -0.002549f, -0.001034f, 0.003576f, 0.001500f, 0.000333f, -0.001103f, 0.006983f, 0.007610f, -0.008354f, -0.003011f, -0.007620f, 0.004418f, -0.000585f, -0.004339f, -0.002117f, -0.002822f, -0.003072f, -0.000413f, -0.004624f, 0.005044f, -0.006309f, -0.002869f, 0.000556f, 0.003456f, 0.001275f, 0.002772f, -0.001062f, 0.016799f, -0.002357f, 0.001471f, 0.012913f, -0.001553f, -0.000800f, -0.003691f, 0.014081f, 0.000947f, 0.006732f, 0.004320f, 0.003980f, -0.005806f, 0.002728f, -0.009051f, -0.001240f, 0.007141f, 0.001177f, 0.004196f, + 0.006395f, -0.011231f, -0.008153f, 0.002710f, -0.000854f, 0.008378f, 0.004788f, -0.000433f, -0.004960f, -0.002933f, -0.006073f, -0.000941f, -0.001110f, -0.000902f, 0.001235f, 0.002132f, -0.005368f, 0.008314f, -0.002310f, -0.001393f, 0.002467f, -0.010787f, -0.002880f, 0.004507f, 0.001206f, 0.010411f, -0.000486f, -0.000925f, 0.001596f, 0.000546f, 0.003908f, 0.007108f, 0.008783f, -0.000752f, -0.001481f, -0.000071f, -0.005888f, -0.007042f, 0.003171f, 0.005765f, -0.004850f, -0.004396f, -0.003387f, 0.007371f, 0.003879f, -0.001448f, 0.000492f, -0.009526f, -0.003387f, 0.004273f, 0.003096f, 0.006235f, -0.010704f, 0.001697f, 0.002672f, -0.002545f, 0.005726f, 0.021308f, 0.006370f, -0.005348f, 0.011465f, -0.005744f, 0.011926f, -0.004186f, -0.004824f, 0.005507f, 0.011198f, -0.000668f, -0.004880f, 0.002548f, 0.002712f, -0.000757f, -0.014865f, 0.003286f, 0.004960f, 0.000937f, 0.010052f, 0.012606f, 0.007406f, 0.012421f, 0.009126f, 0.007476f, -0.001556f, 0.008344f, 0.004654f, -0.006741f, 0.002966f, 0.003751f, -0.007849f, -0.010849f, -0.001090f, 0.004011f, 0.000723f, -0.004013f, -0.004583f, -0.005168f, + -0.001911f, 0.005610f, 0.012102f, 0.009637f, 0.004280f, 0.007396f, -0.011484f, 0.000687f, -0.002466f, 0.000065f, -0.013250f, 0.005120f, -0.000693f, -0.003273f, 0.000112f, -0.003738f, -0.006199f, -0.004759f, 0.005541f, 0.001265f, 0.004418f, -0.004919f, 0.010162f, 0.002623f, -0.010263f, 0.004774f, 0.002099f, 0.003357f, 0.006716f, 0.002208f, 0.011725f, -0.003037f, 0.001880f, -0.012278f, 0.003045f, 0.001985f, 0.000715f, 0.001192f, 0.001635f, -0.004948f, -0.003861f, -0.001986f, 0.004586f, -0.007982f, 0.002725f, -0.015226f, 0.003308f, 0.002219f, -0.001152f, 0.009933f, 0.001224f, -0.001718f, 0.001504f, 0.005002f, -0.008431f, 0.000735f, 0.003322f, 0.005195f, -0.012225f, -0.007031f, -0.004254f, 0.004143f, 0.002499f, -0.004565f, -0.012346f, 0.002586f, -0.012273f, -0.001337f, 0.005701f, -0.002932f, 0.004492f, -0.002772f, 0.009277f, 0.012302f, 0.007411f, -0.007202f, 0.001877f, 0.009189f, 0.006658f, -0.006575f, 0.005713f, 0.000956f, -0.009356f, 0.002973f, 0.014463f, 0.005909f, 0.005323f, 0.014815f, 0.002103f, -0.006386f, -0.011012f, -0.001068f, -0.005824f, -0.008473f, -0.002941f, 0.007895f, + -0.007172f, 0.002243f, -0.003890f, -0.005037f, 0.010806f, -0.001851f, 0.002662f, 0.007286f, 0.011819f, -0.005326f, -0.008580f, 0.011902f, 0.010999f, 0.005481f, 0.002236f, -0.008259f, 0.003261f, 0.008771f, -0.007123f, -0.029270f, -0.010413f, -0.004668f, 0.016143f, -0.006211f, -0.002132f, -0.009555f, -0.007675f, -0.001501f, -0.020669f, 0.011621f, 0.004191f, -0.000706f, -0.007416f, 0.011473f, -0.002911f, 0.005797f, -0.004321f, 0.003651f, 0.007758f, -0.009258f, 0.001376f, 0.010144f, 0.006172f, 0.004089f, 0.011322f, 0.009740f, -0.005638f, -0.007755f, -0.009222f, -0.000112f, -0.012255f, 0.003117f, -0.016326f, -0.003139f, 0.012983f, 0.006643f, -0.003687f, -0.001179f, -0.012069f, 0.005920f, -0.004776f, 0.011365f, -0.005762f, -0.011271f, -0.001644f, -0.004495f, -0.008680f, 0.003920f, -0.001371f, -0.005705f, -0.005285f, -0.020000f, 0.003659f, -0.005726f, -0.014139f, -0.003594f, 0.010279f, 0.005230f, -0.006746f, 0.006957f, 0.009399f, 0.008580f, 0.004170f, -0.009736f, -0.000441f, -0.001556f, 0.008602f, -0.006437f, -0.001276f, 0.004819f, 0.005547f, -0.010121f, -0.011648f, -0.022679f, -0.001954f, -0.011231f, + -0.025036f, -0.010375f, -0.004278f, -0.007750f, 0.008857f, 0.010991f, 0.010855f, -0.021378f, -0.015523f, 0.005814f, 0.025971f, 0.014952f, 0.000226f, 0.003403f, 0.007564f, -0.009508f, 0.006334f, -0.008833f, 0.006417f, 0.008883f, 0.001632f, 0.007079f, 0.002505f, -0.000766f, 0.004017f, 0.002008f, -0.006693f, -0.008982f, 0.012271f, 0.004652f, -0.008621f, 0.008408f, -0.004620f, -0.001123f, 0.020934f, -0.010131f, 0.011925f, 0.022983f, 0.009638f, -0.001534f, 0.001057f, -0.008568f, 0.011005f, -0.011270f, -0.005908f, -0.018803f, 0.003654f, 0.014201f, -0.000222f, -0.013333f, -0.004565f, -0.018823f, -0.009363f, -0.003581f, -0.026461f, -0.014555f, -0.002503f, 0.002758f, -0.011514f, 0.005869f, -0.002952f, -0.009184f, 0.010097f, 0.029440f, 0.002899f, 0.015081f, 0.010364f, 0.008970f, -0.009049f, 0.004149f, -0.015504f, 0.002025f, 0.005073f, 0.004003f, -0.005324f, 0.000701f, 0.038967f, 0.025495f, -0.014132f, 0.005588f, 0.012158f, -0.004737f, 0.006711f, -0.001969f, 0.011283f, 0.006436f, 0.003208f, 0.011245f, 0.005486f, 0.005800f, -0.003966f, -0.025967f, 0.012034f, -0.004043f, -0.006653f, 0.021133f, + 0.012153f, 0.007591f, 0.008876f, 0.007518f, 0.004586f, -0.003618f, 0.002372f, 0.001261f, -0.007475f, 0.005880f, 0.008221f, -0.014507f, 0.002113f, -0.009254f, 0.006373f, 0.008645f, -0.024092f, -0.000002f, -0.028544f, 0.000849f, 0.002642f, 0.002718f, 0.006724f, 0.019281f, -0.003189f, -0.009464f, -0.005711f, -0.004930f, -0.008228f, 0.005774f, 0.004901f, 0.002148f, -0.004081f, -0.003099f, 0.017352f, -0.005811f, -0.004765f, -0.009765f, 0.015206f, -0.002219f, 0.012545f, -0.006217f, 0.013430f, -0.013904f, -0.031024f, -0.008625f, 0.000482f, 0.006200f, 0.008592f, -0.009845f, -0.008982f, 0.004211f, 0.001098f, -0.004506f, -0.009306f, 0.018805f, -0.008410f, 0.018218f, -0.006801f, -0.012563f, -0.000313f, 0.001666f, -0.017316f, -0.014026f, -0.004144f, 0.004474f, -0.002396f, 0.022489f, 0.013895f, 0.000283f, 0.021973f, 0.007524f, 0.006563f, -0.018996f, 0.017688f, -0.003620f, -0.004222f, -0.016091f, -0.006949f, 0.013611f, 0.013948f, -0.004302f, 0.009291f, -0.019300f, -0.002530f, 0.012331f, 0.009693f, -0.007463f, -0.013328f, -0.007942f, -0.008204f, -0.010768f, -0.008538f, 0.001665f, -0.014044f, -0.001772f, + 0.019594f, -0.009811f, 0.002317f, -0.001150f, -0.004441f, 0.007201f, -0.003072f, 0.012348f, 0.000049f, 0.017588f, -0.004597f, -0.011735f, 0.006521f, -0.009344f, -0.008873f, -0.009330f, -0.025550f, 0.002616f, 0.010562f, 0.014891f, 0.010943f, 0.019709f, -0.002079f, -0.007914f, 0.011517f, -0.014356f, 0.003261f, 0.002148f, -0.002184f, 0.013056f, 0.012024f, -0.002781f, -0.015520f, 0.003783f, -0.008145f, -0.013323f, -0.014152f, 0.004258f, -0.021943f, -0.013695f, 0.002920f, -0.013372f, -0.032730f, 0.024697f, 0.000002f, -0.002175f, 0.003755f, 0.001480f, -0.021447f, 0.014886f, -0.022378f, 0.001541f, 0.011075f, -0.003519f, 0.004409f, 0.003207f, -0.024103f, -0.008805f, -0.010405f, -0.002774f, 0.005673f, -0.008599f, -0.004537f, -0.001482f, -0.000831f, 0.001786f, 0.010962f, 0.005060f, 0.022857f, -0.008536f, 0.031144f, -0.002605f, 0.001480f, -0.020411f, -0.002301f, 0.014358f, -0.002278f, -0.031140f, 0.013060f, 0.013798f, -0.008450f, 0.007082f, -0.010775f, 0.020796f, 0.012453f, -0.001068f, -0.000556f, -0.014109f, -0.008004f, -0.015397f, 0.014686f, 0.013329f, 0.006773f, 0.001101f, 0.007004f, -0.012513f, + -0.030955f, -0.012058f, 0.011794f, 0.004376f, -0.022797f, 0.000100f, 0.003440f, 0.002714f, -0.010635f, 0.007570f, 0.017246f, 0.008098f, 0.000796f, 0.006237f, 0.011680f, -0.006986f, 0.016581f, -0.000276f, -0.034510f, 0.018284f, -0.004238f, 0.006347f, -0.009849f, -0.006289f, 0.015272f, -0.017702f, 0.017096f, -0.010973f, -0.019412f, 0.008348f, -0.010249f, 0.041742f, 0.006762f, -0.015540f, -0.020173f, -0.004429f, -0.025140f, -0.012497f, -0.027125f, -0.002391f, 0.018807f, -0.013846f, 0.011738f, 0.017770f, -0.016861f, -0.000779f, -0.019757f, 0.010417f, 0.004298f, -0.001627f, 0.012162f, -0.013452f, -0.017736f, -0.016172f, 0.001320f, 0.002428f, 0.015402f, -0.022813f, 0.015762f, 0.002008f, -0.032001f, -0.018790f, -0.025811f, -0.011781f, 0.010045f, -0.009906f, -0.008538f, -0.050670f, -0.000923f, -0.012091f, -0.004454f, -0.033015f, -0.011009f, -0.005519f, 0.002464f, 0.024513f, 0.023554f, 0.018534f, 0.011398f, 0.023464f, -0.027009f, 0.019385f, 0.002694f, 0.008148f, 0.006737f, -0.020865f, 0.029431f, 0.016769f, 0.011207f, -0.014871f, -0.018408f, -0.014372f, 0.016102f, 0.000679f, -0.001873f, 0.013611f, + 0.024282f, 0.027018f, 0.010566f, 0.018997f, 0.014768f, 0.009356f, -0.005243f, 0.002318f, -0.007647f, 0.000935f, -0.002881f, -0.015818f, 0.020168f, 0.032884f, 0.012613f, -0.008614f, 0.014229f, 0.014178f, -0.000947f, 0.008913f, -0.015750f, -0.029339f, -0.020095f, -0.013203f, 0.008189f, -0.003308f, -0.015865f, 0.011849f, -0.005705f, -0.013577f, -0.000556f, 0.024277f, 0.011719f, 0.018056f, 0.005855f, 0.013363f, 0.014176f, -0.003061f, 0.012961f, -0.004910f, -0.015577f, 0.006699f, -0.017971f, 0.006859f, 0.006701f, -0.025659f, -0.017149f, 0.010922f, 0.026607f, -0.013639f, 0.018494f, 0.026445f, -0.021809f, 0.001208f, 0.023690f, 0.002909f, -0.008799f, -0.001657f, -0.012236f, -0.020995f, 0.000349f, -0.006082f, -0.010995f, 0.015128f, 0.001124f, -0.023969f, 0.031964f, -0.012408f, 0.026371f, -0.029467f, -0.019124f, 0.015358f, -0.016237f, 0.010759f, -0.008628f, -0.003141f, 0.002168f, -0.023897f, 0.015828f, -0.011270f, -0.022530f, 0.032898f, 0.019335f, -0.026096f, 0.018802f, 0.013856f, 0.006062f, 0.027323f, -0.058304f, 0.002434f, 0.026040f, 0.006511f, 0.003651f, 0.024100f, 0.002436f, 0.012235f, + -0.033201f, -0.006778f, 0.010778f, -0.001738f, -0.015983f, 0.004507f, 0.015222f, 0.004417f, 0.007869f, 0.016043f, 0.016588f, 0.022029f, 0.020480f, -0.010115f, -0.006676f, 0.016313f, -0.010489f, 0.010557f, -0.020322f, -0.014511f, -0.026344f, -0.015473f, 0.016257f, 0.002218f, -0.005257f, 0.019385f, -0.025735f, -0.039538f, -0.057561f, 0.014696f, 0.021267f, 0.012199f, 0.013400f, -0.017679f, 0.010315f, -0.012085f, 0.023124f, 0.054829f, -0.008227f, -0.017032f, -0.024739f, -0.013033f, 0.023147f, -0.020313f, 0.013731f, 0.016167f, 0.004668f, -0.006621f, -0.015944f, -0.011715f, 0.009610f, -0.048469f, -0.035888f, -0.004628f, 0.008398f, -0.023449f, 0.004996f, 0.089813f, 0.048937f, 0.033097f, -0.009389f, -0.007899f, -0.002323f, -0.006434f, -0.010356f, -0.012649f, -0.017819f, -0.027359f, -0.000005f, -0.000943f, 0.005670f, 0.013453f, 0.022339f, 0.036775f, -0.006084f, -0.045494f, -0.019502f, 0.040902f, -0.007560f, 0.015923f, -0.006524f, 0.000270f, 0.025218f, 0.010124f, 0.018802f, 0.012768f, -0.002242f, -0.000340f, -0.001804f, 0.014256f, 0.015703f, -0.005860f, -0.027669f, 0.035065f, 0.023086f, 0.018188f, + 0.004904f, 0.009578f, -0.015481f, -0.025325f, 0.034175f, 0.020539f, 0.007587f, -0.016064f, -0.020115f, -0.025436f, -0.017651f, -0.004210f, -0.017953f, 0.009294f, -0.034940f, 0.004811f, 0.022585f, -0.015784f, 0.006683f, 0.001482f, 0.001557f, -0.037965f, 0.011276f, -0.016561f, 0.025351f, -0.061280f, 0.008043f, -0.016693f, -0.023055f, 0.003836f, -0.015107f, 0.010767f, 0.008919f, -0.042146f, -0.002609f, 0.023445f, 0.001515f, -0.054665f, -0.027785f, 0.003842f, -0.047661f, 0.010804f, 0.034966f, -0.016890f, 0.042466f, 0.049388f, 0.006541f, 0.024604f, 0.030805f, 0.013562f, -0.029065f, 0.019001f, 0.023583f, -0.001269f, 0.006169f, 0.016339f, 0.014832f, 0.034868f, 0.006262f, -0.013570f, 0.022631f, 0.007928f, -0.003156f, 0.000443f, 0.015295f, -0.020492f, -0.008904f, -0.008688f, 0.012841f, 0.006452f, -0.028462f, 0.008507f, 0.024463f, 0.000653f, 0.029421f, -0.027425f, -0.051446f, 0.004193f, 0.023702f, 0.035256f, 0.033088f, 0.016940f, 0.015959f, 0.012530f, -0.034743f, -0.010160f, -0.000954f, 0.026626f, 0.042348f, -0.014221f, 0.009582f, -0.015114f, 0.010499f, 0.006970f, 0.026094f, 0.039789f, + -0.014501f, -0.016813f, -0.002696f, 0.022135f, 0.028521f, 0.039495f, 0.001800f, -0.041171f, -0.038678f, -0.005454f, 0.006113f, 0.001439f, -0.017059f, 0.002242f, -0.046481f, -0.027898f, -0.026484f, -0.025261f, 0.016624f, 0.023664f, -0.051488f, 0.005310f, -0.010658f, 0.028693f, -0.015352f, -0.001462f, 0.008312f, 0.022090f, -0.028675f, -0.046829f, -0.008480f, -0.017639f, 0.001256f, -0.020395f, 0.012713f, 0.013851f, 0.001332f, -0.024435f, 0.016283f, 0.003094f, 0.043381f, -0.005312f, 0.023956f, -0.018257f, 0.044971f, 0.014630f, 0.028315f, 0.020565f, 0.030939f, 0.046614f, -0.010171f, 0.019437f, -0.030407f, 0.035163f, 0.032901f, 0.001643f, 0.011417f, 0.034750f, -0.019494f, -0.017259f, -0.002031f, 0.067705f, 0.011937f, -0.015153f, 0.033746f, 0.007384f, 0.026386f, 0.038883f, 0.012196f, 0.001161f, 0.005356f, 0.009332f, 0.025642f, -0.004169f, 0.027549f, -0.013050f, 0.027181f, -0.008978f, 0.058286f, -0.003104f, 0.050821f, -0.037870f, -0.043913f, 0.071791f, -0.051358f, -0.023281f, 0.006596f, -0.010869f, -0.029396f, 0.037899f, 0.001548f, -0.033710f, -0.013756f, -0.011344f, -0.055309f, 0.009788f, + -0.046022f, -0.025392f, 0.004947f, -0.052846f, -0.036056f, -0.035875f, -0.043053f, 0.051029f, -0.004821f, 0.004456f, 0.010616f, -0.011324f, -0.065265f, -0.043333f, -0.048940f, -0.089254f, 0.002616f, 0.012894f, 0.035549f, 0.025574f, 0.009516f, 0.022095f, 0.009386f, 0.006505f, -0.033443f, -0.040460f, -0.029115f, 0.035121f, -0.008909f, -0.022976f, -0.014918f, 0.034247f, -0.044212f, -0.023571f, -0.045435f, -0.018404f, -0.008777f, -0.037130f, 0.008854f, -0.030700f, 0.028996f, 0.025590f, -0.011313f, 0.025122f, -0.029771f, -0.047598f, 0.014808f, 0.029110f, -0.031750f, -0.055105f, 0.034983f, -0.003207f, 0.023063f, 0.025728f, -0.087425f, -0.056675f, -0.007643f, -0.013267f, 0.043194f, -0.030430f, -0.043707f, -0.010295f, 0.009115f, 0.001415f, -0.015703f, -0.020152f, 0.056890f, -0.036599f, -0.069562f, -0.079610f, 0.038984f, -0.018043f, -0.080852f, 0.022090f, 0.006121f, -0.014643f, -0.007591f, 0.005334f, -0.048268f, -0.022668f, 0.025487f, 0.035490f, 0.079687f, 0.009918f, 0.042462f, 0.016765f, 0.021293f, -0.020833f, -0.004168f, -0.018341f, -0.041282f, -0.053482f, -0.069134f, -0.029097f, -0.062282f, -0.028534f, + -0.032187f, -0.016135f, 0.034969f, 0.004509f, 0.023944f, 0.036073f, 0.000668f, 0.022924f, 0.008346f, -0.002927f, -0.000601f, -0.009756f, -0.053346f, 0.014856f, -0.006675f, -0.065255f, -0.037598f, 0.012697f, -0.039135f, -0.020034f, 0.013606f, 0.038561f, 0.052547f, 0.012999f, -0.012000f, 0.001590f, 0.034505f, 0.013120f, 0.006125f, -0.007251f, -0.107128f, -0.027719f, 0.021387f, 0.020056f, 0.008414f, -0.011035f, -0.038193f, 0.017355f, -0.034766f, -0.031557f, -0.009758f, -0.001529f, -0.021714f, -0.064732f, 0.025369f, -0.016041f, 0.064508f, 0.017370f, 0.017306f, 0.017183f, 0.043426f, 0.105435f, -0.008429f, -0.008024f, -0.018280f, -0.039535f, 0.054873f, -0.003893f, 0.006526f, -0.060533f, -0.026095f, 0.079665f, -0.054702f, -0.009814f, -0.047987f, -0.125090f, -0.022684f, 0.043404f, 0.028248f, 0.010051f, 0.004939f, -0.003242f, 0.067795f, -0.074214f, -0.004602f, -0.018801f, -0.056651f, -0.040526f, -0.011190f, 0.018306f, 0.008304f, 0.020882f, 0.041942f, 0.033672f, -0.037825f, -0.030287f, 0.087994f, 0.079112f, -0.010989f, 0.012083f, -0.015132f, 0.027856f, -0.005377f, 0.057191f, 0.014630f, 0.031759f, + 0.002955f, 0.007095f, -0.101205f, 0.042608f, -0.009431f, -0.052569f, -0.033542f, 0.008106f, -0.020382f, -0.052509f, 0.047396f, -0.006944f, -0.044884f, -0.005912f, -0.000055f, 0.049108f, 0.046599f, 0.041993f, 0.009257f, 0.048675f, 0.043645f, -0.035921f, -0.047755f, -0.024796f, -0.013743f, 0.049785f, 0.057381f, 0.012149f, 0.015213f, 0.062993f, 0.028184f, -0.057788f, 0.032200f, 0.016090f, -0.027151f, 0.003149f, 0.094803f, 0.053631f, -0.034227f, -0.051867f, -0.081726f, 0.015541f, -0.014866f, -0.027153f, -0.032437f, 0.017534f, -0.019263f, -0.010322f, 0.055429f, -0.017716f, -0.001958f, -0.043366f, 0.004609f, 0.026534f, -0.058587f, -0.038374f, -0.034551f, -0.018205f, 0.022966f, -0.081153f, -0.043553f, -0.116822f, 0.021535f, -0.001674f, -0.028197f, -0.013413f, -0.015789f, 0.024448f, 0.038762f, -0.041655f, 0.003021f, -0.014717f, -0.012473f, -0.072885f, 0.017539f, 0.055588f, 0.016360f, 0.042076f, 0.054624f, 0.047407f, -0.061974f, -0.019448f, -0.017453f, -0.029713f, 0.055443f, -0.054559f, -0.029647f, 0.002231f, 0.079835f, 0.018004f, -0.025207f, 0.078961f, -0.041867f, -0.040728f, 0.095889f, 0.090426f, + 0.011147f, 0.023860f, -0.022772f, -0.083604f, -0.023204f, 0.087030f, -0.038252f, 0.079352f, -0.024400f, -0.119699f, -0.028122f, -0.054201f, 0.069773f, 0.004229f, 0.020338f, 0.063073f, -0.001763f, 0.052897f, 0.023222f, 0.042184f, 0.004209f, -0.078356f, 0.046807f, 0.051987f, -0.062949f, 0.034352f, 0.000845f, -0.023815f, -0.026153f, -0.093014f, -0.039454f, 0.031980f, 0.007252f, 0.084402f, -0.066659f, -0.038898f, 0.017491f, -0.009673f, 0.056010f, -0.075837f, 0.001772f, 0.007604f, -0.062139f, 0.063817f, 0.036864f, 0.019495f, -0.028068f, 0.043827f, -0.049829f, 0.028774f, 0.024296f, 0.013689f, -0.001580f, -0.028631f, 0.014173f, 0.058498f, -0.028330f, -0.010669f, 0.013663f, -0.044971f, 0.048780f, 0.002441f, 0.014576f, -0.061657f, 0.036104f, 0.009048f, 0.013941f, -0.145475f, 0.022618f, -0.040642f, 0.070973f, 0.057686f, 0.062709f, 0.031857f, -0.116443f, -0.019694f, 0.028083f, 0.003809f, 0.010426f, 0.085156f, -0.010069f, -0.049120f, -0.058260f, 0.003803f, -0.065300f, -0.057776f, -0.050703f, 0.026397f, -0.097237f, 0.070731f, 0.133388f, -0.034692f, -0.018513f, -0.105439f, -0.031548f, -0.092794f, + 0.023269f, -0.039157f, -0.031161f, 0.031746f, -0.026036f, -0.030830f, 0.023956f, -0.041387f, -0.005317f, -0.047549f, 0.070105f, 0.004077f, -0.055699f, -0.012878f, -0.001319f, -0.002515f, 0.014388f, -0.032656f, -0.027082f, 0.010824f, 0.012177f, 0.011397f, 0.004685f, 0.030464f, -0.034380f, -0.009381f, -0.075906f, 0.030188f, 0.004514f, -0.019544f, 0.050772f, 0.031972f, -0.024085f, 0.084231f, 0.015735f, -0.048152f, 0.036328f, 0.009631f, 0.022895f, 0.056642f, -0.007176f, -0.010173f, 0.006254f, 0.047225f, 0.022913f, 0.003999f, -0.006535f, 0.050320f, -0.006148f, -0.051941f, -0.011371f, 0.013161f, 0.041643f, -0.016232f, 0.073083f, 0.085562f, -0.053938f, 0.046099f, 0.091435f, -0.022084f, 0.139731f, 0.082483f, -0.036243f, -0.029193f, -0.053786f, -0.057278f, -0.034323f, 0.021466f, -0.010446f, -0.008174f, -0.001246f, -0.006953f, -0.097143f, -0.036521f, -0.094966f, 0.022462f, 0.125663f, 0.031603f, -0.043220f, 0.003765f, -0.057132f, -0.008840f, 0.021915f, -0.025428f, -0.029644f, -0.035767f, -0.011652f, 0.012261f, -0.006122f, -0.012179f, 0.017381f, 0.008104f, 0.023045f, -0.023091f, -0.012208f, 0.014993f, + -0.004008f, 0.001925f, -0.030547f, 0.021037f, -0.036009f, 0.017297f, 0.014383f, -0.008994f, 0.000251f, 0.000574f, -0.019959f, 0.002898f, 0.006547f, -0.018274f, 0.033778f, -0.017762f, 0.009864f, -0.000539f, 0.003377f, 0.015303f, -0.013259f, -0.024942f, -0.004858f, 0.035922f, -0.024614f, 0.017288f, -0.047142f, -0.030198f, 0.012159f, -0.011346f, 0.002032f, -0.003854f, -0.027016f, 0.031232f, 0.028449f, 0.001792f, -0.018726f, -0.001585f, -0.009975f, 0.006067f, -0.013108f, -0.000971f, -0.012241f, 0.011563f, -0.000444f, 0.002759f, 0.044498f, -0.034352f, 0.001683f, 0.005834f, 0.007503f, -0.007466f, 0.006647f, -0.016038f, 0.007670f, -0.013362f, -0.058184f, -0.089609f, 0.062881f, 0.280852f, 0.125120f, 0.127926f, 0.000607f, -0.262778f, -0.187695f, -0.099862f, -0.204499f, 0.098504f, 0.124304f, 0.062389f, 0.267767f, 0.118268f, -0.010117f, 0.086827f, -0.170891f, -0.221239f, -0.123980f, -0.155445f, -0.031739f, 0.117506f, 0.123334f, 0.049533f, 0.206212f, 0.100109f, -0.012790f, 0.096966f, -0.089186f, -0.157063f, -0.087734f, -0.118543f, -0.182166f, 0.066077f, -0.000114f, -0.067481f, 0.199239f, 0.117515f, + 0.068519f, 0.200875f, 0.050464f, -0.104396f, 0.101234f, -0.148182f, -0.165612f, -0.035799f, -0.174265f, -0.179969f, 0.072104f, -0.031101f, 0.044702f, 0.223321f, 0.155648f, 0.158783f, 0.152887f, 0.016790f, -0.083218f, -0.099579f, -0.162499f, -0.216844f, -0.111323f, -0.062856f, -0.042941f, 0.080777f, 0.129842f, 0.119039f, 0.172170f, 0.152760f, -0.021981f, -0.028231f, -0.025646f, -0.158668f, -0.044471f, -0.077097f, -0.107629f, 0.027924f, 0.028288f, -0.001355f} + }, + { + {-0.005889f, -0.013663f, -0.005501f, -0.007822f, -0.004259f, 0.009698f, 0.005225f, 0.000753f, 0.008095f, 0.005482f, -0.006464f, -0.008837f, -0.005413f, -0.004194f, 0.001057f, 0.003309f, -0.008845f, -0.001237f, -0.003505f, -0.000139f, -0.001045f, -0.001956f, -0.004690f, 0.011110f, 0.006507f, -0.000795f, -0.009141f, -0.003661f, 0.001986f, 0.003738f, -0.000283f, -0.003659f, 0.001644f, 0.003185f, 0.001103f, 0.002976f, -0.002525f, -0.000431f, -0.006999f, -0.009077f, -0.001920f, -0.000859f, 0.004481f, 0.005404f, 0.003874f, 0.001074f, 0.001301f, 0.003093f, 0.004659f, 0.001319f, 0.006209f, 0.002477f, -0.003919f, -0.004688f, -0.000042f, 0.004412f, 0.004203f, 0.001784f, 0.000969f, 0.006697f, 0.004528f, -0.007987f, -0.006857f, -0.004168f, -0.003773f, -0.003424f, 0.004588f, -0.003108f, 0.002191f, -0.007564f, 0.005518f, -0.005372f, -0.003834f, 0.003849f, -0.002422f, -0.003374f, 0.008748f, 0.005360f, -0.008337f, -0.001651f, -0.003222f, -0.000059f, 0.011941f, 0.000896f, -0.005432f, 0.006607f, 0.001074f, 0.000849f, 0.001903f, 0.001538f, -0.000133f, 0.009340f, 0.004912f, -0.006005f, -0.002640f, -0.000525f, + -0.002434f, 0.002751f, 0.003642f, 0.002807f, -0.002924f, -0.003774f, 0.001244f, -0.007789f, -0.003909f, 0.006165f, 0.000233f, 0.004999f, 0.002165f, -0.003709f, 0.002636f, 0.000231f, -0.003752f, 0.008583f, -0.005953f, -0.002464f, 0.000732f, 0.003072f, -0.004198f, -0.000829f, -0.005889f, -0.010745f, 0.009843f, -0.001864f, -0.006098f, 0.000792f, 0.008983f, 0.000204f, 0.003200f, -0.004473f, -0.003192f, -0.001722f, 0.002402f, -0.003482f, 0.007000f, 0.001412f, 0.006230f, -0.009611f, 0.003570f, -0.002308f, 0.001000f, 0.004453f, -0.002409f, -0.000802f, -0.008069f, 0.000378f, 0.003033f, 0.001264f, -0.003084f, 0.000091f, 0.002198f, -0.001303f, -0.003816f, 0.025456f, 0.009020f, -0.002252f, 0.007170f, 0.000135f, 0.012886f, 0.007739f, -0.001560f, 0.006290f, 0.011592f, 0.014654f, -0.008564f, -0.008820f, 0.003874f, -0.003694f, -0.002654f, 0.010411f, 0.008819f, 0.007960f, 0.006068f, 0.000870f, -0.000112f, -0.003948f, 0.004285f, 0.002599f, 0.013781f, 0.001133f, -0.000064f, -0.006235f, 0.003055f, 0.003726f, -0.000536f, -0.002094f, -0.001881f, 0.003426f, -0.000294f, -0.002437f, -0.004715f, 0.005008f, + -0.001513f, -0.002041f, 0.007745f, 0.010355f, -0.002471f, -0.001570f, 0.006416f, 0.005222f, 0.010014f, 0.005749f, 0.002970f, 0.000717f, 0.008592f, 0.004397f, -0.011098f, -0.000286f, 0.003844f, -0.006886f, 0.000530f, 0.000761f, -0.007765f, 0.003822f, -0.003547f, 0.005770f, -0.000875f, -0.001409f, 0.003771f, 0.000683f, -0.005085f, -0.000901f, 0.003723f, -0.001538f, -0.000697f, -0.002112f, 0.001432f, 0.005955f, 0.002191f, -0.007077f, 0.008878f, -0.000690f, -0.016774f, -0.007805f, -0.003260f, -0.003631f, -0.009136f, -0.008388f, -0.005274f, 0.009082f, -0.009997f, -0.004672f, -0.004754f, 0.001817f, 0.015148f, -0.002291f, -0.001217f, 0.003690f, 0.008663f, -0.013289f, -0.002179f, 0.002683f, -0.005873f, 0.004656f, 0.007402f, -0.008215f, -0.000522f, 0.001017f, -0.004775f, -0.012086f, 0.002078f, -0.005119f, 0.001615f, -0.004723f, 0.006874f, -0.008375f, -0.007781f, -0.019181f, -0.005171f, 0.006496f, -0.001086f, -0.007419f, -0.003634f, -0.001018f, -0.007708f, 0.000282f, -0.001317f, 0.005164f, 0.004156f, -0.002110f, 0.000218f, -0.002101f, -0.008137f, 0.009749f, 0.001705f, 0.006518f, -0.002480f, -0.000177f, + 0.001722f, 0.002673f, 0.007657f, -0.002714f, -0.001872f, 0.001984f, -0.000231f, 0.008056f, 0.004471f, -0.007617f, -0.002875f, -0.002235f, -0.011455f, -0.001788f, -0.001039f, 0.006232f, -0.004302f, -0.036729f, -0.011708f, -0.003086f, -0.003128f, -0.002901f, 0.014103f, -0.012946f, 0.006193f, -0.002861f, 0.002770f, -0.003538f, -0.003166f, -0.010354f, 0.001628f, -0.003619f, 0.000699f, -0.015110f, 0.000215f, -0.001308f, -0.002837f, 0.000026f, 0.002809f, 0.002616f, -0.001525f, -0.000750f, -0.006221f, 0.002216f, -0.004998f, 0.003581f, -0.000051f, 0.003119f, 0.009558f, -0.002157f, -0.011020f, -0.004332f, -0.012890f, 0.002166f, 0.002312f, -0.000768f, 0.002231f, -0.004081f, 0.004325f, 0.002648f, -0.005679f, 0.000941f, -0.015439f, -0.002834f, -0.010303f, 0.006147f, 0.010292f, -0.008512f, -0.000634f, 0.003457f, 0.001657f, -0.014219f, 0.002566f, 0.008152f, -0.006967f, -0.002789f, -0.016704f, 0.006325f, -0.002274f, 0.007595f, 0.012667f, 0.007770f, -0.009811f, 0.002805f, 0.002630f, 0.001252f, -0.010846f, 0.003598f, -0.004385f, 0.008145f, -0.002546f, 0.000319f, 0.004046f, 0.003357f, -0.022112f, 0.001796f, + 0.004804f, -0.008904f, -0.000296f, 0.021600f, 0.018057f, 0.008686f, -0.001781f, -0.004783f, 0.011822f, 0.006233f, 0.004270f, 0.003469f, -0.008247f, 0.002322f, 0.001579f, 0.009747f, -0.009308f, -0.005337f, -0.001200f, 0.000556f, -0.001337f, -0.012335f, -0.007125f, -0.008919f, -0.008899f, 0.004533f, 0.007169f, 0.003343f, 0.003583f, -0.000606f, 0.003521f, -0.002283f, -0.000519f, -0.000111f, -0.002763f, -0.001862f, 0.005806f, 0.003071f, -0.007112f, -0.009667f, -0.000064f, -0.009718f, 0.006025f, -0.003622f, -0.014096f, 0.000814f, 0.008342f, 0.009695f, 0.008207f, -0.000641f, 0.007815f, -0.011714f, -0.002579f, -0.005900f, 0.000109f, -0.000480f, 0.005637f, -0.004964f, -0.008804f, 0.010425f, -0.009784f, -0.006675f, 0.008325f, 0.015416f, 0.005122f, 0.001480f, -0.015527f, 0.015870f, 0.003480f, 0.009954f, 0.020945f, -0.007650f, 0.004067f, -0.002611f, -0.004506f, 0.003709f, 0.034608f, 0.024233f, -0.008605f, -0.012776f, 0.019230f, 0.012387f, 0.020226f, 0.029511f, -0.014899f, 0.010145f, 0.004993f, 0.008468f, 0.003904f, 0.005023f, 0.012288f, 0.002893f, 0.012538f, 0.000244f, -0.007984f, 0.003179f, + -0.002578f, 0.004024f, -0.001495f, 0.022781f, 0.003866f, 0.004839f, 0.003088f, 0.000665f, 0.008007f, 0.003158f, 0.000421f, -0.001757f, 0.005698f, -0.004744f, 0.010930f, -0.008893f, 0.013163f, -0.006594f, 0.007918f, 0.003837f, 0.004793f, 0.003511f, 0.019332f, 0.014469f, 0.000809f, -0.004608f, -0.010679f, 0.011079f, -0.012998f, 0.002758f, -0.005777f, 0.005174f, 0.012009f, 0.000941f, -0.020555f, -0.017094f, 0.001524f, -0.010879f, -0.011354f, -0.007061f, -0.013071f, 0.003926f, 0.022093f, 0.010483f, -0.008435f, -0.000246f, 0.002347f, -0.006670f, -0.006808f, -0.001990f, 0.010715f, 0.011175f, -0.013170f, 0.004953f, 0.014051f, 0.001309f, 0.004537f, 0.014652f, 0.003460f, 0.021470f, -0.001365f, -0.000794f, -0.006723f, -0.006418f, 0.007981f, 0.016150f, -0.004252f, 0.003922f, 0.001813f, 0.017565f, 0.008101f, -0.008871f, -0.007114f, 0.000728f, 0.004443f, 0.015959f, 0.016750f, 0.024054f, 0.005134f, 0.006403f, -0.003598f, 0.009587f, 0.012059f, -0.004781f, -0.004893f, 0.008438f, -0.006010f, -0.009716f, 0.009565f, 0.002339f, -0.010088f, -0.013614f, 0.021032f, 0.009878f, 0.000122f, 0.012665f, + 0.003344f, -0.009294f, 0.020062f, -0.004703f, 0.001443f, -0.000636f, 0.005865f, -0.007137f, 0.005884f, -0.007112f, 0.005771f, -0.006573f, 0.006823f, -0.005340f, 0.008970f, -0.006679f, -0.005842f, 0.018002f, -0.021411f, 0.001427f, 0.003701f, -0.007455f, 0.002572f, -0.024853f, -0.011276f, 0.012501f, -0.008898f, 0.008005f, -0.001484f, 0.005790f, 0.003443f, 0.005341f, 0.003972f, -0.009972f, 0.007540f, -0.004521f, 0.000661f, -0.017659f, -0.015634f, 0.000160f, 0.006451f, 0.012747f, -0.014830f, 0.004410f, -0.013356f, 0.011038f, 0.008052f, -0.017828f, -0.003989f, 0.002129f, -0.021397f, -0.011839f, 0.012605f, -0.001490f, -0.001188f, 0.003215f, -0.001611f, -0.021973f, 0.019952f, 0.001454f, -0.014628f, -0.006837f, 0.002391f, -0.001727f, -0.014088f, -0.004012f, -0.008237f, 0.002394f, -0.001019f, -0.004301f, 0.004080f, -0.019114f, -0.008880f, 0.005017f, 0.024730f, -0.004157f, -0.015124f, -0.010412f, -0.008605f, 0.017076f, -0.018607f, -0.003671f, -0.001694f, -0.019507f, -0.024686f, 0.005867f, -0.017276f, -0.002804f, 0.002000f, 0.012599f, 0.006601f, 0.000821f, 0.002183f, 0.014969f, -0.007225f, -0.005116f, + 0.021917f, -0.015541f, 0.011005f, -0.005717f, -0.006525f, -0.002956f, -0.003731f, 0.023329f, -0.000613f, 0.008379f, -0.026266f, -0.019307f, -0.001201f, -0.005294f, 0.025299f, -0.001512f, 0.015055f, 0.003694f, -0.029494f, 0.002611f, -0.002691f, 0.020093f, 0.002596f, -0.021794f, 0.025973f, 0.008053f, -0.014848f, -0.033342f, -0.013532f, 0.032503f, 0.001902f, -0.004366f, -0.005189f, 0.003165f, 0.001379f, 0.009892f, 0.005657f, 0.010619f, -0.002023f, 0.019123f, -0.009634f, -0.022943f, 0.001315f, 0.000879f, -0.005055f, -0.000999f, 0.008910f, -0.006011f, -0.003086f, -0.002146f, 0.018613f, 0.013971f, 0.007745f, -0.001499f, -0.024336f, -0.000631f, -0.000825f, -0.001186f, -0.003630f, -0.000554f, -0.010334f, -0.020369f, -0.002631f, 0.013747f, 0.014091f, -0.005255f, 0.015126f, -0.004863f, 0.006902f, 0.015791f, 0.015939f, -0.033940f, 0.012270f, 0.011956f, 0.005791f, -0.008468f, -0.028798f, 0.017677f, 0.011446f, 0.005425f, -0.009638f, -0.006264f, -0.010955f, 0.006204f, -0.012162f, -0.002976f, 0.001468f, 0.011446f, -0.006085f, 0.005351f, 0.005013f, -0.022698f, -0.000874f, -0.016046f, 0.026517f, 0.002835f, + 0.017857f, 0.023306f, 0.022506f, 0.018406f, 0.022035f, -0.028008f, -0.019470f, -0.009279f, -0.010059f, -0.013129f, -0.011293f, -0.022415f, -0.008599f, 0.002085f, 0.012871f, 0.000502f, -0.013994f, -0.000122f, 0.012824f, 0.001140f, -0.012232f, -0.004876f, 0.030233f, 0.003448f, 0.010783f, 0.003991f, 0.011926f, 0.002996f, 0.003213f, -0.018806f, 0.009699f, 0.001035f, 0.003417f, -0.019786f, 0.005915f, -0.030574f, -0.001068f, -0.009529f, 0.006565f, -0.002635f, -0.023626f, -0.000395f, -0.023544f, 0.004220f, -0.019779f, 0.017078f, -0.010827f, 0.026763f, -0.000364f, -0.000520f, 0.012251f, 0.002815f, -0.005486f, -0.004075f, 0.004179f, -0.009347f, 0.005015f, 0.016217f, 0.007116f, -0.012645f, -0.007775f, 0.034895f, 0.001338f, 0.027622f, -0.027539f, -0.006226f, -0.004173f, 0.019618f, -0.024222f, 0.002093f, 0.009549f, -0.024143f, 0.014538f, -0.016198f, 0.003003f, -0.009031f, -0.028271f, 0.003896f, 0.028167f, 0.020397f, 0.023026f, -0.008078f, -0.005657f, 0.005153f, -0.003802f, 0.027607f, 0.009547f, 0.012797f, 0.023823f, -0.002402f, 0.008908f, -0.016867f, 0.023627f, 0.011055f, -0.006046f, -0.015334f, + -0.013643f, 0.015014f, -0.027664f, 0.009812f, 0.015557f, -0.012444f, -0.015649f, -0.009776f, 0.014371f, 0.004444f, -0.006009f, -0.011192f, -0.000309f, -0.018117f, -0.026032f, 0.003387f, -0.025084f, -0.037721f, -0.005311f, 0.000038f, 0.036080f, -0.017352f, -0.013485f, 0.014928f, 0.026183f, 0.025639f, 0.013389f, -0.003300f, 0.005095f, -0.013454f, 0.000764f, -0.014097f, 0.028922f, 0.024930f, 0.015768f, -0.003207f, -0.032852f, -0.002257f, -0.028502f, 0.027118f, 0.020578f, 0.011865f, -0.024444f, 0.015801f, 0.007652f, 0.010097f, -0.007164f, -0.021274f, -0.017056f, -0.017628f, 0.001021f, -0.023716f, -0.043334f, 0.004994f, 0.019774f, 0.012334f, 0.012970f, 0.024893f, 0.048440f, 0.023883f, 0.015867f, 0.017939f, -0.032584f, -0.003203f, -0.012916f, 0.041277f, -0.041806f, -0.036475f, 0.009385f, 0.027551f, -0.002268f, 0.033328f, 0.027151f, 0.000356f, 0.009526f, -0.017230f, -0.015182f, 0.031811f, -0.013330f, 0.022422f, 0.005848f, -0.011588f, -0.008427f, -0.004127f, -0.008046f, -0.012132f, 0.010277f, 0.014307f, 0.009052f, 0.002831f, -0.016958f, -0.018192f, 0.024660f, -0.023656f, 0.018827f, 0.003780f, + -0.032756f, 0.017826f, 0.028803f, 0.001371f, -0.009337f, -0.001796f, 0.001300f, 0.003779f, 0.019391f, 0.001014f, -0.016440f, -0.004283f, 0.016446f, -0.029568f, 0.006748f, -0.003069f, 0.024978f, 0.029577f, 0.017427f, 0.023746f, 0.027409f, 0.022703f, 0.006782f, -0.015597f, -0.020997f, 0.012759f, 0.013434f, 0.002032f, 0.011797f, 0.019472f, 0.042967f, -0.020498f, 0.027557f, -0.011879f, -0.009419f, 0.034377f, 0.005287f, -0.032361f, -0.006888f, 0.020367f, -0.024847f, 0.001758f, -0.015956f, -0.025303f, 0.037397f, 0.033769f, 0.026494f, 0.014034f, 0.006279f, 0.011855f, 0.027268f, 0.016635f, 0.027992f, -0.009538f, 0.023327f, -0.017025f, 0.028436f, 0.040446f, 0.023838f, 0.020839f, 0.009228f, 0.021514f, 0.019670f, -0.004794f, 0.039899f, 0.011064f, -0.025235f, 0.012967f, -0.025527f, -0.015690f, -0.005786f, -0.037179f, -0.000025f, -0.006775f, -0.011139f, -0.017266f, -0.010420f, -0.003848f, -0.001853f, -0.002217f, 0.001041f, 0.003256f, -0.022771f, -0.012933f, 0.003987f, -0.009941f, 0.008614f, 0.039831f, -0.019730f, 0.000345f, -0.004157f, 0.003374f, -0.018688f, 0.011846f, -0.009216f, 0.031572f, + 0.005813f, 0.019831f, 0.027116f, 0.007076f, -0.002159f, -0.015629f, -0.040642f, 0.008018f, 0.029967f, 0.024715f, -0.005592f, -0.023786f, 0.023128f, 0.005875f, 0.014751f, -0.030442f, -0.022131f, -0.016903f, 0.016951f, -0.057326f, -0.036413f, -0.017531f, 0.041074f, 0.029664f, -0.021901f, 0.025435f, 0.023277f, 0.019592f, 0.019505f, -0.019187f, 0.002262f, 0.011111f, -0.018750f, -0.057560f, -0.010172f, -0.015900f, -0.034958f, 0.003315f, -0.011667f, -0.008883f, 0.011204f, 0.006619f, -0.007440f, 0.001928f, 0.027439f, 0.029153f, -0.052659f, 0.012942f, 0.003171f, 0.024928f, 0.008845f, 0.001745f, -0.032583f, 0.010551f, -0.007978f, -0.008682f, -0.022234f, -0.016359f, 0.043075f, -0.018699f, -0.000236f, 0.005753f, -0.010715f, 0.047816f, 0.022885f, -0.020128f, -0.012138f, -0.035920f, -0.004781f, 0.036204f, 0.010861f, 0.011756f, -0.011044f, 0.022730f, -0.004571f, -0.007919f, 0.020271f, -0.010205f, 0.033262f, -0.006002f, 0.024839f, -0.047908f, -0.016575f, 0.030797f, 0.007233f, -0.001975f, 0.008103f, -0.052025f, -0.026228f, 0.012286f, -0.022500f, 0.013630f, 0.001098f, 0.014137f, 0.030032f, 0.012813f, + -0.027351f, -0.069159f, -0.008519f, -0.006214f, -0.010212f, 0.013378f, -0.031032f, 0.058517f, -0.012720f, 0.004885f, 0.059406f, -0.070462f, -0.010076f, -0.011875f, -0.009457f, -0.081055f, 0.002130f, -0.010548f, -0.018669f, 0.030655f, -0.031201f, 0.006755f, 0.002899f, 0.015851f, -0.005213f, -0.028043f, 0.018195f, -0.017605f, 0.040732f, -0.005097f, -0.051806f, -0.001251f, -0.004329f, -0.022428f, -0.052224f, 0.024634f, 0.022495f, -0.039067f, 0.031113f, -0.035087f, -0.031949f, -0.015515f, 0.000459f, 0.005465f, 0.002738f, 0.026421f, -0.007428f, -0.020334f, -0.056926f, 0.013544f, -0.075968f, -0.036232f, -0.028107f, -0.055898f, -0.037701f, -0.014201f, -0.006685f, -0.024733f, 0.038685f, 0.045847f, 0.006386f, -0.010036f, 0.044304f, 0.024503f, -0.008646f, -0.007442f, 0.031000f, 0.028785f, -0.014805f, 0.049236f, -0.040911f, -0.014729f, 0.047025f, 0.029556f, 0.068218f, -0.026123f, -0.023580f, 0.015133f, -0.002873f, -0.026394f, -0.013223f, 0.006774f, 0.055809f, 0.031805f, -0.005014f, 0.075502f, -0.008494f, 0.031131f, -0.035341f, 0.044219f, 0.041741f, -0.003497f, -0.032939f, 0.003836f, 0.012412f, -0.018215f, + 0.020106f, -0.026700f, 0.000048f, -0.007867f, -0.008357f, -0.030295f, -0.021937f, -0.013448f, -0.001223f, -0.009351f, -0.023487f, 0.036648f, 0.025464f, 0.007422f, -0.009194f, 0.006946f, 0.035551f, 0.017185f, 0.026448f, 0.016965f, -0.017852f, -0.028278f, 0.060369f, -0.006643f, -0.031090f, -0.012294f, -0.012533f, -0.006446f, 0.044309f, 0.003233f, -0.031435f, -0.011111f, -0.080373f, -0.018591f, -0.007781f, 0.052327f, 0.036910f, -0.097856f, -0.040819f, -0.022200f, 0.001821f, 0.007264f, -0.037303f, 0.031793f, 0.018423f, 0.028232f, 0.053008f, -0.062455f, 0.067243f, 0.049275f, -0.017373f, -0.040326f, 0.006313f, -0.007114f, 0.020067f, 0.061536f, 0.051532f, 0.007737f, 0.018874f, -0.040136f, -0.065251f, 0.093731f, 0.045762f, 0.004828f, 0.005199f, -0.020377f, -0.055774f, 0.019773f, -0.005278f, 0.047520f, 0.009446f, 0.017938f, 0.050413f, 0.028974f, -0.001769f, -0.005045f, 0.007460f, -0.030985f, -0.027163f, -0.032986f, -0.020038f, 0.031340f, -0.009938f, 0.002357f, 0.037129f, -0.006248f, 0.015336f, -0.053330f, -0.049991f, -0.032353f, 0.026091f, 0.011757f, -0.003702f, 0.013197f, -0.019105f, -0.047881f, + 0.058861f, -0.057488f, 0.024447f, 0.028025f, 0.019314f, 0.010195f, 0.034418f, -0.023270f, -0.061924f, 0.044421f, 0.121427f, -0.021235f, 0.057125f, -0.071554f, -0.042158f, 0.045520f, 0.022821f, -0.066179f, -0.022449f, -0.004593f, 0.054529f, -0.013263f, -0.010282f, -0.089834f, -0.062848f, -0.019297f, -0.071424f, 0.058006f, 0.055127f, 0.096603f, -0.088136f, 0.038766f, 0.005930f, -0.042786f, -0.006256f, 0.002697f, -0.094118f, 0.018368f, -0.017424f, -0.084110f, -0.046150f, -0.002704f, -0.011611f, -0.028846f, 0.011074f, 0.025816f, 0.003750f, -0.030429f, -0.000515f, -0.029208f, 0.077406f, -0.024463f, 0.002708f, 0.056972f, -0.002309f, -0.060426f, -0.040423f, -0.041607f, -0.017075f, -0.022603f, 0.064599f, 0.005637f, 0.011405f, 0.030785f, -0.016571f, -0.018728f, -0.009835f, -0.019068f, -0.037995f, -0.010069f, 0.073823f, 0.022621f, 0.018149f, -0.049444f, 0.018668f, 0.002879f, -0.033819f, -0.004950f, -0.016616f, 0.078304f, -0.061994f, -0.054990f, -0.018446f, 0.008984f, -0.018103f, 0.001525f, 0.021892f, -0.042123f, -0.010639f, 0.066227f, -0.053712f, 0.008628f, -0.013276f, -0.033735f, -0.057181f, -0.044679f, + 0.002178f, -0.080708f, -0.096663f, 0.022089f, 0.019521f, 0.014691f, -0.086765f, 0.065851f, 0.080223f, -0.028232f, -0.024511f, 0.004388f, -0.004886f, -0.018753f, -0.046983f, 0.032318f, 0.118912f, 0.018728f, 0.021096f, -0.026167f, -0.069923f, 0.019619f, 0.027133f, -0.102959f, 0.056496f, 0.002837f, -0.029499f, 0.010346f, 0.037682f, -0.052922f, 0.032997f, -0.049071f, 0.013447f, -0.002320f, -0.024896f, -0.013293f, -0.006629f, -0.035877f, 0.026337f, 0.023565f, -0.000840f, 0.013339f, 0.001860f, 0.021004f, 0.026731f, 0.026348f, 0.038249f, 0.033394f, -0.019727f, 0.005958f, -0.040871f, 0.044758f, -0.033369f, 0.011713f, -0.005954f, 0.009967f, 0.002785f, -0.030224f, 0.029176f, -0.014729f, -0.029492f, 0.064680f, -0.049955f, 0.016518f, -0.013731f, -0.023913f, 0.026620f, -0.005206f, 0.008690f, 0.041040f, -0.046633f, 0.003511f, -0.057301f, -0.113752f, -0.001546f, 0.038569f, -0.012340f, 0.150287f, 0.031869f, -0.055906f, 0.018121f, -0.078628f, 0.030094f, 0.060370f, 0.070582f, -0.020690f, -0.010985f, -0.086661f, -0.100193f, -0.004685f, -0.060733f, 0.020637f, 0.000994f, -0.073766f, 0.015297f, -0.005494f, + -0.042812f, 0.019171f, -0.027765f, -0.018983f, -0.034543f, 0.017494f, -0.037630f, 0.048126f, -0.005040f, 0.017682f, -0.011043f, 0.064672f, -0.017537f, 0.035394f, -0.000483f, 0.042223f, -0.011757f, -0.021757f, 0.013987f, -0.024612f, -0.025545f, 0.003133f, 0.048480f, 0.030705f, -0.032780f, 0.034739f, -0.024540f, -0.038275f, 0.010829f, 0.051211f, -0.019712f, -0.021630f, 0.027865f, 0.011810f, -0.025542f, 0.002228f, 0.035437f, -0.015392f, -0.033583f, 0.017658f, 0.014414f, 0.020763f, 0.039962f, 0.007366f, -0.023545f, -0.008904f, 0.087464f, 0.090307f, -0.024822f, -0.076997f, 0.058589f, -0.026719f, 0.016949f, 0.006690f, 0.098657f, 0.011751f, -0.050178f, -0.020530f, -0.011543f, 0.000572f, 0.016058f, 0.021164f, 0.032865f, -0.040740f, 0.013310f, 0.005199f, 0.058173f, -0.018313f, 0.041654f, 0.037837f, 0.025931f, 0.013320f, 0.015672f, 0.021285f, 0.104900f, 0.041923f, -0.045097f, 0.009756f, -0.047156f, -0.027952f, -0.001712f, 0.016165f, -0.006121f, 0.036403f, -0.043393f, -0.002854f, 0.019527f, -0.002956f, 0.020278f, -0.004120f, 0.008312f, 0.002905f, -0.030450f, -0.011568f, 0.010409f, -0.031571f, + -0.028404f, 0.001140f, 0.009843f, -0.022861f, 0.017438f, 0.013408f, -0.006889f, -0.016586f, -0.000201f, 0.001849f, -0.003013f, 0.011291f, 0.005649f, 0.008569f, -0.010852f, -0.007135f, 0.026194f, -0.001497f, 0.003876f, 0.009874f, -0.004863f, 0.011054f, -0.009172f, -0.024018f, -0.011521f, 0.021453f, -0.015208f, -0.015239f, 0.004769f, -0.020015f, -0.016160f, 0.026258f, -0.024274f, 0.042505f, 0.013711f, -0.021796f, 0.023703f, 0.000882f, -0.028427f, 0.000519f, -0.000994f, -0.008332f, 0.021007f, -0.003287f, -0.013441f, 0.034767f, -0.016082f, -0.012245f, 0.027166f, 0.002379f, 0.000747f, -0.003594f, 0.017472f, -0.006052f, 0.015546f, -0.014826f, -0.061331f, -0.076410f, 0.064643f, 0.255690f, 0.101735f, 0.116660f, 0.002840f, -0.241708f, -0.175881f, -0.093779f, -0.139895f, 0.062143f, 0.122815f, 0.048944f, 0.216153f, 0.120416f, -0.006797f, 0.049332f, -0.107341f, -0.220341f, -0.086153f, -0.153398f, -0.023010f, 0.104301f, 0.090188f, 0.079268f, 0.135287f, 0.081477f, 0.024094f, 0.035636f, -0.008587f, -0.157112f, -0.067515f, -0.057326f, -0.214054f, 0.038811f, 0.029699f, -0.096846f, 0.156688f, 0.152446f, + -0.003739f, 0.193189f, 0.097091f, -0.091429f, 0.061871f, -0.090902f, -0.185197f, -0.015973f, -0.111191f, -0.164620f, 0.030581f, 0.016336f, -0.008013f, 0.151266f, 0.148785f, 0.086630f, 0.132720f, 0.078370f, -0.048905f, -0.058482f, -0.099883f, -0.175871f, -0.126729f, -0.062641f, -0.055287f, 0.030257f, 0.101273f, 0.066404f, 0.111310f, 0.162754f, 0.067042f, -0.022337f, -0.016383f, -0.113698f, -0.085707f, 0.009021f, -0.091341f, -0.033725f, 0.034008f, -0.006870f}, + {-0.004815f, -0.012030f, -0.003493f, 0.003523f, 0.000648f, 0.003820f, 0.003430f, 0.010792f, -0.002005f, -0.000496f, -0.001213f, -0.007813f, -0.006263f, 0.001472f, 0.001259f, -0.000511f, 0.003768f, -0.011457f, -0.006803f, -0.006586f, 0.003937f, -0.000119f, -0.001678f, -0.002020f, -0.002006f, 0.001805f, 0.002673f, -0.000696f, -0.001486f, 0.004034f, -0.006424f, 0.006509f, 0.004412f, -0.002411f, -0.005353f, -0.001064f, -0.007872f, -0.003369f, -0.011053f, 0.004511f, 0.004142f, -0.000701f, 0.002402f, -0.007214f, 0.006526f, -0.000140f, -0.001093f, 0.005229f, -0.007272f, 0.000231f, 0.006156f, 0.001572f, -0.001687f, 0.000460f, 0.000874f, -0.006669f, 0.005189f, -0.001173f, 0.006411f, 0.000705f, 0.001663f, 0.001246f, 0.002054f, -0.003880f, -0.004502f, -0.004502f, 0.003448f, -0.002734f, 0.000660f, 0.007686f, 0.010107f, 0.005773f, -0.001024f, 0.002362f, -0.000045f, 0.000139f, 0.000914f, 0.006491f, -0.008799f, -0.007006f, -0.001307f, 0.006949f, 0.010028f, -0.004686f, 0.005815f, -0.003193f, -0.008525f, -0.002233f, -0.004811f, 0.002847f, -0.001263f, -0.003998f, 0.003628f, 0.005743f, 0.001161f, 0.006926f, + -0.012668f, -0.013493f, -0.008833f, 0.001336f, -0.000153f, -0.002247f, 0.000531f, 0.004214f, -0.001485f, 0.005665f, 0.004488f, -0.005855f, 0.002118f, -0.000371f, 0.007100f, 0.006752f, 0.002371f, -0.007024f, 0.004499f, -0.004154f, 0.002205f, 0.004732f, -0.011507f, 0.012467f, 0.018021f, 0.002462f, 0.008062f, -0.006619f, -0.001547f, -0.006205f, -0.003473f, 0.005726f, -0.002099f, -0.006412f, -0.001953f, -0.003997f, 0.002893f, -0.003889f, -0.003891f, 0.000480f, 0.003049f, -0.003185f, -0.004039f, -0.001477f, 0.006140f, 0.005987f, -0.005276f, -0.001612f, -0.006208f, 0.001584f, 0.007237f, 0.002461f, -0.003321f, -0.003191f, 0.002290f, -0.000169f, -0.005899f, 0.027888f, 0.012990f, -0.001074f, 0.005970f, 0.005221f, -0.006603f, -0.003391f, 0.007877f, 0.003434f, 0.008566f, -0.006238f, 0.012405f, 0.004522f, -0.012005f, 0.009531f, 0.000635f, -0.000309f, -0.006274f, 0.006953f, -0.012980f, -0.011336f, -0.002279f, -0.004086f, -0.002043f, -0.004102f, 0.001655f, -0.002522f, -0.005310f, -0.004022f, 0.004706f, -0.005057f, 0.003335f, 0.001934f, 0.001431f, -0.005571f, 0.007871f, -0.016214f, -0.002675f, -0.000163f, + -0.002658f, -0.002101f, 0.001568f, 0.002941f, -0.004992f, 0.004047f, -0.006079f, 0.005934f, 0.002105f, 0.001246f, 0.006409f, -0.004434f, -0.000820f, 0.002444f, 0.009937f, 0.002335f, 0.004333f, -0.002296f, -0.008114f, -0.011804f, 0.002483f, 0.006316f, 0.008684f, -0.003470f, -0.012723f, 0.001897f, -0.004900f, -0.003716f, -0.002486f, 0.003588f, 0.001054f, 0.012787f, 0.000462f, 0.004265f, 0.003655f, -0.002025f, -0.001600f, -0.003773f, 0.015081f, 0.003521f, -0.012721f, -0.014419f, 0.003984f, -0.004358f, -0.011930f, 0.013646f, -0.006622f, -0.002145f, -0.001793f, 0.010744f, 0.002316f, -0.006067f, 0.007562f, -0.005672f, 0.011398f, -0.015479f, -0.010193f, 0.012593f, -0.012855f, -0.012934f, -0.005124f, 0.010818f, 0.004808f, 0.005293f, -0.001087f, 0.009747f, 0.005944f, -0.000753f, -0.012394f, 0.003657f, -0.003298f, 0.004801f, 0.004207f, 0.003723f, 0.011149f, 0.003244f, -0.010517f, 0.001330f, 0.007748f, 0.011367f, 0.003982f, -0.005632f, -0.001134f, -0.008464f, 0.004108f, -0.015310f, -0.000289f, 0.017516f, 0.001260f, 0.002355f, -0.008365f, -0.010239f, 0.002050f, 0.002980f, 0.012938f, -0.002052f, + 0.001519f, 0.002055f, -0.001383f, 0.002096f, 0.004663f, 0.001640f, 0.009343f, -0.001390f, 0.006422f, 0.001997f, 0.002193f, 0.002363f, 0.010989f, 0.001976f, -0.000746f, 0.003832f, -0.001500f, -0.033987f, -0.023331f, -0.004272f, 0.003115f, 0.006324f, -0.000049f, 0.000720f, -0.013857f, -0.000027f, -0.003478f, -0.001400f, -0.000281f, -0.002528f, -0.002077f, -0.008926f, 0.004554f, -0.019713f, -0.008043f, 0.002773f, -0.004625f, -0.005345f, -0.004073f, -0.010743f, -0.006390f, -0.003856f, -0.005986f, 0.003643f, -0.009478f, -0.003912f, 0.010878f, 0.008452f, 0.000413f, 0.006558f, 0.003647f, -0.002492f, -0.007837f, 0.005709f, 0.016528f, 0.003183f, 0.001864f, -0.005299f, -0.006133f, 0.006312f, -0.014570f, -0.006232f, 0.015795f, -0.013097f, 0.004287f, -0.001933f, -0.007434f, 0.004980f, 0.001031f, -0.002372f, 0.000941f, 0.004213f, -0.005006f, 0.001903f, -0.000910f, 0.011797f, 0.008870f, 0.003367f, 0.002555f, 0.006483f, -0.000017f, 0.000463f, -0.003044f, -0.017654f, 0.010244f, 0.008951f, -0.004956f, 0.002956f, -0.007777f, 0.001354f, 0.002065f, -0.001762f, 0.003842f, -0.001599f, -0.029359f, 0.003997f, + 0.007624f, -0.002523f, -0.002045f, -0.017238f, -0.006220f, 0.003891f, -0.014259f, -0.014870f, 0.003444f, -0.014190f, -0.006424f, -0.001040f, -0.007638f, 0.003894f, -0.005926f, 0.009414f, -0.004861f, -0.004241f, 0.003671f, 0.006346f, 0.013567f, 0.007443f, -0.014170f, -0.001555f, -0.000659f, 0.006432f, 0.011213f, 0.017575f, -0.007766f, -0.008007f, 0.009890f, -0.010827f, 0.002686f, 0.002072f, 0.015851f, 0.004872f, 0.008979f, -0.012363f, -0.004799f, -0.016584f, 0.012752f, 0.012225f, 0.015271f, -0.001070f, -0.002983f, -0.010890f, -0.001885f, 0.009255f, -0.004477f, -0.007309f, -0.005787f, -0.008720f, 0.001866f, 0.001040f, 0.002506f, -0.011605f, -0.000027f, -0.011368f, -0.000475f, -0.002339f, 0.004392f, 0.003010f, -0.003185f, -0.005471f, -0.013361f, -0.001382f, -0.001021f, 0.007765f, -0.005111f, 0.013370f, -0.007715f, 0.001528f, 0.006589f, 0.012485f, -0.009211f, 0.001095f, 0.036319f, 0.032552f, -0.001913f, 0.001699f, 0.015764f, 0.003003f, 0.007318f, -0.004219f, 0.008290f, -0.006261f, 0.015902f, 0.006446f, -0.000776f, 0.004132f, 0.000356f, 0.021855f, 0.013457f, -0.013146f, -0.012364f, 0.005200f, + 0.001404f, -0.003741f, -0.003848f, 0.003375f, 0.009290f, 0.008214f, 0.003773f, 0.001768f, 0.004489f, -0.002854f, -0.001149f, 0.012315f, -0.013674f, 0.005799f, 0.014664f, 0.012322f, 0.020248f, -0.001432f, -0.004122f, -0.001203f, 0.000419f, -0.006117f, 0.022055f, 0.021686f, 0.014117f, -0.006391f, -0.003038f, 0.009560f, 0.006346f, -0.005839f, 0.000475f, 0.012633f, -0.005477f, -0.005083f, 0.006692f, -0.021795f, -0.003583f, 0.001755f, 0.002293f, -0.007069f, -0.015600f, 0.006419f, 0.008991f, -0.011470f, -0.005418f, -0.012570f, 0.003835f, 0.001171f, -0.003668f, -0.002638f, -0.012160f, 0.018830f, -0.005738f, 0.002153f, -0.019682f, -0.005627f, -0.008456f, 0.024243f, -0.000779f, 0.015243f, 0.021243f, -0.011342f, -0.025827f, 0.000874f, 0.019881f, -0.015517f, 0.013984f, -0.004370f, -0.018695f, -0.008930f, 0.019013f, -0.018760f, -0.016256f, 0.011611f, -0.018824f, 0.005996f, 0.009040f, 0.007099f, -0.005335f, 0.011113f, 0.003226f, 0.001814f, 0.007341f, -0.012406f, 0.016400f, 0.007725f, 0.007084f, -0.003771f, -0.001906f, 0.030239f, -0.010819f, 0.001492f, 0.007859f, 0.014987f, -0.021086f, -0.017692f, + -0.016226f, 0.000156f, 0.001002f, -0.001559f, 0.009536f, 0.002529f, 0.017161f, 0.006477f, 0.009928f, -0.002190f, 0.001063f, -0.009179f, 0.015216f, -0.007647f, 0.014967f, -0.009002f, -0.013646f, 0.022154f, 0.018077f, -0.026951f, -0.023675f, -0.015976f, -0.012476f, 0.007468f, 0.000679f, -0.006164f, 0.011373f, 0.012409f, -0.016772f, 0.008430f, -0.002181f, -0.033058f, -0.011574f, -0.017276f, -0.015765f, 0.004356f, -0.006198f, -0.014356f, -0.018958f, 0.011178f, -0.010696f, -0.008704f, -0.006462f, -0.023103f, -0.001893f, 0.009588f, -0.005635f, -0.001871f, -0.007780f, 0.018120f, 0.003354f, 0.011352f, 0.009534f, -0.015530f, 0.015890f, 0.022564f, -0.006606f, -0.009959f, 0.002949f, -0.004544f, 0.010431f, -0.029092f, 0.011397f, 0.024184f, -0.002834f, -0.008647f, -0.006600f, 0.010194f, 0.022593f, -0.005824f, 0.006030f, -0.010462f, 0.015604f, -0.018875f, -0.006587f, 0.002956f, -0.002447f, -0.014802f, 0.026529f, 0.017795f, 0.014189f, -0.006460f, -0.019307f, -0.003084f, -0.027602f, 0.004150f, -0.001688f, -0.001597f, -0.000257f, -0.004947f, 0.015461f, 0.012076f, -0.019153f, 0.010068f, -0.011389f, 0.015238f, + -0.001269f, -0.004138f, -0.001175f, -0.017956f, -0.003149f, -0.016527f, -0.034350f, -0.002636f, 0.003965f, 0.001553f, -0.013379f, -0.001714f, -0.004120f, -0.027061f, -0.000054f, 0.020833f, -0.014961f, 0.004290f, -0.036138f, 0.002578f, 0.021045f, 0.011555f, -0.016451f, -0.013304f, 0.026415f, 0.006192f, 0.005966f, -0.005092f, 0.006878f, -0.000142f, -0.017594f, -0.004456f, -0.018468f, 0.008937f, -0.010959f, -0.001502f, -0.017966f, -0.019792f, -0.026771f, 0.017051f, 0.011482f, -0.008375f, -0.009447f, 0.007827f, -0.024539f, -0.001958f, 0.002022f, 0.006285f, 0.011024f, 0.005647f, 0.000878f, -0.008170f, 0.003786f, -0.007443f, 0.006718f, -0.007093f, 0.004514f, 0.002750f, -0.007602f, -0.009659f, -0.019124f, -0.012232f, 0.005124f, -0.032447f, -0.008770f, 0.018732f, 0.009875f, -0.003323f, 0.043341f, -0.005531f, 0.020199f, 0.020517f, -0.031198f, 0.002873f, -0.003965f, -0.025646f, -0.013690f, -0.013637f, 0.000629f, 0.004163f, 0.029922f, -0.003638f, 0.002945f, 0.021469f, 0.014988f, -0.002102f, 0.020020f, -0.007932f, -0.007623f, -0.011590f, -0.018296f, -0.023743f, -0.010692f, 0.017696f, -0.028997f, 0.003120f, + 0.023803f, -0.003248f, 0.007005f, -0.011030f, 0.006178f, 0.011533f, -0.007309f, 0.010051f, -0.014681f, -0.013928f, 0.022119f, 0.013756f, 0.013986f, 0.019598f, -0.000941f, -0.013852f, 0.019046f, -0.016121f, -0.024204f, 0.001655f, 0.021152f, -0.001802f, -0.019778f, 0.003981f, 0.025074f, -0.002307f, 0.006363f, 0.003950f, 0.035519f, 0.003775f, 0.007065f, 0.019397f, -0.002941f, -0.007690f, -0.018002f, 0.004056f, -0.003034f, -0.015033f, -0.000062f, -0.008134f, 0.006068f, 0.026303f, -0.000318f, -0.013019f, -0.004935f, -0.011887f, -0.007832f, -0.000230f, -0.006297f, 0.005296f, -0.018793f, 0.021709f, -0.010847f, 0.035340f, -0.008815f, -0.021939f, 0.000964f, 0.003464f, 0.011388f, 0.007425f, 0.005990f, -0.022258f, -0.020457f, 0.017137f, -0.021294f, -0.026335f, 0.007935f, 0.008724f, -0.007105f, 0.034606f, -0.026257f, -0.032152f, 0.012267f, -0.020754f, 0.000261f, 0.001429f, -0.019239f, 0.010600f, 0.001139f, 0.026224f, 0.027681f, 0.039754f, 0.018235f, 0.008299f, 0.005541f, 0.012961f, -0.013574f, 0.014986f, -0.024072f, 0.011459f, -0.002402f, -0.002320f, -0.046150f, -0.018150f, -0.007642f, 0.015341f, + -0.002061f, 0.003414f, 0.004892f, 0.003743f, -0.023674f, 0.023890f, -0.001053f, 0.009390f, 0.000667f, 0.022165f, -0.024599f, 0.016351f, -0.012184f, -0.001284f, 0.018250f, -0.021693f, -0.009545f, -0.023641f, -0.009282f, -0.026307f, 0.022914f, 0.016007f, 0.030845f, -0.002611f, 0.007111f, -0.029490f, 0.006191f, -0.030640f, 0.028245f, 0.006648f, -0.004917f, 0.025448f, 0.027257f, 0.012371f, -0.016738f, -0.026405f, -0.035646f, -0.003661f, -0.012861f, -0.020131f, 0.018775f, -0.007890f, 0.044196f, -0.036010f, -0.012517f, 0.022130f, -0.027131f, -0.014498f, 0.005529f, -0.004173f, -0.004610f, -0.031229f, 0.010719f, -0.003082f, -0.015297f, 0.000936f, 0.007868f, 0.006318f, 0.040930f, -0.009035f, 0.005214f, -0.001819f, -0.014378f, 0.018979f, -0.007563f, 0.007206f, 0.001440f, 0.026936f, -0.009242f, 0.031317f, -0.000375f, 0.015645f, 0.012805f, -0.002347f, -0.011085f, -0.030245f, 0.013335f, 0.031545f, 0.000550f, -0.000265f, 0.020727f, 0.018462f, -0.002566f, 0.003265f, 0.036270f, 0.023302f, -0.008144f, 0.007894f, 0.023284f, -0.006569f, -0.028815f, 0.000242f, -0.021395f, -0.003610f, -0.014199f, 0.000609f, + -0.039508f, -0.011922f, -0.015549f, -0.000066f, 0.006063f, 0.007172f, 0.034848f, 0.039777f, 0.019405f, -0.029107f, -0.018736f, 0.021770f, 0.029807f, 0.005585f, -0.031663f, -0.006135f, -0.009457f, -0.032001f, -0.021962f, -0.024743f, 0.025406f, -0.012366f, 0.000810f, -0.030763f, 0.038507f, 0.028589f, -0.007095f, 0.010154f, 0.065402f, -0.006558f, -0.018790f, -0.030367f, -0.006977f, 0.013749f, 0.007829f, -0.017480f, 0.010118f, -0.019958f, -0.027903f, 0.036897f, -0.022341f, 0.027326f, -0.019362f, -0.034221f, 0.003689f, 0.038328f, 0.028112f, -0.031910f, -0.017820f, 0.004858f, 0.008104f, 0.011631f, -0.000193f, 0.024915f, 0.016526f, 0.033485f, -0.010756f, -0.007944f, 0.000945f, -0.008861f, -0.031987f, -0.027190f, -0.005670f, 0.033726f, 0.009671f, 0.000854f, 0.003466f, -0.035193f, -0.035590f, -0.031189f, 0.017418f, 0.015378f, -0.010635f, -0.010431f, 0.005645f, 0.002238f, -0.017832f, 0.003973f, 0.040026f, 0.004778f, 0.025994f, 0.021376f, 0.019104f, 0.038624f, 0.060473f, 0.017299f, 0.003525f, 0.006634f, 0.025460f, -0.013787f, -0.003834f, 0.013761f, -0.002567f, 0.006637f, -0.002644f, 0.023490f, + 0.011663f, 0.016239f, -0.002071f, -0.008106f, 0.015667f, 0.032096f, 0.000604f, -0.028726f, 0.020716f, -0.044131f, -0.046520f, -0.018136f, 0.029217f, -0.017580f, -0.045595f, -0.030893f, -0.008504f, 0.017305f, 0.015597f, -0.069322f, 0.003685f, 0.035435f, -0.006512f, -0.007984f, 0.042789f, -0.022591f, -0.023597f, -0.029795f, -0.009878f, -0.009752f, -0.019934f, 0.006472f, 0.010034f, 0.017045f, 0.011929f, -0.009029f, -0.007281f, -0.002718f, -0.008147f, 0.003616f, 0.008496f, 0.035623f, -0.014423f, -0.044211f, 0.024658f, 0.001136f, -0.000728f, -0.036489f, 0.017374f, 0.008363f, -0.003176f, 0.043874f, -0.011468f, 0.005874f, -0.003142f, 0.020143f, 0.023599f, -0.023615f, -0.001530f, -0.012563f, -0.000645f, 0.014324f, -0.008413f, 0.021200f, -0.029413f, -0.023756f, -0.014957f, -0.025405f, -0.003513f, 0.004388f, 0.005502f, -0.036055f, -0.023685f, 0.020244f, 0.032104f, -0.012346f, -0.015719f, 0.018495f, -0.033331f, -0.029109f, -0.029011f, 0.036199f, -0.055099f, 0.021147f, -0.001428f, -0.030583f, -0.009025f, 0.031241f, 0.073726f, -0.006542f, -0.018310f, 0.026940f, 0.056733f, 0.022882f, -0.011531f, 0.012954f, + -0.007376f, -0.035861f, -0.065571f, -0.000414f, 0.068271f, -0.008235f, -0.008344f, -0.044051f, -0.006798f, 0.000057f, 0.001692f, 0.018856f, -0.001081f, 0.016226f, -0.002304f, 0.002456f, -0.036917f, 0.008036f, 0.027400f, -0.017443f, 0.034757f, -0.012759f, -0.005608f, -0.030422f, 0.018324f, -0.013497f, -0.014176f, -0.035575f, -0.055988f, 0.030252f, -0.029016f, -0.021983f, 0.005952f, 0.008783f, -0.014659f, 0.005994f, 0.026530f, -0.005421f, -0.031816f, -0.014217f, -0.039824f, -0.000955f, 0.007063f, 0.028816f, 0.001791f, -0.003816f, -0.009662f, -0.011424f, 0.005314f, 0.029996f, 0.000874f, -0.012567f, 0.026335f, -0.024622f, -0.000484f, -0.045166f, -0.018105f, -0.005415f, 0.057050f, -0.033953f, 0.008674f, -0.007817f, 0.004157f, -0.002133f, -0.010704f, 0.006488f, 0.020635f, 0.013302f, -0.049020f, 0.055777f, 0.010631f, 0.025160f, 0.001718f, -0.010296f, -0.019737f, 0.007687f, -0.031543f, -0.017410f, 0.065590f, -0.007394f, 0.004953f, -0.033587f, 0.030312f, -0.016977f, 0.022172f, -0.017137f, 0.039398f, 0.004894f, 0.003516f, -0.018508f, -0.016455f, 0.024218f, 0.051217f, -0.020615f, -0.032123f, 0.015844f, + -0.012995f, 0.035128f, 0.042571f, 0.022276f, -0.007058f, 0.027708f, -0.018316f, -0.015460f, 0.035651f, 0.050950f, -0.056442f, 0.005651f, 0.007723f, 0.010548f, -0.019518f, -0.000209f, 0.021916f, -0.055322f, 0.016316f, 0.034123f, 0.011750f, -0.023958f, -0.007625f, 0.041673f, 0.032475f, 0.012219f, -0.019792f, -0.023693f, -0.049602f, 0.070918f, 0.011840f, 0.037081f, -0.006024f, -0.013568f, 0.006957f, 0.022152f, -0.000235f, 0.000197f, -0.057720f, 0.010143f, 0.052550f, -0.008193f, 0.050242f, -0.029384f, -0.015000f, -0.020031f, 0.010682f, 0.049752f, -0.016649f, 0.000113f, 0.042025f, 0.054876f, -0.019330f, -0.037392f, -0.037080f, -0.028713f, 0.027412f, 0.018318f, 0.047543f, -0.015194f, 0.034677f, -0.018995f, -0.006175f, 0.030128f, -0.000148f, 0.041460f, -0.050661f, 0.031007f, 0.006733f, 0.013013f, -0.019914f, 0.014254f, 0.039237f, 0.073340f, -0.016450f, 0.017510f, -0.000314f, -0.051152f, 0.046195f, 0.003010f, 0.018465f, -0.010724f, -0.022567f, -0.010349f, -0.001267f, -0.021035f, -0.011488f, 0.061634f, 0.005035f, 0.022496f, -0.017589f, 0.043009f, 0.000814f, 0.019768f, 0.009777f, -0.028461f, + -0.005070f, -0.018455f, 0.001026f, 0.005834f, 0.053740f, 0.024692f, 0.002790f, 0.003840f, -0.001330f, -0.006984f, 0.009294f, 0.002648f, 0.033918f, 0.024371f, 0.014292f, -0.018706f, 0.023820f, 0.045702f, -0.045211f, 0.039596f, 0.007669f, 0.009679f, -0.045243f, -0.025156f, -0.056942f, -0.050106f, -0.007970f, 0.027929f, 0.027591f, -0.083658f, 0.001339f, -0.039250f, 0.021589f, 0.077996f, 0.043838f, -0.051944f, 0.033406f, 0.020115f, 0.026929f, -0.068360f, -0.102909f, -0.028010f, -0.010888f, -0.026567f, 0.006542f, 0.034039f, -0.035792f, 0.051832f, 0.020071f, -0.077068f, -0.057651f, -0.012684f, 0.042349f, 0.000520f, 0.004198f, -0.008942f, -0.023425f, -0.074633f, 0.003707f, -0.062855f, -0.050614f, 0.024171f, 0.020586f, 0.017234f, -0.008057f, -0.024946f, 0.056398f, 0.032527f, -0.023133f, -0.049182f, 0.037378f, 0.017735f, 0.009176f, -0.023578f, -0.056060f, 0.020650f, -0.026110f, 0.007671f, -0.047758f, 0.057749f, 0.001801f, -0.024176f, 0.006016f, 0.014046f, 0.048528f, 0.029548f, -0.012158f, -0.002978f, 0.017060f, 0.016239f, 0.018698f, -0.011386f, -0.075465f, -0.059668f, 0.011986f, -0.008333f, + 0.044105f, -0.008482f, -0.019118f, -0.053090f, 0.061664f, 0.024164f, -0.043407f, -0.043786f, 0.063147f, 0.060592f, -0.000990f, 0.045241f, -0.006187f, 0.003764f, -0.018305f, -0.007821f, -0.034095f, 0.005276f, 0.036886f, 0.003052f, -0.025131f, -0.066387f, 0.104375f, 0.002101f, -0.079837f, -0.006600f, -0.029403f, 0.013064f, 0.040370f, 0.035683f, -0.044192f, -0.072258f, 0.012760f, -0.034865f, 0.011450f, -0.007534f, 0.032137f, -0.010927f, 0.005037f, 0.018239f, -0.028788f, -0.036489f, 0.004316f, 0.008869f, 0.031836f, -0.001288f, -0.049573f, 0.032375f, -0.027412f, 0.025311f, -0.023751f, -0.017131f, -0.002194f, -0.008559f, -0.053314f, 0.009498f, 0.015603f, -0.052709f, 0.022590f, -0.021116f, 0.011004f, -0.018042f, 0.050893f, 0.038492f, -0.050140f, -0.027632f, 0.035254f, 0.042691f, -0.051297f, 0.067779f, 0.005077f, 0.054399f, 0.040742f, 0.064300f, -0.019480f, -0.028498f, 0.015305f, -0.054945f, 0.008955f, 0.005865f, 0.095605f, -0.030448f, -0.088448f, 0.149460f, -0.070378f, -0.055924f, 0.087590f, 0.037910f, -0.049854f, 0.082967f, 0.010207f, -0.070028f, 0.086372f, -0.092971f, 0.012412f, 0.028551f, + -0.070687f, 0.032637f, 0.018028f, -0.024063f, -0.007546f, -0.000692f, -0.017742f, -0.005099f, -0.010629f, -0.030724f, 0.000314f, -0.015042f, -0.004017f, -0.007114f, 0.014649f, 0.056445f, 0.046169f, -0.042521f, -0.005380f, 0.059389f, -0.010938f, -0.010426f, -0.060796f, 0.007579f, 0.019057f, -0.009193f, 0.050531f, 0.123511f, -0.042074f, -0.051102f, 0.086684f, -0.005149f, -0.047988f, 0.055289f, 0.035064f, -0.027585f, -0.043289f, -0.051617f, 0.014988f, 0.028860f, -0.024372f, 0.083209f, 0.052653f, -0.101984f, -0.099854f, 0.058353f, -0.047734f, -0.059264f, 0.076582f, 0.013445f, 0.102865f, 0.051032f, -0.014365f, -0.013100f, -0.077219f, -0.057778f, 0.169403f, 0.048347f, -0.039149f, -0.081975f, -0.000358f, -0.032787f, -0.077187f, -0.010528f, 0.083268f, 0.037933f, -0.003121f, 0.072395f, 0.057360f, -0.019062f, -0.086002f, 0.012762f, 0.039255f, -0.018614f, 0.094910f, 0.075532f, -0.018773f, 0.053140f, 0.007644f, -0.044592f, 0.029342f, 0.045129f, 0.017712f, 0.018459f, -0.059521f, -0.014398f, 0.009275f, 0.010587f, -0.006974f, -0.055400f, -0.017162f, 0.017423f, -0.010883f, -0.007581f, -0.043100f, 0.067617f, + 0.010934f, -0.059290f, 0.034765f, 0.079679f, -0.039809f, -0.026524f, 0.014310f, 0.024918f, -0.023911f, -0.053444f, 0.046566f, 0.072165f, -0.003413f, -0.031319f, 0.012244f, 0.018849f, 0.036492f, 0.045340f, 0.005878f, 0.084300f, 0.000891f, -0.098789f, 0.003670f, -0.013292f, 0.034470f, -0.012614f, -0.075619f, -0.004798f, -0.030771f, -0.035945f, 0.050635f, 0.021989f, 0.030474f, 0.030942f, -0.066893f, -0.040102f, -0.008530f, -0.004346f, 0.032573f, -0.002662f, -0.010099f, -0.001987f, -0.019535f, -0.052470f, 0.009656f, 0.069916f, -0.033006f, 0.001525f, -0.023811f, -0.028041f, 0.058148f, -0.071282f, 0.007888f, 0.015772f, -0.009225f, -0.011078f, -0.079542f, -0.116634f, -0.101338f, 0.204123f, 0.196730f, 0.194223f, 0.552993f, 0.194635f, -0.022485f, 0.034508f, -0.381967f, -0.467425f, -0.156441f, -0.263368f, -0.362156f, 0.044113f, -0.020535f, -0.063181f, 0.397912f, 0.240446f, 0.100788f, 0.619356f, 0.292811f, 0.051078f, 0.282545f, -0.070782f, -0.340066f, -0.327997f, -0.310611f, -0.432107f, -0.421090f, -0.102662f, -0.153451f, -0.251312f, 0.285836f, 0.127954f, -0.106453f, 0.411150f, 0.131508f, -0.054291f, + 0.467375f, 0.423022f, 0.095196f, 0.438828f, 0.447559f, -0.023871f, 0.107792f, 0.044110f, -0.439294f, -0.511932f, -0.380903f, -0.718178f, -0.678274f, -0.412559f, -0.545771f, -0.415123f, 0.038992f, 0.323505f, 0.370826f, 0.802518f, 0.731039f, 0.640207f, 0.693107f, 0.505114f, 0.252380f, 0.065739f, -0.069184f, -0.412250f, -0.491157f, -0.529252f, -0.591486f, -0.566764f, -0.482971f, -0.322901f, -0.235435f, -0.231873f, 0.044245f, 0.151184f, 0.139509f, 0.037178f} + }, + { + {0.004483f, 0.000450f, 0.005038f, -0.005236f, -0.008966f, -0.000363f, -0.006137f, -0.000559f, -0.001617f, -0.014172f, -0.011481f, -0.002036f, -0.004621f, 0.005652f, -0.002490f, 0.002602f, 0.003160f, 0.001222f, -0.002197f, -0.000082f, -0.005336f, 0.000321f, 0.005810f, 0.003438f, -0.002742f, 0.000153f, 0.003075f, -0.007659f, -0.002381f, 0.000583f, 0.003113f, -0.003223f, -0.007313f, -0.001907f, -0.007217f, 0.001098f, -0.003060f, -0.003042f, 0.003423f, -0.003806f, 0.002888f, 0.001527f, 0.001916f, -0.005876f, 0.001814f, 0.000347f, 0.003129f, -0.005072f, 0.002962f, 0.002324f, 0.004674f, -0.001255f, 0.005972f, 0.002901f, 0.006067f, 0.003402f, -0.004883f, -0.002553f, 0.011785f, 0.001404f, -0.001600f, 0.000823f, -0.000097f, 0.006905f, 0.000223f, -0.003881f, -0.001887f, 0.007976f, -0.003527f, -0.001704f, -0.008453f, -0.000868f, -0.003145f, 0.003394f, -0.000705f, -0.000875f, -0.003615f, -0.007178f, 0.026073f, 0.013275f, 0.011672f, 0.005963f, -0.002420f, -0.001182f, -0.002339f, -0.005743f, -0.007146f, -0.005656f, -0.007318f, -0.003618f, 0.007500f, 0.002048f, -0.000120f, -0.000438f, 0.004989f, 0.001764f, + -0.002761f, -0.003684f, -0.002203f, -0.013890f, 0.005781f, 0.000925f, 0.000339f, -0.003265f, 0.001940f, -0.000274f, -0.003522f, 0.001410f, 0.005091f, -0.000562f, -0.005961f, -0.002120f, -0.002492f, -0.003430f, 0.000902f, 0.005308f, -0.001393f, 0.000777f, -0.006891f, 0.003865f, -0.008554f, 0.004861f, 0.001327f, -0.000362f, 0.000160f, 0.004778f, -0.006573f, -0.005689f, -0.008999f, 0.001625f, 0.001691f, -0.000374f, 0.005226f, -0.006458f, 0.001247f, -0.001678f, 0.000179f, -0.005048f, 0.003615f, 0.000608f, -0.002990f, 0.004481f, -0.008901f, 0.002883f, -0.004845f, 0.007770f, 0.004179f, 0.000134f, 0.000733f, -0.003477f, -0.010940f, 0.006536f, -0.002191f, 0.024142f, 0.012182f, 0.015605f, 0.004865f, 0.005008f, -0.000466f, 0.005833f, 0.001130f, 0.005136f, -0.003645f, 0.010443f, -0.002287f, -0.012893f, -0.002932f, -0.000191f, 0.001167f, -0.004397f, 0.010031f, 0.000084f, 0.004219f, 0.008780f, 0.005009f, -0.000336f, 0.000486f, 0.001757f, -0.007911f, -0.006006f, 0.003852f, 0.003574f, -0.002550f, 0.000439f, 0.004631f, -0.008786f, 0.012291f, -0.001648f, 0.002261f, -0.002308f, 0.004902f, 0.005630f, + 0.000841f, -0.006824f, -0.005968f, 0.012325f, 0.000834f, -0.004177f, 0.000014f, 0.006907f, 0.005999f, -0.004250f, -0.004556f, -0.011717f, -0.002919f, -0.005078f, 0.001055f, -0.004636f, 0.001603f, -0.011412f, -0.003862f, 0.000793f, -0.003836f, 0.001923f, 0.005055f, -0.002714f, 0.000369f, 0.001564f, -0.002089f, 0.003786f, 0.000413f, 0.004881f, 0.000852f, -0.002421f, -0.005421f, 0.000149f, -0.006770f, 0.001924f, 0.001580f, 0.005563f, -0.016970f, -0.004993f, -0.004163f, 0.003254f, 0.002887f, -0.010983f, -0.005481f, -0.001885f, 0.002326f, 0.006396f, 0.001498f, 0.008635f, -0.007232f, -0.009504f, 0.002449f, 0.000700f, -0.002187f, -0.006394f, 0.021506f, -0.000777f, 0.005407f, 0.001678f, 0.000251f, -0.000124f, -0.003818f, -0.007965f, -0.006991f, -0.001676f, 0.005147f, -0.004282f, 0.011016f, -0.003510f, -0.001546f, -0.009029f, -0.011685f, -0.000581f, -0.007641f, -0.003586f, 0.014759f, -0.007957f, -0.002841f, -0.007710f, 0.002426f, 0.000785f, -0.003502f, -0.008112f, -0.002206f, 0.000481f, -0.010273f, 0.001556f, -0.005836f, 0.008157f, 0.004423f, -0.004021f, -0.003066f, -0.002022f, 0.001635f, 0.000026f, + 0.005363f, -0.002718f, -0.004869f, -0.003673f, 0.013030f, 0.013062f, -0.005290f, -0.011612f, 0.000573f, 0.004268f, -0.001585f, 0.004102f, -0.006403f, 0.001558f, -0.007484f, 0.004760f, -0.001892f, 0.013923f, 0.002777f, -0.054210f, -0.009193f, -0.015364f, -0.018194f, 0.005163f, -0.006392f, -0.015145f, -0.013211f, 0.002528f, -0.013020f, 0.002179f, 0.018535f, -0.004309f, 0.007754f, 0.006537f, 0.015573f, 0.004539f, -0.011449f, 0.002951f, 0.016953f, -0.007666f, 0.008257f, -0.012349f, -0.012005f, 0.004252f, 0.004598f, 0.014051f, 0.000426f, -0.007889f, 0.007521f, -0.005131f, 0.005677f, -0.000221f, 0.008193f, -0.006784f, -0.005125f, -0.007611f, -0.000307f, 0.002003f, -0.003607f, 0.006782f, -0.014770f, 0.002407f, 0.013999f, 0.003714f, -0.004572f, 0.006171f, -0.007884f, -0.003118f, -0.018613f, -0.004706f, -0.001148f, 0.003517f, -0.000275f, 0.010439f, -0.015148f, 0.002167f, -0.002661f, 0.008116f, 0.003190f, -0.001962f, 0.009559f, -0.008172f, -0.002099f, -0.006308f, -0.014945f, -0.004816f, -0.004338f, -0.002769f, 0.009182f, -0.008071f, -0.016674f, 0.002148f, 0.002920f, 0.000420f, -0.027160f, 0.015499f, + 0.017440f, -0.000936f, 0.009782f, 0.004465f, 0.020600f, 0.027411f, 0.003506f, 0.003598f, 0.007847f, 0.003417f, 0.004539f, -0.003882f, 0.005403f, -0.004504f, 0.007178f, 0.008399f, -0.023500f, 0.012182f, -0.002607f, -0.004333f, -0.007300f, -0.009486f, 0.003795f, 0.006695f, 0.010638f, 0.002113f, 0.001764f, -0.013676f, 0.000538f, -0.003964f, -0.004647f, -0.001988f, 0.001757f, 0.000840f, -0.001132f, 0.013532f, -0.000792f, -0.004407f, 0.004353f, -0.005162f, 0.006800f, 0.009192f, 0.010069f, 0.005393f, 0.000992f, -0.005553f, 0.011242f, 0.003749f, 0.001389f, 0.001347f, 0.001345f, 0.001002f, -0.006745f, -0.009062f, 0.008246f, -0.008398f, 0.007882f, 0.007649f, 0.005212f, -0.000857f, -0.006314f, 0.005910f, 0.006949f, 0.016374f, 0.007110f, 0.006580f, 0.003485f, -0.014831f, -0.005035f, 0.002826f, -0.002809f, 0.007918f, -0.013773f, 0.002477f, 0.050249f, 0.015278f, 0.003618f, 0.009937f, 0.025058f, 0.010226f, 0.030233f, 0.007511f, -0.006818f, -0.002108f, -0.002674f, -0.002835f, 0.008101f, 0.013064f, -0.006185f, 0.002843f, 0.008923f, -0.003328f, -0.012766f, 0.010060f, -0.001343f, 0.004794f, + -0.004458f, -0.006310f, 0.010149f, 0.002420f, -0.001118f, -0.002928f, -0.011667f, -0.005685f, 0.006045f, 0.001553f, -0.004137f, -0.002032f, 0.001554f, 0.004304f, 0.011370f, 0.003624f, -0.010851f, -0.002484f, 0.000491f, -0.003394f, 0.003633f, 0.005428f, -0.010942f, -0.013027f, -0.000959f, 0.003182f, -0.001584f, 0.009942f, -0.018692f, -0.004008f, -0.008595f, -0.010492f, -0.001354f, -0.000903f, 0.002518f, 0.009795f, -0.000310f, 0.001380f, 0.002988f, -0.001715f, 0.012991f, 0.008306f, -0.011044f, -0.009626f, 0.007029f, 0.015873f, -0.001591f, -0.007598f, 0.015556f, 0.008228f, 0.003411f, -0.007061f, 0.024022f, 0.012670f, 0.021547f, -0.006851f, -0.000535f, -0.005018f, 0.021682f, -0.022433f, -0.004024f, 0.006519f, -0.005185f, -0.003967f, 0.006720f, -0.002004f, -0.007912f, 0.020241f, 0.010292f, 0.002826f, 0.032385f, -0.008532f, -0.003076f, -0.006499f, -0.000633f, 0.006011f, -0.009487f, -0.000593f, -0.005386f, 0.013179f, -0.011682f, 0.003339f, -0.000240f, -0.002898f, 0.000142f, 0.007913f, 0.004037f, -0.009645f, -0.018676f, 0.000846f, 0.002509f, 0.014987f, 0.015949f, 0.017421f, 0.000361f, -0.009428f, + 0.011011f, -0.029336f, -0.006171f, -0.011316f, -0.018624f, 0.012426f, -0.005370f, -0.005289f, 0.007973f, -0.003136f, -0.006593f, 0.026184f, -0.001300f, -0.007415f, 0.007326f, 0.000898f, 0.005061f, 0.005226f, 0.001446f, 0.015824f, -0.011502f, -0.005710f, -0.001348f, -0.013484f, -0.002614f, 0.002465f, -0.006238f, 0.004423f, 0.004503f, 0.016136f, -0.010206f, 0.004794f, 0.008657f, 0.005455f, -0.038695f, -0.057715f, -0.009918f, 0.003062f, -0.001146f, 0.001808f, -0.002837f, -0.011391f, -0.006654f, -0.009022f, -0.002587f, 0.009660f, 0.011150f, -0.009935f, -0.015100f, 0.013133f, 0.002617f, -0.007969f, 0.000642f, -0.001070f, -0.009182f, -0.007377f, 0.021364f, 0.011200f, -0.011456f, 0.006178f, 0.002463f, 0.009494f, -0.011073f, 0.012771f, -0.012302f, 0.008906f, 0.005681f, -0.002226f, -0.005646f, 0.005914f, -0.022943f, -0.011044f, 0.014336f, 0.023228f, 0.012860f, -0.015504f, 0.000613f, -0.010849f, 0.015423f, 0.003610f, 0.004230f, 0.001567f, -0.012157f, 0.006568f, 0.018910f, 0.002612f, 0.014424f, 0.010459f, 0.006867f, 0.011271f, 0.023234f, -0.005749f, -0.022365f, 0.011681f, 0.000650f, -0.004830f, + 0.001805f, 0.020295f, -0.007347f, -0.013057f, 0.007468f, -0.002984f, -0.001511f, -0.004526f, -0.002191f, -0.005495f, -0.009761f, -0.004723f, 0.014177f, -0.017410f, -0.010284f, 0.002745f, -0.022466f, -0.014339f, 0.003560f, 0.003728f, 0.029483f, -0.025811f, -0.017983f, -0.009891f, -0.005138f, -0.003098f, 0.009366f, 0.009388f, -0.013990f, 0.014217f, -0.003526f, 0.006481f, -0.010159f, 0.021116f, -0.004360f, -0.007892f, 0.013341f, 0.009840f, 0.007642f, -0.014320f, -0.013754f, 0.017804f, -0.009620f, 0.005217f, 0.004068f, -0.006525f, 0.014857f, 0.004518f, -0.000310f, 0.003249f, 0.010825f, 0.014124f, 0.004102f, -0.012872f, 0.002657f, -0.018328f, 0.010513f, 0.004467f, -0.020567f, 0.014078f, 0.003059f, -0.010891f, 0.018292f, 0.005508f, -0.005300f, 0.010375f, -0.001939f, 0.019985f, -0.004930f, -0.005735f, -0.004567f, -0.003373f, 0.026491f, 0.004847f, 0.000301f, 0.006354f, -0.022536f, -0.015056f, -0.015292f, 0.000446f, 0.014221f, 0.000449f, 0.017741f, -0.024483f, -0.009077f, -0.016547f, -0.012874f, 0.030549f, -0.002500f, 0.008273f, 0.010087f, -0.030337f, 0.009662f, -0.013174f, 0.007599f, -0.009285f, + 0.024580f, 0.003854f, -0.016731f, 0.002445f, -0.017055f, 0.013857f, 0.027162f, -0.023115f, 0.015440f, 0.005393f, -0.000350f, 0.010875f, 0.028955f, -0.011135f, 0.000309f, 0.008576f, -0.030909f, 0.001664f, 0.014574f, -0.008848f, 0.010556f, 0.010950f, -0.005329f, 0.027912f, -0.013598f, -0.025499f, -0.010521f, 0.002941f, 0.001082f, -0.005296f, -0.010527f, 0.007556f, 0.007507f, -0.000067f, -0.017430f, -0.004259f, -0.004079f, 0.011886f, -0.007365f, 0.047001f, -0.005443f, 0.006711f, -0.001678f, -0.002008f, -0.022324f, 0.002350f, 0.017442f, 0.013718f, 0.046408f, -0.004893f, -0.003896f, -0.009444f, -0.001248f, -0.012840f, -0.000400f, 0.018492f, -0.009201f, -0.001789f, 0.003942f, 0.004472f, 0.018710f, 0.014867f, 0.004796f, 0.035679f, -0.006084f, -0.032723f, -0.032314f, -0.023065f, -0.004225f, 0.010474f, -0.002856f, -0.009050f, 0.053769f, -0.038876f, -0.029044f, -0.009723f, -0.018326f, -0.021555f, 0.026063f, 0.010064f, 0.005261f, -0.008676f, -0.005172f, 0.030922f, -0.009186f, -0.013859f, -0.037764f, -0.006115f, -0.001061f, 0.017058f, 0.006380f, -0.008436f, 0.002086f, 0.014754f, 0.006760f, 0.008855f, + 0.023773f, 0.029325f, 0.007992f, -0.012299f, 0.007333f, -0.019268f, 0.011938f, 0.009064f, -0.007099f, -0.000606f, -0.014749f, 0.004398f, -0.000349f, -0.028685f, 0.025821f, -0.003845f, -0.013264f, 0.014898f, -0.026221f, -0.007469f, 0.026774f, 0.014141f, -0.001466f, -0.000779f, -0.036207f, 0.010361f, 0.018266f, 0.009117f, 0.005109f, -0.004085f, -0.027331f, -0.078231f, -0.007662f, 0.013020f, 0.019613f, -0.004577f, -0.024123f, 0.034688f, -0.019371f, 0.014075f, 0.026248f, 0.020091f, 0.002028f, 0.024677f, 0.000702f, 0.006051f, 0.003252f, 0.012589f, 0.000390f, 0.000035f, 0.032798f, -0.019048f, -0.011205f, 0.025283f, 0.026881f, -0.008172f, -0.011577f, -0.003975f, -0.006233f, 0.027816f, 0.020474f, -0.052513f, -0.004143f, 0.002670f, -0.022500f, 0.008014f, -0.033491f, 0.025063f, 0.007882f, -0.005604f, 0.015960f, 0.005725f, -0.005902f, -0.013222f, -0.007125f, 0.036034f, 0.002947f, -0.001763f, 0.009733f, -0.006541f, 0.016461f, 0.042749f, 0.019434f, -0.007897f, -0.006391f, -0.007922f, 0.027012f, 0.007688f, 0.027322f, 0.016537f, 0.014323f, 0.006091f, -0.009916f, -0.013778f, 0.012921f, -0.027577f, + 0.005825f, -0.015246f, -0.010339f, -0.000384f, 0.019418f, 0.001302f, 0.002725f, 0.005298f, -0.004468f, 0.029169f, 0.040525f, 0.043905f, 0.000939f, 0.019504f, -0.025616f, 0.009353f, 0.016518f, -0.013133f, 0.023863f, -0.019104f, -0.035720f, 0.004202f, -0.018415f, -0.003378f, 0.002347f, -0.019756f, 0.005329f, 0.026550f, -0.015968f, -0.015420f, 0.013215f, 0.025680f, -0.001938f, -0.006014f, -0.031006f, 0.057114f, 0.004468f, 0.014225f, 0.045101f, -0.017227f, 0.005317f, -0.009319f, 0.012464f, -0.013657f, 0.013561f, -0.032078f, -0.036205f, -0.002044f, -0.021133f, -0.002607f, -0.001282f, -0.003434f, -0.005489f, 0.001395f, -0.009496f, 0.008247f, -0.028639f, -0.012767f, -0.038902f, -0.003047f, 0.009852f, 0.017952f, 0.043585f, 0.022650f, 0.008163f, 0.004340f, 0.013060f, 0.008333f, 0.007991f, 0.016101f, 0.018897f, -0.006993f, -0.035464f, -0.037202f, -0.023863f, -0.016047f, 0.004373f, 0.010734f, -0.012495f, -0.022490f, -0.035977f, -0.000432f, -0.013257f, 0.031985f, -0.014172f, 0.006791f, -0.024716f, -0.014033f, -0.003676f, -0.012310f, -0.048494f, -0.053287f, 0.014883f, 0.003196f, 0.002129f, 0.024125f, + 0.015818f, 0.018759f, 0.017815f, -0.034578f, -0.006205f, 0.057180f, -0.010395f, -0.025856f, 0.009487f, -0.016770f, 0.006712f, -0.041179f, 0.015494f, -0.022047f, 0.007900f, 0.035254f, 0.025310f, 0.004252f, 0.026926f, -0.004396f, -0.012261f, 0.016037f, -0.022148f, -0.040709f, -0.062947f, 0.005960f, 0.000363f, 0.024722f, 0.016544f, -0.022383f, -0.012834f, -0.059864f, -0.005102f, -0.027512f, 0.005520f, -0.013510f, -0.007875f, -0.010980f, -0.005624f, -0.004056f, -0.022212f, -0.008812f, -0.025732f, 0.020210f, -0.006174f, 0.017379f, 0.042111f, -0.022297f, 0.011149f, -0.002940f, -0.012166f, 0.011797f, -0.024665f, -0.038886f, 0.017461f, 0.009885f, 0.017300f, 0.012400f, -0.084355f, -0.036954f, 0.009332f, -0.026936f, -0.004106f, -0.022923f, 0.032771f, 0.042315f, -0.003988f, 0.046718f, 0.004460f, 0.021572f, -0.008242f, -0.000881f, -0.028063f, 0.016997f, 0.030909f, 0.007914f, 0.052915f, 0.002036f, 0.004871f, -0.015527f, -0.027388f, 0.033671f, 0.048813f, 0.019076f, 0.006501f, 0.006123f, 0.015637f, 0.002813f, -0.000876f, -0.047455f, -0.033240f, -0.015199f, -0.061420f, -0.074756f, -0.056819f, -0.024797f, + 0.016316f, 0.000283f, -0.014105f, -0.026831f, -0.000767f, 0.050614f, 0.023582f, -0.042850f, -0.008013f, -0.008266f, -0.031658f, -0.004754f, 0.001428f, 0.021719f, 0.014602f, -0.031809f, 0.022517f, -0.017665f, 0.009055f, -0.016418f, 0.004308f, -0.024234f, -0.010203f, 0.013026f, -0.045931f, -0.007942f, -0.017888f, 0.015441f, -0.012130f, -0.040976f, 0.048018f, 0.047819f, -0.000308f, -0.018479f, 0.025701f, -0.063198f, -0.020962f, 0.019536f, -0.022464f, -0.013040f, -0.002677f, -0.020140f, 0.003029f, -0.004881f, -0.043838f, 0.018723f, -0.006575f, -0.012825f, -0.015796f, -0.011048f, -0.003898f, -0.011549f, -0.019411f, 0.035523f, -0.018251f, -0.016847f, 0.015413f, -0.000695f, 0.056625f, -0.012106f, -0.037830f, 0.019892f, -0.020812f, -0.017150f, -0.030442f, 0.017797f, 0.033108f, -0.072727f, 0.001781f, 0.054628f, -0.016146f, -0.048535f, 0.096253f, 0.067405f, -0.000513f, -0.018893f, 0.015969f, -0.057915f, 0.001797f, 0.070628f, -0.011685f, -0.025384f, 0.002079f, 0.080177f, -0.010617f, 0.017166f, -0.016195f, -0.037069f, -0.028518f, -0.007994f, -0.012438f, 0.014381f, 0.021750f, 0.000640f, -0.029251f, -0.043019f, + -0.037964f, -0.006767f, -0.007372f, -0.021542f, 0.021061f, 0.015595f, -0.015779f, -0.021276f, -0.021398f, 0.012441f, 0.005913f, 0.015391f, 0.041880f, -0.000597f, -0.032879f, 0.023065f, 0.010884f, 0.007567f, 0.004184f, -0.000980f, -0.014809f, 0.029542f, 0.017186f, -0.012297f, -0.012295f, -0.009810f, -0.037098f, 0.010452f, 0.030867f, 0.008346f, -0.025159f, 0.031700f, 0.025912f, 0.012846f, 0.006079f, -0.017343f, 0.011460f, -0.056391f, 0.011500f, -0.004131f, 0.052734f, -0.018698f, -0.021582f, 0.009557f, -0.009623f, -0.002395f, -0.032587f, -0.008455f, -0.006102f, 0.045240f, -0.027801f, -0.065216f, -0.024369f, 0.090377f, 0.003946f, 0.014719f, -0.014772f, -0.030094f, -0.039639f, -0.013562f, 0.011741f, 0.026264f, 0.022461f, -0.019537f, 0.000375f, -0.040355f, -0.014119f, 0.014040f, -0.033174f, -0.018409f, -0.012184f, 0.048639f, 0.026206f, 0.026614f, 0.026167f, -0.028736f, 0.005971f, 0.009924f, 0.012380f, -0.003138f, 0.033913f, -0.007705f, 0.015488f, 0.025163f, 0.010835f, 0.006612f, 0.022750f, 0.029187f, -0.016352f, -0.035581f, 0.024642f, -0.004476f, 0.001473f, -0.037713f, -0.032925f, 0.007064f, + -0.015615f, -0.014335f, 0.031944f, -0.032204f, 0.041837f, 0.024596f, -0.015705f, 0.019682f, -0.021202f, -0.025158f, -0.026157f, 0.039512f, -0.026266f, 0.010981f, 0.015551f, -0.049642f, 0.007760f, 0.002758f, -0.033682f, -0.067537f, -0.053412f, 0.038138f, -0.038543f, -0.005322f, -0.033438f, -0.014502f, -0.021353f, -0.009237f, 0.025886f, 0.002066f, -0.018045f, 0.016906f, 0.049204f, 0.048789f, 0.047725f, -0.016967f, 0.000417f, -0.038470f, -0.001744f, 0.008271f, 0.006806f, -0.033527f, -0.037508f, -0.056189f, 0.039521f, 0.006029f, 0.013230f, -0.007523f, 0.020846f, -0.013744f, -0.015979f, 0.014242f, 0.030419f, 0.009563f, 0.020056f, 0.064929f, -0.009000f, -0.035049f, -0.079890f, -0.008632f, -0.030622f, -0.012314f, -0.018606f, -0.034140f, -0.025582f, -0.052354f, -0.005680f, 0.002499f, 0.020390f, 0.061137f, -0.046847f, -0.014771f, -0.006596f, 0.022752f, 0.021892f, 0.061152f, 0.009457f, -0.060910f, -0.013062f, 0.017873f, 0.053134f, 0.018115f, -0.076564f, -0.026680f, 0.074137f, 0.011758f, 0.074261f, -0.036405f, 0.005606f, 0.011442f, 0.046817f, 0.002195f, 0.043340f, 0.065763f, 0.012909f, 0.057224f, + 0.040276f, 0.016027f, 0.075201f, 0.067461f, 0.025690f, 0.101313f, 0.078458f, 0.054018f, -0.066629f, 0.005356f, 0.039298f, 0.028236f, 0.011066f, -0.042327f, -0.049944f, -0.020856f, 0.017395f, -0.055329f, 0.058971f, -0.027531f, 0.040050f, 0.014015f, -0.042119f, 0.003240f, 0.032951f, -0.021726f, -0.044012f, 0.028521f, -0.008702f, 0.023973f, -0.011734f, 0.003668f, 0.015742f, -0.032992f, 0.001143f, -0.016268f, 0.004120f, -0.051750f, -0.033427f, 0.044379f, 0.007116f, 0.016272f, -0.032329f, 0.035933f, 0.039736f, -0.028730f, 0.027280f, -0.040390f, -0.002786f, -0.023657f, 0.032891f, 0.064963f, 0.004368f, 0.079446f, -0.015009f, -0.006044f, 0.009693f, 0.006346f, 0.000320f, -0.047968f, 0.086194f, 0.050539f, -0.000102f, 0.042330f, 0.040616f, 0.044173f, -0.010912f, -0.002278f, -0.074945f, 0.035802f, 0.044971f, -0.011396f, -0.007213f, 0.050440f, 0.033737f, 0.026638f, 0.070291f, 0.010706f, -0.025717f, -0.038800f, 0.018736f, -0.011357f, -0.040160f, 0.040355f, -0.047896f, 0.004653f, 0.017803f, -0.035276f, -0.055786f, -0.036385f, -0.013661f, 0.010557f, 0.040304f, -0.064906f, 0.035266f, 0.064399f, + -0.004989f, 0.073624f, 0.017298f, -0.057040f, -0.041285f, -0.001120f, -0.025043f, -0.033292f, 0.035115f, 0.049318f, -0.008382f, 0.035411f, 0.038832f, -0.030235f, 0.026176f, 0.054941f, -0.007200f, -0.065792f, 0.023132f, 0.001584f, -0.017910f, 0.022685f, 0.048193f, -0.013193f, -0.030610f, 0.016380f, -0.027234f, -0.026557f, -0.006413f, 0.049548f, 0.034944f, -0.061863f, 0.016382f, 0.031498f, -0.048361f, -0.024535f, 0.048484f, -0.010898f, -0.081636f, -0.006303f, 0.060184f, -0.017591f, -0.116043f, 0.120370f, -0.037982f, -0.009872f, -0.062406f, 0.079088f, 0.019681f, -0.022334f, 0.049905f, -0.028570f, -0.029220f, -0.010322f, 0.135303f, 0.050739f, -0.064152f, -0.048124f, 0.048417f, -0.008453f, 0.072802f, 0.005623f, 0.053021f, -0.076695f, 0.058641f, 0.116268f, 0.004066f, -0.007034f, -0.026662f, -0.013959f, -0.052383f, 0.111821f, 0.061162f, -0.053253f, 0.049920f, 0.115658f, 0.021825f, -0.044086f, -0.011055f, -0.010461f, 0.019770f, 0.017804f, -0.036398f, -0.050823f, 0.013266f, -0.042937f, 0.008225f, -0.026551f, -0.031475f, -0.006288f, 0.004876f, 0.015190f, -0.035011f, -0.013529f, -0.014095f, -0.042651f, + 0.035809f, -0.013109f, 0.001999f, -0.005953f, -0.029072f, 0.011845f, 0.007796f, 0.001427f, -0.006488f, 0.000736f, -0.001308f, -0.016602f, -0.036819f, 0.016032f, -0.018371f, 0.016238f, 0.010974f, -0.036221f, -0.029763f, -0.003037f, -0.004381f, -0.003866f, -0.007953f, 0.030087f, -0.020686f, 0.003298f, -0.038864f, 0.033376f, -0.038038f, -0.019963f, 0.018983f, 0.000676f, -0.030391f, 0.024349f, -0.040848f, 0.003185f, 0.012566f, -0.001067f, 0.004767f, 0.019632f, 0.009677f, -0.042312f, 0.021810f, 0.002931f, -0.024997f, 0.036196f, 0.014861f, -0.040072f, -0.003747f, -0.031706f, -0.003588f, 0.013892f, 0.010926f, -0.038431f, 0.047933f, -0.068669f, -0.086865f, -0.031233f, 0.260226f, 0.209114f, 0.137796f, 0.252749f, -0.100942f, -0.238579f, -0.077313f, -0.385813f, -0.151221f, 0.011056f, -0.091326f, 0.177119f, 0.240952f, 0.039578f, 0.152788f, 0.264029f, 0.004743f, 0.072675f, -0.018262f, -0.310564f, -0.257921f, -0.194289f, -0.193946f, -0.095307f, 0.145982f, 0.078728f, 0.112604f, 0.323674f, 0.136065f, 0.019543f, 0.192592f, 0.089557f, -0.112773f, 0.037095f, -0.094959f, -0.315435f, -0.077511f, -0.165349f, + -0.325988f, -0.054989f, 0.005431f, -0.080446f, 0.217026f, 0.251640f, 0.097437f, 0.295985f, 0.298575f, 0.054444f, 0.113326f, 0.050269f, -0.193355f, -0.215615f, -0.203002f, -0.361783f, -0.321079f, -0.123779f, -0.151391f, 0.027960f, 0.188110f, 0.259978f, 0.212875f, 0.332560f, 0.244165f, 0.129319f, 0.012088f, -0.047525f, -0.201804f, -0.243048f, -0.183940f, -0.215705f, -0.185124f, -0.017149f, -0.025625f, 0.029877f, 0.137746f, 0.027719f, 0.013208f}, + {0.003131f, 0.003353f, 0.003924f, -0.004476f, -0.007269f, 0.001223f, 0.005007f, -0.003315f, 0.003393f, -0.011708f, -0.006448f, -0.006644f, 0.000567f, 0.001754f, -0.004859f, -0.006050f, 0.002573f, 0.006452f, 0.000301f, -0.003161f, -0.008681f, -0.004949f, 0.006813f, -0.001393f, 0.000323f, 0.003148f, -0.003515f, 0.002106f, -0.002584f, -0.004876f, -0.003358f, 0.006619f, -0.008552f, -0.004436f, -0.003740f, 0.008752f, 0.006041f, 0.005187f, 0.000609f, 0.002847f, -0.000365f, 0.005618f, 0.002026f, 0.002045f, -0.000029f, -0.000298f, 0.009601f, 0.007475f, -0.000026f, -0.006384f, 0.002025f, 0.001136f, 0.002985f, -0.009257f, -0.000343f, 0.006076f, 0.000484f, -0.001104f, 0.000682f, 0.002120f, -0.002249f, -0.001481f, -0.002771f, -0.003387f, -0.004831f, 0.002952f, 0.003481f, -0.006996f, -0.001474f, -0.000744f, 0.001964f, 0.002469f, -0.004323f, 0.002777f, 0.001921f, -0.001248f, -0.002079f, -0.009305f, 0.029184f, 0.011364f, 0.006989f, 0.002440f, -0.006354f, 0.000201f, 0.005479f, 0.010698f, -0.000002f, 0.001142f, 0.000469f, -0.003762f, 0.000878f, 0.003699f, -0.000880f, 0.003612f, 0.005251f, 0.007310f, + 0.002866f, 0.003057f, 0.003633f, 0.003463f, -0.006796f, 0.006811f, 0.012452f, -0.005902f, 0.003412f, 0.002063f, 0.003346f, 0.000727f, 0.007294f, -0.004797f, -0.001921f, -0.004315f, 0.004128f, 0.012580f, -0.002298f, 0.006132f, -0.000359f, -0.002777f, -0.010509f, 0.003906f, -0.005538f, 0.004796f, 0.002218f, 0.005347f, -0.000784f, -0.003168f, 0.001488f, -0.002181f, 0.006981f, 0.000939f, -0.005866f, 0.007282f, -0.001775f, 0.005677f, 0.004205f, -0.000242f, 0.004037f, 0.008180f, -0.002469f, -0.002908f, -0.002476f, 0.004034f, -0.003485f, -0.004488f, 0.004996f, -0.000025f, 0.003348f, -0.005576f, 0.008034f, 0.000323f, -0.002241f, -0.001183f, -0.000705f, 0.022565f, 0.018075f, 0.008747f, 0.001518f, -0.003597f, 0.010561f, -0.006289f, -0.006298f, -0.001732f, -0.011160f, 0.006627f, 0.000665f, -0.004958f, 0.002892f, 0.006353f, 0.011541f, -0.005514f, 0.006739f, 0.014479f, -0.004011f, -0.000160f, 0.003569f, 0.007393f, -0.001741f, 0.008074f, 0.006095f, 0.008168f, 0.002129f, 0.006167f, -0.006383f, 0.010969f, -0.001167f, 0.010569f, 0.005560f, -0.001495f, 0.001521f, -0.002104f, -0.000085f, -0.004238f, + -0.001693f, -0.005169f, -0.003421f, 0.003460f, -0.000870f, -0.010855f, -0.002221f, 0.000769f, -0.000161f, -0.006225f, -0.005941f, -0.003445f, -0.002511f, 0.007847f, -0.003195f, -0.009432f, -0.011984f, -0.013700f, -0.004516f, -0.006285f, -0.000430f, 0.001593f, 0.006442f, -0.009174f, -0.003951f, 0.000499f, -0.000917f, -0.004455f, 0.000889f, -0.009761f, -0.000993f, -0.011469f, 0.005567f, -0.006664f, -0.003126f, 0.006515f, -0.001387f, 0.011819f, -0.025916f, -0.007288f, -0.013004f, -0.002727f, 0.000248f, 0.014146f, -0.006754f, -0.023730f, -0.008009f, -0.000870f, 0.009189f, 0.002511f, -0.008448f, -0.020646f, -0.004985f, 0.005303f, -0.002027f, 0.011188f, 0.000708f, 0.004739f, -0.000877f, -0.009333f, -0.009578f, 0.005631f, 0.007493f, 0.000545f, 0.002608f, -0.000667f, 0.004684f, 0.000712f, -0.011839f, 0.000322f, 0.017306f, 0.001964f, -0.003970f, -0.001912f, -0.004262f, 0.000695f, -0.003640f, -0.007765f, 0.011675f, -0.003920f, -0.004486f, 0.009970f, -0.005154f, -0.009597f, 0.000683f, -0.000360f, 0.000559f, -0.013703f, 0.011037f, -0.004576f, -0.000006f, 0.009451f, 0.009289f, -0.014746f, -0.003371f, 0.002188f, + 0.003675f, -0.001868f, 0.007995f, 0.001483f, 0.004053f, 0.004669f, 0.000962f, 0.003502f, 0.006640f, 0.000504f, 0.000098f, 0.005031f, -0.016241f, -0.004839f, 0.000269f, 0.006740f, 0.004273f, -0.003801f, -0.001079f, -0.051663f, -0.020985f, -0.010081f, -0.015220f, 0.005071f, -0.005560f, -0.004575f, -0.001079f, 0.006982f, -0.006441f, -0.006727f, -0.010832f, 0.002459f, 0.008795f, 0.002446f, -0.007607f, -0.008450f, 0.002103f, 0.008107f, 0.006634f, -0.009674f, -0.015321f, 0.001449f, -0.014376f, 0.007682f, -0.000687f, 0.005451f, -0.001002f, 0.005261f, -0.006064f, -0.001983f, 0.013780f, -0.017175f, 0.007361f, 0.004357f, 0.001257f, -0.005921f, 0.003138f, 0.008868f, 0.001547f, -0.010384f, 0.001373f, -0.006502f, 0.004402f, -0.014284f, -0.001384f, -0.012926f, 0.009264f, -0.000850f, -0.003511f, -0.003520f, 0.004639f, -0.021875f, 0.009206f, -0.006169f, -0.014392f, 0.005536f, 0.009686f, 0.012346f, 0.006046f, 0.002770f, -0.002046f, 0.001609f, -0.002351f, 0.008000f, -0.005798f, 0.002358f, 0.004778f, 0.015316f, 0.000939f, 0.000380f, -0.012504f, 0.006982f, -0.007112f, 0.001139f, -0.030096f, 0.014990f, + 0.022659f, 0.004996f, 0.001373f, 0.013368f, 0.003897f, 0.004459f, 0.006599f, 0.001505f, 0.006937f, 0.007949f, -0.006375f, -0.000530f, 0.000609f, -0.006687f, -0.004887f, 0.000499f, 0.003206f, -0.003679f, 0.023692f, 0.013399f, -0.003852f, 0.002358f, 0.007307f, 0.010270f, 0.010660f, -0.003925f, 0.007428f, 0.009689f, 0.000220f, 0.003332f, 0.002324f, 0.005851f, 0.003460f, 0.003007f, 0.004844f, 0.005620f, -0.010626f, -0.007254f, -0.016223f, 0.002546f, -0.005859f, -0.007169f, 0.008077f, -0.001476f, 0.005046f, -0.018950f, 0.021736f, -0.000656f, -0.010489f, -0.000962f, 0.017257f, 0.013547f, -0.002802f, 0.001502f, 0.008380f, -0.002885f, 0.003633f, -0.005225f, -0.013577f, 0.002839f, 0.001381f, -0.009649f, -0.004184f, -0.009393f, 0.002140f, 0.005530f, 0.002721f, -0.003553f, -0.009187f, -0.012622f, -0.016858f, -0.010171f, -0.004173f, 0.004040f, 0.054672f, 0.014397f, 0.004104f, -0.002120f, 0.032952f, 0.003754f, 0.015663f, 0.003106f, 0.010411f, 0.017009f, 0.006043f, -0.009662f, 0.010093f, 0.011625f, 0.001820f, -0.001031f, 0.002458f, 0.021389f, 0.001419f, -0.007566f, -0.013211f, -0.004058f, + -0.000512f, -0.015200f, 0.002378f, 0.004219f, 0.008443f, 0.003426f, 0.005892f, 0.016272f, -0.005360f, -0.002886f, 0.009927f, -0.001858f, -0.004725f, -0.001137f, -0.015049f, 0.009266f, 0.005959f, 0.000039f, 0.009180f, -0.005061f, -0.013297f, -0.028290f, -0.010629f, 0.010005f, 0.011002f, 0.000026f, 0.007564f, -0.008243f, -0.009070f, 0.022413f, -0.013699f, 0.009963f, -0.012166f, 0.002067f, -0.017521f, -0.018112f, 0.018609f, -0.007721f, -0.007639f, 0.026224f, 0.001235f, -0.003343f, -0.013318f, 0.009394f, 0.014456f, 0.000404f, -0.009250f, -0.016001f, -0.003518f, 0.011026f, -0.004797f, 0.003429f, 0.026986f, 0.010076f, 0.022232f, -0.013281f, 0.003836f, 0.013735f, -0.018332f, -0.005141f, -0.007627f, 0.002699f, -0.009637f, -0.004533f, 0.012882f, -0.003263f, -0.003323f, -0.000072f, 0.016319f, -0.005333f, -0.008659f, 0.019140f, 0.002209f, -0.011973f, 0.004696f, -0.001900f, 0.002179f, 0.007826f, -0.011190f, -0.001469f, -0.008590f, -0.013145f, 0.000984f, 0.001320f, 0.001949f, -0.012899f, -0.015178f, 0.006577f, -0.001981f, 0.006439f, -0.001311f, 0.008925f, 0.001603f, 0.000659f, -0.009952f, -0.007902f, + 0.001753f, 0.009958f, 0.003605f, -0.001534f, 0.025443f, 0.007300f, 0.003758f, 0.013000f, 0.003687f, 0.009975f, 0.008293f, 0.007047f, 0.002911f, 0.005701f, -0.004498f, -0.000848f, 0.001301f, -0.009850f, 0.002262f, -0.016600f, 0.004233f, -0.010502f, 0.008646f, -0.005264f, 0.004508f, -0.000852f, -0.009201f, 0.004449f, -0.002717f, 0.010924f, -0.008399f, 0.026519f, 0.020598f, 0.008804f, -0.033797f, -0.066964f, -0.002141f, -0.013918f, 0.012214f, -0.004027f, -0.017628f, -0.002370f, -0.014112f, -0.016971f, -0.013277f, 0.021134f, 0.012067f, -0.015025f, -0.007495f, 0.015984f, 0.010420f, 0.014224f, -0.009246f, 0.009035f, -0.008071f, -0.009558f, -0.001848f, -0.004432f, -0.027064f, 0.007212f, 0.017040f, 0.006460f, -0.015618f, -0.004260f, 0.004054f, 0.003857f, -0.013740f, -0.003721f, -0.020173f, 0.004315f, -0.008899f, -0.001336f, -0.006167f, 0.003704f, 0.024172f, -0.002839f, -0.002867f, 0.011076f, 0.018140f, -0.010474f, 0.006057f, 0.005942f, -0.012517f, 0.007171f, 0.008676f, -0.016924f, 0.004328f, 0.010316f, -0.000712f, -0.017825f, -0.009060f, -0.011662f, 0.017853f, 0.005679f, 0.017654f, -0.009658f, + -0.015593f, 0.003703f, 0.011418f, -0.004421f, -0.010119f, 0.007806f, 0.015480f, 0.011018f, -0.011413f, -0.008706f, 0.000661f, 0.022324f, -0.000748f, 0.012020f, 0.009266f, 0.006403f, -0.035033f, 0.001019f, -0.000195f, 0.020589f, 0.003576f, -0.006805f, 0.010380f, -0.004591f, 0.003841f, -0.017434f, -0.006662f, -0.010725f, -0.007747f, -0.022347f, -0.010140f, -0.013011f, 0.030701f, 0.019262f, 0.018151f, -0.021985f, -0.020940f, -0.008553f, 0.009469f, -0.000282f, -0.001750f, 0.001400f, 0.005029f, -0.000847f, 0.007741f, -0.012590f, -0.013011f, 0.000434f, -0.004897f, -0.015753f, -0.018185f, -0.012587f, -0.011306f, -0.006551f, -0.008369f, -0.020224f, 0.007661f, 0.025923f, -0.007434f, 0.012377f, 0.014369f, -0.011558f, 0.012104f, 0.009335f, 0.001251f, 0.023549f, -0.003302f, 0.019727f, 0.004941f, 0.002743f, -0.020628f, 0.007496f, 0.006544f, -0.004687f, 0.024156f, 0.021376f, 0.001426f, -0.007987f, -0.016225f, 0.007585f, -0.016190f, 0.005033f, -0.003579f, 0.015369f, -0.003658f, -0.024275f, -0.002329f, -0.010389f, -0.008378f, -0.019516f, 0.015032f, -0.031684f, 0.014813f, 0.009181f, 0.014103f, -0.015319f, + -0.024498f, 0.006395f, 0.008610f, 0.000292f, -0.020507f, 0.019543f, 0.006851f, -0.011944f, -0.017946f, 0.007544f, -0.007403f, 0.031881f, 0.039239f, 0.004661f, -0.005167f, -0.015277f, 0.022697f, -0.025731f, -0.007895f, 0.029534f, 0.008551f, -0.006934f, -0.015551f, -0.016212f, -0.007643f, -0.000459f, -0.019231f, 0.003551f, 0.022475f, -0.003739f, 0.009044f, -0.016771f, -0.013440f, -0.005886f, -0.010944f, 0.030261f, -0.010512f, 0.013036f, 0.012514f, 0.011683f, 0.004316f, 0.005227f, -0.020712f, -0.022751f, -0.019875f, -0.005658f, 0.016620f, 0.035037f, -0.013547f, -0.027056f, -0.005036f, -0.013018f, 0.007660f, 0.004573f, 0.021068f, -0.013288f, 0.000747f, -0.017280f, -0.002082f, 0.027831f, -0.002666f, -0.016777f, 0.021695f, 0.005695f, 0.004390f, 0.009738f, -0.022116f, 0.002356f, -0.006831f, 0.000868f, 0.011423f, 0.022700f, 0.050009f, -0.021790f, -0.016911f, -0.005293f, 0.010609f, -0.029293f, 0.011779f, -0.007979f, 0.014832f, -0.013204f, -0.005887f, 0.018011f, 0.013517f, 0.005013f, -0.009029f, -0.003408f, 0.024880f, 0.024281f, -0.004979f, 0.021186f, -0.006092f, 0.031201f, -0.014549f, -0.007809f, + 0.005714f, 0.032688f, 0.024059f, 0.007810f, -0.017483f, -0.001354f, -0.036332f, -0.005631f, 0.005806f, 0.016635f, 0.019649f, 0.034448f, 0.009188f, -0.000761f, -0.001537f, -0.013402f, -0.022580f, -0.001761f, -0.019553f, 0.014126f, 0.004645f, 0.021916f, 0.012460f, -0.007653f, 0.022061f, -0.026134f, 0.011996f, -0.005915f, 0.002147f, -0.004629f, 0.028109f, 0.016206f, 0.008298f, 0.004882f, -0.050099f, -0.008089f, 0.030383f, 0.015089f, 0.002372f, -0.000928f, 0.002122f, 0.024209f, 0.010961f, -0.038034f, -0.011585f, -0.014464f, 0.004655f, 0.001295f, -0.036534f, 0.002364f, -0.033500f, -0.021552f, 0.000612f, 0.017502f, 0.035801f, -0.009518f, -0.013773f, 0.001356f, 0.014175f, 0.007130f, -0.021009f, -0.002055f, -0.016931f, -0.001691f, -0.023247f, -0.003375f, -0.019920f, 0.000162f, 0.021645f, 0.000843f, 0.047181f, -0.020446f, -0.008898f, -0.017535f, 0.019537f, 0.030205f, -0.024418f, -0.009264f, -0.038144f, 0.006307f, 0.000159f, 0.009570f, 0.009999f, -0.022651f, -0.012355f, 0.015846f, -0.005859f, -0.005867f, -0.020549f, 0.041258f, -0.005183f, -0.046523f, 0.013236f, -0.013156f, -0.012995f, 0.015074f, + 0.013198f, -0.014406f, -0.013958f, -0.005734f, -0.025717f, -0.017158f, 0.009252f, 0.004399f, 0.009637f, -0.009530f, -0.018418f, -0.023603f, -0.021498f, 0.016514f, -0.031813f, -0.001273f, 0.008436f, -0.011887f, 0.001515f, -0.002216f, -0.003680f, -0.027855f, -0.003978f, -0.012741f, 0.017241f, 0.018479f, -0.002875f, 0.029896f, -0.000636f, -0.003208f, -0.008396f, -0.005216f, 0.049138f, 0.000425f, -0.023156f, 0.057807f, -0.015207f, -0.004650f, 0.004638f, 0.024841f, 0.017102f, -0.036920f, -0.015708f, -0.035077f, 0.007247f, 0.002347f, -0.011498f, -0.038680f, 0.001054f, -0.017920f, 0.007513f, 0.008840f, 0.019073f, 0.001235f, 0.013698f, 0.067658f, 0.014012f, 0.017030f, -0.011261f, -0.003570f, 0.028754f, -0.002415f, 0.001597f, 0.007946f, 0.001181f, -0.004209f, -0.016163f, 0.027267f, -0.029632f, 0.012081f, -0.043691f, -0.012995f, -0.020913f, -0.026431f, -0.023626f, -0.000037f, -0.047751f, -0.015956f, 0.005475f, 0.026777f, 0.014437f, -0.046077f, 0.025069f, 0.017274f, 0.017950f, -0.029335f, 0.020367f, -0.013849f, -0.034662f, -0.011568f, -0.034544f, 0.016092f, 0.038585f, 0.009859f, -0.005150f, -0.026257f, + 0.019679f, -0.027977f, 0.040152f, -0.007985f, -0.006040f, -0.025351f, -0.029052f, 0.003795f, 0.030768f, 0.010508f, -0.024194f, -0.009133f, 0.003638f, -0.004131f, 0.009367f, 0.031344f, 0.005972f, -0.020292f, 0.009193f, -0.005999f, 0.009451f, 0.034320f, -0.048551f, -0.022229f, -0.039051f, 0.021971f, -0.007877f, 0.003592f, -0.012916f, 0.027868f, -0.027737f, -0.028235f, -0.012773f, -0.006843f, -0.020019f, -0.034939f, -0.016775f, 0.006083f, 0.022602f, -0.032253f, 0.020869f, -0.012452f, 0.002387f, 0.040707f, 0.031414f, -0.001086f, 0.016478f, 0.007366f, -0.006725f, -0.005639f, -0.056142f, 0.007053f, -0.005865f, 0.004748f, 0.010707f, -0.005227f, 0.001322f, 0.055654f, -0.050979f, 0.003809f, 0.061034f, 0.006943f, 0.016688f, -0.025159f, -0.006796f, 0.030790f, 0.055989f, 0.001508f, 0.049619f, -0.020906f, 0.044857f, -0.017450f, 0.033129f, 0.032116f, -0.008656f, 0.064072f, -0.011271f, -0.004936f, -0.019907f, -0.032225f, -0.031939f, -0.017215f, -0.019353f, -0.049041f, -0.021905f, -0.013415f, 0.016339f, 0.012303f, 0.001095f, -0.029659f, -0.025964f, -0.020336f, -0.073620f, -0.050550f, -0.037454f, -0.002553f, + 0.048371f, -0.031277f, -0.005037f, -0.023809f, -0.036913f, -0.028682f, -0.037683f, -0.037221f, -0.016075f, -0.044121f, -0.050152f, -0.041696f, 0.011240f, -0.028436f, -0.016334f, -0.035719f, 0.034260f, 0.058676f, 0.004125f, -0.005498f, -0.021140f, 0.005861f, -0.004446f, -0.000372f, -0.005478f, 0.019279f, 0.002964f, 0.040399f, -0.035075f, 0.004152f, -0.029971f, 0.060809f, 0.013766f, -0.033837f, 0.026613f, -0.023926f, 0.021442f, -0.032523f, 0.018832f, 0.004028f, -0.021079f, 0.019215f, -0.032835f, -0.009534f, 0.009125f, 0.033701f, 0.013223f, 0.058944f, -0.014065f, -0.036292f, 0.002358f, -0.009664f, 0.003174f, -0.023803f, -0.022767f, -0.038981f, 0.003566f, -0.041600f, -0.010157f, -0.006021f, -0.038997f, 0.025202f, 0.029240f, -0.018184f, -0.004583f, -0.055000f, 0.059581f, 0.074837f, 0.008011f, -0.033331f, 0.003438f, -0.057439f, 0.106103f, 0.041795f, -0.010039f, -0.031174f, -0.010273f, -0.033197f, 0.035669f, 0.094249f, 0.000743f, -0.060649f, -0.029570f, 0.034698f, 0.011179f, -0.011204f, 0.043047f, -0.007508f, 0.004228f, 0.026503f, -0.004038f, -0.024575f, -0.009724f, 0.021982f, -0.028237f, -0.023399f, + -0.011321f, 0.009708f, -0.000098f, -0.003683f, -0.012714f, 0.020700f, 0.000595f, 0.030163f, 0.021609f, -0.029216f, 0.013313f, 0.036821f, 0.018598f, -0.026976f, 0.009235f, 0.006812f, 0.022696f, 0.001434f, 0.006893f, 0.007321f, 0.008423f, 0.051417f, 0.046362f, 0.030436f, 0.063388f, -0.031338f, 0.031887f, -0.037939f, 0.022999f, 0.000154f, 0.020869f, 0.028740f, 0.007458f, 0.007783f, 0.032624f, 0.016276f, -0.010760f, 0.021978f, -0.001492f, 0.029242f, -0.032535f, -0.017843f, 0.001154f, 0.069872f, -0.049974f, 0.003768f, -0.062305f, -0.008924f, 0.006120f, 0.021020f, -0.029906f, -0.011239f, -0.023485f, 0.089321f, 0.007961f, 0.006071f, -0.019105f, -0.012960f, 0.015607f, 0.013439f, 0.009022f, 0.034458f, 0.015352f, -0.014742f, 0.019293f, 0.036940f, -0.000483f, 0.040584f, -0.002867f, 0.019810f, -0.040130f, 0.075007f, -0.009912f, -0.008480f, 0.013850f, -0.056249f, -0.013180f, -0.026799f, 0.041377f, 0.022472f, 0.024155f, -0.025809f, 0.011288f, 0.010283f, -0.033465f, 0.010600f, 0.031993f, 0.026564f, 0.010773f, -0.007685f, 0.005674f, -0.015823f, 0.059036f, 0.009847f, 0.027996f, 0.022314f, + 0.033102f, -0.049139f, -0.001487f, -0.013651f, 0.012140f, -0.017061f, -0.019332f, 0.043782f, -0.036946f, 0.032719f, -0.022155f, 0.034478f, -0.003871f, -0.031606f, 0.000428f, -0.048490f, 0.035445f, 0.031794f, 0.039589f, -0.102573f, 0.034948f, 0.021902f, -0.027371f, -0.018654f, -0.024572f, 0.057385f, -0.071381f, 0.049740f, 0.116126f, 0.005121f, -0.043854f, -0.018458f, 0.041654f, 0.062157f, 0.024324f, -0.019443f, 0.010700f, -0.046577f, 0.002940f, -0.026121f, 0.041670f, 0.008318f, 0.007965f, -0.021293f, 0.015863f, -0.002312f, -0.023368f, 0.013808f, -0.023914f, -0.006230f, -0.021006f, -0.036158f, -0.028537f, 0.035429f, 0.020409f, 0.024538f, 0.016664f, -0.044734f, -0.019256f, 0.015017f, -0.019535f, 0.034463f, 0.015824f, 0.006995f, 0.012790f, 0.054921f, -0.019790f, -0.045707f, 0.092061f, -0.037093f, -0.059193f, 0.065369f, -0.034062f, -0.011769f, 0.008386f, 0.036226f, -0.041186f, -0.005888f, -0.001399f, -0.018227f, 0.121130f, 0.004502f, -0.025832f, -0.002286f, -0.004112f, 0.037221f, -0.067147f, -0.041126f, -0.031770f, -0.018706f, -0.007594f, -0.047094f, -0.005644f, 0.001647f, 0.013951f, 0.086552f, + 0.074993f, -0.024439f, 0.056554f, -0.054087f, -0.060521f, 0.040514f, 0.044458f, -0.009281f, 0.007878f, 0.015114f, 0.028593f, 0.052532f, -0.005555f, 0.014015f, 0.052179f, -0.033892f, 0.004943f, -0.036702f, 0.039760f, 0.000237f, 0.024538f, -0.025036f, -0.037514f, 0.035200f, -0.037077f, 0.011561f, -0.007998f, 0.033187f, 0.000924f, 0.007299f, -0.019224f, 0.006402f, -0.013279f, -0.049057f, -0.037820f, 0.016612f, -0.001990f, -0.001123f, 0.009171f, 0.036827f, -0.015205f, -0.010914f, -0.029476f, 0.013607f, 0.012662f, -0.003384f, -0.004603f, -0.081900f, 0.005336f, 0.023727f, -0.027806f, 0.021159f, -0.043900f, -0.007839f, 0.004874f, 0.029404f, 0.038067f, 0.005324f, -0.015152f, 0.012560f, 0.067222f, 0.057981f, 0.058762f, -0.001174f, -0.002718f, 0.013625f, 0.009381f, -0.024163f, 0.019560f, 0.073385f, -0.047930f, -0.014273f, -0.011597f, 0.002763f, 0.006079f, 0.012271f, -0.034206f, -0.054207f, -0.017751f, 0.000619f, 0.120484f, 0.063880f, 0.044134f, 0.000326f, -0.005015f, -0.022551f, 0.056279f, 0.016262f, 0.038766f, -0.000127f, -0.008625f, -0.006157f, -0.014646f, -0.077428f, 0.042606f, 0.041002f, + -0.004140f, 0.066121f, 0.026830f, -0.041734f, -0.045119f, 0.020744f, -0.019696f, -0.036993f, 0.000554f, 0.005888f, 0.015508f, -0.007678f, 0.020843f, -0.003619f, 0.019636f, 0.029633f, -0.027402f, -0.100768f, 0.053290f, -0.013422f, -0.034172f, 0.025571f, 0.034546f, 0.003459f, -0.071033f, -0.006851f, -0.004736f, -0.068857f, -0.046319f, 0.039731f, -0.012763f, -0.026570f, -0.026385f, 0.018450f, -0.071147f, -0.046700f, 0.091550f, -0.005499f, -0.056184f, 0.023776f, 0.048851f, 0.024362f, -0.078783f, 0.112504f, 0.042484f, -0.064999f, 0.035700f, 0.052463f, 0.005990f, -0.042979f, 0.045673f, 0.056170f, 0.030402f, -0.039183f, 0.038011f, 0.077711f, 0.002094f, 0.078607f, 0.091201f, -0.046323f, -0.031570f, -0.031017f, 0.086171f, 0.059918f, -0.039902f, 0.025589f, -0.024614f, -0.051581f, 0.046999f, 0.114366f, 0.015294f, -0.028239f, -0.026500f, 0.067088f, 0.066522f, 0.101915f, 0.043778f, -0.044887f, -0.013893f, -0.037920f, 0.024100f, -0.019350f, 0.030517f, 0.017043f, -0.045585f, 0.022518f, -0.046449f, -0.018059f, 0.002547f, -0.019547f, 0.004939f, 0.023685f, 0.022084f, -0.000238f, -0.036409f, 0.007114f, + 0.033468f, -0.013375f, 0.007049f, -0.015602f, -0.042806f, 0.044265f, -0.024812f, 0.030184f, -0.044031f, -0.029035f, -0.003902f, -0.039827f, -0.008638f, 0.037405f, -0.035137f, 0.049803f, 0.006227f, 0.040342f, 0.019494f, -0.022337f, -0.053050f, 0.044538f, 0.031712f, 0.017672f, 0.015079f, 0.045957f, -0.031795f, -0.019384f, -0.016867f, 0.013321f, 0.021418f, -0.006175f, -0.040574f, -0.003537f, -0.002248f, -0.046285f, -0.013723f, 0.005539f, 0.016300f, 0.033787f, 0.000148f, -0.032948f, 0.046461f, -0.009538f, -0.002557f, 0.049069f, 0.028885f, -0.042553f, 0.018443f, -0.026175f, 0.021098f, -0.013362f, 0.024303f, -0.034173f, 0.021031f, -0.075016f, -0.092413f, -0.046703f, 0.266623f, 0.237822f, 0.140880f, 0.314956f, -0.068830f, -0.233731f, -0.084876f, -0.442154f, -0.234789f, -0.003082f, -0.117092f, 0.160150f, 0.288544f, 0.042231f, 0.168524f, 0.334592f, 0.053472f, 0.117584f, 0.008590f, -0.341016f, -0.288531f, -0.251273f, -0.280796f, -0.167428f, 0.135285f, 0.059580f, 0.135369f, 0.361166f, 0.214075f, 0.057199f, 0.264149f, 0.122917f, -0.166897f, 0.089794f, -0.122778f, -0.312664f, -0.042091f, -0.193086f, + -0.359810f, -0.160130f, -0.040691f, -0.186281f, 0.204531f, 0.224669f, 0.102112f, 0.357456f, 0.399260f, 0.153315f, 0.195051f, 0.188331f, -0.214663f, -0.136868f, -0.273488f, -0.419678f, -0.391112f, -0.247764f, -0.254085f, -0.071941f, 0.155039f, 0.207818f, 0.272182f, 0.391926f, 0.345629f, 0.204871f, 0.142308f, 0.025213f, -0.173195f, -0.240256f, -0.185494f, -0.229158f, -0.293171f, -0.096715f, -0.122116f, -0.043571f, 0.131070f, 0.064402f, 0.001700f} + }, + { + {-0.002352f, 0.006376f, -0.007012f, -0.001470f, 0.000350f, 0.000536f, 0.002805f, 0.011712f, 0.000868f, -0.002777f, -0.004222f, 0.010547f, -0.001084f, -0.005301f, 0.001989f, -0.003695f, 0.002727f, 0.002137f, 0.013974f, 0.003621f, -0.007597f, 0.003237f, -0.000408f, 0.001298f, -0.006753f, 0.004314f, 0.000599f, -0.004995f, -0.002956f, -0.000535f, 0.000580f, -0.000611f, 0.004414f, -0.001206f, -0.004205f, -0.001043f, -0.002893f, -0.000549f, -0.005136f, 0.001887f, 0.005415f, -0.000818f, -0.007461f, 0.004586f, -0.004569f, -0.002780f, 0.000223f, 0.002147f, -0.003831f, -0.001110f, 0.006943f, -0.003650f, 0.001985f, -0.004589f, 0.003359f, -0.001571f, 0.002341f, 0.003089f, 0.001925f, -0.001803f, -0.001008f, 0.003578f, -0.005608f, -0.010339f, 0.002207f, -0.001318f, -0.003266f, 0.000931f, -0.000567f, -0.000645f, 0.000699f, -0.003763f, 0.004110f, -0.005348f, 0.004339f, 0.001872f, -0.000993f, 0.012047f, -0.001261f, 0.003683f, -0.002217f, 0.016079f, -0.006318f, -0.001516f, -0.000582f, 0.002031f, -0.002844f, 0.007394f, -0.001276f, -0.004906f, -0.000880f, 0.010101f, 0.000749f, -0.005029f, 0.004720f, 0.003532f, + 0.006630f, 0.002773f, -0.005019f, -0.003265f, 0.011255f, 0.001634f, -0.002844f, -0.002146f, -0.002252f, 0.002286f, 0.002434f, -0.001366f, -0.014249f, -0.003493f, 0.000748f, 0.009963f, 0.003594f, -0.001128f, 0.000033f, -0.005595f, 0.007945f, -0.007923f, -0.010585f, 0.001496f, 0.000208f, -0.003499f, -0.002343f, -0.002857f, 0.001657f, 0.001108f, 0.001086f, -0.003595f, 0.009485f, 0.000439f, 0.012675f, -0.001847f, -0.005755f, 0.002920f, -0.000443f, 0.001984f, 0.003149f, 0.006533f, 0.004576f, -0.001372f, -0.003114f, -0.002649f, 0.008472f, -0.007938f, 0.000743f, 0.000607f, -0.000953f, -0.006624f, 0.006847f, -0.002982f, 0.001587f, 0.006260f, -0.001610f, 0.002031f, -0.004619f, 0.003998f, 0.002614f, -0.005740f, -0.002960f, -0.000593f, 0.000626f, -0.000457f, -0.000726f, -0.003002f, 0.005153f, 0.000797f, -0.002095f, -0.003146f, -0.000071f, 0.010276f, -0.001393f, -0.005118f, 0.006769f, -0.002815f, -0.006253f, -0.000853f, 0.005415f, 0.003787f, -0.003413f, 0.000718f, -0.004284f, 0.002281f, 0.002487f, -0.002310f, 0.005378f, -0.001718f, -0.009660f, 0.001532f, 0.005016f, 0.004405f, 0.000653f, -0.001002f, + -0.007026f, -0.002661f, -0.000948f, -0.003382f, 0.006296f, 0.008567f, 0.004096f, -0.012465f, 0.004050f, 0.013920f, 0.005839f, -0.001067f, -0.000172f, 0.006185f, -0.003342f, 0.001742f, -0.006124f, -0.005877f, 0.005404f, 0.005786f, 0.002874f, 0.001184f, 0.000947f, 0.000732f, 0.002771f, -0.000001f, -0.000772f, -0.002764f, 0.001258f, -0.004916f, -0.001080f, -0.002584f, -0.008996f, -0.005199f, 0.001398f, 0.002185f, 0.008158f, -0.000437f, 0.003290f, -0.005191f, -0.008105f, -0.004823f, 0.004215f, -0.003458f, -0.003818f, -0.003759f, -0.005373f, 0.005254f, 0.000615f, 0.003910f, -0.001737f, 0.001289f, -0.010911f, -0.006759f, -0.005020f, 0.007148f, 0.001255f, 0.001756f, 0.003735f, -0.003617f, -0.002001f, -0.000642f, 0.001212f, -0.007978f, -0.001617f, -0.005304f, -0.006055f, 0.000585f, -0.005333f, 0.003819f, 0.003372f, 0.014554f, -0.003545f, 0.007528f, -0.004814f, 0.003263f, -0.003280f, 0.001009f, 0.012570f, 0.002271f, 0.005495f, -0.005659f, 0.003904f, -0.005061f, -0.002424f, -0.000551f, 0.008078f, -0.003647f, -0.001893f, -0.006795f, -0.003583f, -0.008072f, -0.000920f, 0.008173f, 0.002119f, 0.000864f, + 0.001635f, 0.007511f, -0.006830f, -0.012248f, 0.003252f, 0.004198f, -0.007762f, -0.000360f, 0.001578f, -0.001811f, 0.003878f, 0.009957f, 0.002772f, -0.002394f, 0.001211f, -0.003567f, 0.004921f, -0.013101f, 0.002449f, -0.004798f, -0.009087f, -0.007134f, 0.004145f, -0.002216f, -0.000115f, 0.008994f, 0.003418f, -0.001639f, 0.001133f, 0.007593f, -0.003418f, 0.005515f, -0.002345f, 0.001405f, -0.008084f, -0.001830f, 0.005998f, -0.002266f, 0.007374f, 0.007573f, 0.002913f, 0.004637f, 0.010684f, -0.002792f, -0.014328f, 0.002960f, -0.006215f, 0.000086f, -0.017623f, 0.000113f, 0.006035f, -0.003972f, 0.006967f, 0.000563f, -0.006186f, 0.001931f, -0.013201f, -0.009017f, -0.003021f, -0.003715f, -0.010922f, 0.005254f, 0.006449f, -0.000056f, 0.006011f, 0.000013f, 0.001798f, -0.004065f, 0.005452f, 0.003533f, -0.001881f, 0.011873f, -0.002126f, 0.009713f, 0.008907f, -0.000999f, -0.001264f, -0.000489f, 0.002925f, 0.003628f, 0.001423f, 0.004101f, 0.001604f, 0.000995f, 0.013644f, 0.004590f, -0.006055f, -0.003400f, -0.000303f, -0.003994f, 0.001579f, -0.003152f, 0.012670f, -0.024129f, -0.000161f, 0.000197f, + 0.006023f, 0.010981f, 0.003532f, -0.005108f, -0.009131f, -0.001129f, 0.011379f, -0.001896f, -0.002417f, -0.008277f, -0.000402f, -0.003251f, 0.008388f, 0.010538f, -0.017705f, 0.011775f, 0.007115f, -0.006283f, -0.001601f, -0.008814f, -0.000117f, -0.002387f, 0.000048f, 0.006417f, 0.011484f, -0.003961f, 0.002533f, -0.002622f, -0.004141f, 0.004768f, 0.007887f, 0.005881f, -0.005197f, -0.007810f, 0.005638f, 0.004513f, -0.003123f, -0.000984f, 0.000881f, -0.010138f, 0.003758f, 0.003808f, -0.004400f, -0.006542f, 0.002646f, -0.004794f, 0.009395f, 0.004853f, -0.016793f, 0.008328f, -0.007243f, -0.017629f, -0.005416f, -0.000572f, 0.003613f, -0.006680f, -0.000412f, 0.004979f, -0.008163f, -0.006998f, -0.008378f, -0.001466f, 0.002098f, 0.018649f, 0.002788f, 0.004661f, -0.003655f, -0.007587f, 0.012071f, -0.001804f, -0.013639f, 0.002937f, -0.013546f, 0.004375f, 0.015161f, 0.004090f, 0.003282f, 0.006666f, 0.009550f, -0.002085f, 0.023347f, -0.003361f, 0.016711f, -0.019658f, 0.006797f, 0.011568f, -0.004153f, 0.001669f, -0.005526f, -0.000455f, 0.009027f, 0.016507f, -0.004617f, -0.008058f, -0.002365f, 0.007763f, + 0.001669f, 0.016821f, 0.007942f, -0.001664f, 0.002450f, 0.000031f, -0.007753f, 0.001722f, -0.001684f, -0.002235f, 0.007360f, 0.009789f, -0.015062f, 0.017693f, -0.013231f, -0.006996f, 0.003047f, -0.005127f, 0.008880f, 0.000510f, -0.004973f, 0.012650f, 0.017389f, -0.012557f, -0.002236f, -0.000899f, 0.005451f, -0.011813f, -0.020009f, -0.008954f, -0.006050f, 0.006378f, -0.013844f, -0.007547f, -0.001524f, 0.014995f, 0.009184f, -0.009462f, 0.007296f, 0.004493f, -0.005384f, -0.007530f, -0.001216f, -0.004256f, -0.005814f, 0.001549f, -0.003848f, 0.011897f, -0.008112f, -0.000410f, 0.009174f, -0.005669f, 0.009823f, 0.013874f, 0.002684f, 0.003106f, -0.001364f, 0.008523f, 0.007643f, 0.009354f, -0.008976f, -0.012787f, -0.006294f, 0.008088f, 0.000813f, 0.034605f, -0.002231f, -0.001204f, -0.008006f, -0.016137f, -0.022777f, -0.005458f, 0.008096f, 0.011968f, -0.007231f, -0.015183f, 0.002369f, -0.000173f, 0.015350f, -0.005284f, -0.005654f, 0.018112f, -0.009565f, 0.000922f, -0.013719f, 0.008825f, -0.002368f, -0.000182f, -0.002668f, -0.021852f, -0.013064f, 0.000920f, 0.012498f, 0.007802f, 0.001493f, -0.022593f, + 0.015399f, -0.009235f, -0.008696f, -0.009831f, -0.012250f, -0.002157f, 0.012741f, -0.010057f, -0.010346f, 0.007403f, -0.002972f, 0.004229f, 0.023027f, -0.009843f, 0.001122f, 0.001085f, 0.010175f, -0.006627f, -0.005392f, -0.003048f, 0.014952f, -0.003113f, -0.006771f, -0.001164f, 0.011884f, 0.014667f, -0.013493f, -0.015939f, -0.004656f, -0.001913f, -0.004489f, 0.004210f, -0.010332f, -0.002794f, -0.009079f, -0.015338f, 0.003787f, -0.011006f, 0.009272f, 0.012217f, -0.009082f, -0.010108f, -0.009288f, 0.005234f, -0.001295f, 0.017540f, 0.029414f, -0.016301f, 0.000700f, -0.000252f, -0.002489f, 0.003233f, 0.008211f, -0.024018f, 0.021566f, -0.016776f, -0.008970f, 0.022623f, -0.005563f, -0.010078f, 0.006881f, 0.008699f, 0.000029f, -0.000701f, -0.017563f, 0.011217f, -0.002935f, 0.004276f, -0.011824f, 0.014688f, -0.001834f, -0.022947f, -0.025722f, 0.009047f, -0.005210f, -0.012329f, 0.005751f, -0.000386f, 0.038308f, 0.007261f, -0.007832f, -0.010847f, -0.023732f, -0.007357f, 0.003656f, -0.004760f, 0.017078f, -0.002921f, -0.027705f, -0.001663f, 0.017379f, -0.007056f, 0.001289f, 0.016952f, 0.009501f, -0.007899f, + -0.003065f, 0.014089f, 0.015655f, -0.006530f, 0.001602f, 0.003902f, -0.010325f, 0.005338f, -0.006198f, 0.000679f, -0.000284f, -0.001850f, -0.008371f, -0.013885f, -0.022723f, -0.011357f, 0.008576f, -0.019667f, 0.007273f, -0.021255f, 0.000533f, 0.008157f, -0.003787f, -0.015826f, -0.007891f, -0.002980f, 0.014152f, 0.011789f, -0.008898f, -0.008594f, 0.015116f, 0.006742f, -0.009213f, -0.009315f, -0.007798f, -0.000705f, 0.014616f, -0.002213f, 0.001075f, -0.000515f, -0.000456f, 0.019455f, 0.009218f, 0.013146f, -0.001162f, -0.000603f, 0.006346f, -0.009562f, -0.016910f, 0.013950f, 0.021667f, -0.014477f, 0.018602f, -0.005180f, -0.002131f, -0.008098f, 0.009495f, 0.000946f, -0.010743f, 0.006775f, 0.017627f, 0.014290f, 0.006271f, -0.013021f, -0.005632f, -0.026725f, 0.004376f, 0.014465f, -0.008802f, -0.001817f, -0.010788f, 0.003163f, -0.006412f, 0.010867f, -0.006673f, 0.003859f, 0.012614f, 0.007503f, 0.023770f, 0.012706f, 0.008207f, 0.015449f, -0.012370f, 0.023008f, 0.007473f, 0.014087f, -0.003907f, -0.015389f, -0.023245f, -0.004394f, -0.002795f, -0.006219f, -0.003840f, 0.008789f, 0.011514f, -0.024163f, + 0.017812f, 0.005683f, -0.003328f, 0.025440f, 0.020247f, -0.033264f, -0.021761f, 0.020243f, 0.035747f, -0.003783f, 0.005422f, -0.003557f, -0.004335f, -0.004116f, -0.001347f, 0.008402f, 0.005457f, 0.020856f, 0.005372f, 0.019895f, 0.005866f, 0.008246f, -0.002758f, -0.012360f, 0.005000f, 0.000831f, -0.009493f, 0.014920f, 0.001588f, 0.005451f, 0.003624f, -0.004161f, -0.014673f, 0.000950f, -0.016657f, -0.006589f, -0.019283f, -0.013872f, -0.007888f, 0.015001f, 0.002145f, 0.006773f, 0.019543f, -0.009752f, -0.001840f, 0.001028f, 0.006874f, 0.000776f, 0.000260f, -0.006971f, 0.014361f, 0.030652f, 0.015231f, -0.027217f, -0.018511f, -0.020660f, 0.021963f, -0.005187f, -0.020832f, 0.010078f, -0.011774f, -0.003341f, -0.003579f, -0.003676f, -0.001751f, -0.001737f, 0.019395f, 0.029520f, 0.012221f, 0.024726f, 0.018057f, 0.005489f, 0.004321f, 0.002539f, -0.006698f, -0.013918f, 0.004335f, 0.031446f, 0.006759f, 0.010688f, -0.009618f, 0.007670f, -0.015103f, -0.028423f, 0.001338f, 0.014354f, 0.005164f, 0.011442f, 0.017544f, 0.018006f, 0.001841f, -0.020671f, -0.016405f, -0.027203f, -0.040666f, -0.001137f, + -0.004207f, 0.017937f, 0.014417f, -0.015907f, -0.007858f, 0.010428f, 0.022499f, -0.027406f, -0.016667f, -0.005457f, -0.014012f, -0.010326f, -0.004695f, 0.008237f, 0.017701f, 0.000649f, -0.009346f, -0.012619f, 0.017897f, -0.013589f, -0.004824f, -0.000351f, 0.024849f, -0.001564f, 0.002878f, -0.037396f, -0.001917f, 0.009440f, 0.020239f, 0.025444f, 0.006342f, -0.023770f, 0.012365f, 0.001026f, 0.012315f, 0.016459f, 0.003608f, 0.008728f, 0.019106f, 0.032660f, -0.020145f, -0.007229f, -0.000907f, 0.011028f, 0.034705f, 0.015764f, 0.012222f, 0.020780f, -0.005557f, -0.008939f, -0.019334f, -0.022835f, -0.014248f, 0.002341f, 0.017076f, 0.041023f, 0.017513f, 0.008611f, 0.024358f, -0.028563f, -0.018929f, -0.003846f, 0.041697f, 0.015761f, 0.001995f, 0.021364f, -0.012740f, 0.032434f, -0.006744f, -0.029694f, -0.004572f, -0.029484f, 0.024572f, 0.013449f, 0.010343f, 0.008591f, 0.001711f, -0.009785f, 0.012570f, 0.016423f, 0.009762f, -0.006364f, 0.016437f, 0.019825f, 0.019467f, -0.002673f, -0.014392f, 0.027076f, 0.007866f, -0.002034f, -0.003162f, 0.002975f, -0.016426f, 0.017520f, -0.001836f, -0.005210f, + -0.021253f, -0.012669f, -0.012464f, 0.031820f, 0.013107f, 0.000160f, 0.005968f, 0.016403f, 0.025583f, 0.012012f, -0.028894f, 0.027899f, -0.001376f, 0.016125f, 0.008897f, 0.024557f, -0.003575f, -0.032212f, 0.012246f, -0.001461f, 0.015557f, -0.005687f, -0.010842f, 0.012026f, -0.002704f, 0.008187f, 0.043085f, -0.004863f, -0.015988f, 0.000144f, 0.008164f, -0.019677f, 0.035695f, -0.014650f, -0.016408f, 0.028419f, -0.012437f, 0.009406f, -0.009119f, 0.006171f, -0.024341f, -0.008368f, 0.016928f, 0.000317f, -0.023785f, 0.003876f, -0.006758f, 0.016238f, 0.007116f, 0.006790f, -0.041417f, 0.010269f, 0.003233f, 0.013849f, 0.030676f, -0.001710f, -0.001178f, -0.000888f, -0.011873f, 0.025408f, -0.024896f, 0.005553f, 0.019627f, 0.008425f, 0.018258f, -0.010671f, -0.010782f, -0.018729f, -0.025861f, 0.007669f, 0.006661f, 0.012866f, 0.032334f, -0.014945f, 0.028068f, 0.010301f, -0.022417f, -0.017874f, 0.001999f, -0.001129f, 0.003716f, -0.004136f, 0.015125f, 0.018072f, 0.022844f, 0.004552f, -0.049347f, 0.008637f, 0.017857f, 0.011053f, -0.031635f, 0.016263f, -0.014996f, 0.013410f, 0.004701f, 0.004821f, + -0.002046f, 0.008648f, -0.001501f, 0.039071f, 0.023831f, -0.024855f, 0.005201f, -0.060724f, 0.012077f, -0.021935f, -0.013947f, 0.009644f, 0.013996f, -0.034071f, -0.052353f, 0.028135f, 0.023874f, -0.059174f, 0.021066f, -0.020837f, -0.008216f, -0.009431f, 0.018532f, -0.013773f, -0.001653f, 0.004770f, 0.050372f, -0.005364f, 0.035847f, 0.011010f, 0.026517f, 0.003517f, 0.006218f, 0.010926f, 0.048414f, 0.052131f, -0.027997f, -0.022118f, 0.026837f, -0.034855f, -0.001972f, 0.011558f, -0.038459f, 0.022416f, 0.000869f, -0.001240f, -0.008717f, -0.009437f, 0.002262f, 0.005593f, 0.004660f, -0.020718f, -0.002029f, -0.003795f, -0.031691f, 0.016689f, 0.018194f, -0.031210f, -0.026845f, -0.010343f, 0.015312f, 0.018912f, 0.014002f, -0.000077f, -0.009224f, 0.017176f, 0.049766f, 0.029971f, -0.013032f, -0.005084f, -0.009951f, 0.037136f, -0.031201f, 0.014854f, 0.004470f, -0.042305f, -0.021444f, -0.000139f, 0.002700f, -0.035511f, 0.022281f, 0.018700f, 0.003836f, 0.009095f, 0.013966f, -0.033381f, -0.008457f, -0.027280f, -0.003182f, 0.020395f, 0.025796f, 0.021106f, -0.024760f, -0.008081f, -0.007459f, 0.003123f, + -0.028366f, -0.005046f, 0.024400f, 0.036959f, -0.002251f, 0.002089f, -0.022755f, 0.001606f, -0.000669f, -0.016846f, -0.027237f, -0.005625f, -0.012424f, -0.020998f, -0.014763f, 0.023055f, -0.019466f, 0.016635f, -0.005624f, -0.005046f, 0.033088f, -0.022978f, -0.012301f, 0.004696f, 0.013551f, 0.001620f, -0.042975f, -0.026924f, 0.005292f, -0.007280f, 0.007360f, -0.006359f, -0.013268f, 0.027321f, 0.006237f, -0.002674f, -0.011028f, -0.062581f, 0.037716f, -0.011553f, -0.000383f, -0.005583f, 0.002667f, 0.017584f, -0.010102f, -0.017264f, -0.028816f, -0.003003f, 0.013079f, -0.018203f, -0.022815f, 0.009253f, 0.036779f, -0.006447f, 0.034194f, 0.024821f, -0.024754f, 0.045584f, 0.030390f, -0.030403f, -0.046589f, -0.013605f, -0.020306f, 0.002337f, -0.014808f, -0.003763f, 0.022269f, -0.039121f, 0.018956f, -0.006393f, -0.022176f, -0.024463f, -0.024829f, -0.029496f, 0.005617f, 0.018138f, -0.016976f, 0.025657f, -0.039696f, 0.072099f, 0.101101f, -0.009636f, 0.012161f, 0.006628f, 0.024337f, 0.049223f, -0.047076f, 0.000675f, 0.007902f, 0.001037f, -0.017138f, 0.002635f, -0.021135f, 0.024747f, 0.060056f, -0.012641f, + 0.001009f, 0.003536f, 0.017967f, 0.001770f, 0.006755f, 0.023294f, -0.046831f, -0.003368f, 0.045230f, 0.046956f, -0.055165f, -0.011517f, 0.007450f, 0.007821f, 0.015843f, 0.041361f, 0.011115f, 0.083319f, 0.013326f, 0.025816f, 0.011699f, -0.012908f, -0.017854f, -0.000813f, -0.059012f, -0.083770f, -0.029111f, -0.027017f, -0.088214f, 0.013970f, -0.002859f, -0.048547f, -0.024677f, -0.081487f, -0.009844f, -0.010835f, 0.054839f, -0.054155f, 0.033082f, -0.036743f, -0.004141f, -0.023829f, -0.020565f, 0.022844f, 0.048880f, -0.037539f, -0.015847f, -0.002130f, -0.012876f, -0.002354f, 0.019628f, 0.042477f, 0.041335f, -0.027560f, 0.084739f, 0.062296f, 0.006119f, -0.025750f, -0.070512f, -0.036665f, 0.066729f, 0.109751f, -0.025442f, -0.006165f, 0.020084f, 0.048814f, 0.017107f, -0.029231f, 0.018431f, -0.025069f, 0.006818f, 0.015015f, -0.005465f, -0.033653f, 0.010380f, 0.034522f, -0.008342f, -0.050968f, 0.039786f, -0.012221f, 0.032534f, -0.012586f, -0.007573f, -0.013125f, -0.019996f, -0.001551f, 0.036041f, 0.019184f, 0.006230f, 0.028083f, -0.013411f, -0.012264f, 0.011289f, -0.016275f, 0.020249f, 0.010766f, + 0.030815f, 0.051461f, 0.046129f, -0.034022f, -0.061348f, -0.023487f, -0.003689f, 0.047105f, -0.018290f, 0.007452f, 0.019552f, -0.020273f, -0.028265f, -0.046622f, -0.046531f, 0.035399f, 0.039200f, -0.032678f, -0.112167f, 0.007773f, -0.007915f, -0.016997f, 0.008665f, -0.012944f, -0.045089f, -0.022940f, -0.010671f, -0.033415f, -0.013528f, 0.045332f, 0.017914f, 0.024728f, -0.010980f, -0.018970f, -0.010319f, 0.022294f, 0.004338f, -0.001062f, 0.022916f, 0.053293f, -0.025116f, -0.001833f, -0.021008f, 0.011921f, -0.029176f, -0.044082f, -0.011338f, -0.006190f, 0.007045f, -0.014115f, 0.033658f, -0.019442f, -0.072801f, -0.037284f, 0.023311f, -0.032231f, 0.038260f, 0.036857f, -0.017092f, -0.003957f, 0.003699f, -0.020331f, -0.001348f, 0.013064f, -0.004581f, 0.007788f, 0.048745f, 0.043362f, -0.012681f, -0.065047f, -0.052016f, 0.005291f, 0.033703f, -0.025190f, -0.013082f, -0.029843f, -0.041894f, 0.005339f, -0.013011f, -0.045544f, -0.053098f, -0.073709f, 0.028626f, 0.012176f, -0.000083f, 0.045352f, 0.056592f, -0.000371f, -0.045445f, -0.031112f, -0.037142f, -0.017824f, -0.014388f, 0.015531f, 0.020674f, -0.017758f, + -0.034086f, -0.036605f, 0.018794f, 0.021115f, -0.040541f, -0.033598f, -0.016774f, -0.002926f, -0.024507f, 0.017859f, 0.092644f, 0.061399f, 0.108618f, 0.042419f, -0.060499f, 0.075637f, -0.004467f, -0.026305f, 0.002593f, -0.019912f, -0.069998f, 0.065832f, -0.037358f, 0.004236f, 0.019439f, -0.008375f, -0.048784f, 0.049341f, 0.047250f, -0.027211f, -0.037293f, 0.005051f, 0.065394f, -0.034320f, 0.018679f, 0.041821f, 0.012867f, -0.015802f, -0.031171f, -0.020547f, 0.014537f, -0.004991f, 0.011082f, -0.018313f, 0.012222f, -0.040537f, 0.059338f, -0.005714f, 0.013330f, -0.002757f, -0.074782f, 0.023369f, -0.020723f, 0.038656f, 0.023183f, 0.041329f, -0.016151f, -0.071937f, 0.051693f, 0.023522f, -0.024627f, -0.044629f, 0.036979f, 0.020209f, 0.039300f, 0.040237f, -0.034978f, 0.016453f, 0.041402f, -0.060533f, 0.055662f, 0.028191f, -0.002142f, 0.018564f, -0.032107f, 0.071008f, -0.008417f, 0.047203f, 0.020106f, 0.082668f, -0.006433f, -0.012776f, 0.010598f, 0.034910f, 0.020937f, 0.025212f, 0.080956f, 0.007464f, 0.018507f, 0.051325f, -0.033818f, 0.037123f, 0.001201f, -0.049243f, 0.016601f, -0.010783f, + 0.056252f, -0.033186f, -0.048394f, -0.120712f, 0.006452f, -0.014633f, 0.003601f, 0.093771f, 0.076891f, 0.111022f, 0.058386f, -0.029275f, -0.022717f, -0.045707f, -0.061350f, 0.021773f, 0.005239f, 0.016313f, 0.019337f, -0.017582f, 0.027741f, 0.047527f, 0.008566f, -0.012370f, -0.016134f, -0.033171f, -0.022380f, -0.019910f, 0.009116f, 0.015394f, -0.048196f, -0.028075f, -0.006757f, 0.032635f, -0.014689f, 0.021180f, 0.025673f, -0.067873f, -0.067439f, 0.013226f, 0.019364f, 0.015475f, -0.050952f, -0.022842f, -0.045787f, -0.021539f, -0.021058f, 0.044587f, -0.058011f, -0.079909f, -0.030461f, 0.016630f, 0.013494f, -0.061414f, -0.050090f, -0.038457f, -0.029920f, 0.034353f, 0.047067f, 0.002974f, -0.016331f, -0.018762f, -0.011248f, -0.009529f, -0.021671f, -0.067926f, 0.022374f, 0.052878f, 0.046757f, 0.015800f, 0.063983f, 0.088155f, -0.007854f, -0.009940f, 0.066394f, -0.014916f, -0.040416f, -0.090703f, -0.029969f, 0.010804f, 0.078281f, 0.029003f, 0.005340f, 0.030152f, -0.033970f, 0.003348f, -0.017854f, -0.023349f, 0.013658f, 0.007075f, -0.021542f, -0.032809f, -0.020618f, -0.030317f, -0.026758f, 0.011804f, + -0.020859f, -0.008228f, 0.013937f, -0.008315f, 0.002421f, -0.009370f, 0.038526f, -0.029227f, 0.031421f, 0.013463f, 0.002710f, -0.028086f, -0.013804f, 0.025684f, 0.008724f, 0.001390f, 0.018101f, -0.001363f, -0.008841f, -0.010125f, -0.011269f, -0.005995f, 0.002606f, 0.002151f, 0.003027f, -0.032573f, 0.017403f, -0.012088f, -0.014726f, 0.014888f, 0.007343f, 0.007412f, -0.007663f, 0.027560f, 0.020050f, -0.027440f, 0.026297f, -0.000438f, 0.017443f, 0.040618f, -0.008963f, 0.023925f, 0.017817f, -0.014168f, -0.014410f, -0.019917f, 0.000831f, 0.009263f, -0.040737f, 0.021818f, 0.004459f, 0.036899f, -0.013639f, -0.062493f, 0.042064f, 0.011220f, -0.000393f, 0.011676f, -0.032227f, 0.005796f, -0.009363f, 0.022694f, -0.040305f, -0.116737f, -0.172151f, 0.035244f, 0.135684f, 0.004446f, 0.370969f, 0.340649f, 0.234696f, 0.402534f, 0.310414f, 0.040461f, 0.005974f, -0.043989f, -0.297273f, -0.304545f, -0.230961f, -0.398426f, -0.370584f, -0.108304f, -0.124801f, -0.127537f, 0.027755f, 0.071710f, -0.063907f, -0.024098f, 0.116379f, 0.071883f, -0.006705f, 0.084271f, 0.058319f, 0.000300f, 0.070719f, 0.170418f, + 0.111628f, 0.035205f, 0.175513f, 0.127488f, 0.006207f, 0.148514f, 0.204381f, 0.044195f, 0.017711f, 0.206761f, 0.053056f, -0.089748f, 0.101544f, 0.156952f, -0.090128f, 0.030668f, 0.222698f, 0.013614f, 0.030618f, 0.268267f, 0.209794f, 0.009084f, 0.164190f, 0.219167f, -0.088767f, -0.057710f, 0.055235f, -0.198668f, -0.323838f, -0.223254f, -0.356774f, -0.525458f, -0.483281f, -0.539884f, -0.683731f, -0.720960f, -0.638694f, -0.673265f, -0.633306f, -0.473801f, -0.374246f, -0.179391f, 0.004277f, 0.232079f, 0.257570f, 0.057742f}, + {0.001320f, -0.000183f, 0.002318f, -0.002016f, -0.000801f, -0.007018f, -0.003152f, -0.007465f, 0.000744f, -0.004211f, -0.004965f, 0.002457f, 0.004359f, -0.005434f, 0.005429f, 0.000623f, -0.006861f, 0.001091f, -0.007836f, 0.004435f, -0.002193f, -0.001277f, -0.002547f, 0.001779f, -0.003497f, -0.000463f, -0.002269f, 0.002898f, 0.005894f, -0.005430f, -0.002563f, 0.002151f, -0.001185f, 0.003962f, 0.006081f, 0.000255f, 0.002885f, 0.001913f, 0.001795f, -0.000797f, 0.004441f, -0.005837f, -0.002265f, 0.006420f, 0.000209f, 0.007620f, -0.008303f, 0.004397f, -0.003047f, -0.011505f, 0.006014f, 0.005355f, 0.001781f, -0.004090f, -0.002765f, -0.000901f, 0.001231f, 0.000899f, -0.002052f, -0.004014f, -0.002399f, 0.001698f, 0.000273f, 0.003509f, 0.007930f, 0.001857f, 0.000622f, 0.000506f, 0.006620f, 0.003812f, -0.001421f, 0.001819f, -0.000983f, -0.003130f, -0.000646f, -0.004976f, 0.006984f, 0.009656f, -0.005678f, 0.000398f, 0.000309f, -0.006915f, 0.009244f, -0.003687f, -0.003618f, 0.002648f, -0.009544f, -0.004273f, 0.010224f, 0.002329f, -0.004172f, 0.007276f, 0.002248f, 0.001564f, -0.001501f, 0.003555f, + -0.000065f, -0.012223f, -0.000588f, -0.004528f, -0.000554f, -0.000252f, -0.011719f, 0.000198f, -0.007537f, 0.000428f, 0.001175f, 0.005250f, 0.006244f, 0.002086f, 0.001542f, 0.001173f, 0.005390f, -0.002932f, 0.001832f, 0.000375f, 0.000830f, 0.001161f, -0.001644f, 0.004863f, 0.007196f, -0.013835f, 0.006416f, -0.003588f, -0.008379f, -0.005293f, 0.010603f, 0.005384f, -0.003643f, 0.006095f, 0.001702f, -0.003762f, 0.003684f, 0.000137f, -0.000084f, 0.000617f, 0.000632f, -0.001385f, -0.000033f, 0.000850f, -0.000753f, 0.004639f, -0.003015f, -0.006345f, -0.006421f, 0.000023f, 0.001820f, -0.000338f, -0.000051f, 0.003549f, -0.001846f, 0.006198f, 0.005184f, 0.000344f, -0.004075f, 0.002547f, -0.002175f, -0.003312f, 0.000853f, -0.006945f, -0.000781f, -0.005206f, 0.001870f, 0.003225f, 0.003171f, 0.002466f, -0.005346f, -0.000390f, -0.004416f, 0.004791f, -0.009174f, -0.005245f, 0.004734f, -0.010125f, -0.001070f, -0.000663f, 0.002661f, 0.002233f, 0.005059f, 0.010524f, 0.004934f, -0.001293f, 0.000054f, -0.003741f, -0.002839f, -0.018540f, -0.016996f, -0.001116f, 0.012750f, -0.003111f, 0.010208f, 0.000920f, + 0.002997f, -0.003103f, -0.014258f, 0.007475f, 0.002390f, -0.004276f, 0.003660f, -0.007567f, -0.001427f, 0.004369f, 0.002030f, 0.013531f, -0.009114f, 0.008234f, -0.004102f, -0.010554f, -0.004790f, -0.002835f, -0.002773f, 0.003815f, 0.003315f, -0.008506f, -0.003672f, -0.004831f, -0.001676f, 0.008289f, 0.008959f, 0.009487f, -0.006821f, 0.001146f, -0.004247f, -0.000685f, -0.003588f, -0.004925f, -0.005674f, -0.006907f, 0.006935f, -0.006577f, -0.008425f, -0.007373f, 0.000236f, -0.002947f, -0.002323f, -0.005852f, 0.001270f, -0.006536f, -0.000461f, -0.002729f, 0.009938f, -0.006461f, -0.007010f, -0.015707f, -0.020302f, -0.004987f, -0.009061f, -0.008401f, -0.002007f, 0.004118f, -0.005180f, -0.012265f, 0.007518f, -0.017752f, 0.005268f, -0.003060f, -0.003221f, 0.011324f, 0.007999f, 0.004126f, 0.001519f, -0.002071f, -0.001888f, -0.004400f, 0.001770f, 0.007643f, -0.006324f, 0.007240f, 0.006695f, 0.001861f, 0.000902f, 0.002945f, 0.005086f, -0.011602f, -0.005106f, 0.010832f, -0.008627f, 0.000597f, -0.000320f, 0.006578f, -0.001003f, -0.002672f, 0.001088f, 0.011239f, 0.006094f, 0.003832f, 0.003448f, 0.006210f, + -0.010273f, 0.007628f, -0.008458f, 0.007054f, 0.004425f, -0.002249f, -0.001782f, -0.003535f, -0.004892f, -0.007425f, -0.000843f, -0.002400f, -0.006407f, -0.006565f, -0.004417f, -0.003862f, 0.003640f, -0.010322f, -0.000689f, -0.004614f, -0.010309f, -0.004161f, -0.002271f, -0.006453f, -0.002761f, -0.005919f, -0.002916f, 0.005438f, 0.006292f, -0.010721f, -0.006790f, 0.004094f, -0.002668f, -0.011750f, 0.007660f, 0.014965f, 0.002592f, -0.002975f, -0.007245f, 0.002056f, 0.006552f, 0.013589f, -0.007147f, -0.002325f, -0.008894f, -0.006290f, 0.006781f, 0.007756f, -0.010709f, 0.006478f, -0.003763f, -0.006041f, 0.009823f, 0.000459f, 0.005117f, -0.013655f, 0.000446f, -0.008571f, 0.001512f, -0.010761f, -0.007633f, -0.001320f, -0.003203f, 0.024042f, 0.006873f, 0.006641f, 0.003978f, -0.016947f, 0.009155f, 0.007382f, -0.004527f, 0.000149f, 0.006941f, -0.000477f, 0.007338f, 0.009962f, 0.008516f, -0.004735f, -0.000137f, -0.002330f, 0.004064f, -0.003709f, -0.005619f, 0.003810f, -0.005429f, 0.002842f, 0.001738f, 0.000963f, 0.004126f, 0.002988f, -0.012006f, -0.000491f, -0.003674f, -0.014567f, -0.008094f, 0.005944f, + -0.006343f, 0.017066f, 0.007544f, 0.016715f, -0.000215f, -0.008160f, -0.008659f, -0.011713f, 0.017896f, -0.004350f, 0.008212f, 0.009139f, 0.001953f, 0.006448f, 0.005897f, 0.005712f, 0.002342f, -0.011741f, -0.000584f, -0.004506f, -0.001669f, 0.008131f, -0.000629f, -0.000667f, 0.005743f, 0.003617f, 0.005952f, -0.005057f, -0.018456f, -0.011021f, -0.006904f, 0.013755f, -0.012220f, -0.003670f, 0.008536f, -0.000870f, 0.001723f, -0.010297f, 0.018169f, 0.001057f, -0.006824f, 0.014285f, -0.008534f, 0.022087f, 0.011583f, -0.004899f, 0.002769f, -0.006207f, -0.004052f, -0.020222f, 0.007438f, -0.009190f, -0.001167f, -0.000757f, -0.004152f, 0.008709f, -0.003081f, -0.008860f, -0.008293f, 0.001972f, -0.007515f, -0.008764f, 0.005370f, 0.000630f, 0.006723f, -0.003614f, -0.017974f, 0.006048f, 0.008699f, 0.009796f, -0.009123f, -0.012168f, 0.002646f, 0.015781f, 0.015125f, -0.013974f, 0.007166f, 0.016758f, -0.012033f, 0.002908f, -0.006609f, -0.014078f, 0.020413f, 0.006948f, 0.018975f, 0.016598f, 0.002844f, -0.014292f, -0.008083f, 0.006493f, -0.000607f, 0.002325f, -0.014556f, 0.000887f, -0.026091f, -0.011754f, + -0.020322f, 0.011952f, -0.011475f, -0.001161f, 0.003952f, -0.004162f, -0.005172f, 0.005438f, 0.006369f, 0.017390f, -0.002443f, -0.004891f, -0.013880f, -0.012792f, 0.011671f, 0.001592f, 0.004018f, 0.020837f, -0.006615f, -0.000826f, 0.011534f, -0.006217f, 0.005265f, 0.002942f, 0.011466f, 0.009348f, -0.007407f, -0.002267f, -0.015009f, 0.014204f, -0.010371f, -0.014575f, -0.013163f, 0.006844f, -0.005148f, -0.008373f, 0.014691f, -0.006119f, 0.015169f, -0.011132f, -0.007965f, -0.003554f, 0.009568f, 0.011705f, -0.001839f, -0.016124f, 0.004239f, -0.011034f, 0.017619f, 0.001945f, 0.009689f, -0.017138f, -0.008211f, 0.001912f, 0.008050f, -0.022389f, 0.007334f, 0.007450f, 0.003865f, -0.016830f, 0.012537f, 0.022468f, -0.022161f, 0.008666f, -0.013959f, 0.009110f, 0.000318f, 0.008205f, -0.007212f, -0.000049f, 0.004146f, -0.014153f, -0.008153f, -0.005905f, 0.010554f, 0.012438f, -0.004970f, 0.005987f, -0.003989f, 0.009212f, 0.010353f, 0.004683f, 0.002353f, -0.011377f, -0.005473f, -0.014295f, -0.017175f, -0.011079f, -0.000126f, -0.005282f, -0.001989f, -0.006657f, -0.017223f, -0.005411f, 0.001925f, 0.001392f, + -0.002335f, 0.024028f, -0.020944f, 0.007049f, -0.011189f, -0.003022f, -0.007574f, -0.006412f, 0.008689f, -0.006444f, -0.000841f, -0.007801f, -0.006635f, -0.009462f, 0.010557f, -0.011852f, 0.008271f, -0.003242f, 0.008180f, -0.001614f, -0.000471f, -0.001839f, 0.007654f, 0.004740f, -0.002495f, 0.019924f, -0.001508f, -0.011618f, 0.003025f, -0.010685f, -0.014244f, -0.015311f, 0.010740f, 0.003494f, 0.009110f, 0.010846f, 0.004720f, -0.023131f, -0.002976f, 0.004197f, -0.006652f, -0.017986f, 0.020742f, -0.000346f, -0.000245f, 0.019586f, -0.006227f, -0.017991f, 0.005680f, 0.013567f, 0.022607f, -0.000439f, 0.008957f, 0.003130f, -0.021845f, -0.005027f, -0.011848f, 0.011693f, 0.005018f, 0.006637f, -0.008805f, -0.000317f, -0.001886f, 0.003018f, -0.008039f, 0.010990f, 0.001747f, -0.007251f, 0.011234f, 0.002856f, -0.014642f, -0.010339f, 0.002235f, 0.015933f, 0.012321f, -0.017365f, 0.035311f, -0.000626f, -0.000231f, 0.011155f, -0.002337f, -0.003561f, -0.001199f, 0.024508f, -0.012508f, 0.012752f, -0.003632f, 0.017376f, 0.004070f, 0.015726f, -0.006247f, -0.010071f, 0.007313f, 0.013684f, -0.006791f, -0.012461f, + -0.015623f, -0.011837f, -0.006514f, -0.001230f, 0.013344f, 0.001838f, 0.011653f, 0.000121f, -0.004132f, 0.013518f, -0.010359f, -0.018335f, -0.005038f, -0.011040f, -0.011316f, -0.020745f, 0.018083f, -0.007123f, -0.001453f, -0.001342f, -0.013615f, -0.001128f, 0.001235f, 0.009835f, -0.014350f, 0.000524f, -0.002076f, -0.006274f, -0.029991f, -0.003879f, 0.014387f, 0.010764f, 0.014732f, 0.001444f, -0.016062f, 0.042554f, 0.018144f, 0.028851f, 0.003172f, -0.013020f, -0.004962f, -0.004419f, -0.018050f, -0.001439f, -0.007018f, 0.008818f, 0.000156f, 0.000626f, -0.005724f, -0.008100f, -0.015278f, 0.004836f, 0.001595f, 0.000399f, 0.007999f, -0.001028f, 0.003425f, -0.001923f, -0.013310f, -0.010777f, 0.008109f, -0.000381f, 0.019461f, -0.025031f, 0.019668f, 0.011592f, -0.008704f, -0.018276f, -0.027811f, 0.005335f, 0.021828f, -0.011785f, 0.021091f, -0.002277f, -0.001105f, 0.004215f, -0.006436f, -0.025355f, 0.002685f, 0.010868f, 0.004843f, -0.011563f, -0.003257f, -0.007674f, 0.004856f, 0.010866f, -0.001414f, 0.001807f, -0.002706f, 0.010044f, -0.006743f, -0.005683f, 0.005155f, -0.008636f, 0.004506f, -0.032841f, + 0.023468f, 0.021695f, 0.025032f, -0.007812f, -0.022694f, 0.008227f, 0.008896f, -0.033310f, -0.030737f, 0.030037f, 0.003143f, -0.014093f, 0.011155f, -0.020599f, -0.023956f, 0.003865f, 0.062272f, 0.029411f, 0.011576f, -0.016402f, 0.000324f, -0.005482f, 0.000566f, -0.006514f, -0.003356f, -0.007263f, 0.002383f, 0.018399f, 0.003691f, 0.022572f, -0.008451f, -0.006493f, 0.004250f, 0.016078f, -0.002635f, -0.001353f, -0.032242f, -0.000482f, -0.017972f, -0.000018f, 0.025671f, 0.019041f, -0.006210f, 0.018702f, 0.035564f, -0.015521f, 0.010700f, 0.030279f, -0.020679f, 0.032023f, -0.001848f, 0.014064f, -0.006491f, 0.002852f, -0.003281f, 0.005948f, 0.008071f, 0.032269f, -0.010602f, -0.001830f, 0.009092f, -0.011967f, 0.010259f, 0.007165f, -0.006703f, -0.011050f, 0.031613f, 0.001176f, -0.014635f, -0.001760f, 0.020621f, -0.003400f, 0.014788f, 0.005439f, 0.002174f, -0.001426f, -0.005526f, 0.040930f, 0.006694f, 0.006232f, -0.021589f, -0.011673f, 0.000483f, 0.005158f, 0.007593f, 0.009868f, -0.040676f, 0.002292f, 0.001925f, 0.029422f, 0.004017f, 0.007826f, -0.003377f, 0.026784f, -0.043674f, 0.001758f, + 0.021404f, -0.025217f, 0.005761f, 0.005433f, 0.020100f, 0.004473f, 0.001540f, -0.006673f, -0.000012f, -0.021656f, 0.006767f, -0.005158f, 0.003200f, 0.006307f, -0.004481f, -0.016400f, 0.005391f, -0.012906f, -0.023667f, 0.013196f, -0.013712f, 0.008738f, -0.022320f, -0.013405f, -0.003055f, -0.006533f, 0.004360f, -0.009047f, 0.022832f, -0.000201f, 0.021716f, -0.023770f, -0.020952f, -0.006487f, -0.000531f, -0.000498f, -0.007880f, 0.020103f, 0.015651f, 0.042029f, -0.007737f, 0.026669f, -0.016838f, -0.003252f, 0.007127f, -0.032835f, 0.035558f, -0.001960f, 0.021651f, -0.002239f, -0.033266f, -0.021175f, 0.012033f, -0.045674f, 0.020549f, 0.001203f, 0.007699f, 0.021049f, 0.031328f, 0.011445f, -0.013490f, 0.030585f, -0.032585f, -0.002866f, -0.010197f, 0.004527f, 0.025520f, -0.022736f, 0.057864f, 0.008311f, 0.014212f, -0.016459f, -0.023563f, 0.008791f, 0.000098f, 0.050066f, -0.007140f, -0.016313f, -0.028224f, -0.018190f, 0.013765f, 0.009685f, 0.008098f, -0.002649f, -0.027661f, -0.041850f, 0.003350f, -0.024799f, 0.034517f, 0.005539f, 0.028111f, -0.016117f, 0.011934f, -0.009977f, 0.014770f, 0.041490f, + -0.006316f, -0.002980f, -0.005662f, 0.011857f, 0.013863f, 0.008294f, 0.003480f, 0.005632f, 0.018064f, 0.017261f, -0.008408f, -0.012205f, -0.011726f, -0.012149f, 0.046825f, 0.019957f, -0.026152f, 0.022682f, -0.005204f, -0.020148f, -0.014826f, 0.010176f, 0.017996f, -0.029355f, -0.039839f, 0.006837f, -0.016933f, 0.056346f, 0.029678f, -0.006823f, -0.004228f, 0.013955f, 0.026718f, 0.008702f, -0.000856f, -0.005334f, -0.030639f, -0.005913f, -0.003065f, -0.000145f, -0.013117f, -0.027780f, 0.016830f, -0.010747f, 0.024384f, 0.007833f, -0.021914f, -0.012479f, -0.010046f, 0.002819f, -0.030309f, 0.019568f, 0.032779f, -0.014915f, 0.021216f, -0.007106f, -0.006387f, 0.012449f, -0.020676f, 0.011620f, 0.026944f, 0.004328f, 0.044988f, 0.018310f, -0.016017f, 0.015775f, 0.009775f, 0.013508f, 0.002705f, 0.020446f, 0.022044f, 0.028260f, 0.013600f, -0.014912f, -0.012623f, -0.022021f, 0.000065f, 0.045199f, 0.002906f, 0.017400f, -0.028405f, 0.059817f, -0.016785f, -0.052291f, -0.021441f, 0.036534f, 0.004959f, -0.008725f, -0.003631f, -0.006187f, 0.031345f, -0.025072f, 0.018892f, -0.007870f, 0.038973f, 0.053284f, + 0.031005f, 0.023732f, -0.018481f, 0.028522f, 0.021241f, 0.015248f, 0.023649f, 0.028200f, -0.005101f, -0.060776f, -0.034649f, -0.045584f, 0.012101f, 0.009731f, 0.012991f, -0.014757f, 0.020061f, 0.044327f, 0.004227f, 0.000083f, -0.013393f, 0.008672f, 0.020295f, 0.024800f, 0.008340f, 0.011862f, 0.018500f, -0.014553f, 0.043651f, 0.017805f, 0.008033f, -0.012218f, -0.034369f, -0.013296f, 0.017955f, -0.001490f, -0.048510f, 0.064952f, -0.023224f, -0.012345f, 0.019373f, 0.001279f, -0.006996f, 0.004966f, -0.013099f, -0.014906f, -0.003872f, -0.034913f, 0.008127f, -0.037557f, 0.000469f, -0.029749f, -0.034310f, -0.006585f, -0.007767f, -0.007241f, -0.025271f, 0.010957f, 0.025805f, 0.007190f, 0.019608f, -0.034985f, 0.033952f, 0.063060f, 0.005886f, -0.025275f, 0.038715f, -0.032289f, -0.051812f, 0.085131f, -0.009413f, 0.005986f, -0.006624f, -0.038167f, 0.028663f, -0.034633f, 0.014198f, 0.051906f, -0.001822f, 0.071326f, -0.056600f, 0.053695f, 0.014805f, -0.035492f, -0.019499f, 0.006674f, -0.035062f, -0.016905f, 0.036627f, -0.036888f, 0.023182f, -0.024318f, 0.011822f, 0.041055f, -0.089402f, -0.034760f, + 0.035798f, -0.016178f, 0.008827f, -0.024674f, -0.074979f, -0.019063f, 0.024202f, 0.058063f, -0.018620f, 0.029542f, 0.000561f, 0.014205f, 0.029648f, 0.019822f, 0.051524f, -0.012867f, 0.001998f, 0.014754f, -0.046016f, -0.028901f, -0.013839f, -0.014218f, 0.010377f, 0.001421f, 0.003729f, -0.023212f, -0.004099f, -0.030913f, -0.025852f, 0.013113f, 0.063771f, 0.037550f, -0.016924f, -0.019628f, 0.030337f, 0.037357f, -0.021849f, 0.010543f, 0.027962f, -0.010164f, 0.061003f, 0.021802f, 0.008855f, -0.046100f, 0.028961f, 0.007085f, 0.022779f, -0.003681f, 0.005752f, -0.006568f, -0.010352f, -0.073079f, 0.019484f, 0.052754f, 0.025132f, 0.008277f, -0.001771f, 0.027390f, -0.042230f, -0.075720f, 0.005238f, 0.103999f, 0.024005f, 0.082894f, 0.076213f, 0.002728f, 0.005660f, -0.047247f, -0.045291f, -0.002920f, -0.039562f, 0.053028f, -0.114496f, 0.022751f, -0.045888f, -0.087930f, 0.013630f, 0.042161f, -0.017549f, 0.052646f, 0.097423f, 0.000544f, 0.028127f, 0.015285f, -0.048038f, -0.016108f, 0.052131f, 0.013891f, 0.024204f, -0.014396f, 0.016723f, 0.006692f, -0.015508f, -0.001025f, 0.028207f, 0.025708f, + 0.035829f, -0.016601f, -0.001794f, -0.075875f, -0.067150f, 0.007833f, -0.040568f, -0.000256f, 0.039751f, 0.007293f, 0.006952f, -0.014597f, -0.005741f, 0.022207f, 0.060983f, -0.044098f, -0.021655f, -0.007237f, -0.038455f, -0.004701f, -0.036891f, -0.014042f, -0.039260f, 0.035562f, -0.048105f, -0.005850f, 0.012281f, 0.023064f, 0.092527f, 0.117448f, 0.034152f, -0.033019f, -0.060134f, -0.007307f, -0.039908f, -0.018767f, -0.063873f, 0.008408f, 0.069097f, 0.046372f, 0.043243f, 0.002983f, 0.013850f, 0.065062f, 0.069529f, 0.045929f, 0.001112f, 0.028351f, 0.016559f, 0.013144f, -0.070901f, 0.021511f, 0.015238f, -0.019312f, 0.054120f, 0.061655f, 0.000618f, -0.001779f, -0.017524f, -0.021119f, 0.057359f, 0.044512f, -0.030470f, 0.030816f, 0.042038f, 0.007075f, -0.057507f, -0.063984f, 0.059542f, 0.023097f, 0.012086f, 0.050678f, -0.001132f, -0.019067f, 0.049918f, 0.015842f, -0.041826f, -0.017973f, -0.016630f, 0.019717f, -0.001217f, -0.021568f, 0.006814f, -0.024072f, -0.005014f, -0.009668f, -0.015170f, 0.037708f, 0.063777f, -0.020346f, 0.011245f, 0.033442f, -0.018052f, -0.011066f, 0.010219f, 0.040006f, + 0.009433f, -0.026613f, -0.039328f, -0.041721f, 0.020927f, 0.027293f, 0.057320f, -0.025989f, -0.029859f, 0.023674f, 0.032887f, 0.058683f, -0.004599f, -0.101083f, -0.025312f, 0.036307f, 0.030212f, 0.017979f, -0.023544f, 0.002318f, -0.044882f, 0.009498f, -0.021415f, 0.046615f, 0.058278f, -0.015000f, -0.002332f, -0.032221f, -0.043056f, -0.010749f, -0.083395f, -0.011060f, -0.044362f, 0.040951f, -0.036221f, 0.043433f, 0.041914f, -0.083128f, -0.009241f, -0.025585f, -0.021992f, -0.030112f, -0.050137f, -0.011330f, -0.028077f, -0.050725f, -0.076883f, 0.037232f, 0.039132f, 0.023087f, -0.051667f, -0.069914f, -0.054053f, -0.030725f, 0.011820f, -0.002797f, -0.068550f, -0.041038f, -0.047308f, 0.065100f, 0.019520f, 0.027909f, -0.021726f, -0.038245f, 0.082249f, 0.019717f, 0.024812f, -0.016933f, 0.003670f, 0.023575f, -0.018396f, 0.018437f, -0.007565f, 0.038534f, 0.054670f, 0.001171f, -0.046907f, -0.037768f, 0.042842f, 0.029034f, 0.037250f, 0.009732f, 0.007979f, -0.021697f, -0.010677f, 0.004769f, 0.025300f, 0.057094f, -0.002495f, -0.111575f, -0.103802f, -0.000389f, -0.026968f, 0.063965f, 0.064866f, -0.076489f, + -0.052540f, -0.033298f, 0.090612f, 0.080733f, -0.046959f, 0.011324f, -0.060779f, -0.058309f, 0.032421f, -0.027603f, -0.001503f, -0.009974f, -0.042312f, 0.028271f, 0.028670f, 0.023723f, 0.093405f, -0.067711f, -0.018269f, -0.003976f, 0.022252f, 0.085635f, -0.054665f, 0.051035f, 0.063792f, 0.030197f, -0.126850f, -0.059960f, 0.051349f, -0.042643f, 0.032553f, -0.015888f, -0.048701f, 0.029149f, 0.017466f, 0.004238f, -0.017672f, -0.094696f, -0.001489f, -0.009037f, 0.007282f, -0.018960f, -0.057366f, 0.041768f, -0.032705f, 0.075819f, -0.001531f, -0.013575f, 0.047260f, 0.023399f, -0.031991f, -0.010085f, -0.022352f, 0.037443f, 0.076667f, 0.046140f, -0.050754f, 0.006525f, -0.031339f, 0.028595f, -0.026088f, -0.020597f, 0.013733f, -0.009714f, 0.045703f, -0.041363f, -0.072755f, 0.013922f, -0.020543f, 0.023233f, 0.040221f, -0.109680f, -0.008565f, -0.026842f, 0.012810f, 0.106093f, -0.021288f, -0.090268f, -0.012343f, 0.064308f, 0.044588f, -0.052866f, -0.004380f, 0.036344f, 0.010536f, 0.046479f, -0.071934f, -0.053145f, 0.061757f, -0.061967f, -0.114435f, -0.047853f, -0.004402f, 0.133337f, -0.026346f, -0.086984f, + 0.051218f, -0.097087f, 0.180592f, -0.121348f, 0.033482f, -0.001234f, 0.040951f, 0.101646f, 0.031579f, 0.014578f, -0.057696f, -0.022953f, -0.057678f, -0.067471f, -0.023637f, 0.014004f, 0.038087f, 0.052107f, -0.006633f, 0.030533f, 0.035418f, -0.031061f, -0.064981f, 0.034476f, 0.011286f, -0.051583f, -0.018635f, 0.049951f, -0.017789f, -0.005094f, 0.044303f, 0.025795f, 0.019134f, 0.006689f, 0.024724f, -0.024284f, -0.060568f, -0.025569f, 0.015901f, -0.024109f, -0.015157f, 0.022053f, 0.000347f, -0.041727f, 0.042565f, 0.009600f, -0.040012f, 0.005094f, -0.010585f, 0.037683f, 0.019690f, -0.015170f, 0.016377f, -0.023237f, -0.053527f, 0.006879f, 0.011306f, -0.004932f, -0.001335f, 0.010771f, -0.024329f, 0.006845f, -0.021138f, 0.011250f, 0.035514f, -0.004542f, 0.014429f, 0.016480f, -0.016399f, 0.000022f, -0.037735f, 0.011040f, 0.018496f, -0.065953f, 0.034655f, -0.041969f, 0.009282f, -0.000057f, -0.005021f, 0.018240f, 0.098497f, -0.003242f, -0.003613f, -0.027071f, -0.027301f, 0.020734f, -0.001491f, 0.018018f, 0.000028f, -0.009239f, -0.013327f, 0.007135f, -0.018533f, 0.018993f, -0.017453f, 0.027483f, + -0.022077f, 0.016226f, -0.018705f, -0.003622f, -0.003175f, -0.016707f, -0.013344f, 0.004424f, -0.007934f, -0.004893f, -0.000275f, -0.012389f, 0.001590f, -0.001996f, 0.004025f, -0.002454f, 0.007469f, -0.025355f, 0.023584f, -0.008267f, -0.007792f, 0.018559f, -0.014405f, 0.001610f, -0.017964f, -0.015074f, 0.011483f, 0.010770f, -0.012572f, -0.007470f, 0.005168f, -0.000114f, -0.021866f, 0.006338f, 0.004005f, 0.000703f, 0.014604f, -0.004625f, -0.005994f, -0.005193f, -0.014762f, -0.003347f, 0.016033f, -0.016013f, 0.004650f, -0.007395f, -0.001669f, 0.001779f, -0.004634f, 0.004365f, 0.000635f, 0.011623f, -0.015347f, -0.000862f, 0.011143f, -0.020306f, 0.013109f, -0.009284f, 0.001749f, 0.008685f, -0.001017f, -0.010634f, -0.045594f, -0.079166f, 0.029895f, 0.250195f, 0.063634f, 0.137619f, -0.004602f, -0.135573f, -0.042933f, -0.133407f, -0.112484f, -0.040814f, -0.026447f, -0.009993f, 0.076061f, 0.100247f, 0.134369f, 0.167895f, 0.073690f, -0.043863f, -0.077163f, -0.166244f, -0.156451f, -0.064834f, -0.051633f, -0.035709f, 0.068984f, 0.092098f, 0.056422f, 0.085365f, 0.104117f, 0.034306f, 0.029316f, 0.018717f, + -0.052360f, -0.025112f, -0.037167f, -0.083865f, -0.044894f, -0.062407f, -0.090646f, -0.050392f, 0.012568f, 0.009439f, 0.052512f, 0.124056f, 0.086374f, 0.070526f, 0.070328f, 0.020991f, 0.006476f, -0.007262f, -0.034378f, -0.051215f, -0.063166f, -0.092488f, -0.080150f, -0.045645f, -0.012655f, -0.031055f, 0.027588f, 0.048236f, 0.042668f, 0.070755f, 0.080455f, 0.051012f, 0.047928f, 0.045565f, -0.004225f, -0.020349f, -0.007752f, -0.061549f, -0.048754f, -0.009986f, -0.046559f, -0.049326f, -0.024480f, -0.023917f, 0.005571f, 0.001611f} + }, + { + {-0.001074f, 0.000794f, -0.004785f, 0.004975f, -0.006732f, 0.000726f, -0.002276f, -0.004292f, -0.008361f, -0.002802f, -0.000090f, 0.001502f, 0.010056f, 0.005424f, -0.003816f, 0.000069f, -0.000944f, -0.000143f, 0.000610f, 0.000284f, 0.003260f, -0.000461f, 0.002118f, -0.001599f, -0.012281f, -0.004298f, -0.002061f, 0.000603f, 0.007422f, -0.004609f, 0.000506f, -0.000696f, -0.000241f, -0.002658f, 0.004374f, 0.000868f, -0.001997f, 0.005312f, -0.003768f, 0.002015f, 0.002391f, -0.005407f, 0.004740f, -0.002365f, 0.000306f, 0.001228f, 0.001696f, 0.002378f, -0.002198f, -0.004019f, -0.001315f, -0.002792f, 0.002061f, -0.002530f, 0.000555f, 0.003202f, 0.008493f, -0.002981f, -0.006636f, -0.001955f, 0.006263f, 0.006475f, 0.004021f, -0.000199f, 0.001910f, -0.002379f, -0.003319f, -0.002734f, -0.007926f, 0.005587f, -0.001130f, 0.001401f, 0.000150f, -0.003781f, 0.001374f, 0.001608f, 0.005953f, 0.005654f, -0.005071f, -0.001065f, 0.008460f, 0.002591f, -0.004144f, 0.000759f, -0.004593f, -0.004363f, -0.003241f, -0.007580f, -0.002426f, 0.004413f, -0.000202f, 0.002390f, -0.001090f, -0.002234f, -0.001896f, -0.001023f, + 0.006431f, -0.004071f, 0.000563f, -0.000393f, 0.000449f, 0.004862f, 0.000014f, 0.003316f, 0.011075f, 0.008398f, 0.008726f, 0.004335f, 0.002125f, -0.001466f, -0.009883f, 0.004054f, -0.003567f, 0.006385f, 0.002486f, -0.003486f, 0.003239f, -0.004556f, -0.008529f, -0.002741f, -0.003169f, -0.008308f, 0.000562f, -0.001045f, -0.000968f, -0.003890f, 0.000746f, 0.008627f, 0.004051f, 0.005878f, 0.000139f, 0.003639f, -0.003136f, -0.000188f, 0.004757f, -0.003647f, 0.003276f, -0.004510f, -0.004655f, 0.000652f, 0.010435f, 0.006893f, 0.004191f, -0.001714f, 0.002007f, 0.001436f, 0.000920f, -0.001370f, -0.003539f, -0.005325f, -0.003925f, 0.001078f, -0.003280f, 0.003750f, 0.001882f, -0.006418f, 0.015156f, -0.000321f, 0.000867f, -0.001612f, -0.008086f, 0.005922f, -0.004256f, -0.004031f, -0.009431f, -0.007236f, -0.003119f, 0.005768f, 0.008253f, -0.001738f, 0.004833f, -0.001979f, 0.008943f, 0.009334f, -0.018893f, 0.003360f, -0.000047f, -0.001926f, 0.006204f, 0.009890f, -0.003239f, -0.001565f, 0.000035f, -0.000735f, -0.004948f, 0.003795f, -0.004999f, -0.003944f, -0.000592f, 0.004848f, -0.003047f, -0.010727f, + -0.004922f, -0.007361f, 0.000596f, 0.000437f, -0.009630f, -0.001330f, -0.004365f, 0.001709f, -0.000571f, -0.001669f, 0.001993f, -0.003398f, 0.002848f, -0.005319f, 0.004575f, 0.006893f, 0.010701f, 0.004255f, -0.005243f, 0.003595f, 0.004216f, -0.002148f, -0.013005f, 0.000376f, 0.006028f, -0.005521f, 0.003220f, -0.007801f, -0.000678f, -0.005222f, -0.013396f, -0.004523f, -0.007392f, 0.002525f, 0.003918f, -0.005051f, 0.001125f, -0.002606f, 0.012260f, 0.003579f, -0.017092f, 0.006172f, 0.008483f, 0.003330f, -0.001664f, 0.004564f, -0.010825f, 0.001648f, 0.004501f, -0.002238f, 0.004340f, -0.000590f, 0.005329f, 0.001467f, -0.007396f, 0.004627f, 0.006324f, 0.006591f, -0.002120f, 0.003202f, 0.003299f, 0.002558f, -0.019387f, 0.002781f, -0.008399f, -0.002325f, -0.002967f, 0.004550f, 0.001807f, -0.015548f, -0.005896f, -0.003435f, -0.003243f, 0.006409f, -0.006100f, -0.010881f, 0.002408f, 0.005109f, 0.002861f, -0.010842f, -0.005417f, 0.003511f, -0.010577f, -0.000812f, -0.011662f, 0.001674f, 0.005238f, -0.005816f, -0.002104f, 0.006481f, 0.007923f, -0.019302f, -0.001780f, -0.005386f, 0.005475f, 0.002351f, + 0.000584f, 0.001617f, -0.005821f, 0.004849f, 0.003840f, -0.015049f, 0.011076f, -0.001629f, 0.002382f, -0.007740f, -0.003672f, -0.006575f, -0.001316f, 0.001561f, -0.006549f, -0.008447f, 0.006786f, -0.002754f, -0.008571f, -0.007176f, -0.006786f, -0.003568f, 0.012186f, -0.003960f, 0.001272f, -0.009808f, 0.010434f, 0.001187f, -0.007828f, -0.001480f, 0.005855f, -0.012678f, 0.004010f, -0.003410f, 0.002510f, 0.002595f, -0.006471f, -0.003793f, -0.016089f, -0.003727f, -0.018064f, 0.002767f, 0.003510f, -0.001397f, -0.002856f, -0.001111f, 0.002195f, -0.006387f, -0.013018f, -0.005323f, -0.005089f, -0.001420f, 0.004133f, -0.002366f, 0.006993f, 0.003853f, 0.005241f, -0.007236f, -0.000931f, 0.000167f, -0.007005f, 0.002370f, 0.004620f, 0.000067f, -0.003760f, -0.007037f, -0.007578f, 0.005354f, 0.006569f, 0.000389f, 0.013520f, 0.011795f, -0.010637f, -0.001908f, -0.000550f, -0.009953f, -0.012760f, 0.019095f, -0.000913f, 0.001243f, 0.005131f, -0.010911f, -0.004507f, -0.006752f, 0.017464f, 0.005782f, 0.000209f, -0.013510f, -0.012266f, 0.002599f, -0.005584f, 0.010614f, -0.005772f, 0.001515f, 0.001439f, -0.021226f, + 0.010635f, 0.006008f, 0.010847f, -0.005814f, 0.005958f, 0.006204f, 0.011152f, 0.002638f, -0.021148f, 0.005295f, 0.000948f, 0.008425f, 0.015411f, 0.000816f, 0.006719f, 0.005858f, -0.012638f, 0.004466f, 0.001224f, 0.001768f, -0.003394f, -0.001750f, 0.007929f, 0.005229f, 0.000383f, -0.007746f, -0.000026f, -0.003689f, -0.003944f, 0.012703f, 0.005941f, -0.000518f, -0.001615f, -0.015320f, -0.013063f, -0.015050f, 0.004105f, 0.004083f, -0.015510f, 0.001119f, 0.001170f, -0.015463f, 0.001094f, 0.002396f, -0.001938f, 0.017787f, -0.002051f, -0.008740f, -0.002046f, 0.010209f, -0.000679f, -0.015851f, 0.017397f, 0.008904f, -0.010754f, 0.008357f, 0.001888f, 0.001578f, -0.000042f, 0.000923f, -0.003984f, -0.008012f, -0.007225f, 0.013686f, -0.000568f, -0.004117f, -0.000239f, 0.009768f, -0.008695f, -0.016368f, 0.001158f, 0.003454f, 0.003782f, -0.014488f, -0.006247f, 0.004965f, 0.006514f, 0.024368f, 0.007420f, 0.019522f, -0.021475f, 0.000711f, -0.010534f, 0.000229f, 0.007310f, 0.008158f, -0.010961f, 0.004741f, -0.006286f, -0.005799f, -0.007568f, -0.012654f, -0.001689f, -0.029660f, -0.000125f, 0.009661f, + -0.001143f, -0.002110f, 0.003416f, -0.015605f, 0.005629f, -0.014884f, -0.004494f, 0.015138f, 0.003265f, 0.005164f, 0.000545f, 0.004391f, 0.013178f, 0.011660f, 0.022824f, 0.011664f, -0.016917f, -0.001520f, 0.019268f, -0.002764f, -0.013746f, -0.002218f, 0.001980f, -0.006476f, 0.012990f, 0.009364f, -0.010756f, -0.003316f, 0.012474f, 0.012923f, -0.004417f, -0.008414f, 0.020900f, -0.008657f, -0.027634f, -0.018984f, 0.006373f, -0.028203f, -0.000327f, -0.008590f, 0.000367f, -0.002835f, -0.007612f, 0.010221f, 0.003215f, -0.003082f, -0.008967f, 0.007592f, -0.005323f, 0.014312f, 0.010272f, -0.004809f, -0.009829f, 0.001019f, 0.003711f, 0.001891f, -0.024100f, 0.011505f, -0.002333f, 0.006217f, 0.007672f, 0.013077f, 0.002631f, -0.011213f, 0.015141f, -0.005623f, 0.006556f, -0.006801f, 0.005389f, -0.000968f, -0.028428f, -0.005757f, -0.005182f, -0.003269f, 0.001520f, -0.006732f, -0.005061f, 0.003738f, 0.005711f, 0.002085f, 0.014691f, 0.006930f, -0.015157f, -0.001174f, -0.000491f, -0.008376f, 0.016897f, -0.010583f, -0.010661f, 0.018188f, 0.018744f, -0.002617f, -0.000859f, -0.012287f, 0.003682f, 0.002340f, + -0.006975f, 0.002896f, 0.011257f, 0.007045f, 0.013650f, -0.003983f, -0.012112f, 0.006595f, 0.000847f, 0.002969f, -0.014363f, -0.007534f, -0.008845f, 0.002576f, 0.006752f, 0.002159f, 0.001047f, 0.013107f, 0.015519f, 0.001658f, -0.009026f, 0.008535f, 0.006529f, -0.012716f, 0.000345f, 0.000886f, -0.002719f, 0.000069f, -0.001758f, 0.008412f, -0.002712f, -0.009509f, 0.002135f, 0.010851f, 0.003704f, 0.004210f, 0.009509f, -0.020263f, -0.012863f, 0.008716f, -0.005304f, -0.018891f, 0.009404f, -0.009657f, -0.009288f, 0.012969f, -0.004225f, -0.003657f, -0.003528f, 0.003702f, 0.008830f, 0.005285f, 0.004562f, 0.005599f, -0.008113f, -0.004126f, -0.002006f, 0.011735f, 0.005406f, -0.019308f, 0.005919f, 0.006649f, -0.008671f, 0.019093f, 0.016719f, 0.009666f, 0.000312f, -0.006290f, -0.004719f, 0.001469f, -0.006131f, -0.006496f, -0.011776f, 0.002125f, -0.013386f, 0.009955f, 0.003372f, 0.000562f, 0.001809f, 0.005452f, 0.004094f, 0.010599f, 0.015649f, -0.005600f, -0.025347f, -0.003981f, -0.017301f, 0.006291f, 0.002224f, -0.022395f, 0.008143f, -0.009207f, 0.028506f, 0.009817f, -0.018055f, -0.000318f, + 0.018186f, 0.009751f, -0.014869f, -0.008652f, 0.019126f, 0.011110f, -0.013054f, 0.016379f, -0.013329f, -0.017833f, 0.003085f, -0.027121f, 0.016760f, 0.017417f, -0.003516f, -0.016658f, -0.002226f, -0.000392f, 0.005315f, 0.000086f, -0.016438f, -0.011870f, 0.000175f, -0.019393f, -0.000167f, -0.045766f, -0.014677f, -0.005192f, -0.025319f, -0.008713f, -0.005523f, -0.010941f, -0.008786f, 0.006013f, -0.012389f, -0.022921f, 0.005782f, 0.014392f, -0.023771f, -0.006496f, 0.006858f, 0.011723f, 0.019828f, 0.012847f, 0.011504f, 0.012986f, 0.004302f, 0.023053f, -0.014213f, -0.006006f, 0.004439f, -0.011585f, 0.003874f, 0.006408f, 0.011610f, 0.001420f, 0.019282f, 0.003968f, 0.004329f, 0.013463f, -0.006627f, -0.011971f, -0.000401f, -0.018249f, -0.012141f, -0.021048f, -0.001542f, -0.001273f, -0.027998f, 0.009495f, -0.013110f, 0.005211f, -0.026562f, 0.002681f, -0.020341f, 0.028670f, 0.000575f, -0.026411f, 0.030185f, 0.037634f, 0.009689f, -0.013316f, -0.010575f, 0.009331f, -0.004531f, -0.001851f, 0.009918f, -0.018818f, 0.010319f, -0.019404f, 0.008095f, -0.008015f, -0.013109f, 0.004237f, 0.012801f, 0.002682f, + 0.011772f, -0.006331f, 0.018792f, -0.014410f, -0.014744f, -0.036344f, -0.008884f, -0.018483f, -0.045866f, 0.012101f, -0.026708f, -0.015075f, -0.021647f, 0.006549f, -0.041354f, 0.011687f, 0.002714f, -0.007023f, -0.001513f, -0.010904f, -0.004738f, 0.010596f, -0.014474f, -0.009057f, -0.000050f, 0.008301f, -0.012721f, -0.000073f, 0.013358f, -0.021472f, -0.005740f, 0.013945f, -0.012971f, 0.000156f, -0.000439f, -0.002605f, 0.018347f, -0.015576f, 0.010680f, -0.006552f, 0.014833f, 0.017200f, -0.017033f, -0.021032f, 0.020092f, -0.001203f, 0.003968f, 0.006438f, 0.001333f, -0.003660f, 0.011093f, -0.005199f, -0.026005f, 0.007772f, 0.004672f, -0.020929f, -0.002990f, -0.006719f, 0.012743f, 0.017376f, 0.007465f, 0.003989f, -0.006898f, -0.014371f, 0.015502f, 0.011308f, 0.013800f, 0.000482f, -0.023168f, -0.003688f, -0.003934f, -0.008041f, -0.005946f, -0.000224f, -0.010374f, 0.054306f, 0.032586f, 0.001381f, -0.016671f, -0.042415f, -0.004257f, 0.018684f, -0.008287f, -0.017531f, -0.030399f, -0.002495f, -0.005867f, 0.000360f, -0.009826f, 0.009394f, 0.000742f, 0.026604f, 0.011728f, -0.012065f, 0.000148f, -0.005525f, + 0.003040f, -0.006263f, 0.006636f, 0.016307f, -0.018803f, 0.003247f, -0.010905f, 0.007311f, -0.007446f, -0.014994f, -0.027155f, -0.002801f, 0.017275f, 0.004924f, -0.002392f, 0.005496f, -0.000930f, 0.014979f, 0.025584f, -0.008920f, -0.004335f, -0.028632f, -0.029377f, 0.008130f, 0.005837f, -0.013256f, -0.009874f, -0.025701f, -0.016121f, 0.009872f, -0.001889f, -0.000105f, 0.002752f, -0.002058f, 0.013133f, 0.006640f, -0.019386f, 0.000957f, -0.017471f, -0.001470f, -0.008616f, -0.005599f, 0.022025f, 0.042304f, 0.070678f, 0.003348f, 0.024065f, -0.019672f, -0.024441f, -0.035536f, 0.000188f, 0.002476f, 0.009929f, 0.012645f, -0.001266f, 0.000722f, 0.019831f, 0.033865f, -0.016910f, 0.000356f, 0.006141f, -0.027089f, -0.000059f, -0.017393f, -0.017445f, 0.026067f, -0.007908f, -0.006204f, -0.014181f, 0.029882f, 0.025709f, 0.000249f, 0.042442f, 0.005059f, 0.013034f, 0.009651f, -0.012244f, -0.013737f, -0.022581f, -0.011504f, 0.004894f, 0.000416f, 0.018845f, 0.001689f, -0.002408f, -0.003307f, 0.013228f, -0.019403f, -0.048141f, -0.016614f, 0.013802f, 0.004563f, -0.004230f, -0.014128f, 0.000556f, -0.022909f, + -0.003744f, -0.020882f, -0.001726f, -0.002565f, -0.015040f, 0.014196f, 0.006780f, 0.026905f, -0.022456f, 0.041643f, 0.010966f, -0.008165f, -0.014945f, -0.007672f, 0.006392f, 0.023889f, -0.007538f, 0.013551f, -0.021340f, 0.016895f, -0.019339f, -0.022053f, 0.021416f, -0.031490f, 0.020445f, 0.016522f, 0.033242f, -0.034364f, 0.025950f, -0.004157f, 0.023468f, 0.007603f, -0.034106f, -0.007955f, -0.005683f, 0.007777f, 0.002638f, -0.023500f, -0.030956f, -0.064139f, -0.019378f, -0.037763f, 0.010698f, -0.001954f, -0.012540f, -0.018829f, -0.017444f, -0.016239f, -0.017077f, -0.017228f, 0.002033f, -0.014098f, -0.002234f, -0.030344f, -0.045887f, 0.056267f, -0.017348f, 0.030356f, -0.005577f, 0.007620f, 0.010053f, 0.016217f, 0.011196f, -0.003195f, -0.000613f, -0.024735f, -0.005192f, -0.006144f, -0.016072f, -0.025951f, 0.010365f, -0.003254f, 0.036577f, -0.025441f, 0.001075f, 0.049665f, -0.011630f, -0.042021f, -0.012952f, 0.001207f, -0.018353f, 0.028825f, 0.014006f, -0.016586f, 0.012473f, 0.015208f, -0.009061f, -0.000888f, 0.008611f, 0.018978f, 0.000038f, -0.019948f, -0.018141f, 0.022728f, 0.017704f, -0.013099f, + -0.025663f, 0.016188f, 0.020917f, -0.018574f, -0.022694f, 0.015756f, -0.028944f, 0.057077f, 0.014336f, -0.006272f, 0.004473f, 0.012400f, 0.005710f, -0.012778f, 0.003937f, 0.000235f, 0.024038f, 0.015288f, -0.023991f, -0.000099f, 0.008908f, 0.006644f, -0.015794f, 0.037738f, 0.026703f, 0.054382f, 0.030071f, 0.020023f, 0.007742f, -0.048198f, -0.004164f, 0.006090f, -0.028458f, -0.007980f, 0.053745f, 0.003629f, -0.031746f, -0.031499f, 0.027571f, -0.043239f, -0.011564f, 0.001194f, 0.010849f, 0.004163f, -0.008753f, 0.013046f, -0.019929f, -0.000884f, -0.004644f, -0.013037f, -0.003486f, -0.009418f, -0.028711f, 0.013616f, -0.025072f, 0.013025f, 0.011579f, 0.015270f, 0.001879f, 0.009637f, -0.011273f, 0.043628f, 0.004760f, -0.049233f, -0.043378f, 0.002304f, 0.017389f, 0.034912f, -0.013627f, -0.030474f, -0.014397f, -0.005701f, 0.002334f, 0.019436f, 0.002758f, -0.019138f, 0.047437f, -0.063036f, -0.012285f, 0.008911f, -0.044536f, -0.024669f, -0.013588f, 0.003151f, -0.071013f, -0.035806f, 0.046212f, -0.022403f, 0.011487f, -0.020291f, -0.057855f, -0.025966f, 0.024960f, -0.013378f, 0.006041f, 0.030796f, + -0.014947f, -0.085209f, -0.025909f, 0.007947f, 0.021514f, 0.027113f, 0.018725f, 0.025041f, 0.036535f, 0.074443f, -0.044091f, 0.032923f, -0.013545f, 0.001696f, -0.013706f, -0.055684f, -0.047057f, -0.005349f, -0.005863f, 0.015601f, 0.019784f, 0.033119f, -0.012707f, 0.002028f, -0.018753f, 0.003171f, -0.006046f, 0.002764f, 0.027761f, 0.019699f, 0.007049f, 0.026992f, 0.024937f, -0.046440f, 0.021222f, -0.025637f, -0.039964f, -0.007598f, 0.020188f, 0.010060f, -0.028162f, 0.011476f, -0.000504f, 0.021048f, -0.005228f, -0.044739f, -0.038113f, -0.036437f, -0.043421f, 0.008816f, 0.029238f, -0.002466f, 0.115586f, -0.074222f, -0.062666f, 0.039893f, -0.014441f, -0.019834f, -0.012087f, -0.002239f, -0.002823f, -0.068572f, 0.003451f, -0.000572f, 0.005626f, 0.061020f, -0.008526f, 0.025102f, 0.016716f, 0.032744f, 0.086571f, -0.027378f, 0.110169f, 0.039542f, -0.011608f, 0.018269f, -0.052259f, 0.018897f, 0.084019f, 0.002230f, 0.087669f, 0.046033f, -0.005238f, -0.034022f, 0.098852f, 0.014629f, -0.016596f, 0.012572f, -0.022481f, -0.006852f, -0.003373f, -0.006304f, 0.012474f, 0.027330f, 0.019201f, 0.003381f, + 0.012666f, -0.020112f, -0.019201f, 0.005704f, -0.005873f, 0.032175f, 0.035206f, 0.022097f, -0.009074f, 0.001879f, -0.042840f, -0.027242f, -0.007960f, -0.029782f, -0.046318f, -0.027997f, 0.022086f, -0.027343f, -0.081662f, -0.038246f, 0.025013f, -0.033503f, -0.023210f, 0.000647f, -0.005893f, 0.037883f, 0.056675f, 0.073681f, -0.039131f, 0.020488f, -0.000298f, 0.001769f, -0.015647f, -0.049842f, -0.097607f, -0.065315f, 0.034553f, -0.066232f, -0.033646f, 0.016952f, 0.034047f, -0.025191f, 0.038489f, 0.106448f, 0.023889f, 0.019698f, -0.079677f, -0.110179f, -0.021603f, -0.035232f, -0.055564f, -0.017973f, -0.045142f, 0.033340f, 0.024597f, 0.096446f, 0.048179f, -0.021835f, 0.045442f, 0.088623f, -0.046928f, 0.067052f, 0.054772f, -0.009419f, -0.013369f, -0.030948f, 0.009789f, 0.059892f, 0.045416f, 0.070394f, -0.030219f, -0.014477f, -0.013803f, -0.004818f, -0.018355f, 0.018183f, -0.022643f, 0.051747f, 0.022940f, -0.085809f, -0.036056f, 0.000524f, 0.013791f, 0.036794f, -0.016644f, -0.032421f, 0.010682f, 0.010110f, -0.012598f, -0.015876f, 0.010839f, -0.024122f, -0.035955f, -0.016618f, 0.082011f, 0.033780f, + 0.015147f, -0.040401f, -0.011632f, -0.034091f, 0.021988f, 0.039842f, 0.014975f, 0.003472f, 0.025038f, -0.012683f, 0.053517f, 0.030397f, 0.005276f, 0.018448f, 0.000491f, 0.103493f, 0.023612f, -0.041627f, 0.019329f, 0.019645f, 0.013105f, 0.025387f, 0.004528f, -0.038799f, 0.052568f, 0.013839f, 0.012163f, 0.022737f, 0.013016f, 0.003944f, -0.026008f, 0.039820f, 0.044890f, 0.026234f, 0.120180f, 0.088177f, -0.038589f, -0.081065f, -0.001742f, -0.019362f, -0.101471f, -0.016436f, 0.028344f, 0.026261f, -0.021503f, 0.033480f, 0.013491f, -0.018012f, -0.036857f, 0.005318f, -0.007546f, -0.061321f, -0.016664f, -0.024070f, 0.005948f, -0.083319f, -0.060791f, -0.014336f, 0.040685f, -0.009056f, -0.010678f, -0.052094f, 0.002280f, 0.037337f, 0.003204f, -0.032705f, -0.015357f, -0.010320f, -0.015104f, 0.006020f, 0.014755f, -0.045161f, -0.044551f, 0.002676f, -0.000647f, 0.005288f, 0.075986f, -0.050553f, -0.003942f, -0.007615f, -0.072427f, -0.026892f, -0.052825f, -0.013321f, -0.003794f, 0.046799f, 0.059079f, 0.066368f, 0.021151f, 0.006885f, -0.026493f, -0.067905f, 0.003171f, 0.020009f, -0.021068f, 0.082313f, + 0.205977f, 0.191625f, 0.029470f, -0.131848f, -0.115145f, -0.051130f, -0.072077f, 0.236221f, 0.150529f, 0.088348f, 0.123201f, -0.007526f, -0.063668f, -0.177749f, -0.109209f, -0.047976f, -0.008173f, 0.064023f, 0.136186f, 0.047837f, -0.046757f, 0.054615f, 0.018138f, -0.000005f, -0.090843f, -0.038312f, 0.091693f, -0.064129f, 0.029841f, -0.006968f, -0.013088f, 0.019181f, 0.015953f, 0.038289f, 0.078080f, -0.049585f, -0.050424f, 0.007312f, -0.028416f, 0.037515f, -0.053101f, -0.038747f, -0.031485f, -0.003496f, -0.004350f, -0.042212f, 0.021169f, 0.060464f, -0.048245f, -0.067896f, -0.038507f, -0.022299f, -0.007481f, 0.083445f, 0.010946f, -0.011566f, -0.085414f, -0.032393f, 0.013635f, 0.068101f, 0.038619f, -0.023183f, -0.125722f, -0.103214f, 0.093453f, 0.086717f, 0.098150f, -0.053042f, -0.213354f, -0.053380f, 0.102077f, 0.070844f, 0.016484f, -0.036320f, 0.017674f, -0.099472f, -0.048799f, 0.017763f, -0.022505f, 0.014391f, -0.012994f, -0.009493f, 0.095034f, -0.082388f, -0.033653f, 0.061783f, 0.062167f, 0.099637f, 0.050254f, -0.171113f, 0.048655f, 0.147629f, 0.034807f, 0.063298f, 0.017245f, -0.066656f, + -0.110330f, 0.014028f, 0.017631f, 0.012095f, 0.105239f, 0.019762f, -0.009833f, -0.066617f, -0.013488f, -0.005028f, -0.017820f, 0.000992f, -0.014745f, 0.029036f, 0.010968f, -0.018517f, -0.005263f, 0.044101f, -0.001675f, -0.000822f, 0.002713f, -0.009102f, -0.020038f, 0.025355f, 0.019302f, 0.017473f, -0.028349f, 0.015397f, 0.038003f, 0.016978f, -0.004027f, 0.026985f, -0.006391f, -0.029149f, 0.006351f, 0.008944f, -0.026184f, -0.025477f, 0.024907f, 0.026948f, -0.027114f, 0.017379f, 0.014236f, 0.000719f, -0.010797f, 0.001043f, 0.018739f, -0.000364f, -0.023912f, 0.012367f, 0.012460f, -0.041360f, 0.009514f, 0.031317f, 0.009049f, -0.027033f, 0.003299f, 0.019205f, -0.036042f, 0.009337f, 0.015956f, 0.006454f, -0.009488f, -0.034490f, 0.039593f, -0.044135f, -0.003340f, 0.039391f, 0.001709f, -0.009689f, 0.002814f, -0.042387f, 0.020437f, -0.005885f, 0.027986f, 0.032506f, 0.100005f, 0.009122f, -0.012523f, -0.033201f, -0.022555f, 0.012117f, -0.015188f, 0.013322f, -0.020170f, -0.001182f, 0.015699f, -0.008564f, 0.007299f, 0.007768f, -0.027960f, 0.008148f, -0.009238f, -0.005567f, -0.023026f, 0.006976f, + -0.006577f, -0.013924f, -0.006803f, 0.011626f, -0.010044f, -0.009334f, 0.014124f, -0.015115f, 0.007958f, 0.014062f, -0.027829f, 0.028101f, -0.006898f, -0.032116f, 0.017473f, 0.017982f, -0.015178f, 0.006018f, 0.010051f, -0.013118f, -0.012242f, 0.000835f, 0.002035f, 0.009704f, -0.004294f, -0.000887f, -0.013547f, 0.013474f, -0.010532f, -0.002642f, 0.016171f, -0.018295f, 0.005857f, -0.002575f, 0.000408f, -0.008094f, -0.011982f, -0.004075f, 0.021991f, -0.013756f, -0.005180f, 0.004525f, 0.005052f, 0.001702f, -0.012587f, 0.011090f, -0.005355f, -0.010090f, 0.000194f, -0.019407f, 0.030766f, -0.011942f, 0.006623f, 0.008358f, -0.005744f, 0.012889f, -0.048665f, -0.082582f, 0.038373f, 0.279689f, 0.044216f, 0.139109f, -0.031778f, -0.143994f, -0.050713f, -0.140372f, -0.090445f, -0.030352f, -0.014151f, 0.005333f, 0.083782f, 0.098044f, 0.139063f, 0.135666f, 0.044651f, -0.055469f, -0.086527f, -0.162135f, -0.122078f, -0.066142f, -0.024141f, -0.017792f, 0.050739f, 0.081972f, 0.065470f, 0.086429f, 0.086159f, 0.029979f, 0.028640f, 0.009013f, -0.061229f, -0.024544f, -0.052510f, -0.094104f, -0.055004f, -0.055584f, + -0.079333f, -0.018563f, 0.038546f, 0.027062f, 0.082943f, 0.105918f, 0.056886f, 0.070032f, 0.054799f, -0.009105f, -0.001407f, -0.006607f, -0.056857f, -0.072753f, -0.062561f, -0.097203f, -0.080545f, -0.030441f, -0.003934f, 0.009875f, 0.067141f, 0.059329f, 0.059629f, 0.072372f, 0.056107f, 0.017264f, 0.035718f, 0.017426f, -0.020830f, -0.011971f, -0.039085f, -0.085397f, -0.049463f, -0.048476f, -0.064310f, -0.030475f, -0.014830f, -0.016616f, 0.022768f, 0.001400f}, + {0.001115f, 0.000622f, 0.004827f, 0.003952f, -0.004374f, -0.003021f, -0.000939f, 0.005945f, -0.006081f, -0.000380f, -0.003280f, -0.007662f, 0.003876f, -0.001496f, -0.007322f, -0.003116f, 0.007149f, -0.010052f, -0.002979f, 0.009242f, -0.002812f, -0.011497f, 0.007898f, -0.001025f, -0.004083f, 0.002477f, -0.003222f, 0.005750f, -0.003379f, 0.002612f, -0.006697f, 0.005926f, -0.000859f, -0.006490f, -0.000673f, -0.003050f, 0.003597f, 0.002987f, -0.001465f, 0.000436f, 0.000909f, 0.012689f, 0.005857f, -0.001653f, 0.006430f, -0.003161f, 0.005187f, 0.000842f, -0.002223f, -0.001520f, -0.008103f, 0.002208f, -0.003095f, -0.006297f, 0.005703f, 0.000960f, 0.003172f, 0.001356f, 0.003935f, -0.002317f, -0.003552f, -0.000007f, 0.000729f, 0.002315f, -0.001962f, 0.004021f, 0.000390f, 0.000645f, -0.000373f, -0.004999f, -0.000519f, 0.001868f, 0.003626f, 0.000944f, 0.002000f, 0.006068f, -0.002091f, 0.011460f, -0.006422f, 0.001893f, -0.009562f, 0.002658f, 0.001121f, 0.014622f, -0.008731f, 0.000004f, -0.004572f, 0.007318f, 0.007542f, -0.004804f, -0.000863f, -0.004129f, -0.002309f, -0.004822f, -0.005931f, 0.004399f, + 0.001495f, -0.003925f, 0.008231f, 0.007436f, 0.012781f, -0.000384f, 0.004876f, 0.002526f, -0.000155f, -0.011500f, 0.003050f, 0.004790f, -0.004479f, 0.002881f, -0.003285f, -0.003890f, -0.006249f, 0.003289f, 0.008186f, 0.000857f, 0.009542f, -0.003846f, -0.000744f, 0.009586f, 0.005065f, 0.000806f, -0.000055f, 0.009117f, 0.013699f, -0.010095f, 0.002331f, -0.003449f, -0.001517f, -0.015725f, -0.005553f, 0.006451f, -0.004861f, 0.004502f, 0.002075f, -0.002228f, -0.003811f, 0.002339f, -0.001313f, 0.005044f, 0.002642f, 0.002433f, 0.002452f, -0.008032f, 0.000180f, -0.003744f, 0.004815f, 0.008605f, 0.005470f, -0.000874f, 0.008322f, 0.000506f, 0.002004f, 0.000350f, 0.001337f, -0.001776f, 0.006661f, -0.008201f, -0.008954f, 0.000519f, -0.011995f, 0.002358f, -0.003899f, 0.005933f, -0.003345f, -0.009179f, 0.000886f, 0.009383f, -0.001584f, 0.000514f, 0.012612f, 0.016279f, -0.007120f, -0.007176f, -0.002280f, -0.011748f, 0.004924f, 0.001300f, 0.002795f, -0.003992f, 0.006194f, -0.008114f, -0.001707f, 0.005922f, -0.004880f, -0.001487f, 0.000678f, 0.010587f, 0.000466f, 0.007728f, -0.010086f, 0.009943f, + -0.001269f, 0.001643f, 0.006067f, -0.005178f, 0.005019f, -0.002212f, -0.002742f, 0.004773f, 0.005717f, -0.000747f, 0.003155f, -0.012837f, 0.007658f, 0.007968f, -0.014175f, -0.011945f, -0.003755f, -0.009850f, -0.003165f, 0.004169f, 0.002175f, 0.004004f, -0.000167f, -0.003058f, 0.008130f, -0.002529f, -0.000154f, -0.003068f, 0.001484f, -0.004810f, 0.006661f, 0.002170f, -0.006325f, -0.002719f, -0.003116f, -0.002806f, -0.004065f, 0.007769f, 0.020882f, 0.003719f, -0.007440f, 0.009339f, 0.001409f, -0.006761f, 0.019053f, -0.012937f, -0.017982f, -0.010919f, -0.010852f, -0.004003f, 0.005506f, 0.006309f, -0.006147f, 0.009202f, -0.011845f, -0.006864f, -0.001348f, 0.003604f, 0.003069f, -0.004019f, -0.004626f, 0.010270f, 0.002113f, -0.001136f, -0.005930f, 0.007533f, -0.005787f, -0.001792f, 0.000009f, -0.001138f, -0.000828f, 0.002616f, 0.001651f, -0.002145f, 0.006627f, -0.003658f, 0.004020f, -0.000832f, -0.010887f, -0.004823f, -0.004390f, 0.010936f, -0.006465f, -0.008391f, -0.014167f, -0.017098f, -0.003109f, 0.000162f, -0.006686f, 0.011778f, 0.001554f, 0.005966f, -0.005189f, 0.010030f, 0.004448f, -0.007082f, + 0.017249f, -0.008755f, -0.008629f, 0.000441f, 0.010717f, 0.015048f, 0.011119f, 0.002727f, -0.005811f, -0.013705f, 0.004775f, -0.001350f, 0.012166f, 0.003678f, -0.003803f, -0.001918f, 0.006094f, 0.003262f, -0.002184f, -0.018822f, 0.002312f, -0.006385f, 0.003779f, 0.002020f, 0.013283f, -0.017389f, -0.011111f, -0.012586f, 0.006317f, 0.006595f, 0.007728f, -0.008801f, 0.002437f, -0.002148f, 0.000368f, -0.014109f, -0.013447f, -0.008597f, -0.010022f, 0.015547f, -0.006892f, -0.001170f, -0.001172f, 0.005693f, -0.003295f, -0.015095f, 0.005679f, -0.005658f, -0.003007f, 0.007834f, 0.004479f, 0.008893f, -0.000459f, 0.005001f, -0.012016f, -0.004019f, 0.008817f, 0.016890f, 0.008541f, -0.000217f, -0.013605f, 0.009395f, -0.005157f, -0.010348f, 0.013767f, 0.004868f, 0.003942f, -0.008771f, -0.006584f, 0.005510f, -0.004649f, -0.004755f, 0.006556f, -0.005879f, 0.001368f, 0.000686f, -0.011835f, -0.001954f, -0.008385f, 0.011135f, 0.003983f, -0.001366f, 0.000184f, -0.004940f, 0.004674f, 0.001089f, -0.002136f, 0.001826f, -0.014601f, -0.006714f, 0.004602f, 0.002991f, -0.004864f, -0.002213f, -0.011903f, -0.029543f, + 0.009892f, 0.001491f, 0.007404f, 0.007962f, -0.005683f, -0.020844f, 0.016186f, 0.006887f, 0.015944f, -0.002838f, 0.008524f, -0.000069f, -0.005549f, -0.000274f, -0.014591f, 0.018196f, 0.004304f, 0.001876f, -0.009096f, -0.005149f, -0.006081f, 0.005610f, -0.008058f, 0.014071f, 0.000853f, 0.005032f, 0.007965f, 0.004560f, -0.000611f, 0.004799f, 0.004559f, -0.002864f, 0.003899f, -0.014973f, 0.004323f, 0.007448f, 0.007514f, 0.014285f, 0.005152f, -0.008699f, 0.004996f, -0.004080f, 0.009781f, 0.002437f, 0.007240f, 0.011180f, 0.002147f, -0.001574f, 0.008680f, -0.004878f, -0.008492f, -0.002450f, 0.006224f, 0.015502f, -0.002958f, 0.001939f, 0.000774f, 0.002860f, 0.003393f, 0.007329f, 0.002623f, -0.002479f, -0.000120f, -0.003668f, 0.004333f, 0.002885f, -0.008641f, -0.006236f, 0.003833f, 0.007292f, 0.005705f, 0.011683f, -0.013619f, -0.004516f, -0.010094f, 0.015847f, 0.008122f, 0.029156f, 0.016762f, 0.013438f, 0.021641f, 0.004864f, 0.004686f, -0.013472f, 0.000495f, -0.024507f, -0.003349f, 0.008312f, 0.007518f, 0.003501f, 0.006465f, 0.005834f, -0.004138f, -0.004162f, 0.014629f, 0.011607f, + 0.011569f, -0.001454f, 0.002534f, -0.017605f, -0.013616f, -0.006188f, 0.011842f, 0.002868f, -0.001101f, 0.005241f, -0.008729f, 0.000359f, -0.003917f, 0.011254f, 0.010489f, 0.020204f, -0.000819f, 0.007300f, 0.007793f, -0.003850f, -0.009576f, 0.019025f, -0.010010f, -0.003054f, 0.010217f, -0.000037f, 0.006443f, 0.013629f, -0.003034f, 0.004823f, -0.012101f, -0.029497f, -0.014577f, -0.010041f, -0.002294f, 0.000980f, 0.000513f, -0.007847f, -0.013895f, -0.003582f, -0.009409f, 0.003150f, 0.001646f, 0.001117f, -0.015628f, -0.008264f, 0.013556f, 0.003752f, 0.001581f, -0.019693f, -0.015239f, 0.010456f, 0.004588f, 0.006450f, -0.009905f, -0.000451f, -0.002153f, -0.014663f, 0.010977f, -0.006241f, -0.001059f, -0.038970f, -0.009819f, -0.014087f, -0.010147f, 0.002111f, 0.012539f, -0.002089f, 0.016741f, 0.009634f, -0.001508f, -0.016471f, -0.007515f, 0.025769f, 0.003743f, -0.014619f, -0.011531f, -0.004491f, 0.011371f, -0.008734f, -0.000327f, 0.008645f, 0.012424f, 0.015037f, -0.016401f, 0.011221f, 0.001003f, 0.003524f, 0.004113f, 0.006376f, 0.004694f, 0.015058f, -0.000024f, 0.004898f, -0.013193f, 0.018335f, + -0.009383f, -0.003752f, 0.002611f, -0.014386f, 0.017972f, -0.002467f, -0.036234f, -0.011431f, -0.029148f, 0.002176f, -0.000750f, -0.008302f, 0.038747f, -0.006447f, -0.019625f, -0.006195f, -0.005016f, 0.018291f, -0.002690f, 0.008879f, 0.010328f, -0.007044f, 0.013248f, 0.018740f, -0.009509f, 0.007232f, -0.016496f, 0.008138f, -0.005882f, -0.004630f, 0.019096f, -0.007092f, -0.001586f, -0.008864f, 0.000976f, -0.000856f, 0.018118f, -0.025218f, 0.005191f, 0.004975f, -0.007736f, 0.003228f, 0.019096f, 0.020116f, 0.007733f, 0.007125f, 0.009893f, -0.015765f, -0.002472f, -0.016816f, -0.000084f, 0.010599f, 0.007046f, -0.003595f, -0.012931f, -0.004351f, 0.009254f, -0.017392f, 0.000921f, -0.001286f, 0.008349f, 0.016469f, 0.001930f, -0.008933f, -0.006394f, 0.017639f, -0.010947f, -0.005504f, 0.010596f, -0.006344f, -0.020434f, -0.007580f, 0.005227f, 0.003522f, -0.007852f, 0.001945f, 0.011404f, 0.007497f, 0.011045f, -0.001247f, 0.008494f, 0.014995f, -0.006005f, 0.007453f, 0.007106f, -0.010308f, 0.022963f, -0.021469f, 0.013494f, 0.005541f, -0.028990f, 0.028375f, -0.017610f, 0.003898f, -0.002416f, 0.022529f, + -0.008713f, -0.016388f, -0.002424f, -0.000225f, 0.005209f, 0.016969f, -0.013661f, -0.001400f, 0.002363f, 0.000098f, -0.001211f, 0.003866f, -0.010379f, -0.003689f, -0.006469f, -0.019082f, -0.013662f, -0.019465f, 0.015359f, -0.045219f, 0.024609f, -0.017651f, -0.012921f, -0.021778f, 0.002081f, -0.002069f, 0.003528f, 0.016615f, -0.013795f, -0.004485f, 0.012379f, 0.012333f, -0.004151f, 0.005262f, -0.006465f, -0.020188f, -0.002288f, 0.006081f, -0.011005f, 0.017746f, 0.002614f, -0.001102f, -0.010253f, -0.008980f, 0.002124f, 0.026997f, 0.000943f, -0.002680f, 0.007020f, -0.021502f, -0.003969f, 0.009290f, -0.015297f, 0.022994f, 0.013919f, 0.000361f, -0.006640f, -0.006143f, -0.008319f, -0.013733f, -0.018324f, 0.016850f, 0.001401f, 0.028984f, 0.002831f, -0.000027f, -0.012021f, 0.003768f, -0.004379f, 0.007745f, 0.000201f, -0.015803f, -0.012924f, -0.016053f, -0.029078f, -0.002377f, 0.027322f, -0.023315f, -0.000424f, -0.024384f, 0.005534f, 0.009585f, 0.007688f, 0.021154f, -0.000235f, -0.024611f, 0.021676f, 0.000908f, -0.010441f, -0.007780f, -0.020030f, -0.004271f, -0.013129f, 0.014373f, 0.020228f, -0.007767f, + 0.018049f, -0.017629f, -0.008472f, 0.011377f, 0.004402f, -0.023592f, 0.002062f, 0.029373f, -0.033924f, 0.001466f, 0.016681f, 0.038200f, -0.016011f, -0.010428f, -0.003686f, 0.029455f, 0.030032f, -0.031719f, -0.000911f, -0.024495f, -0.010912f, 0.015034f, 0.016223f, 0.019979f, 0.012196f, -0.004626f, 0.014966f, -0.018401f, -0.009105f, -0.002336f, -0.002231f, -0.026382f, 0.002794f, -0.001128f, 0.034683f, -0.005820f, 0.017337f, 0.003539f, 0.010466f, 0.022365f, -0.013390f, -0.006701f, -0.033312f, 0.022742f, -0.029319f, -0.005806f, 0.007261f, -0.004538f, -0.016778f, -0.004829f, 0.005276f, -0.012738f, 0.003727f, -0.002508f, -0.002246f, -0.038460f, -0.026541f, 0.001364f, -0.019167f, -0.027169f, 0.005221f, -0.025171f, 0.008140f, 0.015472f, -0.014178f, 0.026937f, 0.006082f, 0.017013f, 0.019304f, 0.004105f, -0.013608f, -0.017607f, -0.019998f, 0.009466f, -0.019091f, 0.048124f, 0.019029f, 0.008989f, 0.023649f, -0.008522f, 0.004421f, -0.024346f, -0.033095f, 0.021249f, 0.040961f, 0.013250f, -0.000880f, -0.040290f, 0.048996f, 0.008073f, 0.005442f, 0.008040f, 0.001171f, 0.009917f, 0.002167f, -0.006158f, + -0.000973f, 0.013528f, -0.008367f, 0.016774f, 0.002362f, -0.011373f, -0.017888f, -0.003632f, 0.015063f, -0.003208f, 0.004462f, -0.005978f, -0.006992f, 0.001441f, 0.043887f, 0.008427f, 0.005757f, 0.007282f, 0.003063f, 0.028022f, -0.010663f, 0.009046f, -0.017983f, 0.033242f, 0.043602f, 0.013033f, -0.003304f, -0.014239f, 0.045562f, 0.023390f, -0.000104f, -0.016231f, 0.005968f, -0.008969f, -0.002494f, -0.018684f, -0.008586f, -0.011731f, -0.019748f, 0.032611f, -0.010064f, 0.024730f, 0.003770f, -0.015106f, -0.001228f, -0.034902f, 0.034671f, 0.000220f, -0.018001f, -0.010288f, -0.022544f, -0.023530f, -0.014963f, 0.044821f, -0.010687f, -0.004507f, 0.011201f, 0.014430f, -0.010954f, -0.010727f, 0.043551f, 0.043569f, 0.052823f, 0.032439f, 0.009987f, -0.013318f, -0.014755f, 0.008218f, 0.014823f, 0.019173f, -0.029108f, -0.000686f, -0.004147f, 0.014354f, 0.010438f, -0.019616f, -0.025132f, -0.000054f, -0.010089f, 0.023153f, 0.026316f, -0.000050f, 0.013469f, 0.004674f, 0.004754f, 0.031340f, -0.020282f, -0.025639f, 0.018971f, -0.033571f, 0.001715f, -0.010545f, 0.017189f, 0.009079f, -0.000939f, 0.021163f, + 0.018427f, -0.018398f, 0.020993f, -0.000537f, -0.011055f, 0.004746f, 0.022786f, -0.010030f, 0.008784f, 0.017340f, 0.006455f, -0.039663f, -0.024283f, 0.002954f, 0.000150f, -0.027413f, -0.020079f, 0.007685f, 0.010434f, 0.009463f, -0.038305f, -0.026540f, -0.027520f, -0.003556f, 0.012959f, 0.020976f, -0.060105f, -0.044122f, 0.003805f, 0.006348f, 0.029451f, 0.008687f, 0.007913f, 0.020293f, -0.008005f, -0.010751f, -0.014434f, -0.017783f, -0.037280f, -0.034360f, -0.030009f, 0.012208f, -0.004687f, 0.017402f, -0.032970f, -0.004271f, 0.000571f, -0.011343f, -0.015907f, 0.027068f, -0.010882f, 0.006307f, -0.001289f, 0.002853f, -0.027000f, -0.008562f, -0.023203f, 0.004029f, 0.002095f, 0.006871f, 0.060910f, -0.022979f, 0.016231f, 0.027081f, -0.014000f, -0.011353f, -0.019471f, -0.002669f, 0.028077f, -0.028313f, 0.019406f, -0.000799f, -0.005626f, 0.003849f, 0.002262f, 0.016972f, 0.001113f, -0.030050f, 0.023252f, -0.018260f, -0.045405f, -0.035065f, -0.018724f, 0.061887f, 0.050965f, -0.026727f, -0.008502f, -0.037133f, -0.032440f, -0.011354f, 0.037163f, 0.002311f, 0.025624f, 0.014884f, -0.017745f, 0.021119f, + -0.013408f, -0.038511f, -0.003211f, -0.022714f, -0.004554f, -0.011391f, 0.079584f, 0.002413f, -0.064250f, 0.053098f, -0.019020f, -0.012576f, 0.054500f, 0.054942f, 0.004847f, -0.020050f, 0.020340f, 0.009209f, -0.030906f, -0.020067f, 0.010034f, 0.006898f, 0.017557f, 0.053195f, 0.009733f, -0.001959f, 0.013029f, 0.002207f, -0.021923f, -0.014357f, 0.012466f, 0.002123f, 0.044305f, 0.009701f, -0.002340f, 0.015192f, 0.023950f, 0.023175f, 0.026083f, 0.000650f, -0.017680f, -0.005773f, -0.040858f, -0.006397f, -0.046190f, 0.025122f, -0.027992f, -0.011822f, 0.000447f, 0.036774f, -0.021540f, 0.020027f, -0.015051f, 0.011727f, -0.018959f, 0.023024f, 0.036600f, 0.001409f, -0.007430f, -0.020673f, -0.027950f, 0.014599f, 0.018302f, 0.044838f, -0.006024f, 0.001000f, 0.020515f, 0.072413f, -0.017024f, 0.009582f, -0.011756f, -0.042691f, 0.029044f, -0.007593f, 0.020700f, -0.004401f, 0.005262f, -0.026792f, 0.068507f, -0.104725f, 0.075631f, -0.120110f, 0.050917f, -0.063556f, 0.019139f, -0.050986f, 0.017548f, 0.027322f, -0.006850f, 0.017918f, -0.010770f, 0.077755f, -0.049111f, 0.042392f, 0.025429f, 0.021640f, + 0.082119f, -0.056804f, 0.023503f, 0.015939f, -0.050201f, -0.000547f, -0.010268f, -0.013251f, -0.025995f, -0.000471f, 0.002488f, 0.033860f, 0.011866f, 0.018199f, 0.024364f, 0.021037f, 0.000398f, 0.028494f, -0.031981f, -0.003486f, 0.037861f, 0.005364f, -0.052615f, -0.010884f, -0.068742f, -0.011616f, 0.011750f, -0.011463f, -0.016142f, -0.001705f, 0.061102f, 0.016803f, 0.004580f, 0.008849f, 0.015249f, -0.003202f, -0.035184f, -0.009287f, -0.003924f, 0.008051f, -0.008098f, -0.014828f, 0.044377f, 0.025521f, -0.009113f, -0.000396f, -0.009450f, -0.038316f, -0.032815f, -0.022186f, -0.019866f, 0.046708f, 0.010924f, 0.018565f, -0.026819f, -0.024044f, 0.008589f, 0.020492f, 0.016966f, -0.005166f, -0.005154f, -0.027836f, -0.019979f, 0.029347f, 0.001264f, -0.070578f, 0.025866f, 0.043576f, 0.012656f, -0.028146f, -0.020231f, -0.011095f, 0.004197f, -0.015803f, 0.008349f, -0.025236f, -0.067620f, 0.059146f, 0.073443f, -0.007429f, 0.053626f, 0.001577f, 0.008856f, 0.022507f, -0.045912f, 0.016503f, 0.035423f, 0.033677f, 0.015195f, 0.010175f, -0.032868f, 0.024371f, 0.015487f, -0.020786f, 0.011894f, -0.004311f, + 0.041310f, 0.010931f, 0.011356f, 0.023696f, -0.008472f, -0.027497f, 0.009047f, 0.051343f, -0.017241f, -0.009907f, 0.047546f, -0.016877f, -0.019527f, -0.016653f, 0.017218f, 0.059957f, 0.084221f, -0.004743f, -0.052476f, 0.081868f, 0.029377f, -0.052954f, 0.062071f, 0.023978f, -0.013611f, -0.014688f, -0.021278f, -0.036740f, -0.000629f, 0.021004f, -0.030832f, -0.019856f, -0.066820f, -0.007743f, 0.041471f, -0.081109f, -0.043213f, 0.015127f, 0.015087f, 0.018692f, 0.052044f, 0.047196f, -0.071877f, 0.003736f, 0.004627f, -0.048472f, 0.016351f, 0.029155f, -0.025021f, -0.013831f, -0.021037f, 0.021680f, 0.058980f, 0.026770f, 0.029848f, -0.026885f, 0.013081f, -0.037840f, 0.043793f, 0.149514f, -0.048348f, 0.002397f, 0.010493f, 0.068155f, 0.058548f, -0.018293f, -0.026648f, -0.036245f, 0.000785f, 0.029623f, -0.001720f, -0.017874f, -0.020425f, 0.028098f, -0.015322f, -0.034674f, -0.032862f, -0.005125f, 0.053926f, 0.039682f, -0.043974f, 0.004373f, 0.000238f, -0.017417f, 0.020993f, 0.009498f, -0.015955f, -0.003527f, -0.012610f, -0.004189f, 0.069249f, -0.024259f, -0.046599f, -0.030652f, -0.026593f, 0.063359f, + 0.001443f, -0.012458f, 0.056496f, 0.040862f, 0.015327f, 0.030795f, 0.055644f, -0.031923f, 0.008524f, 0.056316f, 0.031698f, 0.043575f, -0.047064f, -0.011079f, -0.001687f, 0.022127f, 0.018829f, -0.042217f, 0.004425f, -0.056116f, -0.087855f, -0.002106f, -0.023039f, 0.043539f, 0.045782f, -0.009179f, -0.003286f, 0.012103f, -0.031689f, -0.082319f, 0.057733f, -0.038228f, 0.009137f, -0.012693f, -0.028694f, -0.013385f, -0.033301f, -0.062476f, 0.006966f, 0.003994f, -0.023237f, -0.006863f, -0.072889f, -0.041571f, -0.033934f, -0.085556f, 0.099197f, -0.001944f, 0.052330f, -0.011527f, 0.002766f, -0.059378f, -0.032512f, -0.030363f, 0.007146f, 0.047440f, -0.001886f, -0.048173f, -0.036208f, -0.069067f, -0.077348f, 0.067386f, 0.024921f, -0.059611f, -0.018398f, 0.030753f, 0.055862f, 0.008777f, -0.068439f, -0.040769f, 0.013992f, 0.020440f, 0.017526f, 0.041465f, -0.042361f, -0.039247f, -0.005790f, -0.012937f, 0.006121f, 0.013561f, -0.082281f, -0.013538f, -0.057262f, -0.035118f, -0.076532f, -0.027200f, 0.105822f, 0.020299f, 0.003705f, 0.028137f, 0.026474f, 0.010709f, 0.078625f, 0.064660f, -0.020282f, 0.023918f, + 0.105997f, -0.024652f, -0.024675f, -0.021943f, -0.078919f, 0.000595f, -0.043375f, -0.093971f, -0.103086f, -0.049466f, -0.053556f, 0.028900f, -0.040386f, 0.009039f, 0.020168f, -0.063285f, -0.025593f, 0.008622f, 0.004133f, 0.068056f, -0.045269f, 0.015480f, -0.051985f, -0.014251f, -0.056414f, 0.009622f, 0.063541f, 0.001226f, 0.038511f, -0.078431f, 0.069384f, 0.026822f, -0.016603f, 0.059575f, 0.006039f, 0.028798f, -0.024471f, -0.023600f, -0.002270f, 0.020552f, 0.011601f, -0.053435f, 0.050457f, -0.059484f, 0.006149f, 0.021066f, -0.022825f, 0.040622f, -0.040487f, -0.018533f, -0.005655f, -0.010176f, -0.021049f, -0.000492f, 0.007189f, -0.025044f, -0.035340f, -0.006983f, -0.007037f, -0.004172f, 0.019816f, 0.015661f, 0.007571f, -0.037003f, 0.010221f, 0.055159f, 0.066195f, -0.044561f, -0.025558f, 0.061929f, 0.077245f, -0.041993f, -0.029724f, 0.038258f, 0.013314f, -0.031807f, 0.030718f, -0.082088f, -0.017696f, 0.042180f, 0.070070f, 0.015850f, -0.043976f, -0.032319f, 0.010343f, 0.092127f, 0.006912f, 0.021190f, 0.001862f, 0.037617f, -0.006551f, 0.073944f, -0.002880f, -0.055283f, 0.038731f, -0.024243f, + -0.102741f, -0.032749f, 0.021201f, -0.039139f, 0.108006f, 0.073275f, 0.053559f, 0.023297f, 0.073921f, 0.046476f, 0.019875f, 0.030545f, -0.079866f, -0.115148f, -0.012279f, -0.002425f, -0.025495f, 0.011433f, -0.002091f, -0.032690f, -0.033382f, -0.033405f, 0.061115f, 0.046816f, -0.037079f, -0.008747f, -0.002377f, -0.013711f, -0.011091f, -0.024616f, -0.027276f, -0.046360f, -0.004914f, 0.071848f, -0.020884f, -0.045586f, -0.016767f, 0.067169f, -0.029827f, -0.036263f, 0.112914f, 0.035285f, 0.021737f, -0.030424f, -0.056946f, -0.045847f, -0.058837f, 0.012979f, 0.054576f, 0.134603f, -0.118356f, -0.055515f, 0.074703f, 0.094882f, 0.020570f, -0.009846f, 0.130226f, 0.056742f, -0.036729f, 0.036285f, -0.011308f, -0.003772f, -0.084599f, -0.048721f, -0.027451f, -0.148653f, -0.057887f, -0.028038f, 0.080739f, -0.047098f, -0.021216f, 0.052204f, -0.000925f, -0.014230f, 0.016637f, 0.032253f, 0.091246f, 0.034280f, -0.008237f, 0.024399f, -0.005231f, -0.007912f, -0.034415f, 0.016825f, 0.013440f, -0.026106f, -0.013583f, -0.096548f, -0.004534f, 0.040593f, -0.009968f, -0.039912f, 0.017143f, -0.008501f, 0.043111f, 0.009338f, + -0.021768f, 0.000272f, 0.046185f, -0.026017f, 0.006921f, 0.017525f, -0.014849f, 0.000221f, -0.025931f, 0.052307f, -0.003730f, 0.008347f, 0.000194f, 0.025640f, -0.011947f, -0.009035f, -0.016797f, 0.011036f, 0.018762f, -0.007779f, 0.022405f, -0.009232f, 0.013544f, -0.023451f, -0.019769f, 0.030240f, 0.037051f, -0.047896f, 0.001589f, 0.000966f, 0.003875f, 0.016319f, -0.031372f, 0.048068f, -0.042848f, 0.038958f, 0.004604f, -0.064629f, -0.004280f, 0.052630f, -0.067653f, 0.033358f, -0.000360f, 0.010213f, -0.016688f, -0.008277f, 0.013001f, -0.017418f, 0.068181f, -0.048391f, 0.007390f, -0.010800f, -0.005955f, 0.020355f, 0.001927f, -0.004477f, -0.049474f, -0.138682f, -0.198935f, 0.064844f, 0.172934f, 0.036192f, 0.482878f, 0.397085f, 0.266045f, 0.453505f, 0.232913f, -0.022017f, -0.063996f, -0.187727f, -0.425646f, -0.352885f, -0.344540f, -0.475602f, -0.355116f, -0.111527f, -0.086083f, -0.023649f, 0.149743f, 0.062910f, -0.034029f, 0.089022f, 0.155159f, 0.068118f, 0.063281f, 0.138331f, 0.074402f, 0.053085f, 0.121009f, 0.200872f, 0.070809f, 0.108175f, 0.184337f, 0.012519f, -0.010400f, 0.158082f, + 0.081827f, -0.096937f, 0.059835f, 0.084754f, -0.149181f, -0.066593f, 0.098146f, -0.060105f, -0.114022f, 0.132908f, 0.051352f, -0.144504f, 0.049301f, 0.077741f, -0.205916f, -0.197101f, -0.113441f, -0.439168f, -0.568954f, -0.378980f, -0.514518f, -0.668743f, -0.488333f, -0.501384f, -0.632477f, -0.519351f, -0.388719f, -0.419723f, -0.292059f, -0.080991f, 0.016320f, 0.152575f, 0.313738f, 0.408106f, 0.519923f, 0.569393f, 0.605801f, 0.477355f, 0.132426f, 0.006435f} + }, + { + {-0.013812f, -0.004739f, 0.001066f, -0.002851f, 0.000736f, 0.000244f, 0.007534f, -0.009808f, -0.005056f, -0.000901f, -0.004243f, -0.002640f, -0.007437f, 0.003630f, -0.007415f, -0.004358f, 0.001129f, 0.006013f, -0.007526f, 0.000036f, 0.000556f, -0.006042f, 0.002394f, 0.001135f, -0.002858f, 0.000562f, 0.003302f, 0.010859f, 0.002104f, 0.001420f, 0.004345f, 0.001814f, -0.000538f, 0.002236f, -0.002530f, 0.002325f, -0.009430f, -0.003408f, 0.002657f, -0.002102f, 0.010008f, -0.005262f, -0.003015f, -0.006340f, 0.002086f, 0.001896f, -0.001167f, 0.001637f, -0.001755f, -0.003058f, -0.005411f, -0.000612f, -0.000781f, 0.004443f, 0.006173f, 0.001689f, 0.004392f, 0.003213f, 0.000223f, 0.000781f, 0.000023f, -0.009515f, 0.001992f, -0.000093f, -0.005615f, 0.000400f, -0.005086f, 0.004639f, 0.004961f, -0.002676f, -0.004876f, -0.011462f, 0.003131f, 0.006387f, 0.005926f, -0.005542f, -0.000534f, 0.007509f, 0.018123f, 0.000265f, 0.000789f, -0.008678f, -0.006865f, 0.005175f, 0.003239f, 0.000433f, 0.007431f, -0.011177f, -0.003731f, 0.018013f, 0.001284f, 0.003478f, -0.004691f, -0.006134f, 0.008549f, 0.007061f, + -0.002912f, 0.006950f, 0.000366f, 0.001102f, -0.006812f, 0.002441f, -0.006191f, -0.004930f, -0.006073f, 0.002058f, 0.000339f, -0.002043f, -0.000596f, 0.002072f, 0.005474f, -0.002604f, -0.009701f, 0.000132f, -0.006874f, -0.008981f, -0.002215f, 0.003995f, -0.001234f, 0.003561f, 0.002439f, 0.003261f, -0.001245f, -0.001298f, -0.001503f, -0.001487f, 0.003216f, -0.000144f, 0.006423f, -0.000875f, 0.007922f, 0.001239f, 0.001992f, 0.007278f, 0.002884f, 0.001833f, 0.009770f, -0.003891f, 0.003465f, -0.003332f, -0.006324f, 0.006104f, -0.001807f, -0.000023f, 0.002733f, -0.001163f, -0.005033f, -0.001751f, 0.004606f, -0.002625f, 0.000560f, -0.005420f, 0.003418f, -0.023674f, -0.012373f, -0.005495f, -0.005206f, 0.000021f, 0.000001f, 0.001804f, 0.000273f, -0.001293f, -0.009785f, -0.004374f, -0.010029f, -0.015568f, -0.013104f, 0.007385f, 0.008999f, 0.009204f, -0.003693f, -0.001064f, -0.001114f, -0.002029f, 0.003297f, 0.001430f, -0.003403f, -0.007055f, 0.005006f, 0.004359f, 0.006273f, 0.001674f, -0.002233f, -0.003865f, 0.001712f, 0.003042f, -0.000820f, 0.006464f, -0.003242f, -0.000184f, 0.006182f, -0.004813f, + -0.007731f, 0.000599f, 0.010451f, 0.002413f, 0.002231f, 0.001462f, -0.000014f, 0.001333f, -0.001739f, 0.001856f, -0.008445f, 0.001335f, 0.008545f, -0.002011f, 0.000020f, 0.000826f, -0.003060f, -0.001689f, -0.001305f, -0.001449f, -0.002418f, 0.005249f, -0.005068f, 0.005145f, 0.004331f, 0.009660f, -0.000760f, 0.005397f, 0.012333f, -0.002366f, -0.010055f, -0.011303f, -0.000564f, -0.001587f, 0.000640f, -0.009682f, 0.002949f, -0.006754f, 0.016212f, 0.013278f, 0.005257f, 0.006942f, -0.004576f, 0.003293f, 0.011126f, 0.005877f, 0.012003f, -0.004490f, 0.004675f, 0.007332f, -0.000630f, 0.009319f, -0.004945f, 0.005940f, 0.000751f, -0.005466f, -0.001745f, -0.000783f, -0.000641f, -0.001328f, 0.000393f, -0.002585f, 0.000624f, -0.001805f, 0.010945f, -0.002267f, -0.000906f, 0.000291f, -0.005355f, -0.013954f, 0.007834f, -0.003059f, 0.002844f, -0.005338f, -0.005660f, -0.005728f, -0.004319f, 0.004055f, 0.010472f, 0.008849f, 0.003274f, -0.000254f, -0.002622f, 0.003786f, 0.007431f, -0.001342f, -0.002858f, 0.009979f, -0.004569f, 0.004994f, -0.005105f, -0.003331f, -0.002622f, 0.004005f, 0.003462f, -0.006282f, + -0.004982f, 0.000667f, 0.006854f, 0.009849f, 0.004703f, 0.007827f, -0.001379f, 0.007414f, 0.002285f, 0.007816f, -0.004450f, 0.003605f, 0.015921f, 0.008468f, 0.006428f, -0.000709f, -0.005279f, -0.010012f, 0.005028f, 0.019132f, 0.002534f, 0.007098f, 0.013583f, 0.000518f, -0.007944f, -0.003074f, -0.002427f, 0.000862f, -0.004983f, -0.013108f, 0.005391f, 0.000840f, 0.000309f, 0.006048f, -0.008882f, -0.003670f, 0.014140f, -0.002955f, -0.005201f, -0.007803f, 0.000426f, -0.007307f, -0.001143f, -0.002023f, -0.002165f, 0.001654f, 0.011597f, 0.000320f, -0.003296f, 0.004063f, -0.008729f, 0.012893f, -0.001207f, -0.001902f, 0.015524f, -0.007855f, 0.001132f, -0.009388f, -0.004266f, 0.001860f, 0.000972f, 0.005005f, 0.005315f, -0.008100f, 0.003319f, 0.005028f, 0.003764f, 0.002127f, 0.005021f, 0.004476f, 0.007076f, -0.004419f, -0.002323f, 0.013456f, -0.004119f, 0.006174f, 0.002066f, 0.005155f, 0.004094f, 0.000834f, -0.002954f, 0.001373f, 0.009648f, -0.002854f, 0.000770f, -0.000293f, 0.003439f, 0.010169f, -0.002557f, -0.006455f, -0.016219f, 0.004517f, 0.001595f, 0.002474f, 0.003120f, -0.001605f, + -0.006743f, -0.021743f, 0.011716f, -0.008122f, -0.010102f, -0.000923f, -0.020249f, 0.003240f, 0.008111f, -0.003840f, 0.017338f, -0.007518f, -0.017621f, 0.003137f, 0.008736f, -0.008095f, -0.012021f, 0.021647f, 0.000048f, -0.002828f, 0.007375f, -0.006556f, -0.001444f, 0.000909f, -0.009783f, 0.005176f, 0.000330f, 0.001811f, -0.000828f, 0.009345f, -0.001182f, 0.004597f, 0.006883f, -0.012130f, -0.003660f, -0.007479f, 0.012678f, -0.006992f, -0.001715f, 0.006953f, -0.001326f, -0.007752f, 0.006519f, 0.013970f, -0.006204f, 0.006037f, -0.006443f, 0.008657f, -0.003916f, 0.003839f, 0.002743f, -0.006997f, -0.014081f, 0.007305f, 0.013171f, -0.002629f, -0.001828f, 0.004969f, 0.009838f, 0.006148f, -0.008995f, -0.002882f, -0.007657f, -0.002562f, 0.005394f, -0.008433f, 0.004672f, 0.005749f, -0.005837f, -0.002046f, 0.003848f, -0.009671f, -0.003139f, 0.005003f, -0.002477f, 0.003110f, -0.000425f, -0.008213f, 0.010388f, -0.011407f, -0.011297f, -0.019399f, 0.008231f, 0.020572f, 0.003191f, -0.003627f, -0.001691f, -0.003385f, 0.017981f, -0.010637f, -0.009651f, -0.002207f, -0.010632f, -0.003193f, -0.011544f, -0.004922f, + -0.008035f, -0.016111f, -0.004362f, -0.003422f, -0.000347f, -0.001608f, 0.004467f, 0.009894f, 0.003735f, 0.005012f, -0.014642f, 0.002076f, 0.000079f, -0.004438f, 0.005532f, 0.003020f, -0.003979f, -0.001654f, -0.010228f, -0.011506f, -0.001284f, 0.013378f, -0.003360f, -0.006406f, -0.000932f, -0.004027f, -0.008638f, 0.000505f, -0.009003f, 0.019985f, 0.017181f, 0.004663f, -0.004373f, -0.004197f, 0.002468f, 0.003365f, 0.004184f, 0.003660f, -0.000333f, 0.007745f, -0.005991f, 0.003688f, -0.005071f, 0.000661f, 0.001053f, 0.004587f, 0.004113f, 0.009710f, -0.002595f, -0.005137f, -0.003573f, -0.020770f, 0.002511f, 0.005006f, 0.000083f, 0.008336f, 0.006281f, -0.005743f, -0.019247f, 0.002438f, 0.021262f, 0.018464f, -0.019902f, -0.019716f, 0.005700f, -0.015856f, -0.007175f, 0.001343f, -0.000239f, -0.006968f, 0.016338f, 0.006047f, -0.021060f, -0.002611f, 0.002122f, -0.001044f, 0.014801f, 0.004353f, -0.009340f, 0.013871f, 0.006315f, 0.001082f, -0.007058f, -0.009261f, 0.007134f, -0.006255f, -0.013979f, -0.003573f, -0.001087f, -0.007500f, -0.007994f, -0.012839f, 0.013583f, 0.000005f, 0.002746f, -0.009178f, + 0.001077f, 0.008122f, -0.006238f, -0.015953f, -0.014358f, 0.015078f, 0.004490f, 0.014172f, -0.001502f, 0.003383f, 0.012039f, 0.021683f, 0.008234f, -0.003818f, -0.010621f, -0.005958f, -0.004811f, 0.002425f, 0.002189f, -0.010054f, -0.002682f, 0.012099f, 0.010297f, 0.016787f, 0.009393f, -0.013515f, -0.010797f, 0.013607f, 0.008935f, -0.009041f, 0.001178f, 0.013898f, 0.002299f, -0.002330f, -0.010738f, 0.011414f, 0.010811f, -0.004408f, 0.018230f, 0.003433f, -0.008294f, 0.003354f, -0.003143f, -0.001541f, 0.009988f, -0.016615f, 0.010018f, -0.010840f, 0.001944f, 0.008924f, -0.000139f, -0.004304f, 0.003270f, -0.011325f, 0.000458f, -0.008773f, -0.025970f, -0.007761f, 0.011016f, 0.007309f, 0.004040f, -0.006113f, 0.005350f, 0.002593f, 0.027800f, 0.004993f, -0.009322f, 0.010559f, 0.002117f, 0.002448f, 0.018547f, -0.005057f, -0.005078f, 0.006687f, -0.012876f, 0.015927f, 0.014595f, -0.000049f, 0.008343f, -0.002736f, -0.007769f, -0.000721f, -0.009788f, 0.001173f, -0.009553f, 0.004178f, 0.000136f, 0.003200f, 0.001438f, -0.016419f, -0.003117f, -0.001756f, 0.001319f, -0.008036f, 0.004098f, 0.004191f, + -0.002747f, 0.022659f, -0.009143f, -0.019197f, 0.012375f, 0.019931f, 0.005091f, 0.005581f, -0.007778f, 0.017230f, -0.004779f, 0.003408f, 0.008513f, 0.002787f, -0.006324f, 0.008479f, 0.004888f, 0.001262f, 0.001691f, 0.056988f, -0.015868f, 0.000752f, -0.006043f, -0.003183f, -0.012918f, 0.000179f, -0.033448f, 0.017717f, -0.012178f, -0.000322f, 0.018961f, 0.010025f, -0.012945f, -0.013097f, -0.005300f, -0.011087f, 0.010397f, -0.026802f, 0.004934f, 0.012025f, 0.015592f, 0.003779f, 0.004600f, 0.001358f, 0.002505f, -0.002869f, -0.008650f, -0.024280f, -0.003703f, 0.004006f, 0.011563f, -0.008169f, 0.011181f, 0.005241f, -0.004475f, -0.000666f, 0.008734f, -0.008092f, -0.008434f, -0.003906f, -0.006376f, 0.000110f, -0.021975f, -0.009242f, -0.005041f, 0.000580f, 0.017881f, 0.005201f, 0.017114f, 0.007117f, -0.000388f, -0.009118f, 0.001712f, 0.002554f, 0.003035f, 0.007419f, 0.024051f, 0.004480f, -0.021428f, 0.007551f, -0.007979f, 0.001412f, -0.007579f, -0.007076f, -0.003551f, 0.011470f, 0.006723f, -0.036227f, -0.013649f, -0.008417f, 0.008472f, 0.002108f, -0.007220f, -0.000622f, 0.023052f, -0.002465f, + 0.012890f, -0.007972f, -0.010262f, 0.007864f, -0.018414f, 0.001813f, -0.042029f, 0.010778f, -0.014226f, 0.004764f, -0.014753f, -0.029759f, -0.005376f, -0.006359f, 0.020970f, 0.009917f, 0.007130f, 0.000015f, 0.028066f, -0.020837f, 0.004627f, 0.008911f, 0.021552f, -0.024811f, -0.015217f, -0.004307f, 0.001490f, -0.000955f, -0.007872f, -0.001616f, 0.007063f, -0.013007f, 0.002219f, 0.008902f, -0.002163f, 0.001869f, -0.011689f, -0.011968f, -0.008448f, 0.035097f, -0.000249f, -0.007599f, 0.012806f, -0.007503f, -0.017824f, -0.013417f, -0.009903f, -0.001750f, 0.005561f, 0.001993f, 0.000664f, 0.019778f, 0.016913f, -0.002456f, 0.005698f, 0.004877f, -0.022541f, -0.014477f, -0.001468f, -0.001151f, -0.006282f, -0.014458f, 0.017940f, 0.022815f, -0.018816f, 0.012488f, 0.010750f, -0.003216f, -0.018062f, -0.027969f, -0.027984f, -0.021019f, -0.013151f, -0.024517f, 0.001330f, -0.020470f, 0.010689f, -0.017209f, -0.013899f, -0.010121f, -0.010793f, -0.003777f, -0.024900f, 0.000848f, 0.027908f, -0.009975f, 0.014884f, -0.006056f, 0.027869f, 0.023038f, 0.010018f, -0.028799f, -0.006918f, 0.037928f, -0.009433f, 0.028065f, + 0.004884f, -0.027336f, -0.013267f, 0.031754f, 0.001196f, -0.021703f, 0.001045f, -0.018529f, -0.001945f, 0.006287f, 0.003241f, -0.003865f, -0.031208f, -0.028502f, 0.008520f, 0.020287f, -0.017449f, -0.001800f, 0.008794f, -0.001565f, 0.003997f, 0.033825f, 0.007196f, 0.004751f, 0.003948f, 0.011036f, -0.013987f, -0.010896f, -0.006571f, -0.036095f, -0.010915f, -0.013708f, -0.007925f, 0.009196f, 0.007803f, -0.002560f, -0.001960f, -0.014508f, -0.019733f, 0.027704f, -0.004105f, -0.025056f, -0.009403f, 0.004561f, 0.021197f, -0.015417f, -0.001956f, -0.016415f, 0.000134f, -0.019603f, -0.000004f, -0.004873f, -0.033565f, 0.002467f, -0.007127f, 0.025114f, 0.001530f, -0.022037f, -0.015831f, 0.012746f, -0.046048f, -0.024118f, -0.015598f, -0.025812f, -0.013223f, -0.010824f, -0.025971f, 0.027236f, -0.007659f, 0.041321f, -0.020738f, -0.032002f, -0.005789f, -0.021659f, 0.036302f, -0.012889f, -0.018617f, -0.009315f, 0.009989f, 0.017727f, 0.016050f, -0.004377f, -0.003864f, -0.008848f, 0.004327f, 0.029008f, -0.000417f, 0.002164f, -0.009162f, -0.004441f, -0.015128f, -0.005807f, 0.007298f, 0.004334f, -0.012402f, -0.000195f, + -0.018538f, 0.002954f, -0.005195f, -0.006588f, 0.008268f, 0.002655f, -0.008300f, -0.004560f, 0.016817f, 0.005023f, -0.012810f, -0.018838f, 0.030215f, -0.002632f, -0.046268f, 0.023149f, -0.004387f, -0.021386f, 0.010393f, -0.004420f, 0.003187f, -0.006224f, 0.017520f, 0.004539f, 0.003008f, 0.043220f, 0.046138f, -0.017882f, 0.006697f, -0.035902f, -0.004913f, -0.009120f, 0.016998f, -0.008198f, 0.005922f, 0.010140f, -0.005056f, 0.021224f, 0.055653f, -0.041707f, -0.013590f, -0.026355f, -0.017841f, 0.021281f, -0.024351f, 0.051323f, -0.006308f, 0.015721f, 0.002508f, 0.012477f, -0.032218f, 0.005833f, 0.007946f, -0.002401f, -0.005245f, -0.002887f, 0.008915f, -0.019699f, -0.012405f, -0.002955f, -0.006124f, -0.024410f, -0.022109f, -0.006040f, -0.010610f, 0.028883f, -0.008334f, -0.014231f, -0.010782f, 0.009606f, -0.015831f, -0.006846f, -0.026852f, 0.011608f, -0.010863f, 0.010103f, -0.010194f, 0.012949f, -0.008021f, -0.045544f, -0.023955f, 0.005793f, -0.004702f, -0.003640f, -0.015261f, -0.027659f, -0.002908f, 0.010684f, 0.006436f, -0.007230f, 0.007226f, 0.012457f, 0.040796f, -0.019600f, 0.018315f, -0.049309f, + 0.001058f, 0.005381f, -0.007805f, -0.015527f, 0.007373f, -0.000172f, -0.000348f, 0.008564f, 0.030904f, 0.020498f, 0.014049f, -0.011770f, -0.014698f, 0.013598f, -0.024990f, 0.001305f, 0.010904f, -0.016956f, 0.020773f, 0.067741f, 0.045173f, -0.010895f, -0.030924f, -0.018161f, 0.038512f, -0.045971f, 0.000960f, -0.010361f, -0.013275f, 0.021241f, -0.036520f, 0.006421f, -0.019435f, 0.001336f, -0.025862f, -0.016967f, 0.001305f, 0.003087f, -0.000540f, -0.021653f, 0.035933f, 0.009439f, -0.018246f, 0.008662f, -0.006432f, 0.005184f, 0.054348f, 0.019553f, -0.017047f, -0.011776f, 0.001257f, 0.019281f, 0.003230f, -0.039752f, -0.011708f, -0.026842f, -0.011059f, -0.011471f, 0.012685f, -0.005718f, -0.005370f, 0.001816f, -0.002835f, -0.018342f, -0.025152f, 0.017632f, -0.010383f, 0.006376f, -0.002490f, 0.022997f, -0.018242f, -0.009814f, 0.003928f, 0.010972f, -0.023695f, 0.027268f, -0.016975f, -0.034007f, -0.035263f, -0.009707f, -0.011072f, -0.012241f, -0.008931f, -0.049193f, 0.016936f, -0.021954f, -0.009102f, -0.017831f, 0.027367f, 0.012041f, 0.012411f, 0.002764f, -0.005784f, -0.022388f, -0.009926f, -0.064665f, + -0.008624f, 0.043929f, -0.053849f, -0.020724f, -0.001907f, -0.015851f, 0.018664f, -0.010648f, 0.059531f, -0.005641f, -0.013802f, -0.009584f, -0.003405f, 0.017996f, -0.012742f, -0.011289f, 0.048323f, -0.035696f, -0.005222f, 0.011715f, -0.008837f, 0.030988f, 0.016423f, -0.001930f, -0.004808f, 0.013228f, 0.016481f, 0.019153f, 0.014562f, 0.032621f, 0.009300f, 0.014054f, 0.007360f, -0.010532f, 0.053273f, 0.006829f, 0.008970f, 0.013687f, 0.006862f, 0.039168f, -0.004097f, 0.009527f, 0.012201f, 0.011132f, 0.005022f, 0.025636f, -0.016803f, -0.012724f, 0.024279f, -0.005155f, -0.027644f, -0.007171f, -0.047219f, -0.016044f, -0.010510f, 0.042488f, -0.042681f, -0.005986f, -0.000217f, -0.002189f, -0.004483f, 0.024558f, 0.067337f, -0.013101f, 0.006194f, 0.006959f, 0.007718f, 0.032193f, -0.039284f, -0.037971f, -0.037522f, 0.058526f, -0.000611f, -0.022428f, 0.047188f, -0.018452f, 0.037221f, 0.004933f, -0.040309f, -0.113028f, 0.021560f, -0.026044f, -0.045604f, 0.051049f, -0.031044f, -0.013804f, -0.044904f, 0.012814f, -0.009938f, -0.041057f, -0.015087f, -0.023741f, 0.010658f, -0.021853f, -0.000080f, 0.010712f, + 0.017942f, 0.011358f, 0.031241f, 0.006749f, -0.001410f, -0.001703f, -0.028469f, -0.019273f, -0.020592f, 0.017451f, 0.023109f, 0.013026f, 0.007499f, 0.001085f, 0.008259f, 0.020831f, 0.043234f, -0.019134f, -0.012750f, 0.009671f, -0.021200f, 0.023272f, 0.003590f, -0.017409f, 0.044079f, 0.018516f, -0.038985f, 0.017109f, -0.037526f, 0.006502f, 0.005994f, 0.021487f, -0.011351f, -0.009996f, 0.056397f, 0.024729f, -0.025607f, 0.017539f, 0.029406f, -0.020826f, -0.050936f, 0.030646f, -0.004950f, 0.002507f, 0.003167f, 0.015505f, 0.076631f, -0.003578f, 0.008668f, 0.018912f, -0.001418f, 0.022408f, 0.008992f, -0.035910f, 0.006736f, -0.015871f, -0.035052f, -0.041127f, 0.087729f, 0.018292f, -0.005340f, -0.010947f, 0.019997f, 0.078537f, 0.036492f, 0.008986f, -0.002050f, 0.025991f, 0.066171f, 0.015901f, 0.022931f, 0.020034f, 0.047192f, -0.030875f, 0.030601f, 0.012957f, -0.090172f, 0.026139f, -0.012674f, 0.026137f, -0.028046f, 0.020577f, 0.014146f, 0.027363f, -0.000201f, 0.011186f, 0.004394f, -0.026363f, 0.012748f, 0.024637f, -0.021369f, 0.011972f, -0.020778f, -0.013277f, 0.064627f, 0.005759f, + 0.057182f, -0.041676f, 0.017688f, -0.003011f, -0.008394f, -0.002239f, -0.005202f, 0.007915f, 0.020758f, 0.013545f, -0.001879f, 0.031685f, -0.052521f, -0.050315f, 0.035346f, -0.029155f, -0.007609f, -0.007746f, -0.034195f, 0.015785f, -0.009381f, 0.008327f, 0.004699f, 0.054154f, 0.026341f, 0.027866f, 0.010298f, 0.006433f, -0.051248f, -0.013064f, 0.023881f, -0.001928f, -0.000551f, -0.001416f, -0.017822f, -0.044731f, 0.021434f, -0.077998f, 0.066299f, -0.027295f, 0.012034f, 0.044893f, -0.064682f, -0.000524f, -0.006475f, 0.016535f, 0.022711f, 0.028593f, 0.046357f, 0.009056f, -0.031603f, 0.017846f, 0.049376f, -0.070735f, -0.043332f, 0.049120f, 0.001308f, 0.000552f, 0.001079f, 0.005020f, -0.002530f, -0.000372f, 0.023355f, 0.015943f, -0.035749f, 0.003001f, -0.011032f, 0.060692f, 0.034850f, -0.011486f, 0.002205f, 0.007939f, 0.005994f, 0.000318f, 0.020274f, 0.002877f, 0.015187f, 0.061818f, 0.006857f, 0.007099f, -0.010875f, 0.016345f, -0.059826f, -0.024548f, -0.026168f, -0.001972f, 0.004378f, -0.050680f, 0.018312f, -0.044899f, 0.013429f, 0.047876f, -0.012393f, -0.041807f, -0.024946f, 0.018342f, + -0.010556f, -0.085981f, 0.021412f, -0.059629f, -0.015636f, -0.006378f, -0.000520f, -0.022854f, 0.003559f, 0.032485f, -0.027832f, -0.054942f, -0.089346f, 0.071688f, 0.017578f, -0.003338f, 0.015048f, 0.094322f, -0.101644f, 0.039787f, 0.055148f, -0.067315f, -0.017754f, -0.037231f, -0.016950f, 0.093736f, -0.040779f, 0.065921f, -0.029527f, -0.011268f, -0.014857f, 0.020223f, 0.010794f, -0.084979f, -0.013355f, -0.023986f, 0.038079f, -0.000152f, 0.017325f, 0.026870f, -0.038184f, -0.009451f, -0.023550f, 0.012619f, 0.036116f, 0.019150f, -0.049979f, -0.010940f, 0.012781f, 0.005218f, -0.000956f, -0.026397f, -0.007849f, -0.048923f, -0.006288f, -0.008272f, 0.045826f, -0.040233f, 0.097274f, 0.019220f, -0.025302f, 0.040193f, 0.003937f, 0.052700f, 0.032147f, 0.049926f, 0.015152f, 0.045457f, 0.040945f, 0.044420f, 0.051132f, 0.005683f, 0.049546f, -0.062003f, -0.007950f, 0.010878f, -0.037315f, -0.008724f, 0.027328f, -0.048660f, -0.066253f, 0.025534f, 0.046517f, -0.000673f, 0.012072f, -0.050146f, -0.011473f, -0.042451f, -0.000782f, 0.043325f, 0.003398f, 0.083136f, 0.035825f, -0.023137f, 0.062290f, -0.131299f, + 0.119434f, -0.024236f, -0.044358f, -0.032243f, 0.081747f, -0.060959f, -0.013772f, -0.014786f, -0.004052f, 0.049490f, -0.054145f, -0.000777f, 0.016952f, -0.011419f, -0.009939f, 0.005156f, -0.031967f, 0.044858f, -0.000700f, -0.062691f, -0.019834f, -0.012082f, 0.001142f, -0.068973f, -0.003589f, 0.012912f, -0.017475f, 0.004898f, 0.017030f, 0.049468f, -0.021631f, -0.006973f, 0.006694f, -0.025703f, -0.097042f, 0.012748f, 0.071734f, -0.033407f, -0.060888f, 0.008787f, 0.057268f, -0.023209f, -0.021001f, -0.073007f, -0.015727f, 0.006760f, 0.052546f, 0.031123f, 0.003933f, -0.053393f, -0.036895f, 0.051961f, -0.058887f, 0.025448f, 0.088527f, 0.058040f, 0.067777f, -0.028139f, 0.037908f, 0.033005f, -0.083722f, -0.022535f, -0.046947f, -0.003359f, 0.042723f, 0.005380f, 0.046223f, 0.049391f, -0.084446f, 0.097171f, -0.059622f, 0.009369f, -0.002480f, -0.029539f, 0.077332f, 0.010303f, -0.047199f, 0.082100f, 0.055406f, 0.010112f, -0.017037f, -0.040060f, 0.022842f, -0.001545f, -0.005341f, -0.000900f, -0.002969f, 0.001950f, -0.017542f, 0.022041f, -0.001945f, -0.069953f, 0.016496f, 0.008264f, -0.026316f, 0.002801f, + 0.029535f, -0.008580f, 0.000629f, -0.049995f, 0.036364f, -0.016542f, -0.006998f, -0.003283f, 0.020135f, -0.026145f, -0.002390f, 0.008404f, -0.000467f, 0.007983f, -0.014633f, 0.040509f, -0.021402f, 0.069863f, -0.042911f, -0.042294f, 0.040705f, -0.044766f, 0.001331f, 0.037264f, -0.033518f, -0.012170f, 0.017629f, 0.024168f, 0.027894f, -0.100912f, 0.032003f, 0.001537f, -0.024474f, 0.068148f, -0.033634f, 0.006740f, -0.000305f, -0.052806f, 0.070806f, -0.000406f, -0.003489f, -0.034317f, -0.006963f, 0.062240f, -0.013692f, 0.001485f, 0.002659f, 0.021044f, 0.010495f, -0.068041f, 0.037099f, 0.070134f, -0.031884f, 0.032616f, -0.047110f, 0.094057f, 0.010083f, -0.063199f, -0.044947f, -0.149872f, -0.226701f, 0.014661f, 0.195670f, 0.002218f, 0.512189f, 0.463669f, 0.277444f, 0.535211f, 0.350999f, -0.059741f, 0.019064f, -0.070667f, -0.423933f, -0.241943f, -0.187674f, -0.414908f, -0.341344f, -0.102702f, -0.201508f, -0.231623f, -0.021258f, 0.010441f, -0.099654f, 0.017746f, 0.084334f, -0.115557f, -0.098515f, 0.145716f, 0.026831f, -0.040724f, 0.100408f, 0.135544f, -0.004676f, 0.138792f, 0.238791f, 0.081805f, + 0.061589f, 0.242490f, 0.162268f, 0.013948f, 0.176309f, 0.262289f, 0.111698f, 0.130305f, 0.299664f, 0.108647f, 0.034337f, 0.284528f, 0.280226f, 0.080130f, 0.338581f, 0.484167f, 0.174802f, 0.192395f, 0.334394f, 0.093986f, -0.122098f, 0.007905f, -0.125840f, -0.427570f, -0.407782f, -0.436137f, -0.691647f, -0.748139f, -0.797924f, -0.942924f, -0.984025f, -0.963033f, -0.934808f, -0.825490f, -0.736560f, -0.602712f, -0.386639f, -0.263248f, -0.014537f, 0.386460f, 0.334089f, 0.065555f}, + {-0.013861f, -0.005870f, 0.000823f, -0.005459f, -0.000702f, 0.006872f, -0.007999f, 0.003450f, -0.003475f, -0.003504f, -0.007449f, -0.002442f, 0.011322f, -0.008068f, 0.006433f, 0.003489f, -0.006159f, -0.000276f, -0.009061f, 0.002604f, -0.000753f, 0.005558f, -0.016272f, -0.007117f, -0.002165f, 0.003521f, -0.001352f, -0.005909f, -0.000019f, -0.001609f, -0.007437f, 0.007231f, -0.000014f, 0.002122f, 0.007805f, 0.000418f, -0.001935f, -0.001271f, -0.001493f, 0.000720f, -0.003364f, -0.005271f, -0.004332f, -0.004106f, -0.002323f, -0.002574f, 0.010531f, 0.006915f, 0.002549f, 0.002212f, 0.001931f, -0.002321f, -0.000710f, -0.002219f, 0.010002f, -0.001338f, 0.002650f, -0.006858f, 0.002569f, -0.000632f, 0.004066f, 0.002017f, 0.001412f, -0.002971f, 0.000501f, -0.001837f, 0.007803f, 0.000038f, 0.000888f, 0.003626f, 0.001967f, -0.004854f, 0.002329f, 0.001014f, -0.002422f, -0.000327f, 0.000114f, 0.005781f, 0.017463f, 0.004287f, 0.002261f, -0.003736f, -0.001794f, -0.008481f, -0.000705f, -0.001951f, 0.006249f, 0.006124f, -0.006223f, -0.003951f, -0.003900f, -0.003093f, -0.004540f, 0.000733f, 0.004884f, -0.003894f, + -0.004835f, -0.014389f, -0.011156f, -0.007668f, -0.000744f, 0.001043f, 0.010367f, -0.005672f, 0.004941f, 0.003540f, 0.002345f, 0.000886f, -0.008427f, 0.002292f, -0.017521f, 0.002316f, 0.000114f, 0.001031f, -0.001598f, -0.010337f, -0.005244f, -0.008887f, 0.000117f, 0.000791f, -0.005955f, -0.013931f, 0.009249f, -0.000493f, -0.008744f, 0.000143f, 0.005024f, 0.001373f, -0.003353f, 0.002171f, -0.005225f, -0.001877f, -0.004975f, 0.003564f, -0.005277f, 0.006790f, 0.004821f, -0.000954f, -0.009998f, 0.000590f, 0.000695f, -0.000758f, -0.004077f, 0.002440f, 0.001025f, -0.002119f, 0.004417f, 0.005534f, 0.003138f, 0.000311f, -0.000661f, 0.001641f, -0.005740f, -0.018906f, -0.021202f, -0.001519f, -0.008379f, 0.006463f, -0.010389f, 0.002593f, 0.004808f, -0.007106f, 0.005793f, 0.021202f, 0.001188f, -0.001977f, 0.011627f, 0.001551f, 0.011670f, 0.000153f, 0.005317f, -0.008381f, -0.011089f, -0.000629f, 0.004178f, -0.007729f, -0.002506f, -0.000813f, -0.002206f, 0.002076f, -0.002302f, -0.004099f, 0.003801f, -0.001949f, -0.001665f, 0.008306f, 0.011832f, -0.003740f, -0.006459f, 0.002337f, 0.009442f, 0.003582f, + 0.012113f, 0.000483f, -0.001808f, -0.000339f, 0.010779f, 0.000676f, -0.007903f, -0.004296f, 0.008414f, 0.006183f, 0.006502f, 0.001799f, -0.004403f, -0.008797f, 0.001557f, 0.004144f, 0.004933f, -0.001880f, -0.004837f, 0.009535f, 0.006128f, -0.001535f, -0.005615f, 0.000380f, -0.004041f, 0.009996f, 0.002648f, 0.001936f, 0.002706f, 0.001270f, 0.001506f, 0.006312f, 0.000399f, 0.006435f, -0.002062f, 0.010233f, -0.000061f, -0.008687f, 0.011189f, 0.007756f, 0.011779f, 0.012154f, -0.002875f, 0.006063f, -0.002565f, -0.006971f, -0.000594f, 0.018026f, 0.007966f, 0.003983f, 0.006485f, -0.007593f, 0.012941f, 0.005472f, 0.008688f, -0.002604f, -0.014256f, 0.005957f, -0.022273f, 0.004471f, -0.005649f, 0.004428f, 0.003572f, -0.000483f, -0.007630f, 0.001789f, 0.005071f, -0.003056f, 0.004760f, 0.011248f, -0.000753f, -0.009459f, -0.012732f, 0.001919f, 0.005779f, -0.011857f, 0.006611f, -0.011153f, -0.007155f, 0.007943f, -0.004603f, -0.009452f, -0.004491f, -0.006703f, 0.010405f, 0.014081f, 0.008109f, -0.005222f, 0.000136f, 0.007455f, 0.004605f, -0.000775f, -0.005722f, -0.002896f, -0.005010f, 0.005253f, + 0.017633f, -0.000299f, -0.009435f, -0.007684f, 0.004156f, 0.001252f, -0.003483f, -0.010575f, -0.000109f, -0.009090f, -0.003417f, 0.001214f, -0.001452f, 0.006889f, 0.001384f, 0.008738f, 0.010376f, -0.009018f, -0.003282f, 0.024821f, -0.006611f, 0.002325f, 0.003630f, -0.016548f, -0.013940f, 0.000239f, 0.016337f, 0.012288f, 0.019728f, 0.006345f, -0.005522f, -0.008629f, 0.001476f, -0.005034f, 0.003895f, 0.001697f, 0.006657f, 0.012031f, 0.003892f, 0.008806f, -0.000266f, 0.005122f, -0.005446f, -0.011628f, -0.005999f, -0.008971f, 0.000080f, -0.002702f, 0.002611f, -0.014161f, -0.006983f, -0.002158f, 0.005070f, -0.007178f, 0.014306f, -0.016540f, 0.003397f, -0.010561f, -0.008363f, 0.004331f, 0.004034f, 0.013469f, -0.001642f, 0.003079f, -0.004068f, 0.009262f, 0.010155f, 0.002372f, -0.002333f, -0.010956f, -0.001572f, 0.003051f, -0.008132f, 0.007431f, -0.008941f, 0.003142f, 0.014438f, 0.011518f, 0.000053f, -0.005458f, 0.002161f, 0.013737f, -0.001929f, 0.002663f, 0.002173f, 0.010867f, 0.000058f, -0.004363f, -0.007402f, 0.003790f, -0.011065f, 0.002322f, 0.023392f, 0.003360f, 0.011448f, -0.002805f, + -0.009445f, -0.015172f, 0.007481f, -0.010709f, -0.011774f, 0.002729f, -0.005882f, -0.036173f, 0.003201f, 0.006032f, 0.033123f, 0.011229f, 0.002147f, -0.014797f, 0.013618f, 0.006443f, -0.006391f, 0.007713f, -0.001582f, 0.012569f, -0.007648f, -0.003352f, -0.002773f, -0.002812f, -0.005335f, -0.001762f, 0.008352f, 0.007985f, 0.012792f, 0.005106f, 0.006141f, 0.000305f, -0.008771f, -0.008759f, 0.012129f, -0.006335f, 0.002509f, -0.000665f, -0.008976f, 0.013017f, -0.002319f, -0.004982f, 0.001981f, 0.009608f, -0.006278f, 0.014353f, -0.017775f, -0.014088f, -0.018008f, 0.004801f, -0.010195f, -0.014792f, -0.003637f, 0.014768f, -0.006148f, 0.004781f, 0.008403f, -0.005636f, -0.008091f, 0.001166f, 0.001322f, 0.005308f, 0.000928f, -0.003903f, -0.000400f, 0.018983f, 0.007995f, -0.006876f, -0.022873f, -0.017809f, 0.007188f, 0.022700f, 0.019018f, -0.013343f, 0.001247f, -0.007892f, 0.005051f, -0.006388f, 0.010666f, -0.018087f, -0.003216f, -0.022465f, -0.006745f, 0.003421f, 0.007723f, -0.020514f, -0.005290f, 0.014118f, -0.001889f, -0.020579f, 0.010459f, -0.006607f, -0.012006f, 0.006408f, 0.010548f, 0.002377f, + 0.001987f, 0.003631f, 0.013815f, -0.006817f, -0.006184f, 0.003545f, -0.007340f, -0.003739f, -0.000182f, -0.000996f, 0.000076f, 0.011082f, 0.005385f, -0.001577f, -0.001435f, 0.006317f, 0.002303f, 0.007792f, -0.001206f, 0.008803f, 0.009176f, 0.003467f, -0.011151f, 0.001089f, -0.002073f, -0.008020f, 0.009580f, -0.006313f, 0.003620f, -0.007580f, -0.003260f, -0.025841f, 0.001584f, 0.019775f, 0.001047f, 0.021002f, -0.004817f, -0.005715f, -0.023249f, 0.025384f, 0.011491f, 0.013983f, 0.001506f, 0.011178f, -0.001145f, -0.001319f, 0.009173f, -0.007360f, 0.002557f, -0.001596f, -0.026367f, 0.003973f, -0.007272f, 0.004524f, -0.005362f, 0.003379f, 0.021330f, 0.003401f, -0.029677f, -0.000218f, 0.021040f, -0.004025f, 0.012167f, -0.013137f, -0.010288f, -0.024247f, 0.013579f, 0.008180f, 0.015887f, 0.008525f, -0.008863f, 0.014759f, -0.004216f, 0.014164f, -0.009480f, -0.007346f, 0.000348f, -0.002184f, 0.010925f, 0.003244f, 0.009118f, 0.011744f, -0.007187f, -0.004754f, -0.004499f, 0.008030f, -0.002109f, -0.003799f, 0.000865f, -0.008985f, 0.004472f, 0.004342f, -0.005778f, 0.008145f, 0.012193f, -0.004242f, + -0.006386f, -0.000661f, -0.010233f, -0.003803f, 0.014131f, 0.002895f, -0.009658f, 0.018770f, -0.020190f, 0.004023f, 0.009986f, -0.003579f, -0.006995f, -0.000517f, 0.007871f, -0.014051f, 0.006999f, -0.005139f, -0.013379f, -0.008691f, -0.008281f, 0.001250f, -0.004177f, -0.007226f, 0.003036f, 0.023170f, 0.011726f, -0.002004f, -0.008156f, -0.020422f, 0.001700f, 0.012982f, -0.007633f, -0.022615f, -0.000136f, -0.002553f, 0.000122f, 0.004268f, 0.008668f, 0.009857f, -0.004452f, 0.002692f, 0.014042f, 0.001183f, 0.016501f, 0.018351f, 0.040183f, 0.027800f, 0.016729f, -0.003986f, -0.021495f, -0.007138f, 0.019472f, 0.008796f, -0.020730f, 0.015747f, -0.003671f, -0.009886f, -0.012681f, 0.002255f, 0.034852f, -0.023257f, 0.025217f, 0.010241f, -0.005420f, 0.008695f, -0.006781f, 0.018475f, -0.006870f, 0.009971f, 0.001985f, -0.012077f, -0.008662f, -0.011742f, 0.000609f, 0.010800f, -0.002813f, -0.006393f, 0.006854f, 0.001361f, -0.001850f, -0.023081f, 0.007412f, -0.012692f, -0.009696f, 0.007048f, 0.015902f, -0.010937f, -0.016150f, 0.001148f, 0.014482f, 0.001727f, -0.008939f, -0.002939f, -0.005064f, 0.006985f, + 0.005282f, -0.004844f, -0.008232f, -0.012813f, 0.009047f, 0.022058f, 0.014015f, 0.007339f, -0.011519f, 0.006980f, 0.014664f, -0.014814f, -0.018741f, 0.003825f, -0.015126f, -0.007748f, -0.030796f, 0.000101f, -0.020631f, 0.044429f, 0.000712f, -0.016984f, 0.019190f, -0.020980f, 0.024375f, 0.002310f, -0.015251f, -0.025376f, -0.006464f, 0.012938f, -0.020656f, 0.018469f, -0.003108f, 0.012034f, 0.013722f, -0.011599f, -0.005161f, -0.006834f, -0.009695f, -0.003337f, -0.009054f, 0.001856f, -0.011015f, 0.011691f, 0.007017f, 0.009880f, 0.019152f, 0.010307f, -0.002962f, 0.023371f, 0.011640f, 0.004649f, -0.012378f, -0.013035f, 0.006867f, -0.009877f, 0.002367f, 0.007682f, -0.015315f, 0.013562f, 0.035056f, 0.003101f, 0.024980f, 0.012221f, 0.012166f, 0.018215f, 0.001195f, 0.009867f, 0.010148f, -0.022205f, -0.015122f, 0.016088f, 0.001341f, 0.015214f, 0.002978f, 0.015953f, -0.002090f, 0.006040f, 0.004336f, -0.031987f, -0.001577f, 0.008813f, 0.022368f, 0.005323f, 0.019801f, 0.002408f, -0.003617f, 0.006714f, 0.009558f, -0.017769f, -0.029638f, -0.015847f, 0.005583f, 0.007868f, 0.002523f, 0.021383f, + 0.008625f, -0.020595f, -0.002637f, -0.018240f, -0.009739f, 0.008854f, -0.010412f, 0.005130f, 0.005743f, -0.010571f, -0.029153f, 0.009988f, -0.028885f, -0.031460f, 0.006276f, -0.014998f, 0.013534f, 0.021290f, -0.005956f, 0.024704f, -0.006495f, 0.024434f, 0.031254f, 0.001026f, 0.001148f, -0.031311f, -0.006850f, 0.004534f, 0.004789f, -0.002725f, -0.022032f, 0.002559f, -0.018773f, 0.003395f, -0.005608f, 0.006030f, -0.007674f, -0.010800f, 0.001959f, -0.000959f, -0.007341f, 0.008778f, -0.000007f, -0.003702f, 0.022345f, 0.009843f, 0.016576f, -0.009672f, 0.002413f, -0.007915f, 0.005815f, -0.000695f, 0.008284f, -0.001634f, -0.007679f, -0.007402f, -0.021292f, -0.010553f, 0.032134f, 0.014931f, 0.021000f, -0.023686f, 0.004424f, 0.020432f, -0.016895f, 0.001928f, 0.011256f, -0.004765f, 0.011250f, 0.003701f, -0.023204f, -0.003728f, -0.035223f, -0.002168f, 0.012385f, 0.008959f, 0.021038f, -0.019907f, -0.019794f, -0.018825f, -0.030067f, 0.020751f, 0.011643f, 0.002737f, -0.020663f, 0.018555f, -0.001380f, -0.023665f, -0.021363f, -0.006125f, -0.006302f, -0.014870f, -0.007532f, -0.008485f, -0.009283f, -0.004994f, + -0.024148f, 0.012191f, 0.011868f, -0.000394f, -0.003613f, -0.003378f, -0.009945f, -0.026253f, -0.031055f, 0.001645f, 0.011143f, -0.007050f, -0.019846f, -0.009473f, 0.012057f, 0.010873f, -0.001150f, -0.004971f, -0.009686f, -0.007196f, 0.015512f, -0.008193f, 0.010244f, -0.007712f, -0.001759f, -0.028661f, -0.008612f, -0.001592f, 0.019864f, 0.006835f, -0.007614f, -0.015754f, -0.014026f, -0.022323f, 0.034632f, -0.016322f, 0.032602f, 0.005407f, -0.018279f, 0.024339f, 0.019804f, 0.040834f, -0.042467f, 0.017331f, 0.002740f, 0.006604f, -0.011860f, -0.009641f, 0.012666f, 0.010814f, -0.008178f, -0.015958f, 0.014230f, -0.007614f, 0.014292f, 0.022417f, 0.006620f, -0.008034f, 0.009564f, 0.030505f, -0.051827f, -0.058146f, -0.034622f, -0.007237f, -0.023832f, 0.014010f, -0.019445f, 0.000789f, 0.011230f, -0.002883f, 0.038453f, 0.025625f, 0.010503f, -0.012412f, -0.007457f, 0.024777f, -0.003532f, 0.002571f, -0.009929f, -0.024945f, 0.000843f, 0.007916f, 0.007011f, -0.014475f, 0.012034f, -0.000017f, -0.000888f, 0.020551f, 0.031195f, 0.000481f, -0.019032f, -0.010183f, -0.037057f, -0.016344f, -0.009283f, -0.013110f, + 0.002051f, 0.004686f, -0.013355f, -0.007385f, -0.018867f, 0.018597f, 0.024827f, 0.018551f, 0.023110f, 0.016049f, 0.030135f, 0.001574f, 0.010230f, 0.004982f, -0.005703f, 0.009390f, 0.017631f, -0.020333f, -0.062821f, -0.016874f, 0.020083f, -0.034730f, 0.015668f, 0.017870f, 0.006366f, -0.012400f, 0.000329f, -0.010418f, -0.026552f, -0.009557f, 0.014429f, -0.022857f, -0.019254f, 0.003089f, -0.016657f, 0.037563f, 0.037546f, -0.018418f, 0.049027f, -0.040974f, -0.002677f, 0.009118f, -0.042885f, -0.010244f, -0.019211f, 0.008031f, -0.014433f, 0.037432f, 0.002642f, 0.001415f, 0.042457f, -0.000657f, -0.041350f, -0.029707f, -0.021326f, 0.017075f, -0.004326f, -0.036299f, 0.007721f, 0.012496f, 0.017972f, -0.020830f, 0.009417f, 0.021191f, 0.014663f, 0.015391f, -0.006827f, 0.024977f, 0.022728f, 0.010341f, -0.057802f, 0.042545f, -0.022201f, 0.017596f, -0.006363f, -0.003800f, 0.008291f, -0.022628f, -0.016469f, 0.028132f, -0.014395f, -0.001367f, 0.021117f, -0.024355f, 0.021196f, -0.007079f, 0.019434f, -0.026967f, 0.036149f, -0.015086f, 0.057323f, -0.005626f, 0.000906f, 0.017768f, -0.016278f, -0.007492f, + -0.010408f, 0.007367f, -0.006326f, -0.027676f, -0.041420f, -0.007788f, 0.018443f, -0.008507f, -0.017687f, -0.035616f, 0.013628f, 0.007415f, -0.057586f, 0.003121f, -0.004635f, 0.012480f, 0.020721f, -0.012213f, 0.018080f, 0.060591f, 0.027939f, -0.016504f, 0.039166f, 0.014885f, -0.027572f, 0.011488f, 0.024721f, -0.002607f, -0.010570f, -0.034833f, -0.011474f, 0.023835f, 0.012964f, 0.012097f, 0.004896f, -0.005102f, -0.016288f, -0.032816f, 0.016474f, -0.010238f, 0.007287f, -0.024861f, -0.016080f, 0.000790f, -0.005937f, 0.035138f, 0.008218f, 0.006830f, 0.023805f, 0.013855f, -0.041069f, -0.003078f, 0.012161f, -0.005815f, -0.001369f, 0.034804f, 0.008697f, 0.040185f, -0.024838f, -0.012618f, -0.008778f, -0.012815f, 0.012622f, -0.013388f, 0.026449f, 0.030661f, -0.015530f, -0.026572f, 0.044490f, -0.022602f, -0.012954f, -0.003810f, 0.010835f, 0.009189f, -0.029964f, -0.005824f, 0.013157f, -0.010383f, 0.017390f, -0.007806f, 0.025965f, -0.013259f, 0.001945f, 0.049311f, -0.006458f, 0.035884f, 0.050434f, 0.010719f, 0.020424f, -0.010262f, -0.077461f, -0.041252f, -0.021292f, 0.003416f, 0.016990f, -0.077599f, + -0.018021f, 0.080001f, -0.030521f, -0.035114f, 0.071457f, -0.046255f, 0.040372f, 0.052876f, 0.021418f, 0.006635f, -0.040468f, 0.014792f, -0.071190f, -0.035976f, 0.015721f, 0.036216f, 0.004255f, 0.007627f, 0.027050f, 0.071187f, 0.048743f, 0.014209f, 0.002596f, -0.001179f, 0.007879f, 0.004806f, -0.028214f, -0.000621f, 0.017595f, 0.021296f, 0.095989f, 0.052937f, 0.036727f, 0.068126f, 0.027964f, -0.011461f, 0.020371f, -0.002895f, 0.066037f, 0.022449f, -0.006120f, -0.012876f, 0.027082f, -0.006155f, 0.031121f, -0.101328f, 0.003342f, 0.032110f, -0.003109f, 0.039171f, -0.016661f, 0.008555f, 0.020756f, -0.095060f, -0.037200f, -0.010006f, -0.031246f, -0.041306f, -0.046989f, 0.039016f, -0.029690f, 0.004849f, -0.010807f, 0.038432f, -0.072222f, -0.023593f, -0.013013f, 0.016606f, -0.004241f, -0.012603f, 0.046240f, 0.081627f, -0.007373f, 0.017278f, -0.028184f, -0.011002f, 0.037833f, 0.040829f, -0.038706f, -0.118778f, -0.026279f, 0.054306f, 0.007308f, -0.009713f, -0.014040f, 0.007799f, -0.021345f, -0.018537f, 0.022653f, 0.024193f, 0.051365f, 0.024325f, 0.029055f, -0.008564f, 0.069730f, 0.017473f, + 0.042488f, -0.002548f, 0.063862f, -0.021897f, 0.039922f, -0.039327f, -0.004399f, 0.009015f, 0.027039f, -0.008308f, -0.028722f, -0.053218f, 0.027031f, 0.008593f, 0.001473f, -0.023368f, -0.056791f, 0.001361f, 0.000698f, -0.001740f, 0.010410f, 0.037955f, -0.000509f, 0.028606f, 0.079211f, -0.030738f, 0.002688f, -0.022823f, 0.037845f, 0.043363f, -0.048767f, 0.045754f, 0.039506f, -0.027015f, 0.005021f, 0.016877f, 0.024895f, 0.022123f, 0.057399f, 0.027175f, -0.030526f, 0.011175f, 0.075488f, 0.034361f, -0.104079f, 0.036816f, 0.007859f, -0.072609f, -0.032962f, -0.015470f, -0.069380f, 0.016829f, 0.022706f, 0.054624f, -0.039702f, 0.090635f, -0.075599f, 0.061157f, 0.133503f, 0.008286f, -0.073403f, 0.113989f, -0.025358f, -0.002404f, 0.016802f, 0.064242f, -0.036991f, 0.001935f, 0.130580f, -0.065474f, 0.031347f, 0.042888f, 0.042399f, -0.058796f, -0.005549f, 0.009216f, -0.028051f, 0.003725f, 0.013789f, -0.024768f, 0.023302f, -0.041187f, -0.011126f, -0.017415f, -0.002874f, -0.025476f, -0.020804f, -0.009404f, 0.012633f, -0.045212f, -0.040507f, 0.059089f, 0.011129f, -0.040269f, -0.009978f, 0.034095f, + 0.088105f, -0.010026f, -0.042942f, 0.043446f, 0.067550f, -0.022318f, -0.005030f, -0.001130f, 0.024438f, -0.002914f, 0.000040f, 0.027382f, -0.074644f, 0.047596f, -0.043073f, -0.003338f, -0.061039f, 0.030034f, -0.004787f, -0.095726f, 0.044990f, -0.011505f, -0.035246f, 0.056033f, 0.007281f, 0.054795f, -0.051355f, -0.026363f, -0.020649f, -0.054987f, -0.073648f, -0.105933f, 0.083151f, 0.024729f, 0.061228f, 0.046511f, -0.000156f, -0.020032f, 0.070201f, -0.027664f, 0.019343f, 0.018312f, -0.076958f, 0.068847f, 0.021348f, -0.017771f, 0.055522f, 0.006220f, 0.001515f, 0.029561f, -0.027525f, 0.074971f, -0.061704f, -0.030535f, 0.024900f, 0.026468f, 0.009872f, -0.054055f, -0.036284f, -0.060428f, 0.031046f, 0.008979f, 0.028018f, 0.000796f, 0.030214f, 0.014082f, 0.007988f, 0.001909f, 0.025107f, -0.012308f, 0.012255f, -0.027650f, 0.017560f, -0.025622f, -0.003815f, -0.034017f, -0.028028f, 0.001534f, -0.034281f, 0.014257f, 0.068598f, 0.017235f, -0.058511f, 0.028153f, 0.017569f, 0.038142f, -0.003342f, 0.063528f, -0.059602f, 0.007808f, 0.020744f, -0.053819f, -0.017382f, 0.106178f, 0.055055f, -0.142808f, + -0.065671f, 0.074112f, -0.026381f, -0.068747f, 0.020368f, -0.008651f, -0.058459f, 0.035971f, 0.057353f, -0.089865f, 0.009491f, 0.074573f, -0.061302f, -0.050962f, 0.053465f, 0.003781f, -0.061196f, 0.057461f, -0.130014f, -0.014735f, -0.018695f, -0.155380f, -0.021635f, -0.051396f, 0.020057f, 0.020854f, 0.049840f, -0.024798f, -0.053230f, -0.027080f, -0.079157f, 0.006449f, 0.035806f, 0.012671f, 0.019015f, -0.072880f, 0.047402f, 0.001843f, -0.076096f, 0.054998f, -0.082191f, -0.040700f, -0.027153f, 0.019187f, 0.069573f, 0.069160f, -0.000052f, -0.021253f, -0.136265f, 0.056524f, 0.150316f, 0.047961f, 0.009582f, -0.083755f, -0.109674f, -0.052209f, -0.003325f, 0.056090f, -0.066093f, -0.047933f, -0.067956f, -0.028287f, 0.141483f, 0.140696f, -0.018322f, -0.071411f, -0.050548f, -0.035187f, -0.008040f, 0.068663f, -0.027279f, 0.017417f, 0.022930f, 0.044176f, -0.005457f, -0.037267f, -0.076611f, -0.041289f, 0.137657f, 0.050784f, 0.094811f, -0.083441f, -0.034451f, -0.041203f, 0.097650f, -0.003039f, -0.132426f, -0.142981f, 0.088639f, 0.127210f, 0.235844f, 0.031816f, -0.173602f, 0.018319f, -0.017557f, -0.065621f, + 0.055585f, -0.058273f, -0.016023f, 0.004877f, 0.012624f, -0.008910f, 0.011003f, 0.026245f, -0.042156f, -0.031209f, -0.003662f, 0.011418f, 0.022265f, -0.025944f, 0.001023f, 0.024168f, -0.019878f, 0.015970f, -0.011812f, 0.068870f, -0.004047f, -0.007673f, 0.035072f, 0.023265f, 0.030776f, -0.014862f, 0.018461f, -0.004613f, -0.004180f, 0.030270f, 0.016598f, 0.006909f, 0.004998f, 0.039991f, -0.038636f, -0.008428f, 0.000309f, 0.053140f, -0.004336f, -0.009302f, 0.043807f, -0.009891f, -0.024239f, -0.018367f, 0.035551f, -0.007192f, 0.013363f, 0.012609f, 0.002110f, -0.011697f, 0.003102f, 0.017383f, 0.001360f, 0.046402f, 0.017855f, 0.014648f, -0.023478f, -0.000856f, 0.012509f, -0.029622f, 0.006848f, 0.014035f, 0.027944f, 0.002402f, -0.008817f, 0.020389f, -0.001111f, -0.034922f, 0.035833f, 0.014338f, -0.015633f, 0.035842f, -0.030042f, -0.001704f, -0.025740f, -0.014124f, 0.012587f, 0.106515f, 0.009153f, -0.040050f, -0.032201f, 0.004824f, 0.024769f, -0.001954f, 0.022677f, -0.008866f, -0.005321f, -0.030124f, -0.005914f, -0.021208f, 0.033673f, -0.021074f, -0.001040f, -0.013434f, -0.005499f, -0.008020f, + 0.004295f, -0.022304f, 0.004062f, -0.009784f, -0.014770f, 0.004248f, -0.001743f, 0.000971f, -0.003454f, 0.007488f, 0.004481f, -0.018593f, -0.011039f, -0.000209f, -0.011681f, -0.011008f, 0.009900f, -0.003119f, -0.017976f, 0.001132f, -0.009631f, 0.007918f, -0.026915f, 0.013803f, -0.011227f, -0.021080f, 0.007236f, -0.009648f, -0.010070f, 0.002879f, 0.000667f, 0.001372f, -0.003764f, 0.004752f, -0.007631f, 0.009512f, -0.004972f, 0.001158f, 0.016311f, -0.010964f, 0.006028f, -0.002702f, -0.000816f, 0.004499f, -0.011986f, 0.011960f, -0.012675f, 0.011995f, -0.002093f, -0.000115f, -0.007977f, 0.011518f, -0.012437f, 0.001548f, 0.004722f, -0.015934f, 0.016162f, -0.008048f, -0.050443f, -0.084267f, 0.089235f, 0.305231f, 0.059823f, 0.090801f, -0.187623f, -0.263580f, -0.108548f, -0.138615f, 0.107142f, 0.244760f, 0.142470f, 0.093702f, 0.010534f, -0.136859f, -0.119006f, -0.121327f, -0.048088f, 0.066765f, 0.059067f, 0.060711f, 0.056746f, -0.003230f, -0.008076f, -0.015624f, -0.018401f, -0.029868f, -0.002923f, 0.036185f, -0.002437f, -0.023319f, -0.007682f, -0.033064f, -0.016893f, -0.007012f, -0.007007f, 0.058832f, + 0.056959f, 0.031630f, 0.036440f, 0.000221f, -0.042827f, -0.046100f, -0.080815f, -0.056014f, 0.008209f, 0.004936f, 0.017346f, 0.046369f, 0.069215f, 0.039335f, 0.035148f, -0.003447f, -0.038250f, -0.055953f, -0.046117f, -0.041130f, 0.006059f, 0.011869f, 0.025495f, 0.015173f, 0.011827f, 0.000210f, -0.013961f, 0.003114f, 0.001412f, 0.003305f, 0.033940f, -0.006024f, 0.014728f, 0.012367f, -0.026006f, -0.051458f, -0.050365f, -0.048489f, 0.011012f, 0.027496f, 0.011013f, 0.000717f} + }, + { + {-0.008059f, -0.005875f, 0.001286f, -0.005162f, -0.003196f, -0.002335f, -0.000658f, -0.000829f, -0.003333f, -0.009998f, -0.007446f, -0.005293f, -0.002600f, -0.007229f, 0.003015f, -0.001677f, 0.001190f, -0.002989f, -0.001072f, -0.004525f, 0.004732f, 0.000934f, -0.003315f, -0.005961f, 0.000583f, 0.006690f, 0.003686f, -0.006808f, -0.006538f, 0.001222f, 0.000559f, 0.000765f, -0.004552f, 0.000988f, -0.001646f, -0.002945f, -0.000874f, -0.002776f, -0.004192f, -0.001959f, -0.007132f, 0.009224f, 0.002581f, 0.006406f, -0.006208f, -0.010518f, -0.000828f, 0.001353f, -0.001166f, -0.009767f, 0.000570f, -0.002429f, 0.005761f, 0.003895f, 0.004326f, 0.009934f, -0.001717f, -0.000350f, -0.003033f, -0.001500f, 0.003604f, -0.006764f, 0.007948f, 0.009509f, -0.004479f, -0.003122f, -0.007930f, -0.004152f, 0.001607f, -0.002412f, -0.004781f, 0.000525f, -0.005047f, -0.002600f, -0.006397f, -0.005346f, -0.005880f, 0.003920f, 0.011890f, 0.000848f, 0.007993f, -0.001963f, -0.001038f, -0.004412f, 0.008503f, 0.005131f, -0.004835f, -0.006694f, 0.004325f, -0.001854f, -0.009917f, -0.011797f, 0.002834f, 0.000361f, -0.003832f, -0.004179f, + -0.007726f, 0.004744f, -0.009106f, 0.002097f, -0.000836f, 0.001816f, 0.000822f, 0.001689f, -0.004061f, -0.000894f, 0.001689f, 0.002330f, -0.000883f, 0.002903f, 0.002413f, -0.004417f, 0.003125f, -0.002828f, -0.007772f, 0.010729f, -0.002082f, 0.000100f, 0.002700f, -0.001825f, 0.006183f, 0.007378f, -0.001628f, 0.002454f, 0.005945f, -0.000025f, -0.006196f, -0.005342f, 0.001629f, 0.003131f, -0.001833f, 0.001396f, 0.007298f, -0.007057f, -0.005660f, 0.005257f, 0.001229f, -0.003201f, -0.003780f, -0.001067f, 0.001482f, 0.003565f, -0.007167f, 0.002478f, 0.002009f, -0.006946f, -0.005973f, 0.003807f, -0.003126f, -0.009255f, -0.002945f, -0.002853f, 0.011723f, 0.009821f, -0.014554f, -0.006155f, -0.010065f, 0.006637f, -0.004924f, -0.006673f, -0.004671f, -0.005970f, -0.001285f, 0.002351f, 0.010866f, 0.002001f, -0.005914f, 0.009350f, 0.000296f, 0.009639f, -0.009208f, 0.014866f, 0.006786f, 0.016119f, -0.002921f, -0.005315f, -0.001146f, -0.008668f, -0.000790f, -0.000492f, -0.003225f, 0.003130f, 0.000265f, -0.006846f, -0.001720f, 0.000121f, 0.002145f, 0.007089f, 0.001588f, -0.010295f, -0.008710f, -0.003144f, + 0.005870f, 0.000551f, 0.000295f, -0.005131f, 0.008715f, -0.000068f, 0.000659f, -0.003579f, 0.001139f, -0.002089f, 0.004605f, -0.001297f, 0.014553f, 0.000311f, -0.001853f, 0.005691f, -0.003597f, -0.006328f, -0.002624f, 0.005119f, 0.008843f, 0.001665f, 0.005464f, 0.001540f, 0.001023f, -0.004378f, -0.004366f, -0.007141f, -0.000174f, -0.007399f, 0.002080f, 0.006500f, 0.006864f, 0.004965f, -0.002109f, -0.003066f, 0.006316f, 0.010465f, 0.010574f, 0.006118f, -0.000358f, 0.009252f, -0.005194f, -0.007266f, 0.007008f, 0.007998f, 0.009357f, 0.014659f, 0.000976f, -0.008855f, 0.004921f, -0.008441f, -0.000977f, 0.003193f, 0.001695f, 0.016255f, 0.000857f, -0.012619f, -0.001010f, 0.002545f, 0.004984f, -0.000691f, -0.004809f, -0.013944f, -0.003235f, 0.012252f, 0.003696f, 0.008126f, 0.008788f, 0.007909f, 0.001651f, -0.001142f, 0.007721f, -0.010337f, -0.000857f, -0.006974f, 0.018656f, -0.000863f, -0.000041f, 0.008724f, -0.007729f, -0.000954f, 0.002375f, -0.000916f, 0.010801f, -0.001613f, 0.002773f, 0.011118f, -0.002854f, 0.003588f, 0.000155f, -0.000384f, -0.000903f, -0.001296f, -0.004007f, 0.004886f, + 0.005480f, -0.001392f, 0.005400f, 0.002463f, 0.011541f, 0.014487f, -0.001825f, 0.004002f, 0.001229f, -0.007048f, 0.005868f, -0.001563f, -0.007377f, 0.002762f, 0.005518f, 0.002240f, -0.003455f, 0.015720f, 0.015887f, -0.006403f, -0.008713f, -0.008071f, -0.005133f, 0.003778f, -0.016862f, -0.001897f, 0.002606f, -0.008413f, -0.014914f, 0.014484f, -0.002948f, -0.003919f, 0.002582f, 0.006566f, 0.006263f, -0.007713f, -0.002765f, -0.000505f, -0.000602f, 0.003342f, 0.005390f, -0.003039f, 0.006577f, -0.004952f, 0.009969f, -0.001344f, 0.000596f, -0.005166f, 0.005352f, 0.001742f, -0.001298f, -0.005136f, 0.002548f, -0.002977f, -0.004184f, -0.003803f, 0.001041f, 0.003083f, -0.009074f, 0.000666f, -0.017275f, -0.010195f, 0.006411f, -0.002736f, 0.002213f, 0.003788f, 0.011593f, -0.003791f, -0.005679f, -0.000489f, 0.000450f, 0.004750f, 0.004711f, -0.005441f, -0.002318f, 0.012616f, 0.000503f, 0.001886f, 0.001067f, 0.005602f, -0.010620f, 0.000330f, 0.005263f, 0.009835f, 0.001921f, 0.004230f, 0.014767f, -0.003675f, -0.001709f, -0.008077f, -0.000307f, 0.002555f, 0.004656f, -0.009986f, -0.015994f, 0.006927f, + -0.005333f, 0.000439f, -0.008328f, 0.006459f, -0.018473f, -0.014899f, -0.017444f, -0.005699f, -0.003858f, -0.011942f, 0.005939f, 0.016585f, -0.012364f, 0.002630f, 0.019132f, -0.004407f, -0.005528f, -0.008846f, 0.001316f, 0.000003f, 0.008310f, 0.002849f, 0.005884f, 0.004358f, -0.006602f, -0.012280f, -0.006170f, 0.007361f, -0.004502f, -0.007523f, 0.001554f, 0.003100f, 0.002056f, 0.001543f, 0.016474f, -0.007987f, 0.008776f, -0.004432f, 0.004186f, -0.004958f, 0.013582f, -0.010502f, 0.005260f, -0.000933f, -0.008824f, 0.007685f, -0.003608f, -0.002854f, 0.007821f, 0.004342f, -0.001290f, -0.003812f, 0.006999f, 0.003617f, -0.008458f, -0.009513f, 0.005743f, 0.010211f, 0.005121f, 0.000072f, -0.005271f, 0.000347f, 0.005804f, -0.003041f, 0.007130f, -0.002078f, -0.017194f, 0.000318f, -0.008124f, 0.023003f, 0.007080f, -0.013238f, -0.008320f, -0.001853f, 0.000074f, 0.006682f, -0.014137f, -0.015864f, 0.013492f, -0.002396f, -0.014120f, 0.001748f, -0.004179f, 0.014365f, 0.006100f, -0.002913f, 0.001791f, -0.000114f, -0.002847f, -0.001904f, 0.015170f, 0.003666f, 0.000017f, -0.010400f, -0.005856f, -0.002061f, + 0.004710f, 0.007494f, 0.020597f, 0.000986f, -0.000243f, -0.000237f, 0.000483f, -0.009065f, -0.000586f, 0.004282f, -0.012812f, -0.007963f, -0.008701f, -0.000647f, 0.014612f, -0.012505f, 0.001025f, 0.007443f, 0.001917f, -0.005752f, 0.005312f, -0.015769f, 0.011776f, -0.002659f, -0.001328f, 0.007224f, -0.009457f, -0.009366f, -0.016107f, 0.003171f, -0.006294f, 0.013921f, 0.003275f, 0.000322f, 0.001022f, 0.004162f, 0.009201f, -0.004937f, -0.004190f, 0.011219f, -0.004228f, -0.006723f, -0.002240f, 0.011104f, 0.009415f, 0.010164f, 0.003404f, -0.007473f, 0.004255f, 0.008962f, -0.014059f, 0.013696f, -0.012074f, -0.009159f, 0.008761f, -0.030231f, -0.018735f, 0.004526f, 0.010204f, 0.019487f, -0.011578f, 0.010141f, 0.002748f, 0.010722f, 0.000151f, -0.006005f, -0.006197f, 0.006372f, 0.021654f, 0.001101f, -0.001088f, -0.020611f, -0.015944f, -0.000544f, -0.011518f, -0.007861f, 0.001468f, 0.001882f, -0.011820f, -0.004387f, 0.003810f, 0.006773f, 0.004701f, -0.008736f, 0.000738f, 0.008799f, 0.008408f, 0.001012f, -0.006950f, 0.000865f, -0.003955f, 0.001728f, 0.003399f, 0.003777f, -0.005177f, 0.006943f, + 0.018977f, -0.002344f, -0.000598f, 0.003065f, -0.009398f, 0.004348f, 0.015420f, -0.014879f, -0.016309f, -0.009214f, 0.002152f, -0.022443f, 0.001281f, 0.000309f, 0.003805f, -0.000068f, 0.000386f, -0.010722f, -0.004956f, -0.006993f, -0.000252f, 0.014905f, 0.022835f, 0.000582f, 0.002085f, 0.010865f, -0.003948f, -0.001703f, 0.005558f, 0.025248f, 0.003614f, 0.009447f, 0.017859f, 0.003944f, -0.011322f, 0.005878f, 0.016119f, 0.008608f, -0.013091f, -0.001525f, 0.031078f, 0.025710f, 0.006598f, 0.015150f, 0.020846f, 0.004112f, 0.000713f, 0.012143f, -0.004885f, -0.000750f, -0.010810f, 0.008782f, 0.000227f, -0.000414f, 0.005410f, 0.004254f, 0.017450f, -0.014716f, -0.011527f, 0.011623f, 0.003657f, 0.004810f, -0.008728f, 0.000857f, -0.002313f, 0.005517f, 0.001243f, 0.008108f, 0.010059f, -0.009999f, 0.008722f, 0.005320f, -0.009185f, 0.025724f, 0.005921f, 0.004196f, -0.019436f, -0.007673f, -0.000347f, 0.016263f, 0.017495f, -0.002725f, -0.016385f, 0.010505f, -0.014017f, -0.005952f, 0.015047f, -0.001581f, -0.009408f, 0.011997f, 0.018254f, -0.005517f, 0.007308f, -0.008032f, -0.021520f, -0.001271f, + 0.016838f, -0.008356f, -0.005962f, 0.008260f, -0.009024f, -0.018658f, 0.006558f, 0.009711f, 0.023549f, 0.009049f, -0.012841f, 0.004462f, -0.015140f, -0.024080f, 0.024151f, 0.006984f, 0.012879f, 0.032046f, 0.019294f, -0.012737f, -0.004444f, 0.000326f, 0.004760f, 0.005279f, -0.002660f, -0.011322f, 0.002301f, -0.007449f, 0.012367f, 0.001365f, 0.004399f, -0.003262f, -0.002523f, -0.011730f, -0.007353f, 0.027930f, 0.008343f, -0.015295f, 0.007240f, -0.014880f, -0.011799f, -0.023874f, 0.010418f, 0.001622f, -0.000055f, 0.007176f, -0.001115f, -0.010067f, 0.018482f, 0.012132f, -0.004540f, -0.017646f, 0.018702f, -0.011634f, 0.004705f, 0.000986f, 0.005946f, 0.005295f, 0.011840f, 0.015556f, -0.003498f, 0.009387f, 0.021920f, 0.004560f, -0.007118f, -0.004541f, -0.004058f, 0.005306f, 0.014667f, -0.002109f, 0.005938f, 0.003204f, -0.013556f, 0.002658f, -0.003308f, 0.008848f, -0.020279f, 0.002025f, -0.033799f, -0.018071f, -0.018732f, -0.002141f, -0.018429f, 0.015401f, -0.004300f, -0.012464f, -0.003664f, 0.001515f, -0.011861f, -0.001910f, 0.000535f, 0.005157f, -0.005843f, -0.011644f, -0.020813f, -0.027267f, + -0.012061f, -0.018335f, 0.046579f, -0.022874f, 0.010982f, -0.021650f, -0.005516f, 0.001648f, -0.002899f, -0.032022f, -0.000165f, -0.015543f, 0.001586f, 0.036390f, -0.011398f, 0.014891f, 0.020796f, 0.006706f, 0.008682f, 0.021590f, 0.006999f, -0.009353f, 0.006675f, 0.008028f, 0.009714f, 0.003272f, -0.004338f, 0.025180f, 0.001248f, -0.002826f, -0.004113f, 0.006268f, -0.002018f, -0.009789f, 0.008929f, -0.004122f, 0.006414f, -0.025894f, 0.001134f, -0.005660f, 0.022754f, -0.009783f, 0.007332f, 0.033212f, -0.003005f, -0.000132f, -0.008396f, -0.014927f, -0.000944f, -0.003176f, -0.014588f, 0.017208f, -0.004143f, 0.012234f, 0.001085f, 0.011494f, -0.007566f, -0.002247f, 0.026769f, 0.012394f, -0.021660f, -0.011999f, 0.005151f, 0.005593f, 0.002531f, 0.004832f, -0.006990f, 0.006704f, 0.009041f, 0.021567f, -0.030136f, 0.000640f, -0.013745f, 0.004738f, -0.002467f, -0.004580f, -0.006306f, -0.016061f, -0.012681f, -0.015542f, 0.016885f, -0.031655f, -0.008096f, -0.020117f, 0.010632f, 0.031194f, -0.016358f, 0.000193f, 0.001979f, -0.006987f, 0.013423f, -0.010992f, 0.006077f, -0.003872f, -0.012017f, 0.027863f, + 0.002593f, -0.009927f, 0.001606f, -0.004773f, -0.011394f, 0.009378f, -0.008417f, 0.008795f, -0.016778f, -0.008911f, 0.013482f, 0.008452f, -0.028831f, -0.005875f, -0.024321f, 0.007228f, -0.002908f, -0.025100f, 0.031545f, -0.008785f, 0.000872f, -0.023183f, -0.023569f, 0.001170f, -0.021063f, -0.003202f, -0.017947f, -0.016878f, 0.021342f, 0.002016f, -0.023726f, 0.008219f, -0.021007f, 0.020199f, 0.009104f, -0.009832f, 0.002618f, 0.006568f, 0.023199f, -0.016349f, -0.021317f, 0.023779f, -0.014394f, -0.009099f, 0.014522f, 0.018199f, -0.030759f, -0.015717f, 0.021152f, 0.014656f, 0.009749f, -0.000825f, 0.004803f, -0.022544f, 0.016117f, -0.024667f, -0.039133f, -0.032362f, 0.014763f, -0.038620f, -0.001483f, 0.028431f, -0.002213f, 0.001577f, 0.021081f, -0.014287f, -0.011422f, 0.045433f, -0.017905f, 0.010213f, 0.017768f, -0.003800f, -0.041404f, -0.004034f, 0.004636f, -0.011056f, -0.005553f, -0.010288f, 0.039077f, -0.000232f, 0.000620f, -0.002531f, -0.027847f, 0.004497f, -0.015991f, -0.008744f, 0.001852f, 0.004030f, 0.008381f, 0.021910f, 0.005070f, -0.006497f, 0.044447f, 0.003986f, -0.010989f, -0.041321f, + -0.005963f, 0.029081f, -0.006536f, -0.019367f, -0.025102f, -0.022758f, -0.018944f, -0.012585f, 0.031414f, 0.011518f, 0.001591f, 0.016779f, 0.026124f, 0.013923f, -0.006075f, -0.005447f, 0.026906f, -0.006222f, -0.008809f, 0.007069f, 0.020358f, 0.002089f, -0.022025f, 0.004015f, -0.002832f, -0.033009f, -0.003185f, 0.024492f, -0.013505f, -0.015831f, -0.004580f, 0.033064f, -0.028371f, -0.006974f, -0.015402f, 0.031892f, 0.003718f, -0.029306f, -0.000582f, 0.008263f, -0.000537f, -0.013547f, 0.013063f, -0.010100f, 0.026262f, -0.020119f, 0.018239f, 0.038311f, -0.009861f, -0.010582f, -0.008493f, -0.008307f, 0.035116f, -0.025804f, -0.027434f, -0.021656f, 0.008498f, -0.011383f, -0.017386f, -0.008497f, 0.013104f, -0.017488f, 0.010325f, 0.002141f, 0.014287f, 0.019979f, 0.003251f, -0.002651f, -0.003056f, 0.019740f, -0.004281f, 0.006961f, -0.023428f, -0.000228f, -0.007782f, 0.019318f, -0.024909f, 0.021217f, -0.008008f, -0.013231f, 0.022247f, 0.037036f, -0.019827f, 0.010628f, -0.003627f, 0.007633f, -0.054500f, -0.043824f, -0.025691f, 0.004036f, -0.015921f, 0.007524f, 0.002829f, -0.020373f, -0.015253f, 0.002052f, + 0.045250f, 0.010710f, -0.026538f, -0.040896f, -0.020742f, -0.014887f, 0.028056f, -0.018443f, -0.025962f, 0.006785f, 0.006626f, -0.024445f, -0.001098f, 0.000013f, -0.012462f, 0.006869f, 0.055249f, 0.036664f, -0.009943f, 0.003933f, 0.035543f, -0.013973f, 0.000761f, 0.015639f, 0.038437f, 0.022992f, -0.007337f, -0.008579f, -0.014054f, 0.003562f, -0.008044f, 0.000616f, 0.000323f, 0.040980f, 0.067147f, -0.004061f, 0.046067f, 0.029421f, 0.005284f, 0.007146f, -0.034165f, -0.033343f, -0.004602f, 0.008456f, -0.003258f, 0.007742f, -0.013355f, -0.025220f, -0.042740f, -0.004109f, -0.027864f, -0.023341f, -0.016062f, -0.024219f, -0.017940f, -0.001674f, 0.037778f, -0.002067f, -0.030539f, -0.003405f, 0.007293f, 0.027799f, -0.010165f, -0.008442f, -0.018731f, 0.011842f, -0.053992f, -0.048841f, -0.024010f, -0.025173f, -0.026555f, -0.017027f, 0.015678f, -0.023136f, -0.030770f, -0.026843f, -0.045425f, 0.020602f, 0.011063f, -0.041660f, 0.019159f, 0.037273f, 0.077045f, 0.040312f, -0.001223f, 0.011354f, -0.045283f, -0.021343f, 0.024337f, 0.017619f, -0.009874f, -0.059538f, -0.003455f, 0.090311f, -0.004796f, 0.001187f, + 0.025002f, -0.035960f, 0.020819f, 0.063278f, 0.062342f, -0.063418f, -0.056769f, -0.002385f, -0.061782f, -0.026475f, 0.001611f, 0.004867f, 0.024838f, 0.032376f, 0.032405f, 0.051854f, 0.014427f, 0.018815f, 0.023211f, -0.011868f, -0.002398f, 0.003208f, 0.008625f, 0.013306f, -0.027792f, 0.062595f, 0.029421f, 0.027671f, -0.004384f, 0.063512f, 0.009509f, 0.037074f, 0.017820f, 0.009509f, -0.014464f, -0.013229f, 0.035011f, 0.009903f, 0.016841f, -0.038875f, -0.018048f, -0.033034f, -0.016401f, -0.024953f, 0.000860f, -0.046533f, -0.046024f, -0.006100f, -0.017200f, -0.091949f, -0.065070f, -0.063108f, 0.017838f, 0.061106f, 0.084383f, -0.049630f, 0.058408f, 0.086181f, 0.016070f, 0.004172f, -0.004902f, 0.058363f, 0.005587f, 0.052649f, 0.025035f, 0.023282f, -0.035831f, -0.125321f, -0.095382f, -0.022925f, 0.000818f, -0.009060f, 0.047172f, -0.012264f, -0.078827f, -0.009574f, 0.131240f, 0.021092f, -0.021982f, 0.030715f, -0.008538f, 0.019033f, -0.008255f, -0.016690f, -0.040473f, -0.018751f, -0.002661f, -0.009948f, -0.018438f, 0.027613f, -0.025722f, -0.032604f, -0.000240f, 0.001680f, 0.028771f, 0.009025f, + 0.009114f, 0.008324f, -0.009417f, -0.003052f, 0.041913f, -0.023996f, -0.046616f, -0.013099f, 0.005640f, -0.019807f, 0.034936f, -0.021225f, -0.010047f, 0.024537f, 0.009150f, 0.017493f, -0.048595f, -0.059979f, 0.019644f, -0.014931f, -0.018105f, -0.028241f, -0.028736f, -0.066059f, 0.000905f, -0.009985f, 0.021201f, -0.044228f, -0.081816f, 0.056697f, 0.017321f, 0.052773f, 0.006648f, -0.024131f, -0.017438f, 0.009369f, -0.031202f, 0.042003f, 0.009088f, 0.051237f, 0.039444f, 0.078729f, -0.009714f, -0.089728f, -0.065794f, -0.044567f, 0.044518f, 0.038387f, -0.040615f, 0.027346f, 0.066652f, -0.054229f, -0.069192f, 0.071668f, 0.094546f, 0.017762f, 0.003143f, 0.022322f, -0.015840f, 0.042790f, 0.022107f, 0.044638f, -0.010129f, -0.045149f, 0.101118f, 0.001503f, -0.039830f, 0.005613f, 0.067908f, 0.032549f, 0.012211f, -0.043088f, 0.003369f, -0.022742f, -0.018564f, 0.007576f, -0.034070f, 0.003422f, 0.007346f, 0.039984f, -0.057352f, -0.008949f, -0.008165f, 0.033765f, -0.014118f, -0.020190f, -0.021131f, 0.000139f, 0.019718f, -0.043126f, 0.001691f, 0.011736f, -0.090407f, 0.012476f, -0.025570f, -0.062535f, + 0.039763f, -0.046252f, -0.082691f, 0.107302f, -0.002241f, 0.006133f, -0.009833f, -0.030011f, 0.063433f, -0.046064f, -0.005558f, 0.009287f, -0.030727f, -0.002880f, 0.080775f, 0.041737f, -0.073092f, -0.078802f, 0.076323f, -0.037604f, 0.044422f, 0.072973f, -0.066497f, -0.115399f, -0.078724f, 0.130536f, -0.006763f, -0.105047f, 0.096733f, -0.070919f, -0.127174f, -0.004464f, 0.118176f, -0.005997f, -0.041959f, 0.066174f, -0.010263f, 0.017219f, 0.048660f, 0.027998f, 0.037791f, 0.078502f, 0.039545f, -0.024459f, 0.016852f, 0.016162f, 0.030758f, -0.034178f, 0.083280f, 0.070835f, 0.014245f, 0.021695f, -0.014568f, -0.004396f, -0.077328f, 0.032908f, -0.039006f, 0.024489f, 0.000559f, -0.034290f, 0.047881f, -0.022011f, -0.028889f, 0.013061f, -0.042377f, 0.026176f, 0.005346f, -0.013463f, 0.016893f, 0.014523f, 0.032933f, 0.024711f, 0.032272f, 0.079332f, -0.003949f, 0.004283f, 0.031020f, 0.051740f, -0.001040f, 0.010039f, 0.004881f, 0.039230f, 0.057455f, -0.022355f, 0.017676f, -0.007637f, -0.003366f, -0.101559f, 0.013174f, 0.035484f, -0.017221f, -0.029162f, 0.027435f, -0.045839f, -0.053055f, -0.000609f, + 0.040950f, 0.064934f, -0.083451f, 0.028601f, 0.004062f, -0.009163f, 0.010415f, 0.028696f, 0.088364f, -0.006272f, -0.040961f, 0.009476f, 0.082511f, 0.043709f, -0.082588f, -0.064483f, -0.001023f, -0.099438f, -0.033986f, -0.036781f, 0.076729f, -0.002182f, -0.028148f, 0.035304f, -0.017864f, 0.019645f, 0.005215f, -0.037786f, 0.045547f, -0.102251f, -0.009493f, 0.006488f, -0.025379f, 0.019213f, 0.004825f, -0.019615f, -0.003389f, 0.003457f, 0.026082f, 0.002067f, -0.029769f, -0.098835f, -0.072230f, -0.054573f, -0.027188f, 0.062390f, -0.012197f, 0.003173f, -0.099264f, 0.008418f, -0.006638f, -0.012415f, 0.003441f, -0.095065f, 0.051852f, -0.045402f, 0.024025f, -0.017648f, 0.065864f, -0.034146f, -0.063170f, -0.028704f, -0.000226f, 0.049589f, 0.087016f, 0.093350f, -0.112045f, -0.080620f, -0.057020f, 0.041611f, 0.092723f, 0.114984f, -0.019072f, -0.024384f, -0.097909f, -0.032282f, 0.088103f, 0.058375f, -0.000428f, 0.005734f, -0.001330f, -0.076299f, 0.056557f, -0.008331f, 0.054868f, 0.140614f, -0.143753f, 0.190334f, 0.050899f, -0.075074f, -0.082661f, 0.068289f, -0.040802f, 0.041790f, 0.022746f, 0.026186f, + 0.016092f, -0.053592f, 0.058485f, -0.009135f, -0.020265f, -0.019544f, -0.022522f, 0.017287f, -0.011597f, 0.024813f, 0.015533f, -0.003786f, -0.005579f, -0.044877f, 0.026315f, 0.010077f, -0.010898f, 0.009460f, 0.023948f, -0.007093f, 0.013823f, -0.022972f, 0.027198f, -0.010318f, 0.003964f, 0.010477f, 0.011888f, -0.012216f, 0.041659f, -0.001925f, -0.038065f, -0.002862f, 0.018392f, 0.008520f, -0.028976f, 0.014127f, 0.034991f, -0.006677f, -0.016133f, -0.016492f, -0.001677f, 0.009350f, -0.003588f, 0.040341f, -0.026608f, -0.010427f, -0.009085f, -0.020257f, -0.001159f, -0.006068f, 0.015363f, 0.010942f, -0.016184f, -0.002177f, 0.016029f, -0.015850f, -0.007964f, -0.004199f, 0.025350f, -0.014516f, 0.010953f, 0.018096f, -0.038698f, -0.013744f, 0.012078f, -0.037625f, 0.060247f, 0.020885f, 0.016866f, 0.036962f, 0.096638f, 0.011813f, -0.031785f, -0.025923f, -0.018180f, -0.002496f, -0.002323f, 0.001454f, -0.001830f, -0.004345f, -0.053445f, 0.000559f, -0.009976f, -0.013135f, 0.007734f, -0.021896f, -0.008794f, 0.009299f, -0.013957f, 0.003663f, 0.017757f, -0.023309f, 0.015292f, -0.008961f, -0.011103f, -0.002452f, + -0.011077f, 0.005139f, -0.010180f, -0.006471f, -0.012149f, -0.003060f, 0.000900f, -0.000776f, -0.006806f, -0.008700f, 0.003664f, 0.003884f, -0.008287f, 0.012412f, -0.014570f, -0.001821f, -0.005025f, -0.002423f, -0.001643f, -0.012948f, 0.018575f, 0.010166f, -0.015830f, 0.020612f, -0.000656f, 0.004108f, -0.007948f, 0.019778f, -0.018529f, 0.001157f, 0.003396f, 0.004972f, -0.001584f, -0.005560f, 0.016857f, -0.010315f, 0.004155f, 0.000459f, -0.001034f, 0.004473f, -0.004392f, -0.001231f, 0.010689f, -0.004520f, -0.001367f, 0.009277f, -0.001023f, -0.004236f, -0.005869f, 0.004923f, 0.007758f, -0.045827f, -0.077343f, 0.086222f, 0.285392f, 0.030188f, 0.064712f, -0.154827f, -0.239430f, -0.058877f, -0.125595f, 0.098007f, 0.198594f, 0.106239f, 0.065446f, -0.013945f, -0.078607f, -0.075215f, -0.058469f, -0.052254f, 0.017857f, 0.035019f, 0.018528f, 0.037609f, 0.003669f, 0.003863f, 0.013278f, 0.005072f, 0.015217f, 0.014008f, -0.011012f, -0.035594f, -0.028253f, -0.031278f, -0.044707f, -0.022064f, 0.023172f, 0.032454f, 0.057337f, 0.083715f, 0.028672f, 0.012826f, -0.028920f, -0.064874f, -0.064999f, -0.043596f, + -0.032276f, 0.007098f, 0.022971f, 0.035933f, 0.035973f, 0.032373f, 0.019737f, 0.003199f, -0.004149f, -0.020189f, -0.016146f, -0.008557f, -0.012239f, -0.003450f, -0.013686f, -0.002819f, -0.015982f, -0.013147f, 0.002951f, -0.000637f, 0.015883f, 0.030215f, 0.015271f, 0.044657f, 0.036812f, -0.018836f, -0.042019f, -0.038992f, -0.061679f, -0.016379f, -0.018355f, -0.002061f, 0.024334f, 0.014219f, -0.002443f}, + {-0.011410f, 0.002836f, -0.005198f, -0.013234f, -0.005139f, 0.001220f, -0.002470f, 0.004244f, -0.006121f, -0.002410f, -0.004682f, -0.002198f, 0.003061f, -0.000499f, -0.000176f, -0.002573f, 0.004262f, -0.011088f, 0.001088f, -0.005728f, 0.004086f, 0.002807f, -0.006690f, 0.001250f, -0.000797f, 0.001739f, -0.002481f, 0.001969f, -0.007326f, -0.004640f, 0.009461f, -0.002665f, -0.003522f, -0.004215f, -0.001219f, -0.002663f, -0.000954f, -0.006695f, -0.000766f, 0.008605f, -0.001840f, 0.001609f, -0.000177f, -0.002548f, 0.012004f, -0.002376f, 0.006888f, 0.008395f, -0.000545f, -0.003055f, -0.001989f, -0.007188f, -0.006751f, -0.007445f, -0.008745f, -0.004623f, -0.006066f, 0.001659f, -0.005844f, -0.001691f, -0.003423f, -0.000503f, 0.001529f, -0.006961f, 0.007090f, 0.001512f, 0.003093f, 0.006223f, -0.005627f, 0.003355f, 0.006514f, -0.006482f, 0.001371f, 0.005155f, 0.002321f, 0.002730f, -0.011219f, 0.007371f, 0.012148f, 0.003115f, 0.010731f, 0.000122f, -0.010956f, -0.007658f, -0.007966f, -0.001316f, -0.005455f, 0.012841f, -0.009605f, -0.002528f, -0.004335f, -0.001621f, -0.007696f, 0.007366f, -0.004520f, -0.003659f, + 0.006309f, 0.010300f, 0.011798f, 0.001720f, -0.000798f, 0.002350f, 0.000666f, 0.001560f, -0.005276f, -0.005829f, 0.002842f, -0.005300f, -0.005158f, -0.007082f, -0.007285f, 0.002113f, -0.004812f, 0.006355f, -0.008047f, -0.001234f, 0.003606f, 0.003252f, 0.003030f, -0.012691f, -0.002214f, -0.007115f, -0.001173f, -0.003088f, -0.007613f, -0.000336f, 0.009167f, 0.002589f, 0.004470f, 0.003996f, 0.004970f, 0.000411f, 0.006224f, 0.003662f, 0.006941f, -0.004165f, 0.004640f, -0.002544f, 0.003211f, 0.000067f, -0.006361f, 0.007134f, 0.008452f, -0.004886f, -0.005657f, 0.002082f, 0.007752f, 0.001383f, 0.002059f, -0.003145f, -0.000527f, 0.003531f, 0.002658f, -0.000297f, -0.018833f, -0.005020f, -0.008461f, 0.006196f, -0.017649f, 0.003826f, -0.007744f, -0.004178f, 0.002576f, 0.000296f, 0.002046f, 0.002594f, 0.002064f, 0.007632f, -0.003347f, 0.000751f, -0.000705f, -0.009404f, 0.006967f, 0.011465f, -0.009296f, -0.008850f, 0.006766f, 0.001669f, 0.008337f, 0.002566f, 0.011174f, -0.001589f, 0.003826f, -0.005920f, -0.001695f, 0.011257f, 0.001000f, -0.007424f, -0.008999f, -0.009877f, 0.000520f, 0.008092f, + 0.004242f, -0.000101f, 0.009377f, 0.007336f, 0.000409f, -0.007623f, 0.011971f, 0.002976f, 0.009266f, 0.009239f, -0.001489f, 0.005868f, 0.007136f, -0.000898f, 0.004282f, 0.004742f, -0.004451f, 0.000899f, -0.001264f, 0.004501f, -0.010237f, -0.006719f, 0.003541f, -0.006501f, -0.002296f, 0.008866f, -0.003416f, 0.004843f, -0.001889f, -0.014074f, 0.002572f, -0.000133f, 0.007572f, -0.011603f, -0.006003f, 0.005161f, 0.001495f, 0.012011f, 0.012422f, 0.005653f, 0.009162f, 0.007387f, 0.012452f, 0.014466f, -0.005433f, -0.001385f, 0.004719f, -0.014148f, -0.000575f, -0.004552f, -0.002820f, 0.006722f, -0.008414f, -0.000796f, 0.010506f, 0.002142f, 0.006712f, -0.003164f, -0.002521f, -0.003365f, -0.013516f, -0.001997f, 0.000858f, 0.007331f, -0.002215f, 0.012469f, 0.004780f, -0.001882f, 0.004856f, 0.002781f, 0.006260f, -0.004298f, -0.000977f, 0.014560f, -0.001933f, 0.013781f, 0.006327f, -0.005643f, 0.001412f, 0.012192f, 0.006195f, -0.007537f, 0.010854f, -0.002652f, 0.000751f, 0.000902f, -0.002162f, 0.002436f, 0.001242f, -0.009433f, 0.006304f, 0.004967f, -0.000785f, 0.000773f, -0.002114f, -0.008416f, + 0.000101f, 0.005452f, -0.000903f, -0.000536f, -0.005828f, -0.012474f, -0.004308f, 0.005454f, 0.011145f, -0.015935f, -0.008586f, 0.003874f, -0.006886f, 0.005162f, 0.000187f, 0.001065f, -0.009115f, 0.017633f, 0.018578f, -0.003646f, -0.007894f, -0.008459f, 0.017814f, -0.015437f, 0.000353f, -0.002449f, -0.007306f, -0.009743f, 0.003428f, -0.002617f, -0.013449f, -0.016203f, 0.000558f, -0.001142f, -0.008567f, 0.003162f, 0.004460f, -0.005908f, -0.009074f, -0.008341f, 0.011849f, -0.012765f, -0.001594f, -0.014933f, 0.000137f, 0.008424f, 0.002814f, 0.001496f, -0.008444f, -0.008035f, 0.007343f, -0.005632f, -0.008617f, 0.001116f, -0.003139f, 0.005304f, 0.000105f, 0.002158f, -0.008570f, -0.003152f, -0.002403f, 0.008242f, 0.005672f, 0.005718f, -0.016946f, 0.002661f, 0.004784f, 0.003832f, 0.004850f, -0.004914f, -0.003015f, 0.000509f, 0.003540f, 0.006585f, -0.001046f, 0.004262f, -0.004772f, 0.012886f, -0.023618f, 0.008067f, 0.000883f, -0.013030f, -0.000297f, 0.013516f, -0.003937f, -0.007177f, -0.012393f, -0.005114f, 0.001441f, -0.004648f, 0.000552f, 0.004121f, 0.008046f, -0.008393f, -0.026261f, 0.004737f, + -0.011933f, 0.002568f, 0.002277f, -0.001586f, 0.018764f, 0.000974f, -0.011872f, 0.015905f, 0.007779f, 0.005425f, -0.002309f, 0.003253f, -0.004766f, 0.012461f, -0.001978f, 0.001372f, 0.018957f, 0.018349f, 0.007986f, 0.008375f, 0.008223f, 0.009109f, 0.006240f, -0.018236f, -0.005549f, -0.000306f, -0.004642f, -0.015531f, -0.001558f, -0.003724f, -0.003932f, -0.008369f, 0.000007f, -0.002496f, 0.013496f, -0.004330f, 0.023540f, -0.000199f, 0.002176f, -0.004385f, -0.003157f, 0.000117f, -0.000431f, -0.001931f, -0.003821f, -0.002799f, -0.011157f, 0.002722f, 0.002185f, -0.001431f, -0.005575f, 0.007925f, 0.006294f, 0.006861f, -0.002013f, -0.005075f, 0.000603f, 0.005974f, 0.007062f, -0.005318f, -0.014348f, -0.007685f, 0.002303f, 0.012419f, -0.000915f, 0.010162f, -0.007124f, -0.011749f, 0.009979f, -0.004059f, -0.008071f, 0.005754f, 0.008171f, -0.010351f, -0.006742f, 0.009833f, -0.011632f, -0.012388f, 0.005856f, -0.003450f, -0.001235f, -0.006447f, -0.003956f, 0.006555f, 0.008931f, 0.004884f, -0.002267f, 0.001515f, -0.001253f, -0.001971f, -0.008841f, 0.003043f, -0.023543f, -0.006658f, -0.007632f, 0.006572f, + 0.007817f, 0.000792f, 0.003770f, -0.014430f, 0.003751f, 0.002360f, 0.003720f, -0.013002f, 0.024527f, -0.001002f, 0.004341f, 0.003367f, -0.011992f, 0.001964f, -0.017091f, 0.010901f, -0.003897f, -0.013939f, 0.002496f, 0.001195f, -0.007413f, 0.000889f, 0.001150f, 0.011231f, 0.019568f, 0.008785f, -0.004492f, 0.006612f, 0.007728f, -0.018448f, -0.007355f, -0.008359f, 0.004613f, 0.004433f, -0.003703f, 0.003142f, 0.005809f, 0.004347f, 0.007611f, 0.015842f, -0.000445f, -0.005507f, -0.002500f, -0.000313f, 0.011232f, -0.008374f, -0.001109f, 0.006199f, 0.015167f, 0.000796f, -0.012596f, -0.009647f, -0.002952f, -0.011247f, -0.004245f, -0.024214f, -0.006637f, -0.008945f, 0.010367f, 0.000394f, -0.004976f, -0.031066f, -0.004077f, -0.004096f, 0.012948f, 0.030908f, -0.008807f, 0.020816f, 0.003646f, -0.018087f, -0.018513f, 0.003396f, 0.004852f, -0.010407f, 0.011809f, -0.008161f, 0.009560f, -0.011355f, 0.005783f, 0.004267f, -0.010833f, -0.008978f, -0.006873f, 0.003992f, 0.012279f, -0.015359f, 0.000823f, -0.016135f, -0.000670f, -0.005856f, 0.004299f, 0.012535f, 0.001554f, -0.004715f, -0.004319f, 0.013610f, + 0.000277f, 0.020503f, 0.006447f, -0.006866f, -0.006876f, -0.005074f, 0.003213f, 0.013240f, 0.000119f, 0.021515f, -0.036482f, -0.026322f, -0.021598f, -0.004147f, -0.018347f, 0.002245f, -0.006626f, 0.007795f, 0.017201f, 0.004232f, 0.007401f, 0.012089f, 0.018214f, 0.010614f, 0.003215f, -0.010544f, -0.030004f, -0.030243f, 0.017804f, 0.003424f, 0.022480f, -0.012852f, -0.010640f, 0.013257f, -0.021957f, 0.006444f, 0.015572f, 0.005431f, -0.010695f, -0.001276f, 0.028786f, 0.022639f, -0.001235f, -0.021361f, -0.033475f, -0.004893f, -0.011141f, 0.011343f, -0.009375f, -0.011126f, -0.038040f, -0.017699f, -0.033976f, 0.011907f, -0.000209f, -0.009490f, 0.010233f, -0.002208f, 0.001141f, 0.001539f, -0.010280f, -0.000004f, -0.011949f, -0.003284f, 0.008743f, 0.004818f, -0.012213f, 0.003724f, 0.014320f, 0.020806f, -0.002389f, -0.004070f, -0.006350f, 0.000217f, 0.012232f, 0.015053f, -0.001409f, 0.001340f, -0.002574f, -0.003832f, 0.020049f, 0.012890f, 0.001441f, 0.013319f, 0.005037f, -0.018702f, 0.004188f, -0.002861f, 0.023651f, 0.007813f, 0.003703f, 0.009889f, 0.015606f, 0.002939f, -0.012232f, -0.023450f, + -0.004393f, 0.003470f, 0.012673f, 0.004897f, 0.001406f, 0.003423f, 0.018273f, 0.002603f, 0.006240f, 0.006796f, 0.005098f, -0.012792f, -0.012745f, -0.012686f, -0.013002f, -0.013220f, 0.018296f, 0.048887f, 0.010617f, -0.015004f, 0.008623f, -0.008731f, -0.029061f, -0.005835f, -0.028528f, -0.015548f, 0.014543f, 0.019588f, 0.007401f, 0.004035f, 0.001472f, 0.003620f, 0.018372f, -0.013198f, 0.026059f, -0.017006f, -0.017538f, 0.020962f, 0.009058f, -0.033876f, 0.014530f, 0.008619f, 0.010435f, 0.022286f, 0.010687f, 0.016558f, -0.001473f, 0.008953f, -0.005670f, 0.014105f, 0.003328f, 0.002963f, 0.009038f, -0.019168f, -0.010757f, -0.005956f, 0.011758f, 0.005199f, 0.003889f, 0.009583f, 0.002305f, 0.003286f, -0.017806f, -0.000015f, 0.018078f, -0.003570f, 0.001679f, 0.002108f, 0.001751f, 0.022041f, 0.007908f, 0.029708f, 0.006196f, -0.004658f, 0.027771f, -0.025004f, -0.004031f, -0.004387f, -0.010701f, -0.002822f, 0.005023f, 0.027629f, 0.001680f, -0.006805f, -0.012128f, 0.004896f, -0.012807f, -0.006121f, -0.008827f, -0.016995f, -0.004074f, 0.002094f, 0.022161f, -0.005419f, -0.018631f, -0.026030f, + -0.010836f, -0.025609f, 0.018102f, -0.021690f, -0.017801f, -0.012330f, 0.011056f, 0.031597f, -0.032015f, -0.009906f, -0.035948f, 0.011089f, 0.003818f, 0.004374f, -0.011080f, 0.003833f, 0.038231f, -0.019442f, -0.004513f, 0.016006f, 0.009096f, 0.008921f, 0.012750f, 0.010356f, -0.014002f, -0.020674f, -0.005166f, -0.010917f, -0.017578f, -0.018966f, -0.000781f, -0.003491f, 0.003850f, 0.027198f, 0.015311f, -0.013327f, -0.009022f, -0.000351f, -0.008692f, 0.007665f, 0.048199f, -0.015422f, 0.033245f, 0.012163f, 0.004565f, -0.000846f, -0.006836f, 0.007282f, -0.020198f, 0.010558f, 0.025487f, 0.002699f, 0.002916f, 0.023088f, 0.012506f, 0.010013f, -0.019572f, 0.016934f, -0.012343f, -0.014206f, -0.045256f, -0.011677f, 0.026573f, -0.013895f, 0.005438f, -0.028264f, 0.019863f, -0.008843f, -0.014473f, 0.022302f, -0.033405f, -0.018899f, 0.031096f, -0.019803f, -0.028913f, 0.002868f, -0.019362f, -0.015057f, -0.001647f, 0.022052f, -0.010270f, 0.039033f, 0.037050f, 0.006820f, 0.012101f, -0.021718f, 0.002985f, -0.017672f, 0.027896f, -0.005943f, 0.008462f, -0.013598f, -0.008171f, 0.004240f, 0.004062f, -0.013097f, + 0.021464f, -0.006446f, 0.004829f, 0.007394f, -0.013480f, 0.004740f, -0.017292f, -0.000433f, 0.010410f, 0.011505f, 0.000659f, 0.015365f, 0.020458f, -0.002055f, -0.037185f, -0.006894f, -0.010703f, 0.026327f, -0.022269f, -0.028813f, -0.019662f, -0.014083f, 0.004413f, -0.016616f, -0.012027f, -0.008689f, -0.001740f, 0.004296f, -0.054480f, 0.034123f, 0.027803f, 0.038982f, -0.011864f, 0.005669f, 0.027408f, -0.026124f, -0.022623f, 0.003937f, 0.018405f, 0.010682f, -0.001812f, 0.004625f, -0.012566f, -0.017310f, -0.019599f, -0.006919f, 0.075161f, 0.005253f, -0.038347f, -0.007788f, -0.019402f, 0.013713f, 0.014751f, -0.024829f, -0.011374f, -0.020141f, -0.041213f, 0.004154f, -0.034500f, 0.016863f, 0.004820f, -0.026234f, 0.014770f, 0.018704f, 0.024090f, 0.008215f, 0.009246f, -0.027100f, -0.001013f, -0.004428f, 0.025913f, 0.013506f, 0.000812f, 0.025923f, 0.027112f, -0.001918f, -0.013380f, 0.004579f, 0.033603f, -0.020500f, -0.017589f, 0.018999f, 0.009415f, -0.020741f, -0.005022f, -0.018996f, 0.038671f, -0.031203f, 0.009217f, 0.022443f, -0.012340f, 0.020864f, 0.006970f, -0.007382f, -0.009810f, -0.008008f, + -0.015469f, 0.023887f, 0.029510f, 0.008170f, -0.021967f, 0.004785f, -0.024232f, -0.006832f, 0.016633f, -0.000337f, -0.011643f, -0.006148f, 0.004842f, -0.029836f, 0.001803f, -0.000229f, -0.018038f, 0.029099f, -0.024242f, 0.001962f, -0.004651f, -0.014754f, 0.021158f, 0.002715f, 0.013007f, -0.004821f, -0.000163f, 0.004079f, -0.009865f, 0.015097f, -0.008460f, 0.004737f, -0.007578f, 0.037755f, 0.016989f, 0.037780f, -0.001041f, -0.024651f, -0.014000f, 0.018233f, 0.023376f, 0.029933f, -0.001466f, -0.004259f, 0.036398f, 0.019141f, 0.040702f, 0.007452f, 0.001113f, -0.018663f, -0.011157f, -0.010215f, 0.008910f, 0.008360f, 0.020721f, -0.024713f, -0.000883f, -0.013895f, 0.011606f, -0.021196f, 0.006047f, 0.027718f, -0.006694f, 0.001192f, -0.016309f, 0.005586f, -0.016446f, -0.044270f, 0.003370f, -0.005216f, 0.000181f, -0.018776f, -0.007627f, 0.019857f, 0.031714f, -0.001825f, -0.015892f, 0.022057f, 0.006237f, 0.006676f, 0.020617f, 0.010052f, -0.016297f, -0.004475f, 0.011919f, -0.000522f, 0.010456f, -0.015318f, -0.018866f, 0.006736f, -0.018099f, -0.025636f, -0.016638f, -0.029472f, -0.011191f, 0.011698f, + -0.028761f, -0.002286f, -0.032620f, -0.011116f, -0.005289f, 0.011841f, -0.038663f, 0.015162f, -0.003519f, -0.019452f, 0.018064f, -0.009092f, -0.001108f, 0.042491f, 0.040320f, 0.000126f, 0.059660f, 0.068336f, 0.003718f, 0.021945f, 0.021135f, -0.002775f, -0.048929f, -0.001144f, -0.001695f, -0.018435f, 0.014192f, 0.013123f, -0.026384f, 0.014901f, 0.019157f, 0.003474f, -0.006653f, 0.010616f, -0.006315f, 0.035299f, -0.005408f, -0.015738f, 0.000840f, 0.008522f, -0.002615f, -0.001617f, 0.000086f, -0.054737f, 0.016780f, -0.000446f, -0.037518f, -0.015002f, 0.007492f, -0.002631f, -0.025209f, 0.010133f, -0.029867f, -0.001639f, 0.004044f, -0.048232f, -0.007788f, 0.022584f, -0.014768f, 0.003769f, 0.032378f, 0.020713f, 0.025093f, 0.009148f, -0.012180f, -0.021250f, 0.025077f, -0.010247f, 0.014674f, -0.019762f, -0.010063f, 0.018164f, 0.028128f, 0.006533f, 0.033438f, -0.018544f, 0.029145f, -0.020214f, -0.026694f, -0.016574f, 0.029020f, 0.032864f, -0.025275f, 0.018396f, -0.072394f, -0.001329f, 0.022476f, 0.013409f, -0.011452f, -0.020756f, 0.011782f, -0.052118f, 0.002104f, 0.068703f, -0.047062f, -0.002370f, + -0.005800f, 0.005427f, -0.019762f, 0.010406f, -0.030393f, -0.027317f, -0.011524f, -0.006104f, 0.005159f, -0.005477f, 0.013305f, -0.020014f, -0.001182f, 0.044849f, -0.037138f, -0.029227f, -0.009452f, 0.039480f, 0.003341f, -0.045232f, 0.018134f, -0.015607f, -0.022066f, 0.006555f, 0.062819f, -0.034542f, -0.022227f, 0.047973f, 0.032214f, 0.004864f, -0.020980f, 0.003170f, -0.009005f, -0.012719f, 0.011276f, 0.013972f, -0.009753f, -0.035394f, 0.045948f, 0.024448f, 0.007170f, -0.048839f, -0.009654f, 0.017834f, 0.015743f, -0.004246f, 0.024911f, -0.002189f, 0.007298f, -0.009473f, -0.032383f, 0.022215f, -0.023562f, 0.015454f, 0.005150f, -0.024385f, 0.049119f, 0.010387f, 0.035033f, 0.039364f, 0.005188f, -0.052080f, -0.011730f, 0.003804f, -0.022789f, -0.007407f, 0.001528f, 0.002503f, 0.023945f, 0.050060f, -0.011878f, 0.020125f, 0.003594f, -0.019907f, -0.095315f, 0.005584f, -0.024315f, 0.002585f, 0.048847f, 0.003865f, -0.008528f, 0.008031f, 0.002607f, -0.033359f, -0.034460f, -0.032456f, -0.029698f, 0.038884f, -0.007188f, 0.046552f, 0.004945f, -0.045421f, -0.000825f, 0.004185f, 0.039019f, 0.006794f, + -0.005446f, -0.008353f, 0.011671f, -0.024803f, -0.008483f, 0.041588f, -0.007900f, -0.055717f, -0.041263f, 0.024352f, -0.004735f, -0.012166f, 0.013356f, -0.004680f, -0.027607f, 0.007809f, 0.017345f, 0.037393f, -0.006977f, -0.032360f, 0.001129f, -0.040616f, 0.016042f, 0.044483f, -0.006557f, -0.056131f, 0.018119f, -0.001299f, 0.003765f, 0.012725f, -0.016842f, 0.033514f, 0.003158f, -0.023600f, 0.018465f, -0.012998f, -0.007191f, 0.048289f, -0.024529f, -0.008786f, -0.007839f, 0.030428f, 0.012579f, -0.054093f, 0.027403f, -0.043411f, -0.010648f, -0.023067f, 0.004775f, -0.013321f, -0.015164f, -0.001962f, -0.047895f, 0.010622f, 0.076509f, 0.051510f, 0.022171f, -0.037335f, 0.027927f, 0.037554f, 0.053044f, 0.027206f, 0.005569f, 0.003140f, 0.032991f, 0.059539f, -0.013877f, -0.005780f, 0.032306f, -0.063866f, 0.023084f, 0.059622f, -0.012688f, -0.018687f, 0.014526f, 0.046719f, 0.035851f, -0.022747f, -0.042197f, -0.000803f, 0.020500f, -0.005353f, 0.004621f, 0.002451f, 0.048503f, -0.026071f, 0.030973f, 0.049225f, -0.019239f, -0.003716f, 0.033127f, -0.002917f, 0.116869f, -0.046925f, 0.020911f, 0.082415f, + -0.046274f, 0.017498f, 0.005294f, -0.062496f, -0.002032f, 0.014726f, -0.028611f, 0.066273f, 0.004914f, -0.005877f, 0.005116f, -0.023440f, 0.087380f, 0.027185f, -0.069523f, 0.070712f, -0.027768f, 0.006000f, 0.021167f, 0.028725f, 0.045304f, 0.025707f, -0.011412f, -0.039548f, -0.057977f, -0.017730f, -0.022732f, 0.000445f, -0.017246f, 0.041414f, -0.022002f, -0.035045f, 0.003038f, 0.019960f, -0.090892f, 0.053299f, 0.001608f, 0.032557f, 0.051533f, -0.085562f, 0.019012f, 0.045337f, 0.009351f, 0.034066f, -0.033983f, 0.037431f, 0.009969f, -0.032957f, -0.000162f, -0.020413f, -0.063916f, 0.035683f, 0.019093f, 0.058834f, -0.032603f, -0.041390f, -0.015389f, 0.014590f, -0.009356f, -0.070699f, -0.035922f, 0.023119f, -0.005839f, 0.011824f, -0.030732f, -0.008268f, 0.023455f, -0.019078f, -0.010470f, -0.029449f, -0.007498f, 0.012372f, -0.034210f, 0.004833f, -0.074336f, -0.059695f, 0.018699f, -0.062100f, 0.005441f, -0.064978f, -0.046532f, -0.030561f, 0.031320f, 0.063497f, 0.076481f, -0.016438f, 0.034221f, 0.043072f, 0.020490f, 0.019763f, -0.028969f, 0.086901f, 0.087421f, -0.056697f, 0.060099f, -0.043935f, + 0.031086f, 0.063569f, 0.059647f, 0.073607f, 0.086461f, 0.063237f, -0.064128f, -0.043326f, 0.003236f, 0.007079f, 0.030248f, -0.008587f, -0.006501f, 0.112402f, -0.082580f, -0.040716f, 0.042953f, -0.025425f, 0.040916f, -0.032063f, -0.037692f, 0.012953f, -0.087567f, -0.003353f, 0.056727f, -0.013524f, 0.028437f, -0.049092f, -0.013649f, -0.019193f, 0.000405f, 0.062210f, 0.017074f, 0.013987f, -0.012793f, 0.034147f, 0.009095f, 0.084689f, 0.018872f, 0.049411f, 0.001471f, -0.038670f, -0.038681f, 0.049104f, -0.026216f, 0.022565f, -0.002882f, -0.063810f, 0.043266f, -0.056966f, 0.107246f, -0.082397f, 0.047183f, 0.044247f, -0.050060f, -0.040183f, -0.032405f, 0.039860f, -0.006493f, 0.041639f, -0.004147f, 0.004576f, -0.079022f, -0.041491f, 0.013372f, -0.038185f, 0.007816f, -0.023921f, 0.017327f, 0.010979f, 0.052598f, -0.036064f, -0.017393f, -0.016605f, -0.034390f, 0.076052f, 0.007795f, 0.004849f, -0.080334f, -0.026487f, 0.030868f, 0.019839f, 0.015448f, 0.063947f, 0.032240f, 0.055360f, 0.055574f, -0.007740f, 0.012476f, -0.036591f, -0.166691f, 0.115353f, -0.070910f, -0.052426f, 0.002889f, 0.022311f, + 0.031843f, 0.003707f, -0.025324f, 0.089292f, 0.047815f, 0.010898f, -0.043956f, 0.028001f, 0.000084f, 0.032034f, -0.041895f, -0.032075f, 0.024946f, 0.066031f, -0.076414f, 0.001069f, 0.026979f, 0.006098f, -0.017519f, -0.013834f, -0.008116f, 0.000758f, -0.002220f, 0.015155f, 0.087616f, 0.002949f, -0.036978f, 0.055030f, -0.011621f, -0.058629f, -0.070094f, 0.065609f, 0.024385f, -0.012637f, 0.027560f, 0.012578f, 0.059140f, -0.080879f, -0.006038f, -0.043028f, -0.008935f, 0.040395f, -0.030281f, 0.013144f, -0.035167f, 0.013792f, 0.120904f, 0.004291f, -0.065009f, -0.081017f, -0.001822f, 0.030837f, 0.038585f, -0.036274f, 0.010608f, 0.051291f, -0.020700f, -0.118343f, 0.067305f, -0.045980f, -0.059351f, 0.019478f, 0.110147f, -0.082406f, 0.058166f, 0.063072f, 0.030934f, -0.076171f, -0.046771f, -0.047381f, 0.096248f, 0.032183f, 0.006001f, -0.006722f, 0.014896f, 0.027540f, -0.009104f, 0.013019f, -0.015092f, 0.000181f, -0.012040f, 0.045691f, -0.051424f, -0.005433f, 0.029943f, -0.070472f, 0.022373f, -0.017004f, 0.004793f, -0.008035f, -0.020357f, 0.012883f, -0.006040f, -0.028591f, 0.076932f, -0.058950f, + -0.017247f, 0.055238f, -0.035893f, -0.005205f, -0.011755f, 0.012293f, 0.053811f, 0.004413f, -0.053772f, 0.072984f, -0.040000f, 0.026111f, 0.044706f, 0.020380f, -0.017624f, 0.004183f, -0.040681f, 0.009944f, -0.024906f, -0.018883f, 0.096845f, -0.022481f, -0.039546f, 0.012901f, -0.018811f, 0.023378f, -0.015790f, 0.025678f, 0.062152f, -0.034218f, 0.020217f, 0.048285f, -0.056852f, 0.026240f, 0.030254f, 0.014555f, 0.038084f, -0.043081f, -0.011672f, 0.067914f, -0.046193f, -0.009039f, 0.019549f, -0.017159f, 0.064871f, -0.061222f, 0.012537f, 0.026512f, -0.026153f, 0.028312f, 0.029236f, -0.055963f, -0.146988f, -0.233978f, 0.019890f, 0.217574f, 0.015785f, 0.496275f, 0.514011f, 0.251228f, 0.536995f, 0.353663f, -0.081260f, -0.016898f, -0.126831f, -0.445525f, -0.390856f, -0.247899f, -0.454819f, -0.361117f, -0.112902f, -0.232672f, -0.195739f, 0.048522f, 0.094593f, -0.070602f, 0.012299f, 0.078350f, -0.093143f, -0.064961f, 0.117933f, 0.099501f, -0.007382f, 0.112063f, 0.209750f, 0.051451f, 0.143311f, 0.290382f, 0.125756f, 0.050233f, 0.256073f, 0.205881f, -0.000137f, 0.136118f, 0.300213f, 0.028241f, + 0.041500f, 0.229490f, 0.076167f, -0.073335f, 0.147522f, 0.132933f, -0.064179f, 0.107978f, 0.154323f, -0.059059f, -0.206610f, -0.130658f, -0.415042f, -0.650556f, -0.586962f, -0.626592f, -0.920571f, -0.840057f, -0.793531f, -0.953692f, -0.932347f, -0.788355f, -0.725052f, -0.670735f, -0.441453f, -0.251573f, -0.026505f, 0.085715f, 0.285422f, 0.490972f, 0.529982f, 0.599605f, 0.668773f, 0.271967f, 0.035929f} + }, + { + {-0.011317f, -0.017401f, 0.000332f, -0.009642f, -0.002163f, -0.006676f, 0.005464f, -0.010363f, 0.000486f, 0.004088f, -0.003496f, 0.003227f, -0.000834f, -0.000927f, 0.001407f, 0.001514f, 0.003165f, -0.004906f, -0.001127f, -0.003285f, -0.008545f, -0.000007f, 0.002575f, 0.000724f, -0.003623f, 0.006529f, 0.002367f, -0.002051f, 0.002302f, 0.000581f, -0.003699f, 0.002175f, -0.001226f, -0.004121f, -0.004597f, -0.002120f, -0.000886f, -0.002132f, 0.004308f, 0.008110f, -0.000711f, 0.012223f, 0.001974f, -0.009185f, 0.003344f, -0.001523f, -0.007051f, 0.000901f, -0.006702f, 0.007586f, 0.001688f, -0.005886f, 0.002949f, -0.003403f, 0.002508f, 0.003872f, 0.001858f, 0.001773f, -0.001337f, 0.003451f, -0.005592f, 0.003023f, -0.002431f, -0.002308f, -0.001535f, -0.002742f, -0.009905f, -0.001802f, 0.005436f, -0.003327f, 0.003885f, 0.001912f, -0.002711f, 0.000981f, -0.000008f, 0.003109f, 0.011948f, -0.005897f, 0.003257f, -0.001145f, 0.000633f, 0.000671f, -0.004906f, -0.005397f, 0.003565f, -0.000880f, -0.004459f, -0.005515f, -0.003509f, 0.005132f, -0.000537f, 0.006848f, 0.001396f, -0.008311f, -0.008763f, -0.006036f, + 0.002565f, 0.002366f, 0.004560f, -0.000465f, 0.005225f, -0.003747f, -0.000700f, -0.008933f, -0.001367f, -0.001452f, 0.001947f, 0.003728f, 0.003527f, 0.007072f, -0.003302f, -0.004225f, 0.003749f, 0.002403f, -0.004332f, -0.004158f, 0.000314f, 0.003532f, 0.001624f, 0.007929f, -0.002739f, -0.001953f, 0.008666f, 0.003069f, 0.016139f, 0.007291f, -0.004327f, 0.000378f, -0.009668f, 0.000757f, -0.011029f, -0.000120f, -0.003990f, 0.008425f, 0.001043f, 0.004896f, 0.005923f, 0.003879f, 0.005711f, 0.004515f, 0.001063f, -0.008415f, -0.000730f, -0.003586f, 0.006834f, 0.010780f, -0.006270f, -0.003175f, -0.002456f, -0.001885f, -0.004610f, -0.018668f, -0.020385f, -0.001405f, -0.006001f, 0.000969f, -0.004598f, -0.001003f, 0.011001f, -0.001827f, 0.005805f, -0.002600f, -0.005632f, -0.007292f, 0.001129f, -0.001382f, -0.009153f, 0.010422f, 0.002834f, 0.000851f, 0.005219f, 0.005360f, 0.008207f, 0.006095f, -0.000826f, -0.006179f, 0.005614f, 0.001484f, -0.008765f, -0.003649f, -0.004106f, -0.002450f, 0.007312f, -0.002516f, -0.013235f, -0.004313f, -0.001768f, 0.002768f, -0.004317f, -0.008377f, -0.000019f, -0.000784f, + 0.009493f, 0.001476f, -0.000378f, 0.003587f, -0.000526f, 0.013205f, -0.002583f, 0.001194f, -0.003225f, -0.005282f, -0.000301f, 0.005613f, 0.002258f, 0.001465f, 0.005055f, -0.005027f, -0.008500f, -0.005999f, -0.001482f, 0.000910f, -0.002209f, 0.000028f, -0.006443f, -0.001612f, 0.002942f, -0.002267f, 0.006146f, 0.002978f, -0.000619f, 0.000732f, -0.006260f, -0.005707f, 0.009714f, 0.001476f, 0.003896f, 0.001506f, 0.002459f, 0.013392f, -0.001109f, 0.007019f, 0.003523f, 0.009231f, 0.010509f, -0.002204f, 0.000438f, 0.007010f, 0.006175f, 0.004703f, 0.012019f, 0.002771f, -0.004629f, 0.000754f, 0.010404f, 0.004047f, 0.004593f, 0.009674f, 0.012174f, 0.008582f, -0.003538f, -0.008636f, 0.005500f, 0.004305f, -0.005761f, -0.008382f, -0.000266f, -0.004885f, 0.001498f, 0.003272f, -0.003876f, -0.004214f, 0.003433f, 0.003346f, 0.006697f, -0.005093f, -0.011185f, -0.005232f, -0.005384f, -0.006958f, -0.003348f, -0.007961f, 0.003689f, -0.010882f, 0.003559f, 0.000736f, 0.001384f, -0.004981f, 0.009105f, 0.007577f, -0.008445f, 0.008733f, 0.002134f, -0.001641f, 0.001654f, -0.006873f, -0.003463f, 0.005774f, + 0.000741f, 0.002153f, 0.000085f, 0.006882f, 0.001363f, 0.008569f, -0.006188f, -0.001129f, -0.002440f, 0.002886f, 0.003259f, -0.002815f, 0.001286f, -0.005574f, -0.000123f, 0.002303f, -0.000324f, 0.035227f, 0.001158f, 0.031099f, 0.003435f, 0.019390f, -0.003476f, -0.004324f, 0.006416f, -0.015940f, 0.017394f, -0.010219f, 0.011965f, 0.007342f, -0.005147f, 0.003999f, 0.000460f, -0.000205f, -0.001882f, 0.003780f, 0.007442f, 0.007282f, 0.014264f, 0.002447f, 0.005189f, -0.001322f, 0.016627f, -0.018814f, 0.001387f, -0.002172f, 0.005280f, 0.006857f, -0.008514f, 0.002843f, 0.005251f, 0.001422f, 0.007256f, 0.002621f, -0.006325f, 0.002716f, 0.015036f, -0.003395f, 0.005304f, -0.003128f, -0.001166f, -0.001423f, -0.009052f, 0.014799f, 0.000799f, 0.000776f, 0.012677f, -0.002362f, 0.001963f, 0.013701f, -0.020077f, 0.005098f, 0.000697f, 0.005634f, 0.018231f, 0.004430f, 0.005266f, 0.005272f, -0.000711f, -0.005426f, -0.002076f, 0.003574f, 0.002747f, 0.008617f, -0.002123f, 0.007027f, 0.004741f, -0.003044f, 0.002771f, -0.006418f, -0.002741f, 0.000572f, -0.014220f, -0.017933f, -0.006838f, -0.002882f, + -0.006451f, 0.013956f, 0.006239f, -0.011561f, 0.012792f, -0.002017f, -0.009046f, 0.002491f, 0.005649f, -0.005395f, -0.008271f, -0.007858f, -0.015863f, -0.008364f, 0.007034f, -0.010440f, -0.016127f, 0.004271f, 0.006682f, 0.000987f, -0.005877f, 0.011842f, 0.001596f, 0.010912f, -0.000624f, -0.002947f, 0.006502f, 0.010297f, -0.015104f, -0.007608f, 0.004188f, -0.003796f, 0.003761f, -0.010329f, -0.000689f, 0.002251f, 0.003617f, -0.008905f, -0.015393f, -0.004792f, 0.004497f, -0.003078f, -0.001952f, 0.000449f, 0.004958f, -0.002027f, 0.002730f, -0.005712f, 0.008887f, -0.012267f, -0.008833f, -0.003625f, -0.008669f, -0.003154f, -0.002415f, 0.002825f, -0.006414f, 0.004143f, 0.009573f, -0.001483f, 0.002132f, 0.001949f, 0.004489f, 0.008785f, -0.003785f, -0.002532f, -0.001988f, -0.004661f, 0.009685f, -0.004735f, -0.017262f, -0.011544f, -0.006817f, -0.004526f, -0.015164f, -0.036633f, -0.002928f, 0.002141f, 0.000861f, -0.012101f, -0.004709f, -0.013667f, -0.002922f, -0.016041f, -0.017481f, -0.014372f, -0.002707f, -0.009600f, -0.019726f, -0.012960f, 0.004807f, 0.006049f, -0.004986f, 0.012002f, 0.007407f, -0.004715f, + 0.015737f, 0.003051f, 0.001939f, 0.002267f, -0.019905f, -0.000893f, 0.004175f, 0.007651f, -0.005717f, -0.005837f, 0.013078f, 0.023833f, -0.017069f, 0.006383f, -0.004419f, -0.000955f, -0.014893f, -0.001397f, 0.000718f, -0.008026f, -0.009273f, -0.007371f, -0.007721f, -0.004560f, 0.006145f, 0.017637f, -0.007183f, 0.006692f, 0.012911f, 0.010871f, -0.002542f, 0.001375f, -0.002725f, -0.003221f, -0.015028f, -0.007796f, 0.010363f, -0.005592f, 0.003221f, -0.005297f, 0.005893f, 0.002761f, -0.000478f, -0.000274f, -0.006209f, -0.005853f, 0.002787f, -0.001834f, 0.004697f, -0.018680f, -0.018933f, -0.001602f, -0.021734f, -0.005198f, -0.026320f, -0.006834f, -0.018407f, -0.003040f, 0.004426f, 0.004152f, 0.021663f, -0.013734f, 0.005490f, 0.004911f, -0.010472f, -0.005812f, 0.017618f, 0.001084f, -0.004042f, 0.001423f, -0.012948f, 0.011861f, -0.016825f, -0.006507f, 0.008775f, 0.004263f, -0.000950f, 0.002387f, -0.002596f, 0.005174f, -0.006644f, -0.013904f, 0.001823f, 0.005837f, 0.006189f, -0.011214f, 0.003881f, 0.011384f, -0.011349f, -0.016126f, 0.013363f, -0.011156f, 0.009060f, -0.008161f, 0.005483f, -0.000812f, + -0.010087f, -0.014861f, -0.007886f, 0.003463f, 0.000402f, 0.004941f, -0.006534f, -0.007736f, -0.017379f, 0.009194f, -0.012177f, -0.006364f, 0.008132f, 0.015984f, -0.001135f, -0.003652f, -0.023063f, -0.019160f, -0.005351f, -0.006914f, 0.009982f, -0.002653f, -0.013164f, -0.002258f, 0.001620f, -0.007710f, -0.001112f, -0.016521f, 0.011916f, 0.004928f, 0.014640f, 0.018296f, 0.013872f, 0.006477f, 0.039301f, 0.018227f, 0.025603f, -0.008367f, -0.000534f, -0.001032f, -0.037896f, 0.001368f, 0.016919f, -0.008261f, -0.002607f, 0.000614f, 0.024489f, -0.004825f, 0.014305f, -0.003629f, 0.013687f, 0.006566f, 0.016810f, 0.022434f, 0.003228f, 0.014670f, -0.004601f, 0.012547f, -0.001639f, 0.023964f, 0.013401f, -0.001385f, 0.014293f, 0.010433f, -0.004094f, 0.009875f, 0.006644f, 0.008344f, -0.007409f, -0.007106f, -0.020105f, -0.002405f, 0.014252f, 0.001524f, 0.001774f, -0.005954f, -0.007596f, -0.007333f, -0.006734f, 0.033652f, -0.022660f, 0.007488f, 0.010490f, 0.004524f, 0.002846f, -0.015036f, -0.018096f, -0.006245f, -0.002899f, -0.002590f, -0.031248f, -0.017236f, -0.016206f, -0.001220f, -0.001018f, 0.007095f, + -0.001304f, 0.005903f, 0.010715f, 0.017365f, 0.003423f, -0.007852f, 0.006564f, -0.015580f, 0.003549f, -0.012747f, 0.004090f, 0.003293f, 0.058310f, 0.007608f, 0.007700f, 0.007951f, -0.004862f, -0.022848f, 0.015154f, 0.018492f, -0.010742f, 0.008857f, 0.006653f, -0.013106f, -0.003087f, 0.015549f, 0.007097f, -0.024065f, 0.005468f, -0.005453f, -0.014041f, 0.001253f, 0.006519f, 0.003616f, -0.001185f, 0.001145f, 0.010094f, -0.001786f, 0.005320f, -0.018223f, 0.007122f, -0.000325f, 0.007004f, 0.006255f, -0.004431f, 0.015972f, -0.020125f, -0.006521f, -0.019855f, 0.018481f, 0.007164f, 0.029013f, 0.012741f, 0.001825f, 0.005183f, -0.020064f, -0.000804f, 0.008399f, 0.006436f, 0.008704f, 0.000923f, 0.005912f, -0.006333f, 0.008333f, 0.019026f, 0.028340f, 0.010936f, -0.009830f, -0.006967f, -0.000555f, -0.005517f, 0.011941f, 0.012992f, -0.007013f, 0.007633f, 0.016870f, 0.004351f, -0.018021f, -0.040022f, -0.017515f, 0.008021f, 0.019667f, -0.007434f, 0.007388f, -0.001318f, -0.001610f, 0.000124f, 0.020129f, 0.003329f, -0.034709f, 0.009168f, 0.019117f, -0.021333f, 0.014425f, 0.019509f, -0.050163f, + 0.009408f, 0.004026f, 0.009581f, -0.017576f, 0.027522f, -0.039195f, -0.002206f, -0.001121f, -0.005216f, -0.002386f, -0.013811f, -0.013677f, -0.004432f, 0.016527f, -0.000399f, 0.002245f, -0.009747f, 0.012188f, -0.003559f, -0.003212f, 0.005836f, 0.019998f, -0.014015f, 0.014952f, -0.004392f, 0.009825f, 0.001941f, 0.014180f, 0.016769f, -0.002445f, 0.002853f, -0.022479f, -0.014364f, -0.003101f, -0.011423f, -0.020274f, 0.000166f, -0.006123f, -0.016737f, 0.023335f, -0.022338f, -0.004661f, -0.011830f, -0.008788f, 0.012119f, -0.014510f, 0.006729f, -0.003718f, 0.012350f, -0.005809f, 0.013670f, -0.019543f, -0.009021f, 0.004951f, 0.016869f, -0.032813f, -0.016377f, 0.003517f, -0.003405f, -0.003976f, 0.010271f, -0.015879f, -0.039607f, 0.010037f, -0.035747f, 0.018207f, -0.016409f, 0.002594f, -0.039278f, -0.009309f, -0.027504f, -0.011052f, 0.033405f, 0.001932f, -0.028595f, 0.026851f, -0.012950f, 0.002213f, -0.029839f, 0.004934f, 0.010929f, -0.025346f, -0.006973f, -0.022622f, -0.000870f, 0.001858f, -0.008500f, -0.006017f, 0.021717f, 0.003823f, -0.016032f, 0.004171f, -0.033469f, 0.019952f, 0.030224f, -0.009728f, + 0.012075f, 0.022378f, -0.002600f, -0.004195f, 0.001717f, 0.002983f, 0.011879f, 0.002503f, 0.001893f, 0.007078f, -0.019392f, -0.001023f, -0.022178f, -0.021140f, -0.010060f, 0.009298f, 0.011389f, -0.000378f, -0.026642f, 0.005272f, 0.005125f, 0.012724f, 0.025397f, -0.027338f, 0.038808f, -0.033233f, -0.000303f, -0.006402f, -0.007724f, -0.015842f, -0.033194f, -0.041597f, -0.018496f, -0.004327f, 0.008337f, -0.002636f, -0.000826f, 0.006829f, -0.003111f, 0.030369f, 0.010925f, -0.029428f, -0.008143f, 0.000575f, 0.015592f, -0.019399f, -0.002826f, -0.040028f, 0.003327f, 0.036745f, -0.032872f, -0.018212f, -0.034308f, 0.041176f, 0.018834f, -0.021480f, 0.028169f, 0.026439f, 0.039668f, -0.015189f, -0.012524f, 0.027436f, -0.003292f, -0.006489f, 0.010748f, 0.011702f, 0.005907f, 0.005130f, -0.037711f, -0.004995f, 0.001005f, -0.000578f, 0.003026f, -0.005269f, 0.017267f, 0.030830f, 0.004122f, 0.001254f, 0.000374f, 0.000596f, 0.030159f, 0.006839f, -0.001129f, -0.007320f, 0.008428f, 0.005526f, -0.003633f, 0.002407f, -0.015718f, -0.004441f, 0.026406f, -0.026198f, -0.011266f, -0.022735f, 0.029426f, -0.027018f, + 0.014088f, -0.011655f, 0.009422f, -0.006665f, 0.007834f, -0.021934f, 0.005919f, 0.030543f, -0.019612f, 0.000608f, -0.053897f, -0.003509f, -0.018201f, 0.000418f, -0.050099f, -0.003367f, -0.001112f, -0.016977f, -0.009526f, 0.040858f, -0.043404f, 0.006366f, -0.010344f, -0.017990f, 0.014209f, -0.016448f, -0.032747f, -0.025912f, 0.006487f, 0.000642f, 0.011663f, -0.018456f, -0.009482f, 0.034017f, 0.013711f, -0.005867f, 0.008975f, -0.018835f, -0.017217f, -0.016392f, 0.035808f, -0.031792f, -0.036664f, 0.017245f, -0.033954f, 0.012177f, 0.003009f, 0.008723f, -0.014190f, -0.004758f, -0.017579f, -0.009092f, -0.013106f, 0.006339f, 0.019554f, 0.011370f, -0.026736f, 0.032578f, 0.006080f, 0.010907f, 0.005158f, 0.015349f, -0.001261f, 0.014751f, 0.006067f, -0.007540f, 0.012224f, 0.002976f, 0.015526f, 0.008404f, -0.019206f, 0.008198f, -0.003700f, 0.005628f, -0.001632f, -0.008597f, -0.003803f, -0.015729f, 0.017323f, 0.014848f, 0.019179f, -0.003352f, 0.032576f, 0.034537f, 0.017533f, 0.004279f, 0.019612f, 0.035898f, 0.021854f, 0.039230f, 0.029600f, 0.029247f, -0.027027f, -0.031886f, 0.011360f, -0.006478f, + -0.003286f, 0.002529f, -0.010196f, 0.013356f, 0.016140f, 0.006450f, 0.036913f, -0.006699f, -0.011754f, -0.015778f, -0.005728f, 0.004126f, 0.002888f, -0.064068f, -0.012170f, 0.029347f, 0.018846f, -0.062109f, -0.046989f, -0.013716f, -0.001171f, 0.021461f, -0.009166f, -0.000683f, -0.050501f, 0.007902f, -0.026662f, 0.019555f, -0.004084f, 0.025660f, -0.021658f, -0.004377f, -0.025587f, 0.005316f, 0.020208f, -0.008868f, 0.005684f, -0.013432f, 0.000802f, -0.032734f, -0.009605f, -0.000576f, 0.002224f, 0.026112f, 0.032415f, 0.002238f, -0.030022f, -0.019915f, -0.009728f, 0.004225f, -0.007911f, 0.010699f, -0.034318f, -0.009468f, -0.004599f, -0.007699f, -0.019126f, -0.003281f, -0.008643f, 0.024673f, 0.034306f, 0.024204f, 0.008805f, 0.015307f, 0.014768f, -0.015051f, 0.057385f, 0.035748f, -0.043979f, -0.037350f, 0.042595f, -0.031420f, -0.017855f, 0.007794f, 0.005868f, -0.030461f, 0.032311f, 0.003363f, -0.094355f, 0.027060f, 0.062367f, -0.040438f, 0.044021f, 0.056871f, -0.015536f, -0.004569f, 0.033434f, -0.033610f, -0.018152f, 0.012631f, -0.011875f, -0.020898f, -0.018247f, -0.013787f, 0.021907f, 0.011287f, + 0.014775f, -0.004809f, -0.018998f, -0.017663f, 0.020198f, -0.016746f, -0.000303f, 0.004062f, -0.027497f, 0.016941f, 0.016186f, -0.013254f, -0.008393f, -0.024032f, 0.001510f, -0.015578f, 0.020133f, -0.033137f, 0.003198f, 0.010119f, -0.000900f, -0.016824f, -0.031731f, -0.009284f, -0.013451f, -0.005192f, -0.024494f, 0.032155f, -0.032879f, 0.003712f, -0.011651f, 0.006410f, -0.046907f, 0.046556f, 0.009678f, 0.002560f, -0.019195f, 0.008747f, 0.008230f, -0.000313f, 0.004655f, -0.011234f, -0.037223f, -0.009063f, -0.016100f, -0.026626f, -0.032101f, -0.014323f, -0.008165f, -0.034710f, -0.012361f, -0.004385f, 0.021812f, 0.007186f, -0.029206f, -0.028296f, 0.015134f, -0.009760f, -0.037185f, -0.019017f, 0.008378f, 0.026931f, 0.029245f, 0.027233f, 0.047803f, -0.012551f, -0.034002f, -0.034509f, -0.003108f, 0.019036f, 0.036778f, 0.016469f, 0.007564f, 0.021090f, 0.062801f, -0.055498f, 0.000052f, -0.023003f, -0.026916f, -0.018563f, 0.029711f, -0.016751f, -0.014900f, 0.012967f, 0.037853f, 0.021360f, -0.025263f, 0.016187f, -0.026559f, 0.019626f, 0.003071f, -0.004432f, -0.011804f, -0.022388f, -0.015099f, 0.002445f, + 0.005929f, -0.034630f, 0.023354f, 0.002451f, -0.000900f, -0.013746f, -0.012057f, 0.022837f, -0.030327f, -0.002464f, 0.037666f, 0.040758f, -0.035022f, -0.003327f, -0.005073f, -0.024955f, -0.028878f, 0.033475f, 0.010215f, 0.021070f, -0.004235f, 0.002042f, -0.000445f, 0.021093f, -0.005885f, 0.000678f, -0.024228f, 0.038025f, 0.034683f, -0.047237f, -0.054658f, -0.012430f, 0.003362f, -0.019064f, 0.004619f, -0.014132f, 0.007095f, -0.029103f, 0.033543f, -0.037302f, -0.030065f, -0.011996f, 0.008064f, 0.026184f, -0.010898f, 0.037961f, 0.006414f, -0.012548f, -0.010512f, -0.008645f, -0.021598f, 0.024577f, 0.018448f, -0.080431f, 0.120360f, -0.081888f, -0.023957f, 0.024701f, 0.063924f, 0.056397f, -0.022267f, -0.019030f, 0.001159f, 0.005653f, 0.031863f, 0.015215f, -0.047583f, 0.016223f, -0.012100f, -0.013227f, 0.002142f, 0.021225f, -0.002542f, -0.031181f, -0.032183f, 0.018614f, 0.010679f, 0.023787f, -0.013712f, 0.028814f, 0.003831f, 0.033342f, -0.005363f, -0.007443f, 0.020346f, 0.000261f, -0.026251f, 0.007232f, 0.025833f, 0.001883f, -0.034066f, 0.018990f, 0.035084f, -0.031088f, 0.011438f, -0.033575f, + 0.012499f, -0.043222f, -0.032449f, 0.054599f, 0.045736f, 0.025880f, 0.060193f, -0.008446f, 0.072265f, 0.031187f, 0.026648f, 0.043548f, -0.069240f, 0.060461f, 0.017402f, 0.026773f, 0.024215f, 0.010184f, -0.034810f, 0.009368f, 0.060682f, 0.075488f, -0.002875f, -0.076618f, 0.037637f, 0.006456f, 0.014717f, 0.001499f, -0.000438f, -0.013365f, -0.063580f, 0.016304f, -0.013435f, 0.017338f, 0.082793f, -0.004583f, -0.094963f, -0.050398f, -0.055237f, -0.023296f, 0.002128f, 0.030286f, -0.080686f, -0.020015f, 0.014593f, -0.039951f, -0.042539f, -0.041820f, -0.042458f, -0.008693f, 0.050360f, 0.023420f, -0.017634f, 0.021804f, 0.011271f, -0.023913f, 0.026810f, -0.029790f, -0.004551f, 0.010129f, 0.018323f, -0.057600f, 0.029820f, -0.029182f, 0.017735f, -0.012674f, -0.043245f, 0.010805f, 0.015682f, 0.005247f, 0.009107f, -0.020395f, -0.062095f, 0.000840f, 0.014894f, 0.012129f, 0.002354f, 0.006162f, -0.024782f, -0.002141f, -0.000558f, 0.056093f, -0.007228f, -0.097177f, -0.041380f, -0.012264f, -0.077510f, 0.016085f, -0.022553f, -0.022179f, -0.036552f, -0.019088f, -0.055421f, -0.057892f, -0.067008f, -0.008870f, + 0.073614f, 0.007858f, -0.044253f, 0.018997f, 0.001950f, -0.007020f, -0.024470f, -0.037873f, 0.016247f, 0.028323f, 0.023630f, 0.011854f, -0.012435f, -0.055987f, -0.036274f, -0.031796f, 0.051815f, -0.004520f, 0.041239f, 0.057250f, -0.048455f, -0.056727f, -0.063366f, 0.018278f, 0.020101f, -0.082570f, -0.050436f, 0.003915f, 0.000971f, 0.027821f, -0.099942f, 0.012933f, 0.021403f, 0.070823f, -0.080261f, 0.011940f, 0.011646f, -0.007140f, 0.042264f, -0.022254f, 0.075047f, -0.001272f, 0.005522f, 0.026051f, 0.028454f, -0.025654f, -0.062759f, 0.039218f, 0.042374f, 0.013498f, 0.053933f, 0.014308f, -0.008088f, -0.016784f, -0.047638f, 0.076053f, -0.033312f, 0.072491f, 0.025916f, -0.000636f, 0.019148f, -0.024221f, 0.035861f, 0.041439f, -0.026564f, 0.032380f, 0.012766f, -0.066045f, 0.051063f, 0.059051f, -0.007869f, -0.030154f, 0.005697f, 0.005084f, 0.001032f, -0.005469f, 0.097202f, 0.006256f, -0.058756f, -0.023159f, 0.009474f, -0.072682f, -0.110124f, 0.025986f, 0.133034f, 0.042781f, -0.012323f, -0.071158f, -0.025439f, 0.004671f, 0.087390f, -0.036896f, -0.049341f, -0.077336f, -0.133592f, 0.037829f, + 0.066493f, -0.088235f, -0.006262f, 0.047258f, -0.019464f, -0.040559f, 0.036360f, -0.039235f, -0.019233f, 0.001290f, -0.027015f, 0.044173f, -0.014154f, -0.022590f, -0.006770f, 0.022483f, 0.084015f, -0.014666f, -0.037079f, -0.044422f, 0.016375f, 0.037765f, 0.024619f, -0.039551f, -0.005081f, 0.043158f, 0.001982f, -0.036101f, 0.011989f, -0.032469f, 0.077189f, -0.036691f, -0.082560f, 0.026590f, -0.013621f, 0.037512f, -0.055393f, -0.056850f, 0.055025f, -0.006588f, -0.071235f, -0.040028f, -0.068218f, 0.085874f, 0.042105f, 0.021543f, -0.093332f, 0.014284f, 0.037558f, -0.067270f, 0.002871f, -0.048923f, -0.036652f, 0.034201f, -0.033013f, 0.039625f, -0.027863f, -0.058519f, -0.014976f, -0.015865f, -0.011040f, 0.017762f, 0.003544f, -0.036724f, 0.105816f, -0.014545f, 0.043848f, 0.049434f, 0.024313f, -0.014494f, 0.003620f, -0.022839f, 0.050535f, 0.020907f, -0.035417f, 0.027128f, 0.095581f, 0.022347f, 0.040120f, -0.001335f, 0.007974f, 0.017766f, -0.037850f, 0.017940f, 0.031892f, 0.002603f, -0.043205f, -0.019631f, -0.032635f, -0.010172f, -0.043290f, -0.037340f, 0.002698f, -0.029302f, 0.044084f, 0.017284f, + -0.013054f, -0.031280f, -0.018352f, -0.008764f, 0.022713f, -0.005432f, -0.041047f, -0.029763f, 0.005866f, 0.010600f, 0.019990f, 0.010700f, -0.010815f, 0.012582f, -0.036080f, -0.100772f, 0.002048f, 0.127220f, -0.005928f, -0.088655f, -0.017034f, 0.061685f, 0.014298f, 0.011882f, -0.003958f, -0.037327f, -0.051471f, -0.027307f, 0.008905f, -0.000951f, -0.047803f, 0.018826f, -0.093824f, -0.014406f, 0.082400f, 0.026838f, 0.106641f, -0.012531f, -0.045431f, -0.011291f, -0.012060f, 0.030749f, 0.003822f, 0.000560f, -0.062079f, -0.028776f, -0.031189f, -0.003209f, 0.066055f, -0.008951f, -0.020156f, 0.022282f, 0.024085f, 0.002681f, -0.041889f, -0.062416f, -0.043366f, -0.145318f, -0.223694f, 0.050192f, 0.197002f, 0.059398f, 0.483982f, 0.454441f, 0.199635f, 0.467556f, 0.194209f, -0.092799f, -0.008361f, -0.150540f, -0.397597f, -0.222026f, -0.213329f, -0.409797f, -0.301284f, -0.178841f, -0.263420f, -0.182328f, 0.023429f, -0.029313f, -0.095220f, 0.079247f, 0.072854f, -0.017924f, 0.077746f, 0.240175f, 0.089485f, 0.028132f, 0.227136f, 0.199656f, 0.051785f, 0.240331f, 0.298969f, -0.026627f, 0.165041f, 0.298155f, + 0.094739f, 0.100118f, 0.301494f, 0.166043f, -0.059982f, 0.224374f, 0.145853f, -0.108818f, 0.062567f, 0.165410f, -0.135105f, -0.208379f, -0.083323f, -0.394651f, -0.631882f, -0.615483f, -0.680990f, -1.058735f, -0.927114f, -0.778052f, -0.993223f, -0.864091f, -0.584479f, -0.682647f, -0.545290f, -0.215034f, -0.134996f, 0.096901f, 0.257068f, 0.486545f, 0.679280f, 0.742615f, 0.872327f, 0.945296f, 0.845111f, 0.760948f, 0.746588f, 0.319287f, -0.024459f, -0.004229f}, + {-0.010706f, -0.017167f, -0.001287f, -0.017525f, -0.009700f, -0.003350f, -0.003022f, -0.000475f, -0.004166f, -0.000782f, 0.003795f, -0.004550f, 0.005319f, 0.000654f, -0.007138f, 0.004469f, -0.001227f, 0.004777f, 0.000710f, -0.006772f, 0.004794f, 0.002655f, 0.003770f, -0.002894f, -0.004321f, -0.003106f, -0.003593f, 0.002845f, -0.000589f, 0.000792f, -0.003918f, 0.002820f, -0.004754f, -0.006515f, 0.000356f, -0.008098f, -0.006024f, -0.003101f, 0.008709f, 0.001080f, 0.003363f, -0.010534f, 0.001550f, 0.001805f, -0.009058f, 0.003266f, 0.000719f, -0.009460f, -0.001724f, -0.000697f, -0.007337f, 0.008416f, -0.005262f, -0.003027f, 0.004961f, -0.000349f, -0.008892f, -0.000889f, -0.006146f, 0.006933f, 0.006046f, -0.008478f, -0.004422f, -0.005665f, -0.003831f, -0.002393f, 0.003671f, 0.003218f, 0.002109f, 0.005822f, -0.000052f, 0.002312f, -0.000854f, -0.002310f, -0.003048f, -0.001391f, 0.021128f, -0.010667f, 0.001167f, -0.006518f, -0.000132f, 0.008401f, 0.004501f, 0.005122f, -0.004478f, 0.006430f, -0.006734f, 0.007261f, 0.004146f, 0.008826f, 0.004209f, -0.002172f, -0.010124f, 0.010790f, 0.008028f, 0.002412f, + 0.001610f, 0.000602f, -0.004147f, -0.005523f, 0.006077f, 0.003097f, 0.004060f, 0.005103f, -0.005394f, -0.000910f, 0.005483f, 0.005704f, -0.000556f, -0.005113f, -0.008536f, -0.000473f, 0.001877f, -0.005823f, 0.002215f, 0.000886f, -0.007692f, -0.004817f, -0.000390f, 0.003472f, 0.000295f, -0.004417f, 0.007585f, 0.000806f, -0.002311f, -0.006056f, -0.001039f, 0.000049f, -0.010165f, 0.004157f, 0.006633f, -0.004222f, 0.008438f, 0.006147f, -0.000942f, 0.004958f, 0.003440f, 0.010304f, 0.003563f, 0.001361f, -0.001621f, 0.003423f, -0.008770f, 0.000403f, 0.004268f, -0.005137f, 0.004834f, 0.005049f, 0.006321f, 0.003124f, 0.008084f, -0.019988f, -0.013512f, -0.002243f, -0.008605f, -0.007880f, 0.004007f, -0.011513f, -0.010558f, 0.002824f, -0.004641f, -0.004694f, 0.004765f, -0.003843f, -0.007411f, -0.001140f, -0.000326f, -0.002476f, -0.003257f, -0.002384f, -0.008547f, -0.000867f, -0.006098f, -0.004911f, -0.000000f, 0.007535f, -0.001509f, 0.011030f, -0.005673f, 0.006488f, 0.008074f, -0.009153f, 0.003297f, -0.002584f, 0.001930f, -0.006595f, 0.003308f, 0.003665f, 0.006265f, -0.003484f, -0.007183f, -0.002960f, + -0.003850f, 0.001971f, 0.003070f, -0.009373f, -0.000933f, -0.006577f, -0.004758f, 0.001249f, -0.007162f, -0.012212f, -0.002028f, 0.011082f, 0.002724f, 0.003554f, 0.000791f, 0.002144f, 0.001732f, 0.003713f, 0.004707f, 0.012384f, 0.001101f, -0.006365f, -0.007318f, -0.002253f, -0.003440f, -0.001671f, -0.014952f, 0.002329f, -0.001008f, 0.003913f, -0.001974f, 0.000312f, -0.003581f, -0.002991f, 0.014692f, 0.001263f, 0.001069f, 0.016026f, 0.018484f, 0.014221f, 0.010567f, 0.014953f, 0.006078f, 0.006505f, -0.001343f, 0.004260f, 0.015755f, 0.001696f, 0.004827f, -0.005826f, -0.003863f, 0.012079f, -0.008050f, -0.014721f, 0.004506f, -0.012291f, 0.010683f, 0.002543f, 0.012816f, -0.004025f, -0.000743f, -0.003104f, 0.004259f, 0.005157f, -0.000108f, -0.012502f, -0.002511f, 0.010811f, -0.007072f, 0.004910f, 0.002941f, -0.002360f, -0.002991f, 0.012022f, 0.009125f, 0.020925f, 0.008468f, 0.001814f, 0.005128f, -0.001674f, 0.001415f, 0.006663f, 0.004078f, 0.017873f, -0.007432f, -0.004959f, 0.001435f, 0.004697f, -0.002581f, 0.008368f, -0.007475f, 0.001744f, -0.000240f, -0.005767f, 0.002143f, 0.001958f, + -0.007691f, -0.010672f, -0.006341f, 0.008818f, 0.004606f, 0.000281f, -0.000193f, 0.006775f, 0.001083f, 0.002486f, 0.011965f, 0.005962f, -0.001822f, -0.001276f, 0.011113f, -0.007984f, 0.002730f, 0.035045f, -0.000858f, 0.017280f, -0.003342f, -0.002450f, 0.018035f, -0.017697f, -0.006470f, -0.001194f, 0.008760f, 0.006472f, -0.004121f, 0.003672f, 0.001396f, -0.016041f, 0.003796f, 0.008849f, 0.007389f, -0.018017f, -0.006722f, 0.002206f, -0.013377f, -0.003440f, 0.000644f, 0.000725f, 0.001408f, -0.001875f, 0.007927f, -0.005753f, 0.006212f, 0.013742f, 0.013210f, -0.003854f, -0.008232f, -0.001302f, 0.014903f, -0.000794f, -0.001279f, 0.000189f, 0.001037f, -0.007905f, 0.000873f, 0.006509f, 0.000458f, 0.001575f, 0.005651f, -0.004061f, 0.003610f, 0.002437f, -0.002260f, 0.010793f, 0.000464f, 0.008568f, 0.001072f, -0.002897f, 0.003094f, 0.005691f, 0.004267f, -0.000312f, -0.009143f, -0.007766f, -0.010898f, -0.004642f, -0.001135f, -0.000146f, -0.002002f, 0.007349f, 0.005642f, -0.005185f, -0.010851f, -0.000049f, 0.004247f, 0.005703f, -0.007027f, -0.001917f, -0.009359f, -0.025942f, -0.006797f, -0.008762f, + 0.001654f, 0.004366f, -0.004443f, -0.005152f, -0.048997f, 0.001038f, 0.015723f, -0.011368f, -0.018339f, 0.013797f, -0.020744f, -0.003061f, -0.009274f, -0.010822f, -0.006763f, -0.006757f, 0.000761f, 0.008426f, -0.001491f, 0.004751f, -0.005255f, 0.006394f, -0.004754f, -0.007299f, 0.003338f, -0.002650f, -0.011629f, -0.014821f, 0.007251f, 0.000861f, 0.007178f, 0.002318f, 0.015934f, 0.002395f, 0.005636f, -0.007421f, -0.012975f, -0.003641f, -0.006330f, 0.013320f, -0.005910f, 0.000529f, 0.003663f, -0.006332f, 0.018652f, 0.012370f, 0.000570f, -0.014437f, -0.018231f, -0.006099f, 0.006557f, -0.016547f, -0.000006f, -0.007940f, -0.015489f, 0.001693f, -0.024463f, -0.005311f, -0.002096f, -0.009076f, 0.017414f, -0.000828f, -0.001945f, -0.000068f, 0.011309f, 0.013623f, 0.004940f, -0.013240f, -0.003287f, -0.003210f, 0.008508f, 0.003578f, 0.005555f, 0.011089f, -0.028725f, -0.040615f, 0.004323f, -0.008762f, 0.008465f, -0.010891f, -0.021252f, 0.001180f, 0.018124f, 0.004529f, 0.010839f, 0.009918f, 0.006430f, 0.005271f, -0.007338f, 0.005741f, 0.011810f, -0.018937f, -0.009912f, -0.005829f, -0.005117f, 0.007904f, + -0.002330f, 0.003193f, 0.012292f, 0.012053f, -0.005309f, -0.010339f, 0.001897f, -0.005458f, -0.005427f, -0.009980f, -0.008154f, -0.015582f, 0.003241f, -0.005334f, -0.000824f, 0.015311f, -0.003594f, 0.003588f, 0.003145f, -0.009596f, 0.008057f, 0.009487f, 0.011402f, -0.009764f, 0.018403f, -0.002241f, -0.014702f, -0.010919f, -0.016026f, 0.015167f, -0.006131f, -0.015308f, 0.004173f, -0.001534f, -0.012238f, 0.013194f, 0.015570f, -0.004623f, -0.014526f, 0.011227f, 0.002333f, 0.009079f, -0.002130f, 0.023207f, 0.011940f, -0.011627f, -0.007494f, -0.004768f, -0.006273f, 0.008723f, 0.008580f, 0.014440f, -0.038227f, -0.000389f, -0.006660f, 0.002187f, 0.000270f, 0.014181f, 0.011011f, 0.014693f, -0.002119f, 0.020174f, -0.009240f, 0.013584f, 0.017436f, 0.002744f, 0.017373f, 0.003265f, 0.004737f, -0.005215f, -0.001450f, -0.007616f, 0.013818f, -0.001286f, -0.001257f, 0.018597f, 0.011789f, -0.000292f, 0.005406f, -0.002106f, -0.000376f, 0.011896f, -0.006828f, -0.012772f, 0.000239f, -0.002227f, 0.006538f, -0.035215f, 0.021087f, 0.021930f, 0.009107f, 0.003796f, 0.000818f, -0.011626f, -0.022908f, 0.014649f, + -0.009112f, -0.011167f, -0.006843f, 0.013030f, -0.009466f, 0.007746f, 0.008765f, -0.008963f, -0.005271f, -0.020760f, 0.009351f, -0.013829f, 0.007852f, 0.000393f, 0.007031f, 0.011178f, 0.019490f, 0.007273f, -0.008851f, -0.022458f, -0.003693f, 0.011780f, 0.021393f, 0.014604f, -0.003239f, -0.005894f, -0.013778f, -0.024814f, -0.002517f, 0.013283f, 0.006911f, 0.001503f, 0.003513f, 0.014940f, 0.050192f, 0.027711f, -0.002683f, 0.005026f, 0.004224f, 0.011330f, 0.019651f, -0.002587f, 0.003620f, 0.033905f, 0.003128f, -0.001322f, 0.020004f, 0.014321f, -0.014409f, 0.008476f, 0.001649f, 0.013645f, 0.008925f, -0.023385f, 0.017390f, -0.010833f, -0.002014f, 0.001991f, 0.013462f, 0.002454f, 0.003257f, 0.010536f, 0.011626f, -0.011733f, 0.011927f, 0.037115f, -0.007189f, 0.016775f, 0.016755f, -0.009494f, 0.012969f, 0.003346f, -0.009680f, -0.010014f, 0.005871f, -0.009028f, -0.023965f, -0.003398f, -0.001914f, 0.001935f, -0.030535f, -0.007744f, 0.008203f, -0.019322f, -0.013599f, -0.031524f, 0.009210f, 0.013546f, -0.022202f, -0.008285f, -0.011316f, 0.021558f, -0.000639f, -0.013699f, -0.010206f, -0.015241f, + 0.005853f, 0.017647f, -0.014691f, 0.006034f, -0.007120f, 0.007729f, 0.019627f, 0.007462f, 0.015042f, 0.015369f, 0.019409f, 0.001385f, 0.050824f, 0.014950f, 0.001085f, -0.001909f, -0.008543f, 0.001400f, 0.008661f, -0.005222f, -0.013037f, -0.016678f, 0.000275f, 0.013731f, -0.016857f, 0.008819f, 0.009301f, -0.003402f, 0.033906f, 0.013414f, -0.009811f, -0.004941f, -0.003742f, 0.013597f, -0.006304f, -0.010653f, -0.013981f, 0.009056f, -0.029186f, 0.001993f, -0.009077f, -0.009250f, 0.007788f, 0.002968f, -0.011478f, -0.005374f, -0.011094f, 0.014951f, -0.005854f, -0.021254f, -0.003955f, 0.001444f, 0.000375f, -0.011960f, -0.019420f, 0.002611f, -0.004719f, -0.001580f, 0.004793f, -0.002984f, 0.015575f, 0.004335f, 0.008694f, -0.010033f, 0.023236f, 0.007940f, -0.013852f, 0.017076f, 0.029689f, -0.008295f, -0.009316f, 0.016627f, 0.013080f, 0.006701f, 0.007209f, -0.018836f, -0.007033f, -0.020523f, 0.004112f, 0.019726f, 0.006659f, -0.024507f, -0.007391f, 0.007348f, -0.026903f, -0.038861f, -0.006547f, -0.000820f, 0.006409f, -0.040052f, 0.018750f, 0.053662f, -0.022147f, 0.037731f, -0.008631f, -0.007872f, + -0.011886f, -0.019158f, 0.014252f, 0.000794f, 0.009698f, 0.009975f, -0.035235f, 0.000739f, 0.016229f, -0.013951f, -0.007636f, -0.021816f, 0.039048f, -0.024094f, 0.019227f, 0.018564f, -0.023380f, -0.009244f, -0.008201f, 0.016799f, -0.018701f, -0.007210f, 0.018928f, -0.002891f, -0.005118f, -0.008806f, 0.023115f, 0.004538f, -0.003762f, -0.009035f, 0.000605f, -0.017104f, 0.019082f, -0.001734f, 0.008790f, 0.048135f, 0.031959f, -0.026813f, -0.019347f, 0.008087f, -0.002424f, 0.020548f, -0.010884f, -0.015388f, -0.005639f, -0.029149f, -0.011442f, -0.002797f, -0.022833f, -0.012316f, 0.050976f, 0.012970f, 0.000311f, -0.001613f, -0.000410f, 0.015913f, 0.018097f, -0.002773f, 0.017914f, 0.002504f, -0.009457f, 0.003087f, -0.026794f, -0.000761f, -0.024679f, -0.012151f, 0.015842f, 0.023824f, -0.032271f, 0.015006f, -0.042056f, 0.006722f, 0.040192f, -0.010955f, -0.009424f, 0.008029f, -0.011573f, -0.010502f, 0.011908f, -0.001940f, -0.001443f, -0.000900f, -0.026025f, 0.045180f, -0.047573f, -0.005007f, -0.000212f, 0.016290f, 0.010922f, 0.000331f, -0.017409f, -0.013439f, 0.006814f, 0.035407f, -0.001831f, -0.015818f, + -0.009622f, -0.025335f, -0.000571f, -0.014863f, -0.010606f, -0.005179f, 0.009163f, -0.000765f, 0.002479f, -0.016964f, 0.004784f, 0.005055f, 0.012333f, 0.009365f, 0.012465f, -0.022870f, 0.001620f, -0.004320f, 0.016833f, 0.004366f, 0.032597f, 0.007284f, -0.005451f, 0.003431f, -0.015044f, 0.000678f, 0.015392f, 0.018376f, -0.024607f, -0.019539f, 0.000126f, 0.028949f, -0.041206f, 0.012798f, 0.052357f, 0.029147f, -0.010971f, 0.006490f, -0.024344f, 0.013504f, 0.027475f, -0.039840f, 0.012406f, -0.017702f, -0.002660f, -0.053948f, 0.003738f, -0.020108f, 0.026122f, 0.006120f, -0.022834f, -0.010977f, -0.032986f, 0.051778f, 0.014385f, 0.027357f, -0.030820f, -0.033437f, -0.006729f, 0.009507f, -0.009921f, -0.004064f, 0.016712f, 0.005177f, 0.004864f, 0.015620f, -0.038165f, -0.003711f, 0.000009f, 0.009969f, -0.026712f, 0.003809f, 0.003948f, -0.017896f, -0.010590f, -0.024809f, -0.019418f, 0.000149f, 0.007526f, -0.020076f, 0.000967f, -0.008993f, -0.018637f, 0.007212f, -0.000621f, 0.014587f, -0.040528f, -0.041589f, 0.008049f, -0.003506f, 0.015041f, 0.035013f, 0.003258f, -0.022017f, 0.030601f, -0.015639f, + -0.030062f, -0.022737f, -0.010364f, 0.002354f, -0.031891f, -0.012261f, 0.029943f, 0.041352f, 0.016829f, 0.011331f, 0.007945f, -0.005197f, 0.025777f, 0.014533f, -0.031699f, -0.017420f, -0.000571f, 0.002481f, 0.028303f, 0.017970f, 0.003918f, -0.005252f, -0.004340f, -0.015130f, 0.018510f, 0.014160f, 0.032669f, 0.006623f, 0.008645f, 0.003013f, 0.058151f, 0.005663f, 0.012653f, 0.034264f, 0.002576f, 0.042673f, -0.001230f, -0.020112f, -0.021359f, -0.040720f, 0.007682f, -0.017349f, -0.000830f, 0.003170f, 0.014841f, 0.020910f, 0.036100f, 0.036842f, -0.005352f, 0.032816f, -0.002044f, -0.002994f, 0.012914f, 0.027718f, 0.012572f, 0.007747f, -0.043741f, -0.022696f, -0.035446f, 0.018303f, 0.036601f, 0.007126f, -0.014978f, 0.025350f, 0.036771f, -0.004645f, 0.006263f, -0.008151f, 0.031071f, 0.026067f, 0.022506f, -0.012450f, -0.022192f, -0.003118f, -0.005192f, -0.050410f, 0.009686f, 0.007679f, 0.005355f, -0.012181f, -0.005944f, -0.056005f, -0.019287f, -0.050639f, -0.008173f, -0.037550f, -0.019164f, 0.038562f, 0.010793f, 0.040706f, 0.003517f, -0.030605f, -0.014745f, -0.031724f, -0.063060f, 0.011004f, + -0.038635f, -0.009315f, 0.038607f, 0.018255f, 0.015687f, 0.005976f, -0.006376f, 0.000545f, 0.008152f, -0.023659f, 0.022744f, -0.042280f, -0.047846f, 0.003639f, -0.006926f, 0.020030f, 0.040787f, 0.035242f, 0.038275f, -0.022074f, -0.038035f, 0.029296f, -0.017161f, 0.030291f, 0.009370f, -0.048899f, 0.012574f, 0.009009f, -0.054661f, 0.029468f, -0.024696f, -0.025665f, 0.015398f, 0.016644f, 0.003069f, 0.019769f, 0.001989f, 0.000903f, -0.012362f, -0.007541f, 0.012654f, -0.007739f, -0.018216f, 0.001151f, -0.034729f, 0.012675f, -0.044274f, -0.027522f, 0.002509f, 0.017710f, -0.005239f, -0.018802f, 0.007977f, 0.013892f, 0.011571f, 0.000599f, 0.037454f, -0.083633f, -0.017644f, -0.023124f, -0.026284f, 0.035846f, -0.027620f, -0.004353f, -0.065559f, -0.019223f, -0.006124f, 0.003049f, 0.046904f, -0.011330f, 0.007950f, -0.027647f, 0.025280f, -0.034321f, -0.018991f, 0.016826f, -0.074898f, 0.010617f, 0.045358f, 0.053404f, 0.045563f, 0.025362f, 0.065799f, 0.032795f, 0.005011f, -0.015909f, -0.008644f, -0.024212f, -0.043622f, -0.005722f, 0.017328f, -0.071445f, -0.071113f, -0.000336f, 0.012450f, 0.049799f, + -0.015801f, 0.022838f, 0.021687f, 0.010779f, 0.012138f, -0.078592f, 0.062393f, 0.033370f, 0.077188f, 0.027845f, -0.002608f, -0.028662f, -0.017305f, -0.018004f, -0.026934f, 0.019616f, 0.015366f, -0.028283f, -0.031148f, 0.016813f, 0.023849f, 0.039896f, 0.012131f, -0.024867f, -0.036108f, 0.007854f, 0.007296f, 0.002595f, 0.005510f, 0.071049f, 0.025130f, 0.013680f, 0.024529f, 0.025838f, 0.030109f, 0.000871f, -0.043759f, 0.031954f, 0.100343f, -0.009808f, -0.026171f, -0.059886f, -0.011467f, 0.080265f, 0.010909f, 0.033540f, 0.012740f, -0.109794f, 0.024564f, 0.020486f, 0.004246f, 0.012118f, -0.005643f, 0.002583f, 0.024779f, -0.058397f, -0.022193f, 0.051609f, 0.021436f, 0.008285f, -0.041702f, 0.033574f, 0.015292f, -0.038434f, -0.039835f, -0.027134f, 0.044665f, 0.086035f, 0.083029f, 0.088684f, 0.093203f, 0.007158f, -0.032948f, 0.036868f, 0.070791f, -0.144967f, -0.053076f, 0.012812f, -0.086971f, -0.077052f, -0.035419f, -0.046266f, 0.003936f, -0.033721f, 0.091252f, -0.008530f, -0.034406f, -0.011989f, -0.072562f, -0.018351f, -0.058880f, -0.022537f, 0.008420f, -0.072580f, -0.014009f, 0.058560f, + -0.049593f, -0.012477f, 0.014823f, 0.001045f, 0.022169f, 0.006347f, -0.001673f, 0.022694f, 0.006120f, -0.035363f, -0.008729f, 0.034058f, -0.018424f, -0.044348f, -0.016981f, -0.054054f, -0.029321f, -0.095722f, 0.007411f, -0.064720f, 0.029828f, 0.013319f, -0.026472f, -0.084165f, 0.005661f, -0.007547f, 0.103252f, 0.043608f, -0.000495f, 0.059008f, 0.022306f, 0.002301f, 0.043953f, -0.053120f, -0.028904f, 0.006056f, 0.038329f, -0.043476f, -0.030674f, 0.155274f, -0.017808f, 0.081639f, -0.065140f, 0.002379f, -0.047623f, 0.036021f, -0.019258f, 0.054898f, 0.077864f, 0.005390f, -0.061434f, 0.052774f, -0.064604f, -0.056423f, 0.115484f, -0.066701f, 0.043347f, 0.036489f, -0.058018f, 0.031707f, 0.019484f, 0.012039f, -0.008941f, 0.044424f, 0.025055f, -0.058061f, 0.042560f, 0.046873f, 0.011142f, 0.007598f, 0.030699f, -0.001093f, -0.054982f, 0.073991f, -0.040144f, 0.016657f, -0.029170f, -0.007304f, 0.011801f, -0.013829f, 0.063083f, 0.013790f, -0.005281f, -0.014233f, -0.000318f, 0.012295f, -0.058583f, 0.020099f, -0.028782f, -0.020847f, -0.011481f, 0.000733f, -0.026744f, -0.013330f, 0.010990f, 0.065142f, + 0.004537f, -0.011989f, -0.036659f, 0.018644f, 0.015558f, 0.003755f, 0.054188f, -0.009946f, -0.000291f, 0.061429f, 0.023778f, 0.006176f, -0.051345f, -0.026689f, 0.042800f, 0.024099f, -0.046775f, 0.005752f, -0.114034f, -0.055393f, 0.116647f, -0.020082f, 0.067711f, 0.083316f, 0.032077f, 0.020579f, 0.046728f, -0.005821f, -0.028235f, 0.034169f, 0.025503f, 0.012046f, 0.075160f, 0.051470f, 0.070354f, -0.025565f, -0.102939f, 0.012836f, -0.007662f, 0.031688f, 0.016780f, -0.042454f, 0.024377f, 0.016608f, -0.036599f, -0.051831f, -0.025527f, -0.082711f, -0.072065f, 0.047220f, -0.007107f, -0.085490f, -0.019158f, 0.001996f, 0.031469f, 0.018924f, -0.043488f, -0.059094f, 0.010352f, 0.066974f, -0.029951f, 0.021781f, -0.044232f, 0.010881f, -0.050556f, 0.029487f, 0.043487f, -0.034265f, -0.052152f, -0.046551f, -0.001171f, 0.015256f, -0.019365f, -0.023652f, -0.015207f, -0.080571f, -0.057722f, 0.025253f, -0.047550f, -0.018851f, 0.024321f, -0.051978f, -0.065070f, 0.018445f, 0.042675f, -0.013522f, -0.079264f, 0.028929f, 0.039224f, 0.098068f, 0.006519f, 0.018427f, 0.027254f, -0.056120f, 0.024022f, -0.024936f, + -0.086186f, -0.025413f, 0.063867f, 0.001748f, -0.039465f, -0.129023f, 0.081783f, 0.080898f, -0.018956f, 0.062023f, 0.098959f, -0.010556f, 0.016751f, 0.053581f, -0.024923f, -0.020727f, 0.040953f, -0.008306f, 0.022563f, -0.047602f, -0.155473f, 0.043047f, -0.018747f, 0.116736f, -0.040555f, -0.023959f, -0.047137f, -0.130739f, 0.059726f, -0.075517f, -0.045725f, 0.003940f, -0.000784f, 0.103624f, -0.073521f, -0.049364f, 0.066657f, 0.041758f, 0.034579f, -0.010820f, 0.033087f, -0.021736f, -0.033933f, -0.028991f, 0.078527f, 0.067547f, 0.102233f, -0.030469f, -0.038413f, 0.003992f, -0.006776f, 0.039844f, -0.061587f, 0.015535f, -0.064658f, 0.037003f, 0.063775f, 0.024273f, -0.052043f, 0.038195f, -0.045762f, 0.106500f, 0.053375f, 0.017368f, 0.014551f, -0.013326f, -0.080848f, 0.048848f, -0.109813f, 0.025952f, 0.021406f, 0.056933f, 0.043775f, -0.092508f, 0.029793f, -0.057118f, -0.034632f, 0.029081f, -0.008337f, 0.038735f, 0.024025f, -0.084219f, 0.036912f, 0.083228f, 0.107244f, -0.027927f, 0.032432f, -0.040879f, 0.075261f, -0.104352f, -0.005265f, -0.021102f, 0.032807f, 0.036641f, -0.115665f, 0.080954f, + -0.005513f, -0.009148f, 0.034563f, 0.018398f, 0.040068f, 0.003735f, 0.022563f, -0.048557f, 0.046349f, 0.005201f, -0.037694f, 0.023458f, -0.011435f, -0.006670f, 0.045512f, 0.016914f, -0.056031f, 0.028759f, -0.023341f, 0.045519f, -0.031563f, 0.006900f, -0.013129f, 0.017804f, -0.012176f, 0.004756f, -0.021076f, 0.053027f, 0.001013f, -0.004822f, 0.024020f, 0.013381f, -0.023655f, -0.012892f, 0.020102f, 0.013082f, 0.024717f, -0.027727f, 0.014272f, -0.006102f, -0.053473f, -0.012129f, 0.022664f, 0.014933f, 0.016828f, 0.006790f, -0.046954f, 0.001013f, 0.004380f, -0.002374f, 0.020251f, -0.018845f, 0.019820f, 0.000678f, 0.013414f, -0.021833f, -0.003640f, -0.013273f, 0.071866f, -0.031634f, 0.021979f, 0.013284f, -0.003137f, 0.011481f, -0.014556f, 0.009818f, 0.022709f, -0.029667f, -0.012665f, 0.001611f, -0.001180f, -0.004421f, -0.005617f, -0.041914f, 0.015773f, -0.015839f, 0.096387f, -0.006799f, -0.031449f, -0.047527f, -0.021865f, -0.026624f, 0.034834f, 0.020390f, -0.025677f, 0.002242f, 0.002785f, 0.011552f, 0.001344f, 0.024354f, 0.008136f, 0.019192f, -0.006798f, -0.000613f, -0.005989f, 0.009020f, + 0.020447f, -0.019178f, -0.000396f, -0.009476f, 0.000393f, 0.025279f, -0.014615f, 0.002478f, -0.006772f, 0.009954f, 0.004828f, -0.013860f, -0.005450f, 0.014844f, -0.004889f, 0.024202f, 0.016908f, -0.025331f, 0.007770f, 0.005305f, 0.012925f, 0.005538f, -0.024249f, 0.016094f, -0.004829f, 0.015634f, 0.012230f, -0.028645f, 0.007468f, -0.000043f, 0.006062f, -0.003327f, -0.012894f, 0.020185f, -0.005359f, 0.009060f, 0.000134f, -0.006299f, 0.009075f, -0.012353f, -0.002032f, 0.016744f, -0.011961f, -0.014227f, 0.028013f, -0.018516f, 0.026169f, -0.003019f, -0.021506f, 0.043443f, -0.040160f, 0.034606f, -0.012179f, -0.021245f, 0.022687f, -0.020959f, -0.047677f, -0.080785f, 0.101969f, 0.293550f, 0.045943f, 0.028745f, -0.214784f, -0.264699f, -0.085374f, -0.051798f, 0.178792f, 0.273710f, 0.140211f, 0.041041f, -0.092538f, -0.197575f, -0.180974f, -0.150906f, 0.011413f, 0.226741f, 0.188881f, 0.108850f, 0.036299f, -0.096747f, -0.126343f, -0.099688f, -0.097152f, -0.033884f, 0.045124f, 0.063048f, 0.129443f, 0.093276f, 0.021903f, -0.031452f, -0.019288f, -0.104660f, -0.051634f, -0.052876f, -0.072474f, 0.042714f, + 0.079656f, 0.046534f, 0.116299f, 0.031087f, -0.028683f, -0.045055f, -0.078778f, -0.061637f, -0.010581f, -0.019161f, 0.022927f, 0.048299f, 0.042148f, 0.030639f, 0.019925f, -0.010928f, -0.043916f, -0.030571f, -0.036796f, 0.011044f, 0.040157f, 0.013190f, 0.008760f, -0.018607f, -0.038756f, -0.007688f, -0.001815f, -0.001437f, 0.028191f, 0.025871f, 0.027994f, 0.010519f, -0.012949f, -0.034160f, -0.049800f, -0.050150f, -0.032734f, 0.028043f, 0.014524f, 0.005074f} + }, + { + {-0.009295f, -0.009930f, -0.012467f, -0.015293f, -0.011517f, -0.006906f, -0.001007f, -0.006226f, 0.004702f, -0.001055f, -0.001455f, 0.002462f, 0.005251f, -0.000092f, -0.003363f, -0.003658f, -0.005925f, 0.000900f, -0.005416f, 0.009641f, 0.010543f, -0.004288f, 0.000378f, 0.003149f, -0.002707f, 0.008094f, -0.003030f, -0.003515f, 0.000388f, -0.000722f, 0.007226f, 0.005867f, 0.002696f, 0.001441f, -0.006781f, -0.003085f, 0.008025f, -0.002254f, 0.002231f, -0.001618f, -0.003735f, -0.004817f, -0.004987f, 0.004272f, 0.000009f, 0.000844f, 0.001716f, -0.002275f, 0.002374f, 0.005133f, -0.009455f, -0.002233f, 0.003797f, 0.000894f, 0.003847f, -0.000515f, -0.008734f, -0.003163f, 0.004930f, -0.005413f, -0.000529f, 0.003806f, -0.003266f, -0.000863f, -0.001564f, -0.005168f, -0.001409f, -0.004061f, -0.001842f, 0.000406f, -0.002714f, 0.000302f, 0.000763f, -0.000639f, -0.002348f, -0.001641f, -0.005346f, -0.005360f, 0.020378f, 0.002353f, 0.005537f, 0.001920f, 0.002926f, -0.004943f, -0.012293f, -0.002414f, 0.006520f, 0.002280f, -0.006085f, -0.000902f, 0.004981f, -0.001334f, -0.007337f, 0.002158f, -0.008461f, -0.005300f, + -0.000272f, 0.002263f, -0.002420f, -0.001979f, 0.005222f, -0.007366f, -0.000200f, 0.000848f, 0.003495f, 0.002714f, 0.002647f, 0.008823f, 0.003980f, -0.011170f, -0.002876f, -0.005135f, 0.001344f, -0.000393f, -0.000904f, -0.007086f, -0.009165f, 0.011926f, -0.005642f, 0.002821f, 0.003414f, 0.002887f, -0.011530f, -0.006635f, -0.003105f, 0.001114f, -0.001017f, -0.000512f, -0.001183f, 0.001763f, 0.004213f, -0.006150f, -0.000174f, 0.003019f, 0.003555f, 0.004254f, 0.001448f, -0.000127f, 0.004099f, 0.001305f, -0.002101f, -0.000791f, 0.006741f, -0.005453f, -0.005776f, -0.003247f, -0.002520f, 0.005666f, 0.003177f, 0.001081f, -0.002636f, 0.005383f, -0.003018f, 0.002561f, -0.011649f, -0.006885f, 0.004872f, -0.011229f, -0.016061f, 0.003224f, 0.001341f, 0.002097f, 0.002318f, 0.002388f, -0.013776f, -0.002103f, 0.004001f, -0.008571f, 0.009189f, 0.009088f, 0.007682f, -0.002910f, 0.000747f, 0.002268f, 0.005918f, 0.001547f, -0.000126f, 0.001377f, -0.003896f, 0.003936f, -0.001335f, -0.001198f, -0.001753f, 0.011580f, -0.006611f, 0.004199f, -0.004105f, -0.003368f, -0.003652f, 0.003319f, 0.006380f, -0.006267f, + -0.003077f, -0.003223f, 0.004764f, 0.004638f, 0.007139f, 0.005071f, 0.001204f, 0.006447f, -0.004821f, 0.004068f, 0.001719f, 0.002046f, 0.012997f, 0.003489f, 0.006649f, -0.009824f, -0.002351f, 0.004847f, -0.004696f, 0.005533f, -0.001706f, -0.003146f, 0.001938f, 0.008300f, 0.005757f, 0.004287f, -0.001135f, 0.002429f, 0.006445f, -0.005847f, 0.009907f, -0.000103f, 0.008396f, -0.001677f, 0.007243f, 0.008909f, 0.007429f, -0.001200f, -0.007804f, -0.002638f, 0.018947f, 0.014494f, 0.010953f, 0.010054f, 0.010247f, 0.005065f, -0.001338f, 0.000297f, -0.004475f, -0.000650f, 0.013651f, -0.005622f, -0.006835f, 0.010306f, 0.006766f, 0.009936f, -0.007024f, 0.003406f, -0.002945f, 0.002693f, 0.003715f, 0.006436f, 0.000397f, -0.003683f, -0.003632f, -0.004900f, -0.002418f, -0.002791f, -0.010476f, -0.000599f, 0.007991f, -0.005945f, -0.001591f, 0.003756f, -0.005611f, -0.004033f, 0.004329f, -0.001923f, -0.007140f, -0.002921f, 0.003371f, -0.005042f, -0.007812f, -0.002668f, -0.002634f, 0.003190f, -0.005588f, -0.009932f, 0.000304f, -0.001023f, -0.001947f, 0.003832f, -0.009203f, -0.003493f, -0.000308f, -0.002868f, + 0.004341f, -0.000426f, 0.001591f, -0.014872f, -0.005260f, 0.009723f, -0.004021f, -0.007781f, 0.002028f, 0.002410f, 0.001857f, -0.002323f, -0.013062f, -0.004749f, 0.013340f, 0.001844f, 0.004445f, 0.003787f, -0.002719f, 0.027611f, 0.016919f, 0.016062f, 0.000264f, 0.001629f, 0.001257f, -0.006546f, -0.014632f, -0.005493f, 0.010995f, -0.008314f, 0.004959f, 0.014922f, 0.001167f, -0.004710f, -0.001903f, -0.003010f, -0.001620f, 0.006033f, 0.008529f, 0.000307f, 0.002483f, 0.003493f, 0.005542f, 0.000326f, -0.007892f, 0.002403f, -0.012690f, -0.003833f, -0.001647f, -0.003547f, -0.002346f, 0.001537f, -0.003075f, -0.006683f, -0.005221f, -0.002445f, 0.000498f, -0.002913f, -0.007715f, 0.009041f, -0.003468f, 0.000579f, -0.002415f, -0.006073f, 0.007441f, 0.020722f, 0.004976f, -0.007367f, 0.012276f, 0.002683f, -0.003837f, 0.003602f, -0.002169f, -0.008191f, 0.000005f, -0.003550f, 0.003088f, -0.007158f, -0.012047f, 0.000246f, 0.002002f, -0.014850f, 0.004379f, 0.002740f, 0.008195f, 0.004323f, 0.010843f, -0.003995f, -0.007180f, -0.004653f, -0.002129f, 0.004827f, -0.001740f, -0.009851f, 0.006586f, -0.004808f, + -0.014616f, -0.022022f, -0.007316f, -0.010815f, 0.015644f, -0.003263f, -0.002408f, 0.006422f, -0.015287f, -0.010060f, 0.008454f, -0.006798f, -0.007139f, 0.000019f, -0.001076f, 0.001968f, 0.005390f, -0.002086f, 0.002183f, -0.003490f, -0.003375f, 0.000100f, -0.003054f, -0.006131f, -0.001104f, -0.001028f, 0.006261f, 0.007243f, 0.005487f, -0.007692f, 0.003181f, 0.003089f, 0.010692f, -0.005319f, -0.001011f, -0.003506f, -0.009229f, 0.012630f, -0.012275f, -0.005365f, -0.005186f, 0.003247f, 0.009513f, -0.009080f, 0.009838f, -0.000794f, 0.004952f, 0.009129f, 0.000664f, 0.007115f, -0.013343f, 0.003109f, -0.005570f, 0.000991f, -0.014173f, 0.000591f, -0.005519f, -0.011559f, -0.010143f, 0.001051f, 0.007704f, 0.000796f, -0.007562f, 0.010327f, -0.004703f, 0.006114f, -0.002189f, -0.012025f, 0.015713f, -0.010465f, -0.003938f, -0.005813f, 0.002198f, 0.007347f, 0.002000f, 0.006826f, 0.009876f, 0.006161f, -0.015993f, -0.022537f, 0.002446f, 0.002032f, 0.001187f, 0.014743f, -0.004811f, -0.015754f, 0.001609f, 0.002008f, -0.004265f, -0.000749f, -0.014046f, -0.002587f, 0.001686f, 0.002263f, 0.015599f, -0.002544f, + 0.013978f, -0.003184f, -0.003661f, 0.001388f, -0.013956f, 0.006167f, -0.005280f, 0.008716f, -0.002377f, -0.003330f, -0.005199f, -0.002264f, 0.000470f, -0.010130f, 0.017971f, -0.012181f, -0.020260f, 0.006354f, 0.000906f, -0.013891f, -0.004224f, -0.026937f, 0.000445f, -0.009360f, -0.000161f, -0.010174f, -0.008587f, 0.001872f, 0.000932f, 0.005113f, -0.008669f, 0.007325f, -0.009785f, -0.018368f, 0.002183f, 0.005706f, -0.005782f, 0.006694f, -0.003321f, -0.009892f, -0.009318f, -0.012107f, -0.006173f, -0.000706f, 0.001907f, -0.003099f, 0.011569f, 0.000809f, -0.003966f, 0.001883f, 0.000345f, 0.003427f, 0.001346f, 0.002525f, -0.011990f, -0.009156f, 0.001216f, -0.035042f, -0.008758f, 0.001374f, -0.008896f, -0.006537f, -0.011128f, 0.002886f, 0.003987f, 0.007977f, -0.005945f, -0.007453f, -0.008369f, 0.004246f, 0.009512f, -0.004660f, -0.003923f, -0.002359f, -0.001327f, 0.004513f, -0.019390f, -0.004768f, 0.011183f, 0.003656f, -0.005553f, 0.002155f, 0.009954f, -0.000887f, -0.002294f, 0.003498f, -0.000398f, 0.024052f, -0.010076f, 0.005954f, 0.002184f, -0.009998f, 0.003597f, 0.002356f, -0.011186f, 0.008214f, + -0.015998f, -0.001476f, 0.014781f, 0.003288f, -0.000053f, -0.002922f, -0.010763f, -0.009511f, 0.002992f, 0.006333f, -0.003753f, 0.003151f, 0.012440f, 0.006059f, -0.004461f, 0.007507f, -0.010080f, -0.024846f, -0.002732f, -0.010835f, 0.007558f, -0.006890f, 0.018390f, 0.009025f, -0.000128f, -0.002766f, -0.022274f, 0.007412f, 0.009568f, -0.006882f, 0.014880f, -0.010712f, 0.005162f, -0.018013f, 0.009427f, 0.006926f, -0.019826f, 0.009488f, 0.014033f, 0.034822f, 0.035657f, 0.007941f, 0.010108f, 0.000703f, 0.004359f, 0.000891f, 0.002958f, -0.009219f, 0.003603f, -0.005571f, 0.007110f, 0.008093f, 0.017752f, 0.003307f, -0.004837f, 0.012132f, 0.007392f, 0.014478f, -0.000432f, 0.009097f, 0.003938f, -0.004100f, 0.003177f, 0.021268f, 0.002075f, -0.008905f, -0.006223f, 0.015717f, 0.008255f, 0.007593f, 0.013051f, -0.011082f, 0.002858f, 0.017274f, -0.018746f, -0.020585f, 0.005183f, 0.010943f, 0.016246f, -0.007892f, -0.015125f, 0.010674f, 0.002110f, -0.001853f, 0.004836f, -0.003001f, -0.003628f, -0.000443f, 0.023426f, -0.009630f, 0.002985f, -0.006626f, -0.006254f, -0.003550f, 0.010875f, -0.002385f, + 0.027121f, 0.013526f, -0.016988f, 0.015780f, 0.000696f, 0.006805f, 0.000419f, 0.002537f, 0.000620f, -0.006674f, 0.006234f, -0.024943f, -0.010473f, 0.008995f, -0.028908f, 0.005984f, -0.025567f, 0.054562f, 0.011592f, 0.007087f, -0.014704f, 0.022521f, -0.006267f, -0.002828f, -0.004578f, -0.000410f, -0.013975f, -0.002957f, 0.009299f, 0.000020f, -0.011029f, 0.014279f, -0.002007f, -0.010073f, 0.004189f, 0.003276f, -0.014694f, -0.025044f, 0.011567f, -0.011367f, -0.011844f, 0.000961f, 0.001862f, -0.008815f, 0.014091f, -0.013974f, 0.006004f, 0.010070f, -0.000104f, 0.015470f, 0.007433f, -0.023552f, -0.020767f, -0.011492f, 0.003532f, 0.002406f, -0.015935f, 0.004769f, 0.008666f, 0.001681f, 0.007940f, 0.006205f, -0.016553f, -0.011096f, 0.007646f, -0.022638f, -0.005298f, -0.002258f, -0.019323f, -0.013351f, -0.005037f, 0.002610f, -0.008656f, -0.025287f, -0.008654f, -0.014348f, 0.029818f, 0.011362f, 0.000457f, 0.001921f, -0.004497f, 0.019837f, 0.028944f, 0.001084f, 0.020562f, 0.010847f, 0.008403f, 0.001246f, -0.006346f, -0.004122f, -0.004726f, 0.010551f, -0.011886f, -0.002411f, -0.038451f, 0.025981f, + 0.041627f, -0.031183f, -0.018603f, 0.008645f, 0.007483f, -0.006258f, 0.013707f, 0.003815f, -0.011606f, -0.014117f, -0.000243f, -0.004448f, -0.010098f, 0.005339f, -0.004597f, 0.000822f, 0.011602f, -0.015320f, 0.003359f, 0.002270f, -0.009092f, 0.001530f, -0.014491f, 0.003083f, 0.021583f, 0.011191f, -0.002005f, -0.006625f, -0.001604f, -0.011956f, -0.012870f, 0.006725f, 0.011027f, -0.003089f, -0.005815f, -0.003916f, 0.006689f, 0.011193f, 0.005400f, 0.020216f, -0.010439f, 0.008589f, -0.004905f, 0.002419f, 0.012601f, -0.003946f, -0.003657f, -0.023042f, -0.003350f, -0.017685f, 0.009452f, 0.006877f, 0.023761f, -0.019468f, -0.007124f, -0.018772f, -0.031751f, -0.004625f, 0.013690f, -0.021313f, 0.005240f, -0.001544f, -0.015811f, -0.018038f, -0.023647f, 0.033381f, 0.001608f, 0.020476f, 0.014511f, 0.017878f, -0.006852f, -0.019343f, -0.015584f, -0.016876f, 0.007691f, -0.029269f, 0.020953f, -0.001915f, -0.012002f, 0.019446f, 0.005867f, -0.017228f, -0.026603f, -0.009107f, -0.000573f, 0.001472f, 0.000630f, -0.008269f, 0.028881f, 0.013218f, 0.008342f, 0.007842f, 0.008734f, -0.007897f, 0.001725f, 0.006962f, + 0.003833f, 0.027615f, 0.002312f, -0.038276f, 0.004442f, 0.017632f, -0.015103f, -0.020931f, -0.005051f, -0.010755f, -0.007439f, 0.003177f, 0.027607f, 0.018080f, -0.003083f, 0.000775f, -0.008633f, -0.022970f, -0.008449f, -0.018672f, 0.014258f, 0.021267f, 0.000142f, -0.009338f, -0.004059f, -0.002861f, 0.009010f, 0.014273f, 0.013331f, -0.028990f, 0.006001f, 0.002918f, 0.002832f, 0.023329f, -0.012321f, 0.010771f, -0.011173f, -0.006118f, 0.002541f, 0.016195f, 0.025555f, -0.001700f, -0.015883f, 0.007702f, -0.028849f, 0.026010f, 0.013239f, -0.000159f, -0.011444f, 0.009303f, -0.006001f, -0.011214f, -0.011183f, -0.009359f, -0.011147f, -0.005050f, 0.016296f, -0.027694f, -0.005445f, 0.014872f, -0.019108f, -0.004005f, -0.000182f, -0.004645f, -0.022546f, 0.022475f, 0.012472f, -0.018770f, -0.000970f, -0.009098f, -0.004246f, -0.039016f, -0.003242f, -0.018824f, -0.039974f, 0.007130f, 0.008503f, -0.020929f, -0.013755f, -0.024338f, -0.023557f, 0.019980f, 0.014394f, 0.021126f, 0.002917f, 0.046361f, 0.004398f, 0.023319f, 0.036822f, -0.005895f, 0.012791f, 0.033821f, -0.021825f, 0.009112f, -0.012225f, 0.022650f, + -0.005401f, 0.045908f, 0.024102f, -0.016845f, -0.020076f, 0.001761f, 0.013571f, 0.017954f, 0.007913f, -0.019336f, -0.001365f, 0.013774f, 0.038265f, -0.016957f, 0.026658f, -0.010844f, 0.017484f, -0.030054f, 0.014061f, -0.017427f, 0.014246f, -0.000570f, 0.007105f, -0.007565f, 0.025663f, 0.027998f, -0.051745f, 0.013987f, 0.016033f, 0.004961f, -0.005184f, 0.003296f, -0.034215f, -0.002390f, 0.028060f, 0.029310f, -0.006130f, 0.030527f, -0.001221f, -0.006544f, 0.002826f, 0.017173f, -0.006022f, -0.007872f, -0.003098f, -0.021834f, 0.004117f, -0.006216f, 0.034965f, 0.022721f, -0.015766f, -0.017233f, -0.031975f, -0.011773f, 0.024426f, 0.042940f, -0.018671f, 0.013473f, 0.003677f, 0.005951f, 0.024134f, 0.017036f, -0.032527f, 0.007082f, -0.010967f, -0.006302f, -0.012769f, -0.006986f, -0.013476f, -0.031622f, 0.006794f, 0.022240f, 0.009473f, 0.051244f, -0.011002f, -0.006142f, 0.036422f, -0.011891f, -0.000546f, -0.006847f, 0.010779f, -0.037459f, -0.023167f, 0.014556f, 0.030469f, 0.043275f, 0.051868f, -0.035457f, -0.017287f, -0.000420f, 0.018701f, 0.000003f, 0.058924f, 0.017649f, 0.010662f, -0.042135f, + 0.005353f, 0.002537f, 0.023777f, 0.030318f, -0.018161f, -0.004114f, 0.011479f, -0.005913f, 0.002971f, 0.035238f, 0.014600f, -0.027121f, 0.011487f, 0.021217f, -0.012758f, 0.041918f, 0.008818f, 0.056361f, 0.029656f, -0.017286f, -0.002918f, -0.055776f, 0.006217f, 0.012299f, 0.005793f, 0.078342f, -0.008098f, -0.008013f, -0.033199f, -0.032402f, 0.014589f, -0.026842f, -0.013124f, -0.018635f, -0.009131f, 0.018022f, -0.010900f, -0.024830f, -0.017616f, -0.000134f, 0.022287f, -0.027830f, 0.008014f, 0.009786f, 0.004796f, 0.027034f, -0.001146f, 0.000335f, -0.027206f, -0.043386f, -0.014810f, 0.017034f, -0.020588f, 0.003580f, -0.016902f, -0.074328f, -0.036640f, 0.019690f, 0.003887f, -0.043474f, 0.008750f, 0.055706f, -0.000287f, -0.003568f, -0.020147f, 0.010533f, -0.022457f, -0.046742f, 0.003573f, 0.004592f, -0.014836f, 0.006323f, 0.019283f, -0.006438f, -0.012066f, 0.009654f, 0.018155f, 0.026502f, -0.014107f, 0.019186f, 0.030496f, 0.009027f, 0.051147f, 0.002527f, -0.027555f, 0.032218f, 0.004790f, 0.002367f, -0.003752f, -0.011334f, 0.024754f, -0.027388f, 0.001372f, 0.028734f, -0.040491f, -0.045939f, + -0.051761f, 0.071733f, -0.039226f, 0.008065f, -0.000962f, -0.024912f, 0.038437f, -0.045414f, 0.020122f, 0.076172f, 0.049106f, 0.009333f, -0.062039f, -0.005400f, -0.040593f, -0.023051f, -0.037014f, -0.005589f, 0.011816f, -0.008889f, 0.030886f, -0.016490f, 0.005902f, 0.012618f, 0.042707f, 0.003571f, 0.006625f, 0.048293f, -0.032507f, -0.007129f, 0.023104f, -0.012256f, -0.025100f, -0.019757f, 0.026214f, -0.024913f, 0.011372f, 0.040548f, -0.011417f, -0.081011f, -0.004163f, 0.016542f, -0.095374f, 0.054761f, 0.045201f, -0.039682f, 0.060035f, 0.036900f, 0.027058f, 0.058129f, 0.001813f, 0.027930f, 0.004127f, -0.000259f, 0.022702f, -0.043476f, 0.039619f, 0.048683f, 0.041414f, -0.047055f, -0.007742f, 0.053283f, -0.027781f, 0.040746f, 0.043221f, 0.093210f, 0.060872f, -0.003395f, 0.008207f, -0.020545f, 0.014566f, 0.008357f, -0.053664f, -0.093323f, -0.017361f, 0.043942f, 0.055971f, -0.109448f, -0.098872f, 0.042314f, -0.028176f, -0.032466f, -0.012775f, -0.039121f, 0.013561f, -0.062701f, 0.077358f, 0.027538f, -0.032393f, -0.002375f, -0.031833f, -0.025534f, -0.025862f, -0.031051f, -0.019451f, -0.076006f, + -0.067161f, -0.014618f, -0.015986f, 0.001853f, 0.005244f, 0.010331f, -0.005901f, 0.006755f, 0.010968f, 0.030058f, 0.034830f, -0.016736f, -0.020191f, -0.024739f, -0.020283f, -0.045178f, 0.060055f, -0.025524f, 0.012764f, 0.042488f, 0.041040f, -0.020537f, -0.021629f, -0.039007f, -0.026047f, -0.033023f, 0.044379f, 0.000404f, 0.002127f, -0.064194f, -0.025115f, 0.080273f, -0.012783f, 0.074011f, -0.020982f, -0.035919f, -0.024160f, -0.040272f, -0.040388f, -0.013397f, -0.006006f, -0.055204f, -0.003036f, 0.014278f, -0.009699f, 0.008483f, -0.118352f, -0.054902f, -0.040475f, 0.046037f, -0.025126f, -0.005035f, 0.006603f, 0.072723f, 0.008860f, -0.036081f, -0.060201f, 0.121999f, -0.041284f, -0.020990f, 0.067799f, -0.041797f, -0.070316f, 0.065649f, -0.093665f, -0.023295f, 0.018765f, 0.018654f, -0.066079f, -0.021822f, 0.051863f, 0.003438f, -0.013284f, -0.032310f, 0.040237f, -0.039270f, 0.000351f, 0.036803f, -0.013640f, 0.034070f, -0.002140f, -0.012067f, 0.008042f, 0.010550f, -0.020675f, 0.032604f, -0.018359f, -0.003312f, 0.006641f, 0.002673f, -0.000242f, -0.002257f, 0.006721f, 0.021914f, 0.028210f, 0.046663f, + 0.019425f, -0.014644f, -0.006778f, -0.024247f, 0.023745f, -0.005885f, -0.041369f, 0.012595f, -0.001344f, -0.019416f, -0.055767f, 0.041488f, 0.001601f, -0.021981f, 0.060263f, 0.006659f, -0.020071f, -0.008029f, 0.090092f, -0.082168f, -0.092405f, 0.058724f, 0.086639f, -0.158276f, 0.000387f, -0.057142f, -0.054265f, -0.021847f, 0.058655f, -0.043638f, 0.077933f, -0.010133f, -0.001022f, 0.103763f, -0.027828f, -0.082950f, 0.100009f, 0.097148f, 0.073867f, -0.036058f, -0.041842f, -0.015214f, 0.014377f, 0.069224f, 0.057009f, -0.021565f, -0.002458f, 0.019791f, 0.061973f, -0.022178f, 0.000152f, 0.033350f, -0.042552f, -0.042173f, 0.035201f, -0.023545f, -0.011984f, -0.021837f, 0.002071f, -0.034339f, 0.006485f, 0.019500f, -0.009369f, 0.014556f, -0.010845f, -0.011743f, -0.005156f, -0.046413f, 0.011048f, -0.020115f, 0.031693f, 0.055589f, 0.007989f, 0.026628f, 0.028872f, 0.000061f, 0.016103f, 0.015971f, 0.066717f, -0.045476f, 0.035264f, 0.023996f, -0.025517f, 0.018975f, 0.026639f, 0.004509f, -0.021379f, -0.057735f, -0.049516f, 0.016611f, 0.027467f, -0.023249f, -0.086483f, 0.074653f, -0.017553f, -0.043207f, + -0.014980f, 0.075128f, -0.026661f, 0.082344f, 0.010462f, 0.026393f, -0.067799f, 0.073070f, -0.021505f, 0.031341f, 0.004392f, -0.110335f, -0.017389f, 0.019728f, -0.046984f, 0.067729f, 0.032713f, -0.099325f, -0.072460f, -0.049853f, 0.018309f, -0.020512f, 0.023715f, -0.037125f, -0.067222f, -0.000891f, -0.071452f, 0.018876f, -0.005032f, -0.014127f, 0.025869f, 0.039220f, -0.024278f, 0.004786f, 0.045831f, -0.035619f, 0.061639f, -0.008901f, -0.064349f, 0.055793f, -0.025533f, -0.012911f, 0.052192f, -0.065359f, 0.018836f, 0.000408f, 0.025295f, -0.010784f, -0.021829f, -0.099196f, 0.024557f, -0.041222f, -0.097080f, 0.119291f, -0.078587f, -0.033980f, -0.013928f, -0.027594f, -0.058721f, 0.033881f, 0.084826f, -0.051347f, 0.025431f, -0.074322f, -0.039680f, -0.042326f, 0.039703f, 0.006753f, 0.110863f, -0.018548f, -0.006558f, -0.032159f, -0.090978f, 0.000391f, 0.048137f, -0.034197f, 0.040934f, 0.046392f, -0.035868f, 0.004453f, -0.030017f, -0.137496f, -0.069283f, -0.041719f, -0.141751f, 0.093754f, 0.126064f, 0.058584f, -0.118829f, -0.097746f, -0.215768f, 0.033340f, 0.269157f, 0.123186f, 0.056341f, -0.066095f, + -0.217917f, -0.102012f, 0.073463f, -0.012859f, -0.018463f, 0.003808f, 0.032004f, 0.002577f, -0.008474f, 0.027062f, 0.006669f, 0.010298f, 0.038087f, -0.023467f, -0.002269f, 0.022728f, -0.009249f, -0.001862f, 0.023260f, -0.021538f, -0.007705f, 0.009024f, 0.037690f, -0.024337f, -0.020670f, 0.024149f, -0.003098f, 0.014398f, -0.041402f, 0.053522f, -0.014376f, 0.019336f, -0.013370f, 0.008575f, 0.026010f, 0.014307f, -0.008737f, 0.026131f, -0.011370f, 0.026398f, -0.021453f, 0.000514f, 0.023026f, -0.003846f, -0.012743f, -0.048959f, 0.002881f, 0.041384f, 0.001793f, 0.020487f, -0.028168f, -0.006122f, -0.017879f, -0.014100f, -0.009149f, 0.030636f, -0.012983f, 0.019571f, -0.025126f, -0.024532f, -0.014308f, 0.008768f, 0.049146f, -0.017458f, 0.020552f, 0.004270f, 0.001791f, -0.022509f, 0.010170f, 0.030363f, -0.002804f, -0.020734f, 0.013960f, -0.011572f, 0.006295f, -0.003345f, -0.016461f, 0.098981f, 0.019660f, -0.053051f, -0.037677f, -0.058592f, -0.018572f, 0.011275f, 0.031128f, -0.009721f, -0.012566f, -0.010834f, -0.010428f, -0.009871f, 0.014236f, -0.007218f, -0.001975f, -0.003130f, -0.010295f, -0.002456f, + 0.015648f, 0.002248f, -0.004506f, -0.015613f, 0.017956f, -0.023252f, 0.013693f, -0.008292f, -0.022820f, 0.000117f, 0.010425f, 0.011733f, 0.009177f, -0.013464f, 0.003020f, -0.004294f, -0.007377f, 0.027538f, -0.024481f, -0.004429f, -0.000989f, -0.001647f, 0.002582f, -0.004046f, -0.014386f, 0.012167f, -0.022803f, 0.021808f, -0.003194f, -0.015199f, 0.005261f, -0.007797f, 0.019324f, -0.011223f, -0.006867f, 0.020986f, -0.018751f, 0.006624f, -0.009002f, -0.001933f, 0.015966f, -0.011299f, -0.004611f, 0.014515f, -0.009930f, 0.003954f, 0.001391f, -0.011459f, 0.028259f, -0.024539f, -0.002225f, 0.011189f, -0.006414f, 0.018466f, -0.008310f, -0.003490f, 0.004785f, -0.046619f, -0.070644f, 0.092495f, 0.287606f, 0.024858f, 0.024799f, -0.196037f, -0.248499f, -0.051529f, -0.052860f, 0.146397f, 0.248573f, 0.127878f, 0.024277f, -0.089889f, -0.175539f, -0.123532f, -0.088761f, -0.004452f, 0.120902f, 0.177304f, 0.095392f, 0.022056f, -0.062495f, -0.110313f, -0.062218f, -0.059395f, -0.056118f, 0.035291f, 0.071766f, 0.071217f, 0.071239f, 0.017287f, -0.031536f, -0.012714f, -0.047710f, -0.073909f, -0.008696f, -0.022039f, + -0.015449f, 0.066745f, 0.038017f, 0.055740f, 0.033243f, -0.025335f, -0.061450f, -0.014724f, -0.040190f, -0.006205f, 0.026968f, 0.008351f, 0.014212f, 0.030012f, -0.016073f, -0.021596f, -0.005762f, -0.012810f, 0.011276f, 0.019196f, 0.000082f, 0.023704f, 0.013204f, -0.025659f, -0.025458f, -0.039203f, -0.034400f, 0.000846f, 0.038446f, 0.059731f, 0.027451f, 0.006642f, -0.016070f, -0.041868f, -0.009383f, -0.047602f, -0.031063f, 0.018870f, 0.010605f, 0.016098f, -0.002394f}, + {-0.007491f, -0.009914f, -0.014262f, -0.001612f, -0.005520f, -0.010006f, -0.004871f, -0.002339f, 0.002262f, -0.004793f, -0.010060f, -0.000817f, 0.002831f, -0.010019f, -0.005229f, -0.001949f, -0.005601f, -0.005813f, 0.004409f, -0.000638f, 0.000979f, -0.005117f, -0.005208f, -0.001320f, -0.008094f, 0.005590f, -0.008180f, 0.002456f, -0.002021f, 0.003211f, -0.003888f, 0.000958f, 0.002681f, -0.011142f, -0.001998f, 0.001271f, 0.012177f, -0.005574f, -0.001031f, -0.001967f, -0.000022f, 0.004674f, -0.001686f, -0.005188f, -0.000758f, -0.001715f, 0.003714f, -0.001462f, -0.004362f, 0.004516f, 0.004193f, 0.002189f, 0.000978f, -0.003072f, 0.005498f, 0.003996f, -0.006541f, 0.004122f, -0.004635f, -0.002133f, -0.000776f, -0.003721f, -0.001192f, 0.000656f, 0.001412f, 0.004636f, -0.003757f, -0.003039f, -0.000657f, 0.000762f, -0.003298f, -0.010259f, -0.001808f, -0.003812f, -0.001863f, -0.001430f, 0.001882f, 0.002325f, 0.006393f, 0.004997f, -0.001661f, 0.003831f, 0.001822f, 0.011018f, -0.001921f, -0.000284f, 0.001389f, 0.008066f, -0.001589f, -0.008396f, -0.003902f, -0.008060f, 0.001975f, -0.002864f, -0.000662f, -0.001012f, + 0.001965f, 0.000784f, 0.001659f, 0.004678f, 0.008618f, -0.003818f, -0.002082f, 0.001714f, -0.004018f, -0.000564f, 0.006747f, -0.003649f, 0.008337f, 0.000842f, -0.002914f, 0.005486f, -0.007443f, -0.001946f, -0.005155f, 0.007319f, -0.000129f, -0.002746f, -0.001895f, 0.000049f, 0.006943f, 0.000229f, 0.008349f, 0.003100f, -0.006605f, 0.005403f, -0.002784f, -0.005123f, -0.003930f, 0.005530f, -0.000956f, 0.017810f, 0.002147f, 0.004378f, 0.003539f, -0.008499f, 0.000442f, -0.001406f, 0.002549f, -0.004947f, -0.002787f, 0.009094f, 0.008136f, 0.000399f, 0.003751f, -0.001214f, 0.005445f, -0.008155f, 0.001630f, 0.005191f, 0.004746f, -0.000266f, 0.001025f, 0.002454f, -0.013447f, -0.012556f, -0.007446f, -0.007200f, -0.005817f, 0.002125f, 0.008879f, 0.017394f, 0.003634f, 0.004352f, 0.000236f, -0.012729f, -0.004972f, -0.004831f, -0.010983f, 0.017386f, 0.004969f, 0.006815f, 0.005135f, -0.004030f, 0.002115f, 0.016658f, 0.007047f, -0.004090f, 0.000030f, -0.004208f, 0.000721f, -0.007903f, 0.005059f, -0.002574f, -0.003088f, 0.000548f, 0.009339f, 0.000831f, 0.003542f, 0.005486f, 0.008183f, -0.013975f, + 0.000641f, 0.003420f, 0.008550f, 0.012303f, -0.006403f, -0.001499f, -0.002825f, 0.010246f, 0.006143f, 0.006571f, -0.000542f, 0.002991f, 0.021276f, -0.013177f, 0.003232f, 0.001105f, -0.008100f, 0.003600f, -0.011542f, -0.001777f, 0.003829f, -0.002792f, -0.017678f, 0.004991f, 0.002036f, -0.005175f, -0.004301f, -0.001085f, -0.001928f, 0.005935f, -0.004955f, -0.002928f, 0.002741f, -0.000619f, -0.004710f, -0.000805f, 0.005661f, -0.008332f, 0.001727f, -0.002939f, 0.018063f, 0.002084f, 0.006163f, -0.000329f, -0.005477f, 0.000830f, 0.012518f, 0.007088f, 0.007885f, 0.013878f, -0.006482f, 0.000535f, 0.012533f, 0.004569f, 0.005190f, 0.001121f, 0.001044f, 0.008028f, -0.007512f, -0.001690f, 0.009137f, -0.006278f, 0.003203f, 0.005865f, -0.004754f, 0.004386f, 0.012418f, -0.005876f, 0.004184f, 0.001326f, -0.000136f, 0.000445f, -0.003371f, -0.008635f, -0.003423f, -0.007208f, -0.001465f, 0.003351f, 0.005553f, 0.006817f, -0.001893f, -0.010966f, -0.001741f, 0.016476f, -0.006775f, 0.003448f, -0.003672f, -0.017013f, 0.009255f, 0.002627f, 0.006664f, -0.001163f, 0.007683f, 0.008307f, -0.015392f, 0.005845f, + -0.000373f, 0.005447f, -0.001910f, -0.010298f, -0.001327f, -0.001564f, -0.002727f, -0.002117f, 0.005680f, -0.000303f, 0.000431f, 0.012867f, 0.001742f, 0.010003f, -0.000441f, 0.000277f, 0.001342f, -0.006885f, -0.009470f, 0.029939f, 0.017459f, 0.025535f, 0.008810f, -0.011243f, 0.005878f, -0.005318f, 0.001071f, 0.002005f, -0.021832f, -0.006446f, -0.005803f, 0.005155f, 0.008979f, -0.004175f, -0.000258f, 0.002314f, 0.000932f, 0.015217f, -0.001540f, -0.017284f, 0.005600f, -0.010297f, 0.007548f, 0.007716f, 0.006862f, 0.009081f, -0.002247f, -0.004157f, 0.004072f, -0.003731f, -0.003801f, 0.002011f, -0.002543f, 0.005048f, 0.008452f, -0.004519f, -0.012813f, 0.003222f, -0.012490f, -0.008954f, -0.001637f, -0.026867f, 0.000155f, -0.005376f, 0.010028f, 0.008648f, 0.004523f, 0.014787f, 0.015774f, 0.005953f, 0.003331f, -0.002321f, 0.000518f, -0.000313f, -0.007536f, 0.013552f, -0.002311f, 0.003829f, -0.005074f, -0.007039f, -0.002455f, -0.009930f, 0.007009f, -0.005462f, -0.003640f, 0.012887f, -0.012660f, -0.005481f, 0.002475f, -0.007473f, -0.002333f, -0.002584f, 0.004400f, 0.003517f, 0.003317f, 0.006784f, + -0.012571f, -0.025595f, -0.010525f, -0.001745f, 0.002763f, -0.002263f, 0.007039f, -0.000721f, 0.011993f, -0.010665f, 0.005864f, -0.001832f, 0.022922f, 0.011121f, -0.006284f, -0.009174f, 0.004493f, -0.013504f, -0.008866f, 0.006740f, -0.006206f, -0.007592f, 0.015529f, 0.008046f, -0.002020f, -0.006515f, -0.011429f, 0.008188f, 0.004343f, 0.006420f, -0.001522f, -0.001392f, -0.007468f, 0.010964f, -0.013808f, -0.004245f, -0.001660f, 0.010297f, 0.005867f, 0.000608f, 0.008925f, 0.002539f, -0.005732f, 0.003336f, -0.005708f, -0.003518f, -0.006673f, 0.008393f, -0.006204f, 0.001224f, 0.008263f, 0.015315f, 0.013188f, 0.007295f, 0.004021f, 0.000598f, 0.007048f, -0.001655f, 0.010593f, -0.000365f, 0.006417f, 0.007420f, -0.005711f, 0.002420f, -0.006135f, 0.007578f, 0.004047f, 0.004072f, -0.002603f, -0.007424f, 0.006142f, -0.007980f, -0.001891f, -0.008360f, 0.003787f, 0.003232f, -0.001328f, -0.003500f, -0.012655f, -0.025846f, -0.021302f, 0.001541f, -0.018245f, -0.008637f, -0.025741f, -0.013345f, -0.015801f, 0.006395f, -0.008579f, -0.010824f, -0.004071f, 0.000816f, -0.006853f, -0.024534f, 0.006334f, -0.004171f, + 0.002167f, -0.010996f, 0.010837f, 0.004340f, -0.000086f, -0.009762f, -0.004788f, 0.012864f, 0.008273f, 0.000764f, -0.002259f, -0.008291f, 0.004912f, 0.002954f, 0.005087f, -0.009961f, -0.001359f, -0.008048f, -0.007842f, -0.007863f, 0.000396f, 0.016631f, -0.013841f, 0.000523f, -0.013226f, 0.001550f, 0.005437f, 0.007698f, -0.013962f, 0.013791f, 0.015871f, -0.005124f, -0.004472f, -0.002557f, -0.001243f, 0.005551f, 0.006000f, 0.002004f, 0.003850f, -0.007603f, -0.002250f, -0.002529f, 0.013387f, -0.003926f, 0.014846f, 0.000166f, -0.005639f, 0.013127f, -0.002210f, -0.006683f, 0.001677f, 0.014457f, 0.014469f, 0.000031f, -0.006094f, -0.006822f, 0.003978f, -0.020607f, -0.019585f, -0.023616f, 0.007269f, -0.019215f, -0.007349f, 0.017565f, 0.009248f, -0.020819f, -0.000910f, -0.000265f, 0.009404f, 0.012844f, 0.023196f, -0.006620f, -0.007714f, -0.022825f, -0.026978f, -0.016687f, -0.005061f, 0.010709f, -0.010671f, 0.004902f, -0.015349f, 0.015947f, -0.011403f, 0.012706f, -0.005660f, 0.001352f, 0.003907f, -0.003159f, -0.011240f, 0.018030f, -0.015544f, -0.001332f, -0.008076f, 0.001736f, -0.009485f, 0.001746f, + -0.039629f, 0.000095f, 0.019133f, -0.024434f, 0.005924f, 0.015725f, 0.006330f, -0.013027f, -0.000908f, 0.019017f, -0.023715f, -0.000715f, 0.010376f, 0.008844f, 0.009778f, -0.004171f, -0.003034f, -0.016353f, -0.007304f, 0.005672f, 0.011126f, 0.016221f, 0.021169f, -0.031354f, 0.012034f, -0.010097f, 0.002629f, -0.022482f, -0.008397f, 0.016671f, 0.004627f, 0.001244f, -0.011614f, -0.001386f, 0.011483f, 0.006573f, 0.004781f, 0.002236f, 0.024107f, 0.039817f, 0.022384f, 0.025903f, 0.004121f, 0.009102f, 0.035206f, -0.001246f, 0.001209f, 0.023844f, -0.011566f, -0.000089f, 0.007068f, 0.011814f, 0.019966f, -0.016253f, -0.022787f, 0.012517f, 0.007219f, -0.013480f, 0.003054f, 0.008049f, -0.004913f, 0.004565f, -0.012153f, -0.002936f, -0.014220f, 0.004303f, 0.015974f, 0.004756f, 0.014035f, 0.010523f, 0.011481f, -0.027448f, 0.001710f, 0.031662f, -0.003487f, -0.000696f, 0.029945f, -0.004029f, -0.000710f, 0.004271f, -0.003542f, -0.000983f, 0.016793f, 0.025657f, -0.024885f, -0.004223f, 0.005512f, -0.007856f, 0.012451f, -0.004096f, 0.001726f, 0.001820f, -0.004911f, 0.022644f, -0.002233f, -0.008273f, + 0.009249f, -0.008546f, -0.013308f, 0.004942f, 0.016409f, 0.005956f, -0.000625f, 0.003314f, 0.016056f, 0.007999f, 0.014745f, 0.004395f, 0.003455f, 0.000419f, -0.010744f, -0.001894f, -0.007251f, 0.067067f, 0.009759f, -0.001793f, 0.000027f, -0.032695f, -0.009005f, 0.002826f, -0.007058f, 0.014011f, 0.006805f, 0.022905f, -0.002398f, -0.000183f, -0.004415f, -0.009979f, 0.016142f, 0.002755f, 0.006583f, 0.008583f, 0.012832f, -0.011547f, -0.010812f, -0.013395f, -0.008526f, -0.007683f, -0.002570f, -0.018317f, -0.002781f, 0.029524f, 0.014763f, -0.005595f, -0.001117f, -0.003422f, 0.003383f, 0.010538f, -0.004157f, 0.042303f, -0.006335f, -0.001015f, -0.018109f, 0.007817f, 0.019500f, -0.002974f, -0.012955f, -0.001607f, 0.008282f, 0.014384f, 0.007348f, 0.020148f, 0.030976f, 0.009980f, 0.000733f, 0.017971f, 0.015833f, 0.005759f, 0.012635f, -0.036582f, 0.010170f, 0.001416f, -0.031056f, 0.012492f, 0.001005f, -0.013603f, 0.011108f, -0.014429f, -0.012542f, 0.017908f, 0.015817f, -0.007146f, -0.026621f, -0.012542f, 0.009512f, -0.016122f, -0.000567f, 0.007658f, 0.031622f, -0.004923f, -0.034410f, 0.021202f, + -0.002779f, -0.024383f, 0.000473f, 0.019681f, -0.022545f, -0.006324f, -0.017877f, 0.011559f, 0.005620f, -0.008337f, -0.006732f, -0.004165f, 0.014383f, 0.008658f, 0.007073f, 0.012224f, 0.013325f, 0.000065f, 0.015792f, 0.015169f, 0.008369f, 0.007926f, -0.014925f, -0.009176f, -0.009855f, 0.009236f, 0.015114f, 0.003780f, 0.005903f, -0.008842f, -0.003973f, -0.005762f, -0.002446f, -0.014992f, 0.014773f, 0.002099f, 0.002752f, -0.015899f, -0.002549f, 0.023177f, -0.015247f, -0.019133f, -0.026181f, 0.009186f, -0.019074f, 0.030115f, 0.037704f, 0.023949f, 0.016549f, 0.000900f, 0.030064f, -0.015077f, 0.024184f, -0.003127f, -0.013160f, 0.000986f, 0.003779f, -0.033453f, -0.012279f, 0.012701f, 0.004623f, -0.005289f, 0.007888f, 0.028697f, 0.022169f, -0.031194f, -0.004970f, 0.001075f, 0.002583f, 0.011649f, 0.017525f, 0.003060f, -0.021402f, 0.016921f, -0.008529f, -0.028453f, 0.001478f, 0.004879f, 0.017258f, 0.005602f, 0.046432f, 0.009208f, -0.021237f, -0.004797f, -0.018099f, 0.031897f, -0.040276f, -0.001828f, 0.025422f, -0.057001f, -0.024566f, -0.018109f, -0.021912f, -0.037198f, 0.002287f, -0.005082f, + -0.018071f, -0.000361f, 0.017034f, 0.004111f, 0.001076f, -0.009654f, 0.003206f, -0.002028f, 0.003185f, 0.001912f, 0.001566f, 0.016931f, -0.004986f, 0.001030f, 0.029195f, -0.017749f, -0.005309f, 0.007313f, 0.024967f, -0.011726f, 0.036219f, -0.009241f, -0.016495f, -0.029971f, -0.043156f, -0.009980f, -0.032463f, 0.017464f, -0.010780f, -0.021042f, 0.001856f, 0.006171f, 0.015881f, 0.017025f, 0.004741f, -0.000433f, 0.051785f, 0.032006f, -0.004716f, 0.007856f, 0.016830f, 0.016355f, 0.007467f, -0.004367f, -0.002408f, -0.006631f, -0.013749f, -0.008492f, 0.006679f, 0.044444f, -0.030233f, -0.004149f, -0.017584f, 0.032486f, -0.022585f, -0.024307f, 0.014198f, -0.011691f, -0.041800f, 0.019851f, -0.011650f, 0.015509f, -0.011244f, 0.019857f, 0.015671f, 0.016194f, 0.029563f, 0.002949f, 0.025133f, 0.007969f, 0.007199f, 0.014589f, 0.006578f, 0.002640f, 0.002053f, -0.002600f, -0.014489f, 0.011675f, -0.030329f, 0.011570f, 0.004001f, -0.011033f, -0.016070f, -0.002628f, 0.012687f, -0.016161f, -0.005199f, -0.023123f, -0.007494f, -0.028006f, 0.002125f, 0.011567f, 0.000197f, -0.005921f, -0.015837f, -0.030947f, + -0.020173f, 0.019270f, 0.007648f, -0.012120f, -0.016014f, -0.007014f, -0.001157f, -0.030783f, 0.023448f, 0.017970f, -0.027218f, -0.029898f, -0.043427f, -0.010228f, -0.052041f, 0.010140f, 0.019857f, 0.006586f, -0.003692f, -0.010890f, -0.005971f, 0.016728f, 0.020701f, 0.019958f, -0.017198f, -0.018069f, 0.015264f, -0.012809f, -0.009464f, -0.036536f, 0.011231f, 0.018120f, 0.025356f, -0.013899f, 0.038788f, 0.050468f, -0.021465f, 0.001626f, 0.010398f, -0.035946f, -0.009644f, 0.050905f, -0.000743f, -0.049559f, 0.003373f, 0.019010f, -0.003594f, 0.021165f, 0.040746f, -0.014641f, 0.036648f, 0.024156f, 0.030989f, 0.012445f, -0.027602f, -0.023891f, 0.019578f, -0.021317f, -0.040706f, -0.007877f, -0.047933f, 0.013507f, -0.005111f, 0.019777f, 0.012014f, 0.013585f, 0.003226f, 0.001806f, -0.000626f, 0.027058f, 0.009496f, -0.041133f, -0.007115f, 0.019007f, 0.027095f, 0.020164f, 0.034031f, 0.036478f, 0.023546f, -0.007672f, -0.006053f, 0.011123f, 0.063506f, -0.022735f, 0.003094f, 0.018556f, 0.023914f, -0.005636f, -0.037903f, -0.002509f, -0.010783f, -0.016518f, -0.041737f, -0.038235f, 0.010371f, -0.018737f, + -0.020214f, 0.017465f, 0.032760f, 0.048981f, -0.000995f, 0.004540f, -0.002443f, 0.040124f, -0.024276f, -0.003090f, 0.036114f, -0.032821f, 0.001506f, -0.022069f, -0.026592f, 0.015271f, 0.010239f, 0.020723f, -0.024656f, -0.060903f, -0.012189f, -0.022390f, -0.017718f, -0.013985f, 0.004523f, -0.022026f, -0.015374f, 0.003901f, 0.014963f, -0.014483f, 0.033104f, -0.005156f, 0.022773f, -0.012356f, 0.000550f, 0.016306f, -0.024010f, -0.017925f, -0.006979f, 0.025188f, -0.004688f, -0.031367f, -0.009364f, 0.002699f, -0.012535f, 0.010515f, -0.018021f, -0.021739f, 0.030834f, 0.006637f, -0.021152f, 0.012159f, -0.000935f, -0.019924f, 0.000081f, -0.031857f, -0.023987f, 0.003289f, 0.046881f, 0.016304f, 0.015881f, -0.037969f, 0.029653f, -0.005095f, 0.023153f, -0.014510f, -0.023278f, 0.010253f, -0.044501f, 0.036709f, -0.060909f, -0.041833f, 0.016378f, 0.032429f, 0.004512f, 0.039172f, -0.016271f, 0.008558f, -0.026891f, 0.036396f, 0.014285f, 0.026297f, 0.015087f, 0.004012f, -0.007312f, -0.012710f, -0.017126f, -0.010048f, 0.000816f, -0.037473f, -0.017485f, -0.002176f, -0.044272f, -0.005194f, 0.010288f, -0.044952f, + -0.041059f, 0.003544f, 0.017436f, -0.021561f, -0.093492f, -0.020254f, -0.000232f, 0.011560f, -0.031529f, 0.001993f, -0.017546f, -0.004489f, -0.025184f, -0.029074f, 0.025109f, -0.028349f, -0.033691f, -0.006652f, -0.023641f, -0.026931f, 0.008798f, -0.038720f, -0.012649f, 0.021599f, 0.051787f, 0.040848f, -0.002312f, -0.026874f, 0.008626f, 0.036532f, -0.002180f, 0.023802f, -0.007720f, 0.030272f, 0.017249f, -0.034035f, 0.051166f, -0.041037f, -0.021571f, 0.033254f, -0.039223f, 0.009906f, -0.009709f, -0.030688f, 0.002442f, 0.041989f, -0.010155f, -0.027694f, 0.015255f, 0.019494f, -0.001884f, 0.006794f, -0.064423f, 0.013014f, 0.001133f, 0.029491f, 0.013762f, -0.030085f, 0.025679f, -0.017293f, -0.004343f, -0.028330f, 0.011489f, 0.034077f, -0.009939f, -0.010362f, -0.040407f, -0.056836f, 0.027702f, -0.007463f, 0.021618f, -0.033320f, 0.019509f, 0.013027f, -0.038273f, 0.032920f, 0.037909f, -0.098062f, 0.038508f, 0.046060f, -0.009875f, 0.031313f, 0.002132f, 0.015073f, -0.005280f, -0.022067f, -0.010207f, 0.017946f, 0.007310f, -0.030018f, -0.015421f, -0.004943f, -0.010416f, -0.009459f, -0.000412f, 0.056777f, + 0.014469f, 0.010718f, -0.034006f, 0.023092f, -0.023447f, -0.001997f, 0.007220f, -0.042378f, 0.021337f, -0.017213f, 0.004769f, -0.018582f, -0.026204f, -0.001607f, 0.021933f, 0.052420f, 0.022486f, 0.003291f, 0.036713f, 0.011940f, -0.001253f, 0.003147f, 0.003735f, 0.007133f, 0.008479f, 0.034732f, 0.019246f, 0.008770f, 0.009161f, -0.007260f, -0.008474f, -0.039124f, -0.027586f, 0.001725f, -0.001170f, -0.025165f, 0.006517f, 0.024842f, -0.038481f, 0.037801f, 0.013947f, -0.017631f, 0.001969f, -0.013636f, 0.000451f, 0.021617f, 0.014718f, 0.004964f, -0.024228f, -0.008990f, -0.034374f, -0.015479f, 0.015718f, 0.010253f, 0.019374f, -0.021951f, -0.084530f, 0.131219f, -0.129816f, -0.059459f, -0.029378f, -0.009491f, 0.076538f, 0.021748f, 0.085600f, 0.020612f, -0.017188f, 0.066477f, 0.029291f, -0.023534f, 0.031671f, 0.027692f, 0.016064f, 0.025809f, 0.025945f, -0.023985f, -0.037225f, -0.027490f, 0.004268f, -0.025408f, 0.012789f, 0.006574f, 0.016553f, -0.003730f, 0.011343f, 0.002710f, 0.041638f, 0.008688f, 0.003634f, 0.011587f, -0.010137f, -0.001958f, 0.014347f, -0.027716f, -0.037877f, -0.026913f, + -0.022321f, 0.002140f, 0.010430f, -0.028005f, -0.005027f, -0.017594f, -0.065613f, 0.030804f, -0.012632f, 0.014593f, -0.035104f, -0.013601f, -0.032705f, -0.045398f, 0.015079f, 0.009209f, 0.040692f, -0.004215f, 0.035527f, -0.018261f, 0.029323f, 0.000923f, 0.042386f, -0.034363f, 0.025230f, 0.029749f, 0.015727f, 0.015586f, -0.001265f, -0.017424f, 0.048556f, 0.030200f, -0.007466f, 0.057187f, 0.010048f, 0.000280f, 0.020258f, 0.024918f, 0.080605f, 0.006900f, -0.048152f, -0.071128f, -0.037341f, -0.029538f, 0.010086f, 0.059199f, -0.000317f, -0.024531f, 0.053490f, 0.004834f, -0.041682f, 0.038914f, 0.042615f, -0.006915f, 0.000400f, -0.003231f, -0.036381f, 0.042808f, 0.003831f, 0.024800f, -0.011675f, -0.032438f, -0.056858f, 0.011884f, 0.009344f, 0.010366f, -0.006167f, 0.019825f, -0.017214f, 0.001253f, -0.035112f, -0.045250f, 0.019106f, -0.004257f, 0.017768f, -0.005006f, -0.014298f, -0.040555f, -0.062516f, 0.035686f, -0.033245f, 0.017112f, 0.035442f, -0.000118f, -0.012889f, -0.030143f, -0.018945f, 0.078027f, 0.021871f, -0.001147f, 0.014830f, -0.007647f, -0.025297f, -0.007644f, 0.049676f, -0.040051f, + -0.065331f, -0.022525f, -0.016060f, -0.097744f, -0.071111f, -0.039767f, -0.035780f, 0.013028f, 0.007953f, -0.032785f, -0.057668f, -0.024692f, -0.021573f, -0.021480f, -0.007323f, -0.013234f, -0.028031f, -0.040020f, 0.042989f, -0.037808f, 0.057547f, -0.008815f, 0.054969f, 0.075711f, -0.011991f, -0.086743f, -0.079449f, -0.019829f, 0.041691f, 0.003209f, -0.061770f, 0.048317f, -0.008488f, -0.044175f, 0.054289f, -0.099290f, -0.017879f, -0.001504f, -0.014637f, -0.016863f, 0.120593f, -0.051339f, 0.113194f, -0.007296f, 0.025922f, -0.009933f, -0.040989f, 0.069143f, 0.021497f, 0.072052f, -0.047733f, -0.051208f, 0.018813f, -0.081583f, -0.021281f, -0.014162f, -0.053008f, 0.114874f, -0.007331f, -0.121397f, 0.000955f, -0.054543f, 0.018479f, 0.028919f, 0.051069f, 0.038646f, -0.044727f, -0.030114f, -0.071148f, -0.021818f, -0.031419f, 0.031798f, 0.023818f, -0.003654f, 0.024697f, -0.014140f, -0.049559f, -0.020481f, -0.058277f, 0.064222f, -0.044318f, -0.030845f, 0.059513f, 0.015784f, 0.098586f, 0.049341f, 0.011837f, 0.054304f, -0.063589f, -0.020046f, -0.065259f, -0.060959f, -0.005183f, -0.000750f, -0.077992f, 0.101184f, + -0.004931f, -0.158306f, 0.082089f, 0.018150f, -0.033328f, -0.026254f, 0.051070f, 0.027132f, -0.029627f, -0.008834f, -0.073334f, -0.031558f, 0.032495f, -0.064634f, 0.003470f, 0.011057f, -0.018531f, -0.043224f, -0.028062f, 0.057201f, 0.024353f, -0.011974f, -0.081541f, 0.027661f, 0.053483f, 0.029714f, -0.062689f, -0.043088f, 0.001803f, 0.069453f, 0.007849f, -0.017231f, 0.012727f, 0.001915f, 0.037503f, -0.093351f, -0.078520f, 0.099259f, 0.017521f, 0.041328f, -0.092531f, 0.020293f, -0.001923f, 0.069088f, -0.059769f, -0.012275f, -0.092305f, 0.032830f, 0.071300f, 0.015634f, -0.039141f, 0.026759f, 0.102621f, -0.045018f, -0.043856f, -0.037729f, 0.017937f, 0.003523f, 0.091278f, -0.026733f, 0.011193f, -0.047804f, 0.020364f, -0.052477f, 0.003774f, 0.031959f, -0.058270f, 0.060210f, 0.025581f, -0.046341f, -0.061687f, -0.044318f, 0.005906f, 0.059421f, -0.100621f, -0.028326f, 0.117760f, 0.105011f, 0.052570f, 0.025038f, 0.023371f, 0.026131f, -0.017252f, -0.015243f, -0.035780f, 0.005633f, 0.010730f, 0.010450f, -0.002618f, -0.058607f, 0.028191f, 0.013106f, -0.042080f, -0.033946f, -0.018431f, -0.019226f, + 0.015186f, -0.013957f, -0.017928f, 0.006666f, -0.001659f, -0.030238f, 0.040647f, -0.027646f, -0.009519f, -0.028749f, -0.027557f, 0.021543f, -0.011647f, -0.002253f, 0.010453f, 0.014735f, -0.003039f, -0.038657f, 0.010040f, 0.065015f, 0.013978f, -0.097134f, -0.005657f, -0.019554f, -0.030057f, 0.022846f, 0.023206f, 0.053289f, 0.025692f, -0.062553f, 0.071232f, -0.015272f, -0.047233f, 0.148041f, -0.027881f, -0.010339f, -0.046392f, -0.113830f, 0.055110f, 0.061128f, 0.021695f, 0.024477f, -0.096608f, 0.031089f, -0.004818f, -0.021752f, -0.014095f, 0.006285f, -0.005531f, 0.017874f, 0.023435f, 0.006504f, -0.009326f, -0.025925f, 0.036526f, 0.040174f, 0.060006f, -0.056538f, -0.145124f, -0.237782f, 0.015081f, 0.244399f, 0.018091f, 0.517707f, 0.517085f, 0.188836f, 0.518008f, 0.302417f, -0.096538f, -0.011235f, -0.056529f, -0.401813f, -0.339839f, -0.236441f, -0.424013f, -0.400426f, -0.124535f, -0.255200f, -0.229368f, 0.041129f, 0.054995f, -0.062516f, 0.061530f, 0.102653f, -0.016634f, -0.003328f, 0.206828f, 0.137292f, 0.038158f, 0.152234f, 0.290175f, 0.131046f, 0.149339f, 0.367583f, 0.128640f, 0.050958f, + 0.307251f, 0.300537f, -0.012751f, 0.183327f, 0.333767f, -0.022782f, 0.061226f, 0.189320f, -0.041529f, -0.203537f, 0.051388f, -0.067082f, -0.376432f, -0.348488f, -0.331150f, -0.599368f, -0.877141f, -0.619351f, -0.858669f, -1.122897f, -0.814935f, -0.666060f, -0.893304f, -0.587591f, -0.322311f, -0.309002f, -0.121030f, 0.177932f, 0.416901f, 0.485866f, 0.661613f, 0.936922f, 0.898548f, 0.842169f, 0.935298f, 0.925396f, 0.677728f, 0.460289f, 0.266255f, -0.051362f, -0.050862f} + }, + { + {-0.004310f, 0.003591f, -0.009964f, 0.002957f, 0.004525f, 0.000052f, -0.004545f, 0.000605f, -0.001540f, -0.005226f, 0.013663f, 0.004369f, 0.003985f, 0.008358f, -0.003890f, -0.000867f, 0.000783f, -0.005747f, 0.010686f, -0.004067f, 0.001112f, -0.006109f, -0.001305f, 0.006301f, 0.000055f, 0.000470f, -0.002272f, 0.000869f, -0.007551f, 0.007910f, -0.006061f, 0.001772f, 0.005048f, -0.001075f, -0.004828f, 0.009149f, -0.000112f, -0.007862f, -0.000951f, -0.009100f, 0.003816f, -0.009680f, -0.004640f, 0.000986f, 0.002160f, 0.001496f, 0.002086f, 0.004356f, 0.006723f, -0.000797f, 0.004442f, 0.004666f, 0.003382f, -0.000126f, -0.003774f, 0.004692f, 0.001282f, 0.002884f, -0.005002f, 0.009156f, 0.007367f, -0.000719f, -0.004722f, -0.000760f, -0.000374f, -0.001779f, -0.005434f, -0.011035f, -0.001825f, 0.007026f, 0.006426f, 0.002855f, 0.013701f, -0.002339f, 0.000407f, -0.005442f, 0.019052f, -0.000757f, -0.001063f, 0.006108f, -0.002535f, 0.006963f, -0.003747f, -0.008911f, 0.003063f, 0.008952f, 0.001240f, -0.001405f, 0.011805f, 0.000379f, 0.000392f, -0.004095f, -0.002371f, 0.018493f, 0.002463f, -0.012643f, + -0.009431f, 0.013006f, -0.001325f, 0.013478f, 0.000810f, -0.002671f, -0.001427f, 0.010135f, 0.001868f, 0.021381f, 0.009301f, 0.005786f, -0.001334f, 0.004629f, 0.009542f, -0.002554f, -0.007443f, -0.009284f, -0.001948f, 0.008016f, 0.006849f, 0.010743f, 0.002857f, -0.006354f, -0.006601f, -0.002901f, 0.004335f, -0.001736f, 0.002267f, -0.001538f, -0.010010f, -0.007838f, 0.002712f, 0.006779f, 0.004096f, -0.003893f, -0.004321f, -0.000668f, 0.010317f, 0.004979f, -0.001497f, -0.002847f, 0.004578f, 0.002814f, 0.001740f, -0.005987f, 0.002320f, 0.004467f, -0.001101f, 0.007068f, 0.008682f, -0.016891f, 0.005296f, 0.002228f, 0.009708f, 0.005050f, 0.008683f, 0.017752f, -0.014352f, 0.003001f, -0.002885f, -0.000093f, -0.018522f, 0.001602f, 0.011703f, -0.017068f, -0.003119f, 0.010935f, 0.030124f, 0.003994f, 0.000172f, 0.001853f, -0.018257f, -0.000856f, 0.014128f, 0.011949f, 0.000731f, -0.000625f, 0.001536f, 0.006172f, 0.011130f, 0.011077f, 0.012630f, -0.005664f, 0.003068f, -0.000942f, 0.005146f, 0.001131f, 0.003482f, -0.019089f, -0.004728f, 0.002785f, 0.002011f, -0.010612f, 0.000142f, 0.006999f, + -0.007832f, 0.006447f, 0.006566f, 0.011088f, 0.005758f, -0.004373f, 0.006118f, 0.012440f, -0.006462f, -0.011355f, 0.004354f, 0.002588f, 0.002789f, 0.005921f, -0.004406f, -0.009123f, -0.012992f, 0.011042f, -0.001369f, -0.002503f, -0.003740f, 0.004933f, 0.000563f, 0.007275f, 0.014885f, 0.003035f, 0.001803f, -0.000538f, -0.002477f, -0.010742f, 0.018155f, 0.004495f, -0.000810f, 0.009097f, 0.000191f, -0.008689f, -0.007860f, -0.009448f, -0.013833f, 0.007795f, -0.000364f, -0.006376f, -0.002792f, -0.003194f, 0.002762f, -0.005286f, -0.009582f, 0.002259f, -0.006311f, 0.016132f, 0.021063f, 0.016946f, -0.011878f, -0.000343f, -0.001006f, 0.004601f, -0.006710f, 0.013297f, 0.008029f, -0.001802f, 0.006135f, 0.010092f, 0.000542f, 0.002496f, 0.003219f, 0.009791f, -0.001216f, 0.003672f, 0.011353f, 0.001229f, -0.000435f, -0.005053f, 0.008069f, -0.012633f, 0.004792f, -0.001759f, -0.002932f, 0.008437f, -0.008491f, -0.001038f, -0.000066f, -0.011023f, 0.004206f, -0.002254f, 0.004718f, -0.000406f, -0.005147f, 0.003275f, 0.003094f, -0.000666f, 0.009353f, -0.000806f, 0.010837f, -0.000302f, -0.007955f, -0.003500f, + -0.000048f, -0.005319f, 0.009551f, 0.004999f, 0.008098f, 0.009481f, -0.004848f, -0.010086f, -0.006945f, -0.000529f, -0.002468f, -0.002784f, 0.007222f, 0.008973f, -0.002436f, -0.028436f, -0.006361f, -0.009052f, -0.014952f, 0.004905f, 0.004260f, -0.002102f, 0.007351f, -0.001271f, 0.006245f, 0.008147f, -0.003444f, -0.010143f, -0.012146f, -0.005034f, -0.011296f, 0.000603f, 0.001539f, -0.005342f, 0.006821f, -0.005969f, 0.003777f, -0.002900f, -0.006338f, -0.017847f, -0.006566f, 0.001237f, 0.003010f, 0.004276f, -0.006264f, 0.004318f, 0.007298f, 0.001991f, 0.016241f, 0.003632f, -0.000159f, 0.012028f, -0.008500f, 0.006791f, 0.001428f, -0.004532f, -0.005675f, 0.007610f, 0.001326f, 0.002141f, -0.018623f, -0.003873f, -0.005983f, 0.018564f, 0.008386f, 0.006418f, 0.007957f, 0.008282f, 0.007155f, 0.009217f, -0.004838f, -0.002524f, 0.006197f, 0.009014f, -0.000988f, 0.010587f, -0.005662f, 0.001911f, -0.002084f, 0.008844f, 0.014395f, -0.022523f, 0.006131f, -0.006041f, 0.001128f, -0.011012f, -0.004819f, 0.001021f, -0.002496f, -0.005207f, -0.007798f, -0.004534f, 0.011163f, 0.006584f, 0.004166f, -0.002240f, + 0.001095f, 0.001053f, 0.014397f, -0.011407f, 0.014453f, -0.002016f, 0.007985f, 0.014479f, -0.008900f, 0.011199f, -0.006822f, 0.005703f, 0.002473f, 0.017064f, 0.007862f, -0.009641f, -0.015439f, 0.003503f, -0.011489f, 0.009626f, -0.002102f, 0.012573f, -0.009087f, -0.001594f, -0.007195f, 0.004302f, 0.003173f, 0.003564f, -0.000562f, -0.001392f, -0.013327f, -0.006065f, 0.011709f, -0.009036f, -0.001386f, 0.007302f, 0.000811f, -0.007077f, 0.002784f, 0.000601f, -0.001069f, -0.006138f, 0.012877f, 0.003903f, -0.017007f, -0.007963f, -0.013591f, -0.002519f, -0.011916f, -0.021669f, -0.004265f, 0.009394f, 0.027349f, 0.005774f, 0.002944f, 0.012492f, 0.000457f, -0.009911f, -0.007753f, 0.006910f, 0.003633f, 0.004602f, 0.008657f, -0.019027f, -0.003592f, -0.017576f, -0.002672f, 0.004535f, -0.005616f, -0.016514f, 0.003040f, 0.006148f, -0.001824f, 0.030852f, 0.007096f, 0.022411f, -0.010585f, -0.001203f, -0.007568f, -0.001454f, 0.023418f, -0.019839f, 0.006611f, 0.002564f, 0.030748f, 0.016732f, 0.020380f, 0.004051f, -0.005183f, 0.009989f, -0.006810f, -0.025261f, 0.004815f, 0.001801f, 0.002967f, 0.020527f, + 0.001901f, -0.011484f, -0.001043f, 0.000910f, 0.006419f, 0.007372f, -0.000564f, -0.002241f, 0.008296f, -0.009232f, -0.002573f, -0.004463f, -0.002368f, 0.002919f, 0.000499f, 0.018206f, 0.002712f, 0.014397f, 0.016262f, 0.004904f, 0.014390f, -0.000594f, 0.004926f, 0.009086f, -0.009051f, -0.013439f, 0.002033f, 0.014471f, -0.022052f, 0.007126f, -0.016815f, -0.015577f, -0.009453f, -0.003990f, -0.014682f, -0.014182f, -0.015026f, -0.007509f, -0.003351f, 0.010808f, 0.000801f, 0.012838f, 0.002484f, -0.009918f, 0.016363f, -0.016043f, -0.005475f, -0.006545f, -0.005905f, -0.008541f, -0.010474f, 0.016285f, 0.013885f, -0.007197f, -0.015354f, -0.017841f, -0.008630f, -0.011436f, -0.004303f, -0.005447f, -0.018711f, -0.017206f, -0.012371f, -0.003344f, -0.000073f, -0.003799f, 0.014835f, 0.000060f, 0.008160f, 0.009212f, 0.013393f, 0.000569f, 0.025174f, 0.028842f, 0.000374f, 0.007328f, 0.007808f, -0.005134f, 0.014195f, 0.005680f, -0.026233f, -0.002433f, -0.008472f, 0.000013f, 0.021937f, 0.006767f, -0.020835f, -0.007412f, 0.010556f, 0.007917f, 0.002197f, 0.026103f, -0.010679f, 0.009448f, 0.012190f, 0.010570f, + 0.008070f, 0.012557f, -0.023692f, 0.007029f, -0.008777f, 0.012538f, 0.001306f, 0.004182f, -0.017642f, 0.011332f, 0.010505f, -0.004634f, 0.010175f, -0.003953f, 0.003328f, -0.002664f, -0.008928f, -0.000127f, -0.005493f, 0.003221f, -0.006953f, 0.006439f, 0.003545f, 0.020366f, 0.018181f, -0.009064f, 0.006814f, -0.023338f, 0.017403f, -0.009752f, 0.010807f, 0.013029f, 0.018327f, -0.005905f, 0.018402f, 0.001503f, 0.015908f, -0.014158f, -0.003771f, 0.012779f, -0.006817f, 0.021850f, -0.006989f, -0.015303f, 0.028903f, 0.039429f, 0.008709f, -0.015423f, 0.010832f, -0.008071f, 0.016127f, 0.009533f, -0.003554f, -0.016321f, -0.010804f, -0.027839f, 0.007300f, 0.012121f, -0.024738f, -0.002740f, 0.014324f, 0.003969f, -0.001239f, 0.000834f, -0.003072f, -0.013105f, 0.003202f, 0.016892f, 0.000623f, 0.003919f, 0.005942f, 0.023866f, -0.015553f, -0.000019f, 0.016994f, -0.015163f, 0.022842f, 0.001697f, 0.032127f, -0.026261f, -0.024284f, 0.013912f, 0.001064f, -0.002540f, 0.006781f, -0.001470f, 0.008806f, 0.006336f, 0.017732f, 0.017993f, -0.014331f, 0.003600f, -0.009472f, -0.004433f, 0.010441f, -0.000065f, + -0.005850f, -0.000959f, 0.000125f, 0.017654f, -0.031082f, 0.025194f, -0.007860f, -0.008280f, 0.016643f, -0.011452f, 0.013013f, -0.015761f, -0.011786f, 0.000322f, -0.016038f, 0.000372f, -0.019653f, -0.014713f, -0.006716f, -0.013802f, -0.021439f, -0.004331f, 0.007511f, 0.026203f, 0.004006f, -0.015632f, -0.029411f, -0.005988f, 0.008780f, -0.005013f, 0.031030f, 0.009929f, -0.011381f, -0.022081f, -0.028004f, -0.052376f, -0.004627f, -0.005741f, 0.019719f, 0.014895f, -0.011131f, 0.001387f, -0.008727f, -0.004525f, 0.018409f, -0.000495f, 0.000531f, -0.002306f, 0.020884f, 0.003603f, -0.006953f, -0.001093f, -0.001364f, 0.005745f, -0.020074f, -0.006185f, -0.008309f, 0.030728f, 0.006479f, -0.032466f, 0.007600f, -0.016900f, -0.010272f, 0.004664f, -0.031018f, 0.009259f, 0.020780f, 0.019135f, 0.013997f, 0.003517f, 0.004945f, -0.001147f, 0.001967f, -0.019201f, 0.005546f, -0.029977f, -0.007222f, 0.016799f, 0.004541f, 0.017183f, 0.015314f, 0.013920f, -0.011932f, -0.022337f, -0.021758f, -0.015302f, 0.001793f, 0.005397f, 0.006414f, 0.009382f, -0.002786f, 0.005683f, 0.013119f, 0.015366f, 0.027131f, 0.031479f, + 0.022723f, 0.038914f, -0.018201f, 0.027676f, -0.023677f, -0.018502f, 0.020462f, 0.026228f, 0.030896f, -0.031807f, -0.000180f, 0.008122f, -0.023612f, 0.011285f, -0.010374f, -0.016626f, 0.019094f, -0.024707f, 0.026955f, -0.025388f, 0.025254f, -0.018173f, -0.006730f, -0.001519f, -0.033357f, -0.004462f, 0.036827f, -0.009224f, -0.026278f, 0.005832f, 0.017114f, -0.018958f, 0.009529f, 0.040036f, 0.021426f, 0.008317f, 0.017632f, -0.020769f, 0.014083f, -0.012341f, -0.036230f, -0.010668f, -0.009460f, 0.003047f, 0.016460f, 0.020698f, -0.008979f, -0.015477f, 0.014490f, 0.000557f, 0.011092f, 0.007414f, -0.005896f, 0.002524f, -0.014411f, 0.002788f, 0.004595f, 0.000460f, 0.004742f, 0.033463f, -0.004043f, 0.004048f, 0.009385f, 0.002867f, 0.004064f, -0.015603f, -0.018156f, 0.013890f, -0.021574f, -0.027981f, -0.030700f, -0.024275f, -0.040894f, 0.015157f, 0.051045f, 0.026363f, -0.010624f, -0.039219f, -0.014836f, 0.003524f, 0.004733f, -0.006829f, 0.018852f, 0.014297f, -0.015457f, -0.006543f, -0.002818f, -0.025555f, 0.036070f, -0.015781f, 0.012298f, -0.002025f, -0.009562f, -0.031306f, 0.009754f, 0.007822f, + -0.004897f, 0.005030f, 0.013642f, -0.004154f, 0.035244f, -0.006929f, -0.006385f, 0.031300f, -0.004247f, -0.020421f, -0.020232f, -0.036129f, 0.004226f, -0.007044f, -0.012532f, -0.006870f, -0.028353f, -0.010177f, -0.026638f, 0.004067f, -0.023593f, 0.021769f, -0.013807f, 0.000962f, 0.005266f, 0.003947f, 0.010657f, -0.009407f, -0.028928f, 0.013544f, -0.004463f, 0.008404f, -0.007560f, -0.001264f, -0.000646f, 0.028277f, 0.038368f, 0.012453f, -0.014320f, 0.015434f, 0.012522f, 0.017519f, -0.008805f, -0.011715f, 0.017716f, 0.011289f, 0.024006f, 0.007927f, 0.003145f, 0.002227f, 0.002388f, 0.025292f, 0.016996f, 0.017231f, 0.075175f, 0.004327f, -0.023127f, 0.066964f, 0.030318f, 0.030991f, 0.053766f, 0.058333f, 0.013620f, 0.020277f, 0.011663f, 0.063210f, 0.000724f, -0.018850f, 0.023795f, 0.008181f, -0.026133f, -0.024069f, 0.020894f, 0.025261f, 0.041139f, -0.001610f, 0.000671f, 0.003282f, 0.003454f, -0.023180f, 0.026614f, 0.023055f, 0.006379f, -0.017317f, 0.028259f, -0.006502f, -0.004279f, -0.038087f, -0.011634f, -0.000142f, -0.005330f, -0.018600f, 0.011386f, -0.017021f, -0.014329f, -0.008616f, + 0.002971f, -0.010683f, -0.021816f, -0.022822f, 0.024644f, -0.016464f, 0.026328f, 0.016576f, 0.020993f, 0.011170f, -0.027822f, 0.002628f, -0.042856f, -0.014253f, -0.025001f, 0.012519f, -0.031032f, -0.010458f, -0.008736f, 0.004991f, 0.024535f, 0.008112f, -0.008580f, -0.039933f, 0.013690f, 0.021648f, -0.005733f, 0.006621f, -0.028086f, 0.025925f, -0.003651f, -0.009540f, 0.047252f, 0.026589f, -0.024107f, -0.042814f, 0.012815f, 0.013546f, -0.013882f, 0.028700f, -0.031649f, 0.034376f, -0.024901f, -0.013703f, 0.010428f, 0.008368f, 0.086921f, 0.034688f, 0.012625f, -0.053983f, -0.001915f, -0.012381f, -0.029367f, -0.007824f, -0.011026f, -0.008980f, -0.003695f, -0.044748f, -0.001332f, -0.016541f, 0.000104f, 0.022714f, -0.024515f, 0.029304f, -0.009850f, -0.031034f, -0.028747f, 0.023395f, 0.016955f, -0.006369f, -0.016076f, 0.029699f, -0.016078f, -0.013974f, 0.022300f, 0.000162f, 0.006548f, -0.022595f, -0.001244f, -0.012894f, 0.028736f, -0.003464f, 0.041421f, -0.014673f, 0.005851f, 0.013661f, -0.001630f, 0.002712f, 0.012351f, -0.025811f, -0.004736f, 0.035675f, 0.002405f, 0.010813f, -0.000676f, -0.026417f, + 0.011611f, -0.017860f, 0.009663f, 0.031850f, 0.038855f, 0.044514f, 0.044768f, -0.007489f, 0.015897f, 0.002074f, 0.024573f, 0.057010f, -0.058372f, 0.049217f, -0.023402f, 0.007550f, -0.019665f, -0.047346f, -0.007693f, 0.008055f, 0.001915f, 0.009546f, -0.032944f, -0.005900f, -0.005716f, -0.049967f, -0.036404f, 0.018118f, 0.021546f, 0.008102f, 0.015282f, -0.026197f, -0.010880f, -0.018940f, 0.054639f, 0.011526f, 0.002870f, 0.038630f, 0.024383f, 0.018785f, 0.019511f, 0.014399f, -0.026636f, 0.018921f, 0.009719f, -0.009961f, 0.017446f, -0.015518f, -0.012410f, 0.026468f, -0.010448f, 0.016153f, 0.038433f, -0.000120f, 0.008795f, -0.002086f, 0.004208f, -0.009467f, -0.019653f, -0.028738f, -0.042269f, 0.016579f, -0.035405f, 0.012465f, 0.016775f, 0.017193f, 0.002437f, -0.000592f, -0.002800f, -0.030662f, -0.011080f, 0.012741f, -0.007204f, 0.013099f, 0.039779f, -0.013451f, 0.031401f, 0.010583f, 0.006718f, -0.004094f, -0.006047f, -0.029434f, 0.003347f, -0.039112f, -0.007421f, 0.035283f, -0.014656f, 0.002228f, -0.056446f, 0.025633f, -0.002061f, 0.003944f, -0.031763f, -0.042376f, 0.013958f, 0.012462f, + 0.038047f, -0.090117f, -0.022186f, -0.053512f, 0.018069f, -0.048049f, -0.016117f, -0.054454f, 0.014591f, -0.028372f, -0.021780f, -0.004607f, -0.046258f, -0.016778f, -0.049557f, -0.024988f, -0.057379f, 0.012445f, -0.053078f, -0.020941f, -0.027549f, -0.015400f, -0.014534f, -0.012339f, -0.050649f, -0.028925f, -0.038514f, -0.019725f, -0.011074f, 0.021972f, -0.003100f, 0.016420f, -0.031488f, -0.005066f, 0.001893f, -0.036297f, 0.007102f, -0.002484f, 0.003150f, 0.009585f, -0.036753f, -0.002029f, 0.013627f, -0.004511f, 0.015339f, 0.030597f, 0.055396f, -0.045993f, 0.002815f, 0.061553f, 0.000249f, 0.030187f, -0.021673f, 0.038087f, 0.006816f, -0.009208f, -0.051421f, -0.030285f, 0.042160f, 0.026035f, 0.041020f, 0.001242f, -0.029628f, 0.010203f, 0.014049f, 0.029184f, -0.057000f, -0.000265f, 0.008597f, -0.031622f, -0.013197f, -0.014517f, -0.023577f, -0.046258f, 0.057133f, -0.004656f, -0.025683f, 0.038344f, -0.064922f, -0.000758f, -0.013084f, 0.027840f, -0.014570f, -0.040110f, 0.034467f, -0.070317f, -0.060835f, -0.050201f, 0.028073f, -0.015260f, 0.001034f, -0.027689f, -0.026364f, -0.030646f, 0.016201f, 0.013970f, + 0.048074f, 0.022242f, 0.009066f, 0.044640f, -0.012966f, 0.015576f, -0.017333f, 0.013216f, 0.007222f, 0.025995f, 0.042724f, 0.021684f, -0.010242f, -0.028074f, -0.017178f, -0.006869f, 0.023325f, -0.009624f, 0.005523f, -0.000700f, -0.012712f, 0.021503f, -0.002957f, 0.017205f, 0.012617f, -0.039321f, 0.029118f, 0.054314f, 0.007087f, 0.044908f, 0.043952f, 0.018211f, 0.013263f, -0.002633f, 0.022200f, -0.018021f, -0.057020f, -0.021112f, 0.038649f, -0.003108f, -0.022471f, 0.017178f, 0.055596f, -0.017477f, 0.001971f, -0.046676f, 0.038756f, 0.031691f, -0.005333f, 0.005728f, -0.021587f, 0.087690f, -0.062179f, -0.061313f, -0.050456f, 0.100979f, -0.019889f, 0.054929f, 0.102984f, -0.037057f, 0.050991f, 0.018177f, -0.059829f, 0.054509f, 0.011869f, -0.030503f, 0.045556f, 0.015086f, 0.043023f, -0.003306f, -0.030381f, 0.028833f, 0.014192f, -0.002780f, 0.013302f, -0.012562f, -0.032229f, -0.024134f, -0.013666f, -0.033701f, -0.019446f, -0.008757f, 0.027078f, -0.024114f, -0.009257f, -0.033242f, 0.009924f, -0.000345f, 0.008400f, 0.038648f, -0.021313f, 0.007058f, -0.019469f, -0.016047f, 0.027561f, -0.022093f, + -0.038960f, -0.057913f, 0.066951f, 0.024959f, -0.011834f, 0.040387f, -0.036158f, -0.038323f, -0.017367f, -0.006838f, 0.010430f, -0.003133f, -0.033183f, -0.030987f, -0.024973f, -0.067845f, -0.035782f, -0.038477f, 0.016757f, 0.017319f, 0.002718f, 0.032705f, 0.011689f, -0.043318f, -0.028328f, 0.044691f, -0.038128f, -0.000299f, 0.049179f, -0.013331f, -0.070321f, 0.043520f, -0.022099f, -0.004421f, 0.009786f, 0.021400f, -0.049722f, 0.029548f, -0.013539f, 0.050394f, 0.035896f, -0.082235f, -0.009541f, 0.007969f, -0.048966f, -0.008793f, -0.007473f, 0.059516f, 0.044094f, 0.039505f, 0.050721f, -0.002623f, -0.034597f, -0.027975f, -0.027470f, 0.000544f, -0.077383f, 0.008550f, 0.067063f, -0.061568f, -0.109326f, 0.010356f, -0.040736f, 0.080097f, -0.000285f, 0.001827f, 0.054453f, -0.025693f, 0.011287f, -0.003346f, -0.014662f, 0.046288f, -0.013583f, 0.023014f, 0.079155f, -0.059108f, -0.033399f, -0.053929f, 0.026242f, 0.003631f, 0.052741f, -0.031163f, 0.020514f, 0.002112f, 0.047828f, 0.027783f, -0.024195f, -0.016333f, 0.017592f, -0.009275f, -0.002950f, -0.034567f, -0.034577f, 0.017337f, -0.008570f, -0.010098f, + -0.020339f, 0.043760f, -0.017950f, -0.017291f, 0.071837f, 0.079058f, 0.049098f, -0.065540f, -0.007814f, -0.019149f, 0.023793f, 0.100513f, -0.014693f, -0.069869f, -0.007621f, -0.022872f, 0.037897f, -0.048971f, 0.008220f, -0.040429f, 0.037179f, 0.019662f, -0.037513f, 0.064322f, 0.100221f, 0.001549f, -0.003782f, -0.035312f, -0.033590f, 0.004416f, 0.006485f, -0.018178f, 0.090554f, -0.009580f, 0.067675f, 0.052174f, -0.067078f, -0.003719f, -0.022126f, -0.074057f, 0.018788f, 0.015084f, 0.040033f, 0.066009f, -0.001623f, -0.021175f, 0.022674f, 0.022696f, 0.053684f, 0.020405f, 0.005182f, 0.041913f, 0.046462f, 0.013839f, -0.010439f, 0.038142f, 0.018096f, 0.046199f, 0.010461f, 0.011688f, 0.030329f, 0.048919f, -0.008551f, -0.043053f, -0.047016f, -0.017827f, -0.016423f, 0.078050f, 0.044054f, 0.121791f, -0.005982f, -0.065502f, 0.055010f, -0.021821f, -0.021759f, -0.021786f, -0.042649f, 0.003155f, 0.023433f, -0.004152f, -0.024118f, 0.085039f, -0.018112f, 0.100779f, -0.029119f, 0.052366f, 0.004225f, -0.021682f, -0.057931f, -0.085723f, 0.074528f, -0.012274f, -0.017107f, -0.028637f, -0.036060f, 0.023971f, + 0.090780f, -0.053243f, -0.036905f, 0.009174f, 0.015089f, -0.008763f, 0.063824f, 0.052636f, 0.049893f, 0.019103f, 0.023869f, 0.045016f, 0.025218f, -0.013910f, -0.027265f, -0.056331f, -0.010860f, 0.033719f, 0.009501f, 0.008701f, -0.023038f, -0.053149f, -0.017403f, -0.005886f, 0.054728f, 0.002609f, -0.007973f, 0.044350f, -0.007984f, 0.013610f, 0.007888f, -0.092804f, 0.023150f, 0.027432f, -0.017608f, -0.038606f, 0.006691f, -0.051522f, -0.028111f, -0.079906f, 0.023865f, -0.066413f, -0.136111f, 0.017562f, -0.002537f, 0.097144f, -0.003855f, 0.034197f, 0.078227f, -0.011093f, -0.020731f, 0.036738f, -0.000876f, -0.066928f, -0.024000f, 0.010711f, 0.011633f, 0.052281f, 0.021527f, 0.046645f, 0.039814f, -0.026696f, -0.019944f, 0.020457f, 0.059053f, -0.022973f, -0.009938f, -0.052230f, -0.033543f, 0.013934f, -0.067229f, 0.019341f, -0.074240f, 0.010938f, -0.011976f, -0.002808f, -0.018683f, 0.071436f, 0.078417f, 0.179617f, 0.022331f, -0.102423f, -0.074987f, -0.057201f, -0.063591f, 0.125243f, 0.169861f, 0.055911f, -0.015198f, -0.054534f, 0.002775f, -0.065756f, 0.071631f, 0.065369f, 0.020708f, 0.008098f, + -0.041069f, -0.007727f, 0.078680f, 0.016423f, 0.032088f, 0.024549f, 0.082490f, 0.066845f, -0.025721f, -0.062737f, -0.079553f, -0.056218f, -0.007302f, 0.020195f, 0.074187f, 0.041749f, -0.014603f, 0.037377f, -0.055033f, -0.021546f, -0.124660f, -0.022521f, 0.124081f, 0.092480f, -0.018526f, 0.246957f, 0.079091f, 0.004059f, -0.136443f, -0.026866f, -0.011144f, -0.035921f, 0.035602f, 0.015381f, 0.030217f, 0.048078f, -0.111364f, -0.125287f, -0.060119f, -0.086542f, -0.011278f, 0.021727f, 0.101387f, -0.067012f, 0.036991f, 0.150429f, 0.078497f, 0.019056f, 0.043318f, 0.022306f, -0.097151f, -0.169753f, 0.076873f, -0.054703f, 0.025924f, -0.038273f, -0.166066f, -0.039601f, 0.091417f, 0.176217f, 0.154474f, 0.372419f, 0.193796f, 0.131382f, 0.114717f, 0.051561f, -0.023152f, -0.190428f, -0.239351f, -0.355352f, -0.273442f, -0.279996f, -0.108946f, -0.001564f, 0.102428f, 0.194305f, 0.158826f, 0.164775f, 0.111487f, 0.154413f, 0.119015f, 0.170990f, 0.078036f, 0.060482f, 0.025259f, -0.050579f, -0.076005f, -0.112286f, -0.071410f, -0.237476f, -0.105280f, -0.225653f, -0.166083f, -0.257841f, -0.157757f, -0.241150f, + -0.092429f, -0.124329f, -0.048069f, 0.008284f, 0.106964f, 0.299794f, 0.283119f, 0.402590f, 0.266839f, 0.178844f, 0.233685f, 0.325540f, 0.282507f, 0.235893f, 0.157570f, 0.005045f, -0.188363f, -0.185945f, -0.229439f, -0.416584f, -0.461417f, -0.499383f, -0.502732f, -0.548466f, -0.482376f, -0.410324f, -0.370721f, -0.253221f, -0.015646f, 0.207463f, 0.383357f, 0.519828f, 0.649420f, 0.721260f, 0.460142f, 0.396603f, 0.104326f, -0.042561f, -0.032024f}, + {-0.011786f, 0.000611f, -0.009485f, -0.003189f, 0.004308f, 0.002622f, 0.006006f, -0.007800f, 0.004362f, -0.001018f, -0.007320f, 0.008648f, -0.004126f, -0.001790f, -0.005930f, -0.004928f, 0.005874f, -0.005754f, 0.003214f, 0.008122f, -0.000781f, 0.004544f, -0.002647f, 0.000149f, 0.003770f, -0.001088f, 0.007811f, -0.000324f, -0.011994f, -0.000271f, 0.001971f, 0.005270f, -0.005409f, 0.000867f, 0.001731f, -0.001060f, 0.005194f, -0.000944f, 0.007245f, 0.006432f, -0.004064f, -0.000427f, 0.006543f, -0.013184f, -0.007455f, 0.002872f, -0.006690f, -0.001501f, 0.002754f, -0.000031f, 0.007975f, 0.008822f, 0.002034f, 0.003727f, 0.004533f, 0.004713f, -0.001392f, 0.001315f, 0.004308f, 0.005789f, 0.000824f, -0.003972f, -0.007476f, -0.004885f, -0.000156f, -0.000803f, -0.000614f, -0.010294f, 0.009371f, -0.002942f, 0.001328f, -0.003240f, -0.006296f, 0.003120f, -0.001266f, 0.003555f, 0.024097f, 0.001053f, 0.004067f, 0.003340f, -0.009806f, -0.005118f, 0.013335f, 0.023166f, 0.003733f, 0.012311f, -0.005036f, 0.002275f, -0.000666f, 0.010397f, -0.008332f, -0.019014f, 0.007615f, 0.008763f, -0.011084f, 0.012689f, + 0.006246f, 0.011554f, 0.003631f, 0.002645f, -0.005169f, -0.001777f, 0.000532f, 0.007625f, 0.000619f, -0.011887f, 0.000426f, -0.001134f, 0.002439f, -0.001832f, 0.001985f, 0.002597f, 0.006875f, 0.004837f, 0.001553f, 0.001939f, 0.000573f, 0.003162f, -0.003735f, -0.006126f, -0.013111f, 0.002207f, 0.002718f, 0.000730f, 0.009803f, -0.003864f, 0.007583f, 0.001771f, -0.003233f, -0.006519f, -0.004119f, 0.013514f, 0.002831f, 0.007330f, 0.001143f, 0.002592f, -0.002825f, -0.000031f, 0.000785f, 0.003460f, -0.001345f, -0.005777f, -0.002940f, -0.011440f, 0.001084f, 0.001411f, 0.009144f, -0.003751f, 0.007000f, -0.002140f, 0.004611f, 0.008682f, 0.008863f, 0.003694f, 0.003770f, 0.004470f, 0.005946f, 0.008193f, -0.003427f, 0.008514f, 0.000348f, 0.009117f, -0.001797f, 0.016412f, 0.005906f, 0.005277f, -0.011086f, -0.001806f, -0.002318f, -0.014962f, 0.008316f, 0.006589f, -0.004406f, -0.019523f, -0.008546f, -0.003096f, 0.009670f, 0.012769f, 0.008422f, -0.005357f, 0.003017f, -0.008454f, 0.000644f, 0.000560f, -0.006496f, -0.003506f, -0.017233f, 0.001307f, -0.001948f, -0.007440f, 0.001002f, 0.000902f, + -0.002131f, -0.000643f, 0.016967f, -0.004092f, 0.013860f, 0.002606f, -0.010307f, 0.000759f, 0.001245f, 0.007669f, -0.003226f, 0.002212f, 0.002024f, 0.000663f, 0.010635f, 0.003740f, 0.010903f, 0.008048f, -0.005320f, 0.009997f, 0.004920f, 0.007433f, 0.000817f, 0.002720f, -0.002380f, -0.004146f, -0.008731f, -0.010216f, 0.011362f, -0.010442f, -0.008727f, -0.008205f, 0.005106f, 0.006321f, 0.001752f, -0.015109f, -0.013983f, 0.002986f, 0.000314f, -0.003072f, 0.008436f, -0.001139f, -0.001427f, 0.008684f, -0.009563f, 0.001847f, -0.008343f, -0.005461f, -0.002988f, 0.000059f, 0.014283f, 0.016148f, -0.007479f, 0.006307f, -0.011618f, -0.001147f, -0.004526f, 0.015688f, -0.004611f, -0.000922f, 0.001683f, -0.022168f, -0.003814f, -0.010963f, -0.003567f, -0.002745f, 0.008283f, 0.010925f, 0.004524f, 0.014777f, -0.001861f, -0.006772f, -0.006807f, 0.008522f, 0.022254f, 0.015506f, -0.008634f, -0.010162f, 0.011148f, -0.009999f, 0.001929f, 0.003519f, 0.018234f, -0.006727f, -0.008946f, 0.001958f, -0.005543f, 0.003457f, 0.004657f, 0.011549f, -0.012663f, -0.008246f, 0.007437f, 0.013959f, -0.001292f, -0.006512f, + -0.008259f, -0.019788f, 0.007466f, -0.000051f, 0.005831f, 0.000916f, 0.000416f, -0.003106f, 0.003478f, -0.005024f, 0.002901f, 0.004342f, 0.003943f, -0.006823f, 0.004522f, -0.036655f, -0.012078f, -0.001935f, 0.006251f, 0.004209f, 0.009119f, -0.017503f, -0.005244f, -0.000789f, -0.018155f, -0.012966f, 0.004564f, 0.010990f, 0.006450f, 0.012128f, -0.001541f, 0.006971f, 0.016149f, 0.014252f, 0.013398f, 0.007728f, -0.005141f, -0.004091f, -0.008270f, -0.003657f, -0.008303f, 0.017243f, 0.008043f, -0.002625f, -0.007596f, -0.004633f, -0.007750f, -0.011327f, -0.012195f, -0.015359f, 0.009337f, 0.006677f, -0.017009f, 0.004061f, -0.000823f, 0.011827f, 0.001880f, 0.005846f, 0.007731f, -0.016092f, -0.002414f, -0.000541f, 0.002253f, 0.008529f, 0.012995f, -0.005086f, -0.001706f, -0.003705f, -0.009977f, 0.003205f, 0.002247f, -0.000981f, -0.002517f, 0.009853f, 0.000838f, -0.005277f, -0.001460f, 0.004749f, 0.006674f, -0.002378f, 0.000253f, 0.001785f, -0.008179f, 0.006725f, 0.000141f, -0.013100f, 0.002595f, -0.016033f, 0.004028f, 0.012160f, -0.001844f, -0.000770f, 0.019725f, 0.008003f, 0.003014f, -0.004600f, + 0.014450f, 0.006191f, 0.008015f, 0.023949f, 0.025085f, 0.001446f, -0.004476f, -0.008532f, -0.014163f, 0.005583f, 0.009728f, -0.004682f, -0.001349f, 0.001975f, -0.002730f, -0.007567f, 0.009238f, -0.008757f, 0.004108f, -0.026333f, -0.004174f, -0.005941f, -0.006821f, -0.012671f, -0.003051f, -0.001065f, -0.000064f, -0.006140f, -0.010007f, -0.006971f, 0.000805f, -0.004355f, -0.010594f, 0.006939f, 0.008622f, 0.001513f, -0.008736f, -0.008698f, 0.003238f, -0.006476f, 0.008114f, -0.009587f, 0.006489f, 0.003369f, -0.000398f, -0.013956f, -0.014096f, 0.004219f, -0.010300f, 0.017316f, 0.002602f, 0.014760f, -0.007386f, 0.014913f, 0.002332f, 0.010098f, 0.002633f, 0.009721f, -0.008124f, -0.009578f, -0.000691f, 0.019232f, -0.002262f, -0.010148f, -0.006942f, 0.009660f, -0.005719f, -0.004506f, 0.000777f, -0.016123f, 0.011372f, 0.019450f, -0.003587f, 0.029589f, 0.005278f, 0.016566f, -0.006885f, 0.012588f, 0.008229f, 0.019223f, -0.014348f, -0.009095f, -0.003759f, 0.001784f, 0.012561f, -0.005475f, 0.019392f, -0.000764f, 0.010763f, 0.010547f, -0.006195f, 0.004776f, 0.010920f, 0.011397f, 0.002133f, 0.003697f, + 0.009901f, -0.020927f, 0.002958f, 0.017544f, 0.012524f, -0.010947f, 0.014056f, -0.016505f, 0.009924f, -0.014456f, -0.008274f, -0.003206f, 0.015309f, -0.002439f, 0.016062f, 0.004510f, 0.003015f, 0.001648f, -0.001127f, 0.007420f, 0.009203f, 0.022522f, 0.002851f, 0.019570f, -0.009751f, 0.014558f, 0.017459f, 0.000340f, -0.003765f, -0.005564f, 0.006435f, -0.024765f, -0.002651f, 0.003522f, -0.010135f, -0.014244f, -0.001345f, 0.000086f, -0.002530f, 0.007836f, -0.016158f, 0.009095f, 0.006522f, 0.011187f, -0.025144f, 0.009787f, 0.005662f, -0.013336f, -0.001906f, 0.009433f, 0.018278f, -0.021782f, -0.002200f, 0.002688f, -0.025863f, -0.031346f, -0.025367f, -0.022605f, -0.000905f, 0.016250f, -0.033368f, 0.023891f, 0.015208f, -0.037115f, 0.023431f, 0.010227f, 0.007968f, 0.003976f, 0.003551f, 0.008745f, -0.005922f, -0.005783f, -0.012313f, -0.000032f, 0.014306f, 0.012468f, 0.007051f, -0.020895f, 0.014542f, -0.014805f, 0.000439f, -0.012948f, 0.016723f, -0.008394f, -0.006843f, 0.005741f, -0.024938f, 0.002999f, -0.008192f, -0.006948f, -0.002553f, 0.002354f, 0.024739f, -0.011005f, -0.003607f, -0.008729f, + 0.018897f, -0.010703f, -0.005922f, 0.006488f, 0.005870f, 0.006047f, 0.006897f, -0.006940f, 0.009338f, 0.003188f, -0.020165f, 0.029164f, 0.011622f, 0.005593f, 0.003397f, 0.000982f, -0.012627f, 0.017377f, 0.014119f, 0.007010f, 0.018779f, 0.003437f, 0.008753f, 0.019892f, 0.010186f, 0.005850f, -0.011448f, 0.017247f, -0.005259f, 0.031346f, -0.001481f, 0.004178f, -0.005711f, -0.025214f, 0.006350f, 0.019182f, 0.011663f, -0.001323f, -0.012384f, 0.030952f, 0.047077f, -0.005572f, -0.007576f, 0.023940f, 0.004704f, 0.008376f, 0.005189f, -0.033843f, 0.002814f, -0.021652f, 0.016855f, 0.026157f, -0.007735f, -0.011655f, 0.003090f, 0.016781f, -0.010794f, 0.020122f, -0.008791f, 0.038241f, -0.012175f, 0.007874f, -0.003052f, 0.010791f, 0.025567f, -0.009558f, 0.001360f, -0.001815f, 0.006433f, -0.009404f, -0.006165f, 0.015787f, 0.031479f, 0.003263f, 0.022619f, -0.008411f, 0.001809f, -0.004035f, 0.006461f, 0.018085f, 0.024619f, 0.020937f, 0.017747f, 0.020680f, 0.011023f, -0.003230f, 0.001279f, -0.002326f, -0.001416f, 0.004467f, -0.015150f, -0.003333f, 0.019018f, -0.018129f, 0.005153f, -0.007720f, + -0.007289f, -0.009203f, -0.040843f, 0.004740f, 0.017995f, 0.013606f, -0.007741f, -0.017677f, -0.047479f, -0.006611f, 0.014135f, -0.003184f, 0.002532f, -0.013142f, 0.004300f, -0.011197f, -0.034064f, -0.025111f, 0.002326f, 0.016561f, -0.015890f, -0.008592f, 0.000872f, -0.006838f, -0.050408f, -0.041437f, 0.017538f, 0.018278f, 0.002141f, 0.003706f, -0.019076f, 0.029529f, 0.033433f, 0.022444f, -0.018723f, 0.017810f, 0.021635f, -0.002264f, -0.029614f, -0.011658f, 0.038677f, -0.010477f, 0.003044f, 0.003723f, 0.021337f, -0.016524f, -0.032730f, 0.008260f, 0.013718f, -0.006450f, 0.008460f, 0.022016f, -0.010895f, -0.006495f, -0.001822f, -0.042994f, -0.013754f, 0.016769f, -0.009324f, -0.028189f, 0.004499f, 0.000754f, -0.010224f, 0.007481f, -0.003688f, -0.026541f, -0.024758f, -0.040488f, -0.034397f, 0.008243f, 0.013858f, 0.003139f, -0.010957f, -0.012246f, -0.000605f, -0.007729f, 0.008008f, -0.018279f, -0.000337f, -0.005106f, -0.006929f, -0.004679f, -0.002988f, 0.010232f, -0.010466f, -0.037937f, 0.004669f, -0.003089f, 0.008384f, 0.014144f, -0.001122f, 0.011260f, 0.007016f, 0.016110f, 0.051713f, 0.045940f, + 0.035852f, -0.003919f, 0.035010f, 0.011269f, 0.048868f, 0.020598f, -0.001201f, 0.059601f, -0.012683f, -0.003390f, -0.038360f, -0.010352f, -0.001087f, -0.027215f, 0.015729f, 0.023604f, -0.008192f, -0.000791f, -0.022052f, -0.037594f, -0.022350f, -0.028837f, -0.008755f, -0.017698f, -0.005921f, -0.003362f, 0.016411f, 0.003579f, -0.004156f, -0.016077f, -0.005937f, -0.011059f, 0.004729f, -0.000522f, -0.015882f, 0.007014f, 0.009295f, 0.002917f, -0.012519f, -0.016512f, 0.004283f, 0.013000f, -0.002915f, -0.001823f, -0.028115f, 0.047383f, 0.007218f, -0.010738f, -0.002331f, 0.002767f, 0.019834f, 0.016065f, -0.019414f, 0.008579f, -0.008279f, 0.000347f, -0.004235f, -0.006618f, -0.029039f, -0.026985f, -0.034567f, 0.002817f, -0.002610f, -0.009416f, 0.019733f, -0.009164f, 0.057944f, -0.008448f, -0.004350f, -0.017278f, -0.007543f, -0.034154f, -0.042312f, -0.027570f, 0.036054f, 0.023744f, -0.020296f, -0.026293f, 0.038534f, 0.019122f, -0.019959f, -0.033460f, -0.002365f, 0.002768f, 0.006164f, 0.001901f, -0.015290f, 0.016427f, -0.010672f, 0.034537f, -0.002933f, -0.028416f, 0.008897f, 0.007068f, 0.002654f, 0.000460f, + -0.008534f, -0.019251f, 0.002020f, 0.012711f, -0.006212f, 0.009149f, -0.015129f, -0.050836f, -0.036301f, 0.022692f, -0.027539f, 0.022366f, 0.010382f, 0.000660f, -0.007000f, 0.012259f, 0.007955f, -0.006020f, -0.003649f, 0.004615f, 0.018255f, -0.015481f, 0.044641f, -0.012486f, 0.017455f, -0.014488f, 0.007340f, -0.005556f, -0.012290f, 0.037624f, -0.027121f, 0.041132f, 0.002486f, -0.023474f, -0.028451f, 0.014695f, 0.010176f, 0.003456f, 0.006410f, 0.015625f, 0.016436f, 0.014027f, -0.028718f, -0.011992f, 0.005989f, -0.001242f, 0.013776f, -0.026974f, -0.006931f, -0.009560f, 0.000553f, -0.031806f, -0.004327f, 0.007464f, 0.075989f, 0.026501f, -0.017967f, 0.040353f, 0.035945f, -0.018127f, -0.025032f, 0.060252f, -0.006114f, 0.013956f, -0.035986f, 0.087316f, 0.002250f, -0.023280f, 0.011792f, 0.005244f, 0.041223f, 0.001656f, 0.052272f, -0.037145f, 0.000124f, -0.040655f, 0.002536f, 0.030191f, 0.000713f, -0.024534f, 0.035497f, 0.020264f, 0.010044f, 0.009659f, -0.013188f, -0.011209f, 0.002757f, -0.017068f, 0.023154f, -0.020114f, -0.028571f, 0.025799f, 0.008992f, -0.031636f, 0.017346f, 0.003123f, + -0.024024f, -0.012323f, -0.008180f, 0.013443f, -0.002990f, -0.013316f, 0.017302f, -0.020117f, -0.008393f, -0.006273f, 0.029220f, -0.018193f, 0.014269f, 0.023326f, 0.010677f, -0.012326f, -0.026774f, 0.018162f, -0.022643f, 0.032356f, -0.038809f, 0.053147f, -0.014352f, -0.006635f, -0.005962f, 0.024438f, 0.000188f, 0.009053f, 0.016715f, 0.008618f, 0.023465f, -0.020541f, -0.033410f, -0.001347f, -0.003588f, -0.046223f, -0.005437f, 0.041745f, -0.012026f, -0.026494f, 0.011861f, -0.012602f, -0.002016f, 0.018743f, -0.045403f, -0.027135f, 0.017880f, 0.023153f, 0.032254f, -0.002612f, -0.005822f, 0.012546f, -0.002869f, -0.045501f, -0.030687f, 0.052688f, -0.003818f, -0.046911f, -0.026792f, -0.019142f, -0.015180f, 0.003872f, 0.015813f, 0.000377f, -0.007572f, -0.023700f, -0.035310f, 0.004261f, 0.004907f, -0.001790f, 0.029208f, -0.020388f, -0.055511f, 0.021975f, 0.016553f, -0.065686f, 0.039005f, -0.011207f, -0.032685f, -0.027794f, -0.002291f, 0.036238f, 0.009002f, -0.013093f, -0.013264f, 0.009680f, 0.019596f, -0.028350f, 0.021103f, 0.002345f, 0.015577f, -0.012980f, -0.028368f, 0.024061f, 0.000203f, 0.027020f, + -0.087908f, 0.009734f, 0.013718f, -0.014629f, 0.024596f, 0.026627f, 0.083833f, 0.000367f, -0.055076f, -0.027750f, -0.014178f, -0.056322f, -0.052277f, -0.000368f, -0.028334f, -0.001949f, -0.000338f, -0.036957f, 0.004665f, 0.025126f, 0.019635f, -0.032642f, 0.059175f, 0.043720f, -0.020973f, 0.026728f, -0.050651f, -0.009459f, -0.018007f, 0.079005f, 0.048125f, -0.017007f, -0.031173f, -0.034732f, -0.009649f, 0.003544f, 0.012622f, 0.053532f, 0.009417f, 0.010366f, 0.009576f, 0.002986f, -0.018867f, 0.003668f, -0.004990f, 0.025581f, 0.030582f, 0.042664f, 0.024889f, 0.019079f, -0.005888f, -0.005855f, 0.004624f, 0.038964f, 0.003942f, 0.008432f, -0.039806f, -0.017324f, 0.061796f, 0.027883f, 0.017081f, 0.002521f, 0.036071f, 0.022570f, 0.078349f, -0.002276f, 0.080764f, 0.008260f, -0.028226f, 0.029392f, -0.025000f, -0.014142f, -0.005612f, -0.012516f, -0.001898f, 0.018468f, 0.030265f, 0.009075f, -0.010263f, -0.032817f, 0.008326f, 0.006985f, 0.020303f, -0.024117f, 0.003521f, -0.007559f, -0.000287f, -0.030445f, 0.013154f, -0.024857f, -0.010260f, -0.034167f, -0.068044f, 0.010237f, -0.020413f, -0.030904f, + 0.009435f, -0.035418f, -0.000036f, 0.043247f, 0.013586f, 0.036951f, -0.042431f, -0.019322f, 0.021067f, 0.004651f, 0.061184f, -0.030547f, 0.036753f, -0.013315f, -0.018062f, -0.044884f, -0.017200f, -0.023833f, 0.030955f, 0.007749f, -0.039889f, 0.051372f, -0.025570f, -0.023645f, 0.005616f, 0.020544f, -0.014054f, 0.035910f, -0.016178f, -0.023462f, -0.011662f, 0.012607f, -0.003321f, -0.005672f, 0.004831f, 0.036031f, -0.022581f, 0.065110f, -0.023655f, 0.000378f, 0.060525f, -0.010635f, 0.011768f, -0.079507f, 0.005005f, 0.015850f, -0.016751f, 0.037128f, -0.063277f, -0.077806f, 0.031789f, -0.012473f, 0.045648f, -0.031076f, -0.029066f, 0.005294f, -0.008200f, 0.069295f, -0.006117f, -0.001156f, 0.017253f, -0.060628f, 0.005943f, -0.061179f, -0.022809f, 0.005914f, 0.017927f, -0.076634f, -0.032158f, -0.007088f, -0.000196f, 0.028512f, -0.029266f, 0.044092f, -0.009970f, -0.046145f, 0.037068f, -0.032236f, -0.012922f, 0.034739f, 0.070284f, -0.018011f, 0.057037f, 0.024161f, 0.012483f, -0.025093f, 0.063420f, 0.013202f, 0.027934f, 0.005646f, -0.042092f, 0.016889f, -0.042300f, -0.036304f, 0.021131f, -0.036206f, + -0.011608f, -0.006522f, 0.036088f, 0.005895f, -0.016554f, 0.015223f, 0.014134f, -0.005708f, -0.040569f, -0.006364f, 0.025079f, 0.071465f, 0.012400f, -0.036755f, 0.000690f, -0.005338f, 0.012928f, 0.023072f, 0.031359f, -0.013520f, -0.002978f, 0.024609f, 0.001384f, 0.000613f, 0.042359f, 0.043495f, 0.045784f, 0.018752f, 0.037756f, 0.007179f, 0.020933f, -0.018374f, -0.007764f, 0.006709f, -0.043252f, 0.003908f, 0.061369f, -0.007600f, -0.018978f, 0.014364f, -0.005661f, 0.017911f, -0.044001f, 0.051715f, -0.037487f, -0.015165f, -0.013995f, 0.001407f, 0.000863f, 0.004547f, -0.062426f, 0.068451f, -0.021179f, -0.028900f, -0.014139f, 0.116010f, -0.005342f, 0.022027f, 0.000597f, -0.013607f, 0.004923f, -0.055878f, -0.021587f, -0.018199f, 0.022789f, 0.013631f, 0.028274f, 0.001608f, -0.026922f, 0.028569f, -0.022589f, 0.033176f, 0.027178f, -0.029350f, -0.028219f, 0.002216f, 0.044073f, -0.044693f, 0.019968f, 0.018678f, -0.022945f, 0.009750f, -0.001347f, 0.013882f, -0.000044f, -0.064456f, 0.037364f, 0.020578f, -0.051337f, 0.063090f, -0.032104f, -0.009342f, -0.019095f, 0.050753f, -0.008257f, -0.045236f, + 0.001985f, -0.000403f, 0.044991f, 0.042570f, 0.005046f, -0.034640f, 0.051100f, -0.008871f, 0.010893f, -0.062970f, 0.051162f, 0.019009f, 0.005337f, -0.036462f, -0.024495f, -0.004628f, 0.019554f, -0.029409f, -0.048460f, -0.022540f, 0.043195f, 0.024286f, -0.003006f, 0.064843f, 0.007100f, -0.011379f, -0.043816f, 0.057104f, -0.049876f, -0.018214f, 0.063625f, 0.017559f, 0.013296f, -0.024079f, 0.017038f, 0.052636f, -0.044819f, -0.000774f, -0.050404f, 0.047132f, 0.079541f, 0.033626f, 0.046336f, -0.069485f, -0.057515f, -0.049284f, 0.007076f, 0.081388f, -0.012859f, 0.028979f, 0.056926f, 0.025331f, -0.027269f, -0.000200f, 0.042401f, -0.053091f, -0.039893f, -0.038602f, 0.044435f, 0.027044f, -0.050630f, -0.077571f, 0.105695f, 0.061455f, -0.070083f, 0.031310f, -0.005357f, 0.028556f, 0.006540f, -0.023931f, -0.047450f, 0.044668f, 0.002245f, -0.039431f, -0.052819f, 0.012720f, 0.016918f, -0.015963f, 0.005353f, -0.006911f, -0.023852f, -0.013912f, -0.010527f, 0.024523f, -0.045144f, 0.052897f, -0.032831f, 0.000363f, 0.090505f, -0.084453f, -0.015107f, 0.076503f, 0.010821f, 0.016608f, -0.006233f, -0.026180f, + 0.030196f, -0.010843f, -0.028474f, 0.002654f, -0.072239f, 0.131354f, -0.006334f, -0.149047f, 0.062892f, 0.142681f, 0.093396f, -0.181899f, -0.043529f, 0.030383f, 0.022695f, -0.033068f, -0.027327f, -0.036189f, 0.007435f, 0.037414f, 0.084175f, -0.035099f, 0.026436f, -0.044631f, -0.121363f, 0.065115f, -0.031870f, -0.065240f, -0.047262f, -0.066851f, 0.030143f, 0.022346f, -0.092276f, 0.057741f, -0.033702f, -0.002555f, -0.003533f, -0.046713f, 0.033101f, 0.034944f, 0.028614f, -0.003747f, 0.038119f, 0.020481f, -0.027942f, 0.001127f, -0.054632f, -0.019948f, -0.049006f, -0.033339f, -0.005823f, 0.072381f, -0.065682f, -0.015184f, -0.017309f, -0.057673f, 0.028363f, -0.065022f, 0.028047f, 0.025403f, -0.047072f, 0.030496f, -0.073113f, 0.016320f, -0.064448f, 0.034899f, -0.027590f, -0.035366f, -0.038181f, -0.052767f, -0.018999f, 0.019559f, 0.035896f, -0.054412f, 0.026163f, 0.012553f, 0.044296f, 0.056721f, 0.029078f, -0.059675f, -0.032465f, -0.106751f, -0.033653f, -0.037689f, 0.023419f, -0.125494f, -0.032157f, -0.080373f, -0.017337f, 0.054826f, 0.050430f, 0.024709f, -0.000414f, 0.071164f, -0.022843f, 0.017862f, + 0.102886f, -0.059163f, 0.035829f, 0.052755f, -0.026721f, 0.008508f, 0.014420f, -0.001908f, 0.047712f, 0.006698f, 0.033374f, -0.044077f, -0.011033f, 0.045785f, 0.002657f, -0.061300f, 0.038006f, -0.022148f, -0.025464f, -0.021043f, -0.010693f, -0.020469f, 0.020535f, 0.038355f, 0.012645f, -0.002299f, -0.022327f, 0.033680f, -0.013927f, -0.044293f, 0.035124f, -0.077340f, -0.024471f, -0.013161f, -0.021829f, 0.049592f, 0.046526f, 0.093977f, -0.030535f, 0.042034f, -0.005328f, 0.020643f, 0.055599f, -0.001276f, 0.002617f, -0.036684f, -0.128473f, 0.064616f, 0.008380f, -0.057616f, -0.044697f, 0.008580f, 0.029400f, -0.003467f, -0.038423f, 0.020396f, -0.039099f, 0.049476f, 0.024051f, -0.019352f, -0.045732f, 0.087511f, 0.007698f, 0.005133f, -0.009212f, 0.011898f, 0.005529f, 0.002847f, -0.028687f, -0.063521f, 0.018812f, -0.012728f, -0.017595f, -0.063207f, -0.001795f, -0.007637f, 0.006688f, 0.118201f, 0.061366f, 0.118946f, -0.109770f, 0.008847f, 0.058155f, -0.022982f, 0.066143f, 0.125549f, 0.070011f, 0.003325f, -0.033286f, -0.035780f, 0.007281f, 0.054018f, 0.059334f, 0.012615f, 0.000595f, -0.087833f, + -0.017214f, 0.085234f, 0.029179f, -0.024666f, 0.048213f, -0.041075f, -0.055724f, -0.016213f, -0.003010f, 0.065738f, 0.087537f, 0.077253f, 0.030305f, -0.030927f, -0.045687f, -0.086897f, -0.084927f, 0.073933f, 0.032082f, 0.005398f, 0.116063f, 0.006258f, -0.034519f, -0.047912f, -0.047150f, 0.022569f, 0.050036f, 0.038438f, 0.076402f, 0.004590f, 0.055191f, -0.004370f, -0.009008f, 0.026734f, 0.051141f, 0.035988f, 0.032763f, -0.029651f, -0.010163f, -0.023640f, -0.050412f, -0.041996f, -0.073835f, -0.026089f, 0.020533f, -0.013535f, 0.054633f, 0.063620f, -0.000794f, -0.001202f, -0.026721f, -0.049908f, 0.009148f, 0.059830f, -0.005761f, -0.062688f, -0.123549f, 0.049193f, 0.200621f, 0.204945f, 0.172741f, 0.126082f, -0.077351f, -0.087251f, -0.095208f, -0.125685f, -0.193741f, -0.155065f, -0.135389f, 0.064278f, 0.146196f, 0.109821f, 0.234984f, 0.182732f, 0.095140f, -0.033197f, -0.062402f, -0.155804f, -0.122128f, -0.119892f, -0.023864f, -0.072565f, -0.059442f, 0.020322f, 0.034318f, 0.068809f, 0.068135f, 0.094016f, 0.092349f, 0.119771f, 0.070067f, 0.032968f, -0.015024f, -0.016602f, -0.049288f, -0.074528f, + -0.091667f, -0.111388f, -0.072686f, -0.137373f, -0.091220f, -0.066462f, 0.073878f, 0.138549f, 0.148050f, 0.104857f, 0.071973f, 0.111981f, 0.085895f, 0.108134f, 0.085177f, 0.034433f, -0.032835f, -0.172577f, -0.121056f, -0.121803f, -0.194141f, -0.117540f, -0.101528f, -0.096350f, 0.047000f, 0.117100f, 0.178948f, 0.151525f, 0.210577f, 0.192999f, 0.189073f, 0.142429f, -0.048636f, -0.037680f, -0.112274f, -0.148170f, -0.128450f, -0.021449f, -0.012368f} + }, + { + {-0.011821f, -0.009289f, 0.002235f, -0.005330f, 0.008560f, -0.008721f, 0.003563f, -0.015997f, -0.001212f, -0.006332f, -0.009951f, -0.008395f, -0.004922f, -0.000416f, -0.001885f, 0.010525f, -0.003240f, 0.002115f, -0.001371f, -0.000545f, -0.008767f, 0.010282f, 0.003148f, 0.001895f, 0.002729f, -0.002054f, -0.002282f, 0.002591f, 0.009847f, 0.004214f, -0.001937f, -0.000753f, -0.000286f, -0.002263f, 0.000206f, -0.001656f, -0.000913f, 0.000132f, 0.005559f, 0.000663f, -0.004346f, 0.003183f, -0.004656f, 0.013589f, -0.008261f, 0.001015f, -0.000142f, -0.010134f, -0.001549f, 0.004449f, -0.005701f, -0.002556f, -0.001859f, 0.006763f, -0.003683f, -0.002595f, -0.000416f, 0.000778f, 0.001455f, -0.001002f, -0.003304f, -0.007888f, 0.001485f, -0.004108f, -0.005891f, 0.001408f, 0.002223f, -0.000433f, 0.001597f, 0.003864f, 0.003939f, -0.000562f, 0.001468f, 0.000667f, 0.005101f, -0.005700f, -0.005621f, 0.005660f, 0.005951f, 0.011384f, -0.015779f, 0.002891f, 0.011378f, 0.019101f, -0.001546f, 0.010481f, 0.000114f, 0.009453f, 0.003017f, 0.014837f, 0.000263f, -0.005674f, 0.011002f, 0.014182f, 0.014631f, 0.007636f, + 0.002839f, -0.006396f, -0.003946f, 0.000716f, 0.007741f, -0.004329f, 0.003901f, 0.000194f, 0.008721f, -0.004644f, 0.000338f, 0.001329f, -0.009168f, -0.006373f, -0.002297f, -0.010887f, 0.003000f, -0.003602f, 0.000482f, -0.002125f, -0.007892f, 0.005835f, 0.010659f, -0.002849f, 0.001384f, 0.000155f, -0.001035f, 0.009920f, -0.012411f, -0.000839f, 0.005959f, 0.000626f, 0.002305f, -0.003951f, -0.010164f, -0.003599f, 0.004789f, 0.004080f, 0.006116f, -0.001869f, 0.000818f, -0.000847f, 0.002826f, -0.002779f, 0.011935f, -0.000676f, -0.000294f, -0.008428f, 0.001736f, -0.006404f, -0.003282f, 0.003223f, 0.005732f, 0.010206f, 0.001461f, 0.009584f, 0.012896f, 0.021006f, 0.002780f, 0.010485f, -0.003806f, 0.006255f, 0.008084f, -0.002426f, -0.006490f, 0.011065f, 0.018970f, -0.003640f, 0.002123f, 0.007422f, -0.009051f, 0.005746f, 0.008132f, -0.016474f, 0.004710f, 0.001729f, -0.003671f, 0.000120f, -0.017192f, 0.000829f, 0.004916f, -0.008073f, 0.001611f, 0.000432f, 0.011162f, 0.008049f, -0.004034f, -0.001022f, -0.000919f, -0.011585f, -0.007756f, 0.001469f, 0.004909f, 0.001249f, 0.005453f, -0.007570f, + 0.001368f, 0.004083f, 0.001016f, -0.006973f, -0.005028f, -0.001367f, 0.002759f, 0.006054f, 0.006296f, 0.004263f, 0.007330f, 0.007139f, -0.007379f, -0.002081f, 0.000681f, 0.010067f, -0.001083f, 0.007324f, -0.004165f, -0.004439f, -0.000984f, -0.008424f, -0.003505f, 0.002183f, 0.005736f, -0.007079f, 0.008026f, -0.001620f, -0.001403f, -0.000960f, -0.002059f, -0.003217f, 0.002602f, 0.006383f, 0.003481f, 0.010401f, -0.011014f, -0.002715f, -0.002016f, -0.006023f, 0.002154f, 0.012538f, 0.016802f, 0.010345f, -0.004714f, 0.007751f, -0.004898f, -0.002659f, -0.015100f, -0.011336f, 0.004899f, 0.011620f, 0.010607f, 0.011838f, 0.002153f, 0.000981f, 0.006698f, -0.009118f, 0.009120f, 0.008082f, 0.000294f, 0.006992f, 0.016615f, 0.011948f, 0.002820f, -0.011888f, -0.000078f, 0.004472f, 0.002203f, 0.002377f, -0.013861f, 0.003569f, 0.002017f, 0.009336f, 0.009451f, -0.002757f, 0.005898f, -0.004467f, -0.005832f, 0.007577f, 0.003610f, -0.012479f, -0.012647f, -0.004958f, -0.007333f, -0.004714f, -0.005939f, -0.014461f, -0.013952f, -0.000836f, 0.004307f, 0.000301f, -0.001970f, -0.009600f, 0.000764f, 0.012273f, + -0.003915f, -0.003325f, 0.003867f, 0.000419f, 0.007961f, 0.004782f, 0.003744f, -0.005033f, -0.007495f, 0.013291f, 0.005152f, -0.004484f, 0.007710f, -0.000404f, 0.005890f, -0.004676f, 0.000561f, -0.023734f, -0.013996f, -0.004360f, 0.004490f, -0.009770f, 0.002976f, -0.002657f, 0.006827f, -0.001634f, -0.013304f, -0.010548f, 0.009194f, 0.007562f, 0.019024f, 0.016840f, -0.002557f, 0.012198f, -0.018296f, -0.002931f, 0.014219f, 0.004336f, 0.003298f, -0.001819f, -0.005976f, -0.002725f, 0.001968f, -0.001563f, -0.000554f, 0.007273f, -0.008968f, 0.002085f, 0.003262f, -0.000123f, 0.005665f, -0.006063f, -0.005050f, 0.003371f, -0.003927f, 0.005187f, -0.010021f, 0.001800f, -0.006018f, -0.002218f, -0.006703f, -0.004853f, -0.007614f, -0.011115f, 0.006934f, 0.000131f, 0.011818f, -0.010818f, -0.009448f, 0.000176f, 0.002273f, -0.001014f, -0.002257f, 0.001100f, 0.007132f, 0.003768f, 0.001554f, -0.004448f, -0.004659f, -0.002187f, -0.008784f, 0.001951f, -0.002233f, 0.001680f, -0.000342f, -0.008722f, -0.000690f, 0.000205f, -0.009893f, 0.001516f, -0.001619f, 0.002912f, -0.001131f, -0.007970f, 0.008048f, -0.012487f, + 0.004950f, -0.013994f, -0.002701f, 0.000961f, -0.010754f, 0.010163f, 0.007324f, -0.020925f, -0.002383f, 0.003802f, -0.002204f, -0.009028f, -0.012673f, 0.002791f, -0.006514f, -0.010108f, -0.005369f, 0.006345f, 0.005152f, 0.015233f, 0.019243f, -0.001487f, 0.017156f, -0.010498f, 0.006557f, 0.007811f, -0.001871f, 0.007694f, -0.004625f, 0.000365f, -0.001479f, -0.003395f, -0.002218f, -0.003826f, 0.014181f, -0.000615f, -0.011214f, -0.002389f, 0.006899f, 0.004731f, 0.005429f, 0.001367f, -0.005474f, 0.010836f, 0.021236f, 0.001563f, 0.001757f, 0.001487f, -0.002048f, 0.003654f, -0.001900f, 0.012607f, -0.009915f, 0.012079f, 0.007744f, -0.007264f, 0.003392f, 0.007980f, 0.004814f, -0.008723f, -0.010220f, -0.018978f, -0.003599f, -0.001483f, 0.002030f, 0.007833f, -0.002185f, 0.005274f, -0.001927f, -0.004657f, -0.005238f, 0.010492f, -0.002065f, 0.011136f, -0.014188f, -0.000266f, 0.006067f, 0.001973f, 0.000720f, 0.007000f, 0.022276f, 0.025212f, -0.006305f, -0.001184f, 0.005796f, -0.004512f, 0.017036f, 0.015650f, -0.009940f, 0.015302f, 0.012847f, 0.004140f, 0.007551f, 0.005784f, 0.003573f, -0.002156f, + 0.001385f, 0.001362f, -0.008615f, -0.011597f, 0.003002f, -0.003863f, 0.000014f, 0.000989f, -0.009408f, 0.008710f, 0.019408f, -0.001544f, -0.011512f, 0.017907f, 0.002344f, -0.000430f, 0.007435f, -0.004362f, -0.005666f, 0.001664f, -0.007130f, 0.001713f, 0.019227f, 0.007099f, -0.000222f, 0.005689f, 0.010374f, 0.025965f, -0.004583f, 0.010448f, -0.002496f, -0.013175f, 0.007591f, -0.000690f, -0.004145f, 0.003903f, 0.016450f, 0.002774f, 0.002707f, -0.001816f, 0.006401f, 0.022450f, 0.010499f, 0.001299f, 0.002124f, 0.004549f, -0.007281f, 0.010443f, -0.003520f, -0.025825f, 0.002571f, -0.004652f, 0.014068f, 0.014699f, 0.007154f, 0.000381f, -0.027962f, -0.004400f, -0.011206f, -0.015699f, -0.002715f, -0.011512f, 0.001649f, 0.007826f, -0.012506f, 0.013050f, -0.029063f, 0.003195f, -0.007777f, -0.017203f, -0.020443f, 0.021475f, 0.012449f, 0.000367f, -0.017970f, -0.013609f, 0.008347f, -0.025953f, -0.016198f, 0.004838f, 0.006486f, 0.024207f, -0.002075f, 0.001048f, 0.019932f, -0.012188f, 0.019603f, 0.005264f, 0.007953f, -0.004626f, -0.009861f, -0.002333f, 0.016531f, -0.009293f, 0.002518f, 0.018207f, + -0.005807f, -0.006696f, -0.008096f, -0.012448f, -0.008670f, -0.008428f, -0.014332f, -0.002922f, 0.005861f, -0.006346f, 0.004601f, -0.006119f, -0.006779f, 0.009771f, -0.012713f, 0.007380f, -0.010652f, -0.015929f, 0.001834f, 0.011135f, 0.001882f, -0.004808f, 0.005904f, -0.011088f, -0.003986f, -0.015129f, -0.023798f, -0.013028f, 0.004441f, -0.008964f, 0.029164f, 0.009602f, -0.018861f, -0.011908f, -0.001765f, 0.031921f, 0.020074f, 0.021975f, -0.006744f, -0.030232f, -0.002905f, -0.015295f, 0.003463f, 0.007187f, 0.016007f, -0.007352f, 0.006749f, -0.012216f, 0.001666f, -0.010734f, -0.028966f, -0.014995f, 0.010409f, -0.010034f, -0.023058f, -0.020869f, -0.020222f, -0.030468f, 0.003342f, -0.010450f, -0.023949f, -0.020771f, 0.003211f, 0.030002f, -0.004461f, -0.004626f, -0.010416f, -0.017672f, 0.003218f, -0.006847f, 0.001474f, -0.022139f, 0.000937f, -0.023081f, 0.002768f, -0.001610f, 0.012068f, 0.010019f, 0.009963f, 0.005651f, -0.001380f, 0.008949f, -0.006232f, 0.017337f, 0.004311f, 0.008893f, 0.004695f, -0.005350f, 0.005593f, 0.017433f, -0.002735f, 0.009824f, -0.002930f, 0.027260f, 0.003001f, 0.010352f, + 0.000839f, -0.015004f, -0.012096f, 0.000691f, -0.005868f, 0.003644f, -0.004428f, 0.009106f, 0.007469f, 0.010570f, -0.005383f, 0.006136f, -0.021513f, 0.011406f, 0.029068f, -0.015209f, -0.044123f, -0.007275f, -0.015382f, -0.023173f, 0.012542f, -0.044254f, -0.005694f, -0.015678f, -0.008512f, 0.012906f, -0.014017f, 0.018875f, 0.016278f, 0.002724f, 0.014711f, 0.001461f, 0.007861f, -0.011363f, -0.020213f, -0.022238f, -0.012363f, -0.020340f, 0.016258f, 0.021272f, -0.000661f, -0.010792f, 0.006333f, 0.006364f, -0.007448f, 0.001876f, -0.034738f, -0.018182f, 0.016645f, -0.008553f, 0.000844f, 0.016410f, -0.001120f, 0.010341f, 0.008898f, -0.004086f, 0.010153f, 0.000397f, -0.018187f, 0.021353f, -0.014088f, 0.001591f, 0.001728f, -0.010848f, 0.008271f, 0.013083f, -0.006640f, 0.014904f, 0.002327f, -0.000317f, -0.012159f, 0.016865f, 0.000780f, -0.012044f, -0.003342f, -0.024973f, -0.009848f, -0.013723f, -0.000705f, 0.019103f, 0.006479f, -0.000316f, 0.001808f, -0.015241f, 0.005549f, 0.014775f, -0.014828f, 0.003208f, 0.028724f, -0.007781f, 0.006580f, 0.007536f, 0.077761f, 0.018371f, -0.011109f, -0.014856f, + -0.002315f, -0.004046f, 0.013168f, -0.002135f, 0.011038f, 0.023288f, -0.009704f, 0.002152f, -0.015439f, -0.009038f, 0.004078f, -0.001340f, 0.010818f, -0.020907f, -0.013524f, 0.011560f, 0.021498f, 0.015773f, -0.001242f, 0.006462f, -0.005940f, -0.012000f, 0.009093f, 0.018568f, 0.017633f, 0.023192f, -0.018529f, -0.002895f, -0.010782f, -0.021003f, -0.003206f, 0.002649f, -0.005251f, 0.011848f, 0.013313f, 0.001556f, 0.006462f, -0.002381f, -0.024055f, -0.011268f, -0.032053f, -0.030583f, -0.009559f, 0.012692f, -0.004792f, -0.012399f, 0.027123f, 0.012283f, -0.001038f, -0.023307f, -0.001020f, -0.005590f, -0.017960f, 0.002608f, -0.007991f, -0.009248f, -0.024736f, -0.000503f, -0.008704f, -0.024737f, 0.000783f, 0.024441f, -0.013199f, -0.003114f, 0.009214f, -0.007734f, 0.006663f, -0.006799f, 0.020127f, 0.000968f, -0.011636f, -0.015237f, 0.018510f, -0.063125f, -0.034675f, 0.032133f, -0.007796f, 0.001220f, -0.016347f, 0.013477f, -0.005167f, -0.024975f, 0.012260f, 0.032399f, 0.004973f, -0.030195f, 0.008905f, -0.007377f, -0.006038f, 0.018171f, 0.020542f, -0.003755f, -0.003464f, 0.040928f, 0.009954f, -0.007157f, + -0.025287f, 0.010296f, -0.036528f, -0.031647f, -0.027612f, 0.010208f, -0.004862f, -0.004228f, 0.024564f, 0.008387f, -0.024130f, -0.021763f, 0.005696f, 0.022548f, 0.008494f, -0.004048f, 0.001652f, 0.014543f, -0.011225f, -0.027285f, 0.034025f, -0.011349f, 0.003701f, 0.012196f, 0.002264f, 0.003199f, 0.034875f, -0.000917f, 0.022221f, -0.000559f, -0.023249f, 0.001771f, 0.004980f, -0.006474f, 0.004407f, 0.014121f, -0.011848f, -0.005329f, 0.003942f, -0.047857f, 0.012086f, 0.007522f, -0.000405f, 0.009066f, 0.008483f, -0.019177f, 0.008033f, 0.060992f, 0.027287f, 0.013199f, 0.005168f, 0.012817f, -0.045683f, -0.042635f, 0.030248f, 0.030489f, 0.011075f, 0.016444f, -0.010617f, 0.049240f, -0.004883f, 0.018286f, 0.014096f, -0.023895f, -0.008420f, -0.011431f, 0.030181f, -0.018053f, -0.004282f, 0.017610f, 0.016549f, -0.017706f, -0.003459f, -0.049844f, 0.010376f, -0.006097f, -0.013231f, 0.003641f, 0.002563f, 0.003044f, 0.005778f, 0.016092f, 0.001963f, 0.017711f, 0.003479f, 0.008396f, -0.003376f, -0.016302f, -0.015531f, 0.031352f, -0.009928f, -0.023395f, -0.017950f, -0.009126f, -0.009207f, 0.013484f, + 0.010035f, 0.010362f, 0.015568f, 0.004007f, -0.015864f, 0.009827f, -0.026812f, -0.009391f, -0.023187f, 0.017042f, -0.028281f, -0.021462f, -0.004638f, -0.009976f, 0.010720f, 0.020348f, -0.014179f, 0.019317f, 0.033219f, 0.015955f, 0.032150f, -0.012123f, 0.042575f, 0.004385f, 0.036507f, 0.020311f, 0.006627f, -0.017231f, -0.043431f, -0.029766f, -0.022313f, -0.012727f, -0.010301f, 0.023467f, 0.011646f, -0.013003f, 0.038953f, 0.004662f, -0.038390f, 0.047961f, 0.003032f, -0.020072f, 0.016688f, -0.038931f, -0.007640f, -0.024686f, -0.007913f, -0.004147f, -0.007762f, -0.017560f, 0.004910f, -0.033580f, -0.013165f, -0.011926f, -0.045741f, 0.005837f, -0.033164f, -0.023267f, -0.037181f, 0.007748f, -0.028031f, -0.008181f, -0.009249f, 0.000589f, 0.014213f, -0.011120f, 0.020008f, 0.001307f, 0.026548f, -0.005881f, 0.023142f, 0.029214f, -0.034544f, -0.000267f, 0.009563f, 0.021494f, 0.001115f, 0.025781f, 0.008890f, 0.024848f, -0.000136f, -0.018640f, -0.011401f, -0.001649f, 0.016445f, -0.003538f, -0.006769f, -0.001503f, 0.030173f, 0.018702f, -0.006296f, -0.024331f, 0.008979f, 0.013324f, 0.010439f, 0.026070f, + -0.034016f, -0.026142f, -0.006208f, 0.002180f, -0.008496f, -0.000124f, -0.008480f, -0.022466f, 0.063372f, -0.031071f, -0.033133f, 0.025531f, 0.017574f, 0.005861f, -0.009146f, -0.009436f, 0.030097f, 0.023872f, 0.035780f, -0.011156f, -0.009959f, -0.049289f, 0.057640f, 0.027928f, -0.078742f, -0.040550f, 0.024152f, 0.035860f, 0.034095f, -0.021195f, -0.018964f, 0.043462f, 0.009257f, 0.010975f, 0.028527f, 0.024982f, -0.043801f, 0.014567f, 0.017447f, -0.001817f, 0.019637f, 0.005362f, -0.006217f, 0.005712f, -0.014697f, 0.073469f, 0.018170f, 0.010969f, -0.002631f, -0.007239f, -0.005483f, -0.039081f, 0.007178f, 0.013766f, -0.010249f, -0.011532f, -0.066688f, -0.029637f, 0.013172f, 0.013508f, -0.022338f, -0.019123f, -0.003672f, -0.029272f, 0.012303f, 0.013944f, -0.005311f, 0.015517f, 0.025262f, 0.003817f, -0.002190f, -0.005690f, -0.014826f, -0.001736f, 0.001330f, -0.045676f, -0.007619f, 0.014658f, 0.028364f, -0.049191f, 0.010140f, 0.022715f, -0.006065f, -0.020528f, -0.024854f, 0.044695f, 0.035957f, 0.000255f, -0.029675f, -0.036627f, 0.023895f, -0.017772f, 0.007060f, -0.014913f, -0.011791f, 0.001504f, + 0.016477f, 0.030697f, -0.056973f, -0.076012f, -0.051581f, -0.068053f, 0.059361f, -0.039664f, 0.024404f, -0.007194f, -0.046517f, 0.007901f, -0.011991f, -0.018157f, -0.060616f, -0.056871f, -0.041176f, -0.016572f, 0.003104f, -0.033095f, -0.008519f, 0.008133f, 0.027420f, 0.001642f, -0.015526f, -0.000371f, -0.016657f, 0.024995f, -0.030993f, 0.043787f, 0.039054f, -0.009480f, -0.011121f, -0.052742f, -0.029552f, -0.032189f, 0.004849f, 0.006741f, -0.007515f, 0.042537f, 0.013233f, 0.034454f, 0.007885f, -0.004319f, -0.014696f, 0.031023f, 0.022625f, 0.009626f, -0.030289f, 0.016649f, -0.051950f, -0.006038f, -0.004535f, -0.035294f, -0.004680f, 0.000383f, 0.041697f, 0.026854f, 0.001955f, 0.018781f, 0.000499f, -0.039911f, 0.021716f, 0.005800f, 0.034883f, -0.018620f, -0.036583f, 0.023483f, -0.066380f, -0.074160f, -0.008223f, -0.046777f, 0.001750f, -0.034132f, 0.030964f, -0.024030f, -0.003883f, 0.007543f, 0.010807f, 0.039993f, 0.011805f, -0.016333f, 0.040678f, 0.014273f, -0.072478f, 0.013002f, -0.043968f, -0.001778f, 0.006945f, -0.004702f, 0.033988f, -0.009156f, 0.005200f, 0.010188f, 0.001907f, -0.021575f, + 0.034523f, -0.019388f, -0.003152f, -0.040480f, -0.001218f, 0.008381f, -0.007787f, -0.013398f, -0.020340f, -0.020526f, 0.052974f, 0.003468f, 0.026873f, -0.046919f, 0.004287f, 0.000691f, 0.015408f, 0.030071f, -0.034293f, 0.060182f, 0.083679f, -0.002596f, 0.007079f, -0.028340f, 0.012488f, 0.020986f, -0.017439f, 0.005453f, 0.014944f, 0.034108f, -0.002055f, 0.003096f, -0.011128f, -0.027526f, -0.043850f, 0.022946f, -0.032988f, -0.012692f, -0.021710f, 0.010144f, 0.028600f, 0.026597f, -0.005177f, 0.010111f, -0.057853f, 0.038536f, -0.005643f, 0.007813f, -0.013107f, 0.036492f, 0.094165f, 0.027529f, 0.068333f, 0.022448f, -0.072294f, 0.029302f, 0.019400f, -0.023436f, 0.004303f, 0.046805f, 0.001458f, 0.044808f, 0.038681f, -0.045644f, 0.024731f, -0.045673f, -0.031804f, -0.003956f, 0.092003f, 0.028899f, -0.042543f, 0.039906f, 0.024715f, -0.050625f, -0.023265f, -0.003102f, 0.051106f, 0.008045f, -0.048258f, -0.026322f, -0.002302f, -0.012628f, 0.027960f, 0.041918f, -0.015892f, 0.036909f, -0.024433f, -0.031500f, -0.002015f, 0.075644f, 0.006063f, -0.042876f, 0.023626f, -0.001679f, -0.005296f, 0.021424f, + -0.050092f, -0.042053f, -0.041315f, 0.029852f, -0.027449f, 0.009863f, 0.011449f, 0.045355f, 0.021133f, 0.046614f, 0.003770f, -0.001663f, 0.036553f, 0.069611f, 0.039976f, -0.068206f, 0.000215f, 0.006965f, -0.012805f, 0.013494f, 0.017856f, -0.052701f, -0.009032f, 0.010611f, 0.008332f, -0.063085f, -0.060099f, -0.033925f, -0.035465f, 0.061194f, -0.036839f, 0.027837f, -0.072741f, 0.052983f, 0.057397f, 0.017077f, 0.062611f, -0.063904f, -0.032448f, -0.016515f, -0.093924f, 0.053648f, 0.004643f, 0.033673f, 0.042201f, 0.043022f, 0.002688f, -0.000078f, 0.042031f, -0.005445f, -0.050967f, -0.051101f, 0.031326f, -0.057859f, 0.057450f, -0.015150f, 0.012350f, 0.058787f, 0.051384f, -0.024439f, 0.078442f, -0.043983f, 0.004919f, -0.045731f, 0.007547f, -0.014445f, 0.030912f, 0.012366f, -0.033643f, 0.032104f, 0.045947f, 0.069406f, -0.038824f, 0.016524f, 0.041597f, -0.054636f, 0.002932f, -0.020520f, -0.081801f, -0.032915f, 0.022461f, -0.042555f, 0.016718f, -0.035148f, -0.000140f, 0.058297f, -0.025337f, 0.026599f, 0.064906f, 0.048945f, 0.018413f, 0.088491f, -0.130493f, -0.020868f, 0.046054f, -0.000630f, + 0.028079f, -0.035901f, -0.068450f, 0.092468f, 0.002495f, -0.036922f, 0.023679f, 0.063230f, 0.143346f, 0.062746f, -0.025184f, 0.013250f, 0.007725f, 0.066864f, -0.058379f, -0.008424f, -0.026352f, -0.039202f, 0.058868f, -0.024615f, 0.076388f, -0.010146f, -0.053597f, 0.085170f, 0.130317f, -0.021038f, -0.037559f, -0.064366f, 0.017736f, 0.064715f, 0.016458f, -0.017161f, -0.038975f, 0.007086f, 0.013209f, -0.012294f, 0.013726f, -0.008999f, -0.017373f, -0.024164f, 0.022901f, 0.024743f, 0.001344f, 0.034478f, -0.032662f, 0.073909f, 0.061672f, 0.030285f, 0.000919f, 0.001349f, 0.014794f, -0.044053f, -0.031746f, -0.042866f, -0.016716f, -0.014247f, 0.028874f, 0.018182f, 0.046152f, -0.023773f, -0.000461f, -0.021572f, 0.052281f, 0.089045f, -0.016964f, -0.063630f, -0.033227f, -0.006480f, -0.075309f, 0.058658f, -0.103902f, 0.027309f, 0.052897f, 0.043240f, -0.040942f, 0.006387f, 0.056103f, -0.116217f, -0.043966f, 0.017531f, -0.001806f, -0.061291f, -0.037136f, -0.012177f, -0.010008f, 0.076930f, -0.046431f, 0.013003f, 0.074812f, 0.001023f, -0.023655f, 0.060213f, 0.045194f, -0.013963f, -0.038238f, -0.061017f, + 0.012649f, 0.116341f, 0.027070f, 0.059043f, -0.004060f, 0.004016f, -0.003521f, -0.015082f, 0.001239f, 0.004126f, 0.029724f, 0.008127f, -0.021588f, 0.018273f, -0.018729f, -0.023306f, -0.023605f, -0.000709f, 0.024878f, 0.003771f, 0.020164f, 0.018873f, 0.017673f, -0.017926f, -0.027837f, 0.007836f, -0.018854f, -0.051996f, -0.013586f, 0.009997f, -0.016216f, 0.057559f, -0.059503f, 0.048076f, -0.014237f, -0.001215f, 0.074969f, -0.013151f, -0.000405f, 0.094213f, -0.013056f, -0.040776f, 0.008802f, -0.035257f, -0.005744f, -0.033466f, 0.108778f, -0.032190f, 0.027865f, -0.027742f, -0.009243f, -0.016834f, 0.020214f, -0.029210f, -0.062746f, 0.026418f, -0.004438f, -0.075312f, 0.041550f, -0.021932f, 0.044648f, 0.088090f, -0.040448f, -0.004313f, 0.002540f, -0.016418f, -0.035326f, -0.026018f, -0.000010f, 0.122409f, 0.062075f, 0.128368f, -0.072053f, -0.018829f, 0.042241f, -0.040408f, 0.030469f, 0.131868f, 0.031058f, 0.018762f, -0.035202f, -0.033279f, 0.037485f, -0.020502f, 0.053099f, -0.009333f, -0.012735f, -0.016144f, -0.076538f, 0.017625f, 0.090719f, -0.048993f, 0.054537f, 0.047384f, -0.031709f, -0.010191f, + 0.037152f, -0.061652f, 0.029345f, -0.005320f, 0.044756f, 0.014410f, -0.039103f, -0.013413f, -0.077621f, -0.040443f, 0.034489f, 0.025601f, 0.057932f, 0.091199f, 0.008336f, -0.000064f, -0.081895f, -0.050653f, -0.049711f, -0.041197f, 0.019055f, -0.034592f, -0.011467f, -0.009507f, 0.021755f, -0.063402f, -0.012347f, 0.029452f, 0.013726f, 0.048075f, -0.009641f, -0.026832f, 0.047126f, -0.011955f, 0.027386f, -0.041800f, -0.027117f, -0.009384f, -0.017088f, 0.020897f, 0.031899f, 0.047487f, 0.009269f, -0.000510f, -0.041986f, -0.015534f, -0.026204f, 0.036988f, -0.035805f, -0.123567f, 0.001216f, 0.204683f, 0.180550f, 0.174039f, 0.070851f, -0.070460f, -0.102888f, -0.097684f, -0.091350f, -0.161897f, -0.119132f, -0.111811f, 0.086984f, 0.138860f, 0.109507f, 0.179972f, 0.145922f, 0.034225f, -0.008177f, -0.060313f, -0.124702f, -0.070532f, -0.130873f, -0.067204f, -0.044470f, 0.004063f, -0.018279f, 0.036020f, 0.054858f, 0.098217f, 0.058829f, 0.103132f, 0.075101f, 0.082830f, 0.005692f, -0.061073f, -0.029937f, 0.006380f, -0.071215f, -0.089593f, -0.122044f, -0.115549f, -0.084911f, -0.007356f, 0.059969f, 0.028366f, + 0.087293f, 0.066355f, 0.099727f, 0.093306f, 0.097020f, 0.116765f, 0.061337f, -0.002642f, -0.016061f, -0.066330f, -0.057072f, -0.189320f, -0.153931f, -0.118465f, -0.094695f, 0.019268f, -0.038538f, 0.011386f, 0.139271f, 0.174940f, 0.232987f, 0.153988f, 0.094754f, 0.071368f, 0.025433f, -0.070837f, -0.062369f, -0.099481f, -0.125293f, -0.075830f, -0.015180f, 0.002158f}, + {-0.010810f, -0.006811f, -0.000989f, -0.010200f, 0.009038f, -0.008200f, -0.009842f, 0.004319f, -0.002893f, -0.002232f, 0.002619f, -0.011627f, -0.002391f, 0.008406f, -0.005828f, -0.002075f, -0.009107f, 0.002601f, -0.006785f, -0.012347f, 0.005112f, 0.002238f, 0.004337f, -0.004922f, -0.005999f, 0.006689f, 0.001904f, 0.007574f, 0.007870f, -0.008489f, 0.007689f, -0.002331f, -0.002324f, 0.005349f, -0.001267f, 0.004841f, 0.008338f, 0.007809f, 0.001499f, 0.003256f, 0.003019f, -0.006985f, -0.003389f, -0.002675f, 0.001304f, 0.006007f, -0.011659f, -0.002812f, -0.000631f, -0.000836f, -0.005339f, 0.000862f, 0.004790f, -0.006163f, 0.004184f, -0.004878f, -0.011781f, 0.002388f, 0.002310f, 0.001453f, -0.004615f, -0.001428f, -0.003060f, 0.005490f, -0.001448f, -0.000283f, 0.000244f, 0.003818f, 0.001239f, 0.002341f, 0.003210f, -0.008379f, -0.004403f, 0.004322f, -0.001007f, -0.002042f, 0.002106f, -0.002408f, 0.008340f, 0.009250f, 0.005064f, -0.003652f, -0.013989f, -0.012945f, 0.004746f, 0.007354f, -0.002659f, 0.013777f, -0.002601f, 0.008205f, -0.009741f, -0.008699f, 0.003858f, 0.000308f, -0.002466f, 0.003622f, + 0.009049f, -0.003929f, 0.001332f, -0.005148f, -0.000420f, 0.000457f, 0.003767f, 0.003403f, 0.004701f, 0.000752f, 0.002841f, 0.010231f, -0.003847f, -0.004792f, -0.005064f, -0.009271f, 0.002779f, -0.001941f, 0.017081f, 0.003314f, -0.001159f, 0.001357f, 0.010416f, -0.000922f, -0.002116f, -0.002589f, -0.005904f, -0.001063f, 0.008053f, -0.001164f, 0.003428f, 0.008066f, -0.002360f, -0.000504f, -0.012714f, -0.007484f, -0.011571f, -0.002202f, -0.003231f, 0.001842f, 0.000832f, 0.001816f, 0.004395f, -0.002673f, 0.002250f, 0.000293f, 0.001288f, 0.001975f, -0.004000f, 0.004269f, -0.001055f, -0.004623f, -0.000211f, -0.004600f, -0.000944f, 0.000931f, 0.009658f, 0.022437f, 0.009002f, 0.005229f, 0.006364f, -0.013350f, -0.001457f, 0.005608f, -0.001696f, 0.002127f, -0.011987f, 0.011770f, 0.016190f, 0.002663f, 0.007284f, -0.003503f, -0.009333f, -0.014722f, -0.015899f, -0.010751f, 0.012769f, -0.012086f, -0.007511f, -0.010249f, 0.003339f, 0.008297f, 0.001682f, 0.001014f, 0.004799f, -0.000607f, 0.003065f, 0.010245f, -0.001367f, 0.008493f, -0.008128f, 0.007734f, 0.005569f, 0.004864f, -0.004238f, -0.013568f, + -0.002765f, 0.007537f, 0.004645f, -0.003904f, -0.000354f, 0.002503f, -0.000471f, -0.006638f, -0.001259f, 0.005327f, -0.001782f, 0.000439f, -0.003093f, -0.000885f, 0.000510f, 0.001654f, 0.009599f, 0.003777f, -0.004732f, 0.000624f, 0.000922f, -0.003422f, 0.001880f, -0.004901f, -0.000380f, 0.007467f, 0.002697f, 0.008393f, -0.005934f, -0.005541f, -0.002883f, -0.001635f, 0.004756f, 0.009482f, -0.005138f, -0.007429f, 0.009025f, 0.001366f, -0.003666f, 0.004103f, -0.000869f, 0.006591f, 0.002794f, -0.007439f, -0.007011f, -0.007976f, -0.001267f, -0.006522f, -0.013692f, -0.013056f, 0.013402f, -0.000339f, 0.002789f, -0.000152f, 0.008137f, -0.012163f, 0.017934f, 0.015913f, 0.000765f, 0.000783f, -0.000047f, 0.000401f, -0.001856f, 0.006176f, 0.004779f, 0.000310f, -0.010336f, 0.004345f, -0.003284f, 0.004826f, -0.001544f, 0.010806f, -0.002670f, -0.006459f, -0.003016f, -0.001829f, 0.003892f, -0.000191f, 0.006583f, -0.010961f, 0.005664f, 0.001754f, -0.006203f, 0.016905f, -0.002914f, -0.002589f, -0.000581f, -0.000421f, -0.004736f, -0.001613f, 0.008837f, 0.007281f, -0.016261f, -0.007711f, 0.007814f, 0.002158f, + -0.004160f, 0.013715f, 0.000137f, 0.002924f, 0.013276f, 0.005456f, 0.010286f, 0.002836f, -0.004647f, -0.005782f, -0.011352f, -0.010615f, 0.000801f, 0.005363f, 0.012431f, 0.000381f, -0.006629f, -0.018256f, -0.006335f, -0.008894f, 0.008300f, -0.006082f, 0.005396f, -0.006576f, -0.002694f, 0.015439f, 0.007572f, -0.010289f, 0.004694f, 0.014724f, 0.002171f, -0.005196f, -0.010351f, -0.012468f, -0.008527f, -0.012536f, 0.008306f, 0.001865f, 0.004568f, -0.002425f, -0.005670f, -0.005996f, -0.011032f, 0.000552f, -0.000357f, 0.002599f, -0.002708f, -0.010042f, 0.000138f, 0.010690f, -0.002403f, 0.000110f, -0.005371f, -0.010687f, -0.015840f, -0.001369f, 0.011335f, 0.004133f, 0.001141f, -0.005359f, 0.001393f, -0.008569f, -0.002881f, -0.006443f, 0.000738f, 0.001469f, -0.009854f, 0.011036f, -0.006308f, 0.014043f, 0.005188f, 0.001362f, -0.006500f, -0.003308f, 0.003459f, -0.000760f, 0.003250f, 0.007578f, 0.001354f, 0.003044f, -0.008525f, 0.004985f, -0.004400f, 0.012961f, 0.015733f, 0.007397f, 0.010481f, 0.005063f, -0.001891f, -0.011158f, -0.007463f, 0.000862f, 0.008149f, 0.007656f, 0.006170f, -0.014787f, + 0.002000f, -0.015809f, -0.000005f, 0.002344f, 0.001528f, 0.007030f, 0.000774f, 0.001056f, 0.027906f, -0.003565f, -0.012239f, -0.013339f, 0.014046f, 0.009294f, -0.010494f, 0.002471f, -0.011712f, -0.005127f, 0.000450f, 0.013233f, -0.016457f, 0.004724f, -0.000589f, 0.002537f, -0.001205f, 0.016809f, -0.008691f, 0.004663f, -0.002592f, -0.004589f, 0.002623f, -0.000932f, 0.005122f, -0.005303f, -0.004753f, -0.014445f, 0.002294f, -0.004898f, -0.003031f, 0.000976f, -0.005019f, 0.004050f, -0.008026f, -0.004989f, -0.014159f, -0.000630f, -0.012569f, -0.005542f, -0.014960f, 0.010902f, 0.002298f, -0.004866f, 0.009827f, -0.011660f, -0.000033f, -0.021985f, -0.001149f, 0.007119f, -0.000584f, 0.006003f, 0.013775f, -0.005313f, -0.001963f, 0.016694f, 0.007231f, 0.006013f, 0.010449f, -0.006221f, -0.016071f, -0.002642f, -0.009762f, 0.005736f, 0.015491f, -0.004590f, 0.003808f, -0.001871f, 0.007720f, 0.009018f, 0.003059f, -0.005244f, 0.003679f, 0.002437f, 0.016754f, -0.002478f, -0.003838f, -0.022758f, -0.006670f, 0.017264f, 0.016551f, 0.010863f, 0.008263f, 0.024517f, 0.001255f, -0.029158f, -0.007760f, -0.004830f, + -0.007362f, 0.015597f, -0.002772f, -0.005651f, 0.017834f, 0.002838f, -0.007823f, -0.002611f, 0.006893f, -0.006470f, -0.002920f, 0.002176f, -0.002715f, -0.010229f, -0.005030f, -0.000548f, -0.010272f, -0.004591f, -0.004593f, 0.006763f, -0.005106f, 0.013106f, 0.012339f, 0.001114f, 0.011681f, 0.008426f, -0.006105f, -0.002055f, -0.004812f, -0.019178f, 0.001475f, 0.003704f, -0.018765f, -0.002833f, -0.005878f, 0.006202f, 0.015683f, 0.002220f, -0.017622f, 0.002136f, -0.007421f, -0.011634f, 0.008065f, -0.003033f, -0.013174f, 0.005002f, 0.003277f, 0.012770f, -0.002593f, -0.002168f, 0.007956f, 0.010968f, 0.010488f, -0.013630f, 0.006289f, 0.011398f, -0.029639f, 0.012152f, -0.003035f, -0.007118f, -0.005932f, 0.004807f, -0.002651f, -0.018060f, -0.018708f, 0.001947f, 0.029588f, 0.007737f, -0.021295f, 0.004437f, 0.017574f, -0.012984f, 0.002349f, -0.003610f, 0.010475f, -0.000525f, 0.009647f, 0.025278f, 0.018766f, 0.011211f, -0.000454f, -0.002649f, -0.011948f, -0.013296f, 0.005007f, -0.033932f, -0.005376f, 0.015229f, 0.001641f, -0.002300f, -0.016142f, -0.006336f, -0.000875f, -0.001390f, -0.007996f, -0.017216f, + 0.018249f, -0.007122f, -0.004367f, -0.003739f, -0.015659f, -0.018004f, -0.000938f, -0.009223f, 0.000749f, 0.007338f, 0.005775f, 0.006038f, -0.014226f, -0.004493f, -0.007339f, -0.005262f, 0.021283f, -0.003362f, -0.010812f, -0.000395f, 0.027321f, -0.016203f, 0.003770f, 0.019511f, -0.000436f, -0.006084f, -0.011674f, 0.004901f, -0.000170f, 0.013422f, -0.009582f, 0.011004f, 0.008528f, 0.017809f, 0.007614f, 0.016739f, 0.025107f, 0.014630f, 0.002973f, -0.005716f, -0.008762f, -0.020897f, -0.005453f, 0.013103f, -0.027374f, -0.011830f, 0.025872f, -0.035557f, -0.005863f, 0.019277f, 0.025197f, -0.002911f, -0.024279f, 0.003070f, -0.008965f, 0.032807f, 0.015231f, -0.023123f, -0.014130f, -0.003837f, -0.013517f, -0.028988f, -0.013800f, -0.013029f, -0.009828f, -0.023510f, 0.012233f, 0.003840f, 0.014897f, -0.009106f, -0.003722f, -0.020675f, -0.001524f, -0.017958f, 0.002418f, -0.012002f, 0.003185f, 0.005990f, -0.026780f, -0.009174f, -0.009834f, -0.007435f, 0.006482f, 0.005687f, -0.008147f, 0.026836f, -0.001159f, -0.007169f, -0.004469f, 0.002508f, -0.005740f, -0.002304f, 0.010629f, 0.008494f, 0.011830f, 0.014765f, + 0.014644f, 0.001095f, 0.009816f, -0.004494f, 0.021657f, 0.022517f, -0.010682f, -0.005881f, 0.014494f, -0.000417f, -0.033372f, 0.001463f, -0.016384f, 0.010221f, 0.012205f, -0.018070f, -0.023761f, -0.010364f, -0.022989f, -0.030721f, 0.021468f, 0.003058f, 0.011626f, -0.016602f, -0.019035f, -0.024194f, -0.017824f, 0.008573f, -0.019462f, -0.015833f, 0.021815f, -0.004845f, 0.000162f, 0.006335f, 0.012061f, -0.009246f, -0.008577f, 0.004591f, -0.007063f, 0.004395f, -0.002100f, -0.010367f, -0.022420f, -0.032748f, 0.010130f, -0.023280f, -0.023114f, 0.002019f, -0.006834f, -0.000692f, -0.013474f, 0.006495f, 0.005367f, -0.026519f, -0.001655f, -0.005140f, -0.011799f, -0.014346f, 0.007557f, 0.002741f, 0.026246f, 0.004162f, -0.016512f, -0.000047f, 0.001360f, 0.012208f, 0.003511f, 0.025203f, -0.003335f, -0.025466f, 0.010015f, -0.004641f, 0.010597f, -0.014810f, 0.002065f, 0.009968f, -0.048131f, -0.021150f, 0.015024f, -0.000367f, -0.006557f, 0.008283f, -0.003981f, 0.030655f, -0.002697f, 0.019916f, 0.014542f, -0.022556f, -0.029378f, 0.003167f, -0.031957f, 0.015735f, 0.065740f, -0.016363f, -0.043632f, -0.004133f, + -0.018854f, 0.047416f, 0.004095f, 0.026528f, 0.014864f, -0.008374f, -0.020541f, -0.009479f, -0.022380f, -0.005894f, 0.032633f, -0.035637f, 0.002165f, -0.029020f, 0.008607f, 0.002563f, 0.014975f, 0.003479f, -0.013158f, -0.023360f, -0.026642f, -0.004817f, -0.026062f, -0.020788f, 0.004436f, 0.006676f, 0.021106f, -0.018320f, -0.038016f, -0.007694f, -0.012410f, 0.005257f, -0.017145f, -0.011802f, 0.006966f, -0.009103f, -0.014157f, -0.000304f, 0.003196f, -0.007130f, 0.039718f, -0.006910f, -0.004563f, 0.010621f, 0.011768f, -0.010233f, -0.002878f, 0.029389f, 0.025727f, 0.016819f, 0.031971f, 0.024710f, 0.002436f, 0.011303f, 0.019486f, -0.010873f, -0.009009f, 0.005345f, 0.015251f, 0.021868f, 0.011500f, 0.042482f, 0.008175f, 0.029553f, -0.003376f, -0.012539f, -0.005120f, 0.060524f, 0.015934f, -0.003080f, 0.000381f, -0.015002f, 0.014799f, -0.059750f, -0.018881f, 0.026347f, -0.004443f, -0.031692f, -0.025069f, -0.011658f, 0.033552f, 0.014196f, -0.022629f, 0.011478f, -0.030909f, -0.016073f, -0.001603f, -0.024290f, -0.027511f, 0.022747f, 0.016235f, -0.029069f, -0.006980f, 0.055051f, 0.015768f, -0.027823f, + -0.032557f, -0.001717f, 0.021274f, 0.000878f, 0.005677f, -0.042408f, 0.001273f, -0.006869f, -0.026322f, -0.019133f, -0.009133f, -0.025416f, -0.008422f, 0.004309f, 0.003414f, -0.026749f, -0.021799f, 0.000680f, 0.017863f, -0.002863f, 0.023097f, 0.031827f, -0.021505f, 0.018729f, 0.018716f, 0.004172f, 0.007346f, 0.023223f, 0.010831f, 0.013237f, 0.013489f, 0.011585f, -0.001964f, -0.005996f, 0.032485f, 0.043199f, 0.010680f, -0.013848f, 0.008789f, -0.009889f, -0.014260f, 0.025975f, -0.011007f, -0.028399f, -0.035667f, -0.017344f, -0.041967f, 0.018628f, -0.014728f, -0.012461f, 0.001531f, -0.011515f, -0.010879f, -0.025812f, 0.022000f, 0.012340f, -0.003318f, 0.013795f, 0.011138f, 0.029986f, 0.024019f, -0.050276f, -0.016045f, 0.054623f, -0.043103f, -0.013496f, -0.025959f, 0.038704f, 0.017927f, 0.017459f, 0.008026f, 0.005066f, 0.016128f, 0.041022f, 0.020231f, -0.019145f, -0.000018f, 0.000595f, -0.000838f, 0.015707f, 0.018897f, 0.001404f, 0.011299f, 0.009618f, -0.009291f, 0.012002f, 0.008048f, 0.024822f, -0.012126f, -0.025835f, -0.021062f, -0.017678f, 0.005147f, -0.003292f, 0.010068f, 0.009994f, + 0.011447f, 0.021460f, -0.009781f, 0.003460f, -0.009879f, -0.019134f, -0.007033f, 0.000372f, -0.020299f, 0.024474f, 0.031670f, -0.036049f, 0.011765f, -0.025643f, 0.019454f, -0.005921f, 0.007555f, -0.004833f, -0.019022f, -0.007083f, 0.021779f, -0.019827f, -0.005376f, 0.000779f, -0.035205f, -0.016938f, 0.007097f, -0.031276f, -0.002215f, 0.038243f, 0.021090f, -0.009620f, -0.010704f, 0.034437f, -0.002770f, -0.008145f, -0.028664f, 0.001104f, 0.002719f, -0.007874f, -0.000649f, -0.013501f, 0.004976f, -0.041424f, 0.037521f, -0.007848f, -0.013428f, -0.026351f, -0.029592f, -0.003340f, 0.035705f, -0.006828f, 0.009740f, -0.022518f, -0.013042f, -0.006558f, -0.021849f, -0.026444f, 0.023521f, -0.015134f, -0.012319f, 0.020675f, 0.020168f, -0.029493f, 0.009721f, 0.010498f, 0.024711f, 0.020265f, -0.008054f, -0.018899f, -0.012099f, -0.028776f, 0.030518f, 0.019870f, 0.009726f, 0.021574f, -0.023573f, 0.015111f, -0.004003f, 0.013785f, 0.015241f, -0.015658f, -0.001954f, 0.049914f, 0.041560f, -0.032695f, 0.011957f, 0.025586f, -0.021103f, 0.005584f, -0.048243f, 0.013494f, -0.026627f, 0.020483f, -0.015969f, -0.016962f, + -0.012770f, 0.055820f, 0.001909f, -0.016949f, 0.003573f, 0.018567f, 0.000926f, 0.011072f, -0.032143f, -0.003332f, 0.048658f, -0.000829f, -0.022325f, 0.007124f, -0.043339f, -0.022964f, -0.023448f, 0.019381f, -0.008844f, 0.029798f, 0.021297f, 0.038470f, -0.018213f, -0.003797f, -0.029929f, 0.024892f, 0.051120f, -0.017517f, -0.037210f, 0.001619f, -0.006114f, 0.058158f, -0.013016f, -0.025978f, 0.024876f, 0.010374f, 0.011479f, 0.020394f, 0.009572f, -0.078319f, 0.002095f, -0.007540f, 0.031457f, 0.050837f, -0.048578f, -0.000547f, 0.016900f, -0.026761f, -0.003119f, -0.071495f, -0.013815f, 0.032390f, -0.054893f, -0.036689f, -0.015636f, -0.025026f, 0.024334f, -0.016663f, -0.018448f, 0.027315f, 0.010959f, 0.007943f, 0.033010f, 0.000217f, -0.009036f, 0.018909f, 0.034551f, -0.035406f, -0.022058f, 0.045205f, 0.035324f, 0.007535f, 0.017272f, 0.007545f, -0.020201f, -0.035960f, 0.001773f, -0.004076f, -0.004663f, 0.005175f, -0.017271f, 0.008413f, -0.024541f, 0.005061f, 0.064380f, -0.035296f, -0.021201f, 0.026903f, 0.013548f, -0.019611f, 0.018140f, 0.016182f, 0.026699f, -0.061488f, -0.113271f, -0.052310f, + -0.007693f, 0.038665f, 0.003046f, 0.042674f, 0.039708f, -0.011787f, 0.006786f, -0.009488f, -0.021124f, -0.035298f, -0.020140f, -0.025393f, -0.014332f, 0.040723f, -0.051976f, -0.008855f, -0.043158f, -0.054050f, -0.008782f, -0.054521f, -0.043350f, 0.005788f, -0.010686f, -0.005923f, 0.010916f, 0.048592f, 0.004361f, -0.034486f, 0.003063f, -0.003709f, -0.009369f, -0.044877f, -0.001752f, 0.054615f, 0.006309f, -0.000388f, 0.023308f, 0.042571f, 0.029770f, 0.007904f, -0.015538f, 0.015210f, -0.012700f, -0.037966f, -0.068854f, 0.067737f, -0.006608f, 0.056498f, -0.002692f, 0.001237f, -0.017962f, -0.031896f, 0.061305f, -0.033145f, -0.024788f, -0.002537f, -0.040363f, -0.040221f, 0.036413f, 0.024634f, 0.015978f, -0.004531f, 0.020423f, -0.030437f, 0.015237f, -0.025393f, -0.030130f, -0.039506f, -0.024453f, -0.026985f, -0.045630f, 0.001422f, -0.043732f, -0.046723f, -0.010113f, -0.020337f, -0.055265f, -0.072036f, 0.006473f, -0.026109f, 0.011724f, -0.003482f, 0.025802f, 0.064093f, 0.001235f, 0.008280f, -0.033502f, -0.031973f, 0.026225f, 0.017550f, -0.024798f, 0.001941f, 0.016431f, -0.040298f, -0.034323f, -0.000467f, + 0.051493f, -0.044138f, -0.001334f, 0.002895f, 0.022650f, -0.037456f, 0.038947f, 0.023252f, 0.009633f, 0.000696f, -0.018998f, -0.043793f, -0.002430f, -0.009162f, 0.014499f, -0.022996f, -0.062413f, 0.051503f, -0.038398f, -0.014552f, -0.004531f, 0.050393f, -0.039065f, 0.018731f, -0.032456f, 0.020473f, -0.013054f, -0.043246f, 0.019397f, -0.055571f, -0.014670f, -0.014900f, 0.017853f, 0.048247f, -0.029223f, 0.018707f, 0.045234f, -0.036679f, 0.003987f, 0.012664f, 0.008737f, 0.015099f, -0.071800f, -0.019808f, -0.014647f, 0.025563f, 0.001681f, 0.000077f, 0.007599f, -0.013384f, 0.080247f, 0.009244f, 0.033445f, 0.094105f, -0.044285f, -0.023325f, -0.037172f, -0.012403f, 0.042220f, 0.004084f, 0.052214f, 0.015542f, -0.002468f, -0.018295f, 0.039422f, -0.023378f, 0.008636f, -0.015041f, 0.016094f, -0.024686f, 0.030093f, -0.013052f, -0.007383f, -0.015532f, 0.023175f, 0.017984f, -0.025932f, -0.004082f, 0.024529f, 0.009597f, -0.016593f, 0.003911f, -0.021267f, -0.067535f, 0.030377f, -0.034240f, -0.053649f, 0.035845f, 0.014896f, 0.038684f, -0.003152f, -0.032126f, -0.012812f, -0.006350f, 0.021214f, 0.031071f, + 0.031417f, 0.055082f, 0.051514f, -0.019136f, 0.007578f, -0.050334f, 0.001156f, -0.035446f, -0.069615f, -0.002807f, -0.056551f, 0.022936f, -0.044924f, -0.025537f, -0.029373f, -0.038055f, 0.005294f, -0.004999f, 0.004773f, -0.007264f, -0.004129f, 0.002140f, -0.072885f, 0.018174f, 0.012951f, 0.023702f, 0.037604f, 0.000432f, -0.056785f, 0.041573f, 0.001618f, -0.007411f, -0.004679f, 0.055450f, 0.110986f, -0.062219f, -0.045768f, -0.086802f, -0.168713f, -0.045062f, -0.015632f, 0.035436f, 0.025352f, -0.017640f, -0.030807f, 0.043846f, 0.059273f, 0.002010f, -0.000651f, -0.002663f, -0.043060f, -0.029647f, -0.029987f, -0.027669f, -0.045765f, -0.003793f, -0.010143f, -0.008968f, 0.034611f, -0.048091f, 0.037733f, 0.030377f, -0.008770f, 0.013959f, -0.000283f, -0.083235f, -0.055213f, -0.035263f, -0.027500f, -0.017013f, 0.007780f, 0.027024f, 0.011370f, 0.012705f, 0.078346f, 0.066105f, 0.017093f, -0.056102f, -0.025938f, -0.006468f, -0.025725f, -0.053706f, -0.122250f, -0.108042f, -0.045764f, -0.015839f, 0.005745f, 0.021983f, -0.084927f, -0.054498f, 0.044664f, 0.045810f, 0.061906f, -0.062281f, -0.068320f, 0.015712f, + -0.041896f, 0.094137f, -0.051553f, -0.013962f, -0.030727f, -0.025712f, 0.013238f, 0.018503f, -0.015447f, -0.055263f, 0.000754f, -0.025361f, -0.023328f, 0.023028f, 0.099007f, -0.031106f, 0.029826f, 0.001452f, -0.048528f, 0.009882f, -0.094848f, -0.017800f, 0.016522f, 0.004646f, -0.056612f, 0.034429f, 0.090200f, 0.068404f, -0.032264f, -0.055716f, -0.028318f, 0.009399f, 0.094786f, 0.016036f, -0.001035f, 0.003200f, 0.041843f, 0.049534f, 0.008559f, 0.038548f, 0.025230f, 0.057759f, -0.019455f, 0.009142f, 0.031180f, -0.029119f, -0.052724f, 0.030294f, 0.076509f, 0.020417f, 0.034857f, 0.006728f, 0.019657f, -0.104874f, 0.015514f, -0.001150f, 0.019774f, 0.108899f, 0.037931f, 0.017481f, -0.015429f, 0.050650f, -0.015944f, -0.018912f, 0.011423f, 0.032860f, 0.056687f, -0.016576f, 0.032849f, 0.010642f, 0.004571f, 0.028204f, 0.024966f, 0.002845f, -0.048217f, -0.021632f, 0.002101f, 0.083878f, 0.046409f, 0.046667f, 0.036779f, 0.042781f, -0.021592f, -0.094551f, -0.083717f, -0.131714f, -0.039593f, -0.015556f, 0.082616f, -0.002721f, -0.039821f, 0.010177f, -0.008414f, -0.031096f, -0.026652f, 0.005215f, + 0.042972f, 0.120220f, 0.052536f, 0.106579f, 0.054239f, 0.047571f, 0.043594f, -0.031163f, -0.027747f, -0.029844f, 0.011886f, 0.087253f, 0.026552f, -0.072434f, 0.029870f, -0.077946f, 0.037587f, -0.049421f, -0.012088f, -0.043426f, -0.048361f, -0.002236f, 0.004370f, -0.000745f, -0.060189f, 0.076072f, -0.017220f, 0.028438f, -0.075767f, 0.019538f, -0.019046f, -0.023134f, 0.036450f, -0.031847f, 0.074743f, 0.008513f, -0.032278f, 0.003321f, -0.024889f, -0.032159f, 0.019406f, -0.052830f, -0.013427f, 0.064352f, -0.016631f, 0.025625f, -0.006004f, -0.048609f, 0.049298f, -0.029403f, -0.110520f, 0.011792f, 0.005202f, -0.002287f, 0.008814f, -0.016976f, -0.024262f, -0.008448f, 0.045328f, -0.095416f, 0.051085f, -0.025071f, -0.016637f, 0.057124f, -0.040858f, 0.012987f, 0.021408f, -0.025140f, -0.045350f, 0.074078f, 0.068474f, 0.239865f, 0.096463f, -0.130651f, -0.061835f, -0.064082f, -0.100929f, 0.069811f, 0.214954f, 0.086076f, 0.040187f, -0.054362f, -0.015689f, -0.004017f, -0.003455f, 0.103039f, 0.069895f, 0.044616f, 0.154641f, -0.187167f, 0.010914f, 0.096817f, -0.024980f, 0.019267f, 0.100720f, 0.017047f, + -0.030775f, 0.054159f, -0.104609f, -0.207431f, -0.021570f, 0.019138f, -0.082070f, -0.010318f, 0.108399f, 0.017307f, 0.004136f, 0.040584f, -0.089886f, -0.179396f, -0.165245f, -0.075619f, 0.050730f, 0.103869f, 0.230870f, 0.056845f, -0.033487f, -0.031580f, -0.067326f, -0.142347f, -0.046789f, 0.099938f, 0.098456f, 0.105413f, 0.100334f, 0.063196f, 0.049221f, 0.012576f, 0.017622f, -0.093701f, -0.062522f, 0.009190f, 0.016874f, 0.041336f, 0.046845f, 0.133549f, 0.024827f, 0.074276f, -0.067746f, -0.060960f, -0.113595f, -0.031574f, -0.101335f, -0.030337f, -0.017932f, -0.168876f, -0.108813f, 0.063084f, 0.157281f, 0.188578f, 0.386010f, 0.238537f, 0.156610f, 0.142609f, 0.105489f, -0.020081f, -0.175348f, -0.186534f, -0.366127f, -0.384077f, -0.369630f, -0.234161f, -0.088894f, 0.077201f, 0.130377f, 0.227736f, 0.218279f, 0.155096f, 0.147727f, 0.196302f, 0.182768f, 0.167489f, 0.098581f, 0.069582f, 0.055219f, -0.014766f, -0.024982f, -0.232223f, -0.173334f, -0.209659f, -0.257117f, -0.112547f, -0.252446f, -0.202678f, -0.365410f, -0.317799f, -0.234369f, -0.158644f, -0.041070f, 0.165462f, 0.198463f, 0.167705f, + 0.175062f, 0.164033f, 0.314782f, 0.420574f, 0.368313f, 0.368331f, 0.316989f, 0.308045f, 0.217114f, 0.219710f, 0.019589f, -0.198398f, -0.384723f, -0.367764f, -0.538650f, -0.454921f, -0.650321f, -0.765442f, -0.691872f, -0.660337f, -0.425693f, -0.316882f, -0.023862f, 0.045248f, 0.198437f, 0.326576f, 0.541269f, 0.430700f, 0.647666f, 0.373119f, 0.059948f, -0.004552f} + }, + { + {0.028959f, -0.006870f, -0.003375f, -0.007745f, 0.000716f, -0.008862f, 0.000264f, 0.004151f, 0.002770f, -0.001291f, -0.005695f, 0.004395f, 0.006507f, 0.000378f, -0.003452f, -0.002837f, -0.002245f, -0.005481f, 0.002108f, 0.001239f, 0.001525f, 0.003855f, 0.007647f, 0.007502f, 0.001824f, 0.005909f, 0.003089f, -0.003230f, 0.001616f, 0.002575f, -0.000514f, 0.000930f, 0.000867f, -0.000832f, 0.003945f, -0.000259f, 0.007151f, 0.006219f, -0.006771f, 0.005167f, 0.001161f, 0.004229f, 0.000830f, -0.000682f, 0.000177f, 0.012845f, 0.000366f, 0.004223f, 0.001040f, 0.003630f, 0.005029f, 0.001014f, -0.003470f, 0.007507f, -0.009720f, -0.000838f, 0.002784f, 0.008117f, 0.002631f, -0.001232f, 0.006927f, -0.000753f, -0.005801f, 0.001895f, 0.001986f, 0.001326f, -0.001217f, 0.000797f, -0.000705f, -0.004356f, 0.001347f, -0.001782f, -0.002990f, 0.003374f, -0.005227f, 0.004424f, -0.009666f, -0.025763f, -0.002202f, -0.004082f, -0.003544f, 0.000429f, -0.004318f, 0.001659f, 0.002519f, 0.010628f, -0.003575f, -0.000365f, -0.009751f, 0.000784f, 0.009809f, 0.000752f, 0.007097f, -0.002017f, 0.002991f, -0.004017f, + -0.006136f, 0.000290f, 0.006764f, -0.000777f, -0.008407f, -0.000256f, 0.008211f, 0.002761f, -0.003457f, -0.002816f, -0.000335f, -0.001018f, -0.001855f, 0.000209f, -0.001321f, -0.002697f, -0.000292f, 0.001797f, 0.001215f, -0.000251f, -0.006351f, 0.009685f, 0.013106f, 0.000548f, 0.001604f, -0.005130f, -0.002897f, 0.001168f, -0.006703f, -0.007409f, 0.004612f, -0.005993f, 0.004563f, 0.005915f, 0.005862f, 0.002295f, -0.000761f, 0.001691f, 0.001314f, 0.004472f, -0.009251f, 0.000929f, -0.001104f, -0.006705f, -0.009123f, 0.000360f, 0.004683f, -0.003448f, -0.000437f, -0.001047f, -0.000647f, 0.006456f, 0.003139f, 0.000718f, 0.002280f, -0.002509f, -0.023296f, -0.005922f, 0.009540f, -0.001764f, -0.006939f, 0.002627f, -0.017193f, -0.007236f, -0.002202f, -0.003651f, -0.008734f, -0.010068f, 0.005514f, 0.007463f, 0.007168f, -0.009456f, -0.012872f, 0.000995f, -0.007405f, -0.014597f, 0.003546f, -0.001404f, 0.004306f, 0.015329f, -0.004904f, -0.002189f, -0.009698f, 0.013167f, 0.001359f, 0.006306f, 0.005013f, 0.010708f, 0.006005f, 0.002942f, -0.010867f, -0.001803f, -0.009976f, -0.003371f, 0.000718f, -0.004854f, + 0.003707f, 0.002357f, -0.004597f, -0.010076f, 0.006307f, 0.009358f, 0.003026f, -0.005295f, -0.007126f, -0.005136f, 0.002565f, -0.008855f, -0.010283f, -0.003570f, 0.005367f, -0.003490f, 0.002721f, 0.005985f, 0.004305f, -0.005506f, 0.009672f, 0.000235f, 0.008229f, -0.007446f, -0.005675f, -0.003967f, -0.003981f, 0.005023f, -0.003215f, -0.000333f, 0.009570f, 0.002740f, 0.000104f, -0.009845f, 0.002269f, -0.004407f, 0.006334f, -0.004681f, 0.005938f, 0.008562f, 0.003229f, -0.005115f, 0.003490f, -0.002331f, 0.002352f, 0.015941f, 0.009551f, -0.013230f, 0.008854f, -0.007232f, -0.003847f, -0.001823f, 0.000036f, 0.006824f, 0.000011f, 0.018587f, 0.005089f, -0.007009f, -0.004929f, -0.004523f, 0.012744f, 0.003140f, 0.012251f, 0.004185f, 0.008140f, 0.013150f, 0.014689f, 0.005769f, -0.002026f, -0.001445f, 0.001919f, -0.011975f, -0.011552f, 0.003625f, -0.008872f, 0.004875f, 0.001928f, -0.002835f, -0.001663f, 0.003572f, 0.012096f, -0.004058f, -0.004701f, -0.006392f, 0.015534f, -0.002113f, -0.020438f, -0.009897f, -0.008417f, -0.007194f, 0.007714f, 0.007997f, 0.006414f, 0.010517f, 0.004051f, 0.006642f, + -0.000895f, -0.000497f, -0.000927f, 0.010646f, 0.002746f, 0.006350f, -0.014582f, 0.001157f, -0.000090f, 0.001069f, 0.000147f, 0.006454f, 0.003422f, 0.002305f, -0.007585f, -0.005907f, 0.034471f, 0.008436f, 0.004709f, -0.003542f, -0.003081f, 0.004152f, 0.001816f, 0.010117f, 0.011752f, 0.000183f, 0.017608f, 0.008035f, -0.007077f, -0.005265f, -0.001102f, 0.009496f, -0.001670f, -0.003995f, 0.009019f, 0.002132f, 0.025678f, 0.007672f, 0.004570f, 0.001872f, -0.003183f, 0.002034f, 0.003341f, 0.005903f, -0.001838f, 0.000860f, 0.013477f, 0.002789f, 0.014899f, -0.006998f, -0.008122f, 0.005958f, 0.022691f, 0.007600f, 0.004984f, -0.001178f, -0.010755f, -0.003112f, 0.002492f, 0.001559f, -0.000902f, 0.001731f, -0.015004f, 0.001902f, -0.006989f, 0.006637f, 0.003825f, -0.004743f, 0.002590f, 0.005954f, 0.002657f, -0.005786f, -0.007650f, 0.002610f, 0.001689f, 0.001005f, -0.009669f, 0.003331f, -0.004272f, 0.006736f, -0.001673f, 0.002175f, 0.002713f, -0.000267f, 0.001020f, -0.002020f, -0.000111f, 0.021709f, 0.001067f, 0.008579f, -0.001306f, -0.004147f, 0.001196f, 0.002696f, -0.000442f, 0.004862f, + -0.007461f, -0.001669f, 0.008148f, -0.004330f, -0.011958f, -0.000434f, 0.020400f, -0.001770f, 0.016056f, 0.007715f, 0.022110f, 0.002229f, 0.002255f, 0.007533f, -0.005954f, -0.013502f, -0.016975f, 0.003574f, -0.008561f, 0.019692f, 0.011713f, 0.013749f, -0.002517f, -0.006466f, 0.001939f, 0.002646f, 0.006815f, 0.018316f, 0.002397f, 0.007272f, -0.008511f, 0.005394f, -0.006017f, 0.001931f, -0.003207f, 0.005543f, 0.010901f, 0.000756f, 0.010405f, 0.003056f, 0.005230f, -0.003758f, -0.002455f, 0.013022f, -0.003200f, -0.004291f, 0.010425f, -0.007098f, -0.000590f, 0.000581f, -0.004577f, -0.006990f, 0.004576f, -0.007919f, -0.001376f, -0.009881f, -0.018945f, -0.003199f, -0.002954f, -0.001627f, -0.019771f, -0.008697f, -0.006120f, -0.006334f, 0.007268f, 0.018093f, -0.005072f, 0.004902f, 0.010009f, -0.004161f, 0.001821f, 0.000471f, 0.001207f, -0.007899f, 0.008344f, -0.025888f, 0.002559f, 0.013355f, 0.007563f, -0.014696f, -0.000747f, 0.000290f, 0.003703f, 0.004857f, -0.000506f, -0.011547f, -0.010369f, 0.001250f, 0.018393f, 0.008186f, 0.011021f, 0.017782f, -0.012040f, 0.012558f, 0.024306f, -0.002657f, + 0.005681f, -0.014087f, 0.004936f, 0.004452f, -0.011449f, -0.006774f, -0.002287f, 0.005048f, -0.011589f, -0.016091f, 0.003206f, 0.001202f, -0.013165f, 0.000541f, 0.004426f, -0.003266f, 0.028680f, -0.002171f, -0.020000f, -0.001938f, 0.007149f, 0.015470f, 0.006080f, 0.006613f, -0.012792f, 0.002988f, 0.004227f, -0.012139f, -0.000631f, -0.002568f, 0.019893f, 0.011500f, -0.003185f, -0.007403f, -0.015238f, 0.005994f, 0.006213f, -0.009656f, -0.000257f, 0.003068f, 0.006033f, 0.005563f, -0.007782f, -0.000797f, -0.001699f, 0.018003f, -0.015610f, 0.001397f, -0.004090f, 0.016249f, -0.001236f, -0.004450f, -0.007034f, 0.001955f, -0.007164f, -0.016113f, 0.009381f, 0.009189f, 0.002794f, -0.006124f, 0.001503f, 0.004615f, 0.029608f, 0.020251f, 0.014586f, 0.021471f, 0.008233f, -0.001393f, 0.002721f, 0.008234f, -0.021503f, 0.011350f, 0.000057f, 0.012184f, -0.008808f, -0.003851f, -0.013922f, 0.004387f, 0.023897f, -0.023077f, -0.015182f, -0.024549f, 0.012517f, -0.005178f, 0.000621f, -0.010858f, 0.001312f, -0.003683f, -0.011567f, 0.004952f, 0.005472f, -0.017223f, -0.002542f, 0.003849f, -0.004017f, 0.010055f, + -0.025920f, -0.011862f, 0.026411f, 0.003330f, -0.000479f, -0.001922f, 0.000946f, -0.012723f, -0.014230f, 0.001577f, -0.020694f, -0.004038f, 0.002186f, 0.006336f, -0.008804f, -0.001261f, 0.025924f, -0.000851f, 0.009230f, 0.020002f, -0.017646f, -0.005367f, 0.004445f, 0.005391f, 0.003722f, -0.004629f, -0.012454f, 0.015466f, -0.001277f, -0.012849f, 0.010368f, -0.001787f, 0.002698f, 0.004219f, -0.007067f, -0.004703f, -0.003080f, -0.049047f, -0.028291f, 0.023133f, -0.009272f, -0.009854f, 0.013000f, 0.012578f, -0.021812f, -0.027914f, -0.009743f, -0.009444f, -0.011310f, -0.001098f, -0.020234f, -0.013356f, 0.006763f, 0.001684f, -0.026989f, -0.028337f, -0.016807f, -0.007056f, -0.001849f, 0.015996f, -0.001415f, -0.009906f, 0.007933f, -0.023315f, 0.000473f, -0.000051f, 0.000813f, 0.009633f, 0.004491f, -0.016608f, -0.013505f, 0.011840f, 0.003631f, 0.040841f, 0.009665f, -0.011945f, 0.001780f, 0.002575f, 0.000439f, 0.011784f, 0.002089f, 0.005729f, -0.003927f, -0.007312f, 0.002793f, -0.021349f, -0.003979f, -0.008454f, -0.011698f, 0.004153f, -0.017691f, 0.022700f, -0.002181f, 0.010451f, 0.015768f, 0.006156f, + 0.008795f, 0.000741f, -0.008878f, 0.001374f, -0.000148f, -0.010341f, 0.017201f, -0.004642f, 0.029854f, 0.001084f, 0.001357f, 0.003416f, -0.004774f, -0.013102f, 0.008211f, -0.009773f, 0.000393f, 0.018140f, 0.011870f, 0.035082f, -0.018829f, 0.015759f, 0.008972f, 0.011267f, -0.003507f, -0.021895f, 0.004574f, -0.007109f, -0.017068f, 0.036129f, -0.001010f, -0.012457f, -0.035809f, 0.021102f, 0.008026f, -0.002368f, -0.012384f, -0.018182f, 0.002026f, 0.036574f, 0.015941f, -0.003546f, -0.002250f, -0.018635f, -0.011942f, 0.009026f, 0.006452f, -0.015102f, -0.007609f, 0.011274f, 0.004856f, -0.002790f, 0.013048f, 0.015538f, 0.004262f, 0.021195f, 0.028122f, 0.013819f, -0.004719f, 0.003456f, 0.003600f, 0.001924f, 0.015329f, -0.022310f, 0.022202f, -0.004038f, -0.009182f, -0.018702f, 0.001484f, 0.010909f, 0.010951f, -0.021746f, 0.005533f, 0.012029f, 0.003687f, -0.016719f, -0.028151f, -0.030009f, 0.008502f, 0.008633f, 0.003437f, -0.013820f, 0.000084f, 0.017910f, -0.008330f, -0.019957f, -0.029615f, -0.000689f, 0.007750f, -0.027564f, 0.010580f, 0.018614f, -0.008579f, 0.012913f, 0.008159f, 0.043134f, + 0.030569f, 0.005257f, -0.007625f, -0.006197f, -0.004972f, -0.032016f, -0.011131f, -0.001898f, 0.020692f, -0.015579f, -0.006702f, -0.008139f, 0.001456f, 0.030571f, -0.023927f, -0.008344f, -0.000331f, 0.013429f, -0.004210f, -0.020193f, -0.029949f, 0.009319f, -0.020424f, -0.011571f, -0.012419f, -0.016257f, 0.005414f, -0.026100f, -0.010930f, 0.019582f, 0.032995f, -0.000475f, -0.019384f, -0.019961f, 0.030417f, -0.005360f, -0.015397f, 0.028906f, 0.001610f, -0.000233f, 0.001915f, -0.035996f, 0.014322f, -0.014773f, 0.012813f, 0.009056f, -0.022505f, -0.004875f, -0.022881f, 0.006622f, -0.022223f, -0.006360f, 0.009809f, 0.010267f, -0.007268f, 0.005140f, -0.027201f, 0.016122f, -0.001953f, 0.010021f, 0.010946f, 0.004850f, -0.006015f, -0.008839f, 0.027378f, -0.022141f, 0.013578f, -0.008015f, -0.023295f, -0.017574f, -0.001490f, 0.020914f, -0.013701f, 0.007804f, 0.004983f, -0.010543f, 0.011465f, -0.002816f, -0.005679f, 0.018644f, 0.001964f, -0.010303f, -0.027818f, -0.000258f, -0.035769f, 0.007068f, 0.001600f, 0.017926f, -0.015207f, -0.002178f, 0.007382f, 0.008483f, 0.008239f, -0.022198f, 0.031271f, 0.024325f, + 0.002663f, 0.018221f, -0.009440f, -0.032152f, 0.006109f, -0.013014f, -0.017256f, 0.016501f, 0.036300f, 0.007536f, -0.012341f, -0.012974f, -0.032435f, 0.000874f, -0.000507f, 0.047760f, -0.020472f, 0.000009f, -0.000626f, -0.000715f, -0.030395f, -0.031260f, 0.023131f, 0.001640f, 0.012151f, -0.003499f, -0.038464f, -0.020261f, 0.000524f, -0.005516f, -0.010101f, -0.009834f, 0.021136f, -0.004543f, 0.012738f, -0.016178f, 0.030222f, -0.038573f, 0.016395f, 0.020527f, 0.009017f, 0.010970f, 0.006558f, 0.031062f, 0.012424f, -0.002021f, 0.002915f, 0.000436f, 0.026468f, 0.045957f, -0.009677f, 0.003937f, -0.018456f, 0.019699f, 0.024710f, -0.019499f, -0.002013f, -0.039201f, -0.005006f, -0.049929f, -0.024570f, 0.018732f, -0.019443f, -0.044438f, 0.004813f, -0.024233f, 0.001850f, 0.000261f, -0.027318f, -0.027272f, 0.012872f, 0.025247f, 0.008595f, -0.030513f, 0.015177f, -0.034233f, -0.010984f, -0.012902f, 0.011421f, -0.014311f, -0.005442f, 0.015791f, 0.003664f, -0.011498f, -0.023108f, 0.025062f, 0.025581f, 0.031708f, 0.005124f, -0.003874f, 0.002088f, 0.009994f, -0.001455f, 0.012900f, -0.013476f, 0.017073f, + -0.005806f, 0.019736f, 0.016976f, 0.011886f, -0.004761f, 0.000738f, -0.029934f, 0.010495f, -0.006750f, 0.023296f, 0.005296f, -0.054099f, 0.009386f, 0.026795f, 0.036977f, -0.020490f, -0.027133f, 0.033994f, 0.016412f, 0.024039f, -0.041215f, 0.021288f, 0.054015f, 0.056235f, 0.004596f, 0.001893f, 0.032743f, -0.021276f, -0.028329f, 0.019586f, -0.031583f, 0.013193f, -0.014483f, -0.011462f, -0.006965f, -0.068080f, -0.040991f, -0.030933f, -0.007946f, -0.029945f, -0.054753f, 0.041641f, 0.005388f, 0.013364f, -0.006292f, 0.029217f, 0.001720f, -0.026643f, 0.020812f, 0.007167f, -0.008193f, -0.016450f, -0.011254f, 0.002903f, 0.008173f, 0.025772f, -0.014300f, 0.020027f, 0.007574f, 0.037147f, -0.053734f, -0.015585f, -0.007766f, 0.006114f, 0.023193f, 0.031444f, 0.008235f, -0.027195f, 0.018628f, 0.024553f, 0.022308f, -0.006895f, 0.008347f, 0.000649f, -0.008112f, -0.004559f, 0.002405f, 0.007365f, 0.003810f, 0.017961f, 0.003938f, -0.024595f, 0.023007f, -0.025452f, -0.030627f, 0.004076f, 0.023517f, -0.011839f, -0.007386f, 0.007504f, 0.011838f, 0.018870f, -0.010472f, 0.008611f, 0.044929f, -0.018284f, + -0.046382f, -0.061466f, -0.030198f, -0.041751f, 0.019253f, 0.035425f, 0.023322f, 0.008485f, 0.021838f, 0.012543f, 0.023934f, -0.020321f, 0.026789f, 0.014270f, 0.010398f, 0.028537f, 0.035170f, -0.011158f, 0.055715f, 0.005421f, 0.008747f, -0.011512f, 0.020263f, -0.063669f, -0.028098f, -0.043475f, -0.044902f, 0.017959f, -0.039157f, 0.038694f, 0.044006f, 0.002066f, 0.009642f, -0.006605f, 0.008178f, -0.041519f, 0.017300f, 0.046317f, -0.026093f, -0.053474f, 0.007314f, -0.019974f, -0.016878f, -0.052130f, 0.009334f, 0.019463f, 0.000090f, -0.006857f, 0.017164f, -0.029601f, -0.004616f, 0.019692f, -0.010320f, -0.026188f, 0.003633f, -0.012927f, 0.027824f, -0.017835f, -0.009547f, 0.025911f, 0.022789f, 0.047599f, 0.006879f, 0.011716f, -0.003682f, 0.012994f, 0.017584f, 0.029509f, -0.007619f, -0.000686f, -0.017280f, 0.038810f, -0.047618f, 0.052436f, 0.002942f, -0.020617f, 0.025666f, -0.018831f, -0.012624f, 0.048094f, -0.067795f, 0.011292f, -0.012887f, 0.013413f, -0.024878f, 0.012608f, 0.029882f, -0.014878f, 0.000369f, -0.008430f, -0.007739f, -0.008134f, 0.056384f, -0.061830f, -0.010448f, 0.068353f, + -0.027192f, -0.043339f, 0.004702f, -0.016753f, -0.013948f, -0.024613f, -0.029626f, 0.037565f, 0.016959f, 0.001918f, 0.018459f, 0.044604f, 0.027253f, -0.003575f, 0.009818f, 0.029844f, 0.039319f, -0.034809f, 0.016682f, 0.031935f, 0.014753f, 0.011425f, 0.045352f, 0.021103f, 0.010011f, -0.001780f, 0.020811f, -0.002654f, 0.023474f, 0.018406f, 0.011030f, -0.021301f, 0.040286f, -0.032853f, -0.003278f, 0.049125f, 0.049729f, -0.011980f, -0.042533f, 0.016013f, 0.000202f, 0.042150f, 0.073946f, 0.016049f, -0.010259f, 0.004915f, -0.040944f, -0.005178f, -0.010061f, -0.009212f, 0.001906f, 0.037106f, -0.014875f, 0.016264f, 0.046045f, 0.007510f, -0.040230f, 0.027385f, -0.000768f, 0.017435f, 0.043607f, 0.059372f, -0.015157f, -0.015670f, -0.003345f, -0.046888f, -0.066897f, 0.002089f, -0.029095f, -0.004770f, -0.035369f, -0.003476f, 0.004389f, 0.005773f, 0.032422f, 0.000005f, -0.011530f, 0.046906f, -0.087624f, 0.048397f, -0.037125f, -0.085624f, -0.025858f, -0.021280f, -0.003433f, -0.019443f, 0.010058f, -0.023386f, -0.053673f, -0.031782f, -0.016319f, -0.004450f, 0.005724f, -0.021524f, 0.021059f, 0.042182f, + 0.001157f, -0.002199f, 0.011048f, 0.002996f, -0.008199f, -0.015070f, -0.009161f, 0.011735f, 0.011986f, -0.003269f, 0.011361f, 0.051742f, 0.013660f, -0.014559f, -0.051382f, -0.007688f, 0.035445f, -0.043345f, -0.021129f, -0.016243f, -0.000047f, -0.002914f, 0.027006f, -0.008692f, 0.002651f, 0.038432f, 0.012861f, 0.042575f, -0.006711f, -0.019532f, -0.009991f, -0.010466f, -0.011870f, 0.020668f, 0.001173f, 0.014040f, 0.024552f, -0.044977f, 0.005340f, -0.011802f, -0.029618f, -0.021148f, 0.042459f, 0.031779f, -0.000375f, -0.021754f, 0.006584f, 0.018258f, -0.000901f, 0.012228f, -0.033876f, -0.076103f, -0.039300f, -0.029227f, 0.021218f, -0.000202f, -0.013075f, 0.025651f, -0.034890f, 0.041851f, -0.003788f, -0.064989f, 0.012880f, -0.031110f, -0.007021f, -0.004309f, -0.008242f, -0.041254f, 0.012608f, 0.002585f, 0.032517f, -0.070863f, 0.000635f, 0.035509f, 0.003704f, -0.016548f, -0.036592f, -0.002461f, 0.020139f, 0.031083f, -0.026093f, -0.008804f, 0.016051f, 0.035435f, 0.031535f, -0.030723f, -0.006892f, -0.049995f, 0.022840f, 0.025711f, 0.015210f, -0.014133f, -0.004514f, -0.013520f, -0.005929f, -0.016634f, + 0.004245f, 0.036715f, -0.014173f, -0.014404f, -0.013165f, -0.020804f, 0.041011f, 0.035675f, -0.004070f, 0.050205f, -0.002851f, 0.017675f, -0.045003f, 0.036192f, 0.015694f, -0.050401f, -0.016664f, 0.056721f, 0.023286f, 0.014848f, 0.010744f, -0.027770f, -0.021539f, -0.029920f, 0.049504f, -0.027007f, 0.038356f, 0.038110f, -0.044885f, 0.102229f, -0.021803f, 0.061995f, 0.003912f, -0.018307f, -0.025899f, 0.043164f, 0.022796f, -0.048391f, -0.006791f, 0.025070f, 0.042761f, 0.003520f, -0.036223f, 0.017303f, -0.069823f, -0.018651f, -0.063554f, -0.087631f, 0.002476f, -0.033930f, 0.010637f, -0.006903f, -0.014399f, -0.033760f, -0.023668f, 0.018938f, 0.051713f, -0.044540f, -0.010410f, -0.076327f, -0.067423f, 0.017400f, 0.025366f, -0.042465f, -0.044739f, 0.001644f, 0.008191f, -0.071369f, 0.002195f, 0.000207f, 0.034812f, -0.032907f, -0.000399f, 0.028718f, -0.021611f, -0.038171f, -0.042916f, -0.021514f, -0.039450f, -0.032437f, -0.041227f, 0.052463f, -0.071714f, -0.045096f, 0.059985f, -0.004314f, 0.014875f, -0.054876f, -0.012106f, -0.017573f, -0.001746f, 0.085461f, -0.015822f, -0.004732f, 0.005222f, 0.038148f, + -0.002728f, -0.042534f, -0.021220f, -0.031886f, 0.005406f, 0.101632f, 0.016237f, -0.041559f, 0.075093f, 0.052772f, -0.055784f, 0.054065f, 0.092542f, -0.005108f, -0.042808f, 0.059305f, -0.015989f, 0.060987f, 0.059884f, 0.045173f, -0.120837f, -0.079332f, -0.077012f, -0.031752f, -0.049852f, 0.063270f, 0.029762f, 0.051210f, -0.003818f, -0.110457f, -0.011841f, 0.013402f, 0.077756f, -0.006867f, 0.021530f, 0.063518f, -0.020631f, -0.052497f, 0.009575f, -0.006989f, 0.089707f, 0.051672f, -0.023113f, -0.042266f, 0.095087f, 0.002750f, 0.049973f, 0.018233f, 0.089101f, 0.069305f, 0.060985f, 0.002446f, -0.042748f, -0.029376f, -0.031476f, 0.067039f, -0.028917f, -0.051544f, -0.021322f, -0.000778f, 0.002973f, 0.027864f, -0.025600f, 0.007947f, -0.138165f, 0.012870f, 0.027304f, 0.020393f, -0.054794f, -0.058633f, 0.022248f, 0.047397f, -0.056647f, 0.021080f, -0.029941f, -0.030336f, -0.036263f, -0.006593f, 0.049321f, -0.032292f, 0.053710f, -0.015010f, 0.024338f, -0.091881f, -0.051969f, -0.004712f, 0.052935f, 0.030893f, -0.059380f, -0.072012f, -0.026820f, 0.005026f, 0.080199f, 0.029947f, -0.000176f, -0.048795f, + -0.011041f, 0.021357f, 0.162609f, 0.015664f, -0.085337f, -0.194762f, -0.016524f, 0.114604f, 0.030109f, 0.049802f, -0.004059f, 0.069706f, -0.010446f, 0.030570f, -0.014810f, 0.039570f, 0.057506f, 0.029846f, -0.025508f, -0.063989f, 0.077168f, 0.085848f, -0.017425f, -0.084457f, -0.049653f, 0.009322f, 0.051444f, 0.016992f, 0.019889f, 0.003854f, 0.014930f, 0.006516f, 0.014939f, -0.015683f, -0.095652f, 0.000565f, 0.063460f, 0.047994f, -0.016466f, 0.006181f, 0.040400f, 0.083492f, 0.053460f, 0.041956f, -0.044900f, -0.031680f, -0.004720f, -0.006656f, -0.069502f, 0.054327f, 0.034709f, 0.056601f, 0.114187f, -0.053581f, -0.031886f, -0.001730f, -0.025817f, -0.022729f, -0.043100f, 0.089411f, -0.046398f, -0.051219f, -0.051646f, -0.014877f, 0.115152f, 0.033658f, 0.049164f, 0.004260f, -0.001805f, -0.017594f, 0.075839f, 0.063762f, -0.019052f, -0.052566f, 0.031946f, 0.006243f, 0.002207f, -0.052205f, 0.009806f, 0.118479f, 0.101176f, 0.009481f, 0.013052f, -0.072755f, -0.123896f, -0.118869f, -0.049654f, 0.087788f, 0.107810f, 0.100463f, 0.064620f, -0.020750f, -0.061240f, -0.067417f, -0.034688f, 0.021450f, + 0.047543f, 0.067249f, 0.012958f, -0.060137f, -0.040178f, -0.015222f, -0.040162f, -0.026737f, 0.016807f, 0.069967f, 0.113634f, 0.064339f, 0.039871f, 0.025426f, -0.060046f, -0.012822f, -0.127616f, -0.155450f, -0.087089f, -0.050270f, -0.033957f, 0.065580f, 0.117851f, 0.117431f, 0.118248f, 0.090927f, 0.047611f, 0.001685f, -0.038038f, -0.017479f, -0.066030f, -0.136761f, -0.002246f, 0.007551f, 0.021813f, 0.039066f, 0.035433f, 0.039686f, -0.138171f, -0.085587f, -0.042773f, -0.090485f, -0.025805f, 0.058526f, -0.026752f, 0.037719f, 0.017622f, -0.044170f, 0.043971f, -0.037994f, 0.048789f, 0.035492f, -0.016971f, -0.069935f, -0.114981f, -0.134720f, -0.074341f, 0.020298f, -0.220044f, -0.114341f, -0.056552f, 0.074510f, 0.020495f, 0.285238f, 0.295774f, 0.221045f, 0.289076f, 0.299800f, 0.276048f, 0.196637f, 0.182261f, 0.198621f, 0.084320f, -0.008397f, -0.114272f, -0.183570f, -0.251308f, -0.247185f, -0.366689f, -0.222553f, -0.138935f, -0.111944f, -0.157357f, -0.081709f, -0.013457f, -0.118403f, -0.085835f, -0.095188f, -0.010899f, -0.053450f, -0.008755f, -0.074586f, -0.028274f, 0.059511f, 0.066725f, 0.025870f, + 0.000750f, 0.065530f, 0.061240f, -0.114357f, 0.044720f, 0.098405f, 0.206829f, 0.151110f, 0.199178f, 0.087869f, 0.093219f, 0.312632f, 0.184672f, 0.320615f, 0.127295f, 0.302867f, 0.224054f, 0.267891f, 0.364760f, 0.338198f, 0.289049f, 0.311117f, 0.355105f, 0.372988f, 0.334885f, 0.369391f, 0.273979f, 0.375670f, 0.322257f, 0.276161f, 0.309682f, 0.172488f, 0.343321f, 0.170095f, 0.132479f, -0.089943f, 0.040951f, -0.178185f, -0.199443f, -0.215743f, -0.006303f}, + {0.028151f, -0.003043f, -0.004712f, 0.001293f, 0.002069f, 0.007711f, -0.002021f, -0.004592f, -0.007568f, 0.008244f, 0.000716f, 0.002734f, 0.008263f, 0.002279f, -0.001302f, 0.002104f, 0.004355f, 0.002864f, -0.004406f, 0.009559f, 0.001000f, -0.012480f, -0.002362f, 0.008294f, 0.003205f, 0.000905f, -0.004534f, -0.002612f, 0.004068f, -0.001520f, 0.016456f, -0.002968f, 0.003751f, 0.000645f, 0.001501f, -0.009223f, -0.003150f, -0.001917f, 0.003385f, -0.001236f, 0.002035f, -0.005299f, -0.002930f, 0.003514f, 0.005212f, 0.003647f, 0.006195f, 0.006354f, 0.004071f, -0.005598f, -0.008796f, 0.001106f, 0.005198f, 0.005740f, 0.004323f, -0.003078f, -0.003864f, -0.013629f, 0.007027f, -0.003245f, -0.005251f, -0.000882f, -0.002335f, 0.002748f, -0.006481f, 0.002800f, -0.008204f, 0.003495f, -0.007791f, 0.007076f, -0.003108f, 0.005917f, -0.001505f, -0.000983f, -0.009270f, -0.000845f, -0.014480f, -0.028107f, -0.005140f, 0.000572f, -0.006671f, -0.013121f, -0.004579f, 0.009959f, -0.015844f, -0.008452f, -0.005366f, -0.002866f, 0.004794f, -0.002033f, 0.005360f, 0.002739f, 0.004674f, -0.000334f, 0.005830f, -0.005031f, + 0.000804f, -0.002089f, 0.000964f, 0.015318f, -0.003386f, -0.000718f, -0.007657f, 0.009552f, 0.005630f, 0.004708f, 0.011487f, -0.005741f, -0.003550f, 0.004203f, 0.010271f, -0.002596f, -0.000856f, -0.008202f, -0.009386f, -0.005951f, 0.006432f, -0.007970f, -0.007179f, -0.000665f, 0.009231f, -0.012478f, -0.002853f, -0.010389f, -0.005296f, -0.002815f, 0.001313f, -0.000737f, -0.007752f, 0.009969f, 0.001521f, 0.008989f, -0.003689f, -0.002017f, -0.011073f, -0.000037f, -0.003971f, -0.003934f, 0.006168f, 0.003717f, -0.002087f, 0.003545f, 0.006849f, -0.001863f, 0.002881f, -0.004919f, -0.002985f, -0.001209f, -0.004786f, 0.004048f, 0.001450f, 0.002763f, -0.023120f, -0.008534f, 0.006871f, -0.006341f, -0.002608f, -0.002790f, 0.003321f, -0.001375f, -0.005988f, 0.009505f, 0.008825f, 0.002698f, -0.000941f, 0.004290f, -0.011813f, -0.001962f, -0.011677f, -0.006170f, 0.008852f, -0.001678f, 0.001688f, -0.001423f, -0.001226f, -0.000039f, 0.018363f, 0.016452f, 0.007581f, 0.008661f, 0.010684f, -0.002299f, -0.001100f, -0.003907f, 0.009436f, -0.001187f, -0.003426f, 0.002333f, -0.005322f, 0.003429f, 0.006816f, -0.003740f, + 0.007669f, 0.008224f, 0.016777f, -0.006859f, -0.007765f, 0.006791f, -0.004208f, -0.000127f, 0.003615f, -0.010077f, 0.000686f, -0.005475f, -0.005582f, 0.012420f, 0.007657f, 0.008794f, -0.005173f, -0.007454f, 0.005017f, -0.008635f, 0.005830f, 0.024224f, 0.001547f, 0.001084f, 0.005738f, 0.001735f, 0.002486f, 0.013335f, -0.007303f, -0.002812f, 0.002913f, 0.000763f, -0.006575f, -0.006535f, -0.006461f, -0.005354f, -0.001146f, -0.006915f, 0.007473f, 0.011754f, -0.005602f, 0.005753f, 0.018778f, 0.006108f, 0.004361f, -0.013218f, 0.010909f, 0.002693f, -0.016748f, 0.006971f, -0.004655f, -0.010265f, 0.004127f, -0.001578f, 0.003973f, 0.009592f, -0.010219f, -0.010970f, -0.004759f, 0.014473f, 0.000445f, 0.007080f, 0.015210f, -0.022787f, -0.018196f, 0.002753f, 0.011139f, -0.008379f, 0.000724f, 0.014852f, 0.003884f, -0.002177f, -0.004545f, 0.017802f, 0.002188f, -0.004637f, 0.002496f, -0.016619f, 0.001822f, -0.009288f, 0.008288f, 0.001186f, 0.008795f, -0.004744f, -0.002292f, 0.003706f, 0.000182f, 0.000852f, 0.000411f, 0.008168f, 0.006724f, -0.009668f, 0.005204f, 0.007151f, -0.012949f, 0.001131f, + -0.005942f, 0.001978f, -0.003135f, -0.010352f, -0.000070f, 0.008023f, 0.007147f, 0.015895f, -0.010496f, 0.012115f, -0.008779f, -0.002404f, 0.007143f, -0.009054f, -0.012780f, -0.005326f, 0.037330f, 0.017096f, 0.022508f, -0.001600f, -0.006562f, -0.007972f, -0.008503f, 0.004713f, -0.007191f, 0.010712f, -0.001471f, 0.014609f, 0.000580f, 0.007830f, 0.009148f, 0.007518f, 0.005947f, 0.008493f, -0.028230f, -0.008045f, -0.002944f, -0.005678f, -0.005494f, -0.008585f, -0.020224f, 0.001096f, 0.013281f, -0.008189f, 0.007826f, -0.006540f, -0.010291f, -0.007298f, 0.000755f, -0.006131f, -0.002736f, -0.006294f, -0.000851f, 0.016623f, 0.000463f, 0.007575f, 0.009960f, 0.013698f, -0.006791f, 0.003352f, -0.003483f, -0.010239f, 0.011362f, -0.006436f, -0.000983f, -0.010128f, 0.007023f, 0.000096f, -0.000376f, -0.002647f, -0.005381f, 0.003705f, 0.009970f, -0.004217f, 0.005314f, 0.005882f, 0.004054f, 0.018449f, -0.019050f, -0.007452f, -0.000366f, -0.009753f, -0.013952f, -0.004794f, -0.016979f, 0.002880f, 0.017618f, -0.012292f, -0.007484f, -0.013829f, -0.000638f, -0.002986f, -0.008833f, -0.008964f, -0.001088f, 0.012052f, + 0.016301f, -0.008847f, 0.008311f, -0.007141f, -0.004018f, -0.002589f, -0.021022f, 0.015434f, -0.004729f, -0.001779f, 0.023496f, 0.015264f, 0.015596f, -0.006036f, 0.000275f, 0.003302f, -0.004003f, 0.005776f, -0.012484f, 0.000158f, -0.008639f, 0.010229f, -0.009775f, -0.006011f, -0.001302f, 0.002182f, -0.011985f, 0.002786f, 0.000940f, 0.015898f, -0.000184f, -0.020401f, 0.011794f, 0.011908f, 0.015845f, -0.001959f, 0.003779f, -0.010974f, -0.009024f, -0.003017f, -0.008764f, 0.004000f, 0.001949f, -0.002476f, -0.001541f, 0.009491f, 0.013403f, -0.017965f, -0.004303f, 0.000766f, -0.007929f, -0.007183f, 0.012109f, -0.009107f, 0.004415f, -0.008881f, -0.013192f, -0.008700f, -0.006641f, 0.005458f, 0.001572f, 0.024189f, -0.004158f, -0.005091f, 0.006661f, -0.005749f, -0.002264f, -0.004872f, 0.006228f, -0.004297f, 0.008102f, -0.002615f, -0.004048f, 0.007393f, 0.012916f, -0.028413f, 0.027317f, 0.015172f, -0.016829f, -0.016307f, 0.006489f, 0.022279f, -0.000650f, 0.006769f, 0.025228f, 0.008901f, 0.007363f, -0.003991f, 0.012990f, 0.012504f, 0.013701f, -0.024973f, -0.015872f, -0.015024f, 0.011788f, 0.010781f, + 0.012997f, 0.000961f, -0.015777f, 0.006672f, -0.002676f, 0.007307f, -0.022534f, 0.008897f, 0.013117f, -0.010100f, 0.005483f, 0.011194f, 0.002713f, -0.000018f, 0.001997f, -0.003186f, 0.019098f, 0.013507f, 0.010060f, 0.000683f, 0.006413f, 0.015288f, -0.013736f, -0.006925f, 0.000313f, 0.020107f, 0.012338f, 0.008067f, -0.015302f, 0.000801f, 0.009790f, 0.012080f, -0.004546f, 0.003889f, 0.011180f, 0.014523f, 0.004117f, 0.013417f, 0.004830f, -0.001345f, -0.012684f, 0.000016f, -0.020858f, -0.008303f, -0.010316f, 0.001669f, 0.006093f, -0.011936f, -0.005509f, -0.021834f, 0.008469f, -0.006535f, -0.001349f, 0.010364f, 0.014817f, 0.017536f, 0.004133f, 0.023995f, 0.007991f, -0.004497f, -0.010688f, -0.029232f, -0.013642f, 0.017336f, -0.005839f, -0.026906f, -0.006722f, -0.004573f, 0.004424f, 0.014315f, 0.022796f, -0.001682f, 0.006972f, -0.005511f, 0.011547f, -0.012896f, -0.012955f, -0.014731f, -0.025114f, 0.013221f, 0.008135f, -0.021697f, 0.001035f, -0.015963f, -0.005552f, 0.013313f, 0.008163f, 0.010776f, -0.002764f, -0.003397f, -0.003262f, 0.023754f, 0.019251f, 0.019504f, -0.008680f, -0.017572f, + 0.013924f, -0.002808f, -0.005634f, 0.016693f, 0.003495f, 0.016396f, -0.000102f, 0.008906f, -0.011457f, -0.001211f, 0.008978f, -0.036930f, -0.005005f, 0.001110f, -0.026098f, 0.006231f, -0.006269f, 0.024116f, 0.016348f, -0.015934f, 0.001753f, 0.021890f, -0.001770f, 0.010738f, -0.007000f, 0.014725f, -0.006598f, 0.002178f, -0.005333f, -0.000567f, 0.011614f, -0.015763f, 0.016637f, 0.007095f, 0.009728f, 0.001404f, 0.020423f, -0.058589f, -0.012244f, 0.031326f, -0.025169f, -0.009195f, 0.026861f, 0.010064f, -0.008215f, 0.002879f, -0.021797f, 0.019792f, -0.002185f, -0.035447f, 0.002898f, -0.001695f, 0.013838f, 0.013410f, -0.006644f, -0.027623f, -0.011479f, -0.010353f, 0.001095f, -0.014533f, -0.007625f, -0.018581f, -0.004866f, 0.021072f, -0.016343f, -0.008063f, -0.005858f, -0.010531f, -0.010943f, -0.015266f, 0.011553f, 0.002791f, 0.014231f, 0.002996f, -0.009064f, -0.014628f, -0.014233f, -0.002365f, 0.011021f, 0.015676f, -0.004250f, -0.012681f, 0.015288f, 0.006849f, -0.020186f, -0.022747f, -0.047229f, -0.003218f, -0.014215f, -0.008220f, 0.008504f, 0.008576f, 0.005839f, 0.023051f, -0.000771f, -0.008990f, + 0.000285f, -0.009694f, 0.026508f, 0.014796f, -0.002988f, 0.014996f, -0.011969f, 0.008840f, 0.007876f, -0.011587f, -0.003597f, -0.009986f, 0.011439f, 0.008616f, -0.019413f, 0.017518f, 0.026472f, 0.000595f, 0.012013f, 0.037227f, -0.016550f, 0.013160f, -0.007936f, -0.001689f, 0.023810f, -0.008027f, -0.008351f, -0.006865f, -0.000522f, 0.002283f, 0.016666f, 0.049489f, -0.001279f, 0.001431f, 0.015716f, 0.001644f, 0.001761f, -0.025601f, -0.023373f, 0.002137f, 0.004915f, -0.017350f, -0.006478f, -0.005334f, 0.015668f, -0.008027f, 0.004244f, -0.002089f, 0.007675f, -0.008185f, 0.031338f, 0.014775f, -0.012468f, 0.014593f, 0.016347f, -0.019916f, 0.004631f, 0.005812f, 0.007450f, -0.006932f, -0.004653f, 0.022925f, -0.020305f, 0.007238f, 0.028971f, -0.011605f, 0.004892f, 0.015567f, -0.000454f, 0.013218f, 0.009911f, -0.001938f, 0.009908f, 0.010917f, 0.019589f, 0.009065f, 0.002974f, -0.003075f, -0.010961f, -0.016328f, 0.002054f, -0.001117f, -0.041837f, 0.025528f, -0.005071f, -0.016444f, -0.013451f, -0.035120f, -0.034262f, -0.027037f, 0.006115f, 0.013502f, -0.004706f, -0.003219f, -0.001110f, 0.051866f, + 0.053393f, -0.002213f, -0.043059f, 0.007772f, 0.009515f, -0.005814f, 0.011978f, 0.005723f, 0.004321f, -0.001383f, -0.006918f, 0.041703f, 0.008320f, -0.007825f, -0.047082f, -0.027707f, 0.011587f, -0.004010f, -0.016176f, -0.029584f, 0.004284f, 0.003671f, 0.007583f, -0.008309f, -0.030989f, -0.034571f, 0.036298f, 0.032854f, 0.010820f, 0.030006f, -0.026713f, 0.002210f, 0.014133f, -0.007158f, -0.016979f, -0.032163f, -0.015140f, 0.003762f, -0.001352f, -0.016079f, 0.014667f, -0.001529f, 0.014182f, 0.009728f, 0.000596f, -0.034884f, -0.019377f, -0.017568f, -0.002971f, 0.001168f, 0.003972f, -0.007937f, -0.009752f, -0.000220f, 0.004798f, -0.032054f, -0.008000f, 0.001988f, 0.005940f, -0.016381f, -0.037560f, -0.011855f, -0.010119f, 0.023623f, -0.002043f, 0.008341f, -0.013423f, -0.013641f, -0.017753f, -0.023254f, -0.012266f, -0.002612f, -0.003132f, 0.016138f, -0.015684f, -0.004704f, -0.010030f, 0.011564f, -0.008163f, 0.024958f, -0.013815f, 0.006089f, -0.010910f, 0.003872f, 0.003966f, -0.012284f, -0.011783f, -0.023577f, -0.030457f, -0.016527f, -0.009347f, 0.000849f, -0.001327f, -0.013559f, -0.016609f, -0.027287f, + 0.012136f, -0.027335f, -0.040050f, 0.026766f, -0.024831f, -0.026766f, 0.024963f, 0.007388f, -0.008150f, 0.031255f, 0.014662f, -0.020212f, 0.018746f, -0.055079f, -0.005962f, -0.012398f, -0.008220f, -0.024605f, 0.045136f, 0.024537f, -0.015956f, 0.009384f, 0.012752f, -0.007406f, 0.014281f, 0.002770f, -0.001449f, -0.010934f, 0.013759f, 0.021003f, 0.022631f, -0.036283f, -0.003615f, 0.002448f, 0.009238f, -0.014879f, -0.009067f, -0.015125f, -0.020033f, 0.033880f, 0.007600f, -0.020175f, 0.009501f, -0.011228f, -0.017705f, -0.021661f, -0.047780f, 0.015210f, 0.027372f, 0.005608f, 0.027616f, 0.044739f, -0.004834f, -0.012561f, -0.040862f, 0.007809f, -0.006145f, -0.031949f, 0.003579f, -0.072266f, -0.049912f, -0.034362f, 0.018258f, 0.037112f, -0.052500f, 0.012864f, 0.035886f, 0.023524f, -0.001292f, 0.014312f, 0.033807f, -0.014973f, -0.002820f, -0.009150f, 0.000273f, -0.021527f, 0.015229f, 0.001282f, 0.001154f, 0.006867f, 0.045607f, -0.001363f, -0.021168f, -0.018910f, 0.010325f, 0.035134f, -0.014495f, -0.033510f, 0.009543f, 0.035681f, 0.019499f, -0.003586f, 0.016102f, 0.012465f, 0.015489f, 0.004735f, + 0.013012f, 0.024647f, -0.003640f, -0.038402f, 0.001274f, 0.013437f, -0.037822f, -0.025829f, 0.035577f, 0.029780f, -0.028756f, -0.017022f, 0.008126f, -0.000492f, 0.017050f, 0.045581f, -0.010264f, -0.007051f, 0.007593f, -0.000727f, 0.015507f, 0.009791f, -0.016973f, -0.010936f, -0.007016f, 0.014725f, 0.010717f, -0.009848f, -0.033145f, -0.003623f, -0.049483f, 0.047714f, 0.006035f, -0.006041f, 0.002134f, 0.021330f, -0.004449f, -0.018763f, -0.008947f, -0.002935f, -0.028330f, -0.001220f, 0.004768f, -0.034646f, -0.009246f, 0.025975f, 0.033678f, 0.023881f, 0.062968f, 0.038003f, 0.057007f, 0.021239f, 0.014811f, -0.029737f, 0.031821f, -0.011000f, -0.003962f, -0.023895f, -0.016151f, 0.030813f, -0.010582f, 0.070156f, 0.032308f, 0.020041f, -0.004259f, 0.015981f, -0.011612f, -0.033193f, -0.017197f, -0.020746f, 0.014225f, -0.019603f, -0.001095f, -0.020971f, 0.011347f, 0.028241f, 0.025108f, -0.002125f, 0.036597f, 0.030800f, 0.000615f, -0.011332f, -0.015186f, -0.026090f, -0.009766f, 0.058478f, 0.021851f, 0.067382f, -0.022948f, -0.000143f, -0.003442f, 0.015339f, 0.053262f, 0.018183f, 0.000027f, 0.034549f, + 0.038769f, 0.041934f, -0.005284f, -0.025463f, -0.010746f, -0.007291f, -0.008875f, 0.027785f, 0.017409f, 0.026439f, 0.038781f, -0.025486f, 0.059452f, -0.041281f, -0.079970f, -0.011691f, -0.027063f, 0.016521f, 0.035660f, 0.060898f, -0.030792f, -0.022367f, 0.020507f, -0.016782f, -0.004213f, -0.007280f, 0.007141f, 0.027298f, 0.027313f, 0.042749f, -0.046440f, 0.052479f, -0.019307f, 0.005676f, -0.024435f, 0.022396f, 0.038148f, 0.016906f, 0.006536f, 0.003722f, 0.046723f, 0.012686f, -0.002121f, -0.014556f, -0.007721f, -0.047515f, -0.007011f, -0.022495f, -0.058908f, 0.006180f, -0.003838f, 0.025131f, -0.061206f, -0.010671f, 0.014115f, 0.023869f, 0.050634f, -0.012580f, 0.014739f, 0.029141f, 0.004216f, -0.005563f, 0.014464f, -0.011911f, -0.003268f, -0.074481f, 0.006976f, -0.030663f, -0.037753f, -0.040604f, 0.017661f, -0.066204f, 0.023087f, -0.023379f, -0.033550f, -0.044091f, 0.042807f, 0.048154f, 0.045739f, 0.012269f, 0.009295f, 0.045793f, -0.057519f, -0.001734f, -0.016727f, 0.028180f, -0.068253f, -0.019265f, -0.005525f, 0.027681f, 0.019505f, 0.020388f, 0.029742f, -0.019097f, 0.010527f, -0.020003f, + -0.054057f, -0.002127f, -0.018537f, 0.064253f, 0.014829f, 0.045191f, -0.013887f, 0.062119f, -0.038348f, -0.075198f, 0.018108f, 0.011755f, 0.009865f, -0.037710f, -0.040632f, -0.033673f, 0.013830f, -0.033843f, 0.016142f, -0.018186f, 0.051109f, -0.016654f, -0.005823f, 0.035267f, 0.002817f, -0.089268f, -0.035181f, -0.001481f, 0.060410f, -0.006929f, -0.016497f, -0.051092f, 0.010789f, -0.012606f, -0.041868f, -0.051886f, -0.003963f, 0.009680f, -0.015760f, -0.019519f, -0.049797f, 0.034416f, -0.010636f, 0.012719f, -0.023549f, 0.001745f, 0.017835f, 0.010146f, 0.048383f, 0.001330f, -0.013220f, -0.058649f, -0.018375f, 0.030008f, -0.038081f, -0.019478f, 0.017999f, 0.034361f, 0.028612f, 0.067184f, 0.053073f, 0.002922f, 0.041192f, 0.041104f, 0.016721f, 0.004094f, 0.026458f, -0.016466f, 0.102796f, -0.042032f, -0.103446f, 0.032689f, -0.086823f, 0.001351f, -0.066052f, 0.006057f, 0.093198f, 0.043749f, -0.064996f, -0.039204f, -0.028138f, -0.019447f, 0.023022f, 0.041755f, -0.025118f, 0.005317f, 0.032884f, -0.067899f, 0.003267f, 0.019433f, -0.055209f, 0.030567f, -0.019565f, 0.027396f, 0.007435f, 0.030573f, + 0.001317f, -0.031360f, 0.034205f, -0.041754f, -0.011317f, 0.090593f, -0.037215f, 0.035420f, -0.022112f, 0.039473f, 0.031469f, -0.007783f, -0.039440f, 0.044408f, 0.104622f, -0.054060f, 0.014038f, -0.072903f, 0.037969f, 0.027494f, -0.042487f, 0.050368f, 0.003596f, -0.087970f, 0.012618f, 0.009024f, 0.041613f, -0.006676f, -0.006968f, -0.043720f, -0.047522f, -0.019278f, 0.115075f, -0.012464f, 0.058440f, -0.046064f, 0.038553f, 0.024402f, -0.010405f, -0.033727f, -0.006973f, 0.038581f, 0.065395f, -0.017120f, -0.020966f, -0.000146f, 0.013790f, 0.063564f, -0.012903f, -0.005687f, -0.040033f, 0.021187f, -0.060627f, -0.018844f, 0.048229f, 0.065171f, 0.010146f, 0.013432f, -0.064149f, 0.046400f, 0.035665f, -0.075205f, 0.002752f, -0.037044f, 0.000237f, -0.083180f, 0.083901f, 0.082536f, -0.012834f, -0.034980f, -0.018871f, -0.010746f, 0.038280f, -0.038712f, 0.050809f, -0.068319f, -0.047612f, 0.026745f, 0.021442f, 0.011771f, 0.020574f, 0.076265f, 0.015602f, 0.038455f, 0.003997f, 0.039844f, 0.019387f, -0.009587f, 0.002445f, 0.034938f, -0.006541f, 0.004089f, 0.051700f, 0.031911f, 0.069302f, 0.000097f, + 0.037611f, 0.007148f, -0.058365f, 0.062421f, -0.032892f, 0.001262f, 0.012695f, -0.043469f, -0.038864f, 0.027833f, 0.076080f, 0.052120f, 0.024853f, -0.094873f, -0.028158f, -0.063587f, -0.004689f, 0.125413f, 0.072451f, 0.097639f, 0.003138f, -0.074777f, 0.022921f, 0.097433f, 0.014801f, -0.009858f, 0.073881f, 0.020967f, 0.048815f, -0.118739f, -0.111868f, 0.094053f, -0.006694f, -0.018873f, -0.083405f, 0.000706f, -0.026811f, 0.057793f, 0.040720f, 0.018035f, 0.029701f, -0.071927f, 0.040290f, 0.065051f, -0.000409f, 0.025221f, -0.059717f, 0.047229f, -0.030022f, 0.024966f, -0.003281f, 0.004657f, 0.030762f, -0.006724f, 0.018053f, -0.003132f, -0.049423f, 0.016123f, -0.008735f, 0.053435f, 0.036993f, 0.065371f, 0.014346f, -0.042256f, -0.044651f, 0.044001f, 0.038163f, 0.025020f, -0.002556f, 0.018536f, -0.018804f, -0.033742f, -0.000355f, -0.009608f, 0.047056f, 0.042456f, 0.025704f, 0.047619f, 0.036430f, -0.055997f, 0.059045f, 0.070697f, 0.040025f, -0.027659f, -0.037628f, -0.037099f, 0.049379f, 0.039434f, 0.086401f, -0.052765f, -0.067551f, -0.038833f, -0.095050f, -0.016026f, 0.080525f, 0.020949f, + 0.060183f, -0.069870f, -0.094451f, 0.025129f, 0.038605f, -0.063842f, -0.003345f, -0.048521f, 0.006789f, -0.056382f, -0.022898f, 0.042085f, 0.013197f, -0.047348f, 0.000694f, -0.030241f, -0.118137f, 0.017366f, 0.072760f, -0.002285f, -0.146560f, -0.031363f, -0.002196f, 0.000513f, 0.053070f, -0.139136f, -0.014340f, 0.060796f, -0.100342f, 0.021231f, -0.022009f, 0.116539f, 0.063602f, -0.074337f, 0.018708f, 0.077533f, 0.008849f, -0.033965f, 0.026848f, 0.016721f, 0.010938f, -0.004058f, -0.007607f, 0.003448f, 0.013213f, 0.024471f, 0.082031f, 0.062661f, 0.071587f, 0.045812f, 0.090022f, 0.040618f, 0.091889f, 0.034515f, 0.081297f, -0.002511f, 0.050089f, 0.041923f, 0.049450f, 0.034581f, -0.004835f, 0.010939f, -0.064173f, -0.041783f, 0.118076f, -0.002938f, -0.049559f, -0.017999f, 0.035565f, 0.058246f, 0.126505f, -0.022357f, -0.073325f, -0.040818f, -0.054972f, 0.067993f, 0.080866f, 0.088424f, 0.025858f, -0.009190f, 0.059958f, -0.114076f, 0.094410f, 0.031010f, -0.056166f, -0.007513f, -0.172730f, -0.002861f, -0.115985f, -0.161296f, -0.043295f, -0.098154f, -0.043789f, 0.166444f, 0.156969f, 0.138433f, + -0.040296f, 0.105205f, 0.129371f, -0.107258f, -0.097047f, 0.032205f, 0.113228f, 0.002102f, -0.051964f, -0.000339f, 0.031323f, 0.033028f, -0.092209f, 0.033837f, -0.011540f, 0.048319f, -0.050156f, -0.025423f, -0.058874f, 0.062324f, -0.007564f, -0.028873f, -0.054848f, 0.040021f, 0.025418f, -0.010751f, -0.046015f, 0.020995f, 0.022344f, 0.009954f, -0.040310f, -0.007342f, -0.000487f, 0.046928f, -0.034704f, -0.010403f, -0.051418f, -0.015668f, 0.020457f, 0.040655f, -0.053268f, -0.023100f, 0.061455f, 0.048513f, -0.012975f, -0.038031f, 0.002535f, -0.020705f, 0.052361f, -0.030887f, -0.012321f, 0.020984f, 0.021457f, 0.026993f, -0.023258f, 0.005107f, -0.033156f, 0.039355f, 0.055612f, 0.020053f, 0.012982f, -0.044506f, 0.050866f, -0.037168f, 0.076294f, -0.056955f, 0.063196f, -0.094762f, 0.067375f, 0.000436f, 0.003515f, -0.070361f, -0.008605f, 0.010830f, -0.004238f, -0.004655f, -0.002840f, -0.023527f, 0.103205f, 0.108651f, -0.063660f, -0.038602f, 0.022266f, 0.103760f, 0.065416f, 0.038347f, 0.038018f, -0.017109f, -0.042985f, -0.013699f, 0.025175f, -0.000857f, -0.009594f, 0.030645f, 0.001245f, 0.021474f, + 0.003411f, -0.012104f, -0.038359f, -0.010804f, -0.001525f, 0.002476f, -0.000762f, -0.032166f, 0.036276f, 0.005541f, -0.013441f, -0.001160f, -0.000232f, 0.000163f, 0.023791f, 0.041740f, 0.018865f, 0.003962f, -0.014177f, -0.022030f, -0.004641f, 0.013432f, 0.029242f, 0.037763f, -0.020086f, -0.021081f, 0.005892f, 0.038263f, 0.018527f, 0.008499f, -0.016050f, -0.034824f, 0.031072f, -0.006050f, 0.002292f, 0.002181f, 0.011129f, 0.009444f, -0.002544f, -0.000876f, -0.020886f, 0.004040f, 0.022014f, -0.008760f, 0.014156f, -0.005701f, -0.013739f, 0.011634f, -0.000312f, 0.007395f, 0.001944f, 0.019949f, 0.015583f, -0.022302f, 0.012380f, 0.006977f, -0.040264f, -0.036581f, -0.135084f, 0.057224f, 0.209208f, 0.192308f, 0.164777f, 0.065345f, -0.155528f, -0.097817f, -0.139744f, -0.157288f, -0.139980f, -0.041058f, 0.030914f, 0.118317f, 0.123928f, 0.147654f, 0.098467f, 0.098646f, 0.003100f, -0.103817f, -0.098451f, -0.122212f, -0.094881f, -0.053177f, -0.002812f, -0.034206f, 0.037976f, 0.045921f, 0.075118f, 0.081701f, 0.083749f, 0.049545f, 0.005145f, 0.022165f, -0.017216f, 0.012031f, -0.055606f, -0.040882f, + -0.051279f, -0.085314f, -0.066771f, -0.051670f, -0.035496f, -0.060429f, 0.009842f, 0.104588f, 0.118999f, 0.066267f, 0.124462f, 0.031204f, 0.073399f, 0.037729f, 0.022878f, -0.029934f, -0.063646f, -0.088809f, -0.124163f, -0.095576f, -0.141742f, -0.058187f, -0.061573f, 0.043089f, 0.044286f, 0.122585f, 0.142129f, 0.126204f, 0.113894f, 0.110856f, 0.071844f, 0.012445f, -0.032116f, -0.109308f, -0.064708f, -0.141123f, -0.115953f, -0.156398f, 0.010384f, 0.006756f, 0.021041f} + }, + { + {0.020698f, -0.004062f, 0.005796f, 0.002807f, -0.010564f, 0.002857f, 0.009064f, -0.003562f, -0.001485f, 0.002784f, -0.004037f, -0.009849f, 0.010475f, -0.002352f, 0.018329f, -0.000190f, 0.001916f, 0.007867f, -0.011239f, -0.003773f, -0.012030f, -0.002116f, -0.005337f, 0.005000f, 0.008364f, 0.001960f, -0.003793f, -0.000792f, -0.000286f, 0.008061f, -0.006312f, -0.003987f, -0.008589f, 0.006467f, 0.003400f, 0.000002f, 0.001220f, -0.006929f, 0.005549f, -0.008141f, 0.000790f, -0.004164f, 0.006771f, 0.005495f, -0.009145f, 0.000942f, -0.010951f, 0.000511f, 0.003659f, 0.003977f, 0.004632f, 0.003670f, 0.001253f, -0.006299f, -0.004754f, 0.002588f, 0.004221f, -0.004512f, 0.010775f, -0.003460f, 0.001469f, -0.002504f, -0.000642f, 0.001611f, -0.001390f, 0.007874f, -0.005645f, 0.015354f, 0.002821f, 0.002428f, -0.003398f, -0.000368f, 0.001380f, 0.002407f, 0.000241f, 0.001749f, -0.009393f, -0.010067f, -0.007906f, 0.002016f, -0.004444f, -0.000991f, -0.001118f, 0.004467f, 0.019042f, -0.005287f, 0.002104f, -0.018193f, -0.009593f, 0.005207f, -0.008326f, -0.006920f, -0.002318f, -0.007850f, -0.001812f, 0.015346f, + -0.006518f, -0.010292f, 0.017074f, 0.013223f, -0.004582f, -0.003435f, 0.015639f, 0.004089f, 0.006175f, 0.002668f, 0.000936f, -0.004281f, -0.006337f, 0.005791f, -0.004679f, 0.004233f, 0.001834f, 0.001407f, -0.001994f, -0.005681f, -0.004000f, 0.003392f, -0.004633f, -0.007975f, -0.003255f, -0.003801f, -0.009491f, 0.010491f, 0.017034f, -0.010159f, 0.005662f, -0.000006f, -0.003637f, 0.002177f, -0.000269f, -0.000388f, -0.005505f, 0.009879f, -0.006048f, -0.008249f, 0.008829f, 0.002006f, -0.000315f, -0.001677f, 0.004910f, -0.000468f, -0.000003f, -0.003855f, -0.001374f, 0.008201f, -0.013272f, 0.003429f, 0.002583f, -0.004623f, -0.003092f, -0.006425f, -0.006494f, -0.029722f, -0.004625f, -0.010898f, -0.002608f, 0.002336f, -0.008030f, -0.018142f, 0.013309f, -0.004502f, 0.003140f, 0.008808f, -0.002766f, -0.000968f, -0.001053f, 0.004021f, -0.003086f, 0.014860f, -0.000570f, 0.011448f, 0.016930f, -0.020328f, 0.004293f, 0.014012f, 0.001014f, 0.002739f, 0.009789f, 0.017941f, 0.002618f, -0.004118f, 0.009106f, -0.002478f, -0.004655f, 0.003993f, 0.003244f, 0.003950f, -0.005033f, 0.018285f, -0.008433f, 0.004565f, + 0.006885f, -0.000148f, -0.000859f, -0.009018f, 0.001496f, -0.010436f, 0.008755f, -0.010658f, -0.008098f, 0.005815f, -0.009839f, 0.006725f, -0.006854f, 0.002800f, -0.005522f, 0.003725f, 0.008038f, 0.015603f, 0.004856f, 0.001745f, 0.007673f, 0.000102f, -0.013446f, 0.001793f, 0.003877f, 0.005160f, -0.003310f, 0.000749f, -0.001759f, 0.002641f, 0.007655f, 0.004662f, 0.010428f, 0.003733f, 0.001497f, -0.006003f, -0.003132f, 0.006233f, -0.010718f, 0.007956f, 0.005276f, 0.001554f, 0.010204f, -0.000623f, 0.005722f, 0.013749f, 0.008589f, 0.018044f, 0.003507f, -0.002804f, -0.018606f, 0.002789f, -0.011426f, -0.003966f, 0.001395f, 0.004019f, -0.007189f, -0.000192f, 0.017818f, -0.009356f, -0.000552f, -0.009362f, 0.004262f, -0.000160f, 0.003378f, 0.007029f, 0.008504f, -0.005713f, 0.006344f, 0.006354f, 0.012808f, 0.000151f, -0.012824f, 0.000862f, 0.013564f, -0.001747f, -0.001011f, -0.002324f, 0.009055f, -0.011195f, 0.000731f, 0.006546f, 0.009044f, 0.010518f, -0.004348f, -0.007811f, -0.001122f, 0.015267f, 0.001282f, 0.005072f, -0.013128f, -0.006498f, 0.002925f, 0.001890f, -0.002426f, 0.007575f, + -0.000798f, -0.002665f, 0.004507f, -0.009131f, 0.000303f, -0.002380f, 0.005346f, 0.007301f, -0.012749f, -0.004191f, 0.003900f, 0.006843f, -0.005500f, -0.006977f, 0.003442f, 0.007777f, -0.000752f, 0.003893f, 0.031788f, 0.016104f, 0.012243f, -0.011551f, -0.002597f, -0.016303f, -0.012447f, 0.018396f, 0.001132f, -0.010893f, -0.005769f, 0.004273f, -0.011223f, -0.000547f, 0.017745f, 0.007717f, -0.001278f, 0.006265f, 0.026248f, -0.017435f, 0.003740f, -0.002958f, -0.009203f, 0.015770f, 0.007275f, 0.008350f, -0.006550f, 0.007247f, 0.008280f, -0.002382f, 0.005107f, -0.001481f, -0.008208f, 0.001902f, 0.002290f, -0.001030f, 0.008485f, 0.002520f, -0.003863f, 0.010298f, -0.005175f, -0.004480f, -0.006406f, 0.003046f, 0.003251f, 0.000938f, 0.006606f, 0.001152f, 0.022066f, 0.001649f, -0.000613f, -0.005133f, -0.005329f, 0.005539f, -0.017464f, 0.000767f, 0.009531f, 0.008068f, -0.009687f, 0.013338f, -0.000340f, 0.005902f, 0.010123f, -0.003165f, 0.007739f, 0.006193f, -0.003421f, -0.009947f, -0.007780f, 0.005575f, 0.014819f, 0.003673f, -0.006804f, -0.004197f, -0.003664f, 0.008931f, 0.007511f, 0.002309f, + 0.020799f, 0.005465f, 0.012240f, -0.000394f, 0.002415f, 0.003671f, 0.003095f, -0.003394f, 0.012409f, -0.005360f, 0.013424f, -0.006816f, -0.005914f, 0.003627f, -0.009763f, -0.002694f, -0.003501f, 0.003818f, 0.005141f, -0.003833f, -0.014150f, 0.005935f, -0.017007f, -0.006806f, -0.003536f, -0.000657f, -0.003365f, 0.002857f, 0.013732f, 0.007864f, 0.000089f, -0.015603f, -0.015524f, 0.000016f, 0.008845f, -0.005742f, 0.000498f, -0.002470f, -0.007559f, -0.010420f, -0.000137f, 0.005859f, 0.012871f, 0.011878f, -0.002885f, 0.003184f, -0.018962f, 0.005048f, 0.010339f, 0.012243f, -0.003097f, 0.010968f, 0.001072f, 0.016392f, 0.008847f, 0.001970f, 0.006299f, -0.002354f, -0.006421f, -0.004852f, -0.003708f, 0.009203f, -0.006302f, -0.008391f, -0.009938f, 0.008697f, -0.005071f, -0.022181f, 0.001238f, 0.004172f, 0.007943f, 0.010212f, 0.020686f, -0.015245f, -0.012203f, -0.029575f, 0.015186f, 0.017648f, 0.004185f, 0.014445f, 0.003870f, -0.015839f, 0.000334f, -0.008187f, -0.001823f, 0.013263f, -0.017480f, -0.006829f, 0.008458f, 0.006084f, 0.019137f, -0.004870f, 0.009298f, -0.028663f, -0.012053f, 0.005559f, + 0.017937f, -0.012002f, -0.005765f, -0.012750f, -0.011838f, 0.005807f, 0.000199f, -0.001208f, 0.007023f, 0.001160f, 0.007271f, 0.019822f, -0.010831f, 0.019216f, 0.000854f, 0.002922f, 0.006569f, 0.003207f, -0.004136f, 0.005903f, -0.012425f, -0.003968f, -0.005782f, -0.002714f, -0.008616f, 0.011909f, 0.004516f, 0.035058f, 0.003413f, -0.003417f, -0.006852f, 0.000536f, -0.005304f, 0.017884f, -0.009241f, 0.001521f, -0.018663f, 0.014941f, 0.017202f, -0.018410f, 0.013399f, 0.010064f, 0.007334f, -0.010233f, -0.006725f, 0.015298f, 0.007222f, -0.023557f, 0.014359f, -0.011268f, -0.002373f, 0.005159f, -0.001842f, 0.002434f, 0.009027f, 0.006912f, -0.004682f, 0.012001f, 0.002718f, -0.000525f, -0.010041f, -0.017726f, 0.006545f, -0.009619f, -0.003397f, 0.016664f, -0.022625f, -0.009808f, -0.016552f, -0.001930f, 0.014966f, -0.001537f, -0.011563f, -0.016823f, -0.018248f, 0.007134f, 0.020244f, -0.005804f, 0.012836f, 0.018486f, -0.004659f, -0.004393f, 0.007791f, 0.010265f, 0.022604f, -0.003263f, 0.012949f, 0.001759f, 0.026806f, 0.019289f, 0.005847f, -0.006182f, 0.003228f, -0.014532f, 0.026084f, 0.005973f, + -0.010642f, -0.012410f, 0.015321f, 0.012516f, 0.009571f, 0.006492f, 0.005012f, 0.013354f, -0.005046f, 0.006008f, -0.008059f, 0.001478f, 0.001400f, -0.013005f, -0.017014f, -0.005996f, -0.011802f, 0.008367f, -0.006921f, -0.005306f, -0.018597f, -0.011745f, 0.004423f, -0.006146f, -0.001604f, 0.009788f, 0.020044f, 0.024958f, 0.013339f, 0.010699f, -0.008434f, -0.019244f, 0.000737f, -0.013284f, -0.032147f, -0.036497f, -0.012007f, 0.002613f, 0.017518f, -0.012410f, 0.008291f, 0.006391f, -0.001276f, 0.027825f, -0.004157f, 0.026240f, -0.015573f, 0.008174f, 0.007621f, 0.000992f, -0.023855f, -0.008979f, -0.009182f, -0.025854f, 0.008637f, -0.005880f, 0.005228f, -0.000911f, 0.009243f, 0.000733f, -0.010764f, 0.006334f, -0.017446f, 0.013430f, 0.007056f, 0.029958f, -0.001542f, 0.001739f, 0.026321f, -0.022621f, 0.020396f, 0.026225f, -0.016062f, 0.017242f, -0.007009f, -0.006680f, -0.013458f, 0.004355f, 0.002920f, 0.019038f, 0.011468f, -0.003569f, -0.007568f, -0.014193f, 0.008351f, 0.010704f, -0.017550f, -0.006691f, 0.016483f, -0.027543f, 0.002798f, -0.020929f, 0.012736f, 0.002612f, -0.000188f, 0.008189f, + -0.007225f, 0.004109f, 0.026966f, -0.009282f, 0.006356f, 0.014705f, 0.008852f, 0.003371f, -0.013096f, 0.008353f, 0.006335f, -0.005658f, -0.021179f, 0.003286f, -0.003141f, -0.013260f, -0.014743f, 0.043628f, -0.015975f, 0.008106f, 0.006729f, 0.015273f, 0.005339f, 0.009087f, 0.022389f, -0.017459f, -0.010056f, -0.001858f, 0.030988f, -0.012271f, -0.012637f, -0.015647f, 0.007947f, 0.004642f, 0.017127f, -0.035405f, 0.000709f, 0.000265f, -0.001997f, 0.017477f, -0.003983f, 0.013366f, 0.026056f, -0.019151f, -0.008007f, 0.006834f, -0.013642f, -0.018107f, 0.012216f, -0.016858f, 0.024518f, -0.004617f, -0.024503f, -0.003784f, -0.013916f, 0.007400f, 0.020064f, -0.000883f, 0.010328f, -0.001727f, 0.004194f, 0.022961f, 0.001088f, 0.016509f, 0.007095f, -0.013272f, 0.013658f, 0.010838f, 0.001948f, 0.009010f, 0.034067f, -0.006136f, -0.014754f, 0.007441f, -0.018765f, 0.000918f, 0.032599f, 0.010316f, 0.005524f, -0.006780f, -0.008741f, -0.006905f, -0.010873f, 0.018610f, -0.012186f, -0.004321f, -0.007328f, 0.020853f, -0.039778f, 0.012219f, 0.015015f, 0.021543f, 0.006516f, 0.065024f, 0.019503f, -0.011891f, + -0.015701f, -0.013320f, 0.047280f, -0.040612f, 0.003388f, 0.015962f, 0.002533f, -0.021957f, -0.004780f, 0.011159f, -0.002132f, 0.002696f, 0.019811f, -0.020086f, -0.016726f, 0.008528f, 0.025797f, 0.015926f, 0.006912f, -0.012110f, -0.011719f, -0.011349f, -0.013162f, 0.012932f, 0.005421f, 0.018432f, 0.014948f, 0.008642f, -0.018746f, -0.008724f, -0.019972f, -0.003614f, -0.012907f, -0.030420f, -0.005215f, 0.014336f, 0.003644f, -0.013768f, -0.013849f, 0.000979f, 0.008111f, 0.020009f, 0.003126f, 0.010524f, 0.003502f, 0.038152f, -0.031706f, 0.022051f, 0.004746f, -0.032212f, -0.005179f, -0.009019f, -0.007355f, 0.006121f, -0.013623f, 0.009867f, 0.007261f, 0.016038f, -0.017143f, 0.007725f, 0.029890f, 0.015002f, 0.046941f, -0.008695f, -0.000198f, -0.009543f, -0.004897f, 0.003213f, -0.000189f, -0.041396f, 0.019763f, 0.000641f, -0.003421f, 0.014205f, -0.003210f, -0.022534f, 0.006004f, 0.011079f, 0.000231f, -0.014180f, -0.008627f, -0.029750f, -0.033740f, 0.006298f, -0.014620f, -0.008118f, 0.005655f, -0.001171f, -0.003026f, -0.016247f, -0.007066f, -0.001075f, 0.012596f, 0.011918f, -0.018389f, -0.011808f, + 0.012364f, -0.017918f, -0.007868f, -0.028735f, 0.027249f, -0.004536f, 0.024562f, 0.001047f, 0.009427f, 0.024593f, 0.019741f, -0.012523f, 0.006148f, 0.011915f, -0.013454f, -0.006757f, 0.012953f, -0.005921f, -0.030594f, -0.006953f, -0.021415f, 0.030389f, -0.003227f, -0.009696f, -0.018017f, -0.027729f, 0.009496f, 0.004233f, 0.006215f, 0.011624f, 0.000242f, -0.006259f, 0.013516f, 0.001990f, -0.002776f, 0.003253f, -0.007853f, 0.019316f, -0.005243f, 0.011532f, 0.038668f, 0.006967f, 0.006871f, 0.007315f, 0.013843f, -0.035929f, -0.028199f, 0.008386f, -0.030880f, 0.018498f, -0.005343f, 0.021180f, 0.004687f, 0.042944f, 0.014617f, -0.012802f, -0.002014f, -0.056230f, -0.038142f, 0.013610f, -0.014800f, -0.032899f, -0.048043f, -0.002038f, 0.004498f, -0.010318f, -0.007189f, 0.045529f, 0.012744f, -0.034507f, 0.007557f, -0.021446f, -0.016734f, -0.017622f, -0.029514f, -0.005962f, 0.003208f, -0.042330f, -0.038690f, -0.015917f, 0.006850f, 0.002761f, 0.024041f, 0.018936f, 0.012775f, -0.011087f, -0.000104f, 0.007992f, -0.020931f, -0.013008f, -0.007015f, 0.005782f, -0.019722f, -0.013413f, 0.013733f, 0.006946f, + -0.000445f, -0.004375f, -0.003665f, 0.009983f, -0.028644f, -0.017711f, -0.014145f, 0.017590f, -0.022296f, 0.013646f, 0.025314f, 0.033385f, -0.002513f, 0.008514f, -0.008520f, -0.018195f, -0.022153f, -0.007480f, 0.021150f, 0.006466f, -0.039548f, 0.000059f, 0.039932f, -0.028583f, 0.000697f, -0.007492f, 0.001457f, 0.007812f, 0.019841f, -0.006145f, 0.005662f, 0.022803f, 0.016034f, 0.008726f, -0.020125f, -0.025508f, -0.033887f, 0.019366f, -0.027707f, -0.045279f, 0.006972f, -0.026938f, -0.017988f, 0.056767f, 0.002292f, 0.042893f, 0.035773f, -0.005944f, 0.037754f, 0.055791f, 0.037126f, -0.046985f, -0.007935f, -0.021001f, -0.024305f, -0.012410f, -0.000480f, -0.018429f, 0.040889f, 0.014176f, 0.021782f, -0.018221f, 0.020787f, 0.018746f, 0.004239f, -0.023615f, -0.021106f, 0.041967f, -0.008826f, -0.035925f, -0.004030f, -0.041823f, -0.007751f, 0.013834f, -0.017086f, 0.002722f, -0.037005f, 0.018102f, 0.030711f, 0.019264f, -0.006244f, -0.015575f, -0.008021f, -0.002493f, -0.007565f, -0.014393f, -0.045175f, 0.031465f, 0.015029f, 0.017441f, 0.016901f, -0.022698f, 0.036905f, 0.007013f, -0.013250f, -0.006325f, + -0.032355f, -0.011174f, 0.018200f, 0.014794f, 0.031190f, -0.000911f, -0.039513f, -0.063336f, -0.005790f, 0.002678f, -0.001750f, -0.020269f, -0.035553f, -0.002026f, 0.019496f, -0.005772f, -0.017127f, 0.070328f, 0.044731f, -0.006535f, -0.040854f, 0.008435f, 0.020738f, 0.011599f, 0.030203f, 0.044740f, -0.019565f, 0.003502f, -0.039893f, 0.011179f, 0.003604f, -0.015783f, 0.072689f, 0.027238f, 0.062775f, 0.025592f, 0.016441f, -0.054616f, 0.001184f, 0.030161f, 0.005894f, -0.029168f, 0.012626f, -0.044485f, -0.016895f, 0.002842f, 0.013763f, -0.013471f, -0.008174f, 0.009388f, 0.008287f, 0.002981f, 0.039700f, 0.024140f, 0.006964f, -0.015933f, 0.027548f, -0.017805f, -0.012043f, -0.026074f, -0.007994f, 0.033422f, -0.052573f, -0.001092f, 0.024564f, -0.026841f, -0.007622f, 0.009824f, 0.009761f, 0.048817f, -0.001995f, -0.000899f, -0.022033f, 0.047681f, -0.020423f, 0.005680f, 0.006112f, 0.032860f, -0.006588f, -0.012443f, 0.032968f, -0.053878f, 0.015384f, 0.004680f, -0.020497f, 0.042323f, -0.051482f, -0.007063f, -0.015550f, -0.035824f, -0.015014f, -0.002208f, 0.019527f, 0.038071f, 0.054794f, -0.066242f, + 0.016897f, 0.005830f, 0.080622f, 0.021183f, 0.013646f, 0.000150f, 0.038483f, 0.013389f, -0.062258f, -0.006678f, 0.063135f, -0.016469f, -0.015199f, 0.008294f, -0.005963f, 0.004413f, -0.013203f, 0.070514f, 0.075405f, -0.038084f, 0.017366f, 0.023969f, 0.010029f, 0.025239f, -0.034898f, -0.043080f, 0.034861f, 0.013591f, -0.026790f, -0.040731f, -0.014308f, -0.011113f, 0.039951f, 0.037552f, 0.017933f, -0.033381f, 0.020048f, -0.011786f, 0.012584f, 0.007050f, 0.016931f, 0.043468f, 0.008317f, -0.080768f, -0.026835f, 0.021289f, -0.034878f, 0.016244f, 0.036122f, 0.018333f, 0.063226f, -0.014625f, -0.095735f, 0.004566f, -0.038294f, 0.040400f, 0.028616f, -0.002759f, -0.020495f, 0.037686f, -0.046033f, 0.000630f, -0.024982f, 0.031204f, 0.029576f, 0.035950f, 0.027339f, -0.009080f, -0.039463f, -0.102523f, -0.056318f, -0.052016f, 0.008735f, -0.026721f, -0.026305f, 0.019001f, -0.058959f, 0.001270f, -0.036780f, -0.017620f, 0.011704f, -0.020067f, -0.003603f, 0.002186f, -0.091920f, -0.010683f, 0.057064f, -0.068224f, 0.004654f, 0.028888f, -0.001522f, 0.020983f, -0.007547f, -0.053563f, -0.006930f, 0.032959f, + 0.008029f, 0.047894f, 0.028596f, -0.045644f, -0.054201f, -0.004532f, -0.024692f, -0.005031f, -0.087877f, 0.034378f, 0.031806f, 0.062253f, 0.025110f, 0.056839f, -0.025741f, 0.009726f, 0.053949f, -0.015518f, 0.058926f, 0.019142f, 0.030201f, 0.013016f, -0.017595f, 0.032222f, -0.039072f, 0.003795f, 0.075161f, -0.057973f, 0.003572f, -0.076059f, -0.036992f, -0.054271f, -0.039954f, -0.008165f, 0.002307f, -0.016889f, -0.061093f, -0.009348f, -0.100250f, 0.112594f, 0.037546f, 0.001671f, -0.016493f, -0.026154f, 0.004921f, -0.048548f, 0.007983f, -0.073370f, 0.000829f, 0.003321f, 0.015853f, 0.045934f, 0.067603f, 0.000094f, -0.113558f, -0.056511f, 0.049134f, -0.034241f, -0.016244f, 0.019381f, -0.043238f, 0.030253f, 0.051971f, 0.017537f, -0.022166f, -0.032180f, 0.015884f, -0.041219f, 0.064273f, 0.051356f, 0.081165f, -0.058507f, -0.069388f, -0.019080f, -0.000614f, -0.037059f, 0.048127f, 0.055690f, -0.041291f, -0.001685f, -0.074407f, -0.023847f, -0.034717f, -0.069714f, 0.022526f, 0.054487f, 0.035043f, -0.046003f, -0.016135f, 0.003370f, 0.038901f, 0.003784f, -0.001668f, 0.012271f, -0.003174f, -0.021171f, + -0.059871f, -0.043471f, 0.016903f, -0.007881f, -0.031971f, 0.033765f, 0.033323f, 0.018070f, -0.061111f, -0.059402f, 0.055281f, 0.029967f, 0.041550f, -0.043324f, -0.102436f, -0.022444f, 0.045562f, 0.040587f, -0.008750f, 0.102206f, -0.010978f, 0.102619f, -0.156737f, -0.200577f, -0.078393f, -0.122311f, 0.004429f, 0.042695f, 0.027929f, 0.124793f, -0.010367f, -0.012150f, 0.029160f, -0.029295f, -0.094672f, -0.093459f, -0.091266f, 0.078496f, 0.080458f, -0.023690f, 0.035247f, 0.009562f, 0.025830f, -0.079583f, 0.069642f, 0.047389f, 0.023792f, 0.059378f, -0.034007f, 0.019646f, -0.101127f, -0.053822f, 0.030089f, 0.034707f, 0.020316f, 0.009633f, 0.015562f, 0.023012f, -0.010057f, 0.114280f, 0.013188f, 0.069543f, 0.023631f, -0.039763f, 0.092554f, -0.016623f, 0.037776f, -0.002624f, 0.034646f, -0.008050f, 0.000367f, 0.014998f, 0.047504f, 0.008218f, 0.035291f, -0.002816f, -0.004582f, 0.065825f, 0.010314f, -0.020527f, 0.003434f, -0.011344f, -0.033609f, -0.016232f, 0.022259f, 0.006996f, -0.078044f, -0.026137f, 0.012411f, 0.011743f, 0.086259f, 0.061236f, -0.080640f, -0.053306f, 0.009315f, -0.026363f, + 0.095004f, 0.000547f, 0.087963f, -0.069064f, 0.045805f, -0.001036f, 0.007850f, 0.029133f, 0.091042f, 0.045456f, 0.015525f, 0.064902f, 0.034834f, -0.050525f, -0.072915f, 0.052430f, -0.055848f, 0.022496f, -0.073381f, -0.023192f, -0.116294f, 0.099884f, -0.008018f, -0.125895f, -0.036619f, -0.005506f, 0.009860f, 0.016477f, -0.084817f, -0.042163f, 0.069768f, -0.023276f, 0.023679f, -0.027096f, 0.003979f, 0.097618f, 0.145410f, 0.016023f, -0.008130f, 0.080483f, 0.029806f, 0.037014f, 0.089389f, 0.008412f, 0.053290f, 0.074055f, 0.062611f, -0.018626f, 0.025991f, 0.065345f, 0.079364f, 0.073706f, 0.098198f, 0.063891f, 0.126031f, 0.143089f, 0.096455f, 0.115908f, 0.072341f, 0.000172f, 0.034967f, 0.027637f, -0.028857f, -0.018846f, 0.020464f, 0.072100f, 0.013747f, 0.012289f, -0.000836f, 0.040858f, 0.093458f, 0.082995f, 0.157316f, 0.042194f, -0.081936f, 0.043465f, 0.001536f, 0.044617f, -0.042019f, 0.074298f, -0.114232f, -0.135186f, 0.041183f, 0.160860f, 0.064331f, 0.042915f, -0.184002f, 0.015075f, 0.069071f, 0.125789f, 0.147642f, -0.047495f, 0.006733f, -0.239738f, -0.173812f, 0.087840f, + 0.088275f, -0.119879f, -0.042988f, 0.117667f, 0.144307f, -0.161955f, -0.059227f, 0.054631f, -0.037995f, 0.024580f, -0.051568f, 0.046681f, -0.042811f, 0.006730f, 0.005542f, -0.028429f, 0.017517f, -0.002311f, -0.009301f, -0.016018f, -0.033170f, -0.015260f, 0.013973f, -0.000179f, -0.033959f, 0.032604f, -0.030735f, -0.017333f, -0.025973f, -0.001222f, -0.024673f, 0.056430f, 0.003853f, 0.011447f, -0.011373f, 0.011437f, -0.012473f, 0.012777f, 0.042370f, 0.046275f, -0.008922f, 0.012529f, 0.023572f, 0.040176f, -0.023204f, 0.024312f, -0.020295f, 0.049328f, -0.009737f, -0.034837f, 0.021744f, -0.017637f, -0.012096f, 0.001992f, -0.000752f, 0.019062f, -0.008513f, -0.034510f, -0.026215f, 0.000965f, 0.009036f, -0.056807f, 0.019169f, -0.011476f, -0.002799f, 0.006330f, -0.013031f, -0.011551f, 0.006804f, -0.010440f, 0.007886f, -0.029899f, 0.033029f, -0.095532f, 0.048126f, -0.039387f, 0.059309f, -0.039191f, 0.006238f, -0.025358f, 0.118388f, 0.071660f, -0.039049f, -0.045057f, -0.003991f, 0.146884f, 0.061358f, 0.020388f, 0.040583f, -0.035939f, -0.045192f, 0.012235f, 0.028347f, 0.007097f, 0.002345f, -0.016053f, + -0.012489f, 0.013409f, 0.013787f, 0.033769f, 0.014877f, -0.018977f, -0.008543f, -0.009688f, -0.019053f, -0.000811f, 0.002796f, 0.008470f, 0.011081f, -0.000345f, -0.005513f, 0.012916f, -0.040097f, -0.015807f, 0.016899f, 0.024323f, 0.030512f, -0.018494f, -0.010986f, -0.019667f, 0.031127f, 0.021044f, -0.006908f, 0.009026f, -0.037823f, -0.033141f, 0.028503f, 0.021635f, 0.006207f, -0.057315f, -0.029837f, 0.000814f, 0.008183f, 0.035214f, 0.025128f, -0.005870f, 0.009578f, 0.011188f, -0.018784f, 0.013913f, 0.016000f, -0.007424f, -0.012044f, 0.007740f, -0.020102f, -0.001159f, -0.004542f, -0.016510f, -0.021260f, 0.023805f, 0.004831f, 0.001136f, 0.038406f, 0.039740f, 0.020066f, 0.017632f, -0.042870f, -0.116740f, 0.040122f, 0.215693f, 0.168860f, 0.162459f, 0.051334f, -0.150487f, -0.090975f, -0.133418f, -0.134639f, -0.122000f, -0.043257f, 0.066024f, 0.084289f, 0.133686f, 0.118993f, 0.072118f, 0.011405f, 0.011761f, -0.058636f, -0.091607f, -0.131792f, -0.050503f, -0.036363f, 0.011609f, -0.008207f, 0.066274f, 0.044070f, 0.018805f, 0.088035f, 0.049551f, 0.037148f, -0.008217f, 0.032454f, -0.060917f, + -0.046489f, -0.038280f, -0.044968f, -0.058654f, -0.035934f, -0.023958f, -0.059982f, -0.041726f, 0.014535f, 0.085580f, 0.082533f, 0.093799f, 0.073465f, 0.107263f, 0.017569f, 0.026242f, -0.073531f, -0.055287f, -0.047209f, -0.110420f, -0.109346f, -0.099143f, -0.047254f, -0.059347f, 0.011764f, 0.039093f, 0.058877f, 0.118272f, 0.117740f, 0.110520f, 0.100756f, 0.085361f, 0.017235f, -0.057918f, -0.087980f, -0.159559f, -0.133794f, -0.103123f, -0.131920f, -0.067991f, -0.018778f, 0.005163f, 0.071053f, -0.011663f}, + {0.021736f, -0.007451f, 0.005663f, -0.000828f, -0.000604f, -0.006723f, 0.003772f, 0.009929f, -0.005600f, -0.002551f, 0.001406f, -0.004267f, -0.006998f, 0.001082f, 0.000146f, -0.006679f, -0.011418f, 0.009130f, -0.004750f, 0.015686f, -0.000866f, 0.008794f, -0.012468f, -0.000567f, 0.004503f, -0.002774f, -0.006592f, -0.002739f, -0.004715f, -0.000813f, -0.003901f, 0.000418f, -0.000817f, -0.005793f, 0.003605f, -0.007730f, 0.009132f, -0.003228f, -0.002527f, -0.001496f, 0.010825f, 0.010146f, 0.000393f, 0.007538f, 0.004836f, -0.002385f, -0.002277f, 0.010106f, -0.005035f, -0.011644f, -0.000156f, -0.002499f, 0.012622f, 0.000651f, 0.001579f, -0.007943f, 0.000022f, -0.004172f, -0.004397f, -0.002159f, -0.004740f, 0.003444f, -0.006852f, -0.003069f, 0.001748f, -0.002541f, -0.007346f, -0.010273f, -0.000200f, 0.005892f, 0.003096f, 0.004963f, -0.000100f, -0.001260f, 0.001842f, -0.000646f, -0.006901f, -0.007122f, -0.012136f, 0.004529f, -0.006268f, -0.010683f, -0.007918f, 0.005802f, -0.014980f, -0.007288f, -0.018175f, 0.006728f, 0.007154f, 0.010602f, 0.004760f, -0.005488f, 0.012590f, -0.008443f, 0.002001f, 0.000914f, + -0.002590f, -0.008961f, -0.005601f, -0.009921f, -0.000277f, -0.003855f, 0.005217f, 0.004542f, -0.005733f, -0.000982f, -0.001853f, -0.009062f, -0.001111f, -0.001530f, 0.003593f, 0.000448f, 0.008045f, -0.002501f, 0.010363f, -0.004186f, -0.000588f, 0.002395f, -0.008833f, 0.006235f, -0.003230f, -0.002506f, 0.000162f, -0.001593f, 0.003480f, -0.016377f, 0.007089f, 0.010806f, 0.000645f, 0.006386f, 0.002314f, -0.006943f, -0.001863f, -0.007595f, 0.010240f, -0.002393f, -0.007845f, 0.007237f, -0.011142f, 0.000957f, 0.002987f, -0.011105f, 0.000393f, -0.002266f, -0.005427f, 0.004393f, -0.000157f, 0.001394f, -0.006497f, -0.003276f, -0.019570f, -0.002210f, 0.003504f, -0.026714f, -0.015807f, 0.002798f, -0.008464f, 0.001493f, -0.008733f, -0.015402f, -0.009989f, 0.017175f, 0.010253f, -0.002824f, 0.011909f, 0.002624f, 0.003067f, 0.003157f, -0.005494f, -0.001679f, 0.009730f, -0.007805f, 0.004532f, 0.006830f, -0.007232f, -0.011892f, 0.005609f, -0.009740f, 0.001294f, 0.005396f, 0.014361f, -0.003300f, -0.006574f, -0.006074f, 0.002450f, 0.007576f, -0.010182f, -0.000194f, 0.008858f, 0.003277f, 0.001185f, -0.000672f, + -0.000512f, 0.011055f, -0.000121f, 0.010121f, 0.007036f, -0.002694f, 0.007027f, -0.002454f, -0.000259f, -0.001141f, -0.018292f, 0.006363f, 0.010934f, -0.006199f, -0.003071f, 0.002477f, 0.003302f, 0.002901f, 0.002106f, -0.001109f, -0.001766f, 0.000535f, -0.004175f, 0.012678f, -0.005174f, 0.001386f, 0.007534f, 0.005441f, -0.003929f, 0.004931f, 0.002282f, 0.003159f, 0.007742f, 0.006030f, -0.008500f, 0.009379f, 0.011405f, -0.004071f, -0.010140f, 0.013075f, 0.009194f, 0.020439f, -0.003067f, 0.001861f, 0.006767f, -0.010489f, -0.001704f, 0.003662f, -0.003782f, -0.014112f, -0.000416f, 0.001113f, 0.009627f, -0.011470f, -0.026711f, -0.022267f, -0.013075f, 0.004847f, 0.013311f, -0.013351f, 0.007723f, -0.006739f, 0.010391f, 0.007365f, 0.007187f, 0.011564f, 0.007093f, -0.009749f, -0.008198f, 0.001232f, 0.006843f, -0.000889f, 0.001010f, 0.016307f, 0.000344f, 0.002499f, 0.008805f, 0.008364f, 0.001954f, -0.000178f, 0.021170f, -0.001885f, -0.007236f, -0.002784f, 0.005234f, 0.005564f, -0.003450f, 0.010629f, 0.002756f, 0.005468f, -0.007349f, -0.007558f, -0.002088f, -0.005194f, 0.003346f, -0.004258f, + 0.012785f, -0.014558f, -0.011736f, 0.014462f, -0.000809f, -0.001312f, -0.016718f, 0.004717f, -0.007610f, 0.008664f, -0.006313f, -0.020330f, 0.000217f, 0.008998f, -0.007039f, 0.011796f, -0.006202f, 0.004729f, 0.032664f, 0.007370f, 0.008911f, 0.003450f, -0.007125f, 0.015292f, -0.007074f, -0.004657f, 0.020070f, -0.001742f, 0.016202f, -0.001930f, -0.017889f, 0.006184f, -0.005862f, 0.019819f, 0.010881f, -0.001649f, -0.017645f, -0.012815f, 0.016930f, 0.019438f, -0.022641f, 0.011266f, 0.009561f, 0.006673f, -0.001147f, 0.001980f, 0.002284f, -0.001998f, 0.023134f, -0.001291f, -0.003512f, -0.006534f, -0.007233f, -0.010003f, -0.002798f, -0.000785f, -0.012686f, -0.004941f, 0.003868f, -0.009413f, 0.000971f, 0.000244f, 0.014102f, -0.005397f, 0.000932f, 0.006038f, 0.001068f, 0.012713f, 0.006435f, 0.013219f, 0.007282f, 0.003793f, -0.013691f, 0.001161f, -0.009943f, -0.010279f, 0.003084f, 0.013422f, 0.000226f, 0.011448f, -0.004142f, -0.009403f, -0.001179f, 0.000090f, 0.004484f, 0.007609f, -0.002655f, -0.000678f, -0.003201f, 0.003840f, 0.004557f, -0.012554f, 0.003994f, 0.001187f, 0.009281f, 0.006248f, + 0.007478f, 0.020666f, 0.011017f, -0.009227f, -0.007984f, -0.022625f, -0.001369f, -0.000712f, -0.011894f, 0.004321f, 0.018058f, 0.001938f, -0.014133f, 0.012908f, 0.012545f, -0.001581f, 0.005021f, 0.012389f, 0.003010f, -0.011832f, -0.001788f, 0.026541f, 0.013194f, 0.002432f, -0.017764f, -0.006711f, 0.016117f, 0.005176f, -0.002484f, 0.008697f, 0.008056f, 0.008094f, -0.000169f, 0.016223f, -0.000268f, -0.002619f, 0.004068f, -0.008793f, -0.011008f, -0.001085f, 0.001666f, 0.005632f, 0.003215f, -0.010747f, 0.010092f, 0.017444f, 0.009050f, -0.001177f, 0.013175f, -0.016016f, 0.008443f, -0.009887f, 0.009280f, -0.003387f, -0.011332f, -0.001458f, -0.014690f, -0.024438f, -0.008950f, -0.010386f, -0.001559f, -0.001266f, -0.012731f, 0.001087f, -0.004252f, 0.005667f, 0.004199f, 0.006762f, -0.001871f, 0.001410f, -0.012352f, -0.000420f, 0.001414f, 0.013077f, -0.006461f, -0.022667f, -0.013816f, 0.030375f, -0.006087f, -0.007513f, 0.002544f, -0.001781f, 0.034040f, -0.010427f, -0.017243f, -0.000247f, -0.016994f, 0.003736f, 0.014888f, 0.014521f, 0.005561f, -0.031603f, 0.026180f, -0.020689f, 0.011401f, -0.014359f, + -0.009617f, -0.008337f, 0.013482f, 0.012966f, -0.019659f, 0.000938f, 0.009750f, -0.007033f, 0.004924f, 0.005321f, -0.006556f, 0.000258f, -0.015997f, -0.012016f, -0.025139f, 0.014708f, -0.002749f, 0.025521f, -0.011307f, 0.004986f, 0.018438f, -0.005086f, -0.004248f, -0.008469f, 0.021045f, 0.013926f, -0.023633f, 0.006295f, -0.012899f, -0.005424f, -0.004340f, -0.014596f, 0.009425f, 0.003637f, 0.022857f, 0.014486f, -0.026049f, -0.005272f, -0.010440f, 0.015102f, 0.006881f, 0.000525f, -0.014481f, 0.001514f, -0.000146f, 0.012491f, -0.000579f, 0.000761f, -0.016461f, -0.001346f, 0.015064f, -0.012891f, 0.004482f, -0.004587f, -0.000262f, -0.009977f, 0.001060f, 0.003383f, 0.007534f, -0.008347f, 0.000510f, -0.017618f, -0.002278f, -0.020343f, 0.003090f, -0.005128f, 0.011560f, -0.000874f, 0.009778f, -0.013984f, -0.026336f, 0.005481f, 0.017484f, 0.002209f, -0.002288f, 0.013642f, 0.009078f, -0.021552f, -0.000536f, -0.008216f, 0.026921f, -0.001357f, 0.002936f, 0.001966f, 0.000039f, -0.001029f, -0.009989f, 0.021304f, -0.002099f, -0.030687f, -0.006011f, 0.018243f, -0.012206f, 0.002837f, -0.000810f, 0.002208f, + -0.004159f, 0.002664f, -0.005968f, 0.006987f, -0.012070f, 0.010692f, 0.015045f, -0.012447f, -0.003508f, -0.007529f, -0.021663f, 0.008110f, -0.015528f, 0.012701f, -0.013726f, -0.023346f, -0.006760f, 0.013132f, -0.004775f, -0.008699f, 0.008557f, 0.012022f, 0.006640f, 0.013173f, 0.023027f, 0.018316f, -0.001805f, 0.002915f, 0.002647f, -0.013578f, 0.001878f, -0.014352f, -0.014861f, 0.006430f, -0.011141f, -0.030994f, -0.024035f, 0.013609f, 0.027908f, -0.000988f, -0.000494f, 0.004144f, -0.011792f, -0.007217f, -0.029885f, -0.017463f, -0.007651f, -0.001239f, -0.021403f, 0.031315f, 0.007575f, 0.017017f, -0.019382f, -0.025461f, -0.017259f, -0.008111f, 0.006122f, -0.028764f, -0.011239f, 0.011981f, -0.004277f, -0.034778f, -0.010222f, 0.003656f, 0.001643f, 0.020104f, 0.008369f, -0.007501f, -0.014735f, 0.019087f, -0.010252f, -0.002061f, 0.016432f, 0.003565f, -0.015006f, -0.009310f, 0.000146f, -0.028302f, 0.008352f, 0.020433f, -0.007804f, -0.012652f, 0.004618f, -0.014760f, -0.003582f, 0.001872f, -0.007265f, -0.007648f, 0.008845f, -0.011235f, -0.020206f, 0.009918f, -0.010759f, -0.017212f, -0.020642f, -0.012111f, + 0.004065f, -0.009865f, 0.005631f, 0.026642f, 0.017568f, -0.004286f, 0.028389f, 0.025757f, -0.009295f, 0.002795f, 0.009892f, -0.014683f, -0.006133f, -0.029910f, 0.006633f, -0.008755f, -0.018673f, 0.048205f, -0.001499f, 0.029418f, -0.014568f, -0.042911f, 0.012586f, 0.003325f, -0.001238f, -0.020280f, -0.001503f, -0.013458f, 0.034166f, 0.024384f, 0.022526f, 0.015839f, -0.025954f, -0.000435f, 0.004113f, 0.023199f, -0.039633f, -0.004807f, -0.009326f, -0.011967f, 0.006528f, -0.013448f, 0.005660f, 0.008719f, 0.007158f, 0.006938f, 0.009820f, -0.002981f, -0.003422f, -0.019689f, -0.004116f, -0.003144f, 0.019698f, -0.000151f, -0.017001f, -0.004261f, 0.021394f, -0.002549f, 0.012676f, 0.015483f, -0.010755f, -0.006779f, -0.025298f, -0.015099f, 0.051127f, 0.013263f, 0.023051f, 0.012050f, 0.003468f, 0.001869f, -0.031528f, 0.018979f, 0.003521f, 0.005568f, 0.016865f, 0.017848f, 0.028268f, -0.031988f, -0.012765f, -0.017752f, -0.001838f, 0.004428f, -0.003877f, -0.009002f, -0.004980f, -0.026914f, -0.033560f, -0.022068f, -0.031605f, -0.004417f, -0.020897f, -0.035846f, -0.015056f, 0.065211f, 0.014800f, -0.009497f, + -0.013542f, 0.001994f, -0.020966f, -0.041059f, 0.030089f, -0.000023f, 0.019330f, -0.014845f, 0.013949f, 0.033292f, -0.003413f, 0.003496f, -0.008554f, 0.028887f, 0.024421f, 0.009218f, -0.039665f, 0.002516f, 0.005650f, 0.024041f, 0.035363f, -0.010911f, -0.007466f, -0.005159f, 0.009326f, 0.012190f, 0.010338f, -0.018519f, 0.007991f, -0.021310f, 0.015619f, 0.020521f, -0.010352f, -0.021648f, 0.012989f, -0.023550f, -0.021106f, -0.001682f, 0.005816f, 0.028840f, 0.003349f, -0.005009f, 0.025083f, -0.005707f, 0.022520f, 0.040921f, 0.020861f, -0.000701f, -0.026851f, -0.003815f, -0.015507f, -0.013839f, 0.026746f, 0.008985f, -0.027096f, -0.001957f, -0.020653f, -0.007042f, 0.035707f, 0.014386f, 0.005427f, 0.013035f, 0.021826f, 0.008641f, -0.028098f, 0.011978f, 0.024812f, 0.004948f, -0.018354f, 0.004188f, 0.004091f, -0.000829f, -0.012665f, 0.016036f, 0.010462f, 0.009482f, -0.015875f, -0.000761f, -0.020259f, -0.047607f, 0.016486f, -0.018923f, 0.005311f, 0.001759f, 0.033470f, -0.022940f, -0.020276f, -0.008471f, -0.009209f, -0.012221f, 0.024812f, -0.021787f, -0.030715f, 0.009313f, -0.057508f, 0.001770f, + -0.010645f, -0.024333f, 0.031294f, -0.001925f, -0.001540f, 0.013113f, -0.011966f, 0.009855f, -0.002742f, -0.034438f, -0.037192f, -0.000375f, 0.008421f, 0.022028f, 0.011184f, -0.002562f, -0.003374f, -0.021755f, -0.009608f, 0.021639f, -0.033301f, 0.046788f, 0.028694f, 0.006060f, 0.035615f, -0.023450f, -0.008941f, -0.021559f, -0.020604f, -0.009802f, 0.017071f, 0.043831f, 0.001747f, -0.023521f, -0.002351f, 0.001426f, -0.000791f, -0.003252f, -0.012187f, 0.010907f, 0.013139f, 0.028639f, 0.001920f, 0.032300f, 0.020289f, 0.007491f, 0.002552f, 0.005045f, -0.046347f, 0.023999f, -0.001174f, -0.032716f, 0.028232f, -0.003668f, 0.038478f, -0.016440f, -0.015216f, -0.087327f, -0.008783f, 0.054826f, -0.011615f, 0.003545f, 0.044352f, -0.008717f, -0.001288f, 0.007696f, 0.010525f, -0.011802f, 0.010523f, -0.002643f, -0.017176f, 0.017078f, 0.015829f, -0.049914f, 0.004453f, -0.044126f, -0.002946f, -0.021712f, -0.027885f, -0.003366f, -0.009530f, -0.023023f, 0.011127f, 0.006711f, 0.014478f, 0.024513f, -0.033247f, 0.042446f, 0.001165f, -0.034557f, 0.001488f, -0.022946f, -0.014557f, -0.024812f, -0.026746f, -0.007932f, + 0.024844f, -0.019709f, 0.011027f, 0.029843f, -0.017569f, -0.025272f, -0.027843f, -0.035198f, -0.043127f, -0.020955f, -0.013409f, 0.006825f, -0.007878f, 0.015181f, 0.006258f, -0.020762f, -0.003451f, 0.031774f, 0.014233f, -0.036716f, 0.014344f, 0.001346f, -0.013215f, -0.033244f, 0.023730f, -0.008621f, 0.033359f, 0.050063f, -0.000979f, 0.048293f, -0.025762f, 0.030948f, -0.021071f, 0.033496f, 0.030634f, 0.011226f, -0.040260f, 0.032071f, -0.078827f, -0.007090f, -0.005663f, -0.009109f, 0.009507f, -0.048876f, 0.005195f, -0.011619f, -0.002086f, 0.018694f, 0.010180f, 0.022106f, -0.017288f, 0.014834f, -0.007377f, -0.043971f, -0.014962f, -0.033049f, -0.017223f, 0.017177f, -0.034486f, 0.001857f, -0.011840f, -0.030230f, -0.003408f, 0.023712f, -0.034429f, -0.037525f, 0.015477f, 0.017602f, 0.000152f, -0.019492f, 0.020588f, 0.017176f, 0.026215f, 0.018229f, 0.010088f, 0.026105f, 0.036062f, -0.022249f, 0.006293f, -0.020111f, 0.044860f, -0.007191f, -0.029398f, 0.032863f, 0.016946f, 0.004984f, -0.016531f, -0.026984f, 0.006191f, 0.009932f, 0.014755f, -0.005328f, -0.018395f, 0.010319f, -0.021581f, -0.003662f, + -0.021329f, 0.063352f, 0.011035f, -0.023979f, 0.056192f, -0.011402f, 0.017542f, -0.019073f, 0.028448f, 0.036899f, -0.025340f, 0.035159f, 0.042555f, 0.050908f, 0.042441f, 0.001342f, 0.029447f, 0.082295f, 0.022923f, -0.015341f, -0.011012f, 0.018258f, 0.006750f, 0.007142f, -0.000786f, -0.034455f, 0.029237f, -0.077225f, 0.009588f, 0.015619f, -0.002112f, -0.015005f, -0.027933f, -0.014489f, 0.004737f, 0.021497f, 0.035760f, -0.021496f, -0.043090f, -0.036875f, -0.003888f, 0.000278f, -0.024942f, 0.052691f, -0.023904f, -0.017425f, 0.023307f, -0.008547f, 0.005086f, -0.005795f, 0.047157f, 0.006736f, -0.045200f, 0.017372f, 0.006833f, 0.031070f, -0.010496f, 0.002572f, -0.018247f, 0.015023f, 0.007847f, 0.039485f, -0.009094f, 0.017387f, 0.019782f, -0.025157f, -0.026313f, 0.001164f, 0.024941f, -0.048185f, -0.055805f, -0.017205f, -0.022857f, -0.003677f, -0.008099f, 0.004978f, 0.012593f, -0.011952f, 0.001571f, -0.065360f, -0.055676f, 0.043303f, 0.045609f, -0.056609f, -0.044437f, -0.054465f, -0.030012f, -0.022764f, 0.025759f, -0.029839f, -0.054963f, 0.001391f, -0.000967f, -0.029456f, -0.006768f, -0.047205f, + -0.004928f, -0.012034f, 0.014688f, -0.022825f, -0.005296f, -0.073073f, 0.064616f, 0.040199f, -0.006291f, 0.086763f, -0.007979f, -0.049065f, -0.003816f, 0.018675f, -0.029127f, -0.040282f, -0.007655f, -0.027878f, -0.000682f, 0.006306f, -0.039731f, 0.057942f, 0.002535f, 0.005105f, -0.036624f, -0.012034f, 0.004563f, -0.012005f, 0.010041f, 0.012029f, 0.049176f, 0.007199f, -0.001923f, 0.037705f, 0.032989f, -0.013150f, 0.019704f, -0.026563f, 0.007603f, 0.020144f, 0.021993f, 0.053039f, -0.053699f, 0.031368f, 0.101495f, -0.001415f, 0.017275f, 0.032221f, 0.004717f, 0.004450f, 0.017119f, 0.009994f, -0.032789f, -0.042882f, -0.013615f, 0.029375f, 0.010712f, -0.044858f, -0.021401f, -0.005206f, -0.018695f, 0.033439f, 0.004932f, 0.024652f, -0.061905f, -0.043844f, 0.020573f, 0.038730f, 0.029099f, 0.012002f, 0.063336f, 0.028866f, -0.021978f, 0.033879f, -0.026974f, -0.016527f, 0.006600f, 0.027623f, -0.081753f, -0.000378f, 0.001744f, -0.004807f, -0.008303f, 0.037176f, 0.005508f, -0.024590f, -0.039669f, 0.040686f, -0.035371f, -0.000920f, 0.029916f, 0.020177f, -0.027174f, -0.009765f, -0.045290f, -0.001947f, + 0.016411f, 0.015048f, 0.022148f, 0.003489f, -0.028404f, -0.040461f, 0.034865f, 0.015031f, 0.018867f, 0.004847f, 0.019215f, 0.003509f, 0.026641f, -0.043243f, -0.067870f, 0.018492f, -0.007493f, -0.016246f, 0.042939f, -0.007981f, -0.017707f, 0.034084f, 0.036555f, 0.026594f, 0.001094f, -0.018601f, -0.026808f, -0.008516f, -0.036535f, 0.094496f, -0.004081f, 0.033857f, 0.011522f, -0.031734f, 0.030257f, -0.012075f, -0.025684f, 0.029872f, 0.028339f, -0.051817f, 0.041481f, -0.004857f, 0.055890f, -0.050086f, -0.032886f, 0.053011f, 0.004025f, -0.039812f, 0.049319f, -0.013083f, 0.080204f, -0.027534f, -0.016740f, -0.039447f, 0.037576f, 0.011385f, -0.023926f, 0.022589f, -0.025399f, 0.013635f, -0.012398f, -0.021933f, 0.060206f, -0.012084f, 0.040106f, -0.063840f, -0.013674f, 0.000623f, -0.080808f, -0.015145f, 0.009334f, 0.040865f, -0.021439f, -0.016268f, -0.000341f, -0.003860f, 0.053220f, -0.003028f, -0.029838f, 0.060871f, -0.009318f, -0.000746f, 0.009018f, -0.021114f, 0.048618f, 0.005677f, -0.012379f, 0.026624f, 0.018751f, -0.025265f, -0.011522f, -0.010419f, 0.037399f, -0.076407f, -0.003404f, -0.012820f, + -0.029892f, 0.016006f, -0.030369f, 0.048445f, -0.014125f, -0.054246f, -0.007999f, 0.088937f, -0.054486f, 0.040475f, -0.060526f, -0.014119f, 0.055959f, 0.045210f, -0.033560f, 0.017520f, -0.040488f, -0.047448f, 0.008407f, -0.019246f, 0.019557f, 0.009234f, -0.005947f, 0.011498f, -0.076150f, -0.025806f, -0.040182f, -0.050800f, 0.022193f, -0.017401f, -0.018008f, -0.026824f, -0.055632f, -0.041042f, 0.030679f, -0.004135f, 0.102916f, 0.021083f, 0.003724f, 0.038441f, 0.043307f, 0.018551f, 0.040927f, -0.023790f, -0.032456f, 0.036513f, -0.057208f, -0.005579f, -0.012347f, 0.004416f, 0.039090f, -0.024893f, 0.043498f, 0.020089f, 0.009447f, 0.014411f, -0.072562f, 0.050208f, 0.008642f, -0.049327f, 0.019379f, -0.052352f, 0.008761f, 0.073528f, -0.009306f, -0.041194f, -0.045738f, 0.020932f, 0.032481f, 0.028047f, 0.013875f, -0.045893f, -0.032745f, -0.013006f, -0.008956f, 0.063385f, -0.039062f, -0.021526f, 0.091690f, -0.049015f, -0.003888f, 0.038384f, 0.000272f, 0.040419f, -0.005435f, -0.028658f, -0.020486f, -0.053787f, 0.028938f, 0.042382f, -0.059544f, 0.092142f, 0.030213f, -0.064754f, -0.061121f, -0.055774f, + -0.069844f, -0.053753f, 0.003545f, 0.031545f, 0.006212f, -0.043689f, -0.017185f, 0.035789f, 0.000001f, -0.025092f, 0.033645f, -0.058567f, 0.005123f, -0.008531f, -0.057813f, -0.047613f, 0.010968f, -0.012381f, 0.043521f, -0.063025f, -0.007255f, -0.002575f, 0.043651f, -0.109421f, -0.101385f, -0.087696f, -0.056848f, 0.023051f, -0.024096f, 0.113021f, 0.029684f, -0.011936f, -0.026048f, -0.014139f, 0.031791f, -0.073306f, 0.085795f, 0.113916f, 0.045008f, -0.006696f, 0.089696f, -0.028344f, 0.054124f, 0.103603f, -0.019167f, 0.005949f, 0.019041f, 0.137858f, -0.035251f, -0.008376f, 0.081371f, 0.031364f, 0.025854f, -0.022168f, -0.084332f, 0.006211f, -0.066983f, 0.032184f, -0.082926f, -0.095920f, -0.001782f, -0.004947f, -0.068018f, -0.002932f, -0.033500f, -0.068317f, -0.055985f, -0.089281f, -0.005191f, 0.092777f, -0.030315f, -0.016662f, -0.085832f, -0.044370f, -0.032399f, -0.027923f, 0.027384f, -0.019485f, 0.151616f, -0.034791f, -0.003685f, -0.054280f, 0.113786f, 0.096694f, -0.069003f, 0.079191f, -0.029072f, -0.109934f, -0.022327f, -0.008223f, 0.021147f, -0.023176f, -0.028112f, -0.010794f, -0.048192f, 0.016907f, + 0.053976f, -0.062404f, -0.033640f, 0.045504f, 0.195718f, 0.021991f, -0.120813f, -0.030864f, -0.041812f, 0.008919f, 0.062217f, 0.108896f, 0.032799f, -0.091863f, -0.000042f, 0.063380f, 0.015631f, 0.001449f, -0.000872f, 0.016750f, -0.006652f, -0.010822f, 0.077662f, 0.047711f, 0.044514f, -0.063540f, -0.039070f, 0.044342f, 0.019560f, 0.026603f, -0.019411f, 0.009008f, 0.087023f, 0.003089f, 0.074408f, 0.038696f, 0.042201f, 0.071028f, 0.013602f, -0.035434f, 0.012257f, -0.040652f, 0.014521f, 0.031322f, 0.011607f, 0.115871f, -0.033680f, -0.071260f, -0.066197f, 0.090279f, 0.045399f, 0.049346f, 0.037132f, -0.047713f, -0.057840f, -0.035674f, 0.003569f, 0.022224f, -0.007722f, 0.034322f, 0.064808f, -0.000524f, 0.049248f, 0.042117f, -0.051547f, -0.007748f, 0.024918f, -0.023489f, -0.016190f, -0.024624f, -0.087777f, -0.011820f, 0.052711f, 0.008512f, 0.096725f, 0.061398f, -0.028442f, 0.033559f, -0.006893f, -0.051473f, 0.009275f, 0.149167f, 0.043340f, 0.060140f, -0.028262f, -0.144427f, -0.067303f, -0.107611f, -0.031120f, 0.064568f, 0.162414f, 0.066104f, 0.021125f, -0.080429f, -0.067808f, 0.045093f, + 0.082343f, 0.034112f, 0.099214f, -0.009266f, -0.059644f, -0.097197f, -0.041662f, -0.019607f, 0.074297f, 0.003198f, 0.044126f, 0.031060f, 0.009034f, 0.089475f, 0.069548f, -0.013290f, -0.006485f, -0.093919f, -0.018854f, -0.008113f, 0.004248f, 0.043910f, 0.092203f, 0.048426f, 0.045356f, 0.077614f, 0.050811f, -0.094567f, -0.068484f, -0.029199f, -0.053419f, 0.051081f, 0.041364f, 0.078875f, 0.068874f, 0.068568f, 0.023845f, 0.005173f, -0.061993f, -0.074596f, -0.061170f, 0.012553f, 0.031716f, -0.009964f, -0.008600f, 0.126106f, 0.033792f, -0.020696f, -0.014456f, 0.081150f, -0.102259f, 0.007183f, -0.193879f, -0.058265f, 0.040972f, -0.085427f, 0.051180f, 0.009964f, -0.018427f, 0.070723f, 0.006461f, -0.215885f, -0.138571f, -0.067028f, 0.063226f, 0.026607f, 0.301326f, 0.331621f, 0.196303f, 0.367965f, 0.293745f, 0.320929f, 0.216982f, 0.274604f, 0.216275f, 0.018192f, -0.095957f, -0.128703f, -0.132181f, -0.272903f, -0.340051f, -0.345086f, -0.244587f, -0.179727f, -0.067955f, 0.035206f, -0.090741f, 0.085681f, -0.116012f, -0.022323f, 0.006158f, -0.013848f, 0.047338f, -0.090859f, 0.181725f, 0.057782f, + 0.169052f, 0.127570f, 0.077654f, 0.072887f, 0.106352f, 0.089931f, 0.110558f, 0.233137f, 0.213118f, 0.188634f, 0.211324f, 0.272601f, 0.241325f, 0.243284f, 0.396005f, 0.176707f, 0.292413f, 0.384137f, 0.269334f, 0.357979f, 0.205461f, 0.276388f, 0.217479f, 0.268461f, 0.272192f, 0.154216f, 0.201091f, 0.187224f, 0.198291f, 0.215923f, 0.108801f, 0.073401f, -0.055281f, 0.058977f, -0.091037f, -0.035997f, -0.166545f, -0.164002f, -0.189144f, -0.484562f, -0.414487f, -0.326787f, -0.150217f, -0.025114f} + }, + { + {0.003329f, -0.000751f, 0.002711f, -0.000613f, 0.011412f, -0.001706f, -0.000436f, 0.013916f, -0.003339f, 0.015501f, 0.002817f, -0.006190f, 0.009349f, 0.004433f, -0.006836f, 0.002590f, 0.003705f, 0.001107f, 0.005971f, -0.001553f, 0.004801f, -0.000001f, -0.006675f, 0.002886f, 0.007366f, 0.004252f, 0.004292f, -0.000852f, 0.000624f, 0.000042f, 0.002671f, 0.005438f, -0.012971f, -0.006300f, 0.000300f, 0.003121f, 0.001216f, -0.005038f, 0.009917f, 0.003295f, -0.002219f, 0.005319f, 0.001920f, 0.007357f, 0.002130f, -0.002867f, -0.005623f, 0.005949f, 0.000399f, -0.000105f, -0.003033f, 0.001677f, -0.005291f, -0.003670f, 0.002461f, 0.005326f, -0.002556f, 0.001182f, -0.000052f, -0.000745f, 0.009833f, 0.003698f, -0.001169f, 0.001571f, 0.004297f, 0.000418f, 0.004399f, -0.005624f, 0.005375f, 0.005961f, -0.002994f, -0.009970f, -0.005228f, -0.002732f, 0.010318f, 0.000113f, -0.003725f, -0.000961f, -0.009087f, -0.006394f, 0.004143f, 0.000257f, -0.005703f, 0.007067f, 0.004872f, -0.001672f, 0.000492f, -0.001095f, 0.005829f, -0.008143f, 0.003058f, 0.005875f, 0.005345f, -0.011675f, -0.008046f, -0.005874f, + 0.007788f, 0.001729f, 0.002564f, -0.003367f, 0.008296f, 0.002946f, -0.002026f, 0.000054f, -0.002333f, 0.001450f, 0.003114f, -0.002015f, -0.002364f, -0.007131f, 0.007404f, 0.012123f, 0.001464f, 0.007623f, -0.001447f, 0.001369f, 0.002810f, 0.003188f, -0.009344f, 0.000437f, -0.009764f, -0.002470f, -0.001392f, 0.002833f, -0.004933f, -0.000409f, 0.002125f, 0.000724f, -0.005702f, -0.000043f, 0.000634f, 0.004379f, -0.006058f, -0.007878f, -0.001027f, 0.010000f, 0.016525f, -0.000276f, 0.002722f, 0.000829f, -0.003506f, -0.010257f, -0.002461f, 0.006592f, -0.003052f, 0.006566f, 0.002879f, 0.006714f, -0.000012f, 0.002506f, 0.004474f, -0.010143f, -0.002580f, -0.009612f, 0.005453f, 0.000850f, -0.004765f, 0.021164f, -0.008427f, -0.014807f, 0.000902f, 0.007157f, -0.001515f, -0.011098f, -0.003469f, -0.004714f, -0.002105f, -0.005165f, -0.002022f, 0.007962f, -0.000809f, -0.004885f, 0.008648f, 0.001493f, 0.008388f, -0.002126f, -0.002407f, 0.003507f, -0.000060f, 0.004052f, -0.001915f, 0.008342f, 0.013060f, -0.003517f, -0.009285f, -0.006421f, 0.005199f, 0.000140f, -0.020886f, -0.001803f, -0.008522f, -0.002905f, + 0.009736f, -0.006888f, -0.005684f, 0.007082f, -0.004894f, -0.000862f, 0.008870f, 0.003311f, -0.007660f, 0.003382f, -0.005637f, -0.012038f, 0.003477f, 0.004872f, -0.009652f, -0.005243f, -0.003117f, -0.003791f, -0.000562f, 0.004031f, 0.005790f, 0.009604f, 0.010115f, -0.002498f, 0.000484f, -0.004180f, 0.003917f, 0.002939f, -0.003164f, 0.004448f, 0.005883f, -0.006598f, -0.017018f, -0.008422f, 0.005027f, 0.007614f, 0.002751f, 0.008243f, -0.007101f, 0.008616f, 0.010238f, -0.002798f, 0.011344f, -0.001450f, 0.008304f, -0.003917f, 0.000071f, -0.003505f, 0.010659f, 0.004345f, -0.000641f, 0.009801f, -0.005371f, -0.004003f, 0.006884f, -0.016752f, -0.003153f, 0.001011f, -0.003812f, -0.014929f, -0.009405f, 0.006309f, -0.006123f, -0.003841f, -0.000032f, 0.011815f, -0.003077f, -0.008160f, -0.000911f, 0.003079f, 0.006372f, -0.000960f, -0.010930f, -0.006824f, -0.002246f, -0.005422f, 0.001476f, -0.009244f, 0.004300f, -0.008704f, -0.013137f, 0.000422f, 0.004174f, 0.005217f, -0.004435f, -0.002955f, -0.008757f, 0.010868f, 0.005946f, 0.001488f, -0.000247f, -0.000348f, -0.004062f, -0.002041f, 0.003312f, 0.004574f, + 0.016058f, -0.001944f, 0.003771f, 0.000965f, -0.000840f, -0.008183f, -0.006420f, 0.010968f, -0.005008f, 0.000888f, 0.002749f, 0.001339f, 0.004049f, 0.005079f, 0.004470f, 0.010808f, -0.007131f, -0.010553f, -0.008582f, 0.005481f, 0.011896f, -0.002108f, 0.009132f, -0.007978f, -0.009799f, 0.008272f, -0.004036f, 0.000986f, 0.003116f, 0.010363f, 0.003883f, 0.016378f, -0.006948f, -0.008449f, 0.003914f, -0.004581f, -0.004367f, 0.009406f, -0.014163f, -0.008599f, 0.001623f, -0.002516f, 0.006734f, -0.004594f, 0.002024f, 0.011811f, -0.010481f, 0.008319f, -0.006206f, 0.005515f, -0.005775f, -0.001382f, -0.000665f, 0.012302f, 0.002585f, 0.000806f, -0.008377f, 0.000831f, -0.010012f, 0.004323f, 0.002984f, -0.006508f, 0.000277f, -0.002413f, 0.018489f, 0.002913f, 0.001658f, -0.015124f, -0.008630f, -0.012651f, 0.010869f, -0.006158f, -0.000136f, 0.006015f, 0.023625f, 0.016839f, -0.005806f, -0.013500f, -0.005169f, -0.011612f, 0.013744f, -0.001805f, -0.002789f, -0.004987f, -0.002936f, -0.000395f, -0.005063f, -0.002472f, -0.009443f, 0.006899f, -0.009754f, -0.016273f, 0.016626f, 0.008102f, -0.018223f, 0.018251f, + -0.003238f, -0.000629f, -0.025445f, 0.015347f, 0.009590f, -0.019862f, 0.005677f, -0.002925f, 0.007333f, 0.002201f, 0.008510f, 0.006105f, 0.001922f, -0.009007f, 0.000550f, 0.003901f, -0.012794f, -0.004887f, -0.015032f, -0.002095f, -0.009456f, -0.004470f, 0.001375f, -0.011099f, -0.004534f, -0.016559f, 0.006145f, 0.002109f, 0.001199f, 0.001911f, -0.007560f, -0.014374f, -0.004859f, 0.005609f, -0.002624f, -0.000880f, 0.015271f, -0.022576f, 0.009455f, 0.012114f, -0.001881f, 0.001107f, -0.004629f, -0.001462f, -0.007584f, -0.011009f, -0.007853f, -0.008623f, -0.006069f, 0.005995f, 0.003094f, 0.005343f, 0.007727f, -0.001613f, -0.004112f, 0.011255f, 0.021195f, 0.015052f, -0.000182f, -0.017886f, 0.005164f, -0.002727f, 0.002987f, 0.019009f, 0.000403f, 0.019075f, 0.017984f, 0.027706f, 0.006292f, -0.004163f, -0.001936f, 0.008981f, -0.003464f, 0.026882f, -0.003399f, -0.003357f, 0.032614f, 0.000888f, 0.016192f, -0.005555f, -0.000142f, -0.000747f, 0.002133f, -0.003536f, 0.001707f, 0.000206f, -0.001548f, -0.017288f, -0.002322f, -0.003540f, -0.003824f, -0.006741f, 0.010942f, 0.006185f, 0.006269f, -0.009305f, + -0.001721f, -0.015154f, -0.007000f, 0.003852f, -0.001906f, -0.008842f, -0.003603f, 0.006242f, 0.011444f, 0.008226f, -0.004443f, -0.013899f, -0.001147f, 0.005225f, -0.003130f, 0.008906f, 0.004588f, 0.011748f, 0.014059f, -0.003662f, -0.000763f, -0.014692f, -0.019971f, 0.019440f, 0.009076f, 0.000644f, -0.001529f, 0.000775f, -0.007779f, -0.006248f, -0.000923f, 0.016143f, 0.007617f, 0.004336f, 0.016938f, -0.011798f, 0.003103f, -0.009174f, -0.009582f, 0.009871f, 0.006827f, 0.008962f, 0.025653f, 0.001872f, -0.013373f, 0.005404f, -0.013325f, -0.014562f, -0.020246f, 0.008052f, -0.018936f, 0.000317f, 0.020481f, -0.021404f, 0.007676f, 0.010078f, -0.006098f, -0.026478f, 0.000089f, 0.016026f, -0.017608f, 0.011139f, -0.001471f, -0.007329f, -0.022747f, -0.000263f, -0.016478f, 0.003255f, -0.008486f, -0.012257f, -0.016030f, 0.006893f, -0.002478f, -0.000510f, 0.014774f, -0.008656f, 0.012429f, -0.009176f, -0.004079f, 0.019855f, 0.006421f, -0.009880f, 0.007738f, 0.005171f, -0.009203f, 0.005238f, 0.004654f, -0.002919f, -0.004060f, 0.001321f, -0.004555f, -0.004548f, 0.002948f, 0.004144f, 0.026169f, -0.024239f, + 0.003782f, 0.002236f, -0.009154f, 0.018556f, 0.009919f, -0.005415f, -0.019539f, 0.002477f, -0.002234f, -0.005010f, -0.012467f, -0.013386f, 0.017055f, 0.012201f, 0.001072f, -0.000736f, 0.008839f, 0.005794f, -0.004711f, 0.008617f, 0.004704f, -0.003468f, 0.017683f, -0.005314f, 0.010136f, -0.005713f, 0.003562f, 0.009126f, -0.020442f, 0.015086f, -0.008742f, -0.003371f, -0.011872f, -0.007967f, 0.006713f, -0.006286f, 0.005431f, 0.022881f, 0.007394f, 0.012728f, -0.029079f, -0.018682f, -0.010574f, -0.006531f, 0.002781f, 0.000216f, 0.004627f, -0.023781f, 0.012581f, 0.005736f, 0.002888f, 0.023379f, 0.000047f, -0.012693f, 0.021268f, 0.008866f, -0.009995f, 0.004780f, -0.012750f, 0.011728f, 0.004995f, 0.015512f, -0.013343f, -0.008837f, 0.003464f, -0.012738f, 0.016171f, -0.014786f, -0.000651f, 0.015103f, 0.013152f, -0.027607f, -0.001196f, 0.001782f, 0.002843f, 0.005055f, 0.030173f, 0.007501f, 0.001472f, -0.008916f, -0.008193f, -0.016076f, -0.009433f, 0.023109f, 0.000054f, -0.026493f, -0.000107f, 0.006795f, -0.015880f, -0.016298f, 0.001434f, -0.010317f, 0.003888f, 0.025490f, 0.011529f, 0.011223f, + -0.010843f, -0.025572f, 0.001444f, -0.003398f, 0.011491f, -0.000845f, -0.022659f, -0.035286f, -0.010752f, 0.010173f, 0.027191f, 0.004033f, 0.013986f, 0.048747f, 0.007845f, 0.008382f, -0.007785f, -0.023260f, 0.012933f, -0.011272f, 0.011871f, -0.002918f, 0.031848f, 0.023446f, -0.012771f, -0.026376f, -0.021331f, 0.015842f, -0.014362f, 0.019409f, 0.008131f, 0.006249f, -0.007194f, -0.002692f, 0.022667f, -0.004718f, 0.019917f, 0.020284f, 0.010020f, 0.014150f, -0.016492f, 0.015314f, 0.007759f, -0.008584f, 0.021979f, -0.010257f, 0.019871f, 0.001236f, 0.001594f, -0.030515f, 0.017413f, 0.001289f, -0.006491f, 0.014498f, -0.021898f, -0.008791f, 0.011684f, 0.009815f, -0.020355f, 0.002593f, -0.013436f, -0.007702f, 0.018080f, 0.001950f, 0.004598f, -0.002719f, -0.023395f, 0.014079f, 0.012685f, 0.000121f, 0.009597f, 0.004053f, -0.011508f, -0.011363f, -0.002779f, 0.010535f, -0.022292f, -0.002238f, -0.001498f, -0.001076f, -0.003896f, 0.005944f, 0.005572f, 0.017640f, 0.042416f, 0.014387f, 0.004380f, -0.014712f, -0.040983f, 0.030213f, 0.007524f, -0.024599f, 0.006462f, -0.001171f, 0.005393f, 0.007265f, + -0.020272f, -0.038804f, -0.033030f, 0.012490f, 0.023597f, -0.003116f, 0.024862f, -0.010243f, 0.019153f, 0.026747f, 0.032491f, -0.005494f, 0.023725f, -0.020116f, 0.007290f, -0.010031f, 0.001882f, 0.015486f, -0.001673f, -0.005065f, 0.004984f, 0.019015f, -0.013073f, -0.020188f, -0.023717f, 0.049756f, -0.000945f, -0.000041f, -0.022446f, 0.024406f, 0.006151f, -0.041374f, -0.026386f, 0.012341f, -0.007171f, -0.005181f, 0.016108f, 0.008443f, 0.041396f, 0.026144f, -0.002528f, -0.021837f, -0.025228f, -0.010838f, -0.011011f, -0.024973f, 0.024743f, -0.016037f, 0.019300f, 0.020773f, -0.018923f, -0.019510f, -0.023374f, -0.028755f, 0.006398f, 0.003054f, -0.013196f, -0.010810f, -0.025504f, -0.004509f, -0.025552f, 0.009080f, -0.000188f, -0.003474f, -0.001701f, -0.022748f, -0.046296f, -0.009279f, -0.012651f, 0.003322f, -0.011416f, 0.002763f, 0.003928f, -0.004113f, 0.018647f, -0.024416f, -0.008516f, -0.023152f, -0.002057f, -0.011173f, 0.026778f, 0.031640f, 0.023828f, -0.033836f, 0.023576f, -0.011810f, 0.017688f, -0.006509f, 0.012824f, -0.010855f, -0.015656f, 0.005890f, -0.019957f, 0.012804f, 0.013874f, -0.001322f, + 0.007981f, -0.016989f, -0.003083f, 0.030004f, -0.024384f, 0.001523f, -0.007836f, -0.009285f, -0.019795f, -0.000748f, 0.028391f, 0.038754f, -0.025079f, 0.011844f, -0.003809f, -0.023208f, -0.024602f, -0.025571f, -0.012414f, 0.048741f, 0.028805f, -0.009177f, 0.015099f, -0.010502f, 0.013089f, -0.026925f, 0.015303f, -0.001183f, -0.014815f, 0.036573f, 0.019039f, 0.006888f, 0.012247f, 0.009728f, 0.035115f, 0.003458f, -0.028734f, 0.010518f, 0.023739f, 0.015687f, -0.049403f, 0.028818f, -0.018434f, -0.023089f, -0.003191f, -0.002352f, -0.000176f, 0.031633f, 0.020783f, 0.085927f, 0.024136f, -0.014558f, 0.005577f, 0.014356f, 0.000382f, 0.028510f, 0.021316f, 0.019687f, -0.025623f, -0.042911f, 0.042668f, -0.024402f, 0.003959f, 0.014572f, 0.046755f, 0.018582f, -0.028577f, 0.025379f, -0.025907f, -0.005588f, -0.035581f, -0.046663f, -0.005505f, 0.012209f, 0.012136f, 0.009010f, 0.011407f, -0.004005f, -0.032307f, -0.012112f, 0.009688f, 0.010398f, -0.017463f, 0.034969f, 0.021731f, -0.021544f, 0.010957f, 0.017220f, 0.006047f, 0.000704f, -0.020482f, -0.002797f, -0.014749f, -0.008456f, 0.000847f, 0.021616f, + 0.053419f, -0.015207f, 0.003553f, 0.007721f, 0.018820f, -0.019903f, 0.067585f, -0.006298f, 0.004755f, 0.005522f, -0.033668f, -0.031095f, -0.052274f, -0.021342f, 0.024483f, -0.009665f, 0.010545f, 0.011021f, 0.044084f, 0.007747f, 0.004339f, 0.002849f, 0.032620f, 0.018855f, -0.021714f, 0.036050f, -0.038538f, 0.009998f, -0.009600f, -0.035191f, 0.019683f, 0.010250f, 0.024338f, -0.005917f, -0.055109f, 0.005161f, -0.037027f, -0.031706f, 0.009409f, 0.008712f, 0.015063f, -0.008525f, 0.010851f, -0.000878f, -0.018789f, 0.030954f, -0.004815f, -0.008688f, -0.011882f, -0.019676f, -0.017808f, 0.012187f, -0.022409f, 0.006931f, -0.014191f, -0.008470f, -0.005896f, 0.030826f, -0.005319f, 0.033053f, 0.020152f, -0.006531f, 0.011020f, 0.012666f, 0.022996f, -0.013537f, -0.020299f, 0.005134f, 0.014008f, 0.019199f, 0.030432f, -0.030373f, -0.030492f, 0.015775f, 0.011686f, 0.038704f, -0.016611f, -0.000145f, 0.019487f, 0.002671f, 0.006631f, -0.004036f, 0.025505f, 0.032692f, 0.015583f, -0.000872f, 0.020793f, 0.065760f, -0.011656f, -0.015083f, 0.025672f, 0.000792f, 0.039211f, 0.012331f, 0.019898f, 0.024332f, + -0.003648f, 0.018299f, 0.045695f, -0.007591f, -0.047259f, 0.039770f, 0.014570f, -0.013496f, 0.010393f, -0.068165f, -0.029284f, -0.005469f, 0.055602f, 0.021581f, -0.062544f, 0.006457f, -0.007952f, 0.001871f, 0.014996f, -0.007108f, -0.030126f, 0.000958f, -0.001066f, 0.026006f, 0.062106f, -0.013310f, 0.022991f, 0.034372f, 0.002751f, -0.014381f, -0.005248f, 0.011421f, 0.062327f, -0.004802f, 0.000689f, 0.043867f, -0.014533f, 0.009229f, 0.004992f, -0.004327f, -0.007418f, 0.014341f, -0.047904f, -0.001838f, 0.021941f, 0.035237f, 0.046437f, -0.037320f, 0.006836f, 0.033764f, 0.003281f, 0.065816f, -0.019463f, -0.037316f, 0.010461f, 0.046906f, 0.014841f, -0.041981f, -0.011978f, 0.008078f, 0.006167f, 0.018513f, -0.049735f, 0.003481f, 0.009247f, -0.015185f, -0.033843f, -0.039649f, 0.016831f, -0.014537f, 0.005006f, -0.001608f, -0.034622f, -0.048337f, 0.017724f, 0.003037f, -0.036312f, -0.019443f, -0.019972f, 0.021680f, -0.061142f, -0.031995f, 0.034481f, -0.049049f, 0.036514f, -0.014579f, 0.034800f, 0.002840f, 0.018019f, -0.036414f, -0.005707f, -0.034301f, 0.036188f, 0.020139f, 0.048206f, 0.038819f, + -0.020818f, 0.009810f, 0.037516f, 0.023630f, 0.017762f, 0.016110f, -0.036915f, -0.006780f, 0.014091f, 0.005730f, 0.017139f, -0.040558f, -0.035074f, 0.022786f, 0.062587f, 0.011995f, -0.024312f, 0.044384f, 0.009035f, 0.028940f, 0.004095f, 0.008227f, -0.039588f, -0.034327f, -0.002080f, 0.003863f, -0.067289f, 0.008491f, -0.016031f, -0.000016f, 0.017630f, -0.021843f, 0.012624f, 0.054070f, 0.002487f, -0.079216f, -0.062288f, -0.006221f, -0.021196f, -0.017033f, -0.003568f, 0.018618f, 0.010089f, -0.016624f, 0.019829f, 0.025426f, 0.016527f, -0.008985f, 0.013687f, -0.005425f, -0.024881f, -0.001058f, 0.015377f, -0.057491f, -0.017832f, -0.023457f, -0.036184f, -0.008131f, 0.004268f, -0.011304f, -0.006678f, 0.073637f, 0.032720f, -0.019229f, -0.007512f, 0.014174f, 0.026392f, -0.036799f, -0.009662f, -0.015460f, 0.009598f, 0.077625f, 0.011986f, -0.037825f, 0.009845f, 0.034451f, -0.007547f, 0.032220f, 0.040472f, -0.020702f, 0.009440f, 0.020833f, 0.013859f, 0.001226f, -0.006120f, -0.012254f, 0.005958f, 0.024457f, 0.012352f, 0.022873f, -0.033823f, -0.051681f, -0.005567f, 0.023583f, 0.020471f, 0.017042f, + -0.005892f, -0.047628f, 0.015528f, 0.011033f, 0.072007f, 0.075995f, 0.018099f, -0.055861f, 0.040865f, -0.021028f, -0.057284f, -0.013043f, -0.067790f, -0.051443f, -0.022587f, -0.024582f, -0.052420f, 0.009587f, -0.020868f, -0.060035f, -0.054833f, 0.016355f, 0.036412f, -0.005553f, -0.046094f, 0.014230f, 0.001985f, 0.015279f, 0.030105f, 0.028964f, -0.035304f, 0.046925f, 0.032919f, 0.004372f, 0.013868f, 0.032721f, -0.000601f, 0.085103f, -0.059286f, -0.028620f, -0.000757f, -0.068665f, 0.057896f, 0.004535f, 0.072066f, 0.021570f, 0.017115f, 0.024305f, -0.035988f, 0.008260f, -0.073547f, -0.022013f, -0.002891f, -0.020117f, 0.084466f, 0.024481f, -0.020115f, -0.053482f, -0.024451f, -0.022910f, -0.030983f, -0.025660f, 0.014597f, -0.077311f, -0.014323f, 0.054157f, -0.004545f, -0.007727f, -0.055834f, 0.053786f, 0.029522f, -0.000211f, -0.019779f, 0.022099f, 0.013925f, -0.014637f, 0.027522f, -0.040585f, -0.008023f, -0.021434f, 0.013655f, -0.010585f, -0.022165f, 0.026558f, -0.018463f, 0.010224f, 0.003464f, -0.039501f, -0.020940f, -0.007424f, -0.044760f, -0.048248f, -0.059633f, -0.017697f, 0.031760f, -0.022594f, + -0.008280f, 0.034475f, -0.040713f, -0.037896f, 0.042516f, -0.002079f, 0.001405f, 0.033293f, 0.004388f, -0.032052f, -0.013164f, 0.009740f, 0.029825f, -0.041176f, -0.007461f, 0.044729f, 0.025617f, 0.042730f, 0.029385f, -0.012729f, 0.030514f, -0.005940f, -0.054245f, 0.014128f, -0.037371f, 0.026173f, -0.012116f, -0.022279f, 0.057225f, 0.018944f, 0.002915f, 0.006160f, -0.013881f, 0.021661f, 0.035633f, 0.087381f, 0.077806f, 0.005993f, -0.032955f, 0.015032f, 0.045524f, 0.012139f, 0.035479f, 0.024327f, 0.017684f, -0.026656f, -0.032541f, -0.040807f, -0.001814f, 0.014473f, 0.029382f, 0.056748f, 0.031302f, 0.036261f, 0.022377f, 0.033624f, 0.018223f, 0.032412f, -0.020811f, 0.005861f, 0.062938f, -0.001938f, 0.048685f, 0.012381f, 0.039599f, -0.061240f, -0.008799f, -0.018129f, -0.016847f, 0.014166f, 0.024937f, 0.044209f, 0.072709f, 0.059980f, -0.020062f, 0.010771f, -0.078257f, 0.019511f, 0.019492f, 0.070306f, -0.054442f, 0.044686f, -0.013238f, -0.038468f, 0.031106f, 0.009919f, 0.026161f, 0.044728f, -0.013058f, -0.055045f, 0.030269f, -0.034686f, -0.048311f, -0.021695f, 0.067433f, -0.055043f, + -0.080387f, -0.037737f, -0.012154f, 0.048345f, -0.002495f, -0.019590f, -0.049084f, -0.010040f, 0.010128f, 0.009070f, 0.056166f, -0.018450f, -0.060374f, 0.003241f, -0.024821f, -0.088524f, -0.043554f, 0.113487f, 0.016639f, -0.052996f, -0.056306f, 0.005126f, 0.001501f, 0.022345f, 0.030190f, -0.041492f, -0.026264f, -0.065423f, 0.015192f, -0.024723f, -0.015127f, 0.096176f, 0.021153f, -0.015166f, -0.100811f, -0.008228f, -0.053864f, 0.051619f, 0.065894f, 0.005067f, 0.051168f, -0.062380f, -0.024025f, -0.040196f, -0.009356f, 0.097753f, 0.123891f, 0.017696f, -0.033730f, -0.046649f, -0.090426f, -0.001110f, 0.010822f, 0.106095f, 0.059633f, -0.018398f, -0.179508f, -0.095064f, 0.014096f, -0.019890f, 0.155249f, 0.049641f, -0.076901f, -0.034314f, -0.136223f, -0.045664f, 0.002481f, 0.084499f, 0.088011f, 0.098230f, 0.001809f, 0.020398f, -0.014273f, 0.004852f, 0.120890f, -0.050380f, 0.086771f, -0.026774f, -0.100801f, -0.033170f, -0.108363f, -0.037613f, 0.119428f, 0.053030f, -0.080060f, 0.088667f, -0.000485f, -0.022525f, -0.137657f, -0.036486f, -0.037738f, -0.061477f, 0.131786f, 0.001670f, 0.058541f, -0.090452f, + 0.049404f, 0.042365f, -0.041754f, 0.026570f, -0.008866f, 0.023679f, -0.001094f, 0.067718f, 0.022827f, -0.066011f, 0.038566f, 0.032520f, -0.001453f, 0.045436f, -0.035147f, -0.017844f, 0.056149f, 0.039748f, 0.036904f, 0.018480f, 0.031885f, -0.099946f, 0.085115f, -0.050641f, -0.033197f, 0.017985f, -0.071113f, 0.100536f, -0.030502f, 0.009004f, 0.071732f, 0.001257f, -0.012852f, 0.038467f, 0.039072f, 0.070351f, -0.019310f, -0.068515f, -0.069832f, 0.005651f, -0.026380f, 0.029422f, -0.042986f, -0.022344f, -0.029709f, 0.017805f, -0.129728f, -0.000749f, 0.093082f, 0.023130f, 0.036797f, -0.007075f, -0.012302f, 0.021101f, -0.035602f, -0.043052f, 0.021983f, 0.008184f, -0.043489f, -0.052096f, 0.174234f, -0.025962f, -0.059838f, 0.007428f, 0.076189f, -0.015600f, 0.021981f, -0.064786f, 0.020611f, 0.111261f, 0.165991f, -0.071722f, 0.051440f, -0.108839f, -0.037045f, -0.065117f, -0.013410f, 0.107433f, 0.106541f, 0.091004f, -0.007059f, -0.067363f, -0.046897f, 0.041088f, -0.001628f, 0.021928f, 0.053263f, 0.001583f, 0.024086f, -0.071111f, -0.023628f, -0.040147f, -0.056855f, 0.030855f, 0.018645f, 0.003887f, + 0.046693f, -0.041887f, -0.006925f, 0.013780f, -0.067620f, 0.000275f, -0.001272f, -0.037389f, -0.020611f, 0.016517f, -0.032187f, 0.060192f, -0.025257f, 0.090202f, 0.060727f, -0.042238f, -0.018762f, -0.059400f, -0.076129f, -0.088933f, 0.021899f, 0.042643f, 0.113322f, 0.092847f, 0.035499f, 0.059207f, 0.003454f, -0.065727f, -0.051940f, -0.036702f, -0.053620f, -0.009304f, 0.016452f, -0.002333f, -0.040381f, 0.007977f, -0.041226f, 0.019362f, 0.034314f, 0.008184f, -0.058266f, 0.035847f, -0.034973f, -0.024525f, -0.060760f, 0.025150f, 0.007222f, -0.015814f, -0.180633f, -0.109094f, -0.057057f, 0.104390f, 0.054899f, 0.281190f, 0.271049f, 0.273742f, 0.283744f, 0.297410f, 0.216224f, 0.110277f, 0.166270f, 0.097039f, -0.038413f, -0.085083f, -0.125865f, -0.259914f, -0.226969f, -0.241778f, -0.167200f, -0.175632f, -0.121977f, -0.105052f, -0.046164f, 0.012983f, -0.090494f, -0.045463f, -0.006932f, -0.007628f, -0.040772f, 0.024400f, 0.087214f, 0.090118f, 0.047223f, 0.105612f, 0.137933f, 0.042745f, 0.043444f, 0.038058f, 0.138279f, 0.137773f, 0.176481f, 0.189554f, 0.174782f, 0.189927f, 0.285391f, 0.125876f, + 0.230086f, 0.299229f, 0.207044f, 0.234554f, 0.196226f, 0.109395f, 0.131888f, 0.138304f, 0.132696f, 0.163818f, 0.168312f, 0.115760f, 0.057222f, 0.078861f, 0.121611f, 0.038212f, 0.058055f, 0.011214f, 0.011673f, -0.076510f, 0.001210f, -0.164742f, -0.217036f, -0.156574f, -0.182559f, -0.269015f, -0.250893f, -0.100229f, -0.216787f, -0.071574f, -0.002868f}, + {0.001179f, -0.003749f, 0.000733f, -0.006434f, -0.004977f, -0.005543f, -0.006417f, -0.009856f, 0.004853f, 0.004520f, -0.004912f, 0.001095f, 0.007372f, 0.011841f, 0.004193f, 0.004818f, -0.002918f, 0.001317f, -0.018047f, 0.005390f, 0.000557f, -0.002582f, 0.005158f, -0.001749f, -0.006756f, 0.006248f, 0.002276f, 0.002484f, 0.004613f, 0.006177f, 0.006304f, -0.000161f, -0.008053f, -0.000363f, 0.008457f, 0.008883f, 0.011530f, -0.002710f, 0.011290f, 0.000224f, -0.000624f, -0.003718f, -0.000514f, 0.006259f, 0.002384f, -0.018482f, -0.006185f, -0.010821f, -0.000517f, -0.000721f, -0.007086f, -0.008343f, -0.006372f, 0.002100f, -0.006131f, 0.003733f, 0.005867f, 0.006457f, -0.008435f, -0.004293f, -0.009543f, -0.005564f, -0.002692f, 0.000615f, -0.009041f, 0.009109f, 0.003668f, -0.004086f, -0.000191f, -0.001681f, 0.015651f, 0.003649f, -0.001411f, -0.004674f, 0.019623f, 0.001500f, -0.001780f, -0.000248f, -0.002036f, -0.009836f, -0.010895f, 0.010421f, 0.001928f, -0.005531f, -0.009584f, -0.003953f, -0.007366f, -0.011437f, 0.014692f, 0.002266f, 0.005004f, 0.007996f, 0.021367f, -0.000135f, 0.002983f, -0.004845f, + -0.002462f, -0.003630f, -0.014781f, 0.003605f, -0.004895f, 0.001831f, 0.009364f, -0.003489f, -0.001527f, 0.002582f, 0.000485f, -0.001928f, -0.000110f, -0.012740f, 0.002147f, 0.000117f, -0.005324f, 0.004556f, 0.001279f, -0.008422f, 0.013366f, 0.000940f, 0.001372f, 0.013476f, -0.005711f, -0.005158f, -0.013510f, -0.006027f, 0.008174f, 0.001048f, 0.008740f, -0.004122f, -0.011233f, 0.005096f, -0.010543f, -0.003826f, -0.019672f, 0.008350f, 0.005798f, 0.004648f, 0.004842f, 0.013629f, 0.002481f, -0.004961f, 0.006070f, 0.011580f, -0.008019f, 0.006263f, -0.001079f, -0.001163f, -0.004777f, -0.001500f, 0.006002f, 0.000498f, 0.002531f, -0.007799f, 0.001982f, -0.004781f, -0.010237f, -0.000856f, -0.012070f, -0.014302f, -0.009299f, -0.006798f, -0.016104f, 0.000742f, -0.005949f, -0.003109f, 0.004682f, 0.017030f, 0.001332f, -0.003955f, -0.002171f, 0.002786f, -0.000566f, 0.007090f, 0.011788f, -0.000979f, 0.013258f, -0.001529f, -0.001141f, -0.001603f, 0.007429f, -0.010169f, 0.001311f, 0.001221f, -0.002778f, -0.000607f, -0.006363f, -0.010148f, 0.013588f, -0.004783f, -0.001339f, -0.002550f, 0.005813f, -0.006698f, + -0.006007f, 0.002307f, 0.001729f, 0.009567f, -0.006993f, 0.007832f, -0.005017f, -0.008180f, -0.000989f, -0.003513f, 0.001803f, 0.004115f, -0.000551f, 0.005377f, 0.002301f, 0.003808f, -0.005750f, -0.006644f, -0.010830f, -0.008062f, 0.000562f, 0.011987f, 0.001147f, 0.009580f, 0.002192f, -0.005816f, 0.006516f, 0.002585f, -0.007943f, 0.012316f, 0.001780f, -0.013458f, -0.014959f, -0.012912f, 0.002598f, 0.001697f, 0.010812f, -0.008274f, 0.011141f, -0.005525f, -0.002709f, -0.017542f, -0.001316f, 0.001404f, -0.006265f, -0.000833f, 0.009379f, 0.009228f, 0.013359f, -0.003054f, -0.002191f, 0.008675f, 0.003838f, 0.007826f, -0.018422f, 0.018413f, -0.004002f, 0.000022f, 0.002800f, -0.001934f, -0.000204f, -0.001331f, -0.001299f, 0.011565f, -0.000358f, 0.015100f, -0.002555f, -0.005727f, -0.012289f, 0.001776f, -0.005542f, -0.004525f, 0.008548f, 0.006940f, 0.008958f, 0.000681f, 0.001196f, -0.012695f, -0.009324f, 0.000276f, 0.012073f, 0.004561f, -0.001357f, 0.004449f, -0.004759f, 0.013180f, -0.000434f, -0.010463f, -0.013639f, -0.004441f, 0.015932f, 0.012351f, 0.012425f, 0.006195f, 0.000881f, -0.012424f, + -0.005350f, -0.001168f, -0.007087f, 0.008776f, -0.000747f, -0.002873f, 0.007595f, -0.017752f, 0.006374f, -0.001464f, 0.005322f, -0.000490f, 0.004239f, -0.004723f, -0.007586f, -0.001865f, -0.005766f, 0.002335f, 0.010652f, 0.003437f, 0.000854f, -0.004684f, -0.023108f, -0.016109f, -0.000023f, 0.006272f, 0.008747f, -0.000090f, 0.002147f, -0.003905f, 0.008668f, 0.003049f, 0.007036f, -0.010877f, 0.010221f, 0.005003f, -0.010627f, 0.003549f, 0.010631f, -0.001174f, 0.003746f, 0.001031f, 0.009678f, -0.007804f, 0.005927f, -0.001581f, -0.000792f, -0.009477f, 0.000990f, 0.008774f, -0.005573f, -0.005042f, -0.007812f, 0.010388f, -0.000633f, 0.001449f, -0.008240f, -0.025497f, -0.006771f, 0.002901f, 0.002741f, 0.008398f, -0.006131f, -0.004847f, -0.003292f, -0.002452f, -0.007489f, -0.000571f, -0.006704f, 0.015390f, 0.006213f, 0.012370f, -0.012891f, -0.003548f, -0.005017f, 0.011468f, -0.003197f, -0.003272f, -0.009700f, 0.005378f, 0.000483f, -0.007999f, 0.011362f, 0.002105f, 0.002241f, 0.010840f, 0.003819f, 0.006523f, -0.005186f, 0.004110f, 0.000453f, -0.002789f, 0.011252f, 0.008439f, -0.000817f, -0.015363f, + -0.020341f, -0.015844f, 0.005868f, -0.000088f, -0.008774f, -0.002400f, 0.001056f, -0.002112f, 0.022952f, 0.003849f, -0.016561f, -0.004521f, -0.004949f, 0.000716f, -0.007804f, 0.012853f, -0.009706f, -0.012830f, 0.011858f, -0.005117f, 0.003236f, 0.003029f, -0.005465f, -0.015087f, 0.001953f, -0.008099f, -0.007092f, -0.007453f, -0.000971f, 0.011521f, -0.001676f, -0.002764f, 0.017137f, 0.003038f, 0.002552f, -0.022325f, -0.002572f, 0.011734f, 0.013764f, -0.007773f, 0.003651f, 0.001803f, -0.022035f, -0.003014f, -0.001473f, -0.002300f, 0.005383f, 0.000202f, -0.012439f, 0.001582f, -0.009981f, 0.009439f, -0.003499f, 0.012190f, 0.002268f, -0.013807f, 0.006027f, 0.026323f, -0.010269f, 0.000531f, -0.019549f, 0.005179f, 0.016400f, -0.028653f, 0.004418f, -0.000950f, -0.001749f, 0.019254f, 0.002821f, 0.008407f, 0.014283f, -0.017578f, -0.004916f, -0.013526f, 0.006927f, 0.007157f, 0.015442f, 0.028804f, 0.004921f, -0.022786f, -0.001785f, -0.006095f, -0.002026f, -0.010150f, 0.000312f, -0.001592f, 0.011327f, 0.008279f, 0.003459f, -0.001333f, 0.000685f, -0.003994f, -0.002324f, 0.012102f, -0.003916f, -0.002285f, + 0.009679f, -0.001793f, 0.005777f, -0.001564f, 0.012241f, -0.009840f, -0.018052f, 0.022019f, -0.001172f, 0.004715f, -0.016908f, 0.000573f, -0.005047f, 0.024452f, 0.004097f, 0.010669f, -0.002256f, 0.009362f, 0.006912f, -0.023518f, -0.003479f, -0.013553f, -0.010889f, 0.000747f, 0.016140f, 0.001209f, -0.003133f, 0.024083f, -0.002552f, -0.014911f, -0.010663f, -0.008216f, 0.012307f, 0.036764f, 0.000005f, 0.009565f, 0.002784f, -0.012879f, -0.002549f, -0.000681f, 0.011247f, 0.016221f, 0.001639f, 0.012878f, 0.012275f, -0.023381f, 0.000530f, -0.007431f, -0.028322f, 0.005858f, -0.002195f, 0.009245f, 0.007135f, 0.026327f, 0.006196f, -0.005836f, 0.007240f, 0.019987f, 0.023671f, 0.008753f, 0.016903f, 0.015804f, -0.012028f, -0.010643f, -0.019964f, -0.023103f, 0.003232f, 0.008981f, -0.018173f, -0.014167f, -0.000239f, -0.022608f, -0.017383f, 0.008548f, 0.003754f, -0.010411f, -0.005681f, -0.015049f, 0.012762f, 0.008070f, 0.020465f, 0.036693f, -0.003318f, -0.011236f, -0.003157f, -0.019047f, 0.000619f, -0.014977f, -0.015026f, 0.018507f, 0.003033f, 0.002009f, -0.023733f, 0.024776f, 0.005911f, -0.016426f, + -0.004211f, 0.012468f, 0.001755f, 0.002237f, 0.000453f, 0.001540f, 0.008323f, -0.012689f, 0.015109f, -0.000251f, -0.009072f, -0.003339f, -0.016185f, 0.002125f, -0.016637f, -0.016091f, 0.014378f, 0.013414f, -0.013044f, -0.022627f, 0.006557f, -0.011072f, -0.000713f, -0.006164f, 0.008298f, -0.006330f, 0.010537f, -0.010912f, -0.012262f, 0.014786f, -0.004669f, -0.003297f, 0.008299f, -0.012043f, -0.012992f, 0.014912f, 0.019587f, 0.000476f, -0.001353f, 0.006824f, -0.017135f, 0.029122f, -0.017933f, 0.002241f, 0.013729f, -0.006454f, 0.012805f, 0.015773f, 0.005023f, -0.016282f, 0.017573f, -0.002502f, 0.006531f, -0.012738f, -0.002523f, -0.024346f, 0.008314f, -0.014411f, 0.005504f, -0.025065f, 0.014694f, -0.018289f, -0.012954f, 0.010666f, 0.014518f, 0.005038f, 0.001538f, 0.000732f, -0.015912f, -0.014581f, -0.009457f, 0.038451f, 0.020978f, -0.005923f, -0.035576f, -0.004910f, 0.009939f, 0.020766f, -0.011740f, 0.001764f, -0.024583f, -0.008371f, -0.003067f, 0.006436f, 0.003575f, -0.005479f, -0.000460f, 0.010778f, -0.012159f, -0.000692f, -0.013850f, 0.007481f, 0.009060f, 0.026394f, 0.011252f, -0.013012f, + 0.005460f, -0.007350f, -0.020041f, -0.002731f, 0.011485f, 0.001566f, 0.032705f, -0.024869f, -0.004147f, 0.005573f, 0.014469f, 0.007632f, 0.019006f, 0.003896f, -0.023787f, 0.015153f, -0.020223f, -0.020784f, 0.000043f, -0.001631f, 0.015482f, 0.020218f, 0.017760f, 0.027011f, 0.005928f, -0.027393f, 0.029595f, 0.016739f, -0.012885f, 0.023450f, -0.003701f, 0.003005f, -0.021127f, -0.006913f, -0.006636f, -0.008920f, 0.018721f, -0.032657f, -0.008223f, -0.015309f, -0.015483f, 0.002770f, 0.014913f, -0.007437f, -0.019829f, -0.020040f, -0.027080f, -0.026415f, -0.014420f, -0.004525f, 0.010346f, -0.020789f, -0.027970f, -0.015971f, -0.007918f, -0.013306f, -0.010021f, 0.023268f, -0.014430f, 0.002022f, 0.011096f, -0.021460f, -0.014026f, -0.014573f, 0.021578f, -0.010139f, 0.013448f, 0.032692f, -0.004884f, 0.007008f, 0.001445f, -0.010599f, -0.015186f, -0.009632f, 0.013559f, -0.002988f, 0.015670f, 0.000271f, 0.011140f, 0.002128f, -0.025132f, 0.026746f, -0.014229f, -0.005527f, 0.045349f, 0.031051f, 0.020010f, -0.014008f, -0.035197f, -0.007561f, 0.019069f, -0.030386f, -0.018856f, 0.002189f, 0.023648f, 0.019572f, + 0.013145f, -0.016901f, 0.012542f, -0.003361f, 0.012545f, -0.002017f, 0.034868f, 0.023410f, -0.003194f, -0.031680f, -0.004831f, 0.026998f, 0.020128f, 0.002627f, 0.042590f, 0.021646f, -0.010217f, 0.001764f, 0.001661f, -0.003392f, -0.013653f, -0.015097f, -0.004035f, -0.045682f, 0.012101f, -0.014410f, 0.000888f, 0.000262f, 0.011043f, 0.019665f, -0.000932f, 0.006721f, -0.022606f, 0.017176f, -0.009103f, 0.033584f, -0.000680f, 0.006643f, -0.078117f, -0.001103f, 0.019039f, 0.012815f, 0.020325f, -0.005158f, -0.022942f, 0.014302f, 0.002676f, -0.015158f, 0.015232f, 0.005906f, -0.018421f, 0.002838f, -0.000877f, 0.008563f, -0.007852f, -0.025299f, -0.029853f, 0.001744f, -0.011919f, 0.012482f, 0.008038f, 0.007453f, 0.008646f, -0.030505f, -0.013251f, -0.031998f, -0.052415f, 0.008796f, 0.017711f, 0.019147f, 0.000152f, 0.043725f, -0.031045f, 0.010624f, 0.005687f, -0.008275f, -0.027532f, -0.010981f, -0.015719f, 0.018911f, -0.008207f, -0.016245f, -0.027928f, -0.001958f, -0.010367f, -0.004672f, -0.021031f, 0.011855f, -0.001340f, -0.009116f, 0.011307f, 0.015114f, 0.017067f, -0.021336f, 0.040455f, 0.003253f, + -0.005685f, -0.023965f, -0.023150f, -0.003871f, -0.002859f, -0.023280f, -0.024965f, -0.018404f, 0.016554f, -0.010220f, 0.027308f, 0.009668f, 0.045391f, 0.016521f, 0.017534f, -0.004643f, 0.024641f, -0.003012f, 0.006388f, 0.035437f, -0.009766f, 0.013716f, -0.040376f, -0.050964f, 0.012237f, -0.001011f, -0.032303f, 0.003626f, 0.001862f, -0.043523f, 0.013892f, -0.011533f, -0.007604f, -0.015730f, 0.018576f, -0.014404f, 0.002703f, 0.000468f, 0.010289f, 0.002595f, -0.022249f, 0.017417f, -0.000478f, 0.009213f, -0.027054f, -0.038055f, -0.024151f, 0.008466f, 0.031558f, 0.041393f, -0.001319f, 0.010991f, 0.025931f, 0.021367f, -0.002432f, -0.052770f, 0.035754f, -0.003732f, 0.009477f, -0.010974f, 0.018094f, -0.001601f, -0.023213f, 0.006053f, 0.040942f, 0.005916f, -0.027716f, 0.023467f, 0.016549f, 0.010653f, -0.021070f, 0.021411f, 0.015676f, 0.001234f, 0.025613f, -0.011284f, 0.006284f, 0.041546f, 0.030100f, 0.000298f, 0.008923f, 0.019791f, -0.040939f, -0.009210f, -0.003511f, -0.007498f, -0.036074f, 0.007644f, 0.009557f, 0.000568f, -0.028290f, -0.002002f, -0.047697f, 0.000779f, -0.034455f, -0.008438f, + 0.015909f, -0.016218f, -0.021414f, -0.018391f, 0.008568f, 0.005746f, -0.019938f, 0.004765f, -0.008105f, 0.020118f, -0.013381f, -0.016602f, 0.010503f, 0.018031f, -0.003560f, 0.005561f, 0.006787f, -0.055061f, -0.002675f, -0.008490f, -0.027387f, -0.002711f, 0.031748f, 0.003813f, -0.010368f, -0.011666f, 0.024037f, 0.006308f, 0.018049f, -0.044383f, 0.017619f, -0.046031f, -0.059374f, -0.034813f, 0.000270f, -0.029374f, 0.028602f, -0.007470f, -0.040607f, 0.000881f, -0.011911f, 0.007414f, 0.005047f, -0.006775f, -0.007082f, 0.027582f, -0.009686f, 0.011896f, -0.015934f, -0.011547f, 0.038280f, -0.011365f, -0.006730f, 0.001028f, 0.007114f, 0.027136f, -0.052781f, -0.001174f, 0.025078f, 0.028479f, 0.022509f, 0.005517f, -0.011252f, 0.054443f, 0.015631f, 0.018725f, 0.018312f, 0.011560f, -0.009406f, 0.002664f, 0.028674f, 0.012238f, -0.023762f, 0.013799f, 0.054524f, -0.027561f, 0.037049f, 0.016650f, -0.061772f, 0.016772f, 0.038059f, -0.002040f, 0.015984f, 0.002087f, -0.047338f, 0.025180f, 0.054275f, 0.005473f, 0.036222f, -0.020954f, 0.031773f, 0.030273f, -0.003088f, -0.002912f, 0.028889f, 0.018566f, + -0.043255f, 0.042877f, -0.012576f, -0.007585f, 0.022158f, -0.010565f, -0.017833f, -0.017327f, 0.001977f, 0.002221f, -0.017134f, -0.033171f, 0.078283f, 0.037251f, -0.089110f, -0.038132f, 0.010577f, -0.015920f, 0.027053f, 0.029671f, 0.033915f, 0.036645f, -0.022079f, 0.070302f, -0.009685f, 0.000827f, -0.022280f, 0.025889f, 0.036853f, -0.026766f, -0.028354f, -0.007161f, -0.015866f, 0.002198f, 0.015367f, 0.001235f, -0.017420f, -0.007970f, 0.030468f, -0.003311f, 0.015960f, 0.002608f, 0.036463f, 0.051964f, 0.021238f, -0.026432f, -0.058471f, -0.005983f, -0.008939f, 0.005732f, -0.012602f, 0.018690f, 0.034280f, 0.001999f, -0.011017f, -0.028246f, 0.066462f, 0.056019f, -0.006292f, 0.026834f, -0.014228f, -0.021855f, -0.061501f, 0.033696f, -0.027981f, -0.007789f, -0.000533f, -0.020676f, 0.012364f, 0.037528f, 0.007272f, -0.018085f, 0.019689f, -0.008948f, -0.024556f, 0.038373f, 0.009370f, -0.055757f, 0.071377f, -0.048547f, -0.024174f, 0.026005f, 0.028933f, 0.022209f, 0.001311f, -0.024431f, 0.002375f, 0.036031f, 0.010184f, -0.047724f, -0.039015f, -0.008708f, 0.060070f, 0.006905f, -0.029231f, -0.077214f, + -0.021866f, -0.002860f, 0.018313f, 0.054299f, 0.040915f, -0.004973f, 0.000410f, 0.036049f, 0.028624f, 0.002178f, 0.007839f, -0.104169f, -0.066227f, -0.031350f, -0.051860f, 0.005481f, -0.028874f, 0.047499f, -0.010528f, -0.002589f, -0.000078f, -0.017623f, -0.021195f, 0.034828f, 0.021206f, 0.013110f, -0.004515f, -0.014808f, -0.014088f, 0.018058f, -0.037336f, -0.012784f, 0.006999f, -0.011685f, -0.017967f, 0.017112f, -0.054020f, -0.074686f, 0.018528f, 0.025288f, 0.029993f, -0.042926f, -0.023180f, 0.026195f, 0.009826f, -0.072616f, -0.064699f, 0.005600f, -0.031049f, -0.030977f, 0.012645f, -0.058295f, 0.030935f, -0.021531f, 0.025507f, 0.025635f, -0.014388f, -0.032226f, -0.077619f, -0.025935f, -0.022973f, 0.045043f, -0.037328f, -0.023992f, 0.014269f, 0.031735f, 0.041788f, -0.006010f, -0.057936f, 0.026735f, -0.009283f, -0.023035f, -0.050008f, 0.015573f, 0.020444f, -0.072291f, 0.026999f, 0.026877f, 0.065378f, 0.006855f, -0.017112f, 0.004981f, -0.081292f, -0.022556f, -0.010332f, 0.001950f, 0.014286f, -0.026707f, 0.049025f, 0.020707f, 0.060738f, -0.011407f, 0.053405f, 0.035415f, 0.020901f, 0.049894f, + 0.024491f, 0.033195f, 0.041366f, 0.002629f, -0.054833f, -0.050706f, 0.010250f, 0.059682f, 0.042368f, -0.077831f, -0.002433f, -0.012648f, -0.011174f, -0.007644f, -0.054499f, 0.014471f, -0.038806f, 0.035344f, -0.025935f, 0.079085f, -0.020670f, -0.112655f, -0.011937f, -0.038769f, 0.022564f, 0.016768f, 0.032302f, 0.073108f, 0.016526f, -0.010352f, 0.040272f, -0.024358f, 0.081996f, 0.012771f, 0.054808f, 0.024293f, 0.004847f, -0.022839f, -0.019247f, 0.131443f, -0.000241f, -0.097074f, -0.020835f, 0.067494f, -0.049110f, -0.002185f, 0.037839f, 0.015094f, -0.076022f, -0.029819f, -0.086521f, 0.012189f, 0.077437f, -0.057822f, -0.052610f, 0.049501f, 0.024281f, -0.088288f, -0.082053f, 0.024948f, 0.004587f, 0.010538f, 0.028177f, -0.005082f, -0.024687f, -0.014323f, 0.052584f, -0.039532f, 0.064846f, 0.008643f, -0.015467f, 0.011838f, 0.037201f, -0.002291f, -0.011697f, -0.071830f, -0.031088f, 0.005334f, -0.037950f, 0.029649f, 0.047248f, 0.000827f, 0.007040f, -0.052543f, 0.058310f, -0.023765f, -0.027707f, 0.045326f, -0.019915f, -0.003142f, -0.036185f, -0.006949f, -0.026038f, -0.089158f, 0.027559f, -0.013412f, + 0.061594f, 0.077491f, -0.003394f, -0.018888f, -0.054122f, -0.020967f, -0.017074f, 0.072643f, -0.076753f, -0.057444f, -0.125601f, -0.002959f, -0.054324f, 0.007653f, 0.038272f, -0.029967f, -0.011118f, 0.075436f, 0.048333f, 0.028835f, 0.000090f, -0.007174f, 0.055337f, -0.082530f, -0.013593f, -0.000156f, -0.013916f, 0.010025f, 0.070160f, -0.050300f, 0.014722f, -0.014356f, -0.030765f, -0.021423f, 0.108329f, -0.010597f, 0.051083f, -0.040078f, 0.072641f, -0.022057f, -0.002960f, 0.045974f, 0.040271f, 0.110531f, 0.001023f, 0.022015f, 0.011545f, -0.040217f, 0.050687f, 0.021736f, -0.036066f, 0.058128f, -0.026173f, 0.072007f, 0.047382f, -0.010888f, 0.040754f, 0.007107f, 0.037827f, 0.013485f, 0.066834f, -0.037950f, 0.031493f, -0.066119f, -0.021565f, 0.029298f, 0.072858f, 0.002057f, 0.002569f, 0.038463f, -0.003825f, -0.020204f, -0.095650f, -0.051260f, 0.012260f, -0.033769f, -0.005192f, 0.034984f, -0.083675f, 0.055114f, -0.006865f, 0.064517f, -0.031085f, -0.048422f, -0.012748f, 0.157290f, 0.031142f, -0.130948f, 0.021158f, 0.041461f, 0.005650f, 0.155990f, -0.011773f, -0.103635f, 0.111718f, -0.032286f, + -0.009554f, 0.130729f, -0.015144f, 0.086385f, 0.012214f, -0.074840f, -0.000069f, 0.084444f, 0.010715f, 0.011594f, -0.003576f, -0.112156f, -0.006706f, 0.015625f, -0.039593f, -0.013486f, -0.114225f, 0.071952f, 0.114420f, -0.050991f, 0.017686f, -0.087239f, -0.248647f, -0.049388f, 0.013330f, 0.125602f, 0.108414f, -0.106035f, -0.091447f, -0.095445f, -0.075441f, -0.056016f, 0.067921f, -0.013057f, 0.147614f, 0.097220f, -0.027741f, -0.122368f, -0.300262f, -0.197095f, 0.015252f, 0.333384f, 0.256611f, 0.044950f, -0.129922f, -0.331644f, -0.336277f, -0.026486f, 0.198251f, 0.302310f, 0.335127f, 0.032341f, -0.106430f, -0.138730f, -0.179693f, -0.165385f, 0.012328f, 0.110359f, 0.211348f, 0.142030f, 0.116811f, -0.153294f, -0.183298f, -0.219709f, -0.259887f, 0.025971f, 0.313803f, 0.304732f, 0.063578f, -0.115319f, -0.292711f, -0.389242f, -0.129612f, 0.024494f, 0.143237f, 0.345056f, 0.129086f, -0.008023f, -0.194358f, -0.167356f, -0.068351f, 0.067833f, 0.133948f, 0.221768f, -0.029770f, 0.053867f, 0.041357f, -0.095012f, 0.000950f, 0.048804f, -0.039361f, 0.053923f, -0.002338f, -0.010009f, -0.004048f, 0.010751f, + 0.040853f, -0.016295f, 0.048147f, 0.032703f, 0.019445f, 0.021673f, 0.016330f, -0.004435f, -0.028006f, 0.044964f, -0.000952f, 0.027306f, -0.016834f, 0.024257f, -0.008856f, -0.003868f, 0.016273f, -0.022744f, -0.024061f, 0.003086f, -0.010639f, 0.036212f, 0.035674f, -0.033597f, 0.016010f, -0.020204f, 0.022188f, 0.000013f, 0.014343f, 0.005205f, 0.018768f, -0.024113f, 0.015721f, -0.027688f, -0.012471f, -0.004287f, -0.003768f, 0.021432f, -0.042185f, -0.008713f, -0.017849f, -0.037430f, -0.004012f, -0.015015f, 0.008082f, 0.034675f, -0.011301f, -0.049204f, 0.007128f, 0.029855f, 0.058366f, -0.002910f, 0.004602f, -0.032029f, -0.024668f, 0.027457f, 0.002189f, -0.010185f, 0.000802f, 0.048876f, 0.021779f, 0.016657f, 0.027421f, 0.047142f, -0.043715f, 0.006504f, 0.008624f, -0.032725f, 0.086625f, 0.154505f, 0.011097f, -0.097915f, 0.031553f, -0.005610f, 0.121774f, 0.060023f, 0.119663f, -0.009552f, -0.059734f, -0.013837f, 0.025024f, 0.052991f, 0.038034f, -0.020665f, 0.001967f, 0.023574f, 0.013795f, 0.050157f, -0.035727f, 0.010007f, -0.047500f, -0.005512f, -0.001325f, 0.013561f, 0.021756f, 0.007068f, + -0.021396f, 0.038845f, -0.005391f, -0.030825f, 0.042619f, -0.005760f, -0.017940f, 0.013715f, -0.008619f, 0.036602f, 0.053402f, 0.003251f, 0.012482f, -0.016729f, -0.013615f, 0.033963f, 0.021223f, 0.028475f, 0.003285f, -0.014865f, -0.036801f, -0.033764f, -0.040819f, 0.033119f, 0.032224f, 0.035557f, 0.048028f, 0.055627f, 0.021239f, 0.004999f, -0.048611f, 0.030896f, -0.006845f, -0.040092f, 0.050626f, -0.001396f, 0.032752f, 0.020676f, -0.054152f, 0.017372f, -0.017112f, 0.014426f, 0.034194f, 0.010482f, -0.044897f, -0.025863f, -0.025001f, -0.055092f, -0.119289f, 0.006824f, 0.167867f, 0.219102f, 0.190287f, 0.129010f, -0.004678f, 0.006432f, -0.095707f, -0.116595f, -0.192214f, -0.147657f, -0.154304f, -0.052211f, 0.013522f, 0.048298f, 0.085088f, 0.208096f, 0.175257f, 0.115485f, 0.038286f, -0.021083f, -0.076065f, -0.059296f, -0.079211f, -0.103372f, -0.056211f, -0.060468f, -0.071204f, -0.036069f, -0.047128f, 0.006603f, 0.032224f, 0.024211f, 0.088772f, 0.079102f, 0.072400f, 0.044192f, 0.054417f, 0.030957f, 0.065216f, 0.011785f, 0.056036f, -0.001955f, -0.016856f, -0.105333f, -0.045780f, -0.126273f, + -0.143206f, -0.162991f, -0.126150f, -0.098590f, -0.035845f, 0.017577f, 0.087236f, 0.089809f, 0.072315f, 0.149333f, 0.122645f, 0.127754f, 0.120767f, 0.108589f, 0.041507f, 0.066289f, -0.036817f, -0.086013f, -0.086524f, -0.198107f, -0.194814f, -0.193403f, -0.201778f, -0.173607f, -0.066686f, -0.045181f, 0.027364f, 0.086363f, 0.092905f, 0.039836f, 0.018707f} + }, + { + {-0.004040f, -0.000830f, 0.000613f, -0.001602f, -0.002829f, -0.007232f, 0.000901f, -0.001133f, -0.013391f, -0.001878f, -0.001526f, 0.004599f, 0.010737f, -0.009080f, 0.003944f, -0.005698f, 0.002421f, -0.007837f, 0.003986f, 0.002558f, -0.005622f, -0.005130f, -0.008498f, 0.003533f, -0.007983f, 0.001191f, 0.007008f, 0.004917f, 0.002149f, 0.003324f, 0.000517f, -0.007091f, 0.000305f, -0.004431f, 0.003582f, 0.002330f, 0.002731f, 0.011169f, 0.003600f, 0.001686f, -0.000240f, 0.003823f, -0.000111f, 0.003521f, -0.000878f, 0.007965f, 0.002757f, 0.003542f, 0.005998f, 0.013328f, 0.000654f, -0.002188f, 0.005334f, -0.004015f, -0.009282f, 0.004755f, -0.004256f, -0.007988f, 0.002086f, -0.002432f, 0.004401f, -0.002118f, -0.003564f, -0.006102f, 0.006329f, 0.002359f, -0.000370f, -0.005892f, -0.008228f, -0.002438f, -0.001872f, 0.001349f, -0.001025f, -0.000146f, 0.001309f, 0.002465f, 0.019262f, 0.010384f, -0.001251f, 0.006853f, 0.001600f, 0.001644f, -0.021281f, -0.009117f, -0.010582f, 0.008366f, -0.001217f, -0.006776f, 0.007430f, 0.007864f, 0.000435f, 0.007558f, -0.003179f, -0.000137f, -0.000505f, -0.004474f, + -0.002456f, -0.010063f, 0.005204f, -0.014934f, 0.006233f, -0.007728f, 0.006360f, 0.012103f, 0.005419f, -0.002149f, -0.003429f, 0.008982f, -0.001465f, 0.000546f, 0.008341f, -0.008833f, -0.000289f, -0.002895f, -0.005188f, 0.001241f, -0.001272f, 0.002000f, 0.008575f, 0.014292f, -0.004496f, 0.000403f, 0.011756f, 0.001043f, 0.003107f, -0.004175f, -0.006557f, -0.000815f, 0.002012f, -0.010944f, -0.002863f, 0.005954f, 0.000819f, 0.002248f, 0.003527f, -0.001442f, -0.003365f, -0.003134f, -0.003761f, 0.004433f, 0.003678f, -0.001917f, -0.006157f, -0.007708f, 0.004125f, 0.000152f, -0.006144f, 0.006882f, -0.001008f, -0.000505f, 0.001812f, 0.001738f, -0.001677f, -0.007037f, -0.001832f, -0.000025f, -0.006509f, -0.006746f, -0.003917f, 0.015919f, -0.011154f, -0.004700f, -0.007762f, -0.014368f, 0.005423f, 0.002369f, 0.000645f, 0.012184f, 0.011703f, 0.011555f, 0.003851f, -0.002261f, 0.001896f, 0.008688f, -0.003655f, 0.003696f, 0.004533f, -0.010440f, 0.014842f, 0.002767f, 0.004692f, 0.010804f, -0.004080f, -0.010972f, 0.000851f, 0.007285f, -0.005084f, -0.002467f, -0.006814f, 0.007242f, -0.000056f, -0.000864f, + -0.011924f, -0.000643f, -0.001320f, 0.007302f, 0.003948f, -0.006749f, 0.013360f, 0.004730f, 0.002919f, 0.004473f, -0.001970f, 0.007240f, -0.002689f, 0.000195f, -0.009003f, -0.011187f, 0.009042f, 0.006707f, 0.012458f, 0.000974f, 0.003554f, -0.009704f, -0.014370f, -0.007458f, -0.004092f, -0.004567f, -0.006435f, -0.006169f, 0.003391f, -0.002087f, 0.004863f, -0.005958f, -0.001619f, 0.001863f, 0.003330f, -0.002336f, 0.008250f, 0.001508f, -0.013761f, -0.012860f, 0.007533f, 0.001688f, 0.010540f, -0.016321f, -0.002302f, -0.006515f, 0.001739f, 0.019348f, 0.011053f, -0.017013f, 0.006395f, 0.001550f, -0.007100f, -0.007936f, -0.009653f, -0.015693f, 0.000516f, 0.001789f, -0.005839f, 0.002683f, -0.003392f, 0.000497f, 0.004650f, 0.003530f, 0.010001f, -0.008927f, 0.015778f, -0.009795f, 0.009125f, 0.007162f, -0.006024f, 0.004120f, 0.000675f, 0.006422f, -0.002738f, 0.003263f, 0.005937f, 0.001825f, 0.000826f, -0.002633f, 0.004589f, 0.001186f, -0.002234f, 0.011029f, -0.014880f, 0.000745f, -0.009076f, 0.017460f, 0.006117f, -0.015821f, 0.005863f, 0.019945f, -0.019250f, -0.009489f, 0.002118f, -0.002001f, + -0.007426f, 0.005566f, -0.002738f, 0.012970f, -0.011587f, -0.001757f, -0.003992f, -0.001509f, -0.000939f, 0.012215f, -0.012394f, -0.005049f, -0.001620f, -0.013798f, 0.006395f, 0.003528f, 0.013056f, 0.002983f, 0.010558f, 0.005896f, -0.009214f, 0.000990f, -0.005661f, 0.006099f, 0.002568f, -0.009707f, 0.027949f, -0.017683f, 0.005900f, 0.029788f, -0.020721f, 0.009764f, -0.000138f, 0.009731f, -0.002151f, -0.018079f, -0.003483f, 0.014935f, 0.013873f, 0.003746f, 0.000404f, 0.007632f, 0.004265f, 0.000384f, 0.006845f, 0.006425f, -0.004563f, 0.008180f, -0.001564f, 0.012826f, -0.009472f, -0.015437f, 0.004074f, -0.013409f, 0.005488f, 0.000579f, -0.003119f, -0.004021f, -0.005418f, -0.008915f, 0.002683f, 0.003733f, 0.001245f, 0.002864f, 0.003668f, -0.005204f, -0.011027f, 0.010048f, 0.003160f, 0.002199f, 0.000501f, 0.014601f, 0.003936f, 0.006589f, 0.015873f, -0.008179f, 0.004805f, 0.001504f, 0.005736f, 0.011283f, 0.009426f, -0.012299f, -0.010302f, -0.001816f, -0.005197f, -0.000202f, 0.002070f, -0.004270f, 0.004745f, -0.009016f, 0.002305f, -0.008342f, 0.006993f, 0.007427f, -0.003953f, 0.010224f, + -0.005224f, 0.009414f, -0.002975f, 0.005471f, -0.006009f, 0.002093f, -0.004441f, 0.004188f, -0.002885f, -0.015640f, 0.011638f, 0.009992f, 0.020142f, -0.012542f, 0.007413f, -0.015883f, -0.004423f, 0.012334f, 0.010158f, -0.010624f, 0.002122f, -0.012553f, -0.000334f, -0.014989f, 0.004090f, -0.010779f, -0.016894f, -0.012137f, 0.005608f, -0.009446f, -0.000873f, -0.011360f, 0.000358f, 0.003760f, -0.003331f, -0.007780f, 0.004707f, 0.010342f, 0.003700f, 0.005855f, -0.011631f, 0.007552f, -0.012129f, -0.001429f, 0.005299f, 0.002241f, -0.002823f, -0.000840f, -0.001742f, 0.008968f, -0.009291f, -0.013192f, -0.004573f, 0.006953f, -0.004574f, -0.009099f, -0.012848f, -0.013971f, 0.002567f, -0.002265f, -0.016637f, 0.013477f, -0.011157f, -0.006952f, 0.017110f, -0.003876f, -0.005033f, 0.004499f, -0.004754f, -0.002792f, 0.000063f, -0.006535f, -0.006480f, -0.004267f, -0.008181f, 0.003425f, 0.002428f, 0.014817f, -0.021130f, 0.004222f, 0.017391f, -0.006176f, 0.019077f, 0.005959f, 0.000596f, -0.005267f, -0.014429f, -0.008629f, 0.022752f, -0.012201f, -0.000833f, -0.003983f, 0.001081f, 0.014462f, 0.011903f, -0.007364f, + 0.017513f, 0.018587f, -0.009457f, -0.004240f, 0.010278f, -0.009169f, -0.009131f, -0.000374f, -0.013579f, -0.000094f, -0.004690f, 0.001797f, 0.020993f, 0.007640f, 0.000167f, -0.009966f, -0.030290f, -0.003482f, 0.015337f, 0.004085f, -0.012086f, 0.008428f, 0.012185f, 0.011660f, 0.012898f, -0.023139f, 0.003415f, 0.001058f, -0.012767f, 0.006120f, -0.011672f, 0.007223f, -0.007232f, 0.008959f, 0.019022f, 0.026897f, 0.015558f, 0.007638f, -0.012849f, -0.003345f, -0.015110f, -0.014368f, -0.004766f, 0.015591f, 0.001992f, -0.000052f, 0.001681f, -0.015846f, 0.001802f, 0.001657f, -0.002616f, -0.008078f, 0.001399f, 0.008452f, -0.012339f, -0.016633f, 0.034190f, 0.006463f, -0.011632f, -0.001977f, -0.007510f, -0.001460f, 0.003970f, -0.005663f, 0.029486f, -0.001946f, 0.007630f, 0.022928f, 0.001923f, -0.002170f, -0.015226f, 0.009140f, -0.008636f, -0.008536f, -0.029802f, -0.011786f, 0.004923f, -0.000382f, -0.006471f, -0.019694f, 0.006422f, 0.012691f, -0.017280f, -0.007380f, -0.005253f, -0.015974f, 0.006025f, 0.002460f, -0.009909f, -0.006220f, -0.003932f, -0.021970f, -0.009066f, 0.012804f, 0.018549f, -0.013333f, + -0.019042f, -0.003995f, -0.001808f, -0.013526f, -0.012932f, 0.005999f, 0.007433f, -0.014918f, 0.031913f, 0.001538f, 0.012587f, -0.006025f, 0.011805f, -0.007028f, 0.003120f, -0.021719f, -0.005488f, 0.010882f, -0.023737f, 0.007803f, -0.005802f, -0.010331f, -0.026830f, 0.000886f, 0.014062f, 0.001685f, -0.028218f, -0.002722f, 0.004575f, 0.012599f, 0.019902f, -0.006080f, 0.008698f, 0.025067f, 0.007548f, 0.004025f, -0.011235f, -0.001429f, 0.009563f, -0.003512f, -0.008437f, 0.010390f, 0.002556f, -0.017523f, -0.025922f, -0.022304f, -0.026855f, 0.022989f, -0.013762f, -0.004198f, 0.008361f, -0.026651f, -0.010192f, -0.018756f, -0.007464f, -0.006473f, 0.012334f, -0.023458f, -0.011572f, 0.006534f, 0.009579f, 0.012402f, 0.000355f, -0.000292f, -0.003510f, -0.000786f, -0.004803f, 0.002507f, -0.017509f, -0.010468f, -0.015343f, 0.010244f, 0.005985f, 0.007751f, 0.011565f, -0.022732f, -0.001087f, -0.003170f, 0.020442f, -0.008320f, 0.006753f, 0.010041f, -0.003637f, 0.010794f, -0.007188f, 0.012115f, 0.018629f, -0.008002f, -0.000858f, 0.014720f, -0.012983f, 0.020675f, -0.008903f, -0.035324f, 0.005663f, 0.016803f, + -0.006513f, 0.001013f, -0.000348f, 0.012567f, 0.017313f, -0.018516f, -0.007434f, 0.002827f, 0.011846f, -0.021764f, -0.015553f, -0.013886f, 0.024562f, -0.002280f, -0.028804f, -0.008187f, -0.012649f, -0.016312f, -0.006092f, 0.010570f, 0.004408f, 0.015299f, 0.005726f, 0.007276f, -0.030472f, -0.012482f, 0.012353f, -0.008536f, -0.005489f, -0.010695f, 0.003473f, 0.015611f, 0.004523f, 0.003373f, -0.020335f, -0.007446f, -0.003466f, 0.007176f, 0.018424f, -0.022504f, 0.010673f, -0.018448f, -0.004481f, -0.017024f, 0.002408f, 0.001760f, -0.000553f, 0.006355f, -0.015126f, -0.004997f, -0.014156f, -0.006511f, 0.000552f, -0.001252f, -0.017846f, 0.009798f, 0.011946f, -0.004954f, 0.014127f, 0.026547f, 0.003104f, 0.019940f, 0.026736f, 0.001414f, 0.001199f, 0.005690f, -0.005189f, 0.008057f, 0.002177f, -0.006493f, -0.008487f, 0.032441f, -0.003003f, 0.018640f, 0.009061f, -0.010538f, -0.010812f, -0.008674f, 0.009869f, -0.008360f, 0.012721f, 0.028423f, 0.015577f, -0.004680f, 0.001356f, -0.025301f, -0.015853f, -0.015745f, 0.024206f, 0.035296f, -0.014421f, -0.000996f, -0.013052f, -0.003977f, 0.020045f, 0.058574f, + 0.024380f, -0.007078f, -0.002824f, -0.009970f, 0.025805f, -0.025925f, -0.016003f, -0.040046f, -0.001321f, 0.020854f, 0.024160f, 0.005236f, -0.010813f, -0.023736f, -0.018786f, 0.018733f, -0.004566f, 0.029326f, -0.001003f, -0.008501f, 0.012574f, 0.005605f, -0.001199f, -0.006444f, 0.017716f, -0.002809f, 0.015154f, 0.000398f, -0.009807f, 0.035863f, -0.009450f, 0.014920f, 0.033571f, 0.012799f, -0.002533f, -0.016305f, -0.004285f, -0.026955f, -0.033413f, 0.007626f, 0.019528f, -0.004378f, 0.001716f, -0.034670f, -0.014618f, 0.020979f, 0.009809f, -0.008584f, 0.005455f, -0.009917f, -0.006412f, -0.015547f, -0.028400f, 0.002144f, -0.007819f, -0.018577f, -0.032681f, -0.026403f, -0.010330f, -0.024227f, 0.009711f, -0.010600f, 0.002173f, 0.003644f, -0.002037f, 0.001032f, -0.005962f, -0.005097f, 0.013903f, 0.032237f, -0.023644f, 0.004366f, -0.011283f, 0.011972f, -0.013674f, -0.024459f, -0.026312f, 0.006314f, 0.010939f, 0.031618f, -0.026742f, 0.007997f, 0.008945f, -0.046256f, -0.001576f, -0.000454f, -0.037512f, -0.021518f, -0.012961f, 0.008871f, -0.002577f, 0.001439f, -0.010291f, 0.015130f, 0.025615f, 0.012359f, + -0.003191f, -0.039561f, -0.016447f, -0.021979f, 0.008180f, 0.001343f, -0.016619f, -0.002377f, 0.013590f, -0.012342f, 0.023242f, -0.021852f, -0.000377f, -0.013260f, -0.038380f, 0.005349f, -0.016244f, -0.019811f, 0.014526f, 0.019979f, -0.023791f, 0.007863f, 0.028321f, -0.010670f, 0.012433f, 0.008167f, -0.006584f, 0.002264f, -0.031334f, 0.045779f, 0.018638f, 0.009504f, 0.045231f, -0.057094f, -0.004251f, -0.009551f, 0.005719f, 0.020564f, 0.023249f, 0.006899f, 0.010947f, 0.026750f, -0.003040f, -0.022036f, -0.034524f, 0.010751f, -0.013313f, -0.001374f, 0.008816f, -0.009673f, 0.013481f, 0.034073f, -0.023473f, 0.014002f, -0.011752f, -0.014463f, 0.006259f, 0.030258f, 0.034278f, 0.009334f, 0.020924f, -0.013382f, 0.009550f, 0.010493f, -0.057816f, 0.016827f, 0.017988f, 0.004550f, -0.018793f, 0.000219f, -0.035877f, 0.042219f, 0.024512f, -0.012416f, -0.014511f, -0.020015f, -0.011307f, 0.030738f, -0.030949f, -0.016786f, -0.005054f, -0.004423f, -0.007038f, 0.005044f, -0.020625f, -0.019912f, -0.012567f, -0.015187f, -0.004718f, -0.019958f, -0.003260f, -0.013182f, -0.045653f, -0.028232f, -0.011553f, -0.006545f, + 0.005963f, 0.008192f, -0.000594f, 0.001946f, 0.012789f, 0.006909f, 0.006408f, 0.032435f, 0.006369f, 0.011318f, 0.019605f, 0.043304f, 0.036322f, 0.002409f, -0.014712f, -0.027647f, 0.025331f, -0.005924f, 0.068844f, 0.014224f, 0.030743f, -0.003206f, 0.003716f, -0.027409f, -0.001332f, 0.023809f, 0.013580f, 0.017748f, -0.021069f, -0.014516f, -0.027074f, -0.051993f, 0.028639f, -0.047106f, -0.006239f, 0.054151f, 0.007671f, -0.041976f, 0.013193f, 0.014342f, -0.026276f, -0.022237f, 0.001593f, 0.015879f, 0.041162f, -0.003043f, -0.029600f, -0.032083f, -0.000393f, -0.018563f, 0.006488f, 0.004721f, -0.033106f, -0.030612f, -0.054883f, -0.017522f, -0.014944f, -0.039171f, -0.024542f, -0.001140f, -0.016372f, -0.012054f, -0.008615f, -0.003990f, -0.036328f, -0.021148f, -0.021717f, -0.012355f, 0.013235f, -0.033006f, 0.004022f, 0.025970f, 0.033550f, -0.008293f, 0.010436f, 0.017441f, -0.029784f, 0.017034f, -0.011841f, 0.027260f, -0.011695f, 0.001767f, -0.012681f, -0.003982f, 0.057735f, -0.012246f, 0.023081f, -0.041515f, -0.004530f, -0.000840f, -0.036318f, 0.035238f, 0.003807f, -0.014052f, 0.028449f, -0.011468f, + 0.009386f, 0.050252f, -0.017370f, -0.028934f, 0.022443f, -0.006318f, -0.053995f, 0.022323f, -0.072305f, -0.041979f, 0.034992f, 0.022710f, 0.010206f, 0.015005f, 0.007040f, -0.001230f, -0.044731f, -0.024277f, -0.009512f, -0.009823f, 0.077556f, 0.041940f, 0.000396f, -0.040101f, 0.020755f, -0.041801f, -0.033405f, 0.005791f, 0.034611f, 0.067466f, -0.010369f, 0.033947f, -0.011970f, 0.024006f, 0.041373f, 0.022664f, 0.026528f, 0.013774f, -0.007455f, -0.033941f, -0.034582f, -0.010829f, -0.032691f, -0.009962f, -0.005864f, -0.007678f, 0.026445f, -0.004741f, -0.067444f, 0.003720f, 0.016387f, 0.015379f, 0.040466f, -0.004382f, -0.080619f, 0.045663f, -0.036118f, 0.011639f, -0.007981f, 0.026989f, 0.039367f, -0.044076f, -0.003285f, -0.022047f, -0.038611f, 0.027707f, -0.019423f, -0.047212f, 0.018078f, 0.027620f, 0.044826f, 0.012119f, -0.007757f, 0.005128f, 0.036332f, -0.029659f, 0.057660f, -0.018109f, -0.017544f, -0.004837f, 0.034295f, -0.036602f, 0.001669f, 0.005297f, -0.105643f, -0.014353f, 0.029374f, -0.013572f, 0.001990f, 0.016203f, 0.003056f, -0.002409f, 0.002072f, 0.039839f, 0.030189f, -0.011301f, + -0.003072f, 0.044509f, 0.029407f, -0.081926f, -0.046628f, 0.056812f, 0.065568f, -0.034549f, -0.011540f, -0.091928f, -0.050717f, 0.014102f, -0.003633f, 0.013184f, -0.048541f, -0.029864f, -0.032945f, 0.051054f, 0.075146f, -0.002416f, 0.021058f, -0.010778f, -0.005373f, 0.000483f, 0.018306f, 0.033721f, 0.009210f, -0.009788f, -0.004647f, -0.005757f, -0.042706f, -0.023224f, -0.043304f, -0.003928f, 0.015877f, -0.016744f, 0.029918f, -0.018238f, -0.005457f, 0.045705f, -0.018494f, 0.026964f, 0.019486f, -0.005038f, -0.038766f, -0.027032f, -0.021757f, 0.010778f, 0.081026f, 0.017199f, 0.045336f, 0.053037f, 0.042377f, 0.032588f, 0.029677f, -0.038558f, 0.005495f, -0.002339f, 0.062421f, 0.032422f, 0.038984f, 0.065617f, -0.023646f, -0.034366f, 0.021338f, 0.057527f, -0.078835f, 0.005949f, 0.015175f, 0.048608f, -0.059972f, -0.094962f, -0.006951f, 0.041710f, 0.022798f, 0.028916f, 0.045821f, -0.010634f, -0.007733f, 0.021390f, -0.033563f, 0.026935f, -0.005885f, -0.016397f, -0.042208f, 0.018835f, -0.023046f, -0.031752f, 0.021435f, 0.055396f, 0.010617f, -0.014424f, 0.025109f, 0.055719f, 0.013840f, 0.015478f, + -0.001394f, -0.000607f, 0.018869f, -0.037323f, -0.002543f, -0.055877f, 0.027485f, -0.044087f, -0.009290f, 0.031645f, 0.009427f, -0.022885f, 0.000665f, -0.027265f, 0.061296f, 0.013898f, 0.016210f, 0.040042f, 0.068015f, -0.025000f, 0.018293f, -0.029780f, 0.007025f, 0.031878f, 0.053290f, 0.019438f, -0.017945f, 0.066104f, 0.002096f, 0.001350f, -0.041112f, 0.007968f, 0.031493f, -0.007127f, 0.029785f, -0.039121f, 0.062234f, 0.077633f, -0.093586f, 0.003677f, -0.013140f, 0.024856f, -0.022875f, -0.005237f, 0.028354f, -0.025159f, -0.101564f, 0.007344f, 0.071354f, -0.058258f, 0.020611f, -0.008543f, -0.021894f, -0.032883f, 0.073719f, 0.000819f, -0.007058f, 0.017687f, -0.087843f, 0.059122f, 0.006226f, -0.043775f, 0.003873f, -0.089858f, -0.021350f, 0.005586f, -0.018162f, -0.071306f, -0.008530f, -0.046373f, -0.012254f, 0.044793f, 0.009724f, 0.058419f, 0.023391f, 0.022919f, 0.013141f, -0.018073f, 0.045641f, -0.021759f, -0.000586f, 0.023232f, 0.009915f, -0.026429f, 0.022779f, 0.011061f, 0.054355f, 0.024164f, -0.009579f, 0.034732f, -0.025837f, 0.046318f, 0.015542f, -0.046542f, -0.049674f, 0.028135f, + 0.033066f, 0.015877f, 0.005917f, -0.021180f, -0.031325f, 0.012386f, -0.030689f, -0.044932f, -0.013649f, -0.005196f, -0.042679f, -0.013286f, 0.017658f, -0.026811f, -0.047947f, 0.017269f, 0.019940f, 0.005251f, -0.004218f, 0.000847f, -0.006317f, 0.021685f, 0.086445f, 0.021345f, -0.000093f, 0.001277f, -0.026704f, -0.043211f, -0.017850f, 0.074357f, 0.078334f, 0.043624f, 0.011672f, 0.073458f, 0.037921f, -0.008824f, -0.087220f, -0.064468f, -0.049680f, -0.101490f, -0.035020f, -0.007774f, 0.020703f, 0.039096f, -0.016682f, 0.050384f, -0.057404f, 0.046616f, -0.005812f, 0.062196f, -0.039997f, 0.036066f, -0.058985f, 0.051846f, -0.047566f, -0.019853f, 0.072077f, 0.016922f, 0.058031f, 0.082762f, 0.008942f, -0.006200f, -0.033800f, -0.002271f, 0.052926f, 0.013687f, -0.017800f, -0.057354f, 0.005770f, 0.012037f, 0.028280f, 0.017357f, 0.023794f, 0.014892f, -0.032672f, -0.053181f, -0.021643f, 0.052931f, 0.021336f, 0.167271f, -0.051426f, -0.043658f, 0.055880f, 0.086334f, 0.019657f, -0.000555f, 0.024350f, 0.006601f, 0.029461f, -0.024141f, 0.012088f, 0.040980f, 0.046497f, 0.030537f, 0.131741f, -0.015303f, + -0.013966f, -0.007257f, 0.069589f, 0.041035f, -0.030665f, 0.036141f, 0.002619f, 0.012641f, -0.024255f, 0.060444f, -0.055229f, 0.005401f, 0.095234f, -0.065919f, 0.200039f, -0.088750f, 0.097921f, 0.086948f, -0.080512f, -0.076933f, 0.090165f, 0.000400f, -0.011924f, 0.028697f, 0.047173f, -0.105005f, -0.038421f, 0.057249f, -0.125555f, -0.084913f, -0.050038f, 0.086263f, 0.197777f, 0.048916f, -0.147614f, -0.038918f, -0.150929f, -0.085691f, 0.130626f, 0.070779f, 0.123031f, 0.060517f, -0.085819f, -0.147660f, -0.104688f, -0.031121f, 0.068469f, 0.068092f, 0.048090f, 0.019494f, -0.033708f, -0.161314f, -0.183656f, -0.046022f, 0.147629f, 0.250680f, 0.177641f, -0.038373f, -0.116296f, -0.178254f, -0.124091f, -0.109406f, 0.003927f, 0.035289f, 0.143726f, 0.143153f, -0.077126f, -0.057040f, -0.184128f, -0.181244f, -0.059133f, 0.010408f, 0.184981f, 0.260722f, 0.122416f, -0.086357f, -0.277104f, -0.215612f, -0.149151f, 0.065804f, 0.163171f, 0.091470f, 0.066371f, 0.045014f, -0.164337f, -0.039856f, -0.092580f, 0.025905f, -0.010613f, 0.089032f, 0.158089f, 0.113000f, -0.143924f, -0.304967f, -0.220165f, 0.012381f, + 0.169700f, -0.016807f, -0.034545f, 0.068674f, 0.021361f, -0.055529f, -0.052460f, 0.000236f, -0.084503f, -0.010366f, 0.012549f, 0.009763f, -0.007303f, 0.002217f, -0.028355f, -0.003430f, -0.003253f, 0.014705f, -0.009697f, 0.039085f, -0.010209f, -0.007362f, -0.010720f, -0.012089f, 0.024471f, 0.007098f, -0.011499f, 0.037884f, 0.002636f, -0.066913f, -0.033210f, 0.018639f, 0.033143f, -0.011006f, 0.004359f, 0.046131f, -0.000731f, 0.006444f, -0.037149f, -0.016623f, 0.012077f, -0.008001f, -0.007799f, -0.004820f, 0.031028f, 0.011180f, -0.011220f, -0.035812f, -0.013566f, -0.001946f, -0.031965f, 0.003303f, -0.036533f, -0.024923f, -0.016391f, -0.033151f, 0.053391f, -0.009257f, -0.022314f, 0.022241f, 0.001114f, -0.051173f, -0.001337f, 0.051434f, 0.043472f, -0.023641f, 0.034352f, 0.005642f, 0.033189f, -0.033973f, -0.047716f, 0.019874f, 0.025588f, 0.020494f, 0.020791f, -0.017381f, 0.022850f, -0.033575f, 0.028355f, 0.025681f, -0.041145f, 0.082440f, 0.126280f, -0.016787f, -0.046599f, -0.040441f, 0.116342f, 0.052182f, 0.112550f, 0.060263f, 0.000105f, -0.052771f, -0.011773f, 0.028169f, 0.052721f, 0.024688f, + -0.024686f, -0.006703f, 0.025021f, 0.036502f, 0.004322f, 0.007565f, -0.026381f, 0.003896f, -0.012959f, 0.016047f, 0.018598f, 0.048266f, 0.041946f, -0.023602f, 0.003155f, -0.026436f, 0.006014f, 0.021263f, 0.032945f, 0.001192f, -0.016656f, -0.001439f, -0.029599f, 0.022625f, -0.007442f, 0.008378f, 0.021655f, -0.001192f, 0.029067f, -0.016522f, -0.009176f, -0.008896f, -0.031842f, -0.020472f, -0.048095f, -0.011032f, -0.054759f, 0.001391f, -0.019662f, 0.041688f, 0.005261f, 0.010389f, -0.042835f, 0.014719f, -0.001177f, -0.021469f, 0.028809f, -0.019683f, -0.010243f, 0.003945f, 0.018238f, -0.006421f, -0.013063f, 0.063809f, 0.019947f, 0.010516f, 0.023069f, -0.025066f, -0.048559f, -0.100957f, -0.015374f, 0.136308f, 0.206631f, 0.175945f, 0.136389f, -0.008385f, 0.014308f, -0.100709f, -0.117182f, -0.187023f, -0.110238f, -0.117682f, -0.039540f, 0.015251f, 0.079286f, 0.058416f, 0.175354f, 0.154992f, 0.048473f, 0.010741f, -0.030447f, -0.060704f, -0.098576f, -0.035429f, -0.101113f, -0.026712f, -0.050949f, -0.031635f, -0.026285f, 0.004164f, -0.001897f, 0.032017f, 0.044341f, 0.071644f, 0.075279f, 0.093390f, + 0.077969f, -0.011856f, 0.003671f, -0.003282f, 0.010892f, -0.049664f, 0.014264f, -0.053256f, -0.130831f, -0.065098f, -0.099463f, -0.162001f, -0.051982f, -0.017997f, -0.070053f, 0.016933f, 0.042347f, 0.105088f, 0.123475f, 0.186092f, 0.114139f, 0.091973f, 0.090506f, 0.053205f, -0.027580f, 0.000801f, -0.106367f, -0.094239f, -0.150905f, -0.179580f, -0.204641f, -0.155560f, -0.121863f, -0.029976f, -0.021531f, -0.008719f, 0.036086f, 0.062198f, 0.144298f, 0.092884f, 0.045077f, -0.004171f}, + {-0.000497f, -0.001580f, -0.004372f, 0.003520f, 0.009140f, -0.003241f, 0.005737f, 0.006635f, 0.001627f, 0.003363f, 0.007830f, 0.008979f, -0.003302f, 0.002299f, -0.006000f, -0.007388f, 0.008837f, -0.017604f, 0.000987f, -0.011187f, -0.007538f, -0.004443f, -0.001739f, 0.020681f, -0.000296f, 0.005171f, 0.005358f, 0.000784f, -0.001690f, -0.000909f, -0.001564f, 0.002118f, 0.005316f, 0.004530f, -0.001402f, 0.000192f, -0.001546f, -0.007204f, 0.003314f, 0.002018f, -0.002780f, -0.010954f, -0.009743f, -0.000328f, 0.000623f, 0.001321f, 0.006010f, 0.006567f, -0.008301f, -0.005861f, -0.006169f, 0.005498f, 0.008503f, 0.005247f, 0.011369f, -0.000354f, -0.001174f, -0.002428f, 0.007588f, -0.004794f, 0.001042f, 0.000760f, -0.006201f, -0.009264f, -0.003645f, 0.009792f, 0.000218f, 0.014802f, 0.000466f, -0.001735f, 0.000349f, 0.009703f, -0.001483f, -0.000793f, 0.005248f, 0.003876f, 0.013648f, 0.005370f, -0.007054f, -0.001046f, 0.004660f, -0.000723f, 0.004964f, -0.012491f, -0.009144f, -0.002083f, -0.010776f, 0.004571f, -0.002523f, -0.001058f, -0.007336f, -0.003091f, 0.006513f, 0.006774f, -0.002778f, -0.001929f, + -0.004596f, -0.010097f, 0.011196f, 0.006854f, 0.000118f, 0.001284f, -0.000802f, 0.000414f, 0.008974f, -0.004563f, 0.001496f, -0.014574f, -0.012195f, -0.002941f, 0.000897f, -0.010148f, -0.002091f, 0.003679f, 0.000679f, 0.000226f, -0.005326f, -0.003909f, 0.009372f, -0.004413f, -0.004296f, -0.001335f, -0.001567f, 0.004220f, -0.002434f, -0.006289f, -0.000446f, 0.005472f, -0.008068f, 0.000291f, -0.008630f, 0.000522f, -0.006388f, 0.009231f, -0.000775f, -0.009942f, -0.001679f, -0.001103f, 0.000918f, -0.014214f, -0.001953f, 0.000937f, -0.009635f, 0.004033f, -0.000050f, -0.011159f, 0.004683f, 0.006207f, -0.005954f, -0.007176f, -0.011921f, 0.005507f, 0.004294f, -0.000197f, -0.010088f, 0.004517f, -0.012598f, -0.003636f, -0.001631f, -0.006513f, 0.006296f, 0.014182f, -0.005650f, -0.001953f, 0.000863f, -0.005935f, 0.004301f, -0.000918f, -0.004572f, -0.008156f, -0.004092f, 0.012851f, 0.012662f, 0.006987f, 0.014684f, 0.008512f, 0.004870f, 0.013616f, -0.008139f, 0.003041f, 0.006121f, -0.000201f, 0.002673f, -0.003952f, 0.002953f, -0.018691f, 0.000770f, -0.000979f, 0.007173f, -0.004124f, -0.001981f, -0.001163f, + 0.005626f, -0.005782f, -0.000511f, 0.001879f, 0.004132f, 0.003771f, -0.000506f, -0.006150f, 0.001727f, 0.002486f, 0.005147f, 0.003753f, 0.005924f, -0.005692f, -0.002962f, -0.000762f, -0.010012f, -0.000892f, 0.003488f, 0.009550f, 0.010909f, -0.000959f, 0.006361f, 0.004678f, 0.000002f, 0.004325f, 0.005321f, 0.007186f, -0.001815f, 0.000555f, -0.004092f, 0.001564f, -0.003408f, 0.003710f, -0.005527f, -0.005140f, 0.004024f, 0.000750f, -0.012450f, -0.012607f, 0.004953f, -0.001892f, 0.010521f, 0.009680f, 0.001254f, -0.000243f, 0.019932f, -0.005778f, -0.000065f, 0.015894f, 0.001069f, -0.010002f, -0.013507f, 0.009548f, -0.003693f, -0.000477f, -0.008240f, 0.002117f, -0.005792f, 0.006285f, 0.030831f, -0.011703f, -0.008627f, -0.011578f, -0.011576f, 0.001581f, -0.009393f, -0.024629f, -0.000307f, 0.001791f, 0.000345f, -0.010181f, -0.001735f, 0.007164f, -0.009551f, -0.006441f, 0.014498f, 0.004026f, -0.003395f, -0.004076f, 0.009394f, -0.005244f, 0.006772f, 0.005297f, -0.012823f, -0.009348f, -0.007535f, 0.007775f, -0.006450f, -0.004675f, -0.003460f, -0.005098f, -0.000579f, -0.009555f, 0.000150f, -0.003449f, + 0.002217f, -0.002032f, -0.019037f, 0.008001f, -0.010674f, 0.007552f, 0.001508f, -0.016528f, 0.003068f, 0.009586f, 0.003055f, 0.016549f, -0.007619f, 0.000101f, 0.001694f, 0.003322f, 0.005757f, -0.007249f, 0.001756f, 0.005230f, -0.007523f, 0.003286f, 0.004693f, -0.004855f, 0.002593f, -0.002622f, -0.016858f, 0.004945f, 0.017090f, 0.013249f, 0.016092f, 0.002298f, -0.002607f, -0.013603f, -0.006194f, -0.006574f, -0.004222f, 0.013333f, 0.019782f, 0.001050f, -0.000469f, 0.013244f, -0.021113f, 0.000157f, -0.000884f, -0.000648f, -0.006240f, -0.007619f, 0.008958f, 0.009673f, 0.001309f, -0.002381f, 0.004972f, -0.010843f, -0.007027f, 0.008044f, -0.007818f, 0.016943f, 0.016591f, 0.002498f, 0.010694f, 0.007982f, 0.002849f, -0.007009f, 0.003687f, -0.000375f, -0.010731f, 0.011727f, 0.000330f, 0.005543f, 0.010933f, -0.011191f, -0.002901f, -0.013275f, -0.001480f, 0.003285f, 0.014245f, -0.012679f, -0.003419f, 0.009776f, -0.000168f, -0.007883f, 0.015769f, -0.011044f, -0.022137f, 0.004651f, -0.011400f, -0.005409f, 0.009031f, -0.005032f, 0.003883f, 0.002437f, -0.002796f, 0.011548f, -0.005674f, 0.005827f, + -0.003148f, 0.000893f, -0.022407f, 0.005264f, 0.020139f, 0.002281f, 0.002754f, 0.006907f, 0.018873f, 0.003311f, -0.019026f, 0.021312f, 0.008653f, 0.008154f, 0.012171f, 0.011621f, -0.000279f, -0.003116f, 0.011503f, 0.009825f, 0.002780f, -0.007737f, 0.010008f, 0.005658f, 0.014983f, 0.018624f, 0.006526f, -0.003539f, 0.000190f, 0.000742f, 0.007228f, 0.023483f, 0.013261f, -0.011619f, 0.021732f, 0.001816f, -0.002792f, 0.003854f, -0.016190f, 0.018905f, -0.002422f, 0.001337f, -0.002141f, 0.005608f, -0.002385f, 0.010318f, -0.012927f, 0.019397f, 0.015725f, 0.000539f, -0.002755f, -0.009024f, -0.019188f, -0.005469f, 0.007952f, -0.003296f, -0.006966f, 0.011543f, 0.012442f, -0.006884f, -0.006851f, -0.023537f, -0.008127f, -0.001692f, -0.000633f, -0.026394f, 0.014842f, 0.003066f, -0.015802f, -0.012030f, 0.005478f, -0.004737f, 0.002804f, -0.002129f, 0.002498f, -0.004392f, 0.002857f, 0.010942f, -0.013637f, 0.000579f, -0.000532f, 0.001170f, 0.020281f, 0.012214f, -0.000836f, 0.026813f, 0.011413f, 0.024285f, 0.004981f, 0.008701f, 0.024514f, -0.009207f, -0.017394f, -0.009852f, 0.022892f, 0.006517f, + -0.013886f, 0.018710f, -0.005522f, -0.009692f, 0.015426f, 0.038847f, -0.010421f, 0.002716f, 0.005487f, 0.008092f, -0.010485f, 0.002083f, 0.020372f, 0.003087f, 0.025191f, -0.004760f, 0.027100f, 0.020436f, 0.006068f, 0.017284f, 0.009839f, -0.008962f, 0.006333f, -0.001630f, -0.003004f, 0.003557f, 0.001345f, -0.000863f, 0.006771f, 0.005999f, 0.017354f, 0.013005f, -0.015461f, 0.006190f, 0.006218f, -0.010043f, 0.000148f, -0.025021f, -0.034233f, 0.014524f, -0.009149f, -0.021000f, -0.005244f, -0.010810f, 0.014002f, 0.004259f, -0.007391f, -0.015559f, 0.012458f, -0.010958f, 0.007327f, -0.012448f, 0.001280f, -0.004442f, 0.019587f, 0.004598f, -0.009105f, 0.007701f, -0.014536f, 0.001771f, 0.000829f, 0.003714f, -0.008751f, 0.009990f, 0.011498f, -0.001396f, -0.007219f, -0.026086f, -0.021921f, -0.017255f, 0.008274f, 0.002163f, 0.004450f, -0.021386f, 0.013799f, 0.009372f, 0.017102f, -0.018334f, 0.017639f, 0.013177f, -0.010089f, -0.008776f, -0.004901f, 0.017509f, 0.012538f, -0.007812f, 0.002154f, 0.026562f, 0.013917f, 0.006825f, 0.015867f, 0.010567f, 0.004603f, -0.008836f, 0.002465f, 0.001218f, + -0.003266f, -0.009780f, 0.024150f, 0.011064f, -0.021490f, 0.014914f, 0.015336f, 0.014788f, 0.012107f, 0.003183f, -0.013144f, 0.000506f, -0.001232f, 0.020728f, 0.003360f, 0.009345f, 0.019370f, -0.003210f, -0.019773f, 0.004710f, 0.011706f, 0.021021f, -0.027048f, -0.015455f, 0.008373f, 0.000522f, 0.003358f, -0.016206f, -0.003233f, -0.015698f, -0.001343f, 0.007841f, -0.004330f, -0.008500f, -0.009646f, 0.004623f, -0.001647f, -0.005505f, 0.009883f, 0.001257f, -0.017170f, 0.017540f, 0.011349f, -0.005233f, 0.007065f, 0.010601f, -0.011540f, -0.003890f, 0.045019f, -0.001399f, 0.017654f, 0.012336f, -0.037303f, -0.019811f, -0.001930f, -0.001446f, -0.000243f, 0.021433f, 0.004987f, -0.010180f, 0.022216f, 0.013713f, -0.002514f, -0.003385f, 0.007272f, -0.003326f, -0.007506f, -0.016416f, -0.019510f, 0.011262f, -0.004047f, -0.008980f, -0.000662f, -0.030454f, -0.005415f, 0.002449f, 0.017344f, -0.019920f, -0.005552f, 0.003131f, 0.001721f, 0.004981f, 0.001880f, 0.022328f, -0.024968f, -0.007800f, 0.006015f, -0.000131f, -0.014569f, -0.002401f, 0.020115f, 0.017786f, 0.015059f, -0.003140f, -0.024844f, -0.010523f, + 0.009522f, -0.001777f, 0.017330f, 0.000230f, 0.000042f, -0.011216f, -0.007443f, 0.016346f, -0.017767f, 0.014174f, 0.009988f, -0.010955f, -0.006215f, -0.000488f, 0.002313f, -0.010773f, 0.007024f, -0.032977f, -0.003097f, 0.005693f, 0.021891f, 0.003909f, -0.001883f, 0.014905f, -0.010945f, 0.031091f, -0.030850f, -0.001746f, -0.007301f, 0.006165f, -0.002328f, -0.001275f, 0.006847f, -0.004440f, -0.011007f, -0.005579f, -0.006823f, -0.016726f, -0.003630f, 0.014043f, -0.003702f, -0.006689f, 0.018261f, 0.001028f, 0.022135f, -0.021014f, -0.013524f, 0.029681f, -0.003573f, -0.000313f, 0.001011f, -0.016376f, -0.002725f, -0.020769f, 0.005879f, -0.025190f, -0.001292f, 0.021391f, -0.007082f, 0.015107f, 0.017203f, 0.011961f, 0.013435f, -0.016394f, 0.017437f, 0.003708f, -0.047610f, -0.006155f, 0.006316f, -0.002037f, -0.005761f, -0.018316f, 0.015395f, -0.015276f, -0.003899f, -0.017516f, -0.018821f, -0.026265f, 0.024740f, 0.002323f, 0.028906f, -0.012432f, 0.021628f, 0.031772f, -0.019951f, 0.026449f, -0.030179f, -0.021915f, -0.027480f, -0.006471f, -0.019742f, 0.009130f, 0.007696f, 0.002436f, 0.023213f, 0.036429f, + 0.006357f, -0.010968f, -0.019241f, 0.011562f, 0.035474f, -0.000688f, 0.010863f, 0.000761f, 0.014736f, 0.008469f, 0.011530f, 0.017764f, -0.021696f, -0.002836f, -0.007462f, 0.028582f, 0.022940f, -0.002126f, 0.035056f, 0.016975f, 0.004004f, -0.033134f, -0.014960f, -0.025519f, -0.010367f, 0.001420f, 0.010165f, -0.009840f, 0.002249f, 0.033616f, -0.005546f, -0.001039f, 0.002728f, 0.034570f, -0.020827f, -0.009840f, -0.007915f, -0.004563f, -0.020357f, 0.023489f, 0.002606f, 0.015411f, -0.024607f, 0.002437f, -0.001815f, -0.016265f, -0.005079f, -0.029242f, 0.009839f, -0.000468f, 0.006942f, -0.004446f, -0.000696f, -0.033707f, -0.010097f, 0.011890f, 0.021891f, -0.006897f, 0.006557f, 0.042764f, -0.001667f, 0.001831f, 0.009234f, 0.019066f, -0.017120f, 0.003850f, 0.023548f, -0.013206f, 0.017740f, 0.005007f, 0.018771f, -0.021189f, -0.008597f, 0.005666f, 0.009400f, -0.020280f, -0.031082f, 0.008702f, -0.003379f, -0.031207f, 0.008540f, 0.003272f, 0.028353f, 0.025234f, -0.023298f, -0.027774f, 0.006245f, -0.021150f, -0.011233f, 0.001077f, 0.042294f, 0.000820f, -0.005370f, -0.037563f, -0.018918f, -0.003003f, + -0.028176f, -0.042553f, 0.029421f, -0.010728f, -0.013496f, -0.002114f, 0.031918f, -0.009594f, 0.003532f, -0.005976f, -0.006351f, -0.018071f, -0.009825f, 0.003603f, -0.044696f, -0.028251f, -0.008211f, -0.015755f, -0.015091f, -0.004604f, -0.017493f, 0.015898f, 0.007039f, 0.005620f, -0.010637f, 0.008505f, -0.064532f, 0.060952f, 0.035330f, -0.005128f, -0.008128f, 0.034847f, 0.002103f, -0.019065f, -0.028732f, -0.002391f, -0.010051f, -0.010575f, -0.017281f, -0.016115f, 0.022131f, 0.022406f, -0.009346f, 0.047339f, -0.025235f, -0.018365f, -0.018767f, 0.002852f, 0.014630f, -0.049779f, 0.015355f, -0.012656f, 0.027061f, -0.024548f, 0.011400f, 0.006088f, 0.030376f, 0.002906f, 0.071318f, 0.023715f, -0.001884f, 0.003413f, -0.028206f, -0.035641f, 0.044321f, -0.012975f, 0.004577f, 0.059753f, -0.016024f, -0.002609f, -0.013278f, 0.046628f, 0.008338f, -0.018939f, 0.026768f, -0.009736f, 0.040028f, 0.021558f, 0.009457f, 0.006221f, -0.005213f, -0.015385f, -0.005819f, -0.004051f, -0.044380f, -0.010791f, -0.007842f, 0.024274f, -0.014362f, 0.004693f, 0.007122f, -0.031103f, -0.047481f, -0.001534f, 0.039192f, -0.002565f, + 0.034658f, -0.006071f, -0.050980f, -0.019216f, 0.001128f, 0.011405f, 0.007826f, -0.040493f, -0.000918f, -0.011535f, 0.028147f, -0.030040f, 0.035864f, 0.055169f, 0.034261f, -0.011158f, 0.005117f, 0.022276f, -0.009557f, 0.043205f, 0.048244f, 0.044064f, 0.012591f, 0.048284f, -0.003548f, -0.019533f, 0.004253f, -0.025406f, -0.033964f, 0.017137f, -0.015812f, 0.038989f, 0.018298f, 0.009525f, -0.015428f, -0.050767f, -0.016144f, -0.036333f, 0.021338f, 0.026431f, -0.000262f, 0.012898f, 0.008897f, 0.012774f, 0.010845f, 0.004835f, -0.002685f, 0.006222f, -0.007384f, 0.013739f, -0.024384f, -0.068652f, -0.027275f, 0.037590f, 0.002447f, -0.011213f, -0.022681f, -0.000145f, 0.031952f, 0.040387f, 0.008948f, -0.024800f, -0.004012f, 0.032310f, -0.038725f, 0.003728f, -0.004465f, 0.028912f, 0.033434f, -0.026467f, 0.050528f, 0.009703f, 0.002479f, 0.070711f, 0.000861f, -0.022210f, 0.025307f, -0.011847f, 0.004102f, -0.015159f, 0.005853f, 0.046929f, 0.006050f, 0.059777f, 0.025928f, -0.052402f, -0.056532f, -0.012668f, 0.015599f, 0.031770f, -0.043625f, -0.015955f, -0.005647f, 0.053574f, 0.050152f, -0.042680f, + -0.000840f, -0.026302f, 0.017085f, -0.009535f, 0.057203f, -0.000060f, -0.011708f, 0.036035f, -0.006970f, -0.045123f, -0.021796f, -0.008957f, 0.045301f, -0.042934f, 0.023008f, 0.066315f, 0.027020f, 0.030283f, -0.030835f, 0.022367f, 0.039134f, 0.028057f, -0.050565f, -0.027793f, 0.036174f, 0.099225f, 0.008827f, 0.019652f, -0.026816f, 0.006762f, 0.001280f, -0.007178f, -0.024937f, 0.005987f, -0.006921f, 0.046404f, 0.041570f, -0.053386f, -0.019675f, 0.051540f, 0.030348f, 0.017003f, 0.008762f, 0.026761f, 0.037056f, 0.008446f, 0.023464f, 0.016341f, -0.021400f, 0.001246f, -0.020822f, -0.013203f, 0.010009f, -0.007140f, 0.007548f, -0.023225f, -0.015133f, 0.012015f, -0.000213f, 0.017470f, 0.019430f, -0.049637f, 0.039066f, 0.004525f, 0.032312f, -0.034387f, 0.022328f, 0.026027f, -0.017991f, -0.039018f, -0.032267f, -0.042999f, -0.035796f, -0.036194f, 0.016694f, 0.056643f, 0.020699f, 0.015303f, 0.033385f, -0.001238f, 0.004898f, -0.026653f, 0.045623f, -0.054265f, -0.095430f, 0.030772f, -0.016641f, -0.000038f, -0.079020f, 0.016186f, 0.035331f, -0.001344f, 0.026473f, 0.006797f, 0.000194f, -0.011834f, + 0.024040f, 0.017566f, 0.023001f, -0.032682f, -0.017112f, -0.004365f, 0.021116f, -0.043609f, 0.073151f, 0.035060f, -0.005838f, 0.040239f, 0.024130f, 0.038401f, -0.019739f, -0.025119f, -0.024551f, 0.046496f, 0.016695f, 0.008830f, 0.041912f, -0.035778f, -0.117147f, -0.007250f, 0.008408f, 0.014615f, -0.065590f, 0.051968f, 0.038016f, -0.070414f, -0.053948f, 0.002471f, 0.030171f, 0.003236f, 0.017608f, 0.038472f, -0.008934f, 0.024214f, -0.033177f, -0.038484f, -0.030071f, -0.039980f, -0.062194f, 0.018626f, 0.008135f, -0.041768f, 0.058066f, 0.022879f, -0.011919f, -0.012443f, -0.031243f, -0.023897f, -0.055751f, -0.030439f, 0.023079f, 0.052543f, -0.016889f, 0.006283f, 0.024174f, -0.044482f, 0.036284f, 0.045778f, 0.010335f, -0.010204f, 0.042372f, 0.011694f, 0.009189f, -0.026026f, -0.026215f, -0.001023f, 0.063891f, -0.016198f, -0.043817f, 0.000308f, -0.054700f, -0.068808f, -0.039329f, -0.010284f, -0.025440f, -0.044825f, -0.023005f, -0.024231f, 0.029314f, 0.056721f, 0.021405f, -0.026350f, -0.054650f, 0.058659f, 0.032135f, -0.028827f, -0.014950f, -0.015570f, 0.003728f, 0.013486f, -0.017740f, 0.030236f, + 0.028988f, 0.001140f, -0.018668f, -0.018659f, -0.016574f, -0.002726f, 0.011663f, -0.009192f, -0.018323f, -0.045688f, 0.014547f, 0.038941f, -0.022044f, 0.034287f, 0.001834f, 0.022698f, -0.018823f, 0.025250f, 0.076727f, -0.029406f, 0.034063f, 0.064791f, 0.012486f, -0.012733f, -0.017151f, 0.017779f, 0.002666f, 0.032152f, -0.024369f, 0.088767f, -0.026498f, -0.062525f, 0.015567f, -0.029701f, 0.073325f, 0.021157f, -0.020405f, 0.001519f, -0.040980f, -0.062146f, 0.075064f, 0.004941f, -0.016846f, 0.067887f, -0.034129f, 0.004827f, -0.017546f, 0.036238f, -0.049111f, -0.066018f, -0.037917f, 0.005211f, 0.031051f, 0.037314f, 0.027051f, 0.036078f, 0.088097f, -0.033523f, 0.035296f, 0.055446f, -0.008169f, 0.001708f, 0.066531f, 0.007385f, -0.036153f, -0.041964f, -0.037049f, 0.068485f, -0.045518f, 0.027431f, 0.032305f, -0.021463f, 0.006922f, -0.036968f, -0.008106f, 0.031037f, -0.026724f, 0.022654f, -0.008609f, -0.046359f, -0.102831f, -0.008412f, 0.093580f, 0.039868f, 0.010182f, -0.017375f, -0.027250f, -0.003948f, -0.035911f, 0.013126f, -0.050874f, 0.063271f, 0.005514f, 0.008918f, 0.006090f, -0.019365f, + -0.061289f, -0.022227f, 0.051263f, -0.039178f, -0.009227f, -0.026480f, 0.023728f, -0.018353f, 0.070752f, -0.009150f, 0.015837f, -0.023137f, -0.063063f, 0.016579f, -0.047658f, -0.008778f, -0.002487f, -0.088140f, -0.074470f, -0.069661f, 0.026085f, -0.010608f, -0.036906f, -0.022596f, -0.022670f, -0.020091f, -0.032406f, -0.020423f, -0.003369f, -0.078071f, 0.025636f, 0.012540f, 0.033183f, -0.014445f, 0.074290f, -0.003671f, 0.017972f, -0.020741f, -0.003580f, 0.041820f, -0.054335f, -0.012639f, -0.016873f, 0.029071f, 0.015998f, 0.034948f, -0.013867f, -0.069873f, 0.019349f, 0.001860f, 0.116407f, 0.121046f, 0.013455f, 0.001951f, 0.027226f, 0.014932f, 0.029150f, 0.052570f, 0.018225f, 0.054512f, 0.080298f, -0.019686f, 0.009575f, -0.066340f, -0.010584f, 0.009237f, -0.009743f, -0.019480f, -0.041638f, -0.033748f, 0.017820f, 0.019066f, -0.089921f, 0.063637f, 0.016103f, 0.089641f, -0.006460f, -0.017641f, 0.028289f, -0.006203f, 0.093272f, 0.023897f, -0.005720f, 0.017929f, 0.017795f, -0.025565f, -0.058319f, -0.045515f, -0.023339f, 0.069811f, 0.000294f, 0.076656f, 0.008946f, 0.074791f, -0.022258f, -0.104937f, + -0.039250f, -0.031298f, 0.053631f, 0.005269f, -0.050584f, -0.074697f, -0.051017f, -0.011896f, 0.063562f, -0.056954f, -0.047326f, -0.033768f, 0.057315f, -0.030287f, -0.015187f, -0.075678f, -0.070787f, 0.019772f, 0.014635f, 0.094305f, 0.028526f, -0.013413f, 0.003781f, 0.003488f, 0.070223f, 0.029378f, -0.036497f, 0.069962f, -0.005630f, -0.130783f, -0.041831f, 0.086419f, 0.092108f, -0.063032f, -0.066739f, -0.064065f, 0.036376f, 0.059984f, 0.113390f, 0.037560f, 0.014107f, -0.061963f, -0.007103f, -0.000730f, 0.025326f, 0.060567f, 0.041285f, 0.006940f, -0.069120f, -0.130428f, -0.035474f, -0.063990f, 0.101184f, 0.110936f, 0.186944f, -0.051668f, -0.178856f, -0.034726f, -0.060911f, 0.143983f, 0.048340f, 0.146143f, 0.037528f, -0.042369f, -0.135411f, -0.087342f, 0.006470f, 0.022305f, 0.154972f, 0.067749f, -0.003389f, -0.120435f, -0.217864f, -0.051604f, 0.007157f, 0.107829f, 0.234278f, 0.056873f, 0.072880f, -0.142543f, -0.225199f, 0.016804f, 0.056324f, 0.189254f, 0.111316f, 0.083980f, -0.037421f, -0.139562f, -0.115030f, 0.006836f, 0.040284f, 0.005035f, 0.099260f, -0.067653f, -0.062170f, -0.009756f, + -0.151252f, 0.031486f, -0.071499f, 0.096638f, 0.002676f, 0.009956f, -0.037796f, -0.101353f, 0.062497f, -0.101994f, 0.108040f, 0.010127f, 0.014216f, 0.016886f, -0.056914f, 0.056615f, 0.011101f, 0.037906f, -0.054305f, 0.016197f, 0.005656f, 0.069041f, -0.024206f, 0.013408f, 0.054423f, -0.060686f, -0.027070f, 0.000724f, -0.045815f, 0.078239f, -0.013290f, -0.038800f, 0.079885f, 0.081108f, -0.017547f, -0.067944f, -0.010222f, -0.060368f, -0.004860f, 0.030099f, 0.000105f, -0.073950f, 0.013844f, 0.033167f, -0.018926f, 0.038043f, -0.029400f, 0.012193f, 0.050934f, -0.022183f, 0.035533f, -0.083139f, -0.074024f, 0.077363f, 0.050980f, 0.121603f, 0.000657f, -0.035269f, 0.112151f, -0.063952f, -0.048099f, 0.034212f, 0.041842f, 0.057503f, -0.048720f, -0.028539f, 0.022270f, -0.013583f, 0.066349f, -0.049461f, -0.142930f, 0.038316f, 0.089802f, 0.001887f, -0.062518f, 0.015850f, 0.049576f, -0.010322f, -0.008801f, -0.001800f, -0.040624f, -0.023716f, 0.149948f, 0.041850f, 0.040731f, -0.127664f, -0.033397f, -0.100104f, -0.086257f, 0.076422f, 0.078683f, 0.159042f, 0.071681f, -0.021516f, -0.032714f, -0.018889f, + 0.048163f, 0.034453f, -0.001163f, 0.076662f, 0.012686f, -0.031688f, -0.039147f, -0.030516f, 0.052842f, -0.001135f, 0.045680f, 0.021331f, 0.026210f, 0.005757f, -0.015571f, 0.003869f, -0.003891f, 0.005273f, -0.016450f, -0.005497f, 0.011924f, 0.010866f, 0.100023f, 0.081111f, 0.064110f, -0.009136f, 0.013995f, -0.045918f, -0.012064f, -0.030199f, -0.053201f, -0.054058f, 0.009435f, 0.022679f, 0.033667f, 0.043602f, 0.033737f, -0.030565f, -0.070736f, 0.091346f, -0.076731f, -0.037105f, -0.025472f, 0.026050f, -0.003854f, 0.039454f, 0.040838f, 0.034289f, -0.068172f, -0.031472f, -0.002489f, -0.035071f, -0.106023f, 0.049081f, -0.035091f, -0.034042f, 0.020954f, 0.051983f, -0.000171f, -0.188521f, -0.102832f, -0.126727f, 0.091979f, 0.029426f, 0.273031f, 0.295235f, 0.281952f, 0.335609f, 0.318385f, 0.240824f, 0.141376f, 0.190686f, 0.078012f, 0.028067f, -0.152881f, -0.120264f, -0.332102f, -0.277478f, -0.260069f, -0.140067f, -0.192517f, -0.133411f, -0.010175f, -0.032198f, -0.016313f, -0.007502f, 0.004725f, 0.016257f, 0.013180f, 0.055353f, 0.045900f, 0.057234f, 0.120616f, 0.136846f, 0.131637f, 0.109373f, + 0.257163f, 0.086651f, 0.113972f, 0.197020f, 0.204789f, 0.096229f, 0.207304f, 0.260673f, 0.198675f, 0.187961f, 0.178440f, 0.046520f, 0.114352f, 0.228310f, 0.213753f, 0.158379f, 0.184299f, 0.178065f, 0.020395f, -0.016146f, -0.012529f, -0.058008f, -0.092977f, 0.027692f, -0.104534f, -0.159885f, -0.126110f, -0.140918f, -0.245092f, -0.072687f, -0.146665f, -0.148322f, -0.248722f, -0.170458f, -0.214490f, -0.228098f, -0.131591f, -0.243460f, -0.307987f, -0.188760f, 0.012069f, -0.001252f} + } +}; +const float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][2522]={ {-0.000072f, -0.000087f, -0.000165f, -0.000108f, -0.000091f, -0.000141f, -0.000119f, -0.000065f, -0.000073f, 0.000041f, 0.000162f, -0.000331f, 0.000004f, -0.000023f, -0.000104f, -0.000159f, -0.000548f, -0.000580f, -0.000858f, 0.001141f, -0.000077f, -0.000440f, -0.000301f, 0.000374f, -0.000666f, -0.000117f, -0.000248f, -0.000150f, -0.000208f, 0.000995f, 0.000447f, -0.000600f, -0.000315f, -0.000273f, 0.000055f, 0.000012f, -0.000163f, -0.000416f, -0.000685f, 0.000840f, -0.000420f, 0.000539f, 0.000367f, 0.000488f, -0.000195f, 0.000654f, -0.003981f, 0.000346f, -0.000459f, 0.000152f, -0.000395f, 0.000019f, -0.000441f, 0.000047f, -0.001046f, -0.000658f, -0.000082f, -0.000556f, -0.000132f, -0.000232f, 0.001084f, 0.000081f, -0.001193f, 0.001053f, -0.000367f, 0.000567f, 0.000051f, 0.000409f, -0.001187f, -0.000355f, -0.000293f, 0.000146f, 0.000241f, -0.000121f, -0.000337f, 0.000436f, -0.000624f, -0.000119f, -0.000364f, 0.000162f, 0.000094f, 0.000514f, 0.000465f, -0.000539f, -0.000298f, -0.000011f, -0.000190f, 0.000413f, 0.000023f, 0.000353f, -0.000326f, -0.000341f, 0.000507f, 0.002057f, -0.000866f, 0.000922f, + -0.000363f, 0.000341f, 0.000008f, 0.000490f, -0.000184f, 0.000134f, 0.000224f, 0.000258f, 0.000282f, 0.000464f, -0.000087f, 0.000067f, 0.000845f, 0.000629f, -0.001591f, 0.000335f, -0.000183f, 0.000095f, -0.000525f, 0.000376f, -0.000667f, 0.000703f, 0.000600f, 0.000295f, -0.000062f, -0.000207f, -0.000226f, 0.000500f, 0.000479f, -0.000194f, 0.000132f, 0.000855f, -0.000287f, -0.000010f, -0.000258f, 0.000106f, 0.000161f, -0.000018f, -0.000208f, 0.000403f, 0.000093f, -0.000118f, 0.008225f, -0.000555f, 0.001176f, 0.000016f, 0.000397f, 0.000195f, 0.000311f, 0.000225f, 0.000818f, -0.000413f, 0.000364f, -0.000122f, 0.000168f, 0.000470f, 0.000704f, 0.000307f, 0.000162f, -0.000282f, 0.000642f, -0.000402f, 0.000263f, -0.000165f, -0.000614f, 0.000108f, 0.000253f, 0.000065f, -0.000172f, 0.000098f, -0.000197f, 0.000465f, -0.000841f, 0.000245f, -0.000174f, 0.000273f, 0.000017f, -0.001175f, -0.000397f, 0.000168f, 0.000218f, 0.000185f, -0.000187f, -0.000231f, -0.000215f, 0.000218f, 0.000495f, -0.000150f, 0.004914f, -0.005862f, 0.001141f, -0.001426f, 0.000743f, -0.000931f, 0.000684f, -0.001264f, + -0.000400f, -0.000787f, -0.000168f, -0.000658f, 0.000027f, 0.001128f, 0.001638f, 0.000681f, 0.000341f, 0.000014f, 0.000493f, 0.001177f, 0.000835f, -0.000558f, -0.000686f, -0.000887f, -0.000448f, -0.000517f, 0.000013f, -0.000094f, -0.000111f, 0.000013f, 0.000219f, -0.000416f, 0.000480f, -0.000544f, -0.000748f, 0.000251f, -0.000048f, 0.000044f, 0.000110f, -0.000502f, -0.000601f, 0.000163f, -0.000382f, -0.000466f, -0.000129f, 0.000059f, -0.011368f, 0.002204f, -0.000621f, 0.000234f, 0.000193f, -0.001001f, -0.000477f, 0.000846f, -0.000197f, 0.000023f, 0.000961f, 0.000273f, -0.000434f, -0.000758f, 0.000655f, 0.000006f, -0.000902f, -0.001278f, -0.001817f, 0.000515f, -0.000834f, 0.000126f, -0.000301f, 0.000275f, -0.000227f, 0.000068f, -0.000964f, -0.000964f, -0.000610f, -0.000300f, -0.000616f, 0.000113f, -0.000320f, 0.000264f, 0.001019f, 0.000124f, 0.000143f, 0.000644f, 0.000153f, 0.000104f, -0.000064f, -0.000198f, -0.000741f, -0.000226f, 0.000124f, -0.000190f, -0.013575f, 0.005016f, -0.001308f, 0.001578f, -0.000838f, 0.001123f, -0.000689f, -0.000233f, -0.001195f, 0.000836f, -0.001405f, 0.000857f, + -0.000272f, 0.001219f, -0.001765f, 0.000395f, 0.001576f, 0.000420f, -0.001392f, -0.000534f, -0.000850f, -0.000393f, 0.000483f, 0.000208f, 0.000351f, -0.000269f, -0.000491f, -0.000710f, -0.000665f, -0.000111f, -0.000757f, -0.000186f, -0.000704f, -0.000540f, -0.001912f, -0.000588f, -0.000286f, 0.000044f, 0.000024f, 0.000596f, 0.000263f, 0.000585f, -0.000083f, 0.000690f, 0.000164f, 0.000004f, 0.001758f, 0.005960f, -0.001555f, 0.002681f, -0.001515f, 0.000749f, -0.001639f, 0.001411f, -0.000050f, 0.001531f, -0.000042f, -0.000085f, 0.001519f, -0.000177f, -0.000123f, 0.001322f, -0.000538f, -0.001099f, -0.001766f, 0.001698f, -0.000052f, 0.001179f, 0.000213f, 0.000852f, 0.000469f, -0.001017f, 0.000541f, 0.000488f, 0.000014f, 0.000605f, 0.000933f, -0.001013f, 0.000230f, 0.000018f, -0.000000f, -0.000562f, -0.000183f, -0.000550f, 0.000257f, -0.000077f, 0.000557f, 0.001427f, 0.000151f, 0.000745f, -0.000026f, 0.000178f, -0.000048f, 0.000254f, 0.000661f, 0.017843f, -0.004331f, 0.001744f, -0.000793f, 0.001548f, -0.000596f, 0.001199f, -0.000580f, 0.000444f, -0.001671f, 0.000852f, -0.001592f, 0.001312f, + -0.000442f, 0.000419f, -0.000417f, 0.001826f, 0.000310f, 0.000491f, -0.000789f, 0.001206f, -0.000037f, -0.000497f, 0.001060f, -0.000730f, -0.001124f, 0.000068f, -0.000302f, 0.000605f, 0.000066f, -0.000145f, -0.000317f, 0.000206f, 0.000035f, 0.000255f, -0.000746f, 0.000222f, -0.000287f, 0.001309f, -0.000162f, 0.000639f, 0.000194f, 0.000539f, 0.001039f, -0.000638f, 0.000132f, 0.000243f, -0.000245f, 0.000771f, 0.001441f, -0.009285f, 0.003584f, -0.002903f, 0.001618f, -0.001473f, 0.000426f, -0.001922f, 0.001150f, -0.000799f, 0.001631f, -0.000240f, 0.000674f, -0.001540f, -0.000697f, -0.000145f, -0.000611f, -0.000553f, 0.001886f, -0.001487f, 0.000177f, 0.000867f, -0.001860f, 0.000417f, 0.000558f, -0.000489f, 0.000540f, 0.000166f, 0.000278f, -0.001177f, -0.000178f, -0.000402f, 0.000623f, -0.000602f, 0.000304f, -0.001376f, -0.000353f, 0.000951f, 0.000392f, 0.000282f, -0.000426f, -0.000230f, -0.001110f, -0.001117f, 0.000506f, 0.000196f, -0.000137f, -0.000182f, -0.000184f, 0.000077f, 0.000005f, -0.000247f, -0.000315f, -0.014997f, 0.004804f, -0.002721f, 0.000594f, -0.000324f, 0.000749f, -0.001194f, + 0.001122f, -0.000569f, -0.000507f, -0.000221f, 0.000785f, -0.000544f, -0.000788f, 0.000440f, 0.001590f, -0.000300f, -0.000022f, -0.002885f, 0.000149f, -0.000021f, 0.001279f, -0.000511f, -0.000307f, -0.002217f, -0.000834f, -0.000036f, -0.000058f, 0.000688f, 0.000929f, -0.001686f, -0.001594f, 0.000907f, 0.000141f, -0.001733f, -0.001391f, 0.000577f, 0.000259f, -0.000151f, -0.000156f, -0.000694f, 0.000551f, -0.000251f, 0.000131f, 0.000039f, -0.000990f, -0.000416f, 0.000358f, -0.001400f, -0.000793f, -0.000312f, 0.000171f, -0.000311f, -0.014948f, 0.006529f, -0.003698f, 0.002703f, -0.002595f, 0.001197f, -0.002944f, 0.000601f, -0.001936f, 0.002909f, -0.001555f, 0.000981f, -0.000232f, -0.000050f, -0.001410f, -0.000462f, -0.000608f, 0.002619f, -0.000555f, 0.001298f, 0.002143f, 0.001174f, 0.000284f, -0.000373f, 0.000487f, -0.000560f, 0.001187f, 0.001096f, 0.000135f, -0.000682f, 0.000177f, 0.000136f, -0.000843f, -0.000458f, 0.000591f, 0.000794f, -0.000695f, -0.000753f, -0.000702f, -0.000054f, -0.000303f, 0.000278f, -0.000674f, 0.000364f, -0.001047f, 0.000197f, -0.000580f, -0.000147f, 0.000092f, -0.000522f, + -0.000571f, -0.000827f, -0.000678f, 0.005627f, 0.005842f, -0.002027f, 0.002008f, -0.002233f, 0.000454f, 0.000808f, 0.000155f, -0.000831f, 0.001164f, 0.000376f, 0.002368f, 0.001291f, 0.002661f, -0.000288f, 0.001606f, -0.000307f, 0.001058f, 0.001461f, -0.000095f, -0.001768f, 0.001876f, -0.000086f, 0.000838f, -0.000309f, 0.000082f, 0.000368f, 0.002272f, 0.000438f, -0.001107f, -0.000290f, 0.000370f, -0.000540f, 0.001730f, 0.000820f, -0.000180f, -0.000313f, -0.000858f, 0.000853f, -0.000841f, 0.001058f, 0.001060f, -0.000609f, 0.000639f, 0.000632f, 0.000335f, 0.000048f, 0.001672f, 0.001113f, 0.001241f, 0.000077f, 0.000209f, 0.000650f, -0.000276f, -0.000008f, 0.016899f, -0.005914f, 0.002170f, -0.002715f, 0.001996f, -0.001756f, 0.002541f, -0.000749f, 0.000194f, -0.001749f, 0.003770f, -0.000433f, 0.003403f, 0.000308f, 0.000643f, -0.002128f, 0.000868f, 0.003450f, -0.000959f, -0.002710f, 0.000484f, 0.000228f, 0.001372f, -0.001920f, 0.001727f, 0.000096f, 0.000208f, -0.000062f, -0.001900f, -0.000458f, 0.000385f, -0.002236f, 0.000448f, 0.001080f, 0.000843f, -0.000539f, -0.000135f, 0.000038f, + 0.001155f, 0.000461f, -0.000139f, -0.000353f, 0.000908f, 0.000727f, 0.002183f, 0.000687f, -0.000274f, 0.001331f, 0.000520f, 0.000017f, 0.000435f, 0.001048f, 0.000636f, 0.000269f, 0.000181f, 0.005592f, -0.008167f, 0.004833f, -0.003650f, 0.001480f, 0.000517f, -0.000410f, -0.000338f, 0.000924f, -0.002076f, -0.001347f, -0.001088f, -0.000872f, -0.002825f, 0.001370f, -0.002624f, -0.000154f, -0.002103f, 0.000713f, -0.001587f, -0.001287f, -0.000643f, 0.002310f, 0.000314f, 0.002245f, 0.001193f, 0.001519f, 0.002264f, 0.000059f, -0.000302f, -0.000410f, 0.000631f, 0.001688f, -0.000156f, -0.000192f, -0.001177f, 0.000823f, -0.000149f, -0.000766f, 0.000644f, 0.000471f, 0.001825f, 0.000675f, 0.000861f, -0.001367f, -0.000602f, -0.000149f, -0.000237f, 0.000817f, -0.002611f, 0.000489f, -0.000636f, -0.000519f, -0.000802f, -0.000997f, -0.000299f, -0.000988f, 0.000382f, -0.000715f, -0.000089f, -0.001460f, -0.017319f, -0.003833f, 0.000731f, -0.003336f, -0.001412f, 0.000076f, -0.000162f, -0.002854f, 0.000740f, -0.002843f, 0.000023f, 0.002170f, -0.000474f, -0.000438f, 0.001171f, 0.000738f, 0.001194f, 0.000006f, + 0.001457f, -0.000905f, 0.000375f, 0.001685f, -0.000173f, -0.000178f, -0.001201f, 0.001600f, -0.001344f, -0.000779f, 0.000387f, 0.000606f, 0.001225f, 0.003862f, -0.001125f, -0.000710f, -0.001741f, 0.000025f, -0.001294f, 0.000227f, -0.000543f, -0.001921f, -0.000158f, 0.002295f, 0.000625f, -0.001667f, -0.000833f, 0.000714f, -0.001006f, -0.001282f, 0.000190f, -0.000643f, 0.000104f, 0.000178f, 0.001458f, 0.000140f, 0.000700f, 0.000320f, -0.001283f, -0.000715f, 0.000760f, 0.000665f, -0.000529f, -0.021176f, 0.017437f, -0.006123f, 0.005163f, -0.003841f, 0.002896f, -0.001126f, 0.001834f, -0.002044f, 0.001220f, 0.001442f, 0.002077f, -0.001385f, 0.002519f, 0.001249f, 0.004307f, -0.000691f, 0.000332f, -0.002307f, 0.000546f, -0.000814f, -0.001473f, -0.001787f, -0.002086f, -0.001892f, 0.002773f, -0.000132f, 0.003336f, 0.000873f, 0.000576f, -0.000060f, 0.000385f, -0.001492f, 0.000193f, -0.000544f, 0.000655f, 0.002002f, 0.000308f, 0.000662f, 0.000066f, 0.000212f, -0.001576f, -0.000830f, -0.000115f, -0.000112f, 0.000145f, -0.000459f, -0.001462f, 0.000040f, 0.001442f, -0.000477f, 0.000379f, 0.000445f, + -0.001309f, 0.000863f, 0.000298f, 0.000479f, -0.000327f, 0.000151f, -0.000209f, -0.000378f, 0.012386f, -0.001837f, -0.003918f, -0.001323f, -0.000779f, -0.000581f, -0.003443f, -0.001783f, 0.001037f, 0.000658f, 0.001061f, 0.001304f, -0.002294f, 0.001008f, -0.000401f, 0.000903f, 0.003839f, -0.003762f, 0.001382f, 0.001378f, 0.001090f, -0.000929f, -0.002146f, 0.001778f, 0.000576f, 0.001288f, 0.002391f, 0.000059f, 0.003272f, 0.000334f, 0.001556f, 0.000181f, 0.001077f, -0.000827f, 0.001279f, 0.000929f, 0.001224f, -0.000394f, 0.000451f, -0.000040f, 0.001551f, 0.001883f, -0.002648f, 0.003711f, 0.000379f, 0.001072f, 0.000229f, 0.000685f, 0.000780f, -0.000726f, 0.002266f, 0.001230f, 0.000156f, 0.002053f, 0.000927f, -0.001065f, -0.000019f, -0.000701f, -0.000723f, -0.000565f, 0.000441f, -0.000123f, 0.000202f, -0.000018f, -0.002164f, 0.009835f, 0.000922f, 0.002055f, -0.002459f, -0.000415f, -0.006209f, 0.001564f, -0.000230f, -0.004206f, 0.003651f, -0.001915f, 0.000201f, 0.002684f, 0.001256f, 0.002029f, -0.001435f, 0.000926f, -0.001903f, 0.000093f, -0.001615f, 0.000687f, -0.002495f, 0.003741f, + 0.002742f, 0.002229f, 0.002620f, 0.000613f, -0.000758f, -0.001548f, 0.000801f, 0.002071f, 0.000089f, 0.001425f, -0.000914f, 0.000323f, 0.001428f, 0.000988f, 0.001294f, 0.000124f, 0.000521f, -0.000116f, -0.000774f, 0.000891f, -0.000509f, 0.000433f, 0.000441f, -0.000851f, 0.001288f, -0.001599f, 0.001543f, -0.000737f, 0.001116f, 0.001593f, -0.001829f, 0.000213f, 0.000308f, -0.000765f, -0.001426f, 0.001082f, -0.002368f, -0.001881f, 0.001253f, 0.000503f, 0.000620f, 0.000479f, 0.001591f, 0.001466f, 0.015370f, -0.012851f, 0.004305f, -0.003226f, 0.001085f, 0.003967f, 0.003211f, -0.002183f, 0.003857f, 0.002164f, 0.002311f, -0.001648f, 0.001050f, -0.000856f, 0.004584f, 0.001257f, 0.001258f, 0.001765f, 0.001909f, 0.001215f, 0.001286f, -0.003834f, 0.000554f, -0.006907f, -0.002452f, -0.000663f, -0.004002f, 0.000967f, 0.002052f, -0.001510f, -0.002202f, -0.002537f, -0.002480f, -0.001309f, 0.001320f, 0.001075f, -0.003574f, -0.004074f, -0.000383f, -0.002086f, 0.001032f, 0.000883f, 0.000310f, -0.000306f, 0.001840f, -0.001023f, 0.000016f, -0.000282f, -0.000943f, -0.002618f, 0.001932f, 0.003414f, + -0.000553f, -0.000442f, 0.001519f, -0.002428f, 0.002836f, 0.000744f, -0.001586f, -0.000067f, -0.001484f, -0.000593f, -0.000457f, -0.000999f, -0.000378f, -0.000680f, -0.002142f, -0.023963f, 0.002254f, -0.002240f, 0.000760f, 0.002319f, 0.001628f, 0.004755f, -0.002117f, -0.000279f, 0.000273f, 0.005715f, 0.001903f, -0.004670f, -0.003102f, 0.002463f, 0.003323f, -0.000970f, -0.001425f, -0.000200f, 0.001465f, 0.003457f, 0.003493f, -0.000154f, -0.006603f, -0.001974f, -0.000797f, -0.000877f, 0.003629f, -0.001824f, 0.002064f, 0.000120f, -0.000544f, -0.003455f, 0.000132f, 0.002584f, -0.004433f, -0.002610f, -0.001147f, -0.000841f, -0.002176f, -0.001790f, -0.004157f, -0.000826f, -0.002865f, -0.000055f, 0.000448f, 0.002819f, -0.002119f, -0.001375f, 0.000103f, -0.000362f, 0.000304f, -0.002564f, 0.000831f, 0.000886f, 0.000161f, 0.000085f, -0.002042f, -0.001764f, -0.001110f, -0.000581f, -0.000307f, -0.003262f, 0.000495f, 0.000918f, -0.001558f, -0.002978f, -0.013890f, 0.014980f, -0.002004f, 0.001051f, 0.003625f, 0.004310f, -0.003040f, 0.002129f, 0.000926f, 0.002699f, 0.001887f, 0.003764f, 0.002201f, -0.002381f, + -0.003987f, 0.000683f, 0.004499f, 0.008807f, -0.001967f, -0.002868f, 0.002422f, 0.001504f, -0.001522f, -0.004206f, -0.000729f, -0.000780f, -0.003736f, 0.003482f, 0.004201f, 0.000142f, 0.001094f, -0.000005f, 0.003339f, -0.002413f, -0.007544f, 0.003318f, -0.000765f, 0.002644f, 0.001396f, 0.000173f, -0.001743f, -0.002899f, 0.002217f, 0.002485f, 0.001941f, -0.000289f, 0.000013f, 0.002721f, 0.001672f, 0.000872f, -0.001413f, 0.002293f, 0.002054f, -0.000268f, -0.000403f, -0.001262f, 0.001722f, 0.000087f, -0.003616f, 0.003162f, 0.002057f, -0.000676f, 0.001083f, -0.000444f, 0.000287f, -0.000045f, 0.001112f, 0.002708f, 0.001112f, -0.000454f, -0.000758f, -0.000087f, 0.004247f, 0.000215f, -0.003162f, -0.006563f, 0.001662f, -0.000306f, -0.005382f, 0.001877f, -0.001735f, 0.000288f, -0.001992f, -0.001579f, 0.001792f, 0.004176f, 0.000589f, 0.005520f, 0.002574f, -0.002745f, -0.003553f, 0.006032f, -0.002523f, -0.000177f, 0.000625f, -0.005632f, 0.000047f, 0.002995f, -0.003183f, -0.000864f, 0.003874f, 0.000241f, 0.002071f, 0.000057f, 0.002588f, -0.000426f, -0.001587f, -0.000236f, 0.003409f, 0.004449f, + -0.001356f, 0.000888f, 0.000885f, 0.002954f, -0.001661f, -0.000338f, 0.000693f, -0.000784f, 0.002047f, 0.000836f, 0.000278f, -0.001056f, 0.001664f, 0.001669f, 0.000211f, 0.000030f, 0.001407f, 0.001946f, -0.002289f, -0.000079f, 0.000797f, 0.001025f, -0.001112f, 0.000911f, 0.031494f, -0.002770f, 0.000753f, 0.002186f, -0.002573f, -0.004606f, -0.002586f, -0.000963f, -0.005283f, -0.005676f, 0.000683f, -0.004997f, -0.002076f, -0.001265f, -0.001063f, 0.003475f, 0.003984f, 0.001443f, 0.008090f, 0.001684f, -0.003668f, 0.007034f, -0.000453f, 0.005060f, -0.001308f, -0.000237f, -0.004237f, 0.000439f, 0.004173f, 0.000138f, -0.001700f, -0.000488f, 0.000627f, -0.000709f, -0.000610f, 0.001809f, -0.003329f, 0.001730f, 0.000758f, -0.001392f, -0.003145f, -0.001988f, 0.002825f, 0.002862f, 0.003280f, -0.004844f, 0.003123f, 0.001110f, 0.000108f, 0.000556f, 0.000744f, 0.000898f, 0.000904f, -0.000102f, 0.000514f, 0.003071f, -0.000525f, 0.001429f, 0.001525f, -0.000766f, 0.002515f, 0.002972f, 0.000695f, 0.000168f, 0.002665f, 0.002125f, 0.001608f, -0.018531f, -0.030965f, 0.010972f, -0.000948f, 0.004457f, + -0.005553f, 0.000069f, -0.006403f, -0.000999f, -0.009158f, 0.003697f, 0.004000f, -0.000398f, -0.000850f, -0.000313f, 0.000693f, -0.002359f, -0.007816f, 0.013922f, 0.000842f, -0.002025f, 0.004712f, 0.000644f, -0.002684f, 0.006563f, 0.007414f, -0.003465f, 0.004327f, 0.000634f, -0.001078f, -0.007305f, -0.003984f, 0.005287f, -0.002951f, 0.000537f, -0.000485f, 0.003509f, -0.005866f, -0.006736f, 0.000823f, -0.000163f, -0.004473f, 0.002383f, 0.000453f, -0.003003f, 0.001856f, -0.003286f, -0.002585f, 0.000918f, 0.001082f, -0.000124f, -0.000870f, -0.001710f, 0.001740f, 0.002726f, 0.000390f, 0.000649f, -0.000912f, -0.001176f, 0.002602f, 0.000001f, 0.000561f, -0.003012f, -0.000643f, -0.002125f, 0.001468f, 0.001871f, 0.000011f, 0.001474f, -0.009984f, 0.029679f, -0.013296f, 0.002142f, 0.001876f, 0.007374f, -0.001014f, 0.004672f, -0.004771f, 0.000195f, -0.009087f, -0.001827f, -0.000010f, 0.003536f, 0.000553f, 0.003640f, -0.002635f, -0.005592f, 0.000666f, -0.008360f, -0.008729f, 0.000137f, -0.002889f, -0.000279f, 0.000715f, 0.001124f, -0.002179f, -0.001566f, -0.003122f, -0.004833f, 0.001880f, 0.002148f, + -0.006136f, -0.002908f, -0.007705f, -0.000017f, -0.003400f, 0.002626f, 0.003246f, -0.006491f, 0.001014f, 0.005088f, 0.004734f, -0.002598f, 0.001743f, -0.001964f, -0.000863f, 0.001314f, -0.002833f, -0.000783f, 0.002722f, 0.001917f, 0.001888f, 0.002071f, 0.001265f, -0.000849f, 0.001838f, 0.000977f, -0.001239f, -0.000263f, 0.003696f, -0.000580f, -0.001553f, -0.000738f, 0.001606f, -0.001764f, -0.003549f, -0.000500f, -0.001131f, 0.000693f, 0.000964f, -0.000806f, -0.024852f, -0.007884f, 0.002506f, -0.004157f, 0.003249f, -0.001895f, -0.000223f, -0.007523f, -0.008962f, -0.001462f, -0.003300f, 0.003363f, 0.000788f, -0.001345f, -0.018244f, 0.008745f, 0.000396f, 0.007581f, 0.009548f, 0.006478f, -0.009650f, -0.002596f, -0.001150f, -0.002652f, 0.001792f, 0.001927f, -0.000397f, -0.003738f, 0.003573f, -0.006678f, -0.003634f, 0.005331f, 0.000061f, -0.002755f, 0.006383f, -0.000179f, 0.006708f, -0.002729f, -0.001334f, 0.000488f, 0.001949f, -0.005308f, -0.003889f, -0.001222f, 0.003686f, -0.001777f, 0.000415f, -0.001925f, 0.002392f, 0.002907f, 0.000417f, -0.000201f, -0.005978f, -0.000985f, 0.002601f, 0.002767f, + -0.002022f, 0.003136f, 0.000946f, -0.001396f, 0.000702f, -0.004027f, -0.001351f, -0.002853f, 0.002141f, -0.000092f, -0.001082f, 0.000370f, -0.006397f, -0.000476f, 0.000900f, 0.002391f, 0.016043f, 0.005610f, -0.009156f, -0.001319f, -0.003763f, 0.003590f, -0.005395f, 0.005067f, -0.000741f, 0.005842f, 0.004189f, 0.007028f, -0.008738f, 0.011185f, -0.006353f, 0.006661f, -0.003318f, 0.004105f, 0.001068f, 0.003525f, -0.005448f, -0.013027f, 0.005524f, 0.009541f, -0.002996f, 0.004078f, -0.004340f, 0.001386f, -0.002716f, 0.010009f, 0.000293f, -0.000692f, 0.002717f, -0.004462f, -0.002892f, -0.002508f, 0.004679f, 0.000305f, -0.001159f, 0.000263f, -0.000420f, 0.006942f, 0.004916f, -0.002250f, 0.002607f, 0.002793f, -0.002329f, -0.001365f, -0.002044f, -0.004826f, -0.000231f, 0.000342f, -0.000209f, -0.001630f, -0.004652f, 0.000018f, 0.008352f, 0.004486f, -0.002767f, 0.004605f, 0.000057f, 0.000143f, 0.004221f, 0.002138f, -0.003187f, 0.001626f, 0.001410f, 0.004076f, 0.005229f, -0.003475f, 0.002286f, 0.002913f, 0.033130f, -0.027388f, -0.004773f, 0.001159f, -0.000744f, -0.007710f, 0.002296f, 0.001775f, + 0.010417f, -0.003674f, 0.001858f, 0.008565f, -0.000003f, 0.005082f, 0.017049f, -0.003935f, -0.001377f, -0.009174f, -0.008674f, 0.000218f, 0.002599f, -0.003961f, 0.001373f, 0.015089f, 0.008548f, 0.001111f, 0.000296f, 0.001090f, 0.008154f, -0.007188f, -0.003406f, -0.000534f, 0.004055f, -0.000815f, 0.000741f, -0.003706f, 0.001036f, -0.006476f, -0.004051f, -0.004924f, -0.000249f, -0.004420f, 0.000694f, -0.007772f, 0.003187f, -0.015406f, -0.004265f, 0.001984f, 0.002463f, -0.000683f, -0.003895f, 0.001075f, 0.000071f, 0.001727f, -0.004575f, 0.001756f, -0.002853f, -0.002870f, -0.007165f, -0.005134f, -0.001917f, -0.000950f, -0.000118f, 0.001032f, 0.001694f, 0.000290f, 0.000542f, -0.004163f, -0.000546f, -0.005074f, -0.001294f, -0.000537f, -0.000468f, -0.021488f, -0.015086f, -0.001489f, -0.003392f, 0.010654f, -0.000063f, 0.001652f, -0.014263f, 0.000331f, 0.001465f, 0.000414f, 0.000626f, 0.007973f, -0.010847f, 0.001833f, -0.002672f, -0.007531f, -0.003933f, 0.006260f, -0.002776f, 0.005037f, -0.002306f, 0.002778f, 0.001220f, -0.001452f, -0.001296f, 0.003205f, -0.000959f, -0.000376f, -0.009392f, 0.004089f, + 0.003498f, 0.003461f, 0.003843f, -0.008297f, -0.008747f, 0.004507f, 0.006640f, -0.008880f, 0.002650f, 0.000960f, 0.006906f, 0.004011f, 0.000184f, 0.004743f, -0.003165f, -0.005426f, -0.001324f, -0.010226f, -0.007854f, -0.001028f, -0.000927f, 0.001391f, -0.005334f, 0.001484f, -0.004397f, -0.012966f, -0.004336f, -0.003588f, -0.013226f, -0.000084f, -0.002658f, -0.001549f, 0.000845f, 0.003902f, -0.004323f, 0.002441f, 0.001004f, -0.005637f, -0.004241f, -0.004244f, -0.001505f, -0.001063f, -0.013332f, 0.019842f, -0.010684f, -0.004682f, -0.006311f, 0.001381f, 0.001571f, 0.002741f, -0.001412f, 0.008522f, 0.006458f, -0.006508f, -0.011270f, 0.003936f, -0.004298f, 0.010008f, 0.000739f, 0.004124f, 0.005290f, -0.004145f, -0.003849f, 0.013352f, -0.007881f, -0.002166f, -0.004027f, 0.000188f, -0.001686f, 0.001509f, -0.002348f, -0.001216f, -0.010539f, 0.008954f, -0.003255f, -0.001155f, 0.010968f, -0.007856f, -0.009468f, 0.000509f, -0.004278f, -0.006596f, -0.000003f, -0.003568f, 0.002536f, -0.014058f, -0.004478f, -0.003753f, -0.000244f, 0.004407f, 0.000162f, 0.000537f, 0.002609f, -0.002783f, 0.002039f, 0.002767f, + 0.002934f, 0.002587f, -0.001576f, -0.003382f, -0.002339f, 0.002972f, -0.008058f, -0.002329f, -0.001710f, -0.002586f, 0.005677f, -0.004232f, -0.005500f, 0.005275f, 0.002105f, 0.002907f, 0.007302f, -0.003219f, -0.001952f, 0.002705f, -0.003371f, -0.027977f, 0.013299f, 0.014376f, 0.007125f, 0.006451f, -0.005403f, 0.006570f, -0.012375f, -0.000048f, -0.014462f, -0.002271f, -0.006600f, 0.006056f, -0.007189f, -0.005971f, -0.002036f, -0.010666f, 0.002483f, -0.005100f, 0.003989f, -0.010028f, 0.015491f, -0.005681f, 0.007023f, -0.006991f, 0.000083f, -0.006998f, -0.002683f, 0.003235f, 0.009686f, 0.011124f, -0.006363f, -0.000344f, -0.004013f, -0.006466f, -0.005261f, -0.016824f, -0.001027f, 0.002383f, -0.016116f, 0.005666f, 0.002391f, 0.003876f, 0.006729f, 0.004312f, 0.001791f, -0.005547f, -0.002410f, -0.006139f, -0.003672f, 0.002766f, -0.013122f, 0.004552f, 0.001648f, 0.000473f, -0.006646f, -0.003758f, 0.002350f, 0.009675f, 0.003336f, 0.002294f, -0.004830f, 0.003889f, -0.000362f, -0.004988f, 0.000285f, -0.003656f, -0.006451f, -0.003017f, -0.002405f, -0.005056f, 0.004337f, 0.003050f, 0.003162f, 0.002515f, + 0.022567f, -0.015924f, -0.006805f, -0.002248f, -0.000298f, 0.010841f, -0.002322f, 0.003365f, -0.006612f, 0.003160f, -0.004182f, -0.018307f, -0.012586f, -0.004912f, 0.006270f, -0.001075f, -0.010139f, -0.009646f, -0.019826f, -0.006661f, 0.002351f, 0.002333f, 0.000753f, -0.002356f, -0.001304f, -0.006434f, 0.001460f, 0.002212f, 0.003214f, 0.000413f, -0.001013f, -0.002714f, -0.009476f, -0.002757f, -0.002222f, 0.004344f, -0.001059f, -0.007860f, -0.003003f, 0.001781f, -0.008456f, 0.001051f, -0.008704f, 0.004430f, 0.006757f, -0.006842f, -0.012547f, -0.002835f, -0.003929f, -0.006160f, 0.000639f, 0.000715f, 0.001292f, 0.002654f, 0.000236f, -0.005358f, 0.007971f, 0.011782f, -0.005763f, 0.004625f, 0.002207f, 0.005343f, -0.008652f, 0.002885f, 0.001360f, 0.002697f, -0.012442f, 0.009595f, 0.001567f, 0.000652f, -0.001122f, -0.007776f, 0.002435f, 0.000372f, 0.002536f, 0.037207f, -0.020583f, 0.002044f, -0.001961f, -0.004258f, -0.015343f, -0.000669f, -0.000754f, 0.012751f, 0.005843f, 0.025591f, -0.010021f, 0.001169f, 0.002854f, 0.006287f, -0.002534f, -0.000963f, 0.010357f, -0.006247f, 0.014872f, 0.009216f, + -0.020569f, 0.019880f, 0.006953f, -0.006842f, -0.005101f, -0.007476f, -0.004022f, 0.001676f, 0.000903f, -0.005282f, 0.013044f, 0.001959f, -0.006273f, -0.005242f, 0.001246f, -0.006549f, -0.012149f, 0.000435f, 0.007185f, 0.003206f, 0.008739f, -0.003743f, 0.002673f, 0.009774f, 0.013477f, 0.003564f, -0.014102f, 0.004984f, -0.004601f, -0.007332f, 0.001948f, 0.006346f, 0.003309f, -0.001279f, -0.012832f, -0.010689f, 0.015590f, -0.001595f, 0.012021f, 0.001895f, -0.004889f, 0.006485f, -0.010625f, -0.004083f, 0.004983f, -0.000734f, 0.010368f, -0.007701f, -0.016644f, -0.003893f, -0.000759f, -0.004205f, -0.003760f, 0.011440f, -0.042383f, -0.027739f, 0.009403f, -0.014685f, 0.003933f, -0.007620f, -0.025876f, -0.019285f, 0.033197f, -0.016108f, 0.014672f, 0.008054f, -0.009404f, 0.007309f, -0.005591f, 0.010076f, 0.011200f, -0.001318f, -0.003935f, 0.019687f, -0.007169f, -0.023425f, -0.000217f, -0.010130f, 0.001743f, 0.001616f, 0.013103f, 0.006713f, 0.002256f, 0.006161f, -0.006757f, -0.000541f, 0.014403f, 0.009049f, -0.003299f, 0.003326f, -0.013839f, -0.021010f, -0.015686f, -0.011086f, -0.003554f, -0.003442f, + 0.003200f, -0.002435f, -0.006294f, 0.012604f, 0.002867f, -0.010382f, -0.009812f, -0.003170f, 0.003237f, -0.010444f, 0.003399f, 0.011749f, -0.000813f, 0.004099f, -0.008970f, 0.006053f, 0.004208f, 0.001044f, 0.004317f, -0.007850f, -0.011956f, -0.016537f, 0.007605f, 0.005953f, 0.000103f, 0.005950f, 0.000787f, -0.007676f, -0.001895f, 0.000393f, -0.013121f, -0.001134f, -0.020077f, -0.050644f, 0.016367f, -0.004623f, -0.003957f, 0.008295f, 0.001504f, 0.004354f, 0.021080f, 0.012382f, 0.015738f, 0.007664f, 0.021739f, -0.004547f, -0.022611f, 0.002633f, -0.003205f, -0.009959f, -0.020140f, -0.009031f, 0.016174f, 0.003275f, -0.001957f, 0.002975f, -0.002089f, -0.000313f, 0.013469f, 0.001269f, 0.004472f, -0.002698f, 0.002693f, 0.013696f, -0.004790f, -0.010093f, 0.006359f, -0.017510f, -0.017961f, -0.011488f, -0.003062f, -0.000032f, 0.006156f, 0.016175f, -0.000678f, -0.006246f, -0.017572f, -0.027719f, -0.010554f, -0.004454f, -0.002615f, -0.000658f, 0.009047f, -0.012951f, 0.021456f, 0.011215f, -0.003177f, 0.006007f, -0.009911f, 0.001154f, -0.000890f, 0.009944f, 0.018994f, 0.013099f, -0.012923f, -0.005414f, + 0.002249f, -0.002350f, -0.003630f, 0.000595f, -0.007207f, -0.019896f, -0.002545f, -0.004018f, -0.002396f, 0.002634f, -0.008421f, -0.002942f, 0.021553f, 0.021791f, 0.008227f, 0.014972f, 0.011184f, 0.022785f, -0.017718f, 0.023630f, -0.026115f, -0.003634f, 0.026912f, 0.036299f, 0.008642f, -0.001072f, 0.014116f, -0.009647f, -0.011247f, 0.026553f, 0.005456f, -0.002785f, 0.007561f, 0.021552f, -0.003983f, 0.013643f, -0.002701f, -0.004016f, -0.001031f, 0.010315f, -0.022226f, -0.001803f, 0.012951f, -0.004175f, 0.002681f, -0.007308f, 0.006401f, 0.019794f, -0.015774f, 0.006630f, -0.003588f, 0.007162f, -0.007484f, 0.013615f, 0.002654f, 0.005566f, 0.006713f, -0.019949f, 0.011877f, -0.028181f, -0.004272f, 0.017521f, 0.003484f, -0.009451f, 0.020011f, -0.005351f, -0.009246f, 0.014199f, -0.003633f, -0.002865f, -0.000220f, 0.008912f, 0.000729f, 0.002994f, -0.013928f, 0.006641f, 0.003565f, 0.031973f, -0.021237f, -0.009452f, 0.005116f, -0.005351f, 0.009557f, 0.009335f, -0.008448f, 0.022090f, 0.011509f, 0.041905f, -0.025917f, 0.001147f, -0.003973f, -0.006853f, 0.001086f, -0.009445f, -0.003780f, -0.030810f, + -0.025570f, -0.025694f, 0.008918f, -0.005346f, 0.008840f, -0.005880f, -0.018370f, 0.029832f, 0.021172f, -0.013917f, -0.011257f, -0.016446f, -0.003012f, 0.006294f, 0.010288f, 0.011958f, -0.000391f, 0.009201f, -0.002202f, -0.011986f, -0.013899f, 0.008803f, -0.006024f, 0.027026f, 0.017645f, 0.024880f, 0.004133f, 0.008850f, 0.025384f, 0.016839f, -0.004781f, 0.004167f, -0.000418f, -0.000079f, 0.003342f, -0.011964f, -0.007556f, 0.003988f, -0.013644f, -0.015368f, 0.015225f, 0.015837f, -0.017084f, -0.001170f, 0.032811f, 0.021591f, -0.000178f, -0.011221f, -0.001306f, 0.005880f, 0.007070f, -0.005102f, -0.010739f, 0.013405f, 0.000259f, 0.002569f, 0.011514f, 0.011958f, -0.012161f, 0.004728f, -0.000689f, 0.004176f, -0.019400f, 0.002548f, 0.020935f, -0.020476f, 0.033299f, 0.012504f, -0.005039f, -0.001604f, 0.010080f, -0.013171f, -0.016997f, 0.013613f, -0.020208f, -0.025978f, 0.006227f, -0.014174f, -0.018166f, -0.009696f, 0.016277f, 0.040782f, 0.016528f, -0.022973f, 0.041719f, 0.004404f, -0.007204f, 0.007114f, -0.025278f, 0.005771f, 0.002815f, -0.018214f, 0.014703f, -0.005278f, 0.002403f, -0.013267f, + 0.006527f, -0.012177f, 0.020754f, -0.025883f, -0.009996f, -0.009303f, 0.011396f, 0.013377f, 0.011722f, -0.014039f, 0.003224f, -0.014666f, -0.004778f, 0.006907f, 0.017130f, 0.007640f, -0.009000f, 0.016785f, 0.008079f, 0.013392f, 0.000105f, 0.015691f, -0.008035f, 0.008332f, -0.025848f, 0.027258f, -0.003377f, 0.003087f, -0.008419f, -0.015485f, -0.000290f, 0.008417f, 0.021295f, 0.005550f, -0.027934f, 0.010273f, -0.012065f, 0.020763f, 0.000589f, -0.009924f, 0.002852f, -0.009089f, 0.003046f, -0.017901f, 0.004505f, -0.068393f, 0.003911f, 0.012458f, 0.028068f, 0.009817f, -0.041752f, 0.057634f, 0.021660f, -0.025100f, 0.010202f, 0.057345f, 0.013538f, -0.012804f, -0.000855f, -0.033289f, 0.018428f, 0.002556f, -0.007891f, 0.005868f, 0.012568f, -0.021227f, 0.012718f, -0.026827f, 0.003798f, -0.024349f, -0.021911f, -0.008693f, 0.011577f, 0.017316f, -0.011580f, 0.015292f, -0.023825f, -0.002485f, 0.028630f, 0.003655f, -0.009118f, -0.002143f, 0.006319f, -0.005282f, -0.017416f, -0.019270f, -0.001793f, -0.008175f, 0.020969f, -0.026888f, 0.030745f, 0.010785f, 0.004772f, -0.008644f, -0.002303f, 0.015178f, + -0.010181f, 0.020050f, 0.005621f, 0.018329f, -0.005181f, -0.008172f, -0.028414f, 0.011739f, -0.001909f, -0.028593f, 0.010198f, -0.000167f, 0.019592f, 0.031789f, -0.011444f, 0.008957f, 0.015829f, 0.018061f, 0.004371f, -0.006400f, -0.000614f, -0.033694f, -0.000676f, 0.007011f, 0.010071f, 0.004930f}, + {-0.000085f, -0.000110f, -0.000233f, -0.000152f, -0.000064f, -0.000268f, -0.000373f, -0.000034f, -0.000201f, -0.000178f, 0.000051f, 0.000100f, 0.000053f, 0.000032f, -0.000142f, 0.000357f, -0.000041f, 0.000200f, -0.000520f, -0.000600f, -0.000007f, -0.001067f, -0.000421f, 0.000439f, 0.000043f, 0.000129f, 0.000086f, 0.000745f, 0.000011f, 0.000318f, 0.000056f, 0.000486f, 0.000031f, -0.000377f, -0.000522f, -0.000614f, -0.001068f, 0.000077f, -0.000104f, 0.000038f, -0.000438f, -0.000073f, 0.000301f, 0.000368f, -0.000247f, -0.000290f, -0.004608f, 0.000444f, -0.001004f, -0.000048f, -0.000365f, -0.000677f, 0.000375f, 0.001556f, 0.000019f, 0.000799f, -0.000868f, -0.000218f, 0.000612f, -0.000558f, 0.000189f, 0.001087f, -0.000628f, -0.000200f, -0.000286f, -0.000053f, 0.000171f, -0.000216f, 0.000322f, 0.000216f, -0.000234f, 0.000416f, -0.000234f, -0.000008f, -0.000865f, 0.000007f, -0.000075f, 0.000219f, 0.000165f, 0.000420f, -0.000359f, 0.000712f, -0.000091f, 0.000595f, -0.000175f, 0.000002f, 0.000460f, -0.000135f, 0.000340f, 0.000153f, 0.000347f, 0.000074f, 0.000330f, 0.001963f, -0.001509f, 0.000965f, + -0.001189f, 0.000630f, -0.000572f, -0.000565f, -0.000333f, -0.000315f, 0.000368f, 0.000418f, -0.001476f, -0.000067f, 0.000236f, -0.000135f, -0.000233f, -0.000860f, -0.000301f, 0.000636f, 0.000960f, 0.000486f, 0.001504f, 0.000316f, -0.000247f, 0.000319f, 0.000275f, -0.000139f, 0.000504f, 0.001071f, -0.000388f, 0.000002f, 0.000469f, -0.000001f, -0.000084f, -0.000745f, -0.000011f, 0.000396f, 0.000327f, 0.000074f, 0.000040f, -0.000240f, 0.000287f, -0.000016f, 0.000052f, 0.000027f, 0.007104f, -0.000421f, 0.000655f, -0.000407f, 0.000494f, -0.000497f, 0.000152f, -0.000091f, -0.000087f, 0.000446f, -0.000335f, -0.001242f, 0.000408f, 0.000173f, 0.000434f, 0.000909f, 0.000501f, 0.000353f, -0.000079f, -0.000702f, -0.000218f, 0.000384f, -0.000064f, -0.000078f, 0.000761f, -0.000877f, -0.000256f, 0.000027f, -0.000121f, -0.000185f, 0.000384f, 0.000425f, 0.000508f, 0.000177f, 0.000204f, -0.000150f, 0.000691f, 0.000014f, 0.000538f, 0.000398f, -0.000083f, -0.000022f, 0.000273f, 0.000050f, -0.000107f, -0.000023f, 0.005173f, -0.004979f, 0.000758f, -0.001358f, 0.000698f, -0.000108f, 0.000497f, -0.000492f, + 0.000912f, -0.000413f, 0.000543f, -0.001200f, 0.000023f, -0.000702f, 0.000172f, -0.000123f, -0.000188f, -0.000332f, -0.000898f, -0.000102f, 0.000077f, -0.000442f, 0.000687f, -0.000334f, -0.000547f, -0.000667f, 0.000363f, -0.000430f, 0.000986f, -0.000116f, -0.000027f, 0.000290f, -0.000027f, 0.000013f, -0.000484f, -0.000388f, -0.000138f, 0.000097f, -0.000207f, -0.000444f, 0.000354f, 0.000272f, 0.000663f, -0.000167f, 0.000193f, -0.000101f, -0.012232f, 0.001378f, -0.000964f, -0.000025f, -0.000191f, -0.001073f, 0.001055f, -0.000324f, 0.000049f, 0.000415f, 0.000092f, 0.001229f, -0.000112f, -0.000575f, 0.001486f, 0.000568f, 0.001337f, -0.000082f, -0.001886f, -0.001153f, -0.000934f, 0.000705f, -0.001007f, 0.000027f, -0.000397f, -0.000378f, 0.000063f, 0.000231f, -0.000326f, -0.000631f, -0.000476f, 0.000317f, 0.000372f, 0.000747f, -0.000111f, -0.000166f, -0.000097f, 0.000442f, -0.000603f, 0.000090f, 0.000174f, 0.000313f, -0.000499f, 0.000419f, -0.000595f, -0.000152f, -0.015441f, 0.005518f, -0.002303f, 0.002521f, -0.001845f, 0.001124f, -0.001995f, 0.001044f, -0.001494f, 0.000496f, 0.001021f, -0.000007f, + 0.000361f, 0.000920f, -0.000682f, 0.000643f, -0.000860f, -0.000663f, -0.001839f, 0.001567f, -0.001098f, 0.001028f, 0.000037f, -0.000072f, -0.001762f, -0.000129f, 0.000289f, -0.000312f, -0.000099f, -0.000132f, 0.000676f, -0.000176f, -0.000543f, 0.000472f, 0.000127f, -0.000291f, -0.000002f, -0.000049f, 0.000026f, 0.000239f, -0.000499f, 0.001119f, -0.000131f, -0.000824f, -0.000111f, -0.000485f, 0.000820f, 0.007058f, -0.001442f, 0.002714f, -0.001155f, 0.000970f, -0.000923f, 0.003365f, -0.000571f, 0.001821f, -0.000136f, -0.000075f, 0.000516f, 0.000052f, -0.002205f, 0.000568f, -0.000135f, -0.000975f, -0.000176f, 0.000088f, -0.002788f, -0.000031f, 0.000311f, 0.000952f, 0.000054f, -0.000498f, -0.000034f, 0.001025f, 0.000258f, -0.000442f, -0.000883f, 0.001514f, -0.000832f, 0.000005f, -0.001279f, -0.000112f, 0.000087f, 0.000274f, -0.000246f, 0.000397f, 0.000675f, -0.000542f, 0.000554f, 0.000010f, 0.000461f, 0.000010f, 0.000764f, -0.000312f, -0.000114f, 0.018588f, -0.005258f, 0.000927f, -0.000786f, 0.001337f, 0.000142f, 0.000108f, -0.002354f, 0.001234f, -0.000955f, 0.000882f, 0.000397f, 0.000510f, + 0.000934f, 0.001367f, 0.000327f, 0.000553f, -0.001954f, 0.000886f, 0.000909f, -0.001228f, -0.000123f, 0.001531f, 0.001055f, 0.001020f, 0.002148f, 0.001239f, 0.000434f, 0.000648f, -0.000609f, 0.000752f, -0.000036f, 0.001269f, 0.001647f, -0.000099f, 0.000652f, 0.001056f, -0.000249f, 0.000437f, -0.001158f, -0.000242f, 0.001458f, 0.000131f, -0.000766f, -0.000206f, 0.000549f, 0.001077f, 0.000087f, 0.000656f, 0.001243f, -0.009941f, 0.004084f, -0.002944f, 0.001806f, -0.001776f, 0.002143f, -0.001506f, 0.000013f, -0.001288f, -0.001596f, -0.002175f, 0.000063f, -0.001312f, 0.000522f, 0.000655f, 0.001509f, -0.002663f, 0.001519f, -0.000673f, 0.002143f, 0.000445f, -0.000229f, 0.000133f, 0.000073f, -0.000571f, -0.000550f, 0.000300f, -0.001170f, 0.000663f, 0.001158f, -0.001754f, -0.000489f, -0.000135f, 0.000579f, -0.000686f, 0.001695f, -0.001915f, 0.000249f, -0.000028f, -0.000006f, -0.000834f, 0.000006f, -0.000529f, 0.000354f, 0.000057f, -0.000036f, -0.000591f, -0.000232f, -0.001208f, -0.000539f, -0.000076f, 0.000128f, -0.015976f, 0.004984f, -0.003317f, -0.000280f, -0.000721f, 0.000932f, -0.002804f, + 0.000128f, 0.000818f, 0.000655f, -0.001013f, 0.000476f, -0.001278f, -0.002084f, -0.000836f, 0.000181f, -0.001254f, 0.004148f, 0.000068f, -0.001247f, -0.000431f, -0.001488f, -0.000707f, 0.001212f, 0.000729f, 0.001594f, -0.000194f, 0.000665f, -0.000984f, 0.000306f, -0.000893f, -0.000374f, -0.000537f, 0.000196f, 0.000487f, -0.000353f, -0.000844f, 0.000113f, 0.000274f, 0.001070f, -0.000231f, -0.000515f, -0.001535f, -0.001323f, -0.000612f, -0.000331f, 0.000261f, 0.000111f, -0.000638f, -0.000350f, 0.000095f, 0.000458f, 0.000273f, -0.015403f, 0.007106f, -0.003470f, 0.003124f, -0.001753f, 0.001815f, 0.000864f, 0.000493f, -0.001820f, 0.000123f, -0.000964f, 0.000170f, -0.002357f, 0.000766f, 0.001355f, 0.000369f, -0.002501f, -0.001299f, -0.001293f, -0.001369f, -0.000904f, 0.001643f, 0.000349f, 0.001126f, 0.000916f, -0.000531f, -0.000165f, -0.001938f, 0.002303f, -0.000779f, -0.000304f, 0.000045f, -0.000570f, -0.000836f, -0.000920f, -0.000305f, -0.001990f, 0.000461f, -0.001083f, 0.000658f, 0.000615f, 0.000992f, -0.000357f, 0.000005f, -0.001309f, 0.000354f, 0.000869f, 0.000098f, -0.000259f, 0.000063f, + 0.000669f, 0.000952f, 0.000417f, 0.005024f, 0.006202f, -0.002730f, 0.001695f, -0.000804f, 0.000664f, -0.000608f, 0.000399f, 0.000597f, 0.003057f, -0.001011f, 0.001284f, 0.002889f, -0.000731f, -0.000056f, -0.000438f, 0.000747f, 0.001501f, 0.001561f, 0.001987f, 0.000590f, 0.001695f, -0.000359f, -0.000946f, -0.003254f, 0.000733f, -0.000437f, -0.001634f, -0.001120f, -0.000026f, -0.000245f, 0.001102f, -0.000082f, -0.001898f, -0.001915f, 0.000563f, -0.001653f, 0.000259f, 0.001128f, -0.001527f, -0.000962f, -0.000636f, 0.000852f, 0.000723f, 0.000030f, -0.000183f, 0.001245f, 0.000269f, -0.000364f, 0.000487f, -0.000916f, 0.000146f, -0.000440f, -0.000738f, -0.000420f, 0.017710f, -0.006161f, 0.003344f, -0.002308f, 0.003324f, -0.002339f, 0.002038f, -0.000755f, 0.002070f, 0.000508f, 0.001456f, -0.001689f, 0.001737f, -0.000589f, -0.001445f, -0.000143f, -0.001553f, -0.002470f, -0.001310f, -0.000263f, 0.001252f, -0.001689f, -0.002272f, -0.002772f, -0.000504f, -0.000237f, 0.002217f, 0.001224f, 0.001422f, -0.000970f, 0.001148f, -0.000875f, -0.000874f, -0.000470f, 0.001458f, 0.001272f, 0.000386f, -0.000003f, + -0.000063f, 0.000047f, -0.000422f, -0.000226f, 0.001004f, 0.000203f, 0.002486f, -0.000953f, -0.000313f, -0.002077f, 0.001350f, -0.000540f, -0.000338f, -0.000488f, -0.000144f, 0.000123f, -0.000362f, 0.005031f, -0.007544f, 0.004513f, -0.002787f, 0.003518f, 0.000018f, 0.002205f, 0.000664f, -0.003276f, -0.001523f, -0.001067f, 0.000465f, 0.000891f, 0.000524f, 0.003818f, -0.002058f, 0.003062f, 0.000581f, 0.000438f, -0.001999f, -0.000389f, 0.002656f, -0.000115f, -0.002149f, 0.002568f, 0.001976f, 0.000481f, -0.000977f, -0.000760f, -0.000161f, -0.000118f, 0.001222f, -0.000514f, 0.000577f, -0.001350f, -0.000253f, 0.000869f, -0.001970f, 0.000834f, -0.000729f, 0.000785f, -0.000529f, -0.000120f, 0.002452f, 0.001093f, 0.001422f, -0.000045f, 0.000623f, 0.000939f, -0.000121f, -0.000597f, -0.000997f, 0.000425f, 0.000542f, 0.000916f, 0.001087f, 0.000308f, -0.000174f, -0.000989f, -0.000423f, -0.000999f, -0.019094f, -0.004048f, -0.000748f, -0.003384f, -0.001548f, 0.002585f, 0.000961f, -0.001057f, -0.000976f, -0.002497f, -0.001750f, -0.002069f, -0.002307f, -0.001940f, -0.001337f, -0.001775f, -0.002880f, -0.002478f, + 0.000617f, -0.002511f, 0.000511f, -0.003299f, -0.000151f, -0.001494f, -0.001269f, 0.002458f, -0.000528f, -0.001521f, 0.001476f, -0.002158f, 0.001573f, 0.000334f, 0.001673f, 0.001103f, -0.000295f, -0.001135f, 0.001771f, -0.000236f, -0.000570f, 0.001642f, -0.001029f, -0.002718f, -0.003104f, -0.000932f, 0.000682f, 0.000404f, -0.001110f, -0.000282f, -0.001049f, -0.000015f, -0.000227f, -0.000047f, 0.001512f, 0.000509f, -0.001557f, -0.000673f, -0.000041f, 0.000944f, -0.000014f, 0.001504f, 0.000184f, -0.022190f, 0.019287f, -0.007872f, 0.005336f, -0.005043f, 0.001208f, -0.002474f, 0.003235f, 0.000624f, 0.000345f, -0.001570f, 0.002173f, 0.000465f, -0.004030f, 0.000424f, 0.000539f, -0.001981f, -0.003126f, 0.003064f, 0.003706f, -0.001183f, -0.001059f, 0.000666f, 0.001666f, -0.000976f, 0.003356f, -0.000061f, 0.000789f, -0.002440f, -0.000971f, -0.001428f, 0.002146f, -0.000436f, 0.000391f, 0.000550f, -0.001385f, 0.002239f, 0.001971f, 0.000644f, 0.000601f, 0.002623f, -0.001668f, -0.000325f, -0.000449f, -0.001754f, 0.000266f, -0.001107f, 0.000314f, 0.000046f, 0.000021f, 0.002185f, -0.000230f, -0.000357f, + 0.000302f, 0.000230f, 0.001192f, -0.001134f, 0.000304f, 0.000051f, 0.002480f, -0.000654f, 0.014990f, -0.001600f, -0.002906f, -0.000551f, 0.002177f, 0.001210f, 0.001087f, 0.000073f, -0.001869f, 0.000691f, 0.001440f, 0.001597f, -0.000750f, -0.000706f, 0.003178f, 0.001200f, -0.002142f, 0.000679f, 0.004058f, -0.004650f, 0.003421f, 0.000568f, 0.004321f, -0.000098f, 0.000433f, 0.000985f, 0.001032f, 0.002345f, -0.001401f, -0.000432f, 0.001014f, 0.001732f, -0.000413f, 0.000130f, 0.000405f, 0.000536f, 0.001186f, -0.001811f, 0.000162f, 0.001325f, 0.000538f, -0.000923f, -0.000128f, 0.002722f, 0.002094f, 0.001062f, -0.000763f, -0.000551f, 0.000950f, -0.000165f, -0.000411f, 0.000611f, -0.000567f, -0.001069f, 0.002848f, 0.001187f, 0.001912f, 0.000419f, 0.001500f, 0.001185f, 0.001361f, 0.000272f, 0.001603f, 0.000826f, 0.001209f, 0.007056f, 0.002070f, 0.001716f, -0.000999f, -0.000674f, -0.001874f, -0.001353f, 0.000388f, -0.000741f, -0.000896f, -0.002733f, 0.002379f, 0.001614f, -0.001653f, 0.002910f, -0.002690f, -0.000839f, 0.001283f, -0.002047f, 0.001245f, 0.001876f, 0.002958f, 0.002530f, + 0.002504f, 0.001236f, -0.005067f, -0.000030f, -0.001000f, 0.000995f, -0.000413f, 0.001972f, 0.001450f, -0.000708f, -0.001160f, 0.001270f, -0.000824f, 0.003339f, 0.000099f, 0.001062f, 0.003544f, 0.003228f, -0.002379f, 0.000137f, -0.001528f, -0.003038f, -0.000204f, 0.000473f, -0.000257f, -0.000697f, -0.000191f, 0.000159f, -0.001257f, 0.000080f, -0.001484f, -0.000563f, -0.000053f, 0.000312f, 0.000154f, -0.001071f, -0.000861f, 0.001928f, -0.000578f, 0.000172f, 0.001076f, 0.000986f, -0.000471f, -0.000808f, 0.016655f, -0.011649f, 0.004295f, -0.004399f, -0.000304f, -0.003061f, 0.002845f, 0.002832f, 0.000936f, 0.000611f, 0.002674f, 0.007295f, -0.006337f, -0.000841f, -0.001622f, -0.002527f, 0.005660f, 0.004283f, -0.000834f, -0.003807f, 0.001596f, -0.003101f, -0.002485f, -0.004363f, 0.000596f, -0.004468f, -0.001461f, 0.002713f, 0.000415f, -0.001334f, -0.003699f, 0.000060f, -0.000870f, 0.002319f, 0.002112f, 0.001016f, -0.001666f, 0.000310f, -0.000079f, 0.000973f, 0.001826f, -0.001085f, -0.000550f, -0.001964f, 0.003091f, -0.000322f, 0.000478f, 0.002792f, -0.000539f, -0.000190f, 0.001118f, -0.001313f, + -0.000118f, 0.001247f, -0.002007f, 0.000523f, -0.000353f, -0.000116f, -0.002094f, 0.001091f, -0.000430f, 0.000244f, 0.000546f, -0.000722f, 0.001414f, -0.001034f, -0.000257f, -0.026004f, 0.003451f, 0.000232f, 0.001689f, -0.002118f, -0.003358f, -0.000144f, 0.002039f, 0.003312f, -0.000336f, 0.005103f, 0.002791f, -0.003669f, -0.003282f, 0.002317f, 0.000318f, -0.002650f, -0.004806f, -0.005502f, -0.003566f, -0.004093f, -0.004558f, 0.000676f, 0.001297f, 0.001057f, -0.003401f, -0.003284f, 0.000369f, -0.000955f, -0.000651f, -0.000545f, -0.002734f, 0.002098f, -0.004625f, -0.001810f, -0.000796f, -0.000285f, 0.001338f, 0.000389f, -0.000416f, 0.001967f, -0.000738f, 0.001961f, 0.001094f, -0.001718f, 0.000158f, 0.003262f, -0.001447f, -0.001466f, -0.000008f, 0.001864f, 0.000418f, -0.001517f, -0.001895f, 0.001542f, -0.000001f, -0.002481f, 0.003168f, 0.003559f, 0.000360f, -0.001156f, 0.000357f, -0.000176f, 0.000701f, 0.001513f, -0.000232f, 0.002044f, -0.015843f, 0.013547f, -0.004525f, 0.002893f, -0.000066f, 0.002252f, -0.005474f, 0.002115f, -0.003726f, 0.000008f, -0.002514f, 0.005073f, 0.004346f, 0.001620f, + 0.000373f, -0.004197f, -0.002748f, -0.000452f, -0.001654f, 0.004803f, -0.003915f, -0.000183f, -0.001922f, 0.007039f, -0.002213f, 0.000600f, -0.000161f, 0.001183f, 0.000596f, 0.001175f, 0.000934f, -0.001211f, 0.000683f, -0.000329f, 0.002518f, 0.000333f, 0.004731f, 0.002377f, -0.001455f, -0.000372f, -0.000525f, 0.000028f, -0.001726f, -0.001322f, -0.000385f, 0.000770f, 0.005770f, 0.000448f, 0.000450f, -0.001641f, 0.002397f, -0.000942f, -0.001146f, 0.000669f, -0.001110f, 0.000616f, -0.001394f, -0.003286f, 0.001662f, 0.001315f, -0.000365f, 0.003232f, 0.000791f, 0.000682f, 0.001281f, -0.001011f, 0.000478f, -0.000852f, 0.003257f, 0.002121f, -0.000204f, -0.001028f, -0.000809f, -0.000363f, 0.010216f, -0.000355f, 0.002207f, -0.007150f, -0.001293f, 0.000765f, -0.005796f, 0.000330f, 0.007729f, -0.001493f, 0.000438f, -0.003668f, -0.004984f, 0.001110f, -0.004565f, 0.006798f, -0.004937f, 0.001535f, 0.001506f, 0.003581f, 0.002750f, -0.000883f, -0.004423f, -0.000625f, -0.000531f, 0.002067f, -0.003144f, -0.000711f, -0.001022f, -0.001561f, -0.001160f, 0.001969f, 0.001148f, 0.005483f, 0.001760f, -0.002222f, + 0.002181f, -0.001661f, -0.001761f, 0.001593f, 0.004653f, -0.000826f, -0.002639f, -0.002458f, 0.002394f, -0.000199f, -0.003647f, -0.003344f, 0.001473f, 0.001392f, -0.001620f, -0.002787f, -0.004581f, 0.001080f, 0.001451f, 0.000966f, -0.002679f, 0.001732f, 0.000945f, 0.000646f, 0.035379f, -0.002056f, 0.001604f, 0.003407f, -0.002895f, -0.001131f, -0.000867f, -0.008109f, 0.005758f, -0.000720f, -0.004954f, 0.001291f, -0.002449f, 0.003202f, 0.002582f, 0.004020f, -0.001178f, 0.005391f, 0.004659f, 0.003032f, -0.004410f, 0.003705f, -0.006119f, -0.003551f, -0.004103f, 0.001871f, -0.003108f, -0.000427f, -0.000932f, -0.004036f, -0.002091f, 0.003717f, -0.002448f, -0.001831f, -0.003822f, 0.001468f, 0.001490f, 0.003170f, -0.001505f, 0.005336f, 0.001486f, 0.006059f, -0.000483f, 0.001230f, 0.001382f, -0.003102f, 0.002517f, 0.006192f, -0.001888f, -0.000017f, 0.001833f, -0.001607f, -0.002246f, 0.001578f, -0.002239f, -0.001167f, -0.002986f, -0.001943f, 0.002536f, 0.002232f, 0.001594f, 0.002381f, 0.003010f, 0.002819f, 0.004234f, 0.000773f, -0.001041f, -0.015934f, -0.030903f, 0.010968f, -0.000243f, 0.000258f, + -0.003402f, -0.003635f, -0.001080f, 0.000675f, -0.002321f, 0.007598f, -0.004034f, -0.007358f, 0.000072f, 0.000050f, -0.001260f, -0.002853f, 0.005099f, 0.000586f, -0.002781f, 0.002127f, -0.005163f, 0.005709f, -0.003759f, -0.002200f, -0.004503f, 0.006412f, -0.003283f, -0.001416f, -0.004461f, -0.002345f, 0.003383f, -0.002169f, 0.003693f, -0.005634f, -0.006389f, 0.000050f, 0.000735f, 0.000597f, -0.000480f, -0.003603f, 0.000266f, 0.001154f, 0.000492f, 0.002695f, -0.000330f, 0.004488f, 0.000379f, 0.004170f, 0.005787f, 0.000776f, -0.000767f, 0.000649f, -0.003720f, -0.001383f, -0.006008f, -0.005599f, 0.001192f, 0.000986f, 0.000700f, -0.000887f, -0.001923f, -0.001396f, -0.001685f, -0.001331f, -0.001679f, -0.000536f, -0.000411f, 0.000492f, -0.010392f, 0.029670f, -0.013756f, 0.006049f, -0.003040f, 0.009293f, -0.001644f, -0.004379f, -0.004513f, 0.002291f, -0.001441f, -0.000769f, 0.000083f, 0.001643f, -0.010159f, -0.005117f, -0.002710f, 0.003762f, 0.003235f, 0.005618f, 0.000960f, -0.001131f, -0.001031f, 0.006772f, -0.009221f, 0.005029f, -0.004483f, -0.001179f, -0.004712f, 0.006979f, 0.002828f, -0.004997f, + 0.000549f, -0.002358f, 0.000709f, 0.002776f, -0.013162f, -0.005779f, 0.001015f, 0.004282f, -0.002752f, 0.000640f, 0.003305f, -0.001704f, -0.001529f, -0.000830f, 0.005023f, 0.001636f, 0.000827f, 0.000189f, 0.001916f, 0.005560f, -0.003648f, 0.002315f, -0.008391f, -0.001868f, 0.001852f, 0.003590f, 0.000726f, 0.000122f, 0.000165f, 0.001700f, -0.001666f, -0.000257f, -0.000621f, -0.002506f, -0.001753f, 0.002554f, 0.002999f, -0.001760f, -0.001631f, -0.005866f, -0.026931f, -0.005933f, 0.002468f, -0.006508f, 0.001450f, 0.001007f, 0.003777f, -0.000181f, 0.007334f, 0.004720f, 0.002561f, -0.002216f, -0.003812f, -0.000358f, 0.007774f, -0.006937f, -0.002722f, -0.005417f, -0.000251f, -0.014508f, -0.011435f, 0.000535f, 0.006883f, 0.009476f, 0.002100f, -0.003695f, 0.003166f, -0.003304f, -0.002208f, -0.002312f, 0.000832f, 0.002339f, 0.000496f, 0.003565f, -0.002971f, -0.005294f, 0.004103f, 0.002578f, 0.008749f, -0.001289f, 0.001330f, -0.001477f, 0.007038f, -0.007648f, -0.003846f, -0.001973f, -0.005755f, 0.003377f, -0.002436f, 0.002798f, -0.006154f, 0.005806f, 0.005748f, 0.005157f, -0.002298f, 0.004540f, + 0.000155f, 0.001426f, 0.002698f, 0.001750f, -0.002630f, 0.000192f, -0.000890f, -0.000395f, 0.005393f, 0.001792f, -0.002526f, 0.004184f, -0.000839f, -0.004126f, -0.001407f, -0.000554f, 0.019673f, 0.012879f, -0.003717f, 0.005977f, -0.012645f, 0.009317f, 0.003589f, 0.007071f, -0.002074f, -0.001478f, -0.006796f, -0.003388f, -0.011804f, -0.001855f, -0.009340f, -0.002687f, -0.005646f, -0.005834f, -0.007887f, 0.003470f, -0.010876f, 0.001727f, 0.005109f, -0.001922f, 0.001809f, -0.004584f, 0.000229f, -0.001281f, -0.001296f, -0.006331f, -0.000583f, 0.000970f, -0.000144f, -0.000797f, -0.003121f, -0.002769f, 0.002331f, 0.002358f, 0.003148f, 0.014387f, -0.005396f, -0.000123f, 0.006069f, -0.001172f, -0.002029f, -0.005239f, 0.002018f, 0.005015f, 0.008307f, 0.002884f, 0.006990f, -0.006292f, -0.009394f, 0.001125f, 0.006759f, 0.003769f, -0.004889f, 0.006304f, -0.004229f, 0.003130f, 0.001613f, 0.005738f, 0.003546f, 0.002210f, 0.004180f, -0.003597f, 0.002830f, 0.002144f, 0.001584f, 0.005582f, 0.001721f, 0.004496f, 0.039197f, -0.025369f, -0.001382f, 0.002946f, 0.000781f, 0.003098f, 0.005358f, -0.001071f, + -0.000879f, 0.003027f, -0.004548f, -0.004309f, -0.000734f, 0.003495f, 0.014080f, 0.000616f, 0.004842f, -0.004517f, 0.000248f, -0.013919f, 0.008578f, -0.008404f, -0.012064f, 0.002831f, 0.003323f, -0.004421f, 0.003956f, 0.001725f, 0.009254f, 0.010356f, -0.001781f, -0.003846f, -0.003012f, -0.015361f, -0.008481f, 0.012134f, 0.003897f, 0.004502f, -0.007048f, -0.007074f, 0.002009f, -0.001320f, -0.006253f, 0.005420f, -0.001291f, -0.003770f, -0.004571f, 0.003107f, -0.004120f, -0.002047f, 0.014003f, -0.008552f, 0.002448f, -0.003012f, 0.003092f, -0.003796f, -0.001804f, -0.010472f, 0.001550f, -0.003813f, -0.002887f, 0.008549f, 0.001756f, 0.002467f, 0.004794f, 0.006243f, 0.001469f, 0.004366f, -0.002294f, -0.000368f, -0.007411f, 0.003317f, 0.005174f, -0.025279f, -0.012893f, 0.003636f, -0.002388f, 0.007959f, -0.002127f, -0.003218f, -0.007919f, -0.008791f, 0.003307f, -0.009153f, -0.003724f, -0.005585f, -0.001789f, -0.005848f, -0.004250f, -0.004880f, -0.002900f, -0.005837f, -0.010196f, 0.004437f, -0.019377f, -0.001124f, 0.015722f, 0.003110f, -0.000944f, -0.005473f, 0.000320f, -0.017705f, 0.006064f, 0.003258f, + 0.000304f, 0.005095f, 0.008149f, -0.008069f, -0.004590f, -0.008366f, 0.000236f, -0.000723f, -0.005231f, -0.006000f, -0.006397f, -0.004298f, -0.001104f, 0.002662f, -0.000545f, 0.001988f, 0.000862f, -0.000669f, 0.010656f, 0.001708f, -0.002697f, 0.008045f, -0.005301f, -0.011455f, -0.004029f, -0.002330f, -0.002332f, -0.001807f, -0.004426f, -0.001970f, -0.005308f, -0.002273f, -0.005381f, -0.000775f, 0.001620f, -0.006257f, -0.002238f, -0.004087f, -0.000609f, -0.006469f, -0.007208f, -0.004305f, -0.015280f, 0.019962f, -0.010234f, -0.005247f, -0.016770f, 0.012594f, -0.004773f, 0.007277f, 0.000268f, 0.000121f, -0.005207f, 0.009758f, -0.002701f, 0.002921f, 0.002350f, -0.005023f, -0.001720f, -0.001905f, -0.008890f, 0.001326f, 0.001478f, -0.007212f, -0.011466f, -0.007513f, -0.010540f, -0.003011f, 0.005614f, 0.002490f, -0.006201f, -0.006624f, 0.009123f, 0.005785f, -0.007917f, 0.006747f, -0.003930f, 0.005892f, -0.009995f, -0.008485f, -0.007592f, 0.002141f, -0.006697f, 0.003693f, -0.002964f, 0.001203f, -0.001750f, -0.001594f, 0.001713f, 0.006661f, -0.015814f, -0.002682f, 0.003373f, -0.002137f, -0.004646f, -0.012222f, + -0.000789f, 0.009865f, 0.000238f, 0.008435f, 0.007055f, 0.001207f, -0.000975f, 0.006229f, -0.006573f, -0.006483f, 0.004878f, -0.002481f, -0.003852f, 0.002137f, 0.001379f, -0.004211f, -0.004372f, 0.007552f, -0.007144f, -0.005076f, -0.003866f, -0.035065f, 0.012442f, 0.005017f, -0.009165f, 0.003850f, -0.010311f, 0.008425f, 0.007180f, 0.006073f, -0.018208f, 0.010295f, 0.018309f, -0.003033f, 0.005903f, -0.000138f, -0.006339f, -0.008087f, 0.020204f, -0.000709f, -0.002325f, -0.011817f, -0.023009f, -0.012619f, 0.000633f, -0.010389f, 0.007788f, -0.015177f, -0.005421f, -0.009136f, 0.001862f, -0.003833f, -0.011536f, 0.001416f, -0.003078f, 0.006799f, -0.002978f, -0.009078f, -0.003870f, -0.026912f, 0.004189f, -0.001256f, 0.011680f, -0.007932f, -0.008874f, 0.010979f, 0.001825f, 0.001433f, -0.005156f, -0.007542f, 0.001938f, 0.004745f, 0.003175f, -0.002325f, 0.003405f, 0.001706f, -0.000142f, -0.002803f, -0.003114f, -0.009235f, 0.000065f, -0.003988f, -0.005720f, 0.004051f, 0.001948f, 0.012325f, 0.002060f, -0.009288f, -0.009370f, 0.001268f, -0.006300f, -0.004879f, 0.000804f, -0.005108f, -0.000826f, -0.002996f, + 0.030303f, -0.009972f, 0.001620f, 0.003019f, 0.013517f, -0.000139f, -0.000890f, 0.009680f, 0.015689f, -0.008198f, -0.009600f, 0.010029f, -0.000161f, 0.008898f, 0.012387f, 0.010447f, 0.009331f, 0.007641f, 0.008910f, 0.029401f, -0.000840f, 0.003427f, 0.007002f, 0.016822f, -0.001642f, -0.004316f, 0.007531f, 0.000930f, -0.003459f, -0.004881f, -0.003839f, 0.001487f, -0.005456f, 0.012029f, 0.017749f, 0.000497f, -0.002352f, 0.008076f, -0.002253f, 0.010985f, 0.008605f, 0.001580f, -0.006617f, 0.007680f, 0.001090f, -0.001380f, 0.003062f, 0.000204f, 0.020522f, -0.000231f, 0.009959f, -0.002770f, 0.018528f, -0.000191f, 0.003356f, -0.004427f, -0.008256f, 0.009916f, -0.003123f, 0.018255f, 0.005661f, 0.009410f, 0.002066f, 0.001535f, 0.006931f, 0.002798f, 0.014143f, 0.008271f, 0.004350f, 0.007663f, -0.004837f, 0.004363f, 0.007866f, 0.002440f, 0.000443f, 0.036970f, -0.011156f, 0.003073f, -0.003926f, 0.001200f, 0.004497f, 0.012072f, -0.010038f, 0.004742f, -0.000470f, 0.000128f, 0.006579f, -0.006154f, 0.007077f, -0.020298f, -0.009111f, 0.002659f, 0.007175f, 0.004522f, 0.015531f, -0.016288f, + 0.002331f, -0.003069f, -0.021433f, 0.008322f, -0.008356f, -0.006228f, -0.003135f, -0.018376f, 0.005699f, 0.005282f, 0.002764f, -0.010065f, -0.015264f, 0.005050f, -0.009404f, 0.007304f, -0.014564f, -0.000838f, -0.017419f, -0.005401f, -0.011553f, -0.011313f, 0.010601f, 0.014997f, 0.002494f, 0.004722f, -0.007187f, 0.001732f, -0.012212f, 0.003973f, -0.007880f, 0.000879f, 0.012367f, 0.004641f, -0.003809f, 0.005737f, 0.001653f, 0.004687f, -0.004916f, 0.008856f, 0.018556f, -0.000812f, -0.010342f, -0.009428f, -0.004274f, -0.004006f, 0.001792f, 0.005947f, 0.002271f, 0.010821f, 0.000638f, 0.002458f, -0.011276f, -0.004718f, -0.038507f, -0.032372f, 0.013114f, -0.004420f, 0.015320f, -0.001637f, 0.004759f, -0.019520f, -0.018294f, -0.011323f, 0.005620f, -0.015217f, -0.010563f, -0.004807f, 0.002616f, 0.010375f, 0.003514f, -0.022123f, 0.005504f, 0.011677f, -0.031086f, -0.004121f, 0.001159f, -0.033105f, -0.011519f, 0.014076f, -0.030552f, 0.014349f, 0.015293f, -0.000275f, -0.004656f, -0.001713f, -0.007560f, -0.008512f, 0.005153f, 0.006191f, 0.022421f, -0.013900f, -0.007292f, -0.006135f, -0.010773f, 0.000115f, + -0.018208f, -0.004995f, 0.001150f, -0.001027f, -0.006058f, -0.001441f, -0.010097f, -0.002544f, 0.005343f, -0.003018f, -0.006625f, 0.006948f, -0.003672f, -0.007913f, -0.010638f, 0.021756f, -0.001063f, 0.013011f, 0.001682f, 0.004487f, 0.014625f, 0.001483f, 0.009945f, -0.007359f, 0.011075f, 0.007366f, 0.002359f, 0.002141f, 0.002669f, 0.008848f, 0.004343f, 0.000819f, 0.009196f, -0.062125f, 0.023016f, -0.007114f, -0.028049f, -0.007043f, 0.000377f, -0.007437f, 0.010378f, -0.024269f, 0.011221f, -0.002182f, -0.027967f, -0.019272f, 0.003416f, 0.010737f, 0.009983f, 0.007383f, 0.015874f, 0.004435f, 0.026346f, 0.014440f, 0.030937f, 0.003880f, 0.025043f, -0.019800f, -0.015883f, 0.005093f, 0.001771f, -0.015728f, 0.003898f, 0.003136f, -0.002636f, -0.006086f, 0.014612f, 0.002742f, -0.033792f, -0.014987f, 0.010657f, 0.003711f, -0.007582f, 0.009396f, 0.009186f, 0.015009f, 0.002712f, 0.004374f, 0.002272f, 0.004282f, 0.004956f, -0.011678f, 0.001179f, 0.002023f, -0.025220f, 0.011504f, 0.007938f, 0.010346f, -0.017500f, -0.009903f, 0.011680f, -0.000094f, -0.003919f, -0.002663f, -0.007878f, -0.006510f, + -0.000628f, -0.008638f, -0.019612f, 0.006268f, 0.019498f, -0.014412f, 0.001266f, -0.008353f, -0.003995f, -0.006290f, -0.002581f, 0.009715f, 0.025188f, 0.016777f, 0.011369f, 0.005824f, 0.000046f, -0.006821f, -0.009971f, 0.007358f, -0.026646f, 0.026536f, -0.017685f, 0.003604f, -0.028860f, -0.001832f, 0.025678f, 0.009572f, -0.010121f, 0.015952f, -0.027457f, 0.009841f, 0.004214f, 0.001033f, -0.033639f, -0.010704f, 0.001246f, 0.004437f, 0.020346f, -0.033208f, -0.005148f, -0.011619f, -0.031235f, -0.007566f, 0.006512f, 0.014316f, 0.022030f, 0.016827f, 0.016850f, -0.002433f, -0.012167f, 0.010688f, 0.002686f, -0.007932f, 0.003326f, -0.015849f, 0.022796f, 0.010079f, 0.007130f, -0.013346f, -0.027950f, -0.008265f, -0.000297f, -0.033849f, -0.027461f, -0.008054f, -0.024758f, 0.014179f, 0.004910f, 0.003622f, -0.012000f, -0.012931f, 0.003484f, 0.002127f, 0.000846f, 0.006122f, -0.005795f, 0.004293f, 0.014342f, 0.005815f, 0.001244f, 0.000790f, -0.011859f, -0.010015f, -0.009504f, 0.003144f, -0.004802f, 0.029274f, -0.023896f, 0.005690f, -0.003901f, -0.003594f, -0.000068f, 0.007701f, -0.015138f, 0.018874f, + -0.006239f, 0.012779f, -0.001942f, -0.011346f, 0.020010f, 0.019862f, 0.013925f, -0.007343f, 0.030640f, 0.011087f, -0.035696f, 0.035609f, 0.002601f, -0.000591f, 0.025391f, 0.000674f, -0.012039f, -0.015615f, 0.025028f, -0.016600f, -0.022264f, 0.020389f, 0.017425f, -0.012289f, -0.029390f, 0.010787f, -0.010604f, 0.003547f, -0.020929f, -0.016927f, -0.007649f, 0.019101f, 0.016701f, 0.001909f, 0.015244f, -0.023757f, 0.006680f, -0.006532f, -0.009571f, 0.010812f, 0.000687f, 0.003061f, -0.033599f, -0.009314f, 0.017277f, -0.023729f, -0.007015f, -0.029673f, -0.006412f, -0.011298f, 0.003978f, -0.007428f, 0.002334f, 0.002679f, -0.001995f, 0.002596f, -0.008838f, -0.026411f, -0.005904f, 0.012900f, -0.002742f, 0.008780f, -0.010946f, -0.023396f, -0.004837f, 0.004286f, 0.027071f, 0.002078f, -0.007846f, -0.019404f, -0.000616f, -0.009299f, 0.007265f, -0.016060f, 0.010254f, 0.006423f, -0.013912f, -0.014436f, 0.021770f, -0.025634f, -0.000880f, 0.016388f, -0.018355f, 0.005841f, 0.021332f, -0.016980f, 0.014699f, 0.010520f, 0.015739f, -0.025742f, 0.022309f, -0.025862f, 0.007978f, -0.019744f, 0.002700f, -0.010206f, + 0.017679f, 0.000313f, 0.010954f, 0.005257f, -0.017918f, -0.011379f, -0.024870f, 0.014451f, -0.016702f, 0.014518f, -0.020132f, -0.023696f, -0.038737f, 0.003511f, 0.021060f, -0.003469f, -0.000079f, 0.006158f, 0.018298f, -0.006372f, 0.005372f, -0.022026f, 0.006165f, 0.028351f, -0.002189f, 0.025649f, 0.034879f, -0.000653f, 0.006556f, 0.006563f, -0.013645f, 0.007100f, -0.016635f, -0.001367f, -0.016994f, -0.018059f, 0.002281f, -0.007159f, -0.028351f, 0.019666f, 0.002108f, 0.014509f, -0.015620f, -0.009430f, -0.004229f, -0.061428f, 0.015431f, 0.022837f, 0.006245f, -0.026682f, -0.004017f, 0.043118f, -0.049812f, -0.001369f, -0.008513f, -0.032603f, -0.008328f, -0.022127f, 0.007931f, 0.007918f, 0.018857f, 0.007591f, -0.026124f, -0.009331f, 0.018575f, -0.029755f, -0.008581f, -0.031817f, 0.026891f, 0.008002f, 0.020990f, 0.035942f, -0.012884f, -0.007740f, -0.006134f, -0.018201f, 0.017108f, -0.008617f, -0.021728f, -0.024287f, -0.004442f, 0.009100f, -0.000899f, 0.004758f, 0.005650f, 0.013857f, -0.006422f, -0.000856f, 0.010145f, -0.010255f, 0.020136f, 0.023000f, 0.021616f, -0.018020f, 0.002060f, -0.005818f, + 0.010144f, 0.043514f, 0.032501f, 0.062391f, 0.004587f, 0.024422f, 0.019647f, -0.009958f, -0.002613f, -0.003766f, -0.006345f, 0.007374f, 0.001317f, 0.021956f, 0.016437f, -0.008384f, -0.002925f, -0.014273f, -0.026988f, 0.009550f, -0.001053f, 0.007720f, -0.002555f, -0.019894f, -0.003099f, 0.000055f} +}; +const float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2522]={ {-0.004162f, 0.000448f, -0.000930f, 0.000917f, -0.000455f, 0.000395f, -0.000006f, 0.000439f, -0.000027f, 0.000475f, -0.000583f, -0.000275f, 0.000277f, -0.000394f, -0.000066f, -0.000617f, -0.000043f, -0.000228f, 0.001227f, 0.000583f, -0.000747f, 0.000029f, 0.000306f, -0.000028f, -0.000173f, 0.000318f, 0.000034f, 0.000209f, 0.000296f, 0.000262f, -0.000380f, -0.000102f, 0.000036f, 0.000053f, 0.000073f, -0.000027f, 0.000018f, -0.000029f, 0.000064f, 0.000006f, -0.000003f, -0.000038f, -0.000007f, 0.000031f, -0.000010f, 0.000022f, 0.003133f, 0.001814f, 0.000972f, 0.000486f, 0.000526f, 0.000178f, 0.000373f, -0.000069f, -0.000070f, 0.000900f, 0.000510f, 0.000418f, 0.000863f, 0.000722f, 0.000985f, -0.001373f, 0.001193f, 0.000330f, 0.000079f, 0.000239f, -0.000083f, -0.000615f, -0.000438f, 0.000703f, 0.000318f, 0.000575f, 0.000026f, -0.000197f, 0.000420f, -0.000049f, -0.000204f, 0.000425f, 0.000222f, 0.000624f, 0.000178f, 0.000415f, -0.000620f, -0.000374f, 0.000333f, 0.000061f, 0.000358f, 0.000149f, -0.000077f, -0.000165f, -0.000503f, 0.000104f, 0.001676f, -0.001733f, -0.000357f, -0.000338f, + -0.000441f, -0.000093f, -0.000058f, -0.000302f, -0.000273f, 0.000038f, 0.000044f, -0.000211f, 0.000114f, -0.000512f, -0.000190f, -0.000053f, 0.000305f, -0.001841f, -0.000204f, 0.000425f, -0.000206f, -0.000190f, 0.000138f, 0.000074f, 0.000107f, 0.000904f, -0.000443f, -0.000238f, -0.000487f, -0.000046f, 0.000231f, 0.000429f, -0.000420f, -0.000257f, 0.000439f, -0.000382f, -0.000651f, -0.000027f, -0.000192f, 0.000262f, -0.000208f, -0.000136f, 0.000084f, 0.000238f, -0.000407f, 0.000172f, -0.006005f, -0.004118f, -0.001639f, -0.001922f, -0.001036f, -0.001014f, -0.000916f, -0.000446f, -0.001109f, -0.000914f, -0.000362f, -0.000715f, -0.000062f, -0.000268f, -0.000578f, -0.000839f, -0.000891f, -0.000377f, -0.000503f, -0.000943f, -0.000088f, -0.001175f, 0.000038f, -0.000099f, -0.000126f, -0.000714f, -0.000085f, -0.000542f, 0.000041f, -0.000695f, -0.000401f, 0.000230f, -0.000467f, 0.000083f, -0.001134f, -0.000221f, 0.000613f, 0.000348f, 0.000020f, -0.000173f, -0.000295f, 0.000095f, 0.000150f, 0.000545f, -0.000282f, -0.000052f, -0.007886f, -0.000473f, 0.001060f, -0.000058f, 0.000344f, -0.000097f, 0.000047f, -0.000678f, + 0.000715f, 0.000224f, 0.000852f, 0.000537f, 0.001707f, 0.001183f, 0.000132f, -0.000704f, -0.000343f, -0.000200f, 0.000348f, -0.000269f, -0.001438f, -0.001370f, -0.000651f, -0.000250f, 0.000099f, 0.000141f, 0.000307f, -0.000100f, 0.000079f, 0.000115f, -0.000277f, -0.000089f, -0.000010f, -0.000956f, 0.000565f, 0.000172f, -0.000070f, -0.000058f, -0.000318f, -0.000553f, 0.000343f, 0.000071f, -0.000301f, 0.000265f, 0.000295f, 0.000334f, 0.008857f, 0.006269f, 0.001196f, 0.002443f, 0.000469f, 0.000824f, 0.001938f, 0.001038f, 0.000279f, 0.001208f, 0.000447f, -0.000500f, -0.000294f, 0.000431f, 0.000649f, -0.001186f, -0.000200f, -0.000706f, 0.001564f, 0.000814f, 0.000370f, 0.000813f, 0.000365f, 0.000426f, -0.000023f, -0.000066f, -0.000439f, 0.000638f, 0.000714f, 0.000657f, 0.000762f, 0.000987f, 0.000536f, 0.001436f, 0.000273f, -0.000075f, 0.000457f, 0.000099f, -0.000302f, -0.000110f, -0.000277f, -0.000281f, -0.000049f, 0.000664f, 0.000102f, 0.000108f, 0.013205f, 0.005689f, 0.001650f, 0.001602f, 0.001030f, 0.000720f, 0.000158f, 0.000100f, 0.001396f, 0.000341f, 0.000747f, 0.001142f, + 0.000520f, -0.000032f, -0.000465f, 0.002360f, -0.000272f, -0.001225f, -0.000789f, 0.000617f, -0.000033f, 0.001279f, 0.000341f, 0.000192f, -0.000295f, -0.000539f, -0.000232f, -0.000228f, 0.000474f, -0.000058f, 0.000155f, 0.000089f, 0.000013f, -0.000264f, 0.000368f, 0.001641f, 0.000943f, 0.001099f, 0.000888f, 0.000824f, 0.000359f, 0.000338f, 0.000106f, 0.000553f, -0.000524f, 0.000346f, 0.004308f, -0.004541f, -0.001449f, -0.001925f, -0.001775f, -0.000874f, -0.000331f, 0.000704f, -0.000694f, 0.000133f, -0.001755f, 0.000648f, -0.000671f, -0.001477f, 0.000360f, -0.001036f, -0.001520f, -0.000985f, 0.001364f, 0.001131f, -0.000540f, 0.000610f, -0.001018f, 0.000450f, -0.001817f, 0.000165f, 0.000254f, -0.000229f, -0.000453f, 0.000445f, -0.001441f, -0.000564f, 0.000148f, -0.000416f, -0.000447f, -0.000244f, 0.000085f, 0.000226f, 0.000681f, 0.000120f, 0.001197f, -0.000394f, -0.000360f, -0.000305f, -0.000627f, -0.000107f, -0.000323f, 0.000253f, -0.000539f, -0.015669f, -0.008062f, -0.002784f, -0.002321f, -0.002364f, -0.001608f, -0.002032f, -0.001450f, -0.002219f, -0.000491f, -0.000958f, -0.000339f, 0.000187f, + -0.001026f, -0.000179f, 0.000081f, 0.000096f, -0.001520f, -0.000879f, -0.000724f, 0.000223f, -0.002024f, 0.000282f, -0.000953f, -0.001653f, 0.000088f, 0.000066f, 0.000059f, 0.000047f, -0.000675f, -0.000379f, -0.000038f, -0.000039f, -0.000079f, -0.000556f, -0.000034f, 0.000272f, 0.000472f, 0.000297f, -0.000729f, 0.000486f, -0.000728f, 0.000559f, -0.001213f, -0.000691f, 0.000128f, -0.000540f, -0.000014f, -0.000138f, -0.009253f, 0.004825f, 0.002108f, 0.000699f, 0.001316f, 0.000171f, 0.000393f, 0.001044f, 0.001292f, 0.000605f, 0.000876f, -0.000695f, -0.000216f, -0.001047f, 0.001238f, 0.000179f, 0.000262f, 0.001553f, 0.000097f, -0.001161f, 0.001973f, -0.001353f, 0.000198f, 0.001520f, -0.000442f, 0.000343f, 0.000245f, -0.000114f, -0.000764f, -0.000269f, 0.000477f, 0.000381f, 0.000111f, -0.000365f, 0.000063f, -0.000646f, 0.001851f, 0.000073f, -0.000001f, -0.000801f, -0.000335f, -0.000549f, -0.000410f, 0.000898f, 0.000966f, -0.000333f, 0.000113f, -0.000152f, 0.000301f, -0.000022f, -0.000048f, -0.000287f, 0.000236f, 0.013956f, 0.006010f, 0.001531f, 0.003269f, 0.001804f, 0.000853f, 0.001335f, + 0.001256f, -0.000065f, 0.000929f, 0.001321f, 0.000369f, -0.000068f, 0.000757f, 0.001886f, -0.000619f, -0.000435f, -0.001507f, 0.000317f, 0.001826f, 0.000675f, 0.000121f, -0.001090f, -0.000506f, -0.000517f, 0.001915f, 0.000498f, 0.001016f, 0.000463f, -0.000863f, -0.001528f, 0.001659f, 0.000803f, -0.000976f, -0.000573f, 0.001608f, 0.001238f, -0.000047f, 0.000233f, -0.000147f, 0.000595f, 0.000461f, -0.000259f, 0.000337f, -0.000665f, -0.000251f, 0.000746f, -0.000442f, -0.000459f, 0.000918f, 0.000667f, 0.000436f, 0.000041f, 0.016492f, 0.003687f, 0.002675f, 0.001308f, 0.001178f, 0.000625f, 0.001214f, 0.001630f, 0.002364f, 0.001596f, -0.000558f, 0.002022f, -0.000468f, 0.000606f, 0.000335f, 0.001722f, 0.002320f, 0.001640f, -0.000517f, 0.002784f, -0.000613f, -0.000197f, -0.001523f, 0.000465f, -0.000525f, 0.000523f, 0.000625f, -0.000738f, -0.001239f, -0.000393f, 0.000116f, -0.000833f, -0.000406f, 0.000492f, 0.000493f, -0.000994f, -0.001021f, -0.000306f, 0.000240f, 0.000065f, 0.000170f, -0.000317f, -0.000121f, -0.000192f, -0.000475f, 0.000503f, -0.000731f, 0.000655f, -0.000777f, -0.000164f, + -0.000621f, 0.000173f, -0.000301f, 0.001847f, -0.007279f, -0.002429f, -0.002551f, -0.001761f, 0.000533f, -0.000485f, -0.001496f, 0.000838f, 0.000150f, 0.001047f, -0.000038f, 0.000057f, -0.001631f, -0.001270f, -0.000709f, -0.001304f, 0.000200f, -0.001382f, -0.002469f, 0.000457f, 0.000398f, -0.001239f, -0.000160f, -0.001127f, 0.000330f, 0.000319f, -0.000105f, -0.002688f, -0.000643f, 0.000127f, -0.000185f, 0.000188f, 0.000823f, -0.001920f, -0.000451f, -0.001212f, 0.000727f, -0.000179f, 0.000018f, 0.001201f, -0.001128f, -0.000113f, 0.000509f, -0.000186f, -0.000286f, 0.000571f, 0.000444f, -0.000771f, -0.000786f, -0.001482f, -0.000089f, -0.001136f, -0.000768f, -0.000495f, -0.017123f, -0.005959f, -0.003413f, -0.001003f, -0.001711f, -0.000174f, -0.000870f, -0.001384f, -0.001461f, 0.001859f, 0.000166f, -0.000850f, -0.000063f, -0.002960f, -0.001505f, -0.001491f, 0.002464f, -0.002060f, -0.004030f, 0.000256f, 0.000640f, 0.000240f, -0.001398f, -0.000490f, 0.001010f, -0.001995f, -0.000062f, -0.002031f, -0.000445f, 0.001012f, -0.000799f, 0.000191f, 0.002265f, 0.000158f, -0.000297f, -0.000586f, 0.000721f, 0.000590f, + 0.000679f, -0.000700f, 0.000030f, 0.000621f, 0.001086f, 0.000502f, 0.000468f, -0.001851f, 0.000493f, -0.000144f, -0.000752f, -0.000394f, 0.000333f, -0.000295f, -0.000759f, -0.000658f, -0.000792f, -0.011349f, 0.002561f, 0.000260f, -0.001485f, 0.002140f, -0.001386f, -0.000913f, 0.000426f, -0.001844f, -0.001246f, -0.000323f, 0.000710f, -0.001438f, 0.001990f, 0.000131f, -0.000150f, 0.001059f, 0.000876f, 0.001611f, -0.000259f, 0.002187f, 0.002925f, 0.002266f, 0.000593f, 0.001950f, -0.000704f, 0.001268f, -0.001477f, -0.001324f, -0.000688f, 0.000255f, 0.000814f, -0.000658f, -0.001425f, -0.000634f, -0.000135f, 0.000897f, -0.001383f, 0.001002f, 0.000211f, 0.000790f, -0.000433f, -0.001089f, -0.001681f, -0.001792f, 0.000379f, -0.000880f, 0.000398f, -0.001907f, -0.000688f, 0.000967f, -0.001366f, 0.000281f, -0.000996f, 0.000674f, -0.000401f, 0.000656f, 0.000017f, -0.000280f, -0.000153f, -0.000725f, 0.007613f, 0.012666f, 0.003627f, 0.003319f, 0.004520f, 0.003730f, 0.000689f, 0.002965f, 0.002568f, 0.001455f, 0.005485f, 0.001350f, 0.000897f, 0.002424f, 0.002173f, 0.001197f, 0.000940f, 0.000612f, + 0.000878f, -0.000683f, 0.002747f, -0.000719f, 0.000227f, -0.000849f, 0.001723f, 0.000115f, -0.000501f, 0.001486f, 0.001695f, 0.000638f, 0.002263f, -0.001614f, -0.002755f, -0.000590f, -0.000207f, 0.000607f, -0.000238f, 0.001185f, -0.001135f, 0.001078f, 0.002274f, 0.001017f, -0.002127f, -0.000416f, 0.001001f, 0.000425f, -0.001072f, 0.001475f, 0.000517f, 0.000876f, 0.000903f, 0.001315f, 0.000369f, -0.000361f, 0.000258f, -0.001181f, -0.000375f, 0.001104f, 0.000946f, -0.000574f, -0.000081f, 0.028941f, 0.003063f, -0.000354f, 0.001874f, -0.000117f, 0.002558f, -0.000034f, 0.000746f, 0.000251f, 0.002691f, 0.001157f, -0.000997f, 0.000813f, 0.001330f, 0.000608f, -0.001501f, -0.003345f, -0.001427f, -0.001443f, 0.000658f, -0.002079f, -0.000277f, -0.000194f, 0.000617f, 0.003542f, 0.002080f, 0.000614f, 0.001522f, -0.002312f, -0.000063f, -0.001243f, -0.000377f, -0.000994f, 0.001428f, -0.000584f, 0.002340f, -0.001109f, -0.000337f, -0.001230f, -0.000448f, -0.001747f, -0.000712f, 0.000320f, 0.000436f, -0.000155f, 0.000088f, -0.000989f, 0.000591f, 0.001496f, 0.000193f, -0.000908f, 0.001045f, -0.001449f, + 0.000667f, 0.000540f, -0.000076f, -0.000497f, -0.000235f, -0.000129f, -0.000204f, 0.000001f, -0.008464f, -0.010023f, -0.001888f, -0.000536f, -0.000430f, -0.001571f, -0.000678f, 0.003075f, 0.001788f, 0.000671f, 0.000817f, -0.001300f, -0.000280f, 0.002320f, -0.000855f, 0.003758f, -0.002903f, -0.000756f, 0.003027f, -0.000550f, -0.000348f, -0.001728f, 0.002074f, 0.002340f, 0.000037f, 0.002309f, -0.000830f, 0.001048f, -0.000051f, -0.001225f, -0.000202f, -0.000958f, -0.000421f, -0.000604f, 0.001253f, -0.000874f, -0.000219f, -0.001369f, 0.000963f, -0.000685f, 0.002100f, -0.003257f, 0.001395f, 0.001210f, -0.001996f, 0.000100f, -0.001317f, 0.000416f, -0.001499f, 0.000539f, 0.000633f, -0.001848f, -0.000282f, -0.000631f, -0.002838f, -0.001581f, -0.000783f, -0.001347f, -0.000302f, -0.000170f, 0.000160f, -0.001087f, 0.000167f, -0.002165f, 0.000628f, -0.007361f, -0.004313f, -0.005696f, -0.003012f, -0.003783f, -0.000490f, 0.003775f, -0.003931f, 0.003048f, 0.001851f, -0.002048f, 0.004179f, -0.000602f, 0.000773f, -0.002694f, -0.000346f, -0.001159f, -0.000224f, 0.000089f, 0.000997f, 0.000582f, 0.002163f, 0.004307f, + -0.001189f, 0.000658f, -0.002066f, -0.002040f, -0.001919f, 0.000505f, 0.001722f, -0.000542f, -0.000652f, -0.000483f, -0.001344f, 0.001549f, -0.000495f, -0.000016f, -0.001313f, -0.000925f, -0.000883f, -0.001237f, -0.000140f, 0.000027f, -0.001144f, 0.000819f, -0.001735f, 0.000719f, -0.001016f, -0.000089f, 0.000599f, -0.001174f, 0.001542f, -0.002624f, -0.000861f, 0.000348f, -0.000819f, -0.001356f, 0.000699f, -0.000306f, -0.001639f, 0.002771f, 0.001507f, 0.000467f, 0.000508f, 0.000637f, 0.000657f, -0.001252f, -0.020598f, -0.002428f, 0.001737f, -0.001578f, 0.003496f, 0.001519f, -0.004117f, 0.000501f, 0.000769f, -0.001414f, -0.003439f, -0.001364f, -0.000790f, 0.000934f, 0.000314f, -0.003308f, -0.001162f, -0.001796f, -0.003059f, -0.002696f, -0.006055f, -0.003251f, -0.003514f, -0.004403f, 0.003498f, -0.002374f, 0.001314f, 0.002510f, -0.001814f, -0.003010f, -0.001081f, -0.000705f, 0.000754f, 0.001865f, 0.001174f, -0.002508f, -0.002977f, 0.002308f, 0.001535f, 0.001810f, 0.002695f, 0.000308f, 0.000027f, 0.000966f, -0.000090f, -0.001251f, 0.000705f, -0.000712f, -0.000374f, 0.001479f, 0.003998f, -0.001398f, + -0.001966f, 0.000844f, -0.001250f, -0.000203f, 0.002057f, -0.004013f, -0.000051f, -0.001381f, -0.000219f, -0.000171f, 0.000010f, -0.000557f, 0.000760f, -0.001260f, 0.001386f, 0.016515f, 0.014477f, 0.003867f, 0.008816f, 0.002382f, 0.005090f, -0.000870f, -0.000770f, 0.002405f, 0.003352f, 0.001709f, -0.005706f, -0.001958f, 0.003598f, 0.003977f, -0.001467f, -0.002008f, 0.000675f, 0.001616f, 0.001926f, 0.000216f, -0.002968f, -0.006478f, -0.002396f, 0.003424f, -0.000301f, 0.003517f, -0.000844f, -0.001223f, 0.000732f, -0.003062f, -0.001724f, -0.001818f, 0.003293f, -0.004193f, -0.002833f, 0.000645f, 0.000683f, -0.001153f, -0.000137f, -0.001276f, 0.001223f, 0.001575f, 0.001430f, 0.003145f, 0.001880f, -0.000054f, -0.002676f, 0.002391f, -0.000254f, 0.001271f, -0.001320f, 0.000848f, 0.001961f, -0.000427f, -0.000552f, -0.001368f, -0.001492f, 0.000769f, 0.000179f, 0.001138f, -0.001294f, 0.000923f, 0.002551f, -0.000685f, -0.001429f, 0.001645f, 0.019965f, 0.003862f, -0.004045f, 0.003383f, 0.002000f, -0.003680f, -0.000973f, 0.002069f, -0.000004f, 0.000752f, -0.000430f, -0.000664f, -0.004322f, -0.003975f, + 0.001707f, 0.004020f, 0.003892f, -0.003818f, -0.008134f, 0.001263f, -0.000242f, -0.003073f, -0.004215f, -0.000580f, 0.001934f, -0.001269f, 0.002928f, 0.005032f, -0.001942f, -0.001446f, -0.000766f, -0.000571f, -0.001058f, -0.007315f, 0.003799f, 0.003713f, -0.000238f, 0.002452f, -0.002362f, -0.000559f, -0.002154f, 0.003175f, 0.003130f, 0.000524f, -0.000891f, -0.001007f, 0.001713f, 0.000601f, -0.001128f, -0.001722f, -0.000068f, 0.001766f, -0.002490f, -0.001328f, -0.001381f, 0.000587f, 0.000716f, -0.002870f, 0.001502f, 0.003546f, -0.002792f, 0.000146f, -0.000700f, -0.000291f, -0.000052f, 0.000518f, 0.000168f, -0.001013f, -0.002246f, -0.001485f, -0.000627f, 0.001608f, -0.000830f, -0.005383f, -0.003739f, 0.000642f, 0.004871f, -0.004888f, 0.003453f, 0.001753f, 0.000668f, 0.001141f, 0.000750f, 0.003376f, 0.005157f, 0.000270f, 0.001479f, 0.000711f, -0.004633f, -0.003983f, 0.003912f, 0.000676f, -0.004780f, 0.002893f, -0.004094f, 0.000793f, 0.004812f, -0.000177f, -0.001437f, 0.005745f, 0.000780f, 0.000523f, 0.000368f, 0.000309f, 0.000416f, -0.002322f, 0.001391f, 0.002406f, 0.003614f, -0.002789f, + -0.001538f, 0.000725f, 0.000435f, -0.001195f, -0.002730f, 0.001850f, -0.001042f, 0.001345f, 0.000559f, -0.000763f, -0.000925f, 0.000542f, 0.001620f, -0.001111f, -0.000622f, -0.000117f, 0.000912f, -0.002516f, -0.001304f, 0.001423f, 0.000223f, -0.000730f, -0.000507f, 0.001309f, -0.021537f, -0.019872f, -0.004376f, -0.009230f, -0.008005f, -0.004611f, -0.001324f, -0.003468f, -0.004064f, 0.002772f, 0.000819f, -0.000991f, 0.004783f, 0.001702f, 0.005736f, 0.004360f, 0.001340f, 0.001736f, 0.002147f, -0.008691f, 0.004176f, -0.000682f, -0.001748f, -0.001633f, -0.005041f, -0.001592f, -0.001686f, 0.004932f, -0.001550f, -0.002940f, -0.001365f, 0.000795f, -0.000538f, -0.000969f, 0.001197f, -0.001284f, -0.000733f, 0.003041f, -0.002841f, -0.000229f, -0.000836f, 0.005462f, 0.002279f, 0.002211f, -0.004046f, 0.000368f, 0.003848f, -0.001900f, 0.001024f, 0.000078f, 0.001044f, 0.000090f, 0.000457f, -0.000212f, 0.002517f, -0.000228f, -0.000619f, 0.001814f, -0.001068f, 0.001066f, 0.002225f, -0.000857f, -0.001271f, 0.000758f, 0.000955f, -0.001420f, -0.000467f, -0.013308f, 0.028336f, 0.018120f, 0.005541f, 0.001945f, + 0.001746f, 0.002213f, 0.002984f, 0.002999f, 0.005819f, 0.012260f, 0.000460f, 0.001553f, 0.002398f, 0.002649f, 0.002872f, -0.002084f, 0.011486f, 0.008523f, -0.008029f, 0.005915f, 0.000814f, -0.001092f, 0.002561f, 0.007243f, -0.006909f, -0.001738f, 0.000273f, -0.005366f, -0.004037f, -0.003794f, 0.007776f, -0.000207f, -0.001722f, 0.001219f, 0.000149f, -0.002262f, -0.006775f, 0.004630f, 0.003352f, -0.000957f, 0.001679f, 0.004740f, -0.003390f, 0.002643f, -0.000079f, -0.001063f, 0.003283f, 0.003234f, 0.000363f, 0.000551f, -0.000002f, 0.002627f, 0.003141f, 0.000159f, -0.001038f, 0.000094f, -0.001534f, 0.002603f, 0.000084f, -0.000874f, -0.001690f, -0.000772f, 0.001401f, 0.001003f, 0.003763f, -0.001152f, 0.000982f, -0.000804f, 0.030771f, -0.010748f, -0.010864f, 0.004999f, 0.001032f, -0.003905f, -0.003731f, -0.005523f, -0.005782f, -0.003966f, -0.003648f, 0.005261f, 0.001024f, 0.000756f, -0.003077f, -0.002402f, -0.009228f, 0.000122f, -0.003756f, -0.006094f, 0.005006f, 0.003575f, 0.000887f, 0.003328f, 0.000716f, -0.000972f, -0.002192f, -0.000053f, -0.001884f, 0.002736f, 0.004252f, -0.004608f, + -0.001931f, 0.000175f, 0.002230f, 0.006263f, 0.001654f, 0.008361f, -0.004439f, 0.002703f, 0.006684f, 0.004151f, -0.003637f, -0.000934f, 0.000599f, -0.001663f, 0.002770f, -0.000383f, -0.000039f, 0.004474f, 0.002206f, 0.000775f, 0.000213f, -0.000043f, -0.002050f, 0.000009f, 0.000326f, -0.001920f, -0.001324f, 0.002001f, -0.000970f, -0.003701f, -0.000757f, 0.000151f, -0.000864f, -0.003869f, 0.000799f, 0.000828f, 0.000757f, 0.001108f, -0.001038f, -0.001609f, 0.009851f, 0.018942f, 0.007330f, 0.005128f, 0.005827f, -0.001649f, 0.001815f, -0.005315f, 0.009290f, 0.003760f, 0.008916f, 0.002756f, 0.003337f, -0.008165f, 0.010170f, 0.015274f, 0.001831f, 0.009917f, -0.002086f, -0.007964f, -0.008038f, 0.007279f, -0.002444f, 0.005815f, 0.000954f, 0.002346f, -0.004559f, 0.004498f, -0.001680f, -0.001580f, 0.007261f, 0.005149f, -0.004005f, 0.006913f, 0.000644f, 0.001263f, -0.001527f, -0.005214f, 0.001310f, 0.000377f, -0.003042f, -0.003299f, 0.002907f, 0.004267f, 0.001257f, -0.001544f, 0.001870f, 0.000126f, 0.004407f, -0.002802f, -0.000567f, -0.004597f, 0.000360f, 0.004381f, 0.002814f, -0.002136f, + -0.000198f, 0.001479f, -0.004223f, -0.000397f, -0.002950f, -0.001639f, 0.000639f, 0.000948f, 0.002503f, -0.003314f, 0.001164f, -0.003807f, 0.000097f, 0.004385f, 0.001365f, 0.000724f, -0.000366f, -0.021768f, -0.001462f, -0.004705f, 0.006000f, -0.004488f, 0.004895f, 0.000437f, 0.003878f, -0.000287f, 0.003315f, -0.010720f, 0.002998f, -0.000996f, -0.004207f, 0.002238f, -0.005069f, 0.003275f, -0.005111f, -0.002266f, -0.011015f, 0.006458f, 0.012707f, -0.004750f, -0.001934f, -0.001148f, -0.002333f, 0.002305f, 0.002353f, 0.004090f, -0.009803f, 0.003215f, -0.006183f, -0.001357f, -0.000539f, 0.005283f, 0.001667f, -0.002105f, 0.000833f, 0.001424f, 0.003315f, 0.003975f, -0.006187f, -0.001581f, 0.000665f, -0.003965f, -0.004090f, -0.000330f, -0.002976f, 0.001602f, 0.003155f, 0.000877f, 0.000388f, -0.000351f, 0.002932f, 0.008881f, 0.004567f, -0.004714f, 0.000855f, 0.002390f, -0.002757f, 0.003464f, 0.000579f, -0.002807f, -0.000514f, 0.004324f, 0.000197f, 0.004183f, -0.005114f, -0.000566f, 0.002689f, 0.000746f, -0.040147f, -0.015492f, 0.008515f, 0.002646f, -0.004901f, 0.005428f, 0.005030f, 0.007263f, + -0.001548f, -0.003644f, 0.006911f, -0.000044f, -0.004191f, 0.008688f, -0.009837f, -0.013502f, -0.005948f, -0.007407f, 0.004876f, 0.006288f, 0.000106f, 0.001361f, 0.010722f, 0.004253f, -0.010358f, -0.005156f, -0.006281f, 0.001584f, -0.009611f, -0.008969f, -0.000288f, 0.000947f, -0.003539f, -0.004513f, -0.005780f, -0.003518f, -0.005275f, -0.005792f, -0.001808f, 0.000045f, -0.001754f, -0.000745f, -0.003504f, -0.001010f, -0.002643f, -0.006710f, 0.013714f, 0.000635f, 0.003383f, -0.005993f, 0.003758f, -0.000844f, 0.002000f, -0.004937f, -0.000021f, -0.001243f, -0.003535f, -0.002850f, -0.001541f, 0.003831f, 0.003334f, 0.002850f, 0.002251f, 0.002052f, -0.000529f, -0.000604f, -0.003112f, -0.001261f, -0.000096f, -0.000963f, 0.004195f, 0.000377f, 0.002464f, -0.000726f, 0.021393f, 0.007598f, 0.017263f, 0.002488f, 0.001321f, -0.007051f, 0.002792f, 0.010007f, 0.004006f, 0.000516f, 0.007021f, -0.006384f, -0.002602f, 0.005343f, -0.004118f, 0.001694f, 0.009960f, 0.002900f, 0.001466f, 0.002863f, -0.001673f, 0.003995f, -0.003138f, -0.000178f, 0.001772f, 0.000273f, -0.002413f, -0.003014f, 0.001151f, 0.009798f, + -0.003195f, 0.002173f, -0.009257f, -0.005333f, 0.004332f, 0.010304f, -0.008140f, -0.000305f, 0.005185f, 0.000910f, 0.001994f, -0.007177f, -0.002340f, -0.006272f, -0.010229f, -0.003136f, -0.005689f, -0.006465f, 0.004862f, 0.001481f, 0.001670f, -0.004003f, -0.002177f, -0.001205f, -0.009877f, -0.001451f, 0.005478f, -0.004455f, 0.004377f, 0.008515f, 0.001321f, 0.005412f, 0.003901f, -0.000306f, -0.001896f, 0.004540f, -0.006691f, -0.001048f, -0.000483f, 0.003358f, 0.001932f, 0.002943f, 0.025416f, -0.005310f, -0.008273f, 0.001607f, 0.005562f, 0.005155f, 0.004563f, -0.001108f, 0.004945f, 0.001993f, -0.006707f, -0.012340f, 0.008087f, 0.002587f, 0.005737f, 0.003966f, -0.003770f, 0.001788f, -0.005253f, -0.007988f, 0.008186f, -0.005097f, -0.010717f, 0.001374f, -0.002113f, 0.001544f, -0.001455f, -0.000777f, -0.003053f, -0.003825f, 0.002591f, 0.007193f, -0.010490f, 0.010057f, -0.008951f, -0.010855f, 0.000613f, 0.003193f, -0.006728f, 0.005139f, -0.001365f, 0.003326f, -0.005874f, -0.002484f, 0.008670f, 0.003926f, 0.008777f, 0.002630f, 0.000194f, 0.003102f, -0.000546f, 0.000481f, 0.004332f, -0.000310f, + 0.000320f, -0.004247f, -0.003505f, -0.002504f, 0.002863f, -0.003340f, -0.003451f, 0.005523f, -0.000747f, 0.006141f, 0.000346f, -0.004621f, 0.006793f, 0.005593f, -0.001104f, 0.003496f, -0.004446f, -0.006629f, 0.001730f, -0.002873f, -0.005178f, 0.021419f, 0.026471f, -0.004214f, 0.000318f, -0.013425f, -0.001349f, -0.009855f, -0.007084f, -0.002511f, -0.004807f, 0.007237f, 0.000128f, 0.005559f, -0.012237f, 0.010040f, -0.007672f, 0.010250f, 0.000473f, 0.008083f, -0.002916f, 0.010243f, 0.003534f, -0.005254f, 0.002288f, -0.007724f, 0.005014f, -0.004430f, 0.011871f, 0.003238f, 0.007813f, -0.013213f, -0.007363f, -0.003471f, -0.006520f, -0.003050f, -0.004463f, 0.000103f, 0.015978f, -0.007708f, 0.008027f, 0.013201f, 0.001904f, 0.005608f, 0.000054f, -0.003388f, -0.006357f, -0.005184f, 0.000622f, -0.003853f, 0.008108f, -0.005680f, 0.003669f, 0.009490f, -0.001394f, -0.001226f, -0.000900f, 0.007663f, 0.008615f, 0.002301f, -0.004201f, -0.004011f, -0.002307f, 0.002945f, -0.008193f, 0.001010f, -0.001648f, -0.002726f, -0.000129f, 0.004727f, 0.000192f, 0.006873f, 0.006523f, 0.000660f, 0.001238f, -0.004126f, + -0.020950f, -0.017931f, 0.007727f, -0.002005f, 0.009659f, -0.005335f, -0.005227f, -0.006458f, -0.006122f, -0.002199f, -0.016668f, -0.005530f, 0.005733f, 0.009095f, 0.003086f, -0.010885f, -0.003716f, -0.005029f, 0.004260f, 0.016687f, 0.008602f, 0.004357f, 0.000100f, 0.001601f, 0.000299f, 0.003225f, 0.007877f, 0.001037f, 0.001651f, -0.004454f, -0.000182f, -0.006542f, 0.002106f, 0.003698f, 0.005502f, 0.001122f, -0.004777f, -0.001768f, 0.007420f, -0.003420f, 0.002404f, 0.001961f, 0.002272f, 0.010581f, -0.006373f, -0.008378f, 0.002591f, 0.007621f, 0.001249f, 0.007611f, 0.008076f, 0.004528f, 0.005366f, 0.002634f, 0.000569f, 0.005106f, 0.013873f, -0.007871f, -0.000792f, 0.002677f, 0.000492f, -0.006051f, -0.001954f, 0.005135f, -0.000946f, -0.005403f, 0.001359f, 0.010889f, -0.009574f, 0.003088f, -0.009154f, 0.005019f, 0.002210f, 0.001628f, -0.000687f, -0.041489f, -0.014183f, -0.001144f, -0.003896f, -0.010394f, 0.006441f, 0.008088f, 0.014231f, 0.004391f, 0.009031f, -0.008387f, -0.017028f, 0.007829f, -0.003851f, 0.000227f, -0.009063f, 0.008938f, -0.005262f, -0.000633f, 0.008722f, -0.023734f, + 0.002495f, 0.012050f, -0.022620f, -0.006229f, -0.007872f, 0.000920f, 0.001070f, 0.005408f, -0.006135f, 0.007230f, 0.001272f, -0.012150f, -0.005959f, 0.001248f, -0.001326f, -0.006097f, 0.005430f, 0.013769f, 0.003179f, 0.003700f, -0.002036f, -0.003613f, 0.008319f, 0.001343f, -0.003893f, -0.020138f, -0.003005f, 0.002398f, -0.009969f, 0.004698f, 0.004264f, 0.000702f, -0.007681f, -0.007111f, -0.008210f, 0.017869f, 0.004901f, -0.002814f, 0.003600f, -0.015329f, 0.001901f, -0.007194f, -0.008121f, 0.007920f, -0.001286f, 0.000097f, -0.005129f, -0.019076f, 0.002601f, 0.005870f, 0.003357f, -0.001262f, 0.011283f, 0.000650f, 0.000634f, 0.043680f, 0.011121f, 0.011182f, 0.009684f, -0.002925f, 0.000451f, 0.044894f, 0.013070f, -0.003873f, 0.027563f, -0.015588f, 0.011522f, 0.002245f, 0.007051f, 0.011066f, -0.003449f, -0.008035f, 0.008495f, -0.001739f, -0.027189f, 0.006747f, 0.007053f, 0.005541f, 0.012939f, 0.007975f, 0.008439f, -0.007900f, 0.001662f, -0.007648f, -0.003896f, 0.007801f, 0.002631f, -0.016148f, -0.009534f, -0.013590f, -0.019874f, -0.003329f, 0.004015f, 0.009369f, 0.008274f, 0.006876f, + 0.005948f, -0.003267f, 0.010267f, 0.005417f, -0.012714f, -0.005187f, 0.003254f, 0.009120f, 0.000112f, 0.001655f, 0.016603f, -0.003406f, -0.001539f, -0.004762f, -0.000997f, 0.008074f, -0.007400f, -0.000344f, -0.010410f, -0.009641f, -0.005965f, 0.010193f, 0.014641f, -0.004826f, 0.001140f, -0.003427f, -0.009135f, -0.006833f, 0.002474f, -0.011287f, -0.002548f, -0.003623f, -0.006239f, 0.044110f, 0.026764f, 0.001428f, 0.017144f, 0.012291f, 0.004066f, 0.018823f, 0.005851f, -0.000566f, -0.005601f, -0.004962f, -0.012203f, -0.034680f, -0.002157f, 0.002783f, -0.011292f, -0.007194f, -0.000959f, 0.023284f, 0.008150f, -0.006762f, 0.000576f, 0.001071f, -0.003097f, 0.009457f, -0.001390f, -0.006806f, -0.003935f, -0.006464f, 0.004045f, -0.009218f, -0.020706f, -0.000175f, -0.010699f, -0.017627f, 0.003554f, 0.006638f, 0.010831f, 0.005286f, 0.009592f, -0.007117f, -0.017890f, -0.012507f, -0.016096f, 0.005637f, 0.015355f, 0.011787f, 0.008212f, 0.014430f, 0.000462f, 0.008709f, 0.020684f, -0.017894f, 0.003087f, -0.008544f, 0.000046f, 0.005079f, 0.006078f, 0.009158f, -0.001036f, -0.021786f, -0.016324f, 0.002538f, + -0.004831f, -0.006905f, -0.004352f, -0.005569f, -0.014797f, 0.000204f, 0.009003f, -0.002168f, 0.006414f, -0.005678f, -0.001842f, -0.002254f, 0.010200f, -0.021586f, 0.002130f, -0.016342f, 0.007016f, -0.031807f, -0.001461f, -0.010052f, -0.017334f, 0.030794f, 0.016452f, -0.009926f, -0.027485f, -0.006015f, -0.010330f, -0.022738f, 0.017875f, 0.001840f, -0.016738f, -0.005173f, 0.009000f, -0.014514f, -0.010896f, -0.007166f, -0.018658f, -0.006047f, -0.000724f, -0.013795f, -0.013745f, 0.019861f, -0.007339f, -0.004820f, -0.002020f, -0.003120f, 0.015755f, -0.016620f, -0.008522f, 0.004904f, -0.004933f, 0.001172f, -0.004205f, 0.010465f, -0.016972f, 0.007259f, -0.027015f, 0.004045f, -0.007784f, -0.009388f, 0.028179f, 0.004331f, -0.010466f, 0.006829f, 0.005911f, -0.021304f, 0.015867f, -0.002309f, -0.004817f, -0.000120f, 0.009186f, -0.002100f, 0.000597f, -0.009179f, 0.006199f, 0.009212f, 0.013042f, -0.009082f, -0.027727f, 0.021641f, -0.001711f, 0.010199f, 0.010320f, -0.003646f, 0.006465f, 0.016805f, -0.017327f, -0.041439f, -0.024776f, 0.006400f, -0.016189f, 0.002911f, -0.011998f, -0.004574f, -0.017091f, -0.009939f, + 0.007000f, 0.024973f, 0.024025f, 0.005087f, 0.016639f, -0.011130f, 0.029866f, 0.023811f, -0.019159f, -0.015171f, 0.004058f, 0.006216f, 0.025081f, 0.010604f, 0.015675f, -0.004917f, 0.005643f, -0.002274f, -0.003873f, -0.004412f, 0.023378f, 0.012077f, 0.022346f, 0.022408f, 0.003015f, -0.000109f, -0.011427f, 0.011419f, -0.002304f, -0.020252f, -0.015358f, -0.002904f, -0.012152f, -0.001297f, -0.012464f, -0.008799f, 0.005660f, -0.001832f, -0.008304f, 0.019078f, 0.019957f, -0.010914f, -0.005177f, 0.029961f, 0.010584f, -0.018396f, -0.020453f, -0.005713f, 0.006089f, 0.000339f, -0.004792f, -0.012703f, 0.010565f, 0.004912f, -0.005819f, 0.004559f, 0.001920f, -0.016034f, -0.009020f, 0.002928f, -0.008024f, -0.007156f, -0.010727f, 0.024693f, -0.020304f, -0.015496f, -0.016045f, -0.023888f, -0.020279f, -0.000315f, -0.015935f, -0.020802f, 0.005444f, -0.001931f, -0.028659f, 0.020389f, 0.003789f, -0.001922f, 0.010364f, 0.031501f, 0.030397f, 0.012867f, -0.036948f, 0.013574f, 0.009952f, -0.036524f, -0.000393f, -0.017744f, -0.008406f, 0.018492f, -0.021866f, 0.012533f, 0.000095f, -0.004012f, -0.007761f, 0.003532f, + -0.001741f, 0.006044f, -0.004151f, -0.019711f, 0.018961f, 0.008670f, 0.022686f, -0.002636f, -0.007571f, -0.011233f, 0.009205f, -0.010165f, 0.026751f, 0.005308f, 0.016069f, -0.021152f, 0.016589f, 0.000295f, 0.005860f, -0.013882f, 0.004512f, -0.016441f, -0.002581f, -0.016879f, 0.006661f, 0.010945f, -0.021964f, 0.000411f, -0.018146f, 0.007920f, 0.010477f, 0.009803f, -0.001629f, -0.031527f, -0.000200f, 0.007467f, -0.002992f, 0.012948f, -0.029985f, 0.006666f, -0.012840f, 0.002871f, -0.011143f, 0.000778f, 0.006613f, 0.043958f, 0.054456f, 0.022064f, 0.019334f, -0.031587f, 0.030448f, 0.042945f, -0.046967f, 0.005211f, 0.031377f, 0.004897f, -0.056103f, -0.006119f, -0.030182f, 0.009476f, 0.011871f, -0.014777f, -0.004996f, 0.009890f, -0.025395f, -0.002519f, -0.009553f, -0.013222f, 0.005738f, -0.020170f, 0.021939f, 0.014725f, 0.028193f, -0.014049f, 0.005211f, -0.003396f, -0.010476f, 0.034290f, 0.000076f, -0.016406f, -0.006768f, 0.007073f, -0.006672f, -0.009522f, -0.009835f, 0.017228f, 0.007423f, 0.024114f, -0.000846f, 0.008558f, 0.033155f, -0.020898f, 0.005244f, -0.014345f, 0.026581f, -0.010518f, + 0.013019f, 0.004588f, 0.000088f, -0.010193f, -0.017049f, -0.012841f, 0.006368f, 0.022562f, -0.020435f, 0.018920f, 0.024459f, 0.010974f, 0.028455f, -0.013835f, -0.009087f, 0.016828f, -0.001253f, -0.004079f, -0.022871f, -0.002507f, -0.018250f, 0.003091f, 0.028643f, 0.011249f, 0.009858f, 0.008780f}, + {-0.005177f, 0.000170f, -0.001276f, 0.001261f, -0.000706f, -0.000213f, 0.000386f, 0.000904f, -0.000173f, 0.000903f, 0.000379f, 0.000299f, -0.000045f, -0.000065f, 0.000137f, 0.000097f, -0.000456f, -0.000240f, -0.000861f, 0.000391f, -0.000269f, -0.000036f, 0.000890f, 0.000334f, 0.000117f, 0.000122f, 0.000254f, 0.000010f, -0.000152f, -0.000006f, -0.000095f, -0.000062f, -0.000264f, -0.000141f, -0.000083f, -0.000064f, 0.000048f, 0.000067f, 0.000001f, 0.000002f, 0.000001f, -0.000036f, -0.000016f, 0.000023f, 0.000083f, -0.000028f, 0.003626f, 0.001992f, 0.001004f, 0.001228f, 0.000691f, 0.001039f, 0.002102f, 0.000121f, 0.000060f, -0.000219f, -0.000519f, 0.001091f, 0.000013f, -0.000077f, 0.001158f, -0.000448f, -0.000537f, 0.000320f, 0.000116f, 0.000498f, 0.000121f, 0.000191f, 0.000523f, -0.000350f, 0.000351f, -0.000104f, -0.000077f, -0.000263f, 0.000177f, 0.000694f, 0.000368f, 0.000437f, 0.000366f, -0.000044f, 0.000285f, 0.000411f, -0.000169f, 0.000347f, -0.000583f, 0.000729f, -0.000293f, 0.000217f, 0.000039f, 0.000105f, -0.000140f, -0.000130f, 0.001821f, -0.002084f, -0.000281f, -0.000381f, + -0.000520f, 0.000341f, -0.001038f, 0.000354f, -0.000025f, 0.000475f, 0.000413f, -0.000819f, -0.000293f, 0.001257f, -0.000132f, 0.000271f, -0.000233f, 0.000549f, 0.001150f, 0.001333f, 0.000226f, 0.000577f, -0.000019f, -0.001045f, -0.000031f, 0.000118f, -0.000226f, 0.000008f, 0.000580f, -0.000598f, -0.000808f, 0.000358f, -0.000390f, -0.000357f, -0.000566f, -0.000020f, 0.000600f, 0.000155f, -0.000174f, -0.000211f, -0.000235f, 0.000002f, 0.000136f, -0.000315f, 0.000122f, -0.000360f, -0.005226f, -0.003719f, -0.001810f, -0.001370f, -0.001043f, -0.001081f, -0.000366f, -0.000799f, -0.000241f, -0.000503f, -0.001287f, 0.000246f, 0.000670f, -0.000111f, 0.000386f, -0.000253f, -0.000662f, -0.000676f, -0.001004f, -0.000349f, 0.000254f, 0.000027f, -0.000560f, 0.000382f, -0.000679f, -0.000682f, 0.000459f, -0.000003f, 0.000035f, 0.000358f, 0.000419f, 0.000107f, -0.000144f, -0.000203f, -0.000254f, 0.000138f, 0.000085f, -0.000357f, 0.000206f, -0.000709f, -0.000291f, -0.000175f, -0.000058f, -0.000505f, -0.000086f, -0.000185f, -0.007417f, -0.001016f, 0.000592f, 0.000093f, 0.000560f, 0.000041f, -0.000392f, 0.000252f, + -0.000298f, -0.000368f, -0.000649f, -0.000580f, 0.000287f, -0.000228f, 0.000492f, -0.000476f, 0.000025f, -0.000461f, 0.000157f, 0.000736f, -0.000181f, 0.000542f, 0.000048f, -0.000536f, -0.000088f, 0.000665f, 0.000360f, 0.000425f, 0.000521f, -0.000733f, 0.000497f, -0.000311f, -0.000043f, -0.000405f, -0.000168f, 0.000188f, 0.000324f, 0.000145f, -0.000157f, 0.000531f, 0.000492f, 0.000266f, -0.000150f, -0.000377f, 0.000065f, -0.000314f, 0.008753f, 0.006983f, 0.001643f, 0.003129f, 0.000744f, 0.002421f, 0.001688f, 0.000527f, 0.001699f, 0.000690f, 0.001285f, 0.000566f, -0.000482f, 0.001304f, 0.000905f, -0.000352f, -0.000130f, -0.002416f, -0.000273f, 0.000126f, 0.001462f, 0.000170f, 0.000043f, 0.000754f, 0.000045f, 0.000681f, 0.000611f, 0.000102f, -0.000066f, 0.000240f, 0.000990f, 0.000772f, 0.000632f, -0.000064f, -0.000277f, 0.000042f, 0.000448f, -0.000177f, -0.000069f, 0.000521f, 0.000152f, -0.000260f, -0.000034f, 0.000110f, -0.000536f, 0.000640f, 0.015398f, 0.005653f, 0.002716f, 0.001629f, 0.000974f, 0.001005f, 0.000931f, 0.001582f, 0.000373f, 0.002575f, 0.000339f, 0.000241f, + 0.001090f, -0.000597f, 0.000252f, -0.000265f, -0.000290f, -0.000426f, 0.001638f, 0.000912f, -0.000148f, 0.001258f, -0.000877f, -0.000221f, -0.000317f, 0.001941f, -0.000193f, 0.000696f, 0.000143f, 0.000949f, 0.000155f, -0.000287f, 0.000490f, 0.000648f, -0.000311f, 0.000227f, 0.000256f, 0.000169f, 0.000385f, -0.000135f, 0.000443f, 0.000403f, -0.001259f, 0.000265f, 0.000135f, 0.000229f, 0.005907f, -0.004367f, -0.001538f, -0.002018f, -0.001264f, -0.001197f, 0.000807f, -0.000682f, -0.001829f, -0.000452f, -0.002431f, -0.000563f, -0.001061f, -0.002319f, -0.000597f, 0.000529f, -0.001477f, -0.000487f, 0.000221f, -0.001637f, -0.000081f, 0.001895f, 0.000417f, 0.000275f, -0.000875f, 0.000039f, 0.000654f, 0.000017f, -0.000804f, -0.000841f, 0.000863f, -0.000074f, -0.001130f, 0.000108f, -0.000482f, 0.001378f, -0.000043f, 0.000622f, -0.000225f, 0.001192f, -0.000785f, 0.000479f, 0.000157f, 0.000281f, 0.000013f, 0.000307f, -0.000034f, -0.000379f, 0.000725f, -0.016236f, -0.009184f, -0.001875f, -0.002289f, -0.001570f, -0.002001f, -0.002821f, -0.000259f, 0.000079f, -0.000828f, 0.000710f, -0.000768f, 0.000123f, + -0.000079f, -0.000921f, -0.001021f, -0.001608f, -0.000563f, 0.001600f, -0.001512f, -0.000161f, 0.001442f, 0.000930f, -0.000228f, 0.000542f, -0.000211f, -0.001551f, -0.000779f, -0.001270f, -0.000436f, 0.000076f, -0.000322f, 0.000762f, -0.001372f, -0.001066f, -0.000043f, -0.001312f, -0.001030f, -0.000921f, -0.001093f, 0.001175f, -0.000338f, -0.001380f, -0.000446f, 0.000411f, 0.000440f, -0.000448f, -0.000714f, -0.000295f, -0.009960f, 0.005717f, 0.002142f, 0.000935f, 0.000979f, 0.000870f, 0.000435f, -0.001070f, 0.000281f, -0.000639f, -0.000184f, 0.001777f, 0.001092f, 0.001529f, 0.001574f, 0.001615f, -0.001353f, 0.000678f, 0.001748f, 0.000273f, 0.001522f, -0.001807f, 0.000340f, -0.000464f, -0.000122f, -0.000684f, 0.000643f, -0.000245f, 0.000026f, 0.001573f, -0.001637f, -0.000508f, 0.000622f, 0.000899f, -0.000429f, 0.000746f, -0.000650f, -0.001091f, 0.001274f, -0.000655f, -0.000058f, -0.000375f, 0.000478f, -0.000182f, 0.000584f, -0.000655f, -0.000247f, -0.000596f, -0.000164f, -0.000525f, 0.000945f, 0.000066f, 0.000300f, 0.014813f, 0.006070f, 0.001282f, 0.003380f, 0.002644f, 0.000514f, 0.001181f, + 0.003196f, 0.001456f, -0.000078f, 0.000682f, 0.000396f, -0.000474f, 0.000913f, 0.002744f, 0.000642f, 0.003275f, 0.001590f, -0.002706f, 0.000503f, 0.000091f, 0.000553f, 0.002415f, 0.001360f, 0.000969f, -0.000218f, -0.000385f, -0.000333f, -0.000417f, 0.000372f, -0.000539f, 0.000801f, 0.000234f, 0.001092f, -0.000233f, -0.000288f, 0.000393f, 0.000890f, 0.000478f, -0.000105f, -0.001198f, -0.000508f, -0.000671f, 0.001051f, 0.000754f, 0.001187f, 0.000648f, 0.000171f, 0.000157f, 0.001013f, 0.000794f, 0.000662f, 0.000093f, 0.016550f, 0.004748f, 0.002066f, 0.002587f, 0.000422f, 0.002499f, -0.000410f, -0.000959f, -0.000059f, 0.000638f, 0.000260f, -0.000082f, 0.000468f, 0.002545f, -0.000383f, -0.001601f, -0.001126f, 0.001229f, 0.000306f, 0.001433f, 0.002272f, 0.001992f, -0.000148f, 0.001325f, -0.001464f, 0.000152f, -0.001141f, 0.001527f, 0.000865f, -0.001741f, 0.000994f, -0.000833f, 0.000104f, -0.000675f, 0.001005f, -0.000651f, 0.001265f, 0.001014f, 0.000808f, 0.001648f, 0.000520f, -0.000045f, -0.000430f, -0.000007f, 0.000200f, 0.001824f, -0.000076f, 0.000036f, 0.000104f, 0.000876f, + 0.000565f, 0.000055f, -0.000257f, 0.002272f, -0.007029f, -0.002874f, -0.001128f, -0.001624f, -0.000718f, -0.000619f, 0.000123f, 0.000998f, -0.001014f, -0.001915f, 0.001794f, -0.002299f, -0.002165f, -0.000410f, -0.000490f, 0.000985f, -0.000603f, -0.000057f, -0.002091f, -0.001268f, -0.002527f, -0.002804f, -0.003091f, -0.000441f, 0.000741f, -0.002182f, -0.000567f, 0.000301f, 0.000251f, 0.000085f, -0.000262f, -0.002163f, -0.001321f, 0.000927f, 0.000381f, -0.000512f, 0.002058f, -0.001375f, -0.000593f, 0.000498f, 0.001270f, 0.001010f, -0.000156f, -0.000320f, 0.000513f, 0.000290f, -0.001299f, 0.000109f, -0.000753f, -0.000365f, 0.000126f, -0.000549f, 0.000098f, 0.000886f, -0.017970f, -0.005690f, -0.003375f, -0.001435f, -0.002421f, -0.001979f, -0.000549f, -0.001420f, -0.000555f, -0.001887f, -0.002488f, -0.001824f, -0.000589f, -0.003748f, -0.000866f, -0.001541f, -0.002232f, -0.000305f, 0.000414f, 0.001186f, -0.001295f, -0.001887f, -0.000662f, 0.001499f, 0.001985f, 0.002377f, 0.001315f, -0.000095f, -0.001161f, -0.000569f, 0.000041f, -0.001494f, 0.000640f, 0.000964f, 0.001282f, -0.000883f, -0.000701f, -0.000712f, + -0.000307f, -0.000320f, -0.000483f, 0.000939f, -0.000253f, 0.000596f, -0.001212f, -0.002187f, -0.000873f, -0.000117f, 0.001111f, -0.001899f, 0.000649f, -0.000931f, 0.000907f, -0.000948f, 0.000554f, -0.010334f, 0.002754f, 0.000766f, 0.000011f, 0.001812f, -0.001736f, 0.000466f, -0.003994f, -0.001298f, 0.001392f, 0.000987f, 0.002579f, -0.000186f, 0.002814f, -0.001637f, -0.000410f, 0.001348f, -0.002442f, -0.000895f, -0.001435f, 0.002745f, -0.000169f, -0.002267f, 0.001149f, 0.002190f, -0.001937f, -0.001477f, -0.001743f, 0.000512f, -0.000401f, 0.000949f, -0.000662f, -0.000550f, -0.000461f, -0.001056f, 0.001556f, -0.001239f, 0.000310f, 0.001021f, -0.000116f, 0.001179f, -0.000667f, 0.002572f, 0.000398f, -0.000249f, -0.000883f, -0.000882f, 0.000055f, -0.001016f, -0.001234f, -0.000767f, 0.000220f, 0.000888f, -0.000100f, 0.000254f, -0.001068f, -0.001080f, -0.001530f, -0.000604f, -0.000467f, -0.000392f, 0.008980f, 0.012785f, 0.004458f, 0.004411f, 0.006110f, 0.004354f, -0.000590f, 0.000839f, -0.000453f, 0.000785f, 0.000767f, 0.001083f, 0.000842f, 0.002155f, 0.000854f, 0.001336f, 0.000440f, 0.004287f, + 0.001022f, 0.002082f, 0.001262f, 0.001074f, 0.003412f, 0.000766f, 0.004271f, 0.002164f, -0.000871f, 0.002968f, 0.000783f, 0.001437f, 0.003003f, 0.000563f, 0.001780f, -0.000969f, -0.000331f, 0.000793f, 0.001332f, -0.001900f, 0.001547f, -0.001127f, -0.002034f, -0.001246f, 0.001620f, 0.002415f, 0.001843f, -0.000436f, 0.000563f, 0.000496f, 0.000878f, 0.001224f, 0.000694f, 0.001390f, 0.000833f, -0.001509f, -0.000110f, 0.000937f, 0.001356f, 0.000320f, 0.000383f, 0.000137f, -0.001509f, 0.030699f, 0.002446f, -0.001685f, 0.002599f, -0.001794f, 0.003607f, 0.000932f, 0.003782f, -0.001927f, 0.000468f, -0.000102f, 0.002321f, -0.004007f, 0.000884f, 0.002381f, -0.000405f, -0.000693f, 0.003341f, 0.004939f, -0.001982f, -0.001291f, 0.000741f, 0.002383f, -0.000990f, 0.001508f, 0.000207f, -0.001747f, -0.001234f, -0.001416f, 0.001196f, 0.001422f, 0.001898f, -0.001391f, 0.002081f, -0.001378f, 0.002025f, 0.001598f, -0.000312f, -0.001249f, 0.000779f, -0.001938f, -0.002453f, 0.000466f, -0.001638f, 0.000617f, 0.000308f, 0.000176f, 0.001226f, -0.000123f, 0.001461f, -0.000014f, -0.001627f, 0.000593f, + -0.000331f, 0.000729f, -0.001156f, -0.000362f, 0.000324f, 0.000777f, -0.000578f, -0.002329f, -0.010514f, -0.010197f, -0.002314f, 0.000801f, -0.000454f, -0.001529f, -0.001663f, -0.002267f, -0.000607f, 0.001703f, -0.000547f, -0.000558f, -0.002344f, 0.002495f, -0.000138f, -0.002013f, -0.001746f, 0.004315f, -0.003872f, 0.000429f, 0.002858f, -0.000305f, 0.000487f, -0.003714f, 0.001217f, -0.001571f, 0.000921f, -0.002566f, -0.001676f, 0.000471f, 0.000724f, -0.001171f, -0.001330f, 0.000179f, -0.000521f, 0.000240f, -0.001552f, -0.000845f, 0.001715f, -0.000121f, -0.000731f, -0.000407f, 0.002176f, 0.001007f, -0.001148f, -0.001770f, -0.001572f, 0.000631f, -0.000182f, -0.000694f, 0.000253f, 0.000439f, -0.000822f, 0.002613f, 0.001451f, -0.000163f, -0.000106f, -0.000550f, 0.000398f, -0.000623f, -0.000633f, -0.000639f, -0.000043f, -0.001298f, -0.001020f, -0.003987f, -0.003650f, -0.004107f, -0.003159f, -0.002096f, -0.001594f, 0.000450f, -0.000155f, -0.000950f, -0.000537f, 0.001128f, 0.003553f, -0.003076f, 0.001495f, -0.000952f, -0.002123f, 0.002702f, -0.000328f, 0.000632f, 0.003290f, 0.000621f, 0.001326f, -0.002008f, + -0.000607f, -0.006075f, -0.000808f, 0.001299f, 0.000668f, 0.000663f, 0.000531f, 0.001000f, -0.001471f, -0.001728f, 0.001324f, -0.000032f, 0.001247f, 0.000807f, -0.001728f, 0.001482f, -0.000227f, -0.004262f, -0.003709f, -0.000473f, -0.003514f, 0.000581f, 0.000981f, -0.000098f, -0.000968f, -0.000257f, 0.000066f, -0.000873f, -0.000405f, -0.000062f, -0.000683f, 0.001201f, 0.000197f, 0.000488f, -0.000702f, -0.000309f, 0.001602f, 0.000577f, -0.001182f, 0.001303f, -0.000358f, -0.000654f, -0.001870f, 0.000174f, -0.020039f, -0.004591f, 0.000316f, -0.004007f, 0.001631f, 0.000381f, 0.004833f, -0.002269f, 0.000308f, -0.001340f, 0.003247f, -0.006595f, -0.006290f, 0.002644f, -0.003037f, 0.004731f, 0.001740f, -0.003829f, -0.006662f, -0.000167f, -0.001869f, -0.003257f, -0.001307f, 0.000751f, 0.001105f, -0.001578f, 0.005745f, 0.000296f, -0.000546f, -0.002403f, 0.001971f, 0.002159f, 0.002358f, 0.002502f, -0.000288f, -0.001493f, -0.000540f, 0.001478f, -0.000094f, 0.001786f, -0.001662f, -0.000667f, -0.000557f, 0.002072f, 0.001688f, -0.001819f, 0.002381f, -0.001314f, -0.001621f, 0.000204f, -0.000725f, -0.001558f, + 0.001631f, -0.001843f, -0.000225f, 0.000478f, -0.000427f, -0.000742f, 0.000442f, 0.001562f, -0.000941f, 0.001502f, -0.001210f, 0.001019f, -0.000665f, -0.000739f, -0.000466f, 0.018432f, 0.016125f, 0.003415f, 0.004281f, -0.000827f, 0.005240f, 0.004265f, 0.005277f, -0.000190f, 0.002093f, 0.001310f, -0.005038f, -0.004202f, 0.002275f, 0.000476f, -0.003624f, -0.003759f, -0.002161f, 0.000261f, 0.002094f, 0.000644f, 0.004999f, 0.004627f, 0.001968f, -0.001055f, -0.001175f, 0.003063f, 0.002803f, 0.000233f, 0.002447f, -0.000806f, 0.003143f, 0.000181f, -0.000751f, 0.004452f, 0.002256f, 0.003649f, 0.002295f, 0.000797f, 0.002497f, 0.001281f, 0.000823f, 0.002362f, -0.001368f, 0.000462f, 0.003081f, -0.000048f, -0.002102f, 0.001854f, 0.001784f, 0.001311f, -0.001503f, -0.000058f, 0.001757f, 0.002740f, -0.001466f, 0.003316f, 0.003737f, -0.000694f, -0.002155f, 0.000322f, 0.000789f, 0.000559f, 0.001585f, -0.000045f, 0.000506f, 0.001254f, 0.022212f, 0.001924f, -0.000735f, 0.001681f, 0.000974f, -0.003553f, 0.000855f, 0.001102f, -0.000099f, 0.002484f, 0.003309f, 0.005209f, -0.002378f, -0.002200f, + -0.003707f, -0.002810f, 0.003192f, -0.000151f, 0.004654f, -0.001036f, -0.001254f, 0.002069f, 0.004031f, 0.001749f, -0.004249f, 0.003392f, -0.001311f, 0.002734f, -0.001469f, 0.002146f, -0.002598f, 0.001639f, -0.000299f, 0.002498f, 0.000193f, 0.001468f, 0.000638f, -0.004107f, -0.002412f, -0.000292f, -0.000948f, -0.000296f, -0.001408f, 0.002127f, 0.000675f, 0.004433f, -0.000767f, -0.002876f, -0.001827f, -0.000208f, 0.000163f, -0.003215f, 0.001017f, -0.001039f, -0.000245f, -0.000239f, -0.002027f, 0.001834f, 0.003259f, -0.000985f, 0.001627f, 0.000468f, -0.001989f, -0.000118f, -0.001901f, -0.001440f, 0.000190f, 0.003015f, 0.000306f, -0.001220f, -0.002998f, 0.000875f, -0.001105f, 0.006445f, -0.001545f, -0.006154f, -0.004167f, -0.005549f, 0.005123f, -0.004100f, 0.001129f, 0.006265f, -0.000285f, -0.006364f, 0.000427f, -0.006681f, 0.005554f, -0.001941f, 0.005534f, 0.000033f, -0.002122f, 0.004767f, 0.000167f, 0.000988f, -0.003600f, -0.004536f, -0.000741f, 0.001592f, 0.000962f, -0.000889f, -0.002105f, 0.002104f, -0.000660f, 0.001570f, 0.002410f, 0.002938f, 0.001347f, 0.001622f, -0.005988f, 0.000490f, + -0.001370f, -0.002051f, 0.000802f, 0.002950f, -0.002511f, -0.004600f, -0.002042f, 0.001330f, 0.000507f, -0.004047f, -0.001660f, 0.001862f, 0.002734f, -0.002443f, -0.001593f, -0.001888f, 0.002799f, 0.003709f, 0.000741f, -0.001287f, 0.000410f, 0.002643f, -0.001295f, -0.000144f, -0.022628f, -0.022692f, -0.003808f, -0.011061f, -0.007047f, -0.003845f, -0.006310f, -0.000628f, 0.004579f, -0.010095f, 0.003636f, -0.001959f, 0.003312f, 0.000727f, 0.001996f, -0.004099f, 0.000987f, -0.000386f, -0.002299f, -0.009229f, -0.001996f, -0.004723f, -0.006046f, -0.000464f, 0.001428f, 0.000480f, -0.002104f, 0.001466f, -0.001998f, -0.000399f, 0.004911f, 0.000070f, -0.001726f, 0.000492f, 0.003195f, 0.004566f, 0.002874f, 0.000194f, 0.002286f, 0.002906f, -0.000320f, 0.000229f, -0.004924f, 0.001999f, -0.004075f, 0.000968f, 0.003837f, -0.002453f, -0.004919f, 0.001636f, -0.002776f, -0.002380f, 0.000503f, 0.000202f, -0.002345f, 0.001372f, -0.000580f, 0.005511f, 0.002923f, 0.001873f, 0.000625f, 0.002201f, -0.000213f, 0.000863f, -0.002088f, -0.003433f, -0.000628f, -0.013188f, 0.024667f, 0.019702f, 0.001015f, 0.004151f, + 0.001370f, 0.004503f, 0.006389f, 0.001680f, 0.006193f, 0.001318f, -0.006976f, 0.004649f, 0.005177f, 0.001753f, 0.001382f, 0.004188f, 0.005087f, -0.005194f, 0.004197f, -0.002684f, 0.003652f, 0.000706f, -0.003490f, 0.000740f, 0.004152f, 0.002610f, -0.005508f, 0.002637f, -0.002412f, 0.007707f, -0.000909f, 0.001859f, -0.001446f, -0.004846f, 0.004679f, 0.004988f, 0.002069f, 0.001307f, -0.000507f, 0.001816f, 0.004966f, 0.001256f, 0.003463f, 0.000494f, 0.002311f, 0.001437f, -0.000655f, 0.002847f, -0.003754f, -0.005361f, -0.002672f, -0.004102f, -0.003783f, -0.001805f, -0.003883f, 0.004736f, 0.003064f, 0.000355f, -0.001195f, -0.001781f, -0.000907f, -0.000218f, -0.000313f, 0.000122f, 0.000312f, 0.000863f, 0.000196f, -0.000266f, 0.032967f, -0.012699f, -0.007415f, 0.001552f, -0.000419f, -0.001307f, -0.009595f, -0.003609f, 0.002016f, -0.000108f, -0.001672f, -0.001471f, 0.001076f, -0.007267f, -0.002522f, 0.004289f, 0.007057f, 0.004377f, 0.002971f, -0.002038f, -0.002606f, -0.004045f, 0.004752f, -0.006875f, -0.001619f, 0.002119f, -0.005113f, 0.001888f, 0.001676f, 0.006134f, -0.009243f, -0.000418f, + -0.000530f, -0.001508f, 0.001981f, -0.007890f, -0.004667f, 0.009373f, 0.005571f, 0.001565f, -0.001940f, 0.005727f, -0.001974f, -0.000378f, 0.000611f, 0.004547f, 0.002034f, -0.002293f, 0.000150f, -0.001207f, 0.003053f, -0.005220f, -0.002910f, -0.003037f, -0.003949f, 0.007094f, 0.001432f, 0.001158f, -0.003425f, 0.000066f, -0.001453f, -0.000879f, -0.003581f, 0.000822f, -0.003423f, 0.000191f, 0.000572f, 0.002932f, -0.004967f, -0.002802f, -0.004439f, -0.000887f, 0.009745f, 0.022939f, 0.003588f, 0.008844f, 0.007700f, 0.007684f, 0.002359f, 0.005780f, 0.003309f, -0.001490f, -0.004790f, -0.002795f, -0.001503f, 0.006594f, -0.005683f, -0.005965f, -0.000592f, -0.000139f, -0.002675f, -0.004536f, 0.013634f, 0.013114f, 0.009583f, 0.000617f, -0.005763f, 0.001126f, 0.000734f, -0.002644f, 0.002983f, 0.002173f, 0.005373f, 0.000785f, 0.002070f, -0.000129f, -0.004049f, 0.006454f, 0.005020f, 0.003914f, -0.001128f, -0.004872f, 0.000077f, -0.000247f, -0.001636f, -0.010092f, 0.007127f, -0.004523f, 0.008248f, 0.000626f, 0.004335f, -0.000834f, 0.004797f, 0.007846f, 0.001254f, -0.003339f, -0.000557f, 0.001561f, + -0.002851f, 0.001505f, -0.001314f, -0.003117f, -0.002137f, 0.001229f, -0.001162f, 0.003390f, 0.000751f, -0.005298f, -0.000077f, -0.000580f, -0.006342f, -0.001209f, 0.000682f, -0.002061f, 0.002231f, -0.023785f, -0.003316f, -0.014768f, 0.000033f, 0.002778f, -0.005195f, -0.008568f, -0.010217f, -0.009407f, -0.005788f, -0.007639f, -0.002033f, -0.000364f, -0.002134f, 0.002675f, -0.001669f, 0.000682f, 0.006014f, 0.002928f, -0.000712f, 0.014671f, -0.003284f, 0.003089f, -0.002218f, 0.001407f, 0.002008f, 0.000967f, -0.000905f, 0.002329f, 0.006698f, 0.002249f, 0.002320f, 0.000973f, 0.002636f, 0.005948f, 0.007823f, 0.002706f, 0.009513f, -0.002335f, -0.008325f, 0.008582f, -0.002706f, -0.001510f, -0.001736f, 0.004972f, 0.007273f, 0.005781f, -0.000183f, -0.001629f, -0.004225f, -0.010398f, 0.006552f, 0.007770f, 0.005272f, -0.006071f, 0.003850f, 0.001319f, -0.000644f, 0.006393f, 0.001033f, 0.004424f, -0.003359f, 0.002364f, -0.004178f, 0.000001f, 0.003711f, -0.000627f, 0.002826f, -0.000101f, -0.001437f, -0.000974f, -0.041652f, -0.019023f, 0.008754f, -0.001856f, -0.001202f, 0.001270f, -0.005010f, -0.004824f, + -0.001337f, -0.002295f, -0.007092f, 0.004963f, 0.000811f, 0.010735f, -0.005871f, -0.005465f, -0.008702f, -0.005218f, -0.008965f, 0.000545f, 0.003633f, -0.013970f, 0.009140f, 0.007438f, -0.000828f, 0.001324f, 0.006056f, 0.000660f, 0.005366f, -0.010627f, -0.010218f, -0.006018f, -0.006599f, -0.005492f, 0.017306f, 0.005360f, -0.003448f, -0.006290f, -0.008406f, 0.003951f, 0.002654f, -0.004311f, 0.003719f, 0.003182f, -0.005814f, 0.000406f, 0.001712f, 0.004674f, -0.005356f, 0.013852f, -0.005777f, -0.005050f, 0.002561f, -0.001658f, 0.000310f, -0.004361f, -0.001192f, 0.000305f, 0.009320f, -0.002886f, 0.013265f, 0.002629f, 0.001293f, 0.001345f, 0.003907f, -0.003915f, -0.000877f, -0.005098f, -0.003551f, -0.003873f, 0.000564f, 0.006980f, -0.003875f, 0.006596f, 0.021179f, 0.010854f, 0.006749f, 0.004543f, -0.007471f, 0.000693f, -0.006063f, 0.009341f, -0.001072f, -0.001340f, 0.003137f, 0.001970f, 0.002110f, -0.000400f, 0.003226f, 0.001067f, 0.003397f, -0.003039f, 0.009081f, 0.001080f, -0.000972f, 0.027416f, 0.001354f, -0.002301f, -0.007228f, 0.003899f, -0.006749f, 0.005933f, 0.014671f, -0.001409f, + 0.003431f, 0.003403f, -0.007876f, -0.008839f, 0.000016f, -0.000117f, 0.006275f, -0.004551f, -0.000035f, -0.000790f, 0.004524f, 0.004596f, 0.007975f, 0.002732f, 0.002551f, 0.003026f, 0.000012f, 0.005033f, 0.002192f, -0.010506f, 0.001782f, -0.005661f, -0.013293f, -0.001623f, 0.003227f, -0.000469f, 0.000660f, -0.002283f, -0.000187f, -0.001017f, -0.000521f, 0.000985f, -0.000186f, 0.005197f, -0.004007f, -0.001278f, 0.000647f, 0.000452f, -0.000340f, -0.003107f, 0.003550f, 0.005983f, 0.030240f, -0.008258f, -0.004224f, -0.007630f, 0.014818f, 0.006529f, 0.000485f, 0.003943f, -0.003091f, -0.002875f, 0.004685f, 0.001278f, -0.006236f, 0.002169f, -0.007968f, -0.004645f, -0.000471f, -0.006478f, 0.000154f, 0.003125f, -0.006185f, -0.008651f, 0.000057f, 0.001266f, 0.005528f, 0.011221f, 0.006444f, -0.004147f, -0.000929f, 0.007255f, 0.011010f, -0.011670f, 0.003826f, -0.001574f, -0.001075f, -0.004911f, -0.008847f, 0.001441f, 0.006273f, 0.002866f, 0.002315f, 0.005287f, -0.001391f, 0.003791f, -0.001618f, 0.002935f, 0.003683f, -0.007514f, -0.006729f, 0.013681f, -0.001951f, 0.000395f, -0.003851f, 0.005955f, + 0.015750f, 0.004995f, 0.001567f, 0.006246f, -0.005351f, -0.004113f, -0.000962f, -0.002834f, -0.010536f, 0.007054f, -0.000189f, -0.003837f, 0.001641f, 0.002411f, -0.003699f, -0.003455f, 0.005097f, -0.000973f, -0.008244f, 0.004657f, 0.002426f, 0.026285f, 0.025309f, -0.008391f, 0.007046f, 0.001842f, 0.005512f, 0.013235f, -0.001476f, -0.007271f, -0.002288f, 0.025769f, -0.014452f, -0.003035f, -0.007083f, -0.006068f, -0.011693f, 0.012744f, -0.003606f, -0.017960f, -0.013041f, -0.016418f, -0.006056f, 0.014005f, -0.001572f, 0.006453f, -0.002405f, -0.007600f, 0.006485f, 0.001576f, 0.008174f, -0.008086f, 0.007277f, 0.005389f, 0.003035f, 0.002993f, -0.012625f, 0.003334f, -0.010534f, 0.008641f, 0.019052f, 0.005159f, 0.005766f, -0.012426f, 0.017048f, 0.004193f, -0.001726f, -0.002993f, -0.003417f, 0.004956f, 0.008518f, 0.001692f, -0.001970f, -0.000875f, 0.002295f, -0.004496f, -0.002957f, -0.004345f, -0.003089f, -0.000717f, 0.006175f, -0.004565f, 0.009236f, 0.002951f, 0.005607f, -0.002326f, -0.013444f, -0.009330f, 0.003269f, 0.000535f, -0.004139f, 0.004633f, -0.000444f, -0.000748f, 0.002441f, -0.002055f, + -0.025350f, -0.014416f, 0.003179f, 0.002422f, -0.000512f, -0.010467f, 0.006149f, 0.004186f, -0.006934f, -0.017386f, 0.014329f, 0.004157f, 0.005159f, 0.008874f, 0.004628f, -0.001731f, 0.002448f, -0.003869f, 0.011955f, -0.009441f, -0.017689f, 0.000135f, -0.001028f, -0.007560f, -0.019156f, 0.001373f, -0.004016f, -0.009192f, -0.005593f, -0.002289f, 0.004205f, 0.001593f, 0.006966f, 0.014910f, -0.005950f, -0.010619f, 0.003676f, -0.000369f, 0.000203f, 0.006758f, -0.008105f, -0.006423f, -0.000884f, 0.007871f, -0.008706f, 0.008534f, -0.002350f, 0.015431f, -0.001787f, -0.003210f, -0.001391f, 0.001379f, 0.003175f, -0.014920f, 0.002722f, -0.012669f, 0.014822f, 0.001537f, 0.009506f, 0.006930f, -0.005001f, 0.000902f, -0.006744f, 0.005283f, -0.000171f, 0.004637f, 0.003380f, -0.007792f, -0.000727f, -0.007322f, -0.003311f, 0.006357f, -0.001948f, -0.003346f, 0.003718f, -0.033105f, -0.017352f, -0.004392f, -0.005309f, 0.000348f, 0.002160f, -0.010603f, -0.010097f, 0.004587f, -0.011558f, 0.004579f, -0.012683f, -0.002102f, -0.012320f, -0.011680f, 0.012331f, 0.007130f, 0.000569f, 0.000561f, -0.012940f, -0.017967f, + 0.008128f, -0.023998f, 0.007665f, 0.001759f, -0.009686f, 0.002716f, -0.006609f, 0.003320f, 0.016107f, -0.007524f, -0.002533f, -0.017700f, 0.013399f, -0.003059f, 0.005214f, -0.005347f, -0.003874f, -0.000183f, -0.002366f, 0.010249f, 0.001389f, 0.019865f, 0.020548f, -0.000965f, -0.001376f, -0.005983f, -0.000903f, -0.001493f, 0.001721f, 0.008459f, -0.000897f, 0.017468f, 0.002754f, -0.004601f, 0.000737f, 0.004725f, -0.001774f, 0.000261f, -0.001404f, 0.013635f, -0.011079f, -0.016989f, -0.009561f, 0.001700f, 0.002274f, 0.004641f, 0.007108f, 0.000536f, 0.001715f, -0.003163f, -0.009760f, -0.008693f, -0.010705f, 0.002387f, -0.003782f, 0.044391f, 0.019234f, 0.013954f, 0.005212f, -0.004640f, -0.008432f, -0.013372f, 0.007176f, 0.013518f, 0.004988f, -0.005819f, 0.015075f, 0.009082f, 0.015060f, 0.001382f, -0.011725f, -0.004044f, 0.022827f, -0.024039f, -0.005514f, 0.016404f, -0.010062f, -0.005054f, 0.037135f, -0.004437f, 0.010219f, 0.034440f, -0.006044f, -0.001970f, -0.001575f, 0.004516f, -0.002485f, 0.015075f, 0.008920f, 0.012467f, -0.009260f, -0.019921f, 0.007430f, -0.007708f, 0.009042f, -0.003531f, + 0.002852f, 0.014631f, 0.007647f, 0.001091f, 0.005625f, 0.003166f, 0.005372f, 0.014156f, 0.007100f, -0.001227f, 0.012759f, 0.005929f, 0.001149f, 0.003488f, 0.024098f, 0.015221f, -0.000794f, 0.013871f, -0.006834f, 0.017480f, -0.005150f, 0.004140f, -0.005777f, 0.002455f, 0.008890f, -0.004993f, -0.001371f, -0.000428f, 0.002385f, 0.001057f, -0.007531f, 0.001164f, -0.006702f, 0.056387f, 0.026062f, -0.011906f, 0.005358f, 0.028936f, 0.001083f, 0.020781f, -0.005837f, 0.007970f, 0.018051f, -0.013723f, 0.001991f, 0.030409f, 0.028067f, 0.022120f, 0.008338f, 0.018937f, 0.003631f, 0.016547f, 0.006288f, 0.004712f, -0.010245f, -0.012881f, -0.017358f, -0.035530f, 0.011545f, -0.000011f, -0.009179f, -0.003786f, 0.012494f, -0.008407f, -0.000864f, 0.000943f, 0.007168f, -0.031534f, -0.004697f, 0.022145f, 0.017712f, -0.006708f, 0.011811f, 0.009381f, 0.006684f, -0.004238f, -0.006911f, -0.003563f, -0.004547f, -0.003571f, -0.011176f, -0.010182f, 0.008279f, -0.019797f, 0.006729f, 0.015490f, -0.004401f, -0.011753f, -0.017360f, 0.016181f, -0.000195f, -0.008772f, -0.005142f, -0.004213f, -0.005719f, 0.003113f, + -0.002433f, -0.006535f, 0.006699f, 0.025457f, -0.012455f, -0.008103f, 0.003814f, -0.005343f, 0.006585f, -0.000071f, 0.014120f, 0.002268f, 0.001338f, -0.022151f, -0.006566f, -0.026693f, -0.006182f, -0.026686f, 0.012629f, -0.025424f, 0.013480f, -0.004209f, -0.015213f, -0.004265f, -0.007316f, 0.031631f, 0.004506f, -0.022669f, 0.000064f, -0.014739f, -0.012168f, 0.015667f, -0.017861f, -0.015965f, -0.018636f, 0.027574f, -0.004108f, 0.018254f, -0.028306f, -0.014706f, 0.010650f, -0.012844f, 0.010126f, 0.030468f, 0.019456f, 0.018898f, 0.002737f, -0.003095f, -0.015213f, -0.020819f, -0.001624f, 0.004765f, -0.019916f, 0.000526f, -0.011964f, 0.005707f, 0.008021f, -0.022108f, -0.019413f, -0.034701f, -0.006016f, 0.002469f, -0.015547f, -0.021441f, 0.020586f, 0.001149f, 0.021144f, 0.021426f, -0.003270f, -0.002958f, -0.009339f, 0.012386f, 0.009995f, 0.001608f, 0.004579f, -0.001670f, -0.001804f, 0.010519f, -0.003474f, -0.012075f, -0.010109f, -0.015176f, -0.013635f, -0.004464f, -0.001304f, -0.001557f, -0.020080f, -0.039093f, -0.005854f, 0.002591f, -0.002798f, -0.000744f, 0.011100f, -0.009304f, 0.009937f, 0.007901f, + -0.005354f, 0.010973f, -0.015745f, 0.019725f, 0.014797f, -0.000183f, -0.014474f, 0.000312f, 0.010697f, -0.045706f, 0.009924f, 0.017313f, -0.031446f, 0.012227f, -0.015808f, -0.024519f, -0.020844f, 0.009875f, -0.004772f, -0.034477f, 0.018546f, 0.008544f, -0.019677f, -0.034925f, 0.007400f, 0.002861f, -0.010107f, -0.003620f, -0.016850f, 0.015147f, 0.014018f, 0.022546f, -0.018519f, 0.001829f, -0.024775f, -0.010873f, 0.004851f, -0.017525f, 0.007204f, -0.003411f, -0.012220f, -0.020534f, -0.020162f, 0.028646f, -0.019882f, -0.011190f, -0.007215f, -0.000380f, 0.014280f, 0.006495f, 0.010520f, -0.001703f, 0.012228f, -0.005884f, 0.002283f, -0.007034f, -0.012122f, 0.000320f, 0.027142f, 0.001851f, 0.000966f, -0.002602f, -0.016925f, 0.008460f, 0.018289f, 0.015625f, -0.026039f, -0.012934f, -0.027466f, 0.008239f, -0.005366f, 0.011254f, -0.007918f, 0.005640f, 0.008201f, -0.008413f, -0.015945f, 0.023481f, -0.006610f, -0.009626f, 0.025999f, -0.004895f, -0.006807f, 0.030988f, -0.018201f, 0.005056f, 0.006831f, 0.002951f, -0.027429f, 0.000670f, -0.004531f, -0.015536f, 0.008592f, -0.012080f, 0.016432f, -0.002421f, + 0.018358f, -0.020195f, 0.012285f, -0.036205f, -0.000230f, -0.019486f, 0.021761f, -0.002862f, 0.002417f, -0.003265f, -0.021068f, -0.000886f, 0.017137f, 0.047554f, 0.002807f, 0.003558f, 0.009315f, 0.016659f, -0.003390f, -0.003905f, 0.000798f, -0.000180f, 0.040620f, -0.003109f, 0.005685f, 0.017226f, -0.016770f, -0.026851f, -0.000591f, -0.028399f, -0.004244f, -0.014234f, -0.011375f, -0.005117f, -0.012932f, 0.007654f, 0.009595f, -0.016141f, 0.020769f, 0.018611f, -0.003081f, -0.003444f, -0.017888f, 0.013329f, 0.004146f, 0.044256f, 0.048210f, 0.000359f, -0.014792f, -0.011865f, 0.040392f, -0.026530f, -0.030252f, 0.031509f, -0.028569f, 0.018427f, 0.005621f, 0.025515f, 0.023514f, 0.015908f, 0.002584f, -0.016001f, -0.013823f, 0.033133f, -0.013996f, -0.001348f, 0.008121f, 0.028260f, 0.040839f, -0.001144f, 0.027926f, -0.022702f, -0.023750f, 0.002818f, -0.008721f, 0.013302f, 0.008430f, -0.020183f, 0.002868f, 0.013112f, 0.033640f, 0.011641f, 0.013855f, 0.012837f, 0.015118f, 0.004113f, -0.001054f, 0.021560f, 0.003879f, 0.017326f, 0.027403f, 0.006026f, -0.011061f, -0.009150f, 0.024733f, 0.006850f, + 0.050578f, 0.012222f, 0.020049f, -0.020057f, -0.032135f, -0.002553f, -0.037541f, -0.023567f, -0.008392f, -0.012215f, 0.001644f, -0.001142f, 0.000540f, 0.001404f, -0.027979f, -0.022362f, -0.012091f, -0.022963f, 0.009075f, 0.010977f, -0.007069f, -0.000183f, -0.022228f, -0.001348f, 0.006548f, -0.003034f} +}; + diff --git a/lib_dec/ivas_rom_binaural_crend_head.h b/lib_dec/ivas_rom_binaural_crend_head.h new file mode 100644 index 0000000000..af012e7fa6 --- /dev/null +++ b/lib_dec/ivas_rom_binaural_crend_head.h @@ -0,0 +1,187 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/* clang-format off */ + +/*------------------------------------------------------------------------- + * Binaural rendering related ROM tables + *------------------------------------------------------------------------*/ + +/* Binaural rendering data set based on HRIRs */ +/* Tables generated by the exe at "scripts/binauralRenderer_interface/generate_cren_ivas_tables*.* */ +/* Can be replaced by your own generated HRIR or BRIRI tables */ + + + +#ifndef _IVAS_ROM_BINAURAL_CREND_HEAD_ +#define _IVAS_ROM_BINAURAL_CREND_HEAD_ + +#include +#include "cnst.h" +#include "ivas_cnst.h" + + +/********************** Sample Rate = 48000 **********************/ + +extern float CRendBin_Combined_HRIR_latency_s_48kHz; +extern int16_t CRendBin_Combined_HRIR_max_num_iterations_48kHz; +extern uint16_t CRendBin_Combined_HRIR_num_iterations_48kHz[15][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][1]; +extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz; +extern float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[15]; +extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]; +extern float CRendBin_Combined_HRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][240]; +extern float CRendBin_Combined_HRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][240]; +extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]; +extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]; + +/********************** Sample Rate = 32000 **********************/ + +extern float CRendBin_Combined_HRIR_latency_s_32kHz; +extern int16_t CRendBin_Combined_HRIR_max_num_iterations_32kHz; +extern uint16_t CRendBin_Combined_HRIR_num_iterations_32kHz[15][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][1]; +extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz; +extern float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[15]; +extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]; +extern float CRendBin_Combined_HRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][160]; +extern float CRendBin_Combined_HRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][160]; +extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]; +extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]; + +/********************** Sample Rate = 16000 **********************/ + +extern float CRendBin_Combined_HRIR_latency_s_16kHz; +extern int16_t CRendBin_Combined_HRIR_max_num_iterations_16kHz; +extern uint16_t CRendBin_Combined_HRIR_num_iterations_16kHz[15][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][1]; +extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz; +extern float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[15]; +extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]; +extern float CRendBin_Combined_HRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][80]; +extern float CRendBin_Combined_HRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][80]; +extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]; +extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]; + +/********************** Sample Rate = 48000 **********************/ + +extern float CRendBin_HOA3_HRIR_latency_s_48kHz; +extern int16_t CRendBin_HOA3_HRIR_max_num_iterations_48kHz; +extern uint16_t CRendBin_HOA3_HRIR_num_iterations_48kHz[16][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[16][BINAURAL_CHANNELS][2]; +extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz; +extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[16]; +extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]; +extern float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][BINAURAL_CHANNELS][480]; +extern float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][BINAURAL_CHANNELS][480]; +extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]; +extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]; + +/********************** Sample Rate = 32000 **********************/ + +extern float CRendBin_HOA3_HRIR_latency_s_32kHz; +extern int16_t CRendBin_HOA3_HRIR_max_num_iterations_32kHz; +extern uint16_t CRendBin_HOA3_HRIR_num_iterations_32kHz[16][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[16][BINAURAL_CHANNELS][2]; +extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz; +extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[16]; +extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]; +extern float CRendBin_HOA3_HRIR_coeff_re_32kHz[16][BINAURAL_CHANNELS][320]; +extern float CRendBin_HOA3_HRIR_coeff_im_32kHz[16][BINAURAL_CHANNELS][320]; +extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]; +extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]; + +/********************** Sample Rate = 16000 **********************/ + +extern float CRendBin_HOA3_HRIR_latency_s_16kHz; +extern int16_t CRendBin_HOA3_HRIR_max_num_iterations_16kHz; +extern uint16_t CRendBin_HOA3_HRIR_num_iterations_16kHz[16][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[16][BINAURAL_CHANNELS][2]; +extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz; +extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[16]; +extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]; +extern float CRendBin_HOA3_HRIR_coeff_re_16kHz[16][BINAURAL_CHANNELS][160]; +extern float CRendBin_HOA3_HRIR_coeff_im_16kHz[16][BINAURAL_CHANNELS][160]; +extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]; +extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]; + +/********************** Sample Rate = 48000 **********************/ + +extern float CRendBin_Combined_BRIR_latency_s_48kHz; +extern int16_t CRendBin_Combined_BRIR_max_num_iterations_48kHz; +extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][22]; +extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz; +extern float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]; +extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40]; +extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955]; +extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][2955]; +extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS][2885]; +extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS][2885]; + +/********************** Sample Rate = 32000 **********************/ + +extern float CRendBin_Combined_BRIR_latency_s_32kHz; +extern int16_t CRendBin_Combined_BRIR_max_num_iterations_32kHz; +extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][22]; +extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz; +extern float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]; +extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40]; +extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819]; +extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][2819]; +extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS][2870]; +extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS][2870]; + +/********************** Sample Rate = 16000 **********************/ + +extern float CRendBin_Combined_BRIR_latency_s_16kHz; +extern int16_t CRendBin_Combined_BRIR_max_num_iterations_16kHz; +extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; +extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][23]; +extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz; +extern float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]; +extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40]; +extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774]; +extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][1774]; +extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][2522]; +extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2522]; +#endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */ diff --git a/lib_dec/ivas_rom_dec.c b/lib_dec/ivas_rom_dec.c new file mode 100644 index 0000000000..84a0db9765 --- /dev/null +++ b/lib_dec/ivas_rom_dec.c @@ -0,0 +1,1148 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include +#include "wmops.h" +#include "ivas_stat_dec.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * DFT stereo ROM tables + *----------------------------------------------------------------------------------*/ + +const float dft_alpha_s[STEREO_DFT_BAND_MAX] = +{ + .7f, .4f, .25f, .2f, .15f, .1f, .1f, .1f, .1f, .1f, .1f, .1f, .1f +}; + +const float dft_alpha_w[STEREO_DFT_BAND_MAX] = +{ + .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f +}; + +const float dft_alpha_s2[STEREO_DFT_BAND_MAX] = +{ + .7f, .6f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f +}; + +const float dft_alpha_s_b2[STEREO_DFT_BAND_MAX] = +{ + .7f, .3f, .15f, .1f, .1f, .1f, .1f +}; + +const float dft_alpha_w_b2[STEREO_DFT_BAND_MAX] = +{ + .3f, .3f, .3f, .3f, .3f, .3f, .3f +}; + +const float dft_alpha_s2_b2[STEREO_DFT_BAND_MAX] = +{ + .7f, .3f, .3f, .3f, .3f, .3f, .3f +}; + +/* HP filter for DFT of 50Hz resolution */ +const float dft_bpf_weights[] = +{ + 1.000040f, 0.994684f, 0.978763f, 0.952708f, 0.917218f, 0.873235f, 0.821906f, 0.764540f, + 0.702561f, 0.637451f, 0.570704f, 0.503772f, 0.438018f, 0.374674f, 0.314811f, 0.259307f, + 0.208838f, 0.163865f, 0.124639f, 0.091211f, 0.063451f, 0.041069f, 0.023648f, 0.010670f, + 0.001553f, 0.004319f, 0.007570f, 0.008799f, 0.008564f, 0.007361f, 0.005613f, 0.003664f, + 0.001777f, 0.000138f, 0.001142f, 0.002011f, 0.002472f, 0.002565f, 0.002356f, 0.001929f +}; + +const float dft_ap_gains[5][3] = +{ + { 0.5f, -0.2f, 0.5f}, + {-0.4f, 0.2f, -0.5f}, + { 0.4f, -0.3f, 0.5f}, + {-0.4f, 0.3f, -0.5f}, + { 0.3f, -0.3f, 0.5f} +}; + +const int16_t dft_ap_delays[3][3] = +{ + { 2, 47, 61}, + {29, 41, 73}, + {31, 37, 59} +}; + +const float dft_res_pred_weights[][STEREO_DFT_BAND_MAX] = +{ + { 1.f, .75f, .5f, .4f, .4f }, + { 1.f, 1.f, 1.f, 1.f, 0.f }, + { 1.f, .5f, .4f, .4f } +}; + + +const float dft_win232ms_8k[75] = +{ + 0.0104718f, 0.0314108f, 0.0523360f, 0.0732382f, 0.0941083f, 0.1149372f, 0.1357156f, 0.1564345f, 0.1770847f, 0.1976573f, 0.2181432f, 0.2385335f, 0.2588190f, 0.2789911f, + 0.2990408f, 0.3189593f, 0.3387379f, 0.3583679f, 0.3778408f, 0.3971479f, 0.4162808f, 0.4352311f, 0.4539905f, 0.4725508f, 0.4909038f, 0.5090414f, 0.5269558f, 0.5446390f, + 0.5620834f, 0.5792812f, 0.5962249f, 0.6129071f, 0.6293204f, 0.6454577f, 0.6613119f, 0.6768760f, 0.6921432f, 0.7071068f, 0.7217602f, 0.7360971f, 0.7501111f, 0.7637960f, + 0.7771460f, 0.7901550f, 0.8028175f, 0.8151278f, 0.8270806f, 0.8386706f, 0.8498927f, 0.8607420f, 0.8712138f, 0.8813035f, 0.8910065f, 0.9003188f, 0.9092361f, 0.9177546f, + 0.9258706f, 0.9335804f, 0.9408808f, 0.9477684f, 0.9542403f, 0.9602937f, 0.9659258f, 0.9711343f, 0.9759168f, 0.9802712f, 0.9841956f, 0.9876883f, 0.9907478f, 0.9933728f, + 0.9955620f, 0.9973145f, 0.9986295f, 0.9995066f, 0.9999452f +}; + +const float dft_win232ms_12k8[120] = +{ + 0.0065449f, 0.0196337f, 0.0327191f, 0.0457989f, 0.0588708f, 0.0719327f, 0.0849822f, 0.0980171f, 0.1110353f, 0.1240345f, 0.1370123f, 0.1499668f, 0.1628955f, 0.1757963f, + 0.1886670f, 0.2015053f, 0.2143092f, 0.2270763f, 0.2398045f, 0.2524916f, 0.2651354f, 0.2777338f, 0.2902847f, 0.3027858f, 0.3152350f, 0.3276302f, 0.3399692f, 0.3522500f, + 0.3644705f, 0.3766285f, 0.3887220f, 0.4007488f, 0.4127070f, 0.4245945f, 0.4364092f, 0.4481492f, 0.4598124f, 0.4713967f, 0.4829003f, 0.4943212f, 0.5056574f, 0.5169069f, + 0.5280679f, 0.5391383f, 0.5501164f, 0.5610003f, 0.5717880f, 0.5824777f, 0.5930676f, 0.6035559f, 0.6139408f, 0.6242205f, 0.6343933f, 0.6444573f, 0.6544109f, 0.6642524f, + 0.6739801f, 0.6835923f, 0.6930874f, 0.7024637f, 0.7117196f, 0.7208536f, 0.7298641f, 0.7387495f, 0.7475083f, 0.7561391f, 0.7646403f, 0.7730105f, 0.7812482f, 0.7893520f, + 0.7973207f, 0.8051526f, 0.8128467f, 0.8204014f, 0.8278156f, 0.8350880f, 0.8422172f, 0.8492022f, 0.8560416f, 0.8627344f, 0.8692793f, 0.8756753f, 0.8819213f, 0.8880161f, + 0.8939588f, 0.8997483f, 0.9053836f, 0.9108638f, 0.9161880f, 0.9213551f, 0.9263644f, 0.9312149f, 0.9359059f, 0.9404366f, 0.9448060f, 0.9490136f, 0.9530586f, 0.9569403f, + 0.9606581f, 0.9642112f, 0.9675991f, 0.9708212f, 0.9738770f, 0.9767659f, 0.9794874f, 0.9820411f, 0.9844266f, 0.9866433f, 0.9886910f, 0.9905693f, 0.9922779f, 0.9938165f, + 0.9951847f, 0.9963825f, 0.9974095f, 0.9982656f, 0.9989507f, 0.9994646f, 0.9998072f, 0.9999786f +}; + +const float dft_win232ms_16k[150] = +{ + 0.0052360f, 0.0157073f, 0.0261769f, 0.0366437f, 0.0471065f, 0.0575640f, 0.0680153f, 0.0784591f, 0.0888943f, 0.0993197f, 0.1097343f, 0.1201368f, 0.1305262f, 0.1409012f, + 0.1512608f, 0.1616038f, 0.1719291f, 0.1822355f, 0.1925220f, 0.2027873f, 0.2130304f, 0.2232501f, 0.2334454f, 0.2436150f, 0.2537579f, 0.2638730f, 0.2739592f, 0.2840153f, + 0.2940403f, 0.3040331f, 0.3139925f, 0.3239174f, 0.3338069f, 0.3436597f, 0.3534748f, 0.3632512f, 0.3729878f, 0.3826834f, 0.3923371f, 0.4019478f, 0.4115144f, 0.4210358f, + 0.4305111f, 0.4399392f, 0.4493190f, 0.4586496f, 0.4679298f, 0.4771588f, 0.4863354f, 0.4954587f, 0.5045276f, 0.5135413f, 0.5224986f, 0.5313986f, 0.5402403f, 0.5490228f, + 0.5577451f, 0.5664062f, 0.5750053f, 0.5835412f, 0.5920132f, 0.6004202f, 0.6087614f, 0.6170359f, 0.6252427f, 0.6333809f, 0.6414496f, 0.6494480f, 0.6573752f, 0.6652304f, + 0.6730125f, 0.6807209f, 0.6883546f, 0.6959128f, 0.7033947f, 0.7107995f, 0.7181263f, 0.7253744f, 0.7325429f, 0.7396311f, 0.7466382f, 0.7535634f, 0.7604060f, 0.7671652f, + 0.7738402f, 0.7804304f, 0.7869350f, 0.7933533f, 0.7996847f, 0.8059283f, 0.8120835f, 0.8181497f, 0.8241262f, 0.8300123f, 0.8358074f, 0.8415108f, 0.8471219f, 0.8526402f, + 0.8580649f, 0.8633956f, 0.8686315f, 0.8737722f, 0.8788171f, 0.8837656f, 0.8886172f, 0.8933714f, 0.8980276f, 0.9025853f, 0.9070440f, 0.9114033f, 0.9156626f, 0.9198215f, + 0.9238795f, 0.9278363f, 0.9316912f, 0.9354440f, 0.9390943f, 0.9426415f, 0.9460854f, 0.9494255f, 0.9526615f, 0.9557930f, 0.9588197f, 0.9617413f, 0.9645574f, 0.9672678f, + 0.9698720f, 0.9723699f, 0.9747612f, 0.9770456f, 0.9792228f, 0.9812927f, 0.9832549f, 0.9851093f, 0.9868557f, 0.9884939f, 0.9900237f, 0.9914449f, 0.9927573f, 0.9939610f, + 0.9950556f, 0.9960411f, 0.9969173f, 0.9976843f, 0.9983418f, 0.9988899f, 0.9993284f, 0.9996573f, 0.9998766f, 0.9999863f +}; + +const float dft_win232ms_32k[300] = +{ + 0.0026180f, 0.0078539f, 0.0130896f, 0.0183249f, 0.0235598f, 0.0287940f, 0.0340274f, 0.0392598f, 0.0444912f, 0.0497214f, 0.0549502f, 0.0601775f, 0.0654031f, 0.0706270f, + 0.0758489f, 0.0810687f, 0.0862864f, 0.0915016f, 0.0967144f, 0.1019245f, 0.1071318f, 0.1123361f, 0.1175374f, 0.1227355f, 0.1279302f, 0.1331213f, 0.1383089f, 0.1434926f, + 0.1486724f, 0.1538482f, 0.1590197f, 0.1641868f, 0.1693495f, 0.1745075f, 0.1796607f, 0.1848091f, 0.1899523f, 0.1950903f, 0.2002230f, 0.2053502f, 0.2104718f, 0.2155876f, + 0.2206974f, 0.2258013f, 0.2308989f, 0.2359902f, 0.2410751f, 0.2461533f, 0.2512248f, 0.2562894f, 0.2613469f, 0.2663973f, 0.2714404f, 0.2764761f, 0.2815042f, 0.2865246f, + 0.2915371f, 0.2965416f, 0.3015380f, 0.3065261f, 0.3115058f, 0.3164770f, 0.3214395f, 0.3263932f, 0.3313379f, 0.3362735f, 0.3412000f, 0.3461171f, 0.3510246f, 0.3559226f, + 0.3608108f, 0.3656891f, 0.3705574f, 0.3754156f, 0.3802634f, 0.3851008f, 0.3899277f, 0.3947439f, 0.3995492f, 0.4043436f, 0.4091269f, 0.4138990f, 0.4186597f, 0.4234090f, + 0.4281467f, 0.4328726f, 0.4375866f, 0.4422887f, 0.4469786f, 0.4516563f, 0.4563216f, 0.4609744f, 0.4656145f, 0.4702419f, 0.4748564f, 0.4794579f, 0.4840462f, 0.4886212f, + 0.4931829f, 0.4977310f, 0.5022655f, 0.5067863f, 0.5112931f, 0.5157859f, 0.5202646f, 0.5247290f, 0.5291790f, 0.5336145f, 0.5380354f, 0.5424415f, 0.5468328f, 0.5512091f, + 0.5555702f, 0.5599162f, 0.5642467f, 0.5685619f, 0.5728614f, 0.5771452f, 0.5814132f, 0.5856652f, 0.5899012f, 0.5941211f, 0.5983246f, 0.6025117f, 0.6066824f, 0.6108363f, + 0.6149736f, 0.6190939f, 0.6231974f, 0.6272837f, 0.6313528f, 0.6354046f, 0.6394390f, 0.6434559f, 0.6474551f, 0.6514366f, 0.6554002f, 0.6593458f, 0.6632734f, 0.6671828f, + 0.6710739f, 0.6749466f, 0.6788007f, 0.6826363f, 0.6864532f, 0.6902512f, 0.6940304f, 0.6977905f, 0.7015314f, 0.7052532f, 0.7089556f, 0.7126385f, 0.7163019f, 0.7199457f, + 0.7235698f, 0.7271740f, 0.7307583f, 0.7343225f, 0.7378666f, 0.7413905f, 0.7448941f, 0.7483772f, 0.7518398f, 0.7552818f, 0.7587031f, 0.7621036f, 0.7654832f, 0.7688418f, + 0.7721794f, 0.7754957f, 0.7787909f, 0.7820646f, 0.7853169f, 0.7885477f, 0.7917569f, 0.7949444f, 0.7981100f, 0.8012538f, 0.8043756f, 0.8074754f, 0.8105530f, 0.8136084f, + 0.8166416f, 0.8196523f, 0.8226405f, 0.8256062f, 0.8285493f, 0.8314696f, 0.8343672f, 0.8372418f, 0.8400936f, 0.8429222f, 0.8457278f, 0.8485102f, 0.8512693f, 0.8540051f, + 0.8567175f, 0.8594064f, 0.8620717f, 0.8647134f, 0.8673314f, 0.8699256f, 0.8724960f, 0.8750425f, 0.8775649f, 0.8800633f, 0.8825376f, 0.8849876f, 0.8874134f, 0.8898149f, + 0.8921920f, 0.8945446f, 0.8968727f, 0.8991763f, 0.9014551f, 0.9037093f, 0.9059386f, 0.9081432f, 0.9103228f, 0.9124775f, 0.9146072f, 0.9167118f, 0.9187912f, 0.9208455f, + 0.9228745f, 0.9248782f, 0.9268566f, 0.9288096f, 0.9307370f, 0.9326390f, 0.9345154f, 0.9363662f, 0.9381913f, 0.9399907f, 0.9417644f, 0.9435122f, 0.9452341f, 0.9469301f, + 0.9486002f, 0.9502443f, 0.9518623f, 0.9534542f, 0.9550199f, 0.9565595f, 0.9580729f, 0.9595600f, 0.9610208f, 0.9624552f, 0.9638633f, 0.9652449f, 0.9666001f, 0.9679288f, + 0.9692309f, 0.9705065f, 0.9717554f, 0.9729777f, 0.9741734f, 0.9753423f, 0.9764845f, 0.9775999f, 0.9786886f, 0.9797504f, 0.9807853f, 0.9817933f, 0.9827744f, 0.9837286f, + 0.9846558f, 0.9855561f, 0.9864293f, 0.9872754f, 0.9880945f, 0.9888865f, 0.9896514f, 0.9903891f, 0.9910997f, 0.9917832f, 0.9924394f, 0.9930685f, 0.9936703f, 0.9942448f, + 0.9947921f, 0.9953122f, 0.9958049f, 0.9962704f, 0.9967085f, 0.9971193f, 0.9975028f, 0.9978589f, 0.9981877f, 0.9984891f, 0.9987631f, 0.9990098f, 0.9992290f, 0.9994209f, + 0.9995854f, 0.9997224f, 0.9998321f, 0.9999143f, 0.9999692f, 0.9999966f +}; + +const float dft_win232ms_48k[450] = +{ + 0.0017453f, 0.0052360f, 0.0087265f, 0.0122170f, 0.0157073f, 0.0191974f, 0.0226873f, 0.0261769f, 0.0296662f, 0.0331552f, 0.0366437f, 0.0401318f, 0.0436194f, 0.0471065f, + 0.0505929f, 0.0540788f, 0.0575640f, 0.0610485f, 0.0645323f, 0.0680153f, 0.0714974f, 0.0749787f, 0.0784591f, 0.0819385f, 0.0854169f, 0.0888943f, 0.0923706f, 0.0958458f, + 0.0993197f, 0.1027925f, 0.1062641f, 0.1097343f, 0.1132032f, 0.1166707f, 0.1201368f, 0.1236015f, 0.1270646f, 0.1305262f, 0.1339862f, 0.1374445f, 0.1409012f, 0.1443562f, + 0.1478094f, 0.1512608f, 0.1547104f, 0.1581581f, 0.1616038f, 0.1650476f, 0.1684894f, 0.1719291f, 0.1753667f, 0.1788022f, 0.1822355f, 0.1856666f, 0.1890954f, 0.1925220f, + 0.1959461f, 0.1993679f, 0.2027873f, 0.2062042f, 0.2096186f, 0.2130304f, 0.2164396f, 0.2198462f, 0.2232501f, 0.2266513f, 0.2300497f, 0.2334454f, 0.2368381f, 0.2402280f, + 0.2436150f, 0.2469990f, 0.2503800f, 0.2537579f, 0.2571328f, 0.2605045f, 0.2638730f, 0.2672384f, 0.2706004f, 0.2739592f, 0.2773147f, 0.2806667f, 0.2840153f, 0.2873605f, + 0.2907022f, 0.2940403f, 0.2973749f, 0.3007058f, 0.3040331f, 0.3073566f, 0.3106764f, 0.3139925f, 0.3173047f, 0.3206130f, 0.3239174f, 0.3272179f, 0.3305144f, 0.3338069f, + 0.3370953f, 0.3403796f, 0.3436597f, 0.3469357f, 0.3502074f, 0.3534748f, 0.3567380f, 0.3599968f, 0.3632512f, 0.3665012f, 0.3697468f, 0.3729878f, 0.3762243f, 0.3794562f, + 0.3826834f, 0.3859060f, 0.3891240f, 0.3923371f, 0.3955455f, 0.3987491f, 0.4019478f, 0.4051416f, 0.4083305f, 0.4115144f, 0.4146932f, 0.4178671f, 0.4210358f, 0.4241994f, + 0.4273579f, 0.4305111f, 0.4336591f, 0.4368018f, 0.4399392f, 0.4430712f, 0.4461978f, 0.4493190f, 0.4524347f, 0.4555449f, 0.4586496f, 0.4617486f, 0.4648420f, 0.4679298f, + 0.4710119f, 0.4740882f, 0.4771588f, 0.4802235f, 0.4832824f, 0.4863354f, 0.4893825f, 0.4924236f, 0.4954587f, 0.4984877f, 0.5015107f, 0.5045276f, 0.5075384f, 0.5105429f, + 0.5135413f, 0.5165333f, 0.5195191f, 0.5224986f, 0.5254717f, 0.5284383f, 0.5313986f, 0.5343523f, 0.5372996f, 0.5402403f, 0.5431744f, 0.5461020f, 0.5490228f, 0.5519370f, + 0.5548444f, 0.5577451f, 0.5606390f, 0.5635260f, 0.5664062f, 0.5692795f, 0.5721459f, 0.5750053f, 0.5778576f, 0.5807030f, 0.5835412f, 0.5863724f, 0.5891964f, 0.5920132f, + 0.5948228f, 0.5976251f, 0.6004202f, 0.6032080f, 0.6059884f, 0.6087614f, 0.6115270f, 0.6142852f, 0.6170359f, 0.6197790f, 0.6225146f, 0.6252427f, 0.6279631f, 0.6306758f, + 0.6333809f, 0.6360782f, 0.6387678f, 0.6414496f, 0.6441236f, 0.6467898f, 0.6494480f, 0.6520984f, 0.6547408f, 0.6573752f, 0.6600017f, 0.6626200f, 0.6652304f, 0.6678326f, + 0.6704266f, 0.6730125f, 0.6755902f, 0.6781597f, 0.6807209f, 0.6832738f, 0.6858184f, 0.6883546f, 0.6908824f, 0.6934018f, 0.6959128f, 0.6984153f, 0.7009093f, 0.7033947f, + 0.7058716f, 0.7083398f, 0.7107995f, 0.7132504f, 0.7156927f, 0.7181263f, 0.7205511f, 0.7229671f, 0.7253744f, 0.7277728f, 0.7301623f, 0.7325429f, 0.7349146f, 0.7372773f, + 0.7396311f, 0.7419758f, 0.7443115f, 0.7466382f, 0.7489557f, 0.7512641f, 0.7535634f, 0.7558535f, 0.7581343f, 0.7604060f, 0.7626683f, 0.7649214f, 0.7671652f, 0.7693996f, + 0.7716246f, 0.7738402f, 0.7760464f, 0.7782431f, 0.7804304f, 0.7826082f, 0.7847764f, 0.7869350f, 0.7890841f, 0.7912235f, 0.7933533f, 0.7954735f, 0.7975839f, 0.7996847f, + 0.8017756f, 0.8038569f, 0.8059283f, 0.8079899f, 0.8100416f, 0.8120835f, 0.8141155f, 0.8161376f, 0.8181497f, 0.8201519f, 0.8221440f, 0.8241262f, 0.8260983f, 0.8280603f, + 0.8300123f, 0.8319541f, 0.8338858f, 0.8358074f, 0.8377187f, 0.8396199f, 0.8415108f, 0.8433914f, 0.8452618f, 0.8471219f, 0.8489717f, 0.8508111f, 0.8526402f, 0.8544588f, + 0.8562671f, 0.8580649f, 0.8598523f, 0.8616292f, 0.8633956f, 0.8651514f, 0.8668967f, 0.8686315f, 0.8703557f, 0.8720693f, 0.8737722f, 0.8754645f, 0.8771462f, 0.8788171f, + 0.8804774f, 0.8821269f, 0.8837656f, 0.8853936f, 0.8870108f, 0.8886172f, 0.8902128f, 0.8917975f, 0.8933714f, 0.8949344f, 0.8964864f, 0.8980276f, 0.8995578f, 0.9010770f, + 0.9025853f, 0.9040825f, 0.9055688f, 0.9070440f, 0.9085082f, 0.9099613f, 0.9114033f, 0.9128342f, 0.9142540f, 0.9156626f, 0.9170601f, 0.9184464f, 0.9198215f, 0.9211854f, + 0.9225381f, 0.9238795f, 0.9252097f, 0.9265286f, 0.9278363f, 0.9291326f, 0.9304176f, 0.9316912f, 0.9329535f, 0.9342045f, 0.9354440f, 0.9366722f, 0.9378889f, 0.9390943f, + 0.9402881f, 0.9414705f, 0.9426415f, 0.9438010f, 0.9449489f, 0.9460854f, 0.9472103f, 0.9483237f, 0.9494255f, 0.9505157f, 0.9515944f, 0.9526615f, 0.9537170f, 0.9547608f, + 0.9557930f, 0.9568136f, 0.9578225f, 0.9588197f, 0.9598053f, 0.9607792f, 0.9617413f, 0.9626917f, 0.9636305f, 0.9645574f, 0.9654726f, 0.9663761f, 0.9672678f, 0.9681476f, + 0.9690157f, 0.9698720f, 0.9707165f, 0.9715491f, 0.9723699f, 0.9731789f, 0.9739760f, 0.9747612f, 0.9755345f, 0.9762960f, 0.9770456f, 0.9777832f, 0.9785090f, 0.9792228f, + 0.9799247f, 0.9806147f, 0.9812927f, 0.9819587f, 0.9826128f, 0.9832549f, 0.9838850f, 0.9845032f, 0.9851093f, 0.9857035f, 0.9862856f, 0.9868557f, 0.9874138f, 0.9879599f, + 0.9884939f, 0.9890159f, 0.9895258f, 0.9900237f, 0.9905095f, 0.9909832f, 0.9914449f, 0.9918944f, 0.9923319f, 0.9927573f, 0.9931706f, 0.9935719f, 0.9939610f, 0.9943379f, + 0.9947028f, 0.9950556f, 0.9953962f, 0.9957247f, 0.9960411f, 0.9963453f, 0.9966374f, 0.9969173f, 0.9971851f, 0.9974408f, 0.9976843f, 0.9979156f, 0.9981348f, 0.9983418f, + 0.9985367f, 0.9987194f, 0.9988899f, 0.9990482f, 0.9991944f, 0.9993284f, 0.9994502f, 0.9995599f, 0.9996573f, 0.9997426f, 0.9998157f, 0.9998766f, 0.9999254f, 0.9999619f, + 0.9999863f, 0.9999985f +}; + +const float dft_win_8k[70] = +{ + 0.0112197f, 0.0336536f, 0.0560704f, 0.0784591f, 0.1008082f, 0.1231066f, 0.1453430f, 0.1675062f, 0.1895851f, 0.2115685f, 0.2334454f, 0.2552047f, 0.2768355f, 0.2983269f, + 0.3196681f, 0.3408484f, 0.3618570f, 0.3826834f, 0.4033172f, 0.4237478f, 0.4439651f, 0.4639588f, 0.4837189f, 0.5032354f, 0.5224986f, 0.5414986f, 0.5602260f, 0.5786713f, + 0.5968252f, 0.6146786f, 0.6322225f, 0.6494480f, 0.6663466f, 0.6829096f, 0.6991287f, 0.7149958f, 0.7305029f, 0.7456422f, 0.7604060f, 0.7747869f, 0.7887777f, 0.8023713f, + 0.8155609f, 0.8283398f, 0.8407016f, 0.8526402f, 0.8641494f, 0.8752234f, 0.8858568f, 0.8960441f, 0.9057802f, 0.9150603f, 0.9238795f, 0.9322336f, 0.9401183f, 0.9475296f, + 0.9544637f, 0.9609173f, 0.9668870f, 0.9723699f, 0.9773632f, 0.9818643f, 0.9858710f, 0.9893813f, 0.9923935f, 0.9949059f, 0.9969173f, 0.9984268f, 0.9994336f, 0.9999371f +}; + + +/*------------------------------------------------------------------------- + * stereo CNA tables + *------------------------------------------------------------------------*/ + +const int16_t cna_init_bands[MAX_CNA_NBANDS + 1] = +{ + 1, 4, 14, 33, 67, 171, 320 +}; + +const float max_smooth_gains[SBA_DIRAC_STEREO_NUM_BANDS] = +{ + 0.98f, 0.97f, 0.95f, 0.9f, 0.9f +}; + + +/*------------------------------------------------------------------------- + * ECLVQ Stereo ROM tables + *------------------------------------------------------------------------*/ + + /* all the "probability" tables for the actual AC are in the reversed cumulative counts table format; + for example, given the counts table [c0 | c1 | c2 | c3] with c0 + c1 + c2 + c3 = 2 ^ 14, the reversed cumulative + counts table is [2 ^ 14 | 2 ^ 14 - c0 | 2 ^ 14 - c0 - c1 | 2 ^ 14 - c0 - c1 - c2 | 2 ^ 14 - c0 - c1 - c2 - c3] */ +const uint16_t cum_freq_ECSQ_tab_param[ECSQ_CONFIG_COUNT][1 + ECSQ_PARAM_COUNT] = +{ + {0,1024,2048,3072,4096,5120,6144,7168,8192,9216,10240,11264,12288,13312,14336,15360,16384 }, + {0,9294,16019,16213,16311,16346,16363,16371,16375,16377,16378,16379,16380,16381,16382,16383,16384 }, + {0,4250,14782,16048,16331,16373,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384 }, + {0,9273,15897,16198,16311,16347,16364,16372,16376,16377,16378,16379,16380,16381,16382,16383,16384 }, + {0,5298,14622,15756,16305,16353,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384 }, + {0,9444,15751,16198,16310,16346,16363,16371,16375,16377,16378,16379,16380,16381,16382,16383,16384 }, + {0,5836,14448,15610,16267,16343,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384 } +}; + +const uint16_t sym_freq_ECSQ_tab_param[ECSQ_CONFIG_COUNT][ECSQ_PARAM_COUNT] = +{ + {1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024 }, + {9294,6725,194,98,35,17,8,4,2,1,1,1,1,1,1,1 }, + {4250,10532,1266,283,42,1,1,1,1,1,1,1,1,1,1,1 }, + {9273,6624,301,113,36,17,8,4,1,1,1,1,1,1,1,1 }, + {5298,9324,1134,549,48,21,1,1,1,1,1,1,1,1,1,1 }, + {9444,6307,447,112,36,17,8,4,2,1,1,1,1,1,1,1 }, + {5836,8612,1162,657,76,31,1,1,1,1,1,1,1,1,1,1 } +}; + +const uint16_t cum_freq_ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE] = +{ + {0,6445,12725,15035,15885,16198,16313,16355,16370,16376,16378,16379,16380,16381,16382,16383,16384 }, + {0,3624,8645,11690,13537,14657,15336,15748,15998,16150,16242,16298,16332,16352,16364,16372,16384 }, + {0,1925,5123,7614,9554,11065,12242,13158,13872,14428,14861,15198,15460,15664,15823,15947,16384 }, + {0,2801,5806,8146,9968,11387,12492,13353,14023,14545,14952,15269,15516,15708,15858,15974,16384 }, + {0,3219,6131,8399,10165,11541,12612,13446,14096,14602,14996,15303,15542,15728,15873,15986,16384 }, + {0,3423,6290,8523,10262,11616,12671,13493,14133,14631,15019,15321,15556,15739,15882,15993,16384 }, + {0,3524,6369,8584,10309,11653,12699,13514,14149,14643,15028,15328,15562,15744,15886,15996,16384 }, + {0,3574,6408,8615,10334,11672,12714,13526,14158,14650,15033,15332,15565,15746,15887,15997,16384 }, + {0,3599,6427,8630,10345,11681,12721,13531,14162,14653,15036,15334,15566,15747,15888,15998,16384 }, + {0,3612,6437,8637,10351,11685,12724,13533,14163,14654,15036,15334,15566,15747,15888,15998,16384 }, + {0,3618,6442,8641,10354,11688,12727,13536,14166,14657,15039,15337,15569,15749,15890,15999,16384 }, + {0,3621,6444,8643,10355,11689,12728,13537,14167,14658,15040,15338,15570,15750,15890,15999,16384 }, + {0,3623,6446,8644,10356,11689,12727,13536,14166,14657,15039,15337,15569,15749,15890,15999,16384 }, + {0,3623,6446,8644,10356,11689,12727,13536,14166,14657,15039,15337,15569,15749,15890,15999,16384 }, + {0,3623,6446,8644,10356,11689,12727,13536,14166,14657,15039,15337,15569,15749,15890,15999,16384 }, +}; + +const uint16_t sym_freq_ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][ECSQ_TAB_VALS_SIZE] = +{ + {6445,6280,2310,850,313,115,42,15,6,2,1,1,1,1,1,1 }, + {3624,5021,3045,1847,1120,679,412,250,152,92,56,34,20,12,8,12 }, + {1925,3198,2491,1940,1511,1177,916,714,556,433,337,262,204,159,124,437 }, + {2801,3005,2340,1822,1419,1105,861,670,522,407,317,247,192,150,116,410 }, + {3219,2912,2268,1766,1376,1071,834,650,506,394,307,239,186,145,113,398 }, + {3423,2867,2233,1739,1354,1055,822,640,498,388,302,235,183,143,111,391 }, + {3524,2845,2215,1725,1344,1046,815,635,494,385,300,234,182,142,110,388 }, + {3574,2834,2207,1719,1338,1042,812,632,492,383,299,233,181,141,110,387 }, + {3599,2828,2203,1715,1336,1040,810,631,491,383,298,232,181,141,110,386 }, + {3612,2825,2200,1714,1334,1039,809,630,491,382,298,232,181,141,110,386 }, + {3618,2824,2199,1713,1334,1039,809,630,491,382,298,232,180,141,109,385 }, + {3621,2823,2199,1712,1334,1039,809,630,491,382,298,232,180,140,109,385 }, + {3623,2823,2198,1712,1333,1038,809,630,491,382,298,232,180,141,109,385 }, + {3623,2823,2198,1712,1333,1038,809,630,491,382,298,232,180,141,109,385 }, + {3623,2823,2198,1712,1333,1038,809,630,491,382,298,232,180,141,109,385 }, +}; + +const uint16_t cum_freq_ECSQ_tab_abs_1bit[1 + 2] = +{ + 0, 5462, 16384 +}; + +/* table for uniform coding of absolute values in {0, +-1, +-2, +-3} */ +const uint16_t cum_freq_ECSQ_tab_abs_2bit[1 + 4] = +{ + 0, 2338, 7020, 11702, 16384 +}; + +/* table for uniform coding of absolute values in {0, +-1, ..., +-7} */ +const uint16_t cum_freq_ECSQ_tab_abs_3bit[1 + 8] = +{ + 0, 1096, 3280, 5464, 7648, 9832, 12016, 14200, 16384 +}; + +/* table for uniform coding of absolute values in {0, +-1, ..., +-15} */ +const uint16_t cum_freq_ECSQ_tab_abs_4bit[1 + 16] = +{ + 0, 514, 1572, 2630, 3688, 4746, 5804, 6862, 7920, 8978, 10036, 11094, 12152, 13210, 14268, 15326, 16384 +}; + +const uint16_t sym_freq_ECSQ_tab_abs_1bit[2] = +{ + 5462, 10922 +}; + +/* table for uniform coding of absolute values in {0, +-1, +-2, +-3} */ +const uint16_t sym_freq_ECSQ_tab_abs_2bit[4] = +{ + 2338, 4682, 4682, 4682 +}; + +/* table for uniform coding of absolute values in {0, +-1, ..., +-7} */ +const uint16_t sym_freq_ECSQ_tab_abs_3bit[8] = +{ + 1096, 2184, 2184, 2184, 2184, 2184, 2184, 2184 +}; + +/* table for uniform coding of absolute values in {0, +-1, ..., +-15} */ +const uint16_t sym_freq_ECSQ_tab_abs_4bit[16] = +{ + 514, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058 +}; + +/* array of tables for uniform coding of absolute values */ +const uint16_t * const cum_freq_ECSQ_tab_abs_lsbs[1 + 4] = +{ + NULL, cum_freq_ECSQ_tab_abs_1bit, cum_freq_ECSQ_tab_abs_2bit, cum_freq_ECSQ_tab_abs_3bit, cum_freq_ECSQ_tab_abs_4bit +}; + +const uint16_t * const sym_freq_ECSQ_tab_abs_lsbs[1 + 4] = +{ + NULL, sym_freq_ECSQ_tab_abs_1bit, sym_freq_ECSQ_tab_abs_2bit, sym_freq_ECSQ_tab_abs_3bit, sym_freq_ECSQ_tab_abs_4bit +}; + + +/*----------------------------------------------------------------------------------* + * DirAC ROM tables + *----------------------------------------------------------------------------------*/ + +const float ls_azimuth_4d4[8] = { 45.0f, -45.0f, 135.0f, -135.0f, 45.0f, -45.0f, 135.0f, -135.0f }; + +const float ls_elevation_4d4[8] = { 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f, 35.0f, 35.0f }; + +const float diffuse_response_CICP6[5] = { 0.4219f, 0.4219f, 0.3704f, 0.5034f, 0.5034f }; + +const float diffuse_response_CICP14[7] = { 0.3817f, 0.3817f, 0.2819f, 0.5399f, 0.5399f, 0.1519f, 0.1519f }; + +const float diffuse_response_CICP16[9] = { 0.3456f, 0.3456f, 0.3035f, 0.4124f, 0.4124f, 0.2702f, 0.2702f, 0.3023f, 0.3023f }; + + +const float dirac_dithering_azi_scale[DIRAC_DIFFUSE_LEVELS] = +{ + 6.716062e-01f, 1.011837e+00f, 1.799065e+00f, 2.824915e+00f, 4.800879e+00f, 9.206031e+00f, 1.469832e+01f, 2.566224e+01f +}; + +const float dirac_dithering_ele_scale[DIRAC_DIFFUSE_LEVELS] = +{ + 6.716062e-01f, 1.011804e+00f, 1.796875e+00f, 2.804382e+00f, 4.623130e+00f, 7.802667e+00f, 1.045446e+01f, 1.379538e+01f +}; + +const int16_t ap_pre_delay[DIRAC_DECORR_NUM_SPLIT_BANDS] = { 7, 2, 1 }; + +const int16_t ap_filter_length[DIRAC_DECORR_NUM_SPLIT_BANDS] = { 15, 6, 3 }; + +const float ap_lattice_delta_phi[DIRAC_MAX_NUM_DECORR_FILTERS*DIRAC_MAX_DECORR_FILTER_LEN] = +{ + 1.802519f, 0.922986f, 1.813685f, 1.272828f, 0.856928f, 0.366571f, 1.531249f, 1.318158f, 0.123812f, 0.897173f, 0.958696f, 1.256384f, 0.179677f, 0.668918f, 1.440292f, 1.573058f, 1.396481f, 1.191463f, 0.444143f, 1.666942f, + 1.273955f, 1.747171f, 1.408330f, 1.002782f, 1.559302f, 1.782992f, 1.474896f, 0.813181f, 1.457724f, 0.588531f, 1.384302f, 0.156493f, 0.600048f, 1.661632f, 0.538958f, 0.645429f, 0.565237f, 0.024684f, 0.264229f, 0.062140f, + 1.235343f, 0.851725f, 1.820211f, 0.116148f, 0.972111f, 0.488703f, 1.777672f, 1.452170f, 0.814134f, 1.272649f, 1.281416f, 0.101871f, 0.897888f, 0.199760f, 0.085732f, 1.686579f, 0.964558f, 0.057281f, 0.910252f, 1.662302f, + 0.955234f, 0.834348f, 1.672478f, 1.324896f, 0.444544f, 1.721172f, 0.153356f, 1.602240f, 0.171880f, 1.169774f, 0.543628f, 1.409581f, 1.763724f, 1.686754f, 1.210390f, 0.402691f, 0.983618f, 0.862997f, 1.220409f, 0.890061f, + 0.031641f, 0.461590f, 1.719550f, 1.357698f, 1.112262f, 1.166531f, 0.246097f, 1.387325f, 0.177485f, 1.446268f, 0.799476f, 1.667227f, 1.723465f, 1.505920f, 0.245874f, 1.155854f, 0.831394f, 0.677194f, 0.568871f, 1.652070f, + 0.019803f, 1.197794f, 0.635553f, 0.531682f, 0.878194f, 0.048050f, 0.080480f, 1.566743f, 0.724210f, 0.853668f, 1.741191f, 0.698465f, 1.553550f, 0.130290f, 0.688346f, 1.331091f, 0.599759f, 1.125466f, 1.764818f, 1.042879f, + 1.486589f, 1.627971f, 1.871181f, 0.102359f, 0.035021f, 1.403176f, 1.468675f, 0.190347f, 0.553282f, 1.031227f, 1.232390f, 1.255724f, 1.504443f, 0.683526f, 0.600958f, 1.746936f, 1.529243f, 1.448196f, 0.646850f, 0.116053f, + 1.283295f, 0.355220f, 1.380620f, 1.858453f, 0.818804f, 0.219006f, 0.476292f, 0.420029f, 1.291187f, 0.568738f, 1.174088f, 0.628805f, 1.753154f, 1.459582f, 1.354449f, 1.755790f, 0.441757f, 0.856240f, 1.647962f, 0.686353f, + 1.395289f, 0.699934f, 0.239310f, 0.239535f, 0.958190f, 0.748780f, 0.513784f, 1.666344f, 1.461995f, 1.599060f, 0.893107f, 0.341873f, 1.387703f, 1.808363f, 0.676542f, 1.424958f, 0.310574f, 0.836247f, 1.011101f, 1.686200f, + 1.823432f, 0.994827f, 1.635555f, 0.684380f, 1.017029f, 1.440371f, 1.694641f, 0.607132f, 1.197331f, 0.862161f, 0.666449f, 1.047956f, 0.159627f, 0.043131f, 1.251515f, 1.618724f, 0.216906f, 0.152250f, 0.471610f, 0.744260f, + 0.576810f, 1.632177f, 1.556912f, 1.866317f, 0.568088f, 1.541817f, 1.726725f, 0.275154f, 0.814958f, 0.863399f, 1.333040f, 0.148277f, 0.197893f, 1.048665f, 1.158090f, 1.692225f, 0.884294f, 0.289619f, 0.380633f, 1.728234f, + 1.433213f, 1.749505f, 1.533837f, 0.669701f, 0.372580f, 1.052390f, 1.116645f, 0.181320f, 1.139126f, 0.222671f, 0.604393f, 1.811797f, 1.743315f, 1.368792f, 1.861434f, 0.751908f, 0.159811f, 1.566503f, 0.443273f, 1.667530f, + 1.083060f, 1.243136f, 0.717777f, 0.675019f, 0.690490f, 0.672228f, 1.060789f, 0.423566f, 1.198457f, 0.485768f, 0.993953f, 0.443540f, 0.361702f, 1.552042f, 0.863562f, 1.517677f, 1.061899f, 0.691413f, 1.642818f, 1.756590f, + 0.278323f, 0.790363f, 0.172303f, 0.417138f, 0.009343f, 0.783325f, 1.369303f, 1.041067f, 0.467102f, 0.992773f, 1.525170f, 0.871213f, 0.243906f, 1.542036f, 0.449148f, 0.843633f, 0.191800f, 1.614246f, 1.038188f, 1.415620f, + 0.551081f, 0.382599f, 1.410121f, 0.102084f, 0.137286f, 0.671081f, 0.254860f, 1.758068f, 1.079013f, 0.129143f, 1.410873f, 0.150485f, 0.601119f, 0.760737f, 0.975905f, 0.223261f, 0.710162f, 1.677048f, 0.996836f, 1.849865f, + 1.536222f, 0.089016f, 0.960881f, 0.388690f, 0.379955f, 1.002223f, 1.271420f, 1.410632f, 0.254397f, 1.535559f, 1.133703f, 1.305280f, 1.466565f, 0.274167f, 0.399688f, 1.359638f, 1.766289f, 1.401348f, 1.310883f, 0.261030f, + 1.314825f, 1.538635f, 1.317986f, 1.243167f, 1.749461f, 1.689706f, 0.024853f, 0.634754f, 1.036317f, 1.828101f, 1.676951f, 0.023606f, 0.857000f, 0.076471f, 1.622198f, 0.254469f, 1.451625f, 1.720881f, 0.763812f, 0.186982f, + 0.056994f, 0.590507f, 0.375291f, 1.609261f, 0.607721f, 0.026355f, 0.483366f, 0.823931f, 0.792878f, 0.163577f, 0.753588f, 0.730789f, 0.135991f, 1.031660f, 1.554135f, 1.192863f, 0.016693f, 0.125796f, 1.017920f, 1.591773f, + 0.575956f, 0.112943f, 0.249506f, 1.399570f, 0.053241f, 1.410759f, 0.251638f, 1.059086f, 0.025315f, 1.422914f, 1.030412f, 0.848758f, 0.317396f, 1.375456f, 1.116858f, 1.682310f, 0.279550f, 0.325974f, 0.937704f, 1.744329f, + 0.447773f, 1.024286f, 1.001528f, 1.863684f, 1.278323f, 0.860699f, 1.346331f, 1.692596f, 0.022627f, 1.033613f, 0.546354f, 0.395804f, 1.486546f, 1.381045f, 1.312260f, 0.245976f, 1.607429f, 1.818793f, 0.964359f, 1.496598f, + 0.669967f, 1.535929f, 1.841878f, 0.979127f, 0.614002f, 1.879218f, 0.512531f, 1.167061f, 0.081697f, 1.773427f, 1.535668f, 0.757729f, 0.220395f, 1.538243f, 1.281162f, 0.302159f, 0.889871f, 0.798522f, 1.476288f, 1.665941f, + 0.915365f, 1.394094f, 0.757041f, 0.350064f, 1.199679f, 1.319499f, 1.128405f, 0.632337f, 0.790673f, 0.461582f, 1.693343f, 1.537442f, 0.346527f, 0.433782f, 1.754552f, 0.550903f, 0.686724f, 0.764433f, 1.792750f, 1.489998f +}; + +const float ap_lattice_coeffs_1[DIRAC_DECORR_FILTER_LEN_1*DIRAC_MAX_NUM_DECORR_FILTERS] = +{ + 0.795329f, 0.502700f, 0.204456f, 0.416566f, 0.459648f, 0.270454f, -0.201944f, 0.027997f, 0.067811f, -0.052627f, -0.038779f, -0.057387f, 0.020480f, 0.367697f, -0.593705f, + 0.533667f, 0.202500f, -0.001953f, 0.195081f, -0.184458f, -0.233867f, 0.228100f, -0.329293f, -0.338714f, -0.079700f, 0.052389f, -0.009468f, 0.178807f, 0.190843f, -0.478877f, + 0.044022f, 0.788498f, 0.133529f, -0.173657f, 0.545391f, 0.681431f, 0.332868f, 0.294685f, 0.325261f, 0.047617f, 0.157401f, 0.116272f, 0.218980f, -0.189248f, -0.317401f, + -0.753681f, 0.772385f, -0.507384f, 0.276980f, -0.692775f, 0.232302f, -0.354759f, -0.015620f, -0.223059f, 0.310506f, -0.035034f, 0.085783f, -0.499998f, 0.215260f, 0.201415f, + -0.495551f, -0.301660f, 0.196510f, 0.326147f, -0.594364f, 0.314921f, 0.668671f, 0.076643f, 0.045711f, -0.124790f, -0.203272f, -0.297190f, 0.125806f, -0.179483f, -0.201757f, + 0.161128f, 0.396050f, 0.266897f, 0.356586f, 0.488145f, -0.056254f, 0.139280f, -0.296405f, -0.112844f, 0.037405f, -0.367425f, -0.216292f, -0.277360f, 0.389420f, 0.115115f, + -0.240449f, -0.271015f, 0.426720f, -0.011059f, 0.151813f, 0.253490f, 0.225764f, 0.498716f, -0.136377f, 0.443004f, -0.305017f, -0.031310f, -0.010765f, 0.170349f, 0.496478f, + -0.139875f, -0.241998f, -0.104850f, 0.294343f, -0.067728f, -0.492202f, -0.487610f, 0.036395f, 0.109393f, 0.396155f, -0.352845f, -0.205913f, -0.082999f, -0.463033f, -0.309296f, + 0.025886f, -0.092456f, -0.125139f, -0.156117f, -0.004887f, 0.178440f, 0.089586f, 0.044827f, 0.238219f, -0.312120f, -0.390688f, -0.178543f, 0.454418f, 0.387012f, -0.388874f, + -0.197797f, 0.035540f, 0.455388f, -0.054410f, 0.380035f, 0.290964f, 0.048804f, 0.078637f, 0.221740f, -0.217548f, 0.121289f, -0.396681f, -0.218482f, -0.127265f, -0.269507f, + -0.344218f, -0.465038f, -0.421415f, -0.026031f, 0.221547f, 0.361993f, -0.348243f, 0.294983f, 0.366175f, 0.070663f, -0.086050f, 0.252129f, 0.156066f, -0.062800f, 0.408972f, + 0.242461f, -0.301764f, -0.066160f, 0.388651f, -0.462227f, -0.158880f, 0.230796f, -0.093179f, 0.047076f, 0.073402f, -0.335018f, 0.022940f, 0.354611f, 0.072391f, 0.019473f, + 0.336900f, -0.480534f, 0.170267f, 0.259663f, -0.393576f, -0.348588f, -0.108962f, 0.278842f, 0.385490f, 0.362249f, -0.318739f, 0.362305f, 0.288936f, 0.291204f, -0.278019f, + -0.449302f, -0.288513f, -0.413973f, -0.405279f, -0.295152f, -0.245110f, 0.002530f, 0.287890f, 0.348229f, -0.178354f, -0.206517f, 0.351081f, -0.482205f, 0.021360f, -0.492207f, + 0.048642f, 0.453282f, 0.109160f, 0.232599f, -0.473781f, 0.140502f, 0.352527f, -0.098606f, 0.147172f, -0.055797f, 0.107739f, -0.231026f, 0.357310f, 0.348031f, 0.232404f, + -0.324788f, 0.162480f, 0.057647f, -0.060734f, -0.009742f, -0.224185f, -0.282355f, -0.065443f, 0.064697f, 0.280370f, -0.284906f, -0.470501f, 0.019484f, -0.442308f, 0.377214f, + 0.447384f, -0.290498f, 0.345528f, 0.370207f, -0.313120f, 0.119592f, 0.300014f, 0.406995f, -0.277922f, 0.447039f, 0.194824f, 0.157703f, -0.223402f, -0.147167f, 0.379073f, + -0.216342f, 0.137967f, -0.397180f, 0.073905f, -0.273110f, -0.443037f, -0.168327f, 0.346264f, 0.037543f, 0.065387f, 0.163901f, -0.122523f, 0.365477f, -0.316321f, 0.117273f, + -0.301282f, 0.169625f, -0.336466f, 0.269914f, -0.420160f, -0.331296f, 0.498523f, -0.393009f, -0.462184f, -0.323097f, 0.470977f, -0.359463f, 0.264315f, 0.216797f, 0.493400f, + 0.151489f, -0.321653f, 0.464413f, -0.355673f, 0.420401f, 0.184297f, -0.302128f, 0.136536f, -0.252849f, 0.193906f, 0.298775f, 0.238808f, -0.386298f, -0.181999f, -0.077326f, + 0.124840f, -0.263394f, 0.389606f, 0.004502f, 0.339804f, 0.415204f, 0.377751f, 0.400221f, 0.352426f, -0.003808f, -0.184530f, 0.433348f, -0.237554f, 0.147684f, 0.407210f, + 0.067616f, -0.249313f, -0.354010f, 0.320937f, 0.426000f, 0.309576f, -0.189689f, -0.209447f, 0.158967f, -0.081929f, 0.386828f, 0.178582f, -0.407143f, 0.222189f, -0.149097f +}; + +const float ap_lattice_coeffs_2[DIRAC_DECORR_FILTER_LEN_2*DIRAC_MAX_NUM_DECORR_FILTERS] = +{ + 0.633692f, 0.681207f, -0.049418f, 0.286715f, 0.146022f, 0.135402f, + -0.410145f, -0.206766f, -0.656968f, -0.101746f, 0.436299f, 0.339818f, + -0.131383f, -0.773746f, -0.301627f, 0.327561f, 0.332227f, 0.205858f, + 0.717602f, -0.552370f, -0.150136f, 0.054556f, 0.239519f, -0.648477f, + -0.721848f, 0.189377f, 0.068185f, 0.006216f, 0.077025f, 0.038678f, + 0.423415f, -0.108658f, 0.432050f, -0.414641f, 0.277840f, 0.418486f, + 0.077811f, -0.283063f, -0.357008f, 0.004634f, -0.442640f, -0.372315f, + 0.403336f, 0.243023f, 0.314367f, 0.444513f, 0.347517f, 0.496043f, + 0.108408f, 0.469382f, -0.170286f, 0.326310f, 0.172157f, 0.440334f, + 0.058417f, 0.339673f, -0.194965f, 0.491219f, -0.281296f, -0.043120f, + -0.482487f, -0.335005f, -0.336159f, 0.196469f, -0.164623f, 0.442491f, + -0.135190f, -0.354385f, 0.452133f, -0.311221f, -0.347640f, 0.498342f, + -0.288999f, 0.376431f, -0.177924f, 0.195542f, 0.333872f, -0.152697f, + 0.053230f, 0.457767f, 0.442476f, 0.235254f, -0.345159f, -0.286098f, + 0.155438f, 0.405393f, 0.217073f, -0.107960f, 0.010698f, 0.368987f, + -0.498358f, -0.495816f, -0.215479f, -0.093869f, 0.320276f, -0.013842f, + 0.489406f, 0.470814f, -0.065834f, 0.346871f, 0.027279f, 0.150086f, + 0.484013f, -0.497391f, 0.168796f, -0.493841f, -0.173528f, 0.334676f, + 0.264235f, -0.424651f, -0.314926f, 0.253086f, 0.397381f, -0.491565f, + -0.453727f, -0.463358f, -0.019128f, 0.000344f, 0.315432f, 0.472345f, + 0.095139f, 0.283375f, -0.225088f, -0.119762f, -0.476871f, 0.037525f, + 0.336951f, 0.494511f, -0.062603f, 0.177652f, 0.463892f, 0.489286f +}; + +const float ap_lattice_coeffs_3[DIRAC_DECORR_FILTER_LEN_3*DIRAC_MAX_NUM_DECORR_FILTERS] = +{ + 0.018977f, -0.212205f, 0.422719f, + -0.400657f, -0.106890f, -0.024589f, + 0.140005f, 0.279582f, 0.032357f, + 0.632535f, 0.578535f, -0.734606f, + 0.017182f, 0.013244f, -0.027715f, + -0.353356f, -0.482160f, -0.491265f, + 0.457024f, 0.165122f, 0.469723f, + -0.195705f, 0.440105f, -0.477366f, + 0.360186f, -0.490565f, 0.484623f, + -0.173791f, 0.007543f, 0.278186f, + 0.434416f, 0.060363f, -0.193717f, + -0.033709f, 0.496222f, 0.002939f, + -0.480848f, -0.109552f, -0.023198f, + 0.324679f, -0.292075f, -0.356148f, + -0.366595f, 0.380917f, -0.301741f, + 0.110318f, 0.383789f, 0.303984f, + -0.499685f, -0.349584f, 0.334749f, + -0.020224f, -0.430078f, -0.154705f, + -0.371129f, 0.334080f, 0.346913f, + -0.166781f, -0.229089f, 0.117956f, + 0.341292f, 0.490463f, 0.493655f, + -0.367726f, 0.426528f, -0.045774f +}; + +const float * const ap_lattice_coeffs[DIRAC_DECORR_NUM_SPLIT_BANDS] = +{ + &ap_lattice_coeffs_1[0], + &ap_lattice_coeffs_2[0], + &ap_lattice_coeffs_3[0], +}; + +const float ap_split_frequencies[DIRAC_DECORR_NUM_SPLIT_BANDS + 1] = +{ + 0.0f, 0.125f, 0.375f, 1.0f +}; + +const int16_t sba_map_tc[8] = +{ + 0, 1, 2, 3, 4, 8, 9, 15 +}; + +/*----------------------------------------------------------------------------------* + * LS Renderer ROM tables + *----------------------------------------------------------------------------------*/ + + /* All matrices are stored with dimensions nchan_in x nchan_out */ + /* Downmix matrices */ +const float ls_conversion_cicpX_mono[12][1] = +{ + {1.00000000f}, + {1.00000000f}, + {0.70710677f}, + {0.70710677f}, + {0.79999995f}, + {0.79999995f}, + {0.79999995f}, + {0.79999995f}, + {0.849999964f}, + {0.849999964f}, + {0.849999964f}, + {0.849999964f} +}; + +const float ls_conversion_cicpX_stereo[12][2] = +{ + {1.00000000f, 0.00000000f}, + {0.00000000f, 1.00000000f}, + {0.70710677f, 0.70710677f}, + {0.70710677f, 0.70710677f}, + {0.79999995f, 0.00000000f}, + {0.00000000f, 0.79999995f}, + {0.79999995f, 0.00000000f}, + {0.00000000f, 0.79999995f}, + {0.849999964f, 0.000000000f}, + {0.000000000f, 0.849999964f}, + {0.849999964f, 0.000000000f}, + {0.000000000f, 0.849999964f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp6[] = +{ + /* First row indicates the number of non-zero elements */ + {8, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {7, 1.000000000f}, + {14, 1.000000000f}, + {21, 1.000000000f}, + {28, 1.000000000f}, + {35, 1.000000000f}, + {40, 1.000000000f}, + {47, 1.000000000f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp14_cicp6[] = +{ + /* First row indicates the number of non-zero elements */ + {8, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {7, 1.000000000f}, + {14, 1.000000000f}, + {21, 1.000000000f}, + {28, 1.000000000f}, + {35, 1.000000000f}, + {36, 0.849999964f}, + {43, 0.849999964f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp6[] = +{ + /* First row indicates the number of non-zero elements */ + {10, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {7, 1.000000000f}, + {14, 1.000000000f}, + {21, 1.000000000f}, + {28, 1.000000000f}, + {35, 1.000000000f}, + {36, 0.849999964f}, + {43, 0.849999964f}, + {52, 0.849999964f}, + {59, 0.849999964f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp12[] = +{ + /* First row indicates the number of non-zero elements */ + {10, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {9, 1.000000000f}, + {18, 1.000000000f}, + {27, 1.000000000f}, + {36, 1.000000000f}, + {45, 1.000000000f}, + {48, 0.849999964f}, + {57, 0.849999964f}, + {68, 0.849999964f}, + {77, 0.849999964f} + +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp14[] = +{ + /* First row indicates the number of non-zero elements */ + {10, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {11, 1.000000000f}, + {22, 1.000000000f}, + {33, 1.000000000f}, + {44, 1.000000000f}, + {48, 0.849999964f}, + {55, 1.000000000f}, + {59, 0.849999964f}, + {66, 1.000000000f}, + {77, 1.000000000f}, +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp6[] = +{ + /* First row indicates the number of non-zero elements */ + {14, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {7, 1.000000000f}, + {14, 1.000000000f}, + {21, 1.000000000f}, + {28, 1.000000000f}, + {35, 1.000000000f}, + {36, 0.367322683f}, + {40, 0.930093586f}, + {43, 0.367322683f}, + {47, 0.930093586f}, + {48, 0.849999964f}, + {55, 0.849999964f}, + {64, 0.849999964f}, + {71, 0.849999964f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp12[] = +{ + /* First row indicates the number of non-zero elements */ + {14, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {9, 1.000000000f}, + {18, 1.000000000f}, + {27, 1.000000000f}, + {38, 1.000000000f}, + {47, 1.000000000f}, + {48, 0.367322683f}, + {52, 0.930093586f}, + {57, 0.367322683f}, + {61, 0.930093586f}, + {64, 0.849999964f}, + {73, 0.849999964f}, + {84, 0.849999964f}, + {93, 0.849999964f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp14[] = +{ + /* First row indicates the number of non-zero elements */ + {14, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {9, 1.000000000f}, + {18, 1.000000000f}, + {27, 1.000000000f}, + {36, 1.000000000f}, + {45, 1.000000000f}, + {48, 0.367322683f}, + {52, 0.930093586f}, + {57, 0.367322683f}, + {61, 0.930093586f}, + {70, 1.000000000f}, + {79, 1.000000000f}, + {84, 0.849999964f}, + {93, 0.849999964f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp16[] = +{ + /* First row indicates the number of non-zero elements */ + {14, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.000000000f}, + {11, 1.000000000f}, + {22, 1.000000000f}, + {33, 1.000000000f}, + {44, 1.000000000f}, + {55, 1.000000000f}, + {60, 0.367322683f}, + {64, 0.930093586f}, + {71, 0.367322683f}, + {75, 0.930093586f}, + {86, 1.000000000f}, + {97, 1.000000000f}, + {108, 1.000000000f}, + {119, 1.000000000f} +}; + +/* Upmix matrices */ +const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp14[] = +{ + /* First row indicates the number of non-zero elements */ + {8, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.0f}, + {9, 1.0f}, + {18, 1.0f}, + {27, 1.0f}, + {36, 1.0f}, + {45, 1.0f}, + {52, 1.0f}, + {61, 1.0f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp16[] = +{ + /* First row indicates the number of non-zero elements */ + {8, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.0f}, + {11, 1.0f}, + {22, 1.0f}, + {33, 1.0f}, + {44, 1.0f}, + {55, 1.0f}, + {64, 1.0f}, + {75, 1.0f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp14_cicp19[] = +{ + /* First row indicates the number of non-zero elements */ + {8, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.0f}, + {13, 1.0f}, + {26, 1.0f}, + {39, 1.0f}, + {52, 1.0f}, + {65, 1.0f}, + {80, 1.0f}, + {93, 1.0f} +}; + +const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp19[] = +{ + /* First row indicates the number of non-zero elements */ + {10, 0.0f}, + /* Index of non-zero element, value of non-zero element*/ + {0, 1.0f}, + {13, 1.0f}, + {26, 1.0f}, + {39, 1.0f}, + {52, 1.0f}, + {65, 1.0f}, + {80, 1.0f}, + {93, 1.0f}, + {106, 1.0f}, + {119, 1.0f} +}; + +/* + * Mapping table of input config : output config with corresponding matrix + * NULL indicates a 1:1 mapping of existing input channels to output channels ( used for upmix ) + */ + +const LS_CONVERSION_MAPPING ls_conversion_mapping[LS_SETUP_CONVERSION_NUM_MAPPINGS] = +{ + /* Dowmix mappings - NULL is a special case for MONO / STEREO downmix */ + {AUDIO_CONFIG_5_1, AUDIO_CONFIG_MONO, NULL}, + {AUDIO_CONFIG_7_1, AUDIO_CONFIG_MONO, NULL}, + {AUDIO_CONFIG_5_1_2, AUDIO_CONFIG_MONO, NULL}, + {AUDIO_CONFIG_5_1_4, AUDIO_CONFIG_MONO, NULL}, + {AUDIO_CONFIG_7_1_4, AUDIO_CONFIG_MONO, NULL}, + + {AUDIO_CONFIG_5_1, AUDIO_CONFIG_STEREO, NULL}, + {AUDIO_CONFIG_7_1, AUDIO_CONFIG_STEREO, NULL}, + {AUDIO_CONFIG_5_1_2, AUDIO_CONFIG_STEREO, NULL}, + {AUDIO_CONFIG_5_1_4, AUDIO_CONFIG_STEREO, NULL}, + {AUDIO_CONFIG_7_1_4, AUDIO_CONFIG_STEREO, NULL}, + + {AUDIO_CONFIG_7_1, AUDIO_CONFIG_5_1, ls_conversion_cicp12_cicp6}, + + {AUDIO_CONFIG_5_1_2, AUDIO_CONFIG_5_1, ls_conversion_cicp14_cicp6}, + {AUDIO_CONFIG_5_1_2, AUDIO_CONFIG_7_1, ls_conversion_cicp14_cicp6}, + + {AUDIO_CONFIG_5_1_4, AUDIO_CONFIG_5_1, ls_conversion_cicp16_cicp6}, + {AUDIO_CONFIG_5_1_4, AUDIO_CONFIG_7_1, ls_conversion_cicp16_cicp12}, + {AUDIO_CONFIG_5_1_4, AUDIO_CONFIG_5_1_2, ls_conversion_cicp16_cicp14}, + + {AUDIO_CONFIG_7_1_4, AUDIO_CONFIG_5_1, ls_conversion_cicp19_cicp6}, + {AUDIO_CONFIG_7_1_4, AUDIO_CONFIG_7_1, ls_conversion_cicp19_cicp12}, + {AUDIO_CONFIG_7_1_4, AUDIO_CONFIG_5_1_2, ls_conversion_cicp19_cicp14}, + {AUDIO_CONFIG_7_1_4, AUDIO_CONFIG_5_1_4, ls_conversion_cicp19_cicp16}, + + /* Upmix mappings - NULL implies a 1:1 upmix */ + {AUDIO_CONFIG_STEREO, AUDIO_CONFIG_5_1, NULL}, + {AUDIO_CONFIG_STEREO, AUDIO_CONFIG_7_1, NULL}, + {AUDIO_CONFIG_STEREO, AUDIO_CONFIG_5_1_2, NULL}, + {AUDIO_CONFIG_STEREO, AUDIO_CONFIG_5_1_4, NULL}, + {AUDIO_CONFIG_STEREO, AUDIO_CONFIG_7_1_4, NULL}, + + {AUDIO_CONFIG_5_1, AUDIO_CONFIG_7_1, NULL}, + {AUDIO_CONFIG_5_1, AUDIO_CONFIG_5_1_2, NULL}, + {AUDIO_CONFIG_5_1, AUDIO_CONFIG_5_1_4, NULL}, + {AUDIO_CONFIG_5_1, AUDIO_CONFIG_7_1_4, NULL}, + + {AUDIO_CONFIG_7_1, AUDIO_CONFIG_5_1_2, ls_conversion_cicp12_cicp14}, + {AUDIO_CONFIG_7_1, AUDIO_CONFIG_5_1_4, ls_conversion_cicp12_cicp16}, + {AUDIO_CONFIG_7_1, AUDIO_CONFIG_7_1_4, NULL}, + + {AUDIO_CONFIG_5_1_2, AUDIO_CONFIG_5_1_4, NULL}, + {AUDIO_CONFIG_5_1_2, AUDIO_CONFIG_7_1_4, ls_conversion_cicp14_cicp19}, + + {AUDIO_CONFIG_5_1_4, AUDIO_CONFIG_7_1_4, ls_conversion_cicp16_cicp19}, +}; + + +/*----------------------------------------------------------------------------------* + * FASTCONV and PARAMETRIC binaural renderer ROM tables + *----------------------------------------------------------------------------------*/ + +const float dmxmtx[BINAURAL_CHANNELS][11] = +{ + { 1.0f, 0.0f, 0.70709997f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 1.0f, 0.70709997f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f }, +}; + +/* +* 0 = 30,0 +* 1 = -30,0 +* 2 = 0,0 +* 3 = 135,0 +* 4 = -135,0 +* 5 = 110,0 +* 6 = -110,0 +* 7 = 90,0 +* 8 = -90,0 +* 9 = 30,35 +* 10 = -30,35 +* 11 = 110,35 +* 12 = -110,35 +* 13 = 135, 35 +* 14 = -135, 35 +*/ +const int16_t channelIndex_CICP6[5] = { 0, 1, 2, 5, 6 }; +const int16_t channelIndex_CICP12[7] = { 0, 1, 2, 5, 6, 3, 4 }; +const int16_t channelIndex_CICP14[7] = { 0, 1, 2, 5, 6, 9, 10 }; +const int16_t channelIndex_CICP16[9] = { 0, 1, 2, 5, 6, 9, 10, 11, 12 }; +const int16_t channelIndex_CICP19[11] = { 0, 1, 2, 3, 4, 7, 8, 9, 10, 13, 14 }; + +const float surCohEne[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = { 3.0903f, 2.0053f, 1.0860f, 0.8072f, 0.7079f }; + +const float spreadCohEne05[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = { 2.3988f, 1.7783f, 1.1220f, 1.1220f, 1.1220f }; + +const float spreadCohEne1[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = { 1.5975f, 1.1220f, 1.1220f, 1.1220f, 1.1220f }; + +const float lowBitRateBinauralEQ[LOW_BIT_RATE_BINAURAL_EQ_BINS] = { 0.979f, 0.893f, 0.762f, 0.615f, 0.52f, 0.48f, 0.477f, 0.477f, 0.48f, 0.501f, 0.546f, 0.602f, 0.652f, 0.664f, 0.652f, 0.639f, 0.635f }; + +const float diffuseFieldCoherenceDifferenceX[BINAURAL_COHERENCE_DIFFERENCE_BINS] = { + 0.047421f, 0.19773f, 0.22582f, 0.10637f, 0.0087111f, 0.012028f, 0.031972f, 0.019668f, 0.0079928f +}; + +const float diffuseFieldCoherenceDifferenceY[BINAURAL_COHERENCE_DIFFERENCE_BINS] = { + -0.095628f, -0.30569f, -0.34427f, -0.15425f, -0.044628f, -0.057224f, -0.050835f, -0.035214f, -0.02215f +}; + +const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS] = { + 0.048207f, 0.10796f, 0.11845f, 0.047886f, 0.035917f, 0.045196f, 0.018863f, 0.015547f, 0.014157f +}; + + +/*----------------------------------------------------------------------------------* + * TD ISm binaural renderer ROM tables + *----------------------------------------------------------------------------------*/ + + /* The maximum target times set to 100 msec. */ +const int16_t TDREND_SRC_REND_MaxTargetTimes[IVAS_NUM_SUPPORTED_FS] = +{ + 1600, 3200, 4800 /* Corresponds to 16kHz, 32kHz, 48kHz */ +}; + +/* The maximum lengths of the blocks internally in the effect. Corresponds to 6 msec. This means also that */ +/* if the length of the input block is just above 6 msec, the block will be divided into two 3 msec blocks. */ +const int16_t TDREND_SRC_REND_MaxBlockLengths[IVAS_NUM_SUPPORTED_FS] = +{ + 96, 192, 288 /* Corresponds to 16kHz, 32kHz, 48kHz */ +}; + +const int16_t TDREND_MaxITD[IVAS_NUM_SUPPORTED_FS] = +{ + 111, 222, 333 /* Corresponds to 16kHz, 32kHz, 48kHz */ +}; + +const float TDREND_MaxITD_Incr[IVAS_NUM_SUPPORTED_FS] = +{ + 0.0925f, 0.1850f, 0.2775f /* Corresponds to 16kHz, 32kHz, 48kHz, e.g. ( ( 2 * MaxITD ) / ( 0.05 * 48000 ) ) */ +}; + +const int16_t HRTF_MODEL_N_CPTS_VAR[HRTF_MODEL_N_SECTIONS] = +{ + 13, 12, 11 +}; + +const float SincTable[321] = +{ + 1.00000000f, 0.99957629f, 0.99830587f, 0.99619078f, 0.99323448f, 0.98944177f, 0.98481881f, 0.97937311f, + 0.97311350f, 0.96605012f, 0.95819441f, 0.94955907f, 0.94015803f, 0.93000645f, 0.91912066f, 0.90751815f, + 0.89521750f, 0.88223838f, 0.86860150f, 0.85432856f, 0.83944219f, 0.82396595f, 0.80792425f, 0.79134231f, + 0.77424608f, 0.75666226f, 0.73861817f, 0.72014174f, 0.70126144f, 0.68200624f, 0.66240553f, 0.64248906f, + 0.62228691f, 0.60182943f, 0.58114713f, 0.56027070f, 0.53923087f, 0.51805843f, 0.49678411f, 0.47543856f, + 0.45405225f, 0.43265547f, 0.41127824f, 0.38995024f, 0.36870081f, 0.34755883f, 0.32655271f, 0.30571035f, + 0.28505905f, 0.26462549f, 0.24443569f, 0.22451493f, 0.20488776f, 0.18557791f, 0.16660829f, 0.14800093f, + 0.12977695f, 0.11195656f, 0.09455895f, 0.07760236f, 0.06110400f, 0.04508003f, 0.02954554f, 0.01451456f, + 0.00000000f, -0.01398631f, -0.02743368f, -0.04033255f, -0.05267447f, -0.06445214f, -0.07565940f, -0.08629121f, + -0.09634367f, -0.10581400f, -0.11470052f, -0.12300268f, -0.13072098f, -0.13785702f, -0.14441345f, -0.15039394f, + -0.15580318f, -0.16064685f, -0.16493160f, -0.16866498f, -0.17185547f, -0.17451243f, -0.17664604f, -0.17826729f, + -0.17938796f, -0.18002054f, -0.18017822f, -0.17987486f, -0.17912493f, -0.17794347f, -0.17634608f, -0.17434883f, + -0.17196824f, -0.16922125f, -0.16612516f, -0.16269761f, -0.15895648f, -0.15491992f, -0.15060625f, -0.14603396f, + -0.14122162f, -0.13618787f, -0.13095139f, -0.12553081f, -0.11994473f, -0.11421163f, -0.10834984f, -0.10237755f, + -0.09631271f, -0.09017300f, -0.08397586f, -0.07773838f, -0.07147731f, -0.06520902f, -0.05894946f, -0.05271415f, + -0.04651815f, -0.04037601f, -0.03430179f, -0.02830902f, -0.02241063f, -0.01661904f, -0.01094605f, -0.00540284f, + -0.00000000f, 0.00525251f, 0.01034538f, 0.01526993f, 0.02001814f, 0.02458266f, 0.02895676f, 0.03313441f, + 0.03711021f, 0.04087943f, 0.04443799f, 0.04778246f, 0.05091003f, 0.05381856f, 0.05650650f, 0.05897292f, + 0.06121749f, 0.06324047f, 0.06504268f, 0.06662549f, 0.06799083f, 0.06914112f, 0.07007930f, 0.07080878f, + 0.07133343f, 0.07165755f, 0.07178588f, 0.07172352f, 0.07147595f, 0.07104902f, 0.07044886f, 0.06968193f, + 0.06875494f, 0.06767485f, 0.06644886f, 0.06508435f, 0.06358888f, 0.06197015f, 0.06023599f, 0.05839432f, + 0.05645314f, 0.05442051f, 0.05230450f, 0.05011320f, 0.04785466f, 0.04553692f, 0.04316793f, 0.04075558f, + 0.03830765f, 0.03583181f, 0.03333557f, 0.03082630f, 0.02831121f, 0.02579730f, 0.02329137f, 0.02080003f, + 0.01832963f, 0.01588629f, 0.01347589f, 0.01110403f, 0.00877607f, 0.00649705f, 0.00427175f, 0.00210467f, + 0.00000000f, -0.00203837f, -0.00400686f, -0.00590216f, -0.00772131f, -0.00946162f, -0.01112072f, -0.01269654f, + -0.01418731f, -0.01559156f, -0.01690810f, -0.01813605f, -0.01927478f, -0.02032396f, -0.02128352f, -0.02215366f, + -0.02293482f, -0.02362769f, -0.02423318f, -0.02475245f, -0.02518686f, -0.02553797f, -0.02580754f, -0.02599752f, + -0.02611000f, -0.02614728f, -0.02611175f, -0.02600597f, -0.02583262f, -0.02559449f, -0.02529446f, -0.02493550f, + -0.02452066f, -0.02405306f, -0.02353586f, -0.02297226f, -0.02236549f, -0.02171881f, -0.02103547f, -0.02031874f, + -0.01957185f, -0.01879802f, -0.01800043f, -0.01718225f, -0.01634655f, -0.01549638f, -0.01463471f, -0.01376443f, + -0.01288838f, -0.01200928f, -0.01112977f, -0.01025241f, -0.00937962f, -0.00851376f, -0.00765705f, -0.00681160f, + -0.00597942f, -0.00516238f, -0.00436225f, -0.00358068f, -0.00281917f, -0.00207914f, -0.00136185f, -0.00066846f, + -0.00000000f, 0.00064260f, 0.00125856f, 0.00184718f, 0.00240790f, 0.00294026f, 0.00344390f, 0.00391857f, + 0.00436413f, 0.00478051f, 0.00516776f, 0.00552600f, 0.00585544f, 0.00615637f, 0.00642915f, 0.00667420f, + 0.00689203f, 0.00708318f, 0.00724827f, 0.00738795f, 0.00750293f, 0.00759395f, 0.00766178f, 0.00770723f, + 0.00773114f, 0.00773435f, 0.00771774f, 0.00768218f, 0.00762857f, 0.00755779f, 0.00747075f, 0.00736831f, + 0.00725138f, 0.00712082f, 0.00697748f, 0.00682221f, 0.00665584f, 0.00647916f, 0.00629295f, 0.00609797f, + 0.00589494f, 0.00568458f, 0.00546754f, 0.00524448f, 0.00501600f, 0.00478270f, 0.00454511f, 0.00430377f, + 0.00405916f, 0.00381176f, 0.00356198f, 0.00331023f, 0.00305690f, 0.00280234f, 0.00254687f, 0.00229079f, + 0.00203440f, 0.00177795f, 0.00152168f, 0.00126584f, 0.00101062f, 0.00075625f, 0.00050289f, 0.00025075f, + 0.00000000f +}; + +const float orange53_left_avg_power[257] = { + 0.999231100f, 0.992580175f, 0.969233215f, 0.925614893f, 0.871408045f, 0.826101780f, 0.803222895f, 0.800087631f, 0.802672029f, + 0.801490188f, 0.796555817f, 0.790879488f, 0.784882724f, 0.777585745f, 0.769326210f, 0.761789441f, 0.756145239f, 0.752754092f, + 0.751703024f, 0.752594173f, 0.754317880f, 0.755515277f, 0.754378498f, 0.748860359f, 0.738919020f, 0.727488697f, 0.718792558f, + 0.714865267f, 0.713446736f, 0.711076498f, 0.706021905f, 0.697553098f, 0.684623063f, 0.667031527f, 0.647006035f, 0.627680719f, + 0.609939933f, 0.592472672f, 0.574803054f, 0.558499217f, 0.544599831f, 0.532128096f, 0.520152628f, 0.509682238f, 0.501904130f, + 0.496162385f, 0.491121918f, 0.486813396f, 0.483951330f, 0.482198298f, 0.480713189f, 0.479654074f, 0.479590476f, 0.479965866f, + 0.479589254f, 0.478181243f, 0.476334095f, 0.474199444f, 0.471616089f, 0.469089746f, 0.467486322f, 0.466943622f, 0.467153549f, + 0.468381166f, 0.470996737f, 0.474416614f, 0.477639019f, 0.480612457f, 0.483910263f, 0.487287015f, 0.489909321f, 0.491668850f, + 0.493155539f, 0.494319856f, 0.494512051f, 0.493615031f, 0.492155492f, 0.490116775f, 0.486886710f, 0.482303619f, 0.476902038f, + 0.470775038f, 0.463377595f, 0.454571068f, 0.445130944f, 0.435581058f, 0.425568998f, 0.414717495f, 0.403531373f, 0.392556936f, + 0.381436378f, 0.369506508f, 0.357099295f, 0.345049500f, 0.333368897f, 0.321326375f, 0.308959186f, 0.297232091f, 0.286592871f, + 0.276453108f, 0.266589880f, 0.257950366f, 0.251341701f, 0.246435612f, 0.242861211f, 0.241405189f, 0.242839754f, 0.246688128f, + 0.252115428f, 0.259297341f, 0.268399984f, 0.278481483f, 0.288520366f, 0.298599035f, 0.308846802f, 0.318350822f, 0.326248646f, + 0.332813978f, 0.338464528f, 0.342543274f, 0.344278336f, 0.344031811f, 0.342641503f, 0.339995682f, 0.335437506f, 0.329174429f, + 0.322237372f, 0.315035462f, 0.306967229f, 0.297821850f, 0.288482070f, 0.279766560f, 0.271234214f, 0.262228251f, 0.253214896f, + 0.245183259f, 0.237939596f, 0.230546176f, 0.223051578f, 0.216552779f, 0.211263061f, 0.206180066f, 0.200917527f, 0.196485907f, + 0.193453044f, 0.190857053f, 0.187853232f, 0.185171053f, 0.183685005f, 0.182665780f, 0.180928215f, 0.178784713f, 0.177342966f, + 0.176323384f, 0.174430951f, 0.171496049f, 0.168740034f, 0.166518897f, 0.163711995f, 0.159658119f, 0.155442193f, 0.152056932f, + 0.148795277f, 0.144545168f, 0.139905334f, 0.136263832f, 0.133493021f, 0.130194828f, 0.126240104f, 0.123071767f, 0.121281922f, + 0.119557180f, 0.117016964f, 0.114773229f, 0.114072219f, 0.114103459f, 0.113414355f, 0.112460621f, 0.112842396f, 0.114564091f, + 0.115944758f, 0.116569765f, 0.117913686f, 0.120910525f, 0.124211200f, 0.126575813f, 0.128826424f, 0.132578567f, 0.137430578f, + 0.141675219f, 0.144987956f, 0.148879051f, 0.154273912f, 0.159992099f, 0.164641231f, 0.168560207f, 0.173201621f, 0.178906262f, + 0.184429348f, 0.188756809f, 0.192309171f, 0.196154252f, 0.200732291f, 0.205381230f, 0.209404662f, 0.212832779f, 0.216197237f, + 0.220162451f, 0.225029215f, 0.230637416f, 0.236752108f, 0.243243530f, 0.249900997f, 0.256293535f, 0.261716694f, 0.265186161f, + 0.265652657f, 0.262010813f, 0.253508776f, 0.243198514f, 0.244490802f, 0.255167097f, 0.258825988f, 0.257396817f, 0.256197631f, + 0.256865948f, 0.258354962f, 0.259370565f, 0.259730458f, 0.259894609f, 0.260285556f, 0.260970831f, 0.261650831f, 0.262020200f, + 0.262095064f, 0.262225062f, 0.262741268f, 0.263585031f, 0.264350951f, 0.264654577f, 0.264539272f, 0.264409125f, 0.264633715f, + 0.265172601f, 0.265621960f, 0.265678704f, 0.265469313f, 0.265454412f, 0.265907466f, 0.266625792f, 0.267101586f, 0.266997635f, + 0.266522497f, 0.266185820f, 0.266298562f, 0.266692907f, 0.266907692f +}; + +const float orange53_right_avg_power[257] = { + 0.999231100f, 0.992580175f, 0.969233215f, 0.925614893f, 0.871408045f, 0.826101780f, 0.803222895f, 0.800087631f, 0.802672029f, + 0.801490188f, 0.796555817f, 0.790879488f, 0.784882724f, 0.777585745f, 0.769326210f, 0.761789441f, 0.756145239f, 0.752754092f, + 0.751703024f, 0.752594173f, 0.754317880f, 0.755515277f, 0.754378498f, 0.748860359f, 0.738919020f, 0.727488697f, 0.718792558f, + 0.714865267f, 0.713446736f, 0.711076498f, 0.706021905f, 0.697553098f, 0.684623063f, 0.667031527f, 0.647006035f, 0.627680719f, + 0.609939933f, 0.592472672f, 0.574803054f, 0.558499217f, 0.544599831f, 0.532128096f, 0.520152628f, 0.509682238f, 0.501904130f, + 0.496162385f, 0.491121918f, 0.486813396f, 0.483951330f, 0.482198298f, 0.480713189f, 0.479654074f, 0.479590476f, 0.479965866f, + 0.479589254f, 0.478181243f, 0.476334095f, 0.474199444f, 0.471616089f, 0.469089746f, 0.467486322f, 0.466943622f, 0.467153549f, + 0.468381166f, 0.470996737f, 0.474416614f, 0.477639019f, 0.480612457f, 0.483910263f, 0.487287015f, 0.489909321f, 0.491668850f, + 0.493155539f, 0.494319856f, 0.494512051f, 0.493615031f, 0.492155492f, 0.490116775f, 0.486886710f, 0.482303619f, 0.476902038f, + 0.470775038f, 0.463377595f, 0.454571068f, 0.445130944f, 0.435581058f, 0.425568998f, 0.414717495f, 0.403531373f, 0.392556936f, + 0.381436378f, 0.369506508f, 0.357099295f, 0.345049500f, 0.333368897f, 0.321326375f, 0.308959186f, 0.297232091f, 0.286592871f, + 0.276453108f, 0.266589880f, 0.257950366f, 0.251341701f, 0.246435612f, 0.242861211f, 0.241405189f, 0.242839754f, 0.246688128f, + 0.252115428f, 0.259297341f, 0.268399984f, 0.278481483f, 0.288520366f, 0.298599035f, 0.308846802f, 0.318350822f, 0.326248646f, + 0.332813978f, 0.338464528f, 0.342543274f, 0.344278336f, 0.344031811f, 0.342641503f, 0.339995682f, 0.335437506f, 0.329174429f, + 0.322237372f, 0.315035462f, 0.306967229f, 0.297821850f, 0.288482070f, 0.279766560f, 0.271234214f, 0.262228251f, 0.253214896f, + 0.245183259f, 0.237939596f, 0.230546176f, 0.223051578f, 0.216552779f, 0.211263061f, 0.206180066f, 0.200917527f, 0.196485907f, + 0.193453044f, 0.190857053f, 0.187853232f, 0.185171053f, 0.183685005f, 0.182665780f, 0.180928215f, 0.178784713f, 0.177342966f, + 0.176323384f, 0.174430951f, 0.171496049f, 0.168740034f, 0.166518897f, 0.163711995f, 0.159658119f, 0.155442193f, 0.152056932f, + 0.148795277f, 0.144545168f, 0.139905334f, 0.136263832f, 0.133493021f, 0.130194828f, 0.126240104f, 0.123071767f, 0.121281922f, + 0.119557180f, 0.117016964f, 0.114773229f, 0.114072219f, 0.114103459f, 0.113414355f, 0.112460621f, 0.112842396f, 0.114564091f, + 0.115944758f, 0.116569765f, 0.117913686f, 0.120910525f, 0.124211200f, 0.126575813f, 0.128826424f, 0.132578567f, 0.137430578f, + 0.141675219f, 0.144987956f, 0.148879051f, 0.154273912f, 0.159992099f, 0.164641231f, 0.168560207f, 0.173201621f, 0.178906262f, + 0.184429348f, 0.188756809f, 0.192309171f, 0.196154252f, 0.200732291f, 0.205381230f, 0.209404662f, 0.212832779f, 0.216197237f, + 0.220162451f, 0.225029215f, 0.230637416f, 0.236752108f, 0.243243530f, 0.249900997f, 0.256293535f, 0.261716694f, 0.265186161f, + 0.265652657f, 0.262010813f, 0.253508776f, 0.243198514f, 0.244490802f, 0.255167097f, 0.258825988f, 0.257396817f, 0.256197631f, + 0.256865948f, 0.258354962f, 0.259370565f, 0.259730458f, 0.259894609f, 0.260285556f, 0.260970831f, 0.261650831f, 0.262020200f, + 0.262095064f, 0.262225062f, 0.262741268f, 0.263585031f, 0.264350951f, 0.264654577f, 0.264539272f, 0.264409125f, 0.264633715f, + 0.265172601f, 0.265621960f, 0.265678704f, 0.265469313f, 0.265454412f, 0.265907466f, 0.266625792f, 0.267101586f, 0.266997635f, + 0.266522497f, 0.266185820f, 0.266298562f, 0.266692907f, 0.266907692f +}; + +const float orange53_coherence[257] = { + 0.929530263f, 0.921171963f, 0.900268972f, 0.876067519f, 0.855227590f, 0.837884128f, 0.823401272f, 0.818804145f, 0.835025251f, + 0.871971071f, 0.911253273f, 0.929330528f, 0.921199203f, 0.900894165f, 0.882577479f, 0.867001534f, 0.849280477f, 0.832460761f, + 0.824062645f, 0.823441386f, 0.820908070f, 0.811902404f, 0.802339375f, 0.798648477f, 0.797345281f, 0.791158736f, 0.779512227f, + 0.768243194f, 0.760565042f, 0.754912853f, 0.751044095f, 0.752276063f, 0.759258866f, 0.766927004f, 0.769716740f, 0.767338514f, + 0.763358235f, 0.759508014f, 0.755201221f, 0.750362694f, 0.746060252f, 0.742611766f, 0.739434779f, 0.736354828f, 0.733443379f, + 0.730109870f, 0.726028502f, 0.722365141f, 0.720153689f, 0.718220115f, 0.714793265f, 0.710619092f, 0.708084404f, 0.707218647f, + 0.705624878f, 0.702472746f, 0.700073540f, 0.699947894f, 0.700519860f, 0.699934483f, 0.699344158f, 0.700895131f, 0.704551995f, + 0.708814025f, 0.713567019f, 0.719995975f, 0.728467822f, 0.738399088f, 0.749545693f, 0.761859894f, 0.774593413f, 0.787218869f, + 0.800481200f, 0.814727187f, 0.828367889f, 0.839860320f, 0.850490928f, 0.862034321f, 0.873037636f, 0.880097568f, 0.883217216f, + 0.885473788f, 0.887664974f, 0.886511028f, 0.880120754f, 0.871120989f, 0.862524390f, 0.853262126f, 0.840783834f, 0.825854301f, + 0.811407208f, 0.798167706f, 0.784307659f, 0.769172490f, 0.754072189f, 0.739893615f, 0.726129174f, 0.712544501f, 0.699519753f, + 0.686980069f, 0.674778104f, 0.663931608f, 0.655511260f, 0.648816824f, 0.642671287f, 0.638217211f, 0.637585819f, 0.640332758f, + 0.643755615f, 0.647433281f, 0.653589368f, 0.662824631f, 0.672268033f, 0.680022597f, 0.687623680f, 0.696763635f, 0.705829978f, + 0.712574661f, 0.717432320f, 0.721986175f, 0.725707173f, 0.727064371f, 0.726255059f, 0.724350274f, 0.720927835f, 0.715189219f, + 0.708206475f, 0.701428175f, 0.693923056f, 0.684313059f, 0.674107075f, 0.666009307f, 0.659245491f, 0.650998116f, 0.641600072f, + 0.634524226f, 0.630267978f, 0.625348687f, 0.618164837f, 0.611785769f, 0.608430445f, 0.605561733f, 0.600407422f, 0.594782710f, + 0.591767371f, 0.590365708f, 0.587845862f, 0.584915996f, 0.584355533f, 0.585834682f, 0.586913347f, 0.587935925f, 0.591403484f, + 0.596784472f, 0.601111054f, 0.604539037f, 0.610374093f, 0.618451059f, 0.624519289f, 0.627448440f, 0.631859899f, 0.639748096f, + 0.646256745f, 0.647378445f, 0.647664309f, 0.652599990f, 0.659044445f, 0.659743190f, 0.656243205f, 0.656651020f, 0.662200928f, + 0.664544880f, 0.660030127f, 0.656303048f, 0.659881413f, 0.664978266f, 0.662953973f, 0.657274961f, 0.658065319f, 0.665406108f, + 0.668446958f, 0.663809955f, 0.661349833f, 0.668595374f, 0.677367866f, 0.677208483f, 0.672289610f, 0.675831020f, 0.688208520f, + 0.695776582f, 0.691749871f, 0.687812865f, 0.696674168f, 0.711764693f, 0.716045380f, 0.706839681f, 0.701565385f, 0.711955190f, + 0.726487696f, 0.723370016f, 0.700417101f, 0.677427649f, 0.670733511f, 0.671355724f, 0.654210806f, 0.608316183f, 0.549225986f, + 0.504217446f, 0.484227657f, 0.475346446f, 0.452598959f, 0.399407327f, 0.319485664f, 0.229244962f, 0.146649837f, 0.083417825f, + 0.041744832f, 0.018142883f, 0.006854009f, 0.002511850f, 0.001177550f, 0.000840970f, 0.000701097f, 0.000571384f, 0.000458581f, + 0.000376965f, 0.000320562f, 0.000278847f, 0.000245546f, 0.000218281f, 0.000195632f, 0.000176647f, 0.000160827f, 0.000147978f, + 0.000137649f, 0.000129066f, 0.000121431f, 0.000114406f, 0.000108067f, 0.000102595f, 0.000097917f, 0.000093750f, 0.000089854f, + 0.000086255f, 0.000083183f, 0.000080804f, 0.000079026f, 0.000077552f, 0.000076117f, 0.000074693f, 0.000073431f, 0.000072456f, + 0.000071701f, 0.000071002f, 0.000070286f, 0.000069692f, 0.000069457f +}; + +/*----------------------------------------------------------------------------------* + * t-design and SN3D normalization table + *----------------------------------------------------------------------------------*/ + + /* SN3D norm */ +const float norm_sn3d_hoa3[16] = +{ + 1.f, 1.7320508f, 1.7320508f, 1.7320508f, 2.2360680f, 2.2360680f, 2.2360680f, 2.2360680f, + 2.2360680f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f +}; + +/* Order 11 t-design */ +const uint16_t t_design_11_size = 70; + +const float t_design_11_azimuth[70] = +{ + 1.329273e+02f, -8.393495e+01f, 8.474100e+00f, -1.133408e+02f, -1.032659e+02f, -3.323704e+01f, 2.185643e+01f, -1.565395e+02f, + -6.426475e+01f, 1.657795e+02f, -2.520283e+01f, -9.700380e+01f, 2.785464e+01f, 1.532142e+02f, -1.550616e+02f, -1.184214e+01f, + 8.053873e+01f, -4.205616e+01f, -3.122333e+01f, 3.883790e+01f, 9.376069e+01f, -8.475602e+01f, 7.755368e+00f, -1.222769e+02f, + 4.680127e+01f, -2.476863e+01f, 9.989047e+01f, -1.347840e+02f, -8.308802e+01f, 6.012817e+01f, 1.526447e+02f, 2.975767e+01f, + 4.077932e+01f, 1.101839e+02f, 1.656521e+02f, -1.299266e+01f, 7.973599e+01f, -5.052453e+01f, 1.189239e+02f, 4.722029e+01f, + 1.719253e+02f, -6.251458e+01f, -1.111567e+01f, 1.320180e+02f, -1.353555e+02f, 1.023709e+02f, 1.127393e+02f, -1.783050e+02f, + -1.223199e+02f, 5.907635e+01f, 1.517042e+02f, 2.137634e+01f, -1.690055e+02f, 1.189808e+02f, -1.160893e+02f, 9.647679e+00f, + 6.089332e+01f, -1.560215e+02f, -6.346030e+01f, 1.749298e+02f, -1.752888e+02f, -1.059519e+02f, -5.019283e+01f, 1.313583e+02f, + -1.362968e+02f, 9.356446e+01f, -9.708401e+01f, -1.691583e+02f, -4.413238e+01f, 8.147954e+01f +}; + +const float t_design_11_elevation[70] = +{ + 7.692547e+00f, -2.373007e+01f, 2.351276e+01f, 7.042259e+01f, -9.896944e+00f, -7.075133e+01f, -2.646185e+01f, 4.777649e+01f, + -7.720470e+00f, 4.453436e+01f, 2.638979e+01f, -4.465789e+01f, 9.767035e+00f, -4.770533e+01f, 7.453029e+00f, -2.359012e+01f, + 2.371945e+01f, 7.043827e+01f, -9.835416e+00f, -7.049808e+01f, -2.629492e+01f, 4.761480e+01f, -7.517185e+00f, 4.428623e+01f, + 2.664426e+01f, -4.456937e+01f, 9.912719e+00f, -4.795996e+01f, 7.296799e+00f, -2.334460e+01f, 2.364153e+01f, 7.068431e+01f, + -9.581404e+00f, -7.039345e+01f, -2.642582e+01f, 4.775107e+01f, -7.308536e+00f, 4.426328e+01f, 2.671406e+01f, -4.431497e+01f, + 9.758997e+00f, -4.803619e+01f, 7.439651e+00f, -2.333261e+01f, 2.338690e+01f, 7.082191e+01f, -9.485964e+00f, -7.058019e+01f, + -2.667403e+01f, 4.799784e+01f, -7.382762e+00f, 4.449706e+01f, 2.650250e+01f, -4.424619e+01f, 9.518451e+00f, -4.782814e+01f, + 7.684274e+00f, -2.357068e+01f, 2.330745e+01f, 7.065865e+01f, -9.680889e+00f, -7.080268e+01f, -2.669635e+01f, 4.801363e+01f, + -7.637348e+00f, 4.466512e+01f, 2.630235e+01f, -4.445764e+01f, 9.523415e+00f, -4.762422e+01f +}; + + +/*----------------------------------------------------------------------* +* Reverberator ROM tables +*-----------------------------------------------------------------------*/ + +const float ivas_reverb_default_fc[IVAS_REVERB_DEFAULT_N_BANDS] = +{ + 20.0f, 25.0f, 31.5f, 40.0f, + 50.0f, 63.0f, 80.0f, 100.0f, + 125.0f, 160.0f, 200.0f, 250.0f, + 315.0f, 400.0f, 500.0f, 630.0f, + 800.0f, 1000.0f, 1250.0f, 1600.0f, + 2000.0f, 2500.0f, 3150.0f, 4000.0f, + 5000.0f, 6300.0f, 8000.0f, 10000.0f, + 12500.0f, 16000.0f, 20000.0f +}; + +const float ivas_reverb_default_RT60[IVAS_REVERB_DEFAULT_N_BANDS] = +{ + 1.3622f, 1.4486f, 1.3168f, 1.5787f, + 1.4766f, 1.3954f, 1.2889f, 1.3462f, + 1.0759f, 1.0401f, 1.097f, 1.085f, + 1.091f, 1.0404f, 1.0499f, 1.0699f, + 1.1028f, 1.1714f, 1.1027f, 1.0666f, + 1.055f, 1.0553f, 1.0521f, 1.0569f, + 1.0421f, 0.97822f, 0.80487f, 0.75944f, + 0.71945f, 0.61682f, 0.60031f +}; + +const float ivas_reverb_default_DSR[IVAS_REVERB_DEFAULT_N_BANDS] = +{ + 1.8811e-08f, 2.1428e-08f, 1.3972e-08f, 1.51e-08f, + 1.287e-08f, 1.8747e-08f, 2.413e-08f, 3.9927e-08f, + 8.9719e-08f, 1.902e-07f, 3.702e-07f, 6.1341e-07f, + 7.1432e-07f, 6.5331e-07f, 4.6094e-07f, 5.4683e-07f, + 7.0134e-07f, 6.856e-07f, 7.114e-07f, 6.9604e-07f, + 5.2939e-07f, 5.699e-07f, 6.1773e-07f, 5.7488e-07f, + 4.7748e-07f, 2.7213e-07f, 1.3681e-07f, 1.0941e-07f, + 6.2001e-08f, 2.8483e-08f, 2.6267e-08f +}; + + +/* clang-format on */ diff --git a/lib_dec/ivas_rom_dec.h b/lib_dec/ivas_rom_dec.h new file mode 100644 index 0000000000..5979d8d64b --- /dev/null +++ b/lib_dec/ivas_rom_dec.h @@ -0,0 +1,205 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_ROM_DEC_H +#define IVAS_ROM_DEC_H + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_stat_dec.h" + + +/*----------------------------------------------------------------------------------* + * DFT stereo ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float dft_alpha_w_b2[STEREO_DFT_BAND_MAX]; +extern const float dft_alpha_s_b2[STEREO_DFT_BAND_MAX]; +extern const float dft_alpha_s2_b2[STEREO_DFT_BAND_MAX]; +extern const float dft_bpf_weights[]; + +extern const float dft_alpha_w[]; +extern const float dft_alpha_s[]; +extern const float dft_alpha_s2[]; + +extern const float dft_ap_gains[5][3]; +extern const int16_t dft_ap_delays[3][3]; +extern const float dft_res_pred_weights[][STEREO_DFT_BAND_MAX]; + + +extern const float dft_win232ms_8k[75]; +extern const float dft_win232ms_12k8[120]; +extern const float dft_win232ms_16k[150]; +extern const float dft_win232ms_32k[300]; +extern const float dft_win232ms_48k[450]; + +extern const float dft_win_8k[70]; + +extern const int16_t cna_init_bands[MAX_CNA_NBANDS + 1]; +extern const float max_smooth_gains[SBA_DIRAC_STEREO_NUM_BANDS]; + + +/*----------------------------------------------------------------------------------* + * ECLVQ Stereo ROM tables + *----------------------------------------------------------------------------------*/ + +extern const uint16_t cum_freq_ECSQ_tab_param[ECSQ_CONFIG_COUNT][1 + ECSQ_PARAM_COUNT]; +extern const uint16_t sym_freq_ECSQ_tab_param[ECSQ_CONFIG_COUNT][ECSQ_PARAM_COUNT]; +extern const uint16_t cum_freq_ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE]; +extern const uint16_t sym_freq_ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][ECSQ_TAB_VALS_SIZE]; +extern const uint16_t *const cum_freq_ECSQ_tab_abs_lsbs[1 + 4]; +extern const uint16_t *const sym_freq_ECSQ_tab_abs_lsbs[1 + 4]; + + +/*----------------------------------------------------------------------------------* + * DirAC ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float ls_azimuth_4d4[8]; +extern const float ls_elevation_4d4[8]; +extern const float diffuse_response_CICP6[5]; +extern const float diffuse_response_CICP14[7]; +extern const float diffuse_response_CICP16[9]; + + +extern const float dirac_dithering_azi_scale[DIRAC_DIFFUSE_LEVELS]; +extern const float dirac_dithering_ele_scale[DIRAC_DIFFUSE_LEVELS]; + +extern const int16_t ap_pre_delay[DIRAC_DECORR_NUM_SPLIT_BANDS]; +extern const int16_t ap_filter_length[DIRAC_DECORR_NUM_SPLIT_BANDS]; +extern const float ap_lattice_delta_phi[DIRAC_MAX_NUM_DECORR_FILTERS * DIRAC_MAX_DECORR_FILTER_LEN]; +extern const float ap_lattice_coeffs_1[DIRAC_DECORR_FILTER_LEN_1 * DIRAC_MAX_NUM_DECORR_FILTERS]; +extern const float ap_lattice_coeffs_2[DIRAC_DECORR_FILTER_LEN_2 * DIRAC_MAX_NUM_DECORR_FILTERS]; +extern const float ap_lattice_coeffs_3[DIRAC_DECORR_FILTER_LEN_3 * DIRAC_MAX_NUM_DECORR_FILTERS]; +extern const float *const ap_lattice_coeffs[DIRAC_DECORR_NUM_SPLIT_BANDS]; +extern const float ap_split_frequencies[DIRAC_DECORR_NUM_SPLIT_BANDS + 1]; + +extern const int16_t sba_map_tc[8]; + +/*----------------------------------------------------------------------------------* + * LS Configuration Converter ROM tables + *----------------------------------------------------------------------------------*/ + +/* Downmix matrices */ +extern const float ls_conversion_cicpX_mono[12][1]; +extern const float ls_conversion_cicpX_stereo[12][2]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp6[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp6[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp14_cicp6[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp6[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp14[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp6[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp12[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp14[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp16[]; + +/* Upmix matrices */ +extern const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp14[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp16[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp14_cicp19[]; +extern const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp19[]; + +/* Mapping table of input config : output config with corresponding matrix */ +extern const LS_CONVERSION_MAPPING ls_conversion_mapping[]; + + +/*----------------------------------------------------------------------------------* + * FASTCONV and PARAMETRIC binaural renderer ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float dmxmtx[BINAURAL_CHANNELS][11]; +extern const int16_t channelIndex_CICP6[5]; +extern const int16_t channelIndex_CICP12[7]; +extern const int16_t channelIndex_CICP14[9]; +extern const int16_t channelIndex_CICP16[9]; +extern const int16_t channelIndex_CICP19[11]; + +/* These are equalization values for spread and surround coherent sounds, approximating the spectrum + * for such sounds at anechoic multichannel listening. */ +extern const float surCohEne[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS]; +extern const float spreadCohEne05[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS]; +extern const float spreadCohEne1[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS]; + +/* Values for low-bit-rate equalization */ +extern const float lowBitRateBinauralEQ[LOW_BIT_RATE_BINAURAL_EQ_BINS]; + +/* Diffuse field binaural coherence directional adjustment values */ +extern const float diffuseFieldCoherenceDifferenceX[BINAURAL_COHERENCE_DIFFERENCE_BINS]; +extern const float diffuseFieldCoherenceDifferenceY[BINAURAL_COHERENCE_DIFFERENCE_BINS]; +extern const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS]; + +/*----------------------------------------------------------------------------------* + * TD ISM Object renderer + *----------------------------------------------------------------------------------*/ + +extern const int16_t TDREND_SRC_REND_MaxTargetTimes[IVAS_NUM_SUPPORTED_FS]; +extern const int16_t TDREND_SRC_REND_MaxBlockLengths[IVAS_NUM_SUPPORTED_FS]; +extern const int16_t TDREND_MaxITD[IVAS_NUM_SUPPORTED_FS]; +extern const float TDREND_MaxITD_Incr[IVAS_NUM_SUPPORTED_FS]; + +extern const int16_t HRTF_MODEL_N_CPTS_VAR[HRTF_MODEL_N_SECTIONS]; + +extern const float SincTable[321]; + +extern const float orange53_left_avg_power[257]; +extern const float orange53_right_avg_power[257]; +extern const float orange53_coherence[257]; + + +/*----------------------------------------------------------------------------------* + * t-design and SN3D normalization table + *----------------------------------------------------------------------------------*/ + +/* SN3D norm */ +extern const float norm_sn3d_hoa3[16]; + +/* Order 11 t-design */ +extern const uint16_t t_design_11_size; +extern const float t_design_11_azimuth[70]; +extern const float t_design_11_elevation[70]; + + +/*----------------------------------------------------------------------* + * Reverberator ROM tables + *-----------------------------------------------------------------------*/ + +extern const float ivas_reverb_default_fc[]; +extern const float ivas_reverb_default_RT60[]; +extern const float ivas_reverb_default_DSR[]; + + +#endif diff --git a/lib_dec/ivas_rotation.c b/lib_dec/ivas_rotation.c new file mode 100644 index 0000000000..77809d8270 --- /dev/null +++ b/lib_dec/ivas_rotation.c @@ -0,0 +1,984 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local Constants + *-----------------------------------------------------------------------*/ + +#define HEADROT_ORDER 3 +#define HEADROT_SHMAT_DIM ( HEADROT_ORDER + 1 ) * ( HEADROT_ORDER + 1 ) +#define HEADROT_SHMAT_DIM2 HEADROT_SHMAT_DIM *HEADROT_SHMAT_DIM + + +/*-----------------------------------------------------------------------* + * Local Function prototypes + *-----------------------------------------------------------------------*/ + +static void SHrotmatgen( float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], float Rmat[3][3], const int16_t order ); + + +/*-----------------------------------------------------------------------* + * ivas_headTrack_open() + * + * Allocate and initialize Head-Tracking handle + *-----------------------------------------------------------------------*/ + +ivas_error ivas_headTrack_open( + HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* o : head track handle */ +) +{ + int16_t i; + + /* Allocate Head-Tracking handle */ + if ( ( *hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) count_malloc( sizeof( HEAD_TRACK_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for head-tracking memory\n" ) ); + } + + /* Initialization */ + ( *hHeadTrackData )->num_quaternions = 0; + ( *hHeadTrackData )->lrSwitchInterpVal = 0.0f; + ( *hHeadTrackData )->lrSwitchedCurrent = 0; + ( *hHeadTrackData )->lrSwitchedNext = 0; + + /* Initialise Rmat_prev to I, Rmat will be computed later */ + for ( i = 0; i < 3; i++ ) + { + set_zero( ( *hHeadTrackData )->Rmat_prev[i], 3 ); + ( *hHeadTrackData )->Rmat_prev[i][i] = 1.0f; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------------------- + * QuatToRotMat() + * + * Quaternion handling: calculate rotation matrices in real-space and SHD + *---------------------------------------------------------------------------------*/ + +void QuatToRotMat( + const Quaternion quat, /* i : quaternion describing the rotation */ + float Rmat[3][3] /* o : real-space rotation matrix for this rotation */ +) +{ + float s1, s2, s3, c1, c2, c3; +#ifdef DEBUGGING + /* PrintQuat( quat ); */ +#endif + + /* For debugging purposes we can also calculate the rotation matrix from + * Euler angles instead of quaternions. In this case, all the w values must + * be set to -3.0 in the trajectory file to signal switching to Euler angles. + * The x,y, and z components of the quaternion are then interpreted as + * yaw-pitch-roll. + */ + if ( quat.w != -3.0 ) + { + Rmat[0][0] = quat.w * quat.w + quat.x * quat.x - quat.y * quat.y - quat.z * quat.z; + Rmat[0][1] = 2.0f * ( quat.x * quat.y - quat.w * quat.z ); + Rmat[0][2] = 2.0f * ( quat.x * quat.z + quat.w * quat.y ); + + Rmat[1][0] = 2.0f * ( quat.x * quat.y + quat.w * quat.z ); + Rmat[1][1] = quat.w * quat.w - quat.x * quat.x + quat.y * quat.y - quat.z * quat.z; + Rmat[1][2] = 2.0f * ( quat.y * quat.z - quat.w * quat.x ); + + Rmat[2][0] = 2.0f * ( quat.x * quat.z - quat.w * quat.y ); + Rmat[2][1] = 2.0f * ( quat.y * quat.z + quat.w * quat.x ); + Rmat[2][2] = quat.w * quat.w - quat.x * quat.x - quat.y * quat.y + quat.z * quat.z; + } + else + { + /* Euler angles in R_X(roll)*R_Y(pitch)*R_Z(yaw) convention + * + * yaw: rotate scene counter-clockwise in the horizontal plane + * pitch: rotate scene in the median plane, increase elevation with positive values + * roll: rotate scene from the right ear to the top + */ + + c1 = cosf( quat.z / _180_OVER_PI ); + c2 = cosf( quat.y / _180_OVER_PI ); + c3 = cosf( quat.x / _180_OVER_PI ); + + s1 = sinf( quat.z / _180_OVER_PI ); + s2 = sinf( -quat.y / _180_OVER_PI ); + s3 = sinf( quat.x / _180_OVER_PI ); + + Rmat[0][0] = c2 * c3; + Rmat[0][1] = -c2 * s3; + Rmat[0][2] = s2; + + Rmat[1][0] = c1 * s3 + c3 * s1 * s2; + Rmat[1][1] = c1 * c3 - s1 * s2 * s3; + Rmat[1][2] = -c2 * s1; + + Rmat[2][0] = s1 * s3 - c1 * c3 * s2; + Rmat[2][1] = c3 * s1 + c1 * s2 * s3; + Rmat[2][2] = c1 * c2; + } + + return; +} + +/*------------------------------------------------------------------------- + * Quat2Euler() + * + * Quaternion handling: calculate corresponding Euler angles + *------------------------------------------------------------------------*/ + +void Quat2Euler( + const Quaternion quat, /* i : quaternion describing the rotation */ + float *yaw, /* o : yaw */ + float *pitch, /* o : pitch */ + float *roll /* o : roll */ +) +{ + if ( quat.w != -3.0 ) + { + *yaw = atan2f( 2 * ( quat.w * quat.x + quat.y * quat.z ), 1 - 2 * ( quat.x * quat.x + quat.y * quat.y ) ); + *pitch = asinf( 2 * ( quat.w * quat.y - quat.z * quat.x ) ); + *roll = atan2f( 2 * ( quat.w * quat.z + quat.x * quat.y ), 1 - 2 * ( quat.y * quat.y + quat.z * quat.z ) ); + } + else + { + /* Euler angles in R_X(roll)*R_Y(pitch)*R_Z(yaw) convention + * + * yaw: rotate scene counter-clockwise in the horizontal plane + * pitch: rotate scene in the median plane, increase elevation with positive values + * roll: rotate scene from the right ear to the top + */ + *yaw = quat.z; + *pitch = quat.y; + *roll = quat.x; + } + + return; +} + + +/*------------------------------------------------------------------------- + * rotateAziEle() + * + * Apply rotation to direction parameters azimuth and elevation + *------------------------------------------------------------------------*/ + +void rotateAziEle( + float azi_in, /* i : output elevation */ + float ele_in, /* i : input elevation */ + int16_t *azi, /* o : rotated azimuth */ + int16_t *ele, /* o : rotated elevation */ + float Rmat[3][3], /* i : real-space rotation matrix */ + const int16_t isPlanar /* i : is rotation planar and elevation meaningless? */ +) +{ + int16_t n; + float dv[3], dv_r[3]; + float w; + + /*Conversion spherical to cartesian coordinates*/ + w = cosf( ele_in * PI_OVER_180 ); + dv[0] = w * cosf( azi_in * PI_OVER_180 ); + dv[1] = w * sinf( azi_in * PI_OVER_180 ); + dv[2] = sinf( ele_in * PI_OVER_180 ); + + /*Rotation mtx multiplication*/ + for ( n = 0; n < 3; n++ ) + { + dv_r[n] = Rmat[n][0] * dv[0] + Rmat[n][1] * dv[1] + Rmat[n][2] * dv[2]; + } + + /*Conversion cartesian to spherical coordinates*/ + *azi = (int16_t) roundf( max( -180.0f, min( 180.0f, atan2f( dv_r[1], dv_r[0] ) * _180_OVER_PI ) ) ); + if ( isPlanar == 0 ) + { + *ele = (int16_t) roundf( max( -90.0f, min( 90.0f, atan2f( dv_r[2], sqrtf( dv_r[0] * dv_r[0] + dv_r[1] * dv_r[1] ) ) * _180_OVER_PI ) ) ); + } + else + { + *ele = 0; + } + + return; +} + + +/*------------------------------------------------------------------------- + * rotateAziEle_DirAC() + * + * Apply rotation to DirAC DOAs + *------------------------------------------------------------------------*/ + +void rotateAziEle_DirAC( + int16_t *azi, /* i/o: array of azimuth values */ + int16_t *ele, /* i/o: array of elevation values */ + const int16_t band1, /* i : bands to work on (lower limit) */ + const int16_t band2, /* i : bands to work on (upper bound) */ + const float *p_Rmat /* i : pointer to real-space rotation matrix */ +) +{ + int16_t b; + float dv_0, dv_1, dv_2; + float dv_r_0, dv_r_1, dv_r_2; + float w; + + wmops_sub_start( "rotateAziEle_DirAC" ); + + for ( b = band1; b < band2; b++ ) + { + + /*Conversion spherical to cartesian coordinates*/ + w = cosf( ele[b] * PI_OVER_180 ); + dv_0 = w * cosf( azi[b] * PI_OVER_180 ); + dv_1 = w * sinf( azi[b] * PI_OVER_180 ); + dv_2 = sinf( ele[b] * PI_OVER_180 ); + + dv_r_0 = p_Rmat[0] * dv_0 + p_Rmat[1] * dv_1 + p_Rmat[2] * dv_2; + dv_r_1 = p_Rmat[3] * dv_0 + p_Rmat[4] * dv_1 + p_Rmat[5] * dv_2; + dv_r_2 = p_Rmat[6] * dv_0 + p_Rmat[7] * dv_1 + p_Rmat[8] * dv_2; + + /*Conversion spherical to cartesian coordinates*/ + azi[b] = (int16_t) ( atan2f( dv_r_1, dv_r_0 ) * _180_OVER_PI ); + ele[b] = (int16_t) ( atan2f( dv_r_2, sqrtf( dv_r_0 * dv_r_0 + dv_r_1 * dv_r_1 ) ) * _180_OVER_PI ); + } + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * rotateFrame_shd() + * + * Apply rotation to signals in Spherical Harmonic Domain + *------------------------------------------------------------------------*/ + +void rotateFrame_shd( + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i : head track handle */ + float output[][L_FRAME48k], /* i/o: unrotated HOA3 signal buffer in TD */ + const int32_t output_fs, /* i : output sampling frequency */ + const int16_t subframe_len, /* i : subframe length per channel */ + const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ + const int16_t subframe_idx /* i : subframe index */ +) +{ + int16_t i, l, n, m; + int16_t m1, m2; + int16_t shd_rot_max_order, fade_len_smp; + + float tmp; + float tmpRot[2 * HEADROT_ORDER + 1]; + float SHrotmat_prev[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; + float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; + float cross_fade[IVAS_FB_1MS_48K_SAMP]; + + shd_rot_max_order = hTransSetup.ambisonics_order; + + /* 1ms linear crossfade */ + fade_len_smp = NS2SA( output_fs, 1000000 ); + tmp = 1.0f / fade_len_smp; + for ( i = 0; i < fade_len_smp; i++ ) + { + cross_fade[i] = ( i + 1 ) * tmp; + } + + /* initialize rotation matrices with zeros */ + for ( i = 0; i < HEADROT_SHMAT_DIM; i++ ) + { + set_zero( SHrotmat_prev[i], HEADROT_SHMAT_DIM ); + set_zero( SHrotmat[i], HEADROT_SHMAT_DIM ); + } + + /* get next quaternion */ + QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], hHeadTrackData->Rmat ); + + /* calculate ambisonics rotation matrices for the previous and current frames */ + SHrotmatgen( SHrotmat_prev, hHeadTrackData->Rmat_prev, shd_rot_max_order ); + SHrotmatgen( SHrotmat, hHeadTrackData->Rmat, shd_rot_max_order ); + + for ( i = 0; i < subframe_len; i++ ) + { + /*As the rotation matrix becomes block diagonal in a SH basis, we can + apply each angular-momentum block individually to save complexity. */ + + /* loop over l blocks */ + m1 = 1; + m2 = 4; + for ( l = 1; l <= shd_rot_max_order; l++ ) + { + /* compute mtx-vector product for this l */ + for ( n = m1; n < m2; n++ ) + { + tmpRot[n - m1] = 0.f; + + for ( m = m1; m < m2; m++ ) + { + /* crossfade with previous rotation gains */ + if ( i < fade_len_smp ) + { + tmpRot[n - m1] += cross_fade[i] * SHrotmat[n][m] * output[m][subframe_idx * subframe_len + i] + ( 1 - cross_fade[i] ) * SHrotmat_prev[n][m] * output[m][subframe_idx * subframe_len + i]; + } + else + { + tmpRot[n - m1] += SHrotmat[n][m] * output[m][subframe_idx * subframe_len + i]; + } + } + } + /* write back the result */ + for ( n = m1; n < m2; n++ ) + { + output[n][subframe_idx * subframe_len + i] = tmpRot[n - m1]; + } + m1 = m2; + m2 += 2 * ( l + 1 ) + 1; + } + + /* unoptimized code for reference (full matrix multiplication) + for ( n = 0; n < nchan; n++ ) + { + tmpRot[n] = 0.f; + + for ( m = 0; m < nchan; m++ ) + { + tmpRot[n] += SHrotmat[n][m] * output[m][i]; + } + } + for ( n = 0; n < nchan; n++ ) + { + output[n][i] = tmpRot[n]; + } + */ + } + + /* move Rmat to Rmat_prev */ + for ( i = 0; i < 3; i++ ) + { + mvr2r( hHeadTrackData->Rmat[i], hHeadTrackData->Rmat_prev[i], 3 ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * rotateFrame_sd() + * + * Apply rotation to signals in Spatial Domain + *------------------------------------------------------------------------*/ + +void rotateFrame_sd( + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i : head track handle */ + float output[][L_FRAME48k], /* i/o: unrotated SD signal buffer in TD */ + const int32_t output_Fs, /* i : output sampling frequency */ + const int16_t subframe_len, /* i : subframe length per channel */ + const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ + const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ + const int16_t subframe_idx /* i : subframe index */ +) +{ + int16_t i, j; + int16_t nchan, index_lfe; + int16_t ch_in, ch_in_woLFE, ch_out, ch_out_woLFE; + int16_t azimuth, elevation; + int16_t fade_len_smp; + + float tmp; + float tmp_gains[MAX_CICP_CHANNELS - 1]; + float gains[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; + float gains_prev[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; + float output_tmp[MAX_CICP_CHANNELS][L_FRAME48k]; + float cross_fade[IVAS_FB_1MS_48K_SAMP]; + + wmops_sub_start( "rotateFrame_sd" ); + + nchan = hTransSetup.nchan_out_woLFE + hTransSetup.num_lfe; + index_lfe = hTransSetup.index_lfe[0]; + + /* 1ms linear crossfade */ + fade_len_smp = NS2SA( output_Fs, 1000000 ); + tmp = 1.0f / fade_len_smp; + for ( i = 0; i < fade_len_smp; i++ ) + { + cross_fade[i] = ( i + 1 ) * tmp; + } + + /* Get next quaternion and calculate rotation matrix */ + QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], hHeadTrackData->Rmat ); + + for ( ch_in = 0; ch_in < nchan; ch_in++ ) + { + /* zero output and gain buffers */ + set_zero( &output_tmp[ch_in][subframe_idx * subframe_len], subframe_len ); + set_zero( gains_prev[ch_in], nchan ); + set_zero( gains[ch_in], nchan ); + + /* set gains to passthrough by default */ + gains_prev[ch_in][ch_in] = 1.0f; + gains[ch_in][ch_in] = 1.0f; + + /* skip LFE */ + if ( ch_in == index_lfe ) + { + continue; + } + + /* input channel index without LFE */ + ch_in_woLFE = ( ch_in >= index_lfe ) ? ch_in - 1 : ch_in; + + /* gains for previous subframe rotation */ + rotateAziEle( hTransSetup.ls_azimuth[ch_in_woLFE], hTransSetup.ls_elevation[ch_in_woLFE], &azimuth, &elevation, hHeadTrackData->Rmat_prev, hTransSetup.is_planar_setup ); + if ( hEFAPdata != NULL && ( hTransSetup.ls_azimuth[ch_in_woLFE] != azimuth && hTransSetup.ls_elevation[ch_in_woLFE] != elevation ) ) + { + efap_determine_gains( hEFAPdata, tmp_gains, azimuth, elevation, EFAP_MODE_EFAP ); + for ( ch_out = 0; ch_out < nchan; ch_out++ ) + { + /* skip LFE */ + if ( ch_out == index_lfe ) + { + continue; + } + + /* output channel index without LFE */ + ch_out_woLFE = ( ch_out >= index_lfe ) ? ch_out - 1 : ch_out; + + gains_prev[ch_in][ch_out] = tmp_gains[ch_out_woLFE]; + } + } + + + /* gains for current subframe rotation */ + rotateAziEle( hTransSetup.ls_azimuth[ch_in_woLFE], hTransSetup.ls_elevation[ch_in_woLFE], &azimuth, &elevation, hHeadTrackData->Rmat, hTransSetup.is_planar_setup ); + if ( hEFAPdata != NULL && ( hTransSetup.ls_azimuth[ch_in_woLFE] != azimuth || hTransSetup.ls_elevation[ch_in_woLFE] != elevation ) ) + { + efap_determine_gains( hEFAPdata, tmp_gains, azimuth, elevation, EFAP_MODE_EFAP ); + + for ( ch_out = 0; ch_out < nchan; ch_out++ ) + { + /* skip LFE */ + if ( ch_out == index_lfe ) + { + continue; + } + + /* output channel index without LFE */ + ch_out_woLFE = ( ch_out >= index_lfe ) ? ch_out - 1 : ch_out; + + gains[ch_in][ch_out] = tmp_gains[ch_out_woLFE]; + } + } + } + + /* apply panning gains by mtx multiplication */ + for ( ch_out = 0; ch_out < nchan; ch_out++ ) + { + for ( ch_in = 0; ch_in < nchan; ch_in++ ) + { + /* crossfade with previous rotation gains */ + for ( i = subframe_idx * subframe_len, j = 0; j < fade_len_smp; i++, j++ ) + { + output_tmp[ch_out][i] += ( cross_fade[j] ) * gains[ch_in][ch_out] * output[ch_in][i] + ( 1 - cross_fade[j] ) * gains_prev[ch_in][ch_out] * output[ch_in][i]; + } + for ( ; i < ( subframe_idx + 1 ) * subframe_len; i++ ) + { + output_tmp[ch_out][i] += gains[ch_in][ch_out] * output[ch_in][i]; + } + } + } + + /* move Rmat to Rmat_prev */ + for ( i = 0; i < 3; i++ ) + { + mvr2r( hHeadTrackData->Rmat[i], hHeadTrackData->Rmat_prev[i], 3 ); + } + + /* copy to output */ + for ( ch_out = 0; ch_out < nchan; ch_out++ ) + { + mvr2r( &output_tmp[ch_out][subframe_idx * subframe_len], &output[ch_out][subframe_idx * subframe_len], subframe_len ); + } + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * rotateFrame_shd_cldfb() + * + * Apply rotation to signals in Spherical Harmonic Domain and in CLDFB + *------------------------------------------------------------------------*/ + +void rotateFrame_shd_cldfb( + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ + float Rmat[3][3], /* i : real-space rotation matrix */ + const int16_t nInChannels, /* i : number of channels */ + const int16_t shd_rot_max_order /* i : split-order rotation method */ +) +{ + int16_t n = 0; + int16_t m = 0; + int16_t i = 0; + int16_t iBand = 0; + int16_t l = 0, m1 = 0, m2 = 0; + float realRot[2 * HEADROT_ORDER + 1], imagRot[2 * HEADROT_ORDER + 1]; + float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; + + assert( nInChannels == HEADROT_SHMAT_DIM && "Number of channels must be 16!" ); + + /* initialize rotation matrices with zeros */ + for ( i = 0; i < HEADROT_SHMAT_DIM; i++ ) + { + set_zero( SHrotmat[i], HEADROT_SHMAT_DIM ); + } + + /* calculate Ambisonics rotation matrix from the quaternion */ + SHrotmatgen( SHrotmat, Rmat, shd_rot_max_order ); + + /* rotation by mtx multiplication */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + for ( iBand = 0; iBand < CLDFB_NO_CHANNELS_MAX; iBand++ ) + { + /*As the rotation matrix becomes block diagonal in a SH basis, we can + apply each angular-momentum block individually to save complexity. */ + + /* loop over l blocks */ + m1 = 1; + m2 = 4; + for ( l = 1; l <= shd_rot_max_order; l++ ) + { + /* compute mtx-vector product for this l */ + for ( n = m1; n < m2; n++ ) + { + realRot[n - m1] = 0.f; + imagRot[n - m1] = 0.f; + + for ( m = m1; m < m2; m++ ) + { + realRot[n - m1] += SHrotmat[n][m] * Cldfb_RealBuffer[m][i][iBand]; + imagRot[n - m1] += SHrotmat[n][m] * Cldfb_ImagBuffer[m][i][iBand]; + } + } + /* write back the result */ + for ( n = m1; n < m2; n++ ) + { + Cldfb_RealBuffer[n][i][iBand] = realRot[n - m1]; + Cldfb_ImagBuffer[n][i][iBand] = imagRot[n - m1]; + } + m1 = m2; + m2 += 2 * ( l + 1 ) + 1; + } + + /* unoptimized code for reference (full matrix multiplication) + for (n = 0; n < nInChannels; n++) + { + realRot[n] = 0.f; + imagRot[n] = 0.f; + + for (m = 0; m < nInChannels; m++) + { + realRot[n] += SHrotmat[n][m] * Cldfb_RealBuffer[m][i][iBand]; + imagRot[n] += SHrotmat[n][m] * Cldfb_ImagBuffer[m][i][iBand]; + } + } + for (n = 0; n < nInChannels; n++) + { + Cldfb_RealBuffer[n][i][iBand] = realRot[n]; + Cldfb_ImagBuffer[n][i][iBand] = imagRot[n]; + } + */ + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * rotateFrame_sd_cldfb() + * + * Apply rotation to signals in Spatial Domain and in CLDFB + *------------------------------------------------------------------------*/ + +void rotateFrame_sd_cldfb( + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i : head track handle */ + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ + const IVAS_OUTPUT_SETUP_HANDLE hOutputSetup, /* i : output format setup number of channels */ + const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ + const int16_t nb_band /* i : number of CLDFB bands to process */ +) +{ + int16_t iBlock, iBand, m, n; + float gains[MAX_CICP_CHANNELS - 1][MAX_CICP_CHANNELS - 1]; + int16_t azimuth, elevation; + float Rmat[3][3]; + float g1; + float realRot[MAX_CICP_CHANNELS - 1][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX]; + float imagRot[MAX_CICP_CHANNELS - 1][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX]; + float *p_realRot, *p_imagRot; + float *p_real, *p_imag; + int16_t nInChannels; + int16_t isPlanar; + + wmops_sub_start( "rotateFrame_sd_cldfb" ); + + nInChannels = hOutputSetup->nchan_out_woLFE; + isPlanar = 1; + for ( n = 0; n < nInChannels; n++ ) + { + if ( hOutputSetup->ls_elevation[n] != 0 ) + { + isPlanar = 0; + break; + } + } + + /* Get next quaternion and calculate rotation matrix */ + QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], Rmat ); + + /* rotation of Euler angles */ + for ( n = 0; n < nInChannels; n++ ) + { + rotateAziEle( hOutputSetup->ls_azimuth[n], hOutputSetup->ls_elevation[n], &azimuth, &elevation, Rmat, isPlanar ); + if ( hEFAPdata != NULL && ( hOutputSetup->ls_azimuth[n] != azimuth || hOutputSetup->ls_elevation[n] != elevation ) ) + { + efap_determine_gains( hEFAPdata, gains[n], azimuth, elevation, EFAP_MODE_EFAP ); + } + else + { + set_zero( gains[n], nInChannels ); + gains[n][n] = 1.0f; + } + } + + /* Apply panning gains by mtx multiplication*/ + for ( n = 0; n < nInChannels; n++ ) + { + set_zero( realRot[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_band ); + set_zero( imagRot[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_band ); + for ( m = 0; m < nInChannels; m++ ) + { + g1 = gains[m][n]; + p_realRot = realRot[n]; + p_imagRot = imagRot[n]; + if ( g1 > 0.f ) + { + for ( iBlock = 0; iBlock < MAX_PARAM_SPATIAL_SUBFRAMES; iBlock++ ) + { + p_real = Cldfb_RealBuffer[m][iBlock]; + p_imag = Cldfb_ImagBuffer[m][iBlock]; + for ( iBand = 0; iBand < nb_band; iBand++ ) + { + *( p_realRot ) = *p_realRot + g1 * *( p_real++ ); + *( p_imagRot ) = *p_imagRot + g1 * *( p_imag++ ); + p_realRot++; + p_imagRot++; + } + } + } + } + } + + for ( n = 0; n < nInChannels; n++ ) + { + p_realRot = realRot[n]; + p_imagRot = imagRot[n]; + for ( iBlock = 0; iBlock < MAX_PARAM_SPATIAL_SUBFRAMES; iBlock++ ) + { + p_real = Cldfb_RealBuffer[n][iBlock]; + p_imag = Cldfb_ImagBuffer[n][iBlock]; + for ( iBand = 0; iBand < nb_band; iBand++ ) + { + *( p_real++ ) = *( p_realRot++ ); + *( p_imag++ ) = *( p_imagRot++ ); + } + for ( ; iBand < CLDFB_NO_CHANNELS_MAX; iBand++ ) + { + *( p_real++ ) = 0.f; + *( p_imag++ ) = 0.f; + } + } + } + wmops_sub_end(); + + return; +} + +/*-----------------------------------------------------------------------* + * Local Function definitions + *-----------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------- + * Helper functions used by SHrotmatgen, + * an implementation of the algorithm in + * Ivanic, J. & Ruedenberg, K., J. Phys. Chem. 100, 6342 (1996) + *------------------------------------------------------------------------*/ + +static float SHrot_p( + const int16_t i, + const int16_t l, + const int16_t a, + const int16_t b, + float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], + float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) +{ + float ri1 = 0.0f, rim1 = 0.0f, ri0 = 0.0f, p = 0.0f, R_lm1_1 = 0.0f, R_lm1_2 = 0.0f; + + ri1 = SHrotmat[i + 1 + 1][1 + 1 + 1]; + rim1 = SHrotmat[i + 1 + 1][-1 + 1 + 1]; + ri0 = SHrotmat[i + 1 + 1][0 + 1 + 1]; + + if ( b == -l ) + { + R_lm1_1 = R_lm1[a + l - 1][0]; + R_lm1_2 = R_lm1[a + l - 1][2 * l - 2]; + p = ri1 * R_lm1_1 + rim1 * R_lm1_2; + } + else + { + if ( b == l ) + { + R_lm1_1 = R_lm1[a + l - 1][2 * l - 2]; + R_lm1_2 = R_lm1[a + l - 1][0]; + p = ri1 * R_lm1_1 - rim1 * R_lm1_2; + } + else + { + R_lm1_1 = R_lm1[a + l - 1][b + l - 1]; + p = ri0 * R_lm1_1; + } + } + + return p; +} + +static float SHrot_u( + const int16_t l, + const int16_t m, + const int16_t n, + float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], + float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) +{ + return SHrot_p( 0, l, m, n, SHrotmat, R_lm1 ); +} + +static float SHrot_v( + const int16_t l, + const int16_t m, + const int16_t n, + float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], + float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) +{ + + float d = 0.0f; + float p0 = 0.0f, p1 = 0.0f; + + if ( m == 0 ) + { + p0 = SHrot_p( 1, l, 1, n, SHrotmat, R_lm1 ); + p1 = SHrot_p( -1, l, -1, n, SHrotmat, R_lm1 ); + return p0 + p1; + } + else + { + if ( m > 0 ) + { + d = ( m == 1 ) ? 1.0f : 0.0f; + p0 = SHrot_p( 1, l, m - 1, n, SHrotmat, R_lm1 ); + p1 = SHrot_p( -1, l, -m + 1, n, SHrotmat, R_lm1 ); + return p0 * sqrtf( 1.0f + d ) - p1 * ( 1.0f - d ); + } + else + { + d = ( m == -1 ) ? 1.0f : 0.0f; + p0 = SHrot_p( 1, l, m + 1, n, SHrotmat, R_lm1 ); + p1 = SHrot_p( -1, l, -m - 1, n, SHrotmat, R_lm1 ); + return p0 * ( 1.0f - d ) + p1 * sqrtf( 1.0f + d ); + } + } +} + +static float SHrot_w( + const int16_t l, + const int16_t m, + const int16_t n, + float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], + float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) +{ + float p0 = 0.0f; + float p1 = 0.0f; + + if ( m == 0 ) + { + printf( "ERROR should not be called\n" ); + return 0.0; + } + else + { + if ( m > 0 ) + { + p0 = SHrot_p( 1, l, m + 1, n, SHrotmat, R_lm1 ); + p1 = SHrot_p( -1, l, -m - 1, n, SHrotmat, R_lm1 ); + return p0 + p1; + } + else + { + p0 = SHrot_p( 1, l, m - 1, n, SHrotmat, R_lm1 ); + p1 = SHrot_p( -1, l, -m + 1, n, SHrotmat, R_lm1 ); + return p0 - p1; + } + } +} + +static void SHrotmatgen( + float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], /* o : rotation matrix in SHD */ + float Rmat[3][3], /* i : real-space rotation matrix */ + const int16_t order /* i : ambisonics order */ +) +{ + int16_t d = 0; + int16_t band_idx = 0; + int16_t i, j; + int16_t l, m, n; + int16_t absm; + float sqdenom = 0.0f, sql2mm2 = 0.0f, sqdabsm = 0.0f, sqlabsm = 0.0f; + float u = 0.0f, v = 0.0f, w = 0.0f; + float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; + float R_l[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; + + SHrotmat[0][0] = 1.0f; + + SHrotmat[1][1] = Rmat[1][1]; + SHrotmat[1][2] = Rmat[1][2]; + SHrotmat[1][3] = Rmat[1][0]; + + SHrotmat[2][1] = Rmat[2][1]; + SHrotmat[2][2] = Rmat[2][2]; + SHrotmat[2][3] = Rmat[2][0]; + + SHrotmat[3][1] = Rmat[0][1]; + SHrotmat[3][2] = Rmat[0][2]; + SHrotmat[3][3] = Rmat[0][0]; + + for ( i = 0; i < 2 * 1 + 1; i++ ) + { + for ( j = 0; j < 2 * 1 + 1; j++ ) + { + R_lm1[i][j] = SHrotmat[i + 1][j + 1]; + } + } + + band_idx = 4; + for ( l = 2; l <= order; l++ ) + { + set_zero( &R_l[0][0], HEADROT_SHMAT_DIM2 ); + + for ( m = -l; m <= l; m++ ) + { + d = ( m == 0 ) ? 1 : 0; + absm = (int16_t) abs( m ); + sql2mm2 = sqrtf( (float) ( l * l - m * m ) ); + sqdabsm = sqrtf( (float) ( ( 1 + d ) * ( l + absm - 1 ) * ( l + absm ) ) ); + sqlabsm = sqrtf( (float) ( ( l - absm - 1 ) * ( l - absm ) ) ); + + for ( n = -l; n <= l; n++ ) + { + if ( abs( n ) == l ) + { + sqdenom = sqrtf( (float) ( ( 2 * l ) * ( 2 * l - 1 ) ) ); + } + else + { + sqdenom = sqrtf( (float) ( l * l - n * n ) ); + } + + u = sql2mm2 / sqdenom; + v = sqdabsm / sqdenom * ( 1 - 2 * d ) * 0.5f; + w = sqlabsm / sqdenom * ( 1 - d ) * ( -0.5f ); + + if ( u != 0 ) + { + u = u * SHrot_u( l, m, n, SHrotmat, R_lm1 ); + } + if ( v != 0 ) + { + v = v * SHrot_v( l, m, n, SHrotmat, R_lm1 ); + } + if ( w != 0 ) + { + w = w * SHrot_w( l, m, n, SHrotmat, R_lm1 ); + } + R_l[m + l][n + l] = u + v + w; + } + } + + for ( i = 0; i < 2 * l + 1; i++ ) + { + for ( j = 0; j < 2 * l + 1; j++ ) + { + SHrotmat[band_idx + i][band_idx + j] = R_l[i][j]; + } + } + + for ( i = 0; i < 2 * l + 1; i++ ) + { + for ( j = 0; j < 2 * l + 1; j++ ) + { + R_lm1[i][j] = R_l[i][j]; + } + } + + band_idx += 2 * l + 1; + } + + return; +} diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c new file mode 100644 index 0000000000..5802dae2b3 --- /dev/null +++ b/lib_dec/ivas_sba_dec.c @@ -0,0 +1,989 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void ivas_sba_dmx_dec( float sba_data[][L_FRAME48k], const int16_t nchan_transport, const int16_t output_frame ); + +#ifdef DEBUG_MODE_DIRAC +static void debug_mode_dirac( float output[MAX_OUTPUT_CHANNELS][L_FRAME48k], const int16_t nchan_transport, const int16_t output_frame ); +#endif + + +/*-------------------------------------------------------------------------* + * ivas_mc2sba() + * + * MC signals transformed into SBA in TD domain + *-------------------------------------------------------------------------*/ + +void ivas_mc2sba( + IVAS_OUTPUT_SETUP hIntSetup, /* i : Format of decoder output */ + float buffer_td[][L_FRAME48k], /* i/o: MC signals (on input) and the HOA3 (on output) */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + const float gain_lfe /* i : gain for LFE, 0 = ignore LFE */ +) +{ + int16_t i, j, k; + int16_t idx_lfe, idx_in; + float buffer_tmp[16][L_FRAME48k]; + float gains[16]; + int16_t azimuth, elevation; + int16_t sba_num_chans; + + assert( ( sba_order <= 3 ) && "Only order up to 3 is supported!" ); + + /* Init*/ + sba_num_chans = ( sba_order + 1 ) * ( sba_order + 1 ); + for ( j = 0; j < sba_num_chans; j++ ) + { + set_zero( buffer_tmp[j], output_frame ); + } + + /* HOA encoding*/ + idx_lfe = 0; + idx_in = 0; + for ( i = 0; i < hIntSetup.nchan_out_woLFE + hIntSetup.num_lfe; i++ ) + { + if ( ( hIntSetup.num_lfe > 0 ) && ( i == hIntSetup.index_lfe[idx_lfe] ) ) + { + if ( gain_lfe > 0.f ) + { + /* Add LFE to omni W with gain*/ + for ( k = 0; k < output_frame; k++ ) + { + buffer_tmp[0][k] += gain_lfe * buffer_td[i][k]; + } + } + + if ( idx_lfe < ( hIntSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else + { + azimuth = (int16_t) ( hIntSetup.ls_azimuth[idx_in] ); + elevation = (int16_t) ( hIntSetup.ls_elevation[idx_in] ); + idx_in++; + + /* get HOA response for direction (ACN/SN3D)*/ + ivas_dirac_dec_get_response( + azimuth, + elevation, + gains, + sba_order ); + + for ( j = 0; j < sba_num_chans; j++ ) + { + for ( k = 0; k < output_frame; k++ ) + { + buffer_tmp[j][k] += gains[j] * buffer_td[i][k]; + } + } + } + } + + for ( j = 0; j < sba_num_chans; j++ ) + { + mvr2r( buffer_tmp[j], buffer_td[j], output_frame ); + } + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_sba2MC_cldfb() + * + * SBA signals transformed into MC in CLDFB domain + *-------------------------------------------------------------------------*/ + +void ivas_sba2mc_cldfb( + IVAS_OUTPUT_SETUP hInSetup, /* i : Format of input layout */ + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb real part */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb imag part */ + const int16_t nb_channels_out, /* i : nb of output channels */ + const int16_t nb_bands, /* i : nb of CLDFB bands to process */ + const float *hoa_dec_mtx /* i : hoa decoding mtx */ +) +{ + int16_t iBlock, iBand, n, m; + float realOut[16][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX], imagOut[16][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX]; + float g; + float *p_real, *p_imag, *p_realOut, *p_imagOut; + int16_t nb_channels_in; + + wmops_sub_start( "ivas_sba2mc_cldfb" ); + + nb_channels_in = hInSetup.nchan_out_woLFE; + assert( ( nb_channels_in == 16 ) && ( nb_channels_out == 11 ) && "ivas_sba2mc_cldfb; only HOA3 to CICP19 is for now supported!" ); + + for ( n = 0; n < nb_channels_out; n++ ) + { + set_zero( realOut[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_bands ); + set_zero( imagOut[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_bands ); + + for ( m = 0; m < nb_channels_in; m++ ) + { + g = hoa_dec_mtx[SBA_NHARM_HOA3 * n + m]; + p_realOut = realOut[n]; + p_imagOut = imagOut[n]; + for ( iBlock = 0; iBlock < MAX_PARAM_SPATIAL_SUBFRAMES; iBlock++ ) + { + p_real = RealBuffer[m][iBlock]; + p_imag = ImagBuffer[m][iBlock]; + for ( iBand = 0; iBand < nb_bands; iBand++ ) + { + *p_realOut = *p_realOut + g * *( p_real++ ); + *p_imagOut = *p_imagOut + g * *( p_imag++ ); + p_realOut++; + p_imagOut++; + } + } + } + } + + for ( n = 0; n < nb_channels_out; n++ ) + { + p_realOut = realOut[n]; + p_imagOut = imagOut[n]; + for ( iBlock = 0; iBlock < MAX_PARAM_SPATIAL_SUBFRAMES; iBlock++ ) + { + p_real = RealBuffer[n][iBlock]; + p_imag = ImagBuffer[n][iBlock]; + for ( iBand = 0; iBand < nb_bands; iBand++ ) + { + *( p_real++ ) = *p_realOut++; + *( p_imag++ ) = *p_imagOut++; + } + } + } + + wmops_sub_end(); + + return; +} + +/*-------------------------------------------------------------------* + * ivas_sba_remapTCs() + * + * Get TCs from Ambisonics signal in ACN + *-------------------------------------------------------------------*/ + +int16_t ivas_sba_remapTCs( + float sba_data[][L_FRAME48k], /* i/o: SBA signals */ + Decoder_Struct *st_ivas, /* i/o: decoder struct */ + const int16_t output_frame /* i : frame length */ +) +{ + int16_t nchan_remapped; + +#ifdef DEBUG_MODE_DIRAC + debug_mode_dirac( sba_data, st_ivas->nchan_transport, output_frame ); +#endif + + nchan_remapped = st_ivas->nchan_transport; + if ( ( st_ivas->sba_mode != SBA_MODE_SPAR && st_ivas->sba_planar && nchan_remapped >= 3 ) || + ( ( st_ivas->sba_mode == SBA_MODE_SPAR ) && nchan_remapped == 3 ) ) + { + + nchan_remapped++; + if ( st_ivas->sba_mode != SBA_MODE_SPAR ) + { + assert( ( ( st_ivas->nchan_transport == 3 ) || ( st_ivas->nchan_transport == 5 ) || ( st_ivas->nchan_transport == 7 ) ) && "Number of channels must be odd for sba planar!" ); + } + + if ( nchan_remapped == 4 ) + { + /*For planar A-format channel 2 and 3 are identical -> Z=0*/ + mvr2r( sba_data[2], sba_data[3], output_frame ); + } + } + + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + int16_t i = 0; + float temp; + + if ( st_ivas->nchan_transport >= 3 ) + { + /*convert WYXZ downmix to WYZX*/ + for ( i = 0; i < output_frame; i++ ) + { + temp = sba_data[2][i]; + sba_data[2][i] = sba_data[3][i]; + sba_data[3][i] = temp; + if ( st_ivas->nchan_transport == 3 ) + { + sba_data[2][i] = 0; + } + } + } + } + else + { + ivas_sba_dmx_dec( sba_data, nchan_remapped, output_frame ); + } + + if ( st_ivas->sba_mode != SBA_MODE_SPAR ) + { + ivas_sba_zero_vert_comp( sba_data, st_ivas->sba_order, st_ivas->sba_planar, output_frame ); + } + return ( nchan_remapped ); +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dmx_dec() + * + * + *-------------------------------------------------------------------*/ + +static void ivas_sba_dmx_dec( + float sba_data[][L_FRAME48k], /* i : SBA signals */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t output_frame /* i : frame length */ +) +{ + int16_t i; + float tmp_f[DIRAC_MAX_TRANS_CHANS]; + + if ( nchan_transport >= 7 ) + { + for ( i = 0; i < output_frame; i++ ) + { + tmp_f[0] = 0.506415f * sba_data[0][i] + 0.506415f * sba_data[1][i] + 0.506415f * sba_data[2][i] + 0.506415f * sba_data[3][i] + 0.506415f * sba_data[4][i] + 0.506415f * sba_data[5][i] + 0.506415f * sba_data[6][i]; + tmp_f[1] = -0.000000f * sba_data[0][i] + 0.531020f * sba_data[1][i] + 0.662171f * sba_data[2][i] + 0.294694f * sba_data[3][i] + -0.294694f * sba_data[4][i] + -0.662171f * sba_data[5][i] + -0.531020f * sba_data[6][i]; + tmp_f[2] = 0.679200f * sba_data[0][i] + 0.423475f * sba_data[1][i] + -0.151136f * sba_data[2][i] + -0.611938f * sba_data[3][i] + -0.611938f * sba_data[4][i] + -0.151136f * sba_data[5][i] + 0.423475f * sba_data[6][i]; + tmp_f[3] = 0.000000f * sba_data[0][i] + 0.833385f * sba_data[1][i] + -0.370891f * sba_data[2][i] + -0.668323f * sba_data[3][i] + 0.668323f * sba_data[4][i] + 0.370891f * sba_data[5][i] + -0.833385f * sba_data[6][i]; + tmp_f[4] = 0.854817f * sba_data[0][i] + -0.190215f * sba_data[1][i] + -0.770164f * sba_data[2][i] + 0.532970f * sba_data[3][i] + 0.532970f * sba_data[4][i] + -0.770164f * sba_data[5][i] + -0.190215f * sba_data[6][i]; + tmp_f[5] = 0.000000f * sba_data[0][i] + 0.691125f * sba_data[1][i] + -1.245365f * sba_data[2][i] + 1.552944f * sba_data[3][i] + -1.552944f * sba_data[4][i] + 1.245365f * sba_data[5][i] + -0.691125f * sba_data[6][i]; + tmp_f[6] = 1.592881f * sba_data[0][i] + -1.435137f * sba_data[1][i] + 0.993145f * sba_data[2][i] + -0.354449f * sba_data[3][i] + -0.354449f * sba_data[4][i] + 0.993145f * sba_data[5][i] + -1.435137f * sba_data[6][i]; + + sba_data[0][i] = tmp_f[0]; + sba_data[1][i] = tmp_f[1]; + sba_data[2][i] = sba_data[7][i]; + sba_data[3][i] = tmp_f[2]; + sba_data[4][i] = tmp_f[3]; + sba_data[8][i] = tmp_f[4]; + sba_data[9][i] = tmp_f[5]; + sba_data[15][i] = tmp_f[6]; + } + + return; + } + else if ( nchan_transport >= 5 ) + { + for ( i = 0; i < output_frame; i++ ) + { + tmp_f[0] = 0.708982f * sba_data[0][i] + 0.708982f * sba_data[1][i] + 0.708982f * sba_data[2][i] + 0.708982f * sba_data[3][i] + 0.708982f * sba_data[4][i]; + tmp_f[1] = 0.000000f * sba_data[0][i] + 1.005966f * sba_data[1][i] + 0.621721f * sba_data[2][i] + -0.621721f * sba_data[3][i] + -1.005966f * sba_data[4][i]; + tmp_f[2] = 1.057735f * sba_data[0][i] + 0.326858f * sba_data[1][i] + -0.855726f * sba_data[2][i] + -0.855726f * sba_data[3][i] + 0.326858f * sba_data[4][i]; + tmp_f[3] = 0.000000f * sba_data[0][i] + 1.079884f * sba_data[1][i] + -1.747289f * sba_data[2][i] + 1.747289f * sba_data[3][i] + -1.079884f * sba_data[4][i]; + tmp_f[4] = 1.837208f * sba_data[0][i] + -1.486333f * sba_data[1][i] + 0.567729f * sba_data[2][i] + 0.567729f * sba_data[3][i] + -1.486333f * sba_data[4][i]; + + sba_data[0][i] = tmp_f[0]; + sba_data[1][i] = tmp_f[1]; + sba_data[2][i] = sba_data[5][i]; + sba_data[3][i] = tmp_f[2]; + sba_data[4][i] = tmp_f[3]; + sba_data[8][i] = tmp_f[4]; + } + + return; + } + else if ( nchan_transport >= 3 ) + { + + /*A-format to ACN/SN3D*/ + for ( i = 0; i < output_frame; i++ ) + { + tmp_f[0] = 0.5f * ( sba_data[0][i] + sba_data[1][i] + sba_data[2][i] + sba_data[3][i] ); + tmp_f[1] = sba_data[0][i] - sba_data[1][i]; + tmp_f[2] = sba_data[2][i] - sba_data[3][i]; + tmp_f[3] = sba_data[0][i] + sba_data[1][i] - sba_data[2][i] - sba_data[3][i]; + + sba_data[0][i] = tmp_f[0]; + sba_data[1][i] = tmp_f[1]; + sba_data[2][i] = tmp_f[2]; + sba_data[3][i] = tmp_f[3]; + } + + return; + } + else if ( nchan_transport == 2 ) + { + /* do nothing for stereo DMX, upmix done in DirAC*/ + return; + } + else if ( nchan_transport == 1 ) + { + /* do nothing; simply use omni */ + return; + } + else + { + assert( 0 && "SBA: number of transport channels not supported." ); + } +} + + +/*-------------------------------------------------------------------------* + * ivas_ism2sba() + * + * ISM transformed into SBA in TD domain. + *-------------------------------------------------------------------------*/ + +void ivas_ism2sba( + float buffer_td[][L_FRAME48k], /* i/o: TD signal buffers */ + ISM_RENDERER_HANDLE hIsmRendererData, /* i/o: renderer data */ + const ISM_METADATA_HANDLE hIsmMetaData[], /* i : object metadata */ + const int16_t num_objects, /* i : number of objects */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t sba_order /* i : Ambisonic (SBA) order */ +) +{ + int16_t i, j, k; + float buffer_tmp[16][L_FRAME48k]; + float gains[16]; + float g1, g2; + int16_t azimuth, elevation; + int16_t sba_num_chans; + + assert( ( sba_order <= 3 ) && "Only order up to 3 is supported!" ); + assert( hIsmRendererData != NULL && "hIsmRendererData not allocated!" ); + + /* Init*/ + sba_num_chans = ( sba_order + 1 ) * ( sba_order + 1 ); + for ( j = 0; j < sba_num_chans; j++ ) + { + set_zero( buffer_tmp[j], output_frame ); + } + + for ( i = 0; i < num_objects; i++ ) + { + azimuth = (int16_t) ( hIsmMetaData[i]->azimuth + 0.5f ); + elevation = (int16_t) ( hIsmMetaData[i]->elevation + 0.5f ); + + /*get HOA gets for direction (ACN/SN3D)*/ + ivas_dirac_dec_get_response( + azimuth, + elevation, + gains, + sba_order ); + + for ( j = 0; j < sba_num_chans; j++ ) + { + g2 = 0.f; + for ( k = 0; k < output_frame; k++ ) + { + g2 += 1.f / output_frame; + g1 = 1.0f - g2; + buffer_tmp[j][k] += ( g2 * gains[j] + g1 * hIsmRendererData->prev_gains[i][j] ) * buffer_td[i][k]; + } + hIsmRendererData->prev_gains[i][j] = gains[j]; + } + } + + for ( j = 0; j < sba_num_chans; j++ ) + { + mvr2r( buffer_tmp[j], buffer_td[j], output_frame ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dec_decoder() + * + * Reconfigure IVAS SBA decoder + *-------------------------------------------------------------------*/ + +ivas_error ivas_sba_dec_reconfigure( + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +) +{ + int16_t n; + int16_t sce_id, cpe_id; + int16_t nchan_transport; + int16_t nchan_transport_old; + int32_t sba_total_brate; + int16_t nSCE_old; + int16_t nCPE_old; + AUDIO_CONFIG intern_config_old; + int16_t numCldfbAnalyses_old; + int16_t numCldfbAnalyses; + int16_t numCldfbSyntheses; + int16_t numCldfbSyntheses_old; + int16_t sba_dirac_stereo_flag_old; + uint16_t i; + int32_t ivas_total_brate, last_ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate; + + /*-----------------------------------------------------------------* + * Allocate, initalize, and configure SBA and rendering handles + *-----------------------------------------------------------------*/ + + ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); + numCldfbAnalyses = 0; + sba_total_brate = ivas_total_brate; + + + nSCE_old = st_ivas->nSCE; + nCPE_old = st_ivas->nCPE; + nchan_transport_old = st_ivas->nchan_transport; + sba_dirac_stereo_flag_old = st_ivas->sba_dirac_stereo_flag; + + ivas_sba_config( sba_total_brate, st_ivas->sba_order, -1, &nchan_transport, st_ivas->sba_planar, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init, st_ivas->sba_mode ); + st_ivas->nchan_transport = nchan_transport; + + /* renderer might have changed */ + intern_config_old = st_ivas->intern_config; + ivas_renderer_select( st_ivas ); + + /* side effect of the renderer selection can be a changed internal config */ + if ( st_ivas->intern_config != intern_config_old ) + { + ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); + } + + if ( st_ivas->sba_mode != SBA_MODE_SPAR ) + { + st_ivas->sba_dirac_stereo_flag = ( st_ivas->nchan_transport == 1 && st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ); + if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_order, st_ivas->sba_planar, st_ivas->sba_mode, -1 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + int16_t sba_order_internal; + sba_order_internal = min( st_ivas->sba_order, IVAS_MAX_SBA_ORDER ); + ivas_spar_config( st_ivas->hDecoderConfig->ivas_total_brate, sba_order_internal, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->hSpar->hSparFoa->core_nominal_brate, st_ivas->sid_format ); + + if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_order, st_ivas->sba_planar, + st_ivas->sba_mode, IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_SBA_LINEAR_DEC && + ( last_ivas_total_brate > IVAS_SID_4k4 || nchan_transport != nchan_transport_old ) && ( st_ivas->sba_mode != SBA_MODE_SPAR ) ) + { + if ( st_ivas->hDirAC != NULL ) + { + if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( st_ivas->renderer_type == RENDERER_DISABLE || ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC && st_ivas->sba_mode != SBA_MODE_SPAR ) ) + { + if ( st_ivas->hDirAC != NULL ) + { + ivas_dirac_dec_close( st_ivas->hDirAC ); + st_ivas->hDirAC = NULL; + } + + if ( st_ivas->hVBAPdata != NULL ) + { + vbap_free_data( &( st_ivas->hVBAPdata ) ); + } + } + + + /*-----------------------------------------------------------------* + * Allocate, initalize, and configure SCE/CPE/MCT handles + *-----------------------------------------------------------------*/ + + if ( nchan_transport == nchan_transport_old ) + { + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + } + + if ( st_ivas->nCPE > 1 ) + { + if ( ( error = mct_dec_reconfigure( st_ivas, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else + { + int16_t nSCE_existing; + int16_t nCPE_existing; + + nSCE_existing = min( nSCE_old, st_ivas->nSCE ); + nCPE_existing = min( nCPE_old, st_ivas->nCPE ); + + /* destroy superfluous core coder elements */ + for ( sce_id = st_ivas->nSCE; sce_id < nSCE_old; sce_id++ ) + { + destroy_sce_dec( st_ivas->hSCE[sce_id] ); + st_ivas->hSCE[sce_id] = NULL; + + /* remove dummy CPE needed for 1TC->Stereo rendering via DFT stereo*/ + if ( sba_dirac_stereo_flag_old ) + { +#ifdef DEBUGGING + assert( st_ivas->hCPE[0] ); +#endif + st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hCPE[0]->hCoreCoder[1] = NULL; + destroy_cpe_dec( st_ivas->hCPE[0] ); + st_ivas->hCPE[0] = NULL; + } + } + + for ( cpe_id = st_ivas->nCPE; cpe_id < nCPE_old; cpe_id++ ) + { + destroy_cpe_dec( st_ivas->hCPE[cpe_id] ); + st_ivas->hCPE[cpe_id] = NULL; + } + + if ( st_ivas->nCPE <= 1 && st_ivas->hMCT != NULL ) + { + ivas_mct_dec_close( &st_ivas->hMCT ); + } + + /* special case, if we have MCT now and had a single CPE before, remove the MDCT Stereo handles from the first CPE*/ + if ( st_ivas->nCPE > 1 && nCPE_old == 1 ) + { + count_free( st_ivas->hCPE[0]->hStereoMdct ); + st_ivas->hCPE[0]->hStereoMdct = NULL; + } + + for ( sce_id = 0; sce_id < nSCE_existing; sce_id++ ) + { + st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + for ( ; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ ) + { + st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + } + for ( ; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* create CPE element for DFT Stereo like upmix */ + if ( st_ivas->sba_dirac_stereo_flag ) + { + if ( ( error = create_cpe_dec( st_ivas, 0, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ + } + + if ( st_ivas->nCPE > 1 && nCPE_old <= 1 ) + { + if ( nCPE_old == 1 ) + { + /* set correct nominal bitrates and igf config already here, needed for the correct init of the MDCT Stereo handles for MCT */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[0]->hCoreCoder[n]->total_brate = st_ivas->hCPE[0]->element_brate; + st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[0]->element_brate / FRAMES_PER_SEC ); + st_ivas->hCPE[0]->hCoreCoder[n]->igf = 0; + } + } + + if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->hMCT != NULL && st_ivas->nCPE > 1 ) + { + if ( ( error = mct_dec_reconfigure( st_ivas, st_ivas->nCPE != nCPE_old ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* special case, if we have a single CPE and had MCT before we need to init the MDCT stereo handles here */ + if ( st_ivas->nCPE == 1 && nCPE_old > 1 ) + { + if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + + st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->use_itd = 0; + st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->reverse_dmx = 0; + st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->smooth_ratio = 1.f; + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + /* reset mct_chan_mode */ + st_ivas->hCPE[0]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + } + } + + /*-----------------------------------------------------------------* + * HP20 memories + *-----------------------------------------------------------------*/ + + if ( nchan_transport > nchan_transport_old ) + { + /* create additional hp20 mems */ + float **old_mem_hp20_out; + uint16_t n_old; + + if ( sba_dirac_stereo_flag_old ) + { + n_old = CPE_CHANNELS; + } + else + { + n_old = nchan_transport_old; + } + n = st_ivas->nchan_transport; + + /* save old mem_hp_20 pointer */ + old_mem_hp20_out = st_ivas->mem_hp20_out; + st_ivas->mem_hp20_out = NULL; + if ( ( st_ivas->mem_hp20_out = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); + } + + for ( i = 0; i < n_old; i++ ) + { + st_ivas->mem_hp20_out[i] = old_mem_hp20_out[i]; + old_mem_hp20_out[i] = NULL; + } + for ( ; i < nchan_transport; i++ ) + { + if ( ( st_ivas->mem_hp20_out[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); + } + + set_f( st_ivas->mem_hp20_out[i], 0.0f, L_HP20_MEM ); + } + + count_free( old_mem_hp20_out ); + old_mem_hp20_out = NULL; + } + else if ( nchan_transport < nchan_transport_old ) + { + /* remove superfluous hp20 mems */ + float **old_mem_hp20_out; + + if ( st_ivas->sba_dirac_stereo_flag ) + { + n = CPE_CHANNELS; + } + else + { + n = st_ivas->nchan_transport; + } + + /* save old mem_hp_20 pointer */ + old_mem_hp20_out = st_ivas->mem_hp20_out; + st_ivas->mem_hp20_out = NULL; + if ( ( st_ivas->mem_hp20_out = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); + } + + for ( i = 0; i < n; i++ ) + + { + st_ivas->mem_hp20_out[i] = old_mem_hp20_out[i]; + old_mem_hp20_out[i] = NULL; + } + for ( ; i < nchan_transport_old; i++ ) + { + count_free( old_mem_hp20_out[i] ); + old_mem_hp20_out[i] = NULL; + } + + count_free( old_mem_hp20_out ); + old_mem_hp20_out = NULL; + } + } + + /*-----------------------------------------------------------------* + * CLDFB instances + *-----------------------------------------------------------------*/ + + ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses, &numCldfbSyntheses ); + + /* special case, if there was one transport channel in the previous frame and more than one in the current frame, + remove the second CLDFB here, it was for CNA/CNG */ + if ( nchan_transport_old == 1 && numCldfbAnalyses_old == 2 && nchan_transport > 1 ) + { + deleteCldfb( &( st_ivas->cldfbAnaDec[1] ) ); + st_ivas->cldfbAnaDec[1] = NULL; + numCldfbAnalyses_old--; + } + + /* Analysis*/ + if ( numCldfbAnalyses_old > numCldfbAnalyses ) + { + /* delete superfluous CLDFB synthesis instances */ + for ( i = numCldfbAnalyses; i < numCldfbAnalyses_old; i++ ) + { + deleteCldfb( &( st_ivas->cldfbAnaDec[i] ) ); + st_ivas->cldfbAnaDec[i] = NULL; + } + } + else if ( numCldfbAnalyses_old < numCldfbAnalyses ) + { + /* create additional CLDFB synthesis instances */ + for ( i = numCldfbAnalyses_old; i < numCldfbAnalyses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas->cldfbAnaDec[i] ), CLDFB_ANALYSIS, st_ivas->hDecoderConfig->output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + /* Synthesis */ + if ( numCldfbSyntheses_old > numCldfbSyntheses ) + { + /* delete superfluous CLDFB synthesis instances */ + for ( i = numCldfbSyntheses; i < numCldfbSyntheses_old; i++ ) + { + deleteCldfb( &( st_ivas->cldfbSynDec[i] ) ); + st_ivas->cldfbSynDec[i] = NULL; + } + } + else if ( numCldfbSyntheses_old < numCldfbSyntheses ) + { + /* create additional CLDFB synthesis instances */ + for ( i = numCldfbSyntheses_old; i < numCldfbSyntheses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas->cldfbSynDec[i] ), CLDFB_SYNTHESIS, st_ivas->hDecoderConfig->output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + /*-----------------------------------------------------------------* + * Set CNA/CNG flags + *-----------------------------------------------------------------*/ + + if ( st_ivas->sba_mode == SBA_MODE_SPAR && st_ivas->nchan_transport == 1 ) + { + /* skip as done in init function */ + } + else if ( st_ivas->nchan_transport == 1 && ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) || ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) ) + { + st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 1; + st_ivas->hSCE[0]->hCoreCoder[0]->cng_dirac_flag = 1; + } + else if ( st_ivas->nchan_transport == 2 ) + { + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[0]->hCoreCoder[n]->cng_dirac_flag = 1; + st_ivas->hCPE[0]->hCoreCoder[n]->cng_spar_flag = 1; + } + } + else + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[0]->hCoreCoder[n]->cna_dirac_flag = 0; + st_ivas->hCPE[0]->hCoreCoder[n]->cng_dirac_flag = 1; + } + } + } + else + { + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cna_dirac_flag = 0; + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_dirac_flag = 0; + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_spar_flag = 0; + } + } + } + + /* special case, if the decoder goes from 1TC DTX to 2TC active frame (in case the bitstream started with an SBA SID frame), allocate DTX mems */ + if ( last_ivas_total_brate <= IVAS_SID_4k4 && st_ivas->nCPE >= 1 ) + { + if ( ( error = initMdctStereoDtxData( st_ivas->hCPE[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*-------------------------------------------------------------------* + * Reallocate and initialize binaural rendering handles + *--------------------------------------------------------------------*/ + + if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && st_ivas->hBinRenderer == NULL ) + { + /* open fastconv binaural renderer */ + if ( ( error = ivas_binRenderer_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->hBinRenderer != NULL && ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) ) + { + ivas_binRenderer_close( &st_ivas->hBinRenderer ); + } + + if ( st_ivas->hDiracDecBin == NULL && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) + { + /* open parametric binaural renderer */ + if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->hDiracDecBin != NULL && ( st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC ) ) + { + ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); + } + + return error; +} + + +#ifdef DEBUG_MODE_DIRAC +/*-----------------------------------------------------------------------* + * Debugging function + *-----------------------------------------------------------------------*/ + +static void debug_mode_dirac( + float output[MAX_OUTPUT_CHANNELS][L_FRAME48k], + const int16_t nchan_transport, + const int16_t output_frame ) +{ + int16_t i, n; + int16_t tmp[L_FRAME48k]; + char file_name[50] = { 0 }; + +#ifdef DEBUG_MODE_DIRAC_NOCORE + for ( n = 0; n < nchan_transport; n++ ) + { + sprintf( file_name, "./res/ivas_dirac_enc_%d.%d.pcm", n, (int16_t) ( output_frame * 0.05 ) ); + dbgread( tmp, sizeof( int16_t ), output_frame, file_name ); + for ( i = 0; i < output_frame; i++ ) + { + output[n][i] = (float) ( tmp[i] ); + } + } +#else + for ( n = 0; n < nchan_transport; n++ ) + { + for ( i = 0; i < output_frame; i++ ) + { + tmp[i] = (int16_t) ( output[n][i] + 0.5f ); + } + + sprintf( file_name, "./res/ivas_dirac_dec_%d.%d.pcm", n, (int16_t) ( output_frame * 0.05 ) ); + dbgwrite( tmp, sizeof( int16_t ), output_frame, 1, file_name ); + } +#endif + + return; +} +#endif diff --git a/lib_dec/ivas_sba_dirac_stereo_dec.c b/lib_dec/ivas_sba_dirac_stereo_dec.c new file mode 100644 index 0000000000..e4ab91a7d7 --- /dev/null +++ b/lib_dec/ivas_sba_dirac_stereo_dec.c @@ -0,0 +1,615 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_config() + * + * DFT Stereo Configuration for SBA DirAC stereo output + *-------------------------------------------------------------------*/ + +void ivas_sba_dirac_stereo_config( + STEREO_DFT_CONFIG_DATA_HANDLE hConfig /* o : DFT stereo configuration */ +) +{ + if ( hConfig != NULL ) + { +#ifndef DEBUG_STEREO_DFT_NOSTEREO + hConfig->dmx_active = STEREO_DFT_DMX_ACTIVE; +#else + hConfig->dmx_active = 0; +#endif + hConfig->band_res = STEREO_DFT_BAND_RES_HIGH; + hConfig->prm_res = 2; + +#ifdef DEBUG_MODE_DFT + hConfig->itd_mode = 0; + hConfig->gipd_mode = 0; +#endif + hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; + + hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; + hConfig->ada_wb_res_cod_mode = 0; + + hConfig->hybrid_itd_flag = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_band_config() + * + * Band Configuration for SBA DirAC stereo output + *-------------------------------------------------------------------*/ + +static int16_t ivas_sba_dirac_stereo_band_config( + int16_t *band_limits, /* o : DFT band limits */ + const int32_t output_Fs, /* i : output sampling rate */ + const int16_t NFFT /* i : analysis/synthesis window length */ +) +{ + int16_t i; + int16_t bins_per_cldfb_band; + int16_t nbands, num_cldfb_bands; + + nbands = SBA_DIRAC_STEREO_NUM_BANDS; + num_cldfb_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); + + bins_per_cldfb_band = NFFT / ( 2 * num_cldfb_bands ); + + band_limits[0] = 1; + for ( i = 1; i < nbands; i++ ) + { + band_limits[i] = DirAC_band_grouping_5[i] * bins_per_cldfb_band; + } + band_limits[nbands] = NFFT / 2; + + return nbands; +} + +static float get_panning( + const int16_t aziDeg, + const int16_t eleDeg ) +{ + float aziRad, eleRad, y, mappedX, aziRadMapped, panning; + float A, A2, A3; + const float LsAngleRad = 30.0f * PI_OVER_180; + + aziRad = aziDeg * PI_OVER_180; + eleRad = eleDeg * PI_OVER_180; + y = ( sinf( aziRad ) * cosf( eleRad ) ); + mappedX = sqrtf( max( 0.0f, 1.0f - ( y * y ) ) ); + aziRadMapped = atan2f( y, mappedX ); + + /* Determine the real valued amplitude panning gains */ + panning = 0.0f; + if ( aziRadMapped >= LsAngleRad ) + { /* Left side */ + panning = 1.0f; + } + else if ( aziRadMapped <= -LsAngleRad ) + { /* Right side */ + panning = -1.0f; + } + else /* Tangent panning law */ + { + A = tanf( aziRadMapped ) / tanf( LsAngleRad ); + A2 = ( A - 1.0f ) / max( 0.001f, A + 1.0f ); + A3 = 1.0f / ( A2 * A2 + 1.0f ); + panning = 2 * A3 - 1.0f; + } + return panning; +} + +/*-------------------------------------------------------------------* + * map_params_dirac_to_stereo() + * + * Compute DFT Stereo parameters from DirAC parameters + *-------------------------------------------------------------------*/ + +static void map_params_dirac_to_stereo( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ + float synth[], /* i : decoded downmix signal */ + float DFT[STEREO_DFT_BUF_MAX], /* i/o: DFT buffer */ + const uint8_t b_wide_panning, /* i : flag indicating wider panning */ + const int16_t L_frame /* i : core signal length */ + +) +{ + int16_t i, b, k, block; + int16_t k_offset; + int16_t nbands, nBlocks, block_len; + int16_t azimuth[MAX_PARAM_SPATIAL_SUBFRAMES][SBA_DIRAC_STEREO_NUM_BANDS]; + int16_t elevation[MAX_PARAM_SPATIAL_SUBFRAMES][SBA_DIRAC_STEREO_NUM_BANDS]; + float diffuseness[SBA_DIRAC_STEREO_NUM_BANDS]; + float surrCoh[SBA_DIRAC_STEREO_NUM_BANDS]; + float subframe_band_nrg[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; + float smooth_long_avg[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; + float smooth_short_avg[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; + float block_nrg[MAX_PARAM_SPATIAL_SUBFRAMES]; + float nrg_norm1, nrg_norm2; + float *side_gain, *res_pred_gain; + float *pSynth, *pDFT; + IVAS_QDIRECTION *q_direction; + + + nBlocks = MAX_PARAM_SPATIAL_SUBFRAMES; + nbands = SBA_DIRAC_STEREO_NUM_BANDS; + k_offset = STEREO_DFT_OFFSET; + side_gain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; + res_pred_gain = hStereoDft->res_pred_gain + k_offset * STEREO_DFT_BAND_MAX; + + q_direction = &( hQMetaData->q_direction[0] ); + + /* gain smoothing factor */ + pDFT = DFT; + for ( k = 0; k < NB_DIV; k++ ) + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + /* calculate band-wise subframe energies */ + subframe_band_nrg[k][b] = 0.f; + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + subframe_band_nrg[k][b] += pDFT[2 * i] * pDFT[2 * i] + pDFT[2 * i + 1] * pDFT[2 * i + 1]; + } + subframe_band_nrg[k][b] = sqrtf( subframe_band_nrg[k][b] ); + hStereoDft->smooth_buf[b][NB_DIV - 1 - k] = subframe_band_nrg[k][b]; + + /* calculate short and long energy averages */ + smooth_short_avg[k][b] = EPSILON; + for ( i = NB_DIV - 1 - k; i < SBA_DIRAC_NRG_SMOOTH_SHORT + NB_DIV - 1 - k; i++ ) + { + smooth_short_avg[k][b] += hStereoDft->smooth_buf[b][i]; + } + + smooth_long_avg[k][b] = smooth_short_avg[k][b]; + for ( i = NB_DIV - 1 - k + SBA_DIRAC_NRG_SMOOTH_SHORT; i < SBA_DIRAC_NRG_SMOOTH_LONG + NB_DIV - 1 - k; i++ ) + { + smooth_long_avg[k][b] += hStereoDft->smooth_buf[b][i]; + } + smooth_short_avg[k][b] /= SBA_DIRAC_NRG_SMOOTH_SHORT; + smooth_long_avg[k][b] /= SBA_DIRAC_NRG_SMOOTH_LONG; + + /* calculate smoothing factor based on energy averages */ + /* reduce factor for higher short-term energy */ + hStereoDft->smooth_fac[k][b] = min( 1.f, smooth_long_avg[k][b] / smooth_short_avg[k][b] ); + /* map factor to range [0;1] */ + hStereoDft->smooth_fac[k][b] = max( 0.f, hStereoDft->smooth_fac[k][b] - (float) SBA_DIRAC_NRG_SMOOTH_SHORT / SBA_DIRAC_NRG_SMOOTH_LONG ) * ( (float) SBA_DIRAC_NRG_SMOOTH_LONG / ( SBA_DIRAC_NRG_SMOOTH_LONG - SBA_DIRAC_NRG_SMOOTH_SHORT ) ); + /* compress factor (higher compression in lowest bands) */ + if ( b < 2 ) + { + hStereoDft->smooth_fac[k][b] = powf( hStereoDft->smooth_fac[k][b], 0.25f ); + } + else + { + hStereoDft->smooth_fac[k][b] = powf( hStereoDft->smooth_fac[k][b], 0.5f ); + } + + /* apply upper bounds depending on band */ + hStereoDft->smooth_fac[0][b] = min( max_smooth_gains[b], hStereoDft->smooth_fac[0][b] ); + hStereoDft->smooth_fac[1][b] = min( max_smooth_gains[b], hStereoDft->smooth_fac[1][b] ); + } + pDFT += STEREO_DFT32MS_N_MAX; + } + + /* calculate block energies for side gain weighting (combine angles of 2 DirAC blocks to side gain for 1 DFT Stereo subframe; 4 blocks and 2 subframes overall) */ + pSynth = synth; + block_len = L_frame / nBlocks; + for ( block = 0; block < nBlocks; block++ ) + { + block_nrg[block] = 0.f; + for ( i = 0; i < block_len; i++ ) + { + block_nrg[block] += pSynth[i] * pSynth[i]; + } + block_nrg[block] = sqrtf( block_nrg[block] ); + pSynth += block_len; + } + nrg_norm1 = 1 / ( block_nrg[0] + block_nrg[1] + EPSILON ); + nrg_norm2 = 1 / ( block_nrg[2] + block_nrg[3] + EPSILON ); + + /* extract DirAC parameters from metadata */ + for ( b = 0; b < nbands; b++ ) + { + diffuseness[b] = 1.0f - q_direction->band_data[b].energy_ratio[0]; + if ( hQMetaData->surcoh_band_data != NULL ) + { + surrCoh[b] = hQMetaData->surcoh_band_data[b].surround_coherence[0] / 255.0f; + } + else + { + surrCoh[b] = 0.0f; + } + + for ( block = 0; block < nBlocks; block++ ) + { + int16_t block_metadata; + + if ( hQMetaData->useLowerRes ) + { + block_metadata = 0; + } + else + { + block_metadata = block; + } + if ( q_direction->band_data[b].azimuth[block_metadata] < 0.f ) + { + q_direction->band_data[b].azimuth[block_metadata] += 360.f; + } + azimuth[block][b] = (int16_t) q_direction->band_data[b].azimuth[block_metadata]; + elevation[block][b] = (int16_t) q_direction->band_data[b].elevation[block_metadata]; + } + } + + /* map angles (azi, ele), surround coherence, and diffuseness to DFT Stereo side and prediction gains */ + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + /* combine angles of first 2 blocks to side gain of first subframe */ + side_gain[b] = 0.f; + for ( block = 0; block < nBlocks / 2; block++ ) + { + if ( b_wide_panning == 1 ) + { + /* panning between left and ride, saturate at the stereo ls positions (+/- 30deg azi) */ + side_gain[b] += nrg_norm1 * block_nrg[block] * get_panning( azimuth[block][b], elevation[block][b] ); + } + else + { + side_gain[b] += nrg_norm1 * block_nrg[block] * sinf( azimuth[block][b] * EVS_PI / 180 ) * cosf( elevation[block][b] * EVS_PI / 180 ); + } + } + + /* combine angles of last 2 blocks to side gain of second subframe */ + side_gain[b + STEREO_DFT_BAND_MAX] = 0.f; + for ( block = nBlocks / 2; block < nBlocks; block++ ) + { + if ( b_wide_panning == 1 ) + { + /* panning between left and ride, saturate at the stereo ls positions (+/- 30deg azi) */ + side_gain[b + STEREO_DFT_BAND_MAX] += nrg_norm2 * block_nrg[block] * get_panning( azimuth[block][b], elevation[block][b] ); + } + else + { + side_gain[b + STEREO_DFT_BAND_MAX] += nrg_norm2 * block_nrg[block] * sinf( azimuth[block][b] * EVS_PI / 180 ) * cosf( elevation[block][b] * EVS_PI / 180 ); + } + } + + side_gain[b] *= sqrtf( 1.f - diffuseness[b] ); + side_gain[b + STEREO_DFT_BAND_MAX] *= sqrtf( 1.f - diffuseness[b] ); + res_pred_gain[b] = diffuseness[b] * ( 1.0f - surrCoh[b] ); + res_pred_gain[b + STEREO_DFT_BAND_MAX] = diffuseness[b] * ( 1.0f - surrCoh[b] ); + } + + hStereoDft->frame_nodata = 0; + hStereoDft->frame_sid_nodata = 0; + hStereoDft->frame_sid = 0; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_compute_td_stefi_nrgs() + * + * Compute energies for TD stereo filling + *-------------------------------------------------------------------*/ + +static void ivas_sba_dirac_stereo_compute_td_stefi_nrgs( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const float hb_synth[L_FRAME48k], /* i : HB signal */ + const int16_t core, /* i : core decision */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t fd_cng_flag /* i : FD-CNG indicator */ +) +{ + int16_t i; + float hb_nrg = EPSILON; + float hb_nrg2 = EPSILON; + + if ( ( core == ACELP_CORE && !fd_cng_flag ) || hStereoDft->core_hist[1] == ACELP_CORE ) + { + for ( i = 0; i < output_frame / 2; i++ ) + { + hb_nrg2 += hb_synth[i] * hb_synth[i]; + } + + hStereoDft->hb_nrg_subr[0] = hb_nrg2; + hb_nrg += hb_nrg2; + hb_nrg2 = EPSILON; + + for ( ; i < output_frame; i++ ) + { + hb_nrg2 += hb_synth[i] * hb_synth[i]; + } + + hStereoDft->hb_nrg_subr[1] = hb_nrg2; + hb_nrg += hb_nrg2; + + mvr2r( hb_synth, hStereoDft->hb_stefi_sig + hStereoDft->hb_stefi_delay, output_frame ); + } + else + { + set_zero( hStereoDft->hb_stefi_sig + hStereoDft->hb_stefi_delay, output_frame ); + } + + hStereoDft->hb_nrg_subr[0] *= hStereoDft->NFFT / 2; + hStereoDft->hb_nrg_subr[1] *= hStereoDft->NFFT / 2; + hStereoDft->hb_nrg[0] = hb_nrg; + hStereoDft->td_gain[0] = 0; + hStereoDft->core_hist[0] = ( fd_cng_flag ) ? TCX_20_CORE : core; /* full signal available for DTX with FD-CNG, thus apply stereo filling on full spectrum like in TCX */ + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_compute_hb_gain() + * + * Compute HB gains + *-------------------------------------------------------------------*/ + +static void ivas_sba_dirac_stereo_compute_hb_gain( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + float hb_gain[NB_DIV] /* o : side gains for HB signal */ +) +{ + int16_t k_offset; + + k_offset = STEREO_DFT_OFFSET; + + /* last band covers whole HB range, no averaging needed */ + hb_gain[0] = hStereoDft->side_gain[k_offset * STEREO_DFT_BAND_MAX + hStereoDft->nbands - 1]; + hb_gain[1] = hStereoDft->side_gain[( k_offset + 1 ) * STEREO_DFT_BAND_MAX + hStereoDft->nbands - 1]; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_upmix_hb() + * + * Apply panning to HB signal + *-------------------------------------------------------------------*/ + +static void ivas_sba_dirac_stereo_upmix_hb( + float hb_stereo_synth[CPE_CHANNELS][L_FRAME48k], /* i/o: stereo HB synthesis signal */ + float hb_synth[L_FRAME48k], /* i : HB signal */ + float hb_gain[NB_DIV], /* i : side gains for HB signal */ + const int16_t output_frame /* i : output frame length per channel */ +) +{ + int16_t i; + + for ( i = 0; i < output_frame / 2; i++ ) + { + hb_stereo_synth[0][i] = 0.5f * hb_synth[i] + 0.5f * hb_gain[0] * hb_synth[i]; + hb_stereo_synth[1][i] = 0.5f * hb_synth[i] - 0.5f * hb_gain[0] * hb_synth[i]; + } + + for ( i = output_frame / 2; i < output_frame; i++ ) + { + hb_stereo_synth[0][i] = 0.5f * hb_synth[i] + 0.5f * hb_gain[1] * hb_synth[i]; + hb_stereo_synth[1][i] = 0.5f * hb_synth[i] - 0.5f * hb_gain[1] * hb_synth[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_apply_td_stefi() + * + * Apply TD stereo filling for ACELP HB + *-------------------------------------------------------------------*/ + +static void ivas_sba_dirac_stereo_apply_td_stefi( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output synthesis signal */ + const int16_t output_frame /* i : output frame length per channel */ +) +{ + int16_t i; + int16_t dftOvlLen; + float win_in, win_out; + float tmp; + const float *win_dft; + + if ( max( hStereoDft->td_gain[0], hStereoDft->td_gain[1] ) > 0 ) + { + win_dft = hStereoDft->win32ms; + dftOvlLen = hStereoDft->dft32ms_ovl; + + for ( i = 0; i < dftOvlLen; i++ ) + { + win_in = win_dft[STEREO_DFT32MS_STEP * i] * win_dft[STEREO_DFT32MS_STEP * i]; + win_out = 1 - win_in; + tmp = ( win_in * hStereoDft->td_gain[0] + win_out * hStereoDft->td_gain[1] ) * 0.5f * hStereoDft->hb_stefi_sig[i]; + + output[0][i] += tmp; + output[1][i] -= tmp; + } + for ( i = dftOvlLen; i < output_frame; i++ ) + { + tmp = hStereoDft->td_gain[0] * 0.5f * hStereoDft->hb_stefi_sig[i]; + output[0][i] += tmp; + output[1][i] -= tmp; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_smooth_parameters() + * + * Smooth DFT Stereo parameters + *-------------------------------------------------------------------*/ + +void ivas_sba_dirac_stereo_smooth_parameters( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: decoder DFT stereo handle */ +) +{ + int16_t k_offset, b; + float *side_gain, *prev_side_gain; + float *res_pred_gain, *prev_res_pred_gain; + + k_offset = STEREO_DFT_OFFSET; + + prev_side_gain = hStereoDft->side_gain; + side_gain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; + prev_res_pred_gain = hStereoDft->res_pred_gain; + res_pred_gain = hStereoDft->res_pred_gain + k_offset * STEREO_DFT_BAND_MAX; + + /* Smoothing of side and prediction gains between ftrames */ + for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->nbands; b++ ) + { + if ( hStereoDft->attackPresent ) + { + res_pred_gain[b] *= 0.8f; + res_pred_gain[b + STEREO_DFT_BAND_MAX] *= 0.8f; + } + else + { + side_gain[b] = hStereoDft->smooth_fac[0][b] * prev_side_gain[b] + ( 1.f - hStereoDft->smooth_fac[0][b] ) * side_gain[b]; + side_gain[b + STEREO_DFT_BAND_MAX] = hStereoDft->smooth_fac[1][b] * side_gain[b] + ( 1.f - hStereoDft->smooth_fac[1][b] ) * side_gain[b + STEREO_DFT_BAND_MAX]; + res_pred_gain[b] = hStereoDft->smooth_fac[0][b] * prev_res_pred_gain[b] + ( 1.f - hStereoDft->smooth_fac[0][b] ) * res_pred_gain[b]; + res_pred_gain[b + STEREO_DFT_BAND_MAX] = hStereoDft->smooth_fac[1][b] * res_pred_gain[b] + ( 1.f - hStereoDft->smooth_fac[1][b] ) * res_pred_gain[b + STEREO_DFT_BAND_MAX]; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dirac_stereo_dec() + * + * Create stereo output for SBA DirAC via DFT stereo + *-------------------------------------------------------------------*/ + +void ivas_sba_dirac_stereo_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output synthesis signal */ + const int16_t output_frame /* i : output frame length per channel */ +) +{ + int16_t dtx_flag, fd_cng_flag; + int16_t memOffset; + float tmp_buf[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; + float tmp_synth[L_FRAME16k]; + float hb_gain[NB_DIV]; + float hb_synth_stereo[CPE_CHANNELS][L_FRAME48k]; + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; + SCE_DEC_HANDLE hSCE; + CPE_DEC_HANDLE hCPE; + STEREO_DFT_DEC_DATA_HANDLE hStereoDft; + + hSCE = st_ivas->hSCE[0]; + hCPE = st_ivas->hCPE[0]; + hStereoDft = hCPE->hStereoDft; + dtx_flag = ( hSCE->hCoreCoder[0]->core_brate <= SID_2k40 ); + fd_cng_flag = ( dtx_flag && hSCE->hCoreCoder[0]->cng_type == FD_CNG ); + memOffset = NS2SA( output_frame * FRAMES_PER_SEC, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ); + + ivas_sba_dirac_stereo_config( hStereoDft->hConfig ); + hStereoDft->nbands = ivas_sba_dirac_stereo_band_config( hStereoDft->band_limits, st_ivas->hDecoderConfig->output_Fs, hStereoDft->NFFT ); + + stereo_dft_dec_update( hStereoDft, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); + + /* nrg calculation for TD Stereo Filling, as done in ICBWE which is not used in this case */ + ivas_sba_dirac_stereo_compute_td_stefi_nrgs( hStereoDft, hSCE->save_hb_synth, hSCE->hCoreCoder[0]->core, output_frame, fd_cng_flag ); + + /* do DFT Stereo core switching (including DFT analysis) here as CPE element was not available in SCE decoder */ + mvr2r( hSCE->save_synth, tmp_synth, hSCE->hCoreCoder[0]->L_frame ); + stereo_dft_dec_core_switching( hCPE, output[0] /*hSCE->save_output*/, hSCE->save_synth, hSCE->save_hb_synth, DFT, output_frame, 0, dtx_flag ); + + /* do updates here after skipping this in SCE decoder (needs to be done after core switching) */ + updt_dec_common( hSCE->hCoreCoder[0], NORMAL_HQ_CORE, -1, hSCE->save_synth ); + + /* mapping of DirAC parameters (azimuth, elevation, diffuseness) to DFT Stereo parameters (side gain, prediction gain) */ + map_params_dirac_to_stereo( hStereoDft, st_ivas->hQMetaData, tmp_synth, DFT[0], st_ivas->ivas_format == MC_FORMAT, hSCE->hCoreCoder[0]->L_frame ); + + /* DFT Stereo upmix */ + stereo_dft_dec( hStereoDft, hCPE->hCoreCoder[0], DFT, NULL, NULL, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); + + /* DFT synthesis */ + stereo_dft_dec_synthesize( hCPE, DFT, 0, output[0], output_frame ); + stereo_dft_dec_synthesize( hCPE, DFT, 1, output[1], output_frame ); + + synchro_synthesis( st_ivas->hDecoderConfig->ivas_total_brate, hCPE, output, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); + + /* output scaling */ + v_multc( output[0], 0.5f, output[0], output_frame ); + v_multc( output[1], 0.5f, output[1], output_frame ); + + /* delay HB synth */ + mvr2r( hSCE->save_hb_synth + output_frame - memOffset, tmp_buf, memOffset ); + mvr2r( hSCE->save_hb_synth, hSCE->save_hb_synth + memOffset, output_frame - memOffset ); + mvr2r( hSCE->prev_hb_synth, hSCE->save_hb_synth, memOffset ); + mvr2r( tmp_buf, hSCE->prev_hb_synth, memOffset ); + + if ( ( hCPE->hCoreCoder[0]->core == ACELP_CORE || hCPE->hCoreCoder[0]->last_core == ACELP_CORE ) && !fd_cng_flag ) + { + /* upmix ACELP BWE */ + ivas_sba_dirac_stereo_compute_hb_gain( hStereoDft, hb_gain ); + ivas_sba_dirac_stereo_upmix_hb( hb_synth_stereo, hSCE->save_hb_synth, hb_gain, output_frame ); + + /* add HB to ACELP core */ + v_add( output[0], hb_synth_stereo[0], output[0], output_frame ); + v_add( output[1], hb_synth_stereo[1], output[1], output_frame ); + + /* apply TD Stereo Filling as is done in ICBWE */ + ivas_sba_dirac_stereo_apply_td_stefi( hStereoDft, output, output_frame ); + } + + return; +} diff --git a/lib_dec/ivas_sba_rendering.c b/lib_dec/ivas_sba_rendering.c new file mode 100644 index 0000000000..8883e8d78f --- /dev/null +++ b/lib_dec/ivas_sba_rendering.c @@ -0,0 +1,510 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_cnst.h" +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void ivas_sba_mtx_mult( float output_f[][L_FRAME48k], const int16_t output_frame, const int16_t nchan_in, IVAS_OUTPUT_SETUP output_setup, const float *mtx_hoa_decoder ); + + +/*-------------------------------------------------------------------* + * ivas_sba_linear_renderer() + * + * Linear rendering for SBA format + *-------------------------------------------------------------------*/ + +ivas_error ivas_sba_linear_renderer( + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nchan_in, /* i : number of input ambisonics channels */ + const AUDIO_CONFIG output_config, /* i : output audio configuration */ + const IVAS_OUTPUT_SETUP output_setup, /* i : output format setup */ + const float hoa_dec_mtx[] /* i : hoa decoding mtx */ +) +{ + int16_t i; + float dmx_l; + int16_t nchan_hoa; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Number of channels of HOA depends of transport format which is mixed order xH1V*/ + nchan_hoa = nchan_in; + + if ( nchan_in == 6 ) /*2H1V*/ + { + nchan_hoa = 9; + } + else if ( nchan_in == 8 ) /*3H1V*/ + { + nchan_hoa = 16; + } + + switch ( output_config ) + { + case AUDIO_CONFIG_MONO: + /* If stereo DMX, MONO = W = Cardioids L + R*/ + if ( nchan_in == 2 ) + { + for ( i = 0; i < output_frame; i++ ) + { + output_f[0][i] += output_f[1][i]; + } + } + /* else: do nothing, MONO = W*/ + break; + case AUDIO_CONFIG_STEREO: + assert( ( nchan_in >= 2 ) && "Number of input channels must be at least 2 (for W and Y)!\n" ); + + /* Compute L and R cardioids from SB format except if stereo DMX is transmitted already in this format*/ + if ( nchan_in > 2 ) + { + /*Build L/R cardioids*/ + for ( i = 0; i < output_frame; i++ ) + { + dmx_l = 0.5f * ( output_f[0][i] + output_f[1][i] ); /* cardioid_left = 0.5(W + Y) */ + output_f[1][i] = 0.5f * ( output_f[0][i] - output_f[1][i] ); /* cardioid_right = 0.5(W - Y) */ + output_f[0][i] = dmx_l; + } + } + break; + case AUDIO_CONFIG_5_1: + case AUDIO_CONFIG_7_1: + case AUDIO_CONFIG_5_1_2: + case AUDIO_CONFIG_5_1_4: + case AUDIO_CONFIG_7_1_4: + case AUDIO_CONFIG_LS_CUSTOM: + ivas_sba_mtx_mult( output_f, output_frame, nchan_hoa, output_setup, hoa_dec_mtx ); + break; + case AUDIO_CONFIG_FOA: /* Ambisonics output, order: 1 */ + case AUDIO_CONFIG_HOA2: /* Ambisonics output, order: 2 */ + case AUDIO_CONFIG_HOA3: /* Ambisonics output, order: 3 */ + for ( i = nchan_hoa; i < output_setup.nchan_out_woLFE; i++ ) + { + set_zero( output_f[i], output_frame ); + } + break; + default: + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: illegal output configuration, Exiting.\n" ); + } + + return error; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_mtx_mult() + * + * HOA decoding with LFE insertion + *-------------------------------------------------------------------*/ + +static void ivas_sba_mtx_mult( + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nchan_in, /* i : Number of ambisonic channels */ + IVAS_OUTPUT_SETUP output_setup, /* i : Output configuration */ + const float *mtx_hoa_decoder /* i : Hoa decoding mtx */ +) +{ + int16_t i, k, ch_idx; + int16_t idx_lfe; + float input_f[16]; + const float *hoa_decoder; + + assert( ( nchan_in >= FOA_CHANNELS ) && "Number of input channels must be at least 4 (FOA)!\n" ); + + for ( i = 0; i < output_frame; i++ ) + { + /* init*/ + idx_lfe = 0; + hoa_decoder = &mtx_hoa_decoder[0]; + for ( k = 0; k < nchan_in; k++ ) + { + input_f[k] = output_f[k][i]; + } + + /* mtx mult with LFE insertion*/ + for ( ch_idx = 0; ch_idx < ( output_setup.nchan_out_woLFE + output_setup.num_lfe ); ch_idx++ ) + { + if ( ( output_setup.num_lfe > 0 ) && ( output_setup.index_lfe[idx_lfe] == ch_idx ) ) + { + /*LFE insertion*/ + output_f[ch_idx][i] = 0.f; + if ( idx_lfe < ( output_setup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else + { + /*HOA decoding*/ + output_f[ch_idx][i] = input_f[0] * hoa_decoder[0]; + for ( k = 1; k < nchan_in; k++ ) + { + output_f[ch_idx][i] += input_f[k] * hoa_decoder[k]; + } + hoa_decoder += 16; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_upmixer_renderer() + * + * SBA upmix rendering + *-------------------------------------------------------------------*/ + +void ivas_sba_upmixer_renderer( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float output[][L_FRAME48k], /* i/o: transport/output audio channels */ + const int16_t nchan_remapped, /* i : num channels after remapping of TCs */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t i, ch, nchan_out; + float clip, temp; + int16_t nchan_internal; + + wmops_sub_start( "ivas_sba_upmixer_renderer" ); + + nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_order ); + nchan_out = st_ivas->hDecoderConfig->nchan_out; + + for ( ch = 0; ch < nchan_remapped; ch++ ) + { + for ( i = 0; i < output_frame; i++ ) + { + temp = output[ch][i]; + temp = floorf( temp + 0.5f ); + + if ( temp > MAX16B_FLT ) + { + temp = MAX16B_FLT; + } + else if ( temp < ( -1.0f * PCM16_TO_FLT_FAC ) ) + { + temp = ( -1.0f * PCM16_TO_FLT_FAC ); + } + temp *= ( 1.0f / PCM16_TO_FLT_FAC ); + output[ch][i] = temp; + } + } + + if ( st_ivas->nchan_transport >= 3 ) + { + /*convert WYZX downmix to WYXZ*/ + for ( i = 0; i < output_frame; i++ ) + { + temp = output[2][i]; + output[2][i] = output[3][i]; + output[3][i] = temp; + } + } + + /* Upmixer */ + ivas_spar_foa_dec_upmixer( st_ivas, output, nchan_internal, output_frame ); + + /* Renderer */ + if ( st_ivas->hDirAC != NULL && st_ivas->renderer_type == RENDERER_DIRAC ) + { + nchan_out = st_ivas->hDirAC->hOutSetup.nchan_out_woLFE + st_ivas->hDirAC->hOutSetup.num_lfe; + } + + if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC ) + { + ivas_sba_linear_renderer( output, output_frame, st_ivas->hIntSetup.nchan_out_woLFE, st_ivas->hDecoderConfig->output_config, st_ivas->hOutSetup, st_ivas->hoa_dec_mtx ); + } + + clip = 1.0f; + for ( ch = 0; ch < nchan_out; ch++ ) + { + for ( i = 0; i < output_frame; i++ ) + { + clip = max( clip, fabsf( output[ch][i] ) ); + output[ch][i] = output[ch][i] * PCM16_TO_FLT_FAC; + } + } + +#ifdef DEBUGGING + if ( clip > 1.0f ) + { + fprintf( stderr, "IVAS Crend Clipped: max gain = %f\n", clip ); + } +#endif + + wmops_sub_end(); + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_mix_matrix_determiner() + * + * Determine SBA mixing matrices + *-------------------------------------------------------------------*/ + +void ivas_sba_mix_matrix_determiner( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float output[][L_FRAME48k], /* i/o: transport/output audio channels */ + const int16_t nchan_remapped, /* i : num channels after remapping of TCs */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t i, ch; + float temp; + ivas_spar_foa_dec_state_t *pState; + int16_t num_bands_out, nchan_transport, nchan_out; + + /* Convert numeric range */ + for ( ch = 0; ch < nchan_remapped; ch++ ) + { + for ( i = 0; i < output_frame; i++ ) + { + temp = output[ch][i]; + temp = floorf( temp + 0.5f ); + + if ( temp > MAX16B_FLT ) + { + temp = MAX16B_FLT; + } + else if ( temp < ( -1.0f * PCM16_TO_FLT_FAC ) ) + { + temp = ( -1.0f * PCM16_TO_FLT_FAC ); + } + temp *= ( 1.0f / PCM16_TO_FLT_FAC ); + output[ch][i] = temp; + } + } + + /* AGC */ + pState = st_ivas->hSpar->hSparFoa; + nchan_transport = pState->hMdDec->spar_md_cfg.nchan_transport; + nchan_out = nchan_transport; + ivas_agc_dec_process( pState->hAgcDec, output, output, nchan_transport, output_frame ); + + /* Convert numeric range back */ + for ( ch = 0; ch < nchan_out; ch++ ) + { + for ( i = 0; i < output_frame; i++ ) + { + output[ch][i] = output[ch][i] * PCM16_TO_FLT_FAC; + } + } + + /* Mixing matrix determiner */ + num_bands_out = pState->hFbMixer->pFb->filterbank_num_bands; + ivas_spar_foa_dec_gen_umx_mat( pState->hMdDec, nchan_transport, num_bands_out, st_ivas->bfi ); + + wmops_sub_end(); + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_prototype_renderer() + * + * Render prototype audio signals using SBA mixing matrices + *-------------------------------------------------------------------*/ + +void ivas_sba_prototype_renderer( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, real */ + float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, imag */ + const int16_t firstSubframe, /* i : First subframe to map */ + const int16_t nSubframes /* i : Number of subframes to map */ +) +{ + float mixer_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; + ivas_spar_foa_dec_state_t *hSparFoa; + DECODER_CONFIG_HANDLE hDecoderConfig; + int16_t num_spar_bands, spar_band; + int16_t b, ts; + int16_t num_cldfb_bands, numch_in, numch_out; + int16_t cldfb_band; + int16_t out_ch, in_ch; + int16_t firstSlot, slotEnd, firstInCh, inChEnd, firstOutCh, outChEnd; + int16_t sf_idx; + + wmops_sub_start( "ivas_sba_prototype_renderer" ); + + hSparFoa = st_ivas->hSpar->hSparFoa; + hDecoderConfig = st_ivas->hDecoderConfig; + num_spar_bands = hSparFoa->hFbMixer->pFb->filterbank_num_bands; + + firstSlot = firstSubframe * ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES ); + slotEnd = ( firstSubframe + nSubframes ) * ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES ); + + num_cldfb_bands = hSparFoa->hFbMixer->pFb->fb_bin_to_band.num_cldfb_bands; + numch_in = hSparFoa->hFbMixer->fb_cfg->num_in_chans; + numch_out = hSparFoa->hFbMixer->fb_cfg->num_out_chans; + + if ( st_ivas->nchan_transport == 1 ) + { + firstInCh = 0; + inChEnd = 1; + firstOutCh = 0; + outChEnd = 1; + } + else /* 2 TC */ + { + firstInCh = 0; + inChEnd = 2; + firstOutCh = 1; + outChEnd = 2; + } + + /* Apply mixing matrix */ + for ( ts = firstSlot; ts < slotEnd; ts++ ) + { + /* determine SPAR parameters for this time slot */ + ivas_spar_get_parameters( hSparFoa, hDecoderConfig, ts, numch_out, numch_in, num_spar_bands, mixer_mat ); + + for ( cldfb_band = 0; cldfb_band < num_cldfb_bands; cldfb_band++ ) + { + float out_re[IVAS_SPAR_MAX_CH]; + float out_im[IVAS_SPAR_MAX_CH]; + float cldfb_par; + ivas_fb_bin_to_band_data_t *bin2band = &hSparFoa->hFbMixer->pFb->fb_bin_to_band; + + for ( out_ch = firstOutCh; out_ch < outChEnd; out_ch++ ) + { + out_re[out_ch] = 0.0f; + out_im[out_ch] = 0.0f; + + for ( in_ch = firstInCh; in_ch < inChEnd; in_ch++ ) + { + if ( cldfb_band < CLDFB_PAR_WEIGHT_START_BAND ) /* tuning parameter, depends on how much SPAR Filters overlap for the CLDFB bands */ + { + spar_band = bin2band->p_cldfb_map_to_spar_band[cldfb_band]; + cldfb_par = mixer_mat[out_ch][in_ch][spar_band]; + } + else + { + cldfb_par = 0.0f; + for ( spar_band = bin2band->p_spar_start_bands[cldfb_band]; spar_band < num_spar_bands; spar_band++ ) + { + /* accumulate contributions from all SPAR bands */ + cldfb_par += mixer_mat[out_ch][in_ch][spar_band] * bin2band->pp_cldfb_weights_per_spar_band[cldfb_band][spar_band]; + } + } + + out_re[out_ch] += inRe[in_ch][ts][cldfb_band] * cldfb_par; + out_im[out_ch] += inIm[in_ch][ts][cldfb_band] * cldfb_par; + } + } + + /*update CLDFB data with the parameter-modified data*/ + for ( out_ch = firstOutCh; out_ch < outChEnd; out_ch++ ) + { + inRe[out_ch][ts][cldfb_band] = out_re[out_ch]; + inIm[out_ch][ts][cldfb_band] = out_im[out_ch]; + } + } + + /* Update mixing matrices */ + if ( ( ( ts + 1 ) % MAX_PARAM_SPATIAL_SUBFRAMES ) == 0 ) + { + sf_idx = ts / MAX_PARAM_SPATIAL_SUBFRAMES; + hSparFoa->i_subframe++; + hSparFoa->i_subframe = min( hSparFoa->i_subframe, MAX_PARAM_SPATIAL_SUBFRAMES ); + mvr2r( hSparFoa->hMdDec->mixer_mat_prev[1][0][0], hSparFoa->hMdDec->mixer_mat_prev[0][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + mvr2r( hSparFoa->hMdDec->mixer_mat_prev[2][0][0], hSparFoa->hMdDec->mixer_mat_prev[1][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + mvr2r( hSparFoa->hMdDec->mixer_mat_prev[3][0][0], hSparFoa->hMdDec->mixer_mat_prev[2][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + mvr2r( hSparFoa->hMdDec->mixer_mat_prev[4][0][0], hSparFoa->hMdDec->mixer_mat_prev[3][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + + for ( out_ch = 0; out_ch < numch_out; out_ch++ ) + { + for ( in_ch = 0; in_ch < numch_in; in_ch++ ) + { + for ( b = 0; b < num_spar_bands; b++ ) + { + hSparFoa->hMdDec->mixer_mat_prev[4][out_ch][in_ch][b] = hSparFoa->hMdDec->mixer_mat[out_ch][in_ch][b + sf_idx * IVAS_MAX_NUM_BANDS]; + } + } + } + } + } + + /* Create prototypes */ + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + { + for ( ts = firstSlot; ts < slotEnd; ts++ ) + { + if ( st_ivas->nchan_transport == 1 ) /* Dual mono */ + { + mvr2r( inRe[0][ts], inRe[1][ts], CLDFB_NO_CHANNELS_MAX ); + mvr2r( inIm[0][ts], inIm[1][ts], CLDFB_NO_CHANNELS_MAX ); + } + else if ( st_ivas->nchan_transport == 2 ) /* Opposing cardioids */ + { + float temp_signal[CLDFB_NO_CHANNELS_MAX]; + + v_add( inRe[0][ts], inRe[1][ts], temp_signal, CLDFB_NO_CHANNELS_MAX ); + v_sub( inRe[0][ts], inRe[1][ts], inRe[1][ts], CLDFB_NO_CHANNELS_MAX ); + mvr2r( temp_signal, inRe[0][ts], CLDFB_NO_CHANNELS_MAX ); + v_multc( inRe[0][ts], 0.5f, inRe[0][ts], CLDFB_NO_CHANNELS_MAX ); + v_multc( inRe[1][ts], 0.5f, inRe[1][ts], CLDFB_NO_CHANNELS_MAX ); + + v_add( inIm[0][ts], inIm[1][ts], temp_signal, CLDFB_NO_CHANNELS_MAX ); + v_sub( inIm[0][ts], inIm[1][ts], inIm[1][ts], CLDFB_NO_CHANNELS_MAX ); + mvr2r( temp_signal, inIm[0][ts], CLDFB_NO_CHANNELS_MAX ); + v_multc( inIm[0][ts], 0.5f, inIm[0][ts], CLDFB_NO_CHANNELS_MAX ); + v_multc( inIm[1][ts], 0.5f, inIm[1][ts], CLDFB_NO_CHANNELS_MAX ); + } + } + } + + wmops_sub_end(); + + return; +} diff --git a/lib_dec/ivas_sce_dec.c b/lib_dec/ivas_sce_dec.c new file mode 100644 index 0000000000..e14754567e --- /dev/null +++ b/lib_dec/ivas_sce_dec.c @@ -0,0 +1,440 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*--------------------------------------------------------------------------* + * ivas_sce_dec() + * + * Single Channel Element (SCE) decoding routine + *--------------------------------------------------------------------------*/ + +ivas_error ivas_sce_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t sce_id, /* i : SCE # identifier */ + float output[1][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame, /* i : output frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + float outputHB[1][L_FRAME48k]; /* 'float' buffer for output HB synthesis, one channel */ + SCE_DEC_HANDLE hSCE; + Decoder_State *st; + int32_t ivas_total_brate, last_ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_sce_dec" ); + + hSCE = st_ivas->hSCE[sce_id]; + st = hSCE->hCoreCoder[0]; + + st->BER_detect |= st_ivas->BER_detect; + + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate; + + /*------------------------------------------------------------------* + * Read audio bandwidth info + *-----------------------------------------------------------------*/ + + /* set total_brate - needed in DTX */ + if ( !st_ivas->bfi && ( ivas_total_brate == IVAS_SID_4k4 || ivas_total_brate == IVAS_SID_5k ) ) + { + st->total_brate = ivas_total_brate - nb_bits_metadata * FRAMES_PER_SEC; + assert( st->total_brate == SID_2k40 && "SCE SID must be 2.4kbps!" ); + } + else if ( !st_ivas->bfi && ivas_total_brate <= SID_2k40 ) + { + st->total_brate = ivas_total_brate; + } + else if ( !st_ivas->bfi && ( last_ivas_total_brate <= SID_2k40 || last_ivas_total_brate == IVAS_SID_4k4 ) ) + { + st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; + } + + /* read the bandwidth */ + if ( st_ivas->bfi || st->total_brate <= SID_2k40 ) + { + /* BFI or SID/NO_DATA frame -> do nothing */ + } + else + { + if ( st->low_rate_mode ) + { + /* ISm Low-rate mode -> always WB */ + st->bwidth = WB; + } + else if ( hSCE->element_brate < MIN_BRATE_SWB_SCE ) + { + /* only WB is supported */ + st->bwidth = WB; + } + else if ( hSCE->element_brate < MIN_BRATE_FB_STEREO ) + { + /* WB and SWB are supported */ + st->bwidth = get_next_indice( st, 1 ) + WB; + } + else + { + /* WB, SWB and FB are supported */ + st->bwidth = get_next_indice( st, NBITS_BWIDTH ); + } + } + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + st->idchan = 0; + st->element_mode = IVAS_SCE; +#ifdef DEBUGGING + st->id_element = sce_id; +#endif + + /* Force to MODE1 in IVAS */ + st->codec_mode = MODE1; + + /* set "bits_frame_nominal" */ + if ( ( st_ivas->hQMetaData != NULL ) && + ( st_ivas->sba_mode != SBA_MODE_SPAR ) ) + { + if ( st_ivas->mc_mode == MC_MODE_MCMASA && ivas_total_brate >= MCMASA_SEPARATE_BRATE ) + { + st->bits_frame_nominal = (int16_t) ( hSCE->element_brate / FRAMES_PER_SEC ); + } + else + { + st->bits_frame_nominal = st_ivas->hQMetaData->bits_frame_nominal; + } + } + else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + st->bits_frame_nominal = (int16_t) ( st_ivas->hSpar->hSparFoa->core_nominal_brate / FRAMES_PER_SEC ); + } + else + { + st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); + } + + /* set "total_brate" */ + if ( !st_ivas->bfi && ( ivas_total_brate == IVAS_SID_4k4 || ivas_total_brate == IVAS_SID_5k ) ) + { + st->total_brate = ivas_total_brate - nb_bits_metadata * FRAMES_PER_SEC; + } + else if ( !st_ivas->bfi && ivas_total_brate <= SID_2k40 ) + { + st->total_brate = ivas_total_brate; + } + else if ( st_ivas->ivas_format != ISM_FORMAT ) /* note: in ISMs, total_brate[] is set in ivas_ism_config() */ + { + st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; + } + + /*----------------------------------------------------------------* + * Core codec configuration + *----------------------------------------------------------------*/ + + /* set ACELP12k8 / ACELP16k flag for flexible ACELP core */ + if ( st_ivas->ivas_format == ISM_FORMAT && st->low_rate_mode && !( st->total_brate == SID_2k40 || st->total_brate == FRAME_NO_DATA ) ) + { + st->flag_ACELP16k = 0; + } + else + { + st->flag_ACELP16k = set_ACELP_flag( IVAS_SCE, hSCE->element_brate, st->total_brate, 0, 0, -1, -1 ); + } + + /*TODO : check if is_SIDrate() can be used here*/ + if ( is_DTXrate( ivas_total_brate ) ) + { + st->VAD = 0; + } + else + { + st->VAD = 1; + } + + if ( st->VAD && hSCE->element_brate <= CNA_MAX_BRATE ) + { + st->flag_cna = 1; + } + else if ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) && hSCE->element_brate <= ACELP_32k ) + { + st->flag_cna = 1; + } + else + { + st->flag_cna = 0; + } + + /*----------------------------------------------------------------* + * Decoder + *----------------------------------------------------------------*/ + + if ( ( error = ivas_core_dec( NULL, hSCE, NULL, NULL, 1, output, outputHB, NULL, st_ivas->sba_dirac_stereo_flag ) ) != IVAS_ERR_OK ) + { + return error; + } + + + if ( st_ivas->sba_dirac_stereo_flag && ( st->core_brate > SID_2k40 || st->cng_type == LP_CNG ) ) + { + /* skip addition of ACELP BWE for now, will be done after upmix */ + mvr2r( outputHB[0], hSCE->save_hb_synth, output_frame ); + } + else if ( !st_ivas->sba_dirac_stereo_flag ) + { + int32_t output_Fs; + + + output_Fs = st_ivas->hDecoderConfig->output_Fs; + /*----------------------------------------------------------------* + * LB synthesis synchronization between IVAS formats + *----------------------------------------------------------------*/ + + delay_signal( output[0], output_frame, st->prev_synth_buffer, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); + + /*----------------------------------------------------------------* + * HB synthesis synchronization between IVAS formats + *----------------------------------------------------------------*/ + + delay_signal( outputHB[0], output_frame, hSCE->prev_hb_synth, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); + + /*----------------------------------------------------------------* + * output LB and HB mix + *----------------------------------------------------------------*/ + + v_add( output[0], outputHB[0], output[0], output_frame ); + } + + /*----------------------------------------------------------------* + * Common updates + *----------------------------------------------------------------*/ + + hSCE->last_element_brate = hSCE->element_brate; + + st_ivas->BER_detect |= st->BER_detect; + +#ifdef DEBUG_MODE_INFO + { + float tmpF = hSCE->element_brate / 1000.0f; + int16_t i, n; + + n = 1; + if ( st_ivas->ini_frame == 0 && frame > 0 ) + { + /* in case first frame(s) is/are lost, write info several times */ + n = (int16_t) frame - st_ivas->ini_frame + 1; + } + + for ( i = 0; i < n; i++ ) + { + dbgwrite( &tmpF, sizeof( float ), 1, output_frame, fname( debug_dir, "element_brate", 0, sce_id, DEC ) ); + dbgwrite( &st->element_mode, 2, 1, output_frame, fname( debug_dir, "element_mode", 0, sce_id, DEC ) ); + + dbgwrite( output, sizeof( float ), output_frame, 1, fname( debug_dir, "output.sce", 0, sce_id, DEC ) ); + } + } +#endif + + wmops_sub_end(); + return error; +} + + +/*------------------------------------------------------------------------- + * create_sce_dec() + * + * Create, allocate and initialize IVAS decoder SCE handle + *-------------------------------------------------------------------------*/ + +ivas_error create_sce_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int16_t sce_id, /* i : SCE # identifier */ + const int32_t element_brate /* i : element bitrate */ +) +{ + SCE_DEC_HANDLE hSCE; + Decoder_State *st; + ivas_error error; + int16_t output_frame; + + error = IVAS_ERR_OK; + output_frame = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); + + /*-----------------------------------------------------------------* + * Allocate SCE handle + *-----------------------------------------------------------------*/ + + if ( ( hSCE = (SCE_DEC_HANDLE) count_malloc( sizeof( SCE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SCE\n" ) ); + } + + /*-----------------------------------------------------------------* + * Initialization - general parameters + *-----------------------------------------------------------------*/ + + hSCE->sce_id = sce_id; + hSCE->element_brate = element_brate; + + set_f( hSCE->prev_hb_synth, 0.0f, NS2SA( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); + + /*-----------------------------------------------------------------* + * Core Coder, 1 instance: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( ( st = (DEC_CORE_HANDLE) count_malloc( sizeof( Decoder_State ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); + } + + copy_decoder_config( st_ivas, st ); + + st->total_brate = hSCE->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( ( error = init_decoder( st, 0, st_ivas->mc_mode ) ) != IVAS_ERR_OK ) +#else + if ( ( error = init_decoder( st, 0 ) ) != IVAS_ERR_OK ) +#endif + { + return error; + } + + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ) + { + if ( ( error = openCldfb( &st->cldfbSynHB, CLDFB_SYNTHESIS, st->output_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + st->cldfbSynHB = NULL; + } + + /* allocate and initialize "hTdCngDec" - needed in DTX */ + if ( sce_id == 0 && st->hTdCngDec == NULL ) + { + if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); + } + + td_cng_dec_init( st ); + } + + /*-----------------------------------------------------------------* + * Synthesis buffers: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( st_ivas->sba_dirac_stereo_flag ) + { + if ( ( hSCE->save_synth = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo output\n" ) ); + } + set_zero( hSCE->save_synth, output_frame ); + + if ( ( hSCE->save_hb_synth = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate HB memory for stereo output\n" ) ); + } + set_zero( hSCE->save_hb_synth, output_frame ); + } + else + { + hSCE->save_synth = NULL; + hSCE->save_hb_synth = NULL; + } + + hSCE->hCoreCoder[0] = st; + st_ivas->hSCE[sce_id] = hSCE; + + return error; +} + + +/*------------------------------------------------------------------------- + * destroy_sce_dec() + * + * Destroy and deallocate IVAS decoder SCE handle + *-------------------------------------------------------------------------*/ + +void destroy_sce_dec( + SCE_DEC_HANDLE hSCE /* i/o: SCE decoder structure */ +) +{ + Decoder_State *st; + + st = hSCE->hCoreCoder[0]; + + if ( st != NULL ) + { + destroy_core_dec( st ); + + count_free( st ); + st = NULL; + } + + if ( hSCE->save_synth != NULL ) + { + count_free( hSCE->save_synth ); + hSCE->save_synth = NULL; + } + if ( hSCE->save_hb_synth != NULL ) + { + count_free( hSCE->save_hb_synth ); + hSCE->save_hb_synth = NULL; + } + + count_free( hSCE ); + + return; +} diff --git a/lib_dec/ivas_sns_dec.c b/lib_dec/ivas_sns_dec.c new file mode 100644 index 0000000000..444a76cf80 --- /dev/null +++ b/lib_dec/ivas_sns_dec.c @@ -0,0 +1,210 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------- + * sns_1st_dec() + * + * + *-------------------------------------------------------------------*/ + +static void sns_1st_dec( + const int16_t index, /* i : codebook index */ + float *snsq /* i/o: i:prediction o:quantized sns */ +) +{ + int16_t i; + const float *p_dico; + + p_dico = &sns_vq_cdk1[( index % 32 ) * ( M / 2 )]; + + for ( i = 0; i < M / 2; i++ ) + { + snsq[i] = *p_dico++; + } + + p_dico = &sns_vq_cdk2[( index >> 5 ) * ( M / 2 )]; + + for ( i = M / 2; i < M; i++ ) + { + snsq[i] = *p_dico++; + } + + return; +} + + +/*------------------------------------------------------------------- + * sns_2st_dec() + * + * + *-------------------------------------------------------------------*/ + +static void sns_2st_dec( + float *snsq, /* i/o: i:1st stage o:1st+2nd stage */ + int16_t *indx /* i : index[] (4 bits per words) */ +) +{ + int16_t i; + int16_t xq[M]; + float scale = 1.0f / 2.5f; + + /* quantize */ + AVQ_dec_lpc( indx, xq, 2 ); + + for ( i = 0; i < M; i++ ) + { + snsq[i] += scale * (float) xq[i]; + } + + return; +} + + +/*------------------------------------------------------------------- + * sns_avq_dec() + * + * Stereo noise-shaping AVQ decoder for 1 channel + *-------------------------------------------------------------------*/ + +void sns_avq_dec( + int16_t *index, /* i : Quantization indices */ + float *SNS_Q, /* o : Quantized SNS vectors */ + const int16_t numlpc /* i : Number of sets of lpc */ +) +{ + int16_t i, nbi, last; + int16_t q_type; + + /* Last LPC index */ + if ( numlpc == 1 ) + { + last = 0; + } + else + { + last = M; + } + + index++; + + /* Decode last LPC */ + sns_1st_dec( *index++, &SNS_Q[last] ); + sns_2st_dec( &SNS_Q[last], index ); + nbi = 2 + index[0] + index[1]; + index += nbi; + + /* Decode intermediate LPC (512 framing) */ + if ( numlpc == 2 ) + { + q_type = *index++; + + if ( q_type == 0 ) + { + sns_1st_dec( *index++, &SNS_Q[0] ); + sns_2st_dec( &SNS_Q[0], index ); + } + else if ( q_type == 1 ) + { + for ( i = 0; i < M; i++ ) + { + SNS_Q[i] = SNS_Q[M + i]; + } + sns_2st_dec( &SNS_Q[0], index ); + } + } + + return; +} + + +/*------------------------------------------------------------------- + * sns_avq_dec_stereo() + * + * Stereo noise-shaping AVQ decoder for 21 channels + *-------------------------------------------------------------------*/ + +void sns_avq_dec_stereo( + int16_t *indexl, /* i : Quantization indices (left channel) */ + int16_t *indexr, /* i : Quantization indices (right channe) */ + float *SNS_Ql, /* o : Quantized SNS vectors (left channel) */ + float *SNS_Qr /* o : Quantized SNS vectors (right channe) */ +) +{ + int16_t i, stereo_mode; + float mid_q[M], side_q[M]; + + stereo_mode = *indexl++; + indexr++; + + if ( stereo_mode == 2 ) + { + /* MS coding */ + + sns_1st_dec( *indexl++, mid_q ); + sns_2st_dec( mid_q, indexl ); + + for ( i = 0; i < M; i++ ) + { + side_q[i] = 0.f; + } + + if ( *indexr++ == -1 ) + { + sns_2st_dec( side_q, indexr ); + } + + for ( i = 0; i < M; i++ ) + { + SNS_Ql[i] = mid_q[i] + side_q[i] * 0.5f; + SNS_Qr[i] = mid_q[i] - side_q[i] * 0.5f; + } + } + else + { + /* LR decoding */ + + sns_1st_dec( *indexl++, SNS_Ql ); + sns_2st_dec( SNS_Ql, indexl ); + + sns_1st_dec( *indexr++, SNS_Qr ); + sns_2st_dec( SNS_Qr, indexr ); + } + + return; +} diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c new file mode 100644 index 0000000000..d4e79296fb --- /dev/null +++ b/lib_dec/ivas_spar_decoder.c @@ -0,0 +1,181 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_stat_dec.h" +#include "prot.h" +#include "string.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_com.h" +#include +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * ivas_spar_dec_open() + * + * Allocate and initialize SPAR handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_dec_open( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ +) +{ + SPAR_DEC_HANDLE hSpar; + ivas_error error; + int16_t sba_order_internal, num_channels_internal; + + error = IVAS_ERR_OK; + + sba_order_internal = min( st_ivas->sba_order, IVAS_MAX_SBA_ORDER ); + + num_channels_internal = ivas_sba_get_nchan_metadata( sba_order_internal ); + + /*-----------------------------------------------------------------* + * Allocate and initialize SPAR handle + *-----------------------------------------------------------------*/ + + if ( ( hSpar = (SPAR_DEC_HANDLE) count_malloc( sizeof( SPAR_DEC_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR decoder" ); + } + + if ( ( error = ivas_spar_foa_dec_open( &hSpar->hSparFoa, st_ivas->hDecoderConfig, num_channels_internal ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*-----------------------------------------------------------------* + * Configuration - set SPAR high-level parameters + *-----------------------------------------------------------------*/ + + ivas_spar_config( st_ivas->hDecoderConfig->ivas_total_brate, sba_order_internal, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->hSparFoa->core_nominal_brate, st_ivas->sid_format ); + + switch ( sba_order_internal ) + { + case 1: + st_ivas->transport_config = AUDIO_CONFIG_FOA; + break; + case 2: + st_ivas->transport_config = AUDIO_CONFIG_HOA2; + break; + case 3: + st_ivas->transport_config = AUDIO_CONFIG_HOA3; + break; + } + + ivas_output_init( &( st_ivas->hTransSetup ), st_ivas->transport_config ); + + st_ivas->hSpar = hSpar; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_dec_close() + * + * Deallocate SPAR handle + *------------------------------------------------------------------------*/ + +void ivas_spar_dec_close( + SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + /* SPAR FOA handle */ + ivas_spar_foa_dec_close( &hSpar->hSparFoa, output_Fs ); + + count_free( hSpar ); + hSpar = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_spar_dec() + * + * Principal IVAS SPAR decoder routine + *-------------------------------------------------------------------*/ + +ivas_error ivas_spar_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ + int16_t *nb_bits_read /* o : number of MD bits read */ +) +{ + DECODER_CONFIG_HANDLE hDecoderConfig; + int16_t i, nb_bits_read_orig; + Decoder_State *st0; + int16_t next_bit_pos_orig, last_bit_pos; + uint16_t bstr_meta[MAX_BITS_METADATA], *bit_stream_orig; + ivas_error error; + + wmops_sub_start( "ivas_spar_decode" ); + + error = IVAS_ERR_OK; + hDecoderConfig = st_ivas->hDecoderConfig; + + st0 = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + bit_stream_orig = st0->bit_stream; + next_bit_pos_orig = st0->next_bit_pos; + + last_bit_pos = (int16_t) ( ( hDecoderConfig->ivas_total_brate / FRAMES_PER_SEC ) - 1 ); + nb_bits_read_orig = *nb_bits_read; + last_bit_pos -= nb_bits_read_orig; + + /* reverse the bitstream for easier reading of indices */ + for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) + { + bstr_meta[i] = st_ivas->bit_stream[last_bit_pos - i]; + } + st0->bit_stream = bstr_meta; + st0->next_bit_pos = 0; + st0->bits_frame = min( MAX_BITS_METADATA, last_bit_pos + 1 ); + st0->total_brate = hDecoderConfig->ivas_total_brate; /* to avoid BER detect */ + + ivas_spar_foa_dec_MD( st_ivas, st0 ); + + *nb_bits_read = st0->next_bit_pos + nb_bits_read_orig; + st0->bit_stream = bit_stream_orig; + st0->next_bit_pos = next_bit_pos_orig; + + wmops_sub_end(); + + return error; +} diff --git a/lib_dec/ivas_spar_foa_dec.c b/lib_dec/ivas_spar_foa_dec.c new file mode 100644 index 0000000000..1adcc883d4 --- /dev/null +++ b/lib_dec/ivas_spar_foa_dec.c @@ -0,0 +1,1139 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "math.h" +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_rom_com.h" +#include +#include "wmops.h" + + +#ifdef DEBUG_SPAR_FOA +extern FILE *fFb_pcm; +#endif + +/*----------------------------------------------------------------------* + * Local constants + *----------------------------------------------------------------------*/ + + +/*---------------------------------------------------------------------* + * Function ivas_get_spar_table_idx_from_coded_idx() + * + * Get SPAR table index + *---------------------------------------------------------------------*/ + +static int16_t ivas_get_spar_table_idx_from_coded_idx( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + int16_t *bitlen /* o : number of bits */ +) +{ + int16_t table_idx, ind1[IVAS_SPAR_BR_TABLE_LEN]; + int16_t i, j, ind2; + + j = 0; + for ( i = 0; i < IVAS_SPAR_BR_TABLE_LEN; i++ ) + { + ind1[j] = 0; + if ( ( ivas_spar_br_table_consts[i].ivas_total_brate == ivas_total_brate ) && + ( ivas_spar_br_table_consts[i].sba_order == sba_order ) ) + { + ind1[j++] = i; + } + } + + assert( j > 0 ); + + *bitlen = ivas_get_bits_to_encode( j - 1 ); + + ind2 = get_next_indice( st0, *bitlen ); + + table_idx = ind1[ind2]; + + return table_idx; +} + + +/*---------------------------------------------------------------------* + * Function ivas_parse_spar_header() + * + * Get SPAR table index + *---------------------------------------------------------------------*/ + +static int16_t ivas_parse_spar_header( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + int16_t *table_idx ) +{ + int16_t bitlen, bwidth; + + *table_idx = ivas_get_spar_table_idx_from_coded_idx( ivas_total_brate, sba_order, st0, &bitlen ); + + bwidth = ivas_spar_br_table_consts[( *table_idx )].bwidth; + + return bwidth; +} + + +static float get_random_number( + int16_t *seed ) +{ + float x = (float) own_random( seed ) / 32768.0f; + + return x; +} + + +static float matrix_det( + const float a00, + const float a01, + const float a10, + const float a11 ) +{ + return a00 * a11 - a01 * a10; +} + + +static void matrix_inverse( + float in[3][3], + float out[3][3], + const int16_t size ) +{ + float det, fac; + float eps = 1e-16f; + + if ( size == 1 ) + { + out[0][0] = 1.0f / max( in[0][0], eps ); + + return; + } + else if ( size == 2 ) + { + det = matrix_det( in[0][1], in[0][1], in[1][0], in[1][1] ); + fac = 1.0f / max( det, eps ); + + out[0][0] = in[1][1] * fac; + out[1][0] = in[1][0] * ( -fac ); + + out[0][1] = in[0][1] * ( -fac ); + out[1][1] = in[0][0] * fac; + + return; + } + + det = in[0][0] * matrix_det( in[1][1], in[1][2], in[2][1], in[2][2] ) - in[1][0] * matrix_det( in[0][1], in[0][2], in[2][1], in[2][2] ) + in[2][0] * matrix_det( in[0][1], in[0][2], in[1][1], in[1][2] ); + fac = 1.0f / max( det, eps ); + + out[0][0] = matrix_det( in[1][1], in[1][2], in[2][1], in[2][2] ) * fac; + out[1][0] = matrix_det( in[1][0], in[1][2], in[2][0], in[2][2] ) * ( -fac ); + out[2][0] = matrix_det( in[1][0], in[1][1], in[2][0], in[2][1] ) * fac; + + out[0][1] = matrix_det( in[0][1], in[0][2], in[2][1], in[2][2] ) * ( -fac ); + out[1][1] = matrix_det( in[0][0], in[0][2], in[2][0], in[2][2] ) * fac; + out[2][1] = matrix_det( in[0][0], in[0][1], in[2][0], in[2][1] ) * ( -fac ); + + out[0][2] = matrix_det( in[0][1], in[0][2], in[1][1], in[1][2] ) * fac; + out[1][2] = matrix_det( in[0][0], in[0][2], in[1][0], in[1][2] ) * ( -fac ); + out[2][2] = matrix_det( in[0][0], in[0][1], in[1][0], in[1][1] ) * fac; + + return; +} + + +/*---------------------------------------------------------------------* + * Function ivas_spar_get_cldfb_gains() + * + * + *---------------------------------------------------------------------*/ + +void ivas_spar_get_cldfb_gains( + ivas_spar_foa_dec_state_t *hSparFoa, + HANDLE_CLDFB_FILTER_BANK cldfbAnaDec0, + HANDLE_CLDFB_FILTER_BANK cldfbSynDec0, + const DECODER_CONFIG_HANDLE hDecoderConfig ) +{ + float output_Fs = (float) hDecoderConfig->output_Fs; + int16_t pt_len, stride, num_cldfb_bands, decfb_delay; + int16_t encfb_delay, cf_start, cf_end, cf_len; + float *weights; + int16_t ts, cf_cldfb_start, cf_cldfb_end; + float cf_start_s, cf_len_s; + int16_t sample, num_cf_slots, num_samples; + float T[3 * CLDFB_NO_CHANNELS_MAX + 10 * CLDFB_NO_CHANNELS_MAX - CLDFB_NO_CHANNELS_MAX][3]; + float Tt_T[3][3]; + float Tt_T_inv[3][3]; + float Tt_tgt[3]; + float ts_inout[CLDFB_NO_CHANNELS_MAX]; + float ts_re[CLDFB_NO_CHANNELS_MAX]; + float ts_im[CLDFB_NO_CHANNELS_MAX]; + float *pp_ts_im[1], *pp_ts_re[1]; + float tgt[( 3 - 1 ) * CLDFB_NO_CHANNELS_MAX + 10 * CLDFB_NO_CHANNELS_MAX]; + int16_t seed, split_band, slot_row, slot_col, slot, tmp_idx; + + pt_len = cldfbAnaDec0->p_filter_length; + num_cldfb_bands = cldfbAnaDec0->no_channels; + + stride = NS2SA( output_Fs, DELAY_CLDFB_NS ); + encfb_delay = NS2SA( output_Fs, IVAS_FB_ENC_DELAY_NS ); + decfb_delay = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ); + + cf_start = (int16_t) hSparFoa->hFbMixer->cross_fade_start_offset - encfb_delay + decfb_delay; /* time domain after CLDFB synthesis*/ + cf_end = (int16_t) hSparFoa->hFbMixer->cross_fade_end_offset - encfb_delay + decfb_delay; + cf_len = cf_end - cf_start; + weights = hSparFoa->hFbMixer->cldfb_cross_fade; + + cf_cldfb_start = (int16_t) ceil( ( cf_start - decfb_delay / 2 ) / (float) stride - 0.5f ); + cf_cldfb_end = (int16_t) ( ( cf_start - decfb_delay / 2 + cf_len ) / (float) stride - 0.5f ); + + num_cf_slots = cf_cldfb_end - cf_cldfb_start + 1; + num_samples = num_cf_slots * stride + pt_len - stride; + seed = RANDOM_INITSEED; + split_band = SPAR_DIRAC_SPLIT_START_BAND; + pp_ts_im[0] = ts_im; + pp_ts_re[0] = ts_re; + set_f( tgt, 0, ( 3 - 1 ) * CLDFB_NO_CHANNELS_MAX + 10 * CLDFB_NO_CHANNELS_MAX ); + + cf_start_s = ( cf_start - decfb_delay / 2 ) / output_Fs; + cf_len_s = hSparFoa->hFbMixer->cross_fade_end_offset / output_Fs - hSparFoa->hFbMixer->cross_fade_start_offset / output_Fs; + + for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) + { + weights[ts] = ( ( ( ts + 0.5f ) * stride / output_Fs ) - cf_start_s ) / cf_len_s; + weights[ts] = max( min( weights[ts], 1.0f ), 0.0f ); + } + hSparFoa->hFbMixer->cldfb_cross_fade_start = cf_cldfb_start; + hSparFoa->hFbMixer->cldfb_cross_fade_end = cf_cldfb_end; + hSparFoa->hFbMixer->cldfb_latency = decfb_delay; + + if ( num_cf_slots > 3 || pt_len > 10 * CLDFB_NO_CHANNELS_MAX || stride > CLDFB_NO_CHANNELS_MAX || split_band == IVAS_MAX_NUM_BANDS ) + { + return; + } + + /* optimization*/ + /* compute time-domain cross-fade for considered time slots*/ + tmp_idx = cf_start - cf_cldfb_start * stride; + for ( sample = 0; sample < cf_len; sample++ ) + { + /* increasing window function */ + tgt[tmp_idx++] = hSparFoa->hFbMixer->pFilterbank_cross_fade[sample]; + } + + for ( ; tmp_idx < num_samples; tmp_idx++ ) + { + /* fill up with ones*/ + tgt[tmp_idx] = 1.0f; + } + + for ( sample = 0; sample < num_samples; sample++ ) + { + /* initialize trasnform matrix with zeros*/ + T[sample][0] = T[sample][1] = T[sample][2] = 0.0f; + } + + for ( sample = 0; sample < pt_len - stride; sample++ ) + { + /* fill internal CLDFB analysis time buffer with data*/ + float x = get_random_number( &seed ); + + cldfbAnaDec0->cldfb_state[sample] = x; + } + + for ( slot = 0; slot < num_cf_slots; slot++ ) + { + for ( sample = 0; sample < stride; sample++ ) + { + float x = get_random_number( &seed ); + ts_inout[sample] = x; + } + + cldfbAnalysis_ts( ts_inout, ts_re, ts_im, num_cldfb_bands, cldfbAnaDec0 ); + cldfb_reset_memory( cldfbSynDec0 ); + cldfbSynthesis( pp_ts_re, pp_ts_im, ts_inout, num_cldfb_bands, cldfbSynDec0 ); + + for ( sample = 0; sample < stride; sample++ ) + { + T[slot * stride + sample][slot] = ts_inout[sample]; + } + + tmp_idx = pt_len - 1; + for ( sample = stride; sample < pt_len; sample++ ) + { + T[slot * stride + sample][slot] = cldfbSynDec0->cldfb_state[tmp_idx--]; + } + } + + /* target is synthesis output times the cross-fade window*/ + for ( sample = 0; sample < num_samples; sample++ ) + { + tgt[sample] *= ( T[sample][0] + T[sample][1] + T[sample][2] ); + } + + /* compute matrices */ + for ( slot_row = 0; slot_row < num_cf_slots; slot_row++ ) + { + for ( slot_col = slot_row; slot_col < num_cf_slots; slot_col++ ) + { + Tt_T[slot_row][slot_col] = 0.0f; + for ( sample = 0; sample < num_samples; sample++ ) + { + Tt_T[slot_row][slot_col] += T[sample][slot_row] * T[sample][slot_col]; + } + } + } + + Tt_T[1][0] = Tt_T[0][1]; + Tt_T[2][0] = Tt_T[0][2]; + Tt_T[2][1] = Tt_T[1][2]; + + for ( slot_row = 0; slot_row < num_cf_slots; slot_row++ ) + { + Tt_tgt[slot_row] = 0.0f; + for ( sample = 0; sample < num_samples; sample++ ) + { + Tt_tgt[slot_row] += T[sample][slot_row] * tgt[sample]; + } + } + + matrix_inverse( Tt_T, Tt_T_inv, num_cf_slots ); + + /* compute the optimal coefficients */ + for ( slot_row = 0; slot_row < num_cf_slots; slot_row++ ) + { + float tmp = 0.0f; + for ( slot_col = 0; slot_col < num_cf_slots; slot_col++ ) + { + tmp += Tt_T_inv[slot_row][slot_col] * Tt_tgt[slot_col]; + } + weights[cf_cldfb_start + slot_row] = max( min( tmp, 1.0f ), 0.0f ); + } + + cldfb_reset_memory( cldfbSynDec0 ); + cldfb_reset_memory( cldfbAnaDec0 ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_dec_open() + * + * Allocate and initialize SPAR decoder handle for static memory + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_foa_dec_open( + ivas_spar_foa_dec_state_t **hSparFoa, /* i/o: SPAR FOA decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t nchan_internal /* i : number of internal channels */ +) +{ + ivas_spar_foa_dec_state_t *pState; + IVAS_FB_CFG *fb_cfg; + int16_t i, j, b, active_w_mixing; + int32_t output_Fs; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( pState = (ivas_spar_foa_dec_state_t *) count_malloc( sizeof( ivas_spar_foa_dec_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR decoder" ); + } + + output_Fs = hDecoderConfig->output_Fs; + + /* TD decorr. */ + if ( ( error = ivas_spar_td_decorr_dec_open( &pState->hTdDecorr, output_Fs, nchan_internal, 1 ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* MD handle */ + if ( ( error = ivas_spar_foa_md_dec_open( &pState->hMdDec, hDecoderConfig, nchan_internal ) ) != IVAS_ERR_OK ) + { + return error; + } + pState->hMdDec->td_decorr_flag = 1; + pState->hMdDec->table_idx = -1; + + /* set FB config. */ + active_w_mixing = -1; + if ( ( error = ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, SBA_MODE_SPAR, nchan_internal, nchan_internal, active_w_mixing, output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + fb_cfg->pcm_offset = NS2SA( output_Fs, DELAY_FB_1_NS + IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ); + fb_cfg->remix_order = remix_order_set[pState->hMdDec->spar_md_cfg.remix_unmix_order]; + + /* FB mixer handle */ + if ( ( error = ivas_FB_mixer_open( &pState->hFbMixer, output_Fs, fb_cfg ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* AGC */ + if ( ( error = ivas_spar_agc_dec_open( &pState->hAgcDec, output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* PCA */ + if ( ( pState->hPCA = (PCA_DEC_STATE *) count_malloc( sizeof( PCA_DEC_STATE ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PCA decoder" ); + } + + init_pca_dec( pState->hPCA ); + + /* mixer_mat intitialization */ + for ( i = 0; i < nchan_internal; i++ ) + { + for ( j = 0; j < nchan_internal; j++ ) + { + for ( b = 0; b < IVAS_MAX_NUM_BANDS; b++ ) + { + pState->hMdDec->mixer_mat[i][j][b] = 0.0f; + for ( int16_t i_ts = 0; i_ts < ( MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); i_ts++ ) + { + pState->hMdDec->mixer_mat_prev[i_ts][i][j][b] = 0.0f; + } + } + } + } + pState->i_subframe = 0; + + *hSparFoa = pState; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_dec_close() + * + * Deallocate SPAR decoder handle for static memory + *------------------------------------------------------------------------*/ + +void ivas_spar_foa_dec_close( + ivas_spar_foa_dec_state_t **hSparFoa, /* i/o: SPAR FOA decoder handle */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + ivas_spar_foa_dec_state_t *pState; + + pState = *hSparFoa; + + if ( pState != NULL ) + { + /* MD handle */ + ivas_spar_foa_md_dec_close( &pState->hMdDec ); + + /* Covar. State handle */ + ivas_spar_td_decorr_dec_close( &pState->hTdDecorr ); + + /* FB mixer handle */ + ivas_FB_mixer_close( &pState->hFbMixer, output_Fs ); + + /* AGC */ + ivas_spar_agc_dec_close( &pState->hAgcDec ); + + /* PCA */ + if ( pState->hPCA != NULL ) + { + count_free( pState->hPCA ); + pState->hPCA = NULL; + } + + count_free( pState ); + pState = NULL; + } + + return; +} + + +/*---------------------------------------------------------------------* + * Function ivas_is_res_channel() + * + * determines if an FOA input channel is transmitted as residual channel. + *---------------------------------------------------------------------*/ + +/* !r: 1 if prediction residual channel */ +int16_t ivas_is_res_channel( + const int16_t ch, /* i : ch index in WYZX ordering */ + const int16_t nchan_transport /* i : number of transport channels (1-4) */ +) +{ + const int16_t rc_map[FOA_CHANNELS][FOA_CHANNELS] = { + { 0, 0, 0, 0 }, + { 0, 1, 0, 0 }, + { 0, 1, 0, 1 }, + { 0, 1, 1, 1 } + }; + + if ( ch >= FOA_CHANNELS ) + { + /* never transmitted */ + return 0; + } + assert( nchan_transport <= FOA_CHANNELS ); + + return ( rc_map[nchan_transport - 1][ch] ); +} + + +/*-------------------------------------------------------------------* + * ivas_spar_foa_dec_MD() + * + * IVAS SPAR MD decoder + *-------------------------------------------------------------------*/ + +void ivas_spar_foa_dec_MD( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + Decoder_State *st0 /* i/o: decoder state structure - for bitstream handling*/ +) +{ + int16_t num_channels, table_idx, num_bands_out, bfi, sba_order; + int32_t ivas_total_brate; + DECODER_CONFIG_HANDLE hDecoderConfig = st_ivas->hDecoderConfig; + ivas_spar_foa_dec_state_t *pState = st_ivas->hSpar->hSparFoa; + + wmops_sub_start( "ivas_spar_foa_dec_MD" ); + + /*---------------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------------*/ + + sba_order = min( st_ivas->sba_order, IVAS_MAX_SBA_ORDER ); + bfi = st_ivas->bfi; + ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + num_channels = ivas_sba_get_nchan_metadata( sba_order ); + + num_bands_out = pState->hFbMixer->pFb->filterbank_num_bands; + + if ( ivas_total_brate > FRAME_NO_DATA && bfi != 1 ) + { + if ( ivas_total_brate > IVAS_SID_5k ) + { + ivas_parse_spar_header( hDecoderConfig->ivas_total_brate, sba_order, st0, &table_idx ); + + pState->hMdDec->spar_md.num_bands = min( SPAR_DIRAC_SPLIT_START_BAND, IVAS_MAX_NUM_BANDS ); + + if ( pState->hMdDec->table_idx != table_idx ) + { + pState->hMdDec->table_idx = table_idx; + pState->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[table_idx].td_ducking; + + ivas_spar_foa_md_dec_init( pState->hMdDec, hDecoderConfig, num_channels ); + } + } + + + /*---------------------------------------------------------------------* + * Decode MD + *---------------------------------------------------------------------*/ + + ivas_spar_foa_md_dec_process( st_ivas, st0, num_bands_out, sba_order ); + + /*---------------------------------------------------------------------* + * read PCA bits + *---------------------------------------------------------------------*/ + + if ( hDecoderConfig->ivas_total_brate == PCA_BRATE && sba_order == 1 ) + { + ivas_pca_read_bits( st0, pState->hPCA ); + } + else + { + pState->hPCA->pca_bypass = PCA_MODE_INACTIVE; + } + + /*---------------------------------------------------------------------* + * Read AGC bits + *---------------------------------------------------------------------*/ + + if ( ivas_total_brate > IVAS_SID_5k && !bfi && ( pState->hMdDec->dtx_vad == 1 ) ) + { + pState->AGC_flag = get_next_indice( st0, 1 ); + + ivas_agc_read_bits( pState->hAgcDec, st0, pState->hMdDec->spar_md_cfg.nchan_transport, pState->AGC_flag ); + } + + /*---------------------------------------------------------------------* + * MD smoothing + *---------------------------------------------------------------------*/ + + if ( st0->m_old_frame_type == ZERO_FRAME && ivas_total_brate == IVAS_SID_5k && st0->prev_bfi == 0 && pState->hMdDec->spar_md_cfg.nchan_transport == 1 ) + { + ivas_spar_foa_setup_md_smoothing( pState->hMdDec, num_bands_out ); + } + else + { + ivas_spar_foa_update_md_hist( pState->hMdDec ); + } + } + else + { + if ( !bfi ) + { + ivas_spar_foa_smooth_md_dtx( pState->hMdDec, num_bands_out ); + } + + set_s( pState->hMdDec->valid_bands, 0, IVAS_MAX_NUM_BANDS ); + } + + wmops_sub_end(); + return; +} + + +/*-------------------------------------------------------------------* + * ivas_spar_get_cldfb_slot_gain() + * + * + *-------------------------------------------------------------------*/ + +static float ivas_spar_get_cldfb_slot_gain( + ivas_spar_foa_dec_state_t *hSparFoa, /* i/o: SPAR FOA decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t time_slot_idx, + int16_t *time_slot_idx0, + int16_t *time_slot_idx1, + float *weight_lowfreq ) +{ + ivas_spar_foa_dec_state_t *pState = hSparFoa; + float weight; + float output_Fs, encfb_delay, decfb_delay; + float xfade_start_ns; + int16_t xfade_delay_subframes; + int16_t i_hist; + int16_t split_band; + + *weight_lowfreq = pState->hFbMixer->cldfb_cross_fade[time_slot_idx]; + + output_Fs = (float) hDecoderConfig->output_Fs; + encfb_delay = IVAS_FB_ENC_DELAY_NS; + decfb_delay = IVAS_FB_DEC_DELAY_NS; + // VE: overcomplicated logic -> rewrite + xfade_start_ns = pState->hFbMixer->cross_fade_start_offset / output_Fs * 1000000000.f - encfb_delay + decfb_delay * 0.5f; + xfade_delay_subframes = (int16_t) ( xfade_start_ns / ( FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ) ); + + i_hist = 4 - xfade_delay_subframes; + split_band = SPAR_DIRAC_SPLIT_START_BAND; + + if ( split_band < IVAS_MAX_NUM_BANDS ) + { + if ( hSparFoa->i_subframe > 3 ) + { + weight = (float) ( time_slot_idx % MAX_PARAM_SPATIAL_SUBFRAMES ) / (float) MAX_PARAM_SPATIAL_SUBFRAMES; + } + else + { + weight = 0.0f; + } + *time_slot_idx0 = i_hist; + *time_slot_idx1 = i_hist + 1; + } + else + { + /* determine cross-fade gain for current frame Parameters*/ + *time_slot_idx0 = pState->hFbMixer->cldfb_cross_fade_start; + *time_slot_idx1 = pState->hFbMixer->cldfb_cross_fade_end; + weight = *weight_lowfreq; + } + + return weight; +} + + +/*-------------------------------------------------------------------* + * ivas_spar_get_parameters() + * + * + *-------------------------------------------------------------------*/ + +void ivas_spar_get_parameters( + ivas_spar_foa_dec_state_t *hSparFoa, /* i/o: SPAR FOA decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t ts, + const int16_t num_ch_out, + const int16_t num_ch_in, + const int16_t num_spar_bands, + float par_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS] ) +{ + int16_t spar_band, out_ch, in_ch; + float weight, weight_20ms; + int16_t ts0, ts1, split_band; + + weight = ivas_spar_get_cldfb_slot_gain( hSparFoa, hDecoderConfig, ts, &ts0, &ts1, &weight_20ms ); + + split_band = SPAR_DIRAC_SPLIT_START_BAND; + for ( spar_band = 0; spar_band < num_spar_bands; spar_band++ ) + { + for ( out_ch = 0; out_ch < num_ch_out; out_ch++ ) + { + for ( in_ch = 0; in_ch < num_ch_in; in_ch++ ) + { + if ( split_band < IVAS_MAX_NUM_BANDS + /* 20ms cross-fade for Transport channels in all frequency bands */ + && ( 0 == ivas_is_res_channel( out_ch, hSparFoa->hMdDec->spar_md_cfg.nchan_transport ) ) /* sub-frame processing for missing channels in all frequency bands*/ + ) + { + if ( hSparFoa->i_subframe > 3 ) + { + par_mat[out_ch][in_ch][spar_band] = ( 1.0f - weight ) * hSparFoa->hMdDec->mixer_mat_prev[ts0][out_ch][in_ch][spar_band] + + weight * hSparFoa->hMdDec->mixer_mat_prev[ts1][out_ch][in_ch][spar_band]; + } + else + { + par_mat[out_ch][in_ch][spar_band] = hSparFoa->hMdDec->mixer_mat[out_ch][in_ch][spar_band]; + } + } + else + { + /* 20ms Transport channel reconstruction with matching encoder/decoder processing */ + int16_t prev_idx = SPAR_DIRAC_SPLIT_START_BAND < IVAS_MAX_NUM_BANDS ? 1 : 0; /* if SPAR_DIRAC_SPLIT_START_BAND == IVAS_MAX_NUM_BANDS, then the sub-frame mixer_mat delay line is not active */ + par_mat[out_ch][in_ch][spar_band] = ( 1.0f - weight_20ms ) * hSparFoa->hMdDec->mixer_mat_prev[prev_idx][out_ch][in_ch][spar_band] + weight_20ms * hSparFoa->hMdDec->mixer_mat[out_ch][in_ch][spar_band]; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_spar_get_skip_mat() + * + * + *-------------------------------------------------------------------*/ + +static void ivas_spar_get_skip_mat( + ivas_spar_foa_dec_state_t *hSparFoa, /* i/o: SPAR FOA decoder handle */ + const int16_t num_ch_out, + const int16_t num_ch_in, + const int16_t num_spar_bands, + int16_t skip_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH] ) +{ + int16_t spar_band, out_ch, in_ch; + int16_t i_ts, skip_flag; + + for ( out_ch = 0; out_ch < num_ch_out; out_ch++ ) + { + for ( in_ch = 0; in_ch < num_ch_in; in_ch++ ) + { + skip_mat[out_ch][in_ch] = 1; + skip_flag = 1; + + for ( i_ts = 0; i_ts < MAX_PARAM_SPATIAL_SUBFRAMES; i_ts++ ) + { + for ( spar_band = 0; spar_band < num_spar_bands; spar_band++ ) + { + if ( hSparFoa->hMdDec->mixer_mat_prev[1 + i_ts][out_ch][in_ch][spar_band] != 0.0f || hSparFoa->hMdDec->mixer_mat[out_ch][in_ch][spar_band + i_ts * MAX_PARAM_SPATIAL_SUBFRAMES] != 0.0f ) + { + skip_flag = 0; + break; + } + } + + if ( skip_flag == 0 ) + { + skip_mat[out_ch][in_ch] = 0; + break; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_spar_foa_dec_upmixer() + * + * IVAS SPAR FOA upmixer + *-------------------------------------------------------------------*/ + +void ivas_spar_foa_dec_upmixer( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output[][L_FRAME48k], /* i/o: input/output audio channels */ + const int16_t nchan_internal, /* i : number of internal channels */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t cldfb_band, num_cldfb_bands, numch_in, numch_out; + float *cldfb_in_ts_re[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX]; + float *cldfb_in_ts_im[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX]; + int16_t i, b, ts, out_ch, in_ch; + int16_t num_spar_bands, spar_band, nchan_transport; + int16_t num_in_ingest, num_bands_out, split_band; + float Pcm_tmp[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + int16_t numch_out_dirac; + float *pPcm_tmp[MAX_OUTPUT_CHANNELS]; + float mixer_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; + int16_t b_skip_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + DECODER_CONFIG_HANDLE hDecoderConfig; + ivas_spar_foa_dec_state_t *pState, *hSparFoa; + + wmops_sub_start( "ivas_spar_foa_dec_upmixer" ); + + hSparFoa = st_ivas->hSpar->hSparFoa; + pState = hSparFoa; + hDecoderConfig = st_ivas->hDecoderConfig; + num_bands_out = pState->hFbMixer->pFb->filterbank_num_bands; + nchan_transport = pState->hMdDec->spar_md_cfg.nchan_transport; + + num_cldfb_bands = hSparFoa->hFbMixer->pFb->fb_bin_to_band.num_cldfb_bands; + numch_in = hSparFoa->hFbMixer->fb_cfg->num_in_chans; + numch_out = hSparFoa->hFbMixer->fb_cfg->num_out_chans; + +#ifdef DEBUG_SPAR_FOA + if ( fFb_pcm != NULL ) + { + for ( i = 0; i < output_frame; i++ ) + { + for ( int16_t j = 0; j < nchan_transport; j++ ) + { + fscanf( fFb_pcm, "%f\n", &output[j][i] ); + } + } + } +#endif + + /* by-pass EVS */ +#ifdef DEBUG_SPAR_BYPASS_EVS_CODEC + /*write the core coder output to a file for debugging*/ + { + float tmp; + int16_t pcm, j; + for ( j = 0; j < output_frame; j++ ) + { + for ( i = 0; i < nchan_transport; i++ ) + { + tmp = roundf( output[i][j] * PCM16_TO_FLT_FAC ); + pcm = ( tmp > MAX16B_FLT ) ? MAX16B : ( tmp < MIN16B_FLT ) ? MIN16B + : (short) tmp; + dbgwrite( &pcm, sizeof( int16_t ), 1, 1, "dmx_dec.raw" ); + } + } + } + + /*overwrite the core coder output with core input for debugging*/ + { + static FILE *fid_enc = 0; + int16_t smp; + + if ( !fid_enc ) + { + fid_enc = fopen( "evs_input_float.raw", "rb" ); + } + for ( smp = 0; smp < L_FRAME48k; smp++ ) + { + for ( in_ch = 0; in_ch < nchan_transport; in_ch++ ) + { + fread( &output[in_ch][smp], sizeof( float ), 1, fid_enc ); + } + } + } +#endif + + /*---------------------------------------------------------------------* + * AGC + *---------------------------------------------------------------------*/ + + ivas_agc_dec_process( pState->hAgcDec, output, output, nchan_transport, output_frame ); + + /*---------------------------------------------------------------------* + * TD Decorr and pcm ingest + *---------------------------------------------------------------------*/ + + if ( pState->hMdDec->td_decorr_flag ) + { + num_in_ingest = nchan_internal; + } + else + { + num_in_ingest = nchan_transport; + } + + for ( i = 0; i < nchan_internal; i++ ) + { + pPcm_tmp[i] = Pcm_tmp[i]; + } + + /*---------------------------------------------------------------------* + * PCA decoder + *---------------------------------------------------------------------*/ + + ivas_pca_dec( pState->hPCA, output_frame, num_in_ingest, hDecoderConfig->ivas_total_brate, hDecoderConfig->last_ivas_total_brate, st_ivas->bfi, output ); + + /*---------------------------------------------------------------------* + * TD decorrelation + *---------------------------------------------------------------------*/ + + if ( pState->hMdDec->td_decorr_flag ) + { + ivas_td_decorr_process( pState->hTdDecorr, output, pPcm_tmp, output_frame ); + + for ( i = 0; i < nchan_internal - nchan_transport; i++ ) + { + mvr2r( pPcm_tmp[pState->hTdDecorr->num_apd_outputs - 1 - i], output[nchan_internal - 1 - i], output_frame ); + } + + pState->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; + } + else + { + pState->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; + } + + /*---------------------------------------------------------------------* + * Prepare CLDFB buffers + *---------------------------------------------------------------------*/ + + /* set-up pointers */ + if ( st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_FOA ) + { + /* at this point, output channels are used as intermediate procesing buffers */ + for ( in_ch = 0; in_ch < MAX_OUTPUT_CHANNELS; in_ch++ ) + { + for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) + { + cldfb_in_ts_re[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands]; + cldfb_in_ts_im[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands + 4 * num_cldfb_bands]; + } + } + } + else + { + for ( in_ch = 0; in_ch < numch_in; in_ch++ ) + { + for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) + { + cldfb_in_ts_re[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands]; + cldfb_in_ts_im[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands + 4 * num_cldfb_bands]; + } + } + } + + + /*---------------------------------------------------------------------* + * Gen umx mat + *---------------------------------------------------------------------*/ + + ivas_spar_foa_dec_gen_umx_mat( pState->hMdDec, nchan_transport, num_bands_out, st_ivas->bfi ); + + + /*---------------------------------------------------------------------* + * CLDFB Processing and Synthesis + *---------------------------------------------------------------------*/ + + num_spar_bands = hSparFoa->hFbMixer->pFb->filterbank_num_bands; + + /* apply parameters */ + /* determine if we can skip certain data */ + ivas_spar_get_skip_mat( hSparFoa, numch_out, numch_in, num_spar_bands, b_skip_mat ); /* this can be precomputed based on bitrate and format*/ + + numch_out_dirac = audioCfg2channels( st_ivas->hDecoderConfig->output_config ); + + for ( int16_t i_sf = 0; i_sf < MAX_PARAM_SPATIAL_SUBFRAMES; i_sf++ ) + { + /* CLDFB analysis of incoming frame */ + for ( in_ch = 0; in_ch < numch_in; in_ch++ ) + { + for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) + { + cldfbAnalysis_ts( + &output[in_ch][( ts + i_sf * MAX_PARAM_SPATIAL_SUBFRAMES ) * num_cldfb_bands], + cldfb_in_ts_re[in_ch][ts], + cldfb_in_ts_im[in_ch][ts], + num_cldfb_bands, + st_ivas->cldfbAnaDec[in_ch] ); + } + } + + for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) + { + /* determine SPAR parameters for this time slots */ + ivas_spar_get_parameters( hSparFoa, hDecoderConfig, ts + i_sf * MAX_PARAM_SPATIAL_SUBFRAMES, numch_out, numch_in, num_spar_bands, mixer_mat ); + + for ( cldfb_band = 0; cldfb_band < num_cldfb_bands; cldfb_band++ ) + { + float out_re[IVAS_SPAR_MAX_CH]; + float out_im[IVAS_SPAR_MAX_CH]; + float cldfb_par; + ivas_fb_bin_to_band_data_t *bin2band = &pState->hFbMixer->pFb->fb_bin_to_band; + + for ( out_ch = 0; out_ch < numch_out; out_ch++ ) + { + out_re[out_ch] = 0.0f; + out_im[out_ch] = 0.0f; + + for ( in_ch = 0; in_ch < numch_in; in_ch++ ) + { + if ( b_skip_mat[out_ch][in_ch] ) + { + continue; + } + else if ( cldfb_band < CLDFB_PAR_WEIGHT_START_BAND ) /* tuning parameter, depends on how much SPAR Filters overlap for the CLDFB bands */ + { + spar_band = bin2band->p_cldfb_map_to_spar_band[cldfb_band]; + cldfb_par = mixer_mat[out_ch][in_ch][spar_band]; + } + else + { + cldfb_par = 0.0f; + for ( spar_band = bin2band->p_spar_start_bands[cldfb_band]; spar_band < num_spar_bands; spar_band++ ) + { + /* accumulate contributions from all SPAR bands */ + cldfb_par += mixer_mat[out_ch][in_ch][spar_band] * bin2band->pp_cldfb_weights_per_spar_band[cldfb_band][spar_band]; + } + } + + out_re[out_ch] += cldfb_in_ts_re[in_ch][ts][cldfb_band] * cldfb_par; + out_im[out_ch] += cldfb_in_ts_im[in_ch][ts][cldfb_band] * cldfb_par; + } + } + + /*update CLDFB data with the parameter-modified data*/ + for ( out_ch = 0; out_ch < numch_out; out_ch++ ) + { + cldfb_in_ts_re[out_ch][ts][cldfb_band] = out_re[out_ch]; + cldfb_in_ts_im[out_ch][ts][cldfb_band] = out_im[out_ch]; + } + } + } + + if ( st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_FOA ) + { + nchan_transport = ivas_sba_get_nchan_metadata( st_ivas->sba_order ); // VE: == nchan_internal that is already set correctly + + ivas_dirac_dec( st_ivas, output, nchan_transport, cldfb_in_ts_re, cldfb_in_ts_im, i_sf ); + } + + if ( st_ivas->hDirAC != NULL ) + { + int16_t outchannels, idx_in, idx_lfe, ch; + idx_in = 0; + idx_lfe = 0; + + outchannels = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + for ( ch = 0; ch < outchannels; ch++ ) + { + if ( ( st_ivas->hOutSetup.num_lfe > 0 ) && ( st_ivas->hOutSetup.index_lfe[idx_lfe] == ch ) ) + { + set_zero( &( output[ch][0] ), CLDFB_NO_COL_MAX * num_cldfb_bands ); + + if ( idx_lfe < ( st_ivas->hDirAC->hOutSetup.num_lfe - 1 ) ) + { + idx_lfe++; + } + } + else + { + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_FOA || + !( st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) + { + for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) + { + cldfbSynthesis( + &cldfb_in_ts_re[idx_in][ts], + &cldfb_in_ts_im[idx_in][ts], + &output[ch][( ts + i_sf * MAX_PARAM_SPATIAL_SUBFRAMES ) * num_cldfb_bands], + num_cldfb_bands, + st_ivas->cldfbSynDec[idx_in] ); + } + } + idx_in++; + } + } + } + else + { + /* CLDFB to time synthesis (overwrite mixer output) */ + for ( out_ch = 0; out_ch < numch_out_dirac; out_ch++ ) + { + for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) + { + cldfbSynthesis( + &cldfb_in_ts_re[out_ch][ts], + &cldfb_in_ts_im[out_ch][ts], + &output[out_ch][( ts + i_sf * MAX_PARAM_SPATIAL_SUBFRAMES ) * num_cldfb_bands], + num_cldfb_bands, + st_ivas->cldfbSynDec[out_ch] + + ); + } + } + } + + split_band = SPAR_DIRAC_SPLIT_START_BAND; + if ( split_band < IVAS_MAX_NUM_BANDS ) + { + pState->i_subframe++; + pState->i_subframe = min( pState->i_subframe, MAX_PARAM_SPATIAL_SUBFRAMES ); + mvr2r( pState->hMdDec->mixer_mat_prev[1][0][0], pState->hMdDec->mixer_mat_prev[0][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + mvr2r( pState->hMdDec->mixer_mat_prev[2][0][0], pState->hMdDec->mixer_mat_prev[1][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + mvr2r( pState->hMdDec->mixer_mat_prev[3][0][0], pState->hMdDec->mixer_mat_prev[2][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + mvr2r( pState->hMdDec->mixer_mat_prev[4][0][0], pState->hMdDec->mixer_mat_prev[3][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); + + for ( out_ch = 0; out_ch < numch_out; out_ch++ ) + { + for ( in_ch = 0; in_ch < numch_in; in_ch++ ) + { + for ( b = 0; b < num_spar_bands; b++ ) + { + pState->hMdDec->mixer_mat_prev[4][out_ch][in_ch][b] = pState->hMdDec->mixer_mat[out_ch][in_ch][b + i_sf * IVAS_MAX_NUM_BANDS]; + } + } + } + } + } + + + wmops_sub_end(); + + return; +} diff --git a/lib_dec/ivas_spar_foa_md_dec.c b/lib_dec/ivas_spar_foa_md_dec.c new file mode 100644 index 0000000000..861a0fbb46 --- /dev/null +++ b/lib_dec/ivas_spar_foa_md_dec.c @@ -0,0 +1,2751 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "math.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include +#include "wmops.h" +#include "ivas_stat_dec.h" + + +/*#define ENABLE_DITHER */ /* IVAS_fmToDo: development switch */ + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define IVAS_DEFAULT_DTX_CNG_RAMP ( 8 ) + +/* PLC constants */ +static const int16_t ivas_spar_dec_plc_num_frames_keep = 9; +static const int16_t ivas_spar_dec_plc_num_frames_fade_out = 9; +static const int16_t ivas_spar_dec_plc_per_frame_ramp_down_gain_dB = 3; +static const int16_t ivas_spar_dec_plc_max_num_frames_ramp_down = 33; +static const int16_t ivas_spar_dec_plc_spatial_target[IVAS_SPAR_MAX_CH] = { 1, 0, 0, 0, 0, 0, 0, 0 }; + + +/*------------------------------------------------------------------------------------------* + * Static functions declaration + *------------------------------------------------------------------------------------------*/ + +static void ivas_get_spar_matrices( ivas_spar_foa_md_dec_state_t *pState, const int16_t num_bands_out, const int16_t n_ts, const int16_t bw, const int16_t dtx_vad, const int16_t nB, const int16_t sba_order ); + +static void ivas_decode_arith_bs( ivas_spar_foa_md_dec_state_t *pState, Decoder_State *st, const uint16_t qsi, const int16_t nB, const int16_t bands_bw, int16_t *pDo_diff, const int16_t freq_diff, const int16_t planarCP ); + +static void ivas_decode_huffman_bs( ivas_spar_foa_md_dec_state_t *pState, Decoder_State *st, const uint16_t qsi, const int16_t nB, const int16_t bands_bw, const int16_t planarCP ); + +static void ivas_fill_band_coeffs_idx( ivas_band_coeffs_ind_t *pBands_idx, const int16_t nB, int16_t *pSymbol_re, ivas_cell_dim_t *pCell_dims, ivas_coeffs_type_t coeff_type, const int16_t planarCP ); + +static void ivas_get_band_idx_from_differential( ivas_spar_md_t *pSpar_md, const int16_t q_levels[2], const int16_t one_sided, const int16_t nB, const ivas_coeffs_type_t coeff_type ); + +static void ivas_mat_col_rearrange( float in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], const int16_t order[IVAS_SPAR_MAX_CH], const int16_t i_ts, float ***mixer_mat, const int16_t bands, const int16_t num_ch ); + +static void ivas_spar_foa_dec_compute_ramp_down_post_matrix( ivas_spar_foa_md_dec_state_t *pState, const int16_t num_bands, const int16_t bfi ); + +static void ivas_spar_md_fill_invalid_bands( ivas_spar_dec_matrices_t *pSpar_coeffs, ivas_spar_dec_matrices_t *pSpar_coeffs_prev, int16_t *valid_bands, int16_t *base_band_age, const int16_t num_bands, const int16_t sba_order ); + +static ivas_error ivas_spar_foa_set_dec_config( ivas_spar_foa_md_dec_state_t *pState, const int16_t nchan_transport, float *pFC ); + +static void ivas_parse_parameter_bitstream_dtx( ivas_spar_md_t *pSpar_md, Decoder_State *st, const int16_t bw, const int16_t num_bands, int16_t *num_dmx_per_band, int16_t *num_dec_per_band ); + +static ivas_error ivas_deindex_real_index( int16_t **index, const int16_t q_levels, const float min_value, const float max_value, float **quant, const int16_t num_ch, const int16_t dim2 ); + +static void ivas_spar_foa_dec_parse_md_bs( ivas_spar_foa_md_dec_state_t *hMdDec, Decoder_State *st, int16_t *nB, int16_t *bands_bw, int16_t *dtx_vad, const int32_t ivas_total_brate, const int16_t use_planar_coeff, const int16_t sba_inactive_mode ); + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_md_dec_matrix_open() + * + * Allocate and initialize SPAR MD decoder matrices + *------------------------------------------------------------------------*/ + +static ivas_error ivas_spar_foa_md_dec_matrix_open( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t num_channels /* i : number of internal channels */ +) +{ + int16_t i, j; + + if ( ( hMdDec->mixer_mat = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdDec->mixer_mat[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdDec->mixer_mat[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( hMdDec->spar_coeffs.C_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdDec->spar_coeffs.C_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdDec->spar_coeffs.C_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( hMdDec->spar_coeffs.P_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdDec->spar_coeffs.P_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdDec->spar_coeffs.P_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( hMdDec->spar_coeffs_prev.C_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdDec->spar_coeffs_prev.C_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdDec->spar_coeffs_prev.C_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( hMdDec->spar_coeffs_prev.P_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdDec->spar_coeffs_prev.P_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdDec->spar_coeffs_prev.P_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( hMdDec->spar_coeffs_tar.C_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdDec->spar_coeffs_tar.C_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdDec->spar_coeffs_tar.C_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( hMdDec->spar_coeffs_tar.P_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdDec->spar_coeffs_tar.P_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdDec->spar_coeffs_tar.P_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_md_dec_open() + * + * Allocate and initialize SPAR MD decoder handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_foa_md_dec_open( + ivas_spar_foa_md_dec_state_t **hMdDec_out, /* i/o: SPAR MD decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t num_channels /* i : number of internal channels */ +) +{ + ivas_spar_foa_md_dec_state_t *hMdDec; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( hMdDec = (ivas_spar_foa_md_dec_state_t *) count_malloc( sizeof( ivas_spar_foa_md_dec_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD decoder" ); + } + + if ( ( error = ivas_spar_foa_md_dec_matrix_open( hMdDec, num_channels ) ) != IVAS_ERR_OK ) + { + return error; + } + + hMdDec->table_idx = 0; /* just to initialize state variables*/ + + if ( ( error = ivas_spar_foa_md_dec_init( hMdDec, hDecoderConfig, num_channels ) ) != IVAS_ERR_OK ) + { + return error; + } + + *hMdDec_out = hMdDec; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_md_dec_matrix_close() + * + * Deallocate SPAR MD decoder matrices + *------------------------------------------------------------------------*/ + +static void ivas_spar_foa_md_dec_matrix_close( + ivas_spar_foa_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */ + const int16_t num_channels /* i : number of internal channels */ +) +{ + int16_t i, j; + + if ( hMdDecoder->mixer_mat != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdDecoder->mixer_mat[i][j] ); + } + count_free( hMdDecoder->mixer_mat[i] ); + } + count_free( hMdDecoder->mixer_mat ); + } + + if ( hMdDecoder->spar_coeffs.C_re != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdDecoder->spar_coeffs.C_re[i][j] ); + } + count_free( hMdDecoder->spar_coeffs.C_re[i] ); + } + count_free( hMdDecoder->spar_coeffs.C_re ); + } + + if ( hMdDecoder->spar_coeffs.P_re != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdDecoder->spar_coeffs.P_re[i][j] ); + } + count_free( hMdDecoder->spar_coeffs.P_re[i] ); + } + count_free( hMdDecoder->spar_coeffs.P_re ); + } + + if ( hMdDecoder->spar_coeffs_prev.C_re != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdDecoder->spar_coeffs_prev.C_re[i][j] ); + } + count_free( hMdDecoder->spar_coeffs_prev.C_re[i] ); + } + count_free( hMdDecoder->spar_coeffs_prev.C_re ); + } + + if ( hMdDecoder->spar_coeffs_prev.P_re != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdDecoder->spar_coeffs_prev.P_re[i][j] ); + } + count_free( hMdDecoder->spar_coeffs_prev.P_re[i] ); + } + count_free( hMdDecoder->spar_coeffs_prev.P_re ); + } + + if ( hMdDecoder->spar_coeffs_tar.C_re != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdDecoder->spar_coeffs_tar.C_re[i][j] ); + } + count_free( hMdDecoder->spar_coeffs_tar.C_re[i] ); + } + count_free( hMdDecoder->spar_coeffs_tar.C_re ); + } + + if ( hMdDecoder->spar_coeffs_tar.P_re != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdDecoder->spar_coeffs_tar.P_re[i][j] ); + } + count_free( hMdDecoder->spar_coeffs_tar.P_re[i] ); + } + count_free( hMdDecoder->spar_coeffs_tar.P_re ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_md_dec_close() + * + * Deallocate SPAR MD decoder handle + *------------------------------------------------------------------------*/ + +void ivas_spar_foa_md_dec_close( + ivas_spar_foa_md_dec_state_t **hMdDec /* i/o: SPAR MD decoder handle */ +) +{ + ivas_spar_foa_md_dec_state_t *hMdDecoder; + int16_t num_channels; + + hMdDecoder = *hMdDec; + num_channels = hMdDecoder->spar_md_cfg.num_umx_chs; + + ivas_spar_foa_md_dec_matrix_close( hMdDecoder, num_channels ); + + if ( *hMdDec != NULL ) + { + count_free( *hMdDec ); + *hMdDec = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_md_dec_init() + * + * Init call for md dec process + *-----------------------------------------------------------------------------------------*/ + +ivas_error ivas_spar_foa_md_dec_init( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ + const int16_t num_channels /* i : number of internal channels */ +) +{ + int16_t i, j, k; + int16_t nchan_transport; + float pFC[IVAS_MAX_NUM_BANDS], PR_minmax[2]; + ivas_spar_foa_md_dec_state_t *pState = hMdDec; + + pState->spar_md_cfg.gen_bs = 1; + ivas_spar_set_bitrate_config( &pState->spar_md_cfg, pState->table_idx, min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ) ); + + nchan_transport = pState->spar_md_cfg.nchan_transport; + + /* get FB coefficients */ + for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) + { + pFC[i] = ivas_fb_fcs_12band_1ms[i] * hDecoderConfig->output_Fs * 0.5f; + } + + ivas_spar_foa_set_dec_config( pState, nchan_transport, pFC ); + + if ( nchan_transport != 2 && ( ( pState->spar_md_cfg.remix_unmix_order == 2 ) || ( pState->spar_md_cfg.remix_unmix_order == 1 ) ) ) + { + return IVAS_ERR_INTERNAL; + } + + /* DTX quant init */ + PR_minmax[0] = pState->spar_md_cfg.quant_strat[0].PR.min; + PR_minmax[1] = pState->spar_md_cfg.quant_strat[0].PR.max; + ivas_spar_quant_dtx_init( &pState->spar_md, PR_minmax ); + + ivas_arith_coeffs_dec_init( &pState->arith_coeffs, &pState->spar_md_cfg, pState->table_idx ); + ivas_huff_coeffs_dec_init( &pState->huff_coeffs, &pState->spar_md_cfg, pState->table_idx ); + + pState->spar_md_cfg.prev_quant_idx = -1; + + /* initialize PLC state */ + set_s( pState->valid_bands, 0, IVAS_MAX_NUM_BANDS ); + set_s( pState->base_band_age, 0, IVAS_MAX_NUM_BANDS ); + pState->spar_plc_num_lost_frames = 0; + pState->spar_plc_enable_fadeout_flag = 1; + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + pState->spar_coeffs_prev.C_re[i][j][k] = 0; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + pState->spar_coeffs_prev.P_re[i][j][k] = 0; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + pState->spar_coeffs_tar.C_re[i][j][k] = 0; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + pState->spar_coeffs_tar.P_re[i][j][k] = 0; + } + } + } + + pState->dtx_md_smoothing_cntr = 1; + + ivas_clear_band_coeffs( pState->spar_md.band_coeffs, IVAS_MAX_NUM_BANDS ); + ivas_clear_band_coeff_idx( pState->spar_md.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); + ivas_clear_band_coeff_idx( pState->spar_md_prev.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); + ivas_clear_band_coeff_idx( pState->spar_md_prev.band_coeffs_idx_mapped, IVAS_MAX_NUM_BANDS ); + + pState->spar_md.dtx_vad = 0; + pState->spar_md.num_bands = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); + pState->td_decorr_flag = 1; + + set_f( pState->spar_md.en_ratio_slow, 0.0f, IVAS_MAX_NUM_BANDS ); + set_f( pState->spar_md.ref_pow_slow, 0.0f, IVAS_MAX_NUM_BANDS ); + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_set_dec_config() + * + * Set configuration for SPAR FOA md dec + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_spar_foa_set_dec_config( + ivas_spar_foa_md_dec_state_t *pState, + const int16_t nchan_transport, + float *pFC ) +{ + int16_t i, j, nchan, dmx_ch; + + for ( i = 0; i < nchan_transport; i++ ) + { + pState->spar_md_cfg.max_freq_per_chan[i] = ivas_spar_br_table_consts[pState->table_idx].fpcs; + } + + nchan = ivas_sba_get_nchan_metadata( ivas_spar_br_table_consts[pState->table_idx].sba_order ); + + switch ( nchan ) + { + case 4: /* FOA_CHANNELS */ + pState->num_decorr = IVAS_TD_DECORR_OUT_3CH; + break; + case 9: /* IVAS_HOA_2_CH */ // VE: is this relevant? + pState->num_decorr = IVAS_TD_DECORR_OUT_5CH; + break; + case 16: /* IVAS_HOA_3_CH */ // VE: is this relevant? + pState->num_decorr = IVAS_TD_DECORR_OUT_12CH; + break; + case 6: /* IVAS_HOA_2_CH */ + pState->num_decorr = IVAS_TD_DECORR_OUT_2CH; + break; + case 8: /* IVAS_HOA_3_CH */ + pState->num_decorr = IVAS_TD_DECORR_OUT_4CH; + break; + } + + pState->spar_md_cfg.num_umx_chs = nchan; + + dmx_ch = 0; + for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) + { + dmx_ch = 0; + for ( j = 0; j < nchan_transport; j++ ) + { + if ( pFC[i] < pState->spar_md_cfg.max_freq_per_chan[j] ) + { + dmx_ch += 1; + } + } + + pState->spar_md_cfg.num_dmx_chans_per_band[i] = pState->spar_md_cfg.nchan_transport; + pState->spar_md_cfg.num_decorr_per_band[i] = nchan - pState->spar_md_cfg.nchan_transport; + } + + pState->spar_md_cfg.nchan_transport = dmx_ch; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_md_dec_process() + * + * SPAR FOA Meta Data decoder process + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_foa_md_dec_process( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const int16_t num_bands_out, /* i : number of output bands */ + const int16_t sba_order /* i : Ambisonic (SBA) order */ +) +{ + int16_t j, b, bw, dtx_vad, nB, i_ts; + ivas_spar_foa_md_dec_state_t *hMdDec = st_ivas->hSpar->hSparFoa->hMdDec; + + ivas_spar_foa_dec_parse_md_bs( hMdDec, st0, &nB, &bw, &dtx_vad, st_ivas->hDecoderConfig->ivas_total_brate, + ivas_spar_br_table_consts[hMdDec->table_idx].usePlanarCoeff, + st_ivas->hQMetaData->sba_inactive_mode ); + + /* SPAR to DirAC and DirAC to SPAR conversion */ + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + ivas_spar_to_dirac( st_ivas, hMdDec, dtx_vad, num_bands_out ); + + /* set correct number of bands*/ + nB = IVAS_MAX_NUM_BANDS; + if ( bw == IVAS_RED_BAND_FACT ) + { + nB = nB >> 1; + } + } + + /* expand DirAC MD to all time slots */ + for ( i_ts = 1; i_ts < MAX_PARAM_SPATIAL_SUBFRAMES; i_ts++ ) + { + for ( b = 0; b < min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); b++ ) + { + for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + { + hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j] = hMdDec->spar_md.band_coeffs[b].pred_re[j]; + } + + for ( j = 0; j < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; j++ ) + { + for ( int16_t k = 0; k < IVAS_SPAR_MAX_DMX_CHS - 1; k++ ) + { + hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].C_re[j][k] = hMdDec->spar_md.band_coeffs[b].C_re[j][k]; + } + } + + for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + { + hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].P_re[j] = hMdDec->spar_md.band_coeffs[b].P_re[j]; + } + } + } + + ivas_get_spar_matrices( hMdDec, num_bands_out, MAX_PARAM_SPATIAL_SUBFRAMES, bw, dtx_vad, nB, sba_order ); + +#ifdef DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS + { + static FILE *fid = 0; + int16_t band = 9; + if ( !fid ) + { + fid = fopen( "pred_coeffs_dec.txt", "wt" ); + } + fprintf( fid, "%.6f\n", hMdDec->mixer_mat[1][0][band] ); + } +#endif + + for ( b = nB; b < num_bands_out; b++ ) + { + hMdDec->valid_bands[b] = 1; + } + + ivas_spar_md_fill_invalid_bands( &hMdDec->spar_coeffs, &hMdDec->spar_coeffs_prev, &hMdDec->valid_bands[0], &hMdDec->base_band_age[0], num_bands_out, sba_order ); + + hMdDec->dtx_md_smoothing_cntr = 1; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_smooth_md_dtx() + * + * Smooth MD during no data frame during DTX + *-----------------------------------------------------------------------------------------*/ +#ifdef SPAR_HOA_DBG +/* NOTE: No changes here as DTX only operates below 160kbps */ +#endif +void ivas_spar_foa_smooth_md_dtx( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t num_bands_out /* i : number of output bands */ +) +{ + int16_t j, k, b; + int16_t dmx_ch; + ivas_spar_foa_md_dec_state_t *pState = hMdDec; + float ramp, tar, prev, new_val; + + ramp = (float) pState->dtx_md_smoothing_cntr / IVAS_DEFAULT_DTX_CNG_RAMP; + + for ( b = 0; b < num_bands_out; b++ ) + { + dmx_ch = pState->spar_md_cfg.num_dmx_chans_per_band[b]; + + for ( j = 1; j < FOA_CHANNELS; j++ ) + { + for ( k = dmx_ch; k < FOA_CHANNELS; k++ ) + + { + prev = pState->spar_coeffs_prev.P_re[j][k][b]; + tar = pState->spar_coeffs_tar.P_re[j][k][b]; + new_val = prev + ( ramp * ( tar - prev ) ); + pState->spar_coeffs.P_re[j][k][b] = new_val; + } + } + + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + for ( k = 0; k < dmx_ch; k++ ) + { + prev = pState->spar_coeffs_prev.C_re[j][k][b]; + tar = pState->spar_coeffs_tar.C_re[j][k][b]; + new_val = prev + ( ramp * ( tar - prev ) ); + pState->spar_coeffs.C_re[j][k][b] = new_val; + } + } + } + + /* expand MD to all time slots */ + for ( int16_t i_ts = 1; i_ts < MAX_PARAM_SPATIAL_SUBFRAMES; i_ts++ ) + { + for ( b = 0; b < num_bands_out; b++ ) + { + dmx_ch = pState->spar_md_cfg.num_dmx_chans_per_band[b]; + + for ( j = 1; j < FOA_CHANNELS; j++ ) + { + for ( k = dmx_ch; k < FOA_CHANNELS; k++ ) + + { + pState->spar_coeffs.P_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS] = pState->spar_coeffs.P_re[j][k][b]; + } + } + + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + for ( k = 0; k < dmx_ch; k++ ) + { + pState->spar_coeffs.C_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS] = pState->spar_coeffs.C_re[j][k][b]; + } + } + } + } + + pState->dtx_md_smoothing_cntr = min( pState->dtx_md_smoothing_cntr + 1, IVAS_DEFAULT_DTX_CNG_RAMP ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_setup_md_smoothing() + * + * Set up smoothing of SPAR MD when SID update frame is received + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_foa_setup_md_smoothing( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t num_bands_out /* i : number of output bands */ +) +{ + /* copy the coeffs */ + int16_t num_channels, i, j, k; + + num_channels = hMdDec->spar_md_cfg.num_umx_chs; + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_prev.C_re[i][j][k] = hMdDec->spar_coeffs_tar.C_re[i][j][k]; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_prev.P_re[i][j][k] = hMdDec->spar_coeffs_tar.P_re[i][j][k]; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_tar.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_tar.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; + } + } + } + + ivas_spar_foa_smooth_md_dtx( hMdDec, num_bands_out ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_update_md_hist() + * + * Update previous and target MD + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_foa_update_md_hist( + ivas_spar_foa_md_dec_state_t *hMdDec ) +{ + int16_t num_channels, i, j, k; + + num_channels = hMdDec->spar_md_cfg.num_umx_chs; + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_prev.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_prev.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_tar.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + hMdDec->spar_coeffs_tar.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_spar_matrices() + * + * Get SPAR matrices + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_spar_matrices( + ivas_spar_foa_md_dec_state_t *pState, + const int16_t num_bands_out, + const int16_t n_ts, + const int16_t bw, + const int16_t dtx_vad, + const int16_t nB, + const int16_t sba_order ) +{ + int16_t numch_out, num_bands, dmx_ch; + int16_t i, j, k, m, b, i_ts, active_w; + const int16_t *order; + float active_w_dm_fac, re; + int16_t split_band; + + numch_out = ivas_sba_get_nchan_metadata( sba_order ); + + num_bands = num_bands_out; + order = remix_order_set[pState->spar_md_cfg.remix_unmix_order]; + + split_band = SPAR_DIRAC_SPLIT_START_BAND; + if ( split_band >= IVAS_MAX_NUM_BANDS ) + { + /*store previous 4x4 parameters for linear interpolation to current*/ + for ( i = 0; i < numch_out; i++ ) + { + for ( j = 0; j < numch_out; j++ ) + { + for ( b = 0; b < num_bands; b++ ) + { + pState->mixer_mat_prev[0][i][j][b] = pState->mixer_mat[i][j][b]; + } + } + } + } + +#ifdef SPAR_HOA_DBG + /*for (b = 0; b < BANDS_12; b++) + { + for (i = 0; i < IVAS_SPAR_MAX_CH - 1; i++) + { + pState->spar_md.band_coeffs[b].pred_re[i] = (float)(i + 1)/10; + for (j = 0; j < IVAS_SPAR_MAX_CH - 1; j++) + { + pState->spar_md.band_coeffs[b].C_re[i][j] = (float)(i + j * 20 + 1)/10; + pState->spar_md.band_coeffs[b].P_re[i][j] = (float)(i + j * 20 + 1)/10; + } + } + }*/ +#endif + + active_w = pState->spar_md_cfg.active_w; + active_w_dm_fac = ( dtx_vad == 0 ) ? IVAS_ACTIVEW_DM_F_SCALE_DTX : IVAS_ACTIVEW_DM_F_SCALE; + + for ( i_ts = 0; i_ts < n_ts; i_ts++ ) + { + for ( i = 0; i < numch_out; i++ ) + { + for ( j = 0; j < numch_out; j++ ) + { + + set_zero( &pState->spar_coeffs.C_re[i][j][i_ts * IVAS_MAX_NUM_BANDS], IVAS_MAX_NUM_BANDS ); + set_zero( &pState->spar_coeffs.P_re[i][j][i_ts * IVAS_MAX_NUM_BANDS], IVAS_MAX_NUM_BANDS ); + } + } + + if ( bw == IVAS_RED_BAND_FACT ) + { + num_bands = num_bands >> 1; + } + + num_bands = min( num_bands, nB ); + + for ( b = 0; b < num_bands; b++ ) + { + float tmp_C1_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + float tmp_C2_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + float tmp_dm_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + + dmx_ch = pState->spar_md_cfg.num_dmx_chans_per_band[bw * b]; + + for ( j = 0; j < numch_out; j++ ) + { + set_zero( tmp_C1_re[j], numch_out ); + set_zero( tmp_C2_re[j], numch_out ); + set_zero( tmp_dm_re[j], numch_out ); + + tmp_C1_re[j][j] = 1.0f; + tmp_C2_re[j][j] = 1.0f; + tmp_dm_re[j][j] = 1.0f; + } + + for ( j = 1; j < numch_out; j++ ) + { + tmp_C1_re[j][0] = pState->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j - 1]; + } + + if ( active_w == 1 ) + { + for ( j = 1; j < numch_out; j++ ) + { + tmp_C2_re[0][j] = active_w_dm_fac * -pState->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j - 1]; + } + + IVAS_RMULT_FLOAT( tmp_C2_re[0][1], tmp_C1_re[1][0], re ); + tmp_dm_re[0][0] = 1 + re; + + IVAS_RMULT_FLOAT( tmp_C2_re[0][2], tmp_C1_re[2][0], re ); + tmp_dm_re[0][0] += re; + + IVAS_RMULT_FLOAT( tmp_C2_re[0][3], tmp_C1_re[3][0], re ); + tmp_dm_re[0][0] += re; + + tmp_dm_re[0][1] = tmp_C2_re[0][1]; + + tmp_dm_re[0][2] = tmp_C2_re[0][2]; + + tmp_dm_re[0][3] = tmp_C2_re[0][3]; + + tmp_dm_re[1][0] = tmp_C1_re[1][0]; + + tmp_dm_re[2][0] = tmp_C1_re[2][0]; + + tmp_dm_re[3][0] = tmp_C1_re[3][0]; + + if ( pState->spar_md_cfg.remix_unmix_order != 3 ) + { + ivas_mat_col_rearrange( tmp_dm_re, order, i_ts, pState->mixer_mat, b, numch_out ); + } + else + { + /* Custom 4x4 mult for WYiX case */ + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + /* row 0 */ + pState->mixer_mat[i][0][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_dm_re[i][0]; + + /* row 1 */ + pState->mixer_mat[i][1][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_dm_re[i][1]; + + /* row 3 */ + pState->mixer_mat[i][2][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_dm_re[i][1]; + + /* row 4 */ + pState->mixer_mat[i][3][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_dm_re[i][2]; + } + } + } + else + { + if ( pState->spar_md_cfg.remix_unmix_order != 3 ) + { + ivas_mat_col_rearrange( tmp_C1_re, order, i_ts, pState->mixer_mat, b, numch_out ); + } + else + { + /* Custom 4x4 mult for WYiX case */ + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + /* row 0 */ + pState->mixer_mat[i][0][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_C1_re[i][0]; + + /* row 1 */ + pState->mixer_mat[i][1][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_C1_re[i][1]; + + /* row 3 */ + pState->mixer_mat[i][2][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_C1_re[i][1]; + + /* row 4 */ + pState->mixer_mat[i][3][b + i_ts * IVAS_MAX_NUM_BANDS] = tmp_C1_re[i][2]; + } + } + } + + if ( dmx_ch > 0 ) + { + float tmpC_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + float tmpP_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + + for ( j = 0; j < numch_out; j++ ) + { + set_zero( tmpC_re[j], numch_out ); + set_zero( tmpP_re[j], numch_out ); + } + + for ( j = 0; j < numch_out; j++ ) + { + set_zero( tmpC_re[j], numch_out ); + } + + for ( k = 0; k < dmx_ch; k++ ) + { + tmpC_re[k][k] = 1; + } + + for ( j = dmx_ch; j < numch_out; j++ ) + { + for ( k = 1; k < dmx_ch; k++ ) + { + tmpC_re[j][k] = pState->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].C_re[j - dmx_ch][k - 1]; + } + } +#ifdef SPAR_HOA_DBG + /*fprintf(stdout, "C matrix1: %d x %d\n\n", numch_out, dmx_ch); + for (j = 0; j < numch_out; j++) + { + for (k = 0; k < dmx_ch; k++) + { + fprintf(stdout, "%f, ", tmpC_re[j][k]); + } + fprintf(stdout, "\n"); + + } + fprintf(stdout, "Mixer Mat: %d x %d\n\n", numch_out, numch_out); + for ( j = 0; j < numch_out; j++) + { + for (k = 0; k < numch_out; k++) + { + fprintf(stdout, "%f, ", pState->mixer_mat[j][k][0][b]); + } + fprintf(stdout, "\n"); + + }*/ +#endif + for ( j = dmx_ch; j < numch_out; j++ ) + { + for ( k = dmx_ch; k < numch_out; k++ ) + { + if ( ( j - dmx_ch ) == ( k - dmx_ch ) ) + { + tmpP_re[j][k] = pState->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].P_re[k - dmx_ch]; + } + else + { + tmpP_re[j][k] = 0; + } + } + } +#ifdef SPAR_HOA_DBG + /*if (b == 0) + { + fprintf(stdout, "tmp_P matrix: %d x %d\n\n", numch_out, dmx_ch); + for (j = 0; j < numch_out; j++) + { + for (k = 0; k < numch_out; k++) + { + fprintf(stdout, "%f, ", tmpP_re[j][k]); + } + fprintf(stdout, "\n"); + + } + fprintf(stdout, "Mixer Mat: %d x %d\n\n", numch_out, numch_out); + for (j = 0; j < numch_out; j++) + { + for (k = 0; k < numch_out; k++) + { + fprintf(stdout, "%f, ", pState->mixer_mat[j][k][0][b]); + } + fprintf(stdout, "\n"); + + } + }*/ +#endif + for ( j = 1; j < numch_out; j++ ) + { + for ( k = dmx_ch; k < numch_out; k++ ) + + { + for ( m = 0; m < numch_out; m++ ) + { + IVAS_RMULT_FLOAT( pState->mixer_mat[j][m][b + i_ts * IVAS_MAX_NUM_BANDS], tmpP_re[m][k], re ); + pState->spar_coeffs.P_re[j][k][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] += re; + } + } + } + + for ( j = 0; j < numch_out; j++ ) + { + for ( k = 0; k < dmx_ch; k++ ) + { + for ( m = 0; m < numch_out; m++ ) + { + IVAS_RMULT_FLOAT( pState->mixer_mat[j][m][b + i_ts * IVAS_MAX_NUM_BANDS], tmpC_re[m][k], re ); + pState->spar_coeffs.C_re[j][k][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] += re; + } + } + } +#ifdef SPAR_HOA_DBG + /*fprintf(stdout, "C matrix1: %d x %d\n\n", numch_out, dmx_ch); + for (j = 0; j < numch_out; j++) + { + for (k = 0; k < dmx_ch; k++) + { + fprintf(stdout, "%f, ", pState->spar_coeffs.C_re[j][k][b]); + } + fprintf(stdout, "\n"); + + }*/ +#endif + pState->spar_coeffs.C_re[0][0][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] = + max( 0, pState->spar_coeffs.C_re[0][0][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] ); + } + } +#ifdef SPAR_HOA_DBG + /* for (b = 0; b < 1; b++) + { + fprintf(stdout, "C matrix: %d x %d band %d\n\n", numch_out, dmx_ch, b); + for (j = 0; j < numch_out; j++) + { + for (k = 0; k < numch_out; k++) + { + fprintf(stdout, "%f, ", pState->spar_coeffs.C_re[j][k][b]); + } + fprintf(stdout, "\n"); + + } + fprintf(stdout, "\nP matrix: %d x %d\n\n", numch_out, numch_out); + + for (j = 0; j < numch_out; j++) + { + for (k = 0; k < numch_out; k++) + { + fprintf(stdout, "%f, ", pState->spar_coeffs.P_re[j][k][b]); + } + fprintf(stdout, "\n"); + + } + }*/ +#endif + + /* band mixing */ + if ( bw == IVAS_RED_BAND_FACT ) + { + for ( b = 0; b < num_bands_out; b = b + bw ) + { + dmx_ch = pState->spar_md_cfg.num_dmx_chans_per_band[b]; + for ( j = 0; j < numch_out; j++ ) + { + for ( k = dmx_ch; k < numch_out; k++ ) + { + pState->spar_coeffs.P_re[j][k][( b + 1 ) + i_ts * IVAS_MAX_NUM_BANDS] = pState->spar_coeffs.P_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS]; + } + } + + for ( j = 0; j < numch_out; j++ ) + { + for ( k = 0; k < dmx_ch; k++ ) + { + pState->spar_coeffs.C_re[j][k][( b + 1 ) + i_ts * IVAS_MAX_NUM_BANDS] = pState->spar_coeffs.C_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS]; + } + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_mat_col_rearrange() + * + * reorders the input matrix based on order + *-----------------------------------------------------------------------------------------*/ + +static void ivas_mat_col_rearrange( + float in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const int16_t order[IVAS_SPAR_MAX_CH], + const int16_t i_ts, + float ***mixer_mat, + const int16_t bands, + const int16_t num_ch ) +{ + int16_t i, j, idx; + + for ( i = 0; i < num_ch; i++ ) + { + idx = order[i]; + + for ( j = 0; j < num_ch; j++ ) + { + mixer_mat[j][i][bands + i_ts * IVAS_MAX_NUM_BANDS] = in_re[j][idx]; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_dec_gen_umx_mat() + * + * generates upmix matrix + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_foa_dec_gen_umx_mat( + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t num_bands_out, /* i : number of output bands */ + const int16_t bfi /* i : bad frame indicator */ +) +{ + int16_t i, j, b, i_ts; + int16_t fb_ducking_flag = 0; + int16_t num_out_ch = hMdDec->spar_md_cfg.num_umx_chs; + ivas_spar_foa_md_dec_state_t *pState = hMdDec; + + for ( i_ts = 0; i_ts < MAX_PARAM_SPATIAL_SUBFRAMES; i_ts++ ) + { + if ( pState->td_decorr_flag == 1 ) + { + for ( i = 0; i < num_out_ch; i++ ) + { + for ( j = 0; j < nchan_transport; j++ ) + { + for ( b = 0; b < num_bands_out; b++ ) + { + pState->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pState->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; + } + } + } + + for ( i = 0; i < num_out_ch; i++ ) + { + for ( j = nchan_transport; j < num_out_ch; j++ ) + { + for ( b = 0; b < num_bands_out; b++ ) + { + pState->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pState->spar_coeffs.P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; + } + } + } + + if ( fb_ducking_flag ) + { + assert( 0 ); /* fb_ducking_flag not supported */ + } + } + else + { + for ( i = 0; i < num_out_ch; i++ ) + { + for ( j = 0; j < nchan_transport; j++ ) + { + for ( b = 0; b < num_bands_out; b++ ) + { + pState->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pState->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; + } + } + } + } + } +#ifdef SPAR_HOA_DBG + + /* for ( b = 0; b < 1; b++) + { + fprintf( stdout, "\n\nMixer Matrix band %d\n\n", b ); + for ( i = 0; i < num_out_ch; i++ ) + { + for ( j = 0; j < num_out_ch; j++ ) + { + fprintf( stdout, "%.2f,\t", pState->mixer_mat[i][j][0][b] ); + } + fprintf( stdout, "\n" ); + } + fprintf( stdout, "\n" ); + }*/ +#endif + + ivas_spar_foa_dec_compute_ramp_down_post_matrix( pState, num_bands_out, bfi ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_dec_parse_md_bs() + * + * Parses MD bitstream + *-----------------------------------------------------------------------------------------*/ + +static void ivas_spar_foa_dec_parse_md_bs( + ivas_spar_foa_md_dec_state_t *hMdDec, + Decoder_State *st0, + int16_t *nB, + int16_t *bands_bw, + int16_t *dtx_vad, + const int32_t ivas_total_brate, + const int16_t use_planar_coeff, + const int16_t sba_inactive_mode ) +{ + int16_t i, j, k, num_bands; + uint16_t qsi; + ivas_quant_strat_t qs; + ivas_spar_foa_md_dec_state_t *pState = hMdDec; + int16_t strat, freq_diff, no_ec; + int16_t do_diff[IVAS_MAX_NUM_BANDS]; + int16_t planarCP = 0; + + *dtx_vad = 1; + *bands_bw = 1; + qsi = 0; + num_bands = pState->spar_md.num_bands; + + if ( pState->spar_md_cfg.gen_bs == 1 ) + { + if ( ivas_total_brate > IVAS_SID_5k ) + { + if ( pState->spar_md_cfg.quant_strat_bits > 0 ) + { + if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) + { + /*only one bit written for quantization strategy to indicate either a fixed quantization strategy or dtx_vad==0 */ + qsi = get_next_indice( st0, 1 ); + if ( qsi == 1 ) + { + *dtx_vad = 0; + } + } + else + { + if ( sba_inactive_mode == 1 ) + { + *dtx_vad = 0; + qsi = pState->spar_md_cfg.quant_strat_bits + 1; + } + else + { + qsi = get_next_indice( st0, pState->spar_md_cfg.quant_strat_bits ); + } + } + } + else + { + qsi = 0; + } + } + else + { + *dtx_vad = 0; + } + + hMdDec->dtx_vad = *dtx_vad; + + if ( *dtx_vad == 0 ) + { + *nB = SPAR_DTX_BANDS; + *bands_bw = num_bands / *nB; + + for ( i = 0; i < *nB; i++ ) + { + for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + { + pState->spar_md.band_coeffs[i].pred_re[j] = 0; + pState->spar_md.band_coeffs[i].P_re[j] = 0; + } + pState->valid_bands[i] = 1; + } + for ( i = 0; i < num_bands; i++ ) + { + for ( j = 0; j < ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ); j++ ) + { + for ( k = 0; k < ( IVAS_SPAR_MAX_DMX_CHS - 1 ); k++ ) + { + pState->spar_md.band_coeffs[i].C_re[j][k] = 0; + } + } + } + + ivas_parse_parameter_bitstream_dtx( &pState->spar_md, st0, *bands_bw, *nB, + pState->spar_md_cfg.num_dmx_chans_per_band, pState->spar_md_cfg.num_decorr_per_band ); + { + int16_t ndec, b, idx; + for ( i = *nB - 1; i >= 0; i-- ) + { + ndec = pState->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; + + for ( b = *bands_bw - 1; b >= 0; b-- ) + { + idx = i * *bands_bw + b; + for ( j = 0; j < FOA_CHANNELS - 1; j++ ) + { + pState->spar_md.band_coeffs[idx].pred_re[j] = pState->spar_md.band_coeffs[i].pred_re[j]; + } + for ( j = 0; j < ndec; j++ ) + { + pState->spar_md.band_coeffs[idx].P_re[j] = pState->spar_md.band_coeffs[i].P_re[j]; + } + pState->valid_bands[idx] = 1; + } + } + *nB = num_bands; + *bands_bw = 1; + } + + return; + } + + qs = pState->spar_md_cfg.quant_strat[qsi]; + if ( ( qsi == 2 ) && ( use_planar_coeff ) ) + { + planarCP = 1; +#ifdef SPAR_HOA_DBG + fprintf( stdout, "planarCP = 1\n" ); +#endif + } + strat = get_next_indice( st0, 3 ); +#ifdef SPAR_HOA_DBG + /*fprintf(stdout, "\n\n no_ec = %d, strat = %d\n", no_ec, strat);*/ +#endif + freq_diff = 0; + no_ec = 0; + + if ( strat < 2 ) + { + *bands_bw = strat + 1; + *nB = num_bands / *bands_bw; + for ( i = 0; i < *nB; i++ ) + { + do_diff[i] = 0; + } + } + else if ( strat < 4 ) + { + *bands_bw = strat - 1; + *nB = num_bands / *bands_bw; + for ( i = 0; i < *nB; i++ ) + { + do_diff[i] = 0; + } + no_ec = 1; + } + else + { + *bands_bw = 1; + *nB = num_bands; + + for ( i = 0; i < *nB; i++ ) + { + do_diff[i] = ( ( ( i + 1 ) & 3 ) != strat - 4 ); + } + + ivas_map_prior_coeffs_quant( &pState->spar_md_prev, &pState->spar_md_cfg, qsi, *nB ); + } +#ifdef SPAR_HOA_DBG + fprintf( stdout, "\n\n no_ec = %d, strat = %d\n", no_ec, strat ); +#endif + pState->spar_md_cfg.prev_quant_idx = qsi; + + if ( no_ec == 0 ) + { + ivas_decode_arith_bs( pState, st0, qsi, *nB, *bands_bw, do_diff, freq_diff, planarCP ); + } + else + { + ivas_decode_huffman_bs( pState, st0, qsi, *nB, *bands_bw, planarCP ); + } + + for ( i = 0; i < *nB; i++ ) + { + int16_t ii, jj; + int16_t *index_scratch[IVAS_SPAR_P_LOWERTRI]; + float *quant_scratch[IVAS_SPAR_P_LOWERTRI]; + int16_t ndec = pState->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; + int16_t ndm = pState->spar_md_cfg.num_dmx_chans_per_band[( *bands_bw ) * i]; + int16_t **index = (int16_t **) &index_scratch[0]; + float **quant = (float **) &quant_scratch[0]; + float coeff_decd[IVAS_SPAR_MAX_CH - 1]; + float coeff_decx_re[IVAS_SPAR_P_LOWERTRI]; + int16_t pred_index_re[IVAS_SPAR_MAX_CH - 1]; + int16_t drct_index_re[IVAS_SPAR_MAX_C_COEFF]; + int16_t decd_index_re[IVAS_SPAR_MAX_CH - 1]; + int16_t decx_index_re[IVAS_SPAR_P_LOWERTRI]; + + for ( j = 0; j < ndm + ndec - 1; j++ ) + { + pred_index_re[j] = pState->spar_md.band_coeffs_idx[i].pred_index_re[j]; + } + for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) + { + drct_index_re[j] = pState->spar_md.band_coeffs_idx[i].drct_index_re[j]; + } + for ( j = 0; j < ndec; j++ ) + { + decd_index_re[j] = pState->spar_md.band_coeffs_idx[i].decd_index_re[j]; + } + + index[0] = &pred_index_re[0]; + quant[0] = &pState->spar_md.band_coeffs[i].pred_re[0]; + + ivas_deindex_real_index( index, qs.PR.q_levels[0], qs.PR.min, qs.PR.max, quant, 1, ndm + ndec - 1 ); + for ( ii = 0; ii < ndec; ii++ ) + { + for ( jj = 0; jj < ndm - 1; jj++ ) + { + pState->spar_md.band_coeffs[i].C_re[ii][jj] = 0; + } + } + j = 0; + for ( ii = 0; ii < ndec; ii++ ) + { + for ( jj = 0; jj < ndm - 1; jj++ ) + { + index[j] = &drct_index_re[j]; + quant[j] = &pState->spar_md.band_coeffs[i].C_re[ii][jj]; + j++; + } + } + ivas_deindex_real_index( index, qs.C.q_levels[0], qs.C.min, qs.C.max, quant, ndec * ( ndm - 1 ), 1 ); + + index[0] = &decd_index_re[0]; + quant[0] = &coeff_decd[0]; + ivas_deindex_real_index( index, qs.P_r.q_levels[0], qs.P_r.min, qs.P_r.max, quant, 1, ndm + ndec - 1 ); + + index[0] = &decx_index_re[0]; + quant[0] = &coeff_decx_re[0]; + ivas_deindex_real_index( index, qs.P_c.q_levels[0], qs.P_c.min, qs.P_c.max, quant, 1, ndec * ( ndec - 1 ) >> 2 ); + + /* Store prior coefficient indices */ + for ( j = 0; j < ndm + ndec - 1; j++ ) + { + pState->spar_md_prev.band_coeffs_idx[i].pred_index_re[j] = pred_index_re[j]; + } + for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) + { + pState->spar_md_prev.band_coeffs_idx[i].drct_index_re[j] = drct_index_re[j]; + } + for ( j = 0; j < ndec; j++ ) + { + pState->spar_md_prev.band_coeffs_idx[i].decd_index_re[j] = decd_index_re[j]; + } + for ( k = 0; k < ndec; k++ ) + { + pState->spar_md.band_coeffs[i].P_re[k] = 0; + } + for ( j = 0; j < ndec; j++ ) + { + /* Don't bother adding in the decx parameters */ + pState->spar_md.band_coeffs[i].P_re[j] = coeff_decd[j]; + } + + pState->valid_bands[i] |= ( do_diff[i] == 0 ) ? 1 : 0; + } + } + else + { + *dtx_vad = pState->spar_md.dtx_vad; + *nB = num_bands; + *bands_bw = num_bands / *nB; + + for ( i = 0; i < *nB; i++ ) + { + pState->valid_bands[i] = 1; + } + } +#ifdef SPAR_HOA_DBG + int16_t b; + b = 0; + /* if (0) + { + for ( b = 0; b < *nB; b++ ) + { + int16_t ndec = pState->spar_md_cfg.num_decorr_per_band[(*bands_bw) * b]; + int16_t ndm = pState->spar_md_cfg.num_dmx_chans_per_band[(*bands_bw) * b]; + fprintf(stdout, "\n\nMETADATA PR: band %d, qsi %d\n\n", b, qsi); + for (i = 0; i < ndm + ndec - 1; i++) + { + fprintf(stdout, "i: %d -- %f\t %d\t %d\n", i, + pState->spar_md.band_coeffs[b].pred_re[i], + pState->spar_md_prev.band_coeffs_idx[b].pred_index_re[i], + pState->spar_md.band_coeffs_idx[b].pred_index_re[i]); + } + fprintf(stdout, "\n\n METADATA C: band %d\n\n", b); + k = 0; + for (i = 0; i < ndec; i++) + { + for (j = 0; j < (ndm - 1); j++) + { + fprintf(stdout, "i: %d -- %f\t %d\t %d\n", i, + pState->spar_md.band_coeffs[b].C_re[i][j], + pState->spar_md_prev.band_coeffs_idx[b].drct_index_re[k], + pState->spar_md.band_coeffs_idx[b].drct_index_re[k]); + k++; + } + } + fprintf(stdout, "\n\n METADATA Pd: band %d\n\n", b); + for (i = 0; i < ndec; i++) + { + fprintf(stdout, "i: %d -- %f\t %d\t %d\n", i, + pState->spar_md.band_coeffs[b].P_re[i][i], + pState->spar_md_prev.band_coeffs_idx[b].decd_index_re[i], + pState->spar_md.band_coeffs_idx[b].decd_index_re[i]); + } + fprintf(stdout, "\n\n"); + int16_t ndec = pState->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * b]; + int16_t ndm = pState->spar_md_cfg.num_dmx_chans_per_band[( *bands_bw ) * b]; + fprintf( stdout, "\n\n Metadata PR (15x1), C(15x15), P(15x15): band %d\n", b ); + for ( i = 0; i < ndm + ndec - 1; i++ ) + { + fprintf( stdout, "i: %d -- %.2f\t|\t", i, pState->spar_md.band_coeffs[b].pred_re[i] ); + if ( i < ndec ) + { + if ( keep_planar[i] == 1 ) + { + fprintf( stdout, ">>" ); + } + else + { + fprintf( stdout, " " ); + } + for ( j = 0; j < ndm - 1; j++ ) + { + fprintf( stdout, "%.2f\t", pState->spar_md.band_coeffs[b].C_re[i][j] ); + } + fprintf( stdout, "|\t" ); + for ( j = 0; j < ndec; j++ ) + { + fprintf( stdout, "%.2f\t", pState->spar_md.band_coeffs[b].P_re[i][j] ); + } + } + fprintf( stdout, "\n" ); + } + fprintf( stdout, "\n" ); + } + }*/ +#endif + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_decode_arith_bs() + * + * decode bitstream with arith decoder + *-----------------------------------------------------------------------------------------*/ + +static void ivas_decode_arith_bs( + ivas_spar_foa_md_dec_state_t *pState, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const uint16_t qsi, + const int16_t nB, + const int16_t bands_bw, + int16_t *pDo_diff, + const int16_t freq_diff, + const int16_t planarCP ) +{ + int16_t i, ndm, ndec; + ivas_cell_dim_t pred_cell_dims[IVAS_MAX_NUM_BANDS]; + ivas_cell_dim_t drct_cell_dims[IVAS_MAX_NUM_BANDS]; + ivas_cell_dim_t decd_cell_dims[IVAS_MAX_NUM_BANDS]; + ivas_cell_dim_t decx_cell_dims[IVAS_MAX_NUM_BANDS]; + int16_t symbol_arr_re[IVAS_MAX_INPUT_LEN]; + int16_t symbol_arr_old_re[IVAS_MAX_INPUT_LEN]; + int16_t any_diff = 0; + + for ( i = 0; i < nB; i++ ) + { + ndm = pState->spar_md_cfg.num_dmx_chans_per_band[bands_bw * i]; + ndec = pState->spar_md_cfg.num_decorr_per_band[bands_bw * i]; + + pred_cell_dims[i].dim1 = ndm + ndec - 1; + pred_cell_dims[i].dim2 = 1; + drct_cell_dims[i].dim1 = ndec; + drct_cell_dims[i].dim2 = ndm - 1; + decd_cell_dims[i].dim1 = ndec; + decd_cell_dims[i].dim2 = 1; + decx_cell_dims[i].dim1 = ( ndec * ( ndec - 1 ) ) >> 1; + decx_cell_dims[i].dim2 = 1; + } + + for ( i = 0; i < nB; i++ ) + { + if ( pDo_diff[i] != 0 ) + { + any_diff = 1; + break; + } + } + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( pState->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, pred_cell_dims, PRED_COEFF, planarCP ); + } + + ivas_arith_decode_cmplx_cell_array( &pState->arith_coeffs.pred_arith_re[qsi], &pState->arith_coeffs.pred_arith_re_diff[qsi], + st0, pred_cell_dims, pDo_diff, nB, symbol_arr_re, symbol_arr_old_re ); + + ivas_fill_band_coeffs_idx( pState->spar_md.band_coeffs_idx, nB, symbol_arr_re, pred_cell_dims, PRED_COEFF, planarCP ); + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( pState->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, drct_cell_dims, DRCT_COEFF, planarCP ); + } + + if ( planarCP ) + { + for ( i = 0; i < nB; i++ ) + { + drct_cell_dims[i].dim1 = drct_cell_dims[i].dim1 - IVAS_SPAR_HOA3_NP_CHS; + } + } + + ivas_arith_decode_cmplx_cell_array( &pState->arith_coeffs.drct_arith_re[qsi], &pState->arith_coeffs.drct_arith_re_diff[qsi], + st0, drct_cell_dims, pDo_diff, nB, symbol_arr_re, symbol_arr_old_re ); + + ivas_fill_band_coeffs_idx( pState->spar_md.band_coeffs_idx, nB, symbol_arr_re, drct_cell_dims, DRCT_COEFF, planarCP ); + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( pState->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, decd_cell_dims, DECD_COEFF, planarCP ); + } + + if ( planarCP ) + { + for ( i = 0; i < nB; i++ ) + { + decd_cell_dims[i].dim1 = decd_cell_dims[i].dim1 - IVAS_SPAR_HOA3_NP_CHS; + } + } + + ivas_arith_decode_cmplx_cell_array( &pState->arith_coeffs.decd_arith_re[qsi], &pState->arith_coeffs.decd_arith_re_diff[qsi], + st0, decd_cell_dims, pDo_diff, nB, symbol_arr_re, symbol_arr_old_re ); + + ivas_fill_band_coeffs_idx( pState->spar_md.band_coeffs_idx, nB, symbol_arr_re, decd_cell_dims, DECD_COEFF, planarCP ); + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( pState->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, decx_cell_dims, DECX_COEFF, planarCP ); + } + + ivas_fill_band_coeffs_idx( pState->spar_md.band_coeffs_idx, nB, symbol_arr_re, decx_cell_dims, DECX_COEFF, planarCP ); + + if ( freq_diff == 1 ) + { +#ifdef SPAR_HOA_DBG + /* NOTE: This is currently unused code, and SPAR_HOA changes have not been made here. */ +#endif + ivas_get_band_idx_from_differential( &pState->spar_md, pState->spar_md_cfg.quant_strat->PR.q_levels, 0, nB, PRED_COEFF ); + ivas_get_band_idx_from_differential( &pState->spar_md, pState->spar_md_cfg.quant_strat->C.q_levels, 0, nB, DRCT_COEFF ); + ivas_get_band_idx_from_differential( &pState->spar_md, pState->spar_md_cfg.quant_strat->P_r.q_levels, 1, nB, DECD_COEFF ); + ivas_get_band_idx_from_differential( &pState->spar_md, pState->spar_md_cfg.quant_strat->P_c.q_levels, 0, nB, DECX_COEFF ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_band_idx_from_differential() + * + * + *-----------------------------------------------------------------------------------------*/ +#ifdef SPAR_HOA_DBG +/* NOTE: No changes here as frequency differential coding is unused. */ +#endif +static void ivas_get_band_idx_from_differential( + ivas_spar_md_t *pSpar_md, + const int16_t q_levels[2], + const int16_t one_sided, + const int16_t nB, + const ivas_coeffs_type_t coeff_type ) +{ + int16_t i, k; + int16_t min_val, max_val; + int16_t index[FOA_CHANNELS - 1]; + int16_t band_idx[IVAS_MAX_NUM_BANDS][FOA_CHANNELS - 1]; + int16_t *ptr_idx = NULL; + + for ( i = 0; i < nB; i++ ) + { + switch ( coeff_type ) + { + case PRED_COEFF: + ptr_idx = pSpar_md->band_coeffs_idx[i].pred_index_re; + break; + case DRCT_COEFF: + ptr_idx = pSpar_md->band_coeffs_idx[i].drct_index_re; + break; + case DECD_COEFF: + ptr_idx = pSpar_md->band_coeffs_idx[i].decd_index_re; + break; + default: + assert( !"unsupported config!" ); + } + + if ( one_sided ) + { + min_val = 0; + max_val = q_levels[0] - 1; + } + else + { + min_val = (int16_t) -floor( q_levels[0] / 2.0f ); + max_val = (int16_t) floor( q_levels[0] / 2.0f ); + } + + if ( i == 0 ) + { + for ( k = 0; k < FOA_CHANNELS - 1; k++ ) + { + index[k] = ptr_idx[k]; + } + } + else + { + for ( k = 0; k < FOA_CHANNELS - 1; k++ ) + { + index[k] = ptr_idx[k] + band_idx[i][k]; + } + } + + for ( k = 0; k < FOA_CHANNELS - 1; k++ ) + { + if ( index[k] < min_val ) + { + index[k] = max_val - min_val + index[k] + 1; + } + if ( index[k] > max_val ) + { + index[k] = max_val + index[k] - min_val - 1; + } + + band_idx[i][k] = index[k]; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_fill_band_coeffs_idx() + * + * Copy pred band coeffs to arr + *-----------------------------------------------------------------------------------------*/ + +static void ivas_fill_band_coeffs_idx( + ivas_band_coeffs_ind_t *pBands_idx, + const int16_t nB, + int16_t *pSymbol_re, + ivas_cell_dim_t *pCell_dims, + const ivas_coeffs_type_t coeff_type, + const int16_t planarCP ) +{ + int16_t i, j, k, len; + int16_t *pPtr_idx = NULL; + + for ( i = 0; i < nB; i++ ) + { + switch ( coeff_type ) + { + case PRED_COEFF: + { + pPtr_idx = pBands_idx[i].pred_index_re; + break; + } + case DRCT_COEFF: + { + pPtr_idx = pBands_idx[i].drct_index_re; + break; + } + case DECD_COEFF: + { + pPtr_idx = pBands_idx[i].decd_index_re; + break; + } + case DECX_COEFF: + { + break; + } + + default: + assert( !"unsupported config!" ); + } + + if ( coeff_type != DECX_COEFF ) + { + if ( ( coeff_type == PRED_COEFF ) || !planarCP ) + { + len = pCell_dims[i].dim1 * pCell_dims[i].dim2; + mvs2s( pSymbol_re, pPtr_idx, len ); + pSymbol_re += len; + } + else + { + k = 0; + len = ( pCell_dims[i].dim1 + IVAS_SPAR_HOA3_NP_CHS ) * pCell_dims[i].dim2; + for ( j = 0; j < len; j++ ) + { + if ( keep_planar[(int16_t) floor( j / pCell_dims[i].dim2 )] ) + { + pPtr_idx[j] = pSymbol_re[k]; + k++; + } + else + { + pPtr_idx[j] = 0; + } + } + pSymbol_re += k; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_decode_huffman_bs() + * + * decode bitstream with huffman decoder + *-----------------------------------------------------------------------------------------*/ + +static void ivas_decode_huffman_bs( + ivas_spar_foa_md_dec_state_t *pState, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const uint16_t qsi, + const int16_t nB, + const int16_t bands_bw, + const int16_t planarCP ) +{ + int16_t i, j; + + for ( i = 0; i < nB; i++ ) + { + int16_t ndm, ndec; + int16_t pred_dim, drct_dim, decd_dim; + + ndm = pState->spar_md_cfg.num_dmx_chans_per_band[bands_bw * i]; + ndec = pState->spar_md_cfg.num_decorr_per_band[bands_bw * i]; + + pred_dim = ndec + ndm - 1; + drct_dim = ndec * ( ndm - 1 ); + decd_dim = ndec; + + for ( j = 0; j < pred_dim; j++ ) + { + ivas_huffman_decode( &pState->huff_coeffs.pred_huff_re[qsi], st0, + &pState->spar_md.band_coeffs_idx[i].pred_index_re[j] ); + } + + for ( j = 0; j < drct_dim; j++ ) + { + if ( planarCP && !keep_planar[(int16_t) floor( j / ( ndm - 1 ) )] ) + { + pState->spar_md.band_coeffs_idx[i].drct_index_re[j] = 0; + } + else + { + ivas_huffman_decode( &pState->huff_coeffs.drct_huff_re[qsi], st0, + &pState->spar_md.band_coeffs_idx[i].drct_index_re[j] ); + } + } + + for ( j = 0; j < decd_dim; j++ ) + { + if ( planarCP && !keep_planar[j] ) + { + pState->spar_md.band_coeffs_idx[i].decd_index_re[j] = 0; + } + else + { + ivas_huffman_decode( &pState->huff_coeffs.decd_huff_re[qsi], st0, + &pState->spar_md.band_coeffs_idx[i].decd_index_re[j] ); + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_md_fill_invalid_bands() + * + * fill invalid bands in interpolation/extrapolation of valid bands + * when PLC is to be done with partial time differential coding + *-----------------------------------------------------------------------------------------*/ + +static void ivas_spar_md_fill_invalid_bands( + ivas_spar_dec_matrices_t *pSpar_coeffs, + ivas_spar_dec_matrices_t *pSpar_coeffs_prev, + int16_t *valid_bands, + int16_t *base_band_age, + const int16_t num_bands, + const int16_t sba_order /* i : SBA order */ +) +{ + int16_t i, j, b, all_valid; + int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], idx = -1; + int16_t last_valid_band_idx[IVAS_MAX_NUM_BANDS]; + float w = 0; + int16_t num_channels; + + num_channels = ivas_sba_get_nchan_metadata( sba_order ); + set_s( valid_band_idx, 0, IVAS_MAX_NUM_BANDS ); + set_s( last_valid_band_idx, 0, IVAS_MAX_NUM_BANDS ); + + all_valid = 1; + for ( b = 0; b < num_bands; b++ ) + { + if ( valid_bands[b] != 0 ) + { + base_band_age[b] = 0; /* reset band age */ + idx++; + valid_band_idx[idx] = b; + } + else + { + base_band_age[b] += 1; /* increment the age of invalid bands */ + + if ( base_band_age[b] > 3 ) + { + last_valid_band_idx[b] = idx; + } + all_valid = 0; + } + } + + assert( idx > 0 ); /* some bands should be valid */ + + if ( all_valid == 0 ) + { + for ( b = 0; b < num_bands; b++ ) + { + /* check against non zero in if and else if */ + if ( base_band_age[b] > 3 ) /* old invalid bands */ + { + int16_t tmp_id, id0, id1; + + tmp_id = last_valid_band_idx[b]; + if ( tmp_id < 0 ) /* Extrapolation */ + { + id1 = valid_band_idx[0]; + id0 = 0; + w = 1; + } + else if ( tmp_id == idx ) /* Extrapolation */ + { + id1 = valid_band_idx[tmp_id]; + id0 = valid_band_idx[tmp_id]; + w = 0; + } + else /* Interpolation */ + { + id0 = valid_band_idx[tmp_id]; + id1 = valid_band_idx[tmp_id + 1]; + w = ( (float) ( b - id0 ) ) / ( id1 - id0 ); + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + pSpar_coeffs->C_re[i][j][b] = ( 1 - w ) * pSpar_coeffs->C_re[i][j][id0] + w * pSpar_coeffs->C_re[i][j][id1]; + pSpar_coeffs->P_re[i][j][b] = ( 1 - w ) * pSpar_coeffs->P_re[i][j][id0] + w * pSpar_coeffs->P_re[i][j][id1]; + } + } + } + else /* young invalid bands */ + { + if ( valid_bands[b] == 0 ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + pSpar_coeffs->C_re[i][j][b] = pSpar_coeffs_prev->C_re[i][j][b]; + pSpar_coeffs->P_re[i][j][b] = pSpar_coeffs_prev->P_re[i][j][b]; + } + } + } + } + + if ( valid_bands[b] == 0 ) + { + int16_t i_ts; + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( i_ts = 1; i_ts < MAX_PARAM_SPATIAL_SUBFRAMES; i_ts++ ) + { + pSpar_coeffs->C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pSpar_coeffs->C_re[i][j][b]; + pSpar_coeffs->P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pSpar_coeffs->P_re[i][j][b]; + } + } + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* +* Function ivas_spar_foa_dec_compute_ramp_down_post_matrix() +* +* ivas_spar_foa_dec_compute_ramp_down_post_matrix + +*-----------------------------------------------------------------------------------------*/ + +static void ivas_spar_foa_dec_compute_ramp_down_post_matrix( + ivas_spar_foa_md_dec_state_t *pState, + const int16_t num_bands_out, + const int16_t bfi ) +{ + int16_t num_in_ch, num_out_ch, i, j, b; + + num_in_ch = pState->spar_md_cfg.num_umx_chs; + num_out_ch = pState->spar_md_cfg.num_umx_chs; + + if ( bfi == 0 ) + { + pState->spar_plc_num_lost_frames = 0; + } + else + { + if ( pState->td_decorr_flag == 0 ) + { + assert( 0 ); + } + + pState->spar_plc_num_lost_frames += 1; + pState->spar_plc_num_lost_frames = min( pState->spar_plc_num_lost_frames, 100 ); + + if ( pState->spar_plc_num_lost_frames > ivas_spar_dec_plc_num_frames_keep ) + { + int16_t num_fade_frames; + int16_t gain_dB; + float gain; + float post_matrix[IVAS_SPAR_MAX_CH]; + + num_fade_frames = max( pState->spar_plc_num_lost_frames - ivas_spar_dec_plc_num_frames_keep, 0 ); + gain_dB = -min( num_fade_frames, ivas_spar_dec_plc_max_num_frames_ramp_down ) * ivas_spar_dec_plc_per_frame_ramp_down_gain_dB; + gain = powf( 10, ( ( (float) gain_dB ) / 20 ) ); + + for ( i = 0; i < IVAS_SPAR_MAX_CH; i++ ) + { + post_matrix[i] = 1 + min( ( (float) num_fade_frames ) / ivas_spar_dec_plc_num_frames_fade_out, 1 ) * ( ivas_spar_dec_plc_spatial_target[i] - 1 ); + post_matrix[i] *= gain; + } + + /* apply the post matrix */ + for ( int16_t i_ts = 0; i_ts < MAX_PARAM_SPATIAL_SUBFRAMES; i_ts++ ) + { + for ( i = 0; i < num_out_ch; i++ ) + { + for ( j = 0; j < num_in_ch; j++ ) + { + for ( b = 0; b < num_bands_out; b++ ) + { + pState->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] *= post_matrix[i]; + } + } + } + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_unquant_dtx_indicies() + * + * Unquantize spar md DYX indices + *-----------------------------------------------------------------------------------------*/ + +#ifdef SPAR_HOA_DBG +/* NOTE: No changes here as DTX only operates below 160kbps */ +#endif +static void ivas_spar_foa_unquant_dtx_indicies( + ivas_spar_md_t *pSpar_md, + const int16_t nB, + const int16_t bw, + int16_t *ndm_per_band ) +{ + int16_t i, b; + int16_t q_lvl; + float **ppVal, *pVal, val; + int16_t **ppIdx, *pIdx, idx; + float pr_min_max[2]; + + pr_min_max[0] = pSpar_md->min_max[0]; + pr_min_max[1] = pSpar_md->min_max[1]; + + ppVal = (float **) &pVal; + ppIdx = (int16_t **) &pIdx; + + ppVal[0] = (float *) &val; + ppIdx[0] = (int16_t *) &idx; + + for ( b = 0; b < nB; b++ ) + { + for ( i = 0; i < FOA_CHANNELS - 1; i++ ) + { + q_lvl = dtx_pr_real_q_levels[ndm_per_band[bw * b] - 1][i]; + ppIdx[0][0] = pSpar_md->band_coeffs_idx[b].pred_index_re[i]; + ivas_deindex_real_index( ppIdx, q_lvl, pr_min_max[0], pr_min_max[1], ppVal, 1, 1 ); + pSpar_md->band_coeffs[b].pred_re[i] = ppVal[0][0]; + } + + for ( i = 0; i < FOA_CHANNELS - ndm_per_band[bw * b]; i++ ) + { + q_lvl = dtx_pd_real_q_levels[ndm_per_band[bw * b] - 1][i]; + ppIdx[0][0] = pSpar_md->band_coeffs_idx[b].decd_index_re[i]; + ivas_deindex_real_index( ppIdx, q_lvl, dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], ppVal, 1, 1 ); + pSpar_md->band_coeffs[b].P_re[i] = ppVal[0][0]; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_parse_parameter_bitstream_dtx() + * + * parse DTX bitstream parameters + *-----------------------------------------------------------------------------------------*/ + +static void ivas_parse_parameter_bitstream_dtx( + ivas_spar_md_t *pSpar_md, + Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ + const int16_t bw, + const int16_t num_bands, + int16_t *num_dmx_per_band, + int16_t *num_dec_per_band ) +{ + int16_t i, j; + float **ppVal, *pVal, val; + int16_t **ppIdx, *pIdx, idx; + float pr_min_max[2]; + int16_t pr_q_lvls, pr, pd, pd_q_lvls, pr_pd_bits; + int16_t pr_q_lvls1, pr_q_lvls2, pr_idx1, pr_idx2, pr_pr_bits; + int16_t zero_pad_bits, sid_bits_len; + sid_bits_len = st0->next_bit_pos; + ppVal = (float **) &pVal; + ppIdx = (int16_t **) &pIdx; + + ppVal[0] = (float *) &val; + ppIdx[0] = (int16_t *) &idx; + + pr_min_max[0] = pSpar_md->min_max[0]; + pr_min_max[1] = pSpar_md->min_max[1]; + + for ( i = 0; i < num_bands; i++ ) + { + int16_t ndec = num_dec_per_band[bw * i]; + int16_t ndm = num_dmx_per_band[bw * i]; + + for ( j = 0; j < FOA_CHANNELS - 1; j++ ) + { + int16_t pr_idx_1, pr_idx_2, pd_idx_1, pd_idx_2; + uint16_t value; + + pr_idx_1 = pr_pr_idx_pairs[ndm - 1][j][0]; + pr_idx_2 = pr_pr_idx_pairs[ndm - 1][j][1]; + pd_idx_1 = pr_pd_idx_pairs[ndm - 1][j][0]; + pd_idx_2 = pr_pd_idx_pairs[ndm - 1][j][1]; + + if ( pr_idx_1 != 0 || pd_idx_1 != 0 || pr_idx_2 != 0 || pd_idx_2 != 0 ) + { + if ( pr_idx_1 == 0 || pr_idx_2 == 0 ) + { + pr_q_lvls = dtx_pr_real_q_levels[ndm - 1][pd_idx_1 - 1]; + + if ( ( j + 1 ) > ndec ) + { + pd_q_lvls = 1; + } + else + { + pd_q_lvls = dtx_pd_real_q_levels[ndm - 1][pd_idx_2 - 1]; + } + + pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); + + value = get_next_indice( st0, pr_pd_bits ); + + pr = (int16_t) floor( value / pd_q_lvls ); + pd = value - pr * pd_q_lvls; + + ppVal[0][0] = dtx_pd_real_min_max[0]; + ivas_quantise_real_values( ppVal, pd_q_lvls, dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], ppIdx, ppVal, 1, 1 ); + + pd = pd + ppIdx[0][0]; + + ppVal[0][0] = pr_min_max[0]; + ivas_quantise_real_values( ppVal, pr_q_lvls, pr_min_max[0], pr_min_max[1], ppIdx, ppVal, 1, 1 ); + + pr = pr + ppIdx[0][0]; + + if ( ( j + 1 ) <= ndec ) + { + pSpar_md->band_coeffs_idx[i].decd_index_re[pd_idx_2 - 1] = pd; + } + + pSpar_md->band_coeffs_idx[i].pred_index_re[pd_idx_1 - 1] = pr; + } + else + { + pr_q_lvls1 = dtx_pr_real_q_levels[ndm - 1][pr_idx_1 - 1]; + pr_q_lvls2 = dtx_pr_real_q_levels[ndm - 1][pr_idx_2 - 1]; + + pr_pr_bits = ivas_get_bits_to_encode( pr_q_lvls1 * pr_q_lvls2 ); + + value = get_next_indice( st0, pr_pr_bits ); + + pr_idx2 = (int16_t) floor( value / pr_q_lvls1 ); + pr_idx1 = value - pr_idx2 * pr_q_lvls1; + + ppVal[0][0] = pr_min_max[0]; + ivas_quantise_real_values( ppVal, pr_q_lvls1, pr_min_max[0], pr_min_max[1], ppIdx, ppVal, 1, 1 ); + + pr_idx1 += ppIdx[0][0]; + + ppVal[0][0] = pr_min_max[0]; + ivas_quantise_real_values( ppVal, pr_q_lvls2, pr_min_max[0], pr_min_max[1], ppIdx, ppVal, 1, 1 ); + + pr_idx2 += ppIdx[0][0]; + + pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_1 - 1] = pr_idx1; + pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_2 - 1] = pr_idx2; + } + } + } + } + + sid_bits_len = st0->next_bit_pos - sid_bits_len; + zero_pad_bits = ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - sid_bits_len; + assert( zero_pad_bits >= 0 ); + for ( j = 0; j < zero_pad_bits; j++ ) + { + get_next_indice( st0, 1 ); + } + + ivas_spar_foa_unquant_dtx_indicies( pSpar_md, num_bands, bw, num_dmx_per_band ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_deindex_real_index() + * + * deindex real index + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_deindex_real_index( + int16_t **index, + const int16_t q_levels, + const float min_value, + const float max_value, + float **quant, + const int16_t num_ch, + const int16_t dim2 ) +{ + int16_t i, j; + float q_step; + + if ( q_levels == 0 ) + { + return IVAS_ERR_INTERNAL; + } + + if ( q_levels == 1 ) + { + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < dim2; j++ ) + { + quant[i][j] = 0; + } + } + } + else + { + q_step = ( max_value - min_value ) / ( q_levels - 1 ); + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < dim2; j++ ) + { + quant[i][j] = index[i][j] * q_step; + } + } + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_to_dirac() + * + * + *-----------------------------------------------------------------------------------------*/ + +void ivas_spar_to_dirac( + Decoder_Struct *st_ivas, + ivas_spar_foa_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ + const int16_t dtx_vad, /* i : DTX frame flag */ + const int16_t num_bands_out /* i : number of output bands */ +) +{ + DIRAC_DEC_HANDLE hDirAC; + int16_t start_band, end_band, band, qmf_band_start, qmf_band_end; + int16_t block, b; + int16_t *band_grouping; + float diffuseness[IVAS_MAX_NUM_BANDS]; + int16_t sba_order_internal; + float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t azi[IVAS_MAX_NUM_BANDS]; + int16_t ele[IVAS_MAX_NUM_BANDS]; + float dvx[IVAS_MAX_NUM_BANDS], dvy[IVAS_MAX_NUM_BANDS], dvz[IVAS_MAX_NUM_BANDS]; + float radius; + float en_ratio, res_pow; +#ifdef ENABLE_DITHER + int16_t *seed_ptr; +#endif + int16_t num_slots_in_subfr; + int16_t tmp_write_idx_param_band; + int16_t tmp_write_idx_band; + float pred_re_20ms[IVAS_MAX_NUM_BANDS][IVAS_SPAR_MAX_CH - 1]; + int16_t pred_idx; + int16_t *dirac_to_spar_md_bands; + int16_t enc_param_start_band; + + sba_order_internal = min( st_ivas->sba_order, IVAS_MAX_SBA_ORDER ); + + start_band = 0; + end_band = min( num_bands_out, SPAR_DIRAC_SPLIT_START_BAND ); + + hDirAC = st_ivas->hDirAC; + dirac_to_spar_md_bands = st_ivas->hSpar->hSparFoa->dirac_to_spar_md_bands; + enc_param_start_band = st_ivas->hSpar->hSparFoa->enc_param_start_band; + + if ( hDirAC != NULL ) + { + band_grouping = hDirAC->band_grouping; +#ifdef ENABLE_DITHER + seed_ptr = &hDirAC->dithering_seed; +#endif + num_slots_in_subfr = st_ivas->hDirAC->hConfig->dec_param_estim ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; + + for ( band = start_band; band < end_band; band++ ) + { + float PR[3], Pd[3], dvnorm, g_pred; + + PR[0] = hMdDec->spar_md.band_coeffs[band].pred_re[2]; + PR[1] = hMdDec->spar_md.band_coeffs[band].pred_re[0]; + PR[2] = hMdDec->spar_md.band_coeffs[band].pred_re[1]; + g_pred = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; + if ( g_pred <= EPSILON ) + { + dvx[band] = 1.0f; + dvy[band] = 0.0f; + dvz[band] = 0.0f; + } + else + { + g_pred = sqrtf( g_pred ); + dvnorm = 1.0f / g_pred; + dvx[band] = PR[0] * dvnorm; + dvy[band] = PR[1] * dvnorm; + dvz[band] = PR[2] * dvnorm; + } + + radius = sqrtf( dvx[band] * dvx[band] + dvy[band] * dvy[band] ); + azi[band] = (int16_t) ( max( -180.0f, min( 180.0f, atan2f( dvy[band], dvx[band] ) / EVS_PI * 180.0f ) ) + 0.5f ); + ele[band] = (int16_t) ( max( -90.0f, min( 180.0f, atan2f( dvz[band], radius ) / EVS_PI * 180.0f ) ) + 0.5f ); + + if ( st_ivas->nchan_transport == 1 ) + { + float w_en_norm, f_scale; + + if ( hMdDec->spar_md_cfg.active_w ) + { + if ( dtx_vad == 0 ) + { + f_scale = IVAS_ACTIVEW_DM_F_SCALE_DTX; + } + else + { + f_scale = IVAS_ACTIVEW_DM_F_SCALE; + } + } + else + { + f_scale = 0.0f; + } + + w_en_norm = ( 1.0f - ( f_scale * g_pred * g_pred ) ); + w_en_norm *= w_en_norm; + + Pd[0] = hMdDec->spar_md.band_coeffs[band].P_re[1]; + Pd[1] = hMdDec->spar_md.band_coeffs[band].P_re[0]; + Pd[2] = hMdDec->spar_md.band_coeffs[band].P_re[2]; + en_ratio = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; + res_pow = w_en_norm + en_ratio + ( Pd[0] * Pd[0] + Pd[1] * Pd[1] + Pd[2] * Pd[2] ); + res_pow *= 0.5f; + hMdDec->spar_md.en_ratio_slow[band] = 0.75f * hMdDec->spar_md.en_ratio_slow[band] + 0.25f * en_ratio; + hMdDec->spar_md.ref_pow_slow[band] = 0.75f * hMdDec->spar_md.ref_pow_slow[band] + 0.25f * res_pow; + en_ratio = sqrtf( hMdDec->spar_md.en_ratio_slow[band] ) / ( hMdDec->spar_md.ref_pow_slow[band] + EPSILON ); + } + else + { + en_ratio = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; + hMdDec->spar_md.en_ratio_slow[band] = 0.75f * hMdDec->spar_md.en_ratio_slow[band] + 0.25f * en_ratio; + en_ratio = sqrtf( hMdDec->spar_md.en_ratio_slow[band] ); + } + diffuseness[band] = 1.0f - en_ratio; /*compute diffuseness*/ + diffuseness[band] = ( ( diffuseness[band] < 1.0f ) ? ( ( diffuseness[band] < 0.0f ) ? 0.f : diffuseness[band] ) : 1.0f ); + } + + for ( band = start_band; band < end_band; band++ ) + { +#ifdef ENABLE_DITHER + int16_t diff_idx, azi_dith, ele_dith; +#else + int16_t azi_dith, ele_dith; +#endif + tmp_write_idx_param_band = hDirAC->spar_to_dirac_write_idx; + + en_ratio = 1.0f - diffuseness[band]; +#ifdef ENABLE_DITHER + diff_idx = +#endif + masa_sq( 1.0f - en_ratio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + + qmf_band_start = band_grouping[band]; + qmf_band_end = band_grouping[band + 1]; + + for ( block = 0; block < hDirAC->nb_subframes; block++ ) + { + int16_t ts_start, ts_end, ts; + + ts_start = hDirAC->block_grouping[block]; + ts_end = hDirAC->block_grouping[block + 1]; + for ( b = qmf_band_start; b < qmf_band_end; b++ ) + { + +#ifdef ENABLE_DITHER + azi_dith = (int16_t) ( azi[band] + rand_triangular_signed( seed_ptr ) * dirac_dithering_azi_scale[diff_idx] + 0.5f ); + ele_dith = (int16_t) ( ele[band] + rand_triangular_signed( seed_ptr ) * dirac_dithering_ele_scale[diff_idx] + 0.5f ); + /* limit the elevation to [-90, 90] */ + ele_dith = min( 90, ele_dith ); + ele_dith = max( -90, ele_dith ); +#else + azi_dith = azi[band]; + ele_dith = ele[band]; +#endif + + hDirAC->energy_ratio1[block][b] = en_ratio; + tmp_write_idx_band = tmp_write_idx_param_band; + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + hDirAC->elevation[tmp_write_idx_band][b] = ele_dith; + hDirAC->azimuth[tmp_write_idx_band][b] = azi_dith; + hDirAC->diffuseness_vector[tmp_write_idx_band][b] = diffuseness[band]; + } + else + { + for ( ts = ts_start; ts < ts_end; ts++ ) + { + hDirAC->elevation[tmp_write_idx_band][b] = ele_dith; + hDirAC->azimuth[tmp_write_idx_band][b] = azi_dith; + hDirAC->diffuseness_vector[tmp_write_idx_band][b] = diffuseness[band]; + tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hDirAC->dirac_md_buffer_length; + } + } + } + tmp_write_idx_param_band = ( tmp_write_idx_param_band + num_slots_in_subfr ) % hDirAC->dirac_md_buffer_length; + } + } + + /* update buffer write index */ + if ( hDirAC->hConfig->dec_param_estim == FALSE ) + { + hDirAC->spar_to_dirac_write_idx = ( hDirAC->spar_to_dirac_write_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % hDirAC->dirac_md_buffer_length; + } + else + { + hDirAC->spar_to_dirac_write_idx = ( hDirAC->spar_to_dirac_write_idx + CLDFB_NO_COL_MAX ) % hDirAC->dirac_md_buffer_length; + } + } + else + { + band = end_band; + } + + /*read DirAC metadata, convert DirAC to SPAR*/ + for ( ; band < num_bands_out; band++ ) + { + int16_t dirac_band_idx; + + dirac_band_idx = dirac_to_spar_md_bands[band] - enc_param_start_band; + + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) + { + if ( st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block] < 0.f ) + { + st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block] += 360.f; + } + azi_dirac[band][block] = st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block]; + ele_dirac[band][block] = st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].elevation[block]; + } + + diffuseness[band] = 1.0f - st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].energy_ratio[0]; + } + + /* DirAC MD averaged over 4 subframes and converted to SPAR format similar to encoder processing */ + if ( hMdDec->spar_md_cfg.nchan_transport > 1 ) + { + ivas_get_spar_md_from_dirac( azi_dirac, ele_dirac, diffuseness, 1, NULL, &hMdDec->spar_md, &hMdDec->spar_md_cfg, + end_band, num_bands_out, sba_order_internal, dtx_vad, NULL ); + + /* temporarily copy frame-wise prediction coefficients in DirAC bands*/ + for ( pred_idx = 0; pred_idx < FOA_CHANNELS - 1; pred_idx++ ) + { + for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) + { + pred_re_20ms[band][pred_idx] = hMdDec->spar_md.band_coeffs[band].pred_re[pred_idx]; + } + } + } + + ivas_get_spar_md_from_dirac( azi_dirac, ele_dirac, diffuseness, MAX_PARAM_SPATIAL_SUBFRAMES, NULL, &hMdDec->spar_md, &hMdDec->spar_md_cfg, + end_band, num_bands_out, sba_order_internal, dtx_vad, NULL ); + + /* expand DirAC TC 20ms MD for residual channels to all subframes*/ + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) + { + for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) + { + for ( pred_idx = 0; pred_idx < FOA_CHANNELS - 1; pred_idx++ ) /* pred coefficient index (index 0, 1, 2 predicts Y, Z, X respectively) */ + { + if ( ivas_is_res_channel( pred_idx + 1, hMdDec->spar_md_cfg.nchan_transport ) ) + { + /* use 20ms coefficients only for residual channels */ + hMdDec->spar_md.band_coeffs[band + block * IVAS_MAX_NUM_BANDS].pred_re[pred_idx] = pred_re_20ms[band][pred_idx]; + } + } + } + } + + for ( b = end_band; b < num_bands_out; b++ ) + { + hMdDec->valid_bands[b] = 1; + } + + return; +} diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h new file mode 100644 index 0000000000..a9ba163265 --- /dev/null +++ b/lib_dec/ivas_stat_dec.h @@ -0,0 +1,2017 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_STAT_DEC_H +#define IVAS_STAT_DEC_H + +#include +#include "options.h" +#include "cnst.h" +#include "stat_dec.h" +#include "ivas_cnst.h" +#include "ivas_stat_com.h" + + +/*----------------------------------------------------------------------------------* + * Output configuration for renderer (e.g. DirAC, MASA, Binaural Renderer...) + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_output_setup_structure +{ + AUDIO_CONFIG output_config; + int16_t nchan_out_woLFE; /* number of output audio channels without LFE */ + int16_t ambisonics_order; + int8_t is_loudspeaker_setup; + int8_t is_planar_setup; + int8_t is_binaural_setup; + + int16_t num_lfe; + int16_t index_lfe[1]; + const float *ls_azimuth; + const float *ls_elevation; + + uint8_t separateChannelEnabled; + int16_t separateChannelIndex; + +} IVAS_OUTPUT_SETUP, *IVAS_OUTPUT_SETUP_HANDLE; + + +/*----------------------------------------------------------------------------------* + * DFT Stereo decoder structure + *----------------------------------------------------------------------------------*/ + +/* State of the range decoder */ +typedef struct +{ + uint32_t rc_low; + uint32_t rc_range; + + uint16_t *bit_buffer; + int16_t bit_count; + int16_t max_allowable_bit_count; + + int16_t bit_error_detected; + +} RangeUniDecState; + +/* basic allpass structure */ +typedef struct +{ + float gains[3]; + int16_t delays[3]; + float buffer[3][STEREO_DFT_ALLPASS_BUFFERLEN]; + int16_t pos; + +} basic_allpass_t; + + +typedef struct stereo_dft_dec_data_struct +{ + STEREO_DFT_CONFIG_DATA_HANDLE hConfig; + + /*Sizes*/ + int16_t N; /* Size of DFT hop size */ + int16_t NFFT; /* Size of DFT */ + + /*FFT*/ + const float *dft_trigo; + const float *dft_trigo_12k8; + const float *dft_trigo_16k; + const float *dft_trigo_8k; + int16_t dft_trigo_step; + + int16_t dft32ms_ovl; /* Overlap size */ + const float *win32ms; /* DFT window */ + const float *win32ms_12k8; /* DFT window */ + const float *win32ms_16k; /* DFT window */ + const float *win32ms_8k; /* DFT window */ + + int16_t dft32ms_ovl2; /* Overlap2 size */ + const float *win232ms; /* DFT window */ + const float *win232ms_12k8; /* DFT window */ + const float *win232ms_16k; /* DFT window */ + const float *win232ms_8k; /* DFT window */ + + const float *win_8k; /* DFT window residual */ + + + /*Bands*/ + int16_t band_res[STEREO_DFT_DEC_DFT_NB]; + int16_t band_limits[STEREO_DFT_BAND_MAX + 1]; + int16_t nbands; + + /*Configuration*/ + int16_t prm_res[STEREO_DFT_DEC_DFT_NB]; + + /*Stereo parameters*/ + float side_gain[STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX]; + int16_t side_gain_flag_1; + int16_t side_gain_flag_2; + int16_t side_gain_index_previous[STEREO_DFT_BAND_MAX]; + int16_t side_gain_index[STEREO_DFT_BAND_MAX]; + + float gipd[STEREO_DFT_DEC_DFT_NB]; + int16_t no_ipd_flag; /* flag to indicate when no IPD gets used */ + + float itd[STEREO_DFT_DEC_DFT_NB]; + + /*residual prediction*/ + int16_t res_pred_mode[STEREO_DFT_DEC_DFT_NB]; /* residual prediction mode: 0(off), 1(stereo filling only), 2(enhanced stereo filling) */ + float res_pred_gain[STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX]; /* prediction gain for the residual HFs */ + int16_t res_pred_band_min; /* Band min for prediction of residual */ + float DFT_past_DMX[STEREO_DFT_PAST_MAX][STEREO_DFT32MS_N_32k]; /* Past DMX for residual prediction */ + int16_t past_DMX_pos; + int16_t res_pred_flag_0; + int16_t res_pred_flag_1; + int16_t res_pred_index_previous[STEREO_DFT_BAND_MAX]; + float past_res_pred_gain[STEREO_DFT_PAST_MAX][STEREO_DFT_BAND_MAX]; + float res_gains_ind[2][2 * STEREO_DFT_BAND_MAX]; + + int16_t reverb_flag; + int16_t nbands_respred; + + /*residual coding*/ + int16_t res_cod_mode[STEREO_DFT_DEC_DFT_NB]; /* mode from 0 (off) to 3 */ + int16_t res_cod_band_max; /* Band max for coding of residual */ + float res_global_gain; + int16_t res_cod_line_max; + float res_hb_nrg_mem; + float bpf_error_signal_last; + float bpf_error_ratio_mem; + float res_cod_mem[STEREO_DFT_OVL_8k]; + float buff_LBTCX_mem[NS2SA( 16000, STEREO_DFT32MS_OVL_NS )]; + + float stab_fac_smooth_res; /* low-pass filtered stability factor */ + BPF_DEC_HANDLE hBpf; + TCX_LTP_DEC_HANDLE hTcxLtpDec; + + int16_t trans; + int16_t attackPresent; + int16_t wasTransient; + + float lt_pred_gain; + float lt_pred_gain_variation; + float lt_var_mean_ratio; + float stefi_short_gain; + float stefi_long_gain; + + basic_allpass_t ap1, ap2, ap3; + float ap_delay_mem[NS2SA( 16000, DELAY_BWE_TOTAL_NS )]; + float ap_fade_mem[STEREO_DFT_ALLPASS_FADELEN_16k]; + int16_t ap_wasTransient; + float smooth_dmx_nrg[STEREO_DFT_BAND_MAX]; + float smooth_res_nrg[STEREO_DFT_BAND_MAX]; + int16_t core_hist[STEREO_DFT_CORE_HIST_MAX]; + float hb_stefi_sig[L_FRAME48k + NS2SA( 48000, STEREO_DFT_TD_STEFI_DELAY_NS )]; + int16_t hb_stefi_delay; + float hb_nrg[STEREO_DFT_CORE_HIST_MAX]; + float hb_nrg_subr[STEREO_DFT_NBDIV]; + float td_gain[STEREO_DFT_CORE_HIST_MAX]; + + /* stereo DTX */ + float g_state[STEREO_DFT_BAND_MAX]; + int16_t frame_sid_nodata; + int16_t frame_nodata; + int16_t frame_sid; + + float scale; + + /* PLC on residual signal */ + float res_mem[STEREO_DFT_RES_BW_MAX]; + int16_t time_offs; + float past_dmx_nrg; + float sg_mean; + int16_t sg_mem_corrupt; + int16_t recovery_flg; + + float smooth_buf[SBA_DIRAC_STEREO_NUM_BANDS][SBA_DIRAC_NRG_SMOOTH_LONG + 1]; + float smooth_fac[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; + + +} STEREO_DFT_DEC_DATA, *STEREO_DFT_DEC_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * DFT Stereo mono output structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_dft_dmx_out_data_structure +{ + float targetGain; /* TCA gain norm applied on target (or right) channel in current frame */ + float prevTargetGain; /* TCA gain norm applied on target (or right) channel in previous frame */ + + float memOutHB[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; + float memTransitionHB[NS2SA( 48000, STEREO_DFT32MS_OVL_NS )]; + +} STEREO_DFT_DMX_DATA, *STEREO_DFT_DMX_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Stereo CNG handle + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_dec_cng +{ + float coh[STEREO_DFT_BAND_MAX + 1]; /* coherence */ + float cm[STEREO_DFT_BAND_MAX]; /* cm */ + int16_t first_SID; /* first SID indicator */ + int16_t first_SID_after_TD; /* first SID after TD-stereo indicator */ + int16_t prev_sid_nodata; /* previous frame SID/FRAME_NO_DATA indicator */ + int16_t last_tdm_idx; /* last tdm index */ + float c_LR_LT; /* left right cross correlation */ + int16_t active_frame_counter; /* counter for active frames */ + int16_t xfade_frame_counter; /* xfade counter */ + int16_t xfade_length; /* number of frames to perform xfade */ + int16_t nr_dft_frames; /* dft frame counter */ + int16_t nr_corr_frames; /* correlation frame counter */ + int16_t nr_sid_frames; /* sid frame counter */ + int16_t last_act_element_mode; /* Element mode of last active frame */ + float olapBufferSynth22[FFTLEN]; /* overlap buffer for secondary channel CNA */ + int16_t flag_cna_fade; /* flag enabling CNA fade out */ + float maskingNoiseS[L_FRAME16k]; /* masking noise (CNA) for secondary channel */ + int16_t enableSecCNA; /* flag enabling secondary channel CNA */ + float c_PS_LT; /* long term cross-correlation between primary and secondary channel */ + const int16_t *frameSize; /* Frame size in samples */ + const int16_t *fftlen; /* FFT length used for the decomposition */ + +} STEREO_CNG_DEC, *STEREO_CNG_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * TD Stereo decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_td_dec_data_structure +{ + int16_t tdm_last_ratio_idx; /* last TDM ratio index */ + int16_t tdm_last_SM_flag; /* last channel combination scheme flag */ + int16_t tdm_prev_last_SM_flag; /* channel combination scheme flag before last frame */ + int16_t tdm_SM_flag; /* current channel combination scheme flag */ + int16_t tdm_use_IAWB_Ave_lpc; /* Flag to indicate the usage of mean inactive LP coefficients */ + + int16_t tdm_lp_reuse_flag; /* Flag that indicate if it is possible to reuse the LP coefficient from the primary channel or not */ + int16_t tdm_low_rate_mode; /* secondary channel low rate mode flag */ + float tdm_Pri_pitch_buf[NB_SUBFR]; + int16_t tdm_Pitch_reuse_flag; + int16_t tdm_LRTD_flag; + int16_t flag_skip_DMX; /* flag that indicates whether the TD downmixing is skipped */ + + float TCX_old_syn_Overl[L_FRAME16k / 2]; /* past ovrl buffer for possible switching from TD stereo ACELP to MDCT stereo TCX frame */ + + float prevSP_ratio; /* previous SP ratio */ + float SP_ratio_LT; /* longterm SP ratio */ + float c_LR_LT; /* left-right cross-correlation */ + +} STEREO_TD_DEC_DATA, *STEREO_TD_DEC_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * MDCT Stereo decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_mdct_dec_data_structure +{ + /* static members */ + STEREO_MDCT_BAND_PARAMETERS stbParamsTCX20; /* stereo frequency band parameters for TCX20 */ + STEREO_MDCT_BAND_PARAMETERS stbParamsTCX10; /* stereo frequency band parameters for TCX10 */ + STEREO_MDCT_BAND_PARAMETERS stbParamsTCX20afterACELP; /* stereo frequency band parameters for transition frame */ + /* only intraframe */ + int16_t mdct_stereo_mode[2]; /* mdct stereo mode: LR, MS, band-wise MS */ + int16_t global_ild[2]; /* Quantized ILD for the whole spectrum */ + int16_t split_ratio; /* Ratio of bitrate (1 to 7), split_ratio = 8 * 1st chn bitrate / (1st + 2nd chn bitrate) */ + + int16_t IGFStereoMode[2]; /* MDCT stereo mode for IGF */ + + int16_t use_itd; + int16_t itd_mode; /*0/1*/ + float itd; + + int16_t reverse_dmx; + float smooth_ratio; + + int16_t prev_ms_mask[NB_DIV][MAX_SFB]; + float lastCoh; +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + int16_t noise_seeds_channels[CPE_CHANNELS]; + int16_t noise_seed_common; +#endif + +} STEREO_MDCT_DEC_DATA, *STEREO_MDCT_DEC_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * ICA Stereo decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_tca_dec_data_structure +{ + int16_t refChanIndx; /* reference channel index in current frame */ + int16_t prevRefChanIndx; /* reference channel index in previous frame */ + int16_t indx_ica_NCShift; /* ICA target channel inter-channel corrstats */ + int16_t indx_ica_gD; /* ICA target gain */ + float targetGain; /* gain norm applied on target (or right) channel in current frame */ + float prevTargetGain; /* gain norm applied on target (or right) channel in previous frame */ + + int16_t corrLagStats; /* corr lag stats in current frame */ + int16_t prevCorrLagStats; /* corr lag stats in previous frame */ + +#ifdef DEC_ICA_DELAY_INTERP + int16_t interp_dec_prevNCShift; /* NC Shift in previous frame */ + int16_t interp_dec_switch_to_zero_diff; /* switch flag for interpolation */ +#endif + + float memChanL[L_DEC_MEM_LEN_ICA]; /* left channel input to correct at the cross-over */ + float memChanR[L_DEC_MEM_LEN_ICA]; /* right channel input to correct at the cross-over */ + +} STEREO_TCA_DEC_DATA, *STEREO_TCA_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Stereo IC-BWE decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_icbwe_dec_data_structure +{ + int16_t prev_refChanIndx_bwe; + int16_t refChanIndx_bwe; + int16_t prev_spIndx; + int16_t prev_gsIndx; + + /* SHB output memory */ + float memOutHB[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; + + float memTransitionHB[CPE_CHANNELS][NS2SA( 48000, STEREO_DFT32MS_OVL_NS )]; + + /* unscaled & scaled SHB synthesis memory */ + float mem_syn_shb_nonref[L_SHB_LAHEAD]; + float mem_lpc_shbsynth_nonref[LPC_SHB_ORDER]; + float mem_syn_shb_ola_nonref[L_SHB_LAHEAD]; + + /* inter-channel BWE spectral shape adj. */ + float prevSpecMapping; + float memShbSpecMapping; + float prevgsMapping; + + float memShbHilbert_nonref[HILBERT_MEM_SIZE]; + float memShbInterp_nonref[2 * ALLPASSSECTIONS_STEEP + 1]; + float memShb_fsout_nonref[INTERP_3_2_MEM_LEN]; + int16_t syn_dm_phase_nonref; + + float icbweM2Ref_prev; + + float nlExc16k[L_FRAME16k]; + float mixExc16k[L_FRAME16k]; + float shbSynthRef[L_FRAME16k]; + int16_t MSFlag; + float lpSHBRef[LPC_SHB_ORDER + 1]; + float gshapeRef[NUM_SHB_SUBFR]; + float gFrameRef; + +} STEREO_ICBWE_DEC_DATA, *STEREO_ICBWE_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * DirAC decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct dirac_dec_stack_mem +{ + /*Decorrelator*/ + float *frame_dec_f; + + /*Prototypes*/ + float *proto_direct_buffer_f; + float *proto_diffuse_buffer_f; + + /*Prototype NRGs*/ + float *proto_power_smooth; + float *proto_power_diff_smooth; + + /*Gain or power factors for directional and diffuse streams*/ + float *direct_power_factor; + float *diffuse_power_factor; + + /*Directional responses (gains & Nrg)*/ + float *direct_responses; + float *direct_responses_square; + + /* Target co-variance mtx */ + float *cy_auto_dir_smooth; + float *cy_cross_dir_smooth; + float *cy_auto_diff_smooth; + + float *reference_power; + float *onset_filter; +} DIRAC_DEC_STACK_MEM, *DIRAC_DEC_STACK_MEM_HANDLE; + +typedef struct param_ism_rendering +{ + float *proto_matrix; + float *interpolator; + float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; + +} PARAM_ISM_RENDERING_DATA, *PARAM_ISM_RENDERING_HANDLE; + + +/*Onset detector*/ +typedef struct dirac_onset_detection_params_structure +{ + int16_t num_freq_bands; + int16_t max_band_decorr; + +} DIRAC_ONSET_DETECTION_PARAMS; + +typedef struct dirac_onset_detection_state_structure +{ + float *onset_detector_1; + float *onset_detector_2; + +} DIRAC_ONSET_DETECTION_STATE; + +/*Decorrelator*/ +typedef struct dirac_decorr_params_structure +{ + int16_t max_band_decorr; + int16_t max_frequency; + + int16_t *pre_delay; + int16_t *filter_length; + float *filter_coeff_num_real; + float *filter_coeff_den_real; + float *phase_coeff_real; + float *phase_coeff_imag; + int16_t *split_frequency_bands; + int16_t num_split_frequency_bands; + + int16_t use_ducker; + int16_t add_back_onsets_on; + + DIRAC_ONSET_DETECTION_PARAMS h_onset_detection_power_params; + +} DIRAC_DECORR_PARAMS, *HANDLE_DIRAC_DECORR_PARAMS; + +typedef struct dirac_decorr_state_structure +{ + float *decorr_buffer; + float *direct_energy_smooth; + float *reverb_energy_smooth; + + DIRAC_ONSET_DETECTION_STATE h_onset_detection_power_state; + +} DIRAC_DECORR_STATE, *HANDLE_DIRAC_DECORR_STATE; + +/*Output synthesis*/ +typedef struct dirac_output_synthesis_params_structure +{ + int16_t max_band_decorr; + + int16_t use_onset_filters; + + float *interpolator; + float *alpha_synthesis; + float *alpha_synthesis_fast; + int16_t numAlphas; + int16_t numAlphasFast; + + float *proto_matrix; + + float diffuse_compensation_factor; + float diffuse_compensation_factor_decorr; + +} DIRAC_OUTPUT_SYNTHESIS_PARAMS; + +typedef struct dirac_output_synthesis_state_structure +{ + /* only pointer to local buffers */ + float *direct_responses; /* direct responses for DOA of current frame. Size: num_freq_bands*num_channels. */ + float *direct_responses_square; + float *diffuse_responses_square; /* squared diffuse responses. Size: num_channels. */ + + /* only pointer to local buffers */ + float *direct_power_factor; + float *diffuse_power_factor; + + float *proto_power_smooth; /* Smoothed power of the prototype signals. Size: num_freq_bands*num_channels. */ + float *proto_power_smooth_prev; /* Smoothed power of the prototype signals of the previous synthesis block. Size: num_freq_bands*num_channels. */ + + float *proto_power_diff_smooth; + float *proto_power_diff_smooth_prev; + + /* only pointer to local buffers */ + float *proto_direct_buffer_f; /* Buffer for direct sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ + float *proto_diffuse_buffer_f; /* Buffer for diffuse sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ + + /* Output gain memories */ + float *gains_dir_prev; /* Direct sound gains of current synthesis block. Size: num_freq_bands*num_channel. */ + float *gains_diff_prev; /* Diffuse sound gains of previous synthesis block. Size: num_freq_bands*num_channel. */ + + /* only pointer to local buffers */ + float *cy_auto_dir_smooth; /* Target auto PSD of direct sound. Size: num_freq_bands*num_channels. */ + float *cy_cross_dir_smooth; /* Target cross PSD of direct sound. Size: num_freq_bands*num_channels. */ + float *cy_auto_diff_smooth; /* Target auto PSD of diffuse sound. Size: num_freq_bands*num_channels. */ + + /* PSD memories */ + float *cy_auto_dir_smooth_prev; /* Target auto PSD of direct sound of previous synthesis block. Size: num_freq_bands*num_channels. */ + float *cy_cross_dir_smooth_prev; /* Target cross PSD of direct sound of previous synthesis block. Size: num_freq_bands*num_channels. */ + float *cy_auto_diff_smooth_prev; /* Target auto PSD of diffuse sound of previous synthesis block. Size: num_freq_bands*num_channels. */ + + const float *onset_filter; + + /* Temporal smoothing memories */ + float *reference_power_smooth_prev; + float *direction_smoothness_prev; + +} DIRAC_OUTPUT_SYNTHESIS_STATE; + +typedef struct dirac_output_synthesis_cov_state_structure +{ + + /* only pointer to local buffers */ + float *direct_power_factor; + float *diffuse_power_factor; + + /* only pointer to local buffers */ + float *direct_responses; /* direct responses for DOA of current frame. Size: num_freq_bands*num_channels. */ + float *direct_responses_square; + float *diffuse_responses_square; /* squared diffuse responses. Size: num_channels. */ + + /* only pointer to local buffers */ + float *proto_direct_buffer_f; /* Buffer for direct sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ + float *proto_diffuse_buffer_f; /* Buffer for diffuse sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ + float *proto_power; /* Smoothed power of the prototype signals. Size: num_freq_bands*num_channels. */ + float *proto_power_diff; + + float *cx_old[CLDFB_NO_CHANNELS_MAX]; + float *cy_old[CLDFB_NO_CHANNELS_MAX]; + float *mixing_matrix_old[CLDFB_NO_CHANNELS_MAX]; + float *mixing_matrix_res_old[CLDFB_NO_CHANNELS_MAX]; + +} DIRAC_OUTPUT_SYNTHESIS_COV_STATE; + + +/* MASA stereo transport signal type detection structure */ +typedef struct +{ + MASA_TRANSPORT_SIGNAL_TYPE masa_stereo_type; + MASA_TRANSPORT_SIGNAL_TYPE current_stereo_type; + MASA_TRANSPORT_SIGNAL_TYPE type_change_direction; + + int16_t dipole_freq_range[2]; + + float left_bb_power; + float right_bb_power; + float total_bb_power; + + float left_hi_power; + float right_hi_power; + float total_hi_power; + + float sum_power[MASA_SUM_FREQ_RANGE_BINS]; + float total_power[MASA_SUM_FREQ_RANGE_BINS]; + + float subtract_power_y; + float subtract_power_y_smooth; + float target_power_y_smooth; + + float lr_total_bb_ratio_db; + float lr_total_hi_ratio_db; + float min_sum_total_ratio_db; + float subtract_target_ratio_db; + + int16_t counter; + int16_t interpolator; + +} MASA_STEREO_TYPE_DETECT; + +/* Diffuse sound directional distribution data structure */ +typedef struct ivas_diffuse_distribution_data_structure +{ + float diffuseRatioX[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float diffuseRatioY[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float diffuseRatioZ[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + +} DIFFUSE_DISTRIBUTION_DATA, *DIFFUSE_DISTRIBUTION_HANDLE; + + +/* ===== DirAC main structure ===== */ +typedef struct ivas_dirac_dec_data_structure +{ + DIRAC_CONFIG_DATA_HANDLE hConfig; + IVAS_OUTPUT_SETUP hOutSetup; + + int16_t slot_size; + int16_t subframe_nbslots; + int16_t nb_subframes; + int16_t num_freq_bands; + + /*Parameter decoding*/ + float azimuth_values[MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS]; + float elevation_values[MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS]; + int16_t band_grouping[IVAS_MAX_NUM_BANDS + 1]; + + int16_t block_grouping[5]; + /* decoded, ungrouped and rounded values, we have 1 degree resolution anyway */ + int16_t **azimuth; + int16_t **elevation; + int16_t **azimuth2; + int16_t **elevation2; + + float **diffuseness_vector; + float **energy_ratio1; + float **energy_ratio2; + + float **spreadCoherence; + float **spreadCoherence2; + float **surroundingCoherence; + + int16_t dithering_seed; + int16_t dirac_bs_md_write_idx; + int16_t dirac_read_idx; + int16_t dirac_estimator_idx; + int16_t spar_to_dirac_write_idx; + int16_t dirac_md_buffer_length; + + + int16_t numSimultaneousDirections; /* 1 or 2 */ + DIFFUSE_DISTRIBUTION_HANDLE hDiffuseDist; + + /*Parameter estimation*/ + int16_t index_buffer_intensity; + float *buffer_intensity_real[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; + float buffer_energy[DIRAC_NO_COL_AVG_DIFF * CLDFB_NO_CHANNELS_MAX]; + + /*Decoder parameters */ + /*Prototypes*/ + int16_t num_outputs_dir; + int16_t num_outputs_diff; + int16_t num_protos_dir; + int16_t num_protos_diff; + int16_t num_protos_ambi; + DIRAC_SYNTHESIS_CONFIG synthesisConf; + DIRAC_PANNING_CONFIG panningConf; + + float *frequency_axis; + float *diffuse_response_function; + float *hoa_encoder; + const float *hoa_decoder; + + /*Options*/ + /* Decorrelator options */ + int16_t max_band_decorr; + + /* prototype computing */ + int16_t *proto_index_dir; + int16_t *proto_index_diff; + + int16_t proto_signal_decorr_on; + + /*Decoder states=memories*/ + float *proto_frame_f; + float *proto_frame_dec_f; + + DIRAC_DEC_STACK_MEM stack_mem; + + MASA_STEREO_TYPE_DETECT *masa_stereo_type_detect; + + int16_t num_ele_spk_no_diffuse_rendering; + + /*sub-modules*/ + HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params; + HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state; + + DIRAC_OUTPUT_SYNTHESIS_PARAMS h_output_synthesis_psd_params; + DIRAC_OUTPUT_SYNTHESIS_STATE h_output_synthesis_psd_state; + + PARAM_ISM_CONFIG_HANDLE hParamIsm; /* Parametric ISM handle */ + float power_ratios[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS][MAX_PARAM_ISM_WAVE]; + PARAM_ISM_RENDERING_HANDLE hParamIsmRendering; + IVAS_FB_MIXER_HANDLE hFbMdft; + int16_t dirac_to_spar_md_bands[DIRAC_MAX_NBANDS]; +} DIRAC_DEC_DATA, *DIRAC_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * ParamMC structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_param_mc_diff_proto_info_structure +{ + int16_t num_protos_diff; + int16_t *proto_index_diff; + int16_t *num_source_chan_diff; + int16_t **source_chan_idx; + float **proto_fac; + +} PARAM_MC_DIFF_PROTO_INFO; + +/* ===== Parametric MC main structure ===== */ +typedef struct ivas_param_mc_dec_data_structure +{ + + int16_t slot_size; + int16_t subframe_nbslots; + int16_t num_freq_bands; + int16_t num_param_bands_synth; + + int16_t band_grouping[PARAM_MC_MAX_PARAMETER_BANDS + 1]; + + /*Decoder parameters */ + /*Prototypes*/ + int16_t num_outputs_diff; + PARAM_MC_DIFF_PROTO_INFO *diff_proto_info; + PARAM_MC_SYNTHESIS_CONF synthesis_conf; + + /*Options*/ + /* Decorrelator options */ + int16_t max_band_decorr; + /*Decoder states=memories*/ + float *proto_frame_f; + float *proto_frame_dec_f; + + DIRAC_OUTPUT_SYNTHESIS_COV_STATE h_output_synthesis_cov_state; + DIRAC_OUTPUT_SYNTHESIS_PARAMS h_output_synthesis_params; + int16_t max_band_energy_compensation; + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC; + float *icc_q; /* ICC parameters*/ + float *icld_q; + int16_t max_param_band_abs_cov; + float *ls_conv_dmx_matrix; + float *proto_matrix_int; + + /*sub-modules*/ + HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params; + HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state; + + float *hoa_encoder; + +} PARAM_MC_DEC_DATA, *PARAM_MC_DEC_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * SPAR decoder structures + *------------------------------------------------------------------------------------------*/ + +/* SPAR FOA MD structure */ +typedef struct ivas_spar_dec_matrices_t +{ + float ***C_re; + float ***P_re; + +} ivas_spar_dec_matrices_t; + +typedef struct ivas_spar_foa_md_dec_state_t +{ + ivas_spar_md_t spar_md; + ivas_spar_md_prev_t spar_md_prev; + ivas_spar_dec_matrices_t spar_coeffs; + ivas_spar_dec_matrices_t spar_coeffs_prev; + ivas_spar_dec_matrices_t spar_coeffs_tar; + int16_t dtx_md_smoothing_cntr; + int16_t valid_bands[IVAS_MAX_NUM_BANDS]; + int16_t base_band_age[IVAS_MAX_NUM_BANDS]; + int16_t spar_plc_num_lost_frames; + int16_t num_decorr; + int16_t td_decorr_flag; + int16_t spar_plc_enable_fadeout_flag; + float ***mixer_mat; + /*TODO : reuse hFbMixer->prior_mixer for this as that buffer is unused in decoder with FB_HARMONIZATION*/ + float mixer_mat_prev[MAX_PARAM_SPATIAL_SUBFRAMES + 1][IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH][IVAS_MAX_NUM_BANDS]; + ivas_spar_foa_md_com_cfg spar_md_cfg; + ivas_arith_coeffs_t arith_coeffs; + ivas_huff_coeffs_t huff_coeffs; + int16_t table_idx; + int16_t dtx_vad; + +} ivas_spar_foa_md_dec_state_t; + + +/* AGC structure */ +typedef struct ivas_agc_dec_chan_state_t +{ + float lastGain; + int16_t gainExpVal; + +} ivas_agc_dec_chan_state_t; + +typedef struct ivas_agc_dec_state_t +{ + ivas_agc_com_state_t agc_com; + ivas_agc_dec_chan_state_t *gain_state; + ivas_agc_chan_data_t *gain_data; + +} ivas_agc_dec_state_t; + +/* TD decorr */ +typedef struct ivas_td_decorr_APD_filt_state_t +{ + int16_t order[IVAS_MAX_DECORR_APD_SECTIONS]; + int16_t idx[IVAS_MAX_DECORR_APD_SECTIONS]; + float coeffs[IVAS_MAX_DECORR_APD_SECTIONS]; + float *state[IVAS_MAX_DECORR_APD_SECTIONS]; + +} ivas_td_decorr_APD_filt_state_t; + +typedef struct ivas_td_decorr_state_t +{ + ivas_trans_det_state_t *pTrans_det; + float *look_ahead_buf; + ivas_td_decorr_APD_filt_state_t APD_filt_state[IVAS_MAX_DECORR_CHS]; + + int16_t num_apd_outputs; + int16_t num_apd_sections; + int16_t ducking_flag; + +} ivas_td_decorr_state_t; + +/* PCA structure */ +typedef struct +{ + float prev_ql[IVAS_PCA_INTERP]; + float prev_qr[IVAS_PCA_INTERP]; + int16_t prev_pca_bypass; + float mem_eigVec_interp[IVAS_PCA_LEN_INTERP_EIG_DEC]; + /* parser output: */ + int16_t pca_bypass; + int32_t index[2]; + +} PCA_DEC_STATE; + +/* SPAR FOA structures */ +typedef struct ivas_spar_foa_dec_state_t +{ + ivas_td_decorr_state_t *hTdDecorr; + ivas_spar_foa_md_dec_state_t *hMdDec; + IVAS_FB_MIXER_HANDLE hFbMixer; + int16_t AGC_flag; + ivas_agc_dec_state_t *hAgcDec; + PCA_DEC_STATE *hPCA; + int16_t dirac_to_spar_md_bands[DIRAC_MAX_NBANDS]; + int16_t enc_param_start_band; + + int32_t core_nominal_brate; /* Nominal bitrate for core coding */ + int32_t i_subframe; +} ivas_spar_foa_dec_state_t; + +/* main SPAR decoder structure */ +typedef struct ivas_spar_dec_lib_t +{ + ivas_spar_foa_dec_state_t *hSparFoa; + +} SPAR_DEC_DATA, *SPAR_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * SCE decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct sce_dec_data_structure +{ + int16_t sce_id; /* SCE # identifier */ + int32_t element_brate; /* SCE total bitrate in bps */ + int32_t last_element_brate; /* SCE last total bitrate in bps */ + + /* core coder handle */ + DEC_CORE_HANDLE hCoreCoder[1]; + + float prev_hb_synth[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; /* HB synthesis synchro buffer */ + + float *save_synth; + float *save_hb_synth; + +} SCE_DEC_DATA, *SCE_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * CPE decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct cpe_dec_data_structure +{ + int16_t cpe_id; /* CPE # identifier */ + int32_t element_brate; /* CPE element total bitrate in bps */ + int32_t last_element_brate; /* last CPE element total bitrate in bps */ + + int16_t element_mode; /* element mode, in CPE it can be IVAS_CPE_DFT, IVAS_CPE_TD or IVAS_CPE_MDCT */ + int16_t last_element_mode; /* last element mode */ + + int16_t stereo_switching_counter; + int16_t NbFrameMod; + float lt_es_em; + + /* core coder handle */ + DEC_CORE_HANDLE hCoreCoder[CPE_CHANNELS]; + + /* stereo data handles */ + STEREO_DFT_DEC_DATA_HANDLE hStereoDft; /* DFT stereo data structure */ + STEREO_DFT_DMX_DATA_HANDLE hStereoDftDmx; /* DFT stereo DMX decoder structure */ + STEREO_TD_DEC_DATA_HANDLE hStereoTD; /* TD stereo data structure */ + STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct; /* MDCT stereo data structure */ + STEREO_TCA_DEC_HANDLE hStereoTCA; /* Stereo ICA data handle */ + STEREO_ICBWE_DEC_HANDLE hStereoICBWE; /* Stereo inter-channel BWE data handle */ + STEREO_CNG_DEC_HANDLE hStereoCng; /* Stereo CNG data structure */ + + int16_t nchan_out; /* number of output channels (1: mono dmx, 2: default stereo) */ + + float prev_hb_synth[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; + float prev_synth[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS )]; + + /* DFT stereo I/O channel buffer memories that need to be updated for TD->DFT stereo switching */ + float *input_mem[CPE_CHANNELS]; + float *input_mem_LB[CPE_CHANNELS]; + float *input_mem_BPF[1]; + float *output_mem[CPE_CHANNELS]; + float *prev_synth_chs[CPE_CHANNELS]; + + /* buffers used for fading between MDCT and DFT Stereo */ + float old_out_mdct[STEREO_MDCT2DFT_FADE_LEN_48k]; + float old_outLB_mdct[2 * STEREO_MDCT2DFT_FADE_LEN_48k]; + +} CPE_DEC_DATA, *CPE_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * MCT decoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct mct_dec_block_data_struct +{ + int16_t ch1, ch2; + int16_t mask[2][MAX_SFB]; + STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct; /* MDCT stereo data handle */ + +} MCT_DEC_BLOCK_DATA, *MCT_DEC_BLOCK_DATA_HANDLE; + +typedef struct mct_dec_data_structure +{ + int16_t nchan_out_woLFE; /* number of active channels within multi-channel configuration */ + int16_t currBlockDataCnt; + int16_t bitsChannelPairIndex; /* bits needed to code channel pair index, depends on number of active channels */ + MCT_DEC_BLOCK_DATA_HANDLE hBlockData[MCT_MAX_BLOCKS]; + + int16_t chBitRatios[MCT_MAX_CHANNELS]; + int16_t lowE_ch[MCT_MAX_CHANNELS]; /* note: pointer to local parameter */ + int16_t LFE_off; + uint16_t mc_global_ild[MCT_MAX_CHANNELS]; /* note: pointer to local parameter */ + int16_t num_lfe; + +} MCT_DEC_DATA, *MCT_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * EFAP structures + *----------------------------------------------------------------------------------*/ + +typedef struct EFAP_VERTEX +{ + float azi; /* azimuth of the loudspeaker */ + float ele; /* elevation of the loudspeaker */ + float pos[3]; /* [x y z] cartesian coordinate vector */ + int16_t idx; /* integer, that corresponds to the first index for the LS in the 1D output */ + int16_t isNaN; /* used to indicate if the vertex is a virtual speaker */ + EFAP_VTX_DMX_TYPE dmxType; /* virtual speaker downmix type */ +} EFAP_VERTEX; + +typedef struct EFAP_VERTEX_DATA +{ + EFAP_VERTEX *vertexArray; /* Array of vertices */ + int16_t numVtx; /* Number of vertices */ + int16_t *vtxOrder; /* Array that indicates the order of the vertex ranked by increasing azimuth */ + +} EFAP_VERTEX_DATA; + +typedef struct EFAP_POLYSET +{ + int16_t chan[EFAP_MAX_CHAN_NUM]; /* An array indicating the loudspeaker index of the polygon vertices */ + int16_t isNaN[EFAP_MAX_CHAN_NUM]; /* Indicates if one of the vertices isNaN */ + int16_t numChan; /* An integer between 0 and EFAP_MAX_CHAN_NUM corresponding to the number of vertices of the polygon */ + float polyAzi[EFAP_MAX_CHAN_NUM]; /* An array (same length as "chan"), with the azimuth of the channels */ + float polyEle[EFAP_MAX_CHAN_NUM]; /* An array (same length as "chan"), with the elevation of the channels */ + +} EFAP_POLYSET; + +typedef struct EFAP_LS_TRIANGLE +{ + int16_t LS[3]; /* Array indicating the loudspeaker index of the triangle vertices */ + +} EFAP_LS_TRIANGLE; + +typedef struct EFAP_POLYSET_DATA +{ + EFAP_POLYSET polysetArray[EFAP_MAX_POLY_SET]; /* Array of polygons */ + int16_t numPoly; /* Number of polygons */ + EFAP_LS_TRIANGLE triArray[EFAP_MAX_POLY_SET]; /* Array of triangles */ + int16_t numTri; /* Number of triangles */ + +} EFAP_POLYSET_DATA; + +typedef struct EFAP +{ + int16_t numSpk; /* Number of loudspeakers */ + float *aziSpk; /* Loudspeaker azimuths */ + float *eleSpk; /* Loudspeaker elevations */ + EFAP_VERTEX_DATA vtxData; /* Vertex Data, contains all the data concerning the vertex */ + EFAP_POLYSET_DATA polyData; /* Polygon data */ + float **dmTranspose; /* Downmix Matrix used for redistributing the energy of ghosts LS and its transpose */ + float *bufferLong; /* tmp buffer that will be given as a parameter for computing the gain; this is a 1D array of length numVtx */ + float *bufferShort; /* tmp buffer that will be given as a parameter for computing the gain; this is the result of downMixMatrix*bufferLong, length is numSpk */ + int16_t numTot; /* Total number of real + ghost loudspeakers, used later for freeing memory */ + +} EFAP, *EFAP_HANDLE; + +/*----------------------------------------------------------------------------------* + * VBAP structures + *----------------------------------------------------------------------------------*/ + +enum SpeakerNodeGroup +{ + SPEAKER_NODE_BOTTOM_HALF, + SPEAKER_NODE_HORIZONTAL, + SPEAKER_NODE_TOP_HALF, + SPEAKER_NODE_BACK, + SPEAKER_NODE_ALL +}; + +/* Defines a single virtual surface triplet of loudspeakers + * with a precalculated inverse matrix */ +typedef struct vbap_vs_triplet_structure +{ + uint8_t speaker_node[3]; + float inverse_matrix[3][3]; + +} VBAP_VS_TRIPLET; + +/* Defines a single speaker node */ +typedef struct vbap_speaker_node_structure +{ + float azi_deg; + float ele_deg; + float unit_vec[3]; + enum SpeakerNodeGroup group; + +} VBAP_SPEAKER_NODE; + +/* Storage structure for fast runtime triplet search */ +typedef struct triplet_search_structure +{ + VBAP_VS_TRIPLET *triplets; + int16_t num_triplets; + int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS]; + +} VBAP_SEARCH_STRUCT; + +/* VBAP data structure. Contains the formed virtual surface arrangement * and supporting data. */ +typedef struct vbap_data_structure +{ + VBAP_SEARCH_STRUCT search_struct[2]; /* Default to max two groups in this implementation */ + int16_t num_search_structs; + int16_t num_speaker_nodes; + int16_t num_speaker_nodes_internal; + int16_t top_virtual_speaker_node_index; /* These indices can be negative */ + int16_t bottom_virtual_speaker_node_index; + int16_t back_virtual_speaker_node_index; + float *bottom_virtual_speaker_node_division_gains; + float *top_virtual_speaker_node_division_gains; + float *back_virtual_speaker_node_division_gains; + +} VBAP_DATA, *VBAP_HANDLE; + + +/*----------------------------------------------------------------------------------* + * renderer structures + *----------------------------------------------------------------------------------*/ + +typedef struct renderer_struct +{ + float prev_gains[MAX_CICP_CHANNELS - 1][MAX_OUTPUT_CHANNELS]; + float interpolator[L_FRAME48k]; + +} ISM_RENDERER_DATA, *ISM_RENDERER_HANDLE; + +/*----------------------------------------------------------------------------------* + * Loudspeaker Configuration Conversion structure + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_LS_setupconversion_struct +{ + float *dmxMtx[MAX_OUTPUT_CHANNELS]; + float *targetEnergyPrev[MAX_OUTPUT_CHANNELS]; + float *dmxEnergyPrev[MAX_OUTPUT_CHANNELS]; + int16_t sfbOffset[MAX_SFB + 2]; + int16_t sfbCnt; + +} LSSETUP_CONVERSION_STRUCT, *LSSETUP_CONVERSION_HANDLE; + + +typedef struct ivas_LS_setupconversion_matrix +{ + int16_t index; + float value; +} LS_CONVERSION_MATRIX; + +typedef struct ivas_LS_setupconversion_mapping +{ + AUDIO_CONFIG input_config; + AUDIO_CONFIG output_config; + const LS_CONVERSION_MATRIX *conversion_matrix; +} LS_CONVERSION_MAPPING; + +typedef struct ivas_mono_downmix_renderer_struct +{ + float inputEnergy[CLDFB_NO_CHANNELS_MAX]; + float protoEnergy[CLDFB_NO_CHANNELS_MAX]; + +} MONO_DOWNMIX_RENDERER_STRUCT, *MONO_DOWNMIX_RENDERER_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Custom Loudspeaker configuration structure + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_LS_setup_custom +{ + int16_t is_planar_setup; /* flag to indicate if setup is planar or not */ + int16_t num_spk; /* number of custom loudspeakers */ + float ls_azimuth[MAX_OUTPUT_CHANNELS]; /* custom loudspeaker azimuths */ + float ls_elevation[MAX_OUTPUT_CHANNELS]; /* custom loudspeaker elevations */ + int16_t num_lfe; /* number of LFE channels */ + int16_t lfe_idx[MAX_OUTPUT_CHANNELS]; /* index for LFE channel insertion */ + int16_t separate_ch_found; /* flag to indicate if a center channel was found */ + float separate_ch_gains[MAX_OUTPUT_CHANNELS]; /* gains to pan McMASA separateChannel in case no center channel is present */ + +} LSSETUP_CUSTOM_STRUCT, *LSSETUP_CUSTOM_HANDLE; + + +/*----------------------------------------------------------------------------------* + * MASA decoder structures + *----------------------------------------------------------------------------------*/ + +/* McMASA LFE synthesis structure */ +typedef struct ivas_mcmasa_lfe_synth_struct +{ + float lfeToTotalEnergyRatio[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t lfeGainPrevIndex; + float transportEneSmooth; + float protoLfeEneSmooth; + float targetEneLfeSmooth; + float targetEneTransSmooth; + + float *lfeSynthRingBuffer; + int16_t ringBufferLoPointer; + int16_t ringBufferHiPointer; + float lowpassSum; + int16_t ringBufferSize; + + float *lfeSynthRingBuffer2; + int16_t ringBufferLoPointer2; + float lowpassSum2; + int16_t ringBufferSize2; + + float *delayBuffer_syncLp; + int16_t delayBuffer_syncLp_size; + + float *delayBuffer_syncDirAC; + int16_t delayBuffer_syncDirAC_size; + + float lfeGainPrev; + float transportGainPrev; + float interpolator[CLDFB_NO_CHANNELS_MAX]; + +} MCMASA_LFE_SYNTH_DATA, *MCMASA_LFE_SYNTH_DATA_HANDLE; + +typedef struct ivas_masa_decoder_data_struct +{ + int16_t band_mapping[MASA_FREQUENCY_BANDS + 1]; + SPHERICAL_GRID_DATA *sph_grid16; + + float dir_decode_quality; + +} MASA_DECODER_DATA; + +typedef struct ivas_masa_decoder_struct +{ + MASA_CODEC_CONFIG config; /* Configuration of MASA decoding */ + MASA_DECODER_DATA data; /* Data storage for MASA decoding */ + MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth; /* LFE synthesis structure for McMASA */ + +} MASA_DECODER, *MASA_DECODER_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Binaural Rendering structure + *----------------------------------------------------------------------------------*/ + +/* Binaural reverberator structure */ +typedef struct ivas_binaural_reverb_struct +{ + float *loopBufReal[CLDFB_NO_CHANNELS_MAX]; + float *loopBufImag[CLDFB_NO_CHANNELS_MAX]; + float preDelayBufferReal[REVERB_PREDELAY_MAX + 1][CLDFB_NO_CHANNELS_MAX]; + float preDelayBufferImag[REVERB_PREDELAY_MAX + 1][CLDFB_NO_CHANNELS_MAX]; + float **tapPointersReal[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; + float **tapPointersImag[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; + + float binauralCoherenceCrossmixGains[CLDFB_NO_CHANNELS_MAX]; + float binauralCoherenceDirectGains[CLDFB_NO_CHANNELS_MAX]; + float reverbEqGains[CLDFB_NO_CHANNELS_MAX]; + float loopAttenuationFactor[CLDFB_NO_CHANNELS_MAX]; + + float *outputBufferReal[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; + float *outputBufferImag[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; + + int16_t numBins; + + int16_t useBinauralCoherence; + int16_t loopBufLength[CLDFB_NO_CHANNELS_MAX]; + int16_t loopBufLengthMax[CLDFB_NO_CHANNELS_MAX]; + int16_t preDelayBufferIndex; + int16_t preDelayBufferLength; + + int16_t taps[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; + int16_t *tapPhaseShiftType[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; + + int16_t blockSize; + uint32_t binRend_RandNext; + int16_t highestBinauralCoherenceBin; + + float dmxmtx[BINAURAL_CHANNELS][MAX_OUTPUT_CHANNELS]; + float foa_enc[MAX_OUTPUT_CHANNELS][FOA_CHANNELS]; + +} REVERB_STRUCT, *REVERB_STRUCT_HANDLE; + +/* Parametric binaural data structure */ +typedef struct ivas_dirac_dec_binaural_data_structure +{ + float ChEnePrev[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float ChCrossRePrev[CLDFB_NO_CHANNELS_MAX]; + float ChCrossImPrev[CLDFB_NO_CHANNELS_MAX]; + float ChEne[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float ChCrossRe[CLDFB_NO_CHANNELS_MAX]; + float ChCrossIm[CLDFB_NO_CHANNELS_MAX]; + float ChEneOutPrev[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float ChCrossReOutPrev[CLDFB_NO_CHANNELS_MAX]; + float ChCrossImOutPrev[CLDFB_NO_CHANNELS_MAX]; + float ChEneOut[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float ChCrossReOut[CLDFB_NO_CHANNELS_MAX]; + float ChCrossImOut[CLDFB_NO_CHANNELS_MAX]; + float processMtxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS + 1][CLDFB_NO_CHANNELS_MAX]; /* +1 refers to SeparateChannel */ + float processMtxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS + 1][CLDFB_NO_CHANNELS_MAX]; + float processMtxDecRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float processMtxDecIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float diffuseFieldCoherence[CLDFB_NO_CHANNELS_MAX]; + float diffuseFieldCoherenceX[BINAURAL_COHERENCE_DIFFERENCE_BINS]; + float diffuseFieldCoherenceY[BINAURAL_COHERENCE_DIFFERENCE_BINS]; + float diffuseFieldCoherenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS]; + float earlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; + REVERB_STRUCT_HANDLE hReverb; + uint8_t renderStereoOutputInsteadOfBinaural; + float frameMeanDiffuseness[CLDFB_NO_CHANNELS_MAX]; + float processMtxRePrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS + 1][CLDFB_NO_CHANNELS_MAX]; + float processMtxImPrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS + 1][CLDFB_NO_CHANNELS_MAX]; + float processMtxDecRePrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float processMtxDecImPrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + uint16_t useSubframeMode; /* 0 = process in 20 ms frames, 1 = process in 5 ms subframes */ + uint16_t useTdDecorr; + ivas_td_decorr_state_t *hTdDecorr; + +} DIRAC_DEC_BIN_DATA, *DIRAC_DEC_BIN_HANDLE; + +typedef struct ivas_binaural_rendering_conv_module_struct +{ + const float *filterTapsLeftReal[CLDFB_NO_CHANNELS_MAX][MAX_OUTPUT_CHANNELS]; + const float *filterTapsLeftImag[CLDFB_NO_CHANNELS_MAX][MAX_OUTPUT_CHANNELS]; + const float *filterTapsRightReal[CLDFB_NO_CHANNELS_MAX][MAX_OUTPUT_CHANNELS]; + const float *filterTapsRightImag[CLDFB_NO_CHANNELS_MAX][MAX_OUTPUT_CHANNELS]; + + float filterStatesLeftReal[BINAURAL_CONVBANDS][MAX_OUTPUT_CHANNELS][BINAURAL_NTAPS_MAX]; + float filterStatesLeftImag[BINAURAL_CONVBANDS][MAX_OUTPUT_CHANNELS][BINAURAL_NTAPS_MAX]; + + int16_t numTapsArray[BINAURAL_CONVBANDS]; + int16_t numTaps; + +} BINRENDERER_CONV_MODULE, *BINRENDERER_CONV_MODULE_HANDLE; + +/* Fastconv binaural data structure */ +typedef struct ivas_binaural_rendering_struct +{ + /* Common variables for all modules */ + IVAS_OUTPUT_SETUP_HANDLE hInputSetup; /* pointer to input spatial format for binaural renderer*/ + EFAP_HANDLE hEFAPdata; /* EFAP structure*/ + float *hoa_dec_mtx; /* pointer to hoa decoder mtx */ + int8_t rotInCldfb; /* Flag to enable rotation within bin Renderer in CLDFB*/ + int16_t max_band; /* band upto which rendering is performed */ + int16_t conv_band; /* band upto which convolution in cldfb domain is performed */ + int16_t timeSlots; /* number of time slots of binaural renderer */ + int16_t nInChannels; /* number input channels */ + int8_t render_lfe; /* Flag to render LFE in binaural rendering*/ + IVAS_FORMAT ivas_format; /* format; corresponds to st_ivas->ivas_format, unless the signal gets transormed to a different domain for rendering */ + + /* Convolution module structure */ + BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; + + /* Variables related to reverb module */ + float earlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; + REVERB_STRUCT_HANDLE hReverb; + +} BINAURAL_RENDERER, *BINAURAL_RENDERER_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Head tracking data structure + *----------------------------------------------------------------------------------*/ + +/* Quaternion type for head orientation */ +typedef struct Quaternion_struct +{ + float w, x, y, z; + +} Quaternion; + +typedef struct ivas_binaural_head_track_struct +{ + int16_t num_quaternions; + Quaternion Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES]; + float Rmat[3][3]; + float Rmat_prev[3][3]; + + uint8_t lrSwitchedNext; + uint8_t lrSwitchedCurrent; + float lrSwitchInterpVal; + + int16_t shd_rot_max_order; + +} HEAD_TRACK_DATA, *HEAD_TRACK_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * TD ISm Object Renderer structure + *----------------------------------------------------------------------------------*/ + +typedef struct +{ + SFX_OpMode_t OpMode; /* Operating mode. This effect can only be TRANSIENT or OFF. */ + int16_t TurningOffEffect; /* Flag showing if the effect is being turned off. */ + int16_t TurningOnEffect; /* Flag showing if the effect is being turned on. */ + int16_t InitializeParams; /* Flag showing if parameters should be initialized the next SetParam call. */ + int16_t FirstUpdate; /* Flag showing if it SetParams has only been called once (TRUE) or more (FALSE). */ + + int32_t TotNoOfOutputSamples; /* The total number of output samples produced since last SetParam call. */ + int32_t MaxTargetTime; /* The maximum allowed target time. Also used for turning the effect on or off. */ + int32_t MaxBlockLength; /* The maximum block length */ + + int16_t TargetTime; /* Time left until the parameters should have reached the new parameters values. */ + float ItdIncrForResampling; /* Resampling factor for adjusting the ITD. */ + float *LeftOldBuffer; /* Buffer with old samples for the Resampling function */ + int16_t NoOfLeftOldBufferSamples; /* Number of samples in LeftOldBuffer */ + float Left_Tf; /* The left fractional delay. */ + float *RightOldBuffer; /* Buffer with old samples for the Resampling function */ + int16_t NoOfRightOldBufferSamples; /* Number of samples in RightOldBuffer */ + float ResampledBufferLeft[SFX_SPAT_BIN_MAX_NO_OF_OUTPUT_SAMPLES + SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1]; /* Buffers getting the resampled output and having the old samples used for HR-filtering */ + float ResampledBufferRight[SFX_SPAT_BIN_MAX_NO_OF_OUTPUT_SAMPLES + SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1]; + int16_t TransientTime; /* Transient time when turning off the effect */ + + int16_t FilterLength; /* HR-filter length */ + + /* HR-filters */ + float *LeftFilter_p; /* Pointer to left filter */ + float *LeftFilterIncr_p; /* Left filter adjustment step */ + float *RightFilter_p; /* Pointer to right filter */ + float *RightFilterIncr_p; /* Right filter adjustment step */ + +#ifdef TDREND_HRTF_TABLE_METHODS + int16_t HrFilterInterpOn; /* Indicates whether to interpolate filter from previous frame */ + float LeftFilterStored[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; /* Stored previous filter for interpolation */ + float RightFilterStored[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; /* Stored previous filter for interpolation */ +#endif + +} SFX_SpatBin_t; + +/* Container struct for setting new parameters in SFX_SpatBin */ +typedef struct +{ + int16_t TurnOn; + int16_t Reset; + /* Rendering parameters */ + float Itd; + int16_t FilterLength; + float *LeftFilter_p; + float *RightFilter_p; + float LeftVolume; + float RightVolume; + +} SFX_SpatBin_Params_t; + +typedef struct TDREND_LIST_Item_s +{ + int16_t Ind; /* Index number of item */ + void *Data_p; /* Pointer to the item data struct */ + struct TDREND_LIST_Item_s *Prev_p; /* Pointer to the prev item */ + struct TDREND_LIST_Item_s *Next_p; /* Pointer to the next item */ + +} TDREND_LIST_Item_t; + + +typedef struct +{ + int16_t modelROM; /* Flag that indicates that the model resides in ROM (controls init/dealloc). */ + int16_t UseItdModel; /* Controls whether ITD model is used. */ + int16_t SplineDegree; /* Degree of the spline functions */ + int16_t K; /* Length of filter */ + int16_t elevDim2; + int16_t elevDim3; + int16_t AlphaN; /* Number of rows in Alpha matrices */ + int16_t num_unique_azim_splines; + int16_t elevSegSamples; + + int16_t elevBsLen[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + int16_t elevBsStart[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + const int16_t *azimDim2; + const int16_t *azimDim3; + const int16_t *azim_start_idx; + const int16_t *azimSegSamples; + const int16_t *azimShapeIdx; + const int16_t *azimShapeSampFactor; + + const float *elevKSeq; /* Array, N x elevDim2 x elevDim3 */ + const float *AlphaL; /* Array, size AlphaN x K */ + const float *AlphaR; /* Array, size AlphaN x K */ + const float *elevBsShape; + float **azimKSeq; /* Array, length azimDim3+1 */ + const float **azimBsShape; + + int16_t azimDim3Max; + int16_t iSecFirst[HRTF_MODEL_N_SECTIONS]; /* Indices for start of sections */ + int16_t iSecLast[HRTF_MODEL_N_SECTIONS]; /* Indices for end of sections */ + const float *EL; /* Array, size (AlphaN*HRTF_MODEL_N_SECTIONS) */ + const float *ER; /* Array, size (AlphaN*HRTF_MODEL_N_SECTIONS) */ + + /* Pointers for allocation of dynamic memory */ + float *AlphaL_dyn; + float *AlphaR_dyn; + float *EL_dyn; + float *ER_dyn; + float *elevBsShape_dyn; + float *elevKSeq_dyn; + int16_t *azimDim2_dyn; + int16_t *azimDim3_dyn; + int16_t *azim_start_idx_dyn; + int16_t *azimSegSamples_dyn; + int16_t *azimShapeIdx_dyn; + int16_t *azimShapeSampFactor_dyn; + float **azimBsShape_dyn; + +} ModelParams_t; + +typedef struct +{ + int16_t N; /* Polynomial degree */ + + int16_t elevDim2; + int16_t elevDim3; + const float *elevKSeq; /* Array, length elevDim3-2 */ + int16_t azimDim2; + int16_t azimDim3; + const float *azimKSeq; /* Array, length azimDim3-2 */ + const float *W; /* Array, size (elevDim3*azimDim3) x K */ + + int16_t azimBsLen[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + int16_t azimBsStart[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + const float *azimBsShape; + int16_t azimSegSamples; + + int16_t elevBsLen[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + int16_t elevBsStart[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + const float *elevBsShape; + int16_t elevSegSamples; + float resamp_factor; + + /* Pointers for allocation of dynamic memory */ + float *elevKSeq_dyn; + float *azimKSeq_dyn; + float *W_dyn; + float *azimBsShape_dyn; + float *elevBsShape_dyn; +} ModelParamsITD_t; + +typedef struct +{ + float val; + int16_t i; + +} ValueIndex_t; + +/* Shared memory for use when evaluating BSpline HR filter model*/ +typedef struct +{ + float BM[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + ValueIndex_t BMEnergiesL[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + ValueIndex_t BMEnergiesR[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + int16_t UseIndsL[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + int16_t UseIndsR[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + float *hrfModL; + float *hrfModR; + float elevBfVec[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + float azimBfVec[HRTF_MODEL_BSPLINE_NUM_COEFFS][HRTF_MODEL_BSPLINE_NUM_COEFFS]; + float BM_ITD[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; + float elevBfVecITD[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + float azimBfVecITD[HRTF_MODEL_BSPLINE_NUM_COEFFS]; + float itdMod; + +} ModelEval_t; + +/* Mixer listener */ +typedef struct +{ + int16_t PoseUpdated; + float Pos[3]; + float Front[3]; + float Up[3]; + float Right[3]; + + int16_t VelUpdated; + float Vel[3]; + +} TDREND_MIX_Listener_t; + +/* HR filter */ +typedef struct TDREND_HRFILT_FiltSet_struct +{ + int32_t SampleRate; /* Sample rate of the HR filter */ + int16_t NumPos; + int16_t NumElev; + float Dist; + float *ItdSet_p; + int16_t FiltLength; + float *Azim_p; + float *Elev_p; + float *ItdSetNominal_p; + float *LeftFiltSet_p; + float *RightFiltSet_p; +#ifdef TDREND_HRTF_TABLE_METHODS + int16_t *AzimStartIdx_p; + int16_t *NumAzim_p; + float *ElevFull_p; + float ElevIncr; +#endif + ModelParams_t ModelParams; + ModelEval_t ModelEval; + ModelParamsITD_t ModelParamsITD; + TDREND_HRFILT_Method_t FilterMethod; /* HR filtering method */ + +} TDREND_HRFILT_FiltSet_t; + + +/* Distance attenuation */ +typedef struct +{ + TDREND_DistAttenModel_t DistAttenModel; + float RefDist; + float MaxDist; + float RollOffFactor; + +} TDREND_DistAtten_t; + +/* Directional attenuation */ +typedef struct +{ + float ConeInnerAngle; + float ConeOuterAngle; + float ConeOuterGain; + +} TDREND_DirAtten_t; + +/* Mixer spatial specification */ +typedef struct +{ + int16_t UseCommonDistAttenModel; /* Common distance attenuation model flag */ + TDREND_DistAttenModel_t DistAttenModel; /* Distance attenuation model */ + +} TDREND_MixSpatSpec_t; + + +typedef struct TDREND_SRC_REND_s +{ + int16_t InputAvailable; + TDREND_PlayStatus_t PlayStatus; + + /* Gains */ + int16_t SrcGainUpdated; + float SrcGain_p[SPAT_BIN_MAX_INPUT_CHANNELS]; + float SrcGainMin_p[SPAT_BIN_MAX_INPUT_CHANNELS]; + float SrcGainMax_p[SPAT_BIN_MAX_INPUT_CHANNELS]; + float DirGain_p[SPAT_BIN_MAX_INPUT_CHANNELS]; + float DistGain_p[SPAT_BIN_MAX_INPUT_CHANNELS]; + + /* HR filtering parameters */ + SFX_SpatBin_t *SfxSpatBin_p; + +} TDREND_SRC_REND_t; + + +/* Source spatial parameters */ +typedef struct +{ + int16_t Updated; + TDREND_PosType_t PosType; + float Pos_p[3 * SPAT_BIN_MAX_INPUT_CHANNELS]; + float Front_p[3 * SPAT_BIN_MAX_INPUT_CHANNELS]; + int16_t DirAttenEnabled; + TDREND_DirAtten_t DirAtten; + int16_t DistAttenEnabled; + TDREND_DistAtten_t DistAtten; + +} TDREND_SRC_SPATIAL_t; + +typedef struct +{ + float *InputFrame_p; /* Input frame pointer */ + TDREND_SRC_SPATIAL_t *SrcSpatial_p; + TDREND_SRC_REND_t *SrcRend_p; + +} TDREND_SRC_t; + +/* Top level TD binaural renderer handle */ +typedef struct ivas_binaural_td_rendering_struct +{ + TDREND_MixSpatSpec_t *TdRend_MixSpatSpec_p; + TDREND_DirAtten_t *DirAtten_p; + int16_t NumOfSrcs; + int16_t MaxSrcInd; + + TDREND_SRC_t *Sources[MAX_NUM_TDREND_CHANNELS]; + + float Gain; /* Mixer gain */ + TDREND_MIX_Listener_t *Listener_p; /* The virtual listener */ + TDREND_HRFILT_FiltSet_t *HrFiltSet_p; /* HR filter set */ + + int16_t UseCommonDistAttenModel; /* Use common dist atten model (TRUE/FALSE) */ + int16_t DistAttenEnabled; /* (TRUE/FALSE) */ + TDREND_DistAttenModel_t DistAttenModel; /* Common distance attenuation model */ + +} BINAURAL_TD_OBJECT_RENDERER, *BINAURAL_TD_OBJECT_RENDERER_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * Crend structures + *------------------------------------------------------------------------------------------*/ + +typedef struct ivas_hrtfs_structure +{ + float *pOut_to_bin_re[IVAS_MAX_NUM_CH][BINAURAL_CHANNELS]; + float *pOut_to_bin_im[IVAS_MAX_NUM_CH][BINAURAL_CHANNELS]; + float *pOut_to_bin_diffuse_re[BINAURAL_CHANNELS]; + float *pOut_to_bin_diffuse_im[BINAURAL_CHANNELS]; + float latency_s; + uint16_t num_iterations[IVAS_MAX_NUM_CH][BINAURAL_CHANNELS]; + uint16_t num_iterations_diffuse[BINAURAL_CHANNELS]; + uint16_t *pIndex_frequency_max[IVAS_MAX_NUM_CH][BINAURAL_CHANNELS]; + uint16_t *pIndex_frequency_max_diffuse[BINAURAL_CHANNELS]; + uint16_t index_frequency_max_diffuse; + int16_t max_num_ir; + int16_t max_num_iterations; + float inv_diffuse_weight[IVAS_MAX_NUM_CH]; /* inverse diffuse weights array, access one inverse weight by pInvDiffuseWeight[channel] */ + float gain_lfe; + +} HRTFS_DATA, *HRTFS_HANDLE; + +/* Reverberator structures */ + + +typedef struct ivas_roomAcoustics_t +{ + int16_t override; + int16_t use_brir; + int16_t late_reverb_on; + int16_t nBands; /* Number of frequency bands for which reverb properties are provided, integer, range [2..256] */ + float pFc_input[CLDFB_NO_CHANNELS_MAX]; /* Center frequencies for which following values are provided: */ + float pAcoustic_rt60[CLDFB_NO_CHANNELS_MAX]; /* - The room's T60 per center frequency */ + float pAcoustic_dsr[CLDFB_NO_CHANNELS_MAX]; /* - The room's Diffuse to Source Ratio per center frequency */ + float acousticPreDelay; /* Time elapsed between input signal and late reverberation start, float, range [0.001..10] */ + float inputPreDelay; /* Offset in seconds from where DSR is computed in the RIR (0 = at source), float, range [0.001..10] */ +} ivas_roomAcoustics_t; + +typedef struct ivas_render_config_t +{ +#ifdef DEBUGGING + ivas_renderTypeOverride renderer_type_override; +#endif + ivas_roomAcoustics_t roomAcoustics; +} RENDER_CONFIG_DATA, *RENDER_CONFIG_HANDLE; + + +typedef struct ivas_rev_delay_line_t +{ + float *pBuffer; + uint16_t MaxDelay; + int16_t Delay; + uint16_t BufferPos; + float Gain; + +} ivas_rev_delay_line_t; + +typedef struct ivas_rev_iir_filter_t +{ + uint16_t MaxTaps; + uint16_t nr_taps; + uint16_t isFIR; + float Output; + float CoefA[IVAS_REV_MAX_IIR_FILTER_LENGTH]; + float CoefB[IVAS_REV_MAX_IIR_FILTER_LENGTH]; + float pBuffer[IVAS_REV_MAX_IIR_FILTER_LENGTH]; + +} ivas_rev_iir_filter_t; + + +typedef float rv_fftwf_type_complex[2]; /* complex type of fftwf library */ + +/* Convertion block for FFT filter: from time domain to frequency domain (with OLS) and back */ +typedef struct ivas_reverb_t2f_f2t_t +{ + int16_t fft_size; + int16_t log2_fft_size; + int16_t block_size; + int16_t hist_size; /* rv_fft_size - rv_block_size */ + float fft_history_L[RV_FILTER_MAX_HISTORY]; + float fft_history_R[RV_FILTER_MAX_HISTORY]; + +} ivas_reverb_t2f_f2t_t; + +/* FFT filter with its frequency response coefficients */ +typedef struct ivas_reverb_fft_filter_t +{ + int16_t fft_size; + float fft_spectrum[RV_FILTER_MAX_FFT_SIZE]; + +} ivas_reverb_fft_filter_t; + + +typedef struct ivas_reverb_state_t +{ + RENDER_CONFIG_DATA pConfig; + + /* input downmixer: */ + float dmx_gain; /* downmix gain */ + + /* predelay: */ + ivas_rev_delay_line_t predelay_line; + float *pPredelay_buffer; + + /* jot reverberator: */ + uint16_t nr_of_branches; /* number of feedback loops */ + ivas_rev_delay_line_t delay_line[IVAS_REV_MAX_NR_BRANCHES]; /* feedback loop delays */ + float *loop_delay_buffer[IVAS_REV_MAX_NR_BRANCHES]; /* feedback loop delay sample buffers */ + ivas_rev_iir_filter_t t60[IVAS_REV_MAX_NR_BRANCHES]; /* feedback loop filters */ + float gain_matrix[IVAS_REV_MAX_NR_BRANCHES][IVAS_REV_MAX_NR_BRANCHES]; /* feedback matrix */ + float mixer[BINAURAL_CHANNELS][IVAS_REV_MAX_NR_BRANCHES]; /* output mixer matrix */ + + /* binauralization filters: */ + int16_t do_corr_filter; + ivas_reverb_t2f_f2t_t fft_filter_ols; + ivas_reverb_fft_filter_t fft_filter_correl_0; + ivas_reverb_fft_filter_t fft_filter_correl_1; + ivas_reverb_fft_filter_t fft_filter_color_0; + ivas_reverb_fft_filter_t fft_filter_color_1; + uint16_t fft_size; /* fft processing size */ + uint16_t fft_subblock_size; /* fft block processing size */ + uint16_t num_fft_subblocks; /* number of fft subblocks */ + uint16_t full_block_size; /* full block processing size */ + +} REVERB_DATA, *REVERB_HANDLE; + + +typedef struct ivas_orient_trk_state_t +{ + OTR_TRACKING_T trackingType; + float centerAdaptationRate; + float offCenterAdaptationRate; + float adaptationAngle; + + float alpha; + + float absYaw; /* absolute orientation */ + float absPitch; + float absRoll; + + float absAvgYaw; /* average absolute orientation */ + float absAvgPitch; + float absAvgRoll; + + float refYaw; /* reference orientation */ + float refPitch; + float refRoll; + + float trkYaw; /* tracked orientation */ + float trkPitch; + float trkRoll; + +} ivas_orient_trk_state_t; + + +/* Crend structures */ +typedef struct ivas_crend_state_t +{ + float *freq_buffer_re[IVAS_MAX_NUM_CH]; + float *freq_buffer_im[IVAS_MAX_NUM_CH]; + float *freq_buffer_re_diffuse; + float *freq_buffer_im_diffuse; + float *prev_out_buffer[BINAURAL_CHANNELS]; + float *lfe_delay_line; + float m_fYaw; + float m_fPitch; + float m_fRoll; + ivas_orient_trk_state_t *hTrack; + REVERB_HANDLE hReverb; + int16_t delay_line_rw_index; + int16_t diffuse_delay_line_rw_index; + +} CREND_DATA, *CREND_HANDLE; + + +/*----------------------------------------------------------------------------------* + * LFE decoder structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_lfe_dec_data_structure +{ + ivas_filters_process_state_t filter_state; + LFE_WINDOW_HANDLE pWindow_state; + const uint16_t *cum_freq_models[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; + float lfe_block_delay_s; + int16_t lfe_prior_buf_len; + float *prior_out_buffer; + + float *prevsynth_buf; + float *lfe_delay_buf; + int16_t lfe_addl_delay; + int16_t bfi_count; + +} LFE_DEC_DATA, *LFE_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Limiter structure + *----------------------------------------------------------------------------------*/ + +typedef struct +{ + int16_t max_num_channels; + int16_t num_channels; + float **channel_ptrs; + int32_t sampling_rate; + float gain; + float release_heuristic; + float attack_constant; + int16_t strong_saturation_count; +#ifdef DEBUGGING + int32_t cnt_frames_limited; /* counter of frames in which the limiter is applied */ +#endif + +} IVAS_LIMITER, *IVAS_LIMITER_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Decoder configuration structure + *----------------------------------------------------------------------------------*/ + +typedef struct decoder_config_structure +{ + int32_t ivas_total_brate; /* IVAS total bitrate in bps */ + int32_t last_ivas_total_brate; /* last IVAS total bitrate in bps */ + int32_t output_Fs; /* output signal sampling frequency in Hz */ + int16_t nchan_out; /* number of output audio channels */ + AUDIO_CONFIG output_config; /* output audio configuration */ + + int16_t Opt_LsCustom; /* indicates whether loudspeaker custom setup is used */ + int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ + int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ + int16_t orientation_tracking; /* indicates orientation tracking type */ + float no_diegetic_pan; + int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ + + /* temp. development parameters */ +#ifdef DEBUGGING + int16_t forceSubframeBinauralization; /* Flag for forcing Parametric binauralizer to subframe mode */ + int16_t force_rend; /* forced TD/CLDFB binaural renderer (for ISM and MC) */ +#endif + +} DECODER_CONFIG, *DECODER_CONFIG_HANDLE; + + +/*----------------------------------------------------------------------------------* + * + * Main IVAS decoder structure + * =========================== + *----------------------------------------------------------------------------------*/ +/* clang-format off */ + +typedef struct Decoder_Struct +{ + /* high-level decoder parameters */ + DECODER_CONFIG_HANDLE hDecoderConfig; /* Decoder configuration structure */ + + IVAS_FORMAT ivas_format; /* IVAS format */ + int16_t sid_format; /* IVAS format indicator from SID frame */ + int16_t nchan_transport; /* number of transport channels */ + IVAS_OUTPUT_SETUP hOutSetup; /* output setup structure */ + AUDIO_CONFIG intern_config; /* internal audio configuration */ + IVAS_OUTPUT_SETUP hIntSetup; /* internal setup structure */ + + AUDIO_CONFIG transport_config; /* transport audio configuration */ + IVAS_OUTPUT_SETUP hTransSetup; /* transport setup structure */ + + int16_t element_mode_init; /* element mode used at initialization */ + int16_t codec_mode; /* Mode 1 or 2 */ + int16_t ini_frame; /* initialization frames counter */ + int16_t ini_active_frame; /* initialization active frames counter */ + + int16_t bfi; /* FEC - bad frame indicator */ + int16_t BER_detect; /* BER detect flag */ /* IVAS_fmToDo: eventually replace hCoreCoder->BER_detect by a pointer to ease the updating of this main parameter */ + + uint16_t *bit_stream; /* Pointer to bitstream buffer */ + int16_t writeFECoffset; /* parameter for debugging JBM stuff */ + + float **mem_hp20_out; /* output signals HP filter memories */ + IVAS_LIMITER_HANDLE hLimiter; /* Limiter handle */ + + /* core-decoder modules */ + int16_t nSCE; /* number of total SCEs */ + int16_t nCPE; /* number of total CPEs */ + SCE_DEC_HANDLE hSCE[MAX_SCE]; /* SCE handles */ + CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS]; /* CPE handles */ + + /* multichannel modules */ + ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS]; /* ISM metadata handles (storage for one frame of read ISM metadata) */ + ISM_RENDERER_HANDLE hIsmRendererData; /* ISM renderer handle */ + DIRAC_DEC_HANDLE hDirAC; /* DirAC handle */ + SPAR_DEC_HANDLE hSpar; /* SPAR handle */ + IVAS_QMETADATA_HANDLE hQMetaData; /* q_metadata handle */ + MCT_DEC_HANDLE hMCT; /* MCT handle */ + PARAM_MC_DEC_HANDLE hParamMC; /* Parametric MC handle */ + MASA_DECODER_HANDLE hMasa; /* MASA handle */ + LFE_DEC_HANDLE hLFE; /* LFE handle */ + + ISM_MODE ism_mode; /* ISM format mode */ + SBA_MODE sba_mode; /* SBA format mode */ + MC_MODE mc_mode; /* MC format mode */ + + int16_t sba_order; /* Ambisonic (SBA) order */ + int16_t sba_planar; /* Ambisonic (SBA) planar flag */ + int16_t sba_dirac_stereo_flag; /* flag indicating stereo output for SBA DirAC modes with 1 TC */ + + /* rendering modules */ + RENDERER_TYPE renderer_type; /* renderer type */ + HANDLE_CLDFB_FILTER_BANK cldfbAnaDec[MAX_INTERN_CHANNELS]; /* Analysis CLDFB for transport and internal rendered channels */ + HANDLE_CLDFB_FILTER_BANK cldfbSynDec[MAX_OUTPUT_CHANNELS]; /* Synthesis CLDFB for output rendering */ + BINAURAL_RENDERER_HANDLE hBinRenderer; /* fastconv binaural renderer handle */ + BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd; /* Time domain binaural object renderer handle */ + TDREND_HRFILT_FiltSet_t *hHrtfTD; /* pointer to HRTF data for TD renderer */ + DIRAC_DEC_BIN_HANDLE hDiracDecBin; /* parametric binaural renderer handle */ + LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; /* MC LS configuration convertion handle */ + EFAP_HANDLE hEFAPdata; /* EFAP structure */ + VBAP_HANDLE hVBAPdata; /* VBAP structure */ + MONO_DOWNMIX_RENDERER_HANDLE hMonoDmxRenderer; /* Mono downmix structure */ + CREND_HANDLE hCrend; /* Convolution mixer renderer structure */ + HRTFS_HANDLE hHrtf; /* HRTFs handle */ + LSSETUP_CUSTOM_HANDLE hLsSetupCustom; /* Custom LS configuration handle */ + float *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */ + HEAD_TRACK_DATA_HANDLE hHeadTrackData; /* Head tracking data structure */ + RENDER_CONFIG_DATA *hRenderConfig; /* Renderer config pointer */ + int32_t binaural_latency_ns; /* HRTF binauralization latency in ns */ + +#ifdef DEBUGGING + int32_t noClipping; /* number of clipped samples */ +#endif + +} Decoder_Struct; + +/* clang-format on */ + +#endif /* IVAS_STAT_DEC_H */ diff --git a/lib_dec/ivas_stereo_adapt_GR_dec.c b/lib_dec/ivas_stereo_adapt_GR_dec.c new file mode 100644 index 0000000000..ec84df9831 --- /dev/null +++ b/lib_dec/ivas_stereo_adapt_GR_dec.c @@ -0,0 +1,505 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + + +/*---------------------------------------------------------------------* + * read_GR2() + * + * reading a bitstream of data encoded with GR of order 2 + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +static int16_t read_GR2( + const uint16_t *bit_stream, /* i : bitstream to be read */ + int16_t *ind, /* o : parameters read */ + const int16_t len /* i : number of params to be read */ +) +{ + int16_t i; + uint16_t nb, ready, temp, b; + const uint16_t *p; + + p = bit_stream; + nb = 0; + + for ( i = 0; i < len; i++ ) + { + ready = 0; + temp = 0; + do + { + b = *p++; + if ( b == 0 ) + { + ready = 1; + } + else + { + temp += 1; + } + } while ( ready == 0 ); + b = *p++; + b = 2 * b + *p++; + ind[i] = 4 * temp + b; + nb += temp + 3; + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * read_GR1() + * + * reading a bitstream of data encoded with GR of order 1 + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +static int16_t read_GR1( + const uint16_t *bit_stream, /* i : bitstream to be read */ + int16_t *ind, /* o : parameters read */ + const int16_t len /* i : number of params to be read */ +) +{ + int16_t i; + uint16_t nb, ready, temp, b; + const uint16_t *p; + + p = bit_stream; + nb = 0; + + for ( i = 0; i < len; i++ ) + { + ready = 0; + temp = 0; + do + { + b = *p++; + if ( b == 0 ) + { + ready = 1; + } + else + { + temp += 1; + } + } while ( ready == 0 ); + + b = *p++; + ind[i] = 2 * temp + b; + nb += + temp + 2; + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * read_GR0() + * + * reading a bitstream of data encoded with GR of order 0 + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t read_GR0( + const uint16_t *bit_stream, /* i : bitstream to be read */ + int16_t *ind, /* o : parameters read */ + const int16_t len /* i : number of params to be read */ +) +{ + int16_t i; + uint16_t nb, ready, b, temp; + const uint16_t *p; + + p = bit_stream; + nb = 0; + + for ( i = 0; i < len; i++ ) + { + ready = 0; + temp = 0; + do + { + b = *p++; + if ( b == 0 ) + { + ready = 1; + } + else + { + temp += 1; + } + } while ( ready == 0 ); + ind[i] = temp; + nb += temp + 1; + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * find_map() + * + * find the position of the value 'val' in the array 'map' + *---------------------------------------------------------------------*/ + +/*! r: index in array */ +static ivas_error find_map( + int16_t *map_idx, + const int16_t *map, /* i : array to look into */ + const int16_t val, /* i : value to look for */ + const int16_t len /* i : length of array */ +) +{ + *map_idx = 0; + + while ( ( map[*map_idx] != val ) && ( *map_idx < len ) ) + { + ( *map_idx )++; + } + +#ifdef DEBUGGING + if ( *map_idx == len ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "find_map(map, %d) : value not found!!", val ); + } +#endif + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * decode_adapt_GR_indices1() + * + * decodes input array using the adaptive GR procedure + *---------------------------------------------------------------------*/ + +static void decode_adapt_GR_indices1( + const int16_t *ind, /* i : array of input encoded symbols */ + const int16_t len, /* i : number of parameters to decode */ + const int16_t no_symb, /* i : number of possible symbols in GR coding */ + int16_t *out, /* o : array of decoded parameters */ + const int16_t *map0 /* i : initial mapping array for the adaptive GR */ +) +{ + const int16_t *map; + int16_t map_symb, i; + + if ( no_symb == NO_SYMB_GR_SIDE_G ) + { + map = &map0[15 * no_symb]; + } + else + { + map = &( map0[8 * no_symb] ); + } + + for ( i = 0; i < len; i++ ) + { + map_symb = ind[i]; + find_map( out + i, map, map_symb, no_symb ); + map = &( map0[out[i] * no_symb] ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * get_value() + * + * reads a value on 'nbits' from a bitstream + *---------------------------------------------------------------------*/ + +/*! r: read value */ +int16_t get_value( + const uint16_t *bit_stream, /* i : bitstream */ + const int16_t nbits /* i : number of bits to be read */ +) +{ + int16_t i; + uint16_t mask = 1, val = 0; + + for ( i = nbits - 1; i >= 0; i-- ) + { + val += mask * bit_stream[i]; + mask <<= 1; + } + + return val; +} + + +/*---------------------------------------------------------------------* + * read_BS_GR() + * + * decode simple GR code from a bitstream + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t read_BS_GR( + const uint16_t *bit_stream, /* i : bitstream to be read */ + const int16_t nb, /* i : starting point in bitstream */ + int16_t *ind1, /* o : data array read */ + const int16_t len, /* i : number of params to be read */ + int16_t *GR_ord /* o : GR order to be used */ +) +{ + int16_t b, ind1_tmp[STEREO_DFT_BAND_MAX], tmp, i; + + *GR_ord = bit_stream[nb]; + b = 1; + + if ( *GR_ord == 0 ) + { + b += read_GR0( &bit_stream[nb + b], ind1_tmp, len ); + } + else + { + b += read_GR1( &bit_stream[nb + b], ind1_tmp, len ); + } + + for ( i = 0; i < len; i++ ) + { + tmp = ind1_tmp[i] + 1; + if ( tmp & 1 ) /* if odd number */ + { + ind1[i] = -( ind1_tmp[i] >> 1 ); + } + else + { + ind1[i] = tmp >> 1; + } + } + + return b; +} + + +/*---------------------------------------------------------------------* + * read_BS_adapt_GR_sg() + * + * read and decode with adaptive GR the bitstream containing side gains values + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t read_BS_adapt_GR_sg( + const uint16_t *bit_stream, /* i : bitstream to be read */ + const int16_t nb, /* i : starting position in bitstream */ + int16_t *ind1, /* o : decoded side gain values */ + const int16_t len, /* i : number of params to be read */ + int16_t *GR_ord, /* o : GR order used (read from bitstream)*/ + const int16_t *map0 /* i : initial map */ +) +{ + int16_t b, ind1_tmp[STEREO_DFT_BAND_MAX], ord; + + /* read first component */ + b = 0; + b += read_GR1( &bit_stream[nb], ind1_tmp, 1 ); + /* read GR ord */ + ord = bit_stream[nb + b]; + b += 1; + + if ( ord == 0 ) + { + *GR_ord = 1; + b += read_GR1( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); + } + else + { + ord = bit_stream[nb + b]; + b += 1; + if ( ord == 0 ) + { + *GR_ord = 0; + + b += read_GR0( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); + } + else + { + *GR_ord = 2; + b += read_GR2( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); + } + } + + decode_adapt_GR_indices1( ind1_tmp, len, NO_SYMB_GR_SIDE_G, ind1, map0 ); + + return b; +} + + +/*---------------------------------------------------------------------* + * read_itd() + * + * read and decode ITD in DFT mode + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t read_itd( + Decoder_State *st, /* i : Decoder state */ + int16_t *pI /* o : ITD value */ +) +{ + int16_t huff_flag, sign_flag, I, i, nb = 0, ready; + + huff_flag = get_next_indice( st, 1 ); + sign_flag = get_next_indice( st, 1 ); + nb += 2; + + if ( huff_flag == 1 ) + { + ready = 0; + I = 0; + + while ( ( ready == 0 ) && ( nb < 10 ) ) + { + I = 2 * I + get_next_indice( st, 1 ); + nb += 1; + + for ( i = 0; i < 20; i++ ) + { + if ( ( I == dft_code_itd[i] ) && ( dft_len_itd[i] == ( nb - 2 ) ) ) + { + I = i; + ready = 1; + break; + } + } + } + if ( ready == 0 ) + { + printf( "Error reading Huffman code for ITD: \n" ); + } + } + else + { + I = get_next_indice( st, STEREO_DFT_ITD_NBITS - 1 ); + nb += STEREO_DFT_ITD_NBITS - 1; + } + + I += 256 * sign_flag; + *pI = I; + + return nb; +} + + +/*---------------------------------------------------------------------* + * read_BS_adapt_GR_rpg() + * + * read and decode residual prediction gain values using adaptive GR + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t read_BS_adapt_GR_rpg( + const uint16_t *bit_stream, /* i : bitstream to be read */ + const int16_t nb, /* i : starting point in bitstream */ + int16_t *ind1_pred, /* o : decoded res pred gains */ + const int16_t start, /* i : starting subband */ + const int16_t total_no, /* i : number of params to be read */ + int16_t *GR_ord /* o : GR order - read */ +) +{ + int16_t b, ind1_tmp[STEREO_DFT_BAND_MAX], i, len; + len = total_no - start; + + /* read first band */ + b = read_GR1( &bit_stream[nb], ind1_tmp, 1 ); + + if ( ind1_tmp[0] == dft_maps_rpg[8 * NO_SYMB_GR_PRED_G] ) + { + for ( i = start; i < total_no; i++ ) + { + ind1_pred[i] = 0; + } + } + else + { + *GR_ord = bit_stream[nb + b]; /* GR order */ + b += 1; + if ( *GR_ord == 0 ) + { + b += read_GR0( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); + } + else + { + /* GR ord 1 */ + b += read_GR1( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); + } + decode_adapt_GR_indices1( ind1_tmp, total_no - start, NO_SYMB_GR_PRED_G, &ind1_pred[start], dft_maps_rpg ); + } + + return b; +} + + +/*---------------------------------------------------------------------* + * read_flag_EC_DFT() + * + * read flag differentiating between: CBR/EC with adaptive GR/GR for differential coding + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t read_flag_EC_DFT( + const uint16_t *bit_stream, /* i : bitstream */ + int16_t *flag /* o : flag value */ +) +{ + int16_t flg; + + flg = bit_stream[0]; + if ( flg == 0 ) + { + *flag = flg; + return 1; + } + else + { + *flag = 2 + bit_stream[1]; + return 2; + } +} diff --git a/lib_dec/ivas_stereo_cng_dec.c b/lib_dec/ivas_stereo_cng_dec.c new file mode 100644 index 0000000000..05e9222ddb --- /dev/null +++ b/lib_dec/ivas_stereo_cng_dec.c @@ -0,0 +1,1016 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*------------------------------------------------------------------- + * Local constants + *-------------------------------------------------------------------*/ + +#define A_GFILT 0.8f /* LP-filter coefficient for coherence and sidegain */ +#define SKIP_XFADE_FRAMES 2 + +/* DTX/CNG */ +#define MAX_K 50.0f +#define STEREO_TD_PS_CORR_FILT 0.8f +#define MAX_XFADE 50.0f +#define CM_INIT 50 +#define CORR_INIT 8 +#define SID_INIT 6 +#define STEREO_CNA_LR_CORR_LT_FILT 0.95f /* long-term averaging factor for L/R correlation estimation in stereo CNA */ +#define STEREO_CNA_ILD_LT_FILT 0.9f /* long-term averaging factor for ILD estimation in stereo CNA */ +#define STEREO_CNA_SOFT_VAD_UP 0.7f /* long-term averaging factor for upward soft VAD update in stereo CNA */ +#define STEREO_CNA_SOFT_VAD_DN 0.95f /* long-term averaging factor for downward soft VAD update in stereo CNA */ + + +/*------------------------------------------------------------------- + * stereo_dft_dec_sid_coh() + * + * Decode coherence vector + *-------------------------------------------------------------------*/ + +void stereo_dft_dec_sid_coh( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t nbands, /* i : number of DFT stereo bands */ + float *coh, /* i/o: coherence */ + int16_t *nb_bits /* i/o: number of bits read */ +) +{ + int16_t nr_of_sid_stereo_bits; + int16_t i; + float alpha; + int16_t alpha_index; + int16_t alpha_step; + float pred; + float pred_err; + int16_t coh_pred_index; + int16_t res_index; + float cohBandq[STEREO_DFT_BAND_MAX]; + const float *pptr; + int16_t bits_tmp; + int16_t b; + + nr_of_sid_stereo_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + + /* If the coherence is not encoded due to lack of bits set alpha to zero which leads to that the coherence */ + /* from the previous frame is used. */ + if ( ( nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS - STEREO_DFT_PRED_NBITS ) > 0 ) + { + /* Read coherence from bitstream */ + coh_pred_index = get_next_indice( st, STEREO_DFT_PRED_NBITS ); /* Read predictor index */ + ( *nb_bits ) += STEREO_DFT_PRED_NBITS; + + alpha_index = get_next_indice( st, STEREO_DFT_N_COH_ALPHA_BITS ); /* Read alpha index */ + ( *nb_bits ) += STEREO_DFT_N_COH_ALPHA_BITS; + + alpha_step = 0; + for ( i = 0; i < STEREO_DFT_N_COH_ALPHA_STEPS - 1; i++ ) + { + if ( nr_of_sid_stereo_bits - *nb_bits > dft_cng_coh_alpha_start[i] ) + { + alpha_step = i + 1; + } + } + alpha = dft_cng_alpha_bits[alpha_step][alpha_index]; + } + else + { + alpha = 0; + coh_pred_index = 0; + for ( i = *nb_bits; i < nr_of_sid_stereo_bits; i++ ) + { + get_next_indice( st, 1 ); + ( *nb_bits )++; + } + } + + pptr = dft_cng_coh_pred[coh_pred_index]; + pred = 0.4f; + + for ( b = 0; b < nbands; b++ ) + { + /* Intra-frame prediction */ + + for ( i = 0; i < b; i++ ) + { + pred += ( *pptr++ ) * cohBandq[i]; + } + /* Weighted intra/inter-frame prediction */ + pred = alpha * pred + ( 1 - alpha ) * coh[b]; + + /* Read residual index from bitstream */ + if ( *nb_bits < nr_of_sid_stereo_bits ) /* If the bit limit is reached, res_index = 0 is assumed for remaining indices */ + { + bits_tmp = read_GR0( &st->bit_stream[st->next_bit_pos], &res_index, 1 ); + *nb_bits += bits_tmp; + st->next_bit_pos += bits_tmp; + } + else + { + res_index = 0; + } + + /* Reconstruct */ + res_index = dft_cng_coh_u2i[res_index]; + pred_err = usdequant( res_index, -0.4f, 0.1f ); + cohBandq[b] = pred + pred_err; /* Store for intra-frame prediction */ + if ( cohBandq[b] > 1 ) + { + cohBandq[b] = 1; + } + else if ( cohBandq[b] < 0 ) + { + cohBandq[b] = 0; + } + coh[b] = cohBandq[b]; /* Update memory for next frame */ + pred = 0; + } + + /* Remove padding bits */ + for ( i = *nb_bits; i < nr_of_sid_stereo_bits; i++ ) + { + get_next_indice( st, 1 ); + ( *nb_bits )++; + } + + return; +} + + +/*------------------------------------------------------------------- + * stereo_dft_generate_comfort_noise() + * + * Generate the comfort noise based on the target noise level for the CLDFB part + *-------------------------------------------------------------------*/ + +static void stereo_dft_generate_comfort_noise( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: DFT Stereo decoder handle */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ + const int16_t last_element_mode, /* i : last element mode */ + Decoder_State *st, /* i/o: Core coder decoder state */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ + Decoder_State *st1, /* i/o: Core coder decoder state secondary channel */ + const float targetGain, /* i : ICA target gain */ + const int16_t chan, /* i : channel number */ + const int16_t output_frame /* i : output frame size */ +) +{ + int16_t i, j, k; + float *ptr_level, *ptr_shb, *ptr_r, *ptr_i; + HANDLE_FD_CNG_COM hFdCngCom; + int16_t numSlots; + float scale; + float lp_noise; + float tmp, enr; + float shb_shape[L_FRAME16k]; + float *ptr0, *ptr1, *ptr2; + float dmpf[M + 2], Atmp[M + 2]; + float cngNoiseLevel_upd[L_FRAME16k], cngNoiseLevel_hist[L_FRAME16k - 2]; + float *ptr_tmp, *ptr_cng; + float E0, E1; + int16_t b; + float *pSideGain; + float gamma; + float c; + float scaleMS; + float scaleAvg; + float LR_ratio; + float factor; + float alpha, ftmp; + float trigo_dec[STEREO_DFT32MS_N_16k / 2 + 1]; + const float *pTrigo; + int16_t trigo_step; + + hFdCngCom = st->hFdCngDec->hFdCngCom; + + wmops_sub_start( "DFT_CNG" ); + + set_f( dmpf, 0.0f, M + 2 ); + set_f( Atmp, 0.0f, M + 2 ); + + set_zero( DFT[chan], STEREO_DFT_BUF_MAX ); + + enr = 0; /* Eliminates compiler warning. They are always set before they are used */ + E0 = 0.0f; + E1 = 0.0f; + lp_noise = 0; + + if ( chan == 0 ) + { + pSideGain = hStereoDft->side_gain + STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX; + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + if ( hStereoCng->xfade_frame_counter == 0 ) + { + hStereoDft->g_state[b] = *pSideGain++; + } + else + { + hStereoDft->g_state[b] = ( 1 - A_GFILT ) * *pSideGain++ + A_GFILT * hStereoDft->g_state[b]; + } + + if ( hStereoCng->first_SID ) + { + if ( hStereoCng->first_SID_after_TD ) + { + hStereoCng->cm[b] = hStereoCng->c_LR_LT * hStereoCng->c_LR_LT; + } + else + { + hStereoCng->cm[b] = hStereoCng->coh[b]; + } + } + + else if ( hStereoCng->nr_dft_frames < CM_INIT && hStereoCng->nr_sid_frames < SID_INIT ) + { + if ( hStereoCng->nr_corr_frames > CORR_INIT ) + { + hStereoCng->cm[b] = hStereoCng->c_LR_LT * hStereoCng->c_LR_LT; + } + else + { + hStereoCng->cm[b] = ( 1 - A_GFILT ) * hStereoCng->coh[b] + A_GFILT * hStereoCng->cm[b]; + } + } + + else + { + hStereoCng->cm[b] = ( 1 - A_GFILT ) * hStereoCng->coh[b] + A_GFILT * hStereoCng->cm[b]; + } + } + + if ( hStereoCng->first_SID_after_TD ) + { + scaleAvg = 0; + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + if ( hStereoCng->cm[b] < 0.9f ) + { + gamma = hStereoCng->cm[b]; + gamma = gamma / ( 1 - gamma ); + gamma = sqrtf( gamma + 1 - hStereoDft->g_state[b] * hStereoDft->g_state[b] ) - sqrtf( gamma ); + } + else + { + gamma = 0; + } + + LR_ratio = tdm_ratio_tabl[hStereoCng->last_tdm_idx]; + c = ( ( 1 + hStereoDft->g_state[b] ) * ( 1 + hStereoDft->g_state[b] ) + gamma * gamma ) / ( ( 1 - hStereoDft->g_state[b] ) * ( 1 - hStereoDft->g_state[b] ) + gamma * gamma ); + scaleMS = ( 1 + c + 2 * sqrtf( c * hStereoCng->cm[b] ) ) / ( 4 * ( c * LR_ratio * LR_ratio + ( 1 - LR_ratio ) * ( 1 - LR_ratio ) * targetGain * targetGain + 2 * LR_ratio * ( 1 - LR_ratio ) * targetGain * sqrtf( c * hStereoCng->cm[b] ) ) ); + scaleMS = sqrtf( scaleMS ); + scaleAvg += scaleMS; + } + scaleAvg = scaleAvg / hStereoDft->nbands; + + hStereoDft->scale = scaleAvg; + } + } + + if ( st->cng_type == LP_CNG ) + { + set_f( cngNoiseLevel_upd, 0.0f, st->L_frame ); + + /* Deemphasis */ + dmpf[0] = 1.0f; + dmpf[1] = -st->preemph_fac; + mvr2r( st->Aq_cng, Atmp, M + 1 ); + conv( Atmp, dmpf, cngNoiseLevel_upd, M + 2 ); + + if ( st->L_frame == L_FRAME ) + { + pTrigo = hStereoDft->dft_trigo_12k8; + trigo_step = STEREO_DFT_TRIGO_SRATE_12k8_STEP * STEREO_DFT_TRIGO_DEC_STEP; + } + else + { + pTrigo = hStereoDft->dft_trigo_16k; + trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP * STEREO_DFT_TRIGO_DEC_STEP; + } + + for ( i = 0; i < st->L_frame / 4; i++ ) + { + trigo_dec[i] = pTrigo[i * trigo_step]; + trigo_dec[st->L_frame / 2 - i] = pTrigo[i * trigo_step]; + } + trigo_dec[st->L_frame / 4] = pTrigo[st->L_frame / 4 * trigo_step]; + + rfft( cngNoiseLevel_upd, trigo_dec, st->L_frame, -1 ); + + /* Compute 1/|A| */ + ptr0 = cngNoiseLevel_upd; + ptr1 = ptr0 + 2; + ptr2 = ptr1 + 1; + for ( i = 0; i < st->L_frame / 2 - 1; i++ ) + { + *ptr0++ = 2.0f * sqrtf( st->lp_ener / st->L_frame * 0.5f ) / sqrtf( *ptr1 * *ptr1 + *ptr2 * *ptr2 ); + ptr1 += 2; + ptr2 += 2; + } + + if ( min( output_frame, L_FRAME32k ) - hFdCngCom->stopFFTbin > 0 ) + { + /* Transform shb LP spectrum */ + set_f( shb_shape, 0.0f, L_FRAME16k ); + mvr2r( st->hTdCngDec->shb_lpcCNG, shb_shape, LPC_SHB_ORDER + 1 ); + + if ( st->L_frame != L_FRAME16k ) + { + pTrigo = hStereoDft->dft_trigo_16k; + trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP * STEREO_DFT_TRIGO_DEC_STEP; + + for ( i = 0; i < L_FRAME16k / 4; i++ ) + { + trigo_dec[i] = pTrigo[i * trigo_step]; + trigo_dec[L_FRAME16k / 2 - i] = pTrigo[i * trigo_step]; + } + trigo_dec[L_FRAME16k / 4] = pTrigo[L_FRAME16k / 4 * trigo_step]; + } + + rfft( shb_shape, trigo_dec, L_FRAME16k, -1 ); + + /* Compute 1/|A| */ + enr = shb_shape[0] * shb_shape[0] + shb_shape[1] * shb_shape[1]; + ptr0 = shb_shape; + ptr1 = ptr0 + 2; + ptr2 = ptr1 + 1; + for ( i = 0; i < L_FRAME16k / 2 - 1; i++ ) + { + ftmp = 1.0f / ( *ptr1 * *ptr1 + *ptr2 * *ptr2 ); + enr += ftmp; + *ptr0++ = sqrtf( ftmp ); + ptr1 += 2; + ptr2 += 2; + } + } + + /* Update CNG noise level from MS noise estimation */ + mvr2r( st->hFdCngDec->bandNoiseShape, cngNoiseLevel_hist, hFdCngCom->stopFFTbin - hFdCngCom->startBand ); + ptr_cng = cngNoiseLevel_hist; + for ( i = 0; i < ( st->last_L_frame - hFdCngCom->startBand ) / 2; i++ ) + { + tmp = *( cngNoiseLevel_hist + i * 2 ); + tmp += *( cngNoiseLevel_hist + i * 2 + 1 ); + *ptr_cng++ = tmp * 0.5f; + } + + if ( last_element_mode == IVAS_CPE_TD && chan == 0 && hStereoCng->xfade_frame_counter == 0 && !( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) ) + { + ptr_cng = cngNoiseLevel_hist + hFdCngCom->startBand; + ptr_tmp = cngNoiseLevel_upd + hFdCngCom->startBand; + for ( i = 0; i < ( st->last_L_frame - hFdCngCom->startBand ) / 2; i++ ) + { + E0 += *ptr_cng++; + E1 += ( *ptr_tmp ) * ( *ptr_tmp ); + ptr_tmp++; + } + + tmp = sqrtf( E0 / E1 ); + if ( tmp < 1 ) + { + hStereoCng->xfade_length = (int16_t) ( -MAX_XFADE * tmp + MAX_XFADE ); + } + else + { + hStereoCng->xfade_length = (int16_t) ( -MAX_XFADE * ( 1 / tmp ) + MAX_XFADE ); + } + } + + if ( hStereoCng->xfade_frame_counter < hStereoCng->xfade_length ) + { + ptr_cng = cngNoiseLevel_hist + hFdCngCom->startBand; + ptr_tmp = cngNoiseLevel_upd + hFdCngCom->startBand; + for ( i = 0; i < ( st->last_L_frame - hFdCngCom->startBand ) / 2; i++ ) + { + tmp = hStereoCng->xfade_frame_counter / (float) hStereoCng->xfade_length; + *ptr_tmp = tmp * *ptr_tmp + ( 1 - tmp ) * sqrtf( *ptr_cng++ ) * hStereoDft->scale; + ptr_tmp++; + } + } + + for ( k = 0; k < STEREO_DFT_NBDIV; k++ ) + { + /* low band */ + ptr_level = cngNoiseLevel_upd; + ptr_r = DFT[chan] + hFdCngCom->startBand + k * STEREO_DFT32MS_N_MAX; + ptr_i = ptr_r + 1; + scale = output_frame * 0.5f; + + for ( i = 0; i < ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2; i++ ) + { + /* Real part in FFT bins */ + rand_gauss( ptr_r, &st->hTdCngDec->cng_seed ); + tmp = scale * *ptr_level; + ( *ptr_r ) *= tmp; + ptr_r += 2; + /* Imaginary part in FFT bins */ + rand_gauss( ptr_i, &st->hTdCngDec->cng_seed ); + ( *ptr_i ) *= tmp; + ptr_i += 2; + ptr_level++; + } + + if ( min( output_frame, L_FRAME32k ) - hFdCngCom->stopFFTbin > 0 ) + { + + /* high band generation, flipped spectrum */ + scale = sqrtf( powf( 10, 0.1f * st->hTdCngDec->shb_cng_gain ) / enr ); + ptr_shb = shb_shape + L_FRAME16k / 2 - 1; + /* Averaging for Nyquist frequency */ + *ptr_shb = 0.5f * ( cngNoiseLevel_upd[( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 - 1] / scale + *( ptr_shb - 1 ) ); + + ptr_r = DFT[chan] + hFdCngCom->stopFFTbin + k * STEREO_DFT32MS_N_MAX; + ptr_i = ptr_r + 1; + + for ( i = 0; i < ( min( output_frame, hFdCngCom->regularStopBand * 16 ) - hFdCngCom->stopFFTbin ) / 2; i++ ) + { + /* Real part in FFT bins */ + rand_gauss( ptr_r, &st->hTdCngDec->cng_seed ); + ( *ptr_r ) *= *ptr_shb; + ptr_r += 2; + /* Imaginary part in FFT bins */ + rand_gauss( ptr_i, &st->hTdCngDec->cng_seed ); + ( *ptr_i ) *= *ptr_shb; + ptr_i += 2; + ptr_shb--; + } + + /* rescale */ + scale *= output_frame * 0.5f; + ptr_r = DFT[chan] + hFdCngCom->stopFFTbin + k * STEREO_DFT32MS_N_MAX; + ptr_i = ptr_r + 1; + for ( i = 0; i < ( min( output_frame, hFdCngCom->regularStopBand * 16 ) - hFdCngCom->stopFFTbin ) / 2; i++ ) + { + ( *ptr_r ) *= scale; + ( *ptr_i ) *= scale; + ptr_r += 2; + ptr_i += 2; + } + } + } + + /* Expand cngNoiseLevel from 0-159 to 0-318, compute noise level */ + lp_noise = 0.0f; + ptr_level = hFdCngCom->cngNoiseLevel + hFdCngCom->stopFFTbin - hFdCngCom->startBand - 1; + ptr_tmp = cngNoiseLevel_upd + ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 - 1; + for ( i = 0; i < ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2; i++ ) + { + *ptr_level-- = *ptr_tmp * *ptr_tmp; + ptr_tmp--; + *ptr_level = *( ptr_level + 1 ); + lp_noise += 2 * *ptr_level--; + } + } + else + { + /* FD-CNG */ + if ( !( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) ) + { + if ( hStereoCng->xfade_frame_counter <= MAX_K && hStereoCng->last_act_element_mode == IVAS_CPE_TD && chan == 0 ) + { + /* Fade MS -> SID/MS */ + j = 0; + for ( k = 0; k < ( hFdCngCom->nFFTpart - 2 ); k++ ) + { + factor = ( hFdCngCom->sidNoiseEstLp[k] + DELTA ) / ( st->hFdCngDec->partNoiseShape[k] + DELTA ); + factor = min( hStereoDft->scale + ( 1 / MAX_K ) * ( factor - hStereoDft->scale ) * hStereoCng->xfade_frame_counter, factor ); + for ( ; j <= hFdCngCom->part[k]; j++ ) + { + hFdCngCom->cngNoiseLevel[j] = st->hFdCngDec->bandNoiseShape[j] * factor; + } + } + } + } + scale = output_frame * 0.5f; + numSlots = hFdCngCom->numSlots / 2; + for ( k = 0; k < STEREO_DFT_NBDIV; k++ ) + { + ptr_level = hFdCngCom->cngNoiseLevel; + ptr_r = DFT[chan] + hFdCngCom->startBand + k * STEREO_DFT32MS_N_MAX; + ptr_i = ptr_r + 1; + for ( i = 0; i < ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2; i++ ) + { + /* Real part in FFT bins */ + tmp = *ptr_level++; + tmp += *ptr_level++; + tmp = tmp * 0.5f; + rand_gauss( ptr_r, &st->hTdCngDec->cng_seed ); + tmp = sqrtf( tmp ) * scale; + ( *ptr_r ) *= tmp; + ptr_r += 2; + /* Imaginary part in FFT bins */ + rand_gauss( ptr_i, &st->hTdCngDec->cng_seed ); + ( *ptr_i ) *= tmp; + ptr_i += 2; + } + ptr_level = hFdCngCom->cngNoiseLevel + hFdCngCom->stopFFTbin - hFdCngCom->startBand; + ptr_r = DFT[chan] + hFdCngCom->stopFFTbin + k * STEREO_DFT32MS_N_MAX; + ptr_i = ptr_r + 1; + for ( j = hFdCngCom->numCoreBands; j < hFdCngCom->regularStopBand; j++ ) + { + for ( i = 0; i < numSlots; i++ ) + { + /* Real part in FFT bins */ + rand_gauss( ptr_r, &st->hTdCngDec->cng_seed ); + tmp = sqrtf( *ptr_level ) * scale; + ( *ptr_r ) *= tmp; + ptr_r += 2; + /* Imaginary part in FFT bins */ + rand_gauss( ptr_i, &st->hTdCngDec->cng_seed ); + ( *ptr_i ) *= tmp; + ptr_i += 2; + } + ptr_level++; + } + } + /* Compute noise level */ + lp_noise = 0.0f; + ptr_level = hFdCngCom->cngNoiseLevel; + for ( i = 0; i < hFdCngCom->stopFFTbin - hFdCngCom->startBand; i++ ) + { + lp_noise += *ptr_level++; + } + } + + if ( hStereoCng->last_act_element_mode == IVAS_CPE_TD && chan > 0 ) + { + st1->lp_noise = 0.9f * st1->lp_noise + 0.1f * 10.f * log10f( lp_noise + DELTA ); + } + else if ( chan == 0 ) + { + st->hFdCngDec->lp_noise = 0.9f * st->hFdCngDec->lp_noise + 0.1f * 10.f * log10f( lp_noise + DELTA ); + st->lp_noise = st->hFdCngDec->lp_noise; + st->hFdCngDec->hFdCngCom->flag_noisy_speech = ( st->hFdCngDec->lp_speech - st->hFdCngDec->lp_noise ) < 28.f; + st->hFdCngDec->hFdCngCom->likelihood_noisy_speech = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech + 0.01f * st->hFdCngDec->hFdCngCom->flag_noisy_speech; + } + + if ( chan == 0 && st->core_brate <= SID_2k40 ) + { + /* update smoothed periodogram used by stereo CNA in SID and NO_DATA frames from cngNoiseLevel */ + for ( i = hFdCngCom->startBand; i < hFdCngCom->stopFFTbin; i++ ) + { + ftmp = hFdCngCom->cngNoiseLevel[i - hFdCngCom->startBand]; + + if ( !st->hFdCngDec->first_cna_noise_updated ) + { + /* very first update */ + alpha = 0.0f; + } + else + { + alpha = 0.95f; + if ( st->hFdCngDec->smoothed_psd[i] > 0.0f && ftmp > 2.5f * st->hFdCngDec->smoothed_psd[i] ) + { + /* prevent abrupt upward update steps */ + ftmp = 2.5f * st->hFdCngDec->smoothed_psd[i]; + } + else if ( ftmp < st->hFdCngDec->smoothed_psd[i] ) + { + /* faster downward updates */ + alpha = 0.7f; + } + } + + /* smoothing */ + st->hFdCngDec->smoothed_psd[i] = alpha * st->hFdCngDec->smoothed_psd[i] + ( 1 - alpha ) * ftmp; + } + + /* update msNoiseEst in SID and NO_DATA frames */ + bandcombinepow( &st->hFdCngDec->smoothed_psd[hFdCngCom->startBand], hFdCngCom->stopFFTbin - hFdCngCom->startBand, st->hFdCngDec->part_shaping, st->hFdCngDec->nFFTpart_shaping, st->hFdCngDec->psize_inv_shaping, st->hFdCngDec->msNoiseEst ); + + st->hFdCngDec->first_cna_noise_updated = 1; + mvr2r( st->hFdCngDec->msNoiseEst, st->hFdCngDec->msPeriodog_ST, st->hFdCngDec->nFFTpart_shaping ); + st->hFdCngDec->ms_last_inactive_bwidth = st->bwidth; + } + + wmops_sub_end(); + return; +} + + +/*------------------------------------------------------------------- + * stereo_dtf_cng() + * + * DFT stereo CNG + *-------------------------------------------------------------------*/ + +void stereo_dtf_cng( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ + const int16_t output_frame /* i : output frame size */ +) +{ + Decoder_State **sts; + int16_t n; + + sts = hCPE->hCoreCoder; + + if ( hCPE->hStereoCng != NULL ) + { + if ( hCPE->hStereoCng->nr_dft_frames < CM_INIT ) + { + hCPE->hStereoCng->nr_dft_frames++; + } + + if ( ivas_total_brate <= IVAS_SID_4k4 ) + { + if ( hCPE->hStereoCng->nr_sid_frames < SID_INIT && ivas_total_brate == IVAS_SID_4k4 ) + { + hCPE->hStereoCng->nr_sid_frames++; + } + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + stereo_dft_generate_comfort_noise( hCPE->hStereoDft, hCPE->hStereoCng, hCPE->last_element_mode, sts[0], DFT, sts[1], + hCPE->hStereoTCA->targetGain, n, output_frame ); + } + } + } + + return; +} + + +/*------------------------------------------------------------------- + * stereo_cng_dec_update() + * + * Update counters used for TD->DFT-CNG cross fade and stereo SID parameters + *-------------------------------------------------------------------*/ + +void stereo_cng_dec_update( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + if ( hCPE->hCoreCoder[0]->core_brate > SID_2k40 ) + { + hCPE->hStereoCng->last_act_element_mode = hCPE->element_mode; + if ( hCPE->hStereoCng->active_frame_counter > SKIP_XFADE_FRAMES ) + { + hCPE->hStereoCng->xfade_frame_counter = 0; + hCPE->hStereoCng->xfade_length = 0; + } + if ( hCPE->hStereoCng->active_frame_counter < MAX_FRAME_COUNTER ) + { + hCPE->hStereoCng->active_frame_counter++; + } + } + else + { + hCPE->hStereoCng->active_frame_counter = 0; + if ( hCPE->hStereoCng->xfade_frame_counter < MAX_FRAME_COUNTER ) + { + hCPE->hStereoCng->xfade_frame_counter++; + } + } + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( ivas_total_brate == IVAS_SID_4k4 || ivas_total_brate == FRAME_NO_DATA ) + { + hCPE->hStereoCng->prev_sid_nodata = 1; + } + else + { + hCPE->hStereoCng->prev_sid_nodata = 0; + } + } + + hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->active_frame_counter = hCPE->hStereoCng->active_frame_counter; + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_cng_compute_PScorr() + * + * CNA for TD stereo, compute PS correlation + *-------------------------------------------------------------------*/ + +void stereo_cng_compute_PScorr( + float output[CPE_CHANNELS][L_FRAME48k], /* i : Output signal */ + float *c_PS_LT, /* i/o: Correlation */ + const int16_t L_frame_0, /* i : L_frame channel 0 */ + const int16_t L_frame_1 /* i : L_frame channel 1 */ +) +{ + int16_t i; + float enrP, enrS, dotPS; + float c_PS; + float outputResamp[L_FRAME16k]; + float *outputPptr, *outputSptr; + + enrP = 0.0f; + enrS = 0.0f; + dotPS = 0.0f; + + if ( L_frame_0 > L_frame_1 ) + { + outputPptr = output[0]; + lerp( output[1], outputResamp, L_frame_0, L_frame_1 ); + outputSptr = outputResamp; + } + else if ( L_frame_1 > L_frame_0 ) + { + outputSptr = output[1]; + lerp( output[0], outputResamp, L_frame_1, L_frame_0 ); + outputPptr = outputResamp; + } + else + { + outputPptr = output[0]; + outputSptr = output[1]; + } + + for ( i = 0; i < L_frame_0; i++ ) + { + enrP += *outputPptr * *outputPptr; + enrS += *outputSptr * *outputSptr; + dotPS += *outputPptr++ * *outputSptr++; + } + c_PS = ( dotPS + EPSILON ) / sqrtf( enrP * enrS + EPSILON ); + *c_PS_LT = STEREO_TD_PS_CORR_FILT * *c_PS_LT + ( 1 - STEREO_TD_PS_CORR_FILT ) * c_PS; + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_cng_compute_LRcorr() + * + * CNA for TD stereo, compute LR correlation + *-------------------------------------------------------------------*/ + +static void stereo_cng_compute_LRcorr( + CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ + float output[CPE_CHANNELS][L_FRAME48k], /* i : Output signal */ + const int16_t output_frame, /* i : Output frame length */ + const int16_t tdm_ratio_idx /* i : TDM ratio index */ +) +{ + int16_t i; + float c_LR, c, tmp, sc; + float enrL, enrR, dotLR; + float beta; + + beta = tdm_ratio_tabl[tdm_ratio_idx]; + + enrL = 0.0f; + enrR = 0.0f; + dotLR = 0.0f; + for ( i = 0; i < output_frame; i++ ) + { + enrL += output[0][i] * output[0][i]; + enrR += output[1][i] * output[1][i]; + dotLR += output[0][i] * output[1][i]; + } + + c_LR = fabsf( dotLR + EPSILON ) / sqrtf( enrL * enrR + EPSILON ); + c = ( enrL + DELTA ) / ( enrR + DELTA ); + hCPE->hStereoTD->c_LR_LT = STEREO_TD_PS_CORR_FILT * hCPE->hStereoTD->c_LR_LT + ( 1 - STEREO_TD_PS_CORR_FILT ) * c_LR; + hCPE->hStereoCng->c_LR_LT = hCPE->hStereoTD->c_LR_LT; + + tmp = 2 * beta * ( 1 - beta ) * sqrtf( c ) * hCPE->hStereoTD->c_LR_LT; + sc = ( ( 1 - beta ) * ( 1 - beta ) * c + beta * beta - tmp + DELTA ) / ( beta * beta * c + ( 1 - beta ) * ( 1 - beta ) + tmp + DELTA ); + sc = min( sc, 4.0f ); + hCPE->hStereoTD->SP_ratio_LT = 0.9f * hCPE->hStereoTD->SP_ratio_LT + ( 1 - 0.9f ) * sqrtf( sc ); + + if ( hCPE->hStereoCng->nr_corr_frames < CM_INIT ) + { + hCPE->hStereoCng->nr_corr_frames++; + } + + hCPE->hStereoCng->nr_dft_frames = 0; + + return; +} + + +/*-------------------------------------------------------------------* + * FindEmEs() + * + * Find the energie ratio between the mono and the side + *-------------------------------------------------------------------*/ + +static void FindEmEs( + const float *ch1, /* i : Left channel */ + const float *ch2, /* i : right channel */ + const int16_t len, /* i : length */ + float *lt_es_em /* i/o: LT energy ratio */ +) +{ + int16_t i; + float mono_i, ener, es_em; + float side_i, ener_side; + + ener = 1e-6f; + ener_side = 1e-6f; + + for ( i = 0; i < len; i++ ) + { + mono_i = ( ch1[i] + ch2[i] ) / 2.0f; + ener += mono_i * mono_i; + side_i = ( ch1[i] - ch2[i] ) / 2.0f; + ener_side += side_i * side_i; + } + + /**es_em = 10 * ( log10( sqrt( ener_side / len ) ) - log10( sqrt( ener / len ) ) ); */ + es_em = 5 * ( logf( sqrtf( ener_side / ener ) ) / logf( 10 ) ); + + /* long-term estimate */ + *lt_es_em = 0.4f * *lt_es_em + 0.6f * es_em; + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_cna_update_params() + * + * compute LR correlation and update long-term parameters for stereo CNA + *-------------------------------------------------------------------*/ + +void stereo_cna_update_params( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i : Output signal */ + const int16_t output_frame, /* i : Output frame length */ + const int16_t tdm_ratio_idx /* i : TDM ratio index */ +) +{ + int16_t i; + float c, c_LR, c_ILD, enrL, enrR, dotLR; + Decoder_State **sts; + HANDLE_FD_CNG_DEC hFdCngDec; + + sts = hCPE->hCoreCoder; + + hFdCngDec = sts[0]->hFdCngDec; + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( hCPE->nchan_out > 1 ) + { + FindEmEs( output[0], output[1], output_frame, &hCPE->lt_es_em ); + } + else + { + hCPE->lt_es_em = 0.0f; + } + } + else if ( hCPE->element_mode == IVAS_CPE_TD ) + { + FindEmEs( output[0], output[1], output_frame, &hCPE->lt_es_em ); + + hCPE->hStereoCng->first_SID_after_TD = 1; + stereo_cng_compute_LRcorr( hCPE, output, output_frame, tdm_ratio_idx ); + } + else + { + return; + } + + enrL = 0.0f; + enrR = 0.0f; + dotLR = 0.0f; + if ( hCPE->element_mode == IVAS_CPE_TD || ( hCPE->element_mode == IVAS_CPE_DFT && sts[0]->core_brate > SID_2k40 && sts[0]->VAD == 0 ) ) + { + if ( hCPE->nchan_out == 1 ) + { + c_LR = 1; + c_ILD = 0; + } + else + { + for ( i = 0; i < output_frame; i++ ) + { + enrL += output[0][i] * output[0][i]; + enrR += output[1][i] * output[1][i]; + dotLR += output[0][i] * output[1][i]; + } + + /* estimate L/R correlation factor and ILD in time domain */ + c_LR = fabsf( dotLR + EPSILON ) / sqrtf( enrL * enrR + EPSILON ); + c = ( enrL + DELTA ) / ( enrR + DELTA ); + c_ILD = ( c - 1 ) / ( c + 1 ); + } + + /* update of long-term ILD and LR correlation factors for stereo CNA */ + if ( !hFdCngDec->first_cna_noise_updated ) + { + hFdCngDec->cna_LR_LT = c_LR; + hFdCngDec->cna_ILD_LT = c_ILD; + } + else + { + hFdCngDec->cna_LR_LT = STEREO_CNA_LR_CORR_LT_FILT * hFdCngDec->cna_LR_LT + ( 1 - STEREO_CNA_LR_CORR_LT_FILT ) * c_LR; + hFdCngDec->cna_ILD_LT = STEREO_CNA_ILD_LT_FILT * hFdCngDec->cna_ILD_LT + ( 1 - STEREO_CNA_ILD_LT_FILT ) * c_ILD; + } + + set_f( hFdCngDec->cna_g_state, hFdCngDec->cna_ILD_LT, hFdCngDec->cna_nbands ); + set_f( hFdCngDec->cna_cm, hFdCngDec->cna_LR_LT, hFdCngDec->cna_nbands ); + } + + /* Soft VAD for stereo CNA */ + if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( !hFdCngDec->first_cna_noise_updated ) + { + hFdCngDec->cna_act_fact = 0.0f; + } + else + { + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + /* quickly decrease in TD stereo mode */ + hFdCngDec->cna_act_fact *= 0.7f; + } + else if ( sts[0]->VAD > hFdCngDec->cna_act_fact ) + { + /* quickly increase during active frames in DFT stereo mode */ + hFdCngDec->cna_act_fact = 0.7f * hFdCngDec->cna_act_fact + 0.3f * sts[0]->VAD; + } + else + { + /* slowly decrease during inactive frames in DFT stereo mode */ + hFdCngDec->cna_act_fact = 0.95f * hFdCngDec->cna_act_fact + 0.05f * sts[0]->VAD; + } + } + } + + return; +} + + +/*------------------------------------------------------------------- + * stereo_cng_init_dec() + * + * Initialized stereo CNG + *-------------------------------------------------------------------*/ + +void stereo_cng_init_dec( + STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: stereo CNG decoder structure */ + const int16_t *frameSize /* i : pointer to frameSize of channel 0 to be used for channel 1 */ +) +{ + hStereoCng->prev_sid_nodata = 0; + set_f( hStereoCng->coh, 0.5f, STEREO_DFT_BAND_MAX + 1 ); + set_zero( hStereoCng->cm, STEREO_DFT_BAND_MAX ); + hStereoCng->first_SID = 1; + hStereoCng->first_SID_after_TD = 0; + hStereoCng->active_frame_counter = 0; + hStereoCng->xfade_frame_counter = 0; + hStereoCng->xfade_length = 0; + hStereoCng->nr_dft_frames = 0; + hStereoCng->nr_corr_frames = 0; + hStereoCng->nr_sid_frames = 0; + set_f( hStereoCng->olapBufferSynth22, 0.0f, FFTLEN ); + hStereoCng->flag_cna_fade = 0; + set_zero( hStereoCng->maskingNoiseS, L_FRAME16k ); + hStereoCng->enableSecCNA = 0; + hStereoCng->c_PS_LT = 0.5f; + hStereoCng->frameSize = frameSize; + hStereoCng->last_act_element_mode = IVAS_CPE_DFT; + + return; +} diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c new file mode 100644 index 0000000000..fbdfab0372 --- /dev/null +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -0,0 +1,3052 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_com.h" +#include "rom_dec.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define STEFI_DELAY_IND( d, buf_ind ) ( ( buf_ind ) + STEREO_DFT_PAST_MAX - ( d ) + 1 ) % STEREO_DFT_PAST_MAX + +#define STEREO_DFT_RES_RATIO_LIMIT 0.18f +#define STEREO_DFT_LT_PREDGAIN_UPD 0.1f +#define STEREO_DFT_VR_PREDGAIN_UPD 0.1f +#define STEREO_DFT_STEFFI_PG_THRESHOLD 0.6f +#define STEREO_DFT_STEFFI_RATIO_UP_HIGH 0.03f +#define STEREO_DFT_STEFFI_RATIO_DOWN_HIGH 0.05f +#define STEREO_DFT_STEFFI_RATIO_UP_LOW 0.1f +#define STEREO_DFT_STEFFI_RATIO_DOWN_LOW 0.001f +#define STEREO_DFT_STEFFI_DELAY_SHORT 2 +#define STEREO_DFT_STEFFI_DELAY_LONG 4 +#define STEREO_DFT_STEFFI_DELAY_OFFSET 2 +#define STEREO_DFT_STEFFI_GAIN_REST_AMT 0.6f +#define STEREO_DFT_STEFFI_GAIN_AMP 1.0f + + +#define STEREO_DFT_BPF_SIZE 40 /* BPF: Number of weights for BPF in DFT: 40*40Hz=1.6kHz*/ + + +/*------------------------------------------------------------------------- + * Local function prototypes + *-------------------------------------------------------------------------*/ + +static void stereo_dft_dec_open( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, const int32_t output_Fs ); + +static void stereo_dft_compute_td_stefi_params( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, const float samp_ratio ); + +static void stereo_dft_adapt_sf_delay( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, float *pPredGain ); + + +/*------------------------------------------------------------------------- + * stereo_dft_dequantize_res_gains() + * + * joint dequantizer for side channel prediction gain and residual energy + *-------------------------------------------------------------------------*/ + +static void stereo_dft_dequantize_res_gains( + int16_t *ind1, + int16_t *ind2, + float *gout, + float *rout, + const int16_t N ) +{ + int16_t i, index; + + for ( i = 0; i < N; i++ ) + { + /* Ensure the indices are within range -- may go out of range due to frame loss */ + check_bounds_s( &ind1[i], 0, 30 ); + check_bounds_s( &ind2[i], 0, 7 ); + index = ( ( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 ) << 3 ) + ind2[i]; + gout[i] = ind1[i] < 15 ? -dft_res_gains_q[index][0] : dft_res_gains_q[index][0]; + rout[i] = dft_res_gains_q[index][1]; + } + + return; +} + +/*--------------------------------------------------------------------------- + * stereo_dft_dequantize_res_gains_f() + * + * returns interepolated values for non-integer indices + *---------------------------------------------------------------------------*/ + +static void stereo_dft_dequantize_res_gains_f( + float *ind1, + float *ind2, + float *gout, + float *rout, + const int16_t N ) +{ + int16_t i, i1, j1, sign, ji, ij; + float fi, fj; + + for ( i = 0; i < N; i++ ) + { + /* Ensure the indices are within range -- may go out of range due to frame loss */ + check_bounds( &ind1[i], 0, 31 ); + check_bounds( &ind2[i], 0, 7 ); + + /* compensate for the offset and extract/remove sign of first index */ + sign = ind1[i] < 15 ? -1 : 1; + i1 = (int16_t) floor( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 ); + fi = ( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 ) - i1; + + j1 = (int16_t) floor( ind2[i] ); + fj = ind2[i] - j1; + + /* choose base indices for interpolation */ + ji = min( fj < .5 ? j1 : j1 + 1, 7 ); + ij = min( fi < .5 ? i1 : i1 + 1, 15 ); + + /* interpolate values from table */ + if ( i1 < 15 ) + { + gout[i] = sign * ( ( 1 - fi ) * dft_res_gains_q[( i1 << 3 ) + ji][0] + fi * dft_res_gains_q[( ( i1 + 1 ) << 3 ) + ji][0] ); + } + else + { + gout[i] = sign * dft_res_gains_q[120 + ji][0]; + } + + if ( j1 < 7 ) + { + rout[i] = ( 1 - fj ) * dft_res_gains_q[( ij << 3 ) + j1][1] + fj * dft_res_gains_q[( ij << 3 ) + j1 + 1][1]; + } + else + { + rout[i] = dft_res_gains_q[( ij << 3 ) + 7][1]; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dequantize_ipd() + * + * Dequantize IPDs + *-------------------------------------------------------------------------*/ + +static void stereo_dft_dequantize_ipd( + int16_t *ind, + float *out, + const int16_t N, + const int16_t bits ) +{ + int16_t i; + float delta; + + if ( bits == 2 ) /* 2-bit phase quantization for the highest frequency band only */ + { + delta = EVS_PI / 2.f; + } + else if ( bits == 3 ) + { + delta = EVS_PI / 4.f; + } + else if ( bits == 4 ) + { + delta = EVS_PI / 8.f; + } + else + { + delta = EVS_PI / 4.f; + assert( 0 ); + } + + for ( i = 0; i < N; i++ ) + { + out[i] = ind[i] * delta - EVS_PI; + } + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dequantize_itd() + * + * Dequantize ITDs + *-------------------------------------------------------------------------*/ + +void stereo_dft_dequantize_itd( + int16_t *ind, + float *out, + const int32_t output_Fs ) +{ + int16_t itd; + int16_t mask; + + mask = ( 1 << ( STEREO_DFT_ITD_NBITS - 1 ) ) - 1; + itd = ( ind[0] & mask ) + STEREO_DFT_ITD_MIN; + + if ( ( ind[0] >> ( STEREO_DFT_ITD_NBITS - 1 ) ) ) + { + itd *= -1; + } + assert( ( ABSVAL( itd ) <= STEREO_DFT_ITD_MAX ) && ( ABSVAL( itd ) >= STEREO_DFT_ITD_MIN ) ); + + /*Convert back @ fs*/ + *out = (float) ( itd * output_Fs ) / ( (float) ( STEREO_DFT_ITD_FS ) ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_create() + * + * Create DFT stereo handle + *------------------------------------------------------------------------*/ + +ivas_error stereo_dft_dec_create( + STEREO_DFT_DEC_DATA_HANDLE *hStereoDft, /* i/o: decoder DFT stereo handle */ + const int32_t element_brate, /* i : element bitrate */ + const int32_t output_Fs, /* i : output sampling rate */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ + STEREO_DFT_DEC_DATA_HANDLE hStereoDft_loc; + int16_t tmpS; + + if ( *hStereoDft != NULL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: DFT Stereo memory already allocated\n" ); + } + + if ( ( hStereoDft_loc = (STEREO_DFT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo\n" ) ); + } + + if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo Config\n" ) ); + } + + if ( ( hStereoDft_loc->hBpf = (BPF_DEC_HANDLE) count_malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF handle\n" ) ); + } + + if ( ( hStereoDft_loc->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); + } + + hStereoDft_loc->hConfig->force_mono_transmission = 0; + + if ( sba_dirac_stereo_flag ) + { + ivas_sba_dirac_stereo_config( hStereoDft_loc->hConfig ); + } + else + { + stereo_dft_config( hStereoDft_loc->hConfig, element_brate, &tmpS, &tmpS ); + } + + stereo_dft_dec_open( hStereoDft_loc, output_Fs ); + + *hStereoDft = hStereoDft_loc; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_open() + * + * Open DFT decoder stereo handle + *-------------------------------------------------------------------------*/ + +static void stereo_dft_dec_open( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + + /*Sizes*/ + hStereoDft->N = (int16_t) ( STEREO_DFT_HOP_MAX * output_Fs / 48000 ); + + /*Init. DFT sizes*/ + hStereoDft->NFFT = (int16_t) ( STEREO_DFT32MS_N_MAX * output_Fs / 48000 ); + + hStereoDft->dft_trigo_8k = dft_trigo_32k; + hStereoDft->dft_trigo_12k8 = dft_trigo_12k8; + hStereoDft->dft_trigo_16k = dft_trigo_32k; + + hStereoDft->dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * output_Fs ) / 48000 ); + hStereoDft->win232ms_8k = dft_win232ms_8k; + hStereoDft->win232ms_12k8 = dft_win232ms_12k8; + hStereoDft->win232ms_16k = dft_win232ms_16k; + + hStereoDft->dft32ms_ovl2 = (int16_t) ( ( STEREO_DFT32MS_OVL2_MAX * output_Fs ) / 48000 ); + hStereoDft->win32ms_8k = dft_win232ms_8k + 1; + hStereoDft->win32ms_12k8 = dft_win232ms_12k8 + 1; + hStereoDft->win32ms_16k = dft_win232ms_16k + 1; + + if ( output_Fs == 16000 ) + { + hStereoDft->dft_trigo = dft_trigo_32k; + hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; + hStereoDft->win232ms = dft_win232ms_16k; + hStereoDft->win32ms = dft_win232ms_16k + 1; + } + else if ( output_Fs == 32000 ) + { + hStereoDft->dft_trigo = dft_trigo_32k; + hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; + hStereoDft->win232ms = dft_win232ms_32k; + hStereoDft->win32ms = dft_win232ms_32k + 1; + } + else + { + assert( output_Fs == 48000 ); + hStereoDft->dft_trigo = dft_trigo_48k; + hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_48k_STEP; + hStereoDft->win232ms = dft_win232ms_48k; + hStereoDft->win32ms = dft_win232ms_48k + 1; + } + + hStereoDft->win_8k = dft_win_8k; + + /*Bands: find the number of bands, Nyquist freq. is not taken into account*/ + set_s( hStereoDft->band_res, hStereoDft->hConfig->band_res, STEREO_DFT_DEC_DFT_NB ); + + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[0], hStereoDft->NFFT, DEC ); + hStereoDft->hb_stefi_delay = NS2SA( output_Fs, STEREO_DFT_TD_STEFI_DELAY_NS ); + + + /* reset DFT stereo memories */ + stereo_dft_dec_reset( hStereoDft ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_reset() + * + * Reset DFT stereo memories + *------------------------------------------------------------------------*/ + +void stereo_dft_dec_reset( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: decoder DFT stereo handle */ +) +{ + int16_t i; + + /*Configuration*/ + set_s( hStereoDft->prm_res, hStereoDft->hConfig->prm_res, STEREO_DFT_DEC_DFT_NB ); + + /* SIDE_GAIN */ + set_s( hStereoDft->side_gain_index, 15, STEREO_DFT_BAND_MAX ); + set_s( hStereoDft->side_gain_index_previous, 15, STEREO_DFT_BAND_MAX ); + + /*IPD*/ + + /*ITD*/ + + /*residual prediction*/ + set_s( hStereoDft->res_pred_mode, hStereoDft->hConfig->res_pred_mode, STEREO_DFT_DEC_DFT_NB ); + for ( i = 0; i < STEREO_DFT_PAST_MAX; i++ ) + { + set_zero( hStereoDft->DFT_past_DMX[i], STEREO_DFT32MS_N_32k ); + set_zero( hStereoDft->past_res_pred_gain[i], STEREO_DFT_BAND_MAX ); + } + + hStereoDft->past_DMX_pos = 0; + + set_s( hStereoDft->res_pred_index_previous, 0, STEREO_DFT_BAND_MAX ); + + + for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) + { + hStereoDft->res_gains_ind[0][i] = 15.f; + } + + set_zero( hStereoDft->res_gains_ind[1], STEREO_DFT_BAND_MAX ); + + /*residual coding*/ + set_s( hStereoDft->res_cod_mode, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_DEC_DFT_NB ); + hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->hConfig->res_cod_mode]; + set_zero( hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); + + hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); + + hStereoDft->stab_fac_smooth_res = 0.f; + bass_psfilter_init( hStereoDft->hBpf ); + + tcxltp_dec_init( hStereoDft->hTcxLtpDec, 0, MODE1, IVAS_CPE_DFT, PIT_MAX, 12800 ); + + hStereoDft->reverb_flag = 0; + + hStereoDft->bpf_error_signal_last = 0.0f; + hStereoDft->bpf_error_ratio_mem = 1.0f; + hStereoDft->res_hb_nrg_mem = 0.0f; + /*reset parameters*/ + set_zero( hStereoDft->side_gain, STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX ); + set_zero( hStereoDft->gipd, STEREO_DFT_DEC_DFT_NB ); + set_zero( hStereoDft->itd, STEREO_DFT_DEC_DFT_NB ); + set_zero( hStereoDft->res_pred_gain, STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX ); + + hStereoDft->wasTransient = 0; + hStereoDft->attackPresent = 0; + + hStereoDft->lt_pred_gain = 0.0f; + hStereoDft->lt_pred_gain_variation = 0.0f; + hStereoDft->lt_var_mean_ratio = STEREO_DFT_RES_RATIO_LIMIT; + hStereoDft->stefi_short_gain = 1.0f; + hStereoDft->stefi_long_gain = 0.0f; + + set_zero( hStereoDft->g_state, STEREO_DFT_BAND_MAX ); + + init_basic_allpass( &hStereoDft->ap1, dft_ap_gains[0], dft_ap_delays[0] ); + init_basic_allpass( &hStereoDft->ap2, dft_ap_gains[1], dft_ap_delays[1] ); + init_basic_allpass( &hStereoDft->ap3, dft_ap_gains[2], dft_ap_delays[2] ); + + set_zero( hStereoDft->ap_delay_mem, NS2SA( 16000, DELAY_BWE_TOTAL_NS ) ); + set_zero( hStereoDft->ap_fade_mem, STEREO_DFT_ALLPASS_FADELEN_16k ); + hStereoDft->ap_wasTransient = 0; + set_zero( hStereoDft->smooth_dmx_nrg, STEREO_DFT_BAND_MAX ); + set_zero( hStereoDft->smooth_res_nrg, STEREO_DFT_BAND_MAX ); + + set_s( hStereoDft->core_hist, ACELP_CORE, STEREO_DFT_CORE_HIST_MAX ); + + set_zero( hStereoDft->hb_stefi_sig, L_FRAME48k + NS2SA( 48000, STEREO_DFT_TD_STEFI_DELAY_NS ) ); + set_zero( hStereoDft->hb_nrg, STEREO_DFT_CORE_HIST_MAX ); + set_zero( hStereoDft->td_gain, STEREO_DFT_CORE_HIST_MAX ); + + /* PLC parameters */ + set_zero( hStereoDft->res_mem, STEREO_DFT_RES_BW_MAX ); + hStereoDft->time_offs = 0; + hStereoDft->past_dmx_nrg = 0; + hStereoDft->sg_mean = 0.0f; + hStereoDft->sg_mem_corrupt = 0; + hStereoDft->recovery_flg = 0; + + for ( i = 0; i < SBA_DIRAC_STEREO_NUM_BANDS; i++ ) + { + set_zero( hStereoDft->smooth_buf[i], SBA_DIRAC_NRG_SMOOTH_LONG + 1 ); + } + set_zero( hStereoDft->smooth_fac[0], SBA_DIRAC_STEREO_NUM_BANDS ); + set_zero( hStereoDft->smooth_fac[1], SBA_DIRAC_STEREO_NUM_BANDS ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_update() + * + * Update DFT memories for new frame + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec_update( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const int16_t output_frame, /* i : output frame length */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ + int16_t b, i, k_offset; + + /* Initialization */ + k_offset = STEREO_DFT_OFFSET; /*Add an offset*/ + + /* Update parameters */ + for ( i = 0; i < k_offset * STEREO_DFT_BAND_MAX; i++ ) + { + hStereoDft->side_gain[i] = hStereoDft->side_gain[STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX + i]; + hStereoDft->res_pred_gain[i] = hStereoDft->res_pred_gain[STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX + i]; + } + + for ( i = 0; i < k_offset; i++ ) + { + hStereoDft->gipd[i] = hStereoDft->gipd[STEREO_DFT_NBDIV + i]; + } + + /* Update configuration memories */ + for ( i = 0; i < k_offset; i++ ) + { + hStereoDft->band_res[i] = hStereoDft->band_res[i + STEREO_DFT_NBDIV]; + hStereoDft->prm_res[i] = hStereoDft->prm_res[i + STEREO_DFT_NBDIV]; + hStereoDft->itd[i] = hStereoDft->itd[STEREO_DFT_NBDIV + i]; + hStereoDft->res_cod_mode[i] = hStereoDft->res_cod_mode[i + STEREO_DFT_NBDIV]; + hStereoDft->res_pred_mode[i] = hStereoDft->res_pred_mode[i + STEREO_DFT_NBDIV]; + } + + /* Load new configurations */ + set_s( hStereoDft->band_res + k_offset, hStereoDft->hConfig->band_res, STEREO_DFT_NBDIV ); + set_s( hStereoDft->prm_res + k_offset, hStereoDft->hConfig->prm_res, STEREO_DFT_NBDIV ); + set_s( hStereoDft->res_pred_mode + k_offset, hStereoDft->hConfig->res_pred_mode, STEREO_DFT_NBDIV ); + set_s( hStereoDft->res_cod_mode + k_offset, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_NBDIV ); + + /*Update attack info*/ + if ( hStereoDft->attackPresent ) + { + hStereoDft->wasTransient = 1; + } + else if ( hStereoDft->wasTransient ) + { + hStereoDft->wasTransient = 0; + } + + for ( i = STEREO_DFT_CORE_HIST_MAX - 1; i > 0; i-- ) + { + hStereoDft->core_hist[i] = hStereoDft->core_hist[i - 1]; + } + + mvr2r( hStereoDft->hb_stefi_sig + output_frame, hStereoDft->hb_stefi_sig, hStereoDft->hb_stefi_delay ); + mvr2r( hStereoDft->hb_nrg, hStereoDft->hb_nrg + 1, STEREO_DFT_CORE_HIST_MAX - 1 ); + mvr2r( hStereoDft->td_gain, hStereoDft->td_gain + 1, STEREO_DFT_CORE_HIST_MAX - 1 ); + + if ( sba_dirac_stereo_flag ) + { + /* buffer update, push back by 2 because of 2 subframes */ + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + for ( i = SBA_DIRAC_NRG_SMOOTH_LONG; i > 1; i-- ) + { + hStereoDft->smooth_buf[b][i] = hStereoDft->smooth_buf[b][i - 2]; + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_destroy() + * + * destroy DFT stereo handle + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec_destroy( + STEREO_DFT_DEC_DATA_HANDLE *hStereoDft_glob /* i/o: decoder DFT stereo handle */ +) +{ + STEREO_DFT_DEC_DATA_HANDLE hStereoDft; + + hStereoDft = *hStereoDft_glob; + + if ( hStereoDft->hConfig != NULL ) + { + count_free( hStereoDft->hConfig ); + hStereoDft->hConfig = NULL; + } + + if ( hStereoDft->hBpf != NULL ) + { + count_free( hStereoDft->hBpf ); + hStereoDft->hBpf = NULL; + } + + if ( hStereoDft->hTcxLtpDec != NULL ) + { + count_free( hStereoDft->hTcxLtpDec ); + hStereoDft->hTcxLtpDec = NULL; + } + + count_free( hStereoDft ); + hStereoDft = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_analyze() + * + * DFT analysis on a 20ms frame + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec_analyze( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const float *input, /* i : input signal */ + float out_DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ + const int16_t chan, /* i : channel number */ + const int16_t input_frame, /* i : input frame size */ + const int16_t output_frame, /* i : output frame size */ + const DFT_STEREO_DEC_ANA_TYPE ana_type, /* i : type of signal to analyse */ + const int16_t k_offset, /* i : offset of DFT */ + const int16_t delay /* i : delay in samples for input signal */ +) +{ + int16_t i, k; + STEREO_DFT_DEC_DATA_HANDLE hStereoDft; + float *pInput, *pInput_buff; + float *mem, input_buff[STEREO_DFT32MS_OVL_MAX + L_FRAME48k]; + float DFT[STEREO_DFT32MS_N_MAX], *pDFT_out; + int16_t NFFT, NFFT_core, ovl, zp; +#if defined( DEBUG_MODE_DFT ) || defined( DEBUG_STEREO_DFT_NOCORE ) + int16_t N; +#endif + int16_t offset; + float fac; + const float *trigo, *win_left, *win_right, *win2; + float trigo_dec[STEREO_DFT32MS_N_MAX / 2 + 1]; + int16_t trigo_step; + int32_t inputFs; + int16_t delay_dec; + int16_t mem_size; + int16_t ovl2; + + wmops_sub_start( "DFT_analysis" ); + + hStereoDft = hCPE->hStereoDft; + + assert( output_frame == STEREO_DFT_NBDIV * hStereoDft->N ); + + /*-----------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + if ( input_frame == output_frame ) + { + trigo = hStereoDft->dft_trigo; + trigo_step = hStereoDft->dft_trigo_step * STEREO_DFT_TRIGO_DEC_STEP; + win_right = hStereoDft->win32ms; + win_left = hStereoDft->win32ms; + win2 = hStereoDft->win232ms; + + if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) + { + assert( ( chan == 0 ) && "DFT stereo: BPF memory only for M channel" ); + mem = hCPE->input_mem_BPF[chan]; + } + else if ( ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_LB_ADD ) + { + mem = hCPE->input_mem_LB[chan]; + } + else + { + mem = hCPE->input_mem[chan]; + } + } + else if ( input_frame == L_FRAME ) + { + trigo = hStereoDft->dft_trigo_12k8; + trigo_step = STEREO_DFT_TRIGO_SRATE_12k8_STEP * STEREO_DFT_TRIGO_DEC_STEP; + win_right = hStereoDft->win32ms_12k8; + win_left = hStereoDft->win32ms_12k8; + win2 = hStereoDft->win232ms_12k8; + + if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) + { + assert( ( chan == 0 ) && "DFT stereo: BPF memory only for M channel" ); + mem = hCPE->input_mem_BPF[chan]; + } + else if ( ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_LB_ADD ) + { + mem = hCPE->input_mem_LB[chan]; + } + else + { + assert( ( chan == 1 ) && "12.8kHz sampling rate only for second channel, i.e. residual coding or allpass signal" ); + mem = hCPE->input_mem[chan]; + } + } + else if ( input_frame == L_FRAME16k ) + { + trigo = hStereoDft->dft_trigo_16k; + trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP * STEREO_DFT_TRIGO_DEC_STEP; + win_right = hStereoDft->win32ms_16k; + win_left = hStereoDft->win32ms_16k; + win2 = hStereoDft->win232ms_16k; + + if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) + { + assert( ( chan == 0 ) && "DFT stereo: BPF memory only for M channel" ); + mem = hCPE->input_mem_BPF[chan]; + } + else if ( ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_LB_ADD ) + { + mem = hCPE->input_mem_LB[chan]; + } + else + { + assert( ( chan == 1 ) && hCPE->hStereoDft->hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF && "16kHz sampling rate only for second channel with allpass signal" ); + mem = hCPE->input_mem[chan]; + } + } + else if ( input_frame == L_FRAME8k ) + { + assert( ( chan == 1 ) && "DFT stereo: 8kHz analysis only for residual coding" ); + trigo = hStereoDft->dft_trigo_8k; + trigo_step = STEREO_DFT_TRIGO_SRATE_8k_STEP * STEREO_DFT_TRIGO_DEC_STEP; + win_right = hStereoDft->win32ms_8k; + win_left = hStereoDft->win32ms_8k; + win2 = hStereoDft->win232ms_8k; + mem = hCPE->input_mem[chan]; + } + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error in DFT stereo: sampling rate not supported" ); + mem = NULL; /* to avoid compilation warning */ + trigo = NULL; /* to avoid compilation warning */ + trigo_step = -1; /* to avoid compilation warning */ + win_right = NULL; /* to avoid compilation warning */ + win_left = NULL; /* to avoid compilation warning */ + win2 = NULL; /* to avoid compilation warning */ + } + + inputFs = input_frame * FRAMES_PER_SEC; + delay_dec = NS2SA( inputFs, STEREO_DFT32MS_OVL_NS ); + zp = NS2SA( inputFs, STEREO_DFT32MS_ZP_NS ); + ovl = NS2SA( inputFs, STEREO_DFT32MS_OVL_NS ); +#ifdef DEBUG_MODE_DFT + N = NS2SA( inputFs, STEREO_DFT32MS_HOP_NS ); +#endif + NFFT = NS2SA( inputFs, STEREO_DFT32MS_N_NS ); + fac = (float) ( hStereoDft->NFFT ) / (float) ( NFFT ); + ovl2 = NS2SA( inputFs, STEREO_DFT32MS_OVL2_NS ); + + /* Offset for the time buffers */ + assert( ( delay >= -NS2SA( input_frame * FRAMES_PER_SEC, STEREO_DFT_DELAY_DEC_BWE_NS + STEREO_DFT_OVL_NS / 2 ) ) && ( delay <= NS2SA( input_frame * FRAMES_PER_SEC, STEREO_DFT_OVL_NS ) ) ); + mem_size = delay_dec + delay; + + /* Update buffers */ + mvr2r( mem, input_buff, mem_size ); + mvr2r( input, input_buff + mem_size, input_frame ); + mvr2r( input_buff + input_frame, mem, mem_size ); + pInput_buff = input_buff; + + if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + wmops_sub_end(); + return; + } + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp[L_FRAME48k]; + char file_name[50] = { 0 }; +#ifdef DEBUG_STEREO_DFT_NOCORE + if ( ana_type == DFT_STEREO_DEC_ANA_NOCORE && delay == 0 ) + { + sprintf( file_name, "./res/stereo_dft_enc_M_S_%d_c%d_b0.pcm", input_frame * FRAMES_PER_SEC, chan ); + dbgread( tmp, sizeof( int16_t ), 2 * N, file_name ); + for ( i = 0; i < input_frame; i++ ) + { + pInput_buff[mem_size + i] = (float) ( tmp[i] ); + } + mvr2r( input_buff + input_frame, mem, mem_size ); + } +#endif + offset = 0; + pInput = pInput_buff + offset; + for ( i = 0; i < 2 * N; i++ ) + { + tmp[i] = (int16_t) ( pInput[i] + 0.5f ); + } + if ( ana_type != DFT_STEREO_DEC_ANA_BPF ) + { + sprintf( file_name, "./res/stereo_dft_dec_M_S_c%d_%d.pcm", input_frame * FRAMES_PER_SEC, chan ); + } + else + { + sprintf( file_name, "./res/stereo_dft_dec_BPF_c%d_%d.pcm", input_frame * FRAMES_PER_SEC, chan ); + } + dbgwrite( tmp, sizeof( int16_t ), 2 * N, 1, file_name ); + } +#endif + + /*-----------------------------------------------------------------* + * DFT Analysis: loop over frame + *-----------------------------------------------------------------*/ + + assert( k_offset <= STEREO_DFT_NBDIV ); + + for ( i = 0; i < NFFT / 4; i++ ) + { + trigo_dec[i] = trigo[i * trigo_step]; + trigo_dec[NFFT / 2 - i] = trigo[i * trigo_step]; + } + trigo_dec[NFFT / 4] = trigo[NFFT / 4 * trigo_step]; + + for ( k = 0; k < STEREO_DFT_NBDIV - k_offset; k++ ) + { + set_f( DFT, 0, STEREO_DFT32MS_N_MAX ); + if ( k == 0 ) + { + offset = 0; + } + else + { + /* If OVL2 = OVL offset = 10ms */ + offset = NS2SA( inputFs, STEREO_DFT32MS_WIN_CENTER_NS - STEREO_DFT32MS_OVL2_NS / 2 ); + } + + pInput = pInput_buff + offset; + pDFT_out = out_DFT[chan] + k * STEREO_DFT32MS_N_MAX; + + /*Forwards FFT: L and R*/ + /* Zero Padding & Flat Portion */ + mvr2r( pInput, DFT + zp, NFFT - 2 * zp ); + + /* Overlapping portions */ + if ( k == 0 ) + { + for ( i = 0; i < ovl; i++ ) + { + DFT[i + zp] *= win_left[STEREO_DFT32MS_STEP * i]; + } + for ( i = 0; i < ovl2; i++ ) + { + DFT[NFFT - zp - 1 - i] *= win2[i]; + } + } + else + { + for ( i = 0; i < ovl2; i++ ) + { + DFT[i + zp] *= win2[i]; + } + for ( i = 0; i < ovl; i++ ) + { + DFT[NFFT - zp - i - 1] *= win_right[STEREO_DFT32MS_STEP * i]; + } + } + + rfft( DFT, trigo_dec, NFFT, -1 ); + + /*Resampling: filtering+scaling*/ + if ( ana_type == DFT_STEREO_DEC_ANA_FB || ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_NOCORE ) + { + pDFT_out[0] = DFT[0] * fac; /*DC*/ + if ( NFFT == hStereoDft->NFFT ) /*Nyquist*/ + { + pDFT_out[1] = DFT[1] * fac; + } + else + { + pDFT_out[1] = 0.f; + } + for ( i = 2; i < NFFT; i++ ) + { + pDFT_out[i] = DFT[i] * fac; + } + for ( i = NFFT; i < hStereoDft->NFFT; i++ ) + { + pDFT_out[i] = 0.f; + } + } + else if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) + { + pDFT_out[0] -= DFT[0] * fac * dft_bpf_weights[0]; + + for ( i = 1; i < STEREO_DFT_BPF_SIZE; i++ ) + { + pDFT_out[2 * i] -= DFT[2 * i] * fac * dft_bpf_weights[i]; + pDFT_out[2 * i + 1] -= DFT[2 * i + 1] * fac * dft_bpf_weights[i]; + } + } + else if ( ana_type == DFT_STEREO_DEC_ANA_HB_ADD ) + { + NFFT_core = NS2SA( hCPE->hCoreCoder[0]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_N_NS ); + + for ( i = NFFT_core; i < NFFT; i++ ) + { + pDFT_out[i] += DFT[i] * fac; + } + } + else + { + pDFT_out[0] += DFT[0] * fac; /*DC*/ + if ( NFFT == hStereoDft->NFFT ) /*Nyquist*/ + { + pDFT_out[1] += DFT[1] * fac; + } + for ( i = 2; i < NFFT; i++ ) + { + pDFT_out[i] += DFT[i] * fac; + } + } + } + + wmops_sub_end(); + return; +} + +/*------------------------------------------------------------------------- + * stereo_dft_dec_synthesize() + * + * Inverse DFT on a 20ms frame + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec_synthesize( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i : DFT buffers */ + const int16_t chan, /* i : channel number */ + float output[L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t i, k; + int16_t offset; + STEREO_DFT_DEC_DATA_HANDLE hStereoDft; + float *p_DFT; + const float *win, *win2; + float trigo_dec[STEREO_DFT32MS_N_MAX / 2 + 1]; + int16_t trigo_step; + int16_t ovl, zp, NFFT; + int32_t outputFs; + int16_t ovl2, flat_portion_end; + float ola_buff[STEREO_DFT32MS_OVL2_MAX]; + int16_t moffset; + wmops_sub_start( "DFT_synthesis" ); + + /*-----------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + hStereoDft = hCPE->hStereoDft; + + outputFs = output_frame * FRAMES_PER_SEC; + + zp = NS2SA( outputFs, STEREO_DFT32MS_ZP_NS ); + ovl = NS2SA( outputFs, STEREO_DFT32MS_OVL_NS ); + win = hStereoDft->win32ms; + NFFT = NS2SA( outputFs, STEREO_DFT32MS_N_NS ); + ovl2 = NS2SA( outputFs, STEREO_DFT32MS_OVL2_NS ); + flat_portion_end = NS2SA( outputFs, STEREO_DFT32MS_WIN_CENTER_NS - STEREO_DFT32MS_OVL2_NS / 2 ); + win2 = hStereoDft->win232ms; + + p_DFT = DFT[chan]; + set_f( output, 0, NS2SA( outputFs, FRAME_SIZE_NS ) ); + + /* deactivating the spectrum scrambling on active speech */ + if ( ( chan == 0 && hCPE->hCoreCoder[0]->last_coder_type > UNVOICED ) || hCPE->last_element_mode == IVAS_CPE_MDCT || hCPE->last_element_mode < IVAS_CPE_DFT ) + { + hCPE->stereo_switching_counter = 10; + } + + if ( hCPE->stereo_switching_counter == 0 ) + { + /* Set the level of dispersion */ + hCPE->NbFrameMod = (int16_t) ( 12.0f * max( -0.1f, min( 0.4, hCPE->lt_es_em ) ) + 1.2f + 0.5f ); /* -0.1: -0.4 ; -0.1 -> 0, 0.4 -> 6*/ + } + moffset = max( 0, 6 - hCPE->NbFrameMod ); + + /*-----------------------------------------------------------------* + * Synthesis + *-----------------------------------------------------------------*/ + + trigo_step = hStereoDft->dft_trigo_step * STEREO_DFT_TRIGO_DEC_STEP; + for ( i = 0; i < NFFT / 4; i++ ) + { + trigo_dec[i] = hStereoDft->dft_trigo[i * trigo_step]; + trigo_dec[NFFT / 2 - i] = hStereoDft->dft_trigo[i * trigo_step]; + } + trigo_dec[NFFT / 4] = hStereoDft->dft_trigo[NFFT / 4 * trigo_step]; + + for ( k = 0; k < STEREO_DFT_NBDIV; k++ ) + { + /* scrambling the spectrum */ + if ( hCPE->stereo_switching_counter <= 6 && chan == 1 && ( hCPE->lt_es_em > -0.4f || hCPE->NbFrameMod > 4 ) ) + { + for ( i = 3; i < NFFT - moffset - 1; i++ ) + { + p_DFT[i] = -p_DFT[i + moffset + 1]; + } + } + else if ( hCPE->stereo_switching_counter < 7 && ( hCPE->lt_es_em > 0.2f || hCPE->NbFrameMod > 4 ) ) + { + for ( i = 16 - hCPE->NbFrameMod; i < NFFT - moffset - 1; i++ ) + { + p_DFT[i - 2] = -p_DFT[i + moffset + 1]; + } + } + + /*IFFT*/ + rfft( p_DFT, trigo_dec, NFFT, +1 ); + + if ( k == 0 ) + { + offset = 0; + + /* Left OLA - 3.125ms */ + for ( i = 0; i < ovl; i++ ) + { + output[offset + i] = hCPE->output_mem[chan][i] + p_DFT[zp + i] * win[STEREO_DFT32MS_STEP * i]; + } + /* Flat Portion */ + for ( i = ovl; i < flat_portion_end; i++ ) + { + output[offset + i] = p_DFT[zp + i]; + } + /* Right OLA */ + for ( i = 0; i < ovl2; i++ ) + { + ola_buff[i] = win2[ovl2 - 1 - i] * p_DFT[NFFT - zp - ovl2 + i]; + } + } + else + { + /* If OVL2 = OVL offset = 10ms */ + offset = flat_portion_end; + + /* Left OLA */ + for ( i = 0; i < ovl2; i++ ) + { + output[offset + i] = ola_buff[i] + p_DFT[zp + i] * win2[i]; + } + /* Flat Portion */ + for ( i = ovl2; i < NFFT - 2 * zp - ovl; i++ ) + { + output[offset + i] = p_DFT[zp + i]; + } + /* Right OLA - 3.125ms */ + for ( i = 0; i < ovl; i++ ) + { + hCPE->output_mem[chan][i] = win[STEREO_DFT32MS_STEP * ( ovl - 1 - i )] * p_DFT[NFFT - zp - ovl + i]; + } + } + + p_DFT += STEREO_DFT32MS_N_MAX; + } + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp[1024]; + char file_name[50] = { 0 }; + + for ( i = 0; i < output_frame; i++ ) + { + tmp[i] = (int16_t) ( output[i] + 0.5f ); + } + sprintf( file_name, "./res/stereo_dft_ch%d_output.pcm", chan ); + dbgwrite( tmp, sizeof( int16_t ), output_frame, 1, file_name ); + } +#endif + + wmops_sub_end(); + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec() + * + * DFT-based stereo main processing function + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + Decoder_State *st0, /* i/o: decoder state structure */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ + float *input_mem, /* i/o: mem of buffer DFT analysis */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ + int16_t i, k, b, N_div, stop; + float DFT_L[STEREO_DFT32MS_N_MAX]; + float DFT_R[STEREO_DFT32MS_N_MAX]; + float DFT_PRED_RES[STEREO_DFT32MS_N_32k]; + float *pDFT_DMX; + float *pDFT_RES; + float g, tmp; + float *pPredGain; + float *pSideGain; + float c0, s0; + int16_t k_offset; + float *pgIpd; + int16_t NFFT_inner; + float gamma; + float samp_ratio; + int16_t prev_bfi; + float dmx_nrg; + int16_t idx_k0, idx_k1; + int16_t output_frame; + int16_t plocs[STEREO_DFT_RES_N_PEAKS_MAX]; + int16_t num_plocs; + float plocsi[STEREO_DFT_RES_N_PEAKS_MAX]; + float ftmp, N1, N2, coh; + float lev1, lev2, cna_level, scale_fact0, scale_fact, *ptr_per; + HANDLE_FD_CNG_DEC hFdCngDec = st0->hFdCngDec; + HANDLE_FD_CNG_COM hFdCngCom = hFdCngDec->hFdCngCom; + int16_t *cna_seed = &( hFdCngCom->seed ); + + output_frame = (int16_t) ( st0->output_Fs / FRAMES_PER_SEC ); + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + samp_ratio = (float) st0->sr_core / (float) st0->output_Fs; + + stop = STEREO_DFT32MS_N_32k / 2; + + /* Analyze nature of current frame */ + hStereoDft->trans = ( ( ( st0->clas_dec == ONSET ) || ( st0->clas_dec == SIN_ONSET ) || ( st0->clas_dec == UNVOICED_CLAS ) || ( st0->clas_dec == UNVOICED_TRANSITION ) ) || ( st0->stab_fac <= 0.25f ) ) || + ( st0->core == TCX_20_CORE && ( ( st0->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) || ( st0->hTcxCfg->tcx_last_overlap_mode == HALF_OVERLAP ) ) ) || ( st0->core == TCX_10_CORE ); + +#ifdef DEBUG_MODE_DFT + { + int16_t tmps; + int16_t tmp_output_frame = (int16_t) ( st0->output_Fs / FRAMES_PER_SEC ); + dbgwrite( &( hStereoDft->attackPresent ), sizeof( int16_t ), 1, tmp_output_frame, "res/stereo_attack.pcm" ); + dbgwrite( &( hStereoDft->trans ), sizeof( int16_t ), 1, tmp_output_frame, "res/stereo_trans.pcm" ); + tmps = (int16_t) ( 100.f * ( st0->stab_fac ) + 0.5f ); + dbgwrite( &tmps, sizeof( int16_t ), 1, tmp_output_frame, "res/stereo_stab.pcm" ); + } +#endif + + /* Initialization */ + k_offset = 1; + N_div = STEREO_DFT_NBDIV; + prev_bfi = st0->prev_old_bfi; /* The core decoding is already completed here and the prev_bfi has been updated for the next frame. + The prev_old_bfi still holds the prev_bfi for the current frame. */ + /* make sure number of bands corresponds to output bwidth in case it is lower than parameter bwidth */ + if ( output_frame < inner_frame_tbl[st0->bwidth] && !sba_dirac_stereo_flag ) + { + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], hStereoDft->NFFT, DEC ); + } + + if ( !st0->bfi ) + { + /* Smoothing for the current frame */ + if ( sba_dirac_stereo_flag ) + { + ivas_sba_dirac_stereo_smooth_parameters( hStereoDft ); + } + else + { + stereo_dft_dec_smooth_parameters( hStereoDft, hStereoCng->prev_sid_nodata ); + } + } + + dmx_nrg = 0.0f; + if ( prev_bfi ) + { + dmx_nrg = stereo_dft_dmx_swb_nrg( DFT[0], DFT[0] + STEREO_DFT32MS_N_MAX, min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); + } + +#ifdef DEBUG_MODE_DFT + dbgwrite( hStereoDft->res_pred_gain + STEREO_DFT_BAND_MAX, sizeof( float ), hStereoDft->nbands, 1, "./res/stereo_dft_dec_gainPred.pcm" ); +#endif + +#ifdef DEBUG_PRINT + printf( "\nframe: %d\n", frame ); +#endif + for ( k = 0; k < N_div; k++ ) + { + pDFT_DMX = DFT[0] + k * STEREO_DFT32MS_N_MAX; + pDFT_RES = DFT[1] + k * STEREO_DFT32MS_N_MAX; + + /*Apply Stereo*/ + if ( hStereoDft->hConfig->dmx_active ) + { + g = 1.f; + c0 = 1.f; + s0 = 0.f; + + /* since delay is just 3.125ms, the parameters received are used for the second window */ + pSideGain = hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; + pgIpd = hStereoDft->gipd + ( k + k_offset ); + pPredGain = hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; + +#ifdef DEBUG_PRINT + if ( k == 0 ) + { + printf( "Window0\n" ); + } + else + { + printf( "Window1\n" ); + } + for ( b = 0; b < hStereoDft->nbands; b++ ) + printf( "%.6f ", pSideGain[b] ); + printf( "\n" ); + for ( b = 0; b < hStereoDft->nbands; b++ ) + printf( "%.6f ", pPredGain[b] ); + printf( "\n" ); +#endif + + /* Use coarse band partition in inactive frames */ + if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) + { + NFFT_inner = STEREO_DFT32MS_N_MAX * inner_frame_tbl[st0->bwidth] / L_FRAME48k; + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, 2, NFFT_inner, DEC ); + } + + + if ( st0->bfi ) + { + hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + STEREO_DFT_PAST_MAX - 1 ) % STEREO_DFT_PAST_MAX; + } + + stereo_dft_generate_res_pred( hStereoDft, samp_ratio, pDFT_DMX, DFT_PRED_RES, pPredGain, k, DFT[1] + k * STEREO_DFT32MS_N_MAX, &stop, st0->bfi ); + + if ( hStereoDft->res_cod_band_max > 0 ) + { + if ( !st0->bfi ) + { + if ( k == 1 ) + { + mvr2r( pDFT_RES, hStereoDft->res_mem, 2 * hStereoDft->band_limits[hStereoDft->res_cod_band_max] ); + hStereoDft->time_offs = 0; + } + } + else + { + stereo_dft_res_ecu( hStereoDft, pDFT_RES, DFT_PRED_RES, k, output_frame, prev_bfi, dmx_nrg, &num_plocs, plocs, plocsi, input_mem ); + } + } + + +#ifdef DEBUGGING + if ( dbgflag( "write_res" ) ) + { + dbgwrite( pDFT_RES, sizeof( float ), 2 * hStereoDft->band_limits[hStereoDft->res_cod_band_max], 1, "dec_res.float" ); + } + + if ( dbgflag( "read_res" ) ) + { + dbgread( pDFT_RES, sizeof( float ), 2 * hStereoDft->band_limits[hStereoDft->res_cod_band_max], "dec_res.float" ); + } +#endif + + /* Apply active DMX */ + /* pDFT_RES is used for the second channel in inactive frames */ + if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) + { + DFT_L[0] = pDFT_DMX[0]; + DFT_R[0] = pDFT_RES[0]; + } + else + { + DFT_L[0] = pDFT_DMX[0]; + DFT_R[0] = pDFT_DMX[0]; + } + + if ( hStereoDft->frame_sid_nodata || st0->VAD == 0 ) + { + hFdCngDec->cna_nbands = 0; + } + + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + g = pSideGain[b]; + if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) + { + g = hStereoDft->g_state[b]; + } + /* store side gains from inactive frames for later use by the stereo CNA */ + if ( hStereoDft->band_limits[b] < L_FRAME16k && ( hStereoDft->frame_sid_nodata || st0->VAD == 0 ) ) + { + hFdCngDec->cna_nbands = b + 1; + hFdCngDec->cna_band_limits[b] = hStereoDft->band_limits[b]; + hFdCngDec->cna_g_state[b] = g; + } + +#ifdef DEBUG_MODE_DFT + if ( b < hStereoDft->res_cod_band_max ) + { + dbgwrite( &g, sizeof( float ), 1, 1, "./res/stereo_dft_dec_g.pcm" ); + } +#endif + + /* No residual coding in inactive frames, instead pDFT_RES is used for the second channel */ + if ( b >= hStereoDft->res_cod_band_max && !hStereoDft->frame_sid_nodata ) + { + /*filter non-coded frequencies. It removes some MDCT frequency aliasing*/ + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + pDFT_RES[2 * i] = 0.f; + pDFT_RES[2 * i + 1] = 0.f; + } + } + + if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) + { + /* Low pass filter coherence */ + /* store coherence from inactive frames for later use by the stereo CNA */ + hFdCngDec->cna_cm[b] = hStereoCng->cm[b]; + + /* Calculate gamma */ + if ( hStereoCng->cm[b] < 0.9f ) + { + gamma = hStereoCng->cm[b]; + gamma = gamma / ( 1 - gamma ); + gamma = sqrtf( gamma + 1 - g * g ) - sqrtf( gamma ); + } + else + { + gamma = 0; + } + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + /* Create L and R signals with the correct coherence by mixing channel 0 (pDFT_DMX) and channel 1 (pDFT_RES) */ + DFT_L[2 * i] = ( 1 + g ) * pDFT_DMX[2 * i] + gamma * pDFT_RES[2 * i]; + DFT_R[2 * i] = ( 1 - g ) * pDFT_DMX[2 * i] - gamma * pDFT_RES[2 * i]; + + DFT_L[2 * i + 1] = ( 1 + g ) * pDFT_DMX[2 * i + 1] + gamma * pDFT_RES[2 * i + 1]; + DFT_R[2 * i + 1] = ( 1 - g ) * pDFT_DMX[2 * i + 1] - gamma * pDFT_RES[2 * i + 1]; + } + if ( pgIpd[0] != 0.f ) + { + c0 = cosf( pgIpd[0] ); + s0 = sinf( pgIpd[0] ); + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + /*rotate L*/ + tmp = DFT_L[2 * i] * c0 - DFT_L[2 * i + 1] * s0; + DFT_L[2 * i + 1] = DFT_L[2 * i] * s0 + DFT_L[2 * i + 1] * c0; + DFT_L[2 * i] = tmp; + } + } + } + else + { + for ( i = hStereoDft->band_limits[b]; i < min( stop, hStereoDft->band_limits[b + 1] ); i++ ) + { + tmp = g * pDFT_DMX[2 * i] + pDFT_RES[2 * i] + DFT_PRED_RES[2 * i]; + + DFT_L[2 * i] = pDFT_DMX[2 * i] + tmp; + DFT_R[2 * i] = pDFT_DMX[2 * i] - tmp; + + tmp = g * pDFT_DMX[2 * i + 1] + pDFT_RES[2 * i + 1] + DFT_PRED_RES[2 * i + 1]; + + DFT_L[2 * i + 1] = pDFT_DMX[2 * i + 1] + tmp; + DFT_R[2 * i + 1] = pDFT_DMX[2 * i + 1] - tmp; + +#ifdef DEBUG_STEREO_DFT_OUTRESPRED + DFT_L[2 * i] = DFT_PRED_RES[2 * i]; + DFT_R[2 * i] = -DFT_PRED_RES[2 * i]; + DFT_L[2 * i + 1] = DFT_PRED_RES[2 * i + 1]; + DFT_R[2 * i + 1] = -DFT_PRED_RES[2 * i + 1]; +#endif /* DEBUG_STEREO_DFT_OUTRESPRED */ + } + + for ( ; i < hStereoDft->band_limits[b + 1]; i++ ) + { + tmp = g * pDFT_DMX[2 * i] + pDFT_RES[2 * i]; + + DFT_L[2 * i] = pDFT_DMX[2 * i] + tmp; + DFT_R[2 * i] = pDFT_DMX[2 * i] - tmp; + + tmp = g * pDFT_DMX[2 * i + 1] + pDFT_RES[2 * i + 1]; + + DFT_L[2 * i + 1] = pDFT_DMX[2 * i + 1] + tmp; + DFT_R[2 * i + 1] = pDFT_DMX[2 * i + 1] - tmp; + +#ifdef DEBUG_STEREO_DFT_OUTRESPRED + DFT_L[2 * i] = 0.f; + DFT_R[2 * i] = 0.f; + DFT_L[2 * i + 1] = 0.f; + DFT_R[2 * i + 1] = 0.f; +#endif /* DEBUG_STEREO_DFT_OUTRESPRED */ + } + + /* Active Upmix */ + if ( pgIpd[0] != 0.f ) + { + c0 = cosf( pgIpd[0] ); + s0 = sinf( pgIpd[0] ); + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + /*rotate L*/ + tmp = DFT_L[2 * i] * c0 - DFT_L[2 * i + 1] * s0; + DFT_L[2 * i + 1] = DFT_L[2 * i] * s0 + DFT_L[2 * i + 1] * c0; + DFT_L[2 * i] = tmp; + } + } + } + } + + if ( hStereoDft->frame_sid_nodata || st0->VAD == 0 ) + { + hFdCngDec->cna_band_limits[b] = hStereoDft->band_limits[hFdCngDec->cna_nbands]; + } + + if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) + { + hStereoCng->first_SID = 0; + hStereoCng->first_SID_after_TD = 0; + } + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->NFFT / 2; i++ ) + { + DFT_L[2 * i] = 0.f; + DFT_L[2 * i + 1] = 0.f; + DFT_R[2 * i] = 0.f; + DFT_R[2 * i + 1] = 0.f; + } + + /*Nyquist Freq.*/ + if ( hStereoDft->band_limits[b] == hStereoDft->NFFT / 2 ) + { + DFT_L[1] = pDFT_DMX[1] + g * pDFT_DMX[1]; + DFT_R[1] = pDFT_DMX[1] - g * pDFT_DMX[1]; + DFT_L[1] *= INV_SQRT_2; + DFT_R[1] *= INV_SQRT_2; + } + else + { + DFT_L[1] = 0.f; + DFT_R[1] = 0.f; + } + } + else + { + pPredGain = NULL; /* to avoid compilation warnings */ + pSideGain = NULL; + +#ifndef DEBUG_STEREO_DFT_NOSTEREO + /* Dummy upmix-> mono binauralization */ + for ( i = 0; i < hStereoDft->NFFT; i++ ) + { + DFT_L[i] = ( pDFT_DMX[i] + pDFT_RES[i] ); + DFT_R[i] = ( pDFT_DMX[i] - pDFT_RES[i] ); + } +#else + /*Copy DMX to Left channel and reset Right channel*/ + mvr2r( pDFT_DMX, DFT_L, hStereoDft->NFFT ); + mvr2r( pDFT_DMX, DFT_R, hStereoDft->NFFT ); +#endif + } + + /* Comfort Noise Addition */ + if ( st0->flag_cna ) + { + ptr_per = &hFdCngDec->smoothed_psd[hFdCngCom->startBand]; + + scale_fact0 = 0.0f; + if ( hFdCngDec->cna_rescale_fact > 0 ) + { + scale_fact0 = output_frame / 2 * sqrtf( hFdCngDec->cna_rescale_fact * 0.5f ); + } + + for ( b = 0; b < hFdCngDec->cna_nbands; b++ ) + { + /* calculate gamma factor reflecting inter-channel correlation and side gain (ILD) */ + coh = hFdCngDec->cna_cm[b]; + g = hFdCngDec->cna_g_state[b]; + + if ( coh < 0.9f ) + { + gamma = coh; + gamma = gamma / ( 1 - gamma ); + gamma = sqrtf( gamma + 1 - g * g ) - sqrtf( gamma ); + } + else + { + gamma = 0; + } + + for ( i = max( hFdCngDec->cna_band_limits[b], hFdCngCom->startBand / 2 ); i < min( hFdCngDec->cna_band_limits[b + 1], L_FRAME16k / 2 ); i++ ) + { + lev1 = *ptr_per++; + lev2 = *ptr_per++; + + if ( lev1 > 0 && lev2 > 0 && max( lev1, lev2 ) / min( lev1, lev2 ) > 1.2f ) + { + /* take the minimum of two adjacent frequency bins */ + cna_level = min( lev1, lev2 ); + } + else + { + /* take the average of two adjacent frequency bins */ + cna_level = 0.5f * ( lev1 + lev2 ); + } + + scale_fact = scale_fact0 * sqrtf( cna_level ); + + /* generate comfort noise from gaussian noise and add to the decoded DFT spectrum */ + N1 = scale_fact * rand_gauss( &ftmp, cna_seed ); + N2 = scale_fact * rand_gauss( &ftmp, cna_seed ); + DFT_L[2 * i] += ( 1 + g ) * N1 + gamma * N2; + DFT_R[2 * i] += ( 1 - g ) * N1 - gamma * N2; + + N1 = scale_fact * rand_gauss( &ftmp, cna_seed ); + N2 = scale_fact * rand_gauss( &ftmp, cna_seed ); + DFT_L[2 * i + 1] += ( 1 + g ) * N1 + gamma * N2; + DFT_R[2 * i + 1] += ( 1 - g ) * N1 - gamma * N2; + } + } + + /* update CNA re-scaling factor */ + hFdCngDec->cna_rescale_fact = 0.8f * hFdCngDec->cna_act_fact; + if ( !hFdCngDec->first_cna_noise_updated ) + { + hFdCngDec->cna_rescale_fact = 0; + } + } + + /* Update memories */ + hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + mvr2r( pDFT_DMX, hStereoDft->DFT_past_DMX[hStereoDft->past_DMX_pos], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); +#ifndef DEBUG_STEREO_DFT_NOSTEREO + if ( pPredGain ) + { + stereo_dft_adapt_sf_delay( hStereoDft, pPredGain ); + } +#endif + + mvr2r( DFT_L, DFT[0] + k * STEREO_DFT32MS_N_MAX, hStereoDft->NFFT ); + mvr2r( DFT_R, DFT[1] + k * STEREO_DFT32MS_N_MAX, hStereoDft->NFFT ); + } + + if ( st0->bfi && !prev_bfi ) + { + idx_k0 = ( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + idx_k1 = ( idx_k0 + 1 ) % STEREO_DFT_PAST_MAX; + /*dmx energy memory*/ + hStereoDft->past_dmx_nrg = stereo_dft_dmx_swb_nrg( hStereoDft->DFT_past_DMX[idx_k0], hStereoDft->DFT_past_DMX[idx_k1], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); + } + + stereo_dft_compute_td_stefi_params( hStereoDft, samp_ratio ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_res() + * + * Decode the residual signal + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec_res( + CPE_DEC_HANDLE hCPE, /* i/o: decoder CPE handle */ + float res_buf[STEREO_DFT_BUF_MAX], /* i : residual buffer */ + float *output /* o : output */ +) +{ + int16_t i; + float win[L_FRAME8k + STEREO_DFT_OVL_8k]; + float bpf_error_signal_8k[L_FRAME8k]; + int16_t prev_bfi; + float fac, step; + int16_t res_bpf_flag; + + prev_bfi = hCPE->hCoreCoder[0]->prev_old_bfi; /* The core decoding is already completed here and the prev_bfi has been updated for the next frame. + The prev_old_bfi still holds the prev_bfi for the current frame. */ + + /* flush memories when switching residual coding on */ + if ( hCPE->hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1] == STEREO_DFT_RES_COD_OFF ) + { + set_zero( hCPE->hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); + set_zero( hCPE->input_mem[1], NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) ); + set_zero( hCPE->hStereoDft->hBpf->pst_old_syn, STEREO_DFT_NBPSF_PIT_MAX_8k ); + hCPE->hStereoDft->hBpf->pst_mem_deemp_err = 0.f; + } + + /*Inverse MDCT*/ + TCX_MDCT_Inverse( res_buf, win, STEREO_DFT_OVL_8k, L_FRAME8k - STEREO_DFT_OVL_8k, STEREO_DFT_OVL_8k, IVAS_CPE_DFT ); + + if ( !prev_bfi ) + { + /*OLA*/ + /*overlapping parts*/ + for ( i = 0; i < STEREO_DFT_OVL_8k; i++ ) + { + win[i] = hCPE->hStereoDft->res_cod_mem[i] + win[i] * hCPE->hStereoDft->win_8k[i]; + hCPE->hStereoDft->res_cod_mem[i] = win[L_FRAME8k + i] * hCPE->hStereoDft->win_8k[STEREO_DFT_OVL_8k - 1 - i]; + } + } + else + { + /* For first good frame, ola memory contains extended ECU buffer -- need to crossfade instead of OLA */ + step = (float) ( 1.0f / STEREO_DFT_OVL_8k ); + fac = 0; + for ( i = 0; i < STEREO_DFT_OVL_8k; i++ ) + { + win[i] = ( 1.0f - fac * fac ) * hCPE->hStereoDft->res_cod_mem[i] + ( 1.0f - ( 1.0f - fac ) * ( 1.0f - fac ) ) * win[i] * hCPE->hStereoDft->win_8k[i]; + hCPE->hStereoDft->res_cod_mem[i] = win[L_FRAME8k + i] * hCPE->hStereoDft->win_8k[STEREO_DFT_OVL_8k - 1 - i]; + fac += step; + } + } + +#ifdef DEBUG_STEREO_DFT_NOQRES + { + int16_t tmp[1024]; + dbgread( &tmp, sizeof( int16_t ), L_FRAME8k, "./res/stereo_dft_enc_res_original.pcm" ); + for ( i = 0; i < L_FRAME8k; i++ ) + { + win[i] = (float) ( tmp[i] ); + } + } +#endif + + mvr2r( win, output, L_FRAME8k ); + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp[L_FRAME8k]; + + for ( i = 0; i < L_FRAME8k; i++ ) + { + tmp[i] = (int16_t) ( win[i] ); + } + dbgwrite( tmp, sizeof( int16_t ), L_FRAME8k, 1, "./res/stereo_dft_dec_res_decoded.pcm" ); + } +#endif + + if ( hCPE->hCoreCoder[0]->core == ACELP_CORE ) + { + /* bass post-filter */ + bass_psfilter( hCPE->hStereoDft->hBpf, hCPE->hCoreCoder[0]->Opt_AMR_WB, output, L_FRAME8k, hCPE->hCoreCoder[0]->old_pitch_buf + ( L_FRAME8k / STEREO_DFT_L_SUBFR_8k ), hCPE->hCoreCoder[0]->bpf_off, + hCPE->hCoreCoder[0]->stab_fac, &hCPE->hStereoDft->stab_fac_smooth_res, hCPE->hCoreCoder[0]->last_coder_type, bpf_error_signal_8k ); + + res_bpf_flag = res_bpf_adapt( hCPE->hStereoDft, bpf_error_signal_8k, res_buf ); + if ( prev_bfi ) + { + /* Ramp up BPF contribution for the first good frame */ + step = (float) ( 1.0f / L_FRAME8k ); + fac = 0; + for ( i = 0; i < L_FRAME8k; i++ ) + { + bpf_error_signal_8k[i] *= fac; + fac += step; + } + } + + if ( res_bpf_flag ) + { + v_sub( output, bpf_error_signal_8k, output, L_FRAME8k ); + } + } + else if ( hCPE->hCoreCoder[0]->last_core == ACELP_CORE ) + { + set_zero( hCPE->hStereoDft->hBpf->pst_old_syn, STEREO_DFT_NBPSF_PIT_MAX_8k ); + hCPE->hStereoDft->hBpf->pst_mem_deemp_err = 0.f; + } +#ifdef DEBUG_MODE_DFT + { + int16_t v; + int16_t out_bpf[L_FRAME8k]; + + if ( hCPE->hCoreCoder[0]->core == ACELP_CORE ) + { + for ( v = 0; v < L_FRAME8k; v++ ) + { + out_bpf[v] = (int16_t) bpf_error_signal_8k[v]; + } + } + else + { + set_s( out_bpf, 0, L_FRAME8k ); + } + dbgwrite( out_bpf, sizeof( int16_t ), L_FRAME8k, 1, "res/bpf_res.pcm" ); + } +#endif + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_dec_read_BS() + * + * Read bitstream + *-------------------------------------------------------------------------*/ + +void stereo_dft_dec_read_BS( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int32_t element_brate, /* i : element bitrate */ + int32_t *total_brate, /* o : total bitrate */ + Decoder_State *st, /* i/o: decoder state structure */ + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder stereo handle */ + const int16_t bwidth, /* i : bandwidth */ + const int16_t output_frame, /* i : output frame length */ + float res_buf[STEREO_DFT_BUF_MAX], /* o : residual buffer */ + int16_t *nb_bits, /* o : number of bits read */ + float *coh, /* i/o: Coherence */ + const int16_t ivas_format /* i : ivas format */ +) +{ + int16_t b, N_div, nbands; + int16_t NFFT_inner; + int16_t k, k_offset; + int16_t I; + int16_t max_bits; + uint16_t bit_stream_side[800]; /*Max bits per frame for 30kbps*/ + RangeUniDecState range_uni_dec_state; + ECSQ_instance ecsq_inst; + + /* needed for provisorial reordering of indices */ + int16_t ind1[STEREO_DFT_BAND_MAX]; + int16_t n_bits; + int16_t nb, ind1_ipd[STEREO_DFT_BAND_MAX], ind1_pred[STEREO_DFT_BAND_MAX]; + int16_t sign_flag; + float sg_tmp[STEREO_DFT_BAND_MAX]; + float res_pred_gain_tmp[STEREO_DFT_BAND_MAX]; + int16_t itd_mode; + +#ifdef DEBUG_MODE_DFT + static FILE *pF = NULL; + static FILE *ITD_values = NULL, *side_gain_values = NULL, *RPG_values = NULL; + + if ( pF == NULL ) + pF = fopen( "./res/stereo_dft_dec_ind.txt", "w" ); + if ( ITD_values == NULL ) + ITD_values = fopen( "./res/itd_indicies_dec.txt", "w" ); + if ( side_gain_values == NULL ) + side_gain_values = fopen( "./res/side_gain_indicies_dec.txt", "w" ); + if ( RPG_values == NULL ) + RPG_values = fopen( "./res/rpg_indicies_dec.txt", "w" ); + + assert( *nb_bits <= 800 ); +#endif + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + if ( ivas_total_brate == IVAS_SID_4k4 ) + { + if ( ivas_format == MASA_FORMAT ) + { + hStereoDft->frame_nodata = 0; + hStereoDft->frame_sid_nodata = 1; + hStereoDft->frame_sid = 1; + *nb_bits = 0; + } + else + { + hStereoDft->frame_nodata = 0; + hStereoDft->frame_sid_nodata = 1; + hStereoDft->frame_sid = 1; + *nb_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + } + } + else if ( ivas_total_brate == FRAME_NO_DATA ) + { + hStereoDft->frame_nodata = 1; + hStereoDft->frame_sid_nodata = 1; + hStereoDft->frame_sid = 0; + *nb_bits = 0; + *total_brate = 0; + + return; + } + else + { + hStereoDft->frame_nodata = 0; + hStereoDft->frame_sid_nodata = 0; + hStereoDft->frame_sid = 0; + + st->total_brate = *nb_bits * FRAMES_PER_SEC; + } + + hStereoDft->reverb_flag = 0; + + /* reverse the bitstream */ + for ( b = 0; b < *nb_bits; b++ ) + { + bit_stream_side[b] = st->bit_stream[-b]; + } + + /* make sure the padding bits read ahead by the arithmetic coder (up to 16) or range coder (up to 32) have binary values */ + for ( ; b < *nb_bits + 32; b++ ) + { + bit_stream_side[b] = 0; + } + st->bit_stream = bit_stream_side; + + /*init*/ + max_bits = *nb_bits; + *nb_bits = 0; + k_offset = STEREO_DFT_OFFSET; + N_div = STEREO_DFT_NBDIV; + + if ( ivas_total_brate > IVAS_SID_4k4 ) + { + mvr2r( hStereoDft->side_gain + 2 * STEREO_DFT_BAND_MAX, sg_tmp, STEREO_DFT_BAND_MAX ); + mvr2r( hStereoDft->res_pred_gain + 2 * STEREO_DFT_BAND_MAX, res_pred_gain_tmp, STEREO_DFT_BAND_MAX ); + } + + /* attackPresent always set to 0 in SID frames */ + if ( hStereoDft->frame_sid ) + { + hStereoDft->attackPresent = 0; + } + else + { + hStereoDft->attackPresent = get_next_indice( st, 1 ); + ( *nb_bits )++; + } + + /* read res_cod_mode from bitstream */ + if ( bwidth == WB && hStereoDft->hConfig->ada_wb_res_cod_mode ) + { + hStereoDft->res_cod_mode[k_offset] = get_next_indice( st, 1 ); + ( *nb_bits )++; +#ifdef DEBUG_MODE_DFT + fprintf( pF, "res_cod_mode: %d\n", hStereoDft->res_cod_mode[k_offset] ); +#endif + } + + /* read number of bands in the bitstream - depends on the audio bandwidth and not to output_Fs */ + if ( hStereoDft->frame_sid ) + { + NFFT_inner = STEREO_DFT32MS_N_MAX * inner_frame_tbl[bwidth] / L_FRAME48k; + } + else + { + NFFT_inner = STEREO_DFT32MS_N_MAX * inner_frame_tbl[st->bwidth] / L_FRAME48k; + } + + /* Use coarse band partition in inactive frames */ + if ( hStereoDft->frame_sid ) + { + hStereoDft->band_res[k_offset] = STEREO_DFT_BAND_RES_LOW; + hStereoDft->res_cod_mode[k_offset] = STEREO_DFT_RES_COD_OFF; + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], min( STEREO_DFT32MS_N_MAX, NFFT_inner ), DEC ); + + if ( hStereoDft->nbands > STEREO_DFT_COH_MAXBAND ) + { + hStereoDft->band_limits[STEREO_DFT_COH_MAXBAND] = hStereoDft->band_limits[hStereoDft->nbands]; + hStereoDft->nbands = STEREO_DFT_COH_MAXBAND; + } + } + else + { + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], NFFT_inner, DEC ); + } + + hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; + hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * output_frame / (float) ( hStereoDft->NFFT ) ); + hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); + hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); + +#ifdef DEBUG_MODE_DFT + fprintf( pF, "stereo Data: %d %d %d %d %d\n", hStereoDft->band_res[k_offset], hStereoDft->prm_res[k_offset], hStereoDft->res_pred_mode[k_offset], hStereoDft->res_cod_mode[k_offset], hStereoDft->res_cod_band_max ); + fprintf( pF, "stereo Bands: %d\n", hStereoDft->nbands ); +#endif + + /*Copy config. for all DFT frames*/ + set_s( hStereoDft->band_res + k_offset + 1, hStereoDft->band_res[k_offset], N_div - 1 ); + set_s( hStereoDft->prm_res + k_offset + 1, hStereoDft->prm_res[k_offset], N_div - 1 ); + set_s( hStereoDft->res_pred_mode + k_offset + 1, hStereoDft->res_pred_mode[k_offset], N_div - 1 ); + set_s( hStereoDft->res_cod_mode + k_offset + 1, hStereoDft->res_cod_mode[k_offset], N_div - 1 ); + + /*------------------------------------------------------------------* + * Read DFT stereo parameters + *-----------------------------------------------------------------*/ + + /* Sent from the latest to the oldest */ + for ( k = hStereoDft->prm_res[k_offset] - 1; k < N_div; k += hStereoDft->prm_res[k + k_offset] ) + { +#ifdef DEBUG_MODE_DFT + fprintf( pF, "ch[%d]:", k ); +#endif + /* reset parameters */ + set_zero( hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); + hStereoDft->gipd[k + k_offset] = 0.f; + set_zero( hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); + +#ifdef DEBUG_MODE_DFT + fprintf( pF, "ITD: %d ", hStereoDft->hConfig->itd_mode ); +#endif + + if ( !( ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_4k4 ) ) + { + /*------------------------------------------------------------------* + * read Side gains + *-----------------------------------------------------------------*/ + + /* side gain */ + /* get coding type */ + /* Do not read and decode side gain if a NO_DATA frame */ + if ( !hStereoDft->frame_nodata ) + { + n_bits = 0; + nb = st->next_bit_pos; + n_bits = read_flag_EC_DFT( &st->bit_stream[nb], &hStereoDft->side_gain_flag_1 ); + nb += n_bits; + + if ( hStereoDft->side_gain_flag_1 == 0 ) + { + b = read_BS_adapt_GR_sg( st->bit_stream, nb, ind1, hStereoDft->nbands, &hStereoDft->side_gain_flag_2, dft_maps_sg ); + n_bits += b; + } + else + { + if ( hStereoDft->side_gain_flag_1 == 2 ) /* differential */ + { + b = read_BS_GR( st->bit_stream, nb, ind1, hStereoDft->nbands, &hStereoDft->side_gain_flag_2 ); + n_bits += b; + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + ind1[b] += hStereoDft->side_gain_index_previous[b]; + } + } + else + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + ind1[b] = get_value( &st->bit_stream[nb], STEREO_DFT_SIDEGAIN_NBITS ); + nb += STEREO_DFT_SIDEGAIN_NBITS; + n_bits += STEREO_DFT_SIDEGAIN_NBITS; + } + } + } + + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + hStereoDft->side_gain_index_previous[b] = ind1[b]; + + hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX] = ind1[b]; + } + +#ifdef DEBUG_MODE_DFT + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + fprintf( pF, "Side gain: %d ", ind1[b] ); + fprintf( side_gain_values, " %d ", ind1[b] ); + } +#endif + st->next_bit_pos += n_bits; + ( *nb_bits ) += n_bits; + } + + /*------------------------------------------------------------------* + * read ITDs + *-----------------------------------------------------------------*/ + + if ( !hStereoDft->frame_sid_nodata ) + { + itd_mode = get_next_indice( st, STEREO_DFT_ITD_MODE_NBITS ); + ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ + + hStereoDft->itd[k + k_offset] = 0.f; + if ( itd_mode ) + { + ( *nb_bits ) += read_itd( st, &I ); + stereo_dft_dequantize_itd( &I, hStereoDft->itd + k + k_offset, st->output_Fs ); +#ifdef DEBUG_MODE_DFT + fprintf( pF, "ITD: %d ", I ); + fprintf( ITD_values, "%d %d ", frame, I ); +#endif + } + } + else if ( *nb_bits <= ( ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - STEREO_DFT_ITD_MODE_NBITS - STEREO_DFT_SID_ITD_NBITS - 1 - SID_FORMAT_NBITS ) ) + { + itd_mode = get_next_indice( st, STEREO_DFT_ITD_MODE_NBITS ); + ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ + + hStereoDft->itd[k + k_offset] = 0.f; + if ( itd_mode ) + { + sign_flag = get_next_indice( st, 1 ); + I = get_next_indice( st, STEREO_DFT_SID_ITD_NBITS ); + ( *nb_bits ) += STEREO_DFT_SID_ITD_NBITS + 1; + I = I << STEREO_DFT_SID_ITD_FAC; + I += 256 * sign_flag; + stereo_dft_dequantize_itd( &I, hStereoDft->itd + k + k_offset, st->output_Fs ); +#ifdef DEBUG_MODE_DFT + fprintf( pF, "ITD: %d ", I ); + fprintf( ITD_values, "%d %d ", frame, I ); +#endif + } + } + + /*------------------------------------------------------------------* + * read IPDs + *-----------------------------------------------------------------*/ + + n_bits = 0; + nb = st->next_bit_pos; + + if ( !hStereoDft->frame_sid_nodata ) + { + /* Active frame */ + hStereoDft->no_ipd_flag = st->bit_stream[nb]; + nb += 1; + n_bits += 1; + if ( hStereoDft->no_ipd_flag == 0 ) + { + ind1_ipd[0] = get_value( &st->bit_stream[nb], STEREO_DFT_GIPD_NBITS ); + nb += STEREO_DFT_GIPD_NBITS; + n_bits += STEREO_DFT_GIPD_NBITS; + stereo_dft_dequantize_ipd( &ind1_ipd[0], hStereoDft->gipd + ( k + k_offset ), 1, STEREO_DFT_GIPD_NBITS ); + } + } + else if ( *nb_bits <= ( ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - STEREO_DFT_FLAG_BITS - STEREO_DFT_SID_GIPD_NBITS - SID_FORMAT_NBITS ) ) + { + /* SID frame, only read IPD only if enough bits left in bitstream */ + hStereoDft->no_ipd_flag = st->bit_stream[nb]; + nb += 1; + n_bits += 1; + if ( hStereoDft->no_ipd_flag == 0 ) + { + ind1_ipd[0] = get_value( &st->bit_stream[nb], STEREO_DFT_SID_GIPD_NBITS ); + nb += STEREO_DFT_SID_GIPD_NBITS; + n_bits += STEREO_DFT_SID_GIPD_NBITS; + stereo_dft_dequantize_ipd( &ind1_ipd[0], hStereoDft->gipd + ( k + k_offset ), 1, STEREO_DFT_SID_GIPD_NBITS ); + } + } + else + { + hStereoDft->no_ipd_flag = 1; + } + + st->next_bit_pos += n_bits; + ( *nb_bits ) += n_bits; + + /*------------------------------------------------------------------* + * read Residual parameters + *-----------------------------------------------------------------*/ + + /* Residual prediction */ /* Switch it off if ITD detected */ + n_bits = 0; + nb = st->next_bit_pos; + + /* Not used in inactive frames */ + if ( !hStereoDft->frame_sid_nodata ) + { + if ( hStereoDft->res_pred_mode[k + k_offset] && ( hStereoDft->attackPresent == 0 ) ) + { + nbands = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); + + hStereoDft->reverb_flag = 0; + hStereoDft->nbands_respred = nbands; + + /* Read bit for adaptive SF (WB/SWB & FB) */ + if ( hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + hStereoDft->reverb_flag = get_next_indice( st, STEREO_DFT_REVERB_MODE_NBITS ); + ( *nb_bits ) += STEREO_DFT_REVERB_MODE_NBITS; + nb += STEREO_DFT_REVERB_MODE_NBITS; +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, " reverb_flag %d ", hStereoDft->reverb_flag ); +#endif + if ( hStereoDft->reverb_flag ) + { + nbands -= STEREO_DFT_RES_PRED_BAND_MIN_CONST; + } + } + + /* get coding type */ + b = read_flag_EC_DFT( &st->bit_stream[nb], &hStereoDft->res_pred_flag_0 ); + nb += b; + n_bits += b; + + if ( hStereoDft->res_pred_flag_0 == 0 ) + { +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, "flag: 0" ); +#endif + b = read_BS_adapt_GR_rpg( st->bit_stream, nb, ind1_pred, hStereoDft->res_pred_band_min, nbands, &hStereoDft->res_pred_flag_1 ); + n_bits += b; + } + else + { + if ( hStereoDft->res_pred_flag_0 == 2 ) + { +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, "flag: 2" ); +#endif + b = read_BS_GR( st->bit_stream, nb, &ind1_pred[hStereoDft->res_pred_band_min], nbands - hStereoDft->res_pred_band_min, &hStereoDft->res_pred_flag_1 ); + + n_bits += b; + for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) + { + ind1_pred[b] += hStereoDft->res_pred_index_previous[b]; + } + } + else + { +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, "flag: 1" ); +#endif + for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) + { + ind1_pred[b] = get_value( &st->bit_stream[nb], STEREO_DFT_RES_GAINS_BITS ); + nb += STEREO_DFT_RES_GAINS_BITS; + n_bits += STEREO_DFT_RES_GAINS_BITS; + } + } + } + + for ( b = 0; b < hStereoDft->res_pred_band_min; b++ ) + { + I = 0; + stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); + hStereoDft->res_pred_index_previous[b] = I; + hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = 0; + } + + for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) + { + I = ind1_pred[b]; + stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); +#ifdef DEBUG_MODE_DFT + fprintf( pF, "Res pred values: %d ", I ); + if ( hStereoDft->res_pred_flag_0 == 2 ) + fprintf( RPG_values, " %d(%d) ", I, hStereoDft->res_pred_index_previous[b] ); + else + fprintf( RPG_values, " %d ", I ); +#endif + hStereoDft->res_pred_index_previous[b] = I; + hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = I; + } + + for ( ; b < hStereoDft->nbands; b++ ) + { + I = 0; + stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); + hStereoDft->res_pred_index_previous[b] = I; + hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = 0; + } + } + else + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + I = 0; + stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); + hStereoDft->res_pred_index_previous[b] = I; + hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = I; + } + } + + st->next_bit_pos += n_bits; + ( *nb_bits ) += n_bits; + } + else + { + /* Dequantize sidegain if SID frame */ + if ( hStereoDft->frame_sid ) + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + I = 0; + stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); + } + } + } + } + +#ifdef DEBUG_MODE_DFT + /*fprintf(stderr, "\nbres: %d\n", *nb_bits - nb_bits0);*/ +#endif + } + + if ( !( ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_4k4 ) ) + { + if ( hStereoDft->side_gain_flag_1 != 2 ) + { + hStereoDft->sg_mem_corrupt = 0; + } + } + + if ( ivas_total_brate > IVAS_SID_4k4 ) + { + hStereoDft->recovery_flg = stereo_dft_sg_recovery( hStereoDft ); + + if ( hStereoDft->recovery_flg ) + { + mvr2r( sg_tmp, hStereoDft->side_gain + 2 * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); + mvr2r( res_pred_gain_tmp, hStereoDft->res_pred_gain + 2 * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); + } + } + + /*----------------------------------------------------------------* + * Residual decoding: spectral lines + *----------------------------------------------------------------*/ + + /* Residual coding not used in inactive frames */ + if ( hStereoDft->res_cod_band_max > 0 && !hStereoDft->frame_sid_nodata ) + { + int16_t dec[STEREO_DFT_N_MAX_RES]; + + I = get_next_indice( st, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); + ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; + +#ifdef DEBUG_MODE_DFT + fprintf( pF, "\nGain: %d ", I ); +#endif + + wmops_sub_start( "residual_decode" ); + if ( I != ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO ) + { + ECSQ_init_instance( &ecsq_inst, 0 /*dummy index*/, &range_uni_dec_state ); + + rc_uni_dec_init( &range_uni_dec_state, bit_stream_side + *nb_bits, max_bits - *nb_bits ); + + hStereoDft->res_global_gain = ECSQ_dequantize_gain( I ); + + ecsq_inst.config_index = 2 * hStereoDft->res_cod_mode[k_offset] - 1; + + ECSQ_decode( &ecsq_inst, hStereoDft->res_cod_line_max, dec ); + + n_bits = rc_uni_dec_finish( &range_uni_dec_state ); + +#ifdef DEBUGGING + /* IVAS_fmToDo: the assert has to be changed with proper bitstream error handling */ + assert( range_uni_dec_state.bit_error_detected == 0 ); +#endif + + set_zero( res_buf, STEREO_DFT_N_8k ); + ECSQ_dequantize_vector( dec, hStereoDft->res_global_gain, hStereoDft->res_cod_line_max, res_buf ); + } + else + { + set_s( dec, 0, hStereoDft->res_cod_line_max ); + hStereoDft->res_global_gain = 0.0f; + n_bits = 0; + set_zero( res_buf, STEREO_DFT_N_8k ); + } + + ( *nb_bits ) += n_bits; + wmops_sub_end(); + +#ifdef DEBUG_MODE_DFT + fprintf( pF, "%d (max: %d)", n_bits + STEREO_DFT_RES_GLOBAL_GAIN_BITS, max_bits ); + /*fprintf(pF, "%d (max: %d)", n_bits, max_bits);*/ +#endif + } + + if ( hStereoDft->frame_sid && !( ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_4k4 ) ) + { + stereo_dft_dec_sid_coh( st, hStereoDft->nbands, coh, nb_bits ); + } + + if ( ivas_total_brate == IVAS_SID_4k4 && ivas_format != MASA_FORMAT ) + { + *nb_bits = (int16_t) ( ( element_brate - SID_2k40 ) / FRAMES_PER_SEC ); /* => hCPE->hCoreCoder[0]->total_brate = SID_2k40; */ + } + { + *total_brate = element_brate - ( *nb_bits * FRAMES_PER_SEC ); + } + +#ifdef DEBUG_MODE_DFT + /*fprintf(pF, "Total bits: %d", (*nb_bits));*/ + fprintf( pF, "\n" ); + fprintf( ITD_values, "\n" ); + fprintf( side_gain_values, "\n" ); + fprintf( RPG_values, "\n" ); +#endif + + return; +} + +/*------------------------------------------------------------------------- + * stereo_dft_compute_td_stefi_params() + * + * + *-------------------------------------------------------------------------*/ + +static void stereo_dft_compute_td_stefi_params( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const float samp_ratio /* i : sampling ratio */ +) +{ + int16_t pdmx_ind; + float g2; + int16_t bin0; + int16_t band0; + int16_t b; + int16_t nbands; + int16_t bres; + float wsum; + float pred_gain_avg, pred_g; + float nrg_DMX, nrg_pred_DMX; + + pdmx_ind = hStereoDft->past_DMX_pos; + bres = hStereoDft->band_res[1]; + + if ( hStereoDft->core_hist[1] != ACELP_CORE || hStereoDft->wasTransient ) + { + hStereoDft->td_gain[0] = 0; + + return; + } + + bin0 = (int16_t) ( samp_ratio * hStereoDft->NFFT / 2 + .5 ); + bin0 = min( bin0, hStereoDft->band_limits[hStereoDft->nbands] ); + b = hStereoDft->nbands; + while ( hStereoDft->band_limits[b] > bin0 ) + { + b--; + } + band0 = b; + + /* calculate averages over high bands */ + pred_g = pred_gain_avg = 0; + nbands = 0; + wsum = 0; + for ( b = band0; b < hStereoDft->nbands; b++ ) + { + if ( min( hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 1, pdmx_ind )][b], hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 2, pdmx_ind )][b] ) < 0 ) + { + hStereoDft->td_gain[0] = 0; + return; + } + pred_g += ( hStereoDft->res_pred_gain[b + STEREO_DFT_BAND_MAX] + hStereoDft->res_pred_gain[b + 2 * STEREO_DFT_BAND_MAX] ) / 2 * dft_res_pred_weights[bres][b - band0]; + pred_gain_avg += ( hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 2, pdmx_ind )][b] + hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 1, pdmx_ind )][b] ) / 2 * dft_res_pred_weights[bres][b - band0]; + + nbands++; + wsum += dft_res_pred_weights[bres][b - band0]; +#ifdef DBG_TD_STEFI + printf( "frame: %d\tband: %-2d\tpred_gain1: %f\tpred_gain2: %f\tppg1: %f\tppg2: %f\n", frame, b, hStereoDft->res_pred_gain[b + STEREO_DFT_BAND_MAX], hStereoDft->res_pred_gain[b + 2 * STEREO_DFT_BAND_MAX], hStereoDft->past_res_pred_gain[STEREO_DFT_TD_STEFI_SUBFR_DELAY - 2][b], hStereoDft->past_res_pred_gain[d_short - 1][b] ); +#endif + } + + if ( nbands == 0 ) + { + /* apparently, there is nothing to do here */ + hStereoDft->td_gain[0] = 0; + return; + } + + pred_g /= wsum; + pred_gain_avg /= wsum; + + nrg_DMX = hStereoDft->hb_nrg[0]; + nrg_pred_DMX = hStereoDft->hb_nrg[1]; + + g2 = pred_g * sqrtf( ( 0.001f + nrg_DMX ) / ( 0.001f + nrg_pred_DMX ) ); + + hStereoDft->td_gain[0] = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); + +#ifdef DBG_TD_STEFI + printf( "frame: %d\tpred_gain: %f\tpred_gain_avg: %f\tg2_0: %f\tgain: %f\n", frame, pred_gain, pred_gain_avg, g2, hStereoDft->td_gain[0] ); + printf( "nrg_DMX: %f\tnrd_pred_DMX: %f\tnbands: %d\tbin0: %d\n", nrg_DMX, nrg_pred_DMX, hStereoDft->nbands, bin0 ); + /*printf( "td_gain: %f\n", hStereoDft->td_gain[0] );*/ +#endif + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_generate_res_pred() + * + * + *-------------------------------------------------------------------------*/ +void stereo_dft_generate_res_pred( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const float samp_ratio, /* i : sampling ratio */ + float *pDFT_DMX, /* i : downmix signal */ + float *DFT_PRED_RES, /* o : residual prediction signal */ + float *pPredGain, /* i : residual prediction gains */ + const int16_t k, /* i : subframe index */ + float *ap_filt_DMX, /* i : enhanced stereo filling signal */ + int16_t *stop, /* o : last FD stereo filling bin */ + const int16_t bfi /* i : BFI flag */ +) +{ + /* general variables */ + int16_t i, b; + int16_t begin, end; + int16_t bin0, band0; /* ESF->Stefi crossover bin/band */ + int16_t lb_stefi_start_band; + + /* variables for enhanced stereo filling */ + float norm_fac; + float alpha, gain_limit; + + /* variables for stereo filling */ + int16_t d_long, d_short, d_long_ind, d_short_ind; + float g_short, g_long; + float dmx_nrg, rev_nrg; + float past_dmx_nrg; + float pred_gain_avg; + float g2; + int16_t nbands_respred; + + wmops_sub_start( "gen_respred" ); + + /* smoothing and limiting parameters */ + alpha = hStereoDft->wasTransient ? 0 : 0.2f; /* no smoothing after transients */ + gain_limit = 2; + + /* residual prediction only used up to 16 kHz (SWB) */ + nbands_respred = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); + + /* In ACELP mode the downmix signal is not available in bandwidth extension area. * + * Therefore, the downmix energy in the corresponding subbands is estimated. */ + bin0 = (int16_t) ( samp_ratio * hStereoDft->NFFT / 2 + .5 ); + bin0 = min( bin0, hStereoDft->band_limits[hStereoDft->nbands] ); + b = hStereoDft->nbands; + while ( hStereoDft->band_limits[b] >= bin0 ) + { + b--; + } + band0 = b; + + if ( hStereoDft->res_pred_mode[k + STEREO_DFT_OFFSET] < STEREO_DFT_RESPRED_ESF ) + { + /* no ESF signal available, use stereo filling over whole spectrum */ + lb_stefi_start_band = max( hStereoDft->res_pred_band_min, hStereoDft->res_cod_band_max ); + } + else + { + /* ESF signal available, use ESF in lowband, stereo filling in highband */ + lb_stefi_start_band = max( band0, hStereoDft->res_cod_band_max ); + } + + if ( bfi ) + { + lb_stefi_start_band = 0; + } + + /* lowband: use ESF if available, else use stereo filling */ + if ( hStereoDft->res_pred_mode[k + STEREO_DFT_OFFSET] == STEREO_DFT_RESPRED_ESF ) + { + /* ESF in lowband */ + /* main loop over core region*/ + for ( b = hStereoDft->res_cod_band_max; b <= band0; b++ ) + { + dmx_nrg = EPSILON; + rev_nrg = EPSILON; + + /* calculate band energies (low band only in case of ACELP) */ + for ( i = hStereoDft->band_limits[b]; i < min( hStereoDft->band_limits[b + 1], bin0 ); i++ ) + { + dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; + rev_nrg += ap_filt_DMX[2 * i] * ap_filt_DMX[2 * i] + ap_filt_DMX[2 * i + 1] * ap_filt_DMX[2 * i + 1]; + } + + /* smoothing */ + hStereoDft->smooth_res_nrg[b] = alpha * hStereoDft->smooth_res_nrg[b] + ( 1 - alpha ) * rev_nrg; + hStereoDft->smooth_dmx_nrg[b] = alpha * hStereoDft->smooth_dmx_nrg[b] + ( 1 - alpha ) * dmx_nrg; + + /* normalization factor */ + norm_fac = sqrtf( hStereoDft->smooth_dmx_nrg[b] / hStereoDft->smooth_res_nrg[b] ); + + /* gain compressor */ + norm_fac *= min( max( 0.8f, 1 / norm_fac ), 1.25f ); + + /* gain limiter */ + norm_fac = min( norm_fac, gain_limit ); + + for ( i = hStereoDft->band_limits[b]; i < min( hStereoDft->band_limits[b + 1], bin0 ); i++ ) + { + DFT_PRED_RES[2 * i] = norm_fac * pPredGain[b] * ap_filt_DMX[2 * i]; + DFT_PRED_RES[2 * i + 1] = norm_fac * pPredGain[b] * ap_filt_DMX[2 * i + 1]; + } + } + } + else if ( hStereoDft->res_pred_mode[k + STEREO_DFT_OFFSET] == STEREO_DFT_RESPRED_STEFI ) + { + /* stefi in lowband */ + set_zero( DFT_PRED_RES, 2 * hStereoDft->band_limits[lb_stefi_start_band] ); + + for ( b = lb_stefi_start_band; b <= band0; b++ ) + { + d_short_ind = STEREO_DFT_PAST_MAX - STEREO_DFT_STEFFI_DELAY_SHORT + b % 2; + d_long_ind = max( 4, (int16_t) ( ( STEREO_DFT_PAST_MAX + 4 - 1 ) * ( (float) b / ( hStereoDft->nbands - 1 ) ) + 0.5f ) ) - 4; + /* make sure d_short really corresponds to a shorter or equally long delay than d_long (e.g. not always the case for + * STEREO_DFT_STEFFI_DELAY_SHORT=3 and STEREO_DFT_STEFFI_DELAY_LONG=4)*/ + d_short_ind = max( d_short_ind, d_long_ind ); + + /* Even number of window sliding (assymmetric OLA) */ + d_short_ind = 2 * ( d_short_ind / 2 ); + d_long_ind = 2 * ( d_long_ind / 2 ); + + d_short = STEREO_DFT_PAST_MAX - d_short_ind; + d_long = STEREO_DFT_PAST_MAX - d_long_ind; + + d_short_ind = ( d_short_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + d_long_ind = ( d_long_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + + g_short = hStereoDft->stefi_short_gain; + g_long = hStereoDft->stefi_long_gain; + + /* change mixing ratio if long and short delay are the same */ + if ( d_short == d_long ) + { + g_short = 1; + g_long = 0; + } + + /* Avoid transient components */ + if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 && hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) + { + g_long = 0.0f; + g_short = 0.0f; + } + else if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 ) + { + g_long = 1.0f; + g_short = 0.0f; + } + else if ( hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) + { + g_long = 0.0f; + g_short = 1.0f; + } + + if ( max( g_short, g_long ) > 0 ) + { + past_dmx_nrg = EPSILON; + dmx_nrg = EPSILON; + for ( i = hStereoDft->band_limits[b]; i < min( bin0, hStereoDft->band_limits[b + 1] ); i++ ) + { + dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; + + DFT_PRED_RES[2 * i] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i] ); + DFT_PRED_RES[2 * i + 1] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i + 1] ); + + past_dmx_nrg += DFT_PRED_RES[2 * i] * DFT_PRED_RES[2 * i] + DFT_PRED_RES[2 * i + 1] * DFT_PRED_RES[2 * i + 1]; + } + if ( !bfi || b >= hStereoDft->res_cod_band_max ) + { + norm_fac = sqrtf( ( 0.001f + dmx_nrg ) / ( 0.001f + past_dmx_nrg ) ); + g2 = pPredGain[b] * norm_fac; + pred_gain_avg = g_short * hStereoDft->past_res_pred_gain[d_short_ind][b] + + g_long * hStereoDft->past_res_pred_gain[d_long_ind][b]; + + g2 = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); + + for ( i = hStereoDft->band_limits[b]; i < min( bin0, hStereoDft->band_limits[b + 1] ); i++ ) + { + DFT_PRED_RES[2 * i] *= g2; + DFT_PRED_RES[2 * i + 1] *= g2; + } + } + } + else + { + set_zero( DFT_PRED_RES + 2 * hStereoDft->band_limits[b], 2 * ( min( bin0, hStereoDft->band_limits[b + 1] ) - hStereoDft->band_limits[b] ) ); + } + } + } + +#ifndef DEBUG_STEREO_DFT_NOCORE + if ( hStereoDft->band_limits[nbands_respred] > bin0 ) + { + /* apply stereo filling in ACELP BWE region */ + if ( hStereoDft->core_hist[0] == ACELP_CORE && hStereoDft->core_hist[STEREO_DFT_STEFFI_DELAY_SHORT / 2] == ACELP_CORE ) + { + /* ACELP -> ACELP: nothing to do */ + *stop = bin0; + } + else if ( hStereoDft->core_hist[STEREO_DFT_STEFFI_DELAY_SHORT / 2] == ACELP_CORE ) + { + /* ACELP -> TCX/HQ core transition */ + /* calculate high band energy only */ + dmx_nrg = EPSILON; + for ( i = bin0; i < hStereoDft->NFFT / 2; i++ ) + { + dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; + } + + hStereoDft->hb_nrg[0] += dmx_nrg * 2 / hStereoDft->NFFT; + *stop = bin0; + } + else if ( hStereoDft->core_hist[0] == ACELP_CORE ) + { + /* TCX/HQ core -> ACELP transition */ + /* apply short delay only and blend to long/short gain */ + dmx_nrg = hStereoDft->hb_nrg_subr[k]; + d_short_ind = STEREO_DFT_PAST_MAX - STEREO_DFT_TD_STEFI_SUBFR_DELAY; + + d_short_ind = ( d_short_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + + /* calculate high band energy of past dmx */ + past_dmx_nrg = EPSILON; + for ( i = bin0; i < min( hStereoDft->NFFT / 2, STEREO_DFT32MS_N_32k / 2 ); i++ ) + { + past_dmx_nrg += hStereoDft->DFT_past_DMX[d_short_ind][2 * i] * hStereoDft->DFT_past_DMX[d_short_ind][2 * i] + hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1] * hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1]; + } + + for ( b = band0; b < nbands_respred; b++ ) + { + g_short = hStereoDft->past_res_pred_gain[d_short_ind][b] < 0 ? 0 : ( 1.f + hStereoDft->stefi_short_gain ) / 2; + + if ( g_short > 0 ) + { + norm_fac = sqrtf( ( 0.001f + dmx_nrg ) / ( 0.001f + past_dmx_nrg ) ); + g2 = pPredGain[b] * norm_fac; + pred_gain_avg = hStereoDft->past_res_pred_gain[d_short_ind][b] * g_short; + + g2 = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); + for ( i = max( hStereoDft->band_limits[b], bin0 ); i < min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); i++ ) + { + DFT_PRED_RES[2 * i] = g2 * hStereoDft->DFT_past_DMX[d_short_ind][2 * i]; + DFT_PRED_RES[2 * i + 1] = g2 * hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1]; + } + } + else + { + begin = max( hStereoDft->band_limits[b], bin0 ); + end = min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); + set_zero( DFT_PRED_RES + 2 * begin, 2 * ( end - begin ) ); + } + } + } + else +#endif + { + for ( b = band0; b < nbands_respred; b++ ) + { + /* TCX/HQ core -> TCX/HQ core: business as usual */ + d_short_ind = STEREO_DFT_PAST_MAX - STEREO_DFT_STEFFI_DELAY_SHORT + b % 2; + d_long_ind = max( 4, (int16_t) ( ( STEREO_DFT_PAST_MAX + 4 - 1 ) * ( (float) b / ( hStereoDft->nbands - 1 ) ) + 0.5f ) ) - 4; + /* make sure d_short really corresponds to a shorter or equally long delay than d_long (e.g. not always the case for + * STEREO_DFT_STEFFI_DELAY_SHORT=3 and STEREO_DFT_STEFFI_DELAY_LONG=4)*/ + d_short_ind = max( d_short_ind, d_long_ind ); + + /* Even number of window sliding (assymmetric OLA) */ + d_short_ind = 2 * ( d_short_ind / 2 ); + d_long_ind = 2 * ( d_long_ind / 2 ); + + d_short = STEREO_DFT_PAST_MAX - d_short_ind; + d_long = STEREO_DFT_PAST_MAX - d_long_ind; + + d_short_ind = ( d_short_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + d_long_ind = ( d_long_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + + g_short = hStereoDft->stefi_short_gain; + g_long = hStereoDft->stefi_long_gain; + + /* change mixing ratio if long and short delay are the same */ + if ( d_short == d_long ) + { + g_short = 1; + g_long = 0; + } + + /* Avoid transient components */ + if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 && hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) + { + g_long = 0.0f; + g_short = 0.0f; + } + else if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 ) + { + g_long = 1.0f; + g_short = 0.0f; + } + else if ( hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) + { + g_long = 0.0f; + g_short = 1.0f; + } +#ifndef DEBUG_STEREO_DFT_NOCORE + if ( hStereoDft->core_hist[d_short / 2] == ACELP_CORE ) + { + g_short = 0; + } + if ( hStereoDft->core_hist[d_long / 2] == ACELP_CORE ) + { + g_long = 0; + } +#endif + + if ( max( g_short, g_long ) > 0 ) + { + past_dmx_nrg = EPSILON; + dmx_nrg = EPSILON; + for ( i = max( hStereoDft->band_limits[b], bin0 ); i < min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); i++ ) + { + dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; + + DFT_PRED_RES[2 * i] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i] ); + DFT_PRED_RES[2 * i + 1] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i + 1] ); + + past_dmx_nrg += DFT_PRED_RES[2 * i] * DFT_PRED_RES[2 * i] + DFT_PRED_RES[2 * i + 1] * DFT_PRED_RES[2 * i + 1]; + } + + norm_fac = sqrtf( ( 0.001f + dmx_nrg ) / ( 0.001f + past_dmx_nrg ) ); + g2 = pPredGain[b] * norm_fac; + pred_gain_avg = g_short * hStereoDft->past_res_pred_gain[d_short_ind][b] + g_long * hStereoDft->past_res_pred_gain[d_long_ind][b]; + + g2 = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); + + for ( i = max( hStereoDft->band_limits[b], bin0 ); i < min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); i++ ) + { + DFT_PRED_RES[2 * i] *= g2; + DFT_PRED_RES[2 * i + 1] *= g2; + } + } + else + { + begin = max( hStereoDft->band_limits[b], bin0 ); + end = min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); + set_zero( DFT_PRED_RES + 2 * begin, 2 * ( end - begin ) ); + } + } + } +#ifndef DEBUG_STEREO_DFT_NOCORE + } +#endif + + /* update buffers */ + for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->nbands; b++ ) + { + if ( hStereoDft->attackPresent || hStereoDft->wasTransient ) + { + hStereoDft->past_res_pred_gain[( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX][b] = -1; + } + else + { + hStereoDft->past_res_pred_gain[( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX][b] = pPredGain[b]; + } + } + + wmops_sub_end(); + + return; +} + + +/*--------------------------------------------------------------- + * stereo_dft_dec_smooth_parameters() + * + * + * ---------------------------------------------------------------*/ + +void stereo_dft_dec_smooth_parameters( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ + const int16_t prev_sid_nodata /* i : Previous SID/No data indicator */ +) +{ + int16_t k_offset, k, k2, b, N_div; + float *pIpd, *pInterpol; + float *pgIpd; + float *pSideGain; + float diff_ipd; + int16_t nbands; + int16_t max_res_pred_ind; + + N_div = STEREO_DFT_NBDIV; + k_offset = STEREO_DFT_OFFSET; + + if ( hStereoDft->frame_sid_nodata || prev_sid_nodata ) + { + k = 1; + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + *( hStereoDft->side_gain + ( ( k + k_offset ) - 1 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b ); + } + + for ( k2 = 1; k2 < hStereoDft->prm_res[k + k_offset]; k2++ ) + { + hStereoDft->gipd[( k + k_offset ) - k2] = hStereoDft->gipd[k + k_offset]; + } + + for ( k2 = 1; k2 < hStereoDft->prm_res[k + k_offset]; k2++ ) + { + hStereoDft->itd[( k + k_offset ) - k2] = hStereoDft->itd[k + k_offset]; + } + + return; + } + + for ( k = hStereoDft->prm_res[k_offset] - 1; k < N_div; k += hStereoDft->prm_res[k + k_offset] ) + { + max_res_pred_ind = 0; + + if ( hStereoDft->reverb_flag == 1 ) + { + nbands = min( 10, hStereoDft->nbands_respred ); + + /*Shift 2 last bands residual prediction gains for SWB/FB*/ + if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_HIGH ) + { + for ( b = hStereoDft->nbands_respred - 1; b >= nbands; b-- ) + { + hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = + hStereoDft->res_gains_ind[1][b - STEREO_DFT_RES_PRED_BAND_MIN_RED + hStereoDft->res_pred_band_min + STEREO_DFT_BAND_MAX]; + hStereoDft->res_gains_ind[1][b - STEREO_DFT_RES_PRED_BAND_MIN_RED + hStereoDft->res_pred_band_min + STEREO_DFT_BAND_MAX] = 0; + } + } + + /* Get maximal index */ + for ( b = hStereoDft->res_pred_band_min; b < ( nbands - STEREO_DFT_RES_PRED_BAND_MIN_CONST ); b++ ) + { + if ( max_res_pred_ind < hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] ) + { + max_res_pred_ind = (int16_t) hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; + } + } + + /* predictive values */ + for ( ; b < nbands; b++ ) + { + assert( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] == 0 ); + hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = max_res_pred_ind; + } + } + + for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->res_cod_band_max; b++ ) + { + float tmp; + int16_t tmps1, tmps2; + + hStereoDft->res_gains_ind[0][b] = hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; + /*stereo_dft_dequantize_res_gains_f(&hStereoDft->res_gains_ind[0][b], &hStereoDft->res_gains_ind[1][b+STEREO_DFT_BAND_MAX],hStereoDft->side_gain+(k+k_offset)*STEREO_DFT_BAND_MAX+b, hStereoDft->res_pred_gain+(k+k_offset)*STEREO_DFT_BAND_MAX+b, 1);*/ + tmps1 = (int16_t) ( hStereoDft->res_gains_ind[0][b] ); + tmps2 = (int16_t) ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] ); + stereo_dft_dequantize_res_gains( &tmps1, &tmps2, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); + + if ( hStereoDft->attackPresent ) + { + hStereoDft->res_gains_ind[1][b] = 0.8f * hStereoDft->res_gains_ind[1][b]; + } + else if ( hStereoDft->trans || ( hStereoDft->res_pred_mode[k] && ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] < 2.f ) ) ) + { + hStereoDft->res_gains_ind[1][b] = 0.6f * hStereoDft->res_gains_ind[1][b] + 0.4f * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; + } + else + { + hStereoDft->res_gains_ind[1][b] = dft_alpha_s2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_s2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; + } + + stereo_dft_dequantize_res_gains_f( &hStereoDft->res_gains_ind[0][b], &hStereoDft->res_gains_ind[1][b], &tmp, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); + } + + /* Smoothing of prediction gains between ftrames */ + for ( ; b < hStereoDft->nbands; b++ ) + { + if ( hStereoDft->attackPresent ) + { + hStereoDft->res_gains_ind[0][b] = hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; + hStereoDft->res_gains_ind[1][b] = 0.8f * hStereoDft->res_gains_ind[1][b]; + } + else if ( hStereoDft->trans || ( hStereoDft->res_pred_mode[k] && ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] < 2.f ) ) ) + { + hStereoDft->res_gains_ind[0][b] = hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; + + if ( hStereoDft->hConfig->band_res == STEREO_DFT_BAND_RES_LOW ) + { + hStereoDft->res_gains_ind[1][b] = dft_alpha_w_b2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_w_b2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; + } + else + { + hStereoDft->res_gains_ind[1][b] = dft_alpha_w[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_w[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; + } + } + else + { + if ( hStereoDft->hConfig->band_res == STEREO_DFT_BAND_RES_LOW ) + { + hStereoDft->res_gains_ind[0][b] = dft_alpha_s_b2[b] * hStereoDft->res_gains_ind[0][b] + ( 1 - dft_alpha_s_b2[b] ) * hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; + hStereoDft->res_gains_ind[1][b] = dft_alpha_s2_b2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_s2_b2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; + } + else + { + hStereoDft->res_gains_ind[0][b] = dft_alpha_s[b] * hStereoDft->res_gains_ind[0][b] + ( 1 - dft_alpha_s[b] ) * hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; + hStereoDft->res_gains_ind[1][b] = dft_alpha_s2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_s2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; + } + } + + if ( !hStereoDft->recovery_flg ) + { + stereo_dft_dequantize_res_gains_f( &hStereoDft->res_gains_ind[0][b], &hStereoDft->res_gains_ind[1][b], hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); + } + } + + /* Smoothing of IPDs*/ + pgIpd = hStereoDft->gipd + ( k + k_offset ); + diff_ipd = pgIpd[0] - pgIpd[-hStereoDft->prm_res[k + k_offset]]; + if ( diff_ipd < -EVS_PI ) + { + pgIpd[0] += PI2; + } + else if ( diff_ipd > EVS_PI ) + { + pgIpd[0] -= PI2; + } + + if ( !hStereoDft->attackPresent ) + { + if ( hStereoDft->wasTransient ) + { + pgIpd[0] = 0.8f * pgIpd[0] + 0.2f * pgIpd[-hStereoDft->prm_res[k + k_offset]]; + } + else + { + pgIpd[0] = 0.5f * pgIpd[0] + 0.5f * pgIpd[-hStereoDft->prm_res[k + k_offset]]; + } + } + + + if ( !hStereoDft->attackPresent ) + { + pSideGain = hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; + for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) + { + pSideGain[b] = dft_res_cod_alpha[b] * pSideGain[b] + ( 1 - dft_res_cod_alpha[b] ) * pSideGain[b - hStereoDft->prm_res[k + k_offset] * STEREO_DFT_BAND_MAX]; + } + } + + /*Interpolation between DFT slots*/ + for ( k2 = 1; k2 < hStereoDft->prm_res[k + k_offset]; k2++ ) + { + pInterpol = hStereoDft->gipd + ( ( k + k_offset ) - k2 ); + pIpd = hStereoDft->gipd + ( k + k_offset ); + if ( hStereoDft->attackPresent ) + { + *( pInterpol ) = *( pIpd ); + } + else + { + *( pInterpol ) = *( hStereoDft->gipd + ( k + k_offset - hStereoDft->prm_res[k + k_offset] ) ); + } + + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + *( hStereoDft->res_pred_gain + ( ( k + k_offset ) - k2 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->res_pred_gain + ( k + k_offset - hStereoDft->prm_res[k + k_offset] ) * STEREO_DFT_BAND_MAX + b ); + + if ( b < hStereoDft->res_cod_band_max || hStereoDft->attackPresent || hStereoDft->trans || ( hStereoDft->res_pred_mode[k] && ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] < 2.f ) ) ) + { + *( hStereoDft->side_gain + ( ( k + k_offset ) - k2 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b ); + } + else + { + *( hStereoDft->side_gain + ( ( k + k_offset ) - k2 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->side_gain + ( k + k_offset - hStereoDft->prm_res[k + k_offset] ) * STEREO_DFT_BAND_MAX + b ); + } + } + + hStereoDft->itd[( k + k_offset ) - k2] = hStereoDft->itd[k + k_offset]; + } /*end of interpolation*/ + } + + return; +} + + +/*--------------------------------------------------------------- + * stereo_dft_adapt_sf_delay() + * + * + * ---------------------------------------------------------------*/ + +static void stereo_dft_adapt_sf_delay( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, + float *pPredGain ) +{ + float var_mean_ratio; + float new_variation; + float target_delay; + float max_pg, sum_pg, alpha_up, alpha_down; + int16_t b; + + max_pg = 0.0f; + sum_pg = 0.0f; + + /* find sum and maximum of prediction gains */ + for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->nbands; b++ ) + { + if ( pPredGain[b] > max_pg ) + { + max_pg = pPredGain[b]; + } + sum_pg += pPredGain[b]; + } + + if ( sum_pg > 0.0f ) + { + /* Calculate mean of the prediction gain */ + hStereoDft->lt_pred_gain = STEREO_DFT_LT_PREDGAIN_UPD * sum_pg + ( 1.0f - STEREO_DFT_LT_PREDGAIN_UPD ) * hStereoDft->lt_pred_gain; + + /* Calculate the variation of the prediction gain */ + new_variation = fabsf( sum_pg - hStereoDft->lt_pred_gain ); + hStereoDft->lt_pred_gain_variation = STEREO_DFT_VR_PREDGAIN_UPD * new_variation + ( 1.0f - STEREO_DFT_VR_PREDGAIN_UPD ) * hStereoDft->lt_pred_gain_variation; + } + + /* Calculate ratio of variation and mean of prediction gain */ + var_mean_ratio = STEREO_DFT_RES_RATIO_LIMIT; + if ( hStereoDft->lt_pred_gain > 0.0f ) + { + var_mean_ratio = min( 1.5f * STEREO_DFT_RES_RATIO_LIMIT, hStereoDft->lt_pred_gain_variation / hStereoDft->lt_pred_gain ); + } + + if ( max_pg > STEREO_DFT_STEFFI_PG_THRESHOLD ) + { + /* slow upwards */ + alpha_up = STEREO_DFT_STEFFI_RATIO_UP_HIGH; + alpha_down = STEREO_DFT_STEFFI_RATIO_DOWN_HIGH; + } + else + { + /* slow downwards */ + alpha_up = STEREO_DFT_STEFFI_RATIO_UP_LOW; + alpha_down = STEREO_DFT_STEFFI_RATIO_DOWN_LOW; + } + + if ( var_mean_ratio > hStereoDft->lt_var_mean_ratio ) + { + hStereoDft->lt_var_mean_ratio = alpha_up * var_mean_ratio + ( 1.0f - alpha_up ) * hStereoDft->lt_var_mean_ratio; + } + else + { + hStereoDft->lt_var_mean_ratio = alpha_down * var_mean_ratio + ( 1.0f - alpha_down ) * hStereoDft->lt_var_mean_ratio; + } + + /* Calculate a target delay for the stereo filling. Set the stereo filling delay lower when the prediction gain + variation is relatively high compared to the mean */ + if ( hStereoDft->lt_var_mean_ratio >= STEREO_DFT_RES_RATIO_LIMIT ) + { + target_delay = STEREO_DFT_STEFFI_DELAY_SHORT; + } + else + { + target_delay = min( STEREO_DFT_STEFFI_DELAY_LONG, STEREO_DFT_STEFFI_DELAY_SHORT + ( STEREO_DFT_STEFFI_DELAY_OFFSET + STEREO_DFT_STEFFI_DELAY_LONG - STEREO_DFT_STEFFI_DELAY_SHORT ) * ( 1.0f - hStereoDft->lt_var_mean_ratio / STEREO_DFT_RES_RATIO_LIMIT ) ); + } + + /* Adapt the stereo filling delay by interpolating between two delay taps, one at the shortest delay and one at the longest delay */ + hStereoDft->stefi_short_gain = ( STEREO_DFT_STEFFI_DELAY_LONG - target_delay ) / ( STEREO_DFT_STEFFI_DELAY_LONG - STEREO_DFT_STEFFI_DELAY_SHORT ); + hStereoDft->stefi_long_gain = sqrtf( 1.0f - hStereoDft->stefi_short_gain * hStereoDft->stefi_short_gain ); + +#ifdef DEBUG_MODE_DFT + dbgwrite( &hStereoDft->lt_pred_gain, sizeof( float ), 1, 1, "res/stereo_dft_lt_pred_gain_b.pcm" ); + dbgwrite( &hStereoDft->lt_pred_gain_variation, sizeof( float ), 1, 1, "res/stereo_dft_lt_pred_gain_variance_b.pcm" ); + dbgwrite( &hStereoDft->lt_var_mean_ratio, sizeof( float ), 1, 1, "res/stereo_dft_lt_var_mean_ratio_b.pcm" ); + dbgwrite( &target_delay, sizeof( float ), 1, 1, "res/stereo_dft_target_delay.pcm" ); + dbgwrite( &hStereoDft->stefi_short_gain, sizeof( float ), 1, 1, "res/stereo_dft_short_gain.pcm" ); + dbgwrite( &hStereoDft->stefi_long_gain, sizeof( float ), 1, 1, "res/stereo_dft_long_gain.pcm" ); +#endif /* DEBUG_MODE_DFT */ + + return; +} diff --git a/lib_dec/ivas_stereo_dft_dec_dmx.c b/lib_dec/ivas_stereo_dft_dec_dmx.c new file mode 100644 index 0000000000..48ee7cf4e6 --- /dev/null +++ b/lib_dec/ivas_stereo_dft_dec_dmx.c @@ -0,0 +1,347 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * stereo_dft_dmx_out_reset() + * + * Reset DFT stereo mono output memories + *------------------------------------------------------------------------*/ + +void stereo_dft_dmx_out_reset( + STEREO_DFT_DMX_DATA_HANDLE hStereoDftDmx /* i/o: DFT stereo DMX decoder */ +) +{ + { + hStereoDftDmx->targetGain = 1.0f; + hStereoDftDmx->prevTargetGain = 1.0f; + } + + set_zero( hStereoDftDmx->memOutHB, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); + set_zero( hStereoDftDmx->memTransitionHB, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_unify_dmx() + * + * create a uniform dmx in case of residual coding by converting from passive + * to active dmx in residual coding region + *-------------------------------------------------------------------------*/ + +void stereo_dft_unify_dmx( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder stereo handle */ + Decoder_State *st0, /* i/o: decoder state structure */ + float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ + float *input_mem, /* i/o: mem of buffer DFT analysis */ + const int16_t prev_sid_nodata /* i : Previous SID/No data indicator */ +) +{ + int16_t i, k, b, N_div; + float DFT_L[STEREO_DFT32MS_N_MAX]; + float DFT_R[STEREO_DFT32MS_N_MAX]; + float *pDFT_DMX; + float *pDFT_RES; + float g, tmp; + float *pSideGain; + int16_t k_offset; + + /* Variables for stereo residual PLC */ + float DFT_PRED_RES[STEREO_DFT32MS_N_32k]; + float samp_ratio; + int16_t prev_bfi; + float dmx_nrg; + float *pPredGain; + int16_t stop; + int16_t output_frame; + int16_t plocs[STEREO_DFT_RES_N_PEAKS_MAX]; + int16_t num_plocs; + float plocsi[STEREO_DFT_RES_N_PEAKS_MAX]; + + output_frame = (int16_t) ( st0->output_Fs / FRAMES_PER_SEC ); + samp_ratio = (float) st0->sr_core / (float) st0->output_Fs; + prev_bfi = st0->prev_old_bfi; + + /* Initialization */ + k_offset = 1; + N_div = STEREO_DFT_NBDIV; + + dmx_nrg = 0.0f; + /* make sure number of bands corresponds to output bwidth in case it is lower than parameter bwidth */ + if ( output_frame < inner_frame_tbl[st0->bwidth] ) + { + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], hStereoDft->NFFT, DEC ); + } + if ( prev_bfi ) + { + dmx_nrg = stereo_dft_dmx_swb_nrg( DFT[0], DFT[0] + STEREO_DFT32MS_N_MAX, min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); + } + + + /* Analyze nature of current frame */ + hStereoDft->trans = ( ( ( st0->clas_dec == ONSET ) || ( st0->clas_dec == SIN_ONSET ) || ( st0->clas_dec == UNVOICED_CLAS ) || ( st0->clas_dec == UNVOICED_TRANSITION ) ) || ( st0->stab_fac <= 0.25f ) ) || + ( st0->core == TCX_20_CORE && ( ( st0->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) || ( st0->hTcxCfg->tcx_last_overlap_mode == HALF_OVERLAP ) ) ) || ( st0->core == TCX_10_CORE ); + + /* Smoothing for the current frame */ + stereo_dft_dec_smooth_parameters( hStereoDft, prev_sid_nodata ); + + for ( k = 0; k < N_div; k++ ) + { + pDFT_DMX = DFT[0] + k * STEREO_DFT32MS_N_MAX; + pDFT_RES = DFT[1] + k * STEREO_DFT32MS_N_MAX; + + assert( hStereoDft->hConfig->dmx_active ); + /*Apply Stereo*/ + g = 1.f; + + /* since delay is just 3.125ms, the parameters received are used for the second window */ + pSideGain = hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; + + + /* Stereo residual PLC */ + if ( hStereoDft->res_cod_band_max > 0 ) + { + if ( !st0->bfi ) + { + if ( k == 1 ) + { + mvr2r( pDFT_RES, hStereoDft->res_mem, 2 * hStereoDft->band_limits[hStereoDft->res_cod_band_max] ); + hStereoDft->time_offs = 0; + } + } + else + { + hStereoDft->nbands = hStereoDft->res_cod_band_max; /* Limit nbands since residual PLC only needs the low frequency range of the stereo filling */ + pPredGain = hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; + hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + STEREO_DFT_PAST_MAX - 1 ) % STEREO_DFT_PAST_MAX; + stereo_dft_generate_res_pred( hStereoDft, samp_ratio, pDFT_DMX, DFT_PRED_RES, pPredGain, k, DFT[1] + k * STEREO_DFT32MS_N_MAX, &stop, st0->bfi ); + stereo_dft_res_ecu( hStereoDft, pDFT_RES, DFT_PRED_RES, k, output_frame, prev_bfi, dmx_nrg, &num_plocs, plocs, plocsi, input_mem ); + } + } + + + /* Apply active DMX */ + DFT_L[0] = pDFT_DMX[0]; + DFT_R[0] = pDFT_DMX[0]; + + /* upmix residual part */ + for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) + { + g = pSideGain[b]; + +#ifdef DEBUG_MODE_DFT + dbgwrite( &g, sizeof( float ), 1, 1, "./res/stereo_dft_dec_g.pcm" ); +#endif + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + tmp = g * pDFT_DMX[2 * i] + pDFT_RES[2 * i]; + + DFT_L[2 * i] = pDFT_DMX[2 * i] + tmp; + DFT_R[2 * i] = pDFT_DMX[2 * i] - tmp; + + tmp = g * pDFT_DMX[2 * i + 1] + pDFT_RES[2 * i + 1]; + + DFT_L[2 * i + 1] = pDFT_DMX[2 * i + 1] + tmp; + DFT_R[2 * i + 1] = pDFT_DMX[2 * i + 1] - tmp; + } + } + + /* downmix residual part with active downmix */ + for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) + { + int16_t j; + float sum_nrg_L = EPSILON, sum_nrg_R = EPSILON, dot_prod_real = EPSILON, dot_prod_img = EPSILON; + float sum_nrg_Mid, sum_abs, dot_prod_abs; + float wR, wL; + + for ( j = hStereoDft->band_limits[b]; j < hStereoDft->band_limits[b + 1]; j++ ) + { + sum_nrg_L += DFT_L[2 * j] * DFT_L[2 * j] + DFT_L[2 * j + 1] * DFT_L[2 * j + 1]; + sum_nrg_R += DFT_R[2 * j] * DFT_R[2 * j] + DFT_R[2 * j + 1] * DFT_R[2 * j + 1]; + dot_prod_real += DFT_L[2 * j] * DFT_R[2 * j] + DFT_L[2 * j + 1] * DFT_R[2 * j + 1]; + dot_prod_img += DFT_L[2 * j + 1] * DFT_R[2 * j] - DFT_L[2 * j] * DFT_R[2 * j + 1]; + } + sum_nrg_Mid = max( 0.f, sum_nrg_L + sum_nrg_R + 2.f * dot_prod_real ); + sum_abs = sqrtf( sum_nrg_L ) + sqrtf( sum_nrg_R ) + EPSILON; + dot_prod_abs = sqrtf( dot_prod_real * dot_prod_real + dot_prod_img * dot_prod_img ); + wR = sqrtf( 0.5f * ( sum_nrg_L + sum_nrg_R ) + dot_prod_abs ) / sum_abs; + wL = wR + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + /*DMX Mapping*/ + pDFT_DMX[2 * i] = ( wL * DFT_L[2 * i] + wR * DFT_R[2 * i] ) * INV_SQRT_2; + pDFT_DMX[2 * i + 1] = ( wL * DFT_L[2 * i + 1] + wR * DFT_R[2 * i + 1] ) * INV_SQRT_2; + } + } + + mvr2r( pDFT_DMX, DFT[0] + k * STEREO_DFT32MS_N_MAX, hStereoDft->NFFT ); + + /* Update DFT_past_DMX, needed for stereo filling used by stereo residual PLC */ + hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + mvr2r( pDFT_DMX, hStereoDft->DFT_past_DMX[hStereoDft->past_DMX_pos], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); + + if ( st0->bfi && !prev_bfi ) + { + int16_t idx_k0, idx_k1; + idx_k0 = ( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; + idx_k1 = ( idx_k0 + 1 ) % STEREO_DFT_PAST_MAX; + + /*dmx energy memory*/ + hStereoDft->past_dmx_nrg = stereo_dft_dmx_swb_nrg( hStereoDft->DFT_past_DMX[idx_k0], hStereoDft->DFT_past_DMX[idx_k1], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * add_HB_to_mono_dmx() + * + * add ACELP HB for DFT Stereo mono output with residual coding + *-------------------------------------------------------------------*/ + +void add_HB_to_mono_dmx( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[L_FRAME48k], /* i/o: output synthesis */ + float outputHB[L_FRAME48k], /* i : HB synthesis */ + const int16_t last_core, /* i : last core, primary channel */ + const int16_t output_frame /* i : frame length */ +) +{ + int16_t i, j, decoderDelay, icbweOLASize, dftOvlLen, memOffset; + float temp[L_FRAME48k + NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; + + float winSlope; + float alpha; + const float *win_dft; + int32_t output_Fs; + float *memOutHB, *memTransitionHB; + + output_Fs = hCPE->hCoreCoder[0]->output_Fs; + memOutHB = hCPE->hStereoDftDmx->memOutHB; + memTransitionHB = hCPE->hStereoDftDmx->memTransitionHB; + + memOffset = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ); + + if ( hCPE->hCoreCoder[0]->core == ACELP_CORE && hCPE->hCoreCoder[0]->extl_brate > 0 ) + { + /* Resampled LB and HB offset */ + mvr2r( outputHB, temp + memOffset, output_frame - memOffset ); + + decoderDelay = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); + + if ( last_core != ACELP_CORE ) + { + /* hb_synth of mid band is faded out in the 1.25 ms prior to DFT analysis and the icbwe is faded in time domain */ + icbweOLASize = NS2SA( output_Fs, STEREO_DFT_DELAY_DEC_BWE_NS ); + + for ( i = 0; i < decoderDelay; i++ ) + { + temp[i] = 0; + } + + assert( icbweOLASize > 0 ); + winSlope = 1.0f / icbweOLASize; + alpha = winSlope; + for ( ; i < decoderDelay + icbweOLASize; i++ ) + { + temp[i] *= alpha; + alpha += winSlope; + } + } + else + { + mvr2r( memOutHB, temp, memOffset ); + } + + v_add( temp, output, output, output_frame ); + + mvr2r( outputHB + output_frame - memOffset, memOutHB, memOffset ); + + win_dft = hCPE->hStereoDft->win32ms; + dftOvlLen = hCPE->hStereoDft->dft32ms_ovl; + + /* Preparing buffers in anticipation of an ACELP to TCX switch */ + j = 0; + for ( i = 0; i < memOffset; i++ ) + { + memTransitionHB[i] = memOutHB[i] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; + j++; + } + + for ( i = 0; j < dftOvlLen; i++ ) + { + memTransitionHB[memOffset + i] = outputHB[output_frame - i - 1] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; + j++; + } + } + else + { + if ( last_core == ACELP_CORE ) + { + /* This is generated in the ACELP frame and windowed. This process is akin to GenTransition for IC-BWE */ + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + v_add( output, outputHB, output, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + } + else + { + v_add( output, memTransitionHB, output, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + } + + set_f( memOutHB, 0, memOffset ); + set_f( memTransitionHB, 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + } + } + + return; +} diff --git a/lib_dec/ivas_stereo_dft_plc.c b/lib_dec/ivas_stereo_dft_plc.c new file mode 100644 index 0000000000..34eaa2013c --- /dev/null +++ b/lib_dec/ivas_stereo_dft_plc.c @@ -0,0 +1,387 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "math.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*--------------------------------------------------------------- + * Local constants + * ---------------------------------------------------------------*/ + +#define ZP8k 15 /* zero padding in 8kHz DFT analysis */ +#define OFFSET8k 55 /* offset in 8 kHz */ +#define STEREO_DFT_PLC_STEP21 ( L_FRAME8k - OFFSET8k ) /* Step from subframe 2 in frame n to subframe 1 in frame n+1 */ +#define STEREO_DFT_PLC_PH_C ( 1.0f / 3.0329f ) /* Phase estimation constant, for estimating phase of fractional frequency */ + + +/*--------------------------------------------------------------- + * stereo_dft_res_ecu() + * + * Error concealment of DFT Stereo residual, including memory + * updates of DFT analysis memory and IMDCT OLA + * ---------------------------------------------------------------*/ + +void stereo_dft_res_ecu( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ + float *pDFT_RES, /* i/o: residual signal */ + float *const DFT_PRED_RES, /* i/o: residual prediction signal */ + const int16_t k, /* i : Subframe index */ + const int16_t output_frame, /* i : Output frame length */ + const int16_t prev_bfi, /* i : Previous BFI */ + const float dmx_nrg, /* i : Down-mix energy */ + int16_t *num_plocs, /* i/o: Number of peak locations */ + int16_t *plocs, /* i/o: Peak locations (bin) */ + float *plocsi, /* i/o: Peak locations (fractional) */ + float *input_mem /* o : Residual DFT buffer input mem */ +) +{ + float res_buf[L_FRAME8k]; + int16_t i; + int16_t L_res; + float step; + float fac; + float trigo_dec[STEREO_DFT32MS_N_8k / 2 + 1]; + int16_t trigo_step; + + set_zero( pDFT_RES, L_FRAME8k ); + + L_res = hStereoDft->band_limits[hStereoDft->res_cod_band_max]; + + stereo_dft_res_subst_spec( hStereoDft, pDFT_RES, DFT_PRED_RES, hStereoDft->time_offs, L_res, L_FRAME8k, k, num_plocs, plocs, plocsi, k == 0 ); + + fac = (float) ( L_FRAME8k ) / (float) ( hStereoDft->NFFT ); + + if ( hStereoDft->core_hist[0] == ACELP_CORE ) + { + fac *= 0.25f; + } + + trigo_step = STEREO_DFT_TRIGO_SRATE_8k_STEP * STEREO_DFT_TRIGO_DEC_STEP; + for ( i = 0; i < STEREO_DFT32MS_N_8k / 4; i++ ) + { + trigo_dec[i] = hStereoDft->dft_trigo_8k[i * trigo_step]; + trigo_dec[STEREO_DFT32MS_N_8k / 2 - i] = hStereoDft->dft_trigo_8k[i * trigo_step]; + } + trigo_dec[STEREO_DFT32MS_N_8k / 4] = hStereoDft->dft_trigo_8k[STEREO_DFT32MS_N_8k / 4 * trigo_step]; + + /* estimation of res_cod_mem (ola part in imdct residual signal) and input_mem (memory for buffer in DFT analysis)*/ + if ( k == 0 ) + { + mvr2r( pDFT_RES, res_buf, L_FRAME8k ); + stereo_dft_res_subst_spec( hStereoDft, res_buf, DFT_PRED_RES, hStereoDft->time_offs + output_frame, L_res, L_FRAME8k, k, num_plocs, plocs, plocsi, FALSE ); + + rfft( res_buf, trigo_dec, L_FRAME8k, +1 ); + + v_multc( res_buf, fac, res_buf, L_FRAME8k ); + mvr2r( res_buf + ( OFFSET8k - ZP8k ), hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); + + mvr2r( res_buf + ZP8k, input_mem, NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) ); /* Store memory for cross-fade to next frame, in case of good frame */ + } + else + { + mvr2r( pDFT_RES, res_buf, L_FRAME8k ); + + rfft( res_buf, trigo_dec, L_FRAME8k, +1 ); + + v_multc( res_buf, fac, res_buf, L_FRAME8k ); + + /* Cross-fade memory */ + fac = 0; + step = 1.0f / NS2SA( 8000, STEREO_DFT32MS_OVL_NS ); + for ( i = 0; i < NS2SA( 8000, STEREO_DFT32MS_OVL_NS ); i++ ) + { + input_mem[i] = ( 1 - fac ) * res_buf[i + L_FRAME8k - NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) - ZP8k] + fac * input_mem[i]; + fac += step; + } + + /*in case of burst error*/ + hStereoDft->time_offs += L_FRAME8k; + } + + set_zero( DFT_PRED_RES, 2 * L_res ); + + if ( prev_bfi ) + { + stereo_dft_res_ecu_burst_att( hStereoDft, pDFT_RES, dmx_nrg, L_res, L_FRAME8k ); + } + + return; +} + + +/*--------------------------------------------------------------- + * stereo_dft_res_subst_spec() + * + * Generate error concealment frame in DFT domain + * ---------------------------------------------------------------*/ + +void stereo_dft_res_subst_spec( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ + float *pDFT_RES, /* i/o: residual signal */ + const float *const DFT_PRED_RES, /* i : residual prediction signal */ + const int16_t time_offs, /* i : Time offset for phase adjustment*/ + const int16_t L_res, /* i : bandwidth of residual signal */ + const int16_t L_ana, /* i : Length of FFT analysis */ + const int16_t k, /* i : Subframe index */ + int16_t *num_plocs, /* i/o: Number of peak locations */ + int16_t *plocs, /* i/o: Peak locations (bin) */ + float *plocsi, /* i/o: Peak locations (fractional) */ + const int16_t analysis_flag /* i : Flag for running peak analysis */ +) +{ + int16_t i, idx; + float fac; + float s1, s2, abs1, abs2, abs3, abs4; + float abs_res[( STEREO_DFT_RES_BW_MAX ) / 2]; + float Xmax, Xmin; + float sel; + float corr_phase; + float *p_mem; + float f_frac; + float peak_phase; + float phase_tmp; + float phase; + float conj_sign; + int16_t Np; + float cos_F, sin_F; + + /* initialization */ + mvr2r( DFT_PRED_RES, pDFT_RES, 2 * L_res ); + p_mem = hStereoDft->res_mem; + Np = 1; + + if ( analysis_flag ) + { + /* Perform spectral analysis on 2nd subframe of last good frame */ + abs_res[0] = 0.5f * ( p_mem[0] * p_mem[0] ); /* DC */ + for ( i = 1; i < L_res; i++ ) + { + abs_res[i] = ( p_mem[2 * i] * p_mem[2 * i] + p_mem[2 * i + 1] * p_mem[2 * i + 1] ); + } + + /* Find maxima */ + maximum( abs_res, L_res, &Xmax ); + minimum( abs_res, L_res, &Xmin ); + sel = ( Xmax - Xmin ) * ( 1.0f - 0.97f ); + + peakfinder( abs_res, L_res, plocs, num_plocs, sel, FALSE ); + /* Refine peaks */ + for ( i = 0; i < *num_plocs; i++ ) + { + if ( plocs[i] == 0 ) + { + plocsi[i] = plocs[i] + imax_pos( &abs_res[plocs[i]] ); + } + else if ( plocs[i] == L_res ) + { + plocsi[i] = plocs[i] - 2 + imax_pos( &abs_res[plocs[i] - 2] ); + } + else + { + plocsi[i] = plocs[i] - 1 + imax_pos( &abs_res[plocs[i] - 1] ); + } + } + } + + /* Apply phase of stereo filling on noise spectrum */ + for ( i = 1; i < L_res; i++ ) + { + s1 = sign( pDFT_RES[2 * i] ); + s2 = sign( pDFT_RES[2 * i + 1] ); + abs1 = fabsf( pDFT_RES[2 * i] ); + abs2 = fabsf( pDFT_RES[2 * i + 1] ); + abs3 = fabsf( p_mem[2 * i] ); + abs4 = fabsf( p_mem[2 * i + 1] ); + + fac = 1.0f; + + /* Low-complex phase matching that brings the angle within pi/4 of the target angle */ + if ( ( ( abs1 > abs2 ) && ( abs3 < abs4 ) ) || ( ( abs1 <= abs2 ) && ( abs3 >= abs4 ) ) ) + { + pDFT_RES[2 * i] = fac * s1 * abs4; + pDFT_RES[2 * i + 1] = fac * s2 * abs3; + } + else + { + pDFT_RES[2 * i] = fac * s1 * abs3; + pDFT_RES[2 * i + 1] = fac * s2 * abs4; + } + } + + /* Apply phase adjustment of identified peaks, including Np=1 peak neighbors on each side */ + for ( i = *num_plocs - 1; i >= 0; i-- ) + { + if ( k == 0 ) + { + /* For 1st subframe, apply reversed time ECU to get correct analysis window */ + f_frac = plocsi[i] - plocs[i]; + peak_phase = atan2f( p_mem[2 * plocs[i] + 1], p_mem[2 * plocs[i]] ); + phase_tmp = peak_phase - f_frac * STEREO_DFT_PLC_PH_C; + phase = phase_tmp - f_frac * EVS_PI; + corr_phase = -2 * phase - PI2 * ( STEREO_DFT_PLC_STEP21 + L_ana + time_offs ) * ( plocsi[i] / L_ana ); + conj_sign = -1.0f; + } + else + { + /* For 2nd subframe, do regular phase shift */ + corr_phase = PI2 * ( L_ana + time_offs ) * ( plocsi[i] / L_ana ); + conj_sign = 1.0f; + } + + cos_F = cosf( corr_phase ); + sin_F = sinf( corr_phase ); + + idx = max( 0, plocs[i] - Np ); /* Iterate over plocs[i]-1:plocs[i]+1, considering the edges of the spectrum */ + while ( ( idx < plocs[i] + Np + 1 ) && ( idx < L_res ) ) + { + pDFT_RES[2 * idx] = p_mem[2 * idx] * cos_F - p_mem[2 * idx + 1] * sin_F; + pDFT_RES[2 * idx + 1] = conj_sign * ( p_mem[2 * idx] * sin_F + p_mem[2 * idx + 1] * cos_F ); + idx++; + } + } + + return; +} + + +/*--------------------------------------------------------------- + * stereo_dft_res_ecu_burst_att() + * + * scaling residual PLC in burst error, considering DMX PLC attenuation + * ---------------------------------------------------------------*/ + +void stereo_dft_res_ecu_burst_att( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ + float *pDFT_RES, /* i/o: residual signal /att. residual */ + const float dmx_nrg, /* i : dmx energy of current frame */ + const int16_t L_res, /* i : Bandwidth of residual */ + const int16_t L_ana /* i : Length of FFT analysis */ +) +{ + float fac; + + /* attenuation of residual; follow attenuation of DMX */ + if ( hStereoDft->core_hist[0] == ACELP_CORE ) + { + fac = 0.1f * sqrtf( dmx_nrg / hStereoDft->past_dmx_nrg ); + } + else + { + fac = (int16_t) ( 1 - ( hStereoDft->time_offs - L_ana ) / ( hStereoDft->time_offs + L_ana ) ); + } + + v_multc( pDFT_RES, fac, pDFT_RES, 2 * L_res ); + + return; +} + + +/*--------------------------------------------------------------- + * stereo_dft_dmx_swb_nrg() + * + * Calculate DMX energy + * ---------------------------------------------------------------*/ + +/*! r: total energy of downmix with maximum swb bandwidth max */ +float stereo_dft_dmx_swb_nrg( + const float *dmx_k0, /* i : first subframe spectrum */ + const float *dmx_k1, /* i : second subframe spectrum */ + const int16_t frame_length /* i : frame lanegth */ +) +{ + int16_t i; + float dmx_nrg; + + dmx_nrg = EPSILON; + for ( i = 0; i < frame_length / 2; i++ ) + { + dmx_nrg += 0.5f * ( dmx_k0[2 * i] * dmx_k0[2 * i] + dmx_k0[2 * i + 1] * dmx_k0[2 * i + 1] + + dmx_k1[2 * i] * dmx_k1[2 * i] + dmx_k1[2 * i + 1] * dmx_k1[2 * i + 1] ); + } + + return dmx_nrg; +} + + +/*--------------------------------------------------------------- + * stereo_dft_sg_recovery() + * + * estimates panning measure + * updates recovery flag that might enbale recovery of side gain + * ---------------------------------------------------------------*/ + +int16_t stereo_dft_sg_recovery( + STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: Decoder DFT stereo handle */ +) +{ + int16_t b; + float *pSideGain; + float sg_m; + float beta; + + if ( !hStereoDft->sg_mem_corrupt ) + { + pSideGain = hStereoDft->side_gain + 2 * STEREO_DFT_BAND_MAX; + beta = 0.425f; + + sg_m = EPSILON; + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + sg_m += pSideGain[b]; + } + sg_m /= hStereoDft->nbands; + + if ( sg_m < 0.6f && sg_m > -0.6f ) + { + hStereoDft->sg_mean = 0.0f; + } + else + { + hStereoDft->sg_mean = beta * sg_m + ( 1 - beta ) * hStereoDft->sg_mean; /* LP filter delta_sg to obtain side gain stability measure */ + } + } + else if ( hStereoDft->sg_mean > 0.6f || hStereoDft->sg_mean < -0.6f ) + { + return 1; + } + + return 0; +} diff --git a/lib_dec/ivas_stereo_eclvq_dec.c b/lib_dec/ivas_stereo_eclvq_dec.c new file mode 100644 index 0000000000..41ed8924d1 --- /dev/null +++ b/lib_dec/ivas_stereo_eclvq_dec.c @@ -0,0 +1,225 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include +#include "prot.h" +#include "wmops.h" + + +/*--------------------------------------------------------------- + * arith_decode_elias_mod() + * + * + * ---------------------------------------------------------------*/ + +static int16_t arith_decode_elias_mod( + RangeUniDecState *rc_st_dec ) +{ + int16_t n, n_bits, bit; + + n_bits = 0; + + bit = rc_uni_dec_read_bit( rc_st_dec ); + + while ( bit == 0 ) + { + bit = rc_uni_dec_read_bit( rc_st_dec ); + ++n_bits; + if ( n_bits == 17 ) + { + /* bitstream error encountered */ + rc_st_dec->bit_error_detected = 1; + return 0; + } + } + + if ( n_bits == 0 ) + { + /* code for 0 is 10 and code for 1 is 11 */ + n = rc_uni_dec_read_bit( rc_st_dec ); + } + else + { + n = rc_uni_dec_read_bits( rc_st_dec, n_bits ) + ( 1 << n_bits ); + } + + return n; +} + + +/*--------------------------------------------------------------- + * arith_decode_prob_escape() + * + * + * ---------------------------------------------------------------*/ + +static int16_t arith_decode_prob_escape( + RangeUniDecState *rc_st_dec, + const uint16_t cum_freq_table[], /* i : Cumulative frequency up to symbol */ + const uint16_t sym_freq_table[], /* i : Symbol frequency */ + const int16_t table_size ) +{ + int16_t symbol; + + symbol = rc_uni_dec_read_symbol_fastS( rc_st_dec, cum_freq_table, sym_freq_table, table_size, ECSQ_PROB_BITS ); + + if ( symbol == table_size - 1 ) /* escape symbol */ + { + /* decode the additional value using a modified Elias integer code */ + symbol += arith_decode_elias_mod( rc_st_dec ); + } + + return symbol; +} + + +/*--------------------------------------------------------------- + * ECSQ_decode() + * + * decode into output a quantized integer-valued vector, which must be afterwards dequantized; + * if global_gain_index == ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO, the entire vector is zero and the method should not be called; + * the dequantized vector is obtained using the ECSQ_dequantize_vector method + * ---------------------------------------------------------------*/ + +void ECSQ_decode( + ECSQ_instance *ecsq_inst, + const int16_t N, + int16_t *output ) +{ + int16_t i, idx, segment, segment_count, seg_start, seg_stop; + const uint16_t *tab_vals_cum_freq; + const uint16_t *tab_vals_sym_freq; + const uint16_t *tab_abs_lsbs_cum_freq; + const uint16_t *tab_abs_lsbs_sym_freq; + RangeUniDecState *rc_st_dec; + int16_t param_zb; /* zero-based parameter index for coding */ + int16_t shift, lsbs, nonzero, left1, left0, sym, count0; + + rc_st_dec = (RangeUniDecState *) ecsq_inst->ac_handle; + +#ifdef DEBUGGING + assert( N > 0 ); +#endif + + segment_count = ( N + ECSQ_SEGMENT_SIZE - 1 ) / ECSQ_SEGMENT_SIZE; + + for ( segment = 0; segment < segment_count; ++segment ) + { + seg_start = segment * ECSQ_SEGMENT_SIZE; + seg_stop = min( seg_start + ECSQ_SEGMENT_SIZE, N ) - 1; + + param_zb = rc_uni_dec_read_symbol_fastS( rc_st_dec, cum_freq_ECSQ_tab_param[ecsq_inst->config_index], sym_freq_ECSQ_tab_param[ecsq_inst->config_index], ECSQ_PARAM_COUNT, ECSQ_PROB_BITS ); + shift = max( 0, param_zb - 3 ); /* first nonzero shift of 1 is used for param 3 */ + + if ( param_zb != 0 ) /* not the ECSQ_ALL_ZERO_PARAM param */ + { + tab_vals_cum_freq = cum_freq_ECSQ_tab_vals[param_zb - 1]; + tab_vals_sym_freq = sym_freq_ECSQ_tab_vals[param_zb - 1]; + idx = min( shift, 4 ); + tab_abs_lsbs_cum_freq = cum_freq_ECSQ_tab_abs_lsbs[idx]; + tab_abs_lsbs_sym_freq = sym_freq_ECSQ_tab_abs_lsbs[idx]; + + for ( i = seg_start; i <= seg_stop; ++i ) + { + sym = arith_decode_prob_escape( rc_st_dec, tab_vals_cum_freq, tab_vals_sym_freq, ECSQ_TAB_VALS_SIZE ); + + if ( shift != 0 ) + { + if ( ( sym > 0 ) || ( shift > 4 ) ) + { + lsbs = rc_uni_dec_read_bits( rc_st_dec, shift ); + } + else /* (sym == 0) && (shift <= 4) */ + { + lsbs = rc_uni_dec_read_symbol_fastS( rc_st_dec, tab_abs_lsbs_cum_freq, tab_abs_lsbs_sym_freq, 1 << shift, ECSQ_PROB_BITS ); + } + sym = ( sym << shift ) | lsbs; + } + + if ( sym != 0 ) + { + sym *= 1 - 2 * rc_uni_dec_read_bit( rc_st_dec ); /* map the sign bit to +1 or -1 and then multiply */ + } + + output[i] = sym; + } + } + else + { +#ifdef DEBUGGING + assert( ECSQ_NONZERO_MAX == 3 ); +#endif + + nonzero = rc_uni_dec_read_bits( rc_st_dec, 2 ); + + left1 = nonzero; + left0 = ( seg_stop - seg_start + 1 ) - nonzero; + + for ( i = seg_start; i <= seg_stop; ++i ) + { + if ( left1 == 0 ) + { + sym = 0; + } + else if ( left0 == 0 ) + { + sym = 1; + } + else + { + count0 = left0 * ECSQ_tab_inverse[left0 + left1]; /* left0 * round(ECSQ_PROB_TOTAL / (left0 + left1)) */ + sym = rc_uni_dec_read_bit_prob_fast( rc_st_dec, count0, ECSQ_PROB_BITS ); + } + + if ( sym != 0 ) + { + sym *= 1 - 2 * rc_uni_dec_read_bit( rc_st_dec ); /* map the sign bit to +1 or -1 and then multiply */ + --left1; + } + else + { + --left0; + } + + output[i] = sym; + } + } + } + + return; +} diff --git a/lib_dec/ivas_stereo_esf_dec.c b/lib_dec/ivas_stereo_esf_dec.c new file mode 100644 index 0000000000..0ab8bcdb49 --- /dev/null +++ b/lib_dec/ivas_stereo_esf_dec.c @@ -0,0 +1,128 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------* + * init_basic_allpass() + * + * + *-------------------------------------------------------------------*/ + +void init_basic_allpass( + basic_allpass_t *ap, + const float *gains, + const int16_t *delays ) +{ + int16_t i, j; + + for ( i = 0; i < 3; i++ ) + { + ap->gains[i] = gains[i]; + ap->delays[i] = delays[i]; + + for ( j = 0; j < STEREO_DFT_ALLPASS_BUFFERLEN; j++ ) + { + ap->buffer[i][j] = 0.f; + } + } + + ap->pos = 0; + + return; +} + + +/*-------------------------------------------------------------------* + * filter_with_allpass() + * + * + *-------------------------------------------------------------------*/ + +void filter_with_allpass( + const float *sig, + float *out, + const int16_t len, + basic_allpass_t *ap ) +{ + int16_t k; + int16_t pos, mask; + int16_t d1, d2, d3; + float P1, P2, P3, P4, P5; + float g1, g2, g3, *D1, *D2, *D3; + + P1 = P2 = P3 = P4 = P5 = 0; + mask = STEREO_DFT_ALLPASS_BUFFERLEN - 1; + + pos = ap->pos; + + g1 = ap->gains[0]; + g2 = ap->gains[1]; + g3 = ap->gains[2]; + + d1 = ap->delays[0]; + d2 = ap->delays[1]; + d3 = ap->delays[2]; + + D1 = ap->buffer[0]; + D2 = ap->buffer[1]; + D3 = ap->buffer[2]; + + for ( k = 0; k < len; k++ ) + { + P1 = sig[k] - g3 * D3[pos]; + P2 = P1 - g1 * D1[pos]; + P3 = D1[pos] + g1 * P2 - g2 * D2[pos]; + P4 = D2[pos] + g2 * P3; + P5 = D3[pos] + g3 * P1; + + out[k] = P5; /* could overwrite sig */ + + D1[( pos + d1 ) & mask] = P2; + D2[( pos + d2 ) & mask] = P3; + D3[( pos + d3 ) & mask] = P4; + + pos = ( pos + 1 ) & mask; + } + + ap->pos = pos; + + return; +} diff --git a/lib_dec/ivas_stereo_ica_dec.c b/lib_dec/ivas_stereo_ica_dec.c new file mode 100644 index 0000000000..38f160ce36 --- /dev/null +++ b/lib_dec/ivas_stereo_ica_dec.c @@ -0,0 +1,378 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "rom_com.h" +#include "ivas_rom_com.h" + + +/*--------------------------------------------------------------- + * stereo_tca_dec() + * + * Stereo temporal channel adjustment/allocation processing module; + * upnmix, convert L/R to M/S. + * ---------------------------------------------------------------*/ + +void stereo_tca_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float synth[CPE_CHANNELS][L_FRAME48k], /* i/o: output synth */ + const int16_t output_frame /* i : length of a frame per channel */ +) +{ + /* Buffers, input Left and right channels @ input_Fs*/ + float bufChanL[L_DEC_MEM_LEN_ICA + L_FRAME48k]; + float bufChanR[L_DEC_MEM_LEN_ICA + L_FRAME48k]; + float *ptrChanL, *ptrChanR; + float *target; + int16_t target_idx, prevNCShift, currentNCShift, l_shift_adapt; + int16_t dsFactor, tempMax; + float *ref; + int16_t bothChannelShift; + int32_t output_Fs; + STEREO_TCA_DEC_HANDLE hStereoTCA; + + hStereoTCA = hCPE->hStereoTCA; + + output_Fs = hCPE->hCoreCoder[0]->output_Fs; + + if ( hCPE->nchan_out == 1 ) + { + if ( hCPE->hStereoDftDmx ) + { + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + hCPE->hStereoDftDmx->targetGain = 1.0f; + } + + /* save the target gain for next frame */ + hCPE->hStereoDftDmx->prevTargetGain = hCPE->hStereoDftDmx->targetGain; + } + + return; + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT && !hCPE->hStereoMdct->use_itd ) + { + return; + } + + /* populate L/R memories into current buffers */ + mvr2r( hStereoTCA->memChanL, bufChanL, L_DEC_MEM_LEN_ICA ); + mvr2r( hStereoTCA->memChanR, bufChanR, L_DEC_MEM_LEN_ICA ); + + /* pointers to the current frame */ + ptrChanL = bufChanL + L_DEC_MEM_LEN_ICA; + ptrChanR = bufChanR + L_DEC_MEM_LEN_ICA; + + /* copy interleaved stereo data to two channels, e.g., L, R */ + mvr2r( synth[0], ptrChanL, output_frame ); + mvr2r( synth[1], ptrChanR, output_frame ); + + /* back up the L/R target synth for next frame */ + mvr2r( bufChanL + output_frame, hStereoTCA->memChanL, L_DEC_MEM_LEN_ICA ); + mvr2r( bufChanR + output_frame, hStereoTCA->memChanR, L_DEC_MEM_LEN_ICA ); + + /* TCA parameter de-quantize */ + dsFactor = (int16_t) ( output_Fs / 8000 ); + tempMax = NS2SA( output_Fs, L_NCSHIFT_NS ); + hStereoTCA->corrLagStats = min( hStereoTCA->indx_ica_NCShift * dsFactor, tempMax ); + + bothChannelShift = 0; + if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_MDCT ) + { + hStereoTCA->corrLagStats = 0; + hStereoTCA->refChanIndx = L_CH_INDX; + hStereoTCA->targetGain = 1.0f; + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + hStereoTCA->corrLagStats = (int16_t) fabsf( hCPE->hStereoDft->itd[1] ); +#ifdef QC_DBG_DFT_NO_SHIFT_DEC + hStereoTCA->corrLagStats = 0; +#endif + hStereoTCA->refChanIndx = ( hCPE->hStereoDft->itd[1] >= 0 ) ? ( L_CH_INDX ) : ( R_CH_INDX ); + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + float itd; + + itd = hCPE->hStereoMdct->itd; + hStereoTCA->corrLagStats = (int16_t) fabsf( itd ); + hStereoTCA->refChanIndx = ( itd >= 0 ) ? ( L_CH_INDX ) : ( R_CH_INDX ); + } + + if ( hStereoTCA->refChanIndx != hStereoTCA->prevRefChanIndx && hStereoTCA->corrLagStats != 0 ) + { + bothChannelShift = 1; + } + } + + prevNCShift = (int16_t) abs( hStereoTCA->prevCorrLagStats ); + currentNCShift = (int16_t) abs( hStereoTCA->corrLagStats ); + /* IVAS_fmToDo: QCTodo: Need to address [16, 32] kHz @ Encoder --> 48 kHz Decoder. 48kHz-->48kHz is ok */ + /*target_idx = (hStereoTCA->refChanIndx == L_CH_INDX) ? R_CH_INDX : L_CH_INDX;*/ + +#ifdef DEC_ICA_DELAY_INTERP + if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_TD ) + { + if ( hStereoTCA->corrLagStats == hStereoTCA->prevCorrLagStats && hStereoTCA->interp_dec_switch_to_zero_diff == 0 ) + { + hStereoTCA->interp_dec_switch_to_zero_diff = 1; + } + else + { + hStereoTCA->interp_dec_switch_to_zero_diff = 0; + } + + if ( currentNCShift != 0 ) + { + currentNCShift = TRUNC( 0.6 * prevNCShift + 0.4 * currentNCShift ); + } + + prevNCShift = hStereoTCA->interp_dec_prevNCShift; + hStereoTCA->interp_dec_prevNCShift = currentNCShift; + } + else + { + hStereoTCA->interp_dec_prevNCShift = currentNCShift; + hStereoTCA->interp_dec_switch_to_zero_diff = 0; + } +#endif + + ref = ptrChanL; + target = ptrChanR; + target_idx = R_CH_INDX; + /* identify target signal to adjust for shift variations */ + if ( ( prevNCShift == 0 && hStereoTCA->refChanIndx == R_CH_INDX ) || ( hStereoTCA->prevRefChanIndx == R_CH_INDX ) ) + { + ref = ptrChanR; + target = ptrChanL; + target_idx = L_CH_INDX; + } + + if ( bothChannelShift == 1 ) + { + ref = ptrChanL; + target = ptrChanR; + target_idx = R_CH_INDX; + if ( hStereoTCA->refChanIndx == R_CH_INDX ) + { + ref = ptrChanR; + target = ptrChanL; + target_idx = L_CH_INDX; + } + } + + /* target signal adjustment for temporal shift variations */ +#ifdef DEC_ICA_DELAY_INTERP + if ( hStereoTCA->prevCorrLagStats != hStereoTCA->corrLagStats || bothChannelShift || ( hStereoTCA->interp_dec_switch_to_zero_diff == 1 && hCPE->element_mode == IVAS_CPE_TD ) ) +#else + if ( ( hStereoTCA->prevCorrLagStats != hStereoTCA->corrLagStats ) || bothChannelShift ) +#endif + { + l_shift_adapt = L_SHIFT_ADAPT_16k; + if ( output_Fs > 16000 ) + { + l_shift_adapt = L_SHIFT_ADAPT_MAX; + } + + if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_DFT ) + { + l_shift_adapt = l_shift_adapt >> 1; + } + +#ifdef DEBUGGING + /* Max sample looked in INTERP1 should lie within the bounds of output_frame and memory populated */ + assert( ( ( min( N_MAX_SHIFT_CHANGE, N_MAX_SHIFT_CHANGE * output_Fs / 32000.0f ) + 1 ) + SINC_ORDER1 / INTERP_FACTOR1 ) + l_shift_adapt - currentNCShift < output_frame ); + assert( ( ( min( N_MAX_SHIFT_CHANGE, N_MAX_SHIFT_CHANGE * output_Fs / 32000.0f ) + 1 ) + SINC_ORDER1 / INTERP_FACTOR1 + currentNCShift ) <= L_DEC_MEM_LEN_ICA ); +#endif + if ( abs( currentNCShift - prevNCShift ) <= N_MAX_SHIFT_CHANGE && bothChannelShift == 0 ) + { + adjustTargetSignal( target - currentNCShift, currentNCShift, prevNCShift, l_shift_adapt, 0 ); + } + else + { + if ( bothChannelShift == 1 ) + { + adjustTargetSignal( ref, 0, prevNCShift, l_shift_adapt, 1 ); + adjustTargetSignal( target - currentNCShift, currentNCShift, 0, l_shift_adapt, 1 ); + } + else + { + adjustTargetSignal( target - currentNCShift, currentNCShift, prevNCShift, l_shift_adapt, 1 ); + } + } + } + + /* temporal channel adjustment */ + mvr2r( target - currentNCShift, synth[target_idx], output_frame ); + + mvr2r( ref, synth[!target_idx], output_frame ); + + /* Scale the Right channel with the gain */ + stereo_tca_scale_R_channel( hCPE, synth[1], output_frame ); + + /*-----------------------------------------------------------------* + * updates and memory backups + *-----------------------------------------------------------------*/ + + /* save the reference channel index for next frame */ + hStereoTCA->prevRefChanIndx = hStereoTCA->refChanIndx; + + /* save the corr lag stats for next frame */ + hStereoTCA->prevCorrLagStats = hStereoTCA->corrLagStats; + + /* save the target gain for next frame */ + hStereoTCA->prevTargetGain = hStereoTCA->targetGain; + + return; +} + +/*-------------------------------------------------------------------* + * stereo_tca_scale_R_channel() + * + * Scale the Right channel with the gain + *-------------------------------------------------------------------*/ + +void stereo_tca_scale_R_channel( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[L_FRAME48k], /* i/o: output synthesis, R channel */ + const int16_t output_frame /* i : frame length */ +) +{ + STEREO_TCA_DEC_HANDLE hStereoTCA; + int16_t i, j, l_ica_ovl, flat_old; + float tempF, tempF1, winSlope; + int32_t output_Fs; + + hStereoTCA = hCPE->hStereoTCA; + output_Fs = hCPE->hCoreCoder[0]->output_Fs; + + if ( hCPE->hCoreCoder[0]->core_brate <= SID_2k40 && hCPE->nchan_out == 2 ) + { + return; + } + /* Scale the Right channel with the gain */ + l_ica_ovl = NS2SA( output_Fs, STEREO_L_TCA_OVLP_NS ); + + if ( hCPE->nchan_out == 1 ) + { + /* in mono DMX, the scaling is done before synchro_synthesis() */ + flat_old = NS2SA( output_Fs, ACELP_LOOK_NS + IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); + + if ( hCPE->last_element_mode == IVAS_CPE_TD && hCPE->element_mode == IVAS_CPE_DFT ) + { + hCPE->hStereoDftDmx->prevTargetGain *= 2.0f; + hCPE->hStereoDftDmx->prevTargetGain = min( hCPE->hStereoDftDmx->prevTargetGain, powf( 10, ( ( 1 << STEREO_BITS_TCA_GD ) - 1 ) * STEREO_TCA_GDSTEP + STEREO_TCA_GDMIN ) ); + hCPE->hStereoDftDmx->targetGain = 1.0f; + + flat_old = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); + } + } + else if ( hCPE->last_element_mode == IVAS_CPE_TD && hCPE->element_mode == IVAS_CPE_DFT ) + { + flat_old = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); + } + else + { + flat_old = NS2SA( output_Fs, ACELP_LOOK_NS + IVAS_DEC_DELAY_NS ); + } + + if ( hCPE->nchan_out == 1 ) + { + tempF1 = 1.0f / hCPE->hStereoDftDmx->targetGain; + tempF = 1.0f / hCPE->hStereoDftDmx->prevTargetGain; + } + else + { + tempF1 = 1.0f / hStereoTCA->targetGain; + tempF = 1.0f / hStereoTCA->prevTargetGain; + } + winSlope = 1.0f / (float) l_ica_ovl; + + for ( i = 0; i < flat_old; i++ ) + { + output[i] *= tempF; + } + for ( j = 0; i < flat_old + l_ica_ovl; i++, j++ ) + { + output[i] = ( 1.0f - j * winSlope ) * tempF * output[i] + ( j * winSlope ) * tempF1 * output[i]; + } + for ( ; i < output_frame; i++ ) + { + output[i] *= tempF1; + } + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_tca_init_dec() + * + * Stereo temporal channel adjustment (TCA) decoder initialization + *-------------------------------------------------------------------*/ + +void stereo_tca_init_dec( + STEREO_TCA_DEC_HANDLE hStereoTCA /* i/o: Stereo TCA handle */ +) +{ + hStereoTCA->refChanIndx = L_CH_INDX; + hStereoTCA->prevRefChanIndx = L_CH_INDX; + hStereoTCA->indx_ica_NCShift = 0; + hStereoTCA->indx_ica_gD = 0; + hStereoTCA->targetGain = 1.0f; + hStereoTCA->prevTargetGain = 1.0f; + + hStereoTCA->corrLagStats = 0; + hStereoTCA->prevCorrLagStats = 0; + +#ifdef DEC_ICA_DELAY_INTERP + hStereoTCA->interp_dec_prevNCShift = 0; + hStereoTCA->interp_dec_switch_to_zero_diff = 0; +#endif + + set_f( hStereoTCA->memChanL, 0.0f, L_DEC_MEM_LEN_ICA ); + set_f( hStereoTCA->memChanR, 0.0f, L_DEC_MEM_LEN_ICA ); + + return; +} diff --git a/lib_dec/ivas_stereo_icbwe_dec.c b/lib_dec/ivas_stereo_icbwe_dec.c new file mode 100644 index 0000000000..6c3fef9eae --- /dev/null +++ b/lib_dec/ivas_stereo_icbwe_dec.c @@ -0,0 +1,843 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" +#include "rom_com.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +/*-------------------------------------------------------------------* + * ic_bwe_dec_reset() + * + * core switching reset of IC BWE memory + *-------------------------------------------------------------------*/ + +static void ic_bwe_dec_reset( + STEREO_ICBWE_DEC_HANDLE hStereoICBWE /* i/o: Stereo ICBWE handle */ +) +{ + /* unscaled & scaled SHB synthesis memory */ + set_f( hStereoICBWE->mem_syn_shb_nonref, 0, L_SHB_LAHEAD ); /* use samples from !acelp) */ + set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, LPC_SHB_ORDER ); + set_f( hStereoICBWE->mem_syn_shb_ola_nonref, 0, L_SHB_LAHEAD ); /* use samples from !acelp) */ + + /* inter-channel BWE SP and GSP mem reset */ + hStereoICBWE->memShbSpecMapping = 0; + + set_f( hStereoICBWE->memShbHilbert_nonref, 0, HILBERT_MEM_SIZE ); + set_f( hStereoICBWE->memShbInterp_nonref, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hStereoICBWE->memShb_fsout_nonref, 0, INTERP_3_2_MEM_LEN ); + hStereoICBWE->syn_dm_phase_nonref = 0; + + + return; +} + +/*-------------------------------------------------------------------* + * stereo_icBWE_dec() + * + * Spatial mapping of reference to the non-reference channels in SHB + *-------------------------------------------------------------------*/ + +void stereo_icBWE_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float *synthRef, /* i/o: Reference channel HB synthesis at output Fs */ + float *synth, /* o : Non reference channel HB synthesis at output Fs */ + const float *fb_synth_ref, /* i : ref. high-band synthesis 16-20 kHz */ + const float *voice_factors, /* i : voicing factors */ + const int16_t output_frame /* i : frame length */ +) +{ + int16_t i, j, k, nbSubFr; + Decoder_State *st; /* i/o: decoder state structure, primary channel */ + int16_t spIndx, gsIndx; + float excSHB_nonref[L_FRAME16k]; + float shb_synth_nonref[L_FRAME16k + L_SHB_LAHEAD]; + float error[L_FRAME32k]; + float nlMixFac[NB_SUBFR16k]; + float gsMapping, specMapping; + float fb_synth_nonref[L_FRAME48k]; + float scale, prev_pow, curr_pow, temp; + float alpha, winSlope, winLen, prevgsMapping; + float temp1, temp2; + float icbweM2Ref, ratio_L; + + STEREO_DFT_DEC_DATA_HANDLE hStereoDft = hCPE->hStereoDft; + STEREO_ICBWE_DEC_HANDLE hStereoICBWE = hCPE->hStereoICBWE; + st = hCPE->hCoreCoder[0]; + + /*--------------------------------------------------------------------* + * skip IC-BWE in case of mono DMX output * + * -------------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode > STEREO_DFT_RES_COD_OFF ) + { + hCPE->hStereoDft->core_hist[0] = st->core; + + return; + } + else if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 ) + { + + return; + } + + /*--------------------------------------------------------------------* + * skip IC-BWE in case of SID or NO_DATA frame + * -------------------------------------------------------------------*/ + + if ( st->core_brate <= SID_2k40 ) + { + return; + } + + /*--------------------------------------------------------------------* + * TD high band stereo filling * + * -------------------------------------------------------------------*/ + + /* update buffers for TD stereo filling */ + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + float hb_nrg = EPSILON; + float hb_nrg2 = EPSILON; + + if ( st->core == ACELP_CORE || st->last_core == ACELP_CORE ) + { + for ( i = 0; i < output_frame / 2; i++ ) + { + hb_nrg2 += synthRef[i] * synthRef[i]; + } + + hCPE->hStereoDft->hb_nrg_subr[0] = hb_nrg2; + hb_nrg += hb_nrg2; + hb_nrg2 = EPSILON; + + for ( ; i < output_frame; i++ ) + { + hb_nrg2 += synthRef[i] * synthRef[i]; + } + + hCPE->hStereoDft->hb_nrg_subr[1] = hb_nrg2; + hb_nrg += hb_nrg2; + + mvr2r( synthRef, hCPE->hStereoDft->hb_stefi_sig + hCPE->hStereoDft->hb_stefi_delay, output_frame ); + } + else + { + set_zero( hCPE->hStereoDft->hb_stefi_sig + hCPE->hStereoDft->hb_stefi_delay, output_frame ); + } + hCPE->hStereoDft->hb_nrg_subr[0] *= hCPE->hStereoDft->NFFT / 2; + hCPE->hStereoDft->hb_nrg_subr[1] *= hCPE->hStereoDft->NFFT / 2; + hCPE->hStereoDft->hb_nrg[0] = hb_nrg; + hCPE->hStereoDft->td_gain[0] = 0; + hCPE->hStereoDft->core_hist[0] = st->core; +#ifdef DEBUG_MODE_DFT + { + int16_t tmp[L_FRAME48k]; + for ( i = 0; i < output_frame; i++ ) + { + tmp[i] = (int16_t) synthRef[i]; + } + dbgwrite( tmp, sizeof( int16_t ), output_frame, 1, "res/hb_synth.pcm" ); + for ( i = 0; i < output_frame; i++ ) + { + tmp[i] = (int16_t) hCPE->hStereoDft->hb_stefi_sig[i + output_frame / 2]; + } + dbgwrite( tmp, sizeof( int16_t ), output_frame, 1, "res/hb_stefi_sig.pcm" ); + } +#endif /* DEBUG_MODE_DFT */ + } + + /*--------------------------------------------------------------------* + * IC-BWE * + * -------------------------------------------------------------------*/ + + if ( st->core != ACELP_CORE || st->extl == -1 || ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag ) ) + { + return; + } + else if ( hCPE->element_mode == IVAS_CPE_DFT && st->core_brate <= SID_2k40 ) + { + mvr2r( synthRef, synth, output_frame ); + return; + } + + + set_f( fb_synth_nonref, 0, L_FRAME48k ); + + /* core switching reset */ + if ( st->last_core != ACELP_CORE || st->bwidth == WB ) + { + ic_bwe_dec_reset( hStereoICBWE ); + + if ( st->last_core != ACELP_CORE ) + { + hStereoICBWE->prevSpecMapping = 0.0f; + hStereoICBWE->prevgsMapping = 1.0f; + hStereoICBWE->icbweM2Ref_prev = 1.0f; + } + + if ( st->bwidth == WB ) + { + /* copy to outputHB and reset hb_synth values */ + mvr2r( synthRef, synth, output_frame ); + + if ( st->element_mode == IVAS_CPE_TD ) + { + hStereoICBWE->prevSpecMapping = 0.0f; + hStereoICBWE->prevgsMapping = 1.0f; + hStereoICBWE->icbweM2Ref_prev = 1.0f; + } + else if ( st->element_mode == IVAS_CPE_DFT ) + { + hStereoICBWE->refChanIndx_bwe = L_CH_INDX; + hStereoICBWE->prevSpecMapping = 0.0f; + + prevgsMapping = hStereoICBWE->prevgsMapping; + temp1 = hStereoDft->side_gain[2 * STEREO_DFT_BAND_MAX + hStereoDft->nbands - 1]; + icbweM2Ref = 1.f + temp1; + gsMapping = 1.f - temp1; + + winLen = (int16_t) ( ( SHB_OVERLAP_LEN * st->output_Fs ) / 16000 ); + winSlope = 1.0f / winLen; + alpha = winSlope; + for ( i = 0; i < winLen; i++ ) + { + synthRef[i] *= ( alpha * ( icbweM2Ref ) + ( 1.0f - alpha ) * ( hStereoICBWE->icbweM2Ref_prev ) ); + synth[i] *= ( alpha * ( gsMapping ) + ( 1.0f - alpha ) * ( prevgsMapping ) ); + alpha += winSlope; + } + for ( ; i < NS2SA( st->output_Fs, FRAME_SIZE_NS ); i++ ) + { + synthRef[i] *= ( icbweM2Ref ); + synth[i] *= ( gsMapping ); + } + hStereoICBWE->icbweM2Ref_prev = icbweM2Ref; + hStereoICBWE->prevgsMapping = gsMapping; + } + + return; + } + } + + if ( !st->bfi ) + { + hStereoICBWE->refChanIndx_bwe = get_next_indice( st, STEREO_ICBWE_REFBITS ); + if ( st->flag_ACELP16k == 1 ) + { + spIndx = get_next_indice( st, STEREO_ICBWE_SPBITS ); + } + else + { + spIndx = 3; + } + if ( st->element_mode == IVAS_CPE_TD ) + { + gsIndx = get_next_indice( st, STEREO_ICBWE_GSBITS ); + } + else + { + gsIndx = get_next_indice( st, STEREO_ICBWE_GSBITS_DFT ); + } + + /* Store indices in case of frame loss */ + hStereoICBWE->prev_spIndx = spIndx; + hStereoICBWE->prev_gsIndx = gsIndx; + } + else /*bfi*/ + { + /* Retrieve last decoded indices */ + spIndx = hStereoICBWE->prev_spIndx; + gsIndx = hStereoICBWE->prev_gsIndx; + hStereoICBWE->refChanIndx_bwe = hStereoICBWE->prev_refChanIndx_bwe; + } + + /* IC-BWE parameter de-quant */ + /* sp Mapping */ + hStereoICBWE->prevSpecMapping = usdequant( spIndx, -0.6f, 0.2f ); + + /* gs Mapping */ + prevgsMapping = hStereoICBWE->prevgsMapping; + + if ( st->element_mode == IVAS_CPE_TD ) + { + hStereoICBWE->prevgsMapping = icbwe_gsMapping_tbl[gsIndx]; + } + else + { + hStereoICBWE->prevgsMapping = icbwe_gsMappingDFT_tbl[gsIndx]; + } + + hStereoICBWE->prevgsMapping = powf( 10, hStereoICBWE->prevgsMapping ); + + specMapping = hStereoICBWE->prevSpecMapping; + gsMapping = hStereoICBWE->prevgsMapping; + +#ifdef QC_DBG_ICBWE + dbgwrite( &hStereoICBWE->refChanIndx_bwe, 2, 1, 1, "refChanIndx_bwe_dec.pcm" ); + dbgwrite( &specMapping, 4, 1, 1, "spMapping_dec.pcm" ); + dbgwrite( &gsMapping, 4, 1, 1, "gsMapping_dec.pcm" ); +#endif + + if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) + { + mvr2r( voice_factors, nlMixFac, NB_SUBFR16k ); + if ( hCPE->hStereoDftDmx != NULL ) + { + if ( hCPE->hStereoDftDmx->targetGain < 0.5f || hCPE->hStereoDftDmx->targetGain > 2.0f ) + { + v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); + } + } + else + { + if ( hCPE->hStereoTCA->targetGain < 0.5f || hCPE->hStereoTCA->targetGain > 2.0f ) + { + v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); + } + } + + nbSubFr = ( st->flag_ACELP16k == 0 ) ? NB_SUBFR : NB_SUBFR16k; + for ( i = 0, k = 0; i < nbSubFr; i++ ) + { + if ( hCPE->hCoreCoder[0]->coder_type == UNVOICED || hStereoICBWE->MSFlag == 1 ) + { + temp1 = 0; + temp2 = 1.0f; + } + else + { + temp1 = sqrtf( nlMixFac[i] ); + temp2 = sqrtf( 1.0f - nlMixFac[i] ); + } + + for ( j = 0; j < L_FRAME16k / nbSubFr; j++, k++ ) + { + excSHB_nonref[k] = temp1 * hStereoICBWE->nlExc16k[k] + temp2 * hStereoICBWE->mixExc16k[k]; + } + } + + /* LP synthesis */ + mvr2r( hStereoICBWE->mem_syn_shb_nonref, shb_synth_nonref, L_SHB_LAHEAD ); + syn_filt( hStereoICBWE->lpSHBRef, LPC_SHB_ORDER, excSHB_nonref, shb_synth_nonref + L_SHB_LAHEAD, L_FRAME16k, hStereoICBWE->mem_lpc_shbsynth_nonref, 1 ); +#ifdef DBG_STEREO_ICBWE2_TBE2K8 + /* Normalize the non-ref signal to the reference channel energy to compensate for the scaling shb_ener_sf */ + if ( st->extl_brate == SWB_TBE_2k8 || st->extl_brate == FB_TBE_3k0 ) + { + temp1 = sumAbs( hStereoICBWE->shbSynthRef, L_FRAME16k ); + temp2 = sumAbs( shb_synth_nonref + L_SHB_LAHEAD, L_FRAME16k ); + temp1 = ( temp2 > 0 ) ? ( temp1 / temp2 ) : ( 1.0f ); + v_multc( shb_synth_nonref + L_SHB_LAHEAD, temp1, shb_synth_nonref + L_SHB_LAHEAD, L_FRAME16k ); + } +#endif + + prev_pow = sum2_f( shb_synth_nonref, L_SHB_LAHEAD + 10 ); + curr_pow = sum2_f( shb_synth_nonref + L_SHB_LAHEAD + 10, L_SHB_LAHEAD + 10 ); + + if ( prev_pow == 0 ) + { + scale = 0; + } + else + { + scale = sqrtf( curr_pow / prev_pow ); + } + + for ( i = 0; i < L_SHB_LAHEAD; i++ ) + { + shb_synth_nonref[i] *= scale; + } + + for ( ; i < L_SHB_LAHEAD + 10; i++ ) + { + temp = ( i - 19 ) / 10.0f; + shb_synth_nonref[i] *= ( temp * 1.0f + ( 1.0f - temp ) * scale ); + } + + /* spec and gs adjustment */ + deemph( shb_synth_nonref + L_SHB_LAHEAD, specMapping, L_FRAME16k, &( hStereoICBWE->memShbSpecMapping ) ); + mvr2r( shb_synth_nonref + L_FRAME16k, hStereoICBWE->mem_syn_shb_nonref, L_SHB_LAHEAD ); + + ScaleShapedSHB( SHB_OVERLAP_LEN, shb_synth_nonref, hStereoICBWE->mem_syn_shb_ola_nonref, hStereoICBWE->gshapeRef, ( hStereoICBWE->gFrameRef * gsMapping * 0.9f ), window_shb, subwin_shb ); + + if ( st->extl == FB_TBE ) + { + v_multc( fb_synth_ref, gsMapping, fb_synth_nonref, L_FRAME48k ); + } + + /* generate 32kHz SHB synthesis from 12.8(16)kHz signal */ + GenSHBSynth( shb_synth_nonref, error, hStereoICBWE->memShbHilbert_nonref, hStereoICBWE->memShbInterp_nonref, st->L_frame, &( hStereoICBWE->syn_dm_phase_nonref ) ); + } + else + { + mvr2r( synthRef, synth, output_frame ); + + winLen = (int16_t) ( ( SHB_OVERLAP_LEN * st->output_Fs ) / 16000 ); + winSlope = 1.0f / winLen; + alpha = winSlope; + + ratio_L = ( hCPE->element_mode == IVAS_CPE_DFT ) ? ( 0.5f ) : ( tdm_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx] ); + + icbweM2Ref = gsMapping; + if ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) + { + if ( ratio_L >= 0.1f ) + { + icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ( 1 - ratio_L ) * ( 1 - ratio_L ) * gsMapping * gsMapping ) ) / ratio_L; + } + } + else + { + if ( ratio_L <= 0.9f ) + { + icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ratio_L * ratio_L * gsMapping * gsMapping ) ) / ( 1 - ratio_L ); + } + } + + icbweM2Ref = max( gsMapping, icbweM2Ref ); + + for ( i = 0; i < winLen; i++ ) + { + synthRef[i] *= ( alpha * ( icbweM2Ref ) + ( 1.0f - alpha ) * ( hStereoICBWE->icbweM2Ref_prev ) ); + synth[i] *= ( alpha * ( gsMapping ) + ( 1.0f - alpha ) * ( prevgsMapping ) ); + alpha += winSlope; + } + for ( ; i < NS2SA( st->output_Fs, FRAME_SIZE_NS ); i++ ) + { + synthRef[i] *= ( icbweM2Ref ); + synth[i] *= ( gsMapping ); + } + hStereoICBWE->icbweM2Ref_prev = icbweM2Ref; + + ic_bwe_dec_reset( hStereoICBWE ); + hStereoICBWE->prevSpecMapping = 0.0f; + + return; + } + + /* resample to output FS */ + if ( st->output_Fs == 48000 ) + { + interpolate_3_over_2_allpass( error, L_FRAME32k, synth, hStereoICBWE->memShb_fsout_nonref ); + } + else if ( st->output_Fs == 32000 ) + { + mvr2r( error, synth, L_FRAME32k ); + } + else if ( st->output_Fs == 16000 ) + { + Decimate_allpass_steep( error, hStereoICBWE->memShb_fsout_nonref, L_FRAME32k, synth ); + } + + + if ( st->extl == FB_TBE && st->output_Fs == 48000 ) + { + v_add( fb_synth_nonref, synth, synth, L_FRAME48k ); + } + + /* copy to outputHB and reset hb_synth values */ + ratio_L = ( hCPE->element_mode == IVAS_CPE_DFT ) ? ( 0.5f ) : ( tdm_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx] ); + + icbweM2Ref = gsMapping; + if ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) + { + if ( ratio_L >= 0.1f ) + { + icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ( 1 - ratio_L ) * ( 1 - ratio_L ) * gsMapping * gsMapping ) ) / ratio_L; + } + } + else + { + if ( ratio_L <= 0.9f ) + { + icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ratio_L * ratio_L * gsMapping * gsMapping ) ) / ( 1 - ratio_L ); + } + } + + icbweM2Ref = max( gsMapping, icbweM2Ref ); + + winLen = (int16_t) ( ( SHB_OVERLAP_LEN * st->output_Fs ) / 16000 ); + winSlope = 1.0f / winLen; + alpha = winSlope; + for ( i = 0; i < winLen; i++ ) + { + synthRef[i] *= ( alpha * ( icbweM2Ref ) + ( 1.0f - alpha ) * ( hStereoICBWE->icbweM2Ref_prev ) ); + alpha += winSlope; + } + + for ( ; i < NS2SA( st->output_Fs, FRAME_SIZE_NS ); i++ ) + { + synthRef[i] *= ( icbweM2Ref ); + } + + hStereoICBWE->icbweM2Ref_prev = icbweM2Ref; + + return; +} + +/*-------------------------------------------------------------------* + * stereo_icBWE_decproc() + * + * Stereo (inter-channel) BWE mapping - decoder initialization + *-------------------------------------------------------------------*/ + +void stereo_icBWE_decproc( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output synthesis */ + float outputHB[CPE_CHANNELS][L_FRAME48k], /* i : HB synthesis */ + const int16_t last_core, /* i : last core, primary channel */ + const int16_t last_bwidth, /* i : last bandwidth */ + const int16_t output_frame /* i : frame length */ +) +{ + int16_t i, j, n, decoderDelay, icbweOLASize, dftOvlLen; + int16_t core, memOffset, refChanIndx_bwe; + float temp0[L_FRAME48k + NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )], temp1[L_FRAME48k + NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; + float winSlope, alpha; + const float *win_dft; + int32_t extl_brate, output_Fs; + + STEREO_ICBWE_DEC_HANDLE hStereoICBWE = hCPE->hStereoICBWE; + + + /*--------------------------------------------------------------------* + * skip IC-BWE in case of SID or NO_DATA frame + * -------------------------------------------------------------------*/ + + if ( ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) && hCPE->nchan_out == 2 /*&& hCPE->hCoreCoder[0]->core_brate > SID_2k40*/ && hCPE->hCoreCoder[0]->last_core_brate <= SID_2k40 ) + { + stereo_icBWE_init_dec( hCPE->hStereoICBWE ); + } + + if ( hCPE->hCoreCoder[0]->core_brate <= SID_2k40 ) + { + return; + } + + /*--------------------------------------------------------------------* + * skip IC-BWE in case of mono DMX output * + * -------------------------------------------------------------------*/ + + if ( hCPE->nchan_out == 1 && hCPE->element_mode == IVAS_CPE_DFT ) + { + add_HB_to_mono_dmx( hCPE, output[0], outputHB[0], last_core, output_frame ); + + return; + } + else if ( hCPE->nchan_out == 1 && hCPE->element_mode != IVAS_CPE_TD ) + { + return; + } + + /*--------------------------------------------------------------------* + * IC-BWE processing + * -------------------------------------------------------------------*/ + + core = hCPE->hCoreCoder[0]->core; + extl_brate = hCPE->hCoreCoder[0]->extl_brate; + output_Fs = hCPE->hCoreCoder[0]->output_Fs; + + memOffset = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ); + + /* LRTD stereo mode - 2xBWEs used */ + if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag ) + { + /* delay HB synth */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mvr2r( outputHB[n] + output_frame - memOffset, temp0, memOffset ); + mvr2r( outputHB[n], outputHB[n] + memOffset, output_frame - memOffset ); + mvr2r( hCPE->prev_hb_synth[n], outputHB[n], memOffset ); + mvr2r( temp0, hCPE->prev_hb_synth[n], memOffset ); + } + + if ( hCPE->nchan_out == 1 ) + { + /* stereo to mono downmix */ + for ( i = 0; i < output_frame; i++ ) + { + outputHB[0][i] = ( outputHB[0][i] + outputHB[1][i] ) * 0.5f; + } + v_add( output[0], outputHB[0], output[0], output_frame ); + } + else + { + /* Add the delayed hb_synth component to the delayed ACELP synthesis */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + v_add( output[n], outputHB[n], output[n], output_frame ); + } + } + } + else + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + set_f( hCPE->prev_hb_synth[n], 0, memOffset ); + } + } + + if ( hCPE->element_mode != IVAS_CPE_MDCT && !( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag ) ) + { + if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + set_f( hStereoICBWE->memOutHB[0], 0, memOffset ); + set_f( hStereoICBWE->memOutHB[1], 0, memOffset ); + + set_f( hStereoICBWE->memTransitionHB[0], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + set_f( hStereoICBWE->memTransitionHB[1], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + } + + if ( core == ACELP_CORE && extl_brate > 0 ) + { + refChanIndx_bwe = hStereoICBWE->refChanIndx_bwe; + + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->hCoreCoder[0]->bwidth > WB && last_bwidth == WB && hCPE->hCoreCoder[0]->ini_frame > 1 /* counter wass already updated */ ) + { + /* fad-in reference HB signal */ + winSlope = ( memOffset > 0 ) ? ( 1.0f / memOffset ) : 0; + for ( i = 0; i < memOffset; i++ ) + { + outputHB[refChanIndx_bwe][i] *= ( i + 1 ) * winSlope; + } + } + /* Resampled LB and HB offset */ + mvr2r( outputHB[refChanIndx_bwe], temp0 + memOffset, output_frame - memOffset ); + mvr2r( outputHB[!refChanIndx_bwe], temp1 + memOffset, output_frame - memOffset ); + + decoderDelay = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); + + if ( last_core != ACELP_CORE && hCPE->element_mode == IVAS_CPE_DFT ) + { + /* hb_synth of mid band is faded out in the 1.25 ms prior to DFT analysis and the icbwe is faded in time domain */ + icbweOLASize = NS2SA( output_Fs, STEREO_DFT_DELAY_DEC_BWE_NS ); + + for ( i = 0; i < decoderDelay; i++ ) + { + temp0[i] = 0; + temp1[i] = 0; + } + + assert( icbweOLASize > 0 ); + winSlope = 1.0f / icbweOLASize; + alpha = winSlope; + for ( ; i < decoderDelay + icbweOLASize; i++ ) + { + temp0[i] *= alpha; + temp1[i] *= alpha; + alpha += winSlope; + } + } + else + { + if ( refChanIndx_bwe != hStereoICBWE->prev_refChanIndx_bwe ) + { + winSlope = ( memOffset > 0 ) ? ( 1.0f / memOffset ) : 0; + for ( i = 0; i < memOffset; i++ ) + { + temp0[i] = ( ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[refChanIndx_bwe][i] + + ( 1 - ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[hStereoICBWE->prev_refChanIndx_bwe][i]; + temp1[i] = ( ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[hStereoICBWE->prev_refChanIndx_bwe][i] + + ( 1 - ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[refChanIndx_bwe][i]; + } + } + else + { + mvr2r( hStereoICBWE->memOutHB[refChanIndx_bwe], temp0, memOffset ); + mvr2r( hStereoICBWE->memOutHB[!refChanIndx_bwe], temp1, memOffset ); + } + } + + if ( hCPE->nchan_out == 1 ) + { + /* stereo to mono downmix */ + for ( i = 0; i < output_frame; i++ ) + { + temp0[i] = ( temp0[i] + temp1[i] ) * 0.5f; + output[0][i] += temp0[i]; + } + } + else + { + + v_add( temp0, output[0], output[0], output_frame ); +#ifdef DEBUG_STEREO_DFT_NOSTEREO + v_add( temp0, output[1], output[1], output_frame ); +#else + v_add( temp1, output[1], output[1], output_frame ); +#endif + } + mvr2r( outputHB[0] + output_frame - memOffset, hStereoICBWE->memOutHB[0], memOffset ); + mvr2r( outputHB[1] + output_frame - memOffset, hStereoICBWE->memOutHB[1], memOffset ); + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + win_dft = hCPE->hStereoDft->win32ms; + dftOvlLen = hCPE->hStereoDft->dft32ms_ovl; + + /* Preparing buffers in anticipation of an ACELP to TCX switch */ + j = 0; + for ( i = 0; i < memOffset; i++ ) + { + hStereoICBWE->memTransitionHB[0][i] = hStereoICBWE->memOutHB[0][i] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; + hStereoICBWE->memTransitionHB[1][i] = hStereoICBWE->memOutHB[1][i] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; + j++; + } + + for ( i = 0; j < dftOvlLen; i++ ) + { + hStereoICBWE->memTransitionHB[0][memOffset + i] = outputHB[0][output_frame - i - 1] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; + hStereoICBWE->memTransitionHB[1][memOffset + i] = outputHB[1][output_frame - i - 1] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; + j++; + } + } + + hStereoICBWE->prev_refChanIndx_bwe = refChanIndx_bwe; + } + else + { + if ( last_core == ACELP_CORE ) + { + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + /* QC: TBV */ + v_add( output[0], hStereoICBWE->memOutHB[hStereoICBWE->prev_refChanIndx_bwe], output[0], memOffset ); + v_add( output[1], hStereoICBWE->memOutHB[!hStereoICBWE->prev_refChanIndx_bwe], output[1], memOffset ); + } + else + { + /* This is generated in the ACELP frame and windowed. This process is akin to GenTransition for IC-BWE */ + v_add( output[0], hStereoICBWE->memTransitionHB[hStereoICBWE->prev_refChanIndx_bwe], output[0], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + v_add( output[1], hStereoICBWE->memTransitionHB[!hStereoICBWE->prev_refChanIndx_bwe], output[1], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + } + + set_f( hStereoICBWE->memOutHB[0], 0, memOffset ); + set_f( hStereoICBWE->memOutHB[1], 0, memOffset ); + + set_f( hStereoICBWE->memTransitionHB[0], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + set_f( hStereoICBWE->memTransitionHB[1], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + } + } + } + else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag && hStereoICBWE != NULL ) + { + stereo_icBWE_init_dec( hStereoICBWE ); + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->last_element_mode == IVAS_CPE_DFT && last_core == ACELP_CORE ) + { + int16_t delay_tdbwe = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); + + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + for ( i = 0; i < delay_tdbwe; i++ ) + { + output[n][NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) - delay_tdbwe + i] += outputHB[0][i]; + } + } + /* reset BWE structs as they are only needed in the transition frame in MDCT Stereo */ + td_bwe_dec_init( hCPE->hCoreCoder[0]->hBWE_TD, -1, output_Fs ); + fd_bwe_dec_init( hCPE->hCoreCoder[0]->hBWE_FD ); + } + + if ( hCPE->element_mode == IVAS_CPE_DFT && ( max( hCPE->hStereoDft->td_gain[0], hCPE->hStereoDft->td_gain[1] ) > 0 ) ) + { + float win_in, win_out, tmp; + + win_dft = hCPE->hStereoDft->win32ms; + dftOvlLen = hCPE->hStereoDft->dft32ms_ovl; + + for ( i = 0; i < dftOvlLen; i++ ) + { + win_in = win_dft[STEREO_DFT32MS_STEP * i] * win_dft[STEREO_DFT32MS_STEP * i]; + win_out = 1 - win_in; + tmp = ( win_in * hCPE->hStereoDft->td_gain[0] + win_out * hCPE->hStereoDft->td_gain[1] ) * hCPE->hStereoDft->hb_stefi_sig[i]; + + output[0][i] += tmp; + output[1][i] -= tmp; + } + for ( i = dftOvlLen; i < output_frame; i++ ) + { + tmp = hCPE->hStereoDft->td_gain[0] * hCPE->hStereoDft->hb_stefi_sig[i]; + output[0][i] += tmp; + output[1][i] -= tmp; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * stereo_icBWE_init_dec() + * + * Stereo (inter-channel) BWE mapping - decoder initialization + *-------------------------------------------------------------------*/ + +void stereo_icBWE_init_dec( + STEREO_ICBWE_DEC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ +) +{ + /* BWE ref channel */ + hStereoICBWE->refChanIndx_bwe = L_CH_INDX; + hStereoICBWE->prev_refChanIndx_bwe = L_CH_INDX; + + /* SHB output memory */ + set_f( hStereoICBWE->memOutHB[0], 0, NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); + set_f( hStereoICBWE->memOutHB[1], 0, NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); + + + /* SHB output memory */ + set_f( hStereoICBWE->memTransitionHB[0], 0, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); + set_f( hStereoICBWE->memTransitionHB[1], 0, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); + + /* inter-channel BWE spectral shape adj. */ + hStereoICBWE->prevSpecMapping = 0; + hStereoICBWE->prevgsMapping = 1.0f; + + hStereoICBWE->icbweM2Ref_prev = 1.0f; + + hStereoICBWE->prev_spIndx = 0; + hStereoICBWE->prev_gsIndx = 0; + + ic_bwe_dec_reset( hStereoICBWE ); + + return; +} diff --git a/lib_dec/ivas_stereo_mdct_core_dec.c b/lib_dec/ivas_stereo_mdct_core_dec.c new file mode 100644 index 0000000000..d87be7f23a --- /dev/null +++ b/lib_dec/ivas_stereo_mdct_core_dec.c @@ -0,0 +1,683 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "prot.h" +#include "cnst.h" +#include "stat_com.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local function prototypes + *-------------------------------------------------------------------------*/ + +static void apply_dmx_weights( CPE_DEC_HANDLE hCPE, float *x[CPE_CHANNELS][NB_DIV], int16_t transform_type_left[NB_DIV], int16_t transform_type_right[NB_DIV] ); +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +static void run_min_stats( Decoder_State **sts, float *x[CPE_CHANNELS][NB_DIV] ); +#endif + +/*-------------------------------------------------------------------* + * convert_coeffs_to_higher_res() + * + * convert MDCT coefficients to higher frequency resolution + * by applying high- and lowpass filters to subdivide bins + *-------------------------------------------------------------------*/ + +void convert_coeffs_to_higher_res( + const float *in1, /* i : first subframe input */ + const float *in2, /* i : second subframe input */ + float *out, /* o : converted output */ + const int16_t len /* i : length of subframes */ +) +{ + int16_t i; + float tmp1, tmp2; + + if ( in1 == out ) + { + for ( i = 0; i < len; i += 2 ) + { + tmp1 = 0.5f * ( in2[i] + in1[i] ); + tmp2 = 0.5f * ( in2[i] - in1[i] ); + out[2 * i] = tmp1; + out[2 * i + 1] = tmp2; + tmp1 = 0.5f * ( in2[i] - in1[i] ); + tmp2 = 0.5f * ( in2[i] + in1[i] ); + out[2 * i + 2] = tmp1; + out[2 * i + 3] = tmp2; + } + } + else + { + for ( i = 0; i < len; i += 2 ) + { + out[2 * i] = 0.5f * ( in2[i] + in1[i] ); + out[2 * i + 1] = 0.5f * ( in2[i] - in1[i] ); + out[2 * i + 2] = 0.5f * ( in2[i + 1] - in1[i + 1] ); + out[2 * i + 3] = 0.5f * ( in2[i + 1] + in1[i + 1] ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_mdct_dec_stereo() + * + * decode core and MDCT stereo information + *-------------------------------------------------------------------*/ + +static void stereo_mdct_dec_stereo( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + int16_t ms_mask[2][MAX_SFB] /* o : bandwise MS mask */ +) +{ + int16_t availableBits; + Decoder_State **sts; + + sts = hCPE->hCoreCoder; + + parse_stereo_from_bitstream( hCPE->hStereoMdct, hCPE->hCoreCoder, 0, hCPE->hCoreCoder[0], ms_mask ); + + /*Split available bits between channels */ + availableBits = sts[0]->bits_frame_channel + sts[1]->bits_frame_channel - sts[0]->next_bit_pos - sts[0]->core * ( NF_GAIN_BITS + SMDCT_MINIMUM_ARITH_BITS ) - sts[1]->core * ( NF_GAIN_BITS + SMDCT_MINIMUM_ARITH_BITS ); + + splitAvailableBits( availableBits, hCPE->hStereoMdct->split_ratio, &sts[0]->bits_frame_channel, &sts[1]->bits_frame_channel ); + + sts[0]->bits_frame_channel += sts[0]->core * SMDCT_MINIMUM_ARITH_BITS; + sts[1]->bits_frame_channel += sts[1]->core * SMDCT_MINIMUM_ARITH_BITS; + + + sts[1]->bit_stream = &sts[0]->bit_stream[sts[0]->next_bit_pos + sts[0]->bits_frame_channel + sts[0]->core * NF_GAIN_BITS]; + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_mdct_core_dec() + * + * MDCT stereo core/stereo decoder + *--------------------------------------------------------------------*/ + +void stereo_mdct_core_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float signal_out[CPE_CHANNELS][L_FRAME48k], /* o : synthesis @internal_FS */ + float signal_outFB[CPE_CHANNELS][L_FRAME48k] /* o : synthesis @output_FS */ +) +{ + int16_t k, ch, nChannels; + Decoder_State *st, **sts; + + /* bitstream */ + int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV]; + int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW]; + + float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )]; + float *x[CPE_CHANNELS][2]; + + /*needed to allocate N_MAX to prevent stereo switching crash */ + float x_0_buf[CPE_CHANNELS][N_MAX] = { { 0.0f } }; + float *x_0[CPE_CHANNELS][2]; + + /* Concealment */ + int16_t bfi; + + /* Framing */ + int16_t L_frame[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS], nSubframes[CPE_CHANNELS]; + + /* TCX */ + int16_t fUseTns[CPE_CHANNELS][2]; /*two entries for each channel in case of TCX 10 */ + STnsData tnsData[CPE_CHANNELS][2]; + int16_t tcx_offset[CPE_CHANNELS]; + int16_t tcx_offsetFB[CPE_CHANNELS]; + int16_t left_rect[CPE_CHANNELS]; + int16_t L_spec[CPE_CHANNELS]; + + /* stereo */ + int16_t ms_mask[NB_DIV][MAX_SFB]; + + int16_t p_param[CPE_CHANNELS][NB_DIV]; + int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV]; + float signal_outFB_tmp[CPE_CHANNELS][L_FRAME_PLUS]; + + float signal_out_tmp[CPE_CHANNELS][L_FRAME_PLUS]; + + wmops_sub_start( "stereo_mdct_core_dec" ); + + /*--------------------------------------------------------------------------------* + * Initializations + *--------------------------------------------------------------------------------*/ + + sts = hCPE->hCoreCoder; + st = NULL; + + nChannels = CPE_CHANNELS; + bfi = sts[0]->bfi; + + for ( ch = 0; ch < nChannels; ch++ ) + { + /* Initialization or re-configuration of Stereo TCX */ + stereo_tcx_init_dec( sts[ch], 0, hCPE->last_element_mode ); + sts[ch]->hTcxDec->tnsActive[0] = sts[ch]->hTcxDec->tnsActive[1] = 0; + sts[ch]->enablePlcWaveadjust = 0; + set_zero( signal_out_tmp[ch], L_FRAME_PLUS ); + x[ch][0] = &signal_out_tmp[ch][0]; + x[ch][1] = &signal_out_tmp[ch][0] + L_FRAME_PLUS / 2; + + x_0[ch][0] = &x_0_buf[ch][0]; + x_0[ch][1] = &x_0_buf[ch][0] + L_FRAME48k / 2; + nTnsBitsTCX10[ch][0] = 0; + nTnsBitsTCX10[ch][1] = 0; + + set_s( param_lpc[ch], 0, NPRM_LPC_NEW ); + } + set_s( ms_mask[0], 0, MAX_SFB ); + set_s( ms_mask[1], 0, MAX_SFB ); + + initMdctStereoDecData( hCPE->hStereoMdct, sts[0]->igf, sts[0]->hIGFDec->igfData.igfInfo.grid, hCPE->element_brate, sts[0]->bwidth ); + + if ( !bfi ) + { + ivas_mdct_dec_side_bits_frame_channel( hCPE, param_lpc, p_param, hCPE->hCoreCoder[0], NULL, nTnsBitsTCX10, param, 0, 0 ); + + if ( sts[0]->igf ) + { + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + mdct_read_IGF_bits( st, sts[0] ); + } + } + + stereo_mdct_dec_stereo( hCPE, ms_mask ); + } + else + { + mvs2s( hCPE->hStereoMdct->prev_ms_mask[0], ms_mask[0], MAX_SFB ); + mvs2s( hCPE->hStereoMdct->prev_ms_mask[1], ms_mask[1], MAX_SFB ); + + if ( sts[0]->core != TCX_10_CORE && sts[1]->core != TCX_10_CORE ) + { + hCPE->hStereoMdct->mdct_stereo_mode[1] = SMDCT_DUAL_MONO; + hCPE->hStereoMdct->IGFStereoMode[1] = SMDCT_DUAL_MONO; + } + else if ( sts[0]->core == TCX_10_CORE && sts[1]->core == TCX_10_CORE ) + { + hCPE->hStereoMdct->global_ild[0] = hCPE->hStereoMdct->global_ild[1]; + hCPE->hStereoMdct->mdct_stereo_mode[0] = hCPE->hStereoMdct->mdct_stereo_mode[1]; + hCPE->hStereoMdct->IGFStereoMode[0] = hCPE->hStereoMdct->IGFStereoMode[1]; + } + } + + ivas_mdct_core_invQ( hCPE, 0, nTnsBitsTCX10, p_param, param_lpc, param, fUseTns, tnsData, x_0, x, Aq, ms_mask, 0 ); + + for ( ch = 0; ch < nChannels; ch++ ) + { + nSubframes[ch] = ( sts[ch]->core == TCX_10_CORE ) ? NB_DIV : 1; + for ( k = 0; k < nSubframes[ch]; k++ ) + { + L_spec[ch] = sts[ch]->hTcxCfg->tcx_coded_lines / nSubframes[ch]; + + init_tcx_info( sts[ch], sts[ch]->L_frame / nSubframes[ch], sts[ch]->hTcxDec->L_frameTCX / nSubframes[ch], k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); + } + } + + /* IGF decoding */ + if ( sts[0]->igf || sts[1]->igf ) + { + if ( sts[0]->core != sts[1]->core ) + { + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + if ( !bfi || ( bfi && st->core != ACELP_CORE ) ) + { + for ( k = 0; k < nSubframes[ch]; k++ ) + { + /* mono or dual mono IGF decoding */ + decoder_tcx_IGF_mono( st, x[ch][k], L_frame[ch], left_rect[ch], bfi, k ); + } + } + } + } + else if ( sts[0]->core != ACELP_CORE ) + { + assert( nSubframes[0] == nSubframes[1] ); + + for ( k = 0; k < nSubframes[0]; k++ ) + { + if ( hCPE->hStereoMdct->IGFStereoMode[k] != SMDCT_DUAL_MONO || hCPE->hStereoMdct->mdct_stereo_mode[k] != SMDCT_DUAL_MONO ) + { + assert( ( sts[0]->core == sts[1]->core ) || ( hCPE->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) ); + + /* stereo IGF decoding */ + decoder_tcx_IGF_stereo( sts, hCPE->hStereoMdct, ms_mask, x, L_frame[0], left_rect[0], k, bfi ); + } + else + { + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + /* mono or dual mono IGF decoding */ + decoder_tcx_IGF_mono( st, x[ch][k], L_frame[ch], left_rect[ch], bfi, k ); + } + } + } + } + } + + /*--------------------------------------------------------------------------------* + * Stereo processing + *--------------------------------------------------------------------------------*/ + + if ( !bfi ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + for ( k = 0; k < nSubframes[ch]; k++ ) + { + float sns_int_scf[FDNS_NPTS]; + + sns_interpolate_scalefactors( &sns_int_scf[0], &Aq[ch][k * M], DEC ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->hTonalMDCTConc != NULL && ( ( k + 1 ) == nSubframes[ch] ) ) +#else + if ( st->hTonalMDCTConc != NULL ) +#endif + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + int16_t infoIGFStartLine; + + if ( st->igf == 0 ) + { + if ( st->narrowBand == 0 ) + { + /* minimum needed for output with sampling rates lower then the + nominal sampling rate */ + infoIGFStartLine = min( L_frameTCX[ch], L_frame[ch] ); + } + else + { + infoIGFStartLine = L_frameTCX[ch]; + } + } + else + { + infoIGFStartLine = min( st->hIGFDec->infoIGFStartLine, L_frameTCX[ch] ); + } + + TonalMDCTConceal_SaveFreqSignal( st->hTonalMDCTConc, x[ch][k], L_frameTCX[ch], L_frame[ch], &sns_int_scf[0], infoIGFStartLine ); +#else + TonalMDCTConceal_SaveFreqSignal( st->hTonalMDCTConc, x[ch][k], L_frameTCX[ch], L_frame[ch], &sns_int_scf[0] ); +#endif + } + } + + TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX[ch], ( st->hTcxDec->tcxltp_last_gain_unmodified > 0 ) ? st->old_fpitch : 0, bfi, bfi && st->tonal_mdct_plc_active ); + } + + mvs2s( ms_mask[0], hCPE->hStereoMdct->prev_ms_mask[0], MAX_SFB ); + mvs2s( ms_mask[1], hCPE->hStereoMdct->prev_ms_mask[1], MAX_SFB ); + } + + if ( !bfi || !( sts[0]->core == ACELP_CORE && sts[1]->core == ACELP_CORE ) ) + { +#ifdef DEBUGGING + assert( ( sts[0]->core == sts[1]->core ) || ( ( hCPE->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) && ( hCPE->hStereoMdct->mdct_stereo_mode[1] == SMDCT_DUAL_MONO ) ) ); +#endif + stereo_decoder_tcx( hCPE->hStereoMdct, ms_mask, x_0[1], x[0], x[1], &hCPE->hStereoMdct->mdct_stereo_mode[0], + sts[0]->core, sts[1]->core, sts[0]->igf, L_frameTCX[0], 0, sts[0]->last_core, sts[1]->last_core, 0 ); + } + + ivas_mdct_core_tns_ns( hCPE, 0, fUseTns, tnsData, x, Aq, 0 ); + + if ( st_ivas != NULL && st_ivas->renderer_type == RENDERER_MC_PARAMMC && ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ) ) + { + ivas_ls_setup_conversion_process_mdct_param_mc( st_ivas, x ); + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + run_min_stats( sts, x ); +#endif + + if ( hCPE->nchan_out == 1 && ( !bfi || ( bfi && sts[0]->core != ACELP_CORE && sts[1]->core != ACELP_CORE ) ) ) + { + apply_dmx_weights( hCPE, x, sts[0]->transform_type, sts[1]->transform_type ); + } + + ivas_mdct_core_reconstruct( hCPE, x, signal_outFB_tmp, 0, fUseTns, 0 ); + + mvr2r( signal_out_tmp[0], signal_out[0], L_FRAME48k ); + mvr2r( signal_out_tmp[1], signal_out[1], L_FRAME48k ); + + mvr2r( signal_outFB_tmp[0], signal_outFB[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX ); + mvr2r( signal_outFB_tmp[1], signal_outFB[1], hCPE->hCoreCoder[1]->hTcxDec->L_frameTCX ); + + wmops_sub_end(); + + return; +} + + +/*-------------------------------------------------------------------* + * apply_dmx_weights() + * + * apply bandwise weighting for later dmx in case of mono output + *--------------------------------------------------------------------*/ + +static void apply_dmx_weights( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float *x[CPE_CHANNELS][NB_DIV], /* i/o: MDCT Spectrum */ + int16_t transform_type_left[NB_DIV], /* i : indicate TCX5 for left ch */ + int16_t transform_type_right[NB_DIV] /* i : indicate TCX5 for right ch */ +) +{ + int16_t b, k, l, i, ch; + int16_t nsub, nsub2[2], nChannels; + int16_t transform_type[2][2]; + int16_t numCoeffs[2], frameSize; + int16_t tcx_10_only, w_idx; + int16_t start, stop, start_tcx5, stop_tcx5; + STEREO_MDCT_BAND_PARAMETERS *sfbConf = NULL; + float mdst[CPE_CHANNELS][NB_DIV][L_FRAME48k]; + float convertRes[CPE_CHANNELS][L_FRAME48k]; + float *sig[CPE_CHANNELS][NB_DIV], *pTmp[CPE_CHANNELS][NB_DIV]; + + nChannels = CPE_CHANNELS; + frameSize = hCPE->hStereoMdct->stbParamsTCX20.sfbOffset[hCPE->hStereoMdct->stbParamsTCX20.sfbCnt]; + + transform_type[0][0] = transform_type_left[0]; + transform_type[0][1] = transform_type_left[1]; + transform_type[1][0] = transform_type_right[0]; + transform_type[1][1] = transform_type_right[1]; + + /* set overall frequency resolution of (sub)frame to maximum of (sub)frame, requires conversion if both channels are not the same */ + if ( transform_type[0][0] == TCX_20 || transform_type[1][0] == TCX_20 ) + { + /* use TCX20 band config for TCX20 in both channels and mixed frames */ + sfbConf = &hCPE->hStereoMdct->stbParamsTCX20; + nsub = nsub2[0] = nsub2[1] = 1; /* overall TCX 20 */ + tcx_10_only = 0; + } + else + { + /* use TCX10 band config only if none of the channels is TCX20 */ + sfbConf = &hCPE->hStereoMdct->stbParamsTCX10; + nsub = 2; + /* set resolution per subframe, subdivide again if subframe is TCX5 in both channels */ + nsub2[0] = ( transform_type[0][0] == TCX_5 && transform_type[1][0] == TCX_5 ) ? 2 : 1; + nsub2[1] = ( transform_type[0][1] == TCX_5 && transform_type[1][1] == TCX_5 ) ? 2 : 1; + tcx_10_only = 1; + } + + /* for subframes with only TCX5 in both channels number of coefficients is only half (in 2 quarterframes) */ + numCoeffs[0] = ( nsub2[0] == 1 ) ? sfbConf->sfbOffset[sfbConf->sfbCnt] : sfbConf->sfbOffset[sfbConf->sfbCnt] / 2; + numCoeffs[1] = ( nsub2[1] == 1 ) ? sfbConf->sfbOffset[sfbConf->sfbCnt] : sfbConf->sfbOffset[sfbConf->sfbCnt] / 2; + + /* initially, set pointers to input; if conversion occurs in (sub)frame, set to convertRes */ + sig[0][0] = pTmp[0][0] = x[0][0]; + sig[0][1] = pTmp[0][1] = x[0][1]; + sig[1][0] = pTmp[1][0] = x[1][0]; + sig[1][1] = pTmp[1][1] = x[1][1]; + + /* convert (sub)frames to higher frequency resolution */ + for ( ch = 0; ch < nChannels; ch++ ) + { + for ( k = 0; k < NB_DIV; k++ ) + { + if ( transform_type[ch][k] == TCX_5 && nsub2[k] == 1 ) + { + /* subframe is TCX5, but TCX10 or TCX20 in other channel -> convert channel with TCX5 to TCX10 resolution */ + pTmp[ch][k] = sig[ch][k] = convertRes[ch] + k * frameSize / 2; + convert_coeffs_to_higher_res( x[ch][k], x[ch][k] + frameSize / 4, pTmp[ch][k], frameSize / 4 ); + } + } + + if ( transform_type[ch][0] != TCX_20 && nsub == 1 ) + { + /* TCX20 and TCX10 in same frame -> convert channel with TCX10 to TCX20 resolution */ + sig[ch][0] = convertRes[ch]; + convert_coeffs_to_higher_res( pTmp[ch][0], pTmp[ch][1], sig[ch][0], frameSize / 2 ); + } + } + + /* MDST estimate */ + for ( ch = 0; ch < nChannels; ch++ ) + { + for ( k = 0; k < nsub; k++ ) + { + for ( l = 0; l < nsub2[k]; l++ ) + { + mdst[ch][k][l * numCoeffs[k]] = mdst[ch][k][( l + 1 ) * numCoeffs[k] - 1] = 0.f; + for ( i = l * numCoeffs[k] + 1; i < ( l + 1 ) * numCoeffs[k] - 1; i++ ) + { + mdst[ch][k][i] = sig[ch][k][i + 1] - sig[ch][k][i - 1]; + } + } + } + } + + /* compute and apply bandwise weigths for active downmix (similar to DFT Stereo) */ + stop_tcx5 = 0; + for ( b = 0; b < sfbConf->sfbCnt; b++ ) + { + float w[CPE_CHANNELS][4]; + + for ( k = 0; k < nsub; k++ ) + { + for ( l = 0; l < nsub2[k]; l++ ) + { + float sum_nrg_L = EPSILON, sum_nrg_R = EPSILON; + float dot_prod_real = EPSILON, dot_prod_imag = EPSILON; + float sum_nrg_Mid, sum_abs, dot_prod_abs; + + start = l * numCoeffs[k] + sfbConf->sfbOffset[b] / nsub2[k]; + stop = l * numCoeffs[k] + sfbConf->sfbOffset[b + 1] / nsub2[k]; + + /* compute band energies and cross correlation */ + for ( i = start; i < stop; i++ ) + { + sum_nrg_L += sig[0][k][i] * sig[0][k][i] + mdst[0][k][i] * mdst[0][k][i]; + sum_nrg_R += sig[1][k][i] * sig[1][k][i] + mdst[1][k][i] * mdst[1][k][i]; + dot_prod_real += sig[0][k][i] * sig[1][k][i] + mdst[0][k][i] * mdst[1][k][i]; + dot_prod_imag += mdst[0][k][i] * sig[1][k][i] - sig[0][k][i] * mdst[1][k][i]; + } + sum_nrg_Mid = max( 0.f, sum_nrg_L + sum_nrg_R + 2.f * dot_prod_real ); + sum_abs = sqrtf( sum_nrg_L ) + sqrtf( sum_nrg_R ) + EPSILON; + dot_prod_abs = sqrtf( dot_prod_real * dot_prod_real + dot_prod_imag * dot_prod_imag ); + + /* calculate weights */ + if ( hCPE->hStereoMdct->reverse_dmx == 0 ) + { + w[1][2 * k + l] = sqrtf( 0.5f * ( sum_nrg_L + sum_nrg_R ) + dot_prod_abs ) / sum_abs; + w[0][2 * k + l] = w[1][2 * k + l] + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); + } + else + { + w[0][2 * k + l] = sqrtf( 0.5f * ( sum_nrg_L + sum_nrg_R ) + dot_prod_abs ) / sum_abs; + w[1][2 * k + l] = w[0][2 * k + l] + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); + } + } + } + /* apply weights to channels with their original frequency resolutions */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( transform_type[ch][0] == TCX_20 ) + { + for ( i = sfbConf->sfbOffset[b]; i < sfbConf->sfbOffset[b + 1]; i++ ) + { + x[ch][0][i] *= w[ch][0]; + } + } + else + { + start = sfbConf->sfbOffset[b]; + stop = sfbConf->sfbOffset[b + 1]; + if ( !tcx_10_only ) /* TCX20 band config is used */ + { + start /= 2; + stop /= 2; + } + + for ( k = 0; k < NB_DIV; k++ ) + { + w_idx = ( nsub == 1 ) ? 0 : 2 * k; + if ( transform_type[ch][k] == TCX_10 ) + { + for ( i = start; i < stop; i++ ) + { + x[ch][k][i] *= w[ch][w_idx]; + } + } + else /* TCX_5 */ + { + start_tcx5 = stop_tcx5; + stop_tcx5 = ( stop + 1 ) / 2; + + for ( i = start_tcx5; i < stop_tcx5; i++ ) + { + x[ch][k][i] *= w[ch][w_idx]; + } + + if ( nsub2[k] == 2 ) + { + w_idx++; + } + + for ( i = start_tcx5; i < stop_tcx5; i++ ) + { + x[ch][k][i + ( frameSize >> 2 )] *= w[ch][w_idx]; + } + } + } + } + } + } + + return; +} + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +/*-------------------------------------------------------------------* + * run_min_stats() + * + * run the minimum statistics noise estimation algorithm + * directly on the MDCT spectrum + *--------------------------------------------------------------------*/ + +static void run_min_stats( + Decoder_State **sts, + float *x[CPE_CHANNELS][NB_DIV] /* i/o: MDCT Spectrum */ +) +{ + int16_t ch, will_estimate_noise_on_channel[CPE_CHANNELS], save_VAD[CPE_CHANNELS]; + float power_spec[L_FRAME16k]; + float *spec_in; + + /* Check if the minimum statistics would run on the respective channels. They are run on inactive TCX20 channels */ + will_estimate_noise_on_channel[0] = sts[0]->core == TCX_20_CORE && !sts[0]->VAD; + will_estimate_noise_on_channel[1] = sts[1]->core == TCX_20_CORE && !sts[1]->VAD; + + save_VAD[0] = sts[0]->VAD; + save_VAD[1] = sts[1]->VAD; + + /* The first loop calculates the power spectra needed in the minimum statistics (MS) noise estimation. This is only needed if the MS + would run at all on at least one of the channels. If they run on both channels, we need to calculate two distinct power spectra + for the two different channels. If they would only run on one of the channels, the VAD of the other one is patched so that the MS will + still run. This other channel then uses the power spectrum of the other channel to run the MS. This is done to keep continuity and synchronicity + between the two noise levels and silently assumes that the background noise is somehow diffuse and at leas partly shared between the channels */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + Decoder_State *st; + st = sts[ch]; + + if ( !sts[0]->bfi && ( will_estimate_noise_on_channel[0] || will_estimate_noise_on_channel[1] ) ) + { + /* if noise estimation is expected to run on this channel, compute power spectrum from it, + otherwise, use other channel's signal */ + if ( will_estimate_noise_on_channel[ch] ) + { + spec_in = &x[ch][0][0]; + } + else + { + spec_in = &x[( ch + 1 ) % 2][0][0]; + /* patch VAD to zero so that estimation runs, will later be restored */ + st->VAD = 0; + } + + /* Compute power spectrum twice if estimation will run on both channels. If only on one channel, it is + computed only once (for ch == 0) and not again in the second run sive the outcome will be the same anyway */ + if ( ( will_estimate_noise_on_channel[0] == will_estimate_noise_on_channel[1] ) || ch == 0 ) + { + /* calculate power spectrum from MDCT coefficients and estimated MDST coeffs */ + power_spec[0] = spec_in[0] * spec_in[0]; + power_spec[L_FRAME16k - 1] = spec_in[L_FRAME16k - 1] * spec_in[L_FRAME16k - 1]; + for ( int16_t i = 1; i < L_FRAME16k - 1; i++ ) + { + float mdst; + mdst = spec_in[i + 1] - spec_in[i - 1]; + power_spec[i] = spec_in[i] * spec_in[i] + mdst * mdst; + } + } + + noisy_speech_detection( st->hFdCngDec, st->VAD && st->m_frame_type == ACTIVE_FRAME, power_spec ); + + st->hFdCngDec->hFdCngCom->likelihood_noisy_speech = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; + + st->lp_noise = st->hFdCngDec->lp_noise; + } + + if ( will_estimate_noise_on_channel[0] || will_estimate_noise_on_channel[1] || st->bfi ) + { + ApplyFdCng( NULL, st->bfi ? NULL : power_spec, NULL, NULL, st, st->bfi, 0 ); + } + + /* restore VAD (see above) */ + st->VAD = save_VAD[ch]; + } +} +#endif diff --git a/lib_dec/ivas_stereo_mdct_stereo_dec.c b/lib_dec/ivas_stereo_mdct_stereo_dec.c new file mode 100644 index 0000000000..298e77a131 --- /dev/null +++ b/lib_dec/ivas_stereo_mdct_stereo_dec.c @@ -0,0 +1,680 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void inverseBwMS( const int16_t startLine, const int16_t stopLine, float x0[], float x1[], const float norm_fac ); + + +/*-------------------------------------------------------------------* + * parse_stereo_from_bitstream + * + * + *-------------------------------------------------------------------*/ + +void parse_stereo_from_bitstream( + STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo decoder structure */ + Decoder_State **sts, /* i/o: decoder state structure */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0)*/ + Decoder_State *st0, /* i/o: decoder state structure for Bstr*/ + int16_t ms_mask[NB_DIV][MAX_SFB] /* o : bandwise MS mask */ +) +{ + int16_t i, k, nSubframes, mdct_stereo_mode; + STEREO_MDCT_BAND_PARAMETERS *sfbConf; +#ifdef DEBUGGING + int16_t nbits_start = st0->next_bit_pos; +#endif + + nSubframes = ( sts[0]->core == TCX_10_CORE || ( sts[0]->core != sts[1]->core ) ) ? NB_DIV : 1; + sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + if ( sts[0]->last_core_from_bs == ACELP_CORE ) + { + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + + if ( hStereoMdct->use_itd ) + { + int16_t I; + + hStereoMdct->itd_mode = get_next_indice( st0, STEREO_DFT_ITD_MODE_NBITS ); + /*(*nb_bits) += STEREO_DFT_ITD_MODE_NBITS;*/ /*ITD mode flag: 1bit*/ + + hStereoMdct->itd = 0.f; + if ( hStereoMdct->itd_mode ) + { + /*(*nb_bits) += */ read_itd( st0, &I ); + stereo_dft_dequantize_itd( &I, &hStereoMdct->itd, st0->output_Fs ); + } + } + + for ( k = 0; k < nSubframes; k++ ) + { + mdct_stereo_mode = get_next_indice( st0, 1 ); + if ( mdct_stereo_mode ) + { + mdct_stereo_mode = 1 + get_next_indice( st0, 1 ); + } + switch ( mdct_stereo_mode ) + { + case 0: + hStereoMdct->mdct_stereo_mode[k] = SMDCT_DUAL_MONO; + break; + case 1: + hStereoMdct->mdct_stereo_mode[k] = SMDCT_MS_FULL; + break; + case 2: + hStereoMdct->mdct_stereo_mode[k] = SMDCT_BW_MS; + break; + default: + assert( !"Not supported stereo mode\n" ); + } + + if ( !mct_on ) + { + if ( sts[0]->core == sts[1]->core || k == 0 ) + { + hStereoMdct->global_ild[k] = get_next_indice( st0, SMDCT_GLOBAL_ILD_BITS ); + assert( ( hStereoMdct->global_ild[k] > 0 ) && ( hStereoMdct->global_ild[k] < SMDCT_ILD_RANGE ) ); + } + else + { + hStereoMdct->global_ild[1] = hStereoMdct->global_ild[0]; + } + } + + set_s( ms_mask[k], ( hStereoMdct->mdct_stereo_mode[k] == SMDCT_MS_FULL ) ? 1 : 0, sfbConf->nBandsStereoCore ); + + if ( hStereoMdct->mdct_stereo_mode[k] == SMDCT_BW_MS ) + { + for ( i = 0; i < sfbConf->nBandsStereoCore; i++ ) + { + ms_mask[k][i] = get_next_indice( st0, 1 ); + } + } + + if ( st0->igf ) + { + + mdct_stereo_mode = get_next_indice( st0, 1 ); + if ( mdct_stereo_mode ) + { + mdct_stereo_mode = 1 + get_next_indice( st0, 1 ); + } + + switch ( mdct_stereo_mode ) + { + case 0: + hStereoMdct->IGFStereoMode[k] = SMDCT_DUAL_MONO; + break; + case 1: + hStereoMdct->IGFStereoMode[k] = SMDCT_MS_FULL; + break; + case 2: + hStereoMdct->IGFStereoMode[k] = SMDCT_BW_MS; + break; + default: + assert( !"Not supported stereo mode\n" ); + } + + set_s( &ms_mask[k][sfbConf->nBandsStereoCore], ( hStereoMdct->IGFStereoMode[k] == SMDCT_MS_FULL ) ? 1 : 0, sfbConf->sfbCnt - sfbConf->nBandsStereoCore ); + + if ( hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS ) + { + for ( i = sfbConf->nBandsStereoCore; i < sfbConf->sfbCnt; i++ ) + { + ms_mask[k][i] = get_next_indice( st0, 1 ); + } + } + } + else + { + hStereoMdct->IGFStereoMode[k] = SMDCT_DUAL_MONO; + } + } + + if ( !mct_on ) + { + hStereoMdct->split_ratio = SMDCT_EQUAL_RATIO_RANGE; /* Equal bits to both channels */ + hStereoMdct->split_ratio = get_next_indice( st0, SMDCT_NBBITS_SPLIT_RATIO ); + + assert( hStereoMdct->split_ratio > 0 ); + } + +#ifdef DEBUGGING + { + int16_t nBitsStereo = st0->next_bit_pos - nbits_start; + + assert( nBitsStereo <= st0->bits_frame_nominal ); + } +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_decoder_tcx() + * + * apply stereo processing (inverse MS and global ILD) + *-------------------------------------------------------------------*/ + +#define NF_RED_FAC 0.75f + +void stereo_decoder_tcx( + STEREO_MDCT_DEC_DATA *hStereoMdct, /* i/o: MDCT stereo decoder structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + float *spec_r_0[NB_DIV], /* i/o: spectrum right channel */ + float *spec_l[NB_DIV], /* i/o: spectrum left channel */ + float *spec_r[NB_DIV], /* i/o: spectrum right channel */ + const int16_t mdct_stereo_mode[], /* i : stereo mode (FB/band wise MS, dual mono */ + const int16_t core_l, /* i : core for left channel (TCX20/TCX10) */ + const int16_t core_r, /* i : core for right channel (TCX20/TCX10) */ + const int16_t igf, /* i : flag for IGF activity */ + const int16_t L_frame, /* i : TCX frame length */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ + const int16_t last_core_l, /* i : last core for left channel */ + const int16_t last_core_r, /* i : last core for right channel */ + const int16_t tmp_plc_upmix /* i : indicates temp upmix for PLC decision */ +) +{ + int16_t i, k, sfb, nSubframes; + STEREO_MDCT_BAND_PARAMETERS *sfbConf = NULL; + float nrgRatio; + + nSubframes = 2; + if ( ( core_l <= TCX_20_CORE && core_r <= TCX_20_CORE ) || tmp_plc_upmix ) + { + nSubframes = 1; + } + + for ( k = 0; k < nSubframes; k++ ) + { + sfbConf = ( core_l == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + + if ( last_core_l == ACELP_CORE || last_core_r == ACELP_CORE ) + { + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + + if ( mdct_stereo_mode[k] == SMDCT_MS_FULL ) + { + for ( i = 0; i < sfbConf->sfbOffset[sfbConf->nBandsStereoCore]; i++ ) + { + if ( spec_r_0[k][i] == 0.0f ) + { + spec_r[k][i] *= NF_RED_FAC; + } + } + inverseMS( sfbConf->sfbOffset[sfbConf->nBandsStereoCore], spec_l[k], spec_r[k], SQRT2_OVER_2 ); + } + else if ( mdct_stereo_mode[k] == SMDCT_BW_MS ) + { + for ( sfb = 0; sfb < sfbConf->nBandsStereoCore; sfb++ ) + { + if ( ms_mask[k][sfb] ) + { + for ( i = sfbConf->sfbOffset[sfb]; i < sfbConf->sfbOffset[sfb + 1]; i++ ) + { + if ( spec_r_0[k][i] == 0.0f ) + { + spec_r[k][i] *= NF_RED_FAC; + } + } + inverseBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], spec_l[k], spec_r[k], SQRT2_OVER_2 ); + } + } + } + else + { + if ( mdct_stereo_mode[k] != SMDCT_DUAL_MONO ) + { + assert( !"Not supported MDCT stereo mode!\n" ); + } + } + + if ( igf ) + { + if ( hStereoMdct->IGFStereoMode[k] == SMDCT_MS_FULL ) + { + for ( i = sfbConf->sfbOffset[sfbConf->nBandsStereoCore]; i < sfbConf->sfbOffset[sfbConf->sfbCnt]; i++ ) + { + if ( spec_r_0[k][i] == 0.0f ) + { + spec_r[k][i] *= NF_RED_FAC; + } + } + inverseMS( sfbConf->sfbOffset[sfbConf->sfbCnt] - sfbConf->sfbOffset[sfbConf->nBandsStereoCore], &spec_l[k][sfbConf->sfbOffset[sfbConf->nBandsStereoCore]], &spec_r[k][sfbConf->sfbOffset[sfbConf->nBandsStereoCore]], SQRT2_OVER_2 ); + } + else if ( hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS ) + { + for ( sfb = sfbConf->nBandsStereoCore; sfb < sfbConf->sfbCnt; sfb++ ) + { + if ( ms_mask[k][sfb] ) + { + for ( i = sfbConf->sfbOffset[sfb]; i < sfbConf->sfbOffset[sfb + 1]; i++ ) + { + if ( spec_r_0[k][i] == 0.0f ) + { + spec_r[k][i] *= NF_RED_FAC; + } + } + inverseBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], spec_l[k], spec_r[k], SQRT2_OVER_2 ); + } + } + } + else if ( hStereoMdct->IGFStereoMode[k] != SMDCT_DUAL_MONO ) + { + assert( !"Not supported MDCT stereo mode!\n" ); + } + } + + if ( !mct_on ) + { + nrgRatio = (float) SMDCT_ILD_RANGE / hStereoMdct->global_ild[k] - 1; /* nrgRatio = nrg[1]/nrg[0] */ + hStereoMdct->smooth_ratio = 0.8f * hStereoMdct->smooth_ratio + 0.2f * nrgRatio; + /* set flag to reverse dmx computation in case of right-side panning, only relevant for mono output */ + if ( hStereoMdct->smooth_ratio > 1.3f ) + { + hStereoMdct->reverse_dmx = 1; + } + else if ( hStereoMdct->smooth_ratio < 0.9f ) + { + hStereoMdct->reverse_dmx = 0; + } + + if ( ( nrgRatio > 1.0f ) && ( k < ( ( core_r == TCX_20_CORE ) ? 1 : NB_DIV ) ) ) + { + v_multc( spec_r[k], nrgRatio, spec_r[k], L_frame / ( ( core_r == TCX_20_CORE ) ? 1 : NB_DIV ) ); + } + else if ( ( nrgRatio < 1.0f ) && ( k < ( ( core_l == TCX_20_CORE ) ? 1 : NB_DIV ) ) ) + { + v_multc( spec_l[k], 1.0f / nrgRatio, spec_l[k], L_frame / ( ( core_l == TCX_20_CORE ) ? 1 : NB_DIV ) ); + } + } + } /* for k */ + + return; +} + + +/*-------------------------------------------------------------------* + * inverseBwMS() + * + * Band-wise M/S stereo processing + *-------------------------------------------------------------------*/ + +static void inverseBwMS( + const int16_t startLine, /* i : start line of sfb */ + const int16_t stopLine, /* i : stop line of sfb */ + float x0[], /* i/o: mid/left channel coefficients */ + float x1[], /* i/o: side/right channel coefficients */ + const float norm_fac /* i : normalization factor */ +) +{ + int16_t j; + float tmpValue; + + for ( j = startLine; j < stopLine; j++ ) + { + tmpValue = x0[j]; + x0[j] = ( x0[j] + x1[j] ) * norm_fac; + x1[j] = ( tmpValue - x1[j] ) * norm_fac; + } + + return; +} + + +/*-------------------------------------------------------------------* + * inverseMS() + * + * M/S stereo processing + *-------------------------------------------------------------------*/ + +void inverseMS( + const int16_t L_frame, /* i : frame length */ + float x0[], /* i/o: mid/left channel coefficients */ + float x1[], /* i/o: side/right channel coefficients */ + const float norm_fac /* i : normalization factor */ +) +{ + inverseBwMS( 0, L_frame, x0, x1, norm_fac ); + + return; +} + + +/*-------------------------------------------------------------------* + * initMdctStereoDecData() + * + * Initialize MDCT stereo decoder configuration + *-------------------------------------------------------------------*/ + +void initMdctStereoDecData( + STEREO_MDCT_DEC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ + const int16_t igf, /* i : flag indicating IGF activity */ + const H_IGF_GRID igfGrid, /* i : IGF grid configuration */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t tcx_coded_lines; + + tcx_coded_lines = getNumTcxCodedLines( bwidth ); + + /*Initialize sfb parameteres for TCX20 */ + stereo_mdct_init_bands( tcx_coded_lines, TCX_20_CORE, element_brate, igf, &igfGrid[IGF_GRID_LB_NORM], &hStereoMdct->stbParamsTCX20.sfbOffset[0], &hStereoMdct->stbParamsTCX20.sfbCnt ); + + /*Initialize sfb parameteres for TCX10 */ + stereo_mdct_init_bands( tcx_coded_lines, TCX_10_CORE, element_brate, igf, &igfGrid[IGF_GRID_LB_SHORT], &hStereoMdct->stbParamsTCX10.sfbOffset[0], &hStereoMdct->stbParamsTCX10.sfbCnt ); + + /*Initialize sfb parameteres for transition frames */ + stereo_mdct_init_bands( tcx_coded_lines, -1, element_brate, igf, &igfGrid[IGF_GRID_LB_TRAN], &hStereoMdct->stbParamsTCX20afterACELP.sfbOffset[0], &hStereoMdct->stbParamsTCX20afterACELP.sfbCnt ); + + if ( igf ) + { + /* calculate the igf start band from the igf start line */ + stereo_mdct_init_igf_start_band( &( hStereoMdct->stbParamsTCX20 ), 1.0f, bwidth, element_brate ); + stereo_mdct_init_igf_start_band( &( hStereoMdct->stbParamsTCX10 ), 0.5f, bwidth, element_brate ); + stereo_mdct_init_igf_start_band( &( hStereoMdct->stbParamsTCX20afterACELP ), 1.25f, bwidth, element_brate ); + } + else + { + hStereoMdct->stbParamsTCX20.sfbIgfStart = -1; + hStereoMdct->stbParamsTCX10.sfbIgfStart = -1; + hStereoMdct->stbParamsTCX20afterACELP.sfbIgfStart = -1; + hStereoMdct->stbParamsTCX10.nBandsStereoCore = hStereoMdct->stbParamsTCX10.sfbCnt; + hStereoMdct->stbParamsTCX20.nBandsStereoCore = hStereoMdct->stbParamsTCX20.sfbCnt; + hStereoMdct->stbParamsTCX20afterACELP.nBandsStereoCore = hStereoMdct->stbParamsTCX20afterACELP.sfbCnt; + } + + return; +} + + +/*-------------------------------------------------------------------* + * initMdctStereoDtxData() + * + * Allocate and initialize structures for MDCT-Stereo DTX operation + *-------------------------------------------------------------------*/ + +ivas_error initMdctStereoDtxData( + CPE_DEC_HANDLE hCPE /* i/o: CPE handle */ +) +{ + int16_t ch; + ivas_error error; + + error = IVAS_ERR_OK; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + DEC_CORE_HANDLE st = hCPE->hCoreCoder[ch]; + + if ( st->hFdCngDec == NULL ) + { + /* Create FD_CNG instance */ + if ( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* Init FD-CNG */ + initFdCngDec( st ); + if ( ( ch == 1 ) && ( st->cng_spar_flag == 1 ) ) + { + st->hFdCngDec->hFdCngCom->seed += 3; + } + } + + if ( st->cldfbAna == NULL ) + { + /* open analysis for max. sampling rate 48kHz */ + if ( ( error = openCldfb( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st->cldfbBPF == NULL ) + { + /* open analysis BPF for max. internal sampling rate 16kHz */ + if ( ( error = openCldfb( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + return error; +} + +/*-------------------------------------------------------------------* + * synchonize_channels_mdct_sid() + * + * Synchronize channels in SID frame in MDCT stereo + *-------------------------------------------------------------------*/ + +void synchonize_channels_mdct_sid( + Decoder_State *sts[CPE_CHANNELS], /* i/o: decoder state structure */ + const int16_t n /* i : channel number */ +) +{ + Decoder_State *st; + + st = sts[n]; + + if ( st->element_mode == IVAS_CPE_MDCT && st->total_brate == SID_2k40 ) + { + if ( n == 1 ) + { + /* synchronize channels */ + sts[1]->L_frame = sts[0]->L_frame; + sts[1]->cng_type = sts[0]->cng_type; + sts[1]->bwidth = sts[0]->bwidth; + sts[0]->hFdCngDec->hFdCngCom->coherence = sts[1]->hFdCngDec->hFdCngCom->coherence; /* coherence is stored in sts[1] - see ivas_decision_matrix_dec() */ + sts[0]->hFdCngDec->hFdCngCom->no_side_flag = sts[1]->hFdCngDec->hFdCngCom->no_side_flag; + + /* configure when there is a switching from DFT CNG to MDCT CNG */ + if ( sts[0]->first_CNG == 1 && sts[1]->first_CNG == 0 ) + { + configureFdCngDec( st->hFdCngDec, st->bwidth, st->element_brate, st->L_frame, st->last_L_frame, st->element_mode ); + } + } + + if ( sts[0]->first_CNG == 0 ) + { + /* configure CNG after reading first side info from SID to get correct values for L_frame and bwidth if first SID is also first valid frame */ + configureFdCngDec( st->hFdCngDec, st->bwidth, st->element_brate, st->L_frame, st->last_L_frame, st->element_mode ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * updateBuffersForDmxMdctStereo() + * + * synch buffers between channels for mono output and + * apply passive downmix to certain buffers to enable smooth transitions + * between active/inactive coding in MDCT-Stereo DTX + *-------------------------------------------------------------------*/ + +void updateBuffersForDmxMdctStereo( + CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ + const int16_t output_frame, /* i : output frame length */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: decoder output */ + float synth[CPE_CHANNELS][L_FRAME48k] /* i/o: decoder synthesis */ +) +{ + int16_t delay_buf_out_len, tcxltp_mem_in_len, delta, i; + Decoder_State *sts[CPE_CHANNELS]; + + sts[0] = hCPE->hCoreCoder[0]; + sts[1] = hCPE->hCoreCoder[1]; + + /* synch buffers for inactive frames, but not for transition frames */ + if ( hCPE->last_element_brate <= IVAS_SID_4k4 ) + { + mvr2r( output[0], output[1], output_frame ); + mvr2r( synth[0], synth[1], output_frame ); + } + + if ( hCPE->element_brate == IVAS_SID_4k4 && hCPE->last_element_brate > IVAS_SID_4k4 ) + { + /* in the first SID frame after an active frame, create mid noise shape here, in SID frames that follow inactive frames, it is done directly in the SID decoding since the mid shape is being used in CNG then */ + for ( int16_t p = 0; p < sts[0]->hFdCngDec->hFdCngCom->npart; p++ ) + { + sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst[p] = 0.5f * ( sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst[p] + sts[1]->hFdCngDec->hFdCngCom->sidNoiseEst[p] ); + } + } + + /* for transition of active->inactive frame, apply passive downmix on buffers */ + if ( hCPE->last_element_brate <= IVAS_SID_4k4 ) + { + delta = 1; + if ( output_frame == L_FRAME16k ) + { + delta = 2; + } + else if ( output_frame == L_FRAME32k ) + { + delta = 4; + } + else if ( output_frame == L_FRAME48k ) + { + delta = 6; + } + + delay_buf_out_len = delta * HQ_DELAY_COMP; + tcxltp_mem_in_len = NS2SA( sts[0]->output_Fs, TCXLTP_DELAY_NS ); + + assert( delay_buf_out_len > tcxltp_mem_in_len ); + + for ( i = 0; i < tcxltp_mem_in_len; i++ ) + { + sts[0]->hTcxLtpDec->tcxltp_mem_in[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_in[i] + sts[1]->hTcxLtpDec->tcxltp_mem_in[i] ); + sts[0]->delay_buf_out[i] = INV_SQRT2 * ( sts[0]->delay_buf_out[i] + sts[1]->delay_buf_out[i] ); + sts[0]->hHQ_core->old_out[i] = INV_SQRT2 * ( sts[0]->hHQ_core->old_out[i] + sts[1]->hHQ_core->old_out[i] ); + sts[0]->hTcxLtpDec->tcxltp_mem_out[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_out[i] + sts[1]->hTcxLtpDec->tcxltp_mem_out[i] ); + } + for ( ; i < delay_buf_out_len; i++ ) + { + sts[0]->delay_buf_out[i] = INV_SQRT2 * ( sts[0]->delay_buf_out[i] + sts[1]->delay_buf_out[i] ); + sts[0]->hHQ_core->old_out[i] = INV_SQRT2 * ( sts[0]->hHQ_core->old_out[i] + sts[1]->hHQ_core->old_out[i] ); + sts[0]->hTcxLtpDec->tcxltp_mem_out[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_out[i] + sts[1]->hTcxLtpDec->tcxltp_mem_out[i] ); + } + for ( ; i < output_frame; i++ ) + { + sts[0]->hHQ_core->old_out[i] = INV_SQRT2 * ( sts[0]->hHQ_core->old_out[i] + sts[1]->hHQ_core->old_out[i] ); + sts[0]->hTcxLtpDec->tcxltp_mem_out[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_out[i] + sts[1]->hTcxLtpDec->tcxltp_mem_out[i] ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * applyDmxMdctStereo() + * + * apply passive downmix to certain buffers to enable smooth transitions + * between active/inactive coding in MDCT-Stereo DTX + *-------------------------------------------------------------------*/ + +void applyDmxMdctStereo( + const CPE_DEC_HANDLE hCPE, /* i : CPE handle */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: core decoder output */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t crossfade_len, i; + int16_t dmx_len; + float fade, step; + + step = 1.f; + fade = 1.f; + dmx_len = output_frame; + + if ( hCPE->last_element_brate <= IVAS_SID_4k4 ) + { + crossfade_len = NS2SA( hCPE->hCoreCoder[0]->output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); + step /= crossfade_len; + } + /* for first inactive CNG frame after active decoding we have to do a fade-OUT FROM the passive DMX */ + else if ( hCPE->element_brate <= IVAS_SID_4k4 && hCPE->last_element_brate > IVAS_SID_4k4 ) + { + crossfade_len = output_frame / 4; + step /= -crossfade_len; + fade = 0.f; + dmx_len = crossfade_len; + } + else if ( hCPE->last_element_mode == IVAS_CPE_DFT && hCPE->last_element_brate <= IVAS_24k4 ) + { + crossfade_len = NS2SA( hCPE->hCoreCoder[0]->output_Fs, DELAY_CLDFB_NS ); + step /= crossfade_len; + } + else + { + crossfade_len = 0; + } + + /* apply crossfade */ + for ( i = 0; i < crossfade_len; i++ ) + { + output[0][i] = output[0][i] * fade + ( output[0][i] + output[1][i] ) * INV_SQRT2 * ( 1 - fade ); + fade -= step; + } + + /* apply passive downmix on all-active-frame part */ + for ( ; i < dmx_len; i++ ) + { + output[0][i] = ( output[0][i] + output[1][i] ) * INV_SQRT_2; + } + + return; +} diff --git a/lib_dec/ivas_stereo_switching_dec.c b/lib_dec/ivas_stereo_switching_dec.c new file mode 100644 index 0000000000..e4c5021dbc --- /dev/null +++ b/lib_dec/ivas_stereo_switching_dec.c @@ -0,0 +1,1835 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "wmops.h" +#include + + +/*-------------------------------------------------------------------* + * Function allocate_CoreCoder_TCX() + * + * Allocate CoreCoder TCX modules + *-------------------------------------------------------------------*/ + +static ivas_error allocate_CoreCoder_TCX( + DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ +) +{ + if ( st->hTcxDec == NULL ) + { + if ( ( st->hTcxDec = (TCX_DEC_HANDLE) count_malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for hTcxDec" ) ); + } + + reset_tcx_overl_buf( st->hTcxDec ); + + set_zero( st->hTcxDec->syn_OverlFB, L_FRAME48k / 2 ); + set_zero( st->hTcxDec->old_synth, OLD_SYNTH_INTERNAL_DEC ); + set_zero( st->hTcxDec->synth_history, L_PROT48k + L_FRAME48k ); + } + + if ( st->hTcxCfg == NULL ) + { + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for hTcxCfg" ) ); + } + } + + /* allocated TCX-LTP structure for second channel */ + if ( st->hTcxLtpDec == NULL ) + { + if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for TCX-LTP handle\n" ) ); + } + + tcxltp_dec_init( st->hTcxLtpDec, 0, st->last_codec_mode, st->element_mode, st->pit_max, st->sr_core ); + } + + /* allocate HQ structure */ + if ( st->hHQ_core == NULL ) + { + if ( ( st->hHQ_core = (HQ_DEC_HANDLE) count_malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for HQ core\n" ) ); + } + + HQ_core_dec_init( st->hHQ_core ); + } + + if ( st->hIGFDec == NULL ) + { + if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) count_malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IGF\n" ) ); + } + + st->igf = 0; + init_igf_dec( st->hIGFDec ); + } + + if ( st->hTonalMDCTConc == NULL ) + { + if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) count_malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for TonalMDCTConcealment\n" ) ); + } + } + + st->last_con_tcx = 0; + st->hTonalMDCTConc->nSamples = 0; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * Function allocate_CoreCoder() + * + * Allocate CoreCoder modules + *-------------------------------------------------------------------*/ + +static ivas_error allocate_CoreCoder( + DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + + if ( st->hGSCDec == NULL ) + { + if ( ( st->hGSCDec = (GSC_DEC_HANDLE) count_malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); + } + + GSC_dec_init( st->hGSCDec ); + } + + if ( st->hPFstat == NULL ) + { + if ( ( st->hPFstat = (PFSTAT_HANDLE) count_malloc( sizeof( PFSTAT ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); + } + + Init_post_filter( st->hPFstat ); + st->psf_lp_noise = 0.0f; + } + + if ( st->hMusicPF == NULL ) + { + if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) count_malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); + } + + music_postfilt_init( st->hMusicPF ); + } + + if ( st->hBPF == NULL ) + { + if ( ( st->hBPF = (BPF_DEC_HANDLE) count_malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) ); + } + + bass_psfilter_init( st->hBPF ); + } + + if ( st->hBWE_zero == NULL ) + { + if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) count_malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) ); + } + + hf_synth_init( st->hBWE_zero ); + } + + if ( st->cldfbAna == NULL ) + { + /* open analysis for max. sampling rate 48kHz */ + if ( ( error = openCldfb( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st->cldfbBPF == NULL ) + { + /* open analysis BPF for max. internal sampling rate 16kHz */ + if ( ( error = openCldfb( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + return error; +} + + +/*-------------------------------------------------------------------* + * Function deallocate_CoreCoder_TCX() + * + * Deallocate CoreCoder TCX modules + *-------------------------------------------------------------------*/ + +static void deallocate_CoreCoder_TCX( + DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ +) +{ + if ( st->hTcxDec != NULL ) + { + count_free( st->hTcxDec ); + st->hTcxDec = NULL; + } + + if ( st->hTcxCfg != NULL ) + { + count_free( st->hTcxCfg ); + st->hTcxCfg = NULL; + } + + if ( st->hIGFDec != NULL ) + { + count_free( st->hIGFDec ); + st->hIGFDec = NULL; + } + + if ( st->hTonalMDCTConc != NULL ) + { + count_free( st->hTonalMDCTConc ); + st->hTonalMDCTConc = NULL; + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function deallocate_CoreCoder() + * + * Deallocate CoreCoder modules + *-------------------------------------------------------------------*/ + +static void deallocate_CoreCoder( + DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ +) +{ + if ( st->hGSCDec != NULL ) + { + count_free( st->hGSCDec ); + st->hGSCDec = NULL; + } + + if ( st->hPFstat != NULL ) + { + count_free( st->hPFstat ); + st->hPFstat = NULL; + } + + if ( st->hMusicPF != NULL ) + { + count_free( st->hMusicPF ); + st->hMusicPF = NULL; + } + + if ( st->hBPF != NULL ) + { + count_free( st->hBPF ); + st->hBPF = NULL; + } + + if ( st->hBWE_zero != NULL ) + { + count_free( st->hBWE_zero ); + st->hBWE_zero = NULL; + } + + /* CLDFB BPF & resampling tools */ + if ( st->element_mode != IVAS_CPE_MDCT ) + { + deleteCldfb( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */ + deleteCldfb( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */ + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + deallocate_CoreCoder_TCX( st ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function cpy_tcx_ltp_data() + * + * In case of MDCT<->DFT Stereo switching, copy TCX-LTP data of the right + * channel to the correct structure in the new mode + *-------------------------------------------------------------------*/ + +static void cpy_tcx_ltp_data( + TCX_LTP_DEC_HANDLE hTcxLtpDecOld, /* i : TCX-LTP structure to copy from */ + TCX_LTP_DEC_HANDLE hTcxLtpDecNew, /* o : TCX-LTP structure to copy to */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + hTcxLtpDecNew->tcxltp_pitch_int_post_prev = hTcxLtpDecOld->tcxltp_pitch_int_post_prev; + hTcxLtpDecNew->tcxltp_pitch_fr_post_prev = hTcxLtpDecOld->tcxltp_pitch_fr_post_prev; + hTcxLtpDecNew->tcxltp_gain_post_prev = hTcxLtpDecOld->tcxltp_gain_post_prev; + hTcxLtpDecNew->tcxltp_filt_idx_prev = hTcxLtpDecOld->tcxltp_filt_idx_prev; + + mvr2r( hTcxLtpDecOld->tcxltp_mem_in, hTcxLtpDecNew->tcxltp_mem_in, (int16_t) ( ( TCXLTP_MAX_DELAY * output_Fs ) / 48000 ) ); + mvr2r( hTcxLtpDecOld->tcxltp_mem_out, hTcxLtpDecNew->tcxltp_mem_out, (int16_t) ( ( L_FRAME48k * output_Fs ) / 48000 ) ); + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_memory_dec() + * + * Dynamically allocate/deallocate data structures depending on the actual CPE mode + *-------------------------------------------------------------------*/ + +ivas_error stereo_memory_dec( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + CPE_DEC_HANDLE hCPE, /* i : CPE decoder structure */ + const int16_t nb_bits_metadata, /* i : number of metadata bits */ + const int32_t output_Fs, /* i : output sampling rate */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int16_t nchan_transport /* i : number of transport channels*/ +) +{ + DEC_CORE_HANDLE st; + int16_t i, n, delay_comp_DFT; + ivas_error error; + + error = IVAS_ERR_OK; + + hCPE->hCoreCoder[0]->element_mode = hCPE->element_mode; + hCPE->hCoreCoder[1]->element_mode = hCPE->element_mode; + + /*--------------------------------------------------------------* + * stereo switching (using parameters that will be freed) + *---------------------------------------------------------------*/ + + /* handling of DFT->TD switching */ + if ( hCPE->last_element_mode == IVAS_CPE_DFT && ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_MDCT ) ) + { + delay_comp_DFT = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ); + + /* redressing of the DFT OLA part */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + for ( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) + { + hCPE->output_mem[n][i - delay_comp_DFT] /= hCPE->hStereoDft->win32ms[STEREO_DFT32MS_STEP * ( hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i )]; + } + } + + if ( hCPE->hCoreCoder[0]->last_core != ACELP_CORE ) + { + mvr2r( hCPE->hStereoDft->buff_LBTCX_mem, hCPE->input_mem_LB[0], NS2SA( hCPE->hCoreCoder[0]->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + } + } + + if ( hCPE->last_element_mode == IVAS_CPE_MDCT && hCPE->element_mode == IVAS_CPE_DFT ) + { + v_add( hCPE->hCoreCoder[0]->hHQ_core->old_out, hCPE->hCoreCoder[1]->hHQ_core->old_out, hCPE->hCoreCoder[0]->hHQ_core->old_out, (int16_t) ( output_Fs / FRAMES_PER_SEC ) ); + v_multc( hCPE->hCoreCoder[0]->hHQ_core->old_out, 0.5f, hCPE->hCoreCoder[0]->hHQ_core->old_out, (int16_t) ( output_Fs / FRAMES_PER_SEC ) ); + + v_add( hCPE->hCoreCoder[0]->hHQ_core->old_outLB, hCPE->hCoreCoder[1]->hHQ_core->old_outLB, hCPE->hCoreCoder[0]->hHQ_core->old_outLB, L_FRAME32k ); + v_multc( hCPE->hCoreCoder[0]->hHQ_core->old_outLB, 0.5f, hCPE->hCoreCoder[0]->hHQ_core->old_outLB, L_FRAME32k ); + } + + /*--------------------------------------------------------------* + * allocate/deallocate data structures + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode != hCPE->last_element_mode ) + { + /*--------------------------------------------------------------* + * switching CPE mode to DFT stereo + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + /* deallocate data structure of the previous CPE mode */ + if ( hCPE->hStereoTD != NULL ) + { + count_free( hCPE->hStereoTD ); + hCPE->hStereoTD = NULL; + } + + if ( hCPE->hStereoMdct != NULL ) + { + count_free( hCPE->hStereoMdct ); + hCPE->hStereoMdct = NULL; + } + + /* deallocate secondary channel */ + deallocate_CoreCoder( hCPE->hCoreCoder[1] ); + + /* allocate DFT stereo data structure */ + if ( ( error = stereo_dft_dec_create( &( hCPE->hStereoDft ), hCPE->element_brate, output_Fs, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + cpy_tcx_ltp_data( hCPE->hCoreCoder[1]->hTcxLtpDec, hCPE->hStereoDft->hTcxLtpDec, output_Fs ); +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + deleteFdCngDec( &hCPE->hCoreCoder[1]->hFdCngDec ); +#endif + } + + /* memory update - needed in TD stereo, TCX/HQ frame -> DFT stereo, ACELP frame switching */ + mvr2r( hCPE->input_mem_LB[0], hCPE->hStereoDft->buff_LBTCX_mem, NS2SA( min( hCPE->hCoreCoder[0]->last_L_frame * FRAMES_PER_SEC, 16000 ), STEREO_DFT32MS_OVL_NS ) ); + + /* allocate ICBWE structure */ + if ( hCPE->hStereoICBWE == NULL ) + { + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); + } + + stereo_icBWE_init_dec( hCPE->hStereoICBWE ); + } + + /* allocate HQ core */ + st = hCPE->hCoreCoder[0]; + if ( st->hHQ_core == NULL ) + { + if ( ( st->hHQ_core = (HQ_DEC_HANDLE) count_malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); + } + + HQ_core_dec_init( st->hHQ_core ); + } + + /* allocate TD CNG handle */ + if ( st->idchan == 0 && st->hTdCngDec == NULL ) + { + if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); + } + + td_cng_dec_init( st ); + } + } + + /*--------------------------------------------------------------* + * switching CPE mode to TD stereo + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + /* deallocate data structure of the previous CPE mode */ + if ( hCPE->hStereoDft != NULL ) + { + stereo_dft_dec_destroy( &( hCPE->hStereoDft ) ); + hCPE->hStereoDft = NULL; + } + + if ( hCPE->hStereoMdct != NULL ) + { + count_free( hCPE->hStereoMdct ); + hCPE->hStereoMdct = NULL; + } + + /* deallocated TCX/IGF structures for second channel */ + deallocate_CoreCoder_TCX( hCPE->hCoreCoder[1] ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + deleteFdCngDec( &hCPE->hCoreCoder[1]->hFdCngDec ); + } +#endif + + /* allocate TD stereo data structure */ + if ( hCPE->hStereoTD != NULL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TD Stereo memory already allocated\n" ); + } + + if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); + } + + stereo_td_init_dec( hCPE->hStereoTD, hCPE->last_element_mode ); + + /* allocate CoreCoder secondary channel */ + if ( ( error = allocate_CoreCoder( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*--------------------------------------------------------------* + * allocate DFT/TD stereo structures after MDCT stereo frame + *---------------------------------------------------------------*/ + + if ( hCPE->last_element_mode == IVAS_CPE_MDCT && ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) ) + { + /* deallocated TCX-LTP for second channel */ + st = hCPE->hCoreCoder[1]; + if ( st->hTcxLtpDec != 0 ) + { + count_free( st->hTcxLtpDec ); + st->hTcxLtpDec = NULL; + } + + if ( st->element_mode == IVAS_CPE_TD ) + { + /* re-use an existing buffer for MDCT->TD stereo switching */ + int16_t nZeros, len; + nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); + len = NS2SA( st->output_Fs, 3000000 ); + mvr2r( st->hHQ_core->old_out + nZeros, hCPE->output_mem[1], len ); + } + + /* deallocated HQ-core for second channel */ + if ( st->hHQ_core != 0 ) + { + count_free( st->hHQ_core ); + st->hHQ_core = NULL; + } + + /* allocate DFT stereo mono DMX data structure */ + if ( hCPE->nchan_out == 1 && hCPE->hStereoDftDmx == NULL ) + { + if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); + } + stereo_dft_dmx_out_reset( hCPE->hStereoDftDmx ); + } + + /* allocate TCA data structure */ + if ( hCPE->nchan_out != 1 && hCPE->hStereoTCA == NULL ) + { + if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) count_malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); + } + + stereo_tca_init_dec( hCPE->hStereoTCA ); + } + + st = hCPE->hCoreCoder[0]; + + /* allocate primary channel substructures */ + if ( ( error = allocate_CoreCoder( st ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* allocate BWEs for primary channel */ + if ( st->hBWE_TD == NULL ) + { + if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) count_malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); + } + + td_bwe_dec_init( st->hBWE_TD, -1, st->output_Fs ); + + if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) count_malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); + } + + fd_bwe_dec_init( st->hBWE_FD ); + } + + /* Allocated FD_CNG instance for primary channel*/ + if ( st->hFdCngDec == NULL ) + { + /* Create FD_CNG instance */ + if ( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) + { + return error; + } + initFdCngDec( st ); + configureFdCngDec( st->hFdCngDec, st->bwidth, st->total_brate, st->L_frame, st->last_L_frame, st->element_mode ); + } + + /* allocate stereo CNG structure */ + if ( hCPE->hStereoCng == NULL ) + { + if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) count_malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo CNG\n" ) ); + } + stereo_cng_init_dec( hCPE->hStereoCng, &st->hFdCngDec->hFdCngCom->frameSize ); + } + } + + /*--------------------------------------------------------------* + * switching CPE mode to MDCT stereo + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + float tmpF_buff[L_FRAME16k / 2]; + TCX_LTP_DEC_DATA tcxLtpTmp; + + if ( hCPE->last_element_mode == IVAS_CPE_TD ) + { + mvr2r( hCPE->hStereoTD->TCX_old_syn_Overl, tmpF_buff, L_FRAME16k / 2 ); + } + + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + cpy_tcx_ltp_data( hCPE->hStereoDft->hTcxLtpDec, &tcxLtpTmp, output_Fs ); + } + + /* deallocate data structure of the previous CPE mode */ + if ( hCPE->hStereoDft != NULL ) + { + stereo_dft_dec_destroy( &( hCPE->hStereoDft ) ); + hCPE->hStereoDft = NULL; + } + + if ( hCPE->hStereoTD != NULL ) + { + count_free( hCPE->hStereoTD ); + hCPE->hStereoTD = NULL; + } + + if ( hCPE->hStereoDftDmx != NULL ) + { + count_free( hCPE->hStereoDftDmx ); + hCPE->hStereoDftDmx = NULL; + } + + if ( hCPE->hStereoICBWE != NULL ) + { + count_free( hCPE->hStereoICBWE ); + hCPE->hStereoICBWE = NULL; + } + + /* de-allocate stereo CNG structure */ + if ( hCPE->hStereoCng != NULL ) + { + count_free( hCPE->hStereoCng ); + hCPE->hStereoCng = NULL; + } + + for ( i = 0; i < CPE_CHANNELS; i++ ) + { + st = hCPE->hCoreCoder[i]; + st->element_mode = hCPE->element_mode; + + /* deallocate core-decoder substructures */ + deallocate_CoreCoder( st ); + +#ifndef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + /* deallocate FD_CNG substructure */ + deleteFdCngDec( &st->hFdCngDec ); +#endif + st->first_CNG = 0; + } + + /* allocate CLDFB structures for second channel */ + st = hCPE->hCoreCoder[1]; + + if ( st->cldfbAna == NULL ) + { + if ( ( error = openCldfb( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( st->cldfbBPF == NULL ) + { + /* open analysis BPF for max. internal sampling rate 16kHz */ + if ( ( error = openCldfb( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + /* allocate Fd-Cng structure for second channel */ + if ( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Init FD-CNG */ + initFdCngDec( st ); +#endif + + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + st->last_core = ACELP_CORE; /* needed to set-up TCX core in SetTCXModeInfo() */ + } + + /*Allocate CoreCoder TCX modules for second channel */ + if ( ( error = allocate_CoreCoder_TCX( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + cpy_tcx_ltp_data( &tcxLtpTmp, hCPE->hCoreCoder[1]->hTcxLtpDec, output_Fs ); + } + + if ( hCPE->last_element_mode == IVAS_CPE_TD ) + { + mvr2r( tmpF_buff, st->hTcxDec->old_syn_Overl, L_FRAME16k / 2 ); + } + + set_f( st->hTcxDec->FBTCXdelayBuf, 0.0f, 111 ); + st->hTcxDec->old_synthFB = st->hTcxDec->synth_history + NS2SA( st->output_Fs, PH_ECU_MEM_NS ); + st->hTcxDec->prev_good_synth = st->hTcxDec->old_synthFB + NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ); + + /* allocate and initialize MDCT stereo structure */ + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + if ( ivas_format == STEREO_FORMAT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE ) + { + hCPE->hStereoMdct->use_itd = 1; + } + else + { + hCPE->hStereoMdct->use_itd = 0; + } + hCPE->hStereoMdct->reverse_dmx = 0; + hCPE->hStereoMdct->smooth_ratio = 1.f; + } + } + + /*--------------------------------------------------------------* + * normal TD / LRTD switching + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + if ( hCPE->hCoreCoder[0]->bfi == 0 ) + { + st = hCPE->hCoreCoder[1]; + hCPE->hStereoTD->tdm_LRTD_flag = get_indice_st( hCPE->hCoreCoder[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS - TDM_LP_REUSE_BITS - TDM_LR_CONTENT_BITS ), TDM_LR_CONTENT_BITS ); + + if ( hCPE->hStereoTD->tdm_LRTD_flag ) + { + /* deallocate ICBWE structure */ + if ( hCPE->hStereoICBWE != NULL ) + { + count_free( hCPE->hStereoICBWE ); + hCPE->hStereoICBWE = NULL; + } + + /* allocate BWEs for secondary channel */ + if ( st->hBWE_TD == NULL ) + { + if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) count_malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); + } + + td_bwe_dec_init( st->hBWE_TD, -1, st->output_Fs ); + + if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) count_malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); + } + + fd_bwe_dec_init( st->hBWE_FD ); + } + } + else /* tdm_LRTD_flag == 0 */ + { + /* deallocate BWEs for secondary channel */ + if ( st->hBWE_TD != NULL ) + { + if ( st->hBWE_TD != NULL ) + { + count_free( st->hBWE_TD ); + st->hBWE_TD = NULL; + } + + if ( st->hBWE_FD != NULL ) + { + count_free( st->hBWE_FD ); + st->hBWE_FD = NULL; + } + } + + /* allocate ICBWE structure */ + if ( hCPE->hStereoICBWE == NULL ) + { + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); + } + + stereo_icBWE_init_dec( hCPE->hStereoICBWE ); + } + } + } + } + + /*--------------------------------------------------------------* + * MDCT stereo bitrate switching + *---------------------------------------------------------------*/ + + if ( ivas_format == STEREO_FORMAT && hCPE->element_mode == IVAS_CPE_MDCT ) + { + if ( hCPE->element_brate <= MAX_MDCT_ITD_BRATE && ivas_total_brate > IVAS_SID_4k4 ) + { + if ( hCPE->hStereoMdct->use_itd == 0 ) + { + if ( hCPE->hStereoTCA == NULL ) + { + /* allocate TCA data structure */ + if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) count_malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); + } + } + stereo_tca_init_dec( hCPE->hStereoTCA ); + } + + hCPE->hStereoMdct->use_itd = 1; + } + else + { + /* de-allocate TCA data structure */ + if ( hCPE->hStereoMdct->use_itd == 1 && ivas_total_brate > IVAS_SID_4k4 && hCPE->hStereoTCA != NULL ) + { + count_free( hCPE->hStereoTCA ); + hCPE->hStereoTCA = NULL; + hCPE->hStereoMdct->use_itd = 0; + } + else if ( hCPE->hStereoMdct->use_itd == 1 && ivas_total_brate <= IVAS_SID_4k4 ) + { + hCPE->hStereoMdct->itd = 0.0f; + } + else + { + hCPE->hStereoMdct->use_itd = 0; + } + } + } + + /*--------------------------------------------------------------* + * Bitrate switching in MASA format + *---------------------------------------------------------------*/ + + if ( ivas_format == MASA_FORMAT && nchan_transport == 2 ) + { + if ( hCPE->nchan_out == 1 ) + { + if ( hCPE->hStereoDftDmx == NULL ) + { + if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); + } + stereo_dft_dmx_out_reset( hCPE->hStereoDftDmx ); + } + + if ( hCPE->prev_synth_chs[1] != NULL ) + { + count_free( hCPE->prev_synth_chs[1] ); + hCPE->prev_synth_chs[1] = NULL; + } + } + else /* nchan_out == 2 */ + { + if ( hCPE->hStereoDftDmx != NULL ) + { + count_free( hCPE->hStereoDftDmx ); + hCPE->hStereoDftDmx = NULL; + } + + if ( hCPE->prev_synth_chs[1] == NULL ) + { + st = hCPE->hCoreCoder[1]; + if ( ( hCPE->prev_synth_chs[1] = (float *) count_malloc( sizeof( float ) * NS2SA( st->output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } + set_zero( hCPE->prev_synth_chs[1], NS2SA( st->output_Fs, FRAME_SIZE_NS ) ); + } + } + } + + return error; +} + + +/*-------------------------------------------------------------------* + * Function synchro_synthesis() + * + * Synchronize upmixed DFT/TD/MDCT stereo synthesis to match the overall delay of 32ms + * Handling of TD stereo <-> DFT stereo transitions + *-------------------------------------------------------------------*/ + +void synchro_synthesis( + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: output synthesis signal */ + const int16_t output_frame, /* i : Number of samples */ + const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ +) +{ + int16_t n, delay_comp_TD, delay_comp_DFT; + int32_t output_Fs; + Decoder_State **sts; + int16_t i, delay_cldfb, dft32ms_ovl; + float *p_output_mem[CPE_CHANNELS]; + float tmp_out[CPE_CHANNELS][NS2SA( 48000, DELAY_CLDFB_NS )]; + float tmp_out_TD[CPE_CHANNELS][STEREO_DFT32MS_OVL_MAX]; + float tmp_out_TD2[CPE_CHANNELS][STEREO_DFT32MS_OVL_MAX]; + int16_t use_cldfb_for_last_dft; + int16_t dft_mono_brate_switch; + int16_t delay_diff; + float tmpF; + + sts = hCPE->hCoreCoder; + output_Fs = sts[0]->output_Fs; + + use_cldfb_for_last_dft = 0; + if ( ( hCPE->element_mode != IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->last_element_brate <= IVAS_24k4 ) /* note: this is to mimic the DFT stereo condition "hCPE->hStereoDft->hConfig->res_cod_mode == 0" in last frame */ + || ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) + { + use_cldfb_for_last_dft = 1; + } + + dft_mono_brate_switch = 0; + if ( hCPE->element_mode == IVAS_CPE_DFT && ( hCPE->last_element_mode == IVAS_CPE_DFT || hCPE->last_element_mode == IVAS_CPE_MDCT ) && hCPE->nchan_out == 1 && hCPE->element_brate != hCPE->last_element_brate ) + { + if ( hCPE->last_element_brate >= IVAS_32k && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + dft_mono_brate_switch = -1; /* switch from residual coding mode or MDCT Stereo */ + } + else if ( hCPE->last_element_brate <= IVAS_24k4 && hCPE->hStereoDft->hConfig->res_cod_mode > STEREO_DFT_RES_COD_OFF ) + { + dft_mono_brate_switch = 1; /* switch to residual coding mode*/ + } + } + + if ( use_cldfb_for_last_dft ) + { + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_TD && ( ivas_total_brate > IVAS_SID_4k4 || hCPE->nchan_out == 2 ) ) + { + stereo_tca_scale_R_channel( hCPE, output[0], output_frame ); + } + } + + /* set delays */ + delay_comp_DFT = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ); + delay_comp_TD = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); + delay_diff = delay_comp_TD - delay_comp_DFT; + + dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * output_Fs ) / 48000 ); + delay_cldfb = NS2SA( output_Fs, DELAY_CLDFB_NS ); + + /* initialize pointers */ + if ( hCPE->element_mode >= IVAS_CPE_DFT && hCPE->output_mem[0] != NULL ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + p_output_mem[n] = hCPE->output_mem[n]; + } + } + + /*----------------------------------------------------------------* + * DFT stereo synchro + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT || sba_dirac_stereo_flag ) + { + /* handling of bitrate switching from residual (using DFT) to non-residual mode (using CLDFB) for mono output - as in DFT->TD switching */ + if ( dft_mono_brate_switch == -1 ) + { + for ( i = delay_comp_DFT; i < delay_comp_TD; i++ ) + { + sts[0]->prev_synth_buffer[i] = p_output_mem[0][i - delay_comp_DFT]; + } + + for ( i = delay_comp_TD; i < delay_comp_TD + delay_cldfb; i++ ) + { + tmp_out[0][i - delay_comp_TD] = p_output_mem[0][i - delay_comp_DFT]; + } + } + + if ( use_cldfb_for_last_dft ) + { + /* delay CLDFB-based mono output (<= 24.4 kbps) to be aligned with DFT-based mono output (32 kbps), needed to avoid discontinuities with TCX-LTP. */ + mvr2r( sts[0]->prev_synth_buffer + delay_comp_DFT, hCPE->hCoreCoder[0]->hTcxDec->FBTCXdelayBuf, delay_diff ); + delay_signal( output[0], output_frame, hCPE->hCoreCoder[0]->hTcxDec->FBTCXdelayBuf, delay_diff ); + } + + ivas_post_proc( NULL, hCPE, 0, output[0], output, output_frame, sba_dirac_stereo_flag ); + + /* zero padding in order to synchronize the upmixed DFT stereo synthesis with the TD/MDCT stereo synthesis */ + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + if ( sba_dirac_stereo_flag ) + { + delay_signal( output[n], output_frame, hCPE->prev_synth[n], delay_comp_DFT ); + } + else + { + delay_signal( output[n], output_frame, sts[n]->prev_synth_buffer, delay_comp_DFT ); + } + } + + if ( use_cldfb_for_last_dft ) + { + mvr2r( hCPE->hCoreCoder[0]->hTcxDec->FBTCXdelayBuf, sts[0]->prev_synth_buffer + delay_comp_DFT, delay_diff ); + } + + /* handling of TD->DFT switching */ + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + if ( ( hCPE->last_element_mode != IVAS_CPE_DFT && !sba_dirac_stereo_flag && dft_mono_brate_switch != -1 ) || dft_mono_brate_switch == 1 ) + { + float *pPrev_synth; + float inv_fade_len = 1.f / delay_diff; + + /* cross-fading between TD synchro memory and the DFT output */ + if ( sba_dirac_stereo_flag ) + { + pPrev_synth = hCPE->prev_synth[n]; + } + else + { + pPrev_synth = sts[n]->prev_synth_buffer; + } + + if ( hCPE->last_element_mode != IVAS_CPE_MDCT ) + { + for ( i = delay_comp_DFT; i < delay_comp_TD; i++ ) + { + output[n][i] = ( pPrev_synth[i] * ( delay_comp_TD - i ) + output[n][i] * ( i - delay_comp_DFT ) ) * inv_fade_len; + } + } + } + else if ( dft_mono_brate_switch == -1 ) + { + float inv_fade_len_1 = 1.0f / (float) delay_diff; + float inv_fade_len_2 = 1.0f / (float) delay_cldfb; + + for ( i = 0; i < delay_diff; i++ ) + { + output[0][i + delay_comp_DFT] = ( output[0][i + delay_comp_DFT] * ( delay_diff - i ) + p_output_mem[0][i] * i ) * inv_fade_len_1; + } + + for ( i = 0; i < delay_cldfb; i++ ) + { + output[0][i + delay_comp_TD] = ( tmp_out[0][i] * ( delay_cldfb - i ) + output[0][i + delay_comp_TD] * i ) * inv_fade_len_2; + } + } + } + } + + /*----------------------------------------------------------------* + * TD/MDCT stereo synchro + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_MDCT ) + { + /* handling of DFT->TD switching */ + if ( hCPE->last_element_mode == IVAS_CPE_DFT && !use_cldfb_for_last_dft && hCPE->output_mem[0] != NULL ) + { + /* use redressed DFT stereo OLA part to reconstruct the TD stereo synchro memory */ + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + for ( i = delay_comp_DFT; i < delay_comp_TD; i++ ) + { + sts[n]->prev_synth_buffer[i] = p_output_mem[n][i - delay_comp_DFT]; + } + + for ( i = delay_comp_TD; i < delay_comp_TD + delay_cldfb; i++ ) + { + tmp_out[n][i - delay_comp_TD] = p_output_mem[n][i - delay_comp_DFT]; + } + } + } + + /*----------------------------------------------------------------* + * update DFT synthesis overlap memory @output_Fs; needed for TD->DFT stereo switching + *----------------------------------------------------------------*/ + + /* resample LB synthesis to output_Fs */ + if ( hCPE->element_mode != IVAS_CPE_MDCT && !use_cldfb_for_last_dft ) + { + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + if ( sts[n]->core == ACELP_CORE ) + { + lerp( hCPE->input_mem_LB[n], tmp_out_TD[n], dft32ms_ovl, NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + } + else /* TCX/HQ core */ + { + lerp( hCPE->input_mem_LB[n], tmp_out_TD[n], dft32ms_ovl, NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); + + /* use TCX synchro memory (perfect signal is available) */ + for ( i = delay_diff; i < dft32ms_ovl; i++ ) + { + tmp_out_TD[n][i] = sts[n]->delay_buf_out[i - delay_diff]; + } + } + } + + if ( hCPE->nchan_out == CPE_CHANNELS ) + { + /* upmix the resampled LB / the TCX synchro memory */ + tdm_upmix_plain( tmp_out_TD2[0], tmp_out_TD2[1], tmp_out_TD[0], tmp_out_TD[1], tdm_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx], tdm_den_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx], 0, dft32ms_ovl, 1 ); + } + else + { + mvr2r( tmp_out_TD[0], tmp_out_TD2[0], dft32ms_ovl ); + } + + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + if ( sts[0]->core == ACELP_CORE ) /* ACELP core in primary channel */ + { + tmpF = 1.0f / (float) delay_diff; + + /* cross-fading between regular output synthesis and lerp() resampled synthesis in 3.125 - 1.25 ms OLA part */ + for ( i = 0; i < delay_diff; i++ ) + { + p_output_mem[n][i] = ( output[n][output_frame - dft32ms_ovl + delay_cldfb + i] * ( delay_diff - i ) + tmp_out_TD2[n][i] * i ) * tmpF; + } + } + else /* TCX core */ + { + /* reconstruct the 3.125 - 1.25 ms OLA part */ + for ( i = 0; i < delay_diff; i++ ) + { + p_output_mem[n][i] = output[n][output_frame - dft32ms_ovl + delay_cldfb + i]; + } + } + + /* reconstruct the last 1.25 ms part of OLA window */ + for ( i = delay_diff; i < dft32ms_ovl; i++ ) + { + p_output_mem[n][i] = tmp_out_TD2[n][i]; + } + } + } + + /*----------------------------------------------------------------* + * zero padding TD/MDCT synthesis in order to synchronize + * the upmixed TD/MDCT stereo synthesis with the DFT stereo synthesis + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->stereo_switching_counter == 0 && hCPE->nchan_out == 1 && hCPE->last_element_brate <= IVAS_24k4 ) + { + float step; + tmpF = 1.0f; + step = 0.5f / delay_comp_TD; + + /* for the first switching frame from DFT to TD, downmix memory too */ + for ( n = 0; n < delay_comp_TD; n++ ) + { + sts[0]->prev_synth_buffer[n] = ( sts[0]->prev_synth_buffer[n] ) * tmpF; + tmpF -= step; + } + } + + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + mvr2r( sts[n]->prev_synth_buffer + delay_comp_DFT, hCPE->hCoreCoder[n]->hTcxDec->FBTCXdelayBuf, delay_diff ); + delay_signal( output[n], output_frame, hCPE->hCoreCoder[n]->hTcxDec->FBTCXdelayBuf, delay_diff ); + ivas_post_proc( NULL, hCPE, n, output[n], output, output_frame, 0 ); + delay_signal( output[n], output_frame, sts[n]->prev_synth_buffer, delay_comp_DFT ); + mvr2r( hCPE->hCoreCoder[n]->hTcxDec->FBTCXdelayBuf, sts[n]->prev_synth_buffer + delay_comp_DFT, delay_diff ); + } + else + { + delay_signal( output[n], output_frame, sts[n]->prev_synth_buffer, delay_comp_TD ); + } + } + + /* handling of DFT->TD switching */ + if ( hCPE->last_element_mode == IVAS_CPE_DFT && !use_cldfb_for_last_dft ) + { + if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hStereoCng->prev_sid_nodata ) + { + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + tmpF = 1.0f / (float) delay_cldfb; + + for ( i = 0; i < delay_cldfb; i++ ) + { + tmp_out[n][i] = tmp_out[n][i] * ( delay_cldfb - i ) * tmpF; + } + } + } + + /* cross-fading between DFT OLA memory and TD output */ + for ( n = 0; n < hCPE->nchan_out; n++ ) + { + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + tmpF = 1.0f / (float) delay_diff; + + for ( i = 0; i < delay_diff; i++ ) + { + output[n][i + delay_comp_DFT] = ( output[n][i + delay_comp_DFT] * ( delay_diff - i ) + p_output_mem[n][i] * i ) * tmpF; + } + } + + tmpF = 1.0f / (float) delay_cldfb; + + for ( i = 0; i < delay_cldfb; i++ ) + { + output[n][i + delay_comp_TD] = ( tmp_out[n][i] * ( delay_cldfb - i ) + output[n][i + delay_comp_TD] * i ) * tmpF; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_switching_dec() + * + * Handling of memories in case of CPE modes switching + *-------------------------------------------------------------------*/ + +void stereo_switching_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + int16_t i, n; + int16_t dft32ms_ovl; + Decoder_State **sts; + float tmpF; + int16_t delay_comp_TD; + + sts = hCPE->hCoreCoder; + + delay_comp_TD = NS2SA( sts[0]->output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); + + /* prevent CPE mode switching in the first received frame */ + if ( sts[0]->ini_frame == 0 ) + { + hCPE->last_element_mode = hCPE->element_mode; + hCPE->stereo_switching_counter = 10; + hCPE->NbFrameMod = 7; + hCPE->lt_es_em = 0.0f; + } + + if ( hCPE->element_mode == hCPE->last_element_mode ) + { + hCPE->stereo_switching_counter++; + hCPE->stereo_switching_counter = min( 10, hCPE->stereo_switching_counter ); + } + else + { + hCPE->stereo_switching_counter = 0; + } + + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->element_brate >= IVAS_32k && hCPE->last_element_brate <= IVAS_24k4 ) + { + dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * sts[0]->output_Fs ) / 48000 ); + set_zero( hCPE->output_mem[0], dft32ms_ovl ); + } + + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode != IVAS_CPE_DFT && hCPE->hCoreCoder[0]->ini_frame > 0 ) + { + /* windowing the OLA memory */ + dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * sts[0]->output_Fs ) / 48000 ); + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + /* copy memories from previous MDCT Stereo frame to output_mem */ + mvr2r( hCPE->input_mem[n], hCPE->output_mem[n], dft32ms_ovl ); + } + + if ( ivas_total_brate > IVAS_SID_4k4 || n == 0 || hCPE->last_element_mode != IVAS_CPE_TD || hCPE->nchan_out == 1 ) + { + for ( i = 0; i < dft32ms_ovl; i++ ) + { + hCPE->output_mem[n][i] *= hCPE->hStereoDft->win32ms[STEREO_DFT32MS_STEP * ( dft32ms_ovl - 1 - i )]; + } + } + else + { + tmpF = 1.0f / hCPE->hStereoTCA->prevTargetGain; + for ( i = 0; i < dft32ms_ovl; i++ ) + { + hCPE->output_mem[n][i] *= tmpF * hCPE->hStereoDft->win32ms[STEREO_DFT32MS_STEP * ( dft32ms_ovl - 1 - i )]; + } + for ( i = 0; i < delay_comp_TD; i++ ) + { + hCPE->hCoreCoder[1]->prev_synth_buffer[i] *= tmpF; + } + for ( i = 0; i < L_DEC_MEM_LEN_ICA; i++ ) + { + hCPE->hStereoTCA->memChanR[i] *= tmpF; + } + } + } + + if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + /* create passive downmix of MDCT Stereo memories for DFT input memory */ + v_add( hCPE->input_mem_LB[0], hCPE->input_mem_LB[1], hCPE->input_mem_LB[0], STEREO_DFT32MS_OVL_16k ); + v_multc( hCPE->input_mem_LB[0], 0.5f, hCPE->input_mem_LB[0], STEREO_DFT32MS_OVL_16k ); + + v_add( hCPE->input_mem[0], hCPE->input_mem[1], hCPE->input_mem[0], dft32ms_ovl ); + v_multc( hCPE->input_mem[0], 0.5f, hCPE->input_mem[0], dft32ms_ovl ); + + if ( hCPE->nchan_out == 1 ) + { + v_add( hCPE->output_mem[0], hCPE->output_mem[1], hCPE->output_mem[0], dft32ms_ovl ); + v_multc( hCPE->output_mem[0], INV_SQRT_2, hCPE->output_mem[0], dft32ms_ovl ); + } + } + + /* Update the side_gain[] parameters */ + if ( hCPE->last_element_mode != IVAS_CPE_MDCT ) + { + tmpF = 0; + if ( hCPE->hStereoTCA != NULL ) + { + tmpF = usdequant( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); + } + + set_f( hCPE->hStereoDft->side_gain + STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX, tmpF, STEREO_DFT_BAND_MAX ); + } + + /* reset residual coding / ESF (secondary channel) */ + set_zero( hCPE->hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); + set_zero( hCPE->input_mem[1], NS2SA( sts[0]->output_Fs, STEREO_DFT32MS_OVL_NS ) ); + } + + if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode != IVAS_CPE_TD && hCPE->hCoreCoder[0]->ini_frame > 0 ) + { + hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + hCPE->hStereoTD->tdm_last_SM_flag = 0; + hCPE->hStereoTD->tdm_prev_last_SM_flag = 0; + + /* First frame after DFT frame AND the content is uncorrelated or xtalk -> the primary channel is forced to left */ + if ( hCPE->hStereoTD->tdm_LRTD_flag == 1 ) + { + hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; + } + } + + /* no secondary channel in the previous frame -> memory resets */ + if ( hCPE->element_mode > IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_DFT ) + { + if ( hCPE->last_element_brate <= IVAS_SID_4k4 && hCPE->nchan_out == 2 ) + { + /* reset CLDFB memories */ + cldfb_reset_memory( sts[0]->cldfbAna ); + cldfb_reset_memory( sts[0]->cldfbBPF ); + cldfb_reset_memory( sts[0]->cldfbSyn ); + + sts[0]->mem_deemph = 0; + + sts[0]->tilt_code = 0.0f; + sts[0]->gc_threshold = 0.0f; + /*init_gp_clip( sts[1]->clip_var );*/ + + set_f( sts[0]->mem_syn1, 0, M ); + set_f( sts[0]->mem_syn2, 0, M ); + set_f( sts[0]->mem_syn3, 0, M ); + set_f( sts[0]->mem_syn_r, 0.0f, L_SYN_MEM ); + + sts[1]->last_L_frame = sts[0]->last_L_frame; + + /* reset PCh memories */ + set_f( sts[0]->old_exc, 0, L_EXC_MEM_DEC ); + set_f( sts[0]->lsf_old, 0, M ); + set_f( sts[0]->lsp_old, 0, M ); + } + sts[1]->last_extl = -1; + + sts[1]->prev_bfi = sts[0]->prev_bfi; + + set_f( sts[1]->old_pitch_buf, (float) L_SUBFR, 2 * NB_SUBFR16k ); + sts[1]->old_fpitchFB = 2 * (float) L_SUBFR; + + /* reset CLDFB memories */ + cldfb_reset_memory( sts[1]->cldfbAna ); + cldfb_reset_memory( sts[1]->cldfbBPF ); + cldfb_reset_memory( sts[1]->cldfbSyn ); + + sts[1]->mem_deemph = 0; + + sts[1]->tilt_code = 0.0f; + sts[1]->gc_threshold = 0.0f; + /*init_gp_clip( sts[1]->clip_var );*/ + + set_f( sts[1]->mem_syn1, 0, M ); + set_f( sts[1]->mem_syn2, 0, M ); + set_f( sts[1]->mem_syn3, 0, M ); + set_f( sts[1]->mem_syn_r, 0.0f, L_SYN_MEM ); + + sts[1]->last_L_frame = sts[0]->last_L_frame; + + /* populate PCh memories into the SCh */ + mvr2r( sts[0]->old_exc, sts[1]->old_exc, L_EXC_MEM_DEC ); + mvr2r( sts[0]->lsf_old, sts[1]->lsf_old, M ); + mvr2r( sts[0]->lsp_old, sts[1]->lsp_old, M ); + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + sts[1]->last_core = sts[0]->last_core; + sts[1]->last_coder_type = sts[0]->last_coder_type; + sts[1]->hTcxCfg->last_aldo = sts[0]->hTcxCfg->last_aldo; + sts[1]->hTcxCfg->tcx_curr_overlap_mode = sts[0]->hTcxCfg->tcx_curr_overlap_mode; + + mvr2r( sts[0]->hHQ_core->old_out, sts[1]->hHQ_core->old_out, L_FRAME48k ); + mvr2r( sts[0]->delay_buf_out, sts[1]->delay_buf_out, HQ_DELTA_MAX * HQ_DELAY_COMP ); + mvr2r( sts[0]->hTcxDec->old_syn_Overl, sts[1]->hTcxDec->old_syn_Overl, 256 ); + /* Todo: apply panning to buffers instead of simply using dmx in left and right channel */ + + sts[1]->fscale = sts[0]->fscale; + sts[1]->hTcxCfg->tcx_mdct_window_length = sts[0]->hTcxCfg->tcx_mdct_window_length; + sts[1]->pit_res_max = sts[0]->pit_res_max; + sts[1]->pit_res_max_past = sts[0]->pit_res_max_past; + } + } + else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + set_f( sts[0]->old_exc, 0.0f, L_EXC_MEM_DEC ); + set_f( sts[1]->old_exc, 0.0f, L_EXC_MEM_DEC ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_td2dft_update() + * + * update OLA buffers - needed for switching from TD stereo to DFT stereo + *-------------------------------------------------------------------*/ + +void stereo_td2dft_update( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + const int16_t n, /* i : channel number */ + float output[], /* i/o: synthesis @internal Fs */ + float synth[], /* i/o: synthesis @output Fs */ + float hb_synth[], /* i/o: hb synthesis */ + const int16_t output_frame /* i : frame length */ +) +{ + int16_t ovl, ovl_TCX, dft32ms_ovl, hq_delay_comp; + int16_t ns, nsLB; + int16_t old_out_len, old_outLB_len; + Decoder_State **sts; + + if ( hCPE == NULL ) + { + return; + } + + /* initialization */ + sts = hCPE->hCoreCoder; + ovl = NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); + dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * sts[0]->output_Fs ) / 48000 ); + hq_delay_comp = NS2SA( sts[0]->output_Fs, DELAY_CLDFB_NS ); + + if ( hCPE->element_mode >= IVAS_CPE_DFT && hCPE->element_mode != IVAS_CPE_MDCT ) + { + if ( sts[n]->core == ACELP_CORE ) + { + if ( n == 0 ) + { + /* update DFT analysis overlap memory @internal_fs: core synthesis */ + mvr2r( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], ovl ); + + /* update DFT analysis overlap memory @internal_fs: BPF */ + if ( sts[n]->p_bpf_noise_buf ) + { + mvr2r( sts[n]->p_bpf_noise_buf + sts[n]->L_frame - ovl, hCPE->input_mem_BPF[n], ovl ); + } + + /* update DFT analysis overlap memory @output_Fs: BWE */ + if ( sts[n]->extl != -1 || ( sts[n]->bws_cnt > 0 && sts[n]->core == ACELP_CORE ) ) + { + mvr2r( hb_synth + output_frame - dft32ms_ovl, hCPE->input_mem[n], dft32ms_ovl ); + } + } + else + { + /* update DFT analysis overlap memory @internal_fs: core synthesis, secondary channel */ + mvr2r( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], ovl ); + } + } + else /* TCX core */ + { + /* LB-TCX synthesis */ + mvr2r( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], ovl ); + + /* BPF */ + if ( n == 0 && sts[n]->p_bpf_noise_buf ) + { + mvr2r( sts[n]->p_bpf_noise_buf + sts[n]->L_frame - ovl, hCPE->input_mem_BPF[n], ovl ); + } + + /* TCX synthesis (it was already delayed in TD stereo in core_switching_post_dec()) */ + if ( sts[n]->hTcxDec != NULL ) + { + ovl_TCX = NS2SA( sts[n]->hTcxDec->L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); + mvr2r( synth + sts[n]->hTcxDec->L_frameTCX + hq_delay_comp - ovl_TCX, hCPE->input_mem[n], ovl_TCX - hq_delay_comp ); + mvr2r( sts[n]->delay_buf_out, hCPE->input_mem[n] + ovl_TCX - hq_delay_comp, hq_delay_comp ); + } + } + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->input_mem[0] != NULL ) + { + + /* update DFT stereo OLA memories */ + /*set_zero( hCPE->input_mem_LB[n], STEREO_DFT32MS_OVL_16k );*/ + lerp( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], STEREO_DFT32MS_OVL_16k, ovl ); + + + /* TCX synthesis (it was already delayed in TD stereo in core_switching_post_dec()) */ + if ( sts[n]->hTcxDec != NULL ) + { + ovl_TCX = NS2SA( sts[n]->hTcxDec->L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); + mvr2r( synth + sts[n]->hTcxDec->L_frameTCX + hq_delay_comp - ovl_TCX, hCPE->input_mem[n], ovl_TCX - hq_delay_comp ); + mvr2r( sts[n]->delay_buf_out, hCPE->input_mem[n] + ovl_TCX - hq_delay_comp, hq_delay_comp ); + } + + if ( n == 1 ) + { + nsLB = NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); + ns = NS2SA( sts[n]->output_Fs, N_ZERO_MDCT_NS ); + old_outLB_len = (int16_t) ( ( 3 * STEREO_MDCT2DFT_FADE_LEN_48k * sts[0]->L_frame * FRAMES_PER_SEC ) / 48000 ); + old_out_len = (int16_t) ( ( STEREO_MDCT2DFT_FADE_LEN_48k * sts[0]->output_Fs ) / 48000 ); + + /* update buffers used for fading when switching to DFT Stereo */ + v_add( sts[0]->hHQ_core->old_outLB + nsLB, sts[1]->hHQ_core->old_outLB + nsLB, hCPE->old_outLB_mdct, old_outLB_len ); + lerp( hCPE->old_outLB_mdct, hCPE->old_outLB_mdct, STEREO_MDCT2DFT_FADE_LEN_48k, old_outLB_len ); + v_multc( hCPE->old_outLB_mdct, 0.5f, hCPE->old_outLB_mdct, STEREO_MDCT2DFT_FADE_LEN_48k ); + + v_add( sts[0]->hHQ_core->old_out + ns, sts[1]->hHQ_core->old_out + ns, hCPE->old_out_mdct, old_out_len ); + v_multc( hCPE->old_out_mdct, 0.5f, hCPE->old_out_mdct, old_out_len ); + } + + if ( n == 0 ) + { + set_zero( hCPE->input_mem_BPF[n], STEREO_DFT32MS_OVL_16k ); + } + } + + /* update ovl buffer for possible switching from TD stereo SCh ACELP frame to MDCT stereo TCX frame */ + if ( hCPE->element_mode == IVAS_CPE_TD && n == 1 && sts[n]->hTcxDec == NULL ) + { + mvr2r( output + sts[n]->L_frame / 2, hCPE->hStereoTD->TCX_old_syn_Overl, sts[n]->L_frame / 2 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_mdct2dft_update() + * + * update OLA buffers - needed for switching from MDCT stereo to DFT stereo + *-------------------------------------------------------------------*/ + +void stereo_mdct2dft_update( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output0[], /* i/o: synthesis @internal Fs, ch0 */ + float synth0[] /* i/o: synthesis @output Fs, ch0 */ +) +{ + int16_t i; + int16_t fade_len, fade_len_LB; + float tmpF; + Decoder_State *st; + + if ( hCPE == NULL ) + { + return; + } + + st = hCPE->hCoreCoder[0]; + + fade_len = (int16_t) ( ( STEREO_MDCT2DFT_FADE_LEN_48k * st->output_Fs ) / 48000 ); + fade_len_LB = (int16_t) ( 3 * ( STEREO_MDCT2DFT_FADE_LEN_48k * st->L_frame * FRAMES_PER_SEC ) / 48000 ); + + tmpF = 1.f / fade_len; + for ( i = 0; i < fade_len; i++ ) + { + synth0[i] = ( hCPE->old_out_mdct[i] * ( fade_len - i ) + synth0[i] * i ) * tmpF; + } + + tmpF = 1.f / fade_len_LB; + for ( i = 0; i < fade_len_LB; i++ ) + { + output0[i] = ( hCPE->old_outLB_mdct[i] * ( fade_len_LB - i ) + output0[i] * i ) * tmpF; + } + + return; +} + + +static float ncross_corr_self( + float *signal, + const int16_t x, + const int16_t y, + const int16_t corr_len, + const int16_t subsampling ) +{ + float c_c; + float energy_xy, energy_x, energy_y; + uint16_t j; + float *signal_a, *signal_b; + + c_c = 0.0f; + energy_x = 0.0f; + energy_y = 0.0f; + signal_a = &signal[x]; + signal_b = &signal[y]; + + for ( j = 0; j < corr_len; j += subsampling ) + { + c_c += ( signal_a[j] * signal_b[j] ); + energy_x += ( signal_a[j] ) * ( signal_a[j] ); + energy_y += ( signal_b[j] ) * ( signal_b[j] ); + } + + energy_xy = sqrtf( energy_x * energy_y ); + + if ( energy_xy < 1.0f ) + { + energy_xy = 1.0f; /* conceal silent frames */ + } + c_c = c_c / energy_xy; + + return c_c; +} + + +/*-------------------------------------------------------------------* + * Function smooth_dft2td_transition() + * + * apply smoothing to avoid discontinuities and energy variation when + * switching from DFT stereo to TD stereo + *-------------------------------------------------------------------*/ + +#define DFT2TD_CORR_THRESH 0.9f + +void smooth_dft2td_transition( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float output[CPE_CHANNELS][L_FRAME48k], /* i/o: synthesis @external Fs */ + const int16_t output_frame /* i : output frame lenght */ +) +{ + Decoder_State **sts; + int16_t ipit, i, ipit_max, ipit_min, idiff, ilen, j, ch, lsearch, corr_len, subsampl; + float flen, ftmp_corr, fmaxcorr, fac_fs; + float tmp_out[L_FRAME48k + L_FRAME48k / 2], tmp_out2[L_FRAME48k], *ptO2, *ptO, *pt1, *ptE; + + if ( hCPE == NULL ) + { + return; + } + + /* initialization */ + sts = hCPE->hCoreCoder; + + if ( ( hCPE->element_mode == IVAS_CPE_TD && ( hCPE->last_element_mode == IVAS_CPE_DFT || hCPE->last_element_mode == IVAS_CPE_MDCT ) && ( sts[0]->clas_dec == VOICED_CLAS && sts[0]->coder_type < TRANSITION && sts[0]->coder_type > UNVOICED && sts[0]->last_coder_type > UNVOICED && sts[1]->coder_type > UNVOICED ) ) ) + { + /* length of OVA */ + ilen = output_frame / 2; + + /* correlation length */ + corr_len = output_frame / 20; + subsampl = 4; + + for ( ch = 0; ch < hCPE->nchan_out; ch++ ) + { + /* core to external sampling frequency ratio */ + fac_fs = (float) output_frame / sts[ch]->L_frame; + + /* Find minimum and maximum pitch*/ + ipit_min = minimum( sts[ch]->old_pitch_buf + 4, 4, &flen ) + 4; + ipit_max = maximum( sts[ch]->old_pitch_buf + 4, 4, &flen ) + 4; + ipit_min = (short) ( sts[ch]->old_pitch_buf[ipit_min] * fac_fs + 0.5f ); + ipit_max = (short) ( sts[ch]->old_pitch_buf[ipit_max] * fac_fs + 0.5f ); + + if ( ( ipit_max + corr_len ) > ilen ) /*ensure the search is performed on the available memory*/ + { +#ifdef DEBUG_MODE_TD + /*printf( "**********Pitch too long = %d, skipping this loop at frame %d\n", ipit_max + corr_len, frame );*/ +#endif + continue; + } + + lsearch = ipit_max - ipit_min + corr_len; + lsearch = min( lsearch, output_frame / 4 ); + + /* ptr init for search of the best correlation in the past frame */ + ptE = hCPE->prev_synth_chs[ch] + output_frame - ipit_max - corr_len; + + idiff = 0; + fmaxcorr = -1.0f; + for ( i = 0; i < lsearch; i++ ) + { + ftmp_corr = ncross_corr_self( ptE, i, ipit_max, corr_len, subsampl ); + if ( ftmp_corr > fmaxcorr ) + { + idiff = i; + } + fmaxcorr = max( fmaxcorr, ftmp_corr ); + } + + ipit = ipit_max - idiff; + + ptO = tmp_out + output_frame; + + /* If the correlation is too low, don't use the prediction */ + if ( fmaxcorr < DFT2TD_CORR_THRESH ) + { + mvr2r( &output[ch][0], ptO, ilen ); + } + else + { + mvr2r( hCPE->prev_synth_chs[ch], tmp_out, output_frame ); + pt1 = tmp_out + output_frame - ipit; + for ( i = 0; i < ilen; i++ ) + { + ptO[i] = pt1[i]; + } + } +#ifdef DEBUG_MODE_TD + /*printf( "ch %d, ipit_max %d ipit_min %d, ipit %d :::: lsearch %d\tidiff %d\t%.4f At frame : \t%d\n", ch, ipit_max, ipit_min, ipit, lsearch, idiff, fmaxcorr, frame );*/ +#endif + + /* Set buffer for the reserved buffer of the current frame */ + ptO2 = tmp_out2 + output_frame - ilen; + set_f( tmp_out2 + output_frame - ilen, 0.0f, ilen ); + for ( i = 0; i < output_frame; i++ ) + { + tmp_out2[i] = output[ch][output_frame - 1 - i]; + } + /* ptr init for search of the best correlation of the current frame */ + ptE = ptO2 - ( ipit_max + corr_len ); + + idiff = 0; + fmaxcorr = -1.0f; + for ( i = 0; i < lsearch; i++ ) + { + ftmp_corr = ncross_corr_self( ptE, i, ipit_max, corr_len, subsampl ); + if ( ftmp_corr > fmaxcorr ) + { + idiff = i; + } + fmaxcorr = max( fmaxcorr, ftmp_corr ); + } + + ipit = ipit_max - idiff; + + /* If the correlation is too low, don't use the prediction */ + if ( fmaxcorr > DFT2TD_CORR_THRESH ) + { + pt1 = tmp_out2 + output_frame - ilen - ipit; + for ( i = 0; i < ilen; i++ ) + { + ptO2[i] = pt1[i]; + } + } +#ifdef DEBUG_MODE_TD + /*printf( "ch %d, ipit_max %d ipit_min %d, ipit %d :::: lsearch %d\tidiff %d\t%.4f At frame : \t%d\n", ch, ipit_max, ipit_min, ipit, lsearch, idiff, fmaxcorr, frame );*/ +#endif + + /* perform OVA between predicted signals */ + flen = 1.0f / ilen; + + for ( i = 0; i < 4; i++ ) + { + output[ch][i] = ( ( ( 4.0f - i ) * output[ch][i] + i * ptO[i] ) * 0.25f * ( ilen - i ) + tmp_out2[output_frame - 1 - i] * i ) * flen; + } + for ( ; i < ilen - 4; i++ ) + { + output[ch][i] = ( ptO[i] * ( ilen - i ) + tmp_out2[output_frame - 1 - i] * i ) * flen; + } + j = 0; + for ( ; i < ilen; i++ ) + { + output[ch][i] = ( ptO[i] * ( ilen - i ) + ( ( 4.0f - j ) * tmp_out2[output_frame - 1 - i] + j * output[ch][i] ) * i * 0.25f ) * flen; + j++; + } + } + } + else if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + /* Updates */ + for ( ch = 0; ch < hCPE->nchan_out; ch++ ) + { + mvr2r( output[ch], hCPE->prev_synth_chs[ch], output_frame ); + } + } + + return; +} diff --git a/lib_dec/ivas_stereo_td_dec.c b/lib_dec/ivas_stereo_td_dec.c new file mode 100644 index 0000000000..fbfcc5e825 --- /dev/null +++ b/lib_dec/ivas_stereo_td_dec.c @@ -0,0 +1,556 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------* + * stereo_td_init_dec() + * + * Initialize TD stereo decoder + *-------------------------------------------------------------------*/ + +void stereo_td_init_dec( + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ + const int16_t last_element_mode /* i : last element mode */ +) +{ + hStereoTD->tdm_SM_flag = 0; + hStereoTD->tdm_last_SM_flag = 0; + hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_prev_last_SM_flag = 0; + hStereoTD->tdm_LRTD_flag = 0; + hStereoTD->prevSP_ratio = 0.5f; + hStereoTD->SP_ratio_LT = 0.0f; + hStereoTD->c_LR_LT = 0.5f; + + hStereoTD->flag_skip_DMX = 0; + + if ( last_element_mode == IVAS_CPE_MDCT ) + { + hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; + hStereoTD->tdm_LRTD_flag = 1; + } + + set_f( hStereoTD->TCX_old_syn_Overl, 0.0f, L_FRAME16k / 2 ); + + return; +} + +/*-------------------------------------------------------------------* + * tdm_configure_dec() + * + * Configure TD stereo decoder + *-------------------------------------------------------------------*/ + +void tdm_configure_dec( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + int16_t *tdm_ratio_idx, /* o : ratio index */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + STEREO_TD_DEC_DATA_HANDLE hStereoTD; + Decoder_State **sts; + int16_t tdm_tmp_SM_LRTD_flag; + int16_t mod_ct, core, bits_offset; + int16_t idx_LRTD_pri_side, tdm_inst_ratio_idx; + + hStereoTD = hCPE->hStereoTD; + sts = hCPE->hCoreCoder; + + /*----------------------------------------------------------------* + * Decode CoreCoder signalling + *----------------------------------------------------------------*/ + + /* temporarily decode PCh signalling */ + bits_offset = sts[0]->next_bit_pos; + core = get_indice_st( sts[0], hCPE->element_brate, bits_offset, 1 ); + bits_offset += 1; + + if ( core == ACELP_CORE && hCPE->element_brate < IVAS_24k4 ) + { + mod_ct = get_indice_st( sts[0], hCPE->element_brate, bits_offset, 3 ); + /* Only transition mode is important to decoder, otherwise mod_ct is set to AUDIO only to easy debugging if needed */ + if ( mod_ct != TRANSITION ) + { + mod_ct = AUDIO; + } + } + else /* core != ACELP_CORE */ + { + mod_ct = AUDIO; /* coder_type == VOICED || coder_type == GENERIC */ + } + + /* Get few parameters needed to decode the bitrate allocated to each channel */ + /* Get the coder_type of the secondary channel (last parameter on 2 bits) */ + sts[1]->coder_type = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SECONDARY_SIGNALLING ), TDM_SECONDARY_SIGNALLING ); + + /* Get the LRTD config flag: 1 = LRTD configuration, favor closer bitrate per channel; + 0 = Pri/Sec configuration, bitrates linked wrt. the mono */ + tdm_tmp_SM_LRTD_flag = sts[1]->coder_type & 0x1; + sts[1]->coder_type >>= 1; + hStereoTD->tdm_Pitch_reuse_flag = 0; + + if ( sts[1]->coder_type == 2 ) + { + sts[1]->coder_type = GENERIC; + } + else if ( sts[1]->coder_type == 3 ) + { + sts[1]->coder_type = AUDIO; + + if ( hCPE->element_brate <= IVAS_24k4 ) + { + hStereoTD->tdm_Pitch_reuse_flag = 1; + sts[1]->coder_type = GENERIC; + } + } + + /*----------------------------------------------------------------* + * Decode TDM parameters + *----------------------------------------------------------------*/ + + /* Get the correlation ratio */ + *tdm_ratio_idx = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS ), TDM_RATIO_BITS ); + + hStereoTD->tdm_use_IAWB_Ave_lpc = 0; + if ( sts[1]->coder_type == INACTIVE ) + { + /* Get the flag on the LPC reusage type (primary channel of ave LPC */ + hStereoTD->tdm_use_IAWB_Ave_lpc = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS - TDM_LP_REUSE_BITS ), TDM_LP_REUSE_BITS ); + hStereoTD->tdm_lp_reuse_flag = 1; + } + else + { + /* Get the flag on the LPC reusage */ + hStereoTD->tdm_lp_reuse_flag = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS - TDM_LP_REUSE_BITS ), TDM_LP_REUSE_BITS ); + } + + sts[0]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; /* the flag was already read in function stereo_memory_dec() */ + sts[1]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; + + tdm_inst_ratio_idx = *tdm_ratio_idx; + + /* update past tdm_SM_flag */ + hStereoTD->tdm_prev_last_SM_flag = hStereoTD->tdm_last_SM_flag; + hStereoTD->tdm_last_SM_flag = hStereoTD->tdm_SM_flag; + + idx_LRTD_pri_side = -1; + if ( hStereoTD->tdm_LRTD_flag == 1 ) + { + idx_LRTD_pri_side = tdm_tmp_SM_LRTD_flag; + hStereoTD->tdm_SM_flag = 0; + if ( tdm_inst_ratio_idx == TDM_NQ ) + { + hStereoTD->flag_skip_DMX = 1; + } + else + { + hStereoTD->flag_skip_DMX = 0; + } + /* Set primary channel */ + *tdm_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; + if ( idx_LRTD_pri_side == 1 ) + { + *tdm_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; + } + } + else + { + hStereoTD->tdm_SM_flag = tdm_tmp_SM_LRTD_flag; + if ( hCPE->nchan_out == 1 ) + { + /* in case of mono output, use exclusively the YX upmixing scheme in order to deal with NOOP signals */ + hStereoTD->tdm_SM_flag = 0; + } + } + + if ( sts[1]->coder_type == INACTIVE && ( *tdm_ratio_idx >= 29 || *tdm_ratio_idx <= 1 ) ) + { + hStereoTD->tdm_lp_reuse_flag = hStereoTD->tdm_use_IAWB_Ave_lpc; + hStereoTD->tdm_use_IAWB_Ave_lpc = 0; + } + + /*sts[1]->tdm_inst_ratio_idx = sts[0]->tdm_inst_ratio_idx;*/ + + if ( hCPE->nchan_out == 1 && hCPE->hStereoDftDmx != NULL ) + { + /* in mono DMX, only targetGain is needed */ + int16_t tmpS = 20; + if ( hStereoTD->tdm_LRTD_flag == 0 ) + { + tmpS = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + STEREO_BITS_TCA_CHAN + STEREO_BITS_TCA_CORRSTATS ), STEREO_BITS_TCA_GD ); + } + hCPE->hStereoDftDmx->targetGain = usdequant( tmpS, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); + hCPE->hStereoDftDmx->targetGain = powf( 10, hCPE->hStereoDftDmx->targetGain ); + } + else + { + if ( hStereoTD->tdm_LRTD_flag == 0 ) + { + hCPE->hStereoTCA->refChanIndx = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS ), STEREO_BITS_TCA_CHAN ); + hCPE->hStereoTCA->indx_ica_NCShift = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + STEREO_BITS_TCA_CHAN ), STEREO_BITS_TCA_CORRSTATS ); + hCPE->hStereoTCA->indx_ica_gD = get_indice_st( sts[0], hCPE->element_brate, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + STEREO_BITS_TCA_CHAN + STEREO_BITS_TCA_CORRSTATS ), STEREO_BITS_TCA_GD ); + } + else + { + hCPE->hStereoTCA->refChanIndx = L_CH_INDX; + hCPE->hStereoTCA->indx_ica_NCShift = 0; + hCPE->hStereoTCA->indx_ica_gD = 20; + } + hCPE->hStereoTCA->targetGain = usdequant( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); + hCPE->hStereoTCA->targetGain = powf( 10, hCPE->hStereoTCA->targetGain ); + } + +#ifdef DEBUG_MODE_TD + dbgwrite( &mod_ct, 2, 1, 320, "res/mod_ct.dec" ); + dbgwrite( tdm_ratio_idx, 2, 1, 320, "res/tdm_ratio_idx.dec" ); + dbgwrite( &tdm_inst_ratio_idx, 2, 1, 320, "res/tdm_inst_ratio_idx.dec" ); + dbgwrite( &hStereoTD->tdm_lp_reuse_flag, 2, 1, 320, "res/tdm_lp_reuse_flag.dec" ); +#endif + + /* set the BW of the secondary channel */ + if ( hStereoTD->tdm_LRTD_flag && hCPE->element_brate > IVAS_13k2 ) + { + /* set BW of the secondary channel in LRTD stereo mode as the BW of the primary channel at higher bitrates */ + sts[1]->bwidth = sts[0]->bwidth; + } + else + { + /* limit BW of the secondary channel in LRTD mode to WB for low bitrates */ + sts[1]->bwidth = WB; + } + + /*----------------------------------------------------------------* + * bitbudget distribution between channels (taking into account also metadata bitbudget) + *----------------------------------------------------------------*/ + + tdm_bit_alloc( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC, hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), &hStereoTD->tdm_low_rate_mode, sts[1]->coder_type, *tdm_ratio_idx, hStereoTD->tdm_Pitch_reuse_flag, sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, tdm_inst_ratio_idx ); + + return; +} + + +/*-------------------------------------------------------------------* + * Function tdm_downmix_plain() + * + * downmix Left+Right to Primary+Secondary channel + *-------------------------------------------------------------------*/ + +void tdm_upmix_plain( + float Left[], /* o : left channel */ + float Right[], /* o : right channel */ + const float PCh_2_L[], /* i : primary channel */ + const float SCh_2_R[], /* i : secondary channel */ + const float LR_ratio, /* i : mixing ratio */ + const float inv_den_LR_ratio, /* i : inverse mixing ration */ + const int16_t start_index, /* i : start index */ + const int16_t end_index, /* i : end index */ + const int16_t plus_minus_flag /* i : plus/minus flag */ +) +{ + int16_t i; + + if ( plus_minus_flag == 1 ) + { + for ( i = start_index; i < end_index; i++ ) + { + Left[i] = ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * inv_den_LR_ratio; + Right[i] = ( -LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * inv_den_LR_ratio; + } + } + else + { + for ( i = start_index; i < end_index; i++ ) + { + Left[i] = ( LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * inv_den_LR_ratio; + Right[i] = ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * inv_den_LR_ratio; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function tdm_downmix_fade() + * + * downmix Left+Right to Primary+Secondary channel with fade in/out + *-------------------------------------------------------------------*/ + +static void tdm_upmix_fade( + float Left[], /* o : left channel */ + float Right[], /* o : right channel */ + const float PCh_2_L[], /* i : primary channel */ + const float SCh_2_R[], /* i : secondary channel */ + const float LR_ratio_mem, /* i : last mixing ratio */ + const float inv_den_LR_ratio_mem, /* i : last inverse mixing ration */ + const float LR_ratio, /* i : mixing ratio */ + const float inv_den_LR_ratio, /* i : inverse mixing ration */ + const int16_t start_index, /* i : start index */ + const int16_t end_index, /* i : end index */ + const int16_t fading_type /* i : fading type */ +) +{ + int16_t i; + float step, step2, fade_in, fade_out; + + step = 1.0f / (float) ( end_index - start_index ); + fade_out = 1.0f; + fade_in = 0.0f; + + fade_out *= inv_den_LR_ratio_mem; + fade_in *= inv_den_LR_ratio; + step2 = step * inv_den_LR_ratio; + step *= inv_den_LR_ratio_mem; + + if ( fading_type == 0 ) /* Switching from YX scheme to SM scheme */ + { + for ( i = start_index; i < end_index; i++ ) + { + Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_in; + Right[i] = ( -LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_in; + fade_in += step2; + fade_out -= step; + } + } + else if ( fading_type == 1 ) /* SM scheme */ + { + for ( i = start_index; i < end_index; i++ ) + { + Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_in; + Right[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_in; + fade_in += step2; + fade_out -= step; + } + } + else if ( fading_type == 2 ) /* Switching from SM scheme to YX scheme */ + { + for ( i = start_index; i < end_index; i++ ) + { + Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_in; + Right[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_out + ( -LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_in; + fade_in += step2; + fade_out -= step; + } + } + else if ( fading_type == 3 ) /* YX scheme */ + { + for ( i = start_index; i < end_index; i++ ) + { + Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_in; + Right[i] = ( -LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_out + ( -LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_in; + fade_in += step2; + fade_out -= step; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * stereo_tdm_combine() + * + * Combine Primary and Secondary channels into L and R channels + *-------------------------------------------------------------------*/ + +void stereo_tdm_combine( + CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ + float *PCh_2_L, /* i/o: Primary channel -> output as left channel */ + float *SCh_2_R, /* i/o: Secondary channel -> output as right channel*/ + const int16_t output_frame, /* i : Number of samples */ + const int16_t flag_HB, /* i : flag to distinguish between core (0) and HB (1) synthesis */ + const int16_t tdm_ratio_idx /* i : TDM ratio index */ +) +{ + int16_t i; + int32_t output_Fs; + float LR_ratio, LR_ratio_mem; + float Left[L_FRAME48k], Right[L_FRAME48k]; + int16_t upmixing_delay; + int16_t stereo_tdm_coder_type; + int16_t tdm_n_OVA; + int16_t tdm_last_ratio_idx = hCPE->hStereoTD->tdm_last_ratio_idx; + + output_Fs = hCPE->hCoreCoder[0]->output_Fs; + tdm_n_OVA = NS2SA( output_Fs, TDM_L_NOVA_NS ); + + if ( flag_HB ) + { + upmixing_delay = NS2SA( output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ); + } + else + { + upmixing_delay = NS2SA( output_Fs, ACELP_LOOK_NS + DELAY_CLDFB_NS ); + } + + LR_ratio = tdm_ratio_tabl[tdm_ratio_idx]; + LR_ratio_mem = tdm_ratio_tabl[tdm_last_ratio_idx]; + + if ( hCPE->hStereoTD->flag_skip_DMX ) + { + stereo_tdm_coder_type = 10; /* no DMX */ + mvr2r( PCh_2_L, Left, output_frame ); + mvr2r( SCh_2_R, Right, output_frame ); + } + else if ( hCPE->hStereoTD->tdm_last_SM_flag == 1 ) + { + if ( hCPE->hStereoTD->tdm_prev_last_SM_flag == 0 ) + { + stereo_tdm_coder_type = 0; /* mode 1 : Switching from YX scheme to SM scheme*/ + } + else + { + stereo_tdm_coder_type = 1; /* mode 2 : SM scheme*/ + } + } + else + { + if ( hCPE->hStereoTD->tdm_prev_last_SM_flag == 1 ) + { + stereo_tdm_coder_type = 2; /* mode 3 : Switching from SM scheme to YX scheme*/ + } + else + { + stereo_tdm_coder_type = 3; /* mode 4 : YX scheme*/ + } + } + + switch ( stereo_tdm_coder_type ) + { + case ( 0 ): + { + /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for YX scheme */ + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 1 ); + + /* Switching from YX scheme to SM scheme */ + tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 0 ); + + /* Do the upmixing of the other samples with the new coefficient and formular for SM scheme */ + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 0 ); + } + break; + case ( 1 ): + { + /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for SM scheme */ + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 0 ); + + /* Do the upmixing of the other samples with the new coefficient and formular for SM scheme */ + if ( LR_ratio == LR_ratio_mem ) + { + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], upmixing_delay, output_frame, 0 ); + } + else + { + tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 1 ); + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 0 ); + } + } + break; + case ( 2 ): + { + /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for SM scheme */ + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 0 ); + + /* Switching from SM scheme to YX scheme */ + tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 2 ); + + /* Do the upmixing of the other samples with the new coefficient and formular for YX scheme */ + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 1 ); + } + break; + case ( 3 ): + { + /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for YX scheme */ + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 1 ); + + /* Do the upmixing of the other samples with the new coefficient and formular for YX scheme */ + if ( LR_ratio == LR_ratio_mem ) + { + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], upmixing_delay, output_frame, 1 ); + } + else + { + tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 3 ); + tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 1 ); + } + } + break; + default: + break; + } + + for ( i = 0; i < output_frame; i++ ) + { + PCh_2_L[i] = Left[i]; + SCh_2_R[i] = Right[i]; + } + + /* DFT -> TD stereo switching: equalize signal energies */ + if ( hCPE->last_element_mode != IVAS_CPE_TD ) + { + float incr, fac; + + if ( hCPE->hStereoDftDmx != NULL ) + { + fac = 1.0f; + } + else + { + fac = hCPE->hStereoTCA->targetGain; + } + + if ( fac < 1.0f ) + { + incr = ( 1.0f - fac ) / NS2SA( output_Fs, ACELP_LOOK_NS ); + + for ( i = 0; i < NS2SA( output_Fs, ACELP_LOOK_NS ); i++ ) + { + PCh_2_L[i] *= fac; + fac += incr; + } + } + } + + return; +} diff --git a/lib_dec/ivas_stereo_td_low_rate_dec.c b/lib_dec/ivas_stereo_td_low_rate_dec.c new file mode 100644 index 0000000000..8a0757cd5e --- /dev/null +++ b/lib_dec/ivas_stereo_td_low_rate_dec.c @@ -0,0 +1,317 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "stat_enc.h" +#include "rom_com.h" +#include "ivas_rom_com.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * tdm_low_rate_dec() + * + * Decode secondary channel of TD Stereo with a low-bitrate decoder + *-------------------------------------------------------------------*/ + +void tdm_low_rate_dec( + Decoder_State *st, /* i/o: decoder static memory */ + float dct_epit[], /* o : GSC excitation in DCT domain */ + float *tmp_noise, /* o : long term temporary noise energy */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const float *lsf_new /* i : ISFs at the end of the frame */ +) +{ + int16_t tmp_nb_bits_tot, pit_band_idx; + GSC_DEC_HANDLE hGSCDec; + int16_t Diff_len, nb_subfr; + int16_t attack_flag; + int16_t last_bin; + int16_t m_coder_type; + float exc_wo_nf[L_FRAME]; + + hGSCDec = st->hGSCDec; + + /*---------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------*/ + + m_coder_type = st->coder_type; + + Diff_len = 0; + + pit_band_idx = 10 + BAND1k2; + nb_subfr = 2; + + hGSCDec->Last_GSC_pit_band_idx = pit_band_idx; + + st->GSC_noisy_speech = 1; + hGSCDec->noise_lev = 14; + + /*---------------------------------------------------------------* + * DCT transform + *---------------------------------------------------------------*/ + + st->tilt_code = 0.0f; + set_f( exc, 0, L_FRAME ); + set_f( dct_epit, 0, L_FRAME ); + set_f( pitch_buf, 64, 4 ); + st->bpf_off = 1; + + st->bfi_pitch = (int16_t) ( mean( pitch_buf, 4 ) + 0.5f ); + st->bfi_pitch_frame = L_FRAME; + Diff_len = L_FRAME / 2; + st->bpf_off = 0; + attack_flag = 0; + + /*--------------------------------------------------------------------------------------* + * GSC decoder + *--------------------------------------------------------------------------------------*/ + + /* find the current total number of bits used */ + tmp_nb_bits_tot = st->next_bit_pos; + + if ( st->element_mode == IVAS_CPE_TD ) + { + tmp_nb_bits_tot += TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; + } + + if ( st->tdm_LRTD_flag == 1 ) + { + tmp_nb_bits_tot -= STEREO_BITS_TCA; + } + + if ( st->extl_brate_orig > 0 ) + { + /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ + tmp_nb_bits_tot--; + } + + gsc_dec( st, dct_epit, pit_band_idx, Diff_len, tmp_nb_bits_tot, nb_subfr, m_coder_type, &last_bin, lsf_new, exc_wo_nf, tmp_noise ); + + /*--------------------------------------------------------------------------------------* + * iDCT transform + *--------------------------------------------------------------------------------------*/ + + edct( dct_epit, exc, L_FRAME, IVAS_CPE_TD ); + + edct( exc_wo_nf, exc_wo_nf, L_FRAME, IVAS_CPE_TD ); + + /*----------------------------------------------------------------------* + * Remove potential pre-echo in case an onset has been detected + *----------------------------------------------------------------------*/ + + pre_echo_att( &hGSCDec->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); + + + /*--------------------------------------------------------------------------------------* + * Update BWE excitation + *--------------------------------------------------------------------------------------*/ + + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + + if ( st->hBWE_TD != NULL ) + { + if ( st->tdm_LRTD_flag ) + { + interp_code_5over2( exc, bwe_exc, L_FRAME ); + } + else + { + set_f( bwe_exc, 0, L_FRAME32k ); + } + } + + /*--------------------------------------------------------------------------------------* + * Updates + *--------------------------------------------------------------------------------------*/ + + mvr2r( exc, exc2, L_FRAME ); + mvr2r( exc_wo_nf, exc, L_FRAME ); + + /*--------------------------------------------------------------------------------------* + * Channel aware mode parameters + *--------------------------------------------------------------------------------------*/ + + set_f( st->tilt_code_dec, 0, NB_SUBFR16k ); + + return; +} + + +/*---------------------------------------------------------------------* + * decod_gen_2sbfr() + * + * Decode generic (GC), 2 subframes mode + *---------------------------------------------------------------------*/ + +void decod_gen_2sbfr( + Decoder_State *st, /* i/o: decoder static memory */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const float *Aq, /* i : LP filter coefficient */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *exc, /* i/o: adapt. excitation exc */ + float *exc2, /* i/o: adapt. excitation/total exc */ + float *bwe_exc, /* o : excitation for SWB TBE */ + float *gain_buf, /* o : floating pitch gain for each subframe */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ +) +{ + int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ + float gain_pit = 0.0f; /* pitch gain */ + float gain_code = 0.0f; /* gain/normalized gain of the algebraic excitation */ + float norm_gain_code = 0.0f; /* normalized gain of the algebraic excitation */ + float gain_inov = 0; /* Innovation gain */ + float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ + float voice_fac; /* voicing factor */ + float code[2 * L_SUBFR]; /* algebraic codevector */ + const float *p_Aq; /* Pointer to frame LP coefficient */ + float *pt_pitch; /* pointer to floating pitch */ + int16_t i_subfr, i; /* tmp variables */ + int16_t L_frame; + int16_t pitch_limit_flag; + float error; + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + L_frame = L_FRAME; + + T0 = PIT_MIN; + T0_frac = 0; + error = 0.0f; + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + p_Aq = Aq; /* pointer to interpolated LPC parameters */ + pt_pitch = pitch_buf; /* pointer to the pitch buffer */ + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += 2 * L_SUBFR ) + { + /*----------------------------------------------------------------------* + * Decode pitch lag + *----------------------------------------------------------------------*/ + + *pt_pitch = pit_decode( st, st->core_brate, 0, L_frame, i_subfr, GENERIC, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, 2 * L_SUBFR, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + tbe_celp_exc( st->element_mode, st->idchan, bwe_exc, L_frame, 2 * L_SUBFR, i_subfr, T0, T0_frac, &error, st->tdm_LRTD_flag ); + + /*--------------------------------------------------------------* + * Find the adaptive codebook vector + *--------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, 2 * L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*--------------------------------------------------------------* + * LP filtering of the adaptive excitation + *--------------------------------------------------------------*/ + + lp_filt_exc_dec( st, MODE1, i_subfr, 2 * L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); + + /*--------------------------------------------------------------* + * Innovation decoding + *--------------------------------------------------------------*/ + + inov_decode( st, st->core_brate, 0, L_frame, sharpFlag, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, 2 * L_SUBFR ); + + /*--------------------------------------------------------------* + * Gain decoding + * Estimate spectrum tilt and voicing + *--------------------------------------------------------------*/ + + gain_dec_lbr( st, GENERIC, i_subfr, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, gains_mem, 2 * L_SUBFR ); + st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, 2 * L_SUBFR, 0 ); + + /* update LP filtered gains for the case of frame erasures */ + lp_gain_updt( i_subfr, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_frame ); + lp_gain_updt( i_subfr + L_SUBFR, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_frame ); + + /*----------------------------------------------------------------------* + * Find the total excitation + *----------------------------------------------------------------------*/ + + for ( i = 0; i < 2 * L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, 0, NULL, T0, GENERIC, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); + + voice_factors[i_subfr / L_SUBFR + 1] = voice_factors[i_subfr / L_SUBFR]; + + /*----------------------------------------------------------------* + * Excitation enhancements (update of total excitation signal) + * called twice because adapting it to double the subfr length would need lot of modifications + *----------------------------------------------------------------*/ + + enhancer( MODE1, st->core_brate, -1, 0, GENERIC, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); + + enhancer( MODE1, st->core_brate, -1, 0, GENERIC, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code + L_SUBFR, exc2 + i_subfr + L_SUBFR, gain_pit, st->dispMem ); + + p_Aq += 2 * ( M + 1 ); + + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + + gain_buf[i_subfr / L_SUBFR] = gain_pit; + gain_buf[( i_subfr + L_SUBFR ) / L_SUBFR] = gain_pit; + st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; + st->tilt_code_dec[( i_subfr + L_SUBFR ) / L_SUBFR] = st->tilt_code; + } + + /* SC-VBR */ + st->prev_gain_pit_dec = gain_pit; + + return; +} diff --git a/lib_dec/ivas_svd_dec.c b/lib_dec/ivas_svd_dec.c new file mode 100644 index 0000000000..ff9852d1df --- /dev/null +++ b/lib_dec/ivas_svd_dec.c @@ -0,0 +1,921 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#include "ivas_cnst.h" +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ +/* The SVD is sensitive to changes to the following constants, so please be careful when trying to tune things */ +#define SVD_MINIMUM_VALUE 1e-32f /* minimum value */ +#define CONVERGENCE_FACTOR 1.19209290e-07f /* factor for SVD convergence */ +#define SVD_MAX_NUM_ITERATION 75 /* maximum number of interations before exiting the SVD */ +#define SVD_ZERO_FLUSH_THRESHOLD 1.0e-20f + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static float GivensRotation( const float x, const float z ); + +static void biDiagonalReductionLeft( float singularVectors[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, const int16_t currChannel, float *sig_x, float *g ); + +static void biDiagonalReductionRight( float singularVectors[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, const int16_t currChannel, float *sig_x, float *g ); + +static void singularVectorsAccumulationLeft( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC ); + +static void singularVectorsAccumulationRight( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsC ); + +static void HouseholderReduction( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, float *eps_x ); + +static int16_t BidagonalDiagonalisation( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, const float eps_x ); + +static void ApplyQRTransform( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t startIndex, const int16_t currentIndex, const int16_t nChannelsL, const int16_t nChannelsC ); + +static void ApplyRotation( float singularVector[][MAX_OUTPUT_CHANNELS], const float c, const float s, float x11, float x12, float *f, float *g, const int16_t currentIndex1, const int16_t currentIndex2, const int16_t nChannels ); + +static float maxWithSign( const float a ); + +static void flushToZeroArray( float arr[MAX_OUTPUT_CHANNELS], const int16_t length ); + +static void flushToZeroMat( float mat[][MAX_OUTPUT_CHANNELS], const int16_t m, const int16_t n ); + + +/*------------------------------------------------------------------------- + * mat2svdMat() + * + * external matrix format to internal + *-------------------------------------------------------------------------*/ + +void mat2svdMat( + const float *mat, /* i : matrix as column ordered vector */ + float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* o : matrix as two-dimensional arry */ + const int16_t nRows, /* i : number of rows of the matrix */ + const int16_t mCols, /* i : number of columns of the matrix */ + const int16_t transpose /* i : flag indication transposition */ +) +{ + int16_t i, j; + int16_t posCounter; + + if ( transpose ) + { + posCounter = 0; + + for ( i = 0; i < mCols; i++ ) + { + for ( j = 0; j < nRows; j++ ) + { + svdMat[i][j] = mat[j + nRows * i]; + + if ( mat[j + nRows * i] > 0.0f ) + { + posCounter++; + } + } + + set_zero( &svdMat[i][mCols], MAX_OUTPUT_CHANNELS - nRows ); + } + + for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) + { + set_zero( svdMat[i], MAX_OUTPUT_CHANNELS ); + } + } + else + { + for ( i = 0; i < nRows; i++ ) + { + for ( j = 0; j < mCols; j++ ) + { + svdMat[i][j] = mat[i + nRows * j]; + } + + set_zero( &svdMat[i][mCols], MAX_OUTPUT_CHANNELS - mCols ); + } + + for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) + { + set_zero( svdMat[i], MAX_OUTPUT_CHANNELS ); + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * svdMat2mat() + * + * transfer a matrix from a two dimensional array to a column wise ordered vector + *---------------------------------------------------------------------*/ + +void svdMat2mat( + float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* i : matrix as two-dimensional arry */ + float *mat, /* o : matrix as column ordered vector */ + const int16_t nRows, /* i : number of rows of the matrix */ + const int16_t mCols /* i : number of columns of the matrix */ +) +{ + int16_t i, j; + + for ( i = 0; i < nRows; i++ ) + { + + + for ( j = 0; j < mCols; j++ ) + { + mat[i + nRows * j] = svdMat[i][j]; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * svd() + * + * perform a singular value decomposition X=USV of a matrix X + *-------------------------------------------------------------------------*/ + +/* !r: error or success */ +int16_t svd( + float InputMatrix[][MAX_OUTPUT_CHANNELS], /* i : matrix to be decomposed (M) */ + float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* o : left singular vectors (U) */ + float singularValues[MAX_OUTPUT_CHANNELS], /* o : singular values vector (S) */ + float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* o : right singular vectors (V) */ + const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ + const int16_t nChannelsC /* i : number of columns in the matrix to be decomposed */ +) +{ + int16_t iCh, jCh; + int16_t lengthSingularValues; + int16_t errorMessage, condition; + int16_t max_length = ( ( nChannelsL > nChannelsC ) ? nChannelsL : nChannelsC ); + float secDiag[MAX_OUTPUT_CHANNELS]; + float eps_x = 0.0f, temp; + + wmops_sub_start( "svd" ); + + set_zero( secDiag, MAX_OUTPUT_CHANNELS ); + + /* Collecting Values */ + for ( iCh = 0; iCh < nChannelsL; iCh++ ) + { + for ( jCh = 0; jCh < nChannelsC; jCh++ ) + { + singularVectors_Left[iCh][jCh] = InputMatrix[iCh][jCh]; + } + } + + /* Householder reduction */ + HouseholderReduction( singularVectors_Left, singularValues, singularVectors_Right, secDiag, nChannelsL, nChannelsC, &eps_x ); + + /* Set extremely small values to zero if needed */ + flushToZeroArray( singularValues, max_length ); + flushToZeroMat( singularVectors_Left, nChannelsL, nChannelsL ); + flushToZeroMat( singularVectors_Right, nChannelsC, nChannelsC ); + + /* BidagonalDiagonalisation */ + errorMessage = BidagonalDiagonalisation( singularVectors_Left, singularValues, singularVectors_Right, secDiag, nChannelsL, nChannelsC, eps_x ); + + /* Sort the singular values descending order */ + lengthSingularValues = min( nChannelsL, nChannelsC ); + + do + { + condition = 0; + for ( iCh = 0; iCh < lengthSingularValues - 1; iCh++ ) + { + if ( singularValues[iCh] < singularValues[iCh + 1] ) + { + condition = 1; + temp = singularValues[iCh]; + singularValues[iCh] = singularValues[iCh + 1]; + singularValues[iCh + 1] = temp; + + for ( jCh = 0; jCh < nChannelsL; ++jCh ) + { + temp = singularVectors_Left[jCh][iCh]; + singularVectors_Left[jCh][iCh] = singularVectors_Left[jCh][iCh + 1]; + singularVectors_Left[jCh][iCh + 1] = temp; + } + + for ( jCh = 0; jCh < nChannelsC; ++jCh ) + { + temp = singularVectors_Right[jCh][iCh]; + singularVectors_Right[jCh][iCh] = singularVectors_Right[jCh][iCh + 1]; + singularVectors_Right[jCh][iCh + 1] = temp; + } + } + } + } while ( condition == 1 ); + + wmops_sub_end(); + return ( errorMessage ); +} + + +/*-----------------------------------------------------------------------* + * Local functions + *-----------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------- + * BidagonalDiagonalisation() + * + * + *-------------------------------------------------------------------------*/ + +static int16_t BidagonalDiagonalisation( + float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* i/o: left singular vectors (U) */ + float singularValues[MAX_OUTPUT_CHANNELS], /* i/o: singular values vector (S) */ + float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* i/o: right singular vectors (V) */ + float secDiag[MAX_OUTPUT_CHANNELS], /* i/o: */ + const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ + const int16_t nChannelsC, /* i : number of columns in the matrix to be decomposed */ + const float eps_x /* i : */ +) +{ + int16_t kCh, nCh, iCh, jCh, split; + float c, s, f1, f2; + float g = 0.0f; + int16_t convergence, iteration, found_split; + int16_t error = 0; + + for ( iCh = nChannelsC - 1; iCh >= 0; iCh-- ) /* nChannelsC */ + { + convergence = 0; + iteration = 0; + split = iCh - 1; + + while ( convergence == 0 ) + { + iteration++; + found_split = 1; + + for ( jCh = iCh; jCh >= 0; jCh-- ) + { + split = jCh - 1; + if ( fabsf( secDiag[jCh] ) <= CONVERGENCE_FACTOR * eps_x ) /* is secDiag[ch] vanishing compared to eps_x */ + { + found_split = 0; + break; + } + if ( fabsf( singularValues[split] ) <= CONVERGENCE_FACTOR * eps_x ) /* is singularValues[split] vanishing compared to eps_x */ + { + break; + } + } + + convergence = ( jCh == iCh ) ? 1 : 0; + + if ( found_split ) + { + s = 1.0f; + c = 0.0f; + + for ( kCh = jCh; kCh <= iCh; kCh++ ) + { + g = s * secDiag[kCh]; + secDiag[kCh] = c * secDiag[kCh]; + if ( fabsf( g ) <= CONVERGENCE_FACTOR * eps_x ) + { + break; + } + + c = singularValues[kCh]; + singularValues[kCh] = GivensRotation( g, singularValues[kCh] ); + c = c / maxWithSign( singularValues[kCh] ); + s = -g / maxWithSign( singularValues[kCh] ); + + ApplyRotation( singularVectors_Left, c, s, 0, 0, &f1, &f2, kCh, split, nChannelsL ); /* nChannelsL */ + } + } + + if ( convergence ) + { + singularValues[iCh] = (float) singularValues[iCh]; + if ( singularValues[iCh] < 0.0f ) + { + singularValues[iCh] = -singularValues[iCh]; + for ( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ + { + singularVectors_Right[nCh][iCh] = -singularVectors_Right[nCh][iCh]; + } + } + } + else + { + if ( iteration >= SVD_MAX_NUM_ITERATION ) + { + if ( singularValues[iCh] < 0.0f ) + { + singularValues[iCh] = -singularValues[iCh]; + + for ( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ + { + singularVectors_Right[nCh][iCh] = -singularVectors_Right[nCh][iCh]; + } + } + error = 1; + convergence = 1; + } + else + { + ApplyQRTransform( singularVectors_Left, singularValues, singularVectors_Right, secDiag, jCh, iCh, nChannelsL, nChannelsC ); /* nChannelsC */ + } + } + } + } + + return ( error ); +} + + +/*------------------------------------------------------------------------- + * ApplyQRTransform() + * + * + *-------------------------------------------------------------------------*/ + +static void ApplyQRTransform( + float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* i/o: left singular vectors (U) */ + float singularValues[MAX_OUTPUT_CHANNELS], /* i/o: singular values vector (S) */ + float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* i/o: right singular vectors (V) */ + float secDiag[MAX_OUTPUT_CHANNELS], /* i/o: */ + const int16_t startIndex, /* i : */ + const int16_t currentIndex, /* i : */ + const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ + const int16_t nChannelsC /* i : number of columns in the matrix to be decomposed */ +) +{ + int16_t ch, split; + float d = 0.0f, g = 0.0f, r = 0.0f, x_ii = 0.0f, x_split = 0.0f, x_kk = 0.0f, mu = 0.0f, aux = 0.0f; + float c = 1.0f; + float s = 1.0f; + + x_kk = singularValues[currentIndex]; + x_ii = singularValues[startIndex]; + split = currentIndex - 1; + + x_split = singularValues[split]; + g = secDiag[split]; + r = secDiag[currentIndex]; + + d = ( x_split + x_kk ) * ( x_split - x_kk ) + ( g + r ) * ( g - r ); + d /= maxWithSign( ( r + r ) * x_split ); + + g = GivensRotation( 1.0f, d ); + mu = x_split / maxWithSign( d + ( d >= 0.0f ? 1 : ( -1 ) ) * fabsf( g ) ) - r; + d = ( ( x_ii + x_kk ) * ( x_ii - x_kk ) + r * mu ) / maxWithSign( x_ii ); + + /*QR transformation*/ + for ( ch = startIndex; ch <= split; ch++ ) + { + r = s * secDiag[ch + 1]; + g = c * secDiag[ch + 1]; + + secDiag[ch] = GivensRotation( d, r ); + c = d / maxWithSign( secDiag[ch] ); + s = r / maxWithSign( secDiag[ch] ); + + r = s * singularValues[ch + 1]; + x_split = c * singularValues[ch + 1]; + aux = g; + ApplyRotation( singularVectors_Right, c, s, x_ii, aux, &d, &g, ch + 1, ch, nChannelsC ); + + singularValues[ch] = GivensRotation( d, r ); + if ( fabsf( singularValues[ch] ) > CONVERGENCE_FACTOR * fabsf( singularValues[ch] ) ) + { + aux = 1.0f / singularValues[ch]; + c = d * aux; + s = r * aux; + } + + ApplyRotation( singularVectors_Left, c, s, g, x_split, &d, &x_ii, ch + 1, ch, nChannelsL ); + } + + secDiag[startIndex] = 0.0f; + secDiag[currentIndex] = d; + singularValues[currentIndex] = x_ii; + + return; +} + + +/*------------------------------------------------------------------------- + * ApplyRotation() + * + * + *-------------------------------------------------------------------------*/ + +static void ApplyRotation( + float singularVector[][MAX_OUTPUT_CHANNELS], + const float c, + const float s, + float x11, + float x12, + float *d, + float *g, + const int16_t currentIndex1, + const int16_t currentIndex2, + const int16_t nChannels ) +{ + int16_t ch; + + *d = c * x11 + s * x12; + *g = c * x12 - s * x11; + + for ( ch = 0; ch < nChannels; ch++ ) + { + x11 = singularVector[ch][currentIndex2]; + x12 = singularVector[ch][currentIndex1]; + singularVector[ch][currentIndex2] = ( c * x11 + s * x12 ); + singularVector[ch][currentIndex1] = ( c * x12 - s * x11 ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * HouseholderReduction() + * + * + *-------------------------------------------------------------------------*/ + +static void HouseholderReduction( + float singularVectors_Left[][MAX_OUTPUT_CHANNELS], + float singularValues[MAX_OUTPUT_CHANNELS], + float singularVectors_Right[][MAX_OUTPUT_CHANNELS], + float secDiag[MAX_OUTPUT_CHANNELS], + const int16_t nChannelsL, + const int16_t nChannelsC, + float *eps_x ) +{ + int16_t nCh; + float g = 0.0f, sig_x = 0.0f; + + /* Bidiagonal Reduction for every channel */ + for ( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ + { + biDiagonalReductionLeft( singularVectors_Left, singularValues, secDiag, nChannelsL, nChannelsC, nCh, &sig_x, &g ); + biDiagonalReductionRight( singularVectors_Left, secDiag, nChannelsL, nChannelsC, nCh, &sig_x, &g ); + *eps_x = max( *eps_x, ( fabsf( singularValues[nCh] ) + fabsf( secDiag[nCh] ) ) ); + } + + /* SingularVecotr Accumulation */ + singularVectorsAccumulationRight( singularVectors_Left, singularVectors_Right, secDiag, nChannelsC ); + singularVectorsAccumulationLeft( singularVectors_Left, singularValues, nChannelsL, nChannelsC ); + + return; +} + + +/*------------------------------------------------------------------------- + * biDiagonalReductionLeft() + * + * + *-------------------------------------------------------------------------*/ + +static void biDiagonalReductionLeft( + float singularVectors[][MAX_OUTPUT_CHANNELS], + float singularValues[MAX_OUTPUT_CHANNELS], + float secDiag[MAX_OUTPUT_CHANNELS], + const int16_t nChannelsL, + const int16_t nChannelsC, + const int16_t currChannel, + float *sig_x, + float *g ) +{ + int16_t iCh, jCh, idx; + float norm_x, f, r; + + secDiag[currChannel] = ( *sig_x ) * ( *g ); + + /* Setting values to 0 */ + ( *sig_x ) = 0.0f; + ( *g ) = 0.0f; + + if ( currChannel < nChannelsL ) /* i <= m */ + { + idx = currChannel; + + for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ + { + ( *sig_x ) += fabsf( singularVectors[jCh][currChannel] ); + } + + if ( ( *sig_x ) ) /*(fabsf(*sig_x) > EPSILON * fabsf(*sig_x)) { */ + { + norm_x = 0.0f; + + for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ + { + singularVectors[jCh][currChannel] = ( singularVectors[jCh][currChannel] / maxWithSign( ( *sig_x ) ) ); + norm_x += ( singularVectors[jCh][currChannel] * singularVectors[jCh][currChannel] ); + } + ( *g ) = -( singularVectors[currChannel][idx] >= 0 ? 1 : ( -1 ) ) * sqrtf( norm_x ); + r = ( *g ) * singularVectors[currChannel][idx] - norm_x; + singularVectors[currChannel][idx] = ( singularVectors[currChannel][idx] - ( *g ) ); + + for ( iCh = currChannel + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ + { + norm_x = 0.0f; + for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ + { + norm_x += ( singularVectors[jCh][currChannel] * singularVectors[jCh][iCh] ); + } + + f = norm_x / maxWithSign( r ); + + + for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ + { + singularVectors[jCh][iCh] += ( f * singularVectors[jCh][currChannel] ); + } + } + + + for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ + { + singularVectors[jCh][currChannel] = ( singularVectors[jCh][currChannel] * ( *sig_x ) ); + } + } + + singularValues[currChannel] = ( ( *sig_x ) * ( *g ) ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * biDiagonalReductionRight() + * + * + *-------------------------------------------------------------------------*/ + +static void biDiagonalReductionRight( + float singularVectors[][MAX_OUTPUT_CHANNELS], + float secDiag[MAX_OUTPUT_CHANNELS], + const int16_t nChannelsL, + const int16_t nChannelsC, + const int16_t currChannel, + float *sig_x, + float *g ) +{ + int16_t iCh, jCh, idx; + float norm_x, r; + + /* Setting values to 0 */ + ( *sig_x ) = 0.0f; + ( *g ) = 0.0f; + + if ( currChannel < nChannelsL && currChannel != ( nChannelsC - 1 ) ) /* i <=m && i !=n */ + { + idx = currChannel + 1; + + for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ + { + ( *sig_x ) += fabsf( singularVectors[currChannel][jCh] ); + } + + if ( ( *sig_x ) ) /*(fabsf(*sig_x) > EPSILON * fabsf(*sig_x)) { */ + { + norm_x = 0.0f; + + for ( jCh = idx; jCh < nChannelsC; jCh++ ) /*nChannelsC */ + { + singularVectors[currChannel][jCh] = ( singularVectors[currChannel][jCh] / maxWithSign( ( *sig_x ) ) ); + norm_x += ( singularVectors[currChannel][jCh] * singularVectors[currChannel][jCh] ); + } + ( *g ) = -( singularVectors[currChannel][idx] >= 0 ? 1 : ( -1 ) ) * sqrtf( norm_x ); + r = ( *g ) * singularVectors[currChannel][idx] - norm_x; + singularVectors[currChannel][idx] = ( singularVectors[currChannel][idx] - ( *g ) ); + + for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ + { + secDiag[jCh] = singularVectors[currChannel][jCh] / maxWithSign( r ); + } + + for ( iCh = currChannel + 1; iCh < nChannelsL; iCh++ ) /* nChannelsL */ + { + norm_x = 0.0f; + for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ + { + norm_x += ( singularVectors[iCh][jCh] * singularVectors[currChannel][jCh] ); + } + + for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ + { + singularVectors[iCh][jCh] += ( norm_x * secDiag[jCh] ); + } + } + + for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ + { + singularVectors[currChannel][jCh] = ( singularVectors[currChannel][jCh] * ( *sig_x ) ); + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * singularVectorsAccumulationLeft() + * + * + *-------------------------------------------------------------------------*/ + +static void singularVectorsAccumulationLeft( + float singularVectors_Left[][MAX_OUTPUT_CHANNELS], + float singularValues[MAX_OUTPUT_CHANNELS], + const int16_t nChannelsL, + const int16_t nChannelsC ) +{ + int16_t nCh, iCh, k; + int16_t nChannels; + float norm_y, t_jj, t_ii; + + /* Processing */ + nChannels = min( nChannelsL, nChannelsC ); /* min(nChannelsL,ChannelsC) */ + + for ( nCh = nChannels - 1; nCh >= 0; nCh-- ) /* min(nChannelsL,ChannelsC) */ + { + t_ii = singularValues[nCh]; + + for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ + { + singularVectors_Left[nCh][iCh] = 0.0f; + } + + if ( t_ii ) /*if (fabsf(t_ii) > EPSILON *fabsf(t_ii)) {*/ + { + t_ii = 1.0f / maxWithSign( t_ii ); + + + for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ + { + norm_y = 0.0f; + for ( k = nCh + 1; k < nChannelsL; k++ ) /* nChannelsL */ + { + norm_y += ( singularVectors_Left[k][nCh] * singularVectors_Left[k][iCh] ); + } + t_jj = t_ii * norm_y / maxWithSign( singularVectors_Left[nCh][nCh] ); + + for ( k = nCh; k < nChannelsL; k++ ) /* nChannelsL */ + { + singularVectors_Left[k][iCh] += ( t_jj * singularVectors_Left[k][nCh] ); + } + } + + for ( iCh = nCh; iCh < nChannelsL; iCh++ ) /* nChannelsL */ + { + singularVectors_Left[iCh][nCh] = ( singularVectors_Left[iCh][nCh] * t_ii ); + } + } + else + { + for ( iCh = nCh; iCh < nChannelsL; iCh++ ) /* nChannelsL */ + { + singularVectors_Left[iCh][nCh] = 0.0f; + } + } + + ++singularVectors_Left[nCh][nCh]; + } + + return; +} + + +/*------------------------------------------------------------------------- + * singularVectorsAccumulationRight() + * + * + *-------------------------------------------------------------------------*/ + +static void singularVectorsAccumulationRight( + float singularVectors_Left[][MAX_OUTPUT_CHANNELS], + float singularVectors_Right[][MAX_OUTPUT_CHANNELS], + float secDiag[MAX_OUTPUT_CHANNELS], + const int16_t nChannelsC ) +{ + int16_t nCh, iCh, k; + int16_t nChannels; + float norm_y, t_ii, ratio; + + /* Processing */ + nChannels = nChannelsC; /* nChannelsC */ + + /* avoid compiler warning */ + t_ii = secDiag[nChannels - 1]; + + for ( nCh = nChannels - 1; nCh >= 0; nCh-- ) /* nChannelsC, min(nChannelsLmnChannelsC) otherwise */ + { + + if ( nCh < nChannelsC - 1 ) /* nChannelsC */ + { + if ( t_ii ) /*if (fabsf(t_ii) > EPSILON *fabsf(t_ii)) {*/ + { + + for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC*/ + { + ratio = singularVectors_Left[nCh][iCh] / maxWithSign( singularVectors_Left[nCh][nCh + 1] ); + singularVectors_Right[iCh][nCh] = ratio / maxWithSign( t_ii ); + } + + for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ + { + norm_y = 0.0f; + + for ( k = nCh + 1; k < nChannelsC; k++ ) /* nChannelsC */ + { + norm_y += ( singularVectors_Left[nCh][k] * singularVectors_Right[k][iCh] ); + } + + for ( k = nCh + 1; k < nChannelsC; k++ ) /* nChannelsC */ + { + singularVectors_Right[k][iCh] += ( norm_y * singularVectors_Right[k][nCh] ); + } + } + } + + for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ + { + singularVectors_Right[nCh][iCh] = singularVectors_Right[iCh][nCh] = 0.0f; + } + } + singularVectors_Right[nCh][nCh] = 1.0f; + t_ii = secDiag[nCh]; + } + + return; +} + + +/*------------------------------------------------------------------------- + * GivensRotation() + * + * + *-------------------------------------------------------------------------*/ + +static float GivensRotation( + const float x, + const float z ) +{ + float x_abs, z_abs; + float cotan, tan, r; + x_abs = fabsf( x ); + z_abs = fabsf( z ); + if ( x_abs <= CONVERGENCE_FACTOR * x_abs && z_abs <= CONVERGENCE_FACTOR * z_abs ) + { + r = 0.0f; + } + else if ( x_abs >= z_abs ) + { + if ( x_abs <= SVD_MINIMUM_VALUE ) + { + r = 0.0f; + } + else + { + cotan = z_abs / ( x_abs ); + r = x_abs * sqrtf( 1.0f + cotan * cotan ); + } + } + else + { + if ( z_abs <= SVD_MINIMUM_VALUE ) + { + r = 0.0f; + } + else + { + tan = x_abs / ( z_abs ); + r = z_abs * sqrtf( 1.0f + tan * tan ); + } + } + + return ( r ); +} + + +/*------------------------------------------------------------------------- + * maxWithSign() + * + * + *-------------------------------------------------------------------------*/ + +static float maxWithSign( + const float a ) +{ + if ( fabsf( a ) > SVD_MINIMUM_VALUE ) + { + return a; + } + else if ( a < 0.0f ) + { + return -SVD_MINIMUM_VALUE; + } + else + { + return SVD_MINIMUM_VALUE; + } +} + + +/*------------------------------------------------------------------------- + * flushToZeroArray() + * + * + *-------------------------------------------------------------------------*/ + +static void flushToZeroArray( + float arr[MAX_OUTPUT_CHANNELS], + const int16_t length ) +{ + int16_t i; + + for ( i = 0; i < length; ++i ) + { + if ( fabsf( arr[i] ) < SVD_ZERO_FLUSH_THRESHOLD ) + { + arr[i] = 0.0f; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * flushToZeroMat() + * + * + *-------------------------------------------------------------------------*/ + +static void flushToZeroMat( + float mat[][MAX_OUTPUT_CHANNELS], + const int16_t m, + const int16_t n ) +{ + int16_t i, j; + + for ( i = 0; i < m; ++i ) + { + for ( j = 0; j < n; ++j ) + { + if ( fabsf( mat[i][j] ) < SVD_ZERO_FLUSH_THRESHOLD ) + { + mat[i][j] = 0.0f; + } + } + } + + return; +} diff --git a/lib_dec/ivas_tcx_core_dec.c b/lib_dec/ivas_tcx_core_dec.c new file mode 100644 index 0000000000..21a525391d --- /dev/null +++ b/lib_dec/ivas_tcx_core_dec.c @@ -0,0 +1,964 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "stat_dec.h" +#include "wmops.h" +#include "basop_proto_func.h" +#include "stat_com.h" +#include "ivas_prot.h" + +/*defne FIX_IVAS_337*/ // TODO: needs more work + +/*-------------------------------------------------------------* + * Local prototypes + *-------------------------------------------------------------*/ + +static void dec_prm_tcx( Decoder_State *st, int16_t param[], int16_t param_lpc[], int16_t *total_nbbits, int16_t *bitsRead ); + + +/*-------------------------------------------------------------* + * stereo_tcx_init_dec() + * + * Initialize stereo TCX decoder + *-------------------------------------------------------------*/ + +void stereo_tcx_init_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t is_mct, /* i : MCT mode flag */ + const int16_t last_element_mode /* i : element mode of previous frame */ +) +{ + int16_t frame_size_index; + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + st->rate_switching_init = 0; + st->m_frame_type = ACTIVE_FRAME; + st->core_brate = st->total_brate; + + /*sampling rate*/ + st->sr_core = getCoreSamplerateMode2( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->flag_ACELP16k, st->rf_flag ); + st->fscale = sr2fscale( st->sr_core ); + + /*frame size*/ + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + hTcxDec->L_frameTCX = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); + + if ( ( st->L_frame == L_FRAME16k && ( st->bits_frame_nominal * FRAMES_PER_SEC ) <= MAX_ACELP_BRATE ) || ( st->tcxonly && ( st->sr_core == 32000 || st->sr_core == INT_FS_16k ) ) ) + { + st->nb_subfr = NB_SUBFR16k; + } + else + { + st->nb_subfr = NB_SUBFR; + } + + /*TCX tools*/ + st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_flag ); + st->hTcxCfg->resq = getResq( st->bits_frame_nominal * FRAMES_PER_SEC ); + hTcxDec->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_flag, st->element_mode ); + st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_flag, st->mct_chan_mode ); + if ( hTcxLtpDec != NULL ) + { + hTcxLtpDec->tcxltp = getTcxLtp( st->sr_core ); + } + + if ( st->element_mode == IVAS_SCE ) + { + st->tcxonly = getTcxonly( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, is_mct ); + + /* LPC quantization */ + if ( st->sr_core <= INT_FS_16k && st->tcxonly == 0 ) + { + st->lpcQuantization = 1; + } + else + { + st->lpcQuantization = 0; + } + + if ( st->tcxonly == 0 ) + { + st->numlpc = 1; + } + else + { + st->numlpc = 2; + } + } + + if ( ( st->bits_frame_nominal != st->last_bits_frame_nominal ) || ( st->bwidth != st->last_bwidth ) || ( st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE && !( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) ) || ( st->idchan == 1 && st->element_mode == IVAS_CPE_MDCT && last_element_mode != IVAS_CPE_MDCT ) ) + { + /*re-initialization*/ + st->rate_switching_init = 1; + + /* Identify frame type - TCX Reconfiguration */ + for ( frame_size_index = 0; frame_size_index < FRAME_SIZE_NB; frame_size_index++ ) + { + if ( frame_size_index < FRAME_SIZE_NB - 1 ) + { + if ( ( FrameSizeConfig[frame_size_index].frame_bits <= st->bits_frame_nominal ) && ( FrameSizeConfig[frame_size_index + 1].frame_bits > st->bits_frame_nominal ) ) + { + break; + } + } + else + { + if ( FrameSizeConfig[frame_size_index].frame_bits <= st->bits_frame_nominal ) + { + break; + } + } + } + + /* Reconfigure Core */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + mode_switch_decoder_LPD( st, st->bwidth, st->bits_frame_nominal * FRAMES_PER_SEC, st->last_bits_frame_nominal * FRAMES_PER_SEC, frame_size_index, is_mct, last_element_mode ); +#else + mode_switch_decoder_LPD( st, st->bwidth, st->bits_frame_nominal * FRAMES_PER_SEC, st->last_bits_frame_nominal * FRAMES_PER_SEC, frame_size_index, is_mct ); +#endif + } + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_tcx_core_dec() + * + * stereo TCX decoder + *-------------------------------------------------------------------*/ + +void stereo_tcx_core_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const FRAME_MODE frameMode, /* i : Decoder frame mode */ + float *signal_out, /* o : synthesis @internal_Fs */ + float *signal_outFB, /* o : synthesis @output_Fs */ + float pitch_buf[], /* o : floating pitch for each subframe */ + const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ + STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ + const int16_t last_element_mode, /* i : last element mode */ + const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ + STEREO_CNG_DEC_HANDLE hStereoCng, /* i : Stereo CNG handle */ + const int16_t nchan_out /* i : number of output channels */ +) +{ + int16_t i, k; + + /*Bitstream*/ + int16_t total_nbbits, bitsRead; + int16_t *prm, param[DEC_NPRM_DIV * NB_DIV]; + int16_t param_lpc[NPRM_LPC_NEW]; + + /*LPC*/ + int16_t LSF_Q_prediction; /* o : LSF prediction mode */ + float lsf[( NB_DIV + 1 ) * M], lsp[( NB_DIV + 1 ) * M], lspmid[M], lsfmid[M]; + float lspnew_uw[NB_DIV * M], lsfnew_uw[NB_DIV * M]; + float Aq[( NB_SUBFR16k + 1 ) * ( M + 1 )]; + int16_t pitch[NB_SUBFR16k]; + float pit_gain[NB_SUBFR16k]; + Word16 Aind[M + 1], lspind[M]; + + /*Synth*/ + float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; + float *synth; + float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; + float *synthFB; + + /*Concealment*/ + int16_t bfi; +#ifdef FIX_IVAS_337 /*IVAS-337 consider BER */ + int16_t tcx_last_overlap_mode, tcx_current_overlap_mode; +#endif + + float psd[L_FRAME16k], psd_part[NPART_SHAPING]; + + TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + wmops_sub_start( "stereo_tcx_core_dec" ); + + /*Sanity check*/ + assert( !( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) ); /*Active frame*/ + assert( st->rf_flag == 0 ); + assert( st->prev_use_partial_copy == 0 ); /* No channel aware mode */ + assert( st->codec_mode == MODE1 ); /* must be in Mode 1 */ + assert( st->mdct_sw == MODE1 ); /* must be switched to TCX in MODE1 */ + + bfi = 0; + + /*--------------------------------------------------------------------------------* + * Initialization or re-configuration of Stereo TCX + *--------------------------------------------------------------------------------*/ + + stereo_tcx_init_dec( st, 0, last_element_mode ); + + /*--------------------------------------------------------------------------------* + * Initializations + *--------------------------------------------------------------------------------*/ + + total_nbbits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + bitsRead = 0; + LSF_Q_prediction = -1; /* to avoid compilation warnings */ + + if ( frameMode == FRAMEMODE_NORMAL ) + { + st->m_decodeMode = DEC_NO_FRAM_LOSS; + bfi = 0; + } + + if ( frameMode == FRAMEMODE_MISSING ) + { + st->m_decodeMode = DEC_CONCEALMENT_EXT; + bfi = 1; + } + + /* for bass postfilter */ + if ( st->tcxonly ) + { + st->p_bpf_noise_buf = NULL; + } + else + { + st->p_bpf_noise_buf = st->bpf_noise_buf; + set_s( pitch, L_SUBFR, st->nb_subfr ); + set_zero( pit_gain, st->nb_subfr ); + } + + /* Initialize pointers */ + synth = synth_buf + hTcxDec->old_synth_len; + synthFB = synth_bufFB + hTcxDec->old_synth_lenFB; + mvr2r( hTcxDec->old_synth, synth_buf, hTcxDec->old_synth_len ); + mvr2r( hTcxDec->old_synthFB, synth_bufFB, hTcxDec->old_synth_lenFB ); + set_zero( synth, L_FRAME_PLUS + M ); + set_zero( synthFB, L_FRAME_PLUS + M ); + +#ifdef DEBUG_MODE_INFO_PLC + dbgwrite( synth_buf, sizeof( float ), OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M, 1, "res/synth_buf_init" ); + dbgwrite( synth_bufFB, sizeof( float ), OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M, 1, "res/synthFB_buf_init" ); +#endif + + /*--------------------------------------------------------------------------------* + * BITSTREAM DECODING + *--------------------------------------------------------------------------------*/ + + if ( !bfi ) + { + st->second_last_core = st->last_core; +#ifdef FIX_IVAS_337 /*IVAS-337 consider BER */ + tcx_last_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode; + tcx_current_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; +#endif + + dec_prm_tcx( st, param, param_lpc, &total_nbbits, &bitsRead ); + +#ifdef FIX_IVAS_337 /*IVAS-337 consider BER */ + if ( !st->rate_switching_init && st->BER_detect ) + { + st->coder_type = st->last_coder_type; + st->last_core = st->second_last_core; + st->hTcxCfg->tcx_last_overlap_mode = tcx_last_overlap_mode; + st->hTcxCfg->tcx_curr_overlap_mode = tcx_current_overlap_mode; + st->bfi = 1; + bfi = 1; + st->flagGuidedAcelp = 0; + st->nbLostCmpt++; + st->core_brate = st->last_core_brate; + st->core = GetPLCModeDecision( st ); + } +#endif + } + else + { + if ( st->nbLostCmpt > 1 ) + { + st->flagGuidedAcelp = 0; + } + + /* PLC: [Common: mode decision] + * PLC: Decide which Concealment to use. Update pitch lags if needed */ + st->core = GetPLCModeDecision( st ); + } + + /*--------------------------------------------------------------------------------* + * LPC PARAMETERS + *--------------------------------------------------------------------------------*/ + + st->acelp_cfg.midLpc = 0; + + if ( !bfi ) + { + if ( hTcxDec->enableTcxLpc ) + { + int16_t tcx_lpc_cdk; + + if ( bfi && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) + { + tcx_lpc_cdk = tcxlpc_get_cdk( GENERIC ); + } + else + { + tcx_lpc_cdk = tcxlpc_get_cdk( st->coder_type ); + } + + mvr2r( st->lsf_old, &lsf[0], M ); + mvr2r( st->lsp_old, &lsp[0], M ); + + D_lsf_tcxlpc( param_lpc, &lsf[M], lspind, st->narrowBand, tcx_lpc_cdk, st->mem_MA ); + + lsf2lsp( &lsf[M], &lsp[M], M, st->sr_core ); + + lsf_update_memory( st->narrowBand, &lsf[M], st->mem_MA, st->mem_MA ); + mvr2r( &lsf[M], st->mem_AR, M ); + hTcxDec->envWeighted = 1; + + E_LPC_lsp_unweight( &lsp[M], lspnew_uw, lsfnew_uw, 1.0f / st->gamma ); + } + else + { + if ( hTcxDec->envWeighted ) + { + mvr2r( st->lspold_uw, st->lsp_old, M ); + mvr2r( st->lsfold_uw, st->lsf_old, M ); + hTcxDec->envWeighted = 0; + } + + lpc_unquantize( st, lsf, lsp, param_lpc, lspmid, lsfmid, AUDIO, &LSF_Q_prediction ); + + for ( k = 0; k < st->numlpc; ++k ) + { + mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); + mvr2r( &lsf[( k + 1 ) * M], &lsfnew_uw[k * M], M ); + } + } + + /* PLC: [LPD: LPC concealment] built the moving average for the LPC concealment */ + for ( k = 0; k < st->numlpc; k++ ) + { + for ( i = 0; i < M; i++ ) + { + st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsfnew_uw[k * M + i] ) / 3; + st->lsfoldbfi1[i] = st->lsfoldbfi0[i]; + st->lsfoldbfi0[i] = lsfnew_uw[k * M + i]; + } + } + } + else + { + /* PLC: [LPD: LPC concealment] Conceal the LPC from the lost frame */ + const float *lsfBase; /* base for differential lsf coding */ + + if ( st->tcxonly == 0 || st->core < TCX_10_CORE ) + { + st->numlpc = 1; + } + else + { + st->numlpc = 2; + } + + if ( st->nbLostCmpt == 1 ) + { + mvr2r( st->lsf_old, st->old_lsf_q_cng, M ); + mvr2r( st->lsp_old, st->old_lsp_q_cng, M ); + } + + lsfBase = PlcGetlsfBase( st->lpcQuantization, st->narrowBand, st->sr_core ); + + dlpc_bfi( st->L_frame, lsfnew_uw, st->lsfold_uw, st->last_good, st->nbLostCmpt, st->mem_MA, st->mem_AR, &( st->stab_fac ), st->lsf_adaptive_mean, st->numlpc, st->lsf_cng, st->plcBackgroundNoiseUpdated, st->lsf_q_cng, st->old_lsf_q_cng, lsfBase ); + + hTcxDec->envWeighted = 0; + + mvr2r( st->lspold_uw, lsp, M ); + mvr2r( st->lsfold_uw, lsf, M ); + + for ( k = 0; k < st->numlpc; k++ ) + { + mvr2r( &lsfnew_uw[k * M], &lsf[( k + 1 ) * M], M ); + + lsf2lsp( &lsf[( k + 1 ) * M], &lsp[( k + 1 ) * M], M, st->sr_core ); + lsf2lsp( st->lsf_q_cng, st->lsp_q_cng, M, st->sr_core ); + + mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); + } + } + + /*---------------------------------------------------------------* + * Rate switching + *---------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + mvr2r( &( lsf[M] ), &( lsf[0] ), M ); + mvr2r( &( lsp[M] ), &( lsp[0] ), M ); + mvr2r( &( lsf[M] ), st->lsf_old, M ); + mvr2r( &( lsp[M] ), st->lsp_old, M ); + mvr2r( &( lsf[M] ), lsfmid, M ); + mvr2r( &( lsp[M] ), lspmid, M ); + lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); + } + + if ( st->enablePlcWaveadjust && bfi ) + { + st->hPlcInfo->nbLostCmpt++; + } + + /*--------------------------------------------------------------------------------* + * TD-TCX concealment + *--------------------------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + assert( bfi ); /*must only happen in BFI*/ + + if ( !st->tcxonly ) + { + /*LPC interpolation*/ + int_lsp( st->L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); + int_lsp( st->L_frame, st->old_lsp_q_cng, st->lsp_q_cng, st->Aq_cng, M, interpol_frac_12k8, 0 ); + } + + /* PLC: [TCX: TD PLC] */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + con_tcx( st, &synthFB[0], -1.f, NULL, 0, NULL ); +#else + con_tcx( st, &synthFB[0], -1.f, NULL, 0 ); +#endif + lerp( synthFB, synth, st->L_frame, hTcxDec->L_frameTCX ); + st->con_tcx = 1; + set_f( &st->mem_pitch_gain[2], st->lp_gainp, st->nb_subfr ); + + /* LPC for ACELP/BWE */ + if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) + { + mvr2r( Aq, st->mem_Aq, st->nb_subfr * ( M + 1 ) ); + } + + /* PLC: [TCX: Tonal Concealment] */ + /* Signal that this frame is not TCX */ + if ( st->hTonalMDCTConc != NULL ) + { + TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, 0, 0, 0, 0 ); + } + } + + /*--------------------------------------------------------------------------------* + * TCX20 + *--------------------------------------------------------------------------------*/ + + /* Set pointer to parameters */ + prm = param; + if ( st->core == TCX_20_CORE ) + { + /* Stability Factor */ + if ( !bfi ) + { + st->stab_fac = lsf_stab( &lsf[M], &lsf[0], 0, st->L_frame ); + } + + if ( hTcxDec->enableTcxLpc ) + { + /* Convert quantized lsp to A */ + lsp2a_stab( &lsp[M], Aq, M ); + } + else + { + if ( !st->tcxonly ) + { + if ( !bfi && st->prev_bfi && !( st->safety_net ) && st->rate_switching_reset ) + { + /* diffuse LPC power on rate switching*/ + RecLpcSpecPowDiffuseLc( &lsp[M], &lsp[0], &lsf[M], st, 0 ); + int_lsp( st->L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); + mvr2r( &lsf[M], lsfnew_uw, M ); + } + else + { + /* LPC Interpolation for TCX */ + E_LPC_int_lpc_tcx( &lsp[0], &lsp[M], Aq ); + } + } + else + { + lsp2a_stab( &lsp[M], Aq, M ); + } + } + + if ( !bfi && hTcxDec->tcx_lpc_shaped_ari ) + { + basop_E_LPC_f_lsp_a_conversion( lspind, Aind, M ); + } + + /* TCX decoder */ + decoder_tcx( st, prm, Aq, Aind, &synth[0], &synthFB[0], bfi, 0, sba_dirac_stereo_flag ); + } + + /*--------------------------------------------------------------------------------* + * TCX10 + *--------------------------------------------------------------------------------*/ + + if ( st->core == TCX_10_CORE ) + { + prm = NULL; /* just to avoid MSVC warnings */ + + for ( k = 0; k < 2; k++ ) + { + /* Set pointer to parameters */ + prm = param + ( k * DEC_NPRM_DIV ); + + /* Stability Factor */ + if ( !bfi ) + { + st->stab_fac = lsf_stab( &lsf[( k + 1 ) * M], &lsf[k * M], 0, st->L_frame ); + } + + lsp2a_stab( &lsp[( k + 1 ) * M], Aq, M ); + { + IGFDecRestoreTCX10SubFrameData( st->hIGFDec, k ); + } + + /* TCX decoder */ + decoder_tcx( st, prm, Aq, Aind, &synth[k * st->L_frame / 2], &synthFB[k * hTcxDec->L_frameTCX / 2], bfi, k, sba_dirac_stereo_flag ); + } + } + + /*--------------------------------------------------------------------------------* + * Post-processing + *--------------------------------------------------------------------------------*/ + + if ( st->core == TCX_10_CORE || st->core == TCX_20_CORE ) + { + if ( st->enablePlcWaveadjust || /* bfi */ + ( st->last_total_brate >= HQ_48k && /* recovery */ + st->last_codec_mode == MODE2 ) ) + { + /* waveform adjustment */ + concealment_signal_tuning( st, bfi, synthFB, st->last_core_bfi ); + + if ( ( bfi || st->prev_bfi ) && st->hPlcInfo->Pitch && st->hPlcInfo->concealment_method == TCX_NONTONAL ) + { + lerp( synthFB, synth, st->L_frame, hTcxDec->L_frameTCX ); + + if ( !bfi && st->prev_bfi ) + { + st->hPlcInfo->Pitch = 0; + } + } + } + + if ( !bfi && st->hTonalMDCTConc != NULL ) + { + TonalMDCTConceal_SaveTimeSignal( st->hTonalMDCTConc, synthFB, hTcxDec->L_frameTCX ); + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + decoder_tcx_post( st, synth, synthFB, Aq, bfi, 0 ); +#else + decoder_tcx_post( st, synth, synthFB, Aq, bfi ); +#endif + + if ( st->core == TCX_20_CORE ) + { + /* LPC Interpolation for BWE/post-processing */ + if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) + { + int_lsp( st->L_frame, st->lspold_uw, lspnew_uw, Aq, M, interpol_frac_12k8, 0 ); + mvr2r( Aq, st->mem_Aq, st->nb_subfr * ( M + 1 ) ); + } + } + } + + /* PLC: [Common: Classification] */ + /* the classifier buffer is always updated if the sr is at + 16000 or below - the classification itself is just performed if(!st->tcxonly ) */ + if ( st->sr_core <= INT_FS_16k ) + { + if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || ( st->tcxonly && st->bfi ) ) + { + float pitch_C[4]; + + /* note: the classifier needs the pitch only for tcx_only == 0, i.e. not for TCX10 */ + set_f( pitch_C, floorf( st->old_fpitch + 0.5f ), 4 ); + + /* note: codec_mode is foced to MODE2, since FEC_clas_estim() considers only TCX being in Mode2*/ + FEC_clas_estim( synth, pitch_C, st->L_frame, st->tcxonly ? GENERIC : st->core_ext_mode, MODE2, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, hTcxLtpDec->tcxltp ? hTcxDec->tcxltp_last_gain_unmodified : -1.0f, st->narrowBand, CLASSIFIER_TCX, bfi, st->preemph_fac, st->tcxonly, st->last_core_brate, -1 ); + } + } + + /*--------------------------------------------------------------------------------* + * Updates + *--------------------------------------------------------------------------------*/ + + if ( bfi && st->last_core != ACELP_CORE ) + { + /* Update FEC_scale_syn parameters */ + if ( hTcxLtpDec->tcxltp_gain == 0 ) + { + fer_energy( st->L_frame, UNVOICED, synth, (float) ( st->L_frame / 2 ), &st->enr_old, st->L_frame ); + } + else + { + fer_energy( st->L_frame, st->clas_dec, synth, st->old_fpitch, &st->enr_old, st->L_frame ); + } + } + + if ( !bfi && st->clas_dec >= VOICED_TRANSITION && st->clas_dec < INACTIVE_CLAS ) + { + /* use latest LPC set */ + st->old_enr_LP = enr_1_Az( Aq, L_SUBFR ); + } + + /* Update past buffers */ + mvr2r( synth_buf + st->L_frame, hTcxDec->old_synth, hTcxDec->old_synth_len ); + mvr2r( hTcxDec->old_synthFB + hTcxDec->L_frameTCX - NS2SA( st->output_Fs, PH_ECU_MEM_NS ), hTcxDec->synth_history, NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); + mvr2r( synth_bufFB + hTcxDec->L_frameTCX, hTcxDec->old_synthFB, hTcxDec->old_synth_lenFB ); + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB + hTcxDec->old_synth_lenFB, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + + mvr2r( &lspnew_uw[( st->numlpc - 1 ) * M], st->lspold_uw, M ); + mvr2r( &lsfnew_uw[( st->numlpc - 1 ) * M], st->lsfold_uw, M ); + + if ( bfi == 1 ) + { + mvr2r( st->lspold_uw, st->lsp_old, M ); /* for recovery */ + mvr2r( st->lsfold_uw, st->lsf_old, M ); /* for recovery */ + } + else + { + mvr2r( &lsp[st->numlpc * M], st->lsp_old, M ); + mvr2r( &lsf[st->numlpc * M], st->lsf_old, M ); + } + mvr2r( st->lsp_q_cng, st->old_lsp_q_cng, M ); + mvr2r( st->lsf_q_cng, st->old_lsf_q_cng, M ); + + /* Update CNG parameters */ + if ( !st->tcxonly && st->hTdCngDec != NULL ) + { + /* update CNG parameters in active frames */ + if ( st->bwidth == NB && hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) + { + float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; + assert( st->L_frame == L_FRAME ); + + mvr2r( synth + L_FRAME - L_LP, buf, L_LP ); + tmp = synth[L_FRAME - L_LP - 1]; + preemph( buf, st->preemph_fac, L_LP, &tmp ); + autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); + lag_wind( r, M, INT_FS_12k8, LAGW_WEAK ); + lev_dur( A, r, M, NULL ); + a2lsp_stab( A, lsptmp, &lspnew_uw[0] ); + residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); + + if ( st->hTdCngDec != NULL ) + { + cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); + } + } + else if ( st->hTdCngDec != NULL ) + { + cng_params_upd( &lsp[M], st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); + } + + /* Set 16k LSP flag for CNG buffer */ + st->hTdCngDec->ho_16k_lsp[st->hTdCngDec->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); + } + st->last_is_cng = 0; + + /* Postfiltering */ + post_decoder( st, synth_buf, pit_gain, pitch, signal_out, st->p_bpf_noise_buf ); + + if ( signal_outFB ) + { + mvr2r( synthFB, signal_outFB, hTcxDec->L_frameTCX ); + } + + if ( !bfi ) + { + if ( st->enablePlcWaveadjust ) + { + st->hPlcInfo->nbLostCmpt = 0; + } + + if ( param[1 + NOISE_FILL_RANGES] != 0 ) + { + set_f( pitch_buf, hTcxLtpDec->tcxltp_pitch_int + (float) hTcxLtpDec->tcxltp_pitch_fr / (float) st->pit_res_max, NB_SUBFR16k ); + } + else + { + set_f( pitch_buf, L_SUBFR, NB_SUBFR16k ); + } + } + + if ( bfi ) + { + /*"LPD dec - All BFI"*/ + bitsRead = 0; /*to avoid empty counting */ + } + + /* updates */ + st->last_voice_factor = 0.0f; + st->last_coder_type = st->coder_type; + + /* -------------------------------------------------------------- * + * In FFT domain: perform noise estimation during active frames + * -------------------------------------------------------------- */ + + if ( st->hFdCngDec != NULL && ( st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) && st->total_brate <= MAX_ACELP_BRATE ) + { + noisy_speech_detection( st->hFdCngDec, st->VAD && st->m_frame_type == ACTIVE_FRAME, signal_out ); + + st->hFdCngDec->hFdCngCom->likelihood_noisy_speech = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; + + st->lp_noise = st->hFdCngDec->lp_noise; + + if ( st->element_mode != IVAS_CPE_TD ) + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( signal_out, NULL, NULL, NULL, st, st->bfi, 0 ); +#else + ApplyFdCng( signal_out, NULL, NULL, st, st->bfi, 0 ); +#endif + } + + /* Generate additional comfort noise to mask potential coding artefacts */ + if ( st->m_frame_type == ACTIVE_FRAME && st->flag_cna && !st->cna_dirac_flag ) + { + if ( st->element_mode == IVAS_CPE_TD && nchan_out == 2 ) + { + if ( st->element_mode != last_element_mode ) + { + /* Clear memory for secondary channel CNA */ + set_f( hStereoCng->olapBufferSynth22, 0.0f, st->hFdCngDec->hFdCngCom->frameSize / 2 ); + } + expand_range( st->hFdCngDec->msPsd, psd_part, st->hFdCngDec->nFFTpart_shaping ); + scalebands( psd_part, st->hFdCngDec->part_shaping, st->hFdCngDec->nFFTpart_shaping, st->hFdCngDec->midband_shaping, st->hFdCngDec->nFFTpart_shaping, st->hFdCngDec->hFdCngCom->stopFFTbin - st->hFdCngDec->hFdCngCom->startBand, psd, 1 ); + generate_stereo_masking_noise( signal_out, st, hStereoTD, flag_sec_CNA, 0, hStereoCng, nchan_out ); + } + else if ( st->element_mode != IVAS_CPE_DFT ) + { + generate_masking_noise( signal_out, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, hStereoCng, nchan_out ); + } + } + + if ( st->element_mode == IVAS_CPE_TD && st->idchan == 0 ) + { +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + ApplyFdCng( signal_out, NULL, NULL, NULL, st, st->bfi, 0 ); +#else + ApplyFdCng( signal_out, NULL, NULL, st, st->bfi, 0 ); +#endif + } + } + +#ifdef DEBUG_MODE_TCX + { + int16_t tmp[L_FRAME48k]; + static FILE *sP = NULL; + + for ( i = 0; i < hTcxDec->L_frameTCX; i++ ) + { + tmp[i] = (int16_t) ( signal_outFB[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), hTcxDec->L_frameTCX, 1, "./res/stereo_tcx_dec_synthFB.pcm" ); + + for ( i = 0; i < hTcxDec->L_frameTCX; i++ ) + { + tmp[i] = (int16_t) ( signal_out[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), hTcxDec->L_frameTCX, 1, "./res/stereo_tcx_dec_synthLB.pcm" ); + + if ( sP == NULL ) + sP = fopen( "./res/stereo_tcx_core_dec_swicthes.txt", "w" ); + + fprintf( sP, "frame:%d\t mdct_sw=%d\t rf_mode=%d tcxonly=%d\t tcxMode=%d\t core=%d\t, enableTcxLpc=%d\t igf=%d\t envWeighted=%d\t lpcQuantization=%d\t enablePlcWaveadjust=%d\t tcxltp=%d\t fIsTNSAllowed=%d\t tcx_lpc_shaped_ari=%d\t ctx_hm=%d\t \n", frame, st->mdct_sw, 0, st->tcxonly, 0, st->core, hTcxDec->enableTcxLpc, st->igf, hTcxDec->envWeighted, st->lpcQuantization, st->enablePlcWaveadjust, hTcxLtpDec->tcxltp, st->hTcxCfg->fIsTNSAllowed, 0, st->hTcxCfg->ctx_hm ); + } +#endif + + + wmops_sub_end(); + return; +} + + +/*-----------------------------------------------------------------* + * Function dec_prm_tcx() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * decode TCX parameters + *-----------------------------------------------------------------*/ + +static void dec_prm_tcx( + Decoder_State *st, /* i/o: decoder memory state */ + int16_t param[], /* o : decoded parameters */ + int16_t param_lpc[], /* o : LPC parameters */ + int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ + int16_t *bitsRead /* o : number of read bits */ +) +{ + int16_t start_bit_pos, bits_common; + CONTEXT_HM_CONFIG hm_cfg; + int16_t indexBuffer[N_MAX + 1]; +#ifdef DEBUG_MODE_TCX + int16_t nbits_tcx; + static FILE *pF = NULL; + if ( pF == NULL ) + pF = fopen( "./res/stereo_tcx_dec_ind.txt", "w" ); +#endif + + assert( st->mdct_sw == MODE1 ); + + /*--------------------------------------------------------------------------------* + * INIT + *--------------------------------------------------------------------------------*/ + + hm_cfg.indexBuffer = indexBuffer; +#ifdef DEBUG_MODE_TCX + fprintf( pF, "== stereo Chan %d - Nominal Bits %d - Allocated Bits %d ==\n", st->idchan, st->bits_frame_nominal, (int16_t) ( st->total_brate / FRAMES_PER_SEC ) ); + fprintf( pF, "stereo Common Header: %d bits\n", st->next_bit_pos ); +#endif + if ( st->element_mode != IVAS_CPE_MDCT ) + { + st->bits_frame_core = (int16_t) ( ( st->total_brate / FRAMES_PER_SEC ) - st->next_bit_pos ); + } + start_bit_pos = st->next_bit_pos; + + /* Init LTP data */ + st->hTcxDec->tcx_hm_LtpPitchLag = -1; + st->hTcxLtpDec->tcxltp_gain = 0.0f; + + /*--------------------------------------------------------------------------------* + * header + *--------------------------------------------------------------------------------*/ + + /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + getTCXMode( st, st, 0 /* <- MCT_flag */ ); +#else + getTCXMode( st, st ); +#endif + + /* last_core for error concealment */ + if ( !st->use_partial_copy && st->element_mode != IVAS_CPE_MDCT ) + { +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + if ( st->core == TCX_20_CORE ) + { + st->last_core_from_bs = get_next_indice( st, 1 ); + } + else + { + st->last_core_from_bs = st->last_core; + } +#else + st->last_core_from_bs = get_next_indice( st, 1 ); /* Store decoder memory of last_core */ +#endif + if ( st->last_core == ACELP_CORE && st->last_core_from_bs != ACELP_CORE ) + { + /* A mismatch between the memory and the last_core + from the bitstream indicates a frame was lost. If prev_bfi is + not set the frame loss occured during CNG and the prev_bfi needs to be set. */ + st->prev_bfi = 1; + } + + st->last_core = st->last_core_from_bs; + + /*for TCX 10 force last_core to be TCX since ACELP as previous core is forbidden*/ + if ( st->core == TCX_10_CORE ) + { + st->last_core = TCX_20_CORE; + } + } + + if ( !st->use_partial_copy ) + { + if ( st->element_mode != IVAS_CPE_MDCT ) + { +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + getTCXWindowing( st->core, st->last_core, st->element_mode, st->hTcxCfg, st ); +#else + getTCXWindowing( st->core, st->last_core, st->hTcxCfg, st ); +#endif + } + st->flagGuidedAcelp = 0; + + if ( st->dec_glr ) + { + st->dec_glr_idx = -1; + } + } + +#ifdef DEBUG_MODE_TCX + fprintf( pF, "\t TCX Header: %d bits: %d %d %d %d\n", st->next_bit_pos - start_bit_pos, st->tcxonly, st->core, st->tcxonly ? st->clas_dec : st->hTcxCfg->coder_type, st->hTcxCfg->tcx_curr_overlap_mode ); + nbits_tcx = st->next_bit_pos; +#endif + + /*--------------------------------------------------------------------------------* + * LPC parameters + *--------------------------------------------------------------------------------*/ + + getLPCparam( st, param_lpc, st, -1, 0 ); + + bits_common = st->next_bit_pos - start_bit_pos; + +#ifdef DEBUG_MODE_TCX + fprintf( pF, "\t TCX LPC: %d bits\n", st->next_bit_pos - nbits_tcx ); +#endif + + /*--------------------------------------------------------------------------------* + * TCX20/10 parameters + *--------------------------------------------------------------------------------*/ + + if ( st->use_partial_copy == 0 ) + { + getTCXparam( st, st, hm_cfg, param, bits_common, start_bit_pos, NULL, NULL, NULL, -1 ); + } + + if ( !st->use_partial_copy ) + { + if ( *total_nbbits - bitsRead[0] < ( st->next_bit_pos - start_bit_pos ) ) + { + st->BER_detect = 1; + st->next_bit_pos = start_bit_pos + *total_nbbits - bitsRead[0]; + } + + bitsRead[0] = st->next_bit_pos - start_bit_pos; + } + + return; +} diff --git a/lib_dec/ivas_td_decorr.c b/lib_dec/ivas_td_decorr.c new file mode 100644 index 0000000000..29b748e4c7 --- /dev/null +++ b/lib_dec/ivas_td_decorr.c @@ -0,0 +1,425 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "math.h" +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +static const float ivas_hadamard_decorr_APD_coeff[IVAS_APD_16_SECT][IVAS_APD_16_SECT] = { + { 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f }, + { 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f }, + { 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f }, + { 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f }, + { 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f }, + { 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f }, + { 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f }, + { 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f }, + { 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f }, + { 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f }, + { 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f }, + { 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f }, + { 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f }, + { 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f }, + { 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f }, + { 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f } +}; + + +/* For R = 3.^([0:obj.parm_APD_nSections-1]/4); */ +const float ivas_three_pow_frac[IVAS_MAX_DECORR_APD_SECTIONS] = { + 1.000000000000000f, + 1.316074013710022f, + 1.732050776481628f, + 2.279507160186768f, + 3.000000000000000f, + 3.948222038857480f, + 5.196152422706630f, + 6.838521170864330f, + 9.000000000000000f, + 11.84466611657240f, + 15.58845726811990f, + 20.51556351259300f, + 27.00000000000000f, + 35.53399834971730f, + 46.76537180435970f, + 61.54669053777900f, +}; + + +/*------------------------------------------------------------------------------------------* + * Local functions declaration + *------------------------------------------------------------------------------------------*/ + +static int16_t ivas_get_APD_filt_orders( const int16_t num_out_chans, const int32_t output_Fs, int16_t *APD_filt_orders ); +static ivas_error ivas_td_decorr_init( ivas_td_decorr_state_t *hTdDecorr, const int16_t num_out_chans, const int16_t ducking_flag ); + + +/*------------------------------------------------------------------------- + * ivas_spar_td_decorr_dec_open() + * + * Allocate and initialize SPAR time domain decorrelator handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_td_decorr_dec_open( + ivas_td_decorr_state_t **hTdDecorr, /* i/o: SPAR Covar. decoder handle */ + const int32_t output_Fs, /* i : output sampling rate */ + const int16_t nchan_internal, /* i : number of internal channels */ + const int16_t ducking_flag /* i : ducking flag */ +) +{ + int16_t i, j, len; + int16_t num_out_chans; + ivas_td_decorr_state_t *hCovState; + ivas_error error; + + num_out_chans = nchan_internal - 1; + + error = IVAS_ERR_OK; + + if ( ( hCovState = (ivas_td_decorr_state_t *) count_malloc( sizeof( ivas_td_decorr_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); + } + + if ( ( hCovState->look_ahead_buf = (float *) count_malloc( sizeof( float ) * (int16_t) ( output_Fs * IVAS_DECORR_PARM_LOOKAHEAD_TAU ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); + } + set_f( hCovState->look_ahead_buf, 0, (int16_t) ( output_Fs * IVAS_DECORR_PARM_LOOKAHEAD_TAU ) ); + + hCovState->num_apd_sections = ivas_get_APD_filt_orders( num_out_chans, output_Fs, hCovState->APD_filt_state[0].order ); + + for ( j = 0; j < num_out_chans; j++ ) + { + for ( i = 0; i < hCovState->num_apd_sections; i++ ) + { + len = hCovState->APD_filt_state[0].order[i]; + + if ( ( hCovState->APD_filt_state[j].state[i] = (float *) count_malloc( sizeof( float ) * len ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); + } + + set_f( hCovState->APD_filt_state[j].state[i], 0, len ); + } + } + + ivas_td_decorr_init( hCovState, num_out_chans, ducking_flag ); + + if ( ducking_flag ) + { + if ( ( error = ivas_spar_transient_det_open( &hCovState->pTrans_det, output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + hCovState->pTrans_det = NULL; + } + + *hTdDecorr = hCovState; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_td_decorr_dec_close() + * + * Deallocate SPAR time domain decorrelator handle + *------------------------------------------------------------------------*/ + +void ivas_spar_td_decorr_dec_close( + ivas_td_decorr_state_t **hTdDecorr /* i/o: SPAR Covar. decoder handle */ +) +{ + int16_t i, j; + + if ( hTdDecorr == NULL || *hTdDecorr == NULL ) + { + return; + } + + count_free( ( *hTdDecorr )->look_ahead_buf ); + ( *hTdDecorr )->look_ahead_buf = NULL; + + for ( j = 0; j < ( *hTdDecorr )->num_apd_outputs; j++ ) + { + for ( i = 0; i < ( *hTdDecorr )->num_apd_sections; i++ ) + { + count_free( ( *hTdDecorr )->APD_filt_state[j].state[i] ); + ( *hTdDecorr )->APD_filt_state[j].state[i] = NULL; + } + } + + if ( ( *hTdDecorr )->pTrans_det != NULL ) + { + ivas_spar_transient_det_close( &( *hTdDecorr )->pTrans_det ); + } + + count_free( ( *hTdDecorr ) ); + ( *hTdDecorr ) = NULL; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_APD_filt_orders() + * + * Calculate the orders of the APD IIR filters and return num APD sections + *-----------------------------------------------------------------------------------------*/ + +static int16_t ivas_get_APD_filt_orders( + const int16_t num_out_chans, + const int32_t output_Fs, + int16_t *APD_filt_orders ) +{ + int16_t i; + int16_t num_apd_sections = 0; + float sum_R, R[IVAS_MAX_DECORR_APD_SECTIONS]; + + switch ( num_out_chans ) + { + case IVAS_TD_DECORR_OUT_1CH: + case IVAS_TD_DECORR_OUT_2CH: + num_apd_sections = IVAS_APD_2_SECT; + break; + case IVAS_TD_DECORR_OUT_3CH: + case IVAS_TD_DECORR_OUT_4CH: + num_apd_sections = IVAS_APD_4_SECT; + break; + + case IVAS_TD_DECORR_OUT_5CH: + case IVAS_TD_DECORR_OUT_6CH: + case IVAS_TD_DECORR_OUT_7CH: + case IVAS_TD_DECORR_OUT_8CH: + num_apd_sections = IVAS_APD_8_SECT; + break; + case IVAS_TD_DECORR_OUT_9CH: + case IVAS_TD_DECORR_OUT_10CH: + case IVAS_TD_DECORR_OUT_11CH: + case IVAS_TD_DECORR_OUT_12CH: + case IVAS_TD_DECORR_OUT_13CH: + case IVAS_TD_DECORR_OUT_14CH: + case IVAS_TD_DECORR_OUT_15CH: + case IVAS_TD_DECORR_OUT_16CH: + num_apd_sections = IVAS_APD_16_SECT; + break; + default: + assert( !"Invalid num out chans" ); + break; + } + + sum_R = 0.0f; + for ( i = 0; i < num_apd_sections; i++ ) + { + R[i] = ivas_three_pow_frac[i]; + sum_R += R[i]; + } + + for ( i = 0; i < num_apd_sections; i++ ) + { + APD_filt_orders[i] = (int16_t) ceil( output_Fs * IVAS_DECORR_PARM_APD_TAU * R[i] / sum_R ); + } + + return num_apd_sections; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_td_decorr_init() + * + * TD decorr Initialisation function + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_td_decorr_init( + ivas_td_decorr_state_t *hTdDecorr, + const int16_t num_out_chans, + const int16_t ducking_flag ) +{ + int16_t i, j; + + hTdDecorr->ducking_flag = ducking_flag; + hTdDecorr->num_apd_outputs = num_out_chans; + + for ( i = 0; i < hTdDecorr->num_apd_outputs; i++ ) + { + for ( j = 0; j < hTdDecorr->num_apd_sections; j++ ) + { + hTdDecorr->APD_filt_state[i].order[j] = hTdDecorr->APD_filt_state[0].order[j]; + hTdDecorr->APD_filt_state[i].coeffs[j] = ivas_hadamard_decorr_APD_coeff[i][j]; + hTdDecorr->APD_filt_state[i].idx[j] = 0; + } + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_td_decorr_APD_iir_filter() + * + * APD IIR filter + *-----------------------------------------------------------------------------------------*/ + +static void ivas_td_decorr_APD_iir_filter( + ivas_td_decorr_APD_filt_state_t *filter_state, + float *pIn_out, + const int16_t num_APD_sections, + const int16_t length ) +{ + int16_t i, k; + int16_t idx; + float *pIn = pIn_out; + float *pOut = pIn_out; + float tmp_pIn_buf_i; + + for ( k = 0; k < num_APD_sections; k++ ) + { + float *pFilt_state = filter_state->state[k]; + float filt_coeff = filter_state->coeffs[k]; + int16_t order = filter_state->order[k]; + + idx = filter_state->idx[k]; + + for ( i = 0; i < length; i++ ) + { + tmp_pIn_buf_i = pIn[i]; + + pOut[i] = pFilt_state[idx] + pIn[i] * filt_coeff; + + pFilt_state[idx++] = tmp_pIn_buf_i - filt_coeff * pOut[i]; + + if ( order == idx ) + { + idx = 0; + } + } + filter_state->idx[k] = idx; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_td_decorr_APD_sections() + * + * TD decorr all pass delay sections + *-----------------------------------------------------------------------------------------*/ + +static void ivas_td_decorr_APD_sections( + ivas_td_decorr_state_t *hTdDecorr, + float **ppOut_pcm, + const int16_t output_frame ) +{ + int16_t i; + + for ( i = 0; i < hTdDecorr->num_apd_outputs; i++ ) + { + ivas_td_decorr_APD_iir_filter( &hTdDecorr->APD_filt_state[i], ppOut_pcm[i], hTdDecorr->num_apd_sections, output_frame ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_td_decorr_process() + * + * TD decorr process call + *-----------------------------------------------------------------------------------------*/ + +void ivas_td_decorr_process( + ivas_td_decorr_state_t *hTdDecorr, /* i/o: SPAR Covar. decoder handle */ + float pcm_in[][L_FRAME48k], /* i : input audio channels */ + float **ppOut_pcm, /* o : output audio channels */ + const int16_t output_frame /* i : output frame length */ +) +{ + int16_t i, j; + int16_t offset; + float in_duck_gain[L_FRAME48k], out_duck_gain[L_FRAME48k]; + + offset = (int16_t) ( output_frame * FRAMES_PER_SEC * IVAS_DECORR_PARM_LOOKAHEAD_TAU ); + + /* Look-ahead delay */ + mvr2r( pcm_in[0], ppOut_pcm[0], output_frame ); + delay_signal( ppOut_pcm[0], output_frame, hTdDecorr->look_ahead_buf, offset ); + + /* In ducking gains */ + if ( hTdDecorr->ducking_flag ) + { + ivas_td_decorr_get_ducking_gains( hTdDecorr->pTrans_det, pcm_in[0], in_duck_gain, out_duck_gain, output_frame, 0 ); + + for ( j = 0; j < output_frame; j++ ) + { + ppOut_pcm[0][j] = ppOut_pcm[0][j] * in_duck_gain[j]; + } + } + + for ( i = 1; i < hTdDecorr->num_apd_outputs; i++ ) + { + mvr2r( ppOut_pcm[0], ppOut_pcm[i], output_frame ); + } + + /* All pass delay section */ + ivas_td_decorr_APD_sections( hTdDecorr, ppOut_pcm, output_frame ); + + /* Out ducking gains */ + if ( hTdDecorr->ducking_flag ) + { + for ( i = 0; i < hTdDecorr->num_apd_outputs; i++ ) + { + for ( j = 0; j < output_frame; j++ ) + { + ppOut_pcm[i][j] = ppOut_pcm[i][j] * out_duck_gain[j]; + } + } + } + + return; +} diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c new file mode 100644 index 0000000000..a2f89e0809 --- /dev/null +++ b/lib_dec/ivas_vbap.c @@ -0,0 +1,1804 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_dec.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define VBAP_SUB_FUNCTION_MEMORY_INIT_FAIL ( -1 ) + +/* 128 is maximum num_speaker_nodes number. This relates to memory optimization and maximum of triplets: + - triplet indices are unsigned_char (see below structs) --> max triplets is 256 + - num_speaker_nodes_internal = num_speaker_nodes + 2 (potential virtual node channels, bottom and top) + - max_num_triplets = 256 = (max_num_ls_internal - 2) * 2 = (max_num_ls) * 2 + --> max_num_ls = 128 + */ +#define VBAP_MAX_NUM_SPEAKER_NODES 128 +#define VBAP_MAX_NUM_TRIPLETS 256 +#define VBAP_EPSILON 0.001f /* The fairly large epsilon is for detecting planes etc and accounts for rounding issues */ +#define VBAP_MAX_PLANES 50 +#define VBAP_MAX_HORIZONTAL_GAP_FOR_PLANE_DETECTION 140.0f +/* If a speaker node is found + - above VBAP_NO_VIRTUAL_SPEAKER_NODE_ELE_LIMIT, no virtual node is used + - above VBAP_DISTRIBUTE_VIRTUAL_SPEAKER_NODE_ELE_LIMIT, energy-spreading virtual node is used + - not above VBAP_DISTRIBUTE_VIRTUAL_SPEAKER_NODE_ELE_LIMIT, energy-omitting virtual node is used + Same applies for both elevations and inclinations, i.e., the two half-spheres. */ +#define VBAP_NO_VIRTUAL_SPEAKER_NODE_ELE_LIMIT 45.0f +#define VBAP_DISTRIBUTE_VIRTUAL_SPEAKER_NODE_ELE_LIMIT 20.0f +#define VBAP_VIRTUAL_BACK_ELE_LIMIT 45.0f +#define VBAP_NOT_VALID_CONNECTION ( -1 ) + +/* Maximum azimuth gap between speaker nodes for detecting zero elevation horizontal plane */ +#define VBAP_MAX_HORIZONTAL_GAP 170u + +#define VBAP_SEARCH_SECTOR_SIZE ( 360.0f / ( VBAP_NUM_SEARCH_SECTORS ) ) + + +enum VirtualSpeakerNodeType +{ + NO_VIRTUAL_SPEAKER_NODE, + VIRTUAL_SPEAKER_NODE_DISCARD_ENERGY, + VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY +}; + +enum ConnectionClass +{ + REGULAR_CONNECTION, + ELEVATED_PLANE_THIN_TRIANGLE_CONNECTION, + CONNECTION_WITH_SPEAKER_NODE_BEHIND +}; + +typedef struct connection_option +{ + int16_t chA; + int16_t chB; + float arc; + float arc_weighted; +} ConnectionOption; + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static uint8_t vector_matrix_multiply_3x3( const float *src_vector, float matrix[3][3], float *result ); + +static void init_speaker_node_direction_data( VBAP_SPEAKER_NODE *speaker_node_data, const float *speaker_node_azi_deg, const float *speaker_node_ele_deg, const int16_t num_speaker_nodes ); + +static int16_t determine_virtual_surface_triplets( const int16_t num_speaker_nodes, const VBAP_SPEAKER_NODE *speaker_node_data, int16_t connections[][2], const int16_t max_num_connections, VBAP_VS_TRIPLET *triplets, int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS], enum SpeakerNodeGroup allowed_group ); + +static void determine_initial_search_indices( const int16_t num_triplets, const float triplet_azidegs[VBAP_MAX_NUM_TRIPLETS], int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS] ); + +static void determine_connections( const int16_t num_speaker_nodes, const VBAP_SPEAKER_NODE *speaker_node_data, int16_t connections[][2], const int16_t max_num_connections, int16_t *group1_count, int16_t *group2_start, int16_t *group2_count ); + +static void formulate_horizontal_connections( const VBAP_SPEAKER_NODE *speaker_node_data, const int16_t num_speaker_nodes, int16_t connections[][2], int16_t *connection_write_index ); + +static void get_half_sphere_connection_options( const VBAP_SPEAKER_NODE *speaker_node_data, const enum SpeakerNodeGroup group, const int16_t num_speaker_nodes, const int16_t num_non_crossing_planes, const float *non_crossing_plane_elevation_deg, ConnectionOption **connection_options_pr, int16_t *num_connection_options ); + +static void formulate_half_sphere_connections( const VBAP_SPEAKER_NODE *speaker_node_data, const int16_t num_speaker_nodes, const enum SpeakerNodeGroup group, int16_t connections[][2], int16_t *connection_write_index, const int16_t max_num_connections, const int16_t num_non_crossing_planes, const float *non_crossing_plane_elevation_deg ); + +static int16_t determine_non_crossing_planes( const int16_t num_speaker_nodes, const VBAP_SPEAKER_NODE *node_data, float *non_crossing_plane_elevation_deg ); + +static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node( VBAP_HANDLE hVBAPdata, const float *speaker_node_azi_deg, const float *speaker_node_ele_deg, enum SpeakerNodeGroup group ); + +static int16_t determine_best_triplet_and_gains( VBAP_SEARCH_STRUCT *search_struct, const float panning_unit_vec[3], const int16_t azi_deg, float gains[3] ); + +static void determine_virtual_speaker_node_division_gains( const int16_t virtual_speaker_node_index, float *virtual_node_division_gains, int16_t connections[][2], const enum VirtualSpeakerNodeType type, const int16_t max_num_connections, const int16_t num_speaker_nodes ); + +static void reorder_triplets( VBAP_VS_TRIPLET *triplets, const int16_t *target_order, const int16_t num_triplets ); + + +/*-------------------------------------------------------------------------* + * vbap_init_data() + * + * Initialize VBAP data structure for the speaker node set + *-------------------------------------------------------------------------*/ + +ivas_error vbap_init_data( + VBAP_HANDLE *hVBAPdata, /* i/o: handle for VBAP data structure that will be initialized */ + const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ + const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ + const int16_t num_speaker_nodes /* i : number of speaker nodes in the set */ +) +{ + /* Variables */ + int16_t connections[VBAP_MAX_NUM_SPEAKER_NODES][2]; + int16_t max_num_connections; + int16_t is_success; + int16_t connection_group1_count; + int16_t connection_group2_start; + int16_t connection_group2_count; + enum VirtualSpeakerNodeType virtual_top_type; + enum VirtualSpeakerNodeType virtual_bottom_type; + enum VirtualSpeakerNodeType virtual_back_type; + float speaker_node_azi_deg_internal[VBAP_MAX_NUM_SPEAKER_NODES]; + float speaker_node_ele_deg_internal[VBAP_MAX_NUM_SPEAKER_NODES]; + VBAP_SPEAKER_NODE speaker_node_data[VBAP_MAX_NUM_SPEAKER_NODES]; + VBAP_DATA *vbap; + + wmops_sub_start( "vbap_init" ); + + /* Basic init checks */ + if ( num_speaker_nodes > VBAP_MAX_NUM_SPEAKER_NODES || num_speaker_nodes < 3 ) + { + hVBAPdata = NULL; + wmops_sub_end(); + /* TODO: are these two paths correct behaviour or should and error be returned ? */ + return IVAS_ERR_OK; + } + if ( !speaker_node_azi_deg || !speaker_node_ele_deg ) + { + hVBAPdata = NULL; + return IVAS_ERR_OK; + } + + /* Allocate VBAP structure */ + if ( ( vbap = (VBAP_HANDLE) count_malloc( sizeof( VBAP_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); + } + + is_success = 1; + vbap->bottom_virtual_speaker_node_index = -1; + vbap->top_virtual_speaker_node_index = -1; + vbap->back_virtual_speaker_node_index = -1; + vbap->bottom_virtual_speaker_node_division_gains = NULL; + vbap->top_virtual_speaker_node_division_gains = NULL; + vbap->back_virtual_speaker_node_division_gains = NULL; + vbap->num_speaker_nodes = num_speaker_nodes; + vbap->num_speaker_nodes_internal = num_speaker_nodes; + + + /* Check if the speaker node setup needs a virtual top or bottom node + (function also increments vbap->num_speaker_nodes_internal when necessary) */ + virtual_bottom_type = check_need_of_virtual_speaker_node( vbap, speaker_node_azi_deg, speaker_node_ele_deg, SPEAKER_NODE_BOTTOM_HALF ); + virtual_top_type = check_need_of_virtual_speaker_node( vbap, speaker_node_azi_deg, speaker_node_ele_deg, SPEAKER_NODE_TOP_HALF ); + virtual_back_type = check_need_of_virtual_speaker_node( vbap, speaker_node_azi_deg, speaker_node_ele_deg, SPEAKER_NODE_BACK ); + + /* Init internal speaker node configuration, which is the original configuration + potentially appended with virtual top and/or bottom loudspeakers */ + mvr2r( speaker_node_azi_deg, speaker_node_azi_deg_internal, num_speaker_nodes ); + mvr2r( speaker_node_ele_deg, speaker_node_ele_deg_internal, num_speaker_nodes ); + + if ( is_success && virtual_bottom_type != NO_VIRTUAL_SPEAKER_NODE ) + { + vbap->bottom_virtual_speaker_node_division_gains = (float *) count_calloc( num_speaker_nodes, sizeof( float ) ); + is_success &= vbap->bottom_virtual_speaker_node_division_gains != NULL; + speaker_node_azi_deg_internal[vbap->bottom_virtual_speaker_node_index] = 0.0f; + speaker_node_ele_deg_internal[vbap->bottom_virtual_speaker_node_index] = -90.0f; + } + + if ( is_success && virtual_top_type != NO_VIRTUAL_SPEAKER_NODE ) + { + vbap->top_virtual_speaker_node_division_gains = (float *) count_calloc( num_speaker_nodes, sizeof( float ) ); + is_success &= vbap->top_virtual_speaker_node_division_gains != NULL; + speaker_node_azi_deg_internal[vbap->top_virtual_speaker_node_index] = 0.0f; + speaker_node_ele_deg_internal[vbap->top_virtual_speaker_node_index] = 90.0f; + } + + if ( is_success && virtual_back_type != NO_VIRTUAL_SPEAKER_NODE ) + { + vbap->back_virtual_speaker_node_division_gains = (float *) count_calloc( num_speaker_nodes, sizeof( float ) ); + is_success &= vbap->back_virtual_speaker_node_division_gains != NULL; + speaker_node_azi_deg_internal[vbap->back_virtual_speaker_node_index] = 180.0f; + speaker_node_ele_deg_internal[vbap->back_virtual_speaker_node_index] = 0.0f; + } + + init_speaker_node_direction_data( speaker_node_data, speaker_node_azi_deg_internal, speaker_node_ele_deg_internal, vbap->num_speaker_nodes_internal ); + + /* Allocate and determine node-node connections */ + max_num_connections = ( vbap->num_speaker_nodes_internal - 2 ) * 3; /* Theoretical maximum */ + + determine_connections( vbap->num_speaker_nodes_internal, speaker_node_data, connections, max_num_connections, &connection_group1_count, &connection_group2_start, &connection_group2_count ); + + /* Allocate and determine virtual surface speaker node triplets */ + if ( is_success ) + { + int16_t ch; + int16_t speaker_nodes_group1_internal = 0; + int16_t speaker_nodes_group2_internal = 0; + int16_t speaker_nodes_horiz_internal = 0; + uint8_t loop_done = 0; + + /* Count nodes in different groups to reserve correct memory */ + for ( ch = 0; ch < vbap->num_speaker_nodes_internal && !loop_done; ch++ ) + { + switch ( speaker_node_data[ch].group ) + { + case SPEAKER_NODE_ALL: + /* If there is even one speaker belonging to "all" group, then all speakers belong to the "all" group. + * We can skip further counts here. */ + speaker_nodes_group1_internal = vbap->num_speaker_nodes_internal; + loop_done = 1; + break; + case SPEAKER_NODE_BOTTOM_HALF: + speaker_nodes_group1_internal++; + break; + case SPEAKER_NODE_TOP_HALF: + speaker_nodes_group2_internal++; + break; + case SPEAKER_NODE_HORIZONTAL: + case SPEAKER_NODE_BACK: + speaker_nodes_group1_internal++; + speaker_nodes_group2_internal++; + speaker_nodes_horiz_internal++; + break; + } + } + vbap->search_struct[0].triplets = (VBAP_VS_TRIPLET *) count_malloc( ( ( speaker_nodes_group1_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ); + is_success &= vbap->search_struct[0].triplets != NULL; + if ( speaker_nodes_group2_internal > 0 ) + { + vbap->num_search_structs = 2; + vbap->search_struct[1].triplets = (VBAP_VS_TRIPLET *) count_malloc( ( ( speaker_nodes_group2_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ); + is_success &= vbap->search_struct[1].triplets != NULL; + } + else + { + vbap->num_search_structs = 1; + vbap->search_struct[1].triplets = NULL; + } + } + + if ( is_success ) + { + if ( vbap->num_search_structs == 1 ) + { + /* If all speaker nodes belong to ALL set, then we only create one triplet set and search structure */ + vbap->search_struct[0].num_triplets = determine_virtual_surface_triplets( vbap->num_speaker_nodes_internal, speaker_node_data, connections, max_num_connections, vbap->search_struct[0].triplets, vbap->search_struct[0].initial_search_indices, SPEAKER_NODE_ALL ); + } + else + { + /* Otherwise, we have two sets and can handle them separately for more opmitized processing. */ + vbap->search_struct[0].num_triplets = determine_virtual_surface_triplets( vbap->num_speaker_nodes_internal, speaker_node_data, connections, connection_group1_count, vbap->search_struct[0].triplets, vbap->search_struct[0].initial_search_indices, SPEAKER_NODE_BOTTOM_HALF ); + vbap->search_struct[1].num_triplets = determine_virtual_surface_triplets( vbap->num_speaker_nodes_internal, speaker_node_data, connections + connection_group2_start, connection_group2_count, vbap->search_struct[1].triplets, vbap->search_struct[1].initial_search_indices, SPEAKER_NODE_TOP_HALF ); + } + } + + /* Determine how the virtual node gains should be distributed to real nodes, if necessary (checked within function). */ + if ( is_success ) + { + determine_virtual_speaker_node_division_gains( vbap->top_virtual_speaker_node_index, vbap->top_virtual_speaker_node_division_gains, connections, virtual_top_type, max_num_connections, num_speaker_nodes ); + + determine_virtual_speaker_node_division_gains( vbap->bottom_virtual_speaker_node_index, vbap->bottom_virtual_speaker_node_division_gains, connections, virtual_bottom_type, max_num_connections, num_speaker_nodes ); + + determine_virtual_speaker_node_division_gains( vbap->back_virtual_speaker_node_index, vbap->back_virtual_speaker_node_division_gains, connections, virtual_back_type, max_num_connections, num_speaker_nodes ); + } + + wmops_sub_end(); + + if ( is_success ) + { + *hVBAPdata = vbap; + } + else + { + vbap_free_data( &vbap ); + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------------* + * vbap_free_data() + * + * Free VBAP data structure + *-------------------------------------------------------------------------*/ + +void vbap_free_data( + VBAP_HANDLE *hVBAPdata /* i/o: VBAP handle to be freed */ +) +{ + if ( hVBAPdata == NULL || *hVBAPdata == NULL ) + { + return; + } + + if ( ( *hVBAPdata )->bottom_virtual_speaker_node_division_gains != NULL ) + { + count_free( ( *hVBAPdata )->bottom_virtual_speaker_node_division_gains ); + } + if ( ( *hVBAPdata )->top_virtual_speaker_node_division_gains != NULL ) + { + count_free( ( *hVBAPdata )->top_virtual_speaker_node_division_gains ); + } + if ( ( *hVBAPdata )->back_virtual_speaker_node_division_gains != NULL ) + { + count_free( ( *hVBAPdata )->back_virtual_speaker_node_division_gains ); + } + if ( ( *hVBAPdata )->search_struct[0].triplets != NULL ) + { + count_free( ( *hVBAPdata )->search_struct[0].triplets ); + } + if ( ( *hVBAPdata )->num_search_structs == 2 && ( *hVBAPdata )->search_struct[1].triplets != NULL ) + { + count_free( ( *hVBAPdata )->search_struct[1].triplets ); + } + + count_free( *hVBAPdata ); + *hVBAPdata = NULL; + + return; +} + + +/*-------------------------------------------------------------------------* + * vbap_determine_gains() + * + * Obtain panning gains for all speaker nodes based on the given direction + *-------------------------------------------------------------------------*/ + +void vbap_determine_gains( + const VBAP_HANDLE hVBAPdata, /* i : prepared VBAP structure */ + float *gains, /* o : gain vector for loudspeakers for given direction */ + const int16_t azi_deg, /* i : azimuth in degrees for panning direction (positive left)*/ + const int16_t ele_deg /* i : elevation in degrees for panning direction (positive up)*/ +) +{ + /* This function formulates gains for the given angle. The triplet-selection has been pre-formulated. */ + int16_t ch, ch2; + int16_t triplet_ch; + int16_t triplet_index; + float panning_unit_vec[3]; + float gain_triplet[3]; + float norm_value; + float gain_ene; + float azi_rad; + float ele_rad; + float azi_temp; + float ele_temp; + int16_t num_speaker_nodes; + int16_t bottom_virtual_speaker_node_index; + int16_t top_virtual_speaker_node_index; + int16_t back_virtual_speaker_node_index; + VBAP_VS_TRIPLET *selected_triplet; + float *bottom_virtual_speaker_node_division_gains; + float *top_virtual_speaker_node_division_gains; + float *back_virtual_speaker_node_division_gains; + +#ifdef DEBUGGING + assert( hVBAPdata != NULL && "VBAP gain determination requires initialized structure." ); + assert( gains != NULL && "VBAP gain determination requires reserved memory for gain output." ); +#endif + + wmops_sub_start( "vbap_gains" ); + num_speaker_nodes = hVBAPdata->num_speaker_nodes; + bottom_virtual_speaker_node_index = hVBAPdata->bottom_virtual_speaker_node_index; + top_virtual_speaker_node_index = hVBAPdata->top_virtual_speaker_node_index; + back_virtual_speaker_node_index = hVBAPdata->back_virtual_speaker_node_index; + bottom_virtual_speaker_node_division_gains = hVBAPdata->bottom_virtual_speaker_node_division_gains; + top_virtual_speaker_node_division_gains = hVBAPdata->top_virtual_speaker_node_division_gains; + back_virtual_speaker_node_division_gains = hVBAPdata->back_virtual_speaker_node_division_gains; + + panning_wrap_angles( (float) azi_deg, (float) ele_deg, &azi_temp, &ele_temp ); + azi_rad = azi_temp * PI_OVER_180; + ele_rad = ele_temp * PI_OVER_180; + + panning_unit_vec[0] = cosf( azi_rad ) * cosf( ele_rad ); + panning_unit_vec[1] = sinf( azi_rad ) * cosf( ele_rad ); + panning_unit_vec[2] = sinf( ele_rad ); + + /* Find the best VS triplet and speaker node gains for the panning direction using the prepared search structures. */ + if ( hVBAPdata->num_search_structs == 2 && ele_deg > 0 ) + { + triplet_index = determine_best_triplet_and_gains( &( hVBAPdata->search_struct[1] ), panning_unit_vec, azi_deg, gain_triplet ); + selected_triplet = &hVBAPdata->search_struct[1].triplets[triplet_index]; + } + else + { + triplet_index = determine_best_triplet_and_gains( &( hVBAPdata->search_struct[0] ), panning_unit_vec, azi_deg, gain_triplet ); + selected_triplet = &hVBAPdata->search_struct[0].triplets[triplet_index]; + } + + /* Normalize to unit energy */ + gain_ene = 1e-12f; /* Add small value to avoid divide by zero. */ + for ( ch = 0; ch < 3; ch++ ) + { + gain_ene += gain_triplet[ch] * gain_triplet[ch]; + } + + norm_value = 1.0f / sqrtf( gain_ene ); + + for ( ch = 0; ch < 3; ch++ ) + { + gain_triplet[ch] *= norm_value; + + /* Sanity check for rounding issues */ + if ( gain_triplet[ch] < 0.0f ) + { + gain_triplet[ch] = 0.0f; + } + } + + /* Flush gain target */ + set_zero( gains, num_speaker_nodes ); + + /* Map gain triplet (internal speaker node configuration) to speaker node output (actual speaker node configuration) */ + for ( ch = 0; ch < 3; ch++ ) + { + triplet_ch = selected_triplet->speaker_node[ch]; + + if ( triplet_ch == bottom_virtual_speaker_node_index ) + { + for ( ch2 = 0; ch2 < num_speaker_nodes; ch2++ ) + { + gains[ch2] += bottom_virtual_speaker_node_division_gains[ch2] * gain_triplet[ch]; + } + } + else if ( triplet_ch == top_virtual_speaker_node_index ) + { + for ( ch2 = 0; ch2 < num_speaker_nodes; ch2++ ) + { + gains[ch2] += top_virtual_speaker_node_division_gains[ch2] * gain_triplet[ch]; + } + } + else if ( triplet_ch == back_virtual_speaker_node_index ) + { + for ( ch2 = 0; ch2 < num_speaker_nodes; ch2++ ) + { + gains[ch2] += back_virtual_speaker_node_division_gains[ch2] * gain_triplet[ch]; + } + } + else + { + gains[triplet_ch] += gain_triplet[ch]; + } + } + + wmops_sub_end(); + + return; +} + + +/*-----------------------------------------------------------------------* + * Local functions + *-----------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------------* + * vbap_crossp() + * + * 3-by-3 vector cross product + *-------------------------------------------------------------------------*/ + +static void vbap_crossp( + const float *vec1, /* i : input vector 1 */ + const float *vec2, /* i : input vector 2 */ + float *crossProduct /* o : cross product output */ +) +{ + crossProduct[0] = ( vec1[1] * vec2[2] ) - ( vec1[2] * vec2[1] ); + crossProduct[1] = ( vec1[2] * vec2[0] ) - ( vec1[0] * vec2[2] ); + crossProduct[2] = ( vec1[0] * vec2[1] ) - ( vec1[1] * vec2[0] ); + + return; +} + + +/*-------------------------------------------------------------------------* + * vector_matrix_multiply_3x3() + * + * 3-by-3 vector multiply with matrix + *-------------------------------------------------------------------------*/ + +/*! r: Status result if triplet is usable for panning. Allows early exit. */ +static uint8_t vector_matrix_multiply_3x3( + const float *src_vector, /* i : input vector */ + float matrix[3][3], /* i : input matrix */ + float *result /* o : output vector */ +) +{ + result[0] = src_vector[0] * matrix[0][0]; + result[0] += src_vector[1] * matrix[1][0]; + result[0] += src_vector[2] * matrix[2][0]; + + if ( result[0] < -0.01f ) + { + return 0; + } + + result[1] = src_vector[0] * matrix[0][1]; + result[1] += src_vector[1] * matrix[1][1]; + result[1] += src_vector[2] * matrix[2][1]; + + if ( result[1] < -0.01f ) + { + return 0; + } + + result[2] = src_vector[0] * matrix[0][2]; + result[2] += src_vector[1] * matrix[1][2]; + result[2] += src_vector[2] * matrix[2][2]; + + if ( result[2] < -0.01f ) + { + return 0; + } + + return 1; +} + + +/*----------------------------------------------------------------------------------------------* + * determine_best_triplet_and_gains() + * + * Determine the best speaker node triplet and associated gains for panning to defined direction + *----------------------------------------------------------------------------------------------*/ + +/*! r: triplet id */ +static int16_t determine_best_triplet_and_gains( + VBAP_SEARCH_STRUCT *search_struct, /* i : VBAP search struct */ + const float panning_unit_vec[3], /* i : panning unit vector */ + const int16_t azi_deg, /* i : panning azimuth */ + float gains[3] /* o : panning gains */ +) +{ + int16_t i, tr, k; + uint8_t triplet_ok; + int16_t best_triplet; + float best_min_gain; + float min_gain_this; + float unnormalized_gains[3]; + int16_t sector; + int16_t first_triplet; + int16_t jump; + int16_t num_triplets; + + num_triplets = search_struct->num_triplets; + best_min_gain = -999.9f; + best_triplet = 0; + set_zero( gains, 3 ); + + /* Determine the correct search sector for that target panning direction using an optimized algorithm for + * the chosen four sectors. */ + if ( abs( azi_deg ) > 90 ) + { + sector = azi_deg < 0 ? 2 : 1; + } + else + { + sector = azi_deg < 0 ? 3 : 0; + } + first_triplet = search_struct->initial_search_indices[sector]; + + tr = first_triplet; + jump = 1; + for ( i = 0; i < num_triplets; i++ ) + { + triplet_ok = vector_matrix_multiply_3x3( panning_unit_vec, search_struct->triplets[tr].inverse_matrix, unnormalized_gains ); + if ( triplet_ok ) + { + min_gain_this = min( ( min( unnormalized_gains[0], unnormalized_gains[1] ) ), unnormalized_gains[2] ); + + if ( min_gain_this > best_min_gain ) + { + best_min_gain = min_gain_this; + best_triplet = tr; + for ( k = 0; k < 3; k++ ) + { + gains[k] = unnormalized_gains[k]; + } + if ( !( best_min_gain < 0.00f ) ) + { + return best_triplet; + } + } + } + tr = first_triplet + jump; + if ( tr < 0 ) + { + tr += num_triplets; + } + else if ( tr >= num_triplets ) + { + tr -= num_triplets; + } + + jump *= -1; + if ( jump > 0 ) + { + jump += 1; + } + } + + return best_triplet; +} + +/*-------------------------------------------------------------------------* + * determine_virtual_speaker_node_division_gains() + * + * Determines how the virtual node gains are distributed to real nodes + *-------------------------------------------------------------------------*/ + +static void determine_virtual_speaker_node_division_gains( + const int16_t virtual_speaker_node_index, /* i : virtual speaker node index */ + float *virtual_node_division_gains, /* o : virtual speaker node division gains */ + int16_t connections[][2], /* i : vector of all connections */ + const enum VirtualSpeakerNodeType type, /* i : virtual speaker node typel */ + const int16_t max_num_connections, /* i : max number of connections */ + const int16_t num_speaker_nodes /* i : max number of speaker nodes */ +) +{ + /* When node type is VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY, the gains of the virtual node + are distributed to all neighboring real speaker nodes. An amplitude-division + instead of energy division is utilized just in case to avoid excessive emphasis + on the coherent distributed sound. */ + int16_t c; + int16_t ch; + float sum_val; + + if ( type == VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY ) + { + for ( c = 0; c < max_num_connections; c++ ) + { + if ( connections[c][0] != VBAP_NOT_VALID_CONNECTION ) + { + int16_t connection_node = -1; + if ( connections[c][0] == virtual_speaker_node_index ) + { + connection_node = connections[c][1]; + } + else if ( connections[c][1] == virtual_speaker_node_index ) + { + connection_node = connections[c][0]; + } + + /* The second condition allows division gains only to actual loudspeakers */ + if ( connection_node >= 0 && ( connection_node < num_speaker_nodes ) ) + { + virtual_node_division_gains[connection_node] = 1.0f; + } + } + } + + sum_val = 0.0f; + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + sum_val += virtual_node_division_gains[ch]; + } + + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + virtual_node_division_gains[ch] /= sum_val; + } + } + + return; +} + + +/*-------------------------------------------------------------------------* + * check_need_of_virtual_speaker_node() + * + * Check if virtual speaker node is required + *-------------------------------------------------------------------------*/ + +/*! r: virtual speaker node type */ +static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node( + VBAP_HANDLE hVBAPdata, /* i/o: VBAP structure */ + const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths */ + const float *speaker_node_ele_deg, /* i : vector of speaker node elevations */ + enum SpeakerNodeGroup group /* i : group of speaker nodes where this belongs */ +) +{ + int16_t ch; + float max_elevation = 0.0f; + + /* The following considers if SPEAKER_NODE_BACK virtual speaker is needed */ + if ( group == SPEAKER_NODE_BACK ) + { + int16_t virtual_back_needed = 1; + const float virtual_back_epsilon = -0.0175f; /* Corresponds to approximately 91 degrees, see code below */ + for ( ch = 0; ch < hVBAPdata->num_speaker_nodes; ch++ ) + { + if ( fabsf( speaker_node_ele_deg[ch] ) < VBAP_VIRTUAL_BACK_ELE_LIMIT ) + { + if ( cosf( speaker_node_azi_deg[ch] * PI_OVER_180 ) < virtual_back_epsilon ) + { + virtual_back_needed = 0; + break; + } + } + } + + if ( virtual_back_needed ) + { + hVBAPdata->back_virtual_speaker_node_index = hVBAPdata->num_speaker_nodes_internal; + hVBAPdata->num_speaker_nodes_internal++; + return VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY; + } + + return NO_VIRTUAL_SPEAKER_NODE; /* No virtual back needed */ + } + + /* The following considers if TOP or BOTTOM virtual speaker is needed */ + for ( ch = 0; ch < hVBAPdata->num_speaker_nodes; ch++ ) + { + if ( group == SPEAKER_NODE_TOP_HALF ) + { + if ( speaker_node_ele_deg[ch] > max_elevation ) + { + max_elevation = speaker_node_ele_deg[ch]; + } + } + else + { + if ( ( -speaker_node_ele_deg[ch] ) > max_elevation ) + { + max_elevation = -speaker_node_ele_deg[ch]; + } + } + } + + if ( max_elevation > VBAP_NO_VIRTUAL_SPEAKER_NODE_ELE_LIMIT - VBAP_EPSILON ) + { + return NO_VIRTUAL_SPEAKER_NODE; + } + + /* Use virtual node */ + if ( group == SPEAKER_NODE_BOTTOM_HALF ) + { + hVBAPdata->bottom_virtual_speaker_node_index = hVBAPdata->num_speaker_nodes_internal; + } + else + { + hVBAPdata->top_virtual_speaker_node_index = hVBAPdata->num_speaker_nodes_internal; + } + + hVBAPdata->num_speaker_nodes_internal++; + if ( max_elevation > VBAP_DISTRIBUTE_VIRTUAL_SPEAKER_NODE_ELE_LIMIT - VBAP_EPSILON ) + { + return VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY; + } + + return VIRTUAL_SPEAKER_NODE_DISCARD_ENERGY; +} + + +/*-------------------------------------------------------------------------* + * init_speaker_node_direction_data() + * + * Initialize speaker node data + *-------------------------------------------------------------------------*/ + +static void init_speaker_node_direction_data( + VBAP_SPEAKER_NODE *speaker_node_data, /* o : storage for speaker node data */ + const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths */ + const float *speaker_node_ele_deg, /* i : vector of speaker node elevations */ + const int16_t num_speaker_nodes /* i : number of speaker nodes */ +) +{ + int16_t ch; + float azi_rad; + float ele_rad; + int16_t num_horiz = 0; + uint8_t in_all_mode = TRUE; + + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + speaker_node_data[ch].azi_deg = speaker_node_azi_deg[ch]; + azi_rad = speaker_node_azi_deg[ch] * PI_OVER_180; + if ( ( speaker_node_ele_deg[ch] >= -5 ) && ( speaker_node_ele_deg[ch] <= 5 ) ) + { + speaker_node_data[ch].ele_deg = 0.0f; + ele_rad = 0.0f; + speaker_node_data[ch].group = SPEAKER_NODE_HORIZONTAL; + num_horiz++; + } + else + { + speaker_node_data[ch].ele_deg = speaker_node_ele_deg[ch]; + ele_rad = speaker_node_ele_deg[ch] * PI_OVER_180; + if ( ele_rad < 0 ) + { + speaker_node_data[ch].group = SPEAKER_NODE_BOTTOM_HALF; + } + else + { + speaker_node_data[ch].group = SPEAKER_NODE_TOP_HALF; + } + } + + speaker_node_data[ch].unit_vec[0] = cosf( azi_rad ) * cosf( ele_rad ); + speaker_node_data[ch].unit_vec[1] = sinf( azi_rad ) * cosf( ele_rad ); + speaker_node_data[ch].unit_vec[2] = sinf( ele_rad ); + } + + /* Check for largest horizontal gap if there are at least 3 horizontal speaker nodes */ + if ( num_horiz >= 3 ) + { + int16_t i; + uint16_t horiz_azi[VBAP_MAX_NUM_SPEAKER_NODES]; + uint16_t largest_gap; + uint16_t temp; + + i = 0; + for ( ch = 0; ch < num_speaker_nodes && i < num_horiz; ch++ ) + { + if ( speaker_node_data[ch].group == SPEAKER_NODE_HORIZONTAL ) + { + horiz_azi[i] = speaker_node_azi_deg[ch] < 0.0f ? (uint16_t) floorf( speaker_node_azi_deg[ch] + 360.0f ) : (uint16_t) floorf( speaker_node_azi_deg[ch] ); + i++; + } + } + + /* Reorder horizontal azi to increasing order */ + sort( horiz_azi, num_horiz ); + + /* Find largest gap. Initialize with the wrap over gap. */ + largest_gap = horiz_azi[0] - horiz_azi[num_horiz - 1] + 360; + for ( ch = 0; ch < num_horiz - 1; ch++ ) + { + temp = horiz_azi[ch + 1] - horiz_azi[ch]; + if ( temp > largest_gap ) + { + largest_gap = temp; + } + } + + /* If largest gap is small enough, we have definitive zero elevation plane. + * Otherwise, we should assign all speaker nodes to one group. */ + if ( largest_gap <= VBAP_MAX_HORIZONTAL_GAP ) + { + in_all_mode = FALSE; + } + } + + /* Designate all speaker nodes to same group if there was no definitive zero + * elevation plane. */ + if ( in_all_mode ) + { + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + speaker_node_data[ch].group = SPEAKER_NODE_ALL; + } + } + + return; +} + +/*-------------------------------------------------------------------------* + * matrix_inverse_3x3() + * + * 3-by-3 matrix inverse + *-------------------------------------------------------------------------*/ + +static void matrix_inverse_3x3( + const float **input_matrix, /* i : input matrix */ + float inverse_matrix[3][3] /* o : output matrix */ +) +{ + int16_t k; + float determinant; + float cross_vec[3]; + + vbap_crossp( input_matrix[1], input_matrix[2], cross_vec ); + + determinant = dotp( input_matrix[0], cross_vec, 3 ); + + for ( k = 0; k < 3; k++ ) + { + inverse_matrix[k][0] = cross_vec[k] / determinant; + } + + vbap_crossp( input_matrix[2], input_matrix[0], cross_vec ); + + for ( k = 0; k < 3; k++ ) + { + inverse_matrix[k][1] = cross_vec[k] / determinant; + } + + vbap_crossp( input_matrix[0], input_matrix[1], cross_vec ); + + for ( k = 0; k < 3; k++ ) + { + inverse_matrix[k][2] = cross_vec[k] / determinant; + } + + return; +} + +/*-------------------------------------------------------------------------* + * check_and_store_triplet() + * + * Check if the given loudspeaker triplet is a valid one and store data when + * valid triplet is found. + *-------------------------------------------------------------------------*/ + +static int16_t check_and_store_triplet( + int16_t chA, /* i : first channel index that forms the loudspeaker triplet */ + int16_t chB, /* i : second channel index that forms the loudspeaker triplet */ + int16_t chC, /* i : third channel index that forms the loudspeaker triplet */ + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data structure */ + VBAP_VS_TRIPLET *triplets, /* o : vector of virtual surface triplets */ + int16_t *triplet_index, /* i/o: index for the next free triplet slot */ + float *triplet_azidegs, /* o : center azimuths of the found triplets */ + int16_t *triplet_order /* o : initial order of triplet indices */ +) +{ + int16_t ch_check; + int16_t k; + int16_t speaker_node_found_inside_triplet; + uint8_t triplet_ok; + float inverse_matrix[3][3], unnormalized_gains[3]; + const float *speaker_node_triplet_unit_vec_matrix[3]; + + /* Triplet found, determine inverse matrix for VBAP formulation */ + speaker_node_triplet_unit_vec_matrix[0] = speaker_node_data[chA].unit_vec; + speaker_node_triplet_unit_vec_matrix[1] = speaker_node_data[chB].unit_vec; + speaker_node_triplet_unit_vec_matrix[2] = speaker_node_data[chC].unit_vec; + matrix_inverse_3x3( speaker_node_triplet_unit_vec_matrix, inverse_matrix ); + + /* Check through all speaker nodes that none of them are within the triplet. + * Node within the triplet is identified by that all three panning gains are positive. + * Epsilon-condition is for some small rounding issues.*/ + speaker_node_found_inside_triplet = 0; + for ( ch_check = 0; ch_check < num_speaker_nodes; ch_check++ ) + { + if ( ( ch_check != chA ) && ( ch_check != chB ) && ( ch_check != chC ) ) + { + triplet_ok = vector_matrix_multiply_3x3( speaker_node_data[ch_check].unit_vec, inverse_matrix, unnormalized_gains ); + if ( triplet_ok && unnormalized_gains[0] > VBAP_EPSILON && unnormalized_gains[1] > VBAP_EPSILON && unnormalized_gains[2] > VBAP_EPSILON ) + { + speaker_node_found_inside_triplet = 1; + break; + } + } + } + + /* No speaker node inside triplet -> appropriate triplet found, save data. */ + if ( speaker_node_found_inside_triplet == 0 ) + { + triplets[*triplet_index].speaker_node[0] = (uint8_t) chA; + triplets[*triplet_index].speaker_node[1] = (uint8_t) chB; + triplets[*triplet_index].speaker_node[2] = (uint8_t) chC; + for ( k = 0; k < 3; k++ ) + { + mvr2r( inverse_matrix[k], triplets[*triplet_index].inverse_matrix[k], 3 ); + } + + /* Get center azimuth for fast search use */ + triplet_azidegs[*triplet_index] = atan2f( speaker_node_data[chA].unit_vec[1] + speaker_node_data[chB].unit_vec[1] + speaker_node_data[chC].unit_vec[1], + speaker_node_data[chA].unit_vec[0] + speaker_node_data[chB].unit_vec[0] + speaker_node_data[chC].unit_vec[0] ) * + 180.0f / EVS_PI; + + /* Store increasing order indices for the later sorting step. */ + triplet_order[*triplet_index] = *triplet_index; + + ( *triplet_index )++; + + return 1; + } + + /* Triplet was not good */ + return 0; +} + + +/*-------------------------------------------------------------------------* + * determine_virtual_surface_triplets() + * + * Determine virtual surface triples that are used for panning. This + * function is optimized for the use in cases where speaker nodes are in + * one group or divided into two separate groups divided by a horizontal + * layer. + *-------------------------------------------------------------------------*/ + +/*! r: number of virtual surface triplets */ +static int16_t determine_virtual_surface_triplets( + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data structure */ + int16_t connections[][2], /* i : vector of all connections */ + const int16_t max_num_connections, /* i : max number of connections */ + VBAP_VS_TRIPLET *triplets, /* o : vector of virtual surface triplets */ + int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS], /* o : initial search indices for this set of triplets corresponding to the search struct */ + enum SpeakerNodeGroup allowed_group /* i : group of allowed speaker nodes for forming the triplets in this call */ +) +{ + int16_t chA, chB, chC, k, l, m; + int16_t num_triplets = 0; + int16_t num_connected_to_chA; + int16_t connected_to_chA[VBAP_MAX_NUM_SPEAKER_NODES]; + int16_t connection_uses_left[VBAP_MAX_NUM_SPEAKER_NODES]; + float triplet_azidegs[VBAP_MAX_NUM_TRIPLETS]; + int16_t triplet_order[VBAP_MAX_NUM_TRIPLETS]; + + /* Each connection can be used exactly by two different virtual surface triplets. */ + set_s( connection_uses_left, 2, VBAP_MAX_NUM_SPEAKER_NODES ); + + for ( chA = 0; chA < num_speaker_nodes; chA++ ) + { + /* Early skip if not in correct group. */ + if ( speaker_node_data[chA].group != allowed_group ) + { + continue; + } + + /* Get all connections connected to current chA that have not been used by + * two triplets yet. */ + num_connected_to_chA = 0; + for ( k = 0; k < max_num_connections; k++ ) + { + if ( ( connections[k][0] == chA || connections[k][1] == chA ) && connection_uses_left[k] > 0 ) + { + connected_to_chA[num_connected_to_chA] = k; + num_connected_to_chA++; + } + } + + /* Check that we have enough connections to use. We need at least two available connections to form a triplet. + * This can fail in later stages when all connections are already used. */ + if ( num_connected_to_chA < 2 ) + { + continue; + } + + /* Try to form triplets from each valid connection. */ + for ( k = 0; k < num_connected_to_chA; k++ ) + { + int16_t connect_index_k = connected_to_chA[k]; + chB = connections[connect_index_k][0] == chA ? connections[connect_index_k][1] : connections[connect_index_k][0]; + for ( l = k + 1; l < num_connected_to_chA; l++ ) + { + int16_t connect_index_l = connected_to_chA[l]; + chC = connections[connect_index_l][0] == chA ? connections[connect_index_l][1] : connections[connect_index_l][0]; + + /* With chA, chB, and chC selected, we still need to find connection between chB and chC and verify that the triplet is valid */ + for ( m = 0; m < max_num_connections; m++ ) + { + if ( ( connections[m][0] == chB && connections[m][1] == chC ) || ( connections[m][1] == chB && connections[m][0] == chC ) ) + { + if ( check_and_store_triplet( chA, chB, chC, num_speaker_nodes, speaker_node_data, triplets, &num_triplets, triplet_azidegs, triplet_order ) ) + { + connection_uses_left[connect_index_k]--; + connection_uses_left[connect_index_l]--; + connection_uses_left[m]--; + break; + } + } + } + + /* Check if chA-chB connection has been used in two triplets already. If yes, then break out of loop + * as this connection cannot be used for more triplets and we need to continue with another chA-chB + * connection. */ + if ( connection_uses_left[connect_index_k] < 1 ) + { + break; + } + } + } + } + + /* All triplets should be stored now. Sort them for search use and then determine the initial search indices for + * each search sector for this search struct. */ + v_sort_ind( triplet_azidegs, triplet_order, num_triplets ); + reorder_triplets( triplets, triplet_order, num_triplets ); + determine_initial_search_indices( num_triplets, triplet_azidegs, initial_search_indices ); + + return num_triplets; +} + +/*-------------------------------------------------------------------------* + * determine_initial_search_indices() + * + * Determine initial search indices used for fast search of correct triangle + *-------------------------------------------------------------------------*/ + +static void determine_initial_search_indices( + const int16_t num_triplets, /* i : number of triplets */ + const float triplet_azidegs[VBAP_MAX_NUM_TRIPLETS], /* i : azimuths of triplets (in degrees) */ + int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS] /* o : initial search indices */ +) +{ + int16_t i, j; + float sector_reference_azideg; + float sector_border_start_azideg; + float sector_border_end_azideg; + int16_t best_index; + float min_azideg_diff; + float azideg_diff; + + for ( i = 0; i < VBAP_NUM_SEARCH_SECTORS; i++ ) + { + sector_border_start_azideg = i * VBAP_SEARCH_SECTOR_SIZE; + sector_border_end_azideg = ( i + 1 ) * VBAP_SEARCH_SECTOR_SIZE; + sector_reference_azideg = ( sector_border_start_azideg + sector_border_end_azideg ) / 2.0f; + best_index = 0; + min_azideg_diff = 9999.9f; + + for ( j = 0; j < num_triplets; j++ ) + { + azideg_diff = sector_reference_azideg - triplet_azidegs[j]; + if ( azideg_diff > 180.0f ) + { + azideg_diff -= 360.0f; + } + else if ( azideg_diff < -180.0f ) + { + azideg_diff += 360.0f; + } + azideg_diff = fabsf( azideg_diff ); + + if ( azideg_diff < min_azideg_diff ) + { + min_azideg_diff = azideg_diff; + best_index = j; + } + } + + initial_search_indices[i] = best_index; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * determine_connections() + * + * Determine all valid connections between all speaker nodes + *-------------------------------------------------------------------------*/ + +static void determine_connections( + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ + int16_t connections[][2], /* o : vector of connections */ + const int16_t max_num_connections, /* i : max number of connections */ + int16_t *group1_count, /* o : number of connections in first group */ + int16_t *group2_start, /* o : start of second group of connections */ + int16_t *group2_count /* o : number of connections in second group */ +) +{ + int16_t num_non_crossing_planes; + int16_t c; + int16_t connection_write_index = 0; + float non_crossing_plane_elevation_deg[VBAP_MAX_PLANES]; + + set_f( non_crossing_plane_elevation_deg, 0.0f, VBAP_MAX_PLANES ); + + /* Reset connection data */ + for ( c = 0; c < max_num_connections; c++ ) + { + connections[c][0] = VBAP_NOT_VALID_CONNECTION; + } + + /* This function determines some prominent elevated planes, that are favoured in making node-node connections. */ + num_non_crossing_planes = determine_non_crossing_planes( num_speaker_nodes, speaker_node_data, non_crossing_plane_elevation_deg ); + + /* Process in different mode based on the grouping. It is enough to check for first node. */ + if ( speaker_node_data[0].group == SPEAKER_NODE_ALL ) + { + formulate_half_sphere_connections( speaker_node_data, num_speaker_nodes, SPEAKER_NODE_ALL, connections, &connection_write_index, max_num_connections, num_non_crossing_planes, non_crossing_plane_elevation_deg ); + } + else + { + /* The node-node connections are determined in three stages: bottom, horizontal, and top. */ + formulate_half_sphere_connections( speaker_node_data, num_speaker_nodes, SPEAKER_NODE_BOTTOM_HALF, connections, &connection_write_index, max_num_connections, num_non_crossing_planes, non_crossing_plane_elevation_deg ); + *group2_start = connection_write_index; + formulate_horizontal_connections( speaker_node_data, num_speaker_nodes, connections, &connection_write_index ); + *group1_count = connection_write_index; + formulate_half_sphere_connections( speaker_node_data, num_speaker_nodes, SPEAKER_NODE_TOP_HALF, connections, &connection_write_index, max_num_connections, num_non_crossing_planes, non_crossing_plane_elevation_deg ); + *group2_count = connection_write_index - *group2_start; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * determine_connection_class() + * + * Determine the type of connection + *-------------------------------------------------------------------------*/ + +/*! r: type of connection */ +static enum ConnectionClass determine_connection_class( + const VBAP_SPEAKER_NODE *node_data, /* i : speaker node data */ + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + const enum SpeakerNodeGroup group, /* i : speaker node group */ + const int16_t chA, /* i : speaker node counter 1 */ + const int16_t chB /* i : speaker node counter 2 */ +) +{ + int16_t ch, k; + const float *p1, *v2; + float v1v1, v1v2, v2v2, v1p1, v2p1; + float determinant; + float norm_distance_on_v1; + float vec_diff[3]; + float v1[3]; + float vTarget[3]; + float energy_sum; + float eq_value; + float uvecdot; + + /* Check if connection passes through origin. This is not desired. + * When this happens, unit vectors point in opposite directions. */ + uvecdot = dotp( node_data[chA].unit_vec, node_data[chB].unit_vec, 3 ) + 1.0f; + if ( uvecdot < VBAP_EPSILON && uvecdot > -VBAP_EPSILON ) + { + return CONNECTION_WITH_SPEAKER_NODE_BEHIND; + } + + /* This loop checks the chA-chB connection with respect to all loudspeakers: + - in case there is a node behind or nearly behind the connection line. These + connections need to be discarded. + - in case there is a node that is closer to the connection line than 1/5 of the + connection length AND at the same horizontal plane. These connections need to be + weighted with a penalty (a special case, for example avoiding elevated L,R,C triplet) + */ + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + /* Select speaker_node only within TOP or BOTTOM sphere half, not being part of chA-chB pair */ + if ( ( group == node_data[ch].group ) && ( ch != chA ) && ( ch != chB ) ) + { + /* The following lines formulate the point on the chA-chB-connection that is + nearest to the origo-ch-line */ + p1 = node_data[chA].unit_vec; + for ( k = 0; k < 3; k++ ) + { + v1[k] = node_data[chB].unit_vec[k] - node_data[chA].unit_vec[k]; + } + v2 = node_data[ch].unit_vec; + v1v1 = dotp( v1, v1, 3 ); + v1v2 = dotp( v1, v2, 3 ); + v2v2 = 1.0f; /* dotp(v2, v2) is always 1. */ + v1p1 = dotp( v1, p1, 3 ); + v2p1 = dotp( v2, p1, 3 ); + determinant = ( v1v1 ) * ( -v2v2 ) + ( v1v2 * v1v2 ); + /* Norm distance = distance parameter on line chA-chB, determines point that is + nearest to origo-ch line. Distance 0 means chA and distance 1 means chB. Can be + outside this region as well.*/ + norm_distance_on_v1 = ( 1.0f / determinant ) * ( ( v2v2 ) * ( v1p1 ) + ( -v1v2 ) * ( v2p1 ) ); + + /* Continue only if the nearest point is between chA and chB */ + if ( norm_distance_on_v1 > 0.0f && norm_distance_on_v1 < 1.0f ) + { + /* Formulate vTarget, that is an unit vector that goes through the determined point on chA-chB connection */ + energy_sum = 0.0f; + for ( k = 0; k < 3; k++ ) + { + vTarget[k] = p1[k] + norm_distance_on_v1 * v1[k]; + energy_sum += vTarget[k] * vTarget[k]; + vec_diff[k] = vTarget[k] - v2[k]; + } + eq_value = sqrtf( 1.0f / energy_sum ); + for ( k = 0; k < 3; k++ ) + { + vTarget[k] *= eq_value; + } + + /* A check if the angle between vTarget and node_data[ch].unit_vec is less than 1 degree. + Essentially reveals if there is a speaker node too close "behind" the connection. Such + connections should be rejected.*/ + if ( dotp( vTarget, v2, 3 ) > 0.9998f ) + { + return CONNECTION_WITH_SPEAKER_NODE_BEHIND; + } + + /* A special case, mainly accounting for ELEVATED L,R,C speaker nodes. + A triplet between these nodes is not desired if there is a top node, + a penalty is implemented to take care of this. */ + if ( sqrtf( v1v1 ) > 5.0f * sqrtf( dotp( vec_diff, vec_diff, 3 ) ) ) + { + if ( fabsf( node_data[chB].unit_vec[2] - node_data[chA].unit_vec[2] ) < VBAP_EPSILON ) + { + return ELEVATED_PLANE_THIN_TRIANGLE_CONNECTION; + } + } + } + } + } + + return REGULAR_CONNECTION; +} + + +/*-------------------------------------------------------------------------* + * formulate_horizontal_connections() + * + * Formulate connections in the horizontal plane + *-------------------------------------------------------------------------*/ + +static void formulate_horizontal_connections( + const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + int16_t connections[][2], /* o : vector of all connections */ + int16_t *connection_write_index ) +{ + int16_t ch; + int16_t chCheck; + int16_t next_index; + float min_arc_diff; + float arc_diff; + + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + /* Find next horizontal speaker node */ + if ( speaker_node_data[ch].group == SPEAKER_NODE_HORIZONTAL ) + { + next_index = -1; + min_arc_diff = 9999.0f; + for ( chCheck = 0; chCheck < num_speaker_nodes; chCheck++ ) + { + if ( ( ch != chCheck ) && ( speaker_node_data[chCheck].group == SPEAKER_NODE_HORIZONTAL ) ) + { + arc_diff = speaker_node_data[chCheck].azi_deg - speaker_node_data[ch].azi_deg; + while ( arc_diff < 0.0f ) + { + arc_diff += 360.0f; + } + if ( arc_diff < min_arc_diff ) + { + min_arc_diff = arc_diff; + next_index = chCheck; + } + } + } + connections[*connection_write_index][0] = ch; + connections[*connection_write_index][1] = next_index; + ( *connection_write_index )++; + } + } + + return; +} + +/*-------------------------------------------------------------------------* + * check_plane_crossing() + * + * Check crossing of non-allowed planes + *-------------------------------------------------------------------------*/ + +/*! r: truth value for crossing */ +static int16_t check_plane_crossing( + const float ele1_deg, /* i : speaker node 1 elevation */ + const float ele2_deg, /* i : speaker node 2 elevation */ + const int16_t num_non_crossing_planes, /* i : number of non-crossing planes */ + const float *non_crossing_plane_elevation_deg /* i : vector non-crossing plane elevations*/ +) +{ + /* Find if the connection crosses a non-crossing plane, with 1-degree threshold. */ + int16_t plane; + + for ( plane = 0; plane < num_non_crossing_planes; plane++ ) + { + if ( ( ele1_deg > non_crossing_plane_elevation_deg[plane] + 1.0f ) && ( ele2_deg < non_crossing_plane_elevation_deg[plane] - 1.0f ) ) + { + return 1; + } + + if ( ( ele2_deg > non_crossing_plane_elevation_deg[plane] + 1.0f ) && ( ele1_deg < non_crossing_plane_elevation_deg[plane] - 1.0f ) ) + { + return 1; + } + } + + return 0; +} + + +/*-------------------------------------------------------------------------* + * get_half_sphere_connection_options() + * + * Get list of all potential connections at the half-sphere + *-------------------------------------------------------------------------*/ + +static void get_half_sphere_connection_options( + const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ + const enum SpeakerNodeGroup group, /* i : speaker node group */ + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + const int16_t num_non_crossing_planes, /* i : number of non-crossing planes */ + const float *non_crossing_plane_elevation_deg, /* i : vector of non-crossing plane elevations */ + ConnectionOption **connection_options_pr, /* o : list of connection options */ + int16_t *num_connection_options /* o : number of connection options */ +) +{ + int16_t max_num_connection_options = 0; + int16_t index = 0; + int16_t node, chA, chB, c, c_cmp; + ConnectionOption *c_options, *c_options_reorder; + + /* Count max num connection options at the half sphere */ + for ( node = 0; node < num_speaker_nodes; node++ ) + { + if ( speaker_node_data[node].group == group || speaker_node_data[node].group == SPEAKER_NODE_HORIZONTAL ) + { + max_num_connection_options += index; + index++; + } + } + + /* Init memory for connection options */ + c_options = (ConnectionOption *) count_malloc( sizeof( ConnectionOption ) * max_num_connection_options ); + for ( c = 0; c < max_num_connection_options; c++ ) + { + c_options[c].chA = -1; + c_options[c].chB = -1; + c_options[c].arc = 1e20f; + c_options[c].arc_weighted = 1e20f; + } + + /* Determine connection options for the half-sphere */ + index = 0; + for ( chA = 0; chA < num_speaker_nodes; chA++ ) + { + /* First loudspeaker at the connection is at the half sphere */ + if ( speaker_node_data[chA].group == group || speaker_node_data[chA].group == SPEAKER_NODE_HORIZONTAL ) + { + for ( chB = chA + 1; chB < num_speaker_nodes; chB++ ) + { + /* Second loudspeaker at the connection is at the half sphere, but so that first and second are not both horizontal. */ + if ( ( speaker_node_data[chB].group == group ) || ( speaker_node_data[chB].group == SPEAKER_NODE_HORIZONTAL && speaker_node_data[chA].group == group ) ) + { + int16_t ConnectionClass = determine_connection_class( speaker_node_data, num_speaker_nodes, group, chA, chB ); + /* Connection is considered only if there is no speaker node behind it */ + if ( ConnectionClass != CONNECTION_WITH_SPEAKER_NODE_BEHIND ) + { + /* Store connection information */ + c_options[index].chA = chA; + c_options[index].chB = chB; + c_options[index].arc = acosf( dotp( speaker_node_data[chA].unit_vec, speaker_node_data[chB].unit_vec, 3 ) ); + c_options[index].arc_weighted = c_options[index].arc; + + /* A special case, mainly accounting for ELEVATED L,R,C speaker nodes. + A triplet between these nodes is not desired if there is a top node, + a penalty is implemented to take care of this. */ + if ( ConnectionClass == ELEVATED_PLANE_THIN_TRIANGLE_CONNECTION ) + { + c_options[index].arc_weighted *= 2.0f; + } + + /* If the connection passes a pre-determined plane of speaker nodes, then add further penalty */ + if ( check_plane_crossing( speaker_node_data[chA].ele_deg, speaker_node_data[chB].ele_deg, num_non_crossing_planes, non_crossing_plane_elevation_deg ) ) + { + c_options[index].arc_weighted *= 2.0f; + } + index++; + } + } + } + } + } + /* Number of found connection options at the half sphere */ + *num_connection_options = index; + + /* Init memory for reordered connection options and order by arc_weighted, + * which informs of the preference order of the connections in case they cross */ + c_options_reorder = (ConnectionOption *) count_malloc( sizeof( ConnectionOption ) * ( *num_connection_options ) ); + for ( c = 0; c < *num_connection_options; c++ ) + { + float min_arc_weighted; + int16_t min_arc_index; + min_arc_weighted = 1e20f; + min_arc_index = -1; + + for ( c_cmp = 0; c_cmp < *num_connection_options; c_cmp++ ) + { + if ( c_options[c_cmp].arc_weighted <= min_arc_weighted ) + { + min_arc_weighted = c_options[c_cmp].arc_weighted; + min_arc_index = c_cmp; + } + } + c_options_reorder[c].chA = c_options[min_arc_index].chA; + c_options_reorder[c].chB = c_options[min_arc_index].chB; + c_options_reorder[c].arc = c_options[min_arc_index].arc; + c_options_reorder[c].arc_weighted = c_options[min_arc_index].arc_weighted; + c_options[min_arc_index].arc_weighted = 1e20f; + } + + /* Set reordered connections as output and free temporary data */ + *connection_options_pr = c_options_reorder; + count_free( c_options ); + + return; +} + +/*-------------------------------------------------------------------------* + * formulate_half_sphere_connections() + * + * Formulate half-sphere connections + *-------------------------------------------------------------------------*/ + +static void formulate_half_sphere_connections( + const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + const enum SpeakerNodeGroup group, /* i : speaker node group */ + int16_t connections[][2], /* o : vector of connections */ + int16_t *connection_write_index, + const int16_t max_num_connections, /* i : max number of connections */ + const int16_t num_non_crossing_planes, /* i : number of non-crossing planes */ + const float *non_crossing_plane_elevation_deg /* i : vector of non-crossing plane elevations */ +) +{ + /* Variable initializations */ + int16_t c, chA, chB, cmp_chA, cmp_chB, k, c_opt; + int16_t new_connection_is_valid; + int16_t within_first_arc; + float planeCrossingVec[3]; + float new_arc; + float new_cross[3]; + float tmpFloat; + float cmp_arc; + float normVal; + float angleCmp; + float connection_arc[( VBAP_MAX_NUM_SPEAKER_NODES - 2 ) * 3]; + float connection_cross[( VBAP_MAX_NUM_SPEAKER_NODES - 2 ) * 3][3]; + ConnectionOption *connection_options; + int16_t num_connection_options; + int16_t half_sphere_first_connection; + + half_sphere_first_connection = *connection_write_index; + + /* Obtain all connection options (i.e., channel pairs) at the half sphere. The function orders them + * in terms of which connection to keep if two connections would cross each other. */ + get_half_sphere_connection_options( + speaker_node_data, + group, + num_speaker_nodes, + num_non_crossing_planes, + non_crossing_plane_elevation_deg, + &connection_options, + &num_connection_options ); + + set_f( connection_arc, 0.0f, max_num_connections ); + for ( c = 0; c < max_num_connections; c++ ) + { + set_f( connection_cross[c], 0.0f, 3 ); + } + + /* The following loop goes through all reasonable chA - chB pairs for the half-sphere */ + c_opt = 0; + while ( c_opt < num_connection_options && *connection_write_index < max_num_connections ) + { + chA = connection_options[c_opt].chA; + chB = connection_options[c_opt].chB; + new_arc = connection_options[c_opt].arc; + + /* Cross-product is needed for later stages */ + vbap_crossp( speaker_node_data[chA].unit_vec, speaker_node_data[chB].unit_vec, new_cross ); + + /* Determine if new connection between chA and chB is valid */ + new_connection_is_valid = 1; + c = half_sphere_first_connection; + while ( ( c < *connection_write_index ) && new_connection_is_valid ) + { + cmp_chA = connections[c][0]; + cmp_chB = connections[c][1]; + /* The connections are compared only if they don't involve same speaker nodes */ + if ( ( cmp_chA != chA ) && ( cmp_chA != chB ) && ( cmp_chB != chA ) && ( cmp_chB != chB ) ) + { + /* The following lines determine if the connection chA-chB crosses with the connection cmp_chA-cmp_chB.*/ + /* The connections, i.e., node-pairs determine a plane. The crossing can be determined by + * studying the intersection of these planes. */ + vbap_crossp( connection_cross[c], new_cross, planeCrossingVec ); + tmpFloat = 1e-12f; + cmp_arc = connection_arc[c]; + for ( k = 0; k < 3; k++ ) + { + tmpFloat += planeCrossingVec[k] * planeCrossingVec[k]; + } + normVal = sqrtf( 1.0f / tmpFloat ); + + for ( k = 0; k < 3; k++ ) + { + planeCrossingVec[k] *= normVal; + } + + /* If the plane intersection is between both connections, then the two connections cross. */ + /* Study first if the crossing is between arc chA-chB */ + angleCmp = acosf( dotp( planeCrossingVec, speaker_node_data[chA].unit_vec, 3 ) ); + angleCmp += acosf( dotp( planeCrossingVec, speaker_node_data[chB].unit_vec, 3 ) ); + + within_first_arc = 0; + if ( fabsf( new_arc - angleCmp ) < 0.01f ) + { + within_first_arc = 1; + } + else if ( fabsf( new_arc - ( 2.0f * EVS_PI - angleCmp ) ) < 0.01f ) + { + within_first_arc = 1; + /* In this case, the plane crossing vector is inverted. The inverse is another + * plane-crossing vector, and detected to be between chA-chB connection.*/ + for ( k = 0; k < 3; k++ ) + { + planeCrossingVec[k] *= -1.0f; + } + } + + /* Study if the crossing is also between arc cmp_chA-cmp_chB */ + if ( within_first_arc > 0 ) + { + angleCmp = acosf( dotp( planeCrossingVec, speaker_node_data[cmp_chA].unit_vec, 3 ) ); + angleCmp += acosf( dotp( planeCrossingVec, speaker_node_data[cmp_chB].unit_vec, 3 ) ); + if ( fabsf( cmp_arc - angleCmp ) < 0.01f ) + { + /* A crossing is detected. The new connection is not valid, because + * the connections were ordered in order of preference (arc_weighted) */ + new_connection_is_valid = 0; + } + } + } + c++; + } + + /* Store the new connection which has been confirmed valid */ + if ( new_connection_is_valid > 0 ) + { + connections[*connection_write_index][0] = chA; + connections[*connection_write_index][1] = chB; + connection_arc[*connection_write_index] = new_arc; + connection_cross[*connection_write_index][0] = new_cross[0]; + connection_cross[*connection_write_index][1] = new_cross[1]; + connection_cross[*connection_write_index][2] = new_cross[2]; + ( *connection_write_index )++; + } + c_opt++; + } + count_free( connection_options ); + return; +} + + +/*-------------------------------------------------------------------------* + * determine_non_crossing_planes() + * + * Determine non-crossing planes + *-------------------------------------------------------------------------*/ + +/*! r: number of non-crossing planes */ +static int16_t determine_non_crossing_planes( + const int16_t num_speaker_nodes, /* i : number of speaker nodes */ + const VBAP_SPEAKER_NODE *node_data, /* i : speaker node data */ + float *non_crossing_plane_elevation_deg /* o : vector of non-crossing plane elevations */ +) +{ + float next_ele_check; + float ele_check; + float max_gap; + float gap_to_next_ls; + int16_t ch, ch_cmp; + int16_t num_planes; + + ele_check = -999.9f; + num_planes = 0; + + /* For each plane, check if a non-crossing plane should be determined */ + while ( ele_check < 90.0f ) + { + next_ele_check = 999.9f; + /* Find next node elevation that is not in horizontal plane */ + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + if ( ( node_data[ch].group != SPEAKER_NODE_HORIZONTAL ) && ( node_data[ch].ele_deg > ele_check + VBAP_EPSILON ) && ( node_data[ch].ele_deg < next_ele_check - VBAP_EPSILON ) ) + { + next_ele_check = node_data[ch].ele_deg; + } + } + ele_check = next_ele_check; + if ( ele_check > 90.0f ) + { + /* When no next node elevation found, break loop */ + break; + } + + max_gap = -9999.9f; + for ( ch = 0; ch < num_speaker_nodes; ch++ ) + { + /* Find gap to the next speaker node at the same plane */ + if ( fabsf( node_data[ch].ele_deg - ele_check ) < VBAP_EPSILON ) + { + gap_to_next_ls = 99999.9f; + for ( ch_cmp = 0; ch_cmp < num_speaker_nodes; ch_cmp++ ) + { + if ( ch_cmp != ch && fabsf( node_data[ch_cmp].ele_deg - ele_check ) < VBAP_EPSILON ) + { + float gap = node_data[ch_cmp].azi_deg - node_data[ch].azi_deg; + while ( gap < 0 ) + { + gap += 360.0f; + } + if ( gap < gap_to_next_ls ) + { + gap_to_next_ls = gap; + } + } + } + /* Find maximum gap on that plane */ + if ( gap_to_next_ls > max_gap ) + { + max_gap = gap_to_next_ls; + } + } + } + + /* If maximum gap is small enough, then a non-crossing plane is detected */ + if ( max_gap < ( VBAP_MAX_HORIZONTAL_GAP_FOR_PLANE_DETECTION + VBAP_EPSILON ) && max_gap > 0.0f ) + { + non_crossing_plane_elevation_deg[num_planes] = ele_check; + num_planes++; + if ( num_planes == VBAP_MAX_PLANES ) + { + /* Memory init limit. Does not happen with any real speaker node configuration. + Triangulation succeeds even if number of non_crossing_planes are limited. */ + break; + } + } + } + + return num_planes; +} + + +/*-------------------------------------------------------------------------* + * reorder_triplets() + * + * Reorder virtual surface triplets into provided target order. + *-------------------------------------------------------------------------*/ + +static void reorder_triplets( + VBAP_VS_TRIPLET *triplets, /* i/o : VS triplets to be reordered */ + const int16_t *target_order, /* i : Target order for VS triplets */ + const int16_t num_triplets /* i : Number of VS triplets */ +) +{ + VBAP_VS_TRIPLET tempTriplets[VBAP_MAX_NUM_TRIPLETS]; + int16_t c; + + /* First copy to temp array */ + for ( c = 0; c < num_triplets; c++ ) + { + tempTriplets[c] = triplets[c]; + } + + /* Then move back in sorted order */ + for ( c = 0; c < num_triplets; c++ ) + { + triplets[c] = tempTriplets[target_order[c]]; + } + + return; +} diff --git a/lib_dec/jbm_jb4_circularbuffer.c b/lib_dec/jbm_jb4_circularbuffer.c new file mode 100644 index 0000000000..a9da400a36 --- /dev/null +++ b/lib_dec/jbm_jb4_circularbuffer.c @@ -0,0 +1,473 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "string.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +/* local includes */ +#include "jbm_jb4_circularbuffer.h" + + +/** Calculates percentile by selecting greatest elements. + * This function partial sorts all given elements in the given buffer. + * @param[in,out] elements ascending sorted buffer of selected greatest elements + * @param[in,out] size size of elements buffer + * @param[in] capacity maximum number of elements to buffer + * @param[in] newElement element to insert in buffer if great enough */ +static void JB4_CIRCULARBUFFER_calcPercentile( JB4_CIRCULARBUFFER_ELEMENT *elements, uint16_t *size, uint16_t capacity, JB4_CIRCULARBUFFER_ELEMENT newElement ); + +/** circular buffer (FIFO) with fixed capacity */ +struct JB4_CIRCULARBUFFER +{ + /** elements of circular buffer */ + JB4_CIRCULARBUFFER_ELEMENT *data; + /** maximum allowed number of elements plus one free element (to decide between full/empty buffer) */ + uint16_t capacity; + /** position of next enque operation */ + uint16_t writePos; + /** position of next deque operation */ + uint16_t readPos; +}; + + +/* Creates a circular buffer (FIFO) */ +int16_t JB4_CIRCULARBUFFER_Create( JB4_CIRCULARBUFFER_HANDLE *ph ) +{ + JB4_CIRCULARBUFFER_HANDLE h = count_malloc( sizeof( struct JB4_CIRCULARBUFFER ) ); + + h->data = NULL; + h->capacity = 0; + h->writePos = 0; + h->readPos = 0; + + *ph = h; + + return 0; +} + + +/* Destroys the circular buffer (FIFO) */ +void JB4_CIRCULARBUFFER_Destroy( + JB4_CIRCULARBUFFER_HANDLE *ph ) +{ + JB4_CIRCULARBUFFER_HANDLE h; + + if ( !ph ) + { + return; + } + h = *ph; + if ( !h ) + { + return; + } + + if ( h->data ) + { + count_free( h->data ); + } + count_free( h ); + *ph = NULL; + + return; +} + + +/* Initializes a circular buffer (FIFO) with a fixed maximum allowed number of elements */ +int16_t JB4_CIRCULARBUFFER_Init( + JB4_CIRCULARBUFFER_HANDLE h, + uint16_t capacity ) +{ + /* keep one element free to be able to decide between full/empty buffer */ + ++capacity; + h->data = count_malloc( capacity * sizeof( JB4_CIRCULARBUFFER_ELEMENT ) ); + + h->capacity = capacity; + h->writePos = 0; + h->readPos = 0; + + return 0; +} + + +int16_t JB4_CIRCULARBUFFER_Enque( + JB4_CIRCULARBUFFER_HANDLE h, + JB4_CIRCULARBUFFER_ELEMENT element ) +{ + if ( JB4_CIRCULARBUFFER_IsFull( h ) ) + { + return -1; + } + + h->data[h->writePos] = element; + ++h->writePos; + if ( h->writePos == h->capacity ) + { + h->writePos = 0; + } + + return 0; +} + + +int16_t JB4_CIRCULARBUFFER_Deque( + JB4_CIRCULARBUFFER_HANDLE h, + JB4_CIRCULARBUFFER_ELEMENT *pElement ) +{ + if ( JB4_CIRCULARBUFFER_IsEmpty( h ) ) + { + return -1; + } + + *pElement = h->data[h->readPos]; + ++h->readPos; + if ( h->readPos == h->capacity ) + { + h->readPos = 0; + } + + return 0; +} + + +/* Returns the first element. */ +JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Front( + const JB4_CIRCULARBUFFER_HANDLE h ) +{ + JB4_CIRCULARBUFFER_ELEMENT ret; + + ret = h->data[h->readPos]; + + return ret; +} + +/* Returns the last element. */ +JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Back( + const JB4_CIRCULARBUFFER_HANDLE h ) +{ + JB4_CIRCULARBUFFER_ELEMENT ret; + + if ( h->writePos != 0U ) + { + ret = h->data[h->writePos - 1]; + } + else + { + ret = h->data[h->capacity - 1]; + } + + + return ret; +} + + +int16_t JB4_CIRCULARBUFFER_IsEmpty( + const JB4_CIRCULARBUFFER_HANDLE h ) +{ + int16_t ret; + + if ( h->readPos == h->writePos ) + { + ret = 1; + } + else + { + ret = 0; + } + + return ret; +} + + +int16_t JB4_CIRCULARBUFFER_IsFull( + const JB4_CIRCULARBUFFER_HANDLE h ) +{ + int16_t ret; + + if ( ( ( h->writePos + 1 ) % h->capacity ) == h->readPos ) + { + ret = 1; + } + else + { + ret = 0; + } + + return ret; +} + + +uint16_t JB4_CIRCULARBUFFER_Size( + const JB4_CIRCULARBUFFER_HANDLE h ) +{ + uint16_t ret; + + if ( h->readPos <= h->writePos ) + { + ret = h->writePos - h->readPos; + } + else + { + /* wrap around */ + ret = h->writePos + h->capacity - h->readPos; + } + + + return ret; +} + + +/* Calculates statistics over all elements: min element */ +void JB4_CIRCULARBUFFER_Min( + const JB4_CIRCULARBUFFER_HANDLE h, + JB4_CIRCULARBUFFER_ELEMENT *pMin ) +{ + uint16_t i; + JB4_CIRCULARBUFFER_ELEMENT minEle; + + /* init output variable */ + minEle = h->data[h->readPos]; + + if ( h->readPos <= h->writePos ) + { + /* no wrap around */ + /* calc statistics for [readPos;writePos[ */ + for ( i = h->readPos; i != h->writePos; ++i ) + { + if ( h->data[i] < minEle ) + { + minEle = h->data[i]; + } + } + } + else + { + /* wrap around */ + /* calc statistics for [readPos;capacity[ */ + for ( i = h->readPos; i != h->capacity; ++i ) + { + if ( h->data[i] < minEle ) + { + minEle = h->data[i]; + } + } + /* calc statistics for [0;writePos[ */ + for ( i = 0; i != h->writePos; ++i ) + { + if ( h->data[i] < minEle ) + { + minEle = h->data[i]; + } + } + } + + *pMin = minEle; +} + + +/* Calculates statistics over all elements: max element */ +void JB4_CIRCULARBUFFER_Max( + const JB4_CIRCULARBUFFER_HANDLE h, + JB4_CIRCULARBUFFER_ELEMENT *pMax ) +{ + uint16_t i; + JB4_CIRCULARBUFFER_ELEMENT maxEle; + + /* init output variable */ + maxEle = h->data[h->readPos]; + if ( h->readPos <= h->writePos ) + { + /* no wrap around */ + /* calc statistics for [readPos;writePos[ */ + for ( i = h->readPos; i != h->writePos; ++i ) + { + if ( h->data[i] > maxEle ) + { + maxEle = h->data[i]; + } + } + } + else + { + /* wrap around */ + /* calc statistics for [readPos;capacity[ */ + for ( i = h->readPos; i != h->capacity; ++i ) + { + if ( h->data[i] > maxEle ) + { + maxEle = h->data[i]; + } + } + /* calc statistics for [0;writePos[ */ + for ( i = 0; i != h->writePos; ++i ) + { + if ( h->data[i] > maxEle ) + { + maxEle = h->data[i]; + } + } + } + + *pMax = maxEle; + + return; +} + +#define JBM_MAX_CIRCULAR_ELEMENTS 100 + +/* Calculates statistics over a considered fraction of all elements: min element and percentile */ +void JB4_CIRCULARBUFFER_MinAndPercentile( + const JB4_CIRCULARBUFFER_HANDLE h, + uint16_t nElementsToIgnore, + JB4_CIRCULARBUFFER_ELEMENT *pMin, + JB4_CIRCULARBUFFER_ELEMENT *pPercentile ) +{ + uint16_t i; + JB4_CIRCULARBUFFER_ELEMENT maxElements[JBM_MAX_CIRCULAR_ELEMENTS]; + uint16_t maxElementsSize; + uint16_t maxElementsCapacity; + JB4_CIRCULARBUFFER_ELEMENT minEle; + + /* init output variables */ + minEle = h->data[h->readPos]; + + /* To calculate the percentile, a number of elements with the highest values are collected in maxElements in + * ascending sorted order. This array has a size of nElementsToIgnore plus one. This additional element is the + * lowest of all maxElements, and is called the percentile of all elements. */ + + maxElementsSize = 0; + maxElementsCapacity = nElementsToIgnore + 1; + assert( maxElementsCapacity <= JBM_MAX_CIRCULAR_ELEMENTS ); + if ( h->readPos <= h->writePos ) + { + /* no wrap around */ + /* calc statistics for [readPos;writePos[ */ + for ( i = h->readPos; i != h->writePos; ++i ) + { + if ( h->data[i] < minEle ) + { + minEle = h->data[i]; + } + JB4_CIRCULARBUFFER_calcPercentile( maxElements, &maxElementsSize, maxElementsCapacity, h->data[i] ); + } + } + else + { + /* wrap around */ + /* calc statistics for [readPos;capacity[ */ + for ( i = h->readPos; i != h->capacity; ++i ) + { + if ( h->data[i] < minEle ) + { + minEle = h->data[i]; + } + JB4_CIRCULARBUFFER_calcPercentile( maxElements, &maxElementsSize, maxElementsCapacity, h->data[i] ); + } + /* calc statistics for [0;writePos[ */ + for ( i = 0; i != h->writePos; ++i ) + { + if ( h->data[i] < minEle ) + { + minEle = h->data[i]; + } + JB4_CIRCULARBUFFER_calcPercentile( maxElements, &maxElementsSize, maxElementsCapacity, h->data[i] ); + } + } + + *pPercentile = maxElements[0]; + *pMin = minEle; + + return; +} + + +/* Calculates percentile by selecting greatest elements. */ +static void JB4_CIRCULARBUFFER_calcPercentile( + JB4_CIRCULARBUFFER_ELEMENT *elements, + uint16_t *size, + uint16_t capacity, + JB4_CIRCULARBUFFER_ELEMENT newElement ) +{ + uint16_t i; + + /* insert newElement if elements buffer is not yet full */ + if ( *size < capacity ) + { + for ( i = 0; i != *size; ++i ) + { + if ( newElement <= elements[i] ) + { + /* insert newElement at index i */ + memmove( elements + i + 1, elements + i, ( *size - i ) * sizeof( JB4_CIRCULARBUFFER_ELEMENT ) ); /* IVAS_fmToDo: avoid use of memmove() */ + elements[i] = newElement; + ++*size; + return; + } + } + /* newElement is maximum, just append it */ + elements[*size] = newElement; + ++*size; + return; + } + + /* check if newElement is too small to be inserted in elements buffer */ + if ( newElement <= elements[0] ) + { + return; + } + + /* select position to insert newElement to elements */ + for ( i = *size - 1; i != 0; --i ) + { + if ( newElement >= elements[i] ) + { + /* insert newElement at index i */ + memmove( elements, elements + 1, i * sizeof( JB4_CIRCULARBUFFER_ELEMENT ) ); + elements[i] = newElement; + return; + } + } + /* newElement is just greater than first on in elements buffer */ + elements[0] = newElement; + + return; +} diff --git a/lib_dec/jbm_jb4_circularbuffer.h b/lib_dec/jbm_jb4_circularbuffer.h new file mode 100644 index 0000000000..2e5a035dab --- /dev/null +++ b/lib_dec/jbm_jb4_circularbuffer.h @@ -0,0 +1,76 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef JBM_JB4_CIRCULARBUFFER_H +#define JBM_JB4_CIRCULARBUFFER_H JBM_JB4_CIRCULARBUFFER_H + +#include "prot.h" +#include "cnst.h" + +/** handle for circular buffer (FIFO) with fixed capacity */ +typedef struct JB4_CIRCULARBUFFER *JB4_CIRCULARBUFFER_HANDLE; + +/** type of circular buffer elements */ +typedef int32_t JB4_CIRCULARBUFFER_ELEMENT; + + +int16_t JB4_CIRCULARBUFFER_Create( JB4_CIRCULARBUFFER_HANDLE *ph ); + +void JB4_CIRCULARBUFFER_Destroy( JB4_CIRCULARBUFFER_HANDLE *ph ); + +int16_t JB4_CIRCULARBUFFER_Init( JB4_CIRCULARBUFFER_HANDLE h, uint16_t capacity ); + +int16_t JB4_CIRCULARBUFFER_Enque( JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT element ); + +int16_t JB4_CIRCULARBUFFER_Deque( JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT *pElement ); + +JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Front( const JB4_CIRCULARBUFFER_HANDLE h ); + +JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Back( const JB4_CIRCULARBUFFER_HANDLE h ); + +int16_t JB4_CIRCULARBUFFER_IsEmpty( const JB4_CIRCULARBUFFER_HANDLE h ); + +int16_t JB4_CIRCULARBUFFER_IsFull( const JB4_CIRCULARBUFFER_HANDLE h ); + +uint16_t JB4_CIRCULARBUFFER_Size( const JB4_CIRCULARBUFFER_HANDLE h ); + +void JB4_CIRCULARBUFFER_Min( const JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT *pMin ); + +void JB4_CIRCULARBUFFER_Max( const JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT *pMax ); + +void JB4_CIRCULARBUFFER_MinAndPercentile( const JB4_CIRCULARBUFFER_HANDLE h, uint16_t nElementsToIgnore, JB4_CIRCULARBUFFER_ELEMENT *pMin, JB4_CIRCULARBUFFER_ELEMENT *pPercentile ); + +#endif /* JBM_JB4_CIRCULARBUFFER_H */ diff --git a/lib_dec/jbm_jb4_inputbuffer.c b/lib_dec/jbm_jb4_inputbuffer.c new file mode 100644 index 0000000000..8eaf547838 --- /dev/null +++ b/lib_dec/jbm_jb4_inputbuffer.c @@ -0,0 +1,361 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +/** \file jbm_jb4_inputbuffer.c RTP input buffer with fixed capacity. */ + +/* system includes */ +#include +#include +#include "options.h" +#include "prot.h" +#include "string.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +/* local includes */ +#include "jbm_jb4_inputbuffer.h" + + +/** input buffer with fixed capacity */ +struct JB4_INPUTBUFFER +{ + /** elements of input buffer */ + JB4_INPUTBUFFER_ELEMENT *data; + /** maximum allowed number of elements plus one free element (to decide between full/empty buffer) */ + uint16_t capacity; + /** position of next enque operation */ + uint16_t writePos; + /** position of next deque operation */ + uint16_t readPos; + /** function to compare two elements */ + int16_t ( *compareFunction )( const JB4_INPUTBUFFER_ELEMENT first, const JB4_INPUTBUFFER_ELEMENT second, bool *replaceWithNewElementIfEqual ); +}; + + +/* Creates a input buffer */ +int16_t JB4_INPUTBUFFER_Create( + JB4_INPUTBUFFER_HANDLE *ph ) +{ + JB4_INPUTBUFFER_HANDLE h = count_malloc( sizeof( struct JB4_INPUTBUFFER ) ); + + h->data = NULL; + h->capacity = 0; + h->writePos = 0; + h->readPos = 0; + h->compareFunction = NULL; + + *ph = h; + + return 0; +} + + +/* Destroys the input buffer */ +void JB4_INPUTBUFFER_Destroy( + JB4_INPUTBUFFER_HANDLE *ph ) +{ + JB4_INPUTBUFFER_HANDLE h; + + if ( !ph ) + { + return; + } + h = *ph; + if ( !h ) + { + return; + } + if ( h->data ) + count_free( h->data ); + count_free( h ); + *ph = NULL; + + return; +} + + +/* Initializes a input buffer with a fixed maximum allowed number of elements */ +int16_t JB4_INPUTBUFFER_Init( + JB4_INPUTBUFFER_HANDLE h, + uint16_t capacity, + int16_t ( *compareFunction )( const JB4_INPUTBUFFER_ELEMENT first, const JB4_INPUTBUFFER_ELEMENT second, bool *replaceWithNewElementIfEqual ) ) +{ + + /* keep one element free to be able to decide between full/empty buffer */ + ++capacity; + h->data = count_malloc( capacity * sizeof( JB4_INPUTBUFFER_ELEMENT ) ); + h->capacity = capacity; + h->writePos = 0; + h->readPos = 0; + h->compareFunction = compareFunction; + + return 0; +} + + +int16_t JB4_INPUTBUFFER_Enque( + JB4_INPUTBUFFER_HANDLE h, + JB4_INPUTBUFFER_ELEMENT element, + JB4_INPUTBUFFER_ELEMENT *replacedElement ) +{ + uint16_t size; + int16_t low, high, middle, diff; + uint16_t insertPos; + uint16_t canMoveRight; + uint16_t canMoveLeft; + bool replace; + *replacedElement = NULL; + + size = JB4_INPUTBUFFER_Size( h ); + if ( size >= h->capacity - 1 ) + { + return -1; + } + + /* appending the first element is straight forward */ + if ( size == 0U ) + { + h->data[h->writePos] = element; + ++h->writePos; + if ( h->writePos == h->capacity ) + { + h->writePos = 0; + } + return 0; + } + + /* there's a high probability that the new element can be appended at the back */ + if ( h->compareFunction( element, JB4_INPUTBUFFER_Back( h ), &replace ) > 0 ) + { + h->data[h->writePos] = element; + ++h->writePos; + if ( h->writePos == h->capacity ) + { + h->writePos = 0; + } + return 0; + } + + /* out of order: use binary search to get the position to insert */ + low = 0; + high = size - 1; + while ( low <= high ) + { + middle = low + ( high - low ) / 2; + diff = h->compareFunction( element, JB4_INPUTBUFFER_Element( h, middle ), &replace ); + if ( diff < 0 ) + { + high = middle - 1; + } + else if ( diff > 0 ) + { + low = middle + 1; + } + else /* an element with same index is already stored */ + { + if ( replace != 0 ) + { + *replacedElement = h->data[( h->readPos + middle ) % h->capacity]; + h->data[( h->readPos + middle ) % h->capacity] = element; + return 0; + } + return 1; + } + } + + assert( h->compareFunction( element, JB4_INPUTBUFFER_Element( h, low ), &replace ) != 0 ); + if ( low > 0 ) + assert( h->compareFunction( element, JB4_INPUTBUFFER_Element( h, low - 1 ), &replace ) > 0 ); + assert( h->compareFunction( element, JB4_INPUTBUFFER_Element( h, low ), &replace ) < 0 ); + if ( (uint16_t) ( low + 1 ) < size ) + assert( h->compareFunction( element, JB4_INPUTBUFFER_Element( h, low + 1 ), &replace ) < 0 ); + + insertPos = ( h->readPos + low ) % h->capacity; + if ( h->readPos < h->writePos ) + { + canMoveRight = 1; + canMoveLeft = h->readPos > 0; + } + else + { + canMoveRight = insertPos < h->writePos; + canMoveLeft = insertPos > h->writePos; + } + + assert( canMoveRight != 0 || canMoveLeft != 0 ); + + if ( canMoveRight ) + { + /* move higher elements to the right and insert at insertPos */ + memmove( h->data + insertPos + 1, h->data + insertPos, ( h->writePos - insertPos ) * sizeof( JB4_INPUTBUFFER_ELEMENT ) ); /* IVAS_fmToDo: avoid use of memmove() */ + h->data[insertPos] = element; + ++h->writePos; + if ( h->writePos == h->capacity ) + { + h->writePos = 0; + } + } + else + { + /* move lower elements to the left and insert before insertPos */ + memmove( h->data + h->readPos - 1, h->data + h->readPos, low * sizeof( JB4_INPUTBUFFER_ELEMENT ) ); /* IVAS_fmToDo: avoid use of memmove() */ + h->data[insertPos - 1] = element; + --h->readPos; + assert( (int16_t) h->readPos >= 0 ); + } + + return 0; +} + + +int16_t JB4_INPUTBUFFER_Deque( + JB4_INPUTBUFFER_HANDLE h, + JB4_INPUTBUFFER_ELEMENT *pElement ) +{ + if ( JB4_INPUTBUFFER_IsEmpty( h ) ) + { + return -1; + } + + *pElement = h->data[h->readPos]; + ++h->readPos; + if ( h->readPos == h->capacity ) + { + h->readPos = 0; + } + + return 0; +} + + +/* Returns the first element. */ +JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Front( + const JB4_INPUTBUFFER_HANDLE h ) +{ + JB4_INPUTBUFFER_ELEMENT ret; + + + ret = h->data[h->readPos]; + + return ret; +} + + +/* Returns the last element. */ +JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Back( + const JB4_INPUTBUFFER_HANDLE h ) +{ + JB4_INPUTBUFFER_ELEMENT ret; + + if ( h->writePos != 0U ) + { + ret = h->data[h->writePos - 1]; + } + else + { + ret = h->data[h->capacity - 1]; + } + + return ret; +} + + +/* Returns the element with the given index (0 means front element). */ +JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Element( + const JB4_INPUTBUFFER_HANDLE h, + uint16_t index ) +{ + JB4_INPUTBUFFER_ELEMENT ret; + + /* return h->data[(h->readPos + index) % h->capacity] without error handling */ + if ( h->readPos + index < h->capacity ) + { + ret = h->data[h->readPos + index]; + } + else + { + /* wrap around */ + ret = h->data[h->readPos + index - h->capacity]; + } + + return ret; +} + + +int16_t JB4_INPUTBUFFER_IsEmpty( + const JB4_INPUTBUFFER_HANDLE h ) +{ + int16_t ret; + + ret = h->readPos == h->writePos; + + return ret; +} + + +int16_t JB4_INPUTBUFFER_IsFull( + const JB4_INPUTBUFFER_HANDLE h ) +{ + int16_t ret; + + ret = 0; + if ( JB4_INPUTBUFFER_Size( h ) == h->capacity - 1 ) + { + ret = 1; + } + + return ret; +} + + +uint16_t JB4_INPUTBUFFER_Size( + const JB4_INPUTBUFFER_HANDLE h ) +{ + uint16_t ret; + + if ( h->readPos <= h->writePos ) + { + ret = h->writePos - h->readPos; + } + else + { + /* wrap around */ + ret = h->writePos + h->capacity - h->readPos; + } + + return ret; +} diff --git a/lib_dec/jbm_jb4_inputbuffer.h b/lib_dec/jbm_jb4_inputbuffer.h new file mode 100644 index 0000000000..7ab8086470 --- /dev/null +++ b/lib_dec/jbm_jb4_inputbuffer.h @@ -0,0 +1,76 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/** \file jbm_jb4_inputbuffer.h RTP input buffer with fixed capacity. */ + +#ifndef JBM_JB4_INPUTBUFFER_H +#define JBM_JB4_INPUTBUFFER_H JBM_JB4_INPUTBUFFER_H + +#include +#include +#include "options.h" + + +typedef struct JB4_INPUTBUFFER *JB4_INPUTBUFFER_HANDLE; + +typedef void *JB4_INPUTBUFFER_ELEMENT; + +int16_t JB4_INPUTBUFFER_Create( JB4_INPUTBUFFER_HANDLE *ph ); + +void JB4_INPUTBUFFER_Destroy( JB4_INPUTBUFFER_HANDLE *ph ); + +int16_t JB4_INPUTBUFFER_Init( + JB4_INPUTBUFFER_HANDLE h, + uint16_t capacity, + int16_t ( *compareFunction )( const JB4_INPUTBUFFER_ELEMENT newElement, const JB4_INPUTBUFFER_ELEMENT arrayElement, bool *replaceWithNewElementIfEqual ) ); + +int16_t JB4_INPUTBUFFER_Enque( JB4_INPUTBUFFER_HANDLE h, JB4_INPUTBUFFER_ELEMENT element, JB4_INPUTBUFFER_ELEMENT *replacedElement ); + +int16_t JB4_INPUTBUFFER_Deque( JB4_INPUTBUFFER_HANDLE h, JB4_INPUTBUFFER_ELEMENT *pElement ); + +JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Front( const JB4_INPUTBUFFER_HANDLE h ); + +JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Back( const JB4_INPUTBUFFER_HANDLE h ); + +JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Element( const JB4_INPUTBUFFER_HANDLE h, uint16_t index ); + +int16_t JB4_INPUTBUFFER_IsEmpty( const JB4_INPUTBUFFER_HANDLE h ); + +int16_t JB4_INPUTBUFFER_IsFull( const JB4_INPUTBUFFER_HANDLE h ); + +uint16_t JB4_INPUTBUFFER_Size( const JB4_INPUTBUFFER_HANDLE h ); + +#endif /* JBM_JB4_INPUTBUFFER_H */ diff --git a/lib_dec/jbm_jb4_jmf.c b/lib_dec/jbm_jb4_jmf.c new file mode 100644 index 0000000000..7b0dd2f188 --- /dev/null +++ b/lib_dec/jbm_jb4_jmf.c @@ -0,0 +1,327 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/** \file jbm_jb4_jmf.c jitter measure fifo - a fifo used for windowed measure of network status */ + +/* system includes */ +#include +#include +#include +#include +#include "options.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/* local includes */ +#include "jbm_jb4_jmf.h" +#include "jbm_jb4_circularbuffer.h" +/* instrumentation */ + + +/** jitter measure fifo - a fifo used for windowed measure of network status */ +struct JB4_JMF +{ + /** scale of system time and RTP time stamps */ + int16_t timeScale; + /** the window size of the fifo as time in sysTimeScale */ + uint16_t maxWindowDuration; + /** considered fraction in 1/1000 units, e.g. 900 ignores 10% of the highest samples */ + uint16_t consideredFraction; + + /** fifo containing the delay entries (ordered by receive time) */ + JB4_CIRCULARBUFFER_HANDLE fifo; + /** fifo containing the offset entries (ordered by receive time) */ + JB4_CIRCULARBUFFER_HANDLE offsetFifo; + /** fifo containing the RTP times of the values in offsetFifo (ordered by receive time) */ + JB4_CIRCULARBUFFER_HANDLE timeStampFifo; + /** flag if the first packet was already pushed */ + int16_t firstPacketPushed; + /** last packets system time in microseconds */ + int32_t lastSysTime; + /** RTP time stamp of the last pushed packet */ + int32_t lastRtpTimeStamp; + /** last packets calculated delay value */ + int32_t lastDelay; + /** number of elements to ignore for percentile calculation - value set within init */ + int16_t nElementsToIgnore; +}; + + +/** helper function to add an entry at back of the buffer */ +static void JB4_JMF_pushBack( JB4_JMF_HANDLE h, int32_t delay, int32_t offset, uint32_t time ); +/** helper function to remove an entry from the front of the buffer */ +static void JB4_JMF_popFront( JB4_JMF_HANDLE h ); + + +int16_t JB4_JMF_Create( + JB4_JMF_HANDLE *ph ) +{ + JB4_JMF_HANDLE h = count_malloc( sizeof( struct JB4_JMF ) ); + + JB4_CIRCULARBUFFER_Create( &h->fifo ); + JB4_CIRCULARBUFFER_Create( &h->offsetFifo ); + JB4_CIRCULARBUFFER_Create( &h->timeStampFifo ); + + h->timeScale = 1000; + h->consideredFraction = 1000; + h->firstPacketPushed = 0; + h->lastSysTime = 0; + h->lastRtpTimeStamp = 0; + h->lastDelay = 0; + h->nElementsToIgnore = 0; + + *ph = h; + + return 0; +} + + +void JB4_JMF_Destroy( + JB4_JMF_HANDLE *ph ) +{ + JB4_JMF_HANDLE h; + + if ( !ph ) + { + return; + } + h = *ph; + if ( !h ) + { + return; + } + + JB4_CIRCULARBUFFER_Destroy( &h->fifo ); + JB4_CIRCULARBUFFER_Destroy( &h->offsetFifo ); + JB4_CIRCULARBUFFER_Destroy( &h->timeStampFifo ); + + count_free( h ); + *ph = NULL; + + return; +} + + +/* function to set the window size of the fifo and the fraction which will be considered */ +int16_t JB4_JMF_Init( + JB4_JMF_HANDLE h, + int16_t timeScale, + uint16_t windowSize, + uint16_t windowDuration, + uint16_t consideredFraction ) +{ + + /* check parameters */ + if ( windowSize != 0U && consideredFraction * windowSize / 1000 < 2 ) + { + return -1; + } + if ( consideredFraction > 1000 ) + { + return -1; + } + + /* store values */ + h->timeScale = timeScale; + h->maxWindowDuration = windowDuration; + h->consideredFraction = consideredFraction; + + JB4_CIRCULARBUFFER_Init( h->fifo, windowSize ); + JB4_CIRCULARBUFFER_Init( h->offsetFifo, windowSize ); + JB4_CIRCULARBUFFER_Init( h->timeStampFifo, windowSize ); + + h->nElementsToIgnore = (uint16_t) ( windowSize * ( 1000 - consideredFraction ) / 1000 ); + + return 0; +} + + +/* function to calculate delay for the current packet */ +int16_t JB4_JMF_PushPacket( + JB4_JMF_HANDLE h, + uint32_t sysTime, + uint32_t rtpTimeStamp ) +{ + int32_t rtpTimeDiff, sysTimeDiff; + int32_t offset, delay; + + /* check if this is the first entry */ + if ( h->firstPacketPushed == 0 ) + { + h->firstPacketPushed = 1; + h->lastSysTime = sysTime; + h->lastRtpTimeStamp = rtpTimeStamp; + return 0; + } + + rtpTimeDiff = rtpTimeStamp - h->lastRtpTimeStamp; + sysTimeDiff = sysTime - h->lastSysTime; + offset = sysTime - rtpTimeStamp; + + /* get the delay (yes, signed!!!!) */ + delay = sysTimeDiff - rtpTimeDiff + h->lastDelay; + + /* remember old values */ + h->lastSysTime = sysTime; + h->lastRtpTimeStamp = rtpTimeStamp; + /* reset delay if absolute value is greater than 60s + * to avoid overflow caused by clockdrift */ + if ( delay > 60 * h->timeScale || delay < -60 * h->timeScale ) + { + h->lastDelay = 0; + } + else + { + h->lastDelay = delay; + } + + JB4_JMF_pushBack( h, delay, offset, rtpTimeStamp ); + + return 0; +} + + +/* function to get the current jitter */ +int16_t JB4_JMF_Jitter( + const JB4_JMF_HANDLE h, + uint32_t *jitter ) +{ + JB4_CIRCULARBUFFER_ELEMENT min_ele, percentile; + + /* sanity check (must not be empty) and return invalid result if there is only one entry */ + if ( JB4_CIRCULARBUFFER_Size( h->fifo ) < 2U ) + { + return -1; + } + + JB4_CIRCULARBUFFER_MinAndPercentile( h->fifo, h->nElementsToIgnore, &min_ele, &percentile ); + + /* return the difference between the highest considered and the smallest value */ + *jitter = percentile - min_ele; + assert( percentile >= min_ele ); + + return 0; +} + + +/* function to get the minimum offset between received time and time stamp of all entries in the fifo */ +int16_t JB4_JMF_MinOffset( + const JB4_JMF_HANDLE h, + int32_t *offset ) +{ + JB4_CIRCULARBUFFER_ELEMENT min_ele; + + if ( JB4_CIRCULARBUFFER_IsEmpty( h->offsetFifo ) ) + { + return -1; + } + + JB4_CIRCULARBUFFER_Min( h->offsetFifo, &min_ele ); + + *offset = min_ele; + + return 0; +} + + +/***************************************************************************** + **************************** private functions ****************************** + *****************************************************************************/ + +/* helper function to add entry at back of the buffer */ +static void JB4_JMF_pushBack( + JB4_JMF_HANDLE h, + int32_t delay, + int32_t offset, + uint32_t time ) +{ + int32_t minTime, maxTime; + uint32_t duration; + + /* check for size and discard first entry if too big */ + if ( JB4_CIRCULARBUFFER_IsFull( h->fifo ) ) + { + JB4_JMF_popFront( h ); + } + + /* push back new entry */ + JB4_CIRCULARBUFFER_Enque( h->fifo, delay ); + JB4_CIRCULARBUFFER_Enque( h->offsetFifo, offset ); + JB4_CIRCULARBUFFER_Enque( h->timeStampFifo, time ); + + /* check for duration and discard first entries if too long */ + minTime = JB4_CIRCULARBUFFER_Front( h->timeStampFifo ); + maxTime = JB4_CIRCULARBUFFER_Back( h->timeStampFifo ); + if ( maxTime > minTime ) + { + duration = maxTime - minTime; + while ( duration > h->maxWindowDuration ) + { + JB4_JMF_popFront( h ); + minTime = JB4_CIRCULARBUFFER_Front( h->timeStampFifo ); + if ( maxTime <= minTime ) + { + break; + } + duration = maxTime - minTime; + } + } + + return; +} + + +/* helper function to remove an entry from the front of the buffer */ +static void JB4_JMF_popFront( + JB4_JMF_HANDLE h ) +{ + JB4_CIRCULARBUFFER_ELEMENT tmpElement; + + /* try to remove one element - fails if empty */ + if ( JB4_CIRCULARBUFFER_Deque( h->fifo, &tmpElement ) != 0 ) + { + return; + } + + /* also remove offset entry */ + JB4_CIRCULARBUFFER_Deque( h->offsetFifo, &tmpElement ); + JB4_CIRCULARBUFFER_Deque( h->timeStampFifo, &tmpElement ); + + return; +} diff --git a/lib_dec/jbm_jb4_jmf.h b/lib_dec/jbm_jb4_jmf.h new file mode 100644 index 0000000000..b945c31884 --- /dev/null +++ b/lib_dec/jbm_jb4_jmf.h @@ -0,0 +1,61 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/** \file jbm_jb4_jmf.h jitter measure fifo - a fifo used for windowed measure of network status */ + +#ifndef JBM_JB4_JMF_H +#define JBM_JB4_JMF_H JBM_JB4_JMF_H + +#include +#include "options.h" + +/** handle for jitter measure fifo - a fifo used for windowed measure of network status */ +typedef struct JB4_JMF *JB4_JMF_HANDLE; + +int16_t JB4_JMF_Create( JB4_JMF_HANDLE *ph ); + +void JB4_JMF_Destroy( JB4_JMF_HANDLE *ph ); + +int16_t JB4_JMF_Init( JB4_JMF_HANDLE h, int16_t timeScale, uint16_t windowSize, uint16_t windowDuration, uint16_t consideredFraction ); + +int16_t JB4_JMF_PushPacket( JB4_JMF_HANDLE h, uint32_t sysTime, uint32_t rtpTimeStamp ); + +int16_t JB4_JMF_Jitter( const JB4_JMF_HANDLE h, uint32_t *jitter ); + +int16_t JB4_JMF_MinOffset( const JB4_JMF_HANDLE h, int32_t *offset ); + + +#endif /* JBM_JB4_JMF_H */ diff --git a/lib_dec/jbm_jb4sb.c b/lib_dec/jbm_jb4sb.c new file mode 100644 index 0000000000..28dfd43e61 --- /dev/null +++ b/lib_dec/jbm_jb4sb.c @@ -0,0 +1,1510 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +/*! \file jbm_jb4sb.c EVS Jitter Buffer Management Interface */ + +/* system headers */ +#include +#include +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +/* local headers */ +#include "jbm_jb4_circularbuffer.h" +#include "jbm_jb4_inputbuffer.h" +#include "jbm_jb4_jmf.h" +#include "jbm_jb4sb.h" +#include "prot.h" + + +#define JB4_MIN( a, b ) ( ( a ) > ( b ) ? ( b ) : ( a ) ) +#define JB4_MAX( a, b ) ( ( a ) > ( b ) ? ( a ) : ( b ) ) + +#define MAXOFFSET 10 + +/*! Calculates the difference between two RTP timestamps - the diff is positive, if B 'later', negative otherwise */ +static int32_t JB4_rtpTimeStampDiff( uint32_t tsA, uint32_t tsB ); +/* function to calculate different options for the target playout delay */ +static void JB4_targetPlayoutDelay( const JB4_HANDLE h, uint32_t *targetMin, uint32_t *targetMax, uint32_t *targetDtx, uint32_t *targetStartUp ); +/*! function to do playout adaptation before playing the next data unit */ +/*! In case of time shrinking, data units will be dropped before the next data unit to play is returned and + * in case of time stretching a empty data unit is returned and the frame should be concealed. + * @param[in] now current system time + * @param[out] dataUnit the next data unit to play + * @param[out] scale the scale in percent used as target for time scaling of the returned data unit + * @param[out] maxScaling the maximum allowed external time scaling */ +static int16_t JB4_adaptPlayout( JB4_HANDLE h, uint32_t sysTime, uint32_t extBufferedTime, JB4_DATAUNIT_HANDLE *pDataUnit, uint32_t *scale, uint32_t *maxScaling ); +/*! function to do playout adaptation before playing the first data unit */ +/*! @param[in] now current system time + * @param[out] prebuffer true, if the data unit should be prebuffered */ +static void JB4_adaptFirstPlayout( JB4_HANDLE h, uint32_t sysTime, bool *prebuffer ); +/*! function for playout adaptation while active (no DTX) */ +static void JB4_adaptActivePlayout( JB4_HANDLE h, uint32_t extBufferedTime, uint32_t *scale, uint32_t *maxScaling ); +/*! function for playout adaptation while DTX */ +static void JB4_adaptDtxPlayout( JB4_HANDLE h, uint32_t sysTime, bool *stretchTime ); +/*! function to look into the buffer and check if it makes sense to drop a data unit */ +/*! @param[out] dropEarly true, if a data unit could be dropped early + * @param[out] buffered the buffered time span in timeScale units + * @return true, if a data unit could be dropped */ +static int16_t JB4_inspectBufferForDropping( const JB4_HANDLE h, bool *dropEarly, uint32_t *buffered ); +/* function to look into the buffer and check if it makes sense to drop a data unit during DTX */ +static int16_t JB4_checkDtxDropping( const JB4_HANDLE h ); +/*! function to estimate the short term jitter */ +static void JB4_estimateShortTermJitter( JB4_HANDLE h, uint32_t rcvTime, uint32_t rtpTimeStamp ); +/*! function to pop a data unit from the buffer */ +static void JB4_popFromBuffer( JB4_HANDLE h, uint32_t sysTime, JB4_DATAUNIT_HANDLE *pDataUnit ); +/*! function to drop a data unit from the buffer - updates nShrinked */ +static void JB4_dropFromBuffer( JB4_HANDLE h ); +/*! function to calculate the playout delay based on the current jitter */ +/*! @param[in] playTime the system time when the data unit will be played + * @param[in] timeStamp the time stamp of the data unit to played + * @param[out] delay the calculated playout delay */ +static int16_t JB4_playoutDelay( const JB4_HANDLE h, uint32_t playTime, uint32_t rtpTimeStamp, uint32_t *delay ); +/*! function to update lastPlayoutDelay and lastTargetTime after popFromBuffer() */ +static void JB4_updateLastTimingMembers( JB4_HANDLE h, uint32_t playTime, uint32_t rtpTimeStamp ); +/*! function to compare the RTP time stamps of two data units: newElement==arrayElement ? 0 : (newElement>arrayElement ? +1 : -1) */ +static int16_t JB4_inputBufferCompareFunction( const JB4_INPUTBUFFER_ELEMENT newElement, const JB4_INPUTBUFFER_ELEMENT arrayElement, bool *replaceWithNewElementIfEqual ); + + +/*! Jitter Buffer Management Interface */ +struct JB4 +{ + /*! @name statistics for user */ + /*@{ */ + /*! the number of late lost data units */ + uint32_t nLateLost; + /*! the number of data units that were available (not NULL) at playout time */ + uint32_t nAvailablePopped; + /*! the number of data units that were not available (NULL) at playout time */ + uint32_t nUnavailablePopped; + /*! the number of unavailable pops since the last available one - used as temp value for nLost and nStretched */ + uint32_t nLostOrStretched; + /*! the number of data units that were lost at playout time */ + uint32_t nLost; + /*! the number of empty data units inserted for playout adaptation */ + uint32_t nStretched; + /*! the number of data units dropped for playout adaptation */ + /*! This function counts all time shrinking events, no matter if a dropped data unit was actually available. */ + uint32_t nShrinked; + /*! the number of data units that were returned to create comfort noice (including NULL) */ + uint32_t nComfortNoice; + /*! the number of jitter induced concealment operations (as defined in 3GPP TS 26.114) */ + uint32_t jitterInducedConcealments; + /*! the target playout delay of the last returned data unit */ + uint32_t targetPlayoutDelay; + /*! the target playout time of the last returned data unit */ + uint32_t lastTargetTime; + /*@} */ + /*! @name internal configuration values - do not change!!! */ + /*@{ */ + /*! internal time scale for all calculations */ + int16_t timeScale; + /*! internal frame duration in timeScale units */ + uint32_t frameDuration; + /*@} */ + /*! @name jitter buffer configuration values */ + /*@{ */ + /*! the allowed delay reserve in addition to network jitter to reduce late-loss [milliseconds] */ + int16_t safetyMargin; + /*@} */ + /*! @name data for short term jitter estimation */ + /*@{ */ + /*! short term jitter measure FIFO */ + JB4_JMF_HANDLE stJmf; + /*! FIFO of short term jitter values */ + JB4_CIRCULARBUFFER_HANDLE stJitterFifo; + /*! FIFO of RTP time stamps for the values stored in stJitterFifo */ + JB4_CIRCULARBUFFER_HANDLE stTimeStampFifo; + /*! short term jitter */ + uint32_t stJitter; + /*@} */ + /*! @name jitter buffer data */ + /*@{ */ + /*! true, if a data unit was already popped from the buffer */ + bool firstDataUnitPopped; + /*! system time of the previous JB4_PopDataUnit() call */ + uint32_t prevPopSysTime; + /*! RTP timestamp of the last played/dropped data unit that was actually available */ + uint32_t lastReturnedTs; + /*! true, if the last popped data unit contained no active signal, i.e. silence -> hint for DTX */ + bool lastPoppedWasSilence; + /*! the playout time minus the minimum offset of the last played data unit in microseconds */ + int32_t lastPlayoutOffset; + /*! RTP time stamp of the next data unit that is expected to be fetched from the buffer */ + uint32_t nextExpectedTs; + Word16 rfOffset2Active; + Word16 rfOffset3Active; + Word16 rfOffset5Active; + Word16 rfOffset7Active; + Word32 rfDelay; + /*! long term jitter measure FIFO */ + JB4_JMF_HANDLE ltJmf; + + uint32_t FecOffWinLen; + uint32_t FecOffWin[10]; + uint32_t optimum_offset; + + float netLossRate; + Word32 nPartialCopiesUsed; + Word32 last_nLost; + Word32 last_ntot; + + uint32_t totWin; + bool pre_partial_frame; + /*@} */ + + /*! @name members to store the data units */ + /*@{ */ + /*! the data unit buffer */ + JB4_INPUTBUFFER_HANDLE inputBuffer; + struct JB4_DATAUNIT memorySlots[MAX_JBM_SLOTS]; + JB4_DATAUNIT_HANDLE freeMemorySlots[MAX_JBM_SLOTS]; + uint16_t nFreeMemorySlots; + /*@} */ +}; /* JB4 */ + + +ivas_error JB4_Create( + JB4_HANDLE *ph ) +{ + int16_t iter; + JB4_HANDLE h; + + if ( ( h = count_malloc( sizeof( struct JB4 ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JB4 structure\n" ) ); + } + + /* statistics for user */ + h->nLateLost = 0; + h->nAvailablePopped = 0; + h->nUnavailablePopped = 0; + h->nLostOrStretched = 0; + h->nLost = 0; + h->nStretched = 0; + h->nShrinked = 0; + h->nComfortNoice = 0; + h->jitterInducedConcealments = 0; + h->targetPlayoutDelay = 0; + h->lastTargetTime = 0; + /* internal configuration values - do not change!!! */ + h->timeScale = 0; + h->frameDuration = 0; + /* jitter buffer configuration values: done in JB4_Init() */ + /* short term jitter evaluation */ + JB4_JMF_Create( &h->stJmf ); + JB4_CIRCULARBUFFER_Create( &h->stJitterFifo ); + JB4_CIRCULARBUFFER_Create( &h->stTimeStampFifo ); + h->stJitter = 0; + /* jitter buffer data */ + h->firstDataUnitPopped = false; + h->prevPopSysTime = 0; + h->lastReturnedTs = 0; + h->lastPoppedWasSilence = false; + h->lastPlayoutOffset = 0; + h->nextExpectedTs = 0; + h->rfOffset2Active = 0; + h->rfOffset3Active = 0; + h->rfOffset5Active = 0; + h->rfOffset7Active = 0; + h->rfDelay = 0; + JB4_JMF_Create( &h->ltJmf ); + h->pre_partial_frame = 0; + + h->FecOffWinLen = 0; + for ( iter = 0; iter < 10; iter++ ) + { + h->FecOffWin[iter] = 0; + } + h->optimum_offset = 3; + h->totWin = 0; + h->netLossRate = 0.0f; + move32(); + h->nPartialCopiesUsed = 0; + move32(); + h->last_nLost = 0; + move32(); + h->last_ntot = 0; + move32(); + + /* members to store the data units */ + JB4_INPUTBUFFER_Create( &h->inputBuffer ); + /* allocate memory for data units */ + for ( iter = 0; iter < MAX_JBM_SLOTS; ++iter ) + { + h->memorySlots[iter].data = count_malloc( MAX_AU_SIZE ); + h->freeMemorySlots[iter] = &h->memorySlots[iter]; + } + h->nFreeMemorySlots = MAX_JBM_SLOTS; + *ph = h; + + return IVAS_ERR_OK; +} + + +void JB4_Destroy( + JB4_HANDLE *ph ) +{ + JB4_HANDLE h; + uint16_t i; + + if ( !ph ) + { + return; + } + h = *ph; + if ( !h ) + { + return; + } + + JB4_JMF_Destroy( &h->stJmf ); + JB4_CIRCULARBUFFER_Destroy( &h->stJitterFifo ); + JB4_CIRCULARBUFFER_Destroy( &h->stTimeStampFifo ); + JB4_JMF_Destroy( &h->ltJmf ); + JB4_INPUTBUFFER_Destroy( &h->inputBuffer ); + + for ( i = 0; i < MAX_JBM_SLOTS; ++i ) + { + count_free( h->memorySlots[i].data ); + } + + count_free( h ); + *ph = NULL; + + return; +} + + +int16_t JB4_Init( + JB4_HANDLE h, + int16_t safetyMargin ) +{ + uint16_t ltJmfSize, stFifoSize, stJmfSize, stJmfAllowedLateLoss; + uint16_t inputBufferCapacity; + + /* internal timescale is 1000, frame duration is 20ms */ + h->timeScale = 1000; /* ms */ + h->frameDuration = 20; /* ms */ + + /* jitter buffer configuration values */ + h->safetyMargin = safetyMargin; + + /* long term jitter measure FIFO: 500 frames and 10s */ + ltJmfSize = 10000; + JB4_JMF_Init( h->ltJmf, h->timeScale, ltJmfSize / 20, ltJmfSize, 1000 ); + /* short term jitter evaluation */ + stFifoSize = 200; + stJmfSize = 50; + stJmfAllowedLateLoss = 60; /* 6%, e.g. ignore three packets out of 50 */ + JB4_CIRCULARBUFFER_Init( h->stJitterFifo, stFifoSize ); + JB4_CIRCULARBUFFER_Init( h->stTimeStampFifo, stFifoSize ); + JB4_JMF_Init( h->stJmf, h->timeScale, stJmfSize, h->timeScale /* 1s */, (uint16_t) ( 1000 - stJmfAllowedLateLoss ) ); + + inputBufferCapacity = MAX_JBM_SLOTS - 2; + JB4_INPUTBUFFER_Init( h->inputBuffer, inputBufferCapacity, JB4_inputBufferCompareFunction ); + + return 0; +} + + +/* Returns a memory slot to store a new data unit */ +JB4_DATAUNIT_HANDLE JB4_AllocDataUnit( + JB4_HANDLE h ) +{ + JB4_DATAUNIT_HANDLE dataUnit; + while ( h->nFreeMemorySlots == 0 ) + { + assert( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) == 0 ); + JB4_dropFromBuffer( h ); + } + + --h->nFreeMemorySlots; + dataUnit = h->freeMemorySlots[h->nFreeMemorySlots]; + h->freeMemorySlots[h->nFreeMemorySlots] = NULL; + assert( dataUnit != NULL ); + + return dataUnit; +} + + +/* Notifies the JBM that a data unit is no longer used and the memory can be reused */ +void JB4_FreeDataUnit( + JB4_HANDLE h, + JB4_DATAUNIT_HANDLE dataUnit ) +{ + assert( dataUnit != NULL ); + assert( h->nFreeMemorySlots < MAX_JBM_SLOTS ); + h->freeMemorySlots[h->nFreeMemorySlots] = dataUnit; + h->nFreeMemorySlots++; + + return; +} + + +int16_t JB4_PushDataUnit( + JB4_HANDLE h, + JB4_DATAUNIT_HANDLE dataUnit, + uint32_t rcvTime ) +{ + JB4_DATAUNIT_HANDLE droppedDataUnit = NULL; + + assert( dataUnit->duration == h->frameDuration ); + assert( dataUnit->timeScale == (uint16_t) h->timeScale ); + + /* ignore frames from too far in future (3 seconds) */ + if ( h->firstDataUnitPopped && JB4_rtpTimeStampDiff( h->lastReturnedTs, dataUnit->timeStamp ) >= + (int32_t) ( 50 * 3 * dataUnit->duration ) ) + { + JB4_FreeDataUnit( h, dataUnit ); + return 0; + } + + /* reserve space for one element to add: drop oldest if buffer is full */ + while ( JB4_INPUTBUFFER_IsFull( h->inputBuffer ) ) + { + JB4_dropFromBuffer( h ); + } + assert( JB4_INPUTBUFFER_IsFull( h->inputBuffer ) == 0 ); + + /* do statistics on partial copy offset using active primary copies to + * avoid unexpected resets because RF_NO_DATA partial copies are dropped before JBM */ + if ( dataUnit->silenceIndicator == 0 && dataUnit->partial_frame == 0 ) + { + if ( dataUnit->partialCopyOffset == 0 ) + { + if ( h->rfOffset2Active > 0 ) + --h->rfOffset2Active; + if ( h->rfOffset3Active > 0 ) + --h->rfOffset3Active; + if ( h->rfOffset5Active > 0 ) + --h->rfOffset5Active; + if ( h->rfOffset7Active > 0 ) + --h->rfOffset7Active; + } + else if ( dataUnit->partialCopyOffset == 2 ) + { + h->rfOffset2Active = 100; + h->rfOffset3Active = 0; + h->rfOffset5Active = 0; + h->rfOffset7Active = 0; + } + else if ( dataUnit->partialCopyOffset == 3 ) + { + h->rfOffset2Active = 0; + h->rfOffset3Active = 100; + h->rfOffset5Active = 0; + h->rfOffset7Active = 0; + } + else if ( dataUnit->partialCopyOffset == 5 ) + { + h->rfOffset2Active = 0; + h->rfOffset3Active = 0; + h->rfOffset5Active = 100; + h->rfOffset7Active = 0; + } + else if ( dataUnit->partialCopyOffset == 7 ) + { + h->rfOffset2Active = 0; + h->rfOffset3Active = 0; + h->rfOffset5Active = 0; + h->rfOffset7Active = 100; + } + } + + if ( dataUnit->partial_frame != 0 ) + { + /* check for "real" late loss: a frame with higher/same timestamp was already returned to be fed into decoder */ + if ( h->firstDataUnitPopped && JB4_rtpTimeStampDiff( h->lastReturnedTs, dataUnit->timeStamp ) <= 0 ) + { + JB4_FreeDataUnit( h, dataUnit ); + return 0; + } + + /* drop partial copy if the missing frame was already concealed */ + if ( h->firstDataUnitPopped ) + { + if ( dataUnit->partialCopyOffset <= 3 && JB4_rtpTimeStampDiff( h->nextExpectedTs, dataUnit->timeStamp ) < 0 ) + { + JB4_FreeDataUnit( h, dataUnit ); + return 0; + } + else if ( dataUnit->partialCopyOffset == 5 && JB4_rtpTimeStampDiff( h->nextExpectedTs, dataUnit->timeStamp ) < -40 ) + { + JB4_FreeDataUnit( h, dataUnit ); + return 0; + } + else if ( dataUnit->partialCopyOffset == 7 && JB4_rtpTimeStampDiff( h->nextExpectedTs, dataUnit->timeStamp ) < -80 ) + { + JB4_FreeDataUnit( h, dataUnit ); + return 0; + } + } + + /* try to store partial copy - will be dropped if primary copy already available */ + if ( JB4_INPUTBUFFER_Enque( h->inputBuffer, dataUnit, (void **) &droppedDataUnit ) == 0 ) + { + /* partial copy is useful, consider it in long-term jitter estimation */ + if ( dataUnit->partialCopyOffset <= 3 ) + { + JB4_JMF_PushPacket( h->ltJmf, rcvTime, dataUnit->timeStamp ); + } + } + else + { + JB4_FreeDataUnit( h, dataUnit ); + } + if ( droppedDataUnit != NULL ) + { + JB4_FreeDataUnit( h, droppedDataUnit ); + } + } + else + { + /* calculate jitter */ + JB4_JMF_PushPacket( h->ltJmf, rcvTime, dataUnit->timeStamp ); + JB4_estimateShortTermJitter( h, rcvTime, dataUnit->timeStamp ); + /* check for "real" late loss: a frame with higher/same timestamp was already returned to be fed into decoder */ + if ( h->firstDataUnitPopped && JB4_rtpTimeStampDiff( h->lastReturnedTs, dataUnit->timeStamp ) <= 0 ) + { + if ( !dataUnit->silenceIndicator ) + { + ++h->nLateLost; + /* deletion of a speech frame because it arrived at the JBM too late */ + ++h->jitterInducedConcealments; + } + JB4_FreeDataUnit( h, dataUnit ); + return 0; + } + /* store data unit */ + if ( JB4_INPUTBUFFER_Enque( h->inputBuffer, dataUnit, (void **) &droppedDataUnit ) != 0 ) + { + JB4_FreeDataUnit( h, dataUnit ); + } + if ( droppedDataUnit != NULL ) + { + JB4_FreeDataUnit( h, droppedDataUnit ); + } + } + return 0; +} + + +int16_t JB4_getFECoffset( + JB4_HANDLE h ) +{ + return (int16_t) h->optimum_offset; +} + + +int16_t JB4_FECoffset( + JB4_HANDLE h ) +{ + if ( h->netLossRate < 0.05 ) + { + return 0; + } + else + { + return 1; + } +} + + +int16_t JB4_PopDataUnit( + JB4_HANDLE h, + uint32_t sysTime, + uint32_t extBufferedTime, + JB4_DATAUNIT_HANDLE *pDataUnit, + uint32_t *scale, + uint32_t *maxScaling ) +{ + int16_t ret; + + assert( sysTime >= h->prevPopSysTime ); + if ( sysTime > h->prevPopSysTime + 20 ) + { + h->lastPlayoutOffset += 20; + } + h->prevPopSysTime = sysTime; + + ret = JB4_adaptPlayout( h, sysTime, extBufferedTime, pDataUnit, scale, maxScaling ); + + return ret; +} + + +/* Calculates the difference between two RTP timestamps - the diff is positive, if B 'later', negative otherwise */ +static int32_t JB4_rtpTimeStampDiff( + uint32_t tsA, + uint32_t tsB ) +{ + int32_t ret; + /* do not dare to inline this function, casting to int32_t is important here! */ + ret = (int32_t) ( tsB - tsA ); + return ret; +} + + +/* function to get the number of data units contained in the buffer */ +uint16_t JB4_bufferedDataUnits( + const JB4_HANDLE h ) + +{ + return JB4_INPUTBUFFER_Size( h->inputBuffer ); +} + + +/***************************************************************************** + **************************** private functions ****************************** + *****************************************************************************/ + + +/* function to calculate different options for the target playout delay */ +static void JB4_targetPlayoutDelay( + const JB4_HANDLE h, + uint32_t *targetMin, + uint32_t *targetMax, + uint32_t *targetDtx, + uint32_t *targetStartUp ) +{ + uint32_t ltJitter, extraDelayReserve; + + /* adapt target delay to partial copy offset */ + extraDelayReserve = 0; + h->rfDelay = 0; + if ( h->rfOffset7Active != 0 ) + { + h->rfDelay = 140; + } + else if ( h->rfOffset5Active != 0 ) + { + h->rfDelay = 100; + } + else if ( h->rfOffset2Active == 0 && h->rfOffset3Active == 0 ) + { + /* keep some delay reserve for RF-off */ + extraDelayReserve = 15; + } + + /* get estimated long term jitter */ + if ( JB4_JMF_Jitter( h->ltJmf, <Jitter ) == 0 ) + { + /* combine long term and short term jitter to calculate target delay values */ + *targetMax = h->stJitter + h->safetyMargin + h->rfDelay; + *targetMin = JB4_MIN( ltJitter + 20 + h->rfDelay + extraDelayReserve, *targetMax ); + *targetDtx = JB4_MIN( ltJitter + extraDelayReserve, h->stJitter ); + *targetStartUp = ( *targetMin + *targetMax + extraDelayReserve / 4 ) / 2; + } + else + { + /* combine long term and short term jitter to calculate target delay values */ + *targetMax = h->safetyMargin; + *targetMin = JB4_MIN( 20, *targetMax ); + *targetDtx = 0; + *targetStartUp = ( *targetMin + *targetMax ) / 2; + } + + if ( *targetStartUp < 60 ) + { + *targetStartUp = 60; + } + + return; +} + + +/* function to do playout adaptation before playing the next data unit */ +static int16_t JB4_adaptPlayout( + JB4_HANDLE h, + uint32_t sysTime, + uint32_t extBufferedTime, + JB4_DATAUNIT_HANDLE *pDataUnit, + uint32_t *scale, + uint32_t *maxScaling ) +{ + bool stretchTime; + + /* reset scale */ + if ( scale == NULL || maxScaling == NULL ) + { + return -1; + } + *scale = 100; + *maxScaling = 0; + stretchTime = false; + + /* switch type of current playout (first one, active, DTX) */ + if ( !h->firstDataUnitPopped ) + { + JB4_adaptFirstPlayout( h, sysTime, &stretchTime ); + } + else if ( h->lastPoppedWasSilence ) + { + JB4_adaptDtxPlayout( h, sysTime, &stretchTime ); + } + else + { + JB4_adaptActivePlayout( h, extBufferedTime, scale, maxScaling ); + } + + /* time shrinking done if needed, now do time stretching or pop data unit to play */ + if ( stretchTime ) + { + /* return empty data unit */ + *pDataUnit = NULL; + if ( h->firstDataUnitPopped ) + { + ++h->nUnavailablePopped; + if ( !h->lastPoppedWasSilence ) + { + ++h->nStretched; + /* jitter-induced insertion (e.g. buffer underflow) */ + ++h->jitterInducedConcealments; + } + } + /* add one frame to last playout delay */ + h->lastPlayoutOffset += h->frameDuration; + } + else + { + /* return next data unit from buffer */ + JB4_popFromBuffer( h, sysTime, pDataUnit ); + } + + return 0; +} + + +/* function for playout adaptation while active (no DTX) */ +static void JB4_adaptActivePlayout( + JB4_HANDLE h, + uint32_t extBufferedTime, + uint32_t *scale, + uint32_t *maxScaling ) +{ + JB4_DATAUNIT_HANDLE nextDataUnit; + bool convertToLateLoss, dropEarly; + uint32_t targetMin, targetMax, targetDtx, targetStartUp, targetMaxStretch; + uint32_t currPlayoutDelay, gap, buffered; + uint32_t dropGapMax, dropRateMin, dropRateMax, rate; + int32_t minOffTicks, tsDiffToNextDataUnit; + + JB4_targetPlayoutDelay( h, &targetMin, &targetMax, &targetDtx, &targetStartUp ); + if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) + { + return; + } + h->targetPlayoutDelay = ( targetMin + targetMax ) / 2; + + convertToLateLoss = false; + dropEarly = false; + dropGapMax = 200; + dropRateMin = 5; + dropRateMax = 200; /* 20% */ + + /* calculate current playout delay */ + currPlayoutDelay = h->lastPlayoutOffset - minOffTicks + extBufferedTime; + if ( !JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) + { + nextDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); + tsDiffToNextDataUnit = JB4_rtpTimeStampDiff( h->nextExpectedTs, nextDataUnit->timeStamp ); + if ( tsDiffToNextDataUnit < 0 ) + { + convertToLateLoss = true; + /* time stretching is expected -> increase playout delay to allow dropping the late frame */ + currPlayoutDelay -= tsDiffToNextDataUnit; + currPlayoutDelay += 1; + } + } + + /* decided between shrinking/stretching */ + if ( currPlayoutDelay > targetMax ) /* time shrinking */ + { + gap = currPlayoutDelay - h->targetPlayoutDelay; + /* check if gap is positive and dropping is allowed + * and buffer contains enough time (ignoring one frame) */ + if ( gap > 0 && + JB4_inspectBufferForDropping( h, &dropEarly, &buffered ) == 0 && + ( convertToLateLoss || + ( buffered + h->frameDuration + extBufferedTime ) > targetMax ) ) + { + if ( convertToLateLoss ) + { + JB4_dropFromBuffer( h ); + } + else if ( dropEarly ) + { + JB4_dropFromBuffer( h ); + ++h->nLostOrStretched; + } + else + { + /* limit gap to [gapMin,gapMax] and calculate current drop rate from gap */ + rate = JB4_MIN( (uint32_t) ( gap ), dropGapMax ) * + ( dropRateMax - dropRateMin ) / dropGapMax + + dropRateMin; + *scale = ( 1000 - rate ) / 10; + *maxScaling = currPlayoutDelay - targetMax; + } + } + } + else /* time stretching */ + { + uint32_t delayWithClearedExternalBuffer; + /* Stretching only makes sense if we win one additional frame in the input buffer. + * If too much additional delay would be required to do so, then do not scale. + * Also make sure that the delay doesn't increase too much. */ + delayWithClearedExternalBuffer = currPlayoutDelay - extBufferedTime + h->frameDuration; + targetMaxStretch = targetMax - h->frameDuration; + if ( delayWithClearedExternalBuffer + h->frameDuration <= targetMaxStretch && + currPlayoutDelay < targetMaxStretch && currPlayoutDelay < (uint32_t) ( 110 + h->rfDelay / 4 ) ) + { + *scale = 120; + *maxScaling = targetMaxStretch - currPlayoutDelay; + } + } + + return; +} + + +/* function for playout adaptation while DTX */ +static void JB4_adaptDtxPlayout( + JB4_HANDLE h, + uint32_t sysTime, + bool *stretchTime ) +{ + JB4_DATAUNIT_HANDLE firstDu; + uint32_t firstTs; + uint32_t targetMin, targetMax, targetDtx, targetStartUp; + uint32_t currPlayoutDelay, headRoom; + int32_t minOffTicks, tsDiffToNextDataUnit; + + JB4_targetPlayoutDelay( h, &targetMin, &targetMax, &targetDtx, &targetStartUp ); + if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) + { + return; + } + + /* calculate current playout delay */ + currPlayoutDelay = h->lastPlayoutOffset - minOffTicks; + + /* check for startup after DTX */ + if ( !JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) + { + firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); + firstTs = firstDu->timeStamp; + + tsDiffToNextDataUnit = JB4_rtpTimeStampDiff( h->nextExpectedTs, firstTs ); + /* check if the next available data unit should already be used (time stamp order) */ + if ( tsDiffToNextDataUnit > 0 ) + { + /* time stretching is expected -> increase playout delay */ + currPlayoutDelay += tsDiffToNextDataUnit; + } + if ( !firstDu->silenceIndicator ) + { + /* recalculate playout delay based on first buffered data unit */ + JB4_playoutDelay( h, sysTime, firstTs, &currPlayoutDelay ); + /* check if the next available data unit should already be used (time stamp order) */ + if ( tsDiffToNextDataUnit > 0 ) + { + /* time stretching is expected -> increase playout delay */ + currPlayoutDelay += tsDiffToNextDataUnit; + } + h->targetPlayoutDelay = targetStartUp; + headRoom = 600 * h->frameDuration / 1000; + /* decided between shrinking/stretching */ + if ( currPlayoutDelay > targetStartUp + headRoom ) /* time shrinking */ + { + if ( JB4_checkDtxDropping( h ) ) + { + JB4_dropFromBuffer( h ); + } + } + else if ( currPlayoutDelay + headRoom < targetStartUp ) /* time stretching */ + { + *stretchTime = true; + } + return; + } + } + + /* adapt while DTX */ + h->targetPlayoutDelay = targetDtx; + + /* decided between shrinking/stretching */ + if ( currPlayoutDelay >= targetDtx + h->frameDuration ) /* time shrinking */ + { + if ( JB4_checkDtxDropping( h ) ) + { + JB4_dropFromBuffer( h ); + } + } + else if ( currPlayoutDelay + 500 * h->frameDuration / 1000 < targetDtx ) /* time stretching */ + { + *stretchTime = true; + } + + return; +} + + +/* function to do playout adaptation before playing the first data unit */ +static void JB4_adaptFirstPlayout( + JB4_HANDLE h, + uint32_t sysTime, + bool *prebuffer ) +{ + uint32_t currPlayoutDelay; + JB4_DATAUNIT_HANDLE firstDu; + uint32_t targetMin, targetMax, targetDtx, targetStartUp; + if ( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) + { + *prebuffer = true; + return; + } + JB4_targetPlayoutDelay( h, &targetMin, &targetMax, &targetDtx, &targetStartUp ); + if ( targetStartUp < h->frameDuration ) + { + return; + } + /* calculate delay if first data unit would be played now */ + firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); + if ( JB4_playoutDelay( h, sysTime, firstDu->timeStamp, &currPlayoutDelay ) != 0 ) + { + *prebuffer = true; + return; + } + if ( currPlayoutDelay + h->frameDuration / 2 < targetStartUp ) /* time stretching */ + { + *prebuffer = true; + } + else /* no adaptation, start playout */ + { + *prebuffer = false; + } + + return; +} + + +/* function to look into the buffer and check if it makes sense to drop a data unit */ +static int16_t JB4_inspectBufferForDropping( + const JB4_HANDLE h, + bool *dropEarly, + uint32_t *buffered ) +{ + uint16_t inputBufferSize; + int32_t seqNrDiff; + int32_t bufferedTs; + uint32_t firstTs; + uint64_t beginTs, endTs; + JB4_DATAUNIT_HANDLE firstDu, secondDu, lastDu; + + assert( !h->lastPoppedWasSilence ); + *dropEarly = false; + *buffered = 0; + inputBufferSize = JB4_INPUTBUFFER_Size( h->inputBuffer ); + if ( inputBufferSize == 0U ) + { + return -1; + } + + firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); + firstTs = firstDu->timeStamp; + /* check for loss: sequence number diff is exactly 0 in the valid case */ + if ( h->firstDataUnitPopped ) + { + seqNrDiff = JB4_rtpTimeStampDiff( h->nextExpectedTs, firstTs ) / + (int32_t) ( h->frameDuration ); + } + else + { + seqNrDiff = 0; + } + if ( seqNrDiff <= 0 ) + { + /* preview data unit to play after dropping */ + if ( inputBufferSize <= 1U ) + { + /* data unit to play missing, avoid drop followed by concealment */ + return -1; + } + secondDu = JB4_INPUTBUFFER_Element( h->inputBuffer, 1 ); + if ( firstTs + h->frameDuration != secondDu->timeStamp ) + { + /* data unit to play is not available, avoid drop followed by concealment */ + return -1; + } + /* calculate buffered time span */ + bufferedTs = 0; + } + else if ( seqNrDiff == 2 ) + { + /* data unit to play is not available, avoid dropping followed by concealment */ + return -1; + } + else /* seqNoDiff == 1 || seqNoDiff > 2 */ + { + /* first data unit is not available -> drop it early to avoid concealment + * This is very aggressive: ignores the maximum drop rate (50% drop and 50% concealment for adjacent lost), + * but on the other hand, dropping sounds better than concealment. */ + *dropEarly = true; + /* data unit to drop (first one) is lost */ + bufferedTs = 0; + } + + /* add time stamp difference of last and first actually buffered data unit */ + if ( inputBufferSize == 1U ) + { + bufferedTs += h->frameDuration; + } + else + { + lastDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Back( h->inputBuffer ); + beginTs = firstTs; + endTs = lastDu->timeStamp + h->frameDuration; + /* check for RTP time stamp wrap around */ + if ( endTs < beginTs ) + { + endTs = endTs + 0xFFFFFFFF; + } + bufferedTs += (int32_t) ( endTs - beginTs ); + } + + /* the result should not be negative */ + if ( bufferedTs < 0 ) + { + return -1; + } + *buffered = bufferedTs; + + return 0; +} + + +/* function to look into the buffer and check if it makes sense to drop a data unit */ +static int16_t JB4_checkDtxDropping( + const JB4_HANDLE h ) +{ + uint16_t inputBufferSize; + int32_t seqNrDiff; + JB4_DATAUNIT_HANDLE firstDu; + int16_t droppingAllowed; + + assert( h->firstDataUnitPopped ); + assert( h->lastPoppedWasSilence ); + + droppingAllowed = 1; + inputBufferSize = JB4_INPUTBUFFER_Size( h->inputBuffer ); + if ( inputBufferSize > 0U ) + { + firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); + /* check for loss: sequence number diff is exactly 0 in the valid case */ + seqNrDiff = JB4_rtpTimeStampDiff( h->nextExpectedTs, firstDu->timeStamp ) / + (int32_t) ( h->frameDuration ); + if ( seqNrDiff <= 0 ) + { + /* no not drop first active frame */ + droppingAllowed = 0; + } + } + /* else: buffer empty, allow dropping FRAME_NO_DATA */ + + return droppingAllowed; +} + + +/* function to estimate the short term jitter */ +static void JB4_estimateShortTermJitter( + JB4_HANDLE h, + uint32_t rcvTime, + uint32_t rtpTimeStamp ) +{ + uint32_t jitter, duration, maxDuration; + int32_t minTime, maxTime; + JB4_CIRCULARBUFFER_ELEMENT maxElement, dequedElement; + + jitter = 0; + JB4_JMF_PushPacket( h->stJmf, rcvTime, rtpTimeStamp ); + /* save delta delay */ + if ( JB4_JMF_Jitter( h->stJmf, &jitter ) == 0 ) + { + /* compensate difference between both offsets */ + int32_t stOffset, ltOffset; + JB4_JMF_MinOffset( h->stJmf, &stOffset ); + JB4_JMF_MinOffset( h->ltJmf, <Offset ); + jitter += stOffset - ltOffset; + assert( (int16_t) jitter >= 0 ); + if ( JB4_CIRCULARBUFFER_IsFull( h->stJitterFifo ) ) + { + JB4_CIRCULARBUFFER_Deque( h->stJitterFifo, &dequedElement ); + JB4_CIRCULARBUFFER_Deque( h->stTimeStampFifo, &dequedElement ); + } + JB4_CIRCULARBUFFER_Enque( h->stJitterFifo, jitter ); + JB4_CIRCULARBUFFER_Enque( h->stTimeStampFifo, rtpTimeStamp ); + + /* check for duration and discard first entries if too long */ + minTime = JB4_CIRCULARBUFFER_Front( h->stTimeStampFifo ); + maxTime = JB4_CIRCULARBUFFER_Back( h->stTimeStampFifo ); + if ( maxTime > minTime ) + { + duration = maxTime - minTime; + maxDuration = 4 * h->timeScale; + while ( duration > maxDuration ) + { + JB4_CIRCULARBUFFER_Deque( h->stJitterFifo, &dequedElement ); + JB4_CIRCULARBUFFER_Deque( h->stTimeStampFifo, &dequedElement ); + minTime = JB4_CIRCULARBUFFER_Front( h->stTimeStampFifo ); + if ( maxTime <= minTime ) + { + break; + } + duration = maxTime - minTime; + } + } + } + + /* update h->stJitter */ + if ( !JB4_CIRCULARBUFFER_IsEmpty( h->stJitterFifo ) ) + { + JB4_CIRCULARBUFFER_Max( h->stJitterFifo, &maxElement ); + /* round up to full frame duration */ + h->stJitter = (uint32_t) ceil( (double) ( maxElement ) / h->frameDuration ) * + h->frameDuration; + } + + return; +} + + +/* function to pop a data unit from the buffer */ +static void JB4_popFromBuffer( + JB4_HANDLE h, + uint32_t sysTime, + JB4_DATAUNIT_HANDLE *pDataUnit ) +{ + JB4_DATAUNIT_HANDLE nextDataUnit; + uint32_t nStretched; + int32_t tsDiff; + JB4_DATAUNIT_HANDLE tempDataUnit; + uint16_t readlen; + uint16_t i; + int16_t frameoffset; + uint32_t maxval; + Word32 lost, total_rec; + JB4_DATAUNIT_HANDLE partialCopyDu; + uint16_t searchpos, endpos; + + /* check if a data unit is available */ + if ( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) + { + /* no data unit available */ + *pDataUnit = NULL; + h->nextExpectedTs += h->frameDuration; + if ( h->lastPoppedWasSilence ) + { + ++h->nComfortNoice; + } + else + { + ++h->nUnavailablePopped; + ++h->nLostOrStretched; + } + + return; + } + + /* preview next data unit in sequence order */ + nextDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); + + /* check if this is the first data unit */ + if ( !h->firstDataUnitPopped ) + { + h->firstDataUnitPopped = true; + /* adjust sequence numbers to avoid handling first packet as loss */ + h->nextExpectedTs = nextDataUnit->timeStamp; + } + + /* check if the next available data unit should already be used (time stamp order) */ + tsDiff = JB4_rtpTimeStampDiff( nextDataUnit->timeStamp, h->nextExpectedTs ); + + h->totWin += 1; + if ( ( h->totWin > 3000 ) || ( h->FecOffWinLen > 100 ) ) + { + maxval = h->FecOffWin[1]; + h->optimum_offset = 1; + for ( i = 2; i < MAXOFFSET; i++ ) + { + if ( h->FecOffWin[i] > maxval ) + { + maxval = h->FecOffWin[i]; + h->optimum_offset = i; + } + h->FecOffWin[i] = 0; + } + h->FecOffWin[0] = 0; + h->FecOffWin[1] = 0; + h->totWin = 0; + h->FecOffWinLen = 0; + + + lost = h->nLost + h->nPartialCopiesUsed - h->last_nLost; + total_rec = h->nAvailablePopped + h->nUnavailablePopped - h->last_ntot; + + if ( lost != 0 && total_rec != 0 ) + { + h->netLossRate = (float) lost / (float) total_rec; + } + else + { + h->netLossRate = 0.0f; + } + h->last_nLost = L_add( h->nLost, h->nPartialCopiesUsed ); + h->last_ntot = L_add( h->nAvailablePopped, h->nUnavailablePopped ); + } + + if ( tsDiff < 0 ) + { + readlen = JB4_INPUTBUFFER_Size( h->inputBuffer ); + for ( i = 0; i < readlen; i++ ) + { + tempDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Element( h->inputBuffer, i ); + if ( !tempDataUnit->partial_frame && !h->lastPoppedWasSilence ) + { + frameoffset = (int16_t) ( JB4_rtpTimeStampDiff( h->nextExpectedTs, tempDataUnit->timeStamp ) / 20 ); + + if ( frameoffset > 0 && frameoffset < MAXOFFSET ) + { + h->FecOffWin[frameoffset] += 1; + } + } + } + h->FecOffWinLen += 1; + + /* next expected data unit is missing + * -> conceal network loss, do time stretching or create comfort noise */ + *pDataUnit = NULL; + + /* update statistics */ + h->nextExpectedTs += h->frameDuration; + if ( h->lastPoppedWasSilence ) + { + ++h->nComfortNoice; + } + else + { + ++h->nUnavailablePopped; + ++h->nLostOrStretched; + } + return; + } + + /* fetch the next data unit from buffer */ + *pDataUnit = nextDataUnit; + nextDataUnit->nextCoderType = INACTIVE; + if ( h->pre_partial_frame || nextDataUnit->partial_frame ) + { + if ( nextDataUnit->partial_frame ) + { + h->pre_partial_frame = 1; + } + else if ( h->pre_partial_frame ) + { + h->pre_partial_frame = 0; + } + + endpos = JB4_INPUTBUFFER_Size( h->inputBuffer ); + for ( searchpos = 0; searchpos < endpos; searchpos++ ) + { + partialCopyDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Element( h->inputBuffer, searchpos ); + if ( partialCopyDu->timeStamp == nextDataUnit->timeStamp + partialCopyDu->duration ) + { + get_NextCoderType( partialCopyDu->data, &nextDataUnit->nextCoderType ); + break; + } + } + } + JB4_INPUTBUFFER_Deque( h->inputBuffer, (void **) pDataUnit ); + + if ( nextDataUnit->partial_frame ) + { + h->nPartialCopiesUsed += 1; + + readlen = JB4_INPUTBUFFER_Size( h->inputBuffer ); + for ( i = 0; i < readlen; i++ ) + { + tempDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Element( h->inputBuffer, i ); + if ( !tempDataUnit->partial_frame && !h->lastPoppedWasSilence ) + { + frameoffset = (int16_t) ( JB4_rtpTimeStampDiff( h->nextExpectedTs, tempDataUnit->timeStamp ) / 20 ); + + if ( frameoffset > 0 && frameoffset < MAXOFFSET ) + { + h->FecOffWin[frameoffset] += 1; + } + } + } + h->FecOffWinLen += 1; + } + + /* update statistics */ + if ( h->nLostOrStretched != 0U ) + { + assert( h->lastPoppedWasSilence == false ); + /* separate concealments since last available pop in lost and stretched */ + nStretched = tsDiff / h->frameDuration; + assert( h->nLostOrStretched >= nStretched ); + h->nLost += h->nLostOrStretched - nStretched; + /* jitter-induced insertion (e.g. buffer underflow) */ + h->jitterInducedConcealments += nStretched; + h->nStretched += nStretched; + h->nLostOrStretched = 0; + } + h->lastReturnedTs = nextDataUnit->timeStamp; + JB4_updateLastTimingMembers( h, sysTime, nextDataUnit->timeStamp ); + h->nextExpectedTs = nextDataUnit->timeStamp + h->frameDuration; + if ( nextDataUnit->silenceIndicator ) + { + h->lastPoppedWasSilence = true; + ++h->nComfortNoice; + } + else + { + h->lastPoppedWasSilence = false; + ++h->nAvailablePopped; + } + + return; +} + +/* function to drop a data unit from the buffer - updates nShrinked */ +static void JB4_dropFromBuffer( + JB4_HANDLE h ) +{ + JB4_DATAUNIT_HANDLE nextDataUnit, dataUnit; + int32_t tsDiff; + uint32_t nStretched; + + /* check if a data unit is available */ + if ( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) + { + return; + } + /* preview next data unit in sequence order */ + nextDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); + + /* check if this is the first data unit */ + if ( !h->firstDataUnitPopped ) + { + h->firstDataUnitPopped = true; + /* adjust sequence numbers to avoid handling first packet as loss */ + h->nextExpectedTs = nextDataUnit->timeStamp; + } + + /* check if the next available data unit should already be used (time stamp order) */ + tsDiff = JB4_rtpTimeStampDiff( nextDataUnit->timeStamp, h->nextExpectedTs ); + if ( tsDiff < 0 ) + { + /* next expected data unit is missing, remember this data unit as popped, + * but do not count it as lost, because it will not be concealed */ + h->nextExpectedTs += h->frameDuration; + /* substract one frame from last playout delay */ + h->lastPlayoutOffset -= h->frameDuration; + if ( !h->lastPoppedWasSilence ) + { + ++h->nShrinked; + /* modification of the output timeline due to link loss */ + ++h->nUnavailablePopped; + ++h->nLostOrStretched; + } + if ( h->lastTargetTime != 0U ) + { + h->lastTargetTime += h->frameDuration; + } + return; + } + + /* fetch the next data unit from buffer */ + JB4_INPUTBUFFER_Deque( h->inputBuffer, (void *) &dataUnit ); + /* update statistics */ + if ( h->nLostOrStretched != 0U ) + { + assert( h->lastPoppedWasSilence == false ); + /* separate concealments since last available pop in lost and stretched */ + nStretched = tsDiff / h->frameDuration; + assert( h->nLostOrStretched >= nStretched ); + + /* convert stretching followed by shrinking to late-loss */ + if ( nStretched > 0U ) + { + --nStretched; + ++h->nLateLost; + h->nLost += h->nLostOrStretched - nStretched; + /* jitter-induced insertion (e.g. buffer underflow) */ + h->jitterInducedConcealments += nStretched; + if ( !dataUnit->silenceIndicator ) + { + /* JBM induced removal of a speech frame (intentional frame dropping) */ + ++h->jitterInducedConcealments; + } + h->nStretched += nStretched; + } + else + { + h->nLost += h->nLostOrStretched; + ++h->nShrinked; + if ( !dataUnit->silenceIndicator ) + { + /* JBM induced removal of a speech frame (intentional frame dropping) */ + ++h->jitterInducedConcealments; + } + } + h->nLostOrStretched = 0; + } + else + { + if ( !dataUnit->silenceIndicator ) + { + ++h->nShrinked; + /* JBM induced removal of a speech frame (intentional frame dropping) */ + ++h->jitterInducedConcealments; + } + } + + h->lastReturnedTs = dataUnit->timeStamp; + h->lastPoppedWasSilence = dataUnit->silenceIndicator; + h->nextExpectedTs = dataUnit->timeStamp + h->frameDuration; + + /* substract one frame from last playout delay */ + h->lastPlayoutOffset -= h->frameDuration; + if ( h->lastTargetTime != 0U ) + h->lastTargetTime += h->frameDuration; + + JB4_FreeDataUnit( h, dataUnit ); + + return; +} + + +/* function to calculate the playout delay based on the current jitter */ +static int16_t JB4_playoutDelay( + const JB4_HANDLE h, + uint32_t playTime, + uint32_t rtpTimeStamp, + uint32_t *delay ) +{ + int32_t minOffTicks; + + if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) + { + return -1; + } + + *delay = playTime - minOffTicks - rtpTimeStamp; + + return 0; +} + + +/* function to update lastPlayoutDelay and lastTargetTime after popFromBuffer() */ +static void JB4_updateLastTimingMembers( + JB4_HANDLE h, + uint32_t playTime, + uint32_t rtpTimeStamp ) +{ + int32_t minOffTicks; + + if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) + { + return; + } + + /* playoutDelay = playTime - minOffset - timeStamp */ + h->lastPlayoutOffset = playTime - rtpTimeStamp; + /* targetTime = minOffset + timeStamp + targetDelay */ + h->lastTargetTime = (uint32_t) ( minOffTicks + rtpTimeStamp + h->targetPlayoutDelay ); + + return; +} + + +/* function to compare the RTP time stamps of two data units: newElement==arrayElement ? 0 : (newElement>arrayElement ? +1 : -1) */ +static int16_t JB4_inputBufferCompareFunction( + const JB4_INPUTBUFFER_ELEMENT newElement, + const JB4_INPUTBUFFER_ELEMENT arrayElement, + bool *replaceWithNewElementIfEqual ) +{ + JB4_DATAUNIT_HANDLE newDataUnit, arrayDataUnit; + int32_t diff; + int16_t result; + + *replaceWithNewElementIfEqual = 0; + newDataUnit = (JB4_DATAUNIT_HANDLE) newElement; + arrayDataUnit = (JB4_DATAUNIT_HANDLE) arrayElement; + diff = JB4_rtpTimeStampDiff( arrayDataUnit->timeStamp, newDataUnit->timeStamp ); + if ( diff > 0 ) + { + result = 1; + } + else if ( diff < 0 ) + { + result = -1; + } + else /* equal timestamps */ + { + result = 0; + if ( newDataUnit->partial_frame == 0 && arrayDataUnit->partial_frame == 1 ) + { + /* replace partial copy with primary copy */ + *replaceWithNewElementIfEqual = 1; + } + else if ( newDataUnit->partial_frame == arrayDataUnit->partial_frame && newDataUnit->dataSize > arrayDataUnit->dataSize ) + { + /* if both are primary or partial: take the one with higher size (e.g. higher bitrate) */ + *replaceWithNewElementIfEqual = 1; + } + } + + return result; +} diff --git a/lib_dec/jbm_jb4sb.h b/lib_dec/jbm_jb4sb.h new file mode 100644 index 0000000000..bc70413689 --- /dev/null +++ b/lib_dec/jbm_jb4sb.h @@ -0,0 +1,107 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/** \file jbm_jb4sb.h EVS Jitter Buffer Management Interface */ + +#ifndef JBM_JB4SB_H +#define JBM_JB4SB_H JBM_JB4SB_H + +#include +#include +#include "options.h" +#include "typedef.h" +#include "ivas_error.h" + +/** handle for jitter buffer */ +typedef struct JB4 *JB4_HANDLE; + +/** jitter buffer data units (access unit together with RTP seqNo, timestamp, ...) */ +struct JB4_DATAUNIT +{ + /** the RTP sequence number (16 bits) */ + uint16_t sequenceNumber; + /** the RTP time stamp (32 bits) of this chunk in timeScale() units */ + uint32_t timeStamp; + /** the duration of this chunk in timeScale() units */ + uint32_t duration; + /** the RTP time scale, which is used for timeStamp() and duration() */ + uint32_t timeScale; + /** the receive time of the RTP packet in milliseconds */ + uint32_t rcvTime; + /** true, if the data unit contains only silence */ + bool silenceIndicator; + Word16 isAMRWB_IOmode; + /** for EVS payload */ + Word16 frameTypeIndex; + /** Q bit for AMR-WB IO */ + Word16 qBit; + + /** the binary encoded access unit */ + uint8_t *data; + /** the size of the binary encoded access unit [bits] */ + uint16_t dataSize; + + /** identify if the data unit has a partial copy of a previous frame */ + bool partial_frame; + /** offset of the partial copy contained in that frame or zero */ + int16_t partialCopyOffset; + int16_t nextCoderType; +}; + +typedef struct JB4_DATAUNIT *JB4_DATAUNIT_HANDLE; + + +ivas_error JB4_Create( JB4_HANDLE *ph ); + +void JB4_Destroy( JB4_HANDLE *ph ); + +int16_t JB4_Init( JB4_HANDLE h, int16_t safetyMargin ); + +JB4_DATAUNIT_HANDLE JB4_AllocDataUnit( JB4_HANDLE h ); + +void JB4_FreeDataUnit( JB4_HANDLE h, JB4_DATAUNIT_HANDLE dataUnit ); + +int16_t JB4_PushDataUnit( JB4_HANDLE h, JB4_DATAUNIT_HANDLE dataUnit, uint32_t rcvTime ); + +int16_t JB4_PopDataUnit( JB4_HANDLE h, uint32_t sysTime, uint32_t extBufferedTime, JB4_DATAUNIT_HANDLE *pDataUnit, uint32_t *scale, uint32_t *maxScaling ); + +int16_t JB4_getFECoffset( JB4_HANDLE h ); + +int16_t JB4_FECoffset( JB4_HANDLE h ); + +uint16_t JB4_bufferedDataUnits( const JB4_HANDLE h ); + +#endif /* JBM_JB4SB_H */ diff --git a/lib_dec/jbm_pcmdsp_apa.c b/lib_dec/jbm_pcmdsp_apa.c new file mode 100644 index 0000000000..3968e38974 --- /dev/null +++ b/lib_dec/jbm_pcmdsp_apa.c @@ -0,0 +1,1343 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/*! @file jbm_pcmdsp_apa.c Adaptive Playout for Audio (apa). */ + +/* system headers */ +#include +#include +#include +#include +#include +#include "options.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +/* local headers */ +#include "jbm_pcmdsp_apa.h" +#include "jbm_pcmdsp_similarityestimation.h" +#include "jbm_pcmdsp_window.h" +#include "cnst.h" + + +/*---------------------------------------------------------------------* + * Local state structure + *---------------------------------------------------------------------*/ + +/* maximum number of segments/iterations in extend_frm() */ +#define MAXN 10 + +/* definition of state struct */ +struct apa_state_t +{ + /* output buffer */ + int16_t buf_out[APA_BUF]; + uint16_t l_buf_out; + + /* Hann window */ + float win[APA_BUF]; + uint16_t l_halfwin; + + /* sampling rate [Hz] */ + uint16_t rate; + + /* length of a segment [samples] */ + uint16_t l_seg; + + /* length of a frame [samples] */ + uint16_t l_frm; + + /* total number of processed input samples since apa_reset() */ + uint32_t l_in_total; + + /* sum of inserted/removed samples since last apa_set_scale() */ + int32_t diffSinceSetScale; + /* number of input frames since last apa_set_scale() */ + uint32_t nFramesSinceSetScale; + + /* current and previous scaling ratio [%] */ + uint16_t scale; + + /* minimum pitch length [samples] */ + uint16_t p_min; + + /* search length [samples] */ + uint16_t l_search; + + uint16_t wss; /* waveform subsampling */ + uint16_t css; /* correlation subsampling */ + + float targetQuality; + uint16_t qualityred; /* quality reduction threshold */ + uint16_t qualityrise; /* quality rising for adaptive quality thresholds */ + + uint16_t last_pitch; /* last pitch/sync position */ + uint16_t bad_frame_count; /* # frames before quality threshold is lowered */ + uint16_t good_frame_count; /* # scaled frames */ + + uint16_t num_channels; /* number of input/output channels */ +}; + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static float apa_corrEnergy2dB( float energy, uint16_t corr_len ); + +static float apa_getQualityIncreaseForLowEnergy( float energydB ); + +static bool logarithmic_search( const apa_state_t *ps, const int16_t *signal, int16_t s_start, uint16_t inlen, uint16_t offset, uint16_t fixed_pos, uint16_t corr_len, uint16_t wss, uint16_t css, int16_t *synchpos ); + +static bool find_synch( apa_state_t *ps, const int16_t *in, uint16_t l_in, int16_t s_start, uint16_t s_len, int16_t fixed_pos, uint16_t corr_len, uint16_t offset, float *energy, float *quality, int16_t *synch_pos ); + +static bool copy_frm( apa_state_t *ps, const int16_t frm_in[], int16_t frm_out[], uint16_t *l_frm_out ); + +static bool shrink_frm( apa_state_t *ps, const int16_t frm_in[], uint16_t maxScaling, int16_t frm_out[], uint16_t *l_frm_out ); + +static bool extend_frm( apa_state_t *ps, const int16_t frm_in[], int16_t frm_out[], uint16_t *l_frm_out ); + + +/*---------------------------------------------------------------------* + * Public functions + *---------------------------------------------------------------------*/ + +/* Allocates memory for state struct and initializes elements. */ +uint8_t apa_init( + apa_state_t **pps ) +{ + apa_state_t *ps = NULL; + + /* make sure pointer is valid */ + if ( !pps ) + { + return 1; + } + + /* allocate state struct */ + ps = (apa_state_t *) count_malloc( sizeof( apa_state_t ) ); + if ( !ps ) + { + return 2; + } + apa_reset( ps ); + *pps = ps; + + return 0; +} + + +/* Sets state variables to initial value. */ +void apa_reset( + apa_state_t *ps ) +{ + /* init state struct */ + ps->l_buf_out = 0; + ps->l_halfwin = 0; + ps->rate = 0; + ps->l_seg = 0; + ps->l_frm = 0; + ps->l_in_total = 0; + ps->diffSinceSetScale = 0; + ps->nFramesSinceSetScale = 0; + ps->scale = 100; + ps->p_min = 0; + ps->l_search = 0; + ps->wss = 1; + ps->css = 1; + ps->targetQuality = 0.0f; + ps->qualityred = 0; + ps->qualityrise = 0; + ps->last_pitch = 0; + ps->bad_frame_count = 0; + ps->good_frame_count = 0; + ps->num_channels = 0; + + return; +} + + +/* Sets the audio configuration. */ +bool apa_set_rate( + apa_state_t *ps, + const int32_t output_Fs, + const int16_t num_channels ) +{ + /* make sure pointer is valid */ + if ( ps == NULL ) + { + return 1; + } + + /* check range */ + if ( ( output_Fs < APA_MIN_RATE ) || ( output_Fs > APA_MAX_RATE ) ) + { + return 1; + } + + /* reset state struct */ + apa_reset( ps ); + + /* copy rate to state struct */ + ps->rate = (uint16_t) output_Fs; + + /* set number of channels */ + ps->num_channels = num_channels; + + /* + * several other parameters depend on the sampling rate + * and are set below. Some "magic numbers" are used here + * which are based on typical values of a "pitch" in + * human voice. The pitch length is the period of the + * base frequency and is usually assumed to be 40-240 + * samples at 16 kHz. + */ + + /* set segment size */ + /* in the order of a pitch, set to 160 samples at 16 kHz */ + /* used for windowing and as the correlation length, i.e., */ + /* the size of the template segment. */ + ps->l_seg = ( ps->rate / 100 ) * ps->num_channels; + + /* init Hann window */ + /* Note: l_win < APA_BUF is required, which is assured */ + /* because APA_MAX_RATE/100 = l_win = 441 < 2048 = APA_BUF */ + /* Length of Hann window should be independent of + * number of channels - same window applied to all channels */ + ps->l_halfwin = ps->rate / 100; + hannWindow( ps->l_halfwin * 2, ps->win ); + + /* set frame size */ + /* set to 320 samples at 16 kHz */ + ps->l_frm = ( ps->rate / FRAMES_PER_SEC ) * ps->num_channels; + + /* set minimum pitch */ + /* set to 40 samples at 16 kHz */ + /* (defines min change in number of samples, i.e., abs(l_in-l_out) >= p_min) */ + ps->p_min = ( ps->rate / 400 ) * ps->num_channels; + + /* set search length */ + /* must cover one pitch, set to 200 samples at 16 kHz */ + /* (the resulting maximum pitch is then p_min+l_search = 240 samples at 16 kHz) */ + ps->l_search = ( ps->rate / 80 ) * ps->num_channels; + + return 0; +} + + +/* Set scaling. */ +bool apa_set_scale( + apa_state_t *ps, + uint16_t scale ) +{ + /* make sure pointer is valid */ + if ( ps == NULL ) + { + return 1; + } + + /* check range */ + if ( ( scale < APA_MIN_SCALE ) || ( scale > APA_MAX_SCALE ) ) + { + return 1; + } + + /* do nothing if same scale is set multiple times */ + /* (otherwise scale control is confused) */ + if ( ps->scale == scale ) + { + return 0; + } + + /* copy to state struct */ + ps->scale = scale; + + /* reset scaling statistics */ + ps->diffSinceSetScale = 0; + ps->nFramesSinceSetScale = 0; + + return 0; +} + + +/* +******************************************************************************** +* +* Function : apa_set_quality +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Set quality thresholds. +* +* quality is lower limit for minimum quality +* Range is [-2;2] - where positive values allow +* only pasting with same phase information +* Negative values would yield cross phased pasting +* +* qualityred allows dynamic lowering of lower quality +* bound - this gives better results for rhythmic signals +* Range is [0;20], meaning 0.1 lowering*qualityred +* +* undocumented: qualityrise (same as qualityred - other +* direction) +* +******************************************************************************** +*/ +bool apa_set_quality( + apa_state_t *ps, + float quality, + uint16_t qualityred, + uint16_t qualityrise ) +{ + assert( ps != NULL ); + assert( -2.0f <= quality && quality <= 3.1f ); + assert( qualityred > 0 && qualityred <= 20 ); + assert( qualityrise > 0 && qualityrise <= 20 ); + + ps->targetQuality = quality; + ps->qualityred = qualityred; + ps->qualityrise = qualityrise; + ps->bad_frame_count = 0; + ps->good_frame_count = 0; + + return 0; +} + +/* +******************************************************************************** +* +* Function : apa_set_complexity_options +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Set complexity options +* Waveform subsampling computes the correlation function +* for certain positions only +* Correlation function subsampling computes the maxima +* for certain positions only +* +******************************************************************************** +*/ +bool apa_set_complexity_options( + apa_state_t *ps, + uint16_t wss, + uint16_t css ) +{ + /* make sure pointer is valid */ + if ( ps == NULL ) + { + return 1; + } + + if ( wss == 0 || wss > 1000 ) + { + return 1; + } + + if ( css == 0 || css > 1000 ) + { + return 1; + } + + ps->wss = wss; + ps->css = css; + + return 0; +} + +/* +******************************************************************************** +* +* Function : apa_exit +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : The memory used for storing the state is freed. +* The state struct pointer is set to NULL. +* +******************************************************************************** +*/ +bool apa_exit( + apa_state_t **pps ) +{ + /* ignore NULL pointer input */ + if ( *pps == NULL ) + { + return 0; + } + + /* deallocate state struct */ + count_free( *pps ); + + /* set pointer to NULL */ + *pps = NULL; + + return 0; +} + +/* +******************************************************************************** +* +* Function : apa_exec +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Execute adaptive playout for audio, i.e., audio scaling. +* Will take l_in input samples from a_in[] and +* try to extend/shrink the amount of samples according +* to the last scaling set by using apa_set_scale(). +* The actual amount of samples after scaling may vary +* and is given in l_out. The scaled audio samples +* are contained in a_out[]. Note that the scaling is +* achieved only in average. The input buffer must be +* filled with 20ms audio. The output buffer must be +* allocated externally and must be at least of size +* APA_BUF. +* Scaling can only be performed when a sampling rate +* is specified using apa_set_rate(). Otherwise, +* an error is returned. +* +* The amount of scaling is achieved by controlling the +* frequency of scaling. Note that the exact amount of +* scaling is signal dependent and is an integer +* multiple of a pitch. Hence, when we want to achieve +* a scaling of e.g. 110% then the APA module will typically +* forward several frames without any modification and +* then scale one frame by a higher amount, e.g. 143%. +* +******************************************************************************** +*/ +uint8_t apa_exec( + apa_state_t *ps, /* i/o: state struct */ + const int16_t a_in[], /* i : input samples */ + uint16_t l_in, /* i : number of input samples */ + uint16_t maxScaling, /* i : allowed number of inserted/removed samples */ + int16_t a_out[], /* o : output samples */ + uint16_t *l_out /* o : number of output samples */ +) +{ + uint16_t i; + int16_t frm_in[APA_BUF]; + uint16_t l_frm_out; + int16_t l_rem; + int32_t dl_scaled, dl_copied, l_frm_out_target; + int32_t expScaling, actScaling; + uint32_t statsResetThreshold, statsResetShift; + + statsResetThreshold = 1637; + statsResetShift = 2; + + /* make sure no invalid output is used */ + *l_out = 0; + l_frm_out = 0; + + /* make sure pointer is valid */ + if ( ps == NULL ) + { + return 1; + } + /* check available rate */ + if ( ps->rate == 0 ) + { + return 2; + } + /* check size of input */ + if ( l_in != ps->l_frm ) + { + return 3; + } + + /* get target length */ + if ( ps->scale > 100 ) + { + expScaling = (int32_t) ( ( ps->l_frm * ( ps->scale - 100.0f ) / 100.0f ) * ( ps->nFramesSinceSetScale + 1 ) + 0.5f ); + } + else if ( ps->scale < 100 ) + { + expScaling = (int32_t) ( ( ps->l_frm * ( ps->scale - 100.0f ) / 100.0f ) * ( ps->nFramesSinceSetScale + 1 ) - 0.5f ); + } + else + { + expScaling = 0; + } + actScaling = ps->diffSinceSetScale - ps->l_frm; + l_frm_out_target = expScaling - actScaling; + + /* Wait until we have l_frm outputs samples */ + /* (required to search for correlation in the past). */ + /* If we don't have enough samples, simply copy input to output */ + if ( ps->l_buf_out < ps->l_frm ) + { + for ( i = 0; i < ps->l_frm; i++ ) + { + a_out[i] = a_in[i]; + } + l_frm_out = ps->l_frm; + } + else + { + int16_t *buf_out_ptr = &( ps->buf_out[ps->l_buf_out - ps->l_frm] ); + int16_t *frm_in_ptr = &( frm_in[ps->l_frm] ); + + /* fill input frame */ + /* 1st input frame: previous output samples */ + for ( i = 0; i < ps->l_frm; i++ ) + { + frm_in[i] = buf_out_ptr[i]; + } + /* 2nd input frame: new input samples */ + for ( i = 0; i < ps->l_frm; i++ ) + { + frm_in_ptr[i] = a_in[i]; + } + /* no scaling */ + if ( ps->scale == 100 ) + { + copy_frm( ps, frm_in, a_out, &l_frm_out ); + } + /* shrink */ + else if ( ps->scale < 100 ) + { + shrink_frm( ps, frm_in, maxScaling, a_out, &l_frm_out ); + } + /* extend */ + else + { + extend_frm( ps, frm_in, a_out, &l_frm_out ); + } + /* control the amount/frequency of scaling */ + if ( l_frm_out != ps->l_frm ) + { + if ( maxScaling != 0U && + abs( (int16_t) ( ps->l_frm - l_frm_out ) ) > maxScaling ) + { + /* maxScaling exceeded -> discard scaled frame */ + copy_frm( ps, frm_in, a_out, &l_frm_out ); + } + else if ( abs( l_frm_out_target ) > ps->l_frm ) /* ignore small difference */ + { + dl_copied = l_frm_out_target - (int32_t) ps->l_frm; + dl_scaled = l_frm_out_target - (int32_t) l_frm_out; + /* discard scaled frame if copied frame is closer to target length */ + if ( abs( dl_copied ) < abs( dl_scaled ) ) + { + copy_frm( ps, frm_in, a_out, &l_frm_out ); + } + } + } + } + + /* copy output to internal buffer */ + /* avoid buffer overflow: */ + /* discard old samples; always keep at least most recent l_frm samples */ + if ( ( ps->l_buf_out + l_frm_out ) > APA_BUF ) + { + int16_t *buf_out_ptr1 = ps->buf_out; + int16_t *buf_out_ptr2; + + l_rem = ( ps->l_frm - l_frm_out ); + if ( l_rem < 0 ) + { + l_rem = 0; + } + buf_out_ptr2 = &( ps->buf_out[ps->l_buf_out - l_rem] ); + for ( i = 0; i < l_rem; i++ ) + { + buf_out_ptr1[i] = buf_out_ptr2[i]; + } + ps->l_buf_out = l_rem; + } + /* append new output samples */ + if ( ( ps->l_buf_out + l_frm_out ) > APA_BUF ) + { + return 5; + } + { + int16_t *buf_out_ptr = &( ps->buf_out[ps->l_buf_out] ); + for ( i = 0; i < l_frm_out; i++ ) + { + buf_out_ptr[i] = a_out[i]; + } + } + ps->l_buf_out += l_frm_out; + + *l_out = l_frm_out; + /* update time */ + ps->l_in_total += ps->l_frm; + + if ( abs( ps->diffSinceSetScale ) < ( 0x7FFFFF - ( l_frm_out - ps->l_frm ) ) && + ps->nFramesSinceSetScale < statsResetThreshold ) + { + ps->diffSinceSetScale += l_frm_out - ps->l_frm; + ++ps->nFramesSinceSetScale; + } + else /* scale statistics down to avoid overflow */ + { + ps->diffSinceSetScale >>= statsResetShift; + ps->nFramesSinceSetScale >>= statsResetShift; + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Local functions + *---------------------------------------------------------------------*/ + +/* +******************************************************************************** +* +* Function : get_scaling_quality +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Uses pitch, half pitch, three halves and double pitch +* to evaluate the quality of the scaled frame by checking +* periodicity. +* Silence can be detected as additional feature. This must +* be set in global struct apa_state. +* +* If search length is very narrow then use fewer points +* to evaluate periodicity and silence. +* +* Computationally not very efficient by using normalized +* cross-correlation: Using sqrt() for energy calculation +* adds complexity. +* +* 03-AUG-04 S.Doehla initial version +* +******************************************************************************** +*/ +static void get_scaling_quality( + const apa_state_t *ps, + const int16_t *signal, + uint16_t s_len, + uint16_t offset, + uint16_t corr_len, + uint16_t pitch, + float *energydB, + float *quality ) +{ + float maxEnergy = 0.0f; + float qualityOfMaxEnergy = 0.0f; /* we measure the quality for all channels and select the one with highest energy */ + + float half_pitch_cn = 0.0f; + float pitch_cn = 0.0f; + float three_halves_pitch_cn = 0.0f; + float double_pitch_cn = 0.0f; + + float pitch_energy = 0.0f; + float half_pitch_energy = 0.0f; + float three_halves_pitch_energy = 0.0f; + float double_pitch_energy = 0.0f; + + uint16_t i = 0; + + for ( i = 0; i < ps->num_channels; i++ ) + { + float energy; + offset = 0; + + pitch_cn = normalized_cross_correlation_self( signal, pitch + offset, offset, corr_len, ps->num_channels * 2, &pitch_energy ); + if ( pitch_cn > 0.0f ) + { + /* calculate correlation for double pitch */ + if ( 2 * pitch + offset + corr_len <= s_len ) + { + double_pitch_cn = normalized_cross_correlation_self( signal, 2 * pitch + offset, offset, corr_len, ps->num_channels * 2, &double_pitch_energy ); + } + else + { + double_pitch_cn = pitch_cn; + double_pitch_energy = pitch_energy; + } + /* calculate correlation for three/half pitch */ + if ( ( 3 * pitch ) / 2 + offset + corr_len <= s_len ) + { + three_halves_pitch_cn = normalized_cross_correlation_self( signal, ( 3 * pitch ) / 2 + offset, offset, corr_len, ps->num_channels * 2, &three_halves_pitch_energy ); + } + else + { + three_halves_pitch_cn = pitch_cn; + three_halves_pitch_energy = pitch_energy; + } + /* calculate correlation for half pitch */ + if ( pitch / 2 + offset + corr_len <= s_len ) + { + half_pitch_cn = normalized_cross_correlation_self( signal, pitch / 2 + offset, offset, corr_len, ps->num_channels * 2, &half_pitch_energy ); + } + else + { + half_pitch_cn = pitch_cn; + half_pitch_energy = pitch_energy; + } + + /* combine correlation results */ + *quality = ( half_pitch_cn * three_halves_pitch_cn ) + ( pitch_cn * double_pitch_cn ); + energy = pitch_energy + half_pitch_energy + three_halves_pitch_energy + double_pitch_energy; + } + else + { + *quality = pitch_cn; /* value is negative, thus pass it */ + energy = pitch_energy; + } + + /* update the quality by the quality of the signal with the highest energy */ + if ( energy > maxEnergy ) + { + qualityOfMaxEnergy = *quality; + maxEnergy = energy; + } + + /* go to next channel */ + ++signal; + } + *quality = qualityOfMaxEnergy; + + /* increase calculated quality of signals with low energy */ + *energydB = apa_corrEnergy2dB( maxEnergy, corr_len ); + *quality += apa_getQualityIncreaseForLowEnergy( *energydB ); + + return; +} + + +/* Converts the correlation energy to dB. */ +static float apa_corrEnergy2dB( + float energy, + uint16_t corr_len ) +{ + float energydB = 10.0f * (float) log10( energy / ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC * corr_len * 4.0f ) ); + + return energydB; +} + + +/* Increases the calculated quality of signals with low energy. */ +static float apa_getQualityIncreaseForLowEnergy( + float energydB ) +{ + const float qualIncreaseMinEnergy = -65; + const float qualIncreaseMaxEnergy = -40; + float qualIncForLowEnergy = 0; + + if ( energydB < qualIncreaseMaxEnergy ) + { + qualIncForLowEnergy = energydB; + if ( qualIncForLowEnergy < qualIncreaseMinEnergy ) + { + qualIncForLowEnergy = qualIncreaseMinEnergy; + } + if ( qualIncForLowEnergy > qualIncreaseMaxEnergy ) + { + qualIncForLowEnergy = qualIncreaseMaxEnergy; + } + qualIncForLowEnergy = ( qualIncForLowEnergy - qualIncreaseMaxEnergy ) / + ( qualIncreaseMinEnergy - qualIncreaseMaxEnergy ) * 2; + assert( qualIncForLowEnergy >= 0 && qualIncForLowEnergy <= 2 ); + } + + return qualIncForLowEnergy; +} + + +/* +******************************************************************************** +* +* Function : logarithmic_search +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Search for best match of a template segment using +* hierarchical search method: +* Parameter css is used for sampling every css'd correlation +* value. The area around the best match so far is used for +* further correlation value with half css-value until css=1. +* Search area length is always half previous search length. +* Parameter wss is passed to the correlation computation +* If the search area passes the boundaries, the search +* window is reduced so that it's entirely inside the +* boundaries. +* +******************************************************************************** +*/ +static bool logarithmic_search( + const apa_state_t *ps, + const int16_t *signal, + int16_t s_start, + uint16_t inlen, + uint16_t offset, + uint16_t fixed_pos, + uint16_t corr_len, + uint16_t wss, + uint16_t css, + int16_t *synchpos ) +{ + int16_t i; + float coeff; + float coeff_max; + int16_t s_start_old = 0; + uint16_t s_len_old = 0; + + do + { + coeff_max = -FLT_MAX; /* will always be overwritten with result of first correlation */ + for ( i = s_start; i < s_start + inlen; i += css ) + { + if ( ( wss == 1 ) && ( ps->num_channels == 1 ) ) + { + coeff = cross_correlation_self( signal, i + offset, fixed_pos + offset, corr_len ); + } + else + { + coeff = cross_correlation_subsampled_self( signal, i + offset, fixed_pos + offset, corr_len, wss * ps->num_channels ); + } + + /* update max corr */ + if ( ps->scale < 100 ) + { + /* shrinking: prefer greater synchpos for equal coeff */ + if ( coeff >= coeff_max ) + { + coeff_max = coeff; + *synchpos = i; + } + } + else + { + /* extending: prefer smaller synchpos for equal coeff */ + if ( coeff > coeff_max ) + { + coeff_max = coeff; + *synchpos = i; + } + } + } + /* backup old search range */ + s_start_old = s_start; + s_len_old = inlen; + + css = css / 2; + inlen = inlen / 2; + s_start = *synchpos - inlen / 2; + if ( s_start < s_start_old ) + { + s_start = s_start_old; + } + if ( ( s_start + inlen ) > ( s_start_old + s_len_old ) ) + { + inlen = s_start_old - s_start + s_len_old; + } + } while ( css > 2 ); + + return 0; +} + + +/* +******************************************************************************** +* +* Function : find_synch +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Find the best match of an template segment within +* a search region by similarity measures. +* +* Typical example: +* +* 0 10 20 30 40 50 60 +* in[] = abcdefghijk_abcdefghijk_abcdefghijk_abcdEFGHIJk_abcdefghijk_a +* l_in = 61 +* offset = 30 | +* s_start = -20 <-------------------| +* s_len = 15 <-------------> | +* search range: *************** | +* fixed_pos = 10 |---------> +* corr_len = 6 | <----> +* template segment: | ****** +* synch_pos: -14 <-------------| +* +* All positions are given relative to offset. The +* search region starts at offset+s_start and ends +* at offset+s_start+s_len. The template segment +* starts at offset+fixed_pos and ends at +* offset+fixed_pos+corr_len. For correlation, the +* template segment (EFGHIJ) is matched against the +* segment in the search region, e.g., against (k_abcd) +* in the first search position. The search position +* with the best match (-14: EFGHIJ <-> efghij) is +* returned. +* +* 19-JUN-03 N.Faerber initial version +* 23-APR-04 S.Doehla added subsampling +* +******************************************************************************** +*/ +static bool find_synch( + apa_state_t *ps, + const int16_t *in, + uint16_t l_in, + int16_t s_start, + uint16_t s_len, + int16_t fixed_pos, + uint16_t corr_len, + uint16_t offset, + float *energy, + float *quality, + int16_t *synch_pos ) +{ + assert( ( corr_len - 1 + s_start + s_len - 1 + offset ) < l_in ); + assert( ( corr_len - 1 + fixed_pos + offset ) < l_in ); + + /* pass last pitch to search function as prediction value */ + *synch_pos = ps->last_pitch; + + logarithmic_search( ps, in, s_start, s_len, offset, fixed_pos, corr_len, ps->wss, ps->css * ps->num_channels, synch_pos ); + + /* assert synch_pos is cleanly divisible by number of channels */ + assert( *synch_pos % ps->num_channels == 0 ); + + *quality = 0; + get_scaling_quality( ps, in, l_in, offset, corr_len, (uint16_t) abs( fixed_pos - *synch_pos ), energy, quality ); + + ps->last_pitch = *synch_pos; + + return 0; +} + + +/* +******************************************************************************** +* +* Function : copy_frm +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Copy an audio. +* +* The frame size is fixed to ps->l_frm. The input data +* is stored in frm_in[], where the first ps->l_frm samples +* shall include the previous output frame and the second +* ps->l_frm samples shall contain the current input frame. +* The output frame is stored in frm_out[] and contains +* l_frm_out = ps->l_frm. +* +* The first ps->l_frm input samples are not used by +* this function and are only provided for a consistent +* function call with shrink_frm() and extend_frm(). +* +******************************************************************************** +*/ +static bool copy_frm( + apa_state_t *ps, + const int16_t frm_in[], + int16_t frm_out[], + uint16_t *l_frm_out ) +{ + uint16_t i; + + /* only 2nd input frame is used */ + frm_in += ps->l_frm; + + /* copy frame */ + for ( i = 0; i < ps->l_frm; i++ ) + { + frm_out[i] = frm_in[i]; + } + + /* set output length */ + *l_frm_out = ps->l_frm; + + return 0; +} + + +/* +******************************************************************************** +* +* Function : shrink_frm +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Shrink the length of an audio frame using the WSOLA +* algorithm. +* +* The frame size is fixed to ps->l_frm. The input data +* is stored in frm_in[], where the first ps->l_frm samples +* shall include the previous output frame and the second +* ps->l_frm samples shall contain the current input frame. +* The output frame is stored in frm_out[] and contains +* l_frm_out samples. The amount of shrinking is signal +* dependent. +* +* The first ps->l_frm input samples are not used by +* this function and are only provided for a consistent +* function call with extend_frm(). +* +******************************************************************************** +*/ +static bool shrink_frm( + apa_state_t *ps, + const int16_t frm_in[], + uint16_t maxScaling, + int16_t frm_out[], + uint16_t *l_frm_out ) +{ + bool findSynchResult = 0; + int16_t xtract, l_rem, s_start, s_end; + uint16_t i; + uint16_t over; + float energy, quality = 0.0f; + uint16_t l_frm; + uint16_t l_seg; + + l_frm = ps->l_frm; + l_seg = ps->l_seg; + + /* only 2nd input frame is used */ + frm_in += l_frm; + + /* set search range */ + s_start = ( ps->p_min / ps->num_channels ) * ps->num_channels; + s_end = s_start + ps->l_search; + if ( ( s_end + l_seg ) >= l_frm ) + { + s_end = ( l_frm - l_seg ); + } + + /* calculate overlap position */ + if ( isSilence( frm_in, l_seg, 10 ) ) + { + /* maximum scaling */ + energy = -65; + quality = 5; + if ( maxScaling != 0U && s_end > maxScaling + 1 ) + { + xtract = maxScaling; + } + else + { + /* set to last valid element (i.e. element[len - 1] but note for stereo last element is last pair of samples) */ + xtract = s_end - ps->num_channels; + } + } + else + { + /* find synch */ + findSynchResult = find_synch( ps, frm_in, l_frm, s_start, (uint16_t) ( s_end - s_start ), 0, l_seg, 0, &energy, &quality, &xtract ); + } + + /* assert synch_pos is cleanly divisible by number of channels */ + assert( xtract % ps->num_channels == 0 ); + + /* set frame overlappable - reset if necessary */ + over = 1; + + /* test whether frame has sufficient quality */ + if ( quality < ( ps->targetQuality - ( ps->bad_frame_count * 0.1f ) + ( ps->good_frame_count * 0.2f ) ) ) + { + /* not sufficient */ + over = 0; + if ( ps->bad_frame_count < ps->qualityred ) + { + ++ps->bad_frame_count; + } + if ( ps->good_frame_count > 0U ) + { + --ps->good_frame_count; + } + } + else + { + /* sufficient quality */ + if ( ps->bad_frame_count > 0U ) + { + --ps->bad_frame_count; + } + if ( ps->good_frame_count < ps->qualityrise ) + { + ++ps->good_frame_count; + } + } + + /* Calculate output data */ + if ( over && xtract ) + { + if ( findSynchResult == 1 ) + { + return 1; + } + overlapAdd( frm_in, frm_in + xtract, frm_out, l_seg, ps->num_channels, ps->win + ps->l_halfwin, ps->win ); + } + else + { + xtract = 0; + for ( i = 0; i < l_seg; i++ ) + { + frm_out[i] = frm_in[i]; + } + } + + /* append remaining samples */ + l_rem = l_frm - xtract - l_seg; + for ( i = 0; i < l_rem; i++ ) + { + frm_out[l_seg + i] = frm_in[l_frm - l_rem + i]; + } + + /* set output length */ + *l_frm_out = l_seg + l_rem; + + return 0; +} + + +/* +******************************************************************************** +* +* Function : extend_frm +* Tables : +* Compile Defines : +* Return : 0 on success, 1 on failure +* Information : Extend the length of an audio frame using the WSOLA +* algorithm. +* +* The frame size is fixed to ps->l_frm. The input data +* is stored in frm_in[], where the first ps->l_frm samples +* shall include the previous output frame and the second +* ps->l_frm samples shall contain the current input frame. +* The output frame is stored in frm_out[] and contains +* l_frm_out samples. The amount of extension is signal +* dependent. +* +******************************************************************************** +*/ +static bool extend_frm( + apa_state_t *ps, + const int16_t frm_in[], + int16_t frm_out[], + uint16_t *l_frm_out ) +{ + bool findSynchResult = 0; + uint16_t l_frm_out_target; + uint16_t n, i; + int16_t N; + int16_t s[MAXN + 2], s_max, s_min; + int16_t xtract[MAXN + 2], sync_start, s_end; + uint16_t over[MAXN + 2]; + int16_t l_rem; + int16_t s_start = 0; + float energy, quality = 0.0f; + uint16_t l_frm, l_seg; + const int16_t *fadeOut, *fadeIn; + int16_t *out; + + l_frm = ps->l_frm; + l_seg = ps->l_seg; + + /* number of segments/iterations */ + l_frm_out_target = (uint16_t) ( (float) l_frm * 1.5f ); + N = ( l_frm_out_target / l_seg ) - 1; + if ( N < 1 ) + { + N = 1; + } + if ( N > MAXN ) + { + return 1; + } + /* calculate equally spaced search regions */ + /* s[n] are given relative to 2nd frame and point to the start of */ + /* the search region. The first segment (n=1) will not be moved. */ + /* Hence, the iterations will start with n=2. */ + s_min = -( ps->l_search ) - ( ps->p_min ); + /* (make sure not to exceed array dimension) */ + if ( l_frm + s_min < 0 ) + { + s_min = -( l_frm ); + } + s_max = l_frm - 2 * l_seg - ps->l_search; + if ( s_max < s_min ) + { + N = 1; + } + /* for just one segment start at s_min */ + if ( N == 1 ) + { + s[2] = s_min; + } + /* else, spread linear in between s_min and s_max */ + /* (including s_min and s_max) */ + else + { + for ( n = 2; n <= ( N + 1 ); n++ ) + { + s[n] = s_min + ( ( s_max - s_min ) * ( n - 2 ) ) / ( N - 1 ); + } + } + + /* + * Planning Phase + */ + + xtract[1] = -( l_seg ); /* make sync_start=0 in 1st iteration */ + n = 2; + + /* define synch segment (to be correlated with search region) */ + sync_start = xtract[n - 1] + l_seg; + over[n] = 1; /* will be reset if overlap is not required */ + /* check end of search region: should be at least p_min */ + /* samples on the left of synch_start */ + if ( ( s[n] + ps->l_search ) < ( sync_start - ( ps->p_min ) ) ) + { + s_start = s[n]; + s_end = s_start + ps->l_search; + } + else + { + /* shrink search region to enforce minimum shift */ + s_end = sync_start - ( ps->p_min ); + if ( s[n] + ps->l_search < sync_start ) + { + s_start = s[n]; /* just do it with normal start position */ + } + else if ( n == ( N + 1 ) ) /* move search region left for last segment */ + { + s_start = s_end - ( ps->l_search - ps->p_min ); + } + else + { + over[n] = 0; /* don't search/overlap (just copy down) */ + } + } + + if ( over[n] ) + { + /* calculate overlap position */ + if ( isSilence( frm_in, l_seg, 10 ) ) + { + /* maximum scaling */ + energy = -65; + quality = 5; + xtract[n] = s_start + ps->num_channels; + } + else + { + /* find synch */ + findSynchResult = find_synch( ps, frm_in, 2 * l_frm, s_start, s_end - s_start, sync_start, l_seg, l_frm, &energy, &quality, &xtract[n] ); + } + /* assert synch_pos is cleanly divisible by number of channels */ + assert( xtract[n] % ps->num_channels == 0 ); + + /* test for sufficient quality */ + if ( quality < ( ps->targetQuality - ( ps->bad_frame_count * 0.1f ) + ( ps->good_frame_count * 0.2f ) ) ) + { + /* not sufficient */ + over[n] = 0; + xtract[n] = sync_start; + if ( ps->bad_frame_count < ps->qualityred ) + { + ++ps->bad_frame_count; + } + if ( ps->good_frame_count > 0U ) + { + --ps->good_frame_count; + } + } + else + { + /* sufficient quality */ + if ( ps->bad_frame_count > 0U ) + { + --ps->bad_frame_count; + } + if ( ps->good_frame_count < ps->qualityrise ) + { + ++ps->good_frame_count; + } + } + if ( findSynchResult ) + { + return 1; + } + } + else + { + xtract[n] = sync_start; + } + + + /* Calculate output data */ + for ( n = 2; n <= N; n++ ) + { + if ( over[n] && xtract[n - 1] + l_seg != xtract[n] ) + { + /* mix 2nd half of previous segment with 1st half of current segment */ + fadeOut = frm_in + l_frm + xtract[n - 1] + l_seg; + fadeIn = frm_in + l_frm + xtract[n]; + out = frm_out + ( n - 2 ) * l_seg; + overlapAdd( fadeOut, fadeIn, out, l_seg, ps->num_channels, ps->win + ps->l_halfwin, ps->win ); + } + else + { + /* just copy down 1st half of current segment (= 2nd half of previous segment) */ + int16_t *frm_out_ptr; + const int16_t *frm_in_ptr; + frm_out_ptr = &( frm_out[( n - 2 ) * l_seg] ); + frm_in_ptr = &( frm_in[l_frm + xtract[n]] ); + for ( i = 0; i < l_seg; i++ ) + { + frm_out_ptr[i] = frm_in_ptr[i]; + } + } + } + + /* append remaining samples */ + l_rem = l_frm - ( xtract[N] + l_seg ); + for ( i = 0; i < l_rem; i++ ) + { + frm_out[( N - 1 ) * l_seg + i] = frm_in[2 * l_frm - l_rem + i]; + } + + /* set output length */ + *l_frm_out = ( N - 1 ) * l_seg + l_rem; + + return 0; +} diff --git a/lib_dec/jbm_pcmdsp_apa.h b/lib_dec/jbm_pcmdsp_apa.h new file mode 100644 index 0000000000..5cf4e7d8b6 --- /dev/null +++ b/lib_dec/jbm_pcmdsp_apa.h @@ -0,0 +1,122 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/*! @file jbm_pcmdsp_apa.h Adaptive Playout for Audio (apa). */ + +#ifndef JBM_PCMDSP_APA_H +#define JBM_PCMDSP_APA_H JBM_PCMDSP_APA_H + +#include +#include +#include "options.h" + +/* +******************************************************************************** +* DEFINITION OF CONSTANTS +******************************************************************************** +*/ + +/* size of IO buffers (a_in[], a_out[]) for apa_exec() */ +#define APA_BUF 4096 * 3 + +/* min/max sampling rate [Hz] */ +#define APA_MIN_RATE 1000 +#define APA_MAX_RATE 48000 + +/* min/max scaling [%] */ +#define APA_MIN_SCALE 50 +#define APA_MAX_SCALE 150 + +#define APA_SM_SURROUND 1 +#define APA_SM_LOGARITHMIC 2 +#define APA_SM_FULLSUBSAMPLED 3 + +#define APA_SIM_CCF 11 +#define APA_SIM_NCCF 12 +#define APA_SIM_AMDF 13 +#define APA_SIM_SSE 14 + +/* +******************************************************************************** +* DEFINITION OF DATA TYPES +******************************************************************************** +*/ + +struct apa_state_t; +typedef struct apa_state_t apa_state_t; +/*! handle for APA */ +typedef struct apa_state_t *PCMDSP_APA_HANDLE; + + +/* +******************************************************************************** +* DECLARATION OF PROTOTYPES +******************************************************************************** +*/ + +/*! Allocates memory for state struct and initializes elements. + * @return 0 on success, 1 on failure */ +uint8_t apa_init( apa_state_t **s ); + +/*! Sets state variables to initial value. */ +void apa_reset( apa_state_t *s ); + +/*! Sets the audio configuration. + * Must be called once before processing can start. + * If called again during processing it will reset the state struct! + * Typical sample rates: 8000, 16000, 22050, 44100. Must be in range [APA_MIN_RATE,APA_MAX_RATE]. + * Will also set a number of other state variables that depend on the sampling rate. + * @param[in,out] ps state + * @param[in] output_Fs sample rate [Hz] + * @param[in] num_channels number of channels + * @return 0 on success, 1 on failure */ +bool apa_set_rate( apa_state_t *ps, const int32_t output_Fs, const int16_t num_channels ); + +/*! Set scaling. + * The scale is given in % and will be valid until changed again. + * Must be in range [APA_MIN_SCALE,APA_MAX_SCALE]. + * @return 0 on success, 1 on failure */ +bool apa_set_scale( apa_state_t *s, uint16_t scale ); + +bool apa_set_complexity_options( apa_state_t *s, uint16_t wss, uint16_t css ); + +bool apa_set_quality( apa_state_t *s, float quality, uint16_t qualityred, uint16_t qualityrise ); + +bool apa_exit( apa_state_t **s ); + +uint8_t apa_exec( apa_state_t *s, const int16_t a_in[], uint16_t l_in, uint16_t maxScaling, int16_t a_out[], uint16_t *l_out ); + +#endif /* JBM_PCMDSP_APA_H */ diff --git a/lib_dec/jbm_pcmdsp_fifo.c b/lib_dec/jbm_pcmdsp_fifo.c new file mode 100644 index 0000000000..86990618fd --- /dev/null +++ b/lib_dec/jbm_pcmdsp_fifo.c @@ -0,0 +1,208 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/*! @file jbm_pcmdsp_fifo.c Ringbuffer (FIFO) with fixed capacity for audio samples */ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "jbm_pcmdsp_fifo.h" + + +/* Creates a FIFO. */ +int16_t pcmdsp_fifo_create( + PCMDSP_FIFO_HANDLE *ph ) +{ + PCMDSP_FIFO_HANDLE h = count_malloc( sizeof( struct PCMDSP_FIFO ) ); + + h->size = 0; + h->capacity = 0; + h->nBytesPerSampleSet = 0; + h->dataBegin = NULL; + h->dataEnd = NULL; + h->dataWriteIterator = NULL; + h->dataReadIterator = NULL; + + *ph = h; + + return 0; +} + + +/* Destroys the FIFO. */ +void pcmdsp_fifo_destroy( + PCMDSP_FIFO_HANDLE *ph ) +{ + PCMDSP_FIFO_HANDLE h; + + if ( !ph ) + { + return; + } + h = *ph; + if ( !h ) + { + return; + } + + if ( h->dataBegin ) + { + count_free( h->dataBegin ); + } + + count_free( h ); + *ph = NULL; + + return; +} + +/* Initializes the FIFO with a fixed maximum allowed number audio samples. */ +int16_t pcmdsp_fifo_init( + PCMDSP_FIFO_HANDLE h, + uint16_t nSamples, + uint16_t nChannels, + uint16_t nBytesPerSample ) +{ + uint16_t nDataBytes; + + h->capacity = nSamples; + h->nBytesPerSampleSet = nChannels * nBytesPerSample; + nDataBytes = nSamples * h->nBytesPerSampleSet; + h->dataBegin = count_malloc( nDataBytes ); + h->dataEnd = h->dataBegin + nDataBytes; + h->dataWriteIterator = h->dataBegin; + h->dataReadIterator = h->dataBegin; + + return 0; +} + + +/* Writes the given audio data to the FIFO. */ +int16_t pcmdsp_fifo_write( + PCMDSP_FIFO_HANDLE h, + const uint8_t *samples, + uint16_t nSamplesPerChannel ) +{ + uint16_t nBytesToWrite; + + /* check for empty input buffer */ + if ( nSamplesPerChannel == 0U ) + { + return 0; + } + + /* check, if enough space left */ + if ( nSamplesPerChannel > h->capacity - h->size ) + { + return -1; + } + + nBytesToWrite = nSamplesPerChannel * h->nBytesPerSampleSet; + if ( h->dataWriteIterator + nBytesToWrite > h->dataEnd ) + { + /* wrap around: writing two parts */ + uint16_t bytesOfFirstPart, secondSize; + bytesOfFirstPart = (uint16_t) ( h->dataEnd - h->dataWriteIterator ); + secondSize = nBytesToWrite - bytesOfFirstPart; + mvc2c( samples, h->dataWriteIterator, bytesOfFirstPart ); + mvc2c( samples + bytesOfFirstPart, h->dataBegin, secondSize ); + h->dataWriteIterator = h->dataBegin + secondSize; + } + else + { + /* no wrap around: simple write */ + mvc2c( samples, h->dataWriteIterator, nBytesToWrite ); + h->dataWriteIterator += nBytesToWrite; + } + h->size += nSamplesPerChannel; + + return 0; +} + +/* Reads the given number of audio samples from the FIFO. */ +int16_t pcmdsp_fifo_read( + PCMDSP_FIFO_HANDLE h, + uint16_t nSamplesPerChannel, + uint8_t *samples ) +{ + uint16_t nBytesToRead; + + /* check for empty output buffer */ + if ( nSamplesPerChannel == 0U ) + { + return 0; + } + + /* check, if enough bytes readable */ + if ( nSamplesPerChannel > h->size ) + { + return -1; + } + + nBytesToRead = nSamplesPerChannel * h->nBytesPerSampleSet; + if ( h->dataReadIterator + nBytesToRead > h->dataEnd ) + { + /* wrap around: reading two parts */ + uint16_t bytesOfFirstPart, nBytesOfSecondPart; + bytesOfFirstPart = (uint16_t) ( h->dataEnd - h->dataReadIterator ); + nBytesOfSecondPart = nBytesToRead - bytesOfFirstPart; + mvc2c( h->dataReadIterator, samples, bytesOfFirstPart ); + mvc2c( h->dataBegin, samples + bytesOfFirstPart, nBytesOfSecondPart ); + h->dataReadIterator = h->dataBegin + nBytesOfSecondPart; + } + else + { + /* no wrap around: simple read */ + mvc2c( h->dataReadIterator, samples, nBytesToRead ); + h->dataReadIterator += nBytesToRead; + } + h->size -= nSamplesPerChannel; + + return 0; +} + + +/* Returns the number of samples per channel that can be read (number of currently stored samples). */ +uint16_t pcmdsp_fifo_nReadableSamples( + const PCMDSP_FIFO_HANDLE h ) +{ + return h->size; +} diff --git a/lib_dec/jbm_pcmdsp_fifo.h b/lib_dec/jbm_pcmdsp_fifo.h new file mode 100644 index 0000000000..bdd186702e --- /dev/null +++ b/lib_dec/jbm_pcmdsp_fifo.h @@ -0,0 +1,81 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/*! @file jbm_pcmdsp_fifo.h Ringbuffer (FIFO) with fixed capacity for audio samples. */ + +#ifndef JBM_PCMDSP_FIFO_H +#define JBM_PCMDSP_FIFO_H JBM_PCMDSP_FIFO_H + +#include +#include "options.h" + + +/** Ringbuffer (FIFO) with fixed capacity for audio samples. */ +struct PCMDSP_FIFO +{ + /** size of currently stored samples per channel */ + uint16_t size; + /** maximum allowed number of samples per channel */ + uint16_t capacity; + /** sample size in bytes per channel */ + uint16_t nBytesPerSampleSet; + + /** begin of the FIFO data (pointer to bytes) */ + uint8_t *dataBegin; + /** end of the FIFO data (pointer to bytes) */ + uint8_t *dataEnd; + /** position of next write operation (pointer to bytes) */ + uint8_t *dataWriteIterator; + /** position of next read operation (pointer to bytes) */ + uint8_t *dataReadIterator; +}; + +typedef struct PCMDSP_FIFO *PCMDSP_FIFO_HANDLE; + + +int16_t pcmdsp_fifo_create( PCMDSP_FIFO_HANDLE *ph ); + +void pcmdsp_fifo_destroy( PCMDSP_FIFO_HANDLE *ph ); + +int16_t pcmdsp_fifo_init( PCMDSP_FIFO_HANDLE h, uint16_t nSamples, uint16_t nChannels, uint16_t nBytesPerSample ); + +int16_t pcmdsp_fifo_write( PCMDSP_FIFO_HANDLE h, const uint8_t *samples, uint16_t nSamplesPerChannel ); + +int16_t pcmdsp_fifo_read( PCMDSP_FIFO_HANDLE h, uint16_t nSamplesPerChannel, uint8_t *samples ); + +uint16_t pcmdsp_fifo_nReadableSamples( const PCMDSP_FIFO_HANDLE h ); + +#endif /* JBM_PCMDSP_FIFO_H */ diff --git a/lib_dec/jbm_pcmdsp_similarityestimation.c b/lib_dec/jbm_pcmdsp_similarityestimation.c new file mode 100644 index 0000000000..3016fab5e1 --- /dev/null +++ b/lib_dec/jbm_pcmdsp_similarityestimation.c @@ -0,0 +1,158 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/*! @file jbm_pcmdsp_similarityestimation.c Algorithms for correlation and similarity estimation. */ + +/* system headers */ +#include +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/* local headers */ +#include "jbm_pcmdsp_similarityestimation.h" + + +/* Calculates cross correlation coefficient for template segment. */ +float cross_correlation_self( + const int16_t *signal, + uint16_t x, + uint16_t y, + uint16_t corr_len ) +{ + float c_c; + int16_t j; + + c_c = 0.0f; + for ( j = 0; j < corr_len; j++ ) + { + c_c += ( (float) signal[j + x] * (float) signal[j + y] ); + } + + return c_c; +} + +/* Calculates cross correlation coefficient for template segment. */ +float cross_correlation_subsampled_self( + const int16_t *signal, + uint16_t x, + uint16_t y, + uint16_t corr_len, + uint16_t subsampling ) +{ + float c_c; + int16_t j; + + c_c = 0.0f; + for ( j = 0; j < corr_len; j += subsampling ) + { + c_c += ( (float) signal[j + x] * (float) signal[j + y] ); + } + + return c_c; +} + + +/* Calculates normalized cross correlation coefficient for template segment. */ +float normalized_cross_correlation_self( + const int16_t *signal, + uint16_t x, + uint16_t y, + uint16_t corr_len, + uint16_t subsampling, + float *energy ) +{ + float c_c; + float energy_xy, energy_x, energy_y; + uint16_t j; + const int16_t *signal_a, *signal_b; + + c_c = 0.0f; + energy_x = 0.0f; + energy_y = 0.0f; + signal_a = &signal[x]; + signal_b = &signal[y]; + for ( j = 0; j < corr_len; j += subsampling ) + { + c_c += ( (float) signal_a[j] * (float) signal_b[j] ); + energy_x += ( (float) signal_a[j] ) * ( (float) signal_a[j] ); + energy_y += ( (float) signal_b[j] ) * ( (float) signal_b[j] ); + } + energy_xy = (float) sqrt( (float) energy_x * (float) energy_y ); + if ( energy_xy < 1.0f ) + { + energy_xy = 1.0f; /* conceal silent frames */ + } + + c_c = c_c / energy_xy; + *energy = energy_xy; + + return c_c; +} + + +/* Splits the signal into segments and checks if all of them have very low energy. */ +bool isSilence( + const int16_t *signal, + uint32_t len, + uint32_t segments ) +{ + uint32_t i, samplesPerSegment; + float energy; + + energy = 0; + samplesPerSegment = len / segments; + for ( i = 0; i < len; i++ ) + { + energy += ( signal[i] / 32768.f ) * ( signal[i] / 32768.f ); + if ( ( i != 0U && i % samplesPerSegment == 0U ) || i + 1 == len ) + { + /* check energy of current segment */ + energy = 10 * (float) log10( energy / samplesPerSegment ); + if ( energy > -65 ) + { + return false; + } + energy = 0; + } + } + + return true; +} diff --git a/lib_dec/jbm_pcmdsp_similarityestimation.h b/lib_dec/jbm_pcmdsp_similarityestimation.h new file mode 100644 index 0000000000..36f64d7297 --- /dev/null +++ b/lib_dec/jbm_pcmdsp_similarityestimation.h @@ -0,0 +1,140 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/*! @file jbm_pcmdsp_similarityestimation.h Algorithms for correlation and similarity estimation. */ + +#ifndef JBM_PCMDSP_SIMILARITYESTIMATION_H +#define JBM_PCMDSP_SIMILARITYESTIMATION_H JBM_PCMDSP_SIMILARITYESTIMATION_H + +#include "options.h" +#include "typedef.h" + +/* +******************************************************************************** +* +* Function : cross_correlation_self +* Tables : +* Compile Defines : +* Return : (float) cross correlation coefficient +* Information : Calculate cross correlation coefficient for template +* segment. +* The returned value is signal-energy dependant. +* +* Used formula: +* +* corr_len-1 +* ---- +* \ +* / (j+x)*(j+y) +* ---- +* j=0 +* +* +* 23-JUL-04 S.Doehla initial version +* +******************************************************************************** +*/ +float cross_correlation_self( const int16_t *signal, uint16_t x, uint16_t y, uint16_t corr_len ); + +/* +******************************************************************************** +* +* Function : cross_correlation_subsampled_self +* Tables : +* Compile Defines : +* Return : (float) cross correlation coefficient +* Information : Calculate cross correlation coefficient for template +* segment. +* The returned value is signal-energy dependant. +* +* Used formula: +* +* corr_len-1 +* ---- +* \ +* / (j+x)*(j+y) +* ---- +* j=0 +* +* +* 23-JUL-04 S.Doehla initial version +* +******************************************************************************** +*/ +float cross_correlation_subsampled_self( const int16_t *signal, uint16_t x, uint16_t y, uint16_t corr_len, uint16_t subsampling ); + +/* +******************************************************************************** +* +* Function : normalized_cross_correlation_self +* Tables : +* Compile Defines : +* Return : (float) normalized cross correlation coefficient +* Information : Calculate normalized cross correlation coefficient +* for template segment. +* The returned value is signal-energy independant. +* This means, no matter how loud your signal is, equal +* signals will return 1.0, cross-phased signals -1.0. +* +* Complexity is very high due to many floating point +* operations and using squared root! +* +* This function fills parameter energy with the common +* energy of signal x and signal y. This might be useful +* for silence detection. +* +* Used formula: +* +* corr_len-1 +* ---- +* \ (j+x)*(j+y) +* \ __________________ +* / -------------- +* / -/ (j+x)�+(j+y)� +* ---- +* j=0 +* +* +* 23-JUL-04 S.Doehla initial version +* +******************************************************************************** +*/ +float normalized_cross_correlation_self( const int16_t *signal, uint16_t x, uint16_t y, uint16_t corr_len, uint16_t subsampling, float *energy ); + +/* Splits the signal into segments and checks if all of them have very low energy. */ +bool isSilence( const int16_t *signal, uint32_t len, uint32_t segments ); + +#endif /* JBM_PCMDSP_SIMILARITYESTIMATION_H */ diff --git a/lib_dec/jbm_pcmdsp_window.c b/lib_dec/jbm_pcmdsp_window.c new file mode 100644 index 0000000000..94182e5ad6 --- /dev/null +++ b/lib_dec/jbm_pcmdsp_window.c @@ -0,0 +1,126 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "jbm_pcmdsp_window.h" +#include "cnst.h" +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * hannWindow() + * + * Generates a Hann window (cos-shaped) of length n + *-----------------------------------------------------------------------*/ + +void hannWindow( + uint16_t n, + float *w ) +{ + uint16_t i; + float arg; + + for ( i = 0; i < n / 2; i++ ) + { + arg = ( ( 2.0f * EVS_PI ) * i ) / (float) ( n ); + w[i] = (float) ( ( 1.0f - cos( arg ) ) / 2.0f ); + } + + for ( ; i < n; i++ ) + { + w[i] = 1.0f - w[i - n / 2]; + } + + return; +} + + +/*-----------------------------------------------------------------------* + * overlapAdd() + * + * Overlap/Add of two signal with a given window + *-----------------------------------------------------------------------*/ + +void overlapAdd( + const int16_t *fadeOut, + const int16_t *fadeIn, + int16_t *out, + uint16_t n, + uint16_t nChannels, + const float *fadeOutWin, + const float *fadeInWin ) +{ + float fdOutVal, fdInVal; + int16_t i, j, hannIter; + int32_t combinedVal; + + for ( j = 0; j < nChannels; j++ ) + { + /* reset Hann window iterator to beginning (both channels use same window) */ + hannIter = 0; + for ( i = j; i < n; i += nChannels ) + { + fdOutVal = fadeOut[i] * fadeOutWin[hannIter]; + fdInVal = fadeIn[i] * fadeInWin[hannIter]; + /* round combinedVal value (taking care of sign) */ + combinedVal = (int32_t) ( ( fdInVal + fdOutVal ) + 0.5 ); + + if ( fdInVal + fdOutVal < 0.0 ) + { + combinedVal = (int32_t) ( ( fdInVal + fdOutVal ) - 0.5 ); + } + + /* saturate value */ + if ( combinedVal > MAX16B ) + { + combinedVal = MAX16B; + } + else if ( combinedVal < MIN16B ) + { + combinedVal = MIN16B; + } + out[i] = (int16_t) combinedVal; + hannIter++; + } + } + + return; +} diff --git a/lib_dec/jbm_pcmdsp_window.h b/lib_dec/jbm_pcmdsp_window.h new file mode 100644 index 0000000000..cf697b6b9c --- /dev/null +++ b/lib_dec/jbm_pcmdsp_window.h @@ -0,0 +1,66 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/*! @file jbm_jbm_pcmdsp_window.h Window functions. */ + +#ifndef JBM_PCMDSP_WINDOW_H +#define JBM_PCMDSP_WINDOW_H JBM_PCMDSP_WINDOW_H + +#include +#include "options.h" + +/*! Generates a Hann window (cos-shaped) of length n. + * Roughly: + * + * 1 __ + * / \ + * 0 _/ \_ + * <------> + * n + */ +void hannWindow( uint16_t n, float *w ); + +/** Overlap/Add of two signal with a given window. */ +/** @param[in] fadeOut signal to fade out + * @param[in] fadeIn signal to fade in + * @param[in] out buffer to store the output signal + * @param[in] n number of samples + * @param[in] nChannels number of channels + * @param[in] fadeOutWin window for fade out + * @param[in] fadeInWin window for fade in */ +void overlapAdd( const int16_t *fadeOut, const int16_t *fadeIn, int16_t *out, uint16_t n, uint16_t nChannels, const float *fadeOutWin, const float *fadeInWin ); + +#endif /* JBM_PCMDSP_WINDOW_H */ diff --git a/lib_dec/lead_deindexing.c b/lib_dec/lead_deindexing.c new file mode 100644 index 0000000000..246e0df391 --- /dev/null +++ b/lib_dec/lead_deindexing.c @@ -0,0 +1,283 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_dec.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void fcb_decode_pos( const int16_t index, int16_t pos_vector[], const int16_t pulse_num, const int16_t pos_num ); + + +/*-------------------------------------------------------------------* + * re8_decode_base_index + * + * Decode RE8 base index + *-------------------------------------------------------------------*/ + +void re8_decode_base_index( + const int16_t n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ + uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ + int16_t *x /* o : point in RE8 (8-dimensional integer vector) */ +) +{ + int16_t i, j, k1, l, m, m1, m2; + int16_t setor_8p_temp[8], setor_8p_temp_1[8], setor_8p_temp_2[8]; + int16_t sign_8p; + int16_t code_level; + const int16_t *a1, *a2; + int16_t ka; + uint16_t offset; + int16_t code_index; + int16_t element_a10, element_a11, element_a12; + + set_s( setor_8p_temp_2, 0, 8 ); + + element_a11 = 0, + element_a12 = 0; + if ( n < 2 ) + { + for ( i = 0; i < 8; i++ ) + { + x[i] = 0; + } + } + else + { + if ( I > 65519L ) + { + I = 0; + } + /*-------------------------------------------------------------------* + * search for the identifier ka of the absolute leader (table-lookup) + * Q2 is a subset of Q3 - the two cases are considered in the same branch + *-------------------------------------------------------------------*/ + if ( n <= 3 ) + { + for ( i = 1; i < NB_LDQ3; i++ ) + { + if ( I < (int32_t) II3[i] ) + { + break; + } + } + ka = AA3[i - 1]; + } + else + { + for ( i = 1; i < NB_LDQ4; i++ ) + { + if ( I < (int32_t) II4[i] ) + { + break; + } + } + ka = AA4[i - 1]; + } + + /*-------------------------------------------------------* + * decode + *-------------------------------------------------------*/ + + a1 = vals_a[ka]; + a2 = vals_q[ka]; + k1 = a2[0]; + code_level = a2[1]; + + offset = Is[ka]; + code_index = I - offset; + + sign_8p = code_index & ( ( 1 << k1 ) - 1 ); + + code_index = code_index >> k1; + + m = 0; + m1 = 0; + m2 = 0; + + element_a10 = a1[0]; + switch ( code_level ) + { + case 4: + + m2 = 1; /*a2[4];*/ + i = code_index & 1; + if ( i == 0 ) + setor_8p_temp_2[0] = 0; + else + setor_8p_temp_2[0] = 1; + code_index = code_index >> 1; + /* FALLTHRU */ + case 3: + + m = a2[2]; + m1 = a2[3]; + l = select_table22[m1][m]; + j = ( code_index * mult_avq_tab[l] ) >> shift_avq_tab[l]; + code_index = code_index - j * l; + fcb_decode_pos( code_index, setor_8p_temp_1, m, m1 ); + code_index = j; + element_a12 = a1[2]; + /* FALLTHRU */ + case 2: + + m = a2[2]; + fcb_decode_pos( code_index, setor_8p_temp, 8, m ); + element_a11 = a1[1]; + } + + for ( i = 0; i < 8; i++ ) + { + x[i] = element_a10; + } + + for ( i = 0; i < m; i++ ) + { + x[setor_8p_temp[i]] = element_a11; + } + + for ( i = 0; i < m1; i++ ) + { + x[setor_8p_temp[setor_8p_temp_1[i]]] = element_a12; + } + + for ( i = 0; i < m2; i++ ) + { + x[setor_8p_temp[setor_8p_temp_1[setor_8p_temp_2[0]]]] = 6; + } + + /*--------------------------------------------------------------------* + * add the sign of all elemnt ( except the last one in some case ) + *--------------------------------------------------------------------*/ + m1 = k1 - 1; + m2 = 8; + l = 1; + for ( i = 0; i < 8; i++ ) + { + l *= x[i]; + } + /* if the signs are constrained and all components are non-zero */ + if ( ( k1 == 7 ) && ( l > 0 ) ) + { + m2 = 7; + } + for ( i = 0; i < m2; i++ ) + { + if ( x[i] != 0 ) + { + if ( ( sign_8p >> m1 ) & 1 ) + { + x[i] *= -1; + } + m1--; + } + } + + /*--------------------------------------------------------------------* + * recover the sign of last element if needed + *--------------------------------------------------------------------*/ + if ( k1 == 7 ) + { + m1 = 0; + + for ( i = 0; i < 8; i++ ) + { + m1 += x[i]; + } + if ( m1 & 3 ) + { + x[7] *= -1; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * fcb_decode_pos + * + * base function for decoding position index + *-------------------------------------------------------------------*/ + +static void fcb_decode_pos( + const int16_t index, /* i : Index to decoder */ + int16_t pos_vector[], /* o : Position vector */ + const int16_t pulse_num, /* i : Number of pulses */ + const int16_t pos_num /* i : Number of positions */ +) +{ + int16_t i, k, l; + int16_t temp1, temp2; + const int16_t *select_table23, *select_table24; + + k = index; + l = 0; + temp1 = pos_num; + temp2 = pulse_num + 1; + + for ( i = 0; i < pos_num - 1; i++ ) + { + select_table23 = select_table22[temp1]; + select_table24 = &select_table23[pulse_num - l]; + + k = *select_table24 - k; + + while ( k <= ( *select_table24-- ) ) + { + l++; + } + k = select_table23[temp2 - l] - k; + + pos_vector[i] = l - 1; + temp1--; + } + + pos_vector[i] = l + k; + + return; +} diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c new file mode 100644 index 0000000000..26a0bb0c92 --- /dev/null +++ b/lib_dec/lib_dec.c @@ -0,0 +1,2057 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "lib_dec.h" +#include "ivas_prot.h" +#include "prot.h" +#include "jbm_jb4sb.h" +#include "jbm_pcmdsp_apa.h" +#include "jbm_pcmdsp_fifo.h" +#include +#include +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#ifdef WMOPS +#include "wmops.h" +#endif + +/*---------------------------------------------------------------------* + * Local structs + *---------------------------------------------------------------------*/ + +struct IVAS_DEC_VOIP +{ + uint16_t nSamplesFrame; + JB4_HANDLE hJBM; + PCMDSP_APA_HANDLE hTimeScaler; + PCMDSP_FIFO_HANDLE hFifoAfterTimeScaler; + uint16_t lastDecodedWasActive; +#ifdef SUPPORT_JBM_TRACEFILE + IVAS_JBM_TRACE_DATA JbmTraceData; +#endif +}; + +typedef struct IVAS_DEC_VOIP IVAS_DEC_VOIP; + +struct IVAS_DEC +{ + IVAS_DEC_MODE mode; + uint16_t nSamplesFrame; + Decoder_Struct *st_ivas; + IVAS_DEC_VOIP *hVoIP; + bool hasBeenFedFirstGoodFrame; /* False on init. Gets set to true after first good frame has been fed into the decoder, but not decoded yet. */ + bool hasDecodedFirstGoodFrame; /* False on init. Gets set to true after first good frame has been decoded -> all bitstream information is known from that point on */ + bool isInitialized; + + int16_t bitstreamformat; /* Bitstream format flag (G.192/MIME/VOIP_G192_RTP/VOIP_RTPDUMP) */ + bool Opt_VOIP; /* flag indicating VOIP mode with JBM */ + int16_t amrwb_rfc4867_flag; /* MIME from rfc4867 is used */ + int16_t sdp_hf_only; /* RTP payload format parameter: only Header-Full format without zero padding for size collision avoidance */ + int16_t prev_ft_speech; /* RXDTX handler: previous frametype flag for G.192 format AMRWB SID_FIRST detection */ + int16_t CNG; /* RXDTX handler: CNG=1, nonCNG=0 */ +}; + + +/*---------------------------------------------------------------------* + * Local functions + *---------------------------------------------------------------------*/ + +static void IVAS_DEC_Close_VoIP( IVAS_DEC_VOIP *hVoIP ); +#ifdef SUPPORT_JBM_TRACEFILE +static void store_JbmData( IVAS_DEC_VOIP *hVoIP, JB4_DATAUNIT_HANDLE dataUnit, const uint32_t systemTimestamp_ms, const uint16_t extBufferedSamples, const int32_t output_Fs ); +#endif +static ivas_error evs_dec_main( Decoder_Struct *st_ivas, const int16_t nOutSamples, int16_t *pcmBuf ); +static ivas_error input_format_API_to_internal( IVAS_DEC_INPUT_FORMAT input_format, int16_t *bitstream_format_internal, int16_t *sdp_hf_only, const bool is_voip_enabled ); +static void init_decoder_config( DECODER_CONFIG_HANDLE hDecoderConfig, const int16_t orientation_tracking, const float no_diegetic_pan ); + + +/*---------------------------------------------------------------------* + * IVAS_DEC_Open() + * + * Open IVAS decoder + *---------------------------------------------------------------------*/ + +/* may return an error but may still have allocated memory - thus run Close also in case of error to release memory */ +ivas_error IVAS_DEC_Open( + IVAS_DEC_HANDLE *phIvasDec, /* i/o: pointer to an IVAS decoder handle to be opened */ + const IVAS_DEC_MODE mode, /* i : compatibility mode (EVS or IVAS) */ + const int16_t orientation_tracking, /* i : orientation tracking type */ + float no_diegetic_pan ) +{ + IVAS_DEC_HANDLE hIvasDec; + + if ( phIvasDec == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( ( *phIvasDec = (IVAS_DEC_HANDLE) count_malloc( sizeof( struct IVAS_DEC ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS decoder handle" ); + } + hIvasDec = *phIvasDec; + hIvasDec->hVoIP = NULL; + hIvasDec->hasBeenFedFirstGoodFrame = false; + hIvasDec->hasDecodedFirstGoodFrame = false; + hIvasDec->isInitialized = false; + + hIvasDec->mode = mode; + + if ( ( hIvasDec->st_ivas = (Decoder_Struct *) count_malloc( sizeof( Decoder_Struct ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS decoder structure" ); + } + + if ( ( hIvasDec->st_ivas->hDecoderConfig = (DECODER_CONFIG_HANDLE) count_malloc( sizeof( DECODER_CONFIG ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Decoder config structure" ); + } + + init_decoder_config( hIvasDec->st_ivas->hDecoderConfig, orientation_tracking, no_diegetic_pan ); + + hIvasDec->bitstreamformat = G192; + hIvasDec->Opt_VOIP = 0; + hIvasDec->amrwb_rfc4867_flag = -1; + hIvasDec->prev_ft_speech = 1; /* RXDTX handeler previous frametype flag for G.192 format AMRWB SID_FIRST detection */ + hIvasDec->CNG = 0; /* RXDTX handler CNG = 1, no CNG = 0*/ + + if ( mode == IVAS_DEC_MODE_EVS ) + { + /* EVS - do alloc etc. */ + hIvasDec->st_ivas->codec_mode = 0; /* unknown before first frame */ + hIvasDec->st_ivas->element_mode_init = EVS_MONO; + hIvasDec->st_ivas->ivas_format = MONO_FORMAT; + hIvasDec->st_ivas->transport_config = AUDIO_CONFIG_INVALID; + hIvasDec->st_ivas->intern_config = AUDIO_CONFIG_INVALID; + hIvasDec->st_ivas->writeFECoffset = 0; + + return IVAS_ERR_OK; + } + else if ( mode == IVAS_DEC_MODE_IVAS ) + { + hIvasDec->st_ivas->codec_mode = 0; /* unknown before first frame */ + hIvasDec->st_ivas->element_mode_init = -1; + hIvasDec->st_ivas->ivas_format = UNDEFINED_FORMAT; + hIvasDec->st_ivas->transport_config = AUDIO_CONFIG_INVALID; + hIvasDec->st_ivas->intern_config = AUDIO_CONFIG_INVALID; + hIvasDec->st_ivas->renderer_type = RENDERER_DISABLE; + hIvasDec->st_ivas->ini_frame = 0; + hIvasDec->st_ivas->ini_active_frame = 0; + hIvasDec->st_ivas->writeFECoffset = 0; + hIvasDec->st_ivas->sba_order = 0; + hIvasDec->st_ivas->sba_planar = 0; + + /*initialize pointers*/ + ivas_initialize_handles_dec( hIvasDec->st_ivas ); + + hIvasDec->st_ivas->ism_mode = ISM_MODE_NONE; + hIvasDec->st_ivas->sba_mode = SBA_MODE_NONE; + hIvasDec->st_ivas->mc_mode = MC_MODE_NONE; + + return IVAS_ERR_OK; + } + + return IVAS_ERR_WRONG_PARAMS; +} + + +/*---------------------------------------------------------------------* + * init_decoder_config() + * + * Initialize Decoder Config. handle + *---------------------------------------------------------------------*/ + +static void init_decoder_config( + DECODER_CONFIG_HANDLE hDecoderConfig, /* i/o: configuration structure */ + const int16_t orientation_tracking, + const float no_diegetic_pan ) +{ + hDecoderConfig->Opt_AMR_WB = 0; + hDecoderConfig->nchan_out = 1; + hDecoderConfig->output_config = AUDIO_CONFIG_INVALID; + hDecoderConfig->Opt_LsCustom = 0; + hDecoderConfig->Opt_HRTF_binary = 0; + hDecoderConfig->Opt_Headrotation = 0; +#ifdef DEBUGGING + hDecoderConfig->forceSubframeBinauralization = 0; +#endif + hDecoderConfig->orientation_tracking = orientation_tracking; + hDecoderConfig->no_diegetic_pan = no_diegetic_pan; + + return; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_Close( ) + * + * + *---------------------------------------------------------------------*/ + +void IVAS_DEC_Close( + IVAS_DEC_HANDLE *phIvasDec /* i/o: pointer to IVAS decoder handle */ +) +{ + /* Free all memory */ + if ( phIvasDec == NULL || *phIvasDec == NULL ) + { + return; + } + + if ( ( *phIvasDec )->hVoIP ) + { + IVAS_DEC_Close_VoIP( ( *phIvasDec )->hVoIP ); + count_free( ( *phIvasDec )->hVoIP ); + } + + if ( ( *phIvasDec )->isInitialized ) + { + if ( ( *phIvasDec )->st_ivas ) + { + ivas_destroy_dec( ( *phIvasDec )->st_ivas ); + } + } + else + { + if ( ( *phIvasDec )->st_ivas->hDecoderConfig != NULL ) + { + count_free( ( *phIvasDec )->st_ivas->hDecoderConfig ); + ( *phIvasDec )->st_ivas->hDecoderConfig = NULL; + } + + if ( ( *phIvasDec )->st_ivas->hHeadTrackData != NULL ) + { + count_free( ( *phIvasDec )->st_ivas->hHeadTrackData ); + ( *phIvasDec )->st_ivas->hHeadTrackData = NULL; + } + + ivas_HRTF_binary_close( &( *phIvasDec )->st_ivas->hHrtfTD ); + + count_free( ( *phIvasDec )->st_ivas ); + } + + ( *phIvasDec )->st_ivas = NULL; + + count_free( *phIvasDec ); + *phIvasDec = NULL; + phIvasDec = NULL; + + return; +} + + +/*---------------------------------------------------------------------* + * mapOutputFormat() + * + * + *---------------------------------------------------------------------*/ + +static AUDIO_CONFIG mapOutputFormat( + const IVAS_DEC_AUDIO_CONFIG outputFormat ) +{ + AUDIO_CONFIG output_config; + + if ( outputFormat == IVAS_DEC_OUTPUT_EXT ) /* external renderer */ + { + output_config = AUDIO_CONFIG_EXTERNAL; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_MONO ) + { + output_config = AUDIO_CONFIG_MONO; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_STEREO ) + { + output_config = AUDIO_CONFIG_STEREO; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_5_1 ) + { + output_config = AUDIO_CONFIG_5_1; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_7_1 ) + { + output_config = AUDIO_CONFIG_7_1; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_5_1_2 ) + { + output_config = AUDIO_CONFIG_5_1_2; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_5_1_4 ) + { + output_config = AUDIO_CONFIG_5_1_4; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_7_1_4 ) + { + output_config = AUDIO_CONFIG_7_1_4; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_LS_CUSTOM ) + { + output_config = AUDIO_CONFIG_LS_CUSTOM; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_FOA ) + { + output_config = AUDIO_CONFIG_FOA; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_HOA2 ) + { + output_config = AUDIO_CONFIG_HOA2; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_HOA3 ) + { + output_config = AUDIO_CONFIG_HOA3; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_BINAURAL ) + { + output_config = AUDIO_CONFIG_BINAURAL; + } + else if ( outputFormat == IVAS_DEC_OUTPUT_BINAURAL_ROOM ) + { + output_config = AUDIO_CONFIG_BINAURAL_ROOM; + } + else + { + output_config = AUDIO_CONFIG_INVALID; + } + + return output_config; +} + + +/*---------------------------------------------------------------------* + * mapIvasFormat( ) + * + * + *---------------------------------------------------------------------*/ + +static IVAS_DEC_BS_FORMAT mapIvasFormat( + const IVAS_FORMAT ivas_format ) +{ + switch ( ivas_format ) + { + case MONO_FORMAT: + return IVAS_DEC_BS_MONO; + case STEREO_FORMAT: + return IVAS_DEC_BS_STEREO; + case ISM_FORMAT: + return IVAS_DEC_BS_OBJ; + case MC_FORMAT: + return IVAS_DEC_BS_MC; + case SBA_FORMAT: + return IVAS_DEC_BS_SBA; + case MASA_FORMAT: + return IVAS_DEC_BS_MASA; + default: + break; + } + + return IVAS_DEC_BS_UNKOWN; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_Configure( ) + * + * Decoder configuration + * legacy code behavior: if no output format set, then it's EVS mono + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_Configure( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const uint32_t sampleRate, /* i : output sampling frequency */ + const IVAS_DEC_AUDIO_CONFIG outputFormat, /* i : output format */ + const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ + const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ + const int16_t enableHeadRotation /* i : enable head rotation for binaural output */ +#ifdef DEBUGGING + , + const int16_t forceSubframeBinauralization /* i : enable subframe binauralization */ +#endif +) +{ + Decoder_Struct *st_ivas; + DECODER_CONFIG_HANDLE hDecoderConfig; + ivas_error error; + + error = IVAS_ERR_OK; + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( sampleRate != 8000 && sampleRate != 16000 && sampleRate != 32000 && sampleRate != 48000 ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + if ( hIvasDec->mode == IVAS_DEC_MODE_EVS && outputFormat != IVAS_DEC_OUTPUT_MONO ) + { + return IVAS_ERR_WRONG_MODE; + } + + st_ivas = hIvasDec->st_ivas; + + hDecoderConfig = st_ivas->hDecoderConfig; + + hDecoderConfig->output_config = mapOutputFormat( outputFormat ); + if ( hDecoderConfig->output_config == AUDIO_CONFIG_INVALID ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + hDecoderConfig->output_Fs = sampleRate; + + if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) + { + st_ivas->element_mode_init = EVS_MONO; + hDecoderConfig->nchan_out = 1; + } + + if ( outputFormat != IVAS_DEC_OUTPUT_EXT && outputFormat != IVAS_DEC_OUTPUT_LS_CUSTOM ) + { + hDecoderConfig->nchan_out = audioCfg2channels( hDecoderConfig->output_config ); + } + +#ifdef DEBUGGING + hDecoderConfig->forceSubframeBinauralization = forceSubframeBinauralization; +#endif + hDecoderConfig->Opt_LsCustom = customLsOutputEnabled; + hDecoderConfig->Opt_Headrotation = enableHeadRotation; + hDecoderConfig->Opt_HRTF_binary = hrtfReaderEnabled; + + /* Set decoder parameters to initial values */ + if ( ( error = ivas_init_decoder_front( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) + { + hIvasDec->st_ivas->ivas_format = MONO_FORMAT; + } + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_EnableVoIP( ) + * + * Intitialize JBM + * jbmSafetyMargin: allowed delay reserve in addition to network jitter + * to reduce late-loss, default: 60 [milliseconds] + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_EnableVoIP( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const int16_t jbmSafetyMargin, /* i : allowed delay reserve for JBM, in milliseconds */ + const IVAS_DEC_INPUT_FORMAT inputFormat /* i : format of the input bitstream */ +) +{ + DECODER_CONFIG_HANDLE hDecoderConfig; + ivas_error error; + + error = IVAS_ERR_OK; + + /* initialize time scaler and FIFO after time scaler */ + uint16_t wss, css; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( !hIvasDec->isInitialized ) + { + if ( ( error = ivas_init_decoder( hIvasDec->st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + hIvasDec->st_ivas->hDecoderConfig->ivas_total_brate = ACELP_8k00; + hIvasDec->isInitialized = true; + } + + hDecoderConfig = hIvasDec->st_ivas->hDecoderConfig; + + hIvasDec->Opt_VOIP = 1; + hIvasDec->st_ivas->hSCE[0]->hCoreCoder[0]->codec_mode = 0; + hDecoderConfig->nchan_out = 1; /* VoIP only supported in mono */ + if ( ( error = input_format_API_to_internal( inputFormat, &hIvasDec->bitstreamformat, &hIvasDec->sdp_hf_only, true ) ) != IVAS_ERR_OK ) + { + return error; + } + hIvasDec->hVoIP = count_malloc( sizeof( IVAS_DEC_VOIP ) ); + hIvasDec->hVoIP->lastDecodedWasActive = 0; + hIvasDec->hVoIP->nSamplesFrame = (uint16_t) ( hDecoderConfig->output_Fs / FRAMES_PER_SEC ); + + /* Copy updated configuration to core coder */ + + if ( hIvasDec->hVoIP == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate VoIP handle" ); + } + /* initialize JBM */ + if ( ( error = JB4_Create( &hIvasDec->hVoIP->hJBM ) != IVAS_ERR_OK ) != IVAS_ERR_OK ) + { + return error; + } + if ( JB4_Init( hIvasDec->hVoIP->hJBM, jbmSafetyMargin ) != 0 ) + { + return IVAS_ERR_FAILED_ALLOC; + } + + if ( hDecoderConfig->output_Fs == 8000 ) + { + wss = 1; + css = 1; + } + else if ( hDecoderConfig->output_Fs == 16000 ) + { + wss = 2; + css = 1; + } + else if ( hDecoderConfig->output_Fs == 32000 ) + { + wss = 4; + css = 2; + } + else if ( hDecoderConfig->output_Fs == 48000 ) + { + wss = 6; + css = 3; + } + else + { + return IVAS_ERR_INIT_ERROR; + } + + if ( apa_init( &hIvasDec->hVoIP->hTimeScaler ) != 0 || + apa_set_rate( hIvasDec->hVoIP->hTimeScaler, hDecoderConfig->output_Fs, hDecoderConfig->nchan_out ) != 0 || + apa_set_complexity_options( hIvasDec->hVoIP->hTimeScaler, wss, css ) != 0 || + apa_set_quality( hIvasDec->hVoIP->hTimeScaler, 1, 4, 4 ) != 0 || + pcmdsp_fifo_create( &hIvasDec->hVoIP->hFifoAfterTimeScaler ) != 0 || + pcmdsp_fifo_init( hIvasDec->hVoIP->hFifoAfterTimeScaler, (uint16_t) ( hDecoderConfig->output_Fs * 4 / FRAMES_PER_SEC ) /* 4 frames */, hDecoderConfig->nchan_out, sizeof( int16_t ) ) != 0 ) + { + return IVAS_ERR_INIT_ERROR; + } + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_FeedFrame_Serial( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_FeedFrame_Serial( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + uint16_t *serial, /* i : buffer containing serial input bitstream. Each bit should be stored as a single uint16_t value */ + const uint16_t num_bits, /* i : number of bits in input bitstream */ + const int16_t bfi /* i : bad frame indicator flag */ +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + + if ( !hIvasDec->isInitialized ) + { + /* Once first frame is fed, finish initialization in EVS Mono. + * In IVAS mode, initialization is done in ivas_dec(). */ + if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) + { + if ( ( error = ivas_init_decoder( hIvasDec->st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + hIvasDec->st_ivas->hDecoderConfig->ivas_total_brate = ACELP_8k00; + } + + hIvasDec->isInitialized = true; + } + + if ( !bfi ) + { + hIvasDec->hasBeenFedFirstGoodFrame = true; + } + + error = read_indices( hIvasDec->st_ivas, serial, num_bits, &hIvasDec->prev_ft_speech, &hIvasDec->CNG, bfi ); + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetSamples( ) + * + * Main function to decode to PCM data + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetSamples( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ + int16_t *nOutSamples /* o : number of samples written to output buffer */ +) +{ + Decoder_Struct *st_ivas; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + st_ivas = hIvasDec->st_ivas; + + *nOutSamples = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); + + if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) + { + if ( ( error = evs_dec_main( st_ivas, *nOutSamples, pcmBuf ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( hIvasDec->mode == IVAS_DEC_MODE_IVAS ) + { + /* run the main IVAS decoding routine */ + if ( ( error = ivas_dec( st_ivas, pcmBuf ) ) != IVAS_ERR_OK ) + { + return error; + } + + hIvasDec->isInitialized = true; /* Initialization done in ivas_dec() */ + } + + if ( hIvasDec->hasBeenFedFirstGoodFrame ) + { + hIvasDec->hasDecodedFirstGoodFrame = true; + } + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetNumObjects( ) + * + * Returns the number of objects available in the decoded bitstream + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetNumObjects( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + uint16_t *numObjects /* o : number of objects for which the decoder has been configured */ +) +{ + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hIvasDec->st_ivas->ivas_format == ISM_FORMAT ) + { + *numObjects = hIvasDec->st_ivas->hDecoderConfig->nchan_out; + } + else + { + *numObjects = 0; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetFormat( ) + * + * Returns the format of currently decoded bitstream. + * Note: bitstream format is only known after the first (good) frame has been decoded. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetFormat( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_BS_FORMAT *format /* o : format detected from bitstream fed to the decoder */ +) +{ + if ( hIvasDec->hasDecodedFirstGoodFrame ) + { + *format = mapIvasFormat( hIvasDec->st_ivas->ivas_format ); + } + else + { + *format = IVAS_DEC_BS_UNKOWN; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetNumOutputChannels( ) + * + * Returns number of output channels + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetNumOutputChannels( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *numOutputChannels /* o : number of PCM output channels */ +) +{ + if ( hIvasDec->hasDecodedFirstGoodFrame ) + { + *numOutputChannels = hIvasDec->st_ivas->hDecoderConfig->nchan_out; + } + else + { + *numOutputChannels = 0; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetObjectMetadata( ) + * + * Get metadata of one object decoded in the most recent frame + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetObjectMetadata( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_ISM_METADATA *metadata, /* o : struct where metadata decoded in most recently decoded frame will be written */ + const uint16_t zero_flag, /* i : if this flag is enabled, this function outputs a zero-initialized metadata struct */ + const uint16_t objectIdx /* i : index of the queried object */ +) +{ + Decoder_Struct *st_ivas; + ISM_METADATA_HANDLE hIsmMeta; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + st_ivas = hIvasDec->st_ivas; + + if ( st_ivas->ivas_format != ISM_FORMAT ) + { + return IVAS_ERR_WRONG_MODE; + } + + if ( objectIdx >= st_ivas->hDecoderConfig->nchan_out ) + { + return IVAS_ERR_INVALID_INDEX; + } + + hIsmMeta = st_ivas->hIsmMetaData[objectIdx]; + + if ( hIsmMeta == NULL || zero_flag ) + { + metadata->azimuth = 0.f; + metadata->elevation = 0.f; + metadata->radius = 0.f; + metadata->spread = 0.f; + metadata->gainFactor = 1.f; + } + else + { + metadata->azimuth = hIsmMeta->azimuth; + metadata->elevation = hIsmMeta->elevation; + metadata->radius = 0.f; + metadata->spread = 0.f; + metadata->gainFactor = 1.f; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetMasaMetadata( ) + * + * Get metadata of the most recently decoded MASA frame + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetMasaMetadata( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_MASA_QMETADATA_HANDLE *hMasaMetadata /* o : pointer to handle, which will be set to point to metadata from the most recently decoded frame */ +) +{ + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hIvasDec->st_ivas->ivas_format != MASA_FORMAT ) + { + return IVAS_ERR_WRONG_MODE; + } + + *hMasaMetadata = hIvasDec->st_ivas->hQMetaData; + + return IVAS_ERR_OK; +} + +/*---------------------------------------------------------------------* + * IVAS_DEC_FeedHeadTrackData( ) + * + * Feed the decoder with the head tracking data + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_FeedHeadTrackData( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_QUATERNION *orientation /* i : head-tracking data */ +) +{ + HEAD_TRACK_DATA_HANDLE hHeadTrackData; + int16_t i; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + hHeadTrackData = hIvasDec->st_ivas->hHeadTrackData; + + if ( hHeadTrackData == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + /* Move head-tracking data to the decoder handle */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hHeadTrackData->Quaternions[i].w = orientation[i].w; + hHeadTrackData->Quaternions[i].x = orientation[i].x; + hHeadTrackData->Quaternions[i].y = orientation[i].y; + hHeadTrackData->Quaternions[i].z = orientation[i].z; + } + + hIvasDec->st_ivas->hHeadTrackData->num_quaternions = 0; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_FeedCustomLsData( ) + * + * Feed the decoder with the Custom loudspeaker data + *---------------------------------------------------------------------*/ + +/*! r: error code */ +ivas_error IVAS_DEC_FeedCustomLsData( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_CUSTOM_LS_DATA hLsCustomData /* i : Custom loudspeaker setup data */ +) +{ + int16_t i, is_planar; + IVAS_LSSETUP_CUSTOM_HANDLE hLsSetupCustom; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + hLsSetupCustom = hIvasDec->st_ivas->hLsSetupCustom; + + if ( hLsSetupCustom == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + /* Move Custom LS layout data to the decoder handle */ + + /* Loudspeaker azimuths and elevations */ + hLsSetupCustom->num_spk = hLsCustomData.num_spk; + + mvr2r( hLsCustomData.azimuth, hLsSetupCustom->ls_azimuth, hLsCustomData.num_spk ); + mvr2r( hLsCustomData.elevation, hLsSetupCustom->ls_elevation, hLsCustomData.num_spk ); + + /* Set planar flag */ + is_planar = 1; + for ( i = 0; i < hLsCustomData.num_spk; i++ ) + { + if ( is_planar && hLsSetupCustom->ls_elevation[i] != 0.0f ) + { + is_planar = 0; + } + } + hLsSetupCustom->is_planar_setup = is_planar; + + /* Loudspeaker LFE */ + hLsSetupCustom->num_lfe = hLsCustomData.num_lfe; + mvs2s( hLsCustomData.lfe_idx, hLsSetupCustom->lfe_idx, hLsCustomData.num_lfe ); + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetHrtfHandle( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetHrtfHandle( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_HANDLE *hHrtfTD /* o : HRTF handle */ +) +{ + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfTD == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + *hHrtfTD = hIvasDec->st_ivas->hHrtfTD; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetRenderConfig( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetRenderConfig( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ +) +{ + RENDER_CONFIG_HANDLE hRCin; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hRenderConfig == NULL || hRCout == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + hRCin = hIvasDec->st_ivas->hRenderConfig; +#ifdef DEBUGGING + hRCout->renderer_type_override = hRCin->renderer_type_override; +#endif + hRCout->room_acoustics.override = hRCin->roomAcoustics.override; + hRCout->room_acoustics.use_brir = hRCin->roomAcoustics.use_brir; + hRCout->room_acoustics.late_reverb_on = hRCin->roomAcoustics.late_reverb_on; + hRCout->room_acoustics.nBands = hRCin->roomAcoustics.nBands; + hRCout->room_acoustics.acousticPreDelay = hRCin->roomAcoustics.acousticPreDelay; + hRCout->room_acoustics.inputPreDelay = hRCin->roomAcoustics.inputPreDelay; + + mvr2r( hRCin->roomAcoustics.pFc_input, hRCout->room_acoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); + mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->room_acoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); + mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->room_acoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_FeedRenderConfig( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_FeedRenderConfig( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ +) +{ + RENDER_CONFIG_HANDLE hRenderConfig; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hRenderConfig == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + hRenderConfig = hIvasDec->st_ivas->hRenderConfig; +#ifdef DEBUGGING + hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_NONE; + if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV ) + { + hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_FASTCONV; + } + if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_CREND ) + { + hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_CREND; + } +#endif + hRenderConfig->roomAcoustics.override = renderConfig.room_acoustics.override; + hRenderConfig->roomAcoustics.use_brir = renderConfig.room_acoustics.use_brir; + hRenderConfig->roomAcoustics.late_reverb_on = renderConfig.room_acoustics.late_reverb_on; + hRenderConfig->roomAcoustics.nBands = renderConfig.room_acoustics.nBands; + hRenderConfig->roomAcoustics.acousticPreDelay = renderConfig.room_acoustics.acousticPreDelay; + hRenderConfig->roomAcoustics.inputPreDelay = renderConfig.room_acoustics.inputPreDelay; + mvr2r( renderConfig.room_acoustics.pFc_input, hRenderConfig->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); + mvr2r( renderConfig.room_acoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); + mvr2r( renderConfig.room_acoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetDelay( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetDelay( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *nSamples, /* o : decoder delay in samples */ + int32_t *timeScale /* o : time scale of the delay, equal to decoder output sampling rate */ +) +{ + Decoder_Struct *st_ivas; + DECODER_CONFIG_HANDLE hDecoderConfig; + + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || nSamples == NULL || timeScale == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + st_ivas = hIvasDec->st_ivas; + hDecoderConfig = st_ivas->hDecoderConfig; + + *nSamples = NS2SA( hDecoderConfig->output_Fs, (int32_t) ( get_delay( DEC, hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->cldfbAnaDec[0], st_ivas->renderer_type, st_ivas->binaural_latency_ns ) + 0.5f ) ); + + *timeScale = hDecoderConfig->output_Fs; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_HasDecodedFirstGoodFrame( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_HasDecodedFirstGoodFrame( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + bool *hasDecodedFirstGoodFrame /* o : flag indicating if the decoder has decoded a good frame since it was configured */ +) +{ + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hasDecodedFirstGoodFrame == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + *hasDecodedFirstGoodFrame = hIvasDec->hasDecodedFirstGoodFrame; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetPcmFrameSize( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetPcmFrameSize( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int32_t *pcmFrameSize /* o : total size of the PCM output frame. This takes into account the number of output channels */ +) +{ + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || pcmFrameSize == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hIvasDec->hasDecodedFirstGoodFrame ) + { + *pcmFrameSize = hIvasDec->st_ivas->hDecoderConfig->nchan_out * hIvasDec->st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC; + } + else + { + *pcmFrameSize = 0; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * isSidFrame( ) + * + * Check if a frame contains a SID + *---------------------------------------------------------------------*/ + +static bool isSidFrame( + const uint16_t size ) +{ + if ( size == SID_1k75 / FRAMES_PER_SEC ) + { + return true; /* AMR-WB SID */ + } + else if ( size == SID_2k40 / FRAMES_PER_SEC ) + { + return true; /* EVS SID */ + } + else if ( size == IVAS_SID_4k4 / FRAMES_PER_SEC ) + { + return true; /* IVAS SID */ + } + + return false; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_VoIP_FeedFrame( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_VoIP_FeedFrame( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + uint8_t *au, /* i : buffer containing input access unit */ + const uint16_t auSize, /* i : size of the access unit */ + const uint16_t rtpSequenceNumber, /* i : RTP sequence number (16 bits) */ + const uint32_t rtpTimeStamp, /* i : RTP timestamp (32 bits) */ + const uint32_t rcvTime_ms, /* i : receive time of the RTP packet in milliseconds */ + const bool isAMRWB_IOmode, /* i : AMRWB flag */ + const uint16_t frameTypeIndex, /* i : core mode for frame */ + const bool qBit /* i : Q bit for AMR-WB IO */ +) +{ + JB4_DATAUNIT_HANDLE dataUnit; + int16_t partialCopyFrameType, partialCopyOffset; + int16_t result; + + if ( auSize == 0 ) + { + return IVAS_ERR_OK; /* ignore empty/NO_DATA frame - shouldn't be transmitted in RTP */ + } + if ( ( auSize + 7 ) / 8 > MAX_AU_SIZE ) + { + return IVAS_ERR_INVALID_BITSTREAM; + } + + /* check if frame contains a partial copy and get its offset */ + evs_dec_previewFrame( au, auSize, &partialCopyFrameType, &partialCopyOffset ); + + /* create data unit for primary copy in the frame */ + dataUnit = JB4_AllocDataUnit( hIvasDec->hVoIP->hJBM ); + mvc2c( au, dataUnit->data, (int16_t) ( ( auSize + 7 ) / 8 ) ); + dataUnit->dataSize = auSize; + dataUnit->duration = 20; + dataUnit->sequenceNumber = rtpSequenceNumber; + dataUnit->silenceIndicator = isSidFrame( dataUnit->dataSize ); + dataUnit->timeScale = 1000; + dataUnit->rcvTime = rcvTime_ms; + dataUnit->timeStamp = rtpTimeStamp; + dataUnit->partial_frame = 0; + dataUnit->partialCopyOffset = partialCopyOffset; + dataUnit->isAMRWB_IOmode = isAMRWB_IOmode; + dataUnit->frameTypeIndex = frameTypeIndex; + dataUnit->qBit = qBit; + + /* add the frame to the JBM */ + result = JB4_PushDataUnit( hIvasDec->hVoIP->hJBM, dataUnit, rcvTime_ms ); + if ( result != 0 ) + { + return IVAS_ERR_UNKNOWN; + } + + if ( partialCopyFrameType != RF_NO_DATA && partialCopyOffset != 0 ) + { + /* create data unit for partial copy in the frame */ + dataUnit = JB4_AllocDataUnit( hIvasDec->hVoIP->hJBM ); + mvc2c( au, dataUnit->data, (int16_t) ( ( auSize + 7 ) / 8 ) ); + dataUnit->dataSize = auSize; + dataUnit->duration = 20; + dataUnit->sequenceNumber = rtpSequenceNumber; + dataUnit->silenceIndicator = 0; /* there are no partial copies for SID frames */ + dataUnit->timeScale = 1000; + dataUnit->rcvTime = rcvTime_ms; + dataUnit->timeStamp = rtpTimeStamp - partialCopyOffset * dataUnit->duration; + dataUnit->partial_frame = 1; + dataUnit->partialCopyOffset = partialCopyOffset; + dataUnit->isAMRWB_IOmode = isAMRWB_IOmode; + dataUnit->frameTypeIndex = frameTypeIndex; + dataUnit->qBit = qBit; + + /* add the frame to the JBM */ + result = JB4_PushDataUnit( hIvasDec->hVoIP->hJBM, dataUnit, rcvTime_ms ); + if ( result != 0 ) + { + return IVAS_ERR_UNKNOWN; + } + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_VoIP_GetSamples( ) + * + * Main function to decode one frame in VoIP + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_VoIP_GetSamples( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *nOutSamples, /* o : number of samples written to output buffer */ + int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ + const uint32_t pcmBufSize, /* i : size of the PCM output buffer */ + const uint32_t systemTimestamp_ms /* i : current system timestamp */ +) +{ + Decoder_Struct *st_ivas; + DECODER_CONFIG_HANDLE hDecoderConfig; + Decoder_State *st; + IVAS_DEC_VOIP *hVoIP; + uint32_t extBufferedTime_ms, scale, maxScaling; + uint16_t nTimeScalerOutSamples; + JB4_DATAUNIT_HANDLE dataUnit; + uint16_t bit_stream[MAX_BITS_PER_FRAME + 4 * 8]; + int16_t nOutSamplesElse; + uint16_t soundCardFrameSize; + uint16_t extBufferedSamples; + int16_t timeScalingDone; + int16_t result; + ivas_error error; + + error = IVAS_ERR_OK; + + st_ivas = hIvasDec->st_ivas; + hDecoderConfig = st_ivas->hDecoderConfig; + st = st_ivas->hSCE[0]->hCoreCoder[0]; + hVoIP = hIvasDec->hVoIP; + soundCardFrameSize = hVoIP->nSamplesFrame; + timeScalingDone = 0; + + assert( hVoIP->nSamplesFrame <= pcmBufSize ); + assert( hVoIP->nSamplesFrame <= APA_BUF ); + + st_ivas->hSCE[0]->hCoreCoder[0]->bit_stream = bit_stream; + + /* make sure that the FIFO after decoder/scaler contains at least one sound card frame (i.e. 20ms) */ + while ( pcmdsp_fifo_nReadableSamples( hVoIP->hFifoAfterTimeScaler ) < soundCardFrameSize ) + { + extBufferedSamples = pcmdsp_fifo_nReadableSamples( hVoIP->hFifoAfterTimeScaler ); + extBufferedTime_ms = extBufferedSamples * 1000 / hDecoderConfig->output_Fs; + dataUnit = NULL; + /* pop one access unit from the jitter buffer */ + result = JB4_PopDataUnit( hVoIP->hJBM, systemTimestamp_ms, extBufferedTime_ms, &dataUnit, &scale, &maxScaling ); + if ( result != 0 ) + { + return IVAS_ERR_UNKNOWN; + } + + maxScaling = maxScaling * hDecoderConfig->output_Fs / 1000; + /* avoid time scaling multiple times in one sound card slot */ + if ( scale != 100U ) + { + if ( timeScalingDone ) + { + scale = 100; + } + else + { + timeScalingDone = 1; + } + } + + /* copy bitstream into decoder state */ + if ( dataUnit ) + { + if ( st->codec_mode != 0 ) + { + read_indices_from_djb( st, dataUnit->data, &hIvasDec->CNG, dataUnit->dataSize, + dataUnit->isAMRWB_IOmode, dataUnit->frameTypeIndex, dataUnit->qBit, hIvasDec->bitstreamformat, hIvasDec->amrwb_rfc4867_flag, + ( dataUnit->partial_frame == TRUE ) ? 1 : 0, dataUnit->nextCoderType ); + + if ( dataUnit->partial_frame != 0 ) + { + st->codec_mode = MODE2; + st->use_partial_copy = 1; + } + } + else /* initialize decoder with first received frame */ + { + /* initialize, since this is needed within read_indices_from_djb, to correctly set st->last_codec_mode */ + st->ini_frame = 0; + st->prev_use_partial_copy = 0; + st_ivas->hDecoderConfig->ivas_total_brate = dataUnit->dataSize * FRAMES_PER_SEC; + + read_indices_from_djb( st, dataUnit->data, &hIvasDec->CNG, dataUnit->dataSize, + dataUnit->isAMRWB_IOmode, dataUnit->frameTypeIndex, dataUnit->qBit, hIvasDec->bitstreamformat, hIvasDec->amrwb_rfc4867_flag, + 0, 0 ); + } + } + else if ( st->codec_mode != 0 ) + { + read_indices_from_djb( st, NULL, &hIvasDec->CNG, 0, + 0, 0, 0, hIvasDec->bitstreamformat, 0, + 0, 0 ); + } + + /* decode */ + if ( st->codec_mode == 0 ) + { + /* codec mode to use not known yet */ + set_s( pcmBuf, 0, hVoIP->nSamplesFrame ); + } + else + { + if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) + { + /* Update total bitrate after reading indices */ + hIvasDec->st_ivas->hDecoderConfig->ivas_total_brate = st->total_brate; + } + + if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamplesElse ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( dataUnit ) + { + if ( dataUnit->partial_frame != 0 ) + { + hVoIP->lastDecodedWasActive = 1; + } + else + { + hVoIP->lastDecodedWasActive = !dataUnit->silenceIndicator; + } + /* data unit memory is no longer used */ + JB4_FreeDataUnit( hVoIP->hJBM, dataUnit ); + } + + /* limit scale to range supported by time scaler */ + if ( scale < APA_MIN_SCALE ) + { + scale = APA_MIN_SCALE; + } + else if ( scale > APA_MAX_SCALE ) + { + scale = APA_MAX_SCALE; + } + + /* apply time scaling on decoded/concealed samples */ + if ( apa_set_scale( hVoIP->hTimeScaler, (uint16_t) scale ) != 0 ) + { + return IVAS_ERR_UNKNOWN; + } + result = apa_exec( hVoIP->hTimeScaler, pcmBuf, (uint16_t) ( hVoIP->nSamplesFrame * hDecoderConfig->nchan_out ), (uint16_t) maxScaling, pcmBuf, &nTimeScalerOutSamples ); + if ( result != 0 ) + { + return IVAS_ERR_UNKNOWN; + } + assert( nTimeScalerOutSamples <= pcmBufSize ); + assert( nTimeScalerOutSamples <= APA_BUF ); + + /* append scaled samples to FIFO */ + if ( pcmdsp_fifo_write( hVoIP->hFifoAfterTimeScaler, (uint8_t *) pcmBuf, (uint16_t) ( nTimeScalerOutSamples / hDecoderConfig->nchan_out ) ) != 0 ) + { + return IVAS_ERR_UNKNOWN; + } + +#ifdef SUPPORT_JBM_TRACEFILE + /* store JBM trace data entry */ + store_JbmData( hVoIP, dataUnit, systemTimestamp_ms, extBufferedSamples, hDecoderConfig->output_Fs ); +#endif + } + + /* fetch one frame for the sound card from FIFO */ + *nOutSamples = (int16_t) soundCardFrameSize; + if ( pcmdsp_fifo_read( hVoIP->hFifoAfterTimeScaler, *nOutSamples, (uint8_t *) pcmBuf ) != 0 ) + { + return IVAS_ERR_UNKNOWN; + } + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_VoIP_IsEmpty( ) + * + * + *---------------------------------------------------------------------*/ + +bool IVAS_DEC_VoIP_IsEmpty( + IVAS_DEC_HANDLE hIvasDec /* i/o: IVAS decoder handle */ +) +{ + return JB4_bufferedDataUnits( hIvasDec->hVoIP->hJBM ) == 0; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_VoIP_Get_CA_offset( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_VoIP_Get_CA_offset( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *optimum_offset, + int16_t *FEC_hi ) +{ + if ( hIvasDec == NULL || hIvasDec->hVoIP == NULL || hIvasDec->hVoIP->hJBM == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + *optimum_offset = JB4_getFECoffset( hIvasDec->hVoIP->hJBM ); + *FEC_hi = JB4_FECoffset( hIvasDec->hVoIP->hJBM ); + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_Close_VoIP( ) + * + * + *---------------------------------------------------------------------*/ + +static void IVAS_DEC_Close_VoIP( + IVAS_DEC_VOIP *hVoIP /* i/o: IVAS decoder handle */ +) +{ + JB4_Destroy( &hVoIP->hJBM ); + + apa_exit( &hVoIP->hTimeScaler ); + + pcmdsp_fifo_destroy( &hVoIP->hFifoAfterTimeScaler ); + + return; +} + + +#ifdef SUPPORT_JBM_TRACEFILE +/*---------------------------------------------------------------------* + * store_JbmData() + * + * Store JBM trace data entry + *---------------------------------------------------------------------*/ + +static void store_JbmData( + IVAS_DEC_VOIP *hVoIP, + JB4_DATAUNIT_HANDLE dataUnit, + const uint32_t systemTimestamp_ms, + const uint16_t extBufferedSamples, + const int32_t output_Fs ) +{ + IVAS_JBM_TRACE_DATA *JbmTraceData; + + if ( hVoIP == NULL ) + { + return; + } + + JbmTraceData = &hVoIP->JbmTraceData; + + /* the first sample of the decoded/concealed frame will be played after the samples in the ring buffer */ + JbmTraceData->playTime = systemTimestamp_ms + extBufferedSamples * 1000.0 / output_Fs; + + /* rtpSeqNo;rtpTs;rcvTime;playTime;active\n */ + if ( dataUnit ) + { + JbmTraceData->sequenceNumber = dataUnit->sequenceNumber; + JbmTraceData->partialCopyOffset = dataUnit->partialCopyOffset; + JbmTraceData->timeStamp = dataUnit->timeStamp; + JbmTraceData->rcvTime = dataUnit->rcvTime; + JbmTraceData->lastDecodedWasActive = hVoIP->lastDecodedWasActive; + + JbmTraceData->dataUnit_flag = 1; + if ( dataUnit->partial_frame == 1 ) + { + JbmTraceData->partial_frame_flag = 1; + } + else + { + JbmTraceData->partial_frame_flag = 0; + } + } + else + { + JbmTraceData->dataUnit_flag = 0; + } + + return; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetJbmData() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetJbmData( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_JBM_TRACE_DATA *JbmTraceData /* o : JBM Trace data */ + +) +{ + if ( hIvasDec->hVoIP == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + *JbmTraceData = hIvasDec->hVoIP->JbmTraceData; + + return IVAS_ERR_OK; +} + +#endif + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetErrorMessage( ) + * + * Maps error codes to error description strings + *---------------------------------------------------------------------*/ + +const char *IVAS_DEC_GetErrorMessage( + ivas_error error /* i : decoder error code enum */ +) +{ + switch ( error ) + { + case IVAS_ERR_OK: + return "no error"; + case IVAS_ERR_FAILED_ALLOC: + return "Failed allocation error"; + case IVAS_ERR_WRONG_PARAMS: + return "wrong parameters"; + case IVAS_ERR_INIT_ERROR: + return "initialization error"; + case IVAS_ERR_INVALID_BITSTREAM: + return "Invalid bitstream"; + case IVAS_ERR_DECODER_ERROR: + return "decoder error"; + case IVAS_ERR_WRONG_MODE: + return "wrong mode"; + case IVAS_ERR_INVALID_OUTPUT_FORMAT: + return "invalid output format"; + case IVAS_ERR_INVALID_SAMPLING_RATE: + return "invalid sampling rate"; + case IVAS_ERR_HEAD_ROTATION_NOT_SUPPORTED: + return "head rotation not supported"; + case IVAS_ERR_INVALID_HRTF: + return "Not supported HRTF filter set"; + case IVAS_ERR_INVALID_INPUT_FORMAT: + return "invalid format of input bitstream"; + case IVAS_ERR_INVALID_INDEX: + return "invalid index"; +#ifdef DEBUGGING + case IVAS_ERR_INVALID_FORCE_MODE: + return "invalid force mode"; +#endif + case IVAS_ERR_NOT_IMPLEMENTED: + return "not implemented"; + case IVAS_ERR_UNKNOWN: + default: + break; + } + + return "unknown error"; +} + + +/*---------------------------------------------------------------------* + * get_channel_config() + * + * Gets a str related to input config + *---------------------------------------------------------------------*/ + +static ivas_error get_channel_config( + AUDIO_CONFIG config, + char *str ) +{ + + if ( config == AUDIO_CONFIG_MONO ) + { + strcpy( str, "Mono" ); + } + else if ( config == AUDIO_CONFIG_STEREO ) + { + strcpy( str, "Stereo" ); + } + else if ( config == AUDIO_CONFIG_5_1 ) + { + strcpy( str, "Multichannel 5.1 (CICP6)" ); + } + else if ( config == AUDIO_CONFIG_7_1 ) + { + strcpy( str, "Multichannel 7.1 (CICP12)" ); + } + else if ( config == AUDIO_CONFIG_5_1_2 ) + { + strcpy( str, "Multichannel 5.1+2 (CICP14)" ); + } + else if ( config == AUDIO_CONFIG_5_1_4 ) + { + strcpy( str, "Multichannel 5.1+4 (CICP16)" ); + } + else if ( config == AUDIO_CONFIG_7_1_4 ) + { + strcpy( str, "Multichannel 7.1+4 (CICP19)" ); + } + else if ( config == AUDIO_CONFIG_LS_CUSTOM ) + { + strcpy( str, "Multichannel (custom loudspeaker layout)" ); + } + else if ( config == AUDIO_CONFIG_FOA ) + { + strcpy( str, "Ambisonics: First Order (FOA)" ); + } + else if ( config == AUDIO_CONFIG_HOA2 ) + { + strcpy( str, "Ambisonics: Second Order (HOA2)" ); + } + else if ( config == AUDIO_CONFIG_HOA3 ) + { + strcpy( str, "Ambisonics: Third Order (HOA3)" ); + } + else if ( config == AUDIO_CONFIG_BINAURAL ) + { + strcpy( str, "Binaural" ); + } + else if ( config == AUDIO_CONFIG_BINAURAL_ROOM ) + { + strcpy( str, "Binaural_ROOM" ); + } + else if ( config == AUDIO_CONFIG_EXTERNAL ) + { + strcpy( str, "External renderer" ); + } + else + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Error: Incorrect Input/Output Configuration" ); + } + + return IVAS_ERR_OK; +} + +/*---------------------------------------------------------------------* + * printConfigInfo_dec( ) + * + * + *---------------------------------------------------------------------*/ + +static ivas_error printConfigInfo_dec( + Decoder_Struct *st_ivas, + const int16_t bitstreamformat, + const bool Opt_VOIP, + const bool quietModeEnabled ) +{ + ivas_error error; + char config_str[50]; + + /*-----------------------------------------------------------------* + * Print info on screen + *-----------------------------------------------------------------*/ + + fprintf( stdout, "\n" ); + + /*-----------------------------------------------------------------* + * Print output sampling frequency + *-----------------------------------------------------------------*/ + + fprintf( stdout, "Output sampling rate: %d Hz\n", st_ivas->hDecoderConfig->output_Fs ); + + /*-----------------------------------------------------------------* + * Print bitrate + *-----------------------------------------------------------------*/ + + if ( !quietModeEnabled ) + { + if ( !Opt_VOIP ) + { + fprintf( stdout, "Bitrate: %.2f kbps\n", (float) st_ivas->hDecoderConfig->ivas_total_brate / 1000 ); + + if ( st_ivas->hDecoderConfig->ivas_total_brate <= 0 ) + { + if ( bitstreamformat == G192 ) + { + fprintf( stdout, "Active Bitrate not identified in bitstream file \n" ); + } + else /* MIME */ + { + fprintf( stdout, "Active Bitrate not identified from first MIME frame \n" ); + } + } + } + } + + /*-----------------------------------------------------------------* + * Print number of output configuration + *-----------------------------------------------------------------*/ + + if ( st_ivas->ivas_format == MONO_FORMAT ) + { + fprintf( stdout, "Output configuration: mono EVS bit-exact decoding\n" ); + } + else + { + if ( !quietModeEnabled ) + { + if ( st_ivas->ivas_format == STEREO_FORMAT ) + { + fprintf( stdout, "Input configuration: Stereo\n" ); + } + else if ( st_ivas->ivas_format == ISM_FORMAT ) + { + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + fprintf( stdout, "Input configuration: ISM (ParamISM): 2 transport channels\n" ); + } + else + { + fprintf( stdout, "Input configuration: ISM: %d transport channel(s)\n", st_ivas->nchan_transport ); + } + } + else if ( st_ivas->ivas_format == SBA_FORMAT ) + { + fprintf( stdout, "Input configuration: SBA - %d transport channel(s) %s\n", st_ivas->nchan_transport, st_ivas->sba_planar ? "(Planar)" : "" ); + } + else if ( st_ivas->ivas_format == MASA_FORMAT ) + { + fprintf( stdout, "Input configuration: MASA - %d channel(s)\n", st_ivas->nchan_transport ); + } + else /* MC_FORMAT */ + { + if ( ( error = get_channel_config( st_ivas->transport_config, &config_str[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + + fprintf( stdout, "Input configuration: %s\n", config_str ); + } + } + get_channel_config( st_ivas->hDecoderConfig->output_config, &config_str[0] ); + fprintf( stdout, "Output configuration: %s\n", config_str ); + + if ( st_ivas->hDecoderConfig->Opt_Headrotation ) + { + fprintf( stdout, "Head rotation: ON\n" ); + } + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_PrintConfig( ) + * + * Print decoder set-up info + *---------------------------------------------------------------------*/ + +void IVAS_DEC_PrintConfig( + const IVAS_DEC_HANDLE hIvasDec, + const bool quietModeEnabled, + const bool voipMode ) +{ + printConfigInfo_dec( hIvasDec->st_ivas, hIvasDec->bitstreamformat, voipMode, quietModeEnabled ); + + return; +} + + +#ifdef DEBUGGING +void IVAS_DEC_PrintConfigWithBitstream( + IVAS_DEC_HANDLE hIvasDec, + const bool quietModeEnabled, + uint16_t bit_stream[], + const int16_t num_bits ) +{ + Decoder_Struct *st_ivas; + + /* Create a copy of decoder struct that will be modified by preview_indices(), + * leaving the original decoder struct unchanged. The additional memory used here + * should not be counted towards memory footprint of the decoder. */ + st_ivas = dynamic_malloc( sizeof( Decoder_Struct ) ); + memcpy( st_ivas, hIvasDec->st_ivas, sizeof( Decoder_Struct ) ); + + preview_indices( st_ivas, bit_stream, num_bits ); + + /* Print config from modified decoder struct */ + printConfigInfo_dec( st_ivas, hIvasDec->bitstreamformat, hIvasDec->Opt_VOIP, quietModeEnabled ); + + dynamic_free( st_ivas ); + + return; +} +#endif + +void IVAS_DEC_PrintDisclaimer( void ) +{ + print_disclaimer( stderr ); + + return; +} + + +/*---------------------------------------------------------------------* + * evs_dec_main( ) + * + * EVS codec main decoder fucntion + *---------------------------------------------------------------------*/ + +static ivas_error evs_dec_main( + Decoder_Struct *st_ivas, + const int16_t nOutSamples, + int16_t *pcmBuf ) +{ + DEC_CORE_HANDLE *hCoreCoder; + float output[L_FRAME48k]; + ivas_error error; + + error = IVAS_ERR_OK; + + hCoreCoder = st_ivas->hSCE[0]->hCoreCoder; + hCoreCoder[0]->total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + + mdct_switching_dec( hCoreCoder[0] ); + + /* run the main EVS decoding routine */ + if ( hCoreCoder[0]->codec_mode == MODE1 ) + { + if ( hCoreCoder[0]->Opt_AMR_WB ) + { + if ( ( error = amr_wb_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], output ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], output, FRAMEMODE_NORMAL ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else + { + if ( hCoreCoder[0]->bfi == 0 ) + { + if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], output, FRAMEMODE_NORMAL ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( hCoreCoder[0]->bfi == 2 ) + { + if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], output, FRAMEMODE_FUTURE ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], output, FRAMEMODE_MISSING ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + st_ivas->BER_detect = hCoreCoder[0]->BER_detect; + + /* convert 'float' output data to 'short' */ +#ifdef DEBUGGING + st_ivas->noClipping += +#endif + syn_output( output, nOutSamples, pcmBuf ); + + return error; +} + + +#ifdef DEBUGGING + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetBer_detect_flag() + * + * return BER_detect flag + *---------------------------------------------------------------------*/ + +bool IVAS_DEC_GetBerDetectFlag( + IVAS_DEC_HANDLE hIvasDec /* i : IVAS decoder handle */ +) +{ + if ( hIvasDec->st_ivas->BER_detect == 1 ) + { + return 1; + } + else + { + return 0; + } +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetNoCLipping() + * + * return number of clipped samples + *---------------------------------------------------------------------*/ + +int32_t IVAS_DEC_GetNoCLipping( + IVAS_DEC_HANDLE hIvasDec /* i : IVAS decoder handle */ +) +{ + return hIvasDec->st_ivas->noClipping; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_GetCntFramesLimited() + * + * return number of frames where limiter is applied + *---------------------------------------------------------------------*/ + +int32_t IVAS_DEC_GetCntFramesLimited( + IVAS_DEC_HANDLE hIvasDec /* i : IVAS decoder handle */ +) +{ + if ( hIvasDec->st_ivas->hLimiter == NULL ) + { + return 0; + } + else + { + return hIvasDec->st_ivas->hLimiter->cnt_frames_limited; + } +} + + +/*---------------------------------------------------------------------* + * forcedRendModeApiToInternalDec() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error forcedRendModeApiToInternalDec( + const IVAS_DEC_FORCED_REND_MODE forcedRendMode, + int16_t *forcedModeInternal ) +{ + switch ( forcedRendMode ) + { + case IVAS_DEC_FORCE_REND_TD_RENDERER: + *forcedModeInternal = FORCE_TD_RENDERER; + break; + case IVAS_DEC_FORCE_REND_CLDFB_RENDERER: + *forcedModeInternal = FORCE_CLDFB_RENDERER; + break; + case IVAS_DEC_FORCE_REND_UNFORCED: + *forcedModeInternal = -1; + break; + default: + return IVAS_ERR_INVALID_FORCE_MODE; + break; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_DEC_SetForcedRendMode() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_SetForcedRendMode( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_DEC_FORCED_REND_MODE forcedRendMode /* i : forced renderer mode */ +) +{ + int16_t newForcedRend; + ivas_error error; + + if ( ( error = forcedRendModeApiToInternalDec( forcedRendMode, &newForcedRend ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hIvasDec->st_ivas->hDecoderConfig->force_rend != newForcedRend ) + { + hIvasDec->st_ivas->hDecoderConfig->force_rend = newForcedRend; + } + + return IVAS_ERR_OK; +} + +#endif /* DEBUGGING */ + +static ivas_error input_format_API_to_internal( + IVAS_DEC_INPUT_FORMAT input_format, + int16_t *bitstream_format_internal, + int16_t *sdp_hf_only, + const bool is_voip_enabled ) +{ + switch ( input_format ) + { + case IVAS_DEC_INPUT_FORMAT_G192: + *bitstream_format_internal = is_voip_enabled ? VOIP_G192_RTP : G192; + *sdp_hf_only = 0; + break; + case IVAS_DEC_INPUT_FORMAT_MIME: + *bitstream_format_internal = MIME; + *sdp_hf_only = 0; + break; + case IVAS_DEC_INPUT_FORMAT_RTPDUMP: + assert( is_voip_enabled && "RTP dump only supported in VoIP mode" ); + *bitstream_format_internal = VOIP_RTPDUMP; + *sdp_hf_only = 0; + break; + case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF: + assert( is_voip_enabled && "RTP dump only supported in VoIP mode" ); + *bitstream_format_internal = VOIP_RTPDUMP; + *sdp_hf_only = 1; + break; + default: + return IVAS_ERR_INVALID_INPUT_FORMAT; + break; + } + + return IVAS_ERR_OK; +} diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h new file mode 100644 index 0000000000..b4221c142c --- /dev/null +++ b/lib_dec/lib_dec.h @@ -0,0 +1,350 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef LIB_DEC_H +#define LIB_DEC_H + +#include "common_api_types.h" +#include "ivas_error.h" +#include +#include + + +/*---------------------------------------------------------------------* + * Decoder enums + *---------------------------------------------------------------------*/ + +/* output formats generated by the decoder */ +typedef enum _IVAS_DEC_OUTPUT_CONFIG +{ + IVAS_DEC_OUTPUT_MONO = 0x0001, + IVAS_DEC_OUTPUT_STEREO, + IVAS_DEC_OUTPUT_5_1, + IVAS_DEC_OUTPUT_7_1, + IVAS_DEC_OUTPUT_5_1_2, + IVAS_DEC_OUTPUT_5_1_4, + IVAS_DEC_OUTPUT_7_1_4, + IVAS_DEC_OUTPUT_LS_CUSTOM, + IVAS_DEC_OUTPUT_FOA, + IVAS_DEC_OUTPUT_HOA2, + IVAS_DEC_OUTPUT_HOA3, + IVAS_DEC_OUTPUT_BINAURAL, + IVAS_DEC_OUTPUT_BINAURAL_ROOM, + IVAS_DEC_OUTPUT_EXT, + IVAS_DEC_OUTPUT_UNKNOWN = 0xffff +} IVAS_DEC_AUDIO_CONFIG; + +/* mode the decoder is operating in */ +typedef enum _IVAS_DEC_MODE +{ + IVAS_DEC_MODE_EVS = 0x0001, + IVAS_DEC_MODE_IVAS +} IVAS_DEC_MODE; + +typedef enum +{ + IVAS_DEC_INPUT_FORMAT_UNDEF = 0, + IVAS_DEC_INPUT_FORMAT_G192 = 1, + IVAS_DEC_INPUT_FORMAT_MIME = 2, + IVAS_DEC_INPUT_FORMAT_RTPDUMP = 3, + IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF = 4, /* RTP payload: only Header-Full format without zero padding for size collision avoidance */ +} IVAS_DEC_INPUT_FORMAT; + +#ifdef DEBUGGING +typedef enum _IVAS_DEC_FORCED_REND_MODE +{ + IVAS_DEC_FORCE_REND_CLDFB_RENDERER, + IVAS_DEC_FORCE_REND_TD_RENDERER, + IVAS_DEC_FORCE_REND_UNFORCED, + IVAS_DEC_FORCE_REND_UNDEFINED = 0xffff +} IVAS_DEC_FORCED_REND_MODE; +#endif + +/* bitstream formats that can be consumed */ +typedef enum _IVAS_DEC_BS_FORMAT +{ + IVAS_DEC_BS_MONO = 0x0001, /* EVS-compatible mono bitstream */ + IVAS_DEC_BS_STEREO, + IVAS_DEC_BS_MC, + IVAS_DEC_BS_SBA, + IVAS_DEC_BS_OBJ, + IVAS_DEC_BS_MASA, + IVAS_DEC_BS_UNKOWN = 0xffff +} IVAS_DEC_BS_FORMAT; + +typedef struct IVAS_DEC *IVAS_DEC_HANDLE; + + +/* clang-format off */ +/*---------------------------------------------------------------------* + * Decoder function declarations + *---------------------------------------------------------------------*/ + +/* Open, configure, close functions - should be called once per decoder lifetime */ + +/*! r: error code */ +ivas_error IVAS_DEC_Open( + IVAS_DEC_HANDLE *phIvasDec, /* i/o: pointer to an IVAS decoder handle to be opened */ + IVAS_DEC_MODE mode, /* i : compatibility mode (EVS or IVAS) */ + const int16_t orientation_tracking, /* i : orientation tracking type */ + float no_diegetic_pan +); + +/*! r: error code */ +ivas_error IVAS_DEC_Configure( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const uint32_t sampleRate, /* i : output sampling frequency */ + const IVAS_DEC_AUDIO_CONFIG outputFormat, /* i : output format */ + const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ + const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ + const int16_t enableHeadRotation /* i : enable head rotation for binaural output */ +#ifdef DEBUGGING + , + const int16_t forceSubframeBinauralization /* i : enable subframe binauralization */ +#endif +); + +void IVAS_DEC_Close( + IVAS_DEC_HANDLE *phIvasDec /* i/o: pointer to IVAS decoder handle */ +); + + +/* Decoding functions - should be called with a configured decoder handle */ + +/*! r: error code */ +ivas_error IVAS_DEC_FeedFrame_Serial( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + uint16_t *serial, /* i : buffer containing serial input bitstream. Each bit should be stored as a single uint16_t value */ + const uint16_t num_bits, /* i : number of bits in input bitstream */ + const int16_t bfi /* i : bad frame indicator flag */ +); + +/*! r: decoder error code */ +ivas_error IVAS_DEC_GetSamples( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ + int16_t *nOutSamples /* o : number of samples written to output buffer */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_GetObjectMetadata( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_ISM_METADATA *metadata, /* o : struct where metadata decoded in most recently decoded frame will be written */ + const uint16_t zero_flag, /* i : if this flag is enabled, this function outputs a zero-initialized metadata struct */ + const uint16_t objectIdx /* i : index of the queried object */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_GetMasaMetadata( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_MASA_QMETADATA_HANDLE *hMasaMetadata /* o : pointer to handle, which will be set to point to metadata from the most recently decoded frame */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_FeedHeadTrackData( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_QUATERNION *orientation /* i : head-tracking data */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_VoIP_FeedFrame( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + uint8_t *au, /* i : buffer containing input access unit */ + const uint16_t auSize, /* i : size of the access unit */ + const uint16_t rtpSequenceNumber, /* i : RTP sequence number (16 bits) */ + const uint32_t rtpTimeStamp, /* i : RTP timestamp (32 bits) */ + const uint32_t rcvTime_ms, /* i : receive time of the RTP packet in milliseconds */ + const bool isAMRWB_IOmode, /* i : AMRWB flag */ + const uint16_t frameTypeIndex, /* i : core mode for frame */ + const bool qBit /* i : Q bit for AMR-WB IO */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_VoIP_GetSamples( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *nOutSamples, /* o : number of samples written to output buffer */ + int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ + const uint32_t pcmBufSize, /* i : size of the PCM output buffer */ + const uint32_t systemTimestamp_ms /* i : current system timestamp */ +); + +/* Setter functions - apply changes to decoder configuration */ + +/*! r: error code */ +ivas_error IVAS_DEC_EnableVoIP( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const int16_t jbmSafetyMargin, /* i : allowed delay reserve for JBM, in milliseconds */ + const IVAS_DEC_INPUT_FORMAT inputFormat /* i : format of the input bitstream */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_SetHeadrotation( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const float w, /* i : w-coordinate of head rotation quaternion */ + const float x, /* i : x-coordinate of head rotation quaternion */ + const float y, /* i : y-coordinate of head rotation quaternion */ + const float z, /* i : z-coordinate of head rotation quaternion */ + const uint16_t i /* i : subframe index within current frame */ +); + + +#ifdef DEBUGGING +bool IVAS_DEC_GetBerDetectFlag( + IVAS_DEC_HANDLE hIvasDec /* i : IVAS decoder handle */ +); + +int32_t IVAS_DEC_GetNoCLipping( + IVAS_DEC_HANDLE hIvasDec /* i : IVAS decoder handle */ +); + +int32_t IVAS_DEC_GetCntFramesLimited( + IVAS_DEC_HANDLE hIvasDec /* i : IVAS decoder handle */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_SetForcedRendMode( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_DEC_FORCED_REND_MODE forcedRendMode /* i : forced renderer mode */ +); +#endif + +/* Getter functions - retrieve information from a decoder through a handle */ + +/*! r: error code */ +ivas_error IVAS_DEC_GetNumObjects( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + uint16_t *numObjects /* o : number of objects for which the decoder has been configured */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_GetFormat( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_BS_FORMAT *format /* o : format detected from bitstream fed to the decoder */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_GetNumOutputChannels( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *numOutputChannels /* o : number of PCM output channels */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_FeedCustomLsData( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_CUSTOM_LS_DATA hLsCustomData /* i : Custom loudspeaker setup data */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_GetHrtfHandle( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_HANDLE *hHrtfTD /* o : HRTF handle */ +); + +/*! r: error code*/ +ivas_error IVAS_DEC_GetRenderConfig( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render config handle */ +); + +/*! r: error code*/ +ivas_error IVAS_DEC_FeedRenderConfig( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const IVAS_RENDER_CONFIG_DATA hRenderConfig /* i : Render config data structure */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_GetDelay( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *nSamples, /* o : decoder delay in samples */ + int32_t *timeScale /* o : time scale of the delay, equal to decoder output sampling rate */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_HasDecodedFirstGoodFrame( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + bool *hasDecodedFirstGoodFrame /* o : flag indicating if the decoder has decoded a good frame since it was configured */ +); + +/*! r: error code */ +ivas_error IVAS_DEC_GetPcmFrameSize( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int32_t *pcmFrameSize /* o : total size of the PCM output frame. This takes into account the number of output channels */ +); + +/*! r: true if decoder has no data in VoIP jitter buffer */ +bool IVAS_DEC_VoIP_IsEmpty( + IVAS_DEC_HANDLE hIvasDec /* i/o: IVAS decoder handle */ +); + +ivas_error IVAS_DEC_VoIP_Get_CA_offset( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + int16_t *optimum_offset, + int16_t *FEC_hi +); + +#ifdef SUPPORT_JBM_TRACEFILE +ivas_error IVAS_DEC_GetJbmData( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_JBM_TRACE_DATA *JbmTraceData /* o : JBM Trace data */ +); +#endif + +/* Utility functions */ + +/*! r: pointer to an error message string */ +const char *IVAS_DEC_GetErrorMessage( + ivas_error error /* i : decoder error code enum */ +); + + +void IVAS_DEC_PrintConfig( + const IVAS_DEC_HANDLE hIvasDec, /* i : IVAS decoder handle */ + const bool quietModeEnabled, /* i : quiet mode flag: if true, reduces the amount of config info printed */ + const bool voipMode +); + +#ifdef DEBUGGING +void IVAS_DEC_PrintConfigWithBitstream( + IVAS_DEC_HANDLE hIvasDec, /* i : IVAS decoder handle */ + const bool quietModeEnabled, /* i : quiet mode flag: if true, reduces the amount of config info printed */ + uint16_t bit_stream[], /* i : bitstream buffer */ + const int16_t num_bits /* i : number of bits in bitstream */ +); +#endif + +void IVAS_DEC_PrintDisclaimer( + void +); + +/* clang-format on */ + +#endif diff --git a/lib_dec/lp_exc_d.c b/lib_dec/lp_exc_d.c new file mode 100644 index 0000000000..7036638de0 --- /dev/null +++ b/lib_dec/lp_exc_d.c @@ -0,0 +1,103 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * lp_filt_exc_dec() + * + * Low-pass filtering of the adaptive exctitation + *---------------------------------------------------------------------*/ + +void lp_filt_exc_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t codec_mode, /* i : codec mode */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t L_subfr, /* i : subframe size */ + const int16_t L_frame, /* i : frame size */ + int16_t lp_flag, /* i : operation mode signalling */ + float *exc /* i/o: pointer to the excitation signal frame */ +) +{ + int16_t i; + float code[L_FRAME]; + + /*-----------------------------------------------------------------* + * Select LP filtering of the adaptive excitation + *-----------------------------------------------------------------*/ + + if ( codec_mode == MODE1 ) + { + if ( lp_flag == NORMAL_OPERATION ) + { + lp_flag = get_next_indice( st, 1 ); + } + } + + /*--------------------------------------------------------------------* + * Find pitch excitation with LP filter + *--------------------------------------------------------------------*/ + + if ( lp_flag == LOW_PASS ) + { + /* pointer positionning to avoid doing it inside the loop */ + if ( codec_mode == MODE2 && L_frame == L_FRAME16k ) + { + for ( i = 0; i < L_subfr; i++ ) + { + code[i] = (float) ( 0.21f * exc[i - 1 + i_subfr] + 0.58f * exc[i + i_subfr] + 0.21f * exc[i + 1 + i_subfr] ); + } + } + else + { + for ( i = 0; i < L_subfr; i++ ) + { + code[i] = (float) ( 0.18f * exc[i - 1 + i_subfr] + 0.64f * exc[i + i_subfr] + 0.18f * exc[i + 1 + i_subfr] ); + } + } + + mvr2r( code, &exc[i_subfr], L_subfr ); + } + + return; +} diff --git a/lib_dec/lsf_dec.c b/lib_dec/lsf_dec.c new file mode 100644 index 0000000000..ffa5e91e2c --- /dev/null +++ b/lib_dec/lsf_dec.c @@ -0,0 +1,824 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "basop_proto_func.h" +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#endif +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void lsf_mid_dec( Decoder_State *st, const float lsp_new[], const int16_t coder_type, float lsp_mid[] ); + +static void dqlsf_CNG( Decoder_State *st, float *lsf_q ); + + +/*---------------------------------------------------------------------* + * lsf_dec() + * + * LSF decoder + *---------------------------------------------------------------------*/ + +void lsf_dec( + Decoder_State *st, /* i/o: State structure */ + const int16_t tc_subfr, /* i : TC subframe index */ + float *Aq, /* o : quantized A(z) for 4 subframes */ + int16_t *LSF_Q_prediction, /* o : LSF prediction mode */ + float *lsf_new, /* o : de-quantized LSF vector */ + float *lsp_new, /* o : de-quantized LSP vector */ + float *lsp_mid, /* o : de-quantized mid-frame LSP vector */ + const int16_t tdm_low_rate_mode /* i : secondary channel low rate mode flag */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +#endif +) +{ + int16_t i, nBits, coder_type, no_param_lpc; + int16_t param_lpc[NPRM_LPC_NEW]; + float tmp_old[M + 1], tmp_new[M + 1], enr_old, enr_new; + float lsf_diff; + + coder_type = st->coder_type; + if ( st->core_brate == SID_2k40 ) + { + coder_type = INACTIVE; + } + + if ( coder_type == AUDIO && st->GSC_IVAS_mode > 0 ) + { + coder_type = GENERIC; + } + + /* initialize */ + no_param_lpc = 0; + + /* Find the number of bits for LSF quantization */ + nBits = 0; + if ( st->core_brate == SID_2k40 ) + { + nBits = LSF_BITS_CNG; + } + else + { + if ( st->nelp_mode_dec == 0 && st->ppp_mode_dec == 0 ) + { + nBits = st->acelp_cfg.lsf_bits; + } + else if ( st->nelp_mode_dec == 1 ) + { + if ( coder_type == UNVOICED ) + { + if ( st->bwidth == NB ) + { + nBits = 32; + } + else + { + nBits = 30; + } + } + } + else if ( st->ppp_mode_dec == 1 ) + { + nBits = 26; + } + } + + /* LSF de-quantization */ + lsf_end_dec( st, coder_type, st->bwidth, nBits, lsf_new, param_lpc, LSF_Q_prediction, &no_param_lpc +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + tdm_lsfQ_PCh +#endif + ); + + /* convert quantized LSFs to LSPs */ + lsf2lsp( lsf_new, lsp_new, M, st->sr_core ); + + /* set seed_acelp used in UC mode */ + if ( coder_type == UNVOICED && st->element_mode > EVS_MONO ) + { + st->seed_acelp = 0; + for ( i = no_param_lpc - 1; i >= 0; i-- ) + { + /* rightshift before *seed_acelp+param_lpc[i] to avoid overflows*/ + st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[i] ) * 31821L + 13849L ); + } + } + + if ( st->core_brate == SID_2k40 ) + { + /* return if SID frame (conversion to A(z) done in the calling function) */ + return; + } + + /*-------------------------------------------------------------------------------------* + * FEC - update adaptive LSF mean vector + *-------------------------------------------------------------------------------------*/ + + for ( i = 0; i < M; i++ ) + { + st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsf_new[i] ) / 3; + } + + if ( st->prev_bfi && coder_type == TRANSITION && ( tc_subfr == ( st->L_frame - L_SUBFR ) ) ) + { + lsf_diff = st->sr_core / (float) ( 2 * ( M + 1 ) ); + st->lsf_old[0] = lsf_diff; + + for ( i = 1; i < M; i++ ) + { + st->lsf_old[i] = st->lsf_old[i - 1] + lsf_diff; + } + + lsf2lsp( st->lsf_old, st->lsp_old, M, st->sr_core ); + } + + /*-------------------------------------------------------------------------------------* + * Mid-frame LSF decoding + * LSP interpolation and conversion of LSPs to A(z) + *-------------------------------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + /* extrapolation in case of unstable LSF convert */ + mvr2r( lsp_new, st->lsp_old, M ); + mvr2r( lsf_new, st->lsf_old, M ); + } + + lsf_mid_dec( st, lsp_new, coder_type, lsp_mid ); + + if ( !( st->prev_bfi && ( coder_type == TRANSITION ) && ( tc_subfr == ( st->L_frame - L_SUBFR ) ) ) ) + { + if ( st->prev_bfi ) + { + /* check, if LSP interpolation can be relaxed */ + lsp2a_stab( st->lsp_old, tmp_old, M ); + enr_old = enr_1_Az( tmp_old, 2 * L_SUBFR ); + + lsp2a_stab( lsp_new, tmp_new, M ); + enr_new = enr_1_Az( tmp_new, 2 * L_SUBFR ); + + if ( enr_new / enr_old < 0.3f ) + { + st->relax_prev_lsf_interp = -1; + if ( st->clas_dec == UNVOICED_CLAS || st->clas_dec == SIN_ONSET || st->clas_dec == INACTIVE_CLAS || coder_type == GENERIC || coder_type == TRANSITION ) + { + st->relax_prev_lsf_interp = 1; + } + } + } + } + + if ( st->last_core == HQ_CORE && st->core == ACELP_CORE ) + { + /* update old LSPs/LSFs in case of HQ->ACELP core switching */ + mvr2r( lsp_mid, st->lsp_old, M ); + lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); + } + + if ( tdm_low_rate_mode == 1 && coder_type > UNVOICED ) + { + if ( st->active_cnt == 1 ) + { + mvr2r( lsp_mid, st->lsp_old, M ); + lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); + mvr2r( lsp_new, lsp_mid, M ); + } + + /* LSP interpolation and conversion of LSPs to A(z) - two-subframe mode */ + int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, -2 ); + } + else + { + /* LSP interpolation and conversion of LSPs to A(z) */ + int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, st->relax_prev_lsf_interp ); + } + + /*------------------------------------------------------------------* + * Check LSF stability (distance between old LSFs and current LSFs) + *------------------------------------------------------------------*/ + + st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); + + return; +} + + +/*------------------------------------------------------------------------------------------* + * lsf_end_dec() + * + * De-quantize frame end LSF vector + *------------------------------------------------------------------------------------------*/ + +void lsf_end_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t coder_type_org, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t nBits_in, /* i : number of bits used for ISF quantization*/ + float *qlsf, /* o : quantized LSFs in the cosine domain */ + int16_t *lpc_param, + int16_t *LSF_Q_prediction, /* o : LSF prediction mode */ + int16_t *nb_indices +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] +#endif +) +{ + float pred0[M]; /* Prediction for the safety-net quantizer (usually mean)*/ + float pred1[M], pred2[M]; /* Prediction for the predictive quantizer*/ + int16_t stages0; /* Amount of stages used by safety-net quantizer*/ + int16_t stages1; /* Amount of stages used by predictive quantizer*/ + int16_t levels0[MAX_VQ_STAGES]; /* Sizes of different codebook stages for safety-net quantizer*/ + int16_t levels1[MAX_VQ_STAGES]; /* Sizes of different codebook stages for predictive quantizer*/ + int16_t i; + int16_t TCQIdx[M / 2 + 4]; + int16_t bits0[MAX_VQ_STAGES], bits1[MAX_VQ_STAGES]; + int16_t cumleft; + int16_t lindice[MAX_VQ_STAGES + 3]; /* Predictor selector needs 1 bit and the LVQ indice uses 3 shorts */ + int16_t mode_lvq, mode_lvq_p; + int16_t safety_net, predmode, stages, *levels; + const int16_t *Bit_alloc1 = NULL, *bits; + int16_t num_bits; + int16_t *p_lpc_param; + int16_t nBits; + int16_t coder_type; + int16_t flag_1bit_gran; +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + float pred3[M]; +#endif + flag_1bit_gran = ( st->element_mode > EVS_MONO ); + nBits = nBits_in; + *nb_indices = 0; + + if ( coder_type_org == GENERIC && st->sr_core == INT_FS_16k && st->codec_mode == MODE1 +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + && ( st->idchan == 0 ) /* this bit is used only for primary channel or mono */ +#endif + ) + { + coder_type = get_next_indice( st, 1 ); + coder_type += 2; + if ( coder_type == GENERIC || ( coder_type == VOICED && flag_1bit_gran == 1 ) ) + { + nBits--; + } + } + else + { + coder_type = coder_type_org; + } + + /*--------------------------------------------------------------------------------* + * LSF de-quantization of SID frames + *--------------------------------------------------------------------------------*/ + + if ( st->core_brate == SID_2k40 ) + { + dqlsf_CNG( st, qlsf ); + v_sort( qlsf, 0, M - 1 ); + reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); + + return; + } + + find_pred_mode( &predmode, coder_type, bwidth, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); + + /*----------------------------------------------------------------* + * Calculate number of stages and levels for each stage based on the allowed bit allocation + * (subtract one bit for LSF predictor selection) + *----------------------------------------------------------------*/ + + lsf_allocate( nBits - ( predmode >> 1 ), mode_lvq, mode_lvq_p, &stages0, &stages1, levels0, levels1, bits0, bits1 ); + + /*--------------------------------------------------------------------------* + * Select safety_net or predictive mode + *--------------------------------------------------------------------------*/ + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) + { + /* if secondary channel predmode is set to be > 2 */ + predmode += 3; + } +#endif + p_lpc_param = lpc_param; + + if ( predmode == 0 ) + { + safety_net = 1; + } + else if ( predmode == 1 ) + { + safety_net = 0; + } + else + { + if ( st->codec_mode == MODE2 || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) + { + /* read from param_lpc */ + safety_net = p_lpc_param[0]; + p_lpc_param++; + *nb_indices += 1; + } + else + { + safety_net = get_next_indice( st, 1 ); + } + } + + st->safety_net = safety_net; + + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + /* Make sure there are the correct bit allocations */ + if ( st->idchan == 1 && predmode > 2 ) + { + /* use same AR prediction bit allocation for intra and inter modes*/ + lsf_allocate( nBits - 1, mode_lvq, 9, &stages0, &stages1, levels0, levels1, bits0, bits1 ); + stages0 = stages1; + mvs2s( levels1, levels0, stages0 ); + mvs2s( bits1, bits0, stages0 ); + } +#endif + + /*--------------------------------------------------------------------------* + * Read indices from array + *--------------------------------------------------------------------------*/ + + if ( st->sr_core == INT_FS_16k && coder_type == VOICED && flag_1bit_gran == 0 ) + { + /* BC-TCVQ - only in VOICED_WB@16kHz */ + if ( st->codec_mode == MODE2 || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) + { + *nb_indices = 10; + TCQIdx[0] = safety_net; + for ( i = 1; i < *nb_indices; i++ ) + { + TCQIdx[i] = *p_lpc_param++; + } + } + else + { + Bit_alloc1 = &BC_TCVQ_BIT_ALLOC_40B[1]; + TCQIdx[0] = safety_net; + for ( i = 0; i < M / 2 + 3; i++ ) + { + TCQIdx[i + 1] = get_next_indice( st, Bit_alloc1[i] ); + } + } + } + else + { + if ( safety_net ) + { + stages = stages0; + levels = levels0; + bits = bits0; + } + else + { + stages = stages1; + levels = levels1; + bits = bits1; + } + + if ( st->codec_mode == MODE2 || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) + { + for ( i = 0; i < stages - 1; i++ ) + { + num_bits = bits[i]; + lindice[i + 1] = *p_lpc_param++; + } + + cumleft = levels[stages - 1]; + while ( cumleft > 0 ) + { + if ( cumleft > LEN_INDICE ) + { + cumleft -= LEN_INDICE; + } + else + { + cumleft = 0; + } + + lindice[i + 1] = *p_lpc_param++; + i++; + } + *nb_indices += i; + } + else + { + for ( i = 0; i < stages - 1; i++ ) + { + num_bits = bits[i]; + lindice[i + 1] = get_next_indice( st, num_bits ); + } + + cumleft = levels[stages - 1]; + while ( cumleft > 0 ) + { + if ( cumleft > LEN_INDICE ) + { + cumleft -= LEN_INDICE; + num_bits = LEN_INDICE; + } + else + { + num_bits = cumleft; + cumleft = 0; + } + + lindice[i + 1] = get_next_indice( st, num_bits ); + i++; + } + } + } + + if ( st->reset_mem_AR == 1 ) + { + for ( i = 0; i < M; i++ ) + { + st->mem_AR[i] = ModeMeans[mode_lvq][i]; + } + st->reset_mem_AR = 0; + } + + /*------------------------------------------------------------------------------------------* + * De-quantize LSF vector + *------------------------------------------------------------------------------------------*/ + + *LSF_Q_prediction = SAFETY_NET; + + /* VOICED_WB@16kHz */ + if ( st->sr_core == INT_FS_16k && coder_type == VOICED && flag_1bit_gran == 0 ) + { + /* BC-TCVQ decoder */ + safety_net = qlsf_ARSN_tcvq_Dec_16k( qlsf, TCQIdx, nBits - 1 ); + + /* Update mem_MA */ + mvr2r( qlsf, st->mem_MA, M ); + + if ( safety_net ) + { + mvr2r( ModeMeans[mode_lvq], pred0, M ); + } + else + { + for ( i = 0; i < M; i++ ) + { + pred0[i] = ModeMeans[mode_lvq][i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - ModeMeans[mode_lvq][i] ); + } + *LSF_Q_prediction = AUTO_REGRESSIVE; + } + v_add( qlsf, pred0, qlsf, M ); + } + else + { + /* Safety-net */ + mvr2r( ModeMeans[mode_lvq], pred0, M ); + + /* for mem_MA update */ + for ( i = 0; i < M; i++ ) + { + pred1[i] = pred0[i] + MU_MA * st->mem_MA[i]; + } + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + /* TD stereo SCh: perform intra-frame prediction with pulling-to-mean */ + if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) + { + tdm_SCh_LSF_intra_pred( st->element_brate, tdm_lsfQ_PCh, pred3 ); + } +#endif + + if ( safety_net ) + { + /* LVQ */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) + { + + /* intra mode*/ + st->BER_detect = st->BER_detect | + vq_dec_lvq( 0, qlsf, &lindice[1], stages0, M, 9, /*mode_lvq_p,*/ levels0[stages0 - 1] ); + + v_add( qlsf, pred3, qlsf, M ); + v_sub( qlsf, pred1, st->mem_MA, M ); + } + else + { +#endif + st->BER_detect = st->BER_detect | + vq_dec_lvq( 1, qlsf, &lindice[1], stages0, M, mode_lvq, levels0[stages0 - 1] ); + + v_add( qlsf, pred0, qlsf, M ); + v_sub( qlsf, pred1, st->mem_MA, M ); +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + } +#endif + } + else + { +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + if ( predmode == 4 ) + { + mode_lvq_p = 9; + predmode = 2; + } +#endif + st->BER_detect = st->BER_detect | + vq_dec_lvq( 0, qlsf, &lindice[1], stages1, M, mode_lvq_p, levels1[stages1 - 1] ); + + if ( predmode == 1 +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + || ( predmode == 4 ) +#endif + ) /* MA only */ + { + mvr2r( qlsf, st->mem_MA, M ); + v_add( qlsf, pred1, qlsf, M ); + *LSF_Q_prediction = MOVING_AVERAGE; + } + else + { + /* AR */ + for ( i = 0; i < M; i++ ) + { + pred2[i] = pred0[i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - pred0[i] ); + } + v_add( qlsf, pred2, qlsf, M ); + v_sub( qlsf, pred1, st->mem_MA, M ); + *LSF_Q_prediction = AUTO_REGRESSIVE; + } + } + } + + + /*--------------------------------------------------------------------------* + * Sort the quantized vector + * Verify stability + * Update AR-predictor memory + *--------------------------------------------------------------------------*/ + + /* Sort the quantized vector */ + v_sort( qlsf, 0, M - 1 ); + + /* Verify stability */ + reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); + + /* Update predictor memory */ + mvr2r( qlsf, st->mem_AR, M ); + + st->mode_lvq = mode_lvq; + + return; +} + + +/*-------------------------------------------------------------------* + * lsf_mid_dec() + * + * Decode mid-frame LSFs + *-------------------------------------------------------------------*/ + +static void lsf_mid_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float lsp_new[], /* i : quantized LSPs from frame end */ + const int16_t coder_type, /* i : coder type */ + float lsp_mid[] /* o : quantized LSPs */ +) +{ + int16_t j, idx; + int16_t nb_bits; + float qlsf0[M], qlsf1[M], qlsf[M]; + const float *ratio = NULL; + int16_t bad_spacing; + + bad_spacing = 0; + + /* Convert LSPs to LSFs */ + lsp2lsf( st->lsp_old, qlsf0, M, st->sr_core ); + lsp2lsf( lsp_new, qlsf1, M, st->sr_core ); + + /* Codebook selection */ + if ( st->ppp_mode_dec == 1 ) + { + nb_bits = 1; + ratio = &( tbl_mid_voi_wb_1b[0] ); + } + else if ( st->nelp_mode_dec == 1 ) + { + nb_bits = 4; + ratio = &( tbl_mid_unv_wb_4b[0] ); + } + else + { + nb_bits = st->acelp_cfg.mid_lsf_bits; + + /* codebook selection */ + if ( coder_type == VOICED ) + { + switch ( nb_bits ) + { + case 5: + { + ratio = tbl_mid_voi_wb_5b; + break; + } + case 4: + { + ratio = tbl_mid_voi_wb_4b; + break; + } + case 1: + { + ratio = tbl_mid_voi_wb_1b; + break; + } + } + } + else if ( coder_type == UNVOICED ) + { + ratio = tbl_mid_unv_wb_5b; + } + else + { + /* GENERIC, TRANSITION, AUDIO and INACTIVE */ + switch ( nb_bits ) + { + case 5: + { + ratio = tbl_mid_gen_wb_5b; + break; + } + case 4: + { + ratio = tbl_mid_gen_wb_4b; + break; + } + case 2: + { + ratio = tbl_mid_gen_wb_2b; + break; + } + } + } + } + + /* Retrieve mid-frame LSF index */ + idx = get_next_indice( st, nb_bits ); + + /* Calculation of mid-LSF vector */ + for ( j = 0; j < M; j++ ) + { + qlsf[j] = ( 1.0f - ratio[idx * M + j] ) * qlsf0[j] + ratio[idx * M + j] * qlsf1[j]; + } + + /* check for incorrect LSF ordering */ + if ( st->mid_lsf_int == 1 ) + { + for ( j = 1; j < M; j++ ) + { + if ( qlsf[j] < qlsf[j - 1] ) + { + bad_spacing = 1; + break; + } + } + } + + /* Redo mid-LSF interpolation with 0.4 in case of LSF instability */ + if ( st->prev_bfi || ( st->mid_lsf_int == 1 && bad_spacing ) ) + { + for ( j = 0; j < M; j++ ) + { + /* redo mid-LSF interpolation with 0.4 */ + qlsf[j] = 0.4f * qlsf0[j] + 0.6f * qlsf1[j]; + + /* ensure correct ordering of LSF indices */ + if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) + { + qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; + } + } + } + else + { + /* otherwise, use regular LSF spacing and ordering as in the encoder */ + for ( j = 0; j < M; j++ ) + { + if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) + { + qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; + } + } + } + + if ( st->prev_bfi ) + { + /* continue redoing mid-LSF interpolation with 0.4 in order not to propagate the error */ + st->mid_lsf_int = 1; + } + + if ( st->safety_net ) + { + /* safety-net encountered -> stop redoing mid-LSF interpolation with 0.4 */ + st->mid_lsf_int = 0; + } + + reorder_lsf( qlsf, LSF_GAP_MID, M, st->sr_core ); + /* convert back to LSPs */ + lsf2lsp( qlsf, lsp_mid, M, st->sr_core ); + + return; +} + +/*----------------------------------------------------------------------------------------------* + * dqlsf_CNG() + * + * LSF de-quantizer for SID frames (uses 28 bits, 4 for VQ, 24 for LVQ) + * + * Note: + * LP-CNG LSF decoder does not need to know the sampling rate, + * the sampling rate data is embedded inside the LSF coefficients + * If the highest order LSF coefficient (lsf_q[M-1]) is smaller than 6350 then Fs=12.8kHz + * If the highest order LSF coefficient (lsf_q[M-1]) is larger than 6350 then Fs=16kHz + *----------------------------------------------------------------------------------------------*/ + +static void dqlsf_CNG( + Decoder_State *st, /* i/o: decoder state structure */ + float *lsf_q /* o : decoded LSFs */ +) +{ + int16_t indice[4]; + + indice[0] = get_next_indice( st, 4 ); + indice[1] = get_next_indice( st, LEN_INDICE ); + indice[2] = get_next_indice( st, LSF_BITS_CNG - 4 - LEN_INDICE ); + + st->BER_detect = st->BER_detect | + deindex_lvq_cng( &indice[1], lsf_q, indice[0], LSF_BITS_CNG - 4 ); + /* The sampling frequency of the LP-CNG frame can be determined by checking the value of the highest order LSF + coefficient (last coefficient of lsf_q). If the last decoded LSF coefficient (lsf_q[15]) is larger than 6350 + the decoded frame is WB2 with sampling rate of 16 kHz, otherwise it is sampled at 12.8kHz and contains + either NB or WB LSF data. */ + + v_add( lsf_q, &CNG_SN1[indice[0] * M], lsf_q, M ); + + if ( ( ( st->L_frame == L_FRAME16k ) && ( lsf_q[M - 1] <= WB_LIMIT_LSF ) ) || ( ( st->L_frame < L_FRAME16k ) && ( lsf_q[M - 1] > WB_LIMIT_LSF ) ) ) + { + st->BER_detect = 1; + } + + return; +} diff --git a/lib_dec/lsf_msvq_ma_dec.c b/lib_dec/lsf_msvq_ma_dec.c new file mode 100644 index 0000000000..1fe895b706 --- /dev/null +++ b/lib_dec/lsf_msvq_ma_dec.c @@ -0,0 +1,282 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * lsf_msvq_ma_decprm() + * + * + *---------------------------------------------------------------------*/ + +int16_t lsf_msvq_ma_decprm( + Decoder_State *st, + int16_t *param_lpc ) +{ + int16_t i, nbits_lpc, bits_midlpc; + int16_t bits0[MAX_VQ_STAGES], bits1[MAX_VQ_STAGES], stages0, stages1, stages, + levels0[MAX_VQ_STAGES], levels1[MAX_VQ_STAGES], *bits; + int16_t predmode, mode_lvq, mode_lvq_p, safety_net; + + bits_midlpc = MIDLSF_NBITS; + + if ( st->sr_core == INT_FS_16k && st->coder_type == UNVOICED ) + { + find_pred_mode( &predmode, GENERIC, 1 - st->narrowBand /*st->bwidth*/, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); + } + else + { + if ( st->core == TCX_20_CORE ) + { + find_pred_mode( &predmode, AUDIO, 1 - st->narrowBand /*st->bwidth*/, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); + } + else + { + find_pred_mode( &predmode, st->coder_type, 1 - st->narrowBand /*st->bwidth*/, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); + } + } + + lsf_allocate( ENDLSF_NBITS - ( predmode >> 1 ), mode_lvq, mode_lvq_p, &stages0, &stages1, levels0, levels1, bits0, bits1 ); + + nbits_lpc = 0; + + if ( predmode == 2 ) + { + /* there is choice between SN and AR prediction */ + safety_net = get_next_indice( st, 1 ); + + if ( safety_net == 1 ) + { + stages = stages0; + bits = bits0; + } + else + { + stages = stages1; + bits = bits1; + } + *param_lpc = safety_net; + param_lpc++; + nbits_lpc++; + } + else + { + stages = stages1; + bits = bits1; + } + + for ( i = 0; i < stages - 1; i++ ) + { + *param_lpc = get_next_indice( st, bits[i] ); + param_lpc++; + nbits_lpc += bits[i]; + } + *param_lpc = get_next_indice( st, LEN_INDICE ); + param_lpc++; + nbits_lpc += LEN_INDICE; + + + *param_lpc = get_next_indice( st, bits[i] - LEN_INDICE ); + param_lpc++; + nbits_lpc += bits[i] - LEN_INDICE; + + if ( st->coder_type != VOICED && st->core == ACELP_CORE && st->acelp_cfg.midLpc ) + { + + *param_lpc = get_next_indice( st, bits_midlpc ); + nbits_lpc += bits_midlpc; + } + + return nbits_lpc; +} + + +/*---------------------------------------------------------------------* + * lsf_bctcvq_decprm() + * + * + *---------------------------------------------------------------------*/ + +int16_t lsf_bctcvq_decprm( + Decoder_State *st, + int16_t *param_lpc ) +{ + int16_t i, nbits_lpc, num_par; + const int16_t *bits1; + + num_par = 10; + bits1 = BC_TCVQ_BIT_ALLOC_40B; + + nbits_lpc = 0; + + for ( i = 0; i < num_par; i++ ) + { + *param_lpc = get_next_indice( st, bits1[i] ); + param_lpc++; + nbits_lpc += bits1[i]; + } + + return nbits_lpc; +} + + +/*---------------------------------------------------------------------* + * D_lsf_tcxlpc() + * + * + *---------------------------------------------------------------------*/ + +/*! r: number of indices */ +int16_t D_lsf_tcxlpc( + const int16_t indices[], /* i : VQ indices */ + float lsf_q[], /* o : quantized lsf */ + Word16 lsp_q_ind[], /* o : quantized lsp (w/o MA prediction) */ + const int16_t narrowband, /* i : narrowband flag */ + const int16_t cdk, /* i : codebook selector */ + const float mem_MA[] /* i : MA memory */ +) +{ + int16_t i, NumIndices; + float pred[M16k]; + const float *means; + Word16 lsf_q_ind[M16k]; + float lsf_rem_q[M]; + Word16 lsf_rem_q_ind[M]; + + NumIndices = 1; + + msvq_dec( lsf_codebook[narrowband][cdk], lsf_dims, lsf_offs, TCXLPC_NUMSTAGES, M, M, indices + NumIndices, lsf_q, lsf_q_ind ); + + NumIndices += TCXLPC_NUMSTAGES; + + if ( indices[0] ) + { + /* Only add contribution if flag is enabled */ + + msvq_dec( lsf_ind_codebook[narrowband][cdk], lsf_ind_dims, lsf_ind_offs, TCXLPC_IND_NUMSTAGES, M, M, indices + NumIndices, lsf_rem_q, lsf_rem_q_ind ); + NumIndices += TCXLPC_IND_NUMSTAGES; + + /* Add to MA-removed vector */ + for ( i = 0; i < M; ++i ) + { + lsf_q_ind[i] = add( lsf_q_ind[i], lsf_rem_q_ind[i] ); + } + } + + /* Inter-frame prediction */ + means = lsf_means[narrowband]; + + for ( i = 0; i < M; ++i ) + { + pred[i] = means[i] + MU_MA * mem_MA[i]; + } + + /* Add prediction */ + for ( i = 0; i < M; ++i ) + { + lsf_q[i] += pred[i]; + lsf_q_ind[i] = add( lsf_q_ind[i], LSFM( means[i] ) ); + } + reorder_lsf( lsf_q, TCXLPC_LSF_GAP, M, INT_FS_12k8 ); + + basop_reorder_lsf( lsf_q_ind, LSF_GAP_VAL( TCXLPC_LSF_GAP ), M, INT_FS_FX ); + + if ( lsp_q_ind ) + { + basop_lsf2lsp( lsf_q_ind, lsp_q_ind ); + } + + return NumIndices; +} + + +/*---------------------------------------------------------------------* + * dec_lsf_tcxlpc() + * + * + *---------------------------------------------------------------------*/ + +/*! r: number of bits read */ +int16_t dec_lsf_tcxlpc( + Decoder_State *st, /* i/o: Decoder state */ + int16_t **indices, /* o : Ptr to VQ indices */ + const int16_t narrowband, /* i : narrowband flag */ + const int16_t cdk /* i : codebook selector */ +) +{ + int16_t i, start_bit_pos; + float lsf_q_ignored[M]; + Word16 lsf_q_ind[M]; + int16_t *flag; + + flag = *indices; /* Save pointer */ + *flag = 0; /* Set flag to disabled */ + ++*indices; + + start_bit_pos = st->next_bit_pos; + + for ( i = 0; i < TCXLPC_NUMSTAGES; ++i ) + { + **indices = get_next_indice( st, lsf_numbits[i] ); + ++*indices; + } + + /* Decode independent lsf */ + msvq_dec( lsf_codebook[narrowband][cdk], lsf_dims, lsf_offs, TCXLPC_NUMSTAGES, M, M, flag + 1, lsf_q_ignored, lsf_q_ind ); + + /* Update flag */ + *flag = lsf_ind_is_active( lsf_q_ind, lsf_means[narrowband], narrowband, cdk ); + + if ( *flag ) + { + for ( i = 0; i < TCXLPC_IND_NUMSTAGES; ++i ) + { + **indices = get_next_indice( st, lsf_ind_numbits[i] ); + ++*indices; + } + } + + return st->next_bit_pos - start_bit_pos; +} diff --git a/lib_dec/nelp_dec.c b/lib_dec/nelp_dec.c new file mode 100644 index 0000000000..1814031fb2 --- /dev/null +++ b/lib_dec/nelp_dec.c @@ -0,0 +1,222 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * nelp_decoder() + * + * NELP decoder + *-------------------------------------------------------------------*/ + +void nelp_decoder( + Decoder_State *st, /* i/o: decoder static memory */ + float *exc_nelp, /* o : adapt. excitation/total exc*/ + float *exc, /* o : adapt. excitation exc */ + int16_t bfi, /* i : frame error rate */ + const int16_t coder_type, /* i : coding type */ + float *gain_buf /* o : floating pitch gain for each subframe */ +) +{ + int16_t i, fid = 0; + SC_VBR_DEC_HANDLE hSC_VBR; + float ptr[L_FRAME], filtRes[L_FRAME], gain_fac; + float Gains[10], Gain, E3, E2, R; + float ptr_tmp[L_FRAME]; + int16_t iG1, iG2[2]; + + hSC_VBR = st->hSC_VBR; + + if ( ( st->last_nelp_mode_dec == 1 ) && ( st->bwidth != st->last_bwidth ) ) + { + st->last_nelp_mode_dec = 0; + } + + if ( coder_type == UNVOICED && st->bwidth == NB ) + { + if ( st->last_nelp_mode_dec != 1 ) + { + set_f( hSC_VBR->bp1_filt_mem_nb_dec, 0, 7 * 2 ); + } + } + else if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) + { + if ( st->last_nelp_mode_dec != 1 ) + { + set_f( hSC_VBR->bp1_filt_mem_wb_dec, 0, 4 * 2 ); + } + } + + if ( st->last_nelp_mode_dec != 1 ) + { + set_f( hSC_VBR->shape1_filt_mem_dec, 0, 20 ); + set_f( hSC_VBR->shape2_filt_mem_dec, 0, 20 ); + set_f( hSC_VBR->shape3_filt_mem_dec, 0, 20 ); + } + + if ( bfi == 0 ) + { + if ( st->rf_frame_type == RF_NELP && st->use_partial_copy ) + { + iG1 = st->rf_indx_nelp_iG1; + iG2[0] = st->rf_indx_nelp_iG2[0]; + iG2[1] = st->rf_indx_nelp_iG2[1]; + } + else + { + /* Do Unvoiced/NELP Decoding */ + iG1 = get_next_indice( st, 5 ); + iG2[0] = get_next_indice( st, 6 ); + iG2[1] = get_next_indice( st, 6 ); + } + + if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) + { + if ( st->rf_frame_type == RF_NELP && st->use_partial_copy ) + { + fid = st->rf_indx_nelp_fid; + } + else + { + fid = get_next_indice( st, 2 ); + } + } + + dequantize_uvg( iG1, iG2, Gains, st->bwidth ); + } + else + { + for ( i = 1, Gain = 0.001f; i <= L_SUBFR; i++ ) + { + Gain += SQR( exc[-i] ); + } + + Gain = (float) ( sqrt( Gain / L_SUBFR ) ); + Gain *= 0.8f; /* Some scale down of energy since it is an erasure */ + + set_f( Gains, Gain, 10 ); + } + + if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) + { + gain_fac = 1.16f; + } + else + { + gain_fac = 1.37f; + } + + generate_nelp_excitation( &( hSC_VBR->nelp_dec_seed ), Gains, ptr, gain_fac ); + + if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) + { + polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_wb, bp1_den_coef_wb, 4, hSC_VBR->bp1_filt_mem_wb_dec ); + mvr2r( ptr_tmp, ptr, L_FRAME ); + } + + if ( coder_type == UNVOICED && st->bwidth == NB ) + { + polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_nb_fx_order7, bp1_den_coef_nb_fx_order7, 7, hSC_VBR->bp1_filt_mem_nb_dec ); + mvr2r( ptr_tmp, ptr, L_FRAME ); + } + + for ( i = 0, E3 = 0.001f; i < L_FRAME; i++ ) + { + E3 += SQR( ptr[i] ); + } + + if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) + { + polezero_filter( ptr, ptr_tmp, L_FRAME, shape1_num_coef, shape1_den_coef, 10, hSC_VBR->shape1_filt_mem_dec ); + mvr2r( ptr_tmp, ptr, L_FRAME ); + + switch ( fid ) + { + case 1: + /* Update other filter memory */ + polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem_dec ); + + /* filter the residual to desired shape */ + polezero_filter( ptr, ptr_tmp, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem_dec ); + mvr2r( ptr_tmp, ptr, L_FRAME ); + + break; + case 2: + /* Update other filter memory */ + polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem_dec ); + + /* filter the residual to desired shape */ + polezero_filter( ptr, ptr_tmp, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem_dec ); + + mvr2r( ptr_tmp, ptr, L_FRAME ); + + break; + default: + /* Update other filter memory */ + polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem_dec ); + + polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem_dec ); + + break; + } + + for ( i = 0, E2 = 0.001f; i < L_FRAME; i++ ) + { + E2 += SQR( ptr[i] ); + } + + R = (float) sqrt( E3 / E2 ); + + for ( i = 0; i < L_FRAME; i++ ) + { + ptr[i] *= R; + } + } + + mvr2r( ptr, exc_nelp, L_FRAME ); + set_f( gain_buf, 0.f, NB_SUBFR16k ); + + return; +} diff --git a/lib_dec/peak_vq_dec.c b/lib_dec/peak_vq_dec.c new file mode 100644 index 0000000000..45897b77b3 --- /dev/null +++ b/lib_dec/peak_vq_dec.c @@ -0,0 +1,545 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------* + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void dequant_peaks( Decoder_State *st, float *vect_out, const float *peak_gain ); + +static int16_t hvq_dec_pos( Decoder_State *st, int16_t *pos_vec, const int16_t length, const int16_t num_peaks ); + +static int16_t sparse_dec_pos( Decoder_State *st, int16_t *out, const int16_t length ); + +static void peak_vq_dec( Decoder_State *st, float *coefs_out, const int32_t core_brate, const int16_t num_bits, const int16_t *ynrm, int16_t *R, int16_t *vq_peak_idx, int16_t *Npeaks, const int16_t core ); + + +/*-------------------------------------------------------------------------- + * hvq_dec() + * + * HVQ decoder + *--------------------------------------------------------------------------*/ + +void hvq_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t num_bits, /* i : Number of available bits */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t *ynrm, /* i : Envelope coefficients */ + int16_t *R, /* i/o: Bit allocation/updated bit allocation */ + float *noise_level, /* o : Noise level */ + int16_t *peak_idx, /* o : Peak position vector */ + int16_t *Npeaks, /* o : Total number of peaks */ + float *coefsq_norm, /* o : Output vector */ + const int16_t core /* i : Core */ +) +{ + int16_t i; + int16_t bits; + int16_t noise_level_idx; + + bits = num_bits; + + for ( i = 0; i < HVQ_BWE_NOISE_BANDS; i++ ) + { + noise_level_idx = get_next_indice( st, 2 ); + noise_level[i] = usdequant( noise_level_idx, 0.0f, 0.1f ); + + bits -= 2; + } + + peak_vq_dec( st, coefsq_norm, core_brate, bits, ynrm, R, peak_idx, Npeaks, core ); + + return; +} + + +/*-------------------------------------------------------------------------- + * peak_vq_dec() + * + * Vector de-quantization of MDCT peaks + *--------------------------------------------------------------------------*/ + +static void peak_vq_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *coefs_out, /* o : Output coefficient vector */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t num_bits, /* i : Number of bits for HVQ */ + const int16_t *ynrm, /* i : Envelope coefficients */ + int16_t *R, /* i/o: Bit allocation/updated bit allocation */ + int16_t *vq_peak_idx, /* o : Peak position vector */ + int16_t *Npeaks, /* o : Number of peaks */ + const int16_t core /* i : Core type */ +) +{ + int16_t vq_peaks, i, j, k, FlagN, hcode_l, diff; + int16_t bin_th, max_peaks, pvq_bands; + int16_t nf_seed = RANDOM_INITSEED; + int16_t nf_gains_idx[HVQ_NF_GROUPS], pgain_difidx[HVQ_MAX_PEAKS], pvq_norm[MAX_PVQ_BANDS]; + int16_t gain_bits_array[MAX_PVQ_BANDS]; + int16_t pos_bits; + float nf_gains[HVQ_NF_GROUPS], peak_gains[HVQ_MAX_PEAKS]; + int32_t manE_peak, manPkEnrg; /* (man, exp) representation ported from BASOP for interoperability */ + int16_t expE_peak, expPkEnrg; + float pvq_vector[HVQ_PVQ_BUF_LEN]; + int16_t res_vec[HVQ_THRES_BIN_32k]; + int16_t k_sort[HVQ_MAX_PVQ_WORDS]; + int16_t pvq_inp_vector[HVQ_PVQ_BUF_LEN]; + int16_t npulses[MAX_PVQ_BANDS]; + int16_t pvq_bits, Rk[MAX_PVQ_BANDS]; + float fg_pred[NB_SFM_MAX]; + int16_t Rk_f[MAX_PVQ_BANDS]; /* Q3 */ + int16_t sel_bnds[HVQ_NUM_SFM_24k]; + int16_t n_sel_bnds; + int16_t hvq_band_end[MAX_PVQ_BANDS]; + int16_t hvq_band_start[MAX_PVQ_BANDS]; + int16_t hvq_band_width[MAX_PVQ_BANDS]; + int16_t n; + int16_t s; + float normq; + + set_s( gain_bits_array, 0, MAX_PVQ_BANDS ); + set_f( pvq_vector, 0.0f, HVQ_PVQ_BUF_LEN ); + set_s( npulses, 0, MAX_PVQ_BANDS ); + set_s( pvq_inp_vector, 0, HVQ_PVQ_BUF_LEN ); + + /* Set bitrate dependent variables */ + assert( ( core_brate > HQ_16k40 && core_brate <= HQ_48k ) && "HVQ rate not supported" ); + max_peaks = (int16_t) ( ( core_brate * HVQ_PEAKS_PER_DELTA + HVQ_PEAKS_PER_DELTA_OFFS ) / HVQ_PEAKS_BPS_DELTA ); + + bin_th = HVQ_THRES_BIN_24k; + if ( core_brate >= HQ_BWE_CROSSOVER_BRATE ) + { + bin_th = HVQ_THRES_BIN_32k; + } + + /* Get number of peaks */ + vq_peaks = get_next_indice( st, 5 ); + vq_peaks = max_peaks - vq_peaks; + *Npeaks = vq_peaks; + diff = 5; + + /* safety check in case of bit errors */ + if ( *Npeaks < HVQ_MIN_PEAKS ) + { + st->BER_detect = 1; + vq_peaks = HVQ_MIN_PEAKS; + *Npeaks = HVQ_MIN_PEAKS; + } + + /* De-quantize peak positions */ + for ( i = 0; i < bin_th; i++ ) + { + res_vec[i] = 0; + } + + /* Unpack HVQ codewords */ + pos_bits = hvq_dec_pos( st, res_vec, bin_th, vq_peaks ); + diff += pos_bits; + + for ( i = 0, j = 0; i < bin_th && j < vq_peaks; i++ ) /* safety check in case of bit errors */ + { + if ( res_vec[i] ) + { + vq_peak_idx[j++] = i; + } + } + + /* safety check in case of bit errors */ + if ( j < vq_peaks ) + { + st->BER_detect = 1; + vq_peaks = j - 1; + *Npeaks = j - 1; + } + + /* Huffman or differential coding */ + FlagN = get_next_indice( st, 1 ); + + /* De-quantize peak gains */ + pgain_difidx[0] = get_next_indice( st, GAIN0_BITS ); + + /* safety check in case of bit errors */ + if ( pgain_difidx[0] > 44 ) + { + st->BER_detect = 1; + pgain_difidx[0] = 44; + } + peak_gains[0] = dicn_pg[pgain_difidx[0]] * sign( (float) res_vec[vq_peak_idx[0]] ); + + hcode_l = 0; + if ( FlagN ) + { + huff_dec( st, vq_peaks - 1, MAX_PG_HUFFLEN, NUM_PG_HUFFLEN, hvq_pg_huff_thres, hvq_pg_huff_offset, hvq_pg_huff_tab, &pgain_difidx[1] ); + for ( i = 1; i < vq_peaks; i++ ) + { + hcode_l += pgain_huffsizn[pgain_difidx[i]]; + } + } + else + { + for ( i = 1; i < vq_peaks; i++ ) + { + pgain_difidx[i] = get_next_indice( st, GAINI_BITS ); + hcode_l += GAINI_BITS; + } + } + + for ( i = 1; i < vq_peaks; i++ ) + { + pgain_difidx[i] += pgain_difidx[i - 1] - 15; + + /* safety check in case of bit errors */ + if ( pgain_difidx[i] > 44 || pgain_difidx[i] < 0 ) + { + st->BER_detect = 1; + pgain_difidx[i] = 44; + } + + peak_gains[i] = dicn_pg[pgain_difidx[i]] * sign( (float) res_vec[vq_peak_idx[i]] ); + } + + /* Scale up peak gains and accumulate peak energy */ + /* Simulating BASOP code for interoperability */ + manE_peak = 0; + expE_peak = 32; + for ( i = 0; i < vq_peaks; i++ ) + { + peak_gains[i] *= 4.0f; + manPkEnrg = manPkEnrg_tbl[pgain_difidx[i]]; + expPkEnrg = expPkEnrg_tbl[pgain_difidx[i]]; + floating_point_add( &manE_peak, &expE_peak, manPkEnrg, expPkEnrg ); + } + + /* Number of bits used for peak gain quantization */ + diff += FLAGN_BITS + GAIN0_BITS + hcode_l; + + /* De-quantize peaks */ + for ( i = 0; i < vq_peaks; i++ ) + { + dequant_peaks( st, &coefs_out[vq_peak_idx[i] - 2], &peak_gains[i] ); + + diff += 9; + } + + for ( i = 0; i < HVQ_NF_GROUPS; i++ ) + { + nf_gains_idx[i] = get_next_indice( st, 5 ); + nf_gains[i] = 0.5f * dicn[nf_gains_idx[i]]; + diff += 5; + } + + pvq_bits = num_bits - diff; + + /* Calculate number of PVQ bands to code and assign bits */ + pvq_bands = hvq_pvq_bitalloc( pvq_bits, core_brate, st->bwidth, ynrm, manE_peak, expE_peak, Rk, R, sel_bnds, &n_sel_bnds ); + + /* safety check in case of bit errors */ + if ( pvq_bands == 0 ) + { + st->BER_detect = 1; + } + + pvq_bits -= HVQ_PVQ_GAIN_BITS * pvq_bands; + + /* Get band limits for concatenated PVQ target */ + hvq_concat_bands( pvq_bands, sel_bnds, n_sel_bnds, hvq_band_start, hvq_band_width, hvq_band_end ); + + s = 0; + for ( k = 0; k < pvq_bands; k++ ) + { + k_sort[k] = k; + Rk_f[k] = Rk[k] * 8; + } + + pvq_decode_frame( st, pvq_vector, npulses, pvq_inp_vector, hvq_band_start, hvq_band_end, hvq_band_width, pvq_bands, Rk_f, pvq_bits, core ); + + fine_gain_pred( hvq_band_start, hvq_band_end, hvq_band_width, k_sort, npulses, NULL, NULL, pvq_bands, pvq_vector, pvq_inp_vector, fg_pred, core ); + + fine_gain_dec( st, k_sort, pvq_bands, gain_bits_array, fg_pred ); + + apply_gain( k_sort, hvq_band_start, hvq_band_end, pvq_bands, fg_pred, pvq_vector ); + + i = 0; + n = 0; + s = 0; + for ( k = 0; k < pvq_bands; k++ ) + { + pvq_norm[k] = get_next_indice( st, HVQ_PVQ_GAIN_BITS ); + pvq_norm[k] += 8; + + diff += HVQ_PVQ_GAIN_BITS; + + j = 0; + if ( k >= pvq_bands - n_sel_bnds ) + { + i = band_start_harm[sel_bnds[s++]]; + } + while ( j < hvq_band_width[k] ) + { + normq = dicn[pvq_norm[k]]; + if ( coefs_out[i] == 0 ) + { + coefs_out[i] = pvq_vector[n] * normq; + j++; + n++; + } + i++; + } + } + /* Noise fill unqantized coeffs with one gain per group */ + for ( i = 0; i < HVQ_NF_GROUPS; i++ ) + { + for ( j = i * ( bin_th / HVQ_NF_GROUPS ); j < ( i + 1 ) * ( bin_th / HVQ_NF_GROUPS ); j++ ) + { + if ( coefs_out[j] == 0 ) + { + coefs_out[j] = ( (float) own_random( &nf_seed ) / MAX16B ) * nf_gains[i]; + } + } + } + + return; +} + +/*-------------------------------------------------------------------------- + * dequant_peaks() + * + * Reads codebook vector and scales peak + *--------------------------------------------------------------------------*/ + +static void dequant_peaks( + Decoder_State *st, /* i/o: decoder state structure */ + float *vect_out, /* o : Quantized vector */ + const float *peak_gain /* i : Peak gain */ +) +{ + float xq[4]; + const float *tmp; + int16_t i, hvq_cb_rev; + int16_t cb_idx; + + hvq_cb_rev = get_next_indice( st, 1 ); + cb_idx = get_next_indice( st, 8 ); + + if ( hvq_cb_rev ) + { + tmp = &hvq_peak_cb[cb_idx * 4 + 3]; + for ( i = 0; i < 4; i++ ) + { + xq[i] = tmp[-i]; + } + } + else + { + mvr2r( &hvq_peak_cb[cb_idx * 4], xq, 4 ); + } + if ( vect_out[0] == 0 ) + { + vect_out[0] = xq[0] * *peak_gain; + vect_out[1] = xq[1] * *peak_gain; + } + else + { + if ( fabs( peak_gain[-1] ) <= fabs( *peak_gain ) ) + { + vect_out[0] = xq[0] * *peak_gain; + vect_out[1] = xq[1] * *peak_gain; + } + else + { + if ( vect_out[1] == 0 || fabs( peak_gain[-1] ) <= fabs( *peak_gain ) ) + { + vect_out[1] = xq[1] * *peak_gain; + } + } + } + vect_out[2] = *peak_gain; + vect_out[3] = xq[2] * *peak_gain; + vect_out[4] = xq[3] * *peak_gain; + + return; +} + +/*-------------------------------------------------------------------------- + * hvq_dec_pos() + * + * HVQ decode peak positions + *--------------------------------------------------------------------------*/ + +static int16_t hvq_dec_pos( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *pos_vec, /* o : decoded peak positions */ + const int16_t length, /* i : length */ + const int16_t num_peaks /* i : number of peaks */ +) +{ + int16_t peak_idx[HVQ_MAX_PEAKS]; + int16_t delta[HVQ_MAX_PEAKS]; + int16_t sign_vec[HVQ_MAX_PEAKS]; + + int16_t mode; + int16_t num_bits; + int16_t i, j; + + num_bits = 0; + set_s( pos_vec, 0, length ); + + mode = get_next_indice( st, 1 ); + num_bits += 1; + + if ( mode == HVQ_CP_DELTA ) + { + huff_dec( st, num_peaks, HVQ_CP_HUFF_MAX_CODE, HVQ_CP_HUFF_NUM_LEN, hvq_cp_huff_thres, hvq_cp_huff_offset, hvq_cp_huff_tab, delta ); + + for ( i = 0; i < num_peaks; i++ ) + { + num_bits += hvq_cp_huff_len[delta[i]]; + } + + peak_idx[0] = delta[0] - HVQ_CP_HUFF_OFFSET; + /* safety check in case of bit errors */ + if ( peak_idx[0] < 2 ) + { + peak_idx[0] = 2; + st->BER_detect = 1; + } + for ( i = 1; i < num_peaks; i++ ) + { + peak_idx[i] = delta[i] + peak_idx[i - 1] + HVQ_CP_HUFF_OFFSET; + /* safety check in case of bit errors */ + if ( peak_idx[i] >= HVQ_THRES_BIN_32k ) + { + peak_idx[i] = HVQ_THRES_BIN_32k - 1; + st->BER_detect = 1; + } + } + + for ( i = 0; i < num_peaks; i++ ) + { + pos_vec[peak_idx[i]] = 1; + } + } + else + { + num_bits += sparse_dec_pos( st, pos_vec, length ); + } + + for ( i = 0; i < num_peaks; i++ ) + { + sign_vec[i] = ( get_next_indice_1( st ) == 0 ) ? -1 : 1; + } + num_bits += num_peaks; + + for ( i = 0, j = 0; i < length && j < num_peaks; i++ ) /* safety check in case of bit errors */ + { + if ( pos_vec[i] ) + { + pos_vec[i] *= sign_vec[j++]; + } + } + + return num_bits; +} + +/*-------------------------------------------------------------------------- + * sparse_dec_pos() + * + * Sparse decode positions + *--------------------------------------------------------------------------*/ + +/*! r: number of bits decoded */ +static int16_t sparse_dec_pos( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *out, /* o : decoded peak positions */ + const int16_t length /* i : length */ +) +{ + int16_t layer2[HVQ_CP_L2_MAX]; + int16_t layer_length; + int16_t i, j; + int16_t bits; + int16_t idx, val; + + set_s( layer2, 0, HVQ_CP_L2_MAX ); + set_s( out, 0, length ); + bits = 0; + + layer_length = (int16_t) ( (float) length / HVQ_CP_L1_LEN + 0.5 ); + + for ( i = 0; i < layer_length; i++ ) + { + layer2[i] = get_next_indice_1( st ); + } + bits += layer_length; + + for ( j = 0; j < layer_length; j++ ) + { + if ( layer2[j] ) + { + idx = get_next_indice( st, HVQ_CP_MAP_IDX_LEN ); + bits += HVQ_CP_MAP_IDX_LEN; + + val = hvq_cp_layer1_map5[idx]; + + /* safety check in case of bit errors */ + if ( j == 0 && val > 4 ) /* out[0] and out[1] are invalid positions */ + { + st->BER_detect = 1; + val = 4; + } + for ( i = min( ( j + 1 ) * HVQ_CP_L1_LEN, length ) - 1; i >= j * HVQ_CP_L1_LEN; i-- ) + { + out[i] = val & 1; + val >>= 1; + } + } + } + + return bits; +} diff --git a/lib_dec/pit_dec.c b/lib_dec/pit_dec.c new file mode 100644 index 0000000000..9f2ba3bcad --- /dev/null +++ b/lib_dec/pit_dec.c @@ -0,0 +1,842 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*----------------------------------------------------------* + * pit_decode() + * + * Decode OL pitch lag + *----------------------------------------------------------*/ + +/*! r: floating pitch value */ +float pit_decode( + Decoder_State *st, /* i/o: decoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + int16_t i_subfr, /* i : subframe index */ + const int16_t coder_type, /* i : coding type */ + int16_t *limit_flag, /* i/o: restrained(0) or extended(1) Q limits */ + int16_t *T0, /* o : close loop integer pitch */ + int16_t *T0_frac, /* o : close loop fractional part of the pitch */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max, /* i/o: delta search max */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + float pitch; + int16_t pitch_index, nBits, pit_flag; + + pitch_index = 0; + + /*----------------------------------------------------------------* + * Set pit_flag = 0 for every subframe with absolute pitch search + *----------------------------------------------------------------*/ + + pit_flag = i_subfr; + if ( i_subfr == 2 * L_SUBFR ) + { + pit_flag = 0; + } + + /*-------------------------------------------------------* + * Retrieve the pitch index + *-------------------------------------------------------*/ + + if ( !Opt_AMR_WB ) + { + /*----------------------------------------------------------------* + * pitch Q: Set limit_flag to 0 for restrained limits, and 1 for extended limits + *----------------------------------------------------------------*/ + + if ( i_subfr == 0 ) + { + *limit_flag = 1; + + if ( coder_type == VOICED ) + { + *limit_flag = 2; /* double-extended limits */ + } + + if ( coder_type == GENERIC && core_brate == ACELP_7k20 ) + { + *limit_flag = 0; + } + } + else if ( i_subfr == 2 * L_SUBFR && coder_type == GENERIC && core_brate <= ACELP_13k20 ) + { + if ( *T0 > ( PIT_FR1_EXTEND_8b + PIT_MIN ) >> 1 ) + { + *limit_flag = 0; + } + } + + /*-------------------------------------------------------* + * Retrieve the number of Q bits + *-------------------------------------------------------*/ + + nBits = 0; + if ( coder_type != AUDIO ) + { + nBits = st->acelp_cfg.pitch_bits[i_subfr / L_subfr]; + + pitch_index = get_next_indice( st, nBits ); + } + + /*-------------------------------------------------------* + * Pitch decoding in AUDIO mode + * (both ACELP@12k8 and ACELP@16k cores) + *-------------------------------------------------------*/ + + if ( coder_type == AUDIO ) + { + if ( L_subfr == L_FRAME / 2 && i_subfr != 0 ) + { + pit_flag = L_SUBFR; + } + + if ( pit_flag == 0 ) + { + nBits = 10; + } + else + { + nBits = 6; + } + + pitch_index = get_next_indice( st, nBits ); + + if ( L_subfr == L_FRAME / 2 && i_subfr != 0 && pitch_index >= 32 ) /* safety check in case of bit errors */ + { + pitch_index = pitch_index >> 1; + st->BER_detect = 1; + } + + pit_Q_dec( 0, pitch_index, nBits, 4, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + } + else if ( coder_type == VOICED ) + { + /*-------------------------------------------------------* + * Pitch decoding in VOICED mode + * (ACELP@12k8 core only) + *-------------------------------------------------------*/ + + if ( i_subfr == 2 * L_SUBFR ) + { + pit_flag = i_subfr; + } + + pit_Q_dec( 0, pitch_index, nBits, 4, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + } + else if ( st->idchan == 1 && ( tdm_Pitch_reuse_flag == 1 || nBits == 4 ) ) + { + /*-------------------------------------------------------* + * Pitch decoding with reusing of primary channel information + *-------------------------------------------------------*/ + int16_t loc_T0, loc_frac, delta; + + delta = 4; + pit_flag = L_SUBFR; + + if ( L_subfr == 2 * L_SUBFR ) + { + loc_T0 = (int16_t) ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ); + loc_frac = (int16_t) ( ( ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ) - loc_T0 ) * 4.0f ); + } + else + { + loc_T0 = (int16_t) tdm_Pri_pitch_buf[i_subfr / L_SUBFR]; + loc_frac = (int16_t) ( ( tdm_Pri_pitch_buf[i_subfr / L_SUBFR] - loc_T0 ) * 4.0f ); + } + + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, loc_T0, loc_frac, T0_min, T0_max ); + + if ( nBits > 0 ) + { + pit_Q_dec( 0, pitch_index, nBits, delta, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + } + else + { + *T0 = loc_T0; + *T0_frac = loc_frac; + } + } + else + { + /*-------------------------------------------------------* + * Pitch decoding in GENERIC mode + * (both ACELP@12k8 and ACELP@16k cores) + *-------------------------------------------------------*/ + + if ( L_frame == L_FRAME ) + { + pit_Q_dec( 0, pitch_index, nBits, 8, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + } + else + { + pit16k_Q_dec( pitch_index, nBits, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + } + } + } + + /*-------------------------------------------------------* + * Pitch decoding in AMR-WB IO mode + *-------------------------------------------------------*/ + + else + { + *limit_flag = 0; + + if ( i_subfr == 0 || ( i_subfr == 2 * L_SUBFR && core_brate == ACELP_8k85 ) ) + { + nBits = 8; + } + else + { + nBits = 5; + } + + if ( core_brate > ACELP_8k85 ) + { + nBits = 6; + + if ( i_subfr == 0 || i_subfr == 2 * L_SUBFR ) + { + nBits = 9; + } + } + + pitch_index = get_next_indice( st, nBits ); + + pit_Q_dec( 1, pitch_index, nBits, 8, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + } + + /*-------------------------------------------------------* + * Compute floating pitch output + *-------------------------------------------------------*/ + + pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + + return pitch; +} + + +/*---------------------------------------------------------------------* + * abs_pit_dec() + * + * Decode the absolute pitch + *---------------------------------------------------------------------*/ + +void abs_pit_dec( + const int16_t fr_steps, /* i : fractional resolution steps (0, 2, 4) */ + int16_t pitch_index, /* i : pitch index */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac /* o : pitch fraction */ +) +{ + if ( limit_flag == 0 ) + { + if ( fr_steps == 2 ) + { + if ( pitch_index < ( PIT_FR1_8b - PIT_MIN ) * 2 ) + { + *T0 = PIT_MIN + ( pitch_index / 2 ); + *T0_frac = pitch_index - ( ( *T0 - PIT_MIN ) * 2 ); + *T0_frac *= 2; + } + else + { + *T0 = pitch_index + PIT_FR1_8b - ( ( PIT_FR1_8b - PIT_MIN ) * 2 ); + *T0_frac = 0; + } + } + else if ( fr_steps == 4 ) + { + if ( pitch_index < ( PIT_FR2_9b - PIT_MIN ) * 4 ) + { + *T0 = PIT_MIN + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( *T0 - PIT_MIN ) * 4; + } + else if ( pitch_index < ( ( PIT_FR2_9b - PIT_MIN ) * 4 + ( PIT_FR1_9b - PIT_FR2_9b ) * 2 ) ) + { + pitch_index -= ( PIT_FR2_9b - PIT_MIN ) * 4; + *T0 = PIT_FR2_9b + ( pitch_index / 2 ); + *T0_frac = pitch_index - ( *T0 - PIT_FR2_9b ) * 2; + ( *T0_frac ) *= 2; + } + else + { + *T0 = pitch_index + PIT_FR1_9b - ( ( PIT_FR2_9b - PIT_MIN ) * 4 ) - ( ( PIT_FR1_9b - PIT_FR2_9b ) * 2 ); + *T0_frac = 0; + } + } + else /* fr_steps == 0 */ + { + /* not used in the codec */ + } + } + else if ( limit_flag == 1 ) /* extended Q range */ + { + if ( fr_steps == 2 ) + { + if ( pitch_index < ( PIT_FR1_EXTEND_8b - PIT_MIN_EXTEND ) * 2 ) + { + *T0 = PIT_MIN_EXTEND + ( pitch_index / 2 ); + *T0_frac = pitch_index - ( ( *T0 - PIT_MIN_EXTEND ) * 2 ); + *T0_frac *= 2; + } + else + { + *T0 = pitch_index + PIT_FR1_EXTEND_8b - ( ( PIT_FR1_EXTEND_8b - PIT_MIN_EXTEND ) * 2 ); + *T0_frac = 0; + } + } + else if ( fr_steps == 4 ) + { + if ( pitch_index < ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ) + { + *T0 = PIT_MIN_EXTEND + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( *T0 - PIT_MIN_EXTEND ) * 4; + } + else if ( pitch_index < ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 + ( PIT_FR1_EXTEND_9b - PIT_FR2_EXTEND_9b ) * 2 ) ) + { + pitch_index -= ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4; + *T0 = PIT_FR2_EXTEND_9b + ( pitch_index / 2 ); + *T0_frac = pitch_index - ( *T0 - PIT_FR2_EXTEND_9b ) * 2; + ( *T0_frac ) *= 2; + } + else + { + *T0 = pitch_index + PIT_FR1_EXTEND_9b - ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ) - ( ( PIT_FR1_EXTEND_9b - PIT_FR2_EXTEND_9b ) * 2 ); + *T0_frac = 0; + } + } + else /* fr_steps == 0 */ + { + /* not used in the codec */ + } + } + else /* limit_flag == 2 */ + { + if ( fr_steps == 2 ) + { + if ( pitch_index < ( PIT_FR1_DOUBLEEXTEND_8b - PIT_MIN_DOUBLEEXTEND ) * 2 ) + { + *T0 = PIT_MIN_DOUBLEEXTEND + ( pitch_index / 2 ); + *T0_frac = pitch_index - ( ( *T0 - PIT_MIN_DOUBLEEXTEND ) * 2 ); + *T0_frac *= 2; + } + else + { + *T0 = pitch_index + PIT_FR1_DOUBLEEXTEND_8b - ( ( PIT_FR1_DOUBLEEXTEND_8b - PIT_MIN_DOUBLEEXTEND ) * 2 ); + *T0_frac = 0; + } + } + else if ( fr_steps == 4 ) + { + if ( pitch_index < ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ) + { + *T0 = PIT_MIN_DOUBLEEXTEND + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( *T0 - PIT_MIN_DOUBLEEXTEND ) * 4; + } + else if ( pitch_index < ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 + ( PIT_FR1_DOUBLEEXTEND_9b - PIT_FR2_DOUBLEEXTEND_9b ) * 2 ) ) + { + pitch_index -= ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4; + *T0 = PIT_FR2_DOUBLEEXTEND_9b + ( pitch_index / 2 ); + *T0_frac = pitch_index - ( *T0 - PIT_FR2_DOUBLEEXTEND_9b ) * 2; + ( *T0_frac ) *= 2; + } + else + { + *T0 = pitch_index + PIT_FR1_DOUBLEEXTEND_9b - ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ) - ( ( PIT_FR1_DOUBLEEXTEND_9b - PIT_FR2_DOUBLEEXTEND_9b ) * 2 ); + *T0_frac = 0; + } + } + else /* fr_steps == 0 */ + { + /* not used in the codec */ + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * delta_pit_dec() + * + * Decode delta pitch + *---------------------------------------------------------------------*/ + +void delta_pit_dec( + const int16_t fr_steps, /* i : fractional resolution steps (0, 2, 4) */ + const int16_t pitch_index, /* i : pitch index */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + const int16_t T0_min /* i : delta search min */ +) +{ + if ( fr_steps == 0 ) + { + *T0 = T0_min + pitch_index; + *T0_frac = 0; + } + else if ( fr_steps == 2 ) + { + *T0 = T0_min + pitch_index / 2; + *T0_frac = pitch_index - ( *T0 - T0_min ) * 2; + *T0_frac *= 2; + } + else if ( fr_steps == 4 ) + { + *T0 = T0_min + pitch_index / 4; + *T0_frac = pitch_index - ( *T0 - T0_min ) * 4; + } + + return; +} + + +/*-------------------------------------------------* + * pit_Q_dec() + * + * pitch decoding + *-------------------------------------------------*/ + +void pit_Q_dec( + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t pitch_index, /* i : pitch index */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t delta, /* i : Half the CL searched interval */ + const int16_t pit_flag, /* i : absolute(0) or delta(1) pitch Q */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max, /* i/o: delta search max */ + int16_t *BER_detect /* o : BER detect flag */ +) +{ + if ( nBits == 10 ) /* absolute decoding with 10 bits */ + { + if ( limit_flag == 0 ) + { + *T0 = PIT_MIN + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( *T0 - PIT_MIN ) * 4; + } + else if ( limit_flag == 1 ) + { + *T0 = PIT_MIN_EXTEND + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( *T0 - PIT_MIN_EXTEND ) * 4; + } + else /* limit_flag == 2 */ + { + *T0 = PIT_MIN_DOUBLEEXTEND + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( *T0 - PIT_MIN_DOUBLEEXTEND ) * 4; + } + } + else if ( nBits == 9 ) /* absolute decoding with 9 bits */ + { + abs_pit_dec( 4, pitch_index, limit_flag, T0, T0_frac ); + + /* find T0_min and T0_max for delta search */ + if ( Opt_AMR_WB ) + { + limit_T0( L_FRAME, delta, pit_flag, 0, *T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ + } + } + else if ( nBits == 8 ) /* absolute decoding with 8 bits */ + { + abs_pit_dec( 2, pitch_index, limit_flag, T0, T0_frac ); + + /* find T0_min and T0_max for delta search */ + if ( Opt_AMR_WB ) + { + limit_T0( L_FRAME, delta, pit_flag, 0, *T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ + } + } + else if ( nBits == 6 ) /* relative decoding with 6 bits */ + { + delta_pit_dec( 4, pitch_index, T0, T0_frac, *T0_min ); + } + else if ( nBits == 5 ) /* relative decoding with 5 bits */ + { + if ( delta == 8 ) + { + delta_pit_dec( 2, pitch_index, T0, T0_frac, *T0_min ); + } + else /* delta == 4 */ + { + delta_pit_dec( 4, pitch_index, T0, T0_frac, *T0_min ); + } + } + else /* nBits == 4 */ /* relative decoding with 4 bits */ + { + if ( delta == 8 ) + { + delta_pit_dec( 0, pitch_index, T0, T0_frac, *T0_min ); + } + else /* delta == 4 */ + { + delta_pit_dec( 2, pitch_index, T0, T0_frac, *T0_min ); + } + } + + /* biterror detection mechanism */ + if ( ( ( *T0 << 2 ) + *T0_frac ) > ( PIT_MAX << 2 ) + 2 && pit_flag == 0 && !Opt_AMR_WB ) + { + *T0 = L_SUBFR; + *T0_frac = 0; + *BER_detect = 1; + } + + if ( !Opt_AMR_WB ) + { + /* find T0_min and T0_max for delta search */ + limit_T0( L_FRAME, delta, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + + return; +} + +/*-------------------------------------------------* + * pit16k_Q_dec() + * + * pitch decoding @16kHz core + *-------------------------------------------------*/ + +void pit16k_Q_dec( + const int16_t pitch_index, /* i : pitch index */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max, /* i/o: delta search max */ + int16_t *BER_detect /* o : BER detect flag */ +) +{ + int16_t index; + + if ( nBits == 10 ) /* absolute decoding with 10 bits */ + { + { + if ( pitch_index < ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4 ) + { + *T0 = PIT16k_MIN_EXTEND + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( ( *T0 - PIT16k_MIN_EXTEND ) * 4 ); + } + else + { + index = pitch_index - ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4; + *T0 = PIT16k_FR2_EXTEND_10b + ( index / 2 ); + *T0_frac = index - ( *T0 - PIT16k_FR2_EXTEND_10b ) * 2; + ( *T0_frac ) *= 2; + } + } + } + else if ( nBits == 9 ) /* absolute decoding with 9 bits */ + { + { + if ( pitch_index < ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ) + { + *T0 = PIT16k_MIN_EXTEND + ( pitch_index / 4 ); + *T0_frac = pitch_index - ( *T0 - PIT16k_MIN_EXTEND ) * 4; + } + else if ( pitch_index < ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 + ( PIT16k_FR1_EXTEND_9b - PIT16k_FR2_EXTEND_9b ) * 2 ) ) + { + index = pitch_index - ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4; + *T0 = PIT16k_FR2_EXTEND_9b + ( index / 2 ); + *T0_frac = index - ( *T0 - PIT16k_FR2_EXTEND_9b ) * 2; + ( *T0_frac ) *= 2; + } + else + { + *T0 = pitch_index + PIT16k_FR1_EXTEND_9b - ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ) - ( ( PIT16k_FR1_EXTEND_9b - PIT16k_FR2_EXTEND_9b ) * 2 ); + *T0_frac = 0; + } + } + } + else /* nBits == 6 */ /* relative decoding with 6 bits */ + { + delta_pit_dec( 4, pitch_index, T0, T0_frac, *T0_min ); + } + + /* biterror detection mechanism */ + if ( ( ( *T0 << 2 ) + *T0_frac ) > ( PIT16k_MAX << 2 ) && nBits >= 9 ) + { + *T0 = L_SUBFR; + *T0_frac = 0; + *BER_detect = 1; + } + + /* find T0_min and T0_max for delta search */ + limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); + + return; +} + + +/*----------------------------------------------------------* + * Mode2_pit_decode() + * + * Decode pitch lag + *----------------------------------------------------------*/ + +/*! r: floating pitch value */ +float Mode2_pit_decode( + const int16_t coder_type, /* i : coding model */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t L_subfr, /* i : sub-frame length */ + int16_t **pt_indice, /* i/o: quantization indices pointer */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* o : close loop fractional part of the pitch */ + int16_t *T0_res, /* i/o: pitch resolution */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_min_frac, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + int16_t *T0_max_frac, /* i/o: higher limit for close-loop search */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr1b, + const int16_t pit_fr2, + const int16_t pit_max, + const int16_t pit_res_max ) +{ + float pitch; + int16_t pit_res_max2; + + if ( coder_type == 0 ) /*Unvoiced Coding do nothing*/ + { + *T0 = L_subfr; + *T0_frac = 0; + *T0_res = 1; + } + else if ( coder_type == 1 ) /* 8/4/4/4 (EVS) */ + { + if ( i_subfr == 0 ) + { + Mode2_abs_pit_dec( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + limit_T0_voiced( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + *T0_res = ( pit_res_max >> 1 ); + Mode2_delta_pit_dec( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 2 ) /* 8/5/8/5 (EVS) */ + { + + if ( ( i_subfr == 0 ) || ( i_subfr == 2 * L_subfr ) ) + { + Mode2_abs_pit_dec( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + limit_T0_voiced( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + *T0_res = ( pit_res_max >> 1 ); + Mode2_delta_pit_dec( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 3 ) /* 9/6/6/6 (HRs- VC) */ + { + pit_res_max2 = pit_res_max; + if ( pit_min == PIT_MIN_16k ) + { + pit_res_max2 = pit_res_max >> 1; + } + + if ( i_subfr == 0 ) + { + Mode2_abs_pit_dec( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); + } + else + { + limit_T0_voiced( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + *T0_res = pit_res_max2; + Mode2_delta_pit_dec( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 4 ) /* 9/6/9/6 (AMRWB) */ + { + pit_res_max2 = pit_res_max; + if ( pit_min == PIT_MIN_16k ) + { + pit_res_max2 = pit_res_max >> 1; + } + + if ( ( i_subfr == 0 ) || ( i_subfr == 2 * L_subfr ) ) + { + Mode2_abs_pit_dec( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); + } + else + { + limit_T0_voiced( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + *T0_res = pit_res_max2; + Mode2_delta_pit_dec( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 8 ) /* 8/5/5/5 (RF all pred mode) */ + { + if ( i_subfr == 0 ) + { + Mode2_abs_pit_dec( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + limit_T0_voiced( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + *T0_res = ( pit_res_max >> 1 ); + Mode2_delta_pit_dec( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 9 ) /* 8/0/8/0 (RF gen pred mode) */ + { + if ( i_subfr == 0 ) + { + Mode2_abs_pit_dec( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + limit_T0_voiced( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + *T0_res = ( pit_res_max >> 1 ); + Mode2_delta_pit_dec( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); + } + } + else /*RCELP 8 bits pitch delay*/ + { + assert( 0 ); + } + + /*-------------------------------------------------------* + * Compute floating pitch output + *-------------------------------------------------------*/ + + pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / (float) ( *T0_res ); /* save subframe pitch values */ + + return pitch; +} + + +/*---------------------------------------------------------------------* + * Mode2_abs_pit_dec() + * + * Decode the absolute pitch + *---------------------------------------------------------------------*/ + +void Mode2_abs_pit_dec( + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t *T0_res, /* o : pitch resolution */ + int16_t **pt_indice, /* i/o: pointer to Vector of Q indexes */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr2, + const int16_t pit_res_max ) +{ + int16_t index; + int16_t pit_res_max_half; + + index = **pt_indice; + ( *pt_indice )++; + pit_res_max_half = pit_res_max >> 1; + + if ( index < ( pit_fr2 - pit_min ) * pit_res_max ) + { + *T0 = pit_min + ( index / pit_res_max ); + + *T0_frac = index - ( *T0 - pit_min ) * pit_res_max; + *T0_res = pit_res_max; + } + else if ( index < ( ( pit_fr2 - pit_min ) * pit_res_max + ( pit_fr1 - pit_fr2 ) * pit_res_max_half ) ) + { + index -= ( pit_fr2 - pit_min ) * pit_res_max; + + *T0 = pit_fr2 + ( index / pit_res_max_half ); + + *T0_frac = index - ( *T0 - pit_fr2 ) * pit_res_max_half; + *T0_res = pit_res_max_half; + } + else + { + *T0 = index + pit_fr1 - ( ( pit_fr2 - pit_min ) * pit_res_max ) - ( ( pit_fr1 - pit_fr2 ) * pit_res_max_half ); + *T0_frac = 0; + *T0_res = 1; + } + + return; +} + + +/*---------------------------------------------------------------------* + * Routine Mode2_delta_pit_dec() + * + * Decode delta pitch + *---------------------------------------------------------------------*/ + +void Mode2_delta_pit_dec( + int16_t *T0, /* o : integer pitch lag */ + int16_t *T0_frac, /* o : pitch fraction */ + int16_t T0_res, /* i : pitch resolution */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_min_frac, /* i : delta search min */ + int16_t **pt_indice /* i/o: pointer to Vector of Q indexes */ +) +{ + int16_t index; + + index = **pt_indice; + ( *pt_indice )++; + + *T0 = *T0_min + ( index + *T0_min_frac ) / T0_res; + + *T0_frac = index + *T0_min_frac - ( *T0 - *T0_min ) * T0_res; + + return; +} diff --git a/lib_dec/pitch_extr.c b/lib_dec/pitch_extr.c new file mode 100644 index 0000000000..d90f06af7a --- /dev/null +++ b/lib_dec/pitch_extr.c @@ -0,0 +1,351 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "basop_util.h" +#include "wmops.h" + + +/*-----------------------------------------------------------------* + * Pitch prediction for frame erasure using linear fitting * + *-----------------------------------------------------------------*/ + +void pitch_pred_linear_fit( + const int16_t nbLostCmpt, /* i : bfi counter */ + const int16_t last_good, /* i : last classification type */ + float *old_pitch_buf, /* i : pitch lag buffer */ + float *old_fpitch, /* i : */ + float *T0_out, /* o : estimated close loop pitch */ + const int16_t pit_min, /* i : Minimum pitch lag */ + const int16_t pit_max, /* i : Maximum pitch lag */ + float *mem_pitch_gain, /* i : pitch gain [0] is the most recent subfr gain */ + const int16_t limitation, + const int16_t plc_use_future_lag, /* i : */ + int16_t *extrapolationFailed, /* o : flag if extrap decides not to change the pitch*/ + const int16_t nb_subfr /* i : number of ACELP subframes */ +) +{ + float T0 = 0; + float mdy, dy[5], ftmp; + int16_t lcor = 5; + int16_t imax, i; + float pg[8], ml[8]; /* local buffer for pitch gain and mem_lag*/ + int16_t no_subfr_pred; + float mem_lag[2 * NB_SUBFR16k + 2]; + + + if ( nb_subfr == 4 ) + { + for ( i = 0; i < 2 * NB_SUBFR + 2; i++ ) + { + mem_lag[i] = old_pitch_buf[2 * NB_SUBFR + 1 - i]; + } + } + else /* L_frame == L_FRAME16k */ + { + for ( i = 0; i < 2 * NB_SUBFR16k + 2; i++ ) + { + mem_lag[i] = old_pitch_buf[2 * NB_SUBFR16k + 1 - i]; + } + } + + if ( (int16_t) *old_fpitch > pit_max ) + { + *extrapolationFailed = 1; + *T0_out = pit_max; + printf( "\n WARNING: *old_fpitch > pit_max : old_fpitch = %f, pit_max = %i \n\n", *old_fpitch, pit_max ); + return; + } + + if ( nbLostCmpt == 1 && last_good >= UNVOICED_TRANSITION && last_good < ONSET ) + { + if ( plc_use_future_lag ) + { + no_subfr_pred = 2; + } + else + { + no_subfr_pred = 4; + } + + /* copy to local buffers, depending on availability of info about future subframes */ + mvr2r( mem_pitch_gain + no_subfr_pred - 2, pg, 8 ); + mvr2r( mem_lag + no_subfr_pred - 2, ml, 8 ); + + mdy = 0.0f; + for ( i = ( lcor - 1 ); i >= 0; i-- ) + { + dy[i] = ( ml[i] - ml[i + 1] ); + mdy += dy[i]; + } + + /*---------------------------------------------------* + * remove maximum variation + *---------------------------------------------------*/ + ftmp = (float) fabs( dy[0] ); + imax = 0; + for ( i = 1; i < lcor; i++ ) + { + if ( ftmp < (float) fabs( dy[i] ) ) + { + ftmp = (float) fabs( dy[i] ); + imax = i; + } + } + if ( ( fabs( dy[imax] ) < 0.15f * *old_fpitch ) && ( ( limitation == 1 ) || ( fabs( dy[imax] ) < fabs( mdy ) ) ) ) + { + Word16 pg_fx[5]; + Word32 ml_fx[5]; + Word32 pit, a, b, pita, pitb; + Word16 sum0; + Word16 const timeWeight[5] = { 20480 /*1.25f Q14*/, 18432 /*1.125f Q14*/, 16384 /*1.f Q14*/, 14336 /*0.875f Q14*/, 12288 /*.75f Q14*/ }; /*Q14*/ + Word16 a1, a2, a3, a4, a5, tmpa, tmpb, b1, b2, b3, b4, b5; + Word16 a_e, b_e, sum0_q; + + /* convert gains and lags to fixed precision */ + for ( i = 0; i < lcor; i++ ) + { + pg_fx[i] = (int16_t) ( pg[i] / pow( 2.f, -15 + 1 ) ); /* Q14 */ + ml_fx[i] = (int32_t) ( ml[i] / pow( 2.f, -31 + 15 ) ); /* Q16 */ + } + +#define WMC_TOOL_MAN + FOR( i = 0; i < lcor; i++ ) + { + pg_fx[i] = mult( mult( pg_fx[i], pg_fx[i] ), timeWeight[i] ); /*Q12 'til pg[lcor-1], Q14 'til pg[8]*/ + move16(); + } + + /* Linear prediction (estimation) of pitch */ + /* sum0=(pg[1]+4*pg[2]+9*pg[3]+16*pg[4])*pg[0]+(pg[2]+4*pg[3]+9*pg[4])*pg[1]+(pg[3]+4*pg[4])*pg[2]+pg[4]*pg[3];*/ + { + Word32 t1, t2, t3, t4, t5, t6, t7; + Word16 e1, e2, e3, e4, e5, e6, e7; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif + t1 = L_mult0( pg_fx[4], pg_fx[3] ); /*Q24*/ /* t1 = pg[4]*pg[3] */ + e1 = 7; + t2 = L_add( L_deposit_l( pg_fx[3] ), L_shl( L_deposit_l( pg_fx[4] ), 2 ) ); /*Q12*/ + e2 = norm_l( t2 ); + t2 = L_shl( t2, e2 ); /*Q12,-e2*/ + t2 = Mpy_32_16_1( t2, pg_fx[2] ); /*Q9,-e2*/ /* t2 = (pg[3]+4*pg[4])*pg[2] */ + e2 = sub( 22, e2 ); + t3 = L_add( L_deposit_l( pg_fx[2] ), L_add( L_shl( L_deposit_l( pg_fx[3] ), 2 ), L_add( L_shl( L_deposit_l( pg_fx[4] ), 3 ), L_deposit_l( pg_fx[4] ) ) ) ); /*Q12*/ + e3 = norm_l( t3 ); + t3 = L_shl( t3, e3 ); /*Q12,-e3*/ + t3 = Mpy_32_16_1( t3, pg_fx[1] ); /*Q9,-e3*/ /* t3 = (pg[2]+4*pg[3]+9*pg[4])*pg[1] */ + e3 = sub( 22, e3 ); + t4 = L_add( pg_fx[1], L_add( L_shl( L_deposit_l( pg_fx[2] ), 2 ), L_add( L_add( L_shl( L_deposit_l( pg_fx[3] ), 3 ), L_deposit_l( pg_fx[3] ) ), L_shl( L_deposit_l( pg_fx[4] ), 4 ) ) ) ); /*Q12*/ + e4 = norm_l( t4 ); + t4 = L_shl( t4, e4 ); /*Q12,-e4*/ + t4 = Mpy_32_16_1( t4, pg_fx[0] ); /*Q9,-e4*/ /* t4 = (pg[1]+4*pg[2]+9*pg[3]+16*pg[4])*pg[0] */ + e4 = sub( 22, e4 ); + t5 = BASOP_Util_Add_Mant32Exp( t1, e1, t2, e2, &e5 ); + t6 = BASOP_Util_Add_Mant32Exp( t3, e3, t4, e4, &e6 ); + t7 = BASOP_Util_Add_Mant32Exp( t5, e5, t6, e6, &e7 ); /*Q31,e7*/ + sum0_q = norm_l( t7 ); +#ifdef BASOP_NOGLOB + sum0 = round_fx_o( L_shl( t7, sum0_q ), &Overflow ); /*Q15,e7-sum0_q*/ +#else + sum0 = round_fx( L_shl( t7, sum0_q ) ); /*Q15,e7-sum0_q*/ +#endif + sum0_q = add( 15, sub( sum0_q, e7 ) ); /* sum0 is now Qsum0_q*/ + } + + pit = 0; + move16(); + IF( sum0 != 0 ) + { + /* Shift to the right, changing Q as long as no precision is lost */ + WHILE( s_and( sum0, 1 ) == 0 ) + { + sum0 = shr( sum0, 1 ); + sum0_q = sub( sum0_q, 1 ); + } + + /* float: + a=-( + ( 3*pg[1]+4*pg[2]+3*pg[3])*pg[0] */ + /*a1*/ /* + *ml[0] +( + ( 2*pg[2]+2*pg[3])*pg[1]-4*pg[1]*pg[0] */ + /*a2*/ /* + )*ml[1] +( + - 8*pg[2]*pg[0]-3*pg[2]*pg[1]+pg[3]*pg[2] */ + /*a3*/ /* + )*ml[2] +( + -12*pg[3]*pg[0]-6*pg[3]*pg[1]-2*pg[3]*pg[2] */ + /*a4*/ /* + )*ml[3] +( + -16*pg[4]*pg[0] -9*pg[4]*pg[1] -4*pg[4]*pg[2] -pg[4]*pg[3] */ + /*a5*/ /* + )*ml[4] ) /sum0; MAC(19);MULT(9);DIV(1);*/ + + /*magic numbers: Q11 if not DIRECTLY marked otherwise*/ + a5 = mac_r( L_mac( L_mac( L_mult( mult_r( -32768, pg_fx[0] ) /*Q8*/, pg_fx[4] ) /*Q5+16*/, mult_r( -9 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[4] /*Q12*/ ) /*Q5+16*/, mult_r( -4 * 2048, pg_fx[2] ) /*Q8*/, pg_fx[4] /*Q12*/ ) /*Q5+16*/, mult_r( pg_fx[4], -4096 /*Q12->Q9*/ ), mult_r( pg_fx[3], 16384 /*Q12->Q11*/ ) ) /*Q5*/; + a4 = mac_r( L_mac( L_mult( mult_r( -12 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5+16*/, mult_r( -6 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5+16*/, mult_r( -2 * 2048, pg_fx[2] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5*/; + a3 = mac_r( L_mac( L_mult( mult_r( -8 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[2] ), mult_r( -3 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[2] ), mult_r( pg_fx[2], 4096 /*Q12->Q9*/ ), mult_r( pg_fx[3], 16384 /*12->Q11*/ ) ); /*Q5*/ + a2 = mac_r( L_mac( L_mult( mult_r( 2 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[2] ) /*Q5+16*/, mult_r( 2 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[3] ) /*Q5+16*/, mult_r( -4 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[1] /*Q12*/ ) /*Q5*/; + a1 = mac_r( L_mac( L_mult( mult_r( 3 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[1] ) /*Q5+16*/, mult_r( 4 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[2] /*Q12*/ ) /*Q5+16*/, mult_r( 3 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5*/; + + a = L_mac( L_mac( L_mac( L_mac( L_mult( a1, round_fx( L_shl( ml_fx[0], 4 ) ) ), /*Q4*/ + round_fx( L_shl( ml_fx[1], 4 ) ) /*Q4*/, a2 ), + round_fx( L_shl( ml_fx[2], 4 ) ) /*Q4*/, a3 ), + round_fx( L_shl( ml_fx[3], 4 ) ) /*Q4*/, a4 ), + round_fx( L_shl( ml_fx[4], 4 ) ) /*Q4*/, a5 ); /*Q-6+16 = Q10*/ + + a_e = norm_l( a ); + a = L_shl( a, a_e ); + + a1 = BASOP_Util_Divide3216_Scale( L_negate( a ), /* Numerator */ /*scalefactor 21*/ + sum0, /* Denominator*/ /*scalefactor 10*/ + &tmpa ); /* scalefactor for result */ + + /* Float: + b=(( pg[1]+2*pg[2]+3*pg[3]+4*pg[4])*pg[0] */ + /*b1*/ /* + *ml[0] + + (( pg[2]+2*pg[3]+3*pg[4])*pg[1]-pg[1]*pg[0]) */ + /*b2*/ /* + *ml[1] + + ( -2*pg[2]*pg[0]-pg[2]*pg[1]+(pg[3]+2*pg[4])*pg[2]) */ + /*b3*/ /* + *ml[2] + + ( -3*pg[3]*pg[0]-2*pg[3]*pg[1]-pg[3]*pg[2]+pg[4]*pg[3]) */ + /*b4*/ /* + *ml[3] + + ( -4*pg[4]*pg[0]-3*pg[4]*pg[1]-2*pg[4]*pg[2]-pg[4]*pg[3]) */ + /*b5*/ /* + *ml[4] )/sum0; MAC(22);MULT(9);DIV(1);*/ + + /*magic numbers in Q13 if not DIRECTLY marked otherwise*/ + b1 = mac_r( L_mac( L_mac( L_mult( mult_r( pg_fx[1], pg_fx[0] ), 32768 / 4 ) /*Q7+16*/, mult_r( 2 * 8192, pg_fx[0] ) /*Q10*/, pg_fx[2] /*Q12*/ ) /*Q7+16*/, mult_r( 3 * 8192, pg_fx[0] ) /*Q10*/, pg_fx[3] /*Q12*/ ) /*Q7+16*/, /*mult_r(4*8192,pg_fx[0])*/ pg_fx[0] /*Q10*/, pg_fx[4] /*Q12*/ ) /*Q7*/; + b2 = mac_r( L_mac( L_mac( L_mult( mult_r( pg_fx[2], pg_fx[1] ), 32768 / 4 ) /*Q7+16*/, mult_r( 2 * 8192, pg_fx[1] ), pg_fx[3] ), mult_r( 3 * 8192, pg_fx[1] ), pg_fx[4] ) /*Q7+16*/, mult_r( pg_fx[1], -32768 / 2 /*Q12->Q12*/ ), mult_r( pg_fx[0], 32768 / 2 /*Q12->Q10*/ ) ) /*Q7*/; + b3 = mac_r( L_mac( L_mac( L_mult( mult_r( -2 * 8192, pg_fx[0] ), pg_fx[2] ) /*Q7+16*/, mult_r( pg_fx[2], -32768 / 2 ), mult_r( pg_fx[1], 32768 / 2 ) ), mult_r( pg_fx[3], 32768 / 2 ), mult_r( pg_fx[2], 32768 / 2 ) ) /*Q5+16*/, mult_r( 2 * 8192, pg_fx[2] ), pg_fx[4] ) /*Q7*/; + b4 = mac_r( L_mac( L_mac( L_mult( mult_r( -3 * 8192, pg_fx[0] ), pg_fx[3] ), mult_r( -2 * 8192, pg_fx[1] ), pg_fx[3] ), mult_r( -32768 / 2, pg_fx[3] ), mult_r( 32768 / 2, pg_fx[2] ) ), mult_r( 32768 / 2, pg_fx[4] ), mult_r( 32768 / 2, pg_fx[3] ) ); /*Q7*/ + b5 = mac_r( L_mac( L_mac( L_mult( mult_r( -32768 /*(-4*8192)*/, pg_fx[0] ), pg_fx[4] ), mult_r( -3 * 8192, pg_fx[1] ), pg_fx[4] ), mult_r( -2 * 8192, pg_fx[2] ), pg_fx[4] ), mult_r( -32768 / 2, pg_fx[4] ), mult_r( 32768 / 2, pg_fx[3] ) ) /*Q7*/; + + b = L_mac( L_mac( L_mac( L_mac( L_mult( b1, round_fx( L_shl( ml_fx[0], 4 ) ) ), /*Q4*/ + round_fx( L_shl( ml_fx[1], 4 ) ) /*Q4*/, b2 ), + round_fx( L_shl( ml_fx[2], 4 ) ) /*Q4*/, b3 ), + round_fx( L_shl( ml_fx[3], 4 ) ) /*Q4*/, b4 ), + round_fx( L_shl( ml_fx[4], 4 ) ) /*Q4*/, b5 ); /*Q-4+16 = Q12*/ + /*predict pitch for 4th future subframe*/ + + b_e = norm_l( b ); + b = L_shl( b, b_e ); + + b1 = BASOP_Util_Divide3216_Scale( b, /* Numerator */ /*scalefactor 19*/ + sum0, /* Denominator*/ /*scalefactor 10*/ + &tmpb ); /* scalefactor for result*/ + + /*pit = a + b * ((float)no_subfr_pred + (float)nb_subfr);*/ + pita = L_shl( L_deposit_l( a1 ), add( add( sum0_q, 16 - 10 + 1 ), sub( tmpa, a_e ) ) ) /*Q16*/; + pitb = L_shl_r( L_mult( b1 /*Q15*/, add( no_subfr_pred, nb_subfr ) /*Q0*/ ), add( add( sum0_q, 16 - 12 ), sub( tmpb, b_e ) ) ); + pit = L_add( pita, pitb ); /*Q16*/ +#undef WMC_TOOL_MAN + + /* convert pitch back to float precision */ + T0 = (float) ( pit * pow( 2.f, -31 + 15 ) ); + + /*limit pitch to allowed range*/ + if ( T0 > pit_max ) + { + T0 = (float) pit_max; + } + + if ( T0 < pit_min ) + { + T0 = (float) pit_min; + } + + *extrapolationFailed = 0; + } + else + { + T0 = 0; + *extrapolationFailed = 1; + } + } + else + { + T0 = 0; + *extrapolationFailed = 1; + } + } + else + { + T0 = *old_fpitch; + *extrapolationFailed = 1; + } + + *T0_out = T0; + + return; +} + + +void get_subframe_pitch( + const int16_t nSubframes, /* i : number of subframes */ + float pitchStart, /* i : starting pitch lag (in subframe -1) */ + float pitchEnd, /* i : ending pitch lag (in subframe nSubframes-1) */ + float *pitchBuf /* o : interpolated pitch lag per subframe */ +) +{ + int16_t i; + float pitchDelta; + + assert( ( nSubframes > 0 ) && ( pitchBuf != NULL ) && ( pitchStart >= 0 ) && ( pitchEnd > 0 ) ); + + pitchDelta = ( pitchEnd - pitchStart ) / nSubframes; + pitchBuf[0] = pitchStart + pitchDelta; + for ( i = 1; i < nSubframes; i++ ) + { + pitchBuf[i] = pitchBuf[i - 1] + pitchDelta; + } + + return; +} diff --git a/lib_dec/post_dec.c b/lib_dec/post_dec.c new file mode 100644 index 0000000000..0d7bd7e7c7 --- /dev/null +++ b/lib_dec/post_dec.c @@ -0,0 +1,479 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Function prototypes + *---------------------------------------------------------------------*/ + +static void bass_pf_1sf_delay( float *syn, const int16_t *T_sf, const float *gainT_sf, const int16_t l_frame, const int16_t l_subfr, float *bpf_noise_buf, int16_t *gain_factor_param, const int16_t disable_bpf, float *mem_deemph_err, float *lp_ener ); + + +/*---------------------------------------------------------------------* + * post_decoder() + * + * Perform post-processing + *---------------------------------------------------------------------*/ + +void post_decoder( + Decoder_State *st, /* i/o: decoder memory state pointer */ + float synth_buf[], + const float pit_gain[], + const int16_t pitch[], + float signal_out[], + float *bpf_noise_buf ) +{ + int16_t L_frame, nb_subfr, i; + float *synth2; + float *synth; + int16_t pfstat_on_previous; + int16_t pitch_gain_adjust[NB_SUBFR16k]; + float synth_buf2[NBPSF_PIT_MAX + L_FRAME_MAX + M]; + int32_t brate; + float A[M + 1]; + float pitch_buf[NB_SUBFR16k]; + float tmp; + int16_t L_subfr; + + L_frame = st->L_frame; + nb_subfr = st->nb_subfr; + brate = ( st->core_brate > SID_2k40 ) ? st->total_brate : st->last_active_brate; + pfstat_on_previous = 0; + if ( st->hPFstat != NULL ) + { + pfstat_on_previous = st->hPFstat->on; + st->hPFstat->on = 0; + } + set_s( pitch_gain_adjust, st->bpf_gain_param, nb_subfr ); + synth = synth_buf + st->hTcxDec->old_synth_len; + synth2 = synth_buf2 + NBPSF_PIT_MAX; + if ( st->hBPF != NULL ) + { + mvr2r( st->hBPF->pst_old_syn, synth_buf2, NBPSF_PIT_MAX ); + } + + if ( st->tcxonly ) + { + /* High bitrates (48kbps and above), high sampling rates (25.6kHz and above) */ + + mvr2r( synth, synth2, L_frame ); + + if ( pfstat_on_previous ) + { + /* Past frame was low-bitrate with formant post-filter */ + lsp2a_stab( st->lsp_old, A, M ); + mvr2r( st->hPFstat->mem_pf_in + L_SYN_MEM - M, synth - M, M ); + L_subfr = st->L_frame / st->nb_subfr; + residu( A, M, synth, synth_buf, L_subfr ); + syn_filt( A, M, synth_buf, synth2, L_subfr, st->hPFstat->mem_stp + L_SYN_MEM - M, 0 ); + scale_st( synth, synth2, &st->hPFstat->gain_prec, L_subfr, -1 ); + blend_subfr2( synth2 + L_subfr / 2, synth + L_subfr / 2, synth2 + L_subfr / 2 ); + } + } + else + { + /* Low bitrates (32kbps and below), low sampling rates (12.8kHz and 16kHz) */ + if ( st->last_bwidth == NB ) + { + /* NB Post-filter (pitch+formant post-filter) */ + mvr2r( synth, synth_buf, L_frame ); + tmp = synth[-1]; + preemph( synth_buf, st->preemph_fac, L_frame, &tmp ); + + tmp = 0.0f; + for ( i = 0; i < nb_subfr; i++ ) + { + pitch_buf[i] = pitch[i]; + } + + if ( pfstat_on_previous == 0 ) + { + st->hPFstat->reset = 1; + } + + if ( st->bwidth == NB ) + { + st->hPFstat->on = 1; + nb_post_filt( L_frame, L_SUBFR, st->hPFstat, &tmp, 0, synth_buf, st->mem_Aq, pitch_buf, GENERIC, st->BER_detect, st->lp_noise > LP_NOISE_THRESH ? 1 : ( ( st->core != ACELP_CORE ) || ( st->coder_type == UNVOICED ) ) ); + } + else + { + st->hPFstat->on = 0; + nb_post_filt( L_frame, L_SUBFR, st->hPFstat, &tmp, 0, synth_buf, st->mem_Aq, pitch_buf, AUDIO, st->BER_detect, st->lp_noise > LP_NOISE_THRESH ? 1 : ( ( st->core != ACELP_CORE ) || ( st->coder_type == UNVOICED ) ) ); + } + + + mvr2r( synth_buf, synth2, L_frame ); + tmp = synth2[-1]; + deemph( synth2, st->preemph_fac, L_frame, &tmp ); + } + else + { + /* Formant Post-filter */ + if ( pfstat_on_previous == 0 ) + { + st->hPFstat->reset = 1; + } + + if ( st->bwidth >= WB ) + { + st->hPFstat->on = 1; + formant_post_filt( st->hPFstat, synth, st->mem_Aq, synth2, L_frame, L_SUBFR, st->lp_noise, brate, 0 ); + } + else + { + st->hPFstat->on = 0; + formant_post_filt( st->hPFstat, synth, st->mem_Aq, synth2, L_frame, L_SUBFR, st->lp_noise, brate, 1 ); + } + } + + /*Bass Post-filter */ + bass_pf_1sf_delay( synth2, pitch, pit_gain, L_frame, L_SUBFR, bpf_noise_buf, pitch_gain_adjust, ( st->lp_noise > LP_NOISE_THRESH && st->narrowBand ) ? 1 : 0, &( st->hBPF->pst_mem_deemp_err ), &( st->hBPF->pst_lp_ener ) ); + } + + /* Output */ + mvr2r( synth2, signal_out, L_frame ); + + /* Update synth2 memory */ + if ( st->hBPF != NULL ) + { + mvr2r( synth_buf2 + L_frame, st->hBPF->pst_old_syn, NBPSF_PIT_MAX ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * bass_pf_1sf_delay() + * + * Perform low-frequency postfiltering + *---------------------------------------------------------------------*/ + +static void bass_pf_1sf_delay( + float *syn, /* i : synthesis to postfilter */ + const int16_t *T_sf, /* i : Pitch period for all subframes (T_sf[4]) */ + const float *gainT_sf, /* i : Pitch gain for all subframes (gainT_sf[4]) */ + const int16_t L_frame, /* i : frame length (multiple of l_subfr) */ + const int16_t L_subfr_in, /* i : sub-frame length (80/64) */ + float *bpf_noise_buf, /* i : harmoninc filtered signal */ + int16_t *gain_factor_param, /* i : gain factor param 0-> minimum BPF, 3-> full BPF */ + const int16_t disable_bpf, /* i : flag to disable BPF */ + float *mem_deemph_err, /* i/o: Error deemphasis memory */ + float *lp_ener /* i/o: long_term error signal energy */ +) +{ + int16_t i, sf, i_subfr, T, lg, L_subfr; + float tmp, corr, ener, gain; + float noise_buf[( 2 * L_SUBFR )], *noise_in; + float error[L_SUBFR]; + float ener2; + + noise_in = noise_buf; + + sf = 0; + L_subfr = L_subfr_in; + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr, sf++ ) + { + if ( i_subfr == 0 ) + { + L_subfr = L_subfr_in; + } + else if ( i_subfr == L_frame ) + { + L_subfr = 0; + } + else + { + L_subfr = L_subfr_in; + } + + T = T_sf[sf]; + gain = gainT_sf[sf]; + + if ( gain > 1.0f ) + { + gain = 1.0f; + } + if ( gain < 0.0f ) + { + gain = 0.0f; + } + + lg = L_frame - T - i_subfr; + if ( lg < 0 ) + { + lg = 0; + } + if ( lg > L_subfr ) + { + lg = L_subfr; + } + + if ( !disable_bpf && gain > 0 ) + { + corr = 0.01f; + ener = 0.01f; + + for ( i = 0; i < lg; i++ ) + { + corr += syn[i + i_subfr] * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); + ener += ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ) * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); + } + + for ( i = lg; i < L_subfr; i++ ) + { + corr += syn[i + i_subfr] * syn[i + i_subfr - T]; + ener += syn[i + i_subfr - T] * syn[i + i_subfr - T]; + } + gain = corr / ener; + + if ( gain > 1.f ) + { + gain = 1.0f; + } + else if ( gain < 0.f ) + { + gain = 0.f; + } + + ener2 = 0.01f; + for ( i = 0; i < lg; i++ ) + { + error[i] = gain * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); + error[i] = error[i] + 0.9f * *mem_deemph_err; + *mem_deemph_err = error[i]; + ener2 += error[i] * error[i]; + } + + for ( i = lg; i < L_subfr; i++ ) + { + error[i] = 0.5f * gain * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); + error[i] = error[i] + 0.9f * *mem_deemph_err; + *mem_deemph_err = error[i]; + ener2 += error[i] * error[i]; + } + + ener2 = (float) ( 10.f * log10( ener2 ) ); + *lp_ener = (float) ( 0.99f * *lp_ener + 0.01f * ener2 ); + ener2 = (float) pow( 10.f, 0.1f * *lp_ener ); + tmp = 0.5f * corr / ( ener + ener2 ); + + if ( tmp > 0.5f ) + { + tmp = 0.5f; + } + else if ( tmp < 0.f ) + { + tmp = 0.0f; + } + + /*Adjust gain*/ + /* full gain = gainLTP*0.5*/ + /* adaptive gain = gainLTP*0.5*gain_factor*0.5*/ + tmp *= max( 0.5f * gain_factor_param[sf], 0.125f ); + + /* calculate noise based on voiced pitch */ + for ( i = 0; i < lg; i++ ) + { + noise_in[i] = tmp * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); + } + + for ( i = lg; i < L_subfr; i++ ) + { + noise_in[i] = tmp * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); + /*It simulates an extrapolation of the buffer syn: syn[i+i_subfr+T]=syn[i+i_subfr] + * -> reduce nrg of noise_in and avoid too much post-filtering*/ + /*noise_in[i] = tmp * (syn[i+i_subfr] - 0.5f*syn[i+i_subfr-T] - 0.5f*syn[i+i_subfr]);*/ + /*->noise_in[i] = tmp * 0.5f * (syn[i+i_subfr] - syn[i+i_subfr-T]);*/ + noise_in[i] *= 0.5f; + } + } + else + { + set_zero( noise_in, L_subfr ); + } + + /* copy bpf noise signal to buffer */ + mvr2r( noise_in, bpf_noise_buf + i_subfr, L_subfr ); + } + + return; +} +/*---------------------------------------------------------------------* + * cldfb_synth_set_bandsToZero() + * + * + *---------------------------------------------------------------------*/ + +void cldfb_synth_set_bandsToZero( + Decoder_State *st, + float **rAnalysis, + float **iAnalysis, + const int16_t nTimeSlots ) +{ + float nrg_bwddec, nrg_band[CLDFB_NO_CHANNELS_MAX], thr_bwddwc, max_nrg, realQ1, imagQ1; + int16_t flag, offset, WBcnt, i, k, update_perc; + float perc_detect, perc_miss; + + realQ1 = 0.0f; + imagQ1 = 0.0f; + + set_f( nrg_band, 0.0f, CLDFB_NO_CHANNELS_MAX ); + max_nrg = 0.0f; + + offset = 250; + WBcnt = 20; + perc_miss = 0.83f; + perc_detect = 0.93f; + + if ( st->VAD == 1 ) + { + st->active_frame_cnt_bwddec++; + st->total_frame_cnt_bwddec++; + if ( st->active_frame_cnt_bwddec > 99 ) + { + st->active_frame_cnt_bwddec = 100; + } + if ( st->total_frame_cnt_bwddec > 500 ) + { + st->total_frame_cnt_bwddec = 500; + } + + for ( i = 0; i < ( st->cldfbSyn->no_channels - st->cldfbSyn->bandsToZero ); i++ ) + { + nrg_bwddec = 0.0f; + for ( k = 0; k < nTimeSlots; k++ ) + { + realQ1 = rAnalysis[k][i]; + imagQ1 = iAnalysis[k][i]; + nrg_bwddec += ( realQ1 * realQ1 ); + nrg_bwddec += ( imagQ1 * imagQ1 ); + } + nrg_band[i] = ( nrg_bwddec ); + if ( ( nrg_band[i] > max_nrg ) && ( i > 11 ) ) + { + max_nrg = nrg_band[i]; + } + } + for ( ; i < st->cldfbSyn->no_channels; i++ ) + { + nrg_band[i] = 0; + } + + nrg_bwddec = 0; + for ( i = 2; i < 9; i++ ) + { + nrg_bwddec += ( nrg_band[i] / 7.0f ); + } + + thr_bwddwc = ( nrg_bwddec / 512.0f ); + + st->avg_nrg_LT = 0.98999f * st->avg_nrg_LT + 0.009979f * thr_bwddwc; + update_perc = 1; + if ( st->ini_frame >= 25 && thr_bwddwc < st->avg_nrg_LT * 0.005f ) + { + update_perc = 0; + } + + flag = 1; + if ( max_nrg >= thr_bwddwc ) + { + flag = 0; + } + + for ( i = 0; i < WBcnt - 1; i++ ) + { + st->flag_buffer[i] = st->flag_buffer[i + 1]; + } + st->flag_buffer[WBcnt - 1] = flag; + + /*long term percentage*/ + if ( update_perc == 1 ) + { + st->perc_bwddec += ( flag - st->perc_bwddec ) / st->active_frame_cnt_bwddec; + } + if ( ( st->total_frame_cnt_bwddec > offset ) && ( st->active_frame_cnt_bwddec > 50 ) ) + { + if ( ( st->perc_bwddec >= perc_detect || ( st->perc_bwddec >= perc_miss && st->last_flag_filter_NB ) ) && ( sum_s( st->flag_buffer, WBcnt ) != 0 ) ) /* decision hysterysis */ + { + st->cldfbSyn->bandsToZero = ( st->cldfbSyn->no_channels - 10 ); + st->last_flag_filter_NB = 1; /* VAD processing must be dependent on hysterysis, as if hysterysis fails, but threshold passes, we dont want next VAD frames to have NB only */ + } + else + { + st->last_flag_filter_NB = 0; + } + } + else + { + st->last_flag_filter_NB = 0; + } + if ( sum_s( st->flag_buffer, WBcnt ) == 0 ) + { + st->perc_bwddec = 0.0f; + st->active_frame_cnt_bwddec = 0; + st->total_frame_cnt_bwddec = 0; + st->last_flag_filter_NB = 0; + } + } + else + { + if ( st->last_flag_filter_NB == 1 ) + { + st->cldfbSyn->bandsToZero = st->last_active_bandsToZero_bwdec; + } + st->total_frame_cnt_bwddec++; + if ( st->total_frame_cnt_bwddec > 500 ) + { + st->total_frame_cnt_bwddec = 500; + } + } + + st->last_active_bandsToZero_bwdec = st->cldfbSyn->bandsToZero; + + return; +} diff --git a/lib_dec/ppp_dec.c b/lib_dec/ppp_dec.c new file mode 100644 index 0000000000..24ad0146a0 --- /dev/null +++ b/lib_dec/ppp_dec.c @@ -0,0 +1,183 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * DTFS_dequant_cw() + * + * DTFS dequantization + *-------------------------------------------------------------------*/ + +static void DTFS_dequant_cw( + int16_t pl, /* i : Previous lag */ + int16_t POWER_IDX, /* i : POWER index */ + const int16_t *AMP_IDX, /* i : Amp Shape index */ + float *lastLgainD, /* i/o: low band last gain */ + float *lastHgainD, /* i/o: high band last gain */ + float *lasterbD, /* i/o: last frame ERB vector */ + DTFS_STRUCTURE *X, /* o : DTFS structure dequantized */ + int16_t num_erb /* i : Number of ERB bands */ +) +{ + float tmp, mfreq[NUM_ERB_WB], curr_erb[NUM_ERB_WB]; + int16_t slot[NUM_ERB_WB]; + const float( *PowerCB )[2] = NULL; + + if ( num_erb == NUM_ERB_NB ) + { + PowerCB = PowerCB_NB; + } + else if ( num_erb == NUM_ERB_WB ) + { + PowerCB = PowerCB_WB; + } + + /* Amplitude Dequantization */ + erb_add( curr_erb, X->lag, lasterbD, pl, AMP_IDX, num_erb ); + curr_erb[0] = curr_erb[1] * 0.3f; + curr_erb[num_erb - 2] = curr_erb[num_erb - 3] * 0.3f; + curr_erb[num_erb - 1] = 0; + erb_slot( X->lag, slot, mfreq, num_erb ); + DTFS_erb_inv( curr_erb, slot, mfreq, X, num_erb ); + + /* Back up the lasterbD memory after power normalization */ + DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, X ); + DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, 1.0, X ); + DTFS_to_erb( *X, lasterbD ); + + /* Power Dequantization */ + *lastLgainD += (float) PowerCB[POWER_IDX][0]; + *lastHgainD += (float) PowerCB[POWER_IDX][1]; + tmp = (float) pow( 10.0, (double) ( *lastLgainD ) ) / X->lag; + + if ( !( tmp >= 0.0 ) ) + { + tmp = 0.0; + } + + DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, tmp, X ); + tmp = (float) pow( 10.0, (double) ( *lastHgainD ) ) / X->lag; + + if ( !( tmp >= 0.0 ) ) + { + tmp = 0.0; + } + + DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, tmp, X ); + + return; +} + +/*------------------------------------------------------------------- + * ppp_quarter_decoder() + * + * PPP quarter decoder + *-------------------------------------------------------------------*/ + +ivas_error ppp_quarter_decoder( + Decoder_State *st, /* i/o: decoder state structure */ + DTFS_STRUCTURE *CURRCW_Q_DTFS, /* i/o: Current CW DTFS */ + int16_t prevCW_lag, /* i : Previous lag */ + float *lastLgainD, /* i/o: Last gain lowband */ + float *lastHgainD, /* i/o: Last gain highwband */ + float *lasterbD, /* i/o: Last ERB vector */ + int16_t bfi, /* i : FER flag */ + DTFS_STRUCTURE PREV_CW_D /* i : Previous DTFS */ +) +{ + DTFS_STRUCTURE *PREVDTFS; + float tmp, temp_pl = (float) prevCW_lag, temp_l = (float) CURRCW_Q_DTFS->lag; + int16_t l = CURRCW_Q_DTFS->lag; + int16_t POWER_IDX, AMP_IDX[2]; + float Erot = 0.0, z = 0.0; + int16_t num_erb = 24; + ivas_error error; + + error = IVAS_ERR_OK; + if ( ( error = DTFS_new( &PREVDTFS ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( CURRCW_Q_DTFS->upper_cut_off_freq == 4000.0 ) + { + num_erb = 22; + } + else if ( CURRCW_Q_DTFS->upper_cut_off_freq == 6400.0 ) + { + num_erb = 24; + } + + DTFS_copy( PREVDTFS, PREV_CW_D ); + if ( bfi == 0 ) + { + POWER_IDX = get_next_indice( st, 6 ); + AMP_IDX[0] = get_next_indice( st, 6 ); + AMP_IDX[1] = get_next_indice( st, 6 ); + + /* Amplitude Dequantization */ + DTFS_dequant_cw( prevCW_lag, POWER_IDX, AMP_IDX, lastLgainD, lastHgainD, lasterbD, CURRCW_Q_DTFS, num_erb ); + } + + /* Copying phase spectrum over */ + DTFS_adjustLag( PREVDTFS, l ); + + z = ( ( L_FRAME - temp_l ) * ( temp_l + temp_pl ) ) / ( 2 * temp_l * temp_pl ); + + Erot = (float) ( temp_l - rint_new( temp_l * ( z - floor( z ) ) ) ); + + DTFS_phaseShift( PREVDTFS, (float) ( PI2 * Erot / CURRCW_Q_DTFS->lag ) ); + DTFS_car2pol( PREVDTFS ); + + mvr2r( PREVDTFS->b, CURRCW_Q_DTFS->b, (int16_t) ( CURRCW_Q_DTFS->lag >> 1 ) + 1 ); + + DTFS_pol2car( CURRCW_Q_DTFS ); + + tmp = (float) get_next_indice( st, 3 ); + DTFS_phaseShift( CURRCW_Q_DTFS, (float) ( PI2 * ( tmp - 3 ) / CURRCW_Q_DTFS->lag ) ); + + count_free( PREVDTFS ); + + return error; +} diff --git a/lib_dec/pvq_core_dec.c b/lib_dec/pvq_core_dec.c new file mode 100644 index 0000000000..0ef00c6ae3 --- /dev/null +++ b/lib_dec/pvq_core_dec.c @@ -0,0 +1,509 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "stl.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local prototypes + * + *-------------------------------------------------------------------*/ + +static int16_t get_pvq_splits( Decoder_State *st, PVQ_DEC_HANDLE hPVQ, const int16_t band_bits, const int16_t sfmsize, int16_t *bits ); + +static void densitySymbolIndexDecode( Decoder_State *st, PVQ_DEC_HANDLE hPVQ, int16_t density, int16_t opp_sz, int16_t near_sz, int16_t *index_phi ); + +static void decode_energies( Decoder_State *st, PVQ_DEC_HANDLE hPVQ, int16_t Np, int16_t *dim_part, int16_t *bits_part, int16_t *g_part, int16_t qband, int16_t *bits_left, int16_t n, const int16_t strict_bits ); + +/*-------------------------------------------------------------------* + * pvq_decode_band() + * + *-------------------------------------------------------------------*/ + +static void pvq_decode_band( + Decoder_State *st, /* i/o: Decoder state */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + int16_t *pulse_vector, /* i/o: decoded integer shape vector */ + int16_t *npulses, /* i/o: number of pulses */ + float *coefs_quant, /* i/o: decoded coefficients buffer */ + const int16_t sfmsize, /* i : band length */ + const int16_t band_bits, /* i : assigned bit budget */ + int16_t *bits_left, /* i/o: number of bits / bits remaining */ + const int16_t strict_bits /* i : Conservative rounding flag */ +) +{ + int16_t K_val; + int16_t j, Np; + int16_t part_start[MAX_SPLITS + 1], dim_part[MAX_SPLITS + 1], bits_part[MAX_SPLITS + 1]; + int16_t pool_tot, pool_part, dim_parts; + float g_part[MAX_SPLITS]; + int16_t g_part_s[MAX_SPLITS]; + int16_t sg_part[MAX_SPLITS + 1]; + int16_t idx_sort[MAX_SPLITS + 1]; + int16_t js, band_bits_tot, split_bit; + + Np = get_pvq_splits( st, hPVQ, band_bits, sfmsize, &split_bit ); + band_bits_tot = band_bits - split_bit; + + dim_parts = (int16_t) intLimCDivPos( sfmsize, Np ); + set_s( dim_part, dim_parts, Np - 1 ); + dim_part[Np - 1] = sfmsize - dim_parts * ( Np - 1 ); + + part_start[0] = 0; + for ( j = 1; j < Np; j++ ) + { + part_start[j] = part_start[j - 1] + dim_part[j - 1]; + } + + set_s( g_part_s, -32768, Np ); + if ( Np > 1 ) + { + decode_energies( st, hPVQ, Np, dim_part, bits_part, g_part_s, band_bits_tot, bits_left, sfmsize, strict_bits ); + } + else + { + bits_part[0] = band_bits_tot; + } + + pool_tot = 0; + pool_part = 0; + + for ( j = 0; j < Np; j++ ) + { + g_part[j] = -( (float) g_part_s[j] ) / 32768; + g_part_s[j] = -g_part_s[j]; + } + + srt_vec_ind( g_part_s, sg_part, idx_sort, Np ); + for ( j = 0; j < Np; j++ ) + { + js = idx_sort[Np - 1 - j]; + pool_part = shrtCDivSignedApprox( pool_tot, Np - j ); + bits_part[js] = max( 0, min( bits_part[js] + pool_part, 256 ) ); + + conservativeL1Norm( dim_part[js], bits_part[js], strict_bits, *bits_left, pool_tot, *npulses, /* inputs */ + &K_val, bits_left, &pool_tot, npulses ); /* outputs */ + if ( K_val >= 1 ) + { + pvq_decode( st, hPVQ, coefs_quant + part_start[js], pulse_vector + part_start[js], K_val, dim_part[js], g_part[js] ); + } + else + { + set_f( coefs_quant + part_start[js], 0.0f, dim_part[js] ); + set_s( pulse_vector + part_start[js], 0, dim_part[js] ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * pvq_decode_frame() + * + *-------------------------------------------------------------------*/ + +void pvq_decode_frame( + Decoder_State *st, /* i/o: Decoder state */ + float *coefs_quant, /* o : quantized coefficients */ + int16_t *npulses, /* o : number of pulses per band */ + int16_t *pulse_vector, /* o : non-normalized pulse shapes */ + const int16_t *sfm_start, /* i : indices of first coeffs in the bands */ + const int16_t *sfm_end, /* i : indices of last coeffs in the bands */ + const int16_t *sfmsize, /* i : band sizes */ + const int16_t nb_sfm, /* i : total number of bands */ + const int16_t *R, /* i : bitallocation per band (Q3) */ + const int16_t pvq_bits, /* i : number of bits avaiable */ + const int16_t core /* i : core */ +) +{ + int16_t i, j; + int16_t band_bits, bits_left; + int16_t bit_pool = 0; + int16_t coded_bands, bands_to_code; + int16_t curr_bits; + int16_t R_sort[NB_SFM]; /*Q3*/ + int16_t is, i_sort[NB_SFM]; + int16_t strict_bits; + + PVQ_DEC_DATA pvq_dec; + PVQ_DEC_HANDLE hPVQ = &pvq_dec; + + rc_dec_init( st, hPVQ, pvq_bits ); + curr_bits = ( pvq_bits - RC_BITS_RESERVED ) << 3; + bands_to_code = 0; + for ( i = 0; i < nb_sfm; i++ ) + { + if ( R[i] > 0 ) + { + bands_to_code++; + } + } + + if ( core == ACELP_CORE ) + { + strict_bits = PVQ_CONS; + srt_vec_ind( R, R_sort, i_sort, nb_sfm ); + } + else + { + strict_bits = PVQ_NEAREST; + for ( i = 0; i < nb_sfm; i++ ) + { + i_sort[i] = i; + } + } + + coded_bands = 0; + for ( i = 0; i < nb_sfm; i++ ) + { + is = i_sort[i]; + if ( R[is] > 0 ) + { + bandBitsAdjustment( hPVQ->rc_num_bits, hPVQ->rc_range, curr_bits, bands_to_code, bands_to_code - coded_bands, sfmsize[is], R[is], bit_pool, /* inputs */ + &band_bits, &bits_left, &bit_pool ); /* outputs */ + + pvq_decode_band( st, hPVQ, &pulse_vector[sfm_start[is]], &npulses[is], &coefs_quant[sfm_start[is]], sfmsize[is], band_bits, &bits_left, strict_bits ); + + /* Updates */ + coded_bands++; + } + else + { + for ( j = sfm_start[is]; j < sfm_end[is]; j++ ) + { + coefs_quant[j] = 0.0f; + pulse_vector[j] = 0; + } + } + } + + rc_dec_finish( st, hPVQ ); + + return; +} + +/*-------------------------------------------------------------------* + * pvq_core_dec() + * + *-------------------------------------------------------------------*/ + +/*! r: number of bits decoded */ +int16_t pvq_core_dec( + Decoder_State *st, /* i/o: Decoder state */ + const int16_t *sfm_start, /* i : indices of first coeffs in the bands */ + const int16_t *sfm_end, /* i : indices of last coeffs in the bands */ + const int16_t *sfmsize, /* i : band sizes */ + float coefs_quant[], /* o : output MDCT */ + const int16_t bits_tot, /* i : bit budget */ + const int16_t nb_sfm, /* i : number of bands */ + int16_t *R, /* i/o: Bit allocation/Adjusted bit alloc.(Q3) */ + int16_t *Rs, /* i/o: Integer bit allocation */ + int16_t *npulses, /* o : number of pulses per band */ + int16_t *maxpulse, /* o : maximum pulse per band */ + const int16_t core /* i : core */ +) +{ + int16_t i; + int16_t R_upd; + int16_t ord[NB_SFM_MAX]; + int16_t pulse_vector[L_SPEC48k_EXT]; + int16_t pvq_bits; + int16_t gain_bits_array[NB_SFM]; + float fg_pred[NB_SFM_MAX]; + + if ( st->hHQ_core != NULL ) + { + st->hHQ_core->ber_occured_in_pvq = 0; + } + + R_upd = bits_tot * 8; + assign_gain_bits( core, nb_sfm, sfmsize, R, gain_bits_array, &R_upd ); + + pvq_bits = R_upd >> 3; + + pvq_decode_frame( st, coefs_quant, npulses, pulse_vector, sfm_start, sfm_end, sfmsize, nb_sfm, R, pvq_bits, core ); + + if ( Rs != NULL ) + { + for ( i = 0; i < nb_sfm; i++ ) + { + Rs[i] = Rs[i] * ( npulses[i] > 0 ); /* Update Rs in case no pulses were assigned */ + } + } + + for ( i = 0; i < nb_sfm; i++ ) + { + ord[i] = i; + R[i] = R[i] * ( npulses[i] > 0 ); /* Update in case no pulses were assigned */ + } + + get_max_pulses( sfm_start, sfm_end, ord, npulses, nb_sfm, pulse_vector, maxpulse ); + + fine_gain_pred( sfm_start, sfm_end, sfmsize, ord, npulses, maxpulse, R, nb_sfm, coefs_quant, pulse_vector, fg_pred, core ); + + fine_gain_dec( st, ord, nb_sfm, gain_bits_array, fg_pred ); + + if ( st->hHQ_core != NULL ) + { + if ( st->hHQ_core->ber_occured_in_pvq != 0 ) + { + set_f( fg_pred, ( 1.0f / 8192.0f ), nb_sfm ); /* low complex ECU action in case of detetected BER in PVQ decoding */ + } + } + + apply_gain( ord, sfm_start, sfm_end, nb_sfm, fg_pred, coefs_quant ); + + return (int16_t) bits_tot; +} + + +/*-------------------------------------------------------------------* + * decode_energies() + * + *-------------------------------------------------------------------*/ + +static void decode_energies( + Decoder_State *st, + PVQ_DEC_HANDLE hPVQ, + int16_t Np, + int16_t *dim_part, + int16_t *bits_part, + int16_t *g_part, + int16_t qband, + int16_t *bits_left, + int16_t dim, + const int16_t strict_bits ) +{ + int16_t res; + int16_t i, l_Np, r_Np; + int16_t l_bits, r_bits, l_dim, r_dim; + int16_t il, ir; + int16_t oppRQ3, qzero; + int16_t index_phi = -1; + l_Np = Np >> 1; + r_Np = Np - l_Np; + + l_bits = 0; + l_dim = 0; + for ( i = 0; i < l_Np; i++ ) + { + l_dim += dim_part[i]; + } + r_dim = dim - l_dim; + + obtainEnergyQuantizerDensity( dim, qband, &res ); + rangeCoderFinalizationFBits( hPVQ->rc_num_bits, hPVQ->rc_range, &qzero ); + densitySymbolIndexDecode( st, hPVQ, res, r_dim, l_dim, &index_phi ); + densityAngle2RmsProjDec( res, index_phi, &ir, &il, &oppRQ3 ); + for ( i = 0; i < l_Np; i++ ) + { + g_part[i] = ( (int16_t) g_part[i] * il + 16384 ) >> 15; + } + + for ( i = l_Np; i < Np; i++ ) + { + g_part[i] = ( (int16_t) g_part[i] * ir + 16384 ) >> 15; + } + + + NearOppSplitAdjustment( qband, qzero, hPVQ->rc_num_bits, hPVQ->rc_range, *bits_left, strict_bits, Np, dim_part[0], dim_part[Np - 1], l_dim, r_dim, oppRQ3, &l_bits, &r_bits, bits_left ); + if ( l_Np > 1 ) + { + decode_energies( st, hPVQ, l_Np, dim_part, bits_part, g_part, l_bits, bits_left, l_dim, strict_bits ); + } + else + { + bits_part[0] = l_bits; + } + + if ( r_Np > 1 ) + { + decode_energies( st, hPVQ, r_Np, &dim_part[l_Np], &bits_part[l_Np], &g_part[l_Np], r_bits, bits_left, r_dim, strict_bits ); + } + else + { + bits_part[1] = r_bits; + } + + return; +} + +/*-------------------------------------------------------------------* + * densitySymbolIndexDecode() + * + *-------------------------------------------------------------------*/ + +static void densitySymbolIndexDecode( + Decoder_State *st, + PVQ_DEC_HANDLE hPVQ, + int16_t density, + int16_t opp_sz, + int16_t near_sz, + int16_t *index_phi ) +{ + + int32_t tmp1; + int16_t tmp2; + int32_t cum_freq = 0, dec_freq, tot; + uint32_t sym_freq = 1; + int16_t angle, c; + int16_t res1, res2, res_c, res_alpha; + int16_t res = density; + int16_t r_dim = opp_sz; + int16_t l_dim = near_sz; + int16_t alpha; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + if ( ( 0xFFFE & density ) == 0 ) + { /* odd density exit */ + *index_phi = -1; + return; + } +#define WMC_TOOL_MAN + angle = atan2_fx( SQRT_DIM_fx[r_dim], SQRT_DIM_fx[l_dim] ); +#ifndef BASOP_NOGLOB + angle = shl( angle, 1 ); +#else /* BASOP_NOGLOB */ + angle = shl_o( angle, 1, &Overflow ); +#endif /* BASOP_NOGLOB */ + angle = mult_r( angle, 20861 ); + c = mult_r( res, angle ); +#undef WMC_TOOL_MAN + + res_c = res - c; + if ( c == 0 ) + { + tot = res * ( res + 1 ) + 1; + dec_freq = rc_decode( &st->BER_detect, hPVQ, tot ); + alpha = (int16_t) floor_sqrt_exact( (uint32_t) ( res + 1 ) * ( res + 1 ) - dec_freq ) + res + 1; + sym_freq = 2 * ( res - alpha ) + 1; + cum_freq = alpha * ( 2 * ( res + 1 ) - alpha ); + } + else if ( c == res ) + { + tot = res * ( res + 1 ) + 1; + dec_freq = rc_decode( &st->BER_detect, hPVQ, tot ); + alpha = (int16_t) floor_sqrt_exact( (uint32_t) dec_freq ); + sym_freq = 2 * alpha + 1; + cum_freq = alpha * alpha; + } + else + { + tot = res * c * ( res - c ) + res + 1; + dec_freq = rc_decode( &st->BER_detect, hPVQ, tot ); + if ( dec_freq < tot - ( res + 1 ) - ( res - ( c + 1 ) ) * ( res - c ) * c + c + 1 ) + { + alpha = ( res_c - 1 + (int16_t) floor_sqrt_exact( (uint32_t) res_c * ( res_c + 4 * dec_freq - 2 ) + 1 ) ) / ( 2 * res_c ); + sym_freq = 2 * alpha * res_c + 1; + cum_freq = alpha * ( ( alpha - 1 ) * res_c + 1 ); + } + else + { + res1 = res + 1; + res2 = 2 * res + 1; + tmp1 = ( c * res2 + 1 ) * ( c * res2 + 1 ) + 4 * c * ( ( tot - dec_freq - res1 ) - c * ( res * res1 ) ); + tmp2 = (int16_t) floor_sqrt_exact( (uint32_t) tmp1 ); + if ( tmp2 * tmp2 != tmp1 ) + { + tmp2++; /* convert to ceil */ + } + + alpha = ( c * ( 2 * res + 1 ) + 1 - tmp2 ) / ( 2 * c ); + + res_alpha = res - alpha; + sym_freq = 2 * res_alpha * c + 1; + cum_freq = tot - ( res + 1 ) - res_alpha * ( res_alpha + 1 ) * c + alpha; + } + } + rc_dec_update( st, hPVQ, cum_freq, sym_freq ); + + *index_phi = alpha; + + return; +} + + +/*--------------------------------------------------------------------------* + * get_pvq_splits() + * + * Retrieve the number of segments + *--------------------------------------------------------------------------*/ + +/*! r: Number of segments */ +static int16_t get_pvq_splits( + Decoder_State *st, /* i/o: Decoder state */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + const int16_t band_bits, /* i : Band bit-budget */ + const int16_t sfmsize, /* i : Band width */ + int16_t *bits /* o : Used bits */ +) +{ + int16_t Np; + uint32_t flag; + + Np = (int16_t) ( intLimCDivPos( band_bits, 67 ) >> 2 ); + if ( band_bits - 268 * Np != 0 || Np == 0 ) /* L_msu */ + { + Np++; /* ceil */ + } + *bits = 0; + if ( Np < MAX_SPLITS && ( band_bits - ( 8 * sfmsize * THR_ADD_SPLIT ) > 0 ) ) + { + flag = rc_dec_bits( st, hPVQ, 1 ); + *bits = 8; + if ( flag ) + { + Np += 1; + } + } + + Np = max( Np, (int16_t) ( ceil( (float) sfmsize / PVQ_MAX_BAND_SIZE ) ) ); + Np = min( MAX_SPLITS, Np ); + Np = min( (int16_t) floor( (float) sfmsize / MIN_BAND_SIZE ), Np ); + + return Np; +} diff --git a/lib_dec/pvq_decode.c b/lib_dec/pvq_decode.c new file mode 100644 index 0000000000..c9a2bf41ab --- /dev/null +++ b/lib_dec/pvq_decode.c @@ -0,0 +1,112 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Function pvq_decode() * + * * + * PVQ subvector decoding algorithm * + *-------------------------------------------------------------------*/ + +void pvq_decode( + Decoder_State *st, /* i/o: Decoder state */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + float *xq, /* o : decoded vector (scaled float) */ + int16_t *y, /* o : decoded vector (non-scaled short)*/ + const int16_t k_val, /* i : number of allocated pulses */ + const int16_t dim, /* i : Length of vector */ + const float gain /* i : Gain */ +) +{ + int16_t i; + float gain_fac; + float yy; + int16_t output[PVQ_MAX_BAND_SIZE]; /* short interface as in STL-FIP */ + uint32_t h_mem[1 + KMAX_NON_DIRECT + 1]; /* allocate max offset memory for dim 6 */ + PvqEntry entry; + + entry = get_size_mpvq_calc_offset( dim, k_val, h_mem ); /* get size & prepare H(adaptive table for entry.size=N_MPVQ(dim,k_val) */ + + if ( dim != 1 ) + { + entry.lead_sign_ind = (int16_t) rc_dec_bits( st, hPVQ, 1 ); + entry.index = rc_dec_uniform( st, hPVQ, entry.size ); /* NB so far no PVQ-size wc is exactly 2^32-1 */ + + /* safety check in case of bit errors */ + if ( st->hHQ_core != NULL ) + { + if ( entry.index >= entry.size || st->hHQ_core->ber_occured_in_pvq != 0 ) + { + st->hHQ_core->ber_occured_in_pvq = 1; + st->BER_detect = 1; + entry.index = 0; /* a zero index will essentially disable PVQ index decompostion complexity */ + } + } + } + else + { + entry.lead_sign_ind = (int16_t) rc_dec_bits( st, hPVQ, 1 ); /* always a single sign bit */ + entry.index = 0; + } + mpvq_decode_vec( &entry, h_mem, output ); + + mvs2s( output, y, dim ); + + /* Find decoded vector energy */ + yy = 0; + for ( i = 0; i < dim; i++ ) + { + yy += y[i] * y[i]; + } + + /* Apply scaling, always energy in yy */ + gain_fac = gain * 1.0f / (float) sqrt( yy ); + for ( i = 0; i < dim; i++ ) + { + xq[i] = y[i] * gain_fac; + } + + return; +} diff --git a/lib_dec/range_dec.c b/lib_dec/range_dec.c new file mode 100644 index 0000000000..55010e0b36 --- /dev/null +++ b/lib_dec/range_dec.c @@ -0,0 +1,248 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local prototypes + *-------------------------------------------------------------------*/ + +static int16_t rc_dec_read( Decoder_State *st, PVQ_DEC_HANDLE hPVQ ); + + +/*-------------------------------------------------------------------* + * rc_dec_init() + * + * Initialize range coder + *-------------------------------------------------------------------*/ + +void rc_dec_init( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + int16_t tot_bits /* i : Total bit budget */ +) +{ + int16_t i; + + hPVQ->rc_low = 0; + hPVQ->rc_range = 0xffffffff; + hPVQ->rc_num_bits = 0; + hPVQ->rc_offset = tot_bits + st->next_bit_pos; + hPVQ->rc_end = hPVQ->rc_offset; + + for ( i = 0; i < 4; i++ ) + { + hPVQ->rc_low = ( hPVQ->rc_low << 8 ) + rc_dec_read( st, hPVQ ); + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_decode() + * + * Decode symbol + *-------------------------------------------------------------------*/ + +/*! r: Decoded value */ +uint32_t rc_decode( + int16_t *BER_detect, /* o : Bit error detection flag */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + uint32_t tot /* i : Total cumulative frequency */ +) +{ + uint32_t inv, val; + int16_t exp; + + inv = UL_inverse( tot, &exp ); + hPVQ->rc_help = UMult_32_32( hPVQ->rc_range, inv ); + hPVQ->rc_help = hPVQ->rc_help >> ( exp - 32 ); + + /* safety check in case of bit errors */ + val = hPVQ->rc_low / hPVQ->rc_help; + if ( val > tot ) + { + *BER_detect = 1; + return 0; + } + + return val; +} + +/*-------------------------------------------------------------------* + * rc_dec_update() + * + * Update range coder + *-------------------------------------------------------------------*/ + +void rc_dec_update( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + const uint32_t cum_freq, /* i : Cumulative frequency */ + const uint32_t sym_freq /* i : Symbol frequency */ +) +{ + hPVQ->rc_low = hPVQ->rc_low - cum_freq * hPVQ->rc_help; + hPVQ->rc_range = hPVQ->rc_help * sym_freq; + + while ( hPVQ->rc_range < ( 1 << 24 ) ) + { + hPVQ->rc_num_bits += 8; + hPVQ->rc_low = ( hPVQ->rc_low << 8 ) + rc_dec_read( st, hPVQ ); + hPVQ->rc_range <<= 8; + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_dec_bits() + * + * Decode bits + *-------------------------------------------------------------------*/ + +/*! r: Decoded value */ +uint32_t rc_dec_bits( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + const int16_t bits /* i : Number of bits */ +) +{ + uint32_t value; + + hPVQ->rc_num_bits += bits; + + if ( bits > 16 ) + { + hPVQ->rc_offset -= bits - 16; + value = get_indice( st, hPVQ->rc_offset, bits - 16 ) << 16; + hPVQ->rc_offset -= 16; + value |= get_indice( st, hPVQ->rc_offset, 16 ); + } + else + { + hPVQ->rc_offset -= bits; + value = get_indice( st, hPVQ->rc_offset, bits ); + } + + return value; +} + +/*-------------------------------------------------------------------* + * rc_dec_uniform() + * + * Encode with uniform distribution + *-------------------------------------------------------------------*/ + +/*! r: Decoded value */ +uint32_t rc_dec_uniform( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ + const uint32_t tot /* i : Maximum value */ +) +{ + uint32_t value; + int16_t n; + + n = 32 - norm_ul( tot - 1 ); /* aligned to BASOP */ + + if ( n <= 8 ) + { + value = rc_decode( &st->BER_detect, hPVQ, tot ); + rc_dec_update( st, hPVQ, value, 1 ); + } + else + { + n -= 8; + value = rc_decode( &st->BER_detect, hPVQ, ( tot >> n ) + 1 ); + rc_dec_update( st, hPVQ, value, 1 ); + value <<= n; + value |= rc_dec_bits( st, hPVQ, n ); + } + + return value; +} + +/*-------------------------------------------------------------------* + * rc_dec_finish() + * + * Finalize range decoder + *-------------------------------------------------------------------*/ + +void rc_dec_finish( + Decoder_State *st, /* i/o: Decoder State */ + PVQ_DEC_HANDLE hPVQ /* i/o: PVQ decoder handle */ +) +{ + st->next_bit_pos = hPVQ->rc_end; + + return; +} + + +/*-------------------------------------------------------------------* + * rc_dec_read() + * + * Read a byte from bitstream + *-------------------------------------------------------------------*/ + +static int16_t rc_dec_read( + Decoder_State *st, /* i/o: Decoder state */ + PVQ_DEC_HANDLE hPVQ /* i/o: PVQ decoder handle */ +) +{ + int16_t bits; + + bits = hPVQ->rc_end - st->next_bit_pos; + + /* If the end of the buffer has been reached, pad the last byte with zeros */ + if ( bits < 8 ) + { + return ( get_next_indice( st, bits ) << ( 8 - bits ) ); + } + else + { + return get_next_indice( st, 8 ); + } +} diff --git a/lib_dec/re8_dec.c b/lib_dec/re8_dec.c new file mode 100644 index 0000000000..22a0a538a2 --- /dev/null +++ b/lib_dec/re8_dec.c @@ -0,0 +1,108 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------------- + re8_dec(n, I, k, y) + + MULTI-RATE INDEXING OF A POINT y in THE LATTICE RE8 (INDEX DECODING) + -------------------------------------------------------------------------*/ + +void re8_dec( + int16_t n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ + const uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ + const int16_t k[], /* i : index of v (8-dimensional vector of binary indices) = Voronoi index */ + int16_t y[] /* o : point in RE8 (8-dimensional integer vector) */ +) +{ + int16_t i, m, v[8]; + + /*------------------------------------------------------------------------* + * decode the sub-indices I and kv[] according to the codebook number n: + * if n=0,2,3,4, decode I (no Voronoi extension) + * if n>4, Voronoi extension is used, decode I and kv[] + *------------------------------------------------------------------------*/ + + if ( n <= 4 ) + { + re8_decode_base_index( n, I, y ); + } + else + { + /*--------------------------------------------------------------------* + * compute the Voronoi modulo m = 2^r where r is extension order + *--------------------------------------------------------------------*/ + + m = 1; + while ( n > 4 ) + { + m *= 2; + n -= 2; + } + + /*--------------------------------------------------------------------* + * decode base codebook index I into c (c is an element of Q3 or Q4) + * [here c is stored in y to save memory] + *--------------------------------------------------------------------*/ + + re8_decode_base_index( n, I, y ); + + /*--------------------------------------------------------------------* + * decode Voronoi index k[] into v + *--------------------------------------------------------------------*/ + + re8_k2y( k, m, v ); + + /*--------------------------------------------------------------------* + * reconstruct y as y = m c + v (with m=2^r, r integer >=1) + *--------------------------------------------------------------------*/ + + for ( i = 0; i < 8; i++ ) + { + y[i] = m * y[i] + v[i]; + } + } + + return; +} diff --git a/lib_dec/rom_dec.c b/lib_dec/rom_dec.c new file mode 100644 index 0000000000..a79803ea5c --- /dev/null +++ b/lib_dec/rom_dec.c @@ -0,0 +1,247 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "wmops.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * LP filter for filtering periodic part of excitation in artificial onset + * construction after frame error concealment + *----------------------------------------------------------------------------------*/ + +const float h_low[5] = { -0.0125f, 0.1090f, 0.7813f, 0.1090f, -0.0125f }; + +/* RE8 related tables */ +const int16_t mult_avq_tab[7] = {1,1,1,342,1,1,171}; +const int16_t shift_avq_tab[7] = {0,0,1, 10,2,0, 10}; + +const int16_t hntable[55]= +{ + 0X13, -0X10, -0X0F, -0X11, 0X51, 0X61, -0X0E, -0X12, 0X51, 0X61, + -0X13, -0X0D, 0X51, 0X62, -0X14, 0X81, -0X0C, 0X81, -0X15, -0X17, + 0X71, 0X81, -0X18, -0X16, 0X71, -0X0B, 0X71, -0X1A, 0X71, -0X09, + -0X1B, -0X0A, -0X19, 0X41, -0X1C, -0X08, 0X31, 0X41, -0X1D, -0X06, + 0X31, 0X41, -0X07, 0X41, -0X05, -0X1E, -0X04, -0X1F, 0X11, -0X03, + 0X11, -0X02, 0X11, -0X01, 0X00 +}; + +const int16_t hetable[57]= +{ + 0X12, 0X41, -0X0F, 0X41, -0X10, -0X0E, 0X31, -0X11, 0X31, 0X41, + -0X0D, 0X41, -0X12, 0X42, -0x0C, 0X61, -0X13, 0X61, 0X71, -0X0A, + 0X71, -0X0B, -0X14, -0X15, 0X51, 0X61, -0X16, -0X09, 0X51, 0X61, + -0X17, 0X62, -0X08, 0X81, -0X07, 0X81, -0X18, -0X05, -0X04, -0X03, + 0X51, -0X06, 0X51, -0X19, 0X51, -0X01, -0X1C, -0X02, -0X1B, -0X1A, + 0X11, 0X00, 0X11, -0X1D, 0X11, -0X1E, -0X1F +}; + +const int16_t hestable[15]= +{ + 0X11, 0X21, -0X04, 0X21, -0X03, 0X21, -0X02, -0X05, 0X11, 0X21, -0X01, -0X06, + 0X11, -0X07, -0X00 +}; + +const float lsf_tab[LPC_SHB_ORDER] = +{ + 0.070633653f, 0.11962059f, 0.16925794f, 0.20627696f, 0.24345790f, + 0.31293656f, 0.34594478f, 0.38072862f, 0.410051247f, 0.44525622f +}; + +/* frequency group start bins for transient analysis */ +/* 125 375 750 1250 2000 4000 8000 16000 24000 */ +const int16_t gw[LGW_MAX] = { 1, 3, 6, 10, 16, 32, 64, 128, 192 }; + +/* 31.25 343.75 718.75 1218.75 1968.75 4000 8000 16000 24000 */ +const int16_t gwlpr[LGW_MAX] = { 1, 3*QUOT_LPR_LTR-1, 6*QUOT_LPR_LTR-1, 10*QUOT_LPR_LTR-1, 16*QUOT_LPR_LTR-1, 32*QUOT_LPR_LTR, 64*QUOT_LPR_LTR, 128*QUOT_LPR_LTR, 192*QUOT_LPR_LTR }; + +const float w_hamm48k_2[L_TRANA48k/2] = +{ + 0.080000000000000f, 0.080061898522781f, 0.080247577432747f, 0.080556986759243f, 0.080990043232791f, 0.081546630307495f, 0.082226598192408f, 0.083029763891845f, + 0.083955911254630f, 0.085004791032270f, 0.086176120946031f, 0.087469585762906f, 0.088884837380455f, 0.090421494920485f, 0.092079144831552f, 0.093857341000262f, + 0.095755604871328f, 0.097773425576361f, 0.099910260071357f, 0.102165533282844f, 0.104538638262646f, 0.107028936351231f, 0.109635757349585f, 0.112358399699582f, + 0.115196130672791f, 0.118148186567665f, 0.121213772915079f, 0.124392064692135f, 0.127682206544200f, 0.131083313015096f, 0.134594468785406f, 0.138214728918801f, + 0.141943119116349f, 0.145778635978722f, 0.149720247276233f, 0.153766892226636f, 0.157917481780606f, 0.162170898914830f, 0.166525998932624f, 0.170981609771997f, + 0.175536532321084f, 0.180189540740855f, 0.184939382795015f, 0.189784780187013f, 0.194724428904063f, 0.199756999568084f, 0.204881137793469f, 0.210095464551578f, + 0.215398576541875f, 0.220789046569584f, 0.226265423929784f, 0.231826234797829f, 0.237469982625987f, 0.243195148546199f, 0.249000191778843f, 0.254883550047394f, + 0.260843639998870f, 0.266878857629950f, 0.272987578718653f, 0.279168159261450f, 0.285418935915708f, 0.291738226447335f, 0.298124330183510f, 0.304575528470374f, + 0.311090085135560f, 0.317666246955443f, 0.324302244126969f, 0.330996290743956f, 0.337746585277719f, 0.344551311061912f, 0.351408636781431f, 0.358316716965264f, + 0.365273692483159f, 0.372277691045950f, 0.379326827709445f, 0.386419205381703f, 0.393552915333588f, 0.400726037712459f, 0.407936642058840f, 0.415182787825961f, + 0.422462524902000f, 0.429773894134909f, 0.437114927859666f, 0.444483650427822f, 0.451878078739195f, 0.459296222775571f, 0.466736086136265f, 0.474195666575400f, + 0.481672956540759f, 0.489165943714067f, 0.496672611552554f, 0.504190939831653f, 0.511718905188695f, 0.519254481667438f, 0.526795641263308f, 0.534340354469178f, + 0.541886590821560f, 0.549432319447051f, 0.556975509608890f, 0.564514131253475f, 0.572046155556704f, 0.579569555469978f, 0.587082306265726f, 0.594582386082315f, + 0.602067776468170f, 0.609536462925001f, 0.616986435449943f, 0.624415689076500f, 0.631822224414129f, 0.639204048186324f, 0.646559173767056f, 0.653885621715418f, + 0.661181420308344f, 0.668444606071246f, 0.675673224306430f, 0.682865329619155f, 0.690018986441185f, 0.697132269551692f, 0.704203264595389f, 0.711230068597719f, + 0.718210790476997f, 0.725143551553344f, 0.732026486054283f, 0.738857741616868f, 0.745635479786192f, 0.752357876510168f, 0.759023122630418f, 0.765629424369165f, + 0.772175003811978f, 0.778658099386259f, 0.785076966335314f, 0.791429877187917f, 0.797715122223211f, 0.803931009930835f, 0.810075867466152f, 0.816148041100446f, + 0.822145896665987f, 0.828067819995822f, 0.833912217358185f, 0.839677515885409f, 0.845362163997224f, 0.850964631818323f, 0.856483411590088f, 0.861917018076364f, + 0.867263988963175f, 0.872522885252262f, 0.877692291648358f, 0.882770816940072f, 0.887757094374303f, 0.892649782024062f, 0.897447563149619f, 0.902149146552868f, + 0.906753266924821f, 0.911258685186131f, 0.915664188820559f, 0.919968592201292f, 0.924170736910022f, 0.928269492048706f, 0.932263754543917f, 0.936152449443706f, + 0.939934530206900f, 0.943608978984751f, 0.947174806894860f, 0.950631054287315f, 0.953976791002949f, 0.957211116623676f, 0.960333160714807f, 0.963342083059310f, + 0.966237073883933f, 0.969017354077129f, 0.971682175398738f, 0.974230820681355f, 0.976662604023336f, 0.978976870973391f, 0.981172998706713f, 0.983250396192597f, + 0.985208504353495f, 0.987046796215483f, 0.988764777050081f, 0.990361984507393f, 0.991837988740540f, 0.993192392521341f, 0.994424831347216f, 0.995534973539285f, + 0.996522520331626f, 0.997387205951684f, 0.998128797691797f, 0.998747095971820f, 0.999241934392838f, 0.999613179781951f, 0.999860732228111f, 0.999984525109009f +}; + +const float w_hamm32k_2[L_TRANA32k/2] = +{ + 0.080000000000000f, 0.080139632090179f, 0.080558443590627f, 0.081256180242538f, 0.082232418452750f, 0.083486565550910f, 0.085017860149273f, 0.086825372604947f, + 0.088908005584270f, 0.091264494728999f, 0.093893409423896f, 0.096793153665248f, 0.099961967029797f, 0.103397925743485f, 0.107098943849369f, 0.111062774473996f, + 0.115287011191475f, 0.119769089484404f, 0.124506288300781f, 0.129495731705944f, 0.134734390628539f, 0.140219084699457f, 0.145946484182623f, 0.151913111996467f, + 0.158115345824847f, 0.164549420316138f, 0.171211429369169f, 0.178097328504598f, 0.185202937320297f, 0.192523942029263f, 0.200055898078497f, 0.207794232847276f, + 0.215734248423172f, 0.223871124454139f, 0.232199921074925f, 0.240715581906049f, 0.249412937123505f, 0.258286706597345f, 0.267331503097225f, 0.276541835562968f, + 0.285912112438167f, 0.295436645064799f, 0.305109651136783f, 0.314925258210395f, 0.324877507269410f, 0.334960356342792f, 0.345167684172755f, 0.355493293930949f, + 0.365930916980537f, 0.376474216681854f, 0.387116792239357f, 0.397852182587524f, 0.408673870313343f, 0.419575285613002f, 0.430549810280395f, 0.441590781725011f, + 0.452691497016760f, 0.463845216955300f, 0.475045170161378f, 0.486284557187706f, 0.497556554646881f, 0.508854319353835f, 0.520170992480304f, 0.531499703718800f, + 0.542833575453544f, 0.554165726935838f, 0.565489278461346f, 0.576797355546729f, 0.588083093103121f, 0.599339639603893f, 0.610560161244195f, 0.621737846089724f, + 0.632865908212225f, 0.643937591809204f, 0.654946175305346f, 0.665884975433158f, 0.676747351290353f, 0.687526708371517f, 0.698216502571607f, 0.708810244158849f, + 0.719301501714632f, 0.729683906037996f, 0.739951154012344f, 0.750097012432047f, 0.760115321786592f, 0.770000000000000f, 0.779745046123229f, 0.789344543977327f, + 0.798792665745119f, 0.808083675509254f, 0.817211932734458f, 0.826171895691878f, 0.834958124823446f, 0.843565286044212f, 0.851988153980648f, 0.860221615142946f, + 0.868260671029406f, 0.876100441160999f, 0.883736166044290f, 0.891163210060907f, 0.898377064281809f, 0.905373349204632f, 0.912147817412476f, 0.918696356152490f, + 0.925014989832710f, 0.931099882435622f, 0.936947339846999f, 0.942553812098577f, 0.947915895523229f, 0.953030334821319f, 0.957894025036981f, 0.962504013443125f, + 0.966857501334024f, 0.970951845724403f, 0.974784560953977f, 0.978353320196492f, 0.981655956872329f, 0.984690465963826f, 0.987455005232518f, 0.989947896337551f, + 0.992167625854595f, 0.994112846194642f, 0.995782376422118f, 0.997175202971826f, 0.998290480264278f, 0.999127531219040f, 0.999685847665791f, 0.999965090652822f +}; + +const float w_hamm16k_2[L_TRANA16k/2] = +{ + 0.080000000000000f, 0.080562848541440f, 0.082250016781061f, 0.085057375935460f, 0.088978055926352f, 0.094002462192807f, 0.100118299170741f, 0.107310600382232f, + 0.115561765060989f, 0.124851601224384f, 0.135157375086613f, 0.146453866692083f, 0.158713431632863f, 0.171906068699192f, 0.185999493297458f, 0.200959216456013f, + 0.216748629225465f, 0.233329092266912f, 0.250660030408878f, 0.268699031941561f, 0.287401952405387f, 0.306723022619904f, 0.326614960688639f, 0.347029087705815f, + 0.367915446881795f, 0.389222925795719f, 0.410899381476157f, 0.432891768003705f, 0.455146266323232f, 0.477608415948132f, 0.500223248234257f, 0.522935420897402f, + 0.545689353445147f, 0.568429363191639f, 0.591099801522450f, 0.613645190076067f, 0.636010356508734f, 0.658140569510427f, 0.679981672741539f, 0.701480217362516f, + 0.722583592832128f, 0.743240155654278f, 0.763399355758289f, 0.783011860203399f, 0.802029673904734f, 0.820406257085326f, 0.838096639166738f, 0.855057528819616f, + 0.871247419904816f, 0.886626693045890f, 0.901157712584333f, 0.914804918680351f, 0.927534914333744f, 0.939316547111965f, 0.950120985385339f, 0.959921788882895f, + 0.968694973396140f, 0.976419069472435f, 0.983075174954342f, 0.988647001236375f, 0.993120913125941f, 0.996485962210947f, 0.998733913652397f, 0.999859266336418f +}; + +const float w_hamm_sana48k_2[L_PROT_HAMM_LEN2_48k] = +{ + 0.080000000000000f, 0.080027462973758f, 0.080109848615839f, 0.080247147089046f, 0.080439341999361f, 0.080686410397899f, 0.080988322783646f, 0.081345043106986f, + 0.081756528774001f, 0.082222730651560f, 0.082743593073186f, 0.083319053845701f, 0.083949044256652f, 0.084633489082516f, 0.085372306597683f, 0.086165408584215f, + 0.087012700342376f, 0.087914080701944f, 0.088869442034286f, 0.089878670265216f, 0.090941644888610f, 0.092058238980796f, 0.093228319215714f, 0.094451745880830f, + 0.095728372893819f, 0.097058047820012f, 0.098440611890594f, 0.099875900021559f, 0.101363740833430f, 0.102903956671715f, 0.104496363628120f, 0.106140771562514f, + 0.107836984125627f, 0.109584798782499f, 0.111384006836658f, 0.113234393455047f, 0.115135737693669f, 0.117087812523972f, 0.119090384859956f, 0.121143215586007f, + 0.123246059585445f, 0.125398665769793f, 0.127600777108759f, 0.129852130660926f, 0.132152457605149f, 0.134501483272651f, 0.136898927179823f, 0.139344503061711f, + 0.141837918906203f, 0.144378876988888f, 0.146967073908615f, 0.149602200623714f, 0.152283942488898f, 0.155011979292835f, 0.157785985296381f, 0.160605629271474f, + 0.163470574540687f, 0.166380479017425f, 0.169334995246772f, 0.172333770446984f, 0.175376446551605f, 0.178462660252227f, 0.181592043041866f, 0.184764221258970f, + 0.187978816132029f, 0.191235443824805f, 0.194533715482165f, 0.197873237276507f, 0.201253610454792f, 0.204674431386151f, 0.208135291610080f, 0.211635777885218f, + 0.215175472238683f, 0.218753952015982f, 0.222370789931481f, 0.226025554119419f, 0.229717808185479f, 0.233447111258894f, 0.237213018045087f, 0.241015078878844f, + 0.244852839778006f, 0.248725842497672f, 0.252633624584921f, 0.256575719434027f, 0.260551656342175f, 0.264560960565666f, 0.268603153376600f, 0.272677752120042f, + 0.276784270271653f, 0.280922217495778f, 0.285091099704000f, 0.289290419114133f, 0.293519674309662f, 0.297778360299609f, 0.302065968578839f, 0.306381987188769f, + 0.310725900778505f, 0.315097190666374f, 0.319495334901855f, 0.323919808327907f, 0.328370082643670f, 0.332845626467550f, 0.337345905400666f, 0.341870382090660f, + 0.346418516295861f, 0.350989764949788f, 0.355583582225999f, 0.360199419603261f, 0.364836725931051f, 0.369494947495359f, 0.374173528084809f, 0.378871909057071f, + 0.383589529405564f, 0.388325825826447f, 0.393080232785873f, 0.397852182587524f, 0.402641105440390f, 0.407446429526807f, 0.412267581070735f, 0.417103984406268f, + 0.421955062046372f, 0.426820234751838f, 0.431698921600448f, 0.436590540056336f, 0.441494506039550f, 0.446410233995788f, 0.451337136966322f, 0.456274626658076f, + 0.461222113513879f, 0.466179006782852f, 0.471144714590954f, 0.476118644011648f, 0.481100201136704f, 0.486088791147110f, 0.491083818384099f, 0.496084686420271f, + 0.501090798130810f, 0.506101555764784f, 0.511116361016516f, 0.516134615097028f, 0.521155718805537f, 0.526179072601003f, 0.531204076673714f, 0.536230131016910f, + 0.541256635498423f, 0.546282989932337f, 0.551308594150653f, 0.556332848074950f, 0.561355151788038f, 0.566374905605590f, 0.571391510147749f, 0.576404366410692f, + 0.581412875838160f, 0.586416440392922f, 0.591414462628186f, 0.596406345758937f, 0.601391493733196f, 0.606369311303187f, 0.611339204096419f, 0.616300578686650f, + 0.621252842664750f, 0.626195404709433f, 0.631127674657866f, 0.636049063576134f, 0.640958983829565f, 0.645856849152894f, 0.650742074720264f, 0.655614077215060f, + 0.660472274899558f, 0.665316087684385f, 0.670144937197788f, 0.674958246854690f, 0.679755441925542f, 0.684535949604939f, 0.689299199080028f, 0.694044621598654f, + 0.698771650537277f, 0.703479721468629f, 0.708168272229108f, 0.712836742985904f, 0.717484576303842f, 0.722111217211948f, 0.726716113269708f, 0.731298714633038f, + 0.735858474119933f, 0.740394847275806f, 0.744907292438496f, 0.749395270802946f, 0.753858246485539f, 0.758295686588082f, 0.762707061261442f, 0.767091843768804f, + 0.771449510548575f, 0.775779541276891f, 0.780081418929751f, 0.784354629844749f, 0.788598663782413f, 0.792813013987120f, 0.796997177247615f, 0.801150653957089f, + 0.805272948172839f, 0.809363567675482f, 0.813422024027731f, 0.817447832632716f, 0.821440512791844f, 0.825399587762201f, 0.829324584813474f, 0.833215035284397f, + 0.837070474638713f, 0.840890442520641f, 0.844674482809841f, 0.848422143675885f, 0.852132977632196f, 0.855806541589490f, 0.859442396908678f, 0.863040109453242f, + 0.866599249641071f, 0.870119392495760f, 0.873600117697347f, 0.877041009632507f, 0.880441657444176f, 0.883801655080607f, 0.887120601343857f, 0.890398099937691f, + 0.893633759514900f, 0.896827193724033f, 0.899978021255524f, 0.903085865887227f, 0.906150356529334f, 0.909171127268689f, 0.912147817412476f, 0.915080071531290f, + 0.917967539501574f, 0.920809876547428f, 0.923606743281775f, 0.926357805746886f, 0.929062735454256f, 0.931721209423824f, 0.934332910222545f, 0.936897526002284f, + 0.939414750537061f, 0.941884283259609f, 0.944305829297265f, 0.946679099507180f, 0.949003810510844f, 0.951279684727920f, 0.953506450409391f, 0.955683841670007f, + 0.957811598520034f, 0.959889466896295f, 0.961917198692508f, 0.963894551788914f, 0.965821290081179f, 0.967697183508596f, 0.969522008081546f, 0.971295545908249f, + 0.973017585220782f, 0.974687920400358f, 0.976306352001886f, 0.977872686777781f, 0.979386737701038f, 0.980848323987568f, 0.982257271117780f, 0.983613410857422f, + 0.984916581277667f, 0.986166626774449f, 0.987363398087044f, 0.988506752315891f, 0.989596552939653f, 0.990632669831523f, 0.991614979274757f, 0.992543363977448f, + 0.993417713086533f, 0.994237922201026f, 0.995003893384487f, 0.995715535176712f, 0.996372762604660f, 0.996975497192592f, 0.997523666971448f, 0.998017206487434f, + 0.998456056809844f, 0.998840165538090f, 0.999169486807964f, 0.999443981297112f, 0.999663616229731f, 0.999828365380479f, 0.999938209077610f, 0.999993134205322f +}; + +const float w_hamm_sana32k_2[L_PROT_HAMM_LEN2_32k] = +{ + 0.080000000000000f, 0.080061898522781f, 0.080247577432747f, 0.080556986759243f, 0.080990043232791f, 0.081546630307495f, 0.082226598192408f, 0.083029763891845f, + 0.083955911254630f, 0.085004791032270f, 0.086176120946031f, 0.087469585762906f, 0.088884837380455f, 0.090421494920485f, 0.092079144831552f, 0.093857341000262f, + 0.095755604871328f, 0.097773425576361f, 0.099910260071357f, 0.102165533282844f, 0.104538638262646f, 0.107028936351231f, 0.109635757349585f, 0.112358399699582f, + 0.115196130672791f, 0.118148186567665f, 0.121213772915079f, 0.124392064692135f, 0.127682206544200f, 0.131083313015096f, 0.134594468785406f, 0.138214728918801f, + 0.141943119116349f, 0.145778635978722f, 0.149720247276233f, 0.153766892226636f, 0.157917481780606f, 0.162170898914830f, 0.166525998932624f, 0.170981609771997f, + 0.175536532321084f, 0.180189540740855f, 0.184939382795015f, 0.189784780187013f, 0.194724428904063f, 0.199756999568084f, 0.204881137793469f, 0.210095464551578f, + 0.215398576541875f, 0.220789046569584f, 0.226265423929784f, 0.231826234797829f, 0.237469982625987f, 0.243195148546199f, 0.249000191778843f, 0.254883550047394f, + 0.260843639998870f, 0.266878857629950f, 0.272987578718653f, 0.279168159261450f, 0.285418935915708f, 0.291738226447335f, 0.298124330183510f, 0.304575528470374f, + 0.311090085135560f, 0.317666246955443f, 0.324302244126969f, 0.330996290743956f, 0.337746585277719f, 0.344551311061912f, 0.351408636781431f, 0.358316716965264f, + 0.365273692483159f, 0.372277691045950f, 0.379326827709445f, 0.386419205381703f, 0.393552915333588f, 0.400726037712459f, 0.407936642058840f, 0.415182787825961f, + 0.422462524902000f, 0.429773894134909f, 0.437114927859666f, 0.444483650427822f, 0.451878078739195f, 0.459296222775571f, 0.466736086136265f, 0.474195666575400f, + 0.481672956540759f, 0.489165943714067f, 0.496672611552554f, 0.504190939831653f, 0.511718905188695f, 0.519254481667438f, 0.526795641263308f, 0.534340354469178f, + 0.541886590821560f, 0.549432319447051f, 0.556975509608890f, 0.564514131253475f, 0.572046155556704f, 0.579569555469978f, 0.587082306265726f, 0.594582386082315f, + 0.602067776468170f, 0.609536462925001f, 0.616986435449943f, 0.624415689076500f, 0.631822224414129f, 0.639204048186324f, 0.646559173767056f, 0.653885621715418f, + 0.661181420308344f, 0.668444606071246f, 0.675673224306430f, 0.682865329619155f, 0.690018986441185f, 0.697132269551692f, 0.704203264595389f, 0.711230068597719f, + 0.718210790476997f, 0.725143551553344f, 0.732026486054283f, 0.738857741616868f, 0.745635479786192f, 0.752357876510168f, 0.759023122630418f, 0.765629424369165f, + 0.772175003811978f, 0.778658099386259f, 0.785076966335314f, 0.791429877187917f, 0.797715122223211f, 0.803931009930835f, 0.810075867466152f, 0.816148041100446f, + 0.822145896665987f, 0.828067819995822f, 0.833912217358185f, 0.839677515885409f, 0.845362163997224f, 0.850964631818323f, 0.856483411590088f, 0.861917018076364f, + 0.867263988963175f, 0.872522885252262f, 0.877692291648358f, 0.882770816940072f, 0.887757094374303f, 0.892649782024062f, 0.897447563149619f, 0.902149146552868f, + 0.906753266924821f, 0.911258685186131f, 0.915664188820559f, 0.919968592201292f, 0.924170736910022f, 0.928269492048706f, 0.932263754543917f, 0.936152449443706f, + 0.939934530206900f, 0.943608978984751f, 0.947174806894860f, 0.950631054287315f, 0.953976791002949f, 0.957211116623676f, 0.960333160714807f, 0.963342083059310f, + 0.966237073883933f, 0.969017354077129f, 0.971682175398738f, 0.974230820681355f, 0.976662604023336f, 0.978976870973391f, 0.981172998706713f, 0.983250396192597f, + 0.985208504353495f, 0.987046796215483f, 0.988764777050081f, 0.990361984507393f, 0.991837988740540f, 0.993192392521341f, 0.994424831347216f, 0.995534973539285f, + 0.996522520331626f, 0.997387205951684f, 0.998128797691797f, 0.998747095971820f, 0.999241934392838f, 0.999613179781951f, 0.999860732228111f, 0.999984525109009f +}; + +const float w_hamm_sana16k_2[L_PROT_HAMM_LEN2_16k] = +{ + 0.080000000000000f, 0.080248875229243f, 0.080995231617495f, 0.082238261557724f, 0.083976620009229f, 0.086208425953062f, 0.088931264427414f, 0.092142189140766f, + 0.095837725659970f, 0.100013875169814f, 0.104666118800010f, 0.109789422514906f, 0.115378242560646f, 0.121426531463883f, 0.127927744575542f, 0.134874847152564f, + 0.142260321969963f, 0.150076177454966f, 0.158313956334418f, 0.166964744786114f, 0.176019182084144f, 0.185467470727822f, 0.195299387043225f, 0.205504292245887f, + 0.216071143952672f, 0.226988508130357f, 0.238244571468020f, 0.249827154159818f, 0.261723723084350f, 0.273921405366317f, 0.286407002305832f, 0.299167003660284f, + 0.312187602263317f, 0.325454708965093f, 0.338953967877692f, 0.352670771909129f, 0.366590278569198f, 0.380697426030022f, 0.394976949423959f, 0.409413397361190f, + 0.423991148649151f, 0.438694429195694f, 0.453507329077705f, 0.468413819756689f, 0.483397771422710f, 0.498442970447917f, 0.513533136930761f, 0.528651942311926f, + 0.543783027042910f, 0.558910018288144f, 0.574016547641481f, 0.589086268837895f, 0.604102875441222f, 0.619050118488809f, 0.633911824073957f, 0.648671910847171f, + 0.663314407417236f, 0.677823469633322f, 0.692183397729409f, 0.706378653312465f, 0.720393876176025f, 0.734213900920944f, 0.747823773365368f, 0.761208766726146f, + 0.774354397554188f, 0.787246441406510f, 0.799870948238030f, 0.812214257496436f, 0.824263012903808f, 0.836004176908999f, 0.847425044795124f, 0.858513258426909f, + 0.869256819623006f, 0.879644103138828f, 0.889663869245825f, 0.899305275893620f, 0.908557890441822f, 0.917411700948838f, 0.925857127005450f, 0.933885030101461f, + 0.941486723514159f, 0.948653981707932f, 0.955379049234843f, 0.961654649126531f, 0.967473990768381f, 0.972830777247415f, 0.977719212165966f, 0.982134005913770f, + 0.986070381391670f, 0.989524079180756f, 0.992491362151336f, 0.994969019506760f, 0.996954370257714f, 0.998445266123226f, 0.999440093855253f, 0.999937776984316f +}; + + +/* er_dec_tcx.c */ +const float h_high3_32[L_FIR_FER2] = {-0.0517f, -0.0587f, -0.0820f, -0.1024f, -0.1164f, 0.8786f, -0.1164f, -0.1024f, -0.0820f, -0.0587f, -0.0517f}; +const float h_high3_16[L_FIR_FER2] = { 0.f, -0.0205f, -0.0651f, -0.1256f, -0.1792f, 0.8028f, -0.1792f, -0.1256f, -0.0651f, -0.0205f, 0.f }; + + +/* clang-format on */ diff --git a/lib_dec/rom_dec.h b/lib_dec/rom_dec.h new file mode 100644 index 0000000000..de17c90251 --- /dev/null +++ b/lib_dec/rom_dec.h @@ -0,0 +1,71 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef ROM_DEC_H +#define ROM_DEC_H + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" + +extern const float h_low[]; /* LP filter for filtering periodic part of excitation in artificial onset construction after FEC */ + +extern const int16_t mult_avq_tab[]; +extern const int16_t shift_avq_tab[]; + +extern const int16_t hntable[55]; +extern const int16_t hetable[57]; +extern const int16_t hestable[15]; + +extern const float lsf_tab[LPC_SHB_ORDER]; + +extern const int16_t gw[LGW_MAX]; +extern const int16_t gwlpr[LGW_MAX]; +extern const float w_hamm32k_2[L_TRANA32k / 2]; +extern const float w_hamm16k_2[L_TRANA16k / 2]; +extern const float w_hamm_sana32k_2[L_PROT_HAMM_LEN2_32k]; +extern const float w_hamm_sana16k_2[L_PROT_HAMM_LEN2_16k]; +extern const float w_hamm48k_2[L_TRANA48k / 2]; +extern const float w_hamm_sana48k_2[L_PROT_HAMM_LEN2_48k]; + +extern const float h_high3_32[L_FIR_FER2]; +extern const float h_high3_16[L_FIR_FER2]; + + +#endif diff --git a/lib_dec/rst_dec.c b/lib_dec/rst_dec.c new file mode 100644 index 0000000000..6b8683767d --- /dev/null +++ b/lib_dec/rst_dec.c @@ -0,0 +1,98 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*----------------------------------------------------------------------------------* + * CNG_reset_dec() + * + * Reset decoder static variables in case of CNG frame + *----------------------------------------------------------------------------------*/ + +void CNG_reset_dec( + Decoder_State *st, /* i/o: decoder state structure */ + float *pitch_buf, /* o : floating pitch for each subframe */ + float *voice_factors /* o : voicing factors */ +) +{ + mvr2r( UVWB_Ave, st->mem_AR, M ); + set_f( st->mem_MA, 0, M ); + set_f( st->dispMem, 0, 8 ); + st->tilt_code = 0.0f; + st->gc_threshold = 0.0f; + + /* last good received frame for FEC in ACELP */ + st->clas_dec = UNVOICED_CLAS; + st->last_good = UNVOICED_CLAS; + + /* LP-filtered pitch gain set to 0 */ + st->lp_gainp = 0.0f; + + /* convert CNG energy into CNG gain for ACELP FEC */ + st->lp_gainc = (float) sqrt( st->lp_ener ); + + /* reset the pitch buffer in case of FRAME_NO_DATA or SID frames */ + if ( st->L_frame == L_FRAME ) + { + set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR ); + } + else /* st->L_frame == L_FRAME16k */ + { + set_f( pitch_buf, (float) L_SUBFR16k, NB_SUBFR16k ); + } + + set_f( voice_factors, 1.0, NB_SUBFR16k ); + + /* deactivate bass post-filter */ + st->bpf_off = 1; + + /* Reset active frame counter */ + if ( st->hTdCngDec != NULL ) + { + st->hTdCngDec->act_cnt2 = 0; + } + + return; +} diff --git a/lib_dec/stat_dec.h b/lib_dec/stat_dec.h new file mode 100644 index 0000000000..917331c050 --- /dev/null +++ b/lib_dec/stat_dec.h @@ -0,0 +1,1350 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef STAT_DEC_H +#define STAT_DEC_H + +#include +#include "options.h" +#include "cnst.h" +#include "stat_com.h" /* Common structures */ +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +/*---------------------------------------------------------------* + * Structure for FD Mode2 frameMode + *---------------------------------------------------------------*/ + +typedef enum _DEC_MODE +{ + DEC_NO_FRAM_LOSS = 0x0, + DEC_CONCEALMENT_EXT = 0x1 +} DEC_MODE; + +typedef enum +{ + FRAMEMODE_NORMAL = 0x0, /* frame available */ + FRAMEMODE_MISSING = 0x1, /* frame missing => conceal */ + FRAMEMODE_FUTURE = 0x2 +} FRAME_MODE; + + +/*---------------------------------------------------------------* + * Structure for FD CNG + *---------------------------------------------------------------*/ + +typedef struct +{ + HANDLE_FD_CNG_COM hFdCngCom; + + float msPeriodog[NPART_SHAPING]; /* Periodogram */ + float msBminWin[NPART_SHAPING]; + float msBminSubWin[NPART_SHAPING]; + float msPsd[NPART_SHAPING]; /* Power Spectral Density estimate (i.e., smoothed periodogram) */ + float msAlpha[NPART_SHAPING]; /* Optimal smoothing parameter */ + float msMinBuf[MSNUMSUBFR * NPART_SHAPING]; /* Buffer of minima */ + float msCurrentMinOut[NPART_SHAPING]; + float msCurrentMin[NPART_SHAPING]; + float msCurrentMinSubWindow[NPART_SHAPING]; + int16_t msLocalMinFlag[NPART_SHAPING]; + int16_t msNewMinFlag[NPART_SHAPING]; + float msPsdFirstMoment[NPART_SHAPING]; + float msPsdSecondMoment[NPART_SHAPING]; + float msNoiseFloor[NPART_SHAPING]; /* Estimated noise floor */ + float msNoiseEst[NPART_SHAPING]; /* Estimated noise level */ + float msLogPeriodog[NPART_SHAPING]; /* Periodogram */ + float msLogNoiseEst[NPART_SHAPING]; /* Estimated noise level */ + int16_t npart_shaping; /* Number of partitions */ + int16_t nFFTpart_shaping; /* Number of hybrid spectral partitions */ + int16_t part_shaping[NPART_SHAPING]; /* Partition upper boundaries (band indices starting from 0) */ + int16_t midband_shaping[NPART_SHAPING]; /* Central band of each partition */ + float psize_shaping[NPART_SHAPING]; /* Partition sizes */ + float psize_inv_shaping[NPART_SHAPING]; /* Inverse of partition sizes */ + float bandNoiseShape[FFTLEN2]; /* CNG spectral shape computed at the decoder */ + float partNoiseShape[NPART]; /* CNG spectral shape computed at the decoder */ + + float smoothed_psd[L_FRAME16k]; /* stereo CNA - periodogram smoothed with IIR filter */ + float msPeriodog_ST[NPART_SHAPING]; /* stereo CNA - short-term periodogram */ + int16_t ms_last_inactive_bwidth; /* stereo CNA - bandwidth from the last inactive frame */ + int16_t ms_cnt_bw_up; /* stereo CNA - downward counter of frames since the last NB->WB switch */ + float cna_LR_LT; /* stereo CNA - long-term L/R correlation factor calculated on stereo upmix */ + float cna_ILD_LT; /* stereo CNA - long-term ILD factor calculated on stereo upmix */ + float cna_g_state[STEREO_DFT_BAND_MAX]; /* stereo CNA - side gains from the last inactive frame */ + float cna_cm[STEREO_DFT_BAND_MAX + 1]; /* stereo CNA - coherence from the last inactive frame */ + int16_t first_cna_noise_updated; /* stereo CNA - flag indicating that comfort noise has been properly initialized during warmup */ + int16_t first_cna_noise_update_cnt; /* stereo CNA - counter of CN initialization frames */ + int16_t cna_nbands; /* stereo CNA - number of frequency bands used by the CNA in DFT stereo mode */ + int16_t cna_band_limits[MAX_CNA_NBANDS + 1]; /* stereo CNA - band limits used by the CNA in DFT stereo mode */ + float cna_act_fact; /* stereo CNA - long-term signal activity factor (0-1) */ + float cna_rescale_fact; /* stereo CNA - CN energy re-scaling factor to maintain decoded energy */ + int16_t cna_seed; /* stereo CNA - seed for random CN generator */ + + int16_t flag_dtx_mode; + float lp_speech; + float lp_noise; + + float msPeriodogBuf[MSBUFLEN * NPART_SHAPING]; + int16_t msPeriodogBufPtr; + + +} FD_CNG_DEC, *HANDLE_FD_CNG_DEC; + +/*---------------------------------------------------------------* + * Structure for PLC + *---------------------------------------------------------------*/ + +typedef struct +{ + int16_t L_frameTCX; + + int16_t Pitch; + int16_t T_bfi; + + int16_t Transient[MAX_POST_LEN]; + int16_t TCX_Tonality[DEC_STATE_LEN]; + + float outx_new_n1; + float nsapp_gain; + float nsapp_gain_n; + float data_reci2[L_FRAME_MAX]; + float data_noise[L_FRAME_MAX]; + float ener_mean; + float ener; + int16_t zp; + float recovery_gain; + float step_concealgain; + + int16_t concealment_method; + int16_t subframe; + int16_t nbLostCmpt; + + int16_t seed; + +} T_PLCInfo, *T_PLCInfo_HANDLE; + + +/*---------------------------------------------------------------* + * Structures for Tonal MDCT PLC * + *---------------------------------------------------------------*/ + +typedef struct +{ + uint16_t nSamples; + uint16_t nSamplesCore; + Float32 *spectralData; + float *scaleFactors; + int16_t blockIsValid; + int16_t blockIsConcealed; + int16_t tonalConcealmentActive; +} blockData; + +typedef struct +{ + uint16_t numIndexes; + uint16_t indexOfTonalPeak[MAX_NUMBER_OF_IDX]; + uint16_t lowerIndex[MAX_NUMBER_OF_IDX]; + uint16_t upperIndex[MAX_NUMBER_OF_IDX]; + Float32 phaseDiff[MAX_NUMBER_OF_IDX]; /* This one can be stored with 16 bits in range 0..2*PI */ + Float32 phase_currentFramePredicted[MAX_NUMBER_OF_IDX * GROUP_LENGTH]; /* This one can be stored with 16 bits in range 0..2*PI, but the code has to be adapted to use moduo(2*PI) after adding */ +} TonalComponentsInfo; + +typedef struct +{ + TCX_config *tcx_cfg; + void *pMDSTData; + int16_t nSamples; + int16_t nSamplesCore; + int16_t nNonZeroSamples; + int16_t nScaleFactors; + + float lastPitchLag; + + blockData lastBlockData; + blockData secondLastBlockData; + + Float32 scaleFactorsBuffers[2][FDNS_NPTS]; /* Contains also global gain. If it can not be stored in 16 bits with global gain included, then store global gain separately. */ + Float32 spectralDataBuffers[2][L_FRAME_MAX]; /* 16 bits is enough, because it is stored before applying scale factors. Take care that power spectrum is also stored here. */ + Float32 timeDataBuffer[( 3 * L_FRAME_MAX ) / 2]; + Float32 *lastPcmOut; + Float32 *secondLastPcmOut; + float *secondLastPowerSpectrum; + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + float scaleFactorsBackground[FDNS_NPTS]; + PsychoacousticParameters *psychParams; + /* could be stored only once, since the same for all channels (always at 16Khz fs) */ + PsychoacousticParameters psychParamsTCX20; + PsychoacousticParameters psychParamsTCX10; + + float last_block_nrg; + float curr_noise_nrg; +#endif + + float nFramesLost; + + TonalComponentsInfo *pTCI; + +} TonalMDCTConceal_INSTANCE, *TonalMDCTConcealPtr; + +typedef enum SIGNAL_CLASSIFER_MODE +{ + CLASSIFIER_ACELP, + CLASSIFIER_TCX +} SIGNAL_CLASSIFIER_MODE; + + +/*---------------------------------------------------------------* + * Structures for IGF decoder * + *---------------------------------------------------------------*/ + +typedef struct +{ + int16_t bitsRead; /* after a call bitsRead contains the number of bits consumed by the decoder */ + int16_t prev[64]; /* no more than 64 SCFs for the IGF energy envelope of one block */ + int16_t scfCountLongBlock[IGF_NOF_GRIDS]; + int16_t t; + int32_t bitrate; + const uint16_t *cf_se00; + const uint16_t *cf_se01; + int16_t cf_off_se01; + const uint16_t *cf_se02; + const int16_t *cf_off_se02; + const uint16_t *cf_se10; + int16_t cf_off_se10; + const uint16_t *cf_se11; + const int16_t *cf_off_se11; + Tastat acState; + +} IGFSCFDEC_INSTANCE, *IGFSCFDEC_INSTANCE_HANDLE; + +typedef struct igfdec_private_data_struct +{ + + IGF_INFO igfInfo; + /* envelope reconstruction: */ + float igf_sN[IGF_MAX_SFB]; /* only with short blocks as static needed */ + float igf_pN[IGF_MAX_SFB]; /* only with short blocks as static needed */ + int16_t igf_curr[IGF_MAX_SFB]; /* current igf energies */ + int16_t igf_prev[IGF_MAX_SFB]; /* needed for concealment or indepflag==0 */ + int16_t igf_curr_subframe[IGF_MAX_SUBFRAMES][IGF_TRANS_FAK][IGF_MAX_SFB]; /* current igf energies per subframe*/ + int16_t igf_prev_subframe[IGF_MAX_SUBFRAMES][IGF_MAX_SFB]; /* needed for concealment or indepflag==0 */ + int16_t igf_flatteningTrigger_subframe[IGF_MAX_SUBFRAMES]; + + /* spectral whitening: */ + float *pSpecFlat; + float pSpecFlatBuf[IGF_START_MX]; + int16_t restrict_hopsize; + + int16_t currWhiteningLevel[IGF_MAX_TILES]; + int16_t prevWhiteningLevel[IGF_MAX_TILES]; /* needed for concealment */ + int16_t currWhiteningLevel_subframe[IGF_MAX_SUBFRAMES][IGF_MAX_TILES]; + int16_t prevWhiteningLevel_subframe[IGF_MAX_SUBFRAMES][IGF_MAX_TILES]; /* needed for concealment */ + + float totalNoiseNrg; + int16_t n_noise_bands; + + float totalNoiseNrg_off; + int16_t n_noise_bands_off; + + /* IGF SCF decoding: */ + IGFSCFDEC_INSTANCE hArithSCFdec; + + /* concealment: */ + int16_t frameLossCounter; + +} IGFDEC_PRIVATE_DATA, *IGF_DEC_PRIVATE_DATA_HANDLE; + +typedef struct igfdec_instance_struct +{ + int16_t isIGFActive; + int16_t infoIGFAllZero; + int16_t infoIGFStopLine; + int16_t infoIGFStartLine; + int16_t infoIGFStopFreq; + int16_t infoIGFStartFreq; + uint8_t *infoTCXNoise; + uint8_t infoTCXNoiseBuf[IGF_START_MX]; + int16_t *flag_sparse; + int16_t flag_sparseBuf[N_MAX_TCX - IGF_START_MN]; + float *virtualSpec; + float virtualSpecBuf[N_MAX_TCX - IGF_START_MN]; + + int16_t flatteningTrigger; + IGFDEC_PRIVATE_DATA igfData; + +} IGFDEC_INSTANCE, *IGF_DEC_INSTANCE_HANDLE; + + +/*---------------------------------------------------------------* + * Structure for TEC + *---------------------------------------------------------------*/ + +typedef struct tec_dec_structure +{ + float pGainTemp[CLDFB_NO_COL_MAX]; + float loBuffer[CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG]; + +} TEC_DEC_DATA, *TEC_DEC_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * TCX LTP decoder + *------------------------------------------------------------------------------------------*/ + +typedef struct tcx_ltp_dec_structure +{ + /* TCX-LTP */ + int16_t tcxltp; + float tcxltp_gain; + int16_t tcxltp_pitch_int; + int16_t tcxltp_pitch_fr; + + float tcxltp_mem_in[TCXLTP_MAX_DELAY]; + float tcxltp_mem_out[L_FRAME48k]; + int16_t tcxltp_pitch_int_post_prev; + int16_t tcxltp_pitch_fr_post_prev; + float tcxltp_gain_post_prev; + int16_t tcxltp_filt_idx_prev; + +} TCX_LTP_DEC_DATA, *TCX_LTP_DEC_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * TCX decoder + *------------------------------------------------------------------------------------------*/ + +typedef struct tcx_dec_structure +{ + int16_t enableTcxLpc; /* global toggle for the TCX LPC quantizer */ + int16_t envWeighted; /* are is{p,f}_old[] weighted or not? */ + + /* tonal PLC */ + float tcxltp_second_last_pitch; + float tcxltp_third_last_pitch; + float tcxltp_last_gain_unmodified; + + int16_t tcx_hm_LtpPitchLag; + int16_t tcx_lpc_shaped_ari; + + int16_t pit_min_TCX; + int16_t pit_max_TCX; + + int16_t L_frameTCX; + + float old_excFB[L_FRAME48k]; /* old excitation FB */ + + int16_t old_synth_len; + int16_t old_synth_lenFB; + float old_synth[OLD_SYNTH_INTERNAL_DEC]; /* synthesis memory */ + float synth_history[L_PROT48k + L_FRAME_MAX]; /* unified synthesis memory */ + + float *old_synthFB; + float *prev_good_synth; + + float old_syn_Overl[L_FRAME32k / 2]; + + float syn_Overl_TDAC[L_FRAME32k / 2]; + float syn_Overl_TDACFB[L_FRAME_MAX / 2]; + + float syn_Overl[L_FRAME32k / 2]; + float syn_OverlFB[L_FRAME_MAX / 2]; + + float FBTCXdelayBuf[111]; /* 2.3125ms at 48kHz -> 111 samples */ + + /*TCX resisual Q*/ + int16_t resQBits[NB_DIV]; /* number of bits read for the residual Quantization in TCX*/ + + /* PLC */ + int16_t noise_filling_index[NB_DIV]; /* PLC - last decoded noise filling index */ + int16_t tnsActive[NB_DIV]; + float ltpGainMemory[N_LTP_GAIN_MEMS]; /* for smoothing noiseTransWidth */ + uint16_t kernel_type[2]; /* transform kernel type in each subframe (MDCT or MDST) */ + + int16_t prev_widow_left_rect; + float CngLevelBackgroundTrace_bfi; /* PLC - long term gain estimate for background level, used for PLC fade out */ + /* state variables for the minimum statistics used for PLC */ + float NoiseLevelMemory_bfi[PLC_MIN_STAT_BUFF_SIZE]; + int16_t NoiseLevelIndex_bfi; + int16_t CurrLevelIndex_bfi; + float LastFrameLevel_bfi; + float old_gaintcx_bfi; + float conceal_eof_gain; + float damping; + float gainHelper; + float stepCompensate; + int16_t tcxConceal_recalc_exc; + float cummulative_damping_tcx; + +} TCX_DEC_DATA, *TCX_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * GSC static variables + *----------------------------------------------------------------------------------*/ + +typedef struct gsc_dec_structure +{ + int16_t seed_tcx; /* AC mode (GSC) - seed for noise fill */ + int16_t cor_strong_limit; /* AC mode (GSC) - Indicator about high spectral correlation per band */ + float old_y_gain[MBANDS_GN16k]; /* AC mode (GSC) - AR mem for low rate gain quantization */ + int16_t noise_lev; /* AC mode (GSC) - noise level */ + float lt_ener_per_band[MBANDS_GN16k]; + float Last_frame_ener; /* AC mode (GSC) - last frame energy */ + float Last_GSC_spectrum[L_FRAME16k]; /* AC mode (GSC) - Last good GSC spectrum */ + int16_t Last_GSC_pit_band_idx; /* AC mode (GSC) - Last pitch band index */ + float last_exc_dct_in[L_FRAME16k]; /* AC mode (GSC) - previous excitation */ + float last_ener; /* AC mode (GSC) - previous energy */ + int16_t last_bitallocation_band[6]; /* AC mode (GSC) - previous bit allocation of each band */ + +} GSC_DEC_DATA, *GSC_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * FEC - ACELP fast recovery + *----------------------------------------------------------------------------------*/ + +typedef struct WI_dec_structure +{ + float old_exc2[L_EXC_MEM]; /* FEC - old excitation2 used in fast recovery */ + float old_syn2[L_EXC_MEM]; /* FEC - old syn speech used in fast recovery */ + +} WI_DEC_DATA, *WI_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * NB postfilter / formant postfilter static variables + *----------------------------------------------------------------------------------*/ + +typedef struct pfstat_structure +{ + int16_t on; /* On/off flag */ + int16_t reset; /* reset flag */ + float mem_pf_in[L_SUBFR]; /* Input memory */ + float mem_stp[L_SUBFR]; /* 1/A(gamma1) memory */ + float mem_res2[DECMEM_RES2]; /* A(gamma2) residual */ + float mem_zero[M]; /* null memory to compute i.r. of A(gamma2)/A(gamma1) */ + float gain_prec; /* for gain adjustment */ + +} PFSTAT, *PFSTAT_HANDLE; + +/*----------------------------------------------------------------------------------* + * LD music post-filter + *----------------------------------------------------------------------------------*/ + +typedef struct ld_music_postfilt_structure +{ + float LDm_mem_etot; /* LD music post-filter - total energy memory */ + int16_t LDm_last_music_flag; /* LD music post-filter - last music flag */ + int16_t LDm_nb_thr_1; /* LD music post-filter - number of consecutive frames of level 1 */ + int16_t LDm_nb_thr_3; + float dct_post_old_exc[DCT_L_POST - OFFSET2]; + float LDm_thres[4]; /* LD music post-filter - Classification threshold */ + float LDm_lt_diff_etot[MAX_LT]; /* LD music post-filter - long-term total energy variation */ + float LDm_enh_lp_gbin[VOIC_BINS_HR]; /* LD music post-filter - smoothed suppression gain, per bin FFT */ + float LDm_enh_lf_EO[VOIC_BINS_HR]; /* LD music post-filter - old per bin E for previous half frame */ + float LDm_enh_min_ns_gain; /* LD music post-filter - minimum suppression gain */ + float LDm_bckr_noise[MBANDS_GN_LD]; /* LD music post-filter - background noise estimation per critical band */ + float filt_lfE[DCT_L_POST]; + int16_t last_nonfull_music; + +} MUSIC_POSTFILT_DATA, *MUSIC_POSTFILT_HANDLE; + +/*----------------------------------------------------------------------------------* + * Bass post-filter + *----------------------------------------------------------------------------------*/ + +typedef struct bass_postfilt_structure +{ + float pst_old_syn[NBPSF_PIT_MAX]; /* Bass post-filter - old synthesis buffer 1 */ + float pst_mem_deemp_err; /* Bass post-filter - filter memory of noise LP filter */ + float pst_lp_ener; /* Bass post-filter - long-term energy */ + int16_t Track_on_hist[L_TRACK_HIST]; /* Bass post-filter - History of half frame usage */ + int16_t vibrato_hist[L_TRACK_HIST]; /* Bass post-filter - History of frames declared as vibrato */ + float psf_att; /* Bass post-filter - post filter attenuation factor */ + float mem_mean_pit[L_TRACK_HIST]; /* Bass post-filter - average pitch memory */ + +} BPF_DEC_DATA, *BPF_DEC_HANDLE; + +/*------------------------------------------------------------------------------------------* + * DTX and TD CNG structure + *------------------------------------------------------------------------------------------*/ + +typedef struct td_cng_dec_structure +{ + int16_t cng_seed; /* DTX/CNG - seed for white noise random generator */ + float Enew; /* DTX/CNG - decoded residual energy */ + int16_t old_enr_index; /* DTX/CNG - index of last encoded CNG energy */ + int16_t cng_ener_seed; /* DTX/CNG - seed for random generator for variation of excitation energy */ + int16_t cng_ener_seed1; + int16_t last_allow_cn_step; + int16_t ho_hist_size; /* DTX/CNG - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ + int16_t ho_hist_ptr; /* DTX/CNG - pointer for averaging buffers */ + int16_t ho_sid_bw; /* DTX/CNG - SID bandwidth flags */ + float ho_lsp_hist[HO_HIST_SIZE * M]; /* DTX/CNG - old LSP buffer for averaging */ + float ho_ener_hist[HO_HIST_SIZE]; /* DTX/CNG - energy buffer for averaging */ + float ho_env_hist[HO_HIST_SIZE * NUM_ENV_CNG]; + int16_t act_cnt; /* DTX/CNG - counter of active frames */ + int16_t ho_circ_size; /* DTX/CNG - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ + int16_t ho_circ_ptr; /* DTX/CNG - pointer for averaging buffers */ + float ho_lsp_circ[HO_HIST_SIZE * M]; /* DTX/CNG - old LSP buffer for averaging */ + float ho_ener_circ[HO_HIST_SIZE]; /* DTX/CNG - energy buffer for averaging */ + float ho_env_circ[HO_HIST_SIZE * NUM_ENV_CNG]; + int16_t num_ho; /* DTX/CNG - number of selected hangover frames */ + int16_t ho_16k_lsp[HO_HIST_SIZE]; /* DTX/CNG - 16k LSPs flags */ + int16_t act_cnt2; /* DTX/CNG - counter of active frames for CNG_mode switching */ + float old_env[20]; + float lp_env[20]; + float exc_mem[24]; + float exc_mem1[30]; + + + float interpol_3_2_cng_dec[INTERP_3_2_MEM_LEN]; + + /* SWB DTX/CNG parameters */ + float shb_cng_ener; + float shb_lpcCNG[LPC_SHB_ORDER + 1]; + float shb_cng_gain; + float wb_cng_ener; + float last_wb_cng_ener; + float last_shb_cng_ener; + int16_t swb_cng_seed; + float lsp_shb_prev_prev[LPC_SHB_ORDER]; + float lsp_shb_prev[LPC_SHB_ORDER]; + int16_t shb_dtx_count; + int16_t trans_cnt; + int16_t burst_cnt; + float last_shb_ener; + +} TD_CNG_DEC_DATA, *TD_CNG_DEC_HANDLE; + +/*----------------------------------------------------------------------------------* + * SC-VBR structure + *----------------------------------------------------------------------------------*/ + +typedef struct sc_vbr_dec_structure +{ + int16_t firstTime_voiceddec; + + /* DTFS variables */ + float dtfs_dec_a[MAXLAG_WI]; + float dtfs_dec_b[MAXLAG_WI]; + int16_t dtfs_dec_lag; + int16_t dtfs_dec_nH; + int16_t dtfs_dec_nH_4kHz; + float dtfs_dec_upper_cut_off_freq_of_interest; + float dtfs_dec_upper_cut_off_freq; + float ph_offset_D; + float lastLgainD; /* previous gain value for the low band */ + float lastHgainD; /* previous gain value for the high band */ + float lasterbD[NUM_ERB_WB]; /* previous amplitude spectrum (ERB) */ + + /* NELP decoder variables */ + float bp1_filt_mem_nb_dec[14]; + float bp1_filt_mem_wb_dec[8]; + float shape1_filt_mem_dec[20]; + float shape2_filt_mem_dec[20]; + float shape3_filt_mem_dec[20]; + + int16_t nelp_dec_seed; + +} SC_VBR_DEC_DATA, *SC_VBR_DEC_HANDLE; + +/*----------------------------------------------------------------------------------* + * HQ NB FEC structure + *----------------------------------------------------------------------------------*/ + +typedef struct hq_nbfec_structure +{ + int16_t prev_last_core; /* !!! note: the parameter is identical to last_core in IVAS */ + + float diff_energy; + int16_t stat_mode_out; + int16_t stat_mode_old; + int16_t phase_mat_flag; + int16_t phase_mat_next; + int16_t old_Min_ind; + float old_auOut_2fr[L_FRAME8k * 2]; + float old_out_pha[2][N_LEAD_NB]; /* FEC for HQ Core, 0-phase matching old_out, 1-overlapping original old_out and phase matching old_out*/ + float ynrm_values[MAX_SB_NB][MAX_PGF]; + float r_p_values[MAX_SB_NB][MAX_ROW]; + float Norm_gain[SFM_N_NB]; + int16_t HQ_FEC_seed; + float energy_MA_Curr[2]; + int16_t prev_sign_switch[HQ_FEC_SIGN_SFM]; + int16_t prev_sign_switch_2[HQ_FEC_SIGN_SFM]; + float old_coeffs[L_FRAME8k]; /* HQ core - old coefficients (for FEC) */ + float oldIMDCTout[L_FRAME8k / 2]; + float prev_oldauOut[L_FRAME8k]; + +} HQ_NBFEC_DATA, *HQ_NBFEC_HANDLE; + +/*----------------------------------------------------------------------------------* + * HQ core structure + *----------------------------------------------------------------------------------*/ + +typedef struct hq_dec_structure +{ + float old_out[L_FRAME48k]; /* HQ core - previous synthesis for OLA */ + float old_outLB[L_FRAME32k]; + int16_t last_hq_core_type; + int16_t old_is_transient[3]; /* HQ core - previous transient flag (for FEC and BWE/NF) */ + + int16_t mem_norm[SFM_N_ENV_STAB]; + int16_t mem_env_delta; + int16_t no_att_hangover; + float energy_lt; + int16_t hq_generic_seed; + float prev_noise_level[2]; + int16_t prev_hqswb_clas; + int16_t prev_R; /* the table of bit allocation of last frame */ + float prev_coeff_out[L_HQ_WB_BWE]; /* the highest coefficients of last frame */ + int16_t prev_SWB_peak_pos[SPT_SHORTEN_SBNUM]; + + int16_t HqVoicing; + float fer_samples[L_FRAME48k]; + float prev_normq[SFM_N_WB]; /* previous norms */ + float prev_env[SFM_N_WB]; /* previous noise envelopes */ + + float last_ni_gain[BANDS_MAX]; + float last_env[BANDS_MAX]; + int16_t last_max_pos_pulse; + + /* pre-echo reduction */ + float memfilt_lb; + float mean_prev_hb; + float smoothmem; + float mean_prev; + float mean_prev_nc; + float wmold_hb; + int16_t prevflag; + int16_t pastpre; + int16_t prev_frm_hfe2; + int16_t prev_stab_hfe2; + float prev_ni_ratio; + float prev_En_sb[NB_SWB_SUBBANDS]; + + /*----------------------------------------------------------------------------------* + * HQ FEC + *----------------------------------------------------------------------------------*/ + + /* HQ PHASE ECU internal state */ + int16_t time_offs; + float X_sav[PH_ECU_SPEC_SIZE]; + int16_t num_p; + int16_t plocs[MAX_PLOCS]; + float plocsi[MAX_PLOCS]; + float env_stab; + int16_t mem_norm_hqfec[SFM_N_ENV_STAB]; + int16_t mem_env_delta_hqfec; + float env_stab_plc; + float env_stab_state_p[NUM_ENV_STAB_PLC_STATES]; + int16_t envstabplc_hocnt; + + float mag_chg_1st[LGW_MAX]; /* i/o: per band magnitude modifier for transients*/ + float Xavg[LGW_MAX]; /* Frequency group average gain to fade to */ + float beta_mute; /* Factor for long-term mute */ + + int16_t last_fec; + int16_t ph_ecu_HqVoicing; + int16_t oldHqVoicing; + float oldgapsynth[L_FRAME48k]; + int16_t ph_ecu_active; /* Set to 1 if Phase ECU was used in last bad frame; Set to 2 if TCX TD PLC was used */ + int16_t ni_seed_forfec; + int16_t ber_occured_in_pvq; /* flag for BER detection from PVQ routines */ + +} HQ_DEC_DATA, *HQ_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * HF (6-7kHz) (zero) BWE structure + *----------------------------------------------------------------------------------*/ + +typedef struct zero_bwe_dec_structure +{ + int16_t seed2; /* HF (6-7kHz) BWE - seed for random signal generator */ + float mem_hp400[4]; /* HF (6-7kHz) BWE - hp400 filter memory */ + float mem_hf[( L_FIR - 1 )]; /* HF (6-7kHz) BWE - band-pass filter memory */ + float mem_syn_hf[M]; /* HF (6-7kHz) BWE - synthesis filter memory */ + float delay_syn_hf[NS2SA( 16000, DELAY_CLDFB_NS )]; /* HF (6-7kHz) BWE - To synchronise BWE content with postfiltered synthesis */ + float mem_hp_interp[INTERP_3_1_MEM_LEN]; /* HF (6-7 kHz) BWE - interp. memory */ + +} ZERO_BWE_DEC_DATA, *ZERO_BWE_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * TD BWE structure + *----------------------------------------------------------------------------------*/ + +typedef struct td_bwe_dec_structure +{ + /* states for the filters used in generating SHB excitation from WB excitation */ + float state_lpc_syn[LPC_SHB_ORDER]; + float mem_csfilt[2]; + + /* states for the filters used in generating SHB signal from SHB excitation*/ + float state_syn_shbexc[L_SHB_LAHEAD]; + float syn_overlap[L_SHB_LAHEAD]; /* overlap buffer used to Adjust SHB Frame Gain*/ + + /* previous frame parameters for frame error concealment */ + float lsp_prevfrm[LPC_SHB_ORDER]; + float GainFrame_prevfrm; + float GainShape_Delay[NUM_SHB_SUBFR / 2]; + float GainAttn; + + float old_bwe_exc[PIT16k_MAX * 2]; /* old excitation */ + int16_t bwe_seed[2]; + float bwe_non_lin_prev_scale; + float old_bwe_exc_extended[NL_BUFF_OFFSET]; + + float genSHBsynth_Hilbert_Mem[HILBERT_MEM_SIZE]; + + float mem_genSHBexc_filt_down_shb[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float mem_genSHBexc_filt_down_wb2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float mem_genSHBexc_filt_down_wb3[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float genSHBsynth_state_lsyn_filt_shb_local[2 * ALLPASSSECTIONS_STEEP]; + float state_lsyn_filt_shb[2 * ALLPASSSECTIONS_STEEP]; + float state_lsyn_filt_dwn_shb[2 * ALLPASSSECTIONS_STEEP]; + float mem_resamp_HB[INTERP_3_1_MEM_LEN]; + float mem_resamp_HB_32k[2 * ALLPASSSECTIONS_STEEP + 1]; + float prev_pow_exc16kWhtnd; /* power of the LB excitation signal in the previous frame */ + float prev_mix_factor; /* mixing factor in the previous frame */ + + int16_t syn_dm_phase; + float fbbwe_hpf_mem[4][4]; + float prev_wb_bwe_frame_pow; + float prev_swb_bwe_frame_pow; + float prev_ener; + float prev_GainShape; + float fb_state_lpc_syn[LPC_SHB_ORDER]; + float fb_tbe_demph; + float prev_fbbwe_ratio; + + float tbe_demph; + float tbe_premph; + float mem_stp_swb[LPC_SHB_ORDER]; + float *ptr_mem_stp_swb; + float gain_prec_swb; + float mem_zero_swb[LPC_SHB_ORDER]; + + float swb_lsp_prev_interp[LPC_SHB_ORDER]; + float prev1_shb_ener_sf, prev2_shb_ener_sf, prev3_shb_ener_sf, prev_res_shb_gshape, prev_mixFactors; + float tilt_mem; /* Formant factor adaptation tilt smoothing memory */ + float prev_lsf_diff[LPC_SHB_ORDER - 2]; + float prev_tilt_para; + float cur_sub_Aq[M + 1]; + + /* quantized data */ + int16_t lsf_idx[NUM_Q_LSF]; + int16_t m_idx; + int16_t grid_idx; + int16_t idxSubGains; + int16_t idxFrameGain; + int16_t idx_shb_fr_gain; + int16_t idx_res_gs[NB_SUBFR16k]; + int16_t idx_mixFac; + + int16_t lsf_WB; + int16_t gFrame_WB; + + int16_t idxGain; + + float old_core_synth[L_FRAME16k]; + float old_tbe_synth[L_SHB_TRANSITION_LENGTH]; + + float int_3_over_2_tbemem_dec[INTERP_3_2_MEM_LEN]; + + float old_hb_synth[L_FRAME48k]; + + float tilt_swb_fec; /* FEC - SWB TBE TILT */ + +} TD_BWE_DEC_DATA, *TD_BWE_DEC_HANDLE; + +/*----------------------------------------------------------------------------------* + * FD BWE structure + *----------------------------------------------------------------------------------*/ + +typedef struct fd_bwe_dec_structure +{ + float old_wtda_swb[L_FRAME48k]; + float old_syn_12k8_16k[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; + float mem_deemph_old_syn; + int16_t prev_mode; + float prev_SWB_fenv[SWB_FENV]; + float prev_Energy; + float prev_Energy_wb; + int16_t prev_L_swb_norm; + int16_t Seed; + int16_t prev_frica_flag; + float mem_imdct[L_FRAME48k]; + float prev_td_energy; + float prev_weight; + int16_t prev_flag; + float last_wb_bwe_ener; + float prev_fb_ener_adjust; + +} FD_BWE_DEC_DATA, *FD_BWE_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * HR SWB BWE structure + *----------------------------------------------------------------------------------*/ + +typedef struct hr_swb_bwe_dec_structure +{ + + int16_t bwe_highrate_seed; + float t_audio_prev[2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF]; + int16_t old_is_transient_hr_bwe; + float mem_EnergyLT; + +} HR_BWE_DEC_DATA, *HR_BWE_DEC_HANDLE; + + +/*---------------------------------------------------------------* + * PVQ range decoder state + *---------------------------------------------------------------*/ + +typedef struct pvq_dec_structure +{ + uint32_t rc_low; + uint32_t rc_range; + uint32_t rc_help; + int16_t rc_num_bits; + int16_t rc_offset; + int16_t rc_end; + +} PVQ_DEC_DATA, *PVQ_DEC_HANDLE; + + +/*---------------------------------------------------------------* + * AMR-WB IO mode decoder structure + *---------------------------------------------------------------*/ + +typedef struct amrwb_io_dec_structure +{ + float past_qua_en[GAIN_PRED_ORDER]; /* gain quantization memory (used also in AMR-WB IO mode) */ + + float prev_r; /* HF BWE - previous sub-frame gain */ + float fmerit_w_sm; /* HF BWE - fmerit parameter memory */ + int16_t frame_count; /* HF BWE - frame count */ + float ne_min; /* HF BWE - minimum Noise gate - short-term energy */ + float fmerit_m_sm; /* HF BWE - memory of fmerit_m param */ + float voice_fac_amr_wb_hf; /* HF BWE - voice factor */ + float unvoicing; /* HF BWE - unvoiced parameter */ + float unvoicing_sm; /* HF BWE - smoothed unvoiced parameter */ + int16_t unvoicing_flag; /* HF BWE - unvoiced flag */ + int16_t voicing_flag; /* HF BWE - voiced flag */ + int16_t start_band_old; /* HF BWE - previous start point for copying frequency band */ + float OptCrit_old; /* HF BWE - previous criterion value for deciding the start point */ + + /* Improvement of unvoiced and audio signals in AMR-WB IO mode */ + int16_t UV_cnt; /* number of consecutives frames classified as UV */ + float LT_UV_cnt; /* long-term consecutives frames classified as UV */ + float Last_ener; /* last_energy frame */ + float lt_diff_etot[MAX_LT]; /* stability estimation - long-term total energy variation */ + float old_Aq[NB_SUBFR * ( M + 1 )]; /* old LPC filter coefficient */ + float lt_voice_fac; /* average voice factor over 4 sub-frames */ + +} AMRWB_IO_DEC_DATA, *AMRWB_IO_DEC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * + * Main decoder structure + * + *----------------------------------------------------------------------------------*/ + +typedef struct Decoder_State +{ + + /*----------------------------------------------------------------------------------* + * Common parameters + *----------------------------------------------------------------------------------*/ + + int16_t idchan; /* channel ID (audio channel number) */ + int16_t element_mode; /* element mode */ +#ifdef DEBUGGING + int16_t id_element; /* element ID */ +#endif + int32_t element_brate; /* element bitrate */ + int16_t codec_mode; /* Mode 1 or 2 */ + int16_t mdct_sw_enable; /* MDCT switching enable flag */ + int16_t mdct_sw; /* MDCT switching indicator */ + int16_t last_codec_mode; /* last used codec mode */ + + uint16_t *bit_stream; /* pointer to bitstream buffer */ + int16_t next_bit_pos; /* position of the next bit to be read from the bitstream */ + int16_t BER_detect; /* flag to signal detected bit error in the bitstream */ + int32_t output_Fs; /* output sampling rate */ + int32_t total_brate; /* total bitrate in kbps of the codec */ + int32_t last_total_brate; /* last total bitrate in kbps of the codec */ + int32_t last_total_brate_ber; /* last total bitrate in kbps of the codec - used only when first frame is lost and BER is detected afterwards */ + int16_t bits_frame_nominal; /* avg bits per frame on active frame */ + int32_t last_bits_frame_nominal; /* last avg bits per frame on active frame */ + int16_t flag_ACELP16k; /* flag indicating use of ACELP core at 16kHz internal sampling rate */ + int16_t bits_frame_channel; /* bits frame channel */ + int16_t side_bits_frame_channel; /* bits frame channel */ + int16_t core; /* core (ACELP_CORE, TCX_20_CORE, TCX_10_CORE, HQ_CORE, AMR_WB_CORE) */ + int16_t coder_type; /* coder type */ + int16_t transform_type[2]; /* TCX20/10/5 mode in each subframe */ + int32_t core_brate; /* core bitrate */ + int32_t last_core_brate; /* previous frame core bitrate */ + int16_t extl; /* extension layer */ + int16_t extl_orig; /* extension layer */ + int16_t last_extl; /* previous extension layer */ + int32_t extl_brate; /* extension layer bitrate */ + int32_t extl_brate_orig; /* extension layer bitrate */ + int16_t L_frame; /* ACELP core internal frame length */ + int16_t bwidth; /* encoded signal bandwidth */ + int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ + int16_t ini_frame; /* initialization frames counter */ + int16_t prev_coder_type; /* coding type of last frame */ + int16_t low_rate_mode; /* low-rate mode flag */ + + /*----------------------------------------------------------------------------------* + * ACELP core parameters + *----------------------------------------------------------------------------------*/ + + float old_exc[L_EXC_MEM_DEC]; /* old excitation */ + float lsp_old[M]; /* old LSP vector at the end of the frame */ + float lsf_old[M]; /* old LSF vector at the end of the frame */ + float tilt_code; /* tilt of code */ + float mem_syn1[M]; /* synthesis filter memory (for core switching and FD BWE) */ + float mem_syn2[M]; /* synthesis filter memory */ + float mem_syn3[M]; + float mem_deemph; /* deemphasis filter memory */ + float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ + float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) */ + float stab_fac; /* LSF stability factor */ + float stab_fac_smooth; /* low-pass filtered stability factor */ + int16_t last_coder_type; /* previous coder type */ + float agc_mem2[2]; /* memory of AGC for saturation control */ + int16_t mid_lsf_int; + int16_t safety_net; + + int16_t GSC_noisy_speech; /* AC mode (GSC) - flag to indicate GSC on SWB noisy speech */ + int16_t GSC_IVAS_mode; /* AC mode (GSC) - GSC IVAS mode */ + int16_t Last_GSC_noisy_speech_flag; /* AC mode (GSC) - mem of the past flag to indicate GSC osn SWB noisy speech */ + GSC_DEC_HANDLE hGSCDec; + + float gc_threshold; /* Noise enhancer - threshold for gain_code */ + float dispMem[8]; /* Noise enhancer - phase dispersion algorithm memory */ + + ZERO_BWE_DEC_HANDLE hBWE_zero; /* HF (6-7kHz) BWE */ + + int16_t unv_cnt; /* Stationary noise UV modification - unvoiced frame counter */ + int16_t uv_count; /* Stationary noise UV modification - unvoiced counter */ + int16_t act_count; /* Stationary noise UV modification - activation counter */ + float ge_sm; /* Stationary noise UV modification - smoothed excitation gain */ + float lspold_s[M]; /* Stationary noise UV modification - old LSP vector */ + int16_t noimix_seed; /* Stationary noise UV modification - mixture seed */ + float min_alpha; /* Stationary noise UV modification - minimum alpha */ + float exc_pe; /* Stationary noise UV modification - memory of the preemphasis filter */ + + int16_t bfi; /* FEC - bad frame indicator */ + int16_t prev_bfi; /* FEC - previous bad frame indicator */ + int16_t prev_old_bfi; /* FEC - previous old bad frame indicator */ + int16_t seed; /* FEC - seed for random generator for excitation */ + float lp_ener_bfi; /* FEC - long-term active-signal average energy */ + int16_t last_good; /* FEC - clas of last good received */ + float lp_gainp; /* FEC - low-pass filtered pitch gain */ + float lp_gainc; /* FEC - low-pass filtered code gain */ + float lp_ener; /* FEC - low-pass filtered energy */ + float enr_old; /* FEC - energy of the concealed frame */ + float bfi_pitch; /* FEC - pitch for FEC */ + int16_t bfi_pitch_frame; /* FEC - frame length when pitch for FEC is saved */ + float old_pitch_buf[2 * NB_SUBFR16k + 2]; /* FEC - buffer of old subframe pitch values */ + int16_t upd_cnt; /* FEC - counter of frames since last update */ + int16_t scaling_flag; /* FEC - flag to indicate energy control of syn */ + float lp_ener_FEC_av; /* FEC - averaged voiced signal energy */ + float lp_ener_FEC_max; /* FEC - averaged voiced signal energy */ + float old_enr_LP; /* FEC - LP filter gain */ + int16_t prev_nbLostCmpt; /* FEC - compt for number of consecutive lost frame at the previous frame*/ + int16_t mode_lvq; /* FEC - index for LSF mean vector */ + float lsfoldbfi0[M]; /* FEC - LSF vector of the previous frame */ + float lsfoldbfi1[M]; /* FEC - LSF vector of the past previous frame */ + float lsf_adaptive_mean[M]; /* FEC - adaptive mean LSF vector for FEC */ + int16_t decision_hyst; /* FEC - hysteresis of the music/speech decision */ + WI_DEC_HANDLE hWIDec; + int16_t relax_prev_lsf_interp; + float mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM]; /* FEC - memory of the synthesis signal for frame class estimation */ + + int16_t bpf_off; /* Bass post-filter - do not use BPF when this flag is set to 1 */ + BPF_DEC_HANDLE hBPF; /* Bass post-filter handle */ + + HANDLE_CLDFB_FILTER_BANK cldfbAna; /* main analysis filter bank handle */ + HANDLE_CLDFB_FILTER_BANK cldfbBPF; /* BPF analysis filter bank handle */ + HANDLE_CLDFB_FILTER_BANK cldfbSyn; /* main synthesis filter bank handle */ + HANDLE_CLDFB_FILTER_BANK cldfbSynHB; /* high band synthesis filter bank needed in SBA2Stereo DTX handling */ + + int16_t last_active_bandsToZero_bwdec; + int16_t last_flag_filter_NB; + float perc_bwddec; + int16_t active_frame_cnt_bwddec; + int16_t flag_buffer[20]; + int16_t total_frame_cnt_bwddec; + float avg_nrg_LT; + float ng_ener_ST; /* Noise gate - short-term energy */ + + int16_t last_L_frame; /* ACELP@16kHz - last value of st->L_frame */ + float mem_preemp_preQ; /* ACELP@16kHz - prequantizer preemhasis memory */ + int16_t last_nq_preQ; /* ACELP@16kHz - AVQ subquantizer number of the last sub-band of the last subframe */ + int16_t last_code_preq; /* ACELP@16kHz - last coefficient of the pre-quantizer contribution */ + int16_t use_acelp_preq; /* ACELP@16kHz - flag of prequantizer usage */ + + /* NB and formant post-filter */ + PFSTAT_HANDLE hPFstat; /* NB and formant post-filter states */ + float psf_lp_noise; /* NB post-filter - long-term noise */ + + float last_voice_factor; + float prev_synth_buffer[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS )]; + + int16_t old_bfi_cnt; /* HQ core - # of bfi until previous frame(for FEC) */ + + /*----------------------------------------------------------------------------------* + * DTX and TD CNG parameters + *----------------------------------------------------------------------------------*/ + + int16_t first_CNG; /* DTX/CNG - first CNG frame flag */ + int16_t cng_type; /* DTX/CNG - flag indicating LP or CLDFB based SID/CNG */ + int16_t last_vad; + int32_t last_active_brate; /* DTX/CNG - last active frame bitrate used for CNG_mode control */ + int16_t last_CNG_L_frame; /* DTX/CNG - last CNG frame length */ + + int16_t active_cnt; + + int16_t CNG_mode; /* DTX/CNG - mode for DTX configuration */ + float lspCNG[M]; /* DTX/CNG - LP filtered ISPs */ + + TD_CNG_DEC_HANDLE hTdCngDec; + int16_t masa_sid_format; + + /*----------------------------------------------------------------------------------* + * AMR-WB IO mode parameters + *----------------------------------------------------------------------------------*/ + + AMRWB_IO_DEC_HANDLE hAmrwb_IO; + + + /*----------------------------------------------------------------------------------* + * SC-VBR parameters + *----------------------------------------------------------------------------------*/ + + SC_VBR_DEC_HANDLE hSC_VBR; + + int16_t last_ppp_mode_dec; + int16_t ppp_mode_dec; + int16_t last_nelp_mode_dec; + int16_t nelp_mode_dec; + float prev_gain_pit_dec; + float prev_tilt_code_dec; + int16_t vbr_hw_BWE_disable_dec; + int16_t last_vbr_hw_BWE_disable_dec; + + /*----------------------------------------------------------------------------------* + * channel-aware mode + *----------------------------------------------------------------------------------*/ + + float tilt_code_dec[NB_SUBFR16k]; + + int16_t rf_frame_type; + int16_t use_partial_copy; + int16_t prev_use_partial_copy; + int16_t rf_flag; + int16_t rf_flag_last; + + int16_t rf_fec_offset; + int16_t next_coder_type; + int16_t prev_rf_frame_type; + int16_t rf_target_bits; + + int16_t rf_indx_nelp_fid; + int16_t rf_indx_nelp_iG1; + int16_t rf_indx_nelp_iG2[2]; + int16_t rf_indx_tbeGainFr; + + /*----------------------------------------------------------------------------------* + * HR SWB BWE parameters + *----------------------------------------------------------------------------------*/ + + HR_BWE_DEC_HANDLE hBWE_FD_HR; + + /*----------------------------------------------------------------------------------* + * HQ core parameters + *----------------------------------------------------------------------------------*/ + + HQ_DEC_HANDLE hHQ_core; + + int16_t last_core; + int16_t last_core_from_bs; /* last frame core as coded in TCX bitstream */ + + int16_t last_L_frame_ori; + float previoussynth[L_FRAME48k]; /* note: only 60+111 out of 960 samples are needed in IVAS (for ACELP->TCX switching */ + float old_synth_sw[NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS )]; /* note: buffer used only in EVS mono */ + float delay_buf_out[HQ_DELTA_MAX * HQ_DELAY_COMP]; + + float old_Aq_12_8[M + 1]; /* old Aq[] for core switching */ + float old_Es_pred; /* old Es_pred for core switching */ + + HQ_NBFEC_HANDLE hHQ_nbfec; + + /*----------------------------------------------------------------------------------* + * TBE parameters + *----------------------------------------------------------------------------------*/ + + TD_BWE_DEC_HANDLE hBWE_TD; + + int16_t old_bwe_delay; + float hb_prev_synth_buffer[NS2SA( 48000, DELAY_BWE_TOTAL_NS )]; + + /* WB/SWB bandwidth switching */ + float tilt_wb; + float tilt_swb; + float prev_ener_shb; + float enerLH; + float prev_enerLH; + float enerLL; + float prev_enerLL; + int16_t prev_fractive; + int16_t prev_bws_cnt; + int16_t bws_cnt; + int16_t bws_cnt1; + float attenu1; + int16_t last_inner_frame; + int16_t last_bwidth; + float t_audio_q[L_FRAME]; + + /*----------------------------------------------------------------------------------* + * SWB BWE structure + *----------------------------------------------------------------------------------*/ + + FD_BWE_DEC_HANDLE hBWE_FD; + + + /*----------------------------------------------------------------------------------* + * LD music post-filter + *----------------------------------------------------------------------------------*/ + + MUSIC_POSTFILT_HANDLE hMusicPF; + + /*----------------------------------------------------------------------------------* + * TCX LTP decoder handle + *----------------------------------------------------------------------------------*/ + TCX_LTP_DEC_HANDLE hTcxLtpDec; + + /*----------------------------------------------------------------------------------* + * TCX core decoder handle + *----------------------------------------------------------------------------------*/ + + TCX_DEC_HANDLE hTcxDec; + + + /*----------------------------------------------------------------------------------* + * Mode 2 + *----------------------------------------------------------------------------------*/ + + int16_t force_lpd_reset; + ACELP_config acelp_cfg; /* ACELP configuration set for each frame */ + ACELP_config acelp_cfg_rf; /* ACELP configuration for RF frame */ + + TCX_CONFIG_HANDLE hTcxCfg; /* TCX config */ + + int16_t bits_frame; /* bit per frame overall */ + int16_t bits_frame_core; /* bit per frame for the core */ + int16_t narrowBand; + + int16_t last_is_cng; + + float *acelp_zir; + float syn[M + 1]; + + int16_t bpf_gain_param; /* bass post-filter gain factor parameter (0->noBpf)*/ + + int16_t L_frame_past; + int16_t L_frameTCX_past; + + float lsfold_uw[M]; /* old lsf (unweighted) */ + float lspold_uw[M]; /* old lsp (unweighted) */ + int16_t seed_tcx_plc; /* seed memory (for random function in TCX PLC) */ + float past_gpit; /* past gain of pitch (for frame recovery) */ + float past_gcode; /* past energy (!) of code (for frame recovery) */ + float lsf_cng[M]; /* lsf coefficients used for CNG generation (long term) */ + float lspold_cng[M]; /* lsp coefficients used for CNG generation (long term) */ + float lsp_q_cng[M]; /* lsp coefficients used for CNG generation (short term interpolated) */ + float old_lsp_q_cng[M]; /* lsp coefficients used for CNG generation (short term interpolated) */ + float lsf_q_cng[M]; /* lsf coefficients used for CNG generation (short term interpolated) */ + float old_lsf_q_cng[M]; /* lsf: old quantized lsfs for background noise */ + float Aq_cng[( NB_SUBFR16k + 1 ) * ( M + 1 )]; /* LPC coefficients derived from CNG estimate */ + float mem_syn_unv_back[M]; /* filter memory for unvoiced synth */ + int16_t plcBackgroundNoiseUpdated; /* flag: Is background noise estimate updated? */ + float last_gain_syn_deemph; + float last_concealed_gain_syn_deemph; + + /* variables for framing */ + int16_t nb_subfr; + + int16_t fscale; + int16_t fscale_old; + int32_t sr_core; + + int16_t pit_min; + int16_t pit_fr1; + int16_t pit_fr1b; + int16_t pit_fr2; + int16_t pit_max; + int16_t pit_res_max; + int16_t pit_res_max_past; + + /*Preemphasis factor*/ + float preemph_fac; + float gamma; + + /*for AMR-WB like 6.4 to 7 kHz upsampling and noise filling*/ + float mem_Aq[NB_SUBFR16k * ( M + 1 )]; + + /* Error concealment */ + int16_t last_core_bfi; /* PLC - mode in previous frame */ + int16_t nbLostCmpt; /* PLC - compt for number of consecutive lost frame */ + + float old_fpitch; /* PLC - last pitch of previous frame (as transmitted) */ + float old_fpitchFB; /* PLC - last pitch of previous FB frame (depends on output sr) */ + int16_t clas_dec; /* PLC - frame class at the decoder */ + float mem_pitch_gain[2 * NB_SUBFR16k + 2]; /* PLC - Pitch gain memory */ + int16_t plc_use_future_lag; /* PLC - flag indicating if info (pitch lag / pitch gain) about future frame is usable */ + + float cummulative_damping; + float cngTDLevel; + int16_t reset_mem_AR; + int16_t rate_switching_init; + + /* LPC quantization */ + int16_t lpcQuantization; + int16_t numlpc; + + /* Bandwidth */ + float TcxBandwidth; + + float voice_fac; + + int16_t tcxonly; + + int16_t last_ctx_hm_enabled; + + TonalMDCTConcealPtr hTonalMDCTConc; + int16_t tonal_mdct_plc_active; + int16_t last_tns_active; + int16_t second_last_tns_active; + int16_t second_last_core; + + /* parameters for switching */ + float mem_syn_r[L_SYN_MEM]; /*LPC synthesis memory needed for rate switching*/ + int16_t rate_switching_reset; + + float bpf_noise_buf[L_FRAME16k]; + float *p_bpf_noise_buf; + + int16_t enableGplc; + int16_t flagGuidedAcelp; + int16_t T0_4th; + int16_t guidedT0; + + int16_t enablePlcWaveadjust; + int16_t tonality_flag; + T_PLCInfo_HANDLE hPlcInfo; + + int16_t VAD; + int16_t flag_cna; + int16_t last_flag_cna; + + float lp_noise; + + int16_t seed_acelp; + int16_t core_ext_mode; /*GC,VC,UC,TC: core extended mode used for PLC or Acelp-external modules.*/ + + int16_t dec_glr; + int16_t dec_glr_idx; + + DEC_MODE m_decodeMode; + uint8_t m_frame_type; /*ZERO_FRAME/SID_FRAME/ACTIVE_FRAME*/ + uint8_t m_old_frame_type; /*ZERO_FRAME/SID_FRAME/ACTIVE_FRAME*/ + + int16_t old_ppp_mode; + int16_t con_tcx; + int16_t last_con_tcx; + + int16_t writeFECoffset; + + /*----------------------------------------------------------------------------------* + * Frequency-domain-based CNG + *----------------------------------------------------------------------------------*/ + + HANDLE_FD_CNG_DEC hFdCngDec; + + /*----------------------------------------------------------------------------------* + * IGF + *----------------------------------------------------------------------------------*/ + + IGF_DEC_INSTANCE_HANDLE hIGFDec; + int16_t igf; + + /*----------------------------------------------------------------------------------* + * TEC + *----------------------------------------------------------------------------------*/ + + int16_t tec_tfa; + int16_t tec_flag; + int16_t tfa_flag; + TEC_DEC_HANDLE hTECDec; + + /*----------------------------------------------------------------------------------* + * Stereo/IVAS parameters + *----------------------------------------------------------------------------------*/ + + int16_t tdm_LRTD_flag; /* LRTD stereo mode flag */ + int16_t cna_dirac_flag; /* CNA in DirAC flag*/ + int16_t cng_dirac_flag; /* CNG in DirAC flag*/ + + /* MCT Channel mode indication: LFE, ignore channel? */ + MCT_CHAN_MODE mct_chan_mode; + + + int16_t cng_spar_flag; /* CNG in SPAR flag*/ + +} Decoder_State, *DEC_CORE_HANDLE; + +#endif diff --git a/lib_dec/stat_noise_uv_dec.c b/lib_dec/stat_noise_uv_dec.c new file mode 100644 index 0000000000..f9e8ec4f78 --- /dev/null +++ b/lib_dec/stat_noise_uv_dec.c @@ -0,0 +1,112 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------* + * stat_noise_uv_dec() + * + * Modifies excitation signal in UC mode when the noise is stationary + *---------------------------------------------------------*/ + +void stat_noise_uv_dec( + Decoder_State *st, /* i/o: decoder static memory */ + const float *lsp_new, /* i : end-frame LSP vector */ + const float *lsp_mid, /* i : mid-frame LSP vector */ + float *Aq, /* o : A(z) quantized for the 4 subframes */ + float *exc2, /* i/o: excitation buffer */ + const int16_t uc_two_stage_flag /* i : flag indicating two-stage UC */ +) +{ + int16_t i; + float ftmp, noisiness = 0; + + /*-----------------------------------------------------------------* + * Decode the VAD flag + *-----------------------------------------------------------------*/ + + if ( ( st->coder_type == UNVOICED && !uc_two_stage_flag ) || ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 ) ) + { + /* read the noisiness parameter */ + noisiness = (float) get_next_indice( st, NBITS_NOISENESS ); + } + + /*-----------------------------------------------------------------* + * Update long-term energies for FEC + * Update LSP vector for CNG + *-----------------------------------------------------------------*/ + + if ( st->coder_type == INACTIVE ) + { + if ( st->unv_cnt > 20 ) + { + ftmp = st->lp_gainc * st->lp_gainc; + st->lp_ener = 0.7f * st->lp_ener + 0.3f * ftmp; + if ( st->hTdCngDec != NULL ) + { + for ( i = 0; i < M; i++ ) + { + st->lspCNG[i] = (float) ( 0.9f * st->lspCNG[i] + 0.1f * lsp_new[i] ); + } + } + } + else + { + st->unv_cnt++; + } + } + else + { + st->unv_cnt = 0; + } + + /*-----------------------------------------------------------------* + * Modify the excitation signal + *-----------------------------------------------------------------*/ + + if ( !st->Opt_AMR_WB ) + { + stat_noise_uv_mod( st->coder_type, noisiness, st->lsp_old, lsp_new, lsp_mid, Aq, exc2, 0, &st->ge_sm, &st->uv_count, &st->act_count, st->lspold_s, &st->noimix_seed, &st->min_alpha, &st->exc_pe, st->core_brate, st->bwidth ); + } + + return; +} diff --git a/lib_dec/swb_bwe_dec.c b/lib_dec/swb_bwe_dec.c new file mode 100644 index 0000000000..fca9267bd0 --- /dev/null +++ b/lib_dec/swb_bwe_dec.c @@ -0,0 +1,792 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * para_pred_bws() + * + * predict SWB parameters for bandwidth switching + *-------------------------------------------------------------------*/ + +static int16_t para_pred_bws( + Decoder_State *st, /* i/o: decoder state structure */ + float *signal_wb, /* i : wideband frequency signal */ + float *SWB_fenv /* o : frequency-domain BWE envelope */ +) +{ + int16_t i, j, k; + int16_t mode; + FD_BWE_DEC_HANDLE hBWE_FD; + float *input_hi; + float peak, mean[7], mag, min_val; + float avrg1, avrg2; + float att; + + hBWE_FD = st->hBWE_FD; + + mode = NORMAL; + + k = 0; + input_hi = &signal_wb[SHARP_WIDTH]; + for ( i = 0; i < 7; i++ ) + { + peak = 0.0f; + mean[i] = 0; + for ( j = 0; j < SHARP_WIDTH; j++ ) + { + mag = (float) fabs( *input_hi ); + if ( mag > peak ) + { + peak = mag; + } + mean[i] += mag; + input_hi++; + } + + if ( peak * ( SHARP_WIDTH + 3.5f ) > 4.5f * mean[i] && peak > 8.0f ) + { + k += 1; + } + } + + avrg1 = 0.0f; + avrg2 = 0.0f; + for ( i = 1; i < 4; i++ ) + { + avrg1 += mean[i]; + avrg2 += mean[i + 3]; + } + avrg1 /= 3; + avrg2 /= 3; + + min_val = FLT_MAX; + peak = 0.0f; + for ( i = 4; i < 7; i++ ) + { + if ( mean[i] > 2.0f * avrg2 ) + { + mean[i] *= 2 * avrg2 / mean[i]; + } + if ( mean[i] < min_val ) + { + min_val = mean[i]; + } + if ( mean[i] > peak ) + { + peak = mean[i]; + } + } + + if ( st->tilt_wb > 8 ) + { + min_val = min( st->tilt_wb / 15.0f, 1.0f ) * peak; + } + + if ( peak == 0 || min_val == 0 ) + { + set_f( SWB_fenv, 0, SWB_FENV ); + } + else + { + for ( i = 0; i < SWB_FENV; i++ ) + { + SWB_fenv[i] = min_val * mean[i / 5 + 4] / ( 64 * peak ); + } + } + + for ( j = 0, i = SWB_FENV / 2; i < SWB_FENV; i++ ) + { + SWB_fenv[i] *= ( 1.0f - (float) j++ / SWB_FENV ); + } + + if ( avrg1 > 8.0f * avrg2 ) + { + for ( i = 0; i < SWB_FENV; i++ ) + { + SWB_fenv[i] *= 0.5f; + } + } + if ( st->last_core != HQ_CORE && st->last_codec_mode == MODE1 && + ( st->enerLH > 0.5f * st->prev_enerLH && st->enerLH < 2.0f * st->prev_enerLH ) && + ( st->enerLL > 0.5f * st->prev_enerLL && st->enerLL < 2.0f * st->prev_enerLL ) ) + { + for ( i = 0; i < SWB_FENV; i++ ) + { + if ( st->prev_coder_type != st->coder_type && SWB_fenv[i] > 2.0f * hBWE_FD->prev_SWB_fenv[i] ) + { + SWB_fenv[i] = 0.1f * SWB_fenv[i] + 0.9f * hBWE_FD->prev_SWB_fenv[i]; + } + else + { + SWB_fenv[i] = st->attenu1 * SWB_fenv[i] + ( 1.0f - st->attenu1 ) * hBWE_FD->prev_SWB_fenv[i]; + } + } + + if ( st->attenu1 < 0.9f ) + { + st->attenu1 += 0.05f; + } + } + else + { + if ( st->core_brate != st->last_core_brate || ( st->enerLH > 0.5f * st->prev_enerLH && st->enerLH < 2.0f * st->prev_enerLH ) || + ( st->enerLL > 0.5f * st->prev_enerLL && st->enerLL < 2.0f * st->prev_enerLL ) ) + { + for ( i = 0; i < SWB_FENV; i++ ) + { + if ( SWB_fenv[i] > 2.0f * hBWE_FD->prev_SWB_fenv[i] ) + { + SWB_fenv[i] = hBWE_FD->prev_SWB_fenv[i]; + } + } + } + + for ( i = 0; i < SWB_FENV; i++ ) + { + SWB_fenv[i] = 0.9f * SWB_fenv[i] + 0.1f * hBWE_FD->prev_SWB_fenv[i]; + } + + st->attenu1 = 0.1f; + } + + if ( k > 3 ) + { + mode = HARMONIC; + } + + att = ( (float) N_WS2N_FRAMES - (float) st->bws_cnt ) / (float) N_WS2N_FRAMES; + if ( st->L_frame == L_FRAME16k ) + { + for ( i = 0; i < 4; i++ ) + { + SWB_fenv[i] *= att; + } + } + + for ( i = 4; i < SWB_FENV; i++ ) + { + SWB_fenv[i] *= att; + } + + return mode; +} + +/*-------------------------------------------------------------------* + * WB_BWE_gain_deq() + * + * Decoding of WB parameters + *-------------------------------------------------------------------*/ + +static int16_t WB_BWE_gain_deq( + Decoder_State *st, /* i/o: decoder state structure */ + float *WB_fenv ) +{ + int16_t mode; + int16_t index; + + index = get_next_indice( st, 5 ); + mode = get_next_indice( st, 1 ) + 2; + + WB_fenv[0] = (float) pow( 2, 0.5f * F_2_5[2 * index] ); + WB_fenv[1] = (float) pow( 2, 0.5f * F_2_5[2 * index + 1] ); + + return ( mode ); +} + +/*-------------------------------------------------------------------* + * wb_bwe_dec() + * + * WB BWE decoder (only for 16kHz signals) + *-------------------------------------------------------------------*/ + +void wb_bwe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float output[], /* i : synthesis @internal Fs */ + float *synth, /* i/o: ACELP core synthesis/final synthesis */ + float *hb_synth, /* o : SHB synthesis/final synthesis */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t output_frame, /* i : frame length */ + const float voice_factors[], /* i : voicing factors */ + const float pitch_buf[] /* i : pitch buffer */ +) +{ + int16_t i, mode; + FD_BWE_DEC_HANDLE hBWE_FD; + float ysynth[L_FRAME48k]; /* MDCT spectrum of core synthesis */ + float yerror[L_FRAME48k]; /* MDCT spectrum of error */ + float wtda_synth[2 * L_FRAME48k]; + float WB_fenv[SWB_FENV]; + + hBWE_FD = st->hBWE_FD; + + /* MDCT of the core synthesis signal */ + if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) + { + /* IVAS_fmToDo: wtda() does not support L_FRAME length; thus temporarily resample the signal */ + /* IVAS_fmToDo: delay output[] by 1.25ms ? */ + lerp( output, ysynth, L_FRAME16k, st->L_frame ); + + wtda( ysynth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, /*st->L_frame*/ L_FRAME16k ); + direct_transform( wtda_synth, ysynth, 0, /*st->L_frame*/ L_FRAME16k, st->element_mode ); + } + else + { + wtda( synth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, output_frame ); + direct_transform( wtda_synth, ysynth, 0, output_frame, st->element_mode ); + } + + if ( !st->bfi ) + { + if ( st->extl_brate > 0 ) + { + /* de-quantization */ + mode = WB_BWE_gain_deq( st, WB_fenv ); + hBWE_FD->last_wb_bwe_ener = 0.5f * ( WB_fenv[0] + WB_fenv[1] ); + } + else + { + int32_t tmp_brate; + + tmp_brate = st->last_core_brate; + if ( st->last_total_brate == ACELP_9k60 && st->last_extl == SWB_TBE ) + { + tmp_brate = ACELP_8k00; /* this is needed in order to stay BE wrt. EVS mono */ + } + + if ( st->last_extl != WB_BWE ) + { + hBWE_FD->prev_SWB_fenv[0] = 0.0f; + } + + mode = WB_BWE_gain_pred( WB_fenv, ysynth, st->coder_type, st->prev_coder_type, hBWE_FD->prev_SWB_fenv[0], voice_factors, pitch_buf, tmp_brate, hBWE_FD->last_wb_bwe_ener, st->last_extl, st->tilt_wb ); + } + } + else + { + /* FEC */ + mode = NORMAL; + for ( i = 0; i < 2; i++ ) + { + WB_fenv[i] = 0.75f * hBWE_FD->prev_SWB_fenv[i]; + } + } + + if ( st->last_extl != WB_BWE || st->bfi ) + { + mvr2r( WB_fenv, hBWE_FD->prev_SWB_fenv, 2 ); + } + + /* reconstruction of MDCT spectrum of the error signal */ + WB_BWE_decoding( ysynth, WB_fenv, yerror, L_FRAME16k, mode, st->last_extl, &hBWE_FD->prev_Energy_wb, hBWE_FD->prev_SWB_fenv, &hBWE_FD->prev_L_swb_norm, st->extl, st->coder_type, st->total_brate, &hBWE_FD->Seed, &hBWE_FD->prev_flag, st->prev_coder_type ); + + if ( st->output_Fs == 32000 ) + { + set_f( &yerror[L_FRAME16k], 0, L_FRAME16k ); + } + else if ( st->output_Fs == 48000 ) + { + set_f( &yerror[L_FRAME16k], 0, L_FRAME32k ); + } + + inverse_transform( yerror, wtda_synth, 0, output_frame, -1, st->element_mode ); + + window_ola( wtda_synth, hb_synth, hBWE_FD->mem_imdct, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); + + if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) + { + /* add HB synth from hf_synth() */ + v_add( hb_synth, synth, hb_synth, output_frame ); + } + + st->hBWE_FD->prev_mode = mode; + + return; +} + +/*-------------------------------------------------------------------* + * swb_bwe_gain_deq() + * + * Decoding of SWB parameters + *-------------------------------------------------------------------*/ + +/*! r: BWE class */ +int16_t swb_bwe_gain_deq( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t core, /* i : core */ + float *SWB_tenv, /* o : time-domain BWE envelope */ + float *SWB_fenv, /* o : frequency-domain BWE envelope */ + const int16_t hr_flag, /* i : high rate flag */ + const int16_t hqswb_clas /* i : HQ BWE class */ +) +{ + int16_t index, mode, n_band; + int16_t indice[6]; + float quant_tmp[SWB_FENV / 2], quant_tmp2[SWB_FENV / 2]; + int16_t nb_bits[6]; + int16_t nenv; + + if ( hqswb_clas > 0 ) + { + mode = get_next_indice( st, 1 ); + if ( mode == 0 ) + { + mode = get_next_indice( st, 1 ); + } + else + { + mode = HQ_GENERIC_SP_EXC; + } + } + else + { + mode = get_next_indice( st, 2 ); + } + + if ( mode == 1 && core == ACELP_CORE ) + { + for ( n_band = 0; n_band < SWB_TENV; n_band++ ) + { + index = get_next_indice( st, 4 ); + SWB_tenv[n_band] = (float) ( 1 << index ); + } + + indice[0] = get_next_indice( st, 7 ); + indice[1] = get_next_indice( st, 6 ); + + for ( n_band = 0; n_band < DIM_TR1; n_band++ ) + { + quant_tmp[2 * n_band] = Env_TR_Cdbk1[indice[0] * DIM_TR1 + n_band]; + } + + quant_tmp[1] = ( quant_tmp[0] + quant_tmp[2] ) * 0.5f + Env_TR_Cdbk2[indice[1] * DIM_TR2]; + quant_tmp[3] = quant_tmp[2] + Env_TR_Cdbk2[indice[1] * DIM_TR2 + 1]; + + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + SWB_fenv[n_band] = (float) pow( 10, 0.025f * ( quant_tmp[n_band] + Mean_env_tr[n_band] ) ); + } + + /* in case of band-width switching, attenuate frame gain */ + if ( st->bws_cnt1 > 0 ) + { + for ( n_band = 0; n_band < SWB_TENV; n_band++ ) + { + SWB_tenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; + } + + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + SWB_fenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; + } + } + } + else + { + nb_bits[0] = 5; + nb_bits[1] = 7; + nb_bits[2] = 6; + nb_bits[3] = 5; + + if ( hr_flag == 1 ) + { + nb_bits[4] = 5; + nenv = SWB_FENV - 2; + } + else + { + nb_bits[4] = 6; + nenv = SWB_FENV; + } + + for ( n_band = 0; n_band < 5; n_band++ ) + { + indice[n_band] = get_next_indice( st, nb_bits[n_band] ); + } + + if ( hqswb_clas == HQ_GEN_FB ) + { + indice[n_band] = get_next_indice( st, 5 ); + } + + mvr2r( &EnvCdbk11[indice[0] * DIM11], quant_tmp, DIM11 ); + mvr2r( &EnvCdbk1st[indice[1] * DIM1ST], quant_tmp2, DIM1ST ); + mvr2r( &EnvCdbk2nd[indice[2] * DIM2ND], quant_tmp2 + DIM1ST, DIM2ND ); + + for ( n_band = 0; n_band < DIM11 - 1; n_band++ ) + { + quant_tmp[n_band] += quant_tmp2[n_band]; + SWB_fenv[n_band * 2] = quant_tmp[n_band]; + } + + if ( hr_flag == 1 ) + { + quant_tmp[6] += quant_tmp2[6]; + SWB_fenv[11] = quant_tmp[6]; + + + mvr2r( &EnvCdbk3rd[indice[3] * DIM3RD], quant_tmp2, DIM3RD ); + mvr2r( &EnvCdbk3rd[indice[4] * DIM3RD], quant_tmp2 + DIM3RD, DIM3RD ); + + for ( n_band = 0; n_band < 5; n_band++ ) + { + SWB_fenv[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band + 1]; + } + + SWB_fenv[0] += quant_tmp2[0]; + } + else + { + quant_tmp[DIM11 - 1] += quant_tmp2[DIM11 - 1]; + SWB_fenv[( DIM11 - 1 ) * 2] = quant_tmp[DIM11 - 1]; + + mvr2r( &EnvCdbk3rd[indice[3] * DIM3RD], quant_tmp2, DIM3RD ); + mvr2r( &EnvCdbk4th[indice[4] * DIM4TH], quant_tmp2 + DIM3RD, DIM4TH ); + + for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) + { + SWB_fenv[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band]; + } + + SWB_fenv[n_band * 2 + 1] = quant_tmp[n_band] + quant_tmp2[n_band]; + } + + for ( n_band = 0; n_band < nenv; n_band++ ) + { + Word16 tmp, frac, exp; + Word32 L_tmp; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif + tmp = add( (int16_t) ( SWB_fenv[n_band] * 256 ), (int16_t) ( Mean_env[n_band] * 256 ) ); /*Q8 */ + + L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q26 */ + L_tmp = L_shr( L_tmp, 10 ); /* From Q26 to Q16 */ + frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ + + tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ + /* output of Pow2() will be: */ + /* 16384 < Pow2() <= 32767 */ + exp = sub( exp, 13 ); +#ifdef BASOP_NOGLOB + tmp = shl_o( tmp, add( exp, 1 ), &Overflow ); /*Q1 */ +#else + tmp = shl( tmp, add( exp, 1 ) ); /*Q1 */ +#endif + SWB_fenv[n_band] = (float) tmp * 0.5f; /*Q1 */ + } + + if ( hqswb_clas == HQ_GEN_FB ) + { + mvr2r( &EnvCdbkFB[indice[5] * DIM_FB], &SWB_fenv[nenv], DIM_FB ); + for ( n_band = 0; n_band < DIM_FB; n_band++ ) + { + Word16 tmp, frac, exp; + Word32 L_tmp; + + tmp = add( (int16_t) ( SWB_fenv[n_band + nenv] * 128 ), (int16_t) ( Mean_env_fb[n_band] * 128 ) ); /*Q7 */ + L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q25 */ + L_tmp = L_shr( L_tmp, 9 ); /* From Q25 to Q16 */ + frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ + + tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ + /* output of Pow2() will be: */ + /* 16384 < Pow2() <= 32767 */ + exp = sub( exp, 13 ); + tmp = shl( tmp, add( exp, 1 ) ); + move16(); + SWB_fenv[add( n_band, nenv )] = (float) tmp * 0.5f; + } + } + } + + return mode; +} + +/*-------------------------------------------------------------------* + * swb_bwe_dec() + * + * SWB BWE decoder + *-------------------------------------------------------------------*/ + +void swb_bwe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float output[], /* i : synthesis @internal Fs */ + const float *synth, /* i : ACELP core synthesis/final synthesis */ + float *hb_synth, /* o : SHB synthesis/final synthesis */ + const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ + const int16_t output_frame /* i : frame length */ +) +{ + int16_t i, l_subfr; + FD_BWE_DEC_HANDLE hBWE_FD; + float ysynth[L_FRAME48k]; + float yerror[L_FRAME48k]; + float wtda_synth[2 * L_FRAME48k]; + float SWB_tenv[SWB_TENV]; + float SWB_fenv[SWB_FENV]; + int16_t L; + int16_t mode; + int16_t frica_flag = 0; + float fb_ener_adjust = 0.0f; + int16_t j = 0; + float ener_adjust_quan; + int16_t idxGain; + int16_t fb_band_begin; + + hBWE_FD = st->hBWE_FD; + + /*---------------------------------------------------------------------* + * SWB BWE decoding + *---------------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) + { + /* TBD - wtda() does not support L_FRAME length; thus temporarily resample the signal */ + /* TBV - delay output[] by 1.25ms ? */ + lerp( output, ysynth, L_FRAME16k, st->L_frame ); + + /* windowing of the ACELP core synthesis */ + wtda( ysynth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, /*st->L_frame*/ L_FRAME16k ); + + /* DCT of the ACELP core synthesis */ + direct_transform( wtda_synth, ysynth, 0, /*st->L_frame*/ L_FRAME16k, st->element_mode ); + } + else + { + /* windowing of the ACELP core synthesis */ + wtda( synth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, output_frame ); + + /* DCT of the ACELP core synthesis */ + direct_transform( wtda_synth, ysynth, 0, output_frame, st->element_mode ); + } + + if ( !st->bfi ) + { + if ( st->bws_cnt > 0 ) + { + /* estimate parameters */ + mode = para_pred_bws( st, ysynth, SWB_fenv ); + } + else + { + /* de-quantization */ + mode = swb_bwe_gain_deq( st, ACELP_CORE, SWB_tenv, SWB_fenv, 0, -1 ); + } + + L = mode == TRANSIENT ? SWB_FENV_TRANS : SWB_FENV; + st->prev_ener_shb = 0.0f; + for ( i = 0; i < L; i++ ) + { + st->prev_ener_shb += SWB_fenv[i]; + } + st->prev_ener_shb /= L; + } + else + { + /* SHB FEC */ + if ( hBWE_FD->prev_mode != TRANSIENT ) + { + mode = hBWE_FD->prev_mode; + } + else + { + mode = NORMAL; + } + + mvr2r( hBWE_FD->prev_SWB_fenv, SWB_fenv, SWB_FENV ); + } + + /* reconstruction of MDCT spectrum of the error signal */ + set_f( yerror, 0, output_frame ); + + if ( st->L_frame == L_FRAME16k ) + { + SWB_BWE_decoding( ysynth, SWB_fenv, yerror, L_FRAME32k - 80, mode, &frica_flag, &hBWE_FD->prev_Energy, hBWE_FD->prev_SWB_fenv, &hBWE_FD->prev_L_swb_norm, st->tilt_wb, &hBWE_FD->Seed, 80, &hBWE_FD->prev_weight, st->extl, st->last_extl ); + } + else + { + SWB_BWE_decoding( ysynth, SWB_fenv, yerror, L_FRAME32k - 80, mode, &frica_flag, &hBWE_FD->prev_Energy, hBWE_FD->prev_SWB_fenv, &hBWE_FD->prev_L_swb_norm, st->tilt_wb, &hBWE_FD->Seed, 6, &hBWE_FD->prev_weight, st->extl, st->last_extl ); + } + + if ( hBWE_FD->prev_frica_flag == 1 && frica_flag == 0 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + hBWE_FD->mem_imdct[i] *= 1.0f - i * 0.015625f; + } + + for ( ; i < output_frame; i++ ) + { + hBWE_FD->mem_imdct[i] = 0.0f; + } + } + + /* decode information */ + if ( st->extl == FB_BWE ) + { + if ( !st->bfi ) + { + idxGain = get_next_indice( st, NUM_BITS_FB_FRAMEGAIN ); + fb_ener_adjust = usdequant( idxGain, FB_GAIN_QLOW, FB_GAIN_QDELTA ); + } + else if ( st->bfi ) + { + fb_ener_adjust = hBWE_FD->prev_fb_ener_adjust; + } + + hBWE_FD->prev_fb_ener_adjust = fb_ener_adjust; + if ( mode == TRANSIENT ) + { + ener_adjust_quan = fb_ener_adjust; + } + else + { + if ( SWB_fenv[7] < 0.01f ) + { + ener_adjust_quan = 0.0f; + } + else + { + ener_adjust_quan = min( SWB_fenv[13] / SWB_fenv[7], 4.0f ); + } + } + + fb_band_begin = FB_BAND_BEGIN; + if ( st->L_frame == L_FRAME ) + { + fb_band_begin = FB_BAND_BEGIN_12k8; + } + + for ( i = fb_band_begin; i < fb_band_begin + DE_OFFSET1; i++ ) + { + yerror[i] = yerror[i - FB_BAND_WIDTH] * ( ( 1.0f - j * FB_GAIN_QDELTA ) * ener_adjust_quan + j * FB_GAIN_QDELTA * fb_ener_adjust ); + j++; + } + for ( ; i < FB_BAND_END; i++ ) + { + yerror[i] = yerror[i - FB_BAND_WIDTH] * fb_ener_adjust; + } + } + + /* iDCT of the error signal */ + inverse_transform( yerror, wtda_synth, 0, output_frame, -1, st->element_mode ); + + /* inverse windowing of the error signal */ + window_ola( wtda_synth, hb_synth, hBWE_FD->mem_imdct, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); + l_subfr = output_frame / 4; + + if ( mode == TRANSIENT ) + { + for ( i = 0; i < SWB_TENV; i++ ) + { + SWB_tenv[i] *= 0.8f; + } + + /* time envelope shaping when the current frame is TRANSIENT frame */ + time_envelop_shaping( hb_synth, SWB_tenv, output_frame ); + + hBWE_FD->prev_td_energy = SWB_tenv[3]; + } + else if ( frica_flag == 1 && hBWE_FD->prev_frica_flag == 0 ) + { + /* IVAS_fmToDo: TBD - synth[] is @internal_Fs!!! */ + time_reduce_pre_echo( synth, hb_synth, hBWE_FD->prev_td_energy, l_subfr ); + } + else + { + hBWE_FD->prev_td_energy = 0.0f; + for ( i = 0; i < l_subfr; i++ ) + { + hBWE_FD->prev_td_energy += hb_synth[3 * l_subfr + i] * hb_synth[3 * l_subfr + i]; + } + hBWE_FD->prev_td_energy = (float) sqrt( hBWE_FD->prev_td_energy / l_subfr ); + } + + if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) + { + /* add HB synth from hf_synth() */ + v_add( hb_synth, synth, hb_synth, output_frame ); + } + + hBWE_FD->prev_frica_flag = frica_flag; + hBWE_FD->prev_mode = mode; + + return; +} + +/*-------------------------------------------------------------------* + * fd_bwe_dec_init() + * + * Initialize FD BWE state structure at the decoder + *-------------------------------------------------------------------*/ + +void fd_bwe_dec_init( + FD_BWE_DEC_HANDLE hBWE_FD /* i/o: FD BWE data handle */ +) +{ + set_f( hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); + set_f( hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + hBWE_FD->prev_mode = NORMAL; + set_f( hBWE_FD->prev_SWB_fenv, 0, SWB_FENV ); + hBWE_FD->prev_Energy = 0.0f; + hBWE_FD->prev_L_swb_norm = 8; + hBWE_FD->Seed = 21211; + hBWE_FD->prev_frica_flag = 0; + set_f( hBWE_FD->mem_imdct, 0, L_FRAME48k ); + hBWE_FD->prev_td_energy = 0.0f; + hBWE_FD->prev_weight = 0.2f; + hBWE_FD->prev_flag = 0; + hBWE_FD->last_wb_bwe_ener = 0.0f; + hBWE_FD->prev_Energy_wb = 0.0f; + + hBWE_FD->mem_deemph_old_syn = 0.0f; + + hBWE_FD->prev_fb_ener_adjust = 0.0f; + + return; +} diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c new file mode 100644 index 0000000000..edfaaf67be --- /dev/null +++ b/lib_dec/swb_bwe_dec_hr.c @@ -0,0 +1,814 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * swb_bwe_dec_hr() + * + * HR SWB BWE decoder + *-------------------------------------------------------------------*/ + +void swb_bwe_dec_hr( + Decoder_State *st, /* i/o: decoder state structure */ + const float *syn_12k8_16k, /* i : ACELP core synthesis @16kHz */ + float *hb_synth, /* o : SHB synthesis */ + const int16_t output_frame, /* i : frame length */ + const int16_t unbits, /* i : number of core unused bits */ + const float pitch_buf[] /* i : pitch buffer */ +) +{ + int16_t i, j, k, nBits, nBits_total, nBits_block, Nsv, Nsv2, width_noncoded; + int16_t is_transient, tmpS, incr, IsTransient, pos; + FD_BWE_DEC_HANDLE hBWE_FD; + HR_BWE_DEC_HANDLE hBWE_FD_HR; + int16_t x_norm[NSV_MAX * ( WIDTH_BAND + 1 )], x_norm1[NSV_MAX * ( WIDTH_BAND + 1 )]; + float t_audio[L_FRAME48k], t_audio_tmp[L_FRAME48k]; + float gain = 0.0f, gain2, en_band[N_BANDS_BWE_HR]; + int16_t ind1, ind2; + float EnergyLT, Energy; + int16_t nq[NSV_MAX], nq2[NSV_MAX], nq_tmp[NSV_MAX]; + float tilt_wb, min_env, max_env; + float tmpF, tmp2, pitch, alpha; + float en_noncoded; + float env = 0.0f; + + hBWE_FD = st->hBWE_FD; + hBWE_FD_HR = st->hBWE_FD_HR; + + /*---------------------------------------------------------------------* + * initializations + *---------------------------------------------------------------------*/ + + set_f( t_audio, 0.0f, output_frame ); + + hBWE_FD_HR->bwe_highrate_seed = (int16_t) ( (int16_t) ( pitch_buf[0] * 64.0f ) * (int16_t) ( pitch_buf[3] * 64.0f ) ); + + ind2 = 0; /* only to suppress warnings */ + Nsv2 = 0; /* only to suppress warnings */ + gain2 = 0; /* only to suppress warnings */ + + /* reset memories in case that last frame was a different technology */ + if ( st->last_core == HQ_CORE || st->last_extl != st->extl ) + { + set_f( hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); + } + + /* calculate SWB BWE bit-budget */ + nBits = (int16_t) ( st->extl_brate ) / FRAMES_PER_SEC + unbits; + nBits_total = nBits; + + /*---------------------------------------------------------------------* + * calculate tilt of the core synthesis + *---------------------------------------------------------------------*/ + + calc_tilt_bwe( syn_12k8_16k, &tilt_wb, L_FRAME16k ); + pitch = sum_f( pitch_buf, NB_SUBFR16k ) + EPSILON; + + /*---------------------------------------------------------------------* + * FEC, or good frame decoding + *---------------------------------------------------------------------*/ + + if ( st->bfi ) + { + is_transient = hBWE_FD_HR->old_is_transient_hr_bwe; + + /* Replication of the last spectrum, with an attenuation */ + if ( ( st->clas_dec == VOICED_CLAS || st->clas_dec == INACTIVE_CLAS ) && st->nbLostCmpt <= 3 ) + { + alpha = 0.8f; + } + else if ( is_transient ) + { + alpha = 0.15f; + } + else + { + alpha = 0.3f; + } + + if ( is_transient ) + { + /* set BWE spectrum length */ + if ( output_frame == L_FRAME32k ) + { + tmpS = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; + } + else /* output_frame == L_FRAME48k */ + { + tmpS = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; + } + + /* reconstruct */ + for ( k = 0; k < NUM_TIME_SWITCHING_BLOCKS; k++ ) + { + for ( i = 0; i < tmpS; i++ ) + { + t_audio[NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS + i] = alpha * hBWE_FD_HR->t_audio_prev[i + k * tmpS]; + } + /* save transform coefficients for the next frame (needed in case of frame erasures) */ + mvr2r( t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS, hBWE_FD_HR->t_audio_prev + k * tmpS, tmpS ); + } + } + else + { + /* set BWE spectrum length */ + if ( output_frame == L_FRAME32k ) + { + tmpS = L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF; + } + else /* output_frame == L_FRAME48k */ + { + tmpS = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF; + } + + /* reconstruct */ + for ( i = 0; i < tmpS; i++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i] = alpha * hBWE_FD_HR->t_audio_prev[i]; + } + /* Save transform coefficients for the next frame (needed in case of frame erasures) */ + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, hBWE_FD_HR->t_audio_prev, tmpS ); + } + + hBWE_FD_HR->mem_EnergyLT *= alpha; + gain = (float) ( 2.0f * sqrt( hBWE_FD_HR->mem_EnergyLT / output_frame ) ); + env = 1.0f; + } + else + { + /*---------------------------------------------------------------------* + * get transient frame flag + *---------------------------------------------------------------------*/ + + is_transient = get_next_indice( st, 1 ); + + if ( is_transient ) + { + nBits = -1; /* is_transient flag */ + nBits_block = nBits_total / NUM_TIME_SWITCHING_BLOCKS; + nBits += nBits_total % NUM_TIME_SWITCHING_BLOCKS; + + /* set width of noncoded (blind estimated) spectrum */ + if ( st->extl == SWB_BWE_HIGHRATE || output_frame == L_FRAME32k ) + { + width_noncoded = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; + tmpS = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF_EFF; + } + else /* st->extl == FB_BWE_HIGHRATE */ + { + width_noncoded = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; + tmpS = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF_EFF; + } + + /*---------------------------------------------------------------------* + * transient frames: processing in blocks (subframes) + *---------------------------------------------------------------------*/ + + for ( k = 0; k < NUM_TIME_SWITCHING_BLOCKS; k++ ) + { + nBits += nBits_block; + + /*---------------------------------------------------------------------* + * global gain and envelope decoding + *---------------------------------------------------------------------*/ + + /* get global gain */ + ind1 = get_next_indice( st, NBITS_GLOB_GAIN_BWE_HR ); + gain = gain_dequant( ind1, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); + nBits -= NBITS_GLOB_GAIN_BWE_HR; + + /* get energy per band */ + if ( k == 0 ) + { + ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR_TR ); + ind2 = ind1; + nBits -= NBITS_ENVELOPE_BWE_HR_TR; + } + else + { + if ( ind2 < 8 ) + { + ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR_TR - 1 ); + } + else + { + ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR_TR - 1 ) + NUM_ENVLOPE_CODE_HR_TR2; + } + nBits -= ( NBITS_ENVELOPE_BWE_HR_TR - 1 ); + } + + en_band[0] = swb_hr_env_code3[2 * ind1]; + en_band[1] = swb_hr_env_code3[2 * ind1 + 1]; + env = 0.5f * ( en_band[0] + en_band[1] ); + + /*---------------------------------------------------------------------* + * estimate energy of noncoded spectrum (14.4-20kHz) + *---------------------------------------------------------------------*/ + + en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1]; + + if ( st->extl == FB_BWE_HIGHRATE ) + { + ind1 = get_next_indice( st, NBITS_HF_GAIN_BWE_HR ); + nBits -= NBITS_HF_GAIN_BWE_HR; + + if ( ind1 == 1 ) + { + en_noncoded *= BWE_HR_TRANS_EN_LIMIT1; + } + else if ( ind1 == 2 ) + { + en_noncoded *= BWE_HR_TRANS_EN_LIMIT2; + } + else if ( ind1 == 3 ) + { + en_noncoded *= BWE_HR_TRANS_EN_LIMIT3; + } + } + + /*---------------------------------------------------------------------* + * AVQ decoding (dequantize normalized spectrum) + *---------------------------------------------------------------------*/ + + Nsv = ( NUM_TRANS_END_FREQ_COEF - NUM_TRANS_START_FREQ_COEF ) / WIDTH_BAND; + AVQ_demuxdec( st, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); + for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) + { + t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i] = (float) ( x_norm[i] ); + } + + /* apply noise-fill */ + swb_hr_noise_fill( is_transient, NUM_TRANS_START_FREQ_COEF, NUM_TRANS_END_FREQ_COEF, tilt_wb, pitch, nq, Nsv, &hBWE_FD_HR->bwe_highrate_seed, t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS ); + + /*---------------------------------------------------------------------* + * reconstruction + *---------------------------------------------------------------------*/ + + /* reconstruct 14-16(20) kHz spectrum */ + for ( j = 0; j < tmpS; j++ ) + { + t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF_EFF + j] = 0.5f * t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF_EFF - tmpS + j]; + } + + /* envelope denormalization */ + for ( i = 0; i < N_BANDS_TRANS_BWE_HR; i++ ) + { + for ( j = 0; j < WIDTH_TRANS_FREQ_COEF; j++ ) + { + t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i * WIDTH_TRANS_FREQ_COEF + j] *= en_band[i]; + } + } + + /* envelope denormalization of 14.4-16(20) kHz spectrum */ + for ( j = tmpS - width_noncoded; j < tmpS; j++ ) + { + t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF_EFF + j] *= en_noncoded; + } + + /* overlap region */ + if ( output_frame == L_FRAME48k ) + { + for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND / NUM_TIME_SWITCHING_BLOCKS; i++ ) + { + t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i] *= overlap_coefs_48kHz[i * 4]; + } + } + else + { + for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND / NUM_TIME_SWITCHING_BLOCKS; i++ ) + { + t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i] *= overlap_coefs[i * 4]; + } + } + + /* apply global gain */ + for ( i = 0; i < WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR + width_noncoded; i++ ) + { + t_audio[NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS + i] *= gain; + } + + /* save transform coefficients for the next frame (needed in case of frame erasures) */ + if ( output_frame == L_FRAME32k ) + { + mvr2r( t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS, hBWE_FD_HR->t_audio_prev + k * ( L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ), L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ); + } + else /* output_frame == L_FRAME48k */ + { + mvr2r( t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS, hBWE_FD_HR->t_audio_prev + k * ( ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ), ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ); + } + + /* attenuate HFs in case of band-width switching */ + if ( st->bws_cnt1 > 0 ) + { + if ( output_frame == L_FRAME32k ) + { + j = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; + } + else /* output_frame == L_FRAME48k */ + { + j = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; + } + + for ( i = 0; i < j; i++ ) + { + t_audio[NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS + i] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; + } + } + } + } + else /* !is_transient */ + { + /* subtract one bit for is_transient flag */ + nBits--; + + /*---------------------------------------------------------------------* + * global gain and envelope decoding + *---------------------------------------------------------------------*/ + + /* get global gain */ + ind1 = get_next_indice( st, NBITS_GLOB_GAIN_BWE_HR ); + gain = gain_dequant( ind1, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); + + /* get energy per band */ + ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR1 ); + ind2 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR2 ); + + en_band[0] = swb_hr_env_code1[2 * ind1]; + en_band[1] = swb_hr_env_code1[2 * ind1 + 1]; + en_band[2] = swb_hr_env_code2[2 * ind2]; + en_band[3] = swb_hr_env_code2[2 * ind2 + 1]; + env = 0.25f * ( en_band[0] + en_band[1] + en_band[2] + en_band[3] ); + + /*---------------------------------------------------------------------* + * choose sub-bands to be dequantized + *---------------------------------------------------------------------*/ + + /* find the subband with the min envelope */ + pos = 0; + min_env = en_band[0]; + max_env = en_band[0]; + for ( j = 1; j < N_BANDS_BWE_HR; j++ ) + { + if ( en_band[j] < min_env ) + { + pos = j; + min_env = en_band[j]; + } + if ( en_band[j] > max_env ) + { + max_env = en_band[j]; + } + } + + /* decide the spectrum to be dequantized */ + if ( nBits_total > NBITS_THRESH_BWE_HR ) + { + i = NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF; + } + else + { + i = NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - 64 - 8 * ( pos % 2 ); + } + + nBits -= NBITS_GLOB_GAIN_BWE_HR + NBITS_ENVELOPE_BWE_HR1 + NBITS_ENVELOPE_BWE_HR2; + + /*---------------------------------------------------------------------* + * estimate energy of noncoded spectrum (14.4-20kHz) + *---------------------------------------------------------------------*/ + + en_noncoded = 0.5f * min_env; + + if ( st->extl == FB_BWE_HIGHRATE ) + { + ind1 = get_next_indice( st, NBITS_HF_GAIN_BWE_HR ); + nBits -= NBITS_HF_GAIN_BWE_HR; + + if ( ind1 == 1 ) + { + en_noncoded *= BWE_HR_NONTRANS_EN_LIMIT1; + } + else if ( ind1 == 2 ) + { + en_noncoded *= 2.0f * BWE_HR_NONTRANS_EN_LIMIT2; + } + else if ( ind1 == 3 ) + { + en_noncoded *= 2.0f * BWE_HR_NONTRANS_EN_LIMIT3; + } + } + + /*---------------------------------------------------------------------* + * AVQ decoding (dequantize normalized spectrum) + *---------------------------------------------------------------------*/ + + Nsv = i / WIDTH_BAND; + AVQ_demuxdec( st, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); + /*---------------------------------------------------------------------* + * second stage decoding + *---------------------------------------------------------------------*/ + + if ( nBits >= 9 + NBITS_GLOB_GAIN_BWE_HR && sum_s( nq, Nsv ) > 0 ) + { + ind1 = get_next_indice( st, NBITS_GLOB_GAIN_BWE_HR ); + gain2 = gain_dequant( ind1, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); + gain2 *= 0.0625f; + + /* calculate the number of subbands according to the rest bits */ + if ( nBits > 396 ) + { + Nsv2 = 33; + } + else + { + Nsv2 = nBits / 12; + } + + nBits -= NBITS_GLOB_GAIN_BWE_HR; + AVQ_demuxdec( st, x_norm1, &nBits, Nsv2, nq2, 0, Nsv2 - 1 ); + } + + /*---------------------------------------------------------------------* + * dequantization + *---------------------------------------------------------------------*/ + + for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) + { + t_audio_tmp[i] = (float) ( x_norm[i] ); + } + + mvs2s( nq, nq_tmp, Nsv ); + if ( Nsv2 > Nsv ) + { + /* Safety check, happens rarely */ + set_s( nq_tmp + Nsv, 0, Nsv2 - Nsv ); + } + + k = 0; + incr = 0; + for ( i = 0; i < Nsv; i++ ) + { + if ( nq[i] == 0 && incr < Nsv2 ) + { + for ( j = 0; j < WIDTH_BAND; j++ ) + { + t_audio_tmp[i * WIDTH_BAND + j] = gain2 * x_norm1[k++]; + } + nq[i] += nq2[incr++]; + } + } + + for ( i = 0; incr < Nsv2; i++ ) + { + /* safety check, happens rarely */ + if ( i >= Nsv2 ) + { + break; + } + + if ( nq_tmp[i] != 0 ) + { + for ( j = 0; j < WIDTH_BAND; j++ ) + { + t_audio_tmp[i * WIDTH_BAND + j] += gain2 * x_norm1[k++]; + } + nq[i] += nq2[incr++]; + } + } + + /*---------------------------------------------------------------------* + * reorder the decoded spectrum + *---------------------------------------------------------------------*/ + + if ( nBits_total > NBITS_THRESH_BWE_HR ) + { + mvr2r( t_audio_tmp, t_audio + NUM_NONTRANS_START_FREQ_COEF, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF ); + } + else + { + ind1 = ( pos * 64 + pos / 2 * WIDTH_BAND ); + mvr2r( t_audio_tmp, t_audio + NUM_NONTRANS_START_FREQ_COEF, ind1 ); + + ind2 = ( ( pos + 1 ) * 64 + ( pos + 1 ) / 2 * WIDTH_BAND ); + mvr2r( t_audio_tmp + ind1, t_audio + NUM_NONTRANS_START_FREQ_COEF + ind2, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - ind2 ); + + /* reconstruct non-encoded subband */ + if ( pos == 3 ) + { + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF + 128, t_audio + NUM_NONTRANS_START_FREQ_COEF + 200, 72 ); + + mvs2s( nq + 16, nq + 25, 9 ); + } + else + { + pos %= 2; + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF + ind2, t_audio + NUM_NONTRANS_START_FREQ_COEF + ind1, 64 + pos * WIDTH_BAND ); + ind1 /= WIDTH_BAND; + ind2 /= WIDTH_BAND; + + j = 0; + for ( i = Nsv - 1; i >= ind1; i-- ) + { + nq[33 - j++] = nq[i]; + } + + mvs2s( nq + ind2, nq + ind1, WIDTH_BAND + pos ); + } + } + + /* apply noise-fill */ + if ( nBits < 200 ) + { + swb_hr_noise_fill( is_transient, NUM_NONTRANS_START_FREQ_COEF, NUM_NONTRANS_END_FREQ_COEF, tilt_wb, pitch, nq, Nsv, &hBWE_FD_HR->bwe_highrate_seed, t_audio + NUM_NONTRANS_START_FREQ_COEF ); + } + + /*---------------------------------------------------------------------* + * reconstruction + *---------------------------------------------------------------------*/ + + /* smoothing 12.6-12.8kHz */ + if ( pos == 3 && nBits_total <= 400 ) + { + tmpF = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF + 200 - WIDTH_BAND, WIDTH_BAND ) + EPSILON; + tmp2 = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF + 200, WIDTH_BAND ) + EPSILON; + tmpF = (float) sqrt( tmpF / tmp2 ); + for ( i = 0; i < WIDTH_BAND; i++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + 200 + i] *= ( ( 1.0f - i / (float) WIDTH_BAND ) * tmpF + i / (float) WIDTH_BAND ); + } + } + + /* reconstruct 14.4-16(20) kHz spectrum */ + if ( st->extl == SWB_BWE_HIGHRATE || output_frame == L_FRAME32k ) + { + width_noncoded = L_FRAME32k - NUM_NONTRANS_END_FREQ_COEF; + } + else /* st->extl == FB_BWE_HIGHRATE */ + { + width_noncoded = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_END_FREQ_COEF; + } + mvr2r( t_audio + NUM_NONTRANS_END_FREQ_COEF - width_noncoded, t_audio + NUM_NONTRANS_END_FREQ_COEF, width_noncoded ); + + /* smoothing 14.4-14.8kHz */ + tmpF = sum2_f( t_audio + NUM_NONTRANS_END_FREQ_COEF - WIDTH_BAND, WIDTH_BAND ) + EPSILON; + tmp2 = sum2_f( t_audio + NUM_NONTRANS_END_FREQ_COEF, WIDTH_BAND ) + EPSILON; + tmpF = (float) sqrt( tmpF / tmp2 ); + for ( i = 0; i < WIDTH_BAND; i++ ) + { + t_audio[NUM_NONTRANS_END_FREQ_COEF + i] *= tmpF; + } + + /* envelope denormalization */ + for ( i = 0; i < N_BANDS_BWE_HR; i++ ) + { + for ( j = 0; j < WIDTH_NONTRANS_FREQ_COEF; j++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i * WIDTH_NONTRANS_FREQ_COEF + j] *= en_band[i]; + } + } + + /* equalize 14.4-16(20) kHz spectrum */ + tmpF = max_env / min_env; + if ( st->extl == SWB_BWE_HIGHRATE || tmpF < 2.2f ) + { + for ( j = 0; j < WIDTH_BAND; j++ ) + { + t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= ( ( 1.0f - j / (float) WIDTH_BAND ) * en_band[3] + ( j / (float) WIDTH_BAND ) * en_noncoded ); + } + + for ( j = WIDTH_BAND; j < width_noncoded; j++ ) + { + t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= en_noncoded; + } + } + else + { + if ( output_frame == L_FRAME48k ) + { + tmpS = width_noncoded - 2 * WIDTH_NONTRANS_FREQ_COEF; + } + else + { + tmpS = L_FRAME32k - NUM_NONTRANS_END_FREQ_COEF; + } + + k = 0; + for ( j = 0; j < tmpS; j++ ) + { + t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= 2.2f * en_noncoded * ( 1 - (float) k / (float) 160 ); + k++; + } + + k = 0; + for ( ; j < width_noncoded; j++ ) + { + t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= 0.65f * en_noncoded * ( 1 - (float) k / (float) 320 ); + k++; + } + } + + /* overlap region */ + if ( output_frame == L_FRAME48k ) + { + for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND; i++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= overlap_coefs_48kHz[i]; + } + } + else + { + for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND; i++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= overlap_coefs[i]; + } + } + + /* apply global gain */ + if ( nBits_total <= NBITS_THRESH_BWE_HR ) + { + gain *= 0.85f; + } + + for ( i = 0; i < WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR + width_noncoded; i++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= gain; + } + + /* save transform coefficients for the next frame (needed in case of frame erasures) */ + if ( output_frame == L_FRAME32k ) + { + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, hBWE_FD_HR->t_audio_prev, L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF ); + } + else /* output_frame == L_FRAME48k */ + { + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, hBWE_FD_HR->t_audio_prev, 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF ); + } + + /* attenuate HFs in case of band-width switching */ + if ( st->bws_cnt1 > 0 ) + { + if ( output_frame == L_FRAME32k ) + { + j = L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF; + } + else /* output_frame == L_FRAME48k */ + { + j = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF; + } + + for ( i = 0; i < j; i++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; + } + } + } + } + + st->prev_ener_shb = gain * env; + for ( i = 0; i < SWB_FENV; i++ ) + { + hBWE_FD->prev_SWB_fenv[i] = gain * env; + } + + /*---------------------------------------------------------------------* + * iOLA and iMDCT + *---------------------------------------------------------------------*/ + + inverse_transform( t_audio, t_audio_tmp, is_transient, output_frame, output_frame, st->element_mode ); + + window_ola( t_audio_tmp, hb_synth, hBWE_FD->old_wtda_swb, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); + + /*---------------------------------------------------------------------* + * final adjustments + *---------------------------------------------------------------------*/ + + if ( !st->bfi ) + { + IsTransient = 0; + EnergyLT = hBWE_FD_HR->mem_EnergyLT; + pos = 0; + for ( j = 0; j < 4; j++ ) + { + Energy = sum2_f( hb_synth + j * ( output_frame / 4 ), output_frame / 4 ) + EPSILON; + if ( Energy > 12.5f * EnergyLT ) + { + IsTransient = 1; + pos = j; + } + + EnergyLT = 0.75f * EnergyLT + 0.25f * Energy; + } + + if ( IsTransient == 1 && pos > 0 && tilt_wb < 3.0f && pitch > 500 ) + { + Nsv = pos * ( output_frame / 4 ); + Energy = sum2_f( hb_synth, Nsv ) + EPSILON; + if ( st->last_extl != st->extl ) + { + hBWE_FD_HR->mem_EnergyLT = Energy; + } + gain = (float) sqrt( pos * hBWE_FD_HR->mem_EnergyLT / Energy ); + + gain *= 0.2f; + for ( i = 0; i < Nsv; i++ ) + { + hb_synth[i] *= gain; + } + + alpha = (float) WIDTH_BAND / output_frame; + for ( i = 0; i < output_frame / WIDTH_BAND; i++ ) + { + hb_synth[i + Nsv] *= ( ( 1.0f - i * alpha ) * gain + i * alpha ); + } + } + + hBWE_FD_HR->mem_EnergyLT = EnergyLT; + hBWE_FD_HR->old_is_transient_hr_bwe = is_transient; + } + + /* post-processing in case of TD/FD switching */ + if ( st->last_core == HQ_CORE || st->last_extl != st->extl ) + { + if ( tilt_wb < 3.0f ) + { + gain = td_postprocess( hb_synth, output_frame, st->last_extl ); + + for ( i = 0; i < output_frame; i++ ) + { + hBWE_FD->old_wtda_swb[i] *= gain; + } + + tmpS = L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF; + if ( output_frame == L_FRAME48k ) + { + tmpS = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF; + } + + for ( i = 0; i < tmpS; i++ ) + { + hBWE_FD_HR->t_audio_prev[i] *= gain; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * hr_bwe_dec_init() + * + * Initialize HR BWE state structure at the decoder + *-------------------------------------------------------------------*/ + +void hr_bwe_dec_init( + HR_BWE_DEC_HANDLE hBWE_FD_HR /* i/o: HR BWE data handle */ +) +{ + set_f( hBWE_FD_HR->t_audio_prev, 0, 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF ); + hBWE_FD_HR->old_is_transient_hr_bwe = 0; + hBWE_FD_HR->bwe_highrate_seed = 12345; + hBWE_FD_HR->mem_EnergyLT = 0.0f; + + return; +} diff --git a/lib_dec/swb_bwe_dec_lr.c b/lib_dec/swb_bwe_dec_lr.c new file mode 100644 index 0000000000..d10be17f5f --- /dev/null +++ b/lib_dec/swb_bwe_dec_lr.c @@ -0,0 +1,311 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "stat_com.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * DecodeSWBGenericParameters() + * + * Decoding of generic subband coding parameters + *-------------------------------------------------------------------*/ + +static void DecodeSWBGenericParameters( + Decoder_State *st, /* i/o: decoder state structure */ + int16_t *lagIndices, /* o : lowband index for each subband */ + const int16_t nBands_search, /* i : number of subbnads for SSearch */ + const int16_t BANDS, /* i : total number of subbands per frame */ + const int16_t *p2a_flags, /* i : HF tonal flag */ + const int16_t hq_swb_clas /* i : mode of operation HQ_NORMAL or HQ_HARMONIC */ +) +{ + int16_t sb; + + /* lag index for each subband (except last two) */ + for ( sb = 0; sb < nBands_search; sb++ ) + { + if ( hq_swb_clas == HQ_HARMONIC ) + { + lagIndices[sb] = get_next_indice( st, bits_lagIndices_mode0_Har[sb] ); + } + else + { + if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + sb] == 0 ) + { + lagIndices[sb] = get_next_indice( st, bits_lagIndices_modeNormal[sb] ); + } + else + { + lagIndices[sb] = 0; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * DecodeSWBSubbands() + * + * Main routine for generic SWB coding + * + * High-frequency subbands are replicated based on the lowband signal using a lowband index denoting + * the selected lowband subband as well as linear and logarithmic domain gains + *-------------------------------------------------------------------*/ + +static void DecodeSWBSubbands( + Decoder_State *st, /* i/o: decoder state structure */ + HQ_DEC_HANDLE hHQ_core, /* i/o: HQ decoder handle */ + float *spectra, /* i/o: MDCT domain spectrum */ + const int16_t fLenLow, /* i : lowband length */ + const int16_t fLenHigh, /* i : highband length */ + const int16_t nBands, /* i : number of subbands */ + const int16_t *sbWidth, /* i : subband lengths */ + int16_t *lagIndices, + float *lagGains, /* i : first gain for each subband */ + int16_t BANDS, /* i : number subbands per frame */ + int16_t *band_start, /* i : band start of each SB */ + int16_t *band_end, /* i : band end of each SB */ + float *band_energy, /* i : band energy of each SB */ + int16_t *p2a_flags, /* i : HF tonal indicator */ + const int16_t hqswb_clas, /* i : class information */ + const int16_t har_bands, /* i : number of LF harmonic bands */ + const int16_t *subband_search_offset, + int16_t *prev_frm_hfe2, + int16_t *prev_stab_hfe2, + int16_t band_width[], /* i : subband band widths */ + const int16_t *subband_offsets, /* i : subband offsets for sparse filling */ + const float spectra_ni[], /* i : core coder with sparseness filled */ + int16_t *ni_seed /* i/o: random seed for search buffer NI */ +) +{ + int16_t i; + int16_t k; + float sspectra[L_FRAME32k]; + float sspectra_ni[L_FRAME32k], sspectra_diff[L_FRAME32k], th_g[NB_SWB_SUBBANDS]; + float ss_min = 1.0f, g, be_tonal[SWB_HAR_RAN1], xSynth_har[L_FRAME32k]; + GainItem pk_sf[(NB_SWB_SUBBANDS) *8]; + int16_t lagIndices_real[NB_SWB_SUBBANDS]; + int16_t pul_res[NB_SWB_SUBBANDS], cnt, imin; + int16_t har_freq_est1 = 0; + int16_t har_freq_est2 = 0; + int16_t flag_dis = 1; + int16_t pos_max_hfe2 = 0; + + set_s( pul_res, 0, NB_SWB_SUBBANDS ); + set_f( xSynth_har, 0.0f, fLenHigh ); + + + if ( hqswb_clas == HQ_HARMONIC ) + { + /* Harmonic Structure analysis */ + pos_max_hfe2 = har_est( spectra, fLenLow, &har_freq_est1, &har_freq_est2, &flag_dis, prev_frm_hfe2, subband_search_offset, sbWidth, prev_stab_hfe2 ); + /* Spectrum normalization for the corecoder */ + noise_extr_corcod( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, hHQ_core->prev_hqswb_clas, &hHQ_core->prev_ni_ratio ); + /* Harmonic Structure analysis */ + + if ( flag_dis == 0 ) + { + if ( har_freq_est2 != SWB_HAR_RAN1 || har_freq_est2 != *prev_frm_hfe2 ) + { + har_freq_est2 += lagIndices[0]; + } + } + /*Generate HF noise*/ + genhf_noise( sspectra_diff, xSynth_har, sspectra, BANDS, har_bands, har_freq_est2, pos_max_hfe2, pul_res, pk_sf, fLenLow, fLenHigh, sbWidth, lagIndices, subband_offsets, subband_search_offset ); + + imin = get_next_indice( st, 2 ); + g = (float) pow( 10.0f, gain_table_SWB_BWE[imin] ); + /* tonal energy estimation */ + ton_ene_est( xSynth_har, be_tonal, band_energy, band_start, band_end, band_width, fLenLow, fLenHigh, BANDS, har_bands, g, pk_sf, pul_res ); + + /* HF Spectrum Generation */ + Gettonl_scalfact( xSynth_har, spectra_ni, fLenLow, fLenHigh, har_bands, BANDS, band_energy, band_start, band_end, p2a_flags, be_tonal, pk_sf, pul_res ); + if ( flag_dis == 0 ) + { + *prev_frm_hfe2 = 0; + } + else + { + *prev_frm_hfe2 = har_freq_est2; + } + + for ( k = har_bands; k < BANDS; k++ ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + spectra[i] = xSynth_har[i - fLenLow]; + } + } + } + else if ( hqswb_clas == HQ_NORMAL ) + { + /* Spectrum normalization for the corecoder */ + ss_min = spectrumsmooth_noiseton( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, ni_seed ); + + convert_lagIndices_pls2smp( (int16_t *) lagIndices, nBands, lagIndices_real, sspectra, sbWidth, fLenLow ); + + for ( k = 0; k < nBands; k++ ) + { + if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 1 ) + { + lagIndices_real[k] = 0; + } + } + /*get levels for missing bands*/ + GetlagGains( sspectra_ni, &band_energy[BANDS - NB_SWB_SUBBANDS], nBands, sbWidth, lagIndices_real, fLenLow, lagGains ); + for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) + { + lagGains[k] *= 0.9f; + } + cnt = 0; + for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) + { + th_g[k] = 0.0f; + if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 0 ) + { + th_g[k] = lagGains[k] * ss_min; + cnt++; + } + } + /* Construct spectrum */ + GetSynthesizedSpecThinOut( sspectra_ni, xSynth_har, nBands, sbWidth, lagIndices_real, lagGains, fLenLow ); + + /*Level adjustment for the missing bands*/ + noiseinj_hf( xSynth_har, th_g, band_energy, hHQ_core->prev_En_sb, p2a_flags, BANDS, band_start, band_end, fLenLow ); + /* xSynth is the reconstructed high-band */ + for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) + { + if ( p2a_flags[k] == 0 ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + spectra[i] = xSynth_har[i - fLenLow]; + } + } + else + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + spectra[i] = spectra_ni[i]; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * swb_bwe_dec_lr() + * + * Main decoding routine of SWB BWE for the LR MDCT core + *-------------------------------------------------------------------*/ + +void swb_bwe_dec_lr( + Decoder_State *st, /* i/o: decoder state structure */ + const float m_core[], /* i : lowband synthesis */ + float m[], /* o : highband synthesis with lowband zeroed */ + const int32_t total_brate, /* i : total bitrate for selecting subband pattern */ + int16_t BANDS, /* i : Number subbands/Frame */ + int16_t *band_start, /* i : Band Start of each SB */ + int16_t *band_end, /* i : Band end of each SB */ + float *band_energy, /* i : BAnd energy of each SB */ + int16_t *p2a_flags, /* i : HF tonal Indicator */ + const int16_t hqswb_clas, /* i : class information */ + int16_t lowlength, /* i : Lowband Length */ + int16_t highlength, /* i : Highband Length */ + const int16_t har_bands, /* i : Number of LF harmonic bands */ + int16_t *prev_frm_hfe2, + int16_t *prev_stab_hfe2, + int16_t band_width[], /* i : subband bandwidth */ + const float y2_ni[], /* i/o: Sparse filled corecoder */ + int16_t *ni_seed /* i/o: random seed */ +) +{ + int16_t k; + int16_t nBands; + int16_t nBands_search; + int16_t wBands[NB_SWB_SUBBANDS]; + int16_t lagIndices[NB_SWB_SUBBANDS]; + float lagGains[NB_SWB_SUBBANDS]; + int16_t swb_lowband, swb_highband; + const int16_t *subband_search_offset; + + const int16_t *subband_offsets; + + subband_search_offset = subband_search_offsets_13p2kbps_Har; + subband_offsets = subband_offsets_sub5_13p2kbps_Har; + hf_parinitiz( total_brate, hqswb_clas, lowlength, highlength, wBands, &subband_search_offset, &subband_offsets, &nBands, &nBands_search, &swb_lowband, &swb_highband ); + + /* Decoding of the SWB parameters */ + DecodeSWBGenericParameters( st, lagIndices, nBands_search, BANDS, p2a_flags, hqswb_clas ); + + /* Copy WB synthesis for SWB decoding */ + mvr2r( m_core, m, swb_lowband + swb_highband ); + + /* Generic subband processing */ + DecodeSWBSubbands( st, st->hHQ_core, m, swb_lowband, swb_highband, nBands, wBands, lagIndices, lagGains, BANDS, band_start, band_end, band_energy, p2a_flags, hqswb_clas, har_bands, subband_search_offset, prev_frm_hfe2, prev_stab_hfe2, band_width, subband_offsets, y2_ni, ni_seed ); + + /* Smoothen highest frequencies */ + m[swb_lowband + swb_highband - 1] *= 0.0625f; + m[swb_lowband + swb_highband - 2] *= 0.125f; + m[swb_lowband + swb_highband - 3] *= 0.25f; + m[swb_lowband + swb_highband - 4] *= 0.5f; + + /* Set frequencies below 6.4 kHz to zero */ + if ( hqswb_clas == HQ_NORMAL ) + { + for ( k = 0; k < swb_lowband; k++ ) + { + m[k] = 0.0f; + } + } + + return; +} diff --git a/lib_dec/swb_tbe_dec.c b/lib_dec/swb_tbe_dec.c new file mode 100644 index 0000000000..79b83e5c68 --- /dev/null +++ b/lib_dec/swb_tbe_dec.c @@ -0,0 +1,2366 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_dec.h" +#include "wmops.h" +#include "ivas_prot.h" + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void dequantizeSHBparams( Decoder_State *st, const int16_t extl, int32_t extl_brate, float *Q_lsf, float *Q_subgain, float *Q_framegrain, int16_t *uv_flag, float *Q_shb_ener_sf, float *Q_shb_res_gshape, float *Q_mixFactors, int16_t *MSFlag ); +static void Dequant_lower_LSF( const int16_t lsf_idx[], float lsf_q[] ); +static void Map_higher_LSF( float lsf_q[], const float m, const float grid_in[] ); +static void Dequant_mirror_point( const float lsf_q[], const int16_t m_idx, float *m ); + + +/*-------------------------------------------------------------------* + * ResetSHBbuffer_Dec() + * + * + *-------------------------------------------------------------------*/ + +void ResetSHBbuffer_Dec( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + const int16_t extl /* i : BWE extension layer */ +) +{ + int16_t i; + float f; + float inc; + + if ( extl != WB_TBE ) + { + f = 1.0f / 22.0f; + inc = 1.0f / 22.0f; + } + else + { + f = 1.0f / 6.0f; + inc = 1.0f / 6.0f; + } + + /* states for the filters used in generating SHB excitation from WB excitation*/ + set_f( hBWE_TD->mem_csfilt, 0, 2 ); + + /* states for the filters used in generating SHB signal from SHB excitation*/ + set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD ); + set_f( hBWE_TD->state_lpc_syn, 0, LPC_SHB_ORDER ); + + if ( extl == FB_TBE ) + { + set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_synth( hBWE_TD->fbbwe_hpf_mem, &hBWE_TD->prev_fbbwe_ratio ); + } + + /* states for the filters used in generating SHB signal from SHB excitation in wideband*/ + set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->mem_genSHBexc_filt_down_wb2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->mem_genSHBexc_filt_down_wb3, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + set_f( hBWE_TD->state_lsyn_filt_shb, 0, 2 * ALLPASSSECTIONS_STEEP ); + set_f( hBWE_TD->state_lsyn_filt_dwn_shb, 0, 2 * ALLPASSSECTIONS_STEEP ); + set_f( hBWE_TD->mem_resamp_HB, 0, INTERP_3_1_MEM_LEN ); + + /* States for the local synthesis filters */ + set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); + + /* States for FEC */ + if ( extl != WB_TBE ) + { + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->lsp_prevfrm[i] = f; + f += inc; + } + } + else + { + for ( i = 0; i < LPC_SHB_ORDER_WB; i++ ) + { + hBWE_TD->lsp_prevfrm[i] = f; + f += inc; + } + for ( ; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->lsp_prevfrm[i] = 0.0f; + } + } + + hBWE_TD->GainFrame_prevfrm = 0.0f; + hBWE_TD->GainAttn = 1.0; + hBWE_TD->tbe_demph = 0.0f; + hBWE_TD->tbe_premph = 0.0f; + set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); + hBWE_TD->gain_prec_swb = 1.0f; + set_f( hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); + hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + hBWE_TD->prev_mix_factor = 1.0f; + + set_f( hBWE_TD->old_core_synth, 0, L_FRAME16k ); + set_f( hBWE_TD->old_tbe_synth, 0, L_SHB_TRANSITION_LENGTH ); + hBWE_TD->tilt_swb_fec = 0.0f; + + return; +} + +/*-------------------------------------------------------------------* + * wb_tbe_dec() + * + * WB TBE decoder, 6 - 8 kHz band decoding module + *-------------------------------------------------------------------*/ + +void wb_tbe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float *bwe_exc_extended, /* i : bandwidth extended excitation */ + const float voice_factors[], /* i : voicing factors */ + float *synth /* o : WB synthesis/final synthesis */ +) +{ + int16_t i; + TD_BWE_DEC_HANDLE hBWE_TD; + float shaped_wb_excitation[( L_FRAME16k + L_SHB_LAHEAD ) / 4]; + float exc4kWhtnd[L_FRAME16k / 4]; + float lsf_wb[LPC_SHB_ORDER_WB], lpc_wb[LPC_SHB_ORDER_WB + 1], GainShape[NUM_SHB_SUBFR], GainFrame; + float error[L_FRAME16k]; + float upsampled_synth[L_FRAME48k]; + float prev_pow, curr_pow, scale; + float temp, curr_frame_pow; + int16_t j; + float vf_modified[NB_SUBFR16k]; + int16_t uv_flag = 0; + + hBWE_TD = st->hBWE_TD; + + if ( st->bws_cnt == 0 ) + { + + if ( !st->bfi ) + { + if ( st->use_partial_copy ) + { + if ( st->last_extl != WB_TBE ) + { + hBWE_TD->GainFrame_prevfrm = 0; + hBWE_TD->lsp_prevfrm[0] = 0.1f; + for ( i = 1; i < LPC_SHB_ORDER_LBR_WB; i++ ) + { + hBWE_TD->lsp_prevfrm[i] = hBWE_TD->lsp_prevfrm[i - i] + 0.1f; + } + } + + mvr2r( hBWE_TD->lsp_prevfrm, lsf_wb, LPC_SHB_ORDER_LBR_WB ); + set_f( GainShape, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR / 2 ); + + if ( st->rf_frame_type == RF_NELP ) + { + /* Frame gain */ + /* only four LSBs are valid */ + st->rf_indx_tbeGainFr &= 0xF; + mvr2r( SHBCB_FrameGain16 + st->rf_indx_tbeGainFr, &GainFrame, 1 ); + if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && !st->prev_use_partial_copy && st->prev_coder_type == UNVOICED && GainFrame != hBWE_TD->GainFrame_prevfrm && st->last_extl == WB_TBE ) + { + GainFrame = 0.2f * GainFrame + 0.8f * hBWE_TD->GainFrame_prevfrm; + } + } + else + { + /* Frame gain */ + temp = 0.0f; + switch ( st->rf_indx_tbeGainFr ) + { + case 0: + GainFrame = 0.5f; + if ( hBWE_TD->GainFrame_prevfrm <= 1.25 ) + { + temp = 0.8f; + } + break; + case 1: + GainFrame = 2.0f; + if ( hBWE_TD->GainFrame_prevfrm > 1.25 && hBWE_TD->GainFrame_prevfrm <= 3 ) + { + temp = 0.8f; + } + break; + case 2: + GainFrame = 4.0f; + if ( hBWE_TD->GainFrame_prevfrm > 3 && hBWE_TD->GainFrame_prevfrm <= 6 ) + { + temp = 0.8f; + } + break; + case 3: + GainFrame = 8.0f; + if ( hBWE_TD->GainFrame_prevfrm > 6 && hBWE_TD->GainFrame_prevfrm <= 16 ) + { + temp = 0.8f; + } + break; + default: + GainFrame = 1.0f; + IVAS_ERROR( IVAS_ERR_INTERNAL, "RF WB-TBE gain bits not supported." ); + break; + } + + if ( st->last_extl == WB_TBE ) + { + GainFrame = ( 1 - temp ) * GainFrame + temp * ( hBWE_TD->GainFrame_prevfrm ); + } + + if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE ) + { + if ( !st->prev_use_partial_copy && st->last_coder_type == VOICED && st->rf_frame_type == RF_GENPRED && st->prev_tilt_code_dec < 0.046f && st->prev_tilt_code_dec > 0.006f ) + { + GainFrame *= 0.3f; + } + } + } + } + else + { + /* de-quantization */ + dequantizeSHBparams( st, st->extl, st->extl_brate, lsf_wb, GainShape, &GainFrame, &uv_flag, 0, 0, 0, &j /*temp*/ ); + } + } + else + { + if ( st->extl_brate == WB_TBE_0k35 ) + { + mvr2r( hBWE_TD->lsp_prevfrm, lsf_wb, LPC_SHB_ORDER_LBR_WB ); + } + else + { + mvr2r( hBWE_TD->lsp_prevfrm, lsf_wb, LPC_SHB_ORDER_WB ); + } + set_f( GainShape, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR / 2 ); + hBWE_TD->GainAttn *= 0.85f; + if ( st->codec_mode == MODE1 ) + { + GainFrame = hBWE_TD->GainAttn * hBWE_TD->GainFrame_prevfrm; + } + else + { + GainFrame = hBWE_TD->GainFrame_prevfrm; + } + } + + if ( st->extl_brate == WB_TBE_0k35 ) + { + /* convert LSPs back into LP coeffs */ + lsp2a( lpc_wb, lsf_wb, LPC_SHB_ORDER_LBR_WB ); + set_f( lpc_wb + LPC_SHB_ORDER_LBR_WB + 1, 0.0f, ( LPC_SHB_ORDER_WB - LPC_SHB_ORDER_LBR_WB ) ); + } + else + { + /* convert LSPs back into LP coeffs */ + lsp2a( lpc_wb, lsf_wb, LPC_SHB_ORDER_WB ); + } + lpc_wb[0] = 1.0f; + mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); + if ( st->coder_type == VOICED ) + { + for ( i = 1; i < NB_SUBFR; i++ ) + { + vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; + } + + if ( st->L_frame != L_FRAME ) + { + vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; + } + } + + if ( st->use_partial_copy && st->nelp_mode_dec ) + { + set_f( vf_modified, 0.0f, NB_SUBFR16k ); + } + + /* From low band excitation, generate highband excitation */ + mvr2r( hBWE_TD->state_syn_shbexc, shaped_wb_excitation, L_SHB_LAHEAD / 4 ); + + GenShapedWBExcitation( shaped_wb_excitation + L_SHB_LAHEAD / 4, lpc_wb, exc4kWhtnd, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, uv_flag, st->igf ); + + prev_pow = sum2_f( shaped_wb_excitation, L_SHB_LAHEAD / 4 ); + curr_pow = sum2_f( shaped_wb_excitation + L_SHB_LAHEAD / 4, L_SHB_LAHEAD / 4 ); + + if ( voice_factors[0] > 0.75f ) + { + curr_pow *= 0.25; + } + + if ( prev_pow == 0 ) + { + scale = 0; + } + else + { + scale = (float) sqrt( curr_pow / prev_pow ); + } + for ( i = 0; i < L_SHB_LAHEAD / 4 - 1; i++ ) + { + shaped_wb_excitation[i] *= scale; + } + scale = (float) sqrt( scale ); + + shaped_wb_excitation[L_SHB_LAHEAD / 4 - 1] *= scale; + + /* Update SHB excitation */ + mvr2r( shaped_wb_excitation + L_FRAME16k / 4, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD / 4 ); + + /* Adjust the subframe and frame gain of the synthesized shb signal */ + /* Scale the shaped excitation */ + ScaleShapedSHB( SHB_OVERLAP_LEN / 2, shaped_wb_excitation, hBWE_TD->syn_overlap, GainShape, GainFrame, window_wb, subwin_wb ); + + curr_frame_pow = sum2_f( shaped_wb_excitation, L_FRAME16k / 4 ) + 0.001f; + curr_frame_pow = min( curr_frame_pow, FLT_MAX ); + + if ( !st->bfi && ( st->prev_bfi || st->prev_use_partial_copy ) ) + { + if ( curr_frame_pow > 2.0f * hBWE_TD->prev_wb_bwe_frame_pow ) + { + scale = root_a_over_b( hBWE_TD->prev_wb_bwe_frame_pow, curr_frame_pow ); + temp = (float) pow( scale, 0.125f ); + } + else + { + scale = 1.0f; + temp = 1.0f; + } + + for ( j = 0; j < 8; j++ ) + { + GainShape[2 * j] *= scale; + GainShape[2 * j + 1] *= scale; + for ( i = 0; i < L_FRAME16k / ( 4 * 8 ); i++ ) + { + shaped_wb_excitation[i + j * L_FRAME16k / ( 4 * 8 )] *= scale; + } + scale /= temp; + } + } + + hBWE_TD->prev_wb_bwe_frame_pow = curr_frame_pow; + + /* generate 16kHz SHB signal (6 - 8 kHz) from 2kHz signal */ + GenWBSynth( shaped_wb_excitation, error, hBWE_TD->state_lsyn_filt_shb, hBWE_TD->state_lsyn_filt_dwn_shb ); + + mvr2r( error + L_FRAME16k - L_SHB_TRANSITION_LENGTH, hBWE_TD->old_tbe_synth, L_SHB_TRANSITION_LENGTH ); + + for ( i = 0; i < L_FRAME16k; i++ ) + { + synth[i] = 0.65f * error[i]; + } + + if ( st->hBWE_FD != NULL ) + { + st->hBWE_FD->last_wb_bwe_ener = 0.0f; + for ( i = 0; i < L_FRAME16k; i++ ) + { + st->hBWE_FD->last_wb_bwe_ener += synth[i] * synth[i]; + } + st->hBWE_FD->last_wb_bwe_ener = (float) sqrt( st->hBWE_FD->last_wb_bwe_ener / L_FRAME16k ); + } + + if ( st->output_Fs == 32000 ) /* 32kHz sampling rate, but only WB output - interpolate */ + { + Interpolate_allpass_steep( synth, hBWE_TD->mem_resamp_HB, L_FRAME16k, upsampled_synth ); + mvr2r( upsampled_synth, synth, L_FRAME32k ); + } + else if ( st->output_Fs == 48000 ) + { + interpolate_3_over_1_allpass( synth, L_FRAME16k, upsampled_synth, hBWE_TD->mem_resamp_HB ); + mvr2r( upsampled_synth, synth, L_FRAME48k ); + } + } + else + { + for ( i = 0; i < LPC_SHB_ORDER_WB; i++ ) + { + lsf_wb[i] = ( i + 1 ) / 6.f; + } + GainFrame = 0; + + hBWE_TD->prev_wb_bwe_frame_pow = 0.001f; + } + + /* Update previous frame parameters for FEC */ + if ( st->extl_brate == WB_TBE_0k35 ) + { + mvr2r( lsf_wb, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER_LBR_WB ); + } + else + { + mvr2r( lsf_wb, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER_WB ); + } + hBWE_TD->GainFrame_prevfrm = GainFrame; + + if ( !st->bfi ) + { + hBWE_TD->GainAttn = 1.0f; + } + + return; +} + +/*-------------------------------------------------------------------* + * swb_tbe_dec() + * + * SWB TBE decoder, 6 - 14 kHz (or 7.5 - 15.5 kHz) band decoding module + *-------------------------------------------------------------------*/ + +void swb_tbe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + STEREO_ICBWE_DEC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ + const float *bwe_exc_extended, /* i : bandwidth extended excitation */ + const float voice_factors[], /* i : voicing factors */ + const float old_syn_12k8_16k[], /* i : low band synthesis */ + float *White_exc16k, /* o : shaped white excitation for the FB TBE */ + float *synth, /* o : SHB synthesis/final synthesis */ + float *pitch_buf ) +{ + int16_t i, j; + int16_t stemp; + TD_BWE_DEC_HANDLE hBWE_TD; + float shaped_shb_excitation[L_FRAME16k + L_SHB_LAHEAD]; + float lsf_shb[LPC_SHB_ORDER], lpc_shb[LPC_SHB_ORDER + 1], GainShape[NUM_SHB_SUBFR], GainFrame; + float error[L_FRAME32k]; + float ener; + int16_t is_fractive; + float prev_pow, curr_pow, scale; + float curr_frame_pow, temp; + float GainShapeTemp[NUM_SHB_SUBFR / 4], GainGrad0[3], GainGrad1[3], GainGradFEC[4]; + float vf_modified[NB_SUBFR16k]; + float f, inc; + float GainFrame_prevfrm; + float tilt_swb_fec; + float prev_ener_ratio; + float lsp_shb_1[LPC_SHB_ORDER], lsp_shb_2[LPC_SHB_ORDER], lsp_temp[LPC_SHB_ORDER]; + float lpc_shb_sf[4 * ( LPC_SHB_ORDER + 1 )]; + const float *ptr_lsp_interp_coef; + float shb_ener_sf; + float shb_res_gshape[NB_SUBFR16k]; + float mixFactors; + int16_t vind; + float shb_res_dummy[L_FRAME16k]; + float shaped_shb_excitationTemp[L_FRAME16k]; + float ener_tmp[NUM_SHB_SUBGAINS]; + float GainShape_tmp[NUM_SHB_SUBGAINS]; + float pitch; + int16_t l_subframe; + float formant_fac; + float synth_scale; + float lsf_diff[LPC_SHB_ORDER], w[LPC_SHB_ORDER]; + float refl[M]; + float tilt_para; + float *nlExc16k, *mixExc16k; + int16_t MSFlag; + float feedback; + float GainShape_tilt; + + hBWE_TD = st->hBWE_TD; + + /* initializations */ + GainFrame = 0.0f; + mixFactors = 0.0f; + shb_ener_sf = 0.0f; + set_f( shaped_shb_excitationTemp, 0.0f, L_FRAME16k ); + if ( st->hTdCngDec != NULL ) + { + st->hTdCngDec->shb_dtx_count = 0; + } + is_fractive = 0; + + if ( hStereoICBWE != NULL ) + { + nlExc16k = hStereoICBWE->nlExc16k; + mixExc16k = hStereoICBWE->mixExc16k; + MSFlag = hStereoICBWE->MSFlag; + } + else + { + nlExc16k = NULL; + mixExc16k = NULL; + MSFlag = 0; + } + + /* find tilt */ + calc_tilt_bwe( old_syn_12k8_16k, &tilt_swb_fec, L_FRAME ); + + if ( st->bfi && st->clas_dec != UNVOICED_CLAS ) + { + tilt_swb_fec = hBWE_TD->tilt_swb_fec; + } + /* WB/SWB bandwidth switching */ + if ( ( st->tilt_wb > 5 && st->clas_dec == UNVOICED_CLAS ) || st->tilt_wb > 10 ) + { + if ( ( st->prev_fractive == 0 && st->prev_enerLH < 2.0f * st->enerLH && st->prev_enerLH > 0.5f * st->enerLH && st->prev_enerLL < 2.0f * st->enerLL && st->prev_enerLL > 0.5f * st->enerLL ) || ( st->prev_fractive == 1 && st->prev_enerLH > 3.0f * st->enerLH ) || ( st->enerLL > 1.5f * st->enerLH && st->tilt_wb < 10.0f ) ) + { + is_fractive = 0; + } + else + { + is_fractive = 1; + } + } + + /* WB/SWB bandwidth switching */ + if ( st->bws_cnt > 0 ) + { + f = 1.0f / 22.0f; + inc = 1.0f / 22.0f; + + if ( is_fractive == 1 ) + { + mvr2r( lsf_tab, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER ); + } + else + { + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->lsp_prevfrm[i] = f; + f += inc; + } + } + if ( ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE && !( st->prev_enerLH < 2.0f * st->enerLH && st->prev_enerLH > 0.5f * st->enerLH ) ) || st->last_core != ACELP_CORE || ( st->last_core == ACELP_CORE && labs( st->last_core_brate - st->core_brate ) > 3600 ) || ( is_fractive ^ st->prev_fractive ) == 1 ) + { + set_f( GainShape, 0.3536f, NUM_SHB_SUBFR ); + } + else + { + hBWE_TD->prev_GainShape = ( hBWE_TD->prev_GainShape > 0.3536f ) ? 0.353f : hBWE_TD->prev_GainShape; + set_f( GainShape, hBWE_TD->prev_GainShape, NUM_SHB_SUBFR ); + } + + /* this never happens */ + mvr2r( hBWE_TD->lsp_prevfrm, lsf_shb, LPC_SHB_ORDER ); + set_f( shb_res_gshape, 0.2f, NB_SUBFR16k ); + } + else + { + if ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) + { + f = 1.0f / 22.0f; + inc = 1.0f / 22.0f; + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->lsp_prevfrm[i] = f; + f += inc; + } + } + + if ( !st->bfi ) + { + if ( st->use_partial_copy ) + { + if ( st->last_extl != SWB_TBE ) + { + hBWE_TD->GainFrame_prevfrm = 0; + f = 1.0f / 22.0f; + inc = 1.0f / 22.0f; + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->lsp_prevfrm[i] = f; + f += inc; + } + } + mvr2r( hBWE_TD->lsp_prevfrm, lsf_shb, LPC_SHB_ORDER ); + set_f( GainShape, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR ); + + if ( st->rf_frame_type == RF_NELP ) + { + /* Frame gain */ + GainFrame = usdequant( st->rf_indx_tbeGainFr, SHB_GAIN_QLOW, SHB_GAIN_QDELTA ); + GainFrame = (float) pow( 10.0, GainFrame ); + + if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && !st->prev_use_partial_copy && st->prev_coder_type == UNVOICED && GainFrame != hBWE_TD->GainFrame_prevfrm && st->next_coder_type != GENERIC && st->last_extl == SWB_TBE ) + { + GainFrame = 0.2f * GainFrame + 0.8f * hBWE_TD->GainFrame_prevfrm; + } + } + else + { + temp = 0.0f; + /* Frame gain */ + switch ( st->rf_indx_tbeGainFr ) + { + case 0: + GainFrame = 0.5f; + if ( hBWE_TD->GainFrame_prevfrm <= 1.25 ) + { + temp = 0.8f; + } + break; + case 1: + GainFrame = 2.0f; + if ( hBWE_TD->GainFrame_prevfrm > 1.25 && hBWE_TD->GainFrame_prevfrm <= 3 ) + { + temp = 0.8f; + } + break; + case 2: + GainFrame = 4.0f; + if ( hBWE_TD->GainFrame_prevfrm > 3 && hBWE_TD->GainFrame_prevfrm <= 6 ) + { + temp = 0.8f; + } + break; + case 3: + GainFrame = 8.0f; + if ( hBWE_TD->GainFrame_prevfrm > 6 && hBWE_TD->GainFrame_prevfrm <= 16 ) + { + temp = 0.8f; + } + break; + default: + IVAS_ERROR( IVAS_ERR_INTERNAL, "RF SWB-TBE gain bits not supported." ); + } + + if ( st->last_extl == SWB_TBE ) + { + GainFrame = ( 1 - temp ) * GainFrame + temp * ( hBWE_TD->GainFrame_prevfrm ); + } + + if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE ) + { + if ( !st->prev_use_partial_copy && st->last_coder_type == VOICED && st->rf_frame_type == RF_GENPRED && GainFrame > 8.0f && GainFrame < 11.67f ) + { + GainFrame *= 0.3f; + } + } + } + } + else + { + /* de-quantization */ + dequantizeSHBparams( st, st->extl, st->extl_brate, lsf_shb, GainShape, &GainFrame, &stemp, &shb_ener_sf, shb_res_gshape, &mixFactors, &MSFlag ); + if ( hStereoICBWE != NULL ) + { + hStereoICBWE->MSFlag = MSFlag; + } + } + } + else + { + mvr2r( hBWE_TD->lsp_prevfrm, lsf_shb, LPC_SHB_ORDER ); + + if ( st->codec_mode == MODE1 && st->element_mode == EVS_MONO ) + { + /* the previous frame gainshape gradient and the gainshape gradient pattern for the current frame */ + for ( j = 0; j < 3; j++ ) + { + GainGrad0[j] = hBWE_TD->GainShape_Delay[j + 1] - hBWE_TD->GainShape_Delay[j]; + GainGrad1[j] = hBWE_TD->GainShape_Delay[j + 5] - hBWE_TD->GainShape_Delay[j + 4]; + GainGradFEC[j + 1] = GainGrad0[j] * 0.4f + GainGrad1[j] * 0.6f; + } + + /* gradient for the first gainshape */ + if ( ( GainGrad1[2] > 2 * GainGrad1[1] && GainGrad1[1] > 2 * GainGrad1[0] ) || + ( GainGrad1[2] < 2 * GainGrad1[1] && GainGrad1[1] < 2 * GainGrad1[0] ) ) + { + GainGradFEC[0] = GainGrad1[1] * 0.1f + GainGrad1[2] * 0.9f; + } + else + { + GainGradFEC[0] = GainGrad1[0] * 0.2f + GainGrad1[1] * 0.3f + GainGrad1[2] * 0.5f; + } + + /* get the first gainshape template */ + if ( ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS ) && GainGradFEC[0] > 0 ) + { + GainShapeTemp[0] = hBWE_TD->GainShape_Delay[7] + GainGradFEC[0]; + } + else if ( GainGradFEC[0] > 0 ) + { + GainShapeTemp[0] = hBWE_TD->GainShape_Delay[7] + GainGradFEC[0] * 0.5f; + } + else + { + GainShapeTemp[0] = hBWE_TD->GainShape_Delay[7]; + } + + /*Get the second the third and the fourth gainshape template*/ + if ( ( GainGrad1[2] > 10.0f * GainGrad1[1] ) && GainGrad1[1] > 0 ) + { + for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) + { + GainShapeTemp[i] = GainShapeTemp[i - 1] + GainGradFEC[i] * 0.8f; + GainShapeTemp[i] = max( GainShapeTemp[i], 0.01f ); + } + } + else if ( ( GainGrad1[2] > 10.0f * GainGrad1[1] ) && GainGrad1[1] < 0 ) + { + for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) + { + GainShapeTemp[i] = GainShapeTemp[i - 1] + GainGradFEC[i] * 0.2f; + GainShapeTemp[i] = max( GainShapeTemp[i], 0.01f ); + } + } + else + { + for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) + { + GainShapeTemp[i] = GainShapeTemp[i - 1] + GainGradFEC[i]; + GainShapeTemp[i] = max( GainShapeTemp[i], 0.01f ); + } + } + + /* Get the gainshape and gain frame for the current frame*/ + if ( ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS ) && st->nbLostCmpt == 1 ) + { + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + for ( j = 0; j < 4; j++ ) + { + GainShape[i * 4 + j] = GainShapeTemp[i] * 1.2f; + } + } + hBWE_TD->GainAttn *= 0.95f; + } + else if ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS ) + { + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + for ( j = 0; j < 4; j++ ) + { + GainShape[i * 4 + j] = GainShapeTemp[i]; + } + } + hBWE_TD->GainAttn *= 0.95f; + } + else if ( st->nbLostCmpt > 1 ) + { + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + for ( j = 0; j < 4; j++ ) + { + GainShape[i * 4 + j] = GainShapeTemp[i] * 0.5f; + } + } + hBWE_TD->GainAttn *= 0.5f; + } + else + { + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + for ( j = 0; j < 4; j++ ) + { + GainShape[i * 4 + j] = GainShapeTemp[i]; + } + } + hBWE_TD->GainAttn *= 0.85f; + } + + GainFrame = hBWE_TD->GainAttn * hBWE_TD->GainFrame_prevfrm; + } + else + { + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + for ( j = 0; j < 4; j++ ) + { + GainShape[i * 4 + j] = st->cummulative_damping * hBWE_TD->GainShape_Delay[4 + i]; + } + } + + if ( tilt_swb_fec > 8 ) + { + if ( st->nbLostCmpt == 1 ) + { + GainFrame = (float) ( 0.6 * st->cummulative_damping * hBWE_TD->GainFrame_prevfrm ); + } + else if ( st->nbLostCmpt == 2 ) + { + GainFrame = (float) ( 0.35 * st->cummulative_damping * hBWE_TD->GainFrame_prevfrm ); + } + else + { + GainFrame = (float) ( 0.2 * st->cummulative_damping * hBWE_TD->GainFrame_prevfrm ); + } + } + else + { + GainFrame = hBWE_TD->GainFrame_prevfrm; /* gain locking */ + } + } + + if ( st->extl_brate >= SWB_TBE_2k8 ) + { + if ( st->codec_mode == MODE1 && st->element_mode == EVS_MONO ) + { + scale = (float) ( hBWE_TD->prev1_shb_ener_sf / sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001 ) ); + scale = hBWE_TD->prev_res_shb_gshape * min( scale, 1.0f ); + if ( hBWE_TD->prev2_shb_ener_sf > 2.0f * hBWE_TD->prev1_shb_ener_sf || hBWE_TD->prev3_shb_ener_sf > 2.0f * hBWE_TD->prev2_shb_ener_sf ) + { + shb_ener_sf = 0.5f * scale * hBWE_TD->prev1_shb_ener_sf; + if ( st->nbLostCmpt > 1 ) + { + shb_ener_sf *= 0.5f; + } + } + else + { + shb_ener_sf = scale * scale * hBWE_TD->prev1_shb_ener_sf; + } + } + else + { + if ( hBWE_TD->prev2_shb_ener_sf > 2.0f * hBWE_TD->prev1_shb_ener_sf || hBWE_TD->prev3_shb_ener_sf > 2.0f * hBWE_TD->prev2_shb_ener_sf ) + { + shb_ener_sf = 0.5f * st->cummulative_damping * hBWE_TD->prev1_shb_ener_sf; + } + else + { + shb_ener_sf = st->cummulative_damping * hBWE_TD->prev1_shb_ener_sf; + } + } + } + + shb_ener_sf = max( shb_ener_sf, 1.0f ); + mixFactors = hBWE_TD->prev_mixFactors; + + if ( st->codec_mode == MODE2 ) + { + set_f( shb_res_gshape, 1.0f, NB_SUBFR16k ); + } + else + { + set_f( shb_res_gshape, 0.2f, NB_SUBFR16k ); + } + } + } + + /* get the gainshape delay */ + mvr2r( &hBWE_TD->GainShape_Delay[4], &hBWE_TD->GainShape_Delay[0], NUM_SHB_SUBFR / 4 ); + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + hBWE_TD->GainShape_Delay[i + 4] = GainShape[i * 4]; + } + + mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); + if ( st->coder_type == VOICED || mean( voice_factors, 4 ) > 0.4f ) + { + for ( i = 1; i < NB_SUBFR; i++ ) + { + vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; + } + + if ( st->L_frame != L_FRAME ) + { + vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; + } + } + + if ( st->use_partial_copy && st->nelp_mode_dec ) + { + set_f( vf_modified, 0.0f, NB_SUBFR16k ); + } + + /* SHB LSF from current frame; and convert to LSP for interpolation */ + lsf2lsp( lsf_shb, lsp_shb_2, LPC_SHB_ORDER, 1 ); + + if ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) + { + /* SHB LSP values from prev. frame for interpolation */ + mvr2r( hBWE_TD->swb_lsp_prev_interp, lsp_shb_1, LPC_SHB_ORDER ); + } + else + { + /* Use current frame's LSPs; in effect no interpolation */ + mvr2r( lsp_shb_2, lsp_shb_1, LPC_SHB_ORDER ); + } + + if ( st->bws_cnt == 0 && st->bws_cnt1 == 0 && st->prev_use_partial_copy == 0 && st->use_partial_copy == 0 ) + { + lsf_diff[0] = lsf_diff[LPC_SHB_ORDER - 1] = 0.5f; + for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) + { + lsf_diff[i] = lsf_shb[i] - lsf_shb[i - 1]; + } + + a2rc( hBWE_TD->cur_sub_Aq + 1, refl, M ); + tilt_para = 6.6956f * ( 1.0f + refl[0] ) * ( 1.0f + refl[0] ) - 3.8714f * ( 1.0f + refl[0] ) + 1.3041f; + if ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) + { + for ( i = 1; i < LPC_SHB_ORDER - 1; i++ ) + { + hBWE_TD->prev_lsf_diff[i - 1] = 0.5f * lsf_diff[i]; + } + } + + if ( st->extl_brate <= FB_TBE_1k8 ) + { + if ( !( hBWE_TD->prev_tilt_para > 5.0f && ( st->coder_type == TRANSITION || tilt_para < 1.0f ) ) && !( ( hBWE_TD->prev_tilt_para < 3.0f && st->prev_coder_type >= VOICED ) && tilt_para > 5.0f ) ) + { + for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) + { + if ( lsf_diff[i] < 0 || hBWE_TD->prev_lsf_diff[i - 1] <= 0 ) /* safety check in case of bit errors */ + { + w[i] = 0; + st->BER_detect = 1; + } + else + { + w[i] = ( lsf_diff[i] < hBWE_TD->prev_lsf_diff[i - 1] ) ? min( max( 0.8f * lsf_diff[i] / hBWE_TD->prev_lsf_diff[i - 1], 0.5f ), 1.0f ) : min( max( 0.8f * hBWE_TD->prev_lsf_diff[i - 1] / lsf_diff[i], 0.5f ), 1.0f ); + } + } + w[0] = w[1]; + w[LPC_SHB_ORDER - 1] = w[LPC_SHB_ORDER - 2]; + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + lsp_temp[i] = lsp_shb_1[i] * ( 1.0f - w[i] ) + lsp_shb_2[i] * w[i]; + } + } + else + { + mvr2r( lsp_shb_2, lsp_temp, LPC_SHB_ORDER ); + } + + /* convert from lsp to lsf */ + lsp2lsf( lsp_temp, lsf_shb, LPC_SHB_ORDER, 1 ); + } + mvr2r( lsf_diff + 1, hBWE_TD->prev_lsf_diff, LPC_SHB_ORDER - 2 ); + hBWE_TD->prev_tilt_para = tilt_para; + } + else + { + mvr2r( lsp_shb_2, lsp_temp, LPC_SHB_ORDER ); + } + + if ( st->extl_brate >= SWB_TBE_2k8 ) + { + /* SHB LSP interpolation */ + ptr_lsp_interp_coef = interpol_frac_shb; + for ( j = 0; j < 4; j++ ) + { + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + lsp_temp[i] = lsp_shb_1[i] * ( *ptr_lsp_interp_coef ) + lsp_shb_2[i] * ( *( ptr_lsp_interp_coef + 1 ) ); + } + ptr_lsp_interp_coef += 2; + + /* convert from lsp to lsf */ + lsp2lsf( lsp_temp, lsp_temp, LPC_SHB_ORDER, 1 ); + + /* convert lsf to lpc for SHB synthesis */ + lsp2a( lpc_shb_sf + j * ( LPC_SHB_ORDER + 1 ), lsp_temp, LPC_SHB_ORDER ); + lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )] = 1.0f; + } + } + + /* Save the SWB LSP values from current frame for interpolation */ + mvr2r( lsp_shb_2, hBWE_TD->swb_lsp_prev_interp, LPC_SHB_ORDER ); + + /* save the shb_ener and mixFactor values */ + hBWE_TD->prev3_shb_ener_sf = hBWE_TD->prev2_shb_ener_sf; + hBWE_TD->prev2_shb_ener_sf = hBWE_TD->prev1_shb_ener_sf; + hBWE_TD->prev1_shb_ener_sf = shb_ener_sf; + hBWE_TD->prev_res_shb_gshape = shb_res_gshape[4]; + hBWE_TD->prev_mixFactors = mixFactors; + + /* SWB CNG/DTX - update memories */ + if ( st->hTdCngDec != NULL ) + { + mvr2r( st->hTdCngDec->lsp_shb_prev, st->hTdCngDec->lsp_shb_prev_prev, LPC_SHB_ORDER ); + mvr2r( lsf_shb, st->hTdCngDec->lsp_shb_prev, LPC_SHB_ORDER ); + } + + /* convert LSPs back into LP coeffs */ + lsp2a( lpc_shb, lsf_shb, LPC_SHB_ORDER ); + lpc_shb[0] = 1.0; + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + vind = (int16_t) ( mixFactors * ( ( 1 << NUM_BITS_SHB_VF ) - 1 ) ); + } + else + { + vind = (int16_t) ( mixFactors * ( 1 << NUM_BITS_SHB_VF ) ); + } + + /* Determine formant PF strength */ + formant_fac = swb_formant_fac( lpc_shb[1], &hBWE_TD->tilt_mem ); + if ( st->total_brate > ACELP_32k ) + { + for ( j = 0; j < 4; j++ ) + { + mvr2r( lpc_shb, &lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )], LPC_SHB_ORDER + 1 ); + } + } + + /* From low band excitation, generate highband excitation */ + mvr2r( hBWE_TD->state_syn_shbexc, shaped_shb_excitation, L_SHB_LAHEAD ); + GenShapedSHBExcitation( shaped_shb_excitation + L_SHB_LAHEAD, lpc_shb, White_exc16k, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, st->extl, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), lpc_shb_sf, &shb_ener_sf, shb_res_gshape, shb_res_dummy, &vind, formant_fac, hBWE_TD->fb_state_lpc_syn, &( hBWE_TD->fb_tbe_demph ), st->total_brate, st->prev_bfi, st->element_mode, st->flag_ACELP16k, nlExc16k, mixExc16k, st->extl_brate, MSFlag, + NULL, &( hBWE_TD->prev_pow_exc16kWhtnd ), &( hBWE_TD->prev_mix_factor ), NULL, + NULL ); + + /* fill-in missing SHB excitation */ + if ( ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) && st->last_core_brate <= SID_2k40 ) + { + mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, shaped_shb_excitation, L_SHB_LAHEAD ); + } + + if ( hStereoICBWE != NULL ) + { + mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, hStereoICBWE->shbSynthRef, L_FRAME16k ); + } + + if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) + { + for ( i = 0; i < L_FRAME16k; i += L_SUBFR16k ) + { + /* TD BWE post-processing */ + PostShortTerm( &shaped_shb_excitation[L_SHB_LAHEAD + i], lpc_shb, &shaped_shb_excitationTemp[i], hBWE_TD->mem_stp_swb, hBWE_TD->ptr_mem_stp_swb, &( hBWE_TD->gain_prec_swb ), hBWE_TD->mem_zero_swb, formant_fac ); + } + + mvr2r( shaped_shb_excitationTemp, &shaped_shb_excitation[L_SHB_LAHEAD], L_FRAME16k ); + prev_pow = sum2_f( shaped_shb_excitation, L_SHB_LAHEAD + 10 ); + curr_pow = sum2_f( shaped_shb_excitation + L_SHB_LAHEAD + 10, L_SHB_LAHEAD + 10 ); + + if ( voice_factors[0] > 0.75f ) + { + curr_pow *= 0.25; + } + + if ( prev_pow == 0 ) + { + scale = 0; + } + else + { + scale = (float) sqrt( curr_pow / prev_pow ); + } + + for ( i = 0; i < L_SHB_LAHEAD; i++ ) + { + shaped_shb_excitation[i] *= scale; + } + for ( ; i < L_SHB_LAHEAD + 10; i++ ) + { + temp = ( i - 19 ) / 10.0f; + shaped_shb_excitation[i] *= ( temp * 1.0f + ( 1.0f - temp ) * scale ); + } + } + else + { + /* reset the PF memories if the PF is not running */ + set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); + hBWE_TD->gain_prec_swb = 1.0f; + set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + } + + /* Update SHB excitation */ + mvr2r( shaped_shb_excitation + L_FRAME16k, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD ); + l_subframe = L_FRAME16k / NUM_SHB_SUBGAINS; + ener = EPSILON; + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + ener_tmp[i] = EPSILON; + for ( j = 0; j < l_subframe; j++ ) + { + ener_tmp[i] += shaped_shb_excitation[i * l_subframe + j] * shaped_shb_excitation[i * l_subframe + j] * 0.0125f; + } + ener_tmp[i] = (float) sqrt( ener_tmp[i] ); + ener += ener_tmp[i]; + } + ener /= NUM_SHB_SUBGAINS; + + /* WB/SWB bandwidth switching */ + if ( st->bws_cnt > 0 ) + { + ener *= 0.35f; + + if ( st->tilt_swb > 8 ) + { + st->prev_fractive = 1; + } + + if ( is_fractive == 0 ) + { + if ( st->tilt_wb > 1.0 ) + { + st->tilt_wb = 1.0f; + } + else if ( st->tilt_wb < 0.5 ) + { + st->tilt_wb = 0.5f; + } + + if ( st->prev_fractive == 1 && st->tilt_wb > 0.5 ) + { + st->tilt_wb = 0.5f; + } + } + else + { + if ( st->tilt_wb > 4 ) + { + if ( st->prev_fractive == 0 ) + { + st->tilt_wb = 4; + } + else + { + st->tilt_wb = 8; + } + } + else + { + st->tilt_wb *= 2; + } + } + + if ( ener != 0 ) + { + if ( ener * st->tilt_wb > st->enerLH ) + { + st->tilt_wb = 0.5f * st->enerLH / ener; + } + else if ( ener * st->tilt_wb < 0.05f * st->enerLH && is_fractive == 1 ) + { + st->tilt_wb = 0.25f * st->enerLH / ener; + } + + GainFrame_prevfrm = st->prev_ener_shb / ener; + } + else + { + GainFrame_prevfrm = 0; + } + + if ( is_fractive == 1 ) + { + GainFrame = 8.0f * st->tilt_wb; + } + else + { + GainFrame = 2.0f * st->tilt_wb; + } + + if ( ( is_fractive & st->prev_fractive ) == 1 && GainFrame > GainFrame_prevfrm ) + { + GainFrame = 0.2f * GainFrame + 0.8f * GainFrame_prevfrm; + } + else + { + if ( ( st->prev_enerLH < 2.0f * st->enerLH && st->prev_enerLH > 0.5f * st->enerLH ) && ( st->prev_enerLL < 2.0f * st->enerLL && st->prev_enerLL > 0.5f * st->enerLL ) && ( is_fractive ^ st->prev_fractive ) == 0 ) + { + GainFrame = 0.5f * GainFrame + 0.5f * GainFrame_prevfrm; + } + else + { + if ( is_fractive == 0 && st->prev_fractive == 1 ) + { + GainFrame = ( 1.0f - 0.1f * GainFrame ) * GainFrame + 0.1f * GainFrame * GainFrame_prevfrm; + } + else + { + GainFrame = 0.5f * GainFrame + 0.5f * GainFrame_prevfrm; + } + } + } + + GainFrame *= ( (float) N_WS2N_FRAMES - (float) st->bws_cnt ) / (float) N_WS2N_FRAMES; + } + else + { + if ( st->bws_cnt1 > 0 ) + { + GainFrame *= (float) st->bws_cnt1 / (float) N_WS2N_FRAMES; + } + + if ( st->nbLostCmpt == 1 ) + { + prev_ener_ratio = st->prev_ener_shb / ener; + + if ( st->clas_dec != UNVOICED_CLAS && st->clas_dec != UNVOICED_TRANSITION && hBWE_TD->tilt_swb_fec < 8.0 && + ( ( st->enerLL > 0.5f * st->prev_enerLL && st->enerLL < 2.0f * st->prev_enerLL ) || ( st->enerLH > 0.5f * st->prev_enerLH && st->enerLH < 2.0f * st->prev_enerLH ) ) ) + { + if ( prev_ener_ratio > 4.0f * GainFrame ) + { + GainFrame = 0.4f * prev_ener_ratio + 0.6f * GainFrame; + } + else if ( prev_ener_ratio > 2.0f * GainFrame ) + { + GainFrame = 0.8f * prev_ener_ratio + 0.2f * GainFrame; + } + else + { + GainFrame = 0.2f * prev_ener_ratio + 0.8f * GainFrame; + } + + if ( tilt_swb_fec > hBWE_TD->tilt_swb_fec ) + { + GainFrame *= hBWE_TD->tilt_swb_fec > 0 ? ( min( 5.0f, tilt_swb_fec / hBWE_TD->tilt_swb_fec ) ) : 1.0f; + } + } + else if ( ( st->clas_dec != UNVOICED_CLAS || hBWE_TD->tilt_swb_fec > 8.0 ) && prev_ener_ratio > 4.0f * GainFrame && ( st->enerLL > 0.5f * st->prev_enerLL || st->enerLH > 0.5f * st->prev_enerLH ) ) + { + GainFrame = 0.2f * prev_ener_ratio + 0.8f * GainFrame; + } + } + else if ( st->nbLostCmpt > 1 ) + { + prev_ener_ratio = st->prev_ener_shb / ener; + if ( ( prev_ener_ratio > 4.0 * GainFrame ) && ( ( st->codec_mode == MODE1 && st->enerLL > st->prev_enerLL && st->enerLH > st->prev_enerLH ) || st->codec_mode == MODE2 ) ) + { + if ( tilt_swb_fec > 10.0f && hBWE_TD->tilt_swb_fec > 10.0f ) + { + GainFrame = min( ( prev_ener_ratio * 0.8f + GainFrame * 0.2f ), 4.0f * GainFrame ); + } + else + { + GainFrame = min( ( prev_ener_ratio * 0.5f + GainFrame * 0.5f ), 4.0f * GainFrame ); + } + } + else if ( ( prev_ener_ratio > GainFrame ) && ( ( st->codec_mode == MODE1 && st->enerLL > st->prev_enerLL && st->enerLH > st->prev_enerLH ) || st->codec_mode == MODE2 ) ) + { + if ( tilt_swb_fec > 10.0f && hBWE_TD->tilt_swb_fec > 10.0f ) + { + GainFrame = 0.5f * prev_ener_ratio + 0.5f * GainFrame; + } + else + { + GainFrame = 0.2f * prev_ener_ratio + 0.8f * GainFrame; + } + } + } + } + + st->prev_fractive = is_fractive; + + /* Adjust the subframe and frame gain of the synthesized shb signal */ + /* Scale the shaped excitation */ + if ( st->L_frame == L_FRAME ) + { + pitch = 0.25f * sum_f( pitch_buf, 4 ); + } + else + { + pitch = 0.2f * sum_f( pitch_buf, 5 ); + } + + if ( ( ( st->extl_brate >= SWB_TBE_2k8 && st->prev_coder_type == st->coder_type && st->coder_type != UNVOICED ) || ( st->extl_brate < SWB_TBE_2k8 && ( st->prev_coder_type == st->coder_type || ( st->prev_coder_type == VOICED && st->coder_type == GENERIC ) || ( st->prev_coder_type == GENERIC && st->coder_type == VOICED ) ) ) ) && pitch > 70 && st->extl < FB_TBE && st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) + { + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape_tmp[i] = GainShape[i * 4]; + } + + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + if ( ener_tmp[i] * GainShape_tmp[i] > hBWE_TD->prev_ener * hBWE_TD->prev_GainShape ) + { + GainShape_tmp[i] = 0.5f * ( hBWE_TD->prev_ener * hBWE_TD->prev_GainShape / ener_tmp[i] + GainShape_tmp[i] ); + } + hBWE_TD->prev_ener = ener_tmp[i]; + hBWE_TD->prev_GainShape = GainShape_tmp[i]; + } + + for ( i = 0; i < NUM_SHB_SUBFR; i++ ) + { + GainShape[i] = GainShape_tmp[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; + } + } + + /* Gain shape smoothing after quantization */ + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape_tmp[i] = GainShape[i * NUM_SHB_SUBGAINS]; + } + + lls_interp_n( GainShape_tmp, NUM_SHB_SUBGAINS, &GainShape_tilt, &temp, 1 ); + + if ( vind >= 6 && fabs( GainShape_tilt ) < 0.12f ) + { + feedback = 0.3f; + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape[i] = ( 1 - feedback ) * GainShape[i * NUM_SHB_SUBGAINS] + feedback * GainShape_tmp[i]; + } + + for ( i = NUM_SHB_SUBFR - 1; i > 0; i-- ) + { + GainShape[i] = GainShape[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; + } + } + } + + /* fil-in missing memory */ + if ( ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) && st->last_core_brate <= SID_2k40 ) + { + for ( i = 0; i < L_SHB_LAHEAD; i++ ) + { + hBWE_TD->syn_overlap[i] = shaped_shb_excitation[i] * subwin_shb[L_SHB_LAHEAD - i]; + hBWE_TD->syn_overlap[i] *= window_shb[L_SHB_LAHEAD - 1 - i] * GainFrame; + } + } + + ScaleShapedSHB( SHB_OVERLAP_LEN, shaped_shb_excitation, hBWE_TD->syn_overlap, GainShape, GainFrame, window_shb, subwin_shb ); + + if ( hStereoICBWE != NULL ) + { + mvr2r( lpc_shb, hStereoICBWE->lpSHBRef, LPC_SHB_ORDER + 1 ); + mvr2r( GainShape, hStereoICBWE->gshapeRef, NUM_SHB_SUBFR ); + hStereoICBWE->gFrameRef = GainFrame; + + mvr2r( shaped_shb_excitation, hStereoICBWE->shbSynthRef, L_FRAME16k ); + } + + curr_frame_pow = sum2_f( shaped_shb_excitation, L_FRAME16k ) + 0.001f; + curr_frame_pow = min( curr_frame_pow, FLT_MAX ); + + if ( !st->bfi && ( st->prev_bfi || st->prev_use_partial_copy ) ) + { + if ( ( curr_frame_pow > 2.0f * hBWE_TD->prev_swb_bwe_frame_pow ) && + ( curr_frame_pow < 30.0f * hBWE_TD->prev_swb_bwe_frame_pow ) && + st->prev_coder_type == UNVOICED ) + { + scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); + if ( curr_frame_pow == 0 ) + { + scale = 0; + } + temp = (float) pow( scale, 0.125f ); + } + else + { + scale = 1.0f; + temp = 1.0f; + } + + for ( j = 0; j < 8; j++ ) + { + GainShape[2 * j] *= scale; + GainShape[2 * j + 1] *= scale; + for ( i = 0; i < L_FRAME16k / 8; i++ ) + { + shaped_shb_excitation[i + j * L_FRAME16k / 8] *= scale; + } + + scale /= temp; + } + } + + /* adjust the FEC frame energy */ + if ( st->bfi ) + { + scale = 1.0f; + temp = 1.0f; + if ( st->nbLostCmpt == 1 ) + { + if ( curr_frame_pow > hBWE_TD->prev_swb_bwe_frame_pow && st->prev_coder_type != UNVOICED && st->last_good != UNVOICED_CLAS ) + { + scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); + if ( curr_frame_pow == 0 ) + { + scale = 0; + } + temp = (float) pow( scale, 0.125f ); + } + else if ( curr_frame_pow < 0.5f * hBWE_TD->prev_swb_bwe_frame_pow && st->nbLostCmpt == 1 && ( st->enerLL > 0.5 * st->prev_enerLL || st->enerLH > 0.5 * st->prev_enerLH ) && ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS || hBWE_TD->tilt_swb_fec > 5.0f ) ) + { + scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); + if ( curr_frame_pow == 0 ) + { + scale = 0; + } + temp = (float) pow( scale, 0.125f ); + } + } + else if ( st->nbLostCmpt > 1 ) + { + if ( curr_frame_pow > hBWE_TD->prev_swb_bwe_frame_pow ) + { + scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); + if ( curr_frame_pow == 0 ) + { + scale = 0; + } + temp = (float) pow( scale, 0.125f ); + } + else if ( curr_frame_pow < 0.5f * hBWE_TD->prev_swb_bwe_frame_pow && ( st->enerLL > 0.5 * st->prev_enerLL || st->enerLH > 0.5 * st->prev_enerLH ) && ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS || hBWE_TD->tilt_swb_fec > 5.0f ) ) + { + scale = (float) min( 2.0f, sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ) ); + if ( curr_frame_pow == 0 ) + { + scale = 0; + } + temp = (float) pow( scale, 0.125f ); + } + } + + for ( j = 0; j < 8; j++ ) + { + GainShape[2 * j] *= scale; + GainShape[2 * j + 1] *= scale; + for ( i = 0; i < L_FRAME16k / 8; i++ ) + { + shaped_shb_excitation[i + j * L_FRAME16k / 8] *= scale; + } + + scale /= temp; + } + } + + hBWE_TD->prev_swb_bwe_frame_pow = curr_frame_pow; + + st->prev_ener_shb = EPSILON; + for ( i = 0; i < L_FRAME16k; i++ ) + { + st->prev_ener_shb += shaped_shb_excitation[i] * shaped_shb_excitation[i]; + } + st->prev_ener_shb = (float) sqrt( st->prev_ener_shb / L_FRAME16k ); + + if ( st->hBWE_FD != NULL ) + { + for ( i = 0; i < SWB_FENV; i++ ) + { + st->hBWE_FD->prev_SWB_fenv[i] = (float) sqrt( curr_frame_pow / L_FRAME16k ); + } + } + + /* generate 32kHz SHB synthesis from 12.8(16)kHz signal */ + GenSHBSynth( shaped_shb_excitation, error, hBWE_TD->genSHBsynth_Hilbert_Mem, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, st->L_frame, &( hBWE_TD->syn_dm_phase ) ); + + mvr2r( error + L_FRAME32k - L_SHB_TRANSITION_LENGTH, hBWE_TD->old_tbe_synth, L_SHB_TRANSITION_LENGTH ); + + /* resample SHB synthesis (if needed) and scale down */ + synth_scale = ( st->codec_mode == MODE1 ) ? 0.9f : 1.f; + + if ( st->output_Fs == 48000 ) + { + if ( st->extl == FB_TBE ) + { + for ( i = 0; i < L_FRAME16k; i++ ) + { + White_exc16k[i] *= GainFrame * GainShape[NUM_SHB_SUBFR * i / L_FRAME16k]; + } + } + + for ( i = 0; i < L_FRAME32k; i++ ) + { + error[i] *= synth_scale; + } + + interpolate_3_over_2_allpass( error, L_FRAME32k, synth, hBWE_TD->int_3_over_2_tbemem_dec ); + } + else if ( st->output_Fs == 32000 ) + { + for ( i = 0; i < L_FRAME32k; i++ ) + { + synth[i] = synth_scale * error[i]; + } + } + else if ( st->output_Fs == 16000 ) + { + for ( i = 0; i < L_FRAME32k; i++ ) + { + error[i] *= synth_scale; + } + + Decimate_allpass_steep( error, hBWE_TD->mem_resamp_HB_32k, L_FRAME32k, synth ); + } + + /* Update previous frame parameters for FEC */ + mvr2r( lsf_shb, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER ); + if ( st->codec_mode == MODE1 ) + { + hBWE_TD->GainFrame_prevfrm = GainFrame; + hBWE_TD->tilt_swb_fec = tilt_swb_fec; + + if ( !st->bfi ) + { + hBWE_TD->GainAttn = 1.0f; + } + } + else + { + if ( !st->bfi ) + { + hBWE_TD->tilt_swb_fec = tilt_swb_fec; + hBWE_TD->GainFrame_prevfrm = GainFrame; /* gain locking on lost frame */ + hBWE_TD->GainAttn = 1.0f; + } + } + hBWE_TD->prev_ener = ener_tmp[NUM_SHB_SUBGAINS - 1]; + hBWE_TD->prev_GainShape = GainShape[NUM_SHB_SUBFR - 1]; + + return; +} + +/*-------------------------------------------------------------------* + * Dequant_lower_LSF() + * + * Dequantized the lower LSFs + *-------------------------------------------------------------------*/ + +static void Dequant_lower_LSF( + const int16_t lsf_idx[], /* i : LSF indices */ + float lsf_q[] /* o : Quantized LSFs */ +) +{ + int16_t i; + + lsf_q[0] = lsf_q_cb[0][lsf_idx[0]]; + for ( i = 1; i < NUM_Q_LSF; i++ ) + { + lsf_q[i] = lsf_q_cb[i][lsf_idx[i]] + lsf_q[i - 1]; + } + + return; +} + +/*-------------------------------------------------------------------* + * Map_higher_LSF() + * + * Map the higher LSFs from the lower LSFs + *-------------------------------------------------------------------*/ + +static void Map_higher_LSF( + float lsf_q[], /* i/o: Quantized lower LSFs */ + const float m, /* i : Mirroring point */ + const float grid_in[] /* i : Input LSF smoohthing grid */ +) +{ + float lsf_map[NUM_MAP_LSF]; + float grid[NUM_MAP_LSF]; + float last_q_lsf; + float lsf_smooth[NUM_MAP_LSF]; + float offset; + int16_t i; + float scale; + + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + lsf_map[i] = 2 * m - lsf_q[NUM_MAP_LSF - 1 - i]; + } + + if ( m > MAX_LSF / 2 ) + { + offset = lsf_map[0]; + scale = ( MAX_LSF - m ) / m; + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + lsf_map[i] = ( lsf_map[i] - offset ) * scale + offset; + } + } + + last_q_lsf = lsf_q[NUM_Q_LSF - 1]; + scale = MAX_LSF - last_q_lsf; + + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + grid[i] = grid_in[i] * scale + last_q_lsf; + } + + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + lsf_smooth[i] = ( 1 - grid_smoothing[i] ) * lsf_map[i] + grid_smoothing[i] * grid[i]; + } + + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + lsf_q[NUM_Q_LSF + i] = lsf_smooth[i]; + } + + return; +} + +/*-------------------------------------------------------------------* + * Map_higher_LSF() + * + * Map the higher LSFs from the lower LSFs + *-------------------------------------------------------------------*/ + +static void Dequant_mirror_point( + const float lsf_q[], /* i/o: Quantized lower LSFs */ + const int16_t m_idx, /* i : Mirror point index */ + float *m /* i : Mirroring point */ +) +{ + *m = mirror_point_q_cb[m_idx] + lsf_q[NUM_Q_LSF - 1]; + + return; +} + +/*-------------------------------------------------------------------* + * dequantizeSHBparams() + * + * Dequantize super highband spectral envolope, temporal gains and frame gain + *-------------------------------------------------------------------*/ + +static void dequantizeSHBparams( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t extl, /* i : extension layer */ + int32_t extl_brate, /* i : extensiuon layer bitrate */ + float *Q_lsf, /* o : SHB LSF from de-quantization */ + float *Q_subgain, /* o : SHB subframe gains from de-quantization */ + float *Q_framegrain, /* o : SHB frame gain from de-quantization */ + int16_t *uv_flag, /* o : unvoiced flag */ + float *Q_shb_ener_sf, + float *Q_shb_res_gshape, + float *Q_mixFactors, + int16_t *MSFlag ) +{ + int16_t i, j, idxLSF, idxSubGain, idxFrameGain; + TD_BWE_DEC_HANDLE hBWE_TD; + float Q_combined_gains[NUM_SHB_SUBFR / 4]; + float lsf_q[LPC_SHB_ORDER]; + int16_t lsf_idx[NUM_Q_LSF]; + int16_t m_idx, grid_idx; + float m; + int16_t idx_shb_fr_gain, idx_res_gs[5], idx_mixFac; + + UWord32 Idx_lvq; + int16_t Idx, Idx_pred; + int16_t num_bits_lvq; + float out[LATTICE_DIM]; + const float *cb_stage; + int16_t predictor_bits; + int16_t nbits = NUM_BITS_SHB_MSLVQ; + + hBWE_TD = st->hBWE_TD; + + /* LSFs */ + if ( extl == WB_TBE ) + { + if ( extl_brate == WB_TBE_0k35 ) + { + if ( st->codec_mode == MODE2 ) + { + idxFrameGain = hBWE_TD->gFrame_WB; + idxLSF = hBWE_TD->lsf_WB; + } + else + { + idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FrameGain_LBR_WB ); + idxLSF = get_next_indice( st, NUM_BITS_LBR_WB_LSF ); + } + + mvr2r( lbr_wb_bwe_lsfvq_cbook_2bit + idxLSF * LPC_SHB_ORDER_LBR_WB, Q_lsf, LPC_SHB_ORDER_LBR_WB ); + set_f( Q_subgain, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR / 2 ); + mvr2r( SHBCB_FrameGain16 + idxFrameGain, Q_framegrain, 1 ); + } + else + { + /* read the information about UNVOICED frame */ + *uv_flag = get_next_indice( st, 1 ); + + idxSubGain = get_next_indice( st, NUM_BITS_SHB_SUBGAINS ); + idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FrameGain ); + idxLSF = get_next_indice( st, NUM_BITS_WB_LSF ); + + mvr2r( wb_bwe_lsfvq_cbook_8bit + idxLSF * LPC_SHB_ORDER_WB, Q_lsf, LPC_SHB_ORDER_WB ); + mvr2r( HBCB_SubGain5bit + idxSubGain * NUM_SHB_SUBFR / 4, Q_combined_gains, NUM_SHB_SUBFR / 4 ); + + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + Q_combined_gains[i] = (float) pow( 10.0f, Q_combined_gains[i] / 20.0f ); + } + + for ( i = 0; i < NUM_SHB_SUBFR / 2; i += 2 ) + { + Q_subgain[i] = Q_combined_gains[i / 2]; + Q_subgain[i + 1] = Q_combined_gains[i / 2]; + } + + /* frame gain */ + mvr2r( SHBCB_FrameGain64 + idxFrameGain, Q_framegrain, 1 ); + } + } + else + { + if ( st->codec_mode == MODE2 ) + { + idxSubGain = hBWE_TD->idxSubGains; + idxFrameGain = hBWE_TD->idxFrameGain; + } + else + { + idxSubGain = get_next_indice( st, NUM_BITS_SHB_SUBGAINS ); + if ( st->extl_brate == SWB_TBE_1k75 ) + { + idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FRAMEGAIN_1k75 ); + } + else + { + idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FRAMEGAIN ); + } + } + + /* Multi Source Flag */ + if ( st->element_mode >= IVAS_CPE_DFT && !( st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) + { + *MSFlag = get_next_indice( st, STEREO_ICBWE_MSFLAG_BITS ); + } + else + { + *MSFlag = 0; + } + + if ( st->extl_brate >= SWB_TBE_2k8 ) + { + if ( st->codec_mode == MODE2 ) + { + idx_shb_fr_gain = hBWE_TD->idx_shb_fr_gain; + } + else + { + idx_shb_fr_gain = get_next_indice( st, NUM_BITS_SHB_ENER_SF ); + } + *Q_shb_ener_sf = usdequant( idx_shb_fr_gain, 0, 0.042f ); + *Q_shb_ener_sf = (float) pow( 10.0, *Q_shb_ener_sf ); + + for ( i = 0; i < 5; i++ ) + { + if ( st->codec_mode == MODE2 ) + { + idx_res_gs[i] = hBWE_TD->idx_res_gs[i]; + } + else + { + idx_res_gs[i] = get_next_indice( st, NUM_BITS_SHB_RES_GS ); + } + Q_shb_res_gshape[i] = usdequant( idx_res_gs[i], 0.125f, 0.125f ); + } + + if ( st->codec_mode == MODE2 ) + { + idx_mixFac = hBWE_TD->idx_mixFac; + } + else + { + idx_mixFac = get_next_indice( st, NUM_BITS_SHB_VF ); + } + *Q_mixFactors = usdequant( idx_mixFac, 0.125f, 0.125f ); + } + else + { + *Q_shb_ener_sf = 0; + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + idx_mixFac = get_next_indice( st, NUM_BITS_SHB_VF ); + *Q_mixFactors = usdequant( idx_mixFac, 0.0f, 1.0f / ( ( 1 << NUM_BITS_SHB_VF ) - 1 ) ); + } + else + { + *Q_mixFactors = 0; + } + set_f( Q_shb_res_gshape, 0, 5 ); + } + + if ( ( st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) && st->codec_mode == MODE1 ) + { + set_s( lsf_idx, 0, 5 ); + lsf_idx[0] = get_next_indice( st, 8 ); + grid_idx = 0; + m_idx = 0; + + mvr2r( swb_tbe_lsfvq_cbook_8b + lsf_idx[0] * LPC_SHB_ORDER, Q_lsf, LPC_SHB_ORDER ); + } + else if ( st->rf_flag == 0 && !( ( st->element_mode == EVS_MONO && st->total_brate == ACELP_9k60 ) || ( st->element_mode == EVS_MONO && ( st->total_brate == 0 ) && ( ( st->last_total_brate == ACELP_9k60 ) || ( st->last_total_brate == ACELP_13k20 && st->rf_flag_last ) ) ) ) ) + { + /* LSFs */ + if ( st->extl_brate == SWB_TBE_1k75 ) + { + /* read multi-stage LVQ quantizer */ + if ( nbits >= 19 ) + { + cb_stage = cb_LSF_BWE[0]; + } + else + { + cb_stage = cb_LSF_BWE[1]; + } + + set_zero( lsf_q, LPC_SHB_ORDER ); + + /* VQ part */ + num_bits_lvq = config_LSF_BWE[( NUM_BITS_SHB_MSLVQ - nbits ) * 3]; + Idx = get_next_indice( st, num_bits_lvq ); + v_add( lsf_q, cb_stage + Idx * 6, lsf_q, 6 ); + + /* MSLVQ part */ + num_bits_lvq = nbits - num_bits_lvq - config_LSF_BWE[( NUM_BITS_SHB_MSLVQ - nbits ) * 3 + 2]; + predictor_bits = config_LSF_BWE[( NUM_BITS_SHB_MSLVQ - nbits ) * 3 + 2]; + Idx_pred = 0; + + if ( num_bits_lvq == 16 ) + { + /* MSLVQ part */ + Idx_lvq = get_next_indice( st, num_bits_lvq - 1 ) + ( ( get_next_indice( st, 1 ) ) << 15 ); + deindex_lvq_SHB( Idx_lvq, out, num_bits_lvq, 0 ); + } + else + { + /* MSLVQ part */ + Idx_lvq = get_next_indice( st, num_bits_lvq ); + deindex_lvq_SHB( Idx_lvq, out, num_bits_lvq, ( nbits < 19 ) ); + } + + /* mvr2r( mean_lsf, Q_lsfs, LPC_SHB_ORDER ); */ + v_add( lsf_q, out, lsf_q, LATTICE_DIM ); /* quantized mean removed data for first 8 dim*/ + + /* predict last 2 components */ + if ( predictor_bits == 0 ) + { + lsf_q[LATTICE_DIM] = dotp( lsf_q, LastCoefPred_0bit, LATTICE_DIM ); + lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_0bit[LATTICE_DIM + 1], LATTICE_DIM ); + } + else + { + Idx_pred = get_next_indice( st, 1 ); + + lsf_q[LATTICE_DIM] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * Idx_pred], LATTICE_DIM ); + lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * Idx_pred + LATTICE_DIM + 1], LATTICE_DIM ); + } + + /* !!! TODO: read empty bits - should be removed */ + if ( nbits < NUM_BITS_SHB_MSLVQ ) + { + Idx_pred = get_next_indice( st, NUM_BITS_SHB_MSLVQ - nbits ); + } + /* !!! end empty bits */ + + v_add( SHB_LSF_mean, lsf_q, lsf_q, LPC_SHB_ORDER ); + v_sort( lsf_q, 0, LPC_SHB_ORDER - 1 ); + } + else + { + /* !!!! this purposely reverts the inclusion of extl_brate == SWB_TBE_1k75 into the logic - remove this comment when this macro is deleted !!!!! */ + if ( extl_brate == SWB_TBE_1k6 || extl_brate == FB_TBE_1k8 || extl_brate == SWB_TBE_2k8 || extl_brate == FB_TBE_3k0 ) + { + for ( i = 0; i < NUM_Q_LSF; i++ ) + { + if ( st->codec_mode == MODE2 ) + { + lsf_idx[i] = hBWE_TD->lsf_idx[i]; + } + else + { + lsf_idx[i] = get_next_indice( st, lsf_q_num_bits[i] ); + } + } + } + + Dequant_lower_LSF( lsf_idx, lsf_q ); + + if ( st->codec_mode == MODE2 ) + { + m_idx = hBWE_TD->m_idx; + grid_idx = hBWE_TD->grid_idx; + } + else + { + m_idx = get_next_indice( st, MIRROR_POINT_BITS ); + grid_idx = get_next_indice( st, NUM_LSF_GRID_BITS ); + } + + Dequant_mirror_point( lsf_q, m_idx, &m ); + + /* safety check in case of bit errors */ + if ( m > MAX_LSF ) + { + st->BER_detect = 1; + m = MAX_LSF; + } + + Map_higher_LSF( lsf_q, m, lsf_grid[grid_idx] ); + } + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + /* safety check in case of bit errors */ + if ( lsf_q[LPC_SHB_ORDER - 1 - i] > MAX_LSF ) + { + st->BER_detect = 1; + lsf_q[LPC_SHB_ORDER - 1 - i] = MAX_LSF; + } + Q_lsf[i] = 0.5f - lsf_q[LPC_SHB_ORDER - 1 - i]; + } + } + else + { + set_s( lsf_idx, 0, 5 ); + mvs2s( hBWE_TD->lsf_idx, lsf_idx, 5 ); + grid_idx = 0; + m_idx = 0; + mvr2r( swb_tbe_lsfvq_cbook_8b + lsf_idx[0] * LPC_SHB_ORDER, Q_lsf, LPC_SHB_ORDER ); + } + + space_lsfs( Q_lsf, LPC_SHB_ORDER ); + + /* Dequantize subgain indices */ + j = idxSubGain * NUM_SHB_SUBGAINS; + + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + Q_subgain[i] = (float) pow( 10.0, SHBCB_SubGain5bit[j++] ); + } + + for ( i = NUM_SHB_SUBFR - 1; i >= 0; i-- ) + { + Q_subgain[i] = Q_subgain[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; + } + + /* Frame gain */ + if ( st->extl_brate == SWB_TBE_1k75 ) + { + *Q_framegrain = usdequant( idxFrameGain, SHB_GAIN_QLOW_1k75, SHB_GAIN_QDELTA_1k75 ); + } + else + { + *Q_framegrain = usdequant( idxFrameGain, SHB_GAIN_QLOW, SHB_GAIN_QDELTA ); + } + + *Q_framegrain = (float) pow( 10.0, *Q_framegrain ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * fb_tbe_dec() + * + * FB TBE decoder, 14(resp. 15.5) - 20 kHz band decoding module + *-------------------------------------------------------------------*/ + +void fb_tbe_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const float fb_exc[], /* i : FB excitation from the SWB part */ + float *hb_synth, /* o : high-band synthesis */ + float *fb_synth_ref /* o : high-band synthesis 16-20 kHz */ +) +{ + int16_t i; + TD_BWE_DEC_HANDLE hBWE_TD; + float ratio = 0, fb_exc_energy = 0; + float fb_synth[L_FRAME48k]; + + hBWE_TD = st->hBWE_TD; + + /* decode FB slope information */ + if ( st->extl == FB_TBE && !st->bfi ) + { + if ( st->codec_mode == MODE2 ) + { + i = hBWE_TD->idxGain; + } + else + { + i = get_next_indice( st, 4 ); + } + ratio = (float) ( 1 << i ); + } + else if ( st->extl == FB_TBE && st->bfi ) + { + ratio = hBWE_TD->prev_fbbwe_ratio; + } + + fb_exc_energy = sum2_f( fb_exc, L_FRAME16k ); + + /* FB TBE synthesis */ + synthesise_fb_high_band( fb_exc, fb_synth, fb_exc_energy, ratio, st->L_frame, st->bfi, &( hBWE_TD->prev_fbbwe_ratio ), hBWE_TD->fbbwe_hpf_mem ); + + if ( st->element_mode >= IVAS_CPE_DFT && st->idchan == 0 ) + { + mvr2r( fb_synth, fb_synth_ref, L_FRAME48k ); + } + + /* add the fb_synth component to the hb_synth component */ + v_add( hb_synth, fb_synth, hb_synth, L_FRAME48k ); + + return; +} + + +/*---------------------------------------------------------------------* + * tbe_read_bitstream() + * + * Read TBE bitstream and populate the parameters for TD-BWE decoder. + *---------------------------------------------------------------------*/ + +void tbe_read_bitstream( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + int16_t i; + TD_BWE_DEC_HANDLE hBWE_TD; + + hBWE_TD = st->hBWE_TD; + + if ( ( st->rf_flag || st->total_brate == ACELP_9k60 ) && st->bwidth == WB ) + { + /* WB LSF */ + hBWE_TD->lsf_WB = get_next_indice( st, NUM_BITS_LBR_WB_LSF ); + + /* WB frame gain */ + hBWE_TD->gFrame_WB = get_next_indice( st, NUM_BITS_SHB_FrameGain_LBR_WB ); + } + else if ( st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_32k && ( st->bwidth == SWB || st->bwidth == FB ) ) + { + if ( st->rf_flag == 0 && st->total_brate > ACELP_9k60 ) + { + for ( i = 0; i < NUM_Q_LSF; i++ ) + { + hBWE_TD->lsf_idx[i] = get_next_indice( st, lsf_q_num_bits[i] ); + } + hBWE_TD->m_idx = get_next_indice( st, MIRROR_POINT_BITS ); + hBWE_TD->grid_idx = get_next_indice( st, NUM_LSF_GRID_BITS ); + } + else + { + hBWE_TD->lsf_idx[0] = get_next_indice( st, 8 ); + hBWE_TD->m_idx = 0; + hBWE_TD->grid_idx = 0; + } + + /* shape gains */ + hBWE_TD->idxSubGains = get_next_indice( st, NUM_BITS_SHB_SUBGAINS ); + + /* frame gain */ + hBWE_TD->idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FRAMEGAIN ); + + if ( st->total_brate >= ACELP_24k40 ) + { + /* sub frame energy*/ + hBWE_TD->idx_shb_fr_gain = get_next_indice( st, NUM_BITS_SHB_ENER_SF ); + + /* gain shapes residual */ + for ( i = 0; i < NB_SUBFR16k; i++ ) + { + hBWE_TD->idx_res_gs[i] = get_next_indice( st, NUM_BITS_SHB_RES_GS ); + } + + /* voicing factor */ + hBWE_TD->idx_mixFac = get_next_indice( st, NUM_BITS_SHB_VF ); + } + + if ( st->tec_tfa == 1 ) + { + st->tec_flag = get_next_indice( st, BITS_TEC ); + st->tfa_flag = get_next_indice( st, BITS_TFA ); + + if ( st->tfa_flag && st->tec_flag ) + { + st->tec_flag = 2; + st->tfa_flag = 0; + } + } + else + { + st->tec_flag = 0; + st->tfa_flag = 0; + } + } + + if ( st->bwidth == FB ) + { + hBWE_TD->idxGain = get_next_indice( st, 4 ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * GenTransition() + * + * Generate a highband transition signal from the gain shape overlap + * buffer to fill the gap caused by the delay alignment buffer when + * switching from TBE to IGF + *---------------------------------------------------------------------*/ + +void GenTransition( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + float *outputHB, /* o : synthesized HB transitions signal */ + const int32_t output_Fs, /* i : output sampling rate */ + const int16_t element_mode, /* i : element mode */ + const int16_t L_frame, /* i : ACELP frame length */ + const int16_t rf_flag, /* i : RF flag */ + const int32_t total_brate /* i : total bitrate */ +) +{ + int16_t i, length; + float syn_overlap_32k[2 * SHB_OVERLAP_LEN]; + + /* set targeted length of transition signal */ + length = 2 * NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); + + /* upsample overlap snippet */ + Interpolate_allpass_steep( hBWE_TD->syn_overlap, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, SHB_OVERLAP_LEN, syn_overlap_32k ); + + /* perform spectral flip and downmix with overlap snippet to match HB synth */ + if ( ( element_mode == EVS_MONO && ( rf_flag || total_brate == ACELP_9k60 ) ) || ( element_mode > EVS_MONO && L_frame == L_FRAME ) ) + { + flip_and_downmix_generic( syn_overlap_32k, syn_overlap_32k, 2 * SHB_OVERLAP_LEN, hBWE_TD->genSHBsynth_Hilbert_Mem, hBWE_TD->genSHBsynth_Hilbert_Mem + HILBERT_ORDER1, hBWE_TD->genSHBsynth_Hilbert_Mem + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), &( hBWE_TD->syn_dm_phase ) ); + } + else + { + for ( i = 0; i < 2 * SHB_OVERLAP_LEN; i++ ) + { + syn_overlap_32k[i] = ( ( i % 2 ) == 0 ) ? ( -syn_overlap_32k[i] ) : ( syn_overlap_32k[i] ); + } + } + + /* cross fade of overlap snippet and mirrored HB synth from previous frame */ + for ( i = 0; i < 2 * L_SHB_LAHEAD; i++ ) + { + outputHB[i] = window_shb_32k[i] * hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i] + window_shb_32k[2 * L_SHB_LAHEAD - 1 - i] * syn_overlap_32k[i]; + } + + /* fill transition signal with mirrored HB synth from previous frame to fully fill delay alignment buffer gap */ + for ( ; i < length; i++ ) + { + outputHB[i] = hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i]; + } + + if ( output_Fs == 48000 ) + { + interpolate_3_over_2_allpass( outputHB, length, outputHB, hBWE_TD->int_3_over_2_tbemem_dec ); + } + else if ( output_Fs == 16000 ) + { + Decimate_allpass_steep( outputHB, hBWE_TD->mem_resamp_HB_32k, L_FRAME32k, outputHB ); + } + + return; +} + +/*---------------------------------------------------------------------* + * GenTransition_WB() + * + * + *---------------------------------------------------------------------*/ + +void GenTransition_WB( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + float *outputHB, /* o : synthesized HB transitions signal */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + int16_t i, length; + float speech_buf_16k1[SHB_OVERLAP_LEN], speech_buf_16k2[2 * SHB_OVERLAP_LEN]; + float upsampled_synth[L_FRAME48k]; + + /* set targeted length of transition signal */ + length = 2 * NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); + + /* upsample overlap snippet */ + Interpolate_allpass_steep( hBWE_TD->syn_overlap, hBWE_TD->state_lsyn_filt_shb, SHB_OVERLAP_LEN / 2, speech_buf_16k1 ); + Interpolate_allpass_steep( speech_buf_16k1, hBWE_TD->state_lsyn_filt_dwn_shb, SHB_OVERLAP_LEN, speech_buf_16k2 ); + + /* perform spectral flip and downmix with overlap snippet to match HB synth */ + for ( i = 0; i < SHB_OVERLAP_LEN; i++ ) + { + speech_buf_16k2[i] = ( ( i % 2 ) == 0 ) ? ( -speech_buf_16k2[i] ) : ( speech_buf_16k2[i] ); + } + + /* cross fade of overlap snippet and mirrored HB synth from previous frame */ + for ( i = 0; i < L_SHB_LAHEAD; i++ ) + { + outputHB[i] = window_shb[i] * hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i] + window_shb[L_SHB_LAHEAD - 1 - i] * speech_buf_16k2[i]; + outputHB[i] *= 0.65f; + } + + /* fill transition signal with mirrored HB synth from previous frame to fully fill delay alignment buffer gap */ + for ( ; i < length; i++ ) + { + outputHB[i] = hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i]; + outputHB[i] *= 0.65f; + } + + /* upsampling if necessary */ + if ( output_Fs == 32000 ) + { + Interpolate_allpass_steep( outputHB, hBWE_TD->mem_resamp_HB, L_FRAME16k, upsampled_synth ); + mvr2r( upsampled_synth, outputHB, L_FRAME32k ); + } + else if ( output_Fs == 48000 ) + { + interpolate_3_over_1_allpass( outputHB, L_FRAME16k, upsampled_synth, hBWE_TD->mem_resamp_HB ); + mvr2r( upsampled_synth, outputHB, L_FRAME48k ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * void TBEreset_dec() + * + * + *---------------------------------------------------------------------*/ + +void TBEreset_dec( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + TD_BWE_DEC_HANDLE hBWE_TD; + + hBWE_TD = st->hBWE_TD; + + if ( st->last_core != ACELP_CORE ) + { + set_f( hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); + hBWE_TD->bwe_non_lin_prev_scale = 0.f; + } + if ( st->bwidth == WB ) + { + wb_tbe_extras_reset( hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3 ); + wb_tbe_extras_reset_synth( hBWE_TD->state_lsyn_filt_shb, hBWE_TD->state_lsyn_filt_dwn_shb, hBWE_TD->mem_resamp_HB ); + set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0, 7 ); + set_f( hBWE_TD->state_lpc_syn, 0, 10 ); + set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); + set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); + set_f( hBWE_TD->mem_csfilt, 0, 2 ); + } + else if ( st->bwidth == SWB || st->bwidth == FB ) + { + swb_tbe_reset( hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, hBWE_TD->syn_overlap, hBWE_TD->state_syn_shbexc, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), hBWE_TD->mem_stp_swb, &( hBWE_TD->gain_prec_swb ) ); + + set_f( hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); + set_f( hBWE_TD->int_3_over_2_tbemem_dec, 0.f, INTERP_3_2_MEM_LEN ); + set_f( hBWE_TD->mem_resamp_HB_32k, 0, 2 * ALLPASSSECTIONS_STEEP + 1 ); + hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + hBWE_TD->prev_mix_factor = 1.0f; + + swb_tbe_reset_synth( hBWE_TD->genSHBsynth_Hilbert_Mem, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); + + if ( st->bwidth == FB ) + { + if ( st->hBWE_FD != NULL ) + { + st->hBWE_FD->prev_fb_ener_adjust = 0.0f; + } + set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_synth( hBWE_TD->fbbwe_hpf_mem, &hBWE_TD->prev_fbbwe_ratio ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * td_bwe_dec_init() + * + * Initialize TD BWE state structure at the decoder + *-------------------------------------------------------------------*/ + +void td_bwe_dec_init( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + const int16_t extl, /* i : BWE extension layer */ + const int32_t output_Fs /* i : output sampling rate */ +) +{ + int16_t i; + + /* init. SHB buffers */; + set_f( hBWE_TD->old_bwe_exc, 0.0f, ( PIT16k_MAX * 2 ) ); + hBWE_TD->bwe_seed[0] = 23; /* 1; */ + hBWE_TD->bwe_seed[1] = 59; /* 10000; */ + set_f( hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); + hBWE_TD->bwe_non_lin_prev_scale = 0; + + set_f( hBWE_TD->genSHBsynth_Hilbert_Mem, 0.0f, HILBERT_MEM_SIZE ); + set_f( hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); + + hBWE_TD->syn_dm_phase = 0; + hBWE_TD->prev_fbbwe_ratio = 1.0f; + hBWE_TD->prev_wb_bwe_frame_pow = 0.001f; + hBWE_TD->prev_swb_bwe_frame_pow = 0.001f; + + /* reset SHB buffers */ + ResetSHBbuffer_Dec( hBWE_TD, extl ); + + if ( output_Fs == 48000 ) + { + set_f( hBWE_TD->fbbwe_hpf_mem[0], 0, 4 ); + set_f( hBWE_TD->fbbwe_hpf_mem[1], 0, 4 ); + set_f( hBWE_TD->fbbwe_hpf_mem[2], 0, 4 ); + set_f( hBWE_TD->fbbwe_hpf_mem[3], 0, 4 ); + } + + set_f( hBWE_TD->mem_resamp_HB, 0, INTERP_3_1_MEM_LEN ); + set_f( hBWE_TD->mem_resamp_HB_32k, 0, 2 * ALLPASSSECTIONS_STEEP + 1 ); + + hBWE_TD->tilt_mem = 0.0f; + set_f( hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); + hBWE_TD->prev_tilt_para = 0.0f; + set_f( hBWE_TD->cur_sub_Aq, 0.0f, M + 1 ); + set_f( hBWE_TD->int_3_over_2_tbemem_dec, 0.0f, INTERP_3_2_MEM_LEN ); + + /* TD BWE post-processing */ + hBWE_TD->ptr_mem_stp_swb = hBWE_TD->mem_stp_swb + LPC_SHB_ORDER - 1; + set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->swb_lsp_prev_interp[i] = (float) cos( (float) i * EVS_PI / (float) 10.0f ); + } + + hBWE_TD->prev1_shb_ener_sf = 1.0f; + hBWE_TD->prev2_shb_ener_sf = 1.0f; + hBWE_TD->prev3_shb_ener_sf = 1.0f; + hBWE_TD->prev_res_shb_gshape = 0.125f; + hBWE_TD->prev_mixFactors = 0.5f; + hBWE_TD->prev_GainShape = 0.0f; + set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + hBWE_TD->fb_tbe_demph = 0.0f; + + set_f( hBWE_TD->old_hb_synth, 0, L_FRAME48k ); + + hBWE_TD->GainFrame_prevfrm = 0.0f; + + hBWE_TD->prev_ener = 0.0f; + + return; +} diff --git a/lib_dec/syn_outp.c b/lib_dec/syn_outp.c new file mode 100644 index 0000000000..cff7d72374 --- /dev/null +++ b/lib_dec/syn_outp.c @@ -0,0 +1,138 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * syn_output() + * + * Output synthesis signal with compensation for saturation + * returns number of clipped samples + *-------------------------------------------------------------------*/ + +/*! r: number of clipped samples */ +uint32_t syn_output( + float *synth, /* i/o: float synthesis signal */ + const int16_t output_frame, /* i : output frame length */ + int16_t *synth_out /* o : integer 16 bits synthesis signal */ +) +{ + /*-----------------------------------------------------------------* + * float to integer conversion with saturation control + *-----------------------------------------------------------------*/ + + /* integer conversion */ + return mvr2s( synth, synth_out, output_frame ); +} + + +/*-------------------------------------------------------------------* + * AGC_dec() + * + * In-place saturation control (Automatic Gain Control) + *-------------------------------------------------------------------*/ + +void AGC_dec( + float x[], /* i/o: input/output vector */ + float mem[], /* i/o: mem[2] should be init to [0,0] */ + const int16_t n /* i : vector size */ +) +{ + int16_t i; + float fac, prev, tmp, frame_fac, max_val; + + /*-----------------------------------------------------------------* + * calculate AGC factor to avoid saturation + *-----------------------------------------------------------------*/ + + max_val = 0.0f; + + for ( i = 0; i < n; i++ ) + { + tmp = (float) fabs( x[i] ); + if ( tmp > max_val ) + { + max_val = tmp; + } + } + + frame_fac = 0.0f; + if ( max_val > 30000.0f ) + { + frame_fac = 0.5f - ( 15000.0f / max_val ); + } + + fac = mem[0]; + prev = mem[1]; + + /*-----------------------------------------------------------------* + * AGC + *-----------------------------------------------------------------*/ + + for ( i = 0; i < n; i++ ) + { + /* update AGC factor (slowly) */ + fac = 0.99f * fac + 0.01f * frame_fac; + + /* convert float to integer with AGC */ + tmp = ( 1.0f - fac ) * x[i] - fac * prev; + prev = x[i]; + + if ( tmp > MAX16B_FLT ) + { + tmp = MAX16B_FLT; + } + else if ( tmp < MIN16B_FLT ) + { + tmp = MIN16B_FLT; + } + + x[i] = (int16_t) floor( tmp + 0.5f ); + } + + mem[0] = fac; + mem[1] = prev; + + return; +} diff --git a/lib_dec/tcq_core_dec.c b/lib_dec/tcq_core_dec.c new file mode 100644 index 0000000000..a7050f9de0 --- /dev/null +++ b/lib_dec/tcq_core_dec.c @@ -0,0 +1,476 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * tcq_core_LR_enc() + * + * Main Generic Audio Decoder Routine for LR-MDCT + *---------------------------------------------------------------------*/ + +void tcq_core_LR_dec( + Decoder_State *st, + int32_t *inp_vector, + const int16_t bit_budget, + const int16_t BANDS, + const int16_t *band_start, + const int16_t *band_width, + Word32 *Rk_fx, + int16_t *npulses, + int16_t *k_sort, + const int16_t *p2a_flags, + const int16_t p2a_bands, + const int16_t *last_bitalloc, + const int16_t input_frame, + const int16_t adjustFlag, + const int16_t *is_transient ) +{ + int16_t i, j, k; + float Rk_sort[NB_SFM]; + int16_t flag_wbnb = 0; + int16_t USQ_TCQ[NB_SFM]; /* TCQ is selected by default*/ + int16_t nb_bytes, pulsesnum, nz; + int32_t positions[L_FRAME32k]; + int16_t k_num[2]; + ARCODEC ardec, *pardec; + TCQ_BITSTREAM bs, *pbs; + + int16_t nzbands = 0; + int16_t lsbtcq_bits = TCQ_AMP; + int16_t tcq_arbits = 2; + + /* LSB TCQ variables*/ + int16_t dpath[280]; + int16_t bcount = 0; + float mbuffer[560]; + + Word32 leftbits = 0; + Word32 sepbits = 0; + Word32 divider = 0; + + /*Word32 Rk_fx[NB_SFM];*/ /* Q16 */ + Word32 Rk_sort_fx[NB_SFM]; /* Q16 */ + Word32 bsub_fx = 0; + + Word16 nzb = 0; + Word32 delta_fx; + Word32 surplus_fx; + Word32 bit_surplus_fx[2]; + + /* initialization */ + set_s( dpath, 0, 280 ); + set_f( mbuffer, 0.f, 560 ); + set_f( Rk_sort, 0.f, NB_SFM ); + set_s( USQ_TCQ, 0, NB_SFM ); + set_l( positions, 0, L_FRAME32k ); + + if ( input_frame <= L_FRAME16k && adjustFlag == 0 && *is_transient == 0 ) + { + flag_wbnb = 1; + lsbtcq_bits = 0; + tcq_arbits = 0; + } + + pardec = &ardec; + pbs = &bs; + pbs->curPos = 7; + pbs->numbits = 0; + pbs->numByte = 0; + + /* Bits distribution analysis*/ + for ( i = 0; i < BANDS; i++ ) + { + if ( L_sub( ar_div( Rk_fx[i], band_width[i] ), 49152 ) >= 0 ) + { + /* USQ used for high importance bands*/ + USQ_TCQ[i] = 1; + } + else + { + /* TCQ used for usual bands*/ + USQ_TCQ[i] = 0; + } + if ( Rk_fx[i] > 0.0f ) + { + nzbands++; + } + } + + for ( j = 0; j < BANDS; j++ ) + { + if ( Rk_fx[j] > 0.0f ) + { + nzb++; + } + } + +#define WMC_TOOL_MAN + bsub_fx = L_shl( L_add( tcq_arbits, lsbtcq_bits ), 16 ); + IF( bsub_fx > 0 ) + { + bsub_fx = L_add( bsub_fx, 2048 ); + } + for ( j = BANDS - 1; j >= 0; j-- ) + { + if ( Rk_fx[j] > 0 ) + { + Rk_fx[j] = L_sub( Rk_fx[j], ar_div( bsub_fx, nzb ) ); + if ( Rk_fx[j] < 0 ) + { + bsub_fx = L_sub( bsub_fx, L_add( ar_div( bsub_fx, nzb ), Rk_fx[j] ) ); + Rk_fx[j] = 0; + } + else + { + bsub_fx = L_sub( bsub_fx, ar_div( bsub_fx, nzb ) ); + } + nzb = sub( nzb, 1 ); + } + } + + srt_vec_ind_fx( Rk_fx, Rk_sort_fx, k_sort, BANDS ); +#undef WMC_TOOL_MAN + + /*read the bits*/ + nb_bytes = bit_budget >> 3; + k = bit_budget - ( nb_bytes << 3 ); + for ( i = 0; i < nb_bytes; i++ ) + { + pbs->buf[i] = (uint8_t) get_next_indice( st, 8 ); + } + + if ( k > 0 ) + { + pbs->buf[nb_bytes] = (uint8_t) get_next_indice( st, k ); + pbs->buf[nb_bytes] <<= ( 8 - k ); + i++; + nb_bytes++; + } + /* set two more bytes, which are used to flush the arithmetic coder, to 0 + -> this avoids reading of uninitialized memory */ + nb_bytes = min( nb_bytes + 2, MAX_SIZEBUF_PBITSTREAM ); + for ( ; i < nb_bytes; i++ ) + { + pbs->buf[i] = 0; + } + + pbs->maxBytes = nb_bytes; + + ar_decoder_start( pardec, pbs ); + + delta_fx = 0; + surplus_fx = 0; + + if ( input_frame <= L_FRAME16k && adjustFlag == 0 && *is_transient == 0 ) + { + surplus_fx = -131072; + + bit_allocation_second_fx( Rk_fx, Rk_sort_fx, BANDS, band_width, k_sort, k_num, p2a_flags, p2a_bands, last_bitalloc, input_frame ); + + nzbands = 0; + for ( j = 0; j < BANDS; j++ ) + { + if ( sub( j, k_num[0] ) == 0 || sub( j, k_num[1] ) == 0 ) + { + sepbits = L_add( sepbits, Rk_fx[k_sort[j]] ); + } + else + { + leftbits = L_add( leftbits, Rk_fx[k_sort[j]] ); + if ( Rk_fx[k_sort[j]] > 0 ) + { + nzbands = add( nzbands, 1 ); + } + } + } + + for ( k = 0; k < BANDS; k++ ) + { + if ( k != k_num[0] && k != k_num[1] ) + { + if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) + { + /* When number of bits per band is less than + arithmetic bits overhead, this band is not encoded. + It may happens when the actual number of bits per + band is near same to estimated number of bits, for + most bands (very unprobable but possible) */ + if ( L_add( Rk_fx[k_sort[k]], delta_fx ) < 0 ) + { + pulsesnum = 0; + for ( i = 0; i < band_width[k_sort[k]]; i++ ) + { + inp_vector[band_start[k_sort[k]] + i] = 0; + } + if ( surplus_fx != 0 ) + { +#define WMC_TOOL_MAN + surplus_fx = L_add( Rk_fx[k_sort[k]], surplus_fx ); + surplus_fx = L_add( delta_fx, surplus_fx ); +#undef WMC_TOOL_MAN + } + } + else + { + /*get number of pulses */ + pulsesnum = GetScale_fx( band_width[k_sort[k]], L_add( Rk_fx[k_sort[k]], delta_fx ), &surplus_fx ); + + leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); + + decode_position_ari_fx( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); + decode_mangitude_tcq_fx( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]], &surplus_fx ); + decode_signs_fx( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); + } + nzbands--; + } + else if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 1 ) + { + /* When number of bits per band is less than + arithmetic bits overhead, this band is not encoded. + It may happens when the actual number of bits per + band is near same to estimated number of bits, for + most bands (very unprobable but possible) */ + if ( L_add( Rk_fx[k_sort[k]], delta_fx ) < 0 ) + { + pulsesnum = 0; + for ( i = 0; i < band_width[k_sort[k]]; i++ ) + { + inp_vector[band_start[k_sort[k]] + i] = 0; + } + if ( surplus_fx != 0 ) + { +#define WMC_TOOL_MAN + surplus_fx = L_add( Rk_fx[k_sort[k]], surplus_fx ); + surplus_fx = L_add( delta_fx, surplus_fx ); +#undef WMC_TOOL_MAN + } + } + else + { + + pulsesnum = GetScale_fx( band_width[k_sort[k]], L_add( Rk_fx[k_sort[k]], delta_fx ), &surplus_fx ); + + leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); + + decode_position_ari_fx( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); + decode_magnitude_usq_fx( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]] ); + decode_signs_fx( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); + } + nzbands--; + } + else + { + pulsesnum = 0; + for ( i = 0; i < band_width[k_sort[k]]; i++ ) + { + inp_vector[band_start[k_sort[k]] + i] = 0; + } + } + + npulses[k_sort[k]] = pulsesnum; + + if ( Rk_fx[k_sort[k]] > 0 && surplus_fx < 0 ) + { +#define WMC_TOOL_MAN + IF( nzbands <= 1 ) + { + divider = 0; + } + ELSE + { + divider = 2; + } + + IF( L_add( L_add( surplus_fx, sepbits ), ar_div( leftbits, divider ) ) < 0 ) + { + /* Overflow possible => start to distribute negative surplus */ + delta_fx = ar_div( surplus_fx + sepbits, nzbands ); + } + else + { + delta_fx = 0; + } + surplus_fx = L_sub( surplus_fx, delta_fx ); +#undef WMC_TOOL_MAN + } + else + { + delta_fx = 0; + } + } + } + +#define WMC_TOOL_MAN + if ( ( L_sub( surplus_fx, 524288 ) > 0 && sub( input_frame, L_FRAME8k ) == 0 ) || ( L_sub( surplus_fx, 786432 ) > 0 && sub( input_frame, L_FRAME16k ) == 0 ) ) + { + bit_surplus_fx[0] = Mult_32_16( surplus_fx, 24576 ); /* Q16 */ + bit_surplus_fx[1] = Mult_32_16( surplus_fx, 8192 ); /* Q16 */ + } +#undef WMC_TOOL_MAN + else + { + bit_surplus_fx[0] = surplus_fx; + bit_surplus_fx[1] = 0; + } + + for ( k = 0; k < BANDS; k++ ) + { + for ( j = 0; j < 2; j++ ) + { + if ( k == k_num[j] ) + { +#define WMC_TOOL_MAN + Rk_fx[k_sort[k]] = L_add( Rk_fx[k_sort[k]], bit_surplus_fx[j] ); +#undef WMC_TOOL_MAN + if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) + { + /* get number of pulses */ + pulsesnum = GetScale_fx( band_width[k_sort[k]], Rk_fx[k_sort[k]], &surplus_fx ); + + decode_position_ari_fx( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); + /* decode tcq magniitude and update the surplus bits. */ + decode_mangitude_tcq_fx( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]], &surplus_fx ); + decode_signs_fx( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); + } + else if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 1 ) + { + pulsesnum = GetScale_fx( band_width[k_sort[k]], Rk_fx[k_sort[k]], &surplus_fx ); + + decode_position_ari_fx( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); + /* decode usq magnitude and don't need to update surplus bits */ + decode_magnitude_usq_fx( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]] ); + decode_signs_fx( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); + } + else + { + pulsesnum = 0; + for ( i = 0; i < band_width[k_sort[k]]; i++ ) + { + inp_vector[band_start[k_sort[k]] + i] = 0; + } + } + npulses[k_sort[k]] = pulsesnum; + } + } + } + } + else + { + for ( k = 0; k < BANDS; k++ ) + { + if ( Rk_fx[k_sort[k]] > 0 ) + { + pulsesnum = GetScale_fx( band_width[k_sort[k]], Rk_fx[k_sort[k]] + delta_fx, &surplus_fx ); + + decode_position_ari_fx( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); + + /*decode usq magnitude and don't need to update surplus bits*/ + decode_magnitude_usq_fx( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]] ); + decode_signs_fx( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); + +#define WMC_TOOL_MAN + nzbands = sub( nzbands, 1 ); +#undef WMC_TOOL_MAN + } + else + { + pulsesnum = 0; + for ( i = 0; i < band_width[k_sort[k]]; i++ ) + { + inp_vector[band_start[k_sort[k]] + i] = 0; + } + } + + npulses[k_sort[k]] = pulsesnum; + + /* surplus distribution */ + if ( surplus_fx > 0 && nzbands > 0 ) + { + delta_fx = ar_div( surplus_fx, nzbands ); + surplus_fx = L_sub( surplus_fx, delta_fx ); + } + } + } + /* Load TCQ path from bitstream */ + LoadTCQdata( pardec, dpath, lsbtcq_bits ); + + TCQLSBdec( dpath, mbuffer, 2 * lsbtcq_bits ); + + ar_decoder_done( pardec ); + + /* Restore TCQ */ + if ( !flag_wbnb ) + { + for ( k = 0; k < BANDS; k++ ) + { + if ( Rk_fx[k_sort[k]] > 0 ) + { + RestoreTCQdec( &inp_vector[band_start[k_sort[k]]], band_width[k_sort[k]], &bcount, mbuffer ); + } + } + } + else + { + for ( k = 0; k < BANDS; k++ ) + { + if ( Rk_fx[k_sort[k]] > 0 && k != k_num[0] && k != k_num[1] ) + { + RestoreTCQdec( &inp_vector[band_start[k_sort[k]]], band_width[k_sort[k]], &bcount, mbuffer ); + } + } + for ( k = 0; k < BANDS; k++ ) + { + if ( Rk_fx[k_sort[k]] > 0 && ( k == k_num[0] || k == k_num[1] ) ) + { + RestoreTCQdec( &inp_vector[band_start[k_sort[k]]], band_width[k_sort[k]], &bcount, mbuffer ); + } + } + } + + + return; +} diff --git a/lib_dec/tcx_utils_dec.c b/lib_dec/tcx_utils_dec.c new file mode 100644 index 0000000000..f817c61e03 --- /dev/null +++ b/lib_dec/tcx_utils_dec.c @@ -0,0 +1,303 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------- + * tcx_decoder_memory_update() + * + * + *--------------------------------------------------------------*/ + +void tcx_decoder_memory_update( + Decoder_State *st, /* i/o: decoder memory state */ + const float *xn_buf, /* i/o: mdct output buffer used also as temporary buffer */ + float *synthout, /* o : synth */ + const float *A /* i : Quantized LPC coefficients */ +) +{ + int16_t L_frame_glob; + float tmp; + float *synth; + float buf[1 + M + L_FRAME_PLUS]; + float preemph_f = st->preemph_fac; + + L_frame_glob = st->L_frame; + + /*TCX must be aligned with ACELP*/ + assert( st->hTcxCfg->lfacNext <= 0 ); + + /* Output synth */ + mvr2r( xn_buf, synthout, L_frame_glob ); + + /* Update synth */ + synth = buf + 1 + M; + mvr2r( st->syn, buf, 1 + M ); + mvr2r( xn_buf, synth, L_frame_glob ); + mvr2r( synth + L_frame_glob - M - 1, st->syn, 1 + M ); + + /* Emphasis of synth -> synth_pe */ + tmp = synth[-M - 1]; + preemph( synth - M, preemph_f, M + L_frame_glob, &tmp ); + + mvr2r( synth + L_frame_glob - M, st->mem_syn2, M ); + mvr2r( synth + L_frame_glob - L_SYN_MEM, st->mem_syn_r, L_SYN_MEM ); + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + if ( !st->tcxonly || L_frame_glob == L_FRAME16k ) + { + /* Update excitation */ + assert( L_frame_glob < L_EXC_MEM_DEC ); + mvr2r( st->old_exc + ( L_frame_glob ), st->old_exc, L_EXC_MEM_DEC - ( L_frame_glob ) ); + residu( A, M, synth, st->old_exc + L_EXC_MEM_DEC - ( L_frame_glob ), ( L_frame_glob ) ); + } + + /* Update old_Aq */ + mvr2r( A, st->old_Aq_12_8, M + 1 ); + } + + return; +} + +/*--------------------------------------------------------------- + * tcx_ari_res_invQ_spec() + * + * Residual Quantization + *--------------------------------------------------------------*/ + +/*! r: number of bits used (including "bits") */ +int16_t tcx_ari_res_invQ_spec( + float x_Q[], /* i/o: quantized spectrum */ + const int16_t L_frame, /* i : number of lines */ + const int16_t prm[], /* i : bitstream */ + int16_t target_bits, /* i : number of bits available */ + int16_t bits, /* i : number of bits used so far */ + const float deadzone, /* i : quantizer deadzone */ + const float x_fac[] /* i : spectrum post-quantization factors */ +) +{ + int16_t i, j, num_zeros; + int16_t zeros[L_FRAME_PLUS]; + float fac_m, fac_p, sign; + + /* Limit the number of residual bits */ + target_bits = min( target_bits, NPRM_RESQ ); + + /* Requantize the spectrum line-by-line */ + fac_m = deadzone * 0.5f; + num_zeros = 0; + for ( i = 0; i < L_frame; ++i ) + { + if ( bits >= target_bits ) + { + /* no bits left */ + break; + } + if ( x_Q[i] != 0 ) + { + if ( x_Q[i] > 0 ) + { + sign = x_fac[i]; + } + else + { + sign = -x_fac[i]; + } + + x_Q[i] += sign * ( prm[bits++] * 0.5f - fac_m ); + } + else + { + zeros[num_zeros++] = i; + } + } + + /* Requantize zeroed-lines of the spectrum */ + fac_p = ( 1.0f - deadzone ) * 0.33f * 2.0f; + --target_bits; /* reserve 1 bit for the check below */ + for ( j = 0; j < num_zeros; ++j ) + { + if ( bits >= target_bits ) + { + /* 1 or 0 bits left */ + break; + } + + i = zeros[j]; + + if ( prm[bits++] != 0 ) + { + x_Q[i] = ( 2 * prm[bits++] - 1 ) * fac_p * x_fac[i]; + } + } + + return bits; +} + + +/*--------------------------------------------------------------- + * tcx_res_invQ_gain() + * + * + *--------------------------------------------------------------*/ + +int16_t tcx_res_invQ_gain( + float *gain_tcx, + const int16_t *prm, + const int16_t resQBits ) +{ + int16_t bits; + + /*Refine the gain quantization*/ + for ( bits = 0; bits < min( resQBits, TCX_RES_Q_BITS_GAIN ); bits++ ) + { + if ( prm[bits] == 0 ) + { + *gain_tcx = ( *gain_tcx ) * gain_corr_inv_fac[bits]; + } + else + { + *gain_tcx = ( *gain_tcx ) * gain_corr_fac[bits]; + } + } + + return ( bits ); +} + + +/*--------------------------------------------------------------- + * tcx_res_invQ_spec() + * + * + *--------------------------------------------------------------*/ + +int16_t tcx_res_invQ_spec( + float *x, + const int16_t L_frame, + const int16_t *prm, + int16_t resQBits, + int16_t bits, + const float sq_round, + const float lf_deemph_factors[] ) +{ + int16_t i; + float fac_m, fac_p, thres; + + /* Limit the number of residual bits */ + resQBits = min( resQBits, NPRM_RESQ ); + + /* Requantize the spectrum line-by-line */ + fac_p = 0.5f - sq_round * 0.5f; + fac_m = sq_round * 0.5f; + if ( !lf_deemph_factors ) + { + for ( i = 0; ( i < L_frame ) && ( bits < resQBits ); i++ ) + { + /* bits < resQBits */ + if ( x[i] != 0.0f ) + { + if ( prm[bits++] == 0 ) + { + x[i] -= ( x[i] > 0.0f ) ? fac_m : fac_p; + } + else + { + x[i] += ( x[i] > 0.0f ) ? fac_p : fac_m; + } + } + } + resQBits--; /* Quantize zeroed lines of the spectrum */ + for ( i = 0; ( i < L_frame ) && ( bits < resQBits ); i++ ) + { + if ( x[i] == 0.0f ) + { + if ( prm[bits++] != 0 ) + { + x[i] = ( prm[bits++] * 2.64f - 1.32f ) * fac_p; + } + } + } + + return bits; + } + for ( i = 0; i < L_frame; i++ ) + { + if ( bits >= resQBits ) + { + break; + } + if ( x[i] != 0.f && lf_deemph_factors[i] > 0.5f ) + { + if ( prm[bits++] == 0 ) + { + x[i] -= ( x[i] > 0 ) ? fac_m * lf_deemph_factors[i] : fac_p * lf_deemph_factors[i]; + } + else + { + x[i] += ( x[i] > 0 ) ? fac_p * lf_deemph_factors[i] : fac_m * lf_deemph_factors[i]; + } + } + } + + /*Quantize zeroed-line of the spectrum*/ + for ( i = 0; i < L_frame; i++ ) + { + if ( bits >= ( resQBits - 1 ) ) /*need at least two bits*/ + { + break; + } + if ( x[i] == 0.f && lf_deemph_factors[i] > 0.5f ) + { + if ( prm[bits++] == 1 ) + { + thres = ( 1 - sq_round ) * 0.66f * lf_deemph_factors[i]; + x[i] = ( prm[bits++] * 2.f - 1.f ) * thres; + } + } + } + + return bits; +} diff --git a/lib_dec/tns_base_dec.c b/lib_dec/tns_base_dec.c new file mode 100644 index 0000000000..b7d977c84f --- /dev/null +++ b/lib_dec/tns_base_dec.c @@ -0,0 +1,143 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "stat_com.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * ReadTnsData() + * + * + *---------------------------------------------------------------------*/ + +void ReadTnsData( + STnsConfig const *pTnsConfig, + Decoder_State *st, + int16_t *pnBits, + int16_t *stream, + int16_t *pnSize ) +{ + int16_t start_bit_pos; + + start_bit_pos = st->next_bit_pos; + if ( pTnsConfig->nMaxFilters > 1 ) + { + if ( pTnsConfig->allowTnsOnWhite ) + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + ReadFromBitstream( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, st, &stream, pnSize ); + } + else + { + ReadFromBitstream( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, st, &stream, pnSize ); + } + } + else + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + ReadFromBitstream( &tnsEnabledSWBTCX10BitMap, 1, st, &stream, pnSize ); + } + else + { + ReadFromBitstream( &tnsEnabledSWBTCX20BitMap, 1, st, &stream, pnSize ); + } + } + } + else + { + ReadFromBitstream( &tnsEnabledWBTCX20BitMap, 1, st, &stream, pnSize ); + } + + *pnBits = st->next_bit_pos - start_bit_pos; + + return; +} + + +/*---------------------------------------------------------------------* + * DecodeTnsData() + * + * + *---------------------------------------------------------------------*/ + +int16_t DecodeTnsData( + STnsConfig const *pTnsConfig, + const int16_t *stream, + int16_t *pnSize, + STnsData *pTnsData ) +{ + ResetTnsData( pTnsData ); + + if ( pTnsConfig->nMaxFilters > 1 ) + { + if ( pTnsConfig->allowTnsOnWhite ) + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + SetParameters( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, pTnsData, &stream, pnSize ); + } + else + { + SetParameters( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, pTnsData, &stream, pnSize ); + } + } + else + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + SetParameters( &tnsEnabledSWBTCX10BitMap, 1, pTnsData, &stream, pnSize ); + } + else + { + SetParameters( &tnsEnabledSWBTCX20BitMap, 1, pTnsData, &stream, pnSize ); + } + } + } + else + { + SetParameters( &tnsEnabledWBTCX20BitMap, 1, pTnsData, &stream, pnSize ); + } + + return ( pTnsData->nFilters > 0 ) ? TRUE : FALSE; +} diff --git a/lib_dec/tonalMDCTconcealment.c b/lib_dec/tonalMDCTconcealment.c new file mode 100644 index 0000000000..b43f85b8f9 --- /dev/null +++ b/lib_dec/tonalMDCTconcealment.c @@ -0,0 +1,1115 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#define _USE_MATH_DEFINES + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + + +/*******************************************************/ +/*-------------- public functions -------------------- */ +/*******************************************************/ + +ivas_error TonalMDCTConceal_Init( + TonalMDCTConcealPtr hTonalMDCTConc, + const uint16_t nSamples, + const uint16_t nSamplesCore, + const uint16_t nScaleFactors, + TCX_CONFIG_HANDLE hTcxCfg ) +{ + if ( nSamples > L_FRAME_MAX || nScaleFactors > FDNS_NPTS ) + { + assert( nSamples <= L_FRAME_MAX ); + assert( nScaleFactors <= FDNS_NPTS ); + return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "TonalMDCT FEC: Number of samples larger than max. block size\n" ) ); + } + assert( ( hTonalMDCTConc->nScaleFactors == nScaleFactors ) || ( hTonalMDCTConc->nSamples != nSamples ) ); /* If nSamples doesn't change then also nScaleFactors must stay the same */ + + hTonalMDCTConc->tcx_cfg = hTcxCfg; + hTonalMDCTConc->lastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[0]; + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; + hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; + hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; + hTonalMDCTConc->lastBlockData.blockIsValid = 0; + hTonalMDCTConc->secondLastBlockData.blockIsValid = 0; + hTonalMDCTConc->nSamples = 0; + hTonalMDCTConc->nScaleFactors = 0; + + hTonalMDCTConc->lastBlockData.blockIsConcealed = 0; + hTonalMDCTConc->secondLastBlockData.blockIsConcealed = 0; + hTonalMDCTConc->pTCI = (TonalComponentsInfo *) hTonalMDCTConc->timeDataBuffer; + + hTonalMDCTConc->lastPitchLag = 0; + + if ( hTonalMDCTConc->nSamples != nSamples ) + { + hTonalMDCTConc->secondLastBlockData.blockIsValid = 0; + hTonalMDCTConc->lastBlockData.blockIsValid = 0; + } + hTonalMDCTConc->nSamples = nSamples; + hTonalMDCTConc->nSamplesCore = nSamplesCore; + hTonalMDCTConc->nScaleFactors = nScaleFactors; + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + set_zero( hTonalMDCTConc->scaleFactorsBackground, FDNS_NPTS ); + PsychoacousticParameters_Init( INT_FS_16k, L_FRAME16k, 64, 1, 1, &hTonalMDCTConc->psychParamsTCX20 ); + PsychoacousticParameters_Init( INT_FS_16k, L_FRAME16k / 2, 64, 0, 1, &hTonalMDCTConc->psychParamsTCX10 ); + hTonalMDCTConc->psychParams = NULL; + + hTonalMDCTConc->last_block_nrg = 0.0f; + hTonalMDCTConc->curr_noise_nrg = 0.0f; +#endif + + /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when + new time samples are stored in lastPcmOut */ + /* just the second half of the second last pcm output is needed */ + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * min( L_FRAME_MAX, nSamples ) ) / 2]; + hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - min( L_FRAME_MAX, nSamples )]; + + /* If the second last frame was lost and concealed with tonal PLC, we + reuse saved TonalComponentsInfo and don't update pcm buffers */ + assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut - hTonalMDCTConc->timeDataBuffer ) * sizeof( hTonalMDCTConc->timeDataBuffer[0] ) ); + + return IVAS_ERR_OK; +} + + +void TonalMDCTConceal_SaveFreqSignal( + TonalMDCTConcealPtr hTonalMDCTConc, + const float *mdctSpectrum, + const uint16_t nNewSamples, + const uint16_t nNewSamplesCore, + const float *scaleFactors +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + , + const int16_t infoIGFStartLine +#endif +) +{ + float *temp; + int16_t nOldSamples; + + assert( nNewSamples > 0 && nNewSamples <= 2 * L_FRAME_MAX ); + + /* Avoid overwriting hTonalMDCTConc->secondLastPowerSpectrum stored in spectralData, + because it is needed if the second last and the current frame are lost + and concealed using the Tonal MDCT PLC */ + if ( !hTonalMDCTConc->lastBlockData.tonalConcealmentActive || ( hTonalMDCTConc->lastBlockData.nSamples != nNewSamples ) ) + { + if ( nNewSamples <= L_FRAME_MAX ) + { + /* Shift the buffers */ + temp = hTonalMDCTConc->secondLastBlockData.spectralData; /* Save the pointer */ + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->lastBlockData.spectralData; + hTonalMDCTConc->lastBlockData.spectralData = temp; + temp = hTonalMDCTConc->secondLastBlockData.scaleFactors; + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->lastBlockData.scaleFactors; + hTonalMDCTConc->lastBlockData.scaleFactors = temp; + } + else + { + /* Order the buffers so that even transition frame can fit in if written into the first buffer */ + hTonalMDCTConc->lastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[0]; + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; + hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; + } + nOldSamples = hTonalMDCTConc->lastBlockData.nSamples; + hTonalMDCTConc->lastBlockData.nSamples = nNewSamples; + hTonalMDCTConc->secondLastBlockData.nSamples = nOldSamples; + nOldSamples = hTonalMDCTConc->lastBlockData.nSamplesCore; + hTonalMDCTConc->lastBlockData.nSamplesCore = nNewSamplesCore; + hTonalMDCTConc->secondLastBlockData.nSamplesCore = nOldSamples; + } + + if ( ( nNewSamples > 0 ) && ( nNewSamples <= 2 * L_FRAME_MAX ) ) + { + /* Store new data */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + int16_t i; + + hTonalMDCTConc->last_block_nrg = 0.0f; + for ( i = 0; i < infoIGFStartLine; i++ ) + { + hTonalMDCTConc->lastBlockData.spectralData[i] = mdctSpectrum[i]; + hTonalMDCTConc->last_block_nrg += mdctSpectrum[i] * mdctSpectrum[i]; + } + for ( ; i < nNewSamples; i++ ) + { + hTonalMDCTConc->lastBlockData.spectralData[i] = mdctSpectrum[i]; + } +#else + mvr2r( mdctSpectrum, hTonalMDCTConc->lastBlockData.spectralData, nNewSamples ); +#endif + + mvr2r( scaleFactors, hTonalMDCTConc->lastBlockData.scaleFactors, hTonalMDCTConc->nScaleFactors ); + } + + return; +} + + +void TonalMDCTConceal_UpdateState( + TonalMDCTConcealPtr hTonalMDCTConc, + const int16_t nNewSamples, + const float pitchLag, + const int16_t badBlock, + const int16_t tonalConcealmentActive ) +{ + int16_t newBlockIsValid; + + assert( !( !badBlock && tonalConcealmentActive ) ); + + if ( badBlock ) + { + newBlockIsValid = hTonalMDCTConc->lastBlockData.blockIsValid; + } + else + { + newBlockIsValid = ( nNewSamples <= 2 * L_FRAME_MAX ) && ( nNewSamples > 0 ); + } + + /* Shift old state */ + hTonalMDCTConc->secondLastBlockData.blockIsConcealed = hTonalMDCTConc->lastBlockData.blockIsConcealed; + hTonalMDCTConc->secondLastBlockData.blockIsValid = hTonalMDCTConc->lastBlockData.blockIsValid; + hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive = hTonalMDCTConc->lastBlockData.tonalConcealmentActive; + + /* Store new state */ + hTonalMDCTConc->lastBlockData.blockIsConcealed = badBlock; + hTonalMDCTConc->lastBlockData.blockIsValid = newBlockIsValid; + hTonalMDCTConc->lastBlockData.tonalConcealmentActive = tonalConcealmentActive; + hTonalMDCTConc->lastPitchLag = pitchLag; + + return; +} + + +static void FindPhases( + const TonalMDCTConcealPtr hTonalMDCTConc, + const float secondLastMDCT[], + const float secondLastMDST[] ) +{ + int16_t i; + int16_t l; + float *pCurrentPhase; + + pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted; + /* for each index/index group */ + for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) + { + *pCurrentPhase++ = (float) atan2( secondLastMDST[l], secondLastMDCT[l] ); + } + } + + return; +} + +#define CNST_bandwidth 7.0f +#define CNST_m (float) cos( EVS_PI / CNST_bandwidth ) +#define CNST_s (float) cos( ( 3 * EVS_PI ) / CNST_bandwidth ) +#define CNST_n (float) sin( EVS_PI / CNST_bandwidth ) +#define CNST_j (float) sin( ( 3 * EVS_PI ) / CNST_bandwidth ) +#define CNST_G (float) ( 1.0 / ( 2 * 1.36 ) ) +#define CNST_maxRatio 44.8f /* Maximum ratio |ODFT[k-1]|/|ODFT[k+1]| is 16.5 dB, that is maximum ratio (for fractional = 0) is (cos(EVS_PI/bandwidth)/cos(3PI/bandwidth))^1.36 */ + + +static void FindPhaseDifferences( + TonalMDCTConcealPtr const hTonalMDCTConc, + float powerSpectrum[] ) +{ + int16_t i, k; + float odft_left, odft_right; + float *phaseDiff; + float fractional; + float Q, a; + + phaseDiff = hTonalMDCTConc->pTCI->phaseDiff; + for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + k = hTonalMDCTConc->pTCI->indexOfTonalPeak[i]; + odft_left = powerSpectrum[k - 1]; + odft_right = powerSpectrum[k + 1]; + if ( odft_left >= CNST_maxRatio * odft_right ) + { + a = (float) tan( 0.0f * EVS_PI / CNST_bandwidth ); + } + else + { + if ( odft_right >= CNST_maxRatio * odft_left ) + { + a = (float) tan( 2.0f * EVS_PI / CNST_bandwidth ); + } + else + { + Q = (float) pow( odft_left / odft_right, CNST_G ); + a = ( CNST_m - Q * CNST_s ) / ( CNST_n + Q * CNST_j ); + } + } + fractional = (float) atan( a ) * ( CNST_bandwidth / 2.0f ); + assert( ( fractional >= 0 ) && ( fractional <= EVS_PI + 1.192092896e-07F ) ); + phaseDiff[i] = fractional + EVS_PI * ( k % 4 ); + } + + return; +} + +static void CalcPowerSpec( + const float *mdctSpec, + const float *mdstSpec, + const int16_t nSamples, + float floorPowerSpectrum, + float *powerSpec ) +{ + int16_t k; + float x; + + for ( k = 1; k <= nSamples - 2; k++ ) + { + x = mdctSpec[k] * mdctSpec[k] + mdstSpec[k] * mdstSpec[k]; + powerSpec[k] = max( floorPowerSpectrum, x ); + } + powerSpec[0] = 0.5f * powerSpec[1]; + powerSpec[nSamples - 1] = 0.5f * powerSpec[nSamples - 2]; + + return; +} + +static void CalcPowerSpecAndDetectTonalComponents( + const TonalMDCTConcealPtr hTonalMDCTConc, + float secondLastMDST[], + float secondLastMDCT[], + const float pitchLag, + const PsychoacousticParameters *psychParamsCurrent ) +{ + int16_t i, nSamples; + float floorPowerSpectrum; /* Minimum significant value of a spectral line in the power spectrum */ + float powerSpectrum[L_FRAME_MAX]; /* 32 bits are required */ + float invScaleFactors[FDNS_NPTS]; + int16_t nBands; + + nSamples = hTonalMDCTConc->nNonZeroSamples; + + /* It is taken into account that the MDCT is not normalized. */ + floorPowerSpectrum = hTonalMDCTConc->nSamples * hTonalMDCTConc->nSamples / 400.0f; + CalcPowerSpec( secondLastMDCT, secondLastMDST, nSamples, floorPowerSpectrum, powerSpectrum ); + + /* This setting to minimal level is required because the power spectrum is used in the threshold adaptation using the pitch up to hTonalMDCTConc->nSamples. */ + set_f( powerSpectrum + nSamples, floorPowerSpectrum, hTonalMDCTConc->nSamples - nSamples ); + /* this setting to zero is needed since the FDNS needs to be called + with hTonalMDCTConc->nSamplesCore; it relevant only for nb; it has no effect + to the output, but memory checker may complain otherwise due to the + usage of uninitialized values */ + + if ( hTonalMDCTConc->nSamplesCore > hTonalMDCTConc->nSamples ) + { + set_zero( powerSpectrum + hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamplesCore - hTonalMDCTConc->nSamples ); + } + + DetectTonalComponents( hTonalMDCTConc->pTCI->indexOfTonalPeak, hTonalMDCTConc->pTCI->lowerIndex, hTonalMDCTConc->pTCI->upperIndex, &hTonalMDCTConc->pTCI->numIndexes, hTonalMDCTConc->lastPitchLag, pitchLag, + hTonalMDCTConc->lastBlockData.spectralData, hTonalMDCTConc->lastBlockData.scaleFactors, powerSpectrum, nSamples, hTonalMDCTConc->nSamplesCore, floorPowerSpectrum, psychParamsCurrent ); + + FindPhases( hTonalMDCTConc, secondLastMDCT, secondLastMDST ); + + FindPhaseDifferences( hTonalMDCTConc, powerSpectrum ); + + if ( hTonalMDCTConc->pTCI->numIndexes > 0 ) + { + hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; + + for ( i = 0; i < nSamples; i++ ) + { + powerSpectrum[i] = (float) sqrt( powerSpectrum[i] ); + } + + for ( i = 0; i < hTonalMDCTConc->nScaleFactors; i++ ) + { + invScaleFactors[i] = 1.0f / hTonalMDCTConc->secondLastBlockData.scaleFactors[i]; + } + + if ( psychParamsCurrent == NULL ) + { + nBands = FDNS_NPTS; + mdct_noiseShaping( powerSpectrum, hTonalMDCTConc->nSamplesCore, invScaleFactors, nBands ); + } + else + { + sns_shape_spectrum( powerSpectrum, psychParamsCurrent, invScaleFactors, hTonalMDCTConc->nSamplesCore ); + nBands = psychParamsCurrent->nBands; + } + + v_multc( powerSpectrum + hTonalMDCTConc->nSamplesCore, invScaleFactors[nBands - 1], powerSpectrum + hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->nSamples - hTonalMDCTConc->nSamplesCore ); + mvr2r( powerSpectrum, hTonalMDCTConc->secondLastPowerSpectrum, hTonalMDCTConc->nSamples ); /* 16 bits are now enough for storing the power spectrum */ + } + + return; +} + + +static void CalcMDXT( + const TonalMDCTConcealPtr hTonalMDCTConc, + const char type, + const float *timeSignal, + float *mdxtOutput, + const int16_t isLfe ) +{ + float windowedTimeSignal[L_FRAME_PLUS + 2 * L_MDCT_OVLP_MAX]; + int16_t left_overlap, right_overlap; + int16_t L_frame; + + L_frame = hTonalMDCTConc->nSamples; + WindowSignal( hTonalMDCTConc->tcx_cfg, hTonalMDCTConc->tcx_cfg->tcx_offsetFB, FULL_OVERLAP, FULL_OVERLAP, &left_overlap, &right_overlap, timeSignal, &L_frame, windowedTimeSignal, 1, 1, isLfe ); + + if ( type == 'S' ) + { + TCX_MDST( windowedTimeSignal, mdxtOutput, left_overlap, L_frame - ( left_overlap + right_overlap ) / 2, right_overlap, EVS_MONO ); + } + else + { + TCX_MDCT( windowedTimeSignal, mdxtOutput, left_overlap, L_frame - ( left_overlap + right_overlap ) / 2, right_overlap, EVS_MONO ); + } + + return; +} + + +void TonalMDCTConceal_Detect( + const TonalMDCTConcealPtr hTonalMDCTConc, + const float pitchLag, + int16_t *numIndices, + const PsychoacousticParameters *psychParamsCurrent, + const int16_t isLfe ) +{ + float secondLastMDST[L_FRAME_MAX]; /* 32 bits are required */ + float secondLastMDCT[L_FRAME_MAX]; /* 32 bits are required */ + float *powerSpectrum = secondLastMDST; + int16_t i, nSamples; + int16_t nBands; + + nSamples = hTonalMDCTConc->nSamples; + if ( hTonalMDCTConc->lastBlockData.blockIsValid && hTonalMDCTConc->secondLastBlockData.blockIsValid && ( hTonalMDCTConc->lastBlockData.nSamples == nSamples ) && ( hTonalMDCTConc->secondLastBlockData.nSamples == nSamples ) && ( !hTonalMDCTConc->secondLastBlockData.blockIsConcealed || hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive || ( pitchLag != 0 ) ) + /* Safety if the second last frame was concealed and tonal concealment was inactive */ + ) + { + if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) + { + if ( !hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive ) + { + CalcMDXT( hTonalMDCTConc, 'S', hTonalMDCTConc->secondLastPcmOut, secondLastMDST, + isLfe ); + CalcMDXT( hTonalMDCTConc, 'C', hTonalMDCTConc->secondLastPcmOut, secondLastMDCT, + isLfe ); + hTonalMDCTConc->nNonZeroSamples = 0; + for ( i = 0; i < hTonalMDCTConc->nSamples; i++ ) + { + if ( hTonalMDCTConc->secondLastBlockData.spectralData[i] != 0 ) + { + hTonalMDCTConc->nNonZeroSamples = i; + } + } + /* 23 is the maximum length of the MA filter in getEnvelope */ + hTonalMDCTConc->nNonZeroSamples = min( hTonalMDCTConc->nSamples, hTonalMDCTConc->nNonZeroSamples + 23 ); + CalcPowerSpecAndDetectTonalComponents( hTonalMDCTConc, secondLastMDST, secondLastMDCT, pitchLag, psychParamsCurrent ); + } + else + { + /* If the second last frame was also lost, it is expected that pastTimeSignal could hold a bit different signal (e.g. including fade-out) from the one stored in TonalMDCTConceal_SaveTimeSignal. */ + /* That is why we reuse the already stored information about the concealed spectrum in the second last frame */ + nSamples = hTonalMDCTConc->nNonZeroSamples; + mvr2r( hTonalMDCTConc->secondLastPowerSpectrum, powerSpectrum, nSamples ); /* Convert from 16 bits to 32 bits */ + if ( psychParamsCurrent == NULL ) + { + nBands = FDNS_NPTS; + mdct_noiseShaping( powerSpectrum, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors, nBands ); + } + else + { + sns_shape_spectrum( powerSpectrum, psychParamsCurrent, hTonalMDCTConc->secondLastBlockData.scaleFactors, hTonalMDCTConc->nSamplesCore ); + nBands = psychParamsCurrent->nBands; + } + + v_multc( powerSpectrum + hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors[nBands - 1], powerSpectrum + hTonalMDCTConc->nSamplesCore, nSamples - hTonalMDCTConc->nSamplesCore ); + v_mult( powerSpectrum, powerSpectrum, powerSpectrum, nSamples ); + + RefineTonalComponents( hTonalMDCTConc->pTCI->indexOfTonalPeak, hTonalMDCTConc->pTCI->lowerIndex, hTonalMDCTConc->pTCI->upperIndex, hTonalMDCTConc->pTCI->phaseDiff, + hTonalMDCTConc->pTCI->phase_currentFramePredicted, &hTonalMDCTConc->pTCI->numIndexes, hTonalMDCTConc->lastPitchLag, pitchLag, + hTonalMDCTConc->lastBlockData.spectralData, hTonalMDCTConc->lastBlockData.scaleFactors, powerSpectrum, + nSamples, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->nSamples * hTonalMDCTConc->nSamples / 400.0f /* floorPowerSpectrum */, psychParamsCurrent ); + } + } + } + else + { + hTonalMDCTConc->pTCI->numIndexes = 0; + } + + *numIndices = hTonalMDCTConc->pTCI->numIndexes; + + return; +} + + +void TonalMDCTConceal_InsertNoise( + const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ + float *mdctSpectrum, /*OUT*/ + const int16_t tonalConcealmentActive, + int16_t *pSeed, + const float tiltCompFactor, + const float crossfadeGain, +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const float concealment_noise[L_FRAME48k], +#endif + const int16_t crossOverFreq ) +{ + int16_t i, l; + float x, y; + Word16 rnd; + float g, nrgNoiseInLastFrame, nrgWhiteNoise, tiltFactor, tilt; + + wmops_sub_start( "InsertNoise" ); + + g = 1.0f - crossfadeGain; + if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) + { + rnd = 1977; + } + else + { + rnd = *pSeed; + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + /* based on what is done in tcx_noise_filling() */ + /* always initialize these to avoid compiler warnings */ + tiltFactor = (float) pow( max( 0.375f, tiltCompFactor ), 1.0f / hTonalMDCTConc->lastBlockData.nSamples ); + tilt = 1.0f; + nrgNoiseInLastFrame = 0.0f; + nrgWhiteNoise = 0.0f; +#endif + + if ( !hTonalMDCTConc->lastBlockData.blockIsValid ) + { + /* may just become active if the very first frame is lost */ + set_f( mdctSpectrum, 0.0f, hTonalMDCTConc->nSamples ); + } +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + else if ( concealment_noise != NULL ) + { + if ( !tonalConcealmentActive ) + { + /* if fadeout has not started yet, only apply sign scrambling */ + if ( crossfadeGain == 1.0f ) + { + for ( i = 0; i < crossOverFreq; i++ ) + { + if ( concealment_noise[i] > 0 ) + { + mdctSpectrum[i] = hTonalMDCTConc->lastBlockData.spectralData[i]; + } + else + { + mdctSpectrum[i] = -hTonalMDCTConc->lastBlockData.spectralData[i]; + } + } + + for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) + { + mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData[l]; + } + } + /* actual fadeout is done in this case */ + else + { + g *= (float) sqrt( hTonalMDCTConc->last_block_nrg / hTonalMDCTConc->curr_noise_nrg ); + + for ( i = 0; i < crossOverFreq; i++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[i]; + y = concealment_noise[i]; + + if ( y > 0 ) + { + mdctSpectrum[i] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[i] = g * y - crossfadeGain * x; + } + } + for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) + { + mdctSpectrum[l] = 0.0f; + } + } + } + else + { + assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); + + /* initialize bins of tonal components with zero: basically not + necessary, but currently the whole spectrum is rescaled in + mdct_noiseShaping() and then there would be a processing of + uninitialized values */ + for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) + { + mdctSpectrum[l] = 0; + } + } + + /* if fadeout has not started yet, only apply sign scrambling */ + if ( crossfadeGain == 1.0f ) + { + for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) + { + if ( concealment_noise[l] > 0 ) + { + mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData[l]; + } + else + { + mdctSpectrum[l] = -hTonalMDCTConc->lastBlockData.spectralData[l]; + } + } + for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) + { + if ( concealment_noise[l] > 0 ) + { + mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData[l]; + } + else + { + mdctSpectrum[l] = -hTonalMDCTConc->lastBlockData.spectralData[l]; + } + } + } + + for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) + { + if ( concealment_noise[l] > 0 ) + { + mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData[l]; + } + else + { + mdctSpectrum[l] = -hTonalMDCTConc->lastBlockData.spectralData[l]; + } + } + + for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) + { + mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData[l]; + } + } + /* actual fadeout is done in this case */ + else + { + g *= (float) sqrt( hTonalMDCTConc->last_block_nrg / hTonalMDCTConc->curr_noise_nrg ); + + for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + y = concealment_noise[l]; + + if ( y > 0 ) + { + mdctSpectrum[l] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[l] = g * y - crossfadeGain * x; + } + } + for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + y = concealment_noise[l]; + + if ( y > 0 ) + { + mdctSpectrum[l] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[l] = g * y - crossfadeGain * x; + } + } + } + + for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + y = concealment_noise[l]; + + if ( y > 0 ) + { + mdctSpectrum[l] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[l] = g * y - crossfadeGain * x; + } + } + + for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) + { + mdctSpectrum[l] = 0.0f; + } + } + } + } +#endif + else + { +#ifndef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + /* based on what is done in tcx_noise_filling() */ + tiltFactor = (float) pow( max( 0.375f, tiltCompFactor ), 1.0f / hTonalMDCTConc->lastBlockData.nSamples ); + tilt = 1.0f; + nrgNoiseInLastFrame = nrgWhiteNoise = 0.0f; +#endif + if ( !tonalConcealmentActive ) + { + for ( i = 0; i < crossOverFreq; i++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[i]; + nrgNoiseInLastFrame += x * x; + rnd = own_random( &rnd ); + mdctSpectrum[i] = tilt * rnd; + tilt *= tiltFactor; + nrgWhiteNoise += mdctSpectrum[i] * mdctSpectrum[i]; + } + if ( nrgWhiteNoise > 0 ) + { + g *= (float) sqrt( nrgNoiseInLastFrame / nrgWhiteNoise ); + } + for ( i = 0; i < crossOverFreq; i++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[i]; + y = mdctSpectrum[i]; + + if ( y > 0 ) + { + mdctSpectrum[i] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[i] = g * y - crossfadeGain * x; + } + } + + for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) + { + mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData[l]; + } + } + else + { + assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); + for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + rnd = own_random( &rnd ); + mdctSpectrum[l] = tilt * rnd; + tilt *= tiltFactor; + nrgNoiseInLastFrame += x * x; + nrgWhiteNoise += mdctSpectrum[l] * mdctSpectrum[l]; + } + + for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + tilt *= (float) pow( tiltFactor, hTonalMDCTConc->pTCI->upperIndex[i - 1] - hTonalMDCTConc->pTCI->lowerIndex[i - 1] + 1 ); + for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + rnd = own_random( &rnd ); + mdctSpectrum[l] = tilt * rnd; + tilt *= tiltFactor; + nrgNoiseInLastFrame += x * x; + nrgWhiteNoise += mdctSpectrum[l] * mdctSpectrum[l]; + } + } + tilt *= (float) pow( tiltFactor, hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] - hTonalMDCTConc->pTCI->lowerIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1 ); + + for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + rnd = own_random( &rnd ); + mdctSpectrum[l] = tilt * rnd; + tilt *= tiltFactor; + nrgNoiseInLastFrame += x * x; + nrgWhiteNoise += mdctSpectrum[l] * mdctSpectrum[l]; + } + if ( nrgWhiteNoise > 0 ) + { + g *= (float) sqrt( nrgNoiseInLastFrame / nrgWhiteNoise ); + } + for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + y = mdctSpectrum[l]; + + if ( y > 0 ) + { + mdctSpectrum[l] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[l] = g * y - crossfadeGain * x; + } + } + for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + y = mdctSpectrum[l]; + + if ( y > 0 ) + { + mdctSpectrum[l] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[l] = g * y - crossfadeGain * x; + } + } + } + /* initialize bins of tonal components with zero: basically not + necessary, but currently the whole spectrum is rescaled in + mdct_noiseShaping() and then there would be a processing of + uninitialized values */ + for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) + { + mdctSpectrum[l] = 0; + } + } + for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) + { + x = hTonalMDCTConc->lastBlockData.spectralData[l]; + y = mdctSpectrum[l]; + + if ( y > 0 ) + { + mdctSpectrum[l] = g * y + crossfadeGain * x; + } + else + { + mdctSpectrum[l] = g * y - crossfadeGain * x; + } + } + + for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) + { + mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData[l]; + } + } + } + + *pSeed = rnd; + + wmops_sub_end(); + + return; +} + + +void TonalMDCTConceal_Apply( + TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ + float *mdctSpectrum, /*OUT */ + const PsychoacousticParameters *psychParamsCurrent ) +{ + int16_t i, l; + float *phaseDiff, *pCurrentPhase; + float phaseToAdd; + float powerSpectrum[L_FRAME_MAX]; + int16_t nSamples; + int16_t nBands; + + if ( hTonalMDCTConc->lastBlockData.blockIsValid & hTonalMDCTConc->secondLastBlockData.blockIsValid ) + { + assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); + + nSamples = hTonalMDCTConc->nNonZeroSamples; + assert( hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] < nSamples ); + mvr2r( hTonalMDCTConc->secondLastPowerSpectrum, powerSpectrum, nSamples ); /* Convert from 16 bits to 32 bits */ + if ( psychParamsCurrent == NULL ) + { + nBands = FDNS_NPTS; + mdct_noiseShaping( powerSpectrum, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors, nBands ); + } + else + { + sns_shape_spectrum( powerSpectrum, psychParamsCurrent, hTonalMDCTConc->secondLastBlockData.scaleFactors, hTonalMDCTConc->nSamplesCore ); + nBands = psychParamsCurrent->nBands; + } + + v_multc( powerSpectrum + hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors[nBands - 1], powerSpectrum + hTonalMDCTConc->nSamplesCore, nSamples - hTonalMDCTConc->nSamplesCore ); + + phaseDiff = hTonalMDCTConc->pTCI->phaseDiff; /* if multiple frame loss occurs use the phase from the last frame and continue rotating */ + pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted; + + if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) + { + if ( hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive ) + { + hTonalMDCTConc->nFramesLost += 1; + } + else + { + hTonalMDCTConc->nFramesLost = 1.5; + } + } + + /* for each index group */ + for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) + { + phaseToAdd = hTonalMDCTConc->nFramesLost * phaseDiff[i]; + + /* Move phaseToAdd to range -EVS_PI..EVS_PI */ + while ( phaseToAdd > EVS_PI ) + { + phaseToAdd -= PI2; + } + + while ( phaseToAdd < -EVS_PI ) + { + /* should never occur in flt - kept for safety reasons */ + phaseToAdd += PI2; + } + + for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) + { + const float currentPhase = ( *pCurrentPhase++ ) + phaseToAdd; /* *pCurrentPhase and phaseToAdd are in range -EVS_PI..EVS_PI */ + mdctSpectrum[l] = (float) cos( currentPhase ) * powerSpectrum[l]; + } + } + } + + hTonalMDCTConc->nFramesLost++; + + return; +} + + +void TonalMDCTConceal_SaveTimeSignal( + TonalMDCTConcealPtr hTonalMDCTConc, + float *timeSignal, + const int16_t nNewSamples ) +{ + if ( nNewSamples == hTonalMDCTConc->nSamples ) + { + assert( nNewSamples <= L_FRAME_MAX ); + + if ( !hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive ) + { + mvr2r( hTonalMDCTConc->lastPcmOut + hTonalMDCTConc->nSamples / 2, hTonalMDCTConc->secondLastPcmOut, hTonalMDCTConc->nSamples / 2 ); + } + + mvr2r( timeSignal, hTonalMDCTConc->lastPcmOut, hTonalMDCTConc->nSamples ); + } + + return; +} + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +void TonalMdctConceal_create_concealment_noise( + float concealment_noise[L_FRAME48k], + CPE_DEC_HANDLE hCPE, + const int16_t L_frameTCX, + const int16_t L_frame, + const int16_t idchan, + const int16_t subframe_idx, + const int16_t core, + const int16_t crossfade_gain, + const TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode ) +{ + STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct; + TonalMDCTConcealPtr hTonalMDCTConc; + Decoder_State *st; + HANDLE_FD_CNG_COM hFdCngCom; + int16_t *rnd_c, *rnd; + int16_t crossOverFreq, i, save_rnd_c, max_noise_line; + float c, c_inv; + float noise_shape_buffer[L_FRAME48k]; + int16_t inc, start_idx, stop_idx; + float *cngNoiseLevelPtr; + float last_scf; + + wmops_sub_start( "create_conc_noise" ); + + hStereoMdct = hCPE->hStereoMdct; + st = hCPE->hCoreCoder[idchan]; + hTonalMDCTConc = st->hTonalMDCTConc; + hFdCngCom = st->hFdCngDec->hFdCngCom; + rnd = &hStereoMdct->noise_seeds_channels[idchan]; + rnd_c = &hStereoMdct->noise_seed_common; + + /* determine start bin for IGF */ + if ( st->igf == 0 ) + { + if ( st->narrowBand == 0 ) + { + /* minimum needed for output with sampling rates lower then the + nominal sampling rate */ + crossOverFreq = min( L_frameTCX, L_frame ); + } + else + { + crossOverFreq = L_frameTCX; + } + } + else + { + crossOverFreq = min( st->hIGFDec->infoIGFStartLine, L_frameTCX ); + } + + /* for tonal mdct concealment with tonal components above the crossover frequency, conditionally raise the frequency index until which noise is generated */ + max_noise_line = crossOverFreq; + if ( st->tonal_mdct_plc_active ) + { + max_noise_line = max( max_noise_line, hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1 ); + } + + /* first lost frame is handled separately */ + if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) + { + *rnd = 1977 + idchan; + /* will be set twice when looping over two channels, but does not matter */ + *rnd_c = 1979; + } + + if ( crossfade_gain == 1.0f ) + { + /* In first frame, noise is weighted with zero anyway, we only need the random numbers for the sign scrambling */ + for ( i = 0; i < max_noise_line; i++ ) + { + *rnd = own_random( rnd ); + concealment_noise[i] = *rnd; + } + + wmops_sub_end(); + + return; + } + + save_rnd_c = *rnd_c; + + c = sqrtf( hStereoMdct->lastCoh ); + c_inv = sqrtf( 1 - hStereoMdct->lastCoh ); + + /* pre-compute the noise shape for later weighting of the noise spectra */ + /* TODO: optimize by intertwining with later loop */ + cngNoiseLevelPtr = &hFdCngCom->cngNoiseLevel[0]; + inc = ( st->core > TCX_20_CORE ) ? 2 : 1; + start_idx = hFdCngCom->startBand / inc; + stop_idx = hFdCngCom->stopFFTbin / inc; + + for ( i = 0; i < start_idx; i++ ) + { + noise_shape_buffer[i] = 0.0f; + } + for ( ; i < stop_idx; i++, cngNoiseLevelPtr += inc ) + { + noise_shape_buffer[i] = sqrtf( *( cngNoiseLevelPtr ) ); + } + + last_scf = sqrtf( *( cngNoiseLevelPtr - inc ) ); + + for ( ; i < max_noise_line; i++ ) + { + noise_shape_buffer[i] = last_scf; + } + + /* fill the noise vector */ + hTonalMDCTConc->curr_noise_nrg = 0.001f; + if ( noise_gen_mode == EQUAL_CORES || ( ( noise_gen_mode == TCX20_IN_0_TCX10_IN_1 && idchan == 0 ) || ( noise_gen_mode == TCX10_IN_0_TCX20_IN_1 && idchan == 1 ) ) ) + { + /* current channel is TCX20 -> generate noise for "full-length" spectrum */ + for ( i = 0; i < max_noise_line; i++ ) + { + *rnd = own_random( rnd ); + *rnd_c = own_random( rnd_c ); + + concealment_noise[i] = ( c_inv * *rnd + c * *rnd_c ) * noise_shape_buffer[i]; + hTonalMDCTConc->curr_noise_nrg += concealment_noise[i] * concealment_noise[i]; + } + } + else /* ( ( noise_gen_mode == TCX10_IN_0_TCX20_IN_1 && idchan == 0 ) || ( noise_gen_mode == TCX20_IN_0_TCX10_IN_1 && idchan == 1 ) ) */ + { + /* current channel is TCX10 and the other is TCX20 -> generate noise for "half-length" spectrum, but "increment" mid seed twice, to have the same seed in mid as the other (TCX20) channel for next frame */ + for ( i = 0; i < max_noise_line; i++ ) + { + *rnd = own_random( rnd ); + *rnd_c = own_random( rnd_c ); + + concealment_noise[i] = ( c_inv * *rnd + c * *rnd_c ) * noise_shape_buffer[i]; + hTonalMDCTConc->curr_noise_nrg += concealment_noise[i] * concealment_noise[i]; + + *rnd_c = own_random( rnd_c ); + } + } + + /* restore common seed + - after finishing the first channel + - after a first subframe if the current channel is TCX10 */ + if ( ( idchan == 0 && ( core == TCX_20 || ( core == TCX_10 && subframe_idx == 1 ) ) ) || ( core == TCX_10 && subframe_idx == 0 ) ) + { + *rnd_c = save_rnd_c; + } + + wmops_sub_end(); + + return; +} +#endif diff --git a/lib_dec/transition_dec.c b/lib_dec/transition_dec.c new file mode 100644 index 0000000000..9bcecf40b8 --- /dev/null +++ b/lib_dec/transition_dec.c @@ -0,0 +1,769 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*----------------------------------------------------------------------* + * Local function prototypes + *----------------------------------------------------------------------*/ + +static void tc_dec( Decoder_State *st, const int16_t L_frame, float exc[], int16_t *T0, int16_t *T0_frac, const int16_t i_subfr, const int16_t tc_subfr, int16_t *position, float bwe_exc[] ); + + +/*-------------------------------------------------------------------* + * transition_dec() + * + * Principal function for TC decoding + *-------------------------------------------------------------------*/ + +void transition_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t tc_subfr, /* i : TC subframe index */ + int16_t *Jopt_flag, /* i : joint optimization flag */ + float *exc, /* o : excitation signal */ + int16_t *T0, /* o : close loop integer pitch */ + int16_t *T0_frac, /* o : close loop fractional part of the pitch */ + int16_t *T0_min, /* i/o: delta search min for sf 2 & 4 */ + int16_t *T0_max, /* i/o: delta search max for sf 2 & 4 */ + float **pt_pitch, /* o : floating pitch values */ + int16_t *position, /* i/o: first glottal impulse position in frame */ + float *bwe_exc /* o : excitation for SWB TBE */ +) +{ + int16_t i, pit_flag, pit_start, pit_limit, index, nBits; + int16_t limit_flag; + int16_t offset; + + /* Set limit_flag to 0 for restrained limits, and 1 for extended limits */ + limit_flag = 0; + + /*---------------------------------------------------------------------* + * zero adaptive contribution (glottal shape codebook search not + * in first subframe(s) ) + *---------------------------------------------------------------------*/ + + if ( tc_subfr > i_subfr + TC_0_192 ) + { + set_f( &exc[i_subfr], 0, L_SUBFR ); + + if ( L_frame == L_FRAME ) + { + set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); /* set past excitation buffer to 0 */ + } + else + { + set_f( &bwe_exc[i_subfr * 2], 0, (int16_t) ( L_SUBFR * 2 ) ); /* set past excitation buffer to 0 */ + } + + *T0 = L_SUBFR; + *T0_frac = 0; + **pt_pitch = (float) L_SUBFR; + } + + /*---------------------------------------------------------------------* + * glottal shape codebook search + *---------------------------------------------------------------------*/ + + else if ( ( tc_subfr - i_subfr >= 0 ) && ( tc_subfr - i_subfr <= TC_0_192 ) ) + { + set_f( exc - L_EXC_MEM, 0, L_EXC_MEM ); /* set past excitation buffer to 0 */ + + if ( L_frame == L_FRAME ) + { + set_f( bwe_exc - PIT_MAX * HIBND_ACB_L_FAC, 0, PIT_MAX * HIBND_ACB_L_FAC ); /* set past excitation buffer to 0 */ + } + else + { + set_f( bwe_exc - PIT16k_MAX * 2, 0, PIT16k_MAX * 2 ); /* set past excitation buffer to 0 */ + } + + /* glottal shape codebook contribution construction */ + tc_dec( st, L_frame, exc, T0, T0_frac, i_subfr, tc_subfr, position, bwe_exc ); + + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ + *Jopt_flag = 1; + } + + /*---------------------------------------------------------------------* + * Regular ACELP Decoding using GENERIC type decoder + * (all subframes following subframe with glottal shape codebook seach) + * - search the position of the 2nd glottal impulse in case that the first + * one is in the 1st subframe (different adaptive contribution + * construction and the pitch period coding is used) + *---------------------------------------------------------------------*/ + + else if ( tc_subfr < i_subfr ) + { + if ( L_frame == L_FRAME ) + { + *Jopt_flag = 1; + + if ( ( i_subfr - tc_subfr >= L_SUBFR ) && ( i_subfr - tc_subfr <= L_SUBFR + TC_0_192 ) ) + { + pit_flag = 0; + } + else + { + pit_flag = L_SUBFR; + } + + if ( tc_subfr == TC_0_0 ) + { + if ( i_subfr == L_SUBFR ) + { + limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); + } + + pit_flag = 1; + } + + /*-----------------------------------------------------------------* + * get number of bits for pitch decoding + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; + + /*------------------------------------------------------------* + * first glottal impulse is in the 1st subframe + *------------------------------------------------------------*/ + + if ( ( i_subfr == L_SUBFR ) && ( tc_subfr >= TC_0_128 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 3rd or 4th subframe + * - build exc[] in 2nd subframe + *--------------------------------------------------------*/ + + *T0 = 2 * L_SUBFR; + *T0_frac = 0; + *Jopt_flag = 0; + + /* set adaptive part of exciation for curent subframe to 0 */ + set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); + + set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); + } + else if ( ( i_subfr == L_SUBFR ) && ( tc_subfr == TC_0_64 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 2nd subframe, + * - build exc[] in 2nd subframe + *--------------------------------------------------------*/ + + if ( PIT_MIN > ( *position ) ) + { + pit_start = L_SUBFR - ( *position ); + } + else + { + pit_start = PIT_MIN; + } + + if ( pit_start < PIT_MIN ) + { + pit_start = PIT_MIN; + } + + pit_limit = 2 * pit_start + ( *position ); + + /* 7 bit pitch DECODER */ + index = get_next_indice( st, nBits ); + + *T0 = (int16_t) ( floor( pit_start + index / 2 ) ); + *T0_frac = ( index - ( *T0 - pit_start ) * 2 ) * 2; + limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max */ + + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + else if ( ( i_subfr == 2 * L_SUBFR ) && ( tc_subfr == TC_0_128 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 3rd subframe + * - build exc[] in 3rd subframe + *--------------------------------------------------------*/ + + /* 7bit pitch DECODER */ + pit_start = 2 * L_SUBFR - ( *position ); + + index = get_next_indice( st, nBits ); + + *T0 = (int16_t) ( floor( pit_start + (int16_t) ( index / 2 ) ) ); + *T0_frac = ( index - ( *T0 - pit_start ) * 2 ) * 2; + + limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max */ + + /* Find the adaptive codebook vector. ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + else if ( ( i_subfr == 2 * L_SUBFR ) && ( tc_subfr == TC_0_192 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 4th subframe + * - build exc[] in 3rd subframe + *--------------------------------------------------------*/ + + *T0 = 4 * L_SUBFR; + *T0_frac = 0; + *Jopt_flag = 0; + + /* set adaptive part of exciation for curent subframe to 0 */ + set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); + + set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); + } + else if ( ( i_subfr == 3 * L_SUBFR ) && ( tc_subfr == TC_0_192 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 4th subframe + * - build exc[] in 4th subframe + *--------------------------------------------------------*/ + + pit_start = 3 * L_SUBFR - ( *position ); + pit_limit = 2 * L_FRAME - PIT_MAX - 2 * ( *position ) - 2; + + index = get_next_indice( st, nBits ); + + if ( index < ( pit_limit - pit_start ) * 2 ) + { + *T0 = (int16_t) ( floor( pit_start + ( index / 2 ) ) ); + *T0_frac = ( index - ( ( *T0 ) - pit_start ) * 2 ) * 2; + } + else + { + *T0 = index + pit_limit - ( pit_limit - pit_start ) * 2; + *T0_frac = 0; + } + + /* biterror detection mechanism */ + if ( ( ( *T0 << 2 ) + *T0_frac ) > ( PIT_MAX << 2 ) + 2 ) + { + *T0 = L_SUBFR; + *T0_frac = 0; + st->BER_detect = 1; + } + + /* Find the adaptive codebook vector. ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + else if ( ( i_subfr == 3 * L_SUBFR ) && ( tc_subfr == TC_0_128 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse in the 3rd subframe + * build exc[] in 4th subframe + *--------------------------------------------------------*/ + + index = get_next_indice( st, nBits ); + + delta_pit_dec( 2, index, T0, T0_frac, *T0_min ); + + /* Find the adaptive codebook vector. ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + + /*------------------------------------------------------------* + * first glottal impulse is NOT in the 1st subframe, + * or two impulses are in the 1st subframe + *------------------------------------------------------------*/ + else + { + index = get_next_indice( st, nBits ); + + pit_Q_dec( 0, index, nBits, 8, pit_flag, limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + + /* Find the adaptive codebook vector */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + + /*-----------------------------------------------------------------* + * LP filtering of the adaptive excitation (if non-zero) + *-----------------------------------------------------------------*/ + + if ( *Jopt_flag ) + { + lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); + } + + /*---------------------------------------------------------------------* + * fill the pitch buffer - needed for post-processing and FEC_clas_estim() + *---------------------------------------------------------------------*/ + + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ + if ( ( tc_subfr >= 2 * L_SUBFR ) && ( i_subfr == 3 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 3; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( tc_subfr == L_SUBFR ) && ( i_subfr == 2 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 2; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( tc_subfr == TC_0_64 ) && ( i_subfr == L_SUBFR ) ) + { + ( *pt_pitch ) -= 1; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( tc_subfr == TC_0_128 ) && ( i_subfr == 2 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 2; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( tc_subfr == TC_0_192 ) && ( i_subfr == 3 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 3; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + } + else /* L_frame == L_FRAME16k */ + { + if ( i_subfr >= 2 * L_SUBFR ) + { + limit_flag = 1; + } + + if ( i_subfr - tc_subfr == L_SUBFR ) + { + limit_T0( L_FRAME16k, 8, 0, limit_flag, *T0, *T0_frac, T0_min, T0_max ); /* find T0_min and T0_max */ + } + + /*-----------------------------------------------------------------* + * get number of bits and index for pitch decoding + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; + + index = get_next_indice( st, nBits ); + + /*-----------------------------------------------------------------* + * Find adaptive part of excitation, encode pitch period + *-----------------------------------------------------------------*/ + + if ( nBits == 10 ) + { + pit16k_Q_dec( index, nBits, limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); + } + else if ( nBits == 8 ) /* tc_subfr==0 && i_subfr==L_SUBFR */ + { + /*-----------------------------------------------------------------------------* + * The pitch range is encoded absolutely with 8 bits and is divided as follows: + * PIT16k_MIN to PIT16k_FR2_TC0_2SUBFR-1 resolution 1/4 (frac = 0,1,2 or 3) + * PIT16k_FR2_TC0_2SUBFR to 2*L_SUBFR resolution 1/2 (frac = 0 or 2) + *-----------------------------------------------------------------------------*/ + + if ( index < ( PIT16k_FR2_TC0_2SUBFR - PIT16k_MIN ) * 4 ) + { + *T0 = PIT16k_MIN + ( index / 4 ); + *T0_frac = index - ( *T0 - PIT16k_MIN ) * 4; + } + else + { + index -= ( PIT16k_FR2_TC0_2SUBFR - PIT16k_MIN ) * 4; + *T0 = PIT16k_FR2_TC0_2SUBFR + ( index / 2 ); + *T0_frac = index - ( *T0 - PIT16k_FR2_TC0_2SUBFR ) * 2; + ( *T0_frac ) *= 2; + } + + /* biterror detection mechanism */ + if ( ( ( *T0 << 2 ) + *T0_frac ) > ( ( 2 * L_SUBFR ) << 2 ) ) + { + *T0 = L_SUBFR; + *T0_frac = 0; + st->BER_detect = 1; + } + } + else if ( nBits == 6 ) + { + delta_pit_dec( 4, index, T0, T0_frac, *T0_min ); + } + if ( nBits == 6 ) + { + limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); /* find T0_min and T0_max */ + } + + /*-----------------------------------------------------------------* + * - find the adaptive codebook vector + * - LP filtering of the adaptive excitation (if non-zero) + *-----------------------------------------------------------------*/ + + if ( ( i_subfr == L_SUBFR ) && ( *T0 == 2 * L_SUBFR ) ) + { + /* no adaptive excitation in the second subframe */ + set_f( &exc[i_subfr], 0, L_SUBFR + 1 ); + + get_next_indice( st, 1 ); /* this bit is actually not needed */ + + set_f( &bwe_exc[i_subfr * 2], 0, L_SUBFR * 2 ); + } + else + { + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + for ( i = 0; i < L_SUBFR * 2; i++ ) + { + bwe_exc[i + i_subfr * 2] = bwe_exc[i + i_subfr * 2 - *T0 * 2 - (int16_t) ( (float) *T0_frac * 0.5f + 4 + 0.5f ) + 4]; + } + + lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); + + *Jopt_flag = 1; + } + + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ + + /*---------------------------------------------------------------------* + * fill the pitch buffer - needed for post-processing and FEC_clas_estim() + *---------------------------------------------------------------------*/ + + if ( ( i_subfr - tc_subfr == L_SUBFR ) || ( tc_subfr == 0 && i_subfr == 2 * L_SUBFR ) ) + { + index = i_subfr / L_SUBFR; + ( *pt_pitch ) -= index; + + for ( i = 0; i < index; i++ ) + { + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + } + } + } + + return; +} + +/*---------------------------------------------------------------------* + * tc_dec() + * + * Principal function for TC decoding. + * - constructs glottal codebook contribution + * - uses pitch sharpening + * - uses gain_trans + *---------------------------------------------------------------------*/ + +static void tc_dec( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t L_frame, /* i : length of the frame */ + float exc[], /* o : glottal codebook contribution */ + int16_t *T0, /* o : close-loop pitch period */ + int16_t *T0_frac, /* o : close-loop pitch period - fractional part */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t tc_subfr, /* i : TC subframe index */ + int16_t *position, /* o : first glottal impulse position in frame */ + float bwe_exc[] /* o : excitation for SWB TBE */ +) +{ + int16_t i, imp_shape, imp_pos, imp_sign, imp_gain, nBits; + float gain_trans; + int16_t index; + + /*----------------------------------------------------------------* + * find the number of bits + *----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; + + /*----------------------------------------------------------------* + * decode parameter T0 (pitch period) + *----------------------------------------------------------------*/ + + if ( L_frame == L_FRAME ) + { + if ( ( ( i_subfr == 0 ) && ( ( tc_subfr == 0 ) || ( tc_subfr == TC_0_64 ) || ( tc_subfr == TC_0_128 ) || ( tc_subfr == TC_0_192 ) ) ) || ( tc_subfr == L_SUBFR ) ) + { + *T0 = L_SUBFR; + *T0_frac = 0; + } + else if ( ( tc_subfr == 3 * L_SUBFR ) ) + { + i = get_next_indice( st, nBits ); + + if ( nBits == 9 ) + { + abs_pit_dec( 4, i, 0, T0, T0_frac ); + } + else + { + abs_pit_dec( 2, i, 0, T0, T0_frac ); + } + } + else + { + i = get_next_indice( st, nBits ); + + if ( i == 0 ) + { + *T0 = L_SUBFR; + *T0_frac = 0; + } + else + { + if ( tc_subfr == TC_0_0 ) + { + delta_pit_dec( 2, i, T0, T0_frac, PIT_MIN - 1 ); + } + else + { + delta_pit_dec( 0, i, T0, T0_frac, PIT_MIN - 1 ); + } + } + } + } + else /* L_frame == L_FRAME16k */ + { + i = get_next_indice( st, nBits ); + + if ( nBits == 10 ) + { + if ( i < ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4 ) + { + *T0 = PIT16k_MIN_EXTEND + ( i / 4 ); + *T0_frac = i - ( ( *T0 - PIT16k_MIN_EXTEND ) * 4 ); + } + else + { + index = i - ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4; + *T0 = PIT16k_FR2_EXTEND_10b + ( index / 2 ); + *T0_frac = index - ( *T0 - PIT16k_FR2_EXTEND_10b ) * 2; + ( *T0_frac ) *= 2; + } + } + else if ( nBits == 6 ) + { + *T0 = PIT16k_MIN + ( i / 2 ); + *T0_frac = i - ( *T0 - PIT16k_MIN ) * 2; + *T0_frac *= 2; + } + } + + /*----------------------------------------------------------------* + * decode other TC parameters + *----------------------------------------------------------------*/ + + imp_shape = get_next_indice( st, 3 ); + imp_pos = get_next_indice( st, 6 ); + imp_sign = get_next_indice( st, 1 ); + imp_gain = get_next_indice( st, 3 ); + + /*----------------------------------------------------------------* + * restore gain_trans + * build glottal codebook contribution + *----------------------------------------------------------------*/ + + gain_trans = tbl_gain_trans_tc[imp_gain]; + + if ( imp_sign == 0 ) + { + gain_trans *= -1; + } + + /* build glottal codebook contribution */ + set_f( &exc[i_subfr], 0, L_SUBFR ); + + for ( i = ( imp_pos - L_IMPULSE2 ); i <= ( imp_pos + L_IMPULSE2 ); i++ ) + { + if ( ( i >= 0 ) && ( i < L_SUBFR ) ) + { + exc[i + i_subfr] = glottal_cdbk[(imp_shape) *L_IMPULSE + i - imp_pos + L_IMPULSE2] * gain_trans; + } + } + + /*--------------------------------------------------------------* + * adapt. search of the second impulse in the same subframe + * (when appears) + *--------------------------------------------------------------*/ + + pred_lt4_tc( exc, *T0, *T0_frac, inter4_2, imp_pos, i_subfr ); + + if ( st->hBWE_TD != NULL ) + { + if ( L_frame == L_FRAME ) + { + interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); + } + else + { + interp_code_4over2( &exc[i_subfr], &bwe_exc[i_subfr * 2], L_SUBFR ); + } + } + + *position = imp_pos + i_subfr; + + return; +} + +/*-------------------------------------------------------------------* + * tc_classif() + * + * TC subframe classification decoding + *-------------------------------------------------------------------*/ + +int16_t tc_classif( + Decoder_State *st /* i/o: decoder state structure */ +) +{ + int16_t tc_subfr, indice; + + if ( st->L_frame == L_FRAME ) + { + if ( get_next_indice( st, 1 ) ) + { + tc_subfr = TC_0_0; + } + else + { + if ( get_next_indice( st, 1 ) ) + { + tc_subfr = 0; + + if ( get_next_indice( st, 1 ) ) + { + tc_subfr = TC_0_192; + } + else + { + if ( get_next_indice( st, 1 ) ) + { + tc_subfr = TC_0_64; + } + else + { + tc_subfr = TC_0_128; + } + } + } + else + { + if ( get_next_indice( st, 1 ) ) + { + tc_subfr = L_SUBFR; + } + else + { + if ( get_next_indice( st, 1 ) ) + { + tc_subfr = 2 * L_SUBFR; + } + else + { + tc_subfr = 3 * L_SUBFR; + } + } + } + } + } + else /* L_frame == L_FRAME16k */ + { + indice = get_next_indice( st, 2 ); + + if ( indice < 3 ) + { + tc_subfr = indice * L_SUBFR; + } + else + { + if ( get_next_indice( st, 1 ) == 0 ) + { + tc_subfr = 3 * L_SUBFR; + } + else + { + tc_subfr = 4 * L_SUBFR; + } + } + } + + return ( tc_subfr ); +} diff --git a/lib_dec/updt_dec.c b/lib_dec/updt_dec.c new file mode 100644 index 0000000000..2241e919df --- /dev/null +++ b/lib_dec/updt_dec.c @@ -0,0 +1,760 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "cnst.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * updt_dec() + * + * Common updates (all frame types) + *-------------------------------------------------------------------*/ + +void updt_dec( + Decoder_State *st, /* i/o: state structure */ + const float *old_exc, /* i : buffer of excitation */ + const float *pitch_buf, /* i : floating pitch values for each subframe */ + const float Es_pred, /* i : predicited scaled innovation energy */ + const float *Aq, /* i : A(z) quantized for all subframes */ + const float *lsf_new, /* i : current frame LSF vector */ + const float *lsp_new, /* i : current frame LSP vector */ + const float voice_factors[], /* i : voicing factors */ + const float *old_bwe_exc, /* i : buffer of excitation */ + const float *gain_buf /* o : floating pitch gain for each subframe */ +) +{ + int16_t i; + int16_t tmp_seed; + + HQ_DEC_HANDLE hHQ_core = st->hHQ_core; + + /* update old excitation buffer */ + mvr2r( &old_exc[st->L_frame], st->old_exc, L_EXC_MEM_DEC ); + if ( !st->Opt_AMR_WB && st->hBWE_TD != NULL ) + { + mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); + } + + /* update old LSP and LSF vector */ + mvr2r( lsf_new, st->lsf_old, M ); + mvr2r( lsp_new, st->lsp_old, M ); + + /* update last coding type */ + st->last_coder_type = st->coder_type; + if ( st->coder_type == INACTIVE || ( st->bpf_off == 1 && st->coder_type != AUDIO && st->coder_type != TRANSITION ) ) + { + /* overwrite previous coding type to help FEC */ + st->last_coder_type = UNVOICED; + } + + if ( st->hGSCDec != NULL ) + { + if ( ( st->coder_type != AUDIO || st->Last_GSC_noisy_speech_flag != 0 ) && st->hGSCDec->Last_GSC_pit_band_idx > 0 ) + { + st->hGSCDec->Last_GSC_pit_band_idx = 0; /*The temporal contribution of the GSC is meaningless after 1 frame lost for inactive & unvoiced content */ + } + } + + /* this ensures that st->last_coder_type is never set to INACTIVE in case of AVQ inactive because the FEC does not distinguish between GSC inactive and AVQ inactive */ + if ( st->coder_type == INACTIVE && st->total_brate > ACELP_24k40 ) + { + st->last_coder_type = GENERIC; + } + + if ( st->Opt_AMR_WB && st->coder_type == INACTIVE && st->core_brate != SID_1k75 && st->core_brate != FRAME_NO_DATA ) + { + /* overwrite previous coding type to help FEC */ + st->last_coder_type = UNVOICED; + st->last_voice_factor = voice_factors[NB_SUBFR - 1]; + } + + if ( !st->Opt_AMR_WB ) + { + /* update voicing factor of TBE to help FEC */ + if ( st->L_frame == L_FRAME ) + { + st->last_voice_factor = voice_factors[NB_SUBFR - 1]; + } + else /* L_frame == L_FRAME16k */ + { + st->last_voice_factor = voice_factors[NB_SUBFR16k - 1]; + } + } + + if ( st->hGSCDec != NULL && st->coder_type != AUDIO && st->coder_type != INACTIVE ) + { + st->hGSCDec->noise_lev = NOISE_LEVEL_SP3; + set_f( st->hGSCDec->old_y_gain, 0.0f, MBANDS_GN ); + + for ( i = 0; i < L_FRAME; i++ ) + { + tmp_seed = st->hGSCDec->seed_tcx; + st->hGSCDec->Last_GSC_spectrum[i] = own_random( &tmp_seed ) / PCM16_TO_FLT_FAC; + } + } + + /* update last GSC SWB speech flag for FEC */ + st->Last_GSC_noisy_speech_flag = st->GSC_noisy_speech; + + /* update counter for FEC pitch estimate */ + st->upd_cnt++; + if ( st->upd_cnt > MAX_UPD_CNT ) + { + st->upd_cnt = MAX_UPD_CNT; + } + + mvr2r( &st->old_pitch_buf[st->L_frame / L_SUBFR], st->old_pitch_buf, st->L_frame / L_SUBFR ); + mvr2r( pitch_buf, &st->old_pitch_buf[st->L_frame / L_SUBFR], st->L_frame / L_SUBFR ); + mvr2r( &st->mem_pitch_gain[2], &st->mem_pitch_gain[st->L_frame / L_SUBFR + 2], st->L_frame / L_SUBFR ); + + if ( st->L_frame == L_FRAME ) + { + st->mem_pitch_gain[2] = gain_buf[3]; + st->mem_pitch_gain[3] = gain_buf[2]; + st->mem_pitch_gain[4] = gain_buf[1]; + st->mem_pitch_gain[5] = gain_buf[0]; + } + else + { + st->mem_pitch_gain[2] = gain_buf[4]; + st->mem_pitch_gain[3] = gain_buf[3]; + st->mem_pitch_gain[4] = gain_buf[2]; + st->mem_pitch_gain[5] = gain_buf[1]; + st->mem_pitch_gain[6] = gain_buf[0]; + } + + /* FEC - update adaptive LSF mean vector */ + mvr2r( st->lsfoldbfi0, st->lsfoldbfi1, M ); + mvr2r( lsf_new, st->lsfoldbfi0, M ); + + /* update of pitch and voicing information for HQ FEC */ + if ( hHQ_core != NULL && st->last_core != HQ_CORE ) + { + if ( !st->Opt_AMR_WB && st->coder_type == UNVOICED ) + { + hHQ_core->HqVoicing = 0; + } + else + { + hHQ_core->HqVoicing = 1; + } + } + + /* SC-VBR */ + st->old_ppp_mode = st->last_ppp_mode_dec; + st->last_ppp_mode_dec = st->ppp_mode_dec; + st->last_nelp_mode_dec = st->nelp_mode_dec; + st->last_vbr_hw_BWE_disable_dec = st->vbr_hw_BWE_disable_dec; + + /* core switching updates */ + mvr2r( &Aq[( st->L_frame / L_SUBFR - 1 ) * ( M + 1 )], st->old_Aq_12_8, M + 1 ); + st->old_Es_pred = Es_pred; + + return; +} + +/*-------------------------------------------------------------------* + * updt_IO_switch() + * + * Common updates for AMR-WB IO mode and EVS primary mode switching + *-------------------------------------------------------------------*/ + +void updt_IO_switch_dec( + const int16_t output_frame, /* i : output frame length */ + Decoder_State *st /* i/o: state structure */ +) +{ + float xsp_tmp[M]; + + if ( st->last_core == AMR_WB_CORE ) /* switching to EVS primary mode */ + { + /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ + mvr2r( stable_LSP, xsp_tmp, M ); + isf2lsf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); + mvr2r( stable_LSP, xsp_tmp, M ); + isp2lsp( st->lsp_old, st->lsp_old, xsp_tmp, M ); + + /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode uses LSF(LSP) */ + mvr2r( stable_LSP, xsp_tmp, M ); + if ( st->hTdCngDec != NULL ) + { + isp2lsp( st->lspCNG, st->lspCNG, xsp_tmp, M ); + st->hTdCngDec->old_enr_index = min( (int16_t) ( (float) st->hTdCngDec->old_enr_index / STEP_AMR_WB_SID * STEP_SID ), 127 ); + } + + /* reset TD BWE buffers */ + if ( st->hBWE_TD != NULL ) + { + set_f( st->hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); + set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; + + wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); + wb_tbe_extras_reset_synth( st->hBWE_TD->state_lsyn_filt_shb, st->hBWE_TD->state_lsyn_filt_dwn_shb, st->hBWE_TD->mem_resamp_HB ); + + if ( output_frame >= L_FRAME32k ) + { + swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &st->hBWE_TD->tbe_demph, &st->hBWE_TD->tbe_premph, st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); + + /* reset GainShape delay for SWB TBE FEC */ + set_f( st->hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + + swb_tbe_reset_synth( st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); + } + + if ( output_frame == L_FRAME48k ) + { + set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + st->hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_synth( st->hBWE_TD->fbbwe_hpf_mem, &st->hBWE_TD->prev_fbbwe_ratio ); + } + } + st->last_voice_factor = 0.0f; + + /* reset FD BWE buffers */ + if ( st->hBWE_FD != NULL ) + { + st->hBWE_FD->prev_mode = NORMAL; + st->hBWE_FD->prev_Energy = 0.0f; + st->hBWE_FD->prev_Energy_wb = 0.0f; + st->hBWE_FD->prev_L_swb_norm = 8; + st->hBWE_FD->prev_frica_flag = 0; + set_f( st->hBWE_FD->mem_imdct, 0, L_FRAME48k ); + st->hBWE_FD->prev_td_energy = 0.0f; + st->hBWE_FD->prev_weight = 0.2f; + set_f( st->hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); + + if ( output_frame == L_FRAME48k ) + { + st->hBWE_FD->prev_fb_ener_adjust = 0.0f; + } + } + + /* HQ core buffers */ + set_f( st->delay_buf_out, 0, HQ_DELTA_MAX * HQ_DELAY_COMP ); + + /* reset the unvoiced/audio signal improvement memories */ + st->hGSCDec->seed_tcx = 15687; + + st->use_acelp_preq = 0; + if ( st->last_flag_filter_NB == 1 ) + { + st->cldfbSyn->bandsToZero = 0; + } + st->last_active_bandsToZero_bwdec = 0; + st->perc_bwddec = 0.0f; + st->last_flag_filter_NB = 0; + st->active_frame_cnt_bwddec = 0; + set_s( st->flag_buffer, 0, 20 ); + } + else /* switching to AMR-WB IO mode */ + { + float tmpF[MAX_LT]; + + /* ISF Q memories */ + set_f( st->mem_MA, 0, M ); + + /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ + mvr2r( stable_ISP, xsp_tmp, M ); + lsf2isf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); + mvr2r( stable_ISP, xsp_tmp, M ); + lsp2isp( st->lsp_old, st->lsp_old, xsp_tmp, M ); + + /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ + mvr2r( stable_ISP, xsp_tmp, M ); + if ( st->hTdCngDec != NULL ) + { + lsp2isp( st->lspCNG, st->lspCNG, xsp_tmp, M ); + st->hTdCngDec->old_enr_index = min( (int16_t) ( (float) st->hTdCngDec->old_enr_index / STEP_SID * STEP_AMR_WB_SID ), 63 ); + } + + /* HF synthesis memories */ + st->ng_ener_ST = -51.0f; + + /* reset the unvoiced/audio signal improvement memories */ + st->hGSCDec->seed_tcx = 15687; + + st->psf_lp_noise = st->lp_noise; + + /* AMR-WB IO init */ + mvr2r( st->hAmrwb_IO->lt_diff_etot, tmpF, MAX_LT ); + amr_wb_dec_init( st->hAmrwb_IO ); + mvr2r( tmpF, st->hAmrwb_IO->lt_diff_etot, MAX_LT ); + + hf_synth_amr_wb_reset( st->hAmrwb_IO, st->hBWE_zero ); + + /* reset VBR signalling */ + st->last_ppp_mode_dec = 0; + st->last_nelp_mode_dec = 0; + st->ppp_mode_dec = 0; + st->nelp_mode_dec = 0; + } + + /* CNG - reset */ + if ( st->hTdCngDec != NULL ) + { + st->hTdCngDec->ho_hist_size = 0; + } + + /* ISF Q memories */ + mvr2r( UVWB_Ave, st->mem_AR, M ); + + /* FEC - update adaptive LSF mean vector */ + mvr2r( st->lsf_old, st->lsfoldbfi0, M ); + mvr2r( st->lsf_old, st->lsfoldbfi1, M ); + mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); + + return; +} + +/*-------------------------------------------------------------------* + * updt_bw_switching() + * + * Updates for BW switching + *-------------------------------------------------------------------*/ + +void updt_bw_switching( + Decoder_State *st, /* i/o: decoder state structure */ + const float *synth /* i : float synthesis signal */ +) +{ + if ( st->output_Fs == 32000 && st->bwidth == SWB ) + { + calc_tilt_bwe( synth, &( st->tilt_swb ), L_FRAME32k ); + } + + st->prev_enerLH = st->enerLH; + st->prev_enerLL = st->enerLL; + st->last_bwidth = st->bwidth; + + if ( st->core == ACELP_CORE ) + { + if ( st->bwidth == WB && st->bws_cnt == 0 ) + { + st->last_inner_frame = L_FRAME16k; + } + else + { + st->last_inner_frame = L_FRAME32k; + } + } + else + { + if ( st->last_inner_frame >= L_FRAME16k && inner_frame_tbl[st->bwidth] <= L_FRAME16k && st->bws_cnt > 0 && st->bws_cnt < N_WS2N_FRAMES ) + { + st->last_inner_frame = st->last_inner_frame; + } + else + { + st->last_inner_frame = inner_frame_tbl[st->bwidth]; + } + } + + st->prev_bws_cnt = st->bws_cnt; + + return; +} + + +/*-------------------------------------------------------------------* + * updt_dec_common() + * + * Common updates for MODE1 and MODE2 + *-------------------------------------------------------------------*/ + +void updt_dec_common( + Decoder_State *st, /* i/o: decoder state structure */ + const int16_t hq_core_type, /* i : HQ core type */ + const int16_t concealWholeFrameTmp, /* i : concealWholeFrameTmp flag */ + const float *synth /* i : decoded synthesis */ +) +{ + int16_t i; + + st->last_codec_mode = st->codec_mode; + st->last_extl = st->extl; + st->last_L_frame = st->L_frame; + st->prev_old_bfi = st->prev_bfi; + st->prev_bfi = st->bfi; + if ( st->core != AMR_WB_CORE ) + { + st->old_bfi_cnt = st->nbLostCmpt; + } + st->last_con_tcx = st->con_tcx; + st->con_tcx = 0; + + if ( st->hHQ_nbfec != NULL ) + { + st->hHQ_nbfec->prev_last_core = st->last_core; + } + + if ( st->use_partial_copy ) + { + st->prev_rf_frame_type = st->rf_frame_type; + } + else + { + st->prev_rf_frame_type = INACTIVE; + } + + if ( st->hTcxDec != NULL ) + { + st->hTcxDec->tcxConceal_recalc_exc = 0; + } + + if ( ( st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 && st->use_partial_copy && st->bfi ) || !st->bfi ) + { + if ( st->bfi && st->last_good <= UNVOICED_TRANSITION && st->clas_dec > UNVOICED_TRANSITION && st->last_con_tcx && st->hTcxDec != NULL ) + { + st->hTcxDec->tcxConceal_recalc_exc = 1; + } + st->last_good = st->clas_dec; + } + + if ( st->m_frame_type == ACTIVE_FRAME && ( !st->bfi || st->use_partial_copy ) ) + { + st->rf_flag_last = st->rf_flag; + } + + if ( st->codec_mode == MODE1 ) + { + if ( !st->bfi && ( st->core_brate > SID_2k40 || ( st->core_brate > SID_1k75 && st->core == AMR_WB_CORE ) ) ) + { + st->last_active_brate = st->total_brate; + } + if ( !st->bfi || st->element_mode == EVS_MONO ) + { + st->last_core = st->core; + } + st->last_core_bfi = st->core; /* also required for clean channel decoding */ + if ( st->hHQ_core != NULL ) + { + st->hHQ_core->last_hq_core_type = hq_core_type; + } + } + else if ( st->codec_mode == MODE2 ) + { + if ( !st->bfi && st->last_is_cng == 0 ) + { + st->last_active_brate = st->total_brate; + } + + if ( st->m_frame_type != ACTIVE_FRAME ) + { + st->last_is_cng = 1; + } + + if ( !st->bfi ) + { + st->last_core = st->core; + } + st->last_core_bfi = st->core; /* also required for clean channel decoding */ + } + + st->last_core_brate = st->core_brate; + + /* save synthesis for core switching */ + if ( st->element_mode == EVS_MONO && st->core != AMR_WB_CORE ) + { + mvr2r( synth + NS2SA( st->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st->old_synth_sw, NS2SA( st->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) ); + } + + if ( ( st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) || ( st->tcxonly && st->codec_mode == MODE2 ) ) + { + /* reset LP memories */ + set_zero( st->mem_MA, M ); + if ( st->sr_core == INT_FS_16k ) + { + mvr2r( GEWB2_Ave, st->mem_AR, M ); + } + else + { + mvr2r( GEWB_Ave, st->mem_AR, M ); + } + } + + if ( st->codec_mode == MODE2 ) + { + if ( st->use_partial_copy && st->rf_frame_type == RF_NELP ) + { + st->last_nelp_mode_dec = 1; + } + else + { + st->last_nelp_mode_dec = 0; + } + } + + st->prev_use_partial_copy = st->use_partial_copy; + + st->prev_tilt_code_dec = 0.0f; + for ( i = 0; i < NB_SUBFR; i++ ) /* ToDo: why it supposes 12.8 kHz only and not 16kHz core? */ + { + st->prev_tilt_code_dec += st->tilt_code_dec[i] * 0.25f; + } + + if ( st->core == HQ_CORE ) + { + st->prev_coder_type = GENERIC; + } + else if ( st->core != AMR_WB_CORE ) + { + st->prev_coder_type = st->coder_type; + } + + /* CNG updates */ + if ( ( st->core_brate > SID_2k40 || ( st->core_brate > SID_1k75 && st->core == AMR_WB_CORE ) ) && st->first_CNG == 1 && st->hTdCngDec != NULL ) + { + if ( st->hTdCngDec->act_cnt >= BUF_DEC_RATE ) + { + st->hTdCngDec->act_cnt = 0; + } + + st->hTdCngDec->act_cnt++; + + if ( st->hTdCngDec->act_cnt == BUF_DEC_RATE && st->hTdCngDec->ho_hist_size > 0 ) + { + st->hTdCngDec->ho_hist_size--; + } + + if ( ++( st->hTdCngDec->act_cnt2 ) >= MIN_ACT_CNG_UPD ) + { + st->hTdCngDec->act_cnt2 = MIN_ACT_CNG_UPD; + } + } + + if ( st->core_brate <= SID_2k40 && st->first_CNG == 0 && ( st->cng_type == LP_CNG || st->element_mode == IVAS_CPE_MDCT ) ) + { + st->first_CNG = 1; + } + + /* synchronisation of CNG seeds */ + if ( st->hTdCngDec != NULL && ( st->bfi || ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) ) && st->core != AMR_WB_CORE ) + { + own_random( &( st->hTdCngDec->cng_seed ) ); + own_random( &( st->hTdCngDec->cng_ener_seed ) ); + } + + /* general updates */ + st->last_flag_cna = st->flag_cna; + if ( st->hFdCngDec != NULL ) + { + st->hFdCngDec->hFdCngCom->frame_type_previous = st->m_frame_type; + } + + if ( st->element_mode > EVS_MONO ) + { + st->m_old_frame_type = st->m_frame_type; + } + + /* update bandwidth switching parameters */ + if ( st->core == AMR_WB_CORE ) + { + st->last_bwidth = WB; + + st->prev_bws_cnt = 0; + st->bws_cnt = 0; + st->bws_cnt1 = 0; + } + else if ( ( st->codec_mode == MODE1 ) && ( ( st->core_brate > SID_2k40 ) || ( st->element_mode == EVS_MONO ) ) ) + { + updt_bw_switching( st, synth ); + } + else + { + st->last_bwidth = st->bwidth; + st->prev_bws_cnt = st->bws_cnt; + } + + if ( st->hTcxDec != NULL && st->enablePlcWaveadjust && !concealWholeFrameTmp && st->core != AMR_WB_CORE ) + { + /* update the parameters used in waveform adjustment */ + concealment_update2( synth, st->hPlcInfo, st->hTcxDec->L_frameTCX ); + } + + st->last_total_brate_ber = st->total_brate; + if ( !st->bfi ) + { + st->last_total_brate = st->total_brate; + st->last_bits_frame_nominal = st->bits_frame_nominal; + } + + /*-----------------------------------------------------------------* + * Increase the counter of initialization frames + * Limit the max number of init. frames + *-----------------------------------------------------------------*/ + + if ( st->ini_frame < MAX_FRAME_COUNTER ) + { + ( st->ini_frame )++; + } + + return; +} + +/*-------------------------------------------------------------------* + * update_decoder_LPD_cng() + * + * + *--------------------------------------------------------------------*/ + +void update_decoder_LPD_cng( + Decoder_State *st, + float *timeDomainBuffer, + float *A, + float *bpf_noise_buf ) +{ + int16_t i; + float lsp[M], lsf[M], pitch[NB_SUBFR16k]; + float *synth, synth_buf[M + 1 + L_FRAME_MAX + L_FRAME_MAX / 2]; + float tmp; + float buf_synth[OLD_SYNTH_SIZE_DEC + L_FRAME_MAX + M]; + int16_t pf_pitch[NB_SUBFR16k]; + float pf_gain[NB_SUBFR16k]; + TCX_DEC_HANDLE hTcxDec = st->hTcxDec; + + synth = synth_buf + ( 1 + M ); + + /* LPC -> LSP/lsp */ + a2lsp_stab( A, lsp, st->lsp_old ); + + /* LSP/lsp -> LSF/lsf */ + if ( st->L_frame == L_FRAME16k ) + { + lsp2lsf( lsp, lsf, M, INT_FS_16k ); + } + else + { + lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); + } + + if ( hTcxDec != NULL ) + { + mvr2r( hTcxDec->old_synth, buf_synth, hTcxDec->old_synth_len ); + mvr2r( timeDomainBuffer, buf_synth + hTcxDec->old_synth_len, st->L_frame ); + + /* Update synth memory */ + mvr2r( st->syn, synth_buf, 1 + M ); + mvr2r( timeDomainBuffer, synth, st->L_frame ); + mvr2r( synth + st->L_frame - ( 1 + M ), st->syn, 1 + M ); + mvr2r( hTcxDec->old_synth + st->L_frame, hTcxDec->old_synth, hTcxDec->old_synth_len - st->L_frame ); + mvr2r( synth, hTcxDec->old_synth + hTcxDec->old_synth_len - st->L_frame, st->L_frame ); + + mvr2r( synth + st->L_frame - ( st->L_frame / 2 ), hTcxDec->old_syn_Overl, st->L_frame / 2 ); + + hTcxDec->tcxltp_last_gain_unmodified = 0.0f; + } + + /* Update pre-synth memory */ + tmp = synth[-( 1 + M )]; + preemph( synth - M, st->preemph_fac, M + st->L_frame, &tmp ); + mvr2r( synth + st->L_frame - M, st->mem_syn2, M ); + mvr2r( synth + st->L_frame - L_SYN_MEM, st->mem_syn_r, L_SYN_MEM ); + + /* Update excitation memory */ + assert( st->L_frame < L_EXC_MEM_DEC ); + mvr2r( st->old_exc + st->L_frame, st->old_exc, L_EXC_MEM_DEC - st->L_frame ); + residu( A, M, synth, st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame ); + + /* Update LPC-related memories */ + mvr2r( lsp, st->lsp_old, M ); + mvr2r( lsf, st->lsf_old, M ); + mvr2r( lsp, st->lspold_uw, M ); + mvr2r( lsf, st->lsfold_uw, M ); + + hTcxDec->envWeighted = 0; + mvr2r( A, st->old_Aq_12_8, M + 1 ); + st->old_Es_pred = 0; + + /* Reset acelp memories */ + set_zero( st->dispMem, 8 ); + st->tilt_code = TILT_CODE; + st->gc_threshold = 0.0f; + + /* Update ace/tcx mode */ + st->core = ACELP_CORE; + st->last_is_cng = 1; + + /* Reset TCX overlap */ + if ( st->hTcxCfg != NULL ) + { + st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + } + + /* For BWE and Postfilter */ + mvr2r( A, &( st->mem_Aq[0] ), M + 1 ); + mvr2r( A, &( st->mem_Aq[( M + 1 )] ), M + 1 ); + mvr2r( A, &( st->mem_Aq[2 * ( M + 1 )] ), M + 1 ); + mvr2r( A, &( st->mem_Aq[3 * ( M + 1 )] ), M + 1 ); + if ( st->L_frame == L_FRAME16k ) + { + mvr2r( A, &( st->mem_Aq[4 * ( M + 1 )] ), M + 1 ); + } + + /* Update for concealment */ + st->nbLostCmpt = 0; + st->prev_old_bfi = 0; + + for ( i = 0; i < M; i++ ) + { + st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsf[i] ) / 3; + st->lsfoldbfi1[i] = st->lsfoldbfi0[i]; + st->lsfoldbfi0[i] = lsf[i]; + } + + set_f( pitch, (float) L_SUBFR, NB_SUBFR16k ); + + FEC_clas_estim( synth, pitch, st->L_frame, UNVOICED, st->codec_mode, st->mem_syn_clas_estim, &( st->clas_dec ), &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, st->narrowBand, CLASSIFIER_ACELP, 0, st->preemph_fac, st->tcxonly, st->last_core_brate, -1 ); + + /* Postfiltering */ + pf_pitch[0] = pf_pitch[1] = pf_pitch[2] = pf_pitch[3] = pf_pitch[4] = L_SUBFR; + pf_gain[0] = pf_gain[1] = pf_gain[2] = pf_gain[3] = pf_gain[4] = 0.f; + st->bpf_gain_param = 0; + + post_decoder( st, buf_synth, pf_gain, pf_pitch, timeDomainBuffer, bpf_noise_buf ); + + return; +} diff --git a/lib_dec/vlpc_1st_dec.c b/lib_dec/vlpc_1st_dec.c new file mode 100644 index 0000000000..1aa1ab72f2 --- /dev/null +++ b/lib_dec/vlpc_1st_dec.c @@ -0,0 +1,68 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * vlpc_1st_dec() + * + * + *------------------------------------------------------------------*/ + +void vlpc_1st_dec( + const int16_t index, /* i : codebook index */ + float *lsfq, /* i/o: i:prediction o:quantized lsf */ + const int32_t sr_core ) +{ + int16_t i; + const float *p_dico; + float scale = ( (float) sr_core ) / INT_FS_12k8; + + assert( index < 256 ); + + p_dico = &dico_lsf_abs_8b[index * M]; + for ( i = 0; i < M; i++ ) + { + lsfq[i] += scale * *p_dico++; + } + + return; +} diff --git a/lib_dec/vlpc_2st_dec.c b/lib_dec/vlpc_2st_dec.c new file mode 100644 index 0000000000..83163cda78 --- /dev/null +++ b/lib_dec/vlpc_2st_dec.c @@ -0,0 +1,77 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * vlpc_2st_dec() + * + * + *------------------------------------------------------------------*/ + +void vlpc_2st_dec( + float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ + int16_t *indx, /* i : index[] (4 bits per words) */ + const int16_t mode, /* i : 0=abs, >0=rel */ + const int32_t sr_core /* i : internal sampling rate */ +) +{ + int16_t i; + float w[M]; + int16_t xq[M]; + float scale = ( (float) sr_core ) / INT_FS_12k8; + + /* weighting from the 1st stage */ + lsf_weight_2st( lsfq, w, mode, sr_core ); + + /* quantize */ + AVQ_dec_lpc( indx, xq, 2 ); + + /* quantized lsf */ + for ( i = 0; i < M; i++ ) + { + lsfq[i] += scale * ( w[i] * (float) xq[i] ); + } + + /* reorder */ + v_sort( lsfq, 0, M - 1 ); + reorder_lsf( lsfq, LSF_GAP, M, sr_core ); + + return; +} diff --git a/lib_dec/voiced_dec.c b/lib_dec/voiced_dec.c new file mode 100644 index 0000000000..08d58ffc7d --- /dev/null +++ b/lib_dec/voiced_dec.c @@ -0,0 +1,278 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * ppp_voiced_decoder() + * + * Voiced decoder for SC-VBR + *-------------------------------------------------------------------*/ + +ivas_error ppp_voiced_decoder( + Decoder_State *st, /* i/o: state structure */ + float *out, /* o : residual signal */ + const float *lpc2, /* i : current frame LPC */ + float *exc, /* i : previous frame excitation */ + float *pitch, /* o : floating pitch values for each subframe */ + const int16_t bfi /* i : BFI flag */ +) +{ + int16_t k, delta_lag_D = 0; + SC_VBR_DEC_HANDLE hSC_VBR; + float upper_cut_off_freq_of_interest = 0, upper_cut_off_freq = 0; + int16_t pl, l; + float interp_delay[3], temp_l, temp_pl, diff; + DTFS_STRUCTURE *TMPDTFS; + DTFS_STRUCTURE *CURRP_Q_D; + DTFS_STRUCTURE *dtfs_temp; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( error = DTFS_new( &TMPDTFS ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + if ( ( error = DTFS_new( &CURRP_Q_D ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + if ( ( error = DTFS_new( &dtfs_temp ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + + hSC_VBR = st->hSC_VBR; + + if ( st->bwidth == NB ) + { + upper_cut_off_freq_of_interest = 3300.0; + upper_cut_off_freq = 4000.0; + } + else if ( st->bwidth == WB ) + { + upper_cut_off_freq_of_interest = 4000.0; + upper_cut_off_freq = 6400.0; + } + + /* Initialization */ + if ( hSC_VBR->firstTime_voiceddec ) + { + hSC_VBR->firstTime_voiceddec = 0; + + hSC_VBR->dtfs_dec_lag = 0; + hSC_VBR->dtfs_dec_nH = 0; + hSC_VBR->dtfs_dec_nH_4kHz = 0; + hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest = 3300.0; + hSC_VBR->dtfs_dec_upper_cut_off_freq = 4000.0; + + for ( k = 0; k < MAXLAG_WI; k++ ) + { + hSC_VBR->dtfs_dec_a[k] = 0.0; + hSC_VBR->dtfs_dec_b[k] = 0.0; + } + } + pl = (int16_t) min( rint_new( st->old_pitch_buf[( 2 * NB_SUBFR ) - 1] ), MAX_LAG_PIT ); + delta_lag_D = get_next_indice( st, 5 ); + + l = min( MAX_LAG_PIT, pl + delta_lag_D - 11 ); + + temp_pl = (float) pl; + temp_l = (float) l; + + if ( temp_pl != temp_l ) + { + for ( k = 0; k < NB_SUBFR; k++ ) + { + /* do the linear pitch interp to drive the nb_post_filt */ + Interpol_delay( interp_delay, &( temp_pl ), &( temp_l ), k, frac_4sf ); + pitch[k] = min( MAX_LAG_PIT, max( 19, interp_delay[0] ) ); + } + } + else + { + set_f( pitch, min( MAX_LAG_PIT, max( 19, temp_l ) ), NB_SUBFR ); + } + + if ( st->last_coder_type == UNVOICED ) + { + pl = l; /* if prev frame was sil/uv*/ + } + + if ( pl > (int16_t) anint( 1.85 * l ) ) + { + pl /= 2; + } + + if ( pl * 2 <= PIT_MAX && pl <= (int16_t) anint( 0.54 * l ) ) + { + pl *= 2; + } + + /* Restoring PPP memories when the last frame is non-PPP or full-rate PPP */ + if ( st->last_ppp_mode_dec != 1 ) + { + DTFS_to_fs( exc - pl, pl, dtfs_temp, st->bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); + + hSC_VBR->ph_offset_D = 0.0; + + /* Copy over PREV_CW_D into TMPDTFS */ + DTFS_copy( TMPDTFS, *dtfs_temp ); + + DTFS_car2pol( TMPDTFS ); + + hSC_VBR->lastLgainD = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, TMPDTFS ) ); + hSC_VBR->lastHgainD = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 1104.5, upper_cut_off_freq_of_interest, 1104.5, upper_cut_off_freq, 1.0, TMPDTFS ) ); + + DTFS_to_erb( *TMPDTFS, hSC_VBR->lasterbD ); + } + else + { + /* Copy DTFS related parameters from 'st' to 'dtfs_temp' structure */ + dtfs_temp->lag = hSC_VBR->dtfs_dec_lag; + dtfs_temp->nH = hSC_VBR->dtfs_dec_nH; + dtfs_temp->nH_4kHz = hSC_VBR->dtfs_dec_nH_4kHz; + dtfs_temp->upper_cut_off_freq_of_interest = hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest; + dtfs_temp->upper_cut_off_freq = hSC_VBR->dtfs_dec_upper_cut_off_freq; + + mvr2r( hSC_VBR->dtfs_dec_a, dtfs_temp->a, MAXLAG_WI ); + mvr2r( hSC_VBR->dtfs_dec_b, dtfs_temp->b, MAXLAG_WI ); + } + + CURRP_Q_D->lag = l; + + /* safety check in case of bit errors */ + if ( CURRP_Q_D->lag <= 0 ) + { + CURRP_Q_D->lag = 1; + st->BER_detect = 1; + } + + /* compute nH for lag */ + CURRP_Q_D->nH = (int16_t) floor( upper_cut_off_freq / ( ( (float) INT_FS_12k8 ) / CURRP_Q_D->lag ) ); + diff = ( (float) INT_FS_12k8 ) / CURRP_Q_D->lag; + + if ( upper_cut_off_freq - ( diff * CURRP_Q_D->nH ) >= diff ) + { + CURRP_Q_D->nH++; + } + + CURRP_Q_D->nH_4kHz = (int16_t) floor( 4000.0 / ( INT_FS_12k8 / CURRP_Q_D->lag ) ); + + if ( 4000.0 - ( diff * CURRP_Q_D->nH_4kHz ) >= diff ) + { + CURRP_Q_D->nH_4kHz++; + } + + CURRP_Q_D->upper_cut_off_freq = dtfs_temp->upper_cut_off_freq; + CURRP_Q_D->upper_cut_off_freq_of_interest = dtfs_temp->upper_cut_off_freq_of_interest; + + if ( bfi == 0 ) + { + if ( ( error = ppp_quarter_decoder( st, CURRP_Q_D, dtfs_temp->lag, &( hSC_VBR->lastLgainD ), &( hSC_VBR->lastHgainD ), &( hSC_VBR->lasterbD[0] ), bfi, *dtfs_temp ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ( error = WIsyn( *dtfs_temp, CURRP_Q_D, lpc2, &( hSC_VBR->ph_offset_D ), out, (int16_t) L_FRAME, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + + DTFS_copy( dtfs_temp, *CURRP_Q_D ); + + /* Copy DTFS related parameters from 'dtfs_temp' to 'st' structure */ + hSC_VBR->dtfs_dec_lag = dtfs_temp->lag; + hSC_VBR->dtfs_dec_nH = dtfs_temp->nH; + hSC_VBR->dtfs_dec_nH_4kHz = dtfs_temp->nH_4kHz; + hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest = dtfs_temp->upper_cut_off_freq_of_interest; + hSC_VBR->dtfs_dec_upper_cut_off_freq = dtfs_temp->upper_cut_off_freq; + + mvr2r( dtfs_temp->a, hSC_VBR->dtfs_dec_a, MAXLAG_WI ); + mvr2r( dtfs_temp->b, hSC_VBR->dtfs_dec_b, MAXLAG_WI ); + + count_free( TMPDTFS ); + count_free( CURRP_Q_D ); + count_free( dtfs_temp ); + + return error; +} + + +/*---------------------------------------------------------------------* + * sc_vbr_dec_init() + * + * Initialize SC-VBR decoder + *---------------------------------------------------------------------*/ + +void sc_vbr_dec_init( + SC_VBR_DEC_HANDLE hSC_VBR /* i/o: SC-VBR decoder handle */ +) +{ + hSC_VBR->nelp_dec_seed = 0; + hSC_VBR->firstTime_voiceddec = 1; + + /* DTFS variables */ + set_f( hSC_VBR->dtfs_dec_a, 0, MAXLAG_WI ); + set_f( hSC_VBR->dtfs_dec_b, 0, MAXLAG_WI ); + hSC_VBR->dtfs_dec_lag = 0; + hSC_VBR->dtfs_dec_nH = 0; + hSC_VBR->dtfs_dec_nH_4kHz = 0; + hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest = 0; + hSC_VBR->dtfs_dec_upper_cut_off_freq = 0; + hSC_VBR->ph_offset_D = 0; + hSC_VBR->lastLgainD = 0; + hSC_VBR->lastHgainD = 0; + set_f( hSC_VBR->lasterbD, 0, NUM_ERB_WB ); + + /* NELP decoder variables */ + set_f( hSC_VBR->bp1_filt_mem_nb_dec, 0, 14 ); + set_f( hSC_VBR->bp1_filt_mem_wb_dec, 0, 8 ); + set_f( hSC_VBR->shape1_filt_mem_dec, 0, 20 ); + set_f( hSC_VBR->shape2_filt_mem_dec, 0, 20 ); + set_f( hSC_VBR->shape3_filt_mem_dec, 0, 20 ); + + return; +} diff --git a/lib_dec/waveadjust_fec_dec.c b/lib_dec/waveadjust_fec_dec.c new file mode 100644 index 0000000000..222fb66599 --- /dev/null +++ b/lib_dec/waveadjust_fec_dec.c @@ -0,0 +1,893 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local functions + * + *-------------------------------------------------------------------*/ + +static void LpFilter2( + const float *x, + float *y, + const int16_t N, + float *mem ) +{ + int16_t i; + + y[0] = 0.18f * mem[0] + 0.64f * mem[1] + 0.18f * x[0]; + y[1] = 0.18f * mem[1] + 0.64f * y[0] + 0.18f * x[1]; + + for ( i = 2; i < N; i++ ) + { + y[i] = 0.18f * y[i - 2] + 0.64f * y[i - 1] + 0.18f * x[i]; + } + + return; +} + +static float harmo( + const float *X, + const int16_t n, + const float f ) +{ + int16_t h, k, m = 8; + float ener = 0, ener_harmo = 0; + + for ( k = 1; k < m + 1; k++ ) + { + h = (int16_t) ( k * f - 0.5f ); + if ( k * f - h > 0.5f ) + { + ener_harmo += X[h] * X[h] + X[h + 1] * X[h + 1]; + } + else + { + ener_harmo += X[h] * X[h]; + } + } + + for ( k = 0; k < n; k++ ) + { + ener += X[k] * X[k]; + } + + return ener_harmo / ( ener + EPSILON ); +} + + +static int16_t Is_Periodic( + const float cov_max, + const int16_t zp, + const float ener, + const float ener_mean, + const int16_t pitch, + const int16_t L_frameTCX, + const float *mdctdata ) +{ + int16_t flag = 0; + float f = 2.0f * L_frameTCX / pitch; + float harm; + + harm = harmo( mdctdata /*X*/, L_frameTCX, f ); + + if ( ener < 50 || ( ener < ener_mean - 8.0f && cov_max < 0.9f ) ) + { + flag = 0; + } + else if ( cov_max > 0.8f ) + { + flag = 1; + } + else if ( zp > 100 ) + { + flag = 0; + } + else if ( ener < ener_mean - 6 ) + { + flag = 0; + } + else if ( ener > ener_mean + 1 && cov_max > 0.6f ) + { + flag = 1; + } + else if ( harm < 0.7f ) + { + flag = 0; + } + else + { + flag = 1; + } + + return flag; +} + + +static int16_t zero_pass( + const float *s, + const int16_t N ) +{ + int16_t zp = 0, i; + + for ( i = 1; i < N; i++ ) + { + if ( s[i - 1] * s[i] <= 0 ) + { + zp++; + } + } + + return zp; +} + + +static float sig_tilt( + const float *s, + const int16_t L_frameTCX ) +{ + float tilt, enr1, enr2; + int16_t L_subfr, shift = 2; + const float *p1, *p2; + + L_subfr = L_frameTCX >> 2; + p1 = s + L_subfr; + p2 = s + L_subfr - shift; + enr1 = dotp( p1, p2, L_frameTCX - L_subfr ); + enr2 = dotp( p1, p1, L_frameTCX - L_subfr ); + tilt = enr1 / ( enr2 + EPSILON ); + + return tilt; +} + + +static int16_t pitch_search( + float *s, /* lastPcmOut */ + float *outx_new, + const int16_t L_frameTCX, + float *voicing, + int16_t *zp, + float *ener, + float ener_mean, + float *mdct_data, + const int16_t core ) +{ + int16_t pitch, t, i; + float cov_max, temp, tmp, tilt, mdct_ener, low_freq_rate; + float s_LP[L_FRAME_MAX]; + float s_tmp[L_FRAME_MAX]; + int16_t L_frameTCX_tmp; + int16_t pitch_tmp[3]; + float mem[2]; + int16_t start_pos, end_pos; + int16_t cov_size; + int16_t flag, zp_current; + int16_t curr_frmsize; + float tmp_last; + float cov_max_tmp; + float temp2, voicing2; + + set_f( s_LP, 0, L_FRAME_MAX ); + mem[0] = 0.0f; + mem[1] = 0.0f; + tmp_last = 0; + cov_max_tmp = 0; + flag = 0; + + curr_frmsize = L_frameTCX; + if ( core == TCX_10_CORE ) + { + curr_frmsize = L_frameTCX >> 1; + } + + zp_current = zero_pass( outx_new, curr_frmsize ); + if ( core == TCX_10_CORE ) + { + zp_current = zp_current << 1; + } + + if ( L_frameTCX <= L_FRAME ) + { + if ( zp_current > 70 ) + { + return 0; + } + } + else + { + if ( zp_current > 105 ) + { + return 0; + } + } + + t = 30; + if ( core == TCX_10_CORE ) + { + t = 30 / 2; + mdct_data = mdct_data + curr_frmsize; + } + + mdct_ener = 0; + for ( i = 0; i < t; i++ ) + { + mdct_ener += mdct_data[i] * mdct_data[i]; + } + low_freq_rate = mdct_ener; + for ( ; i < curr_frmsize; i++ ) + { + mdct_ener += mdct_data[i] * mdct_data[i]; + } + low_freq_rate /= ( mdct_ener + EPSILON ); + + if ( core == TCX_10_CORE ) + { + mdct_data = mdct_data - curr_frmsize; + } + + if ( low_freq_rate < 0.02f ) + { + return 0; + } + + LpFilter2( s, s_LP, L_frameTCX, mem ); + + tilt = sig_tilt( s_LP, L_frameTCX ); + + if ( L_frameTCX <= L_FRAME16k ) + { + if ( tilt < 0.5f ) + { + return 0; + } + } + else + { + if ( tilt < 0.7f ) + { + return 0; + } + } + + cov_max = 0; + pitch = 0; + if ( L_frameTCX <= L_FRAME16k ) + { + start_pos = (int16_t) ( L_frameTCX * 34 / 256.0 + 0.5f ); + end_pos = (int16_t) ( L_frameTCX * 3 / 4.0 + 0.5f ); + for ( t = start_pos; t < end_pos; t++ ) + { + cov_size = L_frameTCX - t; + tmp = dotp( s_LP, s_LP + t, cov_size ) / cov_size; + if ( t > start_pos ) /* don't use the first value */ + { + if ( tmp > tmp_last ) /* store the current cov, if it is larger than the last one */ + { + cov_max_tmp = tmp; + } + else if ( cov_max < cov_max_tmp ) /* otherwise */ + { + cov_max = cov_max_tmp; /* use the last value cov, being a max */ + pitch = t - 1; /* and the last index as pitch */ + } + } + tmp_last = tmp; + } + + temp = (float) ( sqrt( dotp( s_LP + pitch, s_LP + pitch, L_frameTCX - pitch ) ) * sqrt( dotp( s_LP, s_LP, L_frameTCX - pitch ) ) ); + + *voicing = cov_max * ( L_frameTCX - pitch ) / ( temp + EPSILON ); + + temp2 = (float) ( sqrt( dotp( s_LP + ( pitch >> 1 ), s_LP + ( pitch >> 1 ), L_frameTCX - ( pitch >> 1 ) ) ) * sqrt( dotp( s_LP, s_LP, L_frameTCX - ( pitch >> 1 ) ) ) ); + + voicing2 = dotp( s_LP + ( pitch >> 1 ), s_LP, L_frameTCX - ( pitch >> 1 ) ) / temp2; + + if ( voicing2 > *voicing ) + { + pitch = pitch >> 1; + *voicing = voicing2; + } + } + else + { + L_frameTCX_tmp = L_frameTCX >> 1; + + for ( i = 0; i < L_frameTCX_tmp; i++ ) + { + s_tmp[i] = s_LP[2 * i]; + } + + start_pos = (int16_t) ( ( 34.0f * L_frameTCX_tmp ) / L_FRAME + 0.5f ); + end_pos = (int16_t) ( ( L_frameTCX_tmp >> 1 ) * 1.5f + 0.5f ); + for ( t = start_pos; t < end_pos; t++ ) + { + cov_size = L_frameTCX_tmp - t; + tmp = dotp( s_tmp, s_tmp + t, cov_size ) / cov_size; + + if ( t > start_pos ) /* don't use the first value */ + { + if ( tmp > tmp_last ) /* store the current cov, if it is larger than the last one */ + { + cov_max_tmp = tmp; + } + else if ( cov_max < cov_max_tmp ) /* otherwise */ + { + cov_max = cov_max_tmp; /* use the last value cov, being a max */ + pitch = t - 1; /* and the last index as pitch */ + } + } + + tmp_last = tmp; + } + + if ( pitch > 0 ) + { + pitch_tmp[0] = max( 2 * pitch - 1, 0 ); + pitch_tmp[1] = 2 * pitch; + pitch_tmp[2] = 2 * pitch + 1; + cov_max = 0; + pitch = 0; + + for ( i = 0; i < 3; i++ ) + { + cov_size = L_frameTCX - pitch_tmp[i]; + + temp = (float) ( sqrt( dotp( s_LP + pitch_tmp[i], s_LP + pitch_tmp[i], cov_size ) ) * sqrt( dotp( s_LP, s_LP, cov_size ) ) ); + + tmp = dotp( s_LP, s_LP + pitch_tmp[i], cov_size ) / ( temp + EPSILON ); + + if ( tmp > cov_max ) + { + cov_max = tmp; + pitch = pitch_tmp[i]; + } + } + + *voicing = cov_max; + } + } + + if ( pitch > 0 ) + { + flag = Is_Periodic( *voicing, *zp, *ener, ener_mean, pitch, L_frameTCX, mdct_data ); + } + + if ( flag == 0 ) + { + pitch = 0; + } + + return pitch; +} + + +static int16_t OverlapAdd( + float *pitch125_data, + float *sbuf, + const int16_t n, + const int16_t pitch, + const int16_t Bufsize ) +{ + int16_t pitch125 = (int16_t) floor( 0.5f + ( 1.25f * (float) pitch ) ); + int16_t Loverlap = pitch125 - pitch; + int16_t n1 = min( Loverlap, Bufsize - n ); + int16_t n2 = min( pitch125, Bufsize - n ); + int16_t i; + float tmp, dat; + + for ( i = 0; i < n1; i++ ) + { + tmp = (float) i / (float) Loverlap; + dat = sbuf[n + i]; + sbuf[n + i] = (float) ( ( 1.0 - tmp ) * dat + tmp * pitch125_data[i] ); + } + + for ( i = n1; i < n2; i++ ) + { + sbuf[n + i] = pitch125_data[i]; + } + + return ( n + pitch ); +} + + +static void add_noise( + float *sbuf, + float *outx_new_n1, + float *noise_seg, + const int16_t Len, + float *gain, + const float *gain_n, + const int16_t firstFrame ) +{ + int16_t i; + + if ( !firstFrame ) + { + sbuf[0] += *gain * ( noise_seg[0] - 0.68f * ( *outx_new_n1 ) ); + *gain = 0.99f * ( *gain ) + 0.01f * ( *gain_n ); + } + for ( i = 1; i < Len; i++ ) + { + sbuf[i] += *gain * ( noise_seg[i] - 0.68f * noise_seg[i - 1] ); + *gain = 0.99f * ( *gain ) + 0.01f * ( *gain_n ); + } + *outx_new_n1 = noise_seg[i - 1]; + + return; +} + +static int16_t waveform_adj( + T_PLCInfo_HANDLE hPlcInfo, + float *overlapbuf, + float *outdata2, + float *outx_new, + const int16_t L_frameTCX, + const float voicing, + const int16_t core ) +{ + int16_t i, i1, i2, zp1, zp2, pitch; + float sbuf[L_FRAME_MAX]; + float tmp_buf[L_FRAME_MAX], *p_tmp; + int16_t pitch125, Loverlap, n; + float pitch125_data[L_FRAME_MAX]; + + set_f( sbuf, 0, L_FRAME_MAX ); + set_f( tmp_buf, 0, L_FRAME_MAX ); + set_f( pitch125_data, 0, L_FRAME_MAX ); + + zp1 = zero_pass( outdata2, L_frameTCX >> 1 ); + zp2 = zero_pass( outdata2 + ( L_frameTCX >> 1 ), L_frameTCX >> 1 ); + + pitch = hPlcInfo->Pitch; + + /* judge if the pitch is usable */ + if ( 4 * max( zp1, 1 ) < zp2 ) + { + return 0; + } + + /* adjust the pitch value */ + if ( hPlcInfo->T_bfi && pitch <= L_frameTCX >> 1 && L_frameTCX > L_FRAME && core == TCX_20_CORE ) + { + i1 = 1 + maximum( outx_new, pitch, NULL ); + i2 = 1 + maximum( outx_new + pitch, pitch, NULL ); + if ( (float) ( i2 + pitch - i1 ) < ( 1.25f * pitch ) && ( 1.25f * ( i2 + pitch - i1 ) ) > (float) pitch && (float) ( i2 + pitch - i1 ) < (float) ( L_frameTCX >> 1 ) ) + { + pitch = i2 + pitch - i1; + } + } + + pitch125 = (int16_t) floor( 0.5f + ( 1.25f * (float) pitch ) ); + Loverlap = pitch125 - pitch; + mvr2r( outdata2 + L_frameTCX - pitch, pitch125_data, pitch ); + mvr2r( outx_new, pitch125_data + pitch, Loverlap ); + mvr2r( outx_new, sbuf, L_frameTCX ); + + p_tmp = tmp_buf + 1; + mvr2r( pitch125_data, p_tmp, pitch125 ); + p_tmp[-1] = outdata2[L_frameTCX - pitch - 1]; + p_tmp[pitch125] = outx_new[Loverlap]; + for ( i = 0; i < pitch125; i++ ) + { + pitch125_data[i] = 0.18f * p_tmp[i - 1] + 0.64f * p_tmp[i] + 0.18f * p_tmp[i + 1]; + } + + n = 0; + while ( n < L_frameTCX ) /* periodical extension */ + { + n = OverlapAdd( pitch125_data, sbuf, n, pitch, L_frameTCX ); + } + + /* maximum pitch lag is 3/4 L_frameTCX; pitch125_data is reused for + temporary storage, since outdata2 (holding the pcm data of the + last good frame) is still needed and overlapbuf overlaps outdata2 */ + mvr2r( &sbuf[L_frameTCX / 4], pitch125_data, ( 3 * L_frameTCX ) / 4 ); + + hPlcInfo->nsapp_gain = 0.0; + hPlcInfo->nsapp_gain_n = 1.0f - voicing / 2; + + /* use last good signal for noise generation */ + add_noise( sbuf, &( hPlcInfo->outx_new_n1 ), outdata2, L_frameTCX, &( hPlcInfo->nsapp_gain ), &( hPlcInfo->nsapp_gain_n ), 1 ); + + /* save current (noisy) output from IMDCT */ + mvr2r( outx_new, hPlcInfo->data_noise, L_frameTCX ); + + /* overlapbuf can now be filled with sbuf, needed for subsequently lost frames */ + mvr2r( pitch125_data, &overlapbuf[L_frameTCX / 4], ( 3 * L_frameTCX ) / 4 ); + + for ( i = 0; i < L_frameTCX; i++ ) + { + outx_new[i] = sbuf[i]; + } + + return pitch; +} + + +/*-------------------------------------------------------------------* + * waveform_adj2() + * + *-------------------------------------------------------------------*/ + +void waveform_adj2( + T_PLCInfo_HANDLE hPlcInfo, + float *overlapbuf, + float *outx_new, + const int16_t delay, + const int16_t bfi_cnt, + const int16_t bfi ) +{ + int16_t i, n = 0; + float ratio; + float sbuf[L_FRAME_MAX]; + int16_t pitch, L_frameTCX; + + pitch = hPlcInfo->Pitch; + L_frameTCX = hPlcInfo->L_frameTCX; + + if ( pitch > 0 ) + { + while ( n < L_frameTCX ) + { + /* periodical extension */ + for ( i = 0; i < min( pitch, L_frameTCX - n ); i++ ) + { + sbuf[n + i] = overlapbuf[L_frameTCX - pitch + i]; + } + n += pitch; + } + for ( i = 0; i < L_frameTCX; i++ ) + { + overlapbuf[i] = sbuf[i]; + } + + /* use last (noisy) output from IMDCT for noise generation */ + add_noise( sbuf, &( hPlcInfo->outx_new_n1 ), hPlcInfo->data_noise, L_frameTCX, &( hPlcInfo->nsapp_gain ), &( hPlcInfo->nsapp_gain_n ), 0 ); + + if ( bfi ) + { + /* save current (noisy) output from IMDCT */ + mvr2r( outx_new, hPlcInfo->data_noise, L_frameTCX ); + } + + if ( bfi_cnt == 4 || bfi == 0 ) + { + if ( bfi == 0 ) + { + int16_t gain_zero_start = 10000; + /* overlap-and-add */ + if ( hPlcInfo->step_concealgain > EPSILON ) + { + gain_zero_start = (int16_t) min( (float) L_FRAME48k, ( hPlcInfo->recovery_gain / hPlcInfo->step_concealgain ) ) + 1; + } + + if ( delay > 0 ) + { + L_frameTCX -= delay; + } + for ( i = 0; i < min( gain_zero_start, L_frameTCX ); i++ ) + { + ratio = (float) i / (float) L_frameTCX; + outx_new[i] = ( 1 - ratio ) * sbuf[i] * hPlcInfo->recovery_gain + ratio * outx_new[i]; + hPlcInfo->recovery_gain -= hPlcInfo->step_concealgain; + } + for ( i = gain_zero_start; i < L_frameTCX; i++ ) + { + ratio = (float) i / (float) L_frameTCX; + outx_new[i] = ratio * outx_new[i]; + } + if ( hPlcInfo->recovery_gain < 0.0f ) + { + hPlcInfo->recovery_gain = 0.0f; + } + } + else + { + /* overlap-and-add */ + for ( i = 0; i < L_frameTCX; i++ ) + { + ratio = (float) i / (float) L_frameTCX; + outx_new[i] = ( 1 - ratio ) * sbuf[i] + ratio * outx_new[i]; + } + } + } + else + { + mvr2r( sbuf, outx_new, L_frameTCX ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * set_state() + * + * + *-------------------------------------------------------------------*/ + +void set_state( + int16_t *state, + const int16_t num, + const int16_t N ) +{ + int16_t i; + + for ( i = 0; i < N - 1; i++ ) + { + state[i] = state[i + 1]; + } + state[N - 1] = num; + + return; +} + + +/*-------------------------------------------------------------------* + * concealment_init() + * + * + *-------------------------------------------------------------------*/ + +void concealment_init( + const int16_t L_frameTCX, + T_PLCInfo_HANDLE hPlcInfo ) +{ + int16_t i; + + hPlcInfo->L_frameTCX = L_frameTCX; + hPlcInfo->Pitch = 0; + hPlcInfo->T_bfi = 0; + hPlcInfo->outx_new_n1 = 0.0f; + hPlcInfo->nsapp_gain = 0.0f; + hPlcInfo->nsapp_gain_n = 0.0f; + hPlcInfo->ener_mean = 59.4260f; + hPlcInfo->ener = 0.0f; + hPlcInfo->zp = L_frameTCX; + hPlcInfo->recovery_gain = 0.0f; + hPlcInfo->step_concealgain = 0.0f; + hPlcInfo->concealment_method = TCX_NONTONAL; + hPlcInfo->subframe = 0; + hPlcInfo->nbLostCmpt = 0; + hPlcInfo->seed = RANDOM_INITSEED; + + for ( i = 0; i < TCX_TONALITY_INIT_CNT; i++ ) + { + hPlcInfo->TCX_Tonality[i] = 1; + } + for ( i = TCX_TONALITY_INIT_CNT; i < DEC_STATE_LEN; i++ ) + { + hPlcInfo->TCX_Tonality[i] = 0; + } + for ( i = 0; i < MAX_POST_LEN; i++ ) + { + hPlcInfo->Transient[i] = 1; + } + + for ( i = 0; i < L_FRAME_MAX; i++ ) + { + hPlcInfo->data_reci2[i] = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * concealment_decode() + * + * + *-------------------------------------------------------------------*/ + +void concealment_decode( + const int16_t core, + float *invkoef, + T_PLCInfo_HANDLE hPlcInfo ) +{ + int16_t i; + int16_t *seed = &( hPlcInfo->seed ); + int16_t sign; + + if ( hPlcInfo->concealment_method == TCX_NONTONAL ) + { + if ( core == TCX_20_CORE ) + { + /* copy the data of the last frame */ + mvr2r( hPlcInfo->data_reci2, invkoef, hPlcInfo->L_frameTCX ); + + /* sign randomization */ + for ( i = 0; i < hPlcInfo->L_frameTCX; i++ ) + { + sign = ( ( own_random( seed ) >> 15 ) << 1 ) + 1; + invkoef[i] *= sign; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * concealment_update() + * + * + *-------------------------------------------------------------------*/ + +void concealment_update( + const int16_t bfi, + const int16_t core, + const int16_t tonality, + float *invkoef, + T_PLCInfo_HANDLE hPlcInfo ) +{ + float *data_reci2 = hPlcInfo->data_reci2; + int16_t subframe = hPlcInfo->subframe; + int16_t i; + + if ( core == TCX_20_CORE ) + { + set_state( hPlcInfo->Transient, core, MAX_POST_LEN ); + + for ( i = 0; i < hPlcInfo->L_frameTCX; i++ ) + { + data_reci2[i] = invkoef[i]; + } + + if ( !bfi ) + { + set_state( hPlcInfo->TCX_Tonality, tonality, DEC_STATE_LEN ); + } + } + else + { + if ( subframe == 0 ) + { + set_state( hPlcInfo->Transient, core, MAX_POST_LEN ); + + if ( !bfi ) + { + set_state( hPlcInfo->TCX_Tonality, tonality, DEC_STATE_LEN ); + } + } + /* don't store the second subframe during frameloss; in + pitch_search(), low_freq_rate is derived on the last good + TCX-10 spectrum */ + if ( !bfi || subframe == 0 ) + { + float *ptr = data_reci2 + subframe; + for ( i = 0; i < ( hPlcInfo->L_frameTCX >> 1 ); i++ ) + { + ptr[i] = invkoef[i]; + } + } + } + return; +} + + +/*-------------------------------------------------------------------* + * concealment_update2() + * + * + *-------------------------------------------------------------------*/ + +void concealment_update2( + const float *outx_new, + T_PLCInfo_HANDLE hPlcInfo, + const int16_t L_frameTCX ) +{ + hPlcInfo->zp = zero_pass( outx_new, L_frameTCX ); + hPlcInfo->ener = dotp( outx_new, outx_new, L_frameTCX ) / L_frameTCX; + hPlcInfo->ener = 10 * (float) log10( hPlcInfo->ener + EPSILON ); + + if ( hPlcInfo->zp < 100 && hPlcInfo->ener > 50 ) + { + hPlcInfo->ener_mean = 0.98f * hPlcInfo->ener_mean + 0.02f * hPlcInfo->ener; + } + + return; +} + + +/*-------------------------------------------------------------------* + * concealment_signal_tuning() + * + * + *-------------------------------------------------------------------*/ + +void concealment_signal_tuning( + Decoder_State *st, + const int16_t bfi, + float *outx_new, + const int16_t past_core ) +{ + float voicing = 0; + T_PLCInfo_HANDLE hPlcInfo = st->hPlcInfo; + float *OverlapBuf = st->hTonalMDCTConc->secondLastPcmOut; + float *outdata2 = st->hTonalMDCTConc->lastPcmOut; + + if ( bfi ) + { + if ( st->enablePlcWaveadjust && hPlcInfo->concealment_method == TCX_NONTONAL ) + { + if ( st->nbLostCmpt == 1 ) + { + hPlcInfo->Pitch = pitch_search( outdata2, outx_new, st->hPlcInfo->L_frameTCX, &voicing, &hPlcInfo->zp, &hPlcInfo->ener, hPlcInfo->ener_mean, st->hPlcInfo->data_reci2, st->core ); + + if ( hPlcInfo->Pitch ) /* waveform adjustment for the first lost frame */ + { + hPlcInfo->Pitch = waveform_adj( hPlcInfo, OverlapBuf, outdata2, outx_new, st->hPlcInfo->L_frameTCX, voicing, st->core ); + } + } + else if ( st->nbLostCmpt < 5 ) /* waveform adjustment for the 2nd~4th lost frame */ + { + waveform_adj2( hPlcInfo, OverlapBuf, outx_new, 0, st->nbLostCmpt, bfi ); + } + } + hPlcInfo->T_bfi = 1; + } + else + { + if ( st->prev_bfi && past_core != ACELP_CORE && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 ) + { + if ( hPlcInfo->concealment_method == TCX_NONTONAL ) + { + if ( hPlcInfo->nbLostCmpt < 4 ) /* smoothing of the concealed signal with the good signal */ + { + waveform_adj2( hPlcInfo, OverlapBuf, outx_new, 0, hPlcInfo->nbLostCmpt + 1, bfi ); + } + } + } + else + { + hPlcInfo->T_bfi = 0; + } + } + + return; +} diff --git a/lib_enc/ACcontextMapping_enc.c b/lib_enc/ACcontextMapping_enc.c new file mode 100644 index 0000000000..62ab9e7552 --- /dev/null +++ b/lib_enc/ACcontextMapping_enc.c @@ -0,0 +1,1532 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" /* Range coder header file */ +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ACcontextMapping_encode2_no_mem_s17_LC() + * + * Arithmetic encoder + *-------------------------------------------------------------------*/ + +void ACcontextMapping_encode2_no_mem_s17_LC( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t *x, + int16_t nt, + int16_t lastnz, + int16_t nbbits, + int16_t resQMaxBits, + CONTEXT_HM_CONFIG *hm_cfg ) +{ + int16_t ptr[BITBUFSIZE]; + Tastat as, as_overflow; + int16_t bp, bp_overflow; + int16_t a1, b1, a1_i, b1_i, k; + uint16_t t; + int16_t pki, lev1; + int16_t rateFlag; + int16_t value; + int16_t nbbits_ntuples, nbbits_lsbs, nbbits_signs, nbbits_signs_overflow, nbbits_lsbs_overflow, flag_overflow; + int16_t *lsbs_bits; + int16_t nt_half; + int32_t c[2], *ctx; + int32_t p1, p2; + int16_t ii[2]; + int16_t idx1, idx2, idx; + int16_t numPeakIndicesOrig, numHoleIndices; + uint16_t signs[N_MAX]; + int16_t nbbits_m2; + + a1 = 0; /* to avoid compilation warnings */ + b1 = 0; /* to avoid compilation warnings */ + + /* Rate flag */ + if ( nbbits > 400 ) + { + rateFlag = 2 << NBITS_CONTEXT; + } + else + { + rateFlag = 0; + } + + /* Init */ + nt_half = nt >> 1; + c[0] = c[1] = 0; + + /* Bits for encoding the number of encoded tuples */ + nbbits_ntuples = 0; + k = 1; + + while ( k < nt / 2 ) + { + nbbits_ntuples++; + k = k << 1; + } + + t = 0; + bp = nbbits_ntuples; + nbbits_signs = 0; + nbbits_lsbs = 0; + nbbits_m2 = nbbits - 2; + flag_overflow = 0; + + if ( hm_cfg ) + { + /* mapped domain */ + numPeakIndicesOrig = hm_cfg->numPeakIndices; + hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); + numHoleIndices = lastnz - hm_cfg->numPeakIndices; + + /* Mark hole indices beyond lastnz as pruned */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; + } + + ii[0] = numPeakIndicesOrig; + ii[1] = 0; + + p1 = p2 = 0; /* to avoid compilation warnings */ + } + else + { + /* unmapped domain */ + ii[0] = 0; + + p1 = p2 = 0; + + /* Find last non-zero tuple */ + /* ensure termination of while loop by dummy value */ + a1 = x[0]; + x[0] = 1; + + while ( x[lastnz - 1] == 0 && x[lastnz - 2] == 0 ) + { + lastnz -= 2; + } + x[0] = a1; + } + + lsbs_bits = (int16_t *) ptr + nbbits - 1; + + /*Start Encoding*/ + ari_start_encoding_14bits( &as ); + + /*Main Loop through the 2-tuples*/ + b1_i = -1; + + for ( k = 0; k < lastnz; k += 2 ) + { + + if ( hm_cfg ) + { + a1_i = get_next_coeff_mapped( ii, &p1, &idx1, hm_cfg ); + b1_i = get_next_coeff_mapped( ii, &p2, &idx2, hm_cfg ); + } + else + { + a1_i = get_next_coeff_unmapped( ii, &idx1 ); + b1_i = get_next_coeff_unmapped( ii, &idx2 ); + } + + idx = min( idx1, idx2 ); + + /* Get context */ + ctx = &c[p1 | p2]; + + t = (uint16_t) ( *ctx + rateFlag ); + t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); + + /* Init current 2-tuple encoding */ + + if ( flag_overflow != 0 ) + { + x[a1_i] = 0; + x[b1_i] = 0; + } + + a1 = (int16_t) abs( x[a1_i] ); + b1 = (int16_t) abs( x[b1_i] ); + + lev1 = -1; + + /*Copy states*/ + ari_copy_states( &as, &as_overflow ); + bp_overflow = bp; + nbbits_signs_overflow = nbbits_signs; + nbbits_lsbs_overflow = nbbits_lsbs; + + /*Signs encoding*/ + + if ( a1 > 0 ) + { + signs[nbbits_signs++] = ( (uint16_t) x[a1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); + } + + if ( b1 > 0 ) + { + signs[nbbits_signs++] = ( (uint16_t) x[b1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); + } + + /* MSBs coding */ + while ( max( a1, b1 ) >= A_THRES ) + { + pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + bp = ari_encode_14bits_ext( ptr, bp, &as, VAL_ESC, ari_pk_s17_LC_ext[pki] ); + + *lsbs_bits-- = a1 & 1; + *lsbs_bits-- = b1 & 1; + + /* LSBs bit counting */ + nbbits_lsbs += 2; + + a1 >>= 1; + b1 >>= 1; + + lev1 = min( lev1 + 1, 2 ); + } + + pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + bp = ari_encode_14bits_ext( ptr, bp, &as, a1 + A_THRES * b1, ari_pk_s17_LC_ext[pki] ); + + + /* Check bit budget */ + if ( bp + as.bits_to_follow + nbbits_signs + nbbits_lsbs > nbbits_m2 ) + { + ari_copy_states( &as_overflow, &as ); + bp = bp_overflow; + + if ( !flag_overflow ) + { + nbbits_signs = nbbits_signs_overflow; + nbbits_lsbs = nbbits_lsbs_overflow; + + if ( hm_cfg ) + { + flag_overflow = 1; + + /* Code from now only zeros */ + x[a1_i] = 0; + x[b1_i] = 0; + lev1 = -1; + + pki = ari_lookup_s17_LC[t]; + bp = ari_encode_14bits_ext( ptr, bp, &as, 0, ari_pk_s17_LC_ext[pki] ); + + if ( bp + as.bits_to_follow + nbbits_signs + nbbits_lsbs > nbbits_m2 ) + { + ari_copy_states( &as_overflow, &as ); + bp = bp_overflow; + break; + } + } + else + { + break; + } + } + else + { + break; + } + } + + /* Update context for next 2-tuple */ + if ( p1 == p2 ) + { + /* peak-peak or hole-hole context */ + + if ( lev1 <= 0 ) + { + t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); + } + else + { + t = 13 + lev1; + } + + *ctx = ( *ctx & 0xf ) * 16 + t; + } + else + { + /* mixed context */ + + if ( idx1 & 1 ) + { + /* update first context */ + c[p1] = update_mixed_context( c[p1], (int16_t) abs( x[a1_i] ) ); + } + + if ( idx2 & 1 ) + { + /* update second context */ + c[p2] = update_mixed_context( c[p2], (int16_t) abs( x[b1_i] ) ); + } + } + } /*end of the 2-tuples loop*/ + + + /* End arithmetic coder, overflow management */ + bp = ari_done_encoding_14bits( ptr, bp, &as ); + + /*Overflow is detected*/ + + if ( k != lastnz ) + { + + if ( hm_cfg ) + { + /*Fill with zero to be sure that decoder finish at the same position the MSB decoding*/ + + for ( ; bp < nbbits - ( nbbits_signs + nbbits_lsbs ); ) + { + ptr[bp++] = 0; + } + } + else + { + lastnz = k; + } + } + + /* Push number of encoded tuples */ + value = ( lastnz >> 1 ) - 1; + push_next_indice( hBstr, value, nbbits_ntuples ); + + /* Push arithmetic coded bits */ + push_next_bits( hBstr, (uint16_t *) &ptr[nbbits_ntuples], bp - nbbits_ntuples ); + + /* Push sign bits */ + push_next_bits( hBstr, (uint16_t *) signs, nbbits_signs ); + bp += nbbits_signs; + + /* write residual Quantization bits */ + for ( k = 0; k < min( nbbits - bp - nbbits_lsbs, resQMaxBits ); k++ ) + { + ptr[nbbits - 1 - nbbits_lsbs - k] = x[nt + k]; + } + + /* Write filler bits */ + for ( ; k < nbbits - bp - nbbits_lsbs; ++k ) + { + ptr[nbbits - 1 - nbbits_lsbs - k] = 0; + } + + /* Check for debugging */ + assert( bp + k <= nbbits ); + + /* Push the rest of the buffer */ + push_next_bits( hBstr, (uint16_t *) &ptr[bp], nbbits - bp ); + +#ifdef DEBUGGING + /* return (bp+nbbits_lsbs);*/ /*return only for debug plot*/ +#endif + return; +} + +/*-------------------------------------------------------------------* + * find_last_nz_pair() + * + * + *-------------------------------------------------------------------*/ + +static int16_t find_last_nz_pair( + const int16_t x[], + const int16_t length, + const CONTEXT_HM_CONFIG *hm_cfg ) +{ + int16_t last_nz, i; + const int16_t *tmp; + + last_nz = 2; + + if ( hm_cfg ) + { + /* mapped kernel */ + tmp = hm_cfg->indexBuffer; + + for ( i = length; i >= 4; i -= 2 ) + { + + if ( x[tmp[i - 2]] != 0 || x[tmp[i - 1]] != 0 ) + { + last_nz = i; + break; + } + } + } + else + { + /* unmapped kernel */ + + for ( i = length; i >= 4; i -= 2 ) + { + + if ( x[i - 2] != 0 || x[i - 1] != 0 ) + { + last_nz = i; + break; + } + } + } + + return last_nz; +} + + +/*-------------------------------------------------------------------* + * ACcontextMapping_encode2_estimate_no_mem_s17_LC() + * + * + *-------------------------------------------------------------------*/ + +int16_t ACcontextMapping_encode2_estimate_no_mem_s17_LC( + const int16_t *x, + const int16_t nt, + int16_t *lastnz_out, + int16_t *nEncoded, + const int16_t target, + int16_t *stop, + CONTEXT_HM_CONFIG *hm_cfg ) +{ + int16_t a1, b1, a1_i, b1_i; + int16_t k, pki, lev1; + uint16_t t; + int16_t lastnz, lastnz2; + int16_t rateFlag; + int16_t nbits_old, nbits; + int16_t stop2; + int32_t proba; + int16_t nlz; + const uint16_t *cum_freq; + int16_t symbol; + const uint8_t *lookup; + int16_t nt_half; + int32_t c[2], *ctx; + int32_t p1, p2; + int16_t ii[2]; + int16_t idx1, idx2, idx; + int16_t numPeakIndicesOrig = 0, numHoleIndices = 0; /* only to avoid compiler warning */ + + /* Rate flag */ + if ( target > 400 ) + { + rateFlag = 2 << NBITS_CONTEXT; + } + else + { + rateFlag = 0; + } + + /* 2 bits = arithmetic coder initialization interval = 1 bits for rounding last proba + 1 bit?*/ + nbits = 2; + /*proba coded on 14bits -> proba=1*/ + proba = 16384; + + /* Init */ + nt_half = nt >> 1; + stop2 = 0; + c[0] = c[1] = 0; + + /* bits to encode lastnz */ + k = 1; + + while ( k < nt / 2 ) + { + nbits++; + k = k << 1; + /* check while condition */ + } + nbits_old = nbits; + + nbits -= target; + + /* Find last non-zero tuple in the mapped domain signal */ + lastnz = find_last_nz_pair( x, nt, hm_cfg ); + + /* At least one tuple is coded */ + lastnz2 = 2; + + if ( hm_cfg ) + { + /* mapped domain */ + numPeakIndicesOrig = hm_cfg->numPeakIndices; + hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); + numHoleIndices = lastnz - hm_cfg->numPeakIndices; + + /* Mark hole indices beyond lastnz as pruned */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; + } + + ii[0] = numPeakIndicesOrig; + ii[1] = 0; + + p1 = p2 = 0; /* to avoid compilation warnings */ + } + else + { + /* unmapped domain */ + ii[0] = 0; + + p1 = p2 = 0; + } + + /* Main Loop through the 2-tuples */ + for ( k = 0; k < lastnz; k += 2 ) + { + if ( hm_cfg ) + { + a1_i = get_next_coeff_mapped( ii, &p1, &idx1, hm_cfg ); + b1_i = get_next_coeff_mapped( ii, &p2, &idx2, hm_cfg ); + } + else + { + a1_i = get_next_coeff_unmapped( ii, &idx1 ); + b1_i = get_next_coeff_unmapped( ii, &idx2 ); + } + + idx = min( idx1, idx2 ); + + /* Get context */ + ctx = &c[p1 | p2]; + + t = (uint16_t) ( *ctx + rateFlag ); + t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); + + /* Init current 2-tuple encoding */ + a1 = (int16_t) abs( x[a1_i] ); + b1 = (int16_t) abs( x[b1_i] ); + lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + + /* Signs Bits */ + nbits += min( a1, 1 ); + nbits += min( b1, 1 ); + + /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ + lookup = &ari_lookup_s17_LC[t] + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + + /* check while condition */ + /* MSBs coding */ + while ( max( a1, b1 ) >= A_THRES ) + { + pki = lookup[lev1]; + cum_freq = ari_pk_s17_LC_ext[pki] + VAL_ESC; + /*p1*p2=proba on 28 bits: p=0.5->power(2,27)*/ + proba *= *( cum_freq ); + /*Number of leading zero computed in one cycle=norm_l() in BASOP*/ + nlz = 2; + while ( proba < 134217728 ) /*power(2,27)*/ + { + nlz++; + proba = proba << 1; + } + nbits += nlz; + /*addition added as shift not done in norm_l(): real shift = 14-nlz*/ + proba >>= 14; /*proba is rounded down on 14 bits ->automatic over-estimation of bit consumption*/ + + ( a1 ) >>= 1; + ( b1 ) >>= 1; + + lev1 = min( lev1 + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ), 2 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + /* check while condition */ + } + pki = lookup[lev1]; + symbol = a1 + A_THRES * b1; + cum_freq = ari_pk_s17_LC_ext[pki] + symbol; + /*p1*p2=proba on 28 bits: p=0.5->power(2,27)*/ + proba *= ( cum_freq[0] - cum_freq[1] ); + /*Number of leading zero computed in one cycle=norm_l() in BASOP*/ + nlz = 0; + while ( proba < 134217728 ) /*power(2,27)*/ + { + nlz++; + proba = proba << 1; + } + + nbits += nlz; + proba >>= 14; /*proba is rounded down on 14 bits ->automatic over-estimation of bit consumption*/ + + /* Should we truncate? */ + if ( nbits > 0 ) + { + stop2 = 1; + + if ( *stop ) + { + break; + } + } + else + { + if ( hm_cfg || k == 0 || x[a1_i] || x[b1_i] ) + { + nbits_old = nbits + target; + lastnz2 = b1_i + 1; + } + } + + /* Update context for next 2-tuple */ + if ( p1 == p2 ) /* peak-peak or hole-hole context */ + { + lev1 >>= NBITS_CONTEXT + NBITS_RATEQ; + + if ( lev1 <= 0 ) + { + t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); + } + else + { + t = 13 + lev1; + } + + *ctx = ( *ctx & 0xf ) * 16 + t; + } + else + { + /* mixed context */ + + if ( idx1 & 1 ) + { + /* update first context */ + c[p1] = update_mixed_context( c[p1], (int16_t) abs( x[a1_i] ) ); + } + + if ( idx2 & 1 ) + { + /* update second context */ + c[p2] = update_mixed_context( c[p2], (int16_t) abs( x[b1_i] ) ); + } + } + } /*end of the 2-tuples loop*/ + + nbits += target; + + /* Output */ + + if ( *stop ) + { + nbits = nbits_old; + } + + if ( stop2 ) + { + stop2 = nbits; + } + *nEncoded = lastnz2; + *stop = stop2; + *lastnz_out = lastnz; + + if ( hm_cfg ) + { + /* Restore hole indices beyond lastnz */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] - nt; + } + hm_cfg->numPeakIndices = numPeakIndicesOrig; + } + + return nbits_old; +} + + +/* Range Coder Functions */ + +/*-------------------------------------------------------------------* + * RCcontextMapping_encode2_no_mem_s17_LCS() + * + * Range encoder + *-------------------------------------------------------------------*/ + +void RCcontextMapping_encode2_no_mem_s17_LCS( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t *x, + const int16_t nt, + int16_t lastnz, + const int16_t nbbits, + const int16_t resQMaxBits, + CONTEXT_HM_CONFIG *hm_cfg ) +{ + int16_t ptr[BITBUFSIZE]; + RangeUniEncState rc_st_enc; + int16_t bp; + int16_t rc_tot_bits; /* No. of bits returned by range coder */ + int16_t pki, lev1; + uint16_t t; + int16_t rateFlag; + int16_t value; + int16_t nbbits_ntuples, nbbits_lsbs, nbbits_signs; + int16_t *lsbs_bits; + int16_t nt_half; + int16_t signs[N_MAX]; + int16_t a1, b1, k; + + a1 = 0; /* to avoid compilation warnings */ + b1 = 0; /* to avoid compilation warnings */ + + /* Init */ + nt_half = nt >> 1; + + /* Bits for encoding the number of encoded tuples */ + nbbits_ntuples = 0; + k = 1; + while ( k < nt / 2 ) + { + nbbits_ntuples++; + k = k << 1; + } + + t = 0; + nbbits_signs = 0; + nbbits_lsbs = 0; + + if ( hm_cfg ) + { + int16_t a1_i, b1_i; + int32_t c[2], *ctx; + int32_t p1, p2; + int16_t ii[2]; + int16_t idx1, idx2, idx; + int16_t numPeakIndicesOrig, numHoleIndices; + + /* Rate flag */ + if ( nbbits > 400 ) + { + rateFlag = 2 << NBITS_CONTEXT; + } + else + { + rateFlag = 0; + } + + c[0] = c[1] = 0; + + /* mapped domain */ + numPeakIndicesOrig = hm_cfg->numPeakIndices; + hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); + numHoleIndices = lastnz - hm_cfg->numPeakIndices; + + /* Mark hole indices beyond lastnz as pruned */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; + } + + ii[0] = numPeakIndicesOrig; + ii[1] = 0; + + p1 = p2 = 0; /* to avoid compilation warnings */ + + lsbs_bits = ptr + nbbits - 1; + + /*Start Encoding*/ + /* Initialize range encoder */ + rc_uni_enc_init( &rc_st_enc ); + + /*Main Loop through the 2-tuples*/ + b1_i = -1; + + for ( k = 0; k < lastnz; k += 2 ) + { + a1_i = get_next_coeff_mapped( ii, &p1, &idx1, hm_cfg ); + b1_i = get_next_coeff_mapped( ii, &p2, &idx2, hm_cfg ); + + idx = min( idx1, idx2 ); + + /* Get context */ + ctx = &c[p1 | p2]; + + t = (uint16_t) ( *ctx + rateFlag ); + t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); + + /* Init current 2-tuple encoding */ + a1 = (int16_t) abs( x[a1_i] ); + b1 = (int16_t) abs( x[b1_i] ); + + lev1 = -1; + + /*Signs encoding*/ + if ( a1 > 0 ) + { + signs[nbbits_signs++] = ( (uint16_t) x[a1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); + } + + if ( b1 > 0 ) + { + signs[nbbits_signs++] = ( (uint16_t) x[b1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); + } + + /* MSBs coding */ + while ( max( a1, b1 ) >= A_THRES ) + { + pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + rc_uni_enc_encode_symbol_fastS( &rc_st_enc, VAL_ESC, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode ESC symbol */ + + *lsbs_bits-- = a1 & 1; + *lsbs_bits-- = b1 & 1; + + /* LSBs bit counting */ + nbbits_lsbs += 2; + + a1 >>= 1; + b1 >>= 1; + + lev1 = min( lev1 + 1, 2 ); + } + + pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + rc_uni_enc_encode_symbol_fastS( &rc_st_enc, a1 + A_THRES * b1, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode MSB symbol */ + + /*Confirm that there is no overflow, i.e. bit-budget has not exceeded */ +#ifdef DEBUGGING + assert( rc_uni_enc_virtual_finish( &rc_st_enc ) <= nbbits - nbbits_signs - nbbits_lsbs - nbbits_ntuples ); +#endif + + /* Update context for next 2-tuple */ + if ( p1 == p2 ) + { + /* peak-peak or hole-hole context */ + + if ( lev1 <= 0 ) + { + t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); + } + else + { + t = 13 + lev1; + } + + *ctx = ( *ctx & 0xf ) * 16 + t; + } + else + { + /* mixed context */ + + if ( idx1 & 1 ) + { + /* update first context */ + c[p1] = update_mixed_context( c[p1], (int16_t) abs( x[a1_i] ) ); + } + + if ( idx2 & 1 ) + { + /* update second context */ + c[p2] = update_mixed_context( c[p2], (int16_t) abs( x[b1_i] ) ); + } + } + + } /*end of the 2-tuples loop*/ + } + else /* if (!hm_cfg) */ + { + int16_t cp; + int16_t esc_nb, rateQ; + uint16_t s; + + /* Rate flag */ + if ( nbbits > 400 ) + { + rateFlag = 2; + } + else + { + rateFlag = 0; + } + + s = 0; + + /* Find last non-zero tuple */ + /* ensure termination of while loop by dummy value */ + a1 = x[0]; + x[0] = 1; /* ensure first tuple is non-zero */ + + while ( x[lastnz - 1] == 0 && x[lastnz - 2] == 0 ) + { + lastnz -= 2; + } + x[0] = a1; + + lsbs_bits = ptr + nbbits - 1; + + /*Start Encoding*/ + /* Initialize range encoder */ + rc_uni_enc_init( &rc_st_enc ); + + /*Main Loop through the 2-tuples*/ + for ( k = 0; k < lastnz; k += 2 ) + { + + /* Init current 2-tuple encoding */ + a1 = (int16_t) abs( x[k + 0] ); + b1 = (int16_t) abs( x[k + 1] ); + + lev1 = 0; + esc_nb = 0; + + /*Signs encoding*/ + if ( a1 > 0 ) + { + signs[nbbits_signs++] = ( (uint16_t) x[k + 0] >> ( sizeof( uint16_t ) * 8 - 1 ) ); + } + + if ( b1 > 0 ) + { + signs[nbbits_signs++] = ( (uint16_t) x[k + 1] >> ( sizeof( uint16_t ) * 8 - 1 ) ); + } + + rateQ = rateFlag + ( k > ( nt >> 1 ) ); + + /* MSBs coding */ + while ( max( a1, b1 ) >= A_THRES ) + { + pki = ari_lookup_s17_LC[t + ( ( rateQ ) << NBITS_CONTEXT ) + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + rc_uni_enc_encode_symbol_fastS( &rc_st_enc, VAL_ESC, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode ESC symbol */ + + *lsbs_bits-- = a1 & 1; + *lsbs_bits-- = b1 & 1; + + /* LSBs bit counting */ + nbbits_lsbs += 2; + + a1 >>= 1; + b1 >>= 1; + + lev1++; + esc_nb = min( lev1, 3 ); + } + + pki = ari_lookup_s17_LC[t + ( ( rateQ ) << NBITS_CONTEXT ) + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + rc_uni_enc_encode_symbol_fastS( &rc_st_enc, a1 + A_THRES * b1, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode MSB symbol */ + + /*Confirm that there is no overflow, i.e. bit-budget has not exceeded */ +#ifdef DEBUGGING + assert( rc_uni_enc_virtual_finish( &rc_st_enc ) <= nbbits - nbbits_signs - nbbits_lsbs - nbbits_ntuples ); +#endif + + /* Update context for next 2-tuple */ + if ( esc_nb < 2 ) + { + cp = 1 + ( ( a1 + b1 ) * ( esc_nb + 1 ) ); + } + else + { + cp = 12 + esc_nb; + } + + /*Shift old 4 bits, replace last 4 bits*/ + s = ( s << 4 ) + cp; + t = s & 0xFF; + + } /*end of the 2-tuples loop*/ + } + + /* Finish range encoder */ + rc_tot_bits = rc_uni_enc_finish( &rc_st_enc ); /* No. of bits consumed by range coder */ + bp = rc_tot_bits + nbbits_ntuples; /* Update bitstream pointer */ + + /* Cross-check that there is no overflow */ +#ifdef DEBUGGING + assert( k == lastnz ); +#endif + + /* Push number of encoded tuples */ + value = ( lastnz >> 1 ) - 1; + push_next_indice( hBstr, value, nbbits_ntuples ); + + /* Push range coded bits from byte_buffer to bitstream */ + /* 1) Push all complete bytes, one byte at a time */ + for ( k = 0; k < ( rc_tot_bits >> 3 ); k++ ) + { + push_next_indice( hBstr, rc_st_enc.byte_buffer[k], 8 ); + } + /* 2) Push remaining bits */ + if ( ( rc_tot_bits & 7 ) != 0 ) + { + push_next_indice( hBstr, rc_st_enc.byte_buffer[k] >> ( 8 - ( rc_tot_bits & 7 ) ), rc_tot_bits & 7 ); + } + + /* Push sign bits */ + push_next_bits( hBstr, (uint16_t *) signs, nbbits_signs ); + bp += nbbits_signs; + + /*write residual Quantization bits*/ + + for ( k = 0; k < min( nbbits - bp - nbbits_lsbs, resQMaxBits ); k++ ) + { + ptr[nbbits - 1 - nbbits_lsbs - k] = x[nt + k]; + } + /* Write filler bits */ + for ( ; k < nbbits - bp - nbbits_lsbs; ++k ) + { + ptr[nbbits - 1 - nbbits_lsbs - k] = 0; + } + + /* Check for debugging */ + assert( bp + k <= nbbits ); + + /* Push the rest of the buffer */ + push_next_bits( hBstr, (uint16_t *) &ptr[bp], nbbits - bp ); + + /* return (bp+nbbits_lsbs);*/ /*return only for debug plot*/ + return; +} + +/*-------------------------------------------------------------------* + * RCcontextMapping_encode2_estimate_no_mem_s17_LCS() + * + * Range coder bit-estimation + *-------------------------------------------------------------------*/ + +int16_t RCcontextMapping_encode2_estimate_no_mem_s17_LCS( + int16_t *x, /* Spectral coefficients */ + const int16_t nt, /* L - size of spectrum (no. of spectral coefficients) */ + int16_t *lastnz_out, + int16_t *nEncoded, /* No. of spectral coefficients that can be coded without an overflow occuring */ + const int16_t target, /* Target bits */ + int16_t *stop, + int16_t mode, + CONTEXT_HM_CONFIG *hm_cfg /* context-based harmonic model configuration */ +) +{ + /* Common variables */ + int16_t a1, b1; + int16_t k, pki, lev1; + uint16_t t; + int16_t lastnz, lastnz2; + int16_t rateFlag; + float bit_estimate; + int16_t symbol; + const uint8_t *lookup; + float nbits2; + + /* Initialization */ + bit_estimate = 2.0f; + nbits2 = 0.f; + + /* bits to encode lastnz */ + k = 1; + + while ( k < nt / 2 ) + { + bit_estimate++; + k = k << 1; + /* check while condition */ + } + + nbits2 = bit_estimate; + + if ( hm_cfg ) + { + int16_t a1_i, b1_i; + int16_t stop2; + int16_t total_output_bits; + int16_t nt_half; + int32_t c[2], *ctx; + int32_t p1, p2; + int16_t ii[2]; + int16_t idx1, idx2, idx; + int16_t numPeakIndicesOrig = 0, numHoleIndices = 0; /* only to avoid compiler warning */ + + /* Rate flag */ + if ( target > 400 ) + { + rateFlag = 2 << NBITS_CONTEXT; /* Select context-A for higher bitrates */ + } + else + { + rateFlag = 0; /* Select context-B for lower bitrates */ + } + + nt_half = nt >> 1; + stop2 = 0; + c[0] = c[1] = 0; + + /* Find last non-zero tuple in the mapped domain signal */ + lastnz = find_last_nz_pair( x, nt, hm_cfg ); + + lastnz2 = 2; + + /* mapped domain */ + numPeakIndicesOrig = hm_cfg->numPeakIndices; + hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); + numHoleIndices = lastnz - hm_cfg->numPeakIndices; + + /* Mark hole indices beyond lastnz as pruned */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; + } + + ii[0] = numPeakIndicesOrig; + ii[1] = 0; + + p1 = p2 = 0; /* to avoid compilation warnings */ + + /* Main Loop through the 2-tuples */ + for ( k = 0; k < lastnz; k += 2 ) + { + a1_i = get_next_coeff_mapped( ii, &p1, &idx1, hm_cfg ); + b1_i = get_next_coeff_mapped( ii, &p2, &idx2, hm_cfg ); + + idx = min( idx1, idx2 ); + + /* Get context */ + ctx = &c[p1 | p2]; + + t = (uint16_t) ( *ctx + rateFlag ); + t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); + + /* Init current 2-tuple encoding */ + a1 = (int16_t) abs( x[a1_i] ); + b1 = (int16_t) abs( x[b1_i] ); + lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + + /* Signs Bits */ + bit_estimate += min( a1, 1 ); + bit_estimate += min( b1, 1 ); + + /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ + lookup = &ari_lookup_s17_LC[t] + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + + /* check while condition */ + /* MSBs coding */ + while ( max( a1, b1 ) >= A_THRES ) + { + pki = lookup[lev1]; /* ESC symbol */ + + bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][VAL_ESC]; + bit_estimate += 2; /* Add 2 LSB bits corresponding to the bit-plane */ + + ( a1 ) >>= 1; + ( b1 ) >>= 1; + + lev1 = min( lev1 + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ), 2 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + + /* check while condition */ + } + + pki = lookup[lev1]; + + symbol = a1 + A_THRES * b1; + bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][symbol]; + + /* Should we truncate? */ + if ( bit_estimate > target ) + { + stop2 = 1; + + if ( *stop ) + { + break; + } + } + else + { + lastnz2 = b1_i + 1; + nbits2 = bit_estimate; + } + + /* Update context for next 2-tuple */ + if ( p1 == p2 ) /* peak-peak or hole-hole context */ + { + lev1 >>= NBITS_CONTEXT + NBITS_RATEQ; + + if ( lev1 <= 0 ) + { + t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); + } + else + { + t = 13 + lev1; + } + + *ctx = ( *ctx & 0xf ) * 16 + t; + } + else + { + /* mixed context */ + + if ( idx1 & 1 ) + { + /* update first context */ + c[p1] = update_mixed_context( c[p1], (int16_t) abs( x[a1_i] ) ); + } + + if ( idx2 & 1 ) + { + /* update second context */ + c[p2] = update_mixed_context( c[p2], (int16_t) abs( x[b1_i] ) ); + } + } + + } /*end of the 2-tuples loop*/ + + total_output_bits = (int16_t) ( bit_estimate + 0.5f ); + if ( *stop ) + { + total_output_bits = (int16_t) ( nbits2 + 0.5f ); + } + + if ( stop2 ) + { + stop2 = total_output_bits; + } + *nEncoded = lastnz2; + *stop = stop2; /* If zero, it means no overflow occured during bit-estimation */ + *lastnz_out = lastnz; + + /* Restore hole indices beyond lastnz */ + for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) + { + hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] - nt; + } + hm_cfg->numPeakIndices = numPeakIndicesOrig; + + return (int16_t) ( nbits2 + 0.5f ); + } + else /* if (!hm_cfg) */ + { + int16_t esc_nb, cp, rateQ; + uint16_t s; + int16_t tot_bits2; + int16_t overflow_flag = 0; + + /* Rate flag */ + if ( target > 400 ) + { + rateFlag = 2; + } + else + { + rateFlag = 0; /* Select context-B for lower bitrates */ + } + + t = 0; + s = 0; + cp = 0; + lastnz = 1; + lastnz2 = 0; + tot_bits2 = 0; + + /* Find last non-zero tuple in the mapped domain signal */ + for ( lastnz = ( nt - 2 ); lastnz >= 0; lastnz -= 2 ) + { + if ( ( x[lastnz] != 0 ) || ( x[lastnz + 1] != 0 ) ) + { + break; + } + } + lastnz += 2; + if ( lastnz < 2 ) + { + lastnz = 2; /* At least one tuple is coded */ + } + + lastnz2 = 2; + + /* Main Loop through the 2-tuples */ + for ( k = 0; k < lastnz; k += 2 ) + { + /* Init current 2-tuple encoding */ + a1 = (int16_t) abs( x[k] ); + b1 = (int16_t) abs( x[k + 1] ); + lev1 = 0; + esc_nb = 0; + rateQ = rateFlag + ( k > ( nt >> 1 ) ); + + /* Signs Bits */ + bit_estimate += min( a1, 1 ); + bit_estimate += min( b1, 1 ); + + /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ + lookup = &ari_lookup_s17_LC[t + ( rateQ << NBITS_CONTEXT )]; + + /* check while condition */ + /* MSBs coding */ + while ( max( a1, b1 ) >= A_THRES ) + { + pki = lookup[( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + + bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][VAL_ESC]; + bit_estimate += 2; /* Add 2 LSB bits corresponding to the bit-plane */ + + ( a1 ) >>= 1; + ( b1 ) >>= 1; + + lev1++; + esc_nb = min( lev1, 3 ); + + /* check while condition */ + } + + pki = lookup[( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; + + symbol = a1 + A_THRES * b1; + bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][symbol]; + + /* Should we truncate? */ + if ( bit_estimate > target ) /* Overflow occured */ + { + overflow_flag = 1; + } + else + { + if ( abs( x[k] ) || abs( x[k + 1] ) ) /* No overflow & non-zero tuple */ + { + nbits2 = bit_estimate; + lastnz2 = k + 2; + } + } + + /* Update context for next 2-tuple */ + if ( esc_nb < 2 ) + { + cp = 1 + ( a1 + b1 ) * ( esc_nb + 1 ); + } + else + { + cp = 12 + esc_nb; + } + /*shift old bits and replace last 4 bits*/ + s = ( s << 4 ) + cp; + t = s & 0xFF; + + } /*end of the 2-tuples loop*/ + + tot_bits2 = (int16_t) ( nbits2 + 0.5f ); + if ( lastnz2 < lastnz ) /* Overflow occured because unable to code all tuples */ + { + overflow_flag = 1; + } + if ( mode == -1 ) + { + tot_bits2 = (int16_t) ( bit_estimate + 0.5f ); + } + if ( overflow_flag == 0 ) /* No overflow */ + { + *stop = 0; + } + else /* Overflow */ + { + if ( *stop ) + { + *stop = tot_bits2; + } + else + { + *stop = (int16_t) ( bit_estimate + 0.5f ); + } + } + + *lastnz_out = lastnz; + *nEncoded = lastnz2; + /* Safety mechanism to avoid overflow */ + if ( lastnz2 == 2 && overflow_flag == 1 ) + { + for ( k = 0; k < lastnz2; k++ ) + { + x[k] = 0; + } + } + + return tot_bits2; + } +} + +/*-------------------------------------------------------------------* + * RCcontextMapping_encode2_estimate_bandWise_start() + * + * Range coder - start bandwise bit-estimation + *-------------------------------------------------------------------*/ + +int16_t RCcontextMapping_encode2_estimate_bandWise_start( + int16_t *x, + const int16_t nt, + const int16_t target, + HANDLE_RC_CONTEXT_MEM hContextMem ) +{ + int16_t i, k; + + /* Rate flag */ + if ( target > 400 ) + { + hContextMem->rateFlag = 2 << NBITS_CONTEXT; + } + else + { + hContextMem->rateFlag = 0; + } + + hContextMem->bit_estimate = 2.0f; + + /* Init */ + hContextMem->nt_half = nt >> 1; + + /* bits to encode lastnz */ + k = 1; + + while ( k < hContextMem->nt_half ) + { + hContextMem->bit_estimate++; + + k = k << 1; + /* check while condition */ + } + + /* bits to encode lastnz */ + hContextMem->nbits_old = (int16_t) hContextMem->bit_estimate; + + hContextMem->ctx = 0; + hContextMem->lastnz = 2; + + /* Find last non-zero tuple */ + + for ( i = nt; i >= 4; i -= 2 ) + { + + if ( x[i - 2] != 0 || x[i - 1] != 0 ) + { + hContextMem->lastnz = i; + break; + } + } + + return (int16_t) hContextMem->bit_estimate; +} + +/*-------------------------------------------------------------------* + * RCcontextMapping_encode2_estimate_bandWise() + * + * Range coder - bandwise bit-estimation + *-------------------------------------------------------------------*/ + +int16_t RCcontextMapping_encode2_estimate_bandWise( + int16_t *x, + const int16_t start_line, + const int16_t end_line, + HANDLE_RC_CONTEXT_MEM hContextMem ) +{ + int16_t a1, b1, a1_i, b1_i; + int16_t k, pki, lev1; + uint16_t t; + int16_t bandBits = 0; + int16_t total_output_bits; /* No. of bits after finalization */ + int16_t symbol; + const uint8_t *lookup; + int16_t idx; + + /* Main Loop through the 2-tuples */ + /*hContextMem->nt_half = end_line >> 1;*/ + for ( k = start_line; k < min( hContextMem->lastnz, end_line ); k += 2 ) + { + a1_i = k; + b1_i = k + 1; + + idx = k; + + /* Get context */ + t = hContextMem->ctx + hContextMem->rateFlag; + t += ( hContextMem->nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); + + /* Init current 2-tuple encoding */ + a1 = (int16_t) abs( x[a1_i] ); + b1 = (int16_t) abs( x[b1_i] ); + lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + + /* Signs Bits */ + hContextMem->bit_estimate += min( a1, 1 ); + hContextMem->bit_estimate += min( b1, 1 ); + + /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ + lookup = &ari_lookup_s17_LC[t] + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + + /* check while condition */ + /* MSBs coding */ + while ( max( a1, b1 ) >= A_THRES ) + { + pki = lookup[lev1]; + hContextMem->bit_estimate = hContextMem->bit_estimate + ari_bit_estimate_s17_LC[pki][VAL_ESC]; + hContextMem->bit_estimate += 2; /* Add the 2 LSB bits that were shifted out */ + + ( a1 ) >>= 1; + ( b1 ) >>= 1; + + lev1 = min( lev1 + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ), 2 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); + /* check while condition */ + } + + pki = lookup[lev1]; + symbol = a1 + A_THRES * b1; /* MSB symbol */ + hContextMem->bit_estimate = hContextMem->bit_estimate + ari_bit_estimate_s17_LC[pki][symbol]; + + /* Update context */ + lev1 >>= NBITS_CONTEXT + NBITS_RATEQ; + + if ( lev1 <= 0 ) + { + t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); + } + else + { + t = 13 + lev1; + } + + hContextMem->ctx = ( hContextMem->ctx & 0xf ) * 16 + t; + + } /*end of the 2-tuples loop*/ + total_output_bits = (int16_t) ( hContextMem->bit_estimate + 0.5f ); + + bandBits = total_output_bits - hContextMem->nbits_old; + hContextMem->nbits_old = total_output_bits; + + return bandBits; +} diff --git a/lib_enc/FEC_enc.c b/lib_enc/FEC_enc.c new file mode 100644 index 0000000000..89868e6729 --- /dev/null +++ b/lib_enc/FEC_enc.c @@ -0,0 +1,275 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * FEC_encode() + * + * Encoder supplementary information for FEC + *-------------------------------------------------------------------*/ + +void FEC_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const ACELP_config acelp_cfg, /* i/o: configuration of the ACELP */ + const float *synth, /* i : pointer to synthesized speech for E computation */ + const int16_t coder_type, /* i : type of coder */ + int16_t clas, /* i : signal clas for current frame */ + const float *fpit, /* i : close loop fractional pitch buffer */ + const float *res, /* i : LP residual signal frame */ + int16_t *last_pulse_pos, /* i/o: Position of the last pulse */ + const int16_t L_frame, /* i : Frame length */ + const int32_t total_brate /* i : total codec bitrate */ +) +{ + int16_t tmpS, index; + int16_t maxi, sign = 0, tmp_FER_pitch; + float enr_q; + + tmpS = 0; + enr_q = 1.0f; + + if ( coder_type > UNVOICED && coder_type < AUDIO && acelp_cfg.FEC_mode > 0 ) + { + /*-----------------------------------------------------------------* + * encode signal class (not needed for VC since it is clearly voiced) (2 bits) + *-----------------------------------------------------------------*/ + + if ( coder_type != VOICED ) + { + /* encode signal clas with 2 bits */ + if ( clas == UNVOICED_CLAS ) + { + index = 0; + } + else if ( clas == VOICED_TRANSITION || clas == UNVOICED_TRANSITION ) + { + index = 1; + } + else if ( clas == VOICED_CLAS ) + { + index = 2; + } + else + { + index = 3; + } + + push_indice( hBstr, IND_FEC_CLAS, index, FEC_BITS_CLS ); + } + + /*-----------------------------------------------------------------* + * Encode frame energy (5 bits) + *-----------------------------------------------------------------*/ + + if ( acelp_cfg.FEC_mode > 1 ) /* GENERIC and VOICED frames */ + { + /* frame energy (maximum energy per pitch period for voiced frames or mean energy per sample over 2nd halframe for unvoiced frames) */ + fer_energy( L_frame, clas, synth, fpit[( L_frame >> 6 ) - 1], &enr_q, L_frame ); + + /* linearly quantize the energy in the range 0 : FEC_ENR_STEP : 96 dB */ + tmpS = (int16_t) ( 10.0 * log10( enr_q + 0.001f ) / FEC_ENR_STEP ); + + if ( tmpS > FEC_ENR_QLIMIT ) + { + tmpS = FEC_ENR_QLIMIT; + } + + if ( tmpS < 0 ) + { + tmpS = 0; + } + + push_indice( hBstr, IND_FEC_ENR, tmpS, FEC_BITS_ENR ); + } + + /*-----------------------------------------------------------------* + * Encode last glottal pulse position (8 bits) + *-----------------------------------------------------------------*/ + + if ( acelp_cfg.FEC_mode > 2 ) /* GENERIC frames */ + { + /* retrieve the last glottal pulse position of the previous frame */ + /* use the current pitch information to scale or not the quantization */ + tmp_FER_pitch = (int16_t) ( fpit[0] ); /* take the 1st subframe pitch, since it is easier to retieve it on decoder side */ + + + sign = 0; + maxi = *last_pulse_pos; + if ( maxi < 0 ) + { + sign = 1; + maxi = -maxi; + } + + if ( tmp_FER_pitch >= 128 ) + { + maxi /= 2; + } + + if ( maxi > 127 ) + { + /* better not use the glottal pulse position at all instead of using a wrong pulse */ + /* can happen only with pitch > 254 and max pit = 289 and should happen very rarely */ + maxi = 0; + } + + if ( sign == 1 ) + { + maxi += 128; /* use 8 bits (MSB represents the sign of the pulse) */ + } + + push_indice( hBstr, IND_FEC_POS, maxi, FEC_BITS_POS ); + } + + /* find the glottal pulse position of the current frame (could be sent as extra FEC info in the next frame) */ + maxi = 0; + if ( clas >= VOICED_CLAS && total_brate >= ACELP_24k40 ) + { + maxi = findpulse( L_frame, res, (int16_t) ( fpit[( L_frame >> 6 ) - 1] ), 0, &sign ); + if ( sign == 1 ) + { + maxi = -maxi; + } + } + + *last_pulse_pos = maxi; + } + else + { + *last_pulse_pos = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * FEC_lsf_estim_enc() + * + * Simulates LSF estimation in case of FEC in the encoder ( only one frame erasure is considered ) + * The estimated LSF vector is then used to check LSF stability and may invoke safety-net usage in the next frame + *-------------------------------------------------------------------*/ + +void FEC_lsf_estim_enc( + Encoder_State *st, /* i : Encoder static memory */ + float *lsf /* o : estimated LSF vector */ +) +{ + int16_t i; + float alpha, lsf_mean[M]; + + if ( st->L_frame == L_FRAME ) + { + mvr2r( UVWB_Ave, lsf_mean, M ); + } + else + { + mvr2r( GEWB2_Ave, lsf_mean, M ); + } + + /*----------------------------------------------------------------------* + * Initialize the alpha factor + *----------------------------------------------------------------------*/ + + if ( st->last_coder_type == UNVOICED ) + { + /* clearly unvoiced */ + alpha = ALPHA_UU; + } + else if ( st->last_coder_type == AUDIO || st->clas == INACTIVE_CLAS ) + { + alpha = 0.995f; + } + else if ( st->clas == UNVOICED_CLAS ) + { + /* if stable, do not flatten the spectrum in the first erased frame */ + alpha = st->stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; + } + else if ( st->clas == UNVOICED_TRANSITION ) + { + alpha = ALPHA_UT; + } + else if ( st->clas == VOICED_CLAS || st->clas == ONSET ) + { + /* clearly voiced - mild convergence to the CNG spectrum for the first three erased frames */ + alpha = ALPHA_V; + } + else if ( st->clas == SIN_ONSET ) + { + alpha = ALPHA_S; + } + else + { + /* long erasures and onsets - rapid convergence to the CNG spectrum */ + alpha = ALPHA_VT; + } + + /*----------------------------------------------------------------------* + * Extrapolate LSF vector + *----------------------------------------------------------------------*/ + + /* extrapolate the old LSF vector */ + for ( i = 0; i < M; i++ ) + { + /* calculate mean LSF vector */ + lsf_mean[i] = BETA_FEC * lsf_mean[i] + ( 1 - BETA_FEC ) * st->lsf_adaptive_mean[i]; + + /* move old LSF vector towards the mean LSF vector */ + lsf[i] = alpha * st->lsf_old[i] + ( 1.0f - alpha ) * lsf_mean[i]; + } + + /* check LSF stability through LSF ordering */ + if ( st->L_frame == L_FRAME ) + { + reorder_lsf( lsf, MODE1_LSF_GAP, M, INT_FS_12k8 ); + } + else /* L_frame == L_FRAME16k */ + { + reorder_lsf( lsf, MODE1_LSF_GAP, M, INT_FS_16k ); + } + + return; +} diff --git a/lib_enc/SNR_calc.c b/lib_enc/SNR_calc.c new file mode 100644 index 0000000000..1ccaad6e0f --- /dev/null +++ b/lib_enc/SNR_calc.c @@ -0,0 +1,261 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "rom_enc.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * SNR_calc() + * + * + *-------------------------------------------------------------------*/ + +void SNR_calc( + const float frame_sb_energy[], /* i : energy of sub-band divided non-uniformly */ + const float sb_bg_energy[], /* i : sub-band background energy */ + const float t_bg_energy, /* i : time background energy of several frames */ + float *snr, /* o : frequency domain SNR */ + float *tsnr, /* o : time domain SNR */ + const float frame_energy, /* i : current frame energy */ + const int16_t bwidth /* i : audio band width */ +) +{ + int16_t i; + float snr_tmp, tmp; + int16_t SNR_sb_num; + SNR_sb_num = ENERGY_BAND_NUM[bwidth - CLDFBVAD_NB_ID]; + + snr_tmp = 0; + for ( i = 0; i < SNR_sb_num; i++ ) + { + tmp = ( frame_sb_energy[i] + 0.0001f ) / ( sb_bg_energy[i] + 0.0001f ); + tmp = (float) log10( tmp ); + if ( tmp > -0.1 ) + { + if ( bwidth == CLDFBVAD_SWB_ID ) + { + tmp = tmp * 3.2f; + } + else if ( bwidth == CLDFBVAD_WB_ID ) + { + tmp = tmp * 3.31f; + } + else + { + tmp = tmp * 3.0f; + } + snr_tmp += tmp; + } + } + if ( snr_tmp < 0 ) + { + snr_tmp = 0; + } + *snr = snr_tmp / SNR_sb_num; + tmp = ( frame_energy + 0.0001f ) / ( t_bg_energy + 0.0001f ); + tmp = (float) log10( tmp ); + *tsnr = tmp * 3.0f; + if ( bwidth == CLDFBVAD_SWB_ID ) + { + tmp = ( frame_energy ) / ( t_bg_energy + FLT_MIN ); + tmp = (float) log10( tmp + FLT_MIN ); + *tsnr = tmp * 2.8f; + } + + return; +} + + +/*-------------------------------------------------------------------* + * calc_snr_flux() + * + * + *-------------------------------------------------------------------*/ + +void calc_snr_flux( + float tsnr, /* i : time-domain SNR */ + float pre_snr[], /* i/o: time-domain SNR storage */ + float *snr_flux /* o : average tsnr */ +) +{ + int16_t i; + float snr_sum = 0.0f; + + if ( tsnr < 2.6f && tsnr > 0 ) + { + pre_snr[0] = tsnr; + } + else if ( tsnr <= 0 ) + { + pre_snr[0] = 0; + } + else + { + pre_snr[0] = 2.6f; + } + + snr_sum = 0; + for ( i = 0; i < PRE_SNR_NUM; i++ ) + { + snr_sum += pre_snr[i]; + } + *snr_flux = snr_sum / PRE_SNR_NUM; + for ( i = PRE_SNR_NUM - 1; i > 0; i-- ) + { + pre_snr[i] = pre_snr[i - 1]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * calc_lt_snr() + * + * + *-------------------------------------------------------------------*/ + +void calc_lt_snr( + float *lt_snr_org, /* o : original long time SNR */ + float *lt_snr, /* o : long time SNR calculated by fg_energy and bg_energy */ + const float fg_energy, /* i : foreground energy sum */ + const int16_t fg_energy_count, /* i : number of the foreground energy frame */ + const float bg_energy, /* i : background energy sum */ + const int16_t bg_energy_count, /* i : number of the background energy frame */ + const int16_t bw_index, /* i : band width index */ + const float lt_noise_sp_center0 /* i : long time noise spectral center by 0 */ +) +{ + float tmp_lt_noise_sp_center; + float rtn_lt_snr; + + const float offset = -0.00156247615814208984375f; + + tmp_lt_noise_sp_center = lt_noise_sp_center0 - 1.4f; + if ( tmp_lt_noise_sp_center > 0.8 ) + { + tmp_lt_noise_sp_center = 0.8f; + } + if ( tmp_lt_noise_sp_center < 0 ) + { + tmp_lt_noise_sp_center = 0.0f; + } + rtn_lt_snr = (float) log10( ( fg_energy * bg_energy_count + FLT_MIN ) / ( bg_energy * fg_energy_count + FLT_MIN ) ); + *lt_snr_org = rtn_lt_snr; + + if ( bg_energy_count < 56 || fg_energy_count < 56 ) + { + rtn_lt_snr = 2.1f; + } + + if ( bw_index == CLDFBVAD_NB_ID ) + { + rtn_lt_snr = ( rtn_lt_snr - 1.5f ) * 0.5f; + } + else if ( bw_index == CLDFBVAD_WB_ID ) + { + rtn_lt_snr = ( rtn_lt_snr - 1.5f ) * 0.50f; + } + else + { + rtn_lt_snr = ( rtn_lt_snr - 1.5f ) * 0.46f; + } + rtn_lt_snr = rtn_lt_snr + ( rtn_lt_snr * 0.4f + offset ) * tmp_lt_noise_sp_center * 0.4f; + if ( rtn_lt_snr < 0 ) + { + rtn_lt_snr = 0.0f; + } + + if ( rtn_lt_snr > 2.0 ) + { + rtn_lt_snr = 2.0f; + } + + *lt_snr = rtn_lt_snr; + + return; +} + + +/*-------------------------------------------------------------------* + * calc_lf_snr() + * + * + *-------------------------------------------------------------------*/ + +void calc_lf_snr( + float *lf_snr_smooth, /* o : smoothed lf_snr */ + float *lf_snr, /* o : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ + const float l_speech_snr, /* i : sum of active frames snr */ + const int16_t l_speech_snr_count, /* i : number of the active frame */ + const float l_silence_snr, /* i : sum of the nonactive frames snr */ + const int16_t l_silence_snr_count, /* i : number of the nonactive frame */ + const int16_t fg_energy_count, /* i : number of the foreground energy frame */ + const int16_t bg_energy_count, /* i : number of the background energy frame */ + const int16_t bw_index /* i : band width index */ +) +{ + float l_snr; + + l_snr = l_speech_snr / l_speech_snr_count - l_silence_snr / l_silence_snr_count; + *lf_snr_smooth = *lf_snr_smooth * 0.9f + 0.1f * l_snr; + + if ( bg_energy_count < 56 || fg_energy_count < 56 ) + { + l_snr = 4.8f; + } + + l_snr = ( l_snr - 3.0f ) * 0.12f; + + if ( l_snr < 0 ) + { + l_snr = 0; + } + + if ( l_snr > MAX_LF_SNR_TAB[bw_index] ) + { + l_snr = MAX_LF_SNR_TAB[bw_index]; + } + + *lf_snr = l_snr; + + return; +} diff --git a/lib_enc/acelp_core_enc.c b/lib_enc/acelp_core_enc.c new file mode 100644 index 0000000000..8420810339 --- /dev/null +++ b/lib_enc/acelp_core_enc.c @@ -0,0 +1,756 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#include "string.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +#include "ivas_rom_com.h" +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------* + * acelp_core_enc() + * + * ACELP core encoder + *--------------------------------------------------------------------*/ + +ivas_error acelp_core_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float inp[], /* i : input signal of the current frame */ + const float ener, /* i : residual energy from Levinson-Durbin*/ + float A[NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes*/ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ + const float epsP[M + 1], /* i : LP prediction errors */ + float lsp_new[M], /* i : LSPs at the end of the frame */ + float lsp_mid[M], /* i : LSPs in the middle of the frame */ + const int16_t vad_hover_flag, /* i : VAD hangover flag */ + const int16_t attack_flag, /* i : attack flag (GSC or TC) */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float old_syn_12k8_16k[], /* o : intermediate ACELP synthesis at 12.8kHz or 16kHz to be used by SWB BWE */ + float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ + int16_t *unbits, /* o : number of unused bits */ + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ + const float tdm_lspQ_PCh[M], /* i : Q LSPs for primary channel */ + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +) +{ + int16_t i, nBits; /* reserved bits */ + LPD_state_HANDLE hLPDmem; /* i/o: acelp memories */ + float old_exc[L_EXC], *exc; /* excitation signal buffer */ + float lsf_new[M]; /* ISFs at the end of the frame */ + float Aq[NB_SUBFR16k * ( M + 1 )]; /* A(z) quantized for the 4 subframes */ + float syn[L_FRAME16k]; /* synthesis signal buffer */ + float res[L_FRAME16k]; /* Residual signal for FER protection */ + float exc2[L_FRAME16k]; /* enhanced excitation */ + float Es_pred; /* predicited scaled innovation energy */ + float tmp_noise; /* NB post-filter long-term noise energy*/ + int16_t tc_subfr; /* TC sub-frame indication */ + float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ + float *bwe_exc; /* excitation for SWB TBE */ + int16_t allow_cn_step; + int32_t int_fs; + float att; + int16_t nb_bits; /* parameters handling */ + + /* SC-VBR - back-up memories for LSF quantizer and synthesis filter */ + int16_t pstreaklen; + float mem_MA[M], mem_AR[M], Bin_E[L_FFT], Bin_E_old[L_FFT / 2], lsp_new_bck[M], lsp_mid_bck[M], mem_syn_bck[M]; + float clip_var, mem_w0_bck, streaklimit; + + float q_env[NUM_ENV_CNG]; + int16_t sid_bw = -1; + float exc3[L_FRAME16k]; + float syn1[L_FRAME16k]; + + float tilt_code_bck; + float gc_threshold_bck; + float clip_var_bck[6]; + int16_t next_force_sf_bck; + int16_t uc_two_stage_flag; + int16_t position; + float tmpF; + int16_t ppp_mode, nelp_mode; + int16_t tdm_lp_reuse_flag, tdm_low_rate_mode, tdm_Pitch_reuse_flag; + float *tdm_Pri_pitch_buf; + + /* bitstream */ + BSTR_ENC_HANDLE hBstr = st->hBstr; + + ivas_error error; + + error = IVAS_ERR_OK; + + if ( st->element_mode == IVAS_CPE_MDCT && st->core_brate <= SID_2k40 ) + { + /* Core was ACELP because of DTX in MDCT-Stereo, but SID encoding for that is done in separate function */ + return error; + } + + wmops_sub_start( "acelp_core_enc" ); + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + hLPDmem = st->hLPDmem; + + Es_pred = 0; + + exc = old_exc + L_EXC_MEM; /* pointer to excitation signal in the current frame */ + mvr2r( hLPDmem->old_exc, old_exc, L_EXC_MEM ); + + if ( st->hBWE_TD != NULL ) + { + bwe_exc = old_bwe_exc + PIT16k_MAX * 2; /* pointer to BWE excitation signal in the current frame */ + mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); + } + else + { + bwe_exc = NULL; + } + + st->bpf_off = 0; + if ( st->last_core == HQ_CORE || st->last_codec_mode == MODE2 || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) + { + /* in case of HQ->ACELP switching, do not apply BPF */ + st->bpf_off = 1; + /* reset the GSC pre echo energy threshold in case of switching */ + if ( st->hGSCEnc != NULL ) + { + st->hGSCEnc->Last_frame_ener = (float) MAX_32; + } + } + + /* force safety-net LSFQ in the first frames after CNG segment */ + if ( st->last_core_brate <= SID_2k40 ) + { + st->Nb_ACELP_frames = 0; + } + st->Nb_ACELP_frames++; + + if ( st->L_frame == L_FRAME ) + { + int_fs = INT_FS_12k8; + } + else + { + int_fs = INT_FS_16k; + } + + tmp_noise = 0; + tc_subfr = -1; + position = -1; + + /* SC-VBR temporary variables */ + pstreaklen = 0; + clip_var = 0; + mem_w0_bck = 0; + streaklimit = 0; + + /* channel-aware mode */ + reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); + + /* VBR modes */ + if ( st->Opt_SC_VBR ) + { + ppp_mode = st->hSC_VBR->ppp_mode; + nelp_mode = st->hSC_VBR->nelp_mode; + } + else + { + ppp_mode = 0; + nelp_mode = 0; + } + + /* TD stereo */ + if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) + { + tdm_lp_reuse_flag = hStereoTD->tdm_lp_reuse_flag; + tdm_low_rate_mode = hStereoTD->tdm_low_rate_mode; + tdm_Pitch_reuse_flag = hStereoTD->tdm_Pitch_reuse_flag; + tdm_Pri_pitch_buf = hStereoTD->tdm_Pri_pitch_buf; + } + else + { + tdm_lp_reuse_flag = 0; + tdm_low_rate_mode = 0; + if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) + { + tdm_low_rate_mode = 1; + } + tdm_Pitch_reuse_flag = 0; + tdm_Pri_pitch_buf = NULL; + } + + /*-----------------------------------------------------------------* + * ACELP@12k8 / ACELP@16k switching + *-----------------------------------------------------------------*/ + + if ( st->last_L_frame != st->L_frame && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + /* in case of switching, do not apply BPF (flag employed also in updt_enc()) */ + st->bpf_off = 1; + + /* force safety-net LSFQ in the first frames after ACELP@12k8/ACELP@16k switching */ + st->Nb_ACELP_frames = 1; + + /* convert old quantized LSP vector */ + if ( st->L_frame == L_FRAME ) + { + st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); + } + else + { + st->rate_switching_reset = st->rate_switching_reset_16kHz; + mvr2r( st->lsp_old16k, st->lsp_old, M ); + } + + /* convert old quantized LSF vector */ + lsp2lsf( st->lsp_old, st->lsf_old, M, int_fs ); + + /* interpolation of unquantized ISPs */ + if ( st->rate_switching_reset ) + { + /*extrapolation in case of unstable LSP*/ + int_lsp4( st->L_frame, lsp_mid, lsp_mid, lsp_new, A, M, 0 ); + } + else + { + int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, A, M, 0 ); + } + + /* Reset LPC mem */ + mvr2r( GEWB_Ave, st->mem_AR, M ); + set_zero( st->mem_MA, M ); + + /* update synthesis filter memories */ + synth_mem_updt2( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); + mvr2r( hLPDmem->old_exc, old_exc, L_EXC_MEM ); + mvr2r( hLPDmem->mem_syn2, hLPDmem->mem_syn1, M ); + mvr2r( hLPDmem->mem_syn2, hLPDmem->mem_syn3, M ); + + /* update Aw[] coefficients */ + weight_a_subfr( st->L_frame / L_SUBFR, A, Aw, st->gamma, M ); + } + + if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) + { + st->rate_switching_reset = 1; + } + + /*----------------------------------------------------------------* + * Encoding of CNG frames + *----------------------------------------------------------------*/ + + if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + if ( st->cng_type == LP_CNG ) + { + /* Run CNG post parameter update */ + cng_params_postupd( st->hTdCngEnc->ho_circ_ptr, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf, st->hTdCngEnc->cng_brate_buf, st->hTdCngEnc->ho_env_circ, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); + + /* encode CNG parameters */ + CNG_enc( st, Aq, inp, ener, lsp_mid, lsp_new, lsf_new, &allow_cn_step, q_env, &sid_bw ); + + /* comfort noise generation */ + CNG_exc( st->core_brate, st->L_frame, &st->hTdCngEnc->Enew, &st->hTdCngEnc->cng_seed, exc, exc2, &st->hTdCngEnc->lp_ener, st->last_core_brate, &st->hDtxEnc->first_CNG, &st->hTdCngEnc->cng_ener_seed, bwe_exc, allow_cn_step, &st->hTdCngEnc->last_allow_cn_step, st->hTdCngEnc->num_ho, q_env, st->hTdCngEnc->lp_env, st->hTdCngEnc->old_env, st->hTdCngEnc->exc_mem, st->hTdCngEnc->exc_mem1, &sid_bw, &st->hTdCngEnc->cng_ener_seed1, exc3, st->Opt_AMR_WB, EVS_MONO ); + } + else + { + if ( st->core_brate == SID_2k40 && st->element_mode != IVAS_CPE_MDCT ) + { + FdCng_encodeSID( st ); + st->hDtxEnc->last_CNG_L_frame = st->L_frame; + } + + generate_comfort_noise_enc( st ); + + FdCng_exc( st->hFdCngEnc->hFdCngCom, &st->hDtxEnc->CNG_mode, st->L_frame, st->lsp_old, st->hDtxEnc->first_CNG, st->hDtxEnc->lspCNG, Aq, lsp_new, lsf_new, exc, exc2, bwe_exc ); + mvr2r( exc2, exc3, st->L_frame ); + + if ( st->core_brate == SID_2k40 ) + { + tmpF = cng_energy( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att, exc, st->L_frame ); + i = (int16_t) ( ( tmpF + 2.0f ) * STEP_SID ); + i = min( max( i, 0 ), 127 ); + st->hTdCngEnc->old_enr_index = i; + } + } + +#ifdef DEBUG_MODE_ACELP + dbgwrite( exc, sizeof( float ), st->L_frame, 1, "res/exc.enc" ); +#endif + /* Reset HO counter in the first SID frame */ + if ( st->hTdCngEnc != NULL ) + { + st->hTdCngEnc->burst_ho_cnt = 0; + } + + /* synthesis at 12.8kHz sampling rate */ + syn_12k8( st->L_frame, Aq, exc3, syn1, hLPDmem->mem_syn3, 1 ); + + /* reset the encoder */ + CNG_reset_enc( st, pitch_buf, voice_factors, 0 ); + + /* update st->mem_syn1 for ACELP core switching */ + mvr2r( hLPDmem->mem_syn3, hLPDmem->mem_syn1, M ); + + /* update ACELP core synthesis filter memory */ + mvr2r( hLPDmem->mem_syn3, hLPDmem->mem_syn, M ); + + /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ + mvr2r( syn1 + st->L_frame - L_SYN_MEM, hLPDmem->mem_syn_r, L_SYN_MEM ); + + /* save and delay synthesis to be used by SWB BWE */ + if ( st->hBWE_FD != NULL ) + { + save_old_syn( st->L_frame, syn1, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac, &st->hBWE_FD->mem_deemph_old_syn ); + } + + /*Update MODE2 core switching memory*/ + deemph( syn1, st->preemph_fac, st->L_frame, &( hLPDmem->syn[M] ) ); + mvr2r( syn1 + st->L_frame - M - 1, hLPDmem->syn, M + 1 ); + } + + /*----------------------------------------------------------------* + * Encoding of all other frames + *----------------------------------------------------------------*/ + + else + { + /*-----------------------------------------------------------------* + * Configure ACELP bit allocation + *-----------------------------------------------------------------*/ + + nb_bits = 0; + st->acelp_cfg.FEC_mode = 0; + uc_two_stage_flag = 0; + if ( !nelp_mode && !ppp_mode ) + { + config_acelp1( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, st->GSC_noisy_speech, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 0, &nb_bits, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); + } + + /*-----------------------------------------------------------------* + * After inactive period, use the most up-to-date ISPs + *-----------------------------------------------------------------*/ + + if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_2k40 ) + { + mvr2r( st->hDtxEnc->lspCNG, st->lsp_old, M ); + lsp2lsf( st->hDtxEnc->lspCNG, st->lsf_old, M, int_fs ); + } + + /*-----------------------------------------------------------------* + * Reset higher ACELP pre-quantizer in case of switching + *-----------------------------------------------------------------*/ + + if ( !st->use_acelp_preq ) + { + st->mem_deemp_preQ = 0.0f; + st->mem_preemp_preQ = 0.0f; + st->last_code_preq = 0; + st->last_nq_preQ = 0; + } + st->use_acelp_preq = 0; + + /*-----------------------------------------------------------------* + * LSF Quantization + * A[z] calculation + *-----------------------------------------------------------------*/ + + /* SC-VBR & channel-aware mode - back-up memories for LSF quantizer and synthesis filter */ + lsf_syn_mem_backup( st, &tilt_code_bck, &gc_threshold_bck, clip_var_bck, &next_force_sf_bck, lsp_new, lsp_mid, &clip_var, mem_AR, mem_MA, lsp_new_bck, lsp_mid_bck, Bin_E, Bin_E_old, mem_syn_bck, &mem_w0_bck, &streaklimit, &pstreaklen ); + + if ( !tdm_lp_reuse_flag ) + { +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, st->GSC_IVAS_mode, tdm_lsfQ_PCh ); +#else + lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, st->GSC_IVAS_mode ); +#endif + } + else + { + const float *pt_interp_2; +#ifdef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE + if ( st->active_cnt != 1 ) + { + int16_t beta_index[1]; + float lsf_wgts[M]; + + /* intra_frame prediction for the LSFs */ + lsp2lsf( lsp_new, lsf_new, M, 12800 ); + + Unified_weighting( &st->Bin_E[L_FFT / 2], lsf_new, lsf_wgts, st->bwidth == NB, st->coder_type == UNVOICED, st->sr_core, M ); + + tdm_SCh_lsf_reuse( ENC, st->element_brate, lsf_new, lsp_new, tdm_lsfQ_PCh, lsf_wgts, beta_index ); + + push_indice( hBstr, IND_IC_LSF_PRED, beta_index[0], TDM_IC_LSF_PRED_BITS ); + } + if ( st->active_cnt == 1 ) + { + mvr2r( lsp_new, st->lsp_old, M ); + lsp2lsf( lsp_new, st->lsf_old, M, st->sr_core ); + lsp2lsf( lsp_new, lsf_new, M, st->sr_core ); + } +#else + if ( st->active_cnt != 1 ) + { + mvr2r( tdm_lspQ_PCh, lsp_new, M ); + mvr2r( tdm_lsfQ_PCh, lsf_new, M ); + } +#endif + pt_interp_2 = interpol_frac_12k8; + if ( tdm_low_rate_mode == 1 && st->coder_type > UNVOICED ) + { + pt_interp_2 = interpol_frac2; + } +#ifndef LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE + if ( st->active_cnt == 1 ) + { + mvr2r( lsp_new, st->lsp_old, M ); + lsp2lsf( lsp_new, st->lsf_old, M, st->sr_core ); + lsp2lsf( lsp_new, lsf_new, M, st->sr_core ); + } +#endif + /* LSP interpolation and conversion of LSPs to A(z) */ + int_lsp( st->L_frame, st->lsp_old, lsp_new, Aq, M, pt_interp_2, 0 ); + + /* Check LSF stability (distance between old LSFs and current LSFs) */ + st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); + } + + if ( st->last_core == HQ_CORE && st->element_mode > EVS_MONO ) + { + /* Prepare ACB memory from last HQ frame */ + tmpF = hLPDmem->old_exc[0]; + preemph( hLPDmem->old_exc, st->preemph_fac, st->L_frame, &tmpF ); + mvr2r( hLPDmem->old_exc + st->L_frame - M, hLPDmem->mem_syn, M ); + residu( Aq, M, hLPDmem->old_exc, old_exc, st->L_frame ); + } + + /*---------------------------------------------------------------* + * Calculation of LP residual (filtering through A[z] filter) + *---------------------------------------------------------------*/ + + calc_residu( inp, res, Aq, st->L_frame ); + + calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); + if ( att != 1.0f ) + { + v_multc( res, att, res, st->L_frame ); + } + + /*-----------------------------------------------------------------* + * Determine TC subframe classification + *-----------------------------------------------------------------*/ + + if ( st->coder_type == TRANSITION ) + { + tc_classif_enc( st->L_frame, &tc_subfr, &position, attack_flag, st->pitch[0], res ); + + config_acelp1( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 1, NULL, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); + } + + /*---------------------------------------------------------------* + * Calculation of prediction for scaled innovation energy + * (for memory-less gain quantizer) + *---------------------------------------------------------------*/ + + if ( nb_bits > 0 ) + { + Es_pred_enc( &Es_pred, &i, st->L_frame, L_SUBFR, res, st->voicing, nb_bits, uc_two_stage_flag ); + push_indice( hBstr, IND_ES_PRED, i, nb_bits ); + } + + /*------------------------------------------------------------* + * Encode excitation according to coding type + *------------------------------------------------------------*/ + + if ( tdm_low_rate_mode ) /* tdm stereo low rate mode */ + { + if ( st->coder_type <= UNVOICED ) + { + tdm_low_rate_enc( st, Aq, res, syn, exc, pitch_buf, voice_factors, bwe_exc, 0 /*attack_flag*/, lsf_new, &tmp_noise ); + } + else /* GENERIC */ + { + encod_gen_2sbfr( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + } + } + else if ( nelp_mode ) + { + /* SC-VBR - NELP frames */ + encod_nelp( st, inp, Aw, Aq, res, syn, &tmp_noise, exc, exc2, pitch_buf, voice_factors, bwe_exc ); + } + else if ( st->coder_type == UNVOICED ) + { + /* UNVOICED frames (Gauss. excitation) */ + encod_unvoiced( st, inp, Aw, Aq, Es_pred, uc_two_stage_flag, res, syn, &tmp_noise, exc, pitch_buf, voice_factors, bwe_exc ); + } + else if ( st->coder_type == TRANSITION ) + { + encod_tran( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, tc_subfr, position, unbits ); + } + else if ( ppp_mode ) + { + /* SC-VBR - PPP frames */ + if ( ( error = encod_ppp( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc ) ) != IVAS_ERR_OK ) + { + return error; + } + + + if ( st->hSC_VBR->bump_up ) /* PPP failed, bump up */ + { + /* restore memories of LSF quantizer and synthesis filter */ + lsf_syn_mem_restore( st, tilt_code_bck, gc_threshold_bck, clip_var_bck, next_force_sf_bck, lsp_new, lsp_mid, clip_var, mem_AR, mem_MA, lsp_new_bck, lsp_mid_bck, Bin_E, Bin_E_old, mem_syn_bck, mem_w0_bck, streaklimit, pstreaklen ); + + /* Configure ACELP bit allocation */ + config_acelp1( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 0, &nb_bits, unbits, 0, &uc_two_stage_flag, 0, 0, st->idchan, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); + + /* redo LSF quantization */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, 0, NULL ); +#else + lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, 0 ); +#endif + + /* recalculation of LP residual (filtering through A[z] filter) */ + calc_residu( inp, res, Aq, st->L_frame ); + st->hTdCngEnc->burst_ho_cnt = 0; + + /* VOICED frames in SC-VBR */ + encod_gen_voic( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, unbits, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + } + } + else if ( st->coder_type == AUDIO || ( st->coder_type == INACTIVE && st->total_brate <= MAX_GSC_INACTIVE_BRATE ) ) + { + /* AUDIO and INACTIVE frames (coded by GSC technology) */ + encod_audio( st, inp, Aw, Aq, res, syn, exc, pitch_buf, voice_factors, bwe_exc, attack_flag, lsf_new, &tmp_noise, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + } + else + { + /* GENERIC, VOICED and INACTIVE frames (coded by AVQ technology) */ + encod_gen_voic( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, unbits, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + } + +#ifdef DEBUG_MODE_ACELP + dbgwrite( exc, sizeof( float ), st->L_frame, 1, fname( debug_dir, "exc.enc", st->idchan, st->id_element, ENC ) ); + dbgwrite( res, sizeof( float ), st->L_frame, 1, fname( debug_dir, "resid", st->idchan, st->id_element, ENC ) ); +#endif + +#ifdef DEBUGGING + /* SNR measuremenet of CELP output */ + if ( ppp_mode == 0 ) + { + char name[50] = "CELP_output_ch "; + + if ( st->id_element == 0 ) + { + name[14] = (char) ( st->idchan + '0' ); + } + else + { + char name2[50] = "CELP_output.idX_chX "; + name2[14] = (char) ( st->id_element + '0' ); + name2[18] = (char) ( st->idchan + '0' ); + strcpy( name, name2 ); + } + + if ( st->idchan == 0 ) + { + snr_celp( st->L_frame, L_SUBFR, st->gamma, st->preemph_fac, st->vad_flag, st->coder_type, inp, syn, A, 0, name ); + } + else if ( st->idchan == 1 ) + { + snr_celp( st->L_frame, L_SUBFR, st->gamma, st->preemph_fac, st->vad_flag, st->coder_type, inp, syn, A, 1, name ); + } + } +#endif + /* update mem_syn1 for ACELP core switching */ + mvr2r( hLPDmem->mem_syn, hLPDmem->mem_syn1, M ); + + /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ + mvr2r( syn + st->L_frame - L_SYN_MEM, hLPDmem->mem_syn_r, L_SYN_MEM ); + + /* save and delay synthesis to be used by SWB BWE */ + if ( st->hBWE_FD != NULL ) + { + save_old_syn( st->L_frame, syn, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac, &st->hBWE_FD->mem_deemph_old_syn ); + } + + /*Update MODE2 core switching memory*/ + mvr2r( syn, syn1, st->L_frame ); + deemph( syn1, st->preemph_fac, st->L_frame, &( hLPDmem->syn[M] ) ); + mvr2r( syn1 + st->L_frame - M - 1, hLPDmem->syn, M + 1 ); + + if ( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) + { + mvr2r( syn1 + st->L_frame / 2, st->hTcxEnc->Txnq, st->L_frame / 2 ); + } + + /*--------------------------------------------------------------------------------------* + * Modify the excitation signal when the noise is stationary + *--------------------------------------------------------------------------------------*/ + + if ( !( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) && nelp_mode != 1 && !( st->element_mode == IVAS_SCE && tdm_low_rate_mode ) ) + { + /* exc2 buffer is needed only for updating of Aq[] which is needed for core switching */ + mvr2r( exc, exc2, st->L_frame ); + stat_noise_uv_enc( st, epsP, lsp_new, lsp_mid, Aq, exc2, uc_two_stage_flag ); + } + + /*-----------------------------------------------------------------* + * Encode supplementary information for Frame Error Concealment + *-----------------------------------------------------------------*/ + + FEC_encode( hBstr, st->acelp_cfg, syn, st->coder_type, st->clas, pitch_buf, res, &st->Last_pulse_pos, st->L_frame, st->total_brate ); + + if ( st->hBWE_TD != NULL ) + { + if ( st->L_frame == L_FRAME ) + { + mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + else + { + mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + } + + + } /* end of active inp coding */ + + + /*-----------------------------------------------------------------* + * Write ACELP unused bits + *-----------------------------------------------------------------*/ + + if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA && st->core_brate != PPP_NELP_2k80 ) + { + nBits = st->acelp_cfg.ubits; + + while ( nBits > 0 ) + { + i = min( nBits, 16 ); + push_indice( hBstr, IND_UNUSED, 0, i ); + nBits -= i; +#ifdef DEBUGGING + if ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) + { + printf( "Issue with unused bits at Ln 653 in acelp_core_enc channel 1 at frame %d\n", frame ); + } +#endif + } + } + + /*-----------------------------------------------------------------* + * Apply non linearity in case of SWB TBE + *-----------------------------------------------------------------*/ + + if ( st->hBWE_TD != NULL ) + { + if ( ( st->last_Opt_SC_VBR == 1 && st->Opt_SC_VBR == 0 ) || ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->last_extl != SWB_TBE && st->last_extl != WB_TBE && st->last_extl != FB_TBE ) || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && !st->tdm_LRTD_flag ) ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); + } + + if ( !st->Opt_SC_VBR && ( st->idchan == 0 || st->element_mode != IVAS_CPE_TD || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) ) + { + /* Apply a non linearity to the SHB excitation */ + non_linearity( bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); + } + + if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + } + } + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + updt_enc( st, old_exc, pitch_buf, Es_pred, Aq, lsf_new, lsp_new, old_bwe_exc ); + + if ( st->hTdCngEnc != NULL && st->Opt_DTX_ON && st->core_brate > SID_2k40 ) + { + /* update CNG parameters in active frames */ + cng_params_upd( lsp_new, exc, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); + + if ( st->L_frame == L_FRAME ) + { + /* store LSPs@16k, potentially to be used in CNG@16k */ + mvr2r( st->lsp_old16k, &( st->hTdCngEnc->ho_lsp_circ2[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); + } + + /* set LSP@16k flag for the first buffer */ + st->hTdCngEnc->ho_16k_lsp[st->hTdCngEnc->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); + + /* efficient DTX hangover control */ + if ( st->hTdCngEnc->burst_ho_cnt > 1 ) + { + dtx_hangover_control( st, lsp_new ); + } + } + + /* SC-VBR update of average data rate */ + if ( st->vad_flag == 1 ) + { + /* reset in case of bitrate switching in EVS */ + if ( st->hSC_VBR != NULL ) + { + update_average_rate( st->hSC_VBR, st->core_brate ); + } + } + + wmops_sub_end(); + + return error; +} diff --git a/lib_enc/acelp_core_switch_enc.c b/lib_enc/acelp_core_switch_enc.c new file mode 100644 index 0000000000..52c955732c --- /dev/null +++ b/lib_enc/acelp_core_switch_enc.c @@ -0,0 +1,484 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void encod_gen_voic_core_switch( Encoder_State *st, const int16_t L_frame, const float inp[], const float Aq[], const float A[], const int16_t T_op[], const float voicing[], float *exc, const int32_t core_bitrate ); + +static void bwe_switch_enc( Encoder_State *st, const float *old_input ); + + +/*-------------------------------------------------------------------* + * acelp_core_switch_enc() + * + * ACELP core encoder in the ACELP->HQ switching frame + *--------------------------------------------------------------------*/ + +void acelp_core_switch_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float inp12k8[], /* i : input signal @12.8 kHz */ + const float inp16k[], /* i : input signal @16 kHz */ + const float A[NB_SUBFR16k * ( M + 1 )] /* i : A(z) unquantized for the 4 subframes*/ +) +{ + int16_t i, j, T_op[2]; + float old_exc[L_EXC], *exc; /* excitation signal buffer */ + const float *inp; + int32_t cbrate; + float Aq[2 * ( M + 1 )]; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + /* initializations */ + exc = old_exc + L_EXC_MEM; /* pointer to excitation signal in the current frame */ + mvr2r( st->hLPDmem->old_exc, old_exc, L_EXC_MEM ); + + mvr2r( st->old_Aq_12_8, Aq, M + 1 ); + mvr2r( st->old_Aq_12_8, Aq + ( M + 1 ), M + 1 ); + + T_op[0] = st->pitch[0]; + T_op[1] = st->pitch[1]; + + + /*----------------------------------------------------------------* + * set switching frame bitrate + *----------------------------------------------------------------*/ + + if ( st->last_L_frame == L_FRAME ) /* ACELP@12k8 core */ + { + inp = inp12k8; + + if ( st->core_brate > ACELP_24k40 ) + { + cbrate = ACELP_24k40; + } + else + { + cbrate = st->core_brate; + } + } + else /* ACELP@16k core */ + { + inp = inp16k; + + if ( st->core_brate <= ACELP_8k00 ) + { + cbrate = ACELP_8k00; + } + else if ( st->core_brate <= ACELP_14k80 ) + { + cbrate = ACELP_14k80; + } + else + { + cbrate = min( st->core_brate, ACELP_22k60 ); + } + } + +#ifdef FIX_I4_OL_PITCH + if ( st->last_codec_mode == MODE1 ) + { + /* in MODE1 T_op is at 12.8 kHz */ + if ( st->last_L_frame != L_FRAME ) /* ACELP@16k core -> convert T_op to 16 kHz */ + { + T_op[0] = (short) ( 1.25f * T_op[0] + 0.5f ); + T_op[1] = (short) ( 1.25f * T_op[1] + 0.5f ); + } + } + else + { + /* in MODE2 T_op is at 16 kHz */ + if ( st->last_L_frame == L_FRAME ) /* ACELP@12.8k core -> convert T_op to 12.8 kHz */ + { + T_op[0] = (short) ( 0.8f * T_op[0] + 0.5f ); + T_op[1] = (short) ( 0.8f * T_op[1] + 0.5f ); + } + } +#else + if ( st->last_L_frame != L_FRAME ) /* ACELP@16k core */ + { + T_op[0] = (short) ( 1.25f * T_op[0] + 0.5f ); + T_op[1] = (short) ( 1.25f * T_op[1] + 0.5f ); + } +#endif + /*----------------------------------------------------------------* + * Excitation encoding + *----------------------------------------------------------------*/ + + config_acelp1( ENC, st->total_brate, cbrate, st->core, -1, -1, st->last_L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, GENERIC, -1, -1, &j, &i, st->element_mode, &i /*dummy*/, 0 /*tdm_lp_reuse_flag*/, 0 /*tdm_low_rate_mode*/, st->idchan, 0 /*tdm_Pitch_reuse_flag*/, 0, 0 /*GSC_IVAS_mode*/ + ); + + encod_gen_voic_core_switch( st, st->last_L_frame, inp, Aq, A, T_op, st->voicing, exc, cbrate ); + + /*----------------------------------------------------------------* + * Manipulate ACELP subframe indices (move them to their proper place) + *----------------------------------------------------------------*/ + + for ( i = 0; i < 20; i++ ) + { + hBstr->ind_list[IND_CORE_SWITCHING_CELP_SUBFRAME + i].value = hBstr->ind_list[TAG_ACELP_SUBFR_LOOP_START + i].value; + hBstr->ind_list[IND_CORE_SWITCHING_CELP_SUBFRAME + i].nb_bits = hBstr->ind_list[TAG_ACELP_SUBFR_LOOP_START + i].nb_bits; + hBstr->ind_list[TAG_ACELP_SUBFR_LOOP_START + i].nb_bits = -1; + } + + /*----------------------------------------------------------------* + * BWE encoding + *----------------------------------------------------------------*/ + + if ( !( ( st->last_L_frame == L_FRAME16k && inner_frame_tbl[st->bwidth] == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) + { + bwe_switch_enc( st, (const float *) st->old_input_signal ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * encod_gen_voic_core_switch() + * + * Encode excitation signal in ACELP->HQ switching frame + *-------------------------------------------------------------------*/ + +static void encod_gen_voic_core_switch( + Encoder_State *st, /* i/o: state structure */ + const int16_t L_frame, /* i : length of the frame */ + const float inp[], /* i : input signal */ + const float Aq[], /* i : LP coefficients */ + const float A[], /* i : unquantized A(z) filter */ + const int16_t T_op[], /* i : open loop pitch */ + const float voicing[], /* i : voicing */ + float *exc, /* i/o: current non-enhanced excitation */ + const int32_t core_bitrate /* i : switching frame bitrate */ +) +{ + float res[L_SUBFR]; /* residual signal */ + float Ap[M + 1]; /* A(z) with spectral expansion */ + float xn[L_SUBFR]; /* Target vector for pitch search */ + float xn2[L_SUBFR]; /* Target vector for codebook search */ + float cn[L_SUBFR]; /* Target vector in residual domain */ + float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ + float code[L_SUBFR]; /* Fixed codebook excitation */ + float y1[L_SUBFR]; /* Filtered adaptive excitation */ + float y2[L_SUBFR]; /* Filtered algebraic excitation */ + float gain_pit; /* Pitch gain */ + float voice_fac; /* Voicing factor */ + float gain_code; /* Gain of code */ + float gain_inov; /* inovation gain */ + int16_t i; /* tmp variables */ + int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ + int16_t T0_min, T0_max; /* pitch variables */ + float pitch; /* floating pitch value */ + float g_corr[6]; /* ACELP correl, values + gain pitch */ + int16_t clip_gain; /* ISF clip gain */ + int16_t unbits; /* number of unused bits for EVS_PI */ + float norm_gain_code; + int16_t pitch_limit_flag; + float tmpF, dummyF[NB_SUBFR16k]; + int16_t lp_select, lp_flag; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + unbits = 0; + + if ( L_frame == L_FRAME ) + { + T0_max = PIT_MAX; + T0_min = PIT_MIN; + } + else /* L_frame == L_FRAME16k */ + { + T0_max = PIT16k_MAX; + T0_min = PIT16k_MIN; + } + + /*------------------------------------------------------------------* + * Calculation of LP residual (filtering through A[z] filter) + *------------------------------------------------------------------*/ + + residu( Aq, M, inp, res, L_SUBFR ); + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + mvr2r( res, exc, L_SUBFR ); + + if ( L_frame == L_FRAME16k ) + { + weight_a( A, Ap, GAMMA16k, M ); /* Bandwidth expansion of A(z) filter coefficients */ + find_targets( inp, hLPDmem->mem_syn, 0, &( hLPDmem->mem_w0 ), Aq, res, L_SUBFR, Ap, PREEMPH_FAC_16k, xn, cn, h1 ); + } + else + { + weight_a( A, Ap, GAMMA1, M ); /* Bandwidth expansion of A(z) filter coefficients */ + find_targets( inp, hLPDmem->mem_syn, 0, &( hLPDmem->mem_w0 ), Aq, res, L_SUBFR, Ap, PREEMPH_FAC, xn, cn, h1 ); + } + + /*----------------------------------------------------------------* + * Close-loop pitch search and quantization + * Adaptive exc. construction + *----------------------------------------------------------------*/ + + set_f( dummyF, -1, NB_SUBFR16k ); /* hack to signal ACELP->HQ switching frame */ + pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, core_bitrate, 0, L_frame, GENERIC, &pitch_limit_flag, 0, exc, L_SUBFR, T_op, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, 0 /*hStereoTD->tdm_Pitch_reuse_flag*/, dummyF /*hStereoTD->tdm_Pri_pitch_buf*/ ); + + /*-----------------------------------------------------------------* + * Find adaptive exitation + *-----------------------------------------------------------------*/ + + pred_lt4( exc, exc, T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + * or in case of floating point encoder & fixed p. decoder + *-----------------------------------------------------------------*/ + + clip_gain = gp_clip( st->element_mode, core_bitrate, voicing, 0, GENERIC, xn, st->clip_var ); + + /*-----------------------------------------------------------------* + * LP filtering of the adaptive excitation, codebook target computation + *-----------------------------------------------------------------*/ + + lp_flag = st->acelp_cfg.ltf_mode; + + lp_select = lp_filt_exc_enc( MODE1, GENERIC, 0, exc, h1, xn, y1, xn2, L_SUBFR, L_frame, g_corr, clip_gain, &gain_pit, &lp_flag ); + + if ( lp_flag == NORMAL_OPERATION ) + { + push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); + } + + /*-----------------------------------------------------------------* + * Innovation encoding + *-----------------------------------------------------------------*/ + + inov_encode( st, core_bitrate, 0, L_frame, L_frame, GENERIC, st->bwidth, 0, 0, -1, Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, pitch, xn2, code, y2, &unbits, L_SUBFR ); + + /*-----------------------------------------------------------------* + * Gain encoding + *-----------------------------------------------------------------*/ + + if ( L_frame == L_FRAME ) + { + gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, 0, -1, xn, y1, y2, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); + } + else + { + gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, 0, -1, xn, y1, y2, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); + } + + gp_clip_test_gain_pit( st->element_mode, core_bitrate, gain_pit, st->clip_var ); + + hLPDmem->tilt_code = est_tilt( exc, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*-----------------------------------------------------------------* + * Construct adaptive part of the excitation + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + tmpF = gain_pit * exc[i]; + exc[i] = tmpF + gain_code * code[i]; + } + + /* write reserved bits */ + if ( unbits ) + { + push_indice( hBstr, IND_UNUSED, 0, unbits ); + } + + /*-----------------------------------------------------------------* + * long term prediction on the 2nd sub frame + *-----------------------------------------------------------------*/ + + pred_lt4( &exc[L_SUBFR], &exc[L_SUBFR], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc[i + L_SUBFR] *= gain_pit; + } + + return; +} + + +/*-------------------------------------------------------------------* + * bwe_switch_enc() + * + * Encode BWE in ACELP->HQ switching frame + *-------------------------------------------------------------------*/ + +static void bwe_switch_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *new_speech /* i : original input signal */ +) +{ + int16_t i, k, delta, Loverlapp, d1, d1m, maxd1, ind1, fdelay, gapsize; + float accA, accB, min_sq_cross, min_corr, E1, E2, gain; + float tmp_mem[2 * L_FILT48k], tmp_mem2[2 * L_FILT48k], hb_synth_tmp[NS2SA( 48000, 10000000L )]; + const float *hp_filter; + float synth_subfr_bwe[SWITCH_MAX_GAP]; /* synthesized bwe for core switching */ + int16_t n, L, input_frame; + + input_frame = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); + + L = NS2SA( st->input_Fs, FRAME_SIZE_NS ); + n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + + /* set multiplication factor according to the sampling rate */ + hp_filter = hp16000_48000; + fdelay = 48; + if ( st->input_Fs == 16000 ) + { + delta = 1; + if ( st->last_L_frame == L_FRAME ) + { + hp_filter = hp12800_16000; + fdelay = 20; + } + } + else if ( st->input_Fs == 32000 ) + { + delta = 2; + if ( st->last_L_frame == L_FRAME ) + { + hp_filter = hp12800_32000; + fdelay = 40; + } + else + { + hp_filter = hp16000_32000; + fdelay = 32; + } + } + else + { + delta = 3; + if ( st->last_L_frame == L_FRAME ) + { + hp_filter = hp12800_48000; + fdelay = 60; + } + } + + set_f( tmp_mem, 0, 2 * L_FILT48k ); + set_f( tmp_mem2, 0, 2 * L_FILT48k ); + + Loverlapp = delta * SWITCH_OVERLAP_8k * 2; + gapsize = delta * ( NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) ); + set_f( synth_subfr_bwe, 0, SWITCH_MAX_GAP ); + + for ( i = 0; i < gapsize + fdelay; i++ ) + { + /* target */ + synth_subfr_bwe[i] = new_speech[i + L / 2 + n + Loverlapp - gapsize]; + } + + for ( i = 0; i < fdelay; i++ ) + { + /* put the 40 past samples into the memory */ + tmp_mem[i] = new_speech[i + L / 2 + n + Loverlapp - gapsize - fdelay]; + } + + /* HP filtered target */ + fir( synth_subfr_bwe, hp_filter, synth_subfr_bwe, tmp_mem, gapsize + fdelay, fdelay, 0 ); + mvr2r( synth_subfr_bwe + (int16_t) ( fdelay / 2 ), synth_subfr_bwe, delta * ( NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) ) - (int16_t) ( fdelay / 2 ) ); + + /* codebook */ + fir( new_speech, hp_filter, hb_synth_tmp, tmp_mem2, input_frame >> 1, fdelay, 1 ); + + min_sq_cross = -1; + min_corr = 0; + d1m = 0; + + maxd1 = (int16_t) ( ( ( input_frame >> 1 ) - gapsize - fdelay ) / delta ); + + /* find delay */ + for ( k = 0, d1 = 0; k < maxd1; d1 += delta, k++ ) + { + accA = accB = 0; + for ( i = 0; i < gapsize; i += delta ) + { + accA += hb_synth_tmp[d1 + i + fdelay] * hb_synth_tmp[d1 + i + fdelay]; + accB += hb_synth_tmp[d1 + i + fdelay] * synth_subfr_bwe[i]; + } + if ( accB * accB * min_corr >= min_sq_cross * accA ) + { + d1m = k; + min_corr = accA; + min_sq_cross = accB * accB; + } + } + + push_indice( st->hBstr, IND_CORE_SWITCHING_AUDIO_DELAY, d1m, AUDIODELAYBITS ); + + /* find gain */ + E1 = 0.0f; + E2 = 1.0f; /* to avoid /0 */ + + for ( i = 0; i < gapsize; i++ ) + { + E1 += synth_subfr_bwe[i] * synth_subfr_bwe[i]; + E2 += hb_synth_tmp[i + d1m * delta + fdelay] * hb_synth_tmp[i + d1m * delta + fdelay]; + } + + gain = (float) sqrt( (float) ( E1 / E2 ) ); + + ind1 = usquant( gain, &gain, MINVALUEOFFIRSTGAIN, DELTAOFFIRSTGAIN, ( 1 << NOOFGAINBITS1 ) ); + push_indice( st->hBstr, IND_CORE_SWITCHING_AUDIO_GAIN, ind1, NOOFGAINBITS1 ); + + return; +} diff --git a/lib_enc/acelp_enc_util.c b/lib_enc/acelp_enc_util.c new file mode 100644 index 0000000000..003dadb026 --- /dev/null +++ b/lib_enc/acelp_enc_util.c @@ -0,0 +1,79 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "typedef.h" +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * E_ACELP_toeplitz_mul() + * + * Multiplication of Toeplitz matrix with vector c, such that d = toeplitz(R)*c + *-------------------------------------------------------------------*/ + +void E_ACELP_toeplitz_mul( + const float R[], + const float c[], + float d[] ) +{ + int16_t k, j; + float s; + + for ( k = 0; k < L_SUBFR; k++ ) + { + s = R[k] * c[0]; + + for ( j = 1; j < k; j++ ) + { + s += R[k - j] * c[j]; + } + + for ( ; j < L_SUBFR; j++ ) + { + s += R[j - k] * c[j]; + } + d[k] = s; + } + + return; +} diff --git a/lib_enc/amr_wb_enc.c b/lib_enc/amr_wb_enc.c new file mode 100644 index 0000000000..76ddf9e705 --- /dev/null +++ b/lib_enc/amr_wb_enc.c @@ -0,0 +1,578 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +#ifdef DEBUG_MODE_INFO +extern float snr_[2][320]; +#endif + +/*-------------------------------------------------------------------* + * amr_wb_enc() + * + * AMR-WB encoder + *-------------------------------------------------------------------*/ + +void amr_wb_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t *input_sp, /* i : input signal */ + float *mem_hp20_in, /* i/o: hp20 filter memory */ + const int16_t n_samples /* i : number of input samples */ +) +{ + int16_t i, delay, harm_flag; + float old_inp[L_INP_12k8], *new_inp, *inp; /* buffer of old input signal */ + float old_inp_16k[L_INP_12k8 + L_SUBFR], *inp_16k, *new_inp_16k; /* buffer of old input signal @16kHz*/ + float old_exc[L_EXC], *exc; /* excitation signal buffer */ + float old_wsp[L_WSP], *wsp; /* weighted input signal buffer */ + int16_t input_frame; /* frame length at input sampling freq. */ + float fr_bands[2 * NB_BANDS]; /* energy in frequency bands */ + float lf_E[2 * VOIC_BINS]; /* per bin spectrum energy in lf */ + float tmpN[NB_BANDS]; /* temporary noise update */ + float tmpE[NB_BANDS], PS[L_FFT / 2]; /* temporary averaged energy of 2 sf. */ + float corr_shift; /* correlation shift */ + float relE; /* frame relative energy */ + float non_staX, cor_map_sum, sp_div; + float Etot; /* total energy */ + float ener; /* residual energy from Levinson-Durbin */ + float A[NB_SUBFR * ( M + 1 )]; /* A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR * ( M + 1 )]; /* weigted A(z) unquant. for 4 subframes*/ + float epsP[M + 1]; /* LP prediction errors */ + float isp_new[M]; /* ISPs at the end of the frame */ + float isf_new[M]; /* ISFs at the end of the frame */ + float isp_tmp[M]; + float Aq[NB_SUBFR * ( M + 1 )]; /* A(z) quantized for the 4 subframes */ + float syn[L_FRAME]; /* synthesis vector */ + float res[L_FRAME]; /* residual signal for FER protection */ + float exc2[L_FRAME]; /* enhanced excitation */ + float pitch_buf[NB_SUBFR]; /* floating pitch for each subframe */ + float dummy_buf[L_FRAME32k]; /* dummy buffer - no usage */ + float snr_sum_he; + int16_t allow_cn_step; + int16_t localVAD_HE_SAD; + int16_t tmps; + int16_t vad_flag_dtx; + int16_t vad_hover_flag; + int16_t hf_gain[NB_SUBFR]; + int16_t high_lpn_flag; + float lp_bckr, hp_bckr; + float q_env[NUM_ENV_CNG]; + int16_t sid_bw = 0; + float exc3[L_FRAME]; + float fft_buff[2 * L_FFT]; + float sp_floor; + float tmp; + int16_t old_pitch1; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + st->L_frame = L_FRAME; + st->gamma = GAMMA1; + st->core = AMR_WB_CORE; + st->core_brate = st->total_brate; + st->input_bwidth = st->last_input_bwidth; + st->bwidth = st->last_bwidth; + st->extl = -1; + st->mdct_sw = 0; + st->coder_type = GENERIC; + input_frame = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); /* frame length of the input signal */ + st->encoderPastSamples_enc = ( L_FRAME * 9 ) / 16; + st->encoderLookahead_enc = L_LOOK_12k8; + +#ifdef DEBUG_MODE_INFO + set_f( snr_[0], 0.0f, 320 ); +#endif + + st->bpf_off = 0; + if ( st->last_core == HQ_CORE || st->last_codec_mode == MODE2 ) + { + st->bpf_off = 1; + } + + st->igf = 0; + + /* Updates in case of EVS primary mode -> AMR-WB IO mode switching */ + if ( st->last_core != AMR_WB_CORE ) + { + updt_IO_switch_enc( st, input_frame ); + } + + /* Updates in case of HQ -> AMR-WB IO switching */ + core_switching_pre_enc( st, NULL, NULL, 0, 0 ); + + set_s( hf_gain, 0, NB_SUBFR ); + + set_f( old_inp, 0.0f, L_INP_12k8 ); + exc = old_exc + L_EXC_MEM; /* pointer to excitation signal in the current frame */ + mvr2r( hLPDmem->old_exc, old_exc, L_EXC_MEM ); + + new_inp = old_inp + L_INP_MEM; /* pointer to new samples of the input signal */ + inp = new_inp - L_LOOK_12k8; /* pointer to current frame of input signal */ + wsp = old_wsp + L_WSP_MEM; /* pointer to current frame of weighted signal */ + + mvr2r( st->old_inp_12k8, old_inp, L_INP_MEM ); + mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); + + new_inp_16k = old_inp_16k + L_INP_MEM; /* pointer to new samples of the input signal in 16kHz core */ + inp_16k = new_inp_16k - L_LOOK_16k; /* pointer to the current frame of input signal in 16kHz core */ + mvr2r( st->old_inp_16k, old_inp_16k, L_INP_MEM ); + + /* in case of switching, reset AMR-WB BWE memories */ + if ( st->total_brate == ACELP_23k85 && st->last_core_brate != ACELP_23k85 ) + { + hf_cod_init( st->hAmrwb_IO->mem_hp400_enc, st->hAmrwb_IO->mem_hf_enc, st->hAmrwb_IO->mem_syn_hf_enc, st->hAmrwb_IO->mem_hf2_enc, &st->hAmrwb_IO->gain_alpha ); + } + + /*----------------------------------------------------------------* + * set input samples buffer + *----------------------------------------------------------------*/ + + /* get delay to synchronize ACELP and MDCT frame */ + delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + + mvr2r( st->input - delay, st->old_input_signal, input_frame + delay ); + + /*----------------------------------------------------------------* + * Buffering of input signal + * (convert 'short' input data to 'float') + * HP filtering + *----------------------------------------------------------------*/ + + mvs2r( input_sp, st->input, n_samples ); + + for ( i = n_samples; i < input_frame; i++ ) + { + st->input[i] = 0; + } + + hp20( st->input, input_frame, mem_hp20_in, st->input_Fs ); + + /*-----------------------------------------------------------------* + * switching from ACELP@16k core to AMR-WB IO mode + *-----------------------------------------------------------------*/ + + st->rate_switching_reset = 0; + + if ( st->last_core != AMR_WB_CORE && st->last_L_frame == L_FRAME16k && st->last_core != HQ_CORE ) + { + /* in case of switching, do not apply BPF */ + st->bpf_off = 1; + /* convert old quantized LSP vector */ + st->rate_switching_reset = lsp_convert_poly( st->lsp_old, L_FRAME, 1 ); + + /* convert old quantized LSF vector */ + lsp2lsf( st->lsp_old, st->lsf_old, M, INT_FS_12k8 ); + + /* Reset LPC mem */ + mvr2r( GEWB_Ave, st->mem_AR, M ); + set_zero( st->mem_MA, M ); + + /* update synthesis filter memories */ + synth_mem_updt2( L_FRAME, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn1, hLPDmem->mem_syn, ENC ); + mvr2r( hLPDmem->old_exc, old_exc, L_EXC_MEM ); + mvr2r( hLPDmem->mem_syn1, hLPDmem->mem_syn2, M ); + mvr2r( hLPDmem->mem_syn2, hLPDmem->mem_syn3, M ); + + /* lsp -> isp */ + mvr2r( stable_ISP, isp_tmp, M ); + lsp2isp( st->lsp_old, st->lsp_old, isp_tmp, M ); + } + + /* update buffer of old subframe pitch values */ + if ( st->last_L_frame != L_FRAME ) + { + if ( st->last_L_frame == L_FRAME32k ) + { + tmp = (float) 12800 / (float) 32000; + } + else if ( st->last_L_frame == 512 ) + { + tmp = (float) 12800 / (float) 25600; + } + else /* st->last_L_frame == L_FRAME16k */ + { + tmp = (float) 12800 / (float) 16000; + } + + for ( i = NB_SUBFR16k - NB_SUBFR; i < NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i - 1] = tmp * st->old_pitch_buf[i]; + } + + for ( i = 2 * NB_SUBFR16k - NB_SUBFR; i < 2 * NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i - 2] = tmp * st->old_pitch_buf[i]; + } + } + if ( st->last_bwidth == NB && st->ini_frame != 0 ) + { + st->rate_switching_reset = 1; + } + + /*----------------------------------------------------------------* + * Change the sampling frequency to 12.8 kHz + *----------------------------------------------------------------*/ + + modify_Fs( st->input, input_frame, st->input_Fs, new_inp, 12800, st->mem_decim, 0 ); + + /* update signal buffer */ + mvr2r( new_inp, st->buf_speech_enc + L_FRAME, L_FRAME ); + + /*------------------------------------------------------------------* + * Perform fixed preemphasis through 1 - g*z^-1 + *-----------------------------------------------------------------*/ + + preemph( new_inp, PREEMPH_FAC, L_FRAME, &st->mem_preemph ); + + /*----------------------------------------------------------------* + * Compute spectrum, find energy per critical frequency band + * Track energy and signal dynamics + * Detect NB spectrum in a 16kHz-sampled input + *----------------------------------------------------------------*/ + + analy_sp( -1, NULL, st->input_Fs, inp, st->Bin_E, st->Bin_E_old, fr_bands, lf_E, &Etot, st->min_band, st->max_band, dummy_buf, PS, fft_buff ); + + noise_est_pre( Etot, st->ini_frame, st->hNoiseEst, 0, EVS_MONO, EVS_MONO ); + + /*----------------------------------------------------------------* + * VAD + *----------------------------------------------------------------*/ + + st->vad_flag = wb_vad( st, fr_bands, &tmps, &tmps, &tmps, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); + + if ( st->vad_flag == 0 ) + { + st->coder_type = INACTIVE; + } + + /* apply DTX hangover for CNG analysis */ + vad_flag_dtx = dtx_hangover_addition( st, st->vad_flag, st->lp_speech - st->lp_noise, 0, &vad_hover_flag, NULL, NULL ); + + /*-----------------------------------------------------------------* + * Select SID or FRAME_NO_DATA frame if DTX enabled + *-----------------------------------------------------------------*/ + + if ( st->last_core != AMR_WB_CORE ) + { + st->fd_cng_reset_flag = 1; + } + else if ( st->fd_cng_reset_flag > 0 && st->fd_cng_reset_flag < 10 ) + { + st->fd_cng_reset_flag++; + } + else + { + st->fd_cng_reset_flag = 0; + } + + dtx( st, vad_flag_dtx, inp ); + + /*----------------------------------------------------------------* + * Noise energy down-ward update and total noise energy estimation + * Long-term energies and relative frame energy updates + * Correlation correction as a function of total noise level + *----------------------------------------------------------------*/ + + noise_est_down( fr_bands, st->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &st->hNoiseEst->totalNoise, Etot, &st->hNoiseEst->Etot_last, &st->hNoiseEst->Etot_v_h2 ); + + high_lpn_flag = 0; + + long_enr( st, Etot, localVAD_HE_SAD, high_lpn_flag, NULL, 1, NULL, NULL ); + + relE = Etot - st->lp_speech; + + if ( st->bwidth != NB ) + { + lp_bckr = mean( st->hNoiseEst->bckr, 10 ); + } + else + { + lp_bckr = mean( st->hNoiseEst->bckr + 1, 9 ); + } + hp_bckr = 0.5f * ( st->hNoiseEst->bckr[st->max_band - 1] + st->hNoiseEst->bckr[st->max_band] ); + st->bckr_tilt_lt = 0.9f * st->bckr_tilt_lt + 0.1f * lp_bckr / hp_bckr; + + corr_shift = correlation_shift( st->hNoiseEst->totalNoise ); + + /*----------------------------------------------------------------* + * WB, SWB and FB bandwidth detector + *----------------------------------------------------------------*/ + + bw_detect( st, st->input, NULL, NULL ); + + /* in AMR_WB IO, limit the maximum band-width to WB */ + if ( st->bwidth > WB ) + { + st->bwidth = WB; + } + + /*----------------------------------------------------------------* + * Perform LP analysis + * Compute weighted inp + * Perform open-loop pitch analysis + * Perform 1/4 pitch precision improvement + *----------------------------------------------------------------*/ + + if ( st->vad_flag == 0 ) + { + /* reset the OL pitch tracker memories during inactive frames */ + pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); + } + + old_pitch1 = st->pitch[1]; + + /* LP analysis */ + analy_lp_AMR_WB( inp, &ener, A, epsP, isp_new, st->lsp_old1, isf_new, st->old_pitch_la, st->voicing[2] ); + + /* compute weighted input */ + find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp, TILT_FAC, wsp, &st->mem_wsp, GAMMA1, L_LOOK_12k8 ); + + /* open-loop pitch analysis */ + pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, relE, L_LOOK_12k8, 0, st->bwidth, 0 ); + + st->old_pitch_la = st->pitch[2]; + vad_param_updt( st, corr_shift, corr_shift, A, old_pitch1, NULL, 1 ); + + /*------------------------------------------------------------------* + * Update estimated noise energy and voicing cut-off frequency + *-----------------------------------------------------------------*/ + + noise_est( st, old_pitch1, tmpN, epsP, Etot, relE, corr_shift, tmpE, fr_bands, &cor_map_sum, NULL, &sp_div, &non_staX, &harm_flag, lf_E, &st->hNoiseEst->harm_cor_cnt, st->hNoiseEst->Etot_l_lp, &sp_floor, 0, NULL, NULL, st->ini_frame ); + + /*----------------------------------------------------------------* + * Change the sampling frequency to 16 kHz, + * input@16kHz needed for AMR-WB IO BWE @23.85kbps + *----------------------------------------------------------------*/ + + if ( st->input_Fs == 16000 ) + { + /* no resampling needed, only delay adjustement to account for the FIR resampling delay */ + tmps = NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); + mvr2r( st->mem_decim16k + tmps, new_inp_16k, tmps ); + mvr2r( st->input, new_inp_16k + tmps, input_frame - tmps ); + mvr2r( st->input + input_frame - 2 * tmps, st->mem_decim16k, 2 * tmps ); + } + else if ( st->input_Fs == 32000 || st->input_Fs == 48000 ) + { + modify_Fs( st->input, input_frame, st->input_Fs, new_inp_16k, 16000, st->mem_decim16k, 0 ); + } + + /*----------------------------------------------------------------* + * Encoding of SID frames + *----------------------------------------------------------------*/ + + if ( st->core_brate == SID_1k75 || st->core_brate == FRAME_NO_DATA ) + { + /* encode CNG parameters */ + CNG_enc( st, Aq, inp, ener, isp_new, isp_new, isf_new, &allow_cn_step, q_env, &sid_bw ); + + /* comfort noise generation */ + CNG_exc( st->core_brate, L_FRAME, &st->hTdCngEnc->Enew, &st->hTdCngEnc->cng_seed, exc, exc2, &st->hTdCngEnc->lp_ener, st->last_core_brate, &st->hDtxEnc->first_CNG, &st->hTdCngEnc->cng_ener_seed, dummy_buf, allow_cn_step, &st->hTdCngEnc->last_allow_cn_step, st->hTdCngEnc->num_ho, q_env, st->hTdCngEnc->lp_env, st->hTdCngEnc->old_env, st->hTdCngEnc->exc_mem, st->hTdCngEnc->exc_mem1, &sid_bw, &st->hTdCngEnc->cng_ener_seed1, exc3, st->Opt_AMR_WB, EVS_MONO ); + + if ( st->hDtxEnc->first_CNG == 0 ) + { + st->hDtxEnc->first_CNG = 1; + } + + /* synthesis */ + syn_12k8( L_FRAME, Aq, exc2, dummy_buf, hLPDmem->mem_syn3, 1 ); /* dummy_buf = temporary buffer to handle syn1[] */ + + /* reset the encoder */ + CNG_reset_enc( st, pitch_buf, dummy_buf + L_FRAME, 0 ); + + /* update mem_syn1 for ACELP core switching */ + mvr2r( hLPDmem->mem_syn3, hLPDmem->mem_syn1, M ); + + /* update ACELP core synthesis filter memory */ + mvr2r( hLPDmem->mem_syn3, hLPDmem->mem_syn, M ); + + /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ + mvr2r( dummy_buf + L_FRAME - L_SYN_MEM, hLPDmem->mem_syn_r, L_SYN_MEM ); + + /* Update MODE2 core switching memory */ + deemph( dummy_buf, PREEMPH_FAC, L_FRAME, &( hLPDmem->syn[M] ) ); + mvr2r( dummy_buf + L_FRAME - M - 1, hLPDmem->syn, M + 1 ); + } + + /*----------------------------------------------------------------* + * Encoding of all other frames + *----------------------------------------------------------------*/ + + else + { + /*-----------------------------------------------------------------* + * After inactive period, use the most up-to-date ISPs + *-----------------------------------------------------------------*/ + + if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 ) + { + mvr2r( st->hDtxEnc->lspCNG, st->lsp_old, M ); + isp2isf( st->hDtxEnc->lspCNG, st->lsf_old, M, INT_FS_12k8 ); + set_f( old_exc, 0, L_EXC_MEM ); + } + + /*-----------------------------------------------------------------* + * ISF Quantization and interpolation + *-----------------------------------------------------------------*/ + + isf_enc_amr_wb( st, isf_new, isp_new, Aq ); + + /*---------------------------------------------------------------* + * Calculation of LP residual (filtering through A[z] filter) + *---------------------------------------------------------------*/ + + calc_residu( inp, res, Aq, L_FRAME ); + + if ( st->hTdCngEnc != NULL ) + { + st->hTdCngEnc->burst_ho_cnt = 0; + } + + /*------------------------------------------------------------* + * Encode excitation + *------------------------------------------------------------*/ + + encod_amr_wb( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, hf_gain, inp_16k ); + +#ifdef DEBUGGING + /* SNR measuremenet of CELP coded output */ + snr_celp( L_FRAME, L_SUBFR, GAMMA1, TILT_FAC, ( st->vad_flag | vad_flag_dtx ), st->coder_type, inp, syn, A, 0, "CELP_output" ); +#endif + + /* update mem_syn1 for ACELP core switching */ + mvr2r( hLPDmem->mem_syn, hLPDmem->mem_syn1, M ); + + /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ + mvr2r( syn + L_FRAME - L_SYN_MEM, hLPDmem->mem_syn_r, L_SYN_MEM ); + + /* Update MODE2 core switching memory */ + mvr2r( syn, dummy_buf, L_FRAME ); + deemph( dummy_buf, PREEMPH_FAC, L_FRAME, &( hLPDmem->syn[M] ) ); + mvr2r( dummy_buf + L_FRAME - M - 1, hLPDmem->syn, M + 1 ); + + /*--------------------------------------------------------------------------------------* + * Write VAD information into the bitstream in AMR-WB IO mode + *--------------------------------------------------------------------------------------*/ + + push_indice( st->hBstr, IND_VAD_FLAG, st->vad_flag, 1 ); + } + + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + /* update old weighted speech buffer - for OL pitch analysis */ + mvr2r( &old_wsp[L_FRAME], st->old_wsp, L_WSP_MEM ); + + /* update old input signal buffer */ + mvr2r( &old_inp[L_FRAME], st->old_inp_12k8, L_INP_MEM ); + + /* update old input signal @16kHz buffer */ + if ( st->input_Fs > 8000 ) + { + mvr2r( &old_inp_16k[L_FRAME16k], st->old_inp_16k, L_INP_MEM ); + } + + /* update of old per-band energy spectrum */ + mvr2r( fr_bands + NB_BANDS, st->hNoiseEst->enrO, NB_BANDS ); + + /* update signal buffers */ + mvr2r( new_inp, st->buf_speech_enc_pe + L_FRAME, L_FRAME ); + mvr2r( wsp, st->buf_wspeech_enc + L_FRAME + L_SUBFR, L_FRAME + L_LOOK_12k8 ); + + /* update ACELP core parameters */ + updt_enc( st, old_exc, pitch_buf, 0, Aq, isf_new, isp_new, dummy_buf ); + + /* update main codec paramaters */ + updt_enc_common( st, Etot ); + +#ifdef DEBUG_MODE_INFO + dbgwrite( &st->codec_mode, sizeof( int16_t ), 1, input_frame, "res/codec" ); + dbgwrite( &st->core, sizeof( int16_t ), 1, input_frame, "res/core" ); + dbgwrite( &st->extl, sizeof( int16_t ), 1, input_frame, "res/extl" ); + dbgwrite( &st->bwidth, sizeof( int16_t ), 1, input_frame, "res/bwidth" ); + ener = st->total_brate / 1000.0f; + dbgwrite( &ener, sizeof( float ), 1, input_frame, "res/total_brate" ); + ener = st->core_brate / 1000.0f; + dbgwrite( &ener, sizeof( float ), 1, input_frame, "res/core_brate" ); + dbgwrite( &st->coder_type, sizeof( int16_t ), 1, input_frame, "res/coder_type" ); + dbgwrite( &st->cng_type, sizeof( int16_t ), 1, input_frame, "res/cng_type" ); + dbgwrite( &st->L_frame, sizeof( int16_t ), 1, input_frame, "res/L_frame" ); + dbgwrite( &st->vad_flag, sizeof( int16_t ), 1, input_frame, "res/vad_flag" ); + dbgwrite( snr_[0], sizeof( float ), 320, 1, "res/snr" ); +#endif + + return; +} + +/*---------------------------------------------------------------------* + * amr_wb_enc_init() + * + * Initialize AMR-WB encoder + *---------------------------------------------------------------------*/ + +void amr_wb_enc_init( + AMRWB_IO_ENC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO encoder handle */ +) +{ + int16_t i; + + /* HF (6-7kHz) BWE */ + hAmrwb_IO->seed2_enc = RANDOM_INITSEED; + + for ( i = 0; i < GAIN_PRED_ORDER; i++ ) + { + hAmrwb_IO->past_qua_en[i] = -14.0f; /* gain quantization memory (used in AMR-WB IO mode) */ + } + + hf_cod_init( hAmrwb_IO->mem_hp400_enc, hAmrwb_IO->mem_hf_enc, hAmrwb_IO->mem_syn_hf_enc, hAmrwb_IO->mem_hf2_enc, &hAmrwb_IO->gain_alpha ); + + return; +} diff --git a/lib_enc/analy_lp.c b/lib_enc/analy_lp.c new file mode 100644 index 0000000000..b4b990634e --- /dev/null +++ b/lib_enc/analy_lp.c @@ -0,0 +1,186 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * analy_lp() + * + * Perform LP analysis + * + * - autocorrelations + lag windowing + * - Levinson-Durbin algorithm to find A(z) + * - convert A(z) to LSPs + * - find interpolated LSPs and convert back to A(z) for all subframes + * - update LSPs for the next frame + *-------------------------------------------------------------------*/ + +void analy_lp( + const float speech[], /* i : pointer to the speech frame */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_look, /* i : look-ahead */ + float *ener, /* o : residual energy from Levinson-Durbin */ + float A[], /* o : A(z) filter coefficients */ + float epsP[], /* o : LP analysis residual energies for each iteration */ + float lsp_new[], /* o : current frame LSPs */ + float lsp_mid[], /* o : current mid-frame LSPs */ + float lsp_old[], /* i/o: previous frame unquantized LSPs */ + const int16_t Top[2], /* i : open loop pitch lag */ + const float Tnc[2], /* i : open loop pitch gain */ + const int32_t sr_core, /* i : internal sampling rate */ + const int16_t sec_chan_low_rate /* i : TD secondary channel flag */ +) +{ + int16_t i_subfr, wind_length, half_frame; + float r[M + 1], *lsp; + const float *wind, *pt; + int16_t half_frame_idx; + + if ( L_frame == L_FRAME ) + { + wind_length = L_LP; + wind = LP_assym_window; + } + else /* L_frame == L_FRAME16k */ + { + wind_length = L_LP_16k; + wind = LP_assym_window_16k; + } + lsp = lsp_mid; + half_frame = L_frame >> 1; + + half_frame_idx = 0; + for ( i_subfr = half_frame; i_subfr <= L_frame; i_subfr = i_subfr + half_frame ) + { + pt = speech + i_subfr + L_look - wind_length; + + /* Autocorrelations */ + autocorr( pt, r, M, wind_length, wind, 0, 0, 0 ); + + /* Lag windowing */ + adapt_lag_wind( r, M, Top[half_frame_idx], Tnc[half_frame_idx], sr_core ); + ++half_frame_idx; + + /* Levinson-Durbin */ + lev_dur( A, r, M, epsP ); + + /* Conversion of A(z) to LSPs */ + a2lsp_stab( A, lsp, lsp_old ); + + lsp = lsp_new; + } + + if ( sec_chan_low_rate == 1 ) + { + int_lsp4( L_frame, lsp_old, lsp_mid, lsp_new, A, M, -2 ); + } + else + { + /* LSP interpolation */ + int_lsp4( L_frame, lsp_old, lsp_mid, lsp_new, A, M, 0 ); + } + + /* updates */ + mvr2r( lsp_new, lsp_old, M ); + + *ener = epsP[M]; + + return; +} + + +/*-------------------------------------------------------------------* + * analy_lp_AMR_WB() + * + * Perform LP analysis for AMR-WB IO mode + * + * - autocorrelations + lag windowing + * - Levinson-Durbin algorithm to find A(z) + * - convert A(z) to ISPs + * - find interpolated ISPs and convert back to A(z) for all subframes + * - update ISPs for the next frame + *-------------------------------------------------------------------*/ + +void analy_lp_AMR_WB( + const float speech[], /* i : pointer to the speech frame */ + float *ener, /* o : residual energy from Levinson-Durbin */ + float A[], /* o : A(z) filter coefficients */ + float epsP[], /* o : LP analysis residual energies for each iteration */ + float isp_new[], /* o : current frame ISPs */ + float isp_old[], /* i/o: previous frame unquantized ISPs */ + float isf_new[], /* o : current frame ISFs */ + const int16_t Top, /* i : open loop pitch lag */ + const float Tnc /* i : open loop pitch gain */ +) +{ + int16_t wind_length; + float r[M + 1]; + const float *wind; + + /* Initialization */ + wind_length = L_LP_AMR_WB; + wind = hamcos_window; + + /* Autocorrelations */ + autocorr( speech - L_SUBFR, r, M, wind_length, wind, 0, 0, 0 ); + + /* Lag windowing */ + adapt_lag_wind( r, M, Top, Tnc, 12800 ); + + /* Levinson-Durbin */ + lev_dur( A, r, M, epsP ); + + a2isf( A, isf_new, stable_ISF, M ); + isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); + + /* ISP interpolation */ + int_lsp( L_FRAME, isp_old, isp_new, A, M, interpol_isp_amr_wb, 1 ); + + *ener = epsP[M]; + + /* updates */ + mvr2r( isp_new, isp_old, M ); + + return; +} diff --git a/lib_enc/analy_sp.c b/lib_enc/analy_sp.c new file mode 100644 index 0000000000..5828e72483 --- /dev/null +++ b/lib_enc/analy_sp.c @@ -0,0 +1,413 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" +#include +#include "ivas_cnst.h" + +/*-------------------------------------------------------------------* + * Local prototypes + *-------------------------------------------------------------------*/ + +static void find_enr( const float data[], float band[], float *ptE, float *Etot, const int16_t min_band, const int16_t max_band, float *Bin_E, const int16_t bin_freq, float *band_ener ); + +static void find_enr_dft( CPE_ENC_HANDLE hCPE, const int32_t input_Fs, float DFT_past_DMX[], float band[], float *ptE, float *Etot, const int16_t min_band, const int16_t max_band, float *Bin_E, float *band_ener ); + +/*-------------------------------------------------------------------* + * analy_sp() + * + * Spectral analysis + *-------------------------------------------------------------------*/ + +void analy_sp( + const int16_t element_mode, /* i : element mode */ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int32_t input_Fs, /* i : input sampling rate */ + float *speech, /* i : speech buffer */ + float *Bin_E, /* o : per bin log energy spectrum */ + float *Bin_E_old, /* o : per bin log energy spectrum for mid-frame */ + float *fr_bands, /* o : per band energy spectrum (2 analyses) */ + float lf_E[], /* o : per bin E for first VOIC_BINS bins (without DC) */ + float *Etot, /* o : total input energy */ + const int16_t min_band, /* i : minimum critical band */ + const int16_t max_band, /* i : maximum critical band */ + float *band_ener, /* o : energy in critical frequency bands without minimum noise floor E_MIN */ + float *PS, /* o : Per bin energy spectrum */ + float *fft_buff /* o : FFT coefficients */ +) +{ + int16_t i_subfr, i; + float *pt_bands, *pt_fft, *pt; + const float *pt1; + + /*-----------------------------------------------------------------* + * Perform two spectral analyses + * Find energy per critical frequency band and total energy in dB + *-----------------------------------------------------------------*/ + + pt_bands = fr_bands; + pt_fft = fft_buff; + *Etot = 0.0f; + + if ( element_mode != IVAS_CPE_DFT ) + { + for ( i_subfr = 0; i_subfr <= 1; i_subfr++ ) + { + /* set pointer to the beginning of the signal for spectral analysis */ + if ( i_subfr == 0 ) + { + /* set the pointer for first analysis window */ + pt = speech + 3 * ( L_SUBFR / 2 ) - L_FFT / 2; + } + else + { + /* set the pointer for second analysis window */ + pt = speech + 7 * ( L_SUBFR / 2 ) - L_FFT / 2; + } + + /* 1st half of the window */ + pt1 = sqrt_han_window; + for ( i = 0; i < L_FFT / 2; i++ ) + { + pt_fft[i] = *pt++ * *pt1++; + } + /* 2nd half of the window */ + for ( i = L_FFT / 2; i < L_FFT; i++ ) + { + pt_fft[i] = *pt++ * *pt1--; + } + + /* compute the spectrum */ + fft_rel( pt_fft, L_FFT, LOG2_L_FFT ); + + /* find energy per critical band */ + find_enr( pt_fft, pt_bands, lf_E + i_subfr * VOIC_BINS, Etot, min_band, max_band, Bin_E + i_subfr * ( L_FFT / 2 ), (int16_t) BIN, band_ener + i_subfr * NB_BANDS ); + + pt_bands += NB_BANDS; + pt_fft += L_FFT; + } + } + else + { + /* find energy per critical band */ + find_enr_dft( hCPE, input_Fs, hCPE->hStereoDft->DFT[0], pt_bands, lf_E, Etot, min_band, max_band, Bin_E, band_ener ); + mvr2r( lf_E, lf_E + VOIC_BINS, VOIC_BINS ); + mvr2r( Bin_E, Bin_E + ( L_FFT / 2 ), L_FFT / 2 ); + mvr2r( band_ener, band_ener + NB_BANDS, NB_BANDS ); + mvr2r( pt_bands, pt_bands + NB_BANDS, NB_BANDS ); + *Etot *= 2.f; + } + + /* Average total log energy over both half-frames */ + *Etot = 10.0f * (float) log10( 0.5f * *Etot ); + + /* Per-bin log-energy spectrum */ + Bin_E[L_FFT / 2 - 1] = Bin_E[L_FFT / 2 - 2]; + Bin_E[L_FFT - 1] = Bin_E[L_FFT - 2]; + + for ( i = 0; i < L_FFT / 2; i++ ) + { + Bin_E_old[i] = Bin_E[i]; + PS[i] = ( Bin_E[i] + 1e-5f + Bin_E[i + L_FFT / 2] + 1e-5f ) / 2.0f; + Bin_E[i] = (float) ( 10.0f * log( PS[i] ) ); + } + + return; +} + +/*------------------------------------------------------------------------* + * find_enr() + * + * find input signal energy for each critical band and first 74 LF bins + * The energy is normalized by the number of frequency bins in a channel + *------------------------------------------------------------------------*/ + +static void find_enr( + const float data[], /* i : fft result, for the format see fft_rel.c */ + float band[], /* o : per band energy */ + float *ptE, /* o : per bin energy for low frequencies */ + float *Etot, /* i/o: total energy */ + const int16_t min_band, /* i : minimum critical band */ + const int16_t max_band, /* i : maximum critical band */ + float *Bin_E, /* o : Per bin energy */ + const int16_t bin_freq, /* i : Number of frequency bins */ + float *band_ener /* o : per band energy without E_MIN */ +) +{ + int16_t i, cnt; + float freq, tmp; + const float *ptR, *ptI; + int16_t voic_band; + float norm_val; + + norm_val = 4.0f / ( L_FFT * L_FFT ); + + voic_band = VOIC_BAND_8k; + if ( bin_freq == 50 ) + { + voic_band = VOIC_BAND; + } + + ptR = &data[1]; /* first real */ + ptI = &data[L_FFT - 1]; /* first imaginary */ + + /* for low frequency bins, save per bin energy for the use in find_tilt() */ + freq = bin_freq; + for ( i = 0; i < voic_band; i++ ) /* up to maximum allowed voiced critical band */ + { + band[i] = 0.0f; + cnt = 0; + while ( freq <= crit_bands[i] ) + { + *ptE = *ptR * *ptR + *ptI * *ptI; /* energy */ + *ptE *= norm_val; /* normalization - corresponds to FFT normalization by 2/L_FFT */ + *Bin_E++ = *ptE; + band[i] += *ptE++; + ptR++; + ptI--; + + freq += bin_freq; + cnt++; + } + + band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ + + band_ener[i] = band[i]; /* per band energy without E_MIN */ + + if ( band[i] < E_MIN ) + { + band[i] = E_MIN; + } + } + + /* continue computing the energy per critical band for higher frequencies */ + if ( bin_freq == 50 ) + { + for ( i = voic_band; i < NB_BANDS; i++ ) + { + band[i] = 0.0f; + cnt = 0; + while ( freq <= crit_bands[i] ) + { + *Bin_E = *ptR * *ptR + *ptI * *ptI; + *Bin_E *= norm_val; + band[i] += *Bin_E; + Bin_E++; + ptR++; + ptI--; + + freq += bin_freq; + cnt++; + } + + band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ + + band_ener[i] = band[i]; /* per band energy without E_MIN */ + + if ( band[i] < E_MIN ) + { + band[i] = E_MIN; + } + } + } + + /* find the total log energy */ + tmp = *Etot; + for ( i = min_band; i <= max_band; i++ ) + { + tmp += band[i]; + } + + *Etot = tmp; + + return; +} + +/*------------------------------------------------------------------------* + * find_enr_dft() + * + * find input signal energy for each critical band using the DFT buffers + *------------------------------------------------------------------------*/ + +static void find_enr_dft( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int32_t input_Fs, /* i : input sampling rate */ + float DFT_past_DMX[], + float band[], /* o : per band energy */ + float *ptE, /* o : per bin energy for low frequencies */ + float *Etot, /* i/o: total energy */ + const int16_t min_band, /* i : minimum critical band */ + const int16_t max_band, /* i : maximum critical band */ + float *Bin_E, /* o : Per bin energy */ + float *band_ener /* o : per band energy without E_MIN */ +) +{ + int16_t i, cnt; + float freq, tmp; + const float *ptR, *ptI; + float norm_val; + int16_t bin_cnt = 0; + + float c, s; + /* One window - 40ms*12.8kHz = 512 samples */ + float c_1 = cosf( PI2 / STEREO_DFT_N_12k8_ENC ); + float s_1 = sinf( PI2 / STEREO_DFT_N_12k8_ENC ); + float g_1 = 1.f + 0.68f * 0.68f; + float g_2 = 2 * 0.68f; + float g; + float scaleWin; + + float BinE[STEREO_DFT_N_12k8_ENC / 2]; /* NB_BANDS = 20 (= 6350Hz) = highest band available for SR 12.8 -> bin_cnt = 158 */ + float bin_freq = input_Fs / (float) hCPE->hStereoDft->NFFT; /* adaptive frequency bin width */ + + scaleWin = 1 / ( 2 * hCPE->hStereoDft->win_ana_energy ); + scaleWin *= (float) BIN / bin_freq; + norm_val = scaleWin * 4.0f / ( hCPE->hStereoDft->NFFT * hCPE->hStereoDft->NFFT ); + + ptR = &DFT_past_DMX[2]; /* first real */ + ptI = &DFT_past_DMX[3]; /* first imaginary */ + c = c_1; + s = s_1; + + /* for low frequency bins, save per bin energy for the use in find_tilt() */ + freq = bin_freq; + for ( i = 0; i < NB_BANDS - 1; i++ ) /* up to maximum allowed voiced critical band */ + { + band[i] = 0.0f; + cnt = 0; + + /* bins up to crit_band 17 (<= 3700 Hz): + * bin_cnt old (bin_width 50 Hz): 74 (74 * FRAMES_PER_SEC = 3700) + * bin_cnt new (bin_width 40 Hz): 92 (92 * 40 = 3680) + */ + + while ( freq <= crit_bands[i] ) + { + BinE[bin_cnt] = *ptR * *ptR + *ptI * *ptI; /* energy */ + g = g_1 - g_2 * c; + tmp = c * c_1 - s * s_1; + s = s * c_1 + c * s_1; + c = tmp; + BinE[bin_cnt] *= norm_val * g; /* normalization - corresponds to FFT normalization by 2/L_FFT */ + band[i] += BinE[bin_cnt]; + ptR += 2; + ptI += 2; + + freq += bin_freq; + cnt++; + bin_cnt++; + } + + band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ + + band_ener[i] = band[i]; /* per band energy without E_MIN */ + + if ( band[i] < E_MIN ) + { + band[i] = E_MIN; + } + } + + /* continue computing the energy per critical band for higher frequencies */ + + /* old version, FFT 256 @ SR12.8 (-> bin_width = 50 Hz): + NB_BANDS = 20 (= 6350Hz) = highest band available for SR 12.8 -> bin_cnt = 127 = L_FFT/2-1*/ + + /* new version: DFT (1200/800/400) @ input SR (48/32/16) (-> bin_width = 40 Hz): + * + */ + /* NB_BANDS = 20 (= 6350Hz) = highest band available for SR 12.8 -> bin_cnt = 158 */ + /* NB_BANDS = 21 (= 7700Hz) = highest band available for SR 16 -> bin_cnt = 192 */ + /* NB_BANDS = 24 (= 15500Hz) = highest band available for SR 32 -> bin_cnt = 387 */ + /* NB_BANDS = 24 (= 15500Hz) = highest band available for SR 48 -> bin_cnt = 387 */ + + for ( ; i < NB_BANDS; i++ ) + { + band[i] = 0.0f; + cnt = 0; + while ( freq < 6399.0f ) + { + BinE[bin_cnt] = *ptR * *ptR + *ptI * *ptI; + g = g_1 - g_2 * c; + BinE[bin_cnt] *= norm_val * g; + band[i] += BinE[bin_cnt]; + ptR += 2; + ptI += 2; + + freq += bin_freq; + cnt++; + bin_cnt++; + } + + band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ + + band_ener[i] = band[i]; /* per band energy without E_MIN */ + + if ( band[i] < E_MIN ) + { + band[i] = E_MIN; + } + } + + /* put bin energies from BinE into Bin_E[L_FFT/2-1] (interpolate 40 Hz bin values to fit into 50 Hz bins) */ + /* Last value of Bin_E is handled outside this function*/ + assert( bin_cnt == ( STEREO_DFT_N_12k8_ENC / 2 - 1 ) ); + BinE[STEREO_DFT_N_12k8_ENC / 2 - 1] = BinE[STEREO_DFT_N_12k8_ENC / 2 - 2]; + lerp( BinE, Bin_E, L_FFT / 2, STEREO_DFT_N_12k8_ENC / 2 ); + mvr2r( Bin_E, ptE, VOIC_BINS ); + + + /* find the total log energy */ + tmp = *Etot; + for ( i = min_band; i <= max_band; i++ ) + { + tmp += band[i]; + } + + *Etot = tmp; + + return; +} diff --git a/lib_enc/ari_enc.c b/lib_enc/ari_enc.c new file mode 100644 index 0000000000..3c6df474f8 --- /dev/null +++ b/lib_enc/ari_enc.c @@ -0,0 +1,457 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "stat_com.h" +#include "basop_util.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*--------------------------------------------------------------- + * ari_copy_states() + * + * Copy state + *-------------------------------------------------------------*/ + +void ari_copy_states( + Tastat *source, + Tastat *dest ) +{ + dest->low = source->low; + dest->high = source->high; + dest->bits_to_follow = source->bits_to_follow; + + return; +} + +/*--------------------------------------------------------------- + Ari encoder 14 bits routines + -------------------------------------------------------------*/ + +/*--------------------------------------------------------------- + * ari_start_encoding_14bits() + * + * Start ArCo encoding + *-------------------------------------------------------------*/ + +void ari_start_encoding_14bits( + Tastat *s ) +{ + /* : addressing is made with walking pointer s */ + s->low = 0; + s->high = ari_q4new; + s->bits_to_follow = 0; + + return; +} + + +/*--------------------------------------------------------------- + * ari_done_encoding_14bits() + * + * Finish ArCo encoding + *-------------------------------------------------------------*/ + +int16_t ari_done_encoding_14bits( + int16_t *ptr, + int16_t bp, + Tastat *s ) +{ + int32_t low; + int32_t bits_to_follow; + + /* not needed, s points to s->low */ + low = s->low; + bits_to_follow = s->bits_to_follow + 1; + + if ( low < ari_q1new ) + { + ptr[bp++] = 0; /*send a zero*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 1; /*send a one*/ + } + } + else + { + ptr[bp++] = 1; /*send a one*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 0; /*send a zero*/ + } + } + + /*It is done so no need to save values-> no counting*/ + /*s->low = low; + s->bits_to_follow = bits_to_follow;*/ + + return bp; +} + + +/*--------------------------------------------------------------- + * ari_encode_14bits_ext() + * + * encode function for extended proba tables: less branches needed for coding + * + *-------------------------------------------------------------*/ + +int16_t ari_encode_14bits_ext( + int16_t *ptr, + int16_t bp, + Tastat *s, + int32_t symbol, + const uint16_t *cum_freq ) +{ + int32_t low, high, range; + int32_t bits_to_follow; + + /*for all operation using bit_ptr=&ptr[bp] */ + /* for reading s->high,low,bits_to_follow sequentially */ + high = s->high; + low = s->low; + range = high - low + 1; + + high = low + mul_sbc_14bits( range, cum_freq[symbol] ) - 1; + low += mul_sbc_14bits( range, cum_freq[symbol + 1] ); + + bits_to_follow = s->bits_to_follow; + + for ( ;; ) + { + if ( high < ari_q2new ) + { + ptr[bp++] = 0; /*send a zero*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 1; /*send a one*/ + } + } + else + { + if ( low >= ari_q2new ) + { + ptr[bp++] = 1; /*send a one*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 0; /*send a zero*/ + } + low -= ari_q2new; + high -= ari_q2new; /* Subtract offset to top. */ + } + else + { + /* Output an opposite bit */ + if ( low >= ari_q1new && high < ari_q3new ) /* Output an opposite bit */ + { + /* later if in middle half. */ + bits_to_follow += 1; + low -= ari_q1new; /* Subtract offset to middle*/ + high -= ari_q1new; + } + else + { + break; /* Otherwise exit loop. */ + } + } + } + low += low; + high += high + 1; /* Scale up code range. */ + } + + s->low = low; + s->high = high; + s->bits_to_follow = bits_to_follow; + + return bp; +} + + +/*------------------------------------------------------------------------ + * Function: ari_encode_14bits_range() + * + * Encode an cumulative frequency interval. + *-------------------------------------------------------------------------*/ + +int16_t ari_encode_14bits_range( + int16_t *ptr, + int16_t bp, + int32_t bits, + Tastat *s, + uint16_t cum_freq_low, + uint16_t cum_freq_high ) +{ + int32_t low, high, range; + int32_t bits_to_follow; + + /* not needed, s points to s->low */ + high = s->high; + high++; + low = s->low; + range = high - low; + + high = low + mul_sbc_14bits( range, cum_freq_high ); + low += mul_sbc_14bits( range, cum_freq_low ); + + bits_to_follow = s->bits_to_follow; + + /* while there are more than 16 bits left */ + for ( ; bp + 16 + bits_to_follow - bits < 0; ) + { + if ( high <= ari_q2new ) + { + ptr[bp++] = 0; /*send a zero*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 1; /*send a one*/ + } + } + else if ( low >= ari_q2new ) + { + /* to reach this branch */ + ptr[bp++] = 1; /*send a one*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 0; /*send a zero*/ + } + low -= ari_q2new; + high -= ari_q2new; /* Subtract offset to top. */ + } + else if ( low >= ari_q1new && high <= ari_q3new ) + { + /* to reach this branch */ + /* Output an opposite bit */ + /* later if in middle half. */ + bits_to_follow += 1; + low -= ari_q1new; /* Subtract offset to middle*/ + high -= ari_q1new; + } + else + { + /* to reach this branch */ + break; /* Otherwise exit loop. */ + } + + low += low; + high += high; /* Scale up code range. */ + } + /* if there are <= 16 bits left */ + if ( bp + 16 + bits_to_follow - bits >= 0 ) + { + /* No need to do anyhing, but let's keep a place for a breakpoint */ + s->bits_to_follow = -1; + } + + s->low = low; + s->high = high - 1; + s->bits_to_follow = bits_to_follow; + + return bp; +} + +/*------------------------------------------------------------------------ + * Function: ari_encode_14bits_sign() + * + * Encode a sign with equal probabilities. + *-------------------------------------------------------------------------*/ + +int16_t ari_encode_14bits_sign( + int16_t *ptr, + int16_t bp, + int32_t bits, + Tastat *s, + int32_t sign ) +{ + int32_t low, high, range; + int32_t bits_to_follow; + + /* not needed, s points to s->low */ + high = s->high; + high++; + low = s->low; + range = high - low; + + if ( sign ) + { + high = low + ( range >> 1 ); + } + else + { + low += range >> 1; + } + + bits_to_follow = s->bits_to_follow; + + /* while there are more than 16 bits left */ + for ( ; bp + 16 + bits_to_follow - bits < 0; ) + { + if ( high <= ari_q2new ) + { + ptr[bp++] = 0; /*send a zero*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 1; /*send a one*/ + } + } + else if ( low >= ari_q2new ) + { + /* to reach this branch */ + ptr[bp++] = 1; /*send a one*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 0; /*send a zero*/ + } + low -= ari_q2new; + high -= ari_q2new; /* Subtract offset to top. */ + } + else if ( low >= ari_q1new && high <= ari_q3new ) + { + /* to reach this branch */ + /* Output an opposite bit */ + /* later if in middle half. */ + bits_to_follow += 1; + low -= ari_q1new; /* Subtract offset to middle*/ + high -= ari_q1new; + } + else + { + /* to reach this branch */ + break; /* Otherwise exit loop. */ + } + + low += low; + high += high; /* Scale up code range. */ + } + + s->low = low; + s->high = high - 1; + s->bits_to_follow = bits_to_follow; + + return bp; +} + +/*------------------------------------------------------------------------ + * Function: ari_done_cbr_encoding_14bits() + * + * Finish up encoding in CBR mode. + *-------------------------------------------------------------------------*/ + +int16_t ari_done_cbr_encoding_14bits( + int16_t *ptr, + int16_t bp, + int32_t bits, + Tastat *s ) +{ + int32_t high; + int32_t bits_to_follow; + uint16_t k; + + while ( bits - bp - 16 - s->bits_to_follow > 0 ) + { + bp = ari_encode_14bits_sign( ptr, bp, bits, s, 0 ); + } + + /* not needed, s points to s->low */ + high = s->high; + bits_to_follow = s->bits_to_follow; + + if ( bits_to_follow ) + { + /* If in upper half, then output a one, bits_to_follow zeros, and the remaining bits, except the first one */ + if ( high < 0x8000 ) + { + ptr[bp++] = 0; /*send a zero*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 1; /*send a one*/ + } + } + else + { + ptr[bp++] = 1; /*send a one*/ + for ( ; bits_to_follow > 0; bits_to_follow-- ) + { + ptr[bp++] = 0; /*send a zero*/ + } + } + /* write remaining bits */ + for ( k = 0x4000; k > 0; k >>= 1 ) + { + if ( k & high ) + { + ptr[bp++] = 1; /*send a one*/ + } + else + { + ptr[bp++] = 0; /*send a zero*/ + } + + if ( bp >= bits ) + { + break; + } + } + } + else + { + /* no carry-bits, just write all bits */ + for ( k = 0x8000; k > 0; k >>= 1 ) + { + if ( k & high ) + { + ptr[bp++] = 1; /*send a one*/ + } + else + { + ptr[bp++] = 0; /*send a zero*/ + } + + if ( bp >= bits ) + { + break; + } + } + } + + return bp; +} diff --git a/lib_enc/ari_hm_enc.c b/lib_enc/ari_hm_enc.c new file mode 100644 index 0000000000..c88ac3812a --- /dev/null +++ b/lib_enc/ari_hm_enc.c @@ -0,0 +1,618 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_enc.h" +#include "stl.h" +#include "basop_util.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * EncodeIndex() + * + * + *-------------------------------------------------------------------*/ + +int16_t EncodeIndex( + const int16_t Bandwidth, + int16_t PeriodicityIndex, + BSTR_ENC_HANDLE hBstr ) +{ + if ( PeriodicityIndex & kLtpHmFlag ) + { + int16_t LtpPitchIndex = PeriodicityIndex >> 9; + assert( 0 <= LtpPitchIndex && LtpPitchIndex <= 16 ); + --PeriodicityIndex; + assert( ( PeriodicityIndex & 0xff ) < ( 1 << NumRatioBits[Bandwidth][LtpPitchIndex] ) ); + + push_next_indice( hBstr, PeriodicityIndex & 0xff, NumRatioBits[Bandwidth][LtpPitchIndex] ); + return NumRatioBits[Bandwidth][LtpPitchIndex]; + } + else + { + push_next_indice( hBstr, PeriodicityIndex, 8 ); + return 8; + } +} + + +/*-------------------------------------------------------------------* + * GetWeight() + * + * + *-------------------------------------------------------------------*/ + +static float GetWeight( int16_t i ) +{ + i = 3 * i - 2; + + return (float) ( pow( i, 0.3 ) / pow( 256 - 1, 0.3 ) ); +} + + +/*-------------------------------------------------------------------* + * SearchPeriodicityIndex_Single() + * + * + *-------------------------------------------------------------------*/ + +static float SearchPeriodicityIndex_Single( + const float AbsMdct3[], + const int16_t NumToConsider, + const int32_t Lag, + const int16_t FractionalResolution ) +{ + int16_t HighestMultiplier; + float AbsMeanCurrent3; /* Mean for BucketWidth == 3 */ + int32_t Limit, OldIndex, i; + + Limit = ( NumToConsider - 1 ) << FractionalResolution; + AbsMeanCurrent3 = 0; + HighestMultiplier = 1; + + for ( i = Lag; i < Limit; i += Lag ) + { + OldIndex = i >> FractionalResolution; + AbsMeanCurrent3 += AbsMdct3[OldIndex] * GetWeight( HighestMultiplier ); + ++HighestMultiplier; + } + + return AbsMeanCurrent3 / ( HighestMultiplier - 1 + 0.00001f ); +} + + +/*-------------------------------------------------------------------* + * SearchPeriodicityIndex_Range() + * + * + *-------------------------------------------------------------------*/ + +static void SearchPeriodicityIndex_Range( + const float AbsMdct3[], + const int16_t NumToConsider, + const int16_t Lo, + const int16_t Hi, + const int16_t FractionalResolution, + const int16_t Adj, + const int16_t Spacing, + int16_t *PeriodicityIndex, + float *Score ) +{ + int16_t Index, BestIndex, B; + float CurrentScore, BestScore; + + BestScore = -1e30f; + BestIndex = 0; + + for ( Index = Lo; Index < Hi; Index += Spacing ) + { + CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Index + Adj, FractionalResolution ); + + if ( CurrentScore > BestScore ) + { + BestScore = CurrentScore; + BestIndex = Index; + } + } + + if ( BestScore > *Score ) + { + *Score = BestScore; + *PeriodicityIndex = BestIndex; + } + + + B = BestIndex - ( Spacing >> 1 ); + B = max( Lo, B ); + + for ( Index = B; Index < BestIndex; ++Index ) + { + CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Index + Adj, FractionalResolution ); + + if ( CurrentScore > *Score ) + { + *Score = CurrentScore; + *PeriodicityIndex = Index; + } + } + + B = BestIndex + ( Spacing >> 1 ); + + for ( Index = BestIndex + 1; Index <= B; ++Index ) + { + CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Index + Adj, FractionalResolution ); + + if ( CurrentScore > *Score ) + { + *Score = CurrentScore; + *PeriodicityIndex = Index; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * SearchPeriodicityIndex() + * + * + *-------------------------------------------------------------------*/ + +/*! r: PeriodicityIndex */ +int16_t SearchPeriodicityIndex( + const float Mdct[], /* i : Coefficients, Mdct[0..NumCoeffs-1] */ + const float UnfilteredMdct[], /* i : Unfiltered coefficients, UnfilteredMdct[0..NumCoeffs-1] */ + const int16_t NumCoeffs, /* i : Number of coefficients */ + const int16_t TargetBits, /* i : Target bit budget (excl. Done flag) */ + const int16_t LtpPitchLag, /* i : TCX-LTP pitch */ + const float LtpGain, /* i : LTP gain */ + float *RelativeScore /* o : Energy concentration factor */ +) +{ + float AbsMdct3[MAX_LENGTH], A, B, C = 0.f; + int16_t i; + int16_t MaxAt; + float Score; + int16_t PeriodicityIndex; + int16_t NumToConsider; + float AbsTotal; + + PeriodicityIndex = 0; + NumToConsider = NumCoeffs; + Score = -1e30f; + + A = (float) fabs( Mdct[0] ); + B = (float) fabs( Mdct[1] ); + + for ( i = 1; i < NumToConsider - 3; i += 3 ) + { + C = (float) fabs( Mdct[i + 1] ); + AbsMdct3[i] = A + B + C; + + A = (float) fabs( Mdct[i + 2] ); + AbsMdct3[i + 1] = A + B + C; + + B = (float) fabs( Mdct[i + 3] ); + AbsMdct3[i + 2] = A + B + C; + } + + if ( i < NumToConsider - 1 ) + { + C = (float) fabs( Mdct[i + 1] ); + AbsMdct3[i] = A + B + C; + } + + + if ( i + 1 < NumToConsider - 1 ) + { + A = (float) fabs( Mdct[i + 2] ); + AbsMdct3[i + 1] = A + B + C; + } + + AbsTotal = 0.0f; + + if ( UnfilteredMdct != NULL ) + { + for ( i = 0; i < NumToConsider; ++i ) + { + AbsTotal += (float) fabs( UnfilteredMdct[i] ); + } + } + else + { + for ( i = 1; i < NumToConsider - 1; i += 3 ) + { + AbsTotal += AbsMdct3[i]; + } + } + + + if ( ( LtpPitchLag > 0 ) && ( LtpGain > kLtpHmGainThr ) ) + { + int16_t FractionalResolution = kLtpHmFractionalResolution; + int16_t Multiplier, LtpPitchIndex, Bandwidth; + + Bandwidth = NumCoeffs >= 256; + LtpPitchIndex = ( ( LtpPitchLag + ( 1 << ( kLtpHmFractionalResolution - 1 ) ) ) >> kLtpHmFractionalResolution ) - 2; + assert( 0 <= LtpPitchIndex && LtpPitchIndex <= 16 ); + + for ( Multiplier = 1; Multiplier <= ( 1 << NumRatioBits[Bandwidth][LtpPitchIndex] ); ++Multiplier ) + { + float CurrentScore; + int32_t Lag; + + Lag = ( LtpPitchLag * (int16_t) ( 4 * Ratios[Bandwidth][LtpPitchIndex][Multiplier - 1] ) ) >> 2; + + if ( Lag >= ( 4 << FractionalResolution ) && ( Lag <= ( ( NumToConsider - 2 ) << FractionalResolution ) ) ) + { + CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Lag, FractionalResolution ); + + if ( CurrentScore > Score ) + { + Score = CurrentScore; + PeriodicityIndex = Multiplier | kLtpHmFlag; + } + } + } + PeriodicityIndex |= LtpPitchIndex << 9; + } + else + { + if ( UnfilteredMdct != NULL ) + { + MaxAt = 1; + A = AbsMdct3[1]; + + for ( i = 4; i < NumToConsider - 1; i += 3 ) + { + + if ( AbsMdct3[i] > AbsMdct3[MaxAt] ) + { + MaxAt = i; + } + A += AbsMdct3[i]; + } + + if ( AbsMdct3[MaxAt] > A * 0.7f ) + { + NumToConsider = min( NumToConsider, MaxAt + 4 ); + } + } + + SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 0, 16, 3, GET_ADJ2( 0, 6, 3 ), 4, &PeriodicityIndex, &Score ); + + SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 16, 80, 4, GET_ADJ2( 16, 8, 4 ), 4, &PeriodicityIndex, &Score ); + + SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 80, 208, 3, GET_ADJ2( 80, 12, 3 ), 4, &PeriodicityIndex, &Score ); + + if ( NumToConsider <= 128 ) + { + /* no long lags for band-limited MDCTs */ + + SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 208, 88 + NumToConsider, 0, GET_ADJ2( 224, 188, 0 ), 1, &PeriodicityIndex, &Score ); + } + else + { + + if ( TargetBits > kSmallerLagsTargetBitsThreshold && NumCoeffs >= 256 ) + { + SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 208, 224, 1, GET_ADJ2( 208, 28, 1 ), 1, &PeriodicityIndex, &Score ); + + SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 224, 256, 0, GET_ADJ2( 224, 188, 0 ), 1, &PeriodicityIndex, &Score ); + } + else + { + SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 208, 256, 1, GET_ADJ2( 208, 28, 1 ), 1, &PeriodicityIndex, &Score ); + } + } + } + + if ( AbsTotal > 0 ) + { + *RelativeScore = Score / AbsTotal * (float) NumCoeffs; + } + else + { + *RelativeScore = 0; + } + + return PeriodicityIndex; +} + + +/*-------------------------------------------------------------------* + * PeakFilter() + * + * + *-------------------------------------------------------------------*/ + +#define kPeakElevationThreshold 1.0f + +static void PeakFilter( + const float x[], /* (I) absolute spectrum */ + float y[], /* (O) filtered absolute spectrum, must not alias x[] */ + const int16_t L_frame /* (I) number of spectral lines */ +) +{ + int16_t flen, i; + float a, m; + + flen = ( L_frame >> 4 ); + m = kPeakElevationThreshold / (float) ( 2 * flen + 1 ); + + a = 0.0f; + for ( i = 0; i < flen; ++i ) + { + a += x[i]; + } + + for ( i = 0; i < flen; ++i ) + { + y[i] = max( 0.0f, x[i] - a * m ); + a += x[i + flen]; + } + for ( ; i < L_frame - flen; ++i ) + { + y[i] = max( 0.0f, x[i] - a * m ); + a -= x[i - flen]; + a += x[i + flen]; + } + + for ( ; i < L_frame; ++i ) + { + y[i] = max( 0.0f, x[i] - a * m ); + a -= x[i - flen]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * tcx_hm_get_re() + * + * + *-------------------------------------------------------------------*/ + +/*! r: RE error */ +static float tcx_hm_get_re( + const float x[], /* i : absolute spectrum */ + const Word16 gain, /* i : HM gain (Q11) */ + const int16_t lag, + const int16_t fract_res, + const Word16 p[], /* i : harmonic model (Q13) */ + const Word32 env[], /* i : envelope (Q16) */ + const int16_t L_frame /* i : number of spectral lines */ +) +{ + Word32 ne[N_MAX_ARI]; + float G, e; + int16_t i; + + /* Calculate new envelope with "gain" harmonic gain */ + for ( i = 0; i < L_frame; ++i ) + { + ne[i] = env[i]; + } + + tcx_hm_modify_envelope( gain, lag, fract_res, p, ne, L_frame ); + + /* Normalize */ + G = 0; + + for ( i = 0; i < L_frame; ++i ) + { + G += x[i] * ne[i]; + } + G = 1.0f / G; + + /* Calculate error */ + e = 0; + + for ( i = 0; i < L_frame; ++i ) + { + e += (float) pow( x[i] * ( ne[i] * G ), 4 ); + } + + return e; +} + + +/*-------------------------------------------------------------------* + * tcx_hm_quantize_gain() + * + * + *-------------------------------------------------------------------*/ + +static void tcx_hm_quantize_gain( + const float x[], /* i : absolute spectrum */ + const Word32 env[], /* i : envelope (Q16) */ + const int16_t lag, + const int16_t fract_res, + Word16 p[], /* i : harmonic model (Q13) */ + const int16_t L_frame, /* i : number of spectral lines */ + const int16_t coder_type, /* i : GC/VC coder type */ + float relative_score, /* i : periodicity score */ + int16_t *gain_idx, /* o : quantization index */ + Word16 *gain /* o : quantized harmonic model gain (Q11) */ +) +{ + int16_t g, s; + float be, e, pe; + const float kLowPeriodicityThr[2] = { 0.5f, 0.2f }; + + assert( coder_type == VOICED || coder_type == GENERIC ); + + s = 0; + if ( coder_type == VOICED ) + { + s = 1; + } + + *gain = 0; + + /* Disable the harmonic model if periodicity is very low */ + if ( relative_score < kLowPeriodicityThr[s] ) + { + return; + } + + be = tcx_hm_get_re( x, *gain, lag, fract_res, p, env, L_frame ); + + if ( coder_type == GENERIC ) + { + e = tcx_hm_get_re( x, qGains[s][0], lag, fract_res, p, env, L_frame ); + pe = 1.05f; + + if ( e * pe < be ) + { + *gain_idx = 0; + *gain = qGains[s][0]; + } + } + else + { + /* Iterate over all possible gain values */ + for ( g = 0; g < ( 1 << kTcxHmNumGainBits ); ++g ) + { + + e = tcx_hm_get_re( x, qGains[s][g], lag, fract_res, p, env, L_frame ); + + /* Add bit penalty */ + pe = 1.0f; + if ( *gain == 0.0f ) + { + pe = 1.05f; + } + + /* Minimum selection */ + if ( e * pe < be ) + { + be = e; + *gain_idx = g; + *gain = qGains[s][g]; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * tcx_hm_analyse() + * + * + *-------------------------------------------------------------------*/ + +void tcx_hm_analyse( + const float abs_spectrum[], /* i : absolute spectrum */ + const int16_t L_frame, /* i : number of spectral lines */ + Word32 env[], /* i/o: envelope shape (Q16) */ + const int16_t targetBits, /* i : target bit budget */ + const int16_t coder_type, /* i : GC/VC coder type */ + int16_t prm_hm[], /* o : HM parameters */ + int16_t LtpPitchLag, /* i : LTP pitch lag or -1 if none */ + const float LtpGain, /* i : LTP gain */ + int16_t *hm_bits /* o : bit consumption */ +) +{ + int16_t lag; + int32_t tmpL; + int16_t fract_res; + float fspec[N_MAX_ARI], RelativeScore; + Word16 p[2 * kTcxHmParabolaHalfWidth + 1], gain; + + /* Disable HM for non-GC,VC coder types */ + if ( ( coder_type != VOICED ) && ( coder_type != GENERIC ) ) + { + *hm_bits = 0; + prm_hm[0] = 0; + + return; + } + + /* Bit consumption for the HM off case: 1 bit flag */ + *hm_bits = 1; + + /* Filter out noise and keep the peaks */ + PeakFilter( abs_spectrum, fspec, L_frame ); + + /* Get the best lag index */ + prm_hm[1] = SearchPeriodicityIndex( fspec, abs_spectrum, L_frame, targetBits - *hm_bits, LtpPitchLag, LtpGain, &RelativeScore ); + + /* Convert the index to lag */ + UnmapIndex( prm_hm[1], L_frame >= 256, LtpPitchLag, ( targetBits - *hm_bits <= kSmallerLagsTargetBitsThreshold ) || ( L_frame < 256 ), &fract_res, &tmpL ); + lag = (int16_t) tmpL; + + /* Render harmonic model */ + tcx_hm_render( lag, fract_res, p ); + + /* Calculate and quantize gain */ + gain = 0; + + tcx_hm_quantize_gain( abs_spectrum, env, lag, fract_res, p, L_frame, coder_type, RelativeScore, &prm_hm[2], &gain ); + + /* Decision */ + if ( gain > 0 ) + { + prm_hm[0] = 1; /* flag: on */ + + *hm_bits += CountIndexBits( L_frame >= 256, prm_hm[1] ); + + if ( coder_type == VOICED ) + { + *hm_bits += kTcxHmNumGainBits; + } + + tcx_hm_modify_envelope( gain, lag, fract_res, p, env, L_frame ); + } + else + { + prm_hm[0] = 0; /* flag: off */ + prm_hm[1] = -1; /* pitch index */ + prm_hm[2] = 0; /* gain index */ + } + + return; +} diff --git a/lib_enc/arith_coder_enc.c b/lib_enc/arith_coder_enc.c new file mode 100644 index 0000000000..553721377c --- /dev/null +++ b/lib_enc/arith_coder_enc.c @@ -0,0 +1,685 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define kMaxNumHeapElems 10 + +typedef struct HeapElem +{ + float mScore; /* Sort key */ + int16_t mIndex; /* Original index */ +} HeapElem; + +typedef struct Heap +{ + HeapElem mElem[2 * kMaxNumHeapElems + 1]; +} Heap; + + +/*-------------------------------------------------------------------* + * tcx_arith_estimate_scale() + * + * + *-------------------------------------------------------------------*/ + +/*! r: estimated SQ scale */ +static float tcx_arith_estimate_scale( + const float abs_spectrum[], /* i : absolute MDCT coefficients */ + const int16_t L_frame, /* i : number of spectral lines */ + const Word16 envelope[], /* i : scaled envelope (Q15-e) */ + const Word16 envelope_e /* i : scaled envelope exponent (Q0) */ +) +{ + float scale, tmp; + int16_t k; + + /* compute normalised standard deviation and determine approximate scale */ + scale = 0.01f; + for ( k = 0; k < L_frame; k++ ) + { + tmp = abs_spectrum[k] * envelope[k]; + scale += tmp * tmp; + } + tmp = (float) ( 1 << ( 15 - envelope_e ) ); + scale = (float) sqrt( ( L_frame * tmp * tmp * 4.0f ) / scale ); + + + return scale; +} + + +/*-------------------------------------------------------------------* + * MinHeapify_i() + * + * + *-------------------------------------------------------------------*/ + +static void MinHeapify_i( + Heap *H, + int16_t i ) +{ + int16_t left, right, largest; + HeapElem T; + + left = 2 * i + 1; + right = left + 1; + largest = i; + + if ( H->mElem[left].mScore < H->mElem[largest].mScore ) + { + largest = left; + } + if ( H->mElem[right].mScore < H->mElem[largest].mScore ) + { + largest = right; + } + while ( largest != i ) + { + T.mIndex = H->mElem[i].mIndex; + T.mScore = H->mElem[i].mScore; + + H->mElem[i].mIndex = H->mElem[largest].mIndex; + H->mElem[i].mScore = H->mElem[largest].mScore; + + H->mElem[largest].mIndex = T.mIndex; + H->mElem[largest].mScore = T.mScore; + + i = largest; + + left = 2 * i + 1; + right = left + 1; + + if ( H->mElem[left].mScore < H->mElem[largest].mScore ) + { + largest = left; + } + if ( H->mElem[right].mScore < H->mElem[largest].mScore ) + { + largest = right; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * tcx_arith_find_max_scale() + * + * + *-------------------------------------------------------------------*/ + +static float tcx_arith_find_max_scale( + const float abs_spectrum[], /* i : absolute MDCT coefficients */ + const int16_t L_frame, /* i : number of spectral lines */ + const Word16 envelope[], /* i : scaled envelope (Q15-e) */ + const Word16 envelope_e, /* i : scaled envelope exponent (Q0) */ + const Word16 exps[], /* i : expfp(-(integer)envelope[]/2) */ + const float deadzone /* i : deadzone (0.5f = no deadzone) */ +) +{ + int16_t i, k, q; + float p, scale; + Heap heap; + Word16 tmpi1, tmpi2; + float envelope_scale; + const float limit = -9.70406052784f; /* = ln(1/16384): log of smallest allowed probability */ + + /* Find the top most offending lines according to probability estimates */ + heap.mElem[0].mScore = 0; /* mal: just to silnce the compiler */ + + for ( i = 0; i < kMaxNumHeapElems; ++i ) + { + heap.mElem[i].mIndex = 0; + heap.mElem[i].mScore = 0; + } + for ( ; i < 2 * kMaxNumHeapElems + 1; ++i ) + { + heap.mElem[i].mScore = FLT_MAX; + } + for ( k = 0; k < L_frame; ++k ) + { + p = envelope[k] * abs_spectrum[k]; + if ( p > heap.mElem[0].mScore ) + { + heap.mElem[0].mScore = p; + heap.mElem[0].mIndex = k; + MinHeapify_i( &heap, 0 ); + } + } + + /* Make sure the scale is limited so that the offending lines don't cause probability underflow. */ + /* Also limit scale to avoiding saturation of the gain quantizer */ + scale = 1.0f / (float) sqrt( L_frame * 0.5f ); + envelope_scale = -(float) pow( 2, envelope_e - 16 ); + for ( i = 0; i < kMaxNumHeapElems; ++i ) + { + k = heap.mElem[i].mIndex; + + /* Get approximate maximum allowed magnitude */ + q = (int16_t) ceil( ( ( limit - log( 1.0f - ( exps[k] / PCM16_TO_FLT_FAC ) * ( exps[k] / PCM16_TO_FLT_FAC ) ) ) / ( envelope[k] * envelope_scale ) - 1 ) / 2.0f ); + + /* Refinement: get the exact q */ + powfp_odd2( exps[k], q, &tmpi1, &tmpi2 ); + if ( tmpi1 - tmpi2 >= 2 ) + { + /* q may be too low */ + powfp_odd2( exps[k], q + 1, &tmpi1, &tmpi2 ); + while ( tmpi1 - tmpi2 >= 2 ) + { + ++q; + powfp_odd2( exps[k], q + 1, &tmpi1, &tmpi2 ); + } + } + else + { + /* q is too high */ + --q; + powfp_odd2( exps[k], q, &tmpi1, &tmpi2 ); + while ( tmpi1 - tmpi2 < 2 ) + { + --q; + powfp_odd2( exps[k], q, &tmpi1, &tmpi2 ); + } + } + + /* Find the largest scale so that the quantized magnitude is at most q */ + p = ( q + 0.99f - deadzone ) / ( abs_spectrum[k] + 0.000001f ); + assert( (int16_t) ( abs_spectrum[k] * p + deadzone ) <= q ); + scale = min( scale, p ); + } + + return scale; +} + + +/*-------------------------------------------------------------------* + * tcx_arith_find_kMax() + * + * + *-------------------------------------------------------------------*/ + +/*! r: index of highest freq. nonzero line (-1 if all zeros) */ +static int16_t tcx_arith_find_kMax( + const float abs_spectrum[], /* i : absolute MDCT coefficients */ + const int16_t L_frame, /* i : number of spectral lines */ + const float scale, /* i : scalar quantizer scale */ + const float deadzone, /* i : deadzone (0.5f = no deadzone) */ + const int16_t deadzone_flags[] /* i : line-wise deadzone control */ +) +{ + int16_t kMax; + + kMax = L_frame - 1; + while ( ( kMax >= 0 ) && ( abs_spectrum[kMax] * scale < ( 1.0f - deadzone ) + deadzone * deadzone_flags[kMax] ) ) + { + kMax--; + } + + return kMax; +} + + +/*-------------------------------------------------------------------* + * tcx_arith_rateloop() + * + * + *-------------------------------------------------------------------*/ + +/*! r: best scale */ +static float tcx_arith_rateloop( + const float abs_spectrum[], /* i : absolute MDCT coefficients */ + const int16_t L_frame, /* i : number of spectral lines */ + const Word16 envelope[], /* i : scaled envelope (Q15-e) */ + const Word16 envelope_e, /* i : scaled envelope exponent (Q0) */ + const Word16 exps[], /* i : expfp(-(integer)envelope[]/2) */ + const int16_t target_bits, /* i : target bit budget */ + const float deadzone, /* i : deadzone (0.5f = no deadzone) */ + const int16_t deadzone_flags[], /* i : line-wise deadzone control */ + float *target_bits_fac /* i/o: scale estimator compensation */ +) +{ + int16_t k, idx, kMax, q; + float s, adjust; + float fixed_bits[2][N_MAX_ARI]; + float estimator_undershoot; + float max_complexity; + int16_t iter; /* rate loop iteration counter */ + float scale; /* SQ scale factor to try next */ + float scale_best; /* best SQ scale factor */ + float scale_max; /* maximum allowable scale factor */ + float lob; /* lower bound of SQ scale factor */ + float hib; /* upper bound of SQ scale factor */ + int16_t flag; /* 1:bit surplus, -1:bit deficit, 0:unknown */ + float complexity; /* cumulative rate loop complexity */ + float bits; /* number of bits (approximate) */ + float envelope_scale; + + + scale = tcx_arith_estimate_scale( abs_spectrum, L_frame, envelope, envelope_e ); + scale *= *target_bits_fac; + + scale_max = tcx_arith_find_max_scale( abs_spectrum, L_frame, envelope, envelope_e, exps, deadzone ); + if ( scale > scale_max ) + { + scale = scale_max; + } + + scale_best = scale; + lob = 0.0f; + hib = 0.0f; + flag = 0; + complexity = 0; + bits = 0; + max_complexity = 96.0f * L_frame; + iter = 0; + envelope_scale = (float) pow( 2, envelope_e - 15 ); + + estimator_undershoot = 0; + /* Precalculate fixed bit costs */ + for ( k = 0; k < L_frame; ++k ) + { + s = envelope[k] * envelope_scale; + + fixed_bits[0][k] = -log2_f( 1 - exps[k] / PCM16_TO_FLT_FAC ); + fixed_bits[1][k] = 1 - s * 0.5f * INV_LOG_2 - log2_f( 1 - ( exps[k] / PCM16_TO_FLT_FAC ) * ( exps[k] / PCM16_TO_FLT_FAC ) ); + } + + while ( complexity + 48 + L_frame * 11 < max_complexity ) + { + kMax = tcx_arith_find_kMax( abs_spectrum, L_frame, scale, deadzone, deadzone_flags ); + complexity += 16 + ( L_frame - kMax ) * 5 + ( kMax + 1 ) * 2; + + bits = estimator_undershoot * kMax + 1; + + for ( k = 0; k <= kMax; ++k ) + { + s = envelope[k] * envelope_scale; + q = (int16_t) ( abs_spectrum[k] * scale + deadzone ); + idx = min( 1, q ); + bits += fixed_bits[idx][k]; + bits += s * q * INV_LOG_2; + } + complexity += 32 + 6 * kMax; + if ( iter == 0 ) + { + /* First rate loop iteration */ + if ( scale < scale_max ) + { + /* Only update in non-degenerate case */ + /* Update estimator temporal compensation factor */ + *target_bits_fac *= target_bits / (float) bits; + if ( *target_bits_fac > 1.25f ) + { + *target_bits_fac = 1.25f; + } + if ( *target_bits_fac < 0.75f ) + { + *target_bits_fac = 0.75f; + } + } + } + + if ( bits <= target_bits ) + { + /* Bits leftover => scale is too small */ + if ( flag <= 0 || scale >= scale_best ) + { + scale_best = scale; + flag = 1; + } + + lob = scale; + if ( hib > 0 ) + { + /* Bisection search */ + scale = ( lob + hib ) * 0.5f; + } + else + { + /* Initial scale adaptation */ + adjust = 1.25f * target_bits / (float) bits; + if ( adjust > 2.0f ) + { + adjust = 2.0f; + } + scale *= adjust; + if ( scale > scale_max ) + { + scale = scale_max; + } + } + } + else + { + /* Ran out of bits => scale is too large */ + hib = scale; + if ( lob > 0 ) + { + /* Bisection search */ + scale = ( lob + hib ) * 0.5f; + } + else + { + /* Initial scale adaptation */ + adjust = 0.8f * target_bits / (float) bits; + if ( adjust < 0.5f ) + { + adjust = 0.5f; + } + scale *= adjust; + } + if ( flag <= 0 ) + { + scale_best = scale; + flag = 0; + } + } + ++iter; + } + + + return scale_best; +} + + +/*-------------------------------------------------------------------* + * tcx_arith_encode() + * + * + *-------------------------------------------------------------------*/ + +/*! r: number of bits consumed */ +static int16_t tcx_arith_encode( + int32_t q_abs_spectrum[], /* i/o: scalar quantized absolute spectrum */ + const int16_t signs[], /* i : signs */ + const int16_t kMax, /* i : number of nonzero spectral lines to code */ + const int16_t L_frame, /* i : nominal number of spectral lines */ + const Word16 exps[], /* i : expfp(-(integer)envelope[]/2) */ + const int16_t target_bits, /* i : target bit budget */ + int16_t prm[] /* o : bitstream */ +) +{ + Tastat as, as_lastgood; + int16_t bp, bp_lastgood; + int16_t k; + int16_t kEncoded; + Word16 tmpi1, tmpi2; + + /* Final coding */ + ari_start_encoding_14bits( &as ); + ari_copy_states( &as, &as_lastgood ); + bp = bp_lastgood = 0; + kEncoded = kMax; + for ( k = 0; k <= kMax; ++k ) + { + if ( q_abs_spectrum[k] == 0 ) + { + assert( exps[k] >= 2 ); + bp = ari_encode_14bits_range( prm, bp, target_bits, &as, exps[k] >> 1, 16384 ); + } + else + { + /* q_abs_spectrum[k] != 0 */ + powfp_odd2( exps[k], (Word16) q_abs_spectrum[k], &tmpi1, &tmpi2 ); + while ( tmpi1 < tmpi2 + 2 ) + { + --q_abs_spectrum[k]; + powfp_odd2( exps[k], (Word16) q_abs_spectrum[k], &tmpi1, &tmpi2 ); + } + bp = ari_encode_14bits_range( prm, bp, target_bits, &as, tmpi2 >> 1, tmpi1 >> 1 ); + bp = ari_encode_14bits_sign( prm, bp, target_bits, &as, signs[k] ); + } + /* Check bit budget status */ + if ( as.high <= as.low ) + { + /* no bits left */ + /* printf("\noverflow at %d\n\n", k); */ + if ( q_abs_spectrum[k] > 1 ) /* Lower magnitude is still > 0 */ + { + /* Restore state */ + ari_copy_states( &as_lastgood, &as ); + bp = bp_lastgood; + + /* Quantize to lower magnitude */ + --q_abs_spectrum[k]; + + /* Retry encoding */ + powfp_odd2( exps[k], (Word16) q_abs_spectrum[k], &tmpi1, &tmpi2 ); + bp = ari_encode_14bits_range( prm, bp, target_bits, &as, tmpi2 >> 1, tmpi1 >> 1 ); + bp = ari_encode_14bits_sign( prm, bp, target_bits, &as, signs[k] ); + if ( as.high > as.low ) /* Success */ + { + ari_copy_states( &as, &as_lastgood ); + bp_lastgood = bp; + kEncoded = k; + for ( ++k; k <= kMax; k++ ) + { + q_abs_spectrum[k] = 0; + } + break; + } + } + ari_copy_states( &as_lastgood, &as ); + bp = bp_lastgood; + kEncoded = k - 1; + for ( ; k <= kMax; k++ ) + { + q_abs_spectrum[k] = 0; + } + break; + } + else + { + ari_copy_states( &as, &as_lastgood ); + bp_lastgood = bp; + } + } + + /* Send zeros until L_frame */ + for ( k = kEncoded + 1, kEncoded = L_frame - 1; k < L_frame; ++k ) + { + assert( exps[k] >= 2 ); + bp = ari_encode_14bits_range( prm, bp, target_bits, &as, exps[k] >> 1, 16384 ); + /* Check bit budget status */ + if ( as.high <= as.low ) + { + /* no bits left */ + ari_copy_states( &as_lastgood, &as ); + bp = bp_lastgood; + kEncoded = k - 1; + break; + } + else + { + ari_copy_states( &as, &as_lastgood ); + bp_lastgood = bp; + } + } + + if ( kEncoded == L_frame - 1 ) + { + /* RESQ bits possibly available */ + /* Limit target bits to actually needed bits */ + bp = ari_done_cbr_encoding_14bits( prm, bp, bp + 16 + as.bits_to_follow, &as ); + } + else + { + bp = ari_done_cbr_encoding_14bits( prm, bp, target_bits, &as ); + } + + return bp; +} + + +/*-------------------------------------------------------------------* + * tcx_arith_encode_envelope() + * + * + *-------------------------------------------------------------------*/ + +void tcx_arith_encode_envelope( + float spectrum[], /* i/o: MDCT coefficients */ + int16_t signs[], /* o : signs (spectrum[.]<0) */ + const int16_t L_frame, /* i : frame or MDCT length */ + const int16_t L_spec, /* i : length w/o BW limitation */ + Encoder_State *st, /* i/o: coder state */ + const Word16 A_ind[], /* i : quantised LPC coefficients */ + int16_t target_bits, /* i : number of available bits */ + int16_t prm[], /* o : bitstream parameters */ + const int16_t use_hm, /* i : use HM in current frame? */ + int16_t prm_hm[], /* o : HM parameter area */ + const int16_t tcxltp_pitch, /* i : TCX LTP pitch in FD, -1 if n/a */ + int16_t *arith_bits, /* o : bits used for ari. coding */ + int16_t *signaling_bits, /* o : bits used for signaling */ + const int16_t low_complexity /* i : low-complexity flag */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + Word16 tmp; + Word32 env[N_MAX_ARI]; /* unscaled envelope (Q16) */ + Word16 *envelope; /* scaled envelope (Q15-e) */ + Word16 envelope_e; + Word16 exponents[N_MAX_ARI]; /* Q15 */ + int16_t L_spec_core; + int32_t *q_spectrum; + TCX_CONFIG_HANDLE hTcxCfg; + float scale; + int16_t k, kMax; + float deadzone; + const int16_t *deadzone_flags; + float gamma_w, gamma_uw; + int16_t hm_bits; + + assert( L_spec <= N_MAX_ARI ); + + hTcxCfg = st->hTcxCfg; + deadzone = hTcxCfg->sq_rounding; + deadzone_flags = hTcxEnc->memQuantZeros; + *signaling_bits = 0; + assert( st->enableTcxLpc ); + gamma_w = 1.0f; + gamma_uw = 1.0f / st->gamma; + +#define WMC_TOOL_MAN + tcx_arith_render_envelope( A_ind, L_frame, L_spec, FL2WORD16( hTcxCfg->preemph_fac ), FL2WORD16( gamma_w ), FL2WORD16( 0.5f * gamma_uw ), env ); +#undef WMC_TOOL_MAN + + for ( k = 0; k < L_spec; ++k ) + { + if ( spectrum[k] < 0 ) + { + spectrum[k] = -spectrum[k]; + signs[k] = 1; + } + else + { + signs[k] = 0; + } + } + + if ( use_hm ) + { + tcx_hm_analyse( spectrum, L_spec, env, target_bits, hTcxCfg->coder_type, prm_hm, tcxltp_pitch, hTcxEnc->tcxltp_gain, &hm_bits ); + + target_bits -= hm_bits; + *signaling_bits += hm_bits; + } + else + { + prm_hm[0] = 0; /* just to be sure */ + hm_bits = 0; + } + + L_spec_core = L_spec; + if ( st->igf ) + { + L_spec_core = min( L_spec_core, st->hIGFEnc->infoStartLine ); + } + envelope = (Word16 *) env; + tcx_arith_scale_envelope( L_spec, L_spec_core, env, target_bits, low_complexity, envelope, &envelope_e ); + +#define WMC_TOOL_MAN + tmp = sub( envelope_e, 1 ); + FOR( k = 0; k < L_spec; k++ ) + { + exponents[k] = expfp( negate( envelope[k] ), tmp ); + } +#undef WMC_TOOL_MAN + scale = tcx_arith_rateloop( spectrum, L_spec, envelope, envelope_e, exponents, target_bits, deadzone, deadzone_flags, &( hTcxEnc->tcx_target_bits_fac ) ); + + /* Final quantization */ + kMax = tcx_arith_find_kMax( spectrum, L_spec, scale, deadzone, deadzone_flags ); + + q_spectrum = env; /* Reuse buffer */ + for ( k = 0; k <= kMax; ++k ) + { + /* quantise using dead-zone */ + q_spectrum[k] = (int32_t) ( spectrum[k] * scale + deadzone ); + } + + /* Final encoding */ + *arith_bits = tcx_arith_encode( q_spectrum, signs, kMax, L_spec, exponents, target_bits, prm ); + + /* Multiply back the signs */ + for ( k = 0; k <= kMax; ++k ) + { + spectrum[k] = (float) ( q_spectrum[k] * ( 1 - 2 * signs[k] ) ); + } + for ( ; k < max( L_frame, L_spec ); ++k ) + { + spectrum[k] = 0; + } + + return; +} diff --git a/lib_enc/avq_cod.c b/lib_enc/avq_cod.c new file mode 100644 index 0000000000..601138ccd0 --- /dev/null +++ b/lib_enc/avq_cod.c @@ -0,0 +1,599 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local prototypes + *-------------------------------------------------------------------*/ + +static void wrte_cv( BSTR_ENC_HANDLE hBstr, const int16_t nq, const int16_t i_ind, const int16_t kv_ind, uint16_t I, int16_t kv[], int16_t *bits ); + +/*-------------------------------------------------------------------* + * Function AVQ_cod() * + * * + * Split algebraic vector quantizer (AVQ) based on RE8 latice * + *-------------------------------------------------------------------*/ + +/*! r: comfort noise gain factor */ +float AVQ_cod( + const float xri[], /* i : vector to quantize */ + int16_t xriq[], /* o : quantized normalized vector (assuming the bit budget is enough) */ + const int16_t nb_bits, /* i : number of allocated bits */ + const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ +) +{ + int16_t i, j, iter; + int16_t c[8]; + float gain_inv, x1[8], ener, tmp, nbits, nbits_max, fac, offset; + float ebits[NSV_MAX]; + + /* find energy of each subvector in log domain (scaled for bits estimation) */ + for ( i = 0; i < Nsv; i++ ) + { + ener = 2.0f; /* to set ebits >= 0 */ + for ( j = 0; j < 8; j++ ) + { + x1[j] = xri[i * 8 + j]; + ener += x1[j] * x1[j]; + } + + /* estimated bit consumption when gain=1 */ + ebits[i] = 5.0f * FAC_LOG2 * (float) log10( ener * 0.5f ); + } + + /* estimate gain according to number of bits allowed */ + fac = 128.0f; /* start at the middle (offset range = 0 to 255.75) */ + offset = 0.0f; + nbits_max = 0.95f * ( (float) ( nb_bits - Nsv ) ); + + /* tree search with 10 iterations : offset with step of 0.25 bits (0.3 dB) */ + for ( iter = 0; iter < 10; iter++ ) + { + offset += fac; + /* calculate the required number of bits */ + nbits = 0.0; + for ( i = 0; i < Nsv; i++ ) + { + tmp = ebits[i] - offset; + if ( tmp < 0.0 ) + { + tmp = 0.0; + } + nbits += tmp; + } + /* decrease gain when no overflow occurs */ + if ( nbits <= nbits_max ) + { + offset -= fac; + } + fac *= 0.5; + } + + /* estimated gain (when offset=0, estimated gain=1) */ + gain_inv = 1.0f / (float) pow( 10.0f, (float) ( offset / ( 2.0f * 5.0f * FAC_LOG2 ) ) ); + + /* quantize all subvector using estimated gain */ + for ( i = 0; i < Nsv; i++ ) + { + for ( j = 0; j < 8; j++ ) + { + x1[j] = xri[i * 8 + j] * gain_inv; + } + + re8_PPV( x1, c ); + for ( j = 0; j < 8; j++ ) + { + xriq[i * 8 + j] = c[j]; + } + } + + fac = 0; + + /* round bit allocations and save */ + for ( i = 0; i < Nsv; i++ ) + { + xriq[( Nsv * 8 ) + i] = (int16_t) floor( ebits[i] * 128.0f ); + } + + return ( fac ); +} + + +/*-----------------------------------------------------------------* + * AVQ_encmux() + * + * Encode subvectors and write indexes into the bitstream + *-----------------------------------------------------------------*/ + +void AVQ_encmux( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t extl, /* i : extension layer */ + int16_t xriq[], /* i/o: rounded subvectors [0..8*Nsv-1] followedby rounded bit allocations [8*Nsv..8*Nsv+Nsv-1]*/ + int16_t *nb_bits, /* i/o: number of allocated bits */ + const int16_t Nsv, /* i : number of subvectors */ + int16_t nq[], /* o : AVQ nq index */ + int16_t avq_bit_sFlag, /* i : flag for AVQ bit saving solution */ + int16_t trgtSvPos /* i : target SV for AVQ bit savings */ +) +{ + int16_t i, j = 0, bits, pos, pos_max, overflow; + int16_t sort_idx[NSV_MAX]; + int16_t *t, kv[NSV_MAX * 8]; + uint16_t I[NSV_MAX]; + int16_t nq_ind, i_ind, kv_ind; + int16_t nq_est, unused_bits, unused_bits_idx; + int16_t bitsMod; + int16_t unusedbitsFlag; + int16_t svOrder[NSV_MAX], k, nullVec, dummy_bits; + + if ( extl == SWB_BWE_HIGHRATE || extl == FB_BWE_HIGHRATE ) + { + nq_ind = IND_NQ2; + i_ind = IND_I2; + kv_ind = IND_KV2; + } + else + { + nq_ind = IND_NQ; + i_ind = IND_I; + kv_ind = IND_KV; + } + + unusedbitsFlag = 0; + bitsMod = 0; + + for ( i = 0; i < NSV_MAX; i++ ) + { + I[i] = (uint16_t) -1; + } + + /*----------------------------------------------------------------- + * Encode subvectors and fix possible overflows in total bit budget, + * i.e. find for each subvector a codebook index nq (nq=0,2,3,4,...,NSV_MAX), + * a base codebook index (I), and a Voronoi index (kv) + *-----------------------------------------------------------------*/ + + /* sort subvectors by estimated bit allocations in decreasing order */ + t = kv; /* reuse vector to save memory */ + for ( i = 0; i < Nsv; i++ ) + { + t[i] = xriq[8 * Nsv + i]; + } + + for ( i = 0; i < Nsv; i++ ) + { + bits = t[0]; + pos = 0; + for ( j = 1; j < Nsv; j++ ) + { + if ( t[j] > bits ) + { + bits = t[j]; + pos = j; + } + } + sort_idx[i] = pos; + t[pos] = -1; + } + + /* compute multi-rate indices and avoid bit budget overflow */ + pos_max = 0; + bits = 0; + for ( i = 0; i < Nsv; i++ ) + { + /* find vector to quantize (criteria: nb of estimated bits) */ + pos = sort_idx[i]; + + /* compute multi-rate index of rounded subvector (nq,I,kv[]) */ + re8_cod( &xriq[pos * 8], &nq[pos], &I[pos], &kv[8 * pos] ); + + if ( nq[pos] > 0 ) + { + j = pos_max; + if ( pos > j ) + { + j = pos; + } + + /* compute (number of bits -1) to describe Q #nq */ + if ( nq[pos] >= 2 ) + { + overflow = nq[pos] * 5 - 1; + } + else + { + overflow = 0; + } + + /* check for overflow and compute number of bits-1 (n) */ + if ( ( bits + overflow + j ) > *nb_bits ) + { + /* if budget overflow */ + for ( j = pos * 8; j < ( pos * 8 ) + 8; j++ ) + { + xriq[j] = 0; + } + nq[pos] = 0; /* force Q0 */ + } + else + { + bits += overflow; + pos_max = j; /* update index of the last described subvector */ + } + } + } + + nullVec = 0; + dummy_bits = 0; + svOrder[Nsv - 1] = trgtSvPos; + svOrder[0] = 0; + svOrder[1] = 1; + i = 2; + j = i; + if ( avq_bit_sFlag == 2 ) + { + j = i + 1; + } + while ( i < Nsv - 1 ) + { + svOrder[i] = j; + i++; + j++; + } + + /* write indexes to the bitstream */ + /* ============================== */ + + bits = *nb_bits; + overflow = 0; + for ( i = 0; i < Nsv; i++ ) + { + k = svOrder[i]; + if ( avq_bit_sFlag == 2 && bits % 5 == 4 && bits > 8 && bits < 30 && k >= trgtSvPos && i < Nsv - 1 ) + { + ordr_esti( Nsv - i, &trgtSvPos, &svOrder[i], Nsv ); + k = svOrder[i]; + avq_bit_sFlag = 1; + } + + if ( k == trgtSvPos && avq_bit_sFlag > 0 ) + { + if ( ( *nb_bits - bits ) == 7 || bits < BIT_SAVING_LOW_THR || bits >= BIT_SAVING_HIGH_THR ) + { + avq_bit_sFlag = 0; + } + else + { + break; + } + } + + if ( 5 * nq[k] - 1 == bits ) /* check the overflow */ + { + overflow = 1; + } + + if ( bits > 8 ) + { + /* write the unary code for nq[i] */ + j = nq[k] - 1; + if ( nq[k] > 0 ) + { + /* write the unary code */ + while ( j > 16 ) + { + push_indice( hBstr, nq_ind, 65535, 16 ); + bits -= 16; + j -= 16; + } + + if ( j > 0 ) + { + push_indice( hBstr, nq_ind, ( 1 << j ) - 1, j ); + bits -= j; + } + } + + if ( !overflow ) + { + /* write the stop bit */ + push_indice( hBstr, nq_ind, 0, 1 ); + bits--; + } + + /* write codebook indices (rank I and event. Voronoi index kv) */ + wrte_cv( hBstr, nq[k], i_ind, kv_ind, I[k], &kv[k * 8], &bits ); + } + } /* for */ + + /* Bit Saving Solution */ + if ( avq_bit_sFlag > 0 && bits > 8 ) + { + bitsMod = bits % 5; + i = svOrder[Nsv - 1]; + if ( i != Nsv - 1 ) + { + nullVec = 0; + for ( j = i; j < Nsv - 1; j++ ) + { + if ( nq[svOrder[j]] == 0 ) + { + nullVec++; + } + } + nq_est = bits / 5; + if ( ( bitsMod > 0 || ( nullVec == 4 && nq_est == 5 ) ) && bitsMod != 4 && ( bits + nullVec ) >= 5 * nq_est + 4 && nq[svOrder[Nsv - 2]] == 0 ) /* detect need for dummy bits */ + { + dummy_bits = 5 - bitsMod; + bits = bits + dummy_bits; /* add dummy bits */ + bitsMod = 0; + } + else if ( nq_est > 4 && ( ( bitsMod == 0 && nullVec > 3 && nullVec < 6 ) || ( bitsMod == 4 && nullVec == 5 ) ) && nq[svOrder[Nsv - 2]] == 0 ) /* wasted bits 4, 5 for nq 6,7..*/ + { + overflow = 0; + if ( ( bitsMod + nullVec ) % 5 != 0 ) + { + overflow = 1; + } + dummy_bits = nullVec + overflow; + bits = bits + dummy_bits; /* add dummy bits */ + bitsMod = 0; + } + } + + overflow = 1; + if ( bitsMod != 4 ) + { + overflow = 0; + bits -= bitsMod; + } + bits = bits + overflow; /*add fake bit */ + unused_bits = bits - 5 * nq[i]; + if ( nq[i] == 0 ) /*no bit savings*/ + { + unused_bits--; /*Stop Bit*/ + } + unused_bits_idx = (int16_t) unused_bits / 5; + + unusedbitsFlag = 0; + + if ( dummy_bits == 0 ) + { + if ( unused_bits_idx == 1 && bits > BIT_SAVING_LOW_THR ) + { + unused_bits_idx = 0; + unusedbitsFlag = 1; + } + else if ( unused_bits_idx == 0 && bits > BIT_SAVING_LOW_THR ) + { + unused_bits_idx = 1; + unusedbitsFlag = -1; + } + } + + j = unused_bits_idx; + /*Encode Unused Bit Unary Codeword */ + if ( j > 0 ) + { + /* write the unary code */ + push_indice( hBstr, nq_ind, ( 1 << j ) - 1, j ); + } + + if ( nq[i] != 0 ) + { + /* write the stop bit */ + push_indice( hBstr, nq_ind, 0, 1 ); + } + + /*Compute AVQ code book number from unused Bits */ + nq_est = (int16_t) ceil( 0.2f * ( bits - 5 * ( unusedbitsFlag + unused_bits_idx ) ) ); + + if ( nq_est == 1 ) + { + nq_est = 0; + } + bits -= overflow; + + bits -= j; + + if ( nq_est != 0 ) + { + bits--; + } + nq[i] = nq_est; + + /* write codebook indices (rank I and event. Voronoi index kv) */ + wrte_cv( hBstr, nq[i], i_ind, kv_ind, I[i], &kv[i * 8], &bits ); + + bits -= dummy_bits; + + if ( bitsMod != 4 ) + { + bits += bitsMod; + } + } + + + *nb_bits = bits; + + return; +} + + +/*-------------------------------------------------------------------* + * Function AVQ_cod_lpc() * + * * + * Split algebraic vector quantizer (AVQ) for LPC quantization * + *-------------------------------------------------------------------*/ + +void AVQ_cod_lpc( + const float nvec[], /* i : vector to quantize */ + int16_t nvecq[], /* o : quantized normalized vector (assuming the bit budget is enough) */ + int16_t *indx, /* o : index[] (4 bits per words) */ + const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ +) +{ + int16_t nq, c[8]; + int16_t i, l, n, nk, pos, ival, kv[8]; + float x1[8]; + uint16_t I; + + /* quantize all subvector using estimated gain */ + pos = Nsv; + + for ( l = 0; l < Nsv; l++ ) + { + for ( i = 0; i < 8; i++ ) + { + x1[i] = nvec[l * 8 + i]; + } + + re8_PPV( x1, c ); + + re8_cod( c, &nq, &I, kv ); + + for ( i = 0; i < 8; i++ ) + { + nvecq[l * 8 + i] = c[i]; + } + + indx[l] = nq; /* index[0..Nsv-1] = quantizer number (0,2,3,4...) */ + + nk = 0; + n = nq; + + if ( nq > 4 ) + { + nk = ( nq - 3 ) >> 1; + n = nq - nk * 2; + } + + /* write n groups of 4-bit for base codebook index (I) */ + while ( n-- > 0 ) + { + indx[pos++] = ( I & 0x0F ); + I >>= 4; + } + + /* write n groups of 4-bit for Voronoi index (k[]) */ + while ( nk-- > 0 ) + { + ival = 0; + + for ( i = 0; i < 8; i++ ) + { + ival <<= 1; + ival += ( kv[i] & 0x01 ); + kv[i] >>= 1; + } + indx[pos++] = ( ival & 0x0F ); + ival >>= 4; + indx[pos++] = ( ival & 0x0F ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * Function wrte_cv() * + * * + * write codebook indices (rank I and event. Voronoi index kv) * + *-------------------------------------------------------------------*/ + +static void wrte_cv( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t nq, /* i : AVQ nq index */ + const int16_t i_ind, /* i : Base Bitstream index */ + const int16_t kv_ind, /* i : Vornoi Bitstream index */ + uint16_t I, /* o : rank I code book index */ + int16_t kv[], /* o : Vornoi index kv */ + int16_t *nbits /* i/o: bits */ +) +{ + int16_t pos, j; + int16_t bits; + + bits = *nbits; + + /* write codebook indices (rank I and event. Voronoi index kv) */ + if ( nq == 0 ) /* Q0 */ + { + /* nothing to write */ + } + else if ( nq < 5 ) /* Q2, Q3, Q4 */ + { + push_indice( hBstr, i_ind, I, 4 * nq ); + bits -= ( 4 * nq ); + } + else if ( nq % 2 == 0 ) /* Q4 + Voronoi extensions r=1,2,3,... */ + { + push_indice( hBstr, i_ind, I, 4 * 4 ); + bits -= 4 * 4; + pos = (int16_t) ( nq / 2 - 2 ); /* Voronoi order determination */ + for ( j = 0; j < 8; j++ ) + { + push_indice( hBstr, kv_ind, kv[j], pos ); + } + + bits -= 8 * pos; + } + else /* Q3 + Voronoi extensions r=1,2,3,... */ + { + push_indice( hBstr, i_ind, I, 4 * 3 ); + bits -= 4 * 3; + + pos = (int16_t) ( nq / 2 - 1 ); /* Voronoi order determination */ + for ( j = 0; j < 8; j++ ) + { + push_indice( hBstr, kv_ind, kv[j], pos ); + } + + bits -= 8 * pos; + } + + *nbits = bits; + return; +} diff --git a/lib_enc/bass_psfilter_enc.c b/lib_enc/bass_psfilter_enc.c new file mode 100644 index 0000000000..3d9a390945 --- /dev/null +++ b/lib_enc/bass_psfilter_enc.c @@ -0,0 +1,260 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * bass_pf_enc() + * + * Low-frequency postfiltering, decoder parammeter estimation + *---------------------------------------------------------------------*/ + +float bass_pf_enc( + const float *orig, /* i : 12.8kHz original signal */ + const float *syn, /* i : 12.8kHz synthesis to postfilter */ + const float pitch_buf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ + const float gainT_sf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ + const int16_t l_frame, /* i : frame length (should be multiple of l_subfr)*/ + const int16_t l_subfr_in, /* i : sub-frame length (80/64) */ + float mem_bpf[], /* i/o: memory state [2*L_FILT16k] */ + float mem_error_bpf[], /* i/o: memory state [2*L_FILT16k] */ + int16_t *gain_factor_param, /* o : quantized gain factor */ + const int16_t mode, /* i : coding mode of adapt bpf */ + float *mem_deemph_err, /* o : Error deemphasis memory */ + float *lp_ener /* o : long_term error signal energy */ +) +{ + int16_t i, j, sf, i_subfr, T, lg, l_subfr, l_filt; + float d, n, snr, nrg1, nrg2, gain, nrg, tmp; + float noise_buf[L_FILT16k + ( 2 * L_SUBFR )], *noise, *noise_in; + float error_buf[L_FILT16k + ( 2 * L_SUBFR )], *error, *error_in; + float cross_n_d, nrg_n; + const float *pFilt; + float ener2; + + if ( l_frame != L_FRAME16k ) + { + pFilt = filt_lp; + l_filt = L_FILT; + } + else + { + pFilt = filt_lp_16kHz; + l_filt = L_FILT16k; + } + + noise = noise_buf + l_filt; + noise_in = noise_buf + 2 * l_filt; + error = error_buf + l_filt; + error_in = error_buf + 2 * l_filt; + + sf = 0; + snr = 0.f; + nrg_n = 1e-6f; + cross_n_d = 0.f; + l_subfr = l_subfr_in; + for ( i_subfr = 0; i_subfr < l_frame; i_subfr += l_subfr, sf++ ) + { + T = (int16_t) pitch_buf[sf]; + gain = gainT_sf[sf]; + + if ( gain > 1.0f ) + { + gain = 1.0f; + } + if ( gain < 0.0f ) + { + gain = 0.0f; + } + + lg = l_frame - T - i_subfr; + if ( lg < 0 ) + { + lg = 0; + } + if ( lg > l_subfr ) + { + lg = l_subfr; + } + + if ( gain > 0 ) + { + tmp = 0.01f; + nrg = 0.01f; + for ( i = 0; i < lg; i++ ) + { + tmp += syn[i + i_subfr] * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); + nrg += ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ) * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); + } + for ( i = lg; i < l_subfr; i++ ) + { + tmp += syn[i + i_subfr] * syn[i + i_subfr - T]; + nrg += syn[i + i_subfr - T] * syn[i + i_subfr - T]; + } + gain = tmp / nrg; + + if ( gain > 1.0f ) + { + gain = 1.0f; + } + else if ( gain < 0.f ) + { + gain = 0.f; + } + + ener2 = 0.01f; + for ( i = 0; i < lg; i++ ) + { + error[i] = gain * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); + error[i] = error[i] + 0.9f * *mem_deemph_err; + *mem_deemph_err = error[i]; + ener2 += error[i] * error[i]; + } + for ( i = lg; i < l_subfr; i++ ) + { + error[i] = 0.5f * gain * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); + error[i] = error[i] + 0.9f * *mem_deemph_err; + *mem_deemph_err = error[i]; + ener2 += error[i] * error[i]; + } + + ener2 = (float) ( 10.f * log10( ener2 ) ); + *lp_ener = (float) ( 0.99f * *lp_ener + 0.01f * ener2 ); + ener2 = (float) pow( 10.f, 0.1f * *lp_ener ); + + tmp = 0.5f * tmp / ( nrg + ener2 ); + if ( tmp > 0.5f ) + { + tmp = 0.5f; + } + else if ( tmp < 0.f ) + { + tmp = 0.0f; + } + + for ( i = 0; i < lg; i++ ) + { + noise_in[i] = tmp * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); + error_in[i] = ( orig[i + i_subfr] - syn[i + i_subfr] ); + } + for ( i = lg; i < l_subfr; i++ ) + { + noise_in[i] = tmp * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); + noise_in[i] *= 0.5f; + error_in[i] = ( orig[i + i_subfr] - syn[i + i_subfr] ); + } + } + else + { + set_zero( noise_in, l_subfr ); + set_zero( error_in, l_subfr ); + } + + mvr2r( mem_bpf, noise_buf, 2 * l_filt ); + mvr2r( noise_buf + l_subfr, mem_bpf, 2 * l_filt ); + + mvr2r( mem_error_bpf, error_buf, 2 * l_filt ); + mvr2r( error_buf + l_subfr, mem_error_bpf, 2 * l_filt ); + + nrg1 = 1e-6f; + nrg2 = 1e-6f; + + /* substract from voiced speech low-pass filtered noise */ + for ( i = 0; i < l_subfr; i++ ) + { + n = pFilt[0] * noise[i]; + d = error[i]; + + for ( j = 1; j <= l_filt; j++ ) + { + n += pFilt[j] * ( noise[i - j] + noise[i + j] ); + } + /*for optimal g*/ + nrg_n += n * n; + cross_n_d += n * d; + + /*for evaluating SNR*/ + nrg1 += ( d + n ) * ( d + n ); + nrg2 += d * d; + } + + /*SegSNR*/ + snr += (float) log10( nrg2 / nrg1 ); + } + + /*Compute and quantize optimal gain*/ + /* optimal gain = -/ */ + if ( mode == 2 ) + { + int32_t gain32; + + gain32 = (int32_t) ( -2.f * ( cross_n_d / nrg_n ) + 0.5f ); + if ( gain32 > 3 ) + { + *gain_factor_param = 3; + } + else if ( gain32 < 0 ) + { + *gain_factor_param = 0; + } + else + { + *gain_factor_param = (int16_t) gain32; + } + + /*If optimal gain negatif or zero but snr still positif->gain=0.5f*/ + if ( snr > 0.f && *gain_factor_param == 0 ) + { + *gain_factor_param = 1; + } + } + else + { + *gain_factor_param = 2; + } + + + return ( snr ); +} diff --git a/lib_enc/bw_detect.c b/lib_enc/bw_detect.c new file mode 100644 index 0000000000..c1357a7f74 --- /dev/null +++ b/lib_enc/bw_detect.c @@ -0,0 +1,701 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define ALPHA_BWD 0.75f +#define BWD_LT_THRESH 0.6f + +#define BWD_COUNT_MAX 100 +#define BWD_COUNT_WIDER_BW 10 + +#define CLDFB_ENER_OFFSET 1.6f + +/*-------------------------------------------------------------------* + * bw_detect() + * + * bandwidth detector + *-------------------------------------------------------------------*/ + +void bw_detect( + Encoder_State *st, /* i/o: Encoder State */ + const float signal_in[], /* i : input signal */ + float *spectrum, /* i : MDCT spectrum */ + const float *enerBuffer /* i : energy buffer */ +) +{ + int16_t i, j, k, bw_max, bin_width, n_bins; + float spect[L_FRAME48k], in_win[BWD_TOTAL_WIDTH]; + float spect_bin[BWD_N_BINS_MAX]; + float cldfb_bin[9]; + const float *pt, *pt1; + float max_NB, max_WB, max_SWB, max_FB, mean_NB, mean_WB, mean_SWB, mean_FB; + int16_t cldfb_bin_width = 4; + + if ( st->input_Fs > 8000 ) + { + if ( enerBuffer != NULL ) + { + float ScalFac; + + ScalFac = 1 / ( st->cldfbAnaEnc->scale * st->cldfbAnaEnc->scale * 8.f ); + set_f( cldfb_bin, 0.001f, 9 ); + + /* NB: 1.2 - 2.8 kHz, 4 cldfb-bands*/ + cldfb_bin[0] += sum_f( &( enerBuffer[3] ), cldfb_bin_width ); + + /* WB: 4.4 - 7.2 kHz, 8 cldfb-bands, mid band(14) counted twice */ + if ( st->input_Fs >= 16000 ) + { + cldfb_bin[1] += sum_f( &( enerBuffer[11] ), cldfb_bin_width ); + cldfb_bin[2] += sum_f( &( enerBuffer[14] ), cldfb_bin_width ); + } + + /* SWB: 9.2 - 15.6 kHz, 16 cldfb-bands */ + if ( st->input_Fs >= 32000 ) + { + cldfb_bin[3] += sum_f( &( enerBuffer[23] ), cldfb_bin_width ); + cldfb_bin[4] += sum_f( &( enerBuffer[27] ), cldfb_bin_width ); + cldfb_bin[5] += sum_f( &( enerBuffer[31] ), cldfb_bin_width ); + cldfb_bin[6] += sum_f( &( enerBuffer[35] ), cldfb_bin_width ); + } + + /* FB: 16.8 - 20.0 kHz, 8 cldfb-bands */ + if ( st->input_Fs >= 48000 ) + { + cldfb_bin[7] += sum_f( &( enerBuffer[42] ), cldfb_bin_width ); + cldfb_bin[8] += sum_f( &( enerBuffer[46] ), cldfb_bin_width ); + } + + for ( i = 0; i < 9; i++ ) + { + cldfb_bin[i] = (float) log10( cldfb_bin[i] * ScalFac ); /* see formula used in perform_noise_estimation_enc() for CNG */ + } + } + else + { + /* set width of a speactral bin (corresponds to 1.5kHz) */ + if ( st->input_Fs == 16000 ) + { + bw_max = WB; + bin_width = 60; + n_bins = 5; /* spectrum to 7.5 kHz */ + } + else if ( st->input_Fs == 32000 ) + { + bw_max = SWB; + bin_width = 30; + n_bins = 10; /* spectrum to 15 kHz */ + } + else /* st->input_Fs == 48000 */ + { + bw_max = FB; + bin_width = 20; + n_bins = BWD_N_BINS_MAX; /* spectrum to 19.5 kHz */ + } + + if ( signal_in != NULL ) + { + /*---------------------------------------------------------------------* + * windowing of the input signal + *---------------------------------------------------------------------*/ + + pt = signal_in; + pt1 = hann_window_320; + + /* 1st half of the window */ + for ( i = 0; i < BWD_TOTAL_WIDTH / 2; i++ ) + { + in_win[i] = *pt++ * *pt1++; + } + pt1--; + + /* 2nd half of the window */ + for ( ; i < BWD_TOTAL_WIDTH; i++ ) + { + in_win[i] = *pt++ * *pt1--; + } + + /*---------------------------------------------------------------------* + * tranform into frequency domain + *---------------------------------------------------------------------*/ + + edct( in_win, spect, BWD_TOTAL_WIDTH, st->element_mode ); + } + else + { + bin_width *= (int16_t) ( ( st->input_Fs / FRAMES_PER_SEC ) / BWD_TOTAL_WIDTH ); + mvr2r( spectrum, spect, (int16_t) ( st->input_Fs / FRAMES_PER_SEC ) ); + } + /*---------------------------------------------------------------------* + * compute energy per spectral bins + *---------------------------------------------------------------------*/ + + set_f( spect_bin, 0.001f, n_bins ); + + for ( k = 0; k <= bw_max; k++ ) + { + for ( i = bwd_start_bin[k]; i <= bwd_end_bin[k]; i++ ) + { + for ( j = 0; j < bin_width; j++ ) + { + spect_bin[i] += spect[i * bin_width + j] * spect[i * bin_width + j]; + } + spect_bin[i] = (float) log10( spect_bin[i] ); + } + } + } + + if ( enerBuffer != NULL ) + { + /* cldfb detections */ + mean_NB = mean( cldfb_bin, 1 ); /* NB: 1.2 - 2.8 kHz, 4 cldfb-bands (1 bin) */ + maximum( cldfb_bin, 1, &max_NB ); + mean_WB = mean( cldfb_bin + 1, 2 ); /* WB: 4.4 - 7.2 kHz, 8 cldfb-bands (2 bins) */ + maximum( cldfb_bin + 1, 2, &max_WB ); + + mean_NB += CLDFB_ENER_OFFSET; + max_NB += CLDFB_ENER_OFFSET; + mean_WB += CLDFB_ENER_OFFSET; + max_WB += CLDFB_ENER_OFFSET; + + if ( st->input_Fs == 16000 ) + { + /* for 16kHz sampled inputs, do not check SWB & FB */ + mean_SWB = 0.0f; + max_SWB = 0.0f; + mean_FB = 0.0f; + max_FB = 0.0f; + } + else if ( st->input_Fs == 32000 ) + { + /* for 32kHz sampled inputs, do not check FB */ + mean_FB = 0.0f; + max_FB = 0.0f; + mean_SWB = mean( cldfb_bin + 3, 4 ); /* SWB: 9.2 - 15.6 kHz, 16 cldfb-bands (4 bins) */ + maximum( cldfb_bin + 3, 4, &max_SWB ); + mean_SWB += CLDFB_ENER_OFFSET; + max_SWB += CLDFB_ENER_OFFSET; + } + else + { + mean_SWB = mean( cldfb_bin + 3, 4 ); /* SWB: 9.2 - 15.6 kHz, 16 cldfb-bands (4 bins) */ + maximum( cldfb_bin + 3, 4, &max_SWB ); + mean_FB = mean( cldfb_bin + 7, 2 ); /* FB: 16.8 - 20.0 kHz, 8 cldfb-bands (2 bins) */ + maximum( cldfb_bin + 7, 2, &max_FB ); + + mean_SWB += CLDFB_ENER_OFFSET; + max_SWB += CLDFB_ENER_OFFSET; + mean_FB += CLDFB_ENER_OFFSET; + max_FB += CLDFB_ENER_OFFSET; + } + } + else + { + mean_NB = mean( spect_bin + bwd_start_bin[0], bwd_end_bin[0] - bwd_start_bin[0] + 1 ); /* NB: 1.5-3.0kHz (1 bin) */ + maximum( spect_bin + bwd_start_bin[0], bwd_end_bin[0] - bwd_start_bin[0] + 1, &max_NB ); + mean_WB = mean( spect_bin + bwd_start_bin[1], bwd_end_bin[1] - bwd_start_bin[1] + 1 ); /* WB: 4.5-7.5kHz (2 bins) */ + maximum( spect_bin + bwd_start_bin[1], bwd_end_bin[1] - bwd_start_bin[1] + 1, &max_WB ); + + if ( st->input_Fs == 16000 ) + { + /* for 16kHz sampled inputs, do not check SWB & FB */ + mean_SWB = 0.0f; + max_SWB = 0.0f; + mean_FB = 0.0f; + max_FB = 0.0f; + } + else if ( st->input_Fs == 32000 ) + { + mean_SWB = mean( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1 ); /* SWB: 9.0-15.0kHz (4 bins) */ + maximum( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1, &max_SWB ); + + /* for 32kHz sampled inputs, do not check FB */ + mean_FB = 0.0f; + max_FB = 0.0f; + } + else + { + mean_SWB = mean( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1 ); /* SWB: 9.0-15.0kHz (4 bins) */ + maximum( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1, &max_SWB ); + mean_FB = mean( spect_bin + bwd_start_bin[3], bwd_end_bin[3] - bwd_start_bin[3] + 1 ); /* FB: 16.5-19.5kHz (2 bins) */ + maximum( spect_bin + bwd_start_bin[3], bwd_end_bin[3] - bwd_start_bin[3] + 1, &max_FB ); + } + } + + /*---------------------------------------------------------------------* + * update LT counters and energies + *---------------------------------------------------------------------*/ + + if ( st->localVAD || st->lp_noise > 30 ) + { + st->lt_mean_NB = ALPHA_BWD * st->lt_mean_NB + ( 1 - ALPHA_BWD ) * mean_NB; + st->lt_mean_WB = ALPHA_BWD * st->lt_mean_WB + ( 1 - ALPHA_BWD ) * mean_WB; + st->lt_mean_SWB = ALPHA_BWD * st->lt_mean_SWB + ( 1 - ALPHA_BWD ) * mean_SWB; + + if ( enerBuffer != NULL ) + { + if ( 0.9f * max_WB > BWD_LT_THRESH * st->lt_mean_NB ) + { + if ( 2.5f * max_WB > max_NB ) + { + st->count_WB++; + } + } + else + { + if ( 3.5f * mean_WB < mean_NB ) + { + st->count_WB--; + } + } + + if ( 0.83f * max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) + { + if ( 2 * max_SWB > max_WB ) + { + st->count_SWB++; + } + } + else + { + if ( 3 * mean_SWB < mean_WB ) + { + st->count_SWB--; + } + } + + if ( max_FB > BWD_LT_THRESH * st->lt_mean_SWB && 0.83f * max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) + { + if ( 3 * max_FB > max_SWB ) + { + st->count_FB++; + } + } + else + { + if ( 4.1f * mean_FB < mean_SWB ) + { + st->count_FB--; + } + } + } + else + { + if ( max_WB > BWD_LT_THRESH * st->lt_mean_NB ) + { + if ( 2 * max_WB > max_NB ) + { + st->count_WB++; + } + } + else + { + if ( 2.6f * mean_WB < mean_NB ) + { + st->count_WB--; + } + } + + if ( max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) + { + if ( 2 * max_SWB > max_WB ) + { + st->count_SWB++; + } + } + else + { + if ( 3 * mean_SWB < mean_WB ) + { + st->count_SWB--; + } + } + + if ( max_FB > BWD_LT_THRESH * st->lt_mean_SWB && max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) + { + if ( 2 * max_FB > max_SWB ) + { + st->count_FB++; + } + } + else + { + if ( 3 * mean_FB < mean_SWB ) + { + st->count_FB--; + } + } + } + + st->count_WB = min( st->count_WB, BWD_COUNT_MAX ); + st->count_SWB = min( st->count_SWB, BWD_COUNT_MAX ); + st->count_FB = min( st->count_FB, BWD_COUNT_MAX ); + st->count_WB = max( st->count_WB, 0 ); + st->count_SWB = max( st->count_SWB, 0 ); + st->count_FB = max( st->count_FB, 0 ); + + /*---------------------------------------------------------------------* + * check against thresholds + * detect a band-width change + *---------------------------------------------------------------------*/ + + /* switching to a higher BW */ + if ( st->last_input_bwidth == NB ) + { + if ( st->count_WB > BWD_COUNT_WIDER_BW ) + { + st->input_bwidth = WB; + st->count_WB = BWD_COUNT_MAX; + + if ( st->count_SWB > BWD_COUNT_WIDER_BW ) + { + st->input_bwidth = SWB; + st->count_SWB = BWD_COUNT_MAX; + + if ( st->count_FB > BWD_COUNT_WIDER_BW ) + { + st->input_bwidth = FB; + st->count_FB = BWD_COUNT_MAX; + } + } + } + } + + if ( st->last_input_bwidth == WB && st->input_Fs > 16000 ) + { + if ( st->count_SWB > BWD_COUNT_WIDER_BW ) + { + st->input_bwidth = SWB; + st->count_SWB = BWD_COUNT_MAX; + + if ( st->count_FB > BWD_COUNT_WIDER_BW ) + { + st->input_bwidth = FB; + st->count_FB = BWD_COUNT_MAX; + } + } + } + + if ( st->last_input_bwidth == SWB && st->input_Fs > 32000 ) + { + if ( st->count_FB > BWD_COUNT_WIDER_BW ) + { + st->input_bwidth = FB; + st->count_FB = BWD_COUNT_MAX; + } + } + + /* switching to a lower BW */ + if ( st->last_input_bwidth == FB ) + { + if ( st->count_FB < 10 ) + { + st->input_bwidth = SWB; + st->count_FB = 0; + } + if ( st->count_SWB < 10 ) + { + st->input_bwidth = WB; + st->count_SWB = 0; + st->count_FB = 0; + } + if ( st->count_WB < 10 ) + { + st->input_bwidth = NB; + st->count_WB = 0; + st->count_SWB = 0; + st->count_FB = 0; + } + } + + if ( st->last_input_bwidth == SWB ) + { + if ( st->count_SWB < 10 ) + { + st->input_bwidth = WB; + st->count_SWB = 0; + st->count_FB = 0; + } + if ( st->count_WB < 10 ) + { + st->input_bwidth = NB; + st->count_WB = 0; + st->count_SWB = 0; + st->count_FB = 0; + } + } + + if ( st->last_input_bwidth == WB ) + { + if ( st->count_WB < 10 ) + { + st->input_bwidth = NB; + st->count_WB = 0; + st->count_SWB = 0; + st->count_FB = 0; + } + } + } + } + + /* verify that maximum encoded bandwidth (specified on the command line) is not exceeded */ + if ( st->input_bwidth > st->max_bwidth ) + { + st->input_bwidth = st->max_bwidth; + } + + + if ( st->element_mode == EVS_MONO ) + { + set_bw( -1, -1, st, st->codec_mode ); + } + + return; +} + +/*-------------------------------------------------------------------* + * set_bw() + * + * Set and limit the encoded bandwidth + *-------------------------------------------------------------------*/ + +void set_bw( + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + Encoder_State *st, /* i/o: Encoder State */ + const int16_t codec_mode /* i : codec mode */ +) +{ + /* initialization */ + st->bwidth = st->input_bwidth; + + if ( codec_mode == MODE1 ) + { + int32_t total_brate; + + st->bwidth = st->input_bwidth; + total_brate = st->total_brate; + + if ( element_mode > IVAS_SCE ) + { + if ( element_brate < MIN_BRATE_SWB_STEREO ) + { + st->bwidth = WB; + } + else + { + if ( st->idchan == 0 || element_mode == IVAS_CPE_MDCT ) + { + if ( element_brate >= MIN_BRATE_FB_STEREO ) + { + st->bwidth = min( st->bwidth, FB ); + } + else + { + st->bwidth = min( st->bwidth, SWB ); + } + st->bwidth = max( st->bwidth, WB ); + } + else + { + st->bwidth = WB; + } + } + } + else if ( element_mode == IVAS_SCE ) + { + if ( element_brate < MIN_BRATE_SWB_SCE || st->bwidth < WB ) + { + st->bwidth = WB; + } + else if ( element_brate < MIN_BRATE_FB_STEREO && st->bwidth > SWB ) + { + st->bwidth = SWB; + } + } + /* element_mode == EVS_MONO */ + else if ( total_brate <= ACELP_9k60 && st->bwidth > WB ) + { + st->bwidth = WB; + } + else if ( total_brate >= ACELP_13k20 && total_brate <= ACELP_16k40 && st->bwidth > SWB ) + { + st->bwidth = SWB; + } + else if ( total_brate >= ACELP_32k && st->bwidth < WB ) + { + st->bwidth = WB; + } + } + else if ( codec_mode == MODE2 ) + { + int16_t n, bits_frame_nominal, tmpBandwidthMin; + + bits_frame_nominal = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + if ( FrameSizeConfig[n].frame_bits == bits_frame_nominal ) + { + break; + } + } + if ( n == FRAME_SIZE_NB ) + { + assert( !"Bitrate not supported: not part of EVS" ); + } + + tmpBandwidthMin = FrameSizeConfig[n].bandwidth_min; + + if ( st->rf_mode ) + { + tmpBandwidthMin = WB; + } + + st->bwidth = max( min( st->input_bwidth, FrameSizeConfig[n].bandwidth_max ), tmpBandwidthMin ); + } + + return; +} + +/*-------------------------------------------------------------------* + * set_bw_stereo() + * + * Set encoded bandwidth for stereo (CPE) channels + *-------------------------------------------------------------------*/ + +void set_bw_stereo( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structures */ +) +{ + Encoder_State **sts = hCPE->hCoreCoder; + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + /* do not check bandwidth in LFE channel */ + if ( sts[0]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + sts[0]->bwidth = sts[0]->input_bwidth; + } + else if ( sts[1]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + sts[1]->bwidth = sts[1]->input_bwidth; + } + /* ensure that both CPE channels have the same audio band-width */ + else if ( sts[0]->input_bwidth == sts[1]->input_bwidth ) + { + sts[0]->bwidth = sts[0]->input_bwidth; + sts[1]->bwidth = sts[0]->input_bwidth; + } + else if ( sts[0]->input_bwidth != sts[1]->input_bwidth ) + { + sts[0]->bwidth = max( sts[0]->input_bwidth, sts[1]->input_bwidth ); + sts[1]->bwidth = max( sts[0]->input_bwidth, sts[1]->input_bwidth ); + } + } + + sts[0]->bwidth = max( sts[0]->bwidth, WB ); + sts[1]->bwidth = max( sts[1]->bwidth, WB ); + + return; +} + +/*-------------------------------------------------------------------* + * set_bw_mct() + * + * Set encoded bandwidth for MCT + *-------------------------------------------------------------------*/ + +/*! r: flag indicating whether the coded BW has changed */ +int16_t set_bw_mct( + CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE encoder structures */ + const int16_t nCPE /* i : number of CPEs */ +) +{ + Encoder_State *sts[MCT_MAX_CHANNELS]; + int16_t ch, cpe_id; + int16_t mct_bwidth, last_mct_bwidth, bw_changed; + + mct_bwidth = WB; /* minimum coded audio band-width */ + last_mct_bwidth = hCPE[0]->hCoreCoder[0]->last_bwidth; /* supposes that LFE is not in the first channel */ + + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch] = hCPE[cpe_id]->hCoreCoder[ch]; + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + + mct_bwidth = max( mct_bwidth, sts[ch]->input_bwidth ); + } + } + + bw_changed = 0; + if ( mct_bwidth != last_mct_bwidth ) + { + bw_changed = 1; + + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch] = hCPE[cpe_id]->hCoreCoder[ch]; + sts[ch]->bwidth = mct_bwidth; + } + } + } + + return bw_changed; +} diff --git a/lib_enc/cng_enc.c b/lib_enc/cng_enc.c new file mode 100644 index 0000000000..20787dd3f7 --- /dev/null +++ b/lib_enc/cng_enc.c @@ -0,0 +1,1169 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define MAX_DELTA_CNG 1 +#define ENER_MID_DEAD_ZONE 0.01 /* dead-zone width around mid points between quantization levels */ + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static int16_t shb_DTX( Encoder_State *st, const float *shb_speech, const float *syn_12k8_16k ); + +static void shb_CNG_encod( Encoder_State *st, const int16_t update ); + + +/*---------------------------------------------------------------------* + * CNG_enc() + * + * Confort noise generation for the coder + *---------------------------------------------------------------------*/ + +void CNG_enc( + Encoder_State *st, /* i/o: State structure */ + float Aq[], /* o : LP coefficients */ + const float *speech, /* i : pointer to current frame input speech buffer */ + float enr, /* i : residual energy from Levinson-Durbin */ + const float *lsp_mid, /* i : mid frame LSPs */ + float *lsp_new, /* i/o: current frame ISPs */ + float *lsf_new, /* i/o: current frame ISFs */ + int16_t *allow_cn_step, /* o : allow CN step */ + float *q_env, + int16_t *sid_bw ) +{ + int16_t enr_index, i; + float step, res[L_FRAME16k]; + int16_t maxl, num_bits; + int16_t j, k, ptr; + int16_t m1; + float weights; + float sp_enr; + int16_t m = 0; + float tmp[HO_HIST_SIZE * M]; + int16_t ll, s_ptr; + float att = 1.0f; + float lsf_tmp[M]; + float C[M]; + float max_val[2]; + int16_t max_idx[2]; + float ftmp; + float lsp_tmp[M]; + float dev; + float max_dev; + float dist; + int16_t max_idx1[2] = { 0, 0 }; + float fft_io[L_FRAME16k]; + float *ptR, *ptI; + float enr1 = 0; + float env[NUM_ENV_CNG]; + float min1; + int16_t min1_idx; + float d; + float res1[L_FRAME16k]; + float tmp_env[HO_HIST_SIZE * NUM_ENV_CNG]; + int16_t force_cn_step = 0; + + float st_lp_sp_enr; + + float lp_ener_thr_scale; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + TD_CNG_ENC_HANDLE hTdCngEnc = st->hTdCngEnc; + DTX_ENC_HANDLE hDtxEnc = st->hDtxEnc; + + st_lp_sp_enr = hTdCngEnc->lp_sp_enr; + + lp_ener_thr_scale = 4.0f; + if ( st->element_mode != EVS_MONO ) + { + lp_ener_thr_scale = 3.5f; + } + + /* calculate input energy */ + sp_enr = (float) log10( sum2_f( speech, st->L_frame ) / st->L_frame + 0.1f ) / (float) log10( 2.0f ); + + if ( sp_enr < 0.0f ) + { + sp_enr = 0.0f; + } + + if ( hDtxEnc->first_CNG == 0 || hTdCngEnc->old_enr_index < 0 ) + { + hTdCngEnc->lp_sp_enr = sp_enr; + } + else + { + if ( st->last_core_brate > SID_2k40 && ( st->last_core == HQ_CORE || st->hTdCngEnc->burst_ho_cnt > 0 ) && hTdCngEnc->lp_sp_enr < 6.0f && ( sp_enr - hTdCngEnc->lp_sp_enr ) > 4.0f && sp_enr > 6.0f ) + { + hTdCngEnc->lp_sp_enr = sp_enr; + force_cn_step = 1; + } + else + { + hTdCngEnc->lp_sp_enr = 0.1f * sp_enr + 0.9f * hTdCngEnc->lp_sp_enr; + } + } + + /* update the pointer to circular buffer of old LSP vectors */ + if ( ++( hTdCngEnc->cng_hist_ptr ) == DTX_HIST_SIZE ) + { + hTdCngEnc->cng_hist_ptr = 0; + } + + /* update the circular buffer of old LSP vectors with the new LSP vector */ + mvr2r( lsp_new, &( hTdCngEnc->cng_lsp_hist[( hTdCngEnc->cng_hist_ptr ) * M] ), M ); + + /*-----------------------------------------------------------------* + * Find CNG spectral envelope + * Find LSP median + *-----------------------------------------------------------------*/ + + if ( ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) && hDtxEnc->cng_cnt >= ( hDtxEnc->cng_hist_size - 1 ) ) + { + set_f( max_val, 0.0f, 2 ); + set_s( max_idx, 0, 2 ); + + for ( i = 0; i < hDtxEnc->cng_hist_size; i++ ) + { + if ( st->L_frame == L_FRAME ) + { + lsp2lsf( &hTdCngEnc->cng_lsp_hist[i * M], lsf_tmp, M, INT_FS_12k8 ); + ftmp = 6400.0f / ( M + 1 ); + C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); + } + else + { + lsp2lsf( &hTdCngEnc->cng_lsp_hist[i * M], lsf_tmp, M, INT_FS_16k ); + ftmp = 8000.0f / ( M + 1 ); + C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); + } + + C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); + + for ( j = 0; j < M - 1; j++ ) + { + C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); + } + + C[i] *= 0.0588235f; /* 1/M+1 */ + + if ( C[i] > max_val[0] ) + { + max_val[1] = max_val[0]; + max_idx[1] = max_idx[0]; + max_val[0] = C[i]; + max_idx[0] = i; + } + else if ( C[i] > max_val[1] ) + { + max_val[1] = C[i]; + max_idx[1] = i; + } + } + + for ( i = 0; i < M; i++ ) + { + lsp_new[i] = 0.0f; + for ( j = 0; j < hDtxEnc->cng_hist_size; j++ ) + { + lsp_new[i] += hTdCngEnc->cng_lsp_hist[j * M + i]; + } + + lsp_new[i] -= ( hTdCngEnc->cng_lsp_hist[max_idx[0] * M + i] + hTdCngEnc->cng_lsp_hist[max_idx[1] * M + i] ); + lsp_new[i] /= (float) ( hDtxEnc->cng_hist_size - 2 ); + } + max_idx1[0] = max_idx[0]; + max_idx1[1] = max_idx[1]; + } + + /*-----------------------------------------------------------------* + * Quantize CNG spectral envelope (only in SID frame) + * Quantize the LSF vector + *-----------------------------------------------------------------*/ + + + *allow_cn_step = ( ( hDtxEnc->cng_cnt == 0 ) && + ( hTdCngEnc->lp_sp_enr > 6.0f ) && + ( ( st_lp_sp_enr + 4.0f ) < sp_enr ) && + ( hDtxEnc->first_CNG != 0 ) && + ( hTdCngEnc->old_enr_index >= 0 ) && + ( st->last_core_brate > SID_2k40 ) ) || + force_cn_step; + + /* Initialize the CNG spectral envelope in case of the very first CNG frame */ + if ( hDtxEnc->first_CNG == 0 ) + { + mvr2r( st->lsp_old, hDtxEnc->lspCNG, M ); + + /* Average the CNG spectral envelope in case of the very first CNG frame */ + if ( st->element_mode != EVS_MONO ) + { + for ( i = 0; i < M; i++ ) + { + lsp_new[i] = 0.5f * ( lsp_mid[i] + lsp_new[i] ); + } + } + } + + if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) + { + /* LSF quantization */ + if ( st->Opt_AMR_WB ) + { + isf_enc_amr_wb( st, lsf_new, lsp_new, 0 ); + } + else + { +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + lsf_enc( st, lsf_new, lsp_new, 0, 0, 0, 0, NULL ); +#else + lsf_enc( st, lsf_new, lsp_new, 0, 0, 0, 0 ); +#endif + } + + /* Reset CNG history if CNG frame length is changed */ + if ( st->bwidth == WB && hDtxEnc->first_CNG && st->L_frame != hDtxEnc->last_CNG_L_frame ) + { + hTdCngEnc->ho_hist_size = 0; + } + } + else + { + /* Use old LSP vector */ + mvr2r( st->lsp_old, lsp_new, M ); + mvr2r( st->lsf_old, lsf_new, M ); + } + + + /*---------------------------------------------------------------------* + * CNG spectral envelope update + * Find A(z) coefficients + *---------------------------------------------------------------------*/ + + if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 || st->last_core_brate == SID_2k40 ) + { + /* Reset hangover counter if not first SID period */ + if ( st->core_brate > FRAME_NO_DATA ) + { + hTdCngEnc->num_ho = 0; + } + /* Update LSPs if last SID energy not outlier or insufficient number of hangover frames */ + if ( hTdCngEnc->num_ho < 3 || hTdCngEnc->Enew < 1.5f * hTdCngEnc->lp_ener ) + { + for ( i = 0; i < M; i++ ) + { + /* AR low-pass filter */ + hDtxEnc->lspCNG[i] = CNG_ISF_FACT * hDtxEnc->lspCNG[i] + ( 1 - CNG_ISF_FACT ) * lsp_new[i]; + } + } + } + else + { + /* Update CNG_mode if allowed */ + if ( st->element_mode == EVS_MONO && ( st->Opt_AMR_WB || st->bwidth == WB ) && ( !hDtxEnc->first_CNG || hTdCngEnc->act_cnt2 >= MIN_ACT_CNG_UPD ) ) + { + if ( hDtxEnc->last_active_brate > ACELP_16k40 ) + { + hDtxEnc->CNG_mode = -1; + } + else + { + hDtxEnc->CNG_mode = get_cng_mode( hDtxEnc->last_active_brate ); + } + } + + /* If first SID after active burst update LSF history from circ buffer */ + hTdCngEnc->burst_ho_cnt = min( hTdCngEnc->burst_ho_cnt, hTdCngEnc->ho_circ_size ); + hTdCngEnc->act_cnt = 0; + s_ptr = hTdCngEnc->ho_circ_ptr - hTdCngEnc->burst_ho_cnt + 1; + if ( s_ptr < 0 ) + { + s_ptr += hTdCngEnc->ho_circ_size; + } + + for ( ll = hTdCngEnc->burst_ho_cnt; ll > 0; ll-- ) + { + if ( ++( hTdCngEnc->ho_hist_ptr ) == HO_HIST_SIZE ) + { + hTdCngEnc->ho_hist_ptr = 0; + } + /* Conversion between 12.8k and 16k LSPs */ + if ( st->L_frame == L_FRAME && hTdCngEnc->ho_16k_lsp[s_ptr] == 1 ) + { + /* Conversion from 16k LPSs to 12k8 */ + lsp_convert_poly( &( hTdCngEnc->ho_lsp_circ[s_ptr * M] ), st->L_frame, 0 ); + } + else if ( st->L_frame == L_FRAME16k && hTdCngEnc->ho_16k_lsp[s_ptr] == 0 ) + { + /* 16k LSPs already converted and stored, just copy to the other buffer */ + mvr2r( &( hTdCngEnc->ho_lsp_circ2[s_ptr * M] ), &( hTdCngEnc->ho_lsp_circ[s_ptr * M] ), M ); + } + + /* update circular buffers */ + mvr2r( &( hTdCngEnc->ho_lsp_circ[s_ptr * M] ), &( hTdCngEnc->ho_lsp_hist[hTdCngEnc->ho_hist_ptr * M] ), M ); + mvr2r( &( hTdCngEnc->ho_ener_circ[s_ptr] ), &( hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] ), 1 ); + hTdCngEnc->ho_sid_bw = ( hTdCngEnc->ho_sid_bw & 0x3fffffffL ) << 1; + mvr2r( &( hTdCngEnc->ho_env_circ[s_ptr * NUM_ENV_CNG] ), &( hTdCngEnc->ho_env_hist[hTdCngEnc->ho_hist_ptr * NUM_ENV_CNG] ), NUM_ENV_CNG ); + + hTdCngEnc->ho_hist_size++; + if ( hTdCngEnc->ho_hist_size > HO_HIST_SIZE ) + { + hTdCngEnc->ho_hist_size = HO_HIST_SIZE; + } + + s_ptr++; + + if ( s_ptr == hTdCngEnc->ho_circ_size ) + { + s_ptr = 0; + } + } + if ( st->hTdCngEnc->burst_ho_cnt > 0 ) + { + *allow_cn_step |= ( hDtxEnc->first_CNG || st->element_mode == EVS_MONO ) && ( hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] > lp_ener_thr_scale * hTdCngEnc->lp_ener ); + } + + if ( !*allow_cn_step && hTdCngEnc->ho_hist_size > 0 ) + { + ptr = hTdCngEnc->ho_hist_ptr; + mvr2r( &( hTdCngEnc->ho_lsp_hist[ptr * M] ), tmp, M ); + m1 = 0; + if ( ( hTdCngEnc->ho_sid_bw & 0x1L ) == 0 ) + { + mvr2r( &hTdCngEnc->ho_env_hist[ptr * NUM_ENV_CNG], tmp_env, NUM_ENV_CNG ); + m1 = 1; + } + enr = W_DTX_HO[0] * hTdCngEnc->ho_ener_hist[ptr]; + weights = W_DTX_HO[0]; + m = 1; + for ( k = 1; k < hTdCngEnc->ho_hist_size; k++ ) + { + ptr--; + if ( ptr < 0 ) + { + ptr = HO_HIST_SIZE - 1; + } + + if ( hTdCngEnc->ho_ener_hist[ptr] < hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] * BUF_H_NRG && + hTdCngEnc->ho_ener_hist[ptr] > hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] * BUF_L_NRG ) + { + enr += W_DTX_HO[k] * hTdCngEnc->ho_ener_hist[ptr]; + weights += W_DTX_HO[k]; + mvr2r( &hTdCngEnc->ho_lsp_hist[ptr * M], &tmp[m * M], M ); + if ( ( hTdCngEnc->ho_sid_bw & ( 0x1L << k ) ) == 0 ) + { + mvr2r( &hTdCngEnc->ho_env_hist[ptr * NUM_ENV_CNG], &tmp_env[m1 * NUM_ENV_CNG], NUM_ENV_CNG ); + m1++; + } + m++; + } + } + + enr /= weights; + hTdCngEnc->lp_ener = enr; + + set_f( max_val, 0.0f, 2 ); + set_s( max_idx, 0, 2 ); + + for ( i = 0; i < m; i++ ) + { + if ( st->L_frame == L_FRAME ) + { + lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_12k8 ); + ftmp = 6400.0f / ( M + 1 ); + C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); + } + else + { + lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_16k ); + ftmp = 8000.0f / ( M + 1 ); + C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); + } + + C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); + + for ( j = 0; j < M - 1; j++ ) + { + C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); + } + + C[i] *= 0.0588235f; /* 1/M+1 */ + + if ( C[i] > max_val[0] ) + { + max_val[1] = max_val[0]; + max_idx[1] = max_idx[0]; + max_val[0] = C[i]; + max_idx[0] = i; + } + else if ( C[i] > max_val[1] ) + { + max_val[1] = C[i]; + max_idx[1] = i; + } + } + + if ( m == 1 ) + { + mvr2r( tmp, lsp_tmp, M ); + } + else if ( m < 4 ) + { + for ( i = 0; i < M; i++ ) + { + lsp_tmp[i] = 0.0f; + for ( j = 0; j < m; j++ ) + { + lsp_tmp[i] += tmp[j * M + i]; + } + + lsp_tmp[i] -= tmp[max_idx[0] * M + i]; + lsp_tmp[i] /= (float) ( m - 1 ); + } + } + else + { + for ( i = 0; i < M; i++ ) + { + lsp_tmp[i] = 0.0f; + for ( j = 0; j < m; j++ ) + { + lsp_tmp[i] += tmp[j * M + i]; + } + + lsp_tmp[i] -= ( tmp[max_idx[0] * M + i] + tmp[max_idx[1] * M + i] ); + lsp_tmp[i] /= (float) ( m - 2 ); + } + } + + dist = 0.0f; + max_dev = 0.0f; + for ( i = 0; i < M; i++ ) + { + dev = (float) fabs( lsp_tmp[i] - lsp_new[i] ); + dist += dev; + if ( dev > max_dev ) + { + max_dev = dev; + } + } + + if ( dist > 0.4f || max_dev > 0.1f ) + { + for ( i = 0; i < M; i++ ) + { + hDtxEnc->lspCNG[i] = lsp_tmp[i]; + } + } + else + { + for ( i = 0; i < M; i++ ) + { + /* AR low-pass filter */ + hDtxEnc->lspCNG[i] = 0.8f * lsp_tmp[i] + ( 1 - 0.8f ) * lsp_new[i]; + } + } + if ( m1 > 0 ) + { + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + env[i] = 0; + for ( j = 0; j < m1; j++ ) + { + env[i] += tmp_env[j * NUM_ENV_CNG + i]; + } + + env[i] /= (float) m1; + env[i] = env[i] - 2 * hTdCngEnc->lp_ener; + } + mvr2r( env, hTdCngEnc->lp_env, NUM_ENV_CNG ); + } + } + else + { + mvr2r( lsp_new, hDtxEnc->lspCNG, M ); /* use newly analyzed parameters */ + } + } + + if ( st->Opt_AMR_WB ) + { + isp2a( hDtxEnc->lspCNG, Aq, M ); + } + else + { + lsp2a_stab( hDtxEnc->lspCNG, Aq, M ); + } + + for ( i = 1; i < st->L_frame / L_SUBFR; i++ ) + { + mvr2r( Aq, &Aq[i * ( M + 1 )], M + 1 ); + } + + /*-----------------------------------------------------------------* + * Find residual signal + * Calculate residual signal energy per sample + *-----------------------------------------------------------------*/ + + /* calculate the residual signal */ + residu( Aq, M, speech, res, st->L_frame ); + + mvr2r( res, res1, st->L_frame ); + + if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) + { + att = powf( 10.0f, hTdCngEnc->CNG_att / 20.0f ); + v_multc( res1, att, res1, st->L_frame ); + } + else if ( st->bwidth != NB ) + { + if ( st->bwidth == WB && hDtxEnc->CNG_mode >= 0 ) + { + ftmp = HO_ATT[hDtxEnc->CNG_mode]; + } + else + { + ftmp = 0.6f; + } + + att = ftmp / 6.0f; + att = 1.0f / ( 1 + att * 8 ); + + if ( att < ftmp ) + { + att = ftmp; + } + + v_multc( res1, att, res1, st->L_frame ); + } + + /* calculate the spectrum of residual signal */ + mvr2r( res1, fft_io, st->L_frame ); + + if ( st->L_frame == L_FRAME16k ) + { + modify_Fs( fft_io, L_FRAME16k, 16000, fft_io, 12800, hTdCngEnc->exc_mem2, 0 ); + } + + fft_rel( fft_io, L_FFT, LOG2_L_FFT ); + ptR = &fft_io[1]; + ptI = &fft_io[L_FFT - 1]; + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + env[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; + ptR++; + ptI--; + } + + mvr2r( env, &( hTdCngEnc->cng_res_env[( hTdCngEnc->cng_hist_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); + /* calculate the residual signal energy */ + enr = dotp( res, res, st->L_frame ) / st->L_frame; + + /* convert log2 of residual signal energy */ + enr = (float) log10( enr + 0.1f ) / (float) log10( 2.0f ); + + /* update the circular buffer of old energies */ + hTdCngEnc->cng_ener_hist[hTdCngEnc->cng_hist_ptr] = enr; + + /*-----------------------------------------------------------------* + * Quantize residual signal energy (only in SID frame) + *-----------------------------------------------------------------*/ + + if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) + { + if ( hDtxEnc->cng_cnt >= hDtxEnc->cng_hist_size - 1 ) + { + /* average the envelope except outliers */ + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + for ( j = 0; j < hDtxEnc->cng_hist_size; j++ ) + { + env[i] += hTdCngEnc->cng_res_env[j * NUM_ENV_CNG + i]; + } + + env[i] -= ( hTdCngEnc->cng_res_env[max_idx1[0] * NUM_ENV_CNG + i] + hTdCngEnc->cng_res_env[max_idx1[1] * NUM_ENV_CNG + i] ); + env[i] /= (float) ( hDtxEnc->cng_hist_size - 2 ); + } + /* compute average excitation energy */ + enr = 0; + weights = 0; + ptr = hTdCngEnc->cng_hist_ptr; + + for ( k = 0; k < hDtxEnc->cng_hist_size; k++ ) + { + enr += W_HIST[k] * hTdCngEnc->cng_ener_hist[ptr--]; + if ( ptr < 0 ) + { + ptr = DTX_HIST_SIZE - 1; + } + + weights += W_HIST[k]; + } + + /* normalize the average value */ + enr /= weights; + } + + if ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT ) + { + enr += hTdCngEnc->CNG_att * FAC_LOG2 / 10.0f; + } + else if ( st->bwidth != NB ) + { + if ( st->bwidth == WB ) + { + if ( hDtxEnc->CNG_mode >= 0 ) + { + /* Bitrate adapted attenuation */ + att = ENR_ATT[hDtxEnc->CNG_mode]; + } + else + { + /* Use least attenuation for higher bitrates */ + att = ENR_ATT[4]; + } + } + else + { + att = 1.5f; + } + enr -= att; + } + + /* intialize the energy quantization parameters */ + if ( !st->Opt_AMR_WB ) + { + step = STEP_SID; + maxl = 127; + num_bits = 7; + } + else + { + step = STEP_AMR_WB_SID; + maxl = 63; + num_bits = 6; + } + + /* calculate the energy quantization index */ + enr_index = (int16_t) ( ( enr + 2.0f ) * step ); + + /* limit the energy quantization index */ + if ( enr_index > maxl ) + { + enr_index = maxl; + } + + if ( enr_index < 0 ) + { + enr_index = 0; + } + + /* allow only slow energy increase */ + if ( hDtxEnc->first_CNG && enr_index > hTdCngEnc->old_enr_index + MAX_DELTA_CNG ) + { + if ( *allow_cn_step == 1 ) + { + enr_index = hTdCngEnc->old_enr_index + (int16_t) ( 0.85f * ( enr_index - hTdCngEnc->old_enr_index ) ); + } + else + { + enr_index = hTdCngEnc->old_enr_index + MAX_DELTA_CNG; + } + } + hTdCngEnc->old_enr_index = enr_index; + + push_indice( hBstr, IND_ENERGY, enr_index, num_bits ); + if ( enr_index == 0 ) + { + enr_index = -5; + } + /* find the quatized energy */ + hTdCngEnc->Enew = (float) enr_index / step - 2.0f; + hTdCngEnc->Enew = (float) ( pow( 2.0f, hTdCngEnc->Enew ) ); + if ( st->core_brate == SID_2k40 ) + { + enr1 = (float) log10( hTdCngEnc->Enew * st->L_frame + 0.1f ) / (float) log10( 2.0f ); + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + env[i] -= 2 * hTdCngEnc->Enew; + + if ( env[i] < 0.0f ) + { + env[i] = 0.1f; + } + + env[i] = (float) log10( env[i] + 0.1f ) / (float) log10( 2.0f ); + env[i] -= att; + + if ( env[i] < 0 ) + { + env[i] = 0; + } + + env[i] = enr1 - env[i]; + } + + /* codebook search */ + min1 = 9999.0f; + min1_idx = 0; + + for ( i = 0; i < 64; i++ ) + { + d = 0.0f; + for ( j = 0; j < NUM_ENV_CNG; j++ ) + { + d += ( env[j] - CNG_details_codebook[i][j] ) * ( env[j] - CNG_details_codebook[i][j] ); + } + + if ( d < min1 ) + { + min1 = d; + min1_idx = i; + } + } + push_indice( hBstr, IND_CNG_ENV1, min1_idx, 6 ); + /* get quantized res_env_details */ + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + q_env[i] = CNG_details_codebook[min1_idx][i]; + } + } + /* Update hangover memory during CNG */ + if ( !*allow_cn_step && ( hTdCngEnc->Enew < 1.5f * hTdCngEnc->lp_ener ) ) + { + /* update the pointer to circular buffer of old LSP vectors */ + if ( ++( hTdCngEnc->ho_hist_ptr ) == HO_HIST_SIZE ) + { + hTdCngEnc->ho_hist_ptr = 0; + } + + /* update the circular buffer of old LSP vectors with the new LSP vector */ + mvr2r( lsp_new, &( hTdCngEnc->ho_lsp_hist[( hTdCngEnc->ho_hist_ptr ) * M] ), M ); + + /* update the hangover energy buffer */ + hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] = hTdCngEnc->Enew; + if ( st->core_brate == SID_2k40 ) + { + for ( i = 0; i < NUM_ENV_CNG; i++ ) + { + /* get quantized envelope */ + env[i] = (float) ( pow( 2.0f, ( enr1 - q_env[i] ) ) + 2 * hTdCngEnc->Enew ); + } + mvr2r( env, &( hTdCngEnc->ho_env_hist[( hTdCngEnc->ho_hist_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); + } + if ( ++( hTdCngEnc->ho_hist_size ) > HO_HIST_SIZE ) + { + hTdCngEnc->ho_hist_size = HO_HIST_SIZE; + } + } + } + + /* dithering bit for AMR-WB IO mode is always set to 0 */ + if ( st->core_brate == SID_1k75 ) + { + push_indice( hBstr, IND_DITHERING, 0, 1 ); + } + + if ( st->core_brate == SID_2k40 ) + { + push_indice( hBstr, IND_ACELP_16KHZ, st->L_frame == L_FRAME16k ? 1 : 0, 1 ); + + /* transmit ho_cnt for use at decoder side as CNG synthesis assistance */ + if ( hTdCngEnc->burst_ho_cnt > ( HO_HIST_SIZE - 1 ) ) + { + push_indice( hBstr, IND_CNG_HO, ( HO_HIST_SIZE - 1 ), 3 ); /* send max allowed value, limited to 7 */ + } + else + { + push_indice( hBstr, IND_CNG_HO, hTdCngEnc->burst_ho_cnt, 3 ); /* send actual value */ + } + hTdCngEnc->num_ho = m; + push_indice( hBstr, IND_SID_TYPE, 0, 1 ); + + if ( st->input_Fs < 32000 && st->element_mode != IVAS_CPE_DFT ) + { + push_indice( hBstr, IND_SID_BW, 0, 1 ); + *sid_bw = 0; + } + } + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + /* update the SID frames counter */ + if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) + { + hDtxEnc->cng_cnt = 0; + /* update frame length memory */ + hDtxEnc->last_CNG_L_frame = st->L_frame; + hTdCngEnc->cng_hist_ptr = -1; + } + else + { + hDtxEnc->cng_cnt++; + } + + return; +} + + +/*---------------------------------------------------------------------* + * swb_CNG_enc() + * + * SWB DTX/CNG encoding + *---------------------------------------------------------------------*/ + +void swb_CNG_enc( + Encoder_State *st, /* i/o: State structure */ + const float *shb_speech, /* i : SHB target signal (6-14kHz) at 16kHz */ + const float *syn_12k8_16k /* i : ACELP core synthesis at 12.8kHz or 16kHz */ +) +{ + int16_t shb_SID_updt; + + if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + if ( st->cng_type == LP_CNG ) + { + if ( st->input_Fs >= L_FRAME32k * FRAMES_PER_SEC ) + { + /* decide if SHB SID encoding or not */ + shb_SID_updt = shb_DTX( st, shb_speech, syn_12k8_16k ); + + /* SHB CNG encoding */ + shb_CNG_encod( st, shb_SID_updt ); + } + else if ( st->element_mode == IVAS_CPE_DFT && st->core_brate == SID_2k40 ) + { + /* LF-boost not used in DFT-stereo, instead the bandwidth is transmitted */ + st->hBstr->nb_bits_tot = st->hBstr->nb_bits_tot - st->hBstr->ind_list[IND_CNG_ENV1].nb_bits; + st->hBstr->ind_list[IND_CNG_ENV1].nb_bits = -1; + push_indice( st->hBstr, IND_BWIDTH, st->bwidth, 2 ); + push_indice( st->hBstr, IND_UNUSED, 0, 4 ); + push_indice( st->hBstr, IND_SID_BW, 1, 1 ); + } + } + st->hTdCngEnc->last_vad = 0; + } + else + { + st->hTdCngEnc->last_vad = 1; + } + + return; +} + +/*---------------------------------------------------------------------* + * shb_CNG_encod() + * + * SID parameters encoding for SHB signal + *---------------------------------------------------------------------*/ + +static void shb_CNG_encod( + Encoder_State *st, /* i/o: State structure */ + const int16_t update /* i : SID update flag */ +) +{ + int16_t idx_ener = 0; + BSTR_ENC_HANDLE hBstr = st->hBstr; + float ener_mid_dec_thr; + + if ( update == 1 ) + { + /* SHB energy quantization */ + if ( st->element_mode == EVS_MONO ) + { + idx_ener = (int16_t) ( 0.9f * ( 0.1f * st->hTdCngEnc->mov_shb_cng_ener / (float) log10( 2.0f ) + 6.0f ) + 0.5f ); + } + else + { + idx_ener = (int16_t) ( 0.7f * ( 0.1f * st->hTdCngEnc->mov_shb_cng_ener / (float) log10( 2.0f ) + 6.0f ) + 0.5f ); + } + + if ( st->bwidth < SWB ) + { + idx_ener = 0; + } + + if ( idx_ener > 15 ) + { + idx_ener = 15; + } + else if ( idx_ener < 0 ) + { + idx_ener = 0; + } + + /* prevent toggling of idx_ener by adding small dead-zone interval around decision thresholds */ + if ( st->element_mode != EVS_MONO ) + { + if ( abs( idx_ener - st->hTdCngEnc->last_idx_ener ) == 1 ) + { + ener_mid_dec_thr = 0.5f * ( ( st->hTdCngEnc->last_idx_ener / 0.7f - 6.0f ) / 0.1f ) * (float) log10( 2.0f ); + ener_mid_dec_thr += 0.5f * ( ( idx_ener / 0.7f - 6.0f ) / 0.1f ) * (float) log10( 2.0f ); + + if ( fabs( st->hTdCngEnc->mov_shb_cng_ener - ener_mid_dec_thr ) / ener_mid_dec_thr < ENER_MID_DEAD_ZONE ) + { + idx_ener = st->hTdCngEnc->last_idx_ener; + } + } + } + + st->hTdCngEnc->last_idx_ener = idx_ener; + + push_indice( hBstr, IND_SHB_CNG_GAIN, idx_ener, 4 ); + push_indice( hBstr, IND_SID_BW, 1, 1 ); + hBstr->nb_bits_tot = hBstr->nb_bits_tot - hBstr->ind_list[IND_CNG_ENV1].nb_bits; + hBstr->ind_list[IND_CNG_ENV1].nb_bits = -1; + if ( st->element_mode == IVAS_CPE_DFT ) + { + push_indice( st->hBstr, IND_BWIDTH, st->bwidth, 2 ); + } + else + { + push_indice( hBstr, IND_UNUSED, 0, 2 ); + } + st->hTdCngEnc->ho_sid_bw = ( st->hTdCngEnc->ho_sid_bw & 0x3fffffffL ) << 1; + st->hTdCngEnc->ho_sid_bw |= 0x1L; + } + else if ( st->core_brate == SID_2k40 ) + { + st->hTdCngEnc->ho_sid_bw = ( st->hTdCngEnc->ho_sid_bw & 0x3fffffffL ) << 1; + push_indice( hBstr, IND_SID_BW, 0, 1 ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * shb_DTX() + * + * Decide if encoding SHB SID or not + *---------------------------------------------------------------------*/ + +static int16_t shb_DTX( + Encoder_State *st, /* i/o: State structure */ + const float *shb_speech, /* i : SHB target signal (6-14kHz) at 16kHz */ + const float *syn_12k8_16k /* i : ACELP core synthesis at 12.8kHz or 16kHz */ +) +{ + int16_t i; + int16_t update; + float shb_old_speech[( L_LOOK_12k8 + L_SUBFR + L_FRAME ) * 5 / 4]; + float *shb_new_speech; + float wb_ener; + float shb_ener; + float log_wb_ener; + float log_shb_ener; + float ftmp; + int16_t allow_cn_step = 0; + float att; + + TD_CNG_ENC_HANDLE hTdCngEnc = st->hTdCngEnc; + + shb_new_speech = shb_old_speech + ( L_LOOK_12k8 + L_SUBFR ) * 5 / 4; + mvr2r( st->hBWE_TD->old_speech_shb, shb_old_speech, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 4 ); + mvr2r( shb_speech, shb_new_speech, L_FRAME16k ); + mvr2r( shb_old_speech + L_FRAME16k, st->hBWE_TD->old_speech_shb, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 4 ); + + shb_ener = FLT_MIN * L_FRAME16k; + for ( i = 0; i < L_FRAME16k; i++ ) + { + shb_ener += shb_old_speech[i] * shb_old_speech[i]; + } + shb_ener /= L_FRAME16k; + + wb_ener = sum2_f( syn_12k8_16k, st->L_frame ) + 0.001f; + wb_ener = wb_ener / st->L_frame; + + log_wb_ener = 10 * (float) log10( wb_ener ); + if ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT ) + { + att = 0.0f; + + apply_scale( &att, st->hFdCngEnc->hFdCngCom->CngBandwidth, st->hFdCngEnc->hFdCngCom->CngBitrate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); + } + else + { + att = -6.5f; + } + log_shb_ener = 10 * (float) log10( shb_ener ) + att; + + if ( st->hDtxEnc->first_CNG == 0 ) + { + hTdCngEnc->mov_wb_cng_ener = log_wb_ener; + hTdCngEnc->mov_shb_cng_ener = log_shb_ener; + hTdCngEnc->last_wb_cng_ener = log_wb_ener; + hTdCngEnc->last_shb_cng_ener = log_shb_ener; + } + if ( fabs( log_wb_ener - hTdCngEnc->mov_wb_cng_ener ) > 12.0f ) + { + allow_cn_step = 1; + } + + /* Also allow step if shb energy has dropped 12 dB */ + if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && ( ( hTdCngEnc->mov_shb_cng_ener - log_shb_ener ) > 12.0f ) ) + { + allow_cn_step = 1; + } + + if ( allow_cn_step == 1 ) + { + hTdCngEnc->mov_wb_cng_ener = log_wb_ener; + hTdCngEnc->mov_shb_cng_ener = log_shb_ener; + } + else + { + ftmp = log_wb_ener - hTdCngEnc->mov_wb_cng_ener; + + hTdCngEnc->mov_wb_cng_ener += 0.9f * ftmp; + + ftmp = log_shb_ener - hTdCngEnc->mov_shb_cng_ener; + + hTdCngEnc->mov_shb_cng_ener += 0.25f * ftmp; + } + hTdCngEnc->shb_NO_DATA_cnt++; + + update = 0; + if ( st->core_brate == SID_2k40 ) + { + if ( st->hDtxEnc->first_CNG == 0 ) + { + update = 1; + } + else if ( hTdCngEnc->shb_cng_ini_cnt > 0 ) + { + hTdCngEnc->shb_cng_ini_cnt--; + update = 1; + } + else if ( hTdCngEnc->last_vad == 1 ) + { + update = 1; + } + else if ( hTdCngEnc->shb_NO_DATA_cnt >= 100 ) + { + update = 1; + } + else if ( fabs( ( hTdCngEnc->mov_wb_cng_ener - hTdCngEnc->mov_shb_cng_ener ) - ( hTdCngEnc->last_wb_cng_ener - hTdCngEnc->last_shb_cng_ener ) ) > 3.0f ) + { + update = 1; + } + else if ( ( st->bwidth >= SWB && hTdCngEnc->last_SID_bwidth < SWB ) || ( st->bwidth < SWB && hTdCngEnc->last_SID_bwidth >= SWB ) ) + { + update = 1; + } + + hTdCngEnc->last_SID_bwidth = st->bwidth; + } + + /* LF-boost not yet implemented in decoder which means that the specific wb_sid information is not used */ + if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && st->core_brate == SID_2k40 ) + { + update = 1; + } + + if ( update == 1 ) + { + hTdCngEnc->last_wb_cng_ener = hTdCngEnc->mov_wb_cng_ener; + hTdCngEnc->last_shb_cng_ener = hTdCngEnc->mov_shb_cng_ener; + hTdCngEnc->shb_NO_DATA_cnt = 0; + } + + return ( update ); +} + + +/*---------------------------------------------------------------------* + * calculate_hangover_attenuation_gain() + * + * + *---------------------------------------------------------------------*/ + +void calculate_hangover_attenuation_gain( + Encoder_State *st, /* i : encoder state structure */ + float *att, /* o : attenuation factor */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + float lim; + + *att = 1.0f; + if ( st->hTdCngEnc != NULL && vad_hover_flag && st->hTdCngEnc->burst_ho_cnt > 0 && ( st->bwidth != NB || st->element_mode > EVS_MONO ) ) + { + if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) + { + *att = powf( 10.0f, ( st->hTdCngEnc->CNG_att / 160.0f ) * st->hTdCngEnc->burst_ho_cnt ); + } + else + { + if ( st->bwidth == WB && st->hDtxEnc->CNG_mode >= 0 ) + { + lim = HO_ATT[st->hDtxEnc->CNG_mode]; + } + else + { + lim = 0.6f; + } + + *att = lim / 6.0f; + *att = 1.0f / ( 1 + *att * st->hTdCngEnc->burst_ho_cnt ); + + if ( *att < lim ) + { + *att = lim; + } + } + } + + return; +} diff --git a/lib_enc/cod2t32.c b/lib_enc/cod2t32.c new file mode 100644 index 0000000000..1efef884d4 --- /dev/null +++ b/lib_enc/cod2t32.c @@ -0,0 +1,348 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define STEP 2 +#define MSIZE 1024 + + +/*---------------------------------------------------------------------------------- + * Function acelp_2t32() + * + * 12 bits algebraic codebook. + * 2 tracks x 32 positions per track = 64 samples. + * + * 12 bits --> 2 pulses in a frame of 64 samples. + * + * All pulses can have two (2) possible amplitudes: +1 or -1. + * Each pulse can have 32 possible positions. + *----------------------------------------------------------------------------------*/ + +void acelp_2t32( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float dn[], /* i : corr. between target and h[]. */ + const float h[], /* i : impulse response of weighted synthesis filter */ + float code[], /* o : algebraic (fixed) codebook excitation */ + float y[] /* o : filtered fixed codebook excitation */ +) +{ + int16_t i, j, k, i0, i1, ix, iy, pos, pos2, index; + float psk, ps1, ps2, alpk, alp1, alp2, sq; + float pol[L_SUBFR], dn_p[L_SUBFR], r0; + int16_t ii, jj; + float s, cor, sign0, sign1; + float *p0, *p1, *p2; + const float *ptr_h1, *ptr_h2, *ptr_hf; + float rrixix[NB_TRACK_FCB_2T][NB_POS_FCB_2T]; + float rrixiy[MSIZE]; + + + /*----------------------------------------------------------------* + * Compute rrixix[][] needed for the codebook search. + *----------------------------------------------------------------*/ + + /* Init pointers to last position of rrixix[] */ + p0 = &rrixix[0][NB_POS_FCB_2T - 1]; + p1 = &rrixix[1][NB_POS_FCB_2T - 1]; + + ptr_h1 = h; + cor = 0.0f; + for ( i = 0; i < NB_POS_FCB_2T; i++ ) + { + cor += *ptr_h1 * *ptr_h1; + ptr_h1++; + *p1-- = cor; + cor += *ptr_h1 * *ptr_h1; + ptr_h1++; + *p0-- = cor; + } + + p0 = rrixix[0]; + p1 = rrixix[1]; + + for ( i = 0; i < NB_POS_FCB_2T; i++ ) + { + *p0 = 0.5f * ( *p0 ); + p0++; + *p1 = 0.5f * ( *p1 ); + p1++; + } + + /*------------------------------------------------------------* + * Compute rrixiy[][] needed for the codebook search. + *------------------------------------------------------------*/ + + pos = MSIZE - 1; + pos2 = MSIZE - 2; + ptr_hf = h + 1; + + for ( k = 0; k < NB_POS_FCB_2T; k++ ) + { + /* Init pointers to last position of diagonals */ + p1 = &rrixiy[pos]; + p0 = &rrixiy[pos2]; + + cor = 0.0f; + ptr_h1 = h; + ptr_h2 = ptr_hf; + + for ( i = k + 1; i < NB_POS_FCB_2T; i++ ) + { + cor += *ptr_h1++ * *ptr_h2++; + *p1 = cor; + + cor += *ptr_h1++ * *ptr_h2++; + *p0 = cor; + + p1 -= ( NB_POS_FCB_2T + 1 ); + p0 -= ( NB_POS_FCB_2T + 1 ); + } + + cor += *ptr_h1++ * *ptr_h2; + *p1 = cor; + + pos -= NB_POS_FCB_2T; + pos2--; + ptr_hf += STEP; + } + + /*----------------------------------------------------------------* + * computing reference vector and pre-selection of polarities + *----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + /* FIR high-pass filtering */ + if ( i == 0 ) + { + r0 = dn[i] - dn[i + 1] * 0.35f; + } + else if ( i == L_SUBFR - 1 ) + { + r0 = -dn[i - 1] * 0.35f + dn[i]; + } + else + { + r0 = -dn[i - 1] * 0.35f + dn[i] - dn[i + 1] * 0.35f; + } + + /* pre-selection of polarities */ + if ( r0 >= 0.0f ) + { + pol[i] = 1.0f; + } + else + { + pol[i] = -1.0f; + } + + /* including polarities into dn[] */ + dn_p[i] = dn[i] * pol[i]; + } + + /*----------------------------------------------------------------* + * compute denominator ( multiplied by polarity ) + *----------------------------------------------------------------*/ + + k = 0; + ii = 0; + for ( i = 0; i < NB_POS_FCB_2T; i++ ) + { + jj = 1; + for ( j = 0; j < NB_POS_FCB_2T; j++ ) + { + rrixiy[k + j] *= pol[ii] * pol[jj]; + jj += 2; + } + ii += 2; + k += NB_POS_FCB_2T; + } + + /*----------------------------------------------------------------* + * search 2 pulses + * All combinaisons are tested: + * 32 pos x 32 pos x 2 signs = 2048 tests + *----------------------------------------------------------------*/ + + p0 = rrixix[0]; + p1 = rrixix[1]; + p2 = rrixiy; + + psk = -1; + alpk = 1; + ix = 0; + iy = 1; + for ( i0 = 0; i0 < L_SUBFR; i0 += STEP ) + { + ps1 = dn_p[i0]; + alp1 = *p0++; + pos = -1; + for ( i1 = 1; i1 < L_SUBFR; i1 += STEP ) + { + ps2 = ps1 + dn_p[i1]; + alp2 = alp1 + *p1++ + *p2++; + sq = ps2 * ps2; + s = alpk * sq - psk * alp2; + if ( s > 0 ) + { + psk = sq; + alpk = alp2; + pos = i1; + } + } + p1 -= NB_POS_FCB_2T; + if ( pos >= 0 ) + { + ix = i0; + iy = pos; + } + } + + i0 = ix / STEP; + i1 = iy / STEP; + sign0 = pol[ix]; + sign1 = pol[iy]; + + + /*-------------------------------------------------------------------* + * Build the codeword, the filtered codeword and index of codevector. + *-------------------------------------------------------------------*/ + + set_f( code, 0.0f, L_SUBFR ); + + code[ix] = sign0; + code[iy] = sign1; + index = ( i0 << 6 ) + i1; + + if ( sign0 < 0.0f ) + { + index += 0x800; + } + + if ( sign1 < 0.0f ) + { + index += 0x20; + } + + set_f( y, 0.0f, L_SUBFR ); + for ( i = ix; i < L_SUBFR; i++ ) + { + y[i] = ( sign0 * h[i - ix] ); + } + + for ( i = iy; i < L_SUBFR; i++ ) + { + y[i] += ( sign1 * h[i - iy] ); + } + + /* write index to array of indices */ + push_indice( hBstr, IND_ALG_CDBK_2T32, index, 12 ); + + return; +} + +/*---------------------------------------------------------------------------------- + * acelp_1t64() + * + * 7 bits algebraic codebook. + * 1 track x 64 positions per track = 64 samples. + * + * The pulse can have 64 possible positions and two (2) possible amplitudes: +1 or -1. + *----------------------------------------------------------------------------------*/ + +void acelp_1t64( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float dn[], /* i : corr. between target and h[]. */ + const float h[], /* i : impulse response of weighted synthesis filter */ + float code[], /* o : algebraic (fixed) codebook excitation */ + float y[], /* o : filtered fixed codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +) +{ + int16_t i, pos, sgn, index; + float tmp; + + /*-------------------------------------------------------------------* + * Find position and sign of maximum impulse. + *-------------------------------------------------------------------*/ + + pos = emaximum( dn, L_subfr, &tmp ); + sgn = (int16_t) sign( dn[pos] ); + + /*-------------------------------------------------------------------* + * Build the codeword, the filtered codeword and index of codevector. + *-------------------------------------------------------------------*/ + + set_f( code, 0.0f, L_subfr ); + code[pos] = sgn; + + set_f( y, 0.0f, L_subfr ); + + for ( i = pos; i < L_subfr; i++ ) + { + y[i] = ( sgn * h[i - pos] ); + } + + index = pos; + + if ( sgn > 0 ) + { + index += L_subfr; + } + + if ( L_subfr == L_SUBFR ) + { + push_indice( hBstr, IND_ALG_CDBK_1T64, index, 7 ); + } + else /* L_subfr == L_SUBFR */ + { + push_indice( hBstr, IND_ALG_CDBK_1T64, index, 8 ); + } + + return; +} diff --git a/lib_enc/cod4t64.c b/lib_enc/cod4t64.c new file mode 100644 index 0000000000..2c9ad01e21 --- /dev/null +++ b/lib_enc/cod4t64.c @@ -0,0 +1,1020 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static int16_t quant_1p_N1( const int16_t pos, const int16_t N ); +static int16_t quant_3p_3N1( const int16_t pos1, const int16_t pos2, const int16_t pos3, const int16_t N ); +static int32_t quant_4p_4N( const int16_t pos[], const int16_t N ); +static int32_t quant_5p_5N( const int16_t pos[], const int16_t N ); +static int32_t quant_6p_6N_2( const int16_t pos[], const int16_t N ); +static int16_t pre_process( const float v[], int16_t pos_vector[], int16_t pos_vector_num[], int16_t *pulse_pos_num ); +static int32_t fcb_encode_position( const int16_t pos_vector[], int16_t n, const int16_t pos_num, const int16_t flag ); +static int32_t fcb_encode_class( const int16_t buffer[], const int16_t pulse_num, const int16_t pos_num ); +static int32_t fcb_encode_PI( const float v[], const int16_t pulse_num ); + + +/*---------------------------------------------------------------------* + * ACELP_4t64() + * + * 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook. + * 4 tracks x 16 positions per track = 64 samples. + * + * 20 bits --> 4 pulses in a frame of 64 samples. + * 36 bits --> 8 pulses in a frame of 64 samples. + * 44 bits 13 + 9 + 13 + 9 --> 10 pulses in a frame of 64 samples. + * 52 bits 13 + 13 + 13 + 13 --> 12 pulses in a frame of 64 samples. + * 64 bits 2 + 2 + 2 + 2 + 14 + 14 + 14 + 14 --> + * 16 pulses in a frame of 64 samples. + * 72 bits 10 + 2 + 10 + 2 + 10 + 14 + 10 + 14 --> + * 18 pulses in a frame of 64 samples. + * 88 bits 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 --> + * 24 pulses in a frame of 64 samples. + * All pulses can have two (2) possible amplitudes: +1 or -1. + * Each pulse can have sixteen (16) possible positions. + *---------------------------------------------------------------------*/ + +int16_t acelp_4t64( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + float dn[], /* i : corr. between target and h[]. */ + const float cn[], /* i : residual after long term prediction */ + const float H[], /* i : impulse response of weighted synthesis filter */ + float R[], /* i : autocorrelation values */ + const int16_t acelpautoc, /* i : autocorrealtion flag */ + float code[], /* o : algebraic (fixed) codebook excitation */ + float y[], /* o : filtered fixed codebook excitation */ + int16_t nbbits, /* i : number of bits per codebook */ + const int16_t cmpl_flag, /* i : coomplexity reduction flag */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +) +{ + int16_t i, k, index, track; + int32_t L_index; + + int16_t ind[NPMAXPT * NB_TRACK_FCB_4T + 32]; + int16_t saved_bits = 0; + PulseConfig config; + int16_t wordcnt, bitcnt; + int16_t indexing_indices[6]; + + /*-----------------------------------------------------------------* + * Configuration + *-----------------------------------------------------------------*/ + + + switch ( nbbits ) + { + case 20: /* EVS/AMR-WB pulse indexing: 20 bits, 4 pulses, 4 tracks */ + config.nbiter = 4; /* 4x12x16=768 loop */ + config.alp = 2.0f; + config.nb_pulse = 4; + config.fixedpulses = 0; + config.nbpos[0] = 4; + config.nbpos[1] = 8; + break; + + case 28: /* EVS pulse indexing: 28 bits, 6 pulses, 4 tracks */ + config.nbiter = 4; /* 4x20x16=1280 loops */ + config.alp = 1.0f; /* coeff for sign setting */ + config.nb_pulse = 6; + config.fixedpulses = 0; + config.nbpos[0] = 6; + config.nbpos[1] = 6; + config.nbpos[2] = 8; + break; + + case 36: /* EVS/AMR-WB pulse indexing: 36 bits, 8 pulses, 4 tracks */ + config.nbiter = 4; /* 4x20x16=1280 loops */ + config.alp = 1.0f; /* coeff for sign setting */ + config.nb_pulse = 8; + config.fixedpulses = 2; + config.nbpos[0] = 4; + config.nbpos[1] = 8; + config.nbpos[2] = 8; + break; + + case 43: /* EVS pulse indexing: 43 bits, 10 pulses, 4 tracks */ + case 44: /* AMR-WB pulse indexing: 44 bits, 10 pulses, 4 tracks */ + config.nbiter = 4; /* 4x26x16=1664 loops */ + config.alp = 1.0f; + config.nb_pulse = 10; + config.fixedpulses = 2; + config.nbpos[0] = 4; + config.nbpos[1] = 6; + config.nbpos[2] = 8; + config.nbpos[3] = 8; + break; + + case 50: /* EVS pulse indexing: 50 bits, 12 pulses, 4 tracks */ + case 52: /* AMR-WB pulse indexing: 52 bits, 12 pulses, 4 tracks */ + config.nbiter = 4; /* 4x26x16=1664 loops */ + config.alp = 1.0f; + config.nb_pulse = 12; + config.fixedpulses = 4; + config.nbpos[0] = 4; + config.nbpos[1] = 6; + config.nbpos[2] = 8; + config.nbpos[3] = 8; + break; + + case 62: /* EVS pulse indexing: 62 bits, 16 pulses, 4 tracks */ + case 64: /* AMR-WB pulse indexing: 64 bits, 16 pulses, 4 tracks */ + config.nbiter = 3; /* 3x36x16=1728 loops */ + config.alp = 0.8F; + config.nb_pulse = 16; + config.fixedpulses = 4; + config.nbpos[0] = 4; + config.nbpos[1] = 4; + config.nbpos[2] = 6; + config.nbpos[3] = 6; + config.nbpos[4] = 8; + config.nbpos[5] = 8; + break; + + case 72: /* AMR-WB pulse indexing: 72 bits, 18 pulses, 4 tracks */ + config.nbiter = 3; /* 3x35x16=1680 loops */ + config.alp = 0.75F; + config.nb_pulse = 18; + config.fixedpulses = 4; + config.nbpos[0] = 2; + config.nbpos[1] = 3; + config.nbpos[2] = 4; + config.nbpos[3] = 5; + config.nbpos[4] = 6; + config.nbpos[5] = 7; + config.nbpos[6] = 8; + break; + + case 88: /* AMR-WB pulse indexing: 88 bits, 24 pulses, 4 tracks */ + config.nbiter = 2; /* 2x53x16=1696 loop */ + config.alp = 0.5f; + config.nb_pulse = 24; + config.fixedpulses = 4; + config.nbpos[0] = 2; + config.nbpos[1] = 2; + config.nbpos[2] = 3; + config.nbpos[3] = 4; + config.nbpos[4] = 5; + config.nbpos[5] = 6; + config.nbpos[6] = 7; + config.nbpos[7] = 8; + config.nbpos[8] = 8; + config.nbpos[9] = 8; + break; + + case 87: /* EVS pulse indexing: 87 bits, 26 pulses, 4 tracks */ + config.nbiter = 1; + config.alp = 0.5F; + config.nb_pulse = 26; + config.fixedpulses = 4; + config.nbpos[0] = 4; + config.nbpos[1] = 6; + config.nbpos[2] = 6; + config.nbpos[3] = 8; + config.nbpos[4] = 8; + config.nbpos[5] = 8; + config.nbpos[6] = 8; + config.nbpos[7] = 8; + config.nbpos[8] = 8; + config.nbpos[9] = 8; + config.nbpos[10] = 8; + break; + } + + /* reduce the number of iterations as a compromise between the performance and complexity */ + if ( cmpl_flag > 0 ) + { + config.nbiter = cmpl_flag; + } + + config.codetrackpos = TRACKPOS_FIXED_FIRST; + config.bits = nbbits; + + + /*-----------------------------------------------------------------* + * Search + *-----------------------------------------------------------------*/ + + if ( acelpautoc ) + { + E_ACELP_4tsearchx( dn, cn, R, code, &config, ind ); + + /* Generate weighted code */ + set_f( y, 0.0f, L_SUBFR ); + for ( i = 0; i < L_SUBFR; i++ ) + { + /* Code is sparse, so check which samples are non-zero */ + if ( code[i] != 0 ) + { + for ( k = 0; k < L_SUBFR - i; k++ ) + { + y[i + k] += code[i] * H[k]; + } + } + } + } + else + { + E_ACELP_4tsearch( dn, cn, H, code, &config, ind, y ); + } + + /*-----------------------------------------------------------------* + * Indexing + *-----------------------------------------------------------------*/ + + if ( !Opt_AMR_WB ) + { + /* EVS pulse indexing */ + + saved_bits = E_ACELP_indexing( code, config, NB_TRACK_FCB_4T, indexing_indices ); + + saved_bits = 0; + + wordcnt = nbbits >> 4; + bitcnt = nbbits & 15; + for ( i = 0; i < wordcnt; i++ ) + { + push_indice( hBstr, IND_ALG_CDBK_4T64, indexing_indices[i], 16 ); + } + if ( bitcnt ) + { + push_indice( hBstr, IND_ALG_CDBK_4T64, indexing_indices[i], bitcnt ); + } + } + else + { + /* AMR-WB pulse indexing */ + + if ( nbbits == 20 ) + { + for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + index = quant_1p_N1( ind[k], 4 ); + push_indice( hBstr, IND_ALG_CDBK_4T64, index, 5 ); + } + } + else if ( nbbits == 36 ) + { + for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + index = quant_2p_2N1( ind[k], ind[k + 1], 4 ); + push_indice( hBstr, IND_ALG_CDBK_4T64, index, 9 ); + } + } + else if ( nbbits == 44 ) + { + for ( track = 0; track < ( NB_TRACK_FCB_4T - 2 ); track++ ) + { + k = track * NPMAXPT; + index = quant_3p_3N1( ind[k], ind[k + 1], ind[k + 2], 4 ); + push_indice( hBstr, IND_ALG_CDBK_4T64, index, 13 ); + } + + for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + index = quant_2p_2N1( ind[k], ind[k + 1], 4 ); + push_indice( hBstr, IND_ALG_CDBK_4T64, index, 9 ); + } + } + else if ( nbbits == 52 ) + { + for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + index = quant_3p_3N1( ind[k], ind[k + 1], ind[k + 2], 4 ); + push_indice( hBstr, IND_ALG_CDBK_4T64, index, 13 ); + } + } + else if ( nbbits == 64 ) + { + for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + L_index = quant_4p_4N( &ind[k], 4 ); + index = ( ( L_index >> 14 ) & 3 ); + push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 2 ); + } + + for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + L_index = quant_4p_4N( &ind[k], 4 ); + index = ( L_index & 0x3FFF ); + push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 14 ); + } + } + else if ( nbbits == 72 ) + { + for ( track = 0; track < ( NB_TRACK_FCB_4T - 2 ); track++ ) + { + k = track * NPMAXPT; + L_index = quant_5p_5N( &ind[k], 4 ); + index = ( ( L_index >> 10 ) & 0x03FF ); + push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 10 ); + } + + for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + L_index = quant_4p_4N( &ind[k], 4 ); + index = ( ( L_index >> 14 ) & 3 ); + push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 2 ); + } + + for ( track = 0; track < ( NB_TRACK_FCB_4T - 2 ); track++ ) + { + k = track * NPMAXPT; + L_index = quant_5p_5N( &ind[k], 4 ); + index = ( L_index & 0x03FF ); + push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 10 ); + } + + for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + L_index = quant_4p_4N( &ind[k], 4 ); + index = ( L_index & 0x3FFF ); + push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 14 ); + } + } + else if ( nbbits == 88 ) + { + for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + L_index = quant_6p_6N_2( &ind[k], 4 ); + index = ( ( L_index >> 11 ) & 0x07FF ); + push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 11 ); + } + + for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) + { + k = track * NPMAXPT; + L_index = quant_6p_6N_2( &ind[k], 4 ); + index = ( L_index & 0x07FF ); + push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 11 ); + } + } + } + + return saved_bits; +} + + +/*---------------------------------------------------------------------* + * Quantization of 1 pulse with N+1 bits: * + *---------------------------------------------------------------------*/ + +/*! r: return N+1 bits */ +static int16_t quant_1p_N1( + const int16_t pos, /* i : position of the pulse */ + const int16_t N /* i : number of bits for position */ +) +{ + int16_t mask, index; + + mask = ( ( 1 << N ) - 1 ); + + index = ( pos & mask ); + + if ( ( pos & NB_POS_FCB_4T ) != 0 ) + { + index += 1 << N; + } + + return index; +} + + +/*---------------------------------------------------------------------* + * Quantization of 2 pulses with 2*N+1 bits: * + *---------------------------------------------------------------------*/ + +/*! r: return (2*N)+1 bits */ +int16_t quant_2p_2N1( + const int16_t pos1, /* i : position of the pulse 1 */ + const int16_t pos2, /* i : position of the pulse 2 */ + const int16_t N /* i : number of bits for position */ +) +{ + int16_t mask, index; + + mask = ( ( 1 << N ) - 1 ); + + /*-----------------------------------------------------------------* + * sign of 1st pulse == sign of 2nd pulse + *-----------------------------------------------------------------*/ + + if ( ( ( pos2 ^ pos1 ) & NB_POS_FCB_4T ) == 0 ) + { + if ( ( pos1 - pos2 ) <= 0 ) + { + index = ( ( pos1 & mask ) << N ) + ( pos2 & mask ); + } + else + { + index = ( ( pos2 & mask ) << N ) + ( pos1 & mask ); + } + if ( ( pos1 & NB_POS_FCB_4T ) != 0 ) + { + index += 1 << ( 2 * N ); + } + } + else + { + + /*-----------------------------------------------------------------* + * sign of 1st pulse != sign of 2nd pulse + *-----------------------------------------------------------------*/ + if ( ( ( pos1 & mask ) - ( pos2 & mask ) ) <= 0 ) + { + index = ( ( pos2 & mask ) << N ) + ( pos1 & mask ); + if ( ( pos2 & NB_POS_FCB_4T ) != 0 ) + { + index += 1 << ( 2 * N ); + } + } + else + { + index = ( ( pos1 & mask ) << N ) + ( pos2 & mask ); + if ( ( pos1 & NB_POS_FCB_4T ) != 0 ) + { + index += 1 << ( 2 * N ); + } + } + } + + return index; +} + +/*---------------------------------------------------------------------* + * Quantization of 3 pulses with 3*N+1 bits: * + *---------------------------------------------------------------------*/ + +/*! r: return (3*N)+1 bits */ +static int16_t quant_3p_3N1( + const int16_t pos1, /* i : position of the pulse 1 */ + const int16_t pos2, /* i : position of the pulse 2 */ + const int16_t pos3, /* i : position of the pulse 3 */ + const int16_t N /* i : number of bits for position */ +) +{ + int16_t index, nb_pos; + + nb_pos = ( 1 << ( N - 1 ) ); + + /* Quantization of 3 pulses with 3*N+1 bits */ + if ( ( ( pos1 ^ pos2 ) & nb_pos ) == 0 ) + { + index = quant_2p_2N1( pos1, pos2, ( N - 1 ) ); + index += ( pos1 & nb_pos ) << N; + index += quant_1p_N1( pos3, N ) << ( 2 * N ); + } + else if ( ( ( pos1 ^ pos3 ) & nb_pos ) == 0 ) + { + index = quant_2p_2N1( pos1, pos3, ( N - 1 ) ); + index += ( pos1 & nb_pos ) << N; + index += quant_1p_N1( pos2, N ) << ( 2 * N ); + } + else + { + index = quant_2p_2N1( pos2, pos3, ( N - 1 ) ); + index += ( pos2 & nb_pos ) << N; + index += quant_1p_N1( pos1, N ) << ( 2 * N ); + } + + return index; +} + +/*---------------------------------------------------------------------* + * Quantization of 4 pulses with 4*N+1 bits: * + *---------------------------------------------------------------------*/ + +/*! r: return (4*N)+1 bits */ +static int32_t quant_4p_4N1( + const int16_t pos1, /* i : position of the pulse 1 */ + const int16_t pos2, /* i : position of the pulse 2 */ + const int16_t pos3, /* i : position of the pulse 3 */ + const int16_t pos4, /* i : position of the pulse 4 */ + const int16_t N /* i : number of bits for position */ +) +{ + int32_t index, nb_pos; + + nb_pos = ( 1 << ( N - 1 ) ); + + /* Quantization of 4 pulses with 4*N+1 bits */ + if ( ( ( pos1 ^ pos2 ) & nb_pos ) == 0 ) + { + index = quant_2p_2N1( pos1, pos2, ( N - 1 ) ); + index += ( pos1 & nb_pos ) << N; + index += quant_2p_2N1( pos3, pos4, N ) << ( 2 * N ); + } + else if ( ( ( pos1 ^ pos3 ) & nb_pos ) == 0 ) + { + index = quant_2p_2N1( pos1, pos3, ( N - 1 ) ); + index += ( pos1 & nb_pos ) << N; + index += quant_2p_2N1( pos2, pos4, N ) << ( 2 * N ); + } + else + { + index = quant_2p_2N1( pos2, pos3, ( N - 1 ) ); + index += ( pos2 & nb_pos ) << N; + index += quant_2p_2N1( pos1, pos4, N ) << ( 2 * N ); + } + + return ( index ); +} + +/*---------------------------------------------------------------------* + * Quantization of 4 pulses with 4*N bits: * + *---------------------------------------------------------------------*/ + +/*! r: return 4*N bits */ +static int32_t quant_4p_4N( + const int16_t pos[], /* i : position of the pulse 1..4 */ + const int16_t N /* i : number of bits for position */ +) +{ + int16_t i, j, k, n_1; + int16_t posA[4], posB[4]; + int32_t nb_pos, index = 0; + + n_1 = N - 1; + nb_pos = ( 1 << n_1 ); + + i = 0; + j = 0; + for ( k = 0; k < 4; k++ ) + { + if ( ( pos[k] & nb_pos ) == 0 ) + { + posA[i++] = pos[k]; + } + else + { + posB[j++] = pos[k]; + } + } + + switch ( i ) + { + case 0: + index = 1 << ( ( 4 * N ) - 3 ); + index += quant_4p_4N1( posB[0], posB[1], posB[2], posB[3], n_1 ); + break; + case 1: + index = quant_1p_N1( posA[0], n_1 ) << ( ( 3 * n_1 ) + 1 ); + index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ); + break; + case 2: + index = quant_2p_2N1( posA[0], posA[1], n_1 ) << ( ( 2 * n_1 ) + 1 ); + index += quant_2p_2N1( posB[0], posB[1], n_1 ); + break; + case 3: + index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << N; + index += quant_1p_N1( posB[0], n_1 ); + break; + case 4: + index = quant_4p_4N1( posA[0], posA[1], posA[2], posA[3], n_1 ); + break; + } + index += ( i & 3 ) << ( ( 4 * N ) - 2 ); + + return ( index ); +} + +/*---------------------------------------------------------------------* + * Quantization of 5 pulses with 5*N bits: * + *---------------------------------------------------------------------*/ + +/*! r: return 5*N bits */ +static int32_t quant_5p_5N( + const int16_t pos[], /* i : position of the pulse 1..5 */ + const int16_t N /* i : number of bits for position */ +) +{ + int16_t i, j, k, n_1, nb_pos; + int16_t posA[5], posB[5]; + int32_t index = 0; + + n_1 = N - 1; + nb_pos = ( 1 << n_1 ); + + i = 0; + j = 0; + for ( k = 0; k < 5; k++ ) + { + if ( ( pos[k] & nb_pos ) == 0 ) + { + posA[i++] = pos[k]; + } + else + { + posB[j++] = pos[k]; + } + } + switch ( i ) + { + case 0: + index = 1 << ( ( 5 * N ) - 1 ); + index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ) << ( ( 2 * N ) + 1 ); + index += quant_2p_2N1( posB[3], posB[4], N ); + break; + case 1: + index = 1 << ( ( 5 * N ) - 1 ); + index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ) << ( ( 2 * N ) + 1 ); + index += quant_2p_2N1( posB[3], posA[0], N ); + break; + case 2: + index = 1 << ( ( 5 * N ) - 1 ); + index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ) << ( ( 2 * N ) + 1 ); + index += quant_2p_2N1( posA[0], posA[1], N ); + break; + case 3: + index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 2 * N ) + 1 ); + index += quant_2p_2N1( posB[0], posB[1], N ); + break; + case 4: + index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 2 * N ) + 1 ); + index += quant_2p_2N1( posA[3], posB[0], N ); + break; + case 5: + index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 2 * N ) + 1 ); + index += quant_2p_2N1( posA[3], posA[4], N ); + break; + } + + return ( index ); +} + +/*---------------------------------------------------------------------* + * Quantization of 6 pulses with 6*N-2 bits: * + *---------------------------------------------------------------------*/ + +/*! r: return 6*N-2 bits */ +static int32_t quant_6p_6N_2( + const int16_t pos[], /* i : position of the pulse 1..6 */ + const int16_t N /* i : number of bits for position */ +) +{ + int16_t i, j, k, n_1; + int16_t posA[6], posB[6]; + int32_t nb_pos, index = 0; + + n_1 = N - 1; + nb_pos = 1 << n_1; + + i = 0; + j = 0; + for ( k = 0; k < 6; k++ ) + { + if ( ( pos[k] & nb_pos ) == 0 ) + { + posA[i++] = pos[k]; + } + else + { + posB[j++] = pos[k]; + } + } + switch ( i ) + { + case 0: + index = 1 << ( ( 6 * N ) - 5 ); + index += quant_5p_5N( posB, n_1 ) << N; + index += quant_1p_N1( posB[5], n_1 ); + break; + case 1: + index = 1 << ( ( 6 * N ) - 5 ); + index += quant_5p_5N( posB, n_1 ) << N; + index += quant_1p_N1( posA[0], n_1 ); + break; + case 2: + index = 1 << ( ( 6 * N ) - 5 ); + index += quant_4p_4N( posB, n_1 ) << ( ( 2 * n_1 ) + 1 ); + index += quant_2p_2N1( posA[0], posA[1], n_1 ); + break; + case 3: + index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 3 * n_1 ) + 1 ); + index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ); + break; + case 4: + i = 2; + index = quant_4p_4N( posA, n_1 ) << ( ( 2 * n_1 ) + 1 ); + index += quant_2p_2N1( posB[0], posB[1], n_1 ); + break; + case 5: + i = 1; + index = quant_5p_5N( posA, n_1 ) << N; + index += quant_1p_N1( posB[0], n_1 ); + break; + case 6: + i = 0; + index = quant_5p_5N( posA, n_1 ) << N; + index += quant_1p_N1( posA[5], n_1 ); + break; + } + + index += ( i & 3 ) << ( ( 6 * N ) - 4 ); + + return ( index ); +} + +/*---------------------------------------------------------------------* + *order the pulse position * + *---------------------------------------------------------------------*/ + +/*! r: return sign value of pulse on a track */ +static int16_t pre_process( + const float v[], /* i : the pulse vector */ + int16_t pos_vector[], /* o : position of the pulse on a track */ + int16_t pos_vector_num[], /* o : the pulse number on the position which have pulse */ + int16_t *pulse_pos_num /* i : the number of position which have pulse */ +) +{ + int16_t j, k; + int16_t sign; + + sign = 0; + j = 0; + for ( k = 0; k < 64; k += 4 ) + { + if ( v[k] ) + { + pos_vector[j] = k >> 2; + pos_vector_num[j] = (int16_t) fabsf( v[k] ); + if ( v[k] > 0 ) + { + sign = sign << 1; + } + else + { + sign = ( sign << 1 ) + 1; + } + j++; + } + } + *pulse_pos_num = j; + + return sign; +} + +/*---------------------------------------------------------------------* + *encode the position * + *---------------------------------------------------------------------*/ + +/*! r: return index of the positions which have pulse */ +static int32_t fcb_encode_position( + const int16_t pos_vector[], /* i : position of the pulse on a track */ + int16_t n, + const int16_t pos_num, /* i : the number of position which have pulse */ + const int16_t flag ) +{ + int16_t i; + int32_t mmm1; + int16_t temp2; + + mmm1 = PI_select_table[n][pos_num] - 1; + temp2 = pos_num; + + if ( flag ) /* no decrease */ + { + for ( i = 0; i < pos_num; i++ ) + { + mmm1 -= PI_select_table[n - pos_vector[i] - 1][temp2--]; + } + } + else + { + for ( i = 0; i < pos_num; i++ ) + { + mmm1 -= PI_select_table[n - pos_vector[i] - 1][temp2--]; + n--; + } + } + + return mmm1; +} + +/*---------------------------------------------------------------------* + *encode class for 3p 4p 5p 6p/track * + *---------------------------------------------------------------------*/ + +/*! r: class index of the pulse on a track */ +static int32_t fcb_encode_cl( + const int16_t buffer[], /* i : pulses on a track */ + const int16_t pulse_num, /* i : pulses number on a track */ + const int16_t pos_num /* i : number of the position which have pulse */ +) +{ + int32_t k; + int16_t i, temp1, temp2; + + temp1 = pos_num + pulse_num - 1; + temp2 = pulse_num; + k = PI_select_table[temp1][pulse_num] - 1; + temp1--; + for ( i = 0; i < pulse_num; i++ ) + { + k -= PI_select_table[temp1 - buffer[i]][temp2--]; + temp1--; + } + + return k; +} + +/*---------------------------------------------------------------------* + *encode the class and compute class offset * + *---------------------------------------------------------------------*/ + +/*! r: class offset */ +static int32_t fcb_encode_class( + const int16_t sector_6p_num[], /* i : position which have pulse on a track */ + const int16_t pulse_num, /* i : pulse number on a track */ + const int16_t pulse_pos_num /* i : number of position which have pulse on a track */ +) +{ + int16_t i, j; + int32_t k, mn9_offet; + int16_t vector_class[6]; + int16_t *vector_class_ptr; + + mn9_offet = 0; + + if ( pulse_pos_num < pulse_num ) + { + vector_class_ptr = vector_class; + for ( i = 0; i < pulse_pos_num; i++ ) + { + for ( j = 0; j < ( sector_6p_num[i] - 1 ); j++ ) + { + *vector_class_ptr++ = i; + } + } + k = fcb_encode_cl( vector_class, pulse_num - pulse_pos_num, pulse_pos_num ); + mn9_offet = PI_factor[pulse_pos_num] * k; + } + + return mn9_offet; +} + + +/*---------------------------------------------------------------------* + *encode fcb pulse index * + *---------------------------------------------------------------------*/ + +/*! r: return index of the pulse on a track */ +static int32_t fcb_encode_PI( + const float v[], /* i : the pulse vector */ + const int16_t pulse_num /* i : number of the pulse on a track */ +) +{ + int16_t vector_p[7]; + int16_t pulse_pos_num; + int16_t vector_p_num[7]; + int32_t code_index; + int16_t sign; + + /*order the pulse position*/ + sign = pre_process( v, vector_p, vector_p_num, &pulse_pos_num ); + + /*encode the position*/ + code_index = fcb_encode_position( vector_p, 16, pulse_pos_num, 1 ); + + /*encode the class and compute class offset*/ + code_index += fcb_encode_class( vector_p_num, pulse_num, pulse_pos_num ); + + code_index = PI_offset[pulse_num][pulse_num + 1 - pulse_pos_num] + ( code_index << pulse_pos_num ) + sign; + + return code_index; +} + + +/*--------------------------------------------------------------------------* + * E_ACELP_code43bit + * + * Fixed bit-length arithmetic coding of pulses + * v - (input) pulse vector + * s - (output) encoded state + * n - (output) range of possible states (0...n-1) + * p - (output) number of pulses found + * len - (input) length of pulse vector + * trackstep - (input) step between tracks + *--------------------------------------------------------------------------*/ + +int16_t E_ACELP_code43bit( + const float code[], + uint32_t *ps, + int16_t *p, + uint16_t idxs[] ) +{ + int16_t j, k, track; + int16_t ind[32]; + int16_t tmp; + int32_t joint_index; + int32_t joint_offset = 3611648; /*offset for 3 pulses per track*/ + int16_t saved_bits = 0; + + for ( track = 0; track < 2; track++ ) + { + k = track * NPMAXPT; + ps[track] = fcb_encode_PI( code + track, 3 ); + p[track] = 3; + } + + for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) + { + j = track * NPMAXPT; + for ( k = track; k < 64; k += 4 ) + { + if ( code[k] ) + { + tmp = k >> 2; + if ( code[k] < 0 ) + { + tmp += 16; + } + if ( fabs( code[k] ) > 1 ) + { + ind[j] = tmp; + ind[j + 1] = tmp; + break; + } + else + { + ind[j] = tmp; + j++; + } + } + } + k = track * NPMAXPT; + ps[track] = quant_2p_2N1( ind[k], ind[k + 1], 4 ); + p[track] = 2; + } + joint_index = ps[0] * 5472 + ps[1]; + if ( joint_index >= joint_offset ) + { + joint_index += joint_offset; + } + else + { + saved_bits += 1; + } + + idxs[0] = ( ( ps[2] << 9 ) + ps[3] ) & 0xffff; + idxs[1] = ( ( joint_index << 2 ) + ( ps[2] >> 7 ) ) & 0xffff; + idxs[2] = (uint16_t) ( joint_index >> 14 ); + + return saved_bits; +} diff --git a/lib_enc/cod4t64_fast.c b/lib_enc/cod4t64_fast.c new file mode 100644 index 0000000000..b67248ebe2 --- /dev/null +++ b/lib_enc/cod4t64_fast.c @@ -0,0 +1,754 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define BETA_BN1 2.0f +#define BETA_BN2 2.25f + +#define L_SUBFR_MAX 2 * L_SUBFR +#define MAX_NUM_INTER 5 +#define MAX_PULSES_STEREO 5 + +/*---------------------------------------------------------------------* + * Quantization of 1 pulse with N+1 bits: * + *---------------------------------------------------------------------*/ + +/*! r: return index (N+1 bits) */ +static int16_t quant_1p_N1_L_subfr( + const int16_t nb_pos, /* i : number of positions */ + const int16_t pos, /* i : position of the pulse */ + const int16_t N /* i : number of bits for position */ +) +{ + int16_t mask, index; + + mask = ( ( 1 << N ) - 1 ); + + index = ( pos & mask ); + + if ( ( pos & nb_pos ) != 0 ) + { + index += 1 << N; + } + + return index; +} + +/*-------------------------------------------------------------------* + * Function find_best_pulse() + * + * Find best pulse + *-------------------------------------------------------------------*/ + +static int16_t find_best_pulse( + const int16_t L_subfr, + const int16_t nb_tracks, + const int16_t track, + const float dn[], + const float sign[], + int16_t *s ) +{ + int16_t m, i; + float temp, max_val; + + max_val = FLT_MIN; + m = track; + for ( i = track; i < L_subfr; i += nb_tracks ) + { + temp = dn[i] * sign[i]; + + if ( temp >= max_val ) + { + max_val = temp; + m = i; + } + } + + *s = (int16_t) sign[m]; + + return m; +} + + +/*-------------------------------------------------------------------* + * Function acelp_fast() + * + * Fast algebraic codebook search. + * Supports 10, 15, 17, 20, 24, and 26 bits codebooks. + *-------------------------------------------------------------------*/ + +void acelp_fast( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t cdk_index, /* i : codebook index */ + const float dn_orig[L_SUBFR], /* i : corr. between target and h[]. */ + const float cn[L_SUBFR], /* i : residual after long term prediction */ + const float H[L_SUBFR], /* i : impulse response of weighted synthesis filter */ + float code[L_SUBFR], /* o : algebraic (fixed) codebook excitation */ + float y[], /* o : filtered fixed codebook excitation */ + const int16_t L_subfr /* i : subframe length */ +) +{ + int16_t i, j, q, bits, bits_track, nb_pos, nb_pulse, track, nb_iter, nb_tracks; + int16_t skip_track[MAX_NUM_INTER], skip_track_max; + PulseConfig config; + enum TRACKPOS codetrackpos; + int16_t m[MAX_PULSES_STEREO], s[MAX_PULSES_STEREO], m_max[MAX_PULSES_STEREO], s_max[MAX_PULSES_STEREO]; + int16_t track_order[NB_TRACK_FCB_4T * MAX_NUM_INTER], m0_track[NB_TRACK_FCB_4T]; + int16_t ind_stream[NPMAXPT * NB_TRACK_FCB_4T], idx; + float G, G1, G2, G3, Gn, Gd, dn[L_SUBFR_MAX]; + float tmpF, y_tmp[L_SUBFR_MAX]; + float crit_num, crit_den, crit_num_max, crit_den_max; + float h_buf[4 * L_SUBFR_MAX], *h, *h_inv, *p_hn, alp_buf[2 * L_SUBFR_MAX], *alp, *alp_pos0, *alp_pos1, *alp_pos2, *alp_pos3; + float dndn, cncn, s_coef, bn_orig[L_SUBFR_MAX], cncn_track[NB_TRACK_FCB_4T]; + float max_val, temp, sign[L_SUBFR_MAX], max_track[MAX_NUM_INTER]; + float beta1, beta2; + + /*-----------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + nb_iter = NB_TRACK_FCB_4T; + nb_tracks = NB_TRACK_FCB_4T; + nb_pulse = 0; /* to avoid compilation warnings */ + + if ( L_subfr == L_SUBFR ) + { + config = PulseConfTable[cdk_index]; + bits = config.bits; + nb_pulse = config.nb_pulse; + codetrackpos = config.codetrackpos; + + if ( cdk_index == 2 ) + { + /* 12 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ + nb_tracks = NB_TRACK_FCB_2T; + nb_iter = NB_TRACK_FCB_2T; + } + else if ( nb_pulse == 2 ) + { + /* 10 bits, 2 pulses, 4 tracks: 1010 (used only even tracks) */ + nb_iter = NB_TRACK_FCB_4T - 2; + } + else if ( nb_pulse == 3 ) + { + if ( codetrackpos == TRACKPOS_FIXED_FIRST ) + { + /* 15 bits, 3 pulses, 4 tracks: 1110 (fixed track to first) */ + nb_iter = NB_TRACK_FCB_4T - 1; + } + else if ( codetrackpos == TRACKPOS_FREE_THREE ) + { + /* 17 bits, 3 pulses, 4 tracks (used all tracks): 1110, 1101, 1011, 0111 */ + nb_iter = NB_TRACK_FCB_4T; + } + } + } + else /* L_subfr == 2*L_SUBFFR */ + { + bits = cdk_index; + codetrackpos = -1; /* to avoid compilation warnings */ + + if ( cdk_index == 14 ) + { + /* 14 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ + nb_pulse = 2; + nb_iter = NB_TRACK_FCB_2T; + codetrackpos = TRACKPOS_FIXED_TWO; + nb_tracks = NB_TRACK_FCB_2T; + } + else if ( cdk_index == 12 ) + { + /* 12 bits, 2 pulses, 4 tracks: 1010 (used only even tracks) */ + nb_pulse = 2; + nb_iter = NB_TRACK_FCB_4T - 2; + codetrackpos = TRACKPOS_FIXED_EVEN; + } + else if ( cdk_index == 18 ) + { + /* 18 bits, 3 pulses, 4 tracks: 1110 (used first three tracks) */ + nb_pulse = 3; + nb_iter = NB_TRACK_FCB_4T - 1; + codetrackpos = TRACKPOS_FIXED_FIRST; + } + else if ( cdk_index == 20 ) + { + /* 20 bits, 3 pulses, 4 tracks (used all tracks): 1110, 1101, 1011, 0111 */ + nb_pulse = 3; + nb_iter = NB_TRACK_FCB_4T; + codetrackpos = TRACKPOS_FREE_THREE; + } + else if ( cdk_index == 24 ) + { + /* 24 bits, 4 pulses, 4 tracks: 1111 */ + nb_pulse = 4; + nb_iter = NB_TRACK_FCB_4T; + codetrackpos = TRACKPOS_FIXED_FIRST; + } + } + + beta1 = BETA_BN1; + beta2 = BETA_BN2; + + if ( cdk_index <= 2 ) + { + beta1 = BETA_BN1 * 2; + beta2 = BETA_BN2 * 2; + } + + /*-----------------------------------------------------------------* + * Find signal bn[] and sign pre-selection vector sign[]. + *-----------------------------------------------------------------*/ + + dndn = sum2_f( dn_orig, L_subfr ) + 0.01f; + + cncn = 0.1f; + for ( q = 0; q < nb_tracks; q++ ) + { + cncn_track[q] = 0.1f; + + for ( i = 0; i < L_subfr; i += nb_tracks ) + { + cncn_track[q] += ( cn[i + q] * cn[i + q] ); + } + cncn += cncn_track[q]; + } + + s_coef = sqrtf( dndn / cncn ); + + for ( i = 0; i < L_subfr; i++ ) + { + temp = ( s_coef * cn[i] ) + ( beta1 * dn_orig[i] ); + bn_orig[i] = temp; + + if ( temp >= 0 ) + { + sign[i] = 1.0f; + } + else + { + sign[i] = -1.0f; + } + } + + /*-----------------------------------------------------------------* + * Compute buffer h_buf[]. + *-----------------------------------------------------------------*/ + + h = h_buf; + h_inv = h_buf + ( 2 * L_subfr ); + + for ( i = 0; i < L_subfr; i++ ) + { + *h++ = 0.0f; + *h_inv++ = 0.0f; + } + + for ( i = 0; i < L_subfr; i++ ) + { + h[i] = H[i]; + h_inv[i] = -H[i]; + } + + /*-----------------------------------------------------------------* + * Approximate FI[i][j] by alp[abs(i-j)] and compute buffer alp_buf[]. + *-----------------------------------------------------------------*/ + + alp = alp_buf + L_subfr; + + for ( i = 0; i < L_subfr; i++ ) + { + *alp = 0.0f; + + for ( j = i; j < L_subfr; j++ ) + { + *alp += H[j] * H[j - i]; + } + alp_buf[L_subfr - i] = *alp++; + } + + alp = alp_buf + L_subfr; + + for ( q = 0; q < nb_tracks; q++ ) + { + max_track[q] = 0.0f; + + for ( i = q; i < L_subfr; i += nb_tracks ) + { + temp = bn_orig[i] * sign[i]; + + if ( temp >= max_track[q] ) + { + max_track[q] = temp; + m0_track[q] = i; + } + } + } + + /*-----------------------------------------------------------------* + * Track re-order + *-----------------------------------------------------------------*/ + + if ( nb_tracks == NB_TRACK_FCB_2T ) + { + track_order[0] = 0; + track_order[1] = 1; + track_order[2] = 1; + track_order[3] = 0; + } + else + { + /* skip certain tracks if number of pulses is lower than number of tracks */ + if ( nb_pulse == 2 && nb_tracks == NB_TRACK_FCB_4T ) + { + max_track[NB_TRACK_FCB_4T - 3] = -1; + max_track[NB_TRACK_FCB_4T - 1] = -1; + } + else if ( nb_pulse == 3 && codetrackpos == TRACKPOS_FIXED_FIRST ) + { + max_track[NB_TRACK_FCB_4T - 1] = -1; + } + + for ( q = 0; q < nb_tracks; q++ ) + { + i = maximum( max_track, nb_tracks, &tmpF ); + track_order[q] = i; + max_track[i] = -1.0f; + } + + track_order[4] = track_order[1]; + track_order[5] = track_order[0]; + track_order[6] = track_order[2]; + track_order[7] = track_order[3]; + + track_order[8] = track_order[2]; + track_order[9] = track_order[0]; + track_order[10] = track_order[1]; + track_order[11] = track_order[3]; + + track_order[12] = track_order[3]; + track_order[13] = track_order[0]; + track_order[14] = track_order[1]; + track_order[15] = track_order[2]; + + if ( cdk_index == 3 ) + { + track_order[12] = track_order[2]; + track_order[13] = track_order[1]; + track_order[14] = track_order[0]; + + track_order[16] = track_order[1]; + track_order[17] = track_order[2]; + track_order[18] = track_order[0]; + nb_iter = 5; + } + else if ( cdk_index == 4 ) + { + track_order[16] = track_order[2]; + track_order[17] = track_order[3]; + track_order[18] = track_order[1]; + track_order[19] = track_order[0]; + nb_iter = 5; + } + } + + /*-----------------------------------------------------------------* + * Main searching loop + *-----------------------------------------------------------------*/ + + crit_num_max = -1.0f; + crit_den_max = 1.0f; + skip_track_max = -1; + + for ( q = 0; q < nb_iter; q++ ) + { + /*-----------------------------------------------------------------* + * First pulse search + *-----------------------------------------------------------------*/ + + track = track_order[q * nb_tracks]; + m[0] = m0_track[track]; + s[0] = (int16_t) sign[m[0]]; + + /*-----------------------------------------------------------------* + * Second pulse search + *-----------------------------------------------------------------*/ + + if ( nb_tracks == NB_TRACK_FCB_2T ) + { + Gn = s[0] * dn_orig[m[0]]; + Gd = alp[0]; + G = Gn / Gd; + G *= s[0]; + + track = track_order[q * nb_tracks + 1]; + alp_pos0 = alp - m[0] + track; + + for ( i = track; i < L_subfr; i += NB_TRACK_FCB_2T ) + { + dn[i] = dn_orig[i] - G * ( *alp_pos0 ); + alp_pos0 += NB_TRACK_FCB_2T; + } + + m[1] = find_best_pulse( L_subfr, NB_TRACK_FCB_2T, track, dn, sign, &s[1] ); + } + else + { + Gn = s[0] * dn_orig[m[0]]; + Gd = alp[0]; + G = Gn; + G *= s[0]; + + track = track_order[q * nb_tracks + 1]; + alp_pos0 = alp - m[0] + track; + + dndn = 0.1f; + for ( i = track; i < L_subfr; i += nb_tracks ) + { + dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ); + alp_pos0 += nb_tracks; + dndn += ( dn[i] * dn[i] ); + } + + s_coef = sqrtf( dndn / cncn_track[track] ); + + max_val = FLT_MIN; + m[1] = track; + for ( i = track; i < L_subfr; i += nb_tracks ) + { + dn[i] = ( s_coef * cn[i] ) + ( beta2 * dn[i] ); + temp = dn[i] * sign[i]; + + if ( temp >= max_val ) + { + max_val = temp; + m[1] = i; + } + } + + s[1] = (int16_t) sign[m[1]]; + } + + /*-----------------------------------------------------------------* + * Third pulse search + *-----------------------------------------------------------------*/ + + if ( nb_pulse >= 3 ) + { + Gn += s[1] * dn_orig[m[1]]; + Gd += alp[0] + 2 * s[0] * s[1] * alp[m[0] - m[1]]; + G = Gn; + G1 = G * s[1]; + G *= s[0]; + + track = track_order[q * nb_tracks + 2]; + alp_pos0 = alp - m[0] + track; + alp_pos1 = alp - m[1] + track; + + for ( i = track; i < L_subfr; i += nb_tracks ) + { + dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ); + alp_pos0 += nb_tracks; + alp_pos1 += nb_tracks; + } + + m[2] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[2] ); + } + + /*-----------------------------------------------------------------* + * Fourth pulse search + *-----------------------------------------------------------------*/ + + if ( nb_pulse >= 4 ) + { + Gn += s[2] * dn_orig[m[2]]; + Gd += alp[0] + 2 * s[0] * s[2] * alp[m[0] - m[2]] + 2 * s[1] * s[2] * alp[m[1] - m[2]]; + G = Gn; + G1 = G * s[1]; + G2 = G * s[2]; + G *= s[0]; + + track = track_order[q * nb_tracks + 3]; + alp_pos0 = alp - m[0] + track; + alp_pos1 = alp - m[1] + track; + alp_pos2 = alp - m[2] + track; + + for ( i = track; i < L_subfr; i += nb_tracks ) + { + dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ) - G2 * ( *alp_pos2 ); + alp_pos0 += nb_tracks; + alp_pos1 += nb_tracks; + alp_pos2 += nb_tracks; + } + + m[3] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[3] ); + } + else + { + skip_track[q] = track_order[q * nb_tracks + 3]; + } + + /*-----------------------------------------------------------------* + * Fifth pulse search + *-----------------------------------------------------------------*/ + + if ( nb_pulse >= 5 ) + { + Gn += s[3] * dn_orig[m[3]]; + Gd += alp[0] + 2 * s[0] * s[3] * alp[m[0] - m[3]] + 2 * s[1] * s[3] * alp[m[1] - m[3]] + 2 * s[2] * s[3] * alp[m[2] - m[3]]; + G = Gn; + G1 = G * s[1]; + G2 = G * s[2]; + G3 = G * s[3]; + G *= s[0]; + + if ( cdk_index == 6 ) + { + track = 0; /* always track 0 */ + + alp_pos0 = alp - m[0]; + alp_pos1 = alp - m[1]; + alp_pos2 = alp - m[2]; + alp_pos3 = alp - m[3]; + + for ( i = track; i < L_subfr; i += nb_tracks ) + { + dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ) - G2 * ( *alp_pos2 ) - G3 * ( *alp_pos3 ); + alp_pos0 += nb_tracks; + alp_pos1 += nb_tracks; + alp_pos2 += nb_tracks; + alp_pos3 += nb_tracks; + } + + m[4] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[4] ); + } + else /* cdk_index == 7 (26 bits codebook) */ + { + alp_pos0 = alp - m[0]; + alp_pos1 = alp - m[1]; + alp_pos2 = alp - m[2]; + alp_pos3 = alp - m[3]; + + for ( i = 0; i < L_subfr; i++ ) + { + dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ) - G2 * ( *alp_pos2 ) - G3 * ( *alp_pos3 ); + alp_pos0++; + alp_pos1++; + alp_pos2++; + alp_pos3++; + } + + i = emaximum( dn, L_subfr, &temp ); + track = i % nb_tracks; + + m[4] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[4] ); + } + skip_track[q] = track; + } + + /*-----------------------------------------------------------------* + * - Build the filtered codeword and criterion computing. + * - Memorize the best code positions & signs, and the best filtered codevector. + *-----------------------------------------------------------------*/ + + crit_num = 0.0f; + set_zero( y_tmp, L_subfr ); + + for ( j = 0; j < nb_pulse; j++ ) + { + p_hn = ( ( s[j] > 0 ) ? h - m[j] : h_inv - m[j] ); + + for ( i = 0; i < L_subfr; i++ ) + { + y_tmp[i] += *p_hn++; + } + + crit_num += s[j] * dn_orig[m[j]]; + } + + crit_num = crit_num * crit_num; + crit_den = sum2_f( y_tmp, L_subfr ); + + if ( crit_num * crit_den_max >= crit_den * crit_num_max ) + { + crit_num_max = crit_num; + crit_den_max = crit_den; + + for ( j = 0; j < nb_pulse; j++ ) + { + m_max[j] = m[j]; + s_max[j] = s[j]; + } + + mvr2r( y_tmp, y, L_subfr ); + skip_track_max = skip_track[q]; + } + } + + /*-----------------------------------------------------------------* + * Reconstruct the best codevector, + * compute index of codevector and write it into the bitstream. + *-----------------------------------------------------------------*/ + + set_zero( code, L_subfr ); + for ( q = 0; q < nb_pulse; q++ ) + { + code[m_max[q]] += s_max[q]; + } + + if ( bits == 12 || bits == 14 ) + { + /* 12 bits, 2 pulses, 2 tracks 11 used all tracks */ + i = 6; + j = 0x800; + q = 0x20; + + if ( L_subfr == 2 * L_SUBFR ) + { + /* 14 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ + i = 7; + j = 0x2000; + q = 0x40; + } + + if ( m_max[0] % NB_TRACK_FCB_2T == 1 ) + { + idx = ( ( m_max[1] / NB_TRACK_FCB_2T ) << i ) + ( m_max[0] / NB_TRACK_FCB_2T ); + + if ( s_max[1] < 0.0f ) + { + idx += j; + } + + if ( s_max[0] < 0.0f ) + { + idx += q; + } + } + else + { + idx = ( ( m_max[0] / NB_TRACK_FCB_2T ) << i ) + ( m_max[1] / NB_TRACK_FCB_2T ); + + if ( s_max[0] < 0.0f ) + { + idx += j; + } + + if ( s_max[1] < 0.0f ) + { + idx += q; + } + } + + push_indice( hBstr, IND_ALG_CDBK_2T32, idx, bits ); + } + else + { + /* compute index of codevector */ + set_s( ind_stream, -1, NPMAXPT * nb_tracks ); + + bits_track = 4; + nb_pos = NB_POS_FCB_4T; + + if ( L_subfr == 2 * L_SUBFR ) + { + bits_track = 5; + nb_pos = NB_POS_FCB_4T_128; + } + + for ( q = 0; q < nb_pulse; q++ ) + { + i = ( m_max[q] % NB_TRACK_FCB_4T ) * NPMAXPT; /* track number */ + if ( ind_stream[i] >= 0 ) + { + i++; + } + ind_stream[i] = m_max[q] / NB_TRACK_FCB_4T; /* pos of pulse */ + + if ( s_max[q] < 0 ) + { + ind_stream[i] += nb_pos; + } + } + + if ( codetrackpos == TRACKPOS_FREE_THREE || codetrackpos == TRACKPOS_FREE_ONE ) + { + push_indice( hBstr, IND_ALG_CDBK_4T64, skip_track_max, 2 ); + } + + if ( nb_pulse < 5 ) + { + for ( q = 0; q < NB_TRACK_FCB_4T; q++ ) + { + j = q * NPMAXPT; + if ( ind_stream[j] != -1 ) + { + idx = quant_1p_N1_L_subfr( nb_pos, ind_stream[j], bits_track ); + push_indice( hBstr, IND_ALG_CDBK_4T64, idx, bits_track + 1 ); + } + } + } + else + { + for ( q = 0; q < NB_TRACK_FCB_4T; q++ ) + { + j = q * NPMAXPT; + if ( q == skip_track_max ) + { + idx = quant_2p_2N1( ind_stream[j], ind_stream[j + 1], bits_track ); + push_indice( hBstr, IND_ALG_CDBK_4T64, idx, ( 2 * bits_track ) + 1 ); + } + else + { + idx = quant_1p_N1_L_subfr( nb_pos, ind_stream[j], bits_track ); + push_indice( hBstr, IND_ALG_CDBK_4T64, idx, bits_track + 1 ); + } + } + } + } + + return; +} diff --git a/lib_enc/cod_ace.c b/lib_enc/cod_ace.c new file mode 100644 index 0000000000..091146298a --- /dev/null +++ b/lib_enc/cod_ace.c @@ -0,0 +1,441 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "prot.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * coder_acelp() + * + * Encode ACELP frame + *-------------------------------------------------------------------*/ + +void coder_acelp( + Encoder_State *st, /* i/o: coder memory state */ + const float A[], /* i : coefficients 4xAz[M+1] */ + const float Aq[], /* i : coefficients 4xAz_q[M+1] */ + const float speech[], /* i : speech[-M..lg] */ + LPD_state *LPDmem, /* i/o: ACELP memories */ + int16_t *prm, /* o : acelp parameters */ + const float stab_fac, + const int16_t target_bits, + float *gain_pitch_buf, /* o : gain pitch values */ + float *gain_code_buf, /* o : gain code values */ + float *pitch_buf, /* o : pitch values for each subfr.*/ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +) +{ + int16_t i, i_subfr; + int16_t T0, T0_min, T0_min_frac, T0_max, T0_max_frac, T0_res, T0_frac; + float tmp, Es_pred; + float gain_pit, gain_code, voice_fac; + ACELP_CbkCorr g_corr; + float g_corr2[6]; + const float *p_A, *p_Aq; + float h1[L_SUBFR]; /* weighted impulse response of LP */ + float code[L_SUBFR]; + float cn[L_SUBFR]; + float xn[L_SUBFR]; + float xn2[L_SUBFR]; + float y1[L_SUBFR]; /* Filtered adaptive excitation */ + float y2[L_SUBFR]; /* Filtered adaptive excitation */ + float res_save; + float exc_buf[L_EXC_MEM + L_FRAME16k + 1], *exc; + float exc2[L_SUBFR]; + float *syn, syn_buf[M + L_FRAME16k + L_FRAME16k / 2]; /*128 for the memory, L_FRAME for the current synth and 128 for the ZIR for next TCX*/ + float syn2[L_FRAME16k]; + float norm_gain_code, gain_inov; + int16_t clip_gain; + float gain_code2; + float code2[L_SUBFR]; + float y22[L_SUBFR]; /* Filtered adaptive excitation */ + int16_t lp_select; + float *pt_pitch, *pt_gain_pitch, *pt_gain_code; + float error; + float gain_preQ; /* Gain of prequantizer excitation */ + float code_preQ[L_SUBFR]; /* Prequantizer excitation */ + ACELP_config *acelp_cfg; + + acelp_cfg = &( st->acelp_cfg ); + + /* Configure ACELP */ + BITS_ALLOC_config_acelp( target_bits, st->coder_type, acelp_cfg, st->narrowBand, st->nb_subfr ); + + /*------------------------------------------------------------------------* + * Initialize buffers * + *------------------------------------------------------------------------*/ + + set_f( code_preQ, 0.f, L_SUBFR ); + gain_preQ = 0.0f; + + /* Reset phase dispersion */ + if ( st->last_core > ACELP_CORE ) + { + set_zero( st->hLPDmem->dispMem, 8 ); + } + + /* set excitation memory*/ + exc = exc_buf + L_EXC_MEM; + mvr2r( LPDmem->old_exc, exc_buf, L_EXC_MEM ); + *( exc + st->L_frame ) = 0.f; /*to solve a warning*/ + + /* Init syn buffer */ + syn = syn_buf + M; + mvr2r( LPDmem->mem_syn, syn_buf, M ); + + pt_pitch = pitch_buf; + pt_gain_pitch = gain_pitch_buf; + pt_gain_code = gain_code_buf; + + T0 = 0; + T0_res = 0; + T0_frac = 0; + + error = 0.0f; + + /*---------------------------------------------------------------* + * Calculation of LP residual (filtering through A[z] filter) + *---------------------------------------------------------------*/ + + calc_residu( speech, exc, Aq, st->L_frame ); + + /*------------------------------------------------------------------------* + * Find and quantize mean_ener_code for gain quantizer * + *------------------------------------------------------------------------*/ + + if ( acelp_cfg->nrg_mode > 0 ) + { + Es_pred_enc( &Es_pred, prm, st->L_frame, L_SUBFR, exc, st->voicing, acelp_cfg->nrg_bits, acelp_cfg->nrg_mode > 1 ); + prm++; + } + else + { + Es_pred = 0.f; + } + + if ( st->L_frame == L_FRAME ) + { + mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + else + { + mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); + } + + /*------------------------------------------------------------------------* + * Loop for every subframe in the analysis frame * + *------------------------------------------------------------------------* + * To find the pitch and innovation parameters. The subframe size is * + * L_SUBFR and the loop is repeated L_FRAME_PLUS/L_SUBFR times. * + * - compute impulse response of weighted synthesis filter (h1[]) * + * - compute the target signal for pitch search * + * - find the closed-loop pitch parameters * + * - encode the pitch delay * + * - update the impulse response h1[] by including fixed-gain pitch * + * - find target vector for codebook search * + * - correlation between target vector and impulse response * + * - codebook search * + * - encode codebook address * + * - VQ of pitch and codebook gains * + * - find synthesis speech * + * - update states of weighting filter * + *------------------------------------------------------------------------*/ + + p_A = A; + p_Aq = Aq; + + res_save = exc[0]; + + for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_SUBFR ) + { + /* Restore exc[i_subfr] and save next exc[L_SUBFR+i_subfr] */ + exc[i_subfr] = res_save; + res_save = exc[L_SUBFR + i_subfr]; + + /*--------------------------------------------------------------------------* + * Find target for pitch search (xn[]), target for innovation search (cn[]) * + * and impulse response of the weighted synthesis filter (h1[]). * + *--------------------------------------------------------------------------*/ + + find_targets( speech, &syn[i_subfr - M], i_subfr, &LPDmem->mem_w0, p_Aq, exc, L_SUBFR, p_A, st->preemph_fac, xn, cn, h1 ); + + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + * or in case of floating point encoder & fixed p. decoder + *-----------------------------------------------------------------*/ + + clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, st->coder_type, xn, st->clip_var ); + + /*-----------------------------------------------------------------* + * - find unity gain pitch excitation (adaptive codebook entry) * + * with fractional interpolation. * + * - find filtered pitch exc. y1[]=exc[] convolved with h1[]) * + * - compute pitch gain1 * + *-----------------------------------------------------------------*/ + + if ( acelp_cfg->ltp_bits != 0 ) + { + /* pitch lag coding */ + Mode2_pit_encode( acelp_cfg->ltp_mode, i_subfr, &prm, &exc[i_subfr], st->pitch, &T0_min, &T0_min_frac, &T0_max, &T0_max_frac, &T0, &T0_frac, &T0_res, h1, xn, st->pit_min, st->pit_fr1, st->pit_fr1b, st->pit_fr2, st->pit_max, st->pit_res_max ); + + /* find pitch excitation */ + if ( st->pit_res_max == 6 ) + { + if ( T0_res == ( st->pit_res_max >> 1 ) ) + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); + } + else + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); + } + } + else + { + if ( T0_res == ( st->pit_res_max >> 1 ) ) + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + } + else + { + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + } + } + + /* filter adaptive codebook */ + lp_select = lp_filt_exc_enc( MODE2, st->coder_type, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr2, clip_gain, &( gain_pit ), &( acelp_cfg->ltf_mode ) ); + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + *prm = lp_select; + prm++; + } + + g_corr.y1y1 = g_corr2[0]; + g_corr.xy1 = -0.5f * ( g_corr2[1] - 0.01f ) + 0.01f; + } + else + { + /* No adaptive codebook (UC) */ + gain_pit = 0.f; + g_corr.xy1 = 0.f; + g_corr.y1y1 = 0.f; + set_zero( y1, L_SUBFR ); + set_zero( exc + i_subfr, L_SUBFR ); + T0 = L_SUBFR; + T0_frac = 0; + T0_res = 1; + } + + if ( st->igf ) + { + tbe_celp_exc( st->element_mode, st->idchan, bwe_exc, st->L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error, 0 ); + } + + pitch_buf[i_subfr / L_SUBFR] = (float) T0 + (float) T0_frac / (float) T0_res; + + /*----------------------------------------------------------------------* + * Encode the algebraic innovation * + *----------------------------------------------------------------------*/ + + E_ACELP_innovative_codebook( exc, T0, T0_frac, T0_res, gain_pit, LPDmem->tilt_code, acelp_cfg, i_subfr, p_Aq, h1, xn, cn, y1, y2, st->acelp_autocorr, &prm, code, st->L_frame, st->last_L_frame, st->total_brate ); + + E_corr_xy2( xn, y1, y2, g_corr2, L_SUBFR ); + g_corr.y2y2 = 0.01F + g_corr2[2]; + g_corr.xy2 = 0.01F + -0.5f * g_corr2[3]; + g_corr.y1y2 = 0.01F + 0.5f * g_corr2[4]; + + g_corr.xx = 0.01F + dotp( xn, xn, L_SUBFR ); + + /*----------------------------------------------------------------------* + * Add Gaussian excitation * + *----------------------------------------------------------------------*/ + + if ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] == 7 ) + { + assert( gain_pit == 0.f ); + + gauss_L2( h1, code2, y2, y22, &gain_code2, g_corr2, LPDmem->tilt_code, p_Aq, acelp_cfg->formant_enh_num, &( st->seed_acelp ) ); + + g_corr.y1y1 = g_corr2[0]; + g_corr.y1y2 = g_corr2[4]; + } + else + { + gain_code2 = 0.f; + set_zero( code2, L_SUBFR ); + set_zero( y22, L_SUBFR ); + } + + /*----------------------------------------------------------* + * - Compute the fixed codebook gain * + * - quantize fixed codebook gain * + *----------------------------------------------------------*/ + + encode_acelp_gains( code, acelp_cfg->gains_mode[i_subfr / L_SUBFR], Es_pred, clip_gain, &g_corr, &gain_pit, &gain_code, &prm, &norm_gain_code, &gain_inov, L_SUBFR, code2, &gain_code2, st->flag_noisy_speech_snr ); + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); + + /*----------------------------------------------------------* + * - voice factor (for codebook tilt sharpening) * + *----------------------------------------------------------*/ + + LPDmem->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, acelp_cfg->voice_tilt ); + + if ( st->Opt_RF_ON ) + { + st->hRF->rf_tilt_buf[i_subfr / L_SUBFR] = LPDmem->tilt_code; + } + + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + LPDmem->mem_w0 = xn[L_SUBFR - 1] - gain_pit * y1[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1] - gain_code2 * y22[L_SUBFR - 1]; + + /*-------------------------------------------------------* + * - Find the total excitation. * + *-------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i] = gain_pit * exc[i + i_subfr]; + exc2[i] += gain_code2 * code2[i]; + exc[i + i_subfr] = exc2[i] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + prep_tbe_exc( st->L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, 0, 0 ); + + /*---------------------------------------------------------* + * Enhance the excitation * + *---------------------------------------------------------*/ + + enhancer( MODE2, -1, acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR], 0, st->coder_type, st->L_frame, voice_fac, stab_fac, norm_gain_code, gain_inov, &( LPDmem->gc_threshold ), code, exc2, gain_pit, LPDmem->dispMem ); + + /*----------------------------------------------------------* + * - compute the synthesis speech * + *----------------------------------------------------------*/ + + syn_filt( p_Aq, M, exc2, &syn2[i_subfr], L_SUBFR, LPDmem->mem_syn2, 1 ); + + syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, &syn[i_subfr - M], 0 ); + + /*----------------------------------------------------------* + * Save buffers for BPF * + *----------------------------------------------------------*/ + + *pt_pitch = ( (float) T0 + (float) T0_frac / (float) T0_res + 0.5f ); + *pt_gain_pitch = gain_pit; + *pt_gain_code = gain_code; + + /*----------------------------------------------------------* + * Update * + *----------------------------------------------------------*/ + + p_A += ( M + 1 ); + p_Aq += ( M + 1 ); + pt_pitch++; + pt_gain_pitch++; + pt_gain_code++; + + if ( st->hPlcExt != NULL ) + { + st->hPlcExt->T0_4th = T0; + } + + } /* end of subframe loop */ + + p_A -= ( M + 1 ); + p_Aq -= ( M + 1 ); + +#ifdef DEBUGGING + /* SNR measuremenet of CELP output */ + if ( st->idchan == 0 ) + { + snr_celp( st->L_frame, L_SUBFR, st->gamma, st->preemph_fac, st->vad_flag, st->coder_type, speech, syn, A, 0, "CELP_output" ); + } + else + { + snr_celp( st->L_frame, L_SUBFR, st->gamma, st->preemph_fac, st->vad_flag, st->coder_type, speech, syn, A, 1, "CELP_output_chan2" ); + } +#endif + + /*----------------------------------------------------------* + * Update LPD memory * + *----------------------------------------------------------*/ + + mvr2r( exc + st->L_frame - L_EXC_MEM, LPDmem->old_exc, L_EXC_MEM ); + mvr2r( syn + st->L_frame - M, LPDmem->mem_syn, M ); + mvr2r( syn + st->L_frame - L_SYN_MEM, LPDmem->mem_syn_r, L_SYN_MEM ); + + if ( st->hPlcExt != NULL ) + { + mvr2r( exc + st->L_frame - L_EXC_MEM - 8, st->hPlcExt->old_exc, 8 ); + } + + /*----------------------------------------------------------* + * ZIR at the end of the ACELP frame (for TCX) * + *----------------------------------------------------------*/ + + mvr2r( syn2, syn, st->L_frame ); + tmp = LPDmem->syn[M]; + deemph( syn, st->preemph_fac, st->L_frame, &tmp ); + if ( st->hTcxEnc != NULL ) + { + mvr2r( syn + st->L_frame / 2, st->hTcxEnc->Txnq, st->L_frame / 2 ); + } + mvr2r( syn + st->L_frame - ( M + 1 ), LPDmem->syn, M + 1 ); + mvr2r( syn, st->synth, st->L_frame ); + + /*Update MODE1*/ + mvr2r( p_Aq, st->old_Aq_12_8, M + 1 ); + st->old_Es_pred = Es_pred; + + return; +} diff --git a/lib_enc/cod_tcx.c b/lib_enc/cod_tcx.c new file mode 100644 index 0000000000..2ac9ca9aca --- /dev/null +++ b/lib_enc/cod_tcx.c @@ -0,0 +1,2201 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include +#endif +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + +/*-------------------------------------------------------------------* + * HBAutocorrelation() + * + * + *-------------------------------------------------------------------*/ + +void HBAutocorrelation( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const int16_t left_overlap_mode, /* i : overlap mode of left window half */ + const int16_t right_overlap_mode, /* i : overlap mode of right window half */ + float speech[], /* i : synthesis */ + int16_t L_frame, /* i : frame length */ + float *r /* o : autocorrelations vector */ +) +{ + int16_t i, j, left_overlap, right_overlap; + float s; + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + + /*-----------------------------------------------------------* + * Windowing * + *-----------------------------------------------------------*/ + + WindowSignal( hTcxCfg, hTcxCfg->tcx_offset, left_overlap_mode, right_overlap_mode, &left_overlap, &right_overlap, speech, &L_frame, xn_buf, 1, 0, 0 ); + + /*-----------------------------------------------------------* + * Autocorrelation * + *-----------------------------------------------------------*/ + + for ( i = 0; i <= M; i++ ) + { + s = 0.0; + + for ( j = 0; j < L_frame + ( left_overlap + right_overlap ) / 2 - i; j++ ) + { + s += xn_buf[j] * xn_buf[j + i]; + } + r[i] = s; + } + + if ( r[0] < 100.0 ) + { + r[0] = 100.0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * TNSAnalysisStereo() + * + * + *-------------------------------------------------------------------*/ + +#define SIMILAR_TNS_THRESHOLD ( 0.04f ) +#define TNS_GAIN_THRESHOLD_FOR_WHITE ( 3.0f ) + +void TNSAnalysisStereo( + Encoder_State **sts, /* i : encoder state handle */ + float *mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* o : MDST spectrum */ + const int16_t bWhitenedDomain, /* i : whitened domain flag */ + int16_t tnsSize[MCT_MAX_CHANNELS][NB_DIV], /* i : number of tns parameters put into prm */ + int16_t tnsBits[MCT_MAX_CHANNELS][NB_DIV], /* i : number of tns bits in the frame */ + int16_t param_core[][NB_DIV * NPRM_DIV], /* o : TNS parameters */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +) +{ + int16_t ch, k, L_spec, L_frame, nSubframes, iFilter; + float *spectrum; + Encoder_State *st = NULL; + TCX_ENC_HANDLE hTcxEnc = NULL; + int16_t individual_decision[NB_DIV]; + float maxPredictionGain = 0.f, meanPredictionGain; + + individual_decision[0] = 0; + individual_decision[1] = 0; + L_spec = -1; + L_frame = -1; + + /* TNS filter analysis, loop over channels */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + hTcxEnc = st->hTcxEnc; + + nSubframes = ( hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( k = 0; k < nSubframes; k++ ) + { + /* reset tns on whitened domain flag */ + if ( !bWhitenedDomain ) + { + hTcxEnc->bTnsOnWhithenedSpectra[k] = 0; + hTcxEnc->fUseTns[k] = 0; + } + + if ( st->hTcxCfg->fIsTNSAllowed && ( !bWhitenedDomain || hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) + { + + spectrum = hTcxEnc->spectrum[k]; + L_frame = hTcxEnc->L_frameTCX; + st->hTcxCfg->pCurrentTnsConfig = &st->hTcxCfg->tnsConfig[hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( st->last_core == ACELP_CORE )]; + L_spec = st->hTcxCfg->pCurrentTnsConfig->iFilterBorders[0]; + + /*-----------------------------------------------------------* + * Temporal Noise Shaping analysis * + *-----------------------------------------------------------*/ + + if ( hTcxEnc->transform_type[k] == TCX_5 ) + { + /* rearrange LF sub-window lines prior to TNS analysis & filtering */ + tcx5TnsGrouping( L_frame >> 2, L_spec >> 1, spectrum ); + } + + /* WMOPS: All initializations are either for safety or static (tables) and thus not to be counted */ + ResetTnsData( &hTcxEnc->tnsData[k] ); + if ( st->hTcxCfg->pCurrentTnsConfig->maxOrder <= 0 ) + { + break; + } + + CalculateTnsFilt( st->hTcxCfg->pCurrentTnsConfig, spectrum, &hTcxEnc->tnsData[k], NULL ); + } + } + } + + if ( !mct_on ) + { + /* TNS decision */ + /* if framing differs between channels, keep the filter decision per channel */ + if ( ( sts[0]->hTcxEnc->transform_type[0] != sts[1]->hTcxEnc->transform_type[0] && + sts[0]->hTcxEnc->transform_type[1] != sts[1]->hTcxEnc->transform_type[1] ) || + sts[0]->hTcxCfg->fIsTNSAllowed != sts[1]->hTcxCfg->fIsTNSAllowed ) + { + individual_decision[0] = individual_decision[1] = 1; + } + else if ( bWhitenedDomain ) + { + nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + for ( k = 0; k < nSubframes; k++ ) + { + if ( sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] != sts[1]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) + { + individual_decision[k] = 1; + } + } + } + + /* framing equal, check for similar filters, if very similar (also indicator for and M signal), + * use at least the same decision, maybe use the same filter + */ + { + int16_t isTCX10; + isTCX10 = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 0 : 1; + + nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( k = 0; k < nSubframes; k++ ) + { + if ( sts[0]->hTcxCfg->fIsTNSAllowed && individual_decision[k] != 1 && ( !bWhitenedDomain || sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) + { + float maxPredGain = -1.0f; + sts[0]->hTcxCfg->pCurrentTnsConfig = &sts[0]->hTcxCfg->tnsConfig[sts[0]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[0]->last_core == ACELP_CORE )]; + sts[1]->hTcxCfg->pCurrentTnsConfig = &sts[1]->hTcxCfg->tnsConfig[sts[1]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[1]->last_core == ACELP_CORE )]; + +#ifdef DEBUGGING + assert( sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters == sts[1]->hTcxCfg->pCurrentTnsConfig->nMaxFilters ); +#endif + for ( iFilter = sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + STnsFilter *pFilter[2]; + struct TnsParameters const *pTnsParameters[2]; + pFilter[0] = sts[0]->hTcxEnc->tnsData[k].filter + iFilter; + pTnsParameters[0] = sts[0]->hTcxCfg->pCurrentTnsConfig->pTnsParameters + iFilter; + pFilter[1] = sts[1]->hTcxEnc->tnsData[k].filter + iFilter; + pTnsParameters[1] = sts[1]->hTcxCfg->pCurrentTnsConfig->pTnsParameters + iFilter; + +#ifdef DEBUGGING + assert( pTnsParameters[0]->startLineFrequency == pTnsParameters[1]->startLineFrequency ); + assert( pTnsParameters[0]->nSubdivisions == pTnsParameters[1]->nSubdivisions ); +#endif + /* if prediction gain and avgSqrCoef are both close we are pretty sure the filters are quite similar, use the avg of + * both filters for the decision + */ + meanPredictionGain = ( pFilter[0]->predictionGain + pFilter[1]->predictionGain ) * 0.5f; + maxPredictionGain = max( maxPredictionGain, meanPredictionGain ); + + if ( ( pFilter[0]->predictionGain > pTnsParameters[0]->minPredictionGain ) && ( sts[0]->element_brate < IVAS_80k ) && + ( pFilter[1]->predictionGain > pTnsParameters[1]->minPredictionGain ) && ( sts[0]->hTcxEnc->tnsData[k].nFilters == sts[1]->hTcxEnc->tnsData[k].nFilters ) ) + { + pFilter[0]->predictionGain = pFilter[1]->predictionGain = meanPredictionGain; /* more TNS filter sync at 48kbps */ + } + if ( ( fabs( pFilter[0]->predictionGain - pFilter[1]->predictionGain ) < SIMILAR_TNS_THRESHOLD * meanPredictionGain ) && + ( sts[0]->hTcxEnc->tnsData[k].nFilters == sts[1]->hTcxEnc->tnsData[k].nFilters ) ) + { + float maxAvgSqrCoef = max( pFilter[0]->avgSqrCoef, pFilter[1]->avgSqrCoef ); + float meanLtpGain = ( sts[0]->hTcxEnc->tcxltp_gain + sts[1]->hTcxEnc->tcxltp_gain ) * 0.5f; + maxPredGain = max( maxPredGain, meanPredictionGain ); + if ( ( meanPredictionGain > pTnsParameters[0]->minPredictionGain ) || ( maxAvgSqrCoef > pTnsParameters[0]->minAvgSqrCoef ) ) + { + if ( sts[0]->hTcxEnc->tnsData[k].nFilters > 0 || sts[1]->hTcxEnc->tnsData[k].nFilters > 0 || isTCX10 || meanLtpGain < 0.6f ) + { + ++sts[0]->hTcxEnc->tnsData[k].nFilters; + pFilter[0]->filterType = TNS_FILTER_ON; + ++sts[1]->hTcxEnc->tnsData[k].nFilters; + pFilter[1]->filterType = TNS_FILTER_ON; + } + else + { + const float maxEnergyChange = ( GetTCXMaxenergyChange( sts[0]->hTranDet, isTCX10, NSUBBLOCKS, 3 ) + GetTCXMaxenergyChange( sts[1]->hTranDet, isTCX10, NSUBBLOCKS, 3 ) ) * 0.5f; + + if ( maxEnergyChange >= pTnsParameters[0]->minEnergyChange ) + { + ++sts[0]->hTcxEnc->tnsData[k].nFilters; + pFilter[0]->filterType = TNS_FILTER_ON; + ++sts[1]->hTcxEnc->tnsData[k].nFilters; + pFilter[1]->filterType = TNS_FILTER_ON; + } + else + { + pFilter[0]->filterType = TNS_FILTER_OFF; + pFilter[1]->filterType = TNS_FILTER_OFF; + } + } + } + else if ( sts[0]->hTcxEnc->tnsData[k].nFilters > 0 && sts[1]->hTcxEnc->tnsData[k].nFilters > 0 ) /* If a previous filter is turned on */ + { + pFilter[0]->filterType = TNS_FILTER_ON_ZERO; + pFilter[1]->filterType = TNS_FILTER_ON_ZERO; + ++sts[0]->hTcxEnc->tnsData[k].nFilters; + ++sts[1]->hTcxEnc->tnsData[k].nFilters; + } + else if ( sts[0]->hTcxEnc->tnsData[k].nFilters != sts[1]->hTcxEnc->tnsData[k].nFilters ) /* sanity check */ + { + assert( 0 ); + } + else + { + pFilter[0]->filterType = TNS_FILTER_OFF; + pFilter[1]->filterType = TNS_FILTER_OFF; + } + if ( ( pFilter[0]->filterType == TNS_FILTER_ON ) && ( pFilter[1]->filterType == TNS_FILTER_ON ) && ( sts[0]->element_brate < IVAS_80k ) ) + { + int16_t tmpIntValue = 0; + int16_t tmpCoeff[TNS_MAX_FILTER_ORDER]; + int16_t i, maxOrder = max( pFilter[0]->order, pFilter[1]->order ); + + set_s( tmpCoeff, 0, TNS_MAX_FILTER_ORDER ); + for ( i = 0; i < maxOrder; i++ ) + { + tmpIntValue = (int16_t) max( tmpIntValue, abs( pFilter[0]->coefIndex[i] - pFilter[1]->coefIndex[i] ) ); + } + if ( tmpIntValue == 1 ) /* the TNS coefficients are sufficiently similar to equalize the two filters */ + { + for ( i = maxOrder - 1; i >= 0; i-- ) + { + tmpCoeff[i] = ( abs( pFilter[0]->coefIndex[i] ) < abs( pFilter[1]->coefIndex[i] ) ? pFilter[0]->coefIndex[i] : pFilter[1]->coefIndex[i] ); + if ( ( tmpIntValue > 0 ) && ( tmpCoeff[i] == 0 ) ) + { + maxOrder--; + } + else + { + tmpIntValue = 0; + } + } + /* make sure that maxOrder is non zero and not all coefficients are zero (could happen in rare cases) */ + if ( maxOrder > 0 ) + { + for ( i = TNS_MAX_FILTER_ORDER - 1; i >= 0; i-- ) + { + pFilter[0]->coefIndex[i] = pFilter[1]->coefIndex[i] = tmpCoeff[i]; + } + + pFilter[0]->order = pFilter[1]->order = maxOrder; + } + } + } + } + else + { + individual_decision[k] = 1; + } + } + + if ( individual_decision[k] == 0 ) + { + sts[0]->hTcxEnc->fUseTns[k] = ( sts[0]->hTcxEnc->tnsData[k].nFilters > 0 ) ? 1 : 0; + sts[1]->hTcxEnc->fUseTns[k] = ( sts[1]->hTcxEnc->tnsData[k].nFilters > 0 ) ? 1 : 0; + } + else + { + sts[0]->hTcxEnc->tnsData[k].nFilters = 0; + sts[1]->hTcxEnc->tnsData[k].nFilters = 0; + sts[0]->hTcxEnc->fUseTns[k] = 0; + sts[1]->hTcxEnc->fUseTns[k] = 0; + for ( iFilter = sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + sts[0]->hTcxEnc->tnsData[k].filter[iFilter].filterType = TNS_FILTER_OFF; + sts[1]->hTcxEnc->tnsData[k].filter[iFilter].filterType = TNS_FILTER_OFF; + } + } + + if ( !bWhitenedDomain && individual_decision[k] == 0 && maxPredGain < TNS_GAIN_THRESHOLD_FOR_WHITE && sts[0]->hTcxEnc->transform_type[k] != TCX_5 ) + { + sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] = 1; + sts[1]->hTcxEnc->bTnsOnWhithenedSpectra[k] = 1; + sts[0]->hTcxEnc->tnsData[k].nFilters = 0; + sts[1]->hTcxEnc->tnsData[k].nFilters = 0; + sts[0]->hTcxEnc->fUseTns[k] = 0; + sts[1]->hTcxEnc->fUseTns[k] = 0; + for ( iFilter = sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + ClearTnsFilterCoefficients( sts[0]->hTcxEnc->tnsData[k].filter + iFilter ); + ClearTnsFilterCoefficients( sts[1]->hTcxEnc->tnsData[k].filter + iFilter ); + } + } + maxPredictionGain = max( maxPredictionGain, maxPredGain ); + } + } + } + } + + /* individual decision for each channel */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + + int16_t isTCX10; + isTCX10 = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 0 : 1; + + nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( k = 0; k < nSubframes; k++ ) + { + if ( sts[ch]->hTcxCfg->fIsTNSAllowed && ( individual_decision[k] || mct_on ) && + ( !bWhitenedDomain || sts[ch]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) + { + float maxPredGain = -1.0f; + + sts[ch]->hTcxCfg->pCurrentTnsConfig = &sts[ch]->hTcxCfg->tnsConfig[sts[ch]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[ch]->last_core == ACELP_CORE )]; + + for ( iFilter = sts[ch]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + STnsFilter *pFilter; + const struct TnsParameters *pTnsParameters; + pFilter = sts[ch]->hTcxEnc->tnsData[k].filter + iFilter; + pTnsParameters = sts[ch]->hTcxCfg->pCurrentTnsConfig->pTnsParameters + iFilter; + maxPredGain = max( maxPredGain, pFilter->predictionGain ); + + if ( ( pFilter->predictionGain > pTnsParameters->minPredictionGain ) || ( pFilter->avgSqrCoef > pTnsParameters->minAvgSqrCoef ) ) + { + if ( sts[ch]->hTcxEnc->tnsData[k].nFilters > 0 || isTCX10 || sts[ch]->hTcxEnc->tcxltp_gain < 0.6f ) + { + ++sts[ch]->hTcxEnc->tnsData[k].nFilters; + pFilter->filterType = TNS_FILTER_ON; + } + else + { + const float maxEnergyChange = GetTCXMaxenergyChange( sts[ch]->hTranDet, isTCX10, NSUBBLOCKS, 3 ); + + if ( maxEnergyChange >= pTnsParameters->minEnergyChange ) + { + ++sts[ch]->hTcxEnc->tnsData[k].nFilters; + pFilter->filterType = TNS_FILTER_ON; + } + else + { + pFilter->filterType = TNS_FILTER_OFF; + } + } + } + else if ( sts[ch]->hTcxEnc->tnsData[k].nFilters > 0 ) /* If a previous filter is turned on */ + { + pFilter->filterType = TNS_FILTER_ON_ZERO; + ++sts[ch]->hTcxEnc->tnsData[k].nFilters; + } + else + { + pFilter->filterType = TNS_FILTER_OFF; + } + } + + sts[ch]->hTcxEnc->fUseTns[k] = ( sts[ch]->hTcxEnc->tnsData[k].nFilters > 0 ) ? 1 : 0; + + if ( !bWhitenedDomain && maxPredGain < TNS_GAIN_THRESHOLD_FOR_WHITE && sts[ch]->hTcxEnc->transform_type[k] != TCX_5 ) + { + sts[ch]->hTcxEnc->fUseTns[k] = 0; + sts[ch]->hTcxEnc->bTnsOnWhithenedSpectra[k] = 1; + sts[ch]->hTcxEnc->tnsData[k].nFilters = 0; + for ( iFilter = sts[ch]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + ClearTnsFilterCoefficients( sts[ch]->hTcxEnc->tnsData[k].filter + iFilter ); + sts[ch]->hTcxEnc->tnsData[k].filter[iFilter].filterType = TNS_FILTER_OFF; + } + } + maxPredictionGain = max( maxPredictionGain, maxPredGain ); + } + } + } + + + /* we have the decision, set filter data accordingly */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( k = 0; k < nSubframes; k++ ) + { + if ( sts[ch]->hTcxCfg->fIsTNSAllowed && ( !bWhitenedDomain || sts[ch]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) + { + sts[ch]->hTcxCfg->pCurrentTnsConfig = &sts[ch]->hTcxCfg->tnsConfig[sts[ch]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[ch]->last_core == ACELP_CORE )]; + + for ( iFilter = sts[ch]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + STnsFilter *pFilter; + pFilter = sts[ch]->hTcxEnc->tnsData[k].filter + iFilter; + switch ( pFilter->filterType ) + { + case TNS_FILTER_OFF: + ClearTnsFilterCoefficients( sts[ch]->hTcxEnc->tnsData[k].filter + iFilter ); + break; + case TNS_FILTER_ON_ZERO: + /* Since TNS filter of order 0 is not allowed we have to signal in the stream filter of order 1 with the 0th coefficient equal to 0 */ + ClearTnsFilterCoefficients( pFilter ); + pFilter->order = 1; + break; + } + } + } + } + } + + /* Apply filters, loop over channels */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( k = 0; k < nSubframes; k++ ) + { + if ( bWhitenedDomain && ( ch > 0 ) && /* test for identical TNS filter data in both channels */ + sts[0]->hTcxCfg->fIsTNSAllowed && sts[0]->hTcxEnc->fUseTns[k] && + sts[1]->hTcxCfg->fIsTNSAllowed && sts[1]->hTcxEnc->fUseTns[k] ) + { + int16_t equalFilterData = ( sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters == sts[1]->hTcxCfg->pCurrentTnsConfig->nMaxFilters && + sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] == sts[1]->hTcxEnc->bTnsOnWhithenedSpectra[k] && + sts[0]->hTcxEnc->tnsData[k].nFilters == sts[1]->hTcxEnc->tnsData[k].nFilters ) + ? 1 + : 0; + if ( equalFilterData ) + { + for ( iFilter = st->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + const int16_t *pDataCh0 = (const int16_t *) &sts[0]->hTcxEnc->tnsData[k].filter[iFilter]; + const int16_t *pDataCh1 = (const int16_t *) &sts[1]->hTcxEnc->tnsData[k].filter[iFilter]; + int16_t i = 2 + TNS_MAX_FILTER_ORDER; /* excl. informative float data. Portable? */ + + while ( ( i >= 0 ) && ( pDataCh0[i] == pDataCh1[i] ) ) + { + i--; + } + if ( i >= 0 ) + { + equalFilterData = 0; + break; + } + } + if ( equalFilterData ) + { + st->hTcxEnc->tnsData[k].nFilters *= -1; /* signals common TNS */ + } + } + } + if ( st->hTcxCfg->fIsTNSAllowed && ( !bWhitenedDomain || st->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) + { + L_spec = st->hTcxCfg->pCurrentTnsConfig->iFilterBorders[0]; + spectrum = st->hTcxEnc->spectrum[k]; + /* If TNS should be used then get the residual after applying it inplace in the spectrum */ + if ( st->hTcxEnc->fUseTns[k] ) + { + st->hTcxCfg->pCurrentTnsConfig = &st->hTcxCfg->tnsConfig[st->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( st->last_core == ACELP_CORE )]; + + ApplyTnsFilter( st->hTcxCfg->pCurrentTnsConfig, &st->hTcxEnc->tnsData[k], spectrum, 1 ); + } + + if ( st->hTcxEnc->transform_type[k] == TCX_5 ) + { + tcx5TnsUngrouping( L_frame >> 2, L_spec >> 1, st->hTcxEnc->spectrum[k], ENC ); + } + + st->hTcxEnc->tnsData[k].tnsOnWhitenedSpectra = st->hTcxEnc->bTnsOnWhithenedSpectra[k]; + + EncodeTnsData( st->hTcxCfg->pCurrentTnsConfig, &st->hTcxEnc->tnsData[k], param_core[ch] + k * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, tnsSize[ch] + k, tnsBits[ch] + k ); + } + + if ( st->hTcxEnc->transform_type[k] == TCX_5 ) + { + tcx5SpectrumInterleaving( st->hTcxCfg->tcx5SizeFB, st->hTcxEnc->spectrum[k] ); + tcx5SpectrumInterleaving( st->hTcxCfg->tcx5SizeFB, mdst_spectrum[ch][k] ); + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * TNSAnalysis() + * + * + *-------------------------------------------------------------------*/ + +void TNSAnalysis( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const int16_t L_frame, /* i : frame length */ + int16_t L_spec, /* i : length of the spectrum */ + const int16_t transform_type, /* i : transform type for the frame/subframe - TCX20 | TCX10 | TCX 5 (meaning 2 x TCX 5) */ + const int16_t isAfterACELP, /* i : Flag indicating if the last frame was ACELP. For the second TCX subframe it should be 0 */ + float spectrum[], /* i : MDCT spectrum of the subframe */ + TRAN_DET_HANDLE hTranDet, /* i : handle transient detection */ + const float ltp_gain, /* i : ltp gain */ + STnsData *pTnsData, /* o : TNS data */ + int16_t *pfUseTns, /* o : Flag indicating if TNS is used */ + float *predictionGain /* o : TNS prediction gain */ +) +{ + float buff[8]; /* Buffer for the rearrangement of LF TCX5 */ + + /* Init TNS */ + *pfUseTns = 0; + + if ( hTcxCfg->fIsTNSAllowed ) + { + hTcxCfg->pCurrentTnsConfig = &hTcxCfg->tnsConfig[transform_type == TCX_20][isAfterACELP]; + L_spec = hTcxCfg->pCurrentTnsConfig->iFilterBorders[0]; + + /*-----------------------------------------------------------* + * Temporal Noise Shaping analysis * + *-----------------------------------------------------------*/ + + if ( transform_type == TCX_5 ) + { + /* rearrange LF sub-window lines prior to TNS analysis & filtering */ + if ( L_spec < L_frame / 2 ) + { + mvr2r( spectrum + 8, spectrum + 16, L_spec / 2 - 8 ); + mvr2r( spectrum + L_frame / 4, spectrum + 8, 8 ); + mvr2r( spectrum + L_frame / 4 + 8, spectrum + L_spec / 2 + 8, L_spec / 2 - 8 ); + } + else + { + mvr2r( spectrum + L_frame / 4, buff, 8 ); + mvr2r( spectrum + 8, spectrum + 16, L_frame / 4 - 8 ); + mvr2r( buff, spectrum + 8, 8 ); + } + } + + *pfUseTns = DetectTnsFilt( hTcxCfg->pCurrentTnsConfig, spectrum, hTranDet, transform_type != TCX_20, ltp_gain, pTnsData, predictionGain ); + + + /* If TNS should be used then get the residual after applying it inplace in the spectrum */ + if ( *pfUseTns ) + { + ApplyTnsFilter( hTcxCfg->pCurrentTnsConfig, pTnsData, spectrum, 1 ); + } + + if ( transform_type == TCX_5 ) + { + /* undo rearrangement of LF sub-window lines prior to TNS analysis */ + if ( L_spec < L_frame / 2 ) + { + mvr2r( spectrum + L_spec / 2 + 8, spectrum + L_frame / 4 + 8, L_spec / 2 - 8 ); + mvr2r( spectrum + 8, spectrum + L_frame / 4, 8 ); + mvr2r( spectrum + 16, spectrum + 8, L_spec / 2 - 8 ); + set_zero( spectrum + L_spec / 2, L_frame / 4 - L_spec / 2 ); + set_zero( spectrum + L_frame / 4 + L_spec / 2, L_frame / 4 - L_spec / 2 ); + } + else + { + mvr2r( spectrum + 8, buff, 8 ); + mvr2r( spectrum + 16, spectrum + 8, L_frame / 4 - 8 ); + mvr2r( buff, spectrum + L_frame / 4, 8 ); + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ShapeSpectrum() + * + * + *-------------------------------------------------------------------*/ + +void ShapeSpectrum( + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const float A[], /* i : quantized coefficients NxAz_q[M+1] */ + float gainlpc[], /* o : MDCT gains for the previous frame */ + const int16_t L_frame_glob, /* i : frame length */ + int16_t L_spec, /* i : length of the spectrum */ + float spectrum[], /* i/o: MDCT spectrum */ + const int16_t fUseTns, /* i : Flag indicating if TNS is used */ + Encoder_State *st, /* i/o: encoder state structure */ + float *scf /* i : scale factors */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t i, sf_width, L_frame, tcx_offset; + float Ap[M + 2]; + float tmp, gamma1; + float max_low_pre = 0.f, max_high_pre = 0.f; + float sns_int_scf[FDNS_NPTS]; + int32_t total_brate = ( st->element_mode == IVAS_CPE_MDCT ? st->element_brate : st->total_brate ); + /*-----------------------------------------------------------* + * Init * + *-----------------------------------------------------------*/ + + /* Init lengths */ + L_frame = L_frame_glob; + tcx_offset = hTcxCfg->tcx_offset; + + gamma1 = st->gamma; + if ( st->enableTcxLpc ) + { + gamma1 = 1.0f; + } + + if ( st->element_mode != IVAS_CPE_MDCT ) /* in MDCT, this is already done outside the function */ + { + if ( st->last_core == ACELP_CORE ) + { + L_frame += tcx_offset; + L_spec += hTcxCfg->tcx_coded_lines >> 2; + if ( hTcxCfg->lfacNext < 0 ) + { + L_frame -= hTcxCfg->lfacNext; + } + } + } + + tcxGetNoiseFillingTilt( A, L_frame, ( total_brate >= ACELP_13k20 && !st->rf_mode ), &st->hTcxEnc->noiseTiltFactor ); + + /* Calculate Spectrum Flatness Measure for the TCX Concealment */ + if ( st->enablePlcWaveadjust ) + { + hTcxCfg->SFM2 = SFM_Cal( spectrum, min( 200, L_frame ) ); + } + + if ( ( total_brate <= ACELP_13k20 && st->bwidth == SWB ) ) + { + max_low_pre = 0.f; + for ( i = 0; i < L_frame; i++ ) + { + tmp = fabsf( spectrum[i] ); + if ( tmp > max_low_pre ) + { + max_low_pre = tmp; + } + } + + max_high_pre = 0.f; + for ( i = 0; i < L_spec - L_frame; i++ ) + { + tmp = fabsf( spectrum[L_frame + i] ); + if ( tmp > max_high_pre ) + { + max_high_pre = tmp; + } + } + } + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + sns_interpolate_scalefactors( &sns_int_scf[0], scf, ENC ); + sns_shape_spectrum( spectrum, st->hTcxCfg->psychParamsCurrent, &sns_int_scf[0], L_frame ); + v_multc( spectrum + L_frame, sns_int_scf[hTcxCfg->psychParamsCurrent->nBands - 1], spectrum + L_frame, L_spec - L_frame ); + } + else + { + /*-----------------------------------------------------------* + * Pre-shaping in frequency domain using weighted LPC (Wz) * + *-----------------------------------------------------------*/ + + weight_a( A, Ap, gamma1, M ); + + lpc2mdct( Ap, M, gainlpc, FDNS_NPTS, 0 ); + + mdct_preShaping( spectrum, L_frame, gainlpc ); + + v_multc( spectrum + L_frame, 1.f / gainlpc[FDNS_NPTS - 1], spectrum + L_frame, L_spec - L_frame ); + } + + /* reduce the peaks in the IGF region, to make life of the core-coder easier... */ + if ( total_brate <= ACELP_13k20 && st->bwidth == SWB ) + { + int16_t dist_low, dist_high; + float max_fac; + float max_low, max_low1, max_low2, max_high; + + if ( hTcxEnc->tcx_lpc_shaped_ari ) + { + max_fac = 1.5f; + } + else + { + max_fac = 3.f; + } + + sf_width = L_frame / 2; + + max_low2 = 0.f; + dist_low = 0; + for ( i = 0; i < sf_width; i++ ) + { + tmp = fabsf( spectrum[L_frame - 1 - i] ); + if ( tmp > max_low2 ) + { + max_low2 = tmp; + dist_low = i; + } + } + + max_low1 = 0.f; + for ( i = 0; i < L_frame - sf_width; i++ ) + { + tmp = fabsf( spectrum[L_frame - sf_width - 1 - i] ); + if ( tmp > max_low1 ) + { + max_low1 = tmp; + } + if ( tmp > max_low2 ) + { + dist_low = sf_width + i; + } + } + + max_low = max( max_low1, max_low2 ); + + max_high = 0.f; + dist_high = 0; + for ( i = 0; i < L_spec - L_frame; i++ ) + { + tmp = fabsf( spectrum[L_frame + i] ); + if ( tmp > max_high ) + { + max_high = tmp; + dist_high = i; + } + } + + if ( ( 4.f * dist_high * max_high > dist_low * max_low ) && ( 16.f * max_low_pre > max_high_pre ) && ( max_high > max_fac * max_low2 ) ) + { + tmp = max_fac * max_low2 / max_high; + v_multc( spectrum + L_frame, tmp, spectrum + L_frame, L_spec - L_frame ); + } + } + + if ( st->element_mode != IVAS_CPE_MDCT && st->tcxonly && st->hTcxEnc->tcxltp && ( st->hTcxEnc->tcxltp_gain > 0.0f ) && !fUseTns ) + { + PsychAdaptLowFreqEmph( spectrum, gainlpc ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * GetTransWidth() + * + * + *-------------------------------------------------------------------*/ + +static int16_t GetTransWidth( + const int16_t tcxonly, + const int16_t tcx10, + const float tcxltp_gain, + const int16_t hm_active ) +{ + int16_t noiseTransWidth = MIN_NOISE_FILLING_HOLE; + + if ( tcxonly ) + { + noiseTransWidth = HOLE_SIZE_FROM_LTP( max( tcxltp_gain, 0.3125f * hm_active ) ); + + if ( tcx10 ) + { + noiseTransWidth = 3; /* minimum transition for noise filling in TCX-10 */ + } + } + + return noiseTransWidth; +} + + +/*-----------------------------------------------------------* + * EstimateTCXNoiseLevel() + * + * Estimate and quantize noise factor * + *-----------------------------------------------------------*/ + +static void EstimateTCXNoiseLevel( + Encoder_State *st, /* i : encoder state handle */ + const float x_orig[], /* i : shaped MDCT spectrum */ + float spectrum[], /* i/o: quantized MDCT spectrum */ + const float gain_tcx, /* i : global gain */ + const int16_t L_frame, /* i : frame length */ + const int16_t noiseFillingBorder, /* i : noise filling border */ + const int16_t hm_active, /* i : flag indicating if the harmonic model is active */ + float *fac_ns, /* o : noise filling level */ + int16_t *fac_ns_q /* o : quantized noise filling level */ +) +{ + int16_t maxNfCalcBw, iStart, noiseTransWidth; + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + maxNfCalcBw = min( noiseFillingBorder, (int16_t) ( hTcxEnc->measuredBwRatio * (float) L_frame + 0.5f ) ); + + if ( st->total_brate >= HQ_96k ) + { + *fac_ns = 0.0f; + *fac_ns_q = 0; + } + else + { + const int16_t minLevel = ( hTcxEnc->tcx_lpc_shaped_ari && st->element_mode > IVAS_SCE ? 0 : 1 ); + iStart = L_frame / ( ( st->total_brate >= ACELP_13k20 && !st->rf_mode ) ? 6 : 8 ); /* noise filling start bin*/ + noiseTransWidth = GetTransWidth( st->tcxonly, ( L_frame == st->L_frame >> 1 ), st->hTcxEnc->tcxltp_gain, ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE && hm_active ) ); + tcx_noise_factor( x_orig, spectrum, iStart, maxNfCalcBw, noiseTransWidth, L_frame, gain_tcx, hTcxEnc->noiseTiltFactor, fac_ns, fac_ns_q, st->element_mode ); + + /* hysteresis for very tonal passages (more stationary noise filling level) */ + if ( *fac_ns_q == minLevel ) + { + hTcxEnc->noiseLevelMemory_cnt = (int16_t) min( INT16_MAX, 1 + abs( hTcxEnc->noiseLevelMemory_cnt ) ); /* update counter */ + } + else + { + if ( ( *fac_ns_q == minLevel + 1 ) && ( abs( hTcxEnc->noiseLevelMemory_cnt ) > 5 ) ) + { + *fac_ns_q = minLevel; /* reduce noise filling level by one step */ + *fac_ns = minLevel * 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); + + /* signal that noise level is changed by inverting sign of level memory */ + hTcxEnc->noiseLevelMemory_cnt = ( hTcxEnc->noiseLevelMemory_cnt < 0 ) ? 5 : -1 - hTcxEnc->noiseLevelMemory_cnt; + } + else + { + hTcxEnc->noiseLevelMemory_cnt = 0; /* reset memory since level is too different */ + } + } + } /* bitrate */ + + return; +} + + +/*-----------------------------------------------------------* + * EstimateStereoTCXNoiseLevel() + * + * Estimate and quantize stereo noise factors + *-----------------------------------------------------------*/ + +void EstimateStereoTCXNoiseLevel( + Encoder_State **sts, /* i : state handle */ + float *q_spectrum[CPE_CHANNELS][NB_DIV], /* i : quantized MDCT spectrum */ + float gain_tcx[][NB_DIV], /* i : global gain */ + int16_t L_frame[][NB_DIV], /* i : frame length */ + int16_t noiseFillingBorder[][NB_DIV], /* i : noise filling border */ + int16_t hm_active[][NB_DIV], /* i : flag indicating if the harmonic model is active */ + const int16_t ignore_chan[], /* i : flag indicating whether the channel should be ignored */ + float fac_ns[][NB_DIV], /* o : noise filling level */ + int16_t param_core[][NB_DIV * NPRM_DIV], /* o : quantized noise filling level */ + const int16_t is_mct /* i : is mct flag */ +) +{ + int16_t ch, n; + int16_t nSubframes, maxNfCalcBw, iStart, noiseTransWidth; + float smooth_gain; + float combined_q_spectrum[N_MAX]; + int16_t *fac_ns_q; + int32_t total_brate; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + Encoder_State *st = sts[ch]; + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + if ( ignore_chan[ch] ) + { + continue; + } + total_brate = ( st->element_mode == IVAS_CPE_MDCT && !is_mct ) ? st->element_brate : st->total_brate; + + for ( n = 0; n < nSubframes; n++ ) + { + fac_ns_q = param_core[ch] + n * NPRM_DIV + 1; + maxNfCalcBw = min( noiseFillingBorder[ch][n], (int16_t) ( hTcxEnc->measuredBwRatio * (float) L_frame[ch][n] + 0.5f ) ); + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + maxNfCalcBw = min( maxNfCalcBw, MCT_LFE_MAX_LINE ); + } + + if ( ( total_brate >= HQ_96k && ( st->element_mode <= IVAS_SCE || st->bwidth < SWB ) ) || total_brate > IVAS_192k ) + { + fac_ns[ch][n] = 0.0f; + *fac_ns_q = 0; + } + else + { + iStart = L_frame[ch][n] / ( ( total_brate >= ACELP_13k20 && !st->rf_mode ) ? 6 : 8 ); /* noise filling start bin*/ + + if ( n == 0 ) + { + mvr2r( hTcxEnc->ltpGainMemory, &hTcxEnc->ltpGainMemory[1], N_LTP_GAIN_MEMS - 1 ); + hTcxEnc->ltpGainMemory[0] = st->hTcxEnc->tcxltp_gain; + } + + smooth_gain = dotp( hTcxEnc->ltpGainMemory, nf_tw_smoothing_coeffs, N_LTP_GAIN_MEMS ); + + noiseTransWidth = GetTransWidth( st->tcxonly, ( L_frame[ch][n] == st->L_frame >> 1 ), smooth_gain, ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE && hm_active[ch][n] ) ); + + mvr2r( q_spectrum[ch][n], combined_q_spectrum, L_frame[ch][n] ); + tcx_noise_factor( hTcxEnc->spectrum[n], combined_q_spectrum, iStart, maxNfCalcBw, noiseTransWidth, L_frame[ch][n], gain_tcx[ch][n], hTcxEnc->noiseTiltFactor, &fac_ns[ch][n], fac_ns_q, st->element_mode ); + + /* hysteresis for very tonal passages (more stationary noise filling level) */ + if ( *fac_ns_q == 1 ) + { + hTcxEnc->noiseLevelMemory_cnt = (int16_t) min( INT16_MAX, 1 + abs( hTcxEnc->noiseLevelMemory_cnt ) ); /* update counter */ + } + else + { + if ( ( *fac_ns_q == 2 ) && ( abs( hTcxEnc->noiseLevelMemory_cnt ) > 5 ) ) + { + *fac_ns_q = 1; /* reduce noise filling level by one step */ + fac_ns[ch][n] = 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); + + /* signal that noise level is changed by inverting sign of level memory */ + hTcxEnc->noiseLevelMemory_cnt = ( hTcxEnc->noiseLevelMemory_cnt < 0 ) ? 5 : -1 - hTcxEnc->noiseLevelMemory_cnt; + } + else + { + hTcxEnc->noiseLevelMemory_cnt = 0; /* reset memory since level is too different */ + } + } + } /* bitrate */ + } +#ifdef DEBUG_MODE_MDCT + dbgwrite( &smooth_gain, sizeof( float ), 1, 1, "./res/smooth_gain" ); + dbgwrite( &st->hTcxEnc->tcxltp_gain, sizeof( float ), 1, 1, "./res/tcxltp_gain" ); + dbgwrite( &noiseTransWidth, sizeof( int16_t ), 1, 1, "./res/noiseTrans" ); + dbgwrite( &fac_ns[ch][0], sizeof( float ), 2, 1, "./res/fac_ns" ); +#endif + } + + return; +} + + +/*-----------------------------------------------------------* + * DecideTonalSideInfo() + * + * + *-----------------------------------------------------------*/ + +static int16_t DecideTonalSideInfo( + const float spectrum[], + const int16_t L_frame_glob, + float SFM2 ) +{ + float SFM, K, K2; + int16_t Tonal_SideInfo; + + SFM = SFM_Cal( spectrum, min( 200, L_frame_glob ) ); + + if ( L_frame_glob <= 256 ) + { + K = 0.4f; + K2 = 0.1f; + } + else if ( L_frame_glob == 320 || L_frame_glob == 512 ) + { + K = 0.4f; + K2 = 0.1f; + } + else /*FrameSize_Core == 640*/ + { + K = 0.35f; + K2 = 0.04f; + } + + + Tonal_SideInfo = 0; + if ( SFM < K ) + { + Tonal_SideInfo = 1; + } + + if ( SFM2 < K2 ) + { + Tonal_SideInfo = 1; + } + + return Tonal_SideInfo; +} + +/*-----------------------------------------------------------* + * QuantizeTCXSpectrum() + * + * + *-----------------------------------------------------------*/ + +void QuantizeTCXSpectrum( + Encoder_State *st, /* i : state handle */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + const float *x_orig, /* i : shaped MDCT spectrum */ + const float *gainlpc, /* i : FDNS gains */ + const Word16 *Aqind, /* i : frame-independent quantized coefficients (M+1) */ + const int16_t tnsSize, /* i : number of tns parameters put into prm */ + const int16_t nb_bits, /* i : bit budget */ + const int16_t vad_hover_flag, /* i : VAD hangover flag */ + int16_t *pL_frameTCX, /* o : full frame length */ + int16_t *pL_frame, /* o : frame length */ + int16_t *pL_spec, /* o : length of the coded spectrum */ + int16_t *ptcx_offset, /* o : folding point offset relative to the end of the previous frame */ + int16_t *pnoiseFillingBorder, /* o : noise filling border */ + float spectrum[], /* o : quantized MDCT spectrum */ + CONTEXT_HM_CONFIG *hm_cfg, /* o : Context-based harmonic model configuration */ + int16_t *hm_active, /* o : flag indicating if the harmonic model is active */ + float lf_deemph_fact[], /* o : low frequency deemphasis factors */ + int16_t *nf_seed, /* o : noise filling random seed */ + float *ener, /* o : energy of the quantized spectrum */ + float *gain_tcx, /* o : global gain */ + int16_t prm[] /* o : tcx parameters */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t i, L_frame, L_frameTCX, L_spec, tcx_offset; + int16_t noiseFillingBorder, LtpPitchLag, PeriodicityIndex; + float sqGain, gain_tcx_opt, RelativeScore; + int16_t lastnzCtxHm, lastnz; + int16_t stop; + int16_t nEncodedCtxHm, stopCtxHm, sqBitsCtxHm, Selector; + int16_t nEncoded, sqBits_noStop; + int16_t NumIndexBits, signaling_bits, sqTargetBits, sqBits, ctxHmBits, resQBits, resQTargetBits; + int16_t *prm_ltp, *prm_tns, *prm_hm, *prm_lastnz, *sqQ, *prm_target; + float att; + int32_t total_brate; + + /*-----------------------------------------------------------* + * Init * + *-----------------------------------------------------------*/ + + sqGain = 1.0f; + resQTargetBits = 0; + + NumIndexBits = 0; + sqBits = 0; + ctxHmBits = 0; + resQBits = 0; + prm_ltp = &prm[1 + NOISE_FILL_RANGES]; + prm_tns = prm_ltp + LTPSIZE; + prm_hm = prm_tns + tnsSize; + prm_lastnz = prm_hm + 2; + sqQ = prm_hm + NPRM_CTX_HM; + + total_brate = ( st->element_mode == IVAS_CPE_MDCT ) ? st->element_brate : st->total_brate; + + /*-----------------------------------------------------------* + * Init lengths * + *-----------------------------------------------------------*/ + + L_frame = st->L_frame; + L_frameTCX = hTcxEnc->L_frameTCX; + L_spec = st->hTcxCfg->tcx_coded_lines; + tcx_offset = st->hTcxCfg->tcx_offset; + + if ( st->core == TCX_10_CORE ) + { + L_frame /= 2; + L_frameTCX /= 2; + L_spec /= 2; + } + else if ( st->last_core == ACELP_CORE ) + { + st->hTcxCfg->last_aldo = 0; + + L_frame += tcx_offset; + L_frameTCX += st->hTcxCfg->tcx_offsetFB; + L_spec += st->hTcxCfg->tcx_coded_lines >> 2; + + if ( st->hTcxCfg->lfacNext < 0 ) + { + L_frame -= st->hTcxCfg->lfacNext; + L_frameTCX -= st->hTcxCfg->lfacNextFB; + tcx_offset = st->hTcxCfg->lfacNext; + } + else + { + tcx_offset = 0; + } + hTcxEnc->noiseLevelMemory_cnt = 0; + } + + *pL_frameTCX = L_frameTCX; + *pL_frame = L_frame; + *pL_spec = L_spec; + *ptcx_offset = tcx_offset; + + /* target bitrate for SQ */ + sqTargetBits = nb_bits - NBITS_TCX_GAIN - NBITS_NOISE_FILL_LEVEL; + + if ( st->enablePlcWaveadjust ) + { + st->Tonal_SideInfo = DecideTonalSideInfo( x_orig, ( st->core == TCX_20_CORE ) ? st->L_frame : st->L_frame / 2, st->hTcxCfg->SFM2 ); + } + + /* Start with the pre-shaped spectrum*/ + mvr2r( x_orig, spectrum, L_spec ); + + /*-----------------------------------------------------------* + * Bandwidth Limitation * + *-----------------------------------------------------------*/ + + noiseFillingBorder = L_spec; + if ( st->igf ) + { + noiseFillingBorder = st->hIGFEnc->infoStartLine; + } + else + { + st->hIGFEnc->infoStopLine = noiseFillingBorder; + } + *pnoiseFillingBorder = noiseFillingBorder; + + for ( i = st->hIGFEnc->infoStopLine; i < max( L_frame, L_frameTCX ); i++ ) + { + spectrum[i] = 0.0f; + } + + /*-----------------------------------------------------------* + * Quantization * + *-----------------------------------------------------------*/ + + if ( !hTcxEnc->tcx_lpc_shaped_ari ) + { + /* context based arithmetic coder */ + + /* initialize signaling to default, i.e. context based AC is inactive */ + prm_hm[0] = 0; + prm_hm[1] = -1; + + /* Fast estimation of the scalar quantizer step size */ + if ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE ) + { + LtpPitchLag = ( ( !st->tcxonly ) && ( hTcxEnc->tcxltp_pitch_int < st->L_frame ) ? ( ( 2 * st->L_frame * st->pit_res_max ) << kLtpHmFractionalResolution ) / ( hTcxEnc->tcxltp_pitch_int * st->pit_res_max + hTcxEnc->tcxltp_pitch_fr ) : -1 ); + + ++ctxHmBits; /* ContextHM flag */ + --sqTargetBits; /* ContextHM flag */ + + PeriodicityIndex = SearchPeriodicityIndex( spectrum, NULL, L_spec, sqTargetBits, LtpPitchLag, hTcxEnc->tcxltp ? hTcxEnc->tcxltp_gain : -1.0f, &RelativeScore ); + + NumIndexBits = CountIndexBits( L_spec >= 256, PeriodicityIndex ); + + if ( st->element_mode > EVS_MONO ) + { + ConfigureContextHm( L_spec, sqTargetBits - NumIndexBits, PeriodicityIndex, LtpPitchLag, hm_cfg ); + } + else + { + ConfigureContextHm( L_spec, sqTargetBits, PeriodicityIndex, LtpPitchLag, hm_cfg ); + } + + /* Quantize original spectrum */ + sqGain = SQ_gain( spectrum, (int16_t) ( hTcxEnc->tcx_target_bits_fac * (float) sqTargetBits ), L_spec ); + + tcx_scalar_quantization( spectrum, sqQ, L_spec, sqGain, st->hTcxCfg->sq_rounding, hTcxEnc->memQuantZeros, st->tcxonly ); + + /* Estimate original bitrate */ + stop = 0; + if ( st->element_mode > EVS_MONO ) + { + sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnz, &nEncoded, sqTargetBits, &stop, 0, NULL ); + } + else + { + sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnz, &nEncoded, sqTargetBits, &stop, NULL ); + } + + /* Estimate context mapped bitrate */ + stopCtxHm = 0; + + /* Context Mapping */ + if ( st->element_mode > EVS_MONO ) + { + sqBitsCtxHm = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, 0, hm_cfg ); + } + else + { + sqBitsCtxHm = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, hm_cfg ); + } + + /* Decide whether or not to use context mapping */ + Selector = max( stop, sqBits ) - ( max( stopCtxHm, sqBitsCtxHm ) + NumIndexBits ); + + if ( Selector > 2 || ( abs( Selector ) <= 2 && kCtxHmOlRSThr < RelativeScore ) ) + { + /* CtxHm is likely better */ + sqTargetBits -= NumIndexBits; + ctxHmBits += NumIndexBits; + prm_hm[0] = 1; + prm_hm[1] = PeriodicityIndex; + *prm_lastnz = lastnzCtxHm; + sqBits_noStop = sqBits = sqBitsCtxHm; + nEncoded = nEncodedCtxHm; + stop = stopCtxHm; + } + else + { + /* Original is better or not much difference */ + prm_hm[0] = 0; + prm_hm[1] = PeriodicityIndex; + *prm_lastnz = lastnz; + PeriodicityIndex = -1; + + sqBits_noStop = sqBits; + } + + if ( stop != 0 ) + { + sqBits = stop; + } + } + else + { + /* no context hm*/ + PeriodicityIndex = -1; + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + sqGain = SQ_gain_estimate( spectrum, (int16_t) ( hTcxEnc->tcx_target_bits_fac * (float) sqTargetBits ), L_spec ); + } + else + { + sqGain = SQ_gain( spectrum, (int16_t) ( hTcxEnc->tcx_target_bits_fac * (float) sqTargetBits ), L_spec ); + } + + /* Quantize spectrum */ + tcx_scalar_quantization( spectrum, sqQ, L_spec, sqGain, st->hTcxCfg->sq_rounding, hTcxEnc->memQuantZeros, st->tcxonly ); + + /* Estimate bitrate */ + stop = 0; + if ( st->element_mode > EVS_MONO ) + { + sqBits_noStop = sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, 0, NULL ); + } + else + { + sqBits_noStop = sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, NULL ); + } + + if ( stop != 0 ) + { + sqBits = stop; + } + } /* end of if (ctx_hm) */ + + /* Adjust correction factor */ + if ( ( L_spec & ( L_spec - 1 ) ) == 0 ) + { + /* power-of-2 */ + hTcxEnc->tcx_target_bits_fac *= (float) sqTargetBits / (float) ( sqBits + 1 ); + } + else + { + hTcxEnc->tcx_target_bits_fac *= (float) sqTargetBits / (float) sqBits; + } + + if ( hTcxEnc->tcx_target_bits_fac > 1.25 ) + { + hTcxEnc->tcx_target_bits_fac = 1.25; + } + if ( hTcxEnc->tcx_target_bits_fac < 0.75 ) + { + hTcxEnc->tcx_target_bits_fac = 0.75; + } + + /* Refine quantizer step size with a rate-control-loop (optional) */ + sqBits = tcx_scalar_quantization_rateloop( spectrum, sqQ, L_spec, &sqGain, st->hTcxCfg->sq_rounding, hTcxEnc->memQuantZeros, prm_lastnz, /* lastnz */ sqTargetBits, &nEncoded, &stop, sqBits_noStop, sqBits, st->hTcxCfg->tcxRateLoopOpt, st->tcxonly, PeriodicityIndex >= 0 ? hm_cfg : NULL, ( st->element_mode == IVAS_CPE_MDCT ? 2 : 4 ), st->element_mode ); + + if ( ctxHmBits > 0 ) + { + /* Mapping tool is enabled */ + /* Truncate spectrum */ + for ( i = nEncoded; i < L_spec; i++ ) + { + if ( st->element_mode > EVS_MONO ) + { + break; + } + else + { + sqQ[i] = 0; + } + } + + if ( PeriodicityIndex >= 0 ) + { + /* Mapping is used */ + /* Estimate non-mapped bitrate */ + stopCtxHm = 1; + if ( st->element_mode > EVS_MONO ) + { + /* Fix: Use updated value for target bits (sqTargetBits + NumIndexBits) before computing non-mapped estimate */ + sqBitsCtxHm = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnz, &nEncodedCtxHm, sqTargetBits + NumIndexBits, &stopCtxHm, 0, NULL ); + } + else + { + sqBitsCtxHm = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnz, &nEncodedCtxHm, sqTargetBits, &stopCtxHm, NULL ); + } + + /* Decide whether or not to revert mapping */ + Selector = sqBits - ( sqBitsCtxHm + NumIndexBits ); + + if ( st->element_mode > EVS_MONO ) + { + if ( ( stopCtxHm == 0 && Selector > 0 ) || stop ) /* If overflow occured with mapped, select non-mapped */ + { + /* Non-mapped is better */ + sqTargetBits += NumIndexBits; + ctxHmBits -= NumIndexBits; + prm_hm[0] = 0; + *prm_lastnz = lastnz; + PeriodicityIndex = -1; + sqBits_noStop = sqBits = sqBitsCtxHm; + nEncoded = nEncodedCtxHm; + stop = stopCtxHm; + } + } + else + { + if ( stopCtxHm == 0 && Selector > 0 ) + { + /* Non-mapped is better */ + sqTargetBits += NumIndexBits; + ctxHmBits -= NumIndexBits; + prm_hm[0] = 0; + *prm_lastnz = lastnz; + PeriodicityIndex = -1; + sqBits_noStop = sqBits = sqBitsCtxHm; + nEncoded = nEncodedCtxHm; + stop = stopCtxHm; + } + } + } + else + { + /* Mapping is not used */ + if ( st->element_mode > EVS_MONO ) + { + /* Truncate Spectrum */ + for ( i = nEncoded; i < L_spec; i++ ) + { + sqQ[i] = 0; + } + } + /* Estimate mapped bitrate */ + stopCtxHm = 1; + if ( st->element_mode > EVS_MONO ) + { + sqBitsCtxHm = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, 0, hm_cfg ); + } + else + { + sqBitsCtxHm = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, hm_cfg ); + } + + /* Decide whether or not to use mapping */ + Selector = sqBits - ( sqBitsCtxHm + NumIndexBits ); + + if ( stopCtxHm == 0 && Selector > 0 ) + { + /* Mapped is better */ + sqTargetBits -= NumIndexBits; + ctxHmBits += NumIndexBits; + prm_hm[0] = 1; + *prm_lastnz = lastnzCtxHm; + PeriodicityIndex = prm_hm[1]; + sqBits_noStop = sqBits = sqBitsCtxHm; + nEncoded = nEncodedCtxHm; + stop = stopCtxHm; + } + } + } + + /* Limit low sqGain for avoiding saturation of the gain quantizer*/ + if ( st->hTcxCfg->tcxRateLoopOpt < 3 && sqGain < sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ) ) + { + sqGain = (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ); + + tcx_scalar_quantization( spectrum, sqQ, L_spec, sqGain, st->hTcxCfg->sq_rounding, hTcxEnc->memQuantZeros, st->tcxonly ); + + stop = 1; + if ( st->element_mode > EVS_MONO ) + { + /* Ensure non-mapped estimation is used for limiting low sqGain considering that this refinement occurs very rarely */ + PeriodicityIndex = -1; + if ( prm_hm[0] == 1 ) + { + prm_hm[0] = 0; + sqTargetBits += NumIndexBits; + ctxHmBits -= NumIndexBits; + } + sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, 0, NULL ); + } + else + { + sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, PeriodicityIndex >= 0 ? hm_cfg : NULL ); + } + } + + /* Truncate spectrum (for CBR) */ + if ( stop ) + { + for ( i = nEncoded; i < L_spec; i++ ) + { + sqQ[i] = 0; + } + } + + /* Save quantized Values */ + *nf_seed = 0; + for ( i = 0; i < L_spec; i++ ) + { + spectrum[i] = (float) sqQ[i]; + /* noise filling seed */ + *nf_seed += (int16_t) ( abs( sqQ[i] ) * i * 2 ); + } + } + else + { + /* low rates: envelope based arithmetic coder */ + + AdaptLowFreqEmph( spectrum, NULL, 0.f, 1, gainlpc, L_frame ); + + prm_target = sqQ; + sqQ = prm_target + 1; + + LtpPitchLag = ( ( hTcxEnc->tcxltp_pitch_int < st->L_frame ) ? ( ( 2 * st->L_frame * st->pit_res_max ) << kLtpHmFractionalResolution ) / ( st->hTcxEnc->tcxltp_pitch_int * st->pit_res_max + hTcxEnc->tcxltp_pitch_fr ) : -1 ); + + tcx_arith_encode_envelope( spectrum, hm_cfg->indexBuffer, L_frame, L_spec, st, Aqind, sqTargetBits, sqQ, st->last_core != ACELP_CORE, prm_hm, /* HM parameter area */ LtpPitchLag, &sqBits, &signaling_bits, ( st->bwidth > WB ) ? 1 : 0 ); + + sqTargetBits -= signaling_bits; + *prm_target = sqTargetBits; + + /* Noise filling seed */ + *nf_seed = 0; + for ( i = 0; i < noiseFillingBorder; ++i ) + { + *nf_seed += (int16_t) ( abs( (int16_t) spectrum[i] ) * i * 2 ); + } + } + + *hm_active = prm_hm[0]; + + /*-----------------------------------------------------------* + * Compute optimal TCX gain. * + *-----------------------------------------------------------*/ + + if ( lf_deemph_fact != NULL ) + { + /* initialize LF deemphasis factors in lf_deemph_fact */ + for ( i = 0; i < L_spec; i++ ) + { + lf_deemph_fact[i] = 1.0f; + } + } + + if ( !st->tcxonly ) + { + AdaptLowFreqDeemph( spectrum, hTcxEnc->tcx_lpc_shaped_ari, gainlpc, L_frame, lf_deemph_fact ); + } + + assert( x_orig != spectrum ); + gain_tcx_opt = get_gain( x_orig, spectrum, L_spec, ener ); + + if ( gain_tcx_opt <= 0.0f ) + { + gain_tcx_opt = sqGain; + } + *gain_tcx = gain_tcx_opt; + + if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) + { + calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); + *gain_tcx *= att; + } + + /*-----------------------------------------------------------* + * Quantize TCX gain * + *-----------------------------------------------------------*/ + + /* gain quantization here in case of VBR unvoiced coding; fixes problems of uninitialized global gain values */ + if ( total_brate >= ACELP_13k20 && !st->rf_mode ) + { + tcx_QuantizeGain( L_spec, gain_tcx, &prm[0] ); + } + + /*-----------------------------------------------------------* + * Residual Quantization * + *-----------------------------------------------------------*/ + + if ( st->hTcxCfg->resq ) + { + resQTargetBits = sqTargetBits - sqBits; + + if ( hTcxEnc->tcx_lpc_shaped_ari ) + { + /* envelope based arithmetic coder */ + int16_t *prm_resq; + + prm_resq = sqQ + sqTargetBits - resQTargetBits; + + resQBits = tcx_ari_res_Q_spec( x_orig, hm_cfg->indexBuffer, spectrum, L_spec, *gain_tcx, prm_resq, resQTargetBits, resQBits, st->hTcxCfg->sq_rounding, lf_deemph_fact ); + + /* Transmit zeros when there bits remain after RESQ */ + for ( i = resQBits; i < resQTargetBits; ++i ) + { + prm_resq[i] = 0; + } + } + else + { + /* context based arithmetic coder */ + resQBits = tcx_res_Q_gain( gain_tcx_opt, gain_tcx, sqQ + L_spec, resQTargetBits ); + + resQBits = tcx_res_Q_spec( x_orig, spectrum, L_spec, *gain_tcx, sqQ + L_spec, resQTargetBits, resQBits, st->hTcxCfg->sq_rounding, st->tcxonly ? NULL : lf_deemph_fact ); + } + } + + /*-----------------------------------------------------------* + * ALFE tcx only bitrates * + *-----------------------------------------------------------*/ + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + if ( st->tcxonly ) + { + if ( hTcxEnc->tcxltp && ( hTcxEnc->tcxltp_gain > 0.0f ) && !hTcxEnc->fUseTns[frame_cnt] ) + { + PsychAdaptLowFreqDeemph( spectrum, gainlpc, NULL ); + } + } + } + +#ifdef DEBUGGING + /*-----------------------------------------------------------* + * TCX SNR for Analysis purposes * + *-----------------------------------------------------------*/ + { + float diff[N_MAX]; + char name[50] = "TCX_output_chX "; + + for ( i = 0; i < min( L_frame, L_spec ); i++ ) + { + diff[i] = x_orig[i] - *gain_tcx * spectrum[i]; + } + + if ( st->id_element == 0 ) + { + name[13] = (char) ( st->idchan + '0' ); + } + else + { + char name2[50] = "TCX_output.idX_chX "; + name2[13] = (char) ( st->id_element + '0' ); + name2[17] = (char) ( st->idchan + '0' ); + strcpy( name, name2 ); + } + + snr( x_orig, diff, min( L_frame, L_spec ), name ); + } +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * InternalTCXDecoder() + * + * + *-------------------------------------------------------------------*/ + +void InternalTCXDecoder( + Encoder_State *st, /* i/o: state handle */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + const int16_t L_frameTCX, /* i : full frame length */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_spec, /* i : length of the coded spectrum */ + const int16_t tcx_offset, /* i : folding point offset relative to the end of the previous frame */ + const int16_t noiseFillingBorder, /* i : noise filling border */ + const float *x_quant, /* i : quantized spectrum */ + const float ener, /* i : energy of the quantized spectrum */ + float lf_deemph_fact[], /* i/o: low frequency deemphasis factors */ + const float fac_ns, /* i : noise filling level */ + const int16_t nf_seed, /* i : noise filling random seed */ + const float *A, /* i : LPC representation of the FDNS gains */ + float *gainlpc, /* i/o: FDNS gains */ + const int16_t hm_active, /* i : flag indicating if the harmonic model is active */ + float gain_tcx, /* i/o: global gain / quantized global gain */ + float spectrum[], /* o : dequantized spectrum */ + float synth[], /* o : time domain signal */ + int16_t *gain_tcx_q /* o : quantized global gain (at low bitrates) */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t i, iStart, noiseTransWidth; + int16_t tcx_last_overlap_mode, overlap; + int16_t nz; /* non-zero length in ALDO window*/ + int16_t aldo; /* ALDO flag in current frame*/ + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + float Aq_old[M + 1]; + float sns_interpolated_scalefactors[FDNS_NPTS]; + + mvr2r( x_quant, spectrum, max( L_frame, L_spec ) ); + + /* Replication of ACELP formant enhancement for low rates */ + if ( st->total_brate < ACELP_13k20 || st->rf_mode ) + { + tcxFormantEnhancement( lf_deemph_fact, gainlpc, spectrum, L_frame ); + } + + /*-----------------------------------------------------------* + * Noise Filling. * + *-----------------------------------------------------------*/ + + if ( fac_ns > 0.0f ) + { + iStart = tcxGetNoiseFillingTilt( A, L_frame, ( st->total_brate >= ACELP_13k20 && !st->rf_mode ), &hTcxEnc->noiseTiltFactor ); + + noiseTransWidth = GetTransWidth( st->tcxonly, ( L_frame == st->L_frame >> 1 ), hTcxEnc->tcxltp_gain, ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE && hm_active ) ); + assert( st->element_mode != IVAS_CPE_MDCT ); + tcx_noise_filling( spectrum, nf_seed, iStart, noiseFillingBorder, noiseTransWidth, L_frame, hTcxEnc->noiseTiltFactor, fac_ns, NULL, st->element_mode ); + } + + if ( st->total_brate < ACELP_13k20 || st->rf_mode ) + { + /* partially recompute global gain (energy part), taking noise filling and formant enhancement into account */ + float ener_nf = 1e-6f; + for ( i = 0; i < L_spec; i++ ) + { + ener_nf += spectrum[i] * spectrum[i]; + } + gain_tcx *= (float) sqrt( ener / ener_nf ); + tcx_QuantizeGain( L_spec, &gain_tcx, gain_tcx_q ); + } + + /*end of noise filling*/ + + /*-----------------------------------------------------------* + * Noise shaping in frequency domain (1/Wz) * + *-----------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + sns_interpolate_scalefactors( sns_interpolated_scalefactors, A, DEC ); + sns_shape_spectrum( spectrum, st->hTcxCfg->psychParamsCurrent, sns_interpolated_scalefactors, L_frame ); + } + else + { + mdct_noiseShaping( spectrum, L_frame, gainlpc, FDNS_NPTS ); + } + + /*-----------------------------------------------------------* + * Apply gain * + *-----------------------------------------------------------*/ + + if ( st->hTcxCfg->coder_type == INACTIVE ) + { + + gain_tcx *= st->hTcxCfg->na_scale; + } + + v_multc( spectrum, gain_tcx, spectrum, L_spec ); + + tcx_last_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode; /* backup last TCX overlap mode */ + + if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) + { + int16_t L = L_frame; + + if ( ( st->hTcxCfg->fIsTNSAllowed && hTcxEnc->fUseTns[frame_cnt] != 0 ) || ( L_spec > L_frame ) ) + { + L = L_spec; + } + + tcxInvertWindowGrouping( st->hTcxCfg, xn_buf, spectrum, L, hTcxEnc->fUseTns[frame_cnt], st->last_core, tcx_last_overlap_mode, frame_cnt, 0 ); + } + + /*-----------------------------------------------------------* + * Temporal Noise Shaping Synthesis * + *-----------------------------------------------------------*/ + + if ( st->hTcxCfg->fIsTNSAllowed ) + { + SetTnsConfig( st->hTcxCfg, st->core == TCX_20_CORE, ( st->last_core == ACELP_CORE ) && ( frame_cnt == 0 ) ); + + /* Apply TNS to get the reconstructed signal */ + if ( hTcxEnc->fUseTns[frame_cnt] != 0 ) + { + ApplyTnsFilter( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frame_cnt], spectrum, 0 ); + + if ( ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) + { + if ( ( st->hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || + ( ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( tcx_last_overlap_mode == 0 ) ) ) + { + const int16_t L_win = L_spec >> 1; + + /* undo rearrangement of LF sub-window lines for TNS synthesis filter */ + if ( L_frame > L_spec ) + { + assert( 0 ); + } + else + { + mvr2r( spectrum + 8, xn_buf, L_win ); + mvr2r( xn_buf, spectrum + L_win, 8 ); + mvr2r( xn_buf + 8, spectrum + 8, L_win - 8 ); + } + } + } + } + } + + /*-----------------------------------------------------------* + * Compute inverse MDCT of spectrum[]. * + *-----------------------------------------------------------*/ + + lsp2a_stab( st->lsp_old, Aq_old, M ); + overlap = st->hTcxCfg->tcx_mdct_window_length; + nz = NS2SA( st->sr_core, N_ZERO_MDCT_NS ); + aldo = 0; + + if ( ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) + { + if ( st->hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) + { + /* minimum or half overlap, two transforms, grouping into one window */ + float win[( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2]; + const int16_t L_win = L_frame >> 1; + const int16_t L_spec_TCX5 = max( L_frame, L_spec ) >> 1; + const int16_t L_ola = ( st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? st->hTcxCfg->tcx_mdct_window_min_length : st->hTcxCfg->tcx_mdct_window_half_length; + int16_t w; + + set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); + set_zero( xn_buf, tcx_offset + ( L_ola >> 1 ) ); /* zero left end of buffer */ + + for ( w = 0; w < 2; w++ ) + { + if ( st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) + { + TCX_MDCT_Inverse( spectrum + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); + } + else + { + TCX_MDCT_Inverse( spectrum + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); + } + + tcx_windowing_synthesis_current_frame( win, st->hTcxCfg->tcx_aldo_window_2, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, w == 0 && st->last_core == ACELP_CORE, ( w > 0 ) || ( w == 0 && tcx_last_overlap_mode == 2 ) ? MIN_OVERLAP : st->hTcxCfg->tcx_last_overlap_mode, st->hTcxEnc->acelp_zir, st->hTcxEnc->Txnq, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans, L_win, tcx_offset < 0 ? -tcx_offset : 0, ( w > 0 ) ? 1 : st->last_core, 0, 0 ); + + if ( w > 0 ) + { + tcx_windowing_synthesis_past_frame( xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, st->hTcxCfg->tcx_aldo_window_1_trunc, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 2 ); + } + + /* add part of current sub-window overlapping with previous window */ + v_add( win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, L_ola ); + + /* copy new sub-window region not overlapping with previous window */ + mvr2r( win + L_ola, xn_buf + tcx_offset + ( L_ola >> 1 ) + w * L_win, L_win ); + } + + /* To assure that no garbage values are copied to Txnq */ + set_zero( xn_buf + L_frame + tcx_offset + ( L_ola >> 1 ), overlap - tcx_offset - ( L_ola >> 1 ) ); + } + else if ( ( frame_cnt == 0 ) && ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) + { + /* special overlap attempt, two transforms, grouping into one window */ + float win[( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2]; + const int16_t L_win = L_frame >> 1; + const int16_t L_spec_TCX5 = max( L_frame, L_spec ) >> 1; + const int16_t L_ola = st->hTcxCfg->tcx_mdct_window_min_length; + int16_t w; + + set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); + + /* Resize overlap (affect only asymmetric window)*/ + overlap = st->hTcxCfg->tcx_mdct_window_delay; + + /* 1st TCX-5 window, special MDCT with minimum overlap on right side */ + TCX_MDCT_Inverse( spectrum, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, st->element_mode ); + + /* copy new sub-window region not overlapping with previous window */ + mvr2r( win + L_win, xn_buf + ( overlap >> 1 ), L_win + ( L_ola >> 1 ) ); + + /* 2nd TCX-5 window, regular MDCT with minimum overlap on both sides */ + TCX_MDCT_Inverse( spectrum + L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); + + tcx_windowing_synthesis_current_frame( win, st->hTcxCfg->tcx_aldo_window_2, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 0, /* left_rect */ + 2, /* left_mode */ st->hTcxEnc->acelp_zir, st->hTcxEnc->Txnq, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans, L_win, tcx_offset < 0 ? -tcx_offset : 0, 1, /* not st->last_core */ 0, 0 ); + + tcx_windowing_synthesis_past_frame( xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), st->hTcxCfg->tcx_aldo_window_1_trunc, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 2 ); + + /* add part of current sub-window overlapping with previous window */ + v_add( win, xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), L_ola ); + + /* copy new sub-window region not overlapping with previous window */ + mvr2r( win + L_ola, xn_buf + ( overlap >> 1 ) + L_win + ( L_ola >> 1 ), L_win ); + + /* extra folding-out on left side of win, for perfect reconstruction */ + for ( w = ( overlap >> 1 ); w < overlap; w++ ) + { + xn_buf[overlap - 1 - w] = -1.0f * xn_buf[w]; + } + + tcx_windowing_synthesis_current_frame( xn_buf, st->hTcxCfg->tcx_aldo_window_2, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, 0, /* left_mode */ st->hTcxEnc->acelp_zir, st->hTcxEnc->Txnq, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans, L_win, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); + } + else + { + /* default, i.e. maximum overlap, single transform, no grouping */ + TCX_MDCT_Inverse( spectrum, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); + + tcx_windowing_synthesis_current_frame( xn_buf, st->hTcxCfg->tcx_aldo_window_2, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, ( frame_cnt > 0 ) && ( tcx_last_overlap_mode == 0 ) && ( st->last_core != ACELP_CORE ) ? 2 : tcx_last_overlap_mode, st->hTcxEnc->acelp_zir, st->hTcxEnc->Txnq, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans, st->L_frame >> 2, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); + + } /* tcx_last_overlap_mode != FULL_OVERLAP */ + } + else + { + /* frame is TCX-20 or not TCX-only */ + if ( st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) + { + float tmp[L_FRAME_PLUS]; + + edct( spectrum, xn_buf + overlap / 2 + nz, L_frame, st->element_mode ); + + v_multc( xn_buf + overlap / 2 + nz, (float) sqrt( (float) L_frame / NORM_MDCT_FACTOR ), tmp, L_frame ); + + window_ola( tmp, xn_buf, st->hTcxEnc->old_out, L_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, 0, 0, NULL ); + aldo = 1; + } + else + { + TCX_MDCT_Inverse( spectrum, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); + + /* Windowing, overlap and add */ + /* Window current frame */ + tcx_windowing_synthesis_current_frame( xn_buf, st->hTcxCfg->tcx_aldo_window_2, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, st->hTcxCfg->tcx_last_overlap_mode, /*left mode*/ st->hTcxEnc->acelp_zir, st->hTcxEnc->Txnq, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans, st->L_frame >> 1, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); + } + } /* TCX-20/TCX-10 and TCX-only */ + + /* Window and overlap-add past frame if past frame is TCX */ + if ( st->last_core > ACELP_CORE && ( ( ( L_frameTCX == hTcxEnc->L_frameTCX >> 1 ) && ( st->tcxonly ) ) || ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) ) + { + if ( st->hTcxCfg->last_aldo ) + { + for ( i = 0; i < overlap - st->hTcxCfg->tcx_mdct_window_min_length; i++ ) + { + xn_buf[i] += st->hTcxEnc->old_out[i + nz]; + } + /* fade truncated ALDO window */ + for ( ; i < overlap; i++ ) + { + xn_buf[i] += st->hTcxEnc->old_out[i + nz] * st->hTcxCfg->tcx_mdct_window_minimum[overlap - 1 - i]; + } + } + else + { + if ( frame_cnt > 0 && tcx_last_overlap_mode == 0 && st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP && st->last_core != ACELP_CORE ) + { + tcx_last_overlap_mode = 2; /* use minimum overlap between the two TCX-10 windows */ + } + + tcx_windowing_synthesis_past_frame( st->hTcxEnc->Txnq, st->hTcxCfg->tcx_aldo_window_1_trunc, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, overlap, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, ( tcx_last_overlap_mode == 0 || st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? st->hTcxCfg->tcx_last_overlap_mode : tcx_last_overlap_mode ); + + for ( i = 0; i < overlap; i++ ) + { + xn_buf[i] += st->hTcxEnc->Txnq[i]; + } + } + } + + if ( !aldo && ( ( ( L_frameTCX == hTcxEnc->L_frameTCX >> 1 ) && frame_cnt > 0 ) || L_frameTCX != ( hTcxEnc->L_frameTCX >> 1 ) ) ) + { + /*Compute windowed synthesis in case of switching to ALDO windows in next frame*/ + mvr2r( xn_buf + L_frame - nz, st->hTcxEnc->old_out, nz + overlap ); + set_zero( st->hTcxEnc->old_out + nz + overlap, nz ); + + tcx_windowing_synthesis_past_frame( st->hTcxEnc->old_out + nz, st->hTcxCfg->tcx_aldo_window_1_trunc, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, overlap, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->hTcxCfg->tcx_curr_overlap_mode ); + + if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) + { + for ( i = 0; i < nz; i++ ) + { + st->hTcxEnc->old_out[nz + overlap + i] = xn_buf[L_frame - 1 - i] * st->hTcxCfg->tcx_aldo_window_1_trunc[-1 - i]; + } + } + } + + st->hTcxCfg->last_aldo = aldo; + + /* Update Txnq */ + if ( !st->hTcxCfg->last_aldo ) + { + mvr2r( xn_buf + L_frame, st->hTcxEnc->Txnq, overlap ); + } + + /* Output */ + mvr2r( xn_buf + ( overlap >> 1 ) - tcx_offset, synth, ( st->core == TCX_20_CORE ) ? st->L_frame : L_frame ); + + return; +} + +/*-------------------------------------------------------------------* + * QuantizeSpectrum() + * + * + *-------------------------------------------------------------------*/ + +void QuantizeSpectrum( + Encoder_State *st, /* i/o: encoder state structure */ + const float A[], /* i : quantized coefficients NxAz_q[M+1] */ + const Word16 Aqind[], /* i : frame-independent quantized coefficients (M+1) */ + float gainlpc[], /* i : MDCT gains of the previous frame */ + float synth[], /* o : synthesis buffer */ + const int16_t nb_bits, /* i : bit budget */ + const int16_t tnsSize, /* i : number of tns parameters put into prm */ + int16_t prm[], /* o : tcx parameters */ + const int16_t frame_cnt, /* i : frame counter in the super_frame */ + CONTEXT_HM_CONFIG *hm_cfg, /* i : HM configuration */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + int16_t L_frameTCX; /* full frame length */ + int16_t L_frame; /* frame length */ + int16_t L_spec; /* length of the coded spectrum */ + int16_t tcx_offset; /* folding point offset relative to the end of the previous frame */ + int16_t noiseFillingBorder; /* noise filling border */ + float quantized_spectrum[N_MAX]; /* quantized MDCT spectrum */ + float lf_deemph_fact[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; /* low frequency deemphasis factors */ + int16_t hm_active; /* flag indicating if the harmonic model is active */ + float fac_ns; /* noise filling level */ + int16_t nf_seed; /* noise filling random seed */ + float ener; /* energy of the quantized spectrum */ + float gain_tcx; /* global gain */ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + /*-----------------------------------------------------------* + * Quantize the MDCT spectrum * + *-----------------------------------------------------------*/ + + QuantizeTCXSpectrum( st, frame_cnt, hTcxEnc->spectrum[frame_cnt], gainlpc, Aqind, tnsSize, nb_bits, vad_hover_flag, + &L_frameTCX, &L_frame, &L_spec, &tcx_offset, &noiseFillingBorder, quantized_spectrum, hm_cfg, &hm_active, lf_deemph_fact, &nf_seed, &ener, &gain_tcx, prm ); + + /*-----------------------------------------------------------* + * Estimate and quantize noise factor * + *-----------------------------------------------------------*/ + + EstimateTCXNoiseLevel( st, hTcxEnc->spectrum[frame_cnt], quantized_spectrum, gain_tcx, L_frame, noiseFillingBorder, hm_active, &fac_ns, &prm[1] ); + + /*-----------------------------------------------------------* + * Internal decoder * + *-----------------------------------------------------------*/ + + InternalTCXDecoder( st, frame_cnt, L_frameTCX, L_frame, L_spec, tcx_offset, noiseFillingBorder, quantized_spectrum, ener, lf_deemph_fact, fac_ns, nf_seed, A, gainlpc, hm_active, gain_tcx, hTcxEnc->spectrum[frame_cnt], synth, &prm[0] ); + + /* Update L_frame_past */ + st->L_frame_past = L_frame; + + /* Update overlap */ + if ( ( ( ( L_frameTCX == hTcxEnc->L_frameTCX >> 1 ) && frame_cnt > 0 ) || ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) && ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) + { + st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + } + + + return; +} + + +/*-------------------------------------------------------------------* + * coder_tcx() + * + * + *-------------------------------------------------------------------*/ + +void coder_tcx( + Encoder_State *st, /* i/o: encoder state structure */ + TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ + const float A[], /* i : quantized coefficients NxAz_q[M+1] */ + const Word16 Aqind[], /* i : frame-independent quantized coefficients (M+1) */ + float synth[], /* o : decoded synthesis */ + const int16_t L_frame_glob, /* i : frame length */ + const int16_t L_frameTCX_glob, + const int16_t L_spec, + int16_t nb_bits, /* i : bit budget */ + float spectrum[], /* i/o: MDCT spectrum */ + int16_t prm[], /* o : tcx parameters */ + CONTEXT_HM_CONFIG *hm_cfg, + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + int16_t L_frame; + int16_t left_overlap = -1, right_overlap = -1; + int16_t tnsSize = 0; /* number of tns parameters put into prm */ + int16_t tnsBits = 0; /* number of tns bits in the frame */ + int16_t ltpBits = 0; + float gainlpc[FDNS_NPTS]; + float buf[N_MAX + L_MDCT_OVLP_MAX]; + float winMDST[N_MAX + L_MDCT_OVLP_MAX]; + float *win; + float *powerSpec; + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + powerSpec = win = buf; /* Share memory for windowed TD signal and for the power spectrum */ + + L_frame = L_frameTCX_glob; + + /*-----------------------------------------------------------* + * Windowing and MDCT * + *-----------------------------------------------------------*/ + + if ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) + { + WindowSignal( hTcxCfg, hTcxCfg->tcx_offsetFB, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, &left_overlap, &right_overlap, st->hTcxEnc->speech_TCX, &L_frame, win, 1, 1, 0 ); + + /* Compute MDCT for xn_buf[] */ + TCX_MDCT( win, spectrum, left_overlap, L_frame - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); + } + else + { + wtda( st->hTcxEnc->new_speech_TCX, win, NULL, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, L_frame ); + + WindowSignal( hTcxCfg, hTcxCfg->tcx_offsetFB, hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : hTcxCfg->tcx_curr_overlap_mode, &left_overlap, &right_overlap, st->hTcxEnc->speech_TCX, &L_frame, winMDST, 1, 1, 0 ); + + edct( win, spectrum, L_frame, st->element_mode ); + + v_multc( spectrum, (float) sqrt( (float) NORM_MDCT_FACTOR / L_frame ), spectrum, L_frame ); + } + + /*-----------------------------------------------------------* + * Attenuate upper end of NB spectrum, * + * to simulate ACELP behavior * + *-----------------------------------------------------------*/ + + if ( st->narrowBand ) + { + attenuateNbSpectrum( L_frame, spectrum ); + } + + /*-----------------------------------------------------------* + * Compute noise-measure flags for spectrum filling * + * and quantization (0: tonal, 1: noise-like). * + * Detect low pass if present. * + *-----------------------------------------------------------*/ + + AnalyzePowerSpectrum( st, L_frame * st->L_frame / hTcxEnc->L_frameTCX, L_frame, left_overlap, right_overlap, spectrum, ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ? win : winMDST, powerSpec ); + + if ( hTcxCfg->fIsTNSAllowed ) + { + SetTnsConfig( hTcxCfg, L_frame_glob == st->L_frame, st->last_core == ACELP_CORE ); + + TNSAnalysis( hTcxCfg, L_frame, L_spec, TCX_20, st->last_core == ACELP_CORE, spectrum, NULL, -1, hTcxEnc->tnsData, hTcxEnc->fUseTns, &st->hIGFEnc->tns_predictionGain ); + } + else + { + hTcxEnc->fUseTns[0] = hTcxEnc->fUseTns[1] = 0; + } + + if ( st->igf ) + { + ProcessIGF( st, spectrum, spectrum, powerSpec, 1, 0, 0, vad_hover_flag ); + } + + ShapeSpectrum( hTcxCfg, A, gainlpc, L_frame_glob, L_spec, spectrum, hTcxEnc->fUseTns[0], st, NULL ); + + if ( st->igf ) + { + nb_bits -= st->hIGFEnc->infoTotalBitsPerFrameWritten; + } + + if ( hTcxCfg->fIsTNSAllowed ) + { + EncodeTnsData( hTcxCfg->pCurrentTnsConfig, hTcxEnc->tnsData, prm + 1 + NOISE_FILL_RANGES + LTPSIZE, &tnsSize, &tnsBits ); + } + + QuantizeSpectrum( st, A, Aqind, gainlpc, synth, nb_bits - tnsBits - ltpBits, tnsSize, prm, 0, hm_cfg, vad_hover_flag ); + + return; +} + +/*-------------------------------------------------------------------* + * coder_tcx_post() + * + * + *-------------------------------------------------------------------*/ + +void coder_tcx_post( + Encoder_State *st, + float *A, + const float *Ai ) +{ + float xn_buf[L_FRAME_MAX]; + + /* TCX output */ + mvr2r( st->synth, xn_buf, st->L_frame ); + + /*-----------------------------------------------------------* + * Memory update * + *-----------------------------------------------------------*/ + + /* Update LPDmem (Txnq,syn,syn_pe,old_exc,wsyn,Ai,Aq) */ + tcx_encoder_memory_update( st, xn_buf, Ai, A ); + + return; +} diff --git a/lib_enc/cod_uv.c b/lib_enc/cod_uv.c new file mode 100644 index 0000000000..166a9685dc --- /dev/null +++ b/lib_enc/cod_uv.c @@ -0,0 +1,90 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * gauss_L2: + * + * encode an additional Gaussian excitation for unvoiced subframes and compute + * associated xcorrelations for gains computation + * + * Gaussian excitation is generated by a white noise and shapes it with LPC-derived filter + *-------------------------------------------------------------------*/ + +void gauss_L2( + const float h[], /* i : weighted LP filter impulse response */ + float code[], /* o : gaussian excitation */ + float y2[], /* i : zero-memory filtered code. excitation */ + float y11[], /* o : zero-memory filtered gauss. excitation */ + float *gain, /* o : excitation gain */ + float g_corr[], /* i/o: correlation structure for gain coding */ + float tilt_code, /* i : tilt of code */ + const float *Aq, /* i : quantized LPCs */ + float formant_enh_num, /* i : formant enhancement factor */ + int16_t *seed_acelp /* i/o: random seed */ +) +{ + int16_t i; + + /*-----------------------------------------------------------------* + * Find new target for the Gaussian codebook + *-----------------------------------------------------------------*/ + + /*Generate white gaussian noise using central limit theorem method (N only 4 as E_util_random is not purely uniform)*/ + for ( i = 0; i < L_SUBFR; i++ ) + { + code[i] = (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); + code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); + code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); + } + + /*Shape the gaussian excitation*/ + cb_shape( 1, 0, 0, 1, 0, formant_enh_num, FORMANT_SHARPENING_G2, Aq, code, tilt_code, 0, L_SUBFR ); + + /*compute 0s memory weighted synthesis contribution and find gain*/ + conv( code, h, y11, L_SUBFR ); + *gain = 0.f; + + /*Update correlations for gains coding */ + g_corr[0] = 0.01F + dotp( y11, y11, L_SUBFR ); + g_corr[4] = 0.01F + dotp( y11, y2, L_SUBFR ); + + return; +} diff --git a/lib_enc/comvad_decision.c b/lib_enc/comvad_decision.c new file mode 100644 index 0000000000..4ccd0e4142 --- /dev/null +++ b/lib_enc/comvad_decision.c @@ -0,0 +1,875 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "rom_enc.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * local function prototypes + *-------------------------------------------------------------------*/ + +static int16_t comvad_hangover( const float lt_snr_org, const float snr, const float lf_snr, const float snr_flux, const int16_t bw_index, const int16_t vad_flag, const int16_t pre_res_hang_num, const int16_t continuous_speech_num2, const int16_t noisy_type ); + + +/*-------------------------------------------------------------------* + * comvad_decision() + * + * + *-------------------------------------------------------------------*/ + +int16_t comvad_decision( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + const float snr, /* i : frequency domain SNR */ + const float tsnr, /* i : time domain SNR */ + const float snr_flux, /* i : average tsnr of several frames */ + const float lt_snr, /* i : long time SNR calculated by fg_energy and bg_energy*/ + const float lt_snr_org, /* i : original long time SNR */ + const float lf_snr, /* i : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ + const float frame_energy, /* i : current frame energy */ + const int16_t music_backgound_f, /* i : background music flag */ + int16_t *cldfb_addition, + const int16_t vada_flag ) +{ + int16_t speech_flag = hVAD_CLDFB->speech_flag; + int16_t fg_energy_count = hVAD_CLDFB->fg_energy_count; + int16_t bg_energy_count = hVAD_CLDFB->bg_energy_count; + float fg_energy = hVAD_CLDFB->fg_energy; + float bg_energy = hVAD_CLDFB->bg_energy; + int16_t l_speech_snr_count = hVAD_CLDFB->l_speech_snr_count; + int16_t vad_flag; + float snr_thresh = 0.2f; + float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; + float *sp_center = hVAD_CLDFB->sp_center; + int16_t frameloop = hVAD_CLDFB->frameloop; + int16_t bw_index = hVAD_CLDFB->bw_index; + int16_t noisy_type = UNKNOWN_NOISE; + int16_t vadb_flag = 0; + + /* + * ls_snr_org + * -------NB---------------WB----------------SWB--------- + * l16 [13.5 17] [13.5 16] [13.1 15.2] + * 126 [12 14] [10.7 12.7] [10.3 12.1] + * l36 [9.5 12] [8.5 10.5] [7.8 9.2] + * 15dB [3.5 4.5] + * 20dB [4.5 5.5] + */ + + /* + * lt_snr_org + * -------NB---------------WB----------------SWB--------- + * l16 [-- --] [-- --] [-- --] + * 126 [-- --] [-- -] [-- --] + * l36 [-- --] [-- --] [- --] + * 15dB [1.2 1.9] + * 20dB [2.1 2.7] [1.8 2.3] + */ + + if ( hVAD_CLDFB->lf_snr_smooth > LS_MIN_SELENCE_SNR[bw_index - CLDFBVAD_NB_ID] && lt_snr_org > LT_MIN_SILENCE_SNR[bw_index - CLDFBVAD_NB_ID] ) + { + noisy_type = SILENCE; + } + + snr_thresh = construct_snr_thresh( sp_center, snr_flux, lt_snr, lf_snr, hVAD_CLDFB->continuous_speech_num, hVAD_CLDFB->continuous_noise_num, hVAD_CLDFB->fg_energy_est_start, bw_index ); + + if ( snr > snr_thresh ) + { + vad_flag = 1; + } + else + { + vad_flag = 0; + } + + if ( bw_index == CLDFBVAD_WB_ID ) + { + if ( tsnr > 2.8 ) + { + vad_flag = 1; + } + } + else + { + if ( tsnr > 2.6 ) + { + vad_flag = 1; + } + } + + if ( frameloop > 25 ) + { + if ( vad_flag == 1 && hVAD_CLDFB->fg_energy_est_start == 1 ) + { + if ( fg_energy_count == 512 ) + { + fg_energy = fg_energy * 0.75f; + fg_energy_count = 384; + } + if ( ( frame_energy * bg_energy_count ) > 6 * bg_energy ) + { + fg_energy = fg_energy + frame_energy; + fg_energy_count = fg_energy_count + 1; + } + } + } + + if ( music_backgound_f ) + { + vad_flag = 1; + } + + if ( vad_flag == 1 ) + { + if ( snr > hVAD_CLDFB->l_silence_snr / hVAD_CLDFB->l_silence_snr_count + 1.5 ) + { + if ( l_speech_snr_count == 512 ) + { + hVAD_CLDFB->l_speech_snr = hVAD_CLDFB->l_speech_snr * 0.75f; + l_speech_snr_count = 384; + + hVAD_CLDFB->l_speech_snr += snr; + l_speech_snr_count++; + } + else + { + hVAD_CLDFB->l_speech_snr += snr; + l_speech_snr_count++; + } + } + } + + if ( bw_index == CLDFBVAD_NB_ID ) + { + if ( snr_flux > 1.9 + lt_snr * 0.28 ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.5 ) && sp_center[3] > 1.6 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.2 ) && sp_center[3] > 1.9 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.00f ) && sp_center[3] > 3.2 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + } + + if ( bw_index == CLDFBVAD_WB_ID ) + { + if ( ( snr_flux > 2.1 + lt_snr * 0.24 ) ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.6 ) && sp_center[3] > 2.5 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.2 ) && sp_center[3] > 2.8 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.0 ) && sp_center[3] > 4.5 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + } + + if ( bw_index == CLDFBVAD_SWB_ID ) + { + if ( ( snr_flux > 2.1 + lt_snr * 0.32 ) ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.68 ) && sp_center[3] > 2.76 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.24 ) && sp_center[3] > 2.92 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + if ( ( snr_flux > 1.10f ) && sp_center[3] > 4.6 && lt_snr_org < 3.5 ) + { + vad_flag = 1; + } + } + + if ( hVAD_CLDFB->fg_energy_est_start == 0 ) + { + if ( ltd_stable_rate[0] > 0.08 && vad_flag == 1 && frame_energy > 50 ) + { + hVAD_CLDFB->fg_energy_est_start = 1; + } + } + + /************************************************************************/ + /* hangover */ + /************************************************************************/ + + speech_flag = comvad_hangover( lt_snr_org, snr, lf_snr, snr_flux, bw_index, vad_flag, speech_flag, hVAD_CLDFB->continuous_speech_num2, noisy_type ); + + if ( vad_flag == 0 && speech_flag > 0 ) + { + speech_flag--; + vad_flag = 1; + } + + vadb_flag = vad_flag; + + if ( bw_index == CLDFBVAD_SWB_ID ) + { + if ( SILENCE == noisy_type && snr > 0.2 && vad_flag == 0 ) + { + vad_flag = vada_flag; + } + else if ( hVAD_CLDFB->lf_snr_smooth < 10.5 || SILENCE != noisy_type ) + { + if ( ( snr_flux > 1.8 ) || ( ( hVAD_CLDFB->continuous_speech_num2 > 40 ) && ( snr_flux > 1.6 ) ) || music_backgound_f == 1 ) + { + vad_flag = vada_flag | vadb_flag; + } + /*only use for silence*/ + else if ( noisy_type == SILENCE ) + { + vad_flag = vada_flag; + } + } + } + else if ( bw_index == CLDFBVAD_WB_ID ) + { + if ( SILENCE == noisy_type && snr > 0.2 && vad_flag == 0 ) + { + vad_flag = vada_flag; + } + else + { + if ( hVAD_CLDFB->lf_snr_smooth < 10.5 || SILENCE != noisy_type ) + { + if ( ( snr_flux > 2.2 ) || ( ( hVAD_CLDFB->continuous_speech_num2 > 40 ) && ( snr_flux > 1.6 ) ) || music_backgound_f == 1 ) + { + vad_flag = vada_flag | vadb_flag; + } + else if ( SILENCE == noisy_type ) + { + vad_flag = vada_flag; + } + } + } + } + else + { + if ( noisy_type == SILENCE ) + { + if ( hVAD_CLDFB->lf_snr_smooth > 12.5 && music_backgound_f == 0 ) + { + vad_flag = vada_flag; + } + } + else + { + if ( ( snr_flux > 2.0 ) || ( hVAD_CLDFB->continuous_speech_num2 > 30 && ( snr_flux > 1.5 ) ) || music_backgound_f == 1 ) + { + vad_flag = vada_flag | vadb_flag; + } + } + } + + if ( vad_flag == 0 ) + { + if ( hVAD_CLDFB->l_silence_snr_count == 512 ) + { + hVAD_CLDFB->l_silence_snr = hVAD_CLDFB->l_silence_snr * 0.75f; + hVAD_CLDFB->l_silence_snr_count = 384; + + hVAD_CLDFB->l_silence_snr += snr; + hVAD_CLDFB->l_silence_snr_count++; + } + else if ( snr < 0.8 ) + { + hVAD_CLDFB->l_silence_snr += snr; + hVAD_CLDFB->l_silence_snr_count++; + } + } + + if ( vad_flag == 0 ) + { + if ( bg_energy_count == 512 ) + { + bg_energy = bg_energy * 0.75f; + bg_energy_count = 384; + } + + if ( tsnr < 1.0 ) + { + bg_energy = bg_energy + frame_energy; + bg_energy_count = bg_energy_count + 1; + } + } + + hVAD_CLDFB->lt_snr_org = lt_snr_org; + hVAD_CLDFB->speech_flag = speech_flag; + + hVAD_CLDFB->fg_energy_count = fg_energy_count; + hVAD_CLDFB->bg_energy_count = bg_energy_count; + hVAD_CLDFB->fg_energy = fg_energy; + hVAD_CLDFB->bg_energy = bg_energy; + hVAD_CLDFB->l_speech_snr_count = l_speech_snr_count; + + hVAD_CLDFB->vad_flag_for_bk_update = vad_flag; + if ( hVAD_CLDFB->update_count < 12 && vadb_flag == 1 ) + { + hVAD_CLDFB->warm_hang_num = max( 20, speech_flag ); + } + + if ( vad_flag == 0 && hVAD_CLDFB->warm_hang_num > 0 ) + { + hVAD_CLDFB->warm_hang_num--; + vad_flag = 1; + } + + if ( noisy_type == SILENCE && bw_index != CLDFBVAD_NB_ID ) + + { + *cldfb_addition = 2; + } + else + { + *cldfb_addition = 0; + + if ( bw_index == CLDFBVAD_WB_ID ) + { + *cldfb_addition = 3; + } + + if ( bw_index == CLDFBVAD_SWB_ID ) + { + *cldfb_addition = 1; + } + + if ( hVAD_CLDFB->bw_index == CLDFBVAD_NB_ID ) + { + *cldfb_addition = 1; + } + } + + return vad_flag; +} + + +/*-------------------------------------------------------------------* + * construct_snr_thresh() + * + * + *-------------------------------------------------------------------*/ + +float construct_snr_thresh( + const float sp_center[], /* i : spectral center */ + const float snr_flux, /* i : snr flux */ + const float lt_snr, /* i : long time time domain snr */ + const float lf_snr, /* i : long time frequency domain snr */ + const int16_t continuous_speech_num, /* i : number of continuous speech frames */ + const int16_t continuous_noise_num, /* i : number of continuous noise frames */ + const int16_t fg_energy_est_start, /* i : whether if estimated energy */ + const int16_t bw_index /* i : band width index */ +) +{ + float test_l_snr = 0.f; + float snr_delta; + float snr_thresh; + float bw_snr; + + snr_delta = COMVAD_INIT_SNR_DELTA[bw_index]; + bw_snr = lt_snr; + + if ( bw_index == CLDFBVAD_SWB_ID ) + { + test_l_snr = lt_snr; + test_l_snr = test_l_snr * 1.0f; + + if ( sp_center[3] > 2.80f ) + { + snr_delta = snr_delta + 0.00f; + } + else if ( sp_center[2] > 2.6 ) + { + snr_delta = snr_delta + 0.03f; + } + else if ( sp_center[2] > 1.6 ) + { + snr_delta = snr_delta + 0.05f; + } + else if ( sp_center[3] > 1.4 ) + { + snr_delta = snr_delta + 0.10f; + } + else + { + snr_delta = snr_delta + 0.40f; + } + + if ( continuous_speech_num > 8 && fg_energy_est_start == 1 ) + { + snr_delta = snr_delta - 0.2f; + } + else if ( continuous_noise_num > 12 && ( snr_flux > 0.6 + lf_snr * 0.1 ) ) + { + snr_delta = snr_delta + 0.1f; + } + else if ( continuous_noise_num > 24 ) + { + snr_delta = snr_delta + 0.2f; + } + else if ( ( continuous_noise_num > 4 ) ) + { + snr_delta = snr_delta + 0.1f; + } + } + else if ( bw_index == CLDFBVAD_WB_ID ) + { + test_l_snr = lt_snr; + if ( sp_center[3] > 2.80f ) + { + snr_delta = snr_delta + 0.00f; + } + else if ( sp_center[2] > 2.6 ) + { + snr_delta = snr_delta + 0.03f; + } + else if ( sp_center[2] > 1.6 ) + { + snr_delta = snr_delta + 0.05f; + } + else if ( sp_center[3] > 1.4 ) + { + snr_delta = snr_delta + 0.10f; + } + else + { + snr_delta = snr_delta + 0.30f; + } + + if ( continuous_speech_num > 8 && fg_energy_est_start == 1 ) + { + snr_delta = snr_delta - 0.1f; + } + else if ( continuous_noise_num > 12 && ( snr_flux > 0.6 + bw_snr * 0.1 ) ) + { + snr_delta = snr_delta + 0.1f; + } + else if ( continuous_noise_num > 24 ) + { + snr_delta = snr_delta + 0.2f; + } + else if ( ( continuous_noise_num > 4 ) ) + { + snr_delta = snr_delta + 0.1f; + } + } + else if ( bw_index == CLDFBVAD_NB_ID ) + { + test_l_snr = lt_snr; + + if ( sp_center[3] > 3.0 ) + { + snr_delta = snr_delta + 0.00f; + } + else if ( sp_center[2] > 2.6 ) + { + snr_delta = snr_delta + 0.02f; + } + else if ( sp_center[2] > 1.6 ) + { + snr_delta = snr_delta + 0.04f; + } + else if ( sp_center[2] > 1.46 ) + { + snr_delta = snr_delta + 0.10f; + } + else + { + snr_delta = snr_delta + 0.18f; + } + + if ( continuous_speech_num > 80 && fg_energy_est_start == 1 && ( sp_center[0] > 1.4 ) ) + { + snr_delta = snr_delta - 0.32f; + } + else if ( continuous_speech_num > 8 && fg_energy_est_start == 1 && ( snr_flux > 0.2 + lf_snr * 0.1 ) ) + { + snr_delta = snr_delta - 0.1f; + } + else if ( continuous_noise_num > 12 && ( snr_flux > 0.6 + lf_snr * 0.1 ) ) + { + snr_delta = snr_delta + 0.1f; + } + else if ( continuous_noise_num > 24 ) + { + snr_delta = snr_delta + 0.2f; + } + } + else + { + snr_delta = 1.0f; + } + + snr_thresh = snr_delta + test_l_snr; + + + return snr_thresh; +} + + +/*-------------------------------------------------------------------* + * comvad_hangover() + * + * + *-------------------------------------------------------------------*/ + +static int16_t comvad_hangover( + const float lt_snr_org, /* i : original long time SNR */ + const float snr, /* i : frequency domain SNR */ + const float lf_snr, /* i : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ + const float snr_flux, /* i : average tsnr */ + const int16_t bw_index, /* i : band width index */ + const int16_t vad_flag, /* i : VAD flag */ + const int16_t pre_res_hang_num, /* i : residual number of previous hangover */ + const int16_t continuous_speech_num2, /* i : number of continuous speech frames */ + const int16_t noisy_type /* i : noisy type */ +) +{ + int16_t speech_flag = pre_res_hang_num; + + if ( bw_index == CLDFBVAD_SWB_ID ) + { + if ( vad_flag ) + { + if ( lt_snr_org > 3.5f ) + { + speech_flag = 3; + } + else + { + speech_flag = 4; + } + + if ( ( continuous_speech_num2 < 8 ) && ( lt_snr_org < 4.0f ) ) + { + speech_flag = 8 - continuous_speech_num2; + } + else if ( ( snr_flux > 0.8 ) && ( continuous_speech_num2 > 24 ) ) + { + if ( lt_snr_org > 3.6f ) + { + speech_flag = 3; + } + else if ( lt_snr_org > 2.6f ) + { + speech_flag = 3; + } + else if ( lt_snr_org > 1.6f ) + { + speech_flag = 4; + } + else + { + speech_flag = 5; + } + speech_flag = speech_flag - 1; + } + + if ( continuous_speech_num2 < 120 ) + { + if ( snr > 1.5 ) + { + speech_flag = 9; + } + else if ( snr > 1.0 && speech_flag < 7 ) + { + speech_flag = 7; + } + else if ( speech_flag < 3 ) + { + speech_flag = 3; + } + if ( speech_flag > 3 ) + { + speech_flag -= 2; + } + } + else + { + if ( lt_snr_org > 3.6f ) + { + speech_flag = 1; + } + else if ( lt_snr_org > 3.0f ) + { + speech_flag = 2; + } + else if ( lt_snr_org > 2.5f ) + { + speech_flag = 3; + } + else if ( lt_snr_org > 2.0f ) + { + speech_flag = 3; + } + else if ( lt_snr_org > 1.5f ) + { + speech_flag = 4; + } + else + { + speech_flag = 5; + } + } + + if ( noisy_type == SILENCE ) + { + speech_flag = 6; + } + } + } + else if ( bw_index == CLDFBVAD_WB_ID ) + { + if ( vad_flag ) + { + if ( lt_snr_org > 3.5f ) + { + speech_flag = 1; + } + else + { + speech_flag = 2; + } + + if ( ( continuous_speech_num2 < 8 ) && ( lt_snr_org < 4.0f ) ) + { + speech_flag = 8 - continuous_speech_num2; + } + else if ( ( snr_flux > 0.9 ) && ( continuous_speech_num2 > 50 ) ) + { + if ( lt_snr_org > 3.6f ) + { + speech_flag = 1; + } + else if ( lt_snr_org > 2.6f ) + { + speech_flag = 5; + } + else if ( lt_snr_org > 1.6f ) + { + speech_flag = 6; + } + else + { + speech_flag = 7; + } + + if ( speech_flag > 1 ) + { + speech_flag = speech_flag - 1; + } + } + + if ( continuous_speech_num2 < 120 ) + { + if ( snr > 1.5 ) + { + speech_flag = 6; + } + else if ( snr > 1.0 && speech_flag < 5 ) + { + speech_flag = 5; + } + else if ( snr > 0.8 && lt_snr_org < 2 && speech_flag < 4 ) + { + speech_flag = 4; + } + else if ( speech_flag < 3 ) + { + speech_flag = 3; + } + } + else + { + if ( lt_snr_org > 3.6f ) + { + speech_flag = 1; + } + else if ( lt_snr_org > 3.0f ) + { + speech_flag = 2; + } + else if ( lt_snr_org > 2.5f ) + { + speech_flag = 2; + } + else if ( lt_snr_org > 2.0f ) + { + speech_flag = 3; + } + else + { + speech_flag = 3; + } + } + + if ( noisy_type == SILENCE ) + { + speech_flag = 6; + } + } + } + else + { + if ( vad_flag ) + { + if ( lt_snr_org > 3.5f ) + { + speech_flag = 3; + } + else + { + speech_flag = 4; + } + + if ( ( continuous_speech_num2 < 8 ) && ( lt_snr_org < 4.0f ) ) + { + speech_flag = 8 - continuous_speech_num2; + } + else if ( ( snr_flux > 0.8 + lf_snr * 0.1 ) && ( continuous_speech_num2 > 24 ) ) + { + if ( lt_snr_org > 3.6f ) + { + speech_flag = 3; + } + else if ( lt_snr_org > 2.6f ) + { + speech_flag = 8; + } + else if ( lt_snr_org > 1.2f ) + { + speech_flag = 10; + } + else + { + speech_flag = 12; + } + + if ( speech_flag > 2 ) + { + speech_flag = speech_flag - 2; + } + } + + if ( continuous_speech_num2 < 120 ) + { + if ( snr > 1.5 ) + { + speech_flag = 10; + } + else if ( snr > 1.0 && speech_flag < 7 ) + { + speech_flag = 7; + } + else if ( speech_flag < 3 && continuous_speech_num2 > 12 ) + { + speech_flag = 3; + } + } + else + { + if ( lt_snr_org > 3.6f ) + { + speech_flag = 2; + } + else if ( lt_snr_org > 3.0f ) + { + speech_flag = 2; + } + else if ( lt_snr_org > 2.5f ) + { + speech_flag = 3; + } + else if ( lt_snr_org > 2.0f ) + { + speech_flag = 3; + } + else if ( lt_snr_org > 1.5f ) + { + speech_flag = 4; + } + else + { + speech_flag = 4; + } + } + + if ( noisy_type == SILENCE ) + { + speech_flag = 2; + } + } + } + + if ( vad_flag == 1 ) + { + if ( noisy_type != SILENCE ) + { + speech_flag--; + } + else + { + speech_flag = speech_flag - 3; + } + + if ( speech_flag < 0 ) + { + speech_flag = 0; + } + } + + return speech_flag; +} diff --git a/lib_enc/cor_shif.c b/lib_enc/cor_shif.c new file mode 100644 index 0000000000..d27b097a43 --- /dev/null +++ b/lib_enc/cor_shif.c @@ -0,0 +1,72 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Correlation_shift + * + * Find normalized correlation correction dependent on estimated noise + * Note: this variable is basically active only if noise suppression + * is desactivated. * Otherwise, (for default NS = 14 dB and up to 10dB SNR) + * it can be assumed about 0 + *-------------------------------------------------------------------*/ + +#define MAX_CORR_SHIFT 0.5f + +/*! r: noise dependent voicing correction */ +float correlation_shift( + const float totalNoise /* i : noise estimate over all critical bands */ +) +{ + float corr_shift; + + corr_shift = 0.0f; + if ( totalNoise > 28.18225893613955f ) /* to make corr_shift > 0.0 */ + { + /* useful values range from 0 to 1 (can saturate at 1.0) */ + corr_shift = 2.4492e-4f * (float) exp( 0.1596f * totalNoise ) - 0.022f; + } + if ( corr_shift > MAX_CORR_SHIFT ) + { + corr_shift = MAX_CORR_SHIFT; + } + return corr_shift; +} diff --git a/lib_enc/core_enc_2div.c b/lib_enc/core_enc_2div.c new file mode 100644 index 0000000000..65a5c78650 --- /dev/null +++ b/lib_enc/core_enc_2div.c @@ -0,0 +1,246 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * core_encode_twodiv() + * + * Two-div core encoder + *-------------------------------------------------------------------*/ + +void core_encode_twodiv( + Encoder_State *st, /* i/o: coder memory state */ + const float new_samples[], /* i : new samples */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t n; + float lsp_new[M], lsp_mid[M]; + float lsf_q[M], lsp_q[M]; + float lspmid_q[M]; + float A_q[M + 1]; + int16_t param_lpc[NPRM_LPC_NEW]; + int16_t nbits_lpc[2]; + int16_t param_core[2 * NPRM_DIV]; + int16_t target_bits; + float gainlpc[2][FDNS_NPTS]; + int16_t tnsSize[2]; /* number of tns parameters put into prm */ + int16_t tnsBits[2]; /* number of tns bits in the frame */ + int16_t ltpBits; + int16_t bitsAvailable; + int16_t indexBuffer[2 * ( ( N_MAX / 2 ) + 1 )]; + CONTEXT_HM_CONFIG hm_cfg[2]; + int16_t bits_param_lpc[10], no_param_lpc; + int16_t i, T_op[3]; + + hm_cfg[0].indexBuffer = &indexBuffer[0]; + hm_cfg[1].indexBuffer = &indexBuffer[N_MAX / 2 + 1]; + + set_s( tnsSize, 0, 2 ); + set_s( tnsBits, 0, 2 ); + ltpBits = 0; + + for ( i = 0; i < 3; i++ ) + { + T_op[i] = st->pitch[i]; + + /* check minimum pitch for quantization */ + if ( T_op[i] < PIT_MIN_SHORTER ) + { + T_op[i] *= 2; + } + + /* convert pitch values to core sampling-rate */ + if ( st->L_frame != L_FRAME ) + { + T_op[i] = (int16_t) ( T_op[i] * (float) st->L_frame / (float) L_FRAME + 0.5f ); + } + } + + /*--------------------------------------------------------------* + * TCX20/TCX10 switching decision + *---------------------------------------------------------------*/ + + if ( st->hTcxEnc->tcxMode == TCX_10 ) + { + st->core = TCX_10_CORE; + } + else if ( st->hTcxEnc->tcxMode == TCX_20 ) + { + st->core = TCX_20_CORE; + } + + /*--------------------------------------------------------------* + * Core Signal Analysis: MDCT, TNS, LPC analysis + *---------------------------------------------------------------*/ + + core_signal_analysis_high_bitrate( new_samples, T_op, lsp_new, lsp_mid, st, NULL, tnsSize, tnsBits, param_core, <pBits, NULL, st->L_frame, hTcxEnc->L_frameTCX, EVS_MONO, vad_hover_flag ); + + /*--------------------------------------------------------------* + * LPC Quantization + *---------------------------------------------------------------*/ + + lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, st->coder_type, 0, /*No acelp->no need to compute any mid-LPC*/ + param_lpc, nbits_lpc, bits_param_lpc, &no_param_lpc ); + + /*--------------------------------------------------------------* + * Rate switching + *--------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + mvr2r( lsp_q, st->lsp_old, M ); + mvr2r( lsf_q, st->lsf_old, M ); + } + + /*--------------------------------------------------------------* + * Run Two TCX10 + *---------------------------------------------------------------*/ + + if ( st->core == TCX_10_CORE ) + { + const int16_t last_ace_mode = st->last_core; + + for ( n = 0; n < 2; n++ ) + { + if ( n == 0 ) + { + lsp2a_stab( lspmid_q, A_q, M ); + } + else + { + lsp2a_stab( lsp_q, A_q, M ); + } + + /* Shape spectrum */ + ShapeSpectrum( st->hTcxCfg, A_q, gainlpc[n], st->L_frame / 2, st->hTcxCfg->tcx_coded_lines / 2, hTcxEnc->spectrum[n], hTcxEnc->fUseTns[n], st, NULL ); + + st->last_core = st->core; + } + st->last_core = last_ace_mode; + + /* Calculate target bits */ + bitsAvailable = st->bits_frame_core - nbits_lpc[0] - nbits_lpc[1] - st->nb_bits_header_tcx; + + /* subtract bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ + bitsAvailable -= ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; + { + bitsAvailable -= st->hIGFEnc->infoTotalBitsWritten; + } + + hTcxEnc->measuredBwRatio = 1.f; + + for ( n = 0; n < 2; n++ ) + { + target_bits = ( ( bitsAvailable + 1 - n ) >> 1 ) - tnsBits[n]; + + if ( n == 0 ) + { + target_bits -= ltpBits; + } + + if ( st->enablePlcWaveadjust && n ) + { + target_bits -= 1; + } + + /* Run TCX10 encoder */ + QuantizeSpectrum( st, A_q, NULL, gainlpc[n], st->synth + n * st->L_frame / 2, target_bits, tnsSize[n], param_core + n * NPRM_DIV, n, &hm_cfg[n], vad_hover_flag ); + + /* Update tcx overlap mode */ + if ( ( n > 0 ) || !st->tcxonly ) + { + st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; + } + } + + coder_tcx_post( st, A_q, Aw ); + } + + /*--------------------------------------------------------------* + * Run One TCX20 + *---------------------------------------------------------------*/ + + if ( st->core == TCX_20_CORE ) + { + lsp2a_stab( lsp_q, A_q, M ); + + ShapeSpectrum( st->hTcxCfg, A_q, gainlpc[0], st->L_frame, st->hTcxCfg->tcx_coded_lines, hTcxEnc->spectrum_long, hTcxEnc->fUseTns[0], st, NULL ); + + hTcxEnc->measuredBwRatio = 1.f; + + /* Calculate target bits */ + target_bits = st->bits_frame_core - tnsBits[0] - nbits_lpc[0] - st->nb_bits_header_tcx - ltpBits; + + /* subtract bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ + target_bits -= ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; + { + target_bits -= st->hIGFEnc->infoTotalBitsPerFrameWritten; + } + if ( st->enablePlcWaveadjust ) + { + target_bits -= 1; + } + + QuantizeSpectrum( st, A_q, NULL, gainlpc[0], st->synth, target_bits, tnsSize[0], param_core, 0, &hm_cfg[0], vad_hover_flag ); + + coder_tcx_post( st, A_q, Aw ); + } + + /* Update lsp/lsf memory */ + mvr2r( lsf_q, st->lsf_old, M ); + mvr2r( lsp_q, st->lsp_old, M ); + + + /*--------------------------------------------------------------* + * Generate Bitstream + *---------------------------------------------------------------*/ + + enc_prm( st, param_core, param_lpc, hm_cfg, bits_param_lpc, no_param_lpc ); + + return; +} diff --git a/lib_enc/core_enc_init.c b/lib_enc/core_enc_init.c new file mode 100644 index 0000000000..333700164a --- /dev/null +++ b/lib_enc/core_enc_init.c @@ -0,0 +1,768 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void init_tcx( Encoder_State *st, const int16_t L_frame_old, const int32_t total_brate, const int32_t last_total_brate, const int16_t is_mct ); +static void init_sig_buffers( Encoder_State *st, const int16_t L_frame_old, const int16_t L_subfr, const int32_t total_brate, const int32_t last_total_brate ); +static void init_core_sig_ana( Encoder_State *st ); +static void init_acelp( Encoder_State *st, const int16_t L_frame_old, const int32_t total_brate, const int32_t last_total_brate ); +static void init_modes( Encoder_State *st, const int32_t last_total_brate ); + +/*-----------------------------------------------------------------------* + * init_coder_ace_plus() + * + * Initialization of state variables + *-----------------------------------------------------------------------*/ + +void init_coder_ace_plus( + Encoder_State *st, + const int32_t last_total_brate, + const int16_t is_mct ) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t L_frame_old; /*keep old frame size for switching */ + int16_t L_subfr; + + /* Bitrate */ + st->tcxonly = getTcxonly( st->element_mode, st->total_brate, is_mct ); + + /* Core Sampling Rate */ + st->sr_core = getCoreSamplerateMode2( st->element_mode, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode ); + st->fscale = sr2fscale( st->sr_core ); + + /* Narrowband? */ + st->narrowBand = ( st->bwidth == NB ) ? 1 : 0; + + /* Core Framing */ + L_frame_old = st->last_L_frame; + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + st->L_frame_past = -1; + + if ( hTcxEnc != NULL ) + { + hTcxEnc->L_frameTCX = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); + + if ( st->ini_frame == 0 ) + { + set_zero( hTcxEnc->Txnq, L_FRAME32k / 2 + 64 ); + hTcxEnc->acelp_zir = hTcxEnc->Txnq + L_FRAME / 2; + hTcxEnc->tcx_target_bits_fac = 1.0f; + } + } + + if ( ( st->element_mode == EVS_MONO && st->L_frame == L_FRAME16k && st->total_brate <= ACELP_32k ) || ( st->element_mode > EVS_MONO && st->L_frame == L_FRAME16k && st->total_brate <= MAX_ACELP_BRATE ) ) + { + st->nb_subfr = NB_SUBFR16k; + } + else + { + st->nb_subfr = NB_SUBFR; + } + L_subfr = st->L_frame / st->nb_subfr; + + /* Core Lookahead */ + st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); + st->encoderLookahead_FB = NS2SA( st->input_Fs, ACELP_LOOK_NS ); + + if ( st->ini_frame == 0 ) + { + st->acelpFramesCount = 0; + st->prevTempFlatness = 1.0f; + } + + /* Initialize TBE */ + if ( st->hBWE_TD != NULL ) + { + st->hBWE_TD->prev_coder_type = GENERIC; + set_f( st->hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); + st->hBWE_TD->prev_tilt_para = 0.0f; + set_zero( st->hBWE_TD->cur_sub_Aq, M + 1 ); + } + + st->currEnergyHF = 0; + + /* Initialize LPC analysis/quantization */ + if ( st->sr_core <= INT_FS_16k && st->tcxonly == 0 ) + { + st->lpcQuantization = 1; + } + else + { + st->lpcQuantization = 0; + } + + st->next_force_safety_net = 0; + if ( ( st->last_L_frame != st->L_frame ) || ( st->last_core == AMR_WB_CORE ) || ( st->last_core == HQ_CORE ) ) + { + set_f( st->mem_MA, 0.0f, M ); + mvr2r( GEWB_Ave, st->mem_AR, M ); + } + + /* Initialize IGF */ + if ( st->hIGFEnc != NULL ) + { + st->hIGFEnc->infoStopFrequency = -1; + } + + if ( st->igf && st->hIGFEnc != NULL ) + { + IGFEncSetMode( st->hIGFEnc, st->total_brate, st->bwidth, st->element_mode, st->rf_mode ); + } + else if ( st->hIGFEnc != NULL ) + { + st->hIGFEnc->infoTotalBitsWritten = 0; + st->hIGFEnc->infoTotalBitsPerFrameWritten = 0; + } + + /* Initialize Core Signal Analysis Module */ + init_core_sig_ana( st ); + + /* Initialize TCX */ + if ( hTcxEnc != NULL ) + { + init_tcx( st, L_frame_old, st->total_brate, last_total_brate, is_mct ); + } + + /* Initialize Signal Buffers */ + init_sig_buffers( st, L_frame_old, L_subfr, st->total_brate, last_total_brate ); + + /* Initialize ACELP */ + init_acelp( st, L_frame_old, st->total_brate, last_total_brate ); + + if ( st->ini_frame == 0 ) + { + st->tec_tfa = 0; + } + + if ( st->hTECEnc != NULL ) + { + resetTecEnc( st->hTECEnc, st->tec_tfa ); + } + + if ( st->bwidth == SWB && ( st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + st->tec_tfa = 1; + } + else + { + st->tec_tfa = 0; + } + + st->tec_flag = 0; + st->tfa_flag = 0; + + + if ( ( st->total_brate == ACELP_9k60 || st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + st->glr = 1; + } + else + { + st->glr = 0; + } + + st->glr_reset = 0; + + /* Initialize ACELP/TCX Modes */ + init_modes( st, last_total_brate ); + + /* Adaptive BPF */ + set_zero( st->mem_bpf, 2 * L_FILT16k ); + set_zero( st->mem_error_bpf, 2 * L_FILT16k ); + + if ( st->total_brate >= HQ_48k ) + { + st->enablePlcWaveadjust = 1; + } + else + { + st->enablePlcWaveadjust = 0; + } + + if ( st->hPlcExt ) + { + init_PLC_enc( st->hPlcExt, st->sr_core ); + } + + st->glr_idx[0] = 0; + st->glr_idx[1] = 0; + st->mean_gc[0] = 0.0f; + st->mean_gc[1] = 0.0f; + st->prev_lsf4_mean = 0.0f; + st->last_stab_fac = 0.0f; + + return; +} + +/*-----------------------------------------------------------------------* + * init_tcx() + * + * Initialization of TCX + *-----------------------------------------------------------------------*/ + +static void init_tcx( + Encoder_State *st, + const int16_t L_frame_old, + const int32_t total_brate, + const int32_t last_total_brate, + const int16_t is_mct ) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */ + hTcxEnc->spectrum[0] = hTcxEnc->spectrum_long; + hTcxEnc->spectrum[1] = hTcxEnc->spectrum_long + N_TCX10_MAX; + + init_tcx_cfg( st->hTcxCfg, total_brate, st->sr_core, st->input_Fs, st->L_frame, st->bwidth, hTcxEnc->L_frameTCX, st->fscale, st->encoderLookahead_enc, st->encoderLookahead_FB, st->preemph_fac, st->tcxonly, st->rf_mode, st->igf, st->hIGFEnc != NULL ? st->hIGFEnc->infoStopFrequency : 0, st->element_mode, st->ini_frame, is_mct, st->mct_chan_mode ); + + /* Init TCX target bits correction factor */ + hTcxEnc->tcx_target_bits_fac = 1.0f; + hTcxEnc->measuredBwRatio = 1.0f; + hTcxEnc->noiseTiltFactor = 0.5625f; + hTcxEnc->noiseLevelMemory_cnt = 0; + + set_f( hTcxEnc->ltpGainMemory, 0.0f, N_LTP_GAIN_MEMS ); + set_s( hTcxEnc->memQuantZeros, 0, L_FRAME_PLUS ); + + /* TCX-LTP */ + hTcxEnc->tcxltp = getTcxLtp( st->sr_core ); + + if ( st->ini_frame == 0 ) + { + hTcxEnc->tcxltp_pitch_int_past = st->L_frame; + hTcxEnc->tcxltp_pitch_fr_past = 0; + hTcxEnc->tcxltp_gain_past = 0.f; + hTcxEnc->tcxltp_norm_corr_past = 0.f; + hTcxEnc->tcxltp_norm_corr_mem = 0.f; + hTcxEnc->kernel_switch_corr_past = 0.f; + hTcxEnc->kernel_symmetry_past = 0; /* MDCT_IV & 1 */ + hTcxEnc->enc_ste_pre_corr_past = 0; + hTcxEnc->tfm_mem = 0.75f; + hTcxEnc->tcxltp_on_mem = 0; + } + else if ( st->L_frame != L_frame_old && !( ( total_brate >= ACELP_16k40 && total_brate <= ACELP_24k40 ) && + ( total_brate == last_total_brate ) && ( st->last_bwidth == st->bwidth ) ) ) + { + int16_t pitres, pitres_old; + float pit, pit_old; + + if ( L_frame_old % 160 == 0 ) + { + pitres_old = 6; + } + else + { + pitres_old = 4; + } + pit_old = (float) hTcxEnc->tcxltp_pitch_int_past + (float) hTcxEnc->tcxltp_pitch_fr_past / (float) pitres_old; + if ( st->L_frame % 160 == 0 ) + { + pitres = 6; + } + else + { + pitres = 4; + } + pit = pit_old * (float) st->L_frame / (float) L_frame_old; + hTcxEnc->tcxltp_pitch_int_past = (int16_t) pit; + hTcxEnc->tcxltp_pitch_fr_past = (int16_t) ( ( pit - (float) hTcxEnc->tcxltp_pitch_int_past ) * (float) pitres ); + } + + hTcxEnc->tcx_lpc_shaped_ari = getTcxLpcShapedAri( total_brate, st->rf_mode, st->element_mode ); + + return; +} + +/*-----------------------------------------------------------------------* + * init_sig_buffers() + * + * Initialization of signal buffers + *-----------------------------------------------------------------------*/ + +static void init_sig_buffers( + Encoder_State *st, + const int16_t L_frame_old, + const int16_t L_subfr, + const int32_t total_brate, + const int32_t last_total_brate ) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + /* Encoder Past Samples at encoder-sampling-rate */ + st->encoderPastSamples_enc = ( st->L_frame * 9 ) / 16; + + /* Initialize Signal Buffers and Pointers at encoder-sampling-rate */ + if ( st->ini_frame == 0 ) + { + set_zero( st->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + set_zero( st->buf_speech_enc_pe, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + set_zero( st->buf_wspeech_enc, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); + if ( hTcxEnc != NULL ) + { + set_zero( hTcxEnc->buf_speech_ltp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + } + } + else if ( st->L_frame != L_frame_old && !( ( total_brate >= ACELP_16k40 && total_brate <= ACELP_24k40 ) && + ( total_brate == last_total_brate ) && ( st->last_bwidth == st->bwidth ) ) ) + { + lerp( st->buf_speech_enc, st->buf_speech_enc, st->L_frame, L_frame_old ); + + if ( ( st->last_core != TCX_20_CORE ) && ( st->last_core != TCX_10_CORE ) ) + { + mvr2r( st->buf_speech_enc, hTcxEnc->buf_speech_ltp, st->L_frame ); + } + + mvr2r( st->old_wsp, st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, L_WSP_MEM ); + + /*Resamp buffers needed only for ACELP*/ + if ( st->L_frame == L_FRAME && !st->tcxonly ) + { + mvr2r( st->old_inp_12k8, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM ); + } + else if ( st->L_frame == L_FRAME16k && !st->tcxonly ) + { + lerp( st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, st->buf_wspeech_enc + st->L_frame + L_SUBFR - 310, 310, L_WSP_MEM ); + mvr2r( st->old_inp_16k, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM ); + } + + st->mem_preemph_enc = st->buf_speech_enc[st->L_frame - 1]; + st->mem_wsp_enc = st->buf_wspeech_enc[st->L_frame + L_SUBFR - 1]; + } + else if ( !st->tcxonly && last_total_brate > ACELP_32k ) /* coming from TCXonly modes */ + { + mvr2r( st->old_wsp, st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, L_WSP_MEM ); + + /*Resamp buffers needed only for ACELP*/ + if ( st->L_frame == L_FRAME16k ) + { + lerp( st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, st->buf_wspeech_enc + st->L_frame + L_SUBFR - 310, 310, L_WSP_MEM ); + } + st->hLPDmem->mem_w0 = 0; + st->mem_wsp_enc = st->buf_wspeech_enc[st->L_frame + L_SUBFR - 1]; + } + + st->new_speech_enc = st->buf_speech_enc + st->encoderPastSamples_enc + st->encoderLookahead_enc; + st->new_speech_enc_pe = st->buf_speech_enc_pe + st->encoderPastSamples_enc + st->encoderLookahead_enc; + + if ( hTcxEnc != NULL ) + { + hTcxEnc->new_speech_ltp = hTcxEnc->buf_speech_ltp + st->encoderPastSamples_enc + st->encoderLookahead_enc; + } + + if ( st->hTcxEnc != NULL ) + { + st->hTcxEnc->new_speech_TCX = st->input_buff + st->input_Fs / FRAMES_PER_SEC; /* note: in EVS st->new_speech_TCX == st->input - 0.9375ms; in IVAS st->new_speech_TCX == st->input */ + st->hTcxEnc->speech_TCX = st->hTcxEnc->new_speech_TCX - st->encoderLookahead_FB; + } + + st->speech_enc = st->buf_speech_enc + st->encoderPastSamples_enc; + st->speech_enc_pe = st->buf_speech_enc_pe + st->encoderPastSamples_enc; + + if ( hTcxEnc != NULL ) + { + hTcxEnc->speech_ltp = hTcxEnc->buf_speech_ltp + st->encoderPastSamples_enc; + } + + if ( st->element_mode > EVS_MONO ) + { + st->wspeech_enc = st->buf_wspeech_enc + st->L_frame + L_SUBFR; + } + else + { + st->wspeech_enc = st->buf_wspeech_enc + st->L_frame + L_subfr; + } + + if ( st->ini_frame == 0 || st->L_frame != L_frame_old || st->last_codec_mode == MODE1 ) + { + set_zero( st->buf_synth, OLD_SYNTH_SIZE_ENC + L_FRAME32k ); + } + st->synth = st->buf_synth + st->L_frame + L_subfr; + + return; +} + + +/*-----------------------------------------------------------------------* + * init_core_sig_ana() + * + * + *-----------------------------------------------------------------------*/ + +static void init_core_sig_ana( + Encoder_State *st ) +{ + /* Pre-emphasis factor and memory */ + if ( st->fscale < ( 16000 * FSCALE_DENOM ) / 12800 ) + { + st->preemph_fac = PREEMPH_FAC; /*WB*/ + } + else if ( st->fscale < ( 24000 * FSCALE_DENOM ) / 12800 ) + { + st->preemph_fac = PREEMPH_FAC_16k; /*WB*/ + } + else + { + st->preemph_fac = PREEMPH_FAC_SWB; /*SWB*/ + } + + if ( st->sr_core == INT_FS_16k ) + { + st->gamma = GAMMA16k; + } + else + { + st->gamma = GAMMA1; + } + + if ( st->narrowBand ) + { + st->min_band = 1; + st->max_band = 16; + } + else + { + st->min_band = 0; + st->max_band = 19; + } + + return; +} + + +/*-----------------------------------------------------------------------* + * init_acelp() + * + * + *-----------------------------------------------------------------------*/ + +static void init_acelp( + Encoder_State *st, + const int16_t L_frame_old, + const int32_t total_brate, + const int32_t last_total_brate ) +{ + int16_t mem_syn_r_size_old; + int16_t mem_syn_r_size_new; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /* Init pitch lag */ + if ( st->element_mode == IVAS_CPE_MDCT ) + { + /* TCX LTP ana always runs @12.8kHz */ + st->pit_res_max = initPitchLagParameters( 12800, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); + } + else + { + st->pit_res_max = initPitchLagParameters( st->sr_core, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); + } + + /* Init LPDmem */ + if ( st->ini_frame == 0 ) + { + if ( hLPDmem != NULL ) + { + set_zero( hLPDmem->syn, 1 + M ); + set_zero( hLPDmem->mem_syn_r, L_SYN_MEM ); + } + + if ( st->hTcxEnc != NULL ) + { + set_zero( st->hTcxEnc->Txnq, L_FRAME32k / 2 + 64 ); + st->hTcxEnc->acelp_zir = st->hTcxEnc->Txnq + ( st->L_frame / 2 ); + } + } + else /*Rate switching*/ + { + if ( st->hTcxEnc != NULL ) + { + if ( st->last_core == ACELP_CORE ) + { + lerp( st->hTcxEnc->Txnq, st->hTcxEnc->Txnq, st->L_frame / 2, L_frame_old / 2 ); + } + else + { + lerp( st->hTcxEnc->Txnq, st->hTcxEnc->Txnq, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_length_old ); + } + st->hTcxEnc->acelp_zir = st->hTcxEnc->Txnq + ( st->L_frame / 2 ); + } + + /* Rate switching */ + if ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) + { + if ( hLPDmem != NULL ) + { + mvr2r( hLPDmem->mem_syn1, hLPDmem->mem_syn2, M ); + set_zero( hLPDmem->syn, M ); + } + + if ( st->hTcxEnc != NULL ) + { + set_zero( st->hTcxEnc->Txnq, L_FRAME32k / 2 + 64 ); + } + } + + if ( st->last_core == AMR_WB_CORE ) + { + st->next_force_safety_net = 1; + st->last_core = ACELP_CORE; + } + + if ( st->last_codec_mode == MODE1 && st->last_core == HQ_CORE ) + { + /*Reset of ACELP memories*/ + st->next_force_safety_net = 1; + st->rate_switching_reset = 1; + if ( hLPDmem != NULL ) + { + hLPDmem->tilt_code = TILT_CODE; + set_zero( hLPDmem->old_exc, L_EXC_MEM ); + set_zero( hLPDmem->syn, 1 + M ); + hLPDmem->mem_w0 = 0.0f; + set_zero( hLPDmem->mem_syn, M ); + set_zero( hLPDmem->mem_syn2, M ); + } + + /* unquantized LPC*/ + if ( !( ( total_brate >= ACELP_16k40 && total_brate <= ACELP_24k40 ) && total_brate == last_total_brate && st->last_bwidth == st->bwidth ) ) + { + mvr2r( st->lsp_old1, st->lspold_enc, M ); /*lsp old @12.8kHz*/ + if ( st->L_frame == L_FRAME16k ) + { + lsp_convert_poly( st->lspold_enc, st->L_frame, 0 ); + } + } + mvr2r( st->lspold_enc, st->lsp_old, M ); /*used unquantized values for mid-LSF Q*/ + lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); + + st->last_core = TCX_20_CORE; + + st->hTcxCfg->last_aldo = 1; /*It was previously ALDO*/ + st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + + /*ALDO overlap windowed past: also used in MODE1 but for other MDCT-FB*/ + set_f( st->hTcxEnc->old_out, 0, st->L_frame ); + } + else + { + if ( st->L_frame != L_frame_old && st->L_frame <= L_FRAME16k && L_frame_old <= L_FRAME16k ) /* Rate switching between 12.8 and 16 kHz*/ + { + float tmp, A[M + 1], Ap[M + 1], tmp_buf[M + 1]; + + /* convert quantized LSP vector */ + st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); + lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); + + if ( st->L_frame == L_FRAME16k ) + { + mvr2r( st->lsp_old, st->lspold_enc, M ); + } + else + { + mvr2r( st->lsp_old1, st->lspold_enc, M ); + } + + /* Update wsyn */ + if ( hLPDmem != NULL ) + { + synth_mem_updt2( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); + lsp2a_stab( st->lsp_old, A, M ); + weight_a( A, Ap, GAMMA1, M ); + tmp = 0.f; + tmp_buf[0] = 0.f; + mvr2r( hLPDmem->mem_syn2, tmp_buf + 1, M ); + deemph( tmp_buf + 1, st->preemph_fac, M, &tmp ); + residu( Ap, M, tmp_buf + M, &tmp, 1 ); + hLPDmem->mem_w0 = st->wspeech_enc[-1] - tmp; + } + } + else if ( st->L_frame != L_frame_old ) /* Rate switching involving TCX only modes */ + { + /*Partial reset of ACELP memories*/ + st->next_force_safety_net = 1; + st->rate_switching_reset = 1; + + /*reset partly some memories*/ + if ( hLPDmem != NULL ) + { + hLPDmem->tilt_code = TILT_CODE; + set_zero( hLPDmem->old_exc, L_EXC_MEM ); + + /*Resamp others memories*/ + /*Size of LPC syn memory*/ + mem_syn_r_size_old = (int16_t) ( 1.25 * L_frame_old / 20.f ); + mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); + lerp( hLPDmem->mem_syn_r + L_SYN_MEM - mem_syn_r_size_old, hLPDmem->mem_syn_r + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); + mvr2r( hLPDmem->mem_syn_r + L_SYN_MEM - M, hLPDmem->mem_syn, M ); + mvr2r( hLPDmem->mem_syn, hLPDmem->mem_syn2, M ); + + /*Untouched memories : LPDmem->syn & LPDmem->mem_w0*/ + hLPDmem->mem_w0 = 0; + } + + /* unquantized LPC*/ + mvr2r( st->lsp_old1, st->lspold_enc, M ); /*lsp old @12.8kHz*/ + if ( st->L_frame == L_FRAME16k ) + { + lsp_convert_poly( st->lspold_enc, st->L_frame, 0 ); + } + mvr2r( st->lspold_enc, st->lsp_old, M ); /*used unquantized values for mid-LSF Q*/ + lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); + } + /* necessary in BASOP only, due to different representations of st->lsf_old */ + /* else if ( !st->tcxonly && (st->L_frame == L_FRAME16k) && (st->last_total_brate > ACELP_32k) ) */ + /* { */ + /* lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); */ + /* } */ + } + } + + if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) + { + st->rate_switching_reset = 1; + } + + /* Post-processing */ + if ( hLPDmem != NULL ) + { + set_zero( hLPDmem->dispMem, 8 ); + hLPDmem->gc_threshold = 0.0f; + } + + /* Pulse Search configuration */ + st->acelp_autocorr = 1; + + /*Use for 12.8 kHz sampling rate and low bitrates, the conventional pulse search->better SNR*/ + if ( ( total_brate <= ACELP_9k60 || st->rf_mode == 1 ) && st->sr_core == INT_FS_12k8 ) + { + st->acelp_autocorr = 0; + } + + /*BPF parameters for adjusting gain in function of background noise*/ + if ( st->codec_mode == MODE2 ) + { + st->pst_lp_ener = 0.0f; + if ( st->last_codec_mode == MODE1 ) + { + st->pst_mem_deemp_err = 0.0f; + } + } + + + return; +} + +/*-----------------------------------------------------------------------* + * init_modes() + * + * + *-----------------------------------------------------------------------*/ + +static void init_modes( + Encoder_State *st, + const int32_t last_total_brate ) +{ + int16_t n; + + /* Restrict ACE/TCX20/TCX10 mode */ + st->restrictedMode = getRestrictedMode( st->element_mode, st->total_brate, st->Opt_AMR_WB ); + + st->acelpEnabled = ( st->restrictedMode & 1 ) == 1; + st->tcx20Enabled = ( st->restrictedMode & 2 ) == 2; + st->tcx10Enabled = ( st->restrictedMode & 4 ) == 4; + + /* TCX mode (TCX20 TCX10_10 or NO_TCX) */ + if ( st->hTcxEnc != NULL ) + { + st->hTcxEnc->tcxMode = NO_TCX; + } + + /*st->bits_frame_nominal = (int16_t)( (float)st->L_frame * (float)FSCALE_DENOM * (float)st->total_brate / ( (float)st->fscale * 12800.0f ) );*/ + st->bits_frame_nominal = (int16_t) ( (float) st->L_frame / (float) st->fscale * (float) FSCALE_DENOM / 128.0f * (float) st->total_brate / 100.0f + 0.49f ); + + if ( st->Opt_AMR_WB ) + { + st->bits_frame = st->bits_frame_nominal; + st->bits_frame_core = st->bits_frame_nominal; + st->frame_size_index = 0; + } + else + { + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + + if ( n < FRAME_SIZE_NB - 1 ) + { + if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal && FrameSizeConfig[n + 1].frame_bits > st->bits_frame_nominal ) + { + st->frame_size_index = n; + st->bits_frame = st->bits_frame_nominal; + st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; + break; + } + } + else + { + if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal ) + { + st->frame_size_index = n; + st->bits_frame = st->bits_frame_nominal; + st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; + break; + } + } + } + } + + /* Reconfigure core */ + core_coder_reconfig( st, last_total_brate ); + + return; +} diff --git a/lib_enc/core_enc_ol.c b/lib_enc/core_enc_ol.c new file mode 100644 index 0000000000..b5fa43ae61 --- /dev/null +++ b/lib_enc/core_enc_ol.c @@ -0,0 +1,1192 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void BITS_ALLOC_ACELP_config_rf( const int16_t coder_type, float *tilt_code, int16_t *rf_frame_type, int16_t *rf_target_bits, const int16_t nb_subfr, const int16_t rf_fec_indicator, float *pitch_buf ); + +static void BITS_ALLOC_TCX_config_rf( int16_t *rf_frame_type, int16_t *rf_target_bits, const int16_t PLC_Mode, const int16_t coder_type, const int16_t last_core, const int16_t TD_Mode ); + +static void closest_centroid_rf( const float *data, const float *weights, const float *quantizer, const int16_t centroids, const int16_t length, int16_t *ind_vec ); + + +/*-------------------------------------------------------------------* + * core_encode_openloop() + * + * Open-loop core encoder + *-------------------------------------------------------------------*/ + +void core_encode_openloop( + Encoder_State *st, /* i/o: encoder state structure */ + const float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ + const float lsp_new[M], /* i : LSPs at the end of the frame */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + float *pitch_buf, /* i/o: floating pitch values for each subfr*/ + float *voice_factors, /* o : voicing factors */ + float *ptr_bwe_exc, /* o : excitation for SWB TBE */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + float lsf_q[M], lsp_q[M], lspmid_q[M]; + Word16 lspq_ind[M]; + Word16 A_q_ind[M + 1]; + float A_q_ace[NB_SUBFR16k * ( M + 1 )]; + float A_q_tcx[NB_SUBFR16k * ( M + 1 )]; + int16_t param_lpc[NPRM_LPC_NEW]; + int16_t nbits_lpc; + int16_t param_core[2 * NPRM_DIV]; + int16_t target_bits; + float stab_fac; + int16_t indexBuffer[N_MAX + 1]; + CONTEXT_HM_CONFIG hm_cfg; + float lsp_tcx_q[M], lsf_tcx_q[M]; + int16_t tcx_lpc_cdk; + float A_w[M + 1]; + float gain_pitch_buf[NB_SUBFR16k]; + float gain_code_buf[NB_SUBFR16k]; + int16_t bits_param_lpc[10], no_param_lpc; + + /* lsf quant parameters */ + float lsp_q_rf[M]; + float Aq_rf[NB_SUBFR * ( M + 1 )]; + float stab_fac_rf; + float *exc_rf; + float *syn_rf; + int16_t rf_PLC_Mode; + int16_t TD_Mode; + int16_t rf_tcx_lpc_cdk; + float lsp[M], lsf[M]; + float rf_mem_MA[M]; + float exc_buf_rf[L_EXC_MEM + L_FRAME + 1]; + float syn_buf_rf[M + L_FRAME16k + L_FRAME16k / 2]; + + float w_rf[M], lsf_uq_rf[M]; + float lsf_q_1st_rf[M], lsf_q_d_rf[M], lsf_q_rf[M]; + float lsp_old_q_rf[M], lsf_old_q_rf[M]; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*--------------------------------------------------------------* + * back up parameters for RF + *---------------------------------------------------------------*/ + + /* back up the old LSPs and LSFs */ + mvr2r( st->lsp_old, lsp_old_q_rf, M ); + mvr2r( st->lsf_old, lsf_old_q_rf, M ); + + /* back up old exc before primary encoding */ + set_f( exc_buf_rf, 0, ( L_EXC_MEM + L_FRAME + 1 ) ); + exc_rf = exc_buf_rf + L_EXC_MEM; + mvr2r( hLPDmem->old_exc, exc_buf_rf, L_EXC_MEM ); + + /* back up old synthesis before primary encoding */ + set_f( syn_buf_rf, 0, ( M + L_FRAME16k + L_FRAME16k / 2 ) ); + syn_rf = syn_buf_rf + M; + mvr2r( hLPDmem->mem_syn, syn_buf_rf, M ); + + if ( st->Opt_RF_ON ) + { + /* back up syn2 mem */ + mvr2r( hLPDmem->mem_syn2, st->hRF->rf_mem_syn2, M ); + + /* back up LPD mem_w0 target generation memory */ + st->hRF->rf_mem_w0 = hLPDmem->mem_w0; + + /* back up clip gain memory */ + mvr2r( st->clip_var, st->hRF->rf_clip_var, 6 ); + + /* back up tilt code */ + st->hRF->rf_tilt_code = hLPDmem->tilt_code; + + /* back up dispMem */ + mvr2r( hLPDmem->dispMem, st->hRF->rf_dispMem, 8 ); + + /* back up gc_threshold for noise addition */ + st->hRF->rf_gc_threshold = hLPDmem->gc_threshold; + } + + + /*--------------------------------------------------------------* + * Initializations + *---------------------------------------------------------------*/ + + tcx_lpc_cdk = 0; + set_s( param_lpc, 0, NPRM_LPC_NEW ); + set_s( param_core, 0, 2 * NPRM_DIV ); + mvs2s( hTcxEnc->tcxltp_param, ¶m_core[1 + NOISE_FILL_RANGES], LTPSIZE ); + + no_param_lpc = 0; /* avoid MSVC warnings */ + nbits_lpc = 0; /* avoid MSVC warnings */ + stab_fac = 0.0f; /* avoid MSVC warnings */ + + hm_cfg.indexBuffer = indexBuffer; + + /*--------------------------------------------------------------* + * LPC Quantization + *---------------------------------------------------------------*/ + + if ( st->lpcQuantization == 1 && st->coder_type == VOICED ) + { + ( &( st->acelp_cfg ) )->midLpc = 0; + } + else + { + ( &( st->acelp_cfg ) )->midLpc = st->acelp_cfg.midLpc_enable; + } + + if ( st->core == ACELP_CORE || !st->enableTcxLpc ) + { + if ( st->envWeighted ) + { + /* Unweight the envelope */ + E_LPC_lsp_unweight( st->lsp_old, st->lsp_old, st->lsf_old, 1.0f / st->gamma ); + st->envWeighted = 0; + } + + if ( st->core == TCX_20_CORE ) + { + lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, AUDIO, st->acelp_cfg.midLpc, param_lpc, &nbits_lpc, bits_param_lpc, &no_param_lpc ); + } + else + { + lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, st->coder_type, st->acelp_cfg.midLpc, param_lpc, &nbits_lpc, bits_param_lpc, &no_param_lpc ); + } + + /*-------------------------------------------------------------* + * Rate switching: reset + *-------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + mvr2r( lsp_q, st->lsp_old, M ); + mvr2r( lsf_q, st->lsf_old, M ); + mvr2r( lsp_q, lspmid_q, M ); + } + + /*--------------------------------------------------------------* + * LPC Interpolation + *---------------------------------------------------------------*/ + + stab_fac = lsf_stab( lsf_q, st->lsf_old, 0, st->L_frame ); + } + + + /*--------------------------------------------------------------* + * Run ACELP + *---------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + if ( st->acelp_cfg.midLpc ) + { + int_lsp4( st->L_frame, st->lsp_old, lspmid_q, lsp_q, A_q_ace, M, 0 ); + } + else + { + int_lsp( st->L_frame, st->lsp_old, lsp_q, A_q_ace, M, interpol_frac_12k8, 0 ); + } + + /* Calculate target bits */ + target_bits = st->bits_frame_core - nbits_lpc - st->nb_bits_header_ace; + + if ( st->rf_mode ) + { + /* joint bit allocation for redundant frame and TBE */ + /* calculate target bits for core coding */ + target_bits -= st->rf_target_bits_write; + } + + if ( st->igf ) + { + target_bits -= get_tbe_bits( st->total_brate, st->bwidth, st->rf_mode ); + } + + if ( st->acelp_cfg.midLpc ) + { + target_bits -= MIDLSF_NBITS; + } + + if ( st->hPlcExt && st->hPlcExt->enableGplc ) + { + target_bits -= st->hPlcExt->nBits; + } + + /* reset TBE buffers previous frame frame wasn't ACELP*/ + if ( st->last_core != ACELP_CORE ) + { + TBEreset_enc( st->hBWE_TD, st->last_core, st->bwidth ); + } + + /* Run ACELP encoder */ + coder_acelp( st, Aw, A_q_ace, st->speech_enc_pe, hLPDmem, param_core, stab_fac, target_bits, gain_pitch_buf, gain_code_buf, pitch_buf, voice_factors, ptr_bwe_exc ); + + if ( st->hPlcExt ) + { + st->glr_idx[0] = encSideSpecPowDiffuseDetector( st->hPlcExt->last_lsf_ref, st->hPlcExt->last_lsf_con, st->last_sr_core, &( st->prev_lsf4_mean ), st->glr, st->coder_type ); + + mvr2r( lsf_q, st->hPlcExt->last_lsf_ref, M ); + mvr2r( st->hPlcExt->lsf_con, st->hPlcExt->last_lsf_con, M ); + updateSpecPowDiffuseIdx( gain_pitch_buf, gain_code_buf, st->glr_idx, st->mean_gc ); + + if ( st->last_stab_fac > 0.02 ) + { + st->glr_idx[0] = 0; + } + + st->hPlcExt->LPDmem = hLPDmem; + + encoderSideLossSimulation( st, st->hPlcExt, lsf_q, stab_fac, st->hPlcExt->calcOnlylsf, st->L_frame ); + } + st->last_stab_fac = stab_fac; + + hTcxEnc->tcxltp_norm_corr_past = st->voicing[1]; + st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + } + + + /*--------------------------------------------------------------* + * Run TCX20 + *---------------------------------------------------------------*/ + + if ( st->core == TCX_20_CORE ) + { + if ( st->enableTcxLpc ) + { + if ( st->rf_mode ) + { + mvr2r( st->mem_MA, rf_mem_MA, M ); + } + + tcx_lpc_cdk = tcxlpc_get_cdk( st->hTcxCfg->coder_type ); + + /* Get the envelope corresponding to the current frame */ + E_LPC_int_lpc_tcx( st->lspold_enc, lsp_new, A_q_tcx ); + + /* Weight the envelope */ + weight_a( A_q_tcx, A_q_tcx, st->gamma, M ); + + /* Save the weighted envelope */ + mvr2r( A_q_tcx, A_w, M + 1 ); + + /* Convert to lsp and lsf */ + a2lsp_stab( A_q_tcx, lsp, lsp_new ); + lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); + + /* Quantize */ + Q_lsf_tcxlpc( lsf, lsf_tcx_q, lspq_ind, param_lpc, st->narrowBand, tcx_lpc_cdk, st->mem_MA, st->hTcxCfg->coder_type, st->Bin_E ); + + /* Account for consumed bits */ + nbits_lpc = TCXLPC_NUMBITS; + if ( param_lpc[0] ) + { + nbits_lpc += TCXLPC_IND_NUMBITS; + } + + /* Convert quantized lsf to lsp and A */ + lsf2lsp( lsf_tcx_q, lsp_tcx_q, M, INT_FS_12k8 ); + lsp2a_stab( lsp_tcx_q, A_q_tcx, M ); + } + else + { + E_LPC_int_lpc_tcx( st->lsp_old, lsp_q, A_q_tcx ); + } + + if ( hTcxEnc->tcx_lpc_shaped_ari ) + { + basop_E_LPC_f_lsp_a_conversion( lspq_ind, A_q_ind, M ); + } + + /* Calculate target bits */ + target_bits = st->bits_frame_core - nbits_lpc - st->nb_bits_header_tcx; + if ( st->rf_mode ) + { + /* joint bit allocation for redundant frame and TBE */ + /* calculate target bits for core coding */ + target_bits -= st->rf_target_bits_write; + } + + if ( st->mdct_sw == MODE1 ) + { + /* Account for core signalling bits difference: bandwidth and ACELP/TCX signaling bit are replaced */ + target_bits += ( FrameSizeConfig[st->frame_size_index].bandwidth_bits + 1 ) - signalling_mode1_tcx20_enc( st, 0 ); + } + else if ( st->mdct_sw_enable == MODE2 ) + { + --target_bits; + } + + if ( st->hPlcExt && st->hPlcExt->enableGplc ) + { + target_bits -= st->hPlcExt->nBits; + } + + /* subtract bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ + target_bits -= ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; + + target_bits -= hTcxEnc->tcxltp_bits; + + /* Run TCX20 encoder */ + coder_tcx( st, st->hTcxCfg, A_q_tcx, A_q_ind, st->synth, st->L_frame, hTcxEnc->L_frameTCX, st->hTcxCfg->tcx_coded_lines, target_bits, hTcxEnc->spectrum_long, param_core, &hm_cfg, vad_hover_flag ); + + coder_tcx_post( st, A_q_tcx, Aw ); + + if ( st->hPlcExt ) + { + st->hPlcExt->LPDmem = hLPDmem; + + GplcTcxEncSetup( hTcxEnc->tcxltp_pitch_int, st->hPlcExt ); + } + + if ( st->enableTcxLpc ) + { + E_LPC_lsp_unweight( lsp_tcx_q, lsp_q, lsf_q, 1.0f / st->gamma ); /* Update lsf_q for encoderSideLossSimulation() */ + } + if ( st->hPlcExt ) + { + encoderSideLossSimulation( st, st->hPlcExt, lsf_q, stab_fac, 1, st->L_frame ); + } + } + + + /* Update lsp/lsf memory */ + mvr2r( lsp_new, st->lspold_enc, M ); + + if ( st->enableTcxLpc && st->core != ACELP_CORE ) + { + /* Update lsf / lsp memory */ + mvr2r( lsf_tcx_q, st->lsf_old, M ); + mvr2r( lsp_tcx_q, st->lsp_old, M ); + st->envWeighted = 1; + + /* Update ACELP quantizer state */ + lsf_update_memory( st->narrowBand, st->lsf_old, st->mem_MA, st->mem_MA ); + st->pstreaklen = 0; + st->streaklimit = 1.0f; + + /* check resonance for pitch clipping algorithm */ + gp_clip_test_lsf( st->element_mode, st->core_brate, st->lsf_old, st->clip_var, 0 ); + mvr2r( st->lsf_old, st->mem_AR, M ); + } + else + { + mvr2r( lsf_q, st->lsf_old, M ); + mvr2r( lsp_q, st->lsp_old, M ); + } + + if ( st->Opt_DTX_ON ) + { + /* update CNG parameters in active frames */ + if ( st->bwidth == NB && st->enableTcxLpc && st->core != ACELP_CORE ) + { + float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; + + assert( st->L_frame == L_FRAME ); + + mvr2r( st->synth + L_FRAME - L_LP, buf, L_LP ); + tmp = st->synth[L_FRAME - L_LP - 1]; + preemph( buf, st->preemph_fac, L_LP, &tmp ); + autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); + lag_wind( r, M, INT_FS_12k8, LAGW_WEAK ); + lev_dur( A, r, M, NULL ); + a2lsp_stab( A, lsptmp, lsp_new ); + + residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); + + cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); + } + else + { + cng_params_upd( lsp_new, hLPDmem->old_exc + L_EXC_MEM - st->L_frame, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); + } + + if ( st->L_frame == L_FRAME ) + { + /* store LSPs@16k, potentially to be used in CNG@16k */ + mvr2r( st->lsp_old16k, &( st->hTdCngEnc->ho_lsp_circ2[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); + } + + /* Set 16k LSP flag for CNG buffer */ + st->hTdCngEnc->ho_16k_lsp[st->hTdCngEnc->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); + + /* efficient DTX hangover control */ + if ( st->hTdCngEnc->burst_ho_cnt > 1 ) + { + dtx_hangover_control( st, lsp_new ); + } + } + + /*--------------------------------------------------------------* + * Adaptive Bass Post-filter + *---------------------------------------------------------------*/ + + if ( st->core > ACELP_CORE || st->rate_switching_reset ) + { + /*TCX mode: copy values*/ + set_zero( st->mem_bpf, 2 * L_FILT16k ); /*TCX->no gain*/ + set_zero( st->mem_error_bpf, 2 * L_FILT16k ); /*TCX->no gain*/ + st->bpf_gain_param = 0; + } + else if ( st->acelp_cfg.bpf_mode >= 1 ) + { + /*ACELP: estimate bpf parameter with delay=0*/ + + /*Estimate bpf parameter*/ + bass_pf_enc( st->speech_enc, st->synth, pitch_buf, gain_pitch_buf, st->L_frame, L_SUBFR, st->mem_bpf, st->mem_error_bpf, &( st->bpf_gain_param ), st->acelp_cfg.bpf_mode, &( st->pst_lp_ener ), &( st->pst_mem_deemp_err ) ); + } + + /*--------------------------------------------------------------* + * Generate Bitstream + *---------------------------------------------------------------*/ + + enc_prm( st, param_core, param_lpc, &hm_cfg, bits_param_lpc, no_param_lpc ); + + /* Channel-aware mode - encode partial copy */ + if ( st->rf_mode ) + { + RF_ENC_HANDLE hRF = st->hRF; + + set_f( lsf_q_1st_rf, 0.0f, M ); + + if ( st->core == ACELP_CORE ) + { + /* convert lsp to lsf */ + lsp2lsf( lsp_new, lsf_uq_rf, M, st->sr_core ); + + /* first stage VQ, 8 bits; reuse TCX high rate codebook */ + hRF->rf_indx_lsf[0][0] = vlpc_1st_cod( lsf_uq_rf, lsf_q_1st_rf, st->sr_core, w_rf ); + v_sub( lsf_uq_rf, lsf_q_1st_rf, lsf_q_d_rf, M ); + + /* second stage vq */ + closest_centroid_rf( lsf_q_d_rf, w_rf, lsf_q_diff_cb_8b_rf, ( 1 << 8 ), M, &hRF->rf_indx_lsf[0][1] ); + + /* quantized lsf from two stages */ + v_add( lsf_q_1st_rf, lsf_q_diff_cb_8b_rf + M * hRF->rf_indx_lsf[0][1], lsf_q_rf, M ); + + v_sort( lsf_q_rf, 0, M - 1 ); + reorder_lsf( lsf_q_rf, LSF_GAP, M, st->sr_core ); + } + else + { + rf_tcx_lpc_cdk = tcxlpc_get_cdk( GENERIC ); + + /* Quantize */ + Q_lsf_tcxlpc( lsf, lsf_tcx_q, lspq_ind, param_lpc, st->narrowBand, rf_tcx_lpc_cdk, rf_mem_MA, GENERIC, st->Bin_E ); + + /* VQ, 5+4+4 bits; reuse TCX low rate codebook */ + hRF->rf_indx_lsf[0][0] = param_lpc[1]; + hRF->rf_indx_lsf[0][1] = param_lpc[2]; + hRF->rf_indx_lsf[0][2] = param_lpc[3]; + } + + if ( st->core == ACELP_CORE ) + { + /* current n-th ACELP frame and its corresponding partial copy */ + lsf2lsp( lsf_q_rf, lsp_q_rf, M, st->sr_core ); + + /* Interpolate LSPs and convert to LPC */ + int_lsp( st->L_frame, lsp_old_q_rf, lsp_q_rf, Aq_rf, M, interpol_frac_12k8, 0 ); + + /* stability estimation */ + stab_fac_rf = lsf_stab( lsf_q_rf, lsf_old_q_rf, 0, st->L_frame ); + + /* Configure partial copy estimation of the current n-th frame to be packed in future with n+fec_offset frame */ + /* o: rf_frame_type, o: rf_target_bits */ + if ( st->Opt_RF_ON ) + { + BITS_ALLOC_ACELP_config_rf( st->coder_type, hRF->rf_tilt_buf, &hRF->rf_frame_type, &hRF->rf_target_bits, st->nb_subfr, st->rf_fec_indicator, pitch_buf ); + } + + /* RF frame type in the buffer */ + hRF->rf_indx_frametype[0] = hRF->rf_frame_type; + hRF->rf_targetbits_buff[0] = hRF->rf_target_bits; + + if ( hRF->rf_frame_type != RF_NO_DATA ) + { + /* coder_acelp_rf does the partial copy encoding based on the rf frame type chosen for the RF encoding */ + coder_acelp_rf( hRF->rf_target_bits, st->speech_enc_pe, st->coder_type, hRF->rf_frame_type, Aw, Aq_rf, st->voicing, st->pitch, stab_fac_rf, st, &( hRF->acelp_cfg_rf ), exc_rf, syn_rf ); + } + } + else + { + TD_Mode = 1; + hRF->rf_clas[0] = st->clas; + hRF->rf_gain_tcx[0] = param_core[0]; + + /* attenuate somewhat the gain for onset when the correlation with previous frame is too low: avoid preecho */ + if ( hRF->rf_gain_tcx[1] != 0 && hRF->rf_gain_tcx[0] > 1.6 * hRF->rf_gain_tcx[1] && hTcxEnc->tcxltp_gain <= 0.2 ) + { + hRF->rf_gain_tcx[0] = (int16_t) ( 1.6f * hRF->rf_gain_tcx[1] ); + + if ( hRF->rf_gain_tcx[0] > 127 ) + { + hRF->rf_gain_tcx[0] = 127; + } + } + + /* get concealment decision*/ + rf_PLC_Mode = 0; + if ( st->core == TCX_20_CORE && ( st->last_core == TCX_20_CORE ) && ( hRF->rf_second_last_core == TCX_20_CORE ) && ( ( hTcxEnc->tcxltp_pitch_int <= 0.5f * st->L_frame ) || ( hTcxEnc->tcxltp_gain <= 0.4f ) ) && ( hTcxEnc->tcxltp_pitch_int == hRF->rf_tcxltp_pitch_int_past ) && !hRF->rf_last_tns_active && !hRF->rf_second_last_tns_active && !( st->hTcxCfg->fIsTNSAllowed & hTcxEnc->fUseTns[0] ) ) + { + rf_PLC_Mode = 1; + } + else if ( st->last_core != ACELP_CORE ) + { + if ( ( st->clas <= UNVOICED_TRANSITION || st->last_clas <= UNVOICED_TRANSITION || hTcxEnc->tcxltp_gain <= 0.4f ) && st->last_core != -1 ) + { + rf_PLC_Mode = st->last_core; + } + } + + /* call TD1 when the gain drop compare to previous frame*/ + if ( rf_PLC_Mode == 0 && hRF->rf_gain_tcx[1] != 0 && + ( ( st->hTranDet->transientDetector.bIsAttackPresent && hRF->rf_gain_tcx[0] < 0.97 * hRF->rf_gain_tcx[1] ) || + hRF->rf_gain_tcx[0] < 0.90 * hRF->rf_gain_tcx[1] ) ) + { + TD_Mode = 0; + } + else + { + TD_Mode = 1; + } + + /* updates */ + hRF->rf_tcxltp_pitch_int_past = hTcxEnc->tcxltp_pitch_int; + hRF->rf_second_last_tns_active = hRF->rf_last_tns_active; + hRF->rf_last_tns_active = st->hTcxCfg->fIsTNSAllowed & hTcxEnc->fUseTns[0]; + hRF->rf_second_last_core = st->last_core; + + hRF->rf_tcxltp_param[0] = hTcxEnc->tcxltp_param[1]; + + /* Configure partial copy estimation of the current n-th frame to be packed in future with n+fec_offset frame */ + BITS_ALLOC_TCX_config_rf( &hRF->rf_frame_type, &hRF->rf_target_bits, rf_PLC_Mode, st->coder_type, st->last_core, TD_Mode ); + + /* RF frame type in the buffer */ + hRF->rf_indx_frametype[0] = hRF->rf_frame_type; + hRF->rf_targetbits_buff[0] = hRF->rf_target_bits; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * closest_centroid_rf() + * + * Determine a set of closest VQ centroids for a given input + *-------------------------------------------------------------------*/ + +static void closest_centroid_rf( + const float *data, /* i : input data */ + const float *weights, /* i : weights */ + const float *quantizer, /* i : quantizer table */ + const int16_t centroids, /* i : number of centroids */ + const int16_t length, /* i : dimension of quantiser */ + int16_t *ind_vec /* o : list of best match indice vectors */ +) +{ + int16_t i, j; + float tmp, werr, best_werr; + + ind_vec[0] = 0; + best_werr = 1.0E20f; + + for ( i = 0; i < centroids; i++ ) + { + werr = 0.0f; + for ( j = 0; j < length; j++ ) + { + tmp = (float) *( data + j ) - quantizer[i * length + j]; + werr += (float) ( *( weights + j ) * tmp * tmp ); + } + + if ( werr < best_werr ) + { + ind_vec[0] = i; + best_werr = werr; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * core_acelp_tcx20_switching() + * + * Open-loop ACELP/TCX20 core decision + *-------------------------------------------------------------------*/ + +void core_acelp_tcx20_switching( + Encoder_State *st, /* i/o: encoder state structure */ + float non_staX, /* i : unbound non-stationarity for sp/mu clas */ + float *pitch_fr, /* i/o: fraction pitch values */ + float *voicing_fr, /* i/o: fractional voicing values */ + const float currFlatness, /* i : flatness */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + const float stab_fac /* i : LP filter stability */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t i, j; + float A_q_tcx[NB_SUBFR16k * ( M + 1 )]; + float dsnr, snr_tcx, snr_acelp; + int16_t iter; + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + float Ap[M + 1]; + float gainlpc[FDNS_NPTS]; + float en[N_MAX / 4]; + float sqGain, ener, tmp, fac, offset; + int16_t L_frame = st->L_frame; + int16_t overlap; + int16_t tcx_offset = st->hTcxCfg->tcx_offset; + float *x = hTcxEnc->spectrum_long; + float target; + int16_t T0; + float gain, noise, scale; + float *pt_ener_sfr, ener_sfr[NB_SUBFR16k]; + + /* Check minimum pitch for quantization */ + for ( i = 0; i < 3; i++ ) + { + /* check minimum pitch for quantization */ + if ( st->pitch[i] < PIT_MIN_SHORTER ) + { + st->pitch[i] *= 2; + } + + /* convert pitch values to 16kHz domain */ + if ( st->L_frame == L_FRAME16k ) + { + st->pitch[i] = (int16_t) ( st->pitch[i] * 1.25f + 0.5f ); + } + } + if ( st->narrowBand == 1 ) + { + pitchDoubling_det( st->wspeech_enc, st->pitch, pitch_fr, voicing_fr ); + } + + lsp2a_stab( lsp_mid, A_q_tcx, M ); + + tcx_ltp_encode( st, TCX_20, st->L_frame, st->speech_enc + st->encoderLookahead_enc, hTcxEnc->speech_ltp + st->encoderLookahead_enc, st->wspeech_enc + st->encoderLookahead_enc, st->pitch, hTcxEnc->tcxltp_param, &hTcxEnc->tcxltp_bits, A_q_tcx, 0, st->element_mode ); + + + /* Force TCX when TCX20 in MODE1 is selected */ + if ( st->mdct_sw == MODE1 ) + { + st->core = TCX_20_CORE; + } + else + { + /*--------------------------------------------------------------* + * Estimate TCX SNR + *---------------------------------------------------------------*/ + + target = 1000.f; + if ( st->sr_core == INT_FS_16k ) + { + target = 850.f; + } + else if ( st->sr_core == INT_FS_12k8 ) + { + target = 850.f; + } + + if ( st->narrowBand == 1 ) + { + target = 500.f; + } + + if ( st->last_core == ACELP_CORE ) + { + L_frame += tcx_offset; + + if ( st->hTcxCfg->lfacNext < 0 ) + { + L_frame -= st->hTcxCfg->lfacNext; + tcx_offset = st->hTcxCfg->lfacNext; + } + else + { + tcx_offset = 0; + } + } + + overlap = st->hTcxCfg->tcx_mdct_window_delay; + + mvr2r( hTcxEnc->speech_ltp - ( overlap >> 1 ) + tcx_offset, xn_buf, L_frame + overlap ); + + if ( st->last_core == ACELP_CORE ) + { + if ( tcx_offset < 0 ) + { + set_f( xn_buf, 0.0f, overlap >> 1 ); + } + } + else + { + for ( i = 0; i < overlap; i++ ) + { + xn_buf[i] *= st->hTcxCfg->tcx_mdct_window[i]; + } + } + + for ( i = 0; i < overlap; i++ ) + { + xn_buf[L_frame + i] *= st->hTcxCfg->tcx_mdct_window[overlap - 1 - i]; + } + + TCX_MDCT( xn_buf, x, overlap, L_frame - overlap, overlap, st->element_mode ); + + for ( i = 0; i < L_frame; i++ ) + { + x[i] *= (float) ( L_frame / sqrt( 2 * NORM_MDCT_FACTOR ) ); + } + + weight_a( A_q_tcx, Ap, st->gamma, M ); + + lpc2mdct( Ap, M, gainlpc, FDNS_NPTS, 0 ); + + mdct_preShaping( x, L_frame, gainlpc ); + + if ( st->narrowBand == 1 ) + { + j = (int16_t) ( (float) L_frame * 0.625f ); + + set_f( x + j, 0.0f, L_frame - j ); + } + + for ( i = 0; i < L_frame; i += 4 ) + { + ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; + en[i / 4] = 9.0f + 10.0f * (float) log10( ener ); + } + + fac = 128.0f; + offset = fac; + + for ( iter = 0; iter < 10; iter++ ) + { + fac *= 0.5f; + offset -= fac; + ener = 0.0f; + + for ( i = 0; i < L_frame / 4; i++ ) + { + tmp = en[i] - offset; + + if ( tmp > 3.0f ) + { + ener += tmp; + } + + if ( ener > target ) + { + offset += fac; + break; + } + } + } + + if ( offset <= 32.f ) + { + offset = -128.f; + } + + sqGain = (float) pow( 10.0f, offset / 20.0f ); + ener = sqGain * sqGain / 12.f * (float) sqrt( 2.f ) / (float) L_frame; + + snr_tcx = 0.0f; + pt_ener_sfr = ener_sfr; + + for ( i = 0; i < st->L_frame; i += L_SUBFR ) + { + *pt_ener_sfr = sum2_f( st->wspeech_enc + i, L_SUBFR ) + 1e-6f; + + snr_tcx += (float) log10( *pt_ener_sfr / ( ener * L_SUBFR ) ); + pt_ener_sfr++; + } + snr_tcx *= ( (float) ( 10 * L_SUBFR ) ) / (float) st->L_frame; + + + /*--------------------------------------------------------------* + * Estimate ACELP SNR + *---------------------------------------------------------------*/ + + scale = 0.055f; + if ( st->sr_core == INT_FS_16k ) + { + scale = 0.092f; + } + else if ( st->sr_core == INT_FS_12k8 ) + { + scale = 0.059f; + } + + if ( st->narrowBand ) + { + scale = 0.15f; + } + + snr_acelp = 0.0f; + fac = (float) st->sr_core / (float) INT_FS_12k8; + pt_ener_sfr = ener_sfr; + + for ( i = 0; i < st->L_frame; i += L_SUBFR ) + { + T0 = (int16_t) ( ( fac * pitch_fr[(int16_t) ( (float) ( i / L_SUBFR ) / fac + 0.5f )] ) + 0.5f ); + gain = get_gain( st->wspeech_enc + i, st->wspeech_enc + i - T0, L_SUBFR, NULL ); + + noise = 1e-6f; + for ( j = 0; j < L_SUBFR; j++ ) + { + tmp = st->wspeech_enc[i + j] - gain * st->wspeech_enc[i + j - T0]; + noise += tmp * tmp; + } + + noise *= scale; + snr_acelp += (float) log10( *pt_ener_sfr / noise ); + pt_ener_sfr++; + } + + snr_acelp *= ( (float) ( 10 * L_SUBFR ) ) / (float) st->L_frame; + + + /*--------------------------------------------------------------* + * Switching Decision + *---------------------------------------------------------------*/ + + dsnr = 0.0f; + /* hysteresis for very small SNR differences between ACELP and TCX */ + + /* try to use TCX instead of ACELP on temporally stationary frames */ + if ( ( snr_acelp > snr_tcx ) && + ( snr_acelp < snr_tcx + 2.0f ) && + ( st->prevTempFlatness + currFlatness < 3.25f || stab_fac == 1.0f || ( st->sr_core == INT_FS_12k8 && st->sp_aud_decision0 == 1 && st->prevTempFlatness + currFlatness < 20.f ) ) && + ( st->acelpFramesCount <= 6 ) ) + { + dsnr = -2.0f; + } + + /* try to use ACELP instead of TCX on transient and "buzzy" frames */ + if ( ( snr_acelp < snr_tcx ) && + ( snr_acelp > snr_tcx - 2.0f ) && + ( st->prevTempFlatness + currFlatness > 3.25f ) && + ( st->acelpFramesCount >= 6 ) ) + { + dsnr = 2.0f; + } + + if ( ( st->sr_core == INT_FS_12k8 ) && ( offset < 74.0f ) && ( non_staX > 5.0f ) && ( snr_acelp >= snr_tcx - 4 ) && st->acelpFramesCount >= 1 && ( ( ( st->hSpMusClas->lps > st->hSpMusClas->lpm ) && mean( voicing_fr, 4 ) >= 0.3f ) || ( st->acelpFramesCount >= 6 && ( st->hSpMusClas->lps > st->hSpMusClas->lpm - 1.5f ) ) ) && ( st->sp_aud_decision0 == 0 ) && st->vad_flag ) + { + /* Fine tuned across various databases based on various metrics to detect TCX frames in speech.*/ + dsnr = 4.0f; + } + + if ( st->flag_noisy_speech_snr ) + { + if ( st->vad_flag || st->Opt_DTX_ON ) + { + dsnr += 2.f; + } + else + { + dsnr -= 2.f; + } + } + + if ( st->sr_core == INT_FS_12k8 && ( non_staX < 2.f || ( st->flag_noisy_speech_snr == 0 && st->vad_flag == 1 && offset == -128.f && st->acelpFramesCount >= 6 ) ) && ( st->last_core == ACELP_CORE || st->last_core == TCX_20_CORE ) ) + { + st->core = st->last_core; + } + else if ( snr_acelp + dsnr > snr_tcx ) + { + st->core = ACELP_CORE; + st->acelpFramesCount = min( MAX16B - 1, st->acelpFramesCount + 1 ); + } + else + { + st->core = TCX_20_CORE; + st->acelpFramesCount = 0; + } +#ifdef DEBUGGING + if ( st->force != -1 ) + { + if ( st->force == FORCE_SPEECH ) + { + st->core = ACELP_CORE; + } + else + { + st->core = TCX_20_CORE; + } + } +#endif + } + + /* Fixed Decision (using -C) */ + if ( st->acelpEnabled == 1 && st->tcx20Enabled == 0 ) + { + st->core = ACELP_CORE; + } + + if ( st->acelpEnabled == 0 && st->tcx20Enabled == 1 ) + { + st->core = TCX_20_CORE; + } + + st->prevTempFlatness = currFlatness; + + return; +} + +/*-------------------------------------------------------------------* + * BITS_ALLOC_ACELP_config_rf() + * + * configure channel aware mode + *-------------------------------------------------------------------*/ + +static void BITS_ALLOC_ACELP_config_rf( + const int16_t coder_type, + float *tilt_code, + int16_t *rf_frame_type, + int16_t *rf_target_bits, + const int16_t nb_subfr, + const int16_t rf_fec_indicator, + float *pitch_buf ) +{ + float mean_tc, min_tilt_code, max_tilt_code; + int16_t nrgMode, ltfMode, ltpMode, gainsMode; + + int16_t en_partial_red = 1; + float dpit1, dpit2, dpit3; + + /* Init */ + *rf_target_bits = 0; + + /* ----------------------------------------* + * RF frame type selection * + *-----------------------------------------*/ + + /* Mean tilt code estimation */ + mean_tc = 0; + mean_tc = mean( tilt_code, nb_subfr ); + + /* Maximum tilt code estimation */ + max_tilt_code = tilt_code[0]; + maximum( tilt_code, nb_subfr, &max_tilt_code ); + + /* Minimum tilt code estimation */ + min_tilt_code = tilt_code[0]; + minimum( tilt_code, nb_subfr, &min_tilt_code ); + + /* ----------------------------------------*/ + /* Decide Criticality */ + /*-----------------------------------------*/ + dpit1 = (float) fabs( pitch_buf[0] - pitch_buf[1] ); + dpit2 = (float) fabs( pitch_buf[1] - pitch_buf[2] ); + dpit3 = (float) fabs( pitch_buf[2] - pitch_buf[3] ); + + if ( rf_fec_indicator == 1 ) + { + if ( max_tilt_code > 0.48f && dpit1 <= 0.0f && dpit2 <= 0.0f && dpit3 <= 0.0f && coder_type == VOICED ) + { + en_partial_red = 0; + } + if ( max_tilt_code > 0.47f && dpit1 <= 1.0f && dpit2 <= 1.0f && dpit3 <= 1.0f && coder_type == GENERIC ) + { + en_partial_red = 0; + } + } + else + { + if ( max_tilt_code > 0.47 && dpit1 <= 0.25f && dpit2 <= 0.25f && dpit3 <= 0.25f && coder_type == VOICED ) + { + en_partial_red = 0; + } + if ( max_tilt_code > 0.45 && dpit1 <= 1.25f && dpit2 <= 1.25f && dpit3 <= 1.25f && coder_type == GENERIC ) + { + en_partial_red = 0; + } + } + + + /* ---------------------------------------------------------* + * Identify number of bits required as per rf frame type * + * ---------------------------------------------------------*/ + + /* rf_mode, 1 bit */ + *rf_target_bits += 1; + + /* rf_fec_offset 2 bits */ + *rf_target_bits += 2; + + /* rf_frame_type, 3 bits */ + *rf_target_bits += 3; + + /* LSF bits 8 + 8 bits */ + *rf_target_bits += 16; + + /* Intialize the RF mode frame type to all-pred */ + *rf_frame_type = RF_ALLPRED; + + if ( coder_type == INACTIVE || en_partial_red == 0 ) + { + *rf_frame_type = RF_NO_DATA; + } + else if ( coder_type == UNVOICED || coder_type == INACTIVE ) + { + *rf_frame_type = RF_NELP; + } + else if ( ( coder_type == GENERIC ) && max_tilt_code < 0.05f ) + { + *rf_frame_type = RF_NOPRED; + } + else if ( ( coder_type == GENERIC ) && mean_tc < 0.3f ) + { + *rf_frame_type = RF_GENPRED; + } + + nrgMode = ACELP_NRG_MODE[1][1][*rf_frame_type]; + ltfMode = ACELP_LTF_MODE[1][1][*rf_frame_type]; + ltpMode = ACELP_LTP_MODE[1][1][*rf_frame_type]; + gainsMode = ACELP_GAINS_MODE[1][1][*rf_frame_type]; + + /* Number of RF bits for different RF coder types */ + switch ( *rf_frame_type ) + { + case RF_ALLPRED: + /* Es_pred bits 3 bits, LTF: 1, pitch: 8,5,5,5, FCB: 0, gain: 7,0,7,0, Diff GFr: 4*/ + *rf_target_bits += ( ACELP_NRG_BITS[nrgMode] + ACELP_LTF_BITS[ltfMode] + ACELP_LTP_BITS_SFR[ltpMode][0] + ACELP_LTP_BITS_SFR[ltpMode][1] + ACELP_LTP_BITS_SFR[ltpMode][2] + ACELP_LTP_BITS_SFR[ltpMode][3] + ACELP_GAINS_BITS[gainsMode] + ACELP_GAINS_BITS[gainsMode] + 2 /*2 bits for PartialCopy GainFrame*/ ); + break; + + case RF_NOPRED: + /* Es_pred bits 3 bits, LTF: 0, pitch: 0, FCB: 7,7,7,7, gain: 6,0,6,0, Diff GFr: 2*/ + /*bits += (3 + 0 + 0 + 28 + 12 + 2); */ /* 64 rf bits */ + *rf_target_bits += ( ACELP_NRG_BITS[nrgMode] + ACELP_LTF_BITS[ltfMode] + 28 + ACELP_GAINS_BITS[gainsMode] + ACELP_GAINS_BITS[gainsMode] + 2 /*2 bits for PartialCopy GainFrame*/ ); + break; + + case RF_GENPRED: + /* Es_pred bits 3 bits, LTF: 0, pitch: 8,0,8,0, FCB: 6,7,5,5, gain: 5,0,5,0, Diff GFr: 0*/ + /*bits += (3 + 0 + 16 + 23 + 10 + 0); */ /* 72 rf bits */ + *rf_target_bits += ( ACELP_NRG_BITS[nrgMode] + ACELP_LTF_BITS[ltfMode] + ACELP_LTP_BITS_SFR[ltpMode][0] + ACELP_LTP_BITS_SFR[ltpMode][1] + ACELP_LTP_BITS_SFR[ltpMode][2] + ACELP_LTP_BITS_SFR[ltpMode][3] + 14 + ACELP_GAINS_BITS[gainsMode] + ACELP_GAINS_BITS[gainsMode] + 2 /*2 bits for PartialCopy GainFrame*/ ); + break; + + case RF_NELP: + /* gain: 19, Diff GFr: 5 */ + /*bits += (19 + 5); */ + *rf_target_bits += ( 19 + NUM_BITS_SHB_FRAMEGAIN ); + break; + + case RF_NO_DATA: + *rf_target_bits = 6; + break; + default: + assert( !"RF_Frame_type does not belong to ACELP Partial copy frame types possible!" ); + break; + } + + return; +} + + +/*-------------------------------------------------------------------* + * BITS_ALLOC_TCX_config_rf() + * + * configure channel aware mode + *-------------------------------------------------------------------*/ + +static void BITS_ALLOC_TCX_config_rf( int16_t *rf_frame_type, int16_t *rf_target_bits, const int16_t PLC_Mode, const int16_t coder_type, const int16_t last_core, const int16_t TD_Mode ) +{ + /* Init: rf_mode + rf_fec_offset + rf_frame_type */ + *rf_target_bits = 1 + 2 + 3; + + if ( coder_type == INACTIVE || last_core == ACELP_CORE ) + { + *rf_frame_type = RF_NO_DATA; + } + else + { + /* classification */ + *rf_target_bits += 2; + + if ( PLC_Mode ) + { + /* TCX global gain = 7 bits */ + *rf_target_bits += 7; + *rf_frame_type = RF_TCXFD; + } + else + { + /* pitch and gain */ + /* LTP data */ + if ( TD_Mode ) + { + *rf_target_bits += 9; + *rf_frame_type = RF_TCXTD2; + } + else + { + *rf_target_bits += 9; + *rf_frame_type = RF_TCXTD1; + } + } + + if ( *rf_frame_type == RF_TCXFD ) + { + /* TCXFD: LSF bits 5 + 4 + 4 bits */ + /* only embed LSF for FD concealment */ + *rf_target_bits += TCXLPC_NUMBITS; + } + } + return; +} diff --git a/lib_enc/core_enc_reconf.c b/lib_enc/core_enc_reconf.c new file mode 100644 index 0000000000..0489d210bc --- /dev/null +++ b/lib_enc/core_enc_reconf.c @@ -0,0 +1,241 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Funtion core_coder_reconfig * + * ~~~~~~~~~~~~~~~~~~~ * + * - reconfig core coder when switching to another frame type * + *-----------------------------------------------------------------*/ + +void core_coder_reconfig( + Encoder_State *st, + const int32_t last_total_brate ) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t bwidth, i, index; + + /*Configuration of ACELP*/ + BITS_ALLOC_init_config_acelp( st->total_brate, st->narrowBand, st->nb_subfr, &( st->acelp_cfg ) ); + + /*Configuration of partial copy*/ + if ( st->Opt_RF_ON ) + { + st->hRF->acelp_cfg_rf.mode_index = 1; + st->hRF->acelp_cfg_rf.midLpc = 0; + st->hRF->acelp_cfg_rf.midLpc_enable = 0; + st->hRF->acelp_cfg_rf.pre_emphasis = 0; + st->hRF->acelp_cfg_rf.formant_enh = 1; + st->hRF->acelp_cfg_rf.formant_tilt = 1; + st->hRF->acelp_cfg_rf.voice_tilt = 1; + st->hRF->acelp_cfg_rf.formant_enh_num = FORMANT_SHARPENING_G1; + st->hRF->acelp_cfg_rf.formant_enh_den = FORMANT_SHARPENING_G2; + } + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + st->nb_bits_header_tcx = 2; /* signal class */ + } + else if ( st->tcxonly ) + { + st->nb_bits_header_tcx = 1 + 1; /*TCX20/TCX10 + last_core*/ + st->nb_bits_header_tcx += 2; /* Siganl class*/ + } + else + { + st->nb_bits_header_ace = 1 + 2 + 1; /*TCX/ACELP+coder_type + last_core*/ + st->nb_bits_header_tcx = st->nb_bits_header_ace; + + if ( st->hTcxCfg != NULL ) + { + if ( st->hTcxCfg->lfacNext <= 0 ) + { + st->nb_bits_header_ace--; /*No last_core*/ + } + } + } + + /*Switch off TCX or ACELP?*/ + if ( st->sr_core == INT_FS_12k8 ) + { + st->acelpEnabled = ( st->restrictedMode & 1 ) == 1; + st->tcx20Enabled = ( st->restrictedMode & 2 ) == 2; + } + st->prevEnergyHF = st->currEnergyHF = 65535.0f; /* prevent block switch */ + + /* TCX-LTP */ + if ( st->hTcxEnc != NULL ) + { + st->hTcxEnc->tcxltp = getTcxLtp( st->sr_core ); + } + + /*Use for 12.8 kHz sampling rate and low bitrates, the conventional pulse search->better SNR*/ + st->acelp_autocorr = 1; + if ( st->total_brate <= ACELP_9k60 && st->sr_core == INT_FS_12k8 ) + { + st->acelp_autocorr = 0; + } + + /*Get audio bandwidth info*/ + if ( st->narrowBand ) + { + bwidth = NB; + } + else if ( st->sr_core <= INT_FS_16k ) + { + bwidth = WB; + } + else + { + bwidth = SWB; + } + + /*Scale TCX for non-active frames to adjust loudness with ACELP*/ + if ( st->hTcxCfg != NULL ) + { + st->hTcxCfg->na_scale = 1.f; + if ( bwidth < SWB && !( st->tcxonly ) ) + { + for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) + { + if ( ( bwidth == scaleTcxTable[i].bwmode ) && + ( st->total_brate >= scaleTcxTable[i].bitrateFrom ) && + ( st->total_brate < scaleTcxTable[i].bitrateTo ) ) + { + if ( st->rf_mode ) + { + i--; + } + st->hTcxCfg->na_scale = scaleTcxTable[i].scale; + break; + } + } + } + } + + if ( st->element_mode > IVAS_SCE ) + { + st->enableTcxLpc = ( st->lpcQuantization == 1 ) && ( st->total_brate <= LOWRATE_TCXLPC_MAX_BR_CPE || st->rf_mode ); + } + else + { + st->enableTcxLpc = ( st->lpcQuantization == 1 ) && ( st->total_brate <= LOWRATE_TCXLPC_MAX_BR || st->rf_mode ); + } + + if ( st->ini_frame == 0 || st->last_codec_mode == MODE1 ) + { + st->envWeighted = 0; + } + + if ( st->bwidth == SWB && ( st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + if ( st->tec_tfa == 0 ) + { + set_zero( st->hTECEnc->loBuffer, MAX_TEC_SMOOTHING_DEG ); + } + st->tec_tfa = 1; + } + else + { + st->tec_tfa = 0; + } + + st->enablePlcWaveadjust = 0; + if ( st->total_brate >= HQ_48k ) + { + st->enablePlcWaveadjust = 1; + } + + st->glr = 0; + if ( ( st->total_brate == ACELP_9k60 || st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) + { + st->glr = 1; + } + + if ( st->glr ) + { + st->nb_bits_header_ace += G_LPC_RECOVERY_BITS; + } + + if ( hTcxEnc != NULL ) + { + if ( st->bwidth == NB || st->bwidth == WB ) + { + index = min( N_TCX_STARTLINE_NOISE_WB - 1, (uint16_t) max( 0, ( st->rf_mode == 0 ) ? st->frame_size_index : st->frame_size_index - 1 ) ); + hTcxEnc->nmStartLine = startLineWB[index]; + } + else /* (st->bwidth == SWB || st->bwidth == FB) */ + { + index = min( N_TCX_STARTLINE_NOISE_SWB - 1, (uint16_t) max( 3, ( st->rf_mode == 0 ) ? st->frame_size_index : st->frame_size_index - 1 ) - 3 ); + if ( st->total_brate >= IVAS_96k && st->total_brate <= IVAS_192k && st->element_mode > IVAS_SCE ) + { + index--; + } + hTcxEnc->nmStartLine = startLineSWB[index]; + if ( st->total_brate == IVAS_48k && st->element_mode == IVAS_CPE_MDCT && hTcxEnc->nmStartLine * 5 < st->L_frame * 4 ) + { + hTcxEnc->nmStartLine = ( hTcxEnc->nmStartLine * 5 ) >> 2; /* low-rate stereo is more efficient than dual-mono due to stereo processing */ + } + } + } + + if ( hTcxEnc != NULL ) + { + if ( st->total_brate < ACELP_24k40 && ( ( st->total_brate > last_total_brate ) || ( st->last_codec_mode == MODE1 ) ) ) + { + /* low-freq memQuantZeros must be reset partially if bitrate increased */ + set_s( hTcxEnc->memQuantZeros, 0, hTcxEnc->nmStartLine ); + } + else + { + if ( st->total_brate >= ACELP_24k40 && st->total_brate <= ACELP_32k && last_total_brate >= ACELP_13k20 && last_total_brate < ACELP_24k40 ) + { + set_s( hTcxEnc->memQuantZeros, 0, st->L_frame ); + } + } + } + + return; +} diff --git a/lib_enc/core_enc_switch.c b/lib_enc/core_enc_switch.c new file mode 100644 index 0000000000..ca92135736 --- /dev/null +++ b/lib_enc/core_enc_switch.c @@ -0,0 +1,198 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * core_coder_mode_switch() + * + * + *-------------------------------------------------------------------*/ + +void core_coder_mode_switch( + Encoder_State *st, + const int32_t last_total_brate, + const int16_t is_mct ) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t i, fscale, switchWB; + int32_t sr_core; + int16_t bSwitchFromAmrwbIO; + int16_t tcxonly_tmp; + + switchWB = 0; + bSwitchFromAmrwbIO = 0; + if ( st->last_core == AMR_WB_CORE ) + { + bSwitchFromAmrwbIO = 1; + } + + /* force active frame for the first frame when switching from high bitrates when DTX is enabled*/ + sr_core = getCoreSamplerateMode2( st->element_mode, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode ); + + fscale = sr2fscale( sr_core ); + + + if ( st->last_codec_mode == MODE1 ) + { + switchWB = 1; /*force init when coming from MODE1*/ + } + + tcxonly_tmp = getTcxonly( st->element_mode, st->total_brate, is_mct ); + + if ( tcxonly_tmp != st->tcxonly ) + { + switchWB = 1; /*force init when coming from MODE1*/ + } + + if ( fscale == st->fscale && !bSwitchFromAmrwbIO && !switchWB ) + { + st->sr_core = sr_core; + st->L_frame = (int16_t) ( sr_core / FRAMES_PER_SEC ); + + st->tcxonly = getTcxonly( st->element_mode, st->total_brate, is_mct ); + + st->bits_frame_nominal = (int16_t) ( (float) st->L_frame / (float) st->fscale * (float) FSCALE_DENOM / 128.0f * (float) st->total_brate / 100.0f + 0.49f ); + + st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode, st->mct_chan_mode ); + + /* switch IGF configuration */ + if ( st->igf ) + { + IGFEncSetMode( st->hIGFEnc, st->total_brate, st->bwidth, st->element_mode, st->rf_mode ); + } + + st->hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( st->bwidth ); + st->hTcxCfg->bandwidth = getTcxBandwidth( st->bwidth ); + st->hTcxCfg->tcxRateLoopOpt = ( st->tcxonly ) ? 2 : 0; + st->hTcxCfg->tcxRateLoopOpt = ( st->element_mode == IVAS_CPE_MDCT ) ? 3 : st->hTcxCfg->tcxRateLoopOpt; + st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, st->total_brate, st->rf_mode ); + st->hTcxCfg->resq = getResq( st->total_brate ); + hTcxEnc->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->total_brate, st->rf_mode, st->element_mode ); + + st->hTcxCfg->tcxRateLoopOpt = ( st->hTcxCfg->resq && !st->tcxonly ) ? 1 : st->hTcxCfg->tcxRateLoopOpt; + st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( st->total_brate, st->igf, st->element_mode, st->mct_chan_mode ); + + if ( st->hTcxCfg->fIsTNSAllowed ) + { + InitTnsConfigs( st->bwidth, st->hTcxCfg->tcx_coded_lines, st->hTcxCfg->tnsConfig, st->hIGFEnc->infoStopFrequency, st->total_brate, st->element_mode, is_mct ); + + SetAllowTnsOnWhite( st->hTcxCfg->tnsConfig, st->element_mode == IVAS_CPE_MDCT ); + } + + if ( st->bwidth == NB ) + { + st->narrowBand = 1; + st->min_band = 1; + st->max_band = 16; + } + else + { + st->narrowBand = 0; + st->min_band = 0; + st->max_band = 19; + } + + for ( i = 0; i < FRAME_SIZE_NB; i++ ) + { + if ( FrameSizeConfig[i].frame_bits == st->bits_frame_nominal ) + { + st->frame_size_index = i; + st->bits_frame = FrameSizeConfig[i].frame_bits; + st->bits_frame_core = FrameSizeConfig[i].frame_net_bits; + break; + } + } + + st->restrictedMode = getRestrictedMode( st->element_mode, st->total_brate, 0 ); + + core_coder_reconfig( st, last_total_brate ); + } + else + { + st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode, st->mct_chan_mode ); + init_coder_ace_plus( st, last_total_brate, is_mct ); + } + + if ( st->igf && st->hBWE_TD != NULL ) + { + /* reset TBE */ + if ( ( st->bwidth == WB && st->last_extl != WB_TBE ) || + ( st->bwidth == SWB && st->last_extl != SWB_TBE ) || + ( st->bwidth == FB && st->last_extl != FB_TBE ) ) + { + TBEreset_enc( st->hBWE_TD, st->last_core, st->bwidth ); + } + else + { + set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); + set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + st->hBWE_TD->gain_prec_swb = 1.0f; + } + } + + if ( st->envWeighted && !st->enableTcxLpc ) + { + /* Unweight the envelope */ + E_LPC_lsp_unweight( st->lsp_old, st->lsp_old, st->lsf_old, 1.0f / st->gamma ); + st->envWeighted = 0; + } + + if ( st->total_brate >= HQ_48k ) + { + st->enablePlcWaveadjust = 1; + } + else + { + st->enablePlcWaveadjust = 0; + } + + if ( ( last_total_brate > HQ_32k || st->last_codec_mode == MODE1 ) && st->element_mode == EVS_MONO ) + { + st->glr_reset = 1; + } + + return; +} diff --git a/lib_enc/core_enc_updt.c b/lib_enc/core_enc_updt.c new file mode 100644 index 0000000000..987910bcb5 --- /dev/null +++ b/lib_enc/core_enc_updt.c @@ -0,0 +1,205 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "cnst.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * core_encode_update() + * + * Common updates of buffers + *-------------------------------------------------------------------*/ + +void core_encode_update( + Encoder_State *st /* i/o: Encoder state structure */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t n; + + /* Update Input Signal Buffers */ + n = st->encoderPastSamples_enc + st->encoderLookahead_enc; + + mvr2r( st->buf_speech_enc_pe + st->L_frame, st->buf_speech_enc_pe, n ); + mvr2r( st->buf_speech_enc + st->L_frame, st->buf_speech_enc, n ); + + if ( !st->tcxonly ) + { + n = st->L_frame + st->L_frame / 4; + mvr2r( st->buf_wspeech_enc + st->L_frame, st->buf_wspeech_enc, n ); + } + + if ( hTcxEnc != NULL ) + { + if ( st->core == ACELP_CORE || st->core == AMR_WB_CORE || st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + mvr2r( st->buf_speech_enc + st->L_frame, hTcxEnc->buf_speech_ltp + st->L_frame, st->L_frame ); + } + } + + n = st->encoderPastSamples_enc + st->encoderLookahead_enc; + mvr2r( st->buf_synth + st->L_frame, st->buf_synth, st->L_frame + L_SUBFR ); + if ( hTcxEnc != NULL ) + { + mvr2r( hTcxEnc->buf_speech_ltp + st->L_frame, hTcxEnc->buf_speech_ltp, n ); + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + st->hTcxEnc->kernel_switch_corr_past = 0.f; + st->hTcxEnc->kernel_type[0] = MDCT_IV; + st->hTcxEnc->kernel_symmetry_past = 0; + st->hTcxEnc->enc_ste_pre_corr_past = 0; + } + } + + if ( ( st->Opt_DTX_ON && st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) || ( st->tcxonly && st->codec_mode == MODE2 ) ) + { + /* reset LP memories */ + set_zero( st->mem_MA, M ); + mvr2r( GEWB_Ave, st->mem_AR, M ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * core_encode_update_cng() + * + * Common updates in case of CNG + *-------------------------------------------------------------------*/ + +void core_encode_update_cng( + Encoder_State *st, + float *timeDomainBuffer, + float *A, + const float Aw[] /* i : weighted A(z) unquant. for subframes*/ +) +{ + float lsp[M], lsf[M]; + float *synth, synth_buf[M + 1 + L_FRAME_PLUS + L_FRAME_PLUS / 2], wsyn[L_FRAME_PLUS]; + float tmp; + float enr; + int16_t enr_index; + int16_t L_frame = st->L_frame; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /* LPC -> LSP/lsp */ + a2lsp_stab( A, lsp, st->lsp_old ); + + /* LSP/lsp -> LSF/lsf */ + if ( L_frame == L_FRAME16k ) + { + lsp2lsf( lsp, lsf, M, INT_FS_16k ); + } + else + { + lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); + } + + /* Update synth memory */ + synth = synth_buf + ( 1 + M ); + mvr2r( hLPDmem->syn, synth_buf, 1 + M ); + mvr2r( timeDomainBuffer, synth, L_frame ); + mvr2r( synth + L_frame - ( 1 + M ), hLPDmem->syn, 1 + M ); + mvr2r( synth, st->synth, L_frame ); + + /* Update ZIR */ + set_zero( synth + L_frame, L_frame / 2 ); + syn_filt( A, M, synth + L_frame, synth + L_frame, L_frame / 2, &synth[L_frame - M], 0 ); + if ( st->hTcxEnc != NULL ) + { + mvr2r( synth + L_frame - ( L_frame / 2 ), st->hTcxEnc->Txnq, L_frame / 2 ); + } + + /* Update pe-synth memory */ + tmp = synth[-( 1 + M )]; + preemph( synth - M, st->preemph_fac, M + L_frame, &tmp ); + mvr2r( synth + L_frame - M, hLPDmem->mem_syn, M ); + mvr2r( synth + L_frame - M, hLPDmem->mem_syn2, M ); + + /* Update excitation memory */ + mvr2r( hLPDmem->old_exc + L_frame, hLPDmem->old_exc, max( L_EXC_MEM - L_frame, 0 ) ); + residu( A, M, synth, hLPDmem->old_exc + max( L_EXC_MEM - L_frame, 0 ), L_frame ); + + if ( st->core_brate == SID_2k40 ) + { + enr = cng_energy( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att, hLPDmem->old_exc + max( L_EXC_MEM - L_frame, 0 ), L_frame ); + + enr_index = (int16_t) ( ( enr + 2.0f ) * STEP_SID ); + enr_index = min( max( enr_index, 0 ), 127 ); + st->hTdCngEnc->old_enr_index = enr_index; + } + + /* Update weighted synthesis memory */ + calc_residu( synth, wsyn, Aw, L_frame ); + tmp = st->wspeech_enc[-1] - hLPDmem->mem_w0; + deemph( wsyn, st->preemph_fac, L_frame, &tmp ); + hLPDmem->mem_w0 = st->wspeech_enc[L_frame - 1] - wsyn[L_frame - 1]; + + /* Update LPC-related memories */ + mvr2r( lsp, st->lsp_old, M ); + mvr2r( lsf, st->lsf_old, M ); + st->envWeighted = 0; + mvr2r( A, st->old_Aq_12_8, M + 1 ); + st->old_Es_pred = 0; + + /* Reset acelp memories */ + set_zero( hLPDmem->dispMem, 8 ); + hLPDmem->tilt_code = TILT_CODE; + hLPDmem->gc_threshold = 0.0f; + + /* Update ace/tcx mode */ + st->core = ACELP_CORE; + + /* Reset TCX overlap */ + st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + + if ( st->hDtxEnc->first_CNG == 0 ) + { + mvr2r( st->lsp_old, st->hDtxEnc->lspCNG, M ); + } + + return; +} diff --git a/lib_enc/core_switching_enc.c b/lib_enc/core_switching_enc.c new file mode 100644 index 0000000000..6102bd5f67 --- /dev/null +++ b/lib_enc/core_switching_enc.c @@ -0,0 +1,567 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * core_switching_pre_enc() + * + * Preprocessing (preparing) for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + +void core_switching_pre_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *old_inp_12k8, /* i : old input signal @12.8kHz */ + const float *old_inp_16k, /* i : old input signal @16kHz */ + const int16_t active_cnt, /* i : active frame counter */ + const int16_t last_element_mode /* i : last_element_mode */ +) +{ + int16_t Sample_Delay_HP, Sample_Delay_LP; + + HQ_ENC_HANDLE hHQ_core = st->hHQ_core; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /* Codec mode switching */ + if ( st->last_codec_mode == MODE2 || ( ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) && st->element_mode > EVS_MONO ) ) + { + if ( hLPDmem != NULL ) + { + mvr2r( hLPDmem->mem_syn2, hLPDmem->mem_syn1, M ); + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + st->igf = 0; + } + + if ( st->hBWE_TD != NULL ) + { + if ( st->last_core != ACELP_CORE ) + { + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + } + + set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + } + + if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) + { + if ( st->element_mode == EVS_MONO ) + { + st->last_core = HQ_CORE; + } + + if ( hHQ_core != NULL ) + { + set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( hHQ_core->last_env, 0, BANDS_MAX ); + hHQ_core->last_max_pos_pulse = 0; + + hHQ_core->mode_count = 0; + hHQ_core->mode_count1 = 0; + + set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); + hHQ_core->prev_frm_hfe2 = 0; + hHQ_core->prev_stab_hfe2 = 0; + } + + /*ALDO overlap windowed past: also used in MODE2 but for other MDCT-LB*/ + if ( st->element_mode == EVS_MONO && st->hTcxEnc != NULL ) + { + set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); + } + } + if ( st->L_frame == L_FRAME16k && st->last_L_frame == L_FRAME ) + { + mvr2r( st->lsp_old, st->lsp_old16k, M ); + st->rate_switching_reset_16kHz = lsp_convert_poly( st->lsp_old16k, L_FRAME16k, 0 ); + } + + st->use_acelp_preq = 0; + } + + if ( st->last_core == -1 && ( st->core == HQ_CORE || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) ) + { + /* very first frame is HQ_CORE */ + st->last_core = HQ_CORE; + } + + if ( st->core == HQ_CORE && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) /* HQ init */ + { + + set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( hHQ_core->last_env, 0, BANDS_MAX ); + hHQ_core->last_max_pos_pulse = 0; + + hHQ_core->mode_count = 0; + hHQ_core->mode_count1 = 0; + + set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); + hHQ_core->prev_frm_hfe2 = 0; + hHQ_core->prev_stab_hfe2 = 0; + + if ( st->hTcxEnc != NULL ) + { + set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); + } + } + + /* Here we only handle cases where last_ppp and last_nelp not updated when coming from CodecB or other cores + within ACELP_CORE if switching from another bitarate to vbr, last_ppp and last_nelp is always updated in the previous frame */ + if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 ) ) + { + /* reset in case of bitrate switching in EVS */ + if ( st->hSC_VBR != NULL ) + { + st->hSC_VBR->last_last_ppp_mode = 0; + st->hSC_VBR->last_ppp_mode = 0; + st->hSC_VBR->last_nelp_mode = 0; + } + } + + /* Handle state reset of stat_noise_uv_mod memory */ + if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 || st->last_total_brate <= PPP_NELP_2k80 ) ) + { + st->act_count = 3; + st->uv_count = 0; + } + + if ( ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && st->last_core == HQ_CORE ) || ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD || ( st->element_mode == IVAS_CPE_MDCT && last_element_mode == IVAS_CPE_DFT ) ) && active_cnt == 1 ) ) + { + /* Reset the ACELP core in case of HQ->ACELP core switching */ + + if ( st->L_frame == L_FRAME16k ) + { + mvr2r( TRWB2_Ave, st->lsf_old, M ); /* init of LSP */ + lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_16k ); + } + else + { + mvr2r( TRWB_Ave, st->lsf_old, M ); /* init of LSP */ + lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); + } + + /* Reset ACELP parameters */ + if ( hLPDmem != NULL ) + { + hLPDmem->syn[M] = 0; + set_f( hLPDmem->mem_syn2, 0.0f, M ); + set_f( hLPDmem->mem_syn, 0.0f, M ); + set_f( hLPDmem->mem_syn1, 0.0f, M ); + hLPDmem->mem_w0 = 0.0f; + hLPDmem->tilt_code = 0.0f; + hLPDmem->gc_threshold = 0.0f; + set_f( hLPDmem->dispMem, 0, 8 ); + } + st->Nb_ACELP_frames = 0; + + set_zero( st->mem_MA, M ); + mvr2r( GEWB_Ave, st->mem_AR, M ); + init_gp_clip( st->clip_var ); + + st->last_coder_type = GENERIC; + + mvr2r( st->old_pitch_buf + st->L_frame / L_SUBFR, st->old_pitch_buf, st->L_frame / L_SUBFR ); + set_f( st->old_pitch_buf + st->L_frame / L_SUBFR, L_SUBFR, st->L_frame / L_SUBFR ); + + /* Reset old ACELP buffers */ + if ( st->element_mode == EVS_MONO && hLPDmem != NULL ) + { + set_f( hLPDmem->old_exc, 0, L_EXC_MEM ); + } + + if ( st->hBWE_TD != NULL ) + { + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); + + /* reset BWE memories */ + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; + } + + if ( st->hBWE_FD != NULL ) + { + set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + } + } + + if ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) ) + { + /* Reset the ACELP core in case of TCX->ACELP core switching */ + st->Nb_ACELP_frames = 0; + + if ( hLPDmem != NULL ) + { + hLPDmem->mem_w0 = 0.0f; + hLPDmem->tilt_code = 0.0f; + init_gp_clip( st->clip_var ); + hLPDmem->gc_threshold = 0.0f; + set_f( hLPDmem->dispMem, 0, 8 ); + } + + st->last_coder_type = GENERIC; + + mvr2r( st->old_pitch_buf + st->L_frame / L_SUBFR, st->old_pitch_buf, st->L_frame / L_SUBFR ); + set_f( st->old_pitch_buf + st->L_frame / L_SUBFR, L_SUBFR, st->L_frame / L_SUBFR ); + + /* Reset old TD BWE buffers */ + if ( st->hBWE_TD != NULL ) + { + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; + } + + /* reset BWE memories */ + if ( st->hBWE_TD != NULL ) + { + set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); /* TBV: this might not be needed */ + } + } + + if ( st->input_Fs >= 16000 && st->last_extl != WB_BWE && st->extl == WB_BWE && st->hBWE_FD != NULL ) + { + if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE ) + { + st->hBWE_FD->prev_mode = NORMAL; + st->hBWE_FD->modeCount = 0; + } + + st->hBWE_FD->prev_L_swb_norm1 = 8; + } + + if ( ( st->input_Fs >= 32000 && st->last_extl != SWB_BWE && st->extl == SWB_BWE ) || + ( st->input_Fs >= 48000 && st->last_extl != FB_BWE && st->extl == FB_BWE ) ) + { + /* we are switching to SWB BWE - reset SWB BWE buffers */ + if ( st->L_frame == L_FRAME ) + { + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); + Sample_Delay_LP = NS2SA( 12800, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS ); + + if ( st->element_mode > EVS_MONO ) + { + if ( st->element_mode == IVAS_CPE_TD ) + { + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); + } + Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); + } + + mvr2r( old_inp_12k8 + L_INP_MEM + L_FRAME - Sample_Delay_LP, st->hBWE_FD->old_input_lp, Sample_Delay_LP ); + } + else + { + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); + Sample_Delay_LP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ); + + if ( st->element_mode > EVS_MONO ) + { + if ( st->element_mode == IVAS_CPE_TD ) + { + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); + } + Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); + } + + mvr2r( old_inp_16k + L_INP_MEM + L_FRAME - Sample_Delay_LP, st->hBWE_FD->old_input_lp, Sample_Delay_LP ); + } + + mvr2r( st->hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - Sample_Delay_HP, st->hBWE_FD->new_input_hp, Sample_Delay_HP ); + + if ( st->last_extl != WB_BWE ) + { + st->hBWE_FD->prev_mode = NORMAL; + st->hBWE_FD->modeCount = 0; + } + st->hBWE_FD->EnergyLF = 0.0f; + st->hBWE_FD->prev_L_swb_norm1 = 8; + } + + /*---------------------------------------------------------------------* + * band-width switching from WB -> SWB/FB + *---------------------------------------------------------------------*/ + + if ( st->element_mode > EVS_MONO ) + { + if ( st->bwidth_sw_cnt == 0 ) + { + if ( st->bwidth >= SWB && st->last_bwidth == WB ) + { + st->bwidth_sw_cnt++; + } + } + else + { + st->bwidth_sw_cnt++; + + if ( st->bwidth_sw_cnt == BWS_TRAN_PERIOD ) + { + st->bwidth_sw_cnt = 0; + } + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * core_switching_post_enc() + * + * Postprocessing for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + +void core_switching_post_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *old_inp_12k8, /* i : old input signal @12.8kHz */ + const float *old_inp_16k, /* i : old input signal @16kHz */ + const float A[] /* i : unquant. LP filter coefs. */ +) +{ + if ( st->core == HQ_CORE ) + { + st->use_acelp_preq = 0; + + if ( ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) && st->element_mode == EVS_MONO ) /* core switching ==> ACELP subframe encoding */ + { + acelp_core_switch_enc( st, old_inp_12k8 + L_INP_MEM - NS2SA( INT_FS_12k8, ACELP_LOOK_NS ), old_inp_16k + L_INP_MEM - NS2SA( INT_FS_16k, ACELP_LOOK_NS ), A ); + } + + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; + st->hBWE_FD->mem_deemph_old_syn = 0.0f; + } + else + { + if ( st->hBWE_TD == NULL ) + { + return; + } + + /* reset SWB TBE buffers */ + if ( st->extl == WB_TBE && st->last_extl != WB_TBE ) + { + wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); + + if ( st->last_extl != WB_BWE ) + { + set_f( st->hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( st->hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + } + + set_f( st->hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); + set_f( st->hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); + set_f( st->hBWE_TD->mem_csfilt, 0, 2 ); + } + + if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && + ( st->last_core == HQ_CORE || st->L_frame != st->last_L_frame || ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) ) ) + { + set_f( st->hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( st->hBWE_TD->old_speech_shb, 0.0f, L_LOOK_16k + L_SUBFR16k ); + set_f( st->hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); + set_f( st->hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); + st->hBWE_TD->old_mean_EnvSHBres = 0.0f; + st->hBWE_TD->prev_enr_EnvSHBres = 1.0f; + st->hBWE_TD->prev_shb_env_tilt = 0.0f; + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + st->hBWE_TD->prev_Env_error = 0.0f; + + swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); + + set_f( st->hBWE_TD->dec_2_over_3_mem, 0.0f, L_FILT_2OVER3 ); + set_f( st->hBWE_TD->dec_2_over_3_mem_lp, 0.0f, L_FILT_2OVER3_LP ); + } + else if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && ( ( st->element_mode == IVAS_CPE_TD && st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) || ( st->element_mode != IVAS_CPE_TD && st->last_total_brate != st->total_brate ) || ( st->last_bwidth != st->bwidth ) || ( st->last_codec_mode != MODE1 ) || ( st->rf_mode_last != st->rf_mode ) ) ) + { + set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); + set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); + set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + st->hBWE_TD->gain_prec_swb = 1.0f; + } + else if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) + { + TBEreset_enc( st->hBWE_TD, st->last_core, st->bwidth ); + } + + /* Interp_3_2 CNG buffers reset */ + if ( st->extl == FB_TBE && ( ( st->last_extl != FB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) || st->L_frame != st->last_L_frame ) ) + { + set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + st->hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_enc( st->hBWE_TD->elliptic_bpf_2_48k_mem, &st->hBWE_TD->prev_fb_energy ); + } + /* Fade towards init value for non HQ_CORE */ + if ( st->hHQ_core != NULL ) + { + st->hHQ_core->crest_lp = HQ_CREST_FAC_SM * ( st->hHQ_core->crest_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * HQ_CREST_THRESHOLD; + st->hHQ_core->crest_mod_lp = HQ_CREST_FAC_SM * ( st->hHQ_core->crest_mod_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * HQ_CREST_MOD_THRESHOLD; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * core_switching_hq_prepare_enc() + * + * Preprocessing in the first HQ frame after ACELP frame + * - modify bit allocation for HQ core removing CELP subframe budget + * - update st->old_wtda to modify windows at the encoder + *---------------------------------------------------------------------*/ + +void core_switching_hq_prepare_enc( + Encoder_State *st, /* i/o: encoder state structure */ + int16_t *num_bits, /* i/o: bit budget update */ + const int16_t input_frame, /* i : frame length */ + float *wtda_audio, + const float *audio ) +{ + int16_t delta, Loverlapp, i; + int16_t n; + int32_t cbrate; + + /* set multiplication factor according to the sampling rate */ + delta = 1; + if ( input_frame == L_FRAME16k ) + { + delta = 2; + } + else if ( input_frame == L_FRAME32k ) + { + delta = 4; + } + else if ( input_frame == L_FRAME48k ) + { + delta = 6; + } + + /* set switching frame bitrate */ + if ( st->last_L_frame == L_FRAME ) + { + if ( st->core_brate > ACELP_24k40 ) + { + cbrate = ACELP_24k40; + } + else + { + cbrate = st->core_brate; + } + + /* subtract ACELP switching frame bits */ + if ( st->core_brate >= ACELP_11k60 ) + { + /* subtract one bit for LP filtering flag */ + ( *num_bits )--; + } + + *num_bits -= ACB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* pitch bits */ + *num_bits -= gain_bits_tbl[BIT_ALLOC_IDX( cbrate, TRANSITION, 0, 0 )]; /* gain bits */ + *num_bits -= FCB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ + } + else /* L_frame == L_FRAME16k */ + { + if ( st->core_brate <= ACELP_8k00 ) + { + cbrate = ACELP_8k00; + } + else if ( st->core_brate <= ACELP_14k80 ) + { + cbrate = ACELP_14k80; + } + else + { + cbrate = min( st->core_brate, ACELP_22k60 ); + } + + /* subtract ACELP switching frame bits */ + if ( st->core_brate >= ACELP_11k60 ) + { + /* subtract one bit for LP filtering flag */ + ( *num_bits )--; + } + + *num_bits -= ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* pitch bits */ + *num_bits -= gain_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* gain bits */ + *num_bits -= FCB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ + } + + /* subtract BWE bits */ + if ( !( ( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) + { + *num_bits -= ( NOOFGAINBITS1 + AUDIODELAYBITS ); + } + + n = (int16_t) ( (float) input_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); + + /* Transition window at the encoder */ + Loverlapp = delta * SWITCH_OVERLAP_8k; + for ( i = 0; i < n; i++ ) + { + wtda_audio[i + input_frame / 2] = -audio[n - i - 1]; + } + + for ( i = n; i < input_frame / 2 - Loverlapp; i++ ) + { + wtda_audio[i + input_frame / 2] = -audio[n - i - 1]; + } + + for ( i = input_frame / 2 - Loverlapp; i < input_frame / 2; i++ ) + { + wtda_audio[i + input_frame / 2] = -audio[n - i - 1] * (float) cos( ( i + 1 - input_frame / 2 + Loverlapp ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); /* win=cos() */ + } + + /* reset state of old_out if switching */ + if ( st->hTcxEnc != NULL ) + { + set_f( st->hTcxEnc->old_out, 0.0f, L_FRAME32k ); + } + + return; +} diff --git a/lib_enc/corr_xh.c b/lib_enc/corr_xh.c new file mode 100644 index 0000000000..bf4d473bda --- /dev/null +++ b/lib_enc/corr_xh.c @@ -0,0 +1,77 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * corr_xh() + * + * Compute the correlation between the target signal and the impulse + * response of the weighted synthesis filter. + * + * y[i] = sum(j=i,l-1) x[j]*h[j-i], i=0,l-1 + *-------------------------------------------------------------------*/ + +void corr_xh( + const float *x, /* i : target signal */ + float *y, /* o : correlation between x[] and h[] */ + const float *h, /* i : impulse response (of weighted synthesis filter) */ + const int16_t L_subfr /* i : length of the subframe */ +) +{ + int16_t i, j; + float s; + + for ( i = 0; i < L_subfr; i++ ) + { + s = 0.0f; + for ( j = i; j < L_subfr; j++ ) + { + s += x[j] * h[j - i]; + } + + y[i] = s; + } + + return; +} diff --git a/lib_enc/decision_matrix_enc.c b/lib_enc/decision_matrix_enc.c new file mode 100644 index 0000000000..1683f8fe48 --- /dev/null +++ b/lib_enc/decision_matrix_enc.c @@ -0,0 +1,720 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "stat_enc.h" +#include "stat_dec.h" +#include "rom_com.h" +#include "wmops.h" + + +/*-----------------------------------------------------------------* + * decision_matrix_enc() + * + * Select operating point (combination of technologies) based on input signal properties and command-line parameters: + * + * 7.20 8.00 9.60 13.20 16.40 24.40 32 48 64 96 128 + * Mode 1 1 2 1 2 2 1 2 1 2 2 + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + * NB + * speech ACELP@12k8 ACELP@12k8 ACELP@12k8 ACELP@12k8 + * audio LR MDCT LR MDCT TCX LR MDCT + * inactive GSC@12k8 GSC@12k8 TCX GSC@12k8 + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + * WB + * speech ACELP@12k8 ACELP@12k8 ACELP@12k8 ACELP@12k8 ACELP@16k ACELP@16k ACELP@16k TCX ACELP@16k TCX TCX + * +0b WB BWE +0b WB BWE +TD WB BWE +TD WB BWE + * audio GSC@12k8 GSC@12k8 TCX LR MDCT TCX TCX HQ TCX HQ TCX TCX + * +0b WB BWE +0b WB BWE +IGF + * inactive GSC@12k8 GSC@12k8 TCX GSC@12k8 TCX TCX AVQ@16k TCX AVQ@16k TCX TCX + * +0b WB BWE +0b WB BWE +IGF +FD WB BWE + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + * SWB + * speech ACELP@12k8 ACELP@16k ACELP@16k ACELP@16k TCX ACELP@16k TCX TCX + * +TD SWB BWE +TD SWB BWE +TD SWB BWE +TD SWB BWE +IGF +HR SWB BWE + * audio LR MDCT/GSC TCX TCX HQ TCX HQ TCX TCX + * +FD SWB BWE +IGF +IGF +FD SWB BWE +IGF + * inactive GSC@12k8 TCX TCX AVQ@16k TCX AVQ@16k TCX TCX + * +FD SWB BWE +IGF +IGF +FD SWB BWE +IGF +HR SWB BWE + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + * FB + * speech ACELP@16k ACELP@16k ACELP@16k TCX ACELP@16k TCX TCX + * +TD FB BWE +TD FB BWE +TD FB BWE +IGF +HR FB BWE + * audio TCX TCX HQ TCX HQ TCX TCX + * +IGF +IGF +FD FB BWE +IGF + * inactive TCX TCX AVQ@16k TCX AVQ@16k TCX TCX + * +IGF +IGF +FD FB BWE +IGF +HR FB BWE + * ----------------------------------------------------------------------------------------------------------------------------------------------------------------- + * + * Note: the GSC technology is part of the ACELP core as AUDIO coder_type (it is used also at 13.2 for SWB unvoiced noisy speech) + * Note2: FB processing is optional and is activated via "-band FB" option on the encoder command line + * Note3: NB (0-4kHz), WB (0-8kHz), SWB (0-16kHz), FB (0-20kHz) + * + * Signalling of modes (x marks a mode that must be signalled in the bitstream) + * + * 7.20 8.00 9.6 13.2 16.4 24.4 32 48 64 + * NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB + * GC, 12k8 x x x x x x x x x x x x x + * UC, 12k8 x x x x x x + * VC, 12k8 x x x x x x x x x x x x x + * TC, 12k8 x x x x x x x x x x x x x + * GC, 16k x x x x x x x x x x x x + * TC, 16k x x x x x x x x x x x x + * AC(GSC) x x x x x x x x x x x x x + * IC x x x x x x x x x x x x x x x x x x x x x x x x x + * + * GC, 12k8, FS x x x x x x x x x x x x x + * GC, 16k, FS x x x x x x x x x x x + * VC, 12k8, FS x x x x x x x + * TC, 12k8, FS x + * TC, 16k, FS x x x x x x x x x x x + * + * LR MDCT x x x x x x x x x x x + * + *-----------------------------------------------------------------*/ + +void decision_matrix_enc( + Encoder_State *st, /* i : encoder state structure */ + int16_t *hq_core_type /* o : HQ core type */ +) +{ + /* initialization */ + st->core = -1; + st->extl = -1; + st->extl_brate = 0; + *hq_core_type = -1; + st->igf = 0; + + /* SID and FRAME_NO_DATA frames */ + if ( st->Opt_DTX_ON && ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) + { + st->core = ACELP_CORE; + + if ( st->input_Fs >= 32000 && st->bwidth >= SWB ) + { + st->extl = SWB_CNG; + } + + st->rf_mode = 0; + + return; + } + + st->core_brate = 0; + + /* SC-VBR */ + if ( st->Opt_SC_VBR ) + { + /* SC-VBR */ + st->core = ACELP_CORE; + st->core_brate = ACELP_7k20; + st->total_brate = ACELP_7k20; + + if ( st->hSC_VBR->ppp_mode == 1 ) + { + /* PPP mode */ + st->core_brate = PPP_NELP_2k80; + } + else if ( ( ( st->coder_type == UNVOICED || st->coder_type == TRANSITION ) && !st->sp_aud_decision1 ) || st->bwidth != NB ) + { + + if ( st->coder_type == UNVOICED && st->vad_flag == 1 && ( ( st->last_bwidth >= SWB && st->last_Opt_SC_VBR ) || st->last_bwidth < SWB ) && ( st->last_core != HQ_CORE || st->bwidth != NB ) ) + { + /* NELP mode */ + st->hSC_VBR->nelp_mode = 1; + st->core_brate = PPP_NELP_2k80; + } + else if ( st->coder_type == TRANSITION || ( st->coder_type == UNVOICED && st->hSC_VBR->nelp_mode != 1 ) || ( ( st->coder_type == AUDIO || st->coder_type == INACTIVE ) && st->bwidth != NB ) ) + { + /* silence portions */ + st->core_brate = ACELP_8k00; + st->total_brate = ACELP_8k00; + } + } + + return; + } + + /*---------------------------------------------------------------------* + * NB + *---------------------------------------------------------------------*/ + + else if ( st->bwidth == NB ) + { + st->core = ACELP_CORE; + +#ifdef DEBUGGING + if ( st->total_brate >= HQCORE_NB_MIN_RATE && ( st->force == FORCE_MUSIC || ( st->force == -1 && st->sp_aud_decision1 == 1 ) ) ) + { + st->core = HQ_CORE; + } +#else + if ( st->total_brate >= HQCORE_NB_MIN_RATE && st->sp_aud_decision1 == 1 ) + { + st->core = HQ_CORE; + } +#endif + } + + /*---------------------------------------------------------------------* + * WB + *---------------------------------------------------------------------*/ + + else if ( st->bwidth == WB ) + { + st->core = ACELP_CORE; + +#ifdef DEBUGGING + if ( ( st->total_brate >= HQCORE_WB_MIN_RATE && ( st->force == FORCE_MUSIC || ( st->force == -1 && st->sp_aud_decision1 == 1 ) ) ) || st->total_brate >= HQ_96k ) +#else + if ( ( st->total_brate >= HQCORE_WB_MIN_RATE && st->sp_aud_decision1 == 1 ) || st->total_brate >= HQ_96k ) +#endif + { + st->core = HQ_CORE; + } + else + { + if ( st->bwidth == WB && st->total_brate < ACELP_9k60 ) + { + st->extl = WB_BWE; + } + else if ( st->bwidth == WB && st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_16k40 ) + { + /* Note: WB BWE is used exceptionally at 13.2 kbps if GSC is selected instead of LR-MDCT */ + if ( st->sp_aud_decision1 == 1 || st->coder_type == INACTIVE || ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) ) + { + st->extl = WB_BWE; + st->extl_brate = WB_BWE_0k35; + } + else + { + st->extl = WB_TBE; + st->extl_brate = WB_TBE_1k05; + } + } + } + } + + /*---------------------------------------------------------------------* + * SWB and FB + *---------------------------------------------------------------------*/ + + else if ( st->bwidth == SWB || st->bwidth == FB ) + { +#ifdef DEBUGGING + if ( ( st->total_brate >= HQCORE_WB_MIN_RATE && ( st->force == FORCE_MUSIC || ( st->force == -1 && st->sp_aud_decision1 == 1 ) ) ) || st->total_brate >= HQ_96k ) +#else + if ( ( st->total_brate >= HQCORE_SWB_MIN_RATE && st->sp_aud_decision1 == 1 ) || st->total_brate >= HQ_96k ) +#endif + { + st->core = HQ_CORE; + } + else + { + st->core = ACELP_CORE; + + if ( st->total_brate >= ACELP_13k20 && st->total_brate < ACELP_48k ) + { + /* Note: SWB BWE is not used in case of GSC noisy speech */ + /* Note: SWB BWE is used exceptionally at 13.2 kbps if GSC is selected instead of LR-MDCT */ + if ( ( st->sp_aud_decision1 == 1 || st->coder_type == INACTIVE || ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) ) && !st->GSC_noisy_speech ) + { + st->extl = SWB_BWE; + st->extl_brate = SWB_BWE_1k6; + + if ( st->bwidth == FB && st->total_brate >= ACELP_24k40 ) + { + st->extl = FB_BWE; + st->extl_brate = FB_BWE_1k8; + } + } + else + { + st->extl = SWB_TBE; + st->extl_brate = SWB_TBE_1k6; + + if ( st->total_brate >= ACELP_24k40 ) + { + st->extl_brate = SWB_TBE_2k8; + } + + if ( st->bwidth == FB && st->total_brate >= ACELP_24k40 ) + { + st->extl = FB_TBE; + st->extl_brate = FB_TBE_3k0; + } + } + } + else if ( st->total_brate >= ACELP_48k ) + { + st->extl = SWB_BWE_HIGHRATE; + st->extl_brate = SWB_BWE_16k; + + if ( st->bwidth == FB ) + { + st->extl = FB_BWE_HIGHRATE; + } + } + } + } + + /*-----------------------------------------------------------------* + * Set HQ core type + *-----------------------------------------------------------------*/ + + if ( st->core == HQ_CORE ) + { + *hq_core_type = NORMAL_HQ_CORE; + + if ( ( st->bwidth == SWB || st->bwidth == WB ) && st->total_brate <= LRMDCT_CROSSOVER_POINT ) + { + /* note that FB (bitrate >= 24400 bps) is always coded with NORMAL_HQ_CORE */ + *hq_core_type = LOW_RATE_HQ_CORE; + } + else if ( st->bwidth == NB ) + { + *hq_core_type = LOW_RATE_HQ_CORE; + } + } + + /* set core bitrate */ + st->core_brate = st->total_brate - st->extl_brate; + + if ( st->ini_frame == 0 ) + { + /* avoid switching in the very first frame */ + st->last_core = st->core; + st->last_core_brate = st->core_brate; + st->last_extl = st->extl; + } + + return; +} + +/*---------------------------------------------------------------------* + * signalling_mode1_tcx20_enc() + * + * write MODE1 TCX20 signalling information into the bitstream + *---------------------------------------------------------------------*/ + +int16_t signalling_mode1_tcx20_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t push /* i : flag to push indice */ +) +{ + int16_t num_bits; + int16_t nBits, idx, start_idx; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + assert( st->core == TCX_20_CORE ); + + num_bits = 0; + + /* Use ACELP signaling for LR MDCT */ + if ( st->total_brate <= ACELP_16k40 ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + idx = 0; + while ( acelp_sig_tbl[idx] != st->total_brate ) + { + idx++; + } + + /* retrieve the number of bits for signalling */ + nBits = (int16_t) acelp_sig_tbl[++idx]; + + /* retrieve the signalling index */ + start_idx = ++idx; + while ( acelp_sig_tbl[idx] != SIG2IND( LR_MDCT, st->bwidth, 0, 0 ) ) + { + idx++; + } + + num_bits += nBits; + if ( push ) + { + push_indice( hBstr, IND_ACELP_SIGNALLING, idx - start_idx, nBits ); + } + + /* HQ/TCX core switching flag */ + ++num_bits; + if ( push ) + { + push_indice( hBstr, IND_MDCT_CORE, 1, 1 ); + } + } + else + { + if ( st->core_brate <= ACELP_64k ) + { + /* write ACELP/HQ core indication flag */ + ++num_bits; + if ( push ) + { + push_indice( hBstr, IND_CORE, 1, 1 ); + } + } + + /* HQ/TCX core switching flag */ + ++num_bits; + if ( push ) + { + push_indice( hBstr, IND_MDCT_CORE, 1, 1 ); + } + + num_bits += 2; + if ( push ) + { + /* write band-width (needed for different I/O sampling rate support) */ + if ( st->bwidth == NB ) + { + push_indice( hBstr, IND_HQ_BWIDTH, 0, 2 ); + } + else if ( st->bwidth == WB ) + { + push_indice( hBstr, IND_HQ_BWIDTH, 1, 2 ); + } + else if ( st->bwidth == SWB ) + { + push_indice( hBstr, IND_HQ_BWIDTH, 2, 2 ); + } + else /* st->bwidth == FB */ + { + push_indice( hBstr, IND_HQ_BWIDTH, 3, 2 ); + } + } + } + + return num_bits; +} + + +/*---------------------------------------------------------------------* + * signalling_enc() + * + * write signalling information into the bitstream + *---------------------------------------------------------------------*/ + +void signalling_enc( + Encoder_State *st /* i : encoder state structure */ +) +{ + int16_t nBits, idx, start_idx; + int32_t total_brate_temp; + int16_t sig; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( st->mdct_sw == MODE2 ) + { + + assert( !st->tcxonly ); + assert( st->core == HQ_CORE ); + + push_next_indice( hBstr, 1, 1 ); /* TCX */ + push_next_indice( hBstr, 1, 1 ); /* HQ_CORE */ + + /* write ACELP->HQ core switching flag */ + if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) + { + push_indice( hBstr, IND_HQ_SWITCHING_FLG, 1, 1 ); + + /* write ACELP L_frame info */ + if ( st->last_L_frame == L_FRAME ) + { + push_indice( hBstr, IND_LAST_L_FRAME, 0, 1 ); + } + else + { + push_indice( hBstr, IND_LAST_L_FRAME, 1, 1 ); + } + } + else + { + push_indice( hBstr, IND_HQ_SWITCHING_FLG, 0, 1 ); + } + + return; + } + + if ( st->core == ACELP_CORE ) + { + int16_t ppp_mode, nelp_mode; + + if ( st->Opt_SC_VBR ) + { + ppp_mode = st->hSC_VBR->ppp_mode; + nelp_mode = st->hSC_VBR->nelp_mode; + } + else + { + ppp_mode = 0; + nelp_mode = 0; + } + + if ( ppp_mode == 1 || nelp_mode == 1 ) + { + /* 1 bit to distinguish between 2.8kbps PPP/NELP frame and SID frame */ + push_indice( hBstr, IND_CORE, 0, 1 ); + + /* SC-VBR: 0 - PPP_NB, 1 - PPP_WB, 2 - NELP_NB, 3 - NELP_WB */ + if ( st->coder_type == VOICED && st->bwidth == NB && ppp_mode == 1 ) + { + push_indice( hBstr, IND_PPP_NELP_MODE, 0, 2 ); + } + else if ( st->coder_type == VOICED && st->bwidth != NB && ppp_mode == 1 ) + { + push_indice( hBstr, IND_PPP_NELP_MODE, 1, 2 ); + } + else if ( st->coder_type == UNVOICED && st->bwidth == NB && nelp_mode == 1 ) + { + push_indice( hBstr, IND_PPP_NELP_MODE, 2, 2 ); + } + else if ( st->coder_type == UNVOICED && st->bwidth != NB && nelp_mode == 1 ) + { + push_indice( hBstr, IND_PPP_NELP_MODE, 3, 2 ); + } + } + else if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) + { + /* write the ACELP/HQ core selection bit */ + if ( st->total_brate >= ACELP_24k40 ) + { + push_indice( hBstr, IND_CORE, 0, 1 ); + } + + /* find the section in the ACELP signalling table corresponding to bitrate */ + idx = 0; + while ( idx < MAX_ACELP_SIG ) + { + if ( st->total_brate <= brate_tbl[idx] ) + { + break; + } + idx++; + } + total_brate_temp = brate_tbl[idx]; + + idx = 0; + while ( acelp_sig_tbl[idx] != total_brate_temp ) + { + idx++; + } + + /* retrieve the number of bits for signalling */ + nBits = (int16_t) acelp_sig_tbl[++idx]; + + /* retrieve the signalling index */ + start_idx = ++idx; + if ( st->element_mode == IVAS_CPE_TD && st->bwidth == SWB && st->total_brate <= ACELP_9k60 ) + { + /* patch to signal SWB as NB in Stereo */ + sig = SIG2IND( st->coder_type, NB, st->sharpFlag, st->rf_mode ); + } + else + { + sig = SIG2IND( st->coder_type, st->bwidth, st->sharpFlag, st->rf_mode ); + } + + while ( acelp_sig_tbl[idx] != sig ) + { + idx++; + } + + push_indice( hBstr, IND_ACELP_SIGNALLING, idx - start_idx, nBits ); + } + + /* write extension layer flag to distinguish between TBE (0) and BWE (1) */ + if ( st->extl_brate > 0 ) + { + if ( st->extl == WB_TBE || st->extl == SWB_TBE || st->extl == FB_TBE ) + { + push_indice( hBstr, IND_BWE_FLAG, 0, 1 ); + } + else if ( st->extl == WB_BWE || st->extl == SWB_BWE || st->extl == FB_BWE ) + { + push_indice( hBstr, IND_BWE_FLAG, 1, 1 ); + } + } + } + else /* HQ core */ + { + /* write ACELP->HQ core switching flag */ + if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) + { + push_indice( hBstr, IND_HQ_SWITCHING_FLG, 1, 1 ); + + /* write ACELP L_frame info */ + if ( st->last_L_frame == L_FRAME ) + { + push_indice( hBstr, IND_LAST_L_FRAME, 0, 1 ); + } + else + { + push_indice( hBstr, IND_LAST_L_FRAME, 1, 1 ); + } + } + else + { + push_indice( hBstr, IND_HQ_SWITCHING_FLG, 0, 1 ); + } + + /* HQ/TCX core switching flag */ + push_indice( hBstr, IND_MDCT_CORE, 0, 1 ); + + /* Use ACELP signaling for LR MDCT */ + if ( st->total_brate <= ACELP_16k40 ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + idx = 0; + while ( acelp_sig_tbl[idx] != st->total_brate ) + { + idx++; + } + + /* retrieve the number of bits for signalling */ + nBits = (int16_t) acelp_sig_tbl[++idx]; + + /* retrieve the signalling index */ + start_idx = ++idx; + while ( acelp_sig_tbl[idx] != SIG2IND( LR_MDCT, st->bwidth, 0, 0 ) ) + { + idx++; + } + + push_indice( hBstr, IND_ACELP_SIGNALLING, idx - start_idx, nBits ); + } + else + { + if ( st->core_brate <= ACELP_64k ) + { + /* write ACELP/HQ core indication flag */ + push_indice( hBstr, IND_CORE, 1, 1 ); + } + + /* write band-width (needed for different I/O sampling rate support) */ + if ( st->bwidth == NB ) + { + push_indice( hBstr, IND_HQ_BWIDTH, 0, 2 ); + } + else if ( st->bwidth == WB ) + { + push_indice( hBstr, IND_HQ_BWIDTH, 1, 2 ); + } + else if ( st->bwidth == SWB ) + { + push_indice( hBstr, IND_HQ_BWIDTH, 2, 2 ); + } + else /* st->bwidth == FB */ + { + push_indice( hBstr, IND_HQ_BWIDTH, 3, 2 ); + } + } + } + + return; +} + +/*---------------------------------------------------------------------* + * signalling_enc_rf() + * + * write channel-aware signalling information into the bitstream + *---------------------------------------------------------------------*/ + +void signalling_enc_rf( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + int16_t i, sfr; + RF_ENC_HANDLE hRF = st->hRF; + + /* write partial copy into bitstream */ + if ( st->rf_mode == 1 ) + { + enc_prm_rf( st, hRF->rf_indx_frametype[st->rf_fec_offset], st->rf_fec_offset ); + hRF->rf_indx_tbeGainFr[0] = hRF->RF_bwe_gainFr_ind; + } + + if ( hRF != NULL ) + { + /* Shift the RF indices such that the partial copy associated with + (n-fec_offset)th frame is included in the bitstream in nth frame. */ + for ( i = st->rf_fec_offset; i >= 0; i-- ) + { + /* RF frame type */ + hRF->rf_indx_frametype[i + 1] = hRF->rf_indx_frametype[i]; + + /* RF target bits buffer */ + hRF->rf_targetbits_buff[i + 1] = hRF->rf_targetbits_buff[i]; + + /* lsf indx */ + hRF->rf_indx_lsf[i + 1][0] = hRF->rf_indx_lsf[i][0]; + hRF->rf_indx_lsf[i + 1][1] = hRF->rf_indx_lsf[i][1]; + hRF->rf_indx_lsf[i + 1][2] = hRF->rf_indx_lsf[i][2]; + + /* ES pred energy */ + hRF->rf_indx_EsPred[i + 1] = hRF->rf_indx_EsPred[i]; + + /* LTF mode, sfr params: pitch, fcb and gain */ + for ( sfr = 0; sfr < st->nb_subfr; sfr++ ) + { + hRF->rf_indx_ltfMode[i + 1][sfr] = hRF->rf_indx_ltfMode[i][sfr]; + hRF->rf_indx_pitch[i + 1][sfr] = hRF->rf_indx_pitch[i][sfr]; + hRF->rf_indx_fcb[i + 1][sfr] = hRF->rf_indx_fcb[i][sfr]; + hRF->rf_indx_gain[i + 1][sfr] = hRF->rf_indx_gain[i][sfr]; + } + + /* shift the nelp indices */ + hRF->rf_indx_nelp_iG1[i + 1] = hRF->rf_indx_nelp_iG1[i]; + hRF->rf_indx_nelp_iG2[i + 1][0] = hRF->rf_indx_nelp_iG2[i][0]; + hRF->rf_indx_nelp_iG2[i + 1][1] = hRF->rf_indx_nelp_iG2[i][1]; + hRF->rf_indx_nelp_fid[i + 1] = hRF->rf_indx_nelp_fid[i]; + + /* tbe gain Fr shift */ + hRF->rf_indx_tbeGainFr[i + 1] = hRF->rf_indx_tbeGainFr[i]; + hRF->rf_clas[i + 1] = hRF->rf_clas[i]; + hRF->rf_gain_tcx[i + 1] = hRF->rf_gain_tcx[i]; + hRF->rf_tcxltp_param[i + 1] = hRF->rf_tcxltp_param[i]; + } + } + + return; +} diff --git a/lib_enc/detect_transient.c b/lib_enc/detect_transient.c new file mode 100644 index 0000000000..3eaddbc073 --- /dev/null +++ b/lib_enc/detect_transient.c @@ -0,0 +1,264 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * hp_filter() + * + * High pass filter + *--------------------------------------------------------------------------*/ + +static void hp_filter( + const float *x, /* i : input signal */ + float *y, /* o : output signal */ + float *oldx, /* i/o: previous filter input */ + float *oldy, /* i/o: previous filter output */ + const int16_t L /* i : length (32 or 48Hz) */ +) +{ + int16_t i; + + y[0] = 0.4931f * *oldy + 0.7466f * ( x[0] - *oldx ); + + for ( i = 1; i < L; i++ ) + { + y[i] = 0.4931f * y[i - 1] + 0.7466f * ( x[i] - x[i - 1] ); + } + + *oldx = x[L - 1]; + *oldy = y[L - 1]; + + return; +} + +/*-------------------------------------------------------------------------- + * detect_transient() + * + * Detect if the signal is a transient + *--------------------------------------------------------------------------*/ + +/*! r: transient flag */ +int16_t detect_transient( + Encoder_State *st, /* i/o: Encoder state structure */ + const float *in, /* i : input signal */ + const int16_t L /* i : length (32 or 48kHz) */ +) +{ + float Energy; + float EnergyLT; + int16_t i, blk; + int16_t IsTransient; + float out_filt[L_FRAME48k]; + int16_t position = 0; + float thr; + float Thres = 0.f; + float Energy_in[5]; + float E_low, E_high; + float E_in = 0.0f, E_out = 0.0f; + + IsTransient = 0; + + if ( st->last_extl != st->extl ) + { + st->TransientHangOver = 0; + st->old_hpfilt_in = 0; + st->old_hpfilt_out = 0; + st->Energy_Old = 0; + } + + /* High-pass filter */ + hp_filter( in, out_filt, &( st->old_hpfilt_in ), &( st->old_hpfilt_out ), L ); + + /* Long-term energy */ + if ( st->last_extl != st->extl || ( st->last_extl == st->extl && st->last_core != st->core ) || st->last_codec_mode == MODE2 ) + { + EnergyLT = EPSILON; + for ( i = 0; i < L / 4; i++ ) + { + EnergyLT += out_filt[i] * out_filt[i]; + } + } + else + { + EnergyLT = st->EnergyLT; + } + + if ( L == L_FRAME8k ) + { + Energy_in[0] = st->Energy_Old; + E_in = 0; + E_out = 0; + + /* Compute block energy */ + for ( blk = 0; blk < 4; blk++ ) + { + Energy = EPSILON; + Energy_in[blk + 1] = EPSILON; + + for ( i = 0; i < L / 4; i++ ) + { + Energy += out_filt[i + blk * ( L / 4 )] * out_filt[i + blk * ( L / 4 )]; + Energy_in[blk + 1] += in[i + blk * ( L / 4 )] * in[i + blk * ( L / 4 )]; + } + + E_in += Energy_in[blk + 1]; + E_out += Energy; + + Thres = 15.f; + + if ( Energy > 6.0f * EnergyLT ) + { + IsTransient = 1; + position = blk; + } + + EnergyLT = 0.75f * EnergyLT + 0.25f * Energy; + } + } + else + { + /* Compute block energy */ + for ( blk = 0; blk < 4; blk++ ) + { + Energy = EPSILON; + for ( i = 0; i < L / 4; i++ ) + { + Energy += out_filt[i + blk * ( L / 4 )] * out_filt[i + blk * ( L / 4 )]; + } + + if ( st->extl == SWB_BWE || st->extl == FB_BWE ) + { + if ( ( Energy > 13.5f * EnergyLT ) || ( Energy > 10.0f * EnergyLT && st->core == ACELP_CORE && st->coder_type == INACTIVE ) ) + { + IsTransient = 1; + position = blk; + } + } + else + { + if ( st->total_brate <= HQ_16k40 && st->bwidth == SWB ) + { + thr = 13.5f; + } + else + { + thr = 6.0f; + } + + if ( Energy > thr * EnergyLT ) + { + IsTransient = 1; + position = blk; + } + } + + EnergyLT = 0.75f * EnergyLT + 0.25f * Energy; + } + } + + st->EnergyLT = EnergyLT; + + if ( ( st->last_extl != SWB_BWE && st->last_extl != SWB_TBE && st->extl == SWB_BWE ) || + ( st->last_extl != FB_BWE && st->last_extl != FB_TBE && st->extl == FB_BWE ) ) + { + IsTransient = 0; + } + + if ( IsTransient && L == L_FRAME8k ) + { + E_low = 0.f; + blk = 0; + for ( i = 0; i < position + 1; i++ ) + { + E_low += Energy_in[i]; + blk++; + } + E_low /= (float) blk; + + E_high = 0.f; + blk = 0; + for ( i = position + 1; i < 5; i++ ) + { + E_high += Energy_in[i]; + blk++; + } + E_high /= (float) blk; + + if ( ( ( E_high / E_low < 2.0f ) && ( E_high / E_low > 0.7f ) ) && ( ( E_in / E_out ) > Thres ) ) + { + IsTransient = 0; + } + } + + if ( IsTransient ) + { + if ( L == L_FRAME8k ) + { + if ( position == 3 ) + { + st->TransientHangOver = 1; + } + } + else + { + st->TransientHangOver = 1; + } + } + else + { + if ( st->TransientHangOver ) + { + st->TransientHangOver = 0; + IsTransient = 1; + } + } + + if ( L == L_FRAME8k ) + { + st->Energy_Old = Energy_in[4]; + } + + return IsTransient; +} diff --git a/lib_enc/diffcod.c b/lib_enc/diffcod.c new file mode 100644 index 0000000000..3d0c47ca62 --- /dev/null +++ b/lib_enc/diffcod.c @@ -0,0 +1,152 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------*/ +/* Function diffcod() */ +/* */ +/* Differential coding for indices of quantized norms */ +/*--------------------------------------------------------------------------*/ + +void diffcod( + const int16_t N, /* i : number of sub-vectors */ + int16_t *y, /* i/o: indices of quantized norms */ + int16_t *difidx /* o : differential code */ +) +{ + int16_t i, k, r; + + for ( i = N - 1; i > 0; i-- ) + { + r = i - 1; + k = y[i] - y[r]; + if ( k < ( -15 ) ) + { + y[r] = y[i] + 15; + } + } + + for ( i = 1; i < N; i++ ) + { + r = i - 1; + k = y[i] - y[r]; + if ( k > 16 ) + { + k = 16; + y[i] = y[r] + 16; + } + difidx[r] = k + 15; + } + + return; +} + + +/*-------------------------------------------------------------------------- + * diffcod_lrmdct() + * + * Differential coding for indices of quantized norms + *--------------------------------------------------------------------------*/ + +void diffcod_lrmdct( + const int16_t N, /* i : number of sub-vectors */ + const int16_t be_ref, /* i : band energy reference */ + int16_t *y, /* i/o: indices of quantized norms */ + int16_t *difidx, /* o : differential code */ + const int16_t is_transient /* i : transient flag */ +) +{ + int16_t i, m, r; + int16_t k; + int16_t thr_l, thr_h; + + if ( is_transient ) + { + thr_l = -15; + thr_h = 16; + } + else + { + thr_l = -32; + thr_h = 31; + } + + difidx[0] = y[0] - be_ref; + if ( difidx[0] > thr_h ) + { + difidx[0] = thr_h; + y[0] = be_ref + thr_h; + } + + if ( difidx[0] < thr_l ) + { + difidx[0] = thr_l; + y[0] = be_ref + thr_l; + } + + m = N - 1; + for ( i = m; i > 0; i-- ) + { + r = i - 1; + k = y[i] - y[r]; + if ( k < thr_l ) + { + y[r] = y[i] - thr_l; + } + } + + for ( i = 1; i < N; i++ ) + { + r = i - 1; + k = y[i] - y[r]; + if ( k > thr_h ) + { + k = thr_h; + y[i] = y[r] + thr_h; + } + difidx[i] = k; + } + + return; +} diff --git a/lib_enc/dtx.c b/lib_enc/dtx.c new file mode 100644 index 0000000000..aeefb3116c --- /dev/null +++ b/lib_enc/dtx.c @@ -0,0 +1,885 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define ALPHA_ENER_SLOW 0.99f /* Slow adaptation (noise up, speech down) */ +#define ALPHA_ENER_FAST 0.90f /* Fast adaptation (noise down, speech up) */ +#define MIN_CNT 50 /* Minimum frame number before SID interval adaptation */ + +#define SNR_H 51.0f /* Estimated SNR and corresponding SID interval */ + /* 51dB corresponds to 25dB SNR before noise supressor */ +#define SNR_L 36.0f +#define INT_H 50 +#define INT_L 8 + +#define LTE_VAR -4.0f + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void update_SID_cnt( DTX_ENC_HANDLE hDtxEnc, const int32_t core_brate, const int16_t Opt_AMR_WB ); + +/*-------------------------------------------------------------------* + * dtx() + * + * Discontinuous transmission operation + *-------------------------------------------------------------------*/ + +void dtx( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t vad, /* i : VAD flag for DTX */ + const float speech[] /* i : Pointer to the speech frame */ +) +{ + float alpha; + + DTX_ENC_HANDLE hDtxEnc = st->hDtxEnc; + + int16_t last_br_cng_flag, last_br_flag, br_dtx_flag; + + if ( st->dtx_sce_sba != 0 ) + { + last_br_cng_flag = 1; + last_br_flag = 1; + br_dtx_flag = 1; + } + else + { + last_br_cng_flag = st->last_total_brate_cng <= ACELP_24k40 || st->lp_noise < 15 || ( ( st->element_mode == IVAS_SCE ) && st->last_total_brate_cng <= ACELP_32k ); + + last_br_flag = st->last_total_brate <= ACELP_24k40 || st->lp_noise < 15 || ( ( st->element_mode == IVAS_SCE ) && st->last_total_brate <= ACELP_32k ); + br_dtx_flag = 0; + } + + /* Initialization */ + if ( st->ini_frame == 0 ) + { + st->active_cnt = CNG_TYPE_HO; + + if ( ( st->codec_mode == MODE1 || st->Opt_AMR_WB ) && st->element_mode != IVAS_SCE && st->element_mode != IVAS_CPE_MDCT ) + { + st->cng_type = LP_CNG; + } + else + { + st->cng_type = FD_CNG; + } + } + + if ( st->Opt_DTX_ON && vad == 0 && + st->ini_frame > 2 && /* CNG coding starts after 3 frames */ + st->fd_cng_reset_flag == 0 && + st->last_core != AMR_WB_CORE && + st->Opt_AMR_WB == 0 ) + { + if ( st->last_core_brate > SID_2k40 && + st->last_total_brate_cng != -1 && + st->last_total_brate_cng != st->total_brate && + last_br_cng_flag ) + { + st->total_brate = st->last_total_brate_cng; + if ( !( st->total_brate == ACELP_7k20 && st->Opt_SC_VBR ) ) + { + st->Opt_SC_VBR = 0; + } + + st->rf_mode = st->last_rf_mode_cng; + st->bwidth = st->last_bwidth_cng; + st->codec_mode = st->last_codec_mode_cng; + } + + if ( st->last_core_brate <= SID_2k40 && + st->last_total_brate != st->total_brate && + last_br_flag ) + { + st->total_brate = st->last_total_brate; + if ( !( st->total_brate == ACELP_7k20 && st->Opt_SC_VBR ) ) + { + st->Opt_SC_VBR = 0; + } + + st->Opt_RF_ON = 0; + if ( st->rf_mode && st->rf_fec_offset > 0 && st->total_brate == ACELP_13k20 && st->bwidth != NB ) + { + st->Opt_RF_ON = 1; + } + st->rf_mode = st->Opt_RF_ON; + st->bwidth = st->last_bwidth; + + if ( st->element_mode > EVS_MONO ) + { + st->codec_mode = MODE1; + } + else + { + st->codec_mode = get_codec_mode( st->total_brate ); + } + } + } + + /*------------------------------------------------------------------------* + * Select SID or FRAME_NO_DATA frame if DTX is enabled + *------------------------------------------------------------------------*/ + + if ( st->dtx_sce_sba == 0 ) + { + br_dtx_flag = st->total_brate <= ACELP_24k40 || st->lp_noise < 15 || ( st->element_mode == IVAS_SCE && st->total_brate <= ACELP_32k ) || + st->element_mode == IVAS_CPE_DFT || ( st->element_mode == IVAS_CPE_MDCT && ( st->element_brate <= IVAS_64k || st->lp_noise < 15 ) ); + } + + if ( st->Opt_DTX_ON && vad == 0 && + st->ini_frame > 2 && /* CNG coding starts after 3 frames */ + + br_dtx_flag && + st->fd_cng_reset_flag == 0 ) + { + /* reset counter */ + st->active_cnt = 0; + + if ( st->Opt_AMR_WB ) + { + st->last_total_brate_cng = -1; + } + else + { + st->last_total_brate_cng = st->total_brate; + st->last_bwidth_cng = st->bwidth; + st->last_codec_mode_cng = st->codec_mode; + st->last_rf_mode_cng = st->rf_mode; + } + + if ( hDtxEnc->cnt_SID == 0 ) + { + /* this will be a SID frame */ + if ( st->Opt_AMR_WB ) + { + st->core_brate = SID_1k75; + } + else + { + st->core_brate = SID_2k40; + } + } + else + { + /* this will be a no data frame */ + st->core_brate = FRAME_NO_DATA; + } + + if ( st->core_brate == FRAME_NO_DATA && st->last_core != ACELP_CORE && !st->Opt_AMR_WB ) + { + /* force SID frame when switching from HQ core or AMR-WB IO mode into inactive frame in ACELP core when DTX is on */ + { + st->core_brate = SID_2k40; + } + } + + if ( ( st->last_core != ACELP_CORE || st->cng_type == FD_CNG ) && st->dtx_sce_sba == 1 ) + { + st->cng_type = FD_CNG; + if ( st->element_mode == EVS_MONO && ( st->total_brate == ACELP_9k60 || st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 || st->total_brate == ACELP_48k || st->total_brate == HQ_96k || st->total_brate == HQ_128k ) ) + { + st->codec_mode = MODE2; + } + } + else + { + if ( ( st->cng_type == FD_CNG && ( st->total_brate <= ACELP_24k40 || ( st->element_mode == IVAS_SCE && st->total_brate <= ACELP_32k ) ) ) || ( st->element_mode == IVAS_CPE_MDCT ) ) /* at highest bitrates, use exclusively LP_CNG */ + { + if ( st->element_mode == EVS_MONO && ( st->total_brate == ACELP_9k60 || st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 ) ) + { + st->codec_mode = MODE2; + } + } + else + { + st->cng_type = LP_CNG; + if ( st->codec_mode == MODE2 ) + { + st->hTdCngEnc->lp_cng_mode2 = 1; + } + st->codec_mode = MODE1; + } + } + + /* reset the bitstream (IVAS format signalling was already written) */ + if ( st->element_mode != IVAS_CPE_MDCT && st->hBstr != NULL ) + { + reset_indices_enc( st->hBstr, MAX_NUM_INDICES ); + } + } + + /*------------------------------------------------------------------------* + * Reset counters when in active frame (neither SID nor FRAME_NO_DATA frame) + *------------------------------------------------------------------------*/ + + if ( st->core_brate != SID_2k40 && st->core_brate != SID_1k75 && st->core_brate != FRAME_NO_DATA ) + { + if ( hDtxEnc != NULL ) + { + hDtxEnc->cnt_SID = 0; + + /* change SID update rate */ + /* first SID update is only 8 (3 in AMR-WB IO mode) frames after the active speech end */ + if ( !st->Opt_AMR_WB ) + { + hDtxEnc->max_SID = FIXED_SID_RATE; + } + else + { + hDtxEnc->max_SID = 3; + } + + if ( hDtxEnc->max_SID > hDtxEnc->interval_SID ) + { + hDtxEnc->max_SID = hDtxEnc->interval_SID; + } + + /* reset the counter of CNG frames for averaging */ + hDtxEnc->cng_cnt = 0; + } + + if ( st->active_cnt >= CNG_TYPE_HO && !st->Opt_AMR_WB && st->element_mode != IVAS_CPE_MDCT ) + { + if ( st->element_mode == IVAS_SCE ) + { + float lp_thresh, fd_thresh; + if ( st->Opt_DTX_ON && st->dtx_sce_sba == 1 ) + { + lp_thresh = 5.f; + fd_thresh = 2.f; + } + else + + { + lp_thresh = 10.f; + fd_thresh = 5.f; + } + + /*More conservative selection of LP-CNG for SCE*/ + if ( st->cng_type == LP_CNG && ( st->bckr_tilt_lt > lp_thresh ) ) + { + st->cng_type = FD_CNG; + } + else if ( st->cng_type == FD_CNG && ( st->bckr_tilt_lt < fd_thresh ) && ( st->lp_noise > 2.f ) ) + { + st->cng_type = LP_CNG; + } + } + else + { + if ( st->cng_type == LP_CNG && ( ( st->input_bwidth == NB && st->bckr_tilt_lt > 9.f ) || ( st->input_bwidth > NB && st->bckr_tilt_lt > 45.f ) ) ) + { + st->cng_type = FD_CNG; + } + else if ( st->cng_type == FD_CNG && ( ( st->input_bwidth == NB && st->bckr_tilt_lt < 2.f ) || ( st->input_bwidth > NB && st->bckr_tilt_lt < 10.f ) ) ) + { + st->cng_type = LP_CNG; + } + } + st->last_total_brate_cng = -1; + } + else if ( st->Opt_AMR_WB ) + { + st->cng_type = LP_CNG; + } + + st->active_cnt++; + + st->active_cnt = min( st->active_cnt, 200 ); + } + + /*------------------------------------------------------------------------* + * Update speech and background noise long-term energy + *------------------------------------------------------------------------*/ + + if ( hDtxEnc != NULL ) + { + hDtxEnc->frame_ener = 0.0f; + + if ( st->Opt_DTX_ON ) + { + hDtxEnc->frame_ener = sum2_f( speech, L_FRAME ); + + /* Active speech (voiced) */ + if ( st->clas == VOICED_CLAS ) + { + alpha = ALPHA_ENER_SLOW; + if ( hDtxEnc->frame_ener > hDtxEnc->lt_ener_voiced ) + { + alpha = ALPHA_ENER_FAST; + } + + hDtxEnc->lt_ener_voiced = alpha * hDtxEnc->lt_ener_voiced + ( 1.0f - alpha ) * hDtxEnc->frame_ener; + + hDtxEnc->VarDTX_cnt_voiced++; + if ( hDtxEnc->VarDTX_cnt_voiced > MIN_CNT ) + { + hDtxEnc->VarDTX_cnt_voiced = MIN_CNT; + } + } + + /* Background noise */ + else if ( !st->Opt_AMR_WB ) + { + alpha = ALPHA_ENER_SLOW; + if ( hDtxEnc->frame_ener < hDtxEnc->lt_ener_noise ) + { + alpha = ALPHA_ENER_FAST; + } + + hDtxEnc->lt_ener_noise = alpha * hDtxEnc->lt_ener_noise + ( 1.0f - alpha ) * hDtxEnc->frame_ener; + + hDtxEnc->VarDTX_cnt_noise++; + + if ( hDtxEnc->VarDTX_cnt_noise > MIN_CNT ) + { + hDtxEnc->VarDTX_cnt_noise = MIN_CNT; + } + } + } + } + + /* Update of the SID counter */ + update_SID_cnt( hDtxEnc, st->core_brate, st->Opt_AMR_WB ); + + /* Update encoded bandwidth */ + if ( st->Opt_DTX_ON && ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) + { + st->bwidth = st->last_bwidth; + if ( st->last_core_brate > SID_2k40 && st->last_total_brate_cng != -1 ) + { + st->bwidth = st->last_bwidth_cng; + } + + if ( st->Opt_RF_ON && st->total_brate == ACELP_13k20 && st->bwidth == NB ) + { + st->codec_mode = MODE1; + reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); + st->Opt_RF_ON = 0; + st->rf_mode = 0; + } + + if ( st->Opt_RF_ON && st->total_brate != ACELP_13k20 && st->hRF != NULL ) + { + reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); + st->Opt_RF_ON = 0; + st->rf_mode = 0; + } + + if ( st->codec_mode == MODE2 ) + { + int16_t n, bits_frame_nominal, tmpBandwidthMin; + + bits_frame_nominal = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + if ( FrameSizeConfig[n].frame_bits == bits_frame_nominal ) + { + break; + } + } + if ( n == FRAME_SIZE_NB ) + { + assert( !"Bitrate not supported: not part of EVS" ); + } + + tmpBandwidthMin = FrameSizeConfig[n].bandwidth_min; + + if ( st->rf_mode ) + { + tmpBandwidthMin = WB; + } + + check_bounds_s( &( st->bwidth ), tmpBandwidthMin, FrameSizeConfig[n].bandwidth_max ); + } + } + +#ifdef DEBUG_MODE_ACELP + { + int16_t tmp_s; + + tmp_s = (int16_t) st->bckr_tilt_lt; + dbgwrite( &( tmp_s ), sizeof( int16_t ), 1, st->L_frame, "./res/bckr_tilt.pcm" ); + tmp_s = (int16_t) st->lp_noise; + dbgwrite( &( tmp_s ), sizeof( int16_t ), 1, st->L_frame, "./res/lp_noise.pcm" ); + } +#endif + + return; +} + + +/*---------------------------------------------------------------------* + * update_SID_cnt() + * + * Update of the SID counter + *---------------------------------------------------------------------*/ + +static void update_SID_cnt( + DTX_ENC_HANDLE hDtxEnc, /* i/o: common DTX handle */ + const int32_t core_brate, /* i : core coder core bitrate */ + const int16_t Opt_AMR_WB /* i : AMR BW IO mode? */ +) +{ + float EstimatedSNR, delta; + + if ( core_brate == SID_2k40 || core_brate == SID_1k75 || core_brate == FRAME_NO_DATA ) + { + /* Adapt the SID interval */ + if ( hDtxEnc->var_SID_rate_flag && hDtxEnc->VarDTX_cnt_voiced == MIN_CNT && hDtxEnc->VarDTX_cnt_noise == MIN_CNT ) + { + EstimatedSNR = 10.0f * (float) log10( ( 0.01f + hDtxEnc->lt_ener_voiced ) / ( 0.01f + hDtxEnc->lt_ener_noise ) ); + if ( EstimatedSNR > SNR_H ) + { + hDtxEnc->interval_SID = INT_H; + } + else if ( EstimatedSNR < SNR_L ) + { + hDtxEnc->interval_SID = INT_L; + } + else + { + hDtxEnc->interval_SID = INT_L + (int16_t) ( ( INT_H - INT_L ) * ( EstimatedSNR - SNR_L ) / ( SNR_H - SNR_L ) ); + } + check_bounds_s( &( hDtxEnc->interval_SID ), INT_L, INT_H ); + + if ( !Opt_AMR_WB || hDtxEnc->max_SID != 3 ) + { + hDtxEnc->max_SID = hDtxEnc->interval_SID; /* change SID update rate */ + } + } + + if ( hDtxEnc->cnt_SID != 0 ) + { + /* Send SID frame only if long-term energy variation is above threshold */ + delta = 10.0f * (float) log10( ( 0.01f + hDtxEnc->lt_ener_noise ) / ( 0.01f + hDtxEnc->lt_ener_last_SID ) ); + if ( delta < LTE_VAR && hDtxEnc->VarDTX_cnt_voiced == MIN_CNT && hDtxEnc->VarDTX_cnt_noise == MIN_CNT ) + { + /* Send SID frame, and reset hDtxEnc->lt_ener_noise */ + hDtxEnc->lt_ener_noise = hDtxEnc->frame_ener; + } + } + else + { + /* If SID frame was sent, update long-term energy */ + hDtxEnc->lt_ener_last_SID = hDtxEnc->lt_ener_noise; + } + + hDtxEnc->cnt_SID++; + + if ( hDtxEnc->var_SID_rate_flag ) + { + if ( Opt_AMR_WB && hDtxEnc->max_SID == 3 && hDtxEnc->cnt_SID == 3 ) + { + /* set the size of CNG history buffer for averaging to 3 frames */ + hDtxEnc->cng_hist_size = 3; + } + else if ( hDtxEnc->max_SID != 3 && hDtxEnc->cnt_SID == DTX_HIST_SIZE ) + { + /* set the size of CNG history buffer for averaging to DTX_HIST_SIZE frames */ + /* be sure that DTX_HIST_SIZE >= INT_L */ + hDtxEnc->cng_hist_size = DTX_HIST_SIZE; + } + } + + if ( !hDtxEnc->var_SID_rate_flag && hDtxEnc->interval_SID > 1 ) + { + /* set the size of CNG history buffer for averaging to interval_SID frames */ + hDtxEnc->cng_hist_size = hDtxEnc->interval_SID; + if ( hDtxEnc->cng_hist_size > DTX_HIST_SIZE ) + { + hDtxEnc->cng_hist_size = DTX_HIST_SIZE; + } + } + + if ( hDtxEnc->cnt_SID >= hDtxEnc->max_SID ) + { + /* adaptive SID update interval */ + hDtxEnc->max_SID = hDtxEnc->interval_SID; + hDtxEnc->cnt_SID = 0; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * dtx_hangover_control() + * + * + *-------------------------------------------------------------------*/ + +void dtx_hangover_control( + Encoder_State *st, /* i/o: encoder state structure */ + const float lsp_new[M] /* i : current frame LSPs */ +) +{ + int16_t ptr; + int16_t i, j, m; + float tmp_lsp[max( DTX_HIST_SIZE, HO_HIST_SIZE ) * M]; + float tmp_enr[max( DTX_HIST_SIZE, HO_HIST_SIZE )]; + float tmp[max( DTX_HIST_SIZE, HO_HIST_SIZE ) * M]; + float enr_new; + float weights; + float enr_est, lsp_est[M]; + float Dlsp, Denr; + float lsf_tmp[M]; + float C[M]; + float max_val[2]; + int16_t max_idx[2]; + float ftmp; + float Dlsp_n2e, Denr_n2e; + + TD_CNG_ENC_HANDLE hTdCngEnc = st->hTdCngEnc; + + /* get current frame exc energy in log2 */ + enr_new = (float) ( log10( hTdCngEnc->ho_ener_circ[hTdCngEnc->ho_circ_ptr] ) / log10( 2.0f ) ); + + if ( enr_new < 0.0f ) + { + enr_new = 0.0f; + } + + /* get energies and lsps of hangover frames */ + ptr = hTdCngEnc->ho_circ_ptr - ( hTdCngEnc->burst_ho_cnt - 1 ); + if ( ptr < 0 ) + { + ptr += hTdCngEnc->ho_circ_size; + } + + for ( i = 0; i < hTdCngEnc->burst_ho_cnt - 1; i++ ) + { + mvr2r( &( hTdCngEnc->ho_lsp_circ[ptr * M] ), &( tmp_lsp[i * M] ), M ); + tmp_enr[i] = hTdCngEnc->ho_ener_circ[ptr]; + + ptr++; + if ( ptr == hTdCngEnc->ho_circ_size ) + { + ptr = 0; + } + } + + /* get estimated CNG energy and lsps assuming terminate hangover at current frame */ + ptr = hTdCngEnc->burst_ho_cnt - 2; + enr_est = W_DTX_HO[0] * tmp_enr[ptr]; + weights = W_DTX_HO[0]; + mvr2r( &( tmp_lsp[ptr * M] ), tmp, M ); + m = 1; + + for ( i = 1; i < hTdCngEnc->burst_ho_cnt - 2; i++ ) + { + if ( tmp_enr[ptr - i] < tmp_enr[ptr] * BUF_H_NRG && tmp_enr[ptr - i] > tmp_enr[ptr] * BUF_L_NRG ) + { + enr_est += W_DTX_HO[i] * tmp_enr[ptr - i]; + weights += W_DTX_HO[i]; + mvr2r( &tmp_lsp[( ptr - i ) * M], &tmp[m * M], M ); + m++; + } + } + + enr_est /= weights; + + if ( enr_est < 1.0f ) + { + enr_est = 1.0f; + } + + Denr_n2e = (float) fabs( enr_new - log10( enr_est ) / log10( 2.0f ) ); + + if ( m < 3 ) + { + enr_est = 0.8f * enr_est + ( 1 - 0.8f ) * hTdCngEnc->ho_ener_circ[hTdCngEnc->ho_circ_ptr]; + } + else + { + enr_est = 0.95f * enr_est + ( 1 - 0.95f ) * hTdCngEnc->ho_ener_circ[hTdCngEnc->ho_circ_ptr]; + } + + enr_est = (float) ( log10( enr_est ) / log10( 2.0f ) ); + + if ( enr_est < 0.0f ) + { + enr_est = 0.0f; + } + + set_f( max_val, 0.0f, 2 ); + set_s( max_idx, 0, 2 ); + + for ( i = 0; i < m; i++ ) + { + if ( st->L_frame == L_FRAME ) + { + lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_12k8 ); + ftmp = 6400.0f / ( M + 1 ); + C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); + } + else + { + lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_16k ); + ftmp = 8000.0f / ( M + 1 ); + C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); + } + + C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); + for ( j = 0; j < M - 1; j++ ) + { + C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); + } + + C[i] *= 0.0588235f; /* 0.0588235f = 1/(M+1) */ + + if ( C[i] > max_val[0] ) + { + max_val[1] = max_val[0]; + max_idx[1] = max_idx[0]; + max_val[0] = C[i]; + max_idx[0] = i; + } + else if ( C[i] > max_val[1] ) + { + max_val[1] = C[i]; + max_idx[1] = i; + } + } + + if ( m == 1 ) + { + mvr2r( tmp, lsp_est, M ); + } + else if ( m < 4 ) + { + for ( i = 0; i < M; i++ ) + { + lsp_est[i] = 0.0f; + for ( j = 0; j < m; j++ ) + { + lsp_est[i] += tmp[j * M + i]; + } + + lsp_est[i] -= tmp[max_idx[0] * M + i]; + lsp_est[i] /= (float) ( m - 1 ); + } + } + else + { + for ( i = 0; i < M; i++ ) + { + lsp_est[i] = 0.0f; + for ( j = 0; j < m; j++ ) + { + lsp_est[i] += tmp[j * M + i]; + } + + lsp_est[i] -= ( tmp[max_idx[0] * M + i] + tmp[max_idx[1] * M + i] ); + lsp_est[i] /= (float) ( m - 2 ); + } + } + + Dlsp_n2e = 0.0f; + for ( i = 0; i < M; i++ ) + { + Dlsp_n2e += (float) fabs( lsp_new[i] - lsp_est[i] ); + lsp_est[i] = 0.8f * lsp_est[i] + ( 1 - 0.8f ) * lsp_new[i]; + } + + /* get deviation of CNG parameters between newly estimated and current state memory */ + Dlsp = 0.0f; + max_val[0] = 0.0f; + + for ( i = 0; i < M; i++ ) + { + Dlsp += (float) fabs( st->hDtxEnc->lspCNG[i] - lsp_est[i] ); + if ( fabs( st->hDtxEnc->lspCNG[i] - lsp_est[i] ) > max_val[0] ) + { + max_val[0] = (float) fabs( st->hDtxEnc->lspCNG[i] - lsp_est[i] ); + } + } + Denr = (float) fabs( ( log10( hTdCngEnc->lp_ener + 0.1f ) / log10( 2.0f ) ) - enr_est ); + + /* make decision if DTX hangover can be terminated */ + st->hVAD->hangover_terminate_flag = 0; + + if ( ( Dlsp < 0.4f && Denr < 1.4f && max_val[0] < 0.1f && Dlsp_n2e < 0.4f && Denr_n2e < 1.2f && st->Opt_SC_VBR ) || + ( Dlsp < 0.4f && Denr < 0.8f && max_val[0] < 0.1f && Dlsp_n2e < 0.4f && Denr_n2e < 0.8f && !st->Opt_SC_VBR ) ) + { + st->hVAD->hangover_terminate_flag = 1; + } + + return; +} + + +/*-------------------------------------------------------------------* + * td_cng_enc_init() + * + * + *-------------------------------------------------------------------*/ + +void td_cng_enc_init( + TD_CNG_ENC_HANDLE hTdCngEnc, /* i/o: DTX/TD CNG data handle */ + const int16_t Opt_DTX_ON, /* i : flag indicating DTX operation */ + const int16_t max_bwidth /* i : maximum encoded bandwidth */ +) +{ + + hTdCngEnc->cng_seed = RANDOM_INITSEED; + hTdCngEnc->cng_ener_seed = RANDOM_INITSEED; + hTdCngEnc->cng_ener_seed1 = RANDOM_INITSEED; + hTdCngEnc->lp_ener = 0.0f; + hTdCngEnc->old_enr_index = -1; + hTdCngEnc->Enew = 0.0f; + + hTdCngEnc->lp_sp_enr = 0.0f; + hTdCngEnc->last_allow_cn_step = 0; + + hTdCngEnc->CNG_att = 0.0f; + + if ( Opt_DTX_ON ) + { + hTdCngEnc->cng_hist_ptr = -1; + set_f( hTdCngEnc->cng_lsp_hist, 0, DTX_HIST_SIZE * M ); + set_f( hTdCngEnc->cng_ener_hist, 0, DTX_HIST_SIZE ); + hTdCngEnc->ho_hist_ptr = -1; + hTdCngEnc->ho_sid_bw = 0; + set_f( hTdCngEnc->ho_lsp_hist, 0, HO_HIST_SIZE * M ); + set_f( hTdCngEnc->ho_ener_hist, 0, HO_HIST_SIZE ); + set_f( hTdCngEnc->ho_env_hist, 0, HO_HIST_SIZE * NUM_ENV_CNG ); + hTdCngEnc->ho_hist_size = 0; + hTdCngEnc->act_cnt = 0; + } + + set_s( hTdCngEnc->ho_16k_lsp, 0, HO_HIST_SIZE ); + hTdCngEnc->act_cnt2 = 0; + hTdCngEnc->num_ho = 0; + + hTdCngEnc->ho_circ_ptr = -1; + set_f( hTdCngEnc->ho_lsp_circ, 0, HO_HIST_SIZE * M ); + set_f( hTdCngEnc->ho_ener_circ, 0, HO_HIST_SIZE ); + set_f( hTdCngEnc->ho_env_circ, 0, HO_HIST_SIZE * NUM_ENV_CNG ); + hTdCngEnc->ho_circ_size = 0; + hTdCngEnc->burst_ho_cnt = 0; + hTdCngEnc->cng_buf_cnt = 0; + + + set_f( hTdCngEnc->lp_env, 0.0f, 20 ); + set_f( hTdCngEnc->cng_res_env, 0.0f, 20 * 8 ); + set_f( hTdCngEnc->exc_mem, 0.0f, 24 ); + set_f( hTdCngEnc->exc_mem1, 0.0f, 30 ); + set_f( hTdCngEnc->exc_mem2, 0.0f, 30 ); + set_f( hTdCngEnc->old_env, 0.0f, NUM_ENV_CNG ); + + /* SWB CNG/DTX */ + hTdCngEnc->last_wb_cng_ener = -6.02f; + hTdCngEnc->last_shb_cng_ener = -6.02f; + hTdCngEnc->mov_wb_cng_ener = -6.02f; + hTdCngEnc->mov_shb_cng_ener = -6.02f; + hTdCngEnc->shb_cng_ini_cnt = 1; + hTdCngEnc->shb_NO_DATA_cnt = 0; + hTdCngEnc->last_SID_bwidth = min( max_bwidth, SWB ); + hTdCngEnc->last_vad = 0; + hTdCngEnc->last_idx_ener = 0; + + return; +} + + +/*-------------------------------------------------------------------* + * dtx_enc_init() + * + * Initialize DTX parameters + *-------------------------------------------------------------------*/ + +void dtx_enc_init( + Encoder_State *st, /* i : Encoder state handle */ + const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */ + const int16_t interval_SID /* i : interval for SID update */ +) +{ + DTX_ENC_HANDLE hDtxEnc; + hDtxEnc = st->hDtxEnc; + + hDtxEnc->first_CNG = 0; + hDtxEnc->cnt_SID = 0; + hDtxEnc->max_SID = 2; + hDtxEnc->CNG_mode = -1; + mvr2r( st->lsp_old1, hDtxEnc->lspCNG, M ); + hDtxEnc->VarDTX_cnt_voiced = 0; + hDtxEnc->VarDTX_cnt_noise = 0; + hDtxEnc->lt_ener_voiced = 0.0f; + hDtxEnc->lt_ener_noise = 0.0f; + hDtxEnc->frame_ener = 0.0f; + hDtxEnc->lt_ener_last_SID = 0.0f; + hDtxEnc->last_CNG_L_frame = L_FRAME; + hDtxEnc->var_SID_rate_flag = var_SID_rate_flag; + hDtxEnc->last_active_brate = ACELP_7k20; + hDtxEnc->cng_cnt = 0; + + if ( hDtxEnc->var_SID_rate_flag ) + { + hDtxEnc->interval_SID = 12; + hDtxEnc->cng_hist_size = DTX_HIST_SIZE; + } + else + { + hDtxEnc->interval_SID = interval_SID; + if ( hDtxEnc->interval_SID >= DTX_HIST_SIZE ) + { + hDtxEnc->cng_hist_size = hDtxEnc->interval_SID; + } + } + + return; +} diff --git a/lib_enc/enc_acelp.c b/lib_enc/enc_acelp.c new file mode 100644 index 0000000000..07d63fe25b --- /dev/null +++ b/lib_enc/enc_acelp.c @@ -0,0 +1,1521 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "typedef.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void E_ACELP_codearithp( const float v[], uint32_t *n, uint32_t *ps, int16_t *p, const int16_t trackstep, const int16_t tracklen ); + + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define NB_MAX 8 + +/* + * E_ACELP_h_vec_corrx + * + * Parameters: + * h I: scaled impulse response + * vec I: vector to correlate with h[] + * track I: track to use + * sign I: sign vector + * rrixix I: correlation of h[x] with h[x] + * cor O: result of correlation (16 elements) + * + * Function: + * Calculate the correlations of h[] with vec[] for the specified track + * + * Returns: + * void + */ +static void acelp_h_vec_corr1( + float h[], + float vec[], + int16_t track, + float sign[], + float ( *rrixix )[16], + float cor[], + int16_t dn2_pos[], + int16_t nb_pulse ) +{ + int16_t i, j; + int16_t dn; + int16_t *dn2; + float *p0; + float s; + + dn2 = &dn2_pos[track * 8]; + p0 = rrixix[track]; + for ( i = 0; i < nb_pulse; i++ ) + { + dn = dn2[i]; + s = 0.0F; + /* L_SUBFR-dn */ + /* vec[dn] */ + for ( j = 0; j < ( L_SUBFR - dn ); j++ ) + { + s += h[j] * vec[dn + j]; + } + + cor[dn >> 2] = sign[dn] * s + p0[dn >> 2]; + } + + return; +} + + +static void acelp_h_vec_corr2( + float h[], + float vec[], + int16_t track, + float sign[], + float ( *rrixix )[16], + float cor[] ) +{ + int16_t i, j; + float *p0; + float s; + + p0 = rrixix[track]; + /* sign[track] */ + for ( i = 0; i < 16; i++ ) + { + s = 0.0F; + /* h[0], vec[track] */ + /* L_SUBFR-track */ + for ( j = 0; j < L_SUBFR - track; j++ ) + { + s += h[j] * vec[track + j]; + } + + cor[i] = s * sign[track] + p0[i]; + track += 4; + } + return; +} + + +/* + * acelp_2pulse_search + * + * Parameters: + * nb_pos_ix I: nb of pos for pulse 1 (1..8) + * track_x I: track of pulse 1 + * track_y I: track of pulse 2 + * ps I/O: correlation of all fixed pulses + * alp I/O: energy of all fixed pulses + * ix O: position of pulse 1 + * iy O: position of pulse 2 + * dn I: corr. between target and h[] + * dn2 I: vector of selected positions + * cor_x I: corr. of pulse 1 with fixed pulses + * cor_y I: corr. of pulse 2 with fixed pulses + * rrixiy I: corr. of pulse 1 with pulse 2 + * + * Function: + * Find the best positions of 2 pulses in a subframe + * + * Returns: + * void + */ +static void acelp_2pulse_search( + int16_t nb_pos_ix, + int16_t track_x, + int16_t track_y, + float *ps, + float *alp, + int16_t *ix, + int16_t *iy, + float dn[], + int16_t *dn2, + float cor_x[], + float cor_y[], + float ( *rrixiy )[256] ) +{ + int16_t x, x2, y, x_save = 0, y_save = 0, i, *pos_x; + float ps0, alp0; + float ps1, ps2, sq, sqk; + float alp1, alp2, alpk; + float *p1, *p2; + float s; + + /* x_save=y_save=0 */ + /* eight dn2 max positions per track */ + pos_x = &dn2[track_x << 3]; + /* save these to limit memory searches */ + ps0 = *ps; + alp0 = *alp; + + alpk = 1.0F; + sqk = -1.0F; + x2 = pos_x[0] >> 2; + if ( ( alp0 + cor_x[x2] + cor_y[0] + rrixiy[track_x][x2 << 4] ) < 0 ) + { + sqk = 1.0F; + } + + /* loop track 1 */ + for ( i = 0; i < nb_pos_ix; i++ ) + { + x = pos_x[i]; + x2 = x >> 2; + /* dn[x] has only nb_pos_ix positions saved */ + ps1 = ps0 + dn[x]; + alp1 = alp0 + cor_x[x2]; + p1 = cor_y; + p2 = &rrixiy[track_x][x2 << 4]; + for ( y = track_y; y < L_SUBFR; y += 4 ) + { + ps2 = ps1 + dn[y]; + alp2 = alp1 + ( *p1++ ) + ( *p2++ ); + + sq = ps2 * ps2; + + s = ( alpk * sq ) - ( sqk * alp2 ); + + if ( s > 0.0F ) + { + sqk = sq; + alpk = alp2; + y_save = y; + x_save = x; + } + } + } + + *ps = ps0 + dn[x_save] + dn[y_save]; + *alp = alpk; + *ix = x_save; + *iy = y_save; + + return; +} + + +/* + * E_ACELP_1pulse_search + * + * Parameters: + * track_x I: track of pulse 1 + * track_y I: track of pulse 2 + * ps I/O: correlation of all fixed pulses + * alp I/O: energy of all fixed pulses + * ix O: position of pulse 1 + * dn I: corr. between target and h[] + * cor_x I: corr. of pulse 1 with fixed pulses + * cor_y I: corr. of pulse 2 with fixed pulses + * + * Function: + * Find the best positions of 1 pulse in a subframe + * + * Returns: + * void + */ +static void E_ACELP_1pulse_search( + int16_t track_x, + int16_t track_y, + float *ps, + float *alp, + int16_t *ix, + float dn[], + float cor_x[], + float cor_y[] ) +{ + int16_t x, x_save = 0; + float ps0, alp0; + float ps1, sq, sqk; + float alp1, alpk; + float s; + + /* save these to limit memory searches */ + ps0 = *ps; + alp0 = *alp; + alpk = 1.0F; + sqk = -1.0F; + + if ( ( alp0 + cor_x[( track_x >> 2 )] ) < 0 ) + { + sqk = 1.0F; + } + for ( x = track_x; x < L_SUBFR; x += 4 ) + { + ps1 = ps0 + dn[x]; + alp1 = alp0 + cor_x[x >> 2]; + sq = ps1 * ps1; + s = ( alpk * sq ) - ( sqk * alp1 ); + + if ( s > 0.0F ) + { + sqk = sq; + alpk = alp1; + x_save = x; + } + } + if ( track_y != track_x ) + { + for ( x = track_y; x < L_SUBFR; x += 4 ) + { + ps1 = ps0 + dn[x]; + alp1 = alp0 + cor_y[x >> 2]; + sq = ps1 * ps1; + s = ( alpk * sq ) - ( sqk * alp1 ); + + if ( s > 0.0F ) + { + sqk = sq; + alpk = alp1; + x_save = x; + } + } + } + + *ps = ps0 + dn[x_save]; + *alp = alpk; + *ix = x_save; + + return; +} + + +/* + * acelp_pulsesign + * + * Parameters: + * cn I: residual after int32_t term prediction + * dn I: corr. between target and h[]. + * dn2 O: dn2[] = mix of dn[] and cn[] + * sign O: sign of pulse + * vec O: negative sign of pulse + * + * Function: + * Determine sign of each pulse position, store them in "sign" + * and change dn to all positive. + * Subframe size = L_SUBFR + * Returns: + * void + */ +void acelp_pulsesign( + const float cn[], + float dn[], + float dn2[], + float sign[], + float vec[], + const float alp ) +{ + int16_t i; + float val; + float s, cor; + + /* calculate energy for normalization of cn[] and dn[] */ + val = ( cn[0] * cn[0] ) + 1.0F; + cor = ( dn[0] * dn[0] ) + 1.0F; + for ( i = 1; i < L_SUBFR; i++ ) + { + val += ( cn[i] * cn[i] ); + cor += ( dn[i] * dn[i] ); + } + + s = (float) sqrt( cor / val ); + for ( i = 0; i < L_SUBFR; i++ ) + { + cor = ( s * cn[i] ) + ( alp * dn[i] ); + if ( cor >= 0.0F ) + { + sign[i] = 1.0F; + vec[i] = -1.0F; + dn2[i] = cor; /* dn2[] = mix of dn[] and cn[] */ + } + else + { + sign[i] = -1.0F; + vec[i] = 1.0F; + dn[i] = -dn[i]; /* modify dn[] according to the fixed sign */ + dn2[i] = -cor; /* dn2[] = mix of dn[] and cn[] */ + } + } + + return; +} + + +void acelp_findcandidates( + float dn2[], + int16_t dn2_pos[], + int16_t pos_max[], + const int16_t L_subfr, + const int16_t tracks ) +{ + int16_t i, k, j; + float *ps_ptr; + + /* &pos_max[0], &dn2_pos[0] */ + for ( i = 0; i < tracks; i++ ) + { + for ( k = 0; k < NB_MAX; k++ ) + { + ps_ptr = &dn2[i]; + for ( j = i + tracks; j < L_subfr; j += tracks ) + { + if ( dn2[j] > *ps_ptr ) + { + ps_ptr = &dn2[j]; + } + } + *ps_ptr = (float) k - NB_MAX; /* dn2 < 0 when position is selected */ + dn2_pos[i * 8 + k] = (int16_t) ( ps_ptr - dn2 ); + } + pos_max[i] = dn2_pos[i * 8]; + } + + return; +} + + +static void acelp_hbuf( + float *h_buf, + float **h, + float **h_inv, + const float *H ) +{ + int16_t i; + + *h = h_buf + L_SUBFR; + *h_inv = h_buf + ( 3 * L_SUBFR ); + for ( i = 0; i < L_SUBFR; i++ ) + { + ( *h )[-1 - i] = 0.0f; + ( *h_inv )[-1 - i] = 0.0f; + ( *h )[i] = H[i]; + ( *h_inv )[i] = -H[i]; + } + + return; +} + + +static void E_ACELP_corrmatrix( + float h[], + float sign[], + float vec[], + float rrixix[4][16], + float rrixiy[4][256] ) +{ + float *p0, *p1, *p2, *p3, *psign0, *psign1, *psign2, *psign3; + float *ptr_h1, *ptr_h2, *ptr_hf; + float cor; + int16_t i, k, pos; + + /* Compute rrixix[][] needed for the codebook search. */ + /* storage order --> i3i3, i2i2, i1i1, i0i0 */ + + /* Init pointers to last position of rrixix[] */ + p0 = &rrixix[0][16 - 1]; + p1 = &rrixix[1][16 - 1]; + p2 = &rrixix[2][16 - 1]; + p3 = &rrixix[3][16 - 1]; + + ptr_h1 = h; + cor = 0.0F; + for ( i = 0; i < 16; i++ ) + { + cor += ( *ptr_h1 ) * ( *ptr_h1 ); + ptr_h1++; + *p3-- = cor * 0.5F; + cor += ( *ptr_h1 ) * ( *ptr_h1 ); + ptr_h1++; + *p2-- = cor * 0.5F; + cor += ( *ptr_h1 ) * ( *ptr_h1 ); + ptr_h1++; + *p1-- = cor * 0.5F; + cor += ( *ptr_h1 ) * ( *ptr_h1 ); + ptr_h1++; + *p0-- = cor * 0.5F; + } + + /* Compute rrixiy[][] needed for the codebook search. */ + /* storage order --> i2i3, i1i2, i0i1, i3i0 */ + + pos = 256 - 1; + ptr_hf = h + 1; + for ( k = 0; k < 16; k++ ) + { + + p3 = &rrixiy[2][pos]; + p2 = &rrixiy[1][pos]; + p1 = &rrixiy[0][pos]; + p0 = &rrixiy[3][pos - 16]; + + cor = 0.0F; + ptr_h1 = h; + ptr_h2 = ptr_hf; + for ( i = k; i < 15; i++ ) + { + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p3 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p2 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p1 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p0 = cor; + + p3 -= ( 16 + 1 ); + p2 -= ( 16 + 1 ); + p1 -= ( 16 + 1 ); + p0 -= ( 16 + 1 ); + } + + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p3 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p2 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p1 = cor; + + pos -= 16; + ptr_hf += 4; + } + + /* storage order --> i3i0, i2i3, i1i2, i0i1 */ + + pos = 256 - 1; + ptr_hf = h + 3; + for ( k = 0; k < 16; k++ ) + { + + p3 = &rrixiy[3][pos]; + p2 = &rrixiy[2][pos - 1]; + p1 = &rrixiy[1][pos - 1]; + p0 = &rrixiy[0][pos - 1]; + + cor = 0.0F; + ptr_h1 = h; + ptr_h2 = ptr_hf; + for ( i = k + 1; i < 16; i++ ) + { + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p3 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p2 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p1 = cor; + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + ptr_h1++; + ptr_h2++; + *p0 = cor; + + p3 -= ( 16 + 1 ); + p2 -= ( 16 + 1 ); + p1 -= ( 16 + 1 ); + p0 -= ( 16 + 1 ); + } + + cor += ( *ptr_h1 ) * ( *ptr_h2 ); + *p3 = cor; + + pos--; + ptr_hf += 4; + } + + /* Modification of rrixiy[][] to take signs into account. */ + + p0 = &rrixiy[0][0]; + /* speed-up: 11% */ + p1 = &rrixiy[1][0]; + p2 = &rrixiy[2][0]; + p3 = &rrixiy[3][0]; + for ( i = 0; i < L_SUBFR; i += 4 ) + { + if ( sign[i + 0] < 0.0F ) + psign0 = &vec[1]; + else + psign0 = &sign[1]; + if ( sign[i + 1] < 0.0F ) + psign1 = &vec[2]; + else + psign1 = &sign[2]; + if ( sign[i + 2] < 0.0F ) + psign2 = &vec[3]; + else + psign2 = &sign[3]; + if ( sign[i + 3] < 0.0F ) + psign3 = &vec[0]; + else + psign3 = &sign[0]; + p0[0] = p0[0] * psign0[0]; + p0[1] = p0[1] * psign0[4]; + p0[2] = p0[2] * psign0[8]; + p0[3] = p0[3] * psign0[12]; + p0[4] = p0[4] * psign0[16]; + p0[5] = p0[5] * psign0[20]; + p0[6] = p0[6] * psign0[24]; + p0[7] = p0[7] * psign0[28]; + p0[8] = p0[8] * psign0[32]; + p0[9] = p0[9] * psign0[36]; + p0[10] = p0[10] * psign0[40]; + p0[11] = p0[11] * psign0[44]; + p0[12] = p0[12] * psign0[48]; + p0[13] = p0[13] * psign0[52]; + p0[14] = p0[14] * psign0[56]; + p0[15] = p0[15] * psign0[60]; + p0 += 16; + + p1[0] = p1[0] * psign1[0]; + p1[1] = p1[1] * psign1[4]; + p1[2] = p1[2] * psign1[8]; + p1[3] = p1[3] * psign1[12]; + p1[4] = p1[4] * psign1[16]; + p1[5] = p1[5] * psign1[20]; + p1[6] = p1[6] * psign1[24]; + p1[7] = p1[7] * psign1[28]; + p1[8] = p1[8] * psign1[32]; + p1[9] = p1[9] * psign1[36]; + p1[10] = p1[10] * psign1[40]; + p1[11] = p1[11] * psign1[44]; + p1[12] = p1[12] * psign1[48]; + p1[13] = p1[13] * psign1[52]; + p1[14] = p1[14] * psign1[56]; + p1[15] = p1[15] * psign1[60]; + p1 += 16; + + p2[0] = p2[0] * psign2[0]; + p2[1] = p2[1] * psign2[4]; + p2[2] = p2[2] * psign2[8]; + p2[3] = p2[3] * psign2[12]; + p2[4] = p2[4] * psign2[16]; + p2[5] = p2[5] * psign2[20]; + p2[6] = p2[6] * psign2[24]; + p2[7] = p2[7] * psign2[28]; + p2[8] = p2[8] * psign2[32]; + p2[9] = p2[9] * psign2[36]; + p2[10] = p2[10] * psign2[40]; + p2[11] = p2[11] * psign2[44]; + p2[12] = p2[12] * psign2[48]; + p2[13] = p2[13] * psign2[52]; + p2[14] = p2[14] * psign2[56]; + p2[15] = p2[15] * psign2[60]; + p2 += 16; + + p3[0] = p3[0] * psign3[0]; + p3[1] = p3[1] * psign3[4]; + p3[2] = p3[2] * psign3[8]; + p3[3] = p3[3] * psign3[12]; + p3[4] = p3[4] * psign3[16]; + p3[5] = p3[5] * psign3[20]; + p3[6] = p3[6] * psign3[24]; + p3[7] = p3[7] * psign3[28]; + p3[8] = p3[8] * psign3[32]; + p3[9] = p3[9] * psign3[36]; + p3[10] = p3[10] * psign3[40]; + p3[11] = p3[11] * psign3[44]; + p3[12] = p3[12] * psign3[48]; + p3[13] = p3[13] * psign3[52]; + p3[14] = p3[14] * psign3[56]; + p3[15] = p3[15] * psign3[60]; + p3 += 16; + } + + return; +} + +void E_ACELP_4tsearch( + float dn[], + const float cn[], + const float H[], + float code[], + PulseConfig *config, + int16_t ind[], + float y[] ) +{ + float sign[L_SUBFR], vec[L_SUBFR]; + float cor_x[16], cor_y[16], h_buf[4 * L_SUBFR]; + float rrixix[4][16]; + float rrixiy[4][256]; + float dn2[L_SUBFR]; + float psk, ps, alpk, alp = 0.0F; + int16_t codvec[NB_PULSE_MAX]; + int16_t pos_max[4]; + int16_t dn2_pos[8 * 4]; + int16_t ipos[NB_PULSE_MAX]; + float *p0, *p1, *p2, *p3; + float *h, *h_inv; + int16_t i, j, k, l, st, pos = 0, track; + int16_t index, iPulse; + float val; + float s; + int16_t restpulses; + + alp = config->alp; /* initial value for energy of all fixed pulses */ + + for ( k = 0; k < config->nb_pulse; k++ ) + { + codvec[k] = 0; + } + + /* Find sign for each pulse position. */ + acelp_pulsesign( cn, dn, dn2, sign, vec, alp ); + + /* Select the most important 8 position per track according to dn2[]. */ + acelp_findcandidates( dn2, dn2_pos, pos_max, L_SUBFR, NB_TRACK_FCB_4T ); + + /* Compute h_inv[i]. */ + acelp_hbuf( h_buf, &h, &h_inv, H ); + + /* Compute correlation matrices needed for the codebook search. */ + E_ACELP_corrmatrix( h, sign, vec, rrixix, rrixiy ); + + /* + * Deep first search: + * ------------------ + * 20 bits (4p): 4 iter x ((4x16)+(8x16)) = 768 tests + * 36 bits (8p): 4 iter x ((1x1)+(4x16)+(8x16)+(8x16)) = 1280 tests + * 52 bits (12p): 3 iter x ((1x1)+(1x1)+(4x16)+(6x16) + * +(8x16)+(8x16)) = 1248 tests + * 64 bits (16p): 2 iter x ((1x1)+(1x1)+(4x16)+(6x16) + * +(6x16)+(8x16)+(8x16)+(8x16)) = 1280 tests + */ + psk = -1.0; + alpk = 1.0; + /*Number of iterations*/ + for ( k = 0; k < config->nbiter; k++ ) + { + /* copy search order from hash-table */ + for ( l = 0; l < config->nb_pulse; l++ ) + { + ipos[l] = tipos[( k * 4 ) + l]; + } + + /* if all tracks do not have equal number of pulses */ + restpulses = config->nb_pulse & 3; + if ( restpulses ) + { + switch ( config->codetrackpos ) + { + case TRACKPOS_FIXED_FIRST: /* fixed track positions, starting from left */ + /* add tracks from left */ + for ( iPulse = 0; iPulse < restpulses; iPulse++ ) + { + ipos[config->nb_pulse - restpulses + iPulse] = iPulse; + } + /* Put the same track on the next position, because the 1-pulse search + * will access it to determine if this could be in any track. */ + ipos[config->nb_pulse] = ipos[config->nb_pulse - 1]; + break; + case TRACKPOS_FIXED_EVEN: /* fixed track positions, odd tracks */ + /* odd tracks, switch order for every iteration */ + ipos[config->nb_pulse - restpulses] = ( k << 1 ) & 2; /* 0 for even k, 2 for odd*/ + ipos[config->nb_pulse - restpulses + 1] = ipos[config->nb_pulse - restpulses] ^ 2; /* 2 for even k, 0 for odd*/ + break; + case TRACKPOS_FIXED_TWO: /* two tracks instead of four */ + /* Put the next track on the next position, because the 1-pulse search + * will access it to determine if this could be in any track. */ + ipos[config->nb_pulse] = ( ipos[config->nb_pulse - 1] + 1 ) & 3; + break; + default: /* one or three free track positions */ + /* copy an extra position from table - 1pulse search will access this */ + ipos[config->nb_pulse] = tipos[( k * 4 ) + config->nb_pulse]; + break; + } + } + if ( config->fixedpulses == 0 ) /* 1100, 11, 1110, 1111, 2211 */ + { + pos = 0; + ps = 0.0F; + alp = 0.0F; + for ( i = 0; i < L_SUBFR; i++ ) + { + vec[i] = 0; + } + } + else if ( config->fixedpulses == 2 ) /* 2222 and 3322 */ + { + /* first stage: fix 2 pulses */ + pos = 2; + + ind[0] = pos_max[ipos[0]]; + ind[1] = pos_max[ipos[1]]; + ps = dn[ind[0]] + dn[ind[1]]; + + /*ind[1]>>2 and ind[0]>>2 and save*/ + /* ipos[1] and ipos[0] and save*/ + alp = rrixix[ipos[0]][ind[0] >> 2] + rrixix[ipos[1]][ind[1] >> 2] + + rrixiy[ipos[0]][( ( ind[0] >> 2 ) << 4 ) + ( ind[1] >> 2 )]; + + if ( sign[ind[0]] < 0.0 ) + { + p0 = h_inv - ind[0]; + } + else + { + p0 = h - ind[0]; + } + if ( sign[ind[1]] < 0.0 ) + { + p1 = h_inv - ind[1]; + } + else + { + p1 = h - ind[1]; + } + /*ptx = &vec p1 and p0 already initialize*/ + vec[0] = p0[0] + p1[0]; + vec[1] = p0[1] + p1[1]; + vec[2] = p0[2] + p1[2]; + vec[3] = p0[3] + p1[3]; + for ( i = 4; i < L_SUBFR; i += 6 ) + { + vec[i] = p0[i] + p1[i]; + vec[i + 1] = p0[i + 1] + p1[i + 1]; + vec[i + 2] = p0[i + 2] + p1[i + 2]; + vec[i + 3] = p0[i + 3] + p1[i + 3]; + vec[i + 4] = p0[i + 4] + p1[i + 4]; + vec[i + 5] = p0[i + 5] + p1[i + 5]; + } + } + else /* 3333 and above */ + { + /* first stage: fix 4 pulses */ + pos = 4; + + ind[0] = pos_max[ipos[0]]; + ind[1] = pos_max[ipos[1]]; + ind[2] = pos_max[ipos[2]]; + ind[3] = pos_max[ipos[3]]; + ps = dn[ind[0]] + dn[ind[1]] + dn[ind[2]] + dn[ind[3]]; + + p0 = h - ind[0]; + if ( sign[ind[0]] < 0.0 ) + { + p0 = h_inv - ind[0]; + } + + p1 = h - ind[1]; + if ( sign[ind[1]] < 0.0 ) + { + p1 = h_inv - ind[1]; + } + + p2 = h - ind[2]; + if ( sign[ind[2]] < 0.0 ) + { + p2 = h_inv - ind[2]; + } + + p3 = h - ind[3]; + if ( sign[ind[3]] < 0.0 ) + { + p3 = h_inv - ind[3]; + } + /* pt =&vec; others already defined*/ + vec[0] = p0[0] + p1[0] + p2[0] + p3[0]; + for ( i = 1; i < L_SUBFR; i += 3 ) + { + vec[i] = p0[i] + p1[i] + p2[i] + p3[i]; + vec[i + 1] = p0[i + 1] + p1[i + 1] + p2[i + 1] + p3[i + 1]; + vec[i + 2] = p0[i + 2] + p1[i + 2] + p2[i + 2] + p3[i + 2]; + } + + alp = 0.0F; + alp += vec[0] * vec[0] + vec[1] * vec[1]; + alp += vec[2] * vec[2] + vec[3] * vec[3]; + + for ( i = 4; i < L_SUBFR; i += 6 ) + { + alp += vec[i] * vec[i]; + alp += vec[i + 1] * vec[i + 1]; + alp += vec[i + 2] * vec[i + 2]; + alp += vec[i + 3] * vec[i + 3]; + alp += vec[i + 4] * vec[i + 4]; + alp += vec[i + 5] * vec[i + 5]; + } + + alp *= 0.5F; + } + + /* other stages of 2 pulses */ + for ( j = pos, st = 0; j < config->nb_pulse; j += 2, st++ ) + { + if ( ( config->nb_pulse - j ) >= 2 ) /*pair-wise search*/ + { + /* Calculate correlation of all possible positions + * of the next 2 pulses with previous fixed pulses. + * Each pulse can have 16 possible positions. */ + acelp_h_vec_corr1( h, vec, ipos[j], sign, rrixix, cor_x, dn2_pos, config->nbpos[st] ); + acelp_h_vec_corr2( h, vec, ipos[j + 1], sign, rrixix, cor_y ); + + /* Find best positions of 2 pulses. */ + acelp_2pulse_search( config->nbpos[st], ipos[j], ipos[j + 1], &ps, &alp, &ind[j], &ind[j + 1], dn, dn2_pos, cor_x, cor_y, rrixiy ); + } + else /*single pulse search*/ + { + acelp_h_vec_corr2( h, vec, ipos[j], sign, rrixix, cor_x ); + acelp_h_vec_corr2( h, vec, ipos[j + 1], sign, rrixix, cor_y ); + E_ACELP_1pulse_search( ipos[j], ipos[j + 1], &ps, &alp, &ind[j], dn, cor_x, cor_y ); + } + if ( j < ( config->nb_pulse - 2 ) ) + { + p0 = h - ind[j]; + if ( sign[ind[j]] < 0.0 ) + { + p0 = h_inv - ind[j]; + } + + p1 = h - ind[j + 1]; + if ( sign[ind[j + 1]] < 0.0 ) + { + p1 = h_inv - ind[j + 1]; + } + + vec[0] += p0[0] + p1[0]; + vec[1] += p0[1] + p1[1]; + vec[2] += p0[2] + p1[2]; + vec[3] += p0[3] + p1[3]; + for ( i = 4; i < L_SUBFR; i += 6 ) + { + vec[i] += p0[i] + p1[i]; + vec[i + 1] += p0[i + 1] + p1[i + 1]; + vec[i + 2] += p0[i + 2] + p1[i + 2]; + vec[i + 3] += p0[i + 3] + p1[i + 3]; + vec[i + 4] += p0[i + 4] + p1[i + 4]; + vec[i + 5] += p0[i + 5] + p1[i + 5]; + } + } + } + + /* memorise the best codevector */ + ps = ps * ps; + s = ( alpk * ps ) - ( psk * alp ); + if ( psk < 0 ) + { + s = 1.0F; + } + if ( s > 0.0F ) + { + psk = ps; + alpk = alp; + for ( i = 0; i < config->nb_pulse; i++ ) + { + codvec[i] = ind[i]; + } + } + } + + /* Build the codeword, the filtered codeword and index of codevector, as well as store weighted correlations. */ + set_f( code, 0, L_SUBFR ); + set_f( y, 0, L_SUBFR ); + set_s( ind, -1, NPMAXPT * 4 ); + + for ( k = 0; k < config->nb_pulse; k++ ) + { + i = codvec[k]; /* read pulse position */ + val = sign[i]; /* read sign */ + + index = (int16_t) ( i / 4 ); /* pos of pulse (0..15) */ + track = i % 4; + if ( val > 0 ) + { + code[i] += 1.0f; + codvec[k] += ( 2 * L_SUBFR ); + } + else + { + code[i] -= 1.0f; + index += 16; + } + + i = track * NPMAXPT; + while ( ind[i] >= 0 ) + { + i++; + } + + ind[i] = index; + + p0 = h_inv - codvec[k]; + for ( i = 0; i < L_SUBFR; i++ ) + { + y[i] += *p0++; + } + } + + return; +} + + +/* + * E_ACELP_4t + * + * Parameters: + * dn I: corr. between target and h[]. + * cn I: residual after int32_t term prediction + * H I: impulse response of weighted synthesis filter (Q12) + * code O: algebraic (fixed) codebook excitation (Q9) + * y O: filtered fixed codebook excitation (Q9) + * nbbits I: 20, 36, 44, 52, 64, 72 or 88 bits + * mode I: speech mode + * _index O: index + * + * Function: + * 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook. + * 4 tracks x 16 positions per track = 64 samples. + * + * 20 bits 5 + 5 + 5 + 5 --> 4 pulses in a frame of 64 samples. + * 36 bits 9 + 9 + 9 + 9 --> 8 pulses in a frame of 64 samples. + * 44 bits 13 + 9 + 13 + 9 --> 10 pulses in a frame of 64 samples. + * 52 bits 13 + 13 + 13 + 13 --> 12 pulses in a frame of 64 samples. + * 64 bits 2 + 2 + 2 + 2 + 14 + 14 + 14 + 14 --> + * 16 pulses in a frame of 64 samples. + * 72 bits 10 + 2 + 10 + 2 + 10 + 14 + 10 + 14 --> + * 18 pulses in a frame of 64 samples. + * 88 bits 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 --> + * 24 pulses in a frame of 64 samples. + * + * All pulses can have two (2) possible amplitudes: +1 or -1. + * Each pulse can sixteen (16) possible positions. + * + * Returns: + * void + */ + +void E_ACELP_4t( + float dn[], + float cn[], + float H[], + float R[], + const int16_t acelpautoc, + float code[], + const int16_t cdk_index, + int16_t _index[], + const int16_t L_frame, + const int16_t last_L_frame, + const int32_t total_brate, + const int16_t i_subfr, + const int16_t cmpl_flag ) +{ + PulseConfig config; + int16_t ind[NPMAXPT * 4]; + float y[L_SUBFR]; + + config = PulseConfTable[cdk_index]; + + if ( cmpl_flag > 0 ) + { + config.nbiter = cmpl_flag; + } + + if ( L_frame != last_L_frame && total_brate == ACELP_24k40 && i_subfr < 5 * L_SUBFR ) + { + ( config.nbiter )--; + config.nbiter = max( config.nbiter, 1 ); + } + + if ( acelpautoc & 0x01 ) + { + E_ACELP_4tsearchx( dn, cn, R, code, &config, ind ); + } + else + { + E_ACELP_4tsearch( dn, cn, H, code, &config, ind, y ); + } + + E_ACELP_indexing( code, config, NB_TRACK_FCB_4T, _index ); + + return; +} + + +int16_t E_ACELP_indexing( + float code[], + PulseConfig config, + const int16_t num_tracks, + int16_t prm[] ) +{ + uint16_t track; + int16_t p[NB_TRACK_FCB_4T], wordcnt; + int16_t k; + uint16_t idxs[MAX_IDX_LEN], maxppos; + uint32_t s[NB_TRACK_FCB_4T], n[NB_TRACK_FCB_4T]; + int16_t maxp; + int16_t saved_bits; + + assert( num_tracks == NB_TRACK_FCB_4T ); + + saved_bits = 0; + + /* Code state of pulses of all tracks */ + wordcnt = ( config.bits + 15 ) >> 4; /* ceil(bits/16) */ + for ( k = 0; k < wordcnt; k++ ) + { + idxs[k] = 0; + } + if ( config.bits == 43 ) /* EVS pulse indexing */ + { + saved_bits = E_ACELP_code43bit( code, s, p, idxs ); + } + else + { + for ( track = 0; track < num_tracks; track++ ) + { + /* Code track of length 2^4 where step between tracks is 4. */ + E_ACELP_codearithp( code + track, n + track, s + track, p + track, num_tracks, 16 ); + } + fcb_pulse_track_joint( idxs, wordcnt, s, p, num_tracks ); + } + + /* check if we need to code track positions */ + switch ( config.codetrackpos ) + { + case TRACKPOS_FIXED_TWO: + /* Code position of consecutive tracks with single extra pulses */ + + /* Find track with one pulse less. */ + if ( p[0] == p[1] ) + { + /* Either 1100 or 0011 */ + if ( p[1] > p[2] ) + { + track = 0; /* 1100 */ + } + else + { + track = 2; /* 0011 */ + } + } + else + { + /* Either 0110 or 1001 */ + if ( p[0] < p[1] ) + { + track = 1; /* 0110 */ + } + else + { + track = 3; /* 1001 */ + } + } + /* Multiply by number of possible states (=shift by two) and + * add actual state. */ + longshiftleft( idxs, 2, idxs, wordcnt ); + longadd( idxs, &track, wordcnt, 1 ); + break; + case TRACKPOS_FREE_THREE: + /* Code position of track with one pulse less than others */ + + /* Find track with one pulse less. */ + maxp = p[0]; + maxppos = 0; + for ( track = 1; track < 4; track++ ) + { + if ( p[track] < maxp ) + { + maxppos = track; + break; + } + } + /* Multiply by number of possible states (=shift by two) and + * add actual state. */ + longshiftleft( idxs, 2, idxs, wordcnt ); + longadd( idxs, &maxppos, wordcnt, 1 ); + break; + case TRACKPOS_FREE_ONE: + /* Code position of track with one pulse more than others */ + + /* Find track with one pulse more. */ + maxp = p[0]; + maxppos = 0; + for ( track = 1; track < 4; track++ ) + { + if ( p[track] > maxp ) + { + maxppos = track; + break; + } + } + /* Multiply by number of possible states (=shift by two) and + * add actual state. */ + longshiftleft( idxs, 2, idxs, wordcnt ); + longadd( idxs, &maxppos, wordcnt, 1 ); + break; + case TRACKPOS_FIXED_EVEN: + case TRACKPOS_FIXED_FIRST: + break; + default: + printf( "Codebook mode not implemented." ); + assert( 0 ); /* mode not yet implemented*/ + break; + } + + /* cast to output buffer */ + for ( k = 0; k < wordcnt; k++ ) + { + prm[k] = idxs[k]; + } + + return ( saved_bits ); +} + + +/*--------------------------------------------------------------------------* + * E_ACELP_innovative_codebook + * + * Find innovative codebook. + *--------------------------------------------------------------------------*/ + +void E_ACELP_innovative_codebook( + const float *exc, /* i : pointer to the excitation frame */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : fraction of lag */ + const int16_t T0_res, /* i : pitch resolution */ + const float pitch_gain, /* i : adaptive codebook gain */ + const float tilt_code, /* i : tilt factor */ + ACELP_config *acelp_cfg, /* i/o: configuration of the ACELP */ + const int16_t i_subfr, /* i : subframe index */ + const float *Aq, /* i : quantized LPC coefficients */ + const float *h1, /* i : impulse response of weighted synthesis filter */ + const float *xn, /* i : Close-loop Pitch search target vector */ + const float *cn, /* i : Innovative codebook search target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + float *y2, /* o : zero-memory filtered algebraic excitation */ + const int16_t acelpautoc, /* i : autocorrelation mode enabled */ + int16_t **pt_indice, /* i/o: quantization indices pointer */ + float *code, /* o : innovative codebook */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t last_L_frame, /* i : length of the last frame */ + const int32_t total_brate /* i : total bitrate */ +) +{ + float xn2[L_SUBFR], cn2[L_SUBFR], dn[L_SUBFR], h2[L_SUBFR]; + float Rw2[L_SUBFR]; + int16_t i, k; + float pitch; + + pitch = (float) T0 + (float) T0_frac / (float) T0_res; + + /* Update target vector for ACELP codebook search */ + updt_tar( xn, xn2, y1, pitch_gain, L_SUBFR ); + + /* Include fixed-gain pitch contribution into impulse resp. h1[] */ + mvr2r( h1, h2, L_SUBFR ); + cb_shape( acelp_cfg->pre_emphasis, acelp_cfg->pitch_sharpening, acelp_cfg->phase_scrambling, acelp_cfg->formant_enh, acelp_cfg->formant_tilt, acelp_cfg->formant_enh_num, acelp_cfg->formant_enh_den, Aq, h2, tilt_code, pitch, L_SUBFR ); + + /* Correlation between target xn2[] and impulse response h1[] */ + if ( acelpautoc & 0x01 ) + { + corr_xh( h2, Rw2, h2, L_SUBFR ); + for ( k = 0; k < L_SUBFR; k++ ) + { + cn2[k] = xn2[k]; + for ( i = 0; i < k; i++ ) + { + cn2[k] -= cn2[i] * h2[k - i]; + } + } + + E_ACELP_toeplitz_mul( Rw2, cn2, dn ); + } + else + { + updt_tar( cn, cn2, &exc[i_subfr], pitch_gain, L_SUBFR ); + corr_xh( xn2, dn, h2, L_SUBFR ); + } + + /* Innovative codebook search */ + if ( acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR] < ACELP_FIXED_CDK_NB ) + { + E_ACELP_4t( dn, cn2, h2, Rw2, acelpautoc, code, acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR], *pt_indice, L_frame, last_L_frame, total_brate, i_subfr, 0 ); + } + else + { + assert( 0 ); + } + *pt_indice += 8; + /* Generate weighted code */ + set_f( y2, 0.0f, L_SUBFR ); + for ( i = 0; i < L_SUBFR; i++ ) + { + /* Code is sparse, so check which samples are non-zero */ + if ( code[i] != 0 ) + { + for ( k = 0; k < L_SUBFR - i; k++ ) + { + y2[i + k] += code[i] * h2[k]; + } + } + } + + /*-------------------------------------------------------* + * - Add the fixed-gain pitch contribution to code[]. * + *-------------------------------------------------------*/ + + cb_shape( acelp_cfg->pre_emphasis, acelp_cfg->pitch_sharpening, acelp_cfg->phase_scrambling, acelp_cfg->formant_enh, acelp_cfg->formant_tilt, acelp_cfg->formant_enh_num, acelp_cfg->formant_enh_den, Aq, code, tilt_code, pitch, L_SUBFR ); + + return; +} + + +/*--------------------------------------------------------------------------* + * E_ACELP_codearithp + * + * Fixed bit-length arithmetic coding of pulses + * v - (input) pulse vector + * s - (output) encoded state + * n - (output) range of possible states (0...n-1) + * p - (output) number of pulses found + * len - (input) length of pulse vector + * trackstep - (input) step between tracks + *--------------------------------------------------------------------------*/ + +static void E_ACELP_codearithp( + const float v[], + uint32_t *n, + uint32_t *ps, + int16_t *p, + const int16_t trackstep, + const int16_t tracklen ) +{ + int16_t k, h, t, pos[9], sig[9], posno, tmp, L_subfr; + uint32_t s; + + posno = 0; + L_subfr = trackstep * tracklen; + + for ( k = t = 0; k < L_subfr; k += trackstep, t++ ) + { + tmp = ( v[k] > 0 ? 1 : -1 ); /* sign */ + for ( h = 0; h < v[k] * tmp; h++ ) + { + pos[posno] = t; + sig[posno] = tmp; + posno++; + if ( posno > 9 ) + { + break; + } + } + if ( posno >= 9 ) + { + break; + } + } + *p = posno; + + s = 0; + for ( k = 0; k < posno; k++ ) + { + /* check if next position is the same as this one */ + if ( ( k == posno - 1 ) || ( pos[k] != pos[k + 1] ) ) + { + /* next position is not the same (or we are at the last position) + * -> save sign */ + s <<= 1; + if ( sig[k] < 0 ) + { + s++; + } + } + s += pulsestostates[pos[k]][k]; + } + *ps = s; + if ( posno ) + { + *n = pulsestostates[tracklen][posno - 1]; + } + else + { + *n = 0; + } + + return; +} + + +void fcb_pulse_track_joint( + uint16_t *idxs, + const int16_t wordcnt, + uint32_t *index_n, + const int16_t *pulse_num, + const int16_t track_num ) +{ + int16_t hi_to_low[10] = { 0, 0, 0, 3, 9, 5, 3, 1, 8, 8 }; + + uint32_t index, indx_tmp; + uint32_t index_mask; + int16_t indx_flag, indx_flag_1; + int16_t track, track_num1, pulse_num0, pulse_num1; + int16_t indx_flag_2; + + indx_flag = 0; + indx_flag_1 = 0; + indx_flag_2 = 0; + for ( track = 0; track < track_num; track++ ) + { + indx_flag += ( pulse_num[track] >> 2 ); + indx_flag_1 += ( pulse_num[track] >> 1 ); + indx_flag_2 += ( pulse_num[track] >> 3 ); + } + + if ( indx_flag_2 >= 1 ) + { + hi_to_low[7] = 9; + index_mask = 0xffffff; + } + else + { + hi_to_low[7] = 1; + if ( indx_flag >= track_num ) + { + hi_to_low[4] = 9; + index_mask = 0xffff; + } + else + { + hi_to_low[4] = 1; + index_mask = 0xff; + } + } + + if ( indx_flag_1 >= track_num ) + { + indx_tmp = 0; + index = index_n[0] >> low_len[pulse_num[0]]; + for ( track = 1; track < track_num; track++ ) + { + pulse_num0 = pulse_num[track - 1]; + pulse_num1 = pulse_num[track]; + indx_tmp = index_n[track] >> low_len[pulse_num1]; + index = index * indx_fact[pulse_num1] + indx_tmp; + + index_n[track - 1] = ( index_n[track - 1] & low_mask[pulse_num0] ) + ( ( index << low_len[pulse_num0] ) & index_mask ); + index = index >> hi_to_low[pulse_num0]; + } + track_num1 = track_num - 1; + pulse_num1 = pulse_num[track_num1]; + index_n[track_num1] = ( ( index_n[track_num1] & low_mask[pulse_num1] ) + ( index << low_len[pulse_num1] ) ) & index_mask; + index = index >> hi_to_low[pulse_num1]; + if ( indx_flag >= track_num ) + { + if ( indx_flag_2 >= 1 ) + { + idxs[0] = index_n[0] & 0xffff; + idxs[1] = ( ( index_n[1] << 8 ) + ( index_n[0] >> 16 ) ) & 0xffff; + idxs[2] = ( index_n[1] >> 8 ) & 0xffff; + idxs[3] = index_n[2] & 0xffff; + idxs[4] = ( ( index_n[3] << 8 ) + ( index_n[2] >> 16 ) ) & 0xffff; + idxs[5] = ( index_n[3] >> 8 ) & 0xffff; + for ( track = 6; track < wordcnt; track++ ) + { + idxs[track] = index & 0xffff; + index = index >> 16; + } + } + else + { + for ( track = 0; track < track_num; track++ ) + { + idxs[track] = index_n[track] & 0xffff; + } + for ( track = track_num; track < wordcnt; track++ ) + { + idxs[track] = index & 0xffff; + index = index >> 16; + } + } + } + else + { + idxs[0] = ( ( index_n[0] << 8 ) + index_n[1] ) & 0xffff; + idxs[1] = ( ( index_n[2] << 8 ) + index_n[3] ) & 0xffff; + for ( track = 2; track < wordcnt; track++ ) + { + idxs[track] = index & 0xffff; + index = index >> 16; + } + } + } + else + { + index = index_n[0]; + for ( track = 1; track < 4; track++ ) + { + pulse_num1 = pulse_num[track]; + index = ( index << index_len[pulse_num1] ) + index_n[track]; + } + for ( track = 0; track < wordcnt; track++ ) + { + idxs[track] = index & 0xffff; + index = index >> 16; + } + } + + return; +} diff --git a/lib_enc/enc_acelp_tcx_main.c b/lib_enc/enc_acelp_tcx_main.c new file mode 100644 index 0000000000..e087c8cede --- /dev/null +++ b/lib_enc/enc_acelp_tcx_main.c @@ -0,0 +1,134 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * enc_acelp_tcx_main() + * + * encoder function for coding ACELP/TCX + *--------------------------------------------------------------------*/ + +void enc_acelp_tcx_main( + Encoder_State *st, /* i/o: encoder state structure */ + const float new_samples[], /* i : new samples */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ + const float lsp_new[M], /* i : LSPs at the end of the frame */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ + float *voice_factors, /* o : voicing factors */ + float pitch_buf[], /* o : floating pitch for each subframe */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ + float *ptr_bwe_exc; /* pointer to BWE excitation signal in the current frame */ + + wmops_sub_start( "enc_acelp_tcx_main" ); + + ptr_bwe_exc = old_bwe_exc + PIT16k_MAX * 2; + + if ( st->last_core == ACELP_CORE ) + { + set_f( old_bwe_exc + PIT16k_MAX * 2, 0.f, ( ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 ); + mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); + } + else + { + set_f( old_bwe_exc, 0.f, ( ( L_FRAME16k + 1 ) + L_SUBFR16k + PIT16k_MAX ) * 2 ); + } + + /* Guided ACELP PLC */ + if ( st->hPlcExt ) + { + gPLC_encInfo( st->hPlcExt, st->total_brate, st->bwidth, st->clas, st->coder_type ); + } + + if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) + { + /* Run Core Coder */ + if ( st->tcxonly == 0 ) + { + core_encode_openloop( st, Aw, lsp_new, lsp_mid, pitch_buf, voice_factors, ptr_bwe_exc, vad_hover_flag ); + } + else + { + core_encode_twodiv( st, new_samples, Aw, vad_hover_flag ); + } + + /* Apply non linearity to the SHB excitation */ + if ( st->core == ACELP_CORE && st->igf ) + { + non_linearity( ptr_bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); + + /* update the old_BWE_exc memory */ + mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); + } + else + { + set_f( st->hBWE_TD->old_bwe_exc_extended, 0, NL_BUFF_OFFSET ); + set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); /* reset old non_linear exc during igf frames */ + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + } + } + else + { + /* Run SID Coder */ + if ( st->core_brate == SID_2k40 ) + { + FdCng_encodeSID( st ); + } + + /* Generate Comfort Noise */ + generate_comfort_noise_enc( st ); + + /* Update Core Encoder */ + core_encode_update_cng( st, st->hFdCngEnc->hFdCngCom->timeDomainBuffer, st->hFdCngEnc->hFdCngCom->A_cng, Aw ); + } + + /* coreSwitching update of Mode 1 parameters in the last frame */ + st->last_coder_type = st->coder_type; + + wmops_sub_end(); + return; +} diff --git a/lib_enc/enc_acelpx.c b/lib_enc/enc_acelpx.c new file mode 100644 index 0000000000..6c8e783d76 --- /dev/null +++ b/lib_enc/enc_acelpx.c @@ -0,0 +1,501 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "typedef.h" +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_enc.h" +#include "wmops.h" + + +/* Iterations: nb_pos_ix*16 */ +static void E_ACELP_2pulse_searchx( + const int16_t nb_pos_ix, + const int16_t track_x, + const int16_t track_y, + float *R, + float *ps, + float *alp, + int16_t *ix, + int16_t *iy, + float dn[], + int16_t *dn2, + float cor[], + float sign[] ) +{ + int16_t i; + int16_t x, y, *pos_x, x_save = 0, y_save = 0; + float ps0, alp0, alp1, ps1, alp2, ps2, sq, s, sqk, alpk, *pR, sgnx, *pRx, *pRy, sign_x, sign_y; + + /* x_save=y_save=0 */ + /* eight dn2 max positions per track */ + pos_x = &dn2[track_x << 3]; + /* save these to limit memory searches */ + ps0 = *ps; + alp0 = *alp + 2.0f * R[0]; + + sqk = -1.0F; + alpk = 1.0F; + + x = pos_x[0]; + sgnx = sign[track_y]; + if ( sign[x] < 0 ) + { + sgnx = -sgnx; + } + if ( ( alp0 + ( cor[x] * sign[x] ) + ( cor[track_y] * sign[track_y] ) + ( R[track_y - x] * sgnx ) ) < 0.0F ) + { + sqk = 1.0F; + } + + /* loop track 1 */ + for ( i = 0; i < nb_pos_ix; i++ ) + { + x = pos_x[i]; + sgnx = sign[x]; + /* dn[x] has only nb_pos_ix positions saved */ + ps1 = ps0 + dn[x]; + alp1 = alp0 + 2 * sgnx * cor[x]; + pR = R - x; + + for ( y = track_y; y < L_SUBFR; y += 4 ) + { + ps2 = ps1 + dn[y]; + alp2 = alp1 + 2.0f * sign[y] * ( cor[y] + sgnx * pR[y] ); + sq = ps2 * ps2; + + s = ( alpk * sq ) - ( sqk * alp2 ); + if ( s > 0.0F ) + { + sqk = sq; + alpk = alp2; + y_save = y; + x_save = x; + } + } + } + /* Update numerator */ + *ps = ps0 + dn[x_save] + dn[y_save]; + /* Update denominator */ + *alp = alpk; + + /* Update product of autocorrelation and already fixed pulses. with the + * two newly found ones */ + pRx = R - x_save; + pRy = R - y_save; + sign_x = sign[x_save]; + sign_y = sign[y_save]; + + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] += pRx[i] * sign_x + pRy[i] * sign_y; + } + + *ix = x_save; + *iy = y_save; + if ( ( ( x_save & 3 ) != track_x ) || ( ( y_save & 3 ) != track_y ) ) + { + /* sanity check */ + assert( 0 ); + } + + return; +} + +static void E_ACELP_1pulse_searchx( + int16_t track_x, + int16_t track_y, + float *R, + float *ps, + float *alp, + int16_t *ix, + float dn[], + float cor[], + float sign[] ) +{ + int16_t x, x_save = 0; + float ps0, alp0; + float ps1, sq, sqk; + float alp1, alpk; + float s; + + /* save these to limit memory searches */ + ps0 = *ps; + alp0 = *alp + R[0]; + sqk = -1.0F; + alpk = 1.0F; + + if ( ( alp0 + ( cor[track_x] * sign[track_x] ) ) < 0 ) + { + sqk = 1.0F; + } + + x_save = track_x; + for ( x = track_x; x < L_SUBFR; x += 4 ) + { + ps1 = ps0 + dn[x]; + alp1 = alp0 + 2 * sign[x] * cor[x]; + sq = ps1 * ps1; + s = ( alpk * sq ) - ( sqk * alp1 ); + if ( s > 0.0F ) + { + sqk = sq; + alpk = alp1; + x_save = x; + } + } + + if ( track_y != track_x ) + { + for ( x = track_y; x < L_SUBFR; x += 4 ) + { + ps1 = ps0 + dn[x]; + alp1 = alp0 + 2 * sign[x] * cor[x]; + sq = ps1 * ps1; + s = ( alpk * sq ) - ( sqk * alp1 ); + if ( s > 0.0F ) + { + sqk = sq; + alpk = alp1; + x_save = x; + } + } + } + + *ps = ps0 + dn[x_save]; + *alp = alpk; + *ix = x_save; + + return; +} + + +/* Autocorrelation method for searching pulse positions effectively + * Algorithm is identical to traditional covariance method. */ +void E_ACELP_4tsearchx( + float dn[], + const float cn[], + float Rw[], + float code[], + PulseConfig *config, + int16_t ind[] ) +{ + float sign[L_SUBFR], vec[L_SUBFR]; + float cor[L_SUBFR]; + float R_buf[2 * L_SUBFR - 1], *R; + float dn2[L_SUBFR]; + float psk = 0.0F, ps2k, ps, ps2, alpk, alp = 0.0F; + int16_t codvec[NB_PULSE_MAX]; + int16_t pos_max[4]; + int16_t dn2_pos[8 * 4]; + int16_t ipos[NB_PULSE_MAX]; + float *p0; + int16_t i, j, k, l, st, pos = 0, index, track; + int16_t iPulse; + float val; + float s; + int16_t restpulses; + + alp = config->alp; + for ( k = 0; k < config->nb_pulse; k++ ) + { + codvec[k] = ( k & 3 ); + } + + set_f( cor, 0.0f, L_SUBFR ); + + /* Set up autocorrelation vector */ + R = R_buf + L_SUBFR - 1; + R[0] = Rw[0]; + for ( k = 1; k < L_SUBFR; k++ ) + { + R[k] = R[-k] = Rw[k]; + } + + /* Find sign for each pulse position. */ + acelp_pulsesign( cn, dn, dn2, sign, vec, alp ); + + /* Select the most important 8 position per track according to dn2[]. */ + acelp_findcandidates( dn2, dn2_pos, pos_max, L_SUBFR, NB_TRACK_FCB_4T ); + + /* + * Deep first search: + * ------------------ + * 20 bits (4p): 4 iter x ((4x16)+(8x16)) = 768 tests + * 36 bits (8p): 4 iter x ((1x1)+(4x16)+(8x16)+(8x16)) = 1280 tests + * 52 bits (12p): 3 iter x ((1x1)+(1x1)+(4x16)+(6x16) + * +(8x16)+(8x16)) = 1248 tests + * 64 bits (16p): 2 iter x ((1x1)+(1x1)+(4x16)+(6x16) + * +(6x16)+(8x16)+(8x16)+(8x16)) = 1280 tests + */ + ps2k = -1.0; + alpk = 1000.0; + /*Number of iterations*/ + for ( k = 0; k < config->nbiter; k++ ) + { + /* copy search order from hash-table */ + for ( l = 0; l < config->nb_pulse; l++ ) + { + ipos[l] = tipos[( k * 4 ) + l]; + } + + /* if all tracks do not have equal number of pulses */ + restpulses = config->nb_pulse & 3; + if ( restpulses ) + { + switch ( config->codetrackpos ) + { + case TRACKPOS_FIXED_FIRST: /* fixed track positions, starting from left */ + /* add tracks from left */ + for ( iPulse = 0; iPulse < restpulses; iPulse++ ) + { + ipos[config->nb_pulse - restpulses + iPulse] = iPulse; + } + /* Put the same track on the next position, because the 1-pulse search + * will access it to determine if this could be in any track. */ + ipos[config->nb_pulse] = ipos[config->nb_pulse - 1]; + break; + case TRACKPOS_FIXED_EVEN: /* fixed track positions, odd tracks */ + /* odd tracks, switch order for every iteration */ + ipos[config->nb_pulse - restpulses] = ( k << 1 ) & 2; /* 0 for even k, 2 for odd*/ + ipos[config->nb_pulse - restpulses + 1] = ipos[config->nb_pulse - restpulses] ^ 2; /* 2 for even k, 0 for odd*/ + break; + case TRACKPOS_FIXED_TWO: /* two tracks instead of four */ + /* Put the next track on the next position, because the 1-pulse search + * will access it to determine if this could be in any track. */ + ipos[config->nb_pulse] = ( ipos[config->nb_pulse - 1] + 1 ) & 3; + break; + default: /* one or three free track positions */ + /* copy an extra position from table - 1pulse search will access this */ + ipos[config->nb_pulse] = tipos[( k * 4 ) + config->nb_pulse]; + break; + } + } + if ( config->fixedpulses == 0 ) /* 1100, 11, 1110, 1111, 2211 */ + { + pos = 0; + ps = 0.0F; + alp = 0.0F; + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] = 0; + } + } + else if ( config->fixedpulses == 2 ) /* 2222 and 3322 */ + { + /* --- first stage: fix 2 pulses --- */ + /* index to first non-fixed position */ + pos = 2; + + /* set fixed positions */ + ind[0] = pos_max[ipos[0]]; + ind[1] = pos_max[ipos[1]]; + + /* correlation of fixed part with residual */ + ps = dn[ind[0]] + dn[ind[1]]; + + /* multiplication of autocorrelation with signed fixed pulses */ + /* first pulse */ + p0 = R - ind[0]; + if ( sign[ind[0]] > 0 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] = *p0; + p0++; + } + } + else + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] = -*p0; + p0++; + } + } + /* second pulse */ + p0 = R - ind[1]; + if ( sign[ind[1]] > 0 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] += *p0; + p0++; + } + } + else + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] -= *p0; + p0++; + } + } + + /* normalisation contribution of fixed part */ + alp = sign[ind[0]] * cor[ind[0]] + sign[ind[1]] * cor[ind[1]]; + } + else /* if (config->fixedpulses == 4) */ /* 3333 and above */ + { + /* first stage: fix 4 pulses */ + pos = 4; + + ind[0] = pos_max[ipos[0]]; + ind[1] = pos_max[ipos[1]]; + ind[2] = pos_max[ipos[2]]; + ind[3] = pos_max[ipos[3]]; + + /* correlation of fixed part with residual */ + ps = dn[ind[0]] + dn[ind[1]] + dn[ind[2]] + dn[ind[3]]; + + /* multiplication of autocorrelation with signed fixed pulses */ + /* first pulse */ + p0 = R - ind[0]; + if ( sign[ind[0]] > 0 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] = *p0; + p0++; + } + } + else + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] = -*p0; + p0++; + } + } + /* pulses 1..3 */ + for ( j = 1; j < 4; j++ ) + { + p0 = R - ind[j]; + if ( sign[ind[j]] > 0 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] += *p0; + p0++; + } + } + else + { + for ( i = 0; i < L_SUBFR; i++ ) + { + cor[i] -= *p0; + p0++; + } + } + } + + /* normalisation contribution of fixed part */ + alp = sign[ind[0]] * cor[ind[0]] + sign[ind[1]] * cor[ind[1]] + sign[ind[2]] * cor[ind[2]] + sign[ind[3]] * cor[ind[3]]; + } + + /* other stages of 2 pulses */ + for ( j = pos, st = 0; j < config->nb_pulse; j += 2, st++ ) + { + if ( ( config->nb_pulse - j ) >= 2 ) + { + /*pair-wise search*/ + + /* Calculate correlation of all possible positions + * of the next 2 pulses with previous fixed pulses. + * Each pulse can have 16 possible positions. */ + + E_ACELP_2pulse_searchx( config->nbpos[st], ipos[j], ipos[j + 1], R, &ps, &alp, &ind[j], &ind[j + 1], dn, dn2_pos, cor, sign ); + } + else + { + /*single pulse search*/ + E_ACELP_1pulse_searchx( ipos[j], ipos[j + 1], R, &ps, &alp, &ind[j], dn, cor, sign ); + } + } + + /* memorise the best codevector */ + ps2 = ps * ps; + s = ( alpk * ps2 ) - ( ps2k * alp ); + if ( s > 0.0F ) + { + ps2k = ps2; + psk = ps; + alpk = alp; + for ( i = 0; i < config->nb_pulse; i++ ) + { + codvec[i] = ind[i]; + } + } + } + + /* Store weighted energy of code, build the codeword and index of codevector. */ + set_f( code, 0, L_SUBFR ); + set_s( ind, -1, NPMAXPT * 4 ); + + for ( k = 0; k < config->nb_pulse; k++ ) + { + i = codvec[k]; /* read pulse position */ + val = sign[i]; /* read sign */ + + index = i / 4; /* pos of pulse (0..15) */ + track = i % 4; + if ( val * psk > 0 ) + { + code[i] += 1.0f; + codvec[k] += ( 2 * L_SUBFR ); + } + else + { + code[i] -= 1.0f; + index += 16; + } + + i = track * NPMAXPT; + while ( ind[i] >= 0 ) + { + i++; + } + + ind[i] = index; + } + + return; +} diff --git a/lib_enc/enc_amr_wb.c b/lib_enc/enc_amr_wb.c new file mode 100644 index 0000000000..2e88776d8f --- /dev/null +++ b/lib_enc/enc_amr_wb.c @@ -0,0 +1,241 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * encod_amr_wb() + * + * Encode excitation signal in AMR-WB IO mode + *-------------------------------------------------------------------*/ + +void encod_amr_wb( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : 12k8 Lp coefficient */ + const float *res, /* i : residual signal */ + float *syn, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + int16_t hf_gain[NB_SUBFR], /* o : decoded HF gain */ + const float *speech16k /* i : input speech @16kHz */ +) +{ + float xn[L_SUBFR]; /* Target vector for pitch search */ + float xn2[L_SUBFR]; /* Target vector for codebook search */ + float cn[L_SUBFR]; /* Target vector in residual domain */ + float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ + float code[L_SUBFR]; /* Fixed codebook excitation */ + float y1[L_SUBFR]; /* Filtered adaptive excitation */ + float y2[L_SUBFR]; /* Filtered algebraic excitation */ + float gain_pit; /* Pitch gain */ + float voice_fac; /* Voicing factor */ + float gain_code; /* Gain of code */ + float gain_inov; /* inovation gain */ + int16_t i, i_subfr; /* tmp variables */ + int16_t T_op[3]; /* pitch period for quantization */ + int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ + int16_t T0_min, T0_max; /* pitch variables */ + float *pt_pitch; /* pointer to floating pitch buffer */ + float g_corr[6]; /* ACELP correl, values + gain pitch */ + int16_t clip_gain; /* LSF clip gain */ + const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector*/ + int16_t unbits = 0; + float norm_gain_code; + int16_t pitch_limit_flag; + int16_t lp_select, lp_flag; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + pitch_limit_flag = 0; /* always restrained pitch Q range in IO mode */ + T0_max = PIT_MAX; + T0_min = PIT_MIN; + + p_Aw = Aw; + p_Aq = Aq; + pt_pitch = pitch_buf; + + mvs2s( st->pitch, T_op, 2 ); + if ( T_op[0] <= PIT_MIN ) + { + T_op[0] *= 2; + } + + if ( T_op[1] <= PIT_MIN ) + { + T_op[1] *= 2; + } + + st->acelp_cfg.fcb_mode = 0; /* flag used in inov_encode() */ + + /*-----------------------------------------------------------------* + * Select LP filtering flag + *-----------------------------------------------------------------*/ + + if ( st->core_brate < ACELP_11k60 ) + { + lp_flag = LOW_PASS; + } + else + { + lp_flag = NORMAL_OPERATION; + } + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------* + * Bandwidth expansion of A(z) filter coefficients + * Find the the excitation search target "xn" and innovation + * target in residual domain "cn" + * Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + + mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); + + find_targets( speech, hLPDmem->mem_syn, i_subfr, &hLPDmem->mem_w0, p_Aq, res, L_SUBFR, p_Aw, TILT_FAC, xn, cn, h1 ); + + /*----------------------------------------------------------------* + * Close-loop pitch search and quantization + * Adaptive exc. construction + *----------------------------------------------------------------*/ + + *pt_pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, st->core_brate, 1, L_FRAME, -1, &pitch_limit_flag, i_subfr, exc, L_SUBFR, T_op, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, 0 /*tdm_Pitch_reuse_flag*/, NULL /*tdm_Pri_pitch_buf*/ ); + + /*-----------------------------------------------------------------* + * Find adaptive exitation + *-----------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + * or in case of floating point encoder & fixed p. decoder + *-----------------------------------------------------------------*/ + + clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, 0, xn, st->clip_var ); + + /*-----------------------------------------------------------------* + * LP filtering of the adaptive excitation, codebook target computation + *-----------------------------------------------------------------*/ + + lp_select = lp_filt_exc_enc( MODE1, -1, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, L_FRAME, g_corr, clip_gain, &gain_pit, &lp_flag ); + + if ( lp_flag == NORMAL_OPERATION ) + { + push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); + } + + /*-----------------------------------------------------------------* + * Innovation encoding + *-----------------------------------------------------------------*/ + + inov_encode( st, st->core_brate, 1, L_FRAME, st->last_L_frame, -1, -1, 0, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, *pt_pitch, xn2, code, y2, &unbits, L_SUBFR ); + + /*-----------------------------------------------------------------* + * Gain encoding + * Pitch gain clipping test + * Estimate spectrum tilt and voicing + *-----------------------------------------------------------------*/ + + gain_enc_amr_wb( hBstr, xn, y1, y2, code, st->core_brate, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain, st->hAmrwb_IO->past_qua_en ); + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); + + hLPDmem->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + hLPDmem->mem_w0 = xn[L_SUBFR - 1] - gain_pit * y1[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1]; + + /*-----------------------------------------------------------------* + * Find the total excitation + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[] + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + + /*-----------------------------------------------------------------* + * HF gain modification factors at 23.85 kbps + *-----------------------------------------------------------------*/ + + if ( st->core_brate == ACELP_23k85 ) + { + if ( st->input_Fs >= 16000 ) + { + hf_cod( st->core_brate, &speech16k[i_subfr * L_SUBFR16k / L_SUBFR], p_Aq, &exc[i_subfr], &syn[i_subfr], &st->hAmrwb_IO->seed2_enc, st->hAmrwb_IO->mem_hp400_enc, st->hAmrwb_IO->mem_syn_hf_enc, st->hAmrwb_IO->mem_hf_enc, st->hAmrwb_IO->mem_hf2_enc, &st->hVAD->hangover_cnt, &st->hAmrwb_IO->gain_alpha, &hf_gain[i_subfr / L_SUBFR] ); + } + + push_indice( hBstr, IND_HF_GAIN_MODIFICATION, hf_gain[i_subfr / L_SUBFR], 4 ); + } + + p_Aw += ( M + 1 ); + p_Aq += ( M + 1 ); + pt_pitch++; + } + + return; +} diff --git a/lib_enc/enc_gain.c b/lib_enc/enc_gain.c new file mode 100644 index 0000000000..a5728e1f37 --- /dev/null +++ b/lib_enc/enc_gain.c @@ -0,0 +1,271 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "typedef.h" +#include "prot.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "wmops.h" + + +/* + * E_GAIN_norm_corr_interpolate + * + * Parameters: + * x I: input vector + * frac I: fraction (-4..+3) + * + * Function: + * Interpolating the normalized correlation + * + * Returns: + * interpolated value + */ +static float E_GAIN_norm_corr_interpolate( + float *x, + int16_t frac ) +{ + float s, *x1, *x2; + const float *c1, *c2; + + if ( frac < 0 ) + { + frac += 4; + x--; + } + + x1 = &x[0]; + x2 = &x[1]; + c1 = &E_ROM_inter4_1[frac]; + c2 = &E_ROM_inter4_1[4 - frac]; + s = x1[0] * c1[0] + x2[0] * c2[0]; + s += x1[-1] * c1[4] + x2[1] * c2[4]; + s += x1[-2] * c1[8] + x2[2] * c2[8]; + s += x1[-3] * c1[12] + x2[3] * c2[12]; + + return s; +} + +static float E_GAIN_norm_corr_interpolate6( + float *x, + int16_t frac ) +{ + float s, *x1, *x2; + const float *c1, *c2; + + if ( frac < 0 ) + { + frac += 6; + x--; + } + + x1 = &x[0]; + x2 = &x[1]; + c1 = &E_ROM_inter6_1[frac]; + c2 = &E_ROM_inter6_1[6 - frac]; + s = x1[0] * c1[0] + x2[0] * c2[0]; + s += x1[-1] * c1[6] + x2[1] * c2[6]; + s += x1[-2] * c1[12] + x2[2] * c2[12]; + s += x1[-3] * c1[18] + x2[3] * c2[18]; + + return s; +} + +/* + * E_GAIN_closed_loop_search + * + * Parameters: + * exc I: excitation buffer + * xn I: target signal + * h I: weighted synthesis filter impulse response + * dn I: residual domain target signal + * t0_min I: minimum value in the searched range + * t0_max I: maximum value in the searched range + * pit_frac O: chosen fraction + * i_subfr I: flag to first subframe + * t0_fr2 I: minimum value for resolution 1/2 + * t0_fr1 I: minimum value for resolution 1 + * + * Function: + * Find the closed loop pitch period with 1/4 subsample resolution. + * + * Returns: + * chosen integer pitch lag + */ +int16_t E_GAIN_closed_loop_search( + float exc[], + float xn[], + float h[], + int16_t t0_min, + int16_t t0_min_frac, + int16_t t0_max, + int16_t t0_max_frac, + const int16_t t0_min_max_res, + int16_t *pit_frac, + int16_t *pit_res, + const int16_t pit_res_max, + const int16_t i_subfr, + const int16_t pit_min, + const int16_t pit_fr2, + const int16_t pit_fr1, + const int16_t L_subfr ) +{ + float corr_v[32 + 2 * L_INTERPOL1 + 1]; + float cor_max, max_val, temp; + float *corr; + int16_t i, fraction, frac1, frac2, step; + int16_t t0, t_min, t_max; + + /* Find interval to compute normalized correlation */ + if ( t0_min_frac > 0 ) + { + t0_min++; + } + t_min = t0_min - L_INTERPOL1; + t_max = t0_max + L_INTERPOL1; + + /* allocate memory to normalized correlation vector */ + corr = &corr_v[-t_min]; /* corr[t_min..t_max] */ + + /* Compute normalized correlation between target and filtered excitation */ + norm_corr( exc, xn, h, t_min, t_max, corr, L_subfr ); + + /* find integer pitch */ + max_val = corr[t0_min]; + t0 = t0_min; + for ( i = t0_min + 1; i <= t0_max; i++ ) + { + if ( corr[i] >= max_val ) + { + max_val = corr[i]; + t0 = i; + } + } + + /* If first subframe and t0 >= pit_fr1, do not search fractionnal pitch */ + if ( ( i_subfr == 0 ) & ( t0 >= pit_fr1 ) ) + { + *pit_frac = 0; + *pit_res = 1; + return ( t0 ); + } + + /* + * Search fractionnal pitch + * Test the fractions around t0 and choose the one which maximizes + * the interpolated normalized correlation. + */ + + if ( t0_min_max_res == ( pit_res_max >> 1 ) ) + { + t0_min_frac = t0_min_frac << 1; + t0_max_frac = t0_max_frac << 1; + } + + step = 1; + frac1 = -( pit_res_max - 1 ); + frac2 = pit_res_max - 1; + if ( ( ( i_subfr == 0 ) & ( t0 >= pit_fr2 ) ) | ( pit_fr2 <= pit_min ) ) + { + step = 2; + frac1 = -( pit_res_max - 2 ); + frac2 = pit_res_max - 2; + } + + if ( ( t0 == t0_min ) && ( t0_min_frac == 0 ) ) + { + frac1 = t0_min_frac; + } + else if ( ( t0 == t0_min ) && ( frac1 + pit_res_max < t0_min_frac ) ) + { + frac1 = t0_min_frac - pit_res_max; + } + if ( t0 == t0_max ) + { + frac2 = t0_max_frac; + } + assert( frac1 <= 0 && frac2 >= 0 && frac2 > frac1 ); + if ( pit_res_max == 6 ) + { + cor_max = E_GAIN_norm_corr_interpolate6( &corr[t0], frac1 ); + fraction = frac1; + for ( i = ( frac1 + step ); i <= frac2; i += step ) + { + temp = E_GAIN_norm_corr_interpolate6( &corr[t0], i ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + } + } + } + else + { + cor_max = E_GAIN_norm_corr_interpolate( &corr[t0], frac1 ); + fraction = frac1; + for ( i = ( frac1 + step ); i <= frac2; i += step ) + { + temp = E_GAIN_norm_corr_interpolate( &corr[t0], i ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + } + } + } + + /* limit the fraction value */ + if ( fraction < 0 ) + { + fraction += pit_res_max; + t0 -= 1; + } + if ( ( ( i_subfr == 0 ) & ( t0 >= pit_fr2 ) ) | ( pit_fr2 <= pit_min ) ) + { + *pit_res = pit_res_max >> 1; + *pit_frac = fraction >> 1; + } + else + { + *pit_res = pit_res_max; + *pit_frac = fraction; + } + + return ( t0 ); +} diff --git a/lib_enc/enc_gen_voic.c b/lib_enc/enc_gen_voic.c new file mode 100644 index 0000000000..dd642cd470 --- /dev/null +++ b/lib_enc/enc_gen_voic.c @@ -0,0 +1,327 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * encod_gen_voic() + * + * Encode excitation signal + *-------------------------------------------------------------------*/ + +void encod_gen_voic( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : LP coefficients */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *res, /* i : residual signal */ + float *syn, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + int16_t *unbits, /* i/o: number of unused bits */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + float xn[L_SUBFR]; /* Target vector for pitch search */ + float xn2[L_SUBFR]; /* Target vector for codebook search */ + float cn[L_SUBFR]; /* Target vector in residual domain */ + float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ + float code[L_SUBFR]; /* Fixed codebook excitation */ + float y1[L_SUBFR]; /* Filtered adaptive excitation */ + float y2[L_SUBFR]; /* Filtered algebraic excitation */ + float gain_pit; /* Pitch gain */ + float voice_fac; /* Voicing factor */ + float gain_code; /* Gain of code */ + float gain_inov; /* inovation gain */ + int16_t i, i_subfr; /* tmp variables */ + int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ + int16_t T0_min, T0_max; /* pitch variables */ + float *pt_pitch; /* pointer to floating pitch buffer */ + float g_corr[6]; /* ACELP correl, values + gain pitch */ + float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ + int16_t clip_gain; /* LSF clip gain */ + const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector*/ + float error; + float gain_preQ; /* Gain of prequantizer excitation */ + float code_preQ[L_SUBFR]; /* Prequantizer excitation */ + int16_t unbits_PI; /* number of unused bits for EVS_PI */ + float norm_gain_code; + int16_t pitch_limit_flag; + int16_t harm_flag_acelp; + int16_t lp_select, lp_flag; + int16_t L_frame; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + gain_pit = 0; + gain_code = 0; + gain_preQ = 0; + unbits_PI = 0; + error = 0.0f; + + L_frame = st->L_frame; + + if ( L_frame == L_FRAME ) + { + T0_max = PIT_MAX; + T0_min = PIT_MIN; + } + else /* L_frame == L_FRAME16k */ + { + T0_max = PIT16k_MAX; + T0_min = PIT16k_MIN; + } + + lp_flag = st->acelp_cfg.ltf_mode; + *unbits = 0; + + p_Aw = Aw; + p_Aq = Aq; + pt_pitch = pitch_buf; + gain_preQ = 0; + set_f( code_preQ, 0, L_SUBFR ); + + /* set and write harmonicity flag */ + harm_flag_acelp = 0; + + if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && st->coder_type == GENERIC ) + { + if ( st->last_harm_flag_acelp > 2 ) + { + harm_flag_acelp = 1; + } + + push_indice( hBstr, IND_HARM_FLAG_ACELP, harm_flag_acelp, 1 ); + } + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------* + * Find the the excitation search target "xn" and innovation + * target in residual domain "cn" + * Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + + mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); + + find_targets( speech, hLPDmem->mem_syn, i_subfr, &hLPDmem->mem_w0, p_Aq, res, L_SUBFR, p_Aw, st->preemph_fac, xn, cn, h1 ); + + /*----------------------------------------------------------------* + * Close-loop pitch search and quantization + * Adaptive exc. construction + *----------------------------------------------------------------*/ + + *pt_pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, st->core_brate, 0, L_frame, st->coder_type, &pitch_limit_flag, i_subfr, exc, L_SUBFR, st->pitch, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + tbe_celp_exc( st->element_mode, st->idchan, bwe_exc, L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error, st->tdm_LRTD_flag ); + + /*-----------------------------------------------------------------* + * Find adaptive exitation + *-----------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + *-----------------------------------------------------------------*/ + + clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, st->coder_type, xn, st->clip_var ); + + if ( st->coder_type == INACTIVE ) + { + /* in case of AVQ inactive, limit the gain to 0.65 */ + clip_gain = 2; + } + + /*-----------------------------------------------------------------* + * LP filtering of the adaptive excitation, codebook target computation + *-----------------------------------------------------------------*/ + + lp_select = lp_filt_exc_enc( MODE1, st->coder_type, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, L_frame, g_corr, clip_gain, &gain_pit, &lp_flag ); + + if ( lp_flag == NORMAL_OPERATION ) + { + push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); + } + + /* update long-term pitch gain for speech/music classifier */ + st->hSpMusClas->lowrate_pitchGain = 0.9f * st->hSpMusClas->lowrate_pitchGain + 0.1f * gain_pit; + + /*-----------------------------------------------------------------* + * Transform-domain contribution (active frames) + *-----------------------------------------------------------------*/ + + if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->coder_type != INACTIVE ) + { + transf_cdbk_enc( st, harm_flag_acelp, i_subfr, cn, exc, p_Aq, p_Aw, h1, xn, xn2, y1, y2, Es_pred, &gain_pit, gain_code, g_corr, clip_gain, &gain_preQ, code_preQ, unbits ); + } + + /*-----------------------------------------------------------------* + * Innovation encoding + *-----------------------------------------------------------------*/ + + inov_encode( st, st->core_brate, 0, L_frame, st->last_L_frame, st->coder_type, st->bwidth, st->sharpFlag, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, *pt_pitch, xn2, code, y2, &unbits_PI, L_SUBFR ); + + /*-----------------------------------------------------------------* + * Gain encoding + *-----------------------------------------------------------------*/ + + if ( st->core_brate <= ACELP_8k00 ) + { + gain_enc_lbr( hBstr, st->acelp_cfg.gains_mode, st->coder_type, i_subfr, xn, y1, y2, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, gains_mem, clip_gain, L_SUBFR ); + } + else if ( st->core_brate > ACELP_32k ) + { + gain_enc_SQ( hBstr, st->acelp_cfg.gains_mode, i_subfr, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); + } + else + { + gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, i_subfr, -1, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); + } + + if ( st->Opt_SC_VBR ) + { + if ( st->hSC_VBR->last_ppp_mode == 1 ) + { + /* SC-VBR - all other st->clip_var values will be updated even in a PPP frame */ + st->clip_var[1] = gain_pit; + } + } + + /*-----------------------------------------------------------------* + * update LP-filtered gains for the case of frame erasures + *-----------------------------------------------------------------*/ + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); + + hLPDmem->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*-----------------------------------------------------------------* + * Transform-domain contribution (inactive frames) + *-----------------------------------------------------------------*/ + + if ( st->total_brate >= MAX_GSC_INACTIVE_BRATE && st->coder_type == INACTIVE ) + { + transf_cdbk_enc( st, 0, i_subfr, cn, exc, p_Aq, p_Aw, h1, xn, xn2, y1, y2, Es_pred, &gain_pit, gain_code, g_corr, clip_gain, &gain_preQ, code_preQ, unbits ); + } + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + hLPDmem->mem_w0 = xn[L_SUBFR - 1] - ( gain_pit * y1[L_SUBFR - 1] ) - ( gain_code * y2[L_SUBFR - 1] ); + + /*-----------------------------------------------------------------* + * Construct adaptive part of the excitation + * Save the non-enhanced excitation for FEC_exc + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Add the ACELP pre-quantizer contribution + *-----------------------------------------------------------------*/ + + if ( gain_preQ != 0 ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] += gain_preQ * code_preQ[i]; + exc[i + i_subfr] += gain_preQ * code_preQ[i]; + } + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[]. + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + + p_Aw += ( M + 1 ); + p_Aq += ( M + 1 ); + pt_pitch++; + } + + /* write reserved bits */ + while ( unbits_PI > 0 ) + { + i = min( unbits_PI, 16 ); + push_indice( hBstr, IND_UNUSED, 0, i ); + unbits_PI -= i; + } + + /* SC-VBR */ + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->prev_ppp_gain_pit = gain_pit; + st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code; + } + + return; +} diff --git a/lib_enc/enc_gen_voic_rf.c b/lib_enc/enc_gen_voic_rf.c new file mode 100644 index 0000000000..e8af6856ad --- /dev/null +++ b/lib_enc/enc_gen_voic_rf.c @@ -0,0 +1,401 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * reset_rf_indices() + * + * Initialization of oartial redundancy coding + *-------------------------------------------------------------------*/ + +void reset_rf_indices( + RF_ENC_HANDLE hRF, /* i/o: RF state structure */ + const int16_t L_frame, /* i : frame length */ + int16_t *rf_target_bits_write ) +{ + int16_t i, j; + + if ( hRF != NULL ) + { + hRF->rf_frame_type = 0; /* since this function is called every frame this will happen even for a SID frame, hence treating it as GSC frame, i.e no RF encoding */ + + hRF->rf_mem_w0 = 0; + set_f( hRF->rf_clip_var, 0, 6 ); + hRF->rf_tilt_code = 0; + set_f( hRF->rf_mem_syn2, 0, M ); + set_f( hRF->rf_dispMem, 0, 8 ); + hRF->rf_gc_threshold = 0; + set_f( hRF->rf_tilt_buf, 0, NB_SUBFR16k ); + + hRF->rf_target_bits = 0; + *rf_target_bits_write = 0; + hRF->rf_tcxltp_pitch_int_past = L_frame; + hRF->rf_last_tns_active = 0; + hRF->rf_second_last_tns_active = 0; + hRF->rf_second_last_core = 0; + + for ( i = 0; i < MAX_RF_FEC_OFFSET; i++ ) + { + hRF->rf_indx_frametype[i] = RF_NO_DATA; + hRF->rf_targetbits_buff[i] = 6; /* rf_mode: 1, rf_frame_type: 3, and fec_offset: 2 */ + hRF->rf_indx_lsf[i][0] = 0; + hRF->rf_indx_lsf[i][1] = 0; + hRF->rf_indx_lsf[i][2] = 0; + hRF->rf_indx_EsPred[i] = 0; + hRF->rf_indx_nelp_fid[i] = 0; + hRF->rf_indx_nelp_iG1[i] = 0; + hRF->rf_indx_nelp_iG2[i][0] = 0; + hRF->rf_indx_nelp_iG2[i][1] = 0; + + for ( j = 0; j < NB_SUBFR16k; j++ ) + { + hRF->rf_indx_ltfMode[i][j] = 0; + hRF->rf_indx_pitch[i][j] = 0; + hRF->rf_indx_fcb[i][j] = 0; + hRF->rf_indx_gain[i][j] = 0; + } + + hRF->rf_clas[i] = UNVOICED_CLAS; + hRF->rf_gain_tcx[i] = 0; + hRF->rf_tcxltp_param[i] = 0; + + hRF->rf_indx_tbeGainFr[i] = 0; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * coder_acelp_rf() + * + * Encode excitation signal (partial redundancy) + *-------------------------------------------------------------------*/ + +void coder_acelp_rf( + const int16_t target_bits, /* i : target bits */ + const float speech[], /* i : speech[-M..lg] */ + const int16_t coder_type, /* i : coding type */ + const int16_t rf_frame_type, /* i : rf_frame_type */ + const float A[], /* i : coefficients 4xAz[M+1] */ + const float Aq[], /* i : coefficients 4xAz_q[M+1] */ + const float voicing[], /* i : open-loop LTP gain */ + const int16_t T_op[], /* i : open-loop LTP lag */ + const float stab_fac, /* i : LP stability factor */ + Encoder_State *st, /* i/o: coder memory state */ + ACELP_config *acelp_cfg, /* i/o: configuration of the ACELP */ + float *exc_rf, /* i/o: pointer to RF excitation */ + float *syn_rf /* i/o: pointer to RF synthesis */ +) +{ + int16_t i, i_subfr, nSubfr; + int16_t T0, T0_frac, T0_min, T0_min_frac, T0_max, T0_max_frac, T0_res; + float Es_pred_rf; + float gain_pit, gain_code, voice_fac; + float prev_gain_pit; + ACELP_CbkCorr g_corr; + float g_corr2[6]; + const float *p_A, *p_Aq; + float code[L_SUBFR]; + float xn[L_SUBFR], cn[L_SUBFR], h1[L_SUBFR]; + float xn2[L_SUBFR], y1[L_SUBFR], y2[L_SUBFR]; + float res_save; + float exc2[L_SUBFR]; + float exc_nelp[L_FRAME]; + float syn2[L_FRAME16k]; + float past_gcode, gain_inov; + int16_t clip_gain; + float gain_code2; + float code2[L_SUBFR]; + float y22[L_SUBFR]; + int16_t lp_select; + int16_t *prm_rf; + + RF_ENC_HANDLE hRF = st->hRF; + + /*-----------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------------*/ + past_gcode = 0; + gain_inov = 0; + T0 = 0; + T0_res = 0; + T0_frac = 0; + gain_pit = 0; + gain_code = 0; + voice_fac = 0; + prev_gain_pit = 0; + Es_pred_rf = 0; + set_f( code, 0.0f, L_SUBFR ); + + /*-----------------------------------------------------------------------* + * Configure ACELP partial copy * + *-----------------------------------------------------------------------*/ + + BITS_ALLOC_config_acelp( target_bits, rf_frame_type, &( hRF->acelp_cfg_rf ), 0, st->nb_subfr ); + + /* Reset phase dispersion */ + if ( st->last_core > ACELP_CORE ) + { + set_zero( hRF->rf_dispMem, 8 ); + } + + /*---------------------------------------------------------------* + * Calculation of LP residual (filtering through A[z] filter) + *---------------------------------------------------------------*/ + + calc_residu( speech, exc_rf, Aq, st->L_frame ); + + /*------------------------------------------------------------------------* + * Find and quantize mean_ener_code for gain quantizer * + *------------------------------------------------------------------------*/ + + Es_pred_rf = 0; + if ( acelp_cfg->nrg_mode > 0 && rf_frame_type != RF_NELP ) + { + Es_pred_enc( &Es_pred_rf, &hRF->rf_indx_EsPred[0], st->L_frame, L_SUBFR, exc_rf, voicing, acelp_cfg->nrg_bits, acelp_cfg->nrg_mode > 1 ); + } + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + p_A = A; + p_Aq = Aq; + + res_save = exc_rf[0]; + nSubfr = 0; + + for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_SUBFR ) + { + if ( rf_frame_type != RF_NELP ) + { + /* Restore exc[i_subfr] and save next exc[L_SUBFR+i_subfr] */ + exc_rf[i_subfr] = res_save; + res_save = exc_rf[L_SUBFR + i_subfr]; + + /*--------------------------------------------------------------------------* + * Find target for pitch search (xn[]), target for innovation search (cn[]) * + * and impulse response of the weighted synthesis filter (h1[]). * + *--------------------------------------------------------------------------*/ + + find_targets( speech, &syn_rf[i_subfr - M], i_subfr, &( hRF->rf_mem_w0 ), p_Aq, exc_rf, L_SUBFR, p_A, st->preemph_fac, xn, cn, h1 ); + } + + /* full frame nelp partial copy encoding */ + if ( rf_frame_type == RF_NELP ) + { + if ( i_subfr == 0 ) + { + nelp_encoder( st, exc_rf, exc_nelp, 0 ); + } + mvr2r( &exc_nelp[i_subfr], exc2, L_SUBFR ); + mvr2r( &exc_nelp[i_subfr], exc_rf, L_SUBFR ); + } + else + { + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + * or in case of floating point encoder & fixed p. decoder + *-----------------------------------------------------------------*/ + + clip_gain = gp_clip( st->element_mode, st->core_brate, voicing, i_subfr, coder_type, xn, hRF->rf_clip_var ); + + /*-----------------------------------------------------------------* + * - find unity gain pitch excitation (adaptive codebook entry) * + * with fractional interpolation. * + * - find filtered pitch exc. y1[]=exc[] convolved with h1[]) * + * - compute pitch gain1 * + *-----------------------------------------------------------------*/ + + if ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] == 0 ) + { + gain_pit = prev_gain_pit; + } + + if ( acelp_cfg->ltp_bits != 0 ) + { + prm_rf = &hRF->rf_indx_pitch[0][nSubfr]; + + /* Adaptive Codebook (GC and VC) */ + Mode2_pit_encode( acelp_cfg->ltp_mode, i_subfr, &prm_rf, &exc_rf[i_subfr], T_op, &T0_min, &T0_min_frac, &T0_max, &T0_max_frac, &T0, &T0_frac, &T0_res, h1, xn, st->pit_min, st->pit_fr1, st->pit_fr1b, st->pit_fr2, st->pit_max, st->pit_res_max ); + + /* find ACB excitation */ + if ( T0_res == ( st->pit_res_max >> 1 ) ) /* st->pit_res_max is 4 for 12.8kHz core */ + { + pred_lt4( &exc_rf[i_subfr], &exc_rf[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + } + else + { + pred_lt4( &exc_rf[i_subfr], &exc_rf[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + } + + + /* filter adaptive codebook */ + lp_select = lp_filt_exc_enc( MODE2, ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] > 0 ) ? ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] ) : ( 100 ), i_subfr, exc_rf, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr2, clip_gain, &( gain_pit ), &( acelp_cfg->ltf_mode ) ); + + if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) + { + hRF->rf_indx_ltfMode[0][nSubfr] = lp_select; + } + + g_corr.y1y1 = g_corr2[0]; + g_corr.xy1 = -0.5f * ( g_corr2[1] - 0.01f ) + 0.01f; + } + else + { + gain_pit = 0.f; + g_corr.xy1 = 0.f; + g_corr.y1y1 = 0.f; + set_zero( y1, L_SUBFR ); + set_zero( exc_rf + i_subfr, L_SUBFR ); + T0 = L_SUBFR; + T0_frac = 0; + T0_res = 1; + } + + /*----------------------------------------------------------------------* + * Encode the algebraic innovation * + *----------------------------------------------------------------------*/ + + if ( acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR] >= 0 ) + { + prm_rf = &hRF->rf_indx_fcb[0][nSubfr]; + E_ACELP_innovative_codebook( exc_rf, T0, T0_frac, T0_res, gain_pit, hRF->rf_tilt_code, acelp_cfg, i_subfr, p_Aq, h1, xn, cn, y1, y2, st->acelp_autocorr, &prm_rf, code, st->L_frame, st->last_L_frame, st->total_brate ); + } + else + { + set_f( code, 0.0f, L_SUBFR ); + set_f( y2, 0.0f, L_SUBFR ); + } + + if ( i_subfr < ( st->L_frame - L_SUBFR ) ) + { + E_corr_xy2( xn, y1, y2, g_corr2, L_SUBFR ); + g_corr.y2y2 = 0.01F + g_corr2[2]; + g_corr.xy2 = 0.01F + -0.5f * g_corr2[3]; + g_corr.y1y2 = 0.01F + 0.5f * g_corr2[4]; + + g_corr.xx = 0.01F + dotp( xn, xn, L_SUBFR ); + + /*----------------------------------------------------------------------* + * Add Gaussian excitation * + *----------------------------------------------------------------------*/ + + gain_code2 = 0.f; + set_zero( code2, L_SUBFR ); + set_zero( y22, L_SUBFR ); + + /*----------------------------------------------------------* + * - Compute the fixed codebook gain * + * - quantize fixed codebook gain * + *----------------------------------------------------------*/ + + if ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] != 0 ) + { + prm_rf = &hRF->rf_indx_gain[0][nSubfr]; + encode_acelp_gains( code, acelp_cfg->gains_mode[i_subfr / L_SUBFR], Es_pred_rf, clip_gain, &g_corr, &gain_pit, &gain_code, &prm_rf, &past_gcode, &gain_inov, L_SUBFR, code2, &gain_code2, st->flag_noisy_speech_snr ); + } + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, hRF->rf_clip_var ); + + /*----------------------------------------------------------* + * - voice factor (for codebook tilt sharpening) * + *----------------------------------------------------------*/ + + hRF->rf_tilt_code = est_tilt( exc_rf + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, acelp_cfg->voice_tilt ); + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + hRF->rf_mem_w0 = xn[L_SUBFR - 1] - gain_pit * y1[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1] - gain_code2 * y22[L_SUBFR - 1]; + + /*-------------------------------------------------------* + * - Find the total excitation. * + *-------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i] = gain_pit * exc_rf[i + i_subfr]; + exc2[i] += gain_code2 * code2[i]; + exc_rf[i + i_subfr] = exc2[i] + gain_code * code[i]; + } + + /*---------------------------------------------------------* + * Enhance the excitation * + *---------------------------------------------------------*/ + + enhancer( MODE2, -1, acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR], 0, coder_type, st->L_frame, voice_fac, stab_fac, past_gcode, gain_inov, &hRF->rf_gc_threshold, code, exc2, gain_pit, hRF->rf_dispMem ); + } + } + + if ( ( i_subfr < ( st->L_frame - L_SUBFR ) ) || ( rf_frame_type != RF_NELP ) ) + { + /*----------------------------------------------------------* + * - compute the synthesis speech * + *----------------------------------------------------------*/ + + syn_filt( p_Aq, M, exc2, &syn2[i_subfr], L_SUBFR, hRF->rf_mem_syn2, 1 ); + + syn_filt( p_Aq, M, &exc_rf[i_subfr], &syn_rf[i_subfr], L_SUBFR, &syn_rf[i_subfr - M], 0 ); + + /*----------------------------------------------------------* + * Updates * + *----------------------------------------------------------*/ + + p_A += ( M + 1 ); + p_Aq += ( M + 1 ); + nSubfr++; + + /* copy current gain for next subframe use, in case there is no explicit encoding */ + prev_gain_pit = gain_pit; + } + + } /* end of subframe loop */ + + return; +} diff --git a/lib_enc/enc_higher_acelp.c b/lib_enc/enc_higher_acelp.c new file mode 100644 index 0000000000..ebda178d8b --- /dev/null +++ b/lib_enc/enc_higher_acelp.c @@ -0,0 +1,394 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void find_cn( const float xn[], const float Ap[], const float *p_Aq, float cn[] ); + + +/*-----------------------------------------------------------------* + * transf_cdbk_enc() + * + * Transform domain contribution encoding + *-----------------------------------------------------------------*/ + +void transf_cdbk_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t harm_flag_acelp, /* i : harmonic flag for higher rates ACELP */ + const int16_t i_subfr, /* i : subframe index */ + float cn[], /* i/o: target vector in residual domain */ + float exc[], /* i/o: pointer to excitation signal frame */ + const float *p_Aq, /* i : 12k8 Lp coefficient */ + const float Ap[], /* i : weighted LP filter coefficients */ + const float h1[], /* i : weighted filter input response */ + float xn[], /* i/o: target vector */ + float xn2[], /* i/o: target vector for innovation search */ + float y1[], /* i/o: zero-memory filtered adaptive excitation */ + const float y2[], /* i : zero-memory filtered innovative excitation */ + const float Es_pred, /* i : predicited scaled innovation energy */ + float *gain_pit, /* i/o: adaptive excitation gain */ + const float gain_code, /* i : innovative excitation gain */ + float g_corr[], /* o : ACELP correlation values */ + const int16_t clip_gain, /* i : adaptive gain clipping flag */ + float *gain_preQ, /* o : prequantizer excitation gain */ + float code_preQ[], /* o : prequantizer excitation */ + int16_t *unbits /* o : number of AVQ unused bits */ +) +{ + int16_t i, index, nBits, Nsv; + float x_in[L_SUBFR], x_tran[L_SUBFR], temp; + int16_t x_norm[L_SUBFR + L_SUBFR / WIDTH_BAND]; + float corr, ener; + int16_t nq[L_SUBFR / WIDTH_BAND]; + int16_t avq_bit_sFlag; + int16_t trgtSvPos; + + avq_bit_sFlag = 0; + if ( st->element_mode > EVS_MONO ) + { + avq_bit_sFlag = 1; + } + + /*--------------------------------------------------------------* + * Set bit-allocation + *--------------------------------------------------------------*/ + + Nsv = 8; + nBits = st->acelp_cfg.AVQ_cdk_bits[i_subfr / L_SUBFR]; + + /* increase # of AVQ allocated bits by unused bits from the previous subframe */ + nBits += ( *unbits ); + + /*--------------------------------------------------------------* + * Compute/Update target + * For inactive frame, find target in residual domain + * Deemphasis + *--------------------------------------------------------------*/ + + if ( st->coder_type == INACTIVE ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + x_tran[i] = xn[i] - *gain_pit * y1[i] - gain_code * y2[i]; + } + + find_cn( x_tran, Ap, p_Aq, x_in ); + } + else + { + updt_tar( cn, x_in, &exc[i_subfr], *gain_pit, L_SUBFR ); + } + + deemph( x_in, FAC_PRE_AVQ, L_SUBFR, &st->mem_deemp_preQ ); + + /*--------------------------------------------------------------* + * DCT-II + *--------------------------------------------------------------*/ + + if ( st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp ) + { + mvr2r( x_in, x_tran, L_SUBFR ); + } + else + { + edct2( L_SUBFR, -1, x_in, x_tran, ip_edct2_64, w_edct2_64 ); + } + + /*--------------------------------------------------------------* + * Split algebraic vector quantizer based on RE8 lattice + *--------------------------------------------------------------*/ + + AVQ_cod( x_tran, x_norm, nBits, Nsv ); + + /*--------------------------------------------------------------* + * Find prequantizer excitation gain + * Quantize the gain + *--------------------------------------------------------------*/ + + corr = 0; + ener = 1e-6f; + + for ( i = 0; i < Nsv * 8; i++ ) + { + corr += x_tran[i] * (float) x_norm[i]; + ener += (float) x_norm[i] * (float) x_norm[i]; + } + + *gain_preQ = corr / ener; + + if ( st->coder_type == INACTIVE ) + { + *gain_preQ /= gain_code; + + if ( st->core_brate > 56000 ) + { + index = usquant( *gain_preQ, gain_preQ, G_AVQ_MIN_INACT_64k, G_AVQ_DELTA_INACT_64k, ( 1 << G_AVQ_BITS ) ); + } + else if ( st->core_brate > 42000 ) + { + index = usquant( *gain_preQ, gain_preQ, G_AVQ_MIN_INACT_48k, G_AVQ_DELTA_INACT_48k, ( 1 << G_AVQ_BITS ) ); + } + else + { + index = usquant( *gain_preQ, gain_preQ, G_AVQ_MIN_INACT, G_AVQ_DELTA_INACT, ( 1 << G_AVQ_BITS ) ); + } + + *gain_preQ *= gain_code; + } + else + { + if ( Es_pred < 0 ) + { + temp = (float) ( 0.25f * fabs( Es_pred ) ); + } + else + { + temp = Es_pred; + } + *gain_preQ /= temp; + + if ( st->core_brate > ACELP_24k40 && st->core_brate <= 42000 ) + { + index = gain_quant( gain_preQ, 0.1f * G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); + } + else + { + index = gain_quant( gain_preQ, G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); + } + *gain_preQ *= temp; + } + + push_indice( st->hBstr, IND_AVQ_GAIN, index, G_AVQ_BITS ); + + /*--------------------------------------------------------------* + * Encode and multiplex subvectors into bitstream + *--------------------------------------------------------------*/ + + trgtSvPos = Nsv - 1; + if ( avq_bit_sFlag && nBits > 85 && !harm_flag_acelp && ( st->coder_type == GENERIC || st->coder_type == TRANSITION || st->coder_type == INACTIVE ) ) + { + trgtSvPos = 2; + avq_bit_sFlag = 2; + } + + AVQ_encmux( st->hBstr, -1, x_norm, &nBits, Nsv, nq, avq_bit_sFlag, trgtSvPos ); + + /* save # of AVQ unused bits for next subframe */ + *unbits = nBits; + + /* at the last subframe, write AVQ unused bits */ + if ( i_subfr == 4 * L_SUBFR && st->extl != SWB_BWE_HIGHRATE && st->extl != FB_BWE_HIGHRATE ) + { + while ( *unbits > 0 ) + { + i = min( *unbits, 16 ); + push_indice( st->hBstr, IND_UNUSED, 0, i ); + *unbits -= i; + } + } + + /*--------------------------------------------------------------* + * DCT transform + *--------------------------------------------------------------*/ + + for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) + { + x_tran[i] = (float) ( x_norm[i] ); + } + + set_f( x_tran + Nsv * WIDTH_BAND, 0.0f, L_SUBFR - WIDTH_BAND * Nsv ); + + if ( st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp ) + { + mvr2r( x_tran, code_preQ, L_SUBFR ); + } + else + { + edct2( L_SUBFR, 1, x_tran, code_preQ, ip_edct2_64, w_edct2_64 ); + } + + /*--------------------------------------------------------------* + * Preemphasise + *--------------------------------------------------------------*/ + + /* in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ + if ( ( nq[7] != 0 ) && ( st->last_nq_preQ - nq[0] > 7 ) ) + { + st->mem_preemp_preQ /= 16; + } + + st->last_nq_preQ = nq[7]; + + /* TD pre-quantizer: in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ + if ( st->element_mode > EVS_MONO && st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp && code_preQ[0] != 0 ) + { + if ( (float) abs( st->last_code_preq ) > 16.0f * (float) fabs( code_preQ[0] ) ) + { + st->mem_preemp_preQ /= 16; + } + else if ( (float) abs( st->last_code_preq ) > 8.0f * (float) fabs( code_preQ[0] ) ) + { + st->mem_preemp_preQ /= 8; + } + } + + st->last_code_preq = (int16_t) code_preQ[L_SUBFR - 1]; + + preemph( code_preQ, FAC_PRE_AVQ, L_SUBFR, &st->mem_preemp_preQ ); + + /*--------------------------------------------------------------* + * For inactive segments + * - Zero-memory filtered pre-filter excitation + * - Update of targets and gain_pit + * For active segments + * - Update xn[L_subfr-1] for updating the memory of the weighting filter + *--------------------------------------------------------------*/ + + if ( st->coder_type == INACTIVE ) + { + temp = code_preQ[0] * h1[L_SUBFR - 1]; + + for ( i = 1; i < L_SUBFR; i++ ) + { + temp += code_preQ[i] * h1[L_SUBFR - 1 - i]; + } + + xn[L_SUBFR - 1] -= *gain_preQ * temp; + } + else + { + conv( code_preQ, h1, x_tran, L_SUBFR ); + + updt_tar( cn, cn, code_preQ, *gain_preQ, L_SUBFR ); + updt_tar( xn, xn, x_tran, *gain_preQ, L_SUBFR ); + + *gain_pit = corr_xy1( xn, y1, g_corr, L_SUBFR, 0 ); + + /* clip gain if necessary to avoid problems at decoder */ + if ( clip_gain == 1 && *gain_pit > 0.95f ) + { + *gain_pit = 0.95f; + } + + updt_tar( xn, xn2, y1, *gain_pit, L_SUBFR ); + } + + st->use_acelp_preq = 1; + + return; +} + +/*-------------------------------------------------------------------* + * Find target in residual domain - cn[] + *-------------------------------------------------------------------*/ + +static void find_cn( + const float xn[], /* i : target signal */ + const float Ap[], /* i : weighted LP filter coefficients */ + const float *p_Aq, /* i : 12k8 LP coefficients */ + float cn[] /* o : target signal in residual domain */ +) +{ + float tmp, tmp_fl[L_SUBFR + M]; + + set_f( tmp_fl, 0, M ); + mvr2r( xn, tmp_fl + M, L_SUBFR ); + tmp = 0.0f; + + preemph( tmp_fl + M, PREEMPH_FAC_16k, L_SUBFR, &tmp ); + syn_filt( Ap, M, tmp_fl + M, tmp_fl + M, L_SUBFR, tmp_fl, 0 ); + residu( p_Aq, M, tmp_fl + M, cn, L_SUBFR ); + + return; +} + +/*---------------------------------------------------------------* + * gain_quant() + * + * Quantization of gains between the specified range + * using the specified number of levels. + *---------------------------------------------------------------*/ + +/*! r: quantization index */ +int16_t gain_quant( + float *gain, /* i/o: quantized gain */ + const float min_val, /* i : value of lower limit */ + const float max_val, /* i : value of upper limit */ + const int16_t bits /* i : number of bits to quantize */ +) +{ + int16_t index, levels; + float tmp, c_min, c_mult; + + levels = 1 << bits; + + if ( *gain < FLT_MIN ) + { + *gain = FLT_MIN; + } + + c_min = (float) log10( min_val ); + c_mult = (float) ( ( levels - 1 ) / ( log10( max_val ) - c_min ) ); + + tmp = c_mult * ( (float) log10( *gain ) - c_min ); + index = (int16_t) ( tmp + 0.5f ); + + if ( index < 0 ) + { + index = 0; + } + if ( index > levels - 1 ) + { + index = levels - 1; + } + + *gain = (float) pow( 10.0, ( ( (float) index ) / c_mult ) + c_min ); + + return ( index ); +} diff --git a/lib_enc/enc_nelp.c b/lib_enc/enc_nelp.c new file mode 100644 index 0000000000..11ec6105b9 --- /dev/null +++ b/lib_enc/enc_nelp.c @@ -0,0 +1,151 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * encod_nelp() + * + * Encode Unvoiced frames in SC-VBR + *-------------------------------------------------------------------*/ + +void encod_nelp( + Encoder_State *st, /* i/o: state structure */ + const float *speech, /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float *Aq, /* i : 12k8 Lp coefficient */ + float *res, /* o : residual signal */ + float *synth, /* o : core synthesis */ + float *tmp_noise, /* o : long-term noise energy */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +) +{ + float xn[L_SUBFR]; /* Target vector for pitch search */ + float h1[L_SUBFR]; /* Impulse response vector */ + float exc_nelp[L_FRAME]; + const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector */ + int16_t i_subfr, j; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; + + int16_t reduce_gains = 0; + + if ( st->bwidth == NB && st->input_Fs >= 16000 ) + { + if ( hSC_VBR->last_nelp_mode == 0 ) + { + set_f( hSC_VBR->nelp_lp_fit_mem, 0, NELP_LP_ORDER * 2 ); + } + polezero_filter( res, res, L_FRAME, num_nelp_lp, den_nelp_lp, NELP_LP_ORDER, hSC_VBR->nelp_lp_fit_mem ); /*16-Q of filter coeff*/ + } + + p_Aw = Aw; + p_Aq = Aq; + + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------* + * - Find the excitation search target "xn" and innovation + * target in residual domain "cn" + * - Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); + + find_targets( speech, hLPDmem->mem_syn, i_subfr, &hLPDmem->mem_w0, p_Aq, res, L_SUBFR, p_Aw, TILT_FAC, xn, NULL, h1 ); + + if ( i_subfr == 0 ) + { + if ( hSC_VBR->Local_VAD == 1 && st->bwidth == NB ) + { + reduce_gains = 1; + } + + nelp_encoder( st, res, exc_nelp, reduce_gains ); + } + *tmp_noise = 0; + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[]. + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &exc_nelp[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + + p_Aw += ( M + 1 ); + p_Aq += ( M + 1 ); + *pitch_buf = L_SUBFR; + pitch_buf++; + } + + mvr2r( exc_nelp, exc, L_FRAME ); + + /*-----------------------------------------------------------------* + * Updates: last value of new target is stored in mem_w0 + *-----------------------------------------------------------------*/ + + hLPDmem->mem_w0 = xn[L_SUBFR - 1] - ( exc[L_FRAME - 1] ); + hLPDmem->tilt_code = 0.0f; /* purely unvoiced */ + hSC_VBR->prev_tilt_code = hLPDmem->tilt_code; + + mvr2r( exc, exc2, L_FRAME ); + + hSC_VBR->prev_ppp_gain_pit = 0.0; + hLPDmem->dispMem[0] = 0; + hLPDmem->dispMem[2] = hSC_VBR->prev_ppp_gain_pit; + + for ( j = 3; j < 7; j++ ) + { + hLPDmem->dispMem[j] = hLPDmem->dispMem[j - 1]; + } + + interp_code_5over2( exc2, bwe_exc, L_FRAME ); + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + + return; +} diff --git a/lib_enc/enc_pit_exc.c b/lib_enc/enc_pit_exc.c new file mode 100644 index 0000000000..900d4021d0 --- /dev/null +++ b/lib_enc/enc_pit_exc.c @@ -0,0 +1,417 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * enc_pit_exc() + * + * Encode pitch only contribution + *-------------------------------------------------------------------*/ + +void enc_pit_exc( + Encoder_State *st, /* i/o: State structure */ + const float *speech, /* i : Input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float *Aq, /* i : 12k8 Lp coefficient */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *res, /* i : residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close-loop pitch period - fractional part */ + float *pitch_buf, /* i/o: Fractionnal per subframe pitch */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + float *gpit, /* o : pitch mean gpit */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + float xn[PIT_EXC_L_SUBFR]; /* Target vector for pitch search */ + float xn2[PIT_EXC_L_SUBFR]; /* Target vector for codebook search */ + float cn[PIT_EXC_L_SUBFR]; /* Target vector in residual domain */ + float h1[PIT_EXC_L_SUBFR + ( M + 1 )]; /* Impulse response vector */ + float y1[PIT_EXC_L_SUBFR]; /* Filtered adaptive excitation */ + float code[2 * L_SUBFR]; /* Fixed codebook excitation */ + float y2[2 * L_SUBFR]; /* Filtered algebraic excitation */ + float voice_fac; /* Voicing factor */ + float gain_code; /* Gain of code */ + float gain_inov; /* inovation gain */ + float gain_pit; /* Pitch gain */ + int16_t pit_idx, i_subfr; /* tmp variables */ + int16_t T0_min, T0_max; /* pitch variables */ + float g_corr[10]; /* ACELP correlation values + gain pitch */ + int16_t clip_gain, i; /* LSF clip gain and LP flag */ + const float *p_Aw, *p_Aq; /* pointer to LP filter coefficient vector */ + float *pt_pitch; /* pointer to floating pitch */ + int16_t L_subfr; + float cum_gpit, gpit_tmp; + int32_t Local_BR, Pitch_BR; + int16_t Pitch_CT, unbits_PI; + float norm_gain_code; + int16_t pitch_limit_flag; + int16_t lp_select, lp_flag; + BSTR_ENC_HANDLE hBstr = st->hBstr; + int16_t use_fcb; + float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + pitch_limit_flag = 1; /* always extended pitch Q range */ + use_fcb = 0; + unbits_PI = 0; + + if ( st->GSC_IVAS_mode > 0 && ( st->GSC_noisy_speech || st->core_brate > GSC_H_RATE_STG ) ) + { + Local_BR = ACELP_8k00; + Pitch_CT = GENERIC; + Pitch_BR = ACELP_8k00; + if ( st->L_frame == L_FRAME16k ) + { + Local_BR = ACELP_14k80; + if ( st->GSC_IVAS_mode > 0 ) + { + Local_BR = ACELP_9k60; + } + Pitch_BR = st->core_brate; + } + } + else if ( st->GSC_noisy_speech ) + { + Local_BR = ACELP_7k20; + Pitch_CT = GENERIC; + Pitch_BR = ACELP_7k20; + if ( st->L_frame == L_FRAME16k ) + { + Pitch_BR = st->core_brate; + } + } + else + { + Local_BR = ACELP_7k20; + Pitch_CT = AUDIO; + Pitch_BR = st->core_brate; + + if ( st->L_frame == L_FRAME16k ) + { + Local_BR = ACELP_13k20; + Pitch_CT = GENERIC; + } + } + + gain_code = 0; + + if ( st->L_frame == L_FRAME16k ) + { + T0_max = PIT16k_MAX; + T0_min = PIT16k_MIN; + } + else + { + T0_max = PIT_MAX; + T0_min = PIT_MIN; + } + + cum_gpit = 0.0f; + + L_subfr = st->L_frame / nb_subfr; + + lp_flag = st->acelp_cfg.ltf_mode; + + if ( ( ( st->core_brate >= MIN_RATE_FCB || ( st->GSC_noisy_speech == 1 && ( ( st->L_frame == L_FRAME && st->core_brate >= ACELP_13k20 ) || ( st->L_frame == L_FRAME16k && st->core_brate >= GSC_H_RATE_STG ) || st->GSC_IVAS_mode == 0 ) ) ) && L_subfr == L_SUBFR ) ) + { + use_fcb = 1; + } + else if ( st->GSC_IVAS_mode > 0 && L_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) + { + use_fcb = 2; + st->acelp_cfg.fcb_mode = 1; + set_s( st->acelp_cfg.gains_mode, 6, NB_SUBFR ); + set_s( st->acelp_cfg.pitch_bits, 9, NB_SUBFR ); + set_s( st->acelp_cfg.fixed_cdk_index, 14, NB_SUBFR16k ); + } + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + p_Aw = Aw; + p_Aq = Aq; + pt_pitch = pitch_buf; /* pointer to the pitch buffer */ + + for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_subfr ) + { + /*----------------------------------------------------------------* + * Find the the excitation search target "xn" and innovation + * target in residual domain "cn" + * Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + + mvr2r( &res[i_subfr], &exc[i_subfr], L_subfr ); + + find_targets( speech, st->hGSCEnc->mem_syn_tmp, i_subfr, &st->hGSCEnc->mem_w0_tmp, p_Aq, res, L_subfr, p_Aw, st->preemph_fac, xn, cn, h1 ); + + /*----------------------------------------------------------------* + * Close-loop pitch search and quantization + * Adaptive exc. construction + *----------------------------------------------------------------*/ + + *pt_pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, Pitch_BR, 0, st->L_frame, Pitch_CT, &pitch_limit_flag, i_subfr, exc, L_subfr, st->pitch, &T0_min, &T0_max, T0, T0_frac, h1, xn, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + /*-----------------------------------------------------------------* + * Find adaptive exitation + *-----------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_subfr + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + * or in case of floating point encoder & fixed p. decoder + *-----------------------------------------------------------------*/ + + clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, AUDIO, xn, st->clip_var ); + + /*-----------------------------------------------------------------* + * Codebook target computation + * (No LP filtering of the adaptive excitation) + *-----------------------------------------------------------------*/ + + lp_select = lp_filt_exc_enc( MODE1, AUDIO, i_subfr, exc, h1, xn, y1, xn2, L_subfr, st->L_frame, g_corr, clip_gain, &gain_pit, &lp_flag ); + + if ( lp_flag == NORMAL_OPERATION ) + { + push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); + } + + /* update long-term pitc hgain for speech/music classifier */ + st->hSpMusClas->lowrate_pitchGain = 0.9f * st->hSpMusClas->lowrate_pitchGain + 0.1f * gain_pit; + + gpit_tmp = gain_pit; + + if ( use_fcb == 0 ) + { + if ( st->core_brate >= MIN_RATE_FCB ) + { + pit_idx = (int16_t) vquant( &gain_pit, mean_gp, &gain_pit, dic_gp, 1, 32 ); + push_indice( hBstr, IND_PIT_IDX, pit_idx, 5 ); + } + else + { + pit_idx = (int16_t) vquant( &gain_pit, mean_gp, &gain_pit, dic_gp, 1, 16 ); + push_indice( hBstr, IND_PIT_IDX, pit_idx, 4 ); + } + } + else if ( use_fcb == 2 ) + { + /*-----------------------------------------------------------------* + * Innovation encoding + *-----------------------------------------------------------------*/ + + inov_encode( st, st->core_brate, 0, st->L_frame, st->last_L_frame, GENERIC, st->bwidth, 0, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, *pt_pitch, xn2, code, y2, &i, 2 * L_SUBFR ); + + /*-----------------------------------------------------------------* + * Gain encoding + *-----------------------------------------------------------------*/ + + gain_enc_lbr( st->hBstr, st->acelp_cfg.gains_mode, GENERIC, i_subfr, xn, y1, y2, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, gains_mem, clip_gain, 2 * L_SUBFR ); + } + else + { + /*-----------------------------------------------------------------* + * Innovation & gain encoding + *-----------------------------------------------------------------*/ + + inov_encode( st, Local_BR, 0, st->L_frame, st->last_L_frame, LOCAL_CT, WB, 1, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, *pt_pitch, xn2, code, y2, &unbits_PI, L_SUBFR ); + + gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, st->L_frame, i_subfr, -1, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); + } + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); + + if ( use_fcb != 0 ) + { + hLPDmem->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_subfr, 0 ); + } + else + { + hLPDmem->tilt_code = 0.0f; + } + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + if ( use_fcb != 0 ) + { + st->hGSCEnc->mem_w0_tmp = xn[L_subfr - 1] - ( gain_pit * y1[L_subfr - 1] ) - ( gain_code * y2[L_subfr - 1] ); + } + else + { + st->hGSCEnc->mem_w0_tmp = xn[L_subfr - 1] - ( gain_pit * y1[L_subfr - 1] ); + } + + /*-----------------------------------------------------------------* + * Construct adaptive part of the excitation + * Save the non-enhanced excitation for FEC_exc + *-----------------------------------------------------------------*/ + + if ( use_fcb != 0 ) + { + for ( i = 0; i < L_subfr; i++ ) + { + exc[i + i_subfr] = gain_pit * exc[i + i_subfr] + gain_code * code[i]; + } + } + else + { + for ( i = 0; i < L_subfr; i++ ) + { + exc[i + i_subfr] = gain_pit * exc[i + i_subfr]; + } + } + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[]. + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &exc[i_subfr], &synth[i_subfr], L_subfr, st->hGSCEnc->mem_syn_tmp, 1 ); + + if ( L_subfr == 5 * L_SUBFR ) + { + cum_gpit = gpit_tmp; + + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + + p_Aw += 5 * ( M + 1 ); + p_Aq += 5 * ( M + 1 ); + } + else if ( L_subfr == 5 * L_SUBFR / 2 ) + { + if ( i_subfr == 0 ) + { + cum_gpit = gpit_tmp * .4f; + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + p_Aw += 2 * ( M + 1 ); + p_Aq += 2 * ( M + 1 ); + } + else + { + cum_gpit += gpit_tmp * .6f; + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + p_Aw += 3 * ( M + 1 ); + p_Aq += 3 * ( M + 1 ); + } + } + else if ( L_subfr == 2 * L_SUBFR ) + { + if ( i_subfr == 0 ) + { + cum_gpit = gpit_tmp * .5f; + } + else + { + cum_gpit += gpit_tmp * .5f; + } + + p_Aw += 2 * ( M + 1 ); + p_Aq += 2 * ( M + 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + } + else if ( L_subfr == 4 * L_SUBFR ) + { + cum_gpit = gpit_tmp; + + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + + p_Aw += 4 * ( M + 1 ); + p_Aq += 4 * ( M + 1 ); + } + else + { + if ( i_subfr == 0 ) + { + cum_gpit = gpit_tmp * .25f; + } + else + { + cum_gpit += gpit_tmp * .25f; + } + + pt_pitch++; + p_Aw += ( M + 1 ); + p_Aq += ( M + 1 ); + } + } + + *gpit = 0.1f * *gpit + 0.9f * cum_gpit; + + return; +} diff --git a/lib_enc/enc_ppp.c b/lib_enc/enc_ppp.c new file mode 100644 index 0000000000..c7abd135ce --- /dev/null +++ b/lib_enc/enc_ppp.c @@ -0,0 +1,208 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------- + * encod_ppp() + * + * Encode PPP frames in SC-VBR + *-------------------------------------------------------------------*/ + +ivas_error encod_ppp( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : 12k8 Lp coefficient */ + float *res, /* i/o: residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* o : excitation for SWB TBE */ +) +{ + float xn[L_SUBFR]; /* Target vector for pitch search */ + float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ + int16_t i_subfr; /* tmp variables */ + const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector */ + int16_t k; + float p_Aq_old[M + 1], excQ_ppp[L_FRAME], p_Aq_curr[M], pitch[NB_SUBFR]; + float LPC_de_old[M + 1], LPC_de_curr[M + 1]; + int16_t rate_ctrl; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; + BSTR_ENC_HANDLE hBstr = st->hBstr; + ivas_error error; + + error = IVAS_ERR_OK; + + rate_ctrl = hSC_VBR->rate_control; + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + p_Aw = Aw; + p_Aq = Aq; + + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------* + * Bandwidth expansion of A(z) filter coefficients + * Find the the excitation search target "xn" and innovation + * target in residual domain "cn" + * Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + + mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); + + find_targets( speech, hLPDmem->mem_syn, i_subfr, &hLPDmem->mem_w0, p_Aq, res, L_SUBFR, p_Aw, TILT_FAC, xn, NULL, h1 ); + + /* call voiced encoder at this point */ + if ( i_subfr == 0 ) /* generate the L_FRAME exc */ + { + for ( k = 0; k < M; k++ ) + { + p_Aq_curr[k] = p_Aq[k + ( 3 * ( M + 1 ) ) + 1]; + } + + lsp2a_stab( st->lsp_old, p_Aq_old, M ); + + deemph_lpc( p_Aq_curr, p_Aq_old, LPC_de_curr, LPC_de_old, 1 ); + + /* last frame-end lpc and curr frame-end lpc */ + if ( ( error = ppp_voiced_encoder( hBstr, st->hSC_VBR, st->bwidth, st->last_coder_type_raw, st->old_pitch_buf, res, excQ_ppp, st->pitch[1], LPC_de_old, LPC_de_curr, exc, pitch ) ) != IVAS_ERR_OK ) + { + return error; + } + + + if ( hSC_VBR->bump_up ) + { + i_subfr = L_FRAME; + } + } + + if ( hSC_VBR->bump_up != 1 ) + { + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + * or in case of floating point encoder & fixed p. decoder + *-----------------------------------------------------------------*/ + + gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, st->coder_type, xn, st->clip_var ); + + /* run the above to maintain gain clipping memories */ + gp_clip_test_gain_pit( st->element_mode, st->core_brate, hSC_VBR->prev_ppp_gain_pit, st->clip_var ); + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[]. + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &excQ_ppp[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + + p_Aw += ( M + 1 ); + p_Aq += ( M + 1 ); + } + + } /* end of subframe loop */ + + + if ( hSC_VBR->bump_up ) + { + /* PPP failed, bump up */ + hSC_VBR->ppp_mode = 0; + st->core_brate = ACELP_7k20; + hSC_VBR->pppcountE = 0; + + if ( hSC_VBR->set_ppp_generic ) + { + st->coder_type = GENERIC; + } + else + { + st->coder_type = VOICED; + } + + /* delete previous indices */ + reset_indices_enc( hBstr, MAX_NUM_INDICES ); + + /* signalling matrix (writing of signalling bits) */ + signalling_enc( st ); + } + else + { + mvr2r( excQ_ppp, exc, L_FRAME ); + + /*-----------------------------------------------------------------* + * Updates: last value of new target is stored in mem_w0 + *-----------------------------------------------------------------*/ + + hLPDmem->mem_w0 = xn[L_SUBFR - 1] - ( exc[L_FRAME - 1] ); + + mvr2r( exc, exc2, L_FRAME ); + + hLPDmem->dispMem[0] = 2; + hLPDmem->dispMem[2] = hSC_VBR->prev_ppp_gain_pit; + + for ( k = 3; k < 7; k++ ) + { + hLPDmem->dispMem[k] = hLPDmem->dispMem[k - 1]; + } + hLPDmem->tilt_code = hSC_VBR->prev_tilt_code; + mvr2r( pitch, pitch_buf, NB_SUBFR ); + pitch_buf[NB_SUBFR16k - 1] = pitch[NB_SUBFR - 1]; + interp_code_5over2( exc2, bwe_exc, L_FRAME ); + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + } + + hSC_VBR->rate_control = rate_ctrl; + + set_f( hSC_VBR->nelp_lp_fit_mem, 0, NELP_LP_ORDER * 2 ); + + return error; +} diff --git a/lib_enc/enc_prm.c b/lib_enc/enc_prm.c new file mode 100644 index 0000000000..c48e171517 --- /dev/null +++ b/lib_enc/enc_prm.c @@ -0,0 +1,924 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * writeTCXMode() + * + * write TCX mode + *--------------------------------------------------------------------*/ + +void writeTCXMode( + Encoder_State *st, /* i/o: encoder state structure */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t is_mct, +#endif + int16_t *nbits_start /* o : nbits start */ +) +{ + uint16_t index; + int16_t idx, start_idx; + int16_t nBits; + + if ( st->tcxonly ) + { + push_next_indice( hBstr, st->core == TCX_10_CORE, 1 ); + + if ( st->clas == UNVOICED_CLAS ) + { + index = 0; + } + else if ( st->clas == VOICED_TRANSITION || st->clas == UNVOICED_TRANSITION ) + { + index = 1; + } + else if ( st->clas == VOICED_CLAS ) + { + index = 2; + } + else + { + index = 3; + } + + push_next_indice( hBstr, index, 2 ); + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + if ( st->element_mode == IVAS_CPE_MDCT && !is_mct ) + { + push_next_indice( hBstr, st->vad_flag, 1 ); + } +#endif + } + else + { + if ( st->core == ACELP_CORE ) + { + /* write the RF signalling information */ + if ( st->rf_mode == 1 ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + idx = 0; + while ( acelp_sig_tbl[idx] != st->total_brate ) /* total bitrate is kept at 13.2kbps */ + { + idx++; + } + + /* retrieve the number of bits for signalling */ + nBits = (int16_t) acelp_sig_tbl[++idx]; + + /* retrieve the signalling index */ + start_idx = ++idx; + while ( acelp_sig_tbl[idx] != SIG2IND( st->coder_type, st->bwidth, st->sharpFlag, st->rf_mode ) ) + { + idx++; + } + push_next_indice( hBstr, idx - start_idx, nBits ); + push_next_indice( hBstr, 0, 1 ); /* Indicate to the decoder that the core is ACELP*/ + *nbits_start = 3; + } + else + { + push_next_indice( hBstr, st->coder_type, 3 ); + } + } + else + { + if ( st->mdct_sw == MODE1 ) + { + /* 2 bits instead of 3 as TCX is already signaled */ + push_next_indice( hBstr, st->hTcxCfg->coder_type, 2 ); + } + else + { + if ( st->mdct_sw_enable == MODE2 ) + { + push_next_indice( hBstr, 1, 1 ); /* TCX */ + push_next_indice( hBstr, 0, 1 ); /* not HQ_CORE */ + push_next_indice( hBstr, st->hTcxCfg->coder_type, 2 ); + } + else + { + /*write the RF signalling information*/ + if ( st->rf_mode == 1 ) + { + /* find the section in the ACELP signalling table corresponding to bitrate */ + idx = 0; + while ( acelp_sig_tbl[idx] != st->total_brate ) + { + idx++; + } + + /* retrieve the number of bits for signalling */ + nBits = (int16_t) acelp_sig_tbl[++idx]; + + if ( st->hTcxCfg->coder_type == VOICED || st->hTcxCfg->coder_type == GENERIC || st->hTcxCfg->coder_type == TRANSITION ) + { + st->sharpFlag = 1; + } + else + { + st->sharpFlag = 0; + } + + /* retrieve the signalling index */ + start_idx = ++idx; + while ( acelp_sig_tbl[idx] != SIG2IND( st->hTcxCfg->coder_type, st->bwidth, st->sharpFlag, st->rf_mode ) ) + { + idx++; + } + push_next_indice( hBstr, idx - start_idx, nBits ); + push_next_indice( hBstr, 1, 1 ); /* Indicate to the decoder that the core is TCX*/ + *nbits_start = 3; + } + else + { + push_next_indice( hBstr, ACELP_MODE_MAX + st->hTcxCfg->coder_type, 3 ); + } + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * writeTCXWindowing() + * + * write TCX transform type + *-------------------------------------------------------------------*/ + +void writeTCXWindowing( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + const int16_t overlap_mode /* i : overlap mode */ +) +{ +#ifdef DEBUGGING + assert( overlap_mode != NOT_SUPPORTED && overlap_mode <= ALDO_WINDOW && overlap_mode >= FULL_OVERLAP ); /*1 is not allowed!*/ +#endif + + if ( overlap_mode == MIN_OVERLAP ) + { + push_next_indice( hBstr, 2, 2 ); + } + else if ( overlap_mode == HALF_OVERLAP ) + { + push_next_indice( hBstr, 3, 2 ); + } + else + { + push_next_indice( hBstr, 0, 1 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * writeLPCparam() + * + * write LTC parameters + *-------------------------------------------------------------------*/ + +void writeLPCparam( + Encoder_State *st, /* i/o: encoder state structure */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + const int16_t param_lpc[], /* i : LPC parameters to write */ + const int16_t bits_param_lpc[], /* i : bits per LPC parameter */ + const int16_t no_param_lpc, /* i : number of LPC parameters */ + int16_t *nbits_lpc /* o : LPC bits written */ +) +{ + int16_t numlpc; + + if ( st->enableTcxLpc && st->core != ACELP_CORE ) + { + /* Encode the indices */ + *nbits_lpc = enc_lsf_tcxlpc( ¶m_lpc, hBstr ); + } + else + { + if ( st->lpcQuantization == 0 ) + { + /* LPC quantizer */ + if ( st->core == TCX_20_CORE ) + { + numlpc = 1; + } + else + { + numlpc = 2; + } + + *nbits_lpc = encode_lpc_avq( hBstr, numlpc, param_lpc, st->core, st->element_mode ); + } + else if ( st->lpcQuantization == 1 ) + { + if ( st->sr_core == INT_FS_16k && st->coder_type == VOICED && st->core == ACELP_CORE ) + { + assert( st->element_mode == EVS_MONO ); + + *nbits_lpc = lsf_bctcvq_encprm( hBstr, param_lpc, bits_param_lpc, no_param_lpc ); + } + else + { + *nbits_lpc = lsf_msvq_ma_encprm( hBstr, param_lpc, st->core, st->coder_type, st->acelp_cfg.midLpc, bits_param_lpc, no_param_lpc ); + } + } + else + { + assert( 0 ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * enc_prm_hm() + * + * + *-------------------------------------------------------------------*/ + +static void enc_prm_hm( + const int16_t *prm_hm, + BSTR_ENC_HANDLE hBstr, + const int16_t coder_type, + const int16_t L_frame ) +{ + /* Disable HM for non-GC,VC modes */ + if ( coder_type != VOICED && coder_type != GENERIC ) + { + return; + } + + /* Flag */ + push_next_indice( hBstr, prm_hm[0], 1 ); + + if ( prm_hm[0] ) + { + /* Periodicy index */ + EncodeIndex( L_frame >= L_FRAME, prm_hm[1], hBstr ); + + if ( coder_type == VOICED ) + { + /* Gain index */ + push_next_indice( hBstr, prm_hm[2], kTcxHmNumGainBits ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * writeTCXparam() + * + * write TCX core parameters + *-------------------------------------------------------------------*/ + +void writeTCXparam( + Encoder_State *st, /* i/o: Encoder State handle */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + CONTEXT_HM_CONFIG hm_cfg[], /* i/o: HM config */ + int16_t param[], /* i : parameters */ + const int16_t nbits_header, + const int16_t nbits_start, + const int16_t nbits_lpc, + const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ + int16_t p_param[2], /* i/o: pointer to parameters from previous bs writing */ + const int16_t target_bitsTCX10[2], + const int16_t pre_past_flag ) +{ + int16_t *prm; + int16_t j, k, nSubframes, core, last_core; + int16_t lg, lgFB, hm_size, flag_ctx_hm; + int16_t total_nbbits, nbits_igf, nbits_tcx; + int16_t nTnsParams, nTnsBits; + int16_t pre_part, post_part; +#ifdef DEBUG_PLOT_BITS + int16_t tmp = hBstr->nb_bits_tot; +#endif + + if ( pre_past_flag == 0 ) + { + pre_part = 1; + post_part = 0; + } + else if ( pre_past_flag == 1 ) + { + pre_part = 0; + post_part = 1; + } + else + { + pre_part = 1; + post_part = 1; + } + + /* Initialization */ + core = st->core; + last_core = st->last_core; + nbits_igf = 0; + + nSubframes = 1; + if ( core == TCX_10_CORE ) + { + nSubframes = 2; + } + + /* loop over subframes */ + for ( k = 0; k < nSubframes; k++ ) + { + if ( st->element_mode < IVAS_CPE_MDCT && k == 0 && st->igf && core == TCX_10_CORE ) + { + nbits_igf = IGFEncWriteConcatenatedBitstream( st->hIGFEnc, hBstr ); + } + + flag_ctx_hm = 0; + + prm = param + ( k * NPRM_DIV ); + j = 0; + + nbits_tcx = total_nbbits = hBstr->nb_bits_tot - nbits_start; + + if ( pre_part && st->enablePlcWaveadjust && k == ( nSubframes - 1 ) ) + { + push_next_indice( hBstr, st->Tonal_SideInfo, 1 ); + } + + if ( post_part ) + { + /* TCX Gain */ + push_next_indice( hBstr, prm[j++], NBITS_TCX_GAIN ); + + /* TCX Noise Filling = NBITS_NOISE_FILL_LEVEL bits */ + push_next_indice( hBstr, prm[j++], NBITS_NOISE_FILL_LEVEL ); + } + else + { + j += 1 + NOISE_FILL_RANGES; + } + + /* LTP data */ + if ( pre_part ) + { + if ( ( k == 0 ) && ( st->hTcxEnc->tcxltp || ( st->sr_core > 25600 ) ) ) /* PLC pitch info for HB */ + { + if ( prm[j] ) + { + push_next_indice( hBstr, 1, 1 ); + push_next_indice( hBstr, prm[j + 1], 9 ); + push_next_indice( hBstr, prm[j + 2], 2 ); + } + else + { + push_next_indice( hBstr, 0, 1 ); + } +#ifdef DEBUG_PLOT_BITS + tmp = hBstr->nb_bits_tot - tmp; + dbgwrite( &tmp, sizeof( int16_t ), 1, 1, "./res/bits_LTP" ); +#endif + } + j += 3; + } + else + { + j += p_param[k] - 2; + } + + /* TCX spectral data */ + lg = st->last_L_frame >> ( nSubframes - 1 ); + lgFB = st->hTcxCfg->tcx_coded_lines >> ( nSubframes - 1 ); + if ( post_part && k == 0 && last_core == ACELP_CORE ) + { + /* ACE->TCX transition */ + lg += st->hTcxCfg->tcx_offset; + lgFB += lgFB >> ( 3 - nSubframes ); + + if ( st->hTcxCfg->lfacNext < 0 ) + { + lg -= st->hTcxCfg->lfacNext; + } + } + + if ( pre_part ) + { + /* TNS data */ + nTnsParams = 0; + nTnsBits = 0; + + if ( st->hTcxCfg->fIsTNSAllowed ) + { + SetTnsConfig( st->hTcxCfg, core == TCX_20_CORE, ( last_core == ACELP_CORE ) && ( k == 0 ) ); + + if ( no_param_tns ) + { + push_next_indice( hBstr, ( st->hTcxEnc->tnsData[k].nFilters < 0 ? 1 : 0 ), 1 ); /* common_tns_data[] for subframe k */ + } + if ( no_param_tns && ( st->hTcxEnc->tnsData[k].nFilters < 0 ) ) + { + /* a negative filter count means that the filters are identical to those in the first channel at the same sub-frame */ + nTnsParams = no_param_tns[k]; + } + else + { + WriteTnsData( st->hTcxCfg->pCurrentTnsConfig, prm + j, &nTnsParams, hBstr, &nTnsBits ); + } + if ( no_param_tns ) + { + nTnsBits++; + } + j += nTnsParams; + } +#ifdef DEBUG_PLOT_BITS + dbgwrite( &nTnsBits, sizeof( int16_t ), 1, 1, "./res/bits_TNS" ); +#endif + + if ( post_part ) + { + hm_size = (int16_t) ( 2.0f * st->hTcxCfg->bandwidth * (float) lg ); + + if ( st->hTcxEnc->tcx_lpc_shaped_ari && last_core != ACELP_CORE && core == TCX_20_CORE ) + { + enc_prm_hm( &prm[j], hBstr, st->hTcxCfg->coder_type, hm_size ); + } + + /*Context HM flag*/ + if ( st->hTcxCfg != NULL && st->hTcxCfg->ctx_hm && !( last_core == ACELP_CORE && k == 0 ) ) + { + push_next_indice( hBstr, prm[j], 1 ); + + if ( prm[j] ) + { + EncodeIndex( hm_size >= 256, prm[j + 1], hBstr ); + + flag_ctx_hm = 1; + } + } + } + j += NPRM_CTX_HM; + + if ( post_part ) + { + /* IGF data */ + if ( st->igf && core == TCX_20_CORE ) + { + st->hIGFEnc->infoTotalBitsPerFrameWritten = 0; + IGFEncWriteBitstream( st->hIGFEnc, hBstr, &st->hIGFEnc->infoTotalBitsPerFrameWritten, ( last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); + } + + total_nbbits = hBstr->nb_bits_tot - nbits_start; + + if ( core == TCX_20_CORE ) + { + if ( st->rf_mode ) + { + total_nbbits += st->rf_target_bits_write; + } + nbits_tcx = st->bits_frame_core - total_nbbits; + } + else /* TCX_10_CORE */ + { + nbits_tcx = ( ( st->bits_frame_core - nbits_header - nbits_lpc - nbits_igf + 1 - k ) >> 1 ) - ( total_nbbits - nbits_tcx ); + } + } + else + { + /*Context HM flag*/ +#ifdef DEBUGGING + assert( st->hTcxCfg->ctx_hm == 0 ); +#endif + p_param[k] = j; + } + } + else + { + nbits_tcx = st->bits_frame_channel; + if ( core == TCX_10_CORE ) + { + nbits_tcx = target_bitsTCX10[k] - NBITS_TCX_GAIN - NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; + } + } + + if ( post_part ) + { + if ( st->hTcxEnc->tcx_lpc_shaped_ari && core == TCX_20_CORE ) + { + push_next_bits( hBstr, (uint16_t *) &prm[++j], nbits_tcx ); + j += nbits_tcx; + } + else + { + if ( st->element_mode > EVS_MONO ) + { + RCcontextMapping_encode2_no_mem_s17_LCS( hBstr, prm + j, lgFB, prm[j - 1], /* lastnz */ + nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg[k] : NULL ); + } + else + { + ACcontextMapping_encode2_no_mem_s17_LC( hBstr, prm + j, lgFB, prm[j - 1], /* lastnz */ + nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg[k] : NULL ); + } + } + } + } +#ifdef DEBUG_PLOT_BITS + if ( pre_part ) + { + if ( nSubframes == 1 ) + { + tmp = 0; + dbgwrite( &tmp, sizeof( int16_t ), 1, 1, "./res/bits_TNS" ); + } + } +#endif + + return; +} + + +/*-----------------------------------------------------------------* + * Function enc_prm_rf() * + * ~~~~~~~~~~~~~~~~~~~~~~ * + * * + * encode RF parameters for ACELP and TCX partial copy * + *-----------------------------------------------------------------*/ + +void enc_prm_rf( + Encoder_State *st, + const int16_t rf_frame_type, + const int16_t fec_offset ) +{ + int16_t sfr, nb_subfr, n, index; + int16_t ltp_mode, ltf_mode, gains_mode; + + RF_ENC_HANDLE hRF = st->hRF; + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + nb_subfr = st->nb_subfr; + + /* partial copy bitstream writing */ + if ( rf_frame_type >= RF_TCXFD && rf_frame_type <= RF_TCXTD2 ) + { + /* TCX frames partial copy write */ + if ( rf_frame_type == RF_TCXFD ) + { + push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][0], lsf_numbits[0] ); /* VQ 1 */ + push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][1], lsf_numbits[1] ); /* VQ 2 */ + push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][2], lsf_numbits[2] ); /* VQ 3 */ + } + + /* classification */ + if ( hRF->rf_clas[fec_offset] == UNVOICED_CLAS ) + { + index = 0; + } + else if ( ( hRF->rf_clas[fec_offset] == VOICED_TRANSITION ) || ( hRF->rf_clas[fec_offset] == UNVOICED_TRANSITION ) ) + { + index = 1; + } + else if ( hRF->rf_clas[fec_offset] == VOICED_CLAS ) + { + index = 2; + } + else + { + index = 3; + } + push_next_indice( hBstr, index, 2 ); + + if ( rf_frame_type == RF_TCXFD ) + { + /* TCX global gain = 7 bits */ + push_next_indice( hBstr, hRF->rf_gain_tcx[fec_offset], 7 ); + } + else + { + /* LTP data */ + if ( ( rf_frame_type == RF_TCXTD1 || rf_frame_type == RF_TCXTD2 ) && hTcxEnc->tcxltp ) + { + push_next_indice( hBstr, hRF->rf_tcxltp_param[fec_offset], 9 ); + } + } + } + else if ( rf_frame_type == 7 ) /* NELP bitstream writing */ + { + /* LSF indices */ + push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][0], 8 ); /* VQ 1 */ + push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][1], 8 ); /* VQ 2 */ + + /* NELP gain indices */ + push_next_indice( hBstr, hRF->rf_indx_nelp_iG1[fec_offset], 5 ); + push_next_indice( hBstr, hRF->rf_indx_nelp_iG2[fec_offset][0], 6 ); + push_next_indice( hBstr, hRF->rf_indx_nelp_iG2[fec_offset][1], 6 ); + + /* NELP filter selection index */ + push_next_indice( hBstr, hRF->rf_indx_nelp_fid[fec_offset], 2 ); + + /* tbe gainFr */ + push_next_indice( hBstr, hRF->rf_indx_tbeGainFr[fec_offset], 5 ); + } + else if ( rf_frame_type >= 4 ) /* rf_frame_type ALL_PRED: 4, NO_PRED: 5, GEN_PRED: 6 */ + { + /* LSF indices */ + push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][0], 8 ); /* VQ 1 */ + push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][1], 8 ); /* VQ 2 */ + + /* ES pred */ + push_next_indice( hBstr, hRF->rf_indx_EsPred[fec_offset], 3 ); + + ltp_mode = ACELP_LTP_MODE[1][1][rf_frame_type]; + ltf_mode = ACELP_LTF_MODE[1][1][rf_frame_type]; + gains_mode = ACELP_GAINS_MODE[1][1][rf_frame_type]; + + /* Subframe parameters */ + for ( sfr = 0; sfr < nb_subfr; sfr++ ) + { + /* Pitch lag (5, or 8 bits) */ + n = ACELP_LTP_BITS_SFR[ltp_mode][sfr]; + if ( n != 0 ) + { + push_next_indice( hBstr, hRF->rf_indx_pitch[fec_offset][sfr], n ); + } + + /* Adaptive codebook filtering (1 bit) */ + if ( ltf_mode == 2 ) + { + push_next_indice( hBstr, hRF->rf_indx_ltfMode[fec_offset][sfr], 1 ); + } + + /*Innovative codebook*/ + if ( ( rf_frame_type == RF_NOPRED ) || ( rf_frame_type == RF_GENPRED && ( sfr == 0 || sfr == 2 ) ) ) + { + push_next_indice( hBstr, hRF->rf_indx_fcb[fec_offset][sfr], 7 ); + } + + /* Gains (5b, 6b or 7b / subfr) */ + if ( sfr == 0 || sfr == 2 ) + { + n = ACELP_GAINS_BITS[gains_mode]; + push_next_indice( hBstr, hRF->rf_indx_gain[fec_offset][sfr], n ); + } + } + /* tbe gainFr */ + push_next_indice( hBstr, hRF->rf_indx_tbeGainFr[fec_offset], 2 ); + } + + /***************/ + /*IMPORTANT: The last three bits are always the rf_frame_type in the bitstream (for both acelp and tcx partial copy); + the rf_frame_type indicates the length of the partial copy payload at the decoder. + The 2 bits before the rf_frame_type contains the fec_offset */ + + /***************/ + /* write FEC offset just before the rf_frame_type */ + if ( fec_offset == 2 ) + { + push_next_indice( hBstr, 0, 2 ); + } + else if ( fec_offset == 3 || fec_offset == 5 || fec_offset == 7 ) + { + push_next_indice( hBstr, ( fec_offset - 1 ) / 2, 2 ); + } + + /* write RF frame type last in the bitstream */ + push_next_indice( hBstr, rf_frame_type, 3 ); + + return; +} + +/*-----------------------------------------------------------------* + * Function enc_prm() * + * ~~~~~~~~~~~~~~~~~~~~~~ * + * * + * encode parameters according to selected mode including * + * the FAC parameters when transition occurs. * + *-----------------------------------------------------------------*/ + +void enc_prm( + Encoder_State *st, /* i/o: encoder state structure */ + int16_t param[], /* i : parameters */ + int16_t param_lpc[], /* i : LPC parameters */ + CONTEXT_HM_CONFIG hm_cfg[], + const int16_t bits_param_lpc[], + const int16_t no_param_lpc ) +{ + int16_t j, n, sfr, core, last_core, nb_subfr; + int16_t *prm; + int16_t nbits_start, /*total_nbbits,*/ nbits_header, nbits_lpc; + int16_t ix, j_old, wordcnt, bitcnt; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + + /*--------------------------------------------------------------------------------* + * initialization + *--------------------------------------------------------------------------------*/ + + nbits_lpc = 0; + + /* Useful parameters */ + nb_subfr = st->nb_subfr; + core = st->core; + last_core = st->last_core; + + /* Initialize pointers */ + prm = param; + + /* Init counters */ + j = 0; + nbits_start = hBstr->nb_bits_tot; + + /*--------------------------------------------------------------------------------* + * HEADER + *--------------------------------------------------------------------------------*/ + + if ( st->mdct_sw == MODE1 ) + { + /* Adjust st->bits_frame_core not to subtract MODE2 bandwidth signaling */ + st->bits_frame_core += FrameSizeConfig[st->frame_size_index].bandwidth_bits; + + /* Write MODE1 core & coder_type signaling */ + signalling_mode1_tcx20_enc( st, 1 ); + } + + /* EVS header */ + /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + writeTCXMode( st, st->hBstr, 0, /* <- is_mct */ &nbits_start ); +#else + writeTCXMode( st, st->hBstr, &nbits_start ); +#endif + + /* write last_core for error concealment */ + if ( !( core == ACELP_CORE && st->hTcxCfg->lfacNext <= 0 ) ) + { + push_next_indice( hBstr, ( ( last_core != ACELP_CORE ) || ( core == TCX_10_CORE ) ), 1 ); + } + + /* write TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ + if ( core != ACELP_CORE ) + { + writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); + } + + if ( st->hPlcExt && st->hPlcExt->enableGplc ) + { + /* encode side information. */ + enc_prm_side_Info( st->hPlcExt, st ); + } + + if ( st->glr ) + { + if ( core != ACELP_CORE || st->coder_type == INACTIVE || + ( st->last_core == ACELP_CORE && st->last_coder_type_raw == INACTIVE ) || + st->glr_reset ) + { + st->glr_idx[0] = 0; + } + + if ( core == ACELP_CORE ) + { + push_next_indice( hBstr, st->glr_idx[0], G_LPC_RECOVERY_BITS ); + } + } + + st->glr_reset = 0; + + nbits_header = hBstr->nb_bits_tot - nbits_start; + + /*--------------------------------------------------------------------------------* + * LPC parameters + *--------------------------------------------------------------------------------*/ + + writeLPCparam( st, hBstr, param_lpc, bits_param_lpc, no_param_lpc, &nbits_lpc ); + + + /*--------------------------------------------------------------------------------* + * ACELP parameters + *--------------------------------------------------------------------------------*/ + + if ( core == ACELP_CORE ) + { + /* Adaptive BPF (2 bits)*/ + n = ACELP_BPF_BITS[st->acelp_cfg.bpf_mode]; + + if ( n != 0 ) + { + push_next_indice( hBstr, st->bpf_gain_param, n ); + } + + /* Mean energy (2 or 3 bits) */ + n = ACELP_NRG_BITS[st->acelp_cfg.nrg_mode]; + + if ( n != 0 ) + { + push_next_indice( hBstr, prm[j++], n ); + } + + /* Subframe parameters */ + for ( sfr = 0; sfr < nb_subfr; sfr++ ) + { + /* Pitch lag (4, 5, 6, 8 or 9 bits) */ + n = ACELP_LTP_BITS_SFR[st->acelp_cfg.ltp_mode][sfr]; + + if ( n != 0 ) + { + push_next_indice( hBstr, prm[j++], n ); + } + + /* Adaptive codebook filtering (1 bit) */ + if ( st->acelp_cfg.ltf_mode == 2 ) + { + push_next_indice( hBstr, prm[j++], 1 ); + } + + /*Innovative codebook*/ + + j_old = j; + if ( ( st->acelp_cfg.fixed_cdk_index[sfr] >= ACELP_FIXED_CDK_NB ) || ( st->acelp_cfg.fixed_cdk_index[sfr] < 0 ) ) + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "ACELP bits allocation: wrong fixed cdk bit allocation" ); + } + + wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) >> 4; + bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) & 15; + for ( ix = 0; ix < wordcnt; ix++ ) + { + push_next_indice( hBstr, prm[j++], 16 ); + } + + if ( bitcnt ) + { + push_next_indice( hBstr, prm[j++], bitcnt ); + } + j = j_old + 8; + + /* Gains (5b, 6b or 7b / subfr) */ + n = ACELP_GAINS_BITS[st->acelp_cfg.gains_mode[sfr]]; + push_next_indice( hBstr, prm[j++], n ); + } + } + + + /*--------------------------------------------------------------------------------* + * TCX20/10 parameters + *--------------------------------------------------------------------------------*/ + + if ( core == TCX_20_CORE || core == TCX_10_CORE ) + { + writeTCXparam( st, hBstr, hm_cfg, param, nbits_header, nbits_start, nbits_lpc, NULL, NULL, NULL, -1 ); + } + + /*total_nbbits = hBstr->nb_bits_tot - nbits_start;*/ + + return; +} diff --git a/lib_enc/enc_tran.c b/lib_enc/enc_tran.c new file mode 100644 index 0000000000..ee1768067e --- /dev/null +++ b/lib_enc/enc_tran.c @@ -0,0 +1,345 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * encod_tran() + * + * Encode transition (TC) frames + *-------------------------------------------------------------------*/ + +int16_t encod_tran( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : LP coefficients */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const float *res, /* i : residual signal */ + float *syn, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* i/o: excitation for SWB TBE */ + int16_t tc_subfr, /* i/o: TC subframe classification */ + int16_t position, /* i : maximum of residual signal index */ + int16_t *unbits /* i/o: number of unused bits */ +) +{ + float xn[L_SUBFR]; /* Target vector for pitch search */ + float xn2[L_SUBFR]; /* Target vector for codebook search */ + float cn[L_SUBFR]; /* Target vector in residual domain */ + float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ + float code[L_SUBFR]; /* Fixed codebook excitation */ + float y1[L_SUBFR]; /* Filtered adaptive excitation */ + float y2[L_SUBFR]; /* Filtered algebraic excitation */ + float gain_pit; /* Pitch gain */ + float voice_fac; /* Voicing factor */ + float gain_code; /* Gain of code */ + float gain_inov; /* inovation gain */ + int16_t i, i_subfr; /* tmp variables */ + int16_t T0_min, T0_max; /* pitch and TC variables */ + int16_t unbits_ACELP; + int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ + float *pt_pitch; /* pointer to floating pitch buffer */ + float g_corr[6]; /* ACELP correlation values and gain pitch */ + int16_t clip_gain; /* LSF clip gain */ + const float *p_Aw, *p_Aq; /* pointer to LP filter coefficient vector */ + float gain_preQ; /* Gain of prequantizer excitation */ + float code_preQ[L_SUBFR]; /* Prequantizer excitation */ + int16_t Jopt_flag; /* joint optimization flag */ + int16_t unbits_PI; /* saved bits for EVS_PI */ + float norm_gain_code; + int16_t L_frame; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + gain_pit = 0; + gain_code = 0; + gain_preQ = 0; + unbits_PI = 0; + + L_frame = st->L_frame; + + if ( L_frame == L_FRAME ) + { + T0_max = PIT_MAX; + T0_min = PIT_MIN; + } + else /* L_frame == L_FRAME16k */ + { + T0_max = PIT16k_MAX; + T0_min = PIT16k_MIN; + } + + Jopt_flag = 0; + unbits_ACELP = *unbits; + *unbits = 0; + + p_Aw = Aw; + p_Aq = Aq; + pt_pitch = pitch_buf; + gain_preQ = 0; + set_f( code_preQ, 0, L_SUBFR ); + + /*----------------------------------------------------------------* + * ACELP subframe loop + *----------------------------------------------------------------*/ + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------* + * Find the the excitation search target "xn" and innovation + * target in residual domain "cn" + * Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + + mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); + + find_targets( speech, hLPDmem->mem_syn, i_subfr, &hLPDmem->mem_w0, p_Aq, res, L_SUBFR, p_Aw, st->preemph_fac, xn, cn, h1 ); + + /*-----------------------------------------------------------------* + * TC: subframe determination & + * adaptive/glottal part of excitation construction + *-----------------------------------------------------------------*/ + + transition_enc( st, i_subfr, &tc_subfr, &Jopt_flag, &position, &T0, &T0_frac, &T0_min, &T0_max, exc, y1, h1, xn, xn2, st->clip_var, &gain_pit, g_corr, &clip_gain, &pt_pitch, bwe_exc, &unbits_ACELP ); + + /*-----------------------------------------------------------------* + * Transform domain contribution encoding - active frames + *-----------------------------------------------------------------*/ + + if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) + { + transf_cdbk_enc( st, 0, i_subfr, cn, exc, p_Aq, p_Aw, h1, xn, xn2, y1, y2, Es_pred, &gain_pit, gain_code, g_corr, clip_gain, &gain_preQ, code_preQ, unbits ); + } + + /*-----------------------------------------------------------------* + * ACELP codebook search + pitch sharpening + *-----------------------------------------------------------------*/ + + inov_encode( st, st->core_brate, 0, L_frame, st->last_L_frame, st->coder_type, st->bwidth, st->sharpFlag, i_subfr, tc_subfr, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, *pt_pitch, xn2, code, y2, &unbits_PI, L_SUBFR ); + + if ( ( L_frame == L_FRAME16k ) && ( tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) && ( T0 == 2 * L_SUBFR ) ) + { + Jopt_flag = 1; + } + + /*-----------------------------------------------------------------* + * Quantize the gains + * Test quantized gain of pitch for pitch clipping algorithm + * Update tilt of code: 0.0 (unvoiced) to 0.5 (voiced) + *-----------------------------------------------------------------*/ + + if ( Jopt_flag == 0 ) + { + /* SQ gain_code */ + gain_enc_tc( hBstr, st->acelp_cfg.gains_mode, i_subfr, xn, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); + } + else + { + if ( st->core_brate > ACELP_32k ) + { + /* SQ gain_pit and gain_code */ + gain_enc_SQ( hBstr, st->acelp_cfg.gains_mode, i_subfr, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); + } + else + { + /* VQ gain_pit and gain_code */ + gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, i_subfr, tc_subfr, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); + } + } + + /*-----------------------------------------------------------------* + * update LP-filtered gains for the case of frame erasures + *-----------------------------------------------------------------*/ + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); + + hLPDmem->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + hLPDmem->mem_w0 = xn[L_SUBFR - 1] - ( gain_pit * y1[L_SUBFR - 1] ) - ( gain_code * y2[L_SUBFR - 1] ); + + /*-----------------------------------------------------------------* + * Construct adaptive part of the excitation + * Save the non-enhanced excitation for FEC_exc + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Add the ACELP pre-quantizer contribution + *-----------------------------------------------------------------*/ + + if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) + { + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i + i_subfr] += gain_preQ * code_preQ[i]; + exc[i + i_subfr] += gain_preQ * code_preQ[i]; + } + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[]. + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + + p_Aw += ( M + 1 ); + p_Aq += ( M + 1 ); + pt_pitch++; + } + + /* write reserved bits */ + while ( unbits_PI > 0 ) + { + i = min( unbits_PI, 16 ); + push_indice( hBstr, IND_UNUSED, 0, i ); + unbits_PI -= i; + } + + /* write TC configuration */ + if ( L_frame == L_FRAME ) + { + if ( tc_subfr == TC_0_0 ) + { + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + } + else if ( tc_subfr == TC_0_64 ) + { + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + } + else if ( tc_subfr == TC_0_128 ) + { + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + } + else if ( tc_subfr == TC_0_192 ) + { + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + } + else if ( tc_subfr == L_SUBFR ) + { + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + } + else if ( tc_subfr == 2 * L_SUBFR ) + { + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + } + else if ( tc_subfr == 3 * L_SUBFR ) + { + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + } + } + else /* L_frame == L_FRAME16k */ + { + if ( tc_subfr == 0 ) + { + push_indice( hBstr, IND_TC_SUBFR, 0, 2 ); + } + else if ( tc_subfr == L_SUBFR ) + { + push_indice( hBstr, IND_TC_SUBFR, 1, 2 ); + } + else if ( tc_subfr == 2 * L_SUBFR ) + { + push_indice( hBstr, IND_TC_SUBFR, 2, 2 ); + } + else if ( tc_subfr == 3 * L_SUBFR ) + { + push_indice( hBstr, IND_TC_SUBFR, 3, 2 ); + push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); + } + else if ( tc_subfr == 4 * L_SUBFR ) + { + push_indice( hBstr, IND_TC_SUBFR, 3, 2 ); + push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); + } + } + + /* SC-VBR */ + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->prev_ppp_gain_pit = gain_pit; + st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code; + } + + return tc_subfr; +} diff --git a/lib_enc/enc_uv.c b/lib_enc/enc_uv.c new file mode 100644 index 0000000000..c34419c7df --- /dev/null +++ b/lib_enc/enc_uv.c @@ -0,0 +1,246 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * encod_unvoiced() + * + * Encode unvoiced (UC) frames + *-------------------------------------------------------------------*/ + +void encod_unvoiced( + Encoder_State *st, /* i/o: state structure */ + const float *speech, /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float *Aq, /* i : LP coefficients */ + const float Es_pred, /* i : predicted scaled innov. energy */ + const int16_t uc_two_stage_flag, /* i : flag indicating two-stage UC */ + const float *res, /* i : residual signal */ + float *syn, /* o : core synthesis */ + float *tmp_noise, /* o : long-term noise energy */ + float *exc, /* i/o: current non-enhanced excitation */ + float *pitch_buf, /* o : floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc /* i/o: excitation for SWB TBE */ +) +{ + float xn[L_SUBFR]; /* Target vector for pitch search */ + float h1[L_SUBFR]; /* Impulse response vector */ + float code[L_SUBFR]; /* Fixed codebook excitation */ + float y2[L_SUBFR]; /* Filtered algebraic excitation */ + float *pt_pitch; /* pointer to floating pitch buffer */ + float gain_pit; /* Pitch gain */ + float voice_fac; /* Voicing factor */ + float gain_code; /* gain of code */ + float gain_inov; /* inovative gain */ + const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector */ + int16_t i_subfr; + float norm_gain_code; + float cn[L_SUBFR]; /* Target vector in residual domain */ + float y1[L_SUBFR]; /* Filtered adaptive excitation */ + float code2[L_SUBFR]; /* Gaussian excitation */ + float y22[L_SUBFR]; /* Filtered Gaussian excitation */ + int16_t i, unbits_PI; + ACELP_CbkCorr g_corr; + float gain_code2, g_corr2[6], exc2[L_SUBFR]; + int16_t index; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + gain_pit = 0; + + if ( st->Opt_SC_VBR && st->vad_flag == 0 ) + { + if ( st->hSC_VBR->last_ppp_mode == 1 || st->hSC_VBR->last_nelp_mode == 1 ) + { + /* SC_VBR - reset the encoder, to avoid memory not updated issue for the + case when UNVOICED mode is used to code inactive speech */ + CNG_reset_enc( st, pitch_buf, voice_factors, 1 ); + } + } + + p_Aw = Aw; + p_Aq = Aq; + pt_pitch = pitch_buf; + + /*----------------------------------------------------------------* + * subframe loop + *----------------------------------------------------------------*/ + + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + /*----------------------------------------------------------------* + * Bandwidth expansion of A(z) filter coefficients + * Find the excitation search target "xn" and innovation target in residual domain "cn" + * Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + + mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); + + find_targets( speech, hLPDmem->mem_syn, i_subfr, &hLPDmem->mem_w0, p_Aq, res, L_SUBFR, p_Aw, st->preemph_fac, xn, cn, h1 ); + + if ( !uc_two_stage_flag ) + { + /*----------------------------------------------------------------* + * Unvoiced subframe processing + *----------------------------------------------------------------*/ + + *pt_pitch = gaus_encode( st, i_subfr, h1, xn, exc, &hLPDmem->mem_w0, st->clip_var, &hLPDmem->tilt_code, code, &gain_code, y2, &gain_inov, &voice_fac, &gain_pit, &norm_gain_code ); + } + else + { + /*----------------------------------------------------------------* + * Unvoiced subframe processing in two stages + *----------------------------------------------------------------*/ + + /* No adaptive codebook (UC) */ + set_zero( y1, L_SUBFR ); + set_zero( exc + i_subfr, L_SUBFR ); + + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + *-----------------------------------------------------------------*/ + + gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, UNVOICED, xn, st->clip_var ); + + *pt_pitch = (float) L_SUBFR; + + /*-----------------------------------------------------------------* + * Innovation encoding + *-----------------------------------------------------------------*/ + + inov_encode( st, st->core_brate, 0, L_FRAME, st->last_L_frame, UNVOICED, st->bwidth, 1, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, *pt_pitch, xn, code, y2, &unbits_PI, L_SUBFR ); + + E_corr_xy2( xn, y1, y2, g_corr2, L_SUBFR ); + g_corr.y2y2 = 0.01F + g_corr2[2]; + g_corr.xy2 = 0.01F + -0.5f * g_corr2[3]; + g_corr.y1y2 = 0.01F + 0.5f * g_corr2[4]; + + g_corr.xx = 0.01F + dotp( xn, xn, L_SUBFR ); + + /*----------------------------------------------------------------------* + * Add Gaussian excitation + *----------------------------------------------------------------------*/ + + assert( gain_pit == 0.f ); + + gauss_L2( h1, code2, y2, y22, &gain_code2, g_corr2, hLPDmem->tilt_code, p_Aq, FORMANT_SHARPENING_G1, &( st->seed_acelp ) ); + + g_corr.xy1 = 0.f; + g_corr.y1y1 = g_corr2[0]; + g_corr.y1y2 = g_corr2[4]; + + /*-----------------------------------------------------------------* + * Gain encoding + *-----------------------------------------------------------------*/ + + index = gain_enc_gacelp_uv( code, code2, L_SUBFR, Es_pred, &gain_pit, &gain_code, &gain_code2, &g_corr, &norm_gain_code, &gain_inov, st->flag_noisy_speech_snr ); + +#ifdef DEBUGGING + assert( st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] == 7 && "Error: UC two-stage, only 5+2 gain Q is supported" ); +#endif + push_indice( st->hBstr, IND_GAIN, index, st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] ); + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); + + /*----------------------------------------------------------* + * - voice factor (for codebook tilt sharpening) * + *----------------------------------------------------------*/ + + hLPDmem->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + hLPDmem->mem_w0 = xn[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1] - gain_code2 * y22[L_SUBFR - 1]; + + /*-------------------------------------------------------* + * - Find the total excitation. * + *-------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc2[i] = gain_pit * exc[i + i_subfr]; + exc2[i] += gain_code2 * code2[i]; + exc[i + i_subfr] = exc2[i] + gain_code * code[i]; + } + } + + *tmp_noise = norm_gain_code; + + voice_factors[i_subfr / L_SUBFR] = 0.0f; + + if ( st->hBWE_TD != NULL ) + { + interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); + } + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[]. + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + + p_Aw += ( M + 1 ); + p_Aq += ( M + 1 ); + pt_pitch++; + } + + /* SC-VBR */ + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->prev_ppp_gain_pit = gain_pit; + st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code; + } + + return; +} diff --git a/lib_enc/energy.c b/lib_enc/energy.c new file mode 100644 index 0000000000..e69063b873 --- /dev/null +++ b/lib_enc/energy.c @@ -0,0 +1,287 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "cnst.h" +#include "rom_enc.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * background_update() + * + * + *-------------------------------------------------------------------*/ + +void background_update( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + float frame_energy, /* i : current frame energy */ + const int16_t update_flag, /* i : current frame update flag */ + const int16_t music_backgound_f, /* i : background music flag */ + const float snr ) +{ + int16_t i, SNR_sb_num; + float *sb_bg_energy = hVAD_CLDFB->sb_bg_energy; + float *frame_sb_energy = hVAD_CLDFB->frame_sb_energy; + float *f_tonality_rate = hVAD_CLDFB->f_tonality_rate; + float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; + int16_t frameloop = hVAD_CLDFB->frameloop; + float t_bg_energy = hVAD_CLDFB->t_bg_energy; + + SNR_sb_num = ENERGY_BAND_NUM[hVAD_CLDFB->bw_index - CLDFBVAD_NB_ID]; + + frame_energy = frame_energy + 0.0001f; + + if ( ( frameloop < 60 ) && ( frameloop > 5 ) && ( f_tonality_rate[0] < 0.56 ) && + ( f_tonality_rate[1] < 0.5 ) && ltd_stable_rate[1] < 0.06 && snr < 2.5f ) + { + if ( frameloop < 50 ) + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; + hVAD_CLDFB->tbg_energy_count++; + } + else + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy; + hVAD_CLDFB->tbg_energy_count++; + } + + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * 0.9f + frame_sb_energy[i] * 0.01f; + } + } + + if ( update_flag == 1 && frameloop > 2 && music_backgound_f == 0 ) + { + if ( hVAD_CLDFB->bg_update_count < 16 ) + { + if ( frameloop < 50 ) + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; + hVAD_CLDFB->tbg_energy_count++; + } + else + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy; + hVAD_CLDFB->tbg_energy_count++; + } + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * 0.96f + frame_sb_energy[i] * 0.04f; + } + hVAD_CLDFB->bg_update_count++; + } + else + { + float a = 0.94f; + + if ( ( t_bg_energy < frame_energy ) && 24 * hVAD_CLDFB->frame_energy_smooth < frame_energy ) + { + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = (float) ( sb_bg_energy[i] * 0.999f + frame_sb_energy[i] * 0.001 ); + } + } + else if ( 12 * t_bg_energy < frame_energy ) + { + if ( frameloop < 50 ) + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; + hVAD_CLDFB->tbg_energy_count++; + } + else + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy; + hVAD_CLDFB->tbg_energy_count++; + } + + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * 0.96f + frame_sb_energy[i] * 0.04f; + } + } + else + { + if ( t_bg_energy > frame_energy ) + { + a = 0.95f; + if ( frameloop < 50 ) + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; + hVAD_CLDFB->tbg_energy_count++; + } + else + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy; + hVAD_CLDFB->tbg_energy_count++; + } + + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * a + frame_sb_energy[i] * ( 1 - a ); + } + } + else + { + a = 0.96f; + if ( frameloop < 50 ) + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; + hVAD_CLDFB->tbg_energy_count++; + } + else + { + hVAD_CLDFB->t_bg_energy_sum += frame_energy; + hVAD_CLDFB->tbg_energy_count++; + } + + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * a + frame_sb_energy[i] * ( 1 - a ); + } + } + } + } + } + else + { + if ( ( t_bg_energy > 500 * frame_energy ) && ( sb_bg_energy[0] > 10 * frame_sb_energy[0] ) ) + { + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * 0.9f + frame_sb_energy[i] * 0.1f; + } + } + else if ( t_bg_energy > 10 * frame_energy ) + { + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * 0.999f + frame_sb_energy[i] * 0.001f; + } + } + } + + if ( hVAD_CLDFB->t_bg_energy_sum > 160 * hVAD_CLDFB->tbg_energy_count ) + { + hVAD_CLDFB->t_bg_energy_sum = 160.0f * hVAD_CLDFB->tbg_energy_count; + } + + if ( music_backgound_f == 1 && hVAD_CLDFB->lt_snr_org < 3.2 && t_bg_energy > 1 && update_flag == 0 ) + { + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * 0.98f + 0.000001f; + } + } + if ( music_backgound_f == 1 && frame_energy < 5000 * t_bg_energy ) + { + for ( i = 0; i < SNR_sb_num; i++ ) + { + sb_bg_energy[i] = sb_bg_energy[i] * 0.98f + 0.000001f; + } + } + + if ( hVAD_CLDFB->tbg_energy_count == 64 ) + { + hVAD_CLDFB->tbg_energy_count = 48; + hVAD_CLDFB->t_bg_energy_sum = hVAD_CLDFB->t_bg_energy_sum * 0.75f; + } + + hVAD_CLDFB->t_bg_energy = hVAD_CLDFB->t_bg_energy_sum / hVAD_CLDFB->tbg_energy_count; + + return; +} + + +/*-------------------------------------------------------------------* + * est_energy() + * + * + *-------------------------------------------------------------------*/ + +void est_energy( + float sb_power[], /* o : energy of sub-band divided uniformly */ + float frame_sb_energy[], /* o : energy of sub-band divided non-uniformly */ + float *p_frame_energy, /* o : frame energy 1 */ + float *p_frame_energy2, /* o : frame energy 2 */ + float *p_high_energy, /* o : high frequency energy */ + const int16_t bw /* i : bandwidth */ +) +{ + int16_t i, j, SNR_sb_num; + float frame_energy2, high_energy; + int16_t band_num = BAND_NUM_TAB[bw]; + const float sb_power_scale[5] = { 0.0f, 0.16f, 0.24f, 0.28f, 0.28f }; + const int16_t *Nregion_index; + + frame_energy2 = 0.0f; + high_energy = 0.0f; + for ( i = 0; i < band_num; i++ ) + { + if ( i > 0 && ( i != band_num - 1 ) ) + { + frame_energy2 += sb_power[i]; + } + if ( i > 5 ) + { + high_energy += sb_power[i]; + } + } + + high_energy /= ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ); + frame_energy2 /= ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ); + + Nregion_index = REGION_INDEX[bw - CLDFBVAD_NB_ID]; + SNR_sb_num = ENERGY_BAND_NUM[bw - CLDFBVAD_NB_ID]; + + for ( i = 0; i < SNR_sb_num; i++ ) + { + frame_sb_energy[i] = 0; + for ( j = Nregion_index[i]; j < Nregion_index[i + 1]; j++ ) + { + frame_sb_energy[i] += sb_power[j]; + } + + frame_sb_energy[i] /= ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ); + } + *p_high_energy = high_energy; + *p_frame_energy2 = frame_energy2; + *p_frame_energy = frame_energy2 + ( sb_power_scale[bw] * sb_power[0] / ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ) ); + + return; +} diff --git a/lib_enc/eval_pit_contr.c b/lib_enc/eval_pit_contr.c new file mode 100644 index 0000000000..d7eb087e57 --- /dev/null +++ b/lib_enc/eval_pit_contr.c @@ -0,0 +1,368 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constantes + *-------------------------------------------------------------------*/ + +#define NB_VOIC 13 +#define DIV_NB_VOIC ( 1.0f / NB_VOIC ) +#define ALPA 0.95f +#define ALPAM1 ( 1.0f - ALPA ) +#define BETA ( ALPAM1 / 2.0f ) +#define AFREQ_THR 2 +#define GPIT_THR 0.4f +#define HANGOVER_DELAY 2 + +/*-------------------------------------------------------------------* + * Pit_exc_contribution_len() + * + * Determine up to which band the pit contribution is significant + *-------------------------------------------------------------------*/ + +/*! r: bin where pitch contribution is significant */ +int16_t Pit_exc_contribution_len( + Encoder_State *st, /* i/o: state structure */ + const float *dct_res, /* i : DCT of residual */ + float *dct_pitex, /* i/o: DCT of pitch contribution */ + float *pitch_buf, /* i/o: Pitch per subframe */ + int16_t *hangover /* i : hangover for the time contribution switching*/ +) +{ + float corr_dct_pit[MBANDS_LOC], corr_tmp; + float av_corr, min_corr, ftmp; + int16_t freq, i, j; + int16_t last_pit_band, pit_contr_idx, last_pit_bin; + GSC_ENC_HANDLE hGSCEnc; + float ener_res; + float ener_pit; + float low_pit, F1st_harm, F8th_harm; + float corr_dct_pit_tmp[MBANDS_LOC]; + int16_t time_flg = 0; + int16_t Len, max_len; + int16_t tmp_dec; + int16_t Mbands_loc = MBANDS_LOC - 2; + BSTR_ENC_HANDLE hBstr; + + /* initialization */ + hGSCEnc = st->hGSCEnc; + hBstr = st->hBstr; + + if ( st->L_frame == L_FRAME16k ) + { + Mbands_loc = MBANDS_LOC; + } + + minimum( pitch_buf, st->L_frame >> 6, &low_pit ); + + F1st_harm = (float) INT_FS_12k8 / low_pit; + if ( st->L_frame == L_FRAME16k ) + { + F1st_harm = (float) INT_FS_16k / low_pit; + } + F8th_harm = 8.0f * F1st_harm; + + freq = 0; + for ( i = 0; i < Mbands_loc; i++ ) + { + corr_tmp = 0.0f; + ener_res = 0.1f; + ener_pit = 0.1f; + + for ( j = 0; j < mfreq_bindiv_loc[i]; j++ ) + { + corr_tmp += dct_res[j + freq] * dct_pitex[j + freq]; + ener_res += dct_res[j + freq] * dct_res[j + freq]; + ener_pit += dct_pitex[j + freq] * dct_pitex[j + freq]; + } + + corr_dct_pit[i] = (float) ( corr_tmp / sqrt( ener_res * ener_pit ) ); + freq += mfreq_bindiv_loc[i]; + } + + /* Smooth the inter-correlation value and skip the last band for the average (since last band is almost always 0)*/ + corr_dct_pit_tmp[0] = ALPA * corr_dct_pit[0] + ALPAM1 * corr_dct_pit[1]; + if ( corr_dct_pit_tmp[0] < 0.5f ) + { + corr_dct_pit_tmp[0] = 0.5f; + } + corr_dct_pit_tmp[0] = ( corr_dct_pit_tmp[0] - 0.5f ) * 2.0f; + + for ( i = 1; i < Mbands_loc - 1; i++ ) + { + corr_dct_pit_tmp[i] = ALPA * corr_dct_pit[i] + BETA * corr_dct_pit[i + 1] + BETA * corr_dct_pit[i - 1]; + if ( corr_dct_pit_tmp[i] < 0.5f ) + { + corr_dct_pit_tmp[i] = 0.5f; + } + corr_dct_pit_tmp[i] = ( corr_dct_pit_tmp[i] - 0.5f ) * 2.0f; + } + + corr_dct_pit_tmp[i] = ALPA * corr_dct_pit[i] + ALPAM1 * corr_dct_pit[i - 1]; + + if ( corr_dct_pit_tmp[i] < 0.5f ) + { + corr_dct_pit_tmp[i] = 0.5f; + } + corr_dct_pit_tmp[i] = ( corr_dct_pit_tmp[i] - 0.5f ) * 2.0f; + + for ( i = 0; i < Mbands_loc; i++ ) + { + corr_dct_pit[i] = corr_dct_pit_tmp[i]; + } + + av_corr = DIV_NB_VOIC * corr_dct_pit[0]; + for ( i = 1; i < NB_VOIC; i++ ) + { + av_corr += DIV_NB_VOIC * corr_dct_pit[i]; + } + + /* Find the cut-off freq similarly to HSX */ + last_pit_band = 0; + + av_corr *= 6400; + if ( st->L_frame == L_FRAME16k ) + { + av_corr *= 1.25f; + } + + if ( st->GSC_IVAS_mode >= 1 || st->core_brate < ACELP_9k60 ) + { + /* Correlation really poor at low rate, time domain still valide */ + av_corr *= 2.0; + } + + min_corr = (float) fabs( mfreq_loc[0] - av_corr ); + + for ( i = 1; i < Mbands_loc; i++ ) + { + ftmp = (float) fabs( mfreq_loc[i] - av_corr ); + if ( ftmp < min_corr ) + { + last_pit_band = i; + min_corr = ftmp; + } + } + + if ( F8th_harm > mfreq_loc[last_pit_band] ) + { + do + { + last_pit_band++; + } while ( F8th_harm >= mfreq_loc[last_pit_band] ); + } + + if ( st->GSC_IVAS_mode >= 1 ) + { + last_pit_band = max( last_pit_band, 7 ); + } + + if ( last_pit_band > 7 + BAND1k2 && ( st->core_brate < CFREQ_BITRATE || st->bwidth == NB ) ) + { + last_pit_band = 7 + BAND1k2; + } + else if ( last_pit_band > 10 + BAND1k2 && st->core_brate >= CFREQ_BITRATE ) + { + last_pit_band = 10 + BAND1k2; + } + + time_flg = 0; + if ( ( hGSCEnc->mem_last_pit_band > 0 && st->old_corr > 0.5f && st->hSpMusClas->mold_corr > 0.5f && hGSCEnc->lt_gpitch >= 1.5f * GPIT_THR ) || ( last_pit_band > 6 ) || ( last_pit_band >= 4 && hGSCEnc->lt_gpitch >= 1.5f * GPIT_THR && st->old_corr > 0.7f ) || ( last_pit_band > BAND1k2 && st->hSpMusClas->mold_corr > 0.80f && hGSCEnc->lt_gpitch >= GPIT_THR ) ) + { + tmp_dec = 1; + } + else + { + tmp_dec = 0; + } + + /* Different past and current decision */ + if ( ( hGSCEnc->mem_last_pit_band == 0 && tmp_dec == 1 ) || ( hGSCEnc->mem_last_pit_band > 0 && tmp_dec == 0 ) ) + { + if ( *hangover == 0 ) + { + time_flg = tmp_dec; + *hangover = HANGOVER_DELAY; + } + else + { + time_flg = 0; + if ( hGSCEnc->mem_last_pit_band > 0 ) + { + time_flg = 1; + } + + ( *hangover ) -= 1; + if ( *hangover < 0 ) + { + *hangover = 0; + } + } + } + else + { + time_flg = tmp_dec; + *hangover = HANGOVER_DELAY; + } + + /* Decicison on final length of time contribution */ + pit_contr_idx = 0; + if ( time_flg == 1 || st->coder_type != INACTIVE || st->GSC_noisy_speech ) + { + if ( st->core_brate < ACELP_9k60 && low_pit < 64 ) + { + last_pit_band = 9 + BAND1k2; + if ( st->bwidth == NB ) + { + last_pit_band = 7 + BAND1k2; + } + } + else if ( st->core_brate < ACELP_9k60 && low_pit < 128 ) + { + last_pit_band = 5 + BAND1k2; + } + else if ( st->core_brate < ACELP_9k60 ) + { + last_pit_band = 3 + BAND1k2; + } + else if ( last_pit_band < BAND1k2 + 1 ) + { + last_pit_band = BAND1k2 + 1; + } + + last_pit_bin = (int16_t) ( mfreq_loc[last_pit_band] / BIN_SIZE ); + + st->bpf_off = 0; + + max_len = st->L_frame - last_pit_bin; + if ( st->bwidth == NB ) + { + max_len = 160 - last_pit_bin; + } + + Len = 80; + if ( max_len < 80 ) + { + Len = max_len; + } + + if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) + { + for ( i = 0; i < max_len; i++ ) + { + dct_pitex[i + last_pit_bin] = 0.0f; + } + } + else + { + for ( i = 0; i < Len; i++ ) + { + dct_pitex[i + last_pit_bin] *= sm_table[i]; + } + + for ( ; i < max_len; i++ ) + { + dct_pitex[i + last_pit_bin] = 0.0f; + } + } + + hGSCEnc->mem_last_pit_band = last_pit_band; + pit_contr_idx = last_pit_band - BAND1k2; + } + else + { + set_f( dct_pitex, 0.0f, st->L_frame ); + st->bpf_off = 1; + last_pit_bin = 0; + last_pit_band = 0; + pit_contr_idx = 0; + hGSCEnc->mem_last_pit_band = 0; + set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR16k ); + + /* pitch contribution useless - delete all previously written indices belonging to pitch contribution */ + for ( i = TAG_ACELP_SUBFR_LOOP_START; i < TAG_ACELP_SUBFR_LOOP_END; i++ ) + { + if ( hBstr->ind_list[i].nb_bits != -1 ) + { + hBstr->nb_bits_tot -= hBstr->ind_list[i].nb_bits; + hBstr->ind_list[i].nb_bits = -1; + } + } + + if ( hBstr->ind_list[IND_ES_PRED].nb_bits != -1 ) + { + hBstr->nb_bits_tot -= hBstr->ind_list[IND_ES_PRED].nb_bits; + hBstr->ind_list[IND_ES_PRED].nb_bits = -1; + } + } + + if ( st->core_brate < CFREQ_BITRATE ) + { + if ( st->core_brate < ACELP_9k60 ) + { + if ( pit_contr_idx > 0 ) + { + pit_contr_idx = 1; + } + + if ( st->coder_type == INACTIVE ) + { + push_indice( hBstr, IND_PIT_CONTR_IDX, pit_contr_idx, 1 ); + } + } + else + { + push_indice( hBstr, IND_PIT_CONTR_IDX, pit_contr_idx, 3 ); + } + } + else + { + push_indice( hBstr, IND_PIT_CONTR_IDX, pit_contr_idx, 4 ); + } + + return last_pit_bin; +} diff --git a/lib_enc/evs_enc.c b/lib_enc/evs_enc.c new file mode 100644 index 0000000000..060352246e --- /dev/null +++ b/lib_enc/evs_enc.c @@ -0,0 +1,717 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void configure_core_coder( Encoder_State *st ); + +static void writeFrameHeader( Encoder_State *st ); + +static void initFrameHeader( Encoder_State *st ); + + +/*-------------------------------------------------------------------* + * evs_enc() + * + * Principal encoder routine + *-------------------------------------------------------------------*/ + +ivas_error evs_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t *data, /* i : input signal */ + float *mem_hp20_in, /* i/o: hp20 filter memory */ + const int16_t n_samples /* i : number of input samples */ +) +{ + int16_t i, input_frame, delay; + float old_inp_12k8[L_INP_12k8], *inp; /* buffer of input signal @ 12k8 */ + float old_inp_16k[L_INP]; /* buffer of input signal @ 16kHz */ + float fr_bands[2 * NB_BANDS]; /* energy in frequency bands */ + float Etot; /* total energy; correlation shift */ + float ener; /* residual energy from Levinson-Durbin */ + float A[NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ + float epsP[M + 1]; /* LP prediction errors */ + float lsp_new[M]; /* LSPs at the end of the frame */ + float lsp_mid[M]; /* ISPs in the middle of the frame */ + int16_t vad_hover_flag; /* VAD hangover flag */ + int16_t hq_core_type; /* HQ core type (HQ, or LR-MDCT) */ + int16_t attack_flag; /* attack flag (GSC or TC) */ + float new_inp_resamp16k[L_FRAME16k]; /* new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + float old_syn_12k8_16k[L_FRAME16k]; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ + float shb_speech[L_FRAME16k]; + float hb_speech[L_FRAME16k / 4]; + float new_swb_speech[L_FRAME48k]; + float bwe_exc_extended[L_FRAME32k + NL_BUFF_OFFSET]; + float voice_factors[NB_SUBFR16k]; + float fb_exc[L_FRAME16k]; + int16_t Voicing_flag; + float pitch_buf[NB_SUBFR16k]; + int16_t unbits; + int16_t padBits; + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ +#ifndef FIX_I4_OL_PITCH + int16_t pitch_orig[3]; /* original open-loop pitch values that might be altered in core_acelp_tcx20_switching() within MODE2 */ +#endif + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "evs_enc" ); + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + input_frame = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); + st->core = -1; + st->extl = -1; + st->core_brate = -1; + st->input_bwidth = st->last_input_bwidth; + st->bwidth = st->last_bwidth; + hq_core_type = -1; + unbits = 0; + + st->bits_frame_core = 0; /* For getting bit consumption in core coder */ + st->hTdCngEnc->lp_cng_mode2 = 0; + st->mdct_sw_enable = 0; + st->mdct_sw = 0; + st->rate_switching_reset = 0; + + + st->idchan = 0; + st->flag_ACELP16k = set_ACELP_flag( EVS_MONO, -1, st->total_brate, 0, 0, -1, -1 ); + + /*----------------------------------------------------------------* + * set input samples buffer + *----------------------------------------------------------------*/ + + /* get delay to synchronize ACELP and MDCT frame */ + delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + + mvr2r( st->input - delay, st->old_input_signal, input_frame + delay ); + + /*----------------------------------------------------------------* + * convert 'short' input data to 'float' + *----------------------------------------------------------------*/ + + for ( i = 0; i < n_samples; i++ ) + { + st->input[i] = (float) data[i]; + } + + if ( n_samples < input_frame ) + { + set_f( st->input + n_samples, 0.0f, input_frame - n_samples ); + } + + /*----------------------------------------------------------------* + * HP filtering + *----------------------------------------------------------------*/ + + hp20( st->input, input_frame, mem_hp20_in, st->input_Fs ); + + /*----------------------------------------------------------------* + * Updates in case of AMR-WB IO mode -> EVS primary mode switching + *----------------------------------------------------------------*/ + + if ( st->last_core == AMR_WB_CORE ) + { + updt_IO_switch_enc( st, input_frame ); + set_f( st->hBWE_TD->old_speech_shb, 0, L_LOOK_16k + L_SUBFR16k ); + set_f( st->hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); + set_f( st->hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); + st->hBWE_TD->old_mean_EnvSHBres = 0.0f; + st->hBWE_TD->prev_enr_EnvSHBres = 1.0f; + st->hBWE_TD->prev_shb_env_tilt = 0.0f; + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + st->hBWE_TD->prev_Env_error = 0.0f; + cldfb_reset_memory( st->cldfbAnaEnc ); + cldfb_reset_memory( st->cldfbSynTd ); + } + + /*---------------------------------------------------------------------* + * Pre-processing + *---------------------------------------------------------------------*/ + +#ifdef FIX_I4_OL_PITCH + pre_proc( st, input_frame, old_inp_12k8, old_inp_16k, &inp, fr_bands, &Etot, &ener, A, Aw, epsP, lsp_new, lsp_mid, &vad_hover_flag, &attack_flag, new_inp_resamp16k, &Voicing_flag, realBuffer, imagBuffer, &hq_core_type ); +#else + pre_proc( st, input_frame, old_inp_12k8, old_inp_16k, &inp, fr_bands, &Etot, &ener, pitch_orig, A, Aw, epsP, lsp_new, lsp_mid, &vad_hover_flag, &attack_flag, new_inp_resamp16k, &Voicing_flag, realBuffer, imagBuffer, &hq_core_type ); +#endif + + + if ( st->mdct_sw == MODE2 ) + { + st->bits_frame_nominal = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + initFrameHeader( st ); + + writeFrameHeader( st ); + + if ( ( st->total_brate > ACELP_24k40 && st->total_brate < HQ_96k ) || ( st->total_brate == ACELP_24k40 && st->bwidth >= WB ) ) + { + st->L_frame = L_FRAME16k; + st->gamma = GAMMA16k; + st->preemph_fac = PREEMPH_FAC_16k; + + weight_a_subfr( NB_SUBFR16k, A, Aw, GAMMA16k, M ); + + if ( st->last_L_frame == L_FRAME && st->ini_frame != 0 ) + { + /* this is just an approximation, but it is sufficient */ + mvr2r( st->lsp_old1, st->lspold_enc, M ); + } + } + else + { + st->L_frame = L_FRAME; + st->gamma = GAMMA1; + st->preemph_fac = PREEMPH_FAC; + } + + st->sr_core = st->L_frame * FRAMES_PER_SEC; + st->core_brate = st->total_brate; + + st->igf = 0; + hq_core_type = NORMAL_HQ_CORE; + + if ( ( st->bwidth == SWB || st->bwidth == WB ) && st->total_brate <= LRMDCT_CROSSOVER_POINT ) + { + /* note that FB (bitrate >= 24400 bps) is always coded with NORMAL_HQ_CORE */ + hq_core_type = LOW_RATE_HQ_CORE; + } + else if ( st->bwidth == NB ) + { + hq_core_type = LOW_RATE_HQ_CORE; + } + } + + /*---------------------------------------------------------------------* + * Encoding + *---------------------------------------------------------------------*/ + + if ( st->codec_mode == MODE1 ) + { + /* write signalling info into the bitstream */ + signalling_enc( st ); + + /*---------------------------------------------------------------------* + * Preprocessing (preparing) for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + + core_switching_pre_enc( st, old_inp_12k8, old_inp_16k, 0, 0 ); + + /*---------------------------------------------------------------------* + * ACELP core encoding + *---------------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + if ( ( error = acelp_core_enc( st, inp, ener, A, Aw, epsP, lsp_new, lsp_mid, vad_hover_flag, attack_flag, bwe_exc_extended, voice_factors, old_syn_12k8_16k, pitch_buf, &unbits, NULL, NULL, NULL ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*---------------------------------------------------------------------* + * HQ core encoding + *---------------------------------------------------------------------*/ + + if ( st->core == HQ_CORE ) + { + hq_core_enc( st, st->input - delay, input_frame, hq_core_type, Voicing_flag, vad_hover_flag ); + } + + /*---------------------------------------------------------------------* + * Postprocessing for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + + core_switching_post_enc( st, old_inp_12k8, old_inp_16k, A ); + +#if !defined( FIX_I4_OL_PITCH ) + /* ToDo: this is a hack to keep bitexactness wrt. EVS but the logic is wrong */ + if ( st->core == HQ_CORE ) + { + mvs2s( pitch_orig, st->pitch, 3 ); /* original open-loop pitch values might be altered in core_acelp_tcx20_switching() */ + } +#endif + } + + else /* MODE2 */ + { + + /*----------------------------------------------------------------* + * Configuration of core coder/SID + * Write Frame Header + *----------------------------------------------------------------*/ + + configure_core_coder( st ); + + if ( st->mdct_sw != MODE1 ) + { + writeFrameHeader( st ); + } + + /*----------------------------------------------------------------* + * Core-Coder + *----------------------------------------------------------------*/ + + /* Call main encoding function */ + enc_acelp_tcx_main( st, old_inp_16k + L_INP_MEM, Aw, lsp_new, lsp_mid, bwe_exc_extended, voice_factors, pitch_buf, vad_hover_flag ); + +#ifndef FIX_I4_OL_PITCH + mvs2s( pitch_orig, st->pitch, 3 ); /* populate the original OL pitch values back */ +#endif + + /*---------------------------------------------------------------------* + * Postprocessing for Mode 1/2 switching + *---------------------------------------------------------------------*/ + /* TBE for Mode 2 interface */ + if ( st->igf && st->core_brate > SID_2k40 ) + { + if ( st->core == ACELP_CORE ) + { + switch ( st->bwidth ) + { + case WB: + st->extl = WB_TBE; + st->extl_brate = WB_TBE_0k35; + break; + + case SWB: + st->extl = SWB_TBE; + st->extl_brate = SWB_TBE_1k6; + + if ( st->total_brate < ACELP_13k20 ) + { + st->extl_brate = SWB_TBE_0k95; + } + else if ( st->total_brate >= ACELP_24k40 ) + { + st->extl_brate = SWB_TBE_2k8; + } + + break; + + case FB: + st->extl = FB_TBE; + st->extl_brate = FB_TBE_1k8; + + if ( st->total_brate >= ACELP_24k40 ) + { + st->extl_brate = FB_TBE_3k0; + } + + break; + } + } + else + { + st->coder_type = -1; + st->extl = IGF_BWE; + st->extl_brate = 0; + } + + st->core_brate = st->total_brate - st->extl_brate; + + if ( st->tec_tfa == 1 ) + { + st->core_brate -= BITS_TEC; + st->core_brate -= BITS_TFA; + } + } + + /*----------------------------------------------------------------* + * Complete Bitstream Writing + *----------------------------------------------------------------*/ + + /* Pad the bitstream with zeros and byte-alignment*/ + if ( st->igf && st->core == ACELP_CORE && st->core_brate > SID_2k40 ) + { + padBits = ( ( st->bits_frame + 7 ) / 8 ) * 8 - ( st->hBstr->nb_bits_tot + ( st->rf_target_bits_write - ( ( st->rf_mode == 1 ) ? 1 : 0 ) ) + get_tbe_bits( st->total_brate, st->bwidth, st->rf_mode ) ); + } + else + { + padBits = ( ( st->bits_frame + 7 ) / 8 ) * 8 - ( st->hBstr->nb_bits_tot + ( st->rf_target_bits_write - ( ( st->rf_mode == 1 ) ? 1 : 0 ) ) ); + } + for ( i = 0; i < padBits; i++ ) + { + push_next_indice( st->hBstr, 0, 1 ); + } + } + + /*---------------------------------------------------------------------* + * WB TBE encoding + * WB BWE encoding + *---------------------------------------------------------------------*/ + wmops_sub_start( "BWE_encoding" ); + + if ( st->input_Fs >= 16000 && st->bwidth < SWB ) + { + /* Common pre-processing for WB TBE and WB BWE */ + wb_pre_proc( st, -1, new_inp_resamp16k, hb_speech ); + } + + if ( st->extl == WB_TBE ) + { + /* WB TBE encoder */ + wb_tbe_enc( st, hb_speech, bwe_exc_extended, voice_factors, pitch_buf ); + + if ( st->codec_mode == MODE2 ) + { + tbe_write_bitstream( st ); + } + } + else if ( st->extl == WB_BWE ) + { + /* WB BWE encoder */ + wb_bwe_enc( st, new_inp_resamp16k ); + } + + /*---------------------------------------------------------------------* + * SWB(FB) TBE encoding + * SWB(FB) BWE encoding + *---------------------------------------------------------------------*/ + + if ( !st->Opt_SC_VBR && st->input_Fs >= 32000 ) + { + /* Common pre-processing for SWB(FB) TBE and SWB(FB) BWE */ + swb_pre_proc( st, new_swb_speech, shb_speech, realBuffer, imagBuffer, NULL ); + } + else if ( st->input_Fs >= 32000 ) + { + set_f( st->hBWE_TD->old_speech_shb, 0.0f, L_LOOK_16k + L_SUBFR16k ); + set_f( shb_speech, 0.0f, L_FRAME16k ); + set_f( st->hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); + set_f( st->hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); + st->hBWE_TD->old_mean_EnvSHBres = 0.0f; + st->hBWE_TD->prev_enr_EnvSHBres = 1.0f; + st->hBWE_TD->prev_shb_env_tilt = 0.0f; + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + st->hBWE_TD->prev_Env_error = 0.0f; + } + + /* SWB TBE encoder */ + if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->igf && st->core == ACELP_CORE && st->extl != WB_TBE ) ) + { + if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) + { + swb_tbe_enc( st, NULL, shb_speech, bwe_exc_extended, voice_factors, fb_exc, pitch_buf ); + + if ( st->extl == FB_TBE ) + { + /* FB TBE encoder */ + fb_tbe_enc( st, st->input, fb_exc ); + } + + if ( st->codec_mode == MODE2 ) + { + if ( st->tec_tfa == 1 ) + { + tecEnc_TBE( &( st->hTECEnc->corrFlag ), st->voicing, st->coder_type ); + + if ( st->coder_type == INACTIVE ) + { + st->tec_flag = 0; + st->hTECEnc->corrFlag = 0; + } + st->tfa_flag = tfaEnc_TBE( st->tfa_enr, st->last_core, st->voicing, pitch_buf ); + set_TEC_TFA_code( st->hTECEnc->corrFlag, &st->tec_flag, &st->tfa_flag ); + } + else + { + st->tec_flag = 0; + st->hTECEnc->corrFlag = 0; + st->tfa_flag = 0; + } + + tbe_write_bitstream( st ); + } + } + } + else if ( st->extl == SWB_BWE || st->extl == FB_BWE ) + { + /* SWB(FB) BWE encoder */ + swb_bwe_enc( st, EVS_MONO, old_inp_12k8, old_inp_16k, old_syn_12k8_16k, new_swb_speech, shb_speech ); + } + else if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) + { + swb_bwe_enc_hr( st, st->input - delay, input_frame, unbits ); + } + + + /*---------------------------------------------------------------------* + * SWB DTX/CNG encoding + *---------------------------------------------------------------------*/ + + if ( st->Opt_DTX_ON && input_frame >= L_FRAME32k ) + { + /* SHB DTX/CNG encoder */ + swb_CNG_enc( st, shb_speech, old_syn_12k8_16k ); + } + + wmops_sub_end(); + /*---------------------------------------------------------------------* + * Channel-aware mode - write signaling information into the bitstream + *---------------------------------------------------------------------*/ + + signalling_enc_rf( st ); + + + /*---------------------------------------------------------------------* + * Updates + *---------------------------------------------------------------------*/ + + updt_enc_common( st, Etot ); + + if ( st->mdct_sw == MODE1 ) + { + st->codec_mode = MODE1; + } + + + if ( st->hTdCngEnc->lp_cng_mode2 ) + { + st->codec_mode = MODE2; + } + +#ifdef DEBUG_MODE_INFO + dbgwrite( &st->codec_mode, sizeof( int16_t ), 1, input_frame, "res/codec" ); + dbgwrite( &st->core, sizeof( int16_t ), 1, input_frame, "res/core" ); + dbgwrite( &st->extl, sizeof( int16_t ), 1, input_frame, "res/extl" ); + dbgwrite( &st->bwidth, sizeof( int16_t ), 1, input_frame, "res/bwidth" ); + ener = st->total_brate / 1000.0f; + dbgwrite( &ener, sizeof( float ), 1, input_frame, "res/total_brate" ); + ener = st->core_brate / 1000.0f; + dbgwrite( &ener, sizeof( float ), 1, input_frame, "res/core_brate" ); + ener = st->extl_brate / 1000.0f; + dbgwrite( &ener, sizeof( float ), 1, input_frame, "res/extl_brate" ); + dbgwrite( &st->coder_type, sizeof( int16_t ), 1, input_frame, "res/coder_type" ); + dbgwrite( &st->clas, sizeof( int16_t ), 1, input_frame, "res/clas" ); + dbgwrite( &st->cng_type, sizeof( int16_t ), 1, input_frame, "res/cng_type" ); + dbgwrite( &st->L_frame, sizeof( int16_t ), 1, input_frame, "res/L_frame" ); + dbgwrite( &st->vad_flag, sizeof( int16_t ), 1, input_frame, "res/vad_flag" ); + + { + int16_t _pitch[3]; + if ( ( st->coder_type == INACTIVE ) || ( st->coder_type == UNVOICED ) ) + { + _pitch[0] = 0; + _pitch[1] = 0; + _pitch[2] = 0; + } + else + { + _pitch[0] = st->pitch[0]; + _pitch[1] = st->pitch[1]; + _pitch[2] = st->pitch[2]; + } + dbgwrite( &_pitch[0], sizeof( int16_t ), 1, ( input_frame / 8 * 3 ), "res/pitch" ); + dbgwrite( &_pitch[1], sizeof( int16_t ), 1, ( input_frame / 8 * 3 ), "res/pitch" ); + dbgwrite( &_pitch[2], sizeof( int16_t ), 1, ( input_frame / 8 * 2 ), "res/pitch" ); + } + + if ( st->core != ACELP_CORE ) + { + set_f( new_swb_speech, 0, input_frame ); + dbgwrite( new_swb_speech, 4, st->L_frame, 1, "res/exc.enc" ); + } +#endif + + wmops_sub_end(); + + return error; +} + + +/*-------------------------------------------------------------------* + * initFrameHeader() + * + * Init Mode 2 frame header + *-------------------------------------------------------------------*/ + +static void initFrameHeader( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + int16_t n; + + if ( st->core_brate == SID_2k40 ) + { + /*Get size of frame*/ + st->bits_frame = FRAME_2_4; + st->bits_frame_core += FRAME_2_4 - 4; /*1 bit for SID on/off + 2 bits for bandwith in case of SID + 1 bit CNG type */ + st->frame_size_index = 2; + } + else if ( st->core_brate == FRAME_NO_DATA ) + { + st->bits_frame = FRAME_0; + st->bits_frame_core += st->bits_frame; + st->frame_size_index = 0; + } + else + { + for ( n = 0; n < FRAME_SIZE_NB; n++ ) + { + if ( n < FRAME_SIZE_NB - 1 ) + { + if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal && FrameSizeConfig[n + 1].frame_bits > st->bits_frame_nominal ) + { + st->frame_size_index = n; + st->bits_frame = st->bits_frame_nominal; + st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; + break; + } + } + else + { + if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal ) + { + st->frame_size_index = n; + st->bits_frame = st->bits_frame_nominal; + st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; + break; + } + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * writeFrameHeader() + * + * Write Mode 2 frame header + *-------------------------------------------------------------------*/ + +static void writeFrameHeader( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( st->core_brate != FRAME_NO_DATA ) + { + /* SID flag at 2.4kbps */ + if ( st->core_brate == SID_2k40 ) + { + if ( st->cng_type == FD_CNG ) + { + /* write SID/CNG type flag */ + push_next_indice( hBstr, 1, 1 ); + + /* write bandwidth info */ + push_next_indice( hBstr, st->bwidth, 2 ); + + /* write L_frame */ + if ( st->L_frame == L_FRAME ) + { + push_next_indice( hBstr, 0, 1 ); + } + else + { + push_next_indice( hBstr, 1, 1 ); + } + } + } + else /* active frames */ + { + if ( st->rf_mode == 0 ) + { + push_next_indice( hBstr, st->bwidth - FrameSizeConfig[st->frame_size_index].bandwidth_min, FrameSizeConfig[st->frame_size_index].bandwidth_bits ); + } + } + + /* Write reserved bit */ + if ( FrameSizeConfig[st->frame_size_index].reserved_bits && st->rf_mode == 0 ) + { + push_next_indice( hBstr, 0, FrameSizeConfig[st->frame_size_index].reserved_bits ); + } + } + + return; +} + +/*------------------------------------------------------------------------* + * Configuration of core coder/SID + *------------------------------------------------------------------------*/ + +static void configure_core_coder( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + initFrameHeader( st ); + + if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) + { + if ( st->tcxonly ) + { + st->coder_type = GENERIC; + } + + st->hTcxCfg->coder_type = st->coder_type; + + + if ( !st->tcxonly && !st->localVAD && st->hTcxCfg->coder_type == GENERIC ) + { + st->hTcxCfg->coder_type = UNVOICED; + } + } + + st->igf = getIgfPresent( 0, st->total_brate, st->bwidth, st->rf_mode, st->mct_chan_mode ); + + if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) + { + st->core_brate = st->total_brate; + } + + return; +} diff --git a/lib_enc/ext_sig_ana.c b/lib_enc/ext_sig_ana.c new file mode 100644 index 0000000000..58d1e34a56 --- /dev/null +++ b/lib_enc/ext_sig_ana.c @@ -0,0 +1,477 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + + +/*-------------------------------------------------------------------* + * core_signal_analysis_high_bitrate() + * + * + *-------------------------------------------------------------------*/ + +void core_signal_analysis_high_bitrate( + const float *new_samples, + const int16_t T_op[3], /* i : open-loop pitch values for quantiz. */ + float lsp_new[], + float lsp_mid[], + Encoder_State *st, + float *mdst_spectrum[2], + int16_t pTnsSize[], + int16_t pTnsBits[], + int16_t param_core[], + int16_t *ltpBits, + float *windowed_samples, /* i/o: backup of windowed time signal */ + const int16_t L_frame, + const int16_t L_frameTCX, + const int16_t last_element_mode, + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + const int16_t last_overlap = st->hTcxCfg->tcx_last_overlap_mode; + const int16_t curr_overlap = st->hTcxCfg->tcx_curr_overlap_mode; + const int16_t minWindowLen = st->hTcxCfg->tcx_mdct_window_min_lengthFB - 1; + int16_t i, frameno; + int16_t L_subframe; + int16_t left_overlap = -1, right_overlap = -1, folding_offset; + float buf[N_MAX + L_MDCT_OVLP_MAX]; /* Buffer for TCX20/TCX10 windowing */ + float mdstWin[N_MAX + L_MDCT_OVLP_MAX]; /* Buffer for MDST windowing */ + float *powerSpec; + float *tcx20Win; + float tcx5Win[N_TCX10_MAX / 2 + L_MDCT_OVLP_MAX]; /* Buffer for TCX5 windowing and interleaving. */ + float *interleaveBuf = tcx5Win; + int16_t nSubframes; + int16_t overlap_mode[3]; + int16_t *transform_type = hTcxEnc->transform_type; + float r[M + 1]; + float A[M + 1]; + float *lsp[2]; + const int16_t tcx10SizeFB = 2 * st->hTcxCfg->tcx5SizeFB; + const int16_t tcx5SizeFB = st->hTcxCfg->tcx5SizeFB; + const int16_t tcx10Size = 2 * st->hTcxCfg->tcx5Size; + int16_t alw_pitch_lag_12k8[2], alw_pitch_lag_12k8_wc = -1; + float alw_voicing[2], alw_voicing_wc = -1; + int16_t disable_ltp = 0; + + if ( last_element_mode != st->element_mode ) + { + disable_ltp = 1; /* disable TCX-LTP in stereo switching to avoid discontinuities in synthesis */ + } + + powerSpec = tcx20Win = buf; /* Share memory for windowed TD signal and for the power spectrum */ + + /*--------------------------------------------------------------* + * Input Signal Processing: copy, HP filter, pre-emphasis + *---------------------------------------------------------------*/ + + if ( st->tcxonly && st->element_mode != IVAS_CPE_MDCT ) + { + /* Copy Samples */ + mvr2r( new_samples, st->new_speech_enc, L_frame ); + } + + /*--------------------------------------------------------------* + * TCX-LTP + *---------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_DFT ) + { + tcx_ltp_encode( st, hTcxEnc->tcxMode, L_frame, st->wspeech_enc, NULL, st->wspeech_enc, T_op, ¶m_core[1 + NOISE_FILL_RANGES], ltpBits, NULL, disable_ltp, st->element_mode ); + } + else if ( st->element_mode != IVAS_CPE_MDCT ) + { + tcx_ltp_encode( st, hTcxEnc->tcxMode, L_frame, st->speech_enc + st->encoderLookahead_enc, hTcxEnc->speech_ltp + st->encoderLookahead_enc, st->speech_enc + st->encoderLookahead_enc, T_op, ¶m_core[1 + NOISE_FILL_RANGES], ltpBits, NULL, disable_ltp, st->element_mode ); + } + + if ( st->tcxonly && st->element_mode != IVAS_CPE_MDCT ) + { + mvr2r( st->speech_enc + st->encoderLookahead_enc, st->new_speech_enc_pe, L_frame ); + + preemph( st->new_speech_enc_pe, st->preemph_fac, L_frame, &( st->mem_preemph_enc ) ); + } + + if ( hTcxEnc->tcxMode == TCX_10 ) + { + mvs2s( ¶m_core[1 + NOISE_FILL_RANGES], ¶m_core[NPRM_DIV + 1 + NOISE_FILL_RANGES], LTPSIZE ); + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + lsp[0] = lsp_new; + lsp[1] = lsp_mid; + } + + /*-------------------------------------------------------------------------* + * Decision matrix for the transform and overlap length + *--------------------------------------------------------------------------*/ + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + alw_pitch_lag_12k8[0] = st->pitch[0]; + alw_pitch_lag_12k8[1] = st->pitch[1]; + alw_voicing[0] = st->voicing[0]; + alw_voicing[1] = st->voicing[1]; + alw_pitch_lag_12k8_wc = min( alw_pitch_lag_12k8[0], alw_pitch_lag_12k8[1] ); + alw_voicing_wc = max( alw_voicing[0], alw_voicing[1] ); + } + + overlap_mode[0] = last_overlap; /* Overlap between the last and the current frame */ + + if ( hTcxEnc->tcxMode == TCX_20 ) + { + nSubframes = 1; + transform_type[0] = TCX_20; + transform_type[1] = TCX_20; + overlap_mode[1] = curr_overlap; /* Overlap between the current and the next frame */ + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + alw_pitch_lag_12k8[0] = alw_pitch_lag_12k8_wc; + alw_voicing[0] = alw_voicing_wc; + } + } + else + { + nSubframes = 2; + if ( curr_overlap == FULL_OVERLAP ) + { + transform_type[0] = TCX_5; + transform_type[1] = TCX_10; + overlap_mode[1] = ( last_overlap == HALF_OVERLAP ) ? HALF_OVERLAP : MIN_OVERLAP; /* Overlap between 2nd and 3rd sub-frame */ + } + else if ( last_overlap == FULL_OVERLAP ) + { + transform_type[0] = TCX_10; + transform_type[1] = TCX_5; + overlap_mode[1] = ( curr_overlap == HALF_OVERLAP ) ? HALF_OVERLAP : MIN_OVERLAP; /* Overlap between 1st and 2nd sub-frame */ + } + else + { + transform_type[0] = transform_type[1] = TCX_5; + overlap_mode[1] = ( last_overlap == HALF_OVERLAP && curr_overlap == HALF_OVERLAP ) ? HALF_OVERLAP : MIN_OVERLAP; /* Overlap between 2nd and 3rd sub-frame */ + } + overlap_mode[2] = curr_overlap; /* Overlap between the current and the next frame */ + } + + if ( transform_type[0] != TCX_20 ) + { + IGFEncResetTCX10BitCounter( st->hIGFEnc ); + } + + for ( frameno = 0; frameno < nSubframes; frameno++ ) + { + /*-------------------------------------------------------------------------* + * Get MDCT output and TNS parameters. Apply TNS in the spectrum if needed + *--------------------------------------------------------------------------*/ + + L_subframe = L_frameTCX / nSubframes; + + if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) + { + if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + wtda( hTcxEnc->new_speech_TCX, tcx20Win, NULL, overlap_mode[frameno], overlap_mode[frameno + 1], L_frameTCX ); + + if ( windowed_samples != NULL ) /* store overlap data for later */ + { + assert( frameno == 0 ); + windowed_samples[0] = (float) overlap_mode[frameno]; + windowed_samples[1] = (float) overlap_mode[frameno + 1]; + } + } + else + { + /* Windowing of the LFE Signal*/ + WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, overlap_mode[frameno] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno], overlap_mode[frameno + 1] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno + 1], &left_overlap, &right_overlap, &hTcxEnc->speech_TCX[frameno * tcx10SizeFB], &L_subframe, tcx20Win, + st->element_mode != IVAS_CPE_MDCT /* truncate_aldo */, + 1, 1 ); + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + /* Windowing of the 2xTCX5 subframes or 1xTCX10 or 1xTCX20 */ + WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, overlap_mode[frameno] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno], overlap_mode[frameno + 1] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno + 1], &left_overlap, &right_overlap, &hTcxEnc->speech_TCX[frameno * tcx10SizeFB], &L_subframe, mdstWin, 1, 1, 0 ); + } + } + else + { + /* Windowing of the 2xTCX5 subframes or 1xTCX10 or 1xTCX20 */ + WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, overlap_mode[frameno], overlap_mode[frameno + 1], &left_overlap, &right_overlap, &hTcxEnc->speech_TCX[frameno * tcx10SizeFB], &L_subframe, tcx20Win, st->element_mode != IVAS_CPE_MDCT, 1, 0 ); + + if ( windowed_samples != NULL ) /* save windowed speech_TCX samples */ + { + assert( L_subframe + ( left_overlap + right_overlap ) / 2 < 2 * L_FRAME_MAX / nSubframes - L_FRAME_MAX / 8 ); + windowed_samples[frameno * L_FRAME_MAX + 0] = (float) overlap_mode[frameno]; + windowed_samples[frameno * L_FRAME_MAX + 1] = (float) overlap_mode[frameno + 1]; + mvr2r( tcx20Win, windowed_samples + frameno * L_FRAME_MAX + 2, L_subframe + ( left_overlap + right_overlap ) / 2 ); + } + } + + if ( transform_type[frameno] == TCX_5 ) + { + /* Outer left folding */ + for ( i = 0; i < left_overlap / 2; i++ ) + { + tcx20Win[left_overlap / 2 + i] -= tcx20Win[left_overlap / 2 - 1 - i]; + } + + if ( st->element_mode == IVAS_CPE_MDCT && frameno == 0 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) + { + for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ + { + tcx20Win[left_overlap + i] -= hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; + } + } + + /* Outer right folding */ + for ( i = 0; i < right_overlap / 2; i++ ) + { + tcx20Win[L_subframe + left_overlap / 2 - 1 - i] += tcx20Win[L_subframe + left_overlap / 2 + i]; + } + + /* 2xTCX5 */ + L_subframe = tcx5SizeFB; + folding_offset = left_overlap / 2; + + for ( i = 0; i < 2; i++ ) + { + assert( st->mct_chan_mode != MCT_CHAN_MODE_LFE ); + WindowSignal( st->hTcxCfg, folding_offset, i == 0 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, i == 1 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, &left_overlap, &right_overlap, tcx20Win + i * tcx5SizeFB, &L_subframe, tcx5Win, st->element_mode != IVAS_CPE_MDCT, 1, 0 ); + + TCX_MDCT( tcx5Win, hTcxEnc->spectrum[frameno] + i * tcx5SizeFB, left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); + + /* high-band gain control in case of BWS */ + if ( st->bwidth_sw_cnt > 0 ) + { + v_multc( hTcxEnc->spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, hTcxEnc->spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), L_subframe - L_FRAME16k / ( 2 * nSubframes ) ); + } + } + } + else /* transform_type[frameno] != TCX_5 */ + { + assert( transform_type[frameno] == TCX_10 || transform_type[frameno] == TCX_20 ); + + if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + edct( tcx20Win, hTcxEnc->spectrum[frameno], L_subframe, st->element_mode ); + + v_multc( hTcxEnc->spectrum[frameno], (float) sqrt( (float) NORM_MDCT_FACTOR / L_subframe ), hTcxEnc->spectrum[frameno], L_subframe ); + } + else + { + /* TCX20/TCX10 */ + if ( st->element_mode == IVAS_CPE_MDCT && frameno == 0 && transform_type[0] == TCX_10 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) + { + for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ + { + tcx20Win[left_overlap + i] -= hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; + } + } + + TCX_MDCT( tcx20Win, hTcxEnc->spectrum[frameno], left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); + } + + /* high-band gain control in case of BWS */ + if ( st->bwidth_sw_cnt > 0 ) + { + v_multc( hTcxEnc->spectrum[frameno] + L_FRAME16k / nSubframes, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, hTcxEnc->spectrum[frameno] + L_FRAME16k / nSubframes, L_subframe - L_FRAME16k / nSubframes ); + } + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + set_f( &hTcxEnc->spectrum[frameno][MCT_LFE_MAX_LINE], 0.f, L_subframe - MCT_LFE_MAX_LINE ); + st->hTcxCfg->tcx_coded_lines = MCT_LFE_MAX_LINE; + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + /* For TCX20 at bitrates up to 64 kbps we need the power spectrum */ + if ( hTcxEnc->tcxMode == TCX_20 && ( st->total_brate < HQ_96k || st->igf ) ) + { + /* Compute noise-measure flags for spectrum filling and quantization */ + AnalyzePowerSpectrum( st, L_subframe * st->L_frame / hTcxEnc->L_frameTCX, L_subframe, left_overlap, right_overlap, hTcxEnc->spectrum[frameno], ( ( hTcxEnc->tcxMode == TCX_20 ) && ( st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) ) ? mdstWin : tcx20Win, powerSpec ); + } + } + } + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + L_subframe = L_frameTCX / nSubframes; + + if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + wtda_ext( hTcxEnc->new_speech_TCX, mdstWin, overlap_mode[frameno], overlap_mode[frameno + 1], L_frameTCX, 3 ); + } + else + { + /* Windowing for the MDST */ + WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, overlap_mode[frameno] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno], overlap_mode[frameno + 1] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno + 1], &left_overlap, &right_overlap, &hTcxEnc->speech_TCX[frameno * tcx10SizeFB], &L_subframe, mdstWin, 0, 1, st->mct_chan_mode == MCT_CHAN_MODE_LFE ); + } + + if ( transform_type[frameno] == TCX_5 ) + { + /* Outer left folding */ + for ( i = 0; i < left_overlap / 2; i++ ) + { + mdstWin[left_overlap / 2 + i] += mdstWin[left_overlap / 2 - 1 - i]; + } + + if ( frameno == 0 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) + { + for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ + { + mdstWin[left_overlap + i] += hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; + } + } + + /* Outer right folding */ + for ( i = 0; i < right_overlap / 2; i++ ) + { + mdstWin[L_subframe + left_overlap / 2 - 1 - i] -= mdstWin[L_subframe + left_overlap / 2 + i]; + } + + /* 2xTCX5 */ + L_subframe = tcx5SizeFB; + folding_offset = left_overlap / 2; + + for ( i = 0; i < 2; i++ ) + { + assert( st->mct_chan_mode != MCT_CHAN_MODE_LFE ); + WindowSignal( st->hTcxCfg, folding_offset, i == 0 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, i == 1 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, &left_overlap, &right_overlap, mdstWin + i * tcx5SizeFB, &L_subframe, tcx5Win, 0, 1, 0 ); + + TCX_MDST( tcx5Win, mdst_spectrum[frameno] + i * tcx5SizeFB, left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); + /* high-band gain control in case of BWS */ + if ( st->bwidth_sw_cnt > 0 ) + { + v_multc( mdst_spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, mdst_spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), L_subframe - L_FRAME16k / ( 2 * nSubframes ) ); + } + } + } + else /* transform_type[frameno] != TCX_5 */ + { + if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + edst( mdstWin, mdst_spectrum[frameno], L_subframe, st->element_mode ); + + v_multc( mdst_spectrum[frameno], (float) sqrt( (float) NORM_MDCT_FACTOR / L_subframe ), mdst_spectrum[frameno], L_subframe ); + } + else + { + if ( frameno == 0 && transform_type[0] == TCX_10 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) + { + for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ + { + mdstWin[left_overlap + i] += hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; + } + } + + TCX_MDST( mdstWin, mdst_spectrum[frameno], left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); + } + + /* high-band gain control in case of BWS */ + if ( st->bwidth_sw_cnt > 0 ) + { + v_multc( mdst_spectrum[frameno] + L_FRAME16k / nSubframes, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, mdst_spectrum[frameno] + L_FRAME16k / nSubframes, L_subframe - L_FRAME16k / nSubframes ); + } + } + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + set_f( &mdst_spectrum[frameno][MCT_LFE_MAX_LINE], 0.f, L_subframe - MCT_LFE_MAX_LINE ); + } + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + TNSAnalysis( st->hTcxCfg, L_frameTCX, st->hTcxCfg->tcx_coded_lines, transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ), hTcxEnc->spectrum[frameno], st->hTranDet, -1, &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL ); + + if ( st->hTcxCfg->fIsTNSAllowed ) + { + EncodeTnsData( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); + } + + if ( transform_type[frameno] == TCX_5 ) + { + /* group sub-windows: interleave bins according to their frequencies */ + for ( i = 0; i < tcx5SizeFB; i++ ) + { + interleaveBuf[2 * i] = hTcxEnc->spectrum[frameno][i]; + interleaveBuf[2 * i + 1] = hTcxEnc->spectrum[frameno][tcx5SizeFB + i]; + } + mvr2r( interleaveBuf, hTcxEnc->spectrum[frameno], tcx10SizeFB ); + } + + /*--------------------------------------------------------------* + * LPC analysis + *---------------------------------------------------------------*/ + + if ( st->tcxonly ) + { + HBAutocorrelation( st->hTcxCfg, overlap_mode[frameno] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno], overlap_mode[frameno + 1] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno + 1], &st->speech_enc_pe[frameno * tcx10Size], L_frame / nSubframes, r ); + + adapt_lag_wind( r, M, alw_pitch_lag_12k8[frameno], alw_voicing[frameno], st->sr_core ); + + lev_dur( A, r, M, NULL ); + + a2lsp_stab( A, lsp[nSubframes - 1 - frameno], st->lspold_enc ); + } + + if ( st->igf ) + { + ProcessIGF( st, hTcxEnc->spectrum[frameno], hTcxEnc->spectrum[frameno], powerSpec, transform_type[frameno] == TCX_20, frameno, 0, vad_hover_flag ); + } + + /* Copy memory */ + mvr2r( lsp_new, st->lspold_enc, M ); + } + } + + return; +} diff --git a/lib_enc/fd_cng_enc.c b/lib_enc/fd_cng_enc.c new file mode 100644 index 0000000000..d9e5a2014c --- /dev/null +++ b/lib_enc/fd_cng_enc.c @@ -0,0 +1,1277 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "stat_enc.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * createFdCngEnc() + * + * + *-------------------------------------------------------------------*/ + +ivas_error createFdCngEnc( + HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ +) +{ + HANDLE_FD_CNG_ENC hs; + ivas_error error; + error = IVAS_ERR_OK; + + /* Set output to NULL in case of errors and early return */ + *hFdCngEnc = NULL; + + /* Allocate memory */ + hs = (HANDLE_FD_CNG_ENC) count_malloc( sizeof( FD_CNG_ENC ) ); + if ( hs == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for FD CNG ENC structure" ); + } + + if ( ( error = createFdCngCom( &( hs->hFdCngCom ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + *hFdCngEnc = hs; + + return error; +} + +/*-------------------------------------------------------------------* + * initFdCngEnc() + * + * Initialize FD_CNG + *-------------------------------------------------------------------*/ + +void initFdCngEnc( + HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ + const int32_t input_Fs, /* i : input signal sampling frequency in Hz */ + const float scale /* i : scaling factor */ +) +{ + int16_t j; + HANDLE_FD_CNG_COM hsCom = hFdCngEnc->hFdCngCom; + + /* Initialize common */ + initFdCngCom( hsCom, scale ); + + /* Configure the Noise Estimator */ + hsCom->numSlots = 16; + hsCom->numCoreBands = 16; + hsCom->regularStopBand = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH ); + if ( hsCom->regularStopBand > 40 ) + { + hsCom->regularStopBand = 40; + } + + hsCom->startBand = 2; + if ( hsCom->regularStopBand == 10 ) + { + hsCom->stopFFTbin = 160; + hsCom->stopBand = 160; + hsCom->nFFTpart = 17; + } + else + { + hsCom->stopFFTbin = 256; + hsCom->stopBand = hsCom->regularStopBand - hsCom->numCoreBands + hsCom->stopFFTbin; + hsCom->nFFTpart = 20; + } + + initPartitions( sidparts_encoder_noise_est, SIZE_SIDPARTS_ENC_NOISE_EST, hsCom->startBand, hsCom->stopBand, hsCom->part, &hsCom->npart, hsCom->midband, hsCom->psize, hsCom->psize_inv, 0 ); + + hsCom->nCLDFBpart = hsCom->npart - hsCom->nFFTpart; + for ( j = 0; j < hsCom->nCLDFBpart; j++ ) + { + hsCom->CLDFBpart[j] = hsCom->part[j + hsCom->nFFTpart] - ( 256 - hsCom->startBand ); + hsCom->CLDFBpsize_inv[j] = hsCom->psize_inv[j + hsCom->nFFTpart]; + } + + /* Initialize the Noise Estimator */ + set_f( hFdCngEnc->msPeriodog, 0.0f, NPART ); + set_f( hFdCngEnc->msAlpha, 0.0f, NPART ); + set_f( hFdCngEnc->msBminWin, 0.0f, NPART ); + set_f( hFdCngEnc->msBminSubWin, 0.0f, NPART ); + set_f( hFdCngEnc->msPsd, 0.0f, NPART ); + set_f( hFdCngEnc->msNoiseFloor, 0.0f, NPART ); + set_f( hFdCngEnc->msNoiseEst, 0.0f, NPART ); + set_f( hFdCngEnc->energy_ho, 0.0f, NPART ); + set_f( hFdCngEnc->msNoiseEst_old, 0.0f, NPART ); + set_f( hFdCngEnc->msMinBuf, FLT_MAX, MSNUMSUBFR * NPART ); + set_f( hFdCngEnc->msCurrentMin, FLT_MAX, NPART ); + set_f( hFdCngEnc->msCurrentMinOut, FLT_MAX, NPART ); + set_f( hFdCngEnc->msCurrentMinSubWindow, FLT_MAX, NPART ); + set_s( hFdCngEnc->msLocalMinFlag, 0, NPART ); + set_s( hFdCngEnc->msNewMinFlag, 0, NPART ); + set_f( hFdCngEnc->msPsdFirstMoment, 0.0f, NPART ); + set_f( hFdCngEnc->msPsdSecondMoment, 0.0f, NPART ); + hFdCngEnc->msPeriodogBufPtr = 0; + set_f( hFdCngEnc->msPeriodogBuf, 0.0f, MSBUFLEN * NPART ); + set_f( hFdCngEnc->msLogPeriodog, 0.0f, NPART ); + set_f( hFdCngEnc->msLogNoiseEst, 0.0f, NPART ); + + set_f( hFdCngEnc->mem_coherence, EPSILON, 4 ); + + return; +} + +/*-------------------------------------------------------------------* + * configureFdCngEnc() + * + * Configure FD_CNG + *-------------------------------------------------------------------*/ + +void configureFdCngEnc( + HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ + const int16_t bwidth, + const int32_t total_brate ) +{ + HANDLE_FD_CNG_COM hsCom = hFdCngEnc->hFdCngCom; + float psizeDec[NPART]; + float psize_invDec[NPART]; + + hsCom->CngBandwidth = bwidth; + if ( hsCom->CngBandwidth == FB ) + { + hsCom->CngBandwidth = SWB; + } + hsCom->CngBitrate = total_brate; + + /* NB configuration */ + if ( bwidth == NB ) + { + hsCom->FdCngSetup = FdCngSetup_nb; + } + + /* WB configuration */ + else if ( bwidth == WB ) + { + /* FFT 6.4kHz, no CLDFB */ + if ( total_brate <= ACELP_8k00 ) + { + hsCom->FdCngSetup = FdCngSetup_wb1; + } + /* FFT 6.4kHz, CLDFB 8.0kHz */ + else if ( total_brate <= ACELP_13k20 ) + { + hsCom->FdCngSetup = FdCngSetup_wb2; + } + /* FFT 8.0kHz, no CLDFB */ + else + { + hsCom->FdCngSetup = FdCngSetup_wb3; + } + } + + /* SWB/FB configuration */ + else + { + /* FFT 6.4kHz, CLDFB 14kHz */ + if ( total_brate <= ACELP_13k20 ) + { + hsCom->FdCngSetup = FdCngSetup_swb1; + } + /* FFT 8.0kHz, CLDFB 16kHz */ + else + { + hsCom->FdCngSetup = FdCngSetup_swb2; + } + } + hsCom->fftlen = hsCom->FdCngSetup.fftlen; + hFdCngEnc->stopFFTbinDec = hsCom->FdCngSetup.stopFFTbin; + + /* Configure the SID quantizer and the Confort Noise Generator */ + + hFdCngEnc->startBandDec = hsCom->startBand; + hFdCngEnc->stopBandDec = hsCom->FdCngSetup.sidPartitions[hsCom->FdCngSetup.numPartitions - 1] + 1; + initPartitions( hsCom->FdCngSetup.sidPartitions, hsCom->FdCngSetup.numPartitions, hFdCngEnc->startBandDec, hFdCngEnc->stopBandDec, hFdCngEnc->partDec, &hFdCngEnc->npartDec, hFdCngEnc->midbandDec, psizeDec, psize_invDec, 0 ); + + if ( hFdCngEnc->stopFFTbinDec == 160 ) + { + hFdCngEnc->nFFTpartDec = 17; + } + else if ( hFdCngEnc->stopFFTbinDec == 256 ) + { + hFdCngEnc->nFFTpartDec = 20; + } + else + { + hFdCngEnc->nFFTpartDec = 21; + } + + switch ( hsCom->fftlen ) + { + case 512: + hsCom->fftSineTab = NULL; + hsCom->olapWinAna = olapWinAna512; + hsCom->olapWinSyn = olapWinSyn256; + break; + case 640: + hsCom->fftSineTab = fftSineTab640; + hsCom->olapWinAna = olapWinAna640; + hsCom->olapWinSyn = olapWinSyn320; + break; + default: + assert( !"Unsupported FFT length for FD-based CNG" ); + break; + } + hsCom->frameSize = hsCom->fftlen >> 1; + + return; +} + + +/*-------------------------------------------------------------------* + * deleteFdCngEnc() + * + * Delete the instance of type FD_CNG + *-------------------------------------------------------------------*/ + +void deleteFdCngEnc( + HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ +) +{ + + HANDLE_FD_CNG_ENC hsEnc = *hFdCngEnc; + + if ( hsEnc != NULL ) + { + deleteFdCngCom( &( hsEnc->hFdCngCom ) ); + count_free( hsEnc ); + *hFdCngEnc = NULL; + } + + return; +} + +/*-------------------------------------------------------------------* + * resetFdCngEnc() + * + * Reset the instance of type FD_CNG + *-------------------------------------------------------------------*/ + +void resetFdCngEnc( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + int16_t n; + float totalNoiseIncrease; + + /* Detect fast increase of totalNoise */ + totalNoiseIncrease = st->hNoiseEst->totalNoise - st->last_totalNoise; + st->last_totalNoise = st->hNoiseEst->totalNoise; + if ( totalNoiseIncrease > 0 ) + { + if ( st->totalNoise_increase_len == TOTALNOISE_HIST_SIZE ) + { + for ( n = 0; n < TOTALNOISE_HIST_SIZE - 1; n++ ) + { + st->totalNoise_increase_hist[n] = st->totalNoise_increase_hist[n + 1]; + } + st->totalNoise_increase_hist[TOTALNOISE_HIST_SIZE - 1] = totalNoiseIncrease; + } + else + { + st->totalNoise_increase_hist[st->totalNoise_increase_len] = totalNoiseIncrease; + st->totalNoise_increase_len++; + } + } + else + { + st->totalNoise_increase_len = 0; + } + + totalNoiseIncrease = 0.f; + for ( n = 0; n < st->totalNoise_increase_len; n++ ) + { + totalNoiseIncrease += st->totalNoise_increase_hist[n]; + } + + if ( + ( totalNoiseIncrease > 5 && st->totalNoise_increase_len == TOTALNOISE_HIST_SIZE && st->ini_frame > 150 ) || + ( st->input_bwidth > st->last_input_bwidth ) || + ( st->last_core == AMR_WB_CORE ) ) + { + st->fd_cng_reset_flag = 1; + st->hFdCngEnc->hFdCngCom->msFrCnt_init_counter = 0; + st->hFdCngEnc->hFdCngCom->init_old = FLT_MAX; + } + else if ( st->fd_cng_reset_flag > 0 && st->fd_cng_reset_flag < 10 ) + { + st->fd_cng_reset_flag++; + } + else + { + st->fd_cng_reset_flag = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * perform_noise_estimation_enc() + * + * Perform noise estimation + *-------------------------------------------------------------------*/ + +void perform_noise_estimation_enc( + float *band_energies, /* i : energy in critical bands without minimum noise floor E_MIN*/ + float *enerBuffer, /* i : energy buffer */ + HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: CNG structure containing all buffers and variables */ + const int32_t input_Fs, /* i : input sampling rate */ + CPE_ENC_HANDLE hCPE /* i : CPE encoder structure */ +) +{ + int16_t i, j; + int16_t numCoreBands = hFdCngEnc->hFdCngCom->numCoreBands; + int16_t regularStopBand = hFdCngEnc->hFdCngCom->regularStopBand; + int16_t numSlots = hFdCngEnc->hFdCngCom->numSlots; + float numSlots_inv = 1.f / (float) numSlots; /*enough if done only once*/ + float *periodog = hFdCngEnc->hFdCngCom->periodog; + float *ptr_per = periodog; + int16_t npart = hFdCngEnc->hFdCngCom->npart; + int16_t nFFTpart = hFdCngEnc->hFdCngCom->nFFTpart; + float *psize = hFdCngEnc->hFdCngCom->psize; + float *msPeriodog = hFdCngEnc->msPeriodog; + float *msNoiseEst = hFdCngEnc->msNoiseEst; + + float *msLogPeriodog = hFdCngEnc->msLogPeriodog; + float *msLogNoiseEst = hFdCngEnc->msLogNoiseEst; + + float band_res_dft, chan_width_f; + float chan_width_bins; + float scaleEB; + + if ( hCPE != NULL && hCPE->hStereoDft != NULL ) + { + band_res_dft = ( (float) input_Fs ) / hCPE->hStereoDft->NFFT; + chan_width_f = 24000.f / CLDFB_NO_CHANNELS_MAX; + chan_width_bins = chan_width_f / band_res_dft; + + /* Scaling of Energy buffer to get energy per sample, same scaling as for band_energies, 3 is to compensate for the 1/3 scaling in calculate_energy_buffer */ + scaleEB = 3 * 4.0f / ( hCPE->hStereoDft->NFFT * hCPE->hStereoDft->NFFT ); + + /* Scale with number of bins in one band */ + scaleEB = scaleEB / chan_width_bins; + } + else + { + scaleEB = numSlots_inv * hFdCngEnc->hFdCngCom->scalingFactor; + } + + /* preemphasis compensation and grouping of per bin energies into msPeriodog */ + for ( i = 0; i < nFFTpart; i++ ) + { + msPeriodog[i] = 0.5f * ( band_energies[i] + band_energies[i + NB_BANDS] ); + msPeriodog[i] *= preemphCompensation[i]; + } + + /* Adjust to the desired time resolution by averaging the periodograms over the time slots */ + for ( j = numCoreBands; j < regularStopBand; j++ ) + { + ( *ptr_per ) = enerBuffer[j] * scaleEB; + ptr_per++; + } + + /* Adjust filterbank to the desired frequency resolution by averaging over spectral partitions for SID transmission */ + if ( numCoreBands < regularStopBand ) + { + bandcombinepow( periodog, regularStopBand - numCoreBands, hFdCngEnc->hFdCngCom->CLDFBpart, hFdCngEnc->hFdCngCom->nCLDFBpart, hFdCngEnc->hFdCngCom->CLDFBpsize_inv, &msPeriodog[nFFTpart] ); + } + + /* Compress MS inputs */ + compress_range( msPeriodog, msLogPeriodog, npart ); + + /* Call the minimum statistics routine for noise estimation */ + minimum_statistics( npart, nFFTpart, psize, msLogPeriodog, hFdCngEnc->msNoiseFloor, msLogNoiseEst, hFdCngEnc->msAlpha, hFdCngEnc->msPsd, hFdCngEnc->msPsdFirstMoment, hFdCngEnc->msPsdSecondMoment, hFdCngEnc->msMinBuf, hFdCngEnc->msBminWin, hFdCngEnc->msBminSubWin, hFdCngEnc->msCurrentMin, hFdCngEnc->msCurrentMinOut, hFdCngEnc->msCurrentMinSubWindow, hFdCngEnc->msLocalMinFlag, hFdCngEnc->msNewMinFlag, hFdCngEnc->msPeriodogBuf, &( hFdCngEnc->msPeriodogBufPtr ), hFdCngEnc->hFdCngCom, + ENC, ( hCPE == NULL ) ? 0 : hCPE->element_mode ); + + /* Expand MS outputs */ + expand_range( msLogNoiseEst, msNoiseEst, npart ); + + return; +} + + +/*-------------------------------------------------------------------* + * AdjustFirstSID() + * + * Adjust the noise estimator at the beginning of each CNG phase (encoder-side) + *-------------------------------------------------------------------*/ + +void AdjustFirstSID( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + float lambda; + int16_t i; + int16_t npart = st->hFdCngEnc->hFdCngCom->npart; + float *msPeriodog = st->hFdCngEnc->msPeriodog; + float *energy_ho = st->hFdCngEnc->energy_ho; + float *msNoiseEst = st->hFdCngEnc->msNoiseEst; + float *msNoiseEst_old = st->hFdCngEnc->msNoiseEst_old; + int16_t *active_frame_counter = &( st->hFdCngEnc->hFdCngCom->active_frame_counter ); + + if ( st->hDtxEnc->cnt_SID == 1 && st->last_core_brate > SID_2k40 ) + { + /* Detect the hangover period and the first SID frame at the beginning of each CNG phase */ + + /* Average input energy over hangover period */ + mvr2r( msPeriodog, energy_ho, npart ); /*First hangover frame*/ + /* Set first SID to current input level but add some smoothing */ + lambda = (float) pow( 0.96f, (float) ( *active_frame_counter + 1 ) ); + v_multc( msNoiseEst_old, lambda, msNoiseEst_old, npart ); + v_multc( energy_ho, 1 - lambda, energy_ho, npart ); + + v_add( msNoiseEst_old, energy_ho, energy_ho, npart ); + for ( i = 0; i < npart; i++ ) + { + if ( msNoiseEst[i] > energy_ho[i] ) + { + msNoiseEst[i] = energy_ho[i]; + } + } + *active_frame_counter = 0; + } + + if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) + { + ( *active_frame_counter )++; /* Count the number of active frames in a row */ + } + else + { + mvr2r( msNoiseEst, msNoiseEst_old, npart ); /* Store the noise estimate obtained in the CNG phases */ + } + + return; +} + +/*-------------------------------------------------------------------* + * FdCng_encodeSID() + * + * Generate a bitstream out of the partition levels + *-------------------------------------------------------------------*/ + +void FdCng_encodeSID( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + int16_t N; + HANDLE_FD_CNG_ENC hFdCngEnc = st->hFdCngEnc; + HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; + BSTR_ENC_HANDLE hBstr = st->hBstr; + float *E = hFdCngEnc->msNoiseEst; + float gain; + int16_t i, index; + float v[32], e; + int16_t indices[32]; + float w[32]; + float preemph_fac = st->preemph_fac; + + const float *const *codebooks = ( st->element_mode == EVS_MONO ) ? cdk_37bits : cdk_37bits_ivas; + const float gain_q_offset = ( st->element_mode == EVS_MONO ) ? GAIN_Q_OFFSET_EVS : GAIN_Q_OFFSET_IVAS; + + /* Init */ + N = hFdCngEnc->npartDec; + + /* Convert to LOG */ + e = 0.f; + for ( i = 0; i < N; i++ ) + { + v[i] = 10.f * (float) log10( E[i] + 1e-4f ); + e += v[i]; + } + + /* Normalize MSVQ input */ + gain = 0.f; + for ( i = N_GAIN_MIN; i < N_GAIN_MAX; i++ ) + { + gain += v[i]; + } + + gain /= (float) ( N_GAIN_MAX - N_GAIN_MIN ); + + for ( i = 0; i < N; i++ ) + { + v[i] -= gain; + } + + /* MSVQ encoder */ + set_f( w, 1.0f, N ); + + msvq_enc( codebooks, NULL, NULL, v, levels_37bits, FD_CNG_maxC_37bits, FD_CNG_stages_37bits, w, N, FD_CNG_maxN_37bits, indices ); + + /* MSVQ decoder */ + msvq_dec( codebooks, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, v, NULL ); + + /* Compute gain */ + gain = 0.f; + for ( i = 0; i < N; i++ ) + { + gain += v[i]; + } + + gain = ( e - gain ) / (float) N; + + /* Apply bitrate-dependant scale */ + if ( st->element_mode > EVS_MONO ) + { + apply_scale( &gain, hFdCngCom->CngBandwidth, hFdCngCom->CngBitrate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); + } + else + { + apply_scale( &gain, hFdCngCom->CngBandwidth, hFdCngCom->CngBitrate, scaleTableMono, SIZE_SCALE_TABLE_MONO ); + } + + /* Quantize gain */ + index = (int16_t) floor( gain * 1.5f + gain_q_offset + 0.5f ); + + if ( index < 0 ) + { + index = 0; + } + + if ( index > 127 ) + { + index = 127; + } + + gain = ( (float) index - gain_q_offset ) / 1.5f; + + /* Apply gain and undo log */ + for ( i = 0; i < N; i++ ) + { + + hFdCngCom->sidNoiseEst[i] = (float) pow( 10.f, ( v[i] + gain ) / 10.f ); + } + + /* NB last band energy compensation */ + if ( hFdCngCom->CngBandwidth == NB ) + { + hFdCngCom->sidNoiseEst[N - 1] *= NB_LAST_BAND_SCALE; + } + + if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) + { + hFdCngCom->sidNoiseEst[N - 1] *= SWB_13k2_LAST_BAND_SCALE; + } + + /* Write bitstream */ + if ( st->codec_mode == MODE2 ) + { + for ( i = 0; i < FD_CNG_stages_37bits; i++ ) + { + push_next_indice( hBstr, indices[i], bits_37bits[i] ); + } + + push_next_indice( hBstr, index, 7 ); + } + else + { + push_indice( hBstr, IND_SID_TYPE, 1, 1 ); + push_indice( hBstr, IND_BWIDTH, st->bwidth, 2 ); + push_indice( hBstr, IND_ACELP_16KHZ, st->L_frame == L_FRAME16k ? 1 : 0, 1 ); + + for ( i = 0; i < FD_CNG_stages_37bits; i++ ) + { + push_indice( hBstr, IND_LSF, indices[i], bits_37bits[i] ); + } + + push_indice( hBstr, IND_ENERGY, index, 7 ); + } + + /* Interpolate the bin/band-wise levels from the partition levels */ + scalebands( hFdCngCom->sidNoiseEst, hFdCngEnc->partDec, hFdCngEnc->npartDec, hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, hFdCngEnc->stopBandDec - hFdCngEnc->startBandDec, hFdCngCom->cngNoiseLevel, 1 ); + + lpc_from_spectrum( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, preemph_fac ); + + return; +} + + +/*-------------------------------------------------------------------* + * generate_comfort_noise_enc() + * + * + *-------------------------------------------------------------------*/ + +void generate_comfort_noise_enc( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + int16_t i; + float *ptr_r; + float *ptr_i; + HANDLE_FD_CNG_ENC hFdCngEnc = st->hFdCngEnc; + HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; + float *cngNoiseLevel = hFdCngCom->cngNoiseLevel; + float *ptr_level = cngNoiseLevel; + int16_t *seed = &( hFdCngCom->seed ); + float scale = 1.f; + float *fftBuffer = hFdCngCom->fftBuffer; + float *timeDomainOutput = hFdCngCom->timeDomainBuffer; + float preemph_fac = st->preemph_fac; + int16_t tcx_transition = 0; + float enr; + + /* Generate Gaussian random noise in real and imaginary parts of the FFT bins + Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each bin */ + if ( hFdCngEnc->startBandDec == 0 ) + { + rand_gauss( &fftBuffer[0], seed ); + fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ + ptr_level++; + ptr_r = fftBuffer + 2; + } + else + { + fftBuffer[0] = 0.f; + set_f( fftBuffer + 2, 0.0f, 2 * ( hFdCngEnc->startBandDec - 1 ) ); + ptr_r = fftBuffer + 2 * hFdCngEnc->startBandDec; + } + + ptr_i = ptr_r + 1; + for ( ; ptr_level < cngNoiseLevel + hFdCngEnc->stopFFTbinDec - hFdCngEnc->startBandDec; ptr_level++ ) + { + /* Real part in FFT bins */ + rand_gauss( ptr_r, seed ); + ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_r += 2; + /* Imaginary part in FFT bins */ + rand_gauss( ptr_i, seed ); + ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); + ptr_i += 2; + } + + /* Remaining FFT bins are set to zero */ + set_f( fftBuffer + 2 * hFdCngEnc->stopFFTbinDec, 0.0f, hFdCngCom->fftlen - 2 * hFdCngEnc->stopFFTbinDec ); + + /* Nyquist frequency is discarded */ + fftBuffer[1] = 0.f; + + /* If previous frame is active, reset the overlap-add buffer */ + if ( st->last_core_brate > SID_2k40 ) + { + set_f( hFdCngCom->olapBufferSynth, 0.0f, hFdCngCom->fftlen ); + + if ( ( st->last_core > ACELP_CORE && st->codec_mode == MODE2 ) || st->codec_mode == MODE1 ) + { + tcx_transition = 1; + } + } + + /* Perform STFT synthesis */ + SynthesisSTFT( fftBuffer, timeDomainOutput, hFdCngCom->olapBufferSynth, hFdCngCom->olapWinSyn, tcx_transition, hFdCngCom, -1, -1 ); + + /* update CNG excitation energy for LP_CNG */ + /* calculate the residual signal energy */ + enr = cng_energy( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att, hFdCngCom->exc_cng, hFdCngCom->frameSize ); + + st->hTdCngEnc->lp_ener = (float) ( 0.8f * st->hTdCngEnc->lp_ener + 0.2f * pow( 2.0f, enr ) ); + + /* Overlap-add when previous frame is active */ + if ( st->last_core_brate > SID_2k40 && st->codec_mode == MODE2 ) + { + float noise[2048], old_exc_ener = 0.f, gain = 0.f, tmp; + int16_t N = hFdCngCom->frameSize; + int16_t seed_loc = hFdCngCom->seed; + float *old_exc, old_Aq[M + 1], *old_syn_pe, old_syn; + + if ( st->last_core > ACELP_CORE ) + { + tcx_windowing_synthesis_current_frame( timeDomainOutput, st->hTcxCfg->tcx_mdct_window, /*Keep sine windows for limiting Time modulation*/ + st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 0, st->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : st->hTcxCfg->tcx_last_overlap_mode, NULL, NULL, NULL, NULL, NULL, N / 2, st->hTcxCfg->tcx_offset < 0 ? -st->hTcxCfg->tcx_offset : 0, 1, 0, 0 ); + + if ( st->hTcxCfg->last_aldo ) + { + for ( i = 0; i < hFdCngCom->frameSize; i++ ) + { + timeDomainOutput[i] += st->hTcxEnc->old_out[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )]; + } + } + else + { + tcx_windowing_synthesis_past_frame( st->hTcxEnc->Txnq, st->hTcxCfg->tcx_aldo_window_1_trunc, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->hTcxCfg->tcx_last_overlap_mode ); + + for ( i = 0; i < st->hTcxCfg->tcx_mdct_window_length; i++ ) + { + timeDomainOutput[i] += st->hTcxEnc->Txnq[i]; + } + } + } + else + { + lsp2a_stab( st->lsp_old, old_Aq, M ); + old_exc = st->hLPDmem->old_exc + L_EXC_MEM - ( N / 2 ); + old_syn_pe = st->hLPDmem->mem_syn2; + old_syn = st->hLPDmem->syn[M]; + for ( i = 0; i < N / 2; i++ ) + { + old_exc_ener += old_exc[i] * old_exc[i]; + } + + old_exc_ener = (float) sqrt( old_exc_ener / (float) ( N / 2 ) ); + + for ( i = 0; i < N; i++ ) + { + rand_gauss( &( noise[i] ), &( seed_loc ) ); + gain += noise[i] * noise[i]; + } + + gain = old_exc_ener / (float) sqrt( gain / (float) N ); + + for ( i = 0; i < N; i++ ) + { + noise[i] *= gain; + } + + syn_filt( old_Aq, M, noise, noise, N, old_syn_pe, 0 ); + + tmp = old_syn; + + deemph( noise, preemph_fac, N, &tmp ); + + for ( i = 0; i < N / 2; i++ ) + { + timeDomainOutput[i] += noise[i] * hFdCngCom->olapWinSyn[N / 2 + i]; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * cng_energy() + * + * + *-------------------------------------------------------------------*/ + +/*! r: CNG energy */ +float cng_energy( + const int16_t element_mode, /* i : element mode */ + const int16_t bwidth, /* i : audio bandwidh */ + const int16_t CNG_mode, /* i : mode for DTX configuration */ + const float CNG_att, /* i : attenuation factor for CNG */ + const float *exc, /* i : input signal */ + const int16_t len /* i : vector length */ +) +{ + float enr, att; + + /* calculate the residual signal energy */ + enr = dotp( exc, exc, len ) / len; + + /* convert log2 of residual signal energy */ + enr = (float) log10( enr + 0.1f ) / (float) log10( 2.0f ); + + /* decrease the energy in case of WB input */ + if ( element_mode == IVAS_CPE_DFT || element_mode == IVAS_CPE_TD ) + { + enr += CNG_att * FAC_LOG2 / 10.0f; + } + else if ( bwidth != NB ) + { + if ( bwidth == WB ) + { + if ( CNG_mode >= 0 ) + { + /* Bitrate adapted attenuation */ + att = ENR_ATT[CNG_mode]; + } + else + { + /* Use least attenuation for higher bitrates */ + att = ENR_ATT[4]; + } + } + else + { + att = 1.5f; + } + enr -= att; + } + + return ( enr ); +} + + +/*-------------------------------------------------------------------* + * stereoFdCngCoherence() + * + * compute coherence of channels for use in FD-CNG + *-------------------------------------------------------------------*/ + +void stereoFdCngCoherence( + Encoder_State **sts, /* i/o: core encoder structures */ + const int16_t last_element_mode, /* i : last element mode */ + float fft_buff[CPE_CHANNELS][2 * L_FFT] /* i : fft buffers for L and R channels */ +) +{ + const float *pt_fftL, *pt_fftR; + int16_t i_subfr, i; + float cr, ci, eL, eR; + float *mem; + + if ( last_element_mode != IVAS_CPE_MDCT ) + { + set_f( sts[0]->hFdCngEnc->mem_coherence, EPSILON, 4 ); + } + + if ( sts[0]->core_brate == -1 || sts[1]->core_brate == -1 ) + { + /* case: at least one channel has triggered VAD -> ACTIVE FRAME */ + if ( sts[0]->core_brate == -1 ) + { + sts[1]->total_brate = sts[0]->total_brate; + sts[1]->active_cnt = sts[0]->active_cnt; + if ( sts[1]->active_cnt >= CNG_TYPE_HO ) + { + sts[1]->last_total_brate_cng = -1; + } + } + if ( sts[1]->core_brate == -1 ) + { + sts[0]->total_brate = sts[1]->total_brate; + sts[0]->active_cnt = sts[1]->active_cnt; + if ( sts[0]->active_cnt >= CNG_TYPE_HO ) + { + sts[0]->last_total_brate_cng = -1; + } + } + sts[0]->core_brate = -1; + sts[1]->core_brate = -1; + sts[0]->hDtxEnc->cnt_SID = 0; + sts[1]->hDtxEnc->cnt_SID = 0; + } + else if ( sts[0]->core_brate <= SID_2k40 && sts[1]->core_brate <= SID_2k40 ) + { + /* case: no VAD for both channels -> INACTIVE FRAME */ + reset_indices_enc( sts[0]->hBstr, MAX_NUM_INDICES ); + reset_indices_enc( sts[1]->hBstr, MAX_NUM_INDICES ); + + /* synchronize SID sending for variable SID rate */ + if ( sts[0]->core_brate != sts[1]->core_brate ) + { + sts[0]->core_brate = SID_2k40; + sts[1]->core_brate = SID_2k40; + } + } + + pt_fftL = fft_buff[0]; + pt_fftR = fft_buff[1]; + mem = sts[0]->hFdCngEnc->mem_coherence; + + for ( i_subfr = 0; i_subfr < 2; i_subfr++ ) + { + cr = ci = eL = eR = EPSILON; + + cr += pt_fftL[0] * pt_fftR[0] + pt_fftL[L_FFT / 2] * pt_fftR[L_FFT / 2]; + eL += pt_fftL[0] * pt_fftL[0] + pt_fftL[L_FFT / 2] * pt_fftL[L_FFT / 2]; + eR += pt_fftR[0] * pt_fftR[0] + pt_fftR[L_FFT / 2] * pt_fftR[L_FFT / 2]; + + for ( i = 1; i < L_FFT / 2; i++ ) + { + cr += pt_fftL[i] * pt_fftR[i] + pt_fftL[L_FFT - i] * pt_fftR[L_FFT - i]; + ci += -pt_fftL[i] * pt_fftR[L_FFT - i] + pt_fftR[i] * pt_fftL[L_FFT - i]; + eL += pt_fftL[i] * pt_fftL[i] + pt_fftL[L_FFT - i] * pt_fftL[L_FFT - i]; + eR += pt_fftR[i] * pt_fftR[i] + pt_fftR[L_FFT - i] * pt_fftR[L_FFT - i]; + } + + if ( sts[0]->ini_frame <= 50 || ( sts[0]->vad_flag == 0 && sts[1]->vad_flag == 0 ) ) + { + mem[0] = 0.95f * mem[0] + 0.05f * cr; + mem[1] = 0.95f * mem[1] + 0.05f * ci; + mem[2] = 0.95f * mem[2] + 0.05f * eL; + mem[3] = 0.95f * mem[3] + 0.05f * eR; + } + + pt_fftL += L_FFT; + pt_fftR += L_FFT; + } + + sts[0]->hFdCngEnc->hFdCngCom->coherence = sqrtf( ( mem[0] * mem[0] + mem[1] * mem[1] ) / ( mem[2] * mem[3] ) ); + + return; +} + + +/*-------------------------------------------------------------------* + * FdCngEncodeMDCTStereoSID() + * + * Encode DTX parameters and noise shapes into SID for MDCT-Stereo DTX + *-------------------------------------------------------------------*/ + +void FdCngEncodeMDCTStereoSID( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ +) +{ + ENC_CORE_HANDLE sts[CPE_CHANNELS]; + float *lr_in_ptr[CPE_CHANNELS]; + float *ms_ptr[CPE_CHANNELS]; + float *lr_out_ptr[CPE_CHANNELS]; + float logNoiseEst[CPE_CHANNELS][NPART]; + float E[CPE_CHANNELS]; + float gain[CPE_CHANNELS]; + float weights[NPART]; + int16_t indices[CPE_CHANNELS][FD_CNG_stages_37bits]; + int16_t gain_idx[CPE_CHANNELS]; + int16_t N, stages, ch, p, coh_idx; + float side_energy; + int16_t no_side_flag; + int16_t is_inp_ms; + + is_inp_ms = 0; + if ( hCPE->hCoreCoder[0]->cng_spar_flag == 1 ) + { + is_inp_ms = 1; + } + + + /* set pointers and initialize */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch] = hCPE->hCoreCoder[ch]; + lr_in_ptr[ch] = &sts[ch]->hFdCngEnc->msNoiseEst[0]; + ms_ptr[ch] = &logNoiseEst[ch][0]; + lr_out_ptr[ch] = &sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEst[0]; + } + assert( sts[0]->hFdCngEnc->npartDec == sts[1]->hFdCngEnc->npartDec ); + N = sts[0]->hFdCngEnc->npartDec; + set_f( weights, 1.f, NPART ); + + /* apply log and save energy of original left and right channels */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + E[ch] = 0.0f; + for ( p = 0; p < N; p++ ) + { + ms_ptr[ch][p] = 10.f * log10f( lr_in_ptr[ch][p] + EPSILON ); + E[ch] += ms_ptr[ch][p]; + } + } + + /* M/S transform on log envelopes */ + if ( is_inp_ms == 0 ) + { + convertToMS( N, ms_ptr[0], ms_ptr[1], 0.5f ); + } + + side_energy = 0.0f; + for ( p = 0; p < N; p++ ) + { + side_energy += ms_ptr[1][p] * ms_ptr[1][p]; + } + + /* do not transmit side shape if initial noise shapes are very similar */ + if ( side_energy <= 0.1f ) + { + no_side_flag = 1; + } + else + { + no_side_flag = 0; + } + + /* Quantize noise shapes */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + /* Normalize MSVW input */ + gain[ch] = 0.f; + for ( p = N_GAIN_MIN; p < N_GAIN_MAX; p++ ) + { + gain[ch] += ms_ptr[ch][p]; + } + gain[ch] /= (float) ( N_GAIN_MAX - N_GAIN_MIN ); + + for ( p = 0; p < N; p++ ) + { + ms_ptr[ch][p] -= gain[ch]; + } + + /* MSVQ */ + if ( ch ) + { + stages = FD_CNG_JOINT_stages_25bits; + } + else + { + stages = FD_CNG_stages_37bits; + } + + msvq_enc( cdk_37bits_ivas, NULL, NULL, ms_ptr[ch], levels_37bits, FD_CNG_maxC_37bits, stages, weights, N, FD_CNG_maxN_37bits, indices[ch] ); + msvq_dec( cdk_37bits_ivas, NULL, NULL, stages, N, FD_CNG_maxN_37bits, indices[ch], ms_ptr[ch], NULL ); + } + + if ( no_side_flag ) + { + set_zero( ms_ptr[1], N ); + } + + /* undo M/S */ + if ( is_inp_ms == 0 ) + { + convertToMS( N, ms_ptr[0], ms_ptr[1], 1.0f ); + } + + /* Compute gain against original left and right channels */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + gain[ch] = 0.f; + for ( p = 0; p < N; p++ ) + { + gain[ch] += ms_ptr[ch][p]; + } + gain[ch] = ( E[ch] - gain[ch] ) / (float) N; + apply_scale( &gain[ch], sts[ch]->hFdCngEnc->hFdCngCom->CngBandwidth, sts[ch]->element_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); + + /* quantize gain */ + gain_idx[ch] = (int16_t) floor( gain[ch] * 1.5f + GAIN_Q_OFFSET_IVAS + .5f ); + gain_idx[ch] = max( 0, min( 127, gain_idx[ch] ) ); + + gain[ch] = ( (float) gain_idx[ch] - GAIN_Q_OFFSET_IVAS ) / 1.5f; + } + + /* restore channel noise envelopes */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + HANDLE_FD_CNG_ENC hFdCngEnc = sts[ch]->hFdCngEnc; + HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; + + for ( p = 0; p < N; p++ ) + { + lr_out_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); + } + + /* scale bands and get scalefactors */ + scalebands( lr_out_ptr[ch], hFdCngEnc->partDec, N, hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, hFdCngEnc->stopBandDec - hFdCngEnc->startBandDec, hFdCngCom->cngNoiseLevel, 1 ); + + lpc_from_spectrum( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac ); + + sts[ch]->hDtxEnc->last_CNG_L_frame = sts[ch]->L_frame; + } + + /* quantize channel coherence */ + coh_idx = (int16_t) floor( sts[0]->hFdCngEnc->hFdCngCom->coherence * 15.f + 0.5f ); + coh_idx = max( 0, min( coh_idx, 15 ) ); + + /* ---- Write SID bitstream ---- */ + + /* side info */ + push_indice( sts[0]->hBstr, IND_SID_TYPE, 1, 1 ); + push_indice( sts[0]->hBstr, IND_BWIDTH, sts[0]->bwidth, 2 ); + push_indice( sts[0]->hBstr, IND_ACELP_16KHZ, sts[0]->L_frame == L_FRAME16k ? 1 : 0, 1 ); + push_indice( sts[1]->hBstr, IND_SID_TYPE, coh_idx, 4 ); + push_indice( sts[1]->hBstr, IND_SID_TYPE, no_side_flag, 1 ); + + /* noise shapes and channel gains */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( ch ) + { + stages = FD_CNG_JOINT_stages_25bits; + } + else + { + stages = FD_CNG_stages_37bits; + } + + for ( int16_t i = 0; i < stages; i++ ) + { + push_indice( sts[ch]->hBstr, IND_LSF, indices[ch][i], bits_37bits[i] ); + } + push_indice( sts[ch]->hBstr, IND_ENERGY, gain_idx[ch], 7 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * FdCngEncodeDiracMDCTStereoSID() + * + * Encode DTX parameters and noise shapes into SID for MDCT-Stereo DTX + * together with Dirac + *-------------------------------------------------------------------*/ + +void FdCngEncodeDiracMDCTStereoSID( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ +) +{ + ENC_CORE_HANDLE sts[CPE_CHANNELS]; + float *lr_in_ptr[CPE_CHANNELS]; + float *ms_ptr[CPE_CHANNELS]; + float *lr_out_ptr[CPE_CHANNELS]; + float logNoiseEst[CPE_CHANNELS][NPART]; + float E[CPE_CHANNELS]; + float gain[CPE_CHANNELS]; + float weights[NPART]; + int16_t N[CPE_CHANNELS]; + int16_t indices[CPE_CHANNELS][FD_CNG_stages_37bits]; + int16_t gain_idx[CPE_CHANNELS]; + int16_t ch, p; + + /* set pointers and initialize */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch] = hCPE->hCoreCoder[ch]; + N[ch] = sts[ch]->hFdCngEnc->npartDec; + lr_in_ptr[ch] = &sts[ch]->hFdCngEnc->msNoiseEst[0]; + ms_ptr[ch] = &logNoiseEst[ch][0]; + lr_out_ptr[ch] = &sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEst[0]; + } + set_f( weights, 1.f, NPART ); + + /* apply log and save energy of original left and right channels */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + E[ch] = 0.0f; + for ( p = 0; p < NPART; p++ ) + { + ms_ptr[ch][p] = 10.f * log10f( lr_in_ptr[ch][p] + EPSILON ); + E[ch] += ms_ptr[ch][p]; + } + } + + /* M/S transform on log envelopes */ + convertToMS( NPART, ms_ptr[0], ms_ptr[1], 0.5f ); + + E[0] = 0.0f; + for ( p = 0; p < NPART; p++ ) + { + E[0] += ms_ptr[0][p]; + } + /* Quantize M noise shape */ + /* Normalize MSVW input */ + gain[0] = 0.f; + for ( p = N_GAIN_MIN; p < N_GAIN_MAX; p++ ) + { + gain[0] += ms_ptr[0][p]; + } + gain[0] /= (float) ( N_GAIN_MAX - N_GAIN_MIN ); + + for ( p = 0; p < N[0]; p++ ) + { + ms_ptr[0][p] -= gain[0]; + } + + /* MSVQ */ + msvq_enc( cdk_37bits_ivas, NULL, NULL, ms_ptr[0], levels_37bits, FD_CNG_maxC_37bits, FD_CNG_stages_37bits, weights, N[0], FD_CNG_maxN_37bits, indices[0] ); + msvq_dec( cdk_37bits_ivas, NULL, NULL, FD_CNG_stages_37bits, N[0], FD_CNG_maxN_37bits, indices[0], ms_ptr[0], NULL ); + + /* set S to zero */ + set_zero( ms_ptr[1], NPART ); + + /* compute M gain */ + gain[0] = 0.f; + for ( p = 0; p < NPART; p++ ) + { + gain[0] += ms_ptr[0][p]; + } + gain[0] = ( E[0] - gain[0] ) / (float) N[0]; + apply_scale( &gain[0], sts[0]->hFdCngEnc->hFdCngCom->CngBandwidth, sts[0]->hDtxEnc->last_active_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); + + /* quantize gain */ + gain_idx[0] = (int16_t) floor( gain[0] * 1.5f + GAIN_Q_OFFSET_IVAS + .5f ); + gain_idx[0] = max( 0, min( 127, gain_idx[0] ) ); + + gain[0] = ( (float) gain_idx[0] - GAIN_Q_OFFSET_IVAS ) / 1.5f; + gain[1] = gain[0]; + + /* undo M/S */ + convertToMS( NPART, ms_ptr[0], ms_ptr[1], 1.0f ); + + /* restore channel noise envelopes */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + HANDLE_FD_CNG_ENC hFdCngEnc = sts[ch]->hFdCngEnc; + HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; + + for ( p = 0; p < NPART; p++ ) + { + lr_out_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); + } + + /* NB last band energy compensation */ + if ( hFdCngCom->CngBandwidth == NB ) + { + lr_out_ptr[ch][N[ch] - 1] *= NB_LAST_BAND_SCALE; + } + else if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) + { + lr_out_ptr[ch][N[ch] - 1] *= SWB_13k2_LAST_BAND_SCALE; + } + + /* scale bands and get scalefactors */ + scalebands( lr_out_ptr[ch], hFdCngEnc->partDec, N[ch], hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, hFdCngEnc->stopBandDec - hFdCngEnc->startBandDec, hFdCngCom->cngNoiseLevel, 1 ); + + lpc_from_spectrum( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac ); + + sts[ch]->hDtxEnc->last_CNG_L_frame = sts[ch]->L_frame; + } + sts[0]->hFdCngEnc->hFdCngCom->coherence = 0.0f; + sts[1]->hFdCngEnc->hFdCngCom->coherence = 0.0f; + + /* ---- Write SID bitstream ---- */ + + /* side info */ + push_indice( sts[0]->hBstr, IND_SID_TYPE, 1, 1 ); + push_indice( sts[0]->hBstr, IND_BWIDTH, sts[0]->bwidth, 2 ); + push_indice( sts[0]->hBstr, IND_ACELP_16KHZ, sts[0]->L_frame == L_FRAME16k ? 1 : 0, 1 ); + + /* noise shapes and channel gains */ + for ( int16_t i = 0; i < FD_CNG_stages_37bits; i++ ) + { + push_indice( sts[0]->hBstr, IND_LSF, indices[0][i], bits_37bits[i] ); + } + push_indice( sts[0]->hBstr, IND_ENERGY, gain_idx[0], 7 ); + + + return; +} diff --git a/lib_enc/find_tar.c b/lib_enc/find_tar.c new file mode 100644 index 0000000000..b97cd8fd57 --- /dev/null +++ b/lib_enc/find_tar.c @@ -0,0 +1,123 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * find_targets() + * + * Find the target vectors for excitaiton search: + *-------------------------------------------------------------------*/ + +void find_targets( + const float *speech, /* i : pointer to the speech frame */ + const float *mem_syn, /* i : memory of the synthesis filter */ + const int16_t i_subfr, /* i : subframe index */ + float *mem_w0, /* i/o: weighting filter denominator memory */ + const float *p_Aq, /* i : interpolated quantized A(z) filter */ + const float *res, /* i : residual signal */ + const int16_t L_subfr, /* i : length of vectors for gain quantization */ + const float *Ap, /* i : unquantized A(z) filter with bandwidth expansion */ + const float tilt_fac, /* i : tilt factor */ + float *xn, /* o : Close-loop Pitch search target vector */ + float *cn, /* o : target vector in residual domain */ + float *h1 /* o : impulse response of weighted synthesis filter */ +) +{ + int16_t i; + float error[M + 6 * L_SUBFR]; /* error of quantization */ + float tmp_fl[M + 3 * L_SUBFR], tmp; + + /*------------------------------------------------------------------------* + * Find the target vector for excitation search: + * + * |------| res[n] + * speech[n]---| A(z) |-------- + * |------| | |--------| error[n] |------| + * zero -- (-)--| 1/A(z) |-----------| W(z) |-- target + * exc |--------| |------| + * + * Instead of subtracting the zero-input response of filters from + * the weighted input speech, the above configuration is used to + * compute the target vector. + *-----------------------------------------------------------------------*/ + + for ( i = 0; i < M; i++ ) + { + error[i] = speech[i + i_subfr - M] - mem_syn[i]; + } + + syn_filt( p_Aq, M, &res[i_subfr], error + M, L_subfr, error, 0 ); + residu( Ap, M, error + M, xn, L_subfr ); + deemph( xn, tilt_fac, L_subfr, mem_w0 ); + + /*-----------------------------------------------------------------* + * Find target in residual domain (cn[]) for innovation search + *--------------------------------------------------------------*/ + if ( cn != NULL ) + { + /* first half: xn[] --> cn[] */ + set_f( tmp_fl, 0, M ); + mvr2r( xn, tmp_fl + M, L_subfr / 2 ); + tmp = 0.0f; + + preemph( tmp_fl + M, tilt_fac, L_subfr / 2, &tmp ); + syn_filt( Ap, M, tmp_fl + M, tmp_fl + M, L_subfr / 2, tmp_fl, 0 ); + residu( p_Aq, M, tmp_fl + M, cn, L_subfr / 2 ); + + /* second half: res[] --> cn[] (approximated and faster) */ + mvr2r( &res[i_subfr + ( L_subfr / 2 )], cn + ( L_subfr / 2 ), L_subfr / 2 ); + } + + /*-----------------------------------------------------------------* + * Compute impulse response h1[] of the weighted synthesis filter + *-----------------------------------------------------------------*/ + + set_f( h1, 0, L_subfr ); + mvr2r( Ap, h1, M + 1 ); + syn_filt( p_Aq, M, h1, h1, L_subfr, h1 + ( M + 1 ), 0 ); + tmp = 0.0f; + deemph( h1, tilt_fac, L_subfr, &tmp ); + + return; +} diff --git a/lib_enc/find_tilt.c b/lib_enc/find_tilt.c new file mode 100644 index 0000000000..140c3b84bf --- /dev/null +++ b/lib_enc/find_tilt.c @@ -0,0 +1,216 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define FACT 3.0f /* background noise energy estimation adjusting factor - to maintain the ADR about the same */ +#define TH_COR 0.6f /* Minimum correlation for per bin processing */ +#define TH_D 50.0f /* Difference limit between nearest harmonic and a frequency bin */ +#define TH_PIT ( INT_FS_12k8 / ( 2.0f * TH_D ) ) /* Maximum pitch for per bin processing */ + +/*-------------------------------------------------------------------* + * find_tilt() + * + * Find LF/HF energy ratio + *-------------------------------------------------------------------*/ + +void find_tilt( + const float fr_bands[], /* i : energy in frequency bands */ + const float bckr[], /* i : per band background noise energy estimate */ + float ee[2], /* o : lf/hf E ration for present frame */ + const int16_t pitch[3], /* i : open loop pitch values for 3 half-frames */ + const float voicing[3], /* i : normalized correlation for 3 half-frames */ + const float *lf_E, /* i : per bin energy for low frequencies */ + const float corr_shift, /* i : normalized correlation correction */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t max_band, /* i : maximum critical band */ + float hp_E[], /* o : energy in HF */ + const int16_t codec_mode, /* i : Mode 1 or 2 */ + float *bckr_tilt_lt, /* i/o: lf/hf E ratio of background noise */ + int16_t Opt_vbr_mode ) +{ + float lp_bckr, hp_bckr, lp_E, freq, f0, f1, f2, mean_voi, bin; + const float *pt_bands, *pt_bckr, *tmp_E, *hf_bands, *pt_E; + int16_t cnt, i, nb_bands; + float th_pit; + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + th_pit = TH_PIT; + + if ( bwidth != NB ) + { + /* WB processing */ + bin = BIN; /* First useful frequency bin ~ 50 Hz */ + pt_bands = fr_bands; + tmp_E = lf_E; + pt_bckr = bckr; + nb_bands = 10; + } + else + { + /* NB processing */ + bin = 3.0f * BIN; /* first useful frequency bin ~ 150 Hz */ + pt_bands = fr_bands + 1; /* exlcude 1st critical band */ + tmp_E = lf_E + 2; /* start at the 3rd bin (150 Hz) */ + pt_bckr = bckr + 1; /* exclude 1st critical band */ + nb_bands = 9; /* nb. of "low" frequency bands taken into account in NB processing */ + } + + /*-----------------------------------------------------------------* + * Find spectrum tilt + *-----------------------------------------------------------------*/ + + pt_E = tmp_E; /* pointer at the 1st useful element of the per-bin energy vector */ + hf_bands = fr_bands; + + /* bckr + voicing */ + lp_bckr = mean( pt_bckr, nb_bands ); /* estimated noise E in first critical bands, up to 1270 Hz */ + hp_bckr = 0.5f * ( bckr[max_band - 1] + bckr[max_band] ); /* estimated noise E in last 2 critical bands */ + *bckr_tilt_lt = 0.9f * *bckr_tilt_lt + 0.1f * lp_bckr / hp_bckr; + + if ( codec_mode == MODE2 || Opt_vbr_mode ) + { + lp_bckr *= FACT; + hp_bckr *= FACT; + } + + mean_voi = 0.5f * ( voicing[1] + voicing[2] ) + corr_shift; + f0 = ( (float) INT_FS_12k8 ) / pitch[2]; + + for ( i = 0; i < 2; i++ ) + { + hp_E[i] = 0.5f * ( hf_bands[max_band - 1] + hf_bands[max_band] ) - hp_bckr; /* average E in last 2 critical bands */ + + if ( !Opt_vbr_mode ) + { + if ( hp_E[i] < E_MIN ) + { + /* to avoid division by 0 */ + hp_E[i] = E_MIN; + } + } + else + { + if ( hp_E[i] < 1.0f ) + { + /* to avoid division by 0 */ + hp_E[i] = 1.0f; + } + } + + + if ( ( mean_voi > TH_COR ) && ( pitch[2] < th_pit ) ) + { + /* high-pitched voiced frames */ + freq = bin; /* 1st useful frequency bin */ + cnt = 0; + lp_E = 0.0f; + f1 = 1.5f * f0; /* middle between 2 harmonics */ + f2 = f0; + + while ( freq <= 1270.0f ) /* end frequency of 10th critical band */ + { + /*pt_E*/ + while ( freq <= f1 ) + { + if ( fabs( freq - f2 ) < TH_D ) /* include only bins sufficiently close to harmonics */ + { + lp_E += *pt_E; + cnt++; + } + freq += BIN; + pt_E++; + } + f1 += f0; + f2 += f0; /* next harmonic */ + } + + lp_E = lp_E / (float) cnt - lp_bckr; + pt_E = tmp_E + VOIC_BINS; /* update for next half-frame */ + } + else + { + /* other than high-pitched voiced frames */ + lp_E = mean( pt_bands, nb_bands ) - lp_bckr; /* average E in first critical bands, up to 1270 Hz */ + } + + if ( !Opt_vbr_mode ) + { + if ( lp_E < E_MIN ) + { + /* avoid negative E due to noise subtraction */ + lp_E = E_MIN; + } + } + else + { + + if ( lp_E < 0.0f ) + { + /* avoid negative E due to noise subtraction */ + lp_E = 0.0f; + } + } + + /* calculate the tilt (LF/HF ratio) */ + ee[i] = lp_E / hp_E[i]; + + if ( bwidth == NB ) /* for NB input, compensate for the missing bands */ + { + ee[i] *= 6.0f; + } + + pt_bands += NB_BANDS; /* update pointers for the next half-frame */ + hf_bands += NB_BANDS; + } + + return; +} diff --git a/lib_enc/find_uv.c b/lib_enc/find_uv.c new file mode 100644 index 0000000000..fcfbfaa497 --- /dev/null +++ b/lib_enc/find_uv.c @@ -0,0 +1,491 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define L_ENR ( NB_SSF + 2 ) +#define VOI_THRLD 0.2f + + +/*-------------------------------------------------------------------* + * find_ener_decrease() + * + * Find maximum energy ratio between short sub-subframes in case + * energy is trailing off after a spike + *-------------------------------------------------------------------*/ + +/*! r: maximum energy ratio */ +static float find_ener_decrease( + const int16_t ind_deltaMax, /* i : index of the beginning of maximum energy search */ + const float *pt_enr_ssf /* i : Pointer to the energy buffer */ +) +{ + int16_t i, j, end, flag; + float maxEnr, minEnr, dE2; + + dE2 = 0.0f; + j = ind_deltaMax + 2; + end = j + L_ENR; + maxEnr = pt_enr_ssf[j]; + j++; + flag = 0; + for ( i = j; i < end; i++ ) + { + if ( pt_enr_ssf[i] > maxEnr && flag == 0 ) + { + maxEnr = pt_enr_ssf[i]; + j++; + } + else + { + flag = 1; + } + } + + minEnr = maxEnr; + for ( i = j; i < end; i++ ) + { + if ( pt_enr_ssf[i] < minEnr ) + { + minEnr = pt_enr_ssf[i]; + } + } + + dE2 = maxEnr / ( minEnr + 1.0e5f ); + + return dE2; +} + + +/*-------------------------------------------------------------------* + * find_uv() + * + * Decision about coder type + *-------------------------------------------------------------------*/ + +/*! r: coding type */ +int16_t find_uv( + Encoder_State *st, /* i/o: encoder state structure */ + const float *pitch_fr, /* i : pointer to adjusted fractional pitch (4 val.) */ + const float *voicing_fr, /* i : refined correlation for each subframes */ + const float *speech, /* i : pointer to speech signal for E computation */ + const float *ee, /* i : lf/hf Energy ratio for present frame */ + float *dE1X, /* o : sudden energy increase for S/M classifier */ + const float corr_shift, /* i : normalized correlation correction in noise */ + const float relE, /* i : relative frame energy */ + const float Etot, /* i : total energy */ + const float hp_E[], /* i : energy in HF */ + int16_t *flag_spitch, /* i/o: flag to indicate very short stable pitch and high correlation */ + const int16_t last_core_orig, /* i : original last core */ + STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier structure */ +) +{ + const float *pt_speech; + int16_t i, coder_type, ind_deltaMax, tmp_offset_flag, nb_cond, flag_low_relE; + float fac, mean_voi3, mean_ee, relE_thres; + float enr_ssf[4 * NB_SSF + 2]; + float dE1, *pt_enr_ssf, *pt_enr_ssf1, dE2, dE3, dE2_th, ee0_th, ee1_th, voi_th; + float mean_voi3_offset; + float voicing_m, dpit1, dpit2, dpit3; + int16_t Last_Resort; + float vadnoise; + + if ( st->hSC_VBR != NULL ) + { + Last_Resort = st->hSC_VBR->Last_Resort; + vadnoise = st->hSC_VBR->vadnoise; + } + else + { + Last_Resort = 0; + vadnoise = 0; + } + + /*-----------------------------------------------------------------* + * Detect sudden energy increases to catch voice and music attacks (dE1) + * + * - Find maximum energy per short sub-subframe + * two sub-subframe sets are used, shifted by half the sub-subframe length + * - Find maximum energy increase (ratio) between adjacent sub-subframes + *-----------------------------------------------------------------*/ + + /* find maximum energy per sub-subframe */ + pt_speech = speech - SSF; + pt_enr_ssf = enr_ssf + 2 * NB_SSF; + for ( i = 0; i < 2 * ( NB_SSF + 1 ); i++ ) + { + emaximum( pt_speech, SSF, pt_enr_ssf ); + pt_speech += ( SSF / 2 ); + pt_enr_ssf++; + } + + dE1 = 0.0f; + ind_deltaMax = 0; + pt_enr_ssf = enr_ssf + 2 * NB_SSF; + pt_enr_ssf1 = pt_enr_ssf + 2; + + /* test on energy increase between adjacent sub-subframes */ + for ( i = 0; i < 2 * NB_SSF; i++ ) + { + fac = *pt_enr_ssf1 / ( *pt_enr_ssf + 1.0f ); + if ( fac > dE1 ) + { + dE1 = fac; + ind_deltaMax = i; + } + + pt_enr_ssf++; + pt_enr_ssf1++; + } + + if ( hStereoClassif != NULL ) + { + if ( st->idchan == 0 ) + { + hStereoClassif->dE1_ch1 = dE1; + } + else + { + hStereoClassif->dE1_ch2 = dE1; + } + } + + if ( dE1X != NULL ) + { + *dE1X = dE1; + } + + /*-----------------------------------------------------------------* + * Average spectral tilt + * Average voicing (normalized correlation) + *-----------------------------------------------------------------*/ + + mean_ee = 1.0f / 3.0f * ( st->ee_old + ee[0] + ee[1] ); + mean_voi3 = 1.0f / 3.0f * ( st->voicing[0] + st->voicing[1] + st->voicing[2] ); + + /*-----------------------------------------------------------------* + * Total frame energy difference (dE3) + *-----------------------------------------------------------------*/ + + dE3 = Etot - st->hNoiseEst->Etot_last; + + /*-----------------------------------------------------------------* + * Energy decrease after spike (dE2) + *-----------------------------------------------------------------*/ + + /* set different thresholds and conditions for NB and WB input */ + if ( st->input_bwidth == NB ) + { + dE2_th = 21.0f; + nb_cond = ( mean_voi3 + corr_shift ) < 0.68f; + } + else + { + dE2_th = 30.0f; + nb_cond = 1; /* no additional condition for WB input */ + } + + /* calcualte maximum energy decrease */ + dE2 = 0.0f; + pt_enr_ssf = enr_ssf + 2 * NB_SSF; + + if ( dE1 > 30.0f && nb_cond ) + { + if ( 2 * NB_SSF - ind_deltaMax < L_ENR ) + { + st->old_ind_deltaMax = ind_deltaMax; + mvr2r( pt_enr_ssf, st->old_enr_ssf, 2 * NB_SSF ); + } + else + { + st->old_ind_deltaMax = -1; + dE2 = find_ener_decrease( ind_deltaMax, pt_enr_ssf ); + if ( dE2 > dE2_th ) + { + st->spike_hyst = 0; + } + } + } + else + { + if ( st->old_ind_deltaMax >= 0 ) + { + mvr2r( st->old_enr_ssf, enr_ssf, 2 * NB_SSF ); + dE2 = find_ener_decrease( st->old_ind_deltaMax, enr_ssf ); + if ( dE2 > dE2_th ) + { + st->spike_hyst = 1; + } + } + st->old_ind_deltaMax = -1; + } + + /*-----------------------------------------------------------------* + * Detection of voiced offsets (tmp_offset_flag) + *-----------------------------------------------------------------*/ + + tmp_offset_flag = 1; + + if ( st->input_bwidth != NB ) + { + ee0_th = 2.4f; + voi_th = 0.74f; + } + else + { + ee0_th = 9.8f; + voi_th = 0.76f; + } + + if ( ( st->last_coder_type_raw == UNVOICED ) || /* previous frame was unvoiced */ + ( ( ee[0] < ee0_th ) && ( hp_E[0] > (float) E_MIN ) && /* energy is concentrated in high frequencies provided that some energy is present in HF. The cast to (float) is needed for Linux i686 (gcc version 4.7.2), otherwise the criterion hp_E[0] > E_MIN holds true if E_MIN was assigned to hp_E[0] before */ + ( st->voicing[0] + corr_shift < voi_th ) ) ) /* normalized correlation is low */ + { + tmp_offset_flag = 0; + } + + /*-----------------------------------------------------------------* + * Decision about UC + *-----------------------------------------------------------------*/ + + /* SC-VBR - set additional parameters and thresholds for SC-VBR */ + mean_voi3_offset = 0.0f; + flag_low_relE = 0; + ee1_th = 9.5f; + if ( st->Opt_SC_VBR || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) ) /* Allow the low energy flag for the secondary channel */ + { + ee1_th = 8.5f; + + /* SC-VBR - determine the threshold on relative energy as a function of lp_noise */ + if ( st->input_bwidth != NB ) + { + if ( Last_Resort == 0 ) + { + relE_thres = 0.650f * st->lp_noise - 33.5f; + } + else + { + relE_thres = 0.700f * st->lp_noise - 33.5f; + } + } + else + { + relE_thres = 0.60f * st->lp_noise - 28.2f; + } + + if ( relE_thres < -25.0f ) + { + relE_thres = -25.0f; + } + + /* SC-VBR = set flag on low relative energy */ + if ( relE < relE_thres ) + { + flag_low_relE = 1; + } + + /* SC-VBR - correction of voicing threshold for NB inputs (important only in noisy conditions) */ + if ( st->input_bwidth == NB && vadnoise < 20.0f ) + { + mean_voi3_offset = 0.05f; + } + } + + /* make decision whether frame is unvoiced */ + coder_type = GENERIC; + if ( st->input_bwidth == NB ) + { + if ( ( ( mean_voi3 + corr_shift < 0.68f + mean_voi3_offset ) && /* normalized correlation low */ + ( ( st->voicing[2] + corr_shift ) < 0.79f ) && /* normalized correlation low on look-ahead - onset detection */ + ( ee[0] < 10.0f ) && ( hp_E[0] > (float) E_MIN ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ + ( ee[1] < ee1_th ) && ( hp_E[1] > (float) E_MIN ) && /* ... biased towards look-ahead to detect onsets. The cast to (float) is needed for Linux i686 (gcc version 4.7.2), otherwise the criterion hp_E[0] > E_MIN holds true if E_MIN was assigned to hp_E[] before */ + ( tmp_offset_flag == 0 ) && /* take care of voiced offsets */ + ( dE1 <= 29.0f ) && /* avoid on sharp energy spikes */ + ( st->old_dE1 <= 29.0f ) && /* + one frame hysteresis */ + ( st->spike_hyst < 0 ) ) || /* avoid after sharp energy spikes followed by decay (e.g. castanets) */ + flag_low_relE ) /* low relative frame energy (only for SC-VBR) */ + { + coder_type = UNVOICED; + } + } + else + { + if ( ( ( mean_voi3 + corr_shift < 0.695f + mean_voi3_offset ) && /* normalized correlation low */ + ( ee[0] < 6.2f ) && ( hp_E[0] > (float) E_MIN ) && /* energy concentrated in high frequencies provided that some energy is present in HF */ + ( ee[1] < 6.2f ) && ( hp_E[1] > (float) E_MIN ) && /* ... biased towards look-ahead to detect onsets. The cast to (float) is needed for Linux i686 (gcc version 4.7.2), otherwise the criterion hp_E[0] > E_MIN holds true if E_MIN was assigned to hp_E[] before */ + ( tmp_offset_flag == 0 ) && /* take care of voiced offsets */ + ( dE1 <= 30.0f ) && /* avoid on sharp energy spikes */ + ( st->old_dE1 <= 30.0f ) && /* + one frame hysteresis */ + ( st->spike_hyst < 0 ) ) || /* avoid after sharp energy spikes followed by decay (e.g. castanets) */ + ( flag_low_relE && st->old_dE1 <= 30.0f ) ) /* low relative frame energy (only for SC-VBR) */ + { + coder_type = UNVOICED; + } + } + + /*-----------------------------------------------------------------* + * Decision about VC + *-----------------------------------------------------------------*/ + + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->set_ppp_generic = 0; + } + + if ( st->localVAD == 1 && coder_type == GENERIC && last_core_orig != AMR_WB_CORE ) + { + if ( ( voicing_fr[0] > 0.605f ) && /* normalized correlation high in 1st sf. */ + ( voicing_fr[1] > 0.605f ) && /* normalized correlation high in 2st sf. */ + ( voicing_fr[2] > 0.605f ) && /* normalized correlation high in 3st sf. */ + ( voicing_fr[3] > 0.605f ) && /* normalized correlation high in 4st sf. */ + ( mean_ee > 4.0f ) && /* energy concentrated in low frequencies */ + ( fabs( pitch_fr[1] - pitch_fr[0] ) < 3.0f ) && /* small OL pitch difference in 1st sf. */ + ( fabs( pitch_fr[2] - pitch_fr[1] ) < 3.0f ) && /* small OL pitch difference in 2nd sf. */ + ( fabs( pitch_fr[3] - pitch_fr[2] ) < 3.0f ) ) /* small OL pitch difference in 3rd sf. */ + { + coder_type = VOICED; + } + else if ( st->Opt_SC_VBR && st->input_bwidth == NB && vadnoise < 20 ) + { + if ( ( voicing_fr[0] > 0.25f ) && /* normalized correlation high in 1st sf. */ + ( voicing_fr[1] > 0.25f ) && /* normalized correlation high in 2st sf. */ + ( voicing_fr[2] > 0.25f ) && /* normalized correlation high in 3st sf. */ + ( voicing_fr[3] > 0.25f ) && /* normalized correlation high in 4st sf. */ + ( mean_ee > 1.0f ) && /* energy concentrated in low frequencies (used 1.0 for WB) */ + ( fabs( pitch_fr[1] - pitch_fr[0] ) < 5.0f ) && /* small OL pitch difference in 1st sf. */ + ( fabs( pitch_fr[2] - pitch_fr[1] ) < 5.0f ) && /* small OL pitch difference in 2nd sf. */ + ( fabs( pitch_fr[3] - pitch_fr[2] ) < 5.0f ) ) /* small OL pitch difference in 3rd sf. */ + { + st->hSC_VBR->set_ppp_generic = 1; + coder_type = VOICED; + } + } + + /* set VOICED mode for frames with very stable pitch and high correlation + and avoid to switch to AUDIO/MUSIC later */ + voicing_m = mean( voicing_fr, NB_SUBFR ); + + dpit1 = (float) fabs( pitch_fr[0] - pitch_fr[1] ); + dpit2 = (float) fabs( pitch_fr[1] - pitch_fr[2] ); + dpit3 = (float) fabs( pitch_fr[2] - pitch_fr[3] ); + + if ( *flag_spitch || ( dpit1 <= 3.0f && dpit2 <= 3.0f && dpit3 <= 3.0f && + voicing_m > 0.95f && st->voicing_sm > 0.97f ) ) + { + coder_type = VOICED; + *flag_spitch = 1; /*to avoid switch to AUDIO/MUSIC later*/ + } + } + + /*-----------------------------------------------------------------* + * Channel-aware mode - set RF mode and total bitrate + *-----------------------------------------------------------------*/ + + st->rf_mode = st->Opt_RF_ON; + + if ( coder_type == GENERIC ) + { + if ( ( voicing_fr[0] < VOI_THRLD ) && /* normalized correlation high in 1st sf. */ + ( voicing_fr[1] < VOI_THRLD ) && /* normalized correlation high in 2st sf. */ + ( voicing_fr[2] < VOI_THRLD ) && /* normalized correlation high in 3st sf. */ + ( voicing_fr[3] < VOI_THRLD ) && /* normalized correlation high in 4st sf. */ + ( vadnoise > 25.0f ) ) /* when speech is clean */ + { + st->rf_mode = 0; + + /* Current frame cannot be compressed to pack the partial redundancy */ + if ( st->rf_mode != st->Opt_RF_ON ) + { + core_coder_mode_switch( st, st->last_total_brate, 0 ); + } + } + } + + /*-----------------------------------------------------------------* + * UNCLR classifier + *-----------------------------------------------------------------*/ + + if ( hStereoClassif != NULL ) + { + if ( st->element_mode > EVS_MONO && ( coder_type == GENERIC || coder_type == UNVOICED || coder_type == INACTIVE || st->localVAD == 0 ) && hStereoClassif->unclr_sw_enable_cnt[st->idchan] < MAX_UV_CNT ) + { + hStereoClassif->unclr_sw_enable_cnt[st->idchan]++; + } + else + { + hStereoClassif->unclr_sw_enable_cnt[st->idchan] = 0; + } + } + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + /* update spike hysteresis parameters */ + if ( st->spike_hyst >= 0 && st->spike_hyst < 2 ) + { + st->spike_hyst++; + } + + /* reset spike hysteresis */ + if ( ( st->spike_hyst > 1 ) && + ( dE3 > 5.0f || /* energy increases */ + ( relE > -13.0f && ( mean_voi3 + corr_shift > 0.695f ) ) ) ) /* normalized correlation is high */ + { + st->spike_hyst = -1; + } + + /* update tilt parameters */ + st->ee_old = ee[1]; + st->old_dE1 = dE1; + + /* save the raw coder_type for various modules later in the codec (the reason is that e.g. UNVOICED is not used (rewritten) at higher rates) */ + st->coder_type_raw = coder_type; + + return coder_type; +} diff --git a/lib_enc/find_wsp.c b/lib_enc/find_wsp.c new file mode 100644 index 0000000000..d2e2575b52 --- /dev/null +++ b/lib_enc/find_wsp.c @@ -0,0 +1,98 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * find_wsp() + * + * Compute weighted speech used in open-loop pitch search + *-------------------------------------------------------------------*/ + +void find_wsp( + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr, /* i : length of subframe */ + const int16_t nb_subfr, /* i : number of subframes */ + const float *A, /* i : A(z) filter coefficients */ + float *Aw, /* o : weighted A(z) filter coefficients */ + const float *speech, /* i : pointer to the denoised speech frame */ + const float tilt_fact, /* i : tilt factor */ + float *wsp, /* o : poitnter to the weighted speech frame */ + float *mem_wsp, /* i/o: W(Z) denominator memory */ + const float gamma, /* i : weighting factor */ + const int16_t L_look /* i : look-ahead */ +) +{ + float *p_Aw, tmp; + int16_t i_subfr; + + + /*-----------------------------------------------------------------* + * Compute weighted A(z) unquantized for subframes + *-----------------------------------------------------------------*/ + + weight_a_subfr( nb_subfr, A, Aw, gamma, M ); + + /*-----------------------------------------------------------------* + * Compute weighted speech for all subframes + *-----------------------------------------------------------------*/ + + p_Aw = Aw; + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) + { + residu( p_Aw, M, &speech[i_subfr], &wsp[i_subfr], L_subfr ); + p_Aw += ( M + 1 ); + } + p_Aw -= ( M + 1 ); + + /*-----------------------------------------------------------------* + * Weighted speech computation is extended on look-ahead + *-----------------------------------------------------------------*/ + + deemph( wsp, tilt_fact, L_frame, mem_wsp ); + residu( p_Aw, M, &speech[L_frame], &wsp[L_frame], L_look ); + tmp = *mem_wsp; + deemph( &wsp[L_frame], tilt_fact, L_look, &tmp ); + + return; +} diff --git a/lib_enc/frame_spec_dif_cor_rate.c b/lib_enc/frame_spec_dif_cor_rate.c new file mode 100644 index 0000000000..1922964416 --- /dev/null +++ b/lib_enc/frame_spec_dif_cor_rate.c @@ -0,0 +1,97 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * frame_spec_dif_cor_rate() + * + * + *-------------------------------------------------------------------*/ + +void frame_spec_dif_cor_rate( + float spec_amp[], /* i : spectral amplitude */ + float pre_spec_low_dif[], /* i/o: low spectrum different */ + float f_tonality_rate[] /* o : tonality rate */ +) +{ + int16_t i; + float spec_low_dif[59]; + float tmp, spec_low_dif_cor_rate, spec_dif_cor_rate; + float m, dx, dy; + + + for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) + { + tmp = spec_amp[i + 6] - spec_amp[i + 5]; + if ( tmp < 0 ) + { + spec_low_dif[i] = 0; + } + else + { + spec_low_dif[i] = tmp; + } + } + m = 0; + dx = 0; + dy = 0; + for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) + { + m += spec_low_dif[i] * pre_spec_low_dif[i]; + dx += spec_low_dif[i] * spec_low_dif[i]; + dy += pre_spec_low_dif[i] * pre_spec_low_dif[i]; + } + + /* 1073741.824 = 0.001 * 32768 * 32768 */ + spec_low_dif_cor_rate = (float) ( m / sqrt( ( dx * dy + 1073741.824f ) ) ); + + spec_dif_cor_rate = spec_low_dif_cor_rate; + f_tonality_rate[0] = spec_dif_cor_rate; + f_tonality_rate[1] = f_tonality_rate[1] * 0.96f + spec_dif_cor_rate * 0.04f; + f_tonality_rate[2] = f_tonality_rate[2] * 0.90f + spec_dif_cor_rate * 0.1f; + + for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) + { + pre_spec_low_dif[i] = spec_low_dif[i]; + } + + return; +} diff --git a/lib_enc/gain_enc.c b/lib_enc/gain_enc.c new file mode 100644 index 0000000000..41389a6edb --- /dev/null +++ b/lib_enc/gain_enc.c @@ -0,0 +1,1048 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define RANGE 64 + +/*---------------------------------------------------------------------* + * Es_pred_enc() + * + * Calculation and quantization of average predicted innovation energy to be + *---------------------------------------------------------------------*/ + +void Es_pred_enc( + float *Es_pred, /* o : predicited scaled innovation energy */ + int16_t *Es_pred_indice, /* o : indice corresponding to above parameter */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr, /* i : length of the subframe */ + const float *res, /* i : residual signal */ + const float *voicing, /* i : normalized correlation in three 1/2frames */ + const int16_t nb_bits, /* i : allocated number of bits */ + const int16_t no_ltp /* i : no_ltp flag */ +) +{ + int16_t i, i_subfr, size; + float tmp, dist, mean_ener_code, ener; + float weight; + const float *qua_table; + + /*----------------------------------------------------------* + * calculate the average residual signal energy + *----------------------------------------------------------*/ + if ( L_frame == L_FRAME ) + { + weight = 0.25f; + } + else /* L_frame == L_FRAME16k */ + { + weight = 0.2f; + } + + mean_ener_code = 0.0f; + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) + { + /* calculate the energy of residual signal */ + ener = sum2_f( &res[i_subfr], L_subfr ) + 0.01f; + ener = 10 * (float) log10( ener / ( (float) L_subfr ) ); + if ( ( ener < 0 ) && !( no_ltp ) ) + { + ener = 0; + } + + /* update the average energy of residual signal */ + mean_ener_code += weight * ener; + } + + if ( !no_ltp ) + { + /*----------------------------------------------------------* + * subtract an estimate of adaptive codebook contribution + *----------------------------------------------------------*/ + + mean_ener_code -= 10.0f * ( 0.5f * voicing[0] + 0.5f * voicing[1] ); + + /*----------------------------------------------------------* + * quantize the average predicted innovation energy + *----------------------------------------------------------*/ + switch ( nb_bits ) + { + case 5: + { + qua_table = Es_pred_qua_5b; + break; + } + case 4: + { + qua_table = Es_pred_qua_4b; + break; + } + case 3: + { + qua_table = Es_pred_qua_3b; + break; + } + default: + { + qua_table = Es_pred_qua_5b; + break; + } + } + } + else + { + qua_table = Es_pred_qua_4b_no_ltp; + } + + /* select codebook, size and number of bits */ + size = 1 << nb_bits; + + /* find the nearest neighbour (codevector) */ + tmp = 1e30f; + *Es_pred_indice = 0; + for ( i = 0; i < size; i++ ) + { + dist = (float) fabs( mean_ener_code - qua_table[i] ); + if ( dist < tmp ) + { + tmp = dist; + *Es_pred = qua_table[i]; + *Es_pred_indice = i; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * gain_enc_amr_wb() + * + * Quantization of pitch and codebook gains (used also in AMR-WB IO mode) + * MA prediction is performed on the innovation energy (in dB with mean removed). + * An initial predicted gain, gcode0, is first determined and the correction + * factor alpha = g_code / gcode0 is quantized. + * The pitch gain and the correction factor are vector quantized and the + * mean-squared weighted error criterion is used in the quantizer search. + *-------------------------------------------------------------------*/ + +void gain_enc_amr_wb( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *xn, /* i : target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + const int32_t core_brate, /* i : core bitrate */ + float *gain_pit, /* i/o: pitch gain / Quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ + const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ + float *past_qua_en /* i/o: gain quantization memory (4 words) */ +) +{ + int16_t index, i, j, min_ind, size, nBits; + float dist, dist_min, g_pitch, g_code, qua_en, gcode0; + const float *p, *t_qua_gain; + + /*-----------------------------------------------------------------* + * gain computation correlations + * find raw innovation energy + *-----------------------------------------------------------------*/ + + E_corr_xy2( xn, y1, y2, g_corr, L_SUBFR ); + g_corr[2] += 0.01F; + g_corr[3] -= 0.02F; + g_corr[4] += 0.02F; + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); + + /*-----------------------------------------------------------------* + * find the initial quantization pitch index + * set gains search range + *-----------------------------------------------------------------*/ + + if ( core_brate < ACELP_12k65 ) + { + t_qua_gain = t_qua_gain6b; + nBits = 6; + min_ind = 0; + size = RANGE; + if ( clip_gain == 1 ) + { + size -= 16; /* limit pitch gain to 1.0 */ + } + } + else + { + t_qua_gain = t_qua_gain7b; + nBits = 7; + p = t_qua_gain7b + RANGE; /* pt at 1/4th of table */ + j = NB_QUA_GAIN7B - RANGE; + if ( clip_gain == 1 ) + { + j -= 27; /* limit pitch gain to 1.0 */ + } + + min_ind = 0; + g_pitch = *gain_pit; + + + for ( i = 0; i < j; i++, p += 2 ) + { + if ( g_pitch > *p ) + { + min_ind++; + } + } + size = RANGE; + } + + /*-----------------------------------------------------------------* + * predicted code gain + *-----------------------------------------------------------------*/ + + /* start with predicting code energy in dB */ + gcode0 = MEAN_ENER; + for ( i = 0; i < GAIN_PRED_ORDER; i++ ) + { + gcode0 += pred_gain[i] * past_qua_en[i]; + } + gcode0 += (float) ( 20.0 * log10( *gain_inov ) ); + + /* convert from energy in dB to gain */ + gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); + + /*-----------------------------------------------------------------* + * search the codebook + *-----------------------------------------------------------------*/ + + dist_min = 3.402823466e+38F; + p = t_qua_gain + min_ind * 2; + + index = 0; + for ( i = 0; i < size; i++ ) + { + g_pitch = *p++; /* pitch gain */ + g_code = gcode0 * *p++; /* code gain */ + dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + index = index + min_ind; + *gain_pit = t_qua_gain[index * 2]; + qua_en = t_qua_gain[index * 2 + 1]; + *gain_code = qua_en * gcode0; + + /*-----------------------------------------------------------------* + * update table of past quantized energies + *-----------------------------------------------------------------*/ + + for ( i = GAIN_PRED_ORDER - 1; i > 0; i-- ) + { + past_qua_en[i] = past_qua_en[i - 1]; + } + past_qua_en[0] = (float) ( 20.0 * log10( qua_en ) ); + + push_indice( hBstr, IND_GAIN, index, nBits ); + + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + +/*---------------------------------------------------------------------* + * gain_enc_mless() + * + * Quantization of pitch and codebook gains without prediction (memory-less) + * - an initial predicted gain, gcode0, is first determined based on + * the predicted average innovation energy + * - a correction factor gamma = g_code / gcode0 is then vector quantized along with gain_pit + * - the mean-squared weighted error criterion is used for codebook search + *---------------------------------------------------------------------*/ + +void gain_enc_mless( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t element_mode, /* i : element mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *xn, /* i : target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + const float Es_pred, /* i : predicted scaled innovation energy */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ + const int16_t clip_gain /* i : gain pitch clipping flag (1 = clipping) */ +) +{ + int16_t index, i, size, nBits; + float dist, dist_min, g_pitch, g_code, gcode0, Ei, Ecode; + int16_t nBits2; + float tmp1, tmp2; + const float *p, *qua_table; + + /*-----------------------------------------------------------------* + * calculate the rest of the correlation coefficients + * c2 = , c3 = -2, c4 = 2 + *-----------------------------------------------------------------*/ + + E_corr_xy2( xn, y1, y2, g_corr, L_SUBFR ); + g_corr[2] += 0.01F; + g_corr[3] -= 0.02F; + g_corr[4] += 0.02F; + + /*-----------------------------------------------------------------* + * calculate the unscaled innovation energy + * calculate the predicted gain code + *-----------------------------------------------------------------*/ + + Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + Ei = 10 * (float) log10( Ecode ); + gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); + + /*-----------------------------------------------------------------* + * select the codebook, size and number of bits + * set the gains searching range + *-----------------------------------------------------------------*/ + + nBits = gains_mode[i_subfr / L_SUBFR]; + + if ( ( tc_subfr == 3 * L_SUBFR && i_subfr == 3 * L_SUBFR && L_frame == L_FRAME ) || + ( tc_subfr == 4 * L_SUBFR && i_subfr == 4 * L_SUBFR && L_frame == L_FRAME16k ) ) + { + /* in case of attack at the end of the frame, use scalar gain quantizers */ + tmp1 = ( g_corr[0] * g_corr[2] ) - ( 0.25f * g_corr[4] * g_corr[4] ); + tmp2 = -0.5f * g_corr[1] / tmp1; + tmp1 = -0.5f * g_corr[3] / tmp1; + + *gain_pit = ( g_corr[2] * tmp2 ) - ( 0.5f * g_corr[4] * tmp1 ); + *gain_code = ( g_corr[0] * tmp1 ) - ( 0.5f * g_corr[4] * tmp2 ); + + *gain_pit = max( G_PITCH_MIN_TC192, min( *gain_pit, G_PITCH_MAX_TC192 ) ); + + /* set number of bits for two SQs */ + nBits2 = ( nBits + 1 ) >> 1; + nBits = nBits >> 1; + + /* gain_pit Q */ + tmp1 = ( G_PITCH_MAX_TC192 - G_PITCH_MIN_TC192 ) / ( ( 1 << nBits ) - 1 ); /* set quantization step */ + index = usquant( *gain_pit, gain_pit, G_PITCH_MIN_TC192, tmp1, ( 1 << nBits ) ); + push_indice( hBstr, IND_GAIN_PIT, index, nBits ); + + /* gain_code Q */ + *gain_code /= gcode0; + index = gain_quant( gain_code, G_CODE_MIN_TC192, G_CODE_MAX_TC192, nBits2 ); + push_indice( hBstr, IND_GAIN_CODE, index, nBits2 ); + *gain_code *= gcode0; + } + else + { + size = 1 << nBits; + + switch ( nBits ) + { + case 7: + { + qua_table = gain_qua_mless_7b; + if ( clip_gain == 1 ) + { + size -= 30; + } + break; + } + case 6: + { + qua_table = gain_qua_mless_6b; + + if ( element_mode > EVS_MONO ) + { + qua_table = gain_qua_mless_6b_stereo; + } + + if ( clip_gain == 1 ) + { + size -= 14; + } + break; + } + case 5: + { + qua_table = gain_qua_mless_5b; + if ( clip_gain == 1 ) + { + size -= 6; + } + break; + } + default: + { + qua_table = gain_qua_mless_6b; + size = 64; + if ( clip_gain == 1 ) + { + size -= 14; + } + break; + } + } + + /* in case of AVQ inactive, limit the gain_pit to 0.65 */ + if ( clip_gain == 2 && nBits == 6 ) + { + size -= 36; + nBits--; + } + + /*-----------------------------------------------------------------* + * search for the best quantizer + *-----------------------------------------------------------------*/ + + p = qua_table; + dist_min = 3.402823466e+38F; + index = 0; + for ( i = 0; i < size; i++ ) + { + g_pitch = *p++; /* pitch gain */ + g_code = gcode0 * *p++; /* code gain */ + dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + *gain_pit = qua_table[index * 2]; + *gain_code = qua_table[index * 2 + 1] * gcode0; + + push_indice( hBstr, IND_GAIN, index, nBits ); + } + + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + + +/*---------------------------------------------------------------------* + * gain_enc_SQ() + * + * Scalar Quantization of pitch and codebook gains without prediction + * - an initial predicted gain, gcode0, is first determined based on + * the predicted scaled innovation energy + * - a correction factor gamma = g_code / gcode0 is then vector quantized + * along with gain_pit + * - the mean-squared weighted error criterion is used for codebook search + *---------------------------------------------------------------------*/ + +void gain_enc_SQ( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t i_subfr, /* i : subframe index */ + const float *xn, /* i : target vector */ + const float *yy1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + const float Es_pred, /* i : predicted scaled innovation energy */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ + const int16_t clip_gain /* i : gain pitch clipping flag (1 = clipping) */ +) +{ + int16_t index, nBits_pitch, nBits_code; + float g_code, gcode0, Ei, Ecode, tmp1, tmp2; + int16_t tmp16; + /*-----------------------------------------------------------------* + * calculate the rest of the correlation coefficients + * c2 = , c3 = -2, c4 = 2 + *-----------------------------------------------------------------*/ + + g_corr[1] *= -0.5; + g_corr[2] = dotp( y2, y2, L_SUBFR ) + 0.01f; + g_corr[3] = dotp( xn, y2, L_SUBFR ) - 0.02f; + g_corr[4] = dotp( yy1, y2, L_SUBFR ) + 0.02f; + + /*-----------------------------------------------------------------* + * calculate the unscaled innovation energy + * calculate the predicted gain code + * calculate optimal gains + *-----------------------------------------------------------------*/ + + Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + Ei = 10 * (float) log10( Ecode ); + gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); + + tmp1 = ( g_corr[0] * g_corr[2] ) - ( g_corr[4] * g_corr[4] ); + tmp2 = g_corr[1] / tmp1; + tmp1 = g_corr[3] / tmp1; + + *gain_pit = ( g_corr[2] * tmp2 ) - ( g_corr[4] * tmp1 ); + *gain_code = ( g_corr[0] * tmp1 ) - ( g_corr[4] * tmp2 ); + + *gain_pit = max( G_PITCH_MIN, min( *gain_pit, G_PITCH_MAX ) ); + + /*-----------------------------------------------------------------* + * limit the pitch gain searching range (if indicated by clip_gain) + *-----------------------------------------------------------------*/ + + if ( clip_gain == 1 && *gain_pit > 0.95f ) + { + *gain_pit = 0.95f; + } + else if ( clip_gain == 2 && *gain_pit > 0.65f ) + { + *gain_pit = 0.65f; + } + + /*-----------------------------------------------------------------* + * search for the best quantized values + *-----------------------------------------------------------------*/ + + nBits_pitch = gains_mode[i_subfr / L_SUBFR]; + nBits_code = ( nBits_pitch + 1 ) >> 1; + nBits_pitch = nBits_pitch >> 1; + + div_s( &tmp16, 1, ( ( 1 << ( nBits_pitch ) ) - 1 ) ); /* Q15*/ + tmp1 = (float) mult_r( (int16_t) ( G_PITCH_MAX * 8192.0f + 0.5f ), tmp16 ) / 8192.0f; + index = usquant( *gain_pit, gain_pit, G_PITCH_MIN, tmp1, ( 1 << nBits_pitch ) ); + push_indice( hBstr, IND_GAIN_PIT, index, nBits_pitch ); + + g_code = *gain_code / gcode0; + index = gain_quant( &g_code, G_CODE_MIN, G_CODE_MAX, nBits_code ); + *gain_code = g_code * gcode0; + push_indice( hBstr, IND_GAIN_CODE, index, nBits_code ); + + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + +/*-------------------------------------------------------------------* + * gain_enc_gaus() + * + * Quantization of gain for Gaussian codebook + *-------------------------------------------------------------------*/ + +/*! r: Return index of quantization */ +int16_t gain_enc_gaus( + float *gain, /* i/o: Code gain to quantize */ + const int16_t bits, /* i : number of bits to quantize */ + const float lowBound, /* i : lower bound of quantizer (dB) */ + const float topBound /* i : upper bound of quantizer (dB) */ +) +{ + int16_t index; + float enr, stepSize; + + enr = (float) ( 20.0 * log10( *gain + 0.001f ) ); /* codebook gain in dB */ + + /*-----------------------------------------------------------------* + * quantize linearly the log E + *-----------------------------------------------------------------*/ + + stepSize = ( topBound - lowBound ) / ( (float) ( 1 << bits ) ); + index = (int16_t) ( ( ( enr - lowBound ) / stepSize ) + 0.5f ); + if ( index >= ( 1 << bits ) ) + { + index = ( 1 << bits ) - 1; + } + + if ( index < 0 ) + { + index = 0; + } + + enr = (float) index * stepSize + lowBound; /* quantized codebook gain in dB */ + *gain = (float) pow( 10.0f, enr / 20.0f ); /* quantized codebook gain */ + + return index; +} + +/*-----------------------------------------------------------------* + * gain_enc_tc() + * + * Search and quantization of gain_code for subframes (in the + * beginning of frame) without pulses in TC - 3b coding. + * In this case: + * - gain_pit = 0 + * - gain_code - scalar quantization (no prediciton history used) + *-----------------------------------------------------------------*/ + +void gain_enc_tc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t i_subfr, /* i : subframe index */ + const float xn[], /* i : target vector */ + const float y2[], /* i : zero-memory filtered algebraic codebook excitation */ + const float code[], /* i : algebraic excitation */ + const float Es_pred, /* i : predicted scaled innovation energy */ + float *gain_pit, /* o : Pitch gain / Quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : innovation gain */ + float *norm_gain_code /* o : norm. gain of the codebook excitation */ +) +{ + int16_t i, index, nBits; + float Ei, g_code, gcode0, Ecode; + + /*----------------------------------------------------------------* + * get number of bits for gain quantization + *----------------------------------------------------------------*/ + + nBits = gains_mode[i_subfr / L_SUBFR]; + + /*----------------------------------------------------------------* + * find the code pitch (for current subframe) + *----------------------------------------------------------------*/ + + *gain_code = dotp( xn, y2, L_SUBFR ) / ( dotp( y2, y2, L_SUBFR ) + 0.01f ); + + /*----------------------------------------------------------------* + * calculate the predicted gain code + * decode codebook gain + *----------------------------------------------------------------*/ + + *gain_pit = 0; + + Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + Ei = 10 * (float) log10( Ecode ); + gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); + + if ( nBits > 3 ) + { + g_code = *gain_code / gcode0; + index = gain_quant( &g_code, G_CODE_MIN, G_CODE_MAX, nBits ); + *gain_code = g_code * gcode0; + push_indice( hBstr, IND_GAIN_CODE, index, nBits ); + } + else + { + index = N_GAIN_CODE_TC - 1; + for ( i = 0; i < N_GAIN_CODE_TC - 1; i++ ) + { + if ( *gain_code < ( ( tbl_gain_code_tc[i] + ( tbl_gain_code_tc[i + 1] - tbl_gain_code_tc[i] ) / 2 ) * gcode0 ) ) + { + index = i; + break; + } + } + + /*----------------------------------------------------------------* + * 3-bit -> 2-bit encoding + *----------------------------------------------------------------*/ + + if ( nBits == 2 ) + { + index /= 2; + *gain_code = tbl_gain_code_tc[index * 2] * gcode0; + push_indice( hBstr, IND_GAIN_CODE, index, nBits ); + } + else + { + *gain_code = tbl_gain_code_tc[index] * gcode0; + push_indice( hBstr, IND_GAIN_CODE, index, nBits ); + } + } + + *norm_gain_code = *gain_code / *gain_inov; + + return; +} + +/*---------------------------------------------------------------------* + * E_corr_xy2() + * + * Find the correlations between the target xn[], the filtered adaptive + * codebook exc. y1[], and the filtered fixed codebook innovation y2[]. + * ( , -2 and 2 ) (stored in g_corr[2..4]) + *---------------------------------------------------------------------*/ + +void E_corr_xy2( + const float xn[], /* i : target vector */ + const float y1[], /* i : filtered excitation components 1 */ + const float y2[], /* i : filtered excitation components 2 */ + float g_corr[], /* o : correlations between x, y1, y2, y3, y4 */ + const int16_t L_subfr /* i : subframe size */ +) +{ + g_corr[2] = dotp( y2, y2, L_subfr ); + g_corr[3] = -2.0f * dotp( xn, y2, L_subfr ); + g_corr[4] = 2.0f * dotp( y1, y2, L_subfr ); + + return; +} + + +/*---------------------------------------------------------------------* + * gain_enc_lbr() + * + * Quantization of pitch and codebook gains without prediction (memory-less) + * in ACELP at 7.2 and 8.0 kbps + * - the gain codebooks and gain estimation constants are different in each subframe + * - the estimated gain, gcode0, is first determined based on + * classification and/or previous quantized gains (from previous subframes in the current frame) + * - a correction factor gamma = g_code / gcode0 is then vector quantized + * along with gain_pit + * - the mean-squared error criterion is used for codebook search + *---------------------------------------------------------------------*/ + +void gain_enc_lbr( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t gains_mode[], /* i : gain bits */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe index */ + const float *xn, /* i : target vector */ + const float *y1, /* i : zero-memory filtered adaptive excitation */ + const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ + const float *code, /* i : algebraic excitation */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_inov, /* o : gain of the innovation (used for normalization) */ + float *norm_gain_code, /* o : norm. gain of the codebook excitation */ + float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ + float gains_mem[], /* i/o: pitch gain and code gain from previous subframes */ + const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ + const int16_t L_subfr /* i : subframe length */ +) +{ + int16_t index = 0, i, size, nBits, n_pred, ctype; + float dist, dist_min, g_pitch, g_code, gcode0, aux[10], Ecode; + int16_t rf_flag = 0; + const float *p, *b, *cdbk = 0; + + /*-----------------------------------------------------------------* + * calculate the rest of the correlation coefficients + * c2 = , c3 = -2, c4 = 2, c5* = + * c5* - not necessary to calculate + *-----------------------------------------------------------------*/ + + E_corr_xy2( xn, y1, y2, g_corr, L_subfr ); + g_corr[2] += 0.01F; + g_corr[3] -= 0.02F; + g_corr[4] += 0.02F; + + Ecode = ( dotp( code, code, L_subfr ) + 0.01f ) / L_subfr; + *gain_inov = 1.0f / (float) sqrt( Ecode ); + + /*-----------------------------------------------------------------* + * select the codebook, size and number of bits + * set the gains searching range + *-----------------------------------------------------------------*/ + + nBits = gains_mode[i_subfr / L_subfr]; + size = 1 << nBits; + + /*-----------------------------------------------------------------* + * calculate prediction of gcode + * search for the best codeword + *-----------------------------------------------------------------*/ + + ctype = 2 * ( coder_type - 1 ); + if ( i_subfr == 0 ) + { + b = b_1sfr; + n_pred = 2; + + switch ( nBits ) + { + case 8: + { + cdbk = gp_gamma_1sfr_8b; + if ( clip_gain == 1 ) + { + size -= 60; + } + break; + } + case 7: + { + cdbk = gp_gamma_1sfr_7b; + if ( clip_gain == 1 ) + { + size -= 27; + } + break; + } + case 6: + { + cdbk = gp_gamma_1sfr_6b; + if ( clip_gain == 1 ) + { + size -= 10; + } + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) - 0.5f * (float) log10( Ecode ) ); + + /* searching of codebook */ + p = cdbk; + dist_min = 3.402823466e+38F; + index = 0; + for ( i = 0; i < size; i++ ) + { + g_pitch = *p++; + g_code = gcode0 * *p++; + dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + + gains_mem[0] = *gain_code; + gains_mem[3] = *gain_pit; + } + else if ( i_subfr == L_SUBFR || ( L_subfr == 2 * L_SUBFR ) ) + { + b = b_2sfr; + n_pred = 4; + + switch ( nBits ) + { + case 7: + { + cdbk = gp_gamma_2sfr_7b; + if ( clip_gain == 1 ) + { + size -= 30; + } + break; + } + case 6: + { + cdbk = gp_gamma_2sfr_6b; + if ( clip_gain == 1 ) + { + size -= 12; + } + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + aux[2] = (float) log10( gains_mem[0] ); + aux[3] = gains_mem[3]; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); + + /* searching of codebook */ + p = cdbk; + dist_min = 3.402823466e+38F; + index = 0; + for ( i = 0; i < size; i++ ) + { + g_pitch = *p++; + g_code = gcode0 * *p++; + dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + + gains_mem[1] = *gain_code; + gains_mem[4] = *gain_pit; + } + else if ( i_subfr == 2 * L_SUBFR ) + { + if ( rf_flag == 1 ) + { + gains_mem[1] = gains_mem[0]; + gains_mem[4] = gains_mem[3]; + } + + b = b_3sfr; + n_pred = 6; + + switch ( nBits ) + { + case 7: + { + cdbk = gp_gamma_3sfr_7b; + if ( clip_gain == 1 ) + { + size -= 28; + } + break; + } + case 6: + { + cdbk = gp_gamma_3sfr_6b; + if ( clip_gain == 1 ) + { + size -= 11; + } + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + aux[2] = (float) log10( gains_mem[0] ); + aux[3] = (float) log10( gains_mem[1] ); + aux[4] = gains_mem[3]; + aux[5] = gains_mem[4]; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); + + /* searching of codebook */ + p = cdbk; + dist_min = 3.402823466e+38F; + index = 0; + for ( i = 0; i < size; i++ ) + { + g_pitch = *p++; + g_code = gcode0 * *p++; + dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + + gains_mem[2] = *gain_code; + gains_mem[5] = *gain_pit; + } + else if ( i_subfr == 3 * L_SUBFR ) + { + b = b_4sfr; + n_pred = 8; + + switch ( nBits ) + { + case 7: + { + cdbk = gp_gamma_4sfr_7b; + if ( clip_gain == 1 ) + { + size -= 25; + } + break; + } + case 6: + { + cdbk = gp_gamma_4sfr_6b; + if ( clip_gain == 1 ) + { + size -= 11; + } + break; + } + } + + /* calculate predicted gain */ + aux[0] = 1.0f; + aux[1] = ctype; + aux[2] = (float) log10( gains_mem[0] ); + aux[3] = (float) log10( gains_mem[1] ); + aux[4] = (float) log10( gains_mem[2] ); + aux[5] = gains_mem[3]; + aux[6] = gains_mem[4]; + aux[7] = gains_mem[5]; + gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); + + /* searching of codebook */ + p = cdbk; + dist_min = 3.402823466e+38F; + index = 0; + for ( i = 0; i < size; i++ ) + { + g_pitch = *p++; + g_code = gcode0 * *p++; + dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + *gain_pit = cdbk[index * 2]; + *gain_code = cdbk[index * 2 + 1] * gcode0; + } + + *norm_gain_code = *gain_code / *gain_inov; + + push_indice( hBstr, IND_GAIN, index, nBits ); + + return; +} diff --git a/lib_enc/gaus_enc.c b/lib_enc/gaus_enc.c new file mode 100644 index 0000000000..080f12f707 --- /dev/null +++ b/lib_enc/gaus_enc.c @@ -0,0 +1,463 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define NMAX 8 /* Control of the routine's complexity */ +#define FAC_DELTA 16.0f + +/*---------------------------------------------------------------------* + * Prototypes + *---------------------------------------------------------------------*/ + +static int16_t cod_2pos( const int16_t ind1, const int16_t ind2, const float sign1, const float sign2, const int16_t n ); + +static void gauss2v( BSTR_ENC_HANDLE hBstr, const float h[], const float xn[], const float dn[], float code[], float y1[], float *gain, const int16_t lg, const int16_t nb_bits ); + +/*-------------------------------------------------------------------* + * Gaus_encode + * + * Encoder UnVoiced excitation coding using Gaussian codebooks + * - ACELP quantized Gaussian excitation + * - gain quantization + * - Total excitation for UnVoiced coders + * - Updates + *-------------------------------------------------------------------*/ + +float gaus_encode( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t i_subfr, /* i : subframe index */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + float *exc, /* o : pointer to excitation signal frame */ + float *mem_w0, /* o : weighting filter denominator memory */ + float *gp_clip_mem, /* o : memory of gain of pitch clipping algorithm */ + float *tilt_code, /* o : synthesis excitation spectrum tilt */ + float *code, /* o : algebraic excitation */ + float *gain_code, /* o : Code gain. */ + float *y2, /* o : zero-memory filtered adaptive excitation */ + float *gain_inov, /* o : innovation gain */ + float *voice_fac, /* o : voicing factor */ + float *gain_pit, /* o : adaptive excitation gain */ + float *norm_gain_code /* o : normalized innovative cb. gain */ +) +{ + int16_t i = 0, nb_bits, idx; + float dn[L_SUBFR]; /* Correlation between xn and h1 */ + BSTR_ENC_HANDLE hBstr = st->hBstr; + + /*----------------------------------------------------------------* + * Encode gaussian excitation + *----------------------------------------------------------------*/ + + corr_xh( xn, dn, h1, L_SUBFR ); /* Correlation between target xn[] and impulse response h1[] */ + + nb_bits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; + + gauss2v( hBstr, h1, xn, dn, code, y2, gain_code, L_SUBFR, nb_bits >> 1 ); + + /*----------------------------------------------------------------* + * Encode gaussian gain + *----------------------------------------------------------------*/ + + /* codeword energy computation */ + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); + + nb_bits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; + + idx = gain_enc_gaus( gain_code, nb_bits, -30.0f, 190.0f ); + push_indice( hBstr, IND_GAIN, idx, nb_bits ); + + /*-----------------------------------------------------------------* + * Total excitation for Unvoiced coders + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc[i + i_subfr] = *gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Updates: last value of new target is stored in mem_w0 + *-----------------------------------------------------------------*/ + + *mem_w0 = xn[L_SUBFR - 1] - *gain_code * y2[L_SUBFR - 1]; + + init_gp_clip( gp_clip_mem ); /* reset pitch clipping parameters */ + *gain_pit = 0.0f; + *tilt_code = 0.0f; /* purely unvoiced */ + *voice_fac = -1.0f; /* purely unvoiced */ + + *norm_gain_code = *gain_code / *gain_inov; + + return L_SUBFR; +} + +/*-------------------------------------------------------------------* + * gauss2v() + * + * encoder of Gaussian Codebook for unvoiced + * consisting of addition of 2 Gaussian vectors + * + * One Gaussian vector of 192 values vectors delayed by 2 + *-------------------------------------------------------------------*/ + +static void gauss2v( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float h[], /* i : weighted LP filter impulse response */ + const float xn[], /* i : target signal */ + const float dn[], /* i : backward filtered target */ + float code[], /* o : gaussian excitation */ + float y11[], /* o : zero-memory filtered gauss. excitation */ + float *gain, /* o : excitation gain */ + const int16_t lg, /* i : subframe size */ + const int16_t nb_bits /* i : nb ob bits per track (max 6) */ +) +{ + int16_t i, j, ind1, ind2, idx; + int16_t nvec, step; + float cor, cora, cor2, cor2w, eneri, enerw; + float *pt1, *pt2; + float max_val[NMAX + 1], *pos[NMAX + 1], sign[NMAX + 1]; + float ener[NMAX + 1], corr[NMAX + 1], ener1; + float dico2[L_SUBFR * NMAX]; + float c1, c0; + float gxx, gcc; + float gaus_dico2[190]; + float hg[190]; + float delta; + int16_t index_delta; + + /*-----------------------------------------------------------------* + * Encode the tilt of gaussian excitation + *-----------------------------------------------------------------*/ + + c0 = 0.0f; /* Compute spectral tilt of target */ + c1 = 0.0f; + for ( i = 1; i < L_SUBFR; i++ ) + { + c0 += xn[i] * xn[i]; + c1 += xn[i] * xn[i - 1]; + } + if ( c0 < FLT_MIN ) + { + gxx = 0.f; + } + else + { + gxx = c1 / c0; + } + + set_f( hg, 0, 190 ); /* Compute spectral tilt of filtered codebook */ + mvr2r( h, hg, L_SUBFR ); + conv( gaus_dico, hg, gaus_dico2, 190 ); + + c0 = 0.0f; + c1 = 0.0f; + for ( i = 1; i < 190; i++ ) + { + c0 += gaus_dico2[i] * gaus_dico2[i]; + c1 += gaus_dico2[i] * gaus_dico2[i - 1]; + } + gcc = c1 / c0; + delta = ( 1 - gcc * gxx ) / ( 2 * gcc + gxx ); /* Compute and quantize spectral tilt modification factor (3b) */ + + index_delta = (int16_t) ( FAC_DELTA * delta ); + if ( index_delta < 0 ) + { + index_delta = 0; + } + if ( index_delta > 7 ) + { + index_delta = 7; + } + + delta = STEP_DELTA * (float) index_delta; + if ( delta > 0.0f ) /* Adapt spectral tilt of initial codebook */ + { + gaus_dico2[0] = gaus_dico[0]; + for ( i = 1; i < 190; i++ ) + { + gaus_dico2[i] = ( gaus_dico[i] - delta * gaus_dico[i - 1] ) / ( 1 + delta * delta ); + } + } + else + { + for ( i = 0; i < 190; i++ ) + { + gaus_dico2[i] = gaus_dico[i]; + } + } + + /*-----------------------------------------------------------------* + * Codebook search initializations + *-----------------------------------------------------------------*/ + + ind1 = 0; + ind2 = 0; + + nvec = 1 << nb_bits; + step = 0x80 >> nb_bits; + + /*-----------------------------------------------------------------* + * dot product between dn and gaussian codevectors, + * keep NMAX best vectors + *-----------------------------------------------------------------*/ + + set_f( max_val, 0, NMAX + 1 ); + set_f( sign, 0, NMAX + 1 ); + + for ( i = 0; i < NMAX + 1; i++ ) + { + pos[i] = (float *) gaus_dico2; + } + + pt1 = (float *) gaus_dico2; + + for ( i = 0; i < nvec; i++, pt1 += step ) + { + cor = dotp( pt1, dn, lg ); + cora = (float) fabs( cor ); + j = NMAX - 1; + do + { + if ( cora >= max_val[j] ) + { + max_val[j + 1] = max_val[j]; + pos[j + 1] = pos[j]; + sign[j + 1] = sign[j]; + max_val[j] = cora; + pos[j] = pt1; + sign[j] = cor; + } + + j--; + } while ( j >= 0 ); + } + + /*-----------------------------------------------------------------* + * filter selected vectors + * put sign + * compute energy + *-----------------------------------------------------------------*/ + + pt1 = dico2; + for ( i = 0; i < NMAX; i++, pt1 += L_SUBFR ) + { + conv( pos[i], h, pt1, lg ); + + /* put sign and compute energy */ + if ( sign[i] < 0.0f ) + { + for ( j = 0; j < lg; j++ ) + { + pt1[j] = -pt1[j]; /*Store into dico2*/ + } + } + ener[i] = dotp( pt1, pt1, lg ); + corr[i] = dotp( pt1, xn, lg ); /* must be equal to sign[i] */ + } + + /*-----------------------------------------------------------------* + * try all combinations of NMAX best vectors + *-----------------------------------------------------------------*/ + + pt1 = dico2; + + /* Initial values for search algorithm */ + enerw = 1.0f; + cor2w = -1.0f; + + for ( i = 0; i < NMAX; i++, pt1 += L_SUBFR ) + { + pt2 = pt1; + for ( j = i; j < NMAX; j++, pt2 += L_SUBFR ) + { + cor = corr[i] + corr[j]; + eneri = ener[i] + ener[j] + 2.0f * dotp( pt1, pt2, lg ); + cor2 = cor * cor; + if ( cor2 * enerw > cor2w * eneri ) + { + cor2w = cor2; + enerw = eneri; + ind1 = i; + ind2 = j; + } + } + } + + /*-----------------------------------------------------------------* + * Compute zero-memory filtered gauss. excitation y + *-----------------------------------------------------------------*/ + + pt1 = dico2 + ind1 * L_SUBFR; + pt2 = dico2 + ind2 * L_SUBFR; + for ( i = 0; i < lg; i++ ) + { + y11[i] = pt1[i] + pt2[i]; + } + + /*-----------------------------------------------------------------* + * Signs of vectors + *-----------------------------------------------------------------*/ + + if ( sign[ind1] >= 0.0f ) + { + sign[ind1] = 1.0f; + } + else + { + sign[ind1] = -1.0f; + } + + if ( sign[ind2] >= 0.0f ) + { + sign[ind2] = 1.0f; + } + else + { + sign[ind2] = -1.0f; + } + + /*-----------------------------------------------------------------* + * Compute code + *-----------------------------------------------------------------*/ + + pt1 = pos[ind1]; + pt2 = pos[ind2]; + for ( i = 0; i < lg; i++ ) + { + code[i] = pt1[i] * sign[ind1] + pt2[i] * sign[ind2]; + } + cor = corr[ind1] + corr[ind2]; + + /*-----------------------------------------------------------------* + * Compute index + *-----------------------------------------------------------------*/ + + i = (int16_t) ( ( pos[ind1] - gaus_dico2 ) / step ); /* Division by step can be replaced by shift */ + j = (int16_t) ( ( pos[ind2] - gaus_dico2 ) / step ); /* Division by step can be replaced by shift */ + + idx = cod_2pos( i, j, sign[ind1], sign[ind2], nvec ); + + push_indice( hBstr, IND_GAUS_CDBK_INDEX, idx, 2 * nb_bits + 1 ); + push_indice( hBstr, IND_TILT_FACTOR, index_delta, 3 ); + + /*-----------------------------------------------------------------* + * Find quantized gain + *-----------------------------------------------------------------*/ + + *gain = cor / enerw; + ener1 = dotp( xn, xn, lg ); + ener1 = (float) sqrt( ener1 / enerw ); /* Minimize ebergy error */ + *gain = *gain * 0.6f + ener1 * 0.4f; + + return; +} + +/*---------------------------------------------------------------------* + * Put selected codevector positions and signs into quantization index + *---------------------------------------------------------------------*/ + +/*! r: codebook quantization index */ +static int16_t cod_2pos( + const int16_t ind1, /* i : index of 1st gaussian vector */ + const int16_t ind2, /* i : index of 2nd gaussian vector */ + const float sign1, /* i : sign of 1st gaussian vector */ + const float sign2, /* i : sign of 2nd gaussian vector */ + const int16_t n /* i : nb. of codebook vectors */ +) +{ + int16_t i1, i2, index, s1, s2; + + + s1 = 1; + if ( sign1 > 0.0f ) + { + s1 = 0; + } + + s2 = 1; + if ( sign2 > 0.0f ) + { + s2 = 0; + } + + if ( s1 == s2 ) + { + if ( ind1 <= ind2 ) + { + i1 = ind1; + i2 = ind2; + } + else + { + i1 = ind2; + i2 = ind1; + } + } + else + { + if ( ind1 > ind2 ) + { + i1 = ind1; + i2 = ind2; + } + else + { + i1 = ind2; + i2 = ind1; + s1 = s2; + } + } + index = i1 * n + i2; + index = ( index << 1 ) + s1; + + return index; +} diff --git a/lib_enc/gp_clip.c b/lib_enc/gp_clip.c new file mode 100644 index 0000000000..036fcd2bf7 --- /dev/null +++ b/lib_enc/gp_clip.c @@ -0,0 +1,253 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "cnst.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ +#define DIST_ISF_MAX_IO 150.0f + +#define DIST_ISF_MAX 120.0f +#define DIST_ISF_THRES 60 +#define GAIN_PIT_THRES 0.9f +#define GAIN_PIT_MIN 0.6f + +#define ALPHA1 0.98f +#define ALPHA4 0.99f +#define WINDOW_SIZE 50 +#define THRESH_TYPE 0.85f +#define THRESH_VOICING 0.86f + +/*-------------------------------------------------------------------* + * init_gp_clip + * + * Pitch Gain clipping initializations + *-------------------------------------------------------------------*/ +void init_gp_clip( + float mem[] /* o : memory of gain of pitch clipping algorithm */ +) +{ + mem[0] = DIST_ISF_MAX; + mem[1] = GAIN_PIT_MIN; + mem[2] = 0.0f; /* old energy of target (dB) */ + mem[3] = 0.0f; + mem[4] = 0.0f; + mem[5] = 0.8f; + + return; +} + +/*-------------------------------------------------------------------* + * Function gp_clip + * + * The gain needs to be limited (gain pitch < 1.0) when one of the + * following cases occurs: + * - a resonance on LPC filter (lp_disp < 60 Hz) AND a good pitch + * prediction (lp_gp > 0.9) + * - target energy drops by 6 dB AND a good pitch prediction (lp_gp>1.0) + *-------------------------------------------------------------------*/ + +int16_t gp_clip( + const int16_t element_mode, /* i : element mode */ + const int32_t core_brate, /* i : core bitrate */ + const float *voicing, /* i : normalized correlations (from OL pitch) */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t coder_type, /* i : type of coder */ + const float xn[], /* i : target vector */ + float mem[] /* i/o: memory of gain of pitch clipping algorithm */ +) +{ + int16_t clip; + int16_t i; + float wener, tmp; + + clip = 0; + + if ( ( core_brate == ACELP_6k60 ) || ( core_brate == ACELP_8k85 ) || ( element_mode > EVS_MONO ) ) + { + tmp = 0.9f + ( 0.1f * mem[0] / DIST_ISF_MAX_IO ); /* clipping is activated when filtered pitch gain > threshold (0.94 to 1) */ + if ( mem[1] > tmp ) + { + clip = 1; + } + } + else if ( ( mem[0] < DIST_ISF_THRES ) && ( mem[1] > GAIN_PIT_THRES ) ) + { + clip = 1; + } + + wener = 0.01f; + for ( i = 0; i < L_SUBFR; i++ ) + { + wener += xn[i] * xn[i]; + } + wener = 10.0f * (float) log10( wener ); + if ( ( wener < ( mem[2] - 6.0f ) ) && ( mem[1] > 1.0f ) ) + { + clip = 1; + } + + mem[2] = wener; + tmp = ALPHA1 * mem[4]; + + if ( coder_type == GENERIC || coder_type == TRANSITION || coder_type == INACTIVE ) + { + tmp += ( 1 - ALPHA1 ); + } + + mem[4] = tmp; + tmp = ALPHA4 * mem[5]; + if ( i_subfr == 0 ) + { + mem[5] = ( 1 - ALPHA4 ) * voicing[0] + tmp; + } + else if ( i_subfr == 2 * L_SUBFR ) + { + mem[5] = ( 1 - ALPHA4 ) * voicing[1] + tmp; + } + if ( mem[3] > WINDOW_SIZE ) + { + if ( ( mem[4] > THRESH_TYPE ) && ( mem[5] > THRESH_VOICING ) ) + { + clip = 1; + } + } + else + { + mem[3]++; + } + + return ( clip ); +} + +/*-------------------------------------------------------------------* + * gp_clip_test_lsf() + * + * check the minimum distance of LSFs for pitch gain clipping flag + *-------------------------------------------------------------------*/ + +void gp_clip_test_lsf( + const int16_t element_mode, /* i : element mode */ + const int32_t core_brate, /* i : core bitrate */ + const float lsf[], /* i : LSF vector */ + float mem[], /* i/o: memory of gain of pitch clipping algorithm */ + const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +) +{ + int16_t i; + int16_t m; + float dist, dist_min; + + dist_min = lsf[1] - lsf[0]; + + if ( Opt_AMR_WB ) + { + m = M - 1; + } + else + { + m = M; + } + + for ( i = 2; i < m; i++ ) + { + dist = lsf[i] - lsf[i - 1]; + if ( dist < dist_min ) + { + dist_min = dist; + } + } + + dist = 0.8f * mem[0] + 0.2f * dist_min; + + if ( ( core_brate == ACELP_6k60 ) || ( core_brate == ACELP_8k85 ) || ( element_mode > EVS_MONO ) ) + { + if ( dist > DIST_ISF_MAX_IO ) + { + dist = DIST_ISF_MAX_IO; + } + } + else if ( dist > DIST_ISF_MAX ) + { + dist = DIST_ISF_MAX; + } + + mem[0] = dist; + + return; +} + +/*-------------------------------------------------------------------* + * gp_clip_test_gain_pit() + * + * low-pass filtering of the pitch gain for pitch gain clipping flag + *-------------------------------------------------------------------*/ + +void gp_clip_test_gain_pit( + const int16_t element_mode, /* i : element mode */ + const int32_t core_brate, /* i : core bitrate */ + const float gain_pit, /* i : gain of quantized pitch */ + float mem[] /* i/o: memory of gain of pitch clipping algorithm */ +) +{ + float gain; + + if ( ( core_brate == ACELP_6k60 ) || ( core_brate == ACELP_8k85 ) || ( element_mode > EVS_MONO ) ) + { + gain = 0.98f * mem[1] + 0.02f * gain_pit; /* long term LTP gain average (>250ms) */ + } + else + { + gain = 0.9f * mem[1] + 0.1f * gain_pit; + } + + if ( gain < GAIN_PIT_MIN ) + { + gain = GAIN_PIT_MIN; + } + mem[1] = gain; + + return; +} diff --git a/lib_enc/gs_enc.c b/lib_enc/gs_enc.c new file mode 100644 index 0000000000..cfee14b2ca --- /dev/null +++ b/lib_enc/gs_enc.c @@ -0,0 +1,675 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static float edyn( const float *vec, const int16_t lvec ); + + +/*-------------------------------------------------------------------* + * encod_audio() + * + * Encode audio (AC) frames + *-------------------------------------------------------------------*/ + +void encod_audio( + Encoder_State *st, /* i/o: State structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : 12k8 Lp coefficient */ + const float *res, /* i : residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t attack_flag, /* i : attack flag (GSC or TC) */ + float *lsf_new, /* i : current frame ISF vector */ + float *tmp_noise, /* o : long-term noise energy */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + const float *p_Aq; + int16_t i, i_subfr, nb_subfr, last_pit_bin; + int16_t T0_tmp, T0_frac_tmp, nb_subfr_flag; + int16_t tmp_nb_bits_tot; + GSC_ENC_HANDLE hGSCEnc; + float Es_pred; + float dct_res[L_FRAME16k], dct_epit[L_FRAME16k]; + float m_mean; + float exc_wo_nf[L_FRAME16k]; + int16_t nb_bits; /*number of bits*/ + BSTR_ENC_HANDLE hBstr = st->hBstr; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*---------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------*/ + + hGSCEnc = st->hGSCEnc; + + m_mean = 0.0f; + tmp_nb_bits_tot = 0; + + T0_tmp = 64; + T0_frac_tmp = 0; + mvr2r( hLPDmem->mem_syn, hGSCEnc->mem_syn_tmp, M ); + hGSCEnc->mem_w0_tmp = hLPDmem->mem_w0; + Es_pred = 0; + + /*---------------------------------------------------------------* + * Encode GSC IVAS mode + * Encode GSC attack flag (used to reduce possible pre-echo) + * Encode GSC SWB speech flag + *---------------------------------------------------------------*/ + + if ( st->element_mode > EVS_MONO && st->idchan == 0 ) + { + push_indice( hBstr, IND_GSC_IVAS_SP, st->GSC_IVAS_mode, 2 ); + } + + if ( attack_flag > 0 ) + { + push_indice( hBstr, IND_GSC_ATTACK, 1, 1 ); + } + else + { + push_indice( hBstr, IND_GSC_ATTACK, 0, 1 ); + } + + if ( st->GSC_IVAS_mode >= 1 || ( st->coder_type != INACTIVE && ( ( st->element_mode == EVS_MONO && st->total_brate >= ACELP_13k20 ) || + ( st->element_mode > EVS_MONO && st->total_brate > MIN_BRATE_GSC_NOISY_FLAG && st->bwidth >= SWB && !st->flag_ACELP16k ) ) ) ) + { + push_indice( hBstr, IND_GSC_SWB_SPEECH, st->GSC_noisy_speech, 1 ); + } + + /*---------------------------------------------------------------*+ + * Find and encode the number of subframes + *---------------------------------------------------------------*/ + + if ( st->core_brate >= ACELP_9k60 && st->core_brate <= ACELP_13k20 ) + { + for ( i = 0; i < 5; i++ ) + { + if ( fabs( st->hSpMusClas->gsc_lt_diff_etot[MAX_LT - i - 1] ) > 6.0f && hGSCEnc->cor_strong_limit == 1 ) + { + hGSCEnc->cor_strong_limit = 0; + } + } + } + + if ( st->GSC_IVAS_mode >= 1 || ( st->GSC_noisy_speech == 1 && st->GSC_IVAS_mode == 0 ) ) + { + nb_subfr = NB_SUBFR; + if ( st->GSC_IVAS_mode > 0 && st->GSC_IVAS_mode < 3 && st->core_brate < GSC_L_RATE_STG ) + { + nb_subfr = 2; + } + + hGSCEnc->cor_strong_limit = 0; + nb_subfr_flag = 1; + } + else if ( st->L_frame == L_FRAME16k && ( st->core_brate <= ACELP_13k20 || st->coder_type == INACTIVE ) ) + { + hGSCEnc->cor_strong_limit = 0; + nb_subfr = SWNB_SUBFR; + nb_subfr_flag = 1; + } + else + { + if ( ( hGSCEnc->cor_strong_limit == 0 || st->coder_type == INACTIVE ) && st->core_brate >= ACELP_9k60 ) + { + nb_subfr = 2; + nb_subfr_flag = 0; + hGSCEnc->cor_strong_limit = 0; + } + else + { + nb_subfr = SWNB_SUBFR; + nb_subfr_flag = 1; + } + + if ( st->L_frame == L_FRAME16k && ( st->hSpMusClas->mold_corr > .8f && st->core_brate >= MIN_RATE_4SBFR && st->coder_type != INACTIVE ) ) + { + nb_subfr *= 2; + nb_subfr_flag |= 0x2; + } + + if ( st->L_frame == L_FRAME16k && st->core_brate >= MIN_RATE_4SBFR ) + { + push_indice( hBstr, IND_HF_NOISE, nb_subfr_flag, 2 ); + } + else if ( st->core_brate >= ACELP_9k60 ) + { + /* nb_subfr_flag can only have the value 0 or 1 */ + push_indice( hBstr, IND_HF_NOISE, nb_subfr_flag, 1 ); + } + } + + if ( st->L_frame == L_FRAME16k && nb_subfr == NB_SUBFR ) + { + nb_subfr = NB_SUBFR16k; + } + + /*---------------------------------------------------------------* + * Compute adaptive (pitch) excitation contribution + *---------------------------------------------------------------*/ + + if ( !( st->GSC_IVAS_mode > 0 && st->L_frame / nb_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) && + ( ( st->core_brate >= MIN_RATE_FCB || st->GSC_noisy_speech ) && + ( ( nb_subfr == NB_SUBFR && st->L_frame == L_FRAME ) || ( nb_subfr == NB_SUBFR16k && st->L_frame == L_FRAME16k ) ) ) ) + { + if ( st->element_mode > EVS_MONO ) + { + nb_bits = 5; + } + else + { + nb_bits = Es_pred_bits_tbl[BIT_ALLOC_IDX( st->core_brate, GENERIC, -1, -1 )]; + } + Es_pred_enc( &Es_pred, &i, st->L_frame, L_SUBFR, res, st->voicing, nb_bits, 0 ); + push_indice( hBstr, IND_ES_PRED, i, nb_bits ); + } + + enc_pit_exc( st, speech, Aw, Aq, Es_pred, res, synth, exc, &T0_tmp, &T0_frac_tmp, pitch_buf, nb_subfr, &hGSCEnc->lt_gpitch, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + /*---------------------------------------------------------------* + * DCT transform + *---------------------------------------------------------------*/ + + edct( exc, dct_epit, st->L_frame, st->element_mode ); + + edct( res, dct_res, st->L_frame, st->element_mode ); + + /*---------------------------------------------------------------* + * Calculate energy dynamics + *---------------------------------------------------------------*/ + + for ( i = 7; i < 15; i++ ) + { + m_mean += edyn( dct_res + i * 16, 16 ); + } + m_mean *= 0.125f; + + if ( m_mean > hGSCEnc->mid_dyn ) + { + hGSCEnc->mid_dyn = 0.2f * hGSCEnc->mid_dyn + 0.8f * m_mean; + } + else + { + hGSCEnc->mid_dyn = 0.6f * hGSCEnc->mid_dyn + 0.4f * m_mean; + } + + if ( st->coder_type != INACTIVE ) + { + hGSCEnc->noise_lev = ( NOISE_LEVEL_SP3 + 1 ) - usquant( hGSCEnc->mid_dyn, &m_mean, MIN_DYNAMIC, DYNAMIC_RANGE / GSC_NF_STEPS, GSC_NF_STEPS ); + if ( hGSCEnc->noise_lev > NOISE_LEVEL_SP3 ) + { + hGSCEnc->noise_lev = NOISE_LEVEL_SP3; + } + } + + hGSCEnc->past_dyn_dec = hGSCEnc->noise_lev; + + if ( st->GSC_IVAS_mode >= 1 ) + { + hGSCEnc->noise_lev = NOISE_LEVEL_SP2; + if ( st->GSC_IVAS_mode == 3 ) /* Music like */ + { + hGSCEnc->noise_lev = NOISE_LEVEL_SP0; + } + else if ( st->GSC_noisy_speech == 0 ) + { + hGSCEnc->noise_lev = NOISE_LEVEL_SP3; + } + } + else if ( st->core_brate <= ACELP_8k00 ) + { + if ( hGSCEnc->noise_lev <= NOISE_LEVEL_SP2 ) + { + hGSCEnc->noise_lev = NOISE_LEVEL_SP2; + } + + push_indice( hBstr, IND_NOISE_LEVEL, hGSCEnc->noise_lev - NOISE_LEVEL_SP2, 2 ); + } + else if ( st->GSC_noisy_speech ) + { + hGSCEnc->noise_lev = NOISE_LEVEL_SP3; + } + else + { + push_indice( hBstr, IND_NOISE_LEVEL, hGSCEnc->noise_lev - NOISE_LEVEL_SP0, 3 ); + } + + /*---------------------------------------------------------------* + * Find and encode the last band where the adaptive (pitch) contribution is significant + *---------------------------------------------------------------*/ + + last_pit_bin = Pit_exc_contribution_len( st, dct_res, dct_epit, pitch_buf, &hGSCEnc->pit_exc_hangover ); + + if ( last_pit_bin == 0 ) + { + hLPDmem->tilt_code = 0.0f; + } + else + { + last_pit_bin++; + } + + /*--------------------------------------------------------------------------------------* + * GSC encoder + *--------------------------------------------------------------------------------------*/ + + /* Find the current total number of bits used */ + tmp_nb_bits_tot = hBstr->nb_bits_tot; + + if ( st->extl_brate > 0 ) + { + /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ + tmp_nb_bits_tot--; + } + + if ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 && st->idchan == 0 ) + { + /* add 5 bits for noisiness */ + tmp_nb_bits_tot += 5; + } + + gsc_enc( st, dct_res, dct_epit, last_pit_bin, tmp_nb_bits_tot, nb_subfr, lsf_new, exc_wo_nf, tmp_noise ); + + /*--------------------------------------------------------------------------------------* + * iDCT transform + *--------------------------------------------------------------------------------------*/ + + edct( dct_epit, exc, st->L_frame, st->element_mode ); + + edct( exc_wo_nf, exc_wo_nf, st->L_frame, st->element_mode ); + + /*--------------------------------------------------------------------------------------* + * Remove potential pre-echo in case an onset has been detected + *--------------------------------------------------------------------------------------*/ + + pre_echo_att( &hGSCEnc->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); + + /*--------------------------------------------------------------------------------------* + * Update BWE excitation + *--------------------------------------------------------------------------------------*/ + + if ( st->hBWE_TD != NULL ) + { + if ( st->L_frame == L_FRAME16k ) + { + set_f( voice_factors, 0.0f, NB_SUBFR16k ); + interp_code_4over2( exc, bwe_exc, L_FRAME16k ); + } + else + { + set_f( voice_factors, 0.0f, NB_SUBFR ); + interp_code_5over2( exc, bwe_exc, L_FRAME ); + } + } + + /*--------------------------------------------------------------------------------------* + * Synthesis + *--------------------------------------------------------------------------------------*/ + + p_Aq = Aq; + for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_SUBFR ) + { + syn_filt( p_Aq, M, &exc_wo_nf[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + p_Aq += ( M + 1 ); + } + + /*--------------------------------------------------------------------------------------* + * Updates + *--------------------------------------------------------------------------------------*/ + + hLPDmem->mem_w0 = hGSCEnc->mem_w0_tmp; + mvr2r( exc_wo_nf, exc, st->L_frame ); + + return; +} + +/*-------------------------------------------------------------------* + * gsc_enc() + * + * Generic audio signal encoder + *-------------------------------------------------------------------*/ + +void gsc_enc( + Encoder_State *st, /* i/o: State structure */ + float res_dct_in[], /* i : dct of residual signal */ + float exc_dct_in[], /* i/o: dct of pitch-only excitation / total excitation */ + const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ + const int16_t bits_used, /* i : Number of bit used before frequency Q */ + const int16_t nb_subfr, /* i : Number of subframe considered */ + const float *lsf_new, /* i : ISFs at the end of the frame */ + float *exc_wo_nf, /* o : excitation (in f domain) without noisefill */ + float *tmp_noise /* o : long-term noise energy */ +) +{ + int16_t i; + GSC_ENC_HANDLE hGSCEnc; + BSTR_ENC_HANDLE hBstr; + float exc_diffQ[L_FRAME16k]; + float exc_diff[L_FRAME16k]; + int16_t bit; + int16_t nb_subbands; + int16_t pvq_len; + int16_t bits_per_bands[MBANDS_GN_BITALLOC16k]; /*Q3*/ + int16_t tmp_band; + float concat_in[L_FRAME16k]; + float concat_out[L_FRAME16k]; + int16_t max_ener_band[MBANDS_GN_BITALLOC16k], j; + float Ener_per_bd_iQ[MBANDS_GN16k]; + int16_t last_bin; + int16_t bitallocation_band[MBANDS_GN_BITALLOC16k]; + int16_t bitallocation_exc[2]; + int16_t npulses[NB_SFM]; + int16_t maxpulse[NB_SFM]; + float mean_gain; + int16_t seed_init; + float max_eq, max_eq_val; + + /*--------------------------------------------------------------------------------------* + * Initialization + *--------------------------------------------------------------------------------------*/ + + hGSCEnc = st->hGSCEnc; + hBstr = st->hBstr; + + bit = bits_used; + if ( st->coder_type == INACTIVE && ( st->tdm_LRTD_flag == 1 || st->element_mode == IVAS_SCE ) && st->core_brate <= GSC_LRES_GAINQ_LIMIT ) + { + bit += GSC_LRES_NB_NITS; + } + + set_f( exc_diffQ, 0.0f, st->L_frame ); + set_f( Ener_per_bd_iQ, 0.0f, MBANDS_GN16k ); + + /*--------------------------------------------------------------------------------------* + * Calculate the difference between the residual spectrum and the spectrum of adaptive excitation + * (non valuable temporal content present in exc_dct_in is already zeroed) + *--------------------------------------------------------------------------------------*/ + + v_sub( res_dct_in, exc_dct_in, exc_diff, st->L_frame ); + exc_diff[0] = 0; + + /*--------------------------------------------------------------------------------------* + * Multiply the difference spectrum with the normalized spectral shape of the residual signal + * This improves the stability of the differnece spectrum since the spectral shape of the + * residual signal is less suseptible to rapid changes than the difference spectrum + *--------------------------------------------------------------------------------------*/ + + if ( Diff_len == 0 ) + { + tmp_band = 0; + } + else + { + tmp_band = hGSCEnc->mem_last_pit_band; + } + + Ener_per_band_comp( exc_diff, Ener_per_bd_iQ, MBANDS_GN, 1, st->L_frame ); + + /*--------------------------------------------------------------------------------------* + * Gain quantizaion + *--------------------------------------------------------------------------------------*/ + + i = 0; + while ( i < SIZE_BRATE_INTERMED_TBL ) + { + if ( st->core_brate <= brate_intermed_tbl[i] ) + { + break; + } + i++; + } + if ( st->element_mode > EVS_MONO && st->coder_type == AUDIO && + st->core_brate <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ + { + i--; + } + + mean_gain = gsc_gainQ( hBstr, st->element_mode, st->idchan, Ener_per_bd_iQ, Ener_per_bd_iQ, brate_intermed_tbl[i], st->coder_type, st->bwidth, st->L_frame, st->tdm_LRTD_flag, st->core_brate ); + + *tmp_noise = 10.0f * mean_gain; + + /*--------------------------------------------------------------------------------------* + * PVQ encoder + *--------------------------------------------------------------------------------------*/ + + bands_and_bit_alloc( hGSCEnc->cor_strong_limit, hGSCEnc->noise_lev, st->core_brate, Diff_len, bit, &bit, Ener_per_bd_iQ, max_ener_band, bits_per_bands, &nb_subbands, exc_diff, concat_in, &pvq_len, st->coder_type, st->bwidth, st->GSC_noisy_speech, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); + + set_s( npulses, 0, NB_SFM ); + + if ( bit == 0 ) + { + set_zero( concat_out, L_FRAME16k ); + } + else + { + bit -= pvq_core_enc( hBstr, concat_in, concat_out, bit, nb_subbands, gsc_sfm_start, gsc_sfm_end, gsc_sfm_size, bits_per_bands, NULL, npulses, maxpulse, ACELP_CORE ); + } + + /* write unused bits */ + while ( bit > 0 ) + { + i = min( bit, 16 ); + push_indice( hBstr, IND_UNUSED, 0, i ); + bit -= i; + } + + /* Reorder Q bands */ + last_bin = 0; + set_s( bitallocation_band, 0, MBANDS_GN_BITALLOC16k ); + seed_init = 0; + max_eq = 0; + max_eq_val = 1.0f; + + if ( ( ( ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 ) || st->core_brate < 6000 ) && st->coder_type <= UNVOICED ) || st->GSC_IVAS_mode >= 1 ) + { + j = emaximum( concat_out, nb_subbands * 16, &max_eq ); + max_eq = max_eq_val / ( fabsf( concat_out[j] ) + 0.01f ); + max_eq = min( max_eq_val, max_eq ); + } + + for ( j = 0; j < nb_subbands; j++ ) + { + mvr2r( concat_out + j * 16, exc_diffQ + max_ener_band[j] * 16, 16 ); + + if ( max_ener_band[j] > last_bin ) + { + last_bin = max_ener_band[j]; + } + + bitallocation_band[max_ener_band[j]] = 1; + + seed_init += npulses[j]; + } + if ( st->last_coder_type != AUDIO /* First audio frame */ + && st->last_coder_type != UNVOICED ) /* last_coder_type == INACTIVE is overwritten in update_enc to UNVOICED */ + { + for ( j = 0; j < nb_subbands * 16; j++ ) + { + if ( concat_out[j] > 0 ) + { + seed_init = (int16_t) ( (int32_t) seed_init * 8 ); + } + if ( concat_out[j] < 0 ) + { + seed_init += 3; + } + } + + hGSCEnc->seed_tcx = seed_init; + } + + if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) + { + bitallocation_exc[0] = 0; + bitallocation_exc[1] = 0; + + if ( exc_diffQ[L_FRAME8k - 2] != 0 ) + { + bitallocation_exc[0] = 1; + } + + if ( exc_diffQ[L_FRAME8k - 1] != 0 ) + { + bitallocation_exc[1] = 1; + } + } + + /*--------------------------------------------------------------------------------------* + * Skip adaptive (pitch) contribution frequency band (no noise added over the adaptive (pitch) contribution) + * Find x pulses between 1.6-3.2kHz to code in the spectrum of the residual signal + * Gain is based on the inter-correlation gain between the pulses found and residual signal + *--------------------------------------------------------------------------------------*/ + + if ( st->GSC_IVAS_mode >= 1 && st->GSC_noisy_speech == 1 ) + { + for ( i = 64; i < st->L_frame; i++ ) + { + exc_diffQ[i] *= max_eq; + } + } + else if ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 && st->coder_type <= UNVOICED ) + { + for ( i = 0; i < L_FRAME; i++ ) + { + exc_diffQ[i] *= max_eq; + } + } + else + { + freq_dnw_scaling( hGSCEnc->cor_strong_limit, st->coder_type, hGSCEnc->noise_lev, st->core_brate, exc_diffQ, st->L_frame ); + } + + /*--------------------------------------------------------------------------------------* + * Estimate noise level + *--------------------------------------------------------------------------------------*/ + + highband_exc_dct_in( st->core_brate, mfreq_bindiv_loc, last_bin, Diff_len, hGSCEnc->noise_lev, tmp_band, exc_diffQ, &hGSCEnc->seed_tcx, Ener_per_bd_iQ, nb_subfr, exc_dct_in, st->last_coder_type, bitallocation_band, lsf_new, hGSCEnc->last_exc_dct_in, &hGSCEnc->last_ener, hGSCEnc->last_bitallocation_band, bitallocation_exc, 0, st->coder_type, st->bwidth, exc_wo_nf, st->GSC_noisy_speech, NULL, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); + + exc_dct_in[0] = 0; + + return; +} + + +/*---------------------------------------------------------------------* + * edyn() + * + * Calculate energy dynamics in a vector (ratio of energy maximum to energy mean) + *---------------------------------------------------------------------*/ + +/*! r: ratio of max to mean */ +static float edyn( + const float *vec, /* i : input vector */ + const int16_t lvec /* i : length of input vector */ +) +{ + int16_t j; + float temp, ener_max, ener_mean, dyn; + + ener_mean = 1.0f; + ener_max = 1.0f; + + for ( j = 0; j < lvec; j++ ) + { + temp = vec[j] * vec[j]; + + if ( temp > ener_max ) + { + ener_max = temp; + } + ener_mean += temp; + } + ener_mean /= lvec; + dyn = 10.0f * ( ener_max / ener_mean ); + + return dyn; +} + + +/*-------------------------------------------------------------------* + * GSC_enc_init() + * + * Initialize GSC encoder state structure + *-------------------------------------------------------------------*/ + +void GSC_enc_init( + GSC_ENC_HANDLE hGSCEnc /* i/o: GSC data handle */ +) +{ + /* AC mode */ + hGSCEnc->seed_tcx = 15687; + hGSCEnc->cor_strong_limit = 1; + set_f( hGSCEnc->last_exc_dct_in, 0, L_FRAME16k ); + hGSCEnc->last_ener = 0.0f; + set_s( hGSCEnc->last_bitallocation_band, 0, 6 ); + hGSCEnc->mem_last_pit_band = BAND1k2 + 1; + + hGSCEnc->lt_gpitch = 0.0f; + hGSCEnc->pit_exc_hangover = 0; + + /* GSC - pitch excitation parameters */ + hGSCEnc->mem_w0_tmp = 0.0f; + set_f( hGSCEnc->mem_syn_tmp, 0.0f, M ); + + hGSCEnc->Last_frame_ener = (float) MAX_32; + hGSCEnc->mid_dyn = 40.0f; + hGSCEnc->noise_lev = NOISE_LEVEL_SP0; + hGSCEnc->past_dyn_dec = 0; + + return; +} diff --git a/lib_enc/guided_plc_enc.c b/lib_enc/guided_plc_enc.c new file mode 100644 index 0000000000..28dd46c544 --- /dev/null +++ b/lib_enc/guided_plc_enc.c @@ -0,0 +1,386 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "stat_enc.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * coderLookAheadInnovation() + * + * + *-------------------------------------------------------------------*/ + +static void coderLookAheadInnovation( + const float A[], /* i : coefficients NxAz[M+1] */ + int16_t *pT, /* o : pitch */ + PLC_ENC_EVS_HANDLE st, /* i/o: coder memory state */ + float *speechLookAhead, + float *old_exc, + const int16_t L_subfr, + const int16_t L_frame ) +{ + int16_t i; + float *exc, exc_buf[L_EXC_MEM + 2 * L_SUBFR + 8]; + int16_t T0 = 0; + int16_t prev_pitch; + float ps, alp, max_ps; + int16_t subfr_len; + int16_t search_range; + + search_range = 9; + + set_f( exc_buf, 0.0f, L_EXC_MEM + 2 * L_SUBFR + 8 ); + + /* Framing parameters */ + if ( L_frame < L_FRAME16k ) + { + subfr_len = (int16_t) ( 1.75 * L_subfr ); + } + else + { + subfr_len = (int16_t) ( 2 * L_subfr ); + } + + /*------------------------------------------------------------------------* + * Initialize buffers * + *------------------------------------------------------------------------*/ + + /* set excitation memory */ + exc = exc_buf + L_EXC_MEM + 8; + mvr2r( old_exc, exc_buf, L_EXC_MEM + 8 ); + + /*------------------------------------------------------------------------* + * - Get residual signal and target at lookahead part. * + *------------------------------------------------------------------------*/ + + /* find LP residual signal for look-ahead part */ + getLookAheadResSig( speechLookAhead, A, exc, L_frame, L_subfr, M, 2 ); + + /* Initialize excitation buffer */ + prev_pitch = st->T0_4th; + /* find target signals */ + /* find best candidate of pitch lag */ + { + max_ps = -1.0e10; + T0 = st->T0_4th; + for ( i = -search_range; i < search_range; i++ ) + { + if ( prev_pitch + i > st->pit_max || prev_pitch + i < st->pit_min ) + { + continue; + } + ps = dotp( exc, &exc[-( prev_pitch + i )], subfr_len ); + alp = dotp( &exc[-( prev_pitch + i )], &exc[-( prev_pitch + i )], subfr_len ); + ps /= (float) sqrt( alp + 1.0e-10 ); + if ( max_ps < ps ) + { + max_ps = ps; + T0 = prev_pitch + i; + } + } + if ( max_ps < 0.0 ) + { + T0 = st->T0_4th; + } + } + + pT[0] = T0; + + return; +} + + +/*-------------------------------------------------------------------* + * getConcealedlsf() + * + * + *-------------------------------------------------------------------*/ + +static void getConcealedlsf( + PLC_ENC_EVS_HANDLE memDecState, + const float lsfBase[], + const int16_t L_frame, + const int16_t last_good ) +{ + float *lsf = memDecState->lsf_con; + + dlpc_bfi( L_frame, &lsf[0], memDecState->lsfold, last_good, 1 /*assumes packet loss */, memDecState->mem_MA, memDecState->mem_AR, &( memDecState->stab_fac ), memDecState->lsf_adaptive_mean, 1, NULL, 0, NULL, NULL, lsfBase ); + + return; +} + + +/*-------------------------------------------------------------------* + * enc_prm_side_Info() + * + * + *-------------------------------------------------------------------*/ + +void enc_prm_side_Info( + PLC_ENC_EVS_HANDLE hPlc_Ext, + Encoder_State *st ) +{ + int16_t diff_pitch; + int16_t bits_per_subfr, search_range; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + bits_per_subfr = 4; + search_range = 8; + + if ( hPlc_Ext->nBits > 1 ) + { + push_next_indice( hBstr, 1, 1 ); + + diff_pitch = hPlc_Ext->T0 - hPlc_Ext->T0_4th; + + if ( ( diff_pitch > search_range - 1 ) || ( diff_pitch < -search_range + 1 ) ) + { + diff_pitch = -8; + } + + push_next_indice( hBstr, ( diff_pitch + search_range ), bits_per_subfr ); + } + else + { + push_next_indice( hBstr, 0, 1 ); + } + + return; +} + +/*-------------------------------------------------------------------* + * encoderSideLossSimulation() + * + * Encoder side loss simulation + *-------------------------------------------------------------------*/ + +void encoderSideLossSimulation( + Encoder_State *st, + PLC_ENC_EVS_HANDLE hPlc_Ext, + float *lsf_q, + const float stab_fac, + const int16_t calcOnlylsf, + const int16_t L_frame ) +{ + float lspLocal[M]; + const float *lsfBase; /* base for differential lsf coding */ + + /* Decoder State Update */ + lsf2lsp( lsf_q, lspLocal, M, st->sr_core ); + + lsfBase = PlcGetlsfBase( st->lpcQuantization, st->narrowBand, st->sr_core ); + + mvr2r( st->mem_MA, hPlc_Ext->mem_MA, M ); + + /* lsf parameter processing for concealment */ + updatelsfForConcealment( hPlc_Ext, lsf_q ); + hPlc_Ext->stab_fac = stab_fac; + + /* Update Decoder State for the loss simulation at the next frame */ + mvr2r( lsf_q, hPlc_Ext->lsfold, M ); + mvr2r( lspLocal, hPlc_Ext->lspold, M ); + + if ( calcOnlylsf ) + { + /* lsf concealment simulation */ + getConcealedlsf( hPlc_Ext, lsfBase, L_frame, st->clas ); + hPlc_Ext->T0 = hPlc_Ext->T0_4th; + } + else + { + float AqCon[( NB_SUBFR16k + 1 ) * ( M + 1 )]; + float *speechLookAhead; + float old_exc[L_EXC_MEM + 8]; + + /* Initialize pointers here */ + mvr2r( hPlc_Ext->old_exc, old_exc, 8 ); + mvr2r( hPlc_Ext->LPDmem->old_exc, &old_exc[8], L_EXC_MEM ); + speechLookAhead = &( st->speech_enc_pe[L_frame] ); + + /* lsf concealment simulation */ + getConcealedLP( hPlc_Ext, AqCon, lsfBase, st->sr_core, st->clas, L_frame ); + + /* apply encoder side PLC simulation */ + hPlc_Ext->pit_min = st->pit_min; + hPlc_Ext->pit_max = st->pit_max; + coderLookAheadInnovation( AqCon, &( hPlc_Ext->T0 ), hPlc_Ext, speechLookAhead, old_exc, L_SUBFR, st->L_frame ); + } + + return; +} + +/*-------------------------------------------------------------------* + * GplcTcxEncSetup() + * + * + *-------------------------------------------------------------------*/ + +void GplcTcxEncSetup( + const int16_t tcxltp_pitch_int, + PLC_ENC_EVS_HANDLE hPlc_Ext ) +{ + hPlc_Ext->T0_4th = tcxltp_pitch_int; + + return; +} + +/*-------------------------------------------------------------------* + * encSideSpecPowDiffuseDetector() + * + * + *-------------------------------------------------------------------*/ + +int16_t encSideSpecPowDiffuseDetector( + float *lsf_ref, + float *lsf_con, + const int32_t sr_core, + float *prev_lsf4_mean, + const int16_t sw, + const int16_t coder_type ) +{ + float lsf_mod[M]; + float dist1, dist2, cum_dist1, cum_dist2; + float lsf4_mean; + float th; + float th_dif_lsf4_mean; + int16_t idx; + int16_t cnt_imprv, i; + + /* calculate the mean of the lowest 4 lsfs */ + lsf4_mean = 0; + + for ( i = 0; i < 4; i++ ) + { + lsf4_mean += lsf_ref[i]; + } + lsf4_mean /= 4.0f; + + if ( sw ) + { + mvr2r( lsf_con, lsf_mod, M ); + + modify_lsf( lsf_mod, M, sr_core, 1 ); + + cum_dist1 = 0; + cum_dist2 = 0; + + cnt_imprv = 0; + + + for ( i = 0; i < M; i++ ) + { + dist1 = ( lsf_con[i] - lsf_ref[i] ) * ( lsf_con[i] - lsf_ref[i] ); + dist2 = ( lsf_mod[i] - lsf_ref[i] ) * ( lsf_mod[i] - lsf_ref[i] ); + cum_dist1 += dist1; + cum_dist2 += dist2; + + if ( dist1 > dist2 ) + { + cnt_imprv++; + } + } + + th = 800; + th_dif_lsf4_mean = 90; + + if ( sr_core == INT_FS_16k ) + { + th *= 1.25; + th_dif_lsf4_mean *= 1.25; + } + + + if ( cum_dist1 > cum_dist2 * 1.15 && lsf4_mean - *prev_lsf4_mean > th_dif_lsf4_mean && *prev_lsf4_mean < th && cnt_imprv > 2 && coder_type == GENERIC ) + { + idx = 1; + } + else + { + idx = 0; + } + } + else + { + idx = 0; + } + + /* update parameters */ + *prev_lsf4_mean = lsf4_mean; + + return idx; +} + +/*-------------------------------------------------------------------* + * updateSpecPowDiffuseIdx() + * + * + *-------------------------------------------------------------------*/ + +void updateSpecPowDiffuseIdx( + const float gain_pitch_buf[], /* i : gain pitch values */ + const float gain_code_buf[], /* i : gain pitch values */ + int16_t glr_idx[2], /* o : */ + float mean_gc[2] /* o : */ +) +{ + float min_gp; + int16_t k; + + mean_gc[1] = gain_code_buf[0]; + min_gp = gain_pitch_buf[0]; + + for ( k = 1; k < 4; k++ ) + { + mean_gc[1] += gain_code_buf[k]; + + if ( gain_pitch_buf[k] < min_gp ) + { + min_gp = gain_pitch_buf[k]; + } + } + + if ( mean_gc[1] / ( mean_gc[0] + 1e-6 ) < 1.098 || min_gp > 0.82 ) + { + glr_idx[0] = 0; + } + mean_gc[0] = mean_gc[1]; + + return; +} diff --git a/lib_enc/hf_cod_amrwb.c b/lib_enc/hf_cod_amrwb.c new file mode 100644 index 0000000000..e731e13da9 --- /dev/null +++ b/lib_enc/hf_cod_amrwb.c @@ -0,0 +1,343 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void hp400_12k8( float signal[], const int16_t lg, float mem[] ); +static void filt_6k_8k( float signal[], const int16_t lg, float mem[] ); + + +/*---------------------------------------------------------------------* + * hf_cod_init() + * + * + *---------------------------------------------------------------------*/ + +void hf_cod_init( + float *mem_hp400_enc, /* o : memory of hp 400 Hz filter */ + float *mem_hf1_enc, /* o : HF band-pass filter memory */ + float *mem_syn_hf_enc, /* o : HF synthesis memory */ + float *mem_hf2_enc, /* o : HF band-pass filter memory */ + float *gain_alpha /* o : smoothing gain for transitions between active and inactive frames */ +) +{ + set_f( mem_hp400_enc, 0, 4 ); + set_f( mem_hf1_enc, 0, L_FIR - 1 ); + set_f( mem_syn_hf_enc, 0, M ); + set_f( mem_hf2_enc, 0, L_FIR - 1 ); + *gain_alpha = 1.0; + + return; +} + + +/*---------------------------------------------------------------------* + * hf_cod() + * + * + *---------------------------------------------------------------------*/ + +void hf_cod( + const int32_t core_brate, /* i : core bitrate */ + const float *speech16k, /* i : original speech at 16 kHz */ + const float Aq[], /* i : quantized Aq */ + const float exc[], /* i : excitation at 12.8 kHz */ + float synth[], /* i : 12.8kHz synthesis signal */ + int16_t *seed2_enc, /* i/o: random seed for HF noise gen */ + float *mem_hp400_enc, /* i/o: memory of hp 400 Hz filter */ + float *mem_syn_hf_enc, /* i/o: HF synthesis memory */ + float *mem_hf1_enc, /* i/o: HF band-pass filter memory */ + float *mem_hf2_enc, /* i/o: HF band-pass filter memory */ + const int16_t *dtxHangoverCount, + float *gain_alpha, /* i/o: smoothing gain for transitions between active and inactive frames */ + int16_t *hf_gain /* o : HF gain to be transmitted to decoder */ +) +{ + int16_t i; + float ener_hf, ener_exc, ener_input, fac, HF_syn[L_SUBFR16k], tmp, ener, scale; + float Ap[M16k + 1]; + float HF_SP[L_SUBFR16k]; + float HF_est_gain; + float HF_calc_gain; + float HF_corr_gain; + int16_t HF_gain_ind; + float dist_min, dist; + float HF[L_SUBFR16k]; /* HF excitation */ + + /* Original speech signal as reference for high band gain quantisation */ + for ( i = 0; i < L_SUBFR16k; i++ ) + { + HF_SP[i] = speech16k[i]; + } + + /*-----------------------------------------------------------------* + * generate white noise vector + *-----------------------------------------------------------------*/ + + for ( i = 0; i < L_SUBFR16k; i++ ) + { + HF[i] = (float) own_random( seed2_enc ); + } + + /*-----------------------------------------------------------------* + * calculate energy scaling factor so that white noise would have the + * same energy as exc12k8 + *-----------------------------------------------------------------*/ + + ener_exc = 0.01f; + for ( i = 0; i < L_SUBFR; i++ ) + { + ener_exc += exc[i] * exc[i]; + } + + ener_hf = 0.01f; + for ( i = 0; i < L_SUBFR16k; i++ ) + { + ener_hf += HF[i] * HF[i]; + } + + scale = (float) ( sqrt( ener_exc / ener_hf ) ); + + for ( i = 0; i < L_SUBFR16k; i++ ) + { + HF[i] *= scale; + } + + /*-----------------------------------------------------------------* + * calculate energy scaling factor to respect tilt of synth12k8 + * (tilt: 1=voiced, -1=unvoiced) + *-----------------------------------------------------------------*/ + + hp400_12k8( synth, L_SUBFR, mem_hp400_enc ); + + ener = 0.001f; + tmp = 0.001f; + for ( i = 1; i < L_SUBFR; i++ ) + { + ener += synth[i] * synth[i]; /* ener = r[0] */ + tmp += synth[i] * synth[i - 1]; /* tmp = r[1] */ + } + fac = tmp / ener; + + HF_est_gain = (float) ( 1.0f - fac ); + if ( core_brate == SID_1k75 || core_brate == FRAME_NO_DATA ) + { + /* emphasize HF noise in CNG */ + HF_est_gain *= 1.25f; /* full alignment with G.722 and AMR-WB */ + } + + if ( HF_est_gain < 0.1f ) + { + HF_est_gain = 0.1f; + } + + if ( HF_est_gain > 1.0f ) /* this condition is not in G.722.2, but in AMR-WB!*/ + { + HF_est_gain = 1.0f; + } + + /*-----------------------------------------------------------------* + * synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz + *-----------------------------------------------------------------*/ + + weight_a( Aq, Ap, 0.6f, M ); + syn_filt( Ap, M, HF, HF_syn, L_SUBFR16k, mem_syn_hf_enc, 1 ); + + /*-----------------------------------------------------------------* + * high pass filtering (0.9375ms of delay = 15 samples@16k) + *-----------------------------------------------------------------*/ + + filt_6k_8k( HF_syn, L_SUBFR16k, mem_hf1_enc ); + + /* filtering of the original signal */ + filt_6k_8k( HF_SP, L_SUBFR16k, mem_hf2_enc ); + + /* check the gain difference */ + ener_input = 0.01f; + ener_hf = 0.01f; + for ( i = 0; i < L_SUBFR16k; i++ ) + { + ener_input += HF_SP[i] * HF_SP[i]; + ener_hf += HF_syn[i] * HF_syn[i]; + } + + HF_calc_gain = (float) sqrt( ener_input / ener_hf ); + + /* set energy of HF synthesis to energy of original HF: + cross-fade between HF levels in active and inactive frame in hangover period */ + + *gain_alpha *= (float) ( 10 - ( *dtxHangoverCount ) ) / 7.0f; + if ( ( 10 - ( *dtxHangoverCount ) ) > 6 ) + { + *gain_alpha = 1.0f; + } + + HF_corr_gain = ( *gain_alpha ) * HF_calc_gain + ( 1.0f - ( *gain_alpha ) ) * HF_est_gain; + HF_corr_gain /= 2.0f; /* to stay in aligned with AMR-WB legacy decoder where decoded gain is multiplied by 2 */ + + /* Quantize the correction gain */ + dist_min = 100000.0f; + HF_gain_ind = 0; + for ( i = 0; i < 16; i++ ) + { + dist = ( HF_corr_gain - HP_gain[i] ) * ( HF_corr_gain - HP_gain[i] ); + if ( dist_min > dist ) + { + dist_min = dist; + HF_gain_ind = i; + } + } + + *hf_gain = HF_gain_ind; + + return; +} + +/*-----------------------------------------------------------------------* + * Function hp400_12k8() * + * * + * 2nd order Cheb2 high pass filter with cut off frequency at 400 Hz. * + * Optimized for fixed-point to get the following frequency response : * + * * + * frequency : 0Hz 100Hz 200Hz 300Hz 400Hz 630Hz 1.5kHz 3kHz * + * dB loss : -infdB -30dB -20dB -10dB -3dB +6dB +1dB 0dB * + * * + * Algorithm : * + * * + * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] * + * + a[1]*y[i-1] + a[2]*y[i-2]; * + * * + * short b[3] = {3660, -7320, 3660}; in Q12 * + * short a[3] = {4096, 7320, -3540}; in Q12 * + * * + * float --> b[3] = {0.893554687, -1.787109375, 0.893554687}; * + * a[3] = {1.000000000, 1.787109375, -0.864257812}; * + *-----------------------------------------------------------------------*/ + +static void hp400_12k8( + float signal[], /* i/o: signal */ + const int16_t lg, /* i : length of signal */ + float mem[] /* i/o: filter memory [4] */ +) +{ + int16_t i; + float x0, x1, x2; + float yy0, yy1, y2; + + yy1 = mem[0]; + y2 = mem[1]; + x0 = mem[2]; + x1 = mem[3]; + for ( i = 0; i < lg; i++ ) + { + x2 = x1; + x1 = x0; + x0 = signal[i]; + yy0 = yy1 * a_hp400[1] + y2 * a_hp400[2] + x0 * b_hp400[0] + x1 * b_hp400[1] + x2 * b_hp400[2]; + + signal[i] = yy0; + y2 = yy1; + yy1 = yy0; + } + + mem[0] = yy1; + mem[1] = y2; + mem[2] = x0; + mem[3] = x1; + + return; +} + +/*-------------------------------------------------------------------* + * filt_6k_7k: + * + * 15th order band pass 6kHz to 7kHz FIR filter. + * + * frequency :4kHz 5kHz 5.5kHz 6kHz 6.5kHz 7kHz 7.5kHz 8kHz + * dB loss : -60dB -45dB -13dB -3dB 0dB -3dB -13dB -45dB + * (gain=4.0) + *-------------------------------------------------------------------*/ + +static void filt_6k_8k( + float signal[], /* i/o: signal */ + const int16_t lg, /* i : signal length */ + float mem[] /* i/o: filter memory */ +) +{ + int16_t i, j; + float s, x[L_FRAME48k / NB_SUBFR + ( L_FIR - 1 )]; + + for ( i = 0; i < ( L_FIR - 1 ); i++ ) + { + x[i] = mem[i]; + } + + for ( i = 0; i < lg; i++ ) + { + x[i + ( L_FIR - 1 )] = signal[i]; + } + + for ( i = 0; i < lg; i++ ) + { + s = 0.0; + for ( j = 0; j < L_FIR; j++ ) + { + s += x[i + j] * fir_6k_8k[j]; + } + + signal[i] = (float) ( s * 1.0f ); + } + + for ( i = 0; i < ( L_FIR - 1 ); i++ ) + { + mem[i] = x[i + lg]; + } + + return; +} diff --git a/lib_enc/hq_classifier_enc.c b/lib_enc/hq_classifier_enc.c new file mode 100644 index 0000000000..895f7ac2e0 --- /dev/null +++ b/lib_enc/hq_classifier_enc.c @@ -0,0 +1,628 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define SHARP_DIST_THRES 22.2f +#define HALF_WIN_LENGTH 10 +#define L_SPEC_HB 320 +#define PEAK_THRESHOLD 0.1f +#define LOW_COUNT_THRESHOLD 220 + + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void hvq_classifier( const float *input, int16_t *prev_Npeaks, int16_t *prev_peaks, int16_t *hqswb_clas, int16_t *Npeaks, int16_t *peaks, const int32_t core_brate, const int16_t last_core, float *nf_gains, int16_t *hvq_hangover, float *pe_gains ); +static int16_t hf_spectrum_sparseness( Encoder_State *st, const float *coefs ); + +/*--------------------------------------------------------------------------* + * hq_classifier_enc() + * + * HQ mode selector (decision_matrix) + *--------------------------------------------------------------------------*/ + +/*! r: Consumed bits */ +int16_t hq_classifier_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t length, /* i : Frame length */ + const float *coefs, /* i : Spectral coefficients */ + const int16_t is_transient, /* i : Transient flag */ + int16_t *Npeaks, /* o : Number of identified peaks */ + int16_t *peaks, /* o : Peak indices */ + float *pe_gains, /* o : Peak gains */ + float *nf_gains, /* o : Noise-fill gains */ + int16_t *hqswb_clas /* o : HQ class */ +) +{ + int16_t bits; + int32_t max_brate; + int16_t harmonic_decision; + + HQ_ENC_HANDLE hHQ_core = st->hHQ_core; + + max_brate = HQ_32k; + if ( st->element_mode > EVS_MONO ) + { + max_brate = HQ_48k; + } + + *hqswb_clas = HQ_NORMAL; + bits = 1; + if ( is_transient ) + { + *hqswb_clas = HQ_TRANSIENT; + } + + if ( length == L_SPEC32k || length == L_SPEC48k ) + { + if ( st->core_brate <= max_brate ) + { + + if ( !is_transient && st->bwidth == st->last_bwidth ) + { + /* Detect HQ_HARMONIC mode */ + *hqswb_clas = peak_avrg_ratio( st->total_brate, coefs, NUMC_N + 96, &hHQ_core->mode_count, &hHQ_core->mode_count1 ); + + harmonic_decision = hf_spectrum_sparseness( st, coefs ); + + if ( *hqswb_clas == HQ_HARMONIC && !harmonic_decision ) + { + *hqswb_clas = HQ_NORMAL; + } + else + { + /* Detect HQ_HVQ mode */ + hvq_classifier( coefs, &hHQ_core->prev_Npeaks, hHQ_core->prev_peaks, hqswb_clas, Npeaks, peaks, st->core_brate, st->last_core, nf_gains, &hHQ_core->hvq_hangover, pe_gains ); + } + } + bits = 2; + } + } + else if ( length == L_SPEC16k_EXT || length == L_SPEC48k_EXT ) + { + bits = 0; /* HQ_NORMAL only -- no signalling needed */ + } + + /* write signalling info to the bitstream */ + push_indice( st->hBstr, IND_HQ_SWB_CLAS, *hqswb_clas, bits ); + + if ( st->core_brate <= HQ_32k && *hqswb_clas == HQ_NORMAL ) + { + if ( length == L_SPEC32k ) + { + *hqswb_clas = HQ_GEN_SWB; + } + else if ( length == L_SPEC48k ) + { + *hqswb_clas = HQ_GEN_FB; + } + } + + return bits; +} + +/*--------------------------------------------------------------------------* + * peak_avrg_ratio() + * + * Classify the input signal and decide if it has a harmonic structure + *--------------------------------------------------------------------------*/ + +/*! r: hqswb_clas */ +int16_t peak_avrg_ratio( + const int32_t total_brate, /* i : total bitrate */ + const float *input_hi, /* i : input signal */ + const int16_t N, /* i : number of coefficients */ + int16_t *mode_count, /* i/o: HQ_HARMONIC mode count */ + int16_t *mode_count1 /* i/o: HQ_NORMAL mode count */ +) +{ + float mean, peak, sharp; + int16_t i, j, q, k, k1, hqswb_clas; + float input_abs[L_FRAME32k]; + + for ( i = 96; i < N; i++ ) + { + input_abs[i] = (float) fabs( input_hi[i] ); + } + + hqswb_clas = HQ_NORMAL; + + k = 0; + k1 = 0; + q = 96; + for ( i = 3; i < 17; i++ ) + { + peak = 0.0f; + mean = EPSILON; + for ( j = 0; j < 32; j++, q++ ) + { + mean += input_abs[q]; + + if ( input_abs[q] > peak ) + { + peak = input_abs[q]; + } + } + + sharp = 32 * peak / mean; + + if ( i < 8 ) + { + if ( sharp > 4.5 ) + { + k += 1; + } + } + else + { + if ( sharp > 3.6 && peak > 10 ) + { + k1 += 1; + } + } + } + + if ( k + k1 >= 10 && k1 > 5 ) + { + if ( *mode_count < 8 ) + { + ( *mode_count )++; + } + + if ( *mode_count1 > 0 ) + { + ( *mode_count1 )--; + } + } + else + { + if ( *mode_count > 0 ) + { + ( *mode_count )--; + } + + if ( *mode_count1 < 8 ) + { + ( *mode_count1 )++; + } + } + if ( ( k + k1 >= 5 && k1 > 2 && total_brate < HQ_BWE_CROSSOVER_BRATE && total_brate > HQ_16k40 ) || ( ( ( k + k1 >= 10 && k1 > 5 ) || *mode_count >= 5 ) && *mode_count1 < 5 ) ) + { + hqswb_clas = HQ_HARMONIC; + } + + return hqswb_clas; +} + + +/*--------------------------------------------------------------------------* + * hvq_classifier() + * + * Classification of spectral content for HQ_HVQ mode + *--------------------------------------------------------------------------*/ + +static void hvq_classifier( + const float *input, /* i : input signal */ + int16_t *prev_Npeaks, /* i/o: Peak number memory */ + int16_t *prev_peaks, /* i/o: Peak indices memory */ + int16_t *hqswb_clas, /* i/o: HQ class */ + int16_t *Npeaks, /* o : Number of peaks */ + int16_t *peaks, /* o : Peak indices */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t last_core, /* i : Last core used */ + float *nf_gains, /* o : Noisefloor gains */ + int16_t *hvq_hangover, /* i/o: Mode-switch hangover */ + float *pe_gains /* o : peak gains */ +) +{ + const float *p_adj; + float sharp_dist; + float nf, pe, d, peak, thr_tmp, m; + float input_abs[L_FRAME32k], thr[L_FRAME16k]; + float pe_mean[HVQ_NSUB_32k], nf_mean[HVQ_NSUB_32k]; + float sharp[HVQ_NSUB_32k]; + + int16_t num_sharp_bands, i, j, k, q, peak_th, nsub, pindx, N, offset; + int16_t num_peak_cands, high, low; + int16_t peak_cand_idx[HVQ_THRES_BIN_32k], avail_peaks[HVQ_NSUB_32k]; + + if ( *hqswb_clas == HQ_HARMONIC && last_core != ACELP_CORE && last_core != AMR_WB_CORE ) + { + set_f( thr, 0.0f, L_FRAME16k ); + + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + nsub = HVQ_NSUB_24k; + } + else + { + nsub = HVQ_NSUB_32k; + } + + N = nsub * HVQ_BW; + + for ( i = 0; i < N; i++ ) + { + input_abs[i] = (float) fabs( input[i] ); + } + + *Npeaks = 0; + nf = 800; + pe = 800; + num_sharp_bands = 0; + k = 0; + q = 0; + sharp_dist = 0; + + /* Find peak threshold */ + for ( i = 0; i < nsub; i++ ) + { + peak = 0.0f; + nf_mean[i] = EPSILON; + pe_mean[i] = EPSILON; + for ( j = 0; j < HVQ_BW; j++, q++ ) + { + d = input_abs[q]; + + if ( d > nf ) + { + nf = HVQ_NF_WEIGHT1 * nf + ( 1 - HVQ_NF_WEIGHT1 ) * d; + } + else + { + nf = HVQ_NF_WEIGHT2 * nf + ( 1 - HVQ_NF_WEIGHT2 ) * d; + } + + if ( d > pe ) + { + pe = HVQ_PE_WEIGHT1 * pe + ( 1 - HVQ_PE_WEIGHT1 ) * d; + } + else + { + pe = HVQ_PE_WEIGHT2 * pe + ( 1 - HVQ_PE_WEIGHT2 ) * d; + } + + nf_mean[i] += nf; + pe_mean[i] += pe; + + if ( d > peak ) + { + peak = d; + } + } + + nf_mean[i] /= HVQ_BW; + pe_mean[i] /= HVQ_BW; + + + thr_tmp = (float) pow( pe_mean[i] / nf_mean[i], HVQ_THR_POW ) * nf_mean[i]; + set_f( &thr[k], thr_tmp, HVQ_BW ); + k += HVQ_BW; + + sharp[i] = peak / nf_mean[i]; + sharp_dist += sharp[i] - HVQ_SHARP_THRES; + + if ( sharp[i] > HVQ_SHARP_THRES ) + { + num_sharp_bands++; + } + } + + /* Estimate noise floor gains */ + offset = nsub % 2; + for ( i = 0; i < 2 * ( nsub / 2 ); i++ ) + { + nf_gains[( 2 * i + 1 ) / nsub] += nf_mean[i + offset]; + pe_gains[( 2 * i + 1 ) / nsub] += pe_mean[i + offset]; + } + + for ( i = 0; i < HVQ_NF_GROUPS; i++ ) + { + nf_gains[i] /= nsub / HVQ_NF_GROUPS; + pe_gains[i] /= nsub / HVQ_NF_GROUPS; + } + + /* Allocate available peaks */ + for ( i = 0; i < nsub; i++ ) + { + avail_peaks[i] = HVQ_PA_PEAKS_SHARP1; + if ( nf_mean[i] < nf_gains[( 2 * i + 1 ) / nsub] * HVQ_PA_FAC ) + { + if ( sharp[i] < HVQ_PA_SHARP_THRES3 ) + { + avail_peaks[i] = HVQ_PA_PEAKS_SHARP3; + } + else if ( sharp[i] < HVQ_PA_SHARP_THRES2 ) + { + avail_peaks[i] = HVQ_PA_PEAKS_SHARP2; + } + } + } + + /* Adjust threshold around previous peaks */ + for ( i = 0; i < *prev_Npeaks; i++ ) + { + j = prev_peaks[i] - 2; + k = prev_peaks[i] + 2; + p_adj = hvq_thr_adj; + + for ( q = j; q < k; q++ ) + { + thr[q] *= *p_adj++; + } + } + + num_peak_cands = 0; + + /* Remove everything below threshold for peak search */ + input_abs[0] = 0; + input_abs[1] = 0; + input_abs[N - 2] = 0; + input_abs[N - 1] = 0; + for ( i = 0; i < N - 2; i++ ) + { + if ( input_abs[i] < thr[i] ) + { + input_abs[i] = 0; + } + else + { + input_abs[num_peak_cands] = input_abs[i]; + peak_cand_idx[num_peak_cands] = i; + num_peak_cands++; + } + } + + /* maximum 27 (5+9+13) bits for additional peak */ + peak_th = (int16_t) ( ( core_brate * HVQ_PEAKS_PER_DELTA_THR + HVQ_PEAKS_PER_DELTA_THR_OFFS ) / HVQ_PEAKS_BPS_DELTA ); + + /* Find peaks */ + pindx = maximum( input_abs, num_peak_cands, &m ); + i = 0; + + while ( m > 0 && i < peak_th + 1 ) + { + if ( avail_peaks[peak_cand_idx[pindx] / HVQ_BW] > 0 ) + { + peaks[i++] = peak_cand_idx[pindx]; + avail_peaks[peak_cand_idx[pindx] / HVQ_BW]--; + } + + j = pindx - 2; + k = pindx + 2; + + if ( j < 0 ) + { + j = 0; + } + + if ( k > num_peak_cands - 1 ) + { + k = num_peak_cands - 1; + } + + low = peak_cand_idx[pindx] - 2; + high = peak_cand_idx[pindx] + 2; + + if ( low < 0 ) + { + low = 0; + } + + if ( high > N - 1 ) + { + high = N - 1; + } + + for ( q = j; q <= pindx; q++ ) + { + if ( peak_cand_idx[q] >= low ) + { + peak_cand_idx[q] = 0; + input_abs[q] = 0; + } + } + + for ( q = pindx + 1; q <= k; q++ ) + { + if ( peak_cand_idx[q] <= high ) + { + peak_cand_idx[q] = 0; + input_abs[q] = 0; + } + } + + pindx = maximum( input_abs, num_peak_cands, &m ); + } + + *Npeaks = i; + + /* decision about HQ_HVQ mode */ + if ( *Npeaks > HVQ_MIN_PEAKS ) + { + if ( num_sharp_bands > nsub - 3 && *Npeaks <= peak_th ) + { + sharp_dist /= nsub; + if ( sharp_dist <= SHARP_DIST_THRES && *hvq_hangover < 0 ) + { + ( *hvq_hangover )++; + } + else + { + *hqswb_clas = HQ_HVQ; + *hvq_hangover = 2; + } + + /* update memory */ + *prev_Npeaks = *Npeaks; + mvs2s( peaks, prev_peaks, *Npeaks ); + } + else + { + if ( *hvq_hangover > 0 ) + { + *hqswb_clas = HQ_HVQ; + ( *hvq_hangover )--; + } + else + { + *hvq_hangover = -1; + } + } + } + else + { + *hvq_hangover = -1; + } + + *Npeaks = (int16_t) ( min( ( core_brate * HVQ_PEAKS_PER_DELTA + HVQ_PEAKS_PER_DELTA_OFFS ) / HVQ_PEAKS_BPS_DELTA, *Npeaks ) ); + } + else + { + *prev_Npeaks = 0; + *hvq_hangover = 0; + } + + return; +} +/*--------------------------------------------------------------------------* + * hf_spectrum_sparseness() + * + * Detection of sparse spectrum in high band for activation of harmonic + * modes HQ_HARMONIC and HQ_HVQ + *--------------------------------------------------------------------------*/ +/*! r: Harmonic decision for high band */ +static int16_t hf_spectrum_sparseness( + Encoder_State *st, /* i/o: encoder state structure */ + const float *coefs /* i : MDCT spectrum */ +) +{ + int16_t i; + float thr; + int16_t low_count; + float A[L_SPEC_HB]; + float Amax; + float movmean; + float inv_rms; + float crest; + float crest_mod; + const float *p_num; + float *crest_lp; + float *crest_mod_lp; + int16_t result; + + crest_lp = &st->hHQ_core->crest_lp; + crest_mod_lp = &st->hHQ_core->crest_mod_lp; + + result = TRUE; + if ( st->element_mode != EVS_MONO ) + { + for ( i = 0; i < L_SPEC_HB; i++ ) + { + A[i] = (float) fabsf( coefs[i + L_SPEC_HB] ); + } + low_count = 0; + inv_rms = 0.0f; + crest_mod = 0.0f; + maximum( A, L_SPEC_HB, &Amax ); + thr = Amax * PEAK_THRESHOLD; + movmean = 0.0f; /* avoid uninitialized warning */ + p_num = &inv_tbl[HALF_WIN_LENGTH + 1]; /* Table for division 1./(11:21) */ + for ( i = 0; i < L_SPEC_HB; i++ ) + { + inv_rms += A[i] * A[i]; + if ( A[i] < thr ) + { + low_count += 1; + } + if ( i <= HALF_WIN_LENGTH ) + { + if ( i == 0 ) + { + movmean = sum_f( &A[0], i + HALF_WIN_LENGTH + 1 ) * ( *p_num ); + } + else + { + p_num++; + movmean = movmean + ( A[i + HALF_WIN_LENGTH] - movmean ) * ( *p_num ); + } + } + else + { + if ( L_SPEC_HB <= i + HALF_WIN_LENGTH ) + { + p_num--; + movmean = movmean + ( movmean - A[i - HALF_WIN_LENGTH - 1] ) * ( *p_num ); + } + else + { + movmean = movmean + ( A[i + HALF_WIN_LENGTH] - A[i - HALF_WIN_LENGTH - 1] ) * ( *p_num ); + } + } + if ( crest_mod < movmean ) + { + crest_mod = movmean; + } + } + inv_rms = 1.0f / (float) sqrtf( inv_rms / L_SPEC_HB ); + crest = Amax * inv_rms; + crest_mod = crest_mod * inv_rms; + *crest_lp = HQ_CREST_FAC_SM * ( *crest_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * crest; + *crest_mod_lp = HQ_CREST_FAC_SM * ( *crest_mod_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * crest_mod; + + if ( ( ( *crest_lp ) > HQ_CREST_THRESHOLD ) && ( ( *crest_mod_lp ) > HQ_CREST_MOD_THRESHOLD ) && ( low_count > LOW_COUNT_THRESHOLD ) ) + { + result = FALSE; + } + } + + return result; +} diff --git a/lib_enc/hq_core_enc.c b/lib_enc/hq_core_enc.c new file mode 100644 index 0000000000..250d36c5a4 --- /dev/null +++ b/lib_enc/hq_core_enc.c @@ -0,0 +1,332 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * hq_core_enc() + * + * HQ core encoder + *--------------------------------------------------------------------------*/ + +void hq_core_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *audio, /* i : input audio signal */ + const int16_t input_frame_orig, /* i : frame length */ + const int16_t hq_core_type, /* i : HQ core type */ + const int16_t Voicing_flag, /* i : Voicing flag for FER method selection */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + int16_t i, is_transient, num_bits, extra_unused; + float wtda_audio[2 * L_FRAME48k]; + float t_audio[L_FRAME48k_EXT]; + int16_t inner_frame, input_frame, L_frame; + float ener_match; + int16_t left_overlap, right_overlap; + int16_t L_spec, overlap, nz, tcx_offset; + float Aq_old[M + 1]; + float output[L_FRAME16k]; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + + wmops_sub_start( "hq_core_enc" ); + + set_f( t_audio, 0, L_FRAME48k ); + st->Nb_ACELP_frames = 0; + + /* set input_frame length */ + input_frame = input_frame_orig; + + /* Sanity check, it should never happen at the encoder side (no BFI) */ + if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) + { + st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + } + else + { + st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; + } + st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + + /*-------------------------------------------------------------------------- + * Preprocessing in the first HQ frame after ACELP frame + * Find the number of bits for PVQ coding + * Write signalling information + *--------------------------------------------------------------------------*/ + + num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); + extra_unused = 0; + + /*-------------------------------------------------------------------------- + * Detect signal transition + *--------------------------------------------------------------------------*/ + + is_transient = detect_transient( st, audio, input_frame ); + + if ( st->element_mode > EVS_MONO && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + /*-------------------------------------------------------------------------- + * IVAS switching frame + *--------------------------------------------------------------------------*/ + + L_spec = input_frame; + left_overlap = -1; + right_overlap = -1; + + WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, TRANSITION_OVERLAP, FULL_OVERLAP, &left_overlap, &right_overlap, st->hTcxEnc->speech_TCX, &L_spec, wtda_audio, 1, 1, 0 ); + + TCX_MDCT( wtda_audio, t_audio, left_overlap, L_spec - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); + + inner_frame = inner_frame_tbl[st->bwidth]; + L_spec = l_spec_ext_tbl[st->bwidth]; + is_transient = 0; + } + else + { + /*-------------------------------------------------------------------------- + * Windowing and time-domain aliasing + * DCT transform + *--------------------------------------------------------------------------*/ + + wtda( audio, wtda_audio, NULL, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, input_frame ); + + if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) + { + /* Preprocessing in the first HQ frame after ACELP frame */ + core_switching_hq_prepare_enc( st, &num_bits, input_frame, wtda_audio, audio ); + + /* During ACELP->HQ core switching, limit the HQ core bitrate to 48kbps */ + if ( num_bits > HQ_48k / FRAMES_PER_SEC ) + { + extra_unused = num_bits - (int16_t) ( HQ_48k / FRAMES_PER_SEC ); + num_bits = (int16_t) ( HQ_48k / FRAMES_PER_SEC ); + } + } + + direct_transform( wtda_audio, t_audio, is_transient, input_frame, st->element_mode ); + + /* scale coefficients to their nominal level (8kHz) */ + if ( input_frame != NORM_MDCT_FACTOR ) + { + ener_match = (float) sqrt( (float) NORM_MDCT_FACTOR / (float) input_frame ); + + for ( i = 0; i < input_frame; i++ ) + { + t_audio[i] *= ener_match; + } + } + + /* limit encoded band-width according to the command-line OR BWD limitation */ + inner_frame = inner_frame_tbl[st->bwidth]; + L_spec = l_spec_tbl[st->bwidth]; + + if ( input_frame > inner_frame ) + { + if ( is_transient ) + { + for ( i = 1; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) + { + mvr2r( t_audio + i * input_frame / NUM_TIME_SWITCHING_BLOCKS, t_audio + i * inner_frame / NUM_TIME_SWITCHING_BLOCKS, inner_frame / NUM_TIME_SWITCHING_BLOCKS ); + } + } + + set_f( t_audio + inner_frame, 0.0f, input_frame - inner_frame ); + } + } + + /* subtract signalling bits */ + num_bits -= hBstr->nb_bits_tot; + + /*-------------------------------------------------------------------------- + * High-band gain control in case of BWS + *--------------------------------------------------------------------------*/ + + if ( st->bwidth_sw_cnt > 0 ) + { + if ( is_transient ) + { + for ( i = 0; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) + { + v_multc( t_audio + i * inner_frame / NUM_TIME_SWITCHING_BLOCKS + L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, t_audio + i * inner_frame / NUM_TIME_SWITCHING_BLOCKS + L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, inner_frame / NUM_TIME_SWITCHING_BLOCKS - L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS ); + } + } + else + { + v_multc( t_audio + L_FRAME16k, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, t_audio + L_FRAME16k, L_spec - L_FRAME16k ); + } + } + + /*-------------------------------------------------------------------------- + * Classify whether to put extra bits for FER mitigation + *--------------------------------------------------------------------------*/ + + if ( ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || st->last_core == HQ_CORE ) && st->core_brate > MINIMUM_RATE_TO_ENCODE_VOICING_FLAG ) + { + if ( Voicing_flag > 0 ) + { + push_indice( hBstr, IND_HQ_VOICING_FLAG, 1, 1 ); + num_bits -= 1; + } + else + { + push_indice( hBstr, IND_HQ_VOICING_FLAG, 0, 1 ); + num_bits -= 1; + } + } + + /*-------------------------------------------------------------------------- + * Transform-domain encoding + *--------------------------------------------------------------------------*/ + + if ( hq_core_type == LOW_RATE_HQ_CORE ) + { + /* HQ low rate encoder */ + hq_lr_enc( st, t_audio, inner_frame, &num_bits, is_transient ); + } + else + { + /* HQ high rate encoder */ + hq_hr_enc( st, t_audio, L_spec, &num_bits, is_transient, vad_hover_flag ); + } + + /* write all unused bits to the bitstream */ + num_bits += extra_unused; + + while ( num_bits >= 16 ) + { + push_indice( hBstr, IND_UNUSED, 0, 16 ); + num_bits -= 16; + } + + if ( num_bits != 0 ) + { + push_indice( hBstr, IND_UNUSED, 0, num_bits ); + } + + if ( st->element_mode > EVS_MONO && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) + { + overlap = st->hTcxCfg->tcx_mdct_window_length; + nz = NS2SA( st->sr_core, N_ZERO_MDCT_NS ); + L_frame = (int16_t) ( st->L_frame + st->hTcxCfg->tcx_offset - st->hTcxCfg->lfacNext ); + tcx_offset = st->hTcxCfg->lfacNext; + set_f( Aq_old, 0, M + 1 ); /* Dummy filter */ + Aq_old[0] = 1; + + /* Code taken from InternalTCXDecoder() */ + TCX_MDCT_Inverse( t_audio, wtda_audio, overlap, L_frame - overlap, overlap, st->element_mode ); + + /* Window current frame */ + tcx_windowing_synthesis_current_frame( wtda_audio, st->hTcxCfg->tcx_aldo_window_2, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, st->hTcxCfg->tcx_last_overlap_mode, /*left mode*/ st->hTcxEnc->acelp_zir, st->hTcxEnc->Txnq, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans, st->L_frame >> 1, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); + + /*Compute windowed synthesis in case of switching to ALDO windows in next frame*/ + mvr2r( wtda_audio + L_frame - nz, st->hTcxEnc->old_out, nz + overlap ); + set_zero( st->hTcxEnc->old_out + nz + overlap, nz ); + + tcx_windowing_synthesis_past_frame( st->hTcxEnc->old_out + nz, st->hTcxCfg->tcx_aldo_window_1_trunc, st->hTcxCfg->tcx_mdct_window_half, st->hTcxCfg->tcx_mdct_window_minimum, overlap, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, FULL_OVERLAP ); + + for ( i = 0; i < nz; i++ ) + { + st->hTcxEnc->old_out[nz + overlap + i] = wtda_audio[L_frame - 1 - i] * st->hTcxCfg->tcx_aldo_window_1_trunc[-1 - i]; + } + mvr2r( wtda_audio + ( overlap >> 1 ) - tcx_offset, output, st->L_frame ); + } + else + { + ener_match = (float) sqrt( (float) L_FRAME16k / (float) NORM_MDCT_FACTOR ); + v_multc( t_audio, ener_match, t_audio, inner_frame ); + + inverse_transform( t_audio, wtda_audio, is_transient, L_FRAME16k, inner_frame, st->element_mode ); + + window_ola( wtda_audio, output, st->hTcxEnc->old_out, L_FRAME16k, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, 0, 0, NULL ); + } + + if ( st->element_mode > EVS_MONO ) + { + /* Store LB synthesis in case of switch to ACELP */ + mvr2r( output, st->hLPDmem->old_exc, L_FRAME16k ); + } + + wmops_sub_end(); + + return; +} + +/*-------------------------------------------------------------------* + * hq_core_enc_init() + * + * Initialize HQ core state structure + *-------------------------------------------------------------------*/ + +void HQ_core_enc_init( + HQ_ENC_HANDLE hHQ_core /* i/o: HQ core data handle */ +) +{ + hHQ_core->mode_count = 0; + hHQ_core->mode_count1 = 0; + + hHQ_core->hq_generic_speech_class = 0; + + hHQ_core->prev_Npeaks = 0; + set_s( hHQ_core->prev_peaks, 0, HVQ_MAX_PEAKS ); + hHQ_core->hvq_hangover = 0; + hHQ_core->prev_hqswb_clas = HQ_NORMAL; + set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); + + set_s( hHQ_core->prev_frm_index, -1, NB_SWB_SUBBANDS_HAR_SEARCH_SB ); + hHQ_core->prev_frm_hfe2 = 0; + hHQ_core->prev_stab_hfe2 = 0; + hHQ_core->prev_ni_ratio = 0.5f; + set_f( hHQ_core->prev_En_sb, 0.0f, NB_SWB_SUBBANDS ); + set_s( hHQ_core->last_bitalloc_max_band, 0, 2 ); + set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); + set_f( hHQ_core->last_env, 0, BANDS_MAX ); + hHQ_core->last_max_pos_pulse = 0; + + hHQ_core->crest_lp = HQ_CREST_THRESHOLD; + hHQ_core->crest_mod_lp = HQ_CREST_MOD_THRESHOLD; + + return; +} diff --git a/lib_enc/hq_env_enc.c b/lib_enc/hq_env_enc.c new file mode 100644 index 0000000000..0ddfc2cb0e --- /dev/null +++ b/lib_enc/hq_env_enc.c @@ -0,0 +1,564 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------------------* + * encode_envelope_indices() + * + * Encode envelope indices + *--------------------------------------------------------------------------------------*/ + +/*! r: Number of bits if flag_pack=0,0 if flag_pack=1 */ +int16_t encode_envelope_indices( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t num_sfm, /* i : Number of subbands */ + const int16_t numnrmibits, /* i : Bitrate of fall-back coding mode */ + int16_t *difidx, /* i/o: Diff indices/encoded diff indices */ + int16_t *LCmode, /* o : Coding mode if flag_pack=0, i : if flag_pack=1 */ + const int16_t flag_pack, /* i : indicator of packing or estimating bits */ + const int16_t flag_HQ2, /* i : indicator of HQ2 core */ + const int16_t is_transient /* i : transient flag */ +) +{ + int16_t bits; + int16_t prevj; + int16_t hcode_l; + int16_t i, j; + int16_t difidx_flag; + int16_t index_max, index_min, index_rad; + int16_t difidx_org[NB_SFM]; /* length of this buffer is max(BANDS_MAX,NB_SFM) */ + int16_t m, r; + int16_t v, k; + + set_s( difidx_org, 0, NB_SFM ); + difidx_flag = 0; + + /*------------------------------------------------------------------* + * Check Huffman encoding for QNorm indices + *------------------------------------------------------------------*/ + + /* LC mode index is changed to synchronize LR-MDCT signaling */ + /* LC mode 0 = Context based coding */ + /* LC mode 1 = resized huffman coding */ + /* LC mode 2 = normal Huffman Coding */ + /* LC mode 3 = bit packing */ + if ( flag_pack == 0 ) + { + if ( is_transient && flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) + { + bits = 0; + index_max = 0; + index_min = 31; + for ( i = 0; i < num_sfm; i++ ) + { + if ( difidx[i] > index_max ) + { + index_max = difidx[i]; + } + if ( difidx[i] < index_min ) + { + index_min = difidx[i]; + } + } + if ( index_min > 10 && index_max < 22 ) + { + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + bits += huffsizn_tran[j]; + } + } + hcode_l = 0; + *LCmode = 0; + prevj = difidx[0] + OFFSET_NORM; + /* LC mode 0 = Context based coding */ + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + if ( prevj > HTH_NORM ) + { + /* above */ + hcode_l += huffsizn_n[31 - j]; + } + else + { + if ( prevj < LTH_NORM ) + { + /* less */ + hcode_l += huffsizn_n[j]; + } + else + { + /* equal */ + hcode_l += huffsizn_e[j]; + } + } + prevj = j; + } + if ( hcode_l >= bits && bits != 0 ) + { + /* LC mode 1 Transient Huffman Coding */ + *LCmode = 1; + hcode_l = bits; + } + } + else + { + /* Check bits if LC mode == 3 -> Check bits if LC mode == 0 */ + hcode_l = 0; + prevj = difidx[0] + OFFSET_NORM; + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + if ( prevj > HTH_NORM ) + { + /* above */ + hcode_l += huffsizn_n[31 - j]; + } + else + { + if ( prevj < LTH_NORM ) + { + /* less */ + hcode_l += huffsizn_n[j]; + } + else + { + /* equal */ + hcode_l += huffsizn_e[j]; + } + } + prevj = j; + } + + *LCmode = 0; + + /* LR-MDCT core doesn't have coding mode 2 and 3 */ + if ( flag_HQ2 == NORMAL_HQ_CORE ) + { + /* Check bits if LC mode == 1 -> Check bits if LC mode == 2 */ + bits = 0; + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + bits += huffsizn[j]; + } + + /*------------------------------------------------------------------------------* + * comparing bit expenses of coding mode 2 with that of the optimal coding mode + *------------------------------------------------------------------------------*/ + + if ( hcode_l > bits ) + { + *LCmode = 2; + hcode_l = bits; + } + } + + /* Check bits if LC mode == 2 -> Check bits if LC mode == 1 */ + bits = 0; + index_max = 0; + index_min = 31; + for ( i = 1; i < num_sfm; i++ ) + { + difidx_org[i] = difidx[i]; + } + + difidx_flag = 0; + for ( i = 2; i < num_sfm; i++ ) + { + if ( difidx_org[i - 1] > 17 ) + { + difidx[i] = difidx_org[i] + min( ( difidx_org[i - 1] - 17 ), 3 ); + if ( difidx[i] > 31 ) + { + difidx_flag = 1; + break; + } + } + + if ( difidx_org[i - 1] < 13 ) + { + difidx[i] = difidx_org[i] + max( ( difidx_org[i - 1] - 13 ), -3 ); + if ( difidx[i] < 0 ) + { + difidx_flag = 1; + break; + } + } + } + + index_rad = 0; + if ( difidx_flag != 1 ) + { + for ( i = 1; i < num_sfm; i++ ) + { + if ( difidx[i] > index_max ) + { + index_max = difidx[i]; + } + + if ( difidx[i] < index_min ) + { + index_min = difidx[i]; + } + } + + index_rad = max( ( 15 - index_min ), ( index_max - 15 ) ); + + if ( index_rad <= HUFF_THR ) + { + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + bits += resize_huffsizn[j]; + } + + /*------------------------------------------------------------------* + * comparing bit expenses of coding mode 1 with that of coding mode 0 + *------------------------------------------------------------------*/ + + if ( hcode_l > bits ) + { + hcode_l = bits; + *LCmode = 1; + } + } + } + + /* LR-MDCT core doesn't have coding mode 2 and 3 */ + if ( flag_HQ2 == NORMAL_HQ_CORE ) + { + /*------------------------------------------------------------------------------* + * comparing bit expenses of coding mode 3 with that of the optimal coding mode + *------------------------------------------------------------------------------*/ + + if ( hcode_l >= numnrmibits ) + { + hcode_l = numnrmibits; + *LCmode = 3; + } + } + + if ( ( *LCmode != 1 && flag_HQ2 == NORMAL_HQ_CORE ) || flag_HQ2 == LOW_RATE_HQ_CORE ) + { + for ( i = 2; i < num_sfm; i++ ) + { + difidx[i] = difidx_org[i]; + } + } + } + } + else + { + if ( flag_HQ2 == LOW_RATE_HQ_CORE_TRAN || flag_HQ2 == LOW_RATE_HQ_CORE ) + { + push_indice( hBstr, IND_HQ2_DENG_HMODE, *LCmode, BITS_DE_HMODE ); + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, difidx[0], BITS_DE_FCOMP ); + } + else + { + push_indice( hBstr, IND_LC_MODE, *LCmode, 2 ); + push_indice( hBstr, IND_YNRM, difidx[0], NORM0_BITS ); + } + + if ( is_transient && flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) + { + hcode_l = 0; + if ( *LCmode == 1 ) + { + /* LC mode 0 Transient Huffman Coding */ + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + m = huffnorm_tran[j]; + r = huffsizn_tran[j]; + v = 0; + + /* Bit reverse */ + for ( k = 0; k < r; k++ ) + { + v <<= 1; + v |= m & 1; + m >>= 1; + } + + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, v, r ); + } + } + else + { + /* LC mode 1 context based Coding */ + prevj = difidx[0] + OFFSET_NORM; + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + + if ( prevj > HTH_NORM ) + { + /* above */ + r = huffsizn_n[31 - j]; + m = huffnorm_n[31 - j]; + } + else + { + if ( prevj < LTH_NORM ) + { + /* less */ + r = huffsizn_n[j]; + m = huffnorm_n[j]; + } + else + { + /* equal */ + r = huffsizn_e[j]; + m = huffnorm_e[j]; + } + } + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, m, r ); + prevj = j; + } + } + } + else + { + hcode_l = 0; + if ( *LCmode == 0 ) + { + /* LC mode 3 -> LC mode 0 */ + prevj = difidx[0] + OFFSET_NORM; + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + + if ( prevj > HTH_NORM ) + { + /* above */ + r = huffsizn_n[31 - j]; + m = huffnorm_n[31 - j]; + } + else + { + if ( prevj < LTH_NORM ) + { + /* less */ + r = huffsizn_n[j]; + m = huffnorm_n[j]; + } + else + { + /* equal */ + r = huffsizn_e[j]; + m = huffnorm_e[j]; + } + } + + if ( flag_HQ2 == LOW_RATE_HQ_CORE ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, m, r ); + } + else + { + push_indice( hBstr, IND_YNRM, m, r ); + } + + prevj = j; + } + } + else if ( *LCmode == 1 ) + { + if ( flag_HQ2 == 1 ) + { + index_max = 0; + index_min = 31; + for ( i = 1; i < num_sfm; i++ ) + { + difidx_org[i] = difidx[i]; + } + + for ( i = 2; i < num_sfm; i++ ) + { + if ( difidx_org[i - 1] > 17 ) + { + difidx[i] = difidx_org[i] + min( ( difidx_org[i - 1] - 17 ), 3 ); + if ( difidx[i] > 31 ) + { + difidx_flag = 1; + break; + } + } + + if ( difidx_org[i - 1] < 13 ) + { + difidx[i] = difidx_org[i] + max( ( difidx_org[i - 1] - 13 ), -3 ); + if ( difidx[i] < 0 ) + { + difidx_flag = 1; + break; + } + } + } + + if ( difidx_flag != 1 ) + { + for ( i = 1; i < num_sfm; i++ ) + { + if ( difidx[i] > index_max ) + { + index_max = difidx[i]; + } + + if ( difidx[i] < index_min ) + { + index_min = difidx[i]; + } + } + + index_rad = max( ( 15 - index_min ), ( index_max - 15 ) ); + + if ( index_rad <= HUFF_THR ) + { + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + } + } + } + } + + /* LC mode 2 -> LC mode 1 */ + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + + m = resize_huffnorm[j]; + r = resize_huffsizn[j]; + v = 0; + + /* Bit reverse */ + for ( k = 0; k < r; k++ ) + { + v <<= 1; + v |= m & 1; + m >>= 1; + } + + if ( flag_HQ2 ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, v, r ); + } + else + { + push_indice( hBstr, IND_YNRM, v, r ); + } + } + } + else if ( *LCmode == 2 ) + { + /* LC mode 1 -> LC mode 2 */ + for ( i = 1; i < num_sfm; i++ ) + { + j = difidx[i]; + + m = huffnorm[j]; + r = huffsizn[j]; + + push_indice( hBstr, IND_YNRM, m, r ); + } + } + else + { + for ( i = 1; i < num_sfm; i++ ) + { + push_indice( hBstr, IND_YNRM, difidx[i], NORMI_BITS ); + } + } + } + } + + return hcode_l; +} + +/*--------------------------------------------------------------------------* + * diff_envelope_coding() + * + * Create differential code of norm indices + *--------------------------------------------------------------------------*/ + +void diff_envelope_coding( + const int16_t is_transient, /* i : transient indicator */ + const int16_t num_env_bands, /* i : number of envelope bands to code */ + const int16_t start_norm, /* i : start of envelope coding */ + int16_t *ynrm, /* i/o: quantization indices for norms */ + int16_t *normqlg2, /* i/o: quantized norms */ + int16_t *difidx /* o : differential code */ +) +{ + int16_t i; + int16_t idxbuf[NB_SFM]; + int16_t normbuf[NB_SFM]; + + /* Differential coding for indices of quantized norms */ + if ( is_transient ) + { + /* Reorder quantization indices and quantized norms */ + reordernorm( ynrm, normqlg2, idxbuf, normbuf, num_env_bands ); + diffcod( num_env_bands, idxbuf, &difidx[1] ); + difidx[0] = idxbuf[0]; + recovernorm( idxbuf, ynrm, normqlg2, num_env_bands ); + } + else + { + diffcod( num_env_bands, &ynrm[start_norm], &difidx[1] ); + difidx[0] = ynrm[start_norm]; + + for ( i = start_norm; i < start_norm + num_env_bands; i++ ) + { + normqlg2[i] = dicnlg2[ynrm[i]]; + } + } + + return; +} diff --git a/lib_enc/hq_hr_enc.c b/lib_enc/hq_hr_enc.c new file mode 100644 index 0000000000..569d616066 --- /dev/null +++ b/lib_enc/hq_hr_enc.c @@ -0,0 +1,258 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hq_hr_enc() + * + * HQ high rate encoding routine + *--------------------------------------------------------------------------*/ + +void hq_hr_enc( + Encoder_State *st, /* i/o: encoder state structure */ + float *t_audio, /* i/o: transform-domain coefficients */ + const int16_t length, /* i : length of spectrum */ + int16_t *num_bits, /* i/o: number of available bits */ + const int16_t is_transient, /* i : transient flag */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + int16_t nb_sfm; + int16_t sum, hcode_l; + int16_t difidx[NB_SFM]; + int16_t normqlg2[NB_SFM], ynrm[NB_SFM]; + int16_t nf_idx; + int16_t LCmode; + int16_t shape_bits, num_sfm, numnrmibits; + int16_t hqswb_clas; + int16_t num_env_bands; + int16_t Npeaks, start_norm; + int16_t difidx_org[NB_SFM]; + int16_t R[NB_SFM]; + int16_t peaks[HVQ_MAX_PEAKS]; + int16_t sfmsize[NB_SFM], sfm_start[NB_SFM], sfm_end[NB_SFM]; + int16_t npulses[NB_SFM], maxpulse[NB_SFM]; + int16_t Rsubband[NB_SFM]; /* Q3 */ + float t_audio_q[L_SPEC48k_EXT]; + float nf_gains[HVQ_NF_GROUPS], pe_gains[HVQ_NF_GROUPS]; + float noise_level[HVQ_BWE_NOISE_BANDS]; + int16_t hq_generic_offset; + float hq_generic_fenv[HQ_FB_FENV]; + int16_t hq_generic_exc_clas = 0; + int16_t core_sfm; + int16_t har_freq_est1 = 0, har_freq_est2 = 0; + int16_t flag_dis = 1; + const int16_t *subband_search_offset; + int16_t wBands[2]; + int16_t b_delta_env; + float att; + HQ_ENC_HANDLE hHQ_core = st->hHQ_core; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + Npeaks = 0; + set_s( npulses, 0, NB_SFM ); + set_s( maxpulse, 0, NB_SFM ); + set_s( difidx_org, 0, NB_SFM ); + set_f( t_audio_q, 0.0f, L_FRAME48k ); + set_f( nf_gains, 0.0f, HVQ_NF_GROUPS ); + set_f( pe_gains, 0.0f, HVQ_NF_GROUPS ); + + /*------------------------------------------------------------------* + * Classification + *------------------------------------------------------------------*/ + + *num_bits -= hq_classifier_enc( st, length, t_audio, is_transient, &Npeaks, peaks, pe_gains, nf_gains, &hqswb_clas ); + + + /*------------------------------------------------------------------* + * Set quantization parameters + *------------------------------------------------------------------*/ + + hq_configure( length, hqswb_clas, st->core_brate, &num_sfm, &nb_sfm, &start_norm, &num_env_bands, &numnrmibits, &hq_generic_offset, sfmsize, sfm_start, sfm_end ); + + /*------------------------------------------------------------------* + * Transient frame handling + *------------------------------------------------------------------*/ + + /* Interleave MLT coefficients of 4 sub-vectors in case of transient frame */ + if ( is_transient ) + { + interleave_spectrum( t_audio, length ); + } + + if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) + { + calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); + if ( att != 1.0f ) + { + v_multc( t_audio, att, t_audio, sfm_end[num_sfm - 1] ); + } + } + + /*------------------------------------------------------------------* + * Scalar quantization of norms + * Encode norm indices + *------------------------------------------------------------------*/ + + /* calculate and quantize norms */ + calc_norm( t_audio, ynrm, normqlg2, start_norm, num_env_bands, sfmsize, sfm_start ); + + /* create differential code of quantized norm indices */ + diff_envelope_coding( is_transient, num_env_bands, start_norm, ynrm, normqlg2, difidx ); + + /* Find norm coding mode and calculate number of bits */ + hcode_l = encode_envelope_indices( hBstr, num_env_bands, numnrmibits, difidx, &LCmode, 0, NORMAL_HQ_CORE, is_transient ); + *num_bits -= hcode_l + NORM0_BITS + FLAGS_BITS; + + /* Encode norm indices */ + encode_envelope_indices( hBstr, num_env_bands, numnrmibits, difidx, &LCmode, 1, NORMAL_HQ_CORE, is_transient ); + + /*------------------------------------------------------------------* + * HQ GENERIC BWE encoding + *------------------------------------------------------------------*/ + + if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) + { + hq_generic_hf_encoding( t_audio, hq_generic_fenv, hq_generic_offset, st, &hq_generic_exc_clas, length ); + if ( hq_generic_exc_clas == HQ_GENERIC_SP_EXC ) + { + ( *num_bits )++; /* conditional 1 bit saving for representing FD3 BWE excitation class */ + } + map_hq_generic_fenv_norm( hqswb_clas, hq_generic_fenv, ynrm, normqlg2, num_env_bands, nb_sfm, hq_generic_offset ); + } + + /*------------------------------------------------------------------* + * Bit allocation + *------------------------------------------------------------------*/ + + hq_bit_allocation( st->core_brate, length, hqswb_clas, num_bits, normqlg2, nb_sfm, sfmsize, noise_level, R, Rsubband, &sum, &core_sfm, num_env_bands ); + + /*------------------------------------------------------------------* + * Normalize coefficients with quantized norms + *------------------------------------------------------------------*/ + if ( hqswb_clas != HQ_HVQ ) + { + if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) + { + b_delta_env = calc_nor_delta_hf( hBstr, t_audio, ynrm, Rsubband, num_env_bands, nb_sfm, sfmsize, sfm_start, core_sfm ); + sum -= b_delta_env; + } + normalizecoefs( t_audio, ynrm, nb_sfm, sfm_start, sfm_end ); + } + + /*------------------------------------------------------------------* + * Quantize/code spectral fine structure using PVQ or HVQ + *------------------------------------------------------------------*/ + + if ( hqswb_clas == HQ_HVQ ) + { +#ifdef DEBUGGING + sum = hvq_enc( hBstr, st->bwidth, st->idchan, st->core_brate, *num_bits, Npeaks, ynrm, R, peaks, nf_gains, noise_level, pe_gains, t_audio, t_audio_q ); +#else + sum = hvq_enc( hBstr, st->bwidth, st->core_brate, *num_bits, Npeaks, ynrm, R, peaks, nf_gains, noise_level, pe_gains, t_audio, t_audio_q ); +#endif + *num_bits -= sum; + } + else + { + shape_bits = pvq_core_enc( hBstr, t_audio, t_audio_q, sum, nb_sfm, sfm_start, sfm_end, sfmsize, Rsubband, R, npulses, maxpulse, HQ_CORE ); + *num_bits += ( sum - shape_bits ); + } + + if ( hqswb_clas == HQ_HVQ || hqswb_clas == HQ_HARMONIC ) + { + subband_search_offset = subband_search_offsets_13p2kbps_Har; + wBands[0] = SWB_SB_BW_LEN0_16KBPS_HAR; + wBands[1] = SWB_SB_BW_LEN1_16KBPS_HAR; + + har_est( t_audio_q, 300, &har_freq_est1, &har_freq_est2, &flag_dis, &hHQ_core->prev_frm_hfe2, subband_search_offset, wBands, &hHQ_core->prev_stab_hfe2 ); + + hHQ_core->prev_frm_hfe2 = har_freq_est2; + } + + /* reset LR-HQ memories */ + hHQ_core->prev_frm_hfe2 = 0; /*reset*/ + hHQ_core->prev_stab_hfe2 = 0; + + nf_idx = 0; + if ( !is_transient && hqswb_clas != HQ_HVQ && !( length == L_FRAME16k && st->core_brate <= HQ_32k ) ) + { + if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) + { + nf_idx = noise_adjust( t_audio, R, sfm_start, sfm_end, max( core_sfm, num_env_bands - 1 ) ); + push_indice( hBstr, IND_NF_IDX, nf_idx, 2 ); + } + else + { + nf_idx = noise_adjust( t_audio, R, sfm_start, sfm_end, core_sfm ); + push_indice( hBstr, IND_NF_IDX, nf_idx, 2 ); + } + } + + + /* updates */ + hHQ_core->prev_hqswb_clas = hqswb_clas; + + /* Prepare synthesis for LB generation in case of switch to ACELP */ + if ( hqswb_clas != HQ_HVQ ) + { + apply_envelope_enc( t_audio_q, ynrm, num_sfm, sfm_start, sfm_end ); + } + + if ( is_transient ) + { + de_interleave_spectrum( t_audio_q, length ); + } + + mvr2r( t_audio_q, t_audio, length ); + + + return; +} diff --git a/lib_enc/hq_lr_enc.c b/lib_enc/hq_lr_enc.c new file mode 100644 index 0000000000..184dc79e6b --- /dev/null +++ b/lib_enc/hq_lr_enc.c @@ -0,0 +1,1779 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "stl.h" +#include "basop_util.h" +#include "wmops.h" + + +/*--------------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------------*/ + +static int16_t small_symbol_enc( BSTR_ENC_HANDLE hBstr, const int16_t *qbidx, const int16_t bands, int16_t *hLCmode, const int16_t flag_pack, const int16_t is_transient ); + +static int16_t small_symbol_enc_tran( BSTR_ENC_HANDLE hBstr, const int16_t *qbidx, const int16_t bands, int16_t *hLCmode, const int16_t flag_pack, const int16_t is_transient ); + +static float band_energy_quant( BSTR_ENC_HANDLE hBstr, const float *t_audio, const int16_t band_start[], const int16_t band_end[], float band_energy[], const int16_t bands, const Word32 L_qint, const Word16 eref_fx, const int16_t is_transient ); + +static int16_t p2a_threshold_quant( BSTR_ENC_HANDLE hBstr, const float *t_audio, const int16_t band_start[], const int16_t band_end[], const int16_t band_width[], const int16_t bands, const int16_t p2a_bands, const float p2a_th, int16_t *p2a_flags ); + +static void mdct_spectrum_fine_gain_enc( BSTR_ENC_HANDLE hBstr, const float ybuf[], float y2[], const int16_t band_start[], const int16_t band_end[], const int16_t k_sort[], const int16_t bands, const Word32 L_qint, const int16_t Ngq, const int16_t gqlevs, const int16_t gqbits ); + + +/*--------------------------------------------------------------------------* + * spt_shorten_domain_set() + * + * Track the spectral peak based on peak -avg analysis + *--------------------------------------------------------------------------*/ + +static void spt_shorten_domain_set( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + HQ_ENC_HANDLE hHQ_core, /* i/o: HQ core encoder handle */ + const float t_audio[], /* i : input spectrum */ + const int16_t p2a_flags[], /* i : p2a anlysis information */ + const int16_t new_band_start[], /* i : new band start position */ + const int16_t new_band_end[], /* i : new band end position */ + const int16_t new_band_width[], /* i : new subband band width */ + const int16_t bands, /* i : total number of subbands */ + int16_t band_start[], /* i/o: band start position */ + int16_t band_end[], /* i/o: band end position */ + int16_t band_width[], /* i : sub band band width */ + int16_t *bit_budget /* i/o: bit budget */ +) +{ + int16_t i, j, k; + int16_t kpos; + float max_y2; + int16_t max_y2_pos; + int16_t spt_shorten_flag[SPT_SHORTEN_SBNUM]; + + kpos = 0; + j = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + if ( p2a_flags[k] == 1 ) + { + spt_shorten_flag[j] = 0; + if ( hHQ_core->prev_SWB_peak_pos[kpos] != 0 ) + { + max_y2 = 0.0f; + max_y2_pos = 0; + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + if ( max_y2 < fabs( t_audio[i] ) ) + { + max_y2 = (float) fabs( t_audio[i] ); + max_y2_pos = i; + } + } + if ( max_y2_pos >= new_band_start[j] && max_y2_pos <= new_band_end[j] ) + { + band_start[k] = new_band_start[j]; + band_end[k] = new_band_end[j]; + band_width[k] = new_band_width[j]; + spt_shorten_flag[j] = 1; + } + } + push_indice( hBstr, IND_HQ2_SPT_SHORTEN, spt_shorten_flag[j], 1 ); + *bit_budget -= 1; + } + + kpos++; + j++; + } + + return; +} + +/*--------------------------------------------------------------------------* + * hq_lr_enc() + * + * HQ low rate encoding routine + *--------------------------------------------------------------------------*/ + +void hq_lr_enc( + Encoder_State *st, /* i/o: encoder state structure */ + float t_audio[], /* i/o: transform-domain coefs. */ + const int16_t inner_frame, /* i : inner frame length */ + int16_t *num_bits, /* i/o: number of available bits */ + const int16_t is_transient /* i : transient flag */ +) +{ + int16_t i, k1, k2; + int16_t bit_budget, pbits; + int16_t bands, length, ni_seed, gqlevs, gqbits, Ngq, p2a_bands; + int16_t p2a_flags[BANDS_MAX]; + int16_t band_start[BANDS_MAX], band_end[BANDS_MAX], band_width[BANDS_MAX]; + float band_energy[BANDS_MAX], Rk[BANDS_MAX]; + Word32 Rk_fx[BANDS_MAX]; + float ebits; + float p2a_th, ni_coef, ni_pd_th, pd_thresh, ld_slope; + Word32 L_qint; /* Q29 */ + Word16 eref_fx; /* Q10 */ + Word16 bit_alloc_weight_fx; /* Q13 */ + int16_t k_sort[BANDS_MAX]; + int16_t npulses[BANDS_MAX]; + int32_t inp_vector[L_FRAME48k]; + float y2[L_FRAME48k]; + float y2_ni[L_FRAME48k]; + int16_t hqswb_clas; + int16_t lowlength; + int16_t highlength; + float m[L_FRAME32k]; + int16_t har_bands; + float Ep[BANDS_MAX], enerH = 0.0f, enerL = 0.0f; + int16_t lowband, highband, bw_low = 0, bw_high = 20; + float band_energy_tmp[BANDS_MAX]; + int32_t bwe_br; + int16_t trans_bit, p2a_flags_tmp[BANDS_MAX]; + int16_t adjustFlag = 0; + int16_t prev_SWB_peak_pos_tmp[SPT_SHORTEN_SBNUM]; + int16_t k, j; + int16_t flag_spt; + int16_t org_band_start[SPT_SHORTEN_SBNUM]; + int16_t org_band_end[SPT_SHORTEN_SBNUM]; + int16_t org_band_width[SPT_SHORTEN_SBNUM]; + int16_t new_band_start[SPT_SHORTEN_SBNUM]; + int16_t new_band_end[SPT_SHORTEN_SBNUM]; + int16_t new_band_width[SPT_SHORTEN_SBNUM]; + int16_t bws_cnt = 0; + Word32 L_tmp, L_tmp2, L_tmp3; + Word16 exp, tmp, exp2, tmp1, tmp2, tmp3, alpha_fx, frac1; + Word32 enerH_fx; + Word32 enerL_fx; + Word32 Ep_fx[BANDS_MAX]; + Word32 Ep_avrg_fx, Ep_vari_fx; + Word32 Ep_avrgL_fx; + Word32 Ep_peak_fx; + Word32 Ep_tmp_fx[BANDS_MAX]; + Word16 gama_fx; /*Q15 0.85f; */ + Word16 beta_fx; /*Q14 1.05f; */ + Word32 L_band_energy[BANDS_MAX], L_band_energy_tmp[BANDS_MAX]; + UWord16 lo; + Word16 Q_band_energy; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + BSTR_ENC_HANDLE hBstr = st->hBstr; + HQ_ENC_HANDLE hHQ_core = st->hHQ_core; + + set_f( y2, 0.0f, L_FRAME48k ); + set_l( inp_vector, 0, inner_frame ); + flag_spt = 0; + set_s( prev_SWB_peak_pos_tmp, 0, SPT_SHORTEN_SBNUM ); + + bwe_br = st->core_brate; + hqswb_clas = HQ_NORMAL; + if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + if ( is_transient == 1 ) + { + hqswb_clas = HQ_TRANSIENT; + } + else + { + /* classification of HQ_HARMONIC and HQ_NORMAL frames for SWB BWE */ + hqswb_clas = peak_avrg_ratio( st->total_brate, t_audio, NUMC_N, &hHQ_core->mode_count, &hHQ_core->mode_count1 ); + } + + /* write the classification information into the bitstream */ + push_indice( hBstr, IND_HQ2_SWB_CLAS, hqswb_clas, 2 ); + ( *num_bits ) -= 2; + + if ( hqswb_clas == HQ_NORMAL ) + { + flag_spt = 1; + } + } + else + { + /* write the transient bit into the bitstream */ + push_indice( hBstr, IND_HQ2_SWB_CLAS, is_transient, 1 ); + + /* subtract one bit for the transient flag */ + ( *num_bits )--; + } + + /* Configure encoder for different bandwidths, bitrates, etc. */ + hq2_core_configure( inner_frame, *num_bits, is_transient, &bands, &length, band_width, band_start, band_end, &L_qint, &eref_fx, &bit_alloc_weight_fx, &gqlevs, &Ngq, &p2a_bands, &p2a_th, &pd_thresh, &ld_slope, &ni_coef, &ni_pd_th, bwe_br ); + + highlength = band_end[bands - 1]; + har_bands = bands; + + if ( st->bwidth == SWB && is_transient == 0 && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + /* reserve bits for HQ_NORMAL and HQ_HARMONIC modes */ + if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) + { + ( *num_bits ) -= get_usebit_npswb( hqswb_clas ); + } + } + + if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && st->bwidth == SWB ) + { + if ( hHQ_core->prev_hqswb_clas != HQ_NORMAL ) + { + j = 0; + for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) + { + hHQ_core->prev_SWB_peak_pos[j] = 0; + j++; + } + } + } + + /* Check if input frame is larger than coded bandwidth */ + if ( inner_frame > length && is_transient ) + { + /* If so, collapse transient frame (4 short transforms) to remove uncoded coefficients */ + for ( i = 1; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) + { + k1 = i * length / NUM_TIME_SWITCHING_BLOCKS; + k2 = i * inner_frame / NUM_TIME_SWITCHING_BLOCKS; + + mvr2r( &t_audio[k2], &t_audio[k1], length / NUM_TIME_SWITCHING_BLOCKS ); + } + } + + /* Spectral energy calculation/quantization */ + ebits = band_energy_quant( hBstr, t_audio, band_start, band_end, band_energy, bands, L_qint, eref_fx, is_transient ); + + for ( i = 0; i < bands; i++ ) + { + L_band_energy[i] = (Word32) ( band_energy[i] * pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + /* First pass bit budget for TCQ of spectral band information */ + gqbits = (int16_t) log2_f( (float) gqlevs ); + bit_budget = ( *num_bits ) - (int16_t) ceil( ebits ) - Ngq * gqbits; + + pbits = 0; + if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + if ( hqswb_clas == HQ_HARMONIC ) + { + set_s( p2a_flags, 1, har_bands ); + } + else + { + /* High band tonality detector based on per band peak-to-average ratio */ + pbits = p2a_threshold_quant( hBstr, t_audio, band_start, band_end, band_width, bands, p2a_bands, p2a_th, p2a_flags ); + bit_budget -= pbits; + + if ( hqswb_clas == HQ_NORMAL ) + { + return_bits_normal2( &bit_budget, p2a_flags, bands, bits_lagIndices_modeNormal ); + } + } + } + else + { + /* High band tonality detector based on per band peak-to-average ratio */ + pbits = p2a_threshold_quant( hBstr, t_audio, band_start, band_end, band_width, bands, p2a_bands, p2a_th, p2a_flags ); + bit_budget -= pbits; + } + + if ( flag_spt == 1 ) + { + /* initalize the desired parameters for SPT */ + spt_shorten_domain_band_save( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); + spt_shorten_domain_pre( band_start, band_end, hHQ_core->prev_SWB_peak_pos, bands, bwe_br, new_band_start, new_band_end, new_band_width ); + spt_shorten_domain_set( hBstr, hHQ_core, t_audio, p2a_flags, new_band_start, new_band_end, new_band_width, bands, band_start, band_end, band_width, &bit_budget ); + } + +#define WMC_TOOL_MAN + /* Estimate number of bits per band */ + Q_band_energy = SWB_BWE_LR_Qbe; + FOR( i = 0; i < bands; i++ ) + { + L_tmp = L_shl( L_band_energy[i], sub( 16, Q_band_energy ) ); /*Q16 */ + + frac1 = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ + L_tmp = Pow2( 30, frac1 ); + exp = sub( exp, 30 ); + Ep_fx[i] = L_shl( L_tmp, sub( exp, 6 ) ); /* Q -6 */ + Ep[i] = (float) ( Ep_fx[i] / pow( 2.0, -6 ) ); + } + + FOR( i = 0; i < bands; i++ ) + { + L_tmp2 = Ep_fx[i]; + L_tmp = L_max( 1, L_tmp2 ); + exp = norm_l( L_tmp ); + tmp = extract_h( L_shl( L_tmp, exp ) ); + + L_tmp3 = (Word32) band_width[i]; + exp2 = norm_l( L_tmp3 ); + tmp2 = extract_h( L_shl( L_tmp3, exp2 ) ); + + exp2 = sub( exp, exp2 ); /* Denormalize and substract */ + + tmp3 = sub( tmp2, tmp ); + IF( tmp3 > 0 ) + { + tmp2 = shr( tmp2, 1 ); + } + IF( tmp3 > 0 ) + { + exp2 = add( exp2, 1 ); + } + div_s( &tmp, tmp2, tmp ); + L_tmp = L_deposit_h( tmp ); + L_tmp = Isqrt_lc1( L_tmp, &exp2 ); + move32(); /*Q(31-exp2) */ + Ep_tmp_fx[i] = L_shr( L_tmp, sub( 15, exp2 ) ); /*Q13 */ + } +#undef WMC_TOOL_MAN + + if ( is_transient == 0 && inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) + { +#define WMC_TOOL_MAN + lowband = 6; + move16(); + trans_bit = 2; + move16(); + bit_budget = sub( bit_budget, trans_bit ); + gama_fx = 27852; /*Q15 0.85f; */ + beta_fx = 17203; + move16(); /*Q14 1.05f; */ + set_s( &p2a_flags_tmp[bands - trans_bit], 0, 2 ); + + IF( st->core_brate == ACELP_13k20 ) + { + beta_fx = 13107; + move16(); /*14 1.25f; */ + gama_fx = 31130; + move16(); /*0.95f; */ + mvs2s( &p2a_flags[sub( bands, trans_bit )], &p2a_flags_tmp[sub( bands, trans_bit )], trans_bit ); + } + + /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ + Ep_vari_fx = 0; + move32(); + Ep_avrg_fx = 0; + move32(); + Ep_avrgL_fx = 0; + move32(); + Ep_peak_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 ) + { + Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ + } + ELSE + { +#ifdef BASOP_NOGLOB + Ep_avrgL_fx = L_add_o( Ep_avrgL_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#else + Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ +#endif + IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) + { + Ep_peak_fx = Ep_tmp_fx[i]; + move32(); /*Q15 */ + } + } + } + /* modify the last p2a_bands subbands band_energies */ + k = bands; + mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ + Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); + Mpy_32_16_ss( Ep_peak_fx, shl( sub( bands, lowband ), 9 ), &L_tmp2, &lo ); + Mpy_32_16_ss( Ep_avrg_fx, 1126, &L_tmp3, &lo ); + + IF( ( ( L_sub( L_tmp, L_shr( Ep_avrgL_fx, 1 ) ) < 0 && st->core_brate == ACELP_13k20 ) || st->core_brate < ACELP_13k20 ) && + L_sub( L_tmp2, L_tmp3 ) < 0 && L_sub( L_tmp2, L_shr( Ep_avrg_fx, 7 ) ) > 0 ) + { + FOR( i = lowband; i < bands; i++ ) + { + Mpy_32_16_ss( Ep_avrg_fx, 24576, &L_tmp, &lo ); + IF( L_sub( L_shr( Ep_tmp_fx[i], 1 ), L_tmp ) < 0 ) + { + Mpy_32_16_ss( Ep_peak_fx, sub( bands, lowband ), &L_tmp, &lo ); + tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +4 = 15) */ + L_tmp2 = L_add( L_tmp, 13107 ); /*15 */ + tmp2 = extract_l( L_min( L_max( L_tmp2, 16384 ), gama_fx ) ); /*15 = 15 */ + Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_band_energy_tmp[i], &lo ); + } + } + } + ELSE + { + j = 0; + FOR( i = sub( bands, trans_bit ); i < bands; i++ ) + { + alpha_fx = 16384; + move16(); /*Q14 */ + IF( sub( p2a_flags_tmp[i], 1 ) == 0 ) + { + Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); + tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_vari_fx, 3277, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 12, exp ) ); /*Q(13+exp-15 +12-exp +4 = 14) */ + + tmp2 = extract_h( Ep_avrg_fx ); /*Q13-16=-3 */ + IF( tmp2 != 0 ) + { + exp = norm_s( tmp2 ); + tmp2 = shl( tmp2, exp ); /*Q(exp) */ + div_s( &tmp2, 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp2 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_vari_fx, 6554, &L_tmp2, &lo ); + Mpy_32_16_ss( L_tmp2, tmp2, &L_tmp2, &lo ); + L_tmp2 = L_shl( L_tmp2, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +3 = 14) */ + L_tmp = L_min( L_tmp, L_tmp2 ); /*14 */ + tmp = extract_l( L_min( L_tmp, 13107 ) ); /*14 */ + alpha_fx = add( 16384, tmp ); + } + IF( sub( hHQ_core->last_bitalloc_max_band[j++], 1 ) == 0 ) + { + Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); + tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-2 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); +#ifndef BASOP_NOGLOB + L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q(13+exp-15 +14-exp+2 = 14) */ + L_tmp = L_max( L_tmp, 16384 ); /*14 */ + tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ + alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ +#else /* BASOP_NOGLOB */ + L_tmp = L_shl_o( L_tmp, sub( 14, exp ), &Overflow ); /*Q(13+exp-15 +14-exp+2 = 14) */ + L_tmp = L_max( L_tmp, 16384 ); /*14 */ + tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ + alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ +#endif /* BASOP_NOGLOB */ + } + ELSE + { + tmp2 = extract_h( Ep_avrg_fx ); /*13 -16 =-3 */ + IF( tmp2 != 0 ) + { + exp = norm_s( tmp2 ); + tmp2 = shl( tmp2, exp ); /*Q(exp) */ + div_s( &tmp2, 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp2 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_tmp_fx[i], tmp2, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 19, exp ) ); /*Q(13+exp-15 +19-exp +3 = 20) */ + Mpy_32_16_ss( L_tmp, shl( sub( bands, lowband ), 9 ), &L_tmp, &lo ); + L_tmp = L_max( L_tmp, 13926 ); /*14 */ + tmp2 = extract_l( L_min( L_tmp, 16384 ) ); /*14 */ + alpha_fx = shl( mult( alpha_fx, tmp2 ), 1 ); /*14+14-15+1 =14 */ + } + Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q(Q_band_energy+14-15 +1= Q_band_energy) */ + } + } + lowband = 3; + move16(); + Ep_avrg_fx = 0; + move32(); + Ep_avrgL_fx = 0; + move32(); + Ep_peak_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 ) + { +#ifdef BASOP_NOGLOB + Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#else + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ +#endif + } + ELSE + { + Ep_avrgL_fx = L_add( Ep_avrgL_fx, L_shr( Ep_tmp_fx[i], 1 ) ); /*Q12 */ + IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) + { + Ep_peak_fx = Ep_tmp_fx[i]; + move32(); /*Q13 */ + } + } + } + Mpy_32_16_ss( Ep_peak_fx, 28262, &L_tmp, &lo ); + Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp2, &lo ); + IF( L_sub( L_shr( Ep_avrg_fx, 2 ), L_tmp2 ) > 0 && L_sub( L_shr( Ep_avrg_fx, 4 ), L_tmp2 ) < 0 && L_sub( L_tmp, Ep_avrgL_fx ) > 0 ) + { + adjustFlag = 1; + move16(); + FOR( i = 0; i < lowband; i++ ) + { + tmp = extract_h( Ep_avrgL_fx ); /*Q-4 */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + /*when the divisor is zero, happens rarely*/ + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, 18842, &L_tmp, &lo ); +#ifndef BASOP_NOGLOB + L_tmp = L_shl( L_tmp, sub( 27, exp ) ); /*Q14 0.5 */ + tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ +#else /* BASOP_NOGLOB */ + L_tmp = L_shl_o( L_tmp, sub( 27, exp ), &Overflow ); /*Q14 0.5 */ + tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ +#endif /* BASOP_NOGLOB */ + Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_tmp, &lo ); + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ + } + } +#undef WMC_TOOL_MAN + + for ( i = 0; i < bands; i++ ) + { + band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, *num_bits, hqswb_clas, st->bwidth, is_transient ); + + /* encode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ + for ( i = 0; i < 2; i++ ) + { + push_indice( hBstr, IND_HQ2_LAST_BA_MAX_BAND, hHQ_core->last_bitalloc_max_band[i], 1 ); + } + } + else if ( is_transient == 0 && inner_frame == L_FRAME16k ) + { +#define WMC_TOOL_MAN + bit_budget = sub( bit_budget, 2 ); /* bits in high bands to indicate the last 2 subbands is allocated bits or not */ + FOR( i = 0; i < bands; i++ ) + { +#ifndef BASOP_NOGLOB + Ep_tmp_fx[i] = L_shl( Ep_tmp_fx[i], 2 ); +#else /* BASOP_NOGLOB */ + Ep_tmp_fx[i] = L_shl_o( Ep_tmp_fx[i], 2, &Overflow ); +#endif /* BASOP_NOGLOB */ + } + IF( st->core_brate == ACELP_13k20 ) + { + lowband = 8; + move16(); + highband = 15; + move16(); + bw_low = sub( band_start[highband], band_start[lowband] ); + bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); + } + ELSE + { + lowband = 8; + move16(); + highband = 16; + move16(); + bw_low = sub( band_start[highband], band_start[lowband] ); + bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); + } + /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ + enerL_fx = 0; + move32(); + enerH_fx = 0; + move32(); + Ep_vari_fx = 0; + move32(); + Ep_avrg_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 && add( sub( i, bands ), p2a_bands ) < 0 ) + { + Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ +#ifndef BASOP_NOGLOB + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ +#else /* BASOP_NOGLOB */ + Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#endif /* BASOP_NOGLOB */ + } + + IF( sub( i, highband ) >= 0 ) + { + enerH_fx = L_add( enerH_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ + } + ELSE IF( sub( i, lowband ) >= 0 ) + { + enerL_fx = L_add( enerL_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ + } + } + enerL = (float) ( enerL_fx / pow( 2.0, -4 ) ); + enerH = (float) ( enerH_fx / pow( 2.0, -4 ) ); + /* modify the last p2a_bands subbands band_energies */ + k = bands; + mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ + + L_tmp = L_max( enerH_fx, enerL_fx ); + tmp = s_max( bw_low, bw_high ); + i = norm_l( L_tmp ); + j = norm_s( tmp ); + Mpy_32_16_ss( L_shl( enerH_fx, i ), shl( bw_low, j ), &L_tmp, &lo ); + Mpy_32_16_ss( L_shl( enerL_fx, i ), shl( bw_high, j ), &L_tmp2, &lo ); + L_tmp2 = L_sub( L_tmp, L_tmp2 ); + + FOR( i = sub( bands, p2a_bands ); i < bands; i++ ) + { + IF( sub( p2a_flags[i], 1 ) == 0 || L_tmp2 > 0 ) + { + tmp = sub( bands, p2a_bands ); + tmp = sub( tmp, lowband ); /*Q0 */ + +#ifndef BASOP_NOGLOB + tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ +#else + tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ +#endif + IF( tmp1 != 0 ) + { + exp = norm_s( tmp1 ); + tmp1 = shl( tmp1, exp ); /*Q(exp) */ + div_s( &tmp1, 16384, tmp1 ); /*Q(15+14-exp = 29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp1 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, 16384, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 32, exp ) ); /*Q15 */ + tmp = extract_l( L_min( L_tmp, 6554 ) ); /*Q15 */ + Mpy_32_16_ss( Ep_vari_fx, tmp1, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 15, exp ) ); /*Q15 */ + tmp = extract_l( L_shr( L_min( L_tmp, 13107 ), 1 ) ); /*Q14 */ + alpha_fx = add( tmp, 16384 ); /*Q14 */ + } + ELSE + { + alpha_fx = 16384; + move16(); /*Q14 */ + } + + IF( add( sub( i, bands ), p2a_bands ) > 0 ) + { + tmp = sub( bands, p2a_bands ); + IF( sub( hHQ_core->last_bitalloc_max_band[sub( i, add( tmp, 1 ) )], 1 ) == 0 ) + { + tmp = sub( tmp, lowband ); + Mpy_32_16_ss( Ep_tmp_fx[i], tmp, &L_tmp, &lo ); +#ifndef BASOP_NOGLOB + tmp = extract_h( L_shl( L_tmp, 16 ) ); /*Q0 */ +#else /* BASOP_NOGLOB */ + tmp = extract_h( L_shl_o( L_tmp, 16, &Overflow ) ); /*Q0 */ +#endif /* BASOP_NOGLOB */ + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q14 */ + tmp = extract_l( L_min( L_max( L_tmp, 16384 ), 20480 ) ); /*Q14 */ + L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ + alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14*/ + } + ELSE + { + tmp = sub( tmp, lowband ); + +#ifndef BASOP_NOGLOB + tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ +#else + tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ +#endif + IF( tmp1 != 0 ) + { + exp = norm_s( tmp1 ); + tmp1 = shl( tmp1, exp ); /*Q(exp) */ + div_s( &tmp1, 16384, tmp1 ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp1 = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 29, exp ) ); /*Q14 */ + tmp = extract_l( L_min( L_max( L_tmp, 13926 ), 16384 ) ); /*Q14 */ + L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ + alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14 */ + } + } + Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q Q_band_energy */ + } + lowband = 6; + move16(); + Ep_avrg_fx = 0; + move32(); + Ep_avrgL_fx = 0; + move32(); + Ep_peak_fx = 0; + move32(); + FOR( i = 0; i < bands; i++ ) + { + IF( sub( i, lowband ) >= 0 ) + { +#ifndef BASOP_NOGLOB + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ +#else /* BASOP_NOGLOB */ + Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#endif /* BASOP_NOGLOB */ + } + ELSE + { +#ifndef BASOP_NOGLOB + Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ +#else /* BASOP_NOGLOB */ + Ep_avrgL_fx = L_add_o( Ep_avrgL_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ +#endif /* BASOP_NOGLOB */ + IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) + { + Ep_peak_fx = Ep_tmp_fx[i]; + move32(); /*Q15 */ + } + } + } + + Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); + Mpy_32_16_ss( Ep_peak_fx, 19661, &L_tmp2, &lo ); + Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp3, &lo ); + + IF( ( L_sub( L_shr( Ep_avrgL_fx, 1 ), Ep_avrg_fx ) > 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 && L_sub( L_shr( Ep_avrgL_fx, 1 ), L_tmp2 ) < 0 ) || + ( L_sub( L_shr( Ep_avrg_fx, 1 ), Ep_avrgL_fx ) > 0 && L_sub( L_shr( Ep_avrg_fx, 3 ), L_tmp3 ) < 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 ) ) + { + adjustFlag = 1; + move16(); + FOR( i = 0; i < lowband; i++ ) + { +#ifndef BASOP_NOGLOB + tmp = extract_h( L_shl( Ep_avrgL_fx, 1 ) ); /*Q0 */ +#else + tmp = extract_h( L_shl_o( Ep_avrgL_fx, 1, &Overflow ) ); /*Q0 */ +#endif + IF( tmp != 0 ) + { + exp = norm_s( tmp ); + tmp = shl( tmp, exp ); /*Q(exp) */ + div_s( &tmp, 16384, tmp ); /*Q(15+14-exp=29-exp) */ + exp = sub( 29, exp ); + } + ELSE + { + tmp = 0x7fff; + move16(); + exp = 0; + move16(); + } + Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); + Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); + L_tmp = L_shl( L_tmp, sub( 28, exp ) ); /*Q14 0.5 */ + tmp = extract_l( L_min( L_tmp, 19661 ) ); /*Q14 */ + Mpy_32_16_ss( L_band_energy_tmp[i], tmp, &L_tmp, &lo ); + L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ + } + } +#undef WMC_TOOL_MAN + + for ( i = 0; i < bands; i++ ) + { + band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, *num_bits, hqswb_clas, st->bwidth, is_transient ); + + /* encode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ + for ( i = 0; i < 2; i++ ) + { + push_indice( hBstr, IND_HQ2_LAST_BA_MAX_BAND, hHQ_core->last_bitalloc_max_band[i], 1 ); + } + } + else if ( st->bwidth == SWB && hqswb_clas == HQ_HARMONIC && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + /* bit allocation for harmonic mode */ + hq2_bit_alloc_har( band_energy, bit_budget, bands, Rk_fx, p2a_bands, bwe_br, p2a_flags, band_width ); + } + else + { + + /* estimate number of bits per band */ + hq2_bit_alloc( band_energy, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, *num_bits, hqswb_clas, st->bwidth, is_transient ); + } + +#ifdef DEBUGGING + tcq_core_LR_enc( hBstr, st->idchan, inp_vector, t_audio, y2, bit_budget, bands, band_start, band_end, band_width, Rk_fx, npulses, k_sort, p2a_flags, p2a_bands, hHQ_core->last_bitalloc_max_band, inner_frame, adjustFlag, is_transient ); +#else + tcq_core_LR_enc( hBstr, inp_vector, t_audio, y2, bit_budget, bands, band_start, band_end, band_width, Rk_fx, npulses, k_sort, p2a_flags, p2a_bands, hHQ_core->last_bitalloc_max_band, inner_frame, adjustFlag, is_transient ); +#endif + + if ( ( inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) || inner_frame == L_FRAME16k ) + { + j = 0; + for ( i = 2; i > 0; i-- ) + { + if ( npulses[bands - i] > 0 ) + { + hHQ_core->last_bitalloc_max_band[j] = 1; + } + else + { + hHQ_core->last_bitalloc_max_band[j] = 0; + } + j++; + } + } + + /* Prepare floating Rk for next modules */ + for ( k = 0; k < bands; k++ ) + { + Rk[k] = WORD322FL_SCALE( Rk_fx[k], SWB_BWE_LR_QRk - 1 ); + } + + /* Denormalize the coded MDCT spectrum */ + mdct_spectrum_denorm( inp_vector, y2, band_start, band_end, band_width, band_energy, npulses, bands, ld_slope, pd_thresh ); + + /* Apply fine gain quantization to denormalized coded spectrum */ + mdct_spectrum_fine_gain_enc( hBstr, t_audio, y2, band_start, band_end, k_sort, bands, L_qint, Ngq, gqlevs, gqbits ); + + /* reStore the subband information*/ + if ( flag_spt == 1 ) + { + spt_shorten_domain_band_restore( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); + } + + /* Inject noise into components having relatively low pulse energy per band */ + ni_seed = npulses[0] + npulses[1] + npulses[2] + npulses[3]; + + for ( i = 0; i < band_end[bands - 1] + 1; i++ ) + y2_ni[i] = y2[i]; + hq2_noise_inject( y2_ni, band_start, band_end, band_width, Ep, Rk, npulses, ni_seed, bands, 0, bw_low, bw_high, enerL, enerH, hHQ_core->last_ni_gain, hHQ_core->last_env, &hHQ_core->last_max_pos_pulse, p2a_flags, p2a_bands, hqswb_clas, st->bwidth, bwe_br ); + + if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) + { + if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) + { + preset_hq2_swb( hqswb_clas, band_end, &har_bands, p2a_bands, length, bands, &lowlength, &highlength, m ); + + swb_bwe_enc_lr( st, y2, t_audio, m, bwe_br, bands, band_start, band_end, band_energy, p2a_flags, hqswb_clas, lowlength, highlength, hHQ_core->prev_frm_index, har_bands, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, band_width, y2_ni, &ni_seed ); + + post_hq2_swb( m, lowlength, highlength, hqswb_clas, har_bands, bands, p2a_flags, band_start, band_end, y2, npulses ); + + if ( hqswb_clas == HQ_NORMAL ) + { + spt_swb_peakpos_tmp_save( y2, bands, band_start, band_end, prev_SWB_peak_pos_tmp ); + for ( k = 0; k < SPT_SHORTEN_SBNUM; k++ ) + { + if ( p2a_flags[bands - SPT_SHORTEN_SBNUM + k] == 0 || npulses[bands - SPT_SHORTEN_SBNUM + k] == 0 ) + { + prev_SWB_peak_pos_tmp[k] = 0; + } + } + } + + mvr2r( y2_ni, y2, lowlength ); + } + else + { + mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* HQ_TRANSIENT */ + } + } + else + { + mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* NB, WB */ + } + + + updat_prev_frm( y2, t_audio, bwe_br, length, inner_frame, bands, st->bwidth, is_transient, hqswb_clas, &hHQ_core->prev_hqswb_clas, hHQ_core->prev_SWB_peak_pos, prev_SWB_peak_pos_tmp, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, bws_cnt ); + + if ( st->bwidth != SWB ) + { + /* reset HQ classifier memories */ + hHQ_core->mode_count = 0; + hHQ_core->mode_count1 = 0; + } + if ( hqswb_clas != HQ_HARMONIC && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && st->bwidth == SWB ) + { + hHQ_core->prev_frm_index[0] = -1; + hHQ_core->prev_frm_index[1] = -1; + } + /* update number of unused bits */ + *num_bits = 0; + + hHQ_core->hvq_hangover = 0; + + return; +} + +/*--------------------------------------------------------------------------* + * small_symbol_enc_tran() + * + * Huffman encoding of differential energies, estimating or packing bits + * if flag_pack = 0, LC mode info. is output else LC mode info. is input + * if flag_pack = 0, estimatng else packing bits + *--------------------------------------------------------------------------*/ + +/*! r: bits */ +static int16_t small_symbol_enc_tran( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t *qbidx, /* i : input of dequantized differential energy */ + const int16_t BANDS, /* i : number of bands */ + int16_t *hLCmode, /* i/o: LC mode info */ + const int16_t flag_pack, /* i : indicator of packing or estimating bits */ + const int16_t is_transient ) +{ + int16_t i, bits; + int16_t difidx[BANDS_MAX]; + + for ( i = 0; i < BANDS; i++ ) + { + difidx[i] = qbidx[i] + LRMDCT_BE_OFFSET; + } + + for ( i = 0; i < BANDS; ++i ) + { + if ( difidx[i] > LRMDCT_BE_LIMIT || difidx[i] < 0 ) + { + /* Huffman cannot encode this vector */ + return -1; + } + } + + /* Preparing lossless coding input */ + if ( flag_pack == 0 ) + { + /* estimating # of bits */ + bits = encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE_TRAN, is_transient ); + bits += BITS_DE_FCOMP; /* xx bits for diff. energies + BITS_DE_FCOMP bits for first energies */ + } + else + { + bits = 0; + encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE_TRAN, is_transient ); + } + + return bits + BITS_DE_HMODE; /* xx bits for diff. energies + 1 bit for LC coding mode */ +} + + +/*--------------------------------------------------------------------------* + * small_symbol_enc() + * + * Huffman encoding of differential energies, estimating or packing bits + * if flag_pack = 0, LC mode info. is output else LC mode info. is input + * if flag_pack = 0, estimatng else packing bits + *--------------------------------------------------------------------------*/ + +/*! r: bits */ +static int16_t small_symbol_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t *qbidx, /* i : input of dequantized differential energy */ + const int16_t BANDS, /* i : number of bands */ + int16_t *hLCmode, /* i/o: LC mode info */ + const int16_t flag_pack, /* i : indicator of packing or estimating bits */ + const int16_t is_transient ) +{ + int16_t i, bits; + int16_t difidx[BANDS_MAX], LSB[BANDS_MAX]; + + /* Preparing lossless coding input */ + difidx[0] = qbidx[0] + DE_OFFSET0; + + for ( i = 1; i < BANDS; ++i ) + { + difidx[i] = qbidx[i] + DE_OFFSET1; + } + + for ( i = 0; i < BANDS; ++i ) + { + if ( difidx[i] >= DE_LIMIT || difidx[i] < 0 ) + { + /* Huffman cannot encode this vector */ + return -1; + } + } + + /* splitting MSB and LSB */ + for ( i = 0; i < BANDS; ++i ) + { + LSB[i] = difidx[i] & 1; + difidx[i] >>= 1; + } + + /* Preparing lossless coding input */ + if ( flag_pack == 0 ) + { + /* estimating # of bits */ + /* Encoding MSB bits */ + bits = encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE, is_transient ); + bits += BITS_DE_FCOMP; /* xx bits for diff. energies + BITS_DE_FCOMP bits for first energies */ + + /* Encoding LSB bit packing */ + bits += BANDS; + } + else + { + /* Encoding MSB bits */ + bits = 0; + encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE, is_transient ); + + /* Encoding LSB bit packing */ + for ( i = 0; i < BANDS; ++i ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, LSB[i], BITS_DE_LSB ); + } + } + + return bits + BITS_DE_HMODE; /* xx bits for diff. energies + 1 bit for LC coding mode */ +} + + +/*--------------------------------------------------------------------------* + * large_symbol_enc() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: bits */ +static int16_t large_symbol_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *qbidx, /* i : input of dequantized differential energy */ + const int16_t BANDS, /* i : number of bands */ + int16_t *hLCmode0, /* i/o: LC mode info */ + const int16_t flag_pack /* i : indicator of packing or estimating bits */ +) +{ + int16_t i, bits; + int16_t LSB1[BANDS_MAX]; + int16_t min_q = 513, max_q = -1, offset0; + int16_t min_bits, min_bits_pos; + int16_t tdifidx0[BANDS_MAX], tdifidx1[BANDS_MAX]; + int16_t basic_shift; + int16_t bitsmode0, bitsmode1; + int16_t lsbdepth1; + int16_t cnt_outlyer, pos_outlyer, cnt_outlyer0; + + cnt_outlyer0 = 0; + cnt_outlyer = 0; + bitsmode0 = 0; + bitsmode1 = 0; + pos_outlyer = 0; + lsbdepth1 = 0; + + if ( flag_pack == 0 || ( flag_pack == 1 && *hLCmode0 == 0 ) ) + { + if ( qbidx[0] > ABS_ENG_OFFSET - 1 || qbidx[0] < -ABS_ENG_OFFSET ) + { + cnt_outlyer0 = 2; + } + else if ( qbidx[0] > 3 || qbidx[0] < -4 ) + { + cnt_outlyer0 = 1; + } + else + { + cnt_outlyer0 = 0; + } + + cnt_outlyer = 0; + pos_outlyer = -1; + for ( i = 1; i < BANDS; ++i ) + { + if ( qbidx[i] > 3 || qbidx[i] < -4 ) + { + cnt_outlyer++; + pos_outlyer = i; + } + + if ( qbidx[i] > ABS_ENG_OFFSET - 1 || qbidx[i] < -ABS_ENG_OFFSET ) + { + cnt_outlyer++; + } + } + + if ( cnt_outlyer0 == 0 && cnt_outlyer <= 1 ) + { + bitsmode0 = BITS_DE_8SMODE + BITS_DE_8SMODE_N0 + BITS_DE_8SMODE_N1; + if ( cnt_outlyer == 1 ) + { + /* 01 */ + bitsmode0 += BITS_DE_8SPOS + BITS_ABS_ENG; + } + + for ( i = 0; i < pos_outlyer; ++i ) + { + tdifidx0[i] = qbidx[i]; + bitsmode0 += hessize[tdifidx0[i] + 4]; + } + + for ( i = pos_outlyer + 1; i < BANDS; ++i ) + { + tdifidx0[i] = qbidx[i]; + bitsmode0 += hessize[tdifidx0[i] + 4]; + } + } + else if ( cnt_outlyer0 == 1 && cnt_outlyer <= 1 ) + { + bitsmode0 = BITS_DE_8SMODE + BITS_DE_8SMODE_N0 + BITS_DE_8SMODE_N1; + tdifidx0[0] = qbidx[0]; + bitsmode0 += BITS_ABS_ENG; + if ( cnt_outlyer == 1 ) + { + /* 11 */ + bitsmode0 += BITS_DE_8SPOS + BITS_ABS_ENG; + } + else + { + pos_outlyer = 0; + } + + for ( i = 1; i < pos_outlyer; ++i ) + { + tdifidx0[i] = qbidx[i]; + bitsmode0 += hessize[tdifidx0[i] + 4]; + } + + for ( i = pos_outlyer + 1; i < BANDS; ++i ) + { + tdifidx0[i] = qbidx[i]; + bitsmode0 += hessize[tdifidx0[i] + 4]; + } + } + else + { + bitsmode0 = 20000; + } + } + + if ( flag_pack == 0 || ( flag_pack == 1 && *hLCmode0 == 1 ) ) + { + /* components 0 range : -256~255 */ + max_q = MINIMUM_ENERGY_LOWBRATE; + min_q = MAXIMUM_ENERGY_LOWBRATE; + for ( i = 0; i < BANDS; ++i ) + { + if ( qbidx[i] > max_q ) + { + max_q = qbidx[i]; + } + + if ( qbidx[i] < min_q ) + { + min_q = qbidx[i]; + } + } + + /* Counting bits for transmitting all components using same method */ + for ( i = 0;; ++i ) + { + if ( max_q <= ( ( 2 << ( i + 1 ) ) - 1 ) && min_q >= -( 2 << ( i + 1 ) ) ) + { + break; + } + } + basic_shift = i; + + min_bits = 1000; + min_bits_pos = basic_shift; + for ( offset0 = basic_shift; offset0 < basic_shift + 3; offset0++ ) + { + max_q = MINIMUM_ENERGY_LOWBRATE; + min_q = MAXIMUM_ENERGY_LOWBRATE; + + bitsmode1 = BITS_DE_8SMODE + BITS_MAX_DEPTH; + for ( i = 0; i < BANDS; ++i ) + { + bitsmode1 += ( hessize[( qbidx[i] >> offset0 ) + 4] + ( offset0 ) ); + } + + if ( min_bits > bitsmode1 ) + { + min_bits_pos = offset0; + min_bits = bitsmode1; + } + } + + bitsmode1 = min_bits; + lsbdepth1 = min_bits_pos; + + for ( i = 0; i < BANDS; ++i ) + { + LSB1[i] = qbidx[i] & ( ( 1 << lsbdepth1 ) - 1 ); + tdifidx1[i] = qbidx[i] >> lsbdepth1; + } + } + + /* Preparing lossless coding input */ + if ( flag_pack == 0 ) + { + /* estimating # of bits */ + /* Encoding MSB bits */ + if ( bitsmode0 < bitsmode1 ) + { + bits = bitsmode0; + *hLCmode0 = 0; + } + else + { + bits = bitsmode1; + *hLCmode0 = 1; + } + } + else + { + /* Encoding MSB bits */ + if ( *hLCmode0 == 0 ) + { + push_indice( hBstr, IND_HQ2_DENG_8SMODE, 0, BITS_DE_8SMODE ); + bits = BITS_DE_8SMODE; + if ( cnt_outlyer0 == 0 ) + { + push_indice( hBstr, IND_HQ2_DENG_8SMODE_N0, 0, BITS_DE_8SMODE_N0 ); + bits += BITS_DE_8SMODE_N0; + if ( cnt_outlyer == 1 ) + { + /* 01 */ + push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 1, BITS_DE_8SMODE_N1 ); + bits += BITS_DE_8SMODE_N1; + push_indice( hBstr, IND_HQ2_DENG_8SPOS, pos_outlyer, BITS_DE_8SPOS ); + bits += BITS_DE_8SPOS; + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[pos_outlyer] + ABS_ENG_OFFSET, BITS_ABS_ENG ); + bits += BITS_ABS_ENG; + } + else + { + /* 00 */ + push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 0, BITS_DE_8SMODE_N1 ); + bits += BITS_DE_8SMODE_N1; + } + + for ( i = 0; i < pos_outlyer; ++i ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); + bitsmode0 += hessize[tdifidx0[i] + 4]; + } + + for ( i = pos_outlyer + 1; i < BANDS; ++i ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); + bitsmode0 += hessize[tdifidx0[i] + 4]; + } + } + else if ( cnt_outlyer0 == 1 ) + { + push_indice( hBstr, IND_HQ2_DENG_8SMODE_N0, 1, BITS_DE_8SMODE_N0 ); + bits += BITS_DE_8SMODE_N0; + if ( cnt_outlyer == 1 ) + { + push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 1, BITS_DE_8SMODE_N1 ); + bits += BITS_DE_8SMODE_N1; + push_indice( hBstr, IND_HQ2_DENG_8SPOS, pos_outlyer, BITS_DE_8SPOS ); + bits += BITS_DE_8SPOS; + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[0] + ABS_ENG_OFFSET, BITS_ABS_ENG ); + bits += BITS_ABS_ENG; + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[pos_outlyer] + ABS_ENG_OFFSET, BITS_ABS_ENG ); + bits += BITS_ABS_ENG; + } + else + { + push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 0, BITS_DE_8SMODE_N1 ); + bits += BITS_DE_8SMODE_N1; + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[0] + ABS_ENG_OFFSET, BITS_ABS_ENG ); + bits += BITS_ABS_ENG; + } + + for ( i = 1; i < pos_outlyer; ++i ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); + bits += hessize[tdifidx0[i] + 4]; + } + + for ( i = pos_outlyer + 1; i < BANDS; ++i ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); + bits += hessize[tdifidx0[i] + 4]; + } + } + } + else + { + bits = BITS_DE_8SMODE + BITS_MAX_DEPTH; + push_indice( hBstr, IND_HQ2_DENG_8SMODE, 1, BITS_DE_8SMODE ); + push_indice( hBstr, IND_HQ2_DENG_8SDEPTH, lsbdepth1, BITS_MAX_DEPTH ); + + for ( i = 0; i < BANDS; ++i ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx1[i] + 4], hessize[tdifidx1[i] + 4] ); + bits += hessize[tdifidx1[i] + 4]; + } + + if ( lsbdepth1 > 0 ) + { + for ( i = 0; i < BANDS; ++i ) + { + push_indice( hBstr, IND_HQ2_DIFF_ENERGY, LSB1[i], lsbdepth1 ); + } + bits += BANDS * lsbdepth1; + } + } + } + + return bits; /* xx bits for diff. energies + 1 bit for LC coding mode */ +} + +/*-------------------------------------------------------------------* + * band_energy_quant() + * + * + *-------------------------------------------------------------------*/ + +static float band_energy_quant( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *t_audio, + const int16_t band_start[], + const int16_t band_end[], + float band_energy[], + const int16_t bands, + const Word32 L_qint, /* Q29 */ + const Word16 eref_fx, /* Q10 */ + const int16_t is_transient ) +{ + int16_t i, k; + float E; + int16_t ebits; + int16_t hLCmode0, hLCmode1, deng_bits; + int16_t bq1_temp[BANDS_MAX], bq2_temp[BANDS_MAX]; + int16_t bq0; + int16_t bq1[BANDS_MAX]; + int16_t bq2[BANDS_MAX]; + int16_t deng_cmode = 0; + int16_t hbits; + Word32 L_tmp; + Word32 L_band_energy[BANDS_MAX]; + Word16 exp_normd; + Word16 rev_qint_fx; + Word16 Qrev_qint; + + /* Calculate the band energies */ + for ( k = 0; k < bands; k++ ) + { + E = 0.0f; + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + E += t_audio[i] * t_audio[i]; + } + + band_energy[k] = (float) log2_f( E + 0.18e-1f ); + } + + if ( is_transient ) + { + reverse_transient_frame_energies( band_energy, bands ); + } + + /* Quantize the reference and band energies */ + for ( k = 0; k < bands; k++ ) + L_band_energy[k] = (Word32) ( band_energy[k] * pow( 2.0f, SWB_BWE_LR_Qbe ) ); + +#define WMC_TOOL_MAN + exp_normd = norm_l( L_qint ); + div_s( &rev_qint_fx, 0x4000, round_fx( L_shl( L_qint, exp_normd ) ) ); /* Q14-(29+exp_normd-16)+15 */ + Qrev_qint = sub( 14 - ( 29 - 16 ) + 15, exp_normd ); + + bq0 = round_fx( L_shl( L_mult( eref_fx, rev_qint_fx ), sub( 5, Qrev_qint ) ) ); /* 16-(10+Qrev_qint+1) */ + FOR( k = 0; k < bands; k++ ) + { + /*bq1[k] = round_f (band_energy[k] / qint); */ + L_tmp = L_mls( L_band_energy[k], rev_qint_fx ); /* Q14+Qrev_qint-15 */ + bq1[k] = round_fx( L_shl( L_tmp, sub( 17, Qrev_qint ) ) ); /* 16-(14+Qrev_qint-15) */ + } +#undef WMC_TOOL_MAN + + if ( is_transient ) + { + mvs2s( bq1, bq1_temp, bands ); + + /* Calculate the differential energies */ + diffcod_lrmdct( bands, bq0, bq1_temp, bq2_temp, is_transient ); + } + + /* Calculate the differential energies */ + bq2[0] = bq1[0] - bq0; + for ( k = 1; k < bands; k++ ) + { + bq2[k] = bq1[k] - bq1[k - 1]; + } + + /* Modifying qbidx to be located in the range -256~255 */ + for ( i = 0; i < bands; ++i ) + { + if ( bq2[i] > MAXIMUM_ENERGY_LOWBRATE ) + { + bq2[i] = MAXIMUM_ENERGY_LOWBRATE; + } + if ( bq2[i] < MINIMUM_ENERGY_LOWBRATE ) + { + bq2[i] = MINIMUM_ENERGY_LOWBRATE; + } + } + + /* Get number of bits by Huffman0 coding */ + ebits = large_symbol_enc( hBstr, bq2, bands, &hLCmode0, 0 ); + + if ( is_transient ) + { + /* Get number of bits by Huffman coding */ + hbits = small_symbol_enc_tran( hBstr, bq2_temp, bands, &hLCmode1, 0, is_transient ); + } + else + { + /* Get number of bits by Huffman coding */ + hbits = small_symbol_enc( hBstr, bq2, bands, &hLCmode1, 0, is_transient ); + } + + /* comparing used bits */ + if ( ebits < hbits || hbits == -1 ) + { + deng_cmode = 0; + push_indice( hBstr, IND_HQ2_DENG_MODE, deng_cmode, BITS_DE_CMODE ); + large_symbol_enc( hBstr, bq2, bands, &hLCmode0, 1 ); + deng_bits = ebits + BITS_DE_CMODE; + } + else + { + /* setting energy difference coding mode and storing it */ + deng_cmode = 1; + push_indice( hBstr, IND_HQ2_DENG_MODE, deng_cmode, BITS_DE_CMODE ); + + deng_bits = hbits + BITS_DE_CMODE; + + /* packing indice */ + if ( is_transient ) + { + mvs2s( bq2_temp, bq2, bands ); + + small_symbol_enc_tran( hBstr, bq2, bands, &hLCmode1, 1, is_transient ); + } + else + { + small_symbol_enc( hBstr, bq2, bands, &hLCmode1, 1, is_transient ); + } + } + + /* Reconstruct quantized spectrum */ + bq1[0] = bq2[0] + bq0; + for ( k = 1; k < bands; k++ ) + { + bq1[k] = bq2[k] + bq1[k - 1]; + } + + for ( k = 0; k < bands; k++ ) + { +#define WMC_TOOL_MAN + L_band_energy[k] = L_mls( L_qint, (Word16) bq1[k] ); + move32(); /* 29+0-15 -> Qbe(Q14) */ +#undef WMC_TOOL_MAN + band_energy[k] = (float) ( L_band_energy[k] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); + } + + if ( is_transient ) + { + reverse_transient_frame_energies( band_energy, bands ); + } + + return ( deng_bits ); +} + + +/*-------------------------------------------------------------------* + * p2a_threshold_quant() + * + * + *-------------------------------------------------------------------*/ + +static int16_t p2a_threshold_quant( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *t_audio, + const int16_t band_start[], + const int16_t band_end[], + const int16_t band_width[], + const int16_t bands, + const int16_t p2a_bands, + const float p2a_th, + int16_t *p2a_flags ) +{ + int16_t i, j, k; + float p, a, e; + float p2a; + + set_s( p2a_flags, 1, bands ); + + j = 0; + for ( k = bands - p2a_bands; k < bands; k++ ) + { + a = 0.0f; + p = 0.0f; + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + e = t_audio[i] * t_audio[i]; + if ( e > p ) + { + p = e; + } + a += e; + } + + if ( a > 0.0f ) + { + a /= band_width[k]; + p2a = 10.0f * (float) log10( p / a ); + + if ( p2a <= p2a_th ) + { + p2a_flags[k] = 0; + } + } + + push_indice( hBstr, IND_HQ2_P2A_FLAGS, p2a_flags[k], 1 ); + j++; + } + + return ( j ); +} + + +/*-------------------------------------------------------------------* + * mdct_spectrum_fine_gain_enc() + * + * + *-------------------------------------------------------------------*/ + +static void mdct_spectrum_fine_gain_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float ybuf[], + float y2[], + const int16_t band_start[], + const int16_t band_end[], + const int16_t k_sort[], + const int16_t bands, + const Word32 L_qint, + const int16_t Ngq, + const int16_t gqlevs, + const int16_t gqbits ) +{ + int16_t i, k, imin; + float Eyy, Exy, gamma; + float dmin, d; + float gain_table[MAX_GQLEVS]; + Word16 exp_normn, exp_normd; + Word16 delta_fx, Qdelta; + Word32 L_delta, L_q; + Word32 L_temp; + Word16 gain_table_fx[MAX_GQLEVS]; + Word16 Qgt; + Word16 temp_lo_fx, temp_hi_fx; + +#define WMC_TOOL_MAN + /* Fine gain quantization on only the most significant energy bands */ + /*delta = qint / gqlevs; */ + exp_normn = norm_l( L_qint ); + exp_normn = sub( exp_normn, 1 ); + exp_normd = norm_s( gqlevs ); + div_l( &delta_fx, L_shl( L_qint, exp_normn ), shl( gqlevs, exp_normd ) ); + Qdelta = add( sub( exp_normn, exp_normd ), 28 ); /* 29+exp_normn-(exp_normd)-1; */ + L_delta = L_shl( L_deposit_h( delta_fx ), sub( 13, Qdelta ) ); + /*q = (-qint + delta) / 2.0f; */ + L_q = L_shr( L_sub( L_delta, L_qint ), 1 ); + + FOR( i = 0; i < gqlevs; i++ ) + { + /*gain_table[i] = (float) pow (2.0f, q * 0.5f); */ + L_temp = L_shr( L_shr( L_q, 1 ), sub( 29, 16 ) ); + temp_lo_fx = L_Extract_lc( L_temp, &temp_hi_fx ); + Qgt = sub( 14, temp_hi_fx ); + gain_table_fx[i] = extract_l( Pow2( 14, temp_lo_fx ) ); /* Qgt */ + + /*q += delta; */ + L_q = L_add( L_q, L_delta ); + gain_table_fx[i] = shl( gain_table_fx[i], sub( 14, Qgt ) ); /* Qgt -> Q14 */ + gain_table[i] = (float) ( gain_table_fx[i] / pow( 2.0f, 14 ) ); + } +#undef WMC_TOOL_MAN + + for ( k = bands - Ngq; k < bands; k++ ) + { + Eyy = 0.0f; + Exy = 0.0f; + for ( i = band_start[k_sort[k]]; i <= band_end[k_sort[k]]; i++ ) + { + Eyy += y2[i] * y2[i]; + Exy += ybuf[i] * y2[i]; + } + + if ( Eyy > 0.0f && Exy > 0.0f ) + { + gamma = Exy / Eyy; + dmin = FLT_MAX; + imin = -1; + for ( i = 0; i < gqlevs; i++ ) + { + d = (float) fabs( gamma - gain_table[i] ); + if ( d < dmin ) + { + dmin = d; + imin = i; + } + } + + gamma = gain_table[imin]; + + for ( i = band_start[k_sort[k]]; i <= band_end[k_sort[k]]; i++ ) + { + y2[i] *= gamma; + } + } + else + { + imin = 0; + } + + push_indice( hBstr, IND_HQ2_SUBBAND_GAIN, imin, gqbits ); + } + + return; +} diff --git a/lib_enc/hvq_enc.c b/lib_enc/hvq_enc.c new file mode 100644 index 0000000000..d82de6f5f3 --- /dev/null +++ b/lib_enc/hvq_enc.c @@ -0,0 +1,163 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * hvq_enc() + * + * Harmonic VQ encoder + *--------------------------------------------------------------------------*/ + +/*! r: Consumed bits */ +int16_t hvq_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t bwidth, /* i : audio bandwidth */ +#ifdef DEBUGGING + const int16_t idchan, /* i : channel ID */ +#endif + const int32_t core_brate, /* i : core bitrate */ + const int16_t hvq_bits, /* i : HVQ bit budget */ + const int16_t Npeaks, /* i : Number of peaks */ + const int16_t *ynrm, /* i : Envelope coefficients */ + int16_t *R, /* i/o: Bit allocation/updated bit allocation */ + int16_t *peaks, /* i/o: Peak pos. / Encoded peak pos. */ + float *nf_gains, /* i/o: Noise fill gains / Quant. nf gains */ + float *noise_level, /* o : Quantized noise level */ + const float *pe_gains, /* i : Peak gains */ + const float *coefs, /* i : spectrum coefficients */ + float *coefs_out /* o : encoded spectrum coefficients */ +) +{ + int16_t bin_th, q, j, i; + int16_t nf_cnt; + int16_t q_noise_level_idx[HVQ_BWE_NOISE_BANDS]; + float q_noise_level[HVQ_BWE_NOISE_BANDS]; + float d, nf, nf_mean, pe, pe_mean, nfpe; + int16_t bits_used; + float lb_nfpe; + + bits_used = 0; + + bin_th = HVQ_THRES_BIN_32k; + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + bin_th = HVQ_THRES_BIN_24k; + } + + nf = 800; + pe = 800; + q = bin_th; + + /* Find HB noise level */ + for ( i = 0; i < HVQ_BWE_NOISE_BANDS; i++ ) + { + nf_cnt = 0; + nf_mean = EPSILON; + pe_mean = EPSILON; + for ( j = 0; j < ( L_FRAME32k - bin_th ) / HVQ_BWE_NOISE_BANDS; j++, q++ ) + { + d = (float) fabs( coefs[q] ); + + if ( d > pe ) + { + pe = HVQ_BWE_WEIGHT2 * pe + ( 1 - HVQ_BWE_WEIGHT2 ) * d; + } + else + { + pe = HVQ_BWE_WEIGHT1 * pe + ( 1 - HVQ_BWE_WEIGHT1 ) * d; + if ( d > nf ) + { + nf = HVQ_BWE_WEIGHT1 * nf + ( 1 - HVQ_BWE_WEIGHT1 ) * d; + } + else + { + nf = HVQ_BWE_WEIGHT2 * nf + ( 1 - HVQ_BWE_WEIGHT2 ) * d; + } + nf_mean += nf; + nf_cnt++; + } + + pe_mean += pe; + } + + if ( nf_cnt > 0 ) + { + nf_mean /= nf_cnt; + } + pe_mean /= ( L_FRAME32k - bin_th ) / HVQ_BWE_NOISE_BANDS; + + nfpe = HVQ_NFPE_FACTOR * nf_mean / pe_mean; + noise_level[i] = nfpe * nfpe * nfpe; + + q_noise_level_idx[i] = usquant( noise_level[i], &q_noise_level[i], 0.0f, 0.1f, 4 ); + push_indice( hBstr, IND_HVQ_BWE_NL, q_noise_level_idx[i], 2 ); + bits_used += 2; + + noise_level[i] = q_noise_level[i]; + } + + for ( i = 0; i < HVQ_NF_GROUPS; i++ ) + { + lb_nfpe = HVQ_LB_NFPE_FACTOR * nf_gains[i] / pe_gains[i]; + lb_nfpe = lb_nfpe * lb_nfpe * lb_nfpe; + + if ( lb_nfpe > 0.5f ) + { + lb_nfpe = 0.5f; + } + nf_gains[i] *= 2 * lb_nfpe; + } + +#ifdef DEBUGGING + bits_used += peak_vq_enc( hBstr, bwidth, idchan, coefs, coefs_out, core_brate, hvq_bits - bits_used, Npeaks, ynrm, R, peaks, &nf_gains[0] ); +#else + bits_used += peak_vq_enc( hBstr, bwidth, coefs, coefs_out, core_brate, hvq_bits - bits_used, Npeaks, ynrm, R, peaks, &nf_gains[0] ); +#endif + + + return bits_used; +} diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c new file mode 100644 index 0000000000..2cf98207bb --- /dev/null +++ b/lib_enc/igf_enc.c @@ -0,0 +1,1944 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "ivas_prot.h" +#include "cnst.h" +#include "stat_enc.h" +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + + +/*-------------------------------------------------------------------* + * IGF_write_bit() + * + * write single bit to stream + *-------------------------------------------------------------------*/ + +static void IGF_write_bit( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *bitCount, /* i/o: bit counter */ + const int16_t value /* i : value */ +) +{ + if ( hBstr ) + { + push_next_indice( hBstr, value, 1 ); + } + + ( *bitCount )++; + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_write_bits() + * + * write bits to stream + *-------------------------------------------------------------------*/ + +static void IGF_write_bits( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *bitCount, /* i/o: bit counter */ + const int16_t value, /* i/o: value */ + int16_t bits /* i : number of bits */ +) +{ + while ( bits-- ) + { + IGF_write_bit( hBstr, bitCount, ( ( value & ( 1 << bits ) ) == 0 ) ? 0 : 1 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_getCrest_new() + * + * crest factor calculation + *-------------------------------------------------------------------*/ + +/*! r: crest factor */ +static float IGF_getCrest_new( + const int16_t *logSpec, /* i : power spectrum */ + const int16_t start, /* i : start subband index */ + const int16_t stop /* i : stop subband index */ +) +{ + int16_t i; + int16_t x; + int32_t x_eff = 0; + int16_t x_max = 0; + float crest = 1.f; + + for ( i = start; i < stop; i++ ) + { + x = logSpec[i]; + x_eff += x * x; + + if ( x > x_max ) + { + x_max = x; + } + } + + x_eff /= ( stop - start ); + + if ( x_eff > 0 && x_max > 0 ) + { + crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); + } + + return crest; +} + + +/*-------------------------------------------------------------------* + * IGF_getSFM_new() + * + * calculates spectral flatness measurement + *-------------------------------------------------------------------*/ + +/*! r: SFM value */ +static float IGF_getSFM_new( + const float *powerSpectrum, /* i : power spectrum */ + const int16_t *logSpec, /* i : log of power spectrum */ + const int16_t start, /* i : start subband index */ + const int16_t stop /* i : stop subband index */ +) +{ + int16_t n; + int16_t i; + int16_t num; + float denom; + float numf; + float tmp; + float sfm; + + num = 0; + denom = 1.f; + sfm = 1.f; + + for ( i = start; i < stop; i++ ) + { + tmp = powerSpectrum[i]; + n = logSpec[i /*-start*/]; + num += n; + denom += tmp; + } + + numf = (float) num / (float) ( stop - start ); + denom /= (float) ( stop - start ); + + if ( denom != 0 ) + { + sfm = min( ( powf( 2.0f, numf + 0.5f ) / denom ), 1.0f ); + } + + return sfm; +} + + +/*-------------------------------------------------------------------* + * IGF_getTilt() + * + * calculates spectral tilt + *-------------------------------------------------------------------*/ + +/*! r: spectral tilt value */ +static float IGF_getTilt( + const float *powerSpectrum, /* i : energies */ + const int16_t start, /* i : start subband index */ + const int16_t stop /* i : stop subband index */ +) +{ + int16_t i; + int16_t x; + int16_t width; + float y; + float mean_x, mean_y, mean_xy, mean_x2; + float slope; + + x = 1; + mean_x = mean_y = mean_xy = mean_x2 = 0.f; + + width = stop - start; + for ( i = start; i < stop; i++ ) + { + mean_x += x; + mean_x2 += x * x; + y = 20.f * log10f( max( 1.f, powerSpectrum[i] ) ); + mean_y += y; + mean_xy += y * x; + + x++; + } + mean_y /= width; + mean_x /= width; + mean_xy /= width; + mean_x2 /= width; + slope = ( mean_xy - mean_x * mean_y ) / ( mean_x2 - mean_x * mean_x ); + + return slope; +} + + +/*-------------------------------------------------------------------* + * IGF_getTNR() + * + * calculates tonal-to-noise ratio + *-------------------------------------------------------------------*/ + +/*! r: spectral tilt value */ +static float IGF_getTNR( + const float *powerSpectrum, /* i : energies */ + const int16_t start, /* i : start subband index */ + const int16_t stop, /* i : stop subband index */ + const float adap /* i : SFB width adaptation */ +) +{ + int16_t i; + int16_t width; + float avg = 0.f; + float tonal = 0.f; + float noise = EPSILON; + float tonalToNoise; + float rootSpec[300]; + + set_f( rootSpec, 0, 300 ); + + width = stop - start; + for ( i = start; i < stop; i++ ) + { + rootSpec[i - start] = sqrtf( powerSpectrum[i] ); + avg += rootSpec[i - start]; + } + avg /= width; + + for ( i = start; i < stop; i++ ) + { + float normSpec = rootSpec[i - start] / avg; + if ( normSpec > 1 + adap ) + { + tonal += rootSpec[i - start]; + } + else if ( normSpec < 1 ) + { + noise += rootSpec[i - start]; + } + } + + tonalToNoise = 20.f * log10f( max( 1e-018f, tonal / noise ) ); + + return tonalToNoise; +} + + +/*-------------------------------------------------------------------* + * IGF_getCrest() + * + * crest factor calculation + *-------------------------------------------------------------------*/ + +/*! r: crest factor */ +static float IGF_getCrest( + const float *powerSpectrum, /* i : power spectrum */ + const int16_t start, /* i : start subband index */ + const int16_t stop /* i : stop subband index */ +) +{ + int16_t i; + int16_t x; + int32_t x_eff = 0; + int16_t x_max = 0; + float crest = 1.f; + + for ( i = start; i < stop; i++ ) + { + x = max( 0, (int16_t) ( logf( max( FLT_MIN, powerSpectrum[i] ) ) * INV_LOG_2 ) ); + x_eff += x * x; + + if ( x > x_max ) + { + x_max = x; + } + } + + x_eff /= ( stop - start ); + + if ( x_eff > 0 && x_max > 0 ) + { + crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); + } + + return crest; +} + + +/*-------------------------------------------------------------------* + * IGF_getSFM() + * + * calculates spectral flatness measurement + *-------------------------------------------------------------------*/ + +/*! r: SFM value */ +static float IGF_getSFM( + const float *powerSpectrum, /* i : energies */ + const int16_t start, /* i : start subband index */ + const int16_t stop /* i : stop subband index */ +) +{ + int16_t n; + int16_t i; + int16_t num; + float denom; + float numf; + float tmp; + float sfm; + + num = 0; + denom = 1.f; + sfm = 1.f; + + for ( i = start; i < stop; i++ ) + { + tmp = powerSpectrum[i]; + n = max( 0, (int16_t) ( logf( max( FLT_MIN, tmp ) ) * INV_LOG_2 ) ); + num += n; + denom += tmp; + } + + numf = (float) num / (float) ( stop - start ); + denom /= (float) ( stop - start ); + + if ( denom != 0 ) + { + sfm = min( ( powf( 2.0f, numf + 0.5f ) / denom ), 1.0f ); + } + + return sfm; +} + + +/*-------------------------------------------------------------------* + * IGF_CalculateEnvelope() + * + * envelope estimation + *-------------------------------------------------------------------*/ + +static void IGF_CalculateEnvelope( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + const float *pMDCTSpectrum, /* i : MDCT spectrum */ + const float *pPowerSpectrum, /* i : MDCT^2 + MDST^2 spectrum, or estimate */ + const int16_t igfGridIdx, /* i : IGF grid index */ + const int16_t isTransient, /* i : flag indicating if transient is detected */ + const int16_t last_core_acelp, /* i : indicator if last frame was ACELP core */ + const int16_t element_mode, /* i : IVAS element_mode */ + const float att /* i : attenuation */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t *swb_offset; + int16_t sfb; /* this is the actual scalefactor band */ + int16_t width; /* this is width in subbands of the actual scalefactor band */ + int16_t tile_idx; + int16_t strt_cpy; + float gain; /* the gain which has to be applied to the source tile to get the destination energy */ + int16_t sb; + float sfbEnergyR; + float sfbEnergyC; /* the energy of the destination region of the tile */ + float sfbEnergyTileR; + float sfbEnergyTileC; /* the energy of the destination region of the tile */ + int16_t tmp; + float tmp_tb; + float tmp_sb; + int16_t sfbCnt; + + hPrivateData = &hIGFEnc->igfData; + hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; + swb_offset = hGrid->swb_offset; + + if ( element_mode > EVS_MONO ) + { + if ( igfGridIdx != IGF_GRID_LB_NORM ) + { + for ( sfbCnt = 0; sfbCnt < hGrid->sfbWrap[hGrid->nTiles] - hGrid->sfbWrap[0]; sfbCnt++ ) + { + /* reset filter */ + hPrivateData->prevSFM_FIR_SFB_TB[sfbCnt] = 0.f; + hPrivateData->prevSFM_IIR_SFB_TB[sfbCnt] = 0.f; + hPrivateData->prevSFM_FIR_SFB_SB[sfbCnt] = 0.f; + hPrivateData->prevSFM_IIR_SFB_SB[sfbCnt] = 0.f; + hPrivateData->prevDampingFactor_IIR[sfbCnt] = -1.f; + hPrivateData->dampingFactorSmoothing[sfbCnt] = 2; + } + } + } + + if ( pPowerSpectrum ) + { + for ( sb = hGrid->sbWrap[0]; sb < swb_offset[hGrid->sfbWrap[hGrid->nTiles]]; sb++ ) + { + hPrivateData->logSpec[sb] = max( 0, (int16_t) ( log( max( FLT_MIN, pPowerSpectrum[sb] ) ) * INV_LOG_2 ) ); + } + } + + for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) + { + strt_cpy = hGrid->sbWrap[tile_idx]; + + for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) + { + width = swb_offset[sfb + 1] - swb_offset[sfb]; + + sfbEnergyTileR = EPSILON; + sfbEnergyTileC = EPSILON; + sfbEnergyC = EPSILON; + + if ( pPowerSpectrum ) + { + tmp = strt_cpy; + for ( sb = swb_offset[sfb]; sb < swb_offset[sfb + 1]; sb++ ) + { + sfbEnergyC += pPowerSpectrum[sb]; + sfbEnergyTileR += pMDCTSpectrum[strt_cpy] * pMDCTSpectrum[strt_cpy]; + sfbEnergyTileC += pPowerSpectrum[strt_cpy]; + + strt_cpy++; + } + + sfbEnergyTileR /= width; + gain = (float) ( sfbEnergyTileR * ( sfbEnergyC / sfbEnergyTileC ) ); + + if ( element_mode > EVS_MONO ) + { + if ( !isTransient ) + { + float diffSFM; + float shiftedSFM = 0.f; + + tmp_tb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ); + tmp_sb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, tmp, strt_cpy ) / IGF_getCrest_new( hPrivateData->logSpec, tmp, strt_cpy ); + + if ( last_core_acelp || hPrivateData->wasTransient ) + { + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = hPrivateData->prevSFM_IIR_SFB_TB[sfb] = tmp_tb; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = hPrivateData->prevSFM_IIR_SFB_SB[sfb] = tmp_sb; + } + + hPrivateData->SFM_tb[sfb] = tmp_tb + hPrivateData->prevSFM_FIR_SFB_TB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_TB[sfb]; + hPrivateData->SFM_tb[sfb] = min( 2.7f, hPrivateData->SFM_tb[sfb] ); + hPrivateData->SFM_sb[sfb] = tmp_sb + hPrivateData->prevSFM_FIR_SFB_SB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_SB[sfb]; + hPrivateData->SFM_sb[sfb] = min( 2.7f, hPrivateData->SFM_sb[sfb] ); + + diffSFM = hPrivateData->SFM_sb[sfb] - hPrivateData->SFM_tb[sfb]; + + if ( diffSFM > 0.f && hPrivateData->SFM_tb[sfb] < 0.1f ) /* check whether target SFB is more tonal than source SFB */ + { + float currDampingFactor, dampingFactor; + float slope, threshold; + float tonalToNoise, adap; + float alpha; + + /* calculate spectral tilt to detect sudden drops (or increases) in energy in the current SFB */ + slope = IGF_getTilt( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1] ); + + /* determine whether strong tilt is due to a step in the spectrum (e.g. band limitation, no damping) + or a tonal component close the band border (apply damping) by calculating SFM for a shift of 1/2 SFB width*/ + threshold = 60.f / ( (float) width ); + if ( slope < -threshold ) + { + int16_t shift = width >> 1; + shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ); + } + else if ( ( slope > 1.f * threshold ) && ( sfb != hGrid->sfbWrap[hGrid->nTiles] - 1 ) ) + { + int16_t shift = width >> 1; + shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ); + } + + if ( shiftedSFM > 0.04f ) + { + currDampingFactor = 1.f; + } + else + { + alpha = min( 320.f / (float) swb_offset[sfb + 1], 1.25f ); + currDampingFactor = expf( 1.25f * alpha * logf( hPrivateData->SFM_tb[sfb] / hPrivateData->SFM_sb[sfb] ) ); + + + /* calculate tonal-to-noise ratio and reduce damping for low values*/ + adap = (float) width / 40.f; + tonalToNoise = IGF_getTNR( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1], adap ); + if ( ( tonalToNoise - ( 10 + adap ) ) < 0 ) + { + currDampingFactor += 0.03f * ( ( 10 + adap ) - tonalToNoise ); + } + } + + if ( last_core_acelp || hPrivateData->wasTransient || hPrivateData->prevDampingFactor_IIR[sfb] == -1 ) + { + hPrivateData->prevDampingFactor_IIR[sfb] = max( currDampingFactor, 0.1f ); + } + if ( last_core_acelp ) + { + hPrivateData->dampingFactorSmoothing[sfb] = 2; + } + + dampingFactor = ( currDampingFactor + hPrivateData->prevDampingFactor_IIR[sfb] ) / 2; + + gain *= min( dampingFactor + hPrivateData->dampingFactorSmoothing[sfb] * 0.1f, 1 ); + + hPrivateData->prevDampingFactor_IIR[sfb] = dampingFactor; + if ( hPrivateData->dampingFactorSmoothing[sfb] > 0 ) + { + hPrivateData->dampingFactorSmoothing[sfb]--; + } + } + else + { + hPrivateData->prevDampingFactor_IIR[sfb] = -1; + hPrivateData->dampingFactorSmoothing[sfb] = 1; + } + + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = tmp_tb; + hPrivateData->prevSFM_IIR_SFB_TB[sfb] = hPrivateData->SFM_tb[sfb]; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = tmp_sb; + hPrivateData->prevSFM_IIR_SFB_SB[sfb] = hPrivateData->SFM_sb[sfb]; + } + else + { + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; + hPrivateData->prevDampingFactor_IIR[sfb] = -1.f; + hPrivateData->dampingFactorSmoothing[sfb] = 2; + } + } + } + else + { + sfbEnergyR = EPSILON + sum2_f( pMDCTSpectrum + swb_offset[sfb], width ) / width; + gain = (float) ( sfbEnergyR ); + + if ( element_mode > EVS_MONO ) + { + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; + hPrivateData->prevDampingFactor_IIR[sfb] = -1.f; + hPrivateData->dampingFactorSmoothing[sfb] = 2; + } + } + + gain *= att; + + gain = 0.5f + (float) ( 2.885390081777927f * logf( gain ) + 16.f ); + if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) ) + { + gain += 0.25f; /* better preservation of original HF band energy */ + } + if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_64000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_64000_CPE ) ) + { + gain += 0.125f; + } + gain = min( gain, 91.f ); /* 13+15+63, see arithcode encode residual */ + gain = max( gain, 0.f ); + + hPrivateData->igfScfQuantized[sfb] = (int16_t) ( gain ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_CalculateStereoEnvelope() + * + * envelope estimation + *-------------------------------------------------------------------*/ + +static void IGF_CalculateStereoEnvelope( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + const float *pMDCTSpectrum, /* i : MDCT spectrum */ + const float *pMDCTSpectrumMsInv, /* i : MDCT spectrum */ + const float *pPowerSpectrum, /* i : MDCT^2 + MDST^2 spectrum, or estimate */ + const float *pPowerSpectrumMsInv, /* i : inverse power spectrum */ + const int16_t igfGridIdx, /* i : IGF grid index */ + const int16_t coreMsMask[N_MAX], /* i : line wise ms Mask */ + const int16_t isTransient, /* i : flag indicating if transient is detected */ + const int16_t last_core_acelp /* i : indicator if last frame was ACELP core */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t *swb_offset; + int16_t sfb; /* this is the actual scalefactor band */ + int16_t width; /* this is width in subbands of the actual scalefactor band */ + int16_t tile_idx; + int16_t strt_cpy; + float gain; /* the gain which has to be applied to the source tile to get the destination energy */ + int16_t sb; + float sfbEnergyR; + float sfbEnergyC; /* the energy of the destination region of the tile */ + float sfbEnergyTileR; + float sfbEnergyTileC; /* the energy of the destination region of the tile */ + int16_t tmp, x, y; + float mean_x, mean_y, mean_xy, mean_x2; + float slope; + float tmp_tb; + float tmp_sb; + int16_t sfbCnt; + float tileSrcSpec[MAX_IGF_SFB_LEN]; + + hPrivateData = &hIGFEnc->igfData; + hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; + swb_offset = hGrid->swb_offset; + + if ( igfGridIdx != IGF_GRID_LB_NORM ) + { + for ( sfbCnt = 0; sfbCnt < hGrid->sfbWrap[hGrid->nTiles] - hGrid->sfbWrap[0]; sfbCnt++ ) + { + /* reset filter */ + hPrivateData->prevSFM_FIR_SFB_TB[sfbCnt] = 0.f; + hPrivateData->prevSFM_IIR_SFB_TB[sfbCnt] = 0.f; + hPrivateData->prevSFM_FIR_SFB_SB[sfbCnt] = 0.f; + hPrivateData->prevSFM_IIR_SFB_SB[sfbCnt] = 0.f; + } + } + + if ( pPowerSpectrum ) + { + for ( sb = hGrid->sbWrap[0]; sb < swb_offset[hGrid->sfbWrap[hGrid->nTiles]]; sb++ ) + { + hPrivateData->logSpec[sb] = max( 0, (int16_t) ( logf( max( FLT_MIN, pPowerSpectrum[sb] ) ) * INV_LOG_2 ) ); + } + } + + for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) + { + strt_cpy = hGrid->sbWrap[tile_idx]; + + for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) + { + width = swb_offset[sfb + 1] - swb_offset[sfb]; + sfbEnergyTileR = EPSILON; + sfbEnergyTileC = EPSILON; + sfbEnergyC = EPSILON; + + if ( pPowerSpectrum ) + { + tmp = strt_cpy; + + for ( sb = swb_offset[sfb]; sb < swb_offset[sfb + 1]; sb++ ) + { + if ( coreMsMask[sb] != coreMsMask[strt_cpy] ) + { + sfbEnergyC += pPowerSpectrum[sb]; + sfbEnergyTileR += pMDCTSpectrumMsInv[strt_cpy] * pMDCTSpectrumMsInv[strt_cpy]; + sfbEnergyTileC += pPowerSpectrumMsInv[strt_cpy]; + tileSrcSpec[strt_cpy - tmp] = pPowerSpectrumMsInv[strt_cpy]; + } + else + { + sfbEnergyC += pPowerSpectrum[sb]; + sfbEnergyTileR += pMDCTSpectrum[strt_cpy] * pMDCTSpectrum[strt_cpy]; + sfbEnergyTileC += pPowerSpectrum[strt_cpy]; + tileSrcSpec[strt_cpy - tmp] = pPowerSpectrum[strt_cpy]; + } + strt_cpy++; + } + + sfbEnergyTileR /= width; + gain = (float) ( sfbEnergyTileR * ( sfbEnergyC / sfbEnergyTileC ) ); + + if ( !isTransient ) + { + float diffSFM; + float shiftedSFM = 0.f; + + tmp_tb = IGF_getSFM( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1] ); + tmp_sb = IGF_getSFM( tileSrcSpec, 0, strt_cpy - tmp ) / IGF_getCrest( tileSrcSpec, 0, strt_cpy - tmp ); + + if ( last_core_acelp || hPrivateData->wasTransient ) + { + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = hPrivateData->prevSFM_IIR_SFB_TB[sfb] = tmp_tb; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = hPrivateData->prevSFM_IIR_SFB_SB[sfb] = tmp_sb; + } + + hPrivateData->SFM_tb[sfb] = tmp_tb + hPrivateData->prevSFM_FIR_SFB_TB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_TB[sfb]; + hPrivateData->SFM_tb[sfb] = min( 2.7f, hPrivateData->SFM_tb[sfb] ); + hPrivateData->SFM_sb[sfb] = tmp_sb + hPrivateData->prevSFM_FIR_SFB_SB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_SB[sfb]; + hPrivateData->SFM_sb[sfb] = min( 2.7f, hPrivateData->SFM_sb[sfb] ); + + diffSFM = hPrivateData->SFM_sb[sfb] - hPrivateData->SFM_tb[sfb]; + + if ( diffSFM > 0.f && hPrivateData->SFM_tb[sfb] < 0.1f ) /* check whether target SFB is more tonal than source SFB */ + { + float currDampingFactor, dampingFactor, threshold, alpha; + + /* calculate spectral tilt to detect sudden drops (or increases) in energy in the current SFB */ + x = 1; + mean_x = mean_y = mean_xy = mean_x2 = 0; + for ( sb = swb_offset[sfb]; sb < swb_offset[sfb + 1]; sb++ ) + { + mean_x += x; + mean_x2 += x * x; + y = 20 * (int16_t) log10f( max( 1e-018f, pPowerSpectrum[sb] ) ); + mean_y += y; + mean_xy += y * x; + + x++; + } + mean_y /= width; + mean_x /= width; + mean_xy /= width; + mean_x2 /= width; + slope = ( mean_xy - mean_x * mean_y ) / ( mean_x2 - mean_x * mean_x ); + + /* determine whether strong tilt is due to a step in the spectrum (e.g. band limitation, no damping) + or a tonal component close the band border (apply damping) by calculating SFM for a shift of 1/2 SFB width*/ + threshold = 60.f / ( (float) width ); + if ( slope < -threshold ) + { + int16_t shift = width >> 1; + shiftedSFM = IGF_getSFM( pPowerSpectrum, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest( pPowerSpectrum, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ); + } + else if ( ( slope > 1.f * threshold ) && ( sfb != hGrid->sfbWrap[hGrid->nTiles] - 1 ) ) + { + int16_t shift = width >> 1; + shiftedSFM = IGF_getSFM( pPowerSpectrum, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest( pPowerSpectrum, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ); + } + + alpha = min( 320.f / (float) swb_offset[sfb + 1], 1.25f ); + currDampingFactor = expf( alpha * logf( hPrivateData->SFM_tb[sfb] / hPrivateData->SFM_sb[sfb] ) ); + + if ( shiftedSFM > 0.04f ) + { + currDampingFactor = 1.f; + } + + if ( last_core_acelp || hPrivateData->wasTransient || hPrivateData->prevDampingFactor_IIR[sfb] == -1 ) + { + hPrivateData->prevDampingFactor_IIR[sfb] = max( currDampingFactor, 0.1f ); + } + + { + float tonalToNoise; + float adap = ( (float) width ) / 30.f; + tonalToNoise = IGF_getTNR( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1], adap ); + if ( ( tonalToNoise - ( 10 + adap ) ) < 0 ) + { + currDampingFactor += 0.1f * ( ( 10 + adap ) - tonalToNoise ); + } + } + + dampingFactor = ( currDampingFactor + hPrivateData->prevDampingFactor_IIR[sfb] ) / 2; + dampingFactor = max( dampingFactor, hPrivateData->prevDampingFactor_IIR[sfb] / 2 ); + + gain *= min( dampingFactor + hPrivateData->dampingFactorSmoothing[sfb] * 0.1f, 1 ); + + hPrivateData->prevDampingFactor_IIR[sfb] = dampingFactor; + if ( hPrivateData->dampingFactorSmoothing[sfb] > 0 ) + { + hPrivateData->dampingFactorSmoothing[sfb]--; + } + } + else + { + hPrivateData->prevDampingFactor_IIR[sfb] = -1; + hPrivateData->dampingFactorSmoothing[sfb] = 1; + } + + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = tmp_tb; + hPrivateData->prevSFM_IIR_SFB_TB[sfb] = hPrivateData->SFM_tb[sfb]; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = tmp_sb; + hPrivateData->prevSFM_IIR_SFB_SB[sfb] = hPrivateData->SFM_sb[sfb]; + } + else + { + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; + + hPrivateData->dampingFactorSmoothing[sfb] = 2; + } + } + else + { + sfbEnergyR = EPSILON + sum2_f( pMDCTSpectrum + swb_offset[sfb], width ) / width; + gain = (float) ( sfbEnergyR ); + + hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; + hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; + hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; + } + + gain = 0.5f + (float) ( 2.885390081777927f * logf( gain ) + 16.f ); + if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) ) + { + gain += 0.25f; /* better preservation of original HF band energy */ + } + if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_64000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_64000_CPE ) ) + { + gain += 0.125f; + } + gain = min( gain, 91.f ); /* 13+15+63, see arithcode encode residual */ + gain = max( gain, 0.f ); + + hPrivateData->igfScfQuantized[sfb] = (int16_t) ( gain ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_WriteEnvelope() + * + * writes IGF SCF values + *-------------------------------------------------------------------*/ + +/*! r: number of bits writen */ +static int16_t IGF_WriteEnvelope( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *pBitOffset, /* i : ptr to bitOffset counter */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t isIndepFlag, /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ + int16_t *igfAllZero /* i : returns 1 if all IGF scfs are zero, else 0 */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t totBitCount; + int16_t startBitCount; + int16_t sfb; + + startBitCount = *pBitOffset; + totBitCount = 0; + *igfAllZero = 1; + hPrivateData = &hIGFEnc->igfData; + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + + for ( sfb = hGrid->startSfb; sfb < hGrid->stopSfb; sfb++ ) + { + if ( hPrivateData->igfScfQuantized[sfb] != 0 ) + { + *igfAllZero = 0; + break; + } + } + + if ( *igfAllZero ) + { + IGF_write_bit( hBstr, pBitOffset, 1 ); + + if ( hBstr == NULL ) + { + IGFSCFEncoderSaveContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); + } + + IGFSCFEncoderReset( &hPrivateData->hIGFSCFArithEnc ); + + if ( hBstr == NULL ) + { + IGFSCFEncoderRestoreContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); + } + } + else + { + IGF_write_bit( hBstr, pBitOffset, 0 ); + + if ( hBstr == NULL ) + { + IGFSCFEncoderSaveContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); + } + + *pBitOffset = IGFSCFEncoderEncode( &hPrivateData->hIGFSCFArithEnc, hBstr, *pBitOffset, &hPrivateData->igfScfQuantized[hGrid->startSfb], igfGridIdx, isIndepFlag ); + + if ( hBstr == NULL ) + { + IGFSCFEncoderRestoreContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); + } + } + totBitCount = *pBitOffset - startBitCount; + + return totBitCount; +} + + +/*-------------------------------------------------------------------* + * IGF_ErodeSpectrum() + * + * identifies significant spectral content + *-------------------------------------------------------------------*/ + +/*! r: highPassEnergy */ +static float IGF_ErodeSpectrum( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + float *pSpectrum, /* i/o: MDCT spectrum */ + float *pPowerSpectrum, /* i/o: power spectrum */ + const int16_t igfGridIdx, /* i : IGF grid index */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t i; + int16_t igfBgn; + int16_t igfEnd; + float highPassEner; + float lastLine; + float nextLine; + float factor; + int16_t *igfScaleF; + int16_t startSfb; + int16_t stopSfb; + int16_t *swb_offset; + int16_t tmp; + int16_t sfb; + int16_t line; + + highPassEner = 0.f; + hPrivateData = &hIGFEnc->igfData; + hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; + igfBgn = hGrid->startLine; + igfEnd = hGrid->stopLine; + startSfb = hGrid->startSfb; + stopSfb = hGrid->stopSfb; + swb_offset = hGrid->swb_offset; + igfScaleF = hPrivateData->igfScfQuantized; + + if ( pPowerSpectrum == NULL ) + { + for ( i = igfBgn; i < hGrid->infoGranuleLen; i++ ) + { + pSpectrum[i] = 0.f; + } + return 0; + } + + if ( igfBgn > 0 ) + { + for ( i = 0; i < igfBgn; i++ ) + { + highPassEner += (float) i * pPowerSpectrum[i]; + } + + if ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_9600 || + hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_RF_SWB_13200 || + hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_13200 || + hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_16400_CPE ) + { + factor = 1.f; + } + else if ( mct_on && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_64000_CPE ) ) + { + factor = 0.7f; + } + else + { + factor = 2.f; + } + highPassEner /= igfBgn * factor; /* for 9.6kbs use 1.f */ + lastLine = pSpectrum[i - 1]; + nextLine = ( pPowerSpectrum[i - 1] < highPassEner ) ? 0.0f : pSpectrum[i]; + + for ( /*i*/; i < igfEnd - 1; i++ ) + { + if ( pPowerSpectrum[i] < highPassEner ) + { + lastLine = pSpectrum[i]; + pSpectrum[i] = nextLine; + nextLine = 0.0f; + } + else + { + pSpectrum[i - 1] = lastLine; + lastLine = pSpectrum[i]; + nextLine = pSpectrum[i + 1]; + } + } + + /* i == igfEnd - 1 */ + if ( pPowerSpectrum[i] < highPassEner ) + { + pSpectrum[i] = 0.f; + } + } + + /* delete spectrum above igfEnd: */ + for ( i = igfEnd; i < hGrid->infoGranuleLen; i++ ) + { + pSpectrum[i] = 0.f; + pPowerSpectrum[i] = 0.f; + } + + if ( NULL != pPowerSpectrum ) + { + for ( sfb = startSfb; sfb < stopSfb; sfb++ ) + { + tmp = 0; + for ( line = swb_offset[sfb]; line < swb_offset[sfb + 1]; line++ ) + { + if ( pSpectrum[line] != 0.f ) + { + tmp++; + } + } + + if ( tmp && igfScaleF[sfb] ) + { + igfScaleF[sfb]--; + } + } + } + + return highPassEner; +} + + +/*-------------------------------------------------------------------* + * IGF_Whitening() + * + * calculates the IGF whitening levels by SFM and crest + *-------------------------------------------------------------------*/ + +static void IGF_Whitening( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : | instance handle of IGF Encoder */ + float *powerSpectrum, /* i : Q31 | MDCT/MDST power spectrum */ + const int16_t igfGridIdx, /* i : Q0 | IGF grid index */ + const int16_t isTransient, /* i : Q0 | flag indicating if transient is detected */ + const int16_t last_core_acelp, /* i : Q0 | indicator if last frame was ACELP core */ + const int16_t isTNSActive, /* i : Q0 | indicator if TNS is active */ + const int16_t sp_aud_decision0, /* i : Q0 | first stage classifier decision */ + const int32_t brate, /* i : Q0 | bitrate */ + const int16_t element_mode /* i : Q0 | element mode */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t p; + float tmp; + float SFM_src; + float SFM_tar; + int16_t num_Tiles; + float SFM; + + SFM = -1.f; + + hPrivateData = &hIGFEnc->igfData; + hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; + + if ( igfGridIdx != IGF_GRID_LB_NORM ) + { + for ( p = 0; p < hGrid->nTiles; p++ ) + { + /* reset filter */ + hPrivateData->prevSFM_FIR[p] = 0.f; + hPrivateData->prevSFM_IIR[p] = 0.f; + + /* preset values: */ + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; + } + } + + for ( p = 0; p < IGF_MAX_TILES; p++ ) + { + /* update prev data: */ + hPrivateData->igfPrevWhiteningLevel[p] = hPrivateData->igfCurrWhiteningLevel[p]; + /* preset values: */ + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; + } + + if ( !( isTransient || hPrivateData->wasTransient ) ) + { + if ( powerSpectrum ) + { + for ( p = 0; p < hGrid->nTiles; p++ ) + { + int16_t sb; + + if ( isTNSActive ) + { + for ( sb = hGrid->tile[p]; sb < hGrid->tile[p + 1]; sb++ ) + { + hPrivateData->logSpec[sb] = max( 0, (int16_t) ( logf( max( FLT_MIN, powerSpectrum[sb] ) ) * INV_LOG_2 ) ); + } + } + + /* if current tile contains only a single SFB, reuse already computed SFM values */ + if ( element_mode > EVS_MONO && ( hGrid->sfbWrap[p + 1] - hGrid->sfbWrap[p] ) == 1 ) + { + tmp = hPrivateData->SFM_tb[p]; + } + else + { + tmp = IGF_getSFM_new( powerSpectrum, hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ); + } + + if ( last_core_acelp || hPrivateData->wasTransient ) + { + hPrivateData->prevSFM_FIR[p] = hPrivateData->prevSFM_IIR[p] = tmp; + } + + if ( brate <= IVAS_48k && element_mode == IVAS_CPE_MDCT ) + { + num_Tiles = 0; + SFM_src = 0.f; + SFM_tar = 0.f; + + for ( sb = hGrid->sfbWrap[p]; sb < hGrid->sfbWrap[p + 1]; sb++ ) + { + num_Tiles++; + SFM_src += hPrivateData->SFM_sb[sb]; + SFM_tar += hPrivateData->SFM_tb[sb]; + } + + /* compute the average */ + SFM_src /= num_Tiles; + SFM_tar /= num_Tiles; + + if ( ( p > 0 ) && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) ) + { + if ( ( p == 1 ) && ( abs( hPrivateData->igfCurrWhiteningLevel[0] - hPrivateData->igfCurrWhiteningLevel[1] ) == 2 ) ) /* OFF vs. STRONG */ + { + hPrivateData->igfCurrWhiteningLevel[0] = IGF_WHITENING_MID; + } + hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfCurrWhiteningLevel[p - 1]; + } + else if ( sp_aud_decision0 ) + { + /* Music */ + /* whitening Off: when tonality of target is more than source or tonality of target is close to that of source */ + if ( ( SFM_tar <= SFM_src ) || ( SFM_tar <= ( SFM_src + 0.5f ) ) ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; + } + + /* whitening mid: */ + if ( ( SFM_tar > ( SFM_src + 0.5f ) ) && ( SFM_tar <= ( SFM_src + 1.25f ) ) ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; + } + + /* whitening strong */ + if ( SFM_tar > ( SFM_src + 1.25f ) ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_STRONG; + } + } + else + { + /* Speech */ + /* whitening Off: when tonality of target is more than source or tonality of target is close to that of source */ + if ( ( SFM_tar <= SFM_src ) || ( SFM_tar <= ( SFM_src + 0.1f ) ) ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; + } + + /* whitening mid: */ + if ( ( SFM_tar > ( SFM_src + 0.1f ) ) && ( SFM_tar <= ( SFM_src + 0.5f ) ) ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; + } + + /* whitening strong */ + if ( SFM_tar > ( SFM_src + 0.5f ) ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_STRONG; + } + } + + SFM = SFM_tar; + } + else + { + if ( element_mode > EVS_MONO && ( hGrid->sfbWrap[p + 1] - hGrid->sfbWrap[p] ) == 1 ) + { + SFM = tmp; + } + else + { + SFM = tmp + hPrivateData->prevSFM_FIR[p] + 0.5f * hPrivateData->prevSFM_IIR[p]; + SFM = min( 2.7f, SFM ); + } + + hPrivateData->prevSFM_FIR[p] = tmp; + hPrivateData->prevSFM_IIR[p] = SFM; + + if ( SFM > hGrid->whiteningThreshold[1][p] ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_STRONG; + } + else if ( SFM > hGrid->whiteningThreshold[0][p] ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; + } + else + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; + } + } + + if ( element_mode > EVS_MONO ) + { + if ( last_core_acelp ) /* reset */ + { + set_f( hPrivateData->igfPastSFM[p], -1.f, IGF_PAST_SFM_LEN ); + hPrivateData->igfWhiteningHangoverCnt[p] = 2; + } + else + { + /* check whether change in whitening level should be allowed or not (if SFM is inside a certain margin around thresholds) */ + if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfPrevWhiteningLevel[p] && + ( ( SFM > hGrid->whiteningThreshold[0][p] - 0.15f && SFM < hGrid->whiteningThreshold[0][p] + 0.15f ) || + ( SFM > hGrid->whiteningThreshold[1][p] - 0.15f && SFM < hGrid->whiteningThreshold[1][p] + 0.15f ) ) ) + { + float mean_past_SFM = 0.f; + int16_t countable = 0; + int16_t i; + + /* compute mean of last (available) SFM values */ + for ( i = 0; i < IGF_PAST_SFM_LEN; i++ ) + { + if ( hPrivateData->igfPastSFM[p][i] >= 0.f ) + { + mean_past_SFM += hPrivateData->igfPastSFM[p][i]; + countable++; + } + } + if ( countable ) + { + mean_past_SFM /= countable; + + /* deny change in whitening level for small deviations from mean SFM */ + if ( fabs( SFM - mean_past_SFM ) < 0.2f ) + { + hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfPrevWhiteningLevel[p]; + } + } + } + } + + hPrivateData->igfPastSFM[p][hPrivateData->igfPastSFM_pos] = SFM; + } + } + + switch ( hPrivateData->igfInfo.bitRateIndex ) + { + case IGF_BITRATE_WB_9600: + case IGF_BITRATE_RF_WB_13200: + case IGF_BITRATE_WB_13200_CPE: + case IGF_BITRATE_WB_16400_CPE: + case IGF_BITRATE_RF_SWB_13200: + case IGF_BITRATE_SWB_9600: + case IGF_BITRATE_SWB_13200_CPE: + case IGF_BITRATE_SWB_16400: + case IGF_BITRATE_SWB_24400: + case IGF_BITRATE_SWB_24400_CPE: + case IGF_BITRATE_SWB_32000_CPE: + case IGF_BITRATE_SWB_32000: + case IGF_BITRATE_FB_16400: + case IGF_BITRATE_FB_24400: + case IGF_BITRATE_FB_24400_CPE: + case IGF_BITRATE_FB_32000_CPE: + case IGF_BITRATE_FB_32000: + hPrivateData->igfCurrWhiteningLevel[hGrid->nTiles - 1] = hPrivateData->igfCurrWhiteningLevel[hGrid->nTiles - 2]; + break; + default: + break; + } + } + else + { + for ( p = 0; p < hGrid->nTiles; p++ ) + { + hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; + } + } + } + else + { + /* reset filter */ + for ( p = 0; p < IGF_MAX_TILES; p++ ) + { + hPrivateData->prevSFM_FIR[p] = 0.f; + hPrivateData->prevSFM_IIR[p] = 0.f; + } + } + + if ( element_mode > EVS_MONO ) + { + if ( SFM == -1.f ) /* reset */ + { + for ( p = 0; p < hGrid->nTiles; p++ ) + { + set_f( hPrivateData->igfPastSFM[p], -1.f, IGF_PAST_SFM_LEN ); + hPrivateData->igfWhiteningHangoverCnt[p] = 2; + } + } + + /* vibrato handling */ + for ( p = 0; p < hGrid->nTiles; p = p + 2 ) + { + if ( ( hPrivateData->igfPrevWhiteningLevel[p] == IGF_WHITENING_OFF && hPrivateData->igfCurrWhiteningLevel[p] != IGF_WHITENING_OFF ) || + ( hPrivateData->igfPrevWhiteningLevel[p + 1] == IGF_WHITENING_OFF && hPrivateData->igfCurrWhiteningLevel[p + 1] != IGF_WHITENING_OFF ) ) + { + int16_t i; + float pastSfm_a[4], pastSfm_b[4]; + float pastSfmDiffSum_a, pastSfmDiffSum_b; + + for ( i = 0; i < 4; i++ ) + { + pastSfm_a[i] = hPrivateData->igfPastSFM[p][( hPrivateData->igfPastSFM_pos + 4 - i ) % IGF_PAST_SFM_LEN]; + pastSfm_b[i] = hPrivateData->igfPastSFM[p + 1][( hPrivateData->igfPastSFM_pos + 4 - i ) % IGF_PAST_SFM_LEN]; + } + pastSfmDiffSum_a = pastSfmDiffSum_b = 0; + for ( i = 0; i < 3; i++ ) + { + if ( pastSfm_a[i + 1] != -1.f ) + { + pastSfmDiffSum_a += ( pastSfm_a[i] - pastSfm_a[i + 1] ); + pastSfmDiffSum_b += ( pastSfm_b[i] - pastSfm_b[i + 1] ); + } + else + { + break; + } + } + + /* if tonality oscillates between two tiles, turn whitening off in both */ + if ( ( ( pastSfmDiffSum_a > 0.f && pastSfmDiffSum_b < 0.f ) || + ( pastSfmDiffSum_a < 0.f && pastSfmDiffSum_b > 0.f ) ) && + ( fabs( pastSfmDiffSum_a - pastSfmDiffSum_b ) > 0.5f ) ) + { + hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfCurrWhiteningLevel[p + 1] = IGF_WHITENING_OFF; + } + } + } + + /* hangover */ + for ( p = 0; p < hGrid->nTiles; p++ ) + { + if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfPrevWhiteningLevel[p] ) + { + hPrivateData->igfWhiteningHangoverCnt[p]++; + if ( hPrivateData->igfWhiteningHangoverCnt[p] == 3 ) + { + hPrivateData->igfWhiteningHangoverCnt[p] = 0; + } + else + { + hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfPrevWhiteningLevel[p]; + } + } + else + { + hPrivateData->igfWhiteningHangoverCnt[p] = 0; + } + } + + hPrivateData->igfPastSFM_pos = ( hPrivateData->igfPastSFM_pos + 1 ) % IGF_PAST_SFM_LEN; + } + + hPrivateData->wasTransient = isTransient; + + return; +} + + +/*-------------------------------------------------------------------* + * IGF_WriteWhiteningTile() + * + * write whitening levels into bitstream + *-------------------------------------------------------------------*/ + +/*! r: number of bits written */ +static int16_t IGF_WriteWhiteningTile( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *pBitOffset, /* i : ptr to bitOffset counter */ + int16_t whiteningLevel /* i : whitening levels to write */ +) +{ + int16_t totBitCount; + int16_t startBitCount; + + totBitCount = 0; + startBitCount = *pBitOffset; + + if ( whiteningLevel == IGF_WHITENING_MID ) + { + IGF_write_bits( hBstr, pBitOffset, 0, 1 ); + } + else + { + IGF_write_bits( hBstr, pBitOffset, 1, 1 ); + if ( whiteningLevel == IGF_WHITENING_OFF ) + { + IGF_write_bits( hBstr, pBitOffset, 0, 1 ); + } + else + { + IGF_write_bits( hBstr, pBitOffset, 1, 1 ); + } + } + totBitCount = *pBitOffset - startBitCount; + + return totBitCount; +} + + +/*-------------------------------------------------------------------* + * IGF_WriteWhiteningLevels() + * + * writes the whitening levels + *-------------------------------------------------------------------*/ + +/*! r: total number of bits written */ +static int16_t IGF_WriteWhiteningLevels( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF encoder */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *pBitOffset, /* i : ptr to bitOffset counter */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t isIndepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + H_IGF_GRID hGrid; + int16_t p; + int16_t nTiles; + int16_t totBitCount; + int16_t isSame; + int16_t startBitCount; + + totBitCount = 0; + isSame = 1; + startBitCount = *pBitOffset; + hPrivateData = &hIGFEnc->igfData; + hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; + nTiles = hGrid->nTiles; + + if ( isIndepFlag ) + { + isSame = 0; + } + else + { + for ( p = 0; p < nTiles; p++ ) + { + if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfPrevWhiteningLevel[p] ) + { + isSame = 0; + break; + } + } + } + + if ( isSame ) + { + IGF_write_bits( hBstr, pBitOffset, 1, 1 ); + } + else + { + if ( !isIndepFlag ) + { + IGF_write_bits( hBstr, pBitOffset, 0, 1 ); + } + + IGF_WriteWhiteningTile( hBstr, pBitOffset, hPrivateData->igfCurrWhiteningLevel[0] ); + + if ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) + { + isSame = 1; + } + else + { + for ( p = 1; p < nTiles; p++ ) + { + isSame = 1; + if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfCurrWhiteningLevel[p - 1] ) + { + isSame = 0; + break; + } + } + } + + if ( !isSame ) + { + IGF_write_bits( hBstr, pBitOffset, 1, 1 ); + + for ( p = 1; p < nTiles; p++ ) + { + IGF_WriteWhiteningTile( hBstr, pBitOffset, hPrivateData->igfCurrWhiteningLevel[p] ); + } + } + else if ( hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_SWB_48000_CPE && hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_48000_CPE ) + { + IGF_write_bits( hBstr, pBitOffset, 0, 1 ); + } + } + + totBitCount = *pBitOffset - startBitCount; + + return totBitCount; +} + + +/*-------------------------------------------------------------------* + * IGF_WriteFlatteningTrigger() + * + * write flattening trigger + *-------------------------------------------------------------------*/ + +/*! r: number of bits written */ +static int16_t IGF_WriteFlatteningTrigger( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *pBitOffset /* i : ptr to bitOffset counter */ +) +{ + int16_t totBitCount; + int16_t startBitCount; + int16_t flatteningTrigger; + + totBitCount = 0; + startBitCount = *pBitOffset; + flatteningTrigger = hIGFEnc->flatteningTrigger; + + IGF_write_bits( hBstr, pBitOffset, flatteningTrigger, 1 ); + + totBitCount = *pBitOffset - startBitCount; + + return totBitCount; +} + + +/*-------------------------------------------------------------------* + * IGF_UpdateInfo() + * + * updates the start/stop frequency of IGF according to igfGridIdx + *-------------------------------------------------------------------*/ + +static void IGF_UpdateInfo( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + const int16_t igfGridIdx /* i : IGF grid index */ +) +{ + H_IGF_GRID hGrid; + + hGrid = &hIGFEnc->igfData.igfInfo.grid[igfGridIdx]; + hIGFEnc->infoStartFrequency = hGrid->startFrequency; + hIGFEnc->infoStopFrequency = hGrid->stopFrequency; + hIGFEnc->infoStartLine = hGrid->startLine; + hIGFEnc->infoStopLine = hGrid->stopLine; + + return; +} + + +/*-------------------------------------------------------------------* + * IGFEncWriteBitstream() + * + * IGF bitstream writer + *-------------------------------------------------------------------*/ + +/*! r: number of bits written per frame */ +int16_t IGFEncWriteBitstream( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *pBitOffset, /* i : ptr to bitOffset counter */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t isIndepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ +) +{ + int16_t igfAllZero; + int16_t startBitCount = *pBitOffset; + + hIGFEnc->infoTotalBitsPerFrameWritten = 0; + if ( isIndepFlag ) + { + hIGFEnc->infoTotalBitsWritten = 0; + } + + IGF_WriteEnvelope( hIGFEnc, hBstr, pBitOffset, igfGridIdx, isIndepFlag, &igfAllZero ); + + IGF_WriteWhiteningLevels( hIGFEnc, hBstr, pBitOffset, igfGridIdx, isIndepFlag ); + + IGF_WriteFlatteningTrigger( hIGFEnc, hBstr, pBitOffset ); + + hIGFEnc->infoTotalBitsPerFrameWritten = ( *pBitOffset - startBitCount ); + hIGFEnc->infoTotalBitsWritten += hIGFEnc->infoTotalBitsPerFrameWritten; + + return hIGFEnc->infoTotalBitsPerFrameWritten; +} + + +/*-------------------------------------------------------------------* + * IGFEncSetMode() + * + * sets the IGF mode according to given bitrate + *-------------------------------------------------------------------*/ + +void IGFEncSetMode( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i/o: instance handle of IGF Encoder */ + const int32_t total_brate, /* i : encoder total bitrate */ + const int16_t bwidth, /* i : encoder audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + int16_t i; + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + + hPrivateData = &hIGFEnc->igfData; + hPrivateData->igfBitstreamBits = 0; + set_s( hPrivateData->igfScfQuantized, 0, IGF_MAX_SFB ); + set_s( hPrivateData->igfCurrWhiteningLevel, 0, IGF_MAX_TILES ); + set_s( hPrivateData->igfPrevWhiteningLevel, 0, IGF_MAX_TILES ); + set_s( hPrivateData->igfWhiteningHangoverCnt, 0, IGF_MAX_TILES ); + + for ( i = 0; i < IGF_MAX_TILES; i++ ) + { + set_f( hPrivateData->igfPastSFM[i], -1.f, IGF_PAST_SFM_LEN ); + } + + hPrivateData->igfPastSFM_pos = 0; + + for ( i = 0; i < IGF_BITBUFSIZE / 8; i++ ) + { + hPrivateData->igfBitstream[i] = 0; + } + + hPrivateData->wasTransient = 0; + set_f( hPrivateData->prevSFM_FIR, 0, IGF_MAX_TILES ); + set_f( hPrivateData->prevSFM_IIR, 0, IGF_MAX_TILES ); + set_s( hPrivateData->dampingFactorSmoothing, 2, IGF_MAX_SFB ); + set_f( hPrivateData->prevSFM_FIR_SFB_SB, 0, IGF_MAX_SFB ); + set_f( hPrivateData->prevSFM_IIR_SFB_SB, 0, IGF_MAX_SFB ); + set_f( hPrivateData->prevSFM_FIR_SFB_TB, 0, IGF_MAX_SFB ); + set_f( hPrivateData->prevSFM_IIR_SFB_TB, 0, IGF_MAX_SFB ); + set_f( hPrivateData->prevDampingFactor_IIR, -1, IGF_MAX_SFB ); + set_s( hPrivateData->logSpec, 0, L_FRAME_PLUS ); + set_f( hPrivateData->SFM_sb, 0.f, IGF_MAX_SFB ); + set_f( hPrivateData->SFM_tb, 0.f, IGF_MAX_SFB ); + + if ( IGFCommonFuncsIGFConfiguration( total_brate, bwidth, element_mode, &hPrivateData->igfInfo, rf_mode ) ) + { + IGFSCFEncoderOpen( &hPrivateData->hIGFSCFArithEnc, &hPrivateData->igfInfo, total_brate, bwidth, element_mode, rf_mode ); + + hIGFEnc->infoSamplingRate = hPrivateData->igfInfo.sampleRate; + hIGFEnc->infoStartFrequency = hPrivateData->igfInfo.grid[0].startFrequency; + hIGFEnc->infoStopFrequency = hPrivateData->igfInfo.grid[0].stopFrequency; + hIGFEnc->infoStartLine = hPrivateData->igfInfo.grid[0].startLine; + hIGFEnc->infoStopLine = hPrivateData->igfInfo.grid[0].stopLine; + } + else + { + /* IGF configuration failed -> error! */ + hIGFEnc->infoSamplingRate = 0; + hIGFEnc->infoStartFrequency = -1; + hIGFEnc->infoStopFrequency = -1; + hIGFEnc->infoStartLine = -1; + hIGFEnc->infoStopLine = -1; + IVAS_ERROR( IVAS_ERR_INTERNAL, "IGFEncSetMode: initialization error!" ); + } + + /* reset remaining variables */ + hIGFEnc->infoTotalBitsWritten = 0; + hIGFEnc->infoTotalBitsPerFrameWritten = 0; + hIGFEnc->flatteningTrigger = 0; + hIGFEnc->tns_predictionGain = 0; + set_f( hIGFEnc->spec_be_igf, 0, N_MAX_TCX - IGF_START_MN ); + + return; +} + + +/*-------------------------------------------------------------------* + * IGFEncConcatenateBitstream() + * + * IGF bitstream concatenation for TCX10 modes + *-------------------------------------------------------------------*/ + +void IGFEncConcatenateBitstream( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + const int16_t bsBits, /* i : number of IGF bits written to list of indices */ + BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ +) +{ + int16_t i; + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + + hPrivateData = &hIGFEnc->igfData; + hBstr->next_ind -= bsBits; + + indices_to_serial_generic( &hBstr->ind_list[hBstr->next_ind], bsBits, hPrivateData->igfBitstream, &hPrivateData->igfBitstreamBits ); + + /* make sure there are no leftovers from the temporary bitstream writing */ + for ( i = 0; i < bsBits; i++ ) + { + hBstr->ind_list[i + ( hBstr->next_ind )].nb_bits = -1; + } + + hBstr->nb_bits_tot -= hIGFEnc->infoTotalBitsPerFrameWritten; + + return; +} + + +/*-------------------------------------------------------------------* + * IGFEncResetTCX10BitCounter() + * + * IGF reset bitstream bit counter for TCX10 modes + *-------------------------------------------------------------------*/ + +void IGFEncResetTCX10BitCounter( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc /* i : instance handle of IGF Encoder */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + + hPrivateData = &hIGFEnc->igfData; + hPrivateData->igfBitstreamBits = 0; + hIGFEnc->infoTotalBitsWritten = 0; + + return; +} + + +/*-------------------------------------------------------------------* + * IGFEncWriteConcatenatedBitstream() + * + * + *-------------------------------------------------------------------*/ + +/*! r: total number of bits written */ +int16_t IGFEncWriteConcatenatedBitstream( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +) +{ + IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; + int16_t i; + int16_t bitsLeft; + UWord8 *pBitstream; + + hPrivateData = &hIGFEnc->igfData; + pBitstream = hPrivateData->igfBitstream; + + for ( i = 0; i < ( hPrivateData->igfBitstreamBits >> 3 ); i++ ) + { + push_next_indice( hBstr, pBitstream[i], 8 ); + } + + bitsLeft = hPrivateData->igfBitstreamBits & 0x7; + if ( bitsLeft > 0 ) + { + push_next_indice( hBstr, pBitstream[i] >> ( 8 - bitsLeft ), bitsLeft ); + } + + return hIGFEnc->infoTotalBitsWritten; +} + + +/*-------------------------------------------------------------------* + * IGFEncApplyMono() + * + * apply the IGF encoder, main encoder interface + *-------------------------------------------------------------------*/ + +void IGFEncApplyMono( + Encoder_State *st, /* i : Encoder state */ + const int16_t igfGridIdx, /* i : IGF grid index */ + float *pMDCTSpectrum, /* i/o: MDCT spectrum */ + float *pPowerSpectrum, /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ + const int16_t isTCX20, /* i : flag indicating if the input is TCX20 or TCX10/2xTCX5 */ + const int16_t isTNSActive, /* i : flag indicating if the TNS is active */ + const int16_t sp_aud_decision0, /* i : first stage switching decision */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + float *pPowerSpectrumParameter; /* If it is NULL it informs a function that specific handling is needed */ + float att = 1.0f; + int16_t last_core_acelp; + + last_core_acelp = ( st->last_core == ACELP_CORE ); + + pPowerSpectrumParameter = !isTNSActive && isTCX20 ? pPowerSpectrum : NULL; + + IGF_UpdateInfo( st->hIGFEnc, igfGridIdx ); + + if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) + { + calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); + } + + + IGF_CalculateEnvelope( st->hIGFEnc, pMDCTSpectrum, pPowerSpectrumParameter, igfGridIdx, st->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp, st->element_mode, att ); + + pPowerSpectrumParameter = isTCX20 ? pPowerSpectrum : NULL; + + IGF_Whitening( st->hIGFEnc, pPowerSpectrumParameter, igfGridIdx, st->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp, isTNSActive, sp_aud_decision0, ( st->element_mode == IVAS_CPE_MDCT ? st->element_brate : st->total_brate ), st->element_mode ); + + IGF_ErodeSpectrum( st->hIGFEnc, pMDCTSpectrum, pPowerSpectrumParameter, igfGridIdx, 0 ); + + return; +} + + +/*-------------------------------------------------------------------* + * IGFEncApplyStereo() + * + * apply the IGF encoder, main encoder interface + *-------------------------------------------------------------------*/ + +void IGFEncApplyStereo( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ + int16_t ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ + const IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS], /* i : instance handle of IGF Encoder */ + const int16_t igfGridIdx, /* i : IGF grid index */ + Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ + float pPowerSpectrum[CPE_CHANNELS][N_MAX], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ + float *pPowerSpectrumMsInv[CPE_CHANNELS][2], /* i/o: inverse power spectrum */ + float *inv_spectrum[CPE_CHANNELS][2], /* i : inverse spectrum */ + const int16_t frameno, /* i : flag indicating index of current subfr. */ + const int16_t sp_aud_decision0, /* i : sp_aud_decision0 */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +) +{ + float *pPowerSpectrumParameter[2]; /* If it is NULL it informs a function that specific handling is needed */ + float *pPowerSpectrumParameterMsInv[2]; + int16_t coreMsMask[N_MAX]; + int16_t sfb, ch, last_core_acelp; + STEREO_MDCT_BAND_PARAMETERS *sfbConf; + + /* assumptions: stereo filling was already done on the flattened spectra + * IGF region is always coded M/S, never L/R (to be done in the encoder) + * for residual bands with stereo filling infoTcxNoise is set to zero + * both channels have the same IGF configuration + */ + + /* sanity checks: check if both channels have the same configuration...*/ + assert( ( sts[0]->core == sts[1]->core ) ); + + /* initialization */ + sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + if ( sts[0]->last_core == ACELP_CORE ) + { + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + + /* create line wise ms mask for the core bands */ + set_s( coreMsMask, 0, N_MAX ); + for ( sfb = 0; sfb < sfbConf->sfbCnt; sfb++ ) + { + set_s( &coreMsMask[sfbConf->sfbOffset[sfb]], ms_mask[frameno][sfb], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); + } + + if ( sts[0]->core == TCX_20_CORE && !sts[0]->hTcxEnc->fUseTns[frameno] && !sts[1]->hTcxEnc->fUseTns[frameno] ) + { + pPowerSpectrumParameter[0] = &pPowerSpectrum[0][0]; + pPowerSpectrumParameter[1] = &pPowerSpectrum[1][0]; + pPowerSpectrumParameterMsInv[0] = pPowerSpectrumMsInv[0][0]; + pPowerSpectrumParameterMsInv[1] = pPowerSpectrumMsInv[1][0]; + } + else + { + pPowerSpectrumParameter[0] = NULL; + pPowerSpectrumParameter[1] = NULL; + pPowerSpectrumParameterMsInv[0] = NULL; + pPowerSpectrumParameterMsInv[1] = NULL; + } + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + last_core_acelp = ( sts[ch]->last_core == ACELP_CORE ); + + IGF_UpdateInfo( hIGFEnc[ch], igfGridIdx ); + + IGF_CalculateStereoEnvelope( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum[frameno], inv_spectrum[ch][frameno], pPowerSpectrumParameter[ch], pPowerSpectrumParameterMsInv[ch], igfGridIdx, coreMsMask, sts[ch]->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp ); + + pPowerSpectrumParameter[ch] = sts[ch]->core == TCX_20_CORE ? pPowerSpectrum[ch] : NULL; + + IGF_Whitening( hIGFEnc[ch], pPowerSpectrumParameter[ch], igfGridIdx, sts[ch]->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp, ( sts[0]->hTcxEnc->fUseTns[frameno] || sts[1]->hTcxEnc->fUseTns[frameno] ), sp_aud_decision0, element_brate, sts[ch]->element_mode ); + + IGF_ErodeSpectrum( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum[frameno], pPowerSpectrumParameter[ch], igfGridIdx, mct_on ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGFSaveSpectrumForITF() + * + * + *-------------------------------------------------------------------*/ + +void IGFSaveSpectrumForITF( + IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i/o: instance handle of IGF Encoder */ + const int16_t igfGridIdx, /* i : IGF grid index */ + const float *pITFSpectrum /* i : MDCT spectrum */ +) +{ + IGF_UpdateInfo( hIGFEnc, igfGridIdx ); + + mvr2r( pITFSpectrum + IGF_START_MN, hIGFEnc->spec_be_igf, hIGFEnc->infoStopLine - IGF_START_MN ); + + return; +} diff --git a/lib_enc/igf_scf_enc.c b/lib_enc/igf_scf_enc.c new file mode 100644 index 0000000000..b1a3842b8f --- /dev/null +++ b/lib_enc/igf_scf_enc.c @@ -0,0 +1,385 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_enc.h" +#include "stat_com.h" +#include "cnst.h" +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * IGFSCFEncoderOpen() + * + * initialization of an instance of this module, pass a ptr to a hPublicData + *---------------------------------------------------------------------*/ + +void IGFSCFEncoderOpen( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data */ + H_IGF_INFO hIgfInfo, /* i : IGF info handle */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + + hPublicData->ptrBitIndex = 0; + hPublicData->bitCount = 0; + hPublicData->Tsave = 0; + hPublicData->contex_saved = 0; + hPublicData->acState.low = 0; + hPublicData->acState.high = 0; + hPublicData->acState.bits_to_follow = 0; + set_s( hPublicData->prev, 0, 64 ); + set_s( hPublicData->prevSave, 0, 64 ); + + hPublicData->scfCountLongBlock[0] = hIgfInfo->grid[0].swb_offset_len - 1; + hPublicData->scfCountLongBlock[1] = hIgfInfo->grid[1].swb_offset_len - 1; + hPublicData->scfCountLongBlock[2] = hIgfInfo->grid[2].swb_offset_len - 1; + hPublicData->t = 0; /* protect against the invalid request of starting encoding with a dependent block */ + + IGFCommonFuncsIGFGetCFTables( total_brate, bwidth, element_mode, rf_mode, &hPublicData->cf_se00, &hPublicData->cf_se01, &hPublicData->cf_off_se01, &hPublicData->cf_se02, &hPublicData->cf_off_se02, &hPublicData->cf_se10, &hPublicData->cf_off_se10, &hPublicData->cf_se11, &hPublicData->cf_off_se11 ); + + return; +} + + +/*---------------------------------------------------------------------* + * quant_ctx() + * + * + *---------------------------------------------------------------------*/ + +static int16_t quant_ctx( + const int16_t ctx ) +{ + /* + ctx ... -5 -4 -3 -2 -1 0 1 2 3 4 5 ... + Q(ctx)... -3 -3 -3 -2 -1 0 1 2 3 3 3 ... + */ + if ( abs( ctx ) <= 3 ) + { + return ctx; + } + else if ( ctx > 3 ) + { + return 3; + } + else /* ctx < -3 */ + { + return -3; + } +} + + +/*---------------------------------------------------------------------* + * arith_encode_bits() + * + * + *---------------------------------------------------------------------*/ + +static void arith_encode_bits( + IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ + int16_t *ptr, /* i : pointer to expanded bit buffer, one bit in each short*/ + const int16_t x, /* i : value to encode */ + const int16_t nBits /* i : number of bits to encode */ +) +{ + int16_t i; + int16_t bit; + + for ( i = nBits - 1; i >= 0; --i ) + { + bit = ( x >> i ) & 1; + hPrivateData->ptrBitIndex = ari_encode_14bits_sign( ptr, hPrivateData->ptrBitIndex, MAX16B, /* disable the bit count limitation */ &hPrivateData->acState, bit ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * arith_encode_residual() + * + * + *---------------------------------------------------------------------*/ + +static void arith_encode_residual( + IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ + int16_t *ptr, /* i : pointer to expanded bit buffer, one bit in each short */ + int16_t x, /* i : prediction residual to encode */ + const uint16_t *cumulativeFrequencyTable, /* i : cumulative frequency table to be used */ + const int16_t tableOffset /* i : offset used to align the table */ +) +{ + int16_t extra; + + x += tableOffset; + if ( ( x >= IGF_MIN_ENC_SEPARATE ) && ( x <= IGF_MAX_ENC_SEPARATE ) ) + { + /* encode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ + hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, ( x - IGF_MIN_ENC_SEPARATE ) + 1, cumulativeFrequencyTable ); + + return; + } + else if ( x < IGF_MIN_ENC_SEPARATE ) + { + /* send escape code 0 to indicate x <= IGF_MIN_ENC_SEPARATE - 1 */ + extra = ( IGF_MIN_ENC_SEPARATE - 1 ) - x; + hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, 0, cumulativeFrequencyTable ); + } + else + { + /* x > IGF_MAX_ENC_SEPARATE */ + /* send escape code (IGF_SYMBOLS_IN_TABLE - 1) to indicate x >= IGF_MAX_ENC_SEPARATE + 1 */ + extra = x - ( IGF_MAX_ENC_SEPARATE + 1 ); + hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, IGF_SYMBOLS_IN_TABLE - 1, cumulativeFrequencyTable ); + } + + /* encode one of the tails of the distribution */ + if ( extra < 15 ) + { + /* encode extra with 4 bits if extra < 15 */ + arith_encode_bits( hPrivateData, ptr, extra, 4 ); + } + else + { + /* extra >= 15 */ + /* send escape code 15 to indicate extra >= 15 */ + arith_encode_bits( hPrivateData, ptr, 15, 4 ); + extra -= 15; + + if ( extra < 63 ) + { + /* encode additional extra with 6 bits */ + arith_encode_bits( hPrivateData, ptr, extra, 6 ); + } + else /* extra >= 63 */ + { + arith_encode_bits( hPrivateData, ptr, 63, 6 ); + extra -= 63; + /* encode safety extra with 7 bits */ + arith_encode_bits( hPrivateData, ptr, extra, 7 ); + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * encode_sfe_vector() + * + * + *---------------------------------------------------------------------*/ + +static void encode_sfe_vector( + IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ + int16_t *ptr, /* i : pointer to expanded bit buffer, one bit in each short */ + const int16_t t, /* i : frame counter reset to 0 at each independent frame */ + int16_t *prev_x, /* i : previous vector */ + int16_t *x, /* i : current vector to encode */ + const int16_t length /* i : number of elements to encode */ +) +{ + /* + f + ^ + | d a x + | c b + | e --> t + */ + int16_t f, pred; + int16_t ctx, ctx_f, ctx_t; + + for ( f = 0; f < length; f++ ) + { + if ( t == 0 ) + { + if ( f == 0 ) + { + /* encode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ + hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, x[f] >> 2, hPrivateData->cf_se00 ); + arith_encode_bits( hPrivateData, ptr, x[f] & 3, 2 ); /* LSBs as 2 bit raw */ + } + else if ( f == 1 ) + { + pred = x[f - 1]; /* pred = b */ + arith_encode_residual( hPrivateData, ptr, x[f] - pred, hPrivateData->cf_se01, hPrivateData->cf_off_se01 ); + } + else + { + /* f >= 2 */ + pred = x[f - 1]; /* pred = b */ + ctx = quant_ctx( x[f - 1] - x[f - 2] ); /* Q(b - e) */ + arith_encode_residual( hPrivateData, ptr, x[f] - pred, &hPrivateData->cf_se02[( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx )], hPrivateData->cf_off_se02[IGF_CTX_OFFSET + ctx] ); + } + } + else + { + /* t == 1 */ + if ( f == 0 ) + { + pred = prev_x[f]; /* pred = a */ + arith_encode_residual( hPrivateData, ptr, x[f] - pred, hPrivateData->cf_se10, hPrivateData->cf_off_se10 ); + } + else + { + /* (t == 1) && (f >= 1) */ + pred = prev_x[f] + x[f - 1] - prev_x[f - 1]; /* pred = a + b - c */ + ctx_f = quant_ctx( prev_x[f] - prev_x[f - 1] ); /* Q(a - c) */ + ctx_t = quant_ctx( x[f - 1] - prev_x[f - 1] ); /* Q(b - c) */ + arith_encode_residual( hPrivateData, ptr, x[f] - pred, &hPrivateData->cf_se11[( IGF_SYMBOLS_IN_TABLE + 1 ) * IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx_f )], hPrivateData->cf_off_se11[IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_CTX_OFFSET + ctx_f )] ); + } + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * IGFSCFEncoderReset() + * + * Reset of Arith enc context memory + *---------------------------------------------------------------------*/ + +void IGFSCFEncoderReset( + IGFSCFENC_INSTANCE_HANDLE hPublicData /* i/o: handle to public data */ +) +{ + hPublicData->t = 0; + + /* we do not need to fill hPublicData->prev with zeros, because when t = 0 no previous information is used */ + + return; +} + + +/*---------------------------------------------------------------------* + * IGFSCFEncoderEncode() + * + * main IGF encoder function + *---------------------------------------------------------------------*/ + +int16_t IGFSCFEncoderEncode( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t bitCount, /* i : offset to the first bit in bitbuffer which should be readed by iisArithDecoderDecode function */ + int16_t *sfe, /* i : ptr to an array which contain quantized scalefactor energies */ + const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const int16_t indepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ +) +{ + int16_t ptr[IGF_BITBUFSIZE]; /* temporary expanded bit buffer, one bit in each short */ + int16_t i; + + /* insert data: */ + hPublicData->ptrBitIndex = 0; + hPublicData->bitCount = bitCount; + ari_start_encoding_14bits( &hPublicData->acState ); /* start AC encoding */ + + /* check if coder needs a reset and do it if necessary */ + if ( indepFlag ) + { + IGFSCFEncoderReset( hPublicData ); + } + + encode_sfe_vector( hPublicData, ptr, hPublicData->t, hPublicData->prev, sfe, hPublicData->scfCountLongBlock[igfGridIdx] ); + + hPublicData->ptrBitIndex = ari_done_encoding_14bits( ptr, hPublicData->ptrBitIndex, &hPublicData->acState ); /* finish AC encoding */ + hPublicData->bitCount = hPublicData->bitCount + hPublicData->ptrBitIndex; + + /* advancing history: */ + mvs2s( sfe, hPublicData->prev, hPublicData->scfCountLongBlock[igfGridIdx] ); + hPublicData->t++; + + /* copy the bits from the temporary bit buffer, if doRealEncoding is enabled */ + if ( hBstr ) + { + for ( i = 0; i < hPublicData->ptrBitIndex; ++i ) + { + push_next_indice( hBstr, ptr[i], 1 ); + } + } + + /* return next bit offset in the stream */ + return hPublicData->bitCount; +} + + +/*---------------------------------------------------------------------* + * IGFSCFEncoderSaveContextState() + * + * for a closed loop enc, the ArithEncoder needs to memorize the context + *---------------------------------------------------------------------*/ + +void IGFSCFEncoderSaveContextState( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ + const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ +) +{ + hPublicData->Tsave = hPublicData->t; + + mvs2s( hPublicData->prev, hPublicData->prevSave, hPublicData->scfCountLongBlock[igfGridIdx] ); + + return; +} + + +/*---------------------------------------------------------------------* + * IGFSCFEncoderRestoreContextState() + * + * for a closed loop enc, the ArithEncoder needs to memorize the context + *---------------------------------------------------------------------*/ + +void IGFSCFEncoderRestoreContextState( + IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ + const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ +) +{ + hPublicData->t = hPublicData->Tsave; + + mvs2s( hPublicData->prevSave, hPublicData->prev, hPublicData->scfCountLongBlock[igfGridIdx] ); + + return; +} diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c new file mode 100644 index 0000000000..9d355b8370 --- /dev/null +++ b/lib_enc/init_enc.c @@ -0,0 +1,895 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * init_encoder() + * + * Initialization of state variables + *-----------------------------------------------------------------------*/ + +ivas_error init_encoder( + Encoder_State *st, /* i/o: state structure */ + const int16_t idchan, /* i : channel ID */ + const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */ + const int16_t interval_SID, /* i : interval for SID update */ + const int16_t vad_only_flag /* i : flag to indicate front-VAD structure */ +) +{ + int16_t i; + ivas_error error; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * General parameters + *-----------------------------------------------------------------*/ + + if ( st->Opt_AMR_WB ) + { + st->last_core = AMR_WB_CORE; + } + else + { + st->last_core = -1; + } + + st->L_frame = L_FRAME; + st->last_coder_type = GENERIC; + st->coder_type = GENERIC; + st->last_total_brate = st->total_brate; + st->last_bits_frame_nominal = -1; + st->last_total_brate_cng = -1; + st->last_core_brate = st->total_brate; + st->dtx_sce_sba = 0; + st->extl = -1; + st->last_extl = -1; + st->last_L_frame = L_FRAME; + st->rate_switching_reset = 0; + st->rate_switching_reset_16kHz = 0; + st->clas = UNVOICED_CLAS; + st->low_rate_mode = 0; + st->ini_frame = 0; + + st->coder_type_raw = VOICED; + st->last_coder_type_raw = st->coder_type_raw; + + st->flag_ACELP16k = set_ACELP_flag( st->element_mode, st->total_brate, st->total_brate, idchan, 0, -1, -1 ); + + /*-----------------------------------------------------------------* + * Bitstream + *-----------------------------------------------------------------*/ + + if ( !vad_only_flag ) + { + if ( ( st->hBstr = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) ); + } + } + else + { + st->hBstr = NULL; + } + + /*-----------------------------------------------------------------* + * Pre-processing and ACELP core parameters + *-----------------------------------------------------------------*/ + + mvr2r( GEWB_Ave, st->mem_AR, M ); + mvr2r( GEWB_Ave, st->lsfoldbfi0, M ); + mvr2r( GEWB_Ave, st->lsfoldbfi1, M ); + mvr2r( GEWB_Ave, st->lsf_adaptive_mean, M ); + + st->next_force_safety_net = 0; + + st->pstreaklen = 0; + st->streaklimit = 1.0f; + set_f( st->mem_MA, 0, M ); + + init_gp_clip( st->clip_var ); + pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); + set_f( st->old_wsp, 0, L_WSP_MEM ); + set_f( st->old_wsp2, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); + + st->mem_preemph = 0.0f; + st->mem_preemph16k = 0.0f; + st->mem_preemph_enc = 0.0; + + /* AVQ pre-quantizer memory */ + st->mem_preemp_preQ = 0.0f; + st->mem_deemp_preQ = 0.0f; + st->last_nq_preQ = 0; + st->last_code_preq = 0; + st->use_acelp_preq = 0; + st->last_harm_flag_acelp = 0; + + /* (Decimated) Weighted Speech Memory */ + st->mem_wsp_enc = 0.0; + st->mem_wsp = 0.0f; + + set_f( st->mem_decim2, 0, 3 ); + set_f( st->Bin_E, 0, L_FFT ); + + st->ee_old = 10.0f; + st->Nb_ACELP_frames = 0; + st->audio_frame_cnt = AUDIO_COUNTER_INI; /* Initialization of the audio frame counter mildly into the audio mode */ + + /* adaptive lag window memory */ + st->old_pitch_la = 0; + + if ( st->input_Fs == 8000 ) + { + st->min_band = 1; + st->max_band = 16; + } + else + { + st->min_band = 0; + st->max_band = 19; + } + + if ( st->Opt_AMR_WB ) + { + mvr2r( mean_isf_amr_wb, st->lsf_old, M ); + isf2isp( st->lsf_old, st->lsp_old1, M, INT_FS_12k8 ); + } + else + { + mvr2r( GEWB_Ave, st->lsf_old, M ); + lsf2lsp( st->lsf_old, st->lsp_old1, M, INT_FS_12k8 ); + } + + mvr2r( st->lsf_old, st->lsf_old1, M ); + mvr2r( st->lsp_old1, st->lsp_old, M ); + mvr2r( st->lsp_old, st->lsp_old16k, M ); + mvr2r( st->lsp_old, st->lspold_enc, M ); + + st->stab_fac = 0.0f; + + /* Bass post-filter memories - encoder side of MODE2 */ + st->bpf_off = 0; + st->pst_mem_deemp_err = 0.0f; + st->pst_lp_ener = 0.0f; + + /* TC coder type */ + st->tc_cnt = 0; + + /* find_uv() parameters */ + st->old_dE1 = 0.0f; + st->old_ind_deltaMax = 0; + set_f( st->old_enr_ssf, 0.0f, 2 * NB_SSF ); + st->spike_hyst = -1; + + /* stereo switching memories */ + st->mem_preemph_DFT = 0.0f; + set_f( st->inp_12k8_mem_stereo_sw, 0, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); + st->mem_preemph16k_DFT = 0.0f; + set_f( st->inp_16k_mem_stereo_sw, 0, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); + + st->sharpFlag = 0; + + /* Stationary noise UV modification */ + st->ge_sm = 10; + st->uv_count = 0; + st->act_count = 3; + mvr2r( st->lsp_old, st->lspold_s, M ); + st->noimix_seed = RANDOM_INITSEED; + st->min_alpha = 1; + st->exc_pe = 0; + + /* FEC */ + st->last_clas = UNVOICED_CLAS; + st->prev_fmerit = 0.0f; + st->fmerit_dt = 0.0f; + st->Last_pulse_pos = 0; + + for ( i = 0; i < 2 * NB_SUBFR16k; i++ ) + { + st->old_pitch_buf[i] = L_SUBFR; + } + + /* mode1 core switching */ + st->old_Es_pred = 0; + set_f( st->old_Aq_12_8 + 1, 0, M ); + st->old_Aq_12_8[0] = 1; + + /* stable short pitch detection */ + st->voicing0_sm = 0; + st->voicing_sm = 0; + st->LF_EnergyRatio_sm = 1; + st->predecision_flag = 0; + st->diff_sm = 0; + st->energy_sm = 0; + + set_s( st->pitch, L_SUBFR, 3 ); + set_f( st->voicing, 0.0f, 3 ); + + /*-----------------------------------------------------------------* + * General signal buffers + *-----------------------------------------------------------------*/ + + if ( !vad_only_flag ) + { + if ( ( st->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) count_malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) ); + } + + st->Bin_E_old = st->hSignalBuf->Bin_E_old; + st->mem_decim = st->hSignalBuf->mem_decim; + st->mem_decim16k = st->hSignalBuf->mem_decim16k; + st->old_inp_12k8 = st->hSignalBuf->old_inp_12k8; + st->old_inp_16k = st->hSignalBuf->old_inp_16k; + st->buf_speech_enc_pe = st->hSignalBuf->buf_speech_enc_pe; + st->buf_synth = st->hSignalBuf->buf_synth; + st->buf_speech_enc = st->hSignalBuf->buf_speech_enc; + st->buf_wspeech_enc = st->hSignalBuf->buf_wspeech_enc; + + /* initializations */ + set_f( st->Bin_E_old, 0, L_FFT / 2 ); + set_f( st->mem_decim, 0, 2 * L_FILT_MAX ); + set_f( st->mem_decim16k, 0, 2 * L_FILT_MAX ); + set_f( st->old_inp_12k8, 0, L_INP_MEM ); + set_f( st->old_inp_16k, 0, L_INP_MEM ); + + st->input_buff = st->hSignalBuf->input_buff; + set_zero( st->input_buff, L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ); + st->old_input_signal = st->input_buff; + if ( st->element_mode == EVS_MONO ) + { + st->input = st->input_buff + st->input_Fs / FRAMES_PER_SEC + NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + } + else + { + st->input = st->input_buff + st->input_Fs / FRAMES_PER_SEC; + } + } + else + { + st->hSignalBuf = NULL; + st->Bin_E_old = NULL; + st->mem_decim = NULL; + st->mem_decim16k = NULL; + st->old_inp_12k8 = NULL; + st->old_inp_16k = NULL; + st->buf_speech_enc_pe = NULL; + st->buf_synth = NULL; + st->buf_speech_enc = NULL; + st->buf_wspeech_enc = NULL; + st->input_buff = NULL; + } + + /*-----------------------------------------------------------------* + * Noise estimator + *-----------------------------------------------------------------*/ + + if ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) + { + if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) count_malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ); + } + + noise_est_init( st->hNoiseEst ); + } + else + { + st->hNoiseEst = NULL; + } + + /*-----------------------------------------------------------------* + * VAD + *-----------------------------------------------------------------*/ + + st->vad_flag = 1; + st->localVAD = 0; + + if ( ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) && ( !vad_only_flag ) ) + { + if ( ( st->hVAD = (VAD_HANDLE) count_malloc( sizeof( VAD_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); + } + + wb_vad_init( st->hVAD ); + } + else + { + st->hVAD = NULL; + } + st->Pos_relE_cnt = 20; + + /* CLDFB-based VAD */ + if ( st->element_mode == EVS_MONO ) + { + if ( ( st->hVAD_CLDFB = (VAD_CLDFB_HANDLE) count_malloc( sizeof( T_CldfbVadState ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB VAD\n" ) ); + } + + vad_init( st->hVAD_CLDFB ); + } + else + { + st->hVAD_CLDFB = NULL; + } + + /*-----------------------------------------------------------------* + * Speech/music classifier + *-----------------------------------------------------------------*/ + + if ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) + { + if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) count_malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); + } + + speech_music_clas_init( st->hSpMusClas ); + + st->sp_aud_decision0 = 0; + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + } + else + { + st->hSpMusClas = NULL; + } + + + /*-----------------------------------------------------------------* + * WB, SWB and FB bandwidth detector + *-----------------------------------------------------------------*/ + + st->lt_mean_NB = 0; + st->lt_mean_WB = 0; + st->lt_mean_SWB = 0; + st->count_WB = BWD_COUNT_MAX; + st->count_SWB = BWD_COUNT_MAX; + st->count_FB = BWD_COUNT_MAX; + st->bwidth = st->max_bwidth; + st->last_input_bwidth = st->bwidth; + st->last_bwidth = st->bwidth; + st->last_bwidth_cng = st->bwidth; + st->bwidth_sw_cnt = 0; + + + /*-----------------------------------------------------------------* + * DTX + *-----------------------------------------------------------------*/ + + st->lp_speech = 45.0f; /* Initialize the long-term active speech level in dB */ + st->lp_noise = 0.0f; + st->flag_noisy_speech_snr = 0; + st->fd_cng_reset_flag = 0; + st->cng_type = -1; + st->bckr_tilt_lt = 0.f; + st->active_cnt = 0; + + if ( ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO ) || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) + { + if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) count_malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) ); + } + dtx_enc_init( st, var_SID_rate_flag, interval_SID ); + } + else + { + st->hDtxEnc = NULL; + } + + /*-----------------------------------------------------------------* + * No other handles needed to be allocated for front-VAD structure + *-----------------------------------------------------------------*/ + + if ( vad_only_flag ) + { + st->hTdCngEnc = NULL; + st->cldfbAnaEnc = NULL; + st->hFdCngEnc = NULL; + st->hSC_VBR = NULL; + st->hAmrwb_IO = NULL; + st->hLPDmem = NULL; + st->hGSCEnc = NULL; + st->hBWE_TD = NULL; + st->cldfbSynTd = NULL; + st->hBWE_FD = NULL; + st->hHQ_core = NULL; + st->hRF = NULL; + st->hTECEnc = NULL; + st->hTcxEnc = NULL; + st->hTcxCfg = NULL; + st->hIGFEnc = NULL; + st->hPlcExt = NULL; + st->hTranDet = NULL; + + st->element_mode = IVAS_SCE; + st->idchan = 100; /* indicates hCoreCoderVAD */ + st->core = -1; + st->rf_mode = 0; + + return error; + } + + /*-----------------------------------------------------------------* + * LP-CNG + *-----------------------------------------------------------------*/ + + if ( ( ( idchan == 0 && st->Opt_DTX_ON && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO ) ) + { + if ( ( st->hTdCngEnc = (TD_CNG_ENC_HANDLE) count_malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); + } + + td_cng_enc_init( st->hTdCngEnc, st->Opt_DTX_ON, st->max_bwidth ); + } + else + { + st->hTdCngEnc = NULL; + } + + /*-----------------------------------------------------------------* + * CLDFB & resampling tools parameters + *-----------------------------------------------------------------*/ + + if ( ( st->element_mode != IVAS_CPE_MDCT && idchan == 0 ) || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) + { + if ( ( error = openCldfb( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + st->cldfbAnaEnc = NULL; + } + + st->currEnergyLookAhead = 6.1e-5f; + + /*-----------------------------------------------------------------* + * SC-VBR parameters + *-----------------------------------------------------------------*/ + + if ( st->Opt_SC_VBR || st->element_mode == EVS_MONO ) + { + if ( ( st->hSC_VBR = (SC_VBR_ENC_HANDLE) count_malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); + } + + sc_vbr_enc_init( st->hSC_VBR ); + } + else + { + st->hSC_VBR = NULL; + } + + st->last_Opt_SC_VBR = 0; + + + /*-----------------------------------------------------------------* + * AMR-WB IO initialization + *-----------------------------------------------------------------*/ + + if ( st->Opt_AMR_WB || st->element_mode == EVS_MONO ) + { + if ( ( st->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) count_malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); + } + + amr_wb_enc_init( st->hAmrwb_IO ); + } + else + { + st->hAmrwb_IO = NULL; + } + + /*-----------------------------------------------------------------* + * ACELP LPDmem + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + if ( ( st->hLPDmem = (LPD_state_HANDLE) count_malloc( sizeof( LPD_state ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) ); + } + + LPDmem_enc_init( st->hLPDmem ); + } + else + { + st->hLPDmem = NULL; + } + + /*-----------------------------------------------------------------* + * parameters for AC coder type (GSC) + *-----------------------------------------------------------------*/ + + st->GSC_noisy_speech = 0; + st->GSC_IVAS_mode = 0; + + if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) + { + if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) count_malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); + } + + GSC_enc_init( st->hGSCEnc ); + } + else + { + st->hGSCEnc = NULL; + } + + /*-----------------------------------------------------------------* + * TBE parameters + *-----------------------------------------------------------------*/ + + if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) + { + if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) count_malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); + } + + if ( ( error = openCldfb( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + + InitSWBencBuffer( st->hBWE_TD ); + ResetSHBbuffer_Enc( st->hBWE_TD ); + } + else + { + st->hBWE_TD = NULL; + st->cldfbSynTd = NULL; + } + + /*-----------------------------------------------------------------* + * SWB BWE parameters + *-----------------------------------------------------------------*/ + + if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) + { + if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) count_malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); + } + + fd_bwe_enc_init( st->hBWE_FD ); + } + else + { + st->hBWE_FD = NULL; + } + + /*-----------------------------------------------------------------* + * HQ core parameters + *-----------------------------------------------------------------*/ + + if ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_MDCT && idchan == 0 ) + { + if ( ( st->hHQ_core = (HQ_ENC_HANDLE) count_malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); + } + + HQ_core_enc_init( st->hHQ_core ); + } + else + { + st->hHQ_core = NULL; + } + + /* init memory for detect_transient(), used by HQ core and swb_bwe_enc */ + st->old_hpfilt_in = 0.0f; + st->old_hpfilt_out = 0.0f; + st->EnergyLT = 0.0f; + st->Energy_Old = 0; + st->TransientHangOver = 0; + + /*-----------------------------------------------------------------* + * Channel-aware mode + *-----------------------------------------------------------------*/ + + if ( !st->Opt_RF_ON || ( st->bwidth != WB && st->bwidth != SWB ) || st->total_brate != ACELP_13k20 ) + { + if ( st->Opt_RF_ON ) + { // VE: this should be printed outside of library + printf( "\nWarning: Channel-aware mode only available for 13.2 kbps WB/SWB\n" ); + printf( " Switched to normal mode!\n" ); + st->Opt_RF_ON = 0; + st->rf_fec_offset = 0; + } + st->rf_mode = 0; + } + else + { + st->rf_mode = st->Opt_RF_ON; + } + + st->rf_mode_last = st->rf_mode; + + if ( st->Opt_RF_ON || st->element_mode == EVS_MONO ) + { + if ( ( st->hRF = (RF_ENC_HANDLE) count_malloc( sizeof( RF_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) ); + } + + /* initialize RF indice buffers */ + reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); + } + else + { + st->hRF = NULL; + } + + /*-----------------------------------------------------------------* + * Temporal Envelope Coding + *-----------------------------------------------------------------*/ + + if ( st->element_mode == EVS_MONO ) + { + if ( ( st->hTECEnc = (TEC_ENC_HANDLE) count_malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) ); + } + } + else + { + st->hTECEnc = NULL; + } + /* note: initialization done later in init_coder_ace_plus() */ + + /*-----------------------------------------------------------------* + * TCX core + *-----------------------------------------------------------------*/ + + // VE: reduction possible for MCT_CHAN_MODE_LFE channel - see I1-172 + if ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) + { + if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) count_malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) ); + } + + /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */ + st->hTcxEnc->spectrum[0] = st->hTcxEnc->spectrum_long; + st->hTcxEnc->spectrum[1] = st->hTcxEnc->spectrum_long + N_TCX10_MAX; + + set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); + + /* MDCT selector */ + MDCT_selector_reset( st->hTcxEnc ); + + /* MDCT classifier */ + MDCT_classifier_reset( st->hTcxEnc ); + + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); + } + } + else + { + st->hTcxEnc = NULL; + st->hTcxCfg = NULL; + } + + /*-----------------------------------------------------------------* + * IGF + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) count_malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); + } + } + else + { + st->hIGFEnc = NULL; + } + + /*-----------------------------------------------------------------* + * Mode 2 initialization + *-----------------------------------------------------------------*/ + + st->last_sr_core = st->last_L_frame * FRAMES_PER_SEC; + + if ( st->codec_mode == MODE2 || st->element_mode > EVS_MONO ) + { + st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode, st->mct_chan_mode ); + } + else + { + st->igf = 0; + } + + /* PLC encoder */ + if ( st->element_mode == EVS_MONO ) + { + if ( ( st->hPlcExt = (PLC_ENC_EVS_HANDLE) count_malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) ); + } + } + else + { + st->hPlcExt = NULL; + } + + /* Init Mode 2 core coder */ + st->last_totalNoise = 0.f; + set_f( st->totalNoise_increase_hist, 0.f, TOTALNOISE_HIST_SIZE ); + st->totalNoise_increase_len = 0; + + init_coder_ace_plus( st, st->last_total_brate, 0 /* initialization value */ ); + + /*-----------------------------------------------------------------* + * FD-CNG encoder + *-----------------------------------------------------------------*/ + + if ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) + { + if ( ( error = createFdCngEnc( &st->hFdCngEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + initFdCngEnc( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale ); + configureFdCngEnc( st->hFdCngEnc, st->bwidth, st->rf_mode && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate ); + } + else + { + st->hFdCngEnc = NULL; + } + + /*-----------------------------------------------------------------* + * Transient detector + *-----------------------------------------------------------------*/ + + if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( st->hTranDet = (TRAN_DET_HANDLE) count_malloc( sizeof( TRAN_DET_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Transient Detection\n" ) ); + } + + if ( st->element_mode > EVS_MONO ) + { + InitTransientDetection( (int16_t) ( st->input_Fs / FRAMES_PER_SEC ), 0, st->hTranDet, 1 ); + } + else + { + InitTransientDetection( (int16_t) ( st->input_Fs / FRAMES_PER_SEC ), NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ), st->hTranDet, 0 ); + } + } + else + { + st->hTranDet = NULL; + } + + /*-----------------------------------------------------------------* + * IVAS parameters + *-----------------------------------------------------------------*/ + + st->tdm_LRTD_flag = 0; + st->cng_dirac_flag = 0; + st->cng_spar_flag = 0; + st->bits_frame_channel = 0; + st->side_bits_frame_channel = 0; + + return error; +} + + +/*-----------------------------------------------------------------------* + * LPDmem_enc_init() + * + * Initialization of ACELP LPDmem state variables + *-----------------------------------------------------------------------*/ + +void LPDmem_enc_init( + LPD_state_HANDLE hLPDmem /* i/o: LP memories */ +) +{ + set_zero( hLPDmem->syn, 1 + M ); + + set_f( hLPDmem->old_exc, 0, L_EXC_MEM ); + hLPDmem->mem_w0 = 0.0f; + set_f( hLPDmem->mem_syn, 0, M ); + set_f( hLPDmem->mem_syn1, 0, M ); + set_f( hLPDmem->mem_syn2, 0, M ); + set_zero( hLPDmem->mem_syn_r, L_SYN_MEM ); + set_f( hLPDmem->mem_syn3, 0, M ); + + hLPDmem->tilt_code = 0.0f; + hLPDmem->gc_threshold = 0.0f; + set_f( hLPDmem->dispMem, 0, 8 ); + + return; +} +/*-----------------------------------------------------------------------* + * destroy_encoder() + * + * Free memory which was allocated in init_encoder() + *-----------------------------------------------------------------------*/ + +void destroy_encoder( + Encoder_State *st /* i/o: Encoder static variables structure */ +) +{ + if ( st->cldfbSynTd != NULL ) + { + deleteCldfb( &st->cldfbSynTd ); + } + + if ( st->cldfbAnaEnc != NULL ) + { + deleteCldfb( &st->cldfbAnaEnc ); + } + + if ( st->hFdCngEnc != NULL ) + { + deleteFdCngEnc( &st->hFdCngEnc ); + } + + /* Close Core */ + + return; +} diff --git a/lib_enc/inov_enc.c b/lib_enc/inov_enc.c new file mode 100644 index 0000000000..c80057f055 --- /dev/null +++ b/lib_enc/inov_enc.c @@ -0,0 +1,389 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * inov_encode() + * + * Encode the algebraic innovation + *---------------------------------------------------------------------*/ + +void inov_encode( + Encoder_State *st, /* i/o: encoder state structure */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t last_L_frame, /* i : length of the last frame */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const int16_t sharpFlag, /* i : formant sharpening flag */ + const int16_t i_subfr, /* i : subframe index */ + const int16_t tc_subfr, /* i : TC subframe index */ + const float *p_Aq, /* i : LP filter coefficients */ + const float gain_pit, /* i : adaptive excitation gain */ + float *cn, /* i/o: target vector in residual domain */ + const float *exc, /* i : pointer to excitation signal frame */ + float *h1, /* i/o: weighted filter input response */ + const float tilt_code, /* i : tilt of the excitation of previous subframe */ + const float pt_pitch, /* i : pointer to current subframe fractional pitch */ + const float *xn2, /* i : target vector for innovation search */ + float *code, /* o : algebraic excitation */ + float *y2, /* o : zero-memory filtered algebraic excitation */ + int16_t *unbits, /* o : number of unused bits for EVS_PI */ + const int16_t L_subfr /* i : subframe length */ +) +{ + float dn[2 * L_SUBFR]; /* Correlation between xn2 and h1 */ + int16_t nBits, cmpl_flag; + int16_t k; + float g1, g2; + float cn2[L_SUBFR]; + float Rw[L_SUBFR]; + int16_t i, acelpautoc; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( L_frame == L_FRAME ) + { + g1 = FORMANT_SHARPENING_G1; + g2 = FORMANT_SHARPENING_G2; + } + else + { + g1 = FORMANT_SHARPENING_G1_16k; + g2 = FORMANT_SHARPENING_G2_16k; + } + + /*----------------------------------------------------------------* + * Update target vector for codebook search in residual domain + * Preemphasize the impulse response and include fixed-gain pitch contribution into impulse resp. h1[] (pitch sharpenning) + * Correlation between target xn2[] and impulse response h1[] + *----------------------------------------------------------------*/ + + if ( core_brate > ACELP_13k20 && !Opt_AMR_WB && L_subfr == L_SUBFR ) + { + acelpautoc = 1; + + cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, h1, tilt_code, pt_pitch, L_SUBFR ); + + corr_xh( h1, Rw, h1, L_SUBFR ); + + for ( k = 0; k < L_SUBFR; k++ ) + { + cn2[k] = xn2[k]; + + for ( i = 0; i < k; i++ ) + { + cn2[k] -= cn2[i] * h1[k - i]; + } + } + + E_ACELP_toeplitz_mul( Rw, cn2, dn ); + mvr2r( cn2, cn, L_SUBFR ); + } + else + { + acelpautoc = 0; + + updt_tar( cn, cn, &exc[i_subfr], gain_pit, L_subfr ); + + cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, h1, tilt_code, pt_pitch, L_subfr ); + + corr_xh( xn2, dn, h1, L_subfr ); + } + + /*-----------------------------------------------------------------* + * Set complexity reduction flag to limit the number of iterations + * in algebraic innovation search + *-----------------------------------------------------------------*/ + + cmpl_flag = 0; + + if ( st->acelp_cfg.fcb_mode ) + { + /* set number of iterations in TD stereo, secondary channel */ + if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) + { + cmpl_flag = 1; + } + } + else + { + if ( L_frame == L_FRAME && coder_type == TRANSITION ) + { + if ( core_brate == ACELP_8k00 && i_subfr == 0 && tc_subfr < L_SUBFR ) + { + cmpl_flag = 3; + } + + if ( core_brate == ACELP_11k60 && ( ( i_subfr == 0 && tc_subfr < L_SUBFR ) || tc_subfr == TC_0_0 || ( i_subfr == 3 * L_SUBFR && tc_subfr == TC_0_64 ) ) ) + { + cmpl_flag = 3; + } + + if ( ( core_brate == ACELP_13k20 || core_brate == ACELP_12k15 ) && ( ( i_subfr == 0 && tc_subfr < L_SUBFR ) || tc_subfr <= TC_0_64 ) ) + { + cmpl_flag = 3; + } + } + + if ( L_frame == L_FRAME16k ) + { + if ( core_brate <= ACELP_32k ) + { + cmpl_flag = 4; + + if ( coder_type == TRANSITION && bwidth > WB ) + { + if ( i_subfr <= L_SUBFR ) + { + cmpl_flag -= 1; + } + else + { + cmpl_flag -= 2; + } + } + } + else if ( core_brate <= ACELP_48k ) + { + cmpl_flag = 3; + + if ( coder_type == TRANSITION ) + { + if ( i_subfr <= L_SUBFR ) + { + cmpl_flag -= 1; + } + else + { + cmpl_flag -= 2; + } + } + } + else + { + cmpl_flag = 4; + + if ( coder_type == TRANSITION ) + { + if ( i_subfr <= L_SUBFR ) + { + cmpl_flag -= 1; + } + else + { + cmpl_flag -= 2; + } + } + } + + if ( coder_type == INACTIVE ) + { + cmpl_flag = 4; + } + } + + /* reduce number of iterations in a frame where there is an internal sampling rate switch in order not to increase the WC complexity */ + if ( L_frame != st->last_L_frame && core_brate > ACELP_13k20 && ( core_brate < ACELP_32k || bwidth == WB ) ) + { + if ( cmpl_flag > 1 ) + { + cmpl_flag--; + } + } + } + + /*-----------------------------------------------------------------* + * Find and encode the algebraic innovation + *-----------------------------------------------------------------*/ + + set_f( y2, 0, L_SUBFR ); + + if ( !Opt_AMR_WB ) + { + if ( st->acelp_cfg.fcb_mode ) + { + if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr] < ACELP_FIXED_CDK_NB ) + { + int16_t wordcnt, bitcnt; + int16_t prm[8]; + + if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr] >= 0 ) + { + if ( L_subfr == 2 * L_SUBFR ) + { + nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr]; + + if ( nBits == 8 ) + { + acelp_1t64( hBstr, dn, h1, code, y2, L_subfr ); + } + else + { + acelp_fast( hBstr, nBits, dn, cn, h1, code, y2, L_subfr ); + } + } + else if ( ( st->idchan == 1 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 7 ) || ( st->idchan == 0 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 3 ) ) + { + if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] == 0 ) + { + acelp_1t64( hBstr, dn, h1, code, y2, L_subfr ); + } + else + { + acelp_fast( hBstr, st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], dn, cn, h1, code, y2, L_SUBFR ); + } + } + else + { + E_ACELP_4t( dn, cn, h1, Rw, acelpautoc, code, st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], prm, L_frame, last_L_frame, st->total_brate, i_subfr, cmpl_flag ); + + wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) >> 4; + bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) & 15; + + for ( i = 0; i < wordcnt; i++ ) + { + push_indice( hBstr, IND_ALG_CDBK_4T64, prm[i], 16 ); + } + if ( bitcnt ) + { + push_indice( hBstr, IND_ALG_CDBK_4T64, prm[i], bitcnt ); + } + + /* Generate weighted code */ + set_f( y2, 0.0f, L_SUBFR ); + for ( i = 0; i < L_SUBFR; i++ ) + { + /* Code is sparse, so check which samples are non-zero */ + if ( code[i] != 0 ) + { + for ( k = 0; k < L_SUBFR - i; k++ ) + { + y2[i + k] += code[i] * h1[k]; + } + } + } + } + } + else + { + set_f( code, 0.0f, L_SUBFR ); + set_f( y2, 0.0f, L_SUBFR ); + } + } +#ifdef DEBUGGING + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid mode for acelp frame!\n" ); + } +#endif + } + else + { + nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; + + if ( nBits == 7 ) + { + acelp_1t64( hBstr, dn, h1, code, y2, L_SUBFR ); + } + else if ( nBits == 12 ) + { + acelp_2t32( hBstr, dn, h1, code, y2 ); + } + else + { + *unbits += acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, nBits, cmpl_flag, Opt_AMR_WB ); + } + } + } + else + { + if ( core_brate == ACELP_6k60 ) + { + acelp_2t32( hBstr, dn, h1, code, y2 ); + } + else if ( ( core_brate == ACELP_8k85 ) ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 20, cmpl_flag, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_12k65 ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 36, cmpl_flag, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_14k25 ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 44, cmpl_flag, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_15k85 ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 52, cmpl_flag, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_18k25 ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 64, cmpl_flag, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_19k85 ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 72, cmpl_flag, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_23k05 ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 88, cmpl_flag, Opt_AMR_WB ); + } + else if ( core_brate == ACELP_23k85 ) + { + acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 88, cmpl_flag, Opt_AMR_WB ); + } + } + + /*----------------------------------------------------------------* + * Pitch sharpening + *----------------------------------------------------------------*/ + + cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, code, tilt_code, pt_pitch, L_subfr ); + + return; +} diff --git a/lib_enc/isf_enc_amr_wb.c b/lib_enc/isf_enc_amr_wb.c new file mode 100644 index 0000000000..441c66be9b --- /dev/null +++ b/lib_enc/isf_enc_amr_wb.c @@ -0,0 +1,526 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define DICO1_NS_19b 16 /* codebook dimensions for SID ISF quantizers */ +#define DICO2_NS_19b 16 +#define DICO3_NS_19b 16 +#define DICO4_NS_19b 8 +#define DICO5_NS_19b 16 + +#define DICO1_NS_28b 64 +#define DICO2_NS_28b 64 +#define DICO3_NS_28b 64 +#define DICO4_NS_28b 32 +#define DICO5_NS_28b 32 + +#define N_SURV_MAX 4 /* maximum number of survivors */ + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void qisf_ns_28b( BSTR_ENC_HANDLE hBstr, float *isf ); +static void qisf_2s_46b( BSTR_ENC_HANDLE hBstr, float *isf, int16_t nb_surv, float *mem_AR, float *mem_MA ); +static void qisf_2s_36b( BSTR_ENC_HANDLE hBstr, float *isf, int16_t nb_surv, float *mem_AR, float *mem_MA ); +static void VQ_stage1( const float *x, const float *dico, const int16_t dim, const int16_t dico_size, int16_t *index, const int16_t surv ); +static int16_t sub_VQ( float *x, const float *dico, const int16_t dim, const int16_t dico_size, float *distance ); + + +/*-------------------------------------------------------------------* + * isf_enc_amr_wb() + * + * Quantization of ISF parameters in AMR-WB IO mode + *-------------------------------------------------------------------*/ + +void isf_enc_amr_wb( + Encoder_State *st, /* i/o: state structure */ + float *isf_new, /* i/o: quantized ISF vector */ + float *isp_new, /* i/o: ISP vector to quantize/quantized */ + float *Aq /* o : quantized A(z) for 4 subframes */ +) +{ + BSTR_ENC_HANDLE hBstr = st->hBstr; + + /*---------------------------------* + * ISF quantization of SID frames + *---------------------------------*/ + + if ( st->core_brate == SID_1k75 ) + { + qisf_ns_28b( hBstr, isf_new ); + + reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); + + isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); + + /* return if SID frame (conversion to A(z) done in the calling function) */ + return; + } + + /* check resonance for pitch clipping algorithm */ + gp_clip_test_lsf( st->element_mode, st->core_brate, isf_new, st->clip_var, 1 ); + + /*---------------------------------------* + * ISF quantization of all other frames + *---------------------------------------*/ + + if ( st->core_brate == ACELP_6k60 ) + { + qisf_2s_36b( hBstr, isf_new, 4, st->mem_AR, st->mem_MA ); + } + else if ( st->core_brate >= ACELP_8k85 ) + { + qisf_2s_46b( hBstr, isf_new, 4, st->mem_AR, st->mem_MA ); + } + + reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); + + /* convert quantized ISFs back to ISPs */ + isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); + + /*------------------------------------------------------------------* + * ISP interpolation + * A(z) calculation + *------------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + mvr2r( isf_new, st->lsf_old, M ); + mvr2r( isp_new, st->lsp_old, M ); + } + + int_lsp( L_FRAME, st->lsp_old, isp_new, Aq, M, interpol_isp_amr_wb, 1 ); + + /*------------------------------------------------------------------* + * Calculate ISF stability (distance between old ISF and current ISF) + *------------------------------------------------------------------*/ + + if ( st->last_core_brate != SID_1k75 ) + { + st->stab_fac = lsf_stab( isf_new, st->lsf_old, 1, st->L_frame ); + } + + return; +} + +/*-------------------------------------------------------------------* + * qisf_ns_28b() + * + * ISF quantizer for SID frames (only in AMR-WB IO mode) + *-------------------------------------------------------------------*/ + +static void qisf_ns_28b( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + float *isf /* i/o: unquantized/quantized ISF vector */ +) +{ + int16_t i, indice[5]; + float tmp; + + for ( i = 0; i < M; i++ ) + { + isf[i] -= mean_isf_noise_amr_wb[i]; + } + + indice[0] = sub_VQ( &isf[0], dico1_ns_28b, 2, DICO1_NS_28b, &tmp ); + indice[1] = sub_VQ( &isf[2], dico2_ns_28b, 3, DICO2_NS_28b, &tmp ); + indice[2] = sub_VQ( &isf[5], dico3_ns_28b, 3, DICO3_NS_28b, &tmp ); + indice[3] = sub_VQ( &isf[8], dico4_ns_28b, 4, DICO4_NS_28b, &tmp ); + indice[4] = sub_VQ( &isf[12], dico5_ns_28b + 4, 4, DICO5_NS_28b - 1, &tmp ) + 1; /* First vector has a problem -> do not allow */ + + /* write indices to array */ + push_indice( hBstr, IND_ISF_0_0, indice[0], 6 ); + push_indice( hBstr, IND_ISF_0_1, indice[1], 6 ); + push_indice( hBstr, IND_ISF_0_2, indice[2], 6 ); + push_indice( hBstr, IND_ISF_0_3, indice[3], 5 ); + push_indice( hBstr, IND_ISF_0_4, indice[4], 5 ); + + /* decoding the ISFs */ + disf_ns_28b( indice, isf ); + + return; +} + + +/*---------------------------------------------------------------------* + * qisf_2s_36b() + * + * ISF quantizer for AMR-WB 6k60 frames + * + * The ISF vector is quantized using two-stage MA-prediction VQ with split-by-2 + * in 1st stage and split-by-3 in the second stage. + *---------------------------------------------------------------------*/ + +static void qisf_2s_36b( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + float *isf, /* i/o: unquantized/quantized ISF vector */ + int16_t nb_surv, /* i : number of survivors (1, 2, 3 or 4) */ + float *mem_AR, /* o : quantizer memory for AR model */ + float *mem_MA /* i/o: quantizer memory for MA model */ +) +{ + int16_t i, k, indice[5], tmp_ind[2]; + int16_t surv1[N_SURV_MAX]; /* indices of survivors from 1st stage */ + float temp, min_err, distance, isf2[M]; + + /*------------------------------------------------------------------------* + * Subtract mean + *------------------------------------------------------------------------*/ + + for ( i = 0; i < M; i++ ) + { + isf[i] -= mean_isf_amr_wb[i] + MU_MA * mem_MA[i]; + } + + /*------------------------------------------------------------------------* + * Quantize ISFs 0 - 8 + *------------------------------------------------------------------------*/ + + VQ_stage1( &isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv ); + + distance = 1.0e30f; + if ( nb_surv > N_SURV_MAX ) + { + nb_surv = N_SURV_MAX; + } + + for ( k = 0; k < nb_surv; k++ ) + { + for ( i = 0; i < 9; i++ ) + { + isf2[i] = isf[i] - dico1_isf[i + surv1[k] * 9]; + } + + tmp_ind[0] = sub_VQ( &isf2[0], dico21_isf_36b, 5, SIZE_BK21_36b, &min_err ); + temp = min_err; + + tmp_ind[1] = sub_VQ( &isf2[5], dico22_isf_36b, 4, SIZE_BK22_36b, &min_err ); + temp += min_err; + + if ( temp < distance ) + { + distance = temp; + indice[0] = surv1[k]; + for ( i = 0; i < 2; i++ ) + { + indice[i + 2] = tmp_ind[i]; + } + } + } + + /*------------------------------------------------------------------------* + * Quantize ISFs 9 - 15 + *------------------------------------------------------------------------*/ + + VQ_stage1( &isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv ); + + distance = 1.0e30f; + for ( k = 0; k < nb_surv; k++ ) + { + for ( i = 0; i < 7; i++ ) + { + isf2[9 + i] = isf[9 + i] - dico2_isf[i + surv1[k] * 7]; + } + + tmp_ind[0] = sub_VQ( &isf2[9], dico23_isf_36b, 3, SIZE_BK23_36b, &min_err ); + temp = min_err; + if ( temp < distance ) + { + distance = temp; + indice[1] = surv1[k]; + indice[4] = tmp_ind[0]; + } + } + + /*------------------------------------------------------------------------* + * write indices to array + *------------------------------------------------------------------------*/ + + push_indice( hBstr, IND_ISF_0_0, indice[0], 8 ); + push_indice( hBstr, IND_ISF_0_1, indice[1], 8 ); + push_indice( hBstr, IND_ISF_1_0, indice[2], 7 ); + push_indice( hBstr, IND_ISF_1_1, indice[3], 7 ); + push_indice( hBstr, IND_ISF_1_2, indice[4], 6 ); + + /*------------------------------------------------------------------------* + * decoding the ISFs + *------------------------------------------------------------------------*/ + + disf_2s_36b( indice, isf, mem_AR, mem_MA ); + + return; +} + + +/*-------------------------------------------------------------------* + * qisf_2s_46b() + * + * ISF quantizer for all other AMR-WB frames + * + * The ISF vector is quantized using two-stage VQ with split-by-2 + * in 1st stage and split-by-5 in the second stage. + *-------------------------------------------------------------------*/ + +static void qisf_2s_46b( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + float *isf, /* i/o: unquantized/quantized ISF vector */ + int16_t nb_surv, /* i : number of survivors (1, 2, 3 or 4) */ + float *mem_AR, /* o : quantizer memory for AR model */ + float *mem_MA /* i/o: quantizer memory for MA model */ +) +{ + int16_t i, k, indice[7], tmp_ind[5]; + int16_t surv1[N_SURV_MAX]; /* indices of survivors from 1st stage */ + float temp, min_err, distance, isf2[M]; + + + /*------------------------------------------------------------------------* + * Subtract mean + *------------------------------------------------------------------------*/ + + for ( i = 0; i < M; i++ ) + { + isf[i] -= mean_isf_amr_wb[i] + MU_MA * mem_MA[i]; + } + + /*------------------------------------------------------------------------* + * Quantize ISFs 0 - 8 + *------------------------------------------------------------------------*/ + + VQ_stage1( &isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv ); + + distance = 1.0e30f; + if ( nb_surv > N_SURV_MAX ) + { + nb_surv = N_SURV_MAX; + } + + for ( k = 0; k < nb_surv; k++ ) + { + for ( i = 0; i < 9; i++ ) + { + isf2[i] = isf[i] - dico1_isf[i + surv1[k] * 9]; + } + + tmp_ind[0] = sub_VQ( &isf2[0], dico21_isf_46b, 3, SIZE_BK21, &min_err ); + temp = min_err; + tmp_ind[1] = sub_VQ( &isf2[3], dico22_isf_46b, 3, SIZE_BK22, &min_err ); + temp += min_err; + tmp_ind[2] = sub_VQ( &isf2[6], dico23_isf_46b, 3, SIZE_BK23, &min_err ); + temp += min_err; + if ( temp < distance ) + { + distance = temp; + indice[0] = surv1[k]; + for ( i = 0; i < 3; i++ ) + { + indice[i + 2] = tmp_ind[i]; + } + } + } + + /*------------------------------------------------------------------------* + * Quantize ISFs 9 - 15 + *------------------------------------------------------------------------*/ + + VQ_stage1( &isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv ); + + distance = 1.0e30f; + for ( k = 0; k < nb_surv; k++ ) + { + for ( i = 0; i < 7; i++ ) + { + isf2[9 + i] = isf[9 + i] - dico2_isf[i + surv1[k] * 7]; + } + tmp_ind[0] = sub_VQ( &isf2[9], dico24_isf_46b, 3, SIZE_BK24, &min_err ); + temp = min_err; + + tmp_ind[1] = sub_VQ( &isf2[12], dico25_isf_46b, 4, SIZE_BK25, &min_err ); + temp += min_err; + + if ( temp < distance ) + { + + distance = temp; + indice[1] = surv1[k]; + for ( i = 0; i < 2; i++ ) + { + indice[i + 5] = tmp_ind[i]; + } + } + } + + /*------------------------------------------------------------------------* + * write indices to array + *------------------------------------------------------------------------*/ + + push_indice( hBstr, IND_ISF_0_0, indice[0], 8 ); + push_indice( hBstr, IND_ISF_0_1, indice[1], 8 ); + push_indice( hBstr, IND_ISF_1_0, indice[2], 6 ); + push_indice( hBstr, IND_ISF_1_1, indice[3], 7 ); + push_indice( hBstr, IND_ISF_1_2, indice[4], 7 ); + push_indice( hBstr, IND_ISF_1_3, indice[5], 5 ); + push_indice( hBstr, IND_ISF_1_4, indice[6], 5 ); + + /*------------------------------------------------------------------------* + * decoding the ISFs + *------------------------------------------------------------------------*/ + + disf_2s_46b( indice, isf, mem_AR, mem_MA ); + + return; +} + +/*-------------------------------------------------------------------* + * VQ_stage1() + * + * 1st stage of ISF quantization + *-------------------------------------------------------------------*/ + +static void VQ_stage1( + const float *x, /* i : ISF vector */ + const float *dico, /* i : ISF codebook */ + const int16_t dim, /* i : codebook dimension */ + const int16_t dico_size, /* i : codebook size */ + int16_t *index, /* o : indices of best vector candidates */ + const int16_t surv /* i : nb of surviving best candidates */ +) +{ + float dist_min[N_SURV_MAX]; + float dist, temp; + const float *p_dico; + int16_t i, j, k, l; + + + for ( i = 0; i < surv; i++ ) + { + dist_min[i] = 1.0e30f; + index[i] = i; + } + + p_dico = dico; + + for ( i = 0; i < dico_size; i++ ) + { + dist = 0.0; + for ( j = 0; j < dim; j++ ) + { + temp = x[j] - *p_dico++; + dist += temp * temp; + } + + for ( k = 0; k < surv; k++ ) + { + if ( dist < dist_min[k] ) + { + for ( l = surv - 1; l > k; l-- ) + { + dist_min[l] = dist_min[l - 1]; + index[l] = index[l - 1]; + } + dist_min[k] = dist; + index[k] = i; + break; + } + } + } + return; +} + +/*-------------------------------------------------------------------* + * sub_VQ() + * + * Quantization of a subvector in Split-VQ of ISFs + *-------------------------------------------------------------------*/ + +/*! r: selected codebook vector index */ +static int16_t sub_VQ( + float *x, /* i/o: ISF vector */ + const float *dico, /* i : ISF codebook */ + const int16_t dim, /* i : codebook dimension */ + const int16_t dico_size, /* i : codebook size */ + float *distance /* o : quantization error (min. distance) */ +) +{ + float dist_min, dist, temp; + const float *p_dico; + int16_t i, j, index; + + + dist_min = 1.0e30f; + p_dico = dico; + + index = 0; + for ( i = 0; i < dico_size; i++ ) + { + dist = 0.0f; + for ( j = 0; j < dim; j++ ) + { + temp = x[j] - *p_dico++; + dist += temp * temp; + } + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + + *distance = dist_min; + + /* Reading the selected vector */ + p_dico = &dico[index * dim]; + for ( j = 0; j < dim; j++ ) + { + x[j] = *p_dico++; + } + return index; +} diff --git a/lib_enc/ivas_agc_enc.c b/lib_enc/ivas_agc_enc.c new file mode 100644 index 0000000000..d001f8f484 --- /dev/null +++ b/lib_enc/ivas_agc_enc.c @@ -0,0 +1,529 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_prot.h" +#include "prot.h" +#include +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define AGC_MIN_DELTA ( 4.656612873077393e-10f ) /*2^-31*/ + + +/*------------------------------------------------------------------------------------------* + * Local functions declarations + *------------------------------------------------------------------------------------------*/ +#ifdef DEBUG_AGC +extern FILE *agcOut; + +static int16_t ivas_agc_writeBits( FILE *stream, ivas_agc_enc_in_buf_t *in_buf, ivas_agc_enc_state_t *pState ); +#endif + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_agc_enc_init() + * + * AGC encoder initialization + *-----------------------------------------------------------------------------------------*/ + +static void ivas_agc_enc_init( + ivas_agc_enc_state_t *hAgcEnc, + const int16_t input_frame, + const int16_t nchan_inp, + const uint16_t delay ) +{ + int16_t i; + ivas_agc_enc_chan_state_t *ptrG = hAgcEnc->gain_state; + ivas_agc_chan_data_t *ptr = hAgcEnc->gain_data; + + hAgcEnc->agc_com.in_delay = delay; + hAgcEnc->agc_com.num_coeff = FOA_CHANNELS; + + ivas_agc_calcGainParams( &hAgcEnc->agc_com.absEmin, &hAgcEnc->agc_com.betaE, &hAgcEnc->agc_com.maxAttExp, hAgcEnc->agc_com.num_coeff ); + + ivas_agc_initWindowFunc( hAgcEnc->agc_com.winFunc, input_frame - hAgcEnc->agc_com.in_delay ); + + hAgcEnc->minDelta = AGC_MIN_DELTA; + hAgcEnc->smFact = 0.1f; + + for ( i = 0; i < nchan_inp; i++ ) + { + /* gain_state */ + ptrG->lastExp = 0; + ptrG->prevExp = 0; + ptrG->lastGain = 1.f; + ptrG->lastMaxAbs = 0.f; + ptrG->gainExpVal = 0; + ptrG->MaxAbsVal_del = 0.f; + ptrG->MaxAbsValIdx_del = 0; + ptrG++; + + /* gain_data */ + ptr->absGainExp = hAgcEnc->agc_com.absEmin; + ptr->absGainExpCurr = hAgcEnc->agc_com.absEmin; + ptr->gainException = FALSE; + ptr++; + } + + return; +} + +/*------------------------------------------------------------------------- + * ivas_spar_agc_enc_open() + * + * Allocate and initialize SPAR AGC encoder handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_agc_enc_open( + ivas_agc_enc_state_t **hAgcEnc, /* i/o: SPAR AGC encoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +) +{ + ivas_agc_enc_state_t *hAgc; + int16_t input_frame; + + if ( ( hAgc = (ivas_agc_enc_state_t *) count_malloc( sizeof( ivas_agc_enc_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); + } + + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + + if ( ( hAgc->agc_com.winFunc = (float *) count_malloc( sizeof( float ) * input_frame ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); + } + + if ( ( hAgc->gain_state = (ivas_agc_enc_chan_state_t *) count_malloc( sizeof( ivas_agc_enc_chan_state_t ) * nchan_inp ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); + } + + if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) count_malloc( sizeof( ivas_agc_chan_data_t ) * nchan_inp ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); + } + + ivas_agc_enc_init( hAgc, input_frame, nchan_inp, NS2SA( input_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ) ); + + *hAgcEnc = hAgc; + + return IVAS_ERR_OK; +} + +/*------------------------------------------------------------------------- + * ivas_spar_agc_enc_close() + * + * Deallocate SPAR AGC encoder handle + *------------------------------------------------------------------------*/ + +void ivas_spar_agc_enc_close( + ivas_agc_enc_state_t **hAgcEnc /* i/o: SPAR AGC encoder handle */ +) +{ + ivas_agc_enc_state_t *hAgc; + + hAgc = *hAgcEnc; + + if ( hAgc != NULL ) + { + count_free( hAgc->agc_com.winFunc ); + hAgc->agc_com.winFunc = NULL; + + count_free( hAgc->gain_state ); + hAgc->gain_state = NULL; + + count_free( hAgc->gain_data ); + hAgc->gain_data = NULL; + + count_free( hAgc ); + hAgc = NULL; + } + + return; +} + +/*-----------------------------------------------------------------------------------------* + * Function ivas_agc_enc_process() + * + * AGC encoder + *-----------------------------------------------------------------------------------------*/ + +void ivas_agc_enc_process( + ivas_agc_enc_state_t *hAgcEnc, /* i/o: AGC encoder handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + float **ppPcm_in, /* i : input audio channels */ + float **ppPcm_out, /* o : output audio channels */ + const int16_t n_channels, /* i : number of channels */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +) +{ + int16_t i, j, idx, input_frame, offset; + int16_t per_ch_bit[FOA_CHANNELS], AGC_flag; + int16_t extendedExpVal = FALSE; + int16_t isGainAdjusted; + float gain; + ivas_agc_enc_state_t *pState = hAgcEnc; + + input_frame = (int16_t) ( hEncoderConfig->input_Fs / FRAMES_PER_SEC ); + offset = input_frame - pState->agc_com.in_delay; + + AGC_flag = 0; + + for ( i = 0; i < n_channels; i++ ) + { + float sampleAbsVal; + int16_t isClipped = FALSE; + int16_t clippedIdx = offset - 1; + int16_t MaxAbsValIdx = 0; + float MaxAbsVal = pState->gain_state[i].MaxAbsVal_del; + float predMaxAbsVal = fabsf( ppPcm_in[i][offset] ); + + for ( j = 0; j < input_frame; j++ ) + { + sampleAbsVal = fabsf( ppPcm_in[i][j] ); + + if ( sampleAbsVal > MaxAbsVal ) + { + MaxAbsVal = sampleAbsVal; + MaxAbsValIdx = j; + } + + if ( j > offset ) + { + if ( sampleAbsVal > predMaxAbsVal ) + { + predMaxAbsVal = sampleAbsVal; + } + } + + ppPcm_out[i][j] = ppPcm_in[i][j] * pState->gain_state[i].lastGain; + + if ( !isClipped ) + { + if ( ( ppPcm_out[i][j] > ( 1.f - pState->minDelta ) ) || ( ppPcm_out[i][j] < -1.f ) ) + { + if ( j < offset ) + { + clippedIdx = j; + } + isClipped = TRUE; + } + } + } + + if ( MaxAbsValIdx >= offset ) + { + MaxAbsValIdx = offset - 1; + } + pState->gain_state[i].MaxAbsVal_del = predMaxAbsVal; + + isGainAdjusted = FALSE; + if ( !isClipped ) + { + pState->gain_data[i].gainException = FALSE; + + if ( pState->gain_state[i].lastExp == AGC_EMAX || MaxAbsVal < FLT_MIN ) + { + pState->gain_state[i].gainExpVal = 0; + pState->gain_state[i].prevExp = pState->gain_state[i].lastExp; + isGainAdjusted = TRUE; + } + else + { + float smoothedMaxAbsVal, maxGain; + smoothedMaxAbsVal = pState->smFact * MaxAbsVal + ( 1.f - pState->smFact ) * pState->gain_state[i].lastMaxAbs; + pState->gain_state[i].lastMaxAbs = smoothedMaxAbsVal; + + maxGain = max( smoothedMaxAbsVal, MaxAbsVal ) * pState->gain_state[i].lastGain * 2.f; + + if ( maxGain < 1.f - pState->minDelta ) + { + pState->gain_state[i].gainExpVal = -1; + } + else + { + pState->gain_state[i].gainExpVal = 0; + } + } + } + else + { + pState->gain_state[i].lastMaxAbs = MaxAbsVal; + } + + if ( !isGainAdjusted ) + { + float actualMaxAbsVal = 0.f; + int16_t currMaxAttExp, gainExpValMaxRange; + + currMaxAttExp = min( ( pState->gain_state[i].lastExp + pState->agc_com.absEmin ), pState->agc_com.maxAttExp ); + gainExpValMaxRange = min( ( pState->gain_state[i].lastExp + pState->agc_com.absEmin ), pState->agc_com.maxAttExp + 1 ); + extendedExpVal = FALSE; + + if ( isClipped ) + { + actualMaxAbsVal = pState->gain_state[i].lastMaxAbs * pState->gain_state[i].lastGain; + if ( MaxAbsValIdx == 0 ) + { + pState->gain_data[i].gainException = TRUE; + } + else + { + int16_t isCompensated = FALSE; + pState->gain_data[i].gainException = FALSE; + pState->gain_state[i].gainExpVal = (int16_t) ceilf( -logf( actualMaxAbsVal ) / logf( pState->agc_com.winFunc[MaxAbsValIdx] ) ); + + while ( !isCompensated ) + { + float tmpSignal; + isCompensated = TRUE; + + for ( idx = clippedIdx; idx <= MaxAbsValIdx; idx++ ) + { + tmpSignal = ppPcm_out[i][idx] * powf( pState->agc_com.winFunc[idx], (float) pState->gain_state[i].gainExpVal ); + + if ( ( tmpSignal > ( 1.f - pState->minDelta ) ) || ( tmpSignal < -1.f ) ) + { + isCompensated = FALSE; + break; + } + } + + if ( !isCompensated ) + { + pState->gain_state[i].gainExpVal++; + } + + if ( pState->gain_state[i].gainExpVal > currMaxAttExp ) + { + pState->gain_data[i].gainException = TRUE; + + if ( pState->gain_state[i].gainExpVal == gainExpValMaxRange ) + { + extendedExpVal = TRUE; + if ( isCompensated ) + { + pState->gain_data[i].gainException = FALSE; + } + } + break; + } + } + } + } + + if ( !pState->gain_data[i].gainException ) + { + for ( idx = 0; idx < input_frame; idx++ ) + { + if ( idx < offset ) + { + gain = powf( pState->agc_com.winFunc[idx], pState->gain_state[i].gainExpVal ); + } + else + { + + gain = powf( pState->agc_com.winFunc[offset - 1], pState->gain_state[i].gainExpVal ); + } + ppPcm_out[i][idx] *= gain; + } + + pState->gain_state[i].lastGain *= powf( pState->agc_com.winFunc[offset - 1], pState->gain_state[i].gainExpVal ); + } + else + { + pState->gain_state[i].gainExpVal = (int16_t) ( -floorf( -logf( actualMaxAbsVal + pState->minDelta ) * INV_LOG_2 ) ); + pState->gain_state[i].gainExpVal = min( gainExpValMaxRange, pState->gain_state[i].gainExpVal ); + + gain = powf( 2.0f, -1.0f * pState->gain_state[i].gainExpVal ); + for ( idx = 0; idx < input_frame; idx++ ) + { + ppPcm_out[i][idx] *= gain; + } + pState->gain_state[i].lastGain *= gain; + } + + /*safety check starts*/ + if ( pState->gain_state[i].gainExpVal == pState->agc_com.maxAttExp + 1 ) + { + extendedExpVal = TRUE; + } + else if ( pState->gain_state[i].gainExpVal == 0 ) + { + pState->gain_data[i].gainException = FALSE; + } + /*safety check ends*/ + + pState->gain_state[i].prevExp = pState->gain_state[i].lastExp; + + pState->gain_state[i].lastExp -= pState->gain_state[i].gainExpVal; + if ( extendedExpVal ) + { + if ( !pState->gain_data[i].gainException ) + { + pState->gain_data[i].gainException = TRUE; + pState->gain_state[i].gainExpVal = -1; + } + else + { + if ( pState->gain_state[i].gainExpVal == gainExpValMaxRange ) + { + pState->gain_state[i].gainExpVal = 0; + } + } + } + } + + pState->gain_data[i].absGainExp = pState->gain_state[i].prevExp + pState->agc_com.absEmin; + + if ( extendedExpVal && pState->gain_data[i].gainException && pState->gain_state[i].gainExpVal <= 0 ) + { + if ( pState->gain_state[i].gainExpVal == -1 ) + { + pState->gain_data[i].gainException = FALSE; + } + + pState->gain_state[i].gainExpVal = pState->agc_com.maxAttExp + 1; + } + + pState->gain_data[i].absGainExpCurr = pState->gain_data[i].absGainExp - pState->gain_state[i].gainExpVal; + + if ( ( pState->gain_data[i].absGainExpCurr > pState->agc_com.absEmin ) || ( pState->gain_data[i].absGainExpCurr < 0 ) ) + { + assert( 0 ); + } + + if ( pState->gain_data[i].absGainExpCurr == pState->agc_com.absEmin ) + { + per_ch_bit[i] = 0; + } + else + { + per_ch_bit[i] = 1; + AGC_flag = 1; + } + } + + push_next_indice( hMetaData, AGC_flag, 1 ); + + /* encode AGC parameters */ + if ( AGC_flag == 1 ) + { + if ( n_channels > 1 ) + { + for ( i = 0; i < n_channels; i++ ) + { + push_next_indice( hMetaData, per_ch_bit[i], 1 ); + } + } + assert( AGC_BITS_PER_CH == ( pState->agc_com.betaE + 1 ) ); + + for ( i = 0; i < n_channels; i++ ) + { + if ( per_ch_bit[i] == 1 ) + { + push_next_indice( hMetaData, (uint16_t) pState->gain_data[i].absGainExpCurr, (int16_t) pState->agc_com.betaE ); + push_next_indice( hMetaData, (uint16_t) pState->gain_data[i].gainException, 1 ); + } + } + } + +#ifdef DEBUG_AGC + /* writing to a temporary bitstream file */ + if ( ivas_agc_writeBits( agcOut, pIn_buf, pState ) ) + { + /* TODO: return error once error codes are harmonized */ + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "SPAR FOA ENC AGC Failed to open agcOut\n " ); + } +#endif + + return; +} + +#ifdef DEBUG_AGC + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Get a window function + * + * Inputs - + * float* winFunc + * unsigned integer frameLen + * + * Outputs - + * returns status + * + * + *-----------------------------------------------------------------------------------------*/ +static int16_t ivas_agc_writeBits( FILE *stream, ivas_agc_enc_in_buf_t *pIn_buf, ivas_agc_enc_state_t *pState ) +{ + if ( stream == NULL ) + { + return TRUE; + } + + int16_t num_bits = 0, num_dmx_bits[4] = { 0 }; + for ( int16_t i = 0; i < pIn_buf->n_channels; i++ ) + { + if ( pState->gain_data[i].absGainExpCurr < 0 || + pState->gain_data[i].absGainExpCurr >= (int16_t) pow( 2, pState->agc_com.betaE ) ) + { + /* TODO: return error once error codes are harmonized */ + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error Gain values to write!!\n\n" ); + } + + fwrite( &( pState->gain_data[i].absGainExpCurr ), sizeof( int32_t ), 1, stream ); /* n bits */ + num_bits += pState->agc_com.betaE; + fwrite( &( pState->gain_data[i].gainException ), sizeof( int16_t ), 1, stream ); /* 1 bit */ + num_bits++; + num_dmx_bits[i]++; + + /*fprintf(stdout, "absGainExpCurr[%d]:= %d[%d bits]; ", i, pState->gain_data[i].absGainExpCurr, pState->betaE); */ + } + /*fprintf(stdout, "AGC bits:= %d ", num_bits);*/ + + return FALSE; +} +#endif diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c new file mode 100644 index 0000000000..b2b96681fd --- /dev/null +++ b/lib_enc/ivas_core_enc.c @@ -0,0 +1,529 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "wmops.h" +#include + +#ifdef DEBUG_MODE_ACELP +extern float snr_[2][320]; +#endif + + +/*-------------------------------------------------------------------* + * ivas_core_enc() + * + * Principal IVAS core coder routine, where number of core channels is 1 or 2 + *-------------------------------------------------------------------*/ + +ivas_error ivas_core_enc( + SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + const int16_t n_CoreChannels, /* i : number of core channels to be coded */ + float old_inp_12k8[CPE_CHANNELS][L_INP_12k8], /* i : buffer of old input signal */ + float old_inp_16k[CPE_CHANNELS][L_INP], /* i : buffer of old input signal */ + const float Etot[CPE_CHANNELS], /* i : total energy */ + float ener[CPE_CHANNELS], /* i : residual energy from Levinson-Durbin */ + float A[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes */ + float Aw[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquantized for subframes */ + float epsP[CPE_CHANNELS][M + 1], /* i : LP prediction errors */ + float lsp_new[CPE_CHANNELS][M], /* i : LSPs at the end of the frame */ + float lsp_mid[CPE_CHANNELS][M], /* i : LSPs in the middle of the frame */ + const int16_t vad_hover_flag[CPE_CHANNELS], /* i : VAD hanglover flag */ + int16_t attack_flag[CPE_CHANNELS], /* i : attack flag (GSC or TC) */ + float realBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ + float imagBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ + float old_wsp[CPE_CHANNELS][L_WSP], /* i : weighted input signal buffer */ + const int16_t loc_harm[CPE_CHANNELS], /* i : harmonicity flag */ + const float cor_map_sum[CPE_CHANNELS], /* i : speech/music clasif. parameter */ + const int16_t vad_flag_dtx[CPE_CHANNELS], /* i : HE-SAD flag with additional DTX HO */ + float enerBuffer[CPE_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ + float fft_buff[CPE_CHANNELS][2 * L_FFT], /* i : FFT buffer */ + const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag in TD stereo OR LRTD primary channel */ + const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ +) +{ + int16_t n, input_frame; + int16_t cpe_id, is_MCT; + Encoder_State **sts, *st; + STEREO_ICBWE_ENC_HANDLE hStereoICBWE; + STEREO_TD_ENC_DATA_HANDLE hStereoTD; + float *inp[CPE_CHANNELS]; + float new_inp_resamp16k[CPE_CHANNELS][L_FRAME16k]; /* new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ + float shb_speech[L_FRAME16k]; + float hb_speech[L_FRAME16k / 4]; + float *new_swb_speech; + float new_swb_speech_buffer[L_FRAME48k + STEREO_DFT_OVL_MAX]; + float bwe_exc_extended[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; + float voice_factors[CPE_CHANNELS][NB_SUBFR16k]; + int16_t Voicing_flag[CPE_CHANNELS]; + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k]; + int16_t unbits[CPE_CHANNELS]; + float tdm_lspQ_PCh[M], tdm_lsfQ_PCh[M]; + int16_t last_element_mode, tdm_Pitch_reuse_flag; + int32_t element_brate, input_Fs; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_core_enc" ); + + error = IVAS_ERR_OK; + + /*------------------------------------------------------------------* + * General initialization + *-----------------------------------------------------------------*/ + + + if ( hSCE != NULL ) + { + cpe_id = -1; + is_MCT = 0; + sts = hSCE->hCoreCoder; + hStereoTD = NULL; + hStereoICBWE = NULL; + element_brate = hSCE->element_brate; + last_element_mode = IVAS_SCE; + tdm_Pitch_reuse_flag = -1; + } + else + { + cpe_id = hCPE->cpe_id; + is_MCT = 0; + if ( hMCT != NULL ) + { + is_MCT = 1; + } + sts = hCPE->hCoreCoder; + hStereoICBWE = hCPE->hStereoICBWE; + element_brate = hCPE->element_brate; + last_element_mode = hCPE->last_element_mode; + + if ( hCPE->hStereoTD != NULL ) + { + hStereoTD = hCPE->hStereoTD; + tdm_Pitch_reuse_flag = hCPE->hStereoTD->tdm_Pitch_reuse_flag; + } + else + { + hStereoTD = NULL; + tdm_Pitch_reuse_flag = -1; + } + } + + input_Fs = sts[0]->input_Fs; + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + + set_f( new_swb_speech_buffer, 0, L_FRAME48k + STEREO_DFT_OVL_MAX ); + + for ( n = 0; n < n_CoreChannels; n++ ) + { + st = sts[n]; + + /*------------------------------------------------------------------* + * Initializiation per core-coder channel + *-----------------------------------------------------------------*/ + +#ifdef DEBUG_MODE_ACELP + set_f( snr_[n], 0.0f, 320 ); +#endif + + st->extl = -1; + unbits[n] = 0; + + st->element_brate = element_brate; + + /*---------------------------------------------------------------------* + * Pre-processing, incl. Decision matrix + *---------------------------------------------------------------------*/ + + if ( ( error = pre_proc_ivas( st, last_element_mode, element_brate, input_frame, old_inp_12k8[n], old_inp_16k[n], &inp[n], &ener[n], A[n], Aw[n], epsP[n], lsp_new[n], lsp_mid[n], new_inp_resamp16k[n], &Voicing_flag[n], old_wsp[n], loc_harm[n], cor_map_sum[n], vad_flag_dtx[n], enerBuffer[n], fft_buff[n], is_MCT, vad_hover_flag[n], + flag_16k_smc ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( st->element_mode == IVAS_CPE_MDCT || st->element_mode == IVAS_SCE ) + { + st->enablePlcWaveadjust = 0; + } + } + + /*---------------------------------------------------------------------* + * Core Encoding + *---------------------------------------------------------------------*/ + + for ( n = 0; n < n_CoreChannels; n++ ) + { + st = sts[n]; + + /*---------------------------------------------------------------------* + * Write signalling info into the bitstream + *---------------------------------------------------------------------*/ + + if ( !is_MCT || ( is_MCT && cpe_id == 0 ) ) + { + ivas_signalling_enc( st, is_MCT, element_brate, tdm_SM_or_LRTD_Pri, tdm_Pitch_reuse_flag ); + } + + /*---------------------------------------------------------------------* + * Preprocessing (preparing) for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + + core_switching_pre_enc( st, old_inp_12k8[n], old_inp_16k[n], sts[0]->active_cnt, last_element_mode ); + + /*---------------------------------------------------------------------* + * ACELP core encoding + * TCX core encoding + * HQ core encoding + *---------------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + /* ACELP core encoder */ + if ( ( error = acelp_core_enc( st, inp[n], ener[n], A[n], Aw[n], epsP[n], lsp_new[n], lsp_mid[n], vad_hover_flag[0], attack_flag[n], bwe_exc_extended[n], voice_factors[n], old_syn_12k8_16k[n], pitch_buf[n], &unbits[n], hStereoTD, tdm_lspQ_PCh, tdm_lsfQ_PCh ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ( st->core == TCX_20_CORE || st->core == TCX_10_CORE ) && st->element_mode != IVAS_CPE_MDCT ) + { + /* TCX core encoder */ + stereo_tcx_core_enc( st, old_inp_12k8[n] + L_INP_MEM, old_inp_16k[n] + L_INP_MEM, Aw[n], lsp_new[n], lsp_mid[n], pitch_buf[n], last_element_mode, vad_hover_flag[0] ); + } + + if ( st->core == HQ_CORE ) + { + /* HQ core encoder */ + hq_core_enc( st, st->input, input_frame, NORMAL_HQ_CORE, Voicing_flag[n], vad_hover_flag[0] ); + } + + /*---------------------------------------------------------------------* + * TD stereo updates + *---------------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_TD && n == 0 ) + { + td_stereo_param_updt( st->lsp_old, st->lsf_old, pitch_buf[0], tdm_lspQ_PCh, tdm_lsfQ_PCh, hStereoTD->tdm_Pri_pitch_buf, st->flag_ACELP16k, hStereoTD->tdm_use_IAWB_Ave_lpc ); + } + } + + + /*---------------------------------------------------------------------* + * MDCT stereo: joint TCX Core Encoding + *---------------------------------------------------------------------*/ + + if ( sts[0]->element_mode == IVAS_CPE_MDCT ) + { + if ( sts[0]->core_brate > SID_2k40 && sts[1]->core_brate > SID_2k40 ) + { + if ( is_MCT ) + { + ivas_mdct_core_whitening_enc( hCPE, old_inp_16k, old_wsp, pitch_buf, hMCT->p_mdst_spectrum_long[cpe_id], hMCT->tnsBits[cpe_id], hMCT->p_orig_spectrum_long[cpe_id], + hMCT->tnsSize[cpe_id], hMCT->p_param[cpe_id], hMCT->hBstr, &hMCT->LFE_off, 1, hMCT->nchan_out_woLFE + hMCT->num_lfe ); + } + else + { + stereo_mdct_core_enc( hCPE, old_inp_16k, old_wsp, pitch_buf ); + } + } + else if ( sts[0]->core_brate == SID_2k40 && sts[1]->core_brate == SID_2k40 ) + { + /* synch CNG configs between channels */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st = sts[n]; + if ( ( st->hFdCngEnc->hFdCngCom->frameSize != st->L_frame ) || ( st->hFdCngEnc->hFdCngCom->CngBandwidth != st->bwidth ) ) + { + configureFdCngEnc( st->hFdCngEnc, max( st->bwidth, WB ), st->L_frame == L_FRAME16k ? ACELP_16k40 : ACELP_9k60 ); + } + } + + if ( sts[0]->cng_dirac_flag ) + { + FdCngEncodeDiracMDCTStereoSID( hCPE ); + } + else + { + FdCngEncodeMDCTStereoSID( hCPE ); + } + } + } + + + /*---------------------------------------------------------------------* + * Postprocessing, BWEs and Updates + *---------------------------------------------------------------------*/ + + for ( n = 0; n < n_CoreChannels; n++ ) + { + st = sts[n]; + + /*---------------------------------------------------------------------* + * Postprocessing for ACELP/HQ core switching + *---------------------------------------------------------------------*/ + + core_switching_post_enc( st, old_inp_12k8[n], old_inp_16k[n], A[n] ); + + /*---------------------------------------------------------------------* + * WB TBE encoding + * WB BWE encoding + *---------------------------------------------------------------------*/ + + if ( input_Fs >= 16000 && st->bwidth < SWB && st->hBWE_TD != NULL ) + { + /* Common pre-processing for WB TBE and WB BWE */ + wb_pre_proc( st, last_element_mode, new_inp_resamp16k[n], hb_speech ); + } + + if ( st->extl == WB_TBE ) + { + /* WB TBE encoder */ + wb_tbe_enc( st, hb_speech, bwe_exc_extended[n], voice_factors[n], pitch_buf[n] ); + } + else if ( st->extl == WB_BWE && n == 0 && st->element_mode != IVAS_CPE_MDCT ) + { + /* WB BWE encoder */ + wb_bwe_enc( st, new_inp_resamp16k[n] ); + } + + /*---------------------------------------------------------------------* + * SWB(FB) TBE encoding + * SWB(FB) BWE encoding + *---------------------------------------------------------------------*/ + + new_swb_speech = new_swb_speech_buffer + STEREO_DFT_OVL_MAX; + + if ( !st->Opt_SC_VBR && input_Fs >= 32000 && st->hBWE_TD != NULL ) + { + /* Common pre-processing for SWB(FB) TBE and SWB(FB) BWE */ + swb_pre_proc( st, new_swb_speech, shb_speech, realBuffer[n], imagBuffer[n], hCPE ); + } + else if ( input_Fs >= 32000 ) + { + if ( st->hBWE_TD != NULL ) + { + set_f( st->hBWE_TD->old_speech_shb, 0.0f, L_LOOK_16k + L_SUBFR16k ); + set_f( shb_speech, 0.0f, L_FRAME16k ); + set_f( st->hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); + set_f( st->hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); + st->hBWE_TD->old_mean_EnvSHBres = 0.0f; + st->hBWE_TD->prev_enr_EnvSHBres = 1.0f; + st->hBWE_TD->prev_shb_env_tilt = 0.0f; + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + st->hBWE_TD->prev_Env_error = 0.0f; + } + } + + /* SWB TBE encoder */ + if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->igf && st->core == ACELP_CORE && st->extl != WB_TBE ) ) + { + if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) + { + float fb_exc[L_FRAME16k]; + + swb_tbe_enc( st, hStereoICBWE, shb_speech, bwe_exc_extended[n], voice_factors[n], fb_exc, pitch_buf[n] ); + + if ( st->extl == FB_TBE ) + { + /* FB TBE encoder */ + fb_tbe_enc( st, st->input, fb_exc ); + } + } + } + else if ( st->extl == SWB_BWE || st->extl == FB_BWE ) + { + /* SWB(FB) BWE encoder */ + swb_bwe_enc( st, last_element_mode, old_inp_12k8[n], old_inp_16k[n], old_syn_12k8_16k[n], new_swb_speech, shb_speech ); + } + + /*---------------------------------------------------------------------* + * SWB DTX/CNG encoding + *---------------------------------------------------------------------*/ + + if ( st->hTdCngEnc != NULL && st->Opt_DTX_ON && ( input_frame >= L_FRAME32k || st->element_mode == IVAS_CPE_DFT ) ) + { + /* SHB DTX/CNG encoder */ + swb_CNG_enc( st, shb_speech, old_syn_12k8_16k[n] ); + } + + /*-------------------------------------------------------------------* + * Inter-channel BWE encoding + *-------------------------------------------------------------------*/ + + if ( n == 0 && input_Fs >= 32000 && hStereoICBWE != NULL ) + { + stereo_icBWE_preproc( hCPE, input_frame, new_swb_speech_buffer /*tmp buffer*/ ); + + stereo_icBWE_enc( hCPE, shb_speech, new_swb_speech_buffer, voice_factors[0] ); + } + + /*---------------------------------------------------------------------* + * Channel-aware mode - write signaling information into the bitstream + *---------------------------------------------------------------------*/ + + signalling_enc_rf( st ); + + /*---------------------------------------------------------------------* + * Common updates + *---------------------------------------------------------------------*/ + + updt_enc_common( st, Etot[n] ); + } + + +#ifdef DEBUG_MODE_INFO + for ( n = 0; n < n_CoreChannels; n++ ) + { + float tmpF; + int16_t tmpS, id; +#if defined DEBUG_MODE_ACELP || defined DEBUG_MODE_TCX + int16_t k, _pitch[3], _pitch_buf[5]; +#endif + + st = sts[n]; + id = st->id_element; + + dbgwrite( &st->core, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "core", n, id, ENC ) ); + dbgwrite( &st->extl, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "extl", n, id, ENC ) ); + dbgwrite( &st->bwidth, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "bwidth", n, id, ENC ) ); + tmpF = st->total_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "total_brate", n, id, ENC ) ); + tmpS = st->bits_frame_nominal; + dbgwrite( &tmpS, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "bits_nominal", n, id, ENC ) ); + tmpF = st->core_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "core_brate", n, id, ENC ) ); + tmpF = st->extl_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "extl_brate", n, id, ENC ) ); + + dbgwrite( &st->coder_type, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "coder_type", n, id, ENC ) ); + dbgwrite( &st->clas, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "clas", n, id, ENC ) ); + dbgwrite( &st->cng_type, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "cng_type", n, id, ENC ) ); + dbgwrite( &st->L_frame, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "L_frame", n, id, ENC ) ); + dbgwrite( &st->vad_flag, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "vad_flag", n, id, ENC ) ); + dbgwrite( &st->localVAD, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "localVAD", n, id, ENC ) ); + + dbgwrite( &st->count_WB, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "count_WB", n, id, ENC ) ); + dbgwrite( &st->count_SWB, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "count_SWB", n, id, ENC ) ); + +#ifdef DEBUG_MODE_ACELP + dbgwrite( snr_[n], sizeof( float ), 320, 1, fname( debug_dir, "snr", n, id, ENC ) ); +#endif + dbgwrite( &st->sp_aud_decision0, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "sp_aud_decision0", n, id, ENC ) ); + dbgwrite( &st->sp_aud_decision1, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "sp_aud_decision1", n, id, ENC ) ); + dbgwrite( &st->sp_aud_decision2, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "sp_aud_decision2", n, id, ENC ) ); + +#if ( defined DEBUG_MODE_ACELP ) || ( defined DEBUG_MODE_TCX ) + if ( st->coder_type == INACTIVE || st->coder_type == UNVOICED ) + { + _pitch[0] = 0; + _pitch[1] = 0; + _pitch[2] = 0; + } + else + { + _pitch[0] = st->pitch[0]; + _pitch[1] = st->pitch[1]; + _pitch[2] = st->pitch[2]; + } + dbgwrite( &_pitch[0], sizeof( int16_t ), 1, ( input_frame / 8 * 3 ), fname( debug_dir, "pitch", n, id, ENC ) ); + dbgwrite( &_pitch[1], sizeof( int16_t ), 1, ( input_frame / 8 * 3 ), fname( debug_dir, "pitch", n, id, ENC ) ); + dbgwrite( &_pitch[2], sizeof( int16_t ), 1, ( input_frame / 8 * 2 ), fname( debug_dir, "pitch", n, id, ENC ) ); + + if ( ( st->coder_type == INACTIVE ) || ( st->coder_type == UNVOICED ) ) + { + set_s( _pitch_buf, 0, NB_SUBFR16k ); + } + else if ( st->L_frame != L_FRAME ) + { + for ( k = 0; k < NB_SUBFR16k; k++ ) + _pitch_buf[k] = (int16_t) ( pitch_buf[n][k] + 0.5f ); + } + else + { + for ( k = 0; k < NB_SUBFR; k++ ) + _pitch_buf[k] = (int16_t) ( pitch_buf[n][k] * 5.0f / 4.0f + 0.5f ); + } + if ( st->L_frame != L_FRAME ) + { + for ( k = 0; k < NB_SUBFR16k; k++ ) + dbgwrite( &_pitch_buf[k], sizeof( int16_t ), 1, L_SUBFR, fname( debug_dir, "pitchCL", n, id, ENC ) ); + } + else + { + for ( k = 0; k < NB_SUBFR; k++ ) + dbgwrite( &_pitch_buf[k], sizeof( int16_t ), 1, L_SUBFR16k, fname( debug_dir, "pitchCL", n, id, ENC ) ); + } +#endif + +#ifdef DEBUG_MODE_ACELP + if ( st->core != ACELP_CORE ) + { + tmpF = 0.0f; + dbgwrite( &tmpF, sizeof( float ), 1, st->L_frame, fname( debug_dir, "exc.enc", n, id, ENC ) ); + dbgwrite( &tmpF, sizeof( float ), 1, st->L_frame, fname( debug_dir, "resid", n, id, ENC ) ); + } + if ( n_CoreChannels == 1 ) + { + tmpS = -1; + dbgwrite( &tmpS, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "coder_type", 2, id, ENC ) ); + tmpF = 0.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "total_brate", 2, id, ENC ) ); + tmpF = 0.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "core_brate", 2, id, ENC ) ); + tmpF = 0.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "extl_brate", 2, id, ENC ) ); + dbgwrite( &tmpS, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "vad_flag", 2, id, ENC ) ); + dbgwrite( &tmpS, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "localVAD", 2, id, ENC ) ); + } + +#endif + } +#endif + + wmops_sub_end(); + + return error; +} diff --git a/lib_enc/ivas_core_pre_proc.c b/lib_enc/ivas_core_pre_proc.c new file mode 100644 index 0000000000..a380ee917f --- /dev/null +++ b/lib_enc/ivas_core_pre_proc.c @@ -0,0 +1,802 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * pre_proc_ivas() + * + * Pre-processing (Selection of internal Fs, classification, SC VBR decision, + * Decision matrix, Preprocessing at other Fs, core switching decision, ...) + *--------------------------------------------------------------------*/ + +ivas_error pre_proc_ivas( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t last_element_mode, /* i : last element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t input_frame, /* i : frame length */ + float old_inp_12k8[], /* i/o: buffer of old input signal */ + float old_inp_16k[], /* i/o: buffer of old input signal @ 16kHz */ + float **inp, /* o : ptr. to inp. signal in the current frame*/ + float *ener, /* o : residual energy from Levinson-Durbin */ + float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* i/o: LP prediction errors */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + float lsp_mid[M], /* i/o: LSPs in the middle of the frame */ + float *new_inp_resamp16k, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + int16_t *Voicing_flag, /* o : voicing flag for HQ FEC */ + const float old_wsp[], /* i : weighted input signal buffer */ + const int16_t loc_harm, /* i : harmonicity flag */ + const float cor_map_sum, /* i : speech/music clasif. parameter */ + const int16_t vad_flag_dtx, /* i : HE-SAD flag with additional DTX HO */ + const float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ + const float fft_buff[2 * L_FFT], /* i : FFT buffer */ + const int16_t is_mct, /* i : MCT mode flag */ + const int16_t vad_hover_flag, /* i : VAD hangover flag */ + const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ +) +{ + int16_t L_look, element_mode, lMemRecalc_12k8; + float *inp_12k8, *new_inp_12k8, *inp_16k; /* pointers to current frame and new data */ + const float *wsp; /* weighted input signal buffer */ + int32_t sr_core_tmp, total_brate_tmp; + ivas_error error; + + wmops_sub_start( "pre_proc" ); + + error = IVAS_ERR_OK; + + /*----------------------------------------------------------------* + * Initialization + *----------------------------------------------------------------*/ + + element_mode = st->element_mode; + + new_inp_12k8 = old_inp_12k8 + L_INP_MEM; /* pointer to new samples of the input signal in 12.8kHz core */ + inp_12k8 = new_inp_12k8 - L_LOOK_12k8; + + if ( element_mode != IVAS_CPE_DFT ) + { + new_inp_12k8 -= L_FILT; + } + + wsp = old_wsp + L_WSP_MEM; /* pointer to the current frame of weighted signal in 12.8kHz core */ + + lMemRecalc_12k8 = 0; + if ( element_mode == IVAS_CPE_TD ) + { + lMemRecalc_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_NS ); + } + + /*----------------------------------------------------------------* + * Selection of internal ACELP Fs (12.8 kHz or 16 kHz) + *----------------------------------------------------------------*/ + + if ( st->core_brate == FRAME_NO_DATA ) + { + /* prevent "L_frame" changes in CNG segments */ + st->L_frame = st->last_L_frame; + } + else if ( st->core_brate == SID_2k40 && st->bwidth >= WB && st->hDtxEnc->first_CNG && ( st->hTdCngEnc != NULL && st->hTdCngEnc->act_cnt2 < MIN_ACT_CNG_UPD ) ) + { + /* prevent "L_frame" changes in SID frame after short segment of active frames */ + st->L_frame = st->hDtxEnc->last_CNG_L_frame; + } + else if ( ( ( st->element_mode == IVAS_CPE_MDCT && st->element_brate >= IVAS_64k && st->bwidth >= SWB ) || ( element_mode == IVAS_SCE && st->total_brate > MAX_ACELP_BRATE && st->bwidth >= SWB ) ) && st->core_brate != SID_2k40 ) + { + st->L_frame = L_FRAME32k; + } + else if ( st->flag_ACELP16k ) + { + st->L_frame = L_FRAME16k; + } + else + { + st->L_frame = L_FRAME; + } + + if ( st->hFdCngEnc != NULL && st->element_mode != IVAS_CPE_MDCT && ( ( st->hFdCngEnc->hFdCngCom->frameSize != st->L_frame ) || ( st->hFdCngEnc->hFdCngCom->CngBandwidth != st->input_bwidth ) ) ) + { + configureFdCngEnc( st->hFdCngEnc, max( st->input_bwidth, WB ), st->L_frame == L_FRAME16k ? ACELP_16k40 : ACELP_9k60 ); + } + + if ( st->ini_frame == 0 ) + { + /* avoid switching of internal ACELP Fs in the very first frame */ + st->last_L_frame = st->L_frame; + } + + if ( st->L_frame == L_FRAME ) + { + st->gamma = GAMMA1; + st->preemph_fac = PREEMPH_FAC; + } + else if ( st->L_frame == L_FRAME32k ) + { + st->gamma = GAMMA16k; + st->preemph_fac = PREEMPH_FAC_SWB; + } + else + { + st->gamma = GAMMA16k; + st->preemph_fac = PREEMPH_FAC_16k; + } + + st->sr_core = st->L_frame * FRAMES_PER_SEC; + st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); + st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; + + + /*-----------------------------------------------------------------* + * coder_type rewriting in case of switching + * IC frames selection + * enforce TC frames in case of switching + *-----------------------------------------------------------------*/ + + /* enforce TRANSITION frames */ + if ( !( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) && st->last_L_frame != st->L_frame && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && st->last_core_brate != FRAME_NO_DATA && st->last_core_brate != SID_2k40 && st->coder_type_raw != VOICED ) + { + /* enforce TC frame in case of ACELP@12k8 <-> ACELP@16k core switching */ + st->coder_type = TRANSITION; + } + else if ( st->last_core == HQ_CORE && st->coder_type_raw != VOICED ) + { + /* enforce TC frame in case of HQ -> ACELP core switching */ + st->coder_type = TRANSITION; + } + else if ( st->last_core_brate <= SID_2k40 && st->cng_type == FD_CNG && !( element_mode == IVAS_CPE_TD ) ) + { + /* enforce TC frame in case of FD_CNG -> ACELP switching (past excitation not available) */ + st->coder_type = TRANSITION; + } + /* select INACTIVE frames */ + else if ( st->total_brate <= MAX_GSC_INACTIVE_BRATE && st->vad_flag == 0 && st->element_mode != IVAS_CPE_MDCT ) + { + /* inactive frames will be coded by GSC technology */ + /* except for the VBR mode. VBR mode uses NELP for that */ + if ( !( st->Opt_SC_VBR && vad_flag_dtx ) && ( st->idchan == 0 || element_mode != IVAS_CPE_TD ) ) + { + st->coder_type = INACTIVE; + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP3; + } + } + else if ( st->total_brate > MAX_GSC_INACTIVE_BRATE && ( ( st->vad_flag == 0 && st->bwidth >= SWB && st->max_bwidth >= SWB ) || ( st->localVAD == 0 && ( st->bwidth <= WB || st->max_bwidth <= WB ) ) ) ) + { + /* inactive frames will be coded by AVQ technology */ + st->coder_type = INACTIVE; + } + + + /*---------------------------------------------------------------------* + * Decision matrix (selection of technologies) + *---------------------------------------------------------------------*/ + + st->mdct_sw = MODE1; + st->mdct_sw_enable = MODE1; + if ( ( st->total_brate <= MIN_BRATE_GSC_NOISY_FLAG || st->bwidth < SWB || st->flag_ACELP16k ) && st->GSC_IVAS_mode == 0 ) + { + st->GSC_noisy_speech = 0; + } + + /* core selection */ + ivas_decision_matrix_enc( st, element_brate, fft_buff, enerBuffer, last_element_mode ); + + if ( st->L_frame == L_FRAME16k && ( st->coder_type == VOICED || st->coder_type == UNVOICED ) ) /* VOICED and UNVOICED are not supported in ACELP@16k */ + { + st->coder_type = GENERIC; + } + + if ( st->core == TCX_20_CORE || st->core == HQ_CORE ) + { + st->Nb_ACELP_frames = 0; + /* Configure TCX with the same bitrate as given when (re-)initializing TCX */ + total_brate_tmp = st->total_brate; + st->total_brate = st->bits_frame_nominal * FRAMES_PER_SEC; + SetModeIndex( st, st->last_bits_frame_nominal * FRAMES_PER_SEC, last_element_mode, is_mct ); + st->sr_core = getCoreSamplerateMode2( element_mode, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode ); + st->total_brate = total_brate_tmp; + + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); + st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; + + if ( st->sr_core == INT_FS_12k8 ) + { + st->preemph_fac = PREEMPH_FAC; + st->gamma = GAMMA1; + } + else if ( st->sr_core == INT_FS_16k ) + { + st->preemph_fac = PREEMPH_FAC_16k; + st->gamma = GAMMA16k; + } + else /* st->sr_core >=25600 */ + { + st->preemph_fac = PREEMPH_FAC_SWB; + st->gamma = GAMMA16k; + } + + if ( st->vad_flag == 0 ) + { + st->coder_type = INACTIVE; + } + else if ( st->coder_type > GENERIC ) + { + st->coder_type = GENERIC; + } + if ( st->element_mode != IVAS_CPE_MDCT ) + { + SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); + } + } + else if ( st->element_mode == IVAS_CPE_MDCT ) + { + st->hTcxEnc->tfm_mem = 0.75f; + } + + /*-----------------------------------------------------------------* + * Update of ACELP harmonicity counter (used in ACELP transform codebook @32kbps) + *-----------------------------------------------------------------*/ + + if ( loc_harm == 1 && cor_map_sum > 50 && st->clas == VOICED_CLAS && st->coder_type == GENERIC ) + { + st->last_harm_flag_acelp++; + + if ( st->last_harm_flag_acelp > 10 ) + { + st->last_harm_flag_acelp = 10; + } + } + else + { + st->last_harm_flag_acelp = 0; + } + + /*-----------------------------------------------------------------* + * Update audio frames counter (used for UV decision) + *-----------------------------------------------------------------*/ + + if ( st->coder_type == AUDIO ) + { + st->audio_frame_cnt += AUDIO_COUNTER_STEP; + } + else if ( st->coder_type != INACTIVE ) + { + st->audio_frame_cnt--; + } + + if ( st->audio_frame_cnt > AUDIO_COUNTER_MAX ) + { + st->audio_frame_cnt = AUDIO_COUNTER_MAX; + } + + if ( st->audio_frame_cnt < 0 ) + { + st->audio_frame_cnt = 0; + } + + /*-----------------------------------------------------------------* + * Set formant sharpening flag + *-----------------------------------------------------------------*/ + + st->sharpFlag = 0; + + if ( st->coder_type == GENERIC || st->coder_type == VOICED || st->coder_type == TRANSITION ) + { + if ( element_brate >= FRMT_SHP_MIN_BRATE_IVAS && st->lp_noise > FORMANT_SHARPENING_NOISE_THRESHOLD ) + { + st->sharpFlag = 0; + } + else + { + st->sharpFlag = 1; + } + } + + /* channel-aware mode - due to lack of signalling bit, sharpFlag is 1 always in RF mode */ + if ( st->rf_mode && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) + { + st->sharpFlag = 1; + } + + /* TD stereo, secondary channel - due to lack of signalling bits, sharpFlag is always 1 */ + if ( element_mode == IVAS_CPE_TD && st->idchan == 1 ) + { + st->sharpFlag = 0; + if ( st->coder_type == GENERIC || st->coder_type == VOICED ) + { + st->sharpFlag = 1; + } + } + + /*-----------------------------------------------------------------* + * Set voicing flag for HQ FEC + *-----------------------------------------------------------------*/ + + if ( st->sp_aud_decision1 == 0 && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) + { + *Voicing_flag = 1; + } + else + { + *Voicing_flag = 0; + } + + /*-----------------------------------------------------------------* + * Compute core-coder buffers at internal sampling rate + *-----------------------------------------------------------------*/ + + sr_core_tmp = ( st->tcxonly == 0 ) ? INT_FS_16k : max( INT_FS_16k, st->sr_core ); /* indicates the ACELP sampling rate */ + + L_look = NS2SA( sr_core_tmp, ACELP_LOOK_NS ); /* lookahead at other sampling rate (16kHz, 25.6kHz, 32kHz) */ + + inp_16k = old_inp_16k + L_INP_MEM - L_look; + + if ( !flag_16k_smc ) + { + error = ivas_compute_core_buffers( st, &inp_16k, old_inp_16k, new_inp_resamp16k, input_frame, last_element_mode, sr_core_tmp, ener, A, Aw, epsP, lsp_new, lsp_mid ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + } + + if ( !( st->L_frame == L_FRAME16k && element_mode != IVAS_CPE_MDCT ) ) + { + /* update signal buffers */ + mvr2r( new_inp_12k8, st->buf_speech_enc_pe + st->L_frame, L_FRAME ); + mvr2r( st->buf_speech_enc + L_FRAME32k, st->buf_speech_enc + st->L_frame, L_FRAME ); + + if ( element_mode == IVAS_CPE_DFT ) + { + mvr2r( st->buf_speech_enc + L_FRAME32k - STEREO_DFT_OVL_12k8, st->buf_speech_enc + st->L_frame - STEREO_DFT_OVL_12k8, STEREO_DFT_OVL_12k8 ); + } + else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) + { + mvr2r( st->buf_speech_enc + L_FRAME32k - lMemRecalc_12k8 - L_FILT, st->buf_speech_enc + st->L_frame - lMemRecalc_12k8 - L_FILT, lMemRecalc_12k8 + L_FILT ); + } + else if ( element_mode == IVAS_SCE ) + { + mvr2r( st->buf_speech_enc + L_FRAME32k - L_FILT, st->buf_speech_enc + st->L_frame - L_FILT, L_FILT ); + } + + if ( st->tcxonly == 0 ) + { + mvr2r( wsp, st->wspeech_enc, L_FRAME + L_LOOK_12k8 ); + } + } + + if ( flag_16k_smc ) + { + mvr2r( st->buf_speech_enc + L_FRAME16k, new_inp_resamp16k, L_FRAME16k ); + } + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + /* update old weighted speech buffer - for OL pitch analysis */ + mvr2r( &old_wsp[L_FRAME], st->old_wsp, L_WSP_MEM ); + + + /* set the pointer of the current frame for the ACELP core */ + if ( st->L_frame == L_FRAME ) + { + *inp = inp_12k8; + } + else + { + *inp = inp_16k; + } + + /* Update VAD hangover frame counter in active frames */ + if ( !( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) && st->tcxonly == 0 ) + { + if ( st->hTdCngEnc != NULL && st->Opt_DTX_ON && vad_hover_flag ) + { + st->hTdCngEnc->burst_ho_cnt++; + if ( st->hTdCngEnc->burst_ho_cnt > HO_HIST_SIZE ) + { + st->hTdCngEnc->burst_ho_cnt = HO_HIST_SIZE; + } + } + else if ( st->hTdCngEnc != NULL && vad_flag_dtx ) + { + st->hTdCngEnc->burst_ho_cnt = 0; + } + } + +#ifdef DEBUG_MODE_ACELP + dbgwrite( inp_12k8, sizeof( float ), L_FRAME, 1, fname( debug_dir, "inp_12k8", st->idchan, st->id_element, ENC ) ); + dbgwrite( inp_16k, sizeof( float ), L_FRAME, 1, fname( debug_dir, "inp_16k", st->idchan, st->id_element, ENC ) ); +#endif + + wmops_sub_end(); + return error; +} + + +/*-------------------------------------------------------------------* + * ivas_compute_core_buffers() + * + * Compute core-coder buffers at internal sampling rate + *--------------------------------------------------------------------*/ + +ivas_error ivas_compute_core_buffers( + Encoder_State *st, /* i/o: encoder state structure */ + float **inp16k_out, /* o : ptr. to inp. signal in the current frame */ + float *old_inp_16k, /* i/o: buffer of old input signal @ 16kHz */ + float new_inp_resamp16k_out[], /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + const int16_t input_frame, /* i : frame length */ + const int16_t last_element_mode, /* i : last element mode */ + const int32_t sr_core, /* i : core-coder sampling rate */ + float *ener, /* o : residual energy from Levinson-Durbin */ + float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* i/o: LP prediction errors */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + float lsp_mid[M] /* i/o: LSPs in the middle of the frame */ +) +{ + float *inp_16k, *new_inp_16k; + float tmp, mem_decim16k_dummy[2 * L_FILT_MAX]; + const float *signal_in; + int16_t delay, element_mode; + float temp1F_icatdmResampBuf[L_FILT_MAX]; /* temp buffers for ICA TDM resamplers */ + float new_inp_resamp16k[L_FRAME16k]; + int16_t lMemRecalc, lMemRecalc_16k, L_frame_tmp, L_look; + int32_t input_Fs; + + signal_in = st->input; + + input_Fs = st->input_Fs; + element_mode = st->element_mode; + + lMemRecalc_16k = 0; + lMemRecalc = 0; + if ( element_mode == IVAS_CPE_TD ) + { + lMemRecalc_16k = NS2SA( INT_FS_16k, L_MEM_RECALC_NS ); + lMemRecalc = NS2SA( input_Fs, L_MEM_RECALC_NS ); + } + + /*---------------------------------------------------------------* + * Preprocessing at other sampling frequency rate (16/25.6/32kHz) + *----------------------------------------------------------------*/ + + L_frame_tmp = ( st->tcxonly == 0 ) ? L_FRAME16k : max( L_FRAME16k, st->L_frame ); + + L_look = NS2SA( sr_core, ACELP_LOOK_NS ); /* lookahead at other sampling rate (16kHz, 25.6kHz, 32kHz) */ + + new_inp_16k = old_inp_16k + L_INP_MEM; /* pointer to new samples of the input signal in 16kHz core */ + inp_16k = new_inp_16k - L_look; /* pointer to the current frame of input signal in 16kHz core */ + + /* shift the pointer back to take care of resampler memory update */ + if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_SCE ) + { + new_inp_16k -= NS2SA( sr_core, DELAY_FIR_RESAMPL_NS ); + } + + if ( element_mode == IVAS_CPE_DFT ) + { + mvr2r( st->old_inp_16k, old_inp_16k, L_INP_MEM - STEREO_DFT_OVL_16k ); + } + else if ( element_mode == IVAS_CPE_TD ) + { + mvr2r( st->old_inp_16k, old_inp_16k, L_INP_MEM - L_MEM_RECALC_16K - L_FILT16k ); + } + else + { + mvr2r( st->old_inp_16k, old_inp_16k, L_INP_MEM - L_FILT16k ); + } + + /*---------------------------------------------------------------* + * Change the sampling frequency to 16/25.6/32 kHz + *----------------------------------------------------------------*/ + + if ( element_mode == IVAS_SCE ) + { + if ( input_Fs == sr_core ) + { + /* no resampling needed, only delay adjustment to account for the FIR resampling delay */ + delay = NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ); + mvr2r( st->mem_decim16k + delay, new_inp_16k, delay ); + mvr2r( signal_in, new_inp_16k + delay, input_frame ); + mvr2r( signal_in + input_frame - 2 * delay, st->mem_decim16k, 2 * delay ); + } + else if ( input_Fs == 32000 || input_Fs == 48000 ) + { + modify_Fs( signal_in, input_frame, input_Fs, new_inp_16k, sr_core, st->mem_decim16k, 0 ); + + mvr2r( st->mem_decim16k, mem_decim16k_dummy, 2 * L_FILT_MAX ); + set_f( temp1F_icatdmResampBuf, 0, L_FILT_MAX ); + modify_Fs( temp1F_icatdmResampBuf, NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_16k + NS2SA( sr_core, FRAME_SIZE_NS ), sr_core, mem_decim16k_dummy, 0 ); + } + } + else if ( element_mode == IVAS_CPE_TD ) + { + if ( input_Fs == sr_core ) + { + /* no resampling needed, only delay adjustment to account for the FIR resampling delay */ + delay = NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ); + mvr2r( st->mem_decim16k + delay, new_inp_16k - lMemRecalc - delay + L_FILT16k, delay ); + mvr2r( signal_in - lMemRecalc, new_inp_16k - lMemRecalc + L_FILT16k, input_frame + lMemRecalc ); + mvr2r( signal_in + input_frame - lMemRecalc - 2 * delay, st->mem_decim16k, 2 * delay ); + } + else if ( input_Fs == 32000 || input_Fs == 48000 ) + { + /* reconstruct past segment of input signal when switching from MDCT stereo */ + if ( last_element_mode == IVAS_CPE_MDCT /*|| st->idchan == 1*/ ) + { + int16_t length_inp = NS2SA( input_Fs, L_MEM_RECALC_SCH_NS - DELAY_FIR_RESAMPL_NS ); + int16_t length_16k = NS2SA( INT_FS_16k, L_MEM_RECALC_SCH_NS - DELAY_FIR_RESAMPL_NS ); + + mvr2r( signal_in - lMemRecalc - length_inp - 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), st->mem_decim16k, 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ) ); + modify_Fs( signal_in - lMemRecalc - length_inp, length_inp, input_Fs, new_inp_16k - lMemRecalc_16k - length_16k, sr_core, st->mem_decim16k, 0 ); + } + + modify_Fs( signal_in - lMemRecalc, input_frame, input_Fs, new_inp_16k - ( lMemRecalc * sr_core ) / st->input_Fs, sr_core, st->mem_decim16k, 0 ); + mvr2r( st->mem_decim16k, mem_decim16k_dummy, 2 * L_FILT_MAX ); + + if ( lMemRecalc > 0 ) + { + modify_Fs( signal_in - lMemRecalc + input_frame, lMemRecalc, input_Fs, new_inp_16k + NS2SA( sr_core, FRAME_SIZE_NS ) - ( lMemRecalc * sr_core ) / st->input_Fs, sr_core, mem_decim16k_dummy, 0 ); + } + + set_f( temp1F_icatdmResampBuf, 0, L_FILT_MAX ); + modify_Fs( temp1F_icatdmResampBuf, NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_16k + NS2SA( sr_core, FRAME_SIZE_NS ), sr_core, mem_decim16k_dummy, 0 ); + } +#ifdef DEBUGGING + else + { + return ( IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong internal sampling rate. Exiting..." ) ); + } +#endif + } + else if ( st->idchan == 0 ) + { + /* update the FIR resampling filter memory, needed for switching to time-domain (FIR) resampling */ + mvr2r( signal_in + input_frame - NS2SA( input_Fs, L_MEM_RECALC_NS ) - 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), st->mem_decim16k, 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ) ); + } + + /*------------------------------------------------* + * Update BWE memories * + *------------------------------------------------*/ + + if ( sr_core == INT_FS_16k && element_mode != IVAS_CPE_MDCT ) + { + delay = NS2SA( INT_FS_16k, DELAY_FD_BWE_ENC_12k8_NS ); + + if ( element_mode == IVAS_CPE_DFT ) + { + /* save input resampled at 16kHz, non-preemphasised.*/ + mvr2r( new_inp_16k, new_inp_resamp16k, L_FRAME16k ); + + if ( st->bwidth == WB ) + { + mvr2r( new_inp_16k - delay, st->hBWE_FD->old_input_wb, delay ); + mvr2r( new_inp_16k - STEREO_DFT_OVL_16k, st->hBWE_FD->old_wtda_swb + L_FRAME16k - STEREO_DFT_OVL_16k + delay, STEREO_DFT_OVL_16k - delay ); + } + } + else if ( element_mode == IVAS_CPE_TD ) + { + /* save input resampled at 16kHz, non-preemphasised */ + mvr2r( new_inp_16k + L_FILT16k, new_inp_resamp16k, L_FRAME16k ); + + if ( st->bwidth == WB && st->hBWE_FD != NULL ) + { + mvr2r( new_inp_16k + L_FILT16k - delay, st->hBWE_FD->old_input_wb, delay ); + mvr2r( new_inp_16k - L_MEM_RECALC_16K, st->hBWE_FD->old_wtda_swb + L_FRAME16k - L_MEM_RECALC_16K - L_FILT16k + delay, L_MEM_RECALC_16K + L_FILT16k - delay ); + } + } + else if ( element_mode == IVAS_SCE ) + { + /* save input resampled at 16kHz, non-preemphasised */ + mvr2r( new_inp_16k + L_FILT16k, new_inp_resamp16k, L_FRAME16k ); + + if ( st->bwidth == WB ) + { + mvr2r( new_inp_16k, st->hBWE_FD->old_input_wb + delay - L_FILT16k, L_FILT16k ); + /* all buffer st->hBWE_FD->old_wtda_swb is correct and does not need to be updated */ + } + } + } + else if ( sr_core > INT_FS_16k ) + { + /* reset the buffer, the signal is needed for WB BWEs */ + set_f( new_inp_resamp16k, 0.0f, L_FRAME16k ); + } + + /*------------------------------------------------------------------* + * Perform fixed preemphasis (16kHz signal) through 1 - g*z^-1 + *-----------------------------------------------------------------*/ + + if ( !( ( element_mode == IVAS_CPE_TD && st->idchan == 1 ) || element_mode == IVAS_CPE_MDCT ) ) + { + st->mem_preemph_enc = new_inp_16k[L_frame_tmp - 1]; + } + + if ( input_Fs > 8000 && sr_core == INT_FS_16k && element_mode != IVAS_CPE_MDCT ) + { + if ( element_mode == IVAS_CPE_DFT ) + { + mvr2r( new_inp_16k - STEREO_DFT_OVL_16k + L_FRAME16k, st->inp_16k_mem_stereo_sw, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); /* update for TD/DFT stereo switching */ + + st->mem_preemph16k = st->mem_preemph16k_DFT; + st->mem_preemph16k_DFT = old_inp_16k[L_INP_MEM - STEREO_DFT_OVL_16k + L_FRAME16k - 1]; + + if ( st->L_frame == L_FRAME16k ) + { + mvr2r( new_inp_16k - STEREO_DFT_OVL_16k, st->buf_speech_enc + L_FRAME16k - STEREO_DFT_OVL_16k, L_FRAME16k + STEREO_DFT_OVL_16k ); + } + preemph( new_inp_16k - STEREO_DFT_OVL_16k, PREEMPH_FAC_16k, L_FRAME16k, &( st->mem_preemph16k ) ); + tmp = st->mem_preemph16k; + preemph( new_inp_16k - STEREO_DFT_OVL_16k + L_FRAME16k, PREEMPH_FAC_16k, STEREO_DFT_OVL_16k, &tmp ); + } + else if ( st->element_mode == IVAS_CPE_TD ) + { + if ( last_element_mode == IVAS_CPE_DFT ) + { + st->mem_preemph16k = st->mem_preemph16k_DFT; + mvr2r( st->inp_16k_mem_stereo_sw, new_inp_16k - L_MEM_RECALC_16K - ( STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ), STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); + preemph( new_inp_16k - L_MEM_RECALC_16K - ( STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ), PREEMPH_FAC_16k, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k, &st->mem_preemph16k ); + } + + st->mem_preemph16k_DFT = old_inp_16k[L_INP_MEM - STEREO_DFT_OVL_16k + L_FRAME16k - 1]; + + /* preemphasise past segment of input signal when switching from MDCT stereo */ + if ( last_element_mode == IVAS_CPE_MDCT ) + { + int16_t length_16k = NS2SA( INT_FS_16k, L_MEM_RECALC_SCH_NS - DELAY_FIR_RESAMPL_NS ); + preemph( new_inp_16k - lMemRecalc_16k - length_16k, PREEMPH_FAC, length_16k, &st->mem_preemph16k ); + } + + if ( st->L_frame == L_FRAME16k ) + { + mvr2r( new_inp_16k - lMemRecalc_16k, st->buf_speech_enc + L_FRAME16k - lMemRecalc_16k - L_FILT16k, L_FRAME16k + lMemRecalc_16k + L_FILT16k ); + } + preemph( new_inp_16k - lMemRecalc_16k, PREEMPH_FAC_16k, L_FRAME16k, &( st->mem_preemph16k ) ); + tmp = st->mem_preemph16k; + preemph( new_inp_16k - lMemRecalc_16k + L_FRAME16k, PREEMPH_FAC_16k, lMemRecalc_16k + L_FILT16k, &tmp ); + } + else if ( element_mode == IVAS_SCE ) + { + preemph( new_inp_16k, PREEMPH_FAC_16k, L_FRAME16k, &( st->mem_preemph16k ) ); + tmp = st->mem_preemph16k; + preemph( new_inp_16k + L_FRAME16k, PREEMPH_FAC_16k, L_FILT16k, &tmp ); + } + } + else if ( input_Fs > 8000 ) /* keep memory up-to-date in case of bitrate switching */ + { + if ( element_mode == IVAS_CPE_DFT ) + { + st->mem_preemph16k = new_inp_16k[L_frame_tmp - STEREO_DFT_OVL_16k - 1]; + } + else if ( element_mode == IVAS_CPE_TD ) + { + st->mem_preemph16k = new_inp_16k[L_frame_tmp - lMemRecalc_16k - 1]; + } + else if ( element_mode == IVAS_CPE_MDCT ) + { + st->mem_preemph16k = 0; + } + else /* SCE */ + { + st->mem_preemph16k = new_inp_16k[L_frame_tmp - 1]; + } + st->mem_preemph16k_DFT = st->mem_preemph16k; + } + + /*-----------------------------------------------------------------* + * LP analysis at 16kHz if ACELP@16k core was selected + * update buffers + *-----------------------------------------------------------------*/ + + if ( st->L_frame == L_FRAME16k && element_mode != IVAS_CPE_MDCT ) + { + /* update signal buffers */ + if ( element_mode == IVAS_CPE_DFT ) + { + mvr2r( new_inp_16k - STEREO_DFT_OVL_16k, st->buf_speech_enc_pe + L_FRAME16k - STEREO_DFT_OVL_16k, L_FRAME16k + STEREO_DFT_OVL_16k ); + } + else if ( element_mode == IVAS_CPE_TD ) + { + mvr2r( new_inp_16k - lMemRecalc_16k, st->buf_speech_enc_pe + L_FRAME16k - lMemRecalc_16k - L_FILT16k, L_FRAME16k + lMemRecalc_16k + L_FILT16k ); + } + else + { + mvr2r( new_inp_resamp16k, st->buf_speech_enc + L_FRAME16k, L_FRAME16k ); + mvr2r( new_inp_16k, st->buf_speech_enc_pe + L_FRAME16k, L_FRAME16k ); + } + + /*--------------------------------------------------------------* + * LPC analysis + *---------------------------------------------------------------*/ + + if ( st->last_L_frame == L_FRAME ) + { + /* this is just an approximation, but it is sufficient */ + mvr2r( st->lsp_old1, st->lspold_enc, M ); + } + + analy_lp( inp_16k, L_FRAME16k, L_look, ener, A, epsP, lsp_new, lsp_mid, st->lspold_enc, st->pitch, st->voicing, INT_FS_16k, 0 ); + + /*--------------------------------------------------------------* + * Compute Weighted Input + *---------------------------------------------------------------*/ + + find_wsp( L_FRAME16k, L_SUBFR, NB_SUBFR16k, A, Aw, st->speech_enc_pe, PREEMPH_FAC_16k, st->wspeech_enc, &st->mem_wsp_enc, st->gamma, L_LOOK_16k ); + } + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + /* update old input signal @16kHz buffer */ + if ( ( element_mode == IVAS_CPE_TD && st->idchan == 1 ) || element_mode == IVAS_CPE_MDCT ) + { + set_f( st->old_inp_16k, 0, L_INP_MEM ); + } + else if ( input_Fs > 8000 && sr_core == INT_FS_16k ) + { + mvr2r( &old_inp_16k[L_frame_tmp], st->old_inp_16k, L_INP_MEM ); + } + else if ( input_Fs > 8000 ) + { + lerp( st->old_inp_12k8 + L_INP_MEM - L_INP_MEM * 4 / 5, st->old_inp_16k, L_INP_MEM, L_INP_MEM * 4 / 5 ); + } + + if ( inp16k_out != NULL ) + { + *inp16k_out = inp_16k; + } + + if ( new_inp_resamp16k_out != NULL ) + { + mvr2r( new_inp_resamp16k, new_inp_resamp16k_out, L_FRAME16k ); + } + + return IVAS_ERR_OK; +} diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c new file mode 100644 index 0000000000..c0dc1b7276 --- /dev/null +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -0,0 +1,904 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" +#include + + +/*-------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------*/ + +static void calculate_energy_buffer( CPE_ENC_HANDLE hCPE, float enerBuffer_dft[], const int16_t no_channels, const int32_t input_Fs ); + + +/*-------------------------------------------------------------------* + * pre_proc_front_ivas() + * + * Front Pre-processing for IVAS + * (resampling, spectral analysis, LP analysis, VAD, OL pitch calculation, classification) + *--------------------------------------------------------------------*/ + +ivas_error pre_proc_front_ivas( + SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int32_t element_brate, /* i : SCE/CPE element bitrate */ + const int16_t nb_bits_metadata, /* i : number of metadata bits */ + const int16_t input_frame, /* i : frame length */ + const int16_t n, /* i : channel number */ + float old_inp_12k8[], /* o : buffer of old input signal */ + float old_inp_16k[], /* o : buffer of old input signal @16kHz */ + float *Etot, /* o : total energy */ + float *ener, /* o : residual energy from Levinson-Durbin */ + float *relE, /* o : frame relative energy */ + float A[NB_SUBFR16k * ( M + 1 )], /* o : A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* o : weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* o : LP prediction errors */ + float lsp_new[M], /* o : LSPs at the end of the frame */ + float lsp_mid[M], /* o : LSPs in the middle of the frame */ + int16_t *vad_hover_flag, /* o : VAD hangover flag */ + int16_t *attack_flag, /* o : flag signalling attack */ + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ + float old_wsp[], /* o : weighted input signal buffer */ + float pitch_fr[NB_SUBFR], /* o : fractional pitch values */ + float voicing_fr[NB_SUBFR], /* o : fractional pitch gains */ + int16_t *loc_harm, /* o : harmonicity flag */ + float *cor_map_sum, /* o : speech/music clasif. parameter */ + int16_t *vad_flag_dtx, /* o : HE-SAD flag with additional DTX HO */ + float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* o : energy buffer */ + float fft_buff[2 * L_FFT], /* o : FFT buffer */ + const float tdm_A_PCh[M + 1], /* i : unq. LP coeff. of primary channel */ + const float tdm_lsp_new_PCh[M], /* i : unq. LSPs of primary channel */ + const float currFlatness, /* i : flatness parameter */ + const int16_t tdm_ratio_idx, /* i : Current Ratio_L index */ + float fr_bands_LR[CPE_CHANNELS][2 * NB_BANDS], /* i : energy in frequency bands */ + const float Etot_LR[CPE_CHANNELS], /* i : total energy Left & Right channel */ + float lf_E_LR[CPE_CHANNELS][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ + const int16_t localVAD_HE_SAD_LR[CPE_CHANNELS], /* i : HE-SAD flag without hangover, LR channels */ + float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN */ + const int16_t flag_16k_smc, /* i : flag to indicate if the OL SMC is run at 16 kHz */ + const int16_t spar_front_vad_flag, /* i : front-VAD flag to overwrite VAD decision */ + const int16_t spar_force_front_vad, /* i : flag to force VAD decision */ + const int16_t spar_front_vad_dtx_flag /* i : front-VAD DTX flag to overwrite VAD decision*/ +) +{ + float *inp_12k8, *new_inp_12k8; /* pointers to current frame and new data */ + float *wsp; /* weighted input signal buffer */ + float fr_bands[2 * NB_BANDS]; /* energy in frequency bands */ + float lf_E[2 * VOIC_BINS]; /* per bin spectrum energy in lf */ + float tmpN[NB_BANDS]; /* Temporary noise update */ + float tmpE[NB_BANDS]; /* Temporary averaged energy of 2 sf. */ + float tmpN_LR[CPE_CHANNELS][NB_BANDS]; /* Temporary noise update */ + float tmpE_LR[CPE_CHANNELS][NB_BANDS]; /* Temporary averaged energy of 2 sf. */ + float cor_map_sum_LR[CPE_CHANNELS]; /* speech/music clasif. parameter */ + float non_staX_LR; /* non-stationarity for sp/mus classifier */ + float ncharX_LR; /* noise character for sp/mus classifier */ + float sp_div_LR; /* spectral diversity feature */ + float S_map_LR[L_FFT / 2]; /* short-term correlation map */ + float corr_shiftL; /* correlation shift */ + float corr_shiftR; /* correlation shift */ + int16_t loc_harmLR[CPE_CHANNELS]; /* harmonicity flag */ + int16_t lr_vad_enabled; /* LR VAD indicator */ + float ee[2]; /* Spectral tilt */ + float corr_shift; /* correlation shift */ + float sp_div, PS[128]; /* speech/music clasif. parameters */ + int16_t L_look; /* length of look-ahead */ + float snr_sum_he; /* HE SAD parameters */ + float hp_E[2]; /* Energy in HF */ + int16_t flag_spitch; + int16_t high_lpn_flag; + float lsf_new[M]; + float band_energies[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ + int16_t localVAD_HE_SAD; + float non_staX; + float stab_fac; + int16_t alw_pitch_lag_12k8[2]; + float alw_voicing[2]; + int16_t last_core_orig; + float dummy; + float mem_decim_dummy[2 * L_FILT_MAX]; /* dummy decimation filter memory */ + float S_map[L_FFT / 2]; + int16_t i, lMemRecalc, lMemRecalc_12k8; + int16_t smc_dec; + float ncharX, dE1X; + Encoder_State *st; + float *signal_in; + int16_t element_mode; + int32_t input_Fs, last_element_brate; + int16_t *tdm_SM_last_clas, tmpS; + float *res_cod_SNR_M, tmpF[STEREO_DFT_BAND_MAX]; + STEREO_CLASSIF_HANDLE hStereoClassif; + float temp1F_icatdmResampBuf[L_FILT_MAX]; /* temp buffers for ICA TDM resamplers */ + int16_t old_pitch1; /* previous frame OL pitch[1] @12.8 kHz */ + int16_t LR_localVAD; + int16_t LR_vad_flag; + ivas_error error; + + wmops_sub_start( "pre_proc_front" ); + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + error = IVAS_ERR_OK; + + tmpS = 0; + tdm_SM_last_clas = &tmpS; + set_f( tmpF, 0, STEREO_DFT_BAND_MAX ); + res_cod_SNR_M = tmpF; + + LR_localVAD = 0; + LR_vad_flag = 0; + + if ( hSCE != NULL ) + { + st = hSCE->hCoreCoder[n]; + signal_in = hSCE->hCoreCoder[n]->input; + element_mode = IVAS_SCE; + last_element_brate = hSCE->element_brate; /* hack - the past parameter is not really needed */ + hStereoClassif = NULL; + lr_vad_enabled = 0; + } + else /* CPE */ + { + st = hCPE->hCoreCoder[n]; + signal_in = hCPE->hCoreCoder[n]->input; + element_mode = hCPE->element_mode; + last_element_brate = hCPE->last_element_brate; + hStereoClassif = hCPE->hStereoClassif; + lr_vad_enabled = 0; + if ( hCPE->hFrontVad[0] != NULL && hCPE->element_mode != IVAS_CPE_MDCT ) + { + lr_vad_enabled = 1; + } + + if ( lr_vad_enabled && n == 0 ) + { + /* Combine localVAD and vad_flag from LR processing */ + LR_localVAD = hCPE->hCoreCoder[0]->localVAD || hCPE->hCoreCoder[1]->localVAD; + LR_vad_flag = hCPE->hFrontVad[0]->hVAD->vad_flag || hCPE->hFrontVad[1]->hVAD->vad_flag; + } + + if ( hCPE->hStereoTD != NULL ) + { + tdm_SM_last_clas = &hCPE->hStereoTD->tdm_SM_last_clas[n]; + mvs2s( hCPE->hStereoTD->tdm_SM_last_clas, hCPE->hStereoTD->tdm_SM_last2_clas, CPE_CHANNELS ); + } + + if ( hCPE->hStereoDft != NULL ) + { + res_cod_SNR_M = hCPE->hStereoDft->res_cod_SNR_M; + } + } + + lMemRecalc_12k8 = 0; + lMemRecalc = 0; + if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) + { + lMemRecalc = NS2SA( st->input_Fs, L_MEM_RECALC_NS ); + lMemRecalc_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_NS ); + } + + input_Fs = st->input_Fs; + + localVAD_HE_SAD = 0; + snr_sum_he = 0; + + corr_shiftL = 0; + corr_shiftR = 0; + + if ( hSCE != NULL ) + { + *vad_hover_flag = 0; + } + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + st->coder_type = GENERIC; + if ( st->hGSCEnc != NULL ) + { + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; + } + *attack_flag = 0; + + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->bump_up = 0; + st->hSC_VBR->ppp_mode = 0; + st->hSC_VBR->nelp_mode = 0; + st->hSC_VBR->avoid_HQ_VBR_NB = 0; + } + + L_look = L_LOOK_12k8; /* lookahead at 12.8kHz */ + + new_inp_12k8 = old_inp_12k8 + L_INP_MEM; /* pointer to new samples of the input signal in 12.8kHz core */ + inp_12k8 = new_inp_12k8 - L_look; /* pointer to the current frame of input signal in 12.8kHz core */ + + if ( element_mode != IVAS_CPE_DFT ) + { + new_inp_12k8 -= L_FILT; + } + + if ( element_mode == IVAS_CPE_DFT ) + { + mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM - STEREO_DFT_OVL_12k8 ); + } + else if ( element_mode == IVAS_CPE_TD ) + { + mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM - lMemRecalc_12k8 - L_FILT ); + } + else + { + mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM - L_FILT ); + } + + mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); + wsp = old_wsp + L_WSP_MEM; /* pointer to the current frame of weighted signal in 12.8kHz core */ + + st->rf_mode = st->Opt_RF_ON; + + last_core_orig = st->last_core; + + /*--------------------------------------------------------------* + * energy analysis + *---------------------------------------------------------------*/ + + if ( element_mode == IVAS_SCE || ( element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) + { + analysisCldfbEncoder( st, signal_in, input_frame, realBuffer, imagBuffer, enerBuffer ); + } + else if ( ( element_mode == IVAS_CPE_TD && st->idchan == 0 ) || ( st->idchan == 1 && st->tdm_LRTD_flag ) ) + { + /* cldfb analysis only for pri. channel */ + analysisCldfbEncoder( st, signal_in - NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ), input_frame, realBuffer, imagBuffer, enerBuffer ); + } + else if ( element_mode == IVAS_CPE_DFT ) + { + calculate_energy_buffer( hCPE, enerBuffer, st->cldfbAnaEnc->no_channels, input_Fs ); + } + else + { + set_f( enerBuffer, 0, CLDFB_NO_CHANNELS_MAX ); + } + + /*----------------------------------------------------------------* + * Change the sampling frequency to 12.8 kHz + * (if not available from downsampled DMX) + *----------------------------------------------------------------*/ + + if ( element_mode == IVAS_SCE ) + { + modify_Fs( signal_in, input_frame, input_Fs, new_inp_12k8, INT_FS_12k8, st->mem_decim, ( st->max_bwidth == NB ) ); + + mvr2r( st->mem_decim, mem_decim_dummy, 2 * L_FILT_MAX ); + set_f( temp1F_icatdmResampBuf, 0, L_FILT_MAX ); + modify_Fs( temp1F_icatdmResampBuf, NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_12k8 + L_FRAME, INT_FS_12k8, mem_decim_dummy, 0 ); + } + else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) + { + /* reconstruct past segment of the Secondary channel input signal when switching from DFT stereo */ + if ( hCPE->last_element_mode == IVAS_CPE_DFT && st->idchan == 1 ) + { + int16_t length_inp = NS2SA( input_Fs, L_MEM_RECALC_SCH_NS ); + int16_t length_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_SCH_NS ); + + modify_Fs( signal_in - lMemRecalc - length_inp, length_inp, input_Fs, new_inp_12k8 - lMemRecalc_12k8 - length_12k8, INT_FS_12k8, st->mem_decim, 0 ); + } + + modify_Fs( signal_in - lMemRecalc, input_frame, input_Fs, new_inp_12k8 - lMemRecalc_12k8, INT_FS_12k8, st->mem_decim, ( st->max_bwidth == NB ) ); + mvr2r( st->mem_decim, mem_decim_dummy, 2 * L_FILT_MAX ); + + if ( lMemRecalc > 0 ) + { + modify_Fs( signal_in + input_frame - lMemRecalc, lMemRecalc, input_Fs, new_inp_12k8 + L_FRAME - lMemRecalc_12k8, INT_FS_12k8, mem_decim_dummy, ( st->max_bwidth == NB ) ); + } + set_f( temp1F_icatdmResampBuf, 0, L_FILT_MAX ); + modify_Fs( temp1F_icatdmResampBuf, NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_12k8 + L_FRAME, INT_FS_12k8, mem_decim_dummy, 0 ); + } + else /* DFT stereo */ + { + /* update the FIR resampling filter memory, needed for switching to time-domain (FIR) resampling */ + mvr2r( signal_in + input_frame - NS2SA( input_Fs, L_MEM_RECALC_NS ) - 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), st->mem_decim, 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ) ); + } + + /* save input resampled at 12.8kHz, non-preemhasised */ + if ( element_mode == IVAS_CPE_DFT ) + { + mvr2r( new_inp_12k8 - STEREO_DFT_OVL_12k8, st->buf_speech_enc + L_FRAME32k - STEREO_DFT_OVL_12k8, L_FRAME + STEREO_DFT_OVL_12k8 ); + } + else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) + { + mvr2r( new_inp_12k8 - lMemRecalc_12k8, st->buf_speech_enc + L_FRAME32k - lMemRecalc_12k8 - L_FILT, L_FRAME + lMemRecalc_12k8 + L_FILT ); + } + else + { + mvr2r( new_inp_12k8, st->buf_speech_enc + L_FRAME32k, L_FRAME ); + } + + /*------------------------------------------------------------------* + * Perform fixed preemphasis (12.8 kHz signal) through 1 - g*z^-1 + *-----------------------------------------------------------------*/ + + if ( element_mode == IVAS_CPE_DFT ) + { + mvr2r( new_inp_12k8 - STEREO_DFT_OVL_12k8 + L_FRAME, st->inp_12k8_mem_stereo_sw, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); /* memory for TD/DFT stereo switching */ + + st->mem_preemph = st->mem_preemph_DFT; + st->mem_preemph_DFT = old_inp_12k8[L_INP_MEM - STEREO_DFT_OVL_12k8 + L_FRAME - 1]; + + preemph( new_inp_12k8 - STEREO_DFT_OVL_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph ); + dummy = st->mem_preemph; + preemph( new_inp_12k8 - STEREO_DFT_OVL_12k8 + L_FRAME, PREEMPH_FAC, STEREO_DFT_OVL_12k8, &dummy ); + } + else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) + { + if ( st->idchan == 0 ) + { + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + st->mem_preemph = st->mem_preemph_DFT; + mvr2r( st->inp_12k8_mem_stereo_sw, new_inp_12k8 - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); + preemph( new_inp_12k8 - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), PREEMPH_FAC, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT, &st->mem_preemph ); + } + + st->mem_preemph_DFT = old_inp_12k8[L_INP_MEM - STEREO_DFT_OVL_12k8 + L_FRAME - 1]; /* == inp_12k8[L_FRAME-1] */ + } + + /* preemphasise past segment of the Secondary channel input signal when switching from DFT stereo */ + if ( hCPE->last_element_mode == IVAS_CPE_DFT && st->idchan == 1 ) + { + int16_t length_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_SCH_NS ); + preemph( new_inp_12k8 - lMemRecalc_12k8 - length_12k8, PREEMPH_FAC, length_12k8, &st->mem_preemph ); + } + + preemph( new_inp_12k8 - lMemRecalc_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph ); + dummy = st->mem_preemph; + preemph( new_inp_12k8 - lMemRecalc_12k8 + L_FRAME, PREEMPH_FAC, lMemRecalc_12k8 + L_FILT, &dummy ); + } + else /* IVAS_SCE or IVAS_CPE_MDCT */ + { + preemph( new_inp_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph ); + dummy = st->mem_preemph; + preemph( new_inp_12k8 + L_FRAME, PREEMPH_FAC, L_FILT, &dummy ); + } + + /*-------------------------------------------------------------------------* + * Spectral analysis + *--------------------------------------------------------------------------*/ + + analy_sp( element_mode, hCPE, input_Fs, inp_12k8, st->Bin_E, st->Bin_E_old, fr_bands, lf_E, Etot, st->min_band, st->max_band, band_energies, PS, fft_buff ); + + if ( hStereoClassif != NULL ) + { + if ( st->lp_speech - *Etot > 25 ) + { + hStereoClassif->silence_flag = 2; + } + else + { + hStereoClassif->silence_flag = hStereoClassif->silence_flag - 1; + } + hStereoClassif->silence_flag = max( 0, hStereoClassif->silence_flag ); + } + + /*----------------------------------------------------------------* + * SAD (1-signal, 0-noise) + *----------------------------------------------------------------*/ + + noise_est_pre( *Etot, st->ini_frame, st->hNoiseEst, st->idchan, element_mode, hCPE != NULL ? hCPE->last_element_mode : element_mode ); + + if ( element_mode == IVAS_CPE_TD && ( ( abs( hCPE->hStereoTD->tdm_last_ratio_idx - tdm_ratio_idx ) > 5 && st->idchan == 1 ) || abs( hCPE->hStereoTD->tdm_last_inst_ratio_idx - hCPE->hStereoTD->tdm_inst_ratio_idx ) > 10 ) ) + { + st->ini_frame = 1; + } + + st->vad_flag = wb_vad( st, fr_bands, &i, &i, &i, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); + +#ifdef ITD_WINNER_GAIN_MODIFY + /*Save the local_vad flag for the noise coherence calculation*/ + if ( element_mode == IVAS_CPE_DFT ) + { + hCPE->hStereoDft->local_vad = (short) ( st->vad_flag ); + } +#endif + + if ( spar_force_front_vad == 1 || spar_front_vad_flag == 1 ) + { + /* overwrite VAD decision with front-VAD decision if external VAD is set to 1*/ + st->vad_flag = spar_front_vad_flag; + st->localVAD = spar_front_vad_flag; + } + + if ( ( hCPE != NULL && !( lr_vad_enabled && st->idchan == 0 ) ) || hSCE != NULL ) + { + *vad_flag_dtx = dtx_hangover_addition( st, st->vad_flag, st->lp_speech - st->lp_noise, 0, vad_hover_flag, NULL, NULL ); + } + else + { + /* This only applies to st->idchan==0 now */ + /* Add down mix stereo activity to LR vad_flag_dtx */ + *vad_flag_dtx = *vad_flag_dtx || st->vad_flag; + + /* Combine the LR VAD flag and stereo downmix VAD flag */ + st->vad_flag = ( LR_vad_flag || st->vad_flag ); + + /* Determine hangover flag status based on LR localVAD and downmix localVAD */ + *vad_hover_flag = *vad_flag_dtx && !( LR_localVAD || st->localVAD ); + } + + if ( spar_force_front_vad == 1 || spar_front_vad_dtx_flag == 1 ) + { + /* overwrite VAD decision with front-VAD decision if external VAD is set to 1*/ + *vad_flag_dtx = spar_front_vad_dtx_flag; + } + + /*----------------------------------------------------------------* + * NB/WB/SWB/FB bandwidth detector + *----------------------------------------------------------------*/ + + if ( st->idchan == 0 && element_mode != IVAS_CPE_MDCT ) + { + bw_detect( st, st->input, NULL, enerBuffer ); + } + + if ( element_mode != IVAS_CPE_MDCT ) /* in MDCT stereo, set_bw_stereo() is used instead */ + { + set_bw( element_mode, element_brate, st, MODE1 ); + } + + /* set the BW of the TD secondary channel in LRTD mode same as BW of the primary channel (only at higher bitrates) */ + if ( st->idchan == 1 && element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag == 1 && st->bits_frame_channel >= IVAS_16k4 / FRAMES_PER_SEC ) + { + st->bwidth = hCPE->hCoreCoder[0]->bwidth; + } + + /*----------------------------------------------------------------* + * Noise energy down-ward update and total noise energy estimation + * Long-term energies and relative frame energy updates + * Correlation correction as a function of total noise level + *----------------------------------------------------------------*/ + + noise_est_down( fr_bands, st->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &st->hNoiseEst->totalNoise, *Etot, &st->hNoiseEst->Etot_last, &st->hNoiseEst->Etot_v_h2 ); + + if ( lr_vad_enabled && st->idchan == 0 ) + { + noise_est_down( fr_bands_LR[0], hCPE->hFrontVad[0]->hNoiseEst->bckr, tmpN_LR[0], tmpE_LR[0], st->min_band, st->max_band, &hCPE->hFrontVad[0]->hNoiseEst->totalNoise, Etot_LR[0], &hCPE->hFrontVad[0]->hNoiseEst->Etot_last, &hCPE->hFrontVad[0]->hNoiseEst->Etot_v_h2 ); + noise_est_down( fr_bands_LR[1], hCPE->hFrontVad[1]->hNoiseEst->bckr, tmpN_LR[1], tmpE_LR[1], st->min_band, st->max_band, &hCPE->hFrontVad[1]->hNoiseEst->totalNoise, Etot_LR[1], &hCPE->hFrontVad[1]->hNoiseEst->Etot_last, &hCPE->hFrontVad[1]->hNoiseEst->Etot_v_h2 ); + corr_shiftL = correlation_shift( hCPE->hFrontVad[0]->hNoiseEst->totalNoise ); + corr_shiftR = correlation_shift( hCPE->hFrontVad[1]->hNoiseEst->totalNoise ); + } + + *relE = *Etot - st->lp_speech; + + corr_shift = correlation_shift( st->hNoiseEst->totalNoise ); + + /*----------------------------------------------------------------* + * FD-CNG Noise Estimator + *----------------------------------------------------------------*/ + + if ( st->hFdCngEnc != NULL ) + { + resetFdCngEnc( st ); + + if ( st->idchan == 0 || element_mode == IVAS_CPE_MDCT ) + { + if ( element_mode == IVAS_CPE_TD && lr_vad_enabled && band_energies_LR != NULL ) + { + perform_noise_estimation_enc( band_energies_LR, enerBuffer, st->hFdCngEnc, input_Fs, hCPE ); + } + else + { + perform_noise_estimation_enc( band_energies, enerBuffer, st->hFdCngEnc, input_Fs, hCPE ); + } + } + } + + /*-----------------------------------------------------------------* + * Select SID or FRAME_NO_DATA frame if DTX enabled + *-----------------------------------------------------------------*/ + + if ( hCPE != NULL && element_mode != IVAS_CPE_DFT && element_mode != IVAS_CPE_MDCT ) + { + *vad_flag_dtx = 1; + } + + if ( st->Opt_DTX_ON == 1 && *vad_flag_dtx == 0 && element_mode == IVAS_CPE_DFT && element_brate <= ACELP_16k40 && hCPE->hStereoDft->hConfig->force_mono_transmission == 1 ) /* force LP_CNG usage for MASA DTX when mono tranmission */ + { + st->cng_type = LP_CNG; + } + + dtx( st, *vad_flag_dtx, inp_12k8 ); + + /*----------------------------------------------------------------* + * Adjust FD-CNG Noise Estimator + *----------------------------------------------------------------*/ + + if ( st->hFdCngEnc != NULL && ( last_element_brate != element_brate || st->last_bwidth != st->bwidth ) ) + { + configureFdCngEnc( st->hFdCngEnc, max( st->input_bwidth, WB ), st->bits_frame_nominal * FRAMES_PER_SEC ); + if ( hCPE != NULL ) + { + st->hFdCngEnc->hFdCngCom->CngBitrate = hCPE->element_brate - 1; + } + } + + if ( st->hFdCngEnc != NULL && st->Opt_DTX_ON ) + { + AdjustFirstSID( st ); + } + + /*----------------------------------------------------------------* + * LP analysis + *----------------------------------------------------------------*/ + + alw_pitch_lag_12k8[0] = st->old_pitch_la; + alw_pitch_lag_12k8[1] = st->old_pitch_la; + alw_voicing[0] = st->voicing[2]; + alw_voicing[1] = st->voicing[2]; + + i = 0; + if ( element_mode == IVAS_CPE_TD && st->idchan == 1 && hCPE->hStereoTD->tdm_low_rate_mode == 1 ) + { + i = 1; + } + + analy_lp( inp_12k8, L_FRAME, L_look, ener, A, epsP, lsp_new, lsp_mid, st->lsp_old1, alw_pitch_lag_12k8, alw_voicing, INT_FS_12k8, i ); + + lsp2lsf( lsp_new, lsf_new, M, INT_FS_12k8 ); + stab_fac = lsf_stab( lsf_new, st->lsf_old1, 0, L_FRAME ); + mvr2r( lsf_new, st->lsf_old1, M ); + + if ( element_mode == IVAS_CPE_TD && st->idchan == 1 ) + { + /*----------------------------------------------------------------* + * Comparison of the LP coefficents to determine if it is possible + * to reuse the primary channel LP coefficients in the secondary channel + *----------------------------------------------------------------*/ + + hCPE->hStereoTD->tdm_lp_reuse_flag = tdm_lp_comparison( hCPE->hStereoTD, hCPE->hStereoClassif, st, inp_12k8, tdm_A_PCh, A, M, tdm_lsp_new_PCh, lsp_new, L_FRAME, element_brate - nb_bits_metadata * FRAMES_PER_SEC ); + } + + /*----------------------------------------------------------------* + * Compute weighted input (for OL pitch analysis) + * OL pitch analysis + * stable high pitch detection + * 1/4 pitch precision improvement + *----------------------------------------------------------------*/ + + find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp_12k8, TILT_FAC, wsp, &st->mem_wsp, GAMMA1, L_look ); + + if ( st->vad_flag == 0 ) + { + /* reset the OL pitch tracker memories during inactive frames */ + pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); + } + + old_pitch1 = st->pitch[1]; + + pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, *relE, L_look, st->clas, st->input_bwidth, st->Opt_SC_VBR ); + + /* Updates for adaptive lag window memory */ + st->old_pitch_la = st->pitch[2]; + + /* Detection of very short stable pitch period */ + StableHighPitchDetect( &flag_spitch, st->pitch, st->voicing, st->Bin_E, wsp, st->localVAD, &st->voicing_sm, &st->voicing0_sm, &st->LF_EnergyRatio_sm, &st->predecision_flag, &st->diff_sm, &st->energy_sm ); + + /* 1/4 pitch precision improvement */ + if ( element_brate <= IVAS_32k ) + { + pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[0], &voicing_fr[0], 0, wsp, 7 ); + pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[1], &voicing_fr[1], L_SUBFR, wsp, 7 ); + pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[2], &voicing_fr[2], 2 * L_SUBFR, wsp, 7 ); + pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[3], &voicing_fr[3], 3 * L_SUBFR, wsp, 7 ); + } + else + { + pitch_fr[0] = st->pitch[0]; + pitch_fr[1] = st->pitch[0]; + pitch_fr[2] = st->pitch[1]; + pitch_fr[3] = st->pitch[1]; + + voicing_fr[0] = st->voicing[0]; + voicing_fr[1] = st->voicing[0]; + voicing_fr[2] = st->voicing[1]; + voicing_fr[3] = st->voicing[1]; + } + + /*------------------------------------------------------------------* + * Update estimated noise energy and voicing cut-off frequency + *-----------------------------------------------------------------*/ + + noise_est( st, old_pitch1, tmpN, epsP, *Etot, *relE, corr_shift, tmpE, fr_bands, cor_map_sum, &ncharX, &sp_div, + &non_staX, loc_harm, lf_E, &st->hNoiseEst->harm_cor_cnt, st->hNoiseEst->Etot_l_lp, &dummy /*sp_floor*/, S_map, hStereoClassif, NULL, st->ini_frame ); + + if ( lr_vad_enabled && st->idchan == 0 ) + { + /* Run noise_est for Left and Right channel */ + *loc_harmLR = *loc_harm; + noise_est( st, old_pitch1, tmpN_LR[0], epsP, Etot_LR[0], Etot_LR[0] - hCPE->hFrontVad[0]->lp_speech, corr_shiftL, tmpE_LR[0], fr_bands_LR[0], &cor_map_sum_LR[0], &ncharX_LR, &sp_div_LR, + &non_staX_LR, loc_harmLR, lf_E_LR[0], &hCPE->hFrontVad[0]->hNoiseEst->harm_cor_cnt, hCPE->hFrontVad[0]->hNoiseEst->Etot_l_lp, &dummy, S_map_LR, NULL, hCPE->hFrontVad[0], hCPE->hFrontVad[0]->ini_frame ); + + /* Note: the index [0] in the last argument is intended, the ini_frame counter is only maintained in the zero-th channel's VAD handle */ + noise_est( st, old_pitch1, tmpN_LR[1], epsP, Etot_LR[1], Etot_LR[1] - hCPE->hFrontVad[1]->lp_speech, corr_shiftR, tmpE_LR[1], fr_bands_LR[1], &cor_map_sum_LR[1], &ncharX_LR, &sp_div_LR, + &non_staX_LR, loc_harmLR, lf_E_LR[1], &hCPE->hFrontVad[1]->hNoiseEst->harm_cor_cnt, hCPE->hFrontVad[1]->hNoiseEst->Etot_l_lp, &dummy, S_map_LR, NULL, hCPE->hFrontVad[1], hCPE->hFrontVad[0]->ini_frame ); + } + + /*------------------------------------------------------------------* + * Update parameters used in the VAD and DTX + *-----------------------------------------------------------------*/ + + vad_param_updt( st, corr_shift, corr_shift, A, old_pitch1, NULL, 1 ); + + if ( lr_vad_enabled && st->idchan == 0 ) + { + vad_param_updt( st, corr_shiftL, corr_shiftR, A, old_pitch1, &hCPE->hFrontVad[0], CPE_CHANNELS ); + } + + /*-----------------------------------------------------------------* + * Find spectral tilt + * UC and VC frame selection + *-----------------------------------------------------------------*/ + + find_tilt( fr_bands, st->hNoiseEst->bckr, ee, st->pitch, st->voicing, lf_E, corr_shift, st->input_bwidth, st->max_band, hp_E, MODE1, &( st->bckr_tilt_lt ), st->Opt_SC_VBR ); + + st->coder_type = find_uv( st, pitch_fr, voicing_fr, inp_12k8, ee, &dE1X, corr_shift, *relE, *Etot, hp_E, &flag_spitch, last_core_orig, hStereoClassif ); + + /*-----------------------------------------------------------------* + * channel aware mode configuration * + *-----------------------------------------------------------------*/ + + st->rf_mode = 0; + st->rf_target_bits_write = 0; + + /*-----------------------------------------------------------------* + * Signal classification for FEC + * TC frame selection + *-----------------------------------------------------------------*/ + + st->clas = signal_clas( st, inp_12k8, ee, *relE, L_look, tdm_SM_last_clas ); + + select_TC( MODE1, st->tc_cnt, &st->coder_type, st->localVAD ); + + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->Local_VAD = st->localVAD; + } + + /*-----------------------------------------------------------------* + * Collect stereo classifier features + *-----------------------------------------------------------------*/ + + if ( hStereoClassif != NULL ) + { + stereo_classifier_features( hStereoClassif, st->idchan, element_mode, localVAD_HE_SAD, lsf_new, epsP, st->pitch, st->voicing, *cor_map_sum, non_staX, sp_div, st->clas ); + } + + /*----------------------------------------------------------------* + * 1st stage speech/music classification (GMM model) + *----------------------------------------------------------------*/ + + smc_dec = ivas_smc_gmm( st, hStereoClassif, localVAD_HE_SAD, *Etot, lsp_new, *cor_map_sum, epsP, PS, non_staX, *relE, &high_lpn_flag, flag_spitch ); + +#ifdef DEBUGGING + if ( st->idchan == 0 ) + { + if ( st->force == FORCE_SPEECH ) + { + /* enforce speech */ + st->sp_aud_decision0 = 0; + } + else if ( st->force == FORCE_MUSIC ) + { + /* enforce music */ + st->sp_aud_decision0 = 1; + } + } +#endif + + /*----------------------------------------------------------------* + * VAD energy updates + * Update of old per-band energy spectrum + *----------------------------------------------------------------*/ + + long_enr( st, *Etot, localVAD_HE_SAD, high_lpn_flag, NULL, 1, NULL, NULL ); + + mvr2r( fr_bands + NB_BANDS, st->hNoiseEst->enrO, NB_BANDS ); + + if ( lr_vad_enabled && st->idchan == 0 ) + { + long_enr( st, *Etot, localVAD_HE_SAD, high_lpn_flag, hCPE->hFrontVad, CPE_CHANNELS, localVAD_HE_SAD_LR, Etot_LR ); + + mvr2r( fr_bands_LR[0] + NB_BANDS, hCPE->hFrontVad[0]->hNoiseEst->enrO, NB_BANDS ); + mvr2r( fr_bands_LR[1] + NB_BANDS, hCPE->hFrontVad[1]->hNoiseEst->enrO, NB_BANDS ); + + hCPE->hFrontVad[0]->hNoiseEst->Etot_last = Etot_LR[0]; + hCPE->hFrontVad[1]->hNoiseEst->Etot_last = Etot_LR[1]; + } + + /*----------------------------------------------------------------* + * SNR-based speech/music classification + * AC frame selection + *----------------------------------------------------------------*/ + + st->GSC_IVAS_mode = 0; + if ( st->idchan == 1 && element_mode == IVAS_CPE_TD ) + { + /* No speech/music classification in the secondary channel of TD stereo */ + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + + st->GSC_noisy_speech = 0; + if ( st->hGSCEnc != NULL ) + { + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP3; + } + } + else if ( element_mode != IVAS_CPE_MDCT ) + { + /* SNR-based speech/music classification */ + if ( ( element_mode >= IVAS_CPE_DFT && element_brate >= IVAS_24k4 ) || ( element_mode == IVAS_SCE && element_brate >= 16000 ) ) + { + if ( flag_16k_smc ) + { + /* Compute core-coder buffers at internal sampling rate */ + error = ivas_compute_core_buffers( st, NULL, old_inp_16k, NULL, input_frame, IVAS_SCE /*last_element_mode*/, INT_FS_16k /*sr_core_tmp*/, ener, A, Aw, epsP, lsp_new, lsp_mid ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + + smc_dec = ivas_acelp_tcx20_switching( st, st->speech_enc, st->wspeech_enc, non_staX, pitch_fr, voicing_fr, currFlatness, lsp_mid, stab_fac, res_cod_SNR_M, flag_16k_smc ); + } + else + { + smc_dec = ivas_acelp_tcx20_switching( st, inp_12k8, wsp, non_staX, pitch_fr, voicing_fr, currFlatness, lsp_mid, stab_fac, res_cod_SNR_M, flag_16k_smc ); + } + } + + /* 2nd stage speech/music classification (ACELP/GSC/TCX core selection) */ + ivas_smc_mode_selection( st, element_brate, smc_dec, *relE, *Etot, attack_flag, inp_12k8, S_map, flag_spitch ); + +#ifdef ITD_WINNER_GAIN_MODIFY + if ( element_mode == IVAS_CPE_DFT ) + { + if ( hCPE->hStereoDft->mus_flag != smc_dec || hCPE->element_mode != hCPE->last_element_mode ) + { + hCPE->hStereoDft->noise_coherence = 0.0f; + set_zero( hCPE->hStereoDft->spd_L_noise, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hCPE->hStereoDft->spd_R_noise, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hCPE->hStereoDft->spd_L_noise_min, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hCPE->hStereoDft->spd_R_noise_min, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hCPE->hStereoDft->spd_L_noise_max, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hCPE->hStereoDft->spd_R_noise_max, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hCPE->hStereoDft->winner_gain_L, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hCPE->hStereoDft->winner_gain_R, STEREO_DFT_N_32k_ENC / 2 ); + set_f( hCPE->hStereoDft->spd_L_smooth_new, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); + set_f( hCPE->hStereoDft->spd_R_smooth_new, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); + } + if ( smc_dec == MUSIC && st->vad_flag == 1 ) + { + hCPE->hStereoDft->mus_flag = 2; + } + else + { + hCPE->hStereoDft->mus_flag = 0; + } + } +#endif + } + + /*----------------------------------------------------------------* + * Final VAD correction (when HE-SAD is used instead of the normal VAD, + * rewrite the VAD flag by VAD flag with DTX hangover for further processing) + *----------------------------------------------------------------*/ + + if ( st->Opt_DTX_ON && element_mode != IVAS_CPE_DFT ) + { + st->vad_flag = *vad_flag_dtx; + } + + /*-----------------------------------------------------------------* + * Update old input signal buffer + *-----------------------------------------------------------------*/ + + mvr2r( &old_inp_12k8[L_FRAME], st->old_inp_12k8, L_INP_MEM ); + + wmops_sub_end(); + return error; +} + + +/*-------------------------------------------------------------------* + * calculate_energy_buffer() + * + * calculate DFT-based energies + *--------------------------------------------------------------------*/ + +static void calculate_energy_buffer( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + float enerBuffer_dft[], /* o : energy buffer */ + const int16_t no_channels, /* i : no. of used CLDFB channels */ + const int32_t input_Fs /* i : input sampling rate */ +) +{ + int16_t i, j; + float *pDFT_DMX, *p_nrg_DMX; + float nrg_DMX[CLDFB_NO_CHANNELS_MAX]; + float band_res_dft, chan_width_f, chan_width_bins; + int16_t start, stop; + + band_res_dft = ( (float) input_Fs ) / hCPE->hStereoDft->NFFT; + chan_width_f = 24000.f / CLDFB_NO_CHANNELS_MAX; + chan_width_bins = chan_width_f / band_res_dft; + + set_f( nrg_DMX, 0, CLDFB_NO_CHANNELS_MAX ); + + pDFT_DMX = hCPE->hStereoDft->DFT[0]; + start = 1; + p_nrg_DMX = nrg_DMX; + + *p_nrg_DMX += (float) ( pDFT_DMX[0] * pDFT_DMX[0] ); + for ( i = 0; i < no_channels; i++ ) + { + stop = (int16_t) ( ( i + 1 ) * chan_width_bins + 0.5f ); + for ( j = start; j < stop; j++ ) + { + *p_nrg_DMX += (float) ( pDFT_DMX[2 * j] * pDFT_DMX[2 * j] + pDFT_DMX[2 * j + 1] * pDFT_DMX[2 * j + 1] ); + } + start = stop; + p_nrg_DMX++; + } + + for ( i = 0; i < no_channels; i++ ) /* Consider only used channels, dependent on Fs */ + { + enerBuffer_dft[i] = nrg_DMX[i] / 3; + } + + /* Set remaining entries of enerBuffer to zero */ + for ( ; i < CLDFB_NO_CHANNELS_MAX; i++ ) + { + enerBuffer_dft[i] = 0.f; + } + + return; +} diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c new file mode 100644 index 0000000000..e7c34ae0e8 --- /dev/null +++ b/lib_enc/ivas_cpe_enc.c @@ -0,0 +1,1066 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ivas_cpe_enc() + * + * Channel Pair Element (CPE) encoding routine + *-------------------------------------------------------------------*/ + +ivas_error ivas_cpe_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + const float data_f_ch0[], /* i : input signal for channel 0 */ + const float data_f_ch1[], /* i : input signal for channel 1 */ + const int16_t input_frame, /* i : input frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + CPE_ENC_HANDLE hCPE; + Encoder_State **sts; + int16_t n, n_CoreChannels; + float old_inp_12k8[CPE_CHANNELS][L_INP_12k8]; /* buffer of input signal @ 12k8 */ + float old_inp_16k[CPE_CHANNELS][L_INP]; /* buffer of input signal @ 16kHz */ + float Etot[CPE_CHANNELS]; /* total energy; correlation shift */ + float ener[CPE_CHANNELS]; /* residual energy from Levinson-Durbin */ + float relE[CPE_CHANNELS]; /* frame relative energy */ + float A[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ + float Aw[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ + float epsP[CPE_CHANNELS][M + 1]; /* LP prediction errors */ + float lsp_new[CPE_CHANNELS][M]; /* LSPs at the end of the frame */ + float lsp_mid[CPE_CHANNELS][M]; /* ISPs in the middle of the frame */ + int16_t vad_hover_flag[CPE_CHANNELS]; /* VAD hangover flag */ + int16_t attack_flag[CPE_CHANNELS]; /* attack flag (GSC or TC) */ + float realBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ + float imagBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ + float old_wsp[CPE_CHANNELS][L_WSP]; /* old weighted input signal */ + float pitch_fr[CPE_CHANNELS][NB_SUBFR]; /* fractional pitch values */ + float voicing_fr[CPE_CHANNELS][NB_SUBFR]; /* fractional pitch gains */ + int16_t loc_harm[CPE_CHANNELS]; /* harmonicity flag */ + float cor_map_sum[CPE_CHANNELS]; /* speech/music clasif. parameter */ + int16_t vad_flag_dtx[CPE_CHANNELS]; /* HE-SAD flag with additional DTX HO */ + float enerBuffer[CPE_CHANNELS][CLDFB_NO_CHANNELS_MAX]; /* energy buffer */ + float currFlatness[CPE_CHANNELS]; /* flatness parameter */ + float fft_buff[CPE_CHANNELS][2 * L_FFT]; /* FFT buffer */ + int16_t tdm_ratio_idx, tdm_ratio_idx_SM; /* temp. TD stereo parameters */ + int16_t tdm_SM_or_LRTD_Pri, last_tdm_LRTD_flag; /* temp. TD stereo parameters */ + float tdm_last_ratio; /* temp. TD stereo parameters */ + int16_t nb_bits; /* number of DFT stereo side bits */ + float fr_bands[CPE_CHANNELS][2 * NB_BANDS]; /* energy in frequency bands */ + float Etot_LR[CPE_CHANNELS]; /* total energy */ + float lf_E[CPE_CHANNELS][2 * VOIC_BINS]; /* per bin spectrum energy in lf */ + int16_t localVAD_HE_SAD[CPE_CHANNELS]; /* HE-SAD flag without hangover, LR channels */ + float band_energies_LR[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ + float orig_input[CPE_CHANNELS][L_FRAME48k]; + int32_t tmp, input_Fs; + int16_t max_bwidth, ivas_format; + ENCODER_CONFIG_HANDLE hEncoderConfig; + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_cpe_enc" ); + + hCPE = st_ivas->hCPE[cpe_id]; + sts = hCPE->hCoreCoder; + hEncoderConfig = st_ivas->hEncoderConfig; + + max_bwidth = hEncoderConfig->max_bwidth; + ivas_format = hEncoderConfig->ivas_format; + input_Fs = hEncoderConfig->input_Fs; + ivas_total_brate = hEncoderConfig->ivas_total_brate; + + + /*------------------------------------------------------------------* + * Initialization - general + *-----------------------------------------------------------------*/ + + tdm_SM_or_LRTD_Pri = 0; + last_tdm_LRTD_flag = 0; + tdm_ratio_idx = -1; + tdm_ratio_idx_SM = -1; + tdm_last_ratio = 0; + + if ( hCPE->hStereoTD != NULL ) + { + last_tdm_LRTD_flag = hCPE->hStereoTD->tdm_LRTD_flag; + } + +#ifdef DEBUGGING + if ( hCPE->hCoreCoder[0]->ini_frame == 0 ) + { + hCPE->stereo_mode_cmdl = hEncoderConfig->stereo_mode_cmdl; + } +#endif + + /*------------------------------------------------------------------* + * CPE initialization - core coder + *-----------------------------------------------------------------*/ + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + sts[n]->idchan = n; + sts[n]->core = -1; + sts[n]->core_brate = -1; /* updated in dtx() */ + sts[n]->max_bwidth = max_bwidth; + if ( st_ivas->hMCT == NULL ) /*already updated before CPE call*/ + { + sts[n]->input_bwidth = sts[n]->last_input_bwidth; /* updated in BWD */ + sts[n]->bwidth = sts[n]->last_bwidth; /* updated in BWD */ + } + sts[n]->rate_switching_reset = 0; +#ifdef DEBUGGING + sts[n]->force = hEncoderConfig->force; + sts[n]->id_element = cpe_id + st_ivas->nSCE; +#endif + } + + mvr2r( data_f_ch0, sts[0]->input, input_frame ); + mvr2r( data_f_ch1, sts[1]->input, input_frame ); + + /*----------------------------------------------------------------* + * Stereo technology selection + * Front-VAD on input L and R channels + *----------------------------------------------------------------*/ + + if ( sts[0]->ini_frame > 0 && st_ivas->hMCT == NULL ) + { + hCPE->element_mode = select_stereo_mode( hCPE, ivas_format, ivas_total_brate ); + } + + if ( ( error = front_vad( hCPE, NULL, hEncoderConfig, &hCPE->hFrontVad[0], st_ivas->hMCT != NULL, input_frame, vad_flag_dtx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, vad_hover_flag, band_energies_LR, NULL, NULL ) ) != IVAS_ERR_OK ) + { + return error; + } + + sts[0]->element_mode = hCPE->element_mode; + sts[1]->element_mode = hCPE->element_mode; + + n_CoreChannels = 2; + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + n_CoreChannels = 1; /* in DFT stereo, only M channel is coded */ + + sts[1]->vad_flag = 0; + } + + /*----------------------------------------------------------------* + * dynamically allocate data structures depending on the actual stereo mode + *----------------------------------------------------------------*/ + + if ( ( error = stereo_memory_enc( hCPE, input_Fs, max_bwidth, &tdm_last_ratio, ivas_format ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*----------------------------------------------------------------* + * Set TD stereo parameters + *----------------------------------------------------------------*/ + + if ( ( error = stereo_set_tdm( hCPE, input_frame ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*----------------------------------------------------------------* + * Resets/updates in case of stereo switching + *----------------------------------------------------------------*/ + + stereo_switching_enc( hCPE, sts[0]->old_input_signal, input_frame ); + + /*----------------------------------------------------------------* + * Temporal inter-channel alignment, stereo adjustment + *----------------------------------------------------------------*/ + + stereo_tca_enc( hCPE, input_frame ); + + /*----------------------------------------------------------------* + * Input signal buffering - needed in IC-BWE and TD ITD in MDCT stereo + *----------------------------------------------------------------*/ + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mvr2r( sts[n]->input, orig_input[n], input_frame ); + + if ( hCPE->hStereoICBWE != NULL ) + { + hCPE->hStereoICBWE->dataChan[n] = &orig_input[n][0]; + } + } + + /*---------------------------------------------------------------* + * Time Domain Transient Detector + *---------------------------------------------------------------*/ + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( sts[n]->hTranDet == NULL ) + { + currFlatness[n] = 0; + continue; + } + + if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) ) + { + RunTransientDetection( sts[n]->input, input_frame, sts[n]->hTranDet ); + } + currFlatness[n] = GetTCXAvgTemporalFlatnessMeasure( sts[n]->hTranDet, NSUBBLOCKS, 0 ); + } + + /* Synchonize detection for downmix-based stereo */ + if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) + { + set_transient_stereo( hCPE, currFlatness ); + } + + /*----------------------------------------------------------------* + * Configuration of stereo encoder + *----------------------------------------------------------------*/ + + for ( n = 0; n < n_CoreChannels; n++ ) + { + /* Force to MODE1 in IVAS */ + sts[n]->codec_mode = MODE1; + + sts[n]->element_mode = hCPE->element_mode; + } + + if ( hCPE->element_mode != IVAS_CPE_MDCT && ( hCPE->element_brate != hCPE->last_element_brate || hCPE->last_element_mode != hCPE->element_mode || + sts[0]->ini_frame == 0 || sts[0]->last_core_brate <= SID_2k40 ) ) /* If the last frame was SID or NO_DATA, we need to run stereo_dft_config here since VAD decision is not known yet */ + { + if ( st_ivas->hQMetaData != NULL ) + { + stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + else + { + /* note; "bits_frame_nominal" needed in TD stereo as well */ /* IVAS_fmToDo: is "bits_frame_nominal" set optimaly in TD stereo? */ + stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + } + + if ( hCPE->element_mode == IVAS_CPE_TD && last_tdm_LRTD_flag != hCPE->hStereoTD->tdm_LRTD_flag ) + { + if ( hCPE->hStereoTD->tdm_LRTD_flag ) + { + sts[0]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); + sts[1]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); + } + else + { + stereo_dft_config( NULL, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + } + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + /* this is just for initialization, the true values of "total_brate" and "bits_frame_channel" are set later */ + for ( n = 0; n < n_CoreChannels; n++ ) + { + if ( st_ivas->hMCT ) + { + sts[n]->total_brate = hCPE->element_brate; + if ( sts[n]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + sts[n]->bits_frame_nominal = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); + sts[n]->bits_frame_channel = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC - ( st_ivas->hMCT->num_lfe == FALSE ? 0 : LFE_BITS ) - nb_bits_metadata ) / st_ivas->hMCT->nchan_out_woLFE ); + } + } + else + { + sts[n]->bits_frame_nominal = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); + sts[n]->bits_frame_channel = (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) / n_CoreChannels ); + sts[n]->total_brate = hCPE->element_brate / n_CoreChannels; + } + } + + /* reconfiguration in case of bitrate switching */ + if ( hCPE->element_brate != hCPE->last_element_brate && st_ivas->hMCT == NULL ) + { +#ifdef DEBUGGING + hCPE->hStereoMdct->mdct_stereo_mode_cmdl = hEncoderConfig->stereo_mode_cmdl; +#endif + initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, max_bwidth, 0, NULL, 0 ); + } + } + + /*----------------------------------------------------------------* + * Stereo processing + * Stereo down-mix + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + stereo_dft_hybrid_ITD_flag( hCPE->hStereoDft->hConfig, input_Fs ); + + /* Time Domain ITD compensation using extrapolation */ +#ifdef DEBUG_MODE_DFT + stereo_td_itd( hCPE->hStereoDft->hItd, hCPE->hStereoDft->input_mem_itd, hCPE->hStereoDft->hConfig->hybrid_itd_flag, hCPE->hStereoDft->hConfig->itd_mode, hCPE->hStereoDft->dft_ovl, sts, input_frame, hCPE->input_mem ); +#else + stereo_td_itd( hCPE->hStereoDft->hItd, hCPE->hStereoDft->input_mem_itd, hCPE->hStereoDft->hConfig->hybrid_itd_flag, hCPE->hStereoDft->dft_ovl, sts, input_frame, hCPE->input_mem ); +#endif + + /* DFT on right and left input channels */ + stereo_dft_enc_analyze( sts, CPE_CHANNELS, input_frame, hCPE->hStereoDft, NULL, hCPE->hStereoDft->DFT, hCPE->input_mem ); + + sts[0]->total_brate = ( sts[0]->bits_frame_nominal + 10 ) * FRAMES_PER_SEC; /* add small overhead; st[0]->total_brate used in coder_type_modif() */ + + if ( ( sts[0]->last_bwidth < max_bwidth ) || ( sts[0]->last_core_brate <= SID_2k40 ) ) /* IVAS_fmToDo: TBV - BWD output is not known here yet !!! */ + { + /* reconfigure in case of BW switching or if last frame was a SID/NO_DATA with coarse partitioning */ + hCPE->hStereoDft->nbands = stereo_dft_band_config( hCPE->hStereoDft->band_limits, hCPE->hStereoDft->hConfig->band_res, hCPE->hStereoDft->NFFT, ENC ); + } + + /* Update DFT Stereo memories */ + stereo_dft_enc_update( hCPE->hStereoDft, sts[0]->max_bwidth +#ifdef DEBUG_MODE_DFT + , + (int16_t) ( ( hCPE->element_brate ) / FRAMES_PER_SEC - 0.8f * sts[0]->bits_frame_nominal ) +#endif + ); + + /* DFT stereo processing */ + stereo_dft_enc_process( hCPE, input_frame ); + } + else if ( hCPE->element_mode == IVAS_CPE_TD ) + { + /* Determine the energy ratio between the 2 channels */ + tdm_ratio_idx = stereo_tdm_ener_analysis( hCPE, input_frame, &tdm_SM_or_LRTD_Pri, &tdm_ratio_idx_SM ); + + /* Compute the downmix signal based on the ratio index */ + stereo_tdm_downmix( hCPE->hStereoTD, sts[0]->input, sts[1]->input, input_frame, tdm_ratio_idx, ( ( hCPE->hStereoTD->tdm_LRTD_flag == 0 ) ? tdm_SM_or_LRTD_Pri : 0 ), tdm_ratio_idx_SM ); + + /* signal the bitrate for BW selection in the SCh */ + sts[0]->bits_frame_channel = 0; + sts[1]->bits_frame_channel = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); + if ( st_ivas->hQMetaData != NULL ) + { + sts[1]->bits_frame_channel -= st_ivas->hQMetaData->metadata_max_bits; + } + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + stereo_td_itd_mdct_stereo( hCPE, input_frame ); + } + + /*----------------------------------------------------------------* + * DFT stereo: iDFT and resampling on both channels + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + int32_t internal_Fs; + + internal_Fs = getTcxonly( IVAS_CPE_MDCT, sts[0]->bits_frame_nominal * FRAMES_PER_SEC, 0 ) == 0 ? INT_FS_16k : max( INT_FS_16k, sts[0]->sr_core ); + + /* iDFT at input sampling rate */ + stereo_dft_enc_synthesize( hCPE->hStereoDft, sts[0]->input, 0, input_Fs, input_Fs, 0 ); + + /* iDFT & resampling to 12.8kHz internal sampling rate */ + stereo_dft_enc_synthesize( hCPE->hStereoDft, old_inp_12k8[0] + L_INP_MEM, 0, input_Fs, INT_FS_12k8, 0 ); + + /* iDFT & resampling to 16kHz internal sampling rate for M channel */ + if ( input_Fs == internal_Fs ) + { + mvr2r( sts[0]->input - STEREO_DFT_OVL_16k, old_inp_16k[0] + L_INP_MEM - STEREO_DFT_OVL_16k, input_frame + STEREO_DFT_OVL_16k ); + } + else + { + stereo_dft_enc_synthesize( hCPE->hStereoDft, old_inp_16k[0] + L_INP_MEM, 0, input_Fs, internal_Fs, 0 ); + } + + /* DFT Stereo: iDFT of residual signal at 8kHz sampling rate */ + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) + { + mvr2r( sts[1]->old_inp_12k8, old_inp_12k8[1], L_INP_MEM ); + stereo_dft_enc_synthesize( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM, 1, input_Fs, 8000, 0 ); + + /* update old input signal buffer */ + mvr2r( old_inp_12k8[1] + L_FRAME8k, sts[1]->old_inp_12k8, L_INP_MEM ); + } + + /* no iDFT at input sampling rate for Side channel -> reset the buffer */ + set_zero( sts[1]->input, input_frame ); + } + +#ifdef DEBUG_MODE_INFO + dbgwrite( sts[0]->input - NS2SA( sts[0]->input_Fs, ACELP_LOOK_NS ), 4, input_frame, 1, "res/input_DMX" ); + dbgwrite( sts[1]->input - NS2SA( sts[1]->input_Fs, ACELP_LOOK_NS ), 4, input_frame, 1, "res/input_DMX.ch2" ); + dbgwrite( &hCPE->element_mode, 2, 1, input_frame, "res/element_mode" ); +#endif + + /*----------------------------------------------------------------* + * Front Pre-processing + *----------------------------------------------------------------*/ + + for ( n = 0; n < n_CoreChannels; n++ ) + { + error = pre_proc_front_ivas( NULL, hCPE, hCPE->element_brate, nb_bits_metadata, input_frame, n, old_inp_12k8[n], old_inp_16k[n], &Etot[n], &ener[n], &relE[n], A[n], Aw[n], epsP[n], lsp_new[n], lsp_mid[n], + &vad_hover_flag[n], &attack_flag[n], realBuffer[n], imagBuffer[n], old_wsp[n], pitch_fr[n], voicing_fr[n], &loc_harm[n], &cor_map_sum[n], &vad_flag_dtx[n], enerBuffer[n], + fft_buff[n], A[0], lsp_new[0], currFlatness[n], tdm_ratio_idx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, band_energies_LR, 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, 0, 0 ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + } + + /* sanity check -> DTX not supported for more than one SCEs/CPEs */ + if ( st_ivas->nSCE + st_ivas->nCPE > 1 ) + { + if ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) + { + sts[0]->core_brate = -1; + } + } + + /*----------------------------------------------------------------* + * Stereo DTX updates + *----------------------------------------------------------------*/ + + if ( ivas_format == MASA_FORMAT && nb_bits_metadata > 0 && hCPE->hCoreCoder[0]->Opt_DTX_ON ) + { + if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) + { + reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata, st_ivas->sba_mode, hCPE->element_mode ); + } + } + + /* MDCT stereo DTX: active/inactive frame decision; compute FD CNG coherence */ + if ( hCPE->element_mode == IVAS_CPE_MDCT && hEncoderConfig->Opt_DTX_ON ) + { + stereoFdCngCoherence( sts, hCPE->last_element_mode, fft_buff ); + + /* Reset metadata */ + if ( sts[0]->cng_dirac_flag || ( ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) ) + { + reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata, st_ivas->sba_mode, hCPE->element_mode ); + } + } + + /*----------------------------------------------------------------* + * Core codec configuration + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->hMCT == NULL ) + { + /* set coded BW for MDCT stereo */ + set_bw_stereo( hCPE ); + + /* reconfiguration of MDCT stereo */ + if ( sts[0]->bwidth != sts[0]->last_bwidth || ( ( hCPE->last_element_brate != hCPE->element_brate || hCPE->last_element_mode != hCPE->element_mode ) && sts[0]->bwidth != sts[0]->max_bwidth ) ) + { + initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, sts[0]->bwidth, 0, NULL, 0 ); + + if ( hCPE->element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) + { + if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + } + + /* set ACELP@12k8 / ACELP@16k flag for flexible ACELP core */ + for ( n = 0; n < n_CoreChannels; n++ ) + { + if ( ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) && hCPE->element_mode == IVAS_CPE_DFT ) + { + sts[n]->flag_ACELP16k = set_ACELP_flag( hCPE->element_mode, hCPE->element_brate, sts[n]->core_brate, n, sts[0]->tdm_LRTD_flag, sts[n]->bwidth, sts[n]->cng_type ); + } + else + { + sts[n]->flag_ACELP16k = set_ACELP_flag( hCPE->element_mode, hCPE->element_brate, sts[n]->total_brate, n, sts[0]->tdm_LRTD_flag, sts[n]->bwidth, sts[n]->cng_type ); + } + } + + /* configure TD stereo encoder */ + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + tdm_ol_pitch_comparison( hCPE, pitch_fr, voicing_fr ); + + tdm_configure_enc( hCPE, tdm_SM_or_LRTD_Pri, tdm_ratio_idx, tdm_ratio_idx_SM, attack_flag[0], nb_bits_metadata ); + + if ( hEncoderConfig->Opt_DTX_ON ) + { + stereo_cng_upd_counters( hCPE->hStereoCng, hCPE->element_mode, -1, NULL, sts[0]->hTdCngEnc->burst_ho_cnt ); + } + } + + /* modify the coder_type depending on the total_brate per channel */ + for ( n = 0; n < n_CoreChannels; n++ ) + { + if ( ( hCPE->element_mode != IVAS_CPE_DFT && hCPE->element_mode != IVAS_CPE_TD ) || n == 0 ) /* modify coder_type of primary channel */ + { + /* limit coder_type depending on the bitrate */ + coder_type_modif( sts[n], relE[n] ); + } + } + + /*----------------------------------------------------------------* + * Write IVAS format signalling in SID frames + *----------------------------------------------------------------*/ + + if ( sts[0]->core_brate == SID_2k40 && ( ivas_format != SBA_FORMAT || st_ivas->sba_mode != SBA_MODE_SPAR ) ) + { + ivas_write_format_sid( ivas_format, hCPE->element_mode, sts[0]->hBstr ); + } + + /*----------------------------------------------------------------* + * DFT Stereo residual coding + * DFT Stereo parameters writing into the bitstream + *----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( hEncoderConfig->Opt_DTX_ON ) + { + if ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) + { + /* Reconfigure DFT Stereo for inactive frames */ + if ( sts[0]->core_brate == SID_2k40 ) + { + stereo_dft_config( hCPE->hStereoDft->hConfig, IVAS_SID_4k4, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + else + { + stereo_dft_config( hCPE->hStereoDft->hConfig, FRAME_NO_DATA, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); + } + + stereo_dft_cng_side_gain( hCPE->hStereoDft, hCPE->hStereoCng, sts[0]->core_brate, sts[0]->last_core_brate, sts[0]->bwidth ); + + stereo_dft_enc_update( hCPE->hStereoDft, min( SWB, sts[0]->max_bwidth ) +#ifdef DEBUG_MODE_DFT + , + 0 +#endif + ); + } + else + { + stereo_cng_upd_counters( hCPE->hStereoCng, hCPE->element_mode, hCPE->hStereoDft->nbands, hCPE->hStereoDft->sidSideGain, sts[0]->hTdCngEnc->burst_ho_cnt ); + } + } + + /* Write stereo bitstream */ + if ( ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && sts[0]->core_brate != SID_2k40 && sts[0]->core_brate != FRAME_NO_DATA ) + { + nb_bits = 0; /* Only mono downmix is transmitted in this case */ + } + else if ( ivas_format == MASA_FORMAT && ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) ) + { + nb_bits = hCPE->hMetaData->nb_bits_tot; + } + else + { + stereo_dft_enc_write_BS( hCPE, &nb_bits ); + } + + if ( !( ivas_format == MASA_FORMAT && ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) ) ) + { + /* Residual coding in MDCT domain */ + stereo_dft_enc_res( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM - STEREO_DFT_OVL_8k, hCPE->hMetaData, &nb_bits, (int16_t) ( ( hCPE->element_brate ) / FRAMES_PER_SEC - 0.8f * sts[0]->bits_frame_nominal - ( ( ivas_format == MASA_FORMAT ) ? nb_bits_metadata : 0 ) ) ); + } + + if ( sts[0]->core_brate == FRAME_NO_DATA || sts[0]->core_brate == SID_2k40 ) + { + assert( ( nb_bits <= ( ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS ) ) && "Stereo DFT CNG: bit budget is violated" ); + } + else + { + assert( ( ( hCPE->element_brate / FRAMES_PER_SEC - nb_bits ) >= ( 0.8f * sts[0]->bits_frame_nominal ) ) && "Stereo DFT: bit budget is violated" ); + + /* Flexible total bitrate in M channel */ + sts[0]->total_brate = hCPE->element_brate - ( nb_bits * FRAMES_PER_SEC ); + } + + /* subtract metadata bitbudget */ + sts[0]->total_brate -= ( nb_bits_metadata * FRAMES_PER_SEC ); + } + + /*----------------------------------------------------------------* + * Core Encoder + *----------------------------------------------------------------*/ + + if ( ( error = ivas_core_enc( NULL, hCPE, st_ivas->hMCT, n_CoreChannels, old_inp_12k8, old_inp_16k, Etot, ener, A, Aw, epsP, lsp_new, lsp_mid, vad_hover_flag, attack_flag, realBuffer, imagBuffer, old_wsp, loc_harm, cor_map_sum, vad_flag_dtx, enerBuffer, fft_buff, tdm_SM_or_LRTD_Pri, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*----------------------------------------------------------------* + * Common updates + *----------------------------------------------------------------*/ + + hCPE->last_element_brate = hCPE->element_brate; + hCPE->last_element_mode = hCPE->element_mode; + + if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->hStereoMdct != NULL && hCPE->hStereoMdct->hItd != NULL ) + { + /* update input samples buffer */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mvr2r( orig_input[n], sts[n]->old_input_signal, input_frame ); + } + } + else if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + mvr2r( sts[0]->input, sts[0]->old_input_signal, input_frame ); + } + else if ( st_ivas->hMCT == NULL ) /* note: in MCT, input buffers are updated later in ivas_mct_enc() */ + { + /* update input samples buffer */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mvr2r( sts[n]->input, sts[n]->old_input_signal, input_frame ); + } + } + + if ( hCPE->hFrontVad[0] != NULL ) + { + hCPE->hFrontVad[0]->ini_frame++; + hCPE->hFrontVad[0]->ini_frame = min( hCPE->hFrontVad[0]->ini_frame, MAX_FRAME_COUNTER ); + } + +#ifdef DEBUG_MODE_INFO + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + n = (int16_t) hCPE->hStereoDft->hItd->itd[1]; + dbgwrite( &n, 2, 1, input_frame, "res/itd" ); + n = 0; + dbgwrite( &n, 2, 1, input_frame, "res/TCA_idx_refChan" ); + dbgwrite( &n, 2, 1, input_frame, "res/TCA_idx_NCShift" ); + dbgwrite( &n, 2, 1, input_frame, "res/TCA_idx_ica_gD" ); + n = -1; + dbgwrite( &n, 2, 1, input_frame, "res/tdm_ratio_idx.enc" ); + } + else if ( hCPE->element_mode == IVAS_CPE_TD ) + { + dbgwrite( &hCPE->hStereoTCA->refChanIndx, 2, 1, input_frame, "res/TCA_idx_refChan" ); + n = hCPE->hStereoTCA->refChanIndx == 0 ? hCPE->hStereoTCA->indx_ica_NCShift : -hCPE->hStereoTCA->indx_ica_NCShift; + dbgwrite( &n, 2, 1, input_frame, "res/TCA_idx_NCShift" ); + dbgwrite( &hCPE->hStereoTCA->indx_ica_gD, 2, 1, input_frame, "res/TCA_idx_ica_gD" ); + + n = hCPE->hStereoTCA->corrLagStats[2]; + dbgwrite( &n, 2, 1, input_frame, "res/itd" ); + + dbgwrite( &tdm_ratio_idx, 2, 1, input_frame, "res/tdm_ratio_idx.enc" ); + } + else if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + n = -2; + dbgwrite( &n, 2, 1, input_frame, "res/tdm_ratio_idx.enc" ); + } + + { + float tmpF = ivas_total_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "element_brate", 0, cpe_id, ENC ) ); + } +#endif + + wmops_sub_end(); + return error; +} + + +/*------------------------------------------------------------------------- + * create_cpe_enc() + * + * Create, allocate and initialize IVAS encoder CPE handle + *-------------------------------------------------------------------------*/ + +ivas_error create_cpe_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t cpe_id, /* i : CPE # identifier */ + const int32_t element_brate /* i : element bitrate */ +) +{ + int16_t n; + int16_t ivas_format, element_mode_init, max_bwidth; + int32_t input_Fs; + CPE_ENC_HANDLE hCPE; + Encoder_State *st; + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + error = IVAS_ERR_OK; + + hEncoderConfig = st_ivas->hEncoderConfig; + + ivas_format = hEncoderConfig->ivas_format; + element_mode_init = hEncoderConfig->element_mode_init; + input_Fs = hEncoderConfig->input_Fs; + max_bwidth = hEncoderConfig->max_bwidth; + + /*-----------------------------------------------------------------* + * Allocate CPE handle + *-----------------------------------------------------------------*/ + + if ( ( hCPE = (CPE_ENC_HANDLE) count_malloc( sizeof( CPE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); + } + + /*-----------------------------------------------------------------* + * Initialization - general parameters + *-----------------------------------------------------------------*/ + + hCPE->cpe_id = cpe_id; + hCPE->element_brate = element_brate; + hCPE->last_element_brate = hCPE->element_brate; + hCPE->element_mode = element_mode_init; + hCPE->last_element_mode = element_mode_init; + + hCPE->hStereoDft = NULL; + hCPE->hStereoTD = NULL; + hCPE->hStereoMdct = NULL; + hCPE->hStereoTCA = NULL; + hCPE->hStereoICBWE = NULL; + hCPE->hMetaData = NULL; + + hCPE->hStereoCng = NULL; + hCPE->hFrontVad[0] = NULL; + hCPE->hFrontVad[1] = NULL; + + /*-----------------------------------------------------------------* + * Input memory buffer: allocate and initialize + *-----------------------------------------------------------------*/ + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( ivas_format == STEREO_FORMAT || ivas_format == MASA_FORMAT || ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + { + if ( ( hCPE->input_mem[n] = (float *) count_malloc( sizeof( float ) * NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } + + set_zero( hCPE->input_mem[n], NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ); + } + else + { + hCPE->input_mem[n] = NULL; + } + } + + /*-----------------------------------------------------------------* + * stereo classifier: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( ( hCPE->hStereoClassif = (STEREO_CLASSIF_HANDLE) count_malloc( sizeof( STEREO_CLASSIF_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo classifier structure\n" ) ); + } + + stereo_classifier_init( hCPE->hStereoClassif ); + + /*-----------------------------------------------------------------* + * Metadata: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) && ( cpe_id == ( st_ivas->nCPE - 1 ) ) ) + { + if ( ( hCPE->hMetaData = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MetaData structure\n" ) ); + } + } + + /*-----------------------------------------------------------------* + * CoreCoder, 2 instances: allocate and initialize + *-----------------------------------------------------------------*/ + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( ( st = (ENC_CORE_HANDLE) count_malloc( sizeof( Encoder_State ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); + } + + copy_encoder_config( st_ivas, st, 1 ); + st->total_brate = hCPE->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT && ( n + cpe_id * CPE_CHANNELS ) == LFE_CHANNEL ) + { + st->mct_chan_mode = MCT_CHAN_MODE_LFE; + } + + if ( ( error = init_encoder( st, n, hEncoderConfig->var_SID_rate_flag, hEncoderConfig->interval_SID, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( st->hFdCngEnc != NULL ) + { + st->hFdCngEnc->hFdCngCom->CngBitrate = hCPE->element_brate - 1; + } + + hCPE->hCoreCoder[n] = st; + } + + /*-----------------------------------------------------------------* + * LR VAD initialization + *-----------------------------------------------------------------*/ + + if ( hEncoderConfig->Opt_DTX_ON ) + { + if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) count_malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo Cng for Unified/TD \n" ) ); + } + + stereo_enc_cng_init( hCPE->hStereoCng ); + } + } + else + { + hCPE->hStereoCng = NULL; + } + +#ifdef DEBUGGING + if ( hEncoderConfig->Opt_DTX_ON && ( hCPE->element_mode == IVAS_CPE_TD || hEncoderConfig->stereo_mode_cmdl == 1 ) && !( ivas_format == MASA_FORMAT && element_mode_init == IVAS_CPE_MDCT ) ) +#else + if ( hEncoderConfig->Opt_DTX_ON && element_mode_init != IVAS_CPE_MDCT ) +#endif + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( ( error = front_vad_create( &( hCPE->hFrontVad[n] ), hEncoderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + hCPE->hFrontVad[n] = NULL; + } + } + + /*-----------------------------------------------------------------* + * DFT stereo initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( ( error = stereo_dft_enc_create( &( hCPE->hStereoDft ), input_Fs, max_bwidth ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*-----------------------------------------------------------------* + * Temporal inter-channel alignment initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode != IVAS_CPE_MDCT ) + { + if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) count_malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); + } + + stereo_tca_init_enc( hCPE->hStereoTCA, input_Fs ); + } + + /*-----------------------------------------------------------------* + * Stereo IC BWE initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode != IVAS_CPE_MDCT ) + { + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); + } + + stereo_icBWE_init_enc( hCPE->hStereoICBWE ); + } + + /*-----------------------------------------------------------------* + * TD stereo initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); + } + + stereo_td_init_enc( hCPE->hStereoTD, hCPE->last_element_mode ); + } + + /*-----------------------------------------------------------------* + * MDCT stereo initialization + *-----------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->nCPE == 1 ) + { + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + +#ifdef DEBUGGING + hCPE->hStereoMdct->mdct_stereo_mode_cmdl = st_ivas->hEncoderConfig->mdct_stereo_mode_cmdl; +#endif + initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, max_bwidth, 0, NULL, 1 ); + + if ( hCPE->element_mode == IVAS_CPE_MDCT && element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) + { + if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + st_ivas->hCPE[cpe_id] = hCPE; + + return error; +} + + +/*------------------------------------------------------------------------- + * destroy_cpe_enc() + * + * Destroy and deallocate IVAS encoder CPE handle + *-------------------------------------------------------------------------*/ + +void destroy_cpe_enc( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +) +{ + int16_t n; + Encoder_State *st; + + if ( hCPE->hStereoClassif != NULL ) + { + count_free( hCPE->hStereoClassif ); + hCPE->hStereoClassif = NULL; + } + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( hCPE->input_mem[n] != NULL ) + { + count_free( hCPE->input_mem[n] ); + hCPE->input_mem[n] = NULL; + } + } + + if ( hCPE->hMetaData != NULL ) + { + count_free( hCPE->hMetaData ); + hCPE->hMetaData = NULL; + } + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st = hCPE->hCoreCoder[n]; + + if ( st != NULL ) + { + destroy_core_enc( st ); + st = NULL; + } + } + + if ( hCPE->hStereoDft != NULL ) + { + stereo_dft_enc_destroy( &hCPE->hStereoDft ); + hCPE->hStereoDft = NULL; + } + + if ( hCPE->hStereoTD != NULL ) + { + count_free( hCPE->hStereoTD ); + hCPE->hStereoTD = NULL; + } + + if ( hCPE->hStereoMdct != NULL ) + { + stereo_mdct_enc_destroy( &hCPE->hStereoMdct ); + hCPE->hStereoMdct = NULL; + } + + if ( hCPE->hStereoTCA != NULL ) + { + count_free( hCPE->hStereoTCA ); + hCPE->hStereoTCA = NULL; + } + + if ( hCPE->hStereoICBWE != NULL ) + { + count_free( hCPE->hStereoICBWE ); + hCPE->hStereoICBWE = NULL; + } + + if ( hCPE->hStereoCng != NULL ) + { + count_free( hCPE->hStereoCng ); + hCPE->hStereoCng = NULL; + } + + if ( hCPE->hFrontVad[0] != NULL ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + front_vad_destroy( &hCPE->hFrontVad[n] ); + hCPE->hFrontVad[n] = NULL; + } + } + + count_free( hCPE ); + + return; +} diff --git a/lib_enc/ivas_decision_matrix_enc.c b/lib_enc/ivas_decision_matrix_enc.c new file mode 100644 index 0000000000..7b9dccaec9 --- /dev/null +++ b/lib_enc/ivas_decision_matrix_enc.c @@ -0,0 +1,514 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------* + * ivas_decision_matrix_enc() + * + * Core technology selection in the IVAS codec + * + * CPE + * bitrate 13.2 16.4 24.4 32 48 >48(*) + * ---------------------------------------------------------------------------------------- + * WB + * speech ACELP ACELP ACELP ACELP ACELP TCX + * music GSC/TCX GSC/TCX TCX/HQ TCX/HQ TCX/HQ TCX + * inactive ACELP-I/TCX ACELP-I/TCX ACELP-I/TCX ACELP-I/TCX ACELP-I/TCX TCX + * + * SWB + * speech ACELP ACELP ACELP ACELP ACELP TCX + * music GSC/TCX GSD/TCX TCX/HQ TCX/HQ TCX/HQ TCX + * inactive ACELP-I/TCX ACELP-I/TCX ACELP-I/TCX ACELP-I/TCX ACELP-I/TCX TCX + * + * FB + * speech ACELP ACELP TCX + * music TCX/HQ TCX/HQ TCX + * inactive ACELP-I/TCX ACELP-I/TCX TCX + * + * ACELP-I: GSC Inactive mode used for total_brate <= 28 kbps (total_brate), AVQ Inactive mode used otherwise + * (*): TCX core is selected when total_brate > 48kbps, not CPE bitrate + * Note: in MDCT stereo mode, TCX core is selected for all content + * -------------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +void ivas_decision_matrix_enc( + Encoder_State *st, /* i : encoder state structure */ + const int32_t element_brate, /* i : element bitrate */ + const float fft_buff[], /* i : FFT buffer */ + const float enerBuffer[], /* i : energy buffer */ + const int16_t last_element_mode /* i : last element mode */ +) +{ + int32_t icbwe_brate; + /* init */ + icbwe_brate = 0; + + /* initialization */ + st->core = -1; + st->extl = -1; + st->extl_brate = 0; + if ( st->element_mode != IVAS_CPE_MDCT ) + { + st->igf = 0; + } + + /* SID and FRAME_NO_DATA frames */ + if ( st->Opt_DTX_ON && ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) + { + st->core = ACELP_CORE; + + if ( st->input_Fs >= 32000 && st->bwidth >= SWB ) + { + st->extl = SWB_CNG; + } + + st->rf_mode = 0; + + return; + } + + /*---------------------------------------------------------------------* + * Select the core + *---------------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) + { + /* ISm low-rate mode */ + st->core = ACELP_CORE; + st->coder_type = INACTIVE; + } + else if ( st->total_brate > MAX_ACELP_BRATE ) + { + /* highest bitrates */ + st->core = TCX_20_CORE; + } + else if ( st->element_mode == IVAS_CPE_MDCT ) + { + /* in MDCT stereo set TCX core */ + st->core = TCX_20_CORE; + } + else if ( st->coder_type == INACTIVE ) + { + /* inactive frames */ + if ( st->cng_type == FD_CNG && st->total_brate >= STEREO_TCX_MIN_RATE ) + { + st->core = TCX_20_CORE; + } + else + { + st->core = ACELP_CORE; + } + } + else if ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 0 ) + { + /* speech */ + st->core = ACELP_CORE; + } + else if ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) + { + /* music w. GSC core */ + st->core = ACELP_CORE; + } + else /* sp_aud_decision1 == 1 && *sp_aud_decision2 == 1 */ + { + /* music w. TCX or HQ core */ + st->core = TCX_20_CORE; + + if ( st->element_mode == IVAS_CPE_TD || st->sp_aud_decision0 == 0 ) + { + st->core = TCX_20_CORE; + } + else + { + /* select TCX core or HQ core using bits_frame_nominal to match the TCX configuration bitrate */ + st->core = mdct_classifier( st, fft_buff, enerBuffer, st->bits_frame_nominal * FRAMES_PER_SEC ); + } + /* Warning: TCX not available at low bitrates -> replace it by GSC */ + if ( st->core == TCX_20_CORE && st->total_brate < STEREO_TCX_MIN_RATE ) + { + st->core = ACELP_CORE; + st->coder_type = AUDIO; + st->sp_aud_decision2 = 0; + } + } + + /* do not allow TD stereo ACELP core -> DFT stereo TCX core switching as it is on the WC complexity path */ + if ( ( ( st->last_core == ACELP_CORE && last_element_mode == IVAS_CPE_TD && st->element_mode == IVAS_CPE_DFT ) || ( st->tdm_LRTD_flag == 1 && st->total_brate <= IVAS_16k4 ) ) && st->core == TCX_20_CORE && st->total_brate <= MAX_ACELP_BRATE ) /* Override TCX in case of LRTD && primary channel has low bitrate*/ + { + st->core = ACELP_CORE; + } + +#ifdef DEBUGGING + if ( st->idchan == 0 ) + { + if ( st->force == FORCE_SPEECH && st->element_mode != IVAS_CPE_MDCT && st->total_brate <= MAX_ACELP_BRATE ) + { + st->core = ACELP_CORE; + } + else if ( st->force == FORCE_MUSIC && st->core == ACELP_CORE ) + { + st->core = TCX_20_CORE; + } + else if ( st->force == FORCE_ACELP && st->element_mode != IVAS_CPE_MDCT && st->total_brate <= MAX_ACELP_BRATE ) + { + st->core = ACELP_CORE; + if ( st->coder_type == AUDIO ) + { + st->coder_type = GENERIC; + } + } + else if ( st->force == FORCE_GSC && element_brate < IVAS_24k4 ) + { + st->core = ACELP_CORE; + } + else if ( st->force == FORCE_TCX ) + { + st->core = TCX_20_CORE; + } + else if ( st->force == FORCE_HQ && st->element_mode != IVAS_CPE_MDCT && element_brate >= IVAS_24k4 ) + { + st->core = HQ_CORE; + } + + /* TCX not available at low bitrates -> replace it by GSC */ + if ( st->core == TCX_20_CORE && st->total_brate < STEREO_TCX_MIN_RATE ) + { + st->core = ACELP_CORE; + st->coder_type = AUDIO; + st->sp_aud_decision2 = 0; + } + } +#endif + + /*---------------------------------------------------------------------* + * Select ACELP and GSC extension layer + *---------------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + /* WB */ + if ( st->bwidth == WB ) + { + if ( st->total_brate < MIN_BRATE_WB_BWE || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) ) + { + st->extl = WB_BWE; + } + else if ( st->total_brate >= MIN_BRATE_WB_BWE && !st->flag_ACELP16k ) + { + if ( ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) || st->coder_type == INACTIVE ) + { + st->extl = WB_BWE; + st->extl_brate = WB_BWE_0k35; + } + else + { + st->extl = WB_TBE; + + if ( st->total_brate < MIN_BRATE_WB_TBE_1k05 || ( st->element_mode == IVAS_CPE_TD && st->total_brate < MIN_TDM_BRATE_WB_TBE_1k05 ) ) + { + st->extl_brate = WB_TBE_0k35; + } + else + { + st->extl_brate = WB_TBE_1k05; + } + } + } + } + + /* SWB and FB */ + else if ( st->bwidth == SWB || st->bwidth == FB ) + { + if ( st->total_brate >= MIN_BRATE_SWB_BWE /*&& (*coder_type != AUDIO || st->total_brate >= (MIN_BWE_PRI_BRATE+600))*/ + || ( st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB && st->tdm_LRTD_flag ) || ( element_brate < IVAS_16k4 && st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB ) ) + { + if ( ( ( ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) || st->coder_type == INACTIVE ) && !st->GSC_noisy_speech ) /* Note: SWB BWE is not used for GSC noisy speech */ + ) + { + st->extl = SWB_BWE; + st->extl_brate = SWB_BWE_1k6; + + if ( st->bwidth == FB ) + { + st->extl = FB_BWE; + st->extl_brate = FB_BWE_1k8; + } + } + else + { + st->extl = SWB_TBE; + st->extl_brate = SWB_TBE_1k6; + +#ifdef DBG_STEREO_ICBWE2_TBE2K8 + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k ) +#else + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) +#endif + { + st->extl_brate = SWB_TBE_2k8; + } + else if ( st->tdm_LRTD_flag == 1 && st->element_mode == IVAS_CPE_TD ) + { + if ( st->element_brate < IVAS_24k4 ) + { + st->extl_brate = SWB_TBE_1k10; + } + else + { + st->extl_brate = SWB_TBE_1k75; + } + } + else if ( st->total_brate < MIN_BRATE_SWB_TBE_1k60 ) + { + st->extl_brate = SWB_TBE_0k95; + } + + if ( st->bwidth == FB ) + { + st->extl = FB_TBE; + st->extl_brate = FB_TBE_1k8; + +#ifdef DBG_STEREO_ICBWE2_TBE2K8 + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k ) +#else + if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) +#endif + { + st->extl_brate = FB_TBE_3k0; + } + } + } + } + else + { + st->extl = WB_BWE; + st->extl_brate = 0; + } + + /* set IC-BWE bitrate */ + if ( st->element_mode == IVAS_CPE_TD && ( st->idchan == 0 ) && !st->tdm_LRTD_flag ) + { + icbwe_brate = STEREO_BITS_ICBWE * FRAMES_PER_SEC; + if ( st->flag_ACELP16k == 0 ) + { + icbwe_brate = ( STEREO_BITS_ICBWE - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; + } + } + else if ( st->element_mode == IVAS_CPE_DFT ) + { + icbwe_brate = STEREO_BITS_ICBWE_DFT * FRAMES_PER_SEC; + if ( st->flag_ACELP16k == 0 ) + { + icbwe_brate = ( STEREO_BITS_ICBWE_DFT - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; + } + } + + if ( st->element_mode >= IVAS_CPE_DFT && st->core == ACELP_CORE && ( st->extl == SWB_TBE || st->extl == FB_TBE ) && + !( st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) + { + icbwe_brate += STEREO_ICBWE_MSFLAG_BITS * FRAMES_PER_SEC; + } + } + } + + /* set core bitrate */ + st->core_brate = st->total_brate - st->extl_brate - icbwe_brate; + + if ( st->ini_frame == 0 ) + { + /* avoid core switching in the very first frame */ + st->last_core = st->core; + st->last_core_brate = st->core_brate; + st->last_extl = st->extl; + } + + return; +} + + +/*---------------------------------------------------------------------* + * ivas_signalling_enc() + * + * write signalling information of SCE/CPE mode into the bitstream + *---------------------------------------------------------------------*/ + +void ivas_signalling_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t is_MCT, /* i : MCT enabled */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag in TD stereo OR LRTD primary channel */ + const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag in TD stereo */ +) +{ + int16_t ind; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) + { + /* minimal signalling for the secondary channel, most of the parameters are deduced from the primary channel */ + signalling_enc_secondary( st, tdm_SM_or_LRTD_Pri, tdm_Pitch_reuse_flag ); + } + else if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) + { + /* ISm Low-rate mode -> do nothing -> always WB, ACELP core, IC coder_type */ + } + else if ( ( st->element_mode == IVAS_CPE_MDCT && st->idchan == 1 ) || st->core_brate <= SID_2k40 ) + { + /* do nothing */ + } + else + { + if ( st->idchan == 0 ) + { + /*-------------------------------------------------------------------------- + * Write element mode info + *--------------------------------------------------------------------------*/ + + if ( st->element_mode >= IVAS_CPE_DFT && element_brate < MIN_BRATE_MDCT_STEREO && !is_MCT ) /* note: in MCT, the MDCT stereo is used exclusively */ + { + ind = st->element_mode - IVAS_CPE_DFT; + push_indice( hBstr, IND_SMODE, ind, NBITS_ELEMENT_MODE ); + } + + + /*-------------------------------------------------------------------------- + * Write band-width info + *--------------------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_SCE && element_brate < MIN_BRATE_SWB_SCE ) + { + /* only WB is supported */ + } + else if ( element_brate < MIN_BRATE_FB_STEREO ) + { + /* WB and SWB are supported */ + ind = st->bwidth - WB; + push_indice( hBstr, IND_BWIDTH, ind, 1 ); + } + else + { + /* WB, SWB and FB are supported */ + push_indice( hBstr, IND_BWIDTH, st->bwidth, NBITS_BWIDTH ); + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + /*-------------------------------------------------------------------------- + * Write ACELP/MDCT core selection bit + *--------------------------------------------------------------------------*/ + + if ( st->element_mode == IVAS_CPE_TD || st->total_brate >= STEREO_TCX_MIN_RATE ) + { + if ( st->core == ACELP_CORE ) + { + push_indice( hBstr, IND_CORE, 0, 1 ); + } + else + { + push_indice( hBstr, IND_CORE, 1, 1 ); + } + } + + /*-------------------------------------------------------------------------- + * Write core dependent signalling + *--------------------------------------------------------------------------*/ + + if ( st->core == ACELP_CORE ) + { + if ( element_brate < FRMT_SHP_MIN_BRATE_IVAS ) + { + push_indice( hBstr, IND_ACELP_SIGNALLING, st->coder_type, 3 ); + } + else + { + /* write coder type */ + push_indice( hBstr, IND_ACELP_SIGNALLING, st->coder_type, 3 ); + + /* write sharpening flag */ + push_indice( hBstr, IND_SHARP_FLAG, st->sharpFlag, 1 ); + } + + /* write extension layer flag to distinguish between TBE (0) and BWE (1) */ + if ( st->extl_brate > 0 ) + { + if ( st->extl == WB_TBE || st->extl == SWB_TBE || st->extl == FB_TBE ) + { + push_indice( hBstr, IND_BWE_FLAG, 0, 1 ); + } + else if ( st->extl == WB_BWE || st->extl == SWB_BWE || st->extl == FB_BWE ) + { + push_indice( hBstr, IND_BWE_FLAG, 1, 1 ); + } + } + } + else /* MDCT core */ + { + /* write TCX/HQ selection flag */ + if ( st->core == HQ_CORE ) + { + push_indice( hBstr, IND_MDCT_CORE, 0, 1 ); + } + else /* TCX20/TCX10 core */ + { + push_indice( hBstr, IND_MDCT_CORE, 1, 1 ); + } + + if ( st->core == HQ_CORE ) + { + if ( st->last_core == ACELP_CORE ) + { + push_indice( hBstr, IND_HQ_SWITCHING_FLG, 1, 1 ); + } + else + { + push_indice( hBstr, IND_HQ_SWITCHING_FLG, 0, 1 ); + } + } + } + } /* element_mode != IVAS_CPE_MDCT */ + } + } + + return; +} diff --git a/lib_enc/ivas_dirac_enc.c b/lib_enc/ivas_dirac_enc.c new file mode 100644 index 0000000000..207a745627 --- /dev/null +++ b/lib_enc/ivas_dirac_enc.c @@ -0,0 +1,877 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void computeIntensityVector_enc( DIRAC_ENC_HANDLE hDirAC, float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], const int16_t enc_param_start_band, const int16_t num_frequency_bands, float intensity_real[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS] ); + + +/*------------------------------------------------------------------------- + * ivas_dirac_enc_open() + * + * Initialize DirAC handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +) +{ + int16_t i, j; + int32_t input_Fs; + DIRAC_ENC_HANDLE hDirAC; + IVAS_FB_CFG *fb_cfg; + int32_t dirac_slot_ns; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( hDirAC = (DIRAC_ENC_HANDLE) count_malloc( sizeof( DIRAC_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); + } + + if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) count_malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC Config\n" ) ); + } + + /*-----------------------------------------------------------------* + * DirAC main configuration + *-----------------------------------------------------------------*/ + + st_ivas->hDirAC = hDirAC; + input_Fs = st_ivas->hEncoderConfig->input_Fs; + + if ( ( error = ivas_dirac_config( (void *) st_ivas, ENC ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* set FB config. */ + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + hDirAC->hFbMixer = NULL; + } + else + { + if ( ( error = ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, SBA_MODE_DIRAC, DIRAC_MAX_ANA_CHANS, 0, 0, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + /* Allocate and initialize FB mixer handle */ + if ( ( error = ivas_FB_mixer_open( &( hDirAC->hFbMixer ), input_Fs, fb_cfg ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + + for ( i = 0; i < DIRAC_MAX_NBANDS + 1; i++ ) + { + /* adapt band grouping to from CLDFB to MDFT bands */ + hDirAC->band_grouping[i] *= CLDFB_TO_MDFT_FAC; + } + dirac_slot_ns = DIRAC_SLOT_ENC_NS; + + /* initalize delay for SPAR/DirAC delay synchronization */ + if ( st_ivas->sba_mode == SBA_MODE_DIRAC ) + { + hDirAC->num_samples_synchro_delay = NS2SA( input_Fs, IVAS_FB_ENC_DELAY_NS ); + for ( i = 0; i < st_ivas->hEncoderConfig->nchan_inp; i++ ) + { + hDirAC->sba_synchro_buffer[i] = (float *) count_malloc( hDirAC->num_samples_synchro_delay * sizeof( float ) ); + set_zero( hDirAC->sba_synchro_buffer[i], hDirAC->num_samples_synchro_delay ); + } + for ( ; i < IVAS_MAX_NUM_CH; i++ ) + { + hDirAC->sba_synchro_buffer[i] = NULL; + } + } + else + { + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + hDirAC->sba_synchro_buffer[i] = NULL; + } + } + /* intensity 3-dim */ + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + hDirAC->direction_vector_m[i] = (float **) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); + + for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + hDirAC->direction_vector_m[i][j] = (float *) count_malloc( DIRAC_MAX_NBANDS * sizeof( float ) ); + set_f( hDirAC->direction_vector_m[i][j], 0.0f, DIRAC_MAX_NBANDS ); + } + } + + hDirAC->no_col_avg_diff = (int16_t) ( DIRAC_NO_COL_AVG_DIFF_NS / dirac_slot_ns ); + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + hDirAC->buffer_intensity_real[i] = (float **) count_malloc( hDirAC->no_col_avg_diff * sizeof( float * ) ); + for ( j = 0; j < hDirAC->no_col_avg_diff; j++ ) + { + hDirAC->buffer_intensity_real[i][j] = (float *) count_malloc( DIRAC_MAX_NBANDS * sizeof( float ) ); + set_f( hDirAC->buffer_intensity_real[i][j], 0.0f, DIRAC_MAX_NBANDS ); + } + } + hDirAC->buffer_energy = (float *) count_malloc( DIRAC_MAX_NBANDS * hDirAC->no_col_avg_diff * sizeof( float ) ); + set_f( hDirAC->buffer_energy, 0.0f, DIRAC_MAX_NBANDS * hDirAC->no_col_avg_diff ); + + if ( st_ivas->hQMetaData->useLowerRes ) + { + hDirAC->block_grouping[0] = 0; + hDirAC->block_grouping[1] = MAX_PARAM_SPATIAL_SUBFRAMES; + } + else + { + mvs2s( DirAC_block_grouping_5ms_MDFT, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); + } + + hDirAC->index_buffer_intensity = 0; + + st_ivas->hDirAC = hDirAC; + + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + mvs2s( st_ivas->hDirAC->dirac_to_spar_md_bands, st_ivas->hSpar->hSparFoa->dirac_to_spar_md_bands, DIRAC_MAX_NBANDS ); + st_ivas->hSpar->hSparFoa->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; + } + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_enc_reconfigure() + * + * Reconfigure DirAC handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_dirac_enc_reconfigure( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +) +{ + DIRAC_ENC_HANDLE hDirAC; + ivas_error error; + + error = IVAS_ERR_OK; + + hDirAC = st_ivas->hDirAC; + + /*-----------------------------------------------------------------* + * DirAC main configuration + *-----------------------------------------------------------------*/ + + if ( ( error = ivas_dirac_config( (void *) st_ivas, ENC ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* :TODO: if the number of parameter bands change, do a meaningful mapping of parameter buffers from old to new band setting */ + + mvs2s( DirAC_block_grouping, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_enc_close() + * + * Close DirAC + *------------------------------------------------------------------------*/ + +void ivas_dirac_enc_close( + DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ + const int32_t input_Fs /* i : input sampling rate */ +) +{ + int16_t i, j; + + if ( hDirAC->hFbMixer != NULL ) + { + ivas_FB_mixer_close( &hDirAC->hFbMixer, input_Fs ); + } + + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + if ( hDirAC->sba_synchro_buffer[i] != NULL ) + { + count_free( hDirAC->sba_synchro_buffer[i] ); + hDirAC->sba_synchro_buffer[i] = NULL; + } + } + + /* intensity 3-dim */ + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + count_free( hDirAC->direction_vector_m[i][j] ); + hDirAC->direction_vector_m[i][j] = NULL; + } + + for ( j = 0; j < hDirAC->no_col_avg_diff; j++ ) + { + if ( hDirAC->buffer_intensity_real[i][j] != 0 ) + { + count_free( hDirAC->buffer_intensity_real[i][j] ); + hDirAC->buffer_intensity_real[i][j] = NULL; + } + } + + count_free( hDirAC->buffer_intensity_real[i] ); + hDirAC->buffer_intensity_real[i] = NULL; + + count_free( hDirAC->direction_vector_m[i] ); + hDirAC->direction_vector_m[i] = NULL; + } + + count_free( hDirAC->buffer_energy ); + hDirAC->buffer_energy = NULL; + + if ( hDirAC->hConfig != NULL ) + { + count_free( hDirAC->hConfig ); + hDirAC->hConfig = NULL; + } + + count_free( hDirAC ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_dirac_enc() + * + * DirAC Encoder + * + * input-data in data_f[] is assumed to be in ACN ordering, i.e. + * data_f[0] --> W + * data_f[1] --> Y + * data_f[2] --> Z + * data_f[3] --> X + *------------------------------------------------------------------------*/ + +void ivas_dirac_enc( + DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + int16_t *nb_bits_metadata, /* o : number of metadata bits written */ + const int16_t Opt_DTX_ON, /* i : flag signalling DTX on */ + float data_f[][L_FRAME48k], /* i/o: input: ACN/SN3D, output: omni, stereo DMX or FOA*/ + const int16_t input_frame, /* i : input frame length */ + const int16_t sba_planar /* i : SBA planar flag */ +) +{ + int16_t i; + + wmops_sub_start( "ivas_dirac_enc" ); + + /*Check if highest band of input signal <= enc_param_start_band: could happen for WB input signal in 4TCs mode*/ + if ( hDirAC->band_grouping[hDirAC->hConfig->nbands] <= hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band] ) + { + /* Signal 4 bands (WB 4TC mode) on 1 bit */ + push_next_indice( hMetaData, 1, 1 ); + *nb_bits_metadata = hMetaData->nb_bits_tot; + } + else + { + /* WB 4TC mode bit */ + push_next_indice( hMetaData, 0, 1 ); + + /* parameter estimation */ + if ( sba_planar ) + { + /* Z is forced to zero in planar case */ + set_zero( data_f[2], input_frame ); + } + + ivas_dirac_param_est_enc( hDirAC, &( hQMetaData->q_direction[0] ), hQMetaData->useLowerRes, data_f, NULL, NULL, input_frame ); + /* encode parameters */ + if ( sba_planar || hQMetaData->useLowerRes ) + { + for ( i = hQMetaData->q_direction[0].cfg.start_band; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) + { + /* Make sure elevation is really zero */ + set_zero( hQMetaData->q_direction[0].band_data[i].elevation, hQMetaData->q_direction[0].cfg.nblocks ); + } + } + + ivas_qmetadata_enc_encode( hMetaData, hQMetaData ); + + *nb_bits_metadata = hMetaData->nb_bits_tot; + + if ( Opt_DTX_ON ) + { + /* ToDo: If DIRAC_MIN_BITRATE_4_TRANS_CHAN is reached with DTX on (possible only with bitrate switching) + metadata is not quantized since it can be deduced at the decoder from transmitted TCs. + The solution would be to switch to active-only/ignore and resume DTX operation when switching back to a supported bitrate. + */ + + if ( !( hQMetaData->no_directions == 1 && hQMetaData->numCodingBands == 5 ) ) + { + float orig_azi[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + float orig_ele[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + float orig_energy_ratio[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + + float dir[3]; + float avg_dir[3]; + + float vecLen; + float energySum; + + int16_t j; + int16_t nbands; + + for ( i = 0; i < DIRAC_MAX_NBANDS; i++ ) + { + mvr2r( &hQMetaData->q_direction[0].band_data[i].azimuth[0], orig_azi[i], MAX_PARAM_SPATIAL_SUBFRAMES ); + mvr2r( &hQMetaData->q_direction[0].band_data[i].elevation[0], orig_ele[i], MAX_PARAM_SPATIAL_SUBFRAMES ); + mvr2r( &hQMetaData->q_direction[0].band_data[i].energy_ratio[0], orig_energy_ratio[i], MAX_PARAM_SPATIAL_SUBFRAMES ); + } + + /* Force to 5 bands */ + nbands = hQMetaData->q_direction[0].cfg.nbands; + hDirAC->hConfig->nbands = 5; + hQMetaData->q_direction[0].cfg.nbands = 5; + + /* compute directions */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + set_zero( dir, 3 ); + set_zero( avg_dir, 3 ); + energySum = 0.0f; + + /* average values over last two bands into 5th band */ + for ( j = DIRAC_MAX_NBANDS - 2; j < DIRAC_MAX_NBANDS; j++ ) + { + ivas_qmetadata_azimuth_elevation_to_direction_vector( hQMetaData->q_direction[0].band_data[j].azimuth[i], hQMetaData->q_direction[0].band_data[j].elevation[i], &dir[0] ); + vecLen = hQMetaData->q_direction[0].band_data[j].energy_ratio[i] * hDirAC->buffer_energy[i * DIRAC_MAX_NBANDS + j]; + + avg_dir[0] += dir[0] * vecLen; + avg_dir[1] += dir[1] * vecLen; + avg_dir[2] += dir[2] * vecLen; + + energySum += hDirAC->buffer_energy[i * DIRAC_MAX_NBANDS + j]; + } + + ivas_qmetadata_direction_vector_to_azimuth_elevation( &avg_dir[0], &hQMetaData->q_direction[0].band_data[DIRAC_MAX_NBANDS - 2].azimuth[i], &hQMetaData->q_direction[0].band_data[DIRAC_MAX_NBANDS - 2].elevation[i] ); + + hQMetaData->q_direction[0].band_data[DIRAC_MAX_NBANDS - 2].energy_ratio[i] = sqrtf( dotp( avg_dir, avg_dir, 3 ) ) / ( energySum + EPSILON ); + } + + /* encode SID parameters */ + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, + SBA_FORMAT, + SBA_MODE_DIRAC ); + + /* restore original metadata */ + hDirAC->hConfig->nbands = nbands; + hQMetaData->q_direction[0].cfg.nbands = nbands; + + for ( i = 0; i < DIRAC_MAX_NBANDS; i++ ) + { + mvr2r( orig_azi[i], &hQMetaData->q_direction[0].band_data[i].azimuth[0], MAX_PARAM_SPATIAL_SUBFRAMES ); + mvr2r( orig_ele[i], &hQMetaData->q_direction[0].band_data[i].elevation[0], MAX_PARAM_SPATIAL_SUBFRAMES ); + mvr2r( orig_energy_ratio[i], &hQMetaData->q_direction[0].band_data[i].energy_ratio[0], MAX_PARAM_SPATIAL_SUBFRAMES ); + } + } + else + { + /* encode SID parameters */ + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, + SBA_FORMAT, + SBA_MODE_DIRAC ); + } + } + } + + wmops_sub_end(); + + return; +} + +/*------------------------------------------------------------------------- + * computeReferencePower_enc() + * + * + *-------------------------------------------------------------------------*/ + +void ivas_dirac_enc_spar_delay_synchro( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t input_frame, /* i : input frame length */ + float data_f[][L_FRAME48k] /* i/o: input: ACN/SN3D, output: omni, stereo DMX or FOA*/ +) +{ + int16_t ch_idx; + float tmp_buffer[L_FRAME48k]; + + for ( ch_idx = 0; ch_idx < st_ivas->hEncoderConfig->nchan_inp; ch_idx++ ) + { + mvr2r( data_f[ch_idx], tmp_buffer, input_frame ); + mvr2r( st_ivas->hDirAC->sba_synchro_buffer[ch_idx], data_f[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); + mvr2r( tmp_buffer, &data_f[ch_idx][st_ivas->hDirAC->num_samples_synchro_delay], input_frame - st_ivas->hDirAC->num_samples_synchro_delay ); + mvr2r( &tmp_buffer[input_frame - st_ivas->hDirAC->num_samples_synchro_delay], st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); + } + + return; +} + +/*------------------------------------------------------------------------- + * computeReferencePower_enc() + * + * + *-------------------------------------------------------------------------*/ + +void computeReferencePower_enc( + const int16_t *band_grouping, /* i : Band grouping for estimation */ + float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ + float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Imag part of input signal */ + float *reference_power, /* o : Estimated power */ + const int16_t enc_param_start_band, /* i : first band to process */ + const int16_t num_freq_bands /* i : Number of frequency bands */ +) +{ + int16_t brange[2]; + int16_t ch_idx, i, j; + + for ( i = 0; i < num_freq_bands; i++ ) + { + brange[0] = band_grouping[i + enc_param_start_band]; + brange[1] = band_grouping[i + enc_param_start_band + 1]; + reference_power[i] = 0; + + for ( ch_idx = 0; ch_idx < DIRAC_MAX_ANA_CHANS; ch_idx++ ) + { + /* abs()^2 */ + for ( j = brange[0]; j < brange[1]; j++ ) + { + reference_power[i] += ( Cldfb_RealBuffer[ch_idx][j] * Cldfb_RealBuffer[ch_idx][j] ) + ( Cldfb_ImagBuffer[ch_idx][j] * Cldfb_ImagBuffer[ch_idx][j] ); + } + } + } + + v_multc( reference_power, 0.5f, reference_power, num_freq_bands ); + + return; +} + +/*------------------------------------------------------------------------- + * ivas_dirac_param_est_enc() + * + * + *------------------------------------------------------------------------*/ +void ivas_dirac_param_est_enc( + DIRAC_ENC_HANDLE hDirAC, + IVAS_QDIRECTION *q_direction, + const uint8_t useLowerRes, + float data_f[][L_FRAME48k], + float **pp_fr_real, + float **pp_fr_imag, + const int16_t input_frame ) +{ + int16_t i, d, ts, index, l_ts, num_freq_bands; + int16_t band_m_idx, block_m_idx; + float dir_v[DIRAC_NUM_DIMS]; + float *pcm_in[DIRAC_MAX_ANA_CHANS]; + float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float *p_Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS]; + float *p_Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS]; + float intensity_real[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS]; + float direction_vector[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS]; + float diffuseness_vector[DIRAC_MAX_NBANDS]; + float renormalization_factor[DIRAC_MAX_NBANDS]; + float renormalization_factor_diff[DIRAC_MAX_NBANDS]; + float norm_tmp; + int16_t mrange[2]; + int16_t num_blocks; + + float reference_power[CLDFB_NO_COL_MAX][DIRAC_NO_FB_BANDS_MAX]; + + wmops_sub_start( "dirac_enc_param_est" ); + + /* Initialization */ + l_ts = input_frame / MAX_PARAM_SPATIAL_SUBFRAMES; + if ( useLowerRes ) + { + q_direction->cfg.nblocks = 1; + num_blocks = 1; + } + else + { + q_direction->cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; + num_blocks = MAX_PARAM_SPATIAL_SUBFRAMES; + } + + /* Need to initialize renormalization_factors, direction_m and diffuseness_m */ + for ( i = 0; i < hDirAC->hConfig->nbands; i++ ) + { + renormalization_factor_diff[i] = 0; + hDirAC->diffuseness_m[i] = 0; + } + + /* Copy current frame to memory for delay compensation */ + for ( i = 0; i < DIRAC_MAX_ANA_CHANS; i++ ) + { + pcm_in[i] = &data_f[i][0]; + p_Cldfb_RealBuffer[i] = &Cldfb_RealBuffer[i][0]; + p_Cldfb_ImagBuffer[i] = &Cldfb_ImagBuffer[i][0]; + } + + /* do processing over all CLDFB time slots */ + for ( block_m_idx = 0; block_m_idx < num_blocks; block_m_idx++ ) + { + mrange[0] = hDirAC->block_grouping[block_m_idx]; + mrange[1] = hDirAC->block_grouping[block_m_idx + 1]; + + for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) + { + renormalization_factor[band_m_idx] = EPSILON; + hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] = 0; + hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] = 0; + hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] = 0; + } + + for ( ts = mrange[0]; ts < mrange[1]; ts++ ) + { + if ( hDirAC->hFbMixer ) + { + ivas_fb_mixer_get_windowed_fr( hDirAC->hFbMixer, pcm_in, p_Cldfb_RealBuffer, p_Cldfb_ImagBuffer, l_ts, l_ts ); + ivas_fb_mixer_update_prior_input( hDirAC->hFbMixer, pcm_in, l_ts ); + + for ( i = 0; i < DIRAC_MAX_ANA_CHANS; i++ ) + { + pcm_in[i] += l_ts; + } + } + else + { +#ifdef DEBUGGING + assert( pp_fr_real ); + assert( pp_fr_imag ); +#endif + for ( i = 0; i < DIRAC_MAX_ANA_CHANS; i++ ) + { + mvr2r( &pp_fr_real[i][block_m_idx * l_ts], Cldfb_RealBuffer[i], l_ts ); + mvr2r( &pp_fr_imag[i][block_m_idx * l_ts], Cldfb_ImagBuffer[i], l_ts ); + } + } + + num_freq_bands = hDirAC->hConfig->nbands; + + computeReferencePower_enc( + hDirAC->band_grouping, + Cldfb_RealBuffer, + Cldfb_ImagBuffer, + reference_power[ts], + hDirAC->hConfig->enc_param_start_band, + num_freq_bands ); + + computeIntensityVector_enc( + hDirAC, + Cldfb_RealBuffer, + Cldfb_ImagBuffer, + hDirAC->hConfig->enc_param_start_band, + num_freq_bands, + intensity_real ); + + computeDirectionVectors( + intensity_real[0], + intensity_real[1], + intensity_real[2], + hDirAC->hConfig->enc_param_start_band, + num_freq_bands, + direction_vector[0], + direction_vector[1], + direction_vector[2] ); + + /* fill buffers of length "averaging_length" time slots for intensity and energy */ + hDirAC->index_buffer_intensity = ( hDirAC->index_buffer_intensity % hDirAC->no_col_avg_diff ) + 1; /* averaging_length = 32 */ + index = hDirAC->index_buffer_intensity; + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + /* only real part needed */ + mvr2r( intensity_real[i], &( hDirAC->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); + } + mvr2r( reference_power[ts], &( hDirAC->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); + + computeDiffuseness_mdft( hDirAC->buffer_intensity_real, hDirAC->buffer_energy, num_freq_bands, hDirAC->no_col_avg_diff, diffuseness_vector ); + + for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) + { + norm_tmp = reference_power[ts][band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); + + hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; + hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; + hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; + renormalization_factor[band_m_idx] += norm_tmp; + + hDirAC->diffuseness_m[band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; + renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; + } + } + + for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) + { + renormalization_factor[band_m_idx] = EPSILON; + for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) + { + renormalization_factor[band_m_idx] += ( hDirAC->direction_vector_m[d][block_m_idx][band_m_idx] * hDirAC->direction_vector_m[d][block_m_idx][band_m_idx] ); + } + renormalization_factor[band_m_idx] = sqrtf( renormalization_factor[band_m_idx] ); + + if ( renormalization_factor[band_m_idx] > EPSILON ) + { + hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] /= renormalization_factor[band_m_idx]; + hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] /= renormalization_factor[band_m_idx]; + hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] /= renormalization_factor[band_m_idx]; + } + else + { + hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] = 1; + hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] = 0; + hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] = 0; + } + + /* save the elevation and azimuth values to be used later by the ivas_dirac_QuantizeParameters function */ + for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) + { + dir_v[d] = hDirAC->direction_vector_m[d][block_m_idx][band_m_idx]; + } + + ivas_qmetadata_direction_vector_to_azimuth_elevation( dir_v, &q_direction->band_data[band_m_idx].azimuth[block_m_idx], &q_direction->band_data[band_m_idx].elevation[block_m_idx] ); + } + } + + /* Diffuseness */ + for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) + { + if ( renormalization_factor_diff[band_m_idx] > EPSILON ) + { + hDirAC->diffuseness_m[band_m_idx] /= renormalization_factor_diff[band_m_idx]; + } + else + { + hDirAC->diffuseness_m[band_m_idx] = 0.f; + } + + /* set coherence to zero and convert diffuseness to energy ratio*/ + + set_f( q_direction->band_data[band_m_idx].energy_ratio, 1.f - hDirAC->diffuseness_m[band_m_idx], q_direction->cfg.nblocks ); + + for ( block_m_idx = 0; block_m_idx < q_direction->cfg.nblocks; block_m_idx++ ) + { + if ( q_direction->coherence_band_data != NULL ) + { + q_direction->coherence_band_data[band_m_idx].spread_coherence[block_m_idx] = 0; + } + } + } + +#ifdef DEBUG_MODE_DIRAC + { + static FILE *fp_direction_vector = NULL, *fp_diffuseness = NULL, *fp_referencePower = NULL; + + if ( fp_direction_vector == NULL ) + fp_direction_vector = fopen( "./res/dbg_direction_vector_C.bin", "wb" ); + if ( fp_diffuseness == NULL ) + fp_diffuseness = fopen( "./res/dbg_diffuseness_C.bin", "wb" ); + if ( fp_referencePower == NULL ) + fp_referencePower = fopen( "./res/dbg_reference_power_C.bin", "wb" ); + + dbgwrite( hDirAC->diffuseness_m, sizeof( float ), hDirAC->hConfig->nbands, 1, "./res/dirac_enc_diffuseness.dat" ); + for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) + { + dbgwrite( hDirAC->direction_vector_m[0][block_m_idx], sizeof( float ), hDirAC->hConfig->nbands, 1, "./res/dirac_enc_dir0.dat" ); + dbgwrite( hDirAC->direction_vector_m[1][block_m_idx], sizeof( float ), hDirAC->hConfig->nbands, 1, "./res/dirac_enc_dir1.dat" ); + dbgwrite( hDirAC->direction_vector_m[2][block_m_idx], sizeof( float ), hDirAC->hConfig->nbands, 1, "./res/dirac_enc_dir2.dat" ); + + for ( ts = hDirAC->block_grouping[block_m_idx]; ts < hDirAC->block_grouping[block_m_idx + 1]; ts++ ) + { + for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) + { + for ( i = hDirAC->band_grouping[band_m_idx]; i < hDirAC->band_grouping[band_m_idx + 1]; i++ ) + { + for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) + { + fwrite( &( hDirAC->direction_vector_m[d][block_m_idx][band_m_idx] ), sizeof( float ), 1, fp_direction_vector ); + } + fwrite( &( hDirAC->diffuseness_m[band_m_idx] ), sizeof( float ), 1, fp_diffuseness ); + fwrite( &( reference_power[ts][band_m_idx] ), sizeof( float ), 1, fp_referencePower ); + } + } + } + } + } +#endif + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * computeIntensityVector_enc() + * + * + *------------------------------------------------------------------------*/ + +static void computeIntensityVector_enc( + DIRAC_ENC_HANDLE hDirAC, + float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ + float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Imag part of input signal */ + const int16_t enc_param_start_band, + const int16_t num_frequency_bands, + float intensity_real[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS] ) +{ + /* Reminder + * X = a + ib; Y = c + id + * X*Y = ac - bd + i(ad +bc) + */ + int16_t i, j; + float real, img; + int16_t brange[2]; + for ( i = 0; i < num_frequency_bands; i++ ) + { + brange[0] = hDirAC->band_grouping[i + enc_param_start_band]; + brange[1] = hDirAC->band_grouping[i + enc_param_start_band + 1]; + + intensity_real[0][i] = 0; + intensity_real[1][i] = 0; + intensity_real[2][i] = 0; + + for ( j = brange[0]; j < brange[1]; j++ ) + { + real = Cldfb_RealBuffer[0][j]; + img = Cldfb_ImagBuffer[0][j]; + intensity_real[0][i] += Cldfb_RealBuffer[3][j] * real + Cldfb_ImagBuffer[3][j] * img; + intensity_real[1][i] += Cldfb_RealBuffer[1][j] * real + Cldfb_ImagBuffer[1][j] * img; + intensity_real[2][i] += Cldfb_RealBuffer[2][j] * real + Cldfb_ImagBuffer[2][j] * img; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * computeDiffuseness_mdft() + * + * + *------------------------------------------------------------------------*/ + +void computeDiffuseness_mdft( + float **buffer_intensity[DIRAC_NUM_DIMS], + const float *buffer_energy, + const int16_t num_freq_bands, + const uint16_t no_col_avg_diff, + float *diffuseness ) +{ + float intensity_slow[DIRAC_NUM_DIMS * MASA_FREQUENCY_BANDS]; + float intensity_slow_abs[MASA_FREQUENCY_BANDS]; + float energy_slow[MASA_FREQUENCY_BANDS]; + int16_t i, j, k; + float tmp = 0; + float *p_tmp; + const float *p_tmp_c; + + /* Compute Intensity slow and energy slow */ + set_f( intensity_slow, 0.0f, DIRAC_NUM_DIMS * MASA_FREQUENCY_BANDS ); + set_f( intensity_slow_abs, 0.0f, MASA_FREQUENCY_BANDS ); + set_f( energy_slow, 0.0f, MASA_FREQUENCY_BANDS ); + + for ( i = 0; i < no_col_avg_diff; ++i ) + { + /* Energy slow */ + p_tmp_c = buffer_energy + i * num_freq_bands; + for ( k = 0; k < num_freq_bands; k++ ) + { + energy_slow[k] += *( p_tmp_c++ ); + } + + /* Intensity slow */ + for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) + { + p_tmp = buffer_intensity[j][i]; + for ( k = 0; k < num_freq_bands; k++ ) + { + intensity_slow[j * num_freq_bands + k] += *( p_tmp++ ); + } + } + } + + /* intensity_slow.^2 + intensity_slow_abs*/ + for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) + { + p_tmp = intensity_slow + j * num_freq_bands; + for ( k = 0; k < num_freq_bands; k++ ) + { + *( p_tmp ) *= ( *p_tmp ); + intensity_slow_abs[k] += *( p_tmp++ ); + } + } + + /* Compute Diffuseness */ + p_tmp = intensity_slow_abs; + for ( i = 0; i < num_freq_bands; ++i ) + { + tmp = sqrtf( *( p_tmp++ ) ) / ( energy_slow[i] + EPSILON ); + tmp = 1.0f - tmp; + diffuseness[i] = ( ( tmp < 1.0f ) ? ( ( tmp < 0.0f ) ? 0.f : tmp ) : 1.0f ); + } + + return; +} diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c new file mode 100644 index 0000000000..5003dbec9d --- /dev/null +++ b/lib_enc/ivas_enc.c @@ -0,0 +1,375 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------* + * ivas_enc() + * + * Principal IVAS encoder routine + *-------------------------------------------------------------------*/ + +ivas_error ivas_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t *data, /* i : input signal */ + const int16_t n_samples /* i : number of input samples */ +) +{ + int16_t i, n, input_frame, n_samples_chan, nchan_inp; + int32_t input_Fs; + IVAS_FORMAT ivas_format; + ENCODER_CONFIG_HANDLE hEncoderConfig; + BSTR_ENC_HANDLE hMetaData; + Encoder_State *st; /* used for bitstream handling */ + int16_t nb_bits_metadata[MAX_SCE]; + float data_f[MAX_INPUT_CHANNELS][L_FRAME48k]; /* IVAS_fmToDo: buffer can be allocated dynamically based on the number of analysed channels */ + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_enc" ); + + /*------------------------------------------------------------------* + * Initialization - general + *-----------------------------------------------------------------*/ + + hEncoderConfig = st_ivas->hEncoderConfig; + + input_Fs = hEncoderConfig->input_Fs; + ivas_format = hEncoderConfig->ivas_format; + nchan_inp = hEncoderConfig->nchan_inp; + ivas_total_brate = hEncoderConfig->ivas_total_brate; + + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + n_samples_chan = n_samples / nchan_inp; + + set_s( nb_bits_metadata, 0, MAX_SCE ); + + /*----------------------------------------------------------------* + * convert 'short' input data to 'float' + *----------------------------------------------------------------*/ + + n = 0; + while ( n < nchan_inp ) + { +#ifdef DEBUG_MODE_LFE + if ( n == LFE_CHANNEL ) + { + int16_t tmp[L_FRAME48k]; + for ( i = 0; i < n_samples_chan; i++ ) + { + tmp[i] = data[i * nchan_inp + n]; + } + dbgwrite( tmp, sizeof( int16_t ), n_samples_chan, 1, "./lfe_chan_in.raw" ); + } +#endif + for ( i = 0; i < n_samples_chan; i++ ) + { + data_f[n][i] = (float) data[i * nchan_inp + n]; + } + n++; + } + + if ( n_samples_chan < input_frame ) + { + for ( n = 0; n < nchan_inp; n++ ) + { + set_f( data_f[n] + n_samples_chan, 0.0f, input_frame - n_samples_chan ); + } + } + +#ifdef DEBUG_MODE_LFE + dbgwrite( data_f[LFE_CHANNEL], sizeof( float ), n_samples_chan, 1, "./res/lfe_input" ); +#endif + + /*----------------------------------------------------------------* + * HP filtering + *----------------------------------------------------------------*/ + + n = getNumChanAnalysis( st_ivas ); +#ifndef DEBUG_SPAR_BYPASS_EVS_CODEC + /* bypass EVS coding in float precision, emulating EVS encoder/decoder delay */ + for ( i = 0; i < n; i++ ) + { + if ( !( ivas_format == MC_FORMAT && i == LFE_CHANNEL ) ) /*TODO: is the HPF needed for LFE channel? */ + { + hp20( data_f[i], input_frame, st_ivas->mem_hp20_in[i], input_Fs ); + } + } +#endif + + /*----------------------------------------------------------------* + * write IVAS format signaling + *----------------------------------------------------------------*/ + + ivas_write_format( st_ivas ); + + /*----------------------------------------------------------------* + * Encoding + *----------------------------------------------------------------*/ + + if ( ivas_format == STEREO_FORMAT ) + { + st_ivas->hCPE[0]->element_brate = ivas_total_brate; + if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, 0 /* no metadata */ ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( ivas_format == ISM_FORMAT ) + { + /* select ISM format mode; reconfigure the ISM format encoder */ + ivas_ism_enc_config( st_ivas ); + + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + ivas_param_ism_enc( st_ivas, data_f, input_frame ); + + /* Stereo DMX generation */ + ivas_param_ism_stereo_dmx( st_ivas, data_f, input_frame ); + + /* Core coding of Stereo DMX */ + if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->ism_mode == ISM_MODE_DISC ) + { + /* Analysis, decision about bitrates per channel & core coding */ + if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( ivas_format == SBA_FORMAT || ivas_format == MASA_FORMAT ) + { + /* SBA/MASA configuration */ + if ( ivas_format == SBA_FORMAT ) + { + if ( st_ivas->sba_mode == SBA_MODE_DIRAC ) + { + if ( ( error = ivas_sba_enc_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( !( st_ivas->sba_mode == SBA_MODE_SPAR && ivas_total_brate < IVAS_256k ) ) + { + st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + + /* Write SBA planar flag */ + push_indice( st->hBstr, IND_SMODE, hEncoderConfig->sba_planar, SBA_PLANAR_BITS ); + + /* Write SBA order */ + push_indice( st->hBstr, IND_SMODE, hEncoderConfig->sba_order, SBA_ORDER_BITS ); + } + } + else + { + ivas_masa_enc_reconfigure( st_ivas ); + } + + /* SBA/MASA metadata encoding and SBA/MASA metadata bitstream writing */ + hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; + + if ( st_ivas->hQMetaData != NULL && st_ivas->sba_mode != SBA_MODE_SPAR ) + { + if ( ivas_format == SBA_FORMAT ) + { + ivas_dirac_enc( st_ivas->hDirAC, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], hEncoderConfig->Opt_DTX_ON, data_f, input_frame, hEncoderConfig->sba_planar ); + + ivas_dirac_enc_spar_delay_synchro( st_ivas, input_frame, data_f ); + } + else + { + if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + ivas_masa_estimate_energy( st_ivas->hMasa, data_f, input_frame, st_ivas->nchan_transport ); + + ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, + ivas_total_brate, hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1 ); + } + } + else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + if ( ( error = ivas_spar_enc( st_ivas, data_f, input_frame, nb_bits_metadata, hMetaData ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ivas_format == SBA_FORMAT ) + { + ivas_sba_getTCs( data_f, st_ivas, input_frame ); + } + + /* core-coding of transport channels */ + if ( st_ivas->nSCE == 1 ) + { + if ( ( error = ivas_sce_enc( st_ivas, 0, data_f[0], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE == 1 ) /* Stereo DMX */ + { + if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE > 1 ) /* FOA/HOA format */ + { + if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( ivas_format == MC_FORMAT ) + { + /* select MC format mode; write MC LS setup; reconfigure the MC format encoder */ + ivas_mc_enc_config( st_ivas ); + + hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; + + /* LFE channel encoder */ + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + st_ivas->hLFE->hBstr = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0]->hBstr : st_ivas->hCPE[0]->hCoreCoder[0]->hBstr; + ivas_lfe_enc( st_ivas->hLFE, data_f[LFE_CHANNEL], input_frame, st_ivas->hLFE->hBstr ); + } + + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + /* encode Parametric MC parameters and write bitstream */ + ivas_param_mc_enc( st_ivas, hMetaData, data_f, input_frame ); + + if ( st_ivas->nCPE == 1 ) /* Stereo DMX */ + { + if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE > 1 ) + { + if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + if ( st_ivas->hMcMasa->separateChannelEnabled ) + { + hMetaData = st_ivas->hCPE[0]->hMetaData; /* Metadata is always with CPE in the case of separated channel */ + } + + ivas_mcmasa_enc( st_ivas->hMcMasa, st_ivas->hQMetaData, st_ivas->hMasa, data_f, input_frame, st_ivas->nchan_transport, nchan_inp ); + + ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, ivas_total_brate, 0, -1 ); + + if ( st_ivas->hMcMasa->separateChannelEnabled ) + { + if ( ( error = ivas_sce_enc( st_ivas, 0, data_f[2], input_frame, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( st_ivas->nSCE == 1 ) + { + if ( ( error = ivas_sce_enc( st_ivas, 0, data_f[0], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->nCPE == 1 ) /* Stereo DMX */ + { + if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + } + } + + /*----------------------------------------------------------------* + * Common updates + *----------------------------------------------------------------*/ + + hEncoderConfig->last_ivas_total_brate = ivas_total_brate; + +#ifdef DEBUG_MODE_INFO + { + float tmpF = ivas_total_brate / 1000.0f; + dbgwrite( &tmpF, sizeof( float ), 1, input_frame, "res/ivas_total_brate" ); + } +#endif + + wmops_sub_end(); + return error; +} diff --git a/lib_enc/ivas_enc_cov_handler.c b/lib_enc/ivas_enc_cov_handler.c new file mode 100644 index 0000000000..1db9825ebc --- /dev/null +++ b/lib_enc/ivas_enc_cov_handler.c @@ -0,0 +1,330 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define MIN_POOL_SIZE 24 +#define MAX_UPDATE_RATE 0.8f +#define MIN_POOL_SIZE_DTX 40 +#define MAX_UPDATE_RATE_DTX 0.4f + +/*------------------------------------------------------------------------------------------* + * Local functions declarations + *------------------------------------------------------------------------------------------*/ +static void ivas_band_cov( float **ppIn_FR_real, float **ppIn_FR_imag, const int16_t num_chans, const int16_t num_bins, int16_t stride, float **pFb_bin_to_band, const int16_t *pFb_start_bin_per_band, const int16_t *pFb_active_bins_per_band, const int16_t start_band, const int16_t end_band, float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH] ); + +/*------------------------------------------------------------------------- + * ivas_spar_covar_enc_open() + * + * Allocate and initialize SPAR Covar. encoder handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_covar_enc_open( + ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +) +{ + ivas_enc_cov_handler_state_t *hCovState; + ivas_cov_smooth_cfg_t cov_smooth_cfg; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( hCovState = (ivas_enc_cov_handler_state_t *) count_malloc( sizeof( ivas_enc_cov_handler_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); + } + + cov_smooth_cfg.max_bands = IVAS_MAX_NUM_BANDS; + cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE; + cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE; + + if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_state, &cov_smooth_cfg, pFb, nchan_inp ) ) != IVAS_ERR_OK ) + { + return error; + } + + cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE_DTX; + cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE_DTX; + + if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_dtx_state, &cov_smooth_cfg, pFb, nchan_inp ) ) != IVAS_ERR_OK ) + { + return error; + } + + hCovState->num_bins = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + hCovState->prior_dtx_present = 0; + + *hCovEnc = hCovState; + + return error; +} + +/*------------------------------------------------------------------------- + * ivas_spar_covar_enc_close() + * + * Deallocate SPAR Covar. encoder handle + *------------------------------------------------------------------------*/ + +void ivas_spar_covar_enc_close( + ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ + const int16_t nchan_inp /* i : number of input channels */ +) +{ + ivas_enc_cov_handler_state_t *hCovState; + + hCovState = *hCovEnc; + + if ( hCovState != NULL ) + { + ivas_spar_covar_smooth_enc_close( &hCovState->pCov_state, nchan_inp ); + + ivas_spar_covar_smooth_enc_close( &hCovState->pCov_dtx_state, nchan_inp ); + + count_free( hCovState ); + hCovState = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_enc_cov_handler_process() + * + * Encoder covariance handler process call + *-----------------------------------------------------------------------------------------*/ + +void ivas_enc_cov_handler_process( + ivas_enc_cov_handler_state_t *hCovEnc, /* i/o: SPAR Covar. encoder handle */ + ivas_enc_cov_handler_in_buf_t *pIn_buf, + float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + ivas_filterbank_t *pFb, /* i/o: FB handle */ + const int16_t start_band, + const int16_t end_band ) +{ + int16_t i, j; + ivas_cov_smooth_in_buf_t pCov_in_buf; + int16_t num_ch = pIn_buf->num_ch; + ivas_enc_cov_handler_state_t *pState = hCovEnc; + + pCov_in_buf.num_ch = num_ch; + + ivas_band_cov( pIn_buf->ppIn_FR_real, pIn_buf->ppIn_FR_imag, pIn_buf->num_ch, pState->num_bins, + pFb->fb_bin_to_band.short_stride, + pFb->fb_bin_to_band.pp_short_stride_bin_to_band, + pFb->fb_bin_to_band.p_short_stride_start_bin_per_band, + pFb->fb_bin_to_band.p_short_stride_num_bins_per_band, + start_band, end_band, + cov_real ); +#ifdef DEBUG_SPAR_WRITE_OUT_COV + { + static FILE *fid = 0; + int16_t k = 0; + float tmp_buf[10]; + if ( !fid ) + { + fid = fopen( "cov_real.txt", "wt" ); + } + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + fprintf( fid, "%.6f\n", cov_real[i][j][k] ); + } + } + } + fprintf( fid, "\n" ); + } +#endif + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + pCov_in_buf.cov_real[i][j] = cov_real[i][j]; + + mvr2r( cov_real[i][j], cov_dtx_real[i][j], pFb->filterbank_num_bands ); + } + } + + pCov_in_buf.reset_cov = 0; + if ( pIn_buf->transient_det == 1 ) + { + pCov_in_buf.reset_cov = 1; + } + + ivas_cov_smooth_process( pState->pCov_state, &pCov_in_buf, pFb, + start_band, end_band ); + + if ( pIn_buf->dtx_cov_flag == 0 ) + { + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + mvr2r( pCov_in_buf.cov_real[i][j], pState->pCov_dtx_state->pPrior_cov_real[i][j], pFb->filterbank_num_bands ); + mvr2r( pCov_in_buf.cov_real[i][j], cov_dtx_real[i][j], pFb->filterbank_num_bands ); + } + } + + pState->prior_dtx_present = 1; + } + else + { + + if ( pIn_buf->transient_det == 0 ) + { + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + pCov_in_buf.cov_real[i][j] = cov_dtx_real[i][j]; + } + } + + pCov_in_buf.reset_cov = 0; + ivas_cov_smooth_process( pState->pCov_dtx_state, &pCov_in_buf, pFb, + start_band, end_band ); + pState->prior_dtx_present = 1; + } + else + { + if ( pState->prior_dtx_present == 0 ) + { + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + pCov_in_buf.cov_real[i][j] = cov_dtx_real[i][j]; + } + } + + pCov_in_buf.reset_cov = 1; + ivas_cov_smooth_process( pState->pCov_dtx_state, &pCov_in_buf, pFb, + start_band, end_band ); + pState->prior_dtx_present = 1; + } + else + { + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + mvr2r( pState->pCov_dtx_state->pPrior_cov_real[i][j], cov_dtx_real[i][j], pFb->filterbank_num_bands ); + } + } + + pState->prior_dtx_present = 1; + } + } + } + + return; +} + +static void ivas_band_cov( + float **ppIn_FR_real, + float **ppIn_FR_imag, + const int16_t num_chans, + const int16_t num_bins, + int16_t stride, + float **pFb_bin_to_band, + const int16_t *pFb_start_bin_per_band, + const int16_t *pFb_active_bins_per_band, + const int16_t start_band, + const int16_t end_band, + float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH] ) +{ + int16_t i, j, k; + float pV_re[L_FRAME48k]; + int16_t m, start_bin, active_bins; + + for ( i = 0; i < num_chans; i++ ) + { + for ( j = i; j < num_chans; j++ ) + { + for ( k = 0; k < num_bins; k++ ) + { + pV_re[k] = ppIn_FR_real[i][k] * ppIn_FR_real[j][k] + ppIn_FR_imag[i][k] * ppIn_FR_imag[j][k]; + } + for ( k = start_band; k < end_band; k++ ) + { + float temp = 0.0f; + const float *p_bin_to_band = pFb_bin_to_band[k]; + float *cov_ptr = pV_re; + int16_t num_blocks = num_bins / stride; + start_bin = pFb_start_bin_per_band[k]; + active_bins = pFb_active_bins_per_band[k]; + for ( int16_t blk = 0; blk < num_blocks; blk++ ) + { + /* optional: add temporal weight here */ + for ( m = start_bin; m < start_bin + active_bins; m++ ) + { + temp += cov_ptr[m] * ( p_bin_to_band[m - start_bin] ); + } + cov_ptr += stride; + } + cov_real[i][j][k] = temp * (float) num_blocks; + } + } + } + + for ( i = 0; i < num_chans; i++ ) + { + for ( j = 0; j < i; j++ ) + { + for ( k = start_band; k < end_band; k++ ) + { + cov_real[i][j][k] = cov_real[j][i][k]; + } + } + } + + return; +} diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c new file mode 100644 index 0000000000..3236e528a9 --- /dev/null +++ b/lib_enc/ivas_entropy_coder.c @@ -0,0 +1,575 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "math.h" +#include +#include "wmops.h" + +#ifdef DEBUG_SPAR_FOA +#define MREF_BPS_TOL ( 2e-4 ) +extern FILE *fModels_data; +#endif + +/*------------------------------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------------------------------*/ + +#define IVAS_MAX_ENCODED_BITS ( 150 ) + + +/*---------------------------------------------------------------------------------------- - * + * Function ivas_arith_enc_init() + * + * arith coder init + *---------------------------------------------------------------------------------------- - */ + +static void ivas_arith_enc_init( + ivas_arith_t *pArith, + const ivas_freq_models_t *pFreq_models, + ivas_arith_t *pArith_diff, + const int16_t q_levels ) +{ + int16_t i, j; + float sum = 0; + + pArith->vals = pFreq_models->vals; + pArith->range = q_levels; + pArith->num_models = pFreq_models->num_models; + pArith->dyn_model_bits = ivas_get_bits_to_encode( pArith->num_models - 1 ); + pArith->pFreq_model = pFreq_models->freq_model[0]; + ivas_get_cum_freq_model( pArith->pFreq_model, pArith->range, pArith->cum_freq[0] ); + + for ( i = 0; i < pArith->num_models - 1; i++ ) + { + pArith->pAlt_freq_models[i] = pFreq_models->freq_model[i + 1]; + ivas_get_cum_freq_model( pArith->pAlt_freq_models[i], pArith->range, pArith->cum_freq[i + 1] ); + } + + for ( i = 1; i < pArith->range + 1; i++ ) + { + sum += pArith->pFreq_model[i]; + } + + for ( i = 1; i < pArith->range + 1; i++ ) + { + pArith->saved_dist_arr[0][i - 1] = log2f( max( 1e-10f, pArith->pFreq_model[i] ) ); + pArith->saved_dist_arr[0][i - 1] -= log2f( max( 1e-10f, sum ) ); + } + + for ( j = 0; j < pArith->num_models - 1; j++ ) + { + sum = 0; + + for ( i = 1; i < pArith->range + 1; i++ ) + { + sum += pArith->pAlt_freq_models[j][i]; + } + + for ( i = 1; i < pArith->range + 1; i++ ) + { + pArith->saved_dist_arr[j + 1][i - 1] = log2f( max( 1e-10f, pArith->pAlt_freq_models[j][i] ) ); + pArith->saved_dist_arr[j + 1][i - 1] -= log2f( max( 1e-10f, sum ) ); + } + } + + pArith_diff->vals = pFreq_models->diff_vals; + pArith_diff->range = q_levels; + pArith_diff->num_models = pFreq_models->diff_num_models; + pArith_diff->dyn_model_bits = ivas_get_bits_to_encode( pArith_diff->num_models - 1 ); + pArith_diff->pFreq_model = pFreq_models->diff_freq_model[0]; + ivas_get_cum_freq_model( pArith_diff->pFreq_model, pArith_diff->range, pArith_diff->cum_freq[0] ); + + sum = 0; + + for ( i = 0; i < pArith_diff->num_models - 1; i++ ) + { + pArith_diff->pAlt_freq_models[i] = pFreq_models->diff_freq_model[i + 1]; + ivas_get_cum_freq_model( pArith_diff->pAlt_freq_models[i], pArith_diff->range, pArith_diff->cum_freq[i + 1] ); + } + + for ( i = 1; i < pArith_diff->range + 1; i++ ) + { + sum += pArith_diff->pFreq_model[i]; + } + + for ( i = 1; i < pArith_diff->range + 1; i++ ) + { + pArith_diff->saved_dist_arr[0][i - 1] = log2f( max( 1e-10f, pArith_diff->pFreq_model[i] ) ); + pArith_diff->saved_dist_arr[0][i - 1] -= log2f( max( 1e-10f, sum ) ); + } + + for ( j = 0; j < pArith_diff->num_models - 1; j++ ) + { + sum = 0; + + for ( i = 1; i < pArith_diff->range + 1; i++ ) + { + sum += pArith_diff->pAlt_freq_models[j][i]; + } + + for ( i = 1; i < pArith_diff->range + 1; i++ ) + { + pArith_diff->saved_dist_arr[j + 1][i - 1] = log2f( max( 1e-10f, pArith_diff->pAlt_freq_models[j][i] ) ); + pArith_diff->saved_dist_arr[j + 1][i - 1] -= log2f( max( 1e-10f, sum ) ); + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_dyn_freq_model() + * + * Chooses frequency model dynamically + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_get_dyn_freq_model( + int16_t *pInput, + const int16_t length, + int16_t *model_index, + ivas_arith_t *pArith, + int16_t **ppCum_freq ) +{ + float curr_dist[IVAS_MAX_QUANT_LEVELS]; + int16_t i, n[IVAS_MAX_QUANT_LEVELS + 1], model_idx; + float curr_bps = 0, curr_bps_min = 0, curr_bps_new = 0; + int16_t range = pArith->range; + int16_t m, offset = -pArith->vals[0]; + ivas_error error; + + error = IVAS_ERR_OK; + + for ( i = 0; i < range + 1; i++ ) + { + n[i] = 0; + } + + for ( i = 0; i < length; i++ ) + { + n[pInput[i] + offset] += 1; + } + + for ( i = 0; i < range; i++ ) + { + curr_dist[i] = (float) n[i]; + curr_bps -= ( curr_dist[i] * pArith->saved_dist_arr[0][i] ); + } + curr_bps_min = curr_bps; + + model_idx = 0; + + for ( m = 0; m < pArith->num_models - 1; m++ ) + { + curr_bps_new = 0; + for ( i = 0; i < range; i++ ) + { + curr_bps_new -= ( curr_dist[i] * pArith->saved_dist_arr[m + 1][i] ); + } + + if ( curr_bps_new < curr_bps_min ) + { + model_idx = m; + curr_bps_min = curr_bps_new; + } + } + + if ( curr_bps_min < curr_bps ) + { + *ppCum_freq = pArith->cum_freq[model_idx + 1]; + model_idx = model_idx + 1; + } + else + { + model_idx = 0; + *ppCum_freq = pArith->cum_freq[0]; + } + +#ifdef DEBUG_SPAR_FOA + if ( fModels_data != NULL ) + { + float ref_min_bps = 0; + int32_t ref_model_idx = 0; + fscanf( fModels_data, "%f\n", &ref_min_bps ); + fscanf( fModels_data, "%d\n", &ref_model_idx ); + + if ( fabs( curr_bps_min - ref_min_bps ) > MREF_BPS_TOL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "SPAR FOA model selection min BPS mismatch: %f, ref: %f, diff: %f \n", curr_bps_min, ref_min_bps, curr_bps_min - ref_min_bps ); + } + else + { + if ( model_idx != ref_model_idx ) + { + model_idx = (int16_t) ref_model_idx; + *ppCum_freq = pArith->cum_freq[model_idx]; + } + } + } +#endif + + *model_index = model_idx; + + return error; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arith_encode_array() + * + * Arith encoding of an array of symbols + *-----------------------------------------------------------------------------------------*/ + +static void ivas_arith_encode_array( + int16_t *pInput, + ivas_arith_t *pArith, + BSTR_ENC_HANDLE hMetaData, + const int16_t in_len ) +{ + int16_t model_index, i, ind; + int16_t *pCum_freq = NULL; + Tastat as; + + if ( in_len > 0 && pArith->range > 1 ) + { + if ( pArith->dyn_model_bits > 0 ) + { + ivas_get_dyn_freq_model( pInput, in_len, &model_index, pArith, &pCum_freq ); + push_next_indice( hMetaData, model_index, pArith->dyn_model_bits ); + } + else + { + pCum_freq = pArith->cum_freq[0]; + } + + ari_start_encoding_14bits( &as ); + + for ( i = 0; i < in_len; i++ ) + { + ind = pInput[i] - pArith->vals[0]; + + ivas_ari_encode_14bits_ext( hMetaData, &as, ind, (const uint16_t *) pCum_freq ); + } + + ivas_ari_done_encoding_14bits( hMetaData, &as ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arithCoder_encode_array_diff() + * + * Differential arith encoding + *-----------------------------------------------------------------------------------------*/ + +static void ivas_arithCoder_encode_array_diff( + ivas_arith_t *pArith_diff, + int16_t *pIn_new, + int16_t *pIn_old_scratch, + const int16_t length, + BSTR_ENC_HANDLE hMetaData ) +{ + int16_t n; + + if ( length > 0 ) + { + for ( n = 0; n < length; n++ ) + { + pIn_old_scratch[n] = pIn_new[n] - pIn_old_scratch[n]; + } + + ivas_wrap_arround( pIn_old_scratch, pArith_diff->vals[0], pArith_diff->vals[pArith_diff->range - 1], length ); + + ivas_arith_encode_array( pIn_old_scratch, pArith_diff, hMetaData, length ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_huffman_encode() + * + * ivas_huffman_encode + *-----------------------------------------------------------------------------------------*/ + +void ivas_huffman_encode( + ivas_huffman_cfg_t *huff_cfg, + int16_t in, + int16_t *hcode, + int16_t *hlen ) +{ + int16_t min_sym_val; + const int16_t *codebook; + + min_sym_val = huff_cfg->codebook[0]; + + codebook = &huff_cfg->codebook[3 * ( in - min_sym_val )]; + *hlen = codebook[1]; + *hcode = codebook[2]; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arith_coeffs_enc_init() + * + * Init for Arithm. coding + *-----------------------------------------------------------------------------------------*/ + +void ivas_arith_coeffs_enc_init( + ivas_arith_coeffs_t *pArith_coeffs, + ivas_spar_foa_md_com_cfg *pSpar_cfg, + const int16_t table_idx ) +{ + int16_t i; + + for ( i = 0; i < MAX_QUANT_STRATS; i++ ) + { + ivas_arith_enc_init( &pArith_coeffs->pred_arith_re[i], &ivas_arith_consts[table_idx][i].pred_r, + &pArith_coeffs->pred_arith_re_diff[i], pSpar_cfg->quant_strat[i].PR.q_levels[0] ); + + ivas_arith_enc_init( &pArith_coeffs->drct_arith_re[i], &ivas_arith_consts[table_idx][i].drct_r, + &pArith_coeffs->drct_arith_re_diff[i], pSpar_cfg->quant_strat[i].C.q_levels[0] ); + + ivas_arith_enc_init( &pArith_coeffs->decd_arith_re[i], &ivas_arith_consts[table_idx][i].decd_r, + &pArith_coeffs->decd_arith_re_diff[i], pSpar_cfg->quant_strat[i].P_r.q_levels[0] ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_huff_coeffs_enc_init() + * + * Init for Huffman coding + *-----------------------------------------------------------------------------------------*/ + +void ivas_huff_coeffs_enc_init( + ivas_huff_coeffs_t *pHuff_coeffs, + const int16_t table_idx ) +{ + int16_t i; + + for ( i = 0; i < MAX_QUANT_STRATS; i++ ) + { + pHuff_coeffs->pred_huff_re[i].codebook = &ivas_huff_const[table_idx][i].pred_r.code_book[0][0]; + + pHuff_coeffs->drct_huff_re[i].codebook = &ivas_huff_const[table_idx][i].drct_r.code_book[0][0]; + + pHuff_coeffs->decd_huff_re[i].codebook = &ivas_huff_const[table_idx][i].decd_r.code_book[0][0]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function arith_encode_cell_array() + * + * Arithmetic encode a cell array + *-----------------------------------------------------------------------------------------*/ + +static void arith_encode_cell_array( + ivas_cell_dim_t *pCell_dims, + BSTR_ENC_HANDLE hMetaData, + const int16_t nB, + ivas_arith_t *pArith, + int16_t *pSymbol ) +{ + int16_t total_symbol_len = 0; + int16_t i; + + for ( i = 0; i < nB; i++ ) + { + total_symbol_len += ( pCell_dims[i].dim1 * pCell_dims[i].dim2 ); + } + + assert( total_symbol_len <= ( IVAS_MAX_INPUT_LEN ) ); + + if ( total_symbol_len > 0 ) + { + if ( pArith->range > 1 ) + { + ivas_arith_encode_array( pSymbol, pArith, hMetaData, total_symbol_len ); + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function arith_encode_cell_array_diff() + * + * Arithmetic encode a cell array - differential + *-----------------------------------------------------------------------------------------*/ + +static void arith_encode_cell_array_diff( + const ivas_cell_dim_t *pCell_dims, + BSTR_ENC_HANDLE hMetaData, + int16_t nB, + ivas_arith_t *pArith_diff, + int16_t *pSymbol_old, + int16_t *pSymbol ) +{ + int16_t i, total_symbol_len; + + total_symbol_len = 0; + for ( i = 0; i < nB; i++ ) + { + total_symbol_len += ( pCell_dims[i].dim1 * pCell_dims[i].dim2 ); + } + + assert( total_symbol_len <= ( IVAS_MAX_INPUT_LEN ) ); + + if ( total_symbol_len > 0 ) + { + if ( pArith_diff->range > 1 ) + { + ivas_arithCoder_encode_array_diff( pArith_diff, pSymbol, pSymbol_old, total_symbol_len, hMetaData ); + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_arith_encode_cmplx_cell_array() + * + * Arithmetic encode a cell array + *-----------------------------------------------------------------------------------------*/ + +void ivas_arith_encode_cmplx_cell_array( + ivas_arith_t *pArith_re, + ivas_arith_t *pArith_re_diff, + const int16_t *pDo_diff, + const int16_t nB, + int16_t *pSymbol_re, + int16_t *pSymbol_old_re, + ivas_cell_dim_t *pCell_dims, + BSTR_ENC_HANDLE hMetaData, + const int16_t any_diff ) +{ + int16_t input_old[IVAS_MAX_INPUT_LEN]; + int16_t input_new[IVAS_MAX_INPUT_LEN]; + int16_t input[IVAS_MAX_INPUT_LEN]; + ivas_cell_dim_t cell_dim[IVAS_MAX_NUM_BANDS], cell_dim_diff[IVAS_MAX_NUM_BANDS]; + int16_t len, idx, i, j, idx1; + + idx1 = 0; + if ( any_diff == 1 ) + { + idx = 0; + for ( i = 0; i < nB; i++ ) + { + len = ( pCell_dims[i].dim1 * pCell_dims[i].dim2 ); + if ( pDo_diff[i] != 0 ) + { + for ( j = 0; j < len; j++ ) + { + input_old[idx] = pSymbol_old_re[i * len + j]; + input_new[idx++] = pSymbol_re[i * len + j]; + } + cell_dim_diff[i].dim1 = pCell_dims[i].dim1; + cell_dim_diff[i].dim2 = pCell_dims[i].dim2; + cell_dim[i].dim1 = 0; + cell_dim[i].dim2 = 0; + } + else + { + for ( j = 0; j < len; j++ ) + { + input[idx1++] = pSymbol_re[i * len + j]; + } + cell_dim_diff[i].dim1 = 0; + cell_dim_diff[i].dim2 = 0; + cell_dim[i].dim1 = pCell_dims[i].dim1; + cell_dim[i].dim2 = pCell_dims[i].dim2; + } + } +#ifdef SPAR_HOA_DBG + /*if ( 0 )*/ /*(pCell_dims[0].dim1 == 12)*/ + /* + { + idx = 0; + fprintf( stdout, "\n\n OLD/NEW: \n\n" ); + for ( i = 0; i < nB; i++ ) + { + len = ( cell_dim[i].dim1 * cell_dim[i].dim2 ); + fprintf( stdout, "Non-diff Band %d: \n", i ); + + for ( j = 0; j < len; j++ ) + { + fprintf( stdout, ">>%d: %d \n", idx, input[idx] ); + idx++; + } + } + idx = 0; + for ( i = 0; i < nB; i++ ) + { + len = ( cell_dim_diff[i].dim1 * cell_dim_diff[i].dim2 ); + fprintf( stdout, "Diff Band %d: \n", i ); + for ( j = 0; j < len; j++ ) + { + fprintf( stdout, ">>%d: %d\t %d\n", idx, input_old[idx], input_new[idx] ); + idx++; + } + } + }*/ +#endif + + arith_encode_cell_array( cell_dim, hMetaData, nB, pArith_re, input ); + + arith_encode_cell_array_diff( cell_dim_diff, hMetaData, nB, pArith_re_diff, input_old, input_new ); + } + else + { + arith_encode_cell_array( pCell_dims, hMetaData, nB, pArith_re, pSymbol_re ); + } + + return; +} diff --git a/lib_enc/ivas_front_vad.c b/lib_enc/ivas_front_vad.c new file mode 100644 index 0000000000..09fd624ca5 --- /dev/null +++ b/lib_enc/ivas_front_vad.c @@ -0,0 +1,503 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include +#include "wmops.h" +#include + + +/*-----------------------------------------------------------------------------------------* + * Function front_vad() + * + * Standalone front-VAD module + *-----------------------------------------------------------------------------------------*/ + +ivas_error front_vad( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure, nullable */ + Encoder_State *st, /* i/o: encoder state structure */ + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + FRONT_VAD_ENC_HANDLE *hFrontVads, /* i/o: FrontVad handles */ + const int16_t hMCT_flag, /* i : hMCT handle allocated (1) or not (0) */ + const int16_t input_frame, /* i : frame length */ + int16_t vad_flag_dtx[], /* o : HE-SAD flag with additional DTX HO */ + float fr_bands[][2 * NB_BANDS], /* i : energy in frequency bands */ + float Etot_LR[], /* o : total energy Left & Right channel */ + float lf_E[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ + int16_t localVAD_HE_SAD[], /* o : HE-SAD flag without hangover, LR channels */ + int16_t vad_hover_flag[], /* o : VAD hangover flag */ + float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN*/ + float *PS_out, /* o : energy spectrum */ + float *Bin_E_out /* o : log-energy spectrum of the current frame */ +) +{ + ENC_CORE_HANDLE *sts; + float band_energies[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ + float PS[L_FRAME / 2]; /* speech/music clasif. parameters */ + float snr_sum_he; /* HE SAD parameters */ + float Bin_E[L_FFT]; /* per bin log energy spectrum for mid-frame */ + float Bin_E_old[L_FFT / 2]; /* old per bin log energy spectrum for mid-frame */ + float fft_buffLR[2 * L_FFT]; /* fft buffer */ + int16_t n, n_chan, dummy; + int16_t element_mode, last_element_mode; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "front_vad" ); + + if ( hCPE != NULL ) + { + n_chan = CPE_CHANNELS; + sts = &hCPE->hCoreCoder[0]; + element_mode = hCPE->element_mode; + last_element_mode = hCPE->last_element_mode; + } + else if ( st != NULL ) + { + n_chan = 1; + sts = &st; + element_mode = IVAS_SCE; + last_element_mode = IVAS_SCE; + } + else + { + assert( 0 && "Either CPE or SCE must be given!" ); + return IVAS_ERR_INTERNAL_FATAL; + } + + snr_sum_he = 0; + for ( n = 0; n < n_chan; n++ ) + { + localVAD_HE_SAD[n] = 0; + vad_hover_flag[n] = 0; + } + + /*------------------------------------------------------------------* + * Allocate/deallocate hFrontVad handles in case of element_mode change + *-----------------------------------------------------------------*/ + + if ( sts[0]->ini_frame > 0 && hMCT_flag == 0 && last_element_mode != element_mode ) + { + if ( element_mode == IVAS_CPE_MDCT ) + { + if ( hFrontVads[0] != NULL ) + { + for ( n = 0; n < n_chan; n++ ) + { + front_vad_destroy( &hFrontVads[n] ); + hFrontVads[n] = NULL; + } + } + } + else + { + if ( sts[0]->Opt_DTX_ON && hFrontVads[0] == NULL ) + { + for ( n = 0; n < n_chan; n++ ) + { + if ( ( error = front_vad_create( &hFrontVads[n], hEncoderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + } + } + + /* Only run VAD if DTX is on and TD stereo or unified stereo is selected */ + if ( hFrontVads[0] != NULL && element_mode != IVAS_CPE_MDCT ) + { +#ifdef DEBUGGING + /* If stereo switching is not enabled and TD is selected restore element_mode to TD every frame before the VAD */ + if ( hCPE != NULL && hCPE->stereo_mode_cmdl == IVAS_CPE_TD ) + { + hCPE->element_mode = IVAS_CPE_TD; + } +#endif + + /*------------------------------------------------------------------* + * VAD + *-----------------------------------------------------------------*/ + + set_zero( band_energies_LR, 2 * NB_BANDS ); + + for ( n = 0; n < n_chan; n++ ) + { + FRONT_VAD_ENC_HANDLE hFrontVad; + hFrontVad = hFrontVads[n]; + + /* Move previous frame 12k8 signal */ + mvr2r( hFrontVad->buffer_12k8 + L_FFT, hFrontVad->buffer_12k8, L_FFT / 2 ); + + /* Resample to 12k8 */ + modify_Fs( sts[n]->input, input_frame, sts[0]->input_Fs, hFrontVad->buffer_12k8 + L_FFT / 2, INT_FS_12k8, hFrontVad->mem_decim, ( sts[0]->max_bwidth == NB ) ); + + /* Preemphasis */ + preemph( hFrontVad->buffer_12k8 + L_FFT / 2, PREEMPH_FAC, L_FRAME, &hFrontVad->mem_preemph ); + + /* TODO: this may need adaption if ever using this for MDCT-Stereo (see conditional inside of analy_sp) */ + analy_sp( IVAS_CPE_TD, hCPE, sts[0]->input_Fs, hFrontVad->buffer_12k8 + L_FFT / 2 - 3 * ( L_SUBFR / 2 ), Bin_E, Bin_E_old, fr_bands[n], lf_E[n], &Etot_LR[n], sts[0]->min_band, sts[0]->max_band, band_energies, PS, fft_buffLR ); + + /* add up energies for later calculating average of channel energies */ + v_add( &band_energies[0], &band_energies_LR[0], &band_energies_LR[0], 2 * NB_BANDS ); + + noise_est_pre( Etot_LR[n], hFrontVads[0]->ini_frame, hFrontVad->hNoiseEst, 0, 0, 0 ); + + /* wb_vad */ + hFrontVad->hVAD->vad_flag = wb_vad( sts[n], fr_bands[n], &dummy, &dummy, &dummy, &snr_sum_he, &localVAD_HE_SAD[n], &dummy, hFrontVad->hVAD, hFrontVad->hNoiseEst, hFrontVad->lp_speech, hFrontVad->lp_noise ); + + if ( n == 0 && n_chan > 1 && last_element_mode == IVAS_CPE_DFT ) + { + sts[1]->last_coder_type = sts[0]->last_coder_type; + } + + /* DTX hangover addition */ + vad_flag_dtx[n] = dtx_hangover_addition( sts[n], hFrontVad->hVAD->vad_flag, hFrontVad->lp_speech - hFrontVad->lp_noise, 0 /* <- no cldfb addition */, &vad_hover_flag[n], hFrontVad->hVAD, hFrontVad->hNoiseEst ); + + if ( n_chan == 1 ) + { + sts[n]->vad_flag = hFrontVad->hVAD->vad_flag; + } + } + + if ( n_chan == CPE_CHANNELS ) + { + /* get average channel energies, adding up was already done, so only need to scale by number of channels */ + v_multc( &band_energies_LR[0], 0.5f, &band_energies_LR[0], 2 * NB_BANDS ); + + /* Logical OR between L and R decisions */ + vad_flag_dtx[0] = vad_flag_dtx[0] || vad_flag_dtx[1]; + } + + /* TODO: if using this for MDCT-Stereo, this may need to be done on both channels? or maybe some more logic is needed */ + /* TODO: do we really need this for VAD only ? */ + if ( sts[0]->hFdCngEnc != NULL ) + { + resetFdCngEnc( sts[0] ); + } + + /* Part of DTX to decide if SID/NO_DATA */ + if ( vad_flag_dtx[0] == 0 && sts[0]->ini_frame > 2 ) /* CNG coding starts after 3 frames */ + { + if ( sts[0]->fd_cng_reset_flag == 0 ) + { + if ( hCPE != NULL ) + { + hCPE->element_mode = IVAS_CPE_DFT; + sts[1]->active_cnt = 0; + } + } + else + { + vad_flag_dtx[0] = 1; + } + } + else + { + vad_flag_dtx[0] = 1; + } + } + + if ( PS_out != NULL ) + { + mvr2r( PS, PS_out, L_FRAME / 2 ); + } + + if ( Bin_E_out != NULL ) + { + mvr2r( Bin_E, Bin_E_out, L_FRAME ); + } + + wmops_sub_end(); + return error; +} + + +/*-----------------------------------------------------------------------------------------* + * Function front_vad_create() + * + * Allocate and initialize Standalone front-VAD module + *-----------------------------------------------------------------------------------------*/ + +ivas_error front_vad_create( + FRONT_VAD_ENC_HANDLE *hFrontVad_out, /* i/o: front-VAD handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +) +{ + FRONT_VAD_ENC_HANDLE hFrontVad; + + if ( ( hFrontVad = (FRONT_VAD_ENC_HANDLE) count_malloc( sizeof( FRONT_VAD_ENC ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for front-VAD structure \n" ) ); + } + + if ( ( hFrontVad->hNoiseEst = (NOISE_EST_HANDLE) count_malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ) ); + } + noise_est_init( hFrontVad->hNoiseEst ); + + if ( ( hFrontVad->hVAD = (VAD_HANDLE) count_malloc( sizeof( VAD_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); + } + wb_vad_init( hFrontVad->hVAD ); + + hFrontVad->lp_speech = 45.0f; /* Initialize the long-term active speech level in dB */ + hFrontVad->lp_noise = 0.0f; /* Initialize the long-term noise level in dB */ + set_f( hFrontVad->mem_decim, 0, 2 * L_FILT_MAX ); + set_f( hFrontVad->buffer_12k8, 0, 3 * L_FRAME / 2 ); + hFrontVad->mem_preemph = 0; + hFrontVad->ini_frame = 0; + hFrontVad->hVAD->vad_flag = 1; + + /* allocate delay buffer to compensate for filterbank delay */ + hFrontVad->delay_samples = NS2SA( hEncoderConfig->input_Fs, IVAS_FB_ENC_DELAY_NS ); + hFrontVad->delay_buf = NULL; + if ( hFrontVad->delay_samples > 0 ) + { + if ( ( hFrontVad->delay_buf = (float *) count_malloc( hFrontVad->delay_samples * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD delay buffer\n" ) ); + } + set_f( hFrontVad->delay_buf, 0, hFrontVad->delay_samples ); + } + + + *hFrontVad_out = hFrontVad; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function front_vad_destroy() + * + * Deallocate Standalone front-VAD module + *-----------------------------------------------------------------------------------------*/ + +void front_vad_destroy( + FRONT_VAD_ENC_HANDLE *hFrontVad /* i/o: front-VAD handle */ +) +{ + if ( *hFrontVad != NULL ) + { + count_free( ( *hFrontVad )->hNoiseEst ); + ( *hFrontVad )->hNoiseEst = NULL; + + count_free( ( *hFrontVad )->hVAD ); + ( *hFrontVad )->hVAD = NULL; + + if ( ( *hFrontVad )->delay_buf != NULL ) + { + count_free( ( *hFrontVad )->delay_buf ); + ( *hFrontVad )->delay_buf = NULL; + } + + count_free( *hFrontVad ); + *hFrontVad = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function front_vad_spar() + * + * Standalone front-VAD module for SPAR + *-----------------------------------------------------------------------------------------*/ + +ivas_error front_vad_spar( + SPAR_ENC_HANDLE hSpar, /* i/o: SPAR encoder structure */ + const float *omni_in, /* i : omnidirectional input signal */ + ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : encoder configuration handle */ + const int16_t input_frame /* i : input frame length */ +) +{ + FRONT_VAD_ENC_HANDLE hFrontVad; + float input[L_FRAME48k]; + int16_t vad_flag_dtx[1]; + float fr_bands[1][2 * NB_BANDS]; + float Etot[1]; + float lf_E[1][2 * VOIC_BINS]; + int16_t localVAD_HE_SAD[1]; + int16_t vad_hover_flag[1]; + float band_energies[2 * NB_BANDS]; + int16_t high_lpn_flag; + Encoder_State *st; + float tmpN[NB_BANDS], tmpE[NB_BANDS]; + float corr_shift, dummy, res_energy; + float A[NB_SUBFR16k * ( M + 1 )], Aw[NB_SUBFR16k * ( M + 1 )]; + float epsP[M + 1]; + float lsp_new[M]; + float lsp_mid[M]; + int16_t alw_pitch_lag_12k8[2]; + float alw_voicing[2]; + float cor_map_sum; + float ncharX; + float sp_div; + float non_staX; + int16_t loc_harm; + float S_map[L_FFT / 2]; + float *inp_12k8; + float old_wsp[L_WSP]; + float *wsp; + float relE; + int16_t flag_spitch; + float PS[L_FRAME / 2]; + int16_t old_pitch; + ivas_error error; + + wmops_sub_start( "front_vad_SPAR" ); + + error = IVAS_ERR_OK; + + hFrontVad = hSpar->hFrontVad; + st = hSpar->hCoreCoderVAD; + + if ( hEncoderConfig->Opt_DTX_ON && hEncoderConfig->ivas_total_brate <= IVAS_80k ) + { + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + inp_12k8 = hFrontVad->buffer_12k8; + mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); + wsp = old_wsp + L_WSP_MEM; + + st->core_brate = -1; /* updated in dtx() */ + st->input_bwidth = st->last_input_bwidth; // VE: TBD - this might be updated by actual detected BW + + /*------------------------------------------------------------------* + * compensate for SPAR filterbank delay + *-----------------------------------------------------------------*/ + + st->input = input; + mvr2r( omni_in, st->input, input_frame ); + + delay_signal( st->input, input_frame, hFrontVad->delay_buf, hFrontVad->delay_samples ); + + /*------------------------------------------------------------------* + * Front-VAD + *-----------------------------------------------------------------*/ + + if ( ( error = front_vad( NULL, st, hEncoderConfig, &hFrontVad, 0 /* hMCT_flag */, input_frame, vad_flag_dtx, fr_bands, Etot, lf_E, localVAD_HE_SAD, vad_hover_flag, band_energies, &PS[0], &st->Bin_E[0] ) ) != IVAS_ERR_OK ) + { + return error; + } + + noise_est_down( fr_bands[0], hFrontVad->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &hFrontVad->hNoiseEst->totalNoise, Etot[0], &hFrontVad->hNoiseEst->Etot_last, &hFrontVad->hNoiseEst->Etot_v_h2 ); + corr_shift = correlation_shift( hFrontVad->hNoiseEst->totalNoise ); + + dtx( st, vad_flag_dtx[0], inp_12k8 ); + + /* linear prediction analysis */ + alw_pitch_lag_12k8[0] = st->old_pitch_la; + alw_pitch_lag_12k8[1] = st->old_pitch_la; + alw_voicing[0] = st->voicing[2]; + alw_voicing[1] = st->voicing[2]; + analy_lp( inp_12k8, L_FRAME, L_LOOK_12k8, &res_energy, A, epsP, lsp_new, lsp_mid, st->lsp_old1, alw_pitch_lag_12k8, alw_voicing, INT_FS_12k8, 0 /* <-- sec_chan_low_rate */ ); + + relE = Etot[0] - st->lp_speech; + + find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp_12k8, TILT_FAC, wsp, &st->mem_wsp, GAMMA1, L_LOOK_12k8 ); + + if ( st->vad_flag == 0 ) + { + /* reset the OL pitch tracker memories during inactive frames */ + pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); + } + + old_pitch = st->pitch[1]; + pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, relE, L_LOOK_12k8, st->clas, st->input_bwidth, st->Opt_SC_VBR ); + + /* Updates for adaptive lag window memory */ + st->old_pitch_la = st->pitch[2]; + + /* Detection of very short stable pitch period */ + StableHighPitchDetect( &flag_spitch, st->pitch, st->voicing, st->Bin_E, wsp, st->localVAD, &st->voicing_sm, &st->voicing0_sm, &st->LF_EnergyRatio_sm, &st->predecision_flag, &st->diff_sm, &st->energy_sm ); + + if ( st->hSpMusClas != NULL ) + { + int16_t dummy_int; + dummy_int = 0; + loc_harm = multi_harm( st->Bin_E, hFrontVad->hNoiseEst->old_S, hFrontVad->hNoiseEst->cor_map, &hFrontVad->hNoiseEst->multi_harm_limit, st->total_brate, st->bwidth, ( st->hGSCEnc != NULL ) ? &st->hGSCEnc->cor_strong_limit : &dummy_int, &st->hSpMusClas->mean_avr_dyn, &st->hSpMusClas->last_sw_dyn, &cor_map_sum, &dummy, S_map ); + } + + noise_est( st, old_pitch, tmpN, epsP, Etot[0], Etot[0] - hFrontVad->lp_speech, corr_shift, tmpE, fr_bands[0], &cor_map_sum, &ncharX, &sp_div, &non_staX, &loc_harm, lf_E[0], &hFrontVad->hNoiseEst->harm_cor_cnt, hFrontVad->hNoiseEst->Etot_l_lp, &dummy, S_map, NULL, hFrontVad, hFrontVad->ini_frame ); + + vad_param_updt( st, corr_shift, corr_shift, A, st->pitch[1], &hFrontVad, 1 ); + + /* 1st stage speech/music classification (GMM model) */ + /* run only to get 'high_lpn_flag' parameter */ + ivas_smc_gmm( st, NULL /* <-- hStereoClassif */, localVAD_HE_SAD[0], *Etot, lsp_new, cor_map_sum, epsP, PS, non_staX, relE, &high_lpn_flag, flag_spitch ); + + /* long-term energy update */ + long_enr( st, *Etot, localVAD_HE_SAD[0], high_lpn_flag, &hFrontVad, 1, localVAD_HE_SAD, Etot ); + hFrontVad->hNoiseEst->Etot_last = Etot[0]; + + /* increase ini_frame counter */ + hFrontVad->ini_frame = min( hFrontVad->ini_frame + 1, MAX_FRAME_COUNTER ); + st->ini_frame = hFrontVad->ini_frame; + + hSpar->front_vad_flag = st->vad_flag; + hSpar->front_vad_dtx_flag = 1; + if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + hSpar->front_vad_dtx_flag = 0; + } + hSpar->force_front_vad = 1; + st->last_core = 0; + } + else + { + hSpar->front_vad_flag = 1; + hSpar->front_vad_dtx_flag = 0; + hSpar->force_front_vad = 0; + } + + wmops_sub_end(); + + return error; +} diff --git a/lib_enc/ivas_init_enc.c b/lib_enc/ivas_init_enc.c new file mode 100644 index 0000000000..5949e5ceab --- /dev/null +++ b/lib_enc/ivas_init_enc.c @@ -0,0 +1,989 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ivas_write_format() + * + * Write IVAS format signaling + *-------------------------------------------------------------------*/ + +void ivas_write_format( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + int16_t ind, nBits, extra_bits; + + ind = 0; + nBits = IVAS_FORMAT_SIGNALING_NBITS; + extra_bits = ( IVAS_FORMAT_SIGNALING_NBITS_SBA - IVAS_FORMAT_SIGNALING_NBITS ); + + switch ( st_ivas->hEncoderConfig->ivas_format ) + { + case STEREO_FORMAT: + ind = 0; + break; + case ISM_FORMAT: + ind = 2; + break; + case MC_FORMAT: + ind = 1; + break; + case SBA_FORMAT: + ind = 6; + nBits += extra_bits; + break; + case MASA_FORMAT: + ind = 7; + nBits += extra_bits; + break; + default: + assert( !"Invalid format. Aborting." ); + break; + } + + if ( st_ivas->hSCE[0] != NULL ) + { + push_indice( st_ivas->hSCE[0]->hCoreCoder[0]->hBstr, IND_IVAS_FORMAT, ind, nBits ); + } + else if ( st_ivas->hCPE[0] != NULL ) + { + push_indice( st_ivas->hCPE[0]->hCoreCoder[0]->hBstr, IND_IVAS_FORMAT, ind, nBits ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_write_format_sid() + * + * Write IVAS format signaling in SID frames + *-------------------------------------------------------------------*/ + +void ivas_write_format_sid( + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int16_t element_mode, /* i : element bitrate */ + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +) +{ + int16_t ind = 0; /* to avoid compilation warning */ + + switch ( ivas_format ) + { + case STEREO_FORMAT: + if ( element_mode == IVAS_CPE_MDCT ) + { + ind = SID_MDCT_STEREO; + } + else if ( element_mode == IVAS_CPE_DFT ) + { + ind = SID_DFT_STEREO; + } + else + { + assert( !"Wrong stereo mode for SID format signalling" ); + } + break; + case ISM_FORMAT: + ind = SID_ISM; + break; + case MC_FORMAT: + ind = SID_MULTICHANNEL; + break; + case SBA_FORMAT: + switch ( element_mode ) + { + case IVAS_SCE: + ind = SID_SBA_1TC; + break; + case IVAS_CPE_MDCT: + ind = SID_SBA_2TC; + break; + default: + assert( !"Wrong element mode for SBA DTX!" ); + break; + } + break; + case MASA_FORMAT: + if ( element_mode == IVAS_SCE ) + { + ind = SID_MASA_1TC; + } + else + { + ind = SID_MASA_2TC; + } + break; + + default: + assert( !"Reserved SID format symbol written." ); + break; + } + + push_indice( hBstr, IND_IVAS_FORMAT, ind, SID_FORMAT_NBITS ); + + return; +} + + +/*-------------------------------------------------------------------* + * getNumChanAnalysis() + * + * get number of input channels used for analysis/coding + *-------------------------------------------------------------------*/ + +/*! r: number of channels to be analysed */ +int16_t getNumChanAnalysis( + Encoder_Struct *st_ivas /* i : IVAS encoder structure */ +) +{ + int16_t n; + + n = st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE; + if ( st_ivas->hEncoderConfig->ivas_format == SBA_FORMAT ) + { + n = DIRAC_MAX_ANA_CHANS; + } + else if ( st_ivas->hEncoderConfig->ivas_format == MC_FORMAT && ( st_ivas->mc_mode == MC_MODE_PARAMMC || st_ivas->mc_mode == MC_MODE_MCMASA ) ) + { + n = st_ivas->hEncoderConfig->nchan_inp; + } + + return n; +} + + +/*-------------------------------------------------------------------* + * copy_encoder_config() + * + * Copy configuration structrue to the state structrure + *-------------------------------------------------------------------*/ + +void copy_encoder_config( + Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ + Encoder_State *st, /* o : encoder state structure */ + const int16_t flag_all /* i : flag 1==update all, 0=partial update*/ +) +{ + if ( flag_all ) + { + st->input_Fs = st_ivas->hEncoderConfig->input_Fs; + + st->last_codec_mode = st_ivas->last_codec_mode; + st->last_total_brate = st_ivas->hEncoderConfig->last_ivas_total_brate; + + st->Opt_DTX_ON = st_ivas->hEncoderConfig->Opt_DTX_ON; + + st->last_Opt_SC_VBR = st_ivas->hEncoderConfig->last_Opt_SC_VBR; + } + + st->Opt_AMR_WB = st_ivas->hEncoderConfig->Opt_AMR_WB; + st->Opt_SC_VBR = st_ivas->hEncoderConfig->Opt_SC_VBR; + + st->codec_mode = st_ivas->codec_mode; + st->max_bwidth = st_ivas->hEncoderConfig->max_bwidth; + + st->Opt_RF_ON = st_ivas->hEncoderConfig->Opt_RF_ON; + st->rf_fec_offset = st_ivas->hEncoderConfig->rf_fec_offset; + st->rf_fec_indicator = st_ivas->hEncoderConfig->rf_fec_indicator; + +#ifdef DEBUGGING + st->force = st_ivas->hEncoderConfig->force; +#endif + st->element_mode = st_ivas->hEncoderConfig->element_mode_init; + return; +} + + +/*-------------------------------------------------------------------* + * ivas_init_encoder() + * + * Initialize IVAS encoder state structure + *-------------------------------------------------------------------*/ + +ivas_error ivas_init_encoder( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + Indice ind_list[][MAX_NUM_INDICES], /* o : bitstream indices */ + Indice ind_list_metadata[][MAX_BITS_METADATA] /* o : bitstream indices metadata */ +) +{ + int16_t i, n; + int16_t sce_id, cpe_id; + IVAS_FORMAT ivas_format; + int32_t input_Fs, ivas_total_brate; + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + error = IVAS_ERR_OK; + + hEncoderConfig = st_ivas->hEncoderConfig; + ivas_format = hEncoderConfig->ivas_format; + input_Fs = hEncoderConfig->input_Fs; + ivas_total_brate = hEncoderConfig->ivas_total_brate; + + hEncoderConfig->last_ivas_total_brate = ivas_total_brate; + + if ( ivas_format != MONO_FORMAT ) + { + /* In IVAS, ensure that minimum coded bandwidth is WB */ + hEncoderConfig->max_bwidth = max( hEncoderConfig->max_bwidth, WB ); + } + + st_ivas->ism_mode = ISM_MODE_NONE; + st_ivas->mc_mode = MC_MODE_NONE; + st_ivas->sba_mode = SBA_MODE_NONE; + + /*-----------------------------------------------------------------* + * Dummy pointers to max. number of SCEs and CPEs + *-----------------------------------------------------------------*/ + + st_ivas->nchan_transport = -1; + + for ( i = 0; i < MAX_SCE; i++ ) + { + st_ivas->hSCE[i] = NULL; + } + + for ( i = 0; i < MAX_CPE; i++ ) + { + st_ivas->hCPE[i] = NULL; + } + + /* ISm metadata handles */ + for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) + { + st_ivas->hIsmMetaData[n] = NULL; + } + + /* Q Metadata handle */ + st_ivas->hQMetaData = NULL; + + /* DirAC handle */ + st_ivas->hDirAC = NULL; + + /* SPAR handle */ + st_ivas->hSpar = NULL; + + /* MASA encoder handle */ + st_ivas->hMasa = NULL; + + /* MCT handle */ + st_ivas->hMCT = NULL; + + /* Parametric MC handle */ + st_ivas->hParamMC = NULL; + + /* Multi-channel MASA handle */ + st_ivas->hMcMasa = NULL; + + /* Stereo downmix for EVS encoder handle */ + st_ivas->hStereoDmxEVS = NULL; + + /* LFE handle */ + st_ivas->hLFE = NULL; + + /*-----------------------------------------------------------------* + * Allocate and initialize SCE/CPE and other handles + *-----------------------------------------------------------------*/ + + if ( ivas_format == MONO_FORMAT ) + { + st_ivas->nSCE = 1; /* in mono, there is always only one SCE */ + st_ivas->nCPE = 0; + st_ivas->nchan_transport = 1; + sce_id = 0; + + if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list[sce_id]; + reset_indices_enc( st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr, MAX_NUM_INDICES ); + + /* prepare stereo downmix for EVS */ + if ( hEncoderConfig->stereo_dmx_evs == 1 ) + { + if ( ( error = stereo_dmx_evs_init_encoder( &( st_ivas->hStereoDmxEVS ), input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( ivas_format == STEREO_FORMAT ) + { + st_ivas->nSCE = 0; + st_ivas->nCPE = 1; /* in stereo, there is always only one CPE */ + st_ivas->nchan_transport = CPE_CHANNELS; + cpe_id = 0; + + if ( ( error = create_cpe_enc( st_ivas, cpe_id, ivas_total_brate ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->ind_list = ind_list[n]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, MAX_NUM_INDICES ); + } + + /* MetaData for DFT stereo */ + st_ivas->hCPE[cpe_id]->hMetaData->ind_list = ind_list_metadata[0]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hMetaData, MAX_BITS_METADATA ); + } + else if ( ivas_format == ISM_FORMAT ) + { + int32_t element_brate_tmp[MAX_NUM_OBJECTS]; + + st_ivas->ism_mode = ivas_ism_mode_select( hEncoderConfig->nchan_inp, ivas_total_brate ); + + if ( ( error = create_ism_metadata_enc( st_ivas, hEncoderConfig->nchan_inp, element_brate_tmp ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( ( error = create_sce_enc( st_ivas, sce_id, element_brate_tmp[sce_id] ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list[sce_id]; + reset_indices_enc( st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr, MAX_NUM_INDICES ); + + st_ivas->hSCE[sce_id]->hMetaData->ind_list = ind_list_metadata[sce_id]; + reset_indices_enc( st_ivas->hSCE[sce_id]->hMetaData, MAX_BITS_METADATA ); + } + + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + if ( ( error = ivas_param_ism_enc_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( ivas_format == SBA_FORMAT || ivas_format == MASA_FORMAT ) + { + { + if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + if ( ivas_format == SBA_FORMAT ) + { + st_ivas->sba_mode = ivas_sba_mode_select( ivas_total_brate ); + + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + if ( ( error = ivas_spar_enc_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + { + if ( ( error = ivas_dirac_enc_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else + { + st_ivas->nchan_transport = hEncoderConfig->nchan_inp; + if ( ( error = ivas_masa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list[sce_id]; + reset_indices_enc( st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr, MAX_NUM_INDICES ); + + st_ivas->hSCE[sce_id]->hMetaData->ind_list = ind_list_metadata[sce_id]; + reset_indices_enc( st_ivas->hSCE[sce_id]->hMetaData, MAX_BITS_METADATA ); + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_enc( st_ivas, cpe_id, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->ind_list = ind_list[cpe_id * CPE_CHANNELS + n]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, MAX_NUM_INDICES ); + if ( hEncoderConfig->Opt_DTX_ON ) + { + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_spar_flag = 1; + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_dirac_flag = 1; + } + else + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_dirac_flag = 1; + } + } + } + + /* Metadata only initialized for the last cpe index */ + if ( cpe_id == st_ivas->nCPE - 1 ) + { + st_ivas->hCPE[cpe_id]->hMetaData->ind_list = ind_list_metadata[st_ivas->nSCE]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hMetaData, MAX_BITS_METADATA ); + } + } + + if ( st_ivas->nCPE > 1 ) + { + if ( ( error = create_mct_enc( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( ivas_format == MC_FORMAT ) + { + st_ivas->mc_mode = ivas_mc_mode_select( hEncoderConfig->mc_input_setup, ivas_total_brate ); + hEncoderConfig->nchan_inp = ivas_mc_ls_setup_get_num_channels( hEncoderConfig->mc_input_setup ); + + if ( ( error = ivas_create_lfe_enc( &st_ivas->hLFE, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( st_ivas->mc_mode == MC_MODE_MCT ) + { + st_ivas->nSCE = 0; + st_ivas->nCPE = hEncoderConfig->nchan_inp / 2; + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_enc( st_ivas, cpe_id, ( ivas_total_brate / ( hEncoderConfig->nchan_inp - 1 ) * CPE_CHANNELS ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + if ( cpe_id * CPE_CHANNELS + n == LFE_CHANNEL ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->nb_bits_tot = 0; + continue; + } + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->ind_list = ind_list[cpe_id * CPE_CHANNELS + n]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, MAX_NUM_INDICES ); + } + } + + if ( ( error = create_mct_enc( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels( st_ivas->hEncoderConfig->mc_input_setup ); + } + else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + if ( ( error = ivas_param_mc_enc_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_enc( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nCPE + st_ivas->nSCE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->ind_list = ind_list[cpe_id * CPE_CHANNELS + n]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, MAX_NUM_INDICES ); + } + + /* Metadata only initialized for the last cpe index*/ + if ( cpe_id == st_ivas->nCPE - 1 ) + { + st_ivas->hCPE[cpe_id]->hMetaData->ind_list = ind_list_metadata[st_ivas->nSCE]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hMetaData, MAX_BITS_METADATA ); + } + } + + if ( st_ivas->nCPE > 1 ) + { + if ( ( error = create_mct_enc( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + { + ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( hEncoderConfig->element_mode_init ), ivas_total_brate ); + if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_masa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_mcmasa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( st_ivas->hMcMasa->separateChannelEnabled ) + { + if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_mcmasa_mono_brate( ivas_total_brate ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate / ( st_ivas->nCPE + st_ivas->nSCE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* prepare bitstream buffers */ + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list[sce_id]; + reset_indices_enc( st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr, MAX_NUM_INDICES ); + + st_ivas->hSCE[sce_id]->hMetaData->ind_list = ind_list_metadata[sce_id]; + reset_indices_enc( st_ivas->hSCE[sce_id]->hMetaData, MAX_BITS_METADATA ); + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( st_ivas->hMcMasa->separateChannelEnabled ) + { + hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + + if ( ( error = create_cpe_enc( st_ivas, cpe_id, ivas_total_brate - st_ivas->hSCE[0]->element_brate ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( ( error = create_cpe_enc( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nCPE + st_ivas->nSCE ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->ind_list = ind_list[cpe_id * CPE_CHANNELS + n + st_ivas->nSCE]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, MAX_NUM_INDICES ); + } + + /* Metadata only initialized for the last cpe index*/ + if ( cpe_id == st_ivas->nCPE - 1 ) + { + st_ivas->hCPE[cpe_id]->hMetaData->ind_list = ind_list_metadata[st_ivas->nSCE]; + reset_indices_enc( st_ivas->hCPE[cpe_id]->hMetaData, MAX_BITS_METADATA ); + } + } + } + } +#ifdef DEBUGGING + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Invalid IVAS format. Exiting.\n" ); + } +#endif + + /*-----------------------------------------------------------------* + * Allocate and initialize HP20 filter memories + *-----------------------------------------------------------------*/ + + /* set number of input channels used for analysis/coding */ + n = getNumChanAnalysis( st_ivas ); + + if ( n > 0 ) + { + if ( ( st_ivas->mem_hp20_in = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); + } + } + else + { + st_ivas->mem_hp20_in = NULL; + } + + for ( i = 0; i < n; i++ ) + { + if ( ( st_ivas->mem_hp20_in[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); + } + + set_f( st_ivas->mem_hp20_in[i], 0.0f, L_HP20_MEM ); + } + + return error; +} + + +/*------------------------------------------------------------------------- + * destroy_core_enc() + * + * Close core encoder handles + *-------------------------------------------------------------------------*/ + +void destroy_core_enc( + ENC_CORE_HANDLE hCoreCoder /* i/o: core encoder structure */ +) +{ + destroy_encoder( hCoreCoder ); + + if ( hCoreCoder->hSignalBuf != NULL ) + { + count_free( hCoreCoder->hSignalBuf ); + hCoreCoder->hSignalBuf = NULL; + } + + if ( hCoreCoder->hBstr != NULL ) + { + count_free( hCoreCoder->hBstr ); + hCoreCoder->hBstr = NULL; + } + + if ( hCoreCoder->hLPDmem != NULL ) + { + count_free( hCoreCoder->hLPDmem ); + hCoreCoder->hLPDmem = NULL; + } + + if ( hCoreCoder->hTranDet != NULL ) + { + count_free( hCoreCoder->hTranDet ); + hCoreCoder->hTranDet = NULL; + } + + if ( hCoreCoder->hNoiseEst != NULL ) + { + count_free( hCoreCoder->hNoiseEst ); + hCoreCoder->hNoiseEst = NULL; + } + + if ( hCoreCoder->hVAD != NULL ) + { + count_free( hCoreCoder->hVAD ); + hCoreCoder->hVAD = NULL; + } + + if ( hCoreCoder->hVAD_CLDFB != NULL ) + { + count_free( hCoreCoder->hVAD_CLDFB ); + hCoreCoder->hVAD_CLDFB = NULL; + } + + if ( hCoreCoder->hTdCngEnc != NULL ) + { + count_free( hCoreCoder->hTdCngEnc ); + hCoreCoder->hTdCngEnc = NULL; + } + + if ( hCoreCoder->hDtxEnc != NULL ) + { + count_free( hCoreCoder->hDtxEnc ); + hCoreCoder->hDtxEnc = NULL; + } + + if ( hCoreCoder->hSpMusClas != NULL ) + { + count_free( hCoreCoder->hSpMusClas ); + hCoreCoder->hSpMusClas = NULL; + } + + if ( hCoreCoder->hGSCEnc != NULL ) + { + count_free( hCoreCoder->hGSCEnc ); + hCoreCoder->hGSCEnc = NULL; + } + + if ( hCoreCoder->hSC_VBR != NULL ) + { + count_free( hCoreCoder->hSC_VBR ); + hCoreCoder->hSC_VBR = NULL; + } + + if ( hCoreCoder->hAmrwb_IO != NULL ) + { + count_free( hCoreCoder->hAmrwb_IO ); + hCoreCoder->hAmrwb_IO = NULL; + } + + if ( hCoreCoder->hBWE_TD != NULL ) + { + count_free( hCoreCoder->hBWE_TD ); + hCoreCoder->hBWE_TD = NULL; + } + + if ( hCoreCoder->hBWE_FD != NULL ) + { + count_free( hCoreCoder->hBWE_FD ); + hCoreCoder->hBWE_FD = NULL; + } + + if ( hCoreCoder->hRF != NULL ) + { + count_free( hCoreCoder->hRF ); + hCoreCoder->hRF = NULL; + } + + if ( hCoreCoder->hTECEnc != NULL ) + { + count_free( hCoreCoder->hTECEnc ); + hCoreCoder->hTECEnc = NULL; + } + + if ( hCoreCoder->hTcxEnc != NULL ) + { + count_free( hCoreCoder->hTcxEnc ); + hCoreCoder->hTcxEnc = NULL; + } + + if ( hCoreCoder->hTcxCfg != NULL ) + { + count_free( hCoreCoder->hTcxCfg ); + hCoreCoder->hTcxCfg = NULL; + } + + if ( hCoreCoder->hIGFEnc != NULL ) + { + count_free( hCoreCoder->hIGFEnc ); + hCoreCoder->hIGFEnc = NULL; + } + + if ( hCoreCoder->hPlcExt != NULL ) + { + count_free( hCoreCoder->hPlcExt ); + hCoreCoder->hPlcExt = NULL; + } + + if ( hCoreCoder->hHQ_core != NULL ) + { + count_free( hCoreCoder->hHQ_core ); + hCoreCoder->hHQ_core = NULL; + } + + count_free( hCoreCoder ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_destroy_enc() + * + * Close IVAS encoder handles + *-------------------------------------------------------------------------*/ + +void ivas_destroy_enc( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + int16_t i, n, nchan_inp; + IVAS_FORMAT ivas_format; + + ivas_format = st_ivas->hEncoderConfig->ivas_format; + nchan_inp = st_ivas->hEncoderConfig->nchan_inp; + + /* SCE handles */ + for ( i = 0; i < MAX_SCE; i++ ) + { + if ( st_ivas->hSCE[i] != NULL ) + { + destroy_sce_enc( st_ivas->hSCE[i] ); + st_ivas->hSCE[0] = NULL; + } + } + + /* CPE handles */ + for ( i = 0; i < MAX_CPE; i++ ) + { + if ( st_ivas->hCPE[i] != NULL ) + { + destroy_cpe_enc( st_ivas->hCPE[i] ); + st_ivas->hCPE[i] = NULL; + } + } + + /* HP20 filter handles */ + if ( st_ivas->mem_hp20_in != NULL ) + { + n = getNumChanAnalysis( st_ivas ); + + for ( i = 0; i < n; i++ ) + { + count_free( st_ivas->mem_hp20_in[i] ); + st_ivas->mem_hp20_in[i] = NULL; + } + count_free( st_ivas->mem_hp20_in ); + st_ivas->mem_hp20_in = NULL; + } + + /* ISM metadata handles */ + for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) + { + if ( st_ivas->hIsmMetaData[n] != NULL ) + { + count_free( st_ivas->hIsmMetaData[n] ); + st_ivas->hIsmMetaData[n] = NULL; + } + } + + /* Q Metadata handle */ + ivas_qmetadata_close( &( st_ivas->hQMetaData ) ); + + /* DirAC handle */ + if ( st_ivas->hDirAC != NULL ) + { + if ( ivas_format == ISM_FORMAT ) + { + ivas_param_ism_enc_close( st_ivas->hDirAC, st_ivas->hEncoderConfig->input_Fs ); + } + else + { + ivas_dirac_enc_close( st_ivas->hDirAC, st_ivas->hEncoderConfig->input_Fs ); + } + st_ivas->hDirAC = NULL; + } + + /* SPAR handle */ + if ( st_ivas->hSpar != NULL ) + { + ivas_spar_enc_close( st_ivas->hSpar, st_ivas->hEncoderConfig->input_Fs, nchan_inp ); + st_ivas->hSpar = NULL; + } + + /* MASA handle */ + if ( st_ivas->hMasa != NULL ) + { + ivas_masa_enc_close( st_ivas->hMasa, st_ivas->nchan_transport, ivas_format ); + st_ivas->hMasa = NULL; + } + + /* MCT handle */ + if ( st_ivas->hMCT != NULL ) + { + ivas_mct_enc_close( st_ivas->hMCT ); + st_ivas->hMCT = NULL; + } + + /* Parametric MC handle */ + if ( st_ivas->hParamMC != NULL ) + { + ivas_param_mc_enc_close( st_ivas->hParamMC, st_ivas->hEncoderConfig->input_Fs ); + st_ivas->hParamMC = NULL; + } + + /* Multi-channel MASA handle */ + if ( st_ivas->hMcMasa != NULL ) + { + ivas_mcmasa_enc_close( st_ivas->hMcMasa, st_ivas->hEncoderConfig->input_Fs ); + st_ivas->hMcMasa = NULL; + } + + /* Stereo downmix for EVS encoder handle */ + if ( st_ivas->hStereoDmxEVS != NULL ) + { + stereo_dmx_evs_close_encoder( st_ivas->hStereoDmxEVS ); + st_ivas->hStereoDmxEVS = NULL; + } + + /* LFE handle */ + if ( st_ivas->hLFE != NULL ) + { + ivas_lfe_enc_close( st_ivas->hLFE ); + st_ivas->hLFE = NULL; + } + + /* Encoder configuration handle */ + if ( st_ivas->hEncoderConfig != NULL ) + { + count_free( st_ivas->hEncoderConfig ); + st_ivas->hEncoderConfig = NULL; + } + + /* main IVAS handle */ + count_free( st_ivas ); + + return; +} diff --git a/lib_enc/ivas_ism_enc.c b/lib_enc/ivas_ism_enc.c new file mode 100644 index 0000000000..e363b7f9c3 --- /dev/null +++ b/lib_enc/ivas_ism_enc.c @@ -0,0 +1,281 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_stat_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ivas_ism_enc() + * + * ISM CoreCoders encoding routine + *-------------------------------------------------------------------*/ + +ivas_error ivas_ism_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data[MAX_NUM_OBJECTS][L_FRAME48k], /* i : input signal */ + const int16_t input_frame, /* i : input frame length per channel */ + int16_t *nb_bits_metadata /* i : number of metadata bits */ +) +{ + SCE_ENC_HANDLE hSCE; + Encoder_State *st; + int16_t sce_id; + float old_inp_12k8[MAX_NUM_OBJECTS][1][L_INP_12k8]; /* buffer of input signal @ 12k8 */ + float old_inp_16k[MAX_NUM_OBJECTS][1][L_INP]; /* buffer of input signal @ 16kHz */ + int16_t vad_flag[MAX_NUM_OBJECTS]; /* VAD flag */ + float Etot[MAX_NUM_OBJECTS][1]; /* total energy; correlation shift */ + float ener[MAX_NUM_OBJECTS][1]; /* residual energy from Levinson-Durbin */ + float relE[MAX_NUM_OBJECTS][1]; /* frame relative energy */ + float A[MAX_NUM_OBJECTS][1][NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ + float Aw[MAX_NUM_OBJECTS][1][NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ + float epsP[MAX_NUM_OBJECTS][1][M + 1]; /* LP prediction errors */ + float lsp_new[MAX_NUM_OBJECTS][1][M]; /* LSPs at the end of the frame */ + float lsp_mid[MAX_NUM_OBJECTS][1][M]; /* ISPs in the middle of the frame */ + int16_t vad_hover_flag[MAX_NUM_OBJECTS][1]; /* VAD hangover flag */ + int16_t attack_flag[MAX_NUM_OBJECTS][1]; /* attack flag (GSC or TC) */ + float realBuffer[MAX_NUM_OBJECTS][1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ + float imagBuffer[MAX_NUM_OBJECTS][1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ + float old_wsp[MAX_NUM_OBJECTS][1][L_WSP]; /* old weighted input signal */ + float pitch_fr[MAX_NUM_OBJECTS][1][NB_SUBFR]; /* fractional pitch values */ + float voicing_fr[MAX_NUM_OBJECTS][1][NB_SUBFR]; /* fractional pitch gains */ + int16_t loc_harm[MAX_NUM_OBJECTS][1]; /* harmonicity flag */ + float cor_map_sum[MAX_NUM_OBJECTS][1]; /* speech/music clasif. parameter */ + int16_t vad_flag_dtx[MAX_NUM_OBJECTS][1]; /* HE-SAD flag with additional DTX HO */ + float enerBuffer[MAX_NUM_OBJECTS][1][CLDFB_NO_CHANNELS_MAX]; /* energy buffer */ + float currFlatness[1]; /* flatness parameter */ + float fft_buff[MAX_NUM_OBJECTS][1][2 * L_FFT]; /* FFT buffer */ + float fr_bands[1][2 * NB_BANDS]; /* energy in frequency bands */ + float Etot_LR[1]; /* total energy; correlation shift */ + float lf_E[1][2 * VOIC_BINS]; /* per bin spectrum energy in lf */ + int16_t localVAD_HE_SAD[1]; /* local HE VAD */ + int16_t i, nBits; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_ism_enc" ); + + /*------------------------------------------------------------------* + * Preprocesing + *-----------------------------------------------------------------*/ + + /* in ISM format: st_ivas->nchan_transport = st_ivas->nSCE */ + for ( sce_id = 0; sce_id < st_ivas->nchan_transport; sce_id++ ) + { + hSCE = st_ivas->hSCE[sce_id]; + st = hSCE->hCoreCoder[0]; + + /*------------------------------------------------------------------* + * Initialization - general + *-----------------------------------------------------------------*/ + + mvr2r( data[sce_id], st->input, input_frame ); + + st->element_mode = IVAS_SCE; + + /*------------------------------------------------------------------* + * SCE initialization - core coder + *-----------------------------------------------------------------*/ + + st->idchan = 0; + st->core = -1; + st->core_brate = -1; /* updated in dtx() */ + st->max_bwidth = st_ivas->hEncoderConfig->max_bwidth; + st->input_bwidth = st->last_input_bwidth; /* updated in BWD */ + st->bwidth = st->last_bwidth; /* updated in BWD */ + st->rate_switching_reset = 0; +#ifdef DEBUGGING + st->force = st_ivas->hEncoderConfig->force; + st->id_element = sce_id; +#endif + + /*---------------------------------------------------------------* + * Time Domain Transient Detector + *---------------------------------------------------------------*/ + + RunTransientDetection( st->input, input_frame, st->hTranDet ); + currFlatness[0] = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 0 ); + + /*----------------------------------------------------------------* + * Configuration of core encoder + *----------------------------------------------------------------*/ + + /* Force to MODE1 in IVAS */ + st->codec_mode = MODE1; + + st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); + + /*----------------------------------------------------------------* + * Front Pre-processing + *----------------------------------------------------------------*/ + + error = pre_proc_front_ivas( hSCE, NULL, hSCE->element_brate, nb_bits_metadata[sce_id], input_frame, 0, old_inp_12k8[sce_id][0], old_inp_16k[sce_id][0], + &Etot[sce_id][0], &ener[sce_id][0], &relE[sce_id][0], A[sce_id][0], Aw[sce_id][0], epsP[sce_id][0], lsp_new[sce_id][0], lsp_mid[sce_id][0], + &vad_hover_flag[sce_id][0], &attack_flag[sce_id][0], realBuffer[sce_id][0], imagBuffer[sce_id][0], old_wsp[sce_id][0], pitch_fr[sce_id][0], voicing_fr[sce_id][0], &loc_harm[sce_id][0], &cor_map_sum[sce_id][0], &vad_flag_dtx[sce_id][0], enerBuffer[sce_id][0], + fft_buff[sce_id][0], A[sce_id][0], lsp_new[sce_id][0], currFlatness[0], 0, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, NULL, 0, 0, 0, 0 ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + + vad_flag[sce_id] = st->vad_flag; + } + + /*------------------------------------------------------------------* + * Analysis of objects, configuration and decision about bitrates per channel + *-----------------------------------------------------------------*/ + + /* Metadata encoding */ + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + /* Move the Noisy speech buffer */ + for ( i = 0; i < ( PARAM_ISM_HYS_BUF_SIZE - 1 ); i++ ) + { + st_ivas->hDirAC->hParamIsm->noisy_speech_buffer[i] = st_ivas->hDirAC->hParamIsm->noisy_speech_buffer[i + 1]; + } + + /* For the current frame, make a decision based on some core-coder flags */ + if ( st_ivas->hSCE[0]->hCoreCoder[0]->flag_noisy_speech_snr && st_ivas->hSCE[1]->hCoreCoder[0]->flag_noisy_speech_snr ) + { + if ( st_ivas->hSCE[0]->hCoreCoder[0]->vad_flag && st_ivas->hSCE[1]->hCoreCoder[0]->vad_flag ) + { + st_ivas->hDirAC->hParamIsm->noisy_speech_buffer[i] = 0; + } + else + { + st_ivas->hDirAC->hParamIsm->noisy_speech_buffer[i] = 1; + } + } + else + { + st_ivas->hDirAC->hParamIsm->noisy_speech_buffer[i] = 0; + } + + /* Do a decision based on hysterisis */ + st_ivas->hDirAC->hParamIsm->flag_noisy_speech = 1; + for ( i = 0; i < PARAM_ISM_HYS_BUF_SIZE; i++ ) + { + st_ivas->hDirAC->hParamIsm->flag_noisy_speech = st_ivas->hDirAC->hParamIsm->flag_noisy_speech && st_ivas->hDirAC->hParamIsm->noisy_speech_buffer[i]; + } + + ivas_ism_metadata_enc( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hDirAC->hParamIsm ); + } + else /* ISM_MODE_DISC */ + { + ivas_ism_metadata_enc( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL ); + } + + /*----------------------------------------------------------------* + * Write IVAS format signalling in SID frames + *----------------------------------------------------------------*/ + + st = st_ivas->hSCE[0]->hCoreCoder[0]; + + if ( st->core_brate == SID_2k40 ) + { + ivas_write_format_sid( st_ivas->hEncoderConfig->ivas_format, IVAS_SCE, st->hBstr ); + + /* write unused bits */ + nBits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + while ( nBits > 0 ) + { + i = min( nBits, 16 ); + push_indice( st->hBstr, IND_UNUSED, 0, i ); + nBits -= i; + } + } + + /*------------------------------------------------------------------* + * CoreCoders encoding + *-----------------------------------------------------------------*/ + + for ( sce_id = 0; sce_id < st_ivas->nchan_transport; sce_id++ ) + { + hSCE = st_ivas->hSCE[sce_id]; + st = hSCE->hCoreCoder[0]; + + if ( st->low_rate_mode ) + { + st->bwidth = WB; + } + + /*----------------------------------------------------------------* + * Core codec configuration + *----------------------------------------------------------------*/ + + /* set ACELP@12k8 / ACELP@16k flag for flexible ACELP core */ + if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + st->flag_ACELP16k = set_ACELP_flag( IVAS_SCE, hSCE->element_brate, st->core_brate, 0, 0, -1, -1 ); + } + else if ( st->low_rate_mode ) + { + st->flag_ACELP16k = 0; + } + else + { + st->flag_ACELP16k = set_ACELP_flag( IVAS_SCE, hSCE->element_brate, st->total_brate, 0, 0, -1, -1 ); + } + + /* modify the coder_type depending on the total_brate per channel */ + coder_type_modif( st, relE[sce_id][0] ); + + /*----------------------------------------------------------------* + * Encoder + *----------------------------------------------------------------*/ + + if ( ( error = ivas_core_enc( hSCE, NULL, NULL, 1, old_inp_12k8[sce_id], old_inp_16k[sce_id], Etot[sce_id], ener[sce_id], A[sce_id], Aw[sce_id], epsP[sce_id], lsp_new[sce_id], lsp_mid[sce_id], vad_hover_flag[sce_id], attack_flag[sce_id], realBuffer[sce_id], imagBuffer[sce_id], old_wsp[sce_id], loc_harm[sce_id], cor_map_sum[sce_id], vad_flag_dtx[sce_id], enerBuffer[sce_id], fft_buff[sce_id], 0, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*----------------------------------------------------------------* + * Common updates + *----------------------------------------------------------------*/ + + /* update input samples buffer */ + mvr2r( st->input, st->old_input_signal, input_frame ); + } + + wmops_sub_end(); + + return error; +} diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c new file mode 100644 index 0000000000..a3bfac4ba2 --- /dev/null +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -0,0 +1,760 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include "options.h" +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "prot.h" +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define ISM_NUM_PARAM 2 /* number of coded metadata parameters */ + +#define ISM_MAX_AZIMUTH_DIFF_IDX ( ISM_AZIMUTH_NBITS - 1 /*zero*/ - 1 /*sign*/ ) +#define ISM_MAX_ELEVATION_DIFF_IDX ( ISM_ELEVATION_NBITS - 1 /*zero*/ - 1 /*sign*/ ) + +#define ISM_FEC_MAX 10 + +#define INTER_OBJECT_PARAM_CHECK ( ( ISM_FEC_MAX / 2 ) - 2 ) /* note: constant must be less than (ISM_FEC_MAX / number of coded parameters) */ + + +/*-------------------------------------------------------------------------* + * set_ism_metadata() + * + * Set metadata of for one ISM + *-------------------------------------------------------------------------*/ + +/*! r: 0 if success */ +ivas_error set_ism_metadata( + ISM_METADATA_HANDLE hIsmMeta, + float azimuth, + float elevation ) +{ + if ( hIsmMeta == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + hIsmMeta->ism_metadata_flag = 1; + + /* save read metadata parameters to the internal codec structure */ + hIsmMeta->azimuth = azimuth; + hIsmMeta->elevation = elevation; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------------* + * rate_ism_importance() + * + * Rate importance of particular ISm streams + *-------------------------------------------------------------------------*/ + +static void rate_ism_importance( + const int16_t nchan_transport, /* i : number of transported channels */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + SCE_ENC_HANDLE hSCE[], /* i/o: SCE encoder handles */ + int16_t ism_imp[] /* o : ISM importance flags */ +) +{ + int16_t ch, ctype; + + for ( ch = 0; ch < nchan_transport; ch++ ) + { + ctype = hSCE[ch]->hCoreCoder[0]->coder_type_raw; + + if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) + { + ism_imp[ch] = ISM_NO_META; + } + else if ( ctype == INACTIVE || ctype == UNVOICED ) + { + ism_imp[ch] = ISM_LOW_IMP; + } + else if ( ctype == VOICED ) + { + ism_imp[ch] = ISM_MEDIUM_IMP; + } + else /* GENERIC */ + { + ism_imp[ch] = ISM_HIGH_IMP; + } + } + + return; +} + +/*-------------------------------------------------------------------------* + * ivas_ism_metadata_enc() + * + * quantize and encode ISM metadata + *-------------------------------------------------------------------------*/ + +ivas_error ivas_ism_metadata_enc( + const int32_t ism_total_brate, /* i : ISms total bitrate */ + const int16_t nchan_transport, /* i : number of transport channels */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + SCE_ENC_HANDLE hSCE[], /* i/o: SCE encoder handles */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t nb_bits_metadata[], /* o : number of metadata bits */ + const int16_t localVAD[], /* i : VAD flag */ + const int16_t ism_mode, /* i : ISM mode */ + const PARAM_ISM_CONFIG_HANDLE hParamIsm /* i : Param ISM Enc Handle */ +) +{ + int16_t i, ch, nb_bits_start = 0, diff; + int16_t idx_azimuth, idx_azimuth_abs = 0, flag_abs_azimuth[MAX_NUM_OBJECTS], nbits_diff_azimuth; + int16_t idx_elevation, idx_elevation_abs = 0, flag_abs_elevation[MAX_NUM_OBJECTS], nbits_diff_elevation; + float valQ; + ISM_METADATA_HANDLE hIsmMetaData; + int32_t element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; + int16_t ism_metadata_flag_global; + int16_t ism_imp[MAX_NUM_OBJECTS]; + int16_t num_obj, nbands, nblocks; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ism_meta_enc" ); + + if ( ism_mode == ISM_MODE_PARAM ) + { + num_obj = hParamIsm->num_obj; + } + else if ( ism_mode == ISM_MODE_DISC ) + { + num_obj = nchan_transport; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: incorrect ISM mode" ); + } + + if ( num_obj == 1 && ( hSCE[0]->hCoreCoder[0]->core_brate == SID_2k40 || hSCE[0]->hCoreCoder[0]->core_brate == FRAME_NO_DATA ) && ( ism_mode == ISM_MODE_DISC ) ) + { + /* no metadata encoding in CNG */ + wmops_sub_end(); + + return error; + } + + /* initialization */ + ism_metadata_flag_global = 0; + set_s( nb_bits_metadata, 0, nchan_transport ); + set_s( flag_abs_azimuth, 0, num_obj ); + set_s( flag_abs_elevation, 0, num_obj ); + + /*----------------------------------------------------------------* + * Set Metadata presence / importance flag + *----------------------------------------------------------------*/ + + for ( ch = 0; ch < num_obj; ch++ ) + { + if ( ism_mode == ISM_MODE_PARAM ) + { + hIsmMeta[ch]->ism_metadata_flag = 1; + } + else if ( ism_mode == ISM_MODE_DISC ) + { + hIsmMeta[ch]->ism_metadata_flag = localVAD[ch]; + + if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) + { + /* send metadata even in inactive segments when noise is audible and metadata are changing */ + diff = (int16_t) fabsf( hIsmMeta[ch]->azimuth - ism_dequant_meta( hIsmMeta[ch]->last_azimuth_idx, ism_azimuth_borders, 1 << ISM_AZIMUTH_NBITS ) ); + diff = max( diff, (int16_t) fabsf( hIsmMeta[ch]->elevation - ism_dequant_meta( hIsmMeta[ch]->last_elevation_idx, ism_elevation_borders, 1 << ISM_ELEVATION_NBITS ) ) ); + + if ( hSCE[ch]->hCoreCoder[0]->lp_noise > 15 && diff >= 10 ) + { + hIsmMeta[ch]->ism_metadata_flag = 1; + } + } + + if ( hSCE[ch]->hCoreCoder[0]->tcxonly ) + { + /* at highest bitrates (with TCX core only) metadata are sent in every frame */ + hIsmMeta[ch]->ism_metadata_flag = 1; + } + } + } + + /*----------------------------------------------------------------* + * Rate importance of particular ISm streams + *----------------------------------------------------------------*/ + + rate_ism_importance( nchan_transport, hIsmMeta, hSCE, ism_imp ); + + /* relax the importance decision in "stereo" coding for noisy audio */ + if ( ism_mode == ISM_MODE_DISC && num_obj == 2 ) + { + float diff_F; + + if ( hIsmMeta[0]->ism_metadata_flag ^ hIsmMeta[1]->ism_metadata_flag ) + { + for ( ch = 0; ch < num_obj; ch++ ) + { + diff_F = hSCE[ch]->hCoreCoder[0]->lp_speech - hSCE[ch]->hCoreCoder[0]->lp_noise; + + if ( hIsmMeta[ch]->ism_metadata_flag == 0 && diff_F < 25.0f ) + { + hIsmMeta[ch]->ism_metadata_flag = 1; + ism_imp[ch] = ISM_LOW_IMP; + } + } + } + } + + /*----------------------------------------------------------------* + * Write ISm common signalling + *----------------------------------------------------------------*/ + + /* write number of objects - unary coding */ + for ( ch = 1; ch < num_obj; ch++ ) + { + push_indice( hBstr, IND_ISM_NUM_OBJECTS, 1, 1 ); + } + push_indice( hBstr, IND_ISM_NUM_OBJECTS, 0, 1 ); + + /* write ISm metadata flag (one per object) */ + for ( ch = 0; ch < nchan_transport; ch++ ) + { + push_indice( hBstr, IND_ISM_METADATA_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); + } + + for ( ch = 0; ch < num_obj; ch++ ) + { + ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; + } + + if ( ism_mode == ISM_MODE_DISC ) + { + /* write VAD flag */ + for ( ch = 0; ch < nchan_transport; ch++ ) + { + if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) + { + /* this flag distinguishes between coding of inactive frame and active frame w/o. metadata */ + push_indice( hBstr, IND_ISM_VAD_FLAG, localVAD[ch], ISM_METADATA_VAD_FLAG_BITS ); + } + } + } + + if ( ism_metadata_flag_global ) + { + /*----------------------------------------------------------------* + * Metadata quantization and coding, loop over all objects + *----------------------------------------------------------------*/ + int16_t total_bits_metadata = 0; + int16_t bits_metadata_ism = 0; + int16_t nb_bits_objcod_written; + + if ( ism_mode == ISM_MODE_PARAM ) + { + nb_bits_start = hBstr->nb_bits_tot; + } + + for ( ch = 0; ch < num_obj; ch++ ) + { + hIsmMetaData = hIsmMeta[ch]; + if ( ism_mode == ISM_MODE_DISC ) + { + nb_bits_start = hBstr->nb_bits_tot; + } + + if ( hIsmMeta[ch]->ism_metadata_flag ) + { + /*----------------------------------------------------------------* + * Azimuth quantization and encoding + *----------------------------------------------------------------*/ + + /* Azimuth quantization (quantize azimuth to the AZIMUTH_NBITS-bit index */ + if ( ism_mode == ISM_MODE_DISC ) + { + idx_azimuth_abs = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, 1 << ISM_AZIMUTH_NBITS ); + } + else if ( ism_mode == ISM_MODE_PARAM ) + { + idx_azimuth_abs = hParamIsm->azi_index[ch]; + } + idx_azimuth = idx_azimuth_abs; + + nbits_diff_azimuth = 0; + + flag_abs_azimuth[ch] = 0; /* differential coding by default */ + if ( hIsmMetaData->azimuth_diff_cnt == ISM_FEC_MAX /* make differential encoding in ISM_FEC_MAX consecutive frames at maximum (in order to control the decoding in FEC) */ + || hIsmMetaData->last_ism_metadata_flag == 0 /* If last frame had no metadata coded, do not use differential coding */ + ) + { + flag_abs_azimuth[ch] = 1; + } + + /* try differential coding */ + if ( flag_abs_azimuth[ch] == 0 ) + { + diff = idx_azimuth_abs - hIsmMetaData->last_azimuth_idx; + + /* azimuth is on a circle - check for diff coding for -180° -> 180° and vice versa changes */ + if ( abs( diff ) > ( ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) - ISM_MAX_AZIMUTH_DIFF_IDX ) + { + if ( diff > 0 ) + { + diff -= ( 1 << ISM_AZIMUTH_NBITS ) - 1; + } + else + { + diff += ( 1 << ISM_AZIMUTH_NBITS ) - 1; + } + } + + if ( diff == 0 ) + { + idx_azimuth = 0; + nbits_diff_azimuth = 1; + } + else if ( ABSVAL( diff ) < ISM_MAX_AZIMUTH_DIFF_IDX ) /* when diff bits >= abs bits, prefer abs */ + { + idx_azimuth = 1 << 1; + nbits_diff_azimuth = 1; + + if ( diff < 0 ) + { + idx_azimuth += 1; /* negative sign */ + diff *= -1; + } + else + { + idx_azimuth += 0; /* positive sign */ + } + + idx_azimuth = idx_azimuth << diff; + nbits_diff_azimuth++; + + /* unary coding of "diff */ + idx_azimuth += ( ( 1 << diff ) - 1 ); + nbits_diff_azimuth += diff; + + if ( nbits_diff_azimuth < ISM_AZIMUTH_NBITS - 1 ) + { + /* add stop bit - only for codewords shorter than ISM_AZIMUTH_NBITS */ + idx_azimuth = idx_azimuth << 1; + nbits_diff_azimuth++; + } + } + else + { + flag_abs_azimuth[ch] = 1; + } + } + + /* update counter */ + if ( flag_abs_azimuth[ch] == 0 ) + { + hIsmMetaData->azimuth_diff_cnt++; + hIsmMetaData->elevation_diff_cnt = min( hIsmMetaData->elevation_diff_cnt, ISM_FEC_MAX ); + } + else + { + hIsmMetaData->azimuth_diff_cnt = 0; + } + + /* Write azimuth */ + push_indice( hBstr, IND_ISM_AZIMUTH_DIFF_FLAG, flag_abs_azimuth[ch], 1 ); + + if ( flag_abs_azimuth[ch] ) + { + push_indice( hBstr, IND_ISM_AZIMUTH, idx_azimuth, ISM_AZIMUTH_NBITS ); + } + else + { + push_indice( hBstr, IND_ISM_AZIMUTH, idx_azimuth, nbits_diff_azimuth ); + } + + /*----------------------------------------------------------------* + * Elevation quantization and encoding + *----------------------------------------------------------------*/ + + /* Elevation quantization (quantize azimuth to the ELEVATION_NBITS-bit index */ + if ( ism_mode == ISM_MODE_DISC ) + { + idx_elevation_abs = ism_quant_meta( hIsmMetaData->elevation, &valQ, ism_elevation_borders, 1 << ISM_ELEVATION_NBITS ); + } + else /* ISM_MODE_PARAM */ + { + idx_elevation_abs = hParamIsm->ele_index[ch]; + } + idx_elevation = idx_elevation_abs; + + nbits_diff_elevation = 0; + + flag_abs_elevation[ch] = 0; /* differential coding by default */ + if ( hIsmMetaData->elevation_diff_cnt == ISM_FEC_MAX /* make differential encoding in ISM_FEC_MAX consecutive frames at maximum (in order to control the decoding in FEC) */ + || hIsmMetaData->last_ism_metadata_flag == 0 /* If last frame had no metadata coded, do not use differential coding */ + ) + { + flag_abs_elevation[ch] = 1; + } + + /* note: elevation is coded starting from the second frame only (it is meaningless in the init_frame) */ + if ( hSCE[0]->hCoreCoder[0]->ini_frame == 0 ) + { + flag_abs_elevation[ch] = 1; + hIsmMetaData->last_elevation_idx = idx_elevation_abs; + } + + diff = idx_elevation_abs - hIsmMetaData->last_elevation_idx; + + /* avoid absolute coding of elevation if absolute coding was already used for azimuth */ + if ( flag_abs_azimuth[ch] == 1 ) + { + int16_t diff_orig = diff; + + flag_abs_elevation[ch] = 0; + + + if ( diff >= 0 ) + { + diff = min( diff, ISM_MAX_ELEVATION_DIFF_IDX ); + } + else + { + diff = -1 * min( -diff, ISM_MAX_ELEVATION_DIFF_IDX ); + } + + if ( hIsmMetaData->last_ism_metadata_flag == 0 || abs( diff_orig - diff ) > ISM_MAX_ELEVATION_DIFF_IDX ) + { + hIsmMetaData->elevation_diff_cnt = ISM_FEC_MAX - 1; + } + } + + /* try differential coding */ + if ( flag_abs_elevation[ch] == 0 ) + { + if ( diff == 0 ) + { + idx_elevation = 0; + nbits_diff_elevation = 1; + } + else if ( ABSVAL( diff ) <= ISM_MAX_ELEVATION_DIFF_IDX ) + { + idx_elevation = 1 << 1; + nbits_diff_elevation = 1; + + if ( diff < 0 ) + { + idx_elevation += 1; /* negative sign */ + diff *= -1; + } + else + { + idx_elevation += 0; /* positive sign */ + } + + idx_elevation = idx_elevation << diff; + nbits_diff_elevation++; + + /* unary coding of "diff */ + idx_elevation += ( ( 1 << diff ) - 1 ); + nbits_diff_elevation += diff; + + if ( nbits_diff_elevation < ISM_ELEVATION_NBITS ) + { + /* add stop bit */ + idx_elevation = idx_elevation << 1; + nbits_diff_elevation++; + } + } + else + { + flag_abs_elevation[ch] = 1; + } + } + + /* update counter */ + if ( flag_abs_elevation[ch] == 0 ) + { + hIsmMetaData->elevation_diff_cnt++; + hIsmMetaData->elevation_diff_cnt = min( hIsmMetaData->elevation_diff_cnt, ISM_FEC_MAX ); + } + else + { + hIsmMetaData->elevation_diff_cnt = 0; + } + + /* Write elevation */ + if ( flag_abs_azimuth[ch] == 0 ) /* do not write "flag_abs_elevation" if "flag_abs_azimuth == 1" */ + { + push_indice( hBstr, IND_ISM_ELEVATION_DIFF_FLAG, flag_abs_elevation[ch], 1 ); + } + + if ( flag_abs_elevation[ch] ) + { + push_indice( hBstr, IND_ISM_ELEVATION, idx_elevation, ISM_ELEVATION_NBITS ); + } + else + { + push_indice( hBstr, IND_ISM_ELEVATION, idx_elevation, nbits_diff_elevation ); + } + + /*----------------------------------------------------------------* + * Updates + *----------------------------------------------------------------*/ + + hIsmMetaData->last_azimuth_idx = idx_azimuth_abs; + hIsmMetaData->last_elevation_idx = idx_elevation_abs; + + /* save number of metadata bits written */ + if ( ism_mode == ISM_MODE_DISC ) + { + nb_bits_metadata[ch] = hBstr->nb_bits_tot - nb_bits_start; + } + } + } + + /*----------------------------------------------------------------* + * inter-object logic minimizing the use of several absolutely coded + * indexes in the same frame + *----------------------------------------------------------------*/ + + i = 0; + while ( i == 0 || i < num_obj / INTER_OBJECT_PARAM_CHECK ) + { + int16_t num, abs_num, abs_first, abs_next, pos_zero; + int16_t abs_matrice[INTER_OBJECT_PARAM_CHECK * 2]; + + num = min( INTER_OBJECT_PARAM_CHECK, num_obj - i * INTER_OBJECT_PARAM_CHECK ); + i++; + + set_s( abs_matrice, 0, INTER_OBJECT_PARAM_CHECK * ISM_NUM_PARAM ); + + for ( ch = 0; ch < num; ch++ ) + { + if ( flag_abs_azimuth[ch] == 1 ) + { + abs_matrice[ch * ISM_NUM_PARAM] = 1; + } + + if ( flag_abs_elevation[ch] == 1 ) + { + abs_matrice[ch * ISM_NUM_PARAM + 1] = 1; + } + } + abs_num = sum_s( abs_matrice, INTER_OBJECT_PARAM_CHECK * ISM_NUM_PARAM ); + + abs_first = 0; + while ( abs_num > 1 ) + { + /* find first "1" entry */ + while ( abs_matrice[abs_first] == 0 ) + { + abs_first++; + } + + /* find next "1" entry */ + abs_next = abs_first + 1; + while ( abs_matrice[abs_next] == 0 ) + { + abs_next++; + } + + /* find "0" position */ + pos_zero = 0; + while ( abs_matrice[pos_zero] == 1 ) + { + pos_zero++; + } + + ch = abs_next / ISM_NUM_PARAM; + + if ( abs_next % ISM_NUM_PARAM == 0 ) + { + hIsmMeta[ch]->azimuth_diff_cnt = abs_num - 1; + } + + if ( abs_next % ISM_NUM_PARAM == 1 ) + { + hIsmMeta[ch]->elevation_diff_cnt = abs_num - 1; + /*hIsmMeta[ch]->elevation_diff_cnt = min( hIsmMeta[ch]->elevation_diff_cnt, ISM_FEC_MAX );*/ + } + + abs_first++; + abs_num--; + } + } + + if ( ism_mode == ISM_MODE_PARAM ) + { + /* Keep the metdata transmission as is during active parts */ + /* But send the flag with 1 bit */ + push_next_indice( hBstr, hParamIsm->flag_noisy_speech, 1 ); + + /* Loop over multiwave to write the object indices into bistream */ + for ( ch = 0; ch < MAX_PARAM_ISM_WAVE; ch++ ) + { + for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) + { + for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) + { + push_next_indice( hBstr, hParamIsm->obj_indices[nbands][nblocks][ch], PARAM_ISM_OBJ_IND_NBITS ); + } + } + } + + /* Loop over bands to write the power ratio's indices into bistream */ + for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) + { + for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) + { + push_next_indice( hBstr, hParamIsm->power_ratios_idx[nbands][nblocks], PARAM_ISM_POW_RATIO_NBITS ); + } + } + + /* total metadata bits */ + total_bits_metadata = hBstr->nb_bits_tot - nb_bits_start; + + /* bits per ISM*/ + bits_metadata_ism = (int16_t) ( total_bits_metadata / nchan_transport ); + + /* Divide the metadata bits into n_Isms*/ + nb_bits_objcod_written = 0; + for ( ch = 0; ch < nchan_transport; ch++ ) + { + if ( ch == nchan_transport - 1 ) + { + nb_bits_metadata[ch] = total_bits_metadata - nb_bits_objcod_written; + } + else + { + nb_bits_metadata[ch] = bits_metadata_ism; + nb_bits_objcod_written += bits_metadata_ism; + } + } + } + } + + /*----------------------------------------------------------------* + * Configuration and decision about bitrates per channel + *----------------------------------------------------------------*/ + + ivas_ism_config( ism_total_brate, nchan_transport, num_obj, hIsmMeta, localVAD, ism_imp, element_brate, total_brate, nb_bits_metadata ); + + for ( ch = 0; ch < num_obj; ch++ ) + { + hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; + } + + for ( ch = 0; ch < nchan_transport; ch++ ) + { + if ( ism_mode == ISM_MODE_DISC ) + { + hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; + if ( hIsmMeta[ch]->ism_metadata_flag == 0 && localVAD[ch] == 0 && ism_metadata_flag_global ) + { + hSCE[ch]->hCoreCoder[0]->low_rate_mode = 1; + } + } + + hSCE[ch]->element_brate = element_brate[ch]; + hSCE[ch]->hCoreCoder[0]->total_brate = total_brate[ch]; + + /* write metadata only in active frames */ + if ( hSCE[0]->hCoreCoder[0]->core_brate > SID_2k40 ) + { + reset_indices_enc( hSCE[ch]->hMetaData, MAX_BITS_METADATA ); + } + } + + wmops_sub_end(); + + return error; +} + +/*------------------------------------------------------------------------- + * create_ism_metadata_enc() + * + * Create, allocate, initialize and configure IVAS encoder ISM handles + *-------------------------------------------------------------------------*/ + +ivas_error create_ism_metadata_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t n_ISms, /* i : number of objects */ + int32_t element_brate_tmp[] /* o : element bitrate per object */ +) +{ + int16_t ch, nchan_transport; + + if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + { + nchan_transport = 2; + } + else + { + nchan_transport = n_ISms; + } + + st_ivas->nchan_transport = nchan_transport; + st_ivas->nSCE = nchan_transport; + st_ivas->nCPE = 0; + + /* allocate ISm metadata handles */ + for ( ch = 0; ch < n_ISms; ch++ ) + { + if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) count_malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISm MetaData\n" ) ); + } + + st_ivas->hIsmMetaData[ch]->last_azimuth_idx = 0; + st_ivas->hIsmMetaData[ch]->azimuth_diff_cnt = ISM_FEC_MAX; + st_ivas->hIsmMetaData[ch]->last_elevation_idx = 0; + st_ivas->hIsmMetaData[ch]->elevation_diff_cnt = ISM_FEC_MAX - 1; + st_ivas->hIsmMetaData[ch]->last_ism_metadata_flag = 0; + + ivas_ism_reset_metadata( st_ivas->hIsmMetaData[ch] ); + } + + ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, n_ISms, NULL, NULL, NULL, element_brate_tmp, NULL, NULL ); + + return IVAS_ERR_OK; +} diff --git a/lib_enc/ivas_ism_param_enc.c b/lib_enc/ivas_ism_param_enc.c new file mode 100644 index 0000000000..e515f7e204 --- /dev/null +++ b/lib_enc/ivas_ism_param_enc.c @@ -0,0 +1,434 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include "options.h" +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local function definitions + *------------------------------------------------------------------------*/ + + +static void ivas_param_ism_compute_obj_parameters( + float reference_power_obj[MAX_NUM_OBJECTS][PARAM_ISM_MDFT_NO_SLOTS][DIRAC_NO_FB_BANDS_MAX], /* i : Reference power */ + PARAM_ISM_CONFIG_HANDLE hParamIsm /* i/o: Param ISM Enc Handle */ +) +{ + int16_t i, b, m, br, mr, num_obj; + int16_t brange_start, brange_end, mrange_start, mrange_end, time_merge_fac; + float power_ratios_m[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS]; + + num_obj = hParamIsm->num_obj; + assert( num_obj == 3 || num_obj == 4 ); + + for ( b = 0; b < hParamIsm->nbands; b++ ) + { + /* current frequency band borders */ + brange_start = hParamIsm->band_grouping[b]; + brange_end = hParamIsm->band_grouping[b + 1]; + + /* time slots to aggregate for current block */ + time_merge_fac = PARAM_ISM_MDFT_NO_SLOTS / hParamIsm->nblocks[b]; + + for ( m = 0; m < hParamIsm->nblocks[b]; m++ ) + { + int16_t index_1, index_2; + float ref_power_local[MAX_NUM_OBJECTS]; + + /* initialize to 0 so unused entries are not considered later */ + set_f( ref_power_local, 0, MAX_NUM_OBJECTS ); + + /* current block borders */ + mrange_start = m * time_merge_fac; + mrange_end = ( m + 1 ) * time_merge_fac; + + /* for each object, sum up reference power within current T/F tile */ + + for ( i = 0; i < num_obj; i++ ) + { + for ( mr = mrange_start; mr < mrange_end; mr++ ) + { + for ( br = brange_start; br < brange_end; br++ ) + { + ref_power_local[i] += reference_power_obj[i][mr][br]; + } + } + } + + /* find two dominant objects and derive object indices for current T/F tile */ + if ( ref_power_local[0] >= ref_power_local[1] ) + { + index_1 = 0; + index_2 = 1; + } + else + { + index_1 = 1; + index_2 = 0; + } + for ( i = 2; i < num_obj; i++ ) + { + if ( ref_power_local[i] > ref_power_local[index_1] ) + { + index_2 = index_1; + index_1 = i; + } + else if ( ref_power_local[i] > ref_power_local[index_2] ) + { + index_2 = i; + } + } + + /* Copy the quantized indices */ + hParamIsm->obj_indices[b][m][0] = index_1; + hParamIsm->obj_indices[b][m][1] = index_2; + + /* Compute power ratios */ + if ( ( ref_power_local[index_1] + ref_power_local[index_2] ) == 0.f ) + { + power_ratios_m[b][m] = 0.5; + } + else + { + power_ratios_m[b][m] = ref_power_local[index_1] / ( ref_power_local[index_1] + ref_power_local[index_2] ); + } + assert( ( power_ratios_m[b][m] >= 0.5 ) && ( power_ratios_m[b][m] <= 1 ) ); + + /* Quantize power ratios */ + /* Power ratio range [0.5,1] is mapped to [0,1] first, rounding via truncation float->integer */ + hParamIsm->power_ratios_idx[b][m] = (int16_t) ( ( ( power_ratios_m[b][m] - 0.5f ) * 2 ) * ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ) + 0.5f ); + assert( ( hParamIsm->power_ratios_idx[b][m] >= 0 ) && ( hParamIsm->power_ratios_idx[b][m] <= ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ) ) ); +#ifdef DEBUG_MODE_PARAM_ISM + dbgwrite( ref_power_local, sizeof( float ), 3, 1, "res/ParamISM_refPowerLocal.dat" ); + dbgwrite( hParamIsm->obj_indices[b][m], sizeof( int16_t ), 2, 1, "res/ParamISM_objIndices.dat" ); + dbgwrite( &hParamIsm->power_ratios_idx[b][m], sizeof( int16_t ), 1, 1, "res/ParamISM_powerRatioIdx.dat" ); + dbgwrite( &power_ratios_m[b][m], sizeof( float ), 1, 1, "res/ParamISM_powerRatio.dat" ); +#endif + } + } + + return; +} + + +static void ivas_param_ism_enc_quantize_DOA( + ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS], /* i : ISM metadata */ + PARAM_ISM_CONFIG_HANDLE hParamIsm /* i/o: Param ISM encoder handle */ +) +{ + int16_t i, azi_idx, ele_idx, num_obj; + float valQ; + + num_obj = hParamIsm->num_obj; + + /* Loop over objects */ + for ( i = 0; i < num_obj; i++ ) + { + /* Quantize the elevation and obtain quantized elevation value and index */ + ele_idx = ism_quant_meta( hIsmMetaData[i]->elevation, &valQ, ism_elevation_borders, 1 << ISM_ELEVATION_NBITS ); + + /* Obtain the index of quantized azimuth values */ + azi_idx = ism_quant_meta( hIsmMetaData[i]->azimuth, &valQ, ism_azimuth_borders, 1 << ISM_AZIMUTH_NBITS ); + + /*Replace azimuth with quantized values */ + hIsmMetaData[i]->azimuth = valQ; + + /* Copy the quantized indices */ + hParamIsm->azi_index[i] = azi_idx; + hParamIsm->ele_index[i] = ele_idx; + } + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_stereo_dmx() + * + * Downmix input channels to stereo + *-------------------------------------------------------------------------*/ + +void ivas_param_ism_stereo_dmx( + Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ + float data[MAX_NUM_OBJECTS][L_FRAME48k], /* i/o: input signal/stereo dmx */ + const int16_t input_frame /* i : Length of input frame */ +) +{ + int16_t i, j, num_obj; + float alpha, azi_shift, tmp, tmp_1; + float cardioid_left[MAX_NUM_OBJECTS], cardioid_right[MAX_NUM_OBJECTS]; + float stereo_dmx[2][L_FRAME48k]; + ISM_METADATA_HANDLE hIsmMetaData; + + wmops_sub_start( "ivas_param_ism_st_dmx" ); + + /*Initialization*/ + alpha = 0.5; + azi_shift = 0; + num_obj = st_ivas->hDirAC->hParamIsm->num_obj; + + /* Set the stereo dmx to zero */ + set_zero( stereo_dmx[0], L_FRAME48k ); + set_zero( stereo_dmx[1], L_FRAME48k ); + + /* Loop over all objects */ + for ( i = 0; i < num_obj; i++ ) + { + hIsmMetaData = st_ivas->hIsmMetaData[i]; + + /*Compute the Cardioids for the corresponding object direction */ + tmp = hIsmMetaData->azimuth * ( EVS_PI / 180 ); + tmp_1 = ( EVS_PI / 2 ) + azi_shift; + cardioid_left[i] = alpha + ( 1 - alpha ) * cosf( tmp - tmp_1 ); + cardioid_right[i] = alpha + ( 1 - alpha ) * cosf( tmp + tmp_1 ); + + /* Loop over all samples */ + for ( j = 0; j < input_frame; j++ ) + { + tmp = data[i][j]; + stereo_dmx[0][j] += cardioid_left[i] * tmp; /* DMX Left */ + stereo_dmx[1][j] += cardioid_right[i] * tmp; /* DMX Right */ + } + } + + /* Copy the stereo dmx to data variable */ + mvr2r( stereo_dmx[0], data[0], input_frame ); + mvr2r( stereo_dmx[1], data[1], input_frame ); + + wmops_sub_end(); + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_enc_open() + * + * Open Param ISM handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_param_ism_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + int16_t i; + IVAS_FB_CFG *fb_cfg; + DIRAC_ENC_HANDLE hDirAC; + int16_t max_bins; + int32_t input_Fs; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Assign memory to DirAC handle */ + if ( ( hDirAC = (DIRAC_ENC_HANDLE) count_malloc( sizeof( DIRAC_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); + } + + /* Assign memory to Param Object handle */ + if ( ( hDirAC->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) count_malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM\n" ) ); + } + + input_Fs = st_ivas->hEncoderConfig->input_Fs; + + /* Assign the number of objects */ + hDirAC->hParamIsm->num_obj = st_ivas->hEncoderConfig->nchan_inp; + + /* set FB config. */ + if ( ( error = ivas_fb_set_cfg( &fb_cfg, ISM_FORMAT, SBA_MODE_NONE, st_ivas->hEncoderConfig->nchan_inp, 0, 0, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Allocate and initialize FB mixer handle */ + if ( ( error = ivas_FB_mixer_open( &( hDirAC->hFbMixer ), input_Fs, fb_cfg ) ) != IVAS_ERR_OK ) + { + return error; + } + + + ivas_param_ism_config( hDirAC->hParamIsm ); + + + /* Assign memories for Band and Block grouping */ + hDirAC->hParamIsm->nbands = MAX_PARAM_ISM_NBANDS; + + max_bins = (int16_t) ( ( MDFT_FB_BANDS_240 * input_Fs ) / 48000 ); + for ( i = 0; i < ( hDirAC->hParamIsm->nbands + 1 ); i++ ) + { + hDirAC->hParamIsm->band_grouping[i] = CLDFB_TO_MDFT_FAC * Param_ISM_band_grouping[i]; + if ( ( Param_ISM_band_grouping[i] * CLDFB_TO_MDFT_FAC ) > max_bins ) + { + hDirAC->hParamIsm->band_grouping[i] = max_bins; + } + } + + set_s( hDirAC->hParamIsm->noisy_speech_buffer, 0, PARAM_ISM_HYS_BUF_SIZE ); + + st_ivas->hDirAC = hDirAC; + + return error; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_enc_close() + * + * Close Param ISM handle + *-------------------------------------------------------------------------*/ + +void ivas_param_ism_enc_close( + DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ + const int32_t input_Fs /* i : input sampling_rate */ +) +{ + ivas_FB_mixer_close( &hDirAC->hFbMixer, input_Fs ); + + if ( hDirAC->hParamIsm != NULL ) + { + count_free( hDirAC->hParamIsm ); + hDirAC->hParamIsm = NULL; + } + + count_free( hDirAC ); + + return; +} + + +/*-------------------------------------------------------------------------* + * ivas_param_ism_enc() + * + * Parametric ISM encoder + *-------------------------------------------------------------------------*/ + +void ivas_param_ism_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data[MAX_NUM_OBJECTS][L_FRAME48k], /* i : input signal */ + const int16_t input_frame /* i : input frame length per channel */ +) +{ + int16_t i, j, ts, l_ts; + int16_t num_time_slots; + float *pcm_in[MAX_NUM_OBJECTS]; + float fb_RealBuffer[MAX_NUM_OBJECTS][DIRAC_NO_FB_BANDS_MAX]; + float fb_ImagBuffer[MAX_NUM_OBJECTS][DIRAC_NO_FB_BANDS_MAX]; + float *p_fb_RealBuffer[MAX_NUM_OBJECTS]; + float *p_fb_ImagBuffer[MAX_NUM_OBJECTS]; + float reference_power_obj[MAX_NUM_OBJECTS][PARAM_ISM_MDFT_NO_SLOTS][DIRAC_NO_FB_BANDS_MAX]; + DIRAC_ENC_HANDLE hDirAC; + PARAM_ISM_CONFIG_HANDLE hParamIsm; + + hDirAC = st_ivas->hDirAC; + hParamIsm = hDirAC->hParamIsm; + + wmops_sub_start( "ivas_param_ism_enc" ); + + l_ts = input_frame / PARAM_ISM_MDFT_NO_SLOTS; + num_time_slots = PARAM_ISM_MDFT_NO_SLOTS; + + for ( i = 0; i < hParamIsm->num_obj; i++ ) + { + pcm_in[i] = &data[i][0]; + + set_zero( fb_RealBuffer[i], DIRAC_NO_FB_BANDS_MAX ); + set_zero( fb_ImagBuffer[i], DIRAC_NO_FB_BANDS_MAX ); + p_fb_RealBuffer[i] = &fb_RealBuffer[i][0]; + p_fb_ImagBuffer[i] = &fb_ImagBuffer[i][0]; + } + for ( ts = 0; ts < num_time_slots; ts++ ) + { + ivas_fb_mixer_get_windowed_fr( hDirAC->hFbMixer, pcm_in, p_fb_RealBuffer, p_fb_ImagBuffer, l_ts, l_ts ); + ivas_fb_mixer_update_prior_input( hDirAC->hFbMixer, pcm_in, l_ts ); + + for ( i = 0; i < hParamIsm->num_obj; i++ ) + { + pcm_in[i] += l_ts; + for ( j = 0; j < DIRAC_NO_FB_BANDS_MAX; j++ ) + { + reference_power_obj[i][ts][j] = fb_RealBuffer[i][j] * fb_RealBuffer[i][j] + fb_ImagBuffer[i][j] * fb_ImagBuffer[i][j]; + } + } + } + /* Quantize DOAs */ + ivas_param_ism_enc_quantize_DOA( st_ivas->hIsmMetaData, hParamIsm ); + + /* Compute object indices and power ratios */ + ivas_param_ism_compute_obj_parameters( reference_power_obj, hParamIsm ); + + wmops_sub_end(); + return; +} + +/*------------------------------------------------------------------------- + * ivas_ism_enc_config() + * + * - select ISM format mode + * - reconfigure the ISM format encoder + *-------------------------------------------------------------------------*/ + +/*! r : ISM format mode */ +ivas_error ivas_ism_enc_config( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + ivas_error error; + ISM_MODE last_ism_mode; + + error = IVAS_ERR_OK; + + last_ism_mode = st_ivas->ism_mode; + + /* select ISM format mode */ + st_ivas->ism_mode = ivas_ism_mode_select( st_ivas->hEncoderConfig->nchan_inp, st_ivas->hEncoderConfig->ivas_total_brate ); + + /* ISM format switching */ + if ( st_ivas->ism_mode != last_ism_mode ) + { + /*ivas_ism_dec_reconfigure( st_ivas );*/ + return IVAS_ERROR( IVAS_ERR_RECONFIGURE_NOT_SUPPORTED, "Error: ISM format switching not supported yet!!!\n\n" ); + } + + return error; +} diff --git a/lib_enc/ivas_lfe_enc.c b/lib_enc/ivas_lfe_enc.c new file mode 100644 index 0000000000..6ad0e5bef2 --- /dev/null +++ b/lib_enc/ivas_lfe_enc.c @@ -0,0 +1,417 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "math.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_arith_coding() + * + * LFE Arithmetic coding block. Writes encoded data to bitstream. + *-----------------------------------------------------------------------------------------*/ + +static void ivas_lfe_arith_coding( + LFE_ENC_HANDLE hLFE, + BSTR_ENC_HANDLE hBstr, + const int16_t quant_strategy, + int16_t *values ) +{ + Tastat as; + int16_t index, i; + int16_t max_value, offset; + uint16_t num_ele_per_grp; + int16_t num_groups; + index = 0; + num_ele_per_grp = IVAS_LFE_NUM_COEFFS_IN_SUBGRP << 1; + num_groups = ivas_lfe_num_dct_pass_bins_tbl[quant_strategy] >> 1; + + for ( i = 0; i < num_groups; i++ ) + { + max_value = ivas_lfe_num_ele_in_coder_models[quant_strategy][i]; + ari_start_encoding_14bits( &as ); + offset = 4 * i; + + for ( index = 0; index < num_ele_per_grp; index++ ) + { + if ( values[index + offset] > max_value ) + { + values[index + offset] = max_value; + } + ivas_ari_encode_14bits_ext( hBstr, &as, values[index + offset], hLFE->cum_freq_models[quant_strategy][i] ); + } + + ivas_ari_done_encoding_14bits( hBstr, &as ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_enc_quant() + * + * LFE quatization block, calls arithmetic coding block inside + *-----------------------------------------------------------------------------------------*/ + +static void ivas_lfe_enc_quant( + LFE_ENC_HANDLE hLFE, + float *pLfe_dct, + BSTR_ENC_HANDLE hBstr ) +{ + int16_t bits_written; + int16_t next_ind_pos; + uint16_t quant_strategy, write_bit; + int16_t num_quant_strategies; + int16_t shift_bits; + int16_t values[IVAS_LFE_MAX_NUM_DCT_COEFFS << 1]; + float temp_lfe_dct[IVAS_LFE_MAX_NUM_DCT_COEFFS]; + int16_t target_bits; + + target_bits = (int16_t) ( IVAS_LFE_BITRATE_5000 / FRAMES_PER_SEC ); + + write_bit = 0; + num_quant_strategies = IVAS_MAX_NUM_QUANT_STRATS; + shift_bits = IVAS_LFE_SHIFT_BITS; + bits_written = hBstr->nb_bits_tot; + next_ind_pos = hBstr->next_ind; + + + for ( quant_strategy = 0; quant_strategy < num_quant_strategies; quant_strategy++ ) + { + float lfe_abs_sum; + int16_t num_dct_pass_bins; + int16_t max_of_vals, num_groups; + int16_t shift; + uint16_t min_shift, i, j; + uint16_t max_shift; + uint16_t max_value, num_lfe_ele; + uint16_t all_zeros_dct; + + lfe_abs_sum = 0; + num_dct_pass_bins = ivas_lfe_num_dct_pass_bins_tbl[quant_strategy]; + max_of_vals = 0; + num_groups = num_dct_pass_bins >> 1; + shift = 0; + min_shift = ivas_lfe_min_shift_tbl[quant_strategy]; + max_shift = min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE + ( 1 << shift_bits ) - 1; + num_lfe_ele = num_dct_pass_bins * IVAS_LFE_NUM_COEFFS_IN_SUBGRP; + all_zeros_dct = 0; + max_value = ivas_lfe_num_ele_in_coder_models[quant_strategy][0]; + + mvr2r( &pLfe_dct[IVAS_LFE_MAX_NUM_DCT_PASS_BINS], &pLfe_dct[num_dct_pass_bins], num_dct_pass_bins ); + + for ( i = 0; i < num_groups; i++ ) + { + temp_lfe_dct[4 * i] = pLfe_dct[2 * i]; + lfe_abs_sum += fabsf( temp_lfe_dct[4 * i] ); + temp_lfe_dct[4 * i + 1] = pLfe_dct[2 * i + 1]; + lfe_abs_sum += fabsf( temp_lfe_dct[4 * i + 1] ); + + temp_lfe_dct[4 * i + 2] = pLfe_dct[2 * i + num_dct_pass_bins]; + lfe_abs_sum += fabsf( temp_lfe_dct[4 * i + 2] ); + temp_lfe_dct[4 * i + 3] = pLfe_dct[2 * i + num_dct_pass_bins + 1]; + lfe_abs_sum += fabsf( temp_lfe_dct[4 * i + 3] ); + } + + if ( lfe_abs_sum <= IVAS_LFE_ABS_SUM_FLT_THR ) + { + shift = max_shift; + } + else + { + shift = (int16_t) floor( IVAS_LFE_SHIFTS_PER_DOUBLE * log2_f( max_value / lfe_abs_sum ) ); + } + + shift = max( min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE, min( max_shift, shift ) ); + + while ( 1 ) + { + if ( shift == max_shift ) + { + /* write all LFE bits as 0 */ + all_zeros_dct = 1; + break; + } + else + { + max_of_vals = 0; + for ( i = 0; i < num_lfe_ele; i++ ) + { + float temp; + temp = temp_lfe_dct[i] * powf( 2, ( (float) shift / IVAS_LFE_SHIFTS_PER_DOUBLE ) ); + + if ( temp < 0 ) + { + values[i] = (int16_t) ( temp - 0.5f ); + } + else + { + values[i] = (int16_t) ( temp + 0.5f ); + } + + if ( max_of_vals < abs( values[i] ) ) + { + max_of_vals = (int16_t) abs( values[i] ); + } + } + } + if ( max_of_vals <= max_value ) + { + break; + } + shift = shift - 1; + } + + if ( shift < min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE ) + { + continue; + } + + if ( all_zeros_dct != 1 ) + { + push_next_indice( hBstr, all_zeros_dct, 1 ); + push_next_indice( hBstr, quant_strategy, 1 ); + push_next_indice( hBstr, shift - min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE, shift_bits ); + } + else + { + push_next_indice( hBstr, all_zeros_dct, 1 ); + hLFE->lfe_bits = hBstr->nb_bits_tot - bits_written; + return; + } + + for ( i = 0; i < num_lfe_ele; i++ ) + { + if ( values[i] < 0 ) + { + write_bit = 1; + values[i] = values[i] + 1; + } + else + { + write_bit = 0; + } + + values[i] = (int16_t) abs( values[i] ); + + push_next_indice( hBstr, write_bit, 1 ); + } + + ivas_lfe_arith_coding( hLFE, hBstr, quant_strategy, values ); + + if ( ( target_bits + IVAS_LFE_ID_BITS ) >= ( hBstr->nb_bits_tot - bits_written ) ) + { + break; + } + else + { + if ( quant_strategy < ( num_quant_strategies - 1 ) ) + { + /* reset all indices that were already written - TODO: maybe better store them temporarily first and write at the very end? */ + for ( j = hBstr->next_ind - 1; j >= next_ind_pos; j-- ) + { + hBstr->ind_list[j].nb_bits = 0; + } + + hBstr->nb_bits_tot = bits_written; + hBstr->next_ind = next_ind_pos; + } + } + } + + /* bits spent for LFE coding */ + hLFE->lfe_bits = hBstr->nb_bits_tot - bits_written; + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_lfe_enc() + * + * LFE channel encoder + *-----------------------------------------------------------------------------------------*/ + +void ivas_lfe_enc( + LFE_ENC_HANDLE hLFE, /* i/o: LFE encoder handle */ + float data_lfe_ch[], /* i : input LFE signal */ + const int16_t input_frame, /* i : input frame length per channel */ + BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ +) +{ + float t_audio[L_FRAME48k]; + float wtda_audio[L_FRAME48k]; + float lfe_dct[IVAS_LFE_MAX_NUM_DCT_COEFFS]; + int16_t num_dct_pass_bins; + int16_t fade_len, full_len, dct_len, zero_pad_len; + const float *pWindow_coeffs; + + /* Initializations */ + num_dct_pass_bins = IVAS_LFE_MAX_NUM_DCT_PASS_BINS; + fade_len = hLFE->pWindow_state->fade_len; + full_len = hLFE->pWindow_state->full_len; + dct_len = hLFE->pWindow_state->dct_len; + zero_pad_len = hLFE->pWindow_state->zero_pad_len; + pWindow_coeffs = hLFE->pWindow_state->pWindow_coeffs; + + /*Low Pass Filter */ + ivas_filter_process( &hLFE->filter_state, data_lfe_ch, input_frame ); + + /* Windowing */ + ivas_dct_windowing( fade_len, full_len, dct_len, zero_pad_len, pWindow_coeffs, input_frame, wtda_audio, hLFE->old_wtda_audio, data_lfe_ch ); + + ivas_mdct( wtda_audio, t_audio, dct_len ); + + mvr2r( t_audio, lfe_dct, num_dct_pass_bins ); + + /* windowing */ + ivas_dct_windowing( fade_len, full_len, dct_len, zero_pad_len, pWindow_coeffs, input_frame, wtda_audio, hLFE->old_wtda_audio, data_lfe_ch + dct_len ); + + /* mdct */ + ivas_mdct( wtda_audio, t_audio, dct_len ); + + mvr2r( t_audio, lfe_dct + num_dct_pass_bins, num_dct_pass_bins ); + + ivas_lfe_enc_quant( hLFE, lfe_dct, hBstr ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_create_lfe_enc() + * + * Create, allocate and initialize IVAS encoder LFE handle + *-------------------------------------------------------------------------*/ + +ivas_error ivas_create_lfe_enc( + LFE_ENC_HANDLE *hLFE_out, /* o : IVAS LFE encoder structure */ + const int32_t input_Fs /* i : input sampling rate */ +) +{ + int16_t input_frame; + LFE_ENC_HANDLE hLFE; + const float *filt_coeff; + + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + + /*-----------------------------------------------------------------* + * Allocate LFE handle + *-----------------------------------------------------------------*/ + + if ( ( hLFE = (LFE_ENC_HANDLE) count_malloc( sizeof( LFE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE\n" ) ); + } + + /* initializations */ + hLFE->lfe_bits = 0; + + hLFE->pWindow_state = NULL; + hLFE->hBstr = NULL; + + /*-----------------------------------------------------------------* + * Input memory buffer: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( ( hLFE->old_wtda_audio = (float *) count_malloc( sizeof( float ) * (int16_t) ( input_Fs * IVAS_LFE_FADE_LEN_SEC_FLOAT ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE memory\n" ) ); + } + + set_zero( hLFE->old_wtda_audio, (int16_t) ( input_Fs * IVAS_LFE_FADE_LEN_SEC_FLOAT ) ); + + /*-----------------------------------------------------------------* + * LFE Window: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) count_malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE window structure\n" ) ); + } + + lfe_window_init( hLFE->pWindow_state, input_Fs, input_frame ); + + ivas_lfe_lpf_select_filt_coeff( input_Fs, IVAS_FILTER_ORDER_4, &filt_coeff ); + ivas_filters_init( &hLFE->filter_state, filt_coeff, IVAS_FILTER_ORDER_4 ); + + /* Initialization for entropy coding */ + hLFE->cum_freq_models[0][0] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg1; + hLFE->cum_freq_models[0][1] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg2; + hLFE->cum_freq_models[0][2] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg3; + hLFE->cum_freq_models[0][3] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg4; + hLFE->cum_freq_models[1][0] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg1; + hLFE->cum_freq_models[1][1] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg2; + hLFE->cum_freq_models[1][2] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg3; + hLFE->cum_freq_models[1][3] = &ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg4; + + *hLFE_out = hLFE; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_lfe_enc_close() + * + * Destroy IVAS cncoder LFE handle + *-------------------------------------------------------------------------*/ + +void ivas_lfe_enc_close( + LFE_ENC_HANDLE hLFE /* i/o: LFE encoder handle */ +) +{ + if ( hLFE->old_wtda_audio != NULL ) + { + count_free( hLFE->old_wtda_audio ); + hLFE->old_wtda_audio = NULL; + } + if ( hLFE->pWindow_state ) + { + count_free( hLFE->pWindow_state ); + hLFE->pWindow_state = NULL; + } + + count_free( hLFE ); + + return; +} diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c new file mode 100644 index 0000000000..cda908a49b --- /dev/null +++ b/lib_enc/ivas_masa_enc.c @@ -0,0 +1,1722 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_enc.h" +#include "wmops.h" +#include "prot.h" + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void combine_freqbands_and_subframes( MASA_ENCODER_HANDLE hMasa ); + +static void combine_directions( MASA_ENCODER_HANDLE hMasa ); + +static void find_n_largest( const float *input, int16_t *largestIndices, const int16_t numElements, const int16_t numLargest ); + +static void move_metadata_to_qmetadata( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ); + +static void detect_metadata_composition( MASA_ENCODER_HANDLE hMasa, uint8_t *joinedSubframes, uint8_t *coherencePresent, uint8_t *isTwoDir ); + +static void compensate_energy_ratios( MASA_ENCODER_HANDLE hMasa ); + +static int16_t encode_lfe_to_total_energy_ratio( MASA_ENCODER_HANDLE hMasa, BSTR_ENC_HANDLE hMetaData, const int32_t ivas_total_brate ); + +static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format ); + + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define LOWBITRATE_ONSET_ALPHA 0.2f /* Onset values are for processing in frames */ +#define LOWBITRATE_ONSET_BETA 0.92f +#define LOWBITRATE_ONSET_GAIN 1.4f +#define LOWBITRATE_NUM_BANDS 5 + + +/*-----------------------------------------------------------------------* + * ivas_masa_enc_open() + * + * open and initialize MASA encoder + *-----------------------------------------------------------------------*/ + +ivas_error ivas_masa_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +) +{ + int16_t i; + MASA_ENCODER_HANDLE hMasa; + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( hMasa = (MASA_ENCODER_HANDLE) count_malloc( sizeof( MASA_ENCODER ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA encoder\n" ) ); + } + + hEncoderConfig = st_ivas->hEncoderConfig; + generate_gridEq( &( hMasa->data.Sph_Grid16 ) ); + + if ( hEncoderConfig->ivas_format == MASA_FORMAT ) + { + hMasa->data.num_Cldfb_instances = st_ivas->nchan_transport; + } + else + { + hMasa->data.num_Cldfb_instances = 0; + } + + for ( i = 0; i < hMasa->data.num_Cldfb_instances; i++ ) + { + if ( ( error = openCldfb( &( hMasa->data.cldfbAnaEnc[i] ), CLDFB_ANALYSIS, hEncoderConfig->input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + ivas_masa_set_elements( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, + st_ivas->hQMetaData, &hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE ); + + mvs2s( DirAC_block_grouping, hMasa->config.block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); + mvs2s( MASA_band_grouping_24, hMasa->config.band_grouping, MASA_FREQUENCY_BANDS + 1 ); + + if ( hEncoderConfig->ivas_format == MASA_FORMAT ) + { + for ( i = 0; i < st_ivas->nchan_transport; i++ ) + { + hMasa->data.delay_buffer[i] = (float *) count_malloc( MASA_ENC_DELAY_SLOTS * CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); + set_f( hMasa->data.delay_buffer[i], 0.0f, MASA_ENC_DELAY_SLOTS * CLDFB_NO_CHANNELS_MAX ); + } + } + + hMasa->data.onset_detector_1 = 0.0f; + hMasa->data.onset_detector_2 = 0.0f; + + set_zero( hMasa->data.lfeToTotalEnergyRatio, MAX_PARAM_SPATIAL_SUBFRAMES ); + hMasa->data.prevq_lfeToTotalEnergyRatio = 0.0f; + hMasa->data.prevq_lfeIndex = 0; + st_ivas->hMasa = hMasa; + + return error; +} + + +/*-----------------------------------------------------------------------* + * ivas_masa_enc_close() + * + * close MASA encoder + *-----------------------------------------------------------------------*/ + +void ivas_masa_enc_close( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA metadata structure */ + const int16_t nchan_transport, /* i : Number of transport channels */ + const IVAS_FORMAT ivas_format /* i : IVAS format */ +) +{ + int16_t i; + + for ( i = 0; i < hMasa->data.num_Cldfb_instances; i++ ) + { + deleteCldfb( &( hMasa->data.cldfbAnaEnc[i] ) ); + } + + if ( ivas_format == MASA_FORMAT ) + { + for ( i = 0; i < nchan_transport; i++ ) + { + count_free( hMasa->data.delay_buffer[i] ); + hMasa->data.delay_buffer[i] = NULL; + } + } + + count_free( hMasa ); + + return; +} + + +/*-----------------------------------------------------------------------* + * ivas_masa_encode() + * + * main MASA encoder function + *-----------------------------------------------------------------------*/ + +void ivas_masa_encode( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + int16_t *nb_bits_metadata, /* o : number of metadata bits written */ + const int16_t nchan_transport, /* i : number of MASA input/transport channels */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t Opt_DTX_ON, /* i : DTX on flag */ + const int16_t element_mode /* i : element mode */ +) +{ + MASA_DIRECTIONAL_SPATIAL_META *h_orig_metadata; + int16_t i, j; + int16_t masa_sid_descriptor; + + masa_sid_descriptor = -1; + h_orig_metadata = NULL; + + if ( ivas_format == MASA_FORMAT ) + { + /* Create the MASA SID descriptor for the metadata and CPE mode, in order to have the SID frame self-contained. */ + if ( Opt_DTX_ON && hQMetaData != NULL ) + { + if ( nchan_transport == 2 ) /* this is MASA format in CPE only */ + { + masa_sid_descriptor = 0; /* for IVAS_CPE_DFT */ + if ( element_mode == IVAS_CPE_MDCT ) + { + masa_sid_descriptor = 1; + } + } + } + + /* Validate and compensate ratios as necessary */ + compensate_energy_ratios( hMasa ); + + if ( Opt_DTX_ON ) + { + h_orig_metadata = (MASA_DIRECTIONAL_SPATIAL_META *) count_malloc( MASA_MAXIMUM_DIRECTIONS * sizeof( MASA_DIRECTIONAL_SPATIAL_META ) ); + for ( i = 0; i < MASA_MAXIMUM_DIRECTIONS; i++ ) + { + for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + mvr2r( hMasa->masaMetadata.directional_meta[i].azimuth[j], h_orig_metadata[i].azimuth[j], MASA_FREQUENCY_BANDS ); + mvr2r( hMasa->masaMetadata.directional_meta[i].elevation[j], h_orig_metadata[i].elevation[j], MASA_FREQUENCY_BANDS ); + mvr2r( hMasa->masaMetadata.directional_meta[i].energy_ratio[j], h_orig_metadata[i].energy_ratio[j], MASA_FREQUENCY_BANDS ); + } + } + } + + /* Combine frequency bands and sub-frames */ + combine_freqbands_and_subframes( hMasa ); + } + + if ( hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands < hMasa->config.numCodingBands && ivas_format == MASA_FORMAT ) + { + /* Combine directions */ + combine_directions( hMasa ); + + /* If we joined all bands, then metadata is now one directional. */ + if ( hMasa->config.numTwoDirBands == 0 ) + { + hMasa->config.numberOfDirections = 1; + hMasa->masaMetadata.descriptive_meta.numberOfDirections = 0; + hQMetaData->no_directions = 1; + } + } + + /* Reset qmetadata bit budget */ + hQMetaData->metadata_max_bits = hMasa->config.max_metadata_bits; + + if ( ivas_format == MASA_FORMAT ) + { + /* write the number of MASA transport channels */ + push_next_indice( hMetaData, nchan_transport - 1, MASA_TRANSP_BITS ); + hQMetaData->metadata_max_bits -= MASA_TRANSP_BITS; + + /* write placeholder data for descriptive metadata */ + push_next_indice( hMetaData, 0, MASA_HEADER_BITS ); + hQMetaData->metadata_max_bits -= MASA_HEADER_BITS; + + /* write number of directions */ + push_next_indice( hMetaData, hQMetaData->no_directions - 1, 1 ); + hQMetaData->metadata_max_bits -= 1; + + /* write subframe mode */ + push_next_indice( hMetaData, hQMetaData->q_direction[0].cfg.nblocks == 1 ? 1 : 0, MASA_SUBFRAME_BITS ); + hQMetaData->metadata_max_bits -= MASA_SUBFRAME_BITS; + } + + if ( ivas_format == MC_FORMAT ) + { + int16_t lfeBitsWritten; + lfeBitsWritten = encode_lfe_to_total_energy_ratio( hMasa, hMetaData, ivas_total_brate ); + hQMetaData->metadata_max_bits -= lfeBitsWritten; + } + + /* Move data from encoder to qmetadata */ + if ( ivas_format == MASA_FORMAT ) + { + move_metadata_to_qmetadata( hMasa, hQMetaData ); + } + + if ( hMasa->config.max_metadata_bits < MINIMUM_BIT_BUDGET_NORMAL_META && !hMasa->config.joinedSubframes ) + { + reduce_metadata_further( hMasa, hQMetaData, ivas_format ); + + /* Write low bitrate mode. 1 signals that we have merged through time, 0 signals merge through frequency. */ + push_next_indice( hMetaData, hQMetaData->q_direction[0].cfg.nblocks == 1 ? 1 : 0, MASA_LOWBITRATE_MODE_BITS ); + hQMetaData->metadata_max_bits -= MASA_LOWBITRATE_MODE_BITS; + } + + /* Encode metadata */ + ivas_qmetadata_enc_encode( hMetaData, hQMetaData ); + + *nb_bits_metadata = hMetaData->nb_bits_tot; + + if ( ivas_format == MASA_FORMAT && Opt_DTX_ON ) + { + /* save old values */ + uint8_t numCodingBands = hMasa->config.numCodingBands; + uint8_t numTwoDirBands = hMasa->config.numTwoDirBands; + int16_t nbands = hQMetaData->q_direction[0].cfg.nbands; + uint8_t numberOfDirections = hMasa->config.numberOfDirections; + uint8_t numberOfDirectionsMeta = hMasa->masaMetadata.descriptive_meta.numberOfDirections; + uint16_t numberOfDirectionsQMetaData = hQMetaData->no_directions; + + if ( !( hMasa->config.numberOfDirections == 1 && hQMetaData->q_direction->cfg.nbands == 5 ) ) + { + for ( i = 0; i < MASA_MAXIMUM_DIRECTIONS; i++ ) + { + for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + mvr2r( h_orig_metadata[i].azimuth[j], hMasa->masaMetadata.directional_meta[i].azimuth[j], MASA_FREQUENCY_BANDS ); + mvr2r( h_orig_metadata[i].elevation[j], hMasa->masaMetadata.directional_meta[i].elevation[j], MASA_FREQUENCY_BANDS ); + mvr2r( h_orig_metadata[i].energy_ratio[j], hMasa->masaMetadata.directional_meta[i].energy_ratio[j], MASA_FREQUENCY_BANDS ); + } + } + + /* Force to have 5 bands and 1 direction */ + hMasa->config.numCodingBands = 5; + hMasa->config.numTwoDirBands = 0; + combine_freqbands_and_subframes( hMasa ); + hQMetaData->q_direction[0].cfg.nbands = 5; + + if ( hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands < hMasa->config.numCodingBands ) + { + /* Combine directions */ + combine_directions( hMasa ); + + /* If we joined all bands, then metadata is now one directional. */ + if ( hMasa->config.numTwoDirBands == 0 ) + { + hMasa->config.numberOfDirections = 1; + hMasa->masaMetadata.descriptive_meta.numberOfDirections = 0; + hQMetaData->no_directions = 1; + } + } + + move_metadata_to_qmetadata( hMasa, hQMetaData ); + + for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + { + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[0] = masa_sq( 1.0f - hQMetaData->q_direction[0].band_data[j].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + } + } + + count_free( h_orig_metadata ); + + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, masa_sid_descriptor, + ivas_format, + SBA_MODE_NONE ); + + /* restore old values */ + hMasa->config.numCodingBands = numCodingBands; + hMasa->config.numTwoDirBands = numTwoDirBands; + hQMetaData->q_direction[0].cfg.nbands = nbands; + hMasa->config.numberOfDirections = numberOfDirections; + hMasa->masaMetadata.descriptive_meta.numberOfDirections = numberOfDirectionsMeta; + hQMetaData->no_directions = numberOfDirectionsQMetaData; + } + + return; +} + + +/*-----------------------------------------------------------------------* + * ivas_masa_estimate_energy() + * + * + *-----------------------------------------------------------------------*/ + +void ivas_masa_estimate_energy( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ + float data_f[][L_FRAME48k], /* i : Input audio channels */ + const int16_t input_frame, /* i : frame length */ + const int16_t nchan_transport /* i : number of MASA input/transport channels */ +) +{ + float Input_RealBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + float Input_ImagBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + int16_t block_m_idx, band_m_idx; + int16_t mrange[2], brange[2]; + int16_t i, j, ts, l_ts, maxBin; + + maxBin = (int16_t) ( (float) CLDFB_NO_CHANNELS_MAX * (float) input_frame / L_FRAME48k + 0.5f ); + + l_ts = input_frame / CLDFB_NO_COL_MAX; + + for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) + { + mrange[0] = hMasa->config.block_grouping[block_m_idx]; + mrange[1] = hMasa->config.block_grouping[block_m_idx + 1]; + + set_zero( hMasa->data.energy[block_m_idx], MASA_FREQUENCY_BANDS ); + + for ( ts = mrange[0]; ts < mrange[1]; ts++ ) + { + if ( ts < MASA_ENC_DELAY_SLOTS ) + { + for ( i = 0; i < nchan_transport; i++ ) + { + cldfbAnalysis_ts( &( hMasa->data.delay_buffer[i][l_ts * ts] ), Input_RealBuffer[i], Input_ImagBuffer[i], l_ts, hMasa->data.cldfbAnaEnc[i] ); + } + } + else + { + for ( i = 0; i < nchan_transport; i++ ) + { + cldfbAnalysis_ts( &( data_f[i][l_ts * ( ts - MASA_ENC_DELAY_SLOTS )] ), Input_RealBuffer[i], Input_ImagBuffer[i], l_ts, hMasa->data.cldfbAnaEnc[i] ); + } + } + + for ( band_m_idx = 0; band_m_idx < MASA_FREQUENCY_BANDS; band_m_idx++ ) + { + brange[0] = hMasa->config.band_grouping[band_m_idx]; + brange[1] = hMasa->config.band_grouping[band_m_idx + 1]; + + for ( i = 0; i < nchan_transport; i++ ) + { + if ( brange[0] > maxBin ) + { + hMasa->data.energy[block_m_idx][band_m_idx] = 0; + continue; + } + else if ( brange[1] >= maxBin ) + { + brange[1] = maxBin; + } + + for ( j = brange[0]; j < brange[1]; j++ ) + { + hMasa->data.energy[block_m_idx][band_m_idx] += Input_RealBuffer[i][j] * Input_RealBuffer[i][j] + Input_ImagBuffer[i][j] * Input_ImagBuffer[i][j]; + } + } + } + } + } + + for ( i = 0; i < nchan_transport; i++ ) + { + mvr2r( &data_f[i][input_frame - MASA_ENC_DELAY_SLOTS * maxBin], &( hMasa->data.delay_buffer[i][0] ), MASA_ENC_DELAY_SLOTS * maxBin ); + } + + return; +} + + +/*-----------------------------------------------------------------------* + * ivas_masa_enc_config() + * + * Frame-by-frame configuration of MASA encoder + *-----------------------------------------------------------------------*/ + +ivas_error ivas_masa_enc_config( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + int16_t i; + MASA_ENCODER_HANDLE hMasa; + IVAS_QMETADATA_HANDLE hQMetaData; + IVAS_FORMAT ivas_format; + uint8_t joinedSubframes; + uint8_t coherencePresent; + uint8_t isActualTwoDir; /* Flag to tell that when there are two directions present in metadata, they both contain meaningful information. */ + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + hMasa = st_ivas->hMasa; + hQMetaData = st_ivas->hQMetaData; + ivas_format = st_ivas->hEncoderConfig->ivas_format; + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + + ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, + hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE ); + hQMetaData->is_masa_type_format = 1; + if ( ivas_format == MASA_FORMAT ) + { + /* Inspect metadata for parameter changes that affect coding. */ + detect_metadata_composition( hMasa, &joinedSubframes, &coherencePresent, &isActualTwoDir ); + hMasa->config.joinedSubframes = joinedSubframes; + hMasa->config.coherencePresent = coherencePresent; + hMasa->config.numberOfDirections = ( hMasa->masaMetadata.descriptive_meta.numberOfDirections + 1 ) == 2 && isActualTwoDir ? 2 : 1; + } + else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + { + /* For mcMASA, these are set only once as this function is called only once. */ + hMasa->config.joinedSubframes = 0; + hMasa->config.numberOfDirections = 1; + } + + ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, ivas_total_brate, st_ivas->nchan_transport, ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); + + /* Setup importance weights for two-direction band selection. */ + if ( hMasa->config.numberOfDirections == 2 ) + { + set_f( hMasa->data.importanceWeight, 1.0f, hMasa->config.numCodingBands ); + + if ( hMasa->config.numCodingBands == 5 ) + { + hMasa->data.importanceWeight[4] = 0.7f; + } + else if ( hMasa->config.numCodingBands == 8 ) + { + hMasa->data.importanceWeight[7] = 0.7f; + } + else if ( hMasa->config.numCodingBands == 10 ) + { + hMasa->data.importanceWeight[8] = 0.7f; + hMasa->data.importanceWeight[9] = 0.1f; + } + else if ( hMasa->config.numCodingBands == 12 ) + { + hMasa->data.importanceWeight[10] = 0.7f; + hMasa->data.importanceWeight[11] = 0.1f; + } + else if ( hMasa->config.numCodingBands == 18 ) + { + hMasa->data.importanceWeight[14] = 0.8f; + hMasa->data.importanceWeight[15] = 0.5f; + hMasa->data.importanceWeight[16] = 0.2f; + hMasa->data.importanceWeight[17] = 0.0f; + } + else if ( hMasa->config.numCodingBands == 24 ) + { + hMasa->data.importanceWeight[20] = 0.8f; + hMasa->data.importanceWeight[21] = 0.5f; + hMasa->data.importanceWeight[22] = 0.2f; + hMasa->data.importanceWeight[23] = 0.0f; + } + + if ( hMasa->config.numTwoDirBands == hMasa->config.numCodingBands ) + { + set_c( (int8_t *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); + } + } + else + { + set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands ); + } + + /* Set qmeta to correct values */ + if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands != 0 ? 2 : 1, hMasa->config.useCoherence ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( i = 0; i < hQMetaData->no_directions; i++ ) + { + hQMetaData->q_direction[i].cfg.nbands = hMasa->config.numCodingBands; + hQMetaData->q_direction[i].cfg.nblocks = hMasa->config.joinedSubframes == TRUE ? 1 : 4; + + if ( ivas_format == MC_FORMAT ) + { + hQMetaData->q_direction[i].cfg.mc_ls_setup = st_ivas->hEncoderConfig->mc_input_setup; + } + else + { + /* Just to be sure that this default value is maintained */ + hQMetaData->q_direction[i].cfg.mc_ls_setup = MC_LS_SETUP_INVALID; + } + } + + hQMetaData->all_coherence_zero = !hMasa->config.coherencePresent; + + ivas_set_qmetadata_maxbit_req( hQMetaData, ivas_format ); + + masa_sample_rate_band_correction( &( hMasa->config ), hMasa->data.band_mapping, hQMetaData, st_ivas->hEncoderConfig->input_Fs ); + + /* Transmit stereo signals using a mono downmix at lowest bitrates */ + if ( ivas_format == MASA_FORMAT && st_ivas->nCPE == 1 && st_ivas->hCPE[0]->hStereoDft != NULL && st_ivas->hCPE[0]->hStereoDft->hConfig != NULL ) + { + st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = ivas_total_brate < MASA_STEREO_MIN_BITRATE ? 1 : 0; + } + + return error; +} + + +/*-----------------------------------------------------------------------* + * ivas_masa_surrcoh_signicant() + * + * Determine if surrounding coherence is significant in this frame and should be encoded + *-----------------------------------------------------------------------*/ + +uint8_t ivas_masa_surrcoh_signicant( + float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Surround coherence */ + float diffuse_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Diffuse to total ratio */ + const int16_t nSubFrames, /* i : Number of sub frames */ + const int16_t nBands /* i : Number of frequency bands */ +) +{ + float significanceMeasure1, significanceMeasure2, significanceMeasure; + float surrCohToTotal, surrCohToTotalSum, surrCohToTotalTimesDiffSum, diffSum; + int16_t sf, band; + float surrCohSignificanceCoef = 0.4f; + float threshold = 0.1f; + + for ( sf = 0; sf < nSubFrames; sf++ ) + { + surrCohToTotalSum = 0.0f; + surrCohToTotalTimesDiffSum = 0.0f; + diffSum = 0.0f; + for ( band = 0; band < nBands; band++ ) + { + surrCohToTotal = diffuse_to_total_ratio[sf][band] * surroundingCoherence[sf][band]; + surrCohToTotalSum += surrCohToTotal; + surrCohToTotalTimesDiffSum += diffuse_to_total_ratio[sf][band] * surrCohToTotal; + diffSum += diffuse_to_total_ratio[sf][band]; + } + significanceMeasure1 = surrCohToTotalSum / (float) nBands; + significanceMeasure2 = surrCohSignificanceCoef * surrCohToTotalTimesDiffSum / ( diffSum + EPSILON ); + significanceMeasure = max( significanceMeasure1, significanceMeasure2 ); + + if ( significanceMeasure > threshold ) + { + return 1; /* Surrounding coherence was significant in at least one subframe */ + } + } + + return 0; /* Surrounding coherence was not significant in any subframe */ +} + + +/*-----------------------------------------------------------------------* + * Local functions + *-----------------------------------------------------------------------*/ + +static void combine_freqbands_and_subframes( + MASA_ENCODER_HANDLE hMasa ) +{ + int16_t i, j, k, m; + float aziRad, eleRad; + float x[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float y[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float z[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float vecLen; + float xSum, ySum, zSum; + float energySum; + float spreadCohSum; + float surrCohSum; + float energyRatioSum; + float surrCohTemp; + float energyRatioTemp; + float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + int16_t brange[2]; + uint8_t numCodingBands; + uint8_t numSf; + uint8_t numDirections; + MASA_METADATA_HANDLE hMeta; + uint8_t mergeRatiosOverSubframes; + uint8_t computeCoherence; + + numCodingBands = hMasa->config.numCodingBands; + numDirections = hMasa->config.numberOfDirections; + numSf = hMasa->config.joinedSubframes == TRUE ? 1 : MAX_PARAM_SPATIAL_SUBFRAMES; + hMeta = &( hMasa->masaMetadata ); + + mergeRatiosOverSubframes = hMasa->config.mergeRatiosOverSubframes; + computeCoherence = hMasa->config.useCoherence && hMasa->config.coherencePresent; + + /* If metadata subframes are joined then we need all energy to be in the first subframe for combining. + * This optimizes following computations a bit. + * Note: If energy is used elsewhere, then this can cause problems and local energy should be used. */ + if ( numSf == 1 ) + { + for ( j = 1; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + for ( k = 0; k < MASA_FREQUENCY_BANDS; k++ ) + { + hMasa->data.energy[0][k] += hMasa->data.energy[j][k]; + } + } + } + + if ( numCodingBands < MASA_FREQUENCY_BANDS ) + { + for ( i = 0; i < numDirections; i++ ) + { + for ( j = 0; j < numSf; j++ ) + { + for ( k = 0; k < MASA_FREQUENCY_BANDS; k++ ) + { + aziRad = hMeta->directional_meta[i].azimuth[j][k] / 180.0f * EVS_PI; + eleRad = hMeta->directional_meta[i].elevation[j][k] / 180.0f * EVS_PI; + vecLen = hMeta->directional_meta[i].energy_ratio[j][k] * hMasa->data.energy[j][k]; + + x[i][j][k] = cosf( aziRad ) * cosf( eleRad ) * vecLen; + y[i][j][k] = sinf( aziRad ) * cosf( eleRad ) * vecLen; + z[i][j][k] = sinf( eleRad ) * vecLen; + } + } + } + + for ( i = 0; i < numDirections; i++ ) + { + for ( j = 0; j < numSf; j++ ) + { + for ( k = 0; k < numCodingBands; k++ ) + { + brange[0] = hMasa->data.band_mapping[k]; + brange[1] = hMasa->data.band_mapping[k + 1]; + + xSum = 0.0f; + ySum = 0.0f; + zSum = 0.0f; + energySum = 0.0f; + spreadCohSum = 0.0f; + + for ( m = brange[0]; m < brange[1]; m++ ) + { + xSum += x[i][j][m]; + ySum += y[i][j][m]; + zSum += z[i][j][m]; + energySum += hMasa->data.energy[j][m]; + } + + aziRad = atan2f( ySum, xSum ); + eleRad = atan2f( zSum, sqrtf( xSum * xSum + ySum * ySum ) ); + + hMeta->directional_meta[i].azimuth[j][k] = aziRad / EVS_PI * 180.0f; + hMeta->directional_meta[i].elevation[j][k] = eleRad / EVS_PI * 180.0f; + + vecLen = sqrtf( xSum * xSum + ySum * ySum + zSum * zSum ); + hMeta->directional_meta[i].energy_ratio[j][k] = vecLen / ( energySum + EPSILON ); + + if ( computeCoherence ) + { + for ( m = brange[0]; m < brange[1]; m++ ) + { + spreadCohSum += hMeta->directional_meta[i].spread_coherence[j][m] * hMasa->data.energy[j][m]; + } + hMeta->directional_meta[i].spread_coherence[j][k] = spreadCohSum / ( energySum + EPSILON ); + + if ( i == 0 ) + { + surrCohSum = 0.0f; + for ( m = brange[0]; m < brange[1]; m++ ) + { + surrCohSum += hMeta->common_meta.surround_coherence[j][m] * hMasa->data.energy[j][m]; + } + hMeta->common_meta.surround_coherence[j][k] = surrCohSum / ( energySum + EPSILON ); + } + } + + if ( i == 0 ) + { + energy[j][k] = energySum; + } + } + } + } + } + else if ( mergeRatiosOverSubframes ) + { + for ( j = 0; j < numSf; j++ ) + { + for ( k = 0; k < numCodingBands; k++ ) + { + energy[j][k] = hMasa->data.energy[j][k]; + } + } + } + + if ( mergeRatiosOverSubframes ) + { + for ( k = 0; k < numCodingBands; k++ ) + { + energySum = 0.0f; + for ( j = 0; j < numSf; j++ ) + { + energySum += energy[j][k]; + } + + if ( computeCoherence ) + { + surrCohSum = 0.0f; + for ( j = 0; j < numSf; j++ ) + { + surrCohSum += energy[j][k] * hMeta->common_meta.surround_coherence[j][k]; + } + surrCohTemp = surrCohSum / ( energySum + EPSILON ); + + for ( j = 0; j < numSf; j++ ) + { + hMeta->common_meta.surround_coherence[j][k] = surrCohTemp; + } + } + + for ( i = 0; i < numDirections; i++ ) + { + energyRatioSum = 0.0f; + for ( j = 0; j < numSf; j++ ) + { + energyRatioSum += energy[j][k] * hMeta->directional_meta[i].energy_ratio[j][k]; + } + energyRatioTemp = energyRatioSum / ( energySum + EPSILON ); + + for ( j = 0; j < numSf; j++ ) + { + hMeta->directional_meta[i].energy_ratio[j][k] = energyRatioTemp; + } + } + } + } + + return; +} + + +static void combine_directions( + MASA_ENCODER_HANDLE hMasa ) +{ + int16_t i, j, k; + uint8_t numCodingBands; + uint8_t numSf; + uint8_t numDirections; + uint8_t computeCoherence; + MASA_METADATA_HANDLE hMeta; + + float aziRad; + float eleRad; + float x[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float y[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float z[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float vecLen; + float xSum[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float ySum[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float zSum[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float sumVecLen[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float tempImportance; + float importance[MASA_FREQUENCY_BANDS]; + int16_t indicesOfLargest[MASA_FREQUENCY_BANDS]; + + float ambience1dir; + float ambience2dir; + float ambienceIncrease; + float ratioSum; + float origSurrCohEne; + float newSurrCohEne; + + numCodingBands = hMasa->config.numCodingBands; + numDirections = hMasa->config.numberOfDirections; + numSf = hMasa->config.joinedSubframes == TRUE ? 1 : MAX_PARAM_SPATIAL_SUBFRAMES; + + hMeta = &( hMasa->masaMetadata ); + + computeCoherence = hMasa->config.useCoherence && hMasa->config.coherencePresent; + + for ( i = 0; i < numDirections; i++ ) + { + for ( j = 0; j < numSf; j++ ) + { + for ( k = 0; k < numCodingBands; k++ ) + { + aziRad = hMeta->directional_meta[i].azimuth[j][k] / 180.0f * EVS_PI; + eleRad = hMeta->directional_meta[i].elevation[j][k] / 180.0f * EVS_PI; + vecLen = hMeta->directional_meta[i].energy_ratio[j][k]; + + x[i][j][k] = cosf( aziRad ) * cosf( eleRad ) * vecLen; + y[i][j][k] = sinf( aziRad ) * cosf( eleRad ) * vecLen; + z[i][j][k] = sinf( eleRad ) * vecLen; + } + } + } + + /* Compute sum vector */ + for ( j = 0; j < numSf; j++ ) + { + for ( k = 0; k < numCodingBands; k++ ) + { + xSum[j][k] = x[0][j][k] + x[1][j][k]; + ySum[j][k] = y[0][j][k] + y[1][j][k]; + zSum[j][k] = z[0][j][k] + z[1][j][k]; + sumVecLen[j][k] = sqrtf( xSum[j][k] * xSum[j][k] + ySum[j][k] * ySum[j][k] + zSum[j][k] * zSum[j][k] ); + } + } + + /* Estimate the importance of having two directions instead of one */ + for ( i = 0; i < numCodingBands; i++ ) + { + importance[i] = 0.0f; + for ( j = 0; j < numSf; j++ ) + { + tempImportance = hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].energy_ratio[j][i] - sumVecLen[j][i]; + importance[i] += tempImportance; + } + importance[i] /= (float) numSf; + importance[i] *= hMasa->data.importanceWeight[i]; + } + + /* Determine bands where to use two directions */ + find_n_largest( importance, indicesOfLargest, numCodingBands, hMasa->config.numTwoDirBands ); + + for ( i = 0; i < numCodingBands; i++ ) + { + hMasa->data.twoDirBands[i] = 0; + } + + for ( i = 0; i < hMasa->config.numTwoDirBands; i++ ) + { + hMasa->data.twoDirBands[indicesOfLargest[i]] = 1; + } + + /* Combine directions on the remaining bands */ + for ( i = 0; i < numCodingBands; i++ ) + { + if ( hMasa->data.twoDirBands[i] == 0 ) + { + for ( j = 0; j < numSf; j++ ) + { + aziRad = atan2f( ySum[j][i], xSum[j][i] ); + eleRad = atan2f( zSum[j][i], sqrtf( xSum[j][i] * xSum[j][i] + ySum[j][i] * ySum[j][i] ) ); + + hMeta->directional_meta[0].azimuth[j][i] = aziRad / EVS_PI * 180.0f; + hMeta->directional_meta[0].elevation[j][i] = eleRad / EVS_PI * 180.0f; + + ratioSum = hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].energy_ratio[j][i]; + if ( computeCoherence ) + { + hMeta->directional_meta[0].spread_coherence[j][i] = + ( hMeta->directional_meta[0].spread_coherence[j][i] * hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].spread_coherence[j][i] * hMeta->directional_meta[1].energy_ratio[j][i] ) / ( ratioSum + EPSILON ); + } + + ambience2dir = 1.0f - ratioSum; + hMeta->directional_meta[0].energy_ratio[j][i] = sumVecLen[j][i] / ( hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].energy_ratio[j][i] + ambience2dir / 2.0f ); + + if ( computeCoherence ) + { + ambience1dir = 1.0f - hMeta->directional_meta[0].energy_ratio[j][i]; + ambienceIncrease = max( ambience1dir - ambience2dir, 0.0f ); + + origSurrCohEne = ambience2dir * hMeta->common_meta.surround_coherence[j][i]; + newSurrCohEne = ambienceIncrease * hMeta->directional_meta[0].spread_coherence[j][i]; + hMeta->common_meta.surround_coherence[j][i] = min( 1.0f, ( origSurrCohEne + newSurrCohEne ) / ( ambience1dir + EPSILON ) ); + } + } + } + } + + return; +} + + +static void find_n_largest( + const float *input, + int16_t *largestIndices, + const int16_t numElements, + const int16_t numLargest ) +{ + int16_t i, j; + float largestValue; + int16_t largestIndex; + float values[MASA_FREQUENCY_BANDS]; + + for ( j = 0; j < numElements; j++ ) + { + values[j] = input[j]; + } + + for ( i = 0; i < numLargest; i++ ) + { + largestValue = values[0]; + largestIndex = 0; + for ( j = 1; j < numElements; j++ ) + { + if ( values[j] > largestValue ) + { + largestValue = values[j]; + largestIndex = j; + } + } + largestIndices[i] = largestIndex; + values[largestIndex] = -1.0f; + } + + return; +} + + +static void move_metadata_to_qmetadata( + MASA_ENCODER_HANDLE hMasa, + IVAS_QMETADATA_HANDLE hQMeta ) +{ + int16_t dir, sf, band; + uint8_t numCodingBands; + uint8_t numDirections; + uint8_t numSf; + MASA_METADATA_HANDLE hMeta; + + numCodingBands = hMasa->config.numCodingBands; + numDirections = hMasa->config.numberOfDirections; + numSf = hMasa->config.joinedSubframes == TRUE ? 1 : 4; + hMeta = &( hMasa->masaMetadata ); + + for ( dir = 0; dir < numDirections; dir++ ) + { + for ( sf = 0; sf < numSf; sf++ ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + hQMeta->q_direction[dir].band_data[band].azimuth[sf] = hMeta->directional_meta[dir].azimuth[sf][band]; + hQMeta->q_direction[dir].band_data[band].elevation[sf] = hMeta->directional_meta[dir].elevation[sf][band]; + hQMeta->q_direction[dir].band_data[band].energy_ratio[sf] = hMeta->directional_meta[dir].energy_ratio[sf][band]; + if ( hQMeta->q_direction[dir].coherence_band_data != NULL ) + { + hQMeta->q_direction[dir].coherence_band_data[band].spread_coherence[sf] = (uint8_t) roundf( hMeta->directional_meta[dir].spread_coherence[sf][band] * UINT8_MAX ); + } + } + } + } + + for ( sf = 0; sf < numSf; sf++ ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + if ( hQMeta->surcoh_band_data != NULL ) + { + hQMeta->surcoh_band_data[band].surround_coherence[sf] = (uint8_t) roundf( hMeta->common_meta.surround_coherence[sf][band] * UINT8_MAX ); + } + } + } + + if ( numDirections > 1 ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + hQMeta->twoDirBands[band] = hMasa->data.twoDirBands[band]; + } + hQMeta->numTwoDirBands = hMasa->config.numTwoDirBands; + } + + /* Copy spread coherence for DCT-based coding */ + if ( numSf == 1 && hMasa->config.useCoherence ) + { + for ( dir = 0; dir < numDirections; dir++ ) + { + for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + hQMeta->q_direction[dir].coherence_band_data[band].spread_coherence[sf] = hQMeta->q_direction[dir].coherence_band_data[band].spread_coherence[0]; + } + } + } + } + + return; +} + + +/* This function studies parametric MASA metadata to provide information for codec configuration */ +static void detect_metadata_composition( + MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ + uint8_t *joinedSubframes, /* o : Result of subframe composition */ + uint8_t *coherencePresent, /* o : Result of coherence presence */ + uint8_t *isTwoDir /* o : Result of two direction check */ +) +{ + MASA_METADATA_FRAME *hMeta; + int16_t sf, band, dir, numDir; + int16_t nSubFrames; + uint8_t dirValid[2] = { FALSE }; + uint8_t cohPresent = FALSE; + uint8_t sfDiffer = FALSE; + + hMeta = &( hMasa->masaMetadata ); + numDir = hMeta->descriptive_meta.numberOfDirections + 1; + + *isTwoDir = FALSE; + + /* First check for valid two directions */ + if ( numDir == 1 ) + { + dirValid[0] = TRUE; + } + else + { + /* Default assumption */ + *isTwoDir = TRUE; + + /* Check for direct-to-total ratio values */ + for ( dir = 0; dir < numDir; dir++ ) + { + sf = 0; + while ( !dirValid[dir] && sf < MAX_PARAM_SPATIAL_SUBFRAMES ) + { + band = 0; + while ( !dirValid[dir] && band < MASA_FREQUENCY_BANDS ) + { + if ( hMeta->directional_meta[dir].energy_ratio[sf][band] >= MASA_RATIO_THRESHOLD ) + { + dirValid[dir] = TRUE; + } + band++; + } + sf++; + } + } + + if ( dirValid[1] == FALSE ) + { + /* This handles also case where both are false. Then we just use first dir metadata. */ + *isTwoDir = FALSE; + } + else if ( dirValid[0] == FALSE && dirValid[1] == TRUE ) + { + *isTwoDir = FALSE; + /* Copy data to first direction */ + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) + { + hMeta->directional_meta[0].azimuth[sf][band] = hMeta->directional_meta[1].azimuth[sf][band]; + hMeta->directional_meta[0].elevation[sf][band] = hMeta->directional_meta[1].elevation[sf][band]; + hMeta->directional_meta[0].energy_ratio[sf][band] = hMeta->directional_meta[1].energy_ratio[sf][band]; + hMeta->directional_meta[0].spread_coherence[sf][band] = hMeta->directional_meta[1].spread_coherence[sf][band]; + } + } + } + + if ( *isTwoDir == FALSE ) + { + /* Further checks will be done with just one direction */ + numDir = 1; + } + } + + /* Check if data over subframes is identical. Check is done by comparing to first subframe. */ + dir = 0; + while ( sfDiffer == FALSE && dir < numDir ) + { + sf = 1; + while ( sfDiffer == FALSE && sf < MAX_PARAM_SPATIAL_SUBFRAMES ) + { + band = 0; + while ( sfDiffer == FALSE && band < MASA_FREQUENCY_BANDS ) + { + float aziDif; + aziDif = fabsf( hMeta->directional_meta[dir].azimuth[sf][band] - hMeta->directional_meta[dir].azimuth[0][band] ); + aziDif = aziDif > 180.0f ? aziDif - 360.0f : aziDif; + if ( aziDif > MASA_ANGLE_TOLERANCE ) + { + sfDiffer = TRUE; + break; + } + + if ( fabsf( hMeta->directional_meta[dir].elevation[sf][band] - hMeta->directional_meta[dir].elevation[0][band] ) > MASA_ANGLE_TOLERANCE ) + { + sfDiffer = TRUE; + break; + } + + if ( fabsf( hMeta->directional_meta[dir].energy_ratio[sf][band] - hMeta->directional_meta[dir].energy_ratio[0][band] ) > MASA_RATIO_TOLERANCE ) + { + sfDiffer = TRUE; + break; + } + + if ( fabsf( hMeta->directional_meta[dir].spread_coherence[sf][band] - hMeta->directional_meta[dir].spread_coherence[0][band] ) > MASA_COHERENCE_TOLERANCE ) + { + sfDiffer = TRUE; + break; + } + + if ( dir == 0 && fabsf( hMeta->common_meta.surround_coherence[sf][band] - hMeta->common_meta.surround_coherence[0][band] ) > MASA_COHERENCE_TOLERANCE ) + { + sfDiffer = TRUE; + } + band++; + } + sf++; + } + dir++; + } + + /* Further checks can be done with just one subframe if they are identical */ + nSubFrames = sfDiffer == TRUE ? MAX_PARAM_SPATIAL_SUBFRAMES : 1; + + /* Check spread coherence */ + dir = 0; + while ( cohPresent == FALSE && dir < numDir ) + { + sf = 0; + while ( cohPresent == FALSE && sf < nSubFrames ) + { + band = 0; + while ( cohPresent == FALSE && band < MASA_FREQUENCY_BANDS ) + { + /* Check coherences for presence of coherence */ + if ( hMeta->directional_meta[dir].spread_coherence[sf][band] >= MASA_COHERENCE_THRESHOLD ) + { + cohPresent = TRUE; + } + band++; + } + sf++; + } + dir++; + } + + /* Check surround coherence separately if we do not have already knowledge of coherence */ + if ( cohPresent == FALSE ) + { + cohPresent = ivas_masa_surrcoh_signicant( hMeta->common_meta.surround_coherence, + hMeta->common_meta.diffuse_to_total_ratio, + nSubFrames, + MASA_FREQUENCY_BANDS ); + } + + /* Set output flags */ + *joinedSubframes = sfDiffer == TRUE ? FALSE : TRUE; + *coherencePresent = cohPresent; + + return; +} + + +/* Check and compensate energy ratios. This function verifies that energy ratios follow the principle of summing to one. + * In addition, it implements simple remainder-to-total handling where remainder energy is proportionally added to other + * ratios. */ +static void compensate_energy_ratios( + MASA_ENCODER_HANDLE hMasa ) +{ + int16_t sf, band, dir; + float ratioSum; + MASA_METADATA_HANDLE hMeta; + uint8_t numDirs; + + hMeta = &( hMasa->masaMetadata ); + numDirs = hMeta->descriptive_meta.numberOfDirections + 1; + + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) + { + /* Remainder is always set to zero and energy removal is compensated in following steps + * to other ratios. */ + hMeta->common_meta.remainder_to_total_ratio[sf][band] = 0.0f; + + ratioSum = 0; + for ( dir = 0; dir < numDirs; dir++ ) + { + ratioSum += hMeta->directional_meta[dir].energy_ratio[sf][band]; + } + ratioSum += hMeta->common_meta.diffuse_to_total_ratio[sf][band]; + + if ( ratioSum == 0.0f ) + { + for ( dir = 0; dir < numDirs; dir++ ) + { + hMeta->directional_meta[dir].energy_ratio[sf][band] = 0.0f; + } + hMeta->common_meta.diffuse_to_total_ratio[sf][band] = 1.0f; + } + else if ( ratioSum != 1.0f ) + { + for ( dir = 0; dir < numDirs; dir++ ) + { + hMeta->directional_meta[dir].energy_ratio[sf][band] /= ratioSum; + } + hMeta->common_meta.diffuse_to_total_ratio[sf][band] /= ratioSum; + } + } + } + + return; +} + + +/* If the bit budget is very low, reduce metadata further to either 1 subframe and 5 bands, or 1 band and 4 subframes, based on which works better */ +static void reduce_metadata_further( + MASA_ENCODER_HANDLE hMasa, + IVAS_QMETADATA_HANDLE hqmetadata, + const IVAS_FORMAT ivas_format ) +{ + int16_t sf; + int16_t band; + int16_t selectedBand; + float energy[MAX_PARAM_SPATIAL_SUBFRAMES][LOWBITRATE_NUM_BANDS]; + float totalEnergySum; + uint8_t numCodingBands; + uint8_t computeCoherence; + float onset_filter; + float bandEnergy; + uint8_t mergeOverFreqBands; + float meanRatio; + + numCodingBands = hMasa->config.numCodingBands; + computeCoherence = hMasa->config.useCoherence && hMasa->config.coherencePresent; + + /* Set default values */ + selectedBand = 0; + mergeOverFreqBands = 0; + + /* Get energy for the input data in 4-subframe, 5-band format */ + totalEnergySum = 0.0f; + if ( ivas_format == MASA_FORMAT ) /* Energy data is in 4-subframe, 24-band format */ + { + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + int16_t brange[2]; + float eneSum; + int16_t m; + + for ( band = 0; band < numCodingBands; band++ ) + { + brange[0] = hMasa->data.band_mapping[band]; + brange[1] = hMasa->data.band_mapping[band + 1]; + + eneSum = 0.0f; + for ( m = brange[0]; m < brange[1]; m++ ) + { + eneSum += hMasa->data.energy[sf][m]; + } + energy[sf][band] = eneSum; + totalEnergySum += eneSum; + } + } + } + else /* Energy data is already in 4-subframe, 5-band format */ + { + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + energy[sf][band] = hMasa->data.energy[sf][band]; + totalEnergySum += energy[sf][band]; + } + } + } + + /* Determine onsets */ + hMasa->data.onset_detector_1 = hMasa->data.onset_detector_1 * LOWBITRATE_ONSET_ALPHA; + hMasa->data.onset_detector_1 = max( hMasa->data.onset_detector_1, totalEnergySum ); + + hMasa->data.onset_detector_2 = LOWBITRATE_ONSET_BETA * hMasa->data.onset_detector_2 + ( 1.0f - LOWBITRATE_ONSET_BETA ) * hMasa->data.onset_detector_1; + hMasa->data.onset_detector_2 = LOWBITRATE_ONSET_GAIN * min( hMasa->data.onset_detector_1, hMasa->data.onset_detector_2 ); + + onset_filter = min( max( hMasa->data.onset_detector_2 / ( hMasa->data.onset_detector_1 + EPSILON ), 0.0f ), 1.0f ); + + /* If we have onset, continue checking if we should reduce in frequency instead of time. */ + if ( onset_filter < 0.99f ) + { + /* Determine one frequency band to use to represent all frequency bands */ + for ( band = numCodingBands - 1; band >= 0; band-- ) + { + float threshold; + float bandRatio; + + threshold = totalEnergySum / ( MAX_PARAM_SPATIAL_SUBFRAMES * LOWBITRATE_NUM_BANDS ) * 0.5f; /* Average energy multiplied with energy ratio of 0.5f */ + bandRatio = hqmetadata->q_direction[0].band_data[band].energy_ratio[0]; + + bandEnergy = 0.0f; + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + bandEnergy += energy[sf][band]; + } + + if ( bandEnergy / MAX_PARAM_SPATIAL_SUBFRAMES * bandRatio > threshold ) + { + selectedBand = band; + break; + } + } + + /* Determine if to merge over frequency instead of time */ + meanRatio = 0.0f; + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + meanRatio += hqmetadata->q_direction[0].band_data[band].energy_ratio[sf] * energy[sf][band]; + } + } + meanRatio /= ( totalEnergySum + EPSILON ); + + /* If the ratio of the selected band is larger than the average ratio of all bands and if there is an onset, merge over frequency bands. + * Otherwise, merge over subframes. */ + if ( hqmetadata->q_direction[0].band_data[selectedBand].energy_ratio[0] > meanRatio ) + { + mergeOverFreqBands = 1; + } + else + { + mergeOverFreqBands = 0; + } + } + else + { + mergeOverFreqBands = 0; + } + + /* Merge values over subframes or frequency bands, depending on which one is less important */ + if ( !mergeOverFreqBands ) /* Merge values over subframes */ + { + float xSum, ySum, zSum; + float bandSumEnergy; + float aziRad, eleRad; + float x, y, z; + float veclen; + + for ( band = 0; band < numCodingBands; band++ ) + { + xSum = 0.0f; + ySum = 0.0f; + zSum = 0.0f; + bandSumEnergy = 0.0f; + + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + aziRad = hqmetadata->q_direction[0].band_data[band].azimuth[sf] / 180.0f * EVS_PI; + eleRad = hqmetadata->q_direction[0].band_data[band].elevation[sf] / 180.0f * EVS_PI; + veclen = hqmetadata->q_direction[0].band_data[band].energy_ratio[sf] * energy[sf][band]; + + x = cosf( aziRad ) * cosf( eleRad ) * veclen; + y = sinf( aziRad ) * cosf( eleRad ) * veclen; + z = sinf( eleRad ) * veclen; + + xSum += x; + ySum += y; + zSum += z; + + bandSumEnergy += energy[sf][band]; + } + + aziRad = atan2f( ySum, xSum ); + eleRad = atan2f( zSum, sqrtf( xSum * xSum + ySum * ySum ) ); + + hqmetadata->q_direction[0].band_data[band].azimuth[0] = aziRad / EVS_PI * 180.0f; + hqmetadata->q_direction[0].band_data[band].elevation[0] = eleRad / EVS_PI * 180.0f; + + /* Energy ratio is already merged through time */ + + if ( computeCoherence && hqmetadata->q_direction[0].coherence_band_data != NULL ) + { + float spreadCoh; + float spreadCohSum = 0.0f; + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + spreadCoh = (float) hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[sf] / 255.0f; + spreadCohSum += spreadCoh * energy[sf][band]; + } + hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[0] = (uint8_t) roundf( spreadCohSum / ( bandSumEnergy + EPSILON ) * 255.0f ); + + /* Copy spread coherence to the rest of subframes for the coherence coding algorithm. */ + for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( band = 0; band < numCodingBands; band++ ) + { + hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[0]; + } + } + + /* Surround coherence is already merged through time */ + } + } + + hqmetadata->q_direction->cfg.nblocks = 1; + hMasa->config.joinedSubframes = 1; + } + else /* Merge values over frequency bands */ + { + /* Use the selected frequency band to represent all data */ + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + hqmetadata->q_direction[0].band_data[0].azimuth[sf] = hqmetadata->q_direction[0].band_data[selectedBand].azimuth[sf]; + hqmetadata->q_direction[0].band_data[0].elevation[sf] = hqmetadata->q_direction[0].band_data[selectedBand].elevation[sf]; + hqmetadata->q_direction[0].band_data[0].energy_ratio[sf] = hqmetadata->q_direction[0].band_data[selectedBand].energy_ratio[sf]; + if ( hqmetadata->q_direction[0].coherence_band_data != NULL ) + { + hqmetadata->q_direction[0].coherence_band_data[0].spread_coherence[sf] = hqmetadata->q_direction[0].coherence_band_data[selectedBand].spread_coherence[sf]; + } + if ( hqmetadata->surcoh_band_data != NULL ) + { + hqmetadata->surcoh_band_data[0].surround_coherence[sf] = hqmetadata->surcoh_band_data[selectedBand].surround_coherence[sf]; + } + } + + /* Copy coherence to rest of bands for the coherence coding algorithm. */ + for ( band = 1; band < numCodingBands; band++ ) + { + if ( hqmetadata->q_direction[0].coherence_band_data != NULL ) + { + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hqmetadata->q_direction[0].coherence_band_data[0].spread_coherence[sf]; + } + } + if ( hqmetadata->q_direction[0].coherence_band_data != NULL ) + { + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + hqmetadata->surcoh_band_data[band].surround_coherence[sf] = hqmetadata->surcoh_band_data[0].surround_coherence[sf]; + } + } + } + + hqmetadata->q_direction[0].cfg.nbands = 1; + } + + return; +} + + +static int16_t encode_lfe_to_total_energy_ratio( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + const int32_t ivas_total_brate /* i : IVAS total bitrate */ +) +{ + int16_t i; + float xq; + int16_t VQLevels; + float maxLFESubFrameEner; + float log2LFEaverage; + float log2LFEratio[4]; + float xqv[4]; + float linearLFEaverage; + int16_t lfeToTotalEnergyRatioIndices[3]; + int16_t lfeAdaptiveVQBits; + int16_t lfeBitsWritten; + + VQLevels = 0; + lfeAdaptiveVQBits = 0; + + /* Determine maximum amount of LFE energy in any subframe */ + maxLFESubFrameEner = 0.0f; + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + if ( hMasa->data.lfeToTotalEnergyRatio[i] > maxLFESubFrameEner ) + { + maxLFESubFrameEner = hMasa->data.lfeToTotalEnergyRatio[i]; + } + } + + /* Set default values for the indices */ + for ( i = 0; i < 3; i++ ) + { + lfeToTotalEnergyRatioIndices[i] = 0; + } + + /* Check if there is enough energy in any subframe. If not, send only 1 bit (0) and abort. */ + /* If there is enough LFE energy at least in one subframe, quantize it. */ + if ( maxLFESubFrameEner > 0.005f ) + { + /* Convert energy to log2 domain, and clamp it to reasonable values */ + log2LFEaverage = 0.0f; + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + log2LFEratio[i] = log2f( max( 0.001f, hMasa->data.lfeToTotalEnergyRatio[i] ) ); + if ( log2LFEratio[i] > 1.0f ) /* Corresponds to linear value 2.0f */ + { + log2LFEratio[i] = 1.0f; + } + else if ( log2LFEratio[i] < -9.0f ) + { + log2LFEratio[i] = -9.0f; + } + log2LFEaverage += 0.25f * log2LFEratio[i]; + } + + if ( ivas_total_brate == IVAS_13k2 ) + { + /* Calculate adaptive 1-bit LFE quantizer index */ + linearLFEaverage = exp2f( log2LFEaverage ); /* Convert back to linear domain */ + if ( ( linearLFEaverage > MCMASA_LFE_1BIT_THRES ) && ( linearLFEaverage > ( 0.5f * ( MCMASA_LFE_BETA + hMasa->data.prevq_lfeToTotalEnergyRatio ) + 0.5f * ( MCMASA_LFE_ALPHA * hMasa->data.prevq_lfeToTotalEnergyRatio ) ) ) ) + { + lfeToTotalEnergyRatioIndices[0] = 1; + if ( hMasa->data.prevq_lfeIndex == 1 ) + { + hMasa->data.prevq_lfeToTotalEnergyRatio = hMasa->data.prevq_lfeToTotalEnergyRatio + MCMASA_LFE_THETA * MCMASA_LFE_BETA; /* larger "bump-up" to LFE-to-total energy ratio */ + } + else + { + hMasa->data.prevq_lfeToTotalEnergyRatio = hMasa->data.prevq_lfeToTotalEnergyRatio + MCMASA_LFE_BETA; /* default "bump-up" to LFE-to-total energy ratio */ + } + } + else + { + hMasa->data.prevq_lfeToTotalEnergyRatio = MCMASA_LFE_ALPHA * hMasa->data.prevq_lfeToTotalEnergyRatio; /* exponential decay */ + } + + if ( hMasa->data.prevq_lfeToTotalEnergyRatio > 1.0f ) + { + hMasa->data.prevq_lfeToTotalEnergyRatio = 1.0f; + } + hMasa->data.prevq_lfeIndex = lfeToTotalEnergyRatioIndices[0]; /* Update to previous frame's index memories */ + } + else /* Bitrate >= 16.4 kbps */ + { + /* Do 1st stage scalar quantization */ + lfeToTotalEnergyRatioIndices[0] = 1; + lfeToTotalEnergyRatioIndices[1] = usquant( log2LFEaverage, &xq, MCMASA_LFE_QLOW, MCMASA_LFE_DELTA, 8 ); + + if ( ivas_total_brate >= IVAS_24k4 ) /* Vector quantization is applied if bitrate >= 24.4 kbps */ + { + /* Remove scalar value from the vector*/ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + log2LFEratio[i] -= xq; + } + + /* Vector quantize residual with energy adaptive bit allocation */ + switch ( lfeToTotalEnergyRatioIndices[1] ) + { + case 0: + case 1: + VQLevels = 0; + lfeAdaptiveVQBits = 0; + break; + case 2: + VQLevels = 2; + lfeAdaptiveVQBits = 1; + break; + case 3: + VQLevels = 4; + lfeAdaptiveVQBits = 2; + break; + case 4: + VQLevels = 8; + lfeAdaptiveVQBits = 3; + break; + default: + VQLevels = 16; + lfeAdaptiveVQBits = 4; + } + + if ( VQLevels > 0 ) + { + lfeToTotalEnergyRatioIndices[2] = vquant( log2LFEratio, 0, xqv, McMASA_LFEGain_vectors, 4, VQLevels ); + } + } + } + } + + /* Write first LFE bit */ + lfeBitsWritten = 0; + push_next_indice( hMetaData, lfeToTotalEnergyRatioIndices[0], 1 ); + lfeBitsWritten += 1; + + if ( lfeToTotalEnergyRatioIndices[0] == 1 && ivas_total_brate >= IVAS_16k4 ) + { + /* If bitrate >= 16.4kbit/s, send 1-bit on/off + 3-bit scalar */ + push_next_indice( hMetaData, lfeToTotalEnergyRatioIndices[1], 3 ); + lfeBitsWritten += 3; + + /* If bitrate >= 24.4kbit/s, use adaptive 1 + (3.. 7) bit quantizer */ + if ( ivas_total_brate >= IVAS_24k4 ) + { + /* Vector quantize residual with energy adaptive bit allocation */ + if ( lfeAdaptiveVQBits > 0 ) + { + push_next_indice( hMetaData, lfeToTotalEnergyRatioIndices[2], lfeAdaptiveVQBits ); + lfeBitsWritten += lfeAdaptiveVQBits; + } + } + } + + return lfeBitsWritten; +} + + +/*-------------------------------------------------------------------* + * ivas_masa_enc_reconfigure() + * + * Reconfigure IVAS MASA encoder + *-------------------------------------------------------------------*/ + +void ivas_masa_enc_reconfigure( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + int16_t n, tmp; + int16_t sce_id, cpe_id; + int32_t ivas_total_brate; + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + + if ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) + { + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); + st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + copy_encoder_config( st_ivas, st_ivas->hCPE[cpe_id]->hCoreCoder[n], 0 ); + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + + if ( ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + { + st_ivas->hCPE[cpe_id]->element_mode = IVAS_CPE_DFT; + } + else if ( ivas_total_brate < MIN_BRATE_MDCT_STEREO ) + { + st_ivas->hCPE[cpe_id]->element_mode = IVAS_CPE_DFT; + } + else + { + st_ivas->hCPE[cpe_id]->element_mode = IVAS_CPE_MDCT; + } + } + + ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &tmp, &tmp, &tmp ); + } + + return; +} diff --git a/lib_enc/ivas_mc_param_enc.c b/lib_enc/ivas_mc_param_enc.c new file mode 100644 index 0000000000..fce9a85f71 --- /dev/null +++ b/lib_enc/ivas_mc_param_enc.c @@ -0,0 +1,1674 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_dmx( PARAM_MC_ENC_HANDLE hParamMC, float data_f[][L_FRAME48k], float data_dmx[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_input, const int16_t nchan_transport ); + +static void ivas_param_mc_param_est_enc( PARAM_MC_ENC_HANDLE hParamMC, float input_frame_t[][L_FRAME48k], float Cy_sum[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], float Cx_sum[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], const int16_t input_frame, const int16_t nchan_input, const int16_t nchan_transport ); + +static void ivas_param_mc_parameter_quantizer( const float *x, const int16_t L, const int16_t sz_quantizer, const float *quantizer, int16_t *quant_idx, float *y ); + +static void ivas_param_mc_transient_detection( PARAM_MC_ENC_HANDLE hParamMC, TRAN_DET_HANDLE hTranDet, int16_t *bAttackPresent, int16_t *attackIdx ); + +static void ivas_param_mc_enc_find_icc_map( PARAM_MC_ENC_HANDLE hParamMC, float Cx_sum[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], float Cy_sum[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], float ILD_q[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_SZ_ILD_MAP], const int16_t nchan_input, const int16_t nchan_transport ); + +static void ivas_param_mc_quantize_iccs( PARAM_MC_ENC_HANDLE hParamMC, float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], const int16_t freq_idx, const int16_t nchan_input, int16_t *ICC_idx_out ); + +static void ivas_param_mc_quantize_ilds( PARAM_MC_ENC_HANDLE hParamMC, float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], float Cx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], const int16_t freq_idx, const int16_t nchan_input, const int16_t nchan_transport, int16_t *ILD_idx_out, float ILD_q[PARAM_MC_SZ_ILD_MAP] ); + +static void ivas_param_mc_write_bs( const PARAM_MC_ENC_HANDLE hParamMC, int16_t *ILD_idx, int16_t *ICC_idx, uint16_t bit_buffer[PARAM_MC_MAX_BITS], int16_t *bit_pos ); + +static void ivas_param_mc_dec2bin( const int16_t val, const int16_t N, uint16_t bits[PARAM_MC_MAX_BITS] ); + +static void ivas_param_mc_encode_parameter( int16_t *idx_in, HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParameterCodingInfo, const int16_t nbands, const int16_t band_step, const int16_t map_size_wo_lfe, const int16_t map_size, uint16_t bit_buffer[PARAM_MC_MAX_BITS], int16_t *bit_pos ); + +static void ivas_param_mc_range_encoder( const int16_t *seq_in, const int16_t num_symbols, const uint16_t *cum_freq, const uint16_t *sym_freq, const uint16_t tot_shift, const int16_t max_nb_bits, uint16_t *bit_buffer, int16_t *bit_pos ); + +/*------------------------------------------------------------------------- + * ivas_param_mc_enc_open() + * + * Initialize Parametric MC encoder handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_param_mc_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +) +{ + int16_t i, k, l; + IVAS_FB_CFG *fb_cfg; + PARAM_MC_ENC_HANDLE hParamMC; + uint16_t config_index; + MC_LS_SETUP mc_input_setup; + int16_t max_bwidth, nchan_inp; + int32_t input_Fs, ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + /* Sanity Checks */ + if ( ( hParamMC = (PARAM_MC_ENC_HANDLE) count_malloc( sizeof( PARAM_MC_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Paramtric MC\n" ) ); + } + + mc_input_setup = st_ivas->hEncoderConfig->mc_input_setup; + max_bwidth = st_ivas->hEncoderConfig->max_bwidth; + input_Fs = st_ivas->hEncoderConfig->input_Fs; + nchan_inp = st_ivas->hEncoderConfig->nchan_inp; + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + + /* Preparing Config */ + hParamMC->lfe_index = LFE_CHANNEL; + st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_input_setup ); + + /* get configuration index */ + config_index = ivas_param_mc_get_configuration_index( mc_input_setup, ivas_total_brate ); + + /* set core coder dependent on the number of transport channels */ + switch ( st_ivas->nchan_transport ) + { + case 4: + case 3: + st_ivas->nCPE = 2; + st_ivas->nSCE = 0; + st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + break; + case 2: + st_ivas->nCPE = 1; + st_ivas->nSCE = 0; + st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + break; +#ifdef DEBUGGING + default: + assert( 0 && "Number of transport channels not supported by ParamMC!\n" ); +#endif + } + + /* get dmx factors */ + hParamMC->dmx_factors = ivas_param_mc_conf[config_index].dmx_fac; + + /* set FB config. */ + if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, SBA_MODE_DIRAC, nchan_inp, 0, 0, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Allocate and initialize FB mixer handle */ + if ( ( error = ivas_FB_mixer_open( &( hParamMC->hFbMixer ), input_Fs, fb_cfg ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* open/init parameter coding */ + ivas_param_mc_metadata_open( mc_input_setup, hParamMC->lfe_index, ivas_total_brate, &hParamMC->hMetadataPMC ); + + /* init icc index states */ + for ( i = 0; i < PARAM_MC_PARAMETER_FRAMES; i++ ) + { + set_s( hParamMC->icc_map_index[i], -1, PARAM_MC_SZ_ICC_MAP ); + + for ( l = 0; l < hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_lfe; l++ ) + { + for ( k = 0; k < hParamMC->hMetadataPMC.icc_map_size_full; k++ ) + { + if ( hParamMC->hMetadataPMC.icc_mapping[i][l][0] == hParamMC->hMetadataPMC.icc_map_full[0][k] && hParamMC->hMetadataPMC.icc_mapping[i][l][1] == hParamMC->hMetadataPMC.icc_map_full[1][k] ) + { + hParamMC->icc_map_index[i][l] = k; + } + } + } + } + + /* Band Grouping */ + if ( hParamMC->hMetadataPMC.num_parameter_bands == 20 ) + { + mvs2s( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); + } + else if ( hParamMC->hMetadataPMC.num_parameter_bands == 14 ) + { + mvs2s( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); + } + else if ( hParamMC->hMetadataPMC.num_parameter_bands == 10 ) + { + mvs2s( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); + } + else + { + assert( 0 && "nbands must be 20, 14, or 10!" ); + } + + /* set max parameter band for abs cov */ + i = 0; + while ( hParamMC->band_grouping[i] <= PARAM_MC_MAX_BAND_ABS_COV_ENC ) + { + hParamMC->max_param_band_abs_cov = ( i++ ); + } + + /* parameter band grouping: 60 band CLDFB to 240 band MDFT resolution */ + for ( i = 0; i < hParamMC->hMetadataPMC.num_parameter_bands + 1; i++ ) + { + hParamMC->band_grouping[i] *= CLDFB_TO_MDFT_FAC; + } + + /* set correct coded band width */ + hParamMC->hMetadataPMC.coded_bwidth = max_bwidth; + hParamMC->hMetadataPMC.last_coded_bwidth = max_bwidth; + ivas_param_mc_set_coded_bands( &hParamMC->hMetadataPMC ); + + /* initialize offset for transient detection */ + hParamMC->transient_detector_delay = ( NSUBBLOCKS_SHIFT + 1 ) + NSUBBLOCKS + 1 - (int16_t) ceilf( (float) NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS ) / (float) NS2SA( input_Fs, 2 * DIRAC_SLOT_NS ) ); + + /* Init total/dmx ener factors */ + set_f( hParamMC->ener_fac, 0.0f, PARAM_MC_MAX_PARAMETER_BANDS ); + + st_ivas->hParamMC = hParamMC; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_enc_close() + * + * Close Parametric MC encoder handle + *------------------------------------------------------------------------*/ + +void ivas_param_mc_enc_close( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + const int32_t sampling_rate ) +{ + ivas_param_mc_metadata_close( &hParamMC->hMetadataPMC ); + + ivas_FB_mixer_close( &hParamMC->hFbMixer, sampling_rate ); + + count_free( hParamMC ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_enc() + * + * Parametric MC Encoder main encoding function + *------------------------------------------------------------------------*/ + +void ivas_param_mc_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ + float data_f[][L_FRAME48k], /* i/o: input: CICP6, CICP12, CICP14, CICP16 or CICP19 MC data */ + const int16_t input_frame /* i : input frame length */ +) +{ + int16_t k; + float Cy_sum[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; + float Cx_sum[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS]; + float ILD_q[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_SZ_ILD_MAP]; + int16_t ILD_idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP]; + int16_t ICC_idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ICC_MAP]; + uint16_t bit_buffer[PARAM_MC_MAX_BITS]; + int16_t bit_pos; + int16_t band_step; + float data_dmx[PARAM_MC_MAX_TRANSPORT_CHANS][L_FRAME48k]; + int16_t ch; + int16_t band; + PARAM_MC_ENC_HANDLE hParamMC; + int16_t nchan_inp; + + wmops_sub_start( "param_mc_enc" ); + + /* initializations */ + hParamMC = st_ivas->hParamMC; + bit_pos = 0; + band_step = 1; + nchan_inp = st_ivas->hEncoderConfig->nchan_inp; + + for ( band = 0; band < PARAM_MC_MAX_PARAMETER_BANDS; band++ ) + { + for ( ch = 0; ch < MAX_CICP_CHANNELS; ch++ ) + { + set_zero( Cy_sum[band][ch], MAX_CICP_CHANNELS ); + } + for ( ch = 0; ch < PARAM_MC_MAX_TRANSPORT_CHANS; ch++ ) + { + set_zero( Cx_sum[band][ch], PARAM_MC_MAX_TRANSPORT_CHANS ); + } + } + + for ( band = 0; band < PARAM_MC_MAX_PARAMETER_BANDS; band++ ) + { + set_zero( ILD_q[band], PARAM_MC_SZ_ILD_MAP ); + } + set_s( ILD_idx, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP ); + set_s( ICC_idx, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ICC_MAP ); + + /* update parameter frame index */ + hParamMC->hMetadataPMC.param_frame_idx = ( hParamMC->hMetadataPMC.param_frame_idx + 1 ) % PARAM_MC_PARAMETER_FRAMES; + + /* DMX generation*/ + ivas_param_mc_dmx( hParamMC, data_f, data_dmx, input_frame, nchan_inp, st_ivas->nchan_transport ); + + /* Transient Detector */ + switch ( st_ivas->nchan_transport ) + { + case 2: + case 3: + case 4: + { + int16_t bAttackPresent[PARAM_MC_MAX_TRANSPORT_CHANS]; + int16_t attackIdx[PARAM_MC_MAX_TRANSPORT_CHANS]; + + set_s( attackIdx, -1, PARAM_MC_MAX_TRANSPORT_CHANS ); + set_s( bAttackPresent, 0, PARAM_MC_MAX_TRANSPORT_CHANS ); + + for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) + { + int16_t cpe_idx = ch / 2; + + RunTransientDetection( data_dmx[ch], input_frame, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet ); + + ivas_param_mc_transient_detection( hParamMC, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet, &bAttackPresent[ch], &attackIdx[ch] ); + } + + /* if more than one attack, use the earlier */ + hParamMC->hMetadataPMC.bAttackPresent = 0; + hParamMC->hMetadataPMC.attackIndex = 16; + + for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) + { + hParamMC->hMetadataPMC.bAttackPresent = max( hParamMC->hMetadataPMC.bAttackPresent, bAttackPresent[ch] ); + } + + if ( hParamMC->hMetadataPMC.bAttackPresent ) + { + for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) + { + hParamMC->hMetadataPMC.attackIndex = min( hParamMC->hMetadataPMC.attackIndex, attackIdx[ch] ); + } + } + else + { + hParamMC->hMetadataPMC.attackIndex = 0; + } + + band_step = hParamMC->hMetadataPMC.bAttackPresent ? PARAM_MC_TRANSIENT_BAND_STEP : 1; + } + break; +#ifdef DEBUGGING + default: + assert( !"Number of transport channels not valid for ParamMC!" ); +#endif + } + + /* Encoding */ + + /* parameter estimation*/ + ivas_param_mc_param_est_enc( hParamMC, data_f, Cy_sum, Cx_sum, input_frame, nchan_inp, st_ivas->nchan_transport ); + + /* ILD parameter quantization */ + for ( k = 0; k < hParamMC->hMetadataPMC.nbands_coded; k += band_step ) + { + ivas_param_mc_quantize_ilds( hParamMC, Cy_sum[k], Cx_sum[k], k, nchan_inp, st_ivas->nchan_transport, ILD_idx, ILD_q[k] ); + } + + /* get icc map */ + if ( hParamMC->hMetadataPMC.flag_use_adaptive_icc_map == 1 ) + { + ivas_param_mc_enc_find_icc_map( hParamMC, Cx_sum, Cy_sum, ILD_q, nchan_inp, st_ivas->nchan_transport ); + } + else + { + ivas_param_mc_default_icc_map( hParamMC->hMetadataPMC.icc_mapping_conf, hParamMC->hMetadataPMC.icc_mapping[hParamMC->hMetadataPMC.param_frame_idx] ); + } + + /* ICC parameter quantization */ + for ( k = 0; k < hParamMC->hMetadataPMC.nbands_coded; k += band_step ) + { + ivas_param_mc_quantize_iccs( hParamMC, Cy_sum[k], k, nchan_inp, ICC_idx ); + } + + /* time domain DMX generation*/ + /* just copy data_dmx generated above, contains already the downmix */ + for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) + { + mvr2r( data_dmx[ch], data_f[ch], input_frame ); + } + + /* we have to run the transient detector on the second channel of the last CPE if we + have an odd number of transport channels */ + if ( st_ivas->nchan_transport > 2 ) + { + for ( ; ch < st_ivas->nCPE * CPE_CHANNELS; ch++ ) + { + int16_t cpe_idx = ch / 2; + + set_zero( data_f[ch], input_frame ); + + RunTransientDetection( data_f[ch], input_frame, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet ); + } + } + + /* write Parametric MC side info bitstream into temporary buffer*/ + ivas_param_mc_write_bs( hParamMC, ILD_idx, ICC_idx, bit_buffer, &bit_pos ); + + /* push the Parametric MC side info from the temporary buffer into the medatdata bitstream*/ + push_next_bits( hMetaData, bit_buffer, bit_pos ); + + /* updates */ + hParamMC->hMetadataPMC.last_coded_bwidth = hParamMC->hMetadataPMC.coded_bwidth; + + wmops_sub_end(); + + return; +} + + +/*****************************************************************************************/ +/* local functions */ +/*****************************************************************************************/ + +/*------------------------------------------------------------------------- + * ivas_param_mc_dmx() + * + * Computes the time domain down mix signal + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_dmx( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + float data_f[][L_FRAME48k], /* i : Input frame */ + float data_dmx[][L_FRAME48k], /* o : Down mixed frame */ + const int16_t input_frame, /* i : Input frame length */ + const int16_t nchan_input, /* i : number of input channels */ + const int16_t nchan_transport /* i : number of transport channels */ +) +{ + int16_t i; + const int16_t *idx; + int16_t dmx_ch; + int16_t inp_ch; + const float *p_dmx_fac; + + idx = Param_MC_index; + for ( i = 0; i < input_frame; i++ ) + { + p_dmx_fac = hParamMC->dmx_factors; + for ( dmx_ch = 0; dmx_ch < nchan_transport; dmx_ch++ ) + { + float *dmx_sample = &data_dmx[idx[dmx_ch]][i]; + *dmx_sample = 0.0f; + for ( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) + { + ( *dmx_sample ) += data_f[idx[inp_ch]][i] * ( *( p_dmx_fac++ ) ); + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_param_est_enc() + * + * run the CLDFB analysis on the input signal + * estimate the input and down mix covariances + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_param_est_enc( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + float input_frame_t[][L_FRAME48k], /* i : Input frame in the time domain */ + float Cy_sum[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* o : Covariance matrix for the original frame */ + float Cx_sum[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* o : Covariance matrix for the downmixed frame */ + const int16_t input_frame, /* i : Input frame length */ + const int16_t nchan_input, /* i : number of input channels */ + const int16_t nchan_transport /* i : number of transport channels */ +) +{ + int16_t i, cur_cldfb_band, cur_param_band, ch_idx1, ch_idx2, inp_ch; + int16_t ts; + int16_t l_ts; + int16_t num_time_slots; + int16_t num_parameter_bands; + int16_t brange[2]; + int16_t band_step; + const int16_t *map_ls = Param_MC_index; /* Loudspeakers mapping */ + int16_t idx_ls; + float *pcm_in[MAX_CICP_CHANNELS]; + float slot_frame_f_real[MAX_CICP_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; /* Output of the MDFT FB - real part */ + float slot_frame_f_imag[MAX_CICP_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; /* Output of the MDFT FB - imag part */ + float *p_slot_frame_f_real[MAX_CICP_CHANNELS]; /* Output of the MDFT FB - real part */ + float *p_slot_frame_f_imag[MAX_CICP_CHANNELS]; /* Output of the MDFT FB - imag part */ + + float dmx_real[PARAM_MC_MAX_TRANSPORT_CHANS]; /* Downmix channel - Real Part */ + float dmx_imag[PARAM_MC_MAX_TRANSPORT_CHANS]; /* Downmix channel - Imag Part */ + float a, b, c, d; /* Tmp complex values */ + float Cy_sum_imag[PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; + float Cx_sum_imag[PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS]; + float real_part, imag_part; + int16_t start_ts; + const float *p_dmx_fac; + + wmops_sub_start( "param_mc_prm_est" ); + + /* initializations */ + + + l_ts = input_frame / PARAM_MC_MDFT_NO_SLOTS; + num_time_slots = PARAM_MC_MDFT_NO_SLOTS; + start_ts = hParamMC->hMetadataPMC.bAttackPresent ? hParamMC->hMetadataPMC.attackIndex : 0; + num_parameter_bands = hParamMC->hMetadataPMC.nbands_coded; + band_step = 1; + + for ( cur_param_band = 0; cur_param_band < PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC; cur_param_band++ ) + { + for ( ch_idx1 = 0; ch_idx1 < MAX_CICP_CHANNELS; ch_idx1++ ) + { + set_zero( Cy_sum_imag[cur_param_band][ch_idx1], MAX_CICP_CHANNELS ); + } + + for ( ch_idx1 = 0; ch_idx1 < PARAM_MC_MAX_TRANSPORT_CHANS; ch_idx1++ ) + { + set_zero( Cx_sum_imag[cur_param_band][ch_idx1], PARAM_MC_MAX_TRANSPORT_CHANS ); + } + } + + /* Copy current frame to memory for delay compensation */ + for ( i = 0; i < nchan_input; i++ ) + { + idx_ls = map_ls[i]; + pcm_in[i] = &input_frame_t[idx_ls][0]; + p_slot_frame_f_real[i] = &slot_frame_f_real[i][0]; + p_slot_frame_f_imag[i] = &slot_frame_f_imag[i][0]; + } + + for ( ts = 0; ts < start_ts; ts++ ) + { + ivas_fb_mixer_update_prior_input( hParamMC->hFbMixer, pcm_in, l_ts ); + for ( i = 0; i < nchan_input; i++ ) + { + pcm_in[i] += l_ts; + } + } + + for ( ts = start_ts; ts < num_time_slots; ts++ ) + { + ivas_fb_mixer_get_windowed_fr( hParamMC->hFbMixer, pcm_in, p_slot_frame_f_real, p_slot_frame_f_imag, l_ts, 2 * l_ts ); + ivas_fb_mixer_update_prior_input( hParamMC->hFbMixer, pcm_in, l_ts ); + for ( i = 0; i < nchan_input; i++ ) + { + pcm_in[i] += l_ts; + } + /* Computing the downmix */ + for ( cur_param_band = 0; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band++ ) + { + brange[0] = hParamMC->band_grouping[cur_param_band]; + brange[1] = hParamMC->band_grouping[cur_param_band + 1]; + + for ( cur_cldfb_band = brange[0]; cur_cldfb_band < brange[1]; cur_cldfb_band++ ) + { + /* Cx for DMX */ + /* Real Part */ + p_dmx_fac = hParamMC->dmx_factors; + + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) + { + dmx_real[ch_idx1] = 0.0f; + dmx_imag[ch_idx1] = 0.0f; + for ( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) + { + dmx_real[ch_idx1] += slot_frame_f_real[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); + dmx_imag[ch_idx1] += slot_frame_f_imag[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); + p_dmx_fac++; + } + } + + /* Cx for transport channels */ + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) + { + for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) + { + a = dmx_real[ch_idx1]; + b = dmx_imag[ch_idx1]; + c = dmx_real[ch_idx2]; + d = dmx_imag[ch_idx2]; + + /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ + Cx_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; + Cx_sum_imag[cur_param_band][ch_idx1][ch_idx2] += a * d - b * c; + } + } + + /* Cy for input channels */ + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) + { + for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) + { + a = slot_frame_f_real[ch_idx1][cur_cldfb_band]; + b = slot_frame_f_imag[ch_idx1][cur_cldfb_band]; + c = slot_frame_f_real[ch_idx2][cur_cldfb_band]; + d = slot_frame_f_imag[ch_idx2][cur_cldfb_band]; + + /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ + Cy_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; + Cy_sum_imag[cur_param_band][ch_idx1][ch_idx2] += a * d - b * c; + } + } + } + } + + for ( ; cur_param_band < num_parameter_bands; cur_param_band++ ) + { + brange[0] = hParamMC->band_grouping[cur_param_band]; + brange[1] = hParamMC->band_grouping[cur_param_band + 1]; + + for ( cur_cldfb_band = brange[0]; cur_cldfb_band < brange[1]; cur_cldfb_band++ ) + { + /* Cx for DMX */ + /* Real Part */ + p_dmx_fac = hParamMC->dmx_factors; + + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) + { + dmx_real[ch_idx1] = 0.0f; + dmx_imag[ch_idx1] = 0.0f; + + for ( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) + { + dmx_real[ch_idx1] += slot_frame_f_real[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); + dmx_imag[ch_idx1] += slot_frame_f_imag[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); + p_dmx_fac++; + } + } + + /* Cx for transport channels */ + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) + { + for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) + { + a = dmx_real[ch_idx1]; + b = dmx_imag[ch_idx1]; + c = dmx_real[ch_idx2]; + d = dmx_imag[ch_idx2]; + + /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ + Cx_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; + } + } + + /* Cy for input channels */ + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) + { + for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) + { + a = slot_frame_f_real[ch_idx1][cur_cldfb_band]; + b = slot_frame_f_imag[ch_idx1][cur_cldfb_band]; + c = slot_frame_f_real[ch_idx2][cur_cldfb_band]; + d = slot_frame_f_imag[ch_idx2][cur_cldfb_band]; + + /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ + Cy_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; + } + } + } + } + } + + /* make sure energy and correlation is zero above the relevant LFE bands for LFE + * avoids wrong energy in case of band combining at transients */ + if ( hParamMC->lfe_index >= 0 ) + { + for ( cur_param_band = PARAM_MC_MAX_BAND_LFE; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band++ ) + { + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) + { + Cy_sum[cur_param_band][hParamMC->lfe_index][ch_idx1] = 0.0f; + Cy_sum[cur_param_band][ch_idx1][hParamMC->lfe_index] = 0.0f; + Cy_sum_imag[cur_param_band][hParamMC->lfe_index][ch_idx1] = 0.0f; + Cy_sum_imag[cur_param_band][ch_idx1][hParamMC->lfe_index] = 0.0f; + } + } + + for ( ; cur_param_band < num_parameter_bands; cur_param_band++ ) + { + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) + { + Cy_sum[cur_param_band][hParamMC->lfe_index][ch_idx1] = 0.0f; + Cy_sum[cur_param_band][ch_idx1][hParamMC->lfe_index] = 0.0f; + } + } + } + + if ( hParamMC->hMetadataPMC.bAttackPresent ) + { + /* combine bands */ + for ( cur_param_band = 1; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band += 2 ) + { + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) + { + for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) + { + Cx_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cx_sum[cur_param_band][ch_idx1][ch_idx2]; + Cx_sum_imag[cur_param_band - 1][ch_idx1][ch_idx2] += Cx_sum_imag[cur_param_band][ch_idx1][ch_idx2]; + } + } + + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) + { + for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) + { + Cy_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cy_sum[cur_param_band][ch_idx1][ch_idx2]; + Cy_sum_imag[cur_param_band - 1][ch_idx1][ch_idx2] += Cy_sum_imag[cur_param_band][ch_idx1][ch_idx2]; + } + } + } + + for ( ; cur_param_band < num_parameter_bands; cur_param_band += 2 ) + { + if ( cur_param_band + 1 < num_parameter_bands ) + { + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) + { + for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) + { + Cx_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cx_sum[cur_param_band][ch_idx1][ch_idx2]; + } + } + + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) + { + for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) + { + Cy_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cy_sum[cur_param_band][ch_idx1][ch_idx2]; + } + } + } + } + + band_step = 2; + } + + /* map complex covariances to real values */ + for ( cur_param_band = 0; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band += band_step ) + { + /* Cx for transport channels */ + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ch_idx2++ ) + { + real_part = Cx_sum[cur_param_band][ch_idx1][ch_idx2]; + imag_part = Cx_sum_imag[cur_param_band][ch_idx1][ch_idx2]; + + /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ + Cx_sum[cur_param_band][ch_idx1][ch_idx2] = sqrtf( real_part * real_part + imag_part * imag_part ); + } + } + + /* Cy for transport channels */ + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ch_idx1++ ) + { + for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ch_idx2++ ) + { + real_part = Cy_sum[cur_param_band][ch_idx1][ch_idx2]; + imag_part = Cy_sum_imag[cur_param_band][ch_idx1][ch_idx2]; + Cy_sum[cur_param_band][ch_idx1][ch_idx2] = sqrtf( real_part * real_part + imag_part * imag_part ); + } + } + } + + if ( Cy_sum[0][LFE_CHANNEL][LFE_CHANNEL] < PARAM_MC_LFE_ON_THRESH ) + { + hParamMC->hMetadataPMC.lfe_on = 0; + } + else + { + hParamMC->hMetadataPMC.lfe_on = 1; + } + + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_enc_find_icc_map() + * + * decide which ICCs out of all possible ICCs should be sent + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_enc_find_icc_map( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + float Cx_sum[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* i : Covariance matrix for the downmixed frame */ + float Cy_sum[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix for the original frame */ + float ILD_q[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_SZ_ILD_MAP], /* i : quantized ILDs */ + const int16_t nchan_input, /* i : number of input channels */ + const int16_t nchan_transport /* i : number of transport channels */ +) +{ + float Cproto_band[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float Cx_band[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; + float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + float mapped_error[55]; /* max number of possible mappings for 7.1+4 */ + int16_t icc_map_index[PARAM_MC_SZ_ICC_MAP]; + int16_t map_idx; + float *sorted_error_desc[PARAM_MC_SZ_ICC_MAP]; + int16_t cur_param_band, k, m, i; + int16_t bandstep; + int16_t last_element, el; + int16_t num_parameter_bands; + int16_t ch_idx1, ch_idx2; + int16_t icc_map_size; + int16_t icc_map_size_wo_lfe; + float Nrqq[MAX_OUTPUT_CHANNELS]; + float a[MAX_OUTPUT_CHANNELS]; + float Cy_band[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; + + /* Initialisations */ + num_parameter_bands = hParamMC->hMetadataPMC.nbands_coded; + bandstep = hParamMC->hMetadataPMC.bAttackPresent ? 2 : 1; + set_f( mapped_error, 0.0f, 55 ); + set_s( icc_map_index, -1, PARAM_MC_SZ_ICC_MAP ); + icc_map_size_wo_lfe = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_wo_lfe; + icc_map_size = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_lfe; + + set_zero( Cy_band, nchan_input * nchan_input ); + + /* Estimate the target covariance like in the decoder using the + * already available qunantised ICLDs */ + for ( cur_param_band = 0; cur_param_band < num_parameter_bands; cur_param_band += bandstep ) + { + if ( hParamMC->hMetadataPMC.bAttackPresent || hParamMC->hMetadataPMC.coding_band_mapping[cur_param_band] == hParamMC->hMetadataPMC.param_frame_idx ) + { + /* transfer Cx_sum band to columnwise matrix */ + for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) + { + for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) + { + Cx_band[ch_idx1 + nchan_transport * ch_idx2] = Cx_sum[cur_param_band][ch_idx1][ch_idx2]; + } + } + + /* get estimated Cy from Cx and proto matrix */ + matrix_product( hParamMC->dmx_factors, nchan_input, nchan_transport, 0, + Cx_band, nchan_transport, nchan_transport, 0, + mat_mult_buffer1 ); + + matrix_product( mat_mult_buffer1, nchan_input, nchan_transport, 0, + hParamMC->dmx_factors, nchan_input, nchan_transport, 1, + Cproto_band ); + + set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); + + /*get back Nrg*/ + for ( k = 0; k < nchan_input; k++ ) + { + float ref_ener = 0.0f; + int16_t ref_channel_cnt; + int16_t ref_channel_idx; + + for ( ref_channel_cnt = 0; ref_channel_cnt < hParamMC->hMetadataPMC.ild_mapping_conf->num_ref_channels[k]; ref_channel_cnt++ ) + { + ref_channel_idx = hParamMC->hMetadataPMC.ild_mapping_conf->ref_channel_idx[k][ref_channel_cnt]; + ref_ener += Cx_band[ref_channel_idx + ref_channel_idx * nchan_transport]; + } + Nrqq[hParamMC->hMetadataPMC.ild_mapping_conf->ild_index[k]] = powf( 10, ILD_q[cur_param_band][k] / 10.0f ) * hParamMC->hMetadataPMC.ild_factors[k] * ref_ener; + } + + /* apply quantized ICLDs in the estimated covariance */ + for ( k = 0; k < nchan_input; k++ ) + { + a[k] = sqrtf( Nrqq[k] ) / ( sqrtf( Cproto_band[k + nchan_input * k] ) + EPSILON ); + v_multc( Cproto_band + k * nchan_input, a[k], Cproto_band + k * nchan_input, nchan_input ); + } + + for ( k = 0; k < nchan_input; k++ ) + { + int16_t l; + float *Cyp = Cproto_band + k; + float ap = a[k]; + + for ( l = 0; l < nchan_input; l++ ) + { + ( *Cyp ) *= ap; + Cyp += nchan_input; + } + } + + /* transfer Cy_sum band to columnwise matrix */ + for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) + { + for ( ch_idx2 = 0; ch_idx2 < nchan_input; ++ch_idx2 ) + { + Cy_band[ch_idx1 + nchan_transport * ch_idx2] = Cy_sum[cur_param_band][ch_idx1][ch_idx2]; + } + } + + /* apply quantized ICLDs on the input covariance */ + for ( k = 0; k < nchan_input; k++ ) + { + a[k] = sqrtf( Nrqq[k] ) / ( sqrtf( Cy_band[k + nchan_input * k] ) + EPSILON ); + v_multc( Cy_band + k * nchan_input, a[k], Cy_band + k * nchan_input, nchan_input ); + } + + for ( k = 0; k < nchan_input; k++ ) + { + int16_t l; + float *Cyp = Cy_band + k; + float ap = a[k]; + + for ( l = 0; l < nchan_input; l++ ) + { + ( *Cyp ) *= ap; + Cyp += nchan_input; + } + } + + /* for all possible mappings, get the cumulated error between estimated and real Cy */ + for ( map_idx = 0; map_idx < hParamMC->hMetadataPMC.icc_map_size_full - 1; map_idx++ ) + { + int16_t idx0 = hParamMC->hMetadataPMC.icc_map_full[0][map_idx]; + int16_t idx1 = hParamMC->hMetadataPMC.icc_map_full[1][map_idx]; + mapped_error[map_idx] += fabsf( Cproto_band[idx0 + idx1 * nchan_input] - Cy_band[idx0 + idx1 * nchan_input] ); + } + } + } + + /* put a small bias on the error for the past transmitted indices*/ + if ( !hParamMC->hMetadataPMC.bAttackPresent ) + { + for ( i = 0; i < icc_map_size_wo_lfe; i++ ) + { + mapped_error[hParamMC->icc_map_index[hParamMC->hMetadataPMC.param_frame_idx][i]] *= PARAM_MC_ICC_ERROR_BIAS_FAC; + } + } + + /* get the mappings with the biggest expected errors as those who will be transmitted */ + for ( i = 0; i < hParamMC->hMetadataPMC.icc_map_size_full - 1; i++ ) + { + for ( k = 0; k < icc_map_size_wo_lfe; k++ ) + { + if ( icc_map_index[k] == -1 ) + { + /* not filled yet, take the value */ + icc_map_index[k] = i; + sorted_error_desc[k] = &mapped_error[i]; + break; + } + else if ( mapped_error[i] > *sorted_error_desc[k] ) + { + /* push all others down and insert value here */ + for ( m = icc_map_size_wo_lfe - 1; m >= k + 1; m-- ) + { + icc_map_index[m] = icc_map_index[m - 1]; + sorted_error_desc[m] = sorted_error_desc[m - 1]; + } + icc_map_index[k] = i; + sorted_error_desc[k] = &mapped_error[i]; + break; + } + } + } + + /* the indices in ascending order, simple bubble sort */ + for ( last_element = icc_map_size_wo_lfe - 1; last_element >= 0; last_element-- ) + { + for ( el = 0; el < last_element; el++ ) + { + if ( icc_map_index[el] > icc_map_index[el + 1] ) + { + int16_t swp_el = icc_map_index[el]; + icc_map_index[el] = icc_map_index[el + 1]; + icc_map_index[el + 1] = swp_el; + } + } + } + + /* last icc map element is always the C/LFE icc */ + icc_map_index[icc_map_size - 1] = hParamMC->hMetadataPMC.icc_map_size_full - 1; + + /* create map and map index, map index is sorted in ascending order*/ + if ( hParamMC->hMetadataPMC.bAttackPresent ) + { + for ( k = 0; k < PARAM_MC_PARAMETER_FRAMES; k++ ) + { + for ( i = 0; i < icc_map_size; i++ ) + { + hParamMC->hMetadataPMC.icc_mapping[k][i][0] = hParamMC->hMetadataPMC.icc_map_full[0][icc_map_index[i]]; + hParamMC->hMetadataPMC.icc_mapping[k][i][1] = hParamMC->hMetadataPMC.icc_map_full[1][icc_map_index[i]]; + } + mvs2s( icc_map_index, hParamMC->icc_map_index[k], icc_map_size ); + } + } + else + { + for ( i = 0; i < icc_map_size; i++ ) + { + hParamMC->hMetadataPMC.icc_mapping[hParamMC->hMetadataPMC.param_frame_idx][i][0] = hParamMC->hMetadataPMC.icc_map_full[0][icc_map_index[i]]; + hParamMC->hMetadataPMC.icc_mapping[hParamMC->hMetadataPMC.param_frame_idx][i][1] = hParamMC->hMetadataPMC.icc_map_full[1][icc_map_index[i]]; + } + + mvs2s( icc_map_index, hParamMC->icc_map_index[hParamMC->hMetadataPMC.param_frame_idx], icc_map_size ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_quantize_ilds() + * + * Quantize the ILD parameters + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_quantize_ilds( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ + float Cx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* i : Covariance matrix of the dmx */ + const int16_t freq_idx, /* i : frequency index being processed */ + const int16_t nchan_input, /* i : number of input channels */ + const int16_t nchan_transport, /* i : number of transport channels */ + int16_t *ILD_idx_out, /* o : ILD indices */ + float ILD_q[PARAM_MC_SZ_ILD_MAP] /* o : Quanzited ILD matrix */ +) +{ + int16_t k; + int16_t Ny; + int16_t num_ilds_to_code; + int16_t ild_map_size; + float Nrg[MAX_CICP_CHANNELS]; + float ILD[PARAM_MC_SZ_ILD_MAP]; + const PARAM_MC_ILD_MAPPING *h_ild_mapping; + float tot_ener, dmx_ener, ener_fac, delta_fac; + int16_t ILD_idx[PARAM_MC_SZ_ILD_MAP]; + + wmops_sub_start( "param_mc_prm_q" ); + + /* Initialization */ + set_zero( Nrg, MAX_CICP_CHANNELS ); + set_zero( ILD, PARAM_MC_SZ_ILD_MAP ); + + Ny = nchan_input; + + h_ild_mapping = hParamMC->hMetadataPMC.ild_mapping_conf; + ild_map_size = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; + if ( freq_idx >= PARAM_MC_MAX_BAND_LFE ) + { + num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_wo_lfe; + } + else + { + num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; + } + + /* Downsampling */ + if ( ( hParamMC->hMetadataPMC.bAttackPresent == 0 ) && ( hParamMC->hMetadataPMC.param_frame_idx != hParamMC->hMetadataPMC.coding_band_mapping[freq_idx] ) ) + { + wmops_sub_end(); + + return; + } + + /* get ICLDs */ + for ( k = 0; k < Ny; ++k ) + { + Nrg[k] = Cy[k][k]; + } + + /* limit ILDs if DMX energy is lower than sum of channel energies */ + tot_ener = 0.0f; + dmx_ener = 0.0f; + + for ( k = 0; k < ild_map_size; k++ ) + { + if ( k != hParamMC->lfe_index || hParamMC->hMetadataPMC.lfe_on ) + { + tot_ener += Nrg[k]; + } + } + + for ( k = 0; k < nchan_transport; k++ ) + { + dmx_ener += Cx[k][k]; + } + ener_fac = 10.0f * log10f( ( tot_ener + EPSILON ) / ( dmx_ener + EPSILON ) ); + + if ( ener_fac > PARAM_MC_ENER_LIMIT_INTRAFRAME ) + { + float limit_fac; + limit_fac = powf( 10.0f, ( ( 0.3f * logf( ener_fac - PARAM_MC_ENER_LIMIT_INTRAFRAME + 1.0f ) - ( ener_fac - PARAM_MC_ENER_LIMIT_INTRAFRAME ) ) / 10.0f ) ); + v_multc( Nrg, limit_fac, Nrg, num_ilds_to_code ); + } + + + /* limit ILD jumps in non-tranient frames */ + tot_ener = 0.0f; + dmx_ener = 0.0f; + + for ( k = 0; k < ild_map_size; k++ ) + { + if ( k != hParamMC->lfe_index || hParamMC->hMetadataPMC.lfe_on ) + { + tot_ener += Nrg[k]; + } + } + + for ( k = 0; k < nchan_transport; k++ ) + { + dmx_ener += Cx[k][k]; + } + + ener_fac = 10.0f * log10f( ( tot_ener + EPSILON ) / ( dmx_ener + EPSILON ) ); + delta_fac = ener_fac - hParamMC->ener_fac[freq_idx]; + + if ( !hParamMC->hMetadataPMC.bAttackPresent && ( delta_fac > PARAM_MC_ENER_LIMIT_INTERFRAME ) ) + { + float limit_fac; + limit_fac = powf( 10.0f, ( ( 0.3f * logf( delta_fac - PARAM_MC_ENER_LIMIT_INTERFRAME + 1.0f ) - ( delta_fac - PARAM_MC_ENER_LIMIT_INTERFRAME ) ) / 10.0f ) ); + v_multc( Nrg, limit_fac, Nrg, num_ilds_to_code ); + ener_fac += 10.0f * log10f( limit_fac ); + } + + hParamMC->ener_fac[freq_idx] = ener_fac; + + for ( k = 0; k < num_ilds_to_code; ++k ) + { + float ref_ener = 0.0f; + int16_t ref_channel_cnt; + int16_t ref_channel_idx; + + for ( ref_channel_cnt = 0; ref_channel_cnt < h_ild_mapping->num_ref_channels[k]; ref_channel_cnt++ ) + { + ref_channel_idx = h_ild_mapping->ref_channel_idx[k][ref_channel_cnt]; + ref_ener += Cx[ref_channel_idx][ref_channel_idx]; + } + ILD[k] = 10.0f * log10f( ( Nrg[h_ild_mapping->ild_index[k]] + EPSILON ) / ( hParamMC->hMetadataPMC.ild_factors[k] * ref_ener + EPSILON ) ); + } + + /* quantize parameters */ + ivas_param_mc_parameter_quantizer( ILD, num_ilds_to_code, hParamMC->hMetadataPMC.ild_coding.quantizer_size, hParamMC->hMetadataPMC.ild_coding.quantizer, ILD_idx, ILD_q ); + + /* Save current quantized ICLDs */ + mvs2s( ILD_idx, ILD_idx_out + freq_idx * ild_map_size, num_ilds_to_code ); + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_quantize_iccs() + * + * Quantize the ILD parameters + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_quantize_iccs( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ + const int16_t freq_idx, /* i : frequency index being processed */ + const int16_t nchan_input, /* i : number of input channels */ + int16_t *ICC_idx_out /* o : quantizer indices */ +) +{ + int16_t i, k; + int16_t Ny; + int16_t num_iccs_to_code; + int16_t icc_map_size; + float a; + int16_t tmp_map[2]; + float Nrg[MAX_CICP_CHANNELS]; + float ICC_vect[PARAM_MC_SZ_ICC_MAP]; + float ICC_vect_q[PARAM_MC_SZ_ICC_MAP]; + int16_t ICC_idx[PARAM_MC_SZ_ICC_MAP]; + + /* Initialization */ + set_zero( Nrg, MAX_CICP_CHANNELS ); + set_zero( ICC_vect, PARAM_MC_SZ_ICC_MAP ); + set_zero( ICC_vect_q, PARAM_MC_SZ_ICC_MAP ); + + Ny = nchan_input; + + /* Downsampling */ + if ( ( hParamMC->hMetadataPMC.bAttackPresent == 0 ) && ( hParamMC->hMetadataPMC.param_frame_idx != hParamMC->hMetadataPMC.coding_band_mapping[freq_idx] ) ) + { + return; + } + + icc_map_size = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_lfe; + num_iccs_to_code = icc_map_size; + + if ( freq_idx >= PARAM_MC_MAX_BAND_LFE ) + { + num_iccs_to_code = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_wo_lfe; + } + + /* Get ICC matrix from Cy */ + for ( k = 0; k < Ny; ++k ) + { + Nrg[k] = Cy[k][k]; + a = 1.0f / ( sqrtf( Nrg[k] ) + EPSILON ); + + for ( i = k; i < Ny; ++i ) + { + Cy[k][i] = Cy[k][i] * a; + } + + for ( i = 0; i <= k; i++ ) + { + Cy[i][k] = Cy[i][k] * a; + } + } + + /* set ICCs for zero channels to 1 to avoid artifacts in the decoded signal */ + for ( k = 0; k < Ny; ++k ) + { + if ( Nrg[k] == 0.0f ) + { + for ( i = k; i < Ny; ++i ) + { + Cy[k][i] = 1.0f; + } + + for ( i = 0; i <= k; ++i ) + { + Cy[i][k] = 1.0f; + } + } + } + + /* Reduce set of parameters and quantize them */ + for ( k = 0; k < num_iccs_to_code; ++k ) + { + tmp_map[0] = hParamMC->hMetadataPMC.icc_mapping[hParamMC->hMetadataPMC.param_frame_idx][k][0]; + tmp_map[1] = hParamMC->hMetadataPMC.icc_mapping[hParamMC->hMetadataPMC.param_frame_idx][k][1]; + ICC_vect[k] = Cy[tmp_map[0]][tmp_map[1]]; + } + + /* Quantization */ + ivas_param_mc_parameter_quantizer( ICC_vect, num_iccs_to_code, hParamMC->hMetadataPMC.icc_coding.quantizer_size, hParamMC->hMetadataPMC.icc_coding.quantizer, ICC_idx, ICC_vect_q ); + + /* Save current quantized ICCs */ + mvs2s( ICC_idx, ICC_idx_out + freq_idx * icc_map_size, num_iccs_to_code ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_parameter_quantizer() + * + * Parameter Quantization + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_parameter_quantizer( + const float *x, /* i : input sequence */ + const int16_t L, /* i : input length */ + const int16_t sz_quantizer, /* i : quantizer size */ + const float *quantizer, /* i : quantizer table */ + int16_t *quant_idx, /* o : quant indices */ + float *y /* o : output sequence */ +) +{ + int16_t idx, i; + int16_t idx_min; + float tmp_min; + + set_f( y, 0.0f, L ); + idx_min = 0; + + for ( idx = 0; idx < L; ++idx ) + { + tmp_min = 1000.0f; + for ( i = 0; i < sz_quantizer; ++i ) + { + if ( fabsf( x[idx] - quantizer[i] ) < tmp_min ) + { + tmp_min = fabsf( x[idx] - quantizer[i] ); + idx_min = i; + } + } + + y[idx] = quantizer[idx_min]; + quant_idx[idx] = idx_min; + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_transient_detection() + * + * Detect if the current frame has a transient + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_transient_detection( + PARAM_MC_ENC_HANDLE hParamMC, /* i : Parametric MC encoder handle */ + TRAN_DET_HANDLE hTranDet, /* i : Transient detector handle from core coder for a transport channel */ + int16_t *pbIsAttackPresent, /* o : Flag for indicating a found transient */ + int16_t *pAttackIndex /* o : Attack position (0 if no attack) */ +) +{ + int16_t i; + int16_t bIsAttackPresent, attackIndex; + float *pSubblockNrg; + float *pAccSubblockNrg; + float attackRatioThreshold; + + wmops_sub_start( "param_mc_trn_det" ); + + attackRatioThreshold = hTranDet->transientDetector.attackRatioThreshold; + pSubblockNrg = &hTranDet->subblockEnergies.subblockNrg[hParamMC->transient_detector_delay]; + pAccSubblockNrg = &hTranDet->subblockEnergies.accSubblockNrg[hParamMC->transient_detector_delay]; + + bIsAttackPresent = FALSE; + attackIndex = 16; + + /* Search for the last attack in the subblocks, + * if we had an attack very late in the last frame, + * make the current frame also a transient one... */ + if ( ( pSubblockNrg[-1] > pAccSubblockNrg[-1] * attackRatioThreshold ) || ( pSubblockNrg[-2] > pAccSubblockNrg[-2] * attackRatioThreshold ) ) + { + bIsAttackPresent = TRUE; + attackIndex = 0; + } + + for ( i = 0; i < NSUBBLOCKS; i++ ) + { + if ( pSubblockNrg[i] > pAccSubblockNrg[i] * attackRatioThreshold ) + { + bIsAttackPresent = TRUE; + attackIndex = i; + } + } + + /* avoid post-echos on click sounds (very short transients) due to TNS aliasing */ + *pAttackIndex = attackIndex; + *pbIsAttackPresent = bIsAttackPresent; + + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_entropy_encoder() + * + * Write the metadata bitstream + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_write_bs( + const PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder Handle */ + int16_t *ILD_idx, /* i : ILD quantizer indices sequence */ + int16_t *ICC_idx, /* i : ICC quantizer indices sequence */ + uint16_t bit_buffer[PARAM_MC_MAX_BITS], /* o : Output bit buffer */ + int16_t *bit_pos /* o : Number of bits used */ +) +{ + int16_t i, pos; + int16_t nbands; + int16_t band_step; + int16_t seq_tmp[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP]; + float seq_tmp_uni[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP]; + int16_t icc_map_size_wo_lfe; + int16_t icc_map_size; + int16_t ild_map_size_wo_lfe; + int16_t ild_map_size; + + wmops_sub_start( "param_mc_prm_enc" ); + + /* Init */ + set_zero( seq_tmp_uni, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP ); + set_s( seq_tmp, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP ); + nbands = hParamMC->hMetadataPMC.nbands_in_param_frame[hParamMC->hMetadataPMC.param_frame_idx]; + icc_map_size_wo_lfe = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_wo_lfe; + icc_map_size = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_lfe; + ild_map_size_wo_lfe = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_wo_lfe; + ild_map_size = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; + + /*-----------------------------------------------------------------* + * Signaling bits + *-----------------------------------------------------------------*/ + + /* reserved bit */ + bit_buffer[( *bit_pos )++] = hParamMC->hMetadataPMC.lfe_on; + + /* write coded band width */ + i = hParamMC->hMetadataPMC.coded_bwidth; + for ( pos = 0; pos < 2; pos++ ) + { + bit_buffer[( *bit_pos )++] = (uint16_t) ( ( i >> pos ) & 1 ); + } + + /* write param frame indicator */ + bit_buffer[( *bit_pos )++] = hParamMC->hMetadataPMC.param_frame_idx; + + /* write transient frame indicator */ + bit_buffer[( *bit_pos )++] = hParamMC->hMetadataPMC.bAttackPresent; + + band_step = 1; + if ( hParamMC->hMetadataPMC.bAttackPresent ) + { + band_step = PARAM_MC_TRANSIENT_BAND_STEP; + for ( pos = 2; pos >= 0; --pos ) + { + bit_buffer[( *bit_pos )++] = (uint16_t) ( ( hParamMC->hMetadataPMC.attackIndex >> pos ) & 1 ); + } + nbands = hParamMC->hMetadataPMC.nbands_coded / band_step + ( ( hParamMC->hMetadataPMC.nbands_coded % band_step ) ? 1 : 0 ); + } + + /* Encoding of the ICC mapping done as simple bitmap */ + if ( hParamMC->hMetadataPMC.flag_use_adaptive_icc_map == 1 ) + { + uint16_t *bit_buffer_icc_mapping = &bit_buffer[*bit_pos]; + + for ( i = 0; i < hParamMC->hMetadataPMC.icc_map_size_full - 1; i++ ) + { + bit_buffer_icc_mapping[i] = 0; + } + + for ( i = 0; i < icc_map_size_wo_lfe; i++ ) + { + bit_buffer_icc_mapping[hParamMC->icc_map_index[hParamMC->hMetadataPMC.param_frame_idx][i]] = 1; + } + + *bit_pos += hParamMC->hMetadataPMC.icc_map_size_full - 1; + } + + ivas_param_mc_encode_parameter( ICC_idx, &hParamMC->hMetadataPMC, &hParamMC->hMetadataPMC.icc_coding, + nbands, band_step, icc_map_size_wo_lfe, icc_map_size, bit_buffer, bit_pos ); + + ivas_param_mc_encode_parameter( ILD_idx, &hParamMC->hMetadataPMC, &hParamMC->hMetadataPMC.ild_coding, + nbands, band_step, ild_map_size_wo_lfe, ild_map_size, bit_buffer, bit_pos ); + wmops_sub_end(); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_encode_parameter() + * + * (entropy) encode a sequence of parameter indices + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_encode_parameter( + int16_t *quant_idx, /* i : indices sequence to encode */ + HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, /* i : Parametric MC metadata handle */ + HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParameterCodingInfo, /* i : parameter quantization and coding info */ + const int16_t nbands, /* i : number of parameter bands to encode */ + const int16_t band_step, /* i : parameter band step */ + const int16_t map_size_wo_lfe, /* i : number of parameters per band (w/o LFE) */ + const int16_t map_size, /* i : number of parameters per band */ + uint16_t bit_buffer[PARAM_MC_MAX_BITS], /* o : Output bit buffer */ + int16_t *bit_pos /* o : Number of bits used */ +) +{ + int16_t sz_seq; + int16_t idx_prev; + int16_t idx_offset; + int16_t bit_cnt_uni; + int16_t bit_cnt_range; + int16_t bit_cnt_range_diff; + int16_t bit_cnt_range_min; + int16_t bit_pos_tmp; + int16_t i, j; + int16_t idx; + int16_t seq_delta[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; + int16_t seq[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; + uint16_t tmp_bit_buffer[PARAM_MC_MAX_BITS]; + uint16_t tmp_bit_buffer_diff[PARAM_MC_MAX_BITS]; + + /* Inits */ + sz_seq = nbands * ( map_size_wo_lfe ); + + /* Computing Delta Sequence */ + idx_prev = hParameterCodingInfo->quantizer_size / 2 + hParameterCodingInfo->quantizer_size % 2 - 1; + idx_offset = hParameterCodingInfo->quantizer_size - 1; + + for ( j = 0; j < map_size_wo_lfe; ++j ) + { + int16_t coding_band = 0; + + for ( i = 0; i < hMetadataPMC->nbands_coded; i += band_step ) + { + if ( hMetadataPMC->bAttackPresent || hMetadataPMC->param_frame_idx == hMetadataPMC->coding_band_mapping[i] ) + { + idx = quant_idx[i * map_size + j]; + seq[coding_band + j * nbands] = idx; + seq_delta[coding_band + j * nbands] = idx - idx_prev + idx_offset; + idx_prev = idx; + coding_band++; + } + } + } + + /* LFE */ + if ( hMetadataPMC->lfe_on ) + { + for ( i = 0; i < PARAM_MC_MAX_BAND_LFE; i += band_step ) + { + if ( hMetadataPMC->bAttackPresent || hMetadataPMC->param_frame_idx == hMetadataPMC->coding_band_mapping[i] ) + { + /* LFE ICC is always the last ICC in coding band 0 */ + idx = quant_idx[( i + 1 ) * map_size - 1]; + seq[sz_seq] = idx; + seq_delta[sz_seq] = idx - idx_prev + idx_offset; + idx_prev = idx; + sz_seq++; + } + } + } + +#ifdef DEBUG_MODE_PARAM_MC + dbgwrite( seq, sizeof( int16_t ), sz_seq, 1, "./res/param_mc_quant_param_idx_enc.dat" ); +#endif + + bit_cnt_uni = sz_seq * hParameterCodingInfo->uni_bits - 1; /* -1 for the additional diff/direct signalling bit for the range encoder*/ + + /* code the direct index sequence */ + ivas_param_mc_range_encoder( seq, sz_seq, hParameterCodingInfo->cum_freq, hParameterCodingInfo->sym_freq, PARAM_MC_RANGE_CODER_TOT_SHIFT, bit_cnt_uni, &tmp_bit_buffer[0], &bit_cnt_range ); + + /* Coding the delta index sequence */ + ivas_param_mc_range_encoder( seq_delta, sz_seq, hParameterCodingInfo->cum_freq_delta, hParameterCodingInfo->sym_freq_delta, PARAM_MC_RANGE_CODER_TOT_SHIFT, bit_cnt_uni, &tmp_bit_buffer_diff[0], &bit_cnt_range_diff ); + + bit_cnt_range_min = min( bit_cnt_range, bit_cnt_range_diff ); + + /* uniform fallback */ + if ( bit_cnt_range_min > bit_cnt_uni ) + { + /* Uniform coding is used */ + bit_buffer[( *bit_pos )++] = 0; + bit_pos_tmp = 0; + + for ( i = 0; i < sz_seq; ++i ) + { + ivas_param_mc_dec2bin( seq[i], hParameterCodingInfo->uni_bits, &bit_buffer[*( bit_pos ) + bit_pos_tmp] ); + bit_pos_tmp += hParameterCodingInfo->uni_bits; + } + *bit_pos = *bit_pos + bit_pos_tmp; + } + else + { + /* Range Coding is used */ + bit_buffer[( *bit_pos )++] = 1; + if ( bit_cnt_range_diff < bit_cnt_range ) + { + bit_buffer[( *bit_pos )++] = 1; + for ( i = 0; i < bit_cnt_range_diff; i++ ) + { + bit_buffer[( *bit_pos )++] = tmp_bit_buffer_diff[i]; + } + } + else + { + bit_buffer[( *bit_pos )++] = 0; + for ( i = 0; i < bit_cnt_range; i++ ) + { + bit_buffer[( *bit_pos )++] = tmp_bit_buffer[i]; + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec2bin() + * + * Decimal to binary routine + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_dec2bin( + const int16_t val, /* i : value to encode */ + const int16_t N, /* i : number of bits for encoding the value */ + uint16_t bits[PARAM_MC_MAX_BITS] ) /* o : encoded bits buffer */ +{ + int16_t idx; + + idx = 0; + /* convert value to bitstream, MSB first */ + for ( idx = 0; idx < N; idx++ ) + { + bits[idx] = ( val >> ( N - 1 - idx ) ) & 1; + } + return; +} + + +/*-------------------------------------------------------------------* + * ivas_param_mc_range_encoder() + * + * Parametric MC Range encoder + *-------------------------------------------------------------------*/ + +static void ivas_param_mc_range_encoder( + const int16_t *seq_in, /* i : input sequence */ + const int16_t num_symbols, /* i : Number of symbole to encode */ + const uint16_t *cum_freq, /* i : cumulated frequencies */ + const uint16_t *sym_freq, /* i : symbol frequencies */ + const uint16_t tot_shift, /* i : max cumulative freq as power of 2 */ + const int16_t max_nb_bits, /* i : Maximum number of bits allowed */ + uint16_t *bit_buffer, /* o : output bit buffer */ + int16_t *bit_pos /* o : number of bits used */ +) +{ + RangeUniEncState rc_st_enc; + int16_t rc_tot_bits; /* No. of bits returned by range coder */ + int16_t i; + uint8_t k, byte; + uint16_t *bits; + + /* Initialize range encoder */ + rc_uni_enc_init( &rc_st_enc ); + + /* Main loop over the length of the sequence */ + for ( i = 0; i < num_symbols; ++i ) + { + rc_uni_enc_encode_symbol_fastS( &rc_st_enc, (uint16_t) seq_in[i], cum_freq, sym_freq, tot_shift ); + + if ( rc_uni_enc_virtual_finish( &rc_st_enc ) > max_nb_bits ) + { + /* we alread have exceeded the maximum number of bits allowed, i.e. the uniform fallback */ + *bit_pos = MAX_BITS_PER_FRAME; + return; + } + } + + /* Finish range encoder */ + rc_tot_bits = rc_uni_enc_finish( &rc_st_enc ); /* No. of bits consumed by range coder */ + + /* Push range coded bits from byte_buffer to bitstream */ + + /* 1) Push all complete bytes, one byte at a time */ + for ( i = 0; i < ( rc_tot_bits >> 3 ); ++i ) + { + /* use rc_st_enc.byte_buffer */ + bits = &bit_buffer[i * 8]; + + byte = rc_st_enc.byte_buffer[i]; + + bits[0] = ( byte >> 7 ) & 1; + bits[1] = ( byte >> 6 ) & 1; + bits[2] = ( byte >> 5 ) & 1; + bits[3] = ( byte >> 4 ) & 1; + bits[4] = ( byte >> 3 ) & 1; + bits[5] = ( byte >> 2 ) & 1; + bits[6] = ( byte >> 1 ) & 1; + bits[7] = byte & 1; + } + + /* 2) Push remaining bits */ + if ( ( rc_tot_bits & 7 ) != 0 ) + { + uint8_t rem_bits = rc_tot_bits & 7; + + bits = &bit_buffer[i * 8]; + byte = rc_st_enc.byte_buffer[i]; + + for ( k = 0; k < rem_bits; k++ ) + { + bits[k] = ( byte >> ( 7 - k ) ) & 1; + } + } + + /* Update output number of bits */ + *bit_pos = rc_tot_bits; + + return; +} diff --git a/lib_enc/ivas_mcmasa_enc.c b/lib_enc/ivas_mcmasa_enc.c new file mode 100644 index 0000000000..595f758e51 --- /dev/null +++ b/lib_enc/ivas_mcmasa_enc.c @@ -0,0 +1,1565 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include + +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "options.h" +#include "prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define NEAR_HORIZONTAL_PLANE_ELEVATION 17.5f +#define VERTICAL_ENERGY_RATIO_OFFSET 0.15f + + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +/* Structure for covariance matrix */ +typedef struct +{ + float xr[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; + float xi[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; +} CovarianceMatrix; + +static void ivas_mcmasa_dmx( MCMASA_ENC_HANDLE hMcMasa, float data_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_transport, const int16_t nchan_inp ); + +static void compute_cov_mtx( float sr[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], float si[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], const int16_t freq, const int16_t N, CovarianceMatrix *COVls ); + +static void computeIntensityVector_enc( const int16_t *band_grouping, float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], const int16_t enc_param_start_band, /* i: first band to process */ + const int16_t num_frequency_bands, + float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] ); + +static void computeVerticalDiffuseness( float **buffer_intensity, const float *buffer_energy, const int16_t averaging_length, const int16_t num_freq_bands, float *diffuseness ); + +static void computeEvenLayout( const float *ls_azimuth, float *ls_azimuth_even, const int16_t numChannels ); + +static void computeLfeEnergy( MCMASA_ENC_HANDLE hMcMasa, float data_f[][L_FRAME48k], const int16_t input_frame ); + + +/*--------------------------------------------------------------------------* + * ivas_mcmasa_enc_open() + * + * + *--------------------------------------------------------------------------*/ + +ivas_error ivas_mcmasa_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +) +{ + int16_t i, j; + float tmp_f; + MCMASA_ENC_HANDLE hMcMasa; + MASA_ENCODER_HANDLE hMasa; + float ls_azimuth[MCMASA_MAX_ANA_CHANS]; + float ls_elevation[MCMASA_MAX_ANA_CHANS]; + float ls_azimuth_even[MCMASA_MAX_ANA_CHANS]; + int16_t numAnalysisChannels; + float left_min, right_min, azi_diff; + const int16_t *band_mapping; + int16_t maxBin, input_frame; + int16_t nchan_inp; + int32_t input_Fs; + int32_t dirac_slot_ns; + IVAS_FB_CFG *fb_cfg, *fb_cfgLfe; + ivas_error error; + + error = IVAS_ERR_OK; + + assert( st_ivas->hMasa != NULL && "MASA encoder handle is not present" ); + hMasa = st_ivas->hMasa; + + if ( NULL == ( hMcMasa = (MCMASA_ENC_HANDLE) count_malloc( sizeof( MCMASA_ENC_DATA ) ) ) ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); + } + + nchan_inp = st_ivas->hEncoderConfig->nchan_inp; + input_Fs = st_ivas->hEncoderConfig->input_Fs; + + /* Determine if to separate some channels from the analysis */ + ivas_mcmasa_set_separate_channel_mode( &( hMcMasa->separateChannelEnabled ), &( hMcMasa->separateChannelIndex ), st_ivas->hEncoderConfig->ivas_total_brate ); + + numAnalysisChannels = nchan_inp - 1; + if ( hMcMasa->separateChannelEnabled ) + { + numAnalysisChannels = nchan_inp - 2; + } + + /* With McMASA, we config MASA encoder only in init as we know the input and there are no frame-by-frame changes currently. */ + if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /* Determine the number of bands */ + hMcMasa->nbands = st_ivas->hMasa->config.numCodingBands; + hMcMasa->nCodingBands = st_ivas->hMasa->config.numCodingBands; + + /* Determine band grouping */ + if ( hMcMasa->nbands == 24 ) + { + for ( i = 0; i < hMcMasa->nbands + 1; i++ ) + { + hMcMasa->band_grouping[i] = MASA_band_grouping_24[i] * CLDFB_TO_MDFT_FAC; + } + } + else + { + band_mapping = hMasa->data.band_mapping; + for ( i = 0; i < hMcMasa->nbands + 1; i++ ) + { + hMcMasa->band_grouping[i] = MASA_band_grouping_24[band_mapping[i]] * CLDFB_TO_MDFT_FAC; + } + } + + maxBin = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH * CLDFB_TO_MDFT_FAC + 0.5f ); + + for ( i = 1; i < hMcMasa->nbands + 1; i++ ) + { + if ( hMcMasa->band_grouping[i] >= maxBin ) + { + hMcMasa->band_grouping[i] = maxBin; + hMcMasa->nbands = i; + break; + } + } + + /* initialize delay compensation */ + hMcMasa->num_samples_delay_comp = NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS ); +#ifdef DISABLE_DIRAC_DELAY_COMP + hMcMasa->num_samples_delay_comp = 0; /* disable delay compensation by setting to 0 */ +#endif + tmp_f = (float) hMcMasa->num_samples_delay_comp / (float) ( NS2SA( input_Fs, DIRAC_SLOT_ENC_NS ) ); + hMcMasa->num_slots_delay_comp = (int16_t) ( tmp_f ); + + if ( tmp_f > (float) hMcMasa->num_slots_delay_comp ) + { + hMcMasa->num_slots_delay_comp++; + hMcMasa->offset_comp = -hMcMasa->num_samples_delay_comp; + hMcMasa->num_samples_delay_comp = hMcMasa->num_slots_delay_comp * NS2SA( input_Fs, DIRAC_SLOT_ENC_NS ); + hMcMasa->offset_comp += hMcMasa->num_samples_delay_comp; + } + else + { + hMcMasa->offset_comp = 0; + } + + /* set FB config. */ + if ( ( error = ivas_fb_set_cfg( &fb_cfg, MASA_FORMAT, SBA_MODE_NONE, numAnalysisChannels, 0, 0, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Allocate and initialize FB mixer handle */ + if ( ( error = ivas_FB_mixer_open( &( hMcMasa->hFbMixer ), input_Fs, fb_cfg ) ) != IVAS_ERR_OK ) + { + return error; + } + + + if ( hMcMasa->separateChannelEnabled ) + { + /* TD Energy calculation with LP */ + hMcMasa->delay_buffer_lfe[0] = (float *) count_malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ); + set_zero( hMcMasa->delay_buffer_lfe[0], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) ); + hMcMasa->delay_buffer_lfe[1] = (float *) count_malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ); + set_zero( hMcMasa->delay_buffer_lfe[1], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) ); + hMcMasa->hFbMixerLfe = NULL; + } + else + { + /* Allocate and initialize FB mixer handle for LFE channel */ + if ( ( error = ivas_fb_set_cfg( &fb_cfgLfe, MASA_FORMAT, SBA_MODE_NONE, 1, 0, 0, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = ivas_FB_mixer_open( &( hMcMasa->hFbMixerLfe ), input_Fs, fb_cfgLfe ) ) != IVAS_ERR_OK ) + { + return error; + } + + hMcMasa->delay_buffer_lfe[0] = NULL; + hMcMasa->delay_buffer_lfe[1] = NULL; + } + + if ( hMcMasa->separateChannelEnabled ) + { + int16_t bufferSize; + + /* Ring buffer for the filterbank of the LFE analysis. + * The filterbank is using moving average lowpass filter with the crossover of 120 Hz. */ + bufferSize = (int16_t) ( ( input_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES ); + for ( i = 0; i < 2; i++ ) + { + hMcMasa->lfeAnaRingBuffer[i] = (float *) count_malloc( bufferSize * sizeof( float ) ); + set_zero( hMcMasa->lfeAnaRingBuffer[i], bufferSize ); + hMcMasa->lowpassSum[i] = 0.0f; + } + hMcMasa->ringBufferPointer = 0; + hMcMasa->ringBufferSize = bufferSize; + } + + + dirac_slot_ns = DIRAC_SLOT_ENC_NS; + + /* intensity 3-dim */ + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + hMcMasa->direction_vector_m[i] = (float **) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); + + for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + hMcMasa->direction_vector_m[i][j] = (float *) count_malloc( hMcMasa->nbands * sizeof( float ) ); + } + } + + hMcMasa->no_col_avg_diff = (int8_t) ( DIRAC_NO_COL_AVG_DIFF_NS / dirac_slot_ns ); + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + hMcMasa->buffer_intensity_real[i] = (float **) count_malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ); + for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) + { + hMcMasa->buffer_intensity_real[i][j] = (float *) count_malloc( hMcMasa->nbands * sizeof( float ) ); + set_zero( hMcMasa->buffer_intensity_real[i][j], hMcMasa->nbands ); + } + } + + hMcMasa->buffer_intensity_real_vert = (float **) count_malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ); + for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) + { + hMcMasa->buffer_intensity_real_vert[j] = (float *) count_malloc( hMcMasa->nbands * sizeof( float ) ); + set_zero( hMcMasa->buffer_intensity_real_vert[j], hMcMasa->nbands ); + } + + hMcMasa->buffer_energy = (float *) count_malloc( hMcMasa->nbands * hMcMasa->no_col_avg_diff * sizeof( float ) ); + set_zero( hMcMasa->buffer_energy, hMcMasa->nbands * hMcMasa->no_col_avg_diff ); + + if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1 ) + { + mvr2r( ls_azimuth_CICP6, ls_azimuth, nchan_inp - 1 ); + mvr2r( ls_elevation_CICP6, ls_elevation, nchan_inp - 1 ); + hMcMasa->numHorizontalChannels = 5; + hMcMasa->isHorizontalSetup = 1; + } + else if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_7_1 ) + { + mvr2r( ls_azimuth_CICP12, ls_azimuth, nchan_inp - 1 ); + mvr2r( ls_elevation_CICP12, ls_elevation, nchan_inp - 1 ); + hMcMasa->numHorizontalChannels = 7; + hMcMasa->isHorizontalSetup = 1; + } + else if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1_2 ) + { + mvr2r( ls_azimuth_CICP14, ls_azimuth, nchan_inp - 1 ); + mvr2r( ls_elevation_CICP14, ls_elevation, nchan_inp - 1 ); + hMcMasa->numHorizontalChannels = 5; + hMcMasa->isHorizontalSetup = 0; + } + else if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1_4 ) + { + mvr2r( ls_azimuth_CICP16, ls_azimuth, nchan_inp - 1 ); + mvr2r( ls_elevation_CICP16, ls_elevation, nchan_inp - 1 ); + hMcMasa->numHorizontalChannels = 5; + hMcMasa->isHorizontalSetup = 0; + } + else + { + mvr2r( ls_azimuth_CICP19, ls_azimuth, nchan_inp - 1 ); + mvr2r( ls_elevation_CICP19, ls_elevation, nchan_inp - 1 ); + hMcMasa->numHorizontalChannels = 7; + hMcMasa->isHorizontalSetup = 0; + } + + if ( hMcMasa->separateChannelEnabled ) + { + mvr2r( &ls_azimuth[hMcMasa->separateChannelIndex + 1], &ls_azimuth[hMcMasa->separateChannelIndex], numAnalysisChannels - hMcMasa->separateChannelIndex ); + mvr2r( &ls_elevation[hMcMasa->separateChannelIndex + 1], &ls_elevation[hMcMasa->separateChannelIndex], numAnalysisChannels - hMcMasa->separateChannelIndex ); + hMcMasa->numHorizontalChannels--; + } + + computeEvenLayout( ls_azimuth, ls_azimuth_even, hMcMasa->numHorizontalChannels ); + if ( !hMcMasa->isHorizontalSetup ) + { + computeEvenLayout( &ls_azimuth[hMcMasa->numHorizontalChannels], &ls_azimuth_even[hMcMasa->numHorizontalChannels], numAnalysisChannels - hMcMasa->numHorizontalChannels ); + } + + for ( i = 0; i < numAnalysisChannels; i++ ) + { + hMcMasa->chnlToFoaMtx[0][i] = 1.0f; + hMcMasa->chnlToFoaMtx[1][i] = sinf( ls_azimuth[i] * PI_OVER_180 ) * cosf( ls_elevation[i] * PI_OVER_180 ); + hMcMasa->chnlToFoaMtx[2][i] = sinf( ls_elevation[i] * PI_OVER_180 ); + hMcMasa->chnlToFoaMtx[3][i] = cosf( ls_azimuth[i] * PI_OVER_180 ) * cosf( ls_elevation[i] * PI_OVER_180 ); + + hMcMasa->chnlToFoaEvenMtx[0][i] = 1.0f; + hMcMasa->chnlToFoaEvenMtx[1][i] = sinf( ls_azimuth_even[i] * PI_OVER_180 ); + hMcMasa->chnlToFoaEvenMtx[2][i] = 0.0f; + hMcMasa->chnlToFoaEvenMtx[3][i] = cosf( ls_azimuth_even[i] * PI_OVER_180 ); + } + + hMcMasa->combineRatios = hMasa->config.mergeRatiosOverSubframes; + + mvr2r( ls_azimuth, hMcMasa->ls_azimuth, numAnalysisChannels ); + + for ( i = 0; i < hMcMasa->numHorizontalChannels; i++ ) + { + left_min = 360.0f; + right_min = -360.0f; + + for ( j = 0; j < hMcMasa->numHorizontalChannels; j++ ) + { + azi_diff = ls_azimuth[j] - ls_azimuth[i]; + + if ( azi_diff > 180.0f ) + { + azi_diff -= 360.0f; + } + else if ( azi_diff < -180.0f ) + { + azi_diff += 360.0f; + } + + if ( azi_diff < left_min && azi_diff > 0.0f ) + { + hMcMasa->leftNearest[i] = j; + left_min = azi_diff; + } + + if ( azi_diff > right_min && azi_diff < 0.0f ) + { + hMcMasa->rightNearest[i] = j; + right_min = azi_diff; + } + } + } + + hMcMasa->prevMultiChEne = 0.0f; + hMcMasa->prevDownmixEne = 0.0f; + hMcMasa->prevEQ = 1.0f; + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + for ( i = 0; i < input_frame; i++ ) + { + hMcMasa->interpolator[i] = ( (float) i ) / ( (float) input_frame ); + } + + mvs2s( DirAC_block_grouping_5ms_MDFT, hMcMasa->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); + + hMcMasa->index_buffer_intensity = 0; + + st_ivas->hMcMasa = hMcMasa; + + return error; +} + + +/*--------------------------------------------------------------------------* + * ivas_mcmasa_enc_close() + * + * + *--------------------------------------------------------------------------*/ + +void ivas_mcmasa_enc_close( + MCMASA_ENC_HANDLE hMcMasa, /* i/o: encoder McMASA handle */ + const int32_t input_Fs /* i : input sampling rate */ +) +{ + int16_t i, j; + + if ( hMcMasa->separateChannelEnabled ) + { + count_free( hMcMasa->delay_buffer_lfe[0] ); + count_free( hMcMasa->delay_buffer_lfe[1] ); + } + if ( hMcMasa->separateChannelEnabled ) + { + for ( i = 0; i < 2; i++ ) + { + count_free( hMcMasa->lfeAnaRingBuffer[i] ); + } + } + + ivas_FB_mixer_close( &hMcMasa->hFbMixer, input_Fs ); + + if ( !hMcMasa->separateChannelEnabled ) + { + ivas_FB_mixer_close( &hMcMasa->hFbMixerLfe, input_Fs ); + } + + /* intensity 3-dim */ + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + { + count_free( hMcMasa->direction_vector_m[i][j] ); + hMcMasa->direction_vector_m[i][j] = NULL; + } + + for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) + { + count_free( hMcMasa->buffer_intensity_real[i][j] ); + hMcMasa->buffer_intensity_real[i][j] = NULL; + } + + count_free( hMcMasa->buffer_intensity_real[i] ); + hMcMasa->buffer_intensity_real[i] = NULL; + + count_free( hMcMasa->direction_vector_m[i] ); + hMcMasa->direction_vector_m[i] = NULL; + } + + for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) + { + count_free( hMcMasa->buffer_intensity_real_vert[j] ); + hMcMasa->buffer_intensity_real_vert[j] = NULL; + } + count_free( hMcMasa->buffer_intensity_real_vert ); + hMcMasa->buffer_intensity_real_vert = NULL; + + count_free( hMcMasa->buffer_energy ); + hMcMasa->buffer_energy = NULL; + + count_free( hMcMasa ); + + return; +} + + +/*--------------------------------------------------------------------------* + * ivas_mcmasa_enc() + * + * Multichannel MASA encoder + *--------------------------------------------------------------------------*/ + +void ivas_mcmasa_enc( + MCMASA_ENC_HANDLE hMcMasa, + IVAS_QMETADATA_HANDLE hQMeta, + MASA_ENCODER_HANDLE hMasa, + float data_f[][L_FRAME48k], + const int16_t input_frame, + const int16_t nchan_transport, + const int16_t nchan_inp ) +{ + int16_t i, j, k; + int16_t nBands = hMcMasa->nbands; + int16_t nBlocks = MAX_PARAM_SPATIAL_SUBFRAMES; + + uint8_t fixedDistance = 0; + + float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + + float separatedChannelSignal[L_FRAME48k]; + + /* Compute low frequency energy */ + computeLfeEnergy( hMcMasa, data_f, input_frame ); + + /* Sum center and LFE, move surround channels */ + v_add( data_f[2], data_f[3], data_f[2], input_frame ); + for ( i = 4; i < nchan_inp; i++ ) + { + mvr2r( data_f[i], data_f[i - 1], input_frame ); + } + + if ( hMcMasa->separateChannelEnabled ) + { + /* Identify channel to separate */ + i = hMcMasa->separateChannelIndex; + + /* Separate the identified channel */ + mvr2r( data_f[i], separatedChannelSignal, input_frame ); + + /* Move the remaining channels in order to perform the analysis without the separated channel */ + for ( i = ( hMcMasa->separateChannelIndex + 1 ); i < ( nchan_inp - 1 ); i++ ) + { + mvr2r( data_f[i], data_f[i - 1], input_frame ); + } + } + + /* Analysis */ + ivas_mcmasa_param_est_enc( hMcMasa, hMasa, data_f, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame, nchan_inp ); + + /* Determine LFE-to-total energy ratio */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hMasa->data.lfeToTotalEnergyRatio[i] = hMcMasa->lfeLfEne[i] / ( EPSILON + hMcMasa->totalLfEne[i] ); + } + + /* Set analyzed values to the MASA struct */ + for ( i = 0; i < nBands; i++ ) + { + for ( j = 0; j < nBlocks; j++ ) + { + if ( hMcMasa->combineRatios ) + { + k = 0; + } + else + { + k = j; + } + + hQMeta->q_direction[0].band_data[i].azimuth[j] = azimuth_m_values[j][i]; + hQMeta->q_direction[0].band_data[i].elevation[j] = elevation_m_values[j][i]; + hQMeta->q_direction[0].band_data[i].energy_ratio[j] = energyRatio[k][i]; + hQMeta->q_direction[0].band_data[i].distance[j] = fixedDistance; + + if ( hQMeta->surcoh_band_data != NULL ) + { + hQMeta->q_direction[0].coherence_band_data[i].spread_coherence[j] = (uint8_t) roundf( spreadCoherence[j][i] * UINT8_MAX ); + hQMeta->surcoh_band_data[i].surround_coherence[j] = (uint8_t) roundf( surroundingCoherence[k][i] * UINT8_MAX ); + } + } + } + + /* At lower sampling rates, set zeros for higher bands that were not analyzed */ + if ( nBands < hMcMasa->nCodingBands ) + { + for ( i = nBands; i < hMcMasa->nCodingBands; i++ ) + { + for ( j = 0; j < nBlocks; j++ ) + { + hQMeta->q_direction[0].band_data[i].azimuth[j] = 0.0f; + hQMeta->q_direction[0].band_data[i].elevation[j] = 0.0f; + hQMeta->q_direction[0].band_data[i].energy_ratio[j] = 0.0f; + hQMeta->q_direction[0].band_data[i].distance[j] = 0; + + if ( hQMeta->surcoh_band_data != NULL ) + { + hQMeta->q_direction[0].coherence_band_data[i].spread_coherence[j] = 0; + hQMeta->surcoh_band_data[i].surround_coherence[j] = 0; + } + } + } + } + + /* Downmix */ + ivas_mcmasa_dmx( hMcMasa, data_f, input_frame, nchan_transport, nchan_inp ); + + if ( hMcMasa->separateChannelEnabled ) + { + /* Put separated channel back to data_f to first empty channel after the transport audio signals for encoding */ + mvr2r( separatedChannelSignal, data_f[2], input_frame ); + } + + /* Update mcMASA-relevant coding parameters */ + /* These are reset to default values as they may be modified during later processing. */ + hMasa->config.joinedSubframes = FALSE; + hQMeta->q_direction[0].cfg.nbands = hMcMasa->nbands; + hQMeta->q_direction[0].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; + hQMeta->all_coherence_zero = 1; + + /* Check spread coherence */ + i = 0; + while ( i < nBlocks && hQMeta->all_coherence_zero ) + { + j = 0; + while ( j < nBands && hQMeta->all_coherence_zero ) + { + if ( spreadCoherence[i][j] > MASA_COHERENCE_THRESHOLD ) + { + hQMeta->all_coherence_zero = 0; + } + j++; + } + i++; + } + + /* Check surrounding coherence */ + if ( hQMeta->all_coherence_zero ) + { + float diffuse_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + uint8_t cohSignificant; + int16_t nSubFrames; + + nSubFrames = hMcMasa->combineRatios ? 1 : MAX_PARAM_SPATIAL_SUBFRAMES; + for ( i = 0; i < nSubFrames; i++ ) + { + for ( j = 0; j < nBands; j++ ) + { + diffuse_to_total_ratio[i][j] = fmaxf( 0.0f, 1.0f - energyRatio[i][j] ); + } + } + + cohSignificant = ivas_masa_surrcoh_signicant( surroundingCoherence, diffuse_to_total_ratio, nSubFrames, nBands ); + if ( cohSignificant ) + { + hQMeta->all_coherence_zero = 0; + } + } + hMasa->config.coherencePresent = !hQMeta->all_coherence_zero; + + return; +} + + +/*--------------------------------------------------------------------------* + * ivas_mcmasa_param_est_enc() + * + * Estimate metadata parameters for McMASA + *--------------------------------------------------------------------------*/ + +void ivas_mcmasa_param_est_enc( + MCMASA_ENC_HANDLE hMcMasa, /* i : McMASA encoder structure */ + MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder structure */ + float data_f[][L_FRAME48k], /* i : Audio frame in MC-format */ + float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated elevation */ + float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated azimuth */ + float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated direct-to-total ratio */ + float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated spread coherence */ + float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated surround coherence */ + const int16_t input_frame, /* i : Input frame size */ + const int16_t nchan_inp /* i : Number of input channels */ +) +{ + float reference_power[MDFT_NO_COL_MAX][DIRAC_NO_FB_BANDS_MAX]; + int16_t ts, i, j, d; + int16_t num_freq_bins, num_freq_bands, index; + float dir_v[DIRAC_NUM_DIMS]; + int16_t l_ts; + float *pcm_in[MCMASA_MAX_ANA_CHANS]; + float Chnl_RealBuffer[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float Chnl_ImagBuffer[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float *p_Chnl_RealBuffer[MCMASA_MAX_ANA_CHANS]; + float *p_Chnl_ImagBuffer[MCMASA_MAX_ANA_CHANS]; + float Foa_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float Foa_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float FoaEven_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float FoaEven_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; + float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; + float intensity_even_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; + float direction_vector[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; + float diffuseness_vector[MASA_FREQUENCY_BANDS]; + float vertical_diffuseness_vector[MASA_FREQUENCY_BANDS]; + float diffuseness_m[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + float coherentEnergyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + int16_t band_m_idx, block_m_idx; + float renormalization_factor_diff[MASA_FREQUENCY_BANDS]; + float norm_tmp; + int16_t mrange[2], brange[2]; + int16_t numSubFramesForRatio; + CovarianceMatrix COVls[MASA_FREQUENCY_BANDS]; + float absCOVls[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; + float lsEnergy[MCMASA_MAX_ANA_CHANS]; + float lsEnergySum, maxEne; + int16_t loudestCh; + float surrCoh, tempCoh, tempCoh2; + int16_t i1, i2, i3; + float angleDist, minAngleDist; + float currentAzi; + float lsEnergyRelation; + float tempLsEnergyRelation; + float stereoness, cohwideness, spreadCoh; + float stereoRatio, cohPanRatio; + float stereoCoh, cohPanCoh, cohRatio; + float renormalization_factor_coh[MASA_FREQUENCY_BANDS]; + int16_t numAnalysisChannels; + + num_freq_bins = input_frame / MDFT_NO_COL_MAX; + num_freq_bands = hMcMasa->nbands; + l_ts = input_frame / MDFT_NO_COL_MAX; + + numAnalysisChannels = nchan_inp - 1; + if ( hMcMasa->separateChannelEnabled ) + { + numAnalysisChannels = nchan_inp - 2; + } + + if ( hMcMasa->combineRatios ) + { + /* Need to initialize renormalization_factors, and variables to be normalized */ + set_zero( renormalization_factor_diff, hMcMasa->nbands ); + set_zero( diffuseness_m[0], hMcMasa->nbands ); + set_zero( renormalization_factor_coh, hMcMasa->nbands ); + set_zero( surroundingCoherence[0], hMcMasa->nbands ); + set_zero( coherentEnergyRatio[0], hMcMasa->nbands ); + } + + + /* Copy current frame to memory for delay compensation */ + for ( i = 0; i < numAnalysisChannels; i++ ) + { + pcm_in[i] = &data_f[i][0]; + p_Chnl_RealBuffer[i] = &Chnl_RealBuffer[i][0]; + p_Chnl_ImagBuffer[i] = &Chnl_ImagBuffer[i][0]; + } + + /* do processing over all CLDFB time slots */ + for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) + { + mrange[0] = hMcMasa->block_grouping[block_m_idx]; + mrange[1] = hMcMasa->block_grouping[block_m_idx + 1]; + + for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) + { + hMcMasa->direction_vector_m[0][block_m_idx][band_m_idx] = 0; + hMcMasa->direction_vector_m[1][block_m_idx][band_m_idx] = 0; + hMcMasa->direction_vector_m[2][block_m_idx][band_m_idx] = 0; + } + + /* Reset variable */ + for ( i = 0; i < hMcMasa->nbands; i++ ) + { + for ( j = 0; j < numAnalysisChannels; j++ ) + { + set_zero( COVls[i].xr[j], numAnalysisChannels ); + set_zero( COVls[i].xi[j], numAnalysisChannels ); + } + } + + for ( ts = mrange[0]; ts < mrange[1]; ts++ ) + { + ivas_fb_mixer_get_windowed_fr( hMcMasa->hFbMixer, pcm_in, p_Chnl_RealBuffer, p_Chnl_ImagBuffer, l_ts, l_ts ); + ivas_fb_mixer_update_prior_input( hMcMasa->hFbMixer, pcm_in, l_ts ); + for ( i = 0; i < numAnalysisChannels; i++ ) + { + pcm_in[i] += l_ts; + } + /* Compute covariance matrix */ + for ( i = 0; i < num_freq_bands; i++ ) + { + brange[0] = hMcMasa->band_grouping[i]; + brange[1] = hMcMasa->band_grouping[i + 1]; + for ( j = brange[0]; j < brange[1]; j++ ) + { + compute_cov_mtx( Chnl_RealBuffer, Chnl_ImagBuffer, j, numAnalysisChannels, &( COVls[i] ) ); + } + + /* Store energies for guiding metadata encoding */ + hMasa->data.energy[block_m_idx][i] = 0.0f; + for ( j = 0; j < numAnalysisChannels; j++ ) + { + hMasa->data.energy[block_m_idx][i] += COVls[i].xr[j][j]; + } + } + + if ( !hMcMasa->separateChannelEnabled ) + { + /* Compute low frequency energy */ + for ( i = 0; i < numAnalysisChannels; i++ ) + { + for ( j = 0; j < CLDFB_TO_MDFT_FAC; j++ ) + { + hMcMasa->totalLfEne[block_m_idx] += Chnl_RealBuffer[i][j] * Chnl_RealBuffer[i][j] + Chnl_ImagBuffer[i][j] * Chnl_ImagBuffer[i][j]; + } + } + } + /* Compute standard FOA */ + /* W */ + v_add( Chnl_RealBuffer[0], Chnl_RealBuffer[1], Foa_RealBuffer[0], num_freq_bins ); + v_add( Chnl_ImagBuffer[0], Chnl_ImagBuffer[1], Foa_ImagBuffer[0], num_freq_bins ); + for ( i = 2; i < numAnalysisChannels; i++ ) + { + v_add( Chnl_RealBuffer[i], Foa_RealBuffer[0], Foa_RealBuffer[0], num_freq_bins ); + v_add( Chnl_ImagBuffer[i], Foa_ImagBuffer[0], Foa_ImagBuffer[0], num_freq_bins ); + } + + /* Y */ + v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[1][0], Foa_RealBuffer[1], num_freq_bins ); + v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[1][0], Foa_ImagBuffer[1], num_freq_bins ); + for ( i = 1; i < numAnalysisChannels; i++ ) + { + v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[1][i], Foa_RealBuffer[1], num_freq_bins ); + v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[1][i], Foa_ImagBuffer[1], num_freq_bins ); + } + + /* Z */ + if ( hMcMasa->isHorizontalSetup ) + { + /* Set zero for horizontal setups */ + set_zero( Foa_RealBuffer[2], num_freq_bins ); + set_zero( Foa_ImagBuffer[2], num_freq_bins ); + } + else + { + v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[2][0], Foa_RealBuffer[2], num_freq_bins ); + v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[2][0], Foa_ImagBuffer[2], num_freq_bins ); + for ( i = 1; i < numAnalysisChannels; i++ ) + { + v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[2][i], Foa_RealBuffer[2], num_freq_bins ); + v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[2][i], Foa_ImagBuffer[2], num_freq_bins ); + } + } + + /* X */ + v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[3][0], Foa_RealBuffer[3], num_freq_bins ); + v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[3][0], Foa_ImagBuffer[3], num_freq_bins ); + for ( i = 1; i < numAnalysisChannels; i++ ) + { + v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[3][i], Foa_RealBuffer[3], num_freq_bins ); + v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[3][i], Foa_ImagBuffer[3], num_freq_bins ); + } + + /* Compute even FOA */ + /* W */ + mvr2r( Foa_RealBuffer[0], FoaEven_RealBuffer[0], num_freq_bins ); + mvr2r( Foa_ImagBuffer[0], FoaEven_ImagBuffer[0], num_freq_bins ); + + /* Y */ + v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaEvenMtx[1][0], FoaEven_RealBuffer[1], num_freq_bins ); + v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaEvenMtx[1][0], FoaEven_ImagBuffer[1], num_freq_bins ); + for ( i = 1; i < numAnalysisChannels; i++ ) + { + v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaEvenMtx[1][i], FoaEven_RealBuffer[1], num_freq_bins ); + v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaEvenMtx[1][i], FoaEven_ImagBuffer[1], num_freq_bins ); + } + + /* Z (even setups are handled as horizontal) */ + set_zero( FoaEven_RealBuffer[2], num_freq_bins ); + set_zero( FoaEven_ImagBuffer[2], num_freq_bins ); + + /* X */ + v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaEvenMtx[3][0], FoaEven_RealBuffer[3], num_freq_bins ); + v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaEvenMtx[3][0], FoaEven_ImagBuffer[3], num_freq_bins ); + for ( i = 1; i < numAnalysisChannels; i++ ) + { + v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaEvenMtx[3][i], FoaEven_RealBuffer[3], num_freq_bins ); + v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaEvenMtx[3][i], FoaEven_ImagBuffer[3], num_freq_bins ); + } + + /* Direction estimation */ + computeIntensityVector_enc( + hMcMasa->band_grouping, + Foa_RealBuffer, + Foa_ImagBuffer, + 0, + num_freq_bands, + intensity_real ); + + computeDirectionVectors( + intensity_real[0], + intensity_real[1], + intensity_real[2], + 0, + num_freq_bands, + direction_vector[0], + direction_vector[1], + direction_vector[2] ); + + /* Power and intensity estimation for diffuseness */ + computeIntensityVector_enc( + hMcMasa->band_grouping, + FoaEven_RealBuffer, + FoaEven_ImagBuffer, + 0, + num_freq_bands, + intensity_even_real ); + computeReferencePower_enc( hMcMasa->band_grouping, FoaEven_RealBuffer, FoaEven_ImagBuffer, reference_power[ts], + 0, + num_freq_bands ); + + /* Fill buffers of length "averaging_length" time slots for intensity and energy */ + hMcMasa->index_buffer_intensity = ( hMcMasa->index_buffer_intensity % hMcMasa->no_col_avg_diff ) + 1; /* averaging_length = 32 */ + index = hMcMasa->index_buffer_intensity; + for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + { + /* only real part needed */ + mvr2r( intensity_even_real[i], &( hMcMasa->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); + } + mvr2r( reference_power[ts], &( hMcMasa->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); + + computeDiffuseness_mdft( hMcMasa->buffer_intensity_real, hMcMasa->buffer_energy, num_freq_bands, hMcMasa->no_col_avg_diff, diffuseness_vector ); + + /* Compute vertical diffuseness, and tune original diffuseness if needed */ + if ( !hMcMasa->isHorizontalSetup ) + { + mvr2r( intensity_real[2], &( hMcMasa->buffer_intensity_real_vert[index - 1][0] ), num_freq_bands ); + computeVerticalDiffuseness( hMcMasa->buffer_intensity_real_vert, hMcMasa->buffer_energy, hMcMasa->no_col_avg_diff, num_freq_bands, vertical_diffuseness_vector ); + v_min( diffuseness_vector, vertical_diffuseness_vector, diffuseness_vector, num_freq_bands ); + } + + for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) + { + norm_tmp = reference_power[ts][band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); + + hMcMasa->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; + hMcMasa->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; + hMcMasa->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; + + if ( hMcMasa->combineRatios ) + { + diffuseness_m[0][band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; + renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; + } + else + { + diffuseness_m[block_m_idx][band_m_idx] = diffuseness_vector[band_m_idx]; + } + } + } + + for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) + { + for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) + { + dir_v[d] = hMcMasa->direction_vector_m[d][block_m_idx][band_m_idx]; + } + ivas_qmetadata_direction_vector_to_azimuth_elevation( dir_v, &azimuth_m_values[block_m_idx][band_m_idx], &elevation_m_values[block_m_idx][band_m_idx] ); + } + + /* Coherence processing */ + for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) + { + /* Compute absolute values */ + for ( i = 0; i < numAnalysisChannels; i++ ) + { + for ( j = i; j < numAnalysisChannels; j++ ) + { + absCOVls[i][j] = sqrtf( ( COVls[band_m_idx].xr[i][j] * COVls[band_m_idx].xr[i][j] + COVls[band_m_idx].xi[i][j] * COVls[band_m_idx].xi[i][j] ) ); + } + lsEnergy[i] = absCOVls[i][i]; + } + + /* Find loudest channel */ + maxEne = lsEnergy[0]; + loudestCh = 0; + for ( i = 1; i < numAnalysisChannels; i++ ) + { + if ( lsEnergy[i] > maxEne ) + { + maxEne = lsEnergy[i]; + loudestCh = i; + } + } + + /* Compute surrounding coherence */ + surrCoh = 1.0f; + for ( i = 0; i < numAnalysisChannels; i++ ) + { + if ( i != loudestCh ) + { + if ( i < loudestCh ) + { + i1 = i; + i2 = loudestCh; + } + else + { + i1 = loudestCh; + i2 = i; + } + tempCoh = absCOVls[i1][i2] / ( sqrtf( ( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ) ); + surrCoh = ( surrCoh < tempCoh ) ? surrCoh : tempCoh; + } + } + surrCoh = surrCoh * surrCoh; + surrCoh = ( surrCoh < 1.0f ) ? surrCoh : 1.0f; + surrCoh = ( surrCoh > 0.0f ) ? surrCoh : 0.0f; + + /* Compute spread coherence */ + if ( elevation_m_values[block_m_idx][band_m_idx] < NEAR_HORIZONTAL_PLANE_ELEVATION ) /* Computed only near horizontal plane */ + { + minAngleDist = 180.0f; + i1 = 0; + currentAzi = azimuth_m_values[block_m_idx][band_m_idx]; + for ( i = 0; i < hMcMasa->numHorizontalChannels; i++ ) + { + angleDist = fabsf( currentAzi - hMcMasa->ls_azimuth[i] ); + if ( angleDist > 180.0f ) + { + angleDist = fabsf( angleDist - 360.0f ); + } + if ( angleDist < minAngleDist ) + { + minAngleDist = angleDist; + i1 = i; + } + } + i2 = hMcMasa->leftNearest[i1]; + i3 = hMcMasa->rightNearest[i1]; + + if ( i2 < i3 ) + { + stereoCoh = absCOVls[i2][i3] / ( sqrtf( lsEnergy[i2] * lsEnergy[i3] + EPSILON ) ); + } + else + { + stereoCoh = absCOVls[i3][i2] / ( sqrtf( lsEnergy[i2] * lsEnergy[i3] + EPSILON ) ); + } + lsEnergyRelation = ( lsEnergy[i2] + lsEnergy[i3] ) / ( lsEnergy[i1] + lsEnergy[i2] + lsEnergy[i3] + EPSILON ); + stereoness = stereoCoh * lsEnergyRelation; + + if ( i1 < i2 ) + { + tempCoh = absCOVls[i1][i2] / ( sqrtf( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ); + } + else + { + tempCoh = absCOVls[i2][i1] / ( sqrtf( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ); + } + if ( i1 < i3 ) + { + tempCoh2 = absCOVls[i1][i3] / ( sqrtf( lsEnergy[i1] * lsEnergy[i3] + EPSILON ) ); + } + else + { + tempCoh2 = absCOVls[i3][i1] / ( sqrtf( lsEnergy[i1] * lsEnergy[i3] + EPSILON ) ); + } + cohPanCoh = ( tempCoh < tempCoh2 ) ? tempCoh : tempCoh2; + lsEnergyRelation = lsEnergy[i2] / ( lsEnergy[i1] + EPSILON ); + tempLsEnergyRelation = lsEnergy[i1] / ( lsEnergy[i2] + EPSILON ); + lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; + tempLsEnergyRelation = lsEnergy[i3] / ( lsEnergy[i1] + EPSILON ); + lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; + tempLsEnergyRelation = lsEnergy[i1] / ( lsEnergy[i3] + EPSILON ); + lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; + cohwideness = cohPanCoh * lsEnergyRelation; + + spreadCoh = ( cohwideness > stereoness ) ? cohwideness : stereoness; + if ( spreadCoh > 0.5f ) + { + if ( cohwideness > stereoness ) + { + tempCoh = stereoness - ( cohwideness - 0.5f ); + spreadCoh = ( tempCoh > 0.5f ) ? tempCoh : 0.5f; + } + } + spreadCoh = ( spreadCoh < 1.0f ) ? spreadCoh : 1.0f; + spreadCoh = ( spreadCoh > 0.0f ) ? spreadCoh : 0.0f; + + /* Compute energy ratio tuning parameter */ + lsEnergySum = sum_f( lsEnergy, numAnalysisChannels ) + EPSILON; + lsEnergyRelation = ( lsEnergy[i2] + lsEnergy[i3] ) / lsEnergySum; + stereoRatio = stereoCoh * lsEnergyRelation - surrCoh; + + lsEnergyRelation = ( lsEnergy[i1] + lsEnergy[i2] + lsEnergy[i3] ) / lsEnergySum; + cohPanRatio = cohPanCoh * lsEnergyRelation - surrCoh; + + cohRatio = ( stereoRatio > cohPanRatio ) ? stereoRatio : cohPanRatio; + cohRatio = ( cohRatio < 1.0f ) ? cohRatio : 1.0f; + cohRatio = ( cohRatio > 0.0f ) ? cohRatio : 0.0f; + } + else /* Otherwise, set spread coherence to zero */ + { + spreadCoh = 0.0f; + cohRatio = 0.0f; + lsEnergySum = sum_f( lsEnergy, numAnalysisChannels ); + } + + /* Store values */ + spreadCoherence[block_m_idx][band_m_idx] = spreadCoh; + + if ( hMcMasa->combineRatios ) + { + surroundingCoherence[0][band_m_idx] += lsEnergySum * surrCoh; + coherentEnergyRatio[0][band_m_idx] += lsEnergySum * cohRatio; + renormalization_factor_coh[band_m_idx] += lsEnergySum; + } + else + { + surroundingCoherence[block_m_idx][band_m_idx] = surrCoh; + coherentEnergyRatio[block_m_idx][band_m_idx] = cohRatio; + } + } + } + + if ( hMcMasa->combineRatios ) + { + for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) + { + if ( renormalization_factor_diff[band_m_idx] > EPSILON ) + { + diffuseness_m[0][band_m_idx] /= renormalization_factor_diff[band_m_idx]; + } + else + { + diffuseness_m[0][band_m_idx] = 0.f; + } + if ( renormalization_factor_coh[band_m_idx] > EPSILON ) + { + surroundingCoherence[0][band_m_idx] /= renormalization_factor_coh[band_m_idx]; + coherentEnergyRatio[0][band_m_idx] /= renormalization_factor_coh[band_m_idx]; + } + else + { + surroundingCoherence[0][band_m_idx] = 0.f; + coherentEnergyRatio[0][band_m_idx] = 0.f; + } + } + } + + /* Determine energy ratios */ + if ( hMcMasa->combineRatios ) + { + numSubFramesForRatio = 1; + } + else + { + numSubFramesForRatio = MAX_PARAM_SPATIAL_SUBFRAMES; + } + for ( i = 0; i < numSubFramesForRatio; i++ ) + { + for ( j = 0; j < hMcMasa->nbands; j++ ) + { + energyRatio[i][j] = 1.0f - diffuseness_m[i][j]; + energyRatio[i][j] = ( energyRatio[i][j] > coherentEnergyRatio[i][j] ) ? energyRatio[i][j] : coherentEnergyRatio[i][j]; + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * Local functions + *--------------------------------------------------------------------------*/ + +/* Compute downmix */ +static void ivas_mcmasa_dmx( + MCMASA_ENC_HANDLE hMcMasa, + float data_f[][L_FRAME48k], + const int16_t input_frame, + const int16_t nchan_transport, + const int16_t nchan_inp ) +{ + int16_t i, j; + int16_t numAnalysisChannels; + float dmx_c; + float multiChEne, downmixEne; + float prevEQ, currEQ, instEQ; + float alpha; + + numAnalysisChannels = nchan_inp - 1; + if ( hMcMasa->separateChannelEnabled ) + { + numAnalysisChannels = nchan_inp - 2; + } + + multiChEne = 0.0f; + for ( j = 0; j < numAnalysisChannels; j++ ) + { + for ( i = 0; i < input_frame; i++ ) + { + multiChEne += data_f[j][i] * data_f[j][i]; + } + } + + if ( nchan_transport == 2 ) + { + int16_t numSideChannels; /* Channels other than left, right, center */ + int16_t leftIndex, rightIndex; + + numSideChannels = numAnalysisChannels / 2 - 1; + for ( j = 0; j < numSideChannels; j++ ) + { + if ( hMcMasa->separateChannelEnabled ) + { + leftIndex = j * 2 + 2; + rightIndex = j * 2 + 3; + } + else + { + leftIndex = j * 2 + 3; + rightIndex = j * 2 + 4; + } + + for ( i = 0; i < input_frame; i++ ) + { + data_f[0][i] += data_f[leftIndex][i]; + data_f[1][i] += data_f[rightIndex][i]; + } + } + + if ( !hMcMasa->separateChannelEnabled ) + { + for ( i = 0; i < input_frame; i++ ) + { + dmx_c = INV_SQRT2 * data_f[2][i]; + data_f[0][i] += dmx_c; + data_f[1][i] += dmx_c; + } + } + } + else if ( nchan_transport == 1 ) + { + for ( i = 0; i < input_frame; i++ ) + { + for ( j = 1; j < numAnalysisChannels; j++ ) + { + data_f[0][i] += data_f[j][i]; + } + } + } + + downmixEne = 0.0f; + for ( j = 0; j < nchan_transport; j++ ) + { + for ( i = 0; i < input_frame; i++ ) + { + downmixEne += data_f[j][i] * data_f[j][i]; + } + } + + alpha = 0.1f; + hMcMasa->prevMultiChEne = alpha * multiChEne + ( 1.0f - alpha ) * hMcMasa->prevMultiChEne; + hMcMasa->prevDownmixEne = alpha * downmixEne + ( 1.0f - alpha ) * hMcMasa->prevDownmixEne; + + prevEQ = hMcMasa->prevEQ; + currEQ = sqrtf( hMcMasa->prevMultiChEne / ( hMcMasa->prevDownmixEne + EPSILON ) ); + hMcMasa->prevEQ = currEQ; + + for ( i = 0; i < input_frame; i++ ) + { + instEQ = hMcMasa->interpolator[i] * currEQ + ( 1.0f - hMcMasa->interpolator[i] ) * prevEQ; + for ( j = 0; j < nchan_transport; j++ ) + { + data_f[j][i] *= instEQ; + } + } + + return; +} + + +/* Compute covariance matrix, i.e., xT * conj(x), and accumulate to the output */ +static void compute_cov_mtx( + float sr[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Input matrix, real, s[ch][freq] */ + float si[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Input matrix, imag, s[ch][freq] */ + const int16_t freq, /* i : Freq to process */ + const int16_t N, /* i : Number of channels */ + CovarianceMatrix *COVls /* o : Output matrix, contains upper part of cov mtx */ +) +{ + int16_t i, j; + float a, b, c, d; + + for ( i = 0; i < N; i++ ) + { + a = sr[i][freq]; + b = si[i][freq]; + for ( j = i; j < N; j++ ) + { + c = sr[j][freq]; + d = si[j][freq]; + COVls->xr[i][j] += a * c + b * d; + COVls->xi[i][j] += b * c - a * d; + } + } + + return; +} + + +static void computeIntensityVector_enc( + const int16_t *band_grouping, + float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], + float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], + const int16_t enc_param_start_band, /* i: first band to process */ + const int16_t num_frequency_bands, + float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] ) +{ + /* Reminder + * X = a + ib; Y = c + id + * X*Y = ac - bd + i(ad +bc) + */ + int16_t i, j; + float real, img; + int16_t brange[2]; + + for ( i = enc_param_start_band; i < enc_param_start_band + num_frequency_bands; i++ ) + { + brange[0] = band_grouping[i]; + brange[1] = band_grouping[i + 1]; + + intensity_real[0][i] = 0; + intensity_real[1][i] = 0; + intensity_real[2][i] = 0; + + for ( j = brange[0]; j < brange[1]; j++ ) + { + real = Cldfb_RealBuffer[0][j]; + img = Cldfb_ImagBuffer[0][j]; + intensity_real[0][i] += Cldfb_RealBuffer[3][j] * real + Cldfb_ImagBuffer[3][j] * img; + intensity_real[1][i] += Cldfb_RealBuffer[1][j] * real + Cldfb_ImagBuffer[1][j] * img; + intensity_real[2][i] += Cldfb_RealBuffer[2][j] * real + Cldfb_ImagBuffer[2][j] * img; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * computeVerticalDiffuseness() + * + * + *------------------------------------------------------------------------*/ + +static void computeVerticalDiffuseness( + float **buffer_intensity, /* i : Intensity vectors */ + const float *buffer_energy, /* i : Energy */ + const int16_t averaging_length, /* i : Averaging length */ + const int16_t num_freq_bands, /* i : Number of frequency bands */ + float *diffuseness /* o : Estimated diffuseness */ +) +{ + float intensity_slow[MASA_FREQUENCY_BANDS]; + float intensity_slow_abs[MASA_FREQUENCY_BANDS]; + float energy_slow[MASA_FREQUENCY_BANDS]; + int16_t i, k; + float tmp = 0; + const float *p_tmp_c; + + /* Set variables to zero */ + set_f( intensity_slow, 0.0f, MASA_FREQUENCY_BANDS ); + set_f( energy_slow, 0.0f, MASA_FREQUENCY_BANDS ); + + for ( i = 0; i < averaging_length; ++i ) + { + /* Energy slow */ + p_tmp_c = buffer_energy + i * num_freq_bands; + for ( k = 0; k < num_freq_bands; k++ ) + { + energy_slow[k] += *( p_tmp_c++ ); + } + + /* Intensity slow */ + for ( k = 0; k < num_freq_bands; k++ ) + { + intensity_slow[k] += buffer_intensity[i][k]; + } + } + + /* Compute absolute value */ + for ( k = 0; k < num_freq_bands; k++ ) + { + intensity_slow_abs[k] = fabsf( intensity_slow[k] ); + } + + /* Compute Diffuseness */ + for ( i = 0; i < num_freq_bands; ++i ) + { + tmp = intensity_slow_abs[i] / ( energy_slow[i] + EPSILON ); + tmp = ( tmp - VERTICAL_ENERGY_RATIO_OFFSET ) / ( 1.0f - VERTICAL_ENERGY_RATIO_OFFSET ); /* Tuned to avoid effect due to ambience of vertically un-even setups */ + tmp = 1.0f - tmp; + diffuseness[i] = ( ( tmp < 1.0f ) ? ( ( tmp < 0.0f ) ? 0.f : tmp ) : 1.0f ); + } + + return; +} + + +static void computeEvenLayout( + const float *ls_azimuth, + float *ls_azimuth_even, + const int16_t numChannels ) +{ + int16_t i; + int16_t j; + float ls_azimuth_temp[MCMASA_MAX_ANA_CHANS]; + float ls_azimuth_even_ordered[MCMASA_MAX_ANA_CHANS]; + int16_t ls_azimuth_order[MCMASA_MAX_ANA_CHANS]; + float smallestAzimuth; + int16_t smallestAzimuthIndex; + float lsSpacing; + uint8_t oddLayout; + float startAzimuth; + int16_t numChannelsHalf; + + lsSpacing = 360.0f / (float) numChannels; + oddLayout = numChannels % 2; + numChannelsHalf = numChannels / 2; + + mvr2r( ls_azimuth, ls_azimuth_temp, numChannels ); + for ( i = 0; i < numChannels; i++ ) + { + smallestAzimuth = 1000.0f; + smallestAzimuthIndex = 0; + for ( j = 0; j < numChannels; j++ ) + { + if ( ls_azimuth_temp[j] < smallestAzimuth ) + { + smallestAzimuth = ls_azimuth_temp[j]; + smallestAzimuthIndex = j; + } + } + ls_azimuth_order[i] = smallestAzimuthIndex; + ls_azimuth_temp[smallestAzimuthIndex] = 1000.0f; + } + + if ( oddLayout ) + { + startAzimuth = -lsSpacing * ( (float) numChannelsHalf ); + } + else + { + startAzimuth = -lsSpacing * ( (float) numChannelsHalf - 0.5f ); + } + + for ( i = 0; i < numChannels; i++ ) + { + ls_azimuth_even_ordered[i] = (float) i * lsSpacing + startAzimuth; + } + + for ( i = 0; i < numChannels; i++ ) + { + ls_azimuth_even[ls_azimuth_order[i]] = roundf( ls_azimuth_even_ordered[i] ); + } + + return; +} + +static void computeLfeEnergy( + MCMASA_ENC_HANDLE hMcMasa, + float data_f[][L_FRAME48k], + const int16_t input_frame ) +{ + int16_t l_ts; + int16_t block_m_idx; + int16_t mrange[2]; + int16_t separateChannelIndex; + int16_t lfeChannelIndex; + float *pcm_in[1]; + + + l_ts = input_frame / MDFT_NO_COL_MAX; + separateChannelIndex = hMcMasa->separateChannelIndex; + lfeChannelIndex = LFE_CHANNEL; + + if ( hMcMasa->separateChannelEnabled ) + { + mvr2r( &data_f[lfeChannelIndex][0], &( hMcMasa->delay_buffer_lfe[0][hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp] ), hMcMasa->offset_comp ); + mvr2r( &data_f[separateChannelIndex][0], &( hMcMasa->delay_buffer_lfe[1][hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp] ), hMcMasa->offset_comp ); + } + else + { + pcm_in[0] = &data_f[lfeChannelIndex][0]; + } + /* Reset variables */ + set_zero( hMcMasa->lfeLfEne, MAX_PARAM_SPATIAL_SUBFRAMES ); + set_zero( hMcMasa->totalLfEne, MAX_PARAM_SPATIAL_SUBFRAMES ); + + /* Compute low-frequency energies */ + if ( hMcMasa->separateChannelEnabled ) /* Using low-pass filter */ + { + float lowpassCoef; + int16_t i, j; + float delayedInputSignal[2][L_FRAME48k]; + float lowPassSignal[2][L_FRAME48k]; + + mvr2r( &( hMcMasa->delay_buffer_lfe[0][0] ), &( delayedInputSignal[0][0] ), hMcMasa->num_slots_delay_comp * l_ts ); + mvr2r( &( data_f[lfeChannelIndex][hMcMasa->offset_comp] ), &( delayedInputSignal[0][hMcMasa->num_slots_delay_comp * l_ts] ), ( MDFT_NO_COL_MAX - hMcMasa->num_slots_delay_comp ) * l_ts ); + mvr2r( &( hMcMasa->delay_buffer_lfe[1][0] ), &( delayedInputSignal[1][0] ), hMcMasa->num_slots_delay_comp * l_ts ); + mvr2r( &( data_f[separateChannelIndex][hMcMasa->offset_comp] ), &( delayedInputSignal[1][hMcMasa->num_slots_delay_comp * l_ts] ), ( MDFT_NO_COL_MAX - hMcMasa->num_slots_delay_comp ) * l_ts ); + + lowpassCoef = 1.0f / ( (float) hMcMasa->ringBufferSize ); + + for ( i = 0; i < input_frame; i++ ) + { + for ( j = 0; j < 2; j++ ) + { + hMcMasa->lowpassSum[j] += lowpassCoef * delayedInputSignal[j][i] - lowpassCoef * hMcMasa->lfeAnaRingBuffer[j][hMcMasa->ringBufferPointer]; + lowPassSignal[j][i] = hMcMasa->lowpassSum[j]; + hMcMasa->lfeAnaRingBuffer[j][hMcMasa->ringBufferPointer] = delayedInputSignal[j][i]; + } + + hMcMasa->ringBufferPointer--; + if ( hMcMasa->ringBufferPointer < 0 ) + { + hMcMasa->ringBufferPointer = hMcMasa->ringBufferSize - 1; + } + } + + for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) + { + mrange[0] = hMcMasa->block_grouping[block_m_idx] * l_ts; + mrange[1] = hMcMasa->block_grouping[block_m_idx + 1] * l_ts; + + for ( i = mrange[0]; i < mrange[1]; i++ ) + { + hMcMasa->lfeLfEne[block_m_idx] += lowPassSignal[0][i] * lowPassSignal[0][i]; + hMcMasa->totalLfEne[block_m_idx] += lowPassSignal[1][i] * lowPassSignal[1][i]; + } + hMcMasa->totalLfEne[block_m_idx] += hMcMasa->lfeLfEne[block_m_idx]; + } + } + else /* Using CLDFB */ + { + int16_t ts; + int16_t i; + float Chnl_RealBuffer[2][DIRAC_NO_FB_BANDS_MAX]; + float Chnl_ImagBuffer[2][DIRAC_NO_FB_BANDS_MAX]; + float *p_Chnl_RealBuffer[2]; + float *p_Chnl_ImagBuffer[2]; + + p_Chnl_RealBuffer[0] = &Chnl_RealBuffer[0][0]; + p_Chnl_RealBuffer[1] = &Chnl_RealBuffer[1][0]; + p_Chnl_ImagBuffer[0] = &Chnl_ImagBuffer[0][0]; + p_Chnl_ImagBuffer[1] = &Chnl_ImagBuffer[1][0]; + + for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) + { + mrange[0] = hMcMasa->block_grouping[block_m_idx]; + mrange[1] = hMcMasa->block_grouping[block_m_idx + 1]; + + for ( ts = mrange[0]; ts < mrange[1]; ts++ ) + { + ivas_fb_mixer_get_windowed_fr( hMcMasa->hFbMixerLfe, pcm_in, p_Chnl_RealBuffer, p_Chnl_ImagBuffer, l_ts, l_ts ); + ivas_fb_mixer_update_prior_input( hMcMasa->hFbMixerLfe, pcm_in, l_ts ); + pcm_in[0] += l_ts; + + /* Compute low frequency energy for LFE, for other channels it is computed in ivas_chnl_param_est_enc() */ + for ( i = 0; i < CLDFB_TO_MDFT_FAC; i++ ) + { + hMcMasa->lfeLfEne[block_m_idx] += Chnl_RealBuffer[0][i] * Chnl_RealBuffer[0][i] + Chnl_ImagBuffer[0][i] * Chnl_ImagBuffer[0][i]; + } + } + } + } + + if ( hMcMasa->separateChannelEnabled ) + { + mvr2r( &data_f[lfeChannelIndex][input_frame - hMcMasa->num_samples_delay_comp + hMcMasa->offset_comp], &( hMcMasa->delay_buffer_lfe[0][0] ), ( hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp ) ); + mvr2r( &data_f[separateChannelIndex][input_frame - hMcMasa->num_samples_delay_comp + hMcMasa->offset_comp], &( hMcMasa->delay_buffer_lfe[1][0] ), ( hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp ) ); + } + + return; +} diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c new file mode 100644 index 0000000000..de513c770e --- /dev/null +++ b/lib_enc/ivas_mct_core_enc.c @@ -0,0 +1,591 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*----------------------------------------------------------* + * FindChannelRatio() + * + * find ratio of channel energy to total energy for + * bit distribution + *----------------------------------------------------------*/ + +static void FindChannelRatio( + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + int16_t chBitRatios[MCT_MAX_CHANNELS], + const int16_t nchan /* i : number of channels */ +) +{ + float sum_nrg = 0; + float chRatio; + int16_t i; + float nrg[MCT_MAX_CHANNELS] = { 0 }; + + set_f( nrg, 0, MCT_MAX_CHANNELS ); + + getChannelEnergies( sts, nrg, nchan ); + + /*calculate total energy without LFE*/ + for ( i = 0; i < nchan; i++ ) + { + if ( sts[i]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[i]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + sum_nrg += nrg[i]; + } + } + sum_nrg = 1.0f / max( sum_nrg, EPSILON ); + + for ( i = 0; i < nchan; i++ ) + { + if ( sts[i]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[i]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + chRatio = nrg[i] * sum_nrg; + chBitRatios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, max( 1, (uint16_t) ( BITRATE_MCT_RATIO_RANGE * chRatio + 0.5f ) ) ); + } + else if ( sts[i]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + chBitRatios[i] = 0; + } + else if ( hMCT->num_lfe ) + { + assert( sts[i]->mct_chan_mode == MCT_CHAN_MODE_LFE ); + chBitRatios[i] = !hMCT->LFE_off; + } + } + +#ifdef DEBUG_MODE_MDCT + for ( i = 0; i < nchan; i++ ) + { + dbgwrite( &chBitRatios[i], sizeof( int16_t ), 1, 1, "./res/chBitRatio" ); + /* dbgwrite(&chRatio[i], sizeof(float),1,1,"./res/chRatio");*/ + } +#endif + + return; +} + + +static void AdjustChannelRatios( + int16_t chBitRatios[MCT_MAX_CHANNELS], + const int16_t nchan /* i : number of channels */ +#ifdef FIX_I1_113 + , + const int32_t ivas_total_brate, + const int16_t nAvailBits, + const int16_t sba_order +#endif +) +{ + int16_t force_ch_bit_ratios[IVAS_SPAR_MAX_DMX_CHS]; +#ifdef FIX_I1_113 + int32_t temp_brs[IVAS_SPAR_MAX_DMX_CHS]; +#endif + float cur_ratio, tar_ratio, sum_ratio, sum_tar_ratio; + int16_t ratio_diff, i; + +#ifndef FIX_I1_113 + force_ch_bit_ratios[0] = 9; + force_ch_bit_ratios[1] = 7; + force_ch_bit_ratios[2] = 5; + force_ch_bit_ratios[3] = 3; +#else + ivas_spar_bitrate_dist( temp_brs, nAvailBits, , sba_order, 3 ); + + sum_ratio = 0.0f; + for ( i = 0; i < nchan; i++ ) + { + sum_ratio += (float) temp_brs[i]; + } + for ( i = 0; i < nchan; i++ ) + { + cur_ratio = temp_brs[i] / sum_ratio; + force_ch_bit_ratios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, max( 1, (uint16_t) ( BITRATE_MCT_RATIO_RANGE * cur_ratio + 0.5f ) ) ); + } +#endif + + /* adjust the ratios further based on received chBitRatios[]*/ + ratio_diff = 0; + sum_ratio = 0.0f; + sum_tar_ratio = 0.0f; + for ( i = 0; i < nchan; i++ ) + { + sum_ratio += (float) chBitRatios[i]; + sum_tar_ratio += (float) force_ch_bit_ratios[i]; + } + for ( i = 3; i < nchan; i++ ) + { + cur_ratio = (float) chBitRatios[i] / sum_ratio; + tar_ratio = (float) force_ch_bit_ratios[i] / sum_tar_ratio; + + tar_ratio = min( tar_ratio, cur_ratio ); + chBitRatios[i] = (int16_t) ( tar_ratio * sum_tar_ratio ); + chBitRatios[i] = max( 1, chBitRatios[i] ); + assert( chBitRatios[i] < ( BITRATE_MCT_RATIO_RANGE - 1 ) ); + ratio_diff += force_ch_bit_ratios[i] - chBitRatios[i]; + } + for ( i = 0; i < min( 3, nchan ); i++ ) + { + assert( force_ch_bit_ratios[i] >= 0 ); + chBitRatios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, force_ch_bit_ratios[i] ); + } + chBitRatios[1] += ratio_diff; + +#ifdef FIX_I1_113 + /* make sure final ratios are within range*/ + sum_ratio = 0.0f; + for ( i = 0; i < nchan; i++ ) + { + sum_ratio += (float) chBitRatios[i]; + } + for ( i = 0; i < nchan; i++ ) + { + cur_ratio = chBitRatios[i] / sum_ratio; + chBitRatios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, max( 1, (uint16_t) ( BITRATE_MCT_RATIO_RANGE * cur_ratio + 0.5f ) ) ); + } +#endif + + return; +} +/*-------------------------------------------------------------------* + * ivas_mct_core_enc() + * + * joint mct encoding + *-------------------------------------------------------------------*/ + +void ivas_mct_core_enc( + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE encoder structures */ + const int16_t nChannels, /* i : number of channels to be coded */ + const int32_t ivas_total_brate, /* i : IVAS total bitrate */ + const int16_t switch_bw, /* i : flag bandwidth switch occurance */ + const int16_t lfe_bits, /* i : bits spent for LFE */ + const SBA_MODE sba_mode /* i : SBA mode */ +#ifdef FIX_I1_113 + , + const int16_t sba_order +#endif +) +{ + int16_t ch, nSubframes, L_subframeTCX; + int16_t i, cpe_id, n, nAvailBits; + int16_t nCPE; + float *orig_spectrum[MCT_MAX_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */ + float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; + float powerSpecMsInv_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ + float *powerSpecMsInv[MCT_MAX_CHANNELS][2]; + float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2]; + float *inv_spectrum[MCT_MAX_CHANNELS][2]; + float *mdst_spectrum[MCT_MAX_CHANNELS][2]; + float inv_spectrum_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ + int16_t total_side_bits; + int16_t chBitRatios[MCT_MAX_CHANNELS]; + Encoder_State *sts[MCT_MAX_CHANNELS]; + Encoder_State *st; + int16_t sp_aud_decision0[MCT_MAX_CHANNELS]; + BSTR_ENC_HANDLE hBstr; + float mdst; +#ifdef DEBUGGING + int32_t total_brate = 0; + int16_t sba_meta = 0; + int16_t format_bits = 0; + int16_t mct_bits = 0; +#endif + +#if defined( DEBUG_MODE_MDCT ) && defined( DEBUG_PLOT_BITS ) + static FILE *f_bit_split = 0; +#endif + + wmops_sub_start( "mct_encoding" ); + + /*--------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------*/ + + total_side_bits = 0; + + nCPE = nChannels / CPE_CHANNELS; + if ( ( nCPE * CPE_CHANNELS ) != nChannels ) + { + nCPE++; + } + + for ( ch = 0; ch < nChannels; ch++ ) + { + inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch]; + inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX; + inv_spectrum[ch][0] = inv_spectrum_long[ch]; + inv_spectrum[ch][1] = inv_spectrum_long[ch] + N_TCX10_MAX; + } + + for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[i] = hCPE[cpe_id]->hCoreCoder[ch]; + if ( hCPE[cpe_id]->hCoreCoder[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE || hCPE[cpe_id]->hCoreCoder[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + i++; + continue; + } + + mdst_spectrum[i][0] = hMCT->p_mdst_spectrum_long[cpe_id][ch]; + mdst_spectrum[i][1] = hMCT->p_mdst_spectrum_long[cpe_id][ch] + N_TCX10_MAX; + orig_spectrum[i][0] = hMCT->p_orig_spectrum_long[cpe_id][ch]; + orig_spectrum[i][1] = hMCT->p_orig_spectrum_long[cpe_id][ch] + N_TCX10_MAX; + + sp_aud_decision0[i] = hCPE[cpe_id]->hCoreCoder[0]->sp_aud_decision0; + + i++; + } + } + + hBstr = sts[0]->hBstr; + + for ( ch = 0; ch < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); ch++ ) + { + int16_t ch_core = ch * CPE_CHANNELS; + + if ( switch_bw ) + { + initMdctStereoEncData( hMCT->hBlockData[ch]->hStereoMdct, ivas_format, sts[ch_core]->element_mode, sts[ch_core]->element_brate, sts[ch_core]->bwidth, + sts[ch_core]->igf, sts[ch_core]->hIGFEnc->igfData.igfInfo.grid, 0 ); + } + + if ( sts[ch_core]->igf ) + { + /* calculate the igf start band from the igf start line */ + stereo_mdct_init_igf_start_band( &hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20, 1.0f, sts[ch_core]->bwidth, sts[ch_core]->total_brate ); + + stereo_mdct_init_igf_start_band( &hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10, 0.5f, sts[ch_core]->bwidth, sts[ch_core]->total_brate ); + } + else + { + hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20.sfbIgfStart = -1; + hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10.sfbIgfStart = -1; + hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10.nBandsStereoCore = hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10.sfbCnt; + hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20.nBandsStereoCore = hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20.sfbCnt; + } + } + + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && hMCT->LFE_off ) || st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( n = 0; n < nSubframes; n++ ) + { + st->side_bits_frame_channel += NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; + } + + /* Add estimated stereo bits */ + st->side_bits_frame_channel += NBBITS_MCT_RATIO; + } + + /*--------------------------------------------------------------* + * MCT algorithm + *---------------------------------------------------------------*/ + + apply_MCT_enc( hMCT, sts, mdst_spectrum, inv_spectrum, inv_mdst_spectrum, nChannels ); + + /*--------------------------------------------------------------* + * Power spectrum calculation for Noise Estimation + *---------------------------------------------------------------*/ + + for ( ch = 0; ch < nChannels; ch++ ) + { + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + L_subframeTCX = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; + + for ( n = 0; n < nSubframes; n++ ) + { + if ( !sts[ch]->hTcxEnc->fUseTns[n] /*!sts[0]->fUseTns[n] && !sts[1]->fUseTns[n]*/ ) + { + /* power spectrum: MDCT^2 + MDST^2 */ + for ( i = 0; i < L_subframeTCX; i++ ) + { + powerSpec[ch][i + n * L_subframeTCX] = mdst_spectrum[ch][n][i] * mdst_spectrum[ch][n][i] + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; + powerSpecMsInv[ch][n][i] = inv_mdst_spectrum[ch][n][i] * inv_mdst_spectrum[ch][n][i] + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; + } + } + else + { + /* power spectrum: MDCT^2 + MDST^2 */ + powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; + + for ( i = 1; i < L_subframeTCX - 1; i++ ) + { + mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ + powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; + } + + powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; + + /* power spectrum: MDCT^2 + MDST^2 */ + powerSpec[ch][n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][0] * sts[ch]->hTcxEnc->spectrum[n][0]; + + for ( i = 1; i < L_subframeTCX - 1; i++ ) + { + mdst = ( sts[ch]->hTcxEnc->spectrum[n][i + 1] - sts[ch]->hTcxEnc->spectrum[n][i - 1] ); /* An MDST estimate */ + powerSpec[ch][i + n * L_subframeTCX] = mdst * mdst + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; + } + powerSpec[ch][L_subframeTCX - 1 + n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1] * sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1]; + } + } + } + + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; + + if ( ( st->hTcxEnc->tcxMode == TCX_20 ) && ( st->total_brate < HQ_96k || st->igf ) ) + { + /*-----------------------------------------------------------* + * Compute noise-measure flags for spectrum filling * + * and quantization (0: tonal, 1: noise-like). * + * Detect low pass if present. * + *-----------------------------------------------------------*/ + + ComputeSpectrumNoiseMeasure( powerSpec[ch], st->hTcxEnc->L_frameTCX, st->hTcxEnc->nmStartLine, ( st->L_frame * st->last_sr_core != st->L_frame_past * st->sr_core ) || ( st->last_core != TCX_20_CORE ), st->hTcxEnc->memQuantZeros, st->hTcxEnc->L_frameTCX ); + } + + st->hTcxEnc->measuredBwRatio = 1.f; /* No bandwidth limit for the noise filling */ + } + + if ( sts[0]->igf ) + { + if ( hMCT->currBlockDataCnt > 0 ) + { + mctStereoIGF_enc( hMCT, sts, orig_spectrum, powerSpec, powerSpecMsInv, inv_spectrum, sp_aud_decision0 ); + } + else + { + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; + + if ( st->igf ) + { + for ( n = 0; n < nSubframes; n++ ) + { + ProcessIGF( st, st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, sp_aud_decision0[ch], 0 ); + } + } + } + } + + /*write IGF data to bitstream*/ + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + enc_prm_igf_mdct( st, hBstr ); + } + } + + /* correct side bits per channel*/ + for ( ch = 0; ch < nChannels; ch++ ) + { + st = sts[ch]; + + if ( ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) && hMCT->LFE_off ) || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + + st->side_bits_frame_channel -= NBBITS_MCT_RATIO; /* Subtract estimated stereo bits */ + total_side_bits += st->side_bits_frame_channel; + } + + /*--------------------------------------------------------------* + * Bitrate distribution among channels and MCT bitstream writing + *---------------------------------------------------------------*/ + + write_mct_bitstream( sts, hMCT, nChannels ); + + FindChannelRatio( hMCT, sts, chBitRatios, nChannels ); + +#ifndef FIX_I1_113 + if ( hMCT->hbr_mct ) + { + assert( ivas_total_brate >= IVAS_256k ); + AdjustChannelRatios( chBitRatios, nChannels ); + } +#endif + + nAvailBits = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - NBITS_BWIDTH - hMCT->nBitsMCT - lfe_bits ); + + + /* subtract IVAS format signaling bits */ + if ( ivas_format == MC_FORMAT ) + { + nAvailBits -= IVAS_FORMAT_SIGNALING_NBITS; + nAvailBits -= MC_LS_SETUP_BITS; + } + else if ( ivas_format == SBA_FORMAT ) + { + nAvailBits -= IVAS_FORMAT_SIGNALING_NBITS_SBA; + if ( sba_mode != SBA_MODE_SPAR || ivas_total_brate >= IVAS_256k ) + { + nAvailBits -= SBA_ORDER_BITS + SBA_PLANAR_BITS; + } + } + + for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) + { + if ( hCPE[cpe_id]->hMetaData != NULL ) + { + nAvailBits -= hCPE[cpe_id]->hMetaData->nb_bits_tot; + } + } + + /*substract bits needed for the bitrate ratios */ + for ( ch = 0; ch < nChannels; ch++ ) + { + if ( ( ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) && hMCT->LFE_off ) || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + nAvailBits -= NBBITS_MCT_RATIO; + } + nAvailBits -= total_side_bits + ( hMCT->num_lfe ? 1 : 0 ) + hMCT->nchan_out_woLFE; /* if MC 1 extra bit that was initially send to signal LFE_off */ + +#ifdef DEBUG_MODE_MDCT + dbgwrite( &nAvailBits, sizeof( int16_t ), 1, 1, "./res/availBits" ); +#endif + +#ifdef FIX_I1_113 + if ( hMCT->hbr_mct ) + { + assert( ivas_total_brate >= IVAS_256k ); + AdjustChannelRatios( chBitRatios, nChannels, ivas_total_brate, nAvailBits, sba_order ); + } +#endif + + for ( ch = 0; ch < nChannels; ch++ ) + { + if ( ( ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) && hMCT->LFE_off ) || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + + push_next_indice( hBstr, chBitRatios[ch], NBBITS_MCT_RATIO ); +#ifdef DEBUGGING + mct_bits += NBBITS_MCT_RATIO; +#endif + } + + /*distribute bits amongst channels*/ + splitAvailableBitsMCT( (void **) sts, nAvailBits, chBitRatios, ENC, nChannels ); + + for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = hCPE[cpe_id]->hCoreCoder[ch]; + if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + + if ( !( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) && hMCT->LFE_off ) ) /* indicates LFE with no content */ + { + st->total_brate = ( st->bits_frame_channel + st->side_bits_frame_channel ) * FRAMES_PER_SEC; + +#ifdef DEBUGGING + total_brate += st->total_brate; +#endif + } + } +#ifdef DEBUGGING + if ( hCPE[cpe_id]->hMetaData != NULL ) + { + sba_meta += hCPE[cpe_id]->hMetaData->nb_bits_tot; + } +#endif + } + +#ifdef DEBUGGING + if ( ivas_format == SBA_FORMAT && sba_mode == SBA_MODE_SPAR && ivas_total_brate < IVAS_256k ) + { + format_bits = IVAS_FORMAT_SIGNALING_NBITS_SBA; + } + else + { + format_bits = ( ivas_format == MC_FORMAT ? IVAS_FORMAT_SIGNALING_NBITS + MC_LS_SETUP_BITS : IVAS_FORMAT_SIGNALING_NBITS_SBA + SBA_ORDER_BITS + SBA_PLANAR_BITS ); + } + + mct_bits += hMCT->nBitsMCT + ( hMCT->num_lfe ? 1 : 0 ) + hMCT->nchan_out_woLFE; + assert( ( total_brate + ( NBITS_BWIDTH + format_bits + mct_bits + sba_meta + lfe_bits ) * FRAMES_PER_SEC ) == ivas_total_brate ); +#endif + + wmops_sub_end(); + + return; +} diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c new file mode 100644 index 0000000000..85c3ed0afc --- /dev/null +++ b/lib_enc/ivas_mct_enc.c @@ -0,0 +1,550 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ivas_mct_enc() + * + * Multi-Channel Coding Tool (MCT) encoding routine + *-------------------------------------------------------------------*/ + +ivas_error ivas_mct_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data[MCT_MAX_CHANNELS][L_FRAME48k], /* i : input signal */ + const int16_t input_frame, /* i : input frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + int16_t n, cpe_id; + MCT_ENC_HANDLE hMCT; + CPE_ENC_HANDLE hCPE; + float mdst_spectrum_long[MCT_MAX_BLOCKS][CPE_CHANNELS][L_FRAME48k]; + float orig_spectrum_long[MCT_MAX_BLOCKS][CPE_CHANNELS][L_FRAME48k]; + int16_t switch_bw; + IVAS_FORMAT ivas_format; + int16_t max_bwidth; + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + wmops_sub_start( "ivas_mct_enc" ); + + /* Initialization */ + hMCT = st_ivas->hMCT; + hMCT->hBstr = st_ivas->hCPE[0]->hCoreCoder[0]->hBstr; /* pointer to write MCT side bits */ + + ivas_format = st_ivas->hEncoderConfig->ivas_format; + max_bwidth = st_ivas->hEncoderConfig->max_bwidth; + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + +#ifdef DEBUG_FORCE_MCT_CP + if ( ivas_format == MC_FORMAT ) + { + assert( "Debugging switch works only with SBA modes" ); + } +#endif + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + hCPE = st_ivas->hCPE[cpe_id]; + hMCT->p_mdst_spectrum_long[cpe_id][n] = mdst_spectrum_long[cpe_id][n]; + hMCT->p_orig_spectrum_long[cpe_id][n] = orig_spectrum_long[cpe_id][n]; + hCPE->hCoreCoder[n]->input_bwidth = hCPE->hCoreCoder[n]->last_input_bwidth; /* updated in BWD */ + hCPE->hCoreCoder[n]->bwidth = hCPE->hCoreCoder[n]->last_bwidth; /* updated in BWD */ + } + } + + hMCT->LFE_off = 1; /* disable LFE coding by default for the moment */ + + /* reconfiguration in case of bitrate switching */ + if ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) + { + int32_t cp_bitrate; + cp_bitrate = ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; + + for ( n = 0; n < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); n++ ) + { + initMdctStereoEncData( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid, 0 ); + } + } + + /* set coded audio band-width */ + switch_bw = set_bw_mct( st_ivas->hCPE, st_ivas->nCPE ); + + /* pre-processing */ + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = ivas_cpe_enc( st_ivas, cpe_id, data[cpe_id * CPE_CHANNELS], data[cpe_id * CPE_CHANNELS + 1], input_frame, nb_bits_metadata ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* joint MCT encoding */ + ivas_mct_core_enc( ivas_format, hMCT, st_ivas->hCPE, hMCT->nchan_out_woLFE + hMCT->num_lfe, ivas_total_brate, switch_bw, + ivas_format == MC_FORMAT ? (int16_t) st_ivas->hLFE->lfe_bits : 0, st_ivas->sba_mode +#ifdef FIX_I1_113 + , + st_ivas->hEncoderConfig->sba_order +#endif + ); + + /* Spectrum quantization and coding */ + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + hCPE = st_ivas->hCPE[cpe_id]; + + ivas_mdct_quant_coder( hCPE, hMCT->LFE_off, hMCT->tnsBits[cpe_id], hMCT->tnsSize[cpe_id], hMCT->p_param[cpe_id], 1 ); + + /* update input samples buffer (as done in ivas_cpe_enc() for other than MCT coding) */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mvr2r( hCPE->hCoreCoder[n]->input, hCPE->hCoreCoder[n]->old_input_signal, input_frame ); + } + } + + wmops_sub_end(); + return error; +} + + +/*------------------------------------------------------------------------- + * create_mct_enc() + * + * Create, allocate and initialize IVAS encoder MCT handle + *-------------------------------------------------------------------------*/ + +ivas_error create_mct_enc( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + MCT_ENC_HANDLE hMCT; + int16_t n; + int32_t cp_bitrate; + int16_t max_blocks; + int16_t cpe_id; + IVAS_FORMAT ivas_format; + int32_t ivas_total_brate; + + ivas_format = st_ivas->hEncoderConfig->ivas_format; + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + + /*-----------------------------------------------------------------* + * Allocate MCT handle + *-----------------------------------------------------------------*/ + + if ( ( hMCT = (MCT_ENC_HANDLE) count_malloc( sizeof( MCT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT\n" ) ); + } + + /*-----------------------------------------------------------------* + * Allocate and initialize MCT BlockData handles + *-----------------------------------------------------------------*/ + + /* Determine active channels */ + if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) + { + hMCT->nchan_out_woLFE = st_ivas->hEncoderConfig->nchan_inp - 1; /* LFE channel is coded separately */ + hMCT->num_lfe = TRUE; + } + else if ( ivas_format == SBA_FORMAT && st_ivas->hSpar ) + { + hMCT->nchan_out_woLFE = ivas_get_spar_num_TCs( ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); + + hMCT->num_lfe = FALSE; + } + else if ( ivas_format == SBA_FORMAT && st_ivas->hDirAC ) + { + hMCT->nchan_out_woLFE = ivas_dirac_getNumTransportChannels( ivas_total_brate, st_ivas->hEncoderConfig->sba_order, st_ivas->hEncoderConfig->sba_planar ); + hMCT->num_lfe = FALSE; + } + else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) + { + hMCT->nchan_out_woLFE = ivas_param_mc_getNumTransportChannels( ivas_total_brate, st_ivas->hEncoderConfig->mc_input_setup ); + hMCT->num_lfe = FALSE; + } + else if ( ivas_format == SBA_FORMAT ) + { + hMCT->nchan_out_woLFE = ivas_sba_get_nchan( st_ivas->hEncoderConfig->sba_order, st_ivas->hEncoderConfig->sba_planar ); + hMCT->num_lfe = FALSE; + } + else + { + assert( !"IVAS format currently not supported for MCT" ); + } + + cp_bitrate = ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; + + /* indicate LFE for appropriate core-coder channel */ + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + if ( ( hMCT->num_lfe > 0 ) && ( ( n + cpe_id * CPE_CHANNELS ) == LFE_CHANNEL ) ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_LFE; + } + } + } + + /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ + if ( ( hMCT->nchan_out_woLFE + hMCT->num_lfe ) % 2 ) + { + st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; + } + + /*Initialize MCT block data */ + max_blocks = hMCT->nchan_out_woLFE / CPE_CHANNELS; + + for ( n = 0; n < max_blocks; n++ ) + { + assert( st_ivas->hEncoderConfig->element_mode_init == IVAS_CPE_MDCT && "MCT is not supported for other stereo modes" ); + + if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); + } + + /*Initialize all parameters to zero*/ + hMCT->hBlockData[n]->isActive = 0; + hMCT->hBlockData[n]->ch1 = 0; + hMCT->hBlockData[n]->ch2 = 0; + + /*-----------------------------------------------------------------* + * MDCT stereo initialization + *-----------------------------------------------------------------*/ + + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + +#ifdef DEBUGGING + hMCT->hBlockData[n]->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; +#endif + initMdctStereoEncData( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, st_ivas->hEncoderConfig->max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid, 1 ); + } + + for ( ; n < MCT_MAX_BLOCKS; n++ ) + { + hMCT->hBlockData[n] = NULL; + } + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + hMCT->currBlockDataCnt = 0; + + /*Initialize bits required to signal channel-pair index*/ + hMCT->bitsChannelPairIndex = max( 1, (int16_t) ( floor( ( log( hMCT->nchan_out_woLFE * ( hMCT->nchan_out_woLFE - 1 ) / 2 - 1 ) / log( 2. ) ) ) + 1 ) ); + + set_s( hMCT->lowE_ch, 0, MCT_MAX_CHANNELS ); + + for ( n = 0; n < MCT_MAX_CHANNELS; n++ ) + { + set_f( hMCT->lastxCorrMatrix[n], 0, MCT_MAX_CHANNELS ); + } + hMCT->hbr_mct = 0; + if ( st_ivas->sba_mode == SBA_MODE_SPAR && ivas_total_brate >= IVAS_256k ) + { + hMCT->hbr_mct = 1; + } + + st_ivas->hMCT = hMCT; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * mct_enc_reconfigure() + * + * Reconfigure IVAS encoder MCT handle + *-------------------------------------------------------------------------*/ + +ivas_error mct_enc_reconfigure( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const uint16_t b_nchan_change /* i : flag indicating different channel count */ +) +{ + MCT_ENC_HANDLE hMCT; + Encoder_State *st; + int16_t n, cpe_id, max_blocks; + int32_t ivas_total_brate, cp_bitrate; + IVAS_FORMAT ivas_format; + + hMCT = st_ivas->hMCT; + ivas_format = st_ivas->hEncoderConfig->ivas_format; + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + + /*-----------------------------------------------------------------* + * Allocate and initialize MCT BlockData handles + *-----------------------------------------------------------------*/ + + if ( b_nchan_change ) + { + /* Determine active channels */ + if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) + { + hMCT->nchan_out_woLFE = st_ivas->hEncoderConfig->nchan_inp - 1; /* LFE channel is coded separately */ + hMCT->num_lfe = TRUE; + } + else if ( ivas_format == SBA_FORMAT && st_ivas->hDirAC ) + { + hMCT->nchan_out_woLFE = ivas_dirac_getNumTransportChannels( ivas_total_brate, st_ivas->hEncoderConfig->sba_order, st_ivas->hEncoderConfig->sba_planar ); + hMCT->num_lfe = FALSE; + } + else if ( ivas_format == SBA_FORMAT ) + { + hMCT->nchan_out_woLFE = ivas_sba_get_nchan( st_ivas->hEncoderConfig->sba_order, st_ivas->hEncoderConfig->sba_planar ); + hMCT->num_lfe = FALSE; + } + else + { + assert( !"IVAS format currently not supported for MCT" ); + } + } + + cp_bitrate = ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; + + /* indicate LFE for appropriate core-coder channel */ + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + if ( ( hMCT->num_lfe > 0 ) && ( ( n + cpe_id * CPE_CHANNELS ) == LFE_CHANNEL ) ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_LFE; + } + } + } + + /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ + if ( ( hMCT->nchan_out_woLFE + hMCT->num_lfe ) % 2 ) + { + st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; + } + + /* set correct nominal bitrates and igf config already here, otherwise we + * run into a number of problems; only do it when the bitrate changes */ + if ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) + { + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st = st_ivas->hCPE[cpe_id]->hCoreCoder[n]; + + st->total_brate = st_ivas->hCPE[cpe_id]->element_brate; + + if ( !( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) ) + { + st->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[cpe_id]->element_brate / FRAMES_PER_SEC ); + st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_mode, st->mct_chan_mode ); + if ( st->igf ) + { + IGFEncSetMode( st->hIGFEnc, st_ivas->hCPE[cpe_id]->element_brate, st->bwidth, st->element_mode, st->rf_mode ); + } + } + } + } + } + + /* Initialize MCT block data */ + max_blocks = hMCT->nchan_out_woLFE / CPE_CHANNELS; + + for ( n = 0; n < max_blocks; n++ ) + { + uint16_t mem_init = 0; + assert( st_ivas->hEncoderConfig->element_mode_init == IVAS_CPE_MDCT && "MCT is not supported for other stereo modes" ); + + if ( b_nchan_change ) + { + if ( hMCT->hBlockData[n] == NULL ) + { + mem_init = 1; + if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); + } + + /*Initialize all parameters to zero*/ + hMCT->hBlockData[n]->isActive = 0; + hMCT->hBlockData[n]->ch1 = 0; + hMCT->hBlockData[n]->ch2 = 0; + + /*-----------------------------------------------------------------* + * MDCT stereo initialization + *-----------------------------------------------------------------*/ + + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + } + } + +#ifdef DEBUGGING + hMCT->hBlockData[n]->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; +#endif + initMdctStereoEncData( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, st_ivas->hEncoderConfig->max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid, mem_init ); + } + + for ( ; n < MCT_MAX_BLOCKS; n++ ) + { + /* deallocate no longer needed blocks */ + if ( hMCT->hBlockData[n] != NULL ) + { + if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) + { + count_free( hMCT->hBlockData[n]->hStereoMdct ); + hMCT->hBlockData[n]->hStereoMdct = NULL; + } + + count_free( hMCT->hBlockData[n] ); + hMCT->hBlockData[n] = NULL; + } + } + + /*-----------------------------------------------------------------* + * Initializations + *-----------------------------------------------------------------*/ + + if ( b_nchan_change ) + { + hMCT->currBlockDataCnt = 0; + /*Initialize bits required to signal channel-pair index*/ + hMCT->bitsChannelPairIndex = max( 1, (int16_t) ( floor( ( log( hMCT->nchan_out_woLFE * ( hMCT->nchan_out_woLFE - 1 ) / 2 - 1 ) / log( 2. ) ) ) + 1 ) ); + + set_s( hMCT->lowE_ch, 0, MCT_MAX_CHANNELS ); + + for ( n = 0; n < MCT_MAX_CHANNELS; n++ ) + { + set_f( hMCT->lastxCorrMatrix[n], 0, MCT_MAX_CHANNELS ); + } + } + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * ivas_mct_enc_close() + * + * Close MCT + *-------------------------------------------------------------------------*/ + +void ivas_mct_enc_close( + MCT_ENC_HANDLE hMCT /* i/o: MCT encoder structure */ +) +{ + int16_t n, maxBlocks; + + maxBlocks = hMCT->nchan_out_woLFE / 2; + + for ( n = 0; n < maxBlocks; n++ ) + { + if ( hMCT->hBlockData[n] != NULL ) + { + if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) + { + count_free( hMCT->hBlockData[n]->hStereoMdct ); + hMCT->hBlockData[n]->hStereoMdct = NULL; + } + + count_free( hMCT->hBlockData[n] ); + hMCT->hBlockData[n] = NULL; + } + } + + count_free( hMCT ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_mc_enc_config() + * + * - select MC format mode + * - write MC LS setup + * - reconfigure the MC format encoder + *-------------------------------------------------------------------------*/ + +ivas_error ivas_mc_enc_config( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + Encoder_State *st0; /* used for bitstream handling */ + MC_MODE last_mc_mode; + ivas_error error; + + error = IVAS_ERR_OK; + + last_mc_mode = st_ivas->mc_mode; + + /* select MC format mode */ + st_ivas->mc_mode = ivas_mc_mode_select( st_ivas->hEncoderConfig->mc_input_setup, st_ivas->hEncoderConfig->ivas_total_brate ); + + /* write MC LS setup */ + st0 = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + push_indice( st0->hBstr, IND_SMODE, st_ivas->hEncoderConfig->mc_input_setup, MC_LS_SETUP_BITS ); + + /* MC format switching */ + if ( st_ivas->hEncoderConfig->last_ivas_total_brate != st_ivas->hEncoderConfig->ivas_total_brate || st_ivas->mc_mode != last_mc_mode ) + { + /*ivas_mc_enc_reconfigure( st_ivas );*/ + return IVAS_ERROR( IVAS_ERR_RECONFIGURE_NOT_SUPPORTED, "Error: MC format switching not supported yet!!!\n\n" ); + } + + return error; +} diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c new file mode 100644 index 0000000000..62ff9be888 --- /dev/null +++ b/lib_enc/ivas_mct_enc_mct.c @@ -0,0 +1,917 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "wmops.h" +#include + +#define SPAR_CORR_THRES 0.9f +#define DEFAULT_CORR_THRES 0.3f + +/*------------------------------------------------------------------------- + * getChannelEnergies() + * + * Calculate energy for each cahnnel + *-------------------------------------------------------------------------*/ + +void getChannelEnergies( + Encoder_State **sts, /* i/o: Encoder state structure */ + float nrg[MCT_MAX_CHANNELS], /* o : buffer with energies for each channel */ + const int16_t nchan /* i : number of channels */ +) +{ + int16_t ch, n; + int16_t nSubframes, L_subframe; + Encoder_State *st; + + /* Calculate energies per channel */ + for ( ch = 0; ch < nchan; ch++ ) + { + st = sts[ch]; + if ( st->mct_chan_mode != MCT_CHAN_MODE_IGNORE && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + L_subframe = st->hTcxEnc->L_frameTCX / nSubframes; + + nrg[ch] = 0; + for ( n = 0; n < nSubframes; n++ ) + { + nrg[ch] += sum2_f( st->hTcxEnc->spectrum[n], L_subframe ); + } + nrg[ch] = sqrtf( nrg[ch] ); + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * getNextBestCorrelation() + * + * find channel pair with highest cross-correlation + *-------------------------------------------------------------------------*/ + +static void getNextBestCorrelation( + float xCorrMatrix[][MCT_MAX_CHANNELS], /* i : cross-correlation matrix */ + int16_t *_ch1, /* o : first channel of selected channel-pair */ + int16_t *_ch2, /* o : second channel of selected channel-pair */ + float *max_corr, /* o : normalized cross correlation value of selected channel pair */ + const int16_t sortInd, + const int16_t nChannels ) +{ + float tmp_corrVals[( MCT_MAX_CHANNELS * ( MCT_MAX_CHANNELS - 1 ) ) / 2]; + int16_t i; + int16_t ch1, ch2; + + set_f( tmp_corrVals, 0, ( MCT_MAX_CHANNELS * ( MCT_MAX_CHANNELS - 1 ) ) / 2 ); + + /* first sort correlation matrix */ + i = 0; + for ( ch1 = 0; ch1 < nChannels; ch1++ ) + { + for ( ch2 = ch1 + 1; ch2 < nChannels; ch2++ ) + { + if ( fabsf( xCorrMatrix[ch1][ch2] ) > 0 ) + { + assert( i < ( MCT_MAX_CHANNELS * ( MCT_MAX_CHANNELS - 1 ) ) / 2 ); + tmp_corrVals[i] = fabsf( xCorrMatrix[ch1][ch2] ); + i++; + } + } + } + + /* sort values */ + v_sort( tmp_corrVals, 0, ( ( nChannels * ( nChannels - 1 ) ) / 2 ) - 1 ); + + /* get max, or 2nd max and so on depending on sortInd value */ + *max_corr = tmp_corrVals[( nChannels * ( nChannels - 1 ) ) / 2 - 1 - sortInd]; + + /*find channel pair for this max_corr*/ + for ( ch1 = 0; ch1 < nChannels; ch1++ ) + { + for ( ch2 = ch1 + 1; ch2 < nChannels; ch2++ ) + { + if ( fabsf( xCorrMatrix[ch1][ch2] ) == *max_corr ) + { + *_ch1 = ch1; + *_ch2 = ch2; + *max_corr = xCorrMatrix[ch1][ch2]; /* assign to max_corr its actual value */ + break; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------* + * getCorrelationMatrix() + * + * calculates the cross correlation matrix for all active + * channels + *-----------------------------------------------------------------------*/ + +static void getCorrelationMatrix( + Encoder_State **sts, /* i : core coder handle */ + MCT_ENC_HANDLE hMCT, /* i : MCT handle */ + float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS] /* o : cross-correlation matrix */ +) +{ + int16_t ch1, ch2, n, nchan; + float tmp; + + nchan = hMCT->nchan_out_woLFE + hMCT->num_lfe; + + /* correlation */ + for ( ch1 = 0; ch1 < nchan; ch1++ ) + { + for ( ch2 = ch1; ch2 < nchan; ch2++ ) + { + xCorrMatrix[ch1][ch2] = 0; + + if ( sts[ch1]->core == sts[ch2]->core && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && + sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_LFE && + sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + int16_t nSubframes = ( sts[ch1]->core == TCX_20_CORE ? 1 : NB_DIV ); + int16_t L_subframe = sts[ch1]->hTcxEnc->L_frameTCX / nSubframes; + + for ( n = 0; n < nSubframes; n++ ) + { + xCorrMatrix[ch1][ch2] += dotp( sts[ch1]->hTcxEnc->spectrum[n], sts[ch2]->hTcxEnc->spectrum[n], L_subframe ); + } + } + } + } + + /* normalize */ + for ( ch1 = 0; ch1 < nchan; ch1++ ) + { + for ( ch2 = ch1 + 1; ch2 < nchan; ch2++ ) + { + tmp = sqrtf( xCorrMatrix[ch1][ch1] * xCorrMatrix[ch2][ch2] ); + + if ( tmp > 0.f ) + { + xCorrMatrix[ch1][ch2] /= tmp; + } + else + { + xCorrMatrix[ch1][ch2] = 0.f; + } + +#ifdef DEBUG_MODE_MDCT + dbgwrite( &xCorrMatrix[ch1][ch2], sizeof( float ), 1, 1, "./res/xCorrMatrix" ); +#endif + } + } + + return; +} + + +/*-----------------------------------------------------------------* + * getBestCorrelation() + * + * searches for the best correlated channel pair + *------------------------------------------------------------------*/ + +static void getBestCorrelation( + MCT_ENC_HANDLE hMCT, /* i : MCT handle */ + int16_t *_ch1, /* o : first channel of selected channel-pair */ + int16_t *_ch2, /* o : second channel of selected channel-pair */ + float *max_corr, /* o : normalized cross correlation value of selected channel pair */ + float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS] ) /* i : cross-correlation matrix */ +{ + int16_t ch1, ch2; + + *_ch1 = -1; + *_ch2 = -1; + *max_corr = 0.f; + + for ( ch1 = 0; ch1 < ( hMCT->nchan_out_woLFE + hMCT->num_lfe ); ch1++ ) + { + for ( ch2 = ch1 + 1; ch2 < ( hMCT->nchan_out_woLFE + hMCT->num_lfe ); ch2++ ) + { + if ( fabsf( *max_corr ) < fabsf( xCorrMatrix[ch1][ch2] ) ) + { + *max_corr = xCorrMatrix[ch1][ch2]; + + *_ch1 = ch1; + *_ch2 = ch2; + } + } + } + + return; +} + + +/*----------------------------------------------------------------------* + * getBlockValues() + * stereo processing for the channels of current block + *----------------------------------------------------------------------*/ + +static void getBlockValues( + Encoder_State **sts, /* i/o: core coder handle */ + const int16_t ch1, /* i : first channel of channel-pair */ + const int16_t ch2, /* i : second channel of channel-pair */ + MCT_BLOCK_DATA *hBlock, /* i : stereo block handle */ + float *mdst_spectrum[MCT_MAX_CHANNELS][2], /* i/o: MDST spectrum */ + float *inv_spectrum[MCT_MAX_CHANNELS][2], /* i/o: inverse spectrum */ + float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2] /* i/o: invers MDST spectrum */ +) +{ + int16_t n; + float *p_mdst_spectrum[2][2]; + float *p_inv_spectrum[2][2]; + float *p_inv_mdst_spectrum[2][2]; + Encoder_State *p_st[2]; + + /* init return values: */ + hBlock->isActive = 1; + + /* map vectors to current block channels */ + for ( n = 0; n < 2; n++ ) + { + p_mdst_spectrum[0][n] = mdst_spectrum[ch1][n]; + p_mdst_spectrum[1][n] = mdst_spectrum[ch2][n]; + p_inv_spectrum[0][n] = inv_spectrum[ch1][n]; + p_inv_spectrum[1][n] = inv_spectrum[ch2][n]; + p_inv_mdst_spectrum[0][n] = inv_mdst_spectrum[ch1][n]; + p_inv_mdst_spectrum[1][n] = inv_mdst_spectrum[ch2][n]; + } + p_st[0] = sts[ch1]; + p_st[1] = sts[ch2]; + + stereo_coder_tcx( hBlock->hStereoMdct, p_st, hBlock->mask, p_mdst_spectrum, p_inv_spectrum, p_inv_mdst_spectrum, 1 ); + + if ( ( sts[ch1]->core == TCX_20_CORE && hBlock->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) || ( sts[ch1]->core == TCX_10_CORE && hBlock->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO && hBlock->hStereoMdct->mdct_stereo_mode[1] == SMDCT_DUAL_MONO ) ) + { + hBlock->isActive = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * updateCorrelationMatrix() + * + * updates the cross correlation matrix with modified spectra after + * stereo block processing + *-------------------------------------------------------------------*/ + +static void updateCorrelationMatrix( + Encoder_State **sts, + MCT_ENC_HANDLE hMCT, + const int16_t _ch1, + const int16_t _ch2, + float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS] ) +{ + int16_t ch1, ch2, n; + + /* correlation: */ + for ( ch1 = 0; ch1 < ( hMCT->nchan_out_woLFE + hMCT->num_lfe ); ch1++ ) + { + for ( ch2 = ch1; ch2 < ( hMCT->nchan_out_woLFE + hMCT->num_lfe ); ch2++ ) + { + if ( sts[ch1]->core == sts[ch2]->core && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && + sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_LFE && + sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + int16_t nSubframes = ( sts[ch1]->core == TCX_20_CORE ? 1 : NB_DIV ); + + if ( ch1 == _ch1 || ch2 == _ch2 || ch1 == _ch2 || ch2 == _ch1 ) + { + for ( n = 0; n < nSubframes; n++ ) + { + xCorrMatrix[ch1][ch2] = 0; /*disable combinations with channels already processed */ + } + } + } + } + } + + return; +} + + +/*----------------------------------------------------------* + * channelPairToIndex() + * get the index of each channel pair + *----------------------------------------------------------*/ + +static int16_t channelPairToIndex( + const int16_t chIdx1, + const int16_t chIdx2, + const int16_t nChannels, + Encoder_State **sts /* i/o: encoder state structure */ +) +{ + int16_t ch1, ch2; + int16_t pairIdx; + + pairIdx = 0; + + for ( ch2 = 1; ch2 < nChannels; ch2++ ) + { + for ( ch1 = 0; ch1 < ch2; ch1++ ) + { + if ( sts[ch1]->mct_chan_mode == MCT_CHAN_MODE_LFE || sts[ch2]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + + if ( ch1 == chIdx1 && ch2 == chIdx2 ) + { + return pairIdx; + } + else + { + pairIdx++; + } + } + } + + return -1; +} + + +/*--------------------------------------------------------------------* + * getGlobalILD() + * get broadband ILD to mean energy and normalize channels with ratio + *--------------------------------------------------------------------*/ + +static void getGlobalILD( + Encoder_State **sts, + MCT_ENC_HANDLE hMCT, + float *mdst_spectrum[MCT_MAX_CHANNELS][2], + const int16_t nchan ) +{ + int16_t k, ch, nSubframes, L_subframe; + float nrg[MCT_MAX_CHANNELS]; + float meanE = 0.f, ratio, qratio; + int16_t cnt = 0; + + /*Initializations*/ + set_s( hMCT->lowE_ch, 0, nchan ); + + getChannelEnergies( sts, nrg, nchan ); + + /*calculate total energy without LFE*/ + for ( ch = 0; ch < nchan; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + meanE += nrg[ch]; + cnt++; + } + } + + /*calculate mean energy*/ + assert( cnt >= 2 ); + meanE = max( meanE / cnt, EPSILON ); + for ( ch = 0; ch < nchan; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + L_subframe = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; + + if ( nrg[ch] > meanE ) /*change it to meanE if final solution*/ + { + ratio = meanE / nrg[ch]; + hMCT->mc_global_ild[ch] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * ratio + 0.5f ) ) ); + qratio = (float) hMCT->mc_global_ild[ch] / SMDCT_ILD_RANGE; + } + else + { + ratio = nrg[ch] / meanE; + hMCT->lowE_ch[ch] = 1; + hMCT->mc_global_ild[ch] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * ratio + 0.5f ) ) ); + qratio = (float) SMDCT_ILD_RANGE / hMCT->mc_global_ild[ch]; + } + + for ( k = 0; k < nSubframes; k++ ) + { + v_multc( sts[ch]->hTcxEnc->spectrum[k], qratio, sts[ch]->hTcxEnc->spectrum[k], L_subframe ); + v_multc( mdst_spectrum[ch][k], qratio, mdst_spectrum[ch][k], L_subframe ); + } + } + } + +#ifdef DEBUG_MODE_MDCT + /*check if energy levels are comparable*/ + getChannelEnergies( sts, nrg, nchan ); + dbgwrite( nrg, sizeof( float ), 6, 1, "./res/nrgGlobalILD" ); +#endif + + return; +} + + +/*--------------------------------------------------------------------* + * apply_MCT_enc() + * + * apply MCT algorithm to input channels + *--------------------------------------------------------------------*/ + +void apply_MCT_enc( + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + float *mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: MDST spectrum */ + float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: inverse spectrum */ + float *inv_mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: inverse MDST spectrum */ + const int16_t nchan /* i : number of channels */ +) +{ + int16_t ch, k, ch1, ch2, nSubframes, L_subframeTCX; + float max_corr, qratio; + int16_t forceKeepTree, pair; + float sumCorrDiff, thr; + float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS]; + int16_t currBlockDataCnt; + int16_t cpEle[MCT_MAX_CHANNELS]; + int16_t inactiveBlockDetected; + int16_t tmp_ch1, tmp_ch2; + float tmp_max_corr; + int16_t count_active_ch = 0; + + wmops_sub_start( "mct_core_enc_mct" ); + + forceKeepTree = 1; + inactiveBlockDetected = 0; + set_s( cpEle, 0, MCT_MAX_CHANNELS ); + + /*Determine active channels*/ + for ( ch = 0; ch < nchan; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + count_active_ch++; + } + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + hMCT->mc_global_ild[ch] = 0; + } + } + + /*there should be at least one cp*/ + if ( count_active_ch >= CPE_CHANNELS ) + { + /*Normalize energies with global ILD*/ + getGlobalILD( sts, hMCT, mdst_spectrum, nchan ); +#ifndef DEBUG_FORCE_MCT_CP + getCorrelationMatrix( sts, hMCT, xCorrMatrix ); + + /*check if previous tree should be kept*/ + sumCorrDiff = 0.0f; + thr = 0.15f * (float) ( count_active_ch ) * ( count_active_ch - 1 ) / 2.0f; + for ( ch2 = 1; ch2 < nchan; ch2++ ) + { + for ( ch1 = 0; ch1 < ch2; ch1++ ) + { + if ( sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_LFE && + sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + sumCorrDiff += fabsf( hMCT->lastxCorrMatrix[ch1][ch2] - xCorrMatrix[ch1][ch2] ); + } + } + } + + if ( sumCorrDiff > thr ) + { + forceKeepTree = 0; + } + + /* check if keepTree is applied on unallowed blocks (e.g. channel pairs with different cores) */ + if ( forceKeepTree ) + { + if ( !hMCT->currBlockDataCnt ) + { + forceKeepTree = 0; + } + else + { + for ( pair = 0; pair < hMCT->currBlockDataCnt; pair++ ) + { + if ( xCorrMatrix[hMCT->hBlockData[pair]->ch1][hMCT->hBlockData[pair]->ch2] == 0.0f ) + { + forceKeepTree = 0; + } + } + } + } + + /*save initial correlation matrix for next frame*/ + for ( ch1 = 0; ch1 < nchan; ch1++ ) + { + for ( ch2 = ch1; ch2 < nchan; ch2++ ) + { + hMCT->lastxCorrMatrix[ch1][ch2] = xCorrMatrix[ch1][ch2]; + } + } + +#ifdef DEBUG_MODE_MDCT + dbgwrite( &forceKeepTree, sizeof( int16_t ), 1, 1, "./res/keepTree" ); +#endif + + currBlockDataCnt = 0; + while ( currBlockDataCnt < hMCT->nchan_out_woLFE ) + { + /* find best fitting channel pair: */ + ch1 = -1; + ch2 = -1; + max_corr = 0.f; + + if ( !forceKeepTree ) + { + getNextBestCorrelation( xCorrMatrix, &ch1, &ch2, &max_corr, inactiveBlockDetected, nchan ); + } + else + { + getBestCorrelation( hMCT, &tmp_ch1, &tmp_ch2, &tmp_max_corr, xCorrMatrix ); + + if ( currBlockDataCnt == hMCT->currBlockDataCnt ) + { + break; + } + else + { + ch1 = hMCT->hBlockData[currBlockDataCnt]->ch1; + ch2 = hMCT->hBlockData[currBlockDataCnt]->ch2; + + /*don't allow forcing of channel-pair if their correlation is under the threshold*/ + max_corr = xCorrMatrix[ch1][ch2]; + if ( fabsf( max_corr ) <= 0.3f ) + { + ch1 = tmp_ch1; + ch2 = tmp_ch2; + max_corr = tmp_max_corr; + forceKeepTree = 0; + } + } + } + + if ( ( fabsf( max_corr ) > DEFAULT_CORR_THRES && !hMCT->hbr_mct ) || ( fabsf( max_corr ) > SPAR_CORR_THRES && hMCT->hbr_mct ) ) + { + if ( !forceKeepTree ) + { + /*save channel pair*/ + hMCT->hBlockData[currBlockDataCnt]->ch1 = ch1; + hMCT->hBlockData[currBlockDataCnt]->ch2 = ch2; + } + + /* calculate all related values: */ + assert( sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_LFE && + sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_LFE ); + + getBlockValues( sts, ch1, ch2, hMCT->hBlockData[currBlockDataCnt], mdst_spectrum, inv_spectrum, inv_mdst_spectrum ); + + if ( hMCT->hBlockData[currBlockDataCnt]->isActive == 0 ) + { + inactiveBlockDetected++; + if ( inactiveBlockDetected > hMCT->nchan_out_woLFE / 2 ) + { + break; + } + forceKeepTree = 0; + + continue; /* skip inactive blocks where stereo mode is dual-mono */ + } + + updateCorrelationMatrix( sts, hMCT, ch1, ch2, xCorrMatrix ); + cpEle[ch1] = 1; + cpEle[ch2] = 1; + + currBlockDataCnt++; + } + else + { + break; + } + } + + /*save number of blocks for next frame*/ + hMCT->currBlockDataCnt = currBlockDataCnt; +#else + forceKeepTree = 1; + if ( nchan == 3 ) /*3 TCs*/ + { +#ifdef DEBUG_SINGLE_CODE_OMNI + ch1 = 1; + ch2 = 2; + cpEle[0] = 0; +#else + /* one stereo pair for first and second channel (W,Y)*/ + ch1 = 0; + ch2 = 1; + cpEle[2] = 0; +#endif + hMCT->currBlockDataCnt = 1; + hMCT->hBlockData[0]->ch1 = ch1; + hMCT->hBlockData[0]->ch2 = ch2; + + getBlockValues( sts, ch1, ch2, hMCT->hBlockData[0], mdst_spectrum, inv_spectrum, inv_mdst_spectrum ); + + if ( hMCT->hBlockData[0]->isActive ) + { + cpEle[ch1] = 1; + cpEle[ch2] = 1; + } + else + { + hMCT->currBlockDataCnt = 0; + } + } + else + { + assert( nchan == 4 ); /*4 TCs*/ + /* 2 Stereo Pairs W-Y and X-Z */ + hMCT->currBlockDataCnt = nchan * 0.5; + for ( currBlockDataCnt = 0; currBlockDataCnt < hMCT->currBlockDataCnt; currBlockDataCnt++ ) + { + hMCT->hBlockData[currBlockDataCnt]->ch1 = currBlockDataCnt * CPE_CHANNELS; + hMCT->hBlockData[currBlockDataCnt]->ch2 = currBlockDataCnt * CPE_CHANNELS + 1; + getBlockValues( sts, hMCT->hBlockData[currBlockDataCnt]->ch1, hMCT->hBlockData[currBlockDataCnt]->ch2, hMCT->hBlockData[currBlockDataCnt], mdst_spectrum, inv_spectrum, inv_mdst_spectrum ); + if ( hMCT->hBlockData[0]->isActive ) + { + cpEle[hMCT->hBlockData[currBlockDataCnt]->ch1] = 1; + cpEle[hMCT->hBlockData[currBlockDataCnt]->ch2] = 1; + } + else + { + hMCT->currBlockDataCnt -= 1; + } + } + } +#endif + + for ( ch = 0; ch < nchan; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + if ( ( !cpEle[ch] ) || hMCT->currBlockDataCnt == 0 ) + { + nSubframes = ( sts[ch]->core == TCX_20_CORE ) ? 1 : NB_DIV; + L_subframeTCX = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; + + if ( hMCT->lowE_ch[ch] ) + { + qratio = (float) hMCT->mc_global_ild[ch] / SMDCT_ILD_RANGE; + } + else + { + qratio = (float) SMDCT_ILD_RANGE / hMCT->mc_global_ild[ch]; + } + + for ( k = 0; k < nSubframes; k++ ) + { + v_multc( sts[ch]->hTcxEnc->spectrum[k], qratio, sts[ch]->hTcxEnc->spectrum[k], L_subframeTCX ); + v_multc( mdst_spectrum[ch][k], qratio, mdst_spectrum[ch][k], L_subframeTCX ); + } + hMCT->mc_global_ild[ch] = 0; + } + } + } + } + else + { + hMCT->currBlockDataCnt = 0; + for ( ch = 0; ch < nchan; ch++ ) + { + hMCT->mc_global_ild[ch] = 0; + } + } +#ifdef DEBUG_MODE_MDCT + dbgwrite( &hMCT->currBlockDataCnt, sizeof( int16_t ), 1, 1, "./res/blockCnt" ); + + { + int16_t pair, k; + for ( pair = 0; pair < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); pair++ ) + { + dbgwrite( &hMCT->hBlockData[pair]->ch1, sizeof( int16_t ), 1, 1, "./res/CP_in_blocks" ); + dbgwrite( &hMCT->hBlockData[pair]->ch2, sizeof( int16_t ), 1, 1, "./res/CP_in_blocks" ); + for ( k = 0; k < 2; k++ ) + { + dbgwrite( &hMCT->hBlockData[pair]->hStereoMdct->global_ild[k], sizeof( int16_t ), 1, 1, "./res/ILD_p_block" ); + dbgwrite( &hMCT->hBlockData[pair]->hStereoMdct->mdct_stereo_mode[k], sizeof( int16_t ), 1, 1, "./res/stereo_mode_p_block" ); + dbgwrite( &hMCT->hBlockData[pair]->mask[k], sizeof( int16_t ), MAX_SFB, 1, "./res/ms_mask_p_block" ); + } + } + } +#endif + + wmops_sub_end(); + + return; +} + + +/*--------------------------------------------------------------------* + * write_mct_bitstream() + * + * write mct metadata to bitstream + *--------------------------------------------------------------------*/ + +void write_mct_bitstream( + Encoder_State **sts, /* i/o: encoder state structure */ + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + const int16_t nchan /* i : number of channels */ +) +{ + int16_t pair, ch; + int16_t channelPairIndex; + int16_t nbits_start; + MCT_BLOCK_DATA_HANDLE hBlock; + Encoder_State *p_st[2]; + BSTR_ENC_HANDLE hBstr = sts[0]->hBstr; + + nbits_start = hBstr->nb_bits_tot; + + push_next_indice( hBstr, hMCT->currBlockDataCnt, MCT_NUM_BLOCK_DATA_BITS ); + + /* first write core info and overlap mode for all channels */ + for ( ch = 0; ch < nchan; ch++ ) + { + if ( ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE ) && hMCT->currBlockDataCnt && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + { + push_next_indice( hBstr, hMCT->mc_global_ild[ch], SMDCT_GLOBAL_ILD_BITS ); + } + } + + if ( hMCT->currBlockDataCnt ) + { + for ( ch = 0; ch < nchan; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + { + push_next_indice( hBstr, hMCT->lowE_ch[ch], 1 ); + } + } + } + + /* Do for each stereo block */ + for ( pair = hMCT->currBlockDataCnt - 1; pair >= 0; pair-- ) + { + hBlock = hMCT->hBlockData[pair]; + + /*calculate channel pair index and write it to BS*/ + channelPairIndex = channelPairToIndex( hBlock->ch1, hBlock->ch2, nchan, sts ); + push_next_indice( hBstr, channelPairIndex, hMCT->bitsChannelPairIndex ); + + /*point to encoder states of actual channels to write block pair bits*/ + p_st[0] = sts[hBlock->ch1]; + p_st[1] = sts[hBlock->ch2]; + + /*then business as usual for each block pair */ + write_stereo_to_bitstream( hMCT->hBlockData[pair]->hStereoMdct, p_st, hBlock->mask, 1, hBstr ); + } + + hMCT->nBitsMCT = hBstr->nb_bits_tot - nbits_start; + + return; +} + + +/*--------------------------------------------------------------------* + * mctStereoIGF_enc() + * + * IGF analysis of channels after MCT processing + *--------------------------------------------------------------------*/ + +void mctStereoIGF_enc( + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + float *orig_spectrum[MCT_MAX_CHANNELS][2], /* i : MDCT spectrum for ITF */ + float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ + float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV], /* i : same as above but for inverse spect.*/ + float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : inverse spectrum */ + const int16_t sp_aud_decision0[MCT_MAX_CHANNELS] /* i : speech audio decision */ +) +{ + int16_t b, nSubframes, L_subframeTCX; + int16_t p_ch[2], n, ch, ch1, ch2; + Encoder_State *p_st[NB_DIV]; + Encoder_State *st; + float *p_powerSpecMsInv[CPE_CHANNELS][NB_DIV]; + float *p_inv_spectrum[CPE_CHANNELS][NB_DIV]; + float *p_orig_spectrum[CPE_CHANNELS][NB_DIV]; + float p_powerSpec[NB_DIV][N_MAX]; + int16_t singleChEle[MCT_MAX_CHANNELS]; + + L_subframeTCX = 0; /* to avoid compilation warning */ + set_s( singleChEle, 1, hMCT->nchan_out_woLFE + hMCT->num_lfe ); + + for ( b = 0; b < hMCT->currBlockDataCnt; b++ ) + { + ch1 = hMCT->hBlockData[b]->ch1; + ch2 = hMCT->hBlockData[b]->ch2; + + p_ch[0] = ch1; + p_ch[1] = ch2; + + singleChEle[hMCT->hBlockData[b]->ch1] = 0; + singleChEle[hMCT->hBlockData[b]->ch2] = 0; + + /* point to encoder states of actual channels to write block pair bits */ + p_st[0] = sts[ch1]; + p_st[1] = sts[ch2]; + + mvr2r( powerSpec[ch1], p_powerSpec[0], L_FRAME48k ); + set_f( &p_powerSpec[0][L_FRAME48k], 0.f, N_MAX - L_FRAME48k ); + mvr2r( powerSpec[ch2], p_powerSpec[1], L_FRAME48k ); + set_f( &p_powerSpec[1][L_FRAME48k], 0.f, N_MAX - L_FRAME48k ); + + /* Band-wise M/S for MDST */ + nSubframes = p_st[0]->hTcxEnc->tcxMode == TCX_20 ? 1 : NB_DIV; + for ( n = 0; n < nSubframes; n++ ) + { + p_orig_spectrum[0][n] = orig_spectrum[ch1][n]; + p_orig_spectrum[1][n] = orig_spectrum[ch2][n]; + p_powerSpecMsInv[0][n] = powerSpecMsInv[ch1][n]; + p_powerSpecMsInv[1][n] = powerSpecMsInv[ch2][n]; + p_inv_spectrum[0][n] = inv_spectrum[ch1][n]; + p_inv_spectrum[1][n] = inv_spectrum[ch2][n]; + + if ( hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[n] != hMCT->hBlockData[b]->hStereoMdct->IGFStereoMode[n] || + hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[n] == SMDCT_BW_MS ) + { + ProcessStereoIGF( hMCT->hBlockData[b]->hStereoMdct, p_st, hMCT->hBlockData[b]->mask, p_orig_spectrum, p_powerSpec, p_powerSpecMsInv, p_inv_spectrum, n, sp_aud_decision0[ch1], p_st[0]->total_brate, 1 ); + } + else + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = p_st[ch]; + + L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; + + ProcessIGF( st, st->hTcxEnc->spectrum[n], (float *) orig_spectrum[p_ch[ch]][n], &powerSpec[p_ch[ch]][n * L_subframeTCX], st->core == TCX_20_CORE, n, sp_aud_decision0[ch1], 0 ); + } + } + } + } + + /* channel elements that are coded separately detected */ + if ( sum_s( singleChEle, ( hMCT->nchan_out_woLFE + hMCT->num_lfe ) ) != 0 ) + { + for ( ch = 0; ch < ( hMCT->nchan_out_woLFE + hMCT->num_lfe ); ch++ ) + { + if ( singleChEle[ch] ) + { + st = sts[ch]; + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE || st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + continue; + } + + nSubframes = st->hTcxEnc->tcxMode == TCX_20 ? 1 : NB_DIV; + for ( n = 0; n < nSubframes; n++ ) + { + ProcessIGF( st, st->hTcxEnc->spectrum[n], (float *) orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, sp_aud_decision0[ch], 0 ); + } + } + } + } + + return; +} diff --git a/lib_enc/ivas_mdct_core_enc.c b/lib_enc/ivas_mdct_core_enc.c new file mode 100644 index 0000000000..6f0735837b --- /dev/null +++ b/lib_enc/ivas_mdct_core_enc.c @@ -0,0 +1,1363 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*--------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------*/ + +#define MAX_STE_PRE_NRG 0.875f +#define MIN_STE_PRE_LEN 36 +#define SILENT_CHANNEL_THRES 100 + + +/*--------------------------------------------------------------* + * enc_prm_pre_mdct() + * + * encode all side parameters up to MDCT whitening + *---------------------------------------------------------------*/ + +static void enc_prm_pre_mdct( + Encoder_State *st, /* i/o: encoder state structure */ + int16_t param[], /* i : parameters */ + const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ + int16_t p_param[2], /* o : pointer to parameters for next round of bs writing */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + const int16_t is_mct, +#endif + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +) +{ + int16_t nbits_start; +#ifdef DEBUG_PLOT_BITS + int16_t tmp; +#endif + + nbits_start = hBstr->nb_bits_tot; + + /*--------------------------------------------------------------------------------* + * Header + *--------------------------------------------------------------------------------*/ + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + writeTCXMode( st, hBstr, is_mct, &nbits_start ); +#else + writeTCXMode( st, hBstr, &nbits_start ); +#endif + + /* write last_core for core switching and error concealment */ +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + if ( st->core == TCX_20_CORE ) + { + push_next_indice( hBstr, st->last_core != ACELP_CORE, 1 ); + } +#else + push_next_indice( hBstr, st->last_core != ACELP_CORE, 1 ); +#endif + +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); + if ( st->core == TCX_10_CORE ) + { + writeTCXWindowing( hBstr, st->hTcxCfg->tcx_last_overlap_mode ); + } +#else + writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); +#endif + + if ( st->element_mode == IVAS_CPE_MDCT && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + push_next_indice( hBstr, st->hTcxEnc->kernel_type[0], st->last_core != ACELP_CORE ? 2 : 1 ); + if ( st->core == TCX_10_CORE ) + { + assert( ( st->hTcxEnc->kernel_type[0] & 1 ) == ( st->hTcxEnc->kernel_type[1] >> 1 ) ); + push_next_indice( hBstr, st->hTcxEnc->kernel_type[1] & 1, 1 ); + } + } + + st->glr_reset = 0; +#ifdef DEBUG_PLOT_BITS + tmp = hBstr->nb_bits_tot - nbits_start; + dbgwrite( &tmp, sizeof( int16_t ), 1, 1, "./res/bits_TCX" ); + tmp = hBstr->nb_bits_tot; +#endif + + /*--------------------------------------------------------------------------------* + * TCX20/TCX10 parameters + *--------------------------------------------------------------------------------*/ + + writeTCXparam( st, hBstr, NULL, param, 0, 0, 0, no_param_tns, p_param, NULL, 0 ); + + st->side_bits_frame_channel = hBstr->nb_bits_tot - nbits_start; + +#ifdef DEBUG_PLOT_BITS + dbgwrite( &st->side_bits_frame_channel, sizeof( int16_t ), 1, 1, "./res/side_bits_pre" ); +#endif + + return; +} + +/*--------------------------------------------------------------* + * kernel_switch_detect() + * + * complex-valued detection method for transform kernel switching + *---------------------------------------------------------------*/ + +static int16_t kernel_switch_detect( + float *sigR0, /* i/o: MDCT samples of the 1st (left) channel */ + float *sigR1, /* i/o: MDCT samples of the 2nd (right) channel */ + float *sigI0, /* i/o: MDST samples of the 1st (left) channel */ + float *sigI1, /* i/o: MDST samples of the 2nd (right) channel */ + const int16_t nSamplesCore, /* i : number of core-coded samples below IGF */ + const int16_t nSamplesMax, /* i : transform length (number of MCLT lines) */ + const int16_t tcxTransType, /* i : TCX transform type (2*5, 1*10, or 1*20) */ + float *switchCovPrev, /* i/o: previous transform's correlation value */ + const uint32_t bitRateMode /* i : stereo bitrate mode (bps * L_frame) */ +) +{ + int16_t maxLength, anaLength, s; + float cov00, cov90, sumR0, sumR1, sumI0, sumI1; + + maxLength = ( nSamplesCore > 0 && nSamplesCore < nSamplesMax ) ? nSamplesCore : nSamplesMax; + anaLength = min( maxLength, (int16_t) ( bitRateMode >> 17 ) & 0xFFFE ); + s = ( nSamplesMax < 512 ? 2 : 4 ); /* exclude DC offset */ + + cov00 = 0.f; + cov90 = 0.f; + sumR0 = 0.f; + sumR1 = 0.f; + sumI0 = 0.f; + sumI1 = 0.f; + + if ( tcxTransType == TCX_5 ) + { + assert( nSamplesMax < 512 ); + anaLength >>= 1; + for ( s = 1; s < anaLength; s++ ) + { + cov00 += sigR0[s] * sigR1[s] + sigI0[s] * sigI1[s]; + cov90 += sigR0[s] * sigI1[s] - sigI0[s] * sigR1[s]; + sumR0 += sigR0[s] * sigR0[s]; + sumR1 += sigR1[s] * sigR1[s]; + sumI0 += sigI0[s] * sigI0[s]; + sumI1 += sigI1[s] * sigI1[s]; + } + anaLength += ( nSamplesMax >> 1 ); + s = 1 + ( nSamplesMax >> 1 ); /* 2nd TCX-5 spectrum is stacked onto 1st */ + } + for ( ; s < anaLength; s++ ) + { + cov00 += sigR0[s] * sigR1[s] + sigI0[s] * sigI1[s]; + cov90 += sigR0[s] * sigI1[s] - sigI0[s] * sigR1[s]; + sumR0 += sigR0[s] * sigR0[s]; + sumR1 += sigR1[s] * sigR1[s]; + sumI0 += sigI0[s] * sigI0[s]; + sumI1 += sigI1[s] * sigI1[s]; + } + + cov00 /= ( sqrtf( sumR0 * sumR1 ) + sqrtf( sumI0 * sumI1 ) + 1.f ); + cov90 /= ( sqrtf( sumR0 * sumI1 ) + sqrtf( sumI0 * sumR1 ) + 1.f ); + sumI0 = max( 0.f, fabsf( cov90 ) - fabsf( cov00 ) ); + sumI1 = ( switchCovPrev != NULL ? fabsf( *switchCovPrev ) : 0.f ); + s = ( cov90 < 0.f ? -1 : 1 ); + + if ( switchCovPrev != NULL ) /* update the decision smoothing history */ + { + *switchCovPrev = ( 0.875f * sumI1 + 0.125f * sumI0 ) * s; + } + + return ( ( sumI0 > 0.5f - 0.25f * sumI1 || fabsf( cov90 ) > 0.75f - 0.5f * sumI1 ) && ( sumI1 > 0.0625f ) ? s : 0 ); /* final decision */ +} + + +static void kernel_switch_trafo( + const float *x, + float *y, + const int16_t l, + const int16_t m, + const int16_t r, + const uint16_t kernelType ) +{ + const float signLeft = ( kernelType >= MDCT_II ? -1.f : 1.f ); + const float signRight = ( kernelType & 1 ? 1.f : -1.f ); + int16_t i; + float inputBuffer[N_MAX]; + + /* Init */ + for ( i = 0; i < m / 2; i++ ) + { + inputBuffer[m / 2 + r / 2 + i] = -1.0f * x[l + m / 2 - 1 - i]; + } + + for ( i = 0; i < l / 2; i++ ) + { + inputBuffer[m / 2 + r / 2 + m / 2 + i] = signLeft * x[i] - x[l - 1 - i]; + } + + for ( i = 0; i < m / 2; i++ ) + { + inputBuffer[m / 2 + r / 2 - 1 - i] = -1.0f * x[l + m / 2 + i]; + } + + for ( i = 0; i < r / 2; i++ ) + { + inputBuffer[m / 2 + r / 2 - 1 - m / 2 - i] = -1.0f * x[l + m + i] + signRight * x[l + m + r - 1 - i]; + } + + edxt( inputBuffer, y, l / 2 + m + r / 2, kernelType, FALSE ); + + v_multc( y, (float) sqrt( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); + + return; +} + + +static void kernel_switch_update_transforms( + float *sigR, /* i/o: MDCT samples of the given channel */ + float *sigI, /* i/o: MDST samples of the given channel */ + const int16_t tcxTransType, /* i : TCX transform type, cf also above */ + TCX_CONFIG_HANDLE hTcxCfg, /* i : TCX configuration handle, pointer */ + const int16_t bwidthSwCnt, /* i : bandwidth switching counter in st */ + const uint16_t kernelType, /* i : TCX transform kernel type (0 - 3) */ + const float *tcxTimeSignal, /* i : hTcxEnc->new_speech_TCX buf in st */ + const float *speech_TCX, /* i : hTcxEnc->speech_TCX buffer in st */ + float *windowedTimeSignal, /* i/o: windowed input and scratch buffer */ + const int16_t L_subframe /* i : transform length (number of bins) */ +) +{ + int16_t s, nSubframes; + + s = L_subframe; + nSubframes = ( tcxTransType == TCX_20 ? 1 : NB_DIV ); + + if ( kernelType == MDCT_IV ) /* no updates required here! */ + { + return; + } + + if ( kernelType == MDST_IV ) /* swap real and imag. parts */ + { + for ( s = L_subframe - 1; s >= 0; s-- ) + { + const float sigTemp = -sigR[s]; + + sigR[s] = sigI[s]; + sigI[s] = sigTemp; + } + + return; + } + + /* MDCT/MDST-II as real part, keep imag. part for speedup */ + if ( tcxTransType == TCX_20 && hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) + { + wtda_ext( tcxTimeSignal, windowedTimeSignal, (int16_t) windowedTimeSignal[0], (int16_t) windowedTimeSignal[1], s, kernelType ); + + edxt( windowedTimeSignal, sigR, s, kernelType, FALSE ); + + v_multc( sigR, (float) sqrt( (float) NORM_MDCT_FACTOR / s ), sigR, s ); + } + else /* 2 TCX5 subframes or 1 TCX10 or 1 transitory TCX20 */ + { + const float sign = ( kernelType >= MDCT_II ? 1.f : -1.f ); + const int16_t minWindowLen = hTcxCfg->tcx_mdct_window_min_lengthFB - 1; + int16_t i, leftOverlap = 0, rightOverlap = 0; + const float *left_win, *right_win; + + tcx_get_windows( hTcxCfg, (int16_t) windowedTimeSignal[0], (int16_t) windowedTimeSignal[1], &leftOverlap, &left_win, &rightOverlap, &right_win, 1, 0 ); + if ( speech_TCX != NULL && tcxTransType != TCX_20 && (int16_t) windowedTimeSignal[0] == FULL_OVERLAP && s - leftOverlap > minWindowLen ) + { + for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ + { + windowedTimeSignal[2 + leftOverlap + i] += sign * speech_TCX[-1 - i] * hTcxCfg->tcx_aldo_window_1_FB[leftOverlap / 2 + minWindowLen - i] * hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; + } + } + + if ( tcxTransType == TCX_5 ) + { + float tcx5Win[N_TCX10_MAX / 2 + L_MDCT_OVLP_MAX]; /* temporary buffer for TCX5 windowing */ + + assert( L_subframe == nSubframes * hTcxCfg->tcx5SizeFB ); + + /* Outer left folding */ + for ( i = 0; i < leftOverlap / 2; i++ ) + { + windowedTimeSignal[2 + leftOverlap / 2 + i] += sign * windowedTimeSignal[2 + leftOverlap / 2 - 1 - i]; + } + + s = hTcxCfg->tcx5SizeFB; /* obtain 1st TCX5 again */ + nSubframes *= 2; + WindowSignal( hTcxCfg, leftOverlap / 2, RECTANGULAR_OVERLAP, MIN_OVERLAP, &leftOverlap, &rightOverlap, windowedTimeSignal + 2, &s, tcx5Win, 0, 1, 0 ); + kernel_switch_trafo( tcx5Win, sigR, leftOverlap, s /* L_subfr. */ - ( leftOverlap + rightOverlap ) / 2, rightOverlap, kernelType ); + + if ( kernelType & 1 ) /* 2nd TCX5 is kernelType 3 */ + { + for ( i = L_subframe - 1; i >= s; i-- ) + { + const float sigTemp = -sigR[i]; + + sigR[i] = sigI[i]; + sigI[i] = sigTemp; + } + } + } + else /* tcxTransType != TCX_5 */ + { + kernel_switch_trafo( windowedTimeSignal + 2, sigR, leftOverlap, s - ( leftOverlap + rightOverlap ) / 2, rightOverlap, kernelType ); + } + } + + /* high-band gain control, in case of bandwidth switching */ + if ( bwidthSwCnt > 0 ) + { + v_multc( sigR + L_FRAME16k / nSubframes, (float) bwidthSwCnt / (float) BWS_TRAN_PERIOD, sigR + L_FRAME16k / nSubframes, s - L_FRAME16k / nSubframes ); + } + + return; +} + + +static void applyStereoPreProcessingCplx( + float *mdctSample1, + float *mdctSample2, + float *mdstSample1, + float *mdstSample2, + const float factIn, + const float factDe, + const float sign ) +{ + const float valI1 = *mdstSample1; + const float valI2 = *mdstSample2; + const float valR1 = *mdctSample1; + const float valR2 = *mdctSample2; + float absR1, absR2; + float dmxI1, dmxR1, dmxI2, dmxR2; + float n, d; + + absR1 = fabsf( valR1 ); + absR2 = fabsf( valR2 ); + dmxR1 = valR1 * factDe + sign * valR2 * factIn; /* cross */ + dmxR2 = valR2 * factDe + sign * valR1 * factIn; /* -talk */ + + if ( fabsf( dmxR1 ) < absR1 + absR2 ) /* avoid destructive summations */ + { + if ( absR1 * factDe < absR2 * factIn ) + { + dmxR1 = valR2 * factIn - sign * valR1 * factDe; + dmxI1 = valI2 * factIn - sign * valI1 * factDe; + } + else + { + dmxR1 = valR1 * factDe - sign * valR2 * factIn; + dmxI1 = valI1 * factDe - sign * valI2 * factIn; + } + } + else + { + dmxI1 = valI1 * factDe + sign * valI2 * factIn; + } + + if ( fabsf( dmxR2 ) < absR1 + absR2 ) /* avoid destructive summations */ + { + if ( absR1 * factIn < absR2 * factDe ) + { + dmxR2 = valR2 * factDe - sign * valR1 * factIn; + dmxI2 = valI2 * factDe - sign * valI1 * factIn; + } + else + { + dmxR2 = valR1 * factIn - sign * valR2 * factDe; + dmxI2 = valI1 * factIn - sign * valI2 * factDe; + } + } + else + { + dmxI2 = valI2 * factDe + sign * valI1 * factIn; + } + + n = valR1 * valR1 + valI1 * valI1; /* maintain spectral magnitude (1) */ + d = dmxR1 * dmxR1 + dmxI1 * dmxI1; + d = sqrtf( n / max( 1.f, d ) ); + *mdctSample1 = dmxR1 * d; + *mdstSample1 = dmxI1 * d; + + n = valR2 * valR2 + valI2 * valI2; /* maintain spectral magnitude (2) */ + d = dmxR2 * dmxR2 + dmxI2 * dmxI2; + d = sqrtf( n / max( 1.f, d ) ); + *mdctSample2 = dmxR2 * d; + *mdstSample2 = dmxI2 * d; + + return; +} + + +/*--------------------------------------------------------------* + * enc_ste_pre_mdct() + * + * encoder-side complex-valued stereo pre-processing (crosstalk) + *---------------------------------------------------------------*/ + +static uint16_t enc_ste_pre_mdct( + float *sigR0, /* i/o: MDCT samples of the 1st (left) channel */ + float *sigR1, /* i/o: MDCT samples of the 2nd (right) channel */ + float *sigI0, /* i/o: MDST samples of the 1st (left) channel */ + float *sigI1, /* i/o: MDST samples of the 2nd (right) channel */ + const int16_t nSamplesCore, /* i : number of core-coded samples below IGF */ + const int16_t nSamplesMax, /* i : transform length (number of MCLT lines) */ + const int16_t limitWeight, /* i : 1 means the pre-processing is softened */ + const uint16_t corrIdxPrev, /* i : previous transform's correlation index */ + const uint32_t bitRateMode /* i : stereo bitrate mode (bps * L_frame) */ +) +{ + int16_t fadeInLen, fadeInOff, nSampProc, preproLen; + float maxSqrValue, stepWeightI, stepWeightD; + float corr, sumL, sumR, chanCorrSign, xTalkI, xTalkD; + float sumMagnL, sumMagnR, sumPrdLR, sumPrdLL, sumPrdRR; + int16_t s; + + fadeInLen = ( nSamplesMax < 512 ? ( nSamplesMax < 256 ? 10 : 20 ) : 40 ); /* 1000Hz transition */ + fadeInOff = ( ( bitRateMode * 3 ) >> 19 ) & ( nSamplesMax < 512 ? 0xFFFF : 0xFFFE ); /* offset */ + nSampProc = ( nSamplesCore > 0 && nSamplesCore < nSamplesMax ) ? nSamplesCore : nSamplesMax; + preproLen = nSampProc - fadeInOff; + maxSqrValue = 16777216.f * preproLen * preproLen; + stepWeightI = ( limitWeight > 0 ? 1.f : 2.f ); /* crosstalk weight */ + stepWeightD = 4.f - stepWeightI; /* decrement, i.e., 1 - crosstalk */ + corr = 0.f, sumL = 0.f, sumR = 0.f; + sumMagnL = 0.f, sumMagnR = 0.f, sumPrdLR = 0.f, sumPrdLL = 0.f, sumPrdRR = 0.f; + + if ( fadeInOff + fadeInLen + MIN_STE_PRE_LEN >= nSampProc ) + { + return 0; + } + + for ( s = fadeInOff; s < nSampProc; s++ ) + { + float absMagnL, absMagnR; + absMagnL = sqrtf( sigR0[s] * sigR0[s] + sigI0[s] * sigI0[s] ); + absMagnR = sqrtf( sigR1[s] * sigR1[s] + sigI1[s] * sigI1[s] ); + + corr += sigR0[s] * sigR1[s] + sigI0[s] * sigI1[s]; + sumL += sigR0[s] + sigI0[s]; + sumR += sigR1[s] + sigI1[s]; + + sumMagnL += absMagnL; + sumMagnR += absMagnR; + sumPrdLR += absMagnL * absMagnR; + sumPrdLL += absMagnL * absMagnL; + sumPrdRR += absMagnR * absMagnR; + } + corr *= 2.f * preproLen; + corr -= sumL * sumR; + chanCorrSign = ( corr < -maxSqrValue ) ? -1.f : 1.f; + + sumL = sumMagnL / (float) preproLen; /* inter-channel correlation of magnitude */ + sumR = sumMagnR / (float) preproLen; + corr = sumPrdLR + sumL * sumR * preproLen - sumMagnL * sumR - sumMagnR * sumL; + sumL = sumPrdLL + sumL * sumL * preproLen - sumMagnL * sumL - sumMagnL * sumL; + sumR = sumPrdRR + sumR * sumR * preproLen - sumMagnR * sumR - sumMagnR * sumR; + corr = ( ( corr <= 0.f ) || ( sumL * sumR <= 0.f ) ? 0.f : ( corr * corr ) / ( sumL * sumR ) ); + + if ( ( corr > 0.75f && corrIdxPrev == 0 ) || /* processing weight fade-in/-out */ + ( corr <= 0.75f && corrIdxPrev > 0 ) ) + { + stepWeightI = 1.f; + stepWeightD = 4.f - stepWeightI; + } + + if ( corr <= 0.75f && corrIdxPrev == 0 ) /* bypass all processing, just return */ + { + return 0; + } + + sigR0 += fadeInOff + 1; /* stereo pre-processing starts with an offset of one! */ + sigR1 += fadeInOff + 1; + sigI0 += fadeInOff + 1; + sigI1 += fadeInOff + 1; + xTalkI = stepWeightI; + xTalkD = stepWeightD * ( 2 * fadeInLen - 1 ); + + for ( s = fadeInLen - 1; s > 0; s--, sigR0++, sigR1++, sigI0++, sigI1++ ) + { + applyStereoPreProcessingCplx( sigR0, sigR1, sigI0, sigI1, xTalkI, xTalkD, chanCorrSign ); + xTalkI += stepWeightI; + xTalkD -= stepWeightD; + } + + for ( s = preproLen - fadeInLen; s > 0; s--, sigR0++, sigR1++, sigI0++, sigI1++ ) + { + applyStereoPreProcessingCplx( sigR0, sigR1, sigI0, sigI1, xTalkI, xTalkD, chanCorrSign ); + } + + if ( nSampProc < nSamplesMax ) /* fade-out of processing at start of IGF range */ + { + for ( s = min( fadeInLen, nSamplesMax - nSampProc ) - 1; s > 0; s--, sigR0++, sigR1++, sigI0++, sigI1++ ) + { + xTalkI -= stepWeightI; + xTalkD += stepWeightD; + applyStereoPreProcessingCplx( sigR0, sigR1, sigI0, sigI1, xTalkI, xTalkD, chanCorrSign ); + } + } + + return ( corr > 0.75f ? 1 : 0 ); +} + + +/*--------------------------------------------------------------* + * enc_prm_igf_mdct() + * + * write igf parameters to bitstream + *---------------------------------------------------------------*/ + +void enc_prm_igf_mdct( + Encoder_State *st, /* i : Encoder state handle */ + BSTR_ENC_HANDLE hBstr /* i/o: Bitstream handle */ +) +{ + int16_t nbits_start, total_nbbits; + + nbits_start = hBstr->nb_bits_tot; + + if ( st->core == TCX_20_CORE ) + { + st->hIGFEnc->infoTotalBitsPerFrameWritten = 0; + + IGFEncWriteBitstream( st->hIGFEnc, hBstr, &st->hIGFEnc->infoTotalBitsPerFrameWritten, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); + } + else + { + IGFEncWriteConcatenatedBitstream( st->hIGFEnc, hBstr ); + } + + total_nbbits = hBstr->nb_bits_tot - nbits_start; + st->side_bits_frame_channel += total_nbbits; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_mdct_core_whitening_enc() + * + * MCT preprocessing up to whitening the core spectrum + *-------------------------------------------------------------------*/ + +void ivas_mdct_core_whitening_enc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + float new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ + float old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe */ + float *mdst_spectrum_long[CPE_CHANNELS], /* o : buffer for MDST spectrum */ + int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* o : buffer TNS bits */ + float *orig_spectrum_long[CPE_CHANNELS], /* o : origingal spectrum w/o whitening */ + int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* o : number of tns parameters put into prm */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* o : pointer to the parameter table */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t *LFE_off, /* o : flag if LFE has zero content */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ + const int16_t nChannels /* i : total number of coded channels */ +) +{ + int16_t n, ch, nSubframes, L_subframe, L_subframeTCX, tcx_subframe_coded_lines; + float A_q[CPE_CHANNELS][NB_DIV][M + 1]; + int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW]; + int16_t param_core[CPE_CHANNELS][2 * NPRM_DIV]; + int16_t ltpBits[CPE_CHANNELS]; + int16_t i, T_op[CPE_CHANNELS][3]; + float *orig_spectrum[CPE_CHANNELS][NB_DIV]; /* Pointers to MDCT output for a short block (L/R) */ + float temp_buffer[15 * L_FRAME48k / 8]; + float *windowedSignal[CPE_CHANNELS]; + float *powerSpec = orig_spectrum_long[0]; + float *mdst_spectrum[CPE_CHANNELS][2]; + float nrg; + Encoder_State *st, **sts; + float scf[CPE_CHANNELS][NB_DIV][M]; + float scf_q[CPE_CHANNELS][NB_DIV][M]; + float chE[2], chE_tot; + int8_t sns_low_br_mode; + int8_t skipped_first_channel; + int16_t nbits_start_sns; + int16_t num_sns; + + wmops_sub_start( "mdct_core_whitening" ); + + /*--------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------*/ + + sts = hCPE->hCoreCoder; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + stereo_tcx_init_enc( sts[ch] ); + } + + set_s( tnsSize[ch], 0, 2 ); + set_s( tnsBits[ch], 0, 2 ); + ltpBits[ch] = 0; + + for ( i = 0; i < 3; i++ ) + { + T_op[ch][i] = sts[ch]->pitch[i]; + + /* check minimum pitch for quantization */ + if ( T_op[ch][i] < PIT_MIN_SHORTER ) + { + T_op[ch][i] *= 2; + } + } + } + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + orig_spectrum[ch][0] = orig_spectrum_long[ch]; + orig_spectrum[ch][1] = orig_spectrum_long[ch] + N_TCX10_MAX; + mdst_spectrum[ch][0] = mdst_spectrum_long[ch]; + mdst_spectrum[ch][1] = mdst_spectrum_long[ch] + N_TCX10_MAX; + } + + windowedSignal[0] = orig_spectrum_long[0]; /* NOTE temporarily available */ + windowedSignal[1] = temp_buffer; /* orig_spectrum_long isn't long enough */ + + /*--------------------------------------------------------------* + * TCX20/TCX10 switching decision + *---------------------------------------------------------------*/ + + if ( mct_on ) + { + sts[0]->hTcxEnc->tfm_mem = sts[1]->hTcxEnc->tfm_mem = sqrtf( 0.5f * ( sts[0]->hTcxEnc->tfm_mem * sts[0]->hTcxEnc->tfm_mem + sts[1]->hTcxEnc->tfm_mem * sts[1]->hTcxEnc->tfm_mem ) ); /* RMS */ + sts[0]->hTcxEnc->tcxltp_norm_corr_past = sts[1]->hTcxEnc->tcxltp_norm_corr_past = 0.5f * ( sts[0]->hTcxEnc->tcxltp_norm_corr_past + sts[1]->hTcxEnc->tcxltp_norm_corr_past ); + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); + } + } + } + + sts[0]->core = sts[0]->hTcxEnc->tcxMode; + sts[1]->core = sts[1]->hTcxEnc->tcxMode; + + /*--------------------------------------------------------------* + * Core Signal Analysis: MDCT, TNS + *---------------------------------------------------------------*/ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + + SetCurrentPsychParams( st->core, 0, st->hTcxCfg ); + + /* tcx ltp analysis on the 12.8kHz weighted speech, saves preproc resampling to sr_core */ + tcx_ltp_encode( st, st->hTcxEnc->tcxMode, L_FRAME, old_wsp[ch] + L_WSP_MEM + L_LOOK_12k8, NULL, old_wsp[ch] + L_WSP_MEM + L_LOOK_12k8, T_op[ch], ¶m_core[ch][1 + NOISE_FILL_RANGES], <pBits[ch], NULL, 0, IVAS_CPE_MDCT ); + + core_signal_analysis_high_bitrate( new_samples[ch] + L_INP_MEM, T_op[ch], NULL, NULL, st, mdst_spectrum[ch], tnsSize[ch], tnsBits[ch], param_core[ch], <pBits[ch], windowedSignal[ch], st->L_frame, st->hTcxEnc->L_frameTCX, hCPE->last_element_mode, 0 ); + + /* BWD in MDCT domain */ + if ( st->hTcxEnc->transform_type[0] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) + { + if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + bw_detect( st, NULL, st->hTcxEnc->spectrum[0], NULL ); + } + } + + if ( st->last_core == ACELP_CORE ) /* reset past kernel info */ + { + st->hTcxEnc->kernel_switch_corr_past = 0.f; + st->hTcxEnc->kernel_symmetry_past = 0; + } + } + + /*--------------------------------------------------------------* + * Transform Kernel Switching, Stereo Pre-Processing, and TNS + *---------------------------------------------------------------*/ + + sts[0]->hTcxEnc->fUseTns[1] = 0; + + if ( sts[0]->element_brate < IVAS_80k && sts[0]->core == sts[1]->core && sts[0]->element_mode == IVAS_CPE_MDCT && !mct_on ) + { + int16_t nSampCore; + int32_t totalRate; + TCX_ENC_HANDLE hTcxEnc0, hTcxEnc1; + + nSampCore = ( sts[0]->igf ) ? max( sts[0]->hIGFEnc->infoStartLine, sts[1]->hIGFEnc->infoStartLine ) : 0; + totalRate = sts[0]->element_brate; + hTcxEnc0 = sts[0]->hTcxEnc; + hTcxEnc1 = sts[1]->hTcxEnc; + + init_tcx_enc_info( sts[0], &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); + + if ( nSampCore == 0 ) + { + nSampCore = tcx_subframe_coded_lines; + } + + nrg = 0.25f * ( hTcxEnc0->tcxltp_norm_corr_past + hTcxEnc0->tcxltp_norm_corr_mem + /* tcxltp_norm_corr_past already contains the */ + hTcxEnc1->tcxltp_norm_corr_past + hTcxEnc1->tcxltp_norm_corr_mem ); /* normalized correlation of the current frame */ + + L_subframe = max( 512, L_subframe ); + nSubframes = ( hTcxEnc0->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( n = 0; n < nSubframes; n++ ) + { + if ( hTcxEnc0->transform_type[n] == hTcxEnc1->transform_type[n] ) + { + const int16_t switchKernel = /* these 4 transform types can be applied: 0 = MDCT-IV, 1 = MDST-II, 2 = MDCT-II, 3 = MDST-IV */ + kernel_switch_detect( hTcxEnc0->spectrum[n], hTcxEnc1->spectrum[n], mdst_spectrum[0][n], mdst_spectrum[1][n], nSampCore / nSubframes, + L_subframeTCX / nSubframes, hTcxEnc0->transform_type[n], &hTcxEnc0->kernel_switch_corr_past, ( totalRate * L_subframe ) / nSubframes ); + if ( switchKernel ) /* apply MDST-IV coding in one of the channels */ + { + hTcxEnc0->kernel_type[n] = ( hTcxEnc0->kernel_symmetry_past ? 3 : 1 ) - max( 0, switchKernel ); + hTcxEnc1->kernel_type[n] = ( hTcxEnc1->kernel_symmetry_past ? 2 : 0 ) + max( 0, switchKernel ); + } + else /* switchKernel == 0, switch back to MDCT-IV in both channels */ + { + hTcxEnc0->kernel_type[n] = ( hTcxEnc0->kernel_symmetry_past ? 2 : 0 ); + hTcxEnc1->kernel_type[n] = ( hTcxEnc1->kernel_symmetry_past ? 2 : 0 ); + } + } + else + { + hTcxEnc0->kernel_switch_corr_past = 0.f; /* don't update the kernel switching state, postpone it to when data is available */ + hTcxEnc0->kernel_type[n] = ( hTcxEnc0->kernel_symmetry_past ? 3 : 0 ); + hTcxEnc1->kernel_type[n] = ( hTcxEnc1->kernel_symmetry_past ? 3 : 0 ); + } + hTcxEnc0->kernel_symmetry_past = hTcxEnc0->kernel_type[n] & 1; + hTcxEnc1->kernel_symmetry_past = hTcxEnc1->kernel_type[n] & 1; + + kernel_switch_update_transforms( hTcxEnc0->spectrum[n], mdst_spectrum[0][n], hTcxEnc0->transform_type[n], sts[0]->hTcxCfg, sts[0]->bwidth_sw_cnt, hTcxEnc0->kernel_type[n], + hTcxEnc0->new_speech_TCX, ( n == 1 ? NULL : hTcxEnc0->speech_TCX ), windowedSignal[0] + n * L_FRAME48k, L_subframeTCX / nSubframes ); + kernel_switch_update_transforms( hTcxEnc1->spectrum[n], mdst_spectrum[1][n], hTcxEnc1->transform_type[n], sts[1]->hTcxCfg, sts[1]->bwidth_sw_cnt, hTcxEnc1->kernel_type[n], + hTcxEnc1->new_speech_TCX, ( n == 1 ? NULL : hTcxEnc1->speech_TCX ), windowedSignal[1] + n * L_FRAME48k, L_subframeTCX / nSubframes ); + } + for ( n = 0; n < nSubframes; n++ ) + { + if ( hTcxEnc0->transform_type[n] == hTcxEnc1->transform_type[n] && /* do not combine TCX-5 and TCX-10 as this causes artifacts */ + sts[0]->hTcxCfg->tcx_curr_overlap_mode == sts[1]->hTcxCfg->tcx_curr_overlap_mode && + sts[0]->hTcxCfg->tcx_last_overlap_mode == sts[1]->hTcxCfg->tcx_last_overlap_mode ) + { + if ( hTcxEnc0->transform_type[n] == TCX_5 ) + { + const int16_t tcx5SizeFB = sts[1]->hTcxCfg->tcx5SizeFB; + + hTcxEnc0->enc_ste_pre_corr_past = + enc_ste_pre_mdct( hTcxEnc0->spectrum[n], hTcxEnc1->spectrum[n], mdst_spectrum[0][n], mdst_spectrum[1][n], nSampCore / ( 2 * NB_DIV ), + L_subframeTCX / ( 2 * NB_DIV ), ( nrg > MAX_STE_PRE_NRG ? 1 : 0 ), hTcxEnc0->enc_ste_pre_corr_past, ( totalRate * L_subframe ) / ( 2 * NB_DIV ) ); + + hTcxEnc0->enc_ste_pre_corr_past = + enc_ste_pre_mdct( hTcxEnc0->spectrum[n] + tcx5SizeFB, hTcxEnc1->spectrum[n] + tcx5SizeFB, mdst_spectrum[0][n] + tcx5SizeFB, mdst_spectrum[1][n] + tcx5SizeFB, nSampCore / ( 2 * NB_DIV ), + L_subframeTCX / ( 2 * NB_DIV ), ( nrg > MAX_STE_PRE_NRG ? 1 : 0 ), hTcxEnc0->enc_ste_pre_corr_past, ( totalRate * L_subframe ) / ( 2 * NB_DIV ) ); + } + else + { + hTcxEnc0->enc_ste_pre_corr_past = + enc_ste_pre_mdct( hTcxEnc0->spectrum[n], hTcxEnc1->spectrum[n], mdst_spectrum[0][n], mdst_spectrum[1][n], nSampCore / nSubframes, + L_subframeTCX / nSubframes, ( nrg > MAX_STE_PRE_NRG ? 1 : 0 ), hTcxEnc0->enc_ste_pre_corr_past, ( totalRate * L_subframe ) / nSubframes ); + } + } + else + { + hTcxEnc0->enc_ste_pre_corr_past = 0; + } + } + } + else + { + sts[0]->hTcxEnc->enc_ste_pre_corr_past = 0; + sts[0]->hTcxEnc->kernel_switch_corr_past = 0.f; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + TCX_ENC_HANDLE hTcxEncCh = sts[ch]->hTcxEnc; + + if ( ( hCPE->cpe_id * CPE_CHANNELS + ch ) >= nChannels || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + hTcxEncCh->kernel_symmetry_past = hTcxEncCh->kernel_type[0] = 0; + + continue; + } + + init_tcx_enc_info( sts[ch], &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); + nSubframes = ( hTcxEncCh->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( n = 0; n < nSubframes; n++ ) + { + hTcxEncCh->kernel_type[n] = ( hTcxEncCh->kernel_symmetry_past && sts[ch]->element_mode == IVAS_CPE_MDCT ? 3 - mct_on : 0 ); + hTcxEncCh->kernel_symmetry_past = hTcxEncCh->kernel_type[n] & 1; + + kernel_switch_update_transforms( hTcxEncCh->spectrum[n], mdst_spectrum[ch][n], hTcxEncCh->transform_type[n], sts[ch]->hTcxCfg, sts[ch]->bwidth_sw_cnt, hTcxEncCh->kernel_type[n], + hTcxEncCh->new_speech_TCX, ( n /*1*/ ? NULL : hTcxEncCh->speech_TCX ), windowedSignal[ch] + n * L_FRAME48k, L_subframeTCX / nSubframes ); + } + } + } + + TNSAnalysisStereo( sts, mdst_spectrum, 0, tnsSize, tnsBits, param_core, mct_on ); + + /*--------------------------------------------------------------* + * Envelope Quantization and FDNS + *---------------------------------------------------------------*/ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( ( hCPE->cpe_id * CPE_CHANNELS + ch ) >= nChannels || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + + st = sts[ch]; + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + if ( mct_on ) + { + set_zero( chE, NB_DIV ); + } + + init_tcx_enc_info( st, &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); + + L_subframe = L_subframe / nSubframes; + L_subframeTCX = ( mct_on ? L_subframeTCX / nSubframes : L_subframe ); + tcx_subframe_coded_lines = tcx_subframe_coded_lines / nSubframes; + + for ( n = 0; n < nSubframes; n++ ) + { + if ( st->hTcxEnc->fUseTns[n] ) + { + for ( i = 0; i < L_subframeTCX; i++ ) + { + powerSpec[i] = ( st->hTcxEnc->spectrum[n][i] * st->hTcxEnc->spectrum[n][i] ); + } + } + else + { + for ( i = 0; i < L_subframeTCX; i++ ) + { + powerSpec[i] = ( mdst_spectrum[ch][n][i] * mdst_spectrum[ch][n][i] + st->hTcxEnc->spectrum[n][i] * st->hTcxEnc->spectrum[n][i] ); + } + } + + if ( mct_on ) + { + chE[n] = sum_f( powerSpec, L_subframeTCX ); + } + + sns_compute_scf( powerSpec, st->hTcxCfg->psychParamsCurrent, st->last_core == ACELP_CORE ? L_subframe : st->L_frame, scf[ch][n] ); + } + + /* MCT: detect whether there are silent channels and set mct_chan_mode accordingly */ + if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE && mct_on ) + { + chE_tot = sum_f( chE, NB_DIV ); + + if ( chE_tot < SILENT_CHANNEL_THRES ) + { + st->mct_chan_mode = MCT_CHAN_MODE_IGNORE; + st->bits_frame_channel = 0; + } + else + { + st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + } + } + } + + /* set low br mode, if possible. Can later be discarded, depending on the stereo mode used for SNS parameter decoding */ + if ( hCPE->element_brate == IVAS_48k && !( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ) + { + sns_low_br_mode = !sts[0]->sp_aud_decision0; + } + else + { + sns_low_br_mode = 0; + } + + if ( sts[0]->hTcxEnc->tcxMode == TCX_20 && sts[1]->hTcxEnc->tcxMode == TCX_20 && + sts[0]->mct_chan_mode == MCT_CHAN_MODE_REGULAR && sts[1]->mct_chan_mode == MCT_CHAN_MODE_REGULAR ) + { + sns_avq_cod_stereo( scf[0][0], scf[1][0], scf_q[0][0], scf_q[1][0], param_lpc[0], param_lpc[1] ); + } + else + { +#ifdef DEBUG_MODE_MDCT + { + float ener_side = 0; + float ener_mid = 0; + dbgwrite( &ener_side, sizeof( float ), 1, 1, "./res/ener_side" ); + dbgwrite( &ener_mid, sizeof( float ), 1, 1, "./res/ener_mid" ); + } +#endif + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + param_lpc[ch][0] = ch; + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + st = sts[ch]; + + if ( st->hTcxEnc->tcxMode == TCX_20 ) + { + sns_avq_cod( scf[ch][0], NULL, scf_q[ch][0], NULL, ¶m_lpc[ch][1], st->hTcxEnc->tcxMode, sns_low_br_mode ); + } + else + { +#ifdef SNS_LOW_BR_MODE + sns_avq_cod( scf[ch][1], scf[ch][0], scf_q[ch][1], scf_q[ch][0], ¶m_lpc[ch][1], st->hTcxEnc->tcxMode, sns_low_br_mode ); +#else + sns_avq_cod( scf[ch][1], scf[ch][0], scf_q[ch][1], scf_q[ch][0], ¶m_lpc[ch][1], st->hTcxEnc->tcxMode, ( hCPE->element_brate == IVAS_48k && !hCPE->hCoreCoder[0]->sp_aud_decision0 ) ); +#endif + } + } + } + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + st = sts[ch]; + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + init_tcx_enc_info( st, &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); + + L_subframe = L_subframe / nSubframes; + L_subframeTCX = L_subframeTCX / nSubframes; + tcx_subframe_coded_lines = tcx_subframe_coded_lines / nSubframes; + + for ( n = 0; n < nSubframes; n++ ) + { + mvr2r( st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], L_subframeTCX ); + + /* Shape spectrum */ + ShapeSpectrum( st->hTcxCfg, A_q[ch][n], NULL, L_subframe, tcx_subframe_coded_lines, st->hTcxEnc->spectrum[n], st->hTcxEnc->fUseTns[n], st, scf_q[ch][n] ); + } + } + + /*--------------------------------------------------------------* + * TNS + *---------------------------------------------------------------*/ + + /* first deinterleave once more */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + st = sts[ch]; + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( n = 0; n < nSubframes; n++ ) + { + if ( st->hTcxEnc->transform_type[n] == TCX_5 ) + { + tcx5SpectrumDeinterleaving( st->hTcxCfg->tcx5SizeFB, st->hTcxEnc->spectrum[n] ); + tcx5SpectrumDeinterleaving( st->hTcxCfg->tcx5SizeFB, mdst_spectrum[ch][n] ); + } + } + } + + TNSAnalysisStereo( sts, mdst_spectrum, 1, tnsSize, tnsBits, param_core, mct_on ); + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE || sts[ch]->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + continue; + } + + st = sts[ch]; + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + init_tcx_enc_info( st, &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); + + L_subframe = L_subframe / nSubframes; + L_subframeTCX = L_subframeTCX / nSubframes; + tcx_subframe_coded_lines = tcx_subframe_coded_lines / nSubframes; + + for ( n = 0; n < nSubframes; n++ ) + { + if ( !st->hTcxEnc->fUseTns[n] ) + { + ShapeSpectrum( st->hTcxCfg, A_q[ch][n], NULL, L_subframe, tcx_subframe_coded_lines, mdst_spectrum[ch][n], st->hTcxEnc->fUseTns[n], st, scf_q[ch][n] ); + } + } + } + + /*check whether LFE channel is active*/ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + /*no need to write last channel bit in case of odd channels*/ + if ( ( hCPE->cpe_id * CPE_CHANNELS + ch ) >= nChannels ) + { + continue; + } + + st = sts[ch]; + + if ( mct_on ) /* signal bits should be written only for MCT*/ + { + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + assert( *LFE_off == 1 ); + push_next_indice( hBstr, *LFE_off, 1 ); + } + else if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + { + push_next_indice( hBstr, 1, 1 ); + } + else + { + assert( st->mct_chan_mode == MCT_CHAN_MODE_REGULAR ); + push_next_indice( hBstr, 0, 1 ); + } + } + } + + /* write bitstream with info up to here */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && ( *LFE_off ) ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + st->side_bits_frame_channel = 0; + /*dummy initialization to prevent range coder crashing in case all channels are silent and bits are distributed to channel 0 */ + *p_param[ch] = 9; + continue; + } + +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + enc_prm_pre_mdct( st, param_core[ch], ( ( ( ch > 0 ) && ( sts[0]->hTcxEnc->fUseTns[0] + sts[0]->hTcxEnc->fUseTns[1] > 0 ) && !mct_on ) ? tnsSize[ch] : NULL ), p_param[ch], mct_on, hBstr ); +#else + enc_prm_pre_mdct( st, param_core[ch], ( ( ( ch > 0 ) && ( sts[0]->hTcxEnc->fUseTns[0] + sts[0]->hTcxEnc->fUseTns[1] > 0 ) && !mct_on ) ? tnsSize[ch] : NULL ), p_param[ch], hBstr ); +#endif + + if ( ch > 0 && sts[0]->hTcxEnc->fUseTns[0] + sts[0]->hTcxEnc->fUseTns[1] > 0 && !mct_on ) + { + if ( st->hTcxEnc->tnsData[0].nFilters < 0 ) + { + tnsBits[ch][0] = 1; + } + else + { + tnsBits[ch][0]++; + } + + if ( st->core == TCX_10_CORE ) + { + if ( st->hTcxEnc->tnsData[1].nFilters < 0 ) + { + tnsBits[ch][1] = 1; + } + else + { + tnsBits[ch][1]++; + } + } + } + } + + /*--------------------------------------------------------------------------------* + * SNS parameters + *--------------------------------------------------------------------------------*/ + + /* write SNS parameter separately since at the decoder, both channels' cores need to be decoded before, so the joint SNS decoding can be done */ + skipped_first_channel = 0; + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && ( *LFE_off ) ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + skipped_first_channel = 1; + continue; + } + + nbits_start_sns = hBstr->nb_bits_tot; + + num_sns = ( st->core == TCX_20_CORE ) ? 1 : 2; + + if ( ch == 0 || skipped_first_channel ) + { + push_next_indice( hBstr, param_lpc[0][0] >> 1, 1 ); + + if ( st->element_brate == IVAS_48k && !( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ) + { + /* write classifier decision to signal low br mode for SNS encoding, for all other configs, low_br mode is not possible */ + push_next_indice( hBstr, sns_low_br_mode, 1 ); + } + } + encode_lpc_avq( hBstr, num_sns, param_lpc[ch], st->core, st->element_mode ); + + st->side_bits_frame_channel += hBstr->nb_bits_tot - nbits_start_sns; + } + + /*update pitch buffer*/ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && ( *LFE_off ) ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + continue; + } + if ( param_core[ch][1 + NOISE_FILL_RANGES] != 0 ) + { + set_f( pitch_buf[ch], ( st->hTcxEnc->tcxltp_pitch_int + (float) st->hTcxEnc->tcxltp_pitch_fr / (float) st->pit_res_max ) * (float) st->sr_core / (float) INT_FS_12k8, NB_SUBFR16k ); + } + else + { + set_f( pitch_buf[ch], L_SUBFR, NB_SUBFR16k ); + } + } + + wmops_sub_end(); + return; +} + + +/*--------------------------------------------------------------* + * ivas_mdct_quant_coder() + * + * Spectrum quantization and coding + *---------------------------------------------------------------*/ + +void ivas_mdct_quant_coder( + CPE_ENC_HANDLE hCPE, /* i/o: Encoder CPE handle */ + const int16_t LFE_off, /* i : flag if LFE is inactive */ + int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* i : bits needed for TNS parameters */ + int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* i : size of TNS */ + int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to parameter array */ + const int16_t is_mct /* i : is mct flag */ +) +{ + Encoder_State *st, **sts; + int16_t bitsAvailable, target_bits, nSubframes, ch, n; + int16_t L_frameTCX[CPE_CHANNELS][2]; /* full frame length */ + int16_t L_frame[CPE_CHANNELS][2]; /* frame length */ + int16_t L_spec[CPE_CHANNELS][2]; /* length of the coded spectrum */ + int16_t tcx_offset[CPE_CHANNELS][2]; /* folding point offset relative to the end of the previous frame */ + int16_t noiseFillingBorder[CPE_CHANNELS][2]; /* noise filling border */ + float fac_ns[CPE_CHANNELS][2]; /* noise filling level */ + int16_t nf_seed[CPE_CHANNELS][2]; /* noise filling random seed */ + int16_t hm_active[CPE_CHANNELS][2]; /* flag indicating if the harmonic model is active */ + float ener[CPE_CHANNELS][2]; /* energy of the quantized spectrum */ + float gain_tcx[CPE_CHANNELS][2]; /* global gain */ + float quantized_spectrum_long[CPE_CHANNELS][N_MAX]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ + float *quantized_spectrum[CPE_CHANNELS][NB_DIV]; + int16_t param_core[CPE_CHANNELS][2 * NPRM_DIV]; + int16_t ignore_chan[CPE_CHANNELS]; + int16_t target_bitsTCX10[CPE_CHANNELS][NB_DIV]; + int16_t nbits_start, total_nbbits; + + wmops_sub_start( "mdct_core_Q" ); + + sts = hCPE->hCoreCoder; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + set_f( fac_ns[ch], 0.0f, 2 ); + set_s( nf_seed[ch], 0, 2 ); + set_s( hm_active[ch], 0, 2 ); + set_f( ener[ch], 0.0f, 2 ); + set_f( gain_tcx[ch], 0.0f, 2 ); + } + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + quantized_spectrum[ch][0] = quantized_spectrum_long[ch]; + quantized_spectrum[ch][1] = quantized_spectrum_long[ch] + N_TCX10_MAX; + + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + ignore_chan[ch] = 1; + continue; + } + + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + ignore_chan[ch] = 0; + + bitsAvailable = st->bits_frame_channel + nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ) + tnsBits[ch][0] + tnsBits[ch][1]; + + /* calculate TCX10 target bits before to assure minimum amount is distributed between subframes */ + if ( st->hTcxEnc->tcxMode == TCX_10 ) + { + int16_t nTnsBitsTCX10Tmp[2]; + nTnsBitsTCX10Tmp[0] = tnsBits[ch][0]; + nTnsBitsTCX10Tmp[1] = tnsBits[ch][1]; + + ivas_mdct_tcx10_bit_distribution( target_bitsTCX10[ch], bitsAvailable, nTnsBitsTCX10Tmp ); + } +#ifdef DEBUG_PLOT_BITS + if ( st->hTcxEnc->tcxMode == TCX_20 ) + { + set_s( &target_bitsTCX10[ch][0], 0, NB_DIV ); + } + for ( n = 0; n < NB_DIV; n++ ) + { + dbgwrite( &target_bitsTCX10[ch][n], sizeof( int16_t ), 1, 1, "./res/bits_tarrget_TCX10" ); + } +#endif + + for ( n = 0; n < nSubframes; n++ ) + { + if ( nSubframes == 2 ) + { + target_bits = target_bitsTCX10[ch][n]; + } + else + { + target_bits = bitsAvailable / nSubframes - tnsBits[ch][n]; + } + + assert( target_bits >= NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS ); + + /*-----------------------------------------------------------* + * Quantize the MDCT spectrum * + *-----------------------------------------------------------*/ + + QuantizeTCXSpectrum( st, n, st->hTcxEnc->spectrum[n], NULL, NULL, tnsSize[ch][n], target_bits, 0, &L_frameTCX[ch][n], + &L_frame[ch][n], &L_spec[ch][n], &tcx_offset[ch][n], &noiseFillingBorder[ch][n], quantized_spectrum[ch][n], NULL, + &hm_active[ch][n], NULL, &nf_seed[ch][n], &ener[ch][n], &gain_tcx[ch][n], param_core[ch] + n * NPRM_DIV ); + } + } + + EstimateStereoTCXNoiseLevel( sts, quantized_spectrum, gain_tcx, L_frame, noiseFillingBorder, hm_active, ignore_chan, fac_ns, param_core, is_mct ); + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + if ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE && LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + /*Enable appropriate upadte of tcx_curr_overlap_mode even for uncoded channel index 1*/ + L_frameTCX[ch][0] = ( st->core == TCX_10_CORE ) ? st->hTcxEnc->L_frameTCX >> 1 : st->hTcxEnc->L_frameTCX; + L_frameTCX[ch][1] = ( st->core == TCX_10_CORE ) ? st->hTcxEnc->L_frameTCX >> 1 : st->hTcxEnc->L_frameTCX; + + L_frame[ch][0] = st->L_frame; + L_frame[ch][1] = st->L_frame; + } + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( n = 0; n < nSubframes; n++ ) + { + /* Update L_frame_past */ + st->L_frame_past = L_frame[ch][n]; + + /* Update overlap */ + if ( ( ( ( L_frameTCX[ch][n] == st->hTcxEnc->L_frameTCX >> 1 ) && n > 0 ) || ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) && ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) + { + st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; + } + } + + /*--------------------------------------------------------------* + * Generate Bitstream + *---------------------------------------------------------------*/ + + if ( ( ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) && LFE_off ) || ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) ) + { + continue; + } + nbits_start = st->hBstr->nb_bits_tot; + + writeTCXparam( st, st->hBstr, NULL, param_core[ch], 0, 0, 0, NULL, p_param[ch], target_bitsTCX10[ch], 1 ); + + total_nbbits = st->hBstr->nb_bits_tot - nbits_start - nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); + + assert( st->bits_frame_channel == total_nbbits ); + } + + wmops_sub_end(); + return; +} + + +/*--------------------------------------------------------------* + * init_tcx_enc_info() + * + * Initialize TCX parameters + *---------------------------------------------------------------*/ + +void init_tcx_enc_info( + Encoder_State *st, /* i/o: coder memory state */ + int16_t *L_frame, + int16_t *L_frameTCX, + int16_t *L_spec ) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; + int16_t tcx_offset, tcx_offsetFB; + + /* Init lengths */ + tcx_offset = hTcxCfg->tcx_offset; + tcx_offsetFB = hTcxCfg->tcx_offsetFB; + *L_frame = st->L_frame; + *L_frameTCX = hTcxEnc->L_frameTCX; + *L_spec = st->hTcxCfg->tcx_coded_lines; + + if ( st->last_core == ACELP_CORE ) + { + /* if past frame is ACELP */ + *L_frame += tcx_offset; + *L_frameTCX += tcx_offsetFB; + *L_spec += st->hTcxCfg->tcx_coded_lines >> 2; + + assert( hTcxCfg->lfacNext <= 0 ); + *L_frame -= hTcxCfg->lfacNext; + *L_frameTCX -= hTcxCfg->lfacNextFB; + } + + return; +} diff --git a/lib_enc/ivas_pca_enc.c b/lib_enc/ivas_pca_enc.c new file mode 100644 index 0000000000..6694a36f25 --- /dev/null +++ b/lib_enc/ivas_pca_enc.c @@ -0,0 +1,601 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include +#include +#include "typedef.h" +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define IVAS_PCA_SM_FAC 0.0234375f +#define IVAS_PCA_N_ITER_QR 10 + + +/*-----------------------------------------------------------------------* + * Local function definitions + *-----------------------------------------------------------------------*/ + +static void ivas_bitstream_write_int32( + BSTR_ENC_HANDLE hMetaData, + const int32_t val, + const int16_t bits ) +{ + /* MSBs */ + push_next_indice( hMetaData, (uint16_t) ( val >> 16 ), bits - 16 ); + + /* LSBs */ + push_next_indice( hMetaData, (uint16_t) ( val & 0x0000FFFF ), 16 ); + + return; +} + + +static void pca_enc_reset( + PCA_ENC_STATE *hPCA ) +{ + int16_t i; + + /* reset states for interpolation and multiplexing */ + eye_matrix( hPCA->prev_eigVec, FOA_CHANNELS, 1.0f ); + set_zero( hPCA->prev_ql, IVAS_PCA_INTERP ); + hPCA->prev_ql[0] = 1.0f; + set_zero( hPCA->prev_qr, IVAS_PCA_INTERP ); + hPCA->prev_qr[0] = 1.0f; + + for ( i = 0; i < FOA_CHANNELS; i++ ) + { + hPCA->prev_D[i] = 0.25f; + } + + eye_matrix( hPCA->mem_eigVec_interp, FOA_CHANNELS, 1.0f ); + set_zero( hPCA->old_r_sm, FOA_CHANNELS * FOA_CHANNELS ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_pca_enc() + * + * Initialize PCA encoder + *------------------------------------------------------------------------*/ + +void init_pca_enc( + PCA_ENC_STATE *hPCA /* i/o: PCA encoder structure */ +) +{ + hPCA->prev_bypass_decision = PCA_MODE_INACTIVE; + pca_enc_reset( hPCA ); + + return; +} + + +/*------------------------------------------------------------------------- + * pca_transform_sub() + * + * + *------------------------------------------------------------------------*/ + +static void pca_transform_sub( + float *eigVec, + float *transformed_data[8], /* i : input/transformed audio channels */ + const int16_t start, + const int16_t len, + const int16_t n_channels ) +{ + int16_t i, j, k; + float temp; + float buffer_data[FOA_CHANNELS]; + for ( j = 0; j < len; j++ ) + { + for ( k = 0; k < n_channels; k++ ) + { + buffer_data[k] = transformed_data[k][j + start]; + } + for ( k = 0; k < n_channels; k++ ) + { + temp = 0.0f; + for ( i = 0; i < n_channels; i++ ) + { + temp += eigVec[i * IVAS_PCA_INTERP + k] * buffer_data[i]; + } + transformed_data[k][j + start] = temp; + } + } + + return; +} + +static void pca_enc_transform( + PCA_ENC_STATE *hPCA, + float *ql, + float *qr, + float *transformed_data[8], /* i : input/transformed audio channels */ + const int16_t input_frame, + const int16_t n_channels ) +{ + float eigVec_interp[FOA_CHANNELS * FOA_CHANNELS]; /* eigenvectors in current frame */ + float ql_interp[IVAS_PCA_LEN_INTERP_Q], qr_interp[IVAS_PCA_LEN_INTERP_Q]; + int16_t time_slot; + int16_t slot_len; + + quat_shortestpath( hPCA->prev_ql, ql, hPCA->prev_qr, qr ); + + + pca_interp_preproc( hPCA->prev_ql, hPCA->prev_qr, ql, qr, IVAS_PCA_N_SLOTS, ql_interp, qr_interp ); + + slot_len = (int16_t) ( input_frame / IVAS_PCA_N_SLOTS ); + for ( time_slot = 0; time_slot < IVAS_PCA_N_SLOTS; time_slot++ ) + { + /* convert from double quaternion to 4D matrix */ + dquat2mat( &ql_interp[IVAS_PCA_INTERP * time_slot], &qr_interp[IVAS_PCA_INTERP * time_slot], + eigVec_interp ); + pca_transform_sub( eigVec_interp, transformed_data, slot_len * time_slot, slot_len, n_channels ); + } + + + return; +} + + +static void pca_update_state( + PCA_ENC_STATE *hPCA, + float *ql, + float *qr, + float *eigVec, + const int16_t n_channels ) +{ + mvr2r( qr, hPCA->prev_qr, IVAS_PCA_INTERP ); + mvr2r( ql, hPCA->prev_ql, IVAS_PCA_INTERP ); + mvr2r( eigVec, hPCA->prev_eigVec, n_channels * n_channels ); + + return; +} + + +static void swap_eigvec( + float *eigVec, + const int16_t i, + const int16_t j ) +{ + float eigVec_tmp[FOA_CHANNELS]; + int16_t k; + + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + eigVec_tmp[k] = eigVec[k * FOA_CHANNELS + i]; + } + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + eigVec[k * FOA_CHANNELS + i] = eigVec[k * FOA_CHANNELS + j]; + } + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + eigVec[k * FOA_CHANNELS + j] = eigVec_tmp[k]; + } + + return; +} + + +static void sort4_D_eigVec( + float *D, + float *eigVec ) +{ + float tempr; + + if ( D[0] < D[1] ) + { + SWAP( D[0], D[1] ); + swap_eigvec( eigVec, 0, 1 ); + } + + if ( D[2] < D[3] ) + { + SWAP( D[2], D[3] ); + swap_eigvec( eigVec, 2, 3 ); + } + + if ( D[0] < D[2] ) + { + SWAP( D[0], D[2] ); + swap_eigvec( eigVec, 0, 2 ); + } + + if ( D[1] < D[3] ) + { + SWAP( D[1], D[3] ); + swap_eigvec( eigVec, 1, 3 ); + } + + if ( D[1] < D[2] ) + { + SWAP( D[1], D[2] ); + swap_eigvec( eigVec, 1, 2 ); + } + + /* swap last 2 values */ + SWAP( D[2], D[3] ); + swap_eigvec( eigVec, 2, 3 ); + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_pca_enc() + * + * PCA encoder + *------------------------------------------------------------------------*/ + +void ivas_pca_enc( + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + PCA_ENC_STATE *hPCA, /* i : PCA encoder structure */ + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + float *data_f[8], /* i : input/transformed audio channels */ + const int16_t input_frame, /* i : input frame length */ + const int16_t n_channels /* i : number of channels */ +) +{ + int16_t i, j, k, l; + int16_t len_subfr; + float r[FOA_CHANNELS * FOA_CHANNELS]; /* covariance matrix */ + float eigVec[FOA_CHANNELS * FOA_CHANNELS]; /* eigenvectors in current frame */ + float eigVec_tmp[FOA_CHANNELS * FOA_CHANNELS]; /* transpose / tmp matrix for permutation */ + float cost_mtx[FOA_CHANNELS * FOA_CHANNELS]; /* cost matrix */ + int16_t path[FOA_CHANNELS]; + float D[FOA_CHANNELS]; /* eigenvalues in current frame */ + float ql[IVAS_PCA_INTERP], qr[IVAS_PCA_INTERP]; + float det; + float temp; + float *ptr_sig[FOA_CHANNELS]; + int32_t index[2]; + float fac_D, sum_D; + float fac_cost; + float r_sm[16]; + float alpha; + float D_tmp[FOA_CHANNELS]; + int32_t ivas_total_brate; + float min_dot, dotl, dotr; + float min_dot2; + int16_t bypass_decision; + float dist_alt; + + ivas_total_brate = hEncoderConfig->ivas_total_brate; + + /* if PCA is disabled, just pass-through */ + if ( hEncoderConfig->Opt_PCA_ON == 0 ) + { + /* write by-pass indicator */ + push_next_indice( hMetaData, PCA_MODE_INACTIVE, 1 ); + + return; + } + + + /* handle bitrate switching */ + if ( ivas_total_brate != PCA_BRATE ) + { + pca_enc_reset( hPCA ); + + if ( hEncoderConfig->last_ivas_total_brate != PCA_BRATE ) + { + eye_matrix( hPCA->mem_eigVec_interp, FOA_CHANNELS, 1.0f ); + /* copy input data into output directly as previous frame was already in by-pass mode */ + for ( k = 0; k < n_channels; k++ ) + { + } + } + else + { + /* set PCA by-pass mode in current frame and interpolate transform as previous frame used PCA */ + pca_enc_transform( hPCA, ql, qr, data_f, input_frame, n_channels ); + } + + pca_update_state( hPCA, ql, qr, eigVec, n_channels ); + + hPCA->prev_bypass_decision = PCA_MODE_INACTIVE; + + return; + } + + assert( ivas_total_brate == PCA_BRATE ); /* the remaining code is defined at 256k where there are 4 dmx channel */ + + /*-----------------------------------------------------------------* + * Covariance + *-----------------------------------------------------------------*/ + + len_subfr = input_frame / 2; + + for ( i = 0; i < input_frame; i += len_subfr ) + { + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + ptr_sig[k] = &data_f[k][i]; + } + + cov_subfr( ptr_sig, r, n_channels, input_frame / 2 ); + + alpha = IVAS_PCA_SM_FAC; + for ( k = 0; k < 16; k++ ) + { + r_sm[k] = alpha * r[k] + ( 1.f - alpha ) * hPCA->old_r_sm[k]; + hPCA->old_r_sm[k] = r_sm[k]; + } + } + + /* conditioning */ + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + temp = r_sm[k * FOA_CHANNELS + k]; + + + if ( temp < IVAS_PCA_COV_THRES ) + { + temp = IVAS_PCA_COV_THRES; + } + r_sm[k * FOA_CHANNELS + k] = temp; /* pointer reuse */ + } + + /*-----------------------------------------------------------------* + * Eigenvalue decomposition + *-----------------------------------------------------------------*/ + + eig_qr( r_sm, IVAS_PCA_N_ITER_QR, eigVec, D, n_channels ); + + /* force positive eigenvalues */ + sum_D = 0.0; + for ( k = 0; k < n_channels; k++ ) + { + if ( D[k] < 0.f ) + { + D[k] = -D[k]; + + for ( l = 0; l < n_channels; l++ ) + { + eigVec[l * n_channels + k] = -eigVec[l * n_channels + k]; + } + } + sum_D += D[k]; + } + + /* normalize */ + fac_D = 1 / sum_D; + for ( k = 0; k < n_channels; k++ ) + { + D[k] *= fac_D; + } + + /* sorting (sanity check) with SPAR inversion of last two channels */ + sort4_D_eigVec( D, eigVec ); + + /* normalize and compute amount of decorrelation */ + dist_alt = 0.0; + for ( k = 0; k < FOA_CHANNELS; k++ ) + { + dist_alt += logf( r[k * FOA_CHANNELS + k] * fac_D + 1e-8f ); + dist_alt -= logf( D[k] + 1e-8f ); + } + + /*-----------------------------------------------------------------* + * Eigenvector alignment + *-----------------------------------------------------------------*/ + + if ( hPCA->prev_bypass_decision == PCA_MODE_ACTIVE ) + { + /* compute absolute cost matrix */ + for ( k = 0; k < n_channels; k++ ) /* column */ + { + for ( l = 0; l < n_channels; l++ ) /* row */ + { + fac_cost = hPCA->prev_D[l] * D[k]; + temp = 0.0; + for ( i = 0; i < n_channels; i++ ) /* row */ + { + temp += hPCA->prev_eigVec[i * n_channels + l] * eigVec[i * n_channels + k]; + } + if ( temp < 0 ) + { + temp = -temp; + } + cost_mtx[k * n_channels + l] = temp * fac_cost; + } + } + + /* find optimal permutation */ + exhst_4x4( cost_mtx, path, 1 ); + } + else + { + /* no alignment needed if previous PCA is inactive */ + for ( i = 0; i < 4; i++ ) + { + path[i] = i; + } + } + + /* permute eigenvectors */ + for ( k = 0; k < n_channels; k++ ) + { + j = path[k]; + /* copy j-th column to column k */ + for ( l = 0; l < n_channels; l++ ) + { + eigVec_tmp[l * n_channels + k] = eigVec[l * n_channels + j]; + } + D_tmp[k] = D[j]; + } + + for ( k = 0; k < n_channels * n_channels; k++ ) + { + eigVec[k] = eigVec_tmp[k]; + } + + /* check for sign inversions */ + for ( k = 0; k < n_channels; k++ ) /* column */ + { + temp = 0.0; + for ( i = 0; i < n_channels; i++ ) /* row */ + { + temp += hPCA->prev_eigVec[i * n_channels + k] * eigVec[i * n_channels + k]; + } + + if ( temp < 0 ) + { + for ( i = 0; i < n_channels; i++ ) + { + eigVec[i * n_channels + k] = -eigVec[i * n_channels + k]; + } + } + } + + /* force rotation matrix(det = +1) */ + det = mat_det4( eigVec ); + if ( det < 0 ) + { + swap_eigvec( eigVec, 2, 3 ); + temp = D_tmp[3]; + D_tmp[3] = D_tmp[2]; + D_tmp[2] = temp; + } + + /* update state */ + for ( k = 0; k < n_channels; k++ ) + { + hPCA->prev_D[k] = D_tmp[k]; + } + + /*-----------------------------------------------------------------* + * Rotation matrix parametrization and quantization + *-----------------------------------------------------------------*/ + + /* convert frrm rotation matrix to double quaternion */ + mat2dquat( eigVec, ql, qr ); + + dotl = dotp( hPCA->prev_ql, ql, 4 ); + dotr = dotp( hPCA->prev_qr, qr, 4 ); + if ( dotl < dotr ) + min_dot = dotl; + else + min_dot = dotr; + + if ( ql[0] < qr[0] ) + min_dot2 = ql[0]; + else + min_dot2 = qr[0]; + + bypass_decision = PCA_MODE_ACTIVE; + if ( dist_alt < IVAS_PCA_THRES_DIST_ALT ) + { + bypass_decision = PCA_MODE_INACTIVE; + } + if ( min_dot < IVAS_PCA_THRES_MIN_DOT ) + { + bypass_decision = PCA_MODE_INACTIVE; + } + if ( min_dot2 < IVAS_PCA_THRES_MIN_DOT2 ) + { + bypass_decision = PCA_MODE_INACTIVE; + } + + /* if PCA is inactive */ + if ( bypass_decision == PCA_MODE_INACTIVE ) + { + eye_matrix( eigVec, 4, 1. ); + set_zero( ql, 4 ); + set_zero( qr, 4 ); + ql[0] = 1.; + qr[0] = 1.; + + /* write by-pass indicator */ + push_next_indice( hMetaData, PCA_MODE_INACTIVE, 1 ); + if ( hPCA->prev_bypass_decision == PCA_MODE_INACTIVE ) + { + eye_matrix( hPCA->mem_eigVec_interp, FOA_CHANNELS, 1.0f ); + } + else + { + /* set PCA by-pass mode in current frame and interpolate transform as previous frame used PCA */ + pca_enc_transform( hPCA, ql, qr, data_f, input_frame, n_channels ); + } + + pca_update_state( hPCA, ql, qr, eigVec, n_channels ); + hPCA->prev_bypass_decision = PCA_MODE_INACTIVE; + return; + } + + /* force ql to have first component with positive sign */ + if ( ql[0] < 0 ) + { + for ( i = 0; i < 4; i++ ) + { + ql[i] = -ql[i]; + qr[i] = -qr[i]; + } + } + + /* quantize double quaternion */ + pca_enc_s3( ql, &index[0] ); + pca_enc_s3( qr, &index[1] ); + + /* write bypass flag to bitstream to indicate active mode */ + push_next_indice( hMetaData, PCA_MODE_ACTIVE, 1 ); + + ivas_bitstream_write_int32( hMetaData, index[0], IVAS_PCA_QBITS - 1 ); + ivas_bitstream_write_int32( hMetaData, index[1], IVAS_PCA_QBITS ); + + /* transform */ + pca_enc_transform( hPCA, ql, qr, data_f, input_frame, n_channels ); + + /*-----------------------------------------------------------------* + * update state for next frame + *-----------------------------------------------------------------*/ + + hPCA->prev_bypass_decision = bypass_decision; + pca_update_state( hPCA, ql, qr, eigVec, n_channels ); + + + return; +} diff --git a/lib_enc/ivas_qmetadata_enc.c b/lib_enc/ivas_qmetadata_enc.c new file mode 100644 index 0000000000..8a10750e11 --- /dev/null +++ b/lib_enc/ivas_qmetadata_enc.c @@ -0,0 +1,4889 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_enc.h" +#include "wmops.h" +#include "prot.h" + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +#ifdef DEBUG_MODE_QMETADATA +static float direction_distance( float elevation[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], float azimuth[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], IVAS_QDIRECTION *q_direction, const int16_t dim1, const int16_t dim2, float mat_dist[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES] ); +#endif + + +static void ivas_qmetadata_quantize_diffuseness_nrg_ratios( IVAS_QMETADATA_HANDLE hQMetaData, int16_t *needed_bits, int16_t *nbits_diff, int16_t *dfRatioBits ); + +static int16_t ivas_qmetadata_entropy_encode_diffuseness( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, uint16_t *diffuseness_index_max_ec_frame ); + +static void ivas_qmetadata_reorder_2dir_bands( IVAS_QMETADATA_HANDLE hQMetaData ); + +static int16_t ivas_qmetadata_entropy_encode_df_ratio( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, int16_t *df_ratio_bits ); + +static int16_t ivas_qmetadata_entropy_encode_dir( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const uint16_t diffuseness_index_max_ec_frame, const int16_t nbands, const int16_t start_band, const int16_t direction_bits_raw, int16_t max_bits ); + +static int16_t ivas_qmetadata_raw_encode_dir( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const int16_t nbands, const int16_t start_band ); + +static int16_t ivas_qmetadata_encode_extended_gr_length( const uint16_t value, const uint16_t alphabet_size, const int16_t gr_param ); + +static void ivas_qmetadata_encode_extended_gr( BSTR_ENC_HANDLE hMetaData, const uint16_t value, const uint16_t alphabet_size, const int16_t gr_param ); + +static int16_t ivas_qmetadata_get_optimal_gr_param( uint16_t *unsigned_data, const int16_t count, const int16_t gr_param_count, int16_t *opt_gr_size ); + +static int16_t ivas_qmetadata_encode_quasi_uniform_length( const uint16_t value, const uint16_t alphabet_size ); + +static void ivas_qmetadata_encode_quasi_uniform( BSTR_ENC_HANDLE hMetaData, const uint16_t value, const uint16_t alphabet_size ); + +static int16_t ivas_qmetadata_reorder_elevation_index( const int16_t elevation_index, const int16_t avg_elevation_index, const int16_t elevation_alphabet ); + +static int16_t ivas_qmetadata_reorder_azimuth_index( const int16_t azimuth_index, const int16_t avg_azimuth_index, const int16_t azimuth_alphabet ); + +static ivas_error requantize_direction_EC_3( int16_t *extra_bits, IVAS_QDIRECTION *q_direction, const int16_t coding_subbands, BSTR_ENC_HANDLE hMetaData, float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], int16_t *ind_order ); + +static void calculate_two_distances( float *el, int16_t *bits, const int16_t total_bits, const int16_t len, float *p_d1, float *p_d2 ); + +static void joint_encoding( IVAS_QDIRECTION *q_direction, const int16_t j, const int16_t next_j, const int16_t coding_subbands, int16_t *bits_dir0, const int16_t allowed_bits, BSTR_ENC_HANDLE hMetaData, int16_t *diff ); + +static ivas_error write_ec_direction( int16_t *num_bits_written, BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const int16_t j_idx, const int16_t len, const int16_t GR_ord_elevation, const int16_t GR_ord_azimuth, const int16_t use_context, const int16_t same ); + +static int16_t write_fixed_rate_direction( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const int16_t j_idx, const int16_t len ); + +static int16_t ivas_qmetadata_quantize_coherence( IVAS_QMETADATA *hQMetaData, const int16_t idx_d, const int16_t all_coherence_zero, BSTR_ENC_HANDLE hMetaData, const int16_t write_flag, int16_t *indice_coherence ); + +static void dct4_transform( uint8_t *v, float *dct_v ); + +static float quantize_DCT_0_coh( const float x, const int16_t j, const float *coherence_cb, const float delta_var, const int16_t no_cb, IVAS_QDIRECTION *q_direction, uint16_t *idx_x, int16_t *p_no_cb ); + +static int16_t encode_coherence_indexesDCT0( uint16_t *idx_dct, const int16_t len, int16_t *no_cb_vec, BSTR_ENC_HANDLE hMetaData, int16_t indice_coherence, const int16_t nbits, const int16_t nbits1 ); + +static int16_t encode_coherence_indexesDCT1( uint16_t *idx_dct, const int16_t len, BSTR_ENC_HANDLE hMetaData ); + +static uint64_t create_combined_index( uint16_t *idx_dct, const int16_t len, const int16_t *no_cb_vec ); + +static int16_t encode_surround_coherence( IVAS_QMETADATA *hQMetaData, BSTR_ENC_HANDLE hMetaData ); + +static int16_t write_fixed_rate_direction( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const int16_t j_idx, const int16_t len ); + +static int16_t common_direction( IVAS_QDIRECTION *q_direction, const int16_t band_idx, const int16_t len, const int16_t bits_allowed, BSTR_ENC_HANDLE hMetaData, float *elevation_orig, float *azimuth_orig ); + +static int16_t ivas_diffuseness_huff_ec_encode( BSTR_ENC_HANDLE hMetaData, const uint16_t idx ); + +static void ivas_diffuseness_huff_ec_prepare( IVAS_QDIRECTION *q_direction, int16_t *best_av, uint16_t *avr_idx, int16_t *diffuseness_bits_huff ); + +static int16_t coherence_coding_length( const uint16_t *idx_sur_coh_shift, const uint8_t idx_shift_len, const int16_t coding_subbands, const int16_t *no_cv, uint16_t *mr_idx, int16_t *no_cv_shift, int16_t *p_min_idx, int16_t *GR_ord, int16_t *nbits_fr, int16_t *nbits_fr1 ); + +static int16_t write_2dir_info( BSTR_ENC_HANDLE hMetaData, uint8_t *twoDirBands, const int16_t n, const int16_t k ); + +static void transform_azimuth_dir2( IVAS_QMETADATA_HANDLE hQMetaData, int16_t *dir2_bands ); + +static int16_t calc_var_azi( const IVAS_QDIRECTION *q_direction, const int16_t diffuseness_index_max_ec_frame, const float avg_azimuth, float *avg_azimuth_out ); + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_enc_encode() + * + * Main function for quantizing and coding Spatial Metadata + *-----------------------------------------------------------------------*/ + +ivas_error ivas_qmetadata_enc_encode( + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + IVAS_QMETADATA *hQMetaData /* i/o: metadata handle */ +) +{ + int16_t i, bit_pos_start, bit_pos_start_coh; + int16_t next_ind_start, last_ind_start; + uint16_t diffuseness_index_max_ec_frame; + uint16_t diffuseness_index_max_ec_frame_pre[QMETADATA_MAX_NO_DIRECTIONS]; + int16_t bits_dir_raw_pre[QMETADATA_MAX_NO_DIRECTIONS]; + int16_t bits_diff_sum; + int16_t bits_diff[QMETADATA_MAX_NO_DIRECTIONS], bits_coherence[QMETADATA_MAX_NO_DIRECTIONS]; + int16_t bits_dir[QMETADATA_MAX_NO_DIRECTIONS], bits_dir_raw; + int16_t extra_bits; + IVAS_QDIRECTION *q_direction; + int16_t nbands, nblocks, start_band; + int16_t ndirections, d; + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t all_coherence_zero; + int16_t bit_pos_0, total_bits_1dir, bits_no_dirs_coh; + int16_t bits_signalling[QMETADATA_MAX_NO_DIRECTIONS]; + int16_t indice_coherence; + int16_t bits_dir_bands[MASA_MAXIMUM_CODING_SUBBANDS], raw_flag[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t diff_bits, bits_ec, next_ind_raw_flag; + int16_t dfRatio_bits[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t bits_surround_coh, no_TF; + int16_t dir2_bands[MASA_MAXIMUM_CODING_SUBBANDS / 2]; + int16_t ind_order[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t reduce_bits; + ivas_error error; + + error = IVAS_ERR_OK; + +#ifdef DEBUG_MODE_QMETADATA + int16_t ec_flag = 0; + int16_t tmp; + + static FILE *pF = NULL; + static FILE *pF_azi = NULL; + static FILE *pF_ele = NULL; + static FILE *pF_ratio = NULL; + static FILE *pF_spcoh = NULL; + static FILE *pF_spcoh_orig = NULL; + static FILE *pF_surcoh = NULL; + + if ( pF == NULL ) + pF = fopen( "./res/qmetadata_enc.txt", "w" ); + if ( pF_azi == NULL ) + pF_azi = fopen( "./res/qmetadata_azi_enc.txt", "w" ); + if ( pF_ele == NULL ) + pF_ele = fopen( "./res/qmetadata_ele_enc.txt", "w" ); + if ( pF_ratio == NULL ) + pF_ratio = fopen( "./res/qmetadata_ratio_enc.txt", "w" ); + if ( pF_spcoh == NULL ) + pF_spcoh = fopen( "./res/qmetadata_spcoh_enc.txt", "w" ); + if ( pF_spcoh_orig == NULL ) + pF_spcoh_orig = fopen( "./res/qmetadata_spcoh_orig.txt", "w" ); + if ( pF_surcoh == NULL ) + pF_surcoh = fopen( "./res/qmetadata_surcoh_enc.txt", "w" ); +#endif + + /* Save initial position in bitstream */ + bit_pos_0 = hMetaData->nb_bits_tot; + bit_pos_start = bit_pos_0; + + ndirections = hQMetaData->no_directions; + extra_bits = 0; + + /* Check if coherence should be encoded */ + all_coherence_zero = 1; + bits_no_dirs_coh = 0; + + if ( hQMetaData->coherence_flag ) + { + all_coherence_zero = hQMetaData->all_coherence_zero; + + push_next_indice( hMetaData, all_coherence_zero, 1 ); /* signal coherence */ + bits_no_dirs_coh += 1; + } + + if ( ndirections > 1 ) + { +#ifdef DEBUGGING + assert( ndirections == 2 ); +#endif + /* Reorder 2dir bands for more efficient encoding. */ + ivas_qmetadata_reorder_2dir_bands( hQMetaData ); + d = 0; + for ( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) + { + if ( hQMetaData->twoDirBands[i] == 1 ) + { + mvr2r( hQMetaData->q_direction[1].band_data[i].azimuth, hQMetaData->q_direction[1].band_data[d].azimuth, hQMetaData->q_direction[1].cfg.nblocks ); + mvr2r( hQMetaData->q_direction[1].band_data[i].elevation, hQMetaData->q_direction[1].band_data[d].elevation, hQMetaData->q_direction[1].cfg.nblocks ); + mvr2r( hQMetaData->q_direction[1].band_data[i].energy_ratio, hQMetaData->q_direction[1].band_data[d].energy_ratio, hQMetaData->q_direction[1].cfg.nblocks ); + + dir2_bands[d] = i; + + if ( hQMetaData->coherence_flag ) + { + mvc2c( hQMetaData->q_direction[1].coherence_band_data[i].spread_coherence, hQMetaData->q_direction[1].coherence_band_data[d].spread_coherence, hQMetaData->q_direction[1].cfg.nblocks ); + } + d++; + } + } + + bits_no_dirs_coh += write_2dir_info( hMetaData, hQMetaData->twoDirBands, hQMetaData->q_direction[0].cfg.nbands, hQMetaData->numTwoDirBands ); + + for ( i = d; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) + { + set_f( hQMetaData->q_direction[1].band_data[i].energy_ratio, 0.0f, hQMetaData->q_direction[1].cfg.nblocks ); + } +#ifdef DEBUGGING + assert( d == hQMetaData->numTwoDirBands ); +#endif + + hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; + } + + /*Quantization of the Diffuseness */ + ivas_qmetadata_quantize_diffuseness_nrg_ratios( hQMetaData, bits_dir_raw_pre, bits_diff, dfRatio_bits ); + + bits_diff_sum = 0; + bits_diff[0] = ivas_qmetadata_entropy_encode_diffuseness( hMetaData, &( hQMetaData->q_direction[0] ), &diffuseness_index_max_ec_frame_pre[0] ); + bits_diff_sum += bits_diff[0]; + + if ( ndirections == 2 ) + { + bits_diff[1] = ivas_qmetadata_entropy_encode_df_ratio( hMetaData, &( hQMetaData->q_direction[1] ), dfRatio_bits ); + bits_diff_sum += bits_diff[1]; + } + + /* 2dir energy ratio encoding reuses index memory. Now that diffRatio and dFRatio have been encoded, + * we retrieve index_dirRatio1Inv and index_dirRatio1Inv for further parameter encoding. This is + * necessary only for bands that have two concurrent directions. */ + if ( hQMetaData->no_directions == 2 ) + { + int16_t j, k, dir2band, index_dirRatio1Inv, index_dirRatio2Inv; + + dir2band = 0; + for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + { + if ( hQMetaData->twoDirBands[j] == 1 ) + { + index_dirRatio1Inv = masa_sq( 1.0f - hQMetaData->q_direction[0].band_data[j].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + index_dirRatio2Inv = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + + for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_dirRatio1Inv; + } + + for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = index_dirRatio2Inv; + } + + dir2band++; + } + } + } + + /* Encode surround coherence */ + if ( ndirections == 2 ) + { + no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks + hQMetaData->q_direction[1].cfg.nbands * hQMetaData->q_direction[1].cfg.nblocks; + if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - sum_s( bits_diff, ndirections ) >= MASA_MIN_BITS_SURR_COH ) ) + { + bits_surround_coh = encode_surround_coherence( hQMetaData, hMetaData ); + } + else + { + bits_surround_coh = 0; + for ( i = 0; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) + { + if ( hQMetaData->surcoh_band_data != NULL ) + { + set_c( (int8_t *) hQMetaData->surcoh_band_data[i].surround_coherence, 0, hQMetaData->q_direction[0].cfg.nblocks ); + } + } + } + bits_no_dirs_coh += bits_surround_coh; + total_bits_1dir = ( ( hQMetaData->metadata_max_bits - bits_no_dirs_coh ) * hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks ) / no_TF; + } + else + { + no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks; + if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - bits_diff[0] >= MASA_MIN_BITS_SURR_COH ) ) + { + bits_surround_coh = encode_surround_coherence( hQMetaData, hMetaData ); + } + else + { + bits_surround_coh = 0; + for ( i = 0; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) + { + if ( hQMetaData->surcoh_band_data != NULL ) + { + set_c( (int8_t *) hQMetaData->surcoh_band_data[i].surround_coherence, 0, hQMetaData->q_direction[0].cfg.nblocks ); + } + } + } + total_bits_1dir = hQMetaData->metadata_max_bits - bits_no_dirs_coh - bits_surround_coh; + } + + /* Loop over number of directions*/ + for ( d = 0; d < ndirections; d++ ) + { + q_direction = &( hQMetaData->q_direction[d] ); + + if ( d == 1 ) + { + transform_azimuth_dir2( hQMetaData, dir2_bands ); + } + + nbands = q_direction->cfg.nbands; + nblocks = q_direction->cfg.nblocks; + start_band = q_direction->cfg.start_band; + diffuseness_index_max_ec_frame = diffuseness_index_max_ec_frame_pre[0]; + bits_dir_raw = bits_dir_raw_pre[d]; + + /* This sets bit budget correctly for the second direction */ + if ( d == 0 ) + { + bits_diff[d] = bits_diff_sum; + } + else + { + bits_diff[d] = 0; + } + +#ifdef DEBUG_MODE_QMETADATA + { + int16_t j, k; + k = 0; + fprintf( pF_spcoh_orig, "%d %d ", frame, k ); + + for ( i = start_band; i < nbands; i++ ) + { + for ( j = 0; j < nblocks; j++ ) + { + if ( q_direction->coherence_band_data != NULL ) + { + fprintf( pF_spcoh_orig, " %d ", q_direction->coherence_band_data[i].spread_coherence[j] ); + } + } + } + fprintf( pF_spcoh_orig, "\n" ); + } +#endif + + bits_signalling[d] = 0; + + /*Coherence */ + bits_coherence[d] = 0; + bit_pos_start_coh = hMetaData->nb_bits_tot; + if ( all_coherence_zero == 0 ) + { + bits_coherence[d] = ivas_qmetadata_quantize_coherence( hQMetaData, d, all_coherence_zero, hMetaData, 0, &indice_coherence ); + } + + if ( q_direction->cfg.mc_ls_setup == MC_LS_SETUP_5_1 || q_direction->cfg.mc_ls_setup == MC_LS_SETUP_7_1 ) + { + q_direction->not_in_2D = 0; + /* Quantize directions*/ + quantize_direction_frame2D( q_direction, azimuth_orig, elevation_orig ); + } + else + { + /* Quantize directions*/ + quantize_direction_frame( q_direction, azimuth_orig, elevation_orig ); + } + + /* Signalling 2D*/ + push_next_indice( hMetaData, ( q_direction->not_in_2D > 0 ), 1 ); /*2D flag*/ + bits_signalling[d] = 1; + + /* Save state of metadata bitstream buffer after writing energy ratios, number of dirs and save space for coherence*/ + bit_pos_start = hMetaData->nb_bits_tot; + next_ind_start = hMetaData->next_ind; + last_ind_start = hMetaData->last_ind; + + /* Encode quantized directions with EC frame-wise*/ + if ( total_bits_1dir + bits_surround_coh <= hQMetaData->qmetadata_max_bit_req ) + { + push_next_indice( hMetaData, 0, 1 ); /*Write 1 bit to signal EC frame-wise (EC1)*/ + bits_signalling[d]++; + } + + next_ind_raw_flag = hMetaData->next_ind; + push_next_indice( hMetaData, 0, 1 ); /* Raw coding flag*/ + + bits_dir_bands[0] = ivas_qmetadata_raw_encode_dir( NULL, q_direction, q_direction->cfg.nbands, q_direction->cfg.start_band ); + + reduce_bits = hQMetaData->is_masa_type_format ? ( total_bits_1dir - ( bits_diff[d] + bits_coherence[d] + bits_signalling[d] ) - 1 ) : MASA_MAX_BITS; + bits_ec = ivas_qmetadata_entropy_encode_dir( hMetaData, q_direction, diffuseness_index_max_ec_frame, + q_direction->cfg.nbands, q_direction->cfg.start_band, bits_dir_bands[0], reduce_bits ); + + if ( bits_ec < 0 ) + { + hMetaData->ind_list[next_ind_raw_flag].value = 1; /*rewrite flag*/ + bits_ec = ivas_qmetadata_raw_encode_dir( hMetaData, q_direction, q_direction->cfg.nbands, q_direction->cfg.start_band ); +#ifdef DEBUGGING + assert( bits_dir_bands[0] == bits_ec ); +#endif + } + bits_dir[d] = bits_ec + 1; +#ifdef DEBUG_MODE_QMETADATA + tmp = bits_dir[d] - ( total_bits_1dir - ( bits_diff[d] + bits_coherence[d] + bits_signalling[d] ) ); +#endif + extra_bits = hQMetaData->metadata_max_bits - ( hMetaData->nb_bits_tot - bit_pos_0 ); +#ifdef DEBUGGING + assert( bit_pos_start + bits_signalling[d] - 1 + bits_dir[d] == hMetaData->nb_bits_tot ); +#endif +#ifdef DEBUG_MODE_QMETADATA + ec_flag = 0; +#endif + + /* Encode quantized directions with EC band-wise */ + if ( ( total_bits_1dir + bits_surround_coh <= hQMetaData->qmetadata_max_bit_req ) && ( bits_dir[d] + bits_diff[d] + bits_coherence[d] + bits_signalling[d] > total_bits_1dir ) && q_direction->cfg.nblocks > 1 ) + { + restore_metadata_buffer( hMetaData, next_ind_start, last_ind_start, bit_pos_start ); + + /* Write signalling */ + push_next_indice( hMetaData, 1, 1 ); /*Write 1 bit to signal no EC frame-wise (EC1)*/ + push_next_indice( hMetaData, 0, 1 ); /*Write 1 bit to signal EC band-wise (EC2)*/ + bits_signalling[d] = 3; + + /* Write raw flags */ + next_ind_raw_flag = hMetaData->next_ind; + for ( i = start_band; i < nbands; i++ ) + { + push_next_indice( hMetaData, 0, 1 ); /* Raw coding flag*/ + } + + bits_dir[d] = 0; + diff_bits = bits_diff[d] + bits_coherence[d] + bits_signalling[d] - total_bits_1dir; + for ( i = start_band; i < nbands; i++ ) + { + bits_dir_bands[i] = ivas_qmetadata_raw_encode_dir( NULL, q_direction, i + 1, i ); + + /* Write ec bits */ + bits_ec = ivas_qmetadata_entropy_encode_dir( hMetaData, q_direction, diffuseness_index_max_ec_frame, i + 1, i, bits_dir_bands[i], MASA_MAX_BITS ); + + if ( bits_ec >= 0 ) + { + bits_dir_bands[i] = bits_ec; + raw_flag[i] = 0; + } + else + { + raw_flag[i] = 1; + } + diff_bits += bits_dir_bands[i] + 1; + } + + small_requantize_direction_frame( q_direction, azimuth_orig, elevation_orig, raw_flag, bits_dir_bands, &diff_bits ); + + for ( i = start_band; i < nbands; i++ ) + { + if ( raw_flag[i] ) + { + /* Rewrite raw flag value */ + hMetaData->ind_list[next_ind_raw_flag + i - start_band].value = 1; + + /* Write ec bits */ + bits_ec = ivas_qmetadata_raw_encode_dir( hMetaData, q_direction, i + 1, i ); +#ifdef DEBUGGING + assert( bits_dir_bands[i] == bits_ec ); +#endif + } + bits_dir[d] += bits_dir_bands[i] + 1; + } + + extra_bits = hQMetaData->metadata_max_bits - ( hMetaData->nb_bits_tot - bit_pos_0 ); + +#ifdef DEBUGGING + if ( ( diff_bits <= 0 ) && ( bits_dir[d] + bits_diff[d] + bits_coherence[d] + bits_signalling[d] > total_bits_1dir ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "not possible!!" ); + } +#endif + +#ifdef DEBUGGING + assert( bit_pos_start + bits_signalling[d] - 1 + bits_dir[d] == hMetaData->nb_bits_tot ); +#endif +#ifdef DEBUG_MODE_QMETADATA + ec_flag = 1; +#endif + } + + /* Requantized directions */ + if ( ( total_bits_1dir + bits_surround_coh <= hQMetaData->qmetadata_max_bit_req ) && ( bits_dir[d] + bits_diff[d] + bits_coherence[d] + bits_signalling[d] > total_bits_1dir ) ) + { + + /*Bit budget exceeded, bit reduction strategy?*/ + extra_bits = 0; + + restore_metadata_buffer( hMetaData, next_ind_start, last_ind_start, bit_pos_start ); + + push_next_indice( hMetaData, 1, 1 ); /*Write 1 bit to signal no EC frame-wise (EC1)*/ + if ( nblocks > 1 ) + { + push_next_indice( hMetaData, 1, 1 ); /*Write 1 bit to signal requantization stage (EC3)*/ + bits_signalling[d] = 3; + } + else + { + bits_signalling[d] = 2; + } + if ( hQMetaData->is_masa_type_format == 0 ) + { + reduce_bits = bits_dir_raw - ( total_bits_1dir - bits_diff[d] - bits_coherence[d] - bits_signalling[d] ); + ind_order[0] = -1; + } + else + { + ind_order[0] = 0; + reduce_bits = min( nbands * nblocks + MASA_BIT_REDUCT_PARAM, bits_dir_raw - ( total_bits_1dir - bits_diff[d] - bits_coherence[d] - bits_signalling[d] ) ); + + if ( reduce_bits > bits_dir_raw - nbands * nblocks ) + { + reduce_bits = bits_dir_raw - nbands * nblocks; + } + } + only_reduce_bits_direction( &extra_bits, q_direction, reduce_bits, nbands, nblocks, ind_order ); + bits_dir[d] = hMetaData->nb_bits_tot; + requantize_direction_EC_3( &extra_bits, q_direction, nbands, hMetaData, elevation_orig, azimuth_orig, ind_order ); + bits_dir[d] = hMetaData->nb_bits_tot - bits_dir[d]; +#ifdef DEBUG_MODE_QMETADATA + ec_flag = 2; +#endif + } + + /* finalize writing coherence */ + if ( ( bits_coherence[d] > 0 ) && ( all_coherence_zero == 0 ) && ( nblocks > 1 ) ) + { + bit_pos_start = hMetaData->nb_bits_tot; + hMetaData->nb_bits_tot = bit_pos_start_coh; + ivas_qmetadata_quantize_coherence( hQMetaData, d, all_coherence_zero, hMetaData, 1, &indice_coherence ); + hMetaData->nb_bits_tot = bit_pos_start; + } + + if ( d == 0 ) + { + total_bits_1dir = hQMetaData->metadata_max_bits - ( hMetaData->nb_bits_tot - bit_pos_0 ); + } +#ifdef DEBUG_MODE_QMETADATA + { + int16_t j; + float tmp_f, mat_dist[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + + fprintf( pF, "frame %d: diff %d coh %d surcoh %d ", frame, bits_diff[d], bits_coherence[d], bits_surround_coh ); + fprintf( pF, "dir %d %d,%d,%d %d %5.3f\n", ec_flag, hMetaData->nb_bits_tot - bit_pos_0, total_bits_1dir, bits_dir_raw, tmp, direction_distance( elevation_orig, azimuth_orig, q_direction, nbands, nblocks, mat_dist ) ); + fprintf( pF_azi, "frame %d/dir/ec %d/%d: ", frame, d, ec_flag ); + fprintf( pF_ele, "frame %d/dir/ec %d/%d: ", frame, d, ec_flag ); + fprintf( pF_ratio, "frame %d/dir %d: ", frame, d ); + /*fprintf( pF_spcoh, "frame %d/dir %d: ", frame, d ); */ + fprintf( pF_spcoh, " %d %d ", frame, d ); + if ( d == 0 ) + { + fprintf( pF_surcoh, "frame %d/dir %d: ", frame, d ); + } + + /* direction_distance( elevation_orig, azimuth_orig, q_direction, nbands, nblocks, mat_dist );*/ + for ( i = start_band; i < nbands; i++ ) + { + for ( j = 0; j < nblocks; j++ ) + { + fprintf( pF_azi, " %+5.2f ", (int16_t) ( 100.f * q_direction->band_data[i].azimuth[j] ) / 100.f ); + fprintf( pF_ele, " %+5.2f ", (int16_t) ( 100.f * q_direction->band_data[i].elevation[j] ) / 100.f ); + fprintf( pF_ratio, " %1.3f ", q_direction->band_data[i].energy_ratio[j] ); + if ( q_direction->coherence_band_data != NULL ) + { + fprintf( pF_spcoh, " %d ", q_direction->coherence_band_data[i].spread_coherence[j] ); + } + if ( d == 0 && hQMetaData->surcoh_band_data != NULL ) + { + fprintf( pF_surcoh, " %d ", hQMetaData->surcoh_band_data[i].surround_coherence[0] ); + } + } + } + fprintf( pF_azi, "\n" ); + fprintf( pF_ele, "\n" ); + fprintf( pF_ratio, "\n" ); + fprintf( pF_spcoh, "\n" ); + if ( d == 0 ) + { + fprintf( pF_surcoh, "\n" ); + } + + for ( i = 0; i < nblocks; i++ ) + { + for ( j = 0; j < nbands; j++ ) + { + dbgwrite( &( q_direction->band_data[j].azimuth[i] ), sizeof( float ), 1, 1, "./res/IVAS_QMETADATA_azi.bin" ); + dbgwrite( &( q_direction->band_data[j].elevation[i] ), sizeof( float ), 1, 1, "./res/IVAS_QMETADATA_ele.bin" ); + dbgwrite( &( mat_dist[j][i] ), sizeof( float ), 1, 1, "./res/IVAS_QMETADATA_dist.bin" ); + dbgwrite( &( q_direction->band_data[j].energy_ratio_index[i] ), sizeof( uint16_t ), 1, 1, "./res/IVAS_QMETADATA_diffuseness_index.bin" ); + tmp_f = 1.f - q_direction->band_data[j].energy_ratio[i]; + dbgwrite( &tmp_f, sizeof( float ), 1, 1, "./res/IVAS_QMETADATA_diffuseness.bin" ); + } + } + + j = (int16_t) ( hMetaData->nb_bits_tot ); + dbgwrite( &j, sizeof( int16_t ), 1, 1, "./res/IVAS_QMETADATA_bits.bin" ); + } +#endif + + /* Save quantized DOAs */ + for ( i = start_band; i < nbands; i++ ) + { + mvr2r( q_direction->band_data[i].azimuth, q_direction->band_data[i].q_azimuth, nblocks ); + mvr2r( q_direction->band_data[i].elevation, q_direction->band_data[i].q_elevation, nblocks ); + } + /* Copy original DOAs back to q_direction*/ + for ( i = start_band; i < nbands; i++ ) + { + mvr2r( azimuth_orig[i], q_direction->band_data[i].azimuth, nblocks ); + mvr2r( elevation_orig[i], q_direction->band_data[i].elevation, nblocks ); + } + } + + return error; +} + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_enc_sid_encode() + * + * Main function for coding SID for Spatial Metadata + *-----------------------------------------------------------------------*/ + +/*! r: number of bits written */ +void ivas_qmetadata_enc_sid_encode( + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ + const int16_t masa_sid_descriptor, /* i : description of MASA SID coding structure */ + const int16_t ivas_format, /* i : IVAS format */ + const SBA_MODE sba_mode /* i : SBA mode */ +) +{ + int16_t b, m; + int16_t bit_pos_start; + IVAS_QDIRECTION *q_direction; + int16_t nbands, nblocks, start_band; + float avg_direction_vector[3]; + float direction_vector[3]; + float avg_azimuth[MASA_MAXIMUM_CODING_SUBBANDS]; + float avg_elevation[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t bits_dir, bits_diff, bits_delta; + int16_t metadata_sid_bits; /* bits allocated to SID for metadata */ + + if ( ivas_format == SBA_FORMAT ) + { + if ( sba_mode == SBA_MODE_SPAR ) + { + metadata_sid_bits = (int16_t) ( IVAS_SID_5k - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - 1; /* -1 for inactive mode header bit*/ + } + else + { + /* keep 13.2 and 16.4 sid bitrate as 4.4 kbps for now*/ + metadata_sid_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + } + } + else + { + metadata_sid_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + } + +#ifdef DEBUG_MODE_QMETADATA + static FILE *pF_azi = NULL; + static FILE *pF_ele = NULL; + static FILE *pF_ratio = NULL; + + if ( pF_azi == NULL ) + pF_azi = fopen( "./res/qmetadata_sid_azi_enc.txt", "w" ); + if ( pF_ele == NULL ) + pF_ele = fopen( "./res/qmetadata_sid_ele_enc.txt", "w" ); + if ( pF_ratio == NULL ) + pF_ratio = fopen( "./res/qmetadata_sid_ratio_enc.txt", "w" ); + +#endif + + /* Save initial position in bitstream */ + bit_pos_start = hMetaData->nb_bits_tot; + + /* write for MASA the number of transport channels used at coding and the CPE mode DFT/MDCT */ + if ( masa_sid_descriptor > -1 ) + { + push_next_indice( hMetaData, masa_sid_descriptor, 1 ); + } + + /* Code for one direction: diffuseness and average DOA(s)*/ + q_direction = &( q_metadata->q_direction[0] ); + nbands = q_direction->cfg.nbands; + nblocks = q_direction->cfg.nblocks; + start_band = 0; /*Start always with band 0 for SID*/ + + /* sanity checks*/ + assert( q_metadata->no_directions == 1 && "Qmetadata SID: only one direction supported!" ); + if ( sba_mode == SBA_MODE_SPAR ) + { + assert( ( q_direction->cfg.nbands == DIRAC_DTX_BANDS ) && "Qmetadata SID: only 2 bands supported!" ); + } + else + { + assert( ( q_direction->cfg.nbands == 5 ) && "Qmetadata SID: only 5 bands supported!" ); + } + + if ( sba_mode != SBA_MODE_SPAR ) + { + /* Signalling 2D*/ + push_next_indice( hMetaData, ( q_direction->not_in_2D > 0 ), 1 ); /*2D flag*/ + } + else + { + q_direction->not_in_2D = 1; /* force for merged modes */ + } + + /*Encode the quantized diffuseness in raw coding*/ + bits_dir = 0; + bits_diff = 0; + for ( b = start_band; b < nbands; b++ ) + { + q_direction->band_data[b].energy_ratio_index[0] = max( q_direction->band_data[b].energy_ratio_index[0], 4 ); + bits_diff += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].energy_ratio_index[0] - 4, DIRAC_DIFFUSE_LEVELS - 4 ); + + q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; + if ( q_direction->not_in_2D == 0 ) + { + q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ); + bits_dir += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].azimuth_m_alphabet[0] - 1, q_direction->band_data[b].azimuth_m_alphabet[0] ); + } + else + { + bits_dir += q_direction->band_data[b].bits_sph_idx[0]; + } + } + + /* Reduce bit demand by increasing diffuseness*/ + bits_delta = metadata_sid_bits - ( hMetaData->nb_bits_tot - bit_pos_start ) - bits_diff - bits_dir; + + while ( bits_delta < 0 && ( q_direction->not_in_2D > 0 ) ) + { + for ( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) + { + if ( q_direction->band_data[b].energy_ratio_index[0] < ( DIRAC_DIFFUSE_LEVELS - 1 ) ) + { + bits_delta += q_direction->band_data[b].bits_sph_idx[0]; + q_direction->band_data[b].energy_ratio_index[0]++; + q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; + bits_delta -= q_direction->band_data[b].bits_sph_idx[0]; + } + } + } + assert( ( bits_delta >= 0 ) && "Bit budget in Qmetadata SID is violated!!!" ); + + /*Code diffuseness*/ + for ( b = start_band; b < nbands; b++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0] - 4, DIRAC_DIFFUSE_LEVELS - 4 ); + } + + /* Compute and Quantize an average direction per band*/ + for ( b = start_band; b < nbands; b++ ) + { + set_zero( avg_direction_vector, 3 ); + for ( m = 0; m < nblocks; m++ ) + { + /*compute the average direction */ + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[m], q_direction->band_data[b].elevation[m], direction_vector ); + v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + } + + ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth[b], &avg_elevation[b] ); + + /* Quantize the average direction */ + if ( q_direction->not_in_2D == 0 ) + { + avg_elevation[b] = 0; + q_direction->band_data[b].spherical_index[0] = quantize_direction2D( avg_azimuth[b], + q_direction->band_data[b].azimuth_m_alphabet[0], + &avg_azimuth[b], + &q_direction->band_data[b].azimuth_index[0], + q_direction->cfg.mc_ls_setup ); + } + else + { + q_direction->band_data[b].spherical_index[0] = quantize_direction( avg_elevation[b], + avg_azimuth[b], + q_direction->band_data[b].bits_sph_idx[0], + &avg_elevation[b], + &avg_azimuth[b], + &q_direction->band_data[b].elevation_index[0], + &q_direction->band_data[b].azimuth_index[0], + q_direction->cfg.mc_ls_setup ); + } + + /* Save quantized DOAs */ + q_direction->band_data[b].q_azimuth[0] = avg_azimuth[b]; + q_direction->band_data[b].q_elevation[0] = avg_elevation[b]; + + if ( q_direction->band_data[b].azimuth_index[0] == MASA_NO_INDEX ) + { + q_direction->band_data[b].azimuth_index[0] = 0; + } + } + + /* quantize average elevation and azimuth angles */ + if ( q_direction->not_in_2D > 0 ) + { + for ( b = start_band; b < nbands; b++ ) + { + push_next_indice( hMetaData, q_direction->band_data[b].spherical_index[0], q_direction->band_data[b].bits_sph_idx[0] ); + } + } + else + { + for ( b = start_band; b < nbands; b++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].azimuth_index[0], q_direction->band_data[b].azimuth_m_alphabet[0] ); + } + } + +#ifdef DEBUG_MODE_QMETADATA + { + fprintf( pF_azi, "frame %d: ", frame ); + fprintf( pF_ele, "frame %d: ", frame ); + fprintf( pF_ratio, "frame %d: ", frame ); + + + /* Data is not used currently. Fix function when needed. */ + /*direction_distance( elevation_orig, azimuth_orig, q_direction->elevation, q_direction->azimuth, nbands, nblocks, mat_dist );*/ + for ( b = start_band; b < nbands; b++ ) + { + fprintf( pF_azi, " %+5.2f ", (int16_t) ( 100.f * avg_azimuth[b] ) / 100.f ); + fprintf( pF_ele, " %+5.2f ", (int16_t) ( 100.f * avg_elevation[b] ) / 100.f ); + fprintf( pF_ratio, " %1.3f ", q_direction->band_data[b].energy_ratio[0] ); + } + fprintf( pF_azi, "\n" ); + fprintf( pF_ele, "\n" ); + fprintf( pF_ratio, "\n" ); + } +#endif + + /* fill bits*/ + assert( ( hMetaData->nb_bits_tot - bit_pos_start ) <= metadata_sid_bits && "Too many written bits!" ); + while ( ( hMetaData->nb_bits_tot - bit_pos_start ) < metadata_sid_bits ) + { + push_next_indice( hMetaData, 0, 1 ); /*fill bit*/ + } + + return; +} + +/*------------------------------------------------------------------------- + * reset_metadata_spatial() + * + * Reset metadata in spatial formats + *------------------------------------------------------------------------*/ + +void reset_metadata_spatial( + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + const int32_t element_brate, /* i : element bitrate */ + int32_t *total_brate, /* o : total bitrate */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t nb_bits_metadata, /* i : number of meatdata bits */ + const SBA_MODE sba_mode, /* i : SBA mode */ + const int16_t element_mode /* i : element mode */ +) +{ + int16_t i, next_ind_sid, last_ind_sid; + + if ( core_brate == SID_2k40 || core_brate == FRAME_NO_DATA ) + { + if ( ( ivas_format == SBA_FORMAT || ivas_format == MASA_FORMAT ) && core_brate != FRAME_NO_DATA ) + { + if ( sba_mode == SBA_MODE_SPAR ) + { + assert( hMetaData->ind_list[0].nb_bits == 1 ); + if ( element_mode > IVAS_SCE ) + { + hMetaData->ind_list[0].value = 1; + } + else + { + hMetaData->ind_list[0].value = 0; + } + } + else + { + /* Reset metadata and keep only SID metadata*/ + last_ind_sid = hMetaData->next_ind; + next_ind_sid = hMetaData->next_ind; + while ( hMetaData->nb_bits_tot > nb_bits_metadata ) + { + next_ind_sid--; + hMetaData->nb_bits_tot -= hMetaData->ind_list[next_ind_sid].nb_bits; + } + + hMetaData->next_ind = 0; + hMetaData->nb_bits_tot = 0; + + for ( i = 0; i < next_ind_sid; i++ ) + { + hMetaData->ind_list[i].nb_bits = -1; + } + + for ( i = next_ind_sid; i < last_ind_sid; i++ ) + { + hMetaData->ind_list[hMetaData->next_ind].value = hMetaData->ind_list[i].value; + hMetaData->ind_list[hMetaData->next_ind].nb_bits = hMetaData->ind_list[i].nb_bits; + hMetaData->nb_bits_tot += hMetaData->ind_list[hMetaData->next_ind].nb_bits; + hMetaData->next_ind++; + hMetaData->ind_list[i].nb_bits = -1; + } + hMetaData->last_ind = hMetaData->next_ind; + assert( ( hMetaData->nb_bits_tot == ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS ) && "Problem of SID metadata in SCE" ); + } + } + else + { + /*Reset metadata*/ + for ( i = 0; i < hMetaData->next_ind; i++ ) + { + hMetaData->ind_list[i].nb_bits = -1; + } + hMetaData->nb_bits_tot = 0; + hMetaData->next_ind = 0; + hMetaData->last_ind = 0; + } + + *total_brate = element_brate; + } + else if ( sba_mode != SBA_MODE_SPAR ) + { + /* Reset SID metadata bits*/ + while ( hMetaData->nb_bits_tot > nb_bits_metadata ) + { + hMetaData->next_ind--; + hMetaData->nb_bits_tot -= hMetaData->ind_list[hMetaData->next_ind].nb_bits; + hMetaData->ind_list[hMetaData->next_ind].nb_bits = -1; + } + assert( hMetaData->nb_bits_tot == nb_bits_metadata && "Problem in metadata for SCE" ); + hMetaData->last_ind = hMetaData->next_ind; + } + + return; +} + + +/*------------------------------------------------------------------------- + * quantize_direction2D() + * + * + *------------------------------------------------------------------------*/ + +/* !r: quantized spherical index */ +int16_t quantize_direction2D( + float phi, /* i : input azimuth value */ + const int16_t no_cw, /* i : number of bits */ + float *phi_q, /* o : quantized azimuth value */ + uint16_t *index_phi, /* o : quantized azimuth index */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + int16_t idx_sph; + uint16_t id_phi; + if ( no_cw < 2 ) + { + *phi_q = 0; + + return 0; + } + + + if ( mc_format != MC_LS_SETUP_INVALID ) + { + id_phi = quantize_phi_chan_compand( phi + 180, phi_q, no_cw, 0, mc_format ); + } + else + { + id_phi = quantize_phi( phi + 180, 0, phi_q, no_cw ); + } + *phi_q -= 180; + *index_phi = ivas_qmetadata_reorder_generic( id_phi - ( no_cw >> 1 ) ); + + idx_sph = id_phi; + + return idx_sph; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_quantize_diffuseness_nrg_ratios() + * + * Quantize diffuseness + *------------------------------------------------------------------------*/ + +static void ivas_qmetadata_quantize_diffuseness_nrg_ratios( + IVAS_QMETADATA_HANDLE hQMetaData, + int16_t *needed_bits, + int16_t *nbits_diff, + int16_t *dfRatioBits ) +{ + int16_t j, k, dir2band; + int16_t index_dirRatio1Inv, index_dirRatio2Inv, index_dirRatio1Inv_mod, index_dirRatio2Inv_mod; + int16_t index_diff; + + nbits_diff[0] = 0; + nbits_diff[1] = 0; + needed_bits[0] = 0; + needed_bits[1] = 0; + dir2band = 0; + + for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + { + if ( hQMetaData->no_directions == 2 && hQMetaData->twoDirBands[j] == 1 ) + { + float dirRatio1, dirRatio2, diffRatio, sumRatio, dfRatio, dfRatioQ, diffRatioQ, dirRatio1Q, dirRatio2Q; + int16_t dfRatio_index, dfRatio_qsteps, dfRatio_bits; + + /* With 2dir metadata, we quantize and transmit diffuse-to-total ratio (diffRatio) and + * distribution factor of direct-to-total ratios (dFRatio). This is more efficient and + * accurate than simple separate quantization of each direct-to-total ratio or their + * separate inverses. */ + dirRatio1 = hQMetaData->q_direction[0].band_data[j].energy_ratio[0]; + dirRatio2 = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[0]; + sumRatio = dirRatio1 + dirRatio2; + diffRatio = 1.0f - sumRatio; + dfRatio = sumRatio < EPSILON ? 0.5f : dirRatio1 / sumRatio; + + index_diff = masa_sq( diffRatio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + diffRatioQ = diffuseness_reconstructions[index_diff]; + + dfRatio_bits = ivas_get_df_ratio_bits( index_diff ); + + dfRatioBits[dir2band] = dfRatio_bits; + + dfRatio_qsteps = ( 1 << dfRatio_bits ); + dfRatio_index = usquant( dfRatio, &dfRatioQ, 0.5f, 0.5f / ( dfRatio_qsteps - 1 ), dfRatio_qsteps ); + + /* Direction quantization requires also separately quantized direct-to-total ratios. Thus, we calculate them. */ + dirRatio1Q = dfRatioQ * ( 1.0f - diffRatioQ ); + dirRatio2Q = ( 1.0f - diffRatioQ ) - dirRatio1Q; + + index_dirRatio1Inv = masa_sq( 1.0f - dirRatio1Q, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + + /* Note: To save memory, we store temporarily index_diff and dfRatio_index into first and second direction + * energy ratio index variables until they have been encoded. index_dirRatio1Inv and index_dirRatio2Inv are + * then later retrieved for further use in encoding. */ + for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_diff; + hQMetaData->q_direction[0].band_data[j].energy_ratio[k] = dirRatio1Q; + } + nbits_diff[0] += MASA_BITS_ER; + + index_dirRatio2Inv = masa_sq( 1.0f - dirRatio2Q, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = dfRatio_index; + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[k] = dirRatio2Q; + } + nbits_diff[1] += dfRatio_bits; + + /* Obtain compensated direct-to-total ratios for direction quantization. This compensates for the + * fact that with 2dir data, it is harder to achieve separate high direct-to-total ratio values + * which are assumed by the direction quantization system. In practice, this improves direction + * accuracy when it is perceptual meaningful. */ + masa_compensate_two_dir_energy_ratio_index( index_dirRatio1Inv, index_dirRatio2Inv, &index_dirRatio1Inv_mod, &index_dirRatio2Inv_mod ); + + for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv_mod; + hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv_mod]; + } + needed_bits[0] += hQMetaData->q_direction[0].cfg.nblocks * bits_direction_masa[index_dirRatio1Inv_mod]; + + for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index_mod[k] = index_dirRatio2Inv_mod; + hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[k] = bits_direction_masa[index_dirRatio2Inv_mod]; + } + needed_bits[1] += hQMetaData->q_direction[1].cfg.nblocks * bits_direction_masa[index_dirRatio2Inv_mod]; + + dir2band++; + } + else + { + index_dirRatio1Inv = masa_sq( 1.0f - hQMetaData->q_direction[0].band_data[j].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + + for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_dirRatio1Inv; + hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv; + hQMetaData->q_direction[0].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions[index_dirRatio1Inv]; + hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv]; + } + + nbits_diff[0] += MASA_BITS_ER; + needed_bits[0] += hQMetaData->q_direction[0].cfg.nblocks * bits_direction_masa[index_dirRatio1Inv]; + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_diffuseness_huff_ec_encode() + * + * + *------------------------------------------------------------------------*/ + +static int16_t ivas_diffuseness_huff_ec_encode( + BSTR_ENC_HANDLE hMetaData, + const uint16_t idx ) +{ + int16_t nbits; + nbits = 0; + if ( idx <= DIFF_EC_HUFF_GR0_LIMIT ) + { + if ( idx > 0 ) + { + push_next_indice( hMetaData, ( 1 << idx ) - 1, idx ); + nbits += idx; + } + push_next_indice( hMetaData, 0, 1 ); + nbits += 1; + } + else + { + push_next_indice( hMetaData, 511, DIFF_EC_HUFF_GR0_LIMIT + 1 ); + push_next_indice( hMetaData, idx - DIFF_EC_HUFF_GR0_LIMIT - 1, 2 ); + nbits += DIFF_EC_HUFF_GR0_LIMIT + 3; + } + return nbits; +} + + +/*------------------------------------------------------------------------- + * ivas_diffuseness_huff_ec_prepare() + * + * + *------------------------------------------------------------------------*/ + +static void ivas_diffuseness_huff_ec_prepare( + IVAS_QDIRECTION *q_direction, + int16_t *best_av, + uint16_t *avr_idx, + int16_t *diffuseness_bits_huff ) +{ + int16_t bits; + int16_t av_crt; + int16_t av; + int16_t sh_idx; + uint16_t ui_sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t b, start_band, nbands; + + start_band = q_direction->cfg.start_band; + nbands = q_direction->cfg.nbands; + + *diffuseness_bits_huff = 0; + av = 0; + for ( b = start_band; b < nbands; b++ ) + { + av += q_direction->band_data[b].energy_ratio_index[0]; + } + av = (int16_t) ( 0.5f + av / (float) nbands ); + *best_av = av; + + *diffuseness_bits_huff = MAX16B; + for ( av_crt = av - 1; av_crt <= av + 1; av_crt++ ) + { + bits = 0; + for ( b = start_band; b < nbands; b++ ) + { + sh_idx = q_direction->band_data[b].energy_ratio_index[0] - av_crt; + ui_sh_idx[b] = ( sh_idx <= 0 ) ? ( -2 * sh_idx ) : sh_idx * 2 - 1; + if ( ui_sh_idx[b] >= 2 * DIRAC_DIFFUSE_LEVELS - 3 ) + { + bits = 100; /* to avoid difference larger than 6 in absolute value */ + } + + bits += ( ui_sh_idx[b] <= DIFF_EC_HUFF_GR0_LIMIT ) ? ( ui_sh_idx[b] + 1 ) : 11; + } + + if ( bits < *diffuseness_bits_huff ) + { + *diffuseness_bits_huff = bits; + mvs2s( (int16_t *) ui_sh_idx, (int16_t *) avr_idx, nbands ); + *best_av = av_crt; + } + } + + *diffuseness_bits_huff += MASA_BITS_ER; /* for the average */ + + return; +} + +/*------------------------------------------------------------------------- + * ivas_qmetadata_entropy_encode_diffuseness() + * + * encode diffuseness + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_entropy_encode_diffuseness( + BSTR_ENC_HANDLE hMetaData, + IVAS_QDIRECTION *q_direction, + uint16_t *diffuseness_index_max_ec_frame ) +{ + int16_t start_bit_pos; + int16_t diffuseness_bits_raw; + int16_t b; + int16_t min_diffuseness_m_index, max_diffuseness_m_index; + int16_t nbands; + int16_t start_band; + + nbands = q_direction->cfg.nbands; + start_band = q_direction->cfg.start_band; + + start_bit_pos = hMetaData->nb_bits_tot; + + if ( nbands == 1 ) + { + /* If there is only one band, diffuseness should be coded directly as raw with no signalling. */ + push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], MASA_BITS_ER ); + *diffuseness_index_max_ec_frame = 5; + return ( hMetaData->nb_bits_tot - start_bit_pos ); + } + + /* compute the number of raw coding bits */ + diffuseness_bits_raw = 0; + for ( b = start_band; b < nbands; b++ ) + { + diffuseness_bits_raw += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); + } + + min_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; + max_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; + + for ( b = start_band; b < nbands; b++ ) + { + if ( q_direction->band_data[b].energy_ratio_index[0] < min_diffuseness_m_index ) + { + min_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; + } + + if ( q_direction->band_data[b].energy_ratio_index[0] > max_diffuseness_m_index ) + { + max_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; + } + } + + if ( nbands < DIFF_EC_HUFF_BAND_LIMIT ) + { + /* Use similarity coding approach or raw coding when there is a low number of bands. */ + /* one bit is used to indicate whether diffuseness values are entropy coded or coded raw */ + if ( min_diffuseness_m_index == max_diffuseness_m_index ) /* all values are equal */ + { + push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ + push_next_indice( hMetaData, 1, 1 ); /* dif_have_unique_value */ + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS ); /* dif_unique_value */ + } + else if ( min_diffuseness_m_index + 1 == max_diffuseness_m_index ) /* only two consecutive values are present */ + { + push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ + push_next_indice( hMetaData, 0, 1 ); /* dif_have_unique_value */ + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS - 1 ); /* dif_min_value */ + + for ( b = start_band; b < nbands; b++ ) + { + push_next_indice( hMetaData, q_direction->band_data[b].energy_ratio_index[0] - min_diffuseness_m_index, 1 ); /* dif_bit_offset_values */ + } + } + else /* raw coding */ + { + push_next_indice( hMetaData, 1, 1 ); /* dif_use_raw_coding */ + + for ( b = start_band; b < nbands; b++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ + } + } + } + else + { + /* Use Huffman-coding approach or raw coding when there is a high number of bands. */ + int16_t diffuseness_bits_huff; + int16_t best_av; + uint16_t avr_idx[MASA_MAXIMUM_CODING_SUBBANDS]; + + /* First, obtain average indices and bit usage for Huffman-coding. */ + ivas_diffuseness_huff_ec_prepare( q_direction, &best_av, avr_idx, &diffuseness_bits_huff ); + + /* If there is benefit, use Huffman-coding. Otherwise, use raw coding. */ + if ( diffuseness_bits_huff < diffuseness_bits_raw ) + { + /* Signal Huffman EC */ + push_next_indice( hMetaData, 0, 1 ); + push_next_indice( hMetaData, best_av, MASA_BITS_ER ); + for ( b = start_band; b < nbands; b++ ) + { + ivas_diffuseness_huff_ec_encode( hMetaData, avr_idx[b] ); + } +#ifdef DEBUGGING + assert( ( hMetaData->nb_bits_tot - start_bit_pos ) == diffuseness_bits_huff + 1 ); +#endif + } + else + { + /* Signal raw */ + push_next_indice( hMetaData, 1, 1 ); + for ( b = start_band; b < nbands; b++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ + } + } + } + + *diffuseness_index_max_ec_frame = 5; + /* adaptively select the diffuseness_index_max_ec threshold */ + if ( min_diffuseness_m_index > 5 ) + { + *diffuseness_index_max_ec_frame = DIRAC_DIFFUSE_LEVELS - 1; + } + +#ifdef DEBUGGING + assert( ( hMetaData->nb_bits_tot - start_bit_pos ) <= 1 + diffuseness_bits_raw ); +#endif + + return ( hMetaData->nb_bits_tot - start_bit_pos ); +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_entropy_encode_df_ratio() + * + * encode dfRatio + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_entropy_encode_df_ratio( + BSTR_ENC_HANDLE hMetaData, + IVAS_QDIRECTION *q_direction, + int16_t *df_ratio_bits ) +{ + int16_t start_bit_pos; + int16_t bits_raw; + int16_t b; + int16_t min_index, max_index; + int16_t nbands, start_band; + int16_t max_df_ratio_bits; + int16_t ec_mode = 0; + int16_t max_alphabet_size; + + nbands = q_direction->cfg.nbands; + start_band = q_direction->cfg.start_band; + + start_bit_pos = hMetaData->nb_bits_tot; + + if ( nbands == 1 ) + { + /* If there is only one band, ratio should be coded directly as raw with no signalling. */ + push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], df_ratio_bits[0] ); + + return ( hMetaData->nb_bits_tot - start_bit_pos ); + } + + /* compute the number of raw coding bits */ + bits_raw = 0; + max_df_ratio_bits = 0; + for ( b = start_band; b < nbands; b++ ) + { + bits_raw += df_ratio_bits[b]; + max_df_ratio_bits = max( df_ratio_bits[b], max_df_ratio_bits ); + } + + min_index = q_direction->band_data[start_band].energy_ratio_index[0]; + max_index = q_direction->band_data[start_band].energy_ratio_index[0]; + for ( b = start_band; b < nbands; b++ ) + { + if ( q_direction->band_data[b].energy_ratio_index[0] < min_index ) + { + min_index = q_direction->band_data[b].energy_ratio_index[0]; + } + + if ( q_direction->band_data[b].energy_ratio_index[0] > max_index ) + { + max_index = q_direction->band_data[b].energy_ratio_index[0]; + } + } + + /* Decide what modes are possible */ + if ( bits_raw >= max_df_ratio_bits + 2 + nbands ) + { + ec_mode = 2; + } + else if ( bits_raw >= max_df_ratio_bits + 1 ) + { + ec_mode = 1; + } + else + { + ec_mode = 0; + } + max_alphabet_size = 1 << max_df_ratio_bits; + + if ( min_index == max_index && ec_mode > 0 ) /* all values are equal */ + { + push_next_indice( hMetaData, 0, 1 ); /* Signal between EC and raw */ + if ( ec_mode > 1 ) + { + /* Only use bit for signalling if necessary */ + push_next_indice( hMetaData, 0, 1 ); /* Signal between one value or bandwise diff mode */ + } + + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, max_alphabet_size ); + } + else if ( min_index + 1 == max_index && ec_mode > 1 ) /* only two consecutive values are present */ + { + push_next_indice( hMetaData, 0, 1 ); + push_next_indice( hMetaData, 1, 1 ); + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, max_alphabet_size - 1 ); + + for ( b = start_band; b < nbands; b++ ) + { + push_next_indice( hMetaData, q_direction->band_data[b].energy_ratio_index[0] - min_index, 1 ); /* Band-wise offset values */ + } + } + else /* raw coding */ + { + if ( ec_mode > 0 ) + { + push_next_indice( hMetaData, 1, 1 ); /* Only signal raw mode if not implicitly using it */ + } + + for ( b = start_band; b < nbands; b++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], 1 << df_ratio_bits[b] ); /* dif_values */ + } + } + + return ( hMetaData->nb_bits_tot - start_bit_pos ); +} + + +/*------------------------------------------------------------------------- + * restore_metadata_buffer() + * + * Reset metadata buffer + *------------------------------------------------------------------------*/ + +void restore_metadata_buffer( + BSTR_ENC_HANDLE hMetaData, + const int16_t next_ind_start, + const int16_t last_ind_start, + const int16_t bit_pos_start ) +{ + int16_t i; + + for ( i = next_ind_start; i <= hMetaData->next_ind; i++ ) + { + hMetaData->ind_list[i].nb_bits = -1; + } + hMetaData->nb_bits_tot = bit_pos_start; + hMetaData->next_ind = next_ind_start; + hMetaData->last_ind = last_ind_start; + + return; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_encode_quasi_uniform() + * + * encode value using a quasi-uniform code of b or b + 1 bits, where b = floor(log2(alphabet_size)) + *------------------------------------------------------------------------*/ + +static void ivas_qmetadata_encode_quasi_uniform( + BSTR_ENC_HANDLE hMetaData, + const uint16_t value, + const uint16_t alphabet_size ) +{ + int16_t bits; + uint16_t tresh; +#ifdef DEBUGGING + assert( ( alphabet_size >= 1 ) ); /*fcs: to check if this additional conditon is really needed: && (alphabet_size <= (1U << 31) - 1));*/ + assert( value < alphabet_size ); +#endif + + bits = 30 - norm_l( alphabet_size ); /* bits = floor(log2(alphabet_size)) */ + tresh = ( 1U << ( bits + 1 ) ) - alphabet_size; + + if ( value < tresh ) + { + push_next_indice( hMetaData, value, bits ); + } + else /* value >= tresh */ + { + push_next_indice( hMetaData, value + tresh, bits + 1 ); + } + + return; +} + + +/*-----------------------------------------------------------------------* + * GR encoder function definitions + *-----------------------------------------------------------------------*/ +/*------------------------------------------------------------------------- + * GR_bits_new() + * + * + *------------------------------------------------------------------------*/ + +/* !r: number of bits using Golomb Rice code */ +static int16_t GR_bits_new( + uint16_t *data, /* i : data to encode with GR */ + int16_t *no_symb, /* i : number of symbols for each component*/ + const int16_t no_data, /* i : number of input data */ + const int16_t GR_order, /* i : GR order to be used */ + const int16_t check_two_orders, /* i : check also coding with GR_order-1 */ + int16_t *real_GR_ord /* o : the GR order that has been used */ +) +{ + int16_t nbits = 0, i; + int16_t nbits1 = 0; + int16_t nb; + + for ( i = 0; i < no_data; i++ ) + { + nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order ); + nbits += nb; + } + + if ( check_two_orders == 1 ) + { + for ( i = 0; i < no_data; i++ ) + { + nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order - 1 ); + nbits1 += nb; + } + + if ( nbits1 < nbits ) + { + nbits = nbits1 + 1; + *real_GR_ord = GR_order - 1; + } + else + { + nbits += 1; + *real_GR_ord = GR_order; + } + } + else + { + *real_GR_ord = GR_order; + } + + return nbits; +} + + +/*------------------------------------------------------------------------- + * GR_bits_azimuth_context() + * + * Encoding azimuth indexes with GR code using context + *------------------------------------------------------------------------*/ + +/* !r: numer of bits used for coding */ +static int16_t GR_bits_azimuth_context( + uint16_t *data_in, /* i : data to be encoded */ + int16_t *no_symb, /* i : number of symbols for each component */ + const int16_t no_data_in, /* i : number of input data */ + const int16_t GR_order, /* i : GR order (GR_order or GR_order-1 are used ) */ + const uint16_t *bits_dir, /* i : bits for encoding the direction for each TF tile */ + int16_t *real_GR_ord, /* o : which GR order has been used */ + int16_t *p_use_context /* o : flag telling if context has been used or not */ +) +{ + int16_t i, nbits, nbits1, use_context; + uint16_t cdata[MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t data[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t min_val, max_val; + int16_t real_GR_ord1; + int16_t no_symb_local[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t no_data = 0; + + for ( i = 0; i < no_data_in; i++ ) + { + if ( data_in[i] < MASA_NO_INDEX ) + { + no_symb_local[no_data] = no_symb[i]; + data[no_data++] = data_in[i]; + } + } + + if ( no_data == 0 ) + { + *p_use_context = -3; /* corresponding to nothing to be written */ + return 0; + } + + nbits = 0; + use_context = 0; + + for ( i = 0; i < no_data; i++ ) + { + if ( ( bits_dir[i] <= 1 ) ) + { + nbits += bits_dir[i]; + use_context = 1; + } + else + { + *real_GR_ord = GR_order - ( bits_dir[i] == 2 ); + nbits += ivas_qmetadata_encode_extended_gr_length( data[i], no_symb_local[i], *real_GR_ord ); + } + } + + real_GR_ord1 = 0; + if ( use_context == 0 ) + { + nbits = GR_bits_new( data, no_symb_local, no_data, GR_order, 1, real_GR_ord ); + nbits1 = nbits; + + min_val = data[0]; + for ( i = 1; i < no_data; i++ ) + { + if ( data[i] < min_val ) + { + min_val = data[i]; + } + } + for ( i = 0; i < no_data; i++ ) + { + cdata[i] = data[i] - min_val; + } + + maximum_s( no_symb_local, no_data, &max_val ); + nbits1 = GR_bits_new( cdata, no_symb_local, no_data, GR_order - 1, 1, &real_GR_ord1 ) + ivas_qmetadata_encode_extended_gr_length( min_val, max_val, MASA_GR_ORD_AZ ); + + if ( nbits1 < nbits ) + { + nbits = nbits1 + 1; + use_context = -2; + *real_GR_ord = real_GR_ord1; + } + else + { + nbits = nbits + 1; + use_context = -1; + } + } + + *p_use_context = use_context; + + return nbits; +} + + +/*------------------------------------------------------------------------- + * mean_removed_GR_new() + * + * Golomb Rice encoding with mean removing + *------------------------------------------------------------------------*/ + +/* !r: number of bits used */ +static int16_t mean_removed_GR_new( + const uint16_t *idx, /* i : data to encode */ + const int16_t max_no_symb, + const int16_t len, /* i : number of data */ + const int16_t adapt_GR, /* i : flag for telling to use or nor two GR order values */ + int16_t *GR_ord, /* i/o: GR order */ + uint16_t *p_av, /* o : average index */ + uint16_t *mr_idx /* o : mean removed indexes */ +) +{ + int16_t av, i, nbits; + int16_t sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t max_ns[MASA_MAXIMUM_CODING_SUBBANDS]; + + av = (int16_t) ( 0.5f + sum_s( (const int16_t *) idx, len ) / (float) len ); + *p_av = av; + for ( i = 0; i < len; i++ ) + { + max_ns[i] = 2 * ( max_no_symb ); + sh_idx[i] = idx[i] - av; + } + + for ( i = 0; i < len; i++ ) + { + if ( sh_idx[i] < 0 ) + { + sh_idx[i] = -2 * sh_idx[i]; + } + else if ( sh_idx[i] > 0 ) + { + sh_idx[i] = sh_idx[i] * 2 - 1; + } + else + { + sh_idx[i] = 0; + } + mr_idx[i] = (uint16_t) sh_idx[i]; + } + + nbits = GR_bits_new( mr_idx, max_ns, len, *GR_ord, adapt_GR, GR_ord ); + + return nbits; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_encode_quasi_uniform_length() + * + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_encode_quasi_uniform_length( + const uint16_t value, + const uint16_t alphabet_size ) +{ + int16_t bits; + uint16_t tresh; +#ifdef DEBUGGING + assert( ( alphabet_size >= 1 ) ); /*fcs: to check if this additional conditon is really needed: && (alphabet_size <= (1U << 31) - 1));*/ + assert( value < alphabet_size ); +#endif + + bits = 30 - norm_l( alphabet_size ); /* bits = floor(log2(alphabet_size)) */ + tresh = ( 1U << ( bits + 1 ) ) - alphabet_size; + + if ( value >= tresh ) + { + bits++; + } + + return bits; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_entropy_encode_dir() + * + * Main function for entropy coding of the directions + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_entropy_encode_dir( + BSTR_ENC_HANDLE hMetaData, + IVAS_QDIRECTION *q_direction, + const uint16_t diffuseness_index_max_ec_frame, + const int16_t nbands, + const int16_t start_band, + const int16_t direction_bits_raw, + int16_t max_bits ) +{ + uint16_t diff_idx_min; + int16_t i, j; + int16_t nblocks; + + float avg_direction_vector[3], direction_vector[3], avg_azimuth, avg_elevation; + int16_t avg_azimuth_alphabet, avg_elevation_alphabet; + uint16_t avg_azimuth_index, avg_elevation_index; + int16_t avg_elevation_index_initial, avg_elevation_offset, avg_elevation_index_projected; + int16_t avg_azimuth_index_initial, avg_azimuth_offset, avg_azimuth_index_projected; + + int16_t elevation_bits_ec_best, azimuth_bits_ec_best; + + int16_t gr_param_elevation_best = 0, avg_elevation_index_best = 0; + uint16_t dist_elevation_indexes_best[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t gr_param_azimuth_best, avg_azimuth_index_best; + uint16_t dist_azimuth_indexes_best[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + + uint16_t idx, dist_count; + int16_t direction_bits_ec; + + uint16_t dist_elevation_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t dist_elevation_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t dist_azimuth_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t dist_azimuth_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t all_zero_dist_elevation_indexes = 1, all_zero_dist_azimuth_indexes = 1; + int16_t gr_param_elevation, gr_size_elevation, egr_size_elevation, gr_param_azimuth, gr_size_azimuth; + int16_t egr_size_azimuth, elevation_bits_ec, azimuth_bits_ec; + + float abs_theta; + float theta_cb[MAX_NO_THETA]; + int16_t sign_th, no_th; + int16_t avg_azimuth_index_upd = 0, use_adapt_avg; + int16_t make_gain = 0; + int16_t bits_gained = 0; + nblocks = q_direction->cfg.nblocks; + + /* estimate the number of bits for entropy coding of the direction values */ + direction_bits_ec = 0; + diff_idx_min = DIRAC_DIFFUSE_LEVELS; + idx = 0; + dist_count = 0; + set_zero( avg_direction_vector, 3 ); + for ( i = start_band; i < nbands; i++ ) + { + diff_idx_min = min( q_direction->band_data[i].energy_ratio_index_mod[0], diff_idx_min ); + + if ( q_direction->band_data[i].energy_ratio_index_mod[0] > diffuseness_index_max_ec_frame ) + { + /* estimate the raw part */ + if ( q_direction->not_in_2D > 0 ) + { + for ( j = 0; j < nblocks; j++ ) + { + direction_bits_ec += q_direction->band_data[i].bits_sph_idx[j]; + } + } + else + { + for ( j = 0; j < nblocks; j++ ) + { + direction_bits_ec += ivas_qmetadata_encode_quasi_uniform_length( + q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); + } + } + } + else + { + dist_count += nblocks; + + for ( j = 0; j < nblocks; j++ ) + { + /*compute the average direction */ + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); + v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + } + } + } + + /* quantize average elevation and azimuth angles using the best angle spacing and equatorial precision */ + ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth, &avg_elevation ); + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; + avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ + } + else + { + avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3] * 2 - 1; + avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ + } + + no_th = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; + + for ( i = 0; i < no_th; i++ ) + { + theta_cb[i] = i * delta_theta_masa[bits_direction_masa[diff_idx_min] - 3]; + } + + if ( theta_cb[i - 1] > 90 ) + { + theta_cb[i - 1] = 90; + } + + if ( avg_elevation < 0 ) + { + abs_theta = -avg_elevation; + sign_th = -1; + } + else + { + abs_theta = avg_elevation; + sign_th = 1; + } + + avg_elevation_index = squant( abs_theta, &avg_elevation, theta_cb, no_th ); + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + assert( avg_elevation >= 0 ); + } + else + { + if ( sign_th < 0 ) + { + avg_elevation_index = -avg_elevation_index; + } + avg_elevation *= sign_th; + avg_elevation_index += ( avg_elevation_alphabet >> 1 ); + } + avg_azimuth_index = quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ); + + /* Elevation only if not 2D */ + if ( q_direction->not_in_2D > 0 ) + { + avg_elevation_index_initial = avg_elevation_index; + elevation_bits_ec_best = MAX16B; + avg_elevation_index_best = -1; /* out of range value */ + gr_param_elevation_best = -1; /* out of range value */ + + + for ( avg_elevation_offset = 0; avg_elevation_offset < q_direction->cfg.search_effort; avg_elevation_offset++ ) + { + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + avg_elevation_index = avg_elevation_index_initial + avg_elevation_offset; + } + else + { + avg_elevation_index = avg_elevation_index_initial + ivas_qmetadata_dereorder_generic( avg_elevation_offset ); + } + + avg_elevation_index = ( avg_elevation_index + avg_elevation_alphabet ) % avg_elevation_alphabet; + + all_zero_dist_elevation_indexes = 1; + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + elevation_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( avg_elevation_index, avg_elevation_alphabet ); + } + else + { + elevation_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic( avg_elevation_index - ( avg_elevation_alphabet >> 1 ) ), avg_elevation_alphabet ); + } + idx = 0; + for ( i = start_band; i < nbands; i++ ) + { + if ( q_direction->band_data[i].energy_ratio_index_mod[0] <= diffuseness_index_max_ec_frame ) + { + for ( j = 0; j < nblocks; j++ ) + { + /* project the quantized average elevation to the same grid as the current sample */ + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); + } + else + { + avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); + } +#ifdef DEBUGGING + assert( ( 0 <= avg_elevation_index_projected ) && ( avg_elevation_index_projected < q_direction->band_data[i].elevation_m_alphabet[j] ) ); +#endif + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + if ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected > 0 ) + { + dist_elevation_indexes[idx] = 2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ) - 1; + } + else + { + dist_elevation_indexes[idx] = -2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ); + } + } + else + { + dist_elevation_indexes[idx] = ivas_qmetadata_reorder_elevation_index( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected, q_direction->band_data[i].elevation_m_alphabet[j] ); + } + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + dist_elevation_alphabets[idx] = 2 * q_direction->band_data[i].elevation_m_alphabet[j] - 1; + } + else + { + dist_elevation_alphabets[idx] = q_direction->band_data[i].elevation_m_alphabet[j]; + } + + if ( dist_elevation_indexes[idx] != 0 ) + { + all_zero_dist_elevation_indexes = 0; + } + idx++; + } + } + } + + if ( all_zero_dist_elevation_indexes ) + { + egr_size_elevation = 0; + gr_param_elevation = 4; + } + else + { + gr_param_elevation = ivas_qmetadata_get_optimal_gr_param( dist_elevation_indexes, idx, 4, &gr_size_elevation ); + egr_size_elevation = 0; + for ( i = 0; i < idx; i++ ) + { + egr_size_elevation += ivas_qmetadata_encode_extended_gr_length( dist_elevation_indexes[i], dist_elevation_alphabets[i], gr_param_elevation ); + } +#ifdef DEBUGGING + assert( egr_size_elevation <= gr_size_elevation ); +#endif + } + elevation_bits_ec += ivas_qmetadata_encode_quasi_uniform_length( gr_param_elevation, 4 + 1 ) + egr_size_elevation; + + if ( elevation_bits_ec < elevation_bits_ec_best ) + { + elevation_bits_ec_best = elevation_bits_ec; + avg_elevation_index_best = avg_elevation_index; + gr_param_elevation_best = gr_param_elevation; + for ( idx = 0; idx < dist_count; idx++ ) + { + dist_elevation_indexes_best[idx] = dist_elevation_indexes[idx]; + } + } + } + direction_bits_ec += elevation_bits_ec_best; + } + + /*Azimuth*/ + use_adapt_avg = 0; + if ( ( nbands - start_band >= 5 ) && ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( nblocks > 1 ) ) + { + use_adapt_avg = calc_var_azi( q_direction, diffuseness_index_max_ec_frame, avg_azimuth - 180, &avg_azimuth ); + avg_azimuth_index = quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ); + } + avg_azimuth_index_initial = avg_azimuth_index; /* avg_azimuth_index;*/ + azimuth_bits_ec_best = MAX16B; + avg_azimuth_index_best = -1; /* out of range value */ + gr_param_azimuth_best = -1; /* out of range value */ + + for ( avg_azimuth_offset = 0; avg_azimuth_offset < q_direction->cfg.search_effort; avg_azimuth_offset++ ) + { + set_zero( avg_direction_vector, 3 ); + avg_azimuth_index = avg_azimuth_index_initial + ivas_qmetadata_dereorder_generic( avg_azimuth_offset ); + avg_azimuth_index = ( avg_azimuth_index + avg_azimuth_alphabet ) % avg_azimuth_alphabet; + + all_zero_dist_azimuth_indexes = 1; + azimuth_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic( avg_azimuth_index - ( avg_azimuth_alphabet >> 1 ) ), avg_azimuth_alphabet ); + + idx = 0; + for ( i = start_band; i < nbands; i++ ) + { + if ( q_direction->band_data[i].energy_ratio_index_mod[0] <= diffuseness_index_max_ec_frame ) + { + for ( j = 0; j < nblocks; j++ ) + { + + if ( ( idx > MASA_LIMIT_IDX_AVG_AZI ) && ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) + { + avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index_upd, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); + } + else + { + if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) + { + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); + if ( idx < 4 ) + { + v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + } + } + /* project the quantized average azimuth angle to the same grid as the current sample */ + avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); + } +#ifdef DEBUGGING + assert( ( 0 <= avg_azimuth_index_projected ) && ( avg_azimuth_index_projected < q_direction->band_data[i].azimuth_m_alphabet[j] ) ); +#endif + dist_azimuth_indexes[idx] = ivas_qmetadata_reorder_azimuth_index( ivas_qmetadata_dereorder_generic( q_direction->band_data[i].azimuth_index[j] ) + ( q_direction->band_data[i].azimuth_m_alphabet[j] >> 1 ), avg_azimuth_index_projected, q_direction->band_data[i].azimuth_m_alphabet[j] ); + dist_azimuth_alphabets[idx] = q_direction->band_data[i].azimuth_m_alphabet[j]; + + if ( dist_azimuth_indexes[idx] != 0 ) + { + all_zero_dist_azimuth_indexes = 0; + } + if ( ( idx >= MASA_LIMIT_IDX_AVG_AZI ) && ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) + { + if ( idx % nblocks == 0 ) + { + v_multc( avg_direction_vector, 0.5f, avg_direction_vector, 3 ); + } + + /*compute the average direction per already coded subband */ + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); + v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth, &avg_elevation ); + avg_azimuth_index_upd = quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ); + } + idx++; + } + } + } + + if ( all_zero_dist_azimuth_indexes ) + { + egr_size_azimuth = 0; + gr_param_azimuth = 5; + } + else + { + /* estimate the ExtendedGR part for azimuth */ + gr_param_azimuth = ivas_qmetadata_get_optimal_gr_param( dist_azimuth_indexes, idx, 5, &gr_size_azimuth ); + egr_size_azimuth = 0; + for ( i = 0; i < idx; i++ ) + { + egr_size_azimuth += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes[i], dist_azimuth_alphabets[i], gr_param_azimuth ); + } +#ifdef DEBUGGING + assert( egr_size_azimuth <= gr_size_azimuth ); +#endif + } + + azimuth_bits_ec += ivas_qmetadata_encode_quasi_uniform_length( gr_param_azimuth, 5 + 1 ) + egr_size_azimuth; + + if ( azimuth_bits_ec < azimuth_bits_ec_best ) + { + azimuth_bits_ec_best = azimuth_bits_ec; + avg_azimuth_index_best = avg_azimuth_index; + gr_param_azimuth_best = gr_param_azimuth; + + for ( idx = 0; idx < dist_count; idx++ ) + { + dist_azimuth_indexes_best[idx] = dist_azimuth_indexes[idx]; + } + } + } + + if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( dist_count > 4 ) && ( gr_param_azimuth_best != 5 ) && ( nblocks > 1 ) ) + { + azimuth_bits_ec_best += 1; + } + + direction_bits_ec += azimuth_bits_ec_best; + + /*Decision raw or EC*/ + /* one bit is used to indicate whether the direction values are entropy coded or coded raw */ + if ( direction_bits_ec < direction_bits_raw ) /* entropy coding is better */ + { + + /* encode the raw part first */ + for ( i = start_band; i < nbands; i++ ) + { + if ( q_direction->band_data[i].energy_ratio_index_mod[0] > diffuseness_index_max_ec_frame ) + { + if ( q_direction->not_in_2D > 0 ) + { + for ( j = 0; j < nblocks; j++ ) + { + push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], q_direction->band_data[i].bits_sph_idx[j] ); + } + } + else + { + for ( j = 0; j < nblocks; j++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); + } + } + } + } + + if ( nbands > 1 && direction_bits_ec - max_bits > 0 && direction_bits_ec - max_bits < nblocks * nbands ) + { + make_gain = 1; + } + + if ( q_direction->not_in_2D > 0 ) + { + /* encode the ExtendedGR part for elevation */ + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, avg_elevation_index_best, avg_elevation_alphabet ); + } + else + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic( avg_elevation_index_best - ( avg_elevation_alphabet >> 1 ) ), avg_elevation_alphabet ); + } + + ivas_qmetadata_encode_quasi_uniform( hMetaData, gr_param_elevation_best, 4 + 1 ); + + if ( gr_param_elevation_best != 4 ) /* not all zero */ + { + for ( idx = 0; idx < dist_count; idx++ ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_elevation_indexes_best[idx], dist_elevation_alphabets[idx], gr_param_elevation_best ); + } + } + } + /* encode the ExtendedGR part for azimuth */ + ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic( avg_azimuth_index_best - ( avg_azimuth_alphabet >> 1 ) ), avg_azimuth_alphabet ); + + ivas_qmetadata_encode_quasi_uniform( hMetaData, gr_param_azimuth_best, 5 + 1 ); + + if ( gr_param_azimuth_best != 5 ) /* not all zero */ + { + for ( idx = 0; idx < min( nblocks, dist_count ); idx++ ) + { + if ( make_gain == 1 && bits_gained < direction_bits_ec - max_bits && dist_azimuth_alphabets[idx] > 40 ) + { + if ( dist_azimuth_indexes_best[idx] > 1 ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - + ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + else if ( dist_azimuth_indexes_best[idx] == 1 ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - + ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + else + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + } + else + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + } + if ( dist_count > nblocks ) + { + if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( nblocks > 1 ) ) + { + push_next_indice( hMetaData, use_adapt_avg, 1 ); + } + for ( idx = nblocks; idx < dist_count; idx++ ) + { + if ( make_gain == 1 && bits_gained < direction_bits_ec - max_bits && dist_azimuth_alphabets[idx] > 40 ) + { + if ( dist_azimuth_indexes_best[idx] > 1 ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - + ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + else if ( dist_azimuth_indexes_best[idx] == 1 ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - + ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + else + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + } + else + { + ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + } + } + } + } + direction_bits_ec -= bits_gained; + } + else + { + direction_bits_ec = -1; + } + + return direction_bits_ec; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_raw_encode_dir() + * + * Main function for raw coding of the directions (writing and bit estimation) + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_raw_encode_dir( + BSTR_ENC_HANDLE hMetaData, + IVAS_QDIRECTION *q_direction, + const int16_t nbands, + const int16_t start_band ) +{ + int16_t i, j; + int16_t direction_bits_raw; + int16_t start_bits = 0; /*To avoid compiler warning*/ + + direction_bits_raw = 0; + if ( hMetaData != NULL ) + { + start_bits = hMetaData->nb_bits_tot; + } + + if ( q_direction->not_in_2D > 0 ) + { + for ( i = start_band; i < nbands; i++ ) + { + if ( hMetaData != NULL ) + { + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], q_direction->band_data[i].bits_sph_idx[j] ); + } + } + else + { + direction_bits_raw += q_direction->cfg.nblocks * q_direction->band_data[i].bits_sph_idx[0]; + } + } + } + else + { + for ( i = start_band; i < nbands; i++ ) + { + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + if ( hMetaData != NULL ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); + } + else + { + direction_bits_raw += ivas_qmetadata_encode_quasi_uniform_length( + q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); + } + } + } + } + + if ( hMetaData != NULL ) + { + direction_bits_raw = hMetaData->nb_bits_tot - start_bits; + } + + return direction_bits_raw; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_get_optimal_gr_param() + * + * + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_get_optimal_gr_param( + uint16_t *unsigned_data, + const int16_t count, + const int16_t gr_param_count, + int16_t *opt_gr_size ) +{ + int16_t opt_bits, bits, idx; + int16_t opt_gr_param; + int16_t p; + + opt_bits = MAX16B; + opt_gr_param = -1; + + for ( p = 0; p < gr_param_count; p++ ) + { + bits = count * ( 1 + p ); /* terminating zero bit and the lsb bits */ + for ( idx = 0; idx < count; idx++ ) + { + bits += unsigned_data[idx] >> p; /* leading one bits */ + } + + if ( bits < opt_bits ) + { + opt_gr_param = p; + opt_bits = bits; + } + } + + *opt_gr_size = opt_bits; + + return opt_gr_param; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_encode_extended_gr_length() + * + * + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_encode_extended_gr_length( + const uint16_t value, + const uint16_t alphabet_size, + const int16_t gr_param ) +{ + uint16_t msb_alphabet_size; + int16_t bits; + uint16_t msb, lsb; + +#ifdef DEBUGGING + assert( alphabet_size >= 1 ); + assert( value < alphabet_size ); + assert( ( gr_param >= 0 ) && ( gr_param <= 15 ) ); +#endif + + msb_alphabet_size = ( alphabet_size + ( 1U << gr_param ) - 1 ) >> gr_param; + + if ( msb_alphabet_size <= 3 ) + { + /* EncodeQuasiUniform is always equal or better than Limited GR with up to 3 msb values */ + bits = ivas_qmetadata_encode_quasi_uniform_length( value, alphabet_size ); + } + else + { + msb = value >> gr_param; + + bits = msb; /* leading one bits */ + if ( msb < msb_alphabet_size - 1 ) + { + bits += 1 + gr_param; /* terminating zero bit, if not the largest msb (Limited GR), and the lsb bits */ + } + else + { + lsb = value & ( ( 1U << gr_param ) - 1 ); + bits += ivas_qmetadata_encode_quasi_uniform_length( lsb, alphabet_size - ( ( msb_alphabet_size - 1 ) << gr_param ) ); + } + } + + return bits; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_reorder_elevation_index() + * + * + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_reorder_elevation_index( + const int16_t elevation_index, + const int16_t avg_elevation_index, + const int16_t elevation_alphabet ) +{ + int16_t elevation_alphabet_half; + int16_t elevation_index_reordered; +#ifdef DEBUGGING + assert( ( elevation_alphabet & 0x01 ) == 1 ); /* elevation_alphabet has the form 2 * n_points + 1 */ +#endif + + elevation_alphabet_half = elevation_alphabet >> 1; + elevation_index_reordered = elevation_index - avg_elevation_index; + + /* reduce the distance for the index elevation to the range [-elevation_alphabet_half, elevation_alphabet_half] */ + if ( elevation_index_reordered < -elevation_alphabet_half ) + { + elevation_index_reordered += elevation_alphabet; + } + else if ( elevation_index_reordered > elevation_alphabet_half ) + { + elevation_index_reordered -= elevation_alphabet; + } + + /* fold reduced signed distance value for converting to unsigned */ + elevation_index_reordered = ivas_qmetadata_reorder_generic( elevation_index_reordered ); +#ifdef DEBUGGING + assert( ( 0 <= elevation_index_reordered ) && ( elevation_index_reordered < elevation_alphabet ) ); +#endif + + return elevation_index_reordered; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_reorder_azimuth_index() + * + * + *------------------------------------------------------------------------*/ + +static int16_t ivas_qmetadata_reorder_azimuth_index( + const int16_t azimuth_index, + const int16_t avg_azimuth_index, + const int16_t azimuth_alphabet ) +{ + int16_t azimuth_alphabet_half; + int16_t azimuth_index_reordered; + + azimuth_index_reordered = azimuth_index - avg_azimuth_index; + + if ( ( azimuth_alphabet != 1 ) && ( ( azimuth_alphabet & 0x01 ) == 1 ) ) + { + return ( ivas_qmetadata_reorder_elevation_index( azimuth_index, avg_azimuth_index, azimuth_alphabet ) ); + } + else if ( azimuth_alphabet != 1 ) + { + azimuth_alphabet_half = azimuth_alphabet >> 1; + /* reduce the distance for the index azimuth to the range [-azimuth_alphabet_half, azimuth_alphabet_half - 1] */ + if ( azimuth_index_reordered < -azimuth_alphabet_half ) + { + azimuth_index_reordered += azimuth_alphabet; + } + else if ( azimuth_index_reordered > azimuth_alphabet_half - 1 ) + { + azimuth_index_reordered -= azimuth_alphabet; + } + /* fold reduced signed distance value for converting to unsigned */ + azimuth_index_reordered = ivas_qmetadata_reorder_generic( azimuth_index_reordered ); +#ifdef DEBUGGING + assert( ( 0 <= azimuth_index_reordered ) && ( azimuth_index_reordered < azimuth_alphabet ) ); +#endif + } + else + { + /* for North and South poles, a single azimuth direction exists */ +#ifdef DEBUGGING + assert( ( azimuth_index == 0 ) || ( azimuth_index == MASA_NO_INDEX ) ); +#endif + azimuth_index_reordered = 0; + +#ifdef DEBUGGING + assert( avg_azimuth_index == 0 ); +#endif + } + + return azimuth_index_reordered; +} + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_encode_extended_gr() + * + * + *------------------------------------------------------------------------*/ + +static void ivas_qmetadata_encode_extended_gr( + BSTR_ENC_HANDLE hMetaData, + const uint16_t value, + const uint16_t alphabet_size, + const int16_t gr_param ) +{ + uint16_t msb_alphabet_size; + uint16_t msb, lsb, cnt; + +#ifdef DEBUGGING + assert( alphabet_size >= 1 ); + assert( value < alphabet_size ); + assert( ( gr_param >= 0 ) && ( gr_param <= 31 ) ); +#endif + + msb_alphabet_size = ( alphabet_size + ( 1U << gr_param ) - 1 ) >> gr_param; + + if ( msb_alphabet_size <= 3 ) + { + /* EncodeQuasiUniform is always equal or better than Limited GR with up to 3 msb values */ + ivas_qmetadata_encode_quasi_uniform( hMetaData, value, alphabet_size ); + } + else + { + msb = value >> gr_param; + lsb = value & ( ( 1U << gr_param ) - 1 ); + + for ( cnt = 0; cnt < msb; cnt++ ) + { + /* leading one bits */ + push_next_indice( hMetaData, 1, 1 ); + } + + if ( msb < msb_alphabet_size - 1 ) + { + push_next_indice( hMetaData, 0, 1 ); /* terminating zero bit, if not the largest msb (Limited GR) */ + if ( gr_param > 0 ) + { + push_next_indice( hMetaData, lsb, gr_param ); + } + } + else + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, lsb, alphabet_size - ( ( msb_alphabet_size - 1 ) << gr_param ) ); + } + } + + return; +} + + +/*-----------------------------------------------------------------------* + * Local functions (EC3, requantize directions) + *-----------------------------------------------------------------------*/ + +static int16_t truncGR0( + float *data, + float *data_hat, + uint16_t *data_idx, + const int16_t len, + const int16_t bits_allowed, + float *st, + float *ct ) +{ + int16_t i; + int16_t bits; + int16_t remap3b[] = { 1, 6, 2, 4, 0, 5, 3, 7 }, remap2b[] = { 1, 2, 0, 3 }; + float diff[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t indx[MAX_PARAM_SPATIAL_SUBFRAMES]; + + bits = 0; + set_f( data_hat, 0.0f, len ); + set_f( diff, 10000.0f, len ); + + if ( bits_allowed <= len + 1 ) + { + bits = min( bits_allowed, len ); + set_f( data_hat, 0.0f, len ); + /*set_s(data_idx, 0, len); */ + for ( i = 0; i < bits; i++ ) + { + if ( fabsf( data[i] ) <= 90 ) + { + data_idx[i] = 0; + data_hat[i] = 0.0f; + } + else + { + data_idx[i] = 1; + data_hat[i] = -180.0f; + } + } + return bits; + } + + for ( i = 0; i < len; i++ ) + { +#ifdef DEBUGGING + assert( data_idx[i] < MASA_NO_INDEX ); +#endif + data_idx[i] = quantize_phi( data[i] + 180, 0, &data_hat[i], 8 ); + data_hat[i] -= 180; + data_idx[i] = remap3b[data_idx[i]]; + bits += ivas_qmetadata_encode_extended_gr_length( data_idx[i], 8, 0 ); + diff[i] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[i] - data_hat[i] ) ); /*(data[i] - data_hat[i])*(data[i] - data_hat[i]);*/ + } + + i = 0; + if ( bits > bits_allowed ) + { + sort_desc_ind( diff, len, indx ); + for ( i = len - 1; i >= 0; i-- ) + { + if ( data_idx[indx[i]] > 3 ) + { + bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); + data_idx[indx[i]] = quantize_phi( data[indx[i]] + 180, 0, &data_hat[indx[i]], 4 ); + data_hat[indx[i]] -= 180; + data_idx[indx[i]] = remap2b[data_idx[indx[i]]]; + bits += ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); + diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); + } + if ( bits <= bits_allowed ) + { + break; + } + } + } + + if ( bits > bits_allowed ) + { + sort_desc_ind( diff, len, indx ); + for ( i = len - 1; i >= 0; i-- ) + { + + if ( data_idx[indx[i]] > 1 ) + { + bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); + if ( fabsf( data[indx[i]] ) <= 90 ) + { + data_idx[indx[i]] = 0; + data_hat[indx[i]] = 0; + } + else + { + data_idx[indx[i]] = 1; + data_hat[indx[i]] = -180; + } + + bits += ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); + diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); + } + + if ( bits <= bits_allowed ) + { + break; + } + } + } + + if ( bits > bits_allowed ) + { + +#ifdef DEBUGGING + assert( bits_allowed > len ); + for ( i = 0; i < len; i++ ) + { + assert( data_idx[i] <= 1 ); + } +#endif + + sort_desc_ind( diff, len, indx ); + for ( i = len - 1; i >= 0; i-- ) + { + + if ( data_idx[indx[i]] > 0 ) + { + bits -= data_idx[indx[i]]; + data_idx[indx[i]] = 0; + data_hat[indx[i]] = 0; + } + if ( bits <= bits_allowed ) + { + break; + } + } + } + + return bits; +} + + +/*-------------------------------------------------------------------* + * truncGR0_chan() + * + * + *-------------------------------------------------------------------*/ + +static int16_t truncGR0_chan( + float *data, + float *data_hat, + uint16_t *data_idx, + const int16_t len, + const int16_t bits_allowed, + float *st, + float *ct ) +{ + int16_t i, idx_crt; + int16_t bits; + float diff[MAX_PARAM_SPATIAL_SUBFRAMES], sort_diff[MAX_PARAM_SPATIAL_SUBFRAMES], min_diff, sum_diff; + int16_t indx[MAX_PARAM_SPATIAL_SUBFRAMES]; + + bits = 0; + set_f( data_hat, 0.0f, len ); + set_f( diff, 10000.0f, len ); + + if ( bits_allowed <= len + 1 ) + { + bits = min( bits_allowed, len ); + set_f( data_hat, 0.0f, len ); + /*set_s(data_idx, 0, len); */ + for ( i = 0; i < bits; i++ ) + { + if ( fabsf( data[i] ) <= 90 ) + { + data_idx[i] = 0; + data_hat[i] = 0.0f; + } + else + { + data_idx[i] = 1; + data_hat[i] = -180.0f; + } + } + return bits; + } + + for ( i = 0; i < len; i++ ) + { +#ifdef DEBUGGING + assert( data_idx[i] < MASA_NO_INDEX ); +#endif + data_idx[i] = quantize_phi_chan_lbr( data[i], &data_hat[i], 9 ); + + bits += ivas_qmetadata_encode_extended_gr_length( data_idx[i], 9, 0 ); + diff[i] = -st[i] - ct[i] * cosf( ( data[i] - data_hat[i] ) * PI_OVER_180 ); + } + + while ( bits > bits_allowed ) + { + min_diff = 1000.0f; + idx_crt = -1; + mvr2r( diff, sort_diff, len ); + for ( i = 0; i < len; i++ ) + { + if ( data_idx[i] > 0 ) + { + sort_diff[i] = -st[i] - ct[i] * cosf( ( fabsf( data[i] ) - cb_azi_chan[( ( data_idx[i] + 1 ) >> 1 ) - 1] ) * PI_OVER_180 ); + sum_diff = sum_f( sort_diff, len ); + + if ( sum_diff < min_diff ) + { + min_diff = sum_diff; + idx_crt = i; + } + sort_diff[i] = diff[i]; + } + } + + if ( idx_crt > -1 ) + { + bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[idx_crt], 9, 0 ); + data_idx[idx_crt] = quantize_phi_chan_lbr( data[idx_crt], &data_hat[idx_crt], data_idx[idx_crt] + 1 ); + bits += ivas_qmetadata_encode_extended_gr_length( data_idx[idx_crt], 9, 0 ); + diff[idx_crt] = -st[idx_crt] - ct[idx_crt] * cosf( ( data[idx_crt] - data_hat[idx_crt] ) * PI_OVER_180 ); + } + else + { + break; + } + } + + if ( bits > bits_allowed ) + { + mvr2r( diff, sort_diff, len ); + sort_desc_ind( sort_diff, len, indx ); + + for ( i = len - 1; i >= 0; i-- ) + { + idx_crt = indx[i]; + if ( data_idx[idx_crt] > 0 ) + { + bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[idx_crt], 9, 0 ); + data_idx[idx_crt] = 0; + data_hat[idx_crt] = 0; + bits += 1; + } + + if ( bits <= bits_allowed ) + { + break; + } + } + } + + return bits; +} + + +/*-------------------------------------------------------------------* + * common_direction() + * + * + *-------------------------------------------------------------------*/ + +static int16_t common_direction( + IVAS_QDIRECTION *q_direction, + const int16_t band_idx, + const int16_t len, + const int16_t bits_allowed, + BSTR_ENC_HANDLE hMetaData, + float *elevation_orig, + float *azimuth_orig ) +{ + int16_t nbits; + int16_t no_th, i, id_th, k; + float theta_cb[5]; + float dist, best_dist; + float ct[MAX_PARAM_SPATIAL_SUBFRAMES], st[MAX_PARAM_SPATIAL_SUBFRAMES]; + + nbits = 0; + + if ( bits_allowed == 0 ) + { + for ( i = 0; i < len; i++ ) + { + q_direction->band_data[band_idx].elevation[i] = 0; + q_direction->band_data[band_idx].azimuth[i] = 0; + } + + return 0; + } + if ( bits_allowed <= len + 1 ) + { + set_f( q_direction->band_data[band_idx].elevation, 0.0f, len ); + set_f( st, 0.0f, len ); + + for ( i = 0; i < len; i++ ) + { + ct[i] = cosf( elevation_orig[i] * PI_OVER_180 ); + } + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + nbits = truncGR0_chan( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed, st, ct ); + } + else + { + nbits = truncGR0( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed, st, ct ); + } + + for ( i = 0; i < nbits; i++ ) + { + push_next_indice( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 1 ); + } + + return nbits; + } + + no_th = no_theta_masa[0] + 3; /* only 5 values for theta; the lat 2 are +/-90 */ + + theta_cb[0] = 0; + theta_cb[1] = delta_theta_masa[2]; + theta_cb[2] = -theta_cb[1]; + theta_cb[3] = 90.0f; + theta_cb[4] = -90.0f; + best_dist = 900000.0f; + id_th = 0; + + for ( i = 0; i < no_th; i++ ) + { + dist = 0.0f; + for ( k = 0; k < len; k++ ) + { + dist += ( elevation_orig[k] - theta_cb[i] ) * ( elevation_orig[k] - theta_cb[i] ); + } + if ( dist < best_dist ) + { + id_th = i; + best_dist = dist; + } + } + + set_f( q_direction->band_data[band_idx].elevation, theta_cb[id_th], len ); + + for ( i = 0; i < len; i++ ) + { + q_direction->band_data[band_idx].elevation_index[i] = id_th; + } + + if ( id_th == 0 ) + { + push_next_indice( hMetaData, 0, 1 ); /* average theta index */ + set_f( st, 0.0f, len ); + + for ( i = 0; i < len; i++ ) + { + ct[i] = cosf( elevation_orig[i] * PI_OVER_180 ); + } + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + nbits = truncGR0_chan( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - 1, st, ct ) + 1; + } + else + { + nbits = truncGR0( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - 1, st, ct ) + 1; + } + } + else + { + if ( id_th >= 3 ) + { + /* theta is 90 or -90; only theta is sent */ + push_next_indice( hMetaData, id_th + 11, 4 ); /* average theta index */ + set_f( q_direction->band_data[band_idx].azimuth, 0.0f, len ); + for ( i = 0; i < len; i++ ) + { + q_direction->band_data[band_idx].azimuth_index[i] = 0; + } + nbits = 4; + + return nbits; + } + + set_f( st, sinf( theta_cb[id_th] * PI_OVER_180 ), len ); + set_f( ct, cosf( theta_cb[id_th] * PI_OVER_180 ), len ); + + for ( i = 0; i < len; i++ ) + { + st[i] *= sinf( elevation_orig[i] * PI_OVER_180 ); + ct[i] *= cosf( elevation_orig[i] * PI_OVER_180 ); + q_direction->band_data[band_idx].azimuth_index[i] = 0; + } + + if ( id_th == 1 ) + { + push_next_indice( hMetaData, 2, 2 ); /* average theta index */ + } + else + { + assert( id_th == 2 ); + push_next_indice( hMetaData, 6, 3 ); /* average theta index */ + } + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + nbits = truncGR0_chan( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - ( id_th + 1 ), st, ct ) + ( id_th + 1 ); + } + else + { + nbits = truncGR0( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - ( id_th + 1 ), st, ct ) + ( id_th + 1 ); + } + } + + if ( bits_allowed - ( id_th + 1 ) <= len + 1 ) + { + + for ( i = 0; i < min( len, bits_allowed - ( id_th + 1 ) ); i++ ) + { + push_next_indice( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 1 ); + } + } + else + { + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + for ( i = 0; i < len; i++ ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 9, 0 ); + } + } + else + { + for ( i = 0; i < len; i++ ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 8, 0 ); + } + } + } + + return nbits; +} + + +/*-------------------------------------------------------------------* + * encode_directions_subband() + * + * + *-------------------------------------------------------------------*/ + +static int16_t encode_directions_subband( + IVAS_QDIRECTION *q_direction, + int16_t coding_subbands, + BSTR_ENC_HANDLE hMetaData, + const int16_t j, + const int16_t next_j, + const int16_t no_subframes, + const int16_t last_subband, + int16_t *p_diff, + float *elevation_orig, + float *azimuth_orig ) +{ + int16_t allowed_bits, use_vq, max_nb_idx, k; + int16_t diff; + float d1, d2; + int16_t nbits; + int16_t *bits_dir0; + + nbits = 0; + diff = *p_diff; + bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; + allowed_bits = sum_s( bits_dir0, no_subframes ); + + if ( allowed_bits > 0 ) + { + use_vq = 0; + max_nb_idx = 0; + + for ( k = 0; k < no_subframes; k++ ) + { + if ( bits_dir0[k] > use_vq ) + { + use_vq = bits_dir0[k]; + max_nb_idx = k; + } + } + + if ( no_subframes > 1 ) + { + if ( ( use_vq > 1 ) && ( use_vq <= LIMIT_USE_COMMON ) ) + { + bits_dir0[max_nb_idx] -= 1; + allowed_bits -= 1; + } +#ifdef DEBUGGING + assert( bits_dir0[max_nb_idx] > 0 ); +#endif + } + if ( no_subframes > 1 ) + { + if ( use_vq <= LIMIT_USE_COMMON ) + { + /* calculate the two distances */ + calculate_two_distances( q_direction->band_data[j].elevation, bits_dir0, allowed_bits, no_subframes, &d1, &d2 ); + if ( ( ( use_vq > 1 ) && ( d2 <= d1 ) ) || ( use_vq <= 1 ) ) + { + if ( use_vq > 1 ) + { + push_next_indice( hMetaData, 1, 1 ); /* signal VQ */ + } + + diff += common_direction( q_direction, j, no_subframes, allowed_bits, hMetaData, elevation_orig, azimuth_orig ) - allowed_bits; + + if ( last_subband == 0 ) + { + update_bits_next_block( q_direction, &diff, next_j, coding_subbands, no_subframes ); + } + } + else + { + push_next_indice( hMetaData, 0, 1 ); + + if ( last_subband == 0 ) + { + mvr2r( elevation_orig, q_direction->band_data[j].elevation, no_subframes ); + mvr2r( azimuth_orig, q_direction->band_data[j].azimuth, no_subframes ); + joint_encoding( q_direction, j, next_j, coding_subbands, bits_dir0, allowed_bits, hMetaData, &diff ); + } + else + { + for ( k = 0; k < no_subframes; k++ ) + { + /* requantize the direction */ + q_direction->band_data[j].spherical_index[k] = quantize_direction( elevation_orig[k], + azimuth_orig[k], + q_direction->band_data[j].bits_sph_idx[k], + &q_direction->band_data[j].elevation[k], + &q_direction->band_data[j].azimuth[k], + &q_direction->band_data[j].elevation_index[k], + &q_direction->band_data[j].azimuth_index[k], + q_direction->cfg.mc_ls_setup ); + } + + if ( allowed_bits > 0 ) + { + nbits = write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); + } + } + } + } + else + { + /* there is only joint coding */ + mvr2r( elevation_orig, q_direction->band_data[j].elevation, no_subframes ); + mvr2r( azimuth_orig, q_direction->band_data[j].azimuth, no_subframes ); + + if ( last_subband == 0 ) + { + joint_encoding( q_direction, j, next_j, coding_subbands, bits_dir0, allowed_bits, hMetaData, &diff ); + } + else + { + for ( k = 0; k < no_subframes; k++ ) + { + /* requantize the direction */ + q_direction->band_data[j].spherical_index[k] = quantize_direction( elevation_orig[k], + azimuth_orig[k], + q_direction->band_data[j].bits_sph_idx[k], + &q_direction->band_data[j].elevation[k], + &q_direction->band_data[j].azimuth[k], + &q_direction->band_data[j].elevation_index[k], + &q_direction->band_data[j].azimuth_index[k], + q_direction->cfg.mc_ls_setup ); + } + + if ( allowed_bits > 0 ) + { + nbits = write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); + } + } + } + } + else + { + /* 1 subframe case */ + /* there is only joint coding */ + mvr2r( elevation_orig, q_direction->band_data[j].elevation, no_subframes ); + mvr2r( azimuth_orig, q_direction->band_data[j].azimuth, no_subframes ); + + if ( last_subband == 0 ) + { + joint_encoding( q_direction, j, next_j, coding_subbands, bits_dir0, allowed_bits, hMetaData, &diff ); + } + else + { + for ( k = 0; k < no_subframes; k++ ) + { + /* requantize the direction */ + q_direction->band_data[j].spherical_index[k] = quantize_direction( elevation_orig[k], + azimuth_orig[k], + q_direction->band_data[j].bits_sph_idx[k], + &q_direction->band_data[j].elevation[k], + &q_direction->band_data[j].azimuth[k], + &q_direction->band_data[j].elevation_index[k], + &q_direction->band_data[j].azimuth_index[k], + q_direction->cfg.mc_ls_setup ); + } + + if ( allowed_bits > 0 ) + { + nbits = write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); + } + } + } + } + else + { + set_f( q_direction->band_data[j].elevation, 0.0f, no_subframes ); + set_f( q_direction->band_data[j].azimuth, 0.0f, no_subframes ); + } + + *p_diff = diff; + + return nbits; +} + + +/*-------------------------------------------------------------------* + * calc_var_azi() + * + * + *-------------------------------------------------------------------*/ + +static int16_t calc_var_azi( + const IVAS_QDIRECTION *q_direction, + const int16_t diffuseness_index_max_ec_frame, + const float avg_azimuth, + float *avg_azimuth_out ) +{ + float var_band, dif; + float avg_direction_vector_band[3], avg_azimuth_band[24], direction_vector[3]; + float avg_elevation; + int16_t i, j, idx; + + idx = 0; + set_zero( avg_azimuth_band, 24 ); + + for ( i = 0; i < q_direction->cfg.nbands; i++ ) + { + set_zero( avg_direction_vector_band, 3 ); + if ( q_direction->band_data[i].energy_ratio_index_mod[0] <= diffuseness_index_max_ec_frame ) + { + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + /*compute the average direction */ + ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); + v_add( avg_direction_vector_band, direction_vector, avg_direction_vector_band, 3 ); + } + ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector_band, &avg_azimuth_band[idx], &avg_elevation ); + idx++; + } + } + + var_band = 0.0f; + + for ( i = 0; i < idx; i++ ) + { + dif = ( avg_azimuth_band[idx] - avg_azimuth ); + if ( dif < 0 ) + { + dif = -dif; + } + if ( dif > 180 ) + { + dif = 360 - dif; + } + + var_band += dif * dif; + } + + if ( idx > 0 ) + { + var_band = var_band / idx; + } + + if ( var_band <= VAR_AZI_THRESH ) + { + *avg_azimuth_out = avg_azimuth; + return 0; + } + else + { + *avg_azimuth_out = avg_azimuth_band[0]; + return 1; + } +} + + +/*-------------------------------------------------------------------* + * requantize_direction_EC_3() + * + * + *-------------------------------------------------------------------*/ + +static ivas_error requantize_direction_EC_3( + int16_t *extra_bits, + IVAS_QDIRECTION *q_direction, + const int16_t coding_subbands, + BSTR_ENC_HANDLE hMetaData, + float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + int16_t *ind_order ) +{ + /* gradually increase the bits following the performance of the EC layer*/ + int16_t j, k; + int16_t use_vq; + int16_t diff, allowed_bits, nbits, last_j; + int16_t no_subframes, start_band; + float st[MAX_PARAM_SPATIAL_SUBFRAMES], ct[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t *bits_dir0; + + nbits = 0; + no_subframes = q_direction->cfg.nblocks; + start_band = q_direction->cfg.start_band; + + if ( q_direction->not_in_2D > MASA_LIMIT_2D ) + { + j = ind_order[coding_subbands - 1]; + bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; + allowed_bits = sum_s( bits_dir0, no_subframes ); + last_j = j - ( allowed_bits == 0 ); + diff = 0; + if ( coding_subbands == 1 ) + { + last_j = start_band; + } + for ( j = 0; j < last_j; j++ ) + { + k = ind_order[j]; + encode_directions_subband( q_direction, coding_subbands, hMetaData, k, ind_order[j + 1], no_subframes, 0, &diff, elevation_orig[k], azimuth_orig[k] ); + } + + /* last subbands to be written in fixed rate */ + for ( j = last_j; j < coding_subbands; j++ ) + { + k = ind_order[j]; + encode_directions_subband( q_direction, coding_subbands, hMetaData, k, 0, no_subframes, 1, &diff, elevation_orig[k], azimuth_orig[k] ); + } + } + else /* 2D */ + { + diff = 0; + nbits = 0; + for ( j = start_band; j < coding_subbands; j++ ) + { + bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; + allowed_bits = sum_s( bits_dir0, no_subframes ); + use_vq = 0; + + for ( k = 0; k < no_subframes; k++ ) + { + if ( bits_dir0[k] > use_vq ) + { + use_vq = bits_dir0[k]; + } + } + + if ( ( use_vq <= 3 ) && ( allowed_bits <= 11 ) ) + { + set_f( st, 0.0f, no_subframes ); + + for ( k = 0; k < no_subframes; k++ ) + { + ct[k] = cosf( elevation_orig[j][k] * PI_OVER_180 ); + } + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + nbits += truncGR0_chan( azimuth_orig[j], q_direction->band_data[j].azimuth, q_direction->band_data[j].azimuth_index, no_subframes, allowed_bits, st, ct ); + } + else + { + nbits += truncGR0( azimuth_orig[j], q_direction->band_data[j].azimuth, q_direction->band_data[j].azimuth_index, no_subframes, allowed_bits, st, ct ); + } + + if ( allowed_bits <= no_subframes + 1 ) + { + for ( k = 0; k < min( no_subframes, allowed_bits ); k++ ) + { + push_next_indice( hMetaData, q_direction->band_data[j].azimuth_index[k], 1 ); + } + } + else + { + for ( k = 0; k < no_subframes; k++ ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[j].azimuth_index[k], q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ? 9 : 8, 0 ); + } + } + } + else + { + for ( k = 0; k < no_subframes; k++ ) + { + /* requantize the direction */ + q_direction->band_data[j].spherical_index[k] = quantize_direction2D( azimuth_orig[j][k], + 1 << q_direction->band_data[j].bits_sph_idx[k], + &q_direction->band_data[j].azimuth[k], + &q_direction->band_data[j].azimuth_index[k], + q_direction->cfg.mc_ls_setup ); + q_direction->band_data[j].elevation_index[k] = 0; + } + nbits += write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); + } + } + } +#ifdef DEBUGGING + if ( diff > 0 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Not enough bits in requantize_direction_EC_3(); %d bits written \n", nbits ); + } +#endif + + *extra_bits = -diff; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * write_fixed_rate_direction() + * + * writing of the spherical indexes + *-------------------------------------------------------------------*/ + +/* !r: number of bits written */ +static int16_t write_fixed_rate_direction( + BSTR_ENC_HANDLE hMetaData, /* i : MASA metadata structure */ + IVAS_QDIRECTION *qdirection, /* i/o: quantized directional parameters */ + const int16_t j_idx, /* i : index of subband for which the data is written */ + const int16_t len /* i : number of data */ +) +{ + int16_t nbits, i; + + nbits = 0; + for ( i = 0; i < len; i++ ) + { + push_next_indice( hMetaData, qdirection->band_data[j_idx].spherical_index[i], qdirection->band_data[j_idx].bits_sph_idx[i] ); + nbits += qdirection->band_data[j_idx].bits_sph_idx[i]; + } + + return nbits; +} + + +/*-------------------------------------------------------------------* + * joint_encoding() + * + * joint encoding of elevation and azimuth + *-------------------------------------------------------------------*/ + +static void joint_encoding( + IVAS_QDIRECTION *q_direction, /* i/o: quantized directional parameters */ + const int16_t j, /* i : subband index */ + const int16_t next_j, /* i : next subband index */ + const int16_t coding_subbands, /* i : total number of subband */ + int16_t *bits_dir0, /* i/o: number of bits for each tile in each subband */ + const int16_t allowed_bits, /* i : maximum number of bits available for the current subband */ + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + int16_t *diff /* o : bits to be given/taken to next subband */ +) +{ + int16_t k; + int16_t GR_ord_azimuth, use_context, GR_ord_elevation; + uint8_t method; + int16_t nbits; + int16_t same; + uint16_t data[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t len_data = 0; + int16_t no_symb_ele[MAX_PARAM_SPATIAL_SUBFRAMES]; + + for ( k = 0; k < q_direction->cfg.nblocks; k++ ) + { + q_direction->band_data[j].bits_sph_idx[k] = bits_dir0[k]; + + /* requantize the direction */ + q_direction->band_data[j].spherical_index[k] = quantize_direction( q_direction->band_data[j].elevation[k], q_direction->band_data[j].azimuth[k], + q_direction->band_data[j].bits_sph_idx[k], &q_direction->band_data[j].elevation[k], + &q_direction->band_data[j].azimuth[k], &q_direction->band_data[j].elevation_index[k], + &q_direction->band_data[j].azimuth_index[k], + q_direction->cfg.mc_ls_setup ); + + if ( bits_dir0[k] >= 3 ) + { + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3]; + q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[bits_dir0[k] - 1][q_direction->band_data[j].elevation_index[k]]; + } + else + { + q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3] * 2 - 1; + q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[bits_dir0[k] - 1][( q_direction->band_data[j].elevation_index[k] + 1 ) >> 1]; + } + assert( q_direction->band_data[j].elevation_index[k] != MASA_NO_INDEX ); + } + else if ( bits_dir0[k] > 0 ) + { + q_direction->band_data[j].elevation_m_alphabet[k] = 1; + q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[bits_dir0[k] - 1][0]; + } + else + { + q_direction->band_data[j].elevation_m_alphabet[k] = 1; + q_direction->band_data[j].azimuth_m_alphabet[k] = 1; + } + } + + for ( k = 0; k < q_direction->cfg.nblocks; k++ ) + { + if ( q_direction->band_data[j].bits_sph_idx[k] <= 2 ) + { + q_direction->band_data[j].elevation_index[k] = MASA_NO_INDEX; + } + else + { + no_symb_ele[len_data] = q_direction->band_data[j].elevation_m_alphabet[k]; + data[len_data++] = q_direction->band_data[j].elevation_index[k]; + } + } + + + /* encode indexes for current subband and count the number of bits */ + + if ( q_direction->cfg.nblocks == 1 && q_direction->band_data[j].bits_sph_idx[0] <= MASA_MIN_BITS_TF + 1 ) + { + /* encode with fixed rate only if only one subframe and very low number of bits */ + nbits = write_fixed_rate_direction( hMetaData, q_direction, j, q_direction->cfg.nblocks ); + } + else + { + + if ( len_data > 0 ) + { + nbits = GR_bits_new( data, no_symb_ele, len_data, MASA_GR_ORD_EL, 1, &GR_ord_elevation ); + } + else + { + nbits = 0; + GR_ord_elevation = MASA_GR_ORD_EL; + } + + same = 1; + for ( k = 1; k < q_direction->cfg.nblocks; k++ ) + { + if ( q_direction->band_data[j].elevation_index[k] != q_direction->band_data[j].elevation_index[0] ) + { + same = 0; + } + } + if ( same == 1 && q_direction->band_data[j].elevation_index[0] < 4 ) + { + nbits = 3; + } + else + { + same = 0; + nbits += 1; + } + + nbits += GR_bits_azimuth_context( q_direction->band_data[j].azimuth_index, + q_direction->band_data[j].azimuth_m_alphabet, q_direction->cfg.nblocks, MASA_GR_ORD_AZ, + q_direction->band_data[j].bits_sph_idx, &GR_ord_azimuth, &use_context ); + + if ( allowed_bits == 0 ) + { + nbits = 0; + } + else + { + if ( nbits >= allowed_bits ) + { + nbits = allowed_bits + 1; /* fixed rate encoding */ + method = 1; + push_next_indice( hMetaData, method, 1 ); + + /* write current subband data */ + nbits = 1 + write_fixed_rate_direction( hMetaData, q_direction, j, q_direction->cfg.nblocks ); + } + else + { + nbits += 1; /* EC coding */ + method = 0; + push_next_indice( hMetaData, method, 1 ); + + /* write current subband data */ + write_ec_direction( &nbits, hMetaData, q_direction, j, q_direction->cfg.nblocks, GR_ord_elevation, GR_ord_azimuth, use_context, same ); + nbits++; + } + } + } + *diff += nbits - allowed_bits; + update_bits_next_block( q_direction, diff, next_j, coding_subbands, q_direction->cfg.nblocks ); + + return; +} + + +/*-------------------------------------------------------------------* + * calculate_two_distances() + * + * calculate estimated distortions if encoding with VQ or not + *-------------------------------------------------------------------*/ + +static void calculate_two_distances( + float *el, /* i : elevation values */ + int16_t *bits, /* i : number of bits for each tile */ + const int16_t total_bits, /* i : total number of bits for subband */ + const int16_t len, /* i : number of tiles */ + float *p_d1, /* o : first distortion */ + float *p_d2 /* o : second distortion */ +) +{ + int16_t i; + float d1, d2, el_av; + float cos_delta_phi_cb[] = { 0.848f, 0.8988f, 0.9272f, 0.9563f, 0.9744f, 0.9816f, 0.9877f, 0.9925f }; + float var_el; + + d1 = 0.0f; + d2 = 0.0f; + + el_av = mean( el, len ); + if ( total_bits > 9 ) + { + for ( i = 0; i < len; i++ ) + { + if ( bits[i] > 2 ) + { + if ( fabsf( el[i] ) < fabsf( ( fabsf( el[i] ) - 45 ) ) ) + { + /* el_hat = 0*/ + if ( bits[i] == 3 ) + { + d1 += 1 - 0.7f * cosf( el[i] * PI_OVER_180 ); + } + else + { + d1 += 1 - 0.92f * cosf( el[i] * PI_OVER_180 ); + } + } + else + { + if ( bits[i] == 3 ) + { + d1 += 1 - sinf( el[i] * PI_OVER_180 ) * 0.7f * sign( el[i] ); + } + else + { + d1 += 1 - 0.7f * 0.92f * cosf( el[i] * PI_OVER_180 ) - sinf( fabsf( el[i] * PI_OVER_180 ) ) * 0.7f; + } + } + } + else + { + if ( bits[i] == 2 ) + { + d1 += 1 - cosf( el[i] * PI_OVER_180 ) * 0.7f; + } + else + { + d1 += 1; + } + } + d2 += 1 - sinf( el_av * PI_OVER_180 ) * sinf( el[i] * PI_OVER_180 ) - cosf( el[i] * PI_OVER_180 ) * cosf( el_av * PI_OVER_180 ) * cos_delta_phi_cb[total_bits - 9]; + } + } + + var_el = var( el, len ); + if ( var_el > 1300.0f ) + { + d2 = d1 + 0.1f; + } + + *p_d1 = d1; + *p_d2 = d2; + + return; +} + + +/*-------------------------------------------------------------------* + * write_ec_direction() + * + * write metadata using entropy encoding + *-------------------------------------------------------------------*/ + +/* !r: number of bits written */ +static ivas_error write_ec_direction( + int16_t *num_bits_written, /* o : Number of bits written */ + BSTR_ENC_HANDLE hMetaData, /* i : MASA metadata structure */ + IVAS_QDIRECTION *qdirection, /* i : quantized directional info */ + const int16_t j_idx, /* i : index of subband to encode and write */ + const int16_t len, /* i : number of tiles */ + const int16_t GR_ord_elevation, /* i : GR order for elevation encoding */ + const int16_t GR_ord_azimuth, /* i : GR order for azimuth encoding */ + const int16_t use_context, /* i : flag for context usiage in azimuth encoding */ + const int16_t same /* i : flag if elevation indexes are the same or not */ +) +{ + int16_t i, nbits, bits_crt, nr_NO_INDEX; + uint16_t data; + int16_t min_val, max_val; + + nr_NO_INDEX = 0; + + nbits = 0; + + /* write elevation */ + for ( i = 0; i < len; i++ ) + { + data = qdirection->band_data[j_idx].elevation_index[i]; + if ( ( data == MASA_NO_INDEX ) || ( qdirection->band_data[j_idx].bits_sph_idx[i] == 0 ) ) + { + nr_NO_INDEX += 1; + } + } + + if ( nr_NO_INDEX < len ) + { + if ( same == 1 ) + { + push_next_indice( hMetaData, 1, 1 ); + nbits += 1; + push_next_indice( hMetaData, qdirection->band_data[j_idx].elevation_index[0], 2 ); + nbits += 2; + } + else + { + push_next_indice( hMetaData, 0, 1 ); + nbits += 1; + + push_next_indice( hMetaData, 1 - ( GR_ord_elevation == MASA_GR_ORD_EL ), 1 ); + nbits += 1; + + for ( i = 0; i < len; i++ ) + { + data = qdirection->band_data[j_idx].elevation_index[i]; + if ( data < MASA_NO_INDEX ) + { + bits_crt = hMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].elevation_m_alphabet[i], GR_ord_elevation ); + nbits += hMetaData->nb_bits_tot - bits_crt; + } + } + } + } + + /* write azimuth */ + if ( use_context < 0 ) + { + if ( use_context == -1 ) + { + /* regular GR coding */ + push_next_indice( hMetaData, 0, 1 ); + nbits += 1; + push_next_indice( hMetaData, 1 - ( GR_ord_azimuth == MASA_GR_ORD_AZ ), 1 ); + nbits += 1; + + for ( i = 0; i < len; i++ ) + { + data = qdirection->band_data[j_idx].azimuth_index[i]; + if ( data < MASA_NO_INDEX ) + { + bits_crt = hMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], GR_ord_azimuth ); + nbits += hMetaData->nb_bits_tot - bits_crt; + } + } + } + else if ( use_context == -2 ) + { + /* min removed GR coding */ + push_next_indice( hMetaData, 1, 1 ); + nbits += 1; + push_next_indice( hMetaData, 1 - ( GR_ord_azimuth == MASA_GR_ORD_AZ - 1 ), 1 ); + nbits += 1; + + /* find min */ + min_val = MASA_NO_INDEX; + for ( i = 0; i < len; i++ ) + { + if ( qdirection->band_data[j_idx].azimuth_index[i] < min_val ) + { + min_val = qdirection->band_data[j_idx].azimuth_index[i]; + } + } + +#ifdef DEBUGGING + if ( min_val == MASA_NO_INDEX ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "No azimuth data to be coded in write_ec_direction()" ); + } +#endif + + /* write min*/ + bits_crt = hMetaData->nb_bits_tot; + maximum_s( qdirection->band_data[j_idx].azimuth_m_alphabet, len, &max_val ); + ivas_qmetadata_encode_extended_gr( hMetaData, min_val, max_val, MASA_GR_ORD_AZ ); + nbits += hMetaData->nb_bits_tot - bits_crt; + + for ( i = 0; i < len; i++ ) + { + data = qdirection->band_data[j_idx].azimuth_index[i] - min_val; + if ( data < MASA_NO_INDEX - min_val ) + { + bits_crt = hMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], GR_ord_azimuth ); + nbits += hMetaData->nb_bits_tot - bits_crt; + } + } + } +#ifdef DEBUGGING + else + { + if ( use_context != -3 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Wrong use_context value in write_ec_direction()" ); + } + } +#endif + } + else + { + for ( i = 0; i < len; i++ ) + { + data = qdirection->band_data[j_idx].azimuth_index[i]; + if ( data < MASA_NO_INDEX ) + { + switch ( qdirection->band_data[j_idx].bits_sph_idx[i] ) + { + case 0: + break; + case 1: + nbits += 1; + push_next_indice( hMetaData, data, 1 ); + break; + case 2: + bits_crt = hMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], MASA_GR_ORD_AZ - 1 ); + nbits += hMetaData->nb_bits_tot - bits_crt; + break; + default: + bits_crt = hMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], MASA_GR_ORD_AZ ); + nbits += hMetaData->nb_bits_tot - bits_crt; + break; + } + } + } + } + + *num_bits_written = nbits; + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * Local functions (coherence Q and coding) + *-----------------------------------------------------------------------*/ + +/* !r: index */ +static uint64_t create_combined_index( + uint16_t *idx_dct, /* i : indexes to combine */ + const int16_t len, /* i : number of indexes */ + const int16_t *no_cb_vec /* i : how many codewords for each position */ +) +{ + int16_t i; + uint64_t idx, base; + + base = 1; + idx = 0; + for ( i = 0; i < len; i++ ) + { + idx += base * idx_dct[i]; + base *= no_cb_vec[i]; + } + + return idx; +} + + +/*-----------------------------------------------------------------------* + * encoding DCT0 coeffs with joint index + *-----------------------------------------------------------------------*/ + +/* !r: number of bits written */ +static int16_t encode_coherence_indexesDCT0( + uint16_t *idx_dct, /* i : indexes to be encoded */ + const int16_t len, /* i : number of indexes */ + int16_t *no_cb_vec, /* i : number of codewords for each position */ + BSTR_ENC_HANDLE hMetaData, + int16_t indice_coherence, + const int16_t nbits, + const int16_t nbits1 ) +{ + int16_t i; + uint64_t idx; + int16_t no_idx16; + int16_t k; + int16_t half_len, j; + uint64_t idx1; + + /* calculate bits for dct0 components with joint encoding */ + if ( nbits1 > 0 ) + { + half_len = len / 2; + idx = create_combined_index( idx_dct, half_len, no_cb_vec ); + idx1 = create_combined_index( &idx_dct[half_len], half_len, &no_cb_vec[half_len] ); + } + else + { + idx = create_combined_index( idx_dct, len, no_cb_vec ); + idx1 = 0; + } + + if ( nbits % 16 == 0 ) + { + no_idx16 = nbits / 16; + } + else + { + no_idx16 = (int16_t) round_f( ( nbits / 16.0f + 0.5f ) ); + } + + k = nbits; + i = 0; + for ( i = 0; i < no_idx16 - 1; i++ ) + { + k -= 16; + hMetaData->ind_list[indice_coherence + i].value = ( ( idx >> k ) & 65535 ); /* 16 bits */ + } + hMetaData->ind_list[indice_coherence + i].value = ( idx & ( ( 1 << k ) - 1 ) ); + + if ( nbits1 > 0 ) + { + if ( nbits1 % 16 == 0 ) + { + no_idx16 = nbits1 / 16; + } + else + { + no_idx16 = (int16_t) round_f( ( nbits1 / 16.0f + 0.5f ) ); + } + + k = nbits1; + + for ( j = i + 1; j < no_idx16 + i; j++ ) + { + k -= 16; + hMetaData->ind_list[indice_coherence + j].value = ( ( idx1 >> k ) & 65535 ); /* 16 bits */ + } + hMetaData->ind_list[indice_coherence + j].value = ( idx1 & ( ( 1 << k ) - 1 ) ); + } + + return nbits + nbits1; +} + + +/*-------------------------------------------------------------------* + * coherence_coding_length() + * + * + *-------------------------------------------------------------------*/ + +static int16_t coherence_coding_length( + const uint16_t *idx_sur_coh_shift, + const uint8_t idx_shift_len, + const int16_t coding_subbands, + const int16_t *no_cv, + uint16_t *mr_idx, + int16_t *no_cv_shift, + int16_t *p_min_idx, + int16_t *GR_ord, + int16_t *nbits_fr, + int16_t *nbits_fr1 ) +{ + int16_t half_coding_subbands; + int16_t j; + int16_t nbits; + uint64_t no_cb; + int16_t min_idx; + + half_coding_subbands = 0; + + if ( sum_s( no_cv, coding_subbands ) > MASA_COH_LIMIT_2IDX ) + { +#ifdef DEBUGGING + assert( coding_subbands % 2 == 0 ); +#endif + no_cb = 1; + half_coding_subbands = coding_subbands / 2; + for ( j = 0; j < half_coding_subbands; j++ ) + { + no_cb *= no_cv[j]; + } + *nbits_fr = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + no_cb = 1; + for ( j = half_coding_subbands; j < coding_subbands; j++ ) + { + no_cb *= no_cv[j]; + } + *nbits_fr1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + } + else + { + no_cb = 1; + for ( j = 0; j < coding_subbands; j++ ) + { + no_cb *= no_cv[j]; + } + *nbits_fr = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + *nbits_fr1 = 0; + } + + + minimum_s( (const int16_t *) idx_sur_coh_shift, (int16_t) idx_shift_len, &min_idx ); + for ( j = 0; j < idx_shift_len; j++ ) + { + mr_idx[j] = idx_sur_coh_shift[j] - min_idx; + no_cv_shift[j] -= min_idx; + } + nbits = min_idx + 1 + GR_bits_new( mr_idx, no_cv_shift, idx_shift_len, *GR_ord, 1, GR_ord ); + *p_min_idx = min_idx; + + return nbits; +} + + +/*-------------------------------------------------------------------* + * encode_spread_coherence_1sf() + * + * Encoding spread coherence for 1 subframe bands + *-------------------------------------------------------------------*/ + +/* !r: number of bits written */ +static int16_t encode_spread_coherence_1sf( + IVAS_QMETADATA *q_metadata, /* i : quantized metadata */ + const int16_t idx_d, /* i : current direction index */ + BSTR_ENC_HANDLE hMasaMetaData /* i/o: metadata bitstream handle */ +) +{ + int16_t i, j; + int16_t idx_ER; + int16_t nbits, nbits_fr; + uint16_t idx_sp_coh[MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t mr_idx_sp_coh[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t GR_ord, bits_GR; + uint64_t idx; + int16_t no_idx16; + int16_t k; + int16_t no_cv[MASA_MAXIMUM_CODING_SUBBANDS]; + IVAS_QDIRECTION *q_direction; + int16_t half_coding_subbands, nbits_fr1; + uint64_t idx1; + uint8_t coding_subbands; + uint16_t idx_sp_coh_shift[MASA_MAXIMUM_CODING_SUBBANDS]; + uint8_t idx_shift; + int16_t max_val = 0, nbits_max; + int16_t extra_cv; + int16_t no_cv_shift[MASA_MAXIMUM_CODING_SUBBANDS], min_idx; + + coding_subbands = (uint8_t) ( q_metadata->q_direction[idx_d].cfg.nbands ); + q_direction = &( q_metadata->q_direction[idx_d] ); + nbits = 0; + GR_ord = 1; + idx_shift = 0; + + /* number of codevectors added dependent on number of subbands */ + extra_cv = coding_subbands / MASA_FACTOR_CV_COH; + for ( j = 0; j < coding_subbands; j++ ) + { + idx_ER = 7 - q_direction->band_data[j].energy_ratio_index_mod[0] + extra_cv; + if ( idx_ER > 0 ) + { + idx_sp_coh[j] = (uint16_t) roundf( q_direction->coherence_band_data[j].spread_coherence[0] / ( 255.0f / (float) idx_ER ) ); + q_direction->coherence_band_data[j].spread_coherence[0] = (uint8_t) roundf( idx_sp_coh[j] * ( 255.0f / (float) idx_ER ) ); + } + else + { + idx_sp_coh[j] = 0; + q_direction->coherence_band_data[j].spread_coherence[0] = 0; + } + no_cv[j] = idx_ER + 1; + + no_cv_shift[idx_shift] = no_cv[j]; + idx_sp_coh_shift[idx_shift++] = idx_sp_coh[j]; + } + + if ( sum_s( no_cv, coding_subbands ) == coding_subbands ) + { + return 0; + } + + nbits_max = 0; + if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) + { + j = maximum_s( (int16_t *) idx_sp_coh, coding_subbands, &max_val ); + for ( j = 0; j < coding_subbands; j++ ) + { + if ( no_cv[j] > max_val + 1 ) + { + no_cv[j] = max_val + 1; + } + } + nbits_max = MASA_MAX_NO_CV_SUR_COH - max_val + extra_cv; + } + + nbits = coherence_coding_length( idx_sp_coh_shift, idx_shift, coding_subbands, no_cv, + mr_idx_sp_coh, no_cv_shift, &min_idx, &GR_ord, &nbits_fr, &nbits_fr1 ); + half_coding_subbands = 0; + idx1 = 0; + + if ( nbits_fr + nbits_fr1 + nbits_max < nbits ) + { + /* write flag*/ + push_next_indice( hMasaMetaData, 0, 1 ); + + /* create combined index */ + nbits = nbits_fr + nbits_fr1 + 1; + + if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) + { + /* write max value*/ + bits_GR = hMasaMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMasaMetaData, MASA_MAX_NO_CV_SUR_COH - max_val - 1 + extra_cv, MASA_MAX_NO_CV_SUR_COH + extra_cv, 0 ); + nbits += hMasaMetaData->nb_bits_tot - bits_GR; + } + + if ( nbits_fr1 > 0 ) + { + half_coding_subbands = coding_subbands / 2; + idx = create_combined_index( idx_sp_coh, half_coding_subbands, no_cv ); + idx1 = create_combined_index( &idx_sp_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); + } + else + { + idx = create_combined_index( idx_sp_coh, coding_subbands, no_cv ); + } + + if ( nbits_fr % 16 == 0 ) + { + no_idx16 = nbits_fr / 16; + } + else + { + no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); + } + + /* write combined index */ + k = nbits_fr; + for ( i = 0; i < no_idx16 - 1; i++ ) + { + k -= 16; + push_next_indice( hMasaMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ + } + + push_next_indice( hMasaMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); + + if ( nbits_fr1 > 0 ) + { + if ( nbits_fr1 % 16 == 0 ) + { + no_idx16 = nbits_fr1 / 16; + } + else + { + no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); + } + + assert( no_idx16 <= 4 ); + + k = nbits_fr1; + for ( i = 0; i < no_idx16 - 1; i++ ) + { + k -= 16; + push_next_indice( hMasaMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ + } + push_next_indice( hMasaMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); + } + } + else + { + /* write flag */ + nbits = 1; + + /* write flag*/ + push_next_indice( hMasaMetaData, 1, 1 ); + + /* write GR_ord */ + push_next_indice( hMasaMetaData, GR_ord, 1 ); + nbits += 1; + + /* write the min */ + bits_GR = hMasaMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMasaMetaData, min_idx, MASA_MAX_NO_CV_SUR_COH + extra_cv, 0 ); + nbits += hMasaMetaData->nb_bits_tot - bits_GR; + + /* write GR data */ + for ( j = 0; j < idx_shift; j++ ) + { + bits_GR = hMasaMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMasaMetaData, mr_idx_sp_coh[j], no_cv_shift[j], GR_ord ); + nbits += hMasaMetaData->nb_bits_tot - bits_GR; + } + } + + return nbits; +} + + +/*-------------------------------------------------------------------* + * encode_surround_coherence() + * + * encoding surround coherence + *-------------------------------------------------------------------*/ + +/* !r: number of bits written */ +static int16_t encode_surround_coherence( + IVAS_QMETADATA *hQMetaData, /* i : quantized metadata */ + BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ +) +{ + int16_t i, j; + int16_t idx_ER; + int16_t nbits, nbits_fr; + uint16_t idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t mr_idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t GR_ord, bits_GR; + uint64_t idx; + int16_t no_idx16; + int16_t k; + int16_t no_cv[MASA_MAXIMUM_CODING_SUBBANDS]; + float error_ratio_surr; + IVAS_QDIRECTION *q_direction; + int16_t half_coding_subbands, nbits_fr1; + uint64_t idx1; + uint8_t coding_subbands; + int16_t all_coherence_zero; + uint16_t idx_sur_coh_shift[MASA_MAXIMUM_CODING_SUBBANDS]; + uint8_t idx_shift; + int16_t max_val = 0, nbits_max; + int16_t no_cv_shift[MASA_MAXIMUM_CODING_SUBBANDS], min_idx; + + coding_subbands = (uint8_t) ( hQMetaData->q_direction[0].cfg.nbands ); + all_coherence_zero = hQMetaData->all_coherence_zero; + q_direction = &( hQMetaData->q_direction[0] ); + nbits = 0; + + if ( all_coherence_zero == 1 ) + { + nbits = 0; + } + else + { + GR_ord = 1; + k = 0; + idx_shift = 0; + for ( j = 0; j < coding_subbands; j++ ) + { + if ( hQMetaData->no_directions == 2 ) + { + k += hQMetaData->twoDirBands[j]; + error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[max( k - 1, 0 )].energy_ratio[0] * hQMetaData->twoDirBands[j]; + } + else + { + error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0]; + } + + if ( error_ratio_surr <= 0 ) + { + error_ratio_surr = 0; + idx_sur_coh[j] = 0; + no_cv[j] = 1; + hQMetaData->surcoh_band_data[j].surround_coherence[0] = 0; /* sur_coherence_cb_masa[idx_cb_sur_coh_masa[DIRAC_DIFFUSE_LEVELS - 1] * MASA_MAX_NO_CV_SUR_COH]; */ + } + else + { + idx_ER = masa_sq( error_ratio_surr, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + + idx_sur_coh[j] = squant_int( hQMetaData->surcoh_band_data[j].surround_coherence[0], &hQMetaData->surcoh_band_data[j].surround_coherence[0], + &sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER] * MASA_MAX_NO_CV_SUR_COH], idx_cb_sur_coh_masa[idx_ER] + 2 ); + + no_cv[j] = idx_cb_sur_coh_masa[idx_ER] + 2; + no_cv_shift[idx_shift] = no_cv[j]; + idx_sur_coh_shift[idx_shift++] = idx_sur_coh[j]; + } + } + + if ( sum_s( no_cv, coding_subbands ) == coding_subbands ) + { + return 0; + } + + nbits_max = 0; + if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) + { + j = maximum_s( (int16_t *) idx_sur_coh, coding_subbands, &max_val ); + for ( j = 0; j < coding_subbands; j++ ) + { + if ( no_cv[j] > max_val + 1 ) + { + no_cv[j] = max_val + 1; + } + } + nbits_max = MASA_MAX_NO_CV_SUR_COH - max_val; /* encoded with GR0 as max_no_vals - no_vals*/ + } + + nbits = coherence_coding_length( idx_sur_coh_shift, idx_shift, coding_subbands, no_cv, + mr_idx_sur_coh, no_cv_shift, &min_idx, &GR_ord, &nbits_fr, &nbits_fr1 ); + half_coding_subbands = coding_subbands / 2; + idx1 = 0; + + /* should check how to encode the average - check distribution */ + if ( nbits_fr + nbits_fr1 + nbits_max < nbits ) + { + /* write flag*/ + push_next_indice( hMetaData, 0, 1 ); + + /* create combined index */ + nbits = nbits_fr + nbits_fr1 + 1; + if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) + { + /* write max value*/ + bits_GR = hMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMetaData, MASA_MAX_NO_CV_SUR_COH - max_val - 1, MASA_MAX_NO_CV_SUR_COH, 0 ); + nbits += hMetaData->nb_bits_tot - bits_GR; + } + + if ( nbits_fr1 > 0 ) + { + idx = create_combined_index( idx_sur_coh, half_coding_subbands, no_cv ); + idx1 = create_combined_index( &idx_sur_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); + } + else + { + idx = create_combined_index( idx_sur_coh, coding_subbands, no_cv ); + } + + if ( nbits_fr % 16 == 0 ) + { + no_idx16 = nbits_fr / 16; + } + else + { + no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); + } + + /* write combined index */ + k = nbits_fr; + for ( i = 0; i < no_idx16 - 1; i++ ) + { + k -= 16; + push_next_indice( hMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ + } + + push_next_indice( hMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); + + if ( nbits_fr1 > 0 ) + { + if ( nbits_fr1 % 16 == 0 ) + { + no_idx16 = nbits_fr1 / 16; + } + else + { + no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); + } + + assert( no_idx16 <= 4 ); + + k = nbits_fr1; + for ( i = 0; i < no_idx16 - 1; i++ ) + { + k -= 16; + push_next_indice( hMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ + } + + push_next_indice( hMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); + } + } + else + { + /* write flag */ + nbits = 1; + + /* write flag*/ + push_next_indice( hMetaData, 1, 1 ); + + /* write GR_ord */ + push_next_indice( hMetaData, GR_ord, 1 ); + nbits += 1; + + /* write the min */ + bits_GR = hMetaData->nb_bits_tot; + ivas_qmetadata_encode_extended_gr( hMetaData, min_idx, MASA_MAX_NO_CV_SUR_COH, 0 ); + nbits += hMetaData->nb_bits_tot - bits_GR; + + /* write GR data */ + for ( j = 0; j < idx_shift; j++ ) + { + bits_GR = hMetaData->nb_bits_tot; + + ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx_sur_coh[j], no_cv_shift[j], GR_ord ); + + nbits += hMetaData->nb_bits_tot - bits_GR; + } + } + } +#ifdef DEBUGGING + for ( i = 0; i < coding_subbands; i++ ) + { + for ( j = 1; j < q_direction->cfg.nblocks; j++ ) + { + hQMetaData->surcoh_band_data[i].surround_coherence[j] = hQMetaData->surcoh_band_data[i].surround_coherence[0]; + } + } +#endif + + return nbits; +} + + +/*-------------------------------------------------------------------* + * quantize_DCT_0_coh() + * + * quanization of DCT component of order zero for transformed coherence vector + *-------------------------------------------------------------------*/ + +/* !r: quantized value */ +static float quantize_DCT_0_coh( + const float x, /* i : input value */ + const int16_t j, /* i : subband index */ + const float *coherence_cb, /* i : coherence codebook */ + const float delta_var, /* i : azimuth variance threshold */ + const int16_t no_cb, /* i : maximum number of codewords */ + IVAS_QDIRECTION *q_direction, /* i : quantized metadata */ + uint16_t *idx_x, /* o : codewords index */ + int16_t *p_no_cb /* o : actual number of codewords dependent on energy ratio value */ +) +{ + float var_azi, xhat; + int16_t idx_sub_cb, idx; + + /* quantize first DCT component */ + var_azi = var( q_direction->band_data[j].azimuth, q_direction->cfg.nblocks ); + + if ( var_azi < delta_var ) + { + idx_sub_cb = no_cb * q_direction->band_data[j].energy_ratio_index[0]; + } + else + { + idx_sub_cb = no_cb * ( q_direction->band_data[j].energy_ratio_index[0] + DIRAC_DIFFUSE_LEVELS ); + } + + idx = squant( x, &xhat, &coherence_cb[idx_sub_cb], len_cb_dct0_masa[q_direction->band_data[j].energy_ratio_index[0]] ); + + *p_no_cb = len_cb_dct0_masa[q_direction->band_data[j].energy_ratio_index[0]]; + + *idx_x = idx; + + return xhat; +} + + +/*-------------------------------------------------------------------* + * encode_coherence_indexesDCT1() + * + * Encoding DCT1 coeffs with joint index or EC + *-------------------------------------------------------------------*/ + +/* !r: number of bits written */ +static int16_t encode_coherence_indexesDCT1( + uint16_t *idx_dct, /* i : data to be encoded */ + const int16_t len, /* i : number of data */ + BSTR_ENC_HANDLE hMetaData /* i : metadata handle */ +) +{ + int16_t i, nbits, GR_ord; + uint16_t av; + uint16_t mr_idx_dct[MASA_MAXIMUM_CODING_SUBBANDS]; + + GR_ord = 0; + nbits = 0; + + nbits = mean_removed_GR_new( idx_dct, MASA_NO_CV_COH1, len, 0, &GR_ord, &av, mr_idx_dct ); + + for ( i = 0; i < len; i++ ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx_dct[i], 2 * MASA_NO_CV_COH1, GR_ord ); + } + + nbits += len_huf_masa[av]; + + push_next_indice( hMetaData, huff_code_av_masa[av], len_huf_masa[av] ); + + return nbits; +} + + +/*-------------------------------------------------------------------* + * dct4_transform() + * + * 4D implementation of DCT transform + *-------------------------------------------------------------------*/ + +static void dct4_transform( + uint8_t *v, /* i : input 4D vector */ + float *dct_v /* o : output transformed vector */ +) +{ + float a, b, c, d; + + a = ( v[0] + v[3] ) / 256.0f; + b = ( v[1] + v[2] ) / 256.0f; + c = ( v[0] - v[3] ) / 256.0f; + d = ( v[1] - v[2] ) / 256.0f; + + dct_v[0] = 0.5f * ( a + b ); + dct_v[1] = 0.653281482438188f * c + 0.270598050073099f * d; + dct_v[2] = 0.5f * ( a - b ); + dct_v[3] = 0.270598050073099f * c - 0.653281482438188f * d; + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_qmetadata_quantize_coherence() + * + * + *-------------------------------------------------------------------*/ + +/* !r: number of bits written */ +static int16_t ivas_qmetadata_quantize_coherence( + IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata */ + const int16_t idx_d, /* i : current direction index */ + const int16_t all_coherence_zero, /* i : all coherence is zero - flag */ + BSTR_ENC_HANDLE hMetaData, /* i : metadata handle */ + const int16_t write_flag, /* i : flag to actually write the data or not */ + int16_t *indice_coherence ) +{ + int16_t j, k; + float dct_coh[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + uint16_t idx_dct[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t coding_subbands; + int16_t nbits; + uint64_t no_cb; + int16_t MASA_grouping[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t nbits1; + int16_t coding_subbands_0, d; + int16_t two_dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t no_cb_vec[MASA_MAXIMUM_CODING_SUBBANDS]; + IVAS_QDIRECTION *q_direction; + + q_direction = &( hQMetaData->q_direction[idx_d] ); + coding_subbands = q_direction->cfg.nbands; + nbits = 0; + + if ( all_coherence_zero == 1 ) + { + return nbits; + } + + if ( hQMetaData->q_direction[idx_d].cfg.nblocks == 1 ) + { + nbits = encode_spread_coherence_1sf( hQMetaData, idx_d, hMetaData ); + + return nbits; + } + else + { + k = 0; + no_cb = 1; + coding_subbands_0 = hQMetaData->q_direction[0].cfg.nbands; + if ( coding_subbands_0 <= 5 ) + { + for ( j = 0; j < 5; j++ ) + { + MASA_grouping[j] = j; + } + } + else + { + if ( coding_subbands_0 <= 8 ) + { + mvs2s( MASA_grouping_8_to_5, MASA_grouping, 8 ); + } + else if ( coding_subbands_0 <= 12 ) + { + mvs2s( MASA_grouping_12_to_5, MASA_grouping, 12 ); + } + else if ( coding_subbands_0 <= 18 ) + { + mvs2s( MASA_grouping_18_to_5, MASA_grouping, 18 ); + } + else + { + if ( coding_subbands_0 <= 24 ) + { + mvs2s( MASA_grouping_24_to_5, MASA_grouping, 24 ); + } + } + } + + if ( coding_subbands < coding_subbands_0 ) + { + d = 0; + for ( j = 0; j < coding_subbands_0; j++ ) + { + if ( hQMetaData->twoDirBands[j] == 1 ) + { + two_dir_band[d++] = j; + } + } + } + + for ( j = 0; j < coding_subbands; j++ ) + { + /* DCT transform */ + dct4_transform( hQMetaData->q_direction[idx_d].coherence_band_data[j].spread_coherence, dct_coh[j] ); + no_cb_vec[j] = len_cb_dct0_masa[q_direction->band_data[j].energy_ratio_index[0]]; + + if ( write_flag ) + { + /* quantize first DCT parameter */ + dct_coh[j][0] = quantize_DCT_0_coh( dct_coh[j][0], j, coherence_cb0_masa, MASA_DELTA_AZI_DCT0, MASA_NO_CV_COH, q_direction, &idx_dct[k], &no_cb_vec[j] ); + } + if ( coding_subbands < coding_subbands_0 ) + { + idx_dct[k + coding_subbands] = squant( dct_coh[j][1], &dct_coh[j][1], &coherence_cb1_masa[MASA_grouping[two_dir_band[j]] * MASA_NO_CV_COH1], MASA_NO_CV_COH1 ); + } + else + { + idx_dct[k + coding_subbands] = squant( dct_coh[j][1], &dct_coh[j][1], &coherence_cb1_masa[MASA_grouping[j] * MASA_NO_CV_COH1], MASA_NO_CV_COH1 ); + } + k++; + + dct_coh[j][2] = 0.0f; + dct_coh[j][3] = 0.0f; + } + + nbits1 = 0; + if ( sum_s( no_cb_vec, coding_subbands ) > MASA_COH_LIMIT_2IDX ) + { + /* make two indxes */ + no_cb = 1; +#ifdef DEBUGGING + assert( coding_subbands % 2 == 0 ); +#endif + + for ( j = 0; j < coding_subbands / 2; j++ ) + { + no_cb *= no_cb_vec[j]; + } + + nbits = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + no_cb = 1; + + for ( j = coding_subbands / 2; j < coding_subbands; j++ ) + { + no_cb *= no_cb_vec[j]; + } + nbits1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + } + else + { + no_cb = 1; + + for ( j = 0; j < coding_subbands; j++ ) + { + no_cb *= no_cb_vec[j]; + } + + nbits = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); + } + + if ( write_flag ) + { + for ( j = 0; j < coding_subbands; j++ ) + { + /* inverse DCT transform */ + invdct4_transform( dct_coh[j], q_direction->coherence_band_data[j].spread_coherence ); + } + + nbits = encode_coherence_indexesDCT0( idx_dct, coding_subbands, no_cb_vec, hMetaData, *indice_coherence, nbits, nbits1 ); + } + else + { + /* write dummy data now and save the position */ + *indice_coherence = hMetaData->next_ind; + k = nbits; + while ( k > 0 ) + { + push_next_indice( hMetaData, 0, min( 16, k ) ); + k -= 16; + } + + if ( nbits1 > 0 ) + { + k = nbits1; + while ( k > 0 ) + { + push_next_indice( hMetaData, 0, min( 16, k ) ); + k -= 16; + } + } + nbits += nbits1; + set_s( no_cb_vec, MASA_NO_CV_COH1, coding_subbands ); + nbits += encode_coherence_indexesDCT1( &idx_dct[coding_subbands], coding_subbands, hMetaData ); + + return nbits; + } + } + + return nbits; +} + + +/*-------------------------------------------------------------------* + * ivas_qmetadata_reorder_2dir_bands() + * + * Reorders metadata on 2dir bands such that direct-to-total ratio of first direction is + * always larger or equal to direct-to-total ratio of second direction. + *-------------------------------------------------------------------*/ + +static void ivas_qmetadata_reorder_2dir_bands( + IVAS_QMETADATA_HANDLE hQMetaData ) +{ + int16_t nbands; + int16_t nsubframes; + int16_t band, sf; + + nbands = hQMetaData->q_direction[0].cfg.nbands; + nsubframes = hQMetaData->q_direction[0].cfg.nblocks; + + for ( band = 0; band < nbands; band++ ) + { + if ( hQMetaData->twoDirBands[band] == 1 ) + { + if ( hQMetaData->q_direction[0].band_data[band].energy_ratio[0] < hQMetaData->q_direction[1].band_data[band].energy_ratio[0] ) + { + uint16_t uint16_tmp = 0; + float flt_tmp = 0; + uint8_t uint8_tmp = 0; + + for ( sf = 0; sf < nsubframes; sf++ ) + { + uint16_tmp = hQMetaData->q_direction[0].band_data[band].spherical_index[sf]; + hQMetaData->q_direction[0].band_data[band].spherical_index[sf] = hQMetaData->q_direction[1].band_data[band].spherical_index[sf]; + hQMetaData->q_direction[1].band_data[band].spherical_index[sf] = uint16_tmp; + + flt_tmp = hQMetaData->q_direction[0].band_data[band].azimuth[sf]; + hQMetaData->q_direction[0].band_data[band].azimuth[sf] = hQMetaData->q_direction[1].band_data[band].azimuth[sf]; + hQMetaData->q_direction[1].band_data[band].azimuth[sf] = flt_tmp; + + flt_tmp = hQMetaData->q_direction[0].band_data[band].elevation[sf]; + hQMetaData->q_direction[0].band_data[band].elevation[sf] = hQMetaData->q_direction[1].band_data[band].elevation[sf]; + hQMetaData->q_direction[1].band_data[band].elevation[sf] = flt_tmp; + + uint8_tmp = hQMetaData->q_direction[0].band_data[band].distance[sf]; + hQMetaData->q_direction[0].band_data[band].distance[sf] = hQMetaData->q_direction[1].band_data[band].distance[sf]; + hQMetaData->q_direction[1].band_data[band].distance[sf] = uint8_tmp; + + uint8_tmp = hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf]; + hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf]; + hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf] = uint8_tmp; + } + + flt_tmp = hQMetaData->q_direction[0].band_data[band].energy_ratio[0]; + hQMetaData->q_direction[0].band_data[band].energy_ratio[0] = hQMetaData->q_direction[1].band_data[band].energy_ratio[0]; + hQMetaData->q_direction[1].band_data[band].energy_ratio[0] = flt_tmp; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * write_2dir_info() + * + * + *-------------------------------------------------------------------*/ + +static int16_t write_2dir_info( + BSTR_ENC_HANDLE hMetaData, + uint8_t *twoDirBands, + const int16_t n, + const int16_t k ) +{ + int16_t nbits; + int16_t p[MASA_MAXIMUM_CODING_SUBBANDS]; + uint16_t dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; + int16_t i, j; + j = 0; + for ( i = 0; i < n; i++ ) + { + if ( twoDirBands[i] == 1 ) + { + p[j] = i; + j++; + } + } + dif_p[0] = p[0]; + for ( i = 1; i < j; i++ ) + { + dif_p[i] = p[i] - p[i - 1] - 1; + } + +#ifdef DEBUGGING + assert( k == j ); +#endif + j = hMetaData->nb_bits_tot; + for ( i = 0; i < k; i++ ) + { + ivas_qmetadata_encode_extended_gr( hMetaData, dif_p[i], 24, 0 ); + } + nbits = hMetaData->nb_bits_tot - j; + + return nbits; +} + + +static void transform_azimuth_dir2( + IVAS_QMETADATA_HANDLE hQMetaData, + int16_t *dir2_bands ) +{ + int16_t i, b; + + for ( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) + { + if ( hQMetaData->q_direction[0].band_data[dir2_bands[i]].energy_ratio_index[0] < 7 ) + { + /* transform azimuth */ + for ( b = 0; b < hQMetaData->q_direction[1].cfg.nblocks; b++ ) + { + hQMetaData->q_direction[1].band_data[i].azimuth[b] = hQMetaData->q_direction[1].band_data[i].azimuth[b] - hQMetaData->q_direction[0].band_data[dir2_bands[i]].azimuth[b] + 180; + if ( hQMetaData->q_direction[1].band_data[i].azimuth[b] >= 180 ) + { + hQMetaData->q_direction[1].band_data[i].azimuth[b] -= 360; + } + if ( hQMetaData->q_direction[1].band_data[i].azimuth[b] < -180 ) + { + hQMetaData->q_direction[1].band_data[i].azimuth[b] += 360; + } +#ifdef DEBUGGING + assert( hQMetaData->q_direction[1].band_data[i].azimuth[b] < 180 && hQMetaData->q_direction[1].band_data[i].azimuth[b] >= -180 ); +#endif + } + } + } + + return; +} + +#ifdef DEBUG_MODE_QMETADATA +/*------------------------------------------------------------------------- + * DEBUG function direction_distance() + * + *------------------------------------------------------------------------*/ + +static float direction_distance( + float elevation[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float azimuth[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + IVAS_QDIRECTION *q_direction, + const int16_t dim1, + const int16_t dim2, + float mat_dist[DIRAC_MAX_NBANDS][MAX_PARAM_SPATIAL_SUBFRAMES] ) +{ + float d; + int16_t i, j; + + d = 0; + for ( i = 0; i < dim1; i++ ) + { + for ( j = 0; j < dim2; j++ ) + { + mat_dist[i][j] = sinf( elevation[i][j] * PI_OVER_180 ) * sinf( q_direction->band_data[i].elevation[j] * PI_OVER_180 ) + + cosf( elevation[i][j] * PI_OVER_180 ) * cosf( q_direction->band_data[i].elevation[j] * PI_OVER_180 ) * cosf( ( azimuth[i][j] - q_direction->band_data[i].azimuth[j] ) * PI_OVER_180 ); + + d += fabsf( mat_dist[i][j] ); + } + } + + return d / (float) ( dim1 * dim2 ); +} +#endif diff --git a/lib_enc/ivas_qspherical_enc.c b/lib_enc/ivas_qspherical_enc.c new file mode 100644 index 0000000000..b8f889b472 --- /dev/null +++ b/lib_enc/ivas_qspherical_enc.c @@ -0,0 +1,644 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_enc.h" +#include "wmops.h" +#include "prot.h" + + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static float quantize_theta_phi( float *theta_cb, const int16_t no_th, const int16_t *no_phi_loc, const float abs_theta, int16_t *id_phi, int16_t *id_phi_remap, float *phi_hat, const float phi, const int16_t no_bits, int16_t *id_theta, float *phi_q, const int16_t remap, const MC_LS_SETUP mc_format ); + +static float direction_distance_cp( float theta, float theta_hat, float theta_hat1, const float phi, const float phi_hat, const float phi_hat1, float *d1 ); + +/*-------------------------------------------------------------------* + * quantize_direction_frame() + * + * + *----------------------------------------------------------------------*/ + +void quantize_direction_frame( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES] ) +{ + int16_t i, j; + int16_t idx; + + /* Quantize directions */ + q_direction->not_in_2D = 0; + for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + { + idx = q_direction->band_data[i].energy_ratio_index_mod[0]; + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + if ( azimuth_orig != NULL ) + { + azimuth_orig[i][j] = q_direction->band_data[i].azimuth[j]; + } + + if ( elevation_orig != NULL ) + { + elevation_orig[i][j] = q_direction->band_data[i].elevation[j]; + } + + /* requantize the direction */ + q_direction->band_data[i].spherical_index[j] = quantize_direction( q_direction->band_data[i].elevation[j], + q_direction->band_data[i].azimuth[j], + q_direction->band_data[i].bits_sph_idx[j], + &q_direction->band_data[i].elevation[j], + &q_direction->band_data[i].azimuth[j], &q_direction->band_data[i].elevation_index[j], + &q_direction->band_data[i].azimuth_index[j], + q_direction->cfg.mc_ls_setup ); + + q_direction->not_in_2D += q_direction->band_data[i].elevation_index[j]; + + if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + { + q_direction->band_data[i].elevation_m_alphabet[j] = no_theta_masa[bits_direction_masa[idx] - 3]; + q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[idx] - 1][q_direction->band_data[i].elevation_index[j]]; + } + else + { + q_direction->band_data[i].elevation_m_alphabet[j] = no_theta_masa[bits_direction_masa[idx] - 3] * 2 - 1; + q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[idx] - 1][( q_direction->band_data[i].elevation_index[j] + 1 ) >> 1]; + } + + if ( q_direction->band_data[i].azimuth_index[j] == MASA_NO_INDEX ) + { + q_direction->band_data[i].azimuth_index[j] = 0; + } + + if ( q_direction->band_data[i].bits_sph_idx[j] <= 2 ) + { + q_direction->band_data[i].elevation_index[j] = 0; + } + else + { + if ( q_direction->cfg.mc_ls_setup == MC_LS_SETUP_INVALID ) + { + /*deorder elevation indexing*/ + if ( ( q_direction->band_data[i].elevation_index[j] & 1 ) != 0 ) + { + q_direction->band_data[i].elevation_index[j] = ( ( q_direction->band_data[i].elevation_index[j] + 1 ) >> 1 ) + ( q_direction->band_data[i].elevation_m_alphabet[j] >> 1 ); + } + else + { + q_direction->band_data[i].elevation_index[j] = -( ( q_direction->band_data[i].elevation_index[j] ) >> 1 ) + ( q_direction->band_data[i].elevation_m_alphabet[j] >> 1 ); + } + } + } + } + } + + if ( q_direction->not_in_2D > 0 ) + { + q_direction->not_in_2D = 1 + MASA_LIMIT_2D; + } + + return; +} + +/*-------------------------------------------------------------------* + * quantize_direction_frame2D() + * + * + *----------------------------------------------------------------------*/ + +void quantize_direction_frame2D( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES] ) +{ + int16_t i, j; + int16_t idx; + + /* Quantize directions */ + q_direction->not_in_2D = 0; + for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + { + idx = q_direction->band_data[i].energy_ratio_index[0]; + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + if ( azimuth_orig != NULL ) + { + azimuth_orig[i][j] = q_direction->band_data[i].azimuth[j]; + } + if ( elevation_orig != NULL ) + { + elevation_orig[i][j] = q_direction->band_data[i].elevation[j]; + } + q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[idx] - 1][0]; + + /* requantize the direction */ + q_direction->band_data[i].spherical_index[j] = quantize_direction2D( q_direction->band_data[i].azimuth[j], + q_direction->band_data[i].azimuth_m_alphabet[j], + &q_direction->band_data[i].azimuth[j], + &q_direction->band_data[i].azimuth_index[j], + q_direction->cfg.mc_ls_setup ); + + q_direction->band_data[i].elevation_m_alphabet[j] = 1; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * small_requantize_direction_frame() + * + * + *----------------------------------------------------------------------*/ + +void small_requantize_direction_frame( + IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ + float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], + const int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], + int16_t bits_dir_bands[MASA_MAXIMUM_CODING_SUBBANDS], + int16_t *diff ) +{ + int16_t i, j; + uint16_t bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + + if ( ( *diff > 0 ) && ( q_direction->not_in_2D > 0 ) ) + { + for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + { + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + bits_dir[i][j] = q_direction->band_data[i].bits_sph_idx[j]; + } + } + + small_reduction_direction( q_direction, bits_dir, raw_flag, diff ); + + if ( *diff <= 0 ) + { + for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + { + if ( raw_flag[i] == 1 ) + { + bits_dir_bands[i] = 0; + for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + { + bits_dir_bands[i] += bits_dir[i][j]; + q_direction->band_data[i].bits_sph_idx[j] = bits_dir[i][j]; + + /* requantize the direction */ + q_direction->band_data[i].spherical_index[j] = quantize_direction( + elevation_orig[i][j], azimuth_orig[i][j], + q_direction->band_data[i].bits_sph_idx[j], + &q_direction->band_data[i].elevation[j], &q_direction->band_data[i].azimuth[j], + &q_direction->band_data[i].elevation_index[j], &q_direction->band_data[i].azimuth_index[j], + q_direction->cfg.mc_ls_setup ); + + if ( q_direction->band_data[i].azimuth_index[j] == MASA_NO_INDEX ) + { + q_direction->band_data[i].azimuth_index[j] = 0; + } + } + } + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * quantize_direction() + * + * + *----------------------------------------------------------------------*/ + +/*! r: quantized spherical index */ +uint16_t quantize_direction( + const float theta, /* i : input elevation value */ + float phi, /* i : input azimuth value */ + const int16_t no_bits, /* i : number of bits */ + float *theta_q, /* o : quantized elevation */ + float *phi_q, /* o : quantized azimuth */ + uint16_t *index_theta, /* o : quantized elevation index */ + uint16_t *index_phi, /* o : quantized azimuth index */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + float abs_theta, theta_hat, phi_hat; + int16_t i, sign_th; + int16_t cum_n[500]; + int16_t id_th, id_phi; + float theta_cb[MAX_NO_THETA]; + int16_t no_th; + uint16_t idx_sph; + int16_t id_phi_remap; + + if ( no_bits == 0 ) + { + *theta_q = 0; + *phi_q = 0; + *index_theta = MASA_NO_INDEX; + *index_phi = MASA_NO_INDEX; + return 0; + } + + if ( no_bits == 1 ) + { + *theta_q = 0; + *index_theta = MASA_NO_INDEX; + if ( ( phi < -90 ) || ( phi > 90 ) ) + { + *phi_q = -180; + *index_phi = 1; + + return 1; + } + else + { + *phi_q = 0; + *index_phi = 0; + + return 0; + } + } + + if ( no_bits == 2 ) + { + *theta_q = 0; + *index_theta = MASA_NO_INDEX; + if ( mc_format != MC_LS_SETUP_INVALID ) + { + id_phi = quantize_phi_chan_lbr( phi, &phi_hat, no_phi_masa[no_bits - 1][0] ); + phi_hat += 180; + idx_sph = id_phi; + *phi_q = phi_hat - 180; + id_phi_remap = id_phi; + *index_phi = id_phi_remap; + } + else + { + id_phi = quantize_phi( phi + 180, 0, &phi_hat, no_phi_masa[no_bits - 1][0] ); + idx_sph = id_phi; + *phi_q = phi_hat - 180; + id_phi_remap = ivas_qmetadata_reorder_generic( id_phi - ( no_phi_masa[no_bits - 1][0] >> 1 ) ); + *index_phi = id_phi_remap; + } + + return idx_sph; + } + + + no_th = no_theta_masa[no_bits - 3]; + + for ( i = 0; i < no_th; i++ ) + { + theta_cb[i] = i * delta_theta_masa[no_bits - 3]; + } + + if ( theta_cb[i - 1] > 90 ) + { + theta_cb[i - 1] = 90; + } + + phi = phi + 180; + + if ( theta < 0 ) + { + abs_theta = -theta; + sign_th = -1; + } + else + { + abs_theta = theta; + sign_th = 1; + } + + theta_hat = quantize_theta_phi( theta_cb, no_th, no_phi_masa[no_bits - 1], abs_theta, &id_phi, + &id_phi_remap, &phi_hat, phi, no_bits, &id_th, phi_q, 1, mc_format ); + + if ( mc_format != MC_LS_SETUP_INVALID ) + { + /* indexing only for upper hemisphere */ + cum_n[0] = no_phi_masa[no_bits - 1][0]; + for ( i = 1; i < no_th; i++ ) + { + cum_n[i] = cum_n[i - 1] + no_phi_masa[no_bits - 1][i]; + } + + if ( id_phi < MASA_NO_INDEX ) + { + if ( id_th == 0 ) + { + idx_sph = id_phi; + } + else + { + idx_sph = cum_n[id_th - 1] + id_phi; + } + } + else + { + if ( id_th == 0 ) + { + idx_sph = 0; + } + else + { + idx_sph = cum_n[id_th - 1]; + } + } + *theta_q = theta_hat; + if ( theta_hat == 90 ) + { + *phi_q = 0; + id_phi = MASA_NO_INDEX; + } + else + { + *phi_q = phi_hat - 180; + } + *index_theta = id_th; + *index_phi = id_phi_remap; + } + else + { + /* Starting from Equator, alternating positive and negative */ + cum_n[0] = no_phi_masa[no_bits - 1][0]; + for ( i = 1; i < no_th; i++ ) + { + cum_n[2 * i - 1] = cum_n[2 * i - 2] + no_phi_masa[no_bits - 1][i]; + cum_n[2 * i] = cum_n[2 * i - 1] + no_phi_masa[no_bits - 1][i]; + } + + if ( no_th > 0 ) + { + assert( abs( cum_n[2 * ( no_th - 1 )] ) < 32768 ); + } + + if ( id_th == 0 ) + { + if ( id_phi < MASA_NO_INDEX ) + { + idx_sph = id_phi; + } + else + { + idx_sph = 0; + } + } + else + { + if ( sign_th > 0 ) + { + if ( id_phi < MASA_NO_INDEX ) + { + idx_sph = cum_n[2 * id_th - 2] + id_phi; + } + else + { + idx_sph = cum_n[2 * id_th - 2]; + } + + id_th = 2 * id_th - 1; + } + else + { + if ( id_phi < MASA_NO_INDEX ) + { + idx_sph = cum_n[2 * id_th - 1] + id_phi; + } + else + { + idx_sph = cum_n[2 * id_th - 1]; + } + id_th = 2 * id_th; + } + } + + *theta_q = sign_th * theta_hat; + if ( theta_hat == 90 ) + { + *phi_q = 0; + id_phi = MASA_NO_INDEX; + } + else + { + *phi_q = phi_hat - 180; + } + + *index_theta = id_th; + *index_phi = id_phi_remap; + } + + return idx_sph; +} + +/*-------------------------------------------------------------------* + * direction_distance_cp() + * + * quantization distortion calculated on the sphere + *----------------------------------------------------------------------*/ + +/* !r: distortion value */ +static float direction_distance_cp( + float theta, /* i : elevation absolute value */ + float theta_hat, /* i : quantized elevation value in absolute value */ + float theta_hat1, /* i : quantized elevation value in absolute value */ + const float phi, /* i : azimuth value */ + const float phi_hat, /* i : quantized azimuth value */ + const float phi_hat1, /* i : quantized azimuth value */ + float *d1 ) +{ + float d, ct, st, st1, st2; + + theta *= PI_OVER_180; + theta_hat *= PI_OVER_180; + theta_hat1 *= PI_OVER_180; + st = sinf( theta ); + ct = cosf( theta ); + st1 = sinf( theta_hat ); + st2 = sinf( theta_hat1 ); + + d = st * st1 + ct * ( sqrtf( 1 - st1 * st1 ) ) * cosf( ( phi - phi_hat ) * PI_OVER_180 ); + *d1 = st * st2 + ct * ( sqrtf( 1 - st2 * st2 ) ) * cosf( ( phi - phi_hat1 ) * PI_OVER_180 ); + + return d; +} + + +/*-------------------------------------------------------------------* + * quantize_theta_phi() + * + * joint quantization of elevation and azimuth + *----------------------------------------------------------------------*/ + +/* !r: quantized elevation value */ +static float quantize_theta_phi( + float *theta_cb, /* i : elevation codebook */ + const int16_t no_th, /* i : elevation codebook size */ + const int16_t *no_phi_loc, /* i : number of azimuth values for each elevation codeword */ + const float abs_theta, /* i : absolute value of elevation to be quantized */ + int16_t *id_phi, /* o : azimuth index */ + int16_t *id_phi_remap, /* o : remapped azimuth index */ + float *phi_hat, /* o : quantized azimuth value */ + const float phi, /* i : input azimuth value; to be quantized */ + const int16_t no_bits, /* i : number of bits used for quantization */ + int16_t *id_theta, /* o : elevation index */ + float *phi_q, /* o : rotated quantized azimuth */ + const int16_t remap, /* i : flag for remapping */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + float theta_hat, theta_hat1, phi_hat1; + int16_t id_th, id_th1, id_th2, id_ph, id_ph1; + float d, d1; + + + id_th = (int16_t) ( abs_theta / delta_theta_masa[no_bits - 3] ); + if ( id_th >= no_th ) + { + id_th = no_th - 1; + } + theta_hat = theta_cb[id_th]; + if ( id_th < no_th - 1 ) + { + id_th += squant( abs_theta, &theta_hat, &theta_cb[id_th], 2 ); + } + + if ( no_th > 1 ) + { + if ( ( no_th < 6 ) && mc_format == MC_LS_SETUP_INVALID ) + { + + if ( id_th == 0 ) + { + id_th1 = 1; + } + else if ( id_th == no_th - 1 ) + { + id_th1 = no_th - 2; + } + else + { + id_th1 = id_th - 1; + id_th2 = id_th + 1; + + if ( fabsf( abs_theta - theta_cb[id_th1] ) > fabsf( abs_theta - theta_cb[id_th2] ) ) + { + id_th1 = id_th2; + } + } + } + else + { + id_th1 = id_th; + } + + if ( no_phi_loc[id_th] > 1 ) + { + /* Note: (id_th % 2 == 1) must be equal to id_th % 2 */ + if ( mc_format != MC_LS_SETUP_INVALID ) + { + id_ph = quantize_phi_chan_compand( phi, phi_hat, no_phi_loc[id_th], ( theta_cb[id_th] > MC_MASA_THR_ELEVATION ), mc_format ); + *id_phi_remap = id_ph; + } + else + { + id_ph = quantize_phi( phi, ( id_th % 2 == 1 ), phi_hat, no_phi_loc[id_th] ); + } + } + else + { + id_ph = MASA_NO_INDEX; + *id_phi_remap = MASA_NO_INDEX; + *phi_hat = 180; + *phi_q = 0; + } + + if ( ( no_phi_loc[id_th1] > 1 ) && ( id_ph < MASA_NO_INDEX ) && ( no_th < 6 ) && ( mc_format == MC_LS_SETUP_INVALID ) ) + { + theta_hat1 = theta_cb[id_th1]; + + id_ph1 = quantize_phi( phi, ( id_th1 % 2 == 1 ), &phi_hat1, no_phi_loc[id_th1] ); + + d = direction_distance_cp( abs_theta, theta_hat, theta_hat1, phi, *phi_hat, phi_hat1, &d1 ); + + if ( d1 > d ) + { + *phi_hat = phi_hat1; + id_ph = id_ph1; + theta_hat = theta_cb[id_th1]; + id_th = id_th1; + } + } + } + else + { + if ( mc_format != MC_LS_SETUP_INVALID ) + { + id_ph = quantize_phi_chan_compand( phi, phi_hat, no_phi_loc[id_th], 0, mc_format ); + *id_phi_remap = id_ph; + } + else + { + id_ph = quantize_phi( phi, ( id_th % 2 == 1 ), phi_hat, no_phi_loc[id_th] ); + } + } + + if ( remap ) + { + if ( id_ph < MASA_NO_INDEX ) + { + *id_phi_remap = ivas_qmetadata_reorder_generic( id_ph - ( no_phi_loc[id_th] >> 1 ) ); + } + } + else + { + *id_phi_remap = id_ph; + } + + *id_phi = id_ph; + *id_theta = id_th; + + return theta_hat; +} diff --git a/lib_enc/ivas_range_uni_enc.c b/lib_enc/ivas_range_uni_enc.c new file mode 100644 index 0000000000..be325d47bc --- /dev/null +++ b/lib_enc/ivas_range_uni_enc.c @@ -0,0 +1,365 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_stat_enc.h" +#include "cnst.h" +#include "rom_com.h" +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + + +/* + * After finalizing the range encoder, the produced bits are available in the + * rc_st_enc->byte_buffer member array. The bits are packed into bytes, MSB first, as + * byte_buffer[0].bit[7], ..., byte_buffer[0].bit[0], byte_buffer[1].bit[7], ... + * The last byte may contain less than 8 bits. The total bit count is returned + * by the rc_uni_enc_finish function but can also be computed afterwards as + * total_bit_count = (rc_st_enc->byte_count - 1) * 8 + rc_st_enc->last_byte_bit_count + */ + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void rc_uni_enc_shift( RangeUniEncState *rc_st_enc ); + + +/*-------------------------------------------------------------------* + * rc_uni_enc_init() + * + * Initalize the range encoder + *-------------------------------------------------------------------*/ + +void rc_uni_enc_init( + RangeUniEncState *rc_st_enc /* i/o: RC state handle */ +) +{ + rc_st_enc->rc_low = 0; + rc_st_enc->rc_range = 0xFFFFFFFF; + rc_st_enc->rc_cache = -1; + rc_st_enc->rc_carry = 0; + rc_st_enc->rc_carry_count = 0; + + rc_st_enc->byte_count = 0; + rc_st_enc->last_byte_bit_count = -1; + + return; +} + +/*-------------------------------------------------------------------* + * rc_uni_enc_encode_fast() + * + * Encode given cumulative frequency and frequency when total frequency is a power of 2 + *-------------------------------------------------------------------*/ + +void rc_uni_enc_encode_fast( + RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ + const uint16_t cum_freq, /* i : Cumulative frequency up to symbol */ + const uint16_t sym_freq, /* i : Symbol frequency */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +) +{ + uint32_t r, tmp; +#ifdef DEBUGGING + assert( tot_shift <= 16 ); +#endif + + r = rc_st_enc->rc_range >> tot_shift; + tmp = r * cum_freq; + + rc_st_enc->rc_low += tmp; + if ( rc_st_enc->rc_low < tmp ) + { + rc_st_enc->rc_carry = 1; + } + + rc_st_enc->rc_range = r * sym_freq; + + /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ + if ( rc_st_enc->rc_range < 0x01000000 ) + { + rc_st_enc->rc_range <<= 8; + rc_uni_enc_shift( rc_st_enc ); + if ( rc_st_enc->rc_range < 0x01000000 ) + { + rc_st_enc->rc_range <<= 8; + rc_uni_enc_shift( rc_st_enc ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * rc_uni_enc_encode_symbol_fastS() + * + * Encode an alphabet symbol when total frequency is a power of 2 + *-------------------------------------------------------------------*/ + +void rc_uni_enc_encode_symbol_fastS( + RangeUniEncState *rc_st_enc, /* i/o: Encoder state */ + const uint16_t symbol, /* i : Symbol to encode */ + const uint16_t cum_freq[], /* i : Cumulative frequency up to symbol */ + const uint16_t sym_freq[], /* i : Symbol frequency */ + const uint16_t tot_shift /* i : Total frequency as a power of 2 */ +) +{ + rc_uni_enc_encode_fast( rc_st_enc, cum_freq[symbol], sym_freq[symbol], tot_shift ); + + return; +} + + +/*-------------------------------------------------------------------* + * rc_uni_enc_finish() + * + * Finalize the range encoder + *-------------------------------------------------------------------*/ + +/*! r: Total number of bits produced */ +int16_t rc_uni_enc_finish( + RangeUniEncState *rc_st_enc /* i/o: RC state handle */ +) +{ + int16_t total_bit_count; + uint32_t val, mask; + int16_t bits; +#ifdef DEBUGGING + assert( rc_st_enc->rc_range >= 0x01000000 ); /* rc_range is normalized */ + assert( rc_st_enc->last_byte_bit_count == -1 ); /* make sure finalization was not done already */ +#endif + + /* floor(log2(x)) = floor(log2(x >> 24)) + 24, for any x >= 2 ^ 24 */ + /* 32 - floor(log2(y)) = norm_ul(y) + 1 = norm_l(y >> 24) - 22 */ + bits = norm_l( rc_st_enc->rc_range >> 24 ) - 22; /* bits = 32 - floor(log2(rc_range)) */ + /* completely equivalent with norm_ul(rc_st_enc->rc_range) + 1, but norm_l is faster */ + + bits++; /* conservative number of bits, because the decoder only has rc_range available */ + +#ifdef DEBUGGING + assert( ( bits >= 2 ) && ( bits <= 9 ) ); /* depends on rc_range, which is normalized */ +#endif + + mask = 0xFFFFFFFFu >> bits; + val = ( rc_st_enc->rc_low + mask ) & ~mask; + + if ( val < rc_st_enc->rc_low ) + { + rc_st_enc->rc_carry = 1; + } + + rc_st_enc->rc_low = val; + + while ( bits > 0 ) + { + rc_uni_enc_shift( rc_st_enc ); + bits -= 8; + } + + bits += 8; + + if ( rc_st_enc->rc_carry_count > 0 ) + { + /* rc_carry_count > 0, therefore the last call to rc_uni_enc_shift incremented rc_carry_count */ + if ( rc_st_enc->rc_cache >= 0 ) /* may actually be always true, but it is difficult to prove formally */ + { +#ifdef DEBUGGING + assert( rc_st_enc->byte_count < RANGE_UNI_BUFFER_BYTES_MAX ); +#endif + rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_cache + rc_st_enc->rc_carry ); + } + + while ( rc_st_enc->rc_carry_count > 1 ) + { +#ifdef DEBUGGING + assert( rc_st_enc->byte_count < RANGE_UNI_BUFFER_BYTES_MAX ); +#endif + rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_carry + 0xFF ); + rc_st_enc->rc_carry_count--; + } + /* pack the last 1 to 8 bits into the MSB of the last byte, with zero padding into the LSB */ +#ifdef DEBUGGING + assert( rc_st_enc->byte_count < RANGE_UNI_BUFFER_BYTES_MAX ); +#endif + rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( ( rc_st_enc->rc_carry + 0xFF ) & ( 0xFFu << ( 8 - bits ) ) ); + rc_st_enc->last_byte_bit_count = bits; + } + else + { + /* rc_carry_count == 0, therefore the last call to rc_uni_enc_shift wrote into rc_cache */ +#ifdef DEBUGGING + assert( rc_st_enc->rc_cache >= 0 ); +#endif + /* pack the last 1 to 8 bits into the MSB of the last byte, with zero padding into the LSB */ +#ifdef DEBUGGING + assert( rc_st_enc->byte_count < RANGE_UNI_BUFFER_BYTES_MAX ); +#endif + rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( ( rc_st_enc->rc_cache + rc_st_enc->rc_carry ) & ( 0xFFu << ( 8 - bits ) ) ); + rc_st_enc->last_byte_bit_count = bits; + } + +#ifdef DEBUGGING + assert( ( rc_st_enc->last_byte_bit_count >= 1 ) && ( rc_st_enc->last_byte_bit_count <= 8 ) ); + assert( rc_st_enc->byte_count >= 1 ); +#endif + + total_bit_count = ( ( rc_st_enc->byte_count - 1 ) << 3 ) + rc_st_enc->last_byte_bit_count; + +#ifdef DEBUGGING + assert( total_bit_count >= 2 ); +#endif + return total_bit_count; +} + + +/*-------------------------------------------------------------------* + * rc_uni_enc_virtual_finish() + * + * Get the total number of bits that would be produced by finalization + *-------------------------------------------------------------------*/ + +/*! r: Total number of bits produced */ +int16_t rc_uni_enc_virtual_finish( + RangeUniEncState *rc_st_enc /* i : RC state handle */ +) +{ +#ifdef DEBUGGING + assert( rc_st_enc->rc_range >= 0x01000000 ); /* rc_range is normalized */ + assert( rc_st_enc->last_byte_bit_count == -1 ); /* make sure finalization was not done already */ + assert( sizeof( rc_st_enc->rc_cache ) == 2 ); /* ensure the sign bit computation is correct */ +#endif + + /* + byte_count bytes have already been written to the byte_buffer array + 1 byte is pending if rc_cache >= 0, consisting of rc_cache or rc_cache + 1 + the pending byte bits are computed as 8 - 8 * ((uint16_t) rc_st_enc->rc_cache >> 15) + rc_carry_count bytes are pending, consisting of 0x00 or 0xFF + bits bits will be additionally written during the finalization procedure + bits is computed as norm_l(rc_st_enc->rc_range >> 24) - 21, as in rc_uni_enc_finish + */ + return ( ( rc_st_enc->byte_count + rc_st_enc->rc_carry_count ) << 3 ) + + norm_l( rc_st_enc->rc_range >> 24 ) - 13 - 8 * ( (uint16_t) rc_st_enc->rc_cache >> 15 ); +} + + +/*-------------------------------------------------------------------* + * rc_uni_enc_shift() + * + * Shift a byte out to bitstream (internal function) + *-------------------------------------------------------------------*/ + +static void rc_uni_enc_shift( + RangeUniEncState *rc_st_enc /* i/o: RC state handle */ +) +{ + if ( ( rc_st_enc->rc_low < 0xFF000000u ) || rc_st_enc->rc_carry ) + { + if ( rc_st_enc->rc_cache >= 0 ) + { +#ifdef DEBUGGING + assert( rc_st_enc->byte_count < RANGE_UNI_BUFFER_BYTES_MAX ); +#endif + rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_cache + rc_st_enc->rc_carry ); + } + + while ( rc_st_enc->rc_carry_count > 0 ) + { +#ifdef DEBUGGING + assert( rc_st_enc->byte_count < RANGE_UNI_BUFFER_BYTES_MAX ); +#endif + rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_carry + 0xFF ); + rc_st_enc->rc_carry_count--; + } + + rc_st_enc->rc_cache = (int16_t) ( rc_st_enc->rc_low >> 24 ); + rc_st_enc->rc_carry = 0; + } + else + { + rc_st_enc->rc_carry_count++; + } + + rc_st_enc->rc_low <<= 8; + + return; +} + + +/*-------------------------------------------------------------------* + * rc_uni_enc_encode_bits() + * + * Encode up to 16 bits with uniform probability + *-------------------------------------------------------------------*/ + +void rc_uni_enc_encode_bits( + RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ + const uint16_t value, /* i : Value to encode */ + const int16_t bits /* i : Number of bits */ +) +{ + uint32_t tmp; +#ifdef DEBUGGING + assert( bits <= 16 ); +#endif + + rc_st_enc->rc_range >>= bits; + tmp = rc_st_enc->rc_range * value; + + rc_st_enc->rc_low += tmp; + if ( rc_st_enc->rc_low < tmp ) + { + rc_st_enc->rc_carry = 1; + } + + /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ + if ( rc_st_enc->rc_range < 0x01000000 ) + { + rc_st_enc->rc_range <<= 8; + rc_uni_enc_shift( rc_st_enc ); + if ( rc_st_enc->rc_range < 0x01000000 ) + { + rc_st_enc->rc_range <<= 8; + rc_uni_enc_shift( rc_st_enc ); + } + } + + return; +} diff --git a/lib_enc/ivas_rom_enc.c b/lib_enc/ivas_rom_enc.c new file mode 100644 index 0000000000..783085fb86 --- /dev/null +++ b/lib_enc/ivas_rom_enc.c @@ -0,0 +1,878 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" +#include +#include "wmops.h" + +/* clang-format off */ + + +/*----------------------------------------------------------------------------------* +* Stereo classifiers ROM tables +*----------------------------------------------------------------------------------*/ + +/* UNCLR classifier in TD stereo: list of selected features */ +const int16_t unclr_isel_td[SIZE_UNCLR_ISEL_TD] = +{ + E_corrLagStats0, E_ica_instTargetGain, E_sum_prod, E_tdm_es_em, E_m_corrL_corrR, E_d_corrL_corrR, E_corrEst0, E_corrLagMax, E_corrEstMax, E_corrEst_ncorr +}; + +/* UNCLR classifier in TD stereo:: mean & scale for feature normalization */ +const float unclr_mean_td[SIZE_UNCLR_ISEL_TD] = +{ + 5.074380f, 4.997180f, 6.392375f, 1.542880f, 1.060308f, 7.301348f, 0.000628f, 38.998173f, 0.001354f, 0.588078f +}; + +const float unclr_scale_td[SIZE_UNCLR_ISEL_TD] = +{ + 42.281556f, 0.960498f, 1.846462f, 2.370811f, 0.738786f, 1.301314f, 0.001185f, 20.638149f, 0.009281f, 0.348742f +}; + +/* UNCLR classifier in TD stereo: classifier parameters for logistic regression */ +const float unclr_coef_td[SIZE_UNCLR_ISEL_TD] = +{ + -0.179304f, -2.443089f, -3.531498f, 1.439316f, 0.688796f, 2.913693f, 0.039382f, -0.040637f, -4.519369f, -0.438573f +}; + +/* UNCLR classifier in DFT stereo: list of selected features */ +const int16_t unclr_isel_dft[SIZE_UNCLR_ISEL_DFT] = +{ + E_gainILD, E_gainIPD, E_angle_rot, E_g_pred, E_cohSNR, E_d_prodL_prodR, E_sum_xcorr, E_xcorr_itd_value +}; + +/* UNCLR classifier in DFT stereo: mean & scale for normalization */ +const float unclr_mean_dft[SIZE_UNCLR_ISEL_DFT] = +{ + 0.424806f, -4.660972f, 0.537442f, 24.190099f, 35.192984f, 2.753954f, -3238.908177f, 0.287240f +}; + +const float unclr_scale_dft[SIZE_UNCLR_ISEL_DFT] = +{ + 0.338259f, 3.372571f, 0.545282f, 2.976819f, 73.266110f, 3.250287f, 278.725735f, 0.226197f +}; + +/* UNCLR classifier in DFT stereo: classifier parameters for logistic regression */ +const float unclr_coef_dft[SIZE_UNCLR_ISEL_DFT] = +{ + 0.457185f, -1.589460f, -0.349225f, -1.361723f, 4.198681f, 1.514662f, -0.822283f, -3.048849f +}; + +/* xtalk clasifier in TD stereo: list of selected features */ +const int16_t xtalk_isel_td[SIZE_XTALK_ISEL_TD] = +{ + E_d_clas, E_d_voicing, E_sum_d_LSF, E_d_lepsP_13, E_d_cor_map_sum, E_d_nchar, E_d_non_sta, E_d_sp_div, E_sum_prod, E_tdm_es_em, E_m_corrL_corrR, E_corrEst0, E_corrEst_ncorr, E_corrLagStats0, E_ica_corr_value0, E_diff_corrLM_corrRM, E_tdm_LT_es_em +}; + +const float xtalk_mean_td[SIZE_XTALK_ISEL_TD] = +{ + 0.597295f, 0.131934f, 1363.371521f, 0.638677f, 7.585252f, 0.154930f, 3.756674f, 0.586091f, + 6.652016f, 1.751437f, 0.691171f, 0.000635f, 0.706242f, 10.449559f, 0.001793f, 0.018677f, + -2.173592f, +}; + +const float xtalk_scale_td[SIZE_XTALK_ISEL_TD] = +{ + 1.135851f, 0.077901f, 492.796683f, 0.573300f, 5.836897f, 0.400097f, 4.251400f, 0.627058f, + 1.385744f, 1.849872f, 0.537935f, 0.001305f, 0.278421f, 63.178669f, 0.002675f, 0.657621f, + 2.104726f +}; + +const float xtalk_coef_td[SIZE_XTALK_ISEL_TD] = +{ + 0.056173f, 0.132854f, 0.101365f, -0.165130f, 0.032372f, 0.082887f, -0.074870f, 0.031933f, + 1.379376f, -1.570864f, -0.074181f, -0.068519f, 0.066952f, -0.016555f, -4.145916f, 0.003024f, + 0.553536f +}; + +const int16_t xtalk_isel_dft[SIZE_XTALK_ISEL_DFT] = +{ + E_clas, E_gainILD, E_gainIPD, E_angle_rot, E_g_pred, E_d_prodL_prodR, E_sum_xcorr, E_xcorr_itd_value, E_gphat_d_itd2, E_gphat_ratio_m1_m2, E_gphat_m2_m2 +}; + +const float xtalk_mean_dft[SIZE_XTALK_ISEL_DFT] = +{ + 1.852478f, 0.211747f, -3.253483f, 0.758069f, 23.766095f, 1.634010f, -3115.264805f, 0.423402f, + 14.629498f, 0.000570f, 0.011686f +}; + +const float xtalk_scale_dft[SIZE_XTALK_ISEL_DFT] = +{ + 1.507352f, 0.159956f, 2.497517f, 0.469123f, 2.825375f, 0.932028f, 261.555949f, 0.205413f, + 35.216496f, 0.001153f, 0.025744f +}; + +const float xtalk_coef_dft[SIZE_XTALK_ISEL_DFT] = +{ + -0.082911f, -0.057949f, 0.089754f, -0.167106f, 1.289470f, 0.054620f, 0.667244f, -0.358486f, + 0.032200f, 1.141818f, 1.824479f +}; + + +/*----------------------------------------------------------------------------------* + * Stereo IC-BWE ROM tables + *----------------------------------------------------------------------------------*/ + +const float icbwe_thr_TDM[7] = { -1.22828f, -1.55314f, -0.998893f, 0.856996f, 0.836244f, 0.872327f, 0.972167f }; +const float icbwe_thr_DFT[7] = { -1.19952f, -1.42293f, -1.074940f, -1.63089f, 0.889989f, 0.893530f, 0.975288f }; +const float icbwe_regressionValuesTDM[8] = { 0.104430f, 0.025943f, 0.50332f, 0.12767f, 0.80566f, 0.27640f, 0.98366f, 0.35556f }; +const float icbwe_regressionValuesDFT[8] = { 0.030371f, 0.155500f, 0.52510f, 0.10623f, 0.79167f, 0.23188f, 0.98325f, 0.00000f }; + + +/*----------------------------------------------------------------------------------* + * DFT stereo ROM tables + *----------------------------------------------------------------------------------*/ + +/* DFT stereo ITD ROM table */ +const int16_t itd_vad_band_tbl[STEREO_DFT_ITD_VAD_BAND_NUM+1] = +{ + 5, 8, 11, 16, 21, 26, 30, 37, 43, 51, 59, + 69, 80, 93, 107, 126, 147, 176, 211, 254, 320 +}; + +const int16_t ild_q[16] = +{ + 0,2,4,6,8,10,13,16,19,22,25,30,35,40,45,50 +}; + +/* table of values of the analysis window cross-correlation function at 32kHz (stride 8) */ +const float Wn_table[50] = +{ + 1.0000000f, 0.9992902f, 0.9975037f, 0.9948399f, 0.9914063f, 0.9872797f, 0.9825207f, 0.9771799f, + 0.9713015f, 0.9649245f, 0.9580846f, 0.9508143f, 0.9431443f, 0.9351030f, 0.9267174f, 0.9180131f, + 0.9090145f, 0.8997447f, 0.8902261f, 0.8804801f, 0.8705271f, 0.8603868f, 0.8500779f, 0.8396186f, + 0.8290262f, 0.8183170f, 0.8075067f, 0.7966103f, 0.7856416f, 0.7746140f, 0.7635394f, 0.7524292f, + 0.7412935f, 0.7301411f, 0.7189796f, 0.7078147f, 0.6966495f, 0.6854842f, 0.6743189f, 0.6631536f, + 0.6519884f, 0.6408231f, 0.6296578f, 0.6184926f, 0.6073273f, 0.5961620f, 0.5849968f, 0.5738315f, + 0.5626662f, 0.5515010f +}; + + +const float win_ana_8k[STEREO_DFT_OVL_8k] = { + 0.1059233f, 0.1834491f, 0.2367920f, 0.2801055f, 0.3175031f, 0.3508655f, 0.3812388f, 0.4092752f, 0.4354137f, 0.4599658f, 0.4831618f, 0.5051779f, 0.5261516f, 0.5461931f, + 0.5653920f, 0.5838222f, 0.6015455f, 0.6186141f, 0.6350726f, 0.6509591f, 0.6663070f, 0.6811452f, 0.6954990f, 0.7093909f, 0.7228406f, 0.7358659f, 0.7484825f, 0.7607045f, + 0.7725446f, 0.7840144f, 0.7951242f, 0.8058834f, 0.8163005f, 0.8263834f, 0.8361392f, 0.8455743f, 0.8546946f, 0.8635057f, 0.8720126f, 0.8802198f, 0.8881316f, 0.8957518f, + 0.9030841f, 0.9101318f, 0.9168978f, 0.9233852f, 0.9295963f, 0.9355338f, 0.9411997f, 0.9465961f, 0.9517249f, 0.9565878f, 0.9611865f, 0.9655225f, 0.9695970f, 0.9734113f, + 0.9769666f, 0.9802639f, 0.9833041f, 0.9860882f, 0.9886168f, 0.9908907f, 0.9929104f, 0.9946765f, 0.9961895f, 0.9974497f, 0.9984575f, 0.9992131f, 0.9997167f, 0.9999685f +}; + +const float win_ana_12k8[STEREO_DFT_OVL_12k8] = { + 0.0837402f, 0.1450376f, 0.1872304f, 0.2215122f, 0.2511383f, 0.2775984f, 0.3017218f, 0.3240268f, 0.3448624f, 0.3644768f, 0.3830541f, 0.4007353f, 0.4176308f, 0.4338293f, + 0.4494032f, 0.4644124f, 0.4789072f, 0.4929302f, 0.5065180f, 0.5197022f, 0.5325102f, 0.5449661f, 0.5570911f, 0.5689042f, 0.5804221f, 0.5916599f, 0.6026310f, 0.6133477f, + 0.6238210f, 0.6340610f, 0.6440769f, 0.6538770f, 0.6634690f, 0.6728599f, 0.6820563f, 0.6910641f, 0.6998889f, 0.7085358f, 0.7170096f, 0.7253147f, 0.7334552f, 0.7414351f, + 0.7492578f, 0.7569267f, 0.7644450f, 0.7718156f, 0.7790413f, 0.7861246f, 0.7930681f, 0.7998740f, 0.8065444f, 0.8130814f, 0.8194870f, 0.8257629f, 0.8319109f, 0.8379325f, + 0.8438293f, 0.8496028f, 0.8552543f, 0.8607852f, 0.8661966f, 0.8714897f, 0.8766657f, 0.8817256f, 0.8866704f, 0.8915011f, 0.8962185f, 0.9008235f, 0.9053169f, 0.9096996f, + 0.9139721f, 0.9181354f, 0.9221899f, 0.9261364f, 0.9299754f, 0.9337076f, 0.9373334f, 0.9408535f, 0.9442682f, 0.9475780f, 0.9507835f, 0.9538850f, 0.9568830f, 0.9597777f, + 0.9625697f, 0.9652591f, 0.9678465f, 0.9703319f, 0.9727159f, 0.9749986f, 0.9771802f, 0.9792612f, 0.9812416f, 0.9831216f, 0.9849016f, 0.9865817f, 0.9881621f, 0.9896429f, + 0.9910243f, 0.9923065f, 0.9934895f, 0.9945735f, 0.9955587f, 0.9964450f, 0.9972326f, 0.9979216f, 0.9985121f, 0.9990040f, 0.9993975f, 0.9996926f, 0.9998894f, 0.9999877f +}; + +const float win_ana_16k[STEREO_DFT_OVL_16k] = { + 0.0748996f, 0.1297273f, 0.1674702f, 0.1981409f, 0.2246518f, 0.2483359f, 0.2699355f, 0.2899147f, 0.3085859f, 0.3261718f, 0.3428373f, 0.3587088f, 0.3738855f, 0.3884471f, + 0.4024586f, 0.4159739f, 0.4290383f, 0.4416903f, 0.4539628f, 0.4658842f, 0.4774796f, 0.4887705f, 0.4997764f, 0.5105143f, 0.5209995f, 0.5312456f, 0.5412649f, 0.5510687f, + 0.5606670f, 0.5700690f, 0.5792832f, 0.5883171f, 0.5971780f, 0.6058722f, 0.6144058f, 0.6227843f, 0.6310130f, 0.6390964f, 0.6470392f, 0.6548454f, 0.6625189f, 0.6700633f, + 0.6774820f, 0.6847781f, 0.6919547f, 0.6990145f, 0.7059601f, 0.7127940f, 0.7195186f, 0.7261361f, 0.7326485f, 0.7390578f, 0.7453658f, 0.7515744f, 0.7576852f, 0.7636998f, + 0.7696197f, 0.7754464f, 0.7811811f, 0.7868252f, 0.7923800f, 0.7978465f, 0.8032260f, 0.8085194f, 0.8137279f, 0.8188523f, 0.8238936f, 0.8288528f, 0.8337305f, 0.8385278f, + 0.8432452f, 0.8478836f, 0.8524437f, 0.8569262f, 0.8613317f, 0.8656608f, 0.8699141f, 0.8740923f, 0.8781958f, 0.8822253f, 0.8861811f, 0.8900638f, 0.8938739f, 0.8976117f, + 0.9012778f, 0.9048726f, 0.9083963f, 0.9118496f, 0.9152326f, 0.9185457f, 0.9217893f, 0.9249638f, 0.9280693f, 0.9311063f, 0.9340749f, 0.9369756f, 0.9398085f, 0.9425739f, + 0.9452721f, 0.9479033f, 0.9504677f, 0.9529655f, 0.9553969f, 0.9577622f, 0.9600615f, 0.9622951f, 0.9644630f, 0.9665655f, 0.9686028f, 0.9705749f, 0.9724820f, 0.9743244f, + 0.9761020f, 0.9778151f, 0.9794637f, 0.9810480f, 0.9825681f, 0.9840241f, 0.9854162f, 0.9867443f, 0.9880086f, 0.9892091f, 0.9903460f, 0.9914194f, 0.9924292f, 0.9933757f, + 0.9942587f, 0.9950785f, 0.9958349f, 0.9965282f, 0.9971583f, 0.9977253f, 0.9982292f, 0.9986700f, 0.9990478f, 0.9993626f, 0.9996144f, 0.9998033f, 0.9999292f, 0.9999921f +}; + +const float win_ana_32k[STEREO_DFT_OVL_32k] = { + 0.0529622f, 0.0917327f, 0.1184251f, 0.1401203f, 0.1588781f, 0.1756418f, 0.1909367f, 0.2050914f, 0.2183273f, 0.2308022f, 0.2426331f, 0.2539096f, 0.2647024f, 0.2750681f, + 0.2850529f, 0.2946952f, 0.3040274f, 0.3130769f, 0.3218673f, 0.3304190f, 0.3387497f, 0.3468753f, 0.3548095f, 0.3625647f, 0.3701518f, 0.3775808f, 0.3848606f, 0.3919992f, + 0.3990041f, 0.4058820f, 0.4126390f, 0.4192807f, 0.4258123f, 0.4322386f, 0.4385641f, 0.4447928f, 0.4509286f, 0.4569750f, 0.4629354f, 0.4688128f, 0.4746101f, 0.4803301f, + 0.4859752f, 0.4915480f, 0.4970507f, 0.5024854f, 0.5078541f, 0.5131587f, 0.5184011f, 0.5235829f, 0.5287058f, 0.5337712f, 0.5387807f, 0.5437357f, 0.5486374f, 0.5534872f, + 0.5582862f, 0.5630356f, 0.5677365f, 0.5723899f, 0.5769968f, 0.5815583f, 0.5860751f, 0.5905483f, 0.5949786f, 0.5993669f, 0.6037139f, 0.6080204f, 0.6122871f, 0.6165148f, + 0.6207040f, 0.6248554f, 0.6289696f, 0.6330473f, 0.6370889f, 0.6410952f, 0.6450665f, 0.6490034f, 0.6529064f, 0.6567761f, 0.6606128f, 0.6644170f, 0.6681891f, 0.6719296f, + 0.6756389f, 0.6793174f, 0.6829654f, 0.6865834f, 0.6901716f, 0.6937305f, 0.6972603f, 0.7007615f, 0.7042343f, 0.7076790f, 0.7110959f, 0.7144854f, 0.7178476f, 0.7211830f, + 0.7244917f, 0.7277740f, 0.7310301f, 0.7342604f, 0.7374650f, 0.7406442f, 0.7437982f, 0.7469272f, 0.7500315f, 0.7531112f, 0.7561666f, 0.7591979f, 0.7622051f, 0.7651886f, + 0.7681486f, 0.7710851f, 0.7739984f, 0.7768886f, 0.7797560f, 0.7826006f, 0.7854226f, 0.7882223f, 0.7909996f, 0.7937548f, 0.7964881f, 0.7991995f, 0.8018892f, 0.8045574f, + 0.8072041f, 0.8098295f, 0.8124337f, 0.8150168f, 0.8175790f, 0.8201204f, 0.8226411f, 0.8251411f, 0.8276207f, 0.8300798f, 0.8325187f, 0.8349374f, 0.8373360f, 0.8397146f, + 0.8420733f, 0.8444122f, 0.8467314f, 0.8490310f, 0.8513110f, 0.8535716f, 0.8558128f, 0.8580348f, 0.8602375f, 0.8624211f, 0.8645856f, 0.8667312f, 0.8688579f, 0.8709657f, + 0.8730548f, 0.8751252f, 0.8771769f, 0.8792101f, 0.8812248f, 0.8832211f, 0.8851990f, 0.8871586f, 0.8891000f, 0.8910231f, 0.8929281f, 0.8948151f, 0.8966840f, 0.8985350f, + 0.9003680f, 0.9021832f, 0.9039805f, 0.9057601f, 0.9075220f, 0.9092663f, 0.9109928f, 0.9127019f, 0.9143934f, 0.9160674f, 0.9177239f, 0.9193631f, 0.9209849f, 0.9225894f, + 0.9241766f, 0.9257466f, 0.9272994f, 0.9288350f, 0.9303534f, 0.9318548f, 0.9333392f, 0.9348065f, 0.9362568f, 0.9376902f, 0.9391066f, 0.9405062f, 0.9418889f, 0.9432548f, + 0.9446039f, 0.9459362f, 0.9472518f, 0.9485506f, 0.9498328f, 0.9510983f, 0.9523472f, 0.9535795f, 0.9547953f, 0.9559944f, 0.9571771f, 0.9583432f, 0.9594929f, 0.9606261f, + 0.9617429f, 0.9628432f, 0.9639272f, 0.9649948f, 0.9660460f, 0.9670810f, 0.9680996f, 0.9691019f, 0.9700880f, 0.9710578f, 0.9720113f, 0.9729487f, 0.9738699f, 0.9747748f, + 0.9756637f, 0.9765363f, 0.9773929f, 0.9782333f, 0.9790576f, 0.9798658f, 0.9806580f, 0.9814341f, 0.9821941f, 0.9829381f, 0.9836661f, 0.9843781f, 0.9850741f, 0.9857542f, + 0.9864182f, 0.9870663f, 0.9876985f, 0.9883147f, 0.9889149f, 0.9894993f, 0.9900678f, 0.9906203f, 0.9911570f, 0.9916778f, 0.9921827f, 0.9926718f, 0.9931450f, 0.9936024f, + 0.9940439f, 0.9944696f, 0.9948794f, 0.9952735f, 0.9956517f, 0.9960142f, 0.9963608f, 0.9966916f, 0.9970067f, 0.9973060f, 0.9975895f, 0.9978572f, 0.9981091f, 0.9983453f, + 0.9985657f, 0.9987704f, 0.9989593f, 0.9991324f, 0.9992898f, 0.9994315f, 0.9995574f, 0.9996676f, 0.9997620f, 0.9998407f, 0.9999036f, 0.9999508f, 0.9999823f, 0.9999980f +}; + +const float win_ana_48k[STEREO_DFT_OVL_MAX] = { + 0.0432434f, 0.0748996f, 0.0966946f, 0.1144098f, 0.1297273f, 0.1434172f, 0.1559088f, 0.1674702f, 0.1782823f, 0.1884740f, 0.1981409f, 0.2073563f, 0.2161779f, 0.2246518f, + 0.2328160f, 0.2407019f, 0.2483359f, 0.2557404f, 0.2629347f, 0.2699355f, 0.2767575f, 0.2834135f, 0.2899147f, 0.2962713f, 0.3024923f, 0.3085859f, 0.3145594f, 0.3204193f, + 0.3261718f, 0.3318223f, 0.3373759f, 0.3428373f, 0.3482106f, 0.3534999f, 0.3587088f, 0.3638406f, 0.3688985f, 0.3738855f, 0.3788042f, 0.3836573f, 0.3884471f, 0.3931758f, + 0.3978457f, 0.4024586f, 0.4070164f, 0.4115210f, 0.4159739f, 0.4203768f, 0.4247311f, 0.4290383f, 0.4332998f, 0.4375167f, 0.4416903f, 0.4458218f, 0.4499123f, 0.4539628f, + 0.4579743f, 0.4619478f, 0.4658842f, 0.4697845f, 0.4736493f, 0.4774796f, 0.4812760f, 0.4850395f, 0.4887705f, 0.4924700f, 0.4961384f, 0.4997764f, 0.5033847f, 0.5069638f, + 0.5105143f, 0.5140367f, 0.5175316f, 0.5209995f, 0.5244408f, 0.5278560f, 0.5312456f, 0.5346100f, 0.5379496f, 0.5412649f, 0.5445563f, 0.5478241f, 0.5510687f, 0.5542905f, + 0.5574898f, 0.5606670f, 0.5638224f, 0.5669563f, 0.5700690f, 0.5731609f, 0.5762322f, 0.5792832f, 0.5823142f, 0.5853254f, 0.5883171f, 0.5912897f, 0.5942432f, 0.5971780f, + 0.6000943f, 0.6029923f, 0.6058722f, 0.6087343f, 0.6115788f, 0.6144058f, 0.6172156f, 0.6200084f, 0.6227843f, 0.6255436f, 0.6282864f, 0.6310130f, 0.6337234f, 0.6364178f, + 0.6390964f, 0.6417595f, 0.6444070f, 0.6470392f, 0.6496563f, 0.6522583f, 0.6548454f, 0.6574178f, 0.6599756f, 0.6625189f, 0.6650479f, 0.6675626f, 0.6700633f, 0.6725500f, + 0.6750229f, 0.6774820f, 0.6799275f, 0.6823595f, 0.6847781f, 0.6871835f, 0.6895756f, 0.6919547f, 0.6943208f, 0.6966740f, 0.6990145f, 0.7013422f, 0.7036574f, 0.7059601f, + 0.7082504f, 0.7105283f, 0.7127940f, 0.7150476f, 0.7172891f, 0.7195186f, 0.7217363f, 0.7239420f, 0.7261361f, 0.7283185f, 0.7304892f, 0.7326485f, 0.7347963f, 0.7369327f, + 0.7390578f, 0.7411716f, 0.7432743f, 0.7453658f, 0.7474463f, 0.7495159f, 0.7515744f, 0.7536222f, 0.7556591f, 0.7576852f, 0.7597007f, 0.7617056f, 0.7636998f, 0.7656836f, + 0.7676569f, 0.7696197f, 0.7715723f, 0.7735144f, 0.7754464f, 0.7773681f, 0.7792797f, 0.7811811f, 0.7830725f, 0.7849539f, 0.7868252f, 0.7886867f, 0.7905383f, 0.7923800f, + 0.7942119f, 0.7960341f, 0.7978465f, 0.7996493f, 0.8014424f, 0.8032260f, 0.8050000f, 0.8067644f, 0.8085194f, 0.8102650f, 0.8120011f, 0.8137279f, 0.8154453f, 0.8171534f, + 0.8188523f, 0.8205419f, 0.8222224f, 0.8238936f, 0.8255558f, 0.8272088f, 0.8288528f, 0.8304877f, 0.8321136f, 0.8337305f, 0.8353385f, 0.8369376f, 0.8385278f, 0.8401091f, + 0.8416815f, 0.8432452f, 0.8448001f, 0.8463462f, 0.8478836f, 0.8494123f, 0.8509324f, 0.8524437f, 0.8539465f, 0.8554406f, 0.8569262f, 0.8584032f, 0.8598717f, 0.8613317f, + 0.8627832f, 0.8642262f, 0.8656608f, 0.8670870f, 0.8685047f, 0.8699141f, 0.8713152f, 0.8727079f, 0.8740923f, 0.8754684f, 0.8768363f, 0.8781958f, 0.8795472f, 0.8808903f, + 0.8822253f, 0.8835520f, 0.8848706f, 0.8861811f, 0.8874834f, 0.8887777f, 0.8900638f, 0.8913419f, 0.8926119f, 0.8938739f, 0.8951278f, 0.8963738f, 0.8976117f, 0.8988417f, + 0.9000637f, 0.9012778f, 0.9024840f, 0.9036822f, 0.9048726f, 0.9060550f, 0.9072296f, 0.9083963f, 0.9095552f, 0.9107063f, 0.9118496f, 0.9129850f, 0.9141127f, 0.9152326f, + 0.9163447f, 0.9174491f, 0.9185457f, 0.9196346f, 0.9207158f, 0.9217893f, 0.9228551f, 0.9239133f, 0.9249638f, 0.9260066f, 0.9270418f, 0.9280693f, 0.9290892f, 0.9301015f, + 0.9311063f, 0.9321034f, 0.9330930f, 0.9340749f, 0.9350494f, 0.9360163f, 0.9369756f, 0.9379274f, 0.9388717f, 0.9398085f, 0.9407378f, 0.9416596f, 0.9425739f, 0.9434808f, + 0.9443802f, 0.9452721f, 0.9461566f, 0.9470337f, 0.9479033f, 0.9487655f, 0.9496203f, 0.9504677f, 0.9513076f, 0.9521402f, 0.9529655f, 0.9537833f, 0.9545938f, 0.9553969f, + 0.9561927f, 0.9569811f, 0.9577622f, 0.9585360f, 0.9593024f, 0.9600615f, 0.9608134f, 0.9615579f, 0.9622951f, 0.9630250f, 0.9637477f, 0.9644630f, 0.9651711f, 0.9658720f, + 0.9665655f, 0.9672519f, 0.9679309f, 0.9686028f, 0.9692674f, 0.9699247f, 0.9705749f, 0.9712178f, 0.9718535f, 0.9724820f, 0.9731033f, 0.9737175f, 0.9743244f, 0.9749241f, + 0.9755166f, 0.9761020f, 0.9766802f, 0.9772512f, 0.9778151f, 0.9783718f, 0.9789213f, 0.9794637f, 0.9799990f, 0.9805271f, 0.9810480f, 0.9815619f, 0.9820686f, 0.9825681f, + 0.9830606f, 0.9835459f, 0.9840241f, 0.9844953f, 0.9849593f, 0.9854162f, 0.9858660f, 0.9863087f, 0.9867443f, 0.9871728f, 0.9875942f, 0.9880086f, 0.9884158f, 0.9888160f, + 0.9892091f, 0.9895952f, 0.9899741f, 0.9903460f, 0.9907109f, 0.9910687f, 0.9914194f, 0.9917631f, 0.9920997f, 0.9924292f, 0.9927518f, 0.9930672f, 0.9933757f, 0.9936771f, + 0.9939714f, 0.9942587f, 0.9945390f, 0.9948122f, 0.9950785f, 0.9953376f, 0.9955898f, 0.9958349f, 0.9960730f, 0.9963041f, 0.9965282f, 0.9967453f, 0.9969553f, 0.9971583f, + 0.9973543f, 0.9975433f, 0.9977253f, 0.9979003f, 0.9980682f, 0.9982292f, 0.9983831f, 0.9985301f, 0.9986700f, 0.9988030f, 0.9989289f, 0.9990478f, 0.9991598f, 0.9992647f, + 0.9993626f, 0.9994536f, 0.9995375f, 0.9996144f, 0.9996844f, 0.9997473f, 0.9998033f, 0.9998523f, 0.9998942f, 0.9999292f, 0.9999572f, 0.9999781f, 0.9999921f, 0.9999991f +}; + +const float win_syn_8k[STEREO_DFT_OVL_8k] = { + 0.0011884f, 0.0061737f, 0.0132770f, 0.0219768f, 0.0320069f, 0.0431939f, 0.0554104f, 0.0685561f, 0.0825479f, 0.0973143f, 0.1127919f, 0.1289238f, 0.1456574f, 0.1629441f, + 0.1807378f, 0.1989949f, 0.2176735f, 0.2367334f, 0.2561357f, 0.2758425f, 0.2958170f, 0.3160233f, 0.3364260f, 0.3569906f, 0.3776832f, 0.3984704f, 0.4193193f, 0.4401978f, + 0.4610741f, 0.4819169f, 0.5026954f, 0.5233794f, 0.5439391f, 0.5643452f, 0.5845689f, 0.6045821f, 0.6243569f, 0.6438663f, 0.6630836f, 0.6819827f, 0.7005383f, 0.7187255f, + 0.7365200f, 0.7538984f, 0.7708375f, 0.7873153f, 0.8033101f, 0.8188011f, 0.8337681f, 0.8481918f, 0.8620536f, 0.8753355f, 0.8880206f, 0.9000925f, 0.9115358f, 0.9223360f, + 0.9324792f, 0.9419526f, 0.9507440f, 0.9588425f, 0.9662377f, 0.9729202f, 0.9788816f, 0.9841143f, 0.9886119f, 0.9923686f, 0.9953796f, 0.9976412f, 0.9991505f, 0.9999056f +}; + +const float win_syn_12k8[STEREO_DFT_OVL_12k8] = { + 0.0005872f, 0.0030510f, 0.0065634f, 0.0108691f, 0.0158394f, 0.0213920f, 0.0274676f, 0.0340207f, 0.0410145f, 0.0484183f, 0.0562057f, 0.0643536f, 0.0728413f, 0.0816501f, + 0.0907629f, 0.1001639f, 0.1098384f, 0.1197723f, 0.1299525f, 0.1403665f, 0.1510023f, 0.1618484f, 0.1728935f, 0.1841270f, 0.1955383f, 0.2071173f, 0.2188540f, 0.2307386f, + 0.2427616f, 0.2549137f, 0.2671857f, 0.2795684f, 0.2920531f, 0.3046309f, 0.3172931f, 0.3300312f, 0.3428367f, 0.3557012f, 0.3686166f, 0.3815746f, 0.3945671f, 0.4075861f, + 0.4206237f, 0.4336721f, 0.4467234f, 0.4597700f, 0.4728043f, 0.4858187f, 0.4988057f, 0.5117581f, 0.5246683f, 0.5375293f, 0.5503338f, 0.5630748f, 0.5757453f, 0.5883383f, + 0.6008469f, 0.6132645f, 0.6255843f, 0.6377997f, 0.6499043f, 0.6618916f, 0.6737551f, 0.6854888f, 0.6970865f, 0.7085420f, 0.7198494f, 0.7310029f, 0.7419966f, 0.7528248f, + 0.7634821f, 0.7739629f, 0.7842618f, 0.7943737f, 0.8042932f, 0.8140155f, 0.8235355f, 0.8328484f, 0.8419495f, 0.8508342f, 0.8594981f, 0.8679368f, 0.8761460f, 0.8841216f, + 0.8918596f, 0.8993562f, 0.9066077f, 0.9136103f, 0.9203606f, 0.9268553f, 0.9330910f, 0.9390648f, 0.9447737f, 0.9502148f, 0.9553854f, 0.9602830f, 0.9649051f, 0.9692495f, + 0.9733140f, 0.9770966f, 0.9805954f, 0.9838088f, 0.9867351f, 0.9893729f, 0.9917208f, 0.9937779f, 0.9955429f, 0.9970151f, 0.9981937f, 0.9990782f, 0.9996681f, 0.9999631f +}; + +const float win_syn_16k[STEREO_DFT_OVL_16k] = { + 0.0004202f, 0.0021832f, 0.0046969f, 0.0077790f, 0.0113378f, 0.0153150f, 0.0196689f, 0.0243675f, 0.0293852f, 0.0347008f, 0.0402962f, 0.0461558f, 0.0522656f, 0.0586132f, + 0.0651874f, 0.0719777f, 0.0789748f, 0.0861695f, 0.0935536f, 0.1011193f, 0.1088590f, 0.1167656f, 0.1248324f, 0.1330527f, 0.1414203f, 0.1499291f, 0.1585732f, 0.1673468f, + 0.1762443f, 0.1852603f, 0.1943895f, 0.2036266f, 0.2129665f, 0.2224042f, 0.2319348f, 0.2415533f, 0.2512551f, 0.2610353f, 0.2708893f, 0.2808125f, 0.2908003f, 0.3008483f, + 0.3109520f, 0.3211069f, 0.3313088f, 0.3415533f, 0.3518362f, 0.3621531f, 0.3724999f, 0.3828724f, 0.3932665f, 0.4036781f, 0.4141031f, 0.4245374f, 0.4349772f, 0.4454184f, + 0.4558570f, 0.4662892f, 0.4767110f, 0.4871187f, 0.4975085f, 0.5078764f, 0.5182189f, 0.5285321f, 0.5388124f, 0.5490561f, 0.5592596f, 0.5694193f, 0.5795316f, 0.5895930f, + 0.5996000f, 0.6095492f, 0.6194370f, 0.6292602f, 0.6390153f, 0.6486990f, 0.6583081f, 0.6678392f, 0.6772892f, 0.6866548f, 0.6959330f, 0.7051206f, 0.7142146f, 0.7232119f, + 0.7321095f, 0.7409045f, 0.7495941f, 0.7581752f, 0.7666451f, 0.7750011f, 0.7832403f, 0.7913601f, 0.7993578f, 0.8072309f, 0.8149767f, 0.8225927f, 0.8300765f, 0.8374257f, + 0.8446379f, 0.8517106f, 0.8586418f, 0.8654291f, 0.8720703f, 0.8785634f, 0.8849062f, 0.8910966f, 0.8971328f, 0.9030128f, 0.9087347f, 0.9142967f, 0.9196970f, 0.9249339f, + 0.9300057f, 0.9349108f, 0.9396477f, 0.9442148f, 0.9486107f, 0.9528340f, 0.9568834f, 0.9607576f, 0.9644553f, 0.9679754f, 0.9713168f, 0.9744784f, 0.9774592f, 0.9802583f, + 0.9828748f, 0.9853079f, 0.9875568f, 0.9896207f, 0.9914991f, 0.9931914f, 0.9946969f, 0.9960153f, 0.9971462f, 0.9980891f, 0.9988438f, 0.9994100f, 0.9997876f, 0.9999764f +}; + +const float win_syn_32k[STEREO_DFT_OVL_32k] = { + 0.0001486f, 0.0007719f, 0.0016609f, 0.0027511f, 0.0040104f, 0.0054186f, 0.0069609f, 0.0086267f, 0.0104070f, 0.0122948f, 0.0142840f, 0.0163696f, 0.0185470f, 0.0208123f, + 0.0231620f, 0.0255929f, 0.0281021f, 0.0306869f, 0.0333450f, 0.0360740f, 0.0388720f, 0.0417369f, 0.0446669f, 0.0476603f, 0.0507154f, 0.0538306f, 0.0570046f, 0.0602359f, + 0.0635232f, 0.0668651f, 0.0702604f, 0.0737080f, 0.0772066f, 0.0807552f, 0.0843527f, 0.0879981f, 0.0916903f, 0.0954283f, 0.0992113f, 0.1030382f, 0.1069082f, 0.1108203f, + 0.1147737f, 0.1187676f, 0.1228011f, 0.1268733f, 0.1309836f, 0.1351311f, 0.1393150f, 0.1435345f, 0.1477890f, 0.1520777f, 0.1563998f, 0.1607546f, 0.1651415f, 0.1695597f, + 0.1740086f, 0.1784874f, 0.1829955f, 0.1875322f, 0.1920969f, 0.1966888f, 0.2013075f, 0.2059521f, 0.2106222f, 0.2153170f, 0.2200359f, 0.2247784f, 0.2295437f, 0.2343314f, + 0.2391407f, 0.2439712f, 0.2488221f, 0.2536930f, 0.2585831f, 0.2634920f, 0.2684191f, 0.2733638f, 0.2783254f, 0.2833035f, 0.2882975f, 0.2933068f, 0.2983309f, 0.3033691f, + 0.3084211f, 0.3134861f, 0.3185636f, 0.3236532f, 0.3287542f, 0.3338661f, 0.3389884f, 0.3441206f, 0.3492621f, 0.3544124f, 0.3595709f, 0.3647371f, 0.3699106f, 0.3750908f, + 0.3802771f, 0.3854691f, 0.3906662f, 0.3958679f, 0.4010738f, 0.4062832f, 0.4114958f, 0.4167109f, 0.4219282f, 0.4271470f, 0.4323670f, 0.4375875f, 0.4428081f, 0.4480284f, + 0.4532478f, 0.4584658f, 0.4636819f, 0.4688957f, 0.4741067f, 0.4793144f, 0.4845184f, 0.4897180f, 0.4949129f, 0.5001027f, 0.5052867f, 0.5104646f, 0.5156359f, 0.5208001f, + 0.5259568f, 0.5311054f, 0.5362456f, 0.5413769f, 0.5464988f, 0.5516109f, 0.5567127f, 0.5618038f, 0.5668837f, 0.5719520f, 0.5770082f, 0.5820519f, 0.5870826f, 0.5921000f, + 0.5971036f, 0.6020929f, 0.6070675f, 0.6120270f, 0.6169710f, 0.6218990f, 0.6268107f, 0.6317055f, 0.6365831f, 0.6414431f, 0.6462850f, 0.6511084f, 0.6559130f, 0.6606983f, + 0.6654639f, 0.6702094f, 0.6749345f, 0.6796386f, 0.6843215f, 0.6889827f, 0.6936218f, 0.6982385f, 0.7028324f, 0.7074030f, 0.7119500f, 0.7164731f, 0.7209718f, 0.7254458f, + 0.7298946f, 0.7343180f, 0.7387156f, 0.7430869f, 0.7474317f, 0.7517496f, 0.7560402f, 0.7603032f, 0.7645382f, 0.7687449f, 0.7729229f, 0.7770719f, 0.7811916f, 0.7852815f, + 0.7893415f, 0.7933711f, 0.7973700f, 0.8013379f, 0.8052744f, 0.8091793f, 0.8130523f, 0.8168929f, 0.8207010f, 0.8244762f, 0.8282181f, 0.8319265f, 0.8356012f, 0.8392417f, + 0.8428478f, 0.8464192f, 0.8499556f, 0.8534568f, 0.8569224f, 0.8603522f, 0.8637459f, 0.8671032f, 0.8704238f, 0.8737076f, 0.8769541f, 0.8801632f, 0.8833347f, 0.8864681f, + 0.8895634f, 0.8926202f, 0.8956384f, 0.8986176f, 0.9015576f, 0.9044582f, 0.9073192f, 0.9101403f, 0.9129213f, 0.9156620f, 0.9183622f, 0.9210216f, 0.9236401f, 0.9262174f, + 0.9287533f, 0.9312477f, 0.9337003f, 0.9361109f, 0.9384793f, 0.9408054f, 0.9430890f, 0.9453299f, 0.9475279f, 0.9496828f, 0.9517945f, 0.9538628f, 0.9558875f, 0.9578684f, + 0.9598056f, 0.9616986f, 0.9635475f, 0.9653520f, 0.9671121f, 0.9688276f, 0.9704983f, 0.9721241f, 0.9737049f, 0.9752406f, 0.9767310f, 0.9781761f, 0.9795757f, 0.9809296f, + 0.9822379f, 0.9835003f, 0.9847169f, 0.9858874f, 0.9870119f, 0.9880901f, 0.9891221f, 0.9901077f, 0.9910470f, 0.9919397f, 0.9927858f, 0.9935853f, 0.9943381f, 0.9950441f, + 0.9957033f, 0.9963157f, 0.9968811f, 0.9973995f, 0.9978710f, 0.9982954f, 0.9986728f, 0.9990030f, 0.9992861f, 0.9995221f, 0.9997109f, 0.9998525f, 0.9999469f, 0.9999941f +}; + +const float win_syn_48k[STEREO_DFT_OVL_MAX] = { + 0.0000809f, 0.0004202f, 0.0009041f, 0.0014976f, 0.0021832f, 0.0029499f, 0.0037898f, 0.0046969f, 0.0056666f, 0.0066951f, 0.0077790f, 0.0089156f, 0.0101026f, 0.0113378f, + 0.0126194f, 0.0139456f, 0.0153150f, 0.0167262f, 0.0181779f, 0.0196689f, 0.0211982f, 0.0227647f, 0.0243675f, 0.0260057f, 0.0276785f, 0.0293852f, 0.0311249f, 0.0328970f, + 0.0347008f, 0.0365356f, 0.0384010f, 0.0402962f, 0.0422208f, 0.0441741f, 0.0461558f, 0.0481652f, 0.0502020f, 0.0522656f, 0.0543556f, 0.0564716f, 0.0586132f, 0.0607800f, + 0.0629715f, 0.0651874f, 0.0674273f, 0.0696909f, 0.0719777f, 0.0742876f, 0.0766200f, 0.0789748f, 0.0813515f, 0.0837498f, 0.0861695f, 0.0886102f, 0.0910717f, 0.0935536f, + 0.0960557f, 0.0985777f, 0.1011193f, 0.1036802f, 0.1062602f, 0.1088590f, 0.1114763f, 0.1141120f, 0.1167656f, 0.1194371f, 0.1221261f, 0.1248324f, 0.1275558f, 0.1302959f, + 0.1330527f, 0.1358259f, 0.1386151f, 0.1414203f, 0.1442412f, 0.1470775f, 0.1499291f, 0.1527957f, 0.1556771f, 0.1585732f, 0.1614836f, 0.1644082f, 0.1673468f, 0.1702991f, + 0.1732650f, 0.1762443f, 0.1792367f, 0.1822421f, 0.1852603f, 0.1882911f, 0.1913342f, 0.1943895f, 0.1974568f, 0.2005359f, 0.2036266f, 0.2067287f, 0.2098421f, 0.2129665f, + 0.2161018f, 0.2192478f, 0.2224042f, 0.2255710f, 0.2287479f, 0.2319348f, 0.2351314f, 0.2383377f, 0.2415533f, 0.2447782f, 0.2480122f, 0.2512551f, 0.2545067f, 0.2577668f, + 0.2610353f, 0.2643120f, 0.2675967f, 0.2708893f, 0.2741895f, 0.2774973f, 0.2808125f, 0.2841348f, 0.2874641f, 0.2908003f, 0.2941432f, 0.2974925f, 0.3008483f, 0.3042102f, + 0.3075781f, 0.3109520f, 0.3143315f, 0.3177165f, 0.3211069f, 0.3245026f, 0.3279032f, 0.3313088f, 0.3347191f, 0.3381340f, 0.3415533f, 0.3449769f, 0.3484045f, 0.3518362f, + 0.3552716f, 0.3587106f, 0.3621531f, 0.3655989f, 0.3690479f, 0.3724999f, 0.3759547f, 0.3794123f, 0.3828724f, 0.3863349f, 0.3897997f, 0.3932665f, 0.3967353f, 0.4002059f, + 0.4036781f, 0.4071518f, 0.4106268f, 0.4141031f, 0.4175804f, 0.4210585f, 0.4245374f, 0.4280170f, 0.4314969f, 0.4349772f, 0.4384576f, 0.4419381f, 0.4454184f, 0.4488984f, + 0.4523780f, 0.4558570f, 0.4593353f, 0.4628127f, 0.4662892f, 0.4697645f, 0.4732385f, 0.4767110f, 0.4801820f, 0.4836513f, 0.4871187f, 0.4905842f, 0.4940475f, 0.4975085f, + 0.5009671f, 0.5044231f, 0.5078764f, 0.5113269f, 0.5147745f, 0.5182189f, 0.5216601f, 0.5250979f, 0.5285321f, 0.5319627f, 0.5353895f, 0.5388124f, 0.5422312f, 0.5456458f, + 0.5490561f, 0.5524619f, 0.5558631f, 0.5592596f, 0.5626512f, 0.5660378f, 0.5694193f, 0.5727955f, 0.5761663f, 0.5795316f, 0.5828913f, 0.5862451f, 0.5895930f, 0.5929349f, + 0.5962706f, 0.5996000f, 0.6029230f, 0.6062395f, 0.6095492f, 0.6128521f, 0.6161481f, 0.6194370f, 0.6227188f, 0.6259932f, 0.6292602f, 0.6325196f, 0.6357714f, 0.6390153f, + 0.6422513f, 0.6454792f, 0.6486990f, 0.6519105f, 0.6551136f, 0.6583081f, 0.6614939f, 0.6646710f, 0.6678392f, 0.6709984f, 0.6741484f, 0.6772892f, 0.6804206f, 0.6835425f, + 0.6866548f, 0.6897574f, 0.6928502f, 0.6959330f, 0.6990058f, 0.7020683f, 0.7051206f, 0.7081625f, 0.7111939f, 0.7142146f, 0.7172246f, 0.7202237f, 0.7232119f, 0.7261890f, + 0.7291549f, 0.7321095f, 0.7350527f, 0.7379845f, 0.7409045f, 0.7438129f, 0.7467095f, 0.7495941f, 0.7524666f, 0.7553270f, 0.7581752f, 0.7610110f, 0.7638343f, 0.7666451f, + 0.7694432f, 0.7722286f, 0.7750011f, 0.7777606f, 0.7805070f, 0.7832403f, 0.7859603f, 0.7886669f, 0.7913601f, 0.7940397f, 0.7967056f, 0.7993578f, 0.8019961f, 0.8046205f, + 0.8072309f, 0.8098271f, 0.8124090f, 0.8149767f, 0.8175299f, 0.8200686f, 0.8225927f, 0.8251021f, 0.8275968f, 0.8300765f, 0.8325413f, 0.8349911f, 0.8374257f, 0.8398451f, + 0.8422492f, 0.8446379f, 0.8470110f, 0.8493687f, 0.8517106f, 0.8540369f, 0.8563473f, 0.8586418f, 0.8609203f, 0.8631828f, 0.8654291f, 0.8676592f, 0.8698729f, 0.8720703f, + 0.8742512f, 0.8764156f, 0.8785634f, 0.8806944f, 0.8828087f, 0.8849062f, 0.8869867f, 0.8890502f, 0.8910966f, 0.8931259f, 0.8951380f, 0.8971328f, 0.8991103f, 0.9010703f, + 0.9030128f, 0.9049378f, 0.9068451f, 0.9087347f, 0.9106066f, 0.9124606f, 0.9142967f, 0.9161149f, 0.9179150f, 0.9196970f, 0.9214609f, 0.9232065f, 0.9249339f, 0.9266429f, + 0.9283335f, 0.9300057f, 0.9316593f, 0.9332944f, 0.9349108f, 0.9365086f, 0.9380875f, 0.9396477f, 0.9411890f, 0.9427114f, 0.9442148f, 0.9456992f, 0.9471645f, 0.9486107f, + 0.9500377f, 0.9514455f, 0.9528340f, 0.9542032f, 0.9555530f, 0.9568834f, 0.9581944f, 0.9594858f, 0.9607576f, 0.9620098f, 0.9632424f, 0.9644553f, 0.9656485f, 0.9668219f, + 0.9679754f, 0.9691091f, 0.9702229f, 0.9713168f, 0.9723907f, 0.9734446f, 0.9744784f, 0.9754922f, 0.9764858f, 0.9774592f, 0.9784125f, 0.9793456f, 0.9802583f, 0.9811508f, + 0.9820230f, 0.9828748f, 0.9837063f, 0.9845173f, 0.9853079f, 0.9860780f, 0.9868277f, 0.9875568f, 0.9882653f, 0.9889533f, 0.9896207f, 0.9902675f, 0.9908936f, 0.9914991f, + 0.9920839f, 0.9926480f, 0.9931914f, 0.9937140f, 0.9942159f, 0.9946969f, 0.9951572f, 0.9955967f, 0.9960153f, 0.9964132f, 0.9967901f, 0.9971462f, 0.9974814f, 0.9977957f, + 0.9980891f, 0.9983616f, 0.9986131f, 0.9988438f, 0.9990535f, 0.9992422f, 0.9994100f, 0.9995568f, 0.9996827f, 0.9997876f, 0.9998715f, 0.9999344f, 0.9999764f, 0.9999974f +}; + +const float win_mdct_8k[STEREO_DFT_OVL_8k] = { + 0.0112197f, 0.0336536f, 0.0560704f, 0.0784591f, 0.1008082f, 0.1231066f, 0.1453430f, 0.1675062f, 0.1895851f, 0.2115685f, 0.2334454f, 0.2552047f, 0.2768355f, 0.2983269f, + 0.3196681f, 0.3408484f, 0.3618570f, 0.3826834f, 0.4033172f, 0.4237478f, 0.4439651f, 0.4639588f, 0.4837189f, 0.5032354f, 0.5224986f, 0.5414986f, 0.5602260f, 0.5786713f, + 0.5968252f, 0.6146786f, 0.6322225f, 0.6494480f, 0.6663466f, 0.6829096f, 0.6991287f, 0.7149958f, 0.7305029f, 0.7456422f, 0.7604060f, 0.7747869f, 0.7887777f, 0.8023713f, + 0.8155609f, 0.8283398f, 0.8407016f, 0.8526402f, 0.8641494f, 0.8752234f, 0.8858568f, 0.8960441f, 0.9057802f, 0.9150603f, 0.9238795f, 0.9322336f, 0.9401183f, 0.9475296f, + 0.9544637f, 0.9609173f, 0.9668870f, 0.9723699f, 0.9773632f, 0.9818643f, 0.9858710f, 0.9893813f, 0.9923935f, 0.9949059f, 0.9969173f, 0.9984268f, 0.9994336f, 0.9999371f +}; + + +/*----------------------------------------------------------------------------------* + * ECLVQ Stereo ROM tables + *----------------------------------------------------------------------------------*/ + +/* approximation table for log2(1 + x) in Q10 format, with x in [0, 1] in Q6 format */ +const int16_t log2_1px_table[65] = +{ + 0, 23, 45, 68, 90, 111, 132, 153, 174, 194, 214, 234, 254, 273, 292, 311, + 330, 348, 366, 384, 402, 419, 436, 454, 470, 487, 504, 520, 536, 552, 568, 584, + 599, 614, 629, 644, 659, 674, 689, 703, 717, 731, 745, 759, 773, 787, 800, 813, + 827, 840, 853, 866, 879, 891, 904, 916, 929, 941, 953, 965, 977, 989, 1001, 1012, + 1024 +}; + +/* table with log2(T(2 ^ param)), where T(x) = x * (exp(0.5 / x) - exp(-0.5 / x)), for param = -2 .. 10 */ +/* the last two entries present are zero, like all values for larger param values */ +const float log2TB[ECSQ_log2TB_SIZE] = +{ + 0.858721f, 0.232908f, 0.059619f, 0.014997f, 0.003755f, 0.000939f, 0.000235f, 0.000059f, 0.000015f, 0.000004f, 0.000001f, 0.000000f, 0.000000f +}; + +/* precomuputed table for log_2(factorial(i)), for i in {0, .., ECSQ_SEGMENT_SIZE} */ +const float ECSQ_log2_fact[1 + ECSQ_SEGMENT_SIZE] = +{ + 0.0000000f, 0.0000000f, 1.0000000f, 2.5849625f, 4.5849625f, 6.9068906f, 9.4918531f, 12.2992080f, 15.2992080f +}; + +const uint16_t ECSQ_tab_param[ECSQ_CONFIG_COUNT][1 + ECSQ_PARAM_COUNT] = +{ + { 16384, 15360, 14336, 13312, 12288, 11264, 10240, 9216, 8192, 7168, 6144, 5120, 4096, 3072, 2048, 1024, 0 }, /* un-optimized (reserved) */ + { 16384, 7090, 365, 171, 73, 38, 21, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0 }, /* 34 kbps target SNR */ + { 16384, 12134, 1602, 336, 53, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, /* 34 kbps target bits */ + { 16384, 7111, 487, 186, 73, 37, 20, 12, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, /* 44 kbps target SNR */ + { 16384, 11086, 1762, 628, 79, 31, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, /* 44 kbps target bits */ + { 16384, 6940, 633, 186, 74, 38, 21, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0 }, /* 56 kbps target SNR */ + { 16384, 10548, 1936, 774, 117, 41, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 } /* 56 kbps target bits */ +}; + +const uint16_t ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE] = +{ + { 16384, 9939, 3659, 1349, 499, 186, 71, 29, 14, 8, 6, 5, 4, 3, 2, 1, 0 }, /* param = 0 */ + { 16384, 12760, 7739, 4694, 2847, 1727, 1048, 636, 386, 234, 142, 86, 52, 32, 20, 12, 0 }, /* param = 1 */ + { 16384, 14459, 11261, 8770, 6830, 5319, 4142, 3226, 2512, 1956, 1523, 1186, 924, 720, 561, 437, 0 }, /* param = 2 */ + { 16384, 13583, 10578, 8238, 6416, 4997, 3892, 3031, 2361, 1839, 1432, 1115, 868, 676, 526, 410, 0 }, /* param = 3 */ + { 16384, 13165, 10253, 7985, 6219, 4843, 3772, 2938, 2288, 1782, 1388, 1081, 842, 656, 511, 398, 0 }, /* param = 4 */ + { 16384, 12961, 10094, 7861, 6122, 4768, 3713, 2891, 2251, 1753, 1365, 1063, 828, 645, 502, 391, 0 }, /* param = 5 */ + { 16384, 12860, 10015, 7800, 6075, 4731, 3685, 2870, 2235, 1741, 1356, 1056, 822, 640, 498, 388, 0 }, /* param = 6 */ + { 16384, 12810, 9976, 7769, 6050, 4712, 3670, 2858, 2226, 1734, 1351, 1052, 819, 638, 497, 387, 0 }, /* param = 7 */ + { 16384, 12785, 9957, 7754, 6039, 4703, 3663, 2853, 2222, 1731, 1348, 1050, 818, 637, 496, 386, 0 }, /* param = 8 */ + { 16384, 12772, 9947, 7747, 6033, 4699, 3660, 2851, 2221, 1730, 1348, 1050, 818, 637, 496, 386, 0 }, /* param = 9 */ + { 16384, 12766, 9942, 7743, 6030, 4696, 3657, 2848, 2218, 1727, 1345, 1047, 815, 635, 494, 385, 0 }, /* param = 10 */ + { 16384, 12763, 9940, 7741, 6029, 4695, 3656, 2847, 2217, 1726, 1344, 1046, 814, 634, 494, 385, 0 }, /* param = 11 */ + { 16384, 12761, 9938, 7740, 6028, 4695, 3657, 2848, 2218, 1727, 1345, 1047, 815, 635, 494, 385, 0 }, /* param = 12 */ + { 16384, 12761, 9938, 7740, 6028, 4695, 3657, 2848, 2218, 1727, 1345, 1047, 815, 635, 494, 385, 0 }, /* param = 13 */ + { 16384, 12761, 9938, 7740, 6028, 4695, 3657, 2848, 2218, 1727, 1345, 1047, 815, 635, 494, 385, 0 } /* param = 14 */ +}; + +/* table for uniform coding of absolute values in {0, +-1} */ +static const uint16_t ECSQ_tab_abs_1bit[1 + 2] = +{ + 16384, 10922, 0 +}; + +/* table for uniform coding of absolute values in {0, +-1, +-2, +-3} */ +static const uint16_t ECSQ_tab_abs_2bit[1 + 4] = +{ + 16384, 14046, 9364, 4682, 0 +}; + +/* table for uniform coding of absolute values in {0, +-1, ..., +-7} */ +static const uint16_t ECSQ_tab_abs_3bit[1 + 8] = +{ + 16384, 15288, 13104, 10920, 8736, 6552, 4368, 2184, 0 +}; + +/* table for uniform coding of absolute values in {0, +-1, ..., +-15} */ +static const uint16_t ECSQ_tab_abs_4bit[1 + 16] = +{ + 16384, 15870, 14812, 13754, 12696, 11638, 10580, 9522, 8464, 7406, 6348, 5290, 4232, 3174, 2116, 1058, 0 +}; + +/* array of tables for uniform coding of absolute values */ +const uint16_t * const ECSQ_tab_abs_lsbs[1 + 4] = +{ + NULL, ECSQ_tab_abs_1bit, ECSQ_tab_abs_2bit, ECSQ_tab_abs_3bit, ECSQ_tab_abs_4bit +}; + + +/*------------------------------------------------------------------------- + * Range Coder ROM tables + *------------------------------------------------------------------------*/ + +/* Bit-estimation table which maps entropy directly to the bit-demand */ +const float ari_bit_estimate_s17_LC[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = +{ + { 10.0f,9.0458f,7.2721f,7.5406f,9.1926f,8.1926f,6.8401f,7.0575f,7.625f,7.0458f,7.1671f,7.2858f,7.9776f,7.3418f,7.4454f,7.5571f,0.1254f }, + { 1.1465f,5.2088f,8.6077f,10.3f,1.9756f,4.6491f,7.8301f,10.093f,3.6624f,5.4416f,8.1671f,10.0f,5.0085f,6.3135f,8.8707f,10.541f,3.9312f }, + { 1.9092f,3.0465f,4.9804f,6.5571f,3.0349f,3.0256f,4.5758f,5.9447f,4.8528f,4.4843f,5.5283f,6.625f,6.3634f,5.71f,6.5002f,7.4764f,3.2048f }, + { 2.4711f,2.8785f,4.6803f,6.4226f,2.9366f,2.7019f,4.1189f,5.6381f,4.6713f,4.1022f,5.0782f,6.3065f,6.3205f,5.6206f,6.2996f,7.3276f,3.6513f }, + { 2.3766f,3.1655f,4.6917f,6.0931f,2.9542f,3.0458f,4.3816f,5.6163f,4.2468f,4.1846f,5.4647f,6.5488f,5.415f,5.2318f,6.3779f,7.3853f,3.1189f }, + { 3.7521f,3.5344f,4.6917f,5.8003f,3.686f,3.1483f,4.0604f,5.0458f,4.8915f,4.1655f,4.8151f,5.5991f,5.9944f,5.2056f,5.6557f,6.2926f,1.8304f }, + { 3.2195f,3.1219f,4.5304f,5.9666f,3.2577f,2.7997f,3.9583f,5.2552f,4.7031f,4.0342f,4.8427f,5.8656f,6.0871f,5.3135f,5.9179f,6.7332f,2.6206f }, + { 3.885f,3.3598f,4.4922f,5.776f,3.455f,2.8288f,3.7712f,4.9474f,4.5182f,3.8151f,4.5488f,5.5654f,5.7616f,5.0458f,5.612f,6.3634f,2.5162f }, + { 0.50765f,3.4282f,7.0458f,9.6077f,3.2145f,4.4454f,7.2858f,9.415f,6.4226f,6.9339f,8.9556f,10.83f,8.6424f,8.7905f,10.3f,11.678f,7.6077f }, + { 1.0294f,2.6786f,5.6646f,7.9776f,2.822f,3.3835f,5.7905f,7.7712f,5.7568f,5.8251f,7.5081f,9.142f,7.8503f,7.7521f,8.9556f,10.3f,6.0458f }, + { 4.2961f,3.7712f,4.6781f,5.6646f,3.9099f,3.2219f,3.9666f,4.8604f,4.8326f,4.059f,4.6013f,5.367f,5.8151f,4.986f,5.415f,6.0285f,1.7544f }, + { 1.4401f,2.4264f,5.4882f,7.9125f,2.5421f,2.9039f,5.3853f,7.5081f,5.6513f,5.4226f,6.902f,8.5081f,8.0458f,7.5081f,8.4764f,9.6781f,5.9072f }, + { 1.7918f,2.472f,4.6141f,6.4226f,2.9152f,2.8921f,4.5612f,6.1296f,5.2219f,4.8941f,6.0871f,7.3853f,6.9447f,6.5324f,7.4922f,8.5737f,4.432f }, + { 4.4589f,3.9804f,4.8604f,5.7332f,4.2154f,3.5222f,4.1846f,4.9179f,5.1639f,4.3543f,4.8102f,5.4075f,5.9944f,5.1545f,5.5202f,6.0342f,1.3503f }, + { 2.0498f,2.5298f,4.2269f,5.6381f,3.231f,3.0834f,4.317f,5.4647f,5.2056f,4.8176f,5.8102f,6.8102f,6.625f,6.2451f,7.0811f,7.8503f,3.4706f }, + { 2.5596f,2.6507f,4.6939f,6.5081f,2.7826f,2.5643f,4.1735f,5.8503f,4.8376f,4.2451f,5.2619f,6.5737f,6.5821f,5.8301f,6.5571f,7.5906f,3.9152f }, + { 5.1926f,4.5243f,5.1389f,5.7954f,4.6424f,3.8579f,4.3347f,4.9366f,5.2823f,4.4301f,4.7688f,5.2619f,5.9285f,5.0313f,5.3065f,5.7146f,1.1033f }, + { 14.0f,14.0f,3.3992f,4.5675f,14.0f,14.0f,3.7227f,4.7169f,3.6152f,3.8364f,4.5365f,5.3276f,4.7688f,4.8579f,5.3927f,6.0285f,1.2545f }, + { 2.7146f,2.7628f,4.6917f,6.5243f,2.8157f,2.5748f,4.2023f,5.8503f,4.7473f,4.2121f,5.317f,6.5991f,6.4531f,5.7568f,6.5488f,7.4922f,3.3734f }, + { 4.1529f,3.6546f,4.6381f,5.7332f,3.7485f,3.0976f,3.9165f,4.8993f,4.7285f,3.9735f,4.5906f,5.4188f,5.776f,4.9666f,5.4378f,6.1052f,1.9413f }, + { 2.6446f,3.1679f,4.8351f,6.2451f,3.1553f,2.9359f,4.2351f,5.5162f,4.7521f,4.1782f,5.0693f,6.1296f,6.0811f,5.3853f,6.0056f,6.8707f,2.6125f }, + { 0.54814f,3.1243f,7.4454f,10.83f,3.0509f,4.2755f,7.8503f,10.678f,7.0693f,7.5081f,9.8301f,12.0f,10.093f,10.093f,11.678f,13.0f,9.5406f }, + { 5.5162f,4.8759f,5.4608f,6.0113f,4.9972f,4.2154f,4.6403f,5.1296f,5.6034f,4.7285f,5.0142f,5.4188f,6.1608f,5.2285f,5.4764f,5.7954f,0.84076f }, + { 2.1963f,3.432f,5.2088f,6.3634f,3.2918f,3.2048f,4.5633f,5.7239f,4.9259f,4.4113f,5.2318f,6.142f,6.0634f,5.415f,6.1862f,6.8003f,2.3481f }, + { 14.0f,14.0f,4.6826f,5.3706f,14.0f,14.0f,4.6962f,5.2653f,4.7712f,4.793f,5.2023f,5.6601f,5.5041f,5.4188f,5.7426f,6.1358f,0.56889f }, + { 4.0796f,5.2585f,7.0811f,8.0931f,3.957f,4.5385f,6.1671f,7.2318f,4.9721f,5.1327f,6.4075f,7.3561f,5.6293f,5.6034f,6.6962f,7.4922f,0.64052f }, + { 0.64768f,3.3153f,6.4301f,8.7905f,3.0969f,4.0085f,6.5654f,8.5406f,5.9179f,6.2252f,8.0931f,9.7521f,7.8707f,7.9556f,9.415f,11.0f,6.625f }, + { 1.1906f,2.6747f,5.7954f,8.2451f,2.6513f,3.0999f,5.5529f,7.6601f,5.6871f,5.4608f,6.902f,8.415f,8.0693f,7.4764f,8.4454f,9.5406f,6.0634f }, + { 3.6579f,3.8707f,5.1514f,6.1296f,3.9874f,3.5874f,4.5122f,5.3779f,5.2451f,4.5447f,5.1113f,5.7239f,6.1113f,5.3205f,5.7426f,6.2056f,1.2965f }, + { 1.7247f,2.5344f,5.1327f,7.2858f,2.6441f,2.7748f,4.8126f,6.6871f,5.1959f,4.8226f,6.1052f,7.5737f,7.2721f,6.6781f,7.5081f,8.6781f,4.9666f }, + { 1.7643f,2.2939f,5.3347f,7.7332f,2.4701f,2.6753f,5.0811f,7.2186f,5.5821f,5.1894f,6.5654f,8.142f,7.9339f,7.2451f,8.142f,9.2451f,5.5949f }, + { 1.7909f,2.8483f,5.0142f,6.8401f,2.8164f,2.8681f,4.5821f,6.2384f,4.9366f,4.5324f,5.7008f,7.0342f,6.6962f,6.0931f,6.9776f,8.0458f,4.0634f }, + { 2.2845f,2.7019f,4.3982f,5.8553f,3.0909f,2.8649f,4.183f,5.5365f,4.9749f,4.4416f,5.4454f,6.4764f,6.4226f,5.9179f,6.6962f,7.625f,3.4706f }, + { 2.673f,2.755f,4.3871f,5.8251f,3.1475f,2.8114f,4.0961f,5.3816f,4.9583f,4.3761f,5.3454f,6.3634f,6.5406f,5.8707f,6.5162f,7.2996f,2.9468f }, + { 6.2926f,5.4764f,5.9179f,6.3706f,5.625f,4.7616f,5.0841f,5.4686f,6.1113f,5.2154f,5.4301f,5.7285f,6.5737f,5.6381f,5.8151f,6.0516f,0.55615f }, + { 2.9818f,2.856f,4.5263f,6.1798f,3.0021f,2.6098f,3.9461f,5.4301f,4.6359f,4.0242f,4.9232f,6.1358f,6.2518f,5.4922f,6.1735f,7.1052f,3.3798f }, + { 3.3391f,3.0774f,4.4922f,5.9666f,3.1616f,2.6702f,3.8364f,5.2154f,4.5571f,3.8669f,4.7239f,5.8759f,6.0056f,5.2121f,5.8915f,6.8003f,3.0321f }, + { 7.5243f,6.6077f,6.4764f,6.8604f,6.7521f,5.8201f,5.7664f,6.0752f,6.7905f,5.9393f,6.0991f,6.2996f,7.1545f,6.3205f,6.4226f,6.6077f,0.30358f }, + { 2.8954f,3.5895f,5.0901f,6.2186f,3.5263f,3.3048f,4.4378f,5.4454f,4.9502f,4.3048f,5.0458f,5.8656f,6.0227f,5.2186f,5.7954f,6.4454f,1.8335f }, + { 3.7473f,3.3734f,4.5675f,5.8102f,3.5091f,2.9205f,3.885f,5.0285f,4.6736f,3.9353f,4.6381f,5.5821f,5.8604f,5.0546f,5.5779f,6.3135f,2.2905f }, + { 0.37589f,3.7869f,7.5081f,10.193f,3.4696f,5.0056f,7.9556f,10.093f,6.7521f,7.4922f,9.6077f,11.415f,9.0f,9.2996f,11.0f,12.415f,8.142f }, + { 3.3752f,3.3454f,4.6781f,5.9339f,3.3752f,2.957f,4.0737f,5.2023f,4.6871f,4.0648f,4.8528f,5.8052f,5.8863f,5.1576f,5.7473f,6.5081f,2.2343f }, + { 4.7784f,4.1592f,4.8967f,5.7008f,4.2552f,3.5061f,4.0961f,4.8301f,4.9776f,4.1608f,4.6185f,5.2219f,5.7857f,4.9046f,5.2721f,5.7712f,1.4347f }, + { 0.82118f,2.7186f,5.6871f,7.8503f,3.1181f,3.8052f,6.1174f,7.9125f,6.2789f,6.3276f,7.9556f,9.415f,8.3853f,8.1926f,9.415f,10.678f,6.1798f }, + { 0.82664f,2.7456f,6.5821f,9.6781f,2.7509f,3.6141f,6.7054f,9.2451f,6.4686f,6.5906f,8.415f,10.415f,9.4764f,9.0458f,10.093f,11.415f,7.9556f }, + { 1.2706f,2.7658f,5.6293f,8.0227f,2.6304f,3.0796f,5.4531f,7.5571f,5.2687f,5.2121f,6.902f,8.5406f,7.3853f,7.0575f,8.2996f,9.4764f,5.3525f }, + { 1.1912f,2.3382f,5.0634f,7.0f,3.0306f,3.3716f,5.4264f,7.0811f,6.0693f,5.8503f,7.2056f,8.5406f,8.142f,7.7905f,8.8301f,9.8301f,5.3853f }, + { 1.6951f,2.632f,5.2552f,7.4608f,2.5965f,2.8102f,5.0113f,6.9447f,5.0752f,4.8326f,6.3489f,7.8915f,7.0342f,6.5906f,7.6424f,8.8707f,4.4882f }, + { 2.1385f,2.6613f,4.9072f,6.9232f,2.6753f,2.643f,4.5182f,6.3347f,4.8376f,4.455f,5.7712f,7.1926f,6.7332f,6.1671f,7.0811f,8.1671f,4.0429f }, + { 1.4562f,2.3043f,4.4378f,6.1862f,3.2501f,3.278f,4.902f,6.2926f,5.71f,5.4301f,6.6513f,7.6601f,7.5906f,7.0931f,8.0227f,8.8707f,4.5344f }, + { 2.4268f,2.8553f,4.7808f,6.5821f,2.8573f,2.706f,4.3048f,5.9393f,4.6917f,4.2485f,5.3135f,6.5906f,6.3853f,5.7054f,6.4922f,7.4454f,3.3798f }, + { 2.9909f,2.8843f,4.5222f,6.1235f,3.0538f,2.6928f,4.0342f,5.5002f,4.745f,4.1894f,5.1052f,6.2653f,6.3347f,5.5991f,6.3065f,7.1174f,2.8817f }, + { 1.7899f,2.3512f,4.1374f,5.5324f,3.4047f,3.251f,4.5243f,5.6917f,5.4843f,5.1608f,6.1052f,7.0342f,7.1296f,6.6513f,7.3853f,8.1671f,3.7344f }, + { 2.3396f,3.1798f,4.8028f,6.1671f,3.2277f,2.9686f,4.1766f,5.4378f,4.8077f,4.1782f,5.0285f,6.0227f,6.2121f,5.4339f,6.0693f,6.9339f,2.9125f }, + { 3.16f,2.9944f,4.3779f,5.5447f,3.555f,3.0656f,4.0357f,5.017f,5.1358f,4.4764f,5.1576f,5.9556f,6.4001f,5.6601f,6.142f,6.7521f,2.1573f }, + { 2.0382f,2.5137f,5.0516f,7.2585f,2.5514f,2.6109f,4.6894f,6.6424f,5.0199f,4.6446f,5.9888f,7.5243f,7.0693f,6.4764f,7.3853f,8.5406f,4.5612f }, + { 3.4853f,3.2401f,4.5243f,5.7192f,3.5426f,3.0465f,4.0014f,5.0487f,4.9502f,4.2468f,4.8759f,5.7616f,6.1735f,5.415f,5.902f,6.5324f,2.0553f }, + { 0.20305f,4.2687f,9.3561f,13.0f,4.0946f,6.1483f,10.193f,13.0f,8.8301f,9.8301f,12.415f,14.0f,12.415f,12.415f,14.0f,14.0f,13.0f }, + { 14.0f,14.0f,2.6513f,4.5843f,14.0f,14.0f,3.1846f,4.8351f,2.5509f,3.135f,4.3798f,5.6871f,4.3816f,4.7077f,5.612f,6.6781f,2.4306f }, + { 3.027f,3.0035f,4.6713f,6.2585f,3.0568f,2.7054f,4.0414f,5.4922f,4.6713f,4.059f,5.0056f,6.1358f,6.1608f,5.4378f,6.0871f,6.9556f,2.842f }, + { 1.1109f,2.4828f,6.0871f,8.9556f,2.5737f,3.1838f,6.1483f,8.6077f,6.1735f,6.1174f,7.9125f,9.7521f,8.9556f,8.5737f,9.6781f,11.0f,7.2056f }, + { 2.4212f,2.5943f,4.7784f,6.7239f,2.7025f,2.5695f,4.3908f,6.1483f,4.902f,4.4416f,5.6601f,7.0f,6.8003f,6.1545f,6.9666f,7.9556f,3.7204f }, + { 0.92268f,3.07f,6.2252f,8.5737f,2.7604f,3.5365f,6.1296f,8.2186f,5.4493f,5.6337f,7.4922f,9.1926f,7.3853f,7.2721f,8.7146f,10.093f,5.6469f }, + { 1.2858f,2.9245f,5.1959f,6.8503f,2.9659f,3.2823f,5.0458f,6.4686f,5.1703f,5.0458f,6.3065f,7.6781f,6.8301f,6.5324f,7.6601f,8.7521f,4.3982f } +}; + + +/*----------------------------------------------------------------------------------* + * Stereo downmix to EVS ROM tables + *----------------------------------------------------------------------------------*/ + +const float Stereo_dmx_s_wnd_coef_eps_16k[L_FRAME16k * 3 / 4] = { + 0.00000000f, 0.000385506690f, 0.000770864717f, 0.00115592557f, 0.00154054083f, 0.00192456215f, 0.00230784155f, 0.00269023119f, 0.00307158381f, 0.00345175178f, + 0.00383058959f, 0.00420795102f, 0.00458368938f, 0.00495766103f, 0.00532972161f, 0.00569972629f, 0.00606753491f, 0.00643300405f, 0.00679599261f, 0.00715636183f, + 0.00751397246f, 0.00786868576f, 0.00822036527f, 0.00856887549f, 0.00891408324f, 0.00925585348f, 0.00959405676f, 0.00992856082f, 0.0102592362f, 0.0105859563f, + 0.0109085962f, 0.0112270303f, 0.0115411365f, 0.0118507938f, 0.0121558821f, 0.0124562839f, 0.0127518829f, 0.0130425673f, 0.0133282226f, 0.0136087397f, + 0.0138840098f, 0.0141539266f, 0.0144183896f, 0.0146772927f, 0.0149305379f, 0.0151780248f, 0.0154196629f, 0.0156553555f, 0.0158850122f, 0.0161085464f, + 0.0163258687f, 0.0165368970f, 0.0167415515f, 0.0169397499f, 0.0171314199f, 0.0173164830f, 0.0174948741f, 0.0176665168f, 0.0178313497f, 0.0179893095f, + 0.0181403328f, 0.0182843637f, 0.0184213445f, 0.0185512230f, 0.0186739527f, 0.0187894795f, 0.0188977662f, 0.0189987645f, 0.0190924387f, 0.0191787537f, + 0.0192576759f, 0.0193291716f, 0.0193932168f, 0.0194497835f, 0.0194988549f, 0.0195404068f, 0.0195744261f, 0.0196008999f, 0.0196198169f, 0.0196311697f, + 0.0196349546f, 0.0196311697f, 0.0196198169f, 0.0196008999f, 0.0195744261f, 0.0195404068f, 0.0194988549f, 0.0194497835f, 0.0193932150f, 0.0193291716f, + 0.0192576740f, 0.0191787537f, 0.0190924387f, 0.0189987645f, 0.0188977644f, 0.0187894795f, 0.0186739508f, 0.0185512230f, 0.0184213426f, 0.0182843637f, + 0.0181403328f, 0.0179893095f, 0.0178313479f, 0.0176665168f, 0.0174948722f, 0.0173164830f, 0.0171314199f, 0.0169397499f, 0.0167415496f, 0.0165368970f, + 0.0163258687f, 0.0161085445f, 0.0158850104f, 0.0156553555f, 0.0154196629f, 0.0151780220f, 0.0149305360f, 0.0146772927f, 0.0144183887f, 0.0141539248f, + 0.0138840098f, 0.0136087388f, 0.0133282207f, 0.0130425654f, 0.0127518829f, 0.0124562830f, 0.0121558802f, 0.0118507929f, 0.0115411356f, 0.0112270294f, + 0.0109085953f, 0.0105859553f, 0.0102592343f, 0.00992855709f, 0.00959405396f, 0.00925585162f, 0.00891408045f, 0.00856887735f, 0.00822036248f, 0.00786868297f, + 0.00751396874f, 0.00715636322f, 0.00679598982f, 0.00643300032f, 0.00606753537f, 0.00569972722f, 0.00532971695f, 0.00495765638f, 0.00458368938f, 0.00420795055f, + 0.00383058493f, 0.00345175178f, 0.00307158334f, 0.00269023073f, 0.00230784062f, 0.00192456122f, 0.00154053967f, 0.00115592428f, 0.000770863262f, 0.000385505118f, + -1.71654224e-09f, -0.000385508552f, -0.000770866696f, -0.00115592312f, -0.00154053851f, -0.00192456460f, -0.00230784412f, -0.00269023376f, -0.00307158637f, -0.00345175504f, + -0.00383058819f, -0.00420794915f, -0.00458368799f, -0.00495766429f, -0.00532972487f, -0.00569973048f, -0.00606753910f, -0.00643300358f, -0.00679599261f, -0.00715636183f, + -0.00751397153f, -0.00786868948f, -0.00822036993f, -0.00856888015f, -0.00891408417f, -0.00925585441f, -0.00959405676f, -0.00992856082f, -0.0102592362f, -0.0105859619f, + -0.0109086009f, -0.0112270284f, -0.0115411393f, -0.0118507957f, -0.0121558839f, -0.0124562858f, -0.0127518848f, -0.0130425720f, -0.0133282207f, -0.0136087369f, + -0.0138840117f, -0.0141539304f, -0.0144183915f, -0.0146772945f, -0.0149305388f, -0.0151780248f, -0.0154196648f, -0.0156553555f, -0.0158850141f, -0.0161085445f, + -0.0163258705f, -0.0165369026f, -0.0167415477f, -0.0169397499f, -0.0171314217f, -0.0173164848f, -0.0174948759f, -0.0176665168f, -0.0178313479f, -0.0179893095f, + -0.0181403328f, -0.0182843637f, -0.0184213463f, -0.0185512248f, -0.0186739527f, -0.0187894795f, -0.0188977644f, -0.0189987663f, -0.0190924387f, -0.0191787556f, + -0.0192576759f, -0.0193291716f, -0.0193932150f, -0.0194497835f, -0.0194988549f, -0.0195404068f, -0.0195744261f, -0.0196008999f, -0.0196198169f, -0.0196311697f +}; + +const float Stereo_dmx_s_wnd_coef_eps_32k[L_FRAME32k * 3 / 4] = { + 0.00000000f, 9.63813145e-05f, 0.000192753345f, 0.000289106771f, 0.000385432359f, 0.000481720810f, 0.000577962783f, 0.000674149080f, 0.000770270417f, 0.000866317423f, + 0.000962281076f, 0.00105815195f, 0.00115392078f, 0.00124957843f, 0.00134511560f, 0.00144052308f, 0.00153579190f, 0.00163091265f, 0.00172587589f, 0.00182067312f, + 0.00191529479f, 0.00200973195f, 0.00210397551f, 0.00219801581f, 0.00229184469f, 0.00238545262f, 0.00247883052f, 0.00257196953f, 0.00266486080f, 0.00275749480f, + 0.00284986314f, 0.00294195698f, 0.00303376745f, 0.00312528526f, 0.00321650202f, 0.00330740865f, 0.00339799630f, 0.00348825660f, 0.00357818091f, 0.00366776017f, + 0.00375698623f, 0.00384584931f, 0.00393434288f, 0.00402245624f, 0.00411018264f, 0.00419751229f, 0.00428443775f, 0.00437095016f, 0.00445704162f, 0.00454270327f, + 0.00462792674f, 0.00471270457f, 0.00479702838f, 0.00488088885f, 0.00496428041f, 0.00504719233f, 0.00512961810f, 0.00521154935f, 0.00529297814f, 0.00537389703f, + 0.00545429811f, 0.00553417346f, 0.00561351515f, 0.00569231622f, 0.00577056827f, 0.00584826432f, 0.00592539692f, 0.00600195816f, 0.00607794104f, 0.00615333812f, + 0.00622814195f, 0.00630234554f, 0.00637594145f, 0.00644892361f, 0.00652128365f, 0.00659301504f, 0.00666411128f, 0.00673456443f, 0.00680436986f, 0.00687351823f, + 0.00694200490f, 0.00700982194f, 0.00707696332f, 0.00714342389f, 0.00720919482f, 0.00727427099f, 0.00733864633f, 0.00740231434f, 0.00746526895f, 0.00752750318f, + 0.00758901238f, 0.00764979096f, 0.00770983147f, 0.00776912877f, 0.00782767776f, 0.00788547192f, 0.00794250611f, 0.00799877476f, 0.00805427320f, 0.00810899399f, + 0.00816293433f, 0.00821608771f, 0.00826844852f, 0.00832001306f, 0.00837077573f, 0.00842073187f, 0.00846987497f, 0.00851820316f, 0.00856570993f, 0.00861239061f, + 0.00865824148f, 0.00870325882f, 0.00874743704f, 0.00879077055f, 0.00883325841f, 0.00887489505f, 0.00891567487f, 0.00895559601f, 0.00899465475f, 0.00903284643f, + 0.00907016639f, 0.00910661276f, 0.00914218184f, 0.00917686895f, 0.00921067223f, 0.00924358703f, 0.00927561149f, 0.00930674188f, 0.00933697633f, 0.00936630927f, + 0.00939473975f, 0.00942226499f, 0.00944888312f, 0.00947458949f, 0.00949938223f, 0.00952325948f, 0.00954621937f, 0.00956825912f, 0.00958937686f, 0.00960957073f, + 0.00962883793f, 0.00964717567f, 0.00966458581f, 0.00968106277f, 0.00969660841f, 0.00971121807f, 0.00972489174f, 0.00973762851f, 0.00974942744f, 0.00976028573f, + 0.00977020338f, 0.00977917947f, 0.00978721306f, 0.00979430322f, 0.00980044995f, 0.00980565138f, 0.00980990846f, 0.00981321931f, 0.00981558487f, 0.00981700420f, + 0.00981747732f, 0.00981700420f, 0.00981558487f, 0.00981321931f, 0.00980990846f, 0.00980565138f, 0.00980044995f, 0.00979430322f, 0.00978721306f, 0.00977917947f, + 0.00977020338f, 0.00976028573f, 0.00974942744f, 0.00973762851f, 0.00972489174f, 0.00971121807f, 0.00969660748f, 0.00968106277f, 0.00966458581f, 0.00964717567f, + 0.00962883700f, 0.00960956980f, 0.00958937686f, 0.00956825912f, 0.00954621937f, 0.00952325948f, 0.00949938223f, 0.00947458856f, 0.00944888219f, 0.00942226499f, + 0.00939473975f, 0.00936630927f, 0.00933697540f, 0.00930674188f, 0.00927561149f, 0.00924358703f, 0.00921067130f, 0.00917686801f, 0.00914218184f, 0.00910661276f, + 0.00907016639f, 0.00903284550f, 0.00899465475f, 0.00895559601f, 0.00891567394f, 0.00887489505f, 0.00883325841f, 0.00879077055f, 0.00874743611f, 0.00870325882f, + 0.00865824148f, 0.00861238968f, 0.00856570993f, 0.00851820316f, 0.00846987497f, 0.00842073094f, 0.00837077480f, 0.00832001306f, 0.00826844852f, 0.00821608678f, + 0.00816293433f, 0.00810899399f, 0.00805427227f, 0.00799877476f, 0.00794250518f, 0.00788547192f, 0.00782767776f, 0.00776912784f, 0.00770983147f, 0.00764979003f, + 0.00758901099f, 0.00752750272f, 0.00746526802f, 0.00740231294f, 0.00733864633f, 0.00727427006f, 0.00720919436f, 0.00714342296f, 0.00707696239f, 0.00700982334f, + 0.00694200490f, 0.00687351730f, 0.00680436939f, 0.00673456397f, 0.00666411035f, 0.00659301365f, 0.00652128272f, 0.00644892408f, 0.00637594145f, 0.00630234415f, + 0.00622814149f, 0.00615333673f, 0.00607794011f, 0.00600195862f, 0.00592539646f, 0.00584826525f, 0.00577056780f, 0.00569231436f, 0.00561351469f, 0.00553417206f, + 0.00545429764f, 0.00537389750f, 0.00529297767f, 0.00521154935f, 0.00512961717f, 0.00504719047f, 0.00496427855f, 0.00488088885f, 0.00479702698f, 0.00471270457f, + 0.00462792581f, 0.00454270281f, 0.00445704022f, 0.00437094783f, 0.00428443868f, 0.00419751182f, 0.00411018124f, 0.00402245624f, 0.00393434148f, 0.00384584907f, + 0.00375698437f, 0.00366775948f, 0.00357818161f, 0.00348825636f, 0.00339799491f, 0.00330740795f, 0.00321650016f, 0.00312528457f, 0.00303376769f, 0.00294195651f, + 0.00284986361f, 0.00275749387f, 0.00266485848f, 0.00257196836f, 0.00247882819f, 0.00238545146f, 0.00229184469f, 0.00219801464f, 0.00210397528f, 0.00200973079f, + 0.00191529247f, 0.00182067417f, 0.00172587589f, 0.00163091114f, 0.00153579167f, 0.00144052168f, 0.00134511536f, 0.00124957680f, 0.00115392031f, 0.00105815264f, + 0.000962280610f, 0.000866315851f, 0.000770269835f, 0.000674147333f, 0.000577962142f, 0.000481721276f, 0.000385431631f, 0.000289107207f, 0.000192752559f, 9.63793209e-05f, + -8.58271121e-10f, -9.63833809e-05f, -0.000192754276f, -0.000289106567f, -0.000385433348f, -0.000481720665f, -0.000577961560f, -0.000674149022f, -0.000770269253f, -0.000866317481f, + -0.000962282298f, -0.00105815206f, -0.00115392206f, -0.00124957855f, -0.00134511688f, -0.00144052564f, -0.00153579318f, -0.00163091510f, -0.00172587752f, -0.00182067591f, + -0.00191529409f, -0.00200973242f, -0.00210397458f, -0.00219801627f, -0.00229184399f, -0.00238545309f, -0.00247883215f, -0.00257196999f, -0.00266486243f, -0.00275749573f, + -0.00284986524f, -0.00294196024f, -0.00303376955f, -0.00312528410f, -0.00321650179f, -0.00330740749f, -0.00339799630f, -0.00348825776f, -0.00357818091f, -0.00366776134f, + -0.00375698577f, -0.00384585070f, -0.00393434474f, -0.00402245764f, -0.00411018496f, -0.00419751368f, -0.00428444007f, -0.00437094970f, -0.00445704209f, -0.00454270234f, + -0.00462792721f, -0.00471270364f, -0.00479702838f, -0.00488089072f, -0.00496428041f, -0.00504719326f, -0.00512961810f, -0.00521155121f, -0.00529298093f, -0.00537389843f, + -0.00545430044f, -0.00553417299f, -0.00561351422f, -0.00569231622f, -0.00577056967f, -0.00584826432f, -0.00592539785f, -0.00600195816f, -0.00607794197f, -0.00615333952f, + -0.00622814288f, -0.00630234741f, -0.00637594238f, -0.00644892501f, -0.00652128598f, -0.00659301504f, -0.00666411035f, -0.00673456537f, -0.00680436846f, -0.00687351823f, + -0.00694200583f, -0.00700982241f, -0.00707696518f, -0.00714342389f, -0.00720919576f, -0.00727427332f, -0.00733864726f, -0.00740231574f, -0.00746526942f, -0.00752750272f, + -0.00758901238f, -0.00764979143f, -0.00770983240f, -0.00776912784f, -0.00782767776f, -0.00788547192f, -0.00794250704f, -0.00799877662f, -0.00805427227f, -0.00810899492f, + -0.00816293526f, -0.00821608957f, -0.00826845132f, -0.00832001399f, -0.00837077387f, -0.00842073094f, -0.00846987497f, -0.00851820316f, -0.00856571086f, -0.00861239061f, + -0.00865824241f, -0.00870325882f, -0.00874743797f, -0.00879077241f, -0.00883325841f, -0.00887489505f, -0.00891567394f, -0.00895559601f, -0.00899465475f, -0.00903284643f, + -0.00907016639f, -0.00910661276f, -0.00914218184f, -0.00917686988f, -0.00921067316f, -0.00924358703f, -0.00927561242f, -0.00930674374f, -0.00933697633f, -0.00936631020f, + -0.00939473975f, -0.00942226499f, -0.00944888219f, -0.00947458949f, -0.00949938316f, -0.00952326041f, -0.00954621937f, -0.00956825912f, -0.00958937779f, -0.00960957073f, + -0.00962883793f, -0.00964717567f, -0.00966458581f, -0.00968106370f, -0.00969660748f, -0.00971121807f, -0.00972489174f, -0.00973762851f, -0.00974942744f, -0.00976028573f, + -0.00977020338f, -0.00977917947f, -0.00978721306f, -0.00979430322f, -0.00980044995f, -0.00980565138f, -0.00980990846f, -0.00981321931f, -0.00981558487f, -0.00981700420f +}; + +const float Stereo_dmx_s_wnd_coef_eps_48k[L_FRAME48k * 3 / 4] = { + 0.00000000f, 4.28365238e-05f, 8.56712068e-05f, 0.000128502230f, 0.000171327745f, 0.000214145897f, 0.000256954925f, 0.000299752894f, 0.000342538056f, 0.000385308522f, + 0.000428062514f, 0.000470798172f, 0.000513513631f, 0.000556207087f, 0.000598876737f, 0.000641520717f, 0.000684137223f, 0.000726724451f, 0.000769280537f, 0.000811803620f, + 0.000854292011f, 0.000896743732f, 0.000939157035f, 0.000981530058f, 0.00102386123f, 0.00106614840f, 0.00110838993f, 0.00115058408f, 0.00119272876f, 0.00123482244f, + 0.00127686327f, 0.00131884927f, 0.00136077893f, 0.00140265026f, 0.00144446141f, 0.00148621085f, 0.00152789650f, 0.00156951661f, 0.00161106954f, 0.00165255368f, + 0.00169396668f, 0.00173530739f, 0.00177657383f, 0.00181776390f, 0.00185887620f, 0.00189990876f, 0.00194086006f, 0.00198172848f, 0.00202251156f, 0.00206320849f, + 0.00210381625f, 0.00214433460f, 0.00218476099f, 0.00222509354f, 0.00226533110f, 0.00230547134f, 0.00234551285f, 0.00238545402f, 0.00242529274f, 0.00246502785f, + 0.00250465749f, 0.00254417956f, 0.00258359266f, 0.00262289518f, 0.00266208523f, 0.00270116120f, 0.00274012191f, 0.00277896458f, 0.00281768874f, 0.00285629183f, + 0.00289477292f, 0.00293312967f, 0.00297136116f, 0.00300946506f, 0.00304743997f, 0.00308528449f, 0.00312299700f, 0.00316057540f, 0.00319801876f, 0.00323532475f, + 0.00327249244f, 0.00330952019f, 0.00334640569f, 0.00338314800f, 0.00341974548f, 0.00345619628f, 0.00349249900f, 0.00352865248f, 0.00356465438f, 0.00360050355f, + 0.00363619882f, 0.00367173832f, 0.00370712043f, 0.00374234351f, 0.00377740664f, 0.00381230796f, 0.00384704559f, 0.00388161885f, 0.00391602563f, 0.00395026430f, + 0.00398433441f, 0.00401823362f, 0.00405196054f, 0.00408551423f, 0.00411889236f, 0.00415209495f, 0.00418511871f, 0.00421796367f, 0.00425062794f, 0.00428310968f, + 0.00431540888f, 0.00434752228f, 0.00437944988f, 0.00441118982f, 0.00444274070f, 0.00447410159f, 0.00450527016f, 0.00453624642f, 0.00456702849f, 0.00459761405f, + 0.00462800311f, 0.00465819426f, 0.00468818564f, 0.00471797585f, 0.00474756397f, 0.00477694906f, 0.00480613019f, 0.00483510410f, 0.00486387173f, 0.00489243073f, + 0.00492078019f, 0.00494891917f, 0.00497684581f, 0.00500455918f, 0.00503205787f, 0.00505934143f, 0.00508640893f, 0.00511325756f, 0.00513988733f, 0.00516629731f, + 0.00519248564f, 0.00521845184f, 0.00524419453f, 0.00526971230f, 0.00529500423f, 0.00532006938f, 0.00534490682f, 0.00536951516f, 0.00539389346f, 0.00541804079f, + 0.00544195622f, 0.00546563789f, 0.00548908627f, 0.00551229948f, 0.00553527568f, 0.00555801531f, 0.00558051746f, 0.00560277933f, 0.00562480185f, 0.00564658362f, + 0.00566812325f, 0.00568941981f, 0.00571047375f, 0.00573128136f, 0.00575184496f, 0.00577216130f, 0.00579223083f, 0.00581205217f, 0.00583162485f, 0.00585094700f, + 0.00587001862f, 0.00588883879f, 0.00590740750f, 0.00592572242f, 0.00594378356f, 0.00596159045f, 0.00597914122f, 0.00599643635f, 0.00601347443f, 0.00603025546f, + 0.00604677759f, 0.00606304128f, 0.00607904466f, 0.00609478820f, 0.00611026958f, 0.00612549018f, 0.00614044815f, 0.00615514303f, 0.00616957434f, 0.00618374115f, + 0.00619764347f, 0.00621127989f, 0.00622465089f, 0.00623775460f, 0.00625059102f, 0.00626316015f, 0.00627546059f, 0.00628749235f, 0.00629925495f, 0.00631074747f, + 0.00632196991f, 0.00633292133f, 0.00634360174f, 0.00635401066f, 0.00636414625f, 0.00637401035f, 0.00638360064f, 0.00639291806f, 0.00640196120f, 0.00641073054f, + 0.00641922513f, 0.00642744405f, 0.00643538870f, 0.00644305674f, 0.00645044958f, 0.00645756535f, 0.00646440545f, 0.00647096802f, 0.00647725351f, 0.00648326147f, + 0.00648899190f, 0.00649444386f, 0.00649961783f, 0.00650451379f, 0.00650913082f, 0.00651346892f, 0.00651752809f, 0.00652130833f, 0.00652480870f, 0.00652803015f, + 0.00653097173f, 0.00653363345f, 0.00653601484f, 0.00653811684f, 0.00653993897f, 0.00654148031f, 0.00654274225f, 0.00654372340f, 0.00654442422f, 0.00654484471f, + 0.00654498488f, 0.00654484471f, 0.00654442422f, 0.00654372340f, 0.00654274225f, 0.00654148031f, 0.00653993897f, 0.00653811684f, 0.00653601484f, 0.00653363345f, + 0.00653097173f, 0.00652802968f, 0.00652480870f, 0.00652130833f, 0.00651752809f, 0.00651346892f, 0.00650913082f, 0.00650451332f, 0.00649961783f, 0.00649444386f, + 0.00648899190f, 0.00648326147f, 0.00647725351f, 0.00647096802f, 0.00646440499f, 0.00645756535f, 0.00645044912f, 0.00644305674f, 0.00643538870f, 0.00642744405f, + 0.00641922466f, 0.00641073054f, 0.00640196120f, 0.00639291806f, 0.00638360064f, 0.00637400988f, 0.00636414625f, 0.00635401020f, 0.00634360174f, 0.00633292086f, + 0.00632196991f, 0.00631074747f, 0.00629925495f, 0.00628749235f, 0.00627546012f, 0.00626315968f, 0.00625059055f, 0.00623775413f, 0.00622465042f, 0.00621127989f, + 0.00619764347f, 0.00618374115f, 0.00616957434f, 0.00615514303f, 0.00614044769f, 0.00612549018f, 0.00611027004f, 0.00609478774f, 0.00607904419f, 0.00606304081f, + 0.00604677759f, 0.00603025500f, 0.00601347489f, 0.00599643635f, 0.00597914122f, 0.00596158998f, 0.00594378309f, 0.00592572149f, 0.00590740703f, 0.00588883879f, + 0.00587001862f, 0.00585094653f, 0.00583162392f, 0.00581205124f, 0.00579223037f, 0.00577216130f, 0.00575184496f, 0.00573128182f, 0.00571047282f, 0.00568941981f, + 0.00566812325f, 0.00564658316f, 0.00562480185f, 0.00560277933f, 0.00558051653f, 0.00555801531f, 0.00553527661f, 0.00551229948f, 0.00548908627f, 0.00546563789f, + 0.00544195622f, 0.00541804079f, 0.00539389299f, 0.00536951469f, 0.00534490682f, 0.00532006891f, 0.00529500330f, 0.00526971091f, 0.00524419360f, 0.00521845091f, + 0.00519248564f, 0.00516629778f, 0.00513988733f, 0.00511325756f, 0.00508640800f, 0.00505934190f, 0.00503205787f, 0.00500455871f, 0.00497684488f, 0.00494891871f, + 0.00492077926f, 0.00489242980f, 0.00486387173f, 0.00483510457f, 0.00480612973f, 0.00477694906f, 0.00474756444f, 0.00471797585f, 0.00468818471f, 0.00465819333f, + 0.00462800311f, 0.00459761359f, 0.00456702709f, 0.00453624595f, 0.00450526970f, 0.00447410066f, 0.00444273977f, 0.00441119028f, 0.00437944988f, 0.00434752181f, + 0.00431540795f, 0.00428310968f, 0.00425062748f, 0.00421796273f, 0.00418511871f, 0.00415209448f, 0.00411889143f, 0.00408551283f, 0.00405196007f, 0.00401823269f, + 0.00398433302f, 0.00395026430f, 0.00391602563f, 0.00388161885f, 0.00384704513f, 0.00381230796f, 0.00377740664f, 0.00374234305f, 0.00370711950f, 0.00367173809f, + 0.00363619835f, 0.00360050285f, 0.00356465275f, 0.00352865178f, 0.00349249784f, 0.00345619605f, 0.00341974595f, 0.00338314800f, 0.00334640522f, 0.00330951903f, + 0.00327249290f, 0.00323532452f, 0.00319801806f, 0.00316057424f, 0.00312299654f, 0.00308528380f, 0.00304743880f, 0.00300946319f, 0.00297135999f, 0.00293312967f, + 0.00289477245f, 0.00285629253f, 0.00281768874f, 0.00277896435f, 0.00274012075f, 0.00270116120f, 0.00266208476f, 0.00262289424f, 0.00258359103f, 0.00254417886f, + 0.00250465632f, 0.00246502645f, 0.00242529227f, 0.00238545449f, 0.00234551262f, 0.00230547064f, 0.00226533134f, 0.00222509331f, 0.00218476006f, 0.00214433344f, + 0.00210381625f, 0.00206320756f, 0.00202251016f, 0.00198172801f, 0.00194085937f, 0.00189990760f, 0.00185887585f, 0.00181776448f, 0.00177657383f, 0.00173530704f, + 0.00169396598f, 0.00165255368f, 0.00161106919f, 0.00156951568f, 0.00152789650f, 0.00148621027f, 0.00144446036f, 0.00140264863f, 0.00136077835f, 0.00131884834f, + 0.00127686316f, 0.00123482186f, 0.00119272911f, 0.00115058396f, 0.00110838923f, 0.00106614875f, 0.00102386111f, 0.000981529476f, 0.000939155812f, 0.000896743557f, + 0.000854291196f, 0.000811802340f, 0.000769278675f, 0.000726723636f, 0.000684137398f, 0.000641520426f, 0.000598877436f, 0.000556207204f, 0.000513513223f, 0.000470797240f, + 0.000428062631f, 0.000385308114f, 0.000342537096f, 0.000299751409f, 0.000256954430f, 0.000214144908f, 0.000171326188f, 0.000128500149f, 8.56717088e-05f, 4.28364874e-05f, + -5.72180747e-10f, -4.28360690e-05f, -8.56712868e-05f, -0.000128502856f, -0.000171328895f, -0.000214146057f, -0.000256955565f, -0.000299754087f, -0.000342539803f, -0.000385309249f, + -0.000428063737f, -0.000470799918f, -0.000513512816f, -0.000556206855f, -0.000598876970f, -0.000641521532f, -0.000684137049f, -0.000726724742f, -0.000769281352f, -0.000811805017f, + -0.000854292419f, -0.000896744605f, -0.000939158490f, -0.000981530524f, -0.00102386216f, -0.00106614991f, -0.00110839040f, -0.00115058350f, -0.00119272876f, -0.00123482291f, + -0.00127686432f, -0.00131884939f, -0.00136077951f, -0.00140265131f, -0.00144446141f, -0.00148621143f, -0.00152789755f, -0.00156951835f, -0.00161107024f, -0.00165255321f, + -0.00169396691f, -0.00173530797f, -0.00177657336f, -0.00181776413f, -0.00185887702f, -0.00189990853f, -0.00194086053f, -0.00198172918f, -0.00202251296f, -0.00206320873f, + -0.00210381718f, -0.00214433600f, -0.00218476262f, -0.00222509308f, -0.00226533087f, -0.00230547180f, -0.00234551216f, -0.00238545402f, -0.00242529344f, -0.00246502901f, + -0.00250465726f, -0.00254418002f, -0.00258359360f, -0.00262289657f, -0.00266208570f, -0.00270116236f, -0.00274012331f, -0.00277896388f, -0.00281768828f, -0.00285629206f, + -0.00289477338f, -0.00293312944f, -0.00297136139f, -0.00300946552f, -0.00304744113f, -0.00308528473f, -0.00312299770f, -0.00316057657f, -0.00319802039f, -0.00323532545f, + -0.00327249360f, -0.00330952019f, -0.00334640499f, -0.00338314800f, -0.00341974548f, -0.00345619721f, -0.00349249900f, -0.00352865248f, -0.00356465508f, -0.00360050471f, + -0.00363619928f, -0.00367173925f, -0.00370712159f, -0.00374234398f, -0.00377740758f, -0.00381230772f, -0.00384704629f, -0.00388161838f, -0.00391602563f, -0.00395026524f, + -0.00398433534f, -0.00401823409f, -0.00405196147f, -0.00408551469f, -0.00411889283f, -0.00415209495f, -0.00418511964f, -0.00421796506f, -0.00425062841f, -0.00428310968f, + -0.00431540888f, -0.00434752274f, -0.00437944988f, -0.00441119028f, -0.00444274163f, -0.00447410159f, -0.00450527063f, -0.00453624688f, -0.00456702895f, -0.00459761452f, + -0.00462800404f, -0.00465819519f, -0.00468818611f, -0.00471797585f, -0.00474756444f, -0.00477694953f, -0.00480612973f, -0.00483510410f, -0.00486387173f, -0.00489243167f, + -0.00492078019f, -0.00494891917f, -0.00497684628f, -0.00500456011f, -0.00503205974f, -0.00505934376f, -0.00508640893f, -0.00511325803f, -0.00513988826f, -0.00516629638f, + -0.00519248517f, -0.00521845184f, -0.00524419453f, -0.00526971230f, -0.00529500470f, -0.00532007031f, -0.00534490822f, -0.00536951516f, -0.00539389392f, -0.00541804126f, + -0.00544195529f, -0.00546563743f, -0.00548908627f, -0.00551229948f, -0.00553527614f, -0.00555801624f, -0.00558051793f, -0.00560278073f, -0.00562480185f, -0.00564658362f, + -0.00566812325f, -0.00568942074f, -0.00571047375f, -0.00573128276f, -0.00575184450f, -0.00577216130f, -0.00579223130f, -0.00581205264f, -0.00583162485f, -0.00585094653f, + -0.00587001862f, -0.00588883925f, -0.00590740610f, -0.00592572149f, -0.00594378309f, -0.00596158998f, -0.00597914122f, -0.00599643681f, -0.00601347489f, -0.00603025593f, + -0.00604677759f, -0.00606304081f, -0.00607904466f, -0.00609478820f, -0.00611027051f, -0.00612549065f, -0.00614044908f, -0.00615514303f, -0.00616957434f, -0.00618374161f, + -0.00619764347f, -0.00621128036f, -0.00622465089f, -0.00623775553f, -0.00625059241f, -0.00626316015f, -0.00627546106f, -0.00628749281f, -0.00629925542f, -0.00631074747f, + -0.00632197037f, -0.00633292180f, -0.00634360127f, -0.00635400973f, -0.00636414625f, -0.00637400988f, -0.00638360064f, -0.00639291806f, -0.00640196120f, -0.00641073007f, + -0.00641922466f, -0.00642744405f, -0.00643538870f, -0.00644305721f, -0.00645045005f, -0.00645756582f, -0.00646440592f, -0.00647096802f, -0.00647725351f, -0.00648326147f, + -0.00648899190f, -0.00649444433f, -0.00649961829f, -0.00650451379f, -0.00650913082f, -0.00651346892f, -0.00651752809f, -0.00652130833f, -0.00652480870f, -0.00652803015f, + -0.00653097173f, -0.00653363345f, -0.00653601484f, -0.00653811684f, -0.00653993897f, -0.00654148031f, -0.00654274225f, -0.00654372340f, -0.00654442422f, -0.00654484471f +}; + +const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 4] = { + 0.00154133327f, 0.0138150426f, 0.0380602330f, 0.0736799166f, 0.119797014f, 0.175276011f, 0.238750681f, 0.308658302f, 0.383277327f, 0.460770488f, + 0.539229512f, 0.616722703f, 0.691341758f, 0.761249363f, 0.824724138f, 0.880203009f, 0.926320136f, 0.961939812f, 0.986184955f, 0.998458624f, +}; + +const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 4] = { + 0.000385481922f, 0.00346577191f, 0.00960735977f, 0.0187723786f, 0.0309043285f, 0.0459284224f, 0.0637519881f, 0.0842651874f, 0.107341543f, 0.132838756f, + 0.160599619f, 0.190453023f, 0.222214893f, 0.255689442f, 0.290670186f, 0.326941460f, 0.364279807f, 0.402454913f, 0.441231340f, 0.480370134f, + 0.519629955f, 0.558768749f, 0.597545147f, 0.635720134f, 0.673058629f, 0.709329903f, 0.744310737f, 0.777785182f, 0.809546947f, 0.839400351f, + 0.867161214f, 0.892658472f, 0.915734828f, 0.936248004f, 0.954071581f, 0.969095647f, 0.981227636f, 0.990392625f, 0.996534228f, 0.999614537f +}; + +const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 4] = { + 0.000171337553f, 0.00154133327f, 0.00427756971f, 0.00837254710f, 0.0138150426f, 0.0205901340f, 0.0286792554f, 0.0380602330f, 0.0487073623f, 0.0605914444f, + 0.0736799166f, 0.0879369006f, 0.103323318f, 0.119797014f, 0.137312800f, 0.155822709f, 0.175276011f, 0.195619285f, 0.216796920f, 0.238750681f, + 0.261420637f, 0.284744442f, 0.308658302f, 0.333096594f, 0.357992321f, 0.383277327f, 0.408882231f, 0.434736967f, 0.460770488f, 0.486911595f, + 0.513088524f, 0.539229512f, 0.565263212f, 0.591117799f, 0.616722703f, 0.642007649f, 0.666903436f, 0.691341758f, 0.715255499f, 0.738579512f, + 0.761249363f, 0.783203125f, 0.804380774f, 0.824724138f, 0.844177306f, 0.862687230f, 0.880203009f, 0.896676719f, 0.912063122f, 0.926320136f, + 0.939408541f, 0.951292694f, 0.961939812f, 0.971320748f, 0.979409873f, 0.986184955f, 0.991627395f, 0.995722473f, 0.998458624f, 0.999828696f +}; + +const float Stereo_dmx_wnd_coef_32k[L_FRAME32k] = { + 0.00245436677f, 0.00736304140f, 0.0122715384f, 0.0171797406f, 0.0220875274f, 0.0269947834f, 0.0319013894f, 0.0368072242f, 0.0417121723f, 0.0466161147f, + 0.0515189394f, 0.0564205162f, 0.0613207407f, 0.0662194863f, 0.0711166263f, 0.0760120600f, 0.0809056610f, 0.0857973173f, 0.0906868950f, 0.0955742970f, + 0.100459389f, 0.105342068f, 0.110222206f, 0.115099691f, 0.119974405f, 0.124846220f, 0.129715025f, 0.134580702f, 0.139443144f, 0.144302234f, + 0.149157837f, 0.154009849f, 0.158858150f, 0.163702622f, 0.168543145f, 0.173379615f, 0.178211913f, 0.183039904f, 0.187863469f, 0.192682534f, + 0.197496951f, 0.202306598f, 0.207111374f, 0.211911172f, 0.216705844f, 0.221495330f, 0.226279438f, 0.231058136f, 0.235831216f, 0.240598634f, + 0.245360270f, 0.250115991f, 0.254865676f, 0.259609222f, 0.264346480f, 0.269077420f, 0.273801833f, 0.278519720f, 0.283230811f, 0.287935138f, + 0.292632490f, 0.297322810f, 0.302005947f, 0.306681842f, 0.311350316f, 0.316011310f, 0.320664674f, 0.325310320f, 0.329948068f, 0.334577978f, + 0.339199722f, 0.343813360f, 0.348418683f, 0.353015631f, 0.357604057f, 0.362183869f, 0.366754949f, 0.371317208f, 0.375870496f, 0.380414754f, + 0.384949833f, 0.389475614f, 0.393992066f, 0.398498982f, 0.402996302f, 0.407483906f, 0.411961704f, 0.416429579f, 0.420887381f, 0.425335079f, + 0.429772556f, 0.434199631f, 0.438616246f, 0.443022311f, 0.447417706f, 0.451802254f, 0.456176013f, 0.460538715f, 0.464890391f, 0.469230741f, + 0.473559886f, 0.477877617f, 0.482183754f, 0.486478329f, 0.490761191f, 0.495032281f, 0.499291331f, 0.503538370f, 0.507773340f, 0.511996031f, + 0.516206384f, 0.520404339f, 0.524589717f, 0.528762460f, 0.532922447f, 0.537069619f, 0.541203856f, 0.545324981f, 0.549433053f, 0.553527832f, + 0.557609320f, 0.561677337f, 0.565731823f, 0.569772661f, 0.573799849f, 0.577813148f, 0.581812501f, 0.585797846f, 0.589769125f, 0.593726158f, + 0.597668886f, 0.601597190f, 0.605511069f, 0.609410286f, 0.613294840f, 0.617164612f, 0.621019602f, 0.624859512f, 0.628684402f, 0.632494152f, + 0.636288643f, 0.640067816f, 0.643831551f, 0.647579789f, 0.651312411f, 0.655029356f, 0.658730507f, 0.662415802f, 0.666085124f, 0.669738412f, + 0.673375487f, 0.676996410f, 0.680601001f, 0.684189200f, 0.687760890f, 0.691316068f, 0.694854558f, 0.698376238f, 0.701881170f, 0.705369174f, + 0.708840191f, 0.712294042f, 0.715730846f, 0.719150305f, 0.722552538f, 0.725937307f, 0.729304552f, 0.732654333f, 0.735986352f, 0.739300668f, + 0.742597163f, 0.745875776f, 0.749136388f, 0.752379000f, 0.755603433f, 0.758809745f, 0.761997640f, 0.765167236f, 0.768318474f, 0.771451116f, + 0.774565160f, 0.777660608f, 0.780737281f, 0.783795059f, 0.786834061f, 0.789854050f, 0.792855084f, 0.795836926f, 0.798799634f, 0.801743090f, + 0.804667175f, 0.807571888f, 0.810457170f, 0.813322961f, 0.816169143f, 0.818995655f, 0.821802378f, 0.824589312f, 0.827356398f, 0.830103517f, + 0.832830667f, 0.835537791f, 0.838224769f, 0.840891480f, 0.843537927f, 0.846164107f, 0.848769844f, 0.851355195f, 0.853920043f, 0.856464267f, + 0.858987868f, 0.861490726f, 0.863972843f, 0.866434216f, 0.868874609f, 0.871294141f, 0.873692691f, 0.876070142f, 0.878426433f, 0.880761623f, + 0.883075595f, 0.885368288f, 0.887639642f, 0.889889598f, 0.892118156f, 0.894325078f, 0.896510601f, 0.898674488f, 0.900816679f, 0.902937233f, + 0.905035973f, 0.907112896f, 0.909168005f, 0.911201119f, 0.913212419f, 0.915201664f, 0.917168796f, 0.919113874f, 0.921036780f, 0.922937512f, + 0.924816012f, 0.926672220f, 0.928506076f, 0.930317640f, 0.932106674f, 0.933873355f, 0.935617447f, 0.937339008f, 0.939038038f, 0.940714359f, + 0.942368090f, 0.943999112f, 0.945607364f, 0.947192788f, 0.948755443f, 0.950295210f, 0.951812088f, 0.953306019f, 0.954777062f, 0.956224978f, + 0.957649887f, 0.959051788f, 0.960430562f, 0.961786151f, 0.963118553f, 0.964427769f, 0.965713739f, 0.966976464f, 0.968215883f, 0.969431996f, + 0.970624745f, 0.971794069f, 0.972939968f, 0.974062443f, 0.975161433f, 0.976236939f, 0.977288902f, 0.978317380f, 0.979322255f, 0.980303526f, + 0.981261134f, 0.982195139f, 0.983105481f, 0.983992159f, 0.984855056f, 0.985694289f, 0.986509740f, 0.987301409f, 0.988069296f, 0.988813400f, + 0.989533663f, 0.990230083f, 0.990902662f, 0.991551340f, 0.992176116f, 0.992776990f, 0.993353963f, 0.993906975f, 0.994436026f, 0.994941175f, + 0.995422304f, 0.995879471f, 0.996312618f, 0.996721745f, 0.997106910f, 0.997467995f, 0.997805059f, 0.998118103f, 0.998407125f, 0.998672009f, + 0.998912871f, 0.999129653f, 0.999322414f, 0.999491036f, 0.999635577f, 0.999756038f, 0.999852419f, 0.999924719f, 0.999972880f, 0.999996960f, + 0.999996960f, 0.999972880f, 0.999924719f, 0.999852419f, 0.999756038f, 0.999635577f, 0.999491036f, 0.999322355f, 0.999129653f, 0.998912871f, + 0.998672009f, 0.998407066f, 0.998118103f, 0.997805059f, 0.997467995f, 0.997106910f, 0.996721745f, 0.996312618f, 0.995879471f, 0.995422304f, + 0.994941175f, 0.994436026f, 0.993906975f, 0.993353963f, 0.992776990f, 0.992176116f, 0.991551340f, 0.990902603f, 0.990230083f, 0.989533663f, + 0.988813400f, 0.988069296f, 0.987301409f, 0.986509740f, 0.985694289f, 0.984855056f, 0.983992159f, 0.983105481f, 0.982195139f, 0.981261134f, + 0.980303526f, 0.979322195f, 0.978317380f, 0.977288902f, 0.976236939f, 0.975161433f, 0.974062383f, 0.972939968f, 0.971794069f, 0.970624685f, + 0.969431937f, 0.968215883f, 0.966976464f, 0.965713739f, 0.964427769f, 0.963118494f, 0.961786091f, 0.960430503f, 0.959051728f, 0.957649887f, + 0.956224918f, 0.954777002f, 0.953306079f, 0.951812088f, 0.950295210f, 0.948755443f, 0.947192788f, 0.945607305f, 0.943999052f, 0.942368090f, + 0.940714359f, 0.939037979f, 0.937338948f, 0.935617387f, 0.933873296f, 0.932106674f, 0.930317581f, 0.928506076f, 0.926672220f, 0.924815953f, + 0.922937512f, 0.921036780f, 0.919113815f, 0.917168736f, 0.915201545f, 0.913212359f, 0.911201119f, 0.909167886f, 0.907112896f, 0.905035913f, + 0.902937233f, 0.900816679f, 0.898674428f, 0.896510541f, 0.894325078f, 0.892118096f, 0.889889598f, 0.887639582f, 0.885368228f, 0.883075476f, + 0.880761623f, 0.878426373f, 0.876070142f, 0.873692632f, 0.871294081f, 0.868874550f, 0.866434216f, 0.863972843f, 0.861490667f, 0.858987749f, + 0.856464148f, 0.853919983f, 0.851355135f, 0.848769784f, 0.846163988f, 0.843537807f, 0.840891421f, 0.838224769f, 0.835537791f, 0.832830667f, + 0.830103517f, 0.827356339f, 0.824589312f, 0.821802318f, 0.818995535f, 0.816169024f, 0.813322842f, 0.810457170f, 0.807571888f, 0.804667115f, + 0.801743090f, 0.798799574f, 0.795836866f, 0.792855084f, 0.789854050f, 0.786834002f, 0.783794999f, 0.780737102f, 0.777660549f, 0.774565101f, + 0.771450996f, 0.768318295f, 0.765167117f, 0.761997640f, 0.758809745f, 0.755603492f, 0.752379000f, 0.749136329f, 0.745875657f, 0.742597163f, + 0.739300609f, 0.735986292f, 0.732654154f, 0.729304433f, 0.725937247f, 0.722552478f, 0.719150245f, 0.715730846f, 0.712294042f, 0.708840072f, + 0.705369234f, 0.701881170f, 0.698376238f, 0.694854438f, 0.691315889f, 0.687760890f, 0.684189141f, 0.680600941f, 0.676996291f, 0.673375309f, + 0.669738352f, 0.666085184f, 0.662415802f, 0.658730507f, 0.655029297f, 0.651312292f, 0.647579789f, 0.643831551f, 0.640067756f, 0.636288524f, + 0.632493973f, 0.628684342f, 0.624859452f, 0.621019423f, 0.617164493f, 0.613294840f, 0.609410226f, 0.605511129f, 0.601597250f, 0.597668827f, + 0.593726039f, 0.589769006f, 0.585797846f, 0.581812441f, 0.577813029f, 0.573799670f, 0.569772482f, 0.565731764f, 0.561677217f, 0.557609320f, + 0.553527832f, 0.549432993f, 0.545324862f, 0.541203856f, 0.537069559f, 0.532922387f, 0.528762341f, 0.524589539f, 0.520404279f, 0.516206324f, + 0.511995912f, 0.507773161f, 0.503538132f, 0.499291241f, 0.495032310f, 0.490761220f, 0.486478329f, 0.482183695f, 0.477877438f, 0.473559886f, + 0.469230711f, 0.464890242f, 0.460538566f, 0.456175804f, 0.451802224f, 0.447417587f, 0.443022132f, 0.438616246f, 0.434199572f, 0.429772437f, + 0.425335139f, 0.420887381f, 0.416429490f, 0.411961585f, 0.407483727f, 0.402996272f, 0.398498893f, 0.393991917f, 0.389475435f, 0.384949595f, + 0.380414665f, 0.375870585f, 0.371317238f, 0.366754919f, 0.362183779f, 0.357603908f, 0.353015631f, 0.348418653f, 0.343813270f, 0.339199573f, + 0.334577739f, 0.329948068f, 0.325310200f, 0.320664495f, 0.316011310f, 0.311350256f, 0.306681722f, 0.302006006f, 0.297322810f, 0.292632431f, + 0.287935019f, 0.283230633f, 0.278519690f, 0.273801804f, 0.269077301f, 0.264346302f, 0.259608954f, 0.254865587f, 0.250116080f, 0.245360300f, + 0.240598619f, 0.235831141f, 0.231057972f, 0.226279467f, 0.221495286f, 0.216705769f, 0.211911023f, 0.207111165f, 0.202306569f, 0.197496846f, + 0.192682371f, 0.187863261f, 0.183039844f, 0.178211793f, 0.173379675f, 0.168543145f, 0.163702562f, 0.158858031f, 0.154009670f, 0.149157837f, + 0.144302174f, 0.139443025f, 0.134580523f, 0.129714787f, 0.124846153f, 0.119974270f, 0.115099736f, 0.110222198f, 0.105341993f, 0.100459255f, + 0.0955743343f, 0.0906868801f, 0.0857972279f, 0.0809055194f, 0.0760118514f, 0.0711165965f, 0.0662193894f, 0.0613205843f, 0.0564203039f, 0.0515186638f, + 0.0466160178f, 0.0417122506f, 0.0368072391f, 0.0319013409f, 0.0269946754f, 0.0220873598f, 0.0171797480f, 0.0122714853f, 0.00736292684f, 0.00245419098f +}; + +const float Stereo_dmx_wnd_coef_48k[L_FRAME48k] = { + 0.00163624552f, 0.00490871910f, 0.00818113983f, 0.0114534730f, 0.0147256833f, 0.0179977361f, 0.0212695971f, 0.0245412290f, 0.0278125983f, 0.0310836714f, + 0.0343544111f, 0.0376247801f, 0.0408947468f, 0.0441642813f, 0.0474333353f, 0.0507018827f, 0.0539698936f, 0.0572373196f, 0.0605041310f, 0.0637703016f, + 0.0670357868f, 0.0703005567f, 0.0735645667f, 0.0768277943f, 0.0800902024f, 0.0833517388f, 0.0866123885f, 0.0898721218f, 0.0931308791f, 0.0963886455f, + 0.0996453837f, 0.102901049f, 0.106155604f, 0.109409027f, 0.112661287f, 0.115912341f, 0.119162142f, 0.122410677f, 0.125657901f, 0.128903762f, + 0.132148281f, 0.135391355f, 0.138632968f, 0.141873136f, 0.145111740f, 0.148348823f, 0.151584297f, 0.154818162f, 0.158050373f, 0.161280856f, + 0.164509654f, 0.167736664f, 0.170961902f, 0.174185291f, 0.177406818f, 0.180626437f, 0.183844119f, 0.187059864f, 0.190273583f, 0.193485275f, + 0.196694881f, 0.199902371f, 0.203107744f, 0.206310928f, 0.209511906f, 0.212710649f, 0.215907112f, 0.219101235f, 0.222293034f, 0.225482464f, + 0.228669465f, 0.231854036f, 0.235036105f, 0.238215655f, 0.241392657f, 0.244567066f, 0.247738868f, 0.250908017f, 0.254074484f, 0.257238209f, + 0.260399193f, 0.263557374f, 0.266712755f, 0.269865274f, 0.273014903f, 0.276161611f, 0.279305339f, 0.282446116f, 0.285583824f, 0.288718522f, + 0.291850090f, 0.294978559f, 0.298103839f, 0.301225930f, 0.304344803f, 0.307460397f, 0.310572743f, 0.313681751f, 0.316787392f, 0.319889635f, + 0.322988451f, 0.326083839f, 0.329175681f, 0.332264036f, 0.335348845f, 0.338430017f, 0.341507554f, 0.344581485f, 0.347651720f, 0.350718200f, + 0.353780955f, 0.356839925f, 0.359895051f, 0.362946332f, 0.365993738f, 0.369037211f, 0.372076690f, 0.375112236f, 0.378143758f, 0.381171227f, + 0.384194613f, 0.387213886f, 0.390229046f, 0.393239975f, 0.396246701f, 0.399249226f, 0.402247399f, 0.405241340f, 0.408230871f, 0.411216080f, + 0.414196879f, 0.417173237f, 0.420145124f, 0.423112512f, 0.426075369f, 0.429033697f, 0.431987405f, 0.434936464f, 0.437880874f, 0.440820634f, + 0.443755597f, 0.446685851f, 0.449611336f, 0.452531993f, 0.455447793f, 0.458358735f, 0.461264789f, 0.464165837f, 0.467061967f, 0.469953090f, + 0.472839147f, 0.475720167f, 0.478596091f, 0.481466919f, 0.484332532f, 0.487192988f, 0.490048259f, 0.492898166f, 0.495742917f, 0.498582304f, + 0.501416385f, 0.504245043f, 0.507068336f, 0.509886205f, 0.512698591f, 0.515505493f, 0.518306911f, 0.521102786f, 0.523893058f, 0.526677668f, + 0.529456615f, 0.532230020f, 0.534997642f, 0.537759542f, 0.540515661f, 0.543266058f, 0.546010554f, 0.548749268f, 0.551482081f, 0.554209054f, + 0.556930006f, 0.559644997f, 0.562354028f, 0.565056980f, 0.567753971f, 0.570444822f, 0.573129594f, 0.575808227f, 0.578480661f, 0.581146955f, + 0.583806932f, 0.586460710f, 0.589108169f, 0.591749430f, 0.594384253f, 0.597012758f, 0.599634886f, 0.602250516f, 0.604859710f, 0.607462525f, + 0.610058725f, 0.612648487f, 0.615231633f, 0.617808223f, 0.620378077f, 0.622941375f, 0.625498056f, 0.628047943f, 0.630591154f, 0.633127630f, + 0.635657310f, 0.638180137f, 0.640696168f, 0.643205345f, 0.645707667f, 0.648203015f, 0.650691390f, 0.653172910f, 0.655647278f, 0.658114731f, + 0.660575151f, 0.663028479f, 0.665474653f, 0.667913795f, 0.670345724f, 0.672770441f, 0.675188005f, 0.677598298f, 0.680001378f, 0.682397127f, + 0.684785664f, 0.687166810f, 0.689540565f, 0.691906929f, 0.694265962f, 0.696617484f, 0.698961616f, 0.701298177f, 0.703627348f, 0.705948830f, + 0.708262801f, 0.710569263f, 0.712868035f, 0.715159237f, 0.717442751f, 0.719718635f, 0.721986711f, 0.724247098f, 0.726499736f, 0.728744626f, + 0.730981648f, 0.733210862f, 0.735432267f, 0.737645686f, 0.739851296f, 0.742048979f, 0.744238734f, 0.746420443f, 0.748594224f, 0.750759959f, + 0.752917647f, 0.755067289f, 0.757208824f, 0.759342313f, 0.761467636f, 0.763584793f, 0.765693724f, 0.767794549f, 0.769887090f, 0.771971405f, + 0.774047434f, 0.776115239f, 0.778174698f, 0.780225754f, 0.782268524f, 0.784302890f, 0.786328912f, 0.788346410f, 0.790355563f, 0.792356193f, + 0.794348359f, 0.796332002f, 0.798307180f, 0.800273776f, 0.802231789f, 0.804181218f, 0.806122005f, 0.808054149f, 0.809977651f, 0.811892509f, + 0.813798666f, 0.815696120f, 0.817584813f, 0.819464803f, 0.821335912f, 0.823198318f, 0.825051904f, 0.826896608f, 0.828732491f, 0.830559433f, + 0.832377613f, 0.834186733f, 0.835986972f, 0.837778270f, 0.839560628f, 0.841333985f, 0.843098283f, 0.844853640f, 0.846599817f, 0.848336995f, + 0.850065112f, 0.851784110f, 0.853493989f, 0.855194688f, 0.856886268f, 0.858568668f, 0.860241890f, 0.861905873f, 0.863560677f, 0.865206122f, + 0.866842389f, 0.868469357f, 0.870086968f, 0.871695340f, 0.873294353f, 0.874884009f, 0.876464248f, 0.878035188f, 0.879596710f, 0.881148815f, + 0.882691383f, 0.884224594f, 0.885748327f, 0.887262523f, 0.888767302f, 0.890262544f, 0.891748250f, 0.893224299f, 0.894690871f, 0.896147847f, + 0.897595227f, 0.899033010f, 0.900461137f, 0.901879668f, 0.903288484f, 0.904687643f, 0.906077147f, 0.907456934f, 0.908827007f, 0.910187364f, + 0.911537945f, 0.912878752f, 0.914209783f, 0.915530980f, 0.916842461f, 0.918144047f, 0.919435859f, 0.920717835f, 0.921989918f, 0.923252106f, + 0.924504459f, 0.925746918f, 0.926979423f, 0.928201973f, 0.929414630f, 0.930617392f, 0.931810081f, 0.932992756f, 0.934165537f, 0.935328305f, + 0.936480999f, 0.937623739f, 0.938756406f, 0.939879060f, 0.940991580f, 0.942094028f, 0.943186462f, 0.944268763f, 0.945340872f, 0.946402907f, + 0.947454870f, 0.948496580f, 0.949528158f, 0.950549603f, 0.951560915f, 0.952561915f, 0.953552783f, 0.954533458f, 0.955503881f, 0.956464112f, + 0.957414031f, 0.958353758f, 0.959283173f, 0.960202336f, 0.961111188f, 0.962009788f, 0.962898076f, 0.963776052f, 0.964643717f, 0.965501070f, + 0.966348052f, 0.967184663f, 0.968010962f, 0.968826830f, 0.969632387f, 0.970427573f, 0.971212327f, 0.971986651f, 0.972750604f, 0.973504126f, + 0.974247217f, 0.974979877f, 0.975702107f, 0.976413906f, 0.977115214f, 0.977806091f, 0.978486478f, 0.979156435f, 0.979815841f, 0.980464756f, + 0.981103182f, 0.981731117f, 0.982348502f, 0.982955396f, 0.983551800f, 0.984137595f, 0.984712899f, 0.985277653f, 0.985831857f, 0.986375451f, + 0.986908555f, 0.987431049f, 0.987942994f, 0.988444328f, 0.988935113f, 0.989415288f, 0.989884853f, 0.990343809f, 0.990792215f, 0.991229951f, + 0.991657078f, 0.992073655f, 0.992479563f, 0.992874801f, 0.993259430f, 0.993633449f, 0.993996799f, 0.994349539f, 0.994691610f, 0.995023012f, + 0.995343804f, 0.995653868f, 0.995953321f, 0.996242106f, 0.996520221f, 0.996787608f, 0.997044384f, 0.997290432f, 0.997525871f, 0.997750580f, + 0.997964621f, 0.998167932f, 0.998360574f, 0.998542547f, 0.998713851f, 0.998874426f, 0.999024272f, 0.999163449f, 0.999291956f, 0.999409735f, + 0.999516785f, 0.999613166f, 0.999698818f, 0.999773800f, 0.999838054f, 0.999891579f, 0.999934435f, 0.999966562f, 0.999987960f, 0.999998689f, + 0.999998689f, 0.999987960f, 0.999966562f, 0.999934435f, 0.999891579f, 0.999838054f, 0.999773800f, 0.999698818f, 0.999613166f, 0.999516785f, + 0.999409735f, 0.999291956f, 0.999163449f, 0.999024272f, 0.998874426f, 0.998713851f, 0.998542547f, 0.998360574f, 0.998167932f, 0.997964621f, + 0.997750580f, 0.997525871f, 0.997290432f, 0.997044384f, 0.996787608f, 0.996520162f, 0.996242106f, 0.995953321f, 0.995653868f, 0.995343745f, + 0.995023012f, 0.994691610f, 0.994349539f, 0.993996799f, 0.993633449f, 0.993259430f, 0.992874801f, 0.992479503f, 0.992073596f, 0.991657078f, + 0.991229951f, 0.990792215f, 0.990343809f, 0.989884853f, 0.989415288f, 0.988935113f, 0.988444328f, 0.987942994f, 0.987431049f, 0.986908555f, + 0.986375451f, 0.985831797f, 0.985277653f, 0.984712899f, 0.984137595f, 0.983551741f, 0.982955396f, 0.982348502f, 0.981731117f, 0.981103182f, + 0.980464756f, 0.979815781f, 0.979156375f, 0.978486478f, 0.977806091f, 0.977115214f, 0.976413906f, 0.975702167f, 0.974979877f, 0.974247217f, + 0.973504126f, 0.972750604f, 0.971986651f, 0.971212268f, 0.970427513f, 0.969632387f, 0.968826830f, 0.968010902f, 0.967184663f, 0.966347992f, + 0.965501010f, 0.964643717f, 0.963776052f, 0.962898076f, 0.962009788f, 0.961111248f, 0.960202336f, 0.959283173f, 0.958353698f, 0.957414031f, + 0.956464052f, 0.955503821f, 0.954533398f, 0.953552783f, 0.952561915f, 0.951560855f, 0.950549603f, 0.949528158f, 0.948496580f, 0.947454810f, + 0.946402907f, 0.945340872f, 0.944268644f, 0.943186402f, 0.942094028f, 0.940991521f, 0.939879000f, 0.938756347f, 0.937623739f, 0.936481059f, + 0.935328305f, 0.934165537f, 0.932992816f, 0.931810021f, 0.930617273f, 0.929414630f, 0.928201973f, 0.926979363f, 0.925746858f, 0.924504459f, + 0.923252106f, 0.921989858f, 0.920717835f, 0.919435859f, 0.918144047f, 0.916842401f, 0.915531039f, 0.914209723f, 0.912878692f, 0.911537826f, + 0.910187304f, 0.908826947f, 0.907456875f, 0.906077087f, 0.904687583f, 0.903288484f, 0.901879609f, 0.900461137f, 0.899032950f, 0.897595286f, + 0.896147847f, 0.894690871f, 0.893224299f, 0.891748130f, 0.890262425f, 0.888767183f, 0.887262583f, 0.885748327f, 0.884224534f, 0.882691383f, + 0.881148815f, 0.879596710f, 0.878035188f, 0.876464248f, 0.874883950f, 0.873294294f, 0.871695280f, 0.870087028f, 0.868469357f, 0.866842330f, + 0.865206063f, 0.863560557f, 0.861905754f, 0.860241890f, 0.858568668f, 0.856886268f, 0.855194628f, 0.853493869f, 0.851784110f, 0.850065112f, + 0.848336995f, 0.846599758f, 0.844853640f, 0.843098342f, 0.841333985f, 0.839560628f, 0.837778270f, 0.835986972f, 0.834186673f, 0.832377613f, + 0.830559492f, 0.828732491f, 0.826896548f, 0.825051844f, 0.823198259f, 0.821335852f, 0.819464624f, 0.817584813f, 0.815696061f, 0.813798606f, + 0.811892450f, 0.809977591f, 0.808054030f, 0.806121826f, 0.804181159f, 0.802231669f, 0.800273657f, 0.798307061f, 0.796332061f, 0.794348359f, + 0.792356133f, 0.790355623f, 0.788346469f, 0.786328912f, 0.784302890f, 0.782268524f, 0.780225694f, 0.778174579f, 0.776115119f, 0.774047494f, + 0.771971405f, 0.769887090f, 0.767794490f, 0.765693665f, 0.763584673f, 0.761467457f, 0.759342313f, 0.757208824f, 0.755067229f, 0.752917588f, + 0.750759840f, 0.748594046f, 0.746420264f, 0.744238496f, 0.742048919f, 0.739851236f, 0.737645745f, 0.735432208f, 0.733210862f, 0.730981588f, + 0.728744507f, 0.726499796f, 0.724247098f, 0.721986711f, 0.719718575f, 0.717442691f, 0.715159178f, 0.712867975f, 0.710569263f, 0.708262861f, + 0.705948830f, 0.703627229f, 0.701298118f, 0.698961437f, 0.696617365f, 0.694265783f, 0.691906929f, 0.689540505f, 0.687166691f, 0.684785485f, + 0.682397008f, 0.680001199f, 0.677598119f, 0.675188124f, 0.672770500f, 0.670345724f, 0.667913795f, 0.665474653f, 0.663028419f, 0.660575032f, + 0.658114791f, 0.655647337f, 0.653172851f, 0.650691390f, 0.648202896f, 0.645707548f, 0.643205225f, 0.640696049f, 0.638180137f, 0.635657251f, + 0.633127570f, 0.630591094f, 0.628047824f, 0.625497878f, 0.622941196f, 0.620378077f, 0.617808104f, 0.615231514f, 0.612648308f, 0.610058606f, + 0.607462287f, 0.604859710f, 0.602250636f, 0.599634945f, 0.597012818f, 0.594384313f, 0.591749430f, 0.589108169f, 0.586460650f, 0.583806813f, + 0.581146955f, 0.578480661f, 0.575808167f, 0.573129535f, 0.570444763f, 0.567753851f, 0.565056860f, 0.562354028f, 0.559644997f, 0.556929946f, + 0.554208934f, 0.551481962f, 0.548749089f, 0.546010375f, 0.543265820f, 0.540515602f, 0.537759423f, 0.534997463f, 0.532229841f, 0.529456675f, + 0.526677608f, 0.523892939f, 0.521102846f, 0.518306971f, 0.515505552f, 0.512698591f, 0.509886146f, 0.507068276f, 0.504244924f, 0.501416445f, + 0.498582333f, 0.495742887f, 0.492898136f, 0.490048110f, 0.487192839f, 0.484332353f, 0.481466681f, 0.478596061f, 0.475720108f, 0.472839057f, + 0.469952941f, 0.467061788f, 0.464165628f, 0.461264521f, 0.458358675f, 0.455447704f, 0.452532053f, 0.449611366f, 0.446685851f, 0.443755567f, + 0.440820515f, 0.437880963f, 0.434936523f, 0.431987405f, 0.429033667f, 0.426075339f, 0.423112422f, 0.420145005f, 0.417173088f, 0.414196908f, + 0.411216080f, 0.408230841f, 0.405241221f, 0.402247280f, 0.399249017f, 0.396246493f, 0.393239945f, 0.390228957f, 0.387213796f, 0.384194493f, + 0.381171048f, 0.378143549f, 0.375111997f, 0.372076422f, 0.369037300f, 0.365993798f, 0.362946361f, 0.359895051f, 0.356839865f, 0.353780866f, + 0.350718081f, 0.347651780f, 0.344581515f, 0.341507554f, 0.338429958f, 0.335348725f, 0.332263887f, 0.329175502f, 0.326083839f, 0.322988421f, + 0.319889575f, 0.316787302f, 0.313681602f, 0.310572565f, 0.307460219f, 0.304344565f, 0.301225871f, 0.298103720f, 0.294978380f, 0.291849911f, + 0.288718283f, 0.285583586f, 0.282446027f, 0.279305458f, 0.276161671f, 0.273014933f, 0.269865274f, 0.266712725f, 0.263557315f, 0.260399073f, + 0.257238269f, 0.254074514f, 0.250908017f, 0.247738823f, 0.244566977f, 0.241392523f, 0.238215476f, 0.235035881f, 0.231854007f, 0.228669405f, + 0.225482360f, 0.222292900f, 0.219101071f, 0.215906888f, 0.212710381f, 0.209511846f, 0.206310824f, 0.203107595f, 0.199902192f, 0.196694881f, + 0.193485230f, 0.190273508f, 0.187059984f, 0.183844209f, 0.180626482f, 0.177406818f, 0.174185246f, 0.170961812f, 0.167736545f, 0.164509490f, + 0.161280900f, 0.158050358f, 0.154818118f, 0.151584208f, 0.148348689f, 0.145111576f, 0.141872913f, 0.138632968f, 0.135391295f, 0.132148176f, + 0.128903642f, 0.125657722f, 0.122410461f, 0.119161889f, 0.115912043f, 0.112661190f, 0.109408893f, 0.106155664f, 0.102901056f, 0.0996453464f, + 0.0963885784f, 0.0931307673f, 0.0898722038f, 0.0866124406f, 0.0833517462f, 0.0800901577f, 0.0768277124f, 0.0735644475f, 0.0703003928f, 0.0670358241f, + 0.0637702942f, 0.0605040900f, 0.0572372340f, 0.0539697632f, 0.0507017188f, 0.0474331267f, 0.0441640280f, 0.0408946946f, 0.0376246870f, 0.0343542770f, + 0.0310834963f, 0.0278123822f, 0.0245409720f, 0.0212692991f, 0.0179976355f, 0.0147257810f, 0.0114535289f, 0.00818115473f, 0.00490869302f, 0.00163617858f +}; + + +/* clang-format on */ diff --git a/lib_enc/ivas_rom_enc.h b/lib_enc/ivas_rom_enc.h new file mode 100644 index 0000000000..7194264225 --- /dev/null +++ b/lib_enc/ivas_rom_enc.h @@ -0,0 +1,133 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_ROM_ENC_H +#define IVAS_ROM_ENC_H + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "ivas_cnst.h" + + +/*----------------------------------------------------------------------------------* + * Stereo classifiers + *----------------------------------------------------------------------------------*/ + +extern const int16_t unclr_isel_td[]; +extern const float unclr_mean_td[]; +extern const float unclr_scale_td[]; +extern const float unclr_coef_td[]; + +extern const int16_t xtalk_isel_td[]; +extern const float xtalk_mean_td[]; +extern const float xtalk_scale_td[]; +extern const float xtalk_coef_td[]; + +extern const int16_t xtalk_isel_dft[]; +extern const float xtalk_mean_dft[]; +extern const float xtalk_scale_dft[]; +extern const float xtalk_coef_dft[]; + +extern const int16_t unclr_isel_dft[]; +extern const float unclr_mean_dft[]; +extern const float unclr_scale_dft[]; +extern const float unclr_coef_dft[]; + +/*----------------------------------------------------------------------------------* + * Stereo IC-BWE ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float icbwe_thr_TDM[]; +extern const float icbwe_thr_DFT[]; +extern const float icbwe_regressionValuesTDM[]; +extern const float icbwe_regressionValuesDFT[]; + +/*----------------------------------------------------------------------------------* + * DFT stereo ROM tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t itd_vad_band_tbl[]; +extern const int16_t ild_q[]; + +extern const float Wn_table[]; + +extern const float win_ana_8k[STEREO_DFT_OVL_8k]; +extern const float win_ana_12k8[STEREO_DFT_OVL_12k8]; +extern const float win_ana_16k[STEREO_DFT_OVL_16k]; +extern const float win_ana_32k[STEREO_DFT_OVL_32k]; +extern const float win_ana_48k[STEREO_DFT_OVL_MAX]; + +extern const float win_syn_8k[STEREO_DFT_OVL_8k]; +extern const float win_syn_12k8[STEREO_DFT_OVL_12k8]; +extern const float win_syn_16k[STEREO_DFT_OVL_16k]; +extern const float win_syn_32k[STEREO_DFT_OVL_32k]; +extern const float win_syn_48k[STEREO_DFT_OVL_MAX]; + +extern const float win_mdct_8k[STEREO_DFT_OVL_8k]; + +/*----------------------------------------------------------------------------------* + * Range Coder ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float ari_bit_estimate_s17_LC[RANGE_N_CONTEXT][RANGE_N_SYMBOLS]; + +/*----------------------------------------------------------------------------------* + * ECLVQ Stereo ROM tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t log2_1px_table[65]; +extern const float log2TB[ECSQ_log2TB_SIZE]; +extern const float ECSQ_log2_fact[1 + ECSQ_SEGMENT_SIZE]; +extern const uint16_t ECSQ_tab_param[ECSQ_CONFIG_COUNT][1 + ECSQ_PARAM_COUNT]; +extern const uint16_t *const ECSQ_tab_abs_lsbs[1 + 4]; +extern const uint16_t ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE]; + + +/*----------------------------------------------------------------------------------* + * Stereo downmix to EVS ROM tables + *----------------------------------------------------------------------------------*/ + +extern const float Stereo_dmx_s_wnd_coef_eps_16k[L_FRAME16k * 3 / 4]; +extern const float Stereo_dmx_s_wnd_coef_eps_32k[L_FRAME32k * 3 / 4]; +extern const float Stereo_dmx_s_wnd_coef_eps_48k[L_FRAME48k * 3 / 4]; +extern const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 4]; +extern const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 4]; +extern const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 4]; +extern const float Stereo_dmx_wnd_coef_32k[L_FRAME32k]; +extern const float Stereo_dmx_wnd_coef_48k[L_FRAME48k]; + + +#endif diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c new file mode 100644 index 0000000000..b28565ecac --- /dev/null +++ b/lib_enc/ivas_sba_enc.c @@ -0,0 +1,531 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ +static void ivas_sba_dmx_enc( float sba_data[][L_FRAME48k], const int16_t nchan_transport, const int16_t input_frame ); + +/*-------------------------------------------------------------------* + * ivas_sba_getTCs() + * + * Get TCs from Ambisonics signal in ACN + *-------------------------------------------------------------------*/ + +void ivas_sba_getTCs( + float sba_data[][L_FRAME48k], /* i : SBA signals */ + Encoder_Struct *st_ivas, /* i/o: Encoder struct */ + const int16_t input_frame /* i : frame length */ +) +{ + ivas_sba_zero_vert_comp( sba_data, st_ivas->hEncoderConfig->sba_order, st_ivas->hEncoderConfig->sba_planar, input_frame ); + + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + st_ivas->nchan_transport = ivas_get_spar_num_TCs( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); + + if ( st_ivas->nchan_transport >= 3 ) + { + /*convert WYZX downmix to WYXZ*/ + int16_t i = 0; + float temp; + for ( i = 0; i < input_frame; i++ ) + { + temp = sba_data[2][i]; + sba_data[2][i] = sba_data[3][i]; + sba_data[3][i] = temp; + } + } + } + else + { + st_ivas->nchan_transport = ivas_dirac_getNumTransportChannels( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->hEncoderConfig->sba_order, st_ivas->hEncoderConfig->sba_planar ); + ivas_sba_dmx_enc( sba_data, st_ivas->nchan_transport, input_frame ); + } + +#ifdef DEBUG_MODE_DIRAC + for ( int16_t n = 0; n < st_ivas->nchan_transport; n++ ) + { + int16_t tmp[L_FRAME48k]; + char file_name[50] = { 0 }; + + sprintf( file_name, "./res/ivas_dirac_enc_%d.%d.pcm", n, (int16_t) ( input_frame * 0.05 ) ); + for ( int16_t i = 0; i < input_frame; i++ ) + { + tmp[i] = (int16_t) ( sba_data[n][i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, file_name ); + } +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_dmx_enc() + * + * + *-------------------------------------------------------------------*/ + +static void ivas_sba_dmx_enc( + float sba_data[][L_FRAME48k], /* i : SBA signals */ + const int16_t nchan_transport, /* i : number of transport channels */ + const int16_t input_frame /* i : frame length */ +) +{ + int16_t i; + float dmx_l, dmx_r; + float a, b; + float tmp_f[DIRAC_MAX_TRANS_CHANS]; + + if ( nchan_transport >= 7 ) + { + for ( i = 0; i < input_frame; i++ ) + { + tmp_f[0] = 0.282095f * sba_data[0][i] + 0.000000f * sba_data[1][i] + 0.420663f * sba_data[3][i] + 0.000000f * sba_data[4][i] + 0.334240f * sba_data[8][i] + 0.000000f * sba_data[9][i] + 0.179369f * sba_data[15][i]; + tmp_f[1] = 0.282095f * sba_data[0][i] + 0.328887f * sba_data[1][i] + 0.262279f * sba_data[3][i] + 0.325860f * sba_data[4][i] + -0.074375f * sba_data[8][i] + 0.077825f * sba_data[9][i] + -0.161606f * sba_data[15][i]; + tmp_f[2] = 0.282095f * sba_data[0][i] + 0.410116f * sba_data[1][i] + -0.093606f * sba_data[3][i] + -0.145021f * sba_data[4][i] + -0.301140f * sba_data[8][i] + -0.140237f * sba_data[9][i] + 0.111835f * sba_data[15][i]; + tmp_f[3] = 0.282095f * sba_data[0][i] + 0.182519f * sba_data[1][i] + -0.379004f * sba_data[3][i] + -0.261320f * sba_data[4][i] + 0.208395f * sba_data[8][i] + 0.174872f * sba_data[9][i] + -0.039913f * sba_data[15][i]; + tmp_f[4] = 0.282095f * sba_data[0][i] + -0.182519f * sba_data[1][i] + -0.379004f * sba_data[3][i] + 0.261320f * sba_data[4][i] + 0.208395f * sba_data[8][i] + -0.174872f * sba_data[9][i] + -0.039913f * sba_data[15][i]; + tmp_f[5] = 0.282095f * sba_data[0][i] + -0.410116f * sba_data[1][i] + -0.093606f * sba_data[3][i] + 0.145021f * sba_data[4][i] + -0.301140f * sba_data[8][i] + 0.140237f * sba_data[9][i] + 0.111835f * sba_data[15][i]; + tmp_f[6] = 0.282095f * sba_data[0][i] + -0.328887f * sba_data[1][i] + 0.262279f * sba_data[3][i] + -0.325860f * sba_data[4][i] + -0.074375f * sba_data[8][i] + -0.077825f * sba_data[9][i] + -0.161606f * sba_data[15][i]; + sba_data[7][i] = sba_data[2][i]; /* will be dropped for planarSBA */ + sba_data[0][i] = tmp_f[0]; + sba_data[1][i] = tmp_f[1]; + sba_data[2][i] = tmp_f[2]; + sba_data[3][i] = tmp_f[3]; + sba_data[4][i] = tmp_f[4]; + sba_data[5][i] = tmp_f[5]; + sba_data[6][i] = tmp_f[6]; + } + + return; + } + else if ( nchan_transport >= 5 ) + { + for ( i = 0; i < input_frame; i++ ) + { + tmp_f[0] = 0.282095f * sba_data[0][i] + 0.000000f * sba_data[1][i] + 0.378166f * sba_data[3][i] + 0.000000f * sba_data[4][i] + 0.217722f * sba_data[8][i]; + tmp_f[1] = 0.282095f * sba_data[0][i] + 0.359658f * sba_data[1][i] + 0.116860f * sba_data[3][i] + 0.127974f * sba_data[4][i] + -0.176140f * sba_data[8][i]; + tmp_f[2] = 0.282095f * sba_data[0][i] + 0.222281f * sba_data[1][i] + -0.305943f * sba_data[3][i] + -0.207066f * sba_data[4][i] + 0.067280f * sba_data[8][i]; + tmp_f[3] = 0.282095f * sba_data[0][i] + -0.222281f * sba_data[1][i] + -0.305943f * sba_data[3][i] + 0.207066f * sba_data[4][i] + 0.067280f * sba_data[8][i]; + tmp_f[4] = 0.282095f * sba_data[0][i] + -0.359658f * sba_data[1][i] + 0.116860f * sba_data[3][i] + -0.127974f * sba_data[4][i] + -0.176140f * sba_data[8][i]; + sba_data[5][i] = sba_data[2][i]; /* will be dropped for planarSBA */ + sba_data[0][i] = tmp_f[0]; + sba_data[1][i] = tmp_f[1]; + sba_data[2][i] = tmp_f[2]; + sba_data[3][i] = tmp_f[3]; + sba_data[4][i] = tmp_f[4]; + } + + return; + } + else if ( nchan_transport >= 3 ) + { + for ( i = 0; i < input_frame; i++ ) + { + dmx_l = 0.5f * sba_data[1][i]; + dmx_r = 0.5f * sba_data[2][i]; + a = 0.5f * sba_data[0][i]; + b = 0.25f * sba_data[3][i]; + + sba_data[0][i] = a + b; + sba_data[1][i] = sba_data[0][i] - dmx_l; + sba_data[0][i] += dmx_l; + + sba_data[2][i] = a - b; + sba_data[3][i] = sba_data[2][i] - dmx_r; /* will be dropped for planarSBA & irrelevant*/ + sba_data[2][i] += dmx_r; /* irrelevant for planarSBA*/ + } + + return; + } + else if ( nchan_transport == 2 ) + { + for ( i = 0; i < input_frame; i++ ) + { + dmx_l = 0.5f * ( sba_data[0][i] + sba_data[1][i] ); /* cardioid_left = W + Y */ + sba_data[1][i] = 0.5f * ( sba_data[0][i] - sba_data[1][i] ); /* cardioid_right = W - Y */ + sba_data[0][i] = dmx_l; + } + + return; + } + else if ( nchan_transport == 1 ) + { + /* do nothing; simply use omni */ + return; + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_sba_enc_reconfigure() + * + * Reconfigure IVAS SBA encoder + *-------------------------------------------------------------------*/ + +ivas_error ivas_sba_enc_reconfigure( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +) +{ + int16_t ntransport; + int16_t ntransport_old; + int16_t nSCE_old; + int16_t nCPE_old; + int16_t sce_id; + int16_t cpe_id; + int16_t n; + Indice *ind_list_metadata; + int32_t ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; + + if ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) + { + ntransport = st_ivas->nchan_transport; + ntransport_old = st_ivas->nchan_transport; + nCPE_old = st_ivas->nCPE; + nSCE_old = st_ivas->nSCE; + ind_list_metadata = NULL; + + ivas_dirac_enc_reconfigure( st_ivas ); + ntransport = st_ivas->nchan_transport; + + if ( ntransport == ntransport_old ) + { + for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + { + copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); + st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + copy_encoder_config( st_ivas, st_ivas->hCPE[cpe_id]->hCoreCoder[n], 0 ); + + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + } + + if ( st_ivas->nCPE > 1 ) + { + if ( ( error = mct_enc_reconfigure( st_ivas, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else + { + Indice *ind_list; + int16_t nb_bits_tot; + int16_t next_ind; + int16_t last_ind; + BSTR_ENC_HANDLE hBstr; + BSTR_ENC_HANDLE hMetaData; + + ind_list = NULL; + hBstr = NULL; + hMetaData = NULL; + + /* get the index list pointers */ + if ( nSCE_old ) + { + hBstr = st_ivas->hSCE[0]->hCoreCoder[0]->hBstr; + hMetaData = st_ivas->hSCE[0]->hMetaData; + } + else if ( nCPE_old ) + { + hBstr = st_ivas->hCPE[0]->hCoreCoder[0]->hBstr; + hMetaData = st_ivas->hCPE[nCPE_old - 1]->hMetaData; + } +#ifdef DEBUGGING + else + { + assert( 0 && "At least one SCE or one CPE should have existed before!\n" ); + } +#endif + + /* save bitstream information */ + ind_list = hBstr->ind_list; + nb_bits_tot = hBstr->nb_bits_tot; + next_ind = hBstr->next_ind; + last_ind = hBstr->last_ind; + ind_list_metadata = hMetaData->ind_list; + + /* destroy superfluous core coder elements */ + for ( sce_id = st_ivas->nSCE; sce_id < nSCE_old; sce_id++ ) + { + destroy_sce_enc( st_ivas->hSCE[sce_id] ); + st_ivas->hSCE[sce_id] = NULL; + } + + for ( cpe_id = st_ivas->nCPE; cpe_id < nCPE_old; cpe_id++ ) + { + destroy_cpe_enc( st_ivas->hCPE[cpe_id] ); + st_ivas->hCPE[cpe_id] = NULL; + } + + if ( st_ivas->nCPE <= 1 && st_ivas->hMCT != NULL ) + { + ivas_mct_enc_close( st_ivas->hMCT ); + st_ivas->hMCT = NULL; + } + + /* special case, if we have MCT now and had a single CPE before, remove the MDCT Stereo handles */ + if ( st_ivas->nCPE > 1 && nCPE_old == 1 ) + { + count_free( st_ivas->hCPE[0]->hStereoMdct ); + st_ivas->hCPE[0]->hStereoMdct = NULL; + } + + /* create missing core coder elements and set element bitrates for alrady existing ones */ + if ( st_ivas->nSCE > 0 ) + { + int16_t nSCE_existing; + nSCE_existing = min( nSCE_old, st_ivas->nSCE ); + for ( sce_id = 0; sce_id < nSCE_existing; sce_id++ ) + { + copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); + st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + for ( sce_id = nSCE_existing; sce_id < st_ivas->nSCE; sce_id++ ) + { + if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list + sce_id * MAX_NUM_INDICES; + + /* only reset indices if it is not the first index list, this already contains the IVAS format bits */ + if ( sce_id > 0 ) + { + reset_indices_enc( st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr, MAX_NUM_INDICES ); + } + else + { + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->last_ind = last_ind; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->nb_bits_tot = nb_bits_tot; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->next_ind = next_ind; + } + + st_ivas->hSCE[sce_id]->hMetaData->ind_list = ind_list_metadata + sce_id * MAX_BITS_METADATA; + reset_indices_enc( st_ivas->hSCE[sce_id]->hMetaData, MAX_BITS_METADATA ); + } + } + + if ( st_ivas->nCPE > 0 ) + { + int16_t nCPE_existing; + nCPE_existing = min( nCPE_old, st_ivas->nCPE ); + for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ ) + { + st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + copy_encoder_config( st_ivas, st_ivas->hCPE[cpe_id]->hCoreCoder[n], 0 ); + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + } + } + + for ( cpe_id = nCPE_existing; cpe_id < st_ivas->nCPE; cpe_id++ ) + { + if ( ( error = create_cpe_enc( st_ivas, cpe_id, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* prepare bitstream buffers */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->ind_list = ind_list + ( cpe_id * CPE_CHANNELS + n ) * MAX_NUM_INDICES; + if ( cpe_id * CPE_CHANNELS + n > 0 ) + { + reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, MAX_NUM_INDICES ); + } + else + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->last_ind = last_ind; + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->nb_bits_tot = nb_bits_tot; + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->next_ind = next_ind; + } + if ( st_ivas->hEncoderConfig->Opt_DTX_ON ) + { + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_spar_flag = 1; + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_dirac_flag = 1; + } + else + { + st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_dirac_flag = 1; + } + } + } + } + } + + if ( st_ivas->nCPE > 1 && nCPE_old <= 1 ) + { + if ( nCPE_old == 1 ) + { + /* set correct nominal bitrates and igf config already here, needed for the correct init of the MDCT Stereo handles for MCT */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[0]->hCoreCoder[n]->total_brate = st_ivas->hCPE[0]->element_brate; + + st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[0]->element_brate / FRAMES_PER_SEC ); + st_ivas->hCPE[0]->hCoreCoder[n]->igf = getIgfPresent( st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, + st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal * FRAMES_PER_SEC, + st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, + st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode, + st_ivas->hCPE[0]->hCoreCoder[n]->mct_chan_mode ); + + if ( st_ivas->hCPE[0]->hCoreCoder[n]->igf ) + { + IGFEncSetMode( st_ivas->hCPE[0]->hCoreCoder[n]->hIGFEnc, + st_ivas->hCPE[0]->element_brate, + st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, + st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, + st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode ); + } + } + } + + if ( ( error = create_mct_enc( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else if ( st_ivas->hMCT != NULL && st_ivas->nCPE > 1 ) + { + if ( ( error = mct_enc_reconfigure( st_ivas, st_ivas->nCPE != nCPE_old ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* metadata handling for CPEs */ + if ( st_ivas->nCPE > 0 ) + { + if ( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData == NULL ) + { + if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MetaData structure\n" ) ); + } + } + + st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData->ind_list = ind_list_metadata; + reset_indices_enc( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData, MAX_BITS_METADATA ); + + for ( cpe_id = 0; cpe_id < st_ivas->nCPE - 1; cpe_id++ ) + { + if ( st_ivas->hCPE[cpe_id]->hMetaData != NULL ) + { + count_free( st_ivas->hCPE[cpe_id]->hMetaData ); + st_ivas->hCPE[cpe_id]->hMetaData = NULL; + } + } + } + + /* special case, if we have a single CPE and had MCT before we need to init the MDCT stereo handles here */ + if ( st_ivas->nCPE == 1 && nCPE_old > 1 ) + { + if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + + /* set correct nominal bitrates and igf config already here, needed for the correct init of the MDCT Stereo handle */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + st_ivas->hCPE[0]->hCoreCoder[n]->total_brate = st_ivas->hCPE[0]->element_brate; + + st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[0]->element_brate / FRAMES_PER_SEC ); + st_ivas->hCPE[0]->hCoreCoder[n]->igf = getIgfPresent( st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, + st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal * FRAMES_PER_SEC, + st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, + st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode, + st_ivas->hCPE[0]->hCoreCoder[n]->mct_chan_mode ); + + if ( st_ivas->hCPE[0]->hCoreCoder[n]->igf ) + { + IGFEncSetMode( st_ivas->hCPE[0]->hCoreCoder[n]->hIGFEnc, + st_ivas->hCPE[0]->element_brate, + st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, + st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, + st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode ); + } + /* reset mct_chan_mode */ + st_ivas->hCPE[0]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + } + + initMdctStereoEncData( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct, st_ivas->hEncoderConfig->ivas_format, st_ivas->hCPE[st_ivas->nCPE - 1]->element_mode, st_ivas->hCPE[st_ivas->nCPE - 1]->element_brate, st_ivas->hEncoderConfig->max_bwidth, 0, NULL, 1 ); + } + } + } + + return error; +} diff --git a/lib_enc/ivas_sce_enc.c b/lib_enc/ivas_sce_enc.c new file mode 100644 index 0000000000..a8a43ccf2b --- /dev/null +++ b/lib_enc/ivas_sce_enc.c @@ -0,0 +1,368 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * ivas_sce_enc() + * + * Single Channel Element (SCE) encoding routine + *-------------------------------------------------------------------*/ + +ivas_error ivas_sce_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t sce_id, /* i : SCE # identifier */ + const float data_f[], /* i : input signal for single channel */ + const int16_t input_frame, /* i : input frame length per channel */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + float old_inp_12k8[1][L_INP_12k8]; /* buffer of input signal @ 12k8 */ + float old_inp_16k[1][L_INP]; /* buffer of input signal @ 16kHz */ + float Etot[1]; /* total energy; correlation shift */ + float ener[1]; /* residual energy from Levinson-Durbin */ + float relE[1]; /* frame relative energy */ + float A[1][NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ + float Aw[1][NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ + float epsP[1][M + 1]; /* LP prediction errors */ + float lsp_new[1][M]; /* LSPs at the end of the frame */ + float lsp_mid[1][M]; /* ISPs in the middle of the frame */ + int16_t vad_hover_flag[1]; /* VAD hangover flag */ + int16_t attack_flag[1]; /* attack flag (GSC or TC) */ + float realBuffer[1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ + float imagBuffer[1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ + float old_wsp[1][L_WSP]; /* old weighted input signal */ + float pitch_fr[1][NB_SUBFR]; /* fractional pitch values */ + float voicing_fr[1][NB_SUBFR]; /* fractional pitch gains */ + int16_t loc_harm[1]; /* harmonicity flag */ + float cor_map_sum[1]; /* speech/music clasif. parameter */ + int16_t vad_flag_dtx[1]; /* HE-SAD flag with additional DTX HO */ + float enerBuffer[1][CLDFB_NO_CHANNELS_MAX]; /* energy buffer */ + float currFlatness[1]; /* flatness parameter */ + float fft_buff[1][2 * L_FFT]; /* FFT buffer */ + float fr_bands[1][2 * NB_BANDS]; /* energy in frequency bands */ + float Etot_LR[1]; /* total energy */ + float lf_E[1][2 * VOIC_BINS]; /* per bin spectrum energy in lf */ + int16_t localVAD_HE_SAD[1]; /* local HE SAD */ + SCE_ENC_HANDLE hSCE; + Encoder_State *st; + IVAS_FORMAT ivas_format; + ivas_error error; + int16_t flag_16k_smc; + + wmops_sub_start( "ivas_sce_enc" ); + + error = IVAS_ERR_OK; + + hSCE = st_ivas->hSCE[sce_id]; + st = hSCE->hCoreCoder[0]; + ivas_format = st_ivas->hEncoderConfig->ivas_format; + + /*------------------------------------------------------------------* + * Initialization - general + *-----------------------------------------------------------------*/ + + mvr2r( data_f, st->input, input_frame ); + + st->element_mode = IVAS_SCE; + + /*------------------------------------------------------------------* + * SCE initialization - core coder + *-----------------------------------------------------------------*/ + + st->idchan = 0; + st->core = -1; + st->core_brate = -1; /* updated in dtx() */ + st->max_bwidth = st_ivas->hEncoderConfig->max_bwidth; + st->input_bwidth = st->last_input_bwidth; /* updated in BWD */ + st->bwidth = st->last_bwidth; /* updated in BWD */ + st->rate_switching_reset = 0; +#ifdef DEBUGGING + st->force = st_ivas->hEncoderConfig->force; + st->id_element = sce_id; +#endif + + /*---------------------------------------------------------------* + * Time Domain Transient Detector + *---------------------------------------------------------------*/ + + if ( ivas_format != MC_FORMAT || st_ivas->mc_mode != MC_MODE_PARAMMC ) + { + RunTransientDetection( st->input, input_frame, st->hTranDet ); + } + + currFlatness[0] = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 0 ); + + /*----------------------------------------------------------------* + * Configuration of core encoder + *----------------------------------------------------------------*/ + + /* Force to MODE1 in IVAS */ + st->codec_mode = MODE1; + + /* set "bits_frame_nominal" */ + if ( st_ivas->hQMetaData != NULL && st_ivas->hSpar == NULL ) + { + if ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->hEncoderConfig->ivas_total_brate >= MCMASA_SEPARATE_BRATE ) + { + st->bits_frame_nominal = (int16_t) ( hSCE->element_brate / FRAMES_PER_SEC ); + } + else + { + st->bits_frame_nominal = st_ivas->hQMetaData->bits_frame_nominal; + } + } + else if ( st_ivas->hSpar != NULL ) + { + st->bits_frame_nominal = (int16_t) ( st_ivas->hSpar->hSparFoa->core_nominal_brate / FRAMES_PER_SEC ); + } + else + { + st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); + } + + /* set "total_brate" */ + st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; + +#ifdef DEBUG_MODE_INFO + dbgwrite( st->input - NS2SA( st->input_Fs, ACELP_LOOK_NS ), 4, input_frame, 1, "res/input_DMX" ); +#endif + /* set flag for sampling rate of OL S/M classifier */ + flag_16k_smc = ( st_ivas->hEncoderConfig->ivas_format == SBA_FORMAT && ( st_ivas->hEncoderConfig->ivas_total_brate == IVAS_24k4 || st_ivas->hEncoderConfig->ivas_total_brate == IVAS_32k ) ); + + /*----------------------------------------------------------------* + * Front Pre-processing + *----------------------------------------------------------------*/ + + if ( st_ivas->sba_mode == SBA_MODE_SPAR && st_ivas->hEncoderConfig->Opt_DTX_ON ) + { + st->dtx_sce_sba = 1; + } + + error = pre_proc_front_ivas( hSCE, NULL, hSCE->element_brate, nb_bits_metadata, input_frame, 0, old_inp_12k8[0], old_inp_16k[0], + &Etot[0], &ener[0], &relE[0], A[0], Aw[0], epsP[0], lsp_new[0], lsp_mid[0], + &vad_hover_flag[0], &attack_flag[0], realBuffer[0], imagBuffer[0], old_wsp[0], pitch_fr[0], voicing_fr[0], &loc_harm[0], &cor_map_sum[0], &vad_flag_dtx[0], enerBuffer[0], + fft_buff[0], A[0], lsp_new[0], currFlatness[0], 0, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, NULL, + flag_16k_smc, + st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->force_front_vad : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_dtx_flag : 0 ); + + if ( error != IVAS_ERR_OK ) + { + return error; + } + + /* sanity check -> DTX not supported for more than one SCEs/CPEs */ + if ( st_ivas->nSCE + st_ivas->nCPE > 1 ) + { + if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + st->core_brate = -1; + st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; + } + } + + /*----------------------------------------------------------------* + * Reset metadata + *----------------------------------------------------------------*/ + + reset_metadata_spatial( ivas_format, hSCE->hMetaData, hSCE->element_brate, &st->total_brate, st->core_brate, nb_bits_metadata, st_ivas->sba_mode, + IVAS_SCE ); + + /*----------------------------------------------------------------* + * Write IVAS format signalling in SID frames + *----------------------------------------------------------------*/ + + if ( st->core_brate == SID_2k40 && ( ivas_format != SBA_FORMAT || st_ivas->sba_mode != SBA_MODE_SPAR ) ) + { + ivas_write_format_sid( ivas_format, IVAS_SCE, st->hBstr ); + } + + /*----------------------------------------------------------------* + * Core codec configuration + *----------------------------------------------------------------*/ + + /* set ACELP@12k8 / ACELP@16k flag for flexible ACELP core */ + if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) + { + st->flag_ACELP16k = set_ACELP_flag( IVAS_SCE, hSCE->element_brate, st->core_brate, 0, 0, -1, -1 ); + } + else + { + st->flag_ACELP16k = set_ACELP_flag( IVAS_SCE, hSCE->element_brate, st->total_brate, 0, 0, -1, -1 ); + } + + /* modify the coder_type depending on the total_brate per channel */ + coder_type_modif( st, relE[0] ); + + /*----------------------------------------------------------------* + * Encoder + *----------------------------------------------------------------*/ + + if ( ( error = ivas_core_enc( hSCE, NULL, NULL, 1, old_inp_12k8, old_inp_16k, Etot, ener, A, Aw, epsP, lsp_new, lsp_mid, vad_hover_flag, attack_flag, realBuffer, imagBuffer, old_wsp, loc_harm, cor_map_sum, vad_flag_dtx, enerBuffer, fft_buff, 0, + flag_16k_smc ) ) != IVAS_ERR_OK ) + { + return error; + } + + + /*----------------------------------------------------------------* + * Common updates + *----------------------------------------------------------------*/ + + /* update input samples buffer */ + mvr2r( st->input, st->old_input_signal, input_frame ); + + wmops_sub_end(); + + return error; +} + + +/*------------------------------------------------------------------------- + * create_sce_enc() + * + * Create, allocate and initialize IVAS encoder SCE handle + *-------------------------------------------------------------------------*/ + +ivas_error create_sce_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const int16_t sce_id, /* i : SCE # identifier */ + const int32_t element_brate /* i : element bitrate */ +) +{ + SCE_ENC_HANDLE hSCE; + Encoder_State *st; + ivas_error error; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * Allocate SCE handle + *-----------------------------------------------------------------*/ + + if ( ( hSCE = (SCE_ENC_HANDLE) count_malloc( sizeof( SCE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SCE\n" ) ); + } + + /*-----------------------------------------------------------------* + * Initialization - general parameters + *-----------------------------------------------------------------*/ + + hSCE->sce_id = sce_id; + hSCE->element_brate = element_brate; + + /*-----------------------------------------------------------------* + * Metadata: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( st_ivas->hEncoderConfig->ivas_format != MONO_FORMAT ) + { + if ( ( hSCE->hMetaData = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MetaData structure\n" ) ); + } + } + else + { + hSCE->hMetaData = NULL; + } + + /*-----------------------------------------------------------------* + * Core Coder, 1 instance: allocate and initialize + *-----------------------------------------------------------------*/ + + if ( ( st = (ENC_CORE_HANDLE) count_malloc( sizeof( Encoder_State ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); + } + + copy_encoder_config( st_ivas, st, 1 ); + + st->total_brate = hSCE->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; + + if ( ( error = init_encoder( st, 0, st_ivas->hEncoderConfig->var_SID_rate_flag, st_ivas->hEncoderConfig->interval_SID, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + hSCE->hCoreCoder[0] = st; + + st_ivas->hSCE[sce_id] = hSCE; + + return error; +} + + +/*------------------------------------------------------------------------- + * destroy_sce_enc() + * + * Destroy and deallocate IVAS encoder SCE handle + *-------------------------------------------------------------------------*/ + +void destroy_sce_enc( + SCE_ENC_HANDLE hSCE /* i/o: SCE encoder structure */ +) +{ + Encoder_State *st; + + st = hSCE->hCoreCoder[0]; + + if ( st != NULL ) + { + destroy_core_enc( st ); + st = NULL; + } + + if ( hSCE->hMetaData != NULL ) + { + count_free( hSCE->hMetaData ); + hSCE->hMetaData = NULL; + } + + count_free( hSCE ); + + return; +} diff --git a/lib_enc/ivas_sns_enc.c b/lib_enc/ivas_sns_enc.c new file mode 100644 index 0000000000..1aeac19c57 --- /dev/null +++ b/lib_enc/ivas_sns_enc.c @@ -0,0 +1,549 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +#ifndef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT +#define SNS_NPTS 16 /* Number of downsampled SNS parameters */ + +/*------------------------------------------------------------------- + * sns_compute_scf() + * + * + *-------------------------------------------------------------------*/ + +void sns_compute_scf( + float spectrum[], + const PsychoacousticParameters *pPsychParams, + const int16_t L_frame, + float *scf ) +{ + int16_t i, n, k; + float x[FDNS_NPTS], xs[FDNS_NPTS], sum, mean, xl4[SNS_NPTS], nf, xl[FDNS_NPTS]; + float tilt; + const uint8_t nBands = pPsychParams->nBands; + const uint8_t *bandLengths = pPsychParams->bandLengths; + int8_t bw = 0; + + + const float w_0 = 1.0f / 12.0f; + const float w_1 = 2.0f / 12.0f; + const float w_2 = 0.25f; /* 3.0f / 12.0f */ + const float w_3 = w_2; + const float w_4 = w_1; + const float w_5 = w_0; + + const float scale_log = INV_LOG_2 * 0.5f; + + assert( nBands == 64 ); + + set_f( x, 0.0f, FDNS_NPTS ); + + if ( bandLengths == NULL ) + { + bw = (int8_t) ( L_frame / nBands ); + /* Energy per band */ + k = 0; + for ( i = 0; i < nBands; ++i ) + { + x[i] = 0.0f; + for ( n = 0; n < bw; ++n, ++k ) + { + x[i] += spectrum[k]; + } + x[i] /= bw; + } + } + else + { + /* Energy per band */ + k = 0; + for ( i = 0; i < nBands; ++i ) + { + x[i] = 0.0f; + for ( n = 0; n < bandLengths[i]; ++n, ++k ) + { + x[i] += spectrum[k]; + } + x[i] /= bandLengths[i]; + } + } + + /* Smoothing */ + xs[0] = 0.75f * x[0] + 0.25f * x[1]; + + for ( i = 1; i < FDNS_NPTS - 1; i++ ) + { + xs[i] = 0.5f * x[i] + 0.25f * x[i - 1] + 0.25f * x[i + 1]; + } + + xs[FDNS_NPTS - 1] = 0.75f * x[FDNS_NPTS - 1] + 0.25f * x[FDNS_NPTS - 2]; + + /* Pre-emphasis */ + if ( L_frame == L_FRAME16k ) + { + tilt = 18.f; + } + else if ( L_frame == L_SPEC16k_EXT ) + { + tilt = 20.f; + } + else if ( L_frame == L_FRAME25_6k ) + { + tilt = 22.f; + } + else if ( L_frame == L_FRAME32k ) + { + tilt = 26.f; + } + else if ( L_frame == L_SPEC32k_EXT ) + { + tilt = 30.f; + } + else + { + tilt = 0.f; + assert( 0 && "illegal frame length in sns_compute_scf" ); + } + + for ( i = 0; i < FDNS_NPTS; i++ ) + { + xs[i] = xs[i] * powf( 10.0f, (float) i * (float) tilt / ( (float) FDNS_NPTS - 1.0f ) / 10.0f ); + } + + /* Noise floor at -40dB */ + sum = sum_f( xs, FDNS_NPTS ); + mean = sum / FDNS_NPTS; + + nf = mean * powf( 10.0f, -4.0f ); + nf = max( nf, powf( 2.0f, -32.0f ) ); + + + for ( i = 0; i < FDNS_NPTS; i++ ) + { + if ( xs[i] < nf ) + { + xs[i] = nf; + } + } + + /* Log-domain */ + for ( i = 0; i < FDNS_NPTS; i++ ) + { + xl[i] = logf( xs[i] ) * scale_log; + } + + /* Downsampling */ + xl4[0] = w_0 * xl[0] + + w_1 * xl[0] + + w_2 * xl[1] + + w_3 * xl[2] + + w_4 * xl[3] + + w_5 * xl[4]; + + + for ( n = 1; n < SNS_NPTS - 1; n++ ) + { + int16_t n4 = 4 * n; + xl4[n] = w_0 * xl[n4 - 1] + + w_1 * xl[n4] + + w_2 * xl[n4 + 1] + + w_3 * xl[n4 + 2] + + w_4 * xl[n4 + 3] + + w_5 * xl[n4 + 4]; + } + + xl4[SNS_NPTS - 1] = w_0 * xl[FDNS_NPTS - 5] + + w_1 * xl[FDNS_NPTS - 4] + + w_2 * xl[FDNS_NPTS - 3] + + w_3 * xl[FDNS_NPTS - 2] + + w_4 * xl[FDNS_NPTS - 1] + + w_5 * xl[FDNS_NPTS - 1]; + + /* Remove mean and scaling */ + sum = sum_f( xl4, SNS_NPTS ); + mean = sum / SNS_NPTS; + + for ( i = 0; i < SNS_NPTS; i++ ) + { + scf[i] = 0.85f * ( xl4[i] - mean ); + } + + return; +} +#endif + + +/*------------------------------------------------------------------- + * sns_1st_cod() + * + * + *-------------------------------------------------------------------*/ + +/* r : codebook index */ +static int16_t sns_1st_cod( + const float *sns, /* i : vector to quantize */ + float *snsq /* i/o: i:prediction o:quantized sns */ +) +{ + int16_t i, j, index; + int16_t j0, j1, index0, index1; + float dist_min, dist, temp; + const float *p_dico; + + j0 = 0; + j1 = M / 2; + dist_min = 1.0e30f; + p_dico = sns_vq_cdk1; + index0 = 0; + + for ( i = 0; i < 32; i++ ) + { + dist = 0.0; + + for ( j = j0; j < j1; j++ ) + { + temp = sns[j] - *p_dico++; + dist += temp * temp; + } + + if ( dist < dist_min ) + { + dist_min = dist; + index0 = i; + } + } + + /* quantized vector */ + p_dico = &sns_vq_cdk1[index0 * ( M / 2 )]; + + for ( j = j0; j < j1; j++ ) + { + snsq[j] = *p_dico++; /* += cause it's differential */ + } + + j0 = M / 2; + j1 = M; + dist_min = 1.0e30f; + p_dico = sns_vq_cdk2; + index1 = 0; + + for ( i = 0; i < 32; i++ ) + { + dist = 0.0; + + for ( j = j0; j < j1; j++ ) + { + temp = sns[j] - *p_dico++; + dist += temp * temp; + } + + if ( dist < dist_min ) + { + dist_min = dist; + index1 = i; + } + } + + /* quantized vector */ + p_dico = &sns_vq_cdk2[index1 * ( M / 2 )]; + + for ( j = j0; j < j1; j++ ) + { + snsq[j] = *p_dico++; /* += cause it's differential */ + } + + index = index0 + ( index1 << 5 ); + + return index; +} + + +/*------------------------------------------------------------------- + * sns_1st_cod() + * + * + *-------------------------------------------------------------------*/ + +/* r : number of allocated bits */ +static int16_t sns_2st_cod( + const float *sns, /* i : normalized vector to quantize */ + float *snsq, /* i/o: i:1st stage o:1st+2nd stage */ + int16_t *indx /* o : index[] (4 bits per words) */ +) +{ + int16_t i, nbits; + float x[M]; + int16_t nq, xq[M]; + float scale = 1.0f / 2.5f; + + for ( i = 0; i < M; i++ ) + { + x[i] = ( sns[i] - snsq[i] ) / scale; + } + + /* quantize */ + AVQ_cod_lpc( x, xq, indx, 2 ); + + for ( i = 0; i < M; i++ ) + { + snsq[i] += scale * (float) xq[i]; + } + + /* total number of bits using entropic code to index the quantizer number */ + nbits = 0; + + for ( i = 0; i < 2; i++ ) + { + nq = indx[i]; + nbits += ( 2 + ( nq * 4 ) ); /* 2 bits to specify Q2,Q3,Q4,ext */ + + if ( nq > 6 ) + { + nbits += nq - 3; /* unary code (Q7=1110, ...) */ + } + else if ( nq > 4 ) + { + nbits += nq - 4; /* Q5=0, Q6=10 */ + } + else if ( nq == 0 ) + { + nbits += 3; /* Q0=110 */ + } + } + + return ( nbits ); +} + + +/*------------------------------------------------------------------- + * sns_avq_cod() + * + * Stereo noise-shaping AVQ encoder for 1 channel + *-------------------------------------------------------------------*/ + +void sns_avq_cod( + const float *sns, /* i : Input sns vectors */ + const float *snsmid, /* i : Input mid-sns vectors */ + float *sns_q, /* o : Quantized LFS vectors */ + float *snsmid_q, /* o : Quantized mid-LFS vectors */ + int16_t *index, /* o : Quantization indices */ + const int16_t core, /* i : core */ + const int16_t low_brate_mode /* i : flag low bit operating mode */ +) +{ + int16_t i; + float snsmid_q0[M]; + int16_t indxt[256], nbits, nbt, nit; + + index[0] = sns_1st_cod( sns, sns_q ); + nit = 1 + 2; + if ( !low_brate_mode ) + { + nbt = sns_2st_cod( sns, sns_q, &index[1] ); + nit += index[1] + index[2]; + } + else + { + index[1] = SNS_LOW_BR_MODE; + index[2] = 0; + } + + index += nit; + nit = 0; + *index = 0; + + if ( core == TCX_10_CORE ) + { + index++; + + index[0] = sns_1st_cod( snsmid, snsmid_q ); + nit = 1 + 2; + if ( !low_brate_mode ) + { + nbits = sns_2st_cod( snsmid, snsmid_q, &index[1] ); + nit += index[1] + index[2]; + } + else + { + index[1] = SNS_LOW_BR_MODE; + index[2] = 0; + nbits = 0; + } + + + nbt = 10 + nbits; + + if ( !low_brate_mode ) + { + for ( i = 0; i < M; i++ ) + { + snsmid_q0[i] = sns_q[i]; + } + nbits = sns_2st_cod( snsmid, snsmid_q0, indxt ); + if ( nbits < nbt ) + { + nbt = nbits; + nit = 2 + indxt[0] + indxt[1]; + index[-1] = 1; + + for ( i = 0; i < M; i++ ) + { + snsmid_q[i] = snsmid_q0[i]; + } + + for ( i = 0; i < nit; i++ ) + { + index[i] = indxt[i]; + } + } + } + index += nit; + } + + return; +} + + +/*------------------------------------------------------------------- + * sns_avq_cod_stereo() + * + * Stereo noise-shaping AVQ encoder for 2 channels + *-------------------------------------------------------------------*/ + +void sns_avq_cod_stereo( + const float *snsl, /* i : Input sns vector (left channel) */ + const float *snsr, /* i : Input sns vector (right channel) */ + float *snsl_q, /* o : Quantized sns vector (left channel) */ + float *snsr_q, /* o : Quantized sns vector (right channel) */ + int16_t *indexl, /* o : Quantization indices (left channel) */ + int16_t *indexr /* o : Quantization indices (right channel) */ +) +{ + int16_t i, flag_zero; + float mid[M], side[M], mid_q[M], side_q[M], ener_side; + + /* Compute side */ + ener_side = 0.f; + for ( i = 0; i < M; i++ ) + { + side[i] = snsl[i] - snsr[i]; + ener_side += side[i] * side[i]; + } +#ifdef DEBUG_MODE_MDCT + { + float ener_mid = 0; + /* Compute mid */ + for ( i = 0; i < M; i++ ) + { + mid[i] = ( snsl[i] + snsr[i] ) * 0.5f; + ener_mid += mid[i] * mid[i]; + } + dbgwrite( &ener_side, sizeof( float ), 1, 1, "./res/ener_side" ); + dbgwrite( &ener_mid, sizeof( float ), 1, 1, "./res/ener_mid" ); + } +#endif + + if ( ener_side < 12.f ) + { + /* MS coding */ + *indexl++ = 2; + *indexr++ = 3; + + /* Compute mid */ + for ( i = 0; i < M; i++ ) + { + mid[i] = ( snsl[i] + snsr[i] ) * 0.5f; + } + + /* Quantize mid */ + indexl[0] = sns_1st_cod( mid, mid_q ); + sns_2st_cod( mid, mid_q, &indexl[1] ); + + /* Quantize side */ + indexr[0] = -1; + for ( i = 0; i < M; i++ ) + { + side_q[i] = 0.f; + } + sns_2st_cod( side, side_q, &indexr[1] ); + + /* Detect zero side */ + flag_zero = 1; + for ( i = 0; i < M; i++ ) + { + if ( side_q[i] != 0 ) + { + flag_zero = 0; + break; + } + } + if ( flag_zero ) + { + indexr[0] = -2; + } + + /* Go back to LR */ + for ( i = 0; i < M; i++ ) + { + snsl_q[i] = mid_q[i] + side_q[i] * 0.5f; + snsr_q[i] = mid_q[i] - side_q[i] * 0.5f; + } + } + else + { + /* LR coding */ + *indexl++ = 0; + *indexr++ = 1; + + /* Quantize left */ + indexl[0] = sns_1st_cod( snsl, snsl_q ); + sns_2st_cod( snsl, snsl_q, &indexl[1] ); + + /* Quantize right */ + indexr[0] = sns_1st_cod( snsr, snsr_q ); + sns_2st_cod( snsr, snsr_q, &indexr[1] ); + } + + return; +} diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c new file mode 100644 index 0000000000..fd80a4d6db --- /dev/null +++ b/lib_enc/ivas_spar_encoder.c @@ -0,0 +1,237 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_com.h" +#include "prot.h" +#include +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * ivas_spar_enc_open() + * + * Allocate and initialize SPAR encoder handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_enc_open( + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ +) +{ + SPAR_ENC_HANDLE hSpar; + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + hEncoderConfig = st_ivas->hEncoderConfig; + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * Allocate and initialize SPAR handle + *-----------------------------------------------------------------*/ + + if ( ( hSpar = (SPAR_ENC_HANDLE) count_malloc( sizeof( SPAR_ENC_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR encoder" ); + } + + if ( ( error = ivas_spar_foa_enc_open( &hSpar->hSparFoa, hEncoderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*-----------------------------------------------------------------* + * Configuration - set SPAR high-level parameters + *-----------------------------------------------------------------*/ + + ivas_spar_config( hEncoderConfig->ivas_total_brate, min( hEncoderConfig->sba_order, IVAS_MAX_SBA_ORDER ), + &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->hSparFoa->core_nominal_brate, -1 ); + + if ( st_ivas->nchan_transport == 1 ) + { + st_ivas->hEncoderConfig->element_mode_init = IVAS_SCE; + } + else + { + st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + } + + /*-----------------------------------------------------------------* + * Allocate and initialize Front-VAD handle + *-----------------------------------------------------------------*/ + + hSpar->front_vad_flag = 0; + hSpar->front_vad_dtx_flag = 0; + hSpar->force_front_vad = 0; + + if ( hEncoderConfig->Opt_DTX_ON ) + { + if ( ( error = front_vad_create( &( hSpar->hFrontVad ), hEncoderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( hSpar->hCoreCoderVAD = (ENC_CORE_HANDLE) count_malloc( sizeof( Encoder_State ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); + } + + copy_encoder_config( st_ivas, hSpar->hCoreCoderVAD, 1 ); + + hSpar->hCoreCoderVAD->total_brate = hEncoderConfig->ivas_total_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + hSpar->hCoreCoderVAD->mct_chan_mode = MCT_CHAN_MODE_IGNORE; + + if ( ( error = init_encoder( hSpar->hCoreCoderVAD, 0, hEncoderConfig->var_SID_rate_flag, hEncoderConfig->interval_SID, 1 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + hSpar->hCoreCoderVAD = NULL; + hSpar->hFrontVad = NULL; + } + + /*-----------------------------------------------------------------* + * Final assignment + *-----------------------------------------------------------------*/ + + st_ivas->hSpar = hSpar; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_enc_close() + * + * Deallocate SPAR encoder handle + *------------------------------------------------------------------------*/ + +void ivas_spar_enc_close( + SPAR_ENC_HANDLE hSpar, /* i/o: SPAR encoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +) +{ + if ( hSpar != NULL ) + { + /* core-coder-VAD handle */ + if ( hSpar->hCoreCoderVAD != NULL ) + { + destroy_core_enc( hSpar->hCoreCoderVAD ); + hSpar->hCoreCoderVAD = NULL; + } + + /* front-VAD handle */ + if ( hSpar->hFrontVad != NULL ) + { + front_vad_destroy( &hSpar->hFrontVad ); + hSpar->hFrontVad = NULL; + } + + ivas_spar_foa_enc_close( &hSpar->hSparFoa, input_Fs, nchan_inp ); + + count_free( hSpar ); + hSpar = NULL; + } + + return; +} + + +/*-------------------------------------------------------------------* + * ivas_spar_enc() + * + * Principal IVAS SPAR encoder routine + *-------------------------------------------------------------------*/ + +ivas_error ivas_spar_enc( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + float data_f[][L_FRAME48k], /* i/o: input/transport audio channels */ + const int16_t input_frame, /* i : input frame length */ + int16_t *nb_bits_metadata, /* i : number of MD bits written */ + BSTR_ENC_HANDLE hMetaData /* o : MetaData handle */ +) +{ + ENCODER_CONFIG_HANDLE hEncoderConfig; + int16_t i, ch; + ivas_error error; + + error = IVAS_ERR_OK; + hEncoderConfig = st_ivas->hEncoderConfig; + + /* front VAD */ + if ( ( error = front_vad_spar( st_ivas->hSpar, data_f[0], st_ivas->hEncoderConfig, input_frame ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* normalize input channels */ + for ( ch = 0; ch < hEncoderConfig->nchan_inp; ch++ ) + { + for ( i = 0; i < input_frame; i++ ) + { + data_f[ch][i] *= ( 1.0 / PCM16_TO_FLT_FAC ); + } + } + + if ( hEncoderConfig->sba_planar ) + { + ivas_sba_zero_vert_comp( data_f, hEncoderConfig->sba_order, hEncoderConfig->sba_planar, input_frame ); + } + + if ( ( error = ivas_spar_foa_enc_process( st_ivas, hEncoderConfig, hMetaData, st_ivas->hSpar->front_vad_flag, data_f ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hEncoderConfig->sba_planar ) + { + ivas_sba_zero_vert_comp( data_f, hEncoderConfig->sba_order, hEncoderConfig->sba_planar, input_frame ); // TODO tmu: do we need a second call to this function ? + } + + *nb_bits_metadata = hMetaData->nb_bits_tot; + + /* temp hack to not force IVAS front pre-proc decision for higher bitrates */ + if ( hEncoderConfig->ivas_total_brate > IVAS_64k || hEncoderConfig->Opt_DTX_ON == 0 ) + { + st_ivas->hSpar->front_vad_flag = 0; + } + + return error; +} diff --git a/lib_enc/ivas_spar_foa_enc.c b/lib_enc/ivas_spar_foa_enc.c new file mode 100644 index 0000000000..691adc0b1b --- /dev/null +++ b/lib_enc/ivas_spar_foa_enc.c @@ -0,0 +1,804 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_com.h" +#include "math.h" +#include +#include "wmops.h" + +#ifdef DEBUG_SPAR_FOA +extern FILE *fEvs_enc_in; +extern FILE *fFb_out[4]; +#endif + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_enc_open() + * + * Allocate and initialize SPAR encoder handle for static memory + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_foa_enc_open( + ivas_spar_foa_enc_state_t **hSparFoa, /* i/o: SPAR FOA encoder handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +) +{ + ivas_spar_foa_enc_state_t *pState; + IVAS_FB_CFG *fb_cfg; + int16_t nchan_inp, nchan_transport, sba_order_internal; + int16_t table_idx, active_w_mixing; + int32_t input_Fs, ivas_total_brate; + ivas_error error; + + error = IVAS_ERR_OK; + + input_Fs = hEncoderConfig->input_Fs; + + sba_order_internal = min( hEncoderConfig->sba_order, IVAS_MAX_SBA_ORDER ); + nchan_inp = ivas_sba_get_nchan_metadata( sba_order_internal ); + assert( nchan_inp <= hEncoderConfig->nchan_inp ); + ivas_total_brate = hEncoderConfig->ivas_total_brate; + nchan_transport = ivas_get_spar_num_TCs( hEncoderConfig->ivas_total_brate, sba_order_internal ); + + // bw = ivas_get_bw_idx_from_sample_rate(pCfg->input_Fs); + table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order_internal, SPAR_CONFIG_BW, NULL, NULL ); + + /* FOA encoder handle */ + if ( ( pState = (ivas_spar_foa_enc_state_t *) count_malloc( sizeof( ivas_spar_foa_enc_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR encoder" ); + } + + /* MD handle */ + if ( ( error = ivas_spar_foa_md_enc_open( &( pState->hMdEnc ), hEncoderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* set FB config. */ + active_w_mixing = ivas_spar_br_table_consts[table_idx].active_w; // VE: this parameter is different between enc and dec + ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, SBA_MODE_SPAR, nchan_inp, nchan_transport, active_w_mixing, input_Fs ); + fb_cfg->remix_order = remix_order_set[pState->hMdEnc->spar_md_cfg.remix_unmix_order]; + + /* FB mixer handle */ + if ( ( error = ivas_FB_mixer_open( &( pState->hFbMixer ), input_Fs, fb_cfg ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Covariance handle */ + if ( ( error = ivas_spar_covar_enc_open( &( pState->hCovEnc ), pState->hFbMixer->pFb, input_Fs, nchan_inp ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Transient Detector handle */ + if ( ( error = ivas_spar_transient_det_open( &( pState->hTranDet ), input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* AGC */ + if ( ( error = ivas_spar_agc_enc_open( &pState->hAgcEnc, input_Fs, nchan_inp ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* PCA */ + pState->hPCA = NULL; + if ( hEncoderConfig->Opt_PCA_ON ) + { + if ( ( pState->hPCA = (PCA_ENC_STATE *) count_malloc( sizeof( PCA_ENC_STATE ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR PCA encoder" ); + } + init_pca_enc( pState->hPCA ); + } + + /* initializations */ + pState->hMdEnc->table_idx = -1; + + *hSparFoa = pState; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_enc_close() + * + * Deallocate SPAR encoder handle for static memory + *------------------------------------------------------------------------*/ + +void ivas_spar_foa_enc_close( + ivas_spar_foa_enc_state_t **hSparFoa, /* i/o: SPAR FOA encoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t nchan_inp /* i : number of input channels */ +) +{ + ivas_spar_foa_enc_state_t *pState; + int16_t num_chans; + + pState = *hSparFoa; + num_chans = pState->hFbMixer->fb_cfg->num_in_chans; + assert( num_chans <= nchan_inp ); + + if ( pState != NULL ) + { + /* MD handle */ + ivas_spar_foa_md_enc_close( &pState->hMdEnc ); + + /* Covar. State handle */ + ivas_spar_covar_enc_close( &pState->hCovEnc, num_chans ); + + /* FB mixer handle */ + ivas_FB_mixer_close( &pState->hFbMixer, input_Fs ); + + /* Trans Det handle */ + ivas_spar_transient_det_close( &pState->hTranDet ); + + /* AGC */ + ivas_spar_agc_enc_close( &pState->hAgcEnc ); + + /* PCA */ + if ( pState->hPCA != NULL ) + { + count_free( pState->hPCA ); + pState->hPCA = NULL; + } + + count_free( pState ); + pState = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_enc_get_windowed_fr() + * + * Get windowed FRs + *-----------------------------------------------------------------------------------------*/ + +static void ivas_spar_foa_enc_get_windowed_fr( + IVAS_FB_MIXER_HANDLE hFbMixer, + float *pIn_blocks[IVAS_SPAR_MAX_CH], + ivas_enc_cov_handler_in_buf_t *pCov_in_buf, + const int16_t input_frame, + const int16_t nchan_inp, + const int16_t num_past_samples ) +{ + int16_t i, j, rev_offset; + + for ( i = 0; i < nchan_inp; i++ ) + { + const int16_t stride = hFbMixer->pFb->fb_bin_to_band.short_stride; + float tmp_buf[MDFT_FB_BANDS_240 * 2]; + int16_t win_len = (int16_t) hFbMixer->ana_window_offset; + float *mdft_in_ptr = tmp_buf + stride - win_len; + float tmp_in_block[L_FRAME48k + MDFT_FB_BANDS_240]; + float *data_ptr = tmp_in_block; + float *fr_re_ptr = pCov_in_buf->ppIn_FR_real[i]; + float *fr_im_ptr = pCov_in_buf->ppIn_FR_imag[i]; + + set_f( tmp_buf, 0, MDFT_FB_BANDS_240 * 2 ); + + /* copy input data, because pIn_blocks and fr_re_ptr + fr_im_ptr use the same memory */ + mvr2r( &pIn_blocks[i][input_frame - num_past_samples], tmp_in_block, input_frame + win_len ); + + for ( int16_t blk = 0; blk < input_frame / stride; blk++ ) + { + + for ( j = 0; j < win_len; j++ ) + { + mdft_in_ptr[j] = data_ptr[j] * hFbMixer->pAna_window[j]; + } + + for ( j = win_len; j < stride; j++ ) + { + mdft_in_ptr[j] = data_ptr[j]; + } + + rev_offset = win_len - 1; + for ( j = stride; j < stride + win_len; j++ ) + { + mdft_in_ptr[j] = data_ptr[j] * hFbMixer->pAna_window[rev_offset--]; + } + + ivas_mdft( tmp_buf, fr_re_ptr, fr_im_ptr, stride << 1, stride ); + + data_ptr += stride; + fr_re_ptr += stride; + fr_im_ptr += stride; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_enc_process() + * + * Process call for SPAR FOA encoder + *-----------------------------------------------------------------------------------------*/ + +ivas_error ivas_spar_foa_enc_process( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + const int16_t front_vad_flag, /* i : front-VAD decision */ + float data_f[][L_FRAME48k] /* i/o: input/transport audio channels */ +) +{ + float pcm_tmp[IVAS_SPAR_MAX_CH][L_FRAME48k * 2]; + float *p_pcm_tmp[IVAS_SPAR_MAX_CH]; + int16_t i, j, k, b, i_ts, input_frame, num_bands_bw; + int16_t dtx_vad, dtx_cov_flag, dtx_silence_mode; + int32_t ivas_total_brate, input_Fs; + ivas_enc_cov_handler_in_buf_t cov_in_buf; + float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + ivas_spar_foa_md_enc_in_buf_t md_in_buf; + int16_t nchan_inp, nchan_transport, bwidth, sba_order; + int16_t table_idx; + int16_t in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH]; + ivas_error error; + const int16_t *order; + ivas_spar_foa_enc_state_t *pState = st_ivas->hSpar->hSparFoa; + IVAS_QMETADATA_HANDLE hQMetaData = st_ivas->hQMetaData; + int16_t ts, l_ts, orig_dirac_bands, num_del_samples; + float *ppIn_FR_real[IVAS_SPAR_MAX_CH], *ppIn_FR_imag[IVAS_SPAR_MAX_CH]; + float w_del_buf[IVAS_FB_1MS_48K_SAMP]; + float dir[3], avg_dir[3]; + float energySum, vecLen; + + wmops_sub_start( "spar_foa_enc_process" ); + + /*-----------------------------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------------------------------*/ + + error = IVAS_ERR_OK; + + input_Fs = hEncoderConfig->input_Fs; + ivas_total_brate = hEncoderConfig->ivas_total_brate; + num_del_samples = pState->hFbMixer->fb_cfg->fb_latency; + + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + sba_order = min( hEncoderConfig->sba_order, IVAS_MAX_SBA_ORDER ); + nchan_inp = ivas_sba_get_nchan_metadata( sba_order ); + assert( nchan_inp <= hEncoderConfig->nchan_inp ); + + for ( i = FOA_CHANNELS + 1; i < nchan_inp; i++ ) + { + mvr2r( data_f[HOA_keep_ind[i]], data_f[i], input_frame ); + } + + table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + + /*-----------------------------------------------------------------------------------------* + * Transient detector + *-----------------------------------------------------------------------------------------*/ + + cov_in_buf.transient_det = ivas_transient_det_process( pState->hTranDet, data_f[0], input_frame ); + + /* store previous input samples for W in local buffer */ + assert( num_del_samples <= IVAS_FB_1MS_48K_SAMP ); + mvr2r( &pState->hFbMixer->ppFilterbank_prior_input[0][pState->hFbMixer->fb_cfg->prior_input_length - num_del_samples], w_del_buf, num_del_samples ); + + /*-----------------------------------------------------------------------------------------* + * FB mixer ingest + *-----------------------------------------------------------------------------------------*/ + + for ( i = 0; i < nchan_inp; i++ ) + { + p_pcm_tmp[i] = pcm_tmp[i]; + } + + /* run Filter Bank overlapping MDFT analysis first, then we can use the temporary buffer for Parameter MDFT analysis*/ + ivas_fb_mixer_pcm_ingest( pState->hFbMixer, data_f, p_pcm_tmp, input_frame ); + + /* prepare Parameter MDFT analysis */ + for ( i = 0; i < nchan_inp; i++ ) + { + cov_in_buf.ppIn_FR_real[i] = p_pcm_tmp[i]; + cov_in_buf.ppIn_FR_imag[i] = p_pcm_tmp[i] + input_frame; + } + + for ( i = 0; i < nchan_inp; i++ ) + { + p_pcm_tmp[i] = &data_f[i][0]; + ppIn_FR_real[i] = cov_in_buf.ppIn_FR_real[i]; + ppIn_FR_imag[i] = cov_in_buf.ppIn_FR_imag[i]; + } + + l_ts = input_frame / MAX_PARAM_SPATIAL_SUBFRAMES; + + for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) + { + ivas_fb_mixer_get_windowed_fr( pState->hFbMixer, p_pcm_tmp, ppIn_FR_real, ppIn_FR_imag, l_ts, l_ts ); + ivas_fb_mixer_update_prior_input( pState->hFbMixer, p_pcm_tmp, l_ts ); + + for ( i = 0; i < nchan_inp; i++ ) + { + p_pcm_tmp[i] += l_ts; + ppIn_FR_real[i] += l_ts; + ppIn_FR_imag[i] += l_ts; + } + } + + /* turn pointers back to the local buffer, needed for the following processing */ + for ( i = 0; i < nchan_inp; i++ ) + { + p_pcm_tmp[i] = pcm_tmp[i]; + } + + cov_in_buf.num_ch = nchan_inp; + + dtx_vad = ( hEncoderConfig->Opt_DTX_ON == 1 ) ? front_vad_flag : 1; + + /*-----------------------------------------------------------------------------------------* + * DirAC encoding + *-----------------------------------------------------------------------------------------*/ + + ivas_dirac_param_est_enc( st_ivas->hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, + data_f, cov_in_buf.ppIn_FR_real, cov_in_buf.ppIn_FR_imag, input_frame ); + + if ( hQMetaData->q_direction->cfg.nbands > 0 ) + { + orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; + + if ( dtx_vad == 1 ) + { + /* WB 4TC mode bit : disable for now*/ + push_next_indice( hMetaData, 0, 1 ); + ivas_qmetadata_enc_encode( hMetaData, hQMetaData ); + } + else + { + hQMetaData->q_direction[0].cfg.nbands = DIRAC_DTX_BANDS; + + /* compute directions */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + set_zero( dir, 3 ); + set_zero( avg_dir, 3 ); + energySum = 0.0f; + + /*combine all dirac bands except the last one, handle last band separately, last band covers BW above WB*/ + for ( j = 0; j < orig_dirac_bands - 1; j++ ) + { + ivas_qmetadata_azimuth_elevation_to_direction_vector( hQMetaData->q_direction[0].band_data[j].azimuth[i], hQMetaData->q_direction[0].band_data[j].elevation[i], &dir[0] ); + vecLen = hQMetaData->q_direction[0].band_data[j].energy_ratio[i] * st_ivas->hDirAC->buffer_energy[i * orig_dirac_bands + j]; + + avg_dir[0] += dir[0] * vecLen; + avg_dir[1] += dir[1] * vecLen; + avg_dir[2] += dir[2] * vecLen; + + energySum += st_ivas->hDirAC->buffer_energy[i * orig_dirac_bands + j]; + } + + ivas_qmetadata_direction_vector_to_azimuth_elevation( &avg_dir[0], &hQMetaData->q_direction[0].band_data[0].azimuth[i], &hQMetaData->q_direction[0].band_data[0].elevation[i] ); + hQMetaData->q_direction[0].band_data[0].energy_ratio[i] = sqrtf( dotp( avg_dir, avg_dir, 3 ) ) / ( energySum + EPSILON ); + + hQMetaData->q_direction[0].band_data[1].azimuth[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i]; + hQMetaData->q_direction[0].band_data[1].elevation[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i]; + hQMetaData->q_direction[0].band_data[1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i]; + } + + /* 1 bit to indicate mode MD coding : temp solution*/ + push_next_indice( hMetaData, 1, 1 ); + + /* encode SID parameters */ + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, st_ivas->sba_mode ); + } + + for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) + { + for ( i_ts = 0; i_ts < ( ( dtx_vad == 1 ) ? hQMetaData->q_direction[0].cfg.nblocks : 1 ); i_ts++ ) + { + hQMetaData->q_direction->band_data[b].azimuth[i_ts] = hQMetaData->q_direction->band_data[b].q_azimuth[i_ts]; + hQMetaData->q_direction->band_data[b].elevation[i_ts] = hQMetaData->q_direction->band_data[b].q_elevation[i_ts]; + hQMetaData->q_direction[0].band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; + } + } + + if ( dtx_vad == 0 ) + { + + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; + } + + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + for ( j = orig_dirac_bands - 2; j >= 0; j-- ) + { + hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; + hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; + hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; + } + } + + hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; + } + } + + + /*-----------------------------------------------------------------------------------------* + * Pre-proc flags + *-----------------------------------------------------------------------------------------*/ + + /* use just VAD function to get VAD flags */ + dtx_vad = ( hEncoderConfig->Opt_DTX_ON == 1 ) ? front_vad_flag : 1; + dtx_cov_flag = ( dtx_vad == 1 ) ? 0 : 1; + dtx_silence_mode = 0; + bwidth = ivas_get_bw_idx_from_sample_rate( input_Fs ); + bwidth = min( bwidth, hEncoderConfig->max_bwidth ); + + /*-----------------------------------------------------------------------------------------* + * Covariance process + *-----------------------------------------------------------------------------------------*/ + + cov_in_buf.num_ch = nchan_inp; + + for ( i = 0; i < nchan_inp; i++ ) + { + for ( j = 0; j < nchan_inp; j++ ) + { + cov_real[i][j] = pState->hMdEnc->cov_real[i][j]; + cov_dtx_real[i][j] = pState->hMdEnc->cov_dtx_real[i][j]; + } + } + + cov_in_buf.dtx_cov_flag = dtx_cov_flag; + ivas_enc_cov_handler_process( pState->hCovEnc, &cov_in_buf, cov_real, cov_dtx_real, pState->hFbMixer->pFb, 0, pState->hFbMixer->pFb->filterbank_num_bands ); + + if ( pState->hMdEnc->table_idx != table_idx ) + { + pState->hMdEnc->table_idx = table_idx; + ivas_spar_set_bitrate_config( &pState->hMdEnc->spar_md_cfg, table_idx, SPAR_DIRAC_SPLIT_START_BAND ); + } + + nchan_transport = pState->hMdEnc->spar_md_cfg.nchan_transport; + + /*-----------------------------------------------------------------------------------------* + * MetaData encoder + *-----------------------------------------------------------------------------------------*/ + + num_bands_bw = ivas_get_num_bands_from_bw_idx( bwidth ); + + if ( dtx_vad == 0 ) + { + for ( i = 0; i < nchan_inp; i++ ) + { + for ( j = 0; j < nchan_inp; j++ ) + { + md_in_buf.cov_real[i][j] = cov_dtx_real[i][j]; + for ( k = num_bands_bw; k < IVAS_MAX_NUM_BANDS; k++ ) + { + md_in_buf.cov_real[i][j][k] = 0; + } + } + } + } + else + { + for ( i = 0; i < nchan_inp; i++ ) + { + for ( j = 0; j < nchan_inp; j++ ) + { + md_in_buf.cov_real[i][j] = cov_real[i][j]; + for ( k = num_bands_bw; k < IVAS_MAX_NUM_BANDS; k++ ) + { + md_in_buf.cov_real[i][j][k] = 0; + } + } + } + } + + md_in_buf.num_bands = ivas_get_num_bands_from_bw_idx( SPAR_CONFIG_BW ); + md_in_buf.num_bands = min( md_in_buf.num_bands, SPAR_DIRAC_SPLIT_START_BAND ); + + md_in_buf.dtx_vad = dtx_vad; + + ivas_spar_foa_md_enc_process( pState->hMdEnc, hEncoderConfig, &md_in_buf, hMetaData, dtx_silence_mode ); + + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + float diffuseness[IVAS_MAX_NUM_BANDS]; + float Wscale_d[IVAS_MAX_NUM_BANDS]; + int16_t d_start_band, d_end_band; + int16_t dirac_band_idx; + + d_start_band = st_ivas->hSpar->hSparFoa->enc_param_start_band; + d_end_band = IVAS_MAX_NUM_BANDS; + + for ( b = d_start_band; b < d_end_band; b++ ) + { + dirac_band_idx = st_ivas->hSpar->hSparFoa->dirac_to_spar_md_bands[b] - d_start_band; + for ( i_ts = 0; i_ts < hQMetaData->q_direction->cfg.nblocks; i_ts++ ) + { + azi_dirac[b][i_ts] = hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[i_ts]; + ele_dirac[b][i_ts] = hQMetaData->q_direction->band_data[dirac_band_idx].elevation[i_ts]; + } + diffuseness[b] = 1.0f - hQMetaData->q_direction->band_data[dirac_band_idx].energy_ratio[0]; + } + + if ( ( d_start_band >= 6 ) && ( dtx_vad == 1 ) ) + { + for ( i = 0; i < IVAS_SPAR_MAX_CH - 1; i++ ) + { + pState->hMdEnc->spar_md.band_coeffs[d_start_band - 1].P_re[i] = + pState->hMdEnc->spar_md.band_coeffs[d_start_band - 1].P_quant_re[i]; + } + } + + for ( b = d_start_band; b < d_end_band; b++ ) + { + Wscale_d[b] = 1.0f; + for ( i = 1; i < nchan_inp; i++ ) + { + Wscale_d[b] += md_in_buf.cov_real[i][i][b] / max( EPSILON, md_in_buf.cov_real[0][0][b] ); + } + Wscale_d[b] = Wscale_d[b] / ( 1.0f + (float) sba_order ); /*DirAC normalized signal variance sums to 1 + order*/ + Wscale_d[b] = sqrtf( Wscale_d[b] ); + Wscale_d[b] = min( 2.0f, max( Wscale_d[b], 1.0f ) ); + } + + ivas_get_spar_md_from_dirac( azi_dirac, ele_dirac, diffuseness, 1, pState->hMdEnc->mixer_mat, &pState->hMdEnc->spar_md, &pState->hMdEnc->spar_md_cfg, + d_start_band, d_end_band, sba_order, dtx_vad, Wscale_d ); + } + + + /*-----------------------------------------------------------------------------------------* + * FB mixer + *-----------------------------------------------------------------------------------------*/ + + ivas_fb_mixer_get_in_out_mapping( pState->hFbMixer->fb_cfg, nchan_transport, ENC, remix_order_set[pState->hMdEnc->spar_md_cfg.remix_unmix_order], in_out_mixer_map ); + +#ifdef DEBUG_SPAR_FOA + { + static FILE *f_mat = 0; + + if ( f_mat == 0 ) + f_mat = fopen( "mixer_mat_enc", "w" ); + + for ( i = 0; i < pState->hFbMixer->fb_cfg->num_out_chans; i++ ) + { + for ( j = 0; j < pState->hFbMixer->fb_cfg->num_in_chans; j++ ) + { + for ( k = 0; k < pState->hFbMixer->pFb->filterbank_num_bands; k++ ) + { + fprintf( f_mat, "%f\n", pState->hMdEnc->mixer_mat[i][j][k] ); + + if ( ( in_out_mixer_map[i][j] == 0 ) && ( fabs( pState->hMdEnc->mixer_mat[i][j][k] ) > 1e-20 ) ) + { + assert( 0 && "Non zero value in unexpected mixer map!!!" ); + } + } + } + } + } +#endif +#ifdef DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS + { + static FILE *fid = 0; + int16_t band = 9; + if ( !fid ) + { + fid = fopen( "pred_coeffs_enc.txt", "wt" ); + } + fprintf( fid, "%.6f\n", pState->hMdEnc->mixer_mat[1][0][band] ); + } +#endif + + ivas_fb_mixer_process( pState->hFbMixer, pState->hMdEnc->mixer_mat, p_pcm_tmp, input_frame, in_out_mixer_map ); + + /* move delayed W into output buffer unless activeW operation*/ + if ( pState->hFbMixer->fb_cfg->active_w_mixing == 0 ) + { + mvr2r( w_del_buf, p_pcm_tmp[0], num_del_samples ); + mvr2r( data_f[0], p_pcm_tmp[0] + num_del_samples, input_frame - num_del_samples ); + } + + /*-----------------------------------------------------------------------------------------* + * PCA encoder + *-----------------------------------------------------------------------------------------*/ + + if ( pState->hPCA != NULL ) + { + ivas_pca_enc( hEncoderConfig, pState->hPCA, hMetaData, p_pcm_tmp, input_frame, FOA_CHANNELS ); + } + else + { + if ( ( ivas_total_brate == PCA_BRATE ) && ( sba_order == 1 ) ) + { + /* write PCA bypass bit */ + push_next_indice( hMetaData, PCA_MODE_INACTIVE, 1 ); + } + } + + +#ifdef SPAR_HOA_DBG + /*FILE *fp = fopen("int_enc_dmx.raw", "ab"); + for (int t = 0; t < 960; t++) + { + for (int c = 0; c < pState->hFbMixer->filterbank_num_out_chans; c++) + { + for ( k = 0; k < 2; k++ ) + { + fb_mixer_in_buf.ppMixer[i][j][k] = pState->hMdEnc->mixer_mat[i][j]; + } + } + } + fclose( fp );*/ +#endif + /*-----------------------------------------------------------------------------------------* + * AGC + *-----------------------------------------------------------------------------------------*/ + + if ( dtx_vad == 1 ) + { + if ( hEncoderConfig->Opt_AGC_ON > 0 ) + { + ivas_agc_enc_process( pState->hAgcEnc, hMetaData, p_pcm_tmp, p_pcm_tmp, pState->hFbMixer->fb_cfg->num_out_chans, hEncoderConfig ); + } + else + { + push_next_indice( hMetaData, 0, 1 ); + } + } + +#ifdef DEBUG_SPAR_BYPASS_EVS_CODEC + { + static FILE *fid_enc = 0; + static float delay_buf[576 * 4] = { 0 }; + int16_t smp, ch, buf_idx, framelen = input_frame, delay = 576; + if ( !fid_enc ) + { + fid_enc = fopen( "evs_input_float.raw", "wb" ); + } + + /* write out buffer */ + for ( smp = 0; smp < delay * nchan_transport; smp++ ) + { + fwrite( &delay_buf[smp], sizeof( float ), 1, fid_enc ); + } + + for ( smp = 0; smp < framelen - delay; smp++ ) + { + for ( ch = 0; ch < nchan_transport; ch++ ) + { + fwrite( &p_pcm_tmp[ch][smp], sizeof( float ), 1, fid_enc ); + } + } + + /* update delay buffer*/ + buf_idx = 0; + for ( ; smp < framelen; smp++ ) + { + for ( ch = 0; ch < nchan_transport; ch++ ) + { + delay_buf[buf_idx++] = p_pcm_tmp[ch][smp]; + } + } + } +#endif + +#ifdef DEBUG_SPAR_FOA + float tmp; + int16_t pcm; + + for ( j = 0; j < input_frame; j++ ) + { + for ( i = 0; i < nchan_transport; i++ ) + { + tmp = roundf( p_pcm_tmp[i][j] * PCM16_TO_FLT_FAC ); + pcm = ( tmp > MAX16B_FLT ) ? MAX16B : ( tmp < MIN16B_FLT ) ? MIN16B + : (short) tmp; + dbgwrite( &pcm, sizeof( int16_t ), 1, 1, "dmx.raw" ); + } + } + + /* Plug evs i/p from Matlab */ + if ( fEvs_enc_in != NULL ) + { + /*printf("evs enc in file found\n");*/ + float tmp_in = 0; + int16_t diff[FOA_CHANNELS][L_FRAME48k], tmp16; + int16_t max_diff = 0; + int16_t abs_tol = 8; + + for ( i = 0; i < input_frame; i++ ) + { + for ( j = 0; j < nchan_transport; j++ ) + { + tmp = p_pcm_tmp[j][i]; + tmp = roundf( tmp * PCM16_TO_FLT_FAC ); + tmp16 = ( tmp > MAX16B_FLT ) ? MAX16B : ( tmp < MIN16B_FLT ) ? MIN16B + : (int16_t) tmp; + fscanf( fEvs_enc_in, "%f\n", &tmp_in ); + p_pcm_tmp[j][i] = tmp_in; + + tmp = roundf( tmp_in * PCM16_TO_FLT_FAC ); + pcm = ( tmp > MAX16B_FLT ) ? MAX16B : ( tmp < MIN16B_FLT ) ? MIN16B + : (int16_t) tmp; + diff[j][i] = (int16_t) abs( tmp16 - pcm ); + max_diff = max( max_diff, diff[j][i] ); + } + } + + if ( max_diff > abs_tol ) + { + IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "SPAR FOA ENC fb mixer out mismatch, max diff = %d", max_diff ); + } + } +#endif + + /*-----------------------------------------------------------------------------------------* + * Re-order the dmx back to ACN/SN3D format + *-----------------------------------------------------------------------------------------*/ + + order = remix_order_set[pState->hMdEnc->spar_md_cfg.remix_unmix_order]; + + for ( i = 0; i < input_frame; i++ ) + { + for ( j = 0; j < nchan_transport; j++ ) + { + data_f[order[j]][i] = p_pcm_tmp[j][i] * PCM16_TO_FLT_FAC; + } + for ( ; j < IVAS_SPAR_MAX_DMX_CHS; j++ ) + { + data_f[order[j]][i] = 0; + } + } + + wmops_sub_end(); + + return error; +} diff --git a/lib_enc/ivas_spar_foa_md_enc.c b/lib_enc/ivas_spar_foa_md_enc.c new file mode 100644 index 0000000000..a3416c360f --- /dev/null +++ b/lib_enc/ivas_spar_foa_md_enc.c @@ -0,0 +1,1937 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "math.h" +#include "ivas_rom_com.h" +#include +#include "wmops.h" + + +#ifdef DEBUG_SPAR_FOA +extern FILE *fMd_data; +extern float max_diff; +extern int32_t dbg_frm_num; +extern int32_t dbg_band; +extern int32_t dbg_type; +int32_t frm = 0; +#endif + + +/*------------------------------------------------------------------------------------------* + * PreProcessor + *------------------------------------------------------------------------------------------*/ +#define IVAS_MAX_MD_BYTES ( 1000 ) + +#ifdef DEBUG_SPAR_FOA +#define MD_TOL ( 0.00015f ) +#define MD_TOL_MAX ( 0.012f ) +#endif + +static const float pr_boost_range[2] = { 0.1f, 0.4f }; + +typedef enum ivas_strats_t +{ + START, + BASE, + BASE_DIFF, + BASE_NOEC, + FOUR_A, + FOUR_B, + FOUR_C, + FOUR_D, + NO_STRAT +} ivas_strats_t; + + +/*------------------------------------------------------------------------------------------* + * Static functions declaration + *------------------------------------------------------------------------------------------*/ + +static void ivas_band_mixer( float *cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], const int16_t num_ch, int16_t *num_bands, int16_t red_band_fact ); + +static void ivas_get_band_differential_index( ivas_band_coeffs_ind_t *pBand_idx, const int16_t q_levels[2], const int16_t one_sided, const int16_t nB, const int16_t complex_cov, const int16_t dim, const ivas_coeffs_type_t coeff_type ); + +static void ivas_get_huffman_coded_bs( ivas_spar_foa_md_enc_state_t *pState, BSTR_ENC_HANDLE hMetaData, const int16_t nB, const int16_t qsi, const int16_t planarCP ); + +static void ivas_get_arith_coded_bs( ivas_spar_foa_md_enc_state_t *pState, BSTR_ENC_HANDLE hMetaData, const int16_t *pDo_diff, const int16_t bands_bw, const int16_t nB, const int16_t qsi, const int16_t planarCP ); + +static ivas_error ivas_spar_foa_set_enc_config( ivas_spar_foa_md_enc_state_t *pState, int16_t *max_freq_per_chan, const int16_t nchan_transport, float *pFC, const int16_t nchan_inp ); + +static void ivas_select_next_strat( ivas_strats_t prior_strat, ivas_strats_t cs[MAX_QUANT_STRATS], const int16_t dmx_switch, const int16_t dtx_vad ); + +static void ivas_store_prior_coeffs( ivas_spar_foa_md_enc_state_t *hMdEnc, const int16_t num_bands, const int16_t bands_bw, const int16_t strat, const int16_t dtx_vad, const int16_t qsi ); + +static void ivas_write_parameter_bitstream( ivas_spar_foa_md_enc_state_t *hMdEnc, const int16_t nB, const int16_t bands_bw, BSTR_ENC_HANDLE hMetaData, const int32_t ivas_total_brate, const int16_t dtx_silence_mode, const int16_t strat, const int16_t qsi, const int16_t planarCP ); + +static ivas_error ivas_spar_foa_md_enc_init( ivas_spar_foa_md_enc_state_t *pState, const ENCODER_CONFIG_HANDLE hEncoderConfig ); + +static void ivas_spar_foa_quant_pred_coeffs_dtx( ivas_spar_md_t *pSpar_md, float **ppValues, const int16_t ndm, int16_t **ppIndex, const int16_t dim1, float **ppQuant ); + +static void ivas_quant_p_per_band_dtx( float **ppP_mat, const int16_t num_dec, const int16_t num_dmx, int16_t *ppIdx_pd, float **ppP_out, const int16_t num_ch ); + +static void ivas_write_parameter_bitstream_dtx( ivas_spar_md_t *pSpar_md, BSTR_ENC_HANDLE hMetaData, int16_t *num_dmx, int16_t *num_dec, const int16_t num_bands ); + +static void ivas_quant_p_per_band( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const int16_t num_ch ); + +static void ivas_quant_c_per_band( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const int16_t ndec, const int16_t ndm ); + +static void ivas_quant_pred_coeffs_per_band( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const int16_t num_ch ); + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_md_enc_open() + * + * Allocate and initialize SPAR MD encoder handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_spar_foa_md_enc_open( + ivas_spar_foa_md_enc_state_t **hMdEnc_in, /* i/o: SPAR MD encoder handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +) +{ + ivas_spar_foa_md_enc_state_t *hMdEnc; + ivas_error error; + int16_t num_channels, i, j, order; + order = min( hEncoderConfig->sba_order, IVAS_MAX_SBA_ORDER ); + + error = IVAS_ERR_OK; + + if ( ( hMdEnc = (ivas_spar_foa_md_enc_state_t *) count_malloc( sizeof( ivas_spar_foa_md_enc_state_t ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD encoder" ); + } + + num_channels = 2 * order + 2; + + if ( ( hMdEnc->mixer_mat = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdEnc->mixer_mat[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdEnc->mixer_mat[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( hMdEnc->cov_real = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdEnc->cov_real[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdEnc->cov_real[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); + } + } + } + + if ( ( hMdEnc->cov_dtx_real = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdEnc->cov_dtx_real[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdEnc->cov_dtx_real[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); + } + } + } + + if ( ( hMdEnc->mixer_mat_local = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( i = 0; i < num_channels; i++ ) + { + if ( ( hMdEnc->mixer_mat_local[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + for ( j = 0; j < num_channels; j++ ) + { + if ( ( hMdEnc->mixer_mat_local[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); + } + } + } + + if ( ( error = ivas_spar_foa_md_enc_init( hMdEnc, hEncoderConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + + *hMdEnc_in = hMdEnc; + + return error; +} + + +/*------------------------------------------------------------------------- + * ivas_spar_foa_md_enc_close() + * + * Deallocate SPAR MD encoder handle + *------------------------------------------------------------------------*/ + +void ivas_spar_foa_md_enc_close( + ivas_spar_foa_md_enc_state_t **hMdEnc_in /* i/o: SPAR MD encoder handle */ +) +{ + int16_t num_channels, i, j; + ivas_spar_foa_md_enc_state_t *hMdEnc; + + hMdEnc = *hMdEnc_in; + num_channels = hMdEnc->num_umx_ch; + + if ( hMdEnc->mixer_mat != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdEnc->mixer_mat[i][j] ); + } + count_free( hMdEnc->mixer_mat[i] ); + } + count_free( hMdEnc->mixer_mat ); + } + + if ( hMdEnc->cov_real != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdEnc->cov_real[i][j] ); + } + count_free( hMdEnc->cov_real[i] ); + } + count_free( hMdEnc->cov_real ); + } + + if ( hMdEnc->cov_dtx_real != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdEnc->cov_dtx_real[i][j] ); + } + count_free( hMdEnc->cov_dtx_real[i] ); + } + count_free( hMdEnc->cov_dtx_real ); + } + + if ( hMdEnc->mixer_mat_local != NULL ) + { + for ( i = 0; i < num_channels; i++ ) + { + + for ( j = 0; j < num_channels; j++ ) + { + count_free( hMdEnc->mixer_mat_local[i][j] ); + } + count_free( hMdEnc->mixer_mat_local[i] ); + } + count_free( hMdEnc->mixer_mat_local ); + } + + if ( hMdEnc != NULL ) + { + count_free( hMdEnc ); + hMdEnc = NULL; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_md_enc_init() + * + * Init call for md gen process + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_spar_foa_md_enc_init( + ivas_spar_foa_md_enc_state_t *pState, /* o : MD encoder handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ +) +{ + float pFC[IVAS_MAX_NUM_BANDS]; + int16_t table_idx; + float PR_minmax[2]; + int16_t sba_order; + int16_t num_channels, i, j, k; + + sba_order = min( hEncoderConfig->sba_order, IVAS_MAX_SBA_ORDER ); + + num_channels = ivas_sba_get_nchan_metadata( sba_order ); + + table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + + pState->spar_md_cfg.gen_bs = 1; + ivas_spar_set_bitrate_config( &pState->spar_md_cfg, table_idx, SPAR_DIRAC_SPLIT_START_BAND ); + + /* get FB coefficients */ + for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) + { + pFC[i] = ivas_fb_fcs_12band_1ms[i] * hEncoderConfig->input_Fs * 0.5f; + } + + ivas_spar_foa_set_enc_config( pState, pState->spar_md_cfg.max_freq_per_chan, pState->spar_md_cfg.nchan_transport, pFC, num_channels ); + /* + if(pState->spar_md_cfg.quant_strat[0].C.q_levels[0] == 0 || pState->spar_md_cfg.quant_strat[0].C.q_levels[1] == 0 + || pState->spar_md_cfg.quant_strat[0].PR.q_levels[0] == 0 || pState->spar_md_cfg.quant_strat[0].PR.q_levels[1] == 0 + || pState->spar_md_cfg.quant_strat[0].P_c.q_levels[0] == 0 || pState->spar_md_cfg.quant_strat[0].P_c.q_levels[1] == 0 + || pState->spar_md_cfg.quant_strat[0].P_r.q_levels[0] == 0 || pState->spar_md_cfg.quant_strat[0].P_r.q_levels[1] == 0) + { + pState->spar_md_cfg.gen_bs = 0; + } + else if(0 != pState->spar_md_cfg.gen_bs) + { + pState->spar_md_cfg.quant_strat_bits = ivas_get_bits_to_encode(MAX_QUANT_STRATS); + } +*/ + + if ( pState->spar_md_cfg.nchan_transport != 2 && ( ( pState->spar_md_cfg.remix_unmix_order == 1 ) || ( pState->spar_md_cfg.remix_unmix_order == 2 ) ) ) + { + return IVAS_ERR_INTERNAL; + } + + ivas_arith_coeffs_enc_init( &pState->arith_coeffs, &pState->spar_md_cfg, table_idx ); + ivas_huff_coeffs_enc_init( &pState->huff_coeffs, table_idx ); + + if ( hEncoderConfig->Opt_DTX_ON == 1 ) + { + /* DTX quant init */ + PR_minmax[0] = pState->spar_md_cfg.quant_strat[0].PR.min; + PR_minmax[1] = pState->spar_md_cfg.quant_strat[0].PR.max; + ivas_spar_quant_dtx_init( &pState->spar_md, PR_minmax ); + } + + pState->spar_md_cfg.prior_strat = START; + pState->spar_md_cfg.prev_quant_idx = -1; + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + pState->mixer_mat[i][j][k] = 0; + } + } + } + + for ( i = 0; i < num_channels; i++ ) + { + for ( j = 0; j < num_channels; j++ ) + { + for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) + { + pState->cov_real[i][j][k] = 0; + pState->cov_dtx_real[i][j][k] = 0; + } + } + } + + ivas_clear_band_coeffs( pState->spar_md.band_coeffs, IVAS_MAX_NUM_BANDS ); + ivas_clear_band_coeff_idx( pState->spar_md.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); + ivas_clear_band_coeff_idx( pState->spar_md_prior.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); + ivas_clear_band_coeff_idx( pState->spar_md_prior.band_coeffs_idx_mapped, IVAS_MAX_NUM_BANDS ); + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_set_enc_config() + * + * Set configuration for SPAR FOA md gen + *-----------------------------------------------------------------------------------------*/ + +static ivas_error ivas_spar_foa_set_enc_config( + ivas_spar_foa_md_enc_state_t *pState, + int16_t *max_freq_per_chan, + const int16_t nchan_transport, + float *pFC, + const int16_t nchan_inp ) +{ + int16_t i, j; + int16_t tmp_dmx_ch; + + for ( i = 0; i < nchan_transport; i++ ) + { + if ( max_freq_per_chan != NULL ) + { + pState->spar_md_cfg.max_freq_per_chan[i] = ( max_freq_per_chan[i] != 0 ) ? max_freq_per_chan[i] : max_freq_per_chan[0]; + } + else + { + pState->spar_md_cfg.max_freq_per_chan[i] = IVAS_SPAR_FOA_DFLT_FREQ_PER_CHAN; + } + } + pState->num_umx_ch = nchan_inp; + pState->num_decorr = nchan_inp - 1; + + for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) + { + tmp_dmx_ch = 0; + for ( j = 0; j < nchan_transport; j++ ) + { + if ( pFC[i] < pState->spar_md_cfg.max_freq_per_chan[j] ) + { + tmp_dmx_ch += 1; + } + } + + pState->spar_md_cfg.num_dmx_chans_per_band[i] = tmp_dmx_ch; + pState->spar_md_cfg.num_decorr_per_band[i] = pState->num_umx_ch - tmp_dmx_ch; + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_band_limit_dmx_matrix() + * + * Band limit downmix matrix + *-----------------------------------------------------------------------------------------*/ + +static void ivas_band_limit_dmx_matrix( + ivas_spar_foa_md_enc_state_t *hMdEnc, /* i/o: SPAR MD encoder handle */ + const int16_t num_ch, + const int16_t num_bands, + const int16_t bands_bw ) +{ + int16_t i, j, b, ndm; + + for ( b = 0; b < num_bands; b++ ) + { + ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; + + for ( i = ndm; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + hMdEnc->mixer_mat[i][j][b] = 0; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_band_mixing() + * + * Band mixing downmix matrix + *-----------------------------------------------------------------------------------------*/ + +static void ivas_band_mixing( + ivas_spar_foa_md_enc_state_t *hMdEnc, /* i/o: SPAR MD encoder handle */ + const int16_t num_ch, + const int16_t num_bands, + const int16_t nchan_transport, + const int16_t upmixed_bands ) +{ + int16_t i, j, k, b; + int16_t red_band_fact; + + red_band_fact = upmixed_bands / num_bands; + + for ( i = 0; i < nchan_transport; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + for ( k = num_bands - 1; k >= 0; k-- ) + { + for ( b = red_band_fact - 1; b >= 0; b-- ) + { + hMdEnc->mixer_mat[i][j][red_band_fact * k + b] = hMdEnc->mixer_mat[i][j][k]; + } + } + for ( k = red_band_fact * num_bands; k < upmixed_bands; k++ ) + { + hMdEnc->mixer_mat[i][j][k] = hMdEnc->mixer_mat[i][j][( red_band_fact * num_bands ) - 1]; + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function write_metadata_buffer() + * + * + *-----------------------------------------------------------------------------------------*/ + +static void write_metadata_buffer( + BSTR_ENC_HANDLE hMetaData_tmp, + BSTR_ENC_HANDLE hMetaData, + const int16_t bit_pos_start, + const int16_t next_ind_start, + const int16_t last_ind_start ) +{ + int16_t i; + + if ( hMetaData->nb_bits_tot > 0 ) + { + restore_metadata_buffer( hMetaData, next_ind_start, last_ind_start, bit_pos_start ); + } + + for ( i = 0; i < hMetaData_tmp->next_ind; i++ ) + { + push_next_indice( hMetaData, hMetaData_tmp->ind_list[i].value, hMetaData_tmp->ind_list[i].nb_bits ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_md_enc_process() + * + * SPAR FoA Meta Data generation process + *-----------------------------------------------------------------------------------------*/ + +ivas_error ivas_spar_foa_md_enc_process( + ivas_spar_foa_md_enc_state_t *hMdEnc, /* i/o: SPAR MD encoder handle */ + const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ + ivas_spar_foa_md_enc_in_buf_t *pIn_buf, + BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ + const int16_t dtx_silence_mode ) +{ + float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; + float dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; + + int16_t i, b, qsi, ndm, ndec, num_ch; + int16_t j, planarCP; + int16_t num_bands = pIn_buf->num_bands; + int16_t dtx_vad = pIn_buf->dtx_vad; + int16_t active_w, nchan_transport, dmx_switch, strat, sba_order; + int16_t nB, bands_bw, packed_ok = 0; + ivas_strats_t cs[MAX_CODING_STRATS]; + int16_t code_strat; + int16_t bit_pos_start, next_ind_start, last_ind_start; + BSTR_ENC_DATA hMetaData_tmp; + Indice ind_list_tmp[MAX_BITS_METADATA]; // IVAS_fmToDo: size to be optimized + float Wscale[IVAS_MAX_NUM_BANDS]; + ivas_spar_foa_md_enc_state_t *pState = hMdEnc; + int16_t num_quant_strats = pState->spar_md_cfg.num_quant_strats; +#ifdef DEBUG_SPAR_FOA + int16_t count; + int16_t ii, jj; + float C_re_mat[IVAS_SPAR_MAX_CH - 1][IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; + float abs_diff; + frm++; +#endif + + sba_order = min( hEncoderConfig->sba_order, IVAS_MAX_SBA_ORDER ); + num_ch = ivas_sba_get_nchan_metadata( sba_order ); + active_w = pState->spar_md_cfg.active_w; + nchan_transport = pState->spar_md_cfg.nchan_transport; + + if ( hEncoderConfig->ivas_total_brate == BRATE_SPAR_Q_STRAT && sba_order == 1 ) + { + /* make sure that qsi is always 0 (temporary bits are '00') */ + num_quant_strats = 1; + } + + hMetaData_tmp.ind_list = ind_list_tmp; + + /* Save state of metadata bitstream buffer */ + bit_pos_start = hMetaData->nb_bits_tot; + next_ind_start = hMetaData->next_ind; + last_ind_start = hMetaData->last_ind; + + if ( hEncoderConfig->Opt_DTX_ON == 0 ) + { + dtx_vad = 1; + } + + dmx_switch = 0; + + if ( dtx_vad == 0 ) + { + nB = SPAR_DTX_BANDS; + bands_bw = num_bands / nB; + + ivas_band_mixer( pIn_buf->cov_real, num_ch, &num_bands, bands_bw ); + } + else + { + nB = num_bands; + bands_bw = 1; + } + + ivas_compute_spar_params( pIn_buf->cov_real, dm_fv_re, 0, pState->mixer_mat, 0, nB, dtx_vad, num_ch, + bands_bw, active_w, &pState->spar_md_cfg, &pState->spar_md, Wscale, 0 ); + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + for ( b = 0; b < num_bands; b++ ) + { + hMdEnc->mixer_mat_local[i][j][b] = pState->mixer_mat[i][j][b]; + } + } + } + + planarCP = 0; + code_strat = 0; +#ifdef DEBUG_SPAR_MD_TARGET_TUNING + for ( qsi = 0; qsi < 1; qsi++ ) +#else + for ( qsi = 0; qsi < num_quant_strats; qsi++ ) +#endif + { +#ifdef SPAR_HOA_DBG + fprintf( stdout, "qsi = %d\n", qsi ); +#endif + if ( qsi == 2 && ivas_spar_br_table_consts[pState->table_idx].usePlanarCoeff ) + { + planarCP = 1; +#ifdef SPAR_HOA_DBG + fprintf( stdout, "planarCP = 1\n" ); +#endif + } + else + { + planarCP = 0; + } + + if ( planarCP ) + { + for ( b = 0; b < num_bands; b++ ) + { + ndm = pState->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; + + if ( ndm != num_ch ) + { + ivas_calc_c_p_coeffs( &pState->spar_md, pIn_buf->cov_real, 0, hMdEnc->mixer_mat_local, num_ch, ndm, b, dtx_vad, 1, planarCP ); + } + } + } +#ifdef DEBUG_SPAR_FOA + count = 0; +#endif + for ( b = 0; b < num_bands; b++ ) + { + ndm = pState->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; + ndec = pState->spar_md_cfg.num_decorr_per_band[b * bands_bw]; +#ifdef DEBUG_SPAR_FOA + /* Plug Matlab values */ + + /* pred values */ + if ( fMd_data != NULL ) + { + /*printf("MD file found\n");*/ + float pred_mat; + for ( ii = 0; ii < num_ch - 1; ii++ ) + { + fscanf( fMd_data, "%f\n", &pred_mat ); + count++; + if ( qsi == 0 ) + { + if ( ( pState->spar_md.band_coeffs[b].pred_re[ii] > pState->spar_md_cfg.quant_strat[0].PR.max || pState->spar_md.band_coeffs[b].pred_re[ii] < pState->spar_md_cfg.quant_strat[0].PR.min ) && ( pred_mat > pState->spar_md_cfg.quant_strat[0].PR.max || pred_mat < pState->spar_md_cfg.quant_strat[0].PR.min ) ) + { + pState->spar_md.band_coeffs[b].pred_re[ii] = pred_mat; + } + else + { + abs_diff = fabsf( pState->spar_md.band_coeffs[b].pred_re[ii] - pred_mat ); + if ( abs_diff > max_diff ) + { + max_diff = abs_diff; + dbg_frm_num = frm; + dbg_band = b; + dbg_type = 0; + } + if ( abs_diff > MD_TOL_MAX ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "ERROR: pred coefffs Matlab MD & C MD values mismatch\n\n" ); + } + else + { + pState->spar_md.band_coeffs[b].pred_re[ii] = pred_mat; + } + } + } + } + } + + /* P values */ + if ( fMd_data != NULL ) + { + float P_re_mat; + for ( jj = 0; jj < num_ch - ndm; jj++ ) + { + fscanf( fMd_data, "%f\n", &P_re_mat ); + count++; + if ( ( pState->spar_md.band_coeffs[b].P_re[jj] > pState->spar_md_cfg.quant_strat[0].P_r.max || pState->spar_md.band_coeffs[b].P_re[jj] < pState->spar_md_cfg.quant_strat[0].P_r.min ) && ( P_re_mat > pState->spar_md_cfg.quant_strat[0].P_r.max || P_re_mat < pState->spar_md_cfg.quant_strat[0].P_r.min ) ) + { + pState->spar_md.band_coeffs[b].P_re[jj] = P_re_mat; + } + else + { + abs_diff = fabsf( pState->spar_md.band_coeffs[b].P_re[jj] - P_re_mat ); + if ( abs_diff > max_diff ) + { + max_diff = abs_diff; + dbg_frm_num = frm; + dbg_band = b; + dbg_type = 1; + } + if ( abs_diff > MD_TOL_MAX ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "ERROR: P mat Matlab MD & C MD values mismatch %f\n\n", abs_diff ); + } + else + { + pState->spar_md.band_coeffs[b].P_re[jj] = P_re_mat; + } + } + } + } + + /* C values */ + if ( fMd_data != NULL && ndm != 1 && ndm != num_ch ) + { + for ( jj = 0; jj < ndm - 1; jj++ ) + { + for ( ii = 0; ii < num_ch - ndm; ii++ ) + { + fscanf( fMd_data, "%f\n", &C_re_mat[ii][jj][b] ); + count++; +#ifdef SPAR_HOA_DBG + /*fprintf(stdout, "count: %d\n", count);*/ +#endif + } + } + } +#endif + + if ( dtx_vad == 1 ) + { + if ( ndm != num_ch ) + { +#ifdef SPAR_HOA_DBG + /* fprintf(stderr, "\n\n P coefficients: band %d\n", b); + + for (i = 0; i < ndec; i++) + { + for (j = 0; j < ndec; j++) + { + fprintf(stderr, "%f, ", hMdEnc->spar_md.band_coeffs[b].P_re[i][j]);//, hMdEnc->spar_md.band_coeffs[b].P_im[i][j]); + } + fprintf(stderr, "\n"); + } + fprintf(stderr, "\n\n"); */ +#endif + + + if ( planarCP ) + { + for ( i = 0; i < ndec; i++ ) + { + if ( !keep_planar[i] ) + { + hMdEnc->spar_md.band_coeffs[b].P_re[i] = 0.0f; + } + } +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n Planar P coefficients: band %d\n", b); + for (i = 0; i < ndec; i++) + { + for (j = 0; j < ndec; j++) + { + fprintf(stderr, "%f, ", hMdEnc->spar_md.band_coeffs[b].P_re[i][j]); //, hMdEnc->spar_md.band_coeffs[b].C_im[i][j]); + } + fprintf(stderr, "\n"); + } + fprintf(stderr, "\n\n"); */ +#endif + } + + ivas_quant_p_per_band( &pState->spar_md.band_coeffs[b], &pState->spar_md.band_coeffs_idx[b], &pState->spar_md_cfg.quant_strat[qsi], num_ch ); + } + + ivas_quant_pred_coeffs_per_band( &pState->spar_md.band_coeffs[b], &pState->spar_md.band_coeffs_idx[b], &pState->spar_md_cfg.quant_strat[qsi], num_ch ); + } + else + { + float **ppPred_re, **ppPred_quant, *pPred_re, *pPred_quant; + int16_t **ppPred_idx, *pPred_re_idx; + + if ( ndm != num_ch ) + { + float *P_re[IVAS_SPAR_MAX_CH - 1], *P_re_quant[IVAS_SPAR_MAX_CH - 1]; + float **ppP_re = (float **) &P_re[0]; + float **ppP_re_quant = (float **) &P_re_quant[0]; + int16_t *ppP_idx = &pState->spar_md.band_coeffs_idx[b].decd_index_re[0]; + + for ( i = 0; i < ndec; i++ ) + { + ppP_re[i] = pState->spar_md.band_coeffs[b].P_re; + ppP_re_quant[i] = pState->spar_md.band_coeffs[b].P_quant_re; + } + + ivas_quant_p_per_band_dtx( ppP_re, ndec, ndm, ppP_idx, ppP_re_quant, num_ch ); + } + + ppPred_idx = (int16_t **) &pPred_re_idx; + ppPred_re = (float **) &pPred_re; + ppPred_quant = (float **) &pPred_quant; + + ppPred_re[0] = pState->spar_md.band_coeffs[b].pred_re; + ppPred_idx[0] = pState->spar_md.band_coeffs_idx[b].pred_index_re; + ppPred_quant[0] = pState->spar_md.band_coeffs[b].pred_quant_re; + + for ( i = 0; i < num_ch - 1; i++ ) + { + pState->spar_md.band_coeffs[b].pred_quant_re[i] = 0; + } + + ivas_spar_foa_quant_pred_coeffs_dtx( &pState->spar_md, ppPred_re, ndm, ppPred_idx, num_ch - 1, ppPred_quant ); + } + } + + for ( i = 0; i < num_ch - 1; i++ ) + { + for ( b = 0; b < num_bands; b++ ) + { + pred_coeffs_re[i][b] = Wscale[b] * pState->spar_md.band_coeffs[b].pred_quant_re[i]; + } + } + + ivas_create_fullr_dmx_mat( pred_coeffs_re, dm_fv_re, pState->mixer_mat, num_ch, 0, num_bands, active_w, &pState->spar_md_cfg ); + + for ( b = 0; b < num_bands; b++ ) + { + ndm = pState->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; + ndec = pState->spar_md_cfg.num_decorr_per_band[b * bands_bw]; + + for ( i = 0; i < num_ch; i++ ) + { + pState->mixer_mat[0][i][b] *= Wscale[b]; + } + + if ( ( ndm != num_ch ) && ( ndm != 1 ) ) + { + ivas_calc_c_p_coeffs( &pState->spar_md, pIn_buf->cov_real, 0, pState->mixer_mat, num_ch, ndm, b, dtx_vad, 0, planarCP ); +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n C coefficients: band %d\n", b); + + for (i = 0; i < num_ch - ndm; i++) + { + for (j = 0; j < ndm - 1; j++) + { + fprintf(stderr, "%f, ", pState->spar_md.band_coeffs[b].C_re[i][j]); + } + fprintf(stderr, "\n"); + } + fprintf(stderr, "\n\n"); */ +#endif + if ( planarCP ) + { + for ( i = 0; i < num_ch - ndm; i++ ) + { + if ( !keep_planar[i] ) + { + for ( j = 0; j < ndm - 1; j++ ) + { + pState->spar_md.band_coeffs[b].C_re[i][j] = 0.0f; + } + } + } +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n Planar C coefficients: band %d\n", b); + + for (i = 0; i < num_ch - ndm; i++) + { + for (j = 0; j < ndm - 1; j++) + { + fprintf(stderr, "%f, ", pState->spar_md.band_coeffs[b].C_re[i][j]); // , pState->spar_md.band_coeffs[band_idx].C_im[i][j]); + } + fprintf(stderr, "\n"); + } + fprintf(stderr, "\n\n"); */ +#endif + } + +#ifdef DEBUG_SPAR_FOA + if ( fMd_data != NULL ) + { + for ( jj = 0; jj < nchan_transport - 1; jj++ ) + { + for ( ii = 0; ii < num_ch - nchan_transport; ii++ ) + { + if ( ( pState->spar_md.band_coeffs[b].C_re[ii][jj] > pState->spar_md_cfg.quant_strat[0].C.max || pState->spar_md.band_coeffs[b].C_re[ii][jj] < pState->spar_md_cfg.quant_strat[0].C.min ) && ( C_re_mat[ii][jj][b] > pState->spar_md_cfg.quant_strat[0].C.max || C_re_mat[ii][jj][b] < pState->spar_md_cfg.quant_strat[0].C.min ) ) + { + pState->spar_md.band_coeffs[b].C_re[ii][jj] = C_re_mat[ii][jj][b]; + } + else + { + abs_diff = (float) fabs( pState->spar_md.band_coeffs[b].C_re[ii][jj] - C_re_mat[ii][jj][b] ); + if ( abs_diff > max_diff ) + { + max_diff = abs_diff; + dbg_frm_num = frm; + dbg_band = b; + dbg_type = 2; + } + if ( abs_diff > MD_TOL_MAX ) + { + return ( IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "\n Matlab MD & C MD values mismatch" ) ); + } + else + { + pState->spar_md.band_coeffs[b].C_re[ii][jj] = C_re_mat[ii][jj][b]; + } + } + } + } + } +#endif + ivas_quant_c_per_band( &pState->spar_md.band_coeffs[b], &pState->spar_md.band_coeffs_idx[b], + &pState->spar_md_cfg.quant_strat[qsi], ndec, ndm ); +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n quantised C indexes: band %d\n", b); + + for (i = 0; i < ndec * (ndm-1); i++) + { + fprintf(stderr, "%d, ", pState->spar_md.band_coeffs_idx[b].drct_index_re[i]); + } + fprintf(stderr, "\n\n");*/ +#endif + } + } + + /* band limit downmix matrix */ + ivas_band_limit_dmx_matrix( pState, num_ch, num_bands, bands_bw ); + + /* band mixing */ + if ( bands_bw > 1 ) + { + ivas_band_mixing( pState, num_ch, num_bands, nchan_transport, pIn_buf->num_bands ); + } + + if ( pState->spar_md_cfg.gen_bs == 0 ) + { + break; + } + + if ( dtx_vad == 0 ) + { + ivas_write_parameter_bitstream_dtx( &pState->spar_md, hMetaData, pState->spar_md_cfg.num_dmx_chans_per_band, pState->spar_md_cfg.num_decorr_per_band, num_bands ); + break; + } + + ivas_select_next_strat( pState->spar_md_cfg.prior_strat, cs, dmx_switch, dtx_vad ); + + for ( i = 0; i < MAX_CODING_STRATS; i++ ) + { + strat = cs[i]; + if ( strat != NO_STRAT ) + { + reset_indices_enc( &hMetaData_tmp, MAX_BITS_METADATA ); + + ivas_write_parameter_bitstream( pState, num_bands, bands_bw, &hMetaData_tmp, hEncoderConfig->ivas_total_brate, dtx_silence_mode, strat, qsi, planarCP ); + if ( hMetaData->nb_bits_tot == bit_pos_start || hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) ) + { + write_metadata_buffer( &hMetaData_tmp, hMetaData, bit_pos_start, next_ind_start, last_ind_start ); + code_strat = strat; + } + if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == 1 ) ) ? 1 : 0 ) <= pState->spar_md_cfg.tgt_bits_per_blk ) + { + packed_ok = 1; + break; + } + } + } + + if ( packed_ok == 1 ) + { + break; + } + + if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == 1 ) ) ? 1 : 0 ) <= pState->spar_md_cfg.max_bits_per_blk ) + { + break; + } + } + + if ( hEncoderConfig->ivas_total_brate >= IVAS_256k ) + { + assert( qsi == 0 ); + } +#ifdef SPAR_HOA_DBG + /*if ( strat >= 4 ) + { + for ( b = 0; b < nB; b++ ) + { + b = 0; + fprintf( stdout, "\n\nMETADATA PR: band %d, qsi %d\n\n", b, qsi ); + for ( i = 0; i < num_ch - 1; i++ ) + { + fprintf( stdout, "i: %d -- %f\t %d\t %d\n", i, //pState->spar_md.band_coeffs[b].pred_re[i], + pState->spar_md.band_coeffs[b].pred_quant_re[i], + pState->spar_md_prior.band_coeffs_idx[b].pred_index_re[i], + pState->spar_md.band_coeffs_idx[b].pred_index_re[i] ); + } + fprintf( stdout, "\n\n METADATA C: band %d\n\n", b ); + int16_t k = 0; + for ( i = 0; i < ndec; i++ ) + { + for ( j = 0; j < ( ndm - 1 ); j++ ) + { + fprintf( stdout, "i: %d -- %f\t %d\t %d\n", i, // pState->spar_md.band_coeffs[b].C_re[i][j], + pState->spar_md.band_coeffs[b].C_quant_re[i][j], + pState->spar_md_prior.band_coeffs_idx[b].drct_index_re[k], + pState->spar_md.band_coeffs_idx[b].drct_index_re[k] ); + k++; + } + } + fprintf( stdout, "\n\n METADATA Pd: band %d\n\n", b ); + for ( i = 0; i < num_ch - ndm; i++ ) + { + fprintf( stdout, "i: %d -- %f\t %d\t %d\n", i, //pState->spar_md.band_coeffs[b].P_re[i][i], + pState->spar_md.band_coeffs[b].P_quant_re[i][i], + pState->spar_md_prior.band_coeffs_idx[b].decd_index_re[i], + pState->spar_md.band_coeffs_idx[b].decd_index_re[i] ); + } + fprintf( stdout, "\n\n" ); + } + }*/ + b = 0; + ndm = pState->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; + + fprintf( stdout, "\n\n Metadata PR (15x1), C(15x15), P(15x15): band %d\n", b ); + for ( i = 0; i < num_ch - 1; i++ ) + { + fprintf( stdout, "i: %d -- %.2f\t|\t", i, pState->spar_md.band_coeffs[b].pred_quant_re[i] ); + if ( i < num_ch - ndm ) + { + if ( keep_planar[i] == 1 ) + { + fprintf( stdout, ">>" ); + } + else + { + fprintf( stdout, " " ); + } + for ( j = 0; j < ndm - 1; j++ ) + { + fprintf( stdout, "%.2f\t", pState->spar_md.band_coeffs[b].C_quant_re[i][j] ); + } + fprintf( stdout, "|\t" ); + for ( j = 0; j < num_ch - ndm; j++ ) + { + fprintf( stdout, "%.2f\t", pState->spar_md.band_coeffs[b].P_quant_re[i][j] ); + } + } + fprintf( stdout, "\n" ); + } + fprintf( stdout, "\n" ); +#endif +#ifdef DEBUG_SPAR_MD_TARGET_TUNING + int16_t md_bits = hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == 1 ) ) ? 1 : 0 ); + FILE *fp = fopen( "spar_md_bitrate.txt", "a" ); + + fprintf( fp, "%d\t %d \t %d\n", md_bits, qsi, code_strat ); + fclose( fp ); +#endif + + if ( pState->spar_md_cfg.gen_bs == 1 ) + { + ivas_store_prior_coeffs( pState, num_bands, bands_bw, code_strat, dtx_vad, qsi ); + } + + pState->spar_md.dtx_vad = dtx_vad; + pState->spar_md.num_bands = num_bands; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_band_mixer() + * + * band mixer + *-----------------------------------------------------------------------------------------*/ + +static void ivas_band_mixer( + float *cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const int16_t num_ch, + int16_t *num_bands, + int16_t red_band_fact ) +{ + int16_t i, j, k, b, orig_band, rem_band; + float avg_cov; + + orig_band = *num_bands; + *num_bands /= red_band_fact; + rem_band = orig_band - ( *num_bands * red_band_fact ); + + for ( i = 0; i < num_ch; i++ ) + { + for ( j = 0; j < num_ch; j++ ) + { + for ( k = 0; k < *num_bands - 1; k++ ) + { + avg_cov = 0.0f; + for ( b = 0; b < red_band_fact; b++ ) + { + avg_cov += cov_re[i][j][red_band_fact * k + b]; + } + cov_re[i][j][k] = avg_cov; + } + + avg_cov = 0.0f; + for ( b = 0; b < red_band_fact + rem_band; b++ ) + { + avg_cov += cov_re[i][j][red_band_fact * ( *num_bands - 1 ) + b]; + } + + cov_re[i][j][*num_bands - 1] = avg_cov; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_write_parameter_bitstream() + * + * Write MD parameters into bitstream + *-----------------------------------------------------------------------------------------*/ + +static void ivas_write_parameter_bitstream( + ivas_spar_foa_md_enc_state_t *hMdEnc, + const int16_t nB, + const int16_t bands_bw, + BSTR_ENC_HANDLE hMetaData, + const int32_t ivas_total_brate, + const int16_t dtx_silence_mode, + const int16_t strat, + const int16_t qsi, + const int16_t planarCP ) +{ + int16_t no_ec, i; + int16_t do_diff[IVAS_MAX_NUM_BANDS]; + + if ( strat == NO_STRAT ) + { + return; + } + + /* write quant strat */ + if ( dtx_silence_mode == 0 && ivas_total_brate >= BRATE_SPAR_Q_STRAT ) + { + push_next_indice( hMetaData, qsi >> 1, hMdEnc->spar_md_cfg.quant_strat_bits - 1 ); + } + else + { + push_next_indice( hMetaData, qsi, hMdEnc->spar_md_cfg.quant_strat_bits ); + } + + no_ec = 0; + + switch ( strat ) + { + case BASE: + push_next_indice( hMetaData, bands_bw - 1, SPAR_NUM_CODING_STRAT_BITS ); + for ( i = 0; i < nB; i++ ) + { + do_diff[i] = 0; + } + break; + case BASE_NOEC: + push_next_indice( hMetaData, bands_bw + 1, SPAR_NUM_CODING_STRAT_BITS ); + for ( i = 0; i < nB; i++ ) + { + do_diff[i] = 0; + } + no_ec = 1; + break; + case FOUR_A: + push_next_indice( hMetaData, 4, SPAR_NUM_CODING_STRAT_BITS ); + for ( i = 0; i < nB; i++ ) + { + do_diff[i] = ( ( ( i + 1 ) & 3 ) != 0 ); + } + ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); + break; + case FOUR_B: + push_next_indice( hMetaData, 5, SPAR_NUM_CODING_STRAT_BITS ); + for ( i = 0; i < nB; i++ ) + { + do_diff[i] = ( ( ( i + 1 ) & 3 ) != 1 ); + } + ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); + break; + case FOUR_C: + push_next_indice( hMetaData, 6, SPAR_NUM_CODING_STRAT_BITS ); + for ( i = 0; i < nB; i++ ) + { + do_diff[i] = ( ( ( i + 1 ) & 3 ) != 2 ); + } + ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); + break; + case FOUR_D: + push_next_indice( hMetaData, 7, SPAR_NUM_CODING_STRAT_BITS ); + for ( i = 0; i < nB; i++ ) + { + do_diff[i] = ( ( ( i + 1 ) & 3 ) != 3 ); + } + ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); + break; + } + +#ifdef SPAR_HOA_DBG + if ( strat < 2 ) + fprintf( stdout, "\n\n no_ec = %d, strat = %d\n", no_ec, strat - 1 ); + else + fprintf( stdout, "\n\n no_ec = %d, strat = %d\n", no_ec, strat ); +#endif + if ( no_ec == 1 ) + { + ivas_get_huffman_coded_bs( hMdEnc, hMetaData, nB, qsi, planarCP ); + } + else + { + ivas_get_arith_coded_bs( hMdEnc, hMetaData, do_diff, bands_bw, nB, qsi, planarCP ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_huffman_coded_bs() + * + * Generate huffman coded bitstream + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_huffman_coded_bs( + ivas_spar_foa_md_enc_state_t *hMdEnc, + BSTR_ENC_HANDLE hMetaData, + const int16_t nB, + const int16_t qsi, + const int16_t planarCP ) +{ + int16_t i, j; + + for ( i = 0; i < nB; i++ ) + { + int16_t code, len; + int16_t ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[i]; + int16_t ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[i]; + + if ( planarCP ) + { + for ( j = 0; j < ndm + ndec - 1; j++ ) + { + ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); + } + + for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) + { + if ( keep_planar[(int16_t) floor( j / ( ndm - 1 ) )] ) + { + ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); + } + } + + for ( j = 0; j < ndec; j++ ) + { + if ( keep_planar[j] ) + { + ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); + } + } + } + else + { + for ( j = 0; j < ndm + ndec - 1; j++ ) + { + ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); + } + + for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) + { + ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); + } + + for ( j = 0; j < ndec; j++ ) + { + ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); + } + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_get_arith_coded_bs() + * + * Generate arithmetic coded bitstream + *-----------------------------------------------------------------------------------------*/ + +static void ivas_get_arith_coded_bs( + ivas_spar_foa_md_enc_state_t *hMdEnc, + BSTR_ENC_HANDLE hMetaData, + const int16_t *pDo_diff, + const int16_t bands_bw, + const int16_t nB, + const int16_t qsi, + const int16_t planarCP ) +{ + int16_t i, any_diff; + ivas_cell_dim_t pred_cell_dims[IVAS_MAX_NUM_BANDS]; + ivas_cell_dim_t drct_cell_dims[IVAS_MAX_NUM_BANDS]; + ivas_cell_dim_t decd_cell_dims[IVAS_MAX_NUM_BANDS]; + ivas_cell_dim_t decx_cell_dims[IVAS_MAX_NUM_BANDS]; + int16_t symbol_arr_re[IVAS_MAX_INPUT_LEN]; + int16_t symbol_arr_old_re[IVAS_MAX_INPUT_LEN]; + + for ( i = 0; i < nB; i++ ) + { + int16_t ndm, ndec; + ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[bands_bw * i]; + ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[bands_bw * i]; + pred_cell_dims[i].dim1 = ndm + ndec - 1; + pred_cell_dims[i].dim2 = 1; + drct_cell_dims[i].dim1 = ndec; + drct_cell_dims[i].dim2 = ndm - 1; + decd_cell_dims[i].dim1 = ndec; + decd_cell_dims[i].dim2 = 1; + decx_cell_dims[i].dim1 = ( ndec * ( ndec - 1 ) ) >> 1; + decx_cell_dims[i].dim2 = 1; + } + + any_diff = 0; + for ( i = 0; i < nB; i++ ) + { + if ( pDo_diff[i] != 0 ) + { + any_diff = 1; + break; + } + } + + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, pred_cell_dims, PRED_COEFF, planarCP ); + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, + symbol_arr_old_re, pred_cell_dims, PRED_COEFF, planarCP ); + } + + ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.pred_arith_re[qsi], &hMdEnc->arith_coeffs.pred_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff ); +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n band_indexes:\n"); + for (int16_t j = 1; j < drct_cell_dims[0].dim1 * drct_cell_dims[0].dim2; j++) + fprintf(stderr, "%d, ", hMdEnc->spar_md.band_coeffs_idx[0].drct_index_re[j]); + fprintf(stderr, "\n\n"); */ +#endif + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, drct_cell_dims, DRCT_COEFF, planarCP ); + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, symbol_arr_old_re, drct_cell_dims, DRCT_COEFF, planarCP ); + } + + if ( planarCP ) + { + for ( i = 0; i < nB; i++ ) + { + drct_cell_dims[i].dim1 = drct_cell_dims[i].dim1 - IVAS_SPAR_HOA3_NP_CHS; + } + } + + ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.drct_arith_re[qsi], &hMdEnc->arith_coeffs.drct_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff ); + + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decd_cell_dims, DECD_COEFF, planarCP ); + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, + symbol_arr_old_re, decd_cell_dims, DECD_COEFF, planarCP ); + } + + if ( planarCP ) + { + for ( i = 0; i < nB; i++ ) + { + decd_cell_dims[i].dim1 = decd_cell_dims[i].dim1 - IVAS_SPAR_HOA3_NP_CHS; + } + } + + ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.decd_arith_re[qsi], &hMdEnc->arith_coeffs.decd_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff ); + + + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decx_cell_dims, DECX_COEFF, planarCP ); + + if ( any_diff == 1 ) + { + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, + symbol_arr_old_re, decx_cell_dims, DECX_COEFF, planarCP ); + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_select_next_strat() + * + * Select next strategy + *-----------------------------------------------------------------------------------------*/ + +static void ivas_select_next_strat( + ivas_strats_t prior_strat, + ivas_strats_t cs[MAX_QUANT_STRATS], + const int16_t dmx_switch, + const int16_t dtx_vad ) +{ + cs[0] = BASE; + cs[1] = BASE_NOEC; + if ( dmx_switch == 0 && dtx_vad ) + { + switch ( prior_strat ) + { + case START: + cs[2] = NO_STRAT; + break; + case BASE: + cs[2] = FOUR_A; + break; + case BASE_DIFF: + cs[2] = FOUR_A; + break; + case BASE_NOEC: + cs[2] = FOUR_A; + break; + case FOUR_A: + cs[2] = FOUR_B; + break; + case FOUR_B: + cs[2] = FOUR_C; + break; + case FOUR_C: + cs[2] = FOUR_D; + break; + case FOUR_D: + cs[2] = FOUR_A; + break; + default: + assert( !"bad value of prior_strat" ); + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_store_prior_coeffs() + * + * Store prior coeffs + *-----------------------------------------------------------------------------------------*/ + +static void ivas_store_prior_coeffs( + ivas_spar_foa_md_enc_state_t *hMdEnc, + const int16_t num_bands, + const int16_t bands_bw, + const int16_t strat, + const int16_t dtx_vad, + const int16_t qsi ) +{ + int16_t i, j, b; + + float one_by_bands_bw = ( 1.0f / bands_bw ); + + if ( dtx_vad == 0 ) + { + hMdEnc->spar_md_cfg.prior_strat = START; + } + else + { + hMdEnc->spar_md_cfg.prior_strat = strat; + } + + hMdEnc->spar_md_cfg.prev_quant_idx = qsi; + + for ( i = 0; i < num_bands; i++ ) + { + b = (int16_t) floor( i * one_by_bands_bw ); + + for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + { + hMdEnc->spar_md_prior.band_coeffs_idx[i].pred_index_re[j] = hMdEnc->spar_md.band_coeffs_idx[b].pred_index_re[j]; + hMdEnc->spar_md_prior.band_coeffs_idx[i].decd_index_re[j] = hMdEnc->spar_md.band_coeffs_idx[b].decd_index_re[j]; + } + for ( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) + { + hMdEnc->spar_md_prior.band_coeffs_idx[i].drct_index_re[j] = hMdEnc->spar_md.band_coeffs_idx[b].drct_index_re[j]; + } + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_spar_foa_quant_pred_coeffs_dtx() + * + * Calculate quantization pred coeffs + *-----------------------------------------------------------------------------------------*/ + +static void ivas_spar_foa_quant_pred_coeffs_dtx( + ivas_spar_md_t *pSpar_md, + float **ppValues, + const int16_t ndm, + int16_t **ppIndex, + const int16_t dim1, + float **ppQuant ) +{ + int16_t i; + int16_t q_lvl; + float *pVal, val, **ppVal; + int16_t *pIdx, idx, **ppIdx; + float pr_min_max[2]; + + ppVal = (float **) &pVal; + ppIdx = (int16_t **) &pIdx; + + ppVal[0] = (float *) &val; + ppIdx[0] = (int16_t *) &idx; + + pr_min_max[0] = pSpar_md->min_max[0]; + pr_min_max[1] = pSpar_md->min_max[1]; + + for ( i = 0; i < dim1; i++ ) + { + q_lvl = dtx_pr_real_q_levels[ndm - 1][i]; + ppVal[0][0] = ppValues[0][i]; + + ivas_quantise_real_values( ppVal, q_lvl, pr_min_max[0], pr_min_max[1], ppIdx, ppVal, 1, 1 ); + ppIndex[0][i] = ppIdx[0][0]; + ppQuant[0][i] = ppVal[0][0]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_quant_p_per_band_dtx() + * + * Calculate quantization p + *-----------------------------------------------------------------------------------------*/ + +static void ivas_quant_p_per_band_dtx( + float **ppP_mat, + const int16_t num_dec, + const int16_t num_dmx, + int16_t *ppIdx_pd, + float **ppP_out, + const int16_t num_ch ) +{ + int16_t i; + float **ppPd, *pPd, pd; + int16_t **ppIdx, *pIdx, idx; + int16_t dim = num_ch - num_dmx; + + ppPd = (float **) &pPd; + ppIdx = (int16_t **) &pIdx; + ppPd[0] = (float *) &pd; + ppIdx[0] = (int16_t *) &idx; + + if ( num_dec == num_ch - 1 ) + { + for ( i = 0; i < dim; i++ ) + { + if ( ppP_mat[i][i] < pr_boost_range[1] && ppP_mat[i][i] > pr_boost_range[0] ) + { + ppP_mat[i][i] = pr_boost_range[1]; + } + } + } + + if ( dim != num_dec ) + { + assert( !"Not Supported!" ); + } + + for ( i = 0; i < dim; i++ ) + { + ppPd[0][0] = ppP_mat[i][i]; + + ivas_quantise_real_values( ppPd, dtx_pd_real_q_levels[num_ch - num_dec - 1][i], dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], ppIdx, ppPd, 1, 1 ); + + ppP_out[i][i] = ppPd[0][0]; + ppIdx_pd[i] = ppIdx[0][0]; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_write_parameter_bitstream_dtx() + * + * Write MD DTX parameters into bitstream + *-----------------------------------------------------------------------------------------*/ + +static void ivas_write_parameter_bitstream_dtx( + ivas_spar_md_t *pSpar_md, + BSTR_ENC_HANDLE hMetaData, + int16_t *num_dmx, + int16_t *num_dec, + const int16_t num_bands ) +{ + int16_t i, j; + float **ppVal, *pVal, val; + int16_t **ppIdx, *pIdx, idx; + float pr_min_max[2]; + int16_t zero_pad_bits, sid_bits_len; + sid_bits_len = hMetaData->nb_bits_tot; + + ppVal = (float **) &pVal; + ppIdx = (int16_t **) &pIdx; + + ppVal[0] = (float *) &val; + ppIdx[0] = (int16_t *) &idx; + + pr_min_max[0] = pSpar_md->min_max[0]; + pr_min_max[1] = pSpar_md->min_max[1]; + + for ( i = 0; i < num_bands; i++ ) + { + int16_t ndm = num_dmx[i]; + int16_t ndec = num_dec[i]; + + for ( j = 0; j < FOA_CHANNELS - 1; j++ ) + { + int16_t pr, pd; + int16_t pr_q_lvls, pd_q_lvls, pr_pd_bits; + int16_t pr_idx_1, pr_idx_2, pd_idx_1, pd_idx_2; + uint16_t value; + + pr_idx_1 = pr_pr_idx_pairs[ndm - 1][j][0]; + pr_idx_2 = pr_pr_idx_pairs[ndm - 1][j][1]; + pd_idx_1 = pr_pd_idx_pairs[ndm - 1][j][0]; + pd_idx_2 = pr_pd_idx_pairs[ndm - 1][j][1]; + + if ( pr_idx_1 != 0 || pd_idx_1 != 0 || pr_idx_2 != 0 || pd_idx_2 != 0 ) + { + if ( pr_idx_1 == 0 || pr_idx_2 == 0 ) + { + pr_q_lvls = dtx_pr_real_q_levels[ndm - 1][pd_idx_1 - 1]; + pr = pSpar_md->band_coeffs_idx[i].pred_index_re[pd_idx_1 - 1]; + + if ( ( j + 1 ) > ndec ) + { + pd_q_lvls = 1; + pd = 0; + } + else + { + pd_q_lvls = dtx_pd_real_q_levels[ndm - 1][pd_idx_2 - 1]; + pd = pSpar_md->band_coeffs_idx[i].decd_index_re[pd_idx_2 - 1]; + } + + ppVal[0][0] = dtx_pd_real_min_max[0]; + ivas_quantise_real_values( ppVal, pd_q_lvls, dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], ppIdx, ppVal, 1, 1 ); + + pd -= ppIdx[0][0]; + + ppVal[0][0] = pr_min_max[0]; + ivas_quantise_real_values( ppVal, pr_q_lvls, pr_min_max[0], pr_min_max[1], ppIdx, ppVal, 1, 1 ); + + pr -= ppIdx[0][0]; + + pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); + + value = (uint16_t) ( pr * pd_q_lvls + pd ); + + push_next_indice( hMetaData, value, pr_pd_bits ); + } + else + { + int16_t pr_q_lvls1, pr_q_lvls2; + int16_t pr_idx1, pr_idx2, pr_pr_bits; + pr_q_lvls1 = dtx_pr_real_q_levels[ndm - 1][pr_idx_1 - 1]; + pr_q_lvls2 = dtx_pr_real_q_levels[ndm - 1][pr_idx_2 - 1]; + + ppVal[0][0] = pr_min_max[0]; + ivas_quantise_real_values( ppVal, pr_q_lvls1, pr_min_max[0], pr_min_max[1], ppIdx, ppVal, 1, 1 ); + + pr_idx1 = pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_1 - 1]; + + pr_idx1 -= ppIdx[0][0]; + + ppVal[0][0] = pr_min_max[0]; + ivas_quantise_real_values( ppVal, pr_q_lvls2, pr_min_max[0], pr_min_max[1], ppIdx, ppVal, 1, 1 ); + + pr_idx2 = pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_2 - 1]; + + pr_idx2 -= ppIdx[0][0]; + + value = (uint16_t) ( pr_idx2 * pr_q_lvls1 + pr_idx1 ); + + pr_pr_bits = ivas_get_bits_to_encode( pr_q_lvls1 * pr_q_lvls2 ); + + push_next_indice( hMetaData, value, pr_pr_bits ); + } + } + } + } + + sid_bits_len = hMetaData->nb_bits_tot - sid_bits_len; + zero_pad_bits = ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - sid_bits_len; + assert( zero_pad_bits >= 0 ); + while ( zero_pad_bits > 0 ) + { + j = min( zero_pad_bits, 16 ); + push_next_indice( hMetaData, 0, j ); + zero_pad_bits -= j; + } + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_quant_pred_coeffs_per_band() + * + * Quantization of prediction coefficients + *-----------------------------------------------------------------------------------------*/ + +static void ivas_quant_pred_coeffs_per_band( + ivas_band_coeffs_t *pband_coeffs, + ivas_band_coeffs_ind_t *pBand_coeffs_idx, + ivas_quant_strat_t *pQs, + const int16_t num_ch ) +{ + float *pQuant_re, *pCoeff_re; + int16_t *pIdx_re; + float **ppPred_coeffs_re = (float **) &pCoeff_re; + float **ppPred_quant_re = (float **) &pQuant_re; + int16_t **ppPred_idx_re = (int16_t **) &pIdx_re; + + ppPred_idx_re[0] = &pBand_coeffs_idx->pred_index_re[0]; + ppPred_coeffs_re[0] = &pband_coeffs->pred_re[0]; + ppPred_quant_re[0] = &pband_coeffs->pred_quant_re[0]; + + ivas_quantise_real_values( ppPred_coeffs_re, pQs->PR.q_levels[0], pQs->PR.min, pQs->PR.max, ppPred_idx_re, ppPred_quant_re, 1, ( num_ch - 1 ) ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_quant_c_per_band() + * + * Quantization of cross prediction c coeffs for each band + *-----------------------------------------------------------------------------------------*/ + +static void ivas_quant_c_per_band( + ivas_band_coeffs_t *pband_coeffs, + ivas_band_coeffs_ind_t *pBand_coeffs_idx, + ivas_quant_strat_t *pQs, + const int16_t ndec, + const int16_t ndm ) +{ + int16_t i; + int16_t j, k; + float C_re[IVAS_SPAR_MAX_C_COEFF]; + float *pC_re[IVAS_SPAR_MAX_C_COEFF]; + int16_t *pIdx_re[IVAS_SPAR_MAX_C_COEFF]; + float **ppC_re = (float **) &pC_re[0]; + int16_t **ppIdx_re = (int16_t **) &pIdx_re[0]; + + for ( i = 0; i < ndec * ( ndm - 1 ); i++ ) + { + ppC_re[i] = &C_re[i]; + ppIdx_re[i] = &pBand_coeffs_idx->drct_index_re[i]; + } + + k = 0; + for ( i = 0; i < ndec; i++ ) + { + for ( j = 0; j < ndm - 1; j++ ) + { + C_re[k] = pband_coeffs->C_re[i][j]; + k++; + } + } + +#ifdef SPAR_HOA_DBG + /*for (i = 0; i < ndec; i++) + { + for (j = 0; j < ndm - 1; j++) + { + ppIdx_re[i][j] = 100; + } + }*/ +#endif + + ivas_quantise_real_values( ppC_re, pQs->C.q_levels[0], pQs->C.min, pQs->C.max, ppIdx_re, ppC_re, ndec * ( ndm - 1 ), 1 ); + + k = 0; + for ( i = 0; i < ndec; i++ ) + { + for ( j = 0; j < ndm - 1; j++ ) + { + pband_coeffs->C_quant_re[i][j] = C_re[k]; + k++; + } + } +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n Quantising the C coeffs: \n"); + k = 0; + for (i = 0; i < ndec; i++) + { + for (j = 0; j < ndm - 1; j++) + { + fprintf(stderr, "%d,%d: %f, %f, %d\n", i, j, pband_coeffs->C_re[i][j], pband_coeffs->C_quant_re[i][j], pBand_coeffs_idx->drct_index_re[k]); + k++; + } + }*/ +#endif + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function ivas_quant_p_per_band() + * + * Quantization of decorrelation p coeffs for each band + *-----------------------------------------------------------------------------------------*/ + +static void ivas_quant_p_per_band( + ivas_band_coeffs_t *pband_coeffs, + ivas_band_coeffs_ind_t *pBand_coeffs_idx, + ivas_quant_strat_t *pQs, + const int16_t num_ch ) +{ + float P_re_diag[IVAS_SPAR_MAX_CH - 1]; + int16_t i; + int16_t dim = num_ch - 1; + float *pP_diag[IVAS_SPAR_MAX_CH - 1]; + int16_t *pDecd_idx[IVAS_SPAR_MAX_CH - 1]; + float **ppP_diag = (float **) &pP_diag[0]; + int16_t **ppDecd_idx = (int16_t **) &pDecd_idx[0]; + + for ( i = 0; i < dim; i++ ) + { + ppP_diag[i] = &P_re_diag[i]; + ppDecd_idx[i] = &pBand_coeffs_idx->decd_index_re[i]; + } + + for ( i = 0; i < dim; i++ ) + { + P_re_diag[i] = pband_coeffs->P_re[i]; + } + +#ifdef SPAR_HOA_DBG + /*fprintf(stderr, "\n\n P_d:\n"); + for (i = 0; i < dim; i++) + { + fprintf(stderr, "%f, ", P_re_diag[i]); + } + fprintf(stderr, "\n\n");*/ +#endif + + ivas_quantise_real_values( ppP_diag, pQs->P_r.q_levels[0], pQs->P_r.min, pQs->P_r.max, ppDecd_idx, ppP_diag, num_ch - 1, 1 ); + + for ( i = 0; i < dim; i++ ) + { + pband_coeffs->P_quant_re[i] = P_re_diag[i]; + } + + return; +} diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h new file mode 100644 index 0000000000..f158d1174d --- /dev/null +++ b/lib_enc/ivas_stat_enc.h @@ -0,0 +1,1087 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_STAT_ENC_H +#define IVAS_STAT_ENC_H + +#include +#include "options.h" +#include "ivas_cnst.h" +#include "cnst.h" +#include "stat_enc.h" +#include "ivas_cnst.h" +#include "ivas_stat_com.h" + + +/*----------------------------------------------------------------------------------* + * DFT Stereo encoder structures + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_itd_data_struct +{ + int16_t prev_itd; + float itd[STEREO_DFT_ENC_DFT_NB]; + float deltaItd[STEREO_DFT_ENC_DFT_NB]; + int16_t td_itd[STEREO_DFT_ENC_DFT_NB]; + int16_t td_itd_32k[STEREO_DFT_ENC_DFT_NB]; + int16_t itd_index[STEREO_DFT_ENC_DFT_NB]; + float xcorr_smooth[STEREO_DFT_N_32k_ENC]; + float lp_phat_peak; /* low-pass GCC PHAT peak value */ + int16_t itd_hangover; /* ITD hangover counter */ + int16_t itd_cnt; /* Consecutive valid ITD counter */ + float prev_sum_nrg_L_lb; + float prev_xcorr_lb[STEREO_DFT_XCORR_LB_MAX]; + float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM]; + int16_t vad_frm_cnt; + int16_t pre_vad; + int16_t itd_nonzero_cnt; + float acorr_L[STEREO_DFT_BAND_MAX]; + float acorr_R[STEREO_DFT_BAND_MAX]; + float cohSNR; + float itd_thres; + int16_t valid_itd_cnt; /* Extra variable to store value of itd_cnt for fine-control decision making */ + + int16_t detected_itd_flag; + int16_t itd_tracking; + float prev_max; + int16_t prev_index; + float prev_avg_max; + float currFlatness; + + /* Xtalk classifier */ + float prev_m1; + float prev_m2; + int16_t prev_itd1; + int16_t prev_itd2; + +} ITD_DATA, *ITD_DATA_HANDLE; + +typedef struct dft_ana_struct +{ + /*Sizes*/ + int16_t N; /* Size of the frame and hop */ + int16_t NFFT; /* Size of the FFT=frame size+overlap */ + + /*FFT*/ + int16_t dft_ovl; /* Overlap size */ + int16_t dft_zp; /* Zero padding */ + + const float *win_ana; /* DFT analysis window */ + const float *dft_trigo; + const float *dft_trigo_32k; + int16_t dft_trigo_step; + +} DFT_ANA, *DFT_ANA_HANDLE; + +/* State of the range encoder */ +typedef struct +{ + uint32_t rc_low; + uint32_t rc_range; + int16_t rc_cache; + int16_t rc_carry; + int16_t rc_carry_count; + + uint8_t byte_buffer[RANGE_UNI_BUFFER_BYTES_MAX]; + int16_t byte_count; + int16_t last_byte_bit_count; + +} RangeUniEncState; + + +typedef struct stereo_dft_enc_data_struct +{ + STEREO_DFT_CONFIG_DATA_HANDLE hConfig; + + /*Sizes*/ + int16_t N; /* Size of the frame and hop */ + int16_t NFFT; /* Size of the FFT=frame size+overlap */ + + /*FFT*/ + float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC]; + int16_t dft_ovl; /* Overlap size */ + int16_t dft_zp; /* Zero padding */ + + const float *win; /* DFT window */ + const float *win_8k; /* DFT window */ + const float *win_12k8; /* DFT window */ + const float *win_16k; /* DFT window */ + const float *win_32k; /* DFT window */ + + const float *win_ana; /* DFT analysis window */ + const float *win_ana_8k; /* DFT analysis window */ + const float *win_ana_12k8; /* DFT analysis window */ + const float *win_ana_16k; /* DFT analysis window */ + const float *win_ana_32k; /* DFT analysis window */ + + const float *win_mdct_8k; /* DFT analysis window */ + + const float *dft_trigo; + const float *dft_trigo_8k; + const float *dft_trigo_12k8; + const float *dft_trigo_16k; + const float *dft_trigo_32k; + int16_t dft_trigo_step; + + float output_mem_res_8k[STEREO_DFT_OVL_8k]; + + /*I/O channel buffers */ + float output_mem_dmx[STEREO_DFT_OVL_MAX]; + float output_mem_dmx_12k8[STEREO_DFT_OVL_12k8]; + float output_mem_dmx_16k[STEREO_DFT_OVL_16k]; /*can hold 16, 12.8 or 32kHz signals*/ + float output_mem_dmx_32k[STEREO_DFT_OVL_32k]; /*can hold 16, 12.8 or 32kHz signals*/ + float output_mem_dmx_16k_shb[STEREO_DFT_OVL_16k]; + float input_mem_itd[CPE_CHANNELS][STEREO_DFT_OVL_MAX]; + + /*Bands*/ + int16_t band_res[STEREO_DFT_ENC_DFT_NB]; + int16_t band_limits[STEREO_DFT_BAND_MAX + 1]; + int16_t nbands; + int16_t band_limits_dmx[STEREO_DFT_BAND_MAX + 1]; + int16_t nbands_dmx; + + /*Stereo parameters*/ + float past_nrgL[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; + float past_nrgR[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; + float past_dot_prod_real[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; + float past_dot_prod_imag[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; + int16_t nrg_past_pos; + + /*Side Gain*/ + float side_gain[STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX]; + int16_t side_gain_flag_1; + int16_t side_gain_flag_2; + int16_t side_gain_index_ECDiff[STEREO_DFT_BAND_MAX]; + int16_t side_gain_index_ECprevious[STEREO_DFT_BAND_MAX]; + int16_t side_gain_index_EC[STEREO_DFT_BAND_MAX]; + int16_t side_gain_counter; + float side_gain_bitdiff_lp; + + /* Stereo CNG */ + float sidSideGain[STEREO_DFT_ERB4_BANDS]; + float win_ana_energy; + float xspec_smooth[STEREO_DFT_N_32k_ENC]; + float Spd_L_smooth[STEREO_DFT_N_32k_ENC / 2]; + float Spd_R_smooth[STEREO_DFT_N_32k_ENC / 2]; + float sid_gipd; + int16_t coh_fade_counter; + + /*IPD*/ + float gipd[STEREO_DFT_ENC_DFT_NB]; + int16_t gipd_band_max; + int16_t gipd_index; + int16_t no_ipd_flag; /* flag to indicate when group IPD gets used */ + int16_t prev_no_ipd_flag; /* flag from previous frame */ + int16_t no_ipd_cnt; /* counter */ + int16_t no_ipd_cnt1; /* counter */ + int16_t attackPresent; + int16_t wasTransient; + float gainIPD_sm; /* long-term gain IPD for NIPD detection */ + float sfm; + float sum_dot_prod_real; + float sum_dot_prod_img; + + /*ITD*/ + ITD_DATA_HANDLE hItd; + + float voicing_lt; + +#ifdef ITD_WINNER_GAIN_MODIFY + float noise_coherence; + int16_t local_vad; + int16_t mus_flag; + float spd_L_noise[STEREO_DFT_N_32k_ENC / 2]; /*The estimation of spectral power density of noise in the left channel*/ + float spd_R_noise[STEREO_DFT_N_32k_ENC / 2]; /*The estimation of spectral power density of noise in the right channel*/ + float spd_L_noise_min[STEREO_DFT_N_32k_ENC / 2]; + float spd_R_noise_min[STEREO_DFT_N_32k_ENC / 2]; + float spd_L_noise_max[STEREO_DFT_N_32k_ENC / 2]; + float spd_R_noise_max[STEREO_DFT_N_32k_ENC / 2]; + float winner_gain_L[STEREO_DFT_N_32k_ENC / 2]; /*The estimation of the Winner gain of the left channel*/ + float winner_gain_R[STEREO_DFT_N_32k_ENC / 2]; /*The estimation of the Winner gain of the right channel*/ + float spd_L_smooth_new[STEREO_DFT_N_32k_ENC / 2]; + float spd_R_smooth_new[STEREO_DFT_N_32k_ENC / 2]; + +#endif + + /* energy buffers for ICBWE */ + float nrg_L[2]; + float nrg_R[2]; + float nrg_DMX[2]; + + /*Residual prediction*/ + int16_t res_pred_mode[STEREO_DFT_ENC_DFT_NB]; /* mode from 0 (off) to 1 (on) */ + float res_pred_gain[STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX]; /*prediction gain for the residual HFs */ + int16_t res_pred_band_min; /* Band min for prediction of residual */ + int16_t res_pred_flag_1; + int16_t res_pred_flag_2; + int16_t res_pred_counter; + float res_pred_gain_f[STEREO_DFT_BAND_MAX]; + int16_t res_pred_index_EC[STEREO_DFT_BAND_MAX]; + int16_t res_pred_index_ECDiff[STEREO_DFT_BAND_MAX]; + int16_t res_pred_index_ECprevious[STEREO_DFT_BAND_MAX]; + int16_t reverb_flag; + float pre_sub_nrg_DMX[STEREO_DFT_BAND_MAX]; + float diff_l_h_sm; + float diff_r_h_sm; + float prev_fac2; + + /*Residual coding*/ + int16_t res_cod_mode[STEREO_DFT_ENC_DFT_NB]; /* mode from 0 (off) to 3 */ + int16_t res_cod_band_max; /* Band max for coding of residual */ + int16_t res_cod_line_max; /* Maximum number of MDCT lines to code for the residual coding */ + float res_cod_NRG_M[STEREO_DFT_BAND_MAX]; + float res_cod_NRG_S[STEREO_DFT_BAND_MAX]; + float res_cod_SNR_M[STEREO_DFT_BAND_MAX]; + float old_snr; + + /* flags and data for adaptive wideband residual coding */ + float res_dmx_ratio_lt; /* long term energy ratio between RES and DMX */ + int16_t hangover_cnt0; /* counter 0 for hangover */ + int16_t hangover_cnt1; /* counter 1 for hangover */ + float dmx_res_all_prev; /* energy of the previous frame */ + int16_t last_res_cod_mode_modify_flag; /* a flag to indicate whether the res_cod_mode_flag has been modified for the switching frame in which res_cod_mode_flag should be swithced from 1 to 0 */ + int16_t res_cod_sw_flag; /* a flag to indicate whether it is a switching frame */ + float switch_fade_factor; /* Adaptive fade factor for switch frame */ + + /*misc*/ + float icbweRefEner; + float lbEner; + int16_t flip_sign; +#ifdef DEBUG_MODE_DFT + int16_t verbose; +#endif + +} STEREO_DFT_ENC_DATA, *STEREO_DFT_ENC_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * MDCT Stereo encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_mdct_enc_data_structure +{ + /* static members */ + STEREO_MDCT_BAND_PARAMETERS stbParamsTCX20; /* stereo frequency band parameters for TCX20 */ + STEREO_MDCT_BAND_PARAMETERS stbParamsTCX10; /* stereo frequency band parameters for TCX10 */ + STEREO_MDCT_BAND_PARAMETERS stbParamsTCX20afterACELP; /* stereo frequency band parameters for transition frames */ + + /* only intraframe */ + int16_t mdct_stereo_mode[2]; /* mdct stereo mode: LR, MS, band-wise MS */ +#ifdef DEBUGGING + int16_t mdct_stereo_mode_cmdl; /* MDCT stereo mode from command-line */ + int16_t fDualMono; /* force dual mono in MDCT stereo mode */ + int16_t fMSstereo; /* force full-band MS in MDCT stereo mode */ +#endif + int16_t global_ild[2]; /* Quantized ILD for the whole spectrum */ + int16_t split_ratio; /* Ratio of bitrate (1 to 7), split_ratio = 8 * 1st chn bitrate / (1st + 2nd chn bitrate) */ + + int16_t IGFStereoMode[2]; /* MDCT stereo mode for IGF */ + + ITD_DATA_HANDLE hItd; + DFT_ANA_HANDLE hDft_ana; + + int16_t sw_uncorr; + +} STEREO_MDCT_ENC_DATA, *STEREO_MDCT_ENC_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * TD Stereo encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_td_enc_data_structure +{ + int16_t tdm_lp_reuse_flag; /* Flag that indicate if it is possible to reuse the LP coefficient from the primary channel or not */ + int16_t tdm_low_rate_mode; /* secondary channel low rate mode flag */ + float tdm_Pri_pitch_buf[NB_SUBFR]; + int16_t tdm_Pitch_reuse_flag; + + float tdm_lt_corr_RM; /* Long term right-mono correlation */ + float tdm_lt_corr_LM; /* Long term left-mono correlation */ + float tdm_last_diff_lt_corr; /* long term correlation difference mem */ + float tdm_last_ratio; /* Last TDM ratio */ + + float tdm_lt_rms_L; /* Left channel long term rms */ + float tdm_lt_rms_R; /* Right channel long term rms */ + float tdm_last_ener_lt_R; /* Right channel long term energy */ + float tdm_last_ener_lt_L; /* Left channel long term energy */ + + int16_t tdm_last_ratio_idx; /* last TDM ratio index */ + int16_t tdm_last_SM_flag; /* Flag to signal a SM encoding scheme -> better for some music item */ + int16_t tdm_ratio_transition_mov_flag; /* Flag that indicates that L-R energy is changing */ + int16_t tdm_ratio_transition_cnt; /* Counter */ + int16_t tdm_hyst_cnt; /* Counter */ + int16_t tdm_prev_stable_idx; /* Previous Transmitted ratio index*/ + int16_t tdm_prev_desired_idx; /* Previous Transmitted ratio index*/ + float tdm_LT_es_em; /* Long term evoluation of the side to mono energy ratio */ + int16_t tdm_use_IAWB_Ave_lpc; /* Flag to indicate the usage of mean inactive LP coefficients */ + + /* NOOP parameters */ + float tdm_lt_corr_RM_SM; /* Long term right-mono correlation in SM mode*/ + float tdm_lt_corr_LM_SM; /* Long term left-mono correlation in SM mode*/ + float tdm_last_diff_lt_corr_SM; /* long term correlation difference mem in SM mode*/ + float tdm_last_ratio_SM; /* Last TDM ratio in SM mode*/ + + float tdm_lt_rms_L_SM; /* Left channel long term rms in SM mode*/ + float tdm_lt_rms_R_SM; /* Right channel long term rms in SM mode*/ + float tdm_last_ener_lt_R_SM; /* Right channel long term energy in SM mode*/ + float tdm_last_ener_lt_L_SM; /* Left channel long term energy in SM mode*/ + + int16_t tdm_last_ratio_idx_SM; /* last TDM ratio index in SM mode*/ + int16_t tdm_last_SM_flag_noop; /* Flag to signal a SM encoding scheme -> better for some music item in SM mode*/ + int16_t tdm_noop_mov_flag; /* Flag that indicates that L-R energy is changing in SM mode*/ + int16_t tdm_noop_cnt; /* Counter in SM mode*/ + int16_t tdm_hyst_cnt_SM; /* Counter in SM mode*/ + int16_t tdm_prev_stable_idx_SM; /* Previous Transmitted ratio index in SM mode*/ + int16_t tdm_prev_desired_idx_SM; /* Previous Transmitted ratio index in SM mode*/ + float tdm_LT_es_em_SM; /* Long term evoluation of the side to mono energy ratio in SM mode*/ + int16_t tdm_NOOP_cnt; /* Counter for channel combination scheme */ + int16_t tdm_SM_flag; /* Flag for channel combination scheme */ + int16_t tdm_SM_last2_clas[2]; /* Class of the frame immediately prior to the previous frame */ + int16_t tdm_SM_last_clas[2]; /* Class of the previous frame */ + int16_t tdm_SM_modi_flag; /* Flag that indicates to modify ratio */ + int16_t tdm_SM_reset_flag; /* Flag that indicates to reset the parameters for SM mode */ + + int16_t tdm_FD2LRTD_SW_cnt; /* Count the number of frames following a FD to LRTD switching */ + int16_t tdm_LRTD_flag; /* LRTD stereo mode flag */ + int16_t prev_fr_LRTD_TD_dec; /* At the beginning of a frame, contains the previous LRTD decision that might have been modified during last frame */ + int16_t tdm_inst_ratio_idx; /* Instantaneous correlation ratio index */ + int16_t tdm_last_inst_ratio_idx; /* previous frame instantaneous correlation ratio index */ + int16_t tdm_vad_hangover_cnt; /* Count the number of frames where hangover_cnt >= 5 in both primary and secondary channel */ + int16_t tdm_ini_frame_cnt; /* Count the number of frame to decide how to evaluate the local VAD of primary and secondary channel */ + int16_t tdm_last_LRTD_frame_cnt; /* Count the number of frame since the last LRTD frame */ + int16_t tdm_last_LRTD_PriCh_cnt; /* Count the number of frame since the primary channel changed */ + int16_t flag_skip_DMX; /* flag that indicates whether the TD downmixing is skipped */ + +} STEREO_TD_ENC_DATA, *STEREO_TD_ENC_DATA_HANDLE; + + +/*----------------------------------------------------------------------------------* + * ICA Stereo encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_tca_enc_data_structure +{ + int16_t refChanIndx; /* reference channel index in current frame */ + int16_t prevRefChanIndx; /* reference channel index in previous frame */ + int16_t indx_ica_NCShift; /* ICA target channel inter-channel corrstats */ + int16_t indx_ica_gD; /* ICA target gain */ + float targetGain; /* gain norm applied on target (or right) channel in current frame */ + float instTargetGain; /* instantaneous gain norm applied on target (or right) channel in current frame */ + float prevTargetGain; /* gain norm applied on target (or right) channel in previous frame */ + float corrStatsSmoothFac; /* gD/corrStats smoothing based on corrStats */ + + int16_t lMemRecalc; + int16_t lMemRecalc_12k8; + int16_t lMemRecalc_16k; + + int16_t corrLagStats[3]; /* corr lag stats in current frame */ + int16_t prevCorrLagStats[3]; /* corr lag stats in previous frame */ + + float memChanL[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH]; /* left channel input to correct at the cross-over */ + float memChanR[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH]; /* right channel input to correct at the cross-over */ + + float memChanL_DS[ADDED_MEM_DS]; /* left channel input speech memory for downmix */ + float memChanR_DS[ADDED_MEM_DS]; /* right channel input speech memory for downmix */ + float mem_tempF; + float memdecim[12]; /* memory for pre-rmphasis filter for resampling */ + float corrEstPrev[3][2 * L_NCSHIFT_DS + 1]; /* Prev correlation vector */ + float corrEstLT[2 * L_NCSHIFT_DS + 1]; /* Long term correlation vector smoothed */ + + float ica_envVarLT; + float C_mem[2 * L_NCSHIFT_DS + 1]; + float E1_mem, E2_mem; + float delay_0_mem[MAX_DELAYREGLEN]; + float smooth_dist_reg_prv_corr; + int16_t LRTD_G_ATT_cnt; + +} STEREO_TCA_ENC_DATA, *STEREO_TCA_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Stereo IC_BWE encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_icbwe_enc_data_structure +{ + int16_t prev_refChanIndx_bwe; + int16_t refChanIndx_bwe; + /* SHB speech resampler memory */ + float memHPF[8]; + float mem_decim_shb_ch0[2 * L_FILT_MAX]; + + /* SHB speech non-ref channel */ + float mem_shb_speech_ref[L_LOOK_16k]; + float mem_shb_speech_nonref[L_LOOK_16k]; + + /* unscaled & scaled SHB synthesis memory */ + float mem_lpc_shbsynth_nonref[LPC_SHB_ORDER]; + + /* inter-channel BWE spectral shape adj. */ + float prevSpecMapping; + float memShbSpecMapping; + float memShbSpecXcorr[6]; + float prevgsMapping; + + float prevRefEner; + float prevNonRefEner; + + float memGsEnerMap[2]; + + float dec_2over3_mem[L_FILT_2OVER3]; + float dec_2over3_mem_lp[L_FILT_2OVER3_LP]; + float icbwe_inp_mem[CPE_CHANNELS][NS2SA( 48000, L_MEM_RECALC_TBE_NS )]; + float *dataChan[CPE_CHANNELS]; + float memModifyFs_icbwe[CPE_CHANNELS][2 * L_FILT32k]; + + float mem_nrg_L[CPE_CHANNELS]; + float mem_nrg_R[CPE_CHANNELS]; + float mem_nrg_DMX[CPE_CHANNELS]; + float gDes_pastFrame; + float icbweRefEner; + + float shbSynthRef[L_FRAME16k]; + float nlExc16k[L_FRAME16k]; + float mixExc16k[L_FRAME16k]; + float lpSHBRef[LPC_SHB_ORDER + 1]; + + int16_t MSFlag; + +} STEREO_ICBWE_ENC_DATA, *STEREO_ICBWE_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * stereo classifiers structure + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_stereo_classifier_data_structure +{ + /* features for xtalk classifier and UNCLR classifier */ + int16_t clas_ch1; + int16_t pitch_ch1[3]; + float voicing_ch1[3]; + float cor_map_sum_ch1; + float lsf_ch1[M]; + float lepsP_ch1; + float dE1_ch1, dE1_ch2; + float nchar_ch1, nchar_ch2; + float non_sta_ch1; + float sp_div_ch1; + float ps_diff_ch1, ps_diff_ch2; + float ps_sta_ch1, ps_sta_ch2; + float prev_g_IPD; + float prev_IPD; + float prev_ratio_m1_m2; + float ratio_L; + int16_t vad_flag_glob; + int16_t vad_relE; + + int16_t aEn_raw[CPE_CHANNELS]; /* raw aEn for local relative energy estimation */ + float ave_ener_L; /* average energy of the L channel */ + float ave_ener_R; /* average energy of the R channel */ + float Etot_dn; /* average energy in dB - lower bound */ + float Etot_up; /* average energy in dB - upper bound */ + float relE_buf[UNCLR_L_RELE]; /* running buffer for relative energy */ + float Etot_buf[UNCLR_L_ETOT]; /* running buffer for average energy in dB */ + float relE_0_1; /* relative energy in the current frame normalized to (0,1) */ + float relE_0_1_LT; + + int16_t unclr_sw_enable_cnt[CPE_CHANNELS]; /* UNCLR classifier - counter of frames suitable for UNCLR switching */ + + float unclr_relE_0_1_LT[UNCLR_RC_ORDER]; + float unclr_wscore; + int16_t unclr_decision; /* UNCLR stereo classifier decision (0/1) */ + float unclr_fv[SSC_MAX_NFEA]; /* UNCLR - feature vector */ + int16_t unclr_corrLagMax_prev; + + float xtalk_score_buf[XTALK_SCORE_BUF_LEN]; + int16_t xtalk_decision; /* xtalk stereo classifier decision (0/1) */ + float xtalk_fv[SSC_MAX_NFEA]; /* xtalk - feature vector */ + float xtalk_wscore; + float xtalk_score; + float xtalk_score_wrelE; + + int16_t lrtd_mode; + int16_t prev_lrtd_mode; + + float is_speech; + int16_t silence_flag; + +} STEREO_CLASSIF_DATA, *STEREO_CLASSIF_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Front-VAD structure + *----------------------------------------------------------------------------------*/ + +typedef struct front_vad_enc +{ + int16_t ini_frame; /* initialization frames counter */ + float lp_speech; /* long term speech average */ + float lp_noise; /* long term noise average */ + float mem_decim[2 * L_FILT_MAX]; /* decimation filter memory */ + float buffer_12k8[3 * L_FRAME / 2]; /* 12k8 signal buffer */ + float mem_preemph; /* preemph filter memory */ + NOISE_EST_HANDLE hNoiseEst; /* Noise estimation handle */ + VAD_HANDLE hVAD; /* VAD handle */ + float *delay_buf; + int16_t delay_samples; + +} FRONT_VAD_ENC, *FRONT_VAD_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * DirAC encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_dirac_enc_data_structure +{ + DIRAC_CONFIG_DATA_HANDLE hConfig; + PARAM_ISM_CONFIG_HANDLE hParamIsm; /* Parametric ISM handle */ + + IVAS_FB_MIXER_HANDLE hFbMixer; + float *sba_synchro_buffer[IVAS_MAX_NUM_CH]; // VE: all 16 buffers not needed ? + int16_t num_samples_synchro_delay; + + /* DirAC parameter estimation */ + float **direction_vector[DIRAC_NUM_DIMS]; + float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ + float diffuseness_m[DIRAC_MAX_NBANDS]; + int16_t band_grouping[DIRAC_MAX_NBANDS + 1]; + int16_t block_grouping[5]; + + int16_t dirac_to_spar_md_bands[DIRAC_MAX_NBANDS]; + + /* diffuseness */ + int16_t index_buffer_intensity; + int16_t no_col_avg_diff; + float **buffer_intensity_real[DIRAC_NUM_DIMS]; + float *buffer_energy; + +} DIRAC_ENC_DATA, *DIRAC_ENC_HANDLE; + +/*----------------------------------------------------------------------------------* + * SPAR encoder structures + *----------------------------------------------------------------------------------*/ + +/* SPAR AGC structures */ +typedef struct ivas_agc_enc_chan_state_t +{ + int16_t lastExp; + int16_t prevExp; + float lastGain; + float lastMaxAbs; + int16_t gainExpVal; + float MaxAbsVal_del; + int16_t MaxAbsValIdx_del; + +} ivas_agc_enc_chan_state_t; + +typedef struct ivas_agc_enc_state_t +{ + ivas_agc_com_state_t agc_com; + float minDelta; + float smFact; + ivas_agc_enc_chan_state_t *gain_state; + ivas_agc_chan_data_t *gain_data; + +} ivas_agc_enc_state_t; + +/* SPAR covariance structures */ +typedef struct ivas_enc_cov_handler_state_t +{ + ivas_cov_smooth_state_t *pCov_state; + ivas_cov_smooth_state_t *pCov_dtx_state; + int16_t num_bins; + int16_t prior_dtx_present; + +} ivas_enc_cov_handler_state_t; + +typedef struct ivas_enc_cov_handler_in_buf_t +{ + float *ppIn_FR_real[IVAS_SPAR_MAX_CH]; + float *ppIn_FR_imag[IVAS_SPAR_MAX_CH]; + int16_t num_ch; + int16_t transient_det; + int16_t dtx_cov_flag; + +} ivas_enc_cov_handler_in_buf_t; + +/* SPAR FOA MD structures */ +typedef struct ivas_spar_foa_md_enc_state_t +{ + ivas_spar_md_t spar_md; + ivas_spar_md_prev_t spar_md_prior; + int16_t num_umx_ch; + int16_t num_decorr; + + float ***mixer_mat; + float ***cov_real; + float ***cov_dtx_real; + float ***mixer_mat_local; + ivas_spar_foa_md_com_cfg spar_md_cfg; + ivas_arith_coeffs_t arith_coeffs; + ivas_huff_coeffs_t huff_coeffs; + int16_t table_idx; + +} ivas_spar_foa_md_enc_state_t; + +typedef struct ivas_spar_foa_md_enc_in_buf_t +{ + float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; + int16_t num_bands; + int16_t dtx_vad; + +} ivas_spar_foa_md_enc_in_buf_t; + + +/* PCA structure */ +typedef struct +{ + int16_t prev_bypass_decision; + float prev_eigVec[FOA_CHANNELS * FOA_CHANNELS]; + float prev_ql[IVAS_PCA_INTERP]; + float prev_qr[IVAS_PCA_INTERP]; + float prev_D[IVAS_PCA_INTERP]; + float mem_eigVec_interp[FOA_CHANNELS * FOA_CHANNELS]; + float old_r_sm[FOA_CHANNELS * FOA_CHANNELS]; + +} PCA_ENC_STATE; + + +/* SPAR FOA structures */ +typedef struct ivas_spar_foa_enc_state_t +{ + ivas_spar_foa_md_enc_state_t *hMdEnc; + IVAS_FB_MIXER_HANDLE hFbMixer; + ivas_enc_cov_handler_state_t *hCovEnc; + ivas_trans_det_state_t *hTranDet; + ivas_agc_enc_state_t *hAgcEnc; + int16_t dirac_to_spar_md_bands[DIRAC_MAX_NBANDS]; + int16_t enc_param_start_band; + PCA_ENC_STATE *hPCA; + int32_t core_nominal_brate; /* Nominal bitrate for core coding */ + +} ivas_spar_foa_enc_state_t; + + +/* SPAR main structure */ +typedef struct ivas_spar_enc_lib_t +{ + ivas_spar_foa_enc_state_t *hSparFoa; + + FRONT_VAD_ENC_HANDLE hFrontVad; /* front-VAD handle */ + ENC_CORE_HANDLE hCoreCoderVAD; /* core-coder handle for front-VAD module */ + + int16_t front_vad_flag; + int16_t front_vad_dtx_flag; + int16_t force_front_vad; + +} SPAR_ENC_DATA, *SPAR_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Parametric MC encoder structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_param_mc_enc_data_structure +{ + + IVAS_FB_MIXER_HANDLE hFbMixer; + int16_t transient_detector_delay; + const float *dmx_factors; + + /* Multichannel Specific Parameters */ + IVAS_PARAM_MC_METADATA hMetadataPMC; + int16_t band_grouping[PARAM_MC_MAX_PARAMETER_BANDS + 1]; + int16_t lfe_index; + int16_t icc_map_index[PARAM_MC_PARAMETER_FRAMES][PARAM_MC_SZ_ICC_MAP]; + int16_t max_param_band_abs_cov; + + float ener_fac[PARAM_MC_MAX_PARAMETER_BANDS]; + +} PARAM_MC_ENC_DATA, *PARAM_MC_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * MASA encoder structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_masa_encoder_data_struct +{ + float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + int16_t num_Cldfb_instances; + HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc[MAX_NUM_ENC_CLDFB_INSTANCES]; + float *delay_buffer[MASA_MAX_TRANSPORT_CHANNELS]; + int16_t band_mapping[MASA_FREQUENCY_BANDS + 1]; + uint8_t twoDirBands[MASA_FREQUENCY_BANDS]; + float importanceWeight[MASA_FREQUENCY_BANDS]; + SPHERICAL_GRID_DATA Sph_Grid16; + float lfeToTotalEnergyRatio[MAX_PARAM_SPATIAL_SUBFRAMES]; + float prevq_lfeToTotalEnergyRatio; + int16_t prevq_lfeIndex; + + float onset_detector_1; + float onset_detector_2; + +} MASA_ENCODER_DATA; + +typedef struct ivas_masa_encoder_struct +{ + MASA_METADATA_FRAME masaMetadata; /* MASA metadata frame storage during processing before unified metadata coding */ + MASA_CODEC_CONFIG config; /* Configuration of MASA encoding */ + MASA_ENCODER_DATA data; /* Data storage for MASA encoding */ + +} MASA_ENCODER, *MASA_ENCODER_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Multichannel MASA (McMASA) encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_mcmasa_enc_data_structure +{ + int16_t nbands; + int16_t nCodingBands; + + /* delay compensation */ + float *delay_buffer_lfe[2]; /* Delay buffer for LFE estimation */ + + int16_t num_samples_delay_comp; + int16_t num_slots_delay_comp; + int16_t offset_comp; + + IVAS_FB_MIXER_HANDLE hFbMixer; + IVAS_FB_MIXER_HANDLE hFbMixerLfe; + + /* DirAC parameter estimation */ + float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ + int16_t band_grouping[MASA_FREQUENCY_BANDS + 1]; + int16_t block_grouping[5]; + + /* diffuseness */ + int16_t index_buffer_intensity; + int8_t no_col_avg_diff; + float **buffer_intensity_real[DIRAC_NUM_DIMS]; + float **buffer_intensity_real_vert; + float *buffer_energy; + + float chnlToFoaMtx[DIRAC_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; + float chnlToFoaEvenMtx[DIRAC_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; + float ls_azimuth[MCMASA_MAX_ANA_CHANS]; + int16_t leftNearest[MCMASA_MAX_ANA_CHANS]; + int16_t rightNearest[MCMASA_MAX_ANA_CHANS]; + int16_t numHorizontalChannels; + uint8_t isHorizontalSetup; + uint8_t combineRatios; + + float prevMultiChEne; + float prevDownmixEne; + float prevEQ; + float interpolator[L_FRAME48k]; + + uint8_t separateChannelEnabled; + int16_t separateChannelIndex; + + /* LFE coding */ + float lfeLfEne[MAX_PARAM_SPATIAL_SUBFRAMES]; + float totalLfEne[MAX_PARAM_SPATIAL_SUBFRAMES]; + float *lfeAnaRingBuffer[2]; + int16_t ringBufferPointer; + float lowpassSum[2]; + int16_t ringBufferSize; + +} MCMASA_ENC_DATA, *MCMASA_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Stereo CNG handle + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_cng_enc +{ + int16_t prev_sg_average_counter; /* Counter for sidegain averaging */ + int16_t sg_active_cnt; /* Counter for sidegain averaging */ + int16_t sg_average_counter; /* Counter for sidegain averaging */ + float sg_average[STEREO_DFT_ERB4_BANDS]; /* Sidegain average */ + float prev_sg_average[STEREO_DFT_ERB4_BANDS]; /* Previous sidegain average */ + float mem_cohBand[STEREO_DFT_BAND_MAX / 2]; /* Coherence memory */ + float coh_crossfade[STEREO_DFT_BAND_MAX / 2]; /* Coherence memory */ + int16_t td_active; /* TD-stereo indication */ + int16_t first_SID_after_TD; /* Set if first SID frame after TD stereo */ + int16_t first_SID; /* Set if first SID frame since codec start */ + +} STEREO_CNG_ENC, *STEREO_CNG_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * SCE encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct sce_enc_data_structure +{ + int16_t sce_id; /* SCE # identifier */ + int32_t element_brate; /* SCE element total bitrate in bps */ + + BSTR_ENC_HANDLE hMetaData; /* Metadata bitstream handle */ + + ENC_CORE_HANDLE hCoreCoder[1]; /* core coder handle */ + +} SCE_ENC_DATA, *SCE_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * CPE encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct cpe_enc_data_structure +{ + int16_t cpe_id; /* CPE # identifier */ + + int32_t element_brate; /* CPE element total bitrate in bps */ + int32_t last_element_brate; /* last CPE element total bitrate in bps */ + int16_t element_mode; /* element mode, in CPE it can be IVAS_CPE_DFT, IVAS_CPE_TD or IVAS_CPE_MDCT */ + int16_t last_element_mode; /* last element mode */ + + BSTR_ENC_HANDLE hMetaData; /* Metadata bitstream handle */ + + ENC_CORE_HANDLE hCoreCoder[CPE_CHANNELS]; /* core coder handle */ + + /* stereo data handles */ + STEREO_CLASSIF_HANDLE hStereoClassif; /* stereo classifiers handle */ + STEREO_DFT_ENC_DATA_HANDLE hStereoDft; /* DFT stereo data handle */ + STEREO_TD_ENC_DATA_HANDLE hStereoTD; /* TD stereo data handle */ + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct; /* MDCT stereo data handle */ + STEREO_TCA_ENC_HANDLE hStereoTCA; /* Stereo TCA Encoder handle */ + STEREO_ICBWE_ENC_HANDLE hStereoICBWE; /* Stereo inter-channel BWE handle */ + STEREO_CNG_ENC_HANDLE hStereoCng; /* Stereo CNG data structure */ + FRONT_VAD_ENC_HANDLE hFrontVad[CPE_CHANNELS]; + + float *input_mem[CPE_CHANNELS]; /* input channels buffers memory; needed to be up-to-date for TD->DFT stereo switching */ + +#ifdef DEBUGGING + int16_t stereo_mode_cmdl; /* stereo mode forced from the commaand-line */ +#endif + +} CPE_ENC_DATA, *CPE_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * MCT structure + *----------------------------------------------------------------------------------*/ + +typedef struct mct_block_data_struct +{ + int16_t isActive; + int16_t ch1, ch2; + int16_t mask[2][MAX_SFB]; + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct; /* MDCT stereo data handle */ + +} MCT_BLOCK_DATA, *MCT_BLOCK_DATA_HANDLE; + +typedef struct mct_enc_data_structure +{ + BSTR_ENC_HANDLE hBstr; /* bitstream handle for side bits - in MCT, side bits are written at the beginning of the bitstream */ + + int16_t nchan_out_woLFE; /* number of active channels within multi-channel configuration */ + int16_t currBlockDataCnt; + int16_t bitsChannelPairIndex; /* bits needed to code channel pair index, depends on number of active channels */ + MCT_BLOCK_DATA_HANDLE hBlockData[MCT_MAX_BLOCKS]; + + float lastxCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS]; + int16_t lowE_ch[MCT_MAX_CHANNELS]; + int16_t LFE_off; + uint16_t mc_global_ild[MCT_MAX_CHANNELS]; + int16_t nBitsMCT; /* number of bits spent on mct side info */ + int16_t num_lfe; + + /* pointers to local buffers */ + float *p_mdst_spectrum_long[MCT_MAX_BLOCKS][CPE_CHANNELS]; + float *p_orig_spectrum_long[MCT_MAX_BLOCKS][CPE_CHANNELS]; + int16_t tnsBits[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; /* number of tns bits in the frame */ + int16_t tnsSize[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; /* number of tns parameters put into prm */ + int16_t p_param[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; + + int16_t hbr_mct; + +} MCT_ENC_DATA, *MCT_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Stereo downmix for EVS encoder structure + *----------------------------------------------------------------------------------*/ + +typedef struct stereo_dmx_evs_phase_only_correlation_structure +{ + float P[L_FRAME48k]; + float peakQ[CPE_CHANNELS]; + float peak_width[CPE_CHANNELS]; + float confidence; + + int16_t ispeak[CPE_CHANNELS]; + int16_t itdLR[CPE_CHANNELS]; + int16_t shift_limit; + + const float *wnd; + float eps; + const float *sin; + +} STEREO_DMX_EVS_POC_DATA, *STEREO_DMX_EVS_POC_HANDLE; + +typedef struct stereo_dmx_evs_enc_data_structure +{ + STEREO_DMX_EVS_POC_HANDLE hPOC; + + float itd; + + float pre_dmx_energy[1]; + float aux_dmx_energy[CPE_CHANNELS]; + + float dmx_weight[1 + CPE_CHANNELS]; + + const float *s_wnd; + +} STEREO_DMX_EVS_ENC_DATA, *STEREO_DMX_EVS_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * LFE encoder structures + *----------------------------------------------------------------------------------*/ + +typedef struct ivas_lfe_enc_data_structure +{ + ivas_filters_process_state_t filter_state; + LFE_WINDOW_HANDLE pWindow_state; + BSTR_ENC_HANDLE hBstr; /* pointer to encoder bitstream handle */ + const uint16_t *cum_freq_models[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; + int16_t lfe_bits; + float *old_wtda_audio; + +} LFE_ENC_DATA, *LFE_ENC_HANDLE; + + +/* clang-format off */ +/*----------------------------------------------------------------------------------* + * Encoder configuration structure (includes commandline-related parameters) + *----------------------------------------------------------------------------------*/ + +typedef struct encoder_config_structure +{ + int32_t ivas_total_brate; /* IVAS total bitrate in bps */ + int32_t last_ivas_total_brate; /* IVAS last total bitrate in bps */ + int32_t input_Fs; /* input signal sampling frequency in Hz */ + int16_t nchan_inp; /* number of input audio channels */ + int16_t max_bwidth; /* maximum encoded bandwidth */ + IVAS_FORMAT ivas_format; /* IVAS format */ + + int16_t element_mode_init; /* element mode used at initialization */ + int16_t stereo_dmx_evs; /* flag to indicate that stereo downmix for EVS encoder */ + + int16_t sba_order; /* Ambisonic (SBA) order */ + int16_t sba_planar; /* Ambisonic (SBA) planar flag */ + MC_LS_SETUP mc_input_setup; /* multichannel input ls setup */ + + int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ + + int16_t Opt_DTX_ON; /* flag indicating DTX operation */ + int16_t interval_SID; /* CNG and DTX - interval of SID update, default 8 */ + int16_t var_SID_rate_flag; /* CNG and DTX - flag for variable SID rate */ + + int16_t Opt_RF_ON; /* flag indicating RF (channel-aware) mode */ + int16_t rf_fec_offset; /* RF FEC offset */ + int16_t rf_fec_indicator; /* RF FEC indicator */ + + int16_t Opt_SC_VBR; /* flag indicating SC-VBR mode */ + int16_t last_Opt_SC_VBR; /* flag indicating prev frame's SC-VBR mode */ + + /* temp. development parameters */ + int16_t Opt_AGC_ON; /* flag indicating AGC operation in SBA */ + int16_t Opt_PCA_ON; /* flag indicating PCA operation in SBA */ + +#ifdef DEBUGGING + /* debugging options */ + int16_t stereo_mode_cmdl; /* stereo mode forced from the command-line */ + int16_t force; /* parameter to force specific "core" of the Core-Coder*/ + int16_t mdct_stereo_mode_cmdl; /* mdct stereo mode forced from command-line, employed only when DEBUG_FORCE_MDCT_STEREO_MODE is activated */ +#endif + + +} ENCODER_CONFIG, *ENCODER_CONFIG_HANDLE; + + +/*----------------------------------------------------------------------------------* + * + * Main IVAS encoder structure + * =========================== + *----------------------------------------------------------------------------------*/ + +typedef struct +{ + ENCODER_CONFIG_HANDLE hEncoderConfig; /* Encoder configuration structure */ + + /* high-level encoder parameters */ + int16_t nchan_transport; /* number of transport channels */ + + int16_t codec_mode; /* Mode1 or Mode2 of core codec */ + int16_t last_codec_mode; /* previous frame Mode 1 or 2 */ + + float **mem_hp20_in; /* input signals HP filter memories */ + + /* core-encoder modules */ + int16_t nSCE; /* number of total SCEs */ + int16_t nCPE; /* number of total CPEs */ + SCE_ENC_HANDLE hSCE[MAX_SCE]; /* SCE handles */ + CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS]; /* CPE handles */ + + /* multichannel modules */ + ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS]; /* ISM metadata handles (storage for one frame of read ISM metadata) */ + DIRAC_ENC_HANDLE hDirAC; /* DirAC data handle */ + SPAR_ENC_HANDLE hSpar; /* SPAR encoder handle */ + MASA_ENCODER_HANDLE hMasa; /* MASA encoder data and configuration */ + IVAS_QMETADATA_HANDLE hQMetaData; /* Metadata handle for q_metadata parametric spatial coding DirAC/MASA*/ + MCT_ENC_HANDLE hMCT; /* MCT handle */ + PARAM_MC_ENC_HANDLE hParamMC; /* Parametric MC handle */ + MCMASA_ENC_HANDLE hMcMasa; /* Multi-channel MASA data handle */ + LFE_ENC_HANDLE hLFE; /* LFE data handle */ + + ISM_MODE ism_mode; /* ISM format mode */ + SBA_MODE sba_mode; /* SBA format mode */ + MC_MODE mc_mode; /* MC format mode */ + + /* Stereo downmix for EVS module */ + STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS; /* Stereo downmix for EVS encoder handle */ + +} Encoder_Struct; + +/* clang-format on */ + +#endif /* IVAS_STAT_ENC_H */ diff --git a/lib_enc/ivas_stereo_adapt_GR_enc.c b/lib_enc/ivas_stereo_adapt_GR_enc.c new file mode 100644 index 0000000000..8f07441920 --- /dev/null +++ b/lib_enc/ivas_stereo_adapt_GR_enc.c @@ -0,0 +1,590 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "stat_enc.h" +#include "wmops.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static int16_t adapt_GR_sg( const int16_t *in, const int16_t len, const int16_t no_symb, int16_t *nbits, int16_t *in_enc, const int16_t *map0, const int16_t no_GR_ord ); + + +/*---------------------------------------------------------------------* + * calculate_diff() + * + * calculate difference wrt previous frame and maps it to positive integer + *---------------------------------------------------------------------*/ + +static void calculate_diff( + const int16_t *in, /* i : current frame values */ + const int16_t *prev, /* i : previous frmae values */ + int16_t *in_diff, /* o : difference values */ + const int16_t len /* i : vector length */ +) +{ + int16_t i, tmp; + + for ( i = 0; i < len; i++ ) + { + tmp = in[i] - prev[i]; + if ( tmp > 0 ) + { + in_diff[i] = 2 * tmp - 1; + } + else + { + if ( tmp < 0 ) + { + in_diff[i] = -2 * tmp; + } + else + { + in_diff[i] = 0; + } + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * calculate_bit_diff() + * + * estimates the GR number of bits for encoding differential values + * selects between GR order 0 or 1 + *---------------------------------------------------------------------*/ + +/*! r: number of bits */ +static int16_t calculate_bit_diff( + int16_t *in_diff, /* i : values to be encoded */ + int16_t len, /* i : number of params */ + int16_t *flag_diff /* o : selected GR order */ +) +{ + int16_t i, nb, nb1; + + nb = 0; + nb1 = 0; + for ( i = 0; i < len; i++ ) + { + nb += in_diff[i]; + nb1 += ( ( in_diff[i] ) >> 1 ); + } + nb += len; + nb1 += 2 * len; + + if ( nb1 < nb ) + { + nb = nb1 + 1; + *flag_diff = 1; /* GR order for differential coding */ + } + else + { + nb = nb + 1; + *flag_diff = 0; + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * adapt_GR_ief() + * + * adaptive GR coding considering also the differential case + *---------------------------------------------------------------------*/ + +/*! r: used GR order */ +int16_t adapt_GR_ief( + const int16_t *in, /* i : vector to encode */ + int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ + const int16_t *prev, /* i : previous frame data */ + const int16_t len, /* i : input vector length */ + const int16_t no_symb, /* i : number of symbols */ + int16_t *nbits, /* o : number of used bits */ + int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ + const int16_t *map0, /* i : mapping array */ + const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ + int16_t *nbits_diff, /* o : number bits in diff encoding */ + const int16_t side_gain_counter, /* i : number of frames since last abs coding */ + float *side_gain_bitdiff_lp, /* i/o: LP-filtered bit difference between abs/diff */ + const int16_t try_diff /* i : diff coding allowed 1/0 */ +) +{ + int16_t nb_diff, flag, flag_diff; + int16_t bitdiff; + + flag = adapt_GR_sg( in, len, no_symb, nbits, in_enc, map0, no_GR_ord ); + + if ( try_diff ) /* inter-frame prediction allowed */ + { + calculate_diff( in, prev, in_diff, len ); + nb_diff = calculate_bit_diff( in_diff, len, &flag_diff ); + *nbits_diff = nb_diff; + bitdiff = min( 5 * len, *nbits ) - ( nb_diff + 1 ); + *side_gain_bitdiff_lp = STEREO_DFT_BITDIFF_LP_FAC * ( (float) bitdiff ) + ( 1.0f - STEREO_DFT_BITDIFF_LP_FAC ) * ( *side_gain_bitdiff_lp ); + if ( bitdiff > STEREO_DFT_BITDIFF_ABS_SELECT * ( *side_gain_bitdiff_lp ) * ( (float) side_gain_counter ) / ( (float) ( STEREO_DFT_FEC_THRESHOLD + 1 ) ) ) + { + flag = no_GR_ord + flag_diff; + *nbits = nb_diff + 1; + } + } + else + { + *nbits_diff = 100; + flag_diff = -1; + } + + return flag; +} + + +/*---------------------------------------------------------------------* + * adapt_GR_rpg1_ief() + * + * use adaptive GR for RPG's considering also the differential case + *---------------------------------------------------------------------*/ + +/*! r: used GR order */ +int16_t adapt_GR_rpg1_ief( + const int16_t *in, /* i : res pred gains input vector */ + int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ + const int16_t *prev, /* i : previous frame data */ + const int16_t len, /* i : input vector length */ + const int16_t no_symb, /* i : number of symbols */ + int16_t *nbits, /* o : number of used bits */ + int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ + const int16_t *maps, /* i : mapping array */ + int16_t *nbits_diff, /* o : estimated no of bits for differential encoding */ + const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ + const int16_t try_diff /* i : diff coding allowed 1/0 */ +) +{ + const int16_t *map0; + int16_t s, i, GR_ord, flag_diff, nb_diff; + + map0 = &maps[8 * NO_SYMB_GR_PRED_G]; + + if ( in[0] == 0 ) + { + s = 0; + for ( i = 0; i < len; i++ ) + { + s += in[i]; + } + + if ( s == 0 ) + { + /* encode only the first zero with GR1 */ + *nbits = ( ( map0[0] ) >> 1 ) + 2; + in_enc[0] = map0[0]; + } + else + { + *nbits = 1000; /* large number such that the plain coding will be selected */ + } + GR_ord = 1; + } + else + { + GR_ord = adapt_GR_sg( in, len, no_symb, nbits, in_enc, maps, no_GR_ord ); + } + + if ( try_diff ) + { + calculate_diff( in, prev, in_diff, len ); + nb_diff = calculate_bit_diff( in_diff, len, &flag_diff ); + *nbits_diff = nb_diff; + + if ( ( nb_diff + 1 ) < *nbits ) /* there is one more bit to signal differential coding */ + { + GR_ord = no_GR_ord + flag_diff; + + *nbits = nb_diff + 1; + } + } + else + { + *nbits_diff = 100; + } + + return GR_ord; +} + + +/*---------------------------------------------------------------------* + * adapt_GR_sg() + * + * adaptive GR coding + *---------------------------------------------------------------------*/ + +/*! r: GR order */ +static int16_t adapt_GR_sg( + const int16_t *in, /* i : data to be encoded */ + const int16_t len, /* i : number of params to be encoded */ + const int16_t no_symb, /* i : max number of symbols */ + int16_t *nbits, /* o : estimated number of bits */ + int16_t *in_enc, /* o : mapped symbols */ + const int16_t *map0, /* i : mapping */ + const int16_t no_GR_ord /* i : number of GR orders to be tested (2 or 3)*/ +) +{ + const int16_t *map; + int16_t nbits0, nbits1, nbits2, symb, map_symb, i, nb0, nb1, nb2; + + if ( no_symb == NO_SYMB_GR_SIDE_G ) + { + map = &map0[15 * no_symb]; + } + else + { + map = &( map0[8 * no_symb] ); + } + + set_s( in_enc, 0, len ); + + nbits1 = 0; + nbits0 = 0; + nbits2 = 0; + + for ( i = 0; i < len; i++ ) + { + symb = in[i]; + map_symb = map[symb]; + + if ( i == 0 ) + { + /* GR order is 1 for first band*/ + nb0 = ( map_symb >> 1 ) + 1; + nb2 = nb0 - 2; + } + else + { + nb0 = map_symb; + nb2 = ( ( map_symb ) >> 2 ); + } + nb1 = ( ( map_symb ) >> 1 ); + + in_enc[i] = map_symb; + nbits0 += nb0; + nbits1 += nb1; + nbits2 += nb2; + + /* update counts */ + map = &( map0[symb * no_symb] ); + } + + if ( no_GR_ord == 2 ) + { + nbits0 += len + 1; + nbits1 += 2 * len + 1; + if ( ( nbits0 <= nbits1 ) ) + { + *nbits = nbits0; + return 0; + } + else + { + *nbits = nbits1; + return 1; + } + } + else + { + if ( no_GR_ord == 3 ) + { + nbits0 += len + 2; + nbits1 += 2 * len + 1; + nbits2 += 3 * len + 2; + + if ( ( nbits1 <= nbits2 ) && ( nbits1 <= nbits0 ) ) + { + *nbits = nbits1; + return 1; + } + + if ( ( nbits0 <= nbits2 ) && ( nbits0 <= nbits1 ) ) + { + *nbits = nbits0; + return 0; + } + + if ( ( nbits2 <= nbits0 ) && ( nbits2 <= nbits1 ) ) + { + *nbits = nbits2; + return 2; + } + } + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL, "Wrong number of GR orders!" ); + } + } + + return -1; +} + + +/*---------------------------------------------------------------------* + * write_GR0() + * + * write data with GR order 0 + *---------------------------------------------------------------------*/ + +/*! r: number of bits written */ +int16_t write_GR0( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : data to be encoded */ + const int16_t len /* i : input data length */ +) +{ + int16_t nb = 0, i, n, val; + + for ( i = 0; i < len; i++ ) + { + n = in[i] + 1; + + if ( n < 16 ) + { + val = ( 1 << in[i] ) - 1; + val = 2 * val; + push_indice( hBstr, ind, val, n ); + } + else + { + push_indice( hBstr, ind, 16383, 14 ); + push_indice( hBstr, ind, ( 1 << ( n - 15 ) ) - 1, n - 15 ); + push_indice( hBstr, ind, 0, 1 ); + } + nb += n; + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * write_GR1() + * + * write data with GR order 1 + *---------------------------------------------------------------------*/ + +/*! r: number of bits written */ +int16_t write_GR1( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : data to be encoded */ + const int16_t len /* i : input data length */ +) +{ + int16_t nb = 0, i, n, val; + + for ( i = 0; i < len; i++ ) + { + n = ( in[i] >> 1 ); + if ( n < 14 ) + { + val = ( 1 << n ) - 1; + val = 4 * val + ( in[i] & 1 ); + push_indice( hBstr, ind, val, n + 2 ); + } + else + { + push_indice( hBstr, ind, 16383, 14 ); + if ( n > 14 ) + { + push_indice( hBstr, ind, ( 1 << ( n - 14 ) ) - 1, n - 14 ); /* 1 n times */ + } + push_indice( hBstr, ind, 0, 1 ); + push_indice( hBstr, ind, in[i] & 1, 1 ); + } + nb += n + 2; + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * write_GR2() + * + * write data with GR order 2 + *---------------------------------------------------------------------*/ + +/*! r: number of bits written */ +static int16_t write_GR2( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : data to be encoded */ + const int16_t len /* i : input data length */ +) +{ + int16_t nb = 0, i, n; + + for ( i = 0; i < len; i++ ) + { + n = ( in[i] >> 2 ); + if ( n < 14 ) + { + if ( n > 0 ) + { + push_indice( hBstr, ind, ( 1 << n ) - 1, n ); /* 1 n times */ + } + push_indice( hBstr, ind, 0, 1 ); + push_indice( hBstr, ind, in[i] & 3, 2 ); + } + else + { + push_indice( hBstr, ind, 16383, 14 ); + if ( n > 14 ) + { + push_indice( hBstr, ind, ( 1 << ( n - 14 ) ) - 1, n - 14 ); /* 1 n times */ + } + push_indice( hBstr, ind, 0, 1 ); + push_indice( hBstr, ind, in[i] & 3, 2 ); + } + nb += n + 3; + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * write_bitstream_GR() + * + * generic GR encoder for GR order 0 or 1 + *---------------------------------------------------------------------*/ + +/*! r: number of bits written */ +int16_t write_bitstream_GR( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : input vector */ + const int16_t len, /* i : input vector length */ + const int16_t GR_ord /* i : GR order */ +) +{ + int16_t nb = 0; + + push_indice( hBstr, ind, GR_ord, 1 ); + nb += 1; + + if ( GR_ord == 0 ) + { + nb += write_GR0( hBstr, ind, in, len ); + } + else + { + nb += write_GR1( hBstr, ind, in, len ); + } + + return nb; +} + + +/*---------------------------------------------------------------------* + * write_bitstream_adapt_GR() + * + * write encoded data using adaptive GR + *---------------------------------------------------------------------*/ + +/*! r: number of bits written */ +int16_t write_bitstream_adapt_GR( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + const int16_t ind, /* i : bitstream index */ + const int16_t *in, /* i : values to be written in bitstream */ + const int16_t len, /* i : values vector length */ + const int16_t GR_ord, /* i : GR order to be used */ + const int16_t no_GR_ord /* i : speech/music 0/1 */ +) +{ + int16_t nb = 0; + + nb = 0; + /* first component first */ + nb += write_GR1( hBstr, ind, in, 1 ); + + /* write the GR order */ + if ( no_GR_ord == 2 ) + { + push_indice( hBstr, ind, GR_ord, 1 ); + nb += 1; + } + else + { + if ( GR_ord == 1 ) + { + push_indice( hBstr, ind, 0, 1 ); /* GR order = 1*/ + nb += 1; + } + else + { + push_indice( hBstr, ind, 1, 1 ); + push_indice( hBstr, ind, GR_ord >> 1, 1 ); /* '10' for GR ord = 0; '11' for GR ord 2 */ + nb += 2; + } + } + + if ( GR_ord == 0 ) + { + + nb += write_GR0( hBstr, ind, &in[1], len - 1 ); + } + else + { + if ( GR_ord == 1 ) + { + nb += write_GR1( hBstr, ind, &in[1], len - 1 ); + } + else + { + nb += write_GR2( hBstr, ind, &in[1], len - 1 ); + } + } + + return nb; +} diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c new file mode 100644 index 0000000000..6d41221dcf --- /dev/null +++ b/lib_enc/ivas_stereo_classifier.c @@ -0,0 +1,1219 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define RC_FACT_UP 0.3f +#define RC_FACT_DOWN 0.7f +#define UNCLR_SCORE_THR 4.0f +#define XTALK_SCORE_THR_DFT 4.0f +#define XTALK_SCORE_THR_TD_UP 3.0f +#define XTALK_SCORE_THR_TD_DN 4.0f + +#define UNCLR_INTERCEPT_TD 0.780313f +#define UNCLR_INTERCEPT_DFT 1.226513f +#define XTALK_INTERCEPT_TD -1.770983f +#define XTALK_INTERCEPT_DFT -0.758556f + +#define EDGE_MAX_LEN 30 /* maximum length of buffer for edge detection */ +#define REDGE_MAX_LEN 30 /* maximum length of buffer for rising edge detection */ + +#define CLASSIFIER_ITD_THRES 8 /* ITD threshold in samples that enables classifier to switch */ + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void rc_filter( const float x, float *y, const int16_t order, const float tau ); + +static void edge_detect( const float *inp, const int16_t len, const float inp_min, const float inp_max, float *edge_str, int16_t *edge_type ); + +static float redge_detect( const float *inp, const int16_t len, const float inp_min, const float inp_max ); + + +/*-------------------------------------------------------------------* + * Function select_stereo_mode() + * + * Select stereo technology based on output of stereo classifiers + *-------------------------------------------------------------------*/ + +/*! r: element mode */ +int16_t select_stereo_mode( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int32_t ivas_total_brate /* i : IVAS total brate */ +) +{ + int16_t element_mode; + STEREO_CLASSIF_HANDLE hStereoClassif; + int16_t is_speech; + int16_t stereo_switching_flag; + + /* initialization */ + element_mode = hCPE->element_mode; + hStereoClassif = hCPE->hStereoClassif; + + /* set binary flag to prevent LRTD mode on music */ + hStereoClassif->is_speech = 0.97f * hStereoClassif->is_speech + 0.03f * hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0]; + is_speech = ( hStereoClassif->is_speech < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < 0.0f ); + + /* set binary flag indicating LRTD mode based on unclr/xtalk classifiers' decisions */ + hStereoClassif->prev_lrtd_mode = hStereoClassif->lrtd_mode; + hStereoClassif->lrtd_mode = ( ( hStereoClassif->unclr_decision | hStereoClassif->xtalk_decision ) && is_speech ); + + stereo_switching_flag = 1; + if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( ivas_format >= MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) +#ifdef DEBUGGING + || ( hCPE->stereo_mode_cmdl == IVAS_CPE_DFT || hCPE->stereo_mode_cmdl == IVAS_CPE_TD ) +#endif + ) + { + stereo_switching_flag = 0; + } + + if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO ) + { + hStereoClassif->prev_lrtd_mode = 0; + hStereoClassif->lrtd_mode = 0; + element_mode = IVAS_CPE_MDCT; + } + else if ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + hStereoClassif->lrtd_mode = 0; + element_mode = IVAS_CPE_DFT; + + if ( hCPE->element_brate > IVAS_13k2 && hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0] < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < -0.01f && hCPE->hCoreCoder[0]->vad_flag == 1 && ( hCPE->hStereoMdct->sw_uncorr || hStereoClassif->xtalk_decision ) ) + { + hStereoClassif->lrtd_mode = 1; + element_mode = IVAS_CPE_TD; + } + } + + /* set the element mode */ + if ( hStereoClassif->lrtd_mode == 1 && stereo_switching_flag == 1 ) + { + element_mode = IVAS_CPE_TD; + } + else if ( element_mode < IVAS_CPE_MDCT ) + { +#ifdef DEBUGGING + if ( stereo_switching_flag == 0 ) + { + if ( hCPE->stereo_mode_cmdl > 1 ) + { + element_mode = hCPE->stereo_mode_cmdl; + } + } + else +#endif + if ( element_mode == IVAS_CPE_TD ) + { + if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec > 0 && is_speech ) + { + /* if unclr_decision goes from 1->0 on active content, continue in LRTD mode */ + hStereoClassif->lrtd_mode = 1; + } + else if ( stereo_switching_flag == 1 ) + { + element_mode = IVAS_CPE_DFT; + } + } + else if ( stereo_switching_flag == 1 ) + { + element_mode = IVAS_CPE_DFT; + } + } + + /* switch from LRTD to DFT when xtalk_decision goes from 0->1 (note: this special case is not handled in the xtalk classifier) */ + if ( hCPE->last_element_mode == IVAS_CPE_TD && element_mode == IVAS_CPE_TD && hStereoClassif->xtalk_decision == 1 ) + { + if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 0 && hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt > 15 && hCPE->hStereoTD->tdm_last_LRTD_frame_cnt > 3 && hCPE->hCoreCoder[0]->clas < VOICED_CLAS && ( hCPE->element_brate >= IVAS_16k4 || hStereoClassif->xtalk_wscore < 0.01f ) ) + { + if ( stereo_switching_flag == 1 ) + { + element_mode = IVAS_CPE_DFT; + } + hStereoClassif->xtalk_decision = 0; + hStereoClassif->lrtd_mode = 0; + } + } + + if ( hCPE->last_element_mode != element_mode ) + { + if ( hCPE->last_element_mode != IVAS_CPE_DFT && hCPE->last_element_mode != IVAS_CPE_TD ) + { + int16_t lrtd_mode = hStereoClassif->lrtd_mode; + /* reset stereo classifier when switching from MDCT stereo to Unified stereo */ + stereo_classifier_init( hCPE->hStereoClassif ); + + hStereoClassif->lrtd_mode = lrtd_mode; + } + else + { + /* reset UNCLR classifier parameters */ + set_f( hStereoClassif->unclr_fv, -1.0f, SSC_MAX_NFEA ); + hStereoClassif->unclr_corrLagMax_prev = 0; + + /* reset xtalk classifier parameters */ + set_f( hStereoClassif->xtalk_fv, -1.0f, SSC_MAX_NFEA ); + } + } + + +#ifdef DEBUG_MODE_TD + dbgwrite( &hStereoClassif->unclr_decision, sizeof( int16_t ), 1, L_FRAME16k, "res/unclr_decision.enc" ); + dbgwrite( &hStereoClassif->xtalk_decision, sizeof( int16_t ), 1, L_FRAME16k, "res/xtalk_decision.enc" ); + dbgwrite( &hCPE->hCoreCoder[0]->sp_aud_decision0, sizeof( int16_t ), 1, L_FRAME16k, "res/sp_aud_class.enc" ); + dbgwrite( &hCPE->hCoreCoder[0]->last_core, sizeof( int16_t ), 1, L_FRAME16k, "res/last_core.enc" ); +#endif + + if ( element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->Opt_DTX_ON ) + { + hCPE->hStereoCng->td_active = 1; + hCPE->hStereoCng->first_SID_after_TD = 1; + } + + return ( element_mode ); +} + + +/*-------------------------------------------------------------------* + * Function stereo_classifier_init() + * + * Initialize stereo classifier handle + *-------------------------------------------------------------------*/ + +void stereo_classifier_init( + STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier structure */ +) +{ + /* initialization of features for xtalk classifier and UNCLR classifier */ + hStereoClassif->clas_ch1 = 0; + set_s( hStereoClassif->pitch_ch1, 0, 3 ); + set_f( hStereoClassif->voicing_ch1, 0.0f, 3 ); + hStereoClassif->cor_map_sum_ch1 = 0.0f; + set_f( hStereoClassif->lsf_ch1, 0.0f, M ); + hStereoClassif->lepsP_ch1 = 0.0f; + hStereoClassif->dE1_ch1 = 0.0f; + hStereoClassif->dE1_ch2 = 0.0f; + hStereoClassif->nchar_ch1 = 0.0f; + hStereoClassif->nchar_ch2 = 0.0f; + hStereoClassif->non_sta_ch1 = 0.0f; + hStereoClassif->sp_div_ch1 = 0.0f; + hStereoClassif->ps_diff_ch1 = 0.0f; + hStereoClassif->ps_diff_ch2 = 0.0f; + hStereoClassif->ps_sta_ch1 = 0.0f; + hStereoClassif->ps_sta_ch2 = 0.0f; + hStereoClassif->prev_g_IPD = 0.5f; + hStereoClassif->prev_IPD = 0.0f; + hStereoClassif->prev_ratio_m1_m2 = 0.0f; + set_f( hStereoClassif->xtalk_score_buf, 0.0f, XTALK_SCORE_BUF_LEN ); + hStereoClassif->ratio_L = 0.5f; + hStereoClassif->vad_flag_glob = 0; + hStereoClassif->vad_relE = 0; + hStereoClassif->is_speech = 0.0f; + + set_s( hStereoClassif->aEn_raw, 0, CPE_CHANNELS ); + + hStereoClassif->Etot_dn = 0.0f; + hStereoClassif->Etot_up = 0.0f; + + set_f( hStereoClassif->relE_buf, 0.0f, UNCLR_L_RELE ); + set_f( hStereoClassif->Etot_buf, 0.0f, UNCLR_L_ETOT ); + set_f( hStereoClassif->unclr_relE_0_1_LT, 0.0f, UNCLR_RC_ORDER ); + + hStereoClassif->unclr_sw_enable_cnt[0] = 0; + hStereoClassif->unclr_sw_enable_cnt[1] = 0; + + hStereoClassif->unclr_decision = 0; + hStereoClassif->unclr_wscore = 0.0f; + + set_f( hStereoClassif->unclr_fv, -1.0f, SSC_MAX_NFEA ); + hStereoClassif->unclr_corrLagMax_prev = 0; + hStereoClassif->ave_ener_L = 0; + hStereoClassif->ave_ener_R = 0; + hStereoClassif->relE_0_1 = 0.01f; + hStereoClassif->relE_0_1_LT = 0.01f; + + set_f( hStereoClassif->xtalk_fv, -1.0f, SSC_MAX_NFEA ); + hStereoClassif->xtalk_wscore = 0.0f; + hStereoClassif->xtalk_decision = 0; + hStereoClassif->xtalk_score_wrelE = 0.0f; + + hStereoClassif->lrtd_mode = 0; + hStereoClassif->prev_lrtd_mode = 0; + + hStereoClassif->silence_flag = 0; + + return; +} + + +/*-----------------------------------------------------------------* + * stereo_classifier_features() + * + * Collect features for stereo classifiers + *-----------------------------------------------------------------*/ + +void stereo_classifier_features( + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + const int16_t idchan, /* i : channel ID */ + const int16_t element_mode, /* i : element mode */ + const int16_t vad_flag, /* i : VAD flag */ + const float lsf_new[], /* i : LSFs at the end of the frame */ + const float epsP[], /* i : LP analysis residual energies for each iteration*/ + const int16_t pitch[], /* i : open-loop pitch values for quantiz. */ + const float voicing[], /* i : OL maximum normalized correlation */ + const float cor_map_sum, /* i : speech/music clasif. parameter */ + const float non_staX, /* i : unbound non-stationarity for sp/mu clas. */ + const float sp_div, /* i : spectral diversity feature */ + const int16_t clas /* i : signal class */ +) +{ + int16_t i, clas_ch2; + float lepsP_ch2, ener_l, ener_r; + + /* combine VAD flags from both channels */ + if ( idchan == 0 ) + { + hStereoClassif->vad_flag_glob = vad_flag; + } + else + { + hStereoClassif->vad_flag_glob |= vad_flag; + } + + if ( ( element_mode == IVAS_CPE_DFT && idchan == 0 ) || ( element_mode == IVAS_CPE_TD && idchan == 1 ) ) + { + /* update Etot_up and Etot_dn based on aEn */ + ener_l = 10.0f * log10f( hStereoClassif->ave_ener_L + 1.0f ); + ener_r = 10.0f * log10f( hStereoClassif->ave_ener_R + 1.0f ); + mvr2r( &hStereoClassif->Etot_buf[0], &hStereoClassif->Etot_buf[1], UNCLR_L_ETOT - 1 ); + hStereoClassif->Etot_buf[0] = max( 0, max( ener_l, ener_r ) ); + + if ( hStereoClassif->aEn_raw[0] == 6 || ( element_mode == IVAS_CPE_TD && hStereoClassif->aEn_raw[1] == 6 ) ) + { + /* active signal, update upper bound */ + if ( hStereoClassif->Etot_buf[0] < hStereoClassif->Etot_up ) + { + /* energy decreases -> slower update */ + hStereoClassif->Etot_up = 0.99f * hStereoClassif->Etot_up + 0.01f * hStereoClassif->Etot_buf[0]; + } + else + { + /* energy increases -> faster update */ + hStereoClassif->Etot_up = 0.95f * hStereoClassif->Etot_up + 0.05f * hStereoClassif->Etot_buf[0]; + } + } + else if ( ( element_mode == IVAS_CPE_DFT && hStereoClassif->aEn_raw[0] == 0 ) || + ( element_mode == IVAS_CPE_TD && hStereoClassif->aEn_raw[0] == 0 && hStereoClassif->aEn_raw[1] == 0 ) ) + { + /* inactive signal, update lower bound */ + if ( hStereoClassif->Etot_buf[0] < hStereoClassif->Etot_dn ) + { + /* energy decreases -> faster update */ + hStereoClassif->Etot_dn = 0.9f * hStereoClassif->Etot_dn + 0.1f * hStereoClassif->Etot_buf[0]; + } + else + { + /* energy increases -> slower update */ + hStereoClassif->Etot_dn = 0.95f * hStereoClassif->Etot_dn + 0.05f * hStereoClassif->Etot_buf[0]; + } + + if ( hStereoClassif->Etot_dn < 30.0f ) + { + /* do not decrease below lower bound threshold */ + hStereoClassif->Etot_dn = 30.0f; + } + } + + /* upper bound is too low and close to lower bound -> update it */ + if ( hStereoClassif->Etot_up < hStereoClassif->Etot_dn + 20.0f ) + { + hStereoClassif->Etot_up = hStereoClassif->Etot_dn + 20.0f; + } + + /* normalize Etot to (0,1) */ + hStereoClassif->relE_0_1 = lin_interp( hStereoClassif->Etot_buf[0], hStereoClassif->Etot_dn, 0.0f, hStereoClassif->Etot_up, 0.9f, 1 ); + + /* update relE_buf */ + mvr2r( &hStereoClassif->relE_buf[0], &hStereoClassif->relE_buf[1], UNCLR_L_RELE - 1 ); + hStereoClassif->relE_buf[0] = hStereoClassif->relE_0_1; + + if ( hStereoClassif->relE_0_1 >= hStereoClassif->relE_buf[1] ) + { + hStereoClassif->relE_0_1_LT = 0.9f * hStereoClassif->relE_0_1_LT + 0.1f * hStereoClassif->relE_0_1; + } + else + { + hStereoClassif->relE_0_1_LT = 0.95f * hStereoClassif->relE_0_1_LT + 0.05f * hStereoClassif->relE_0_1; + } + + /* estimate VAD flag based on relative energy */ + if ( hStereoClassif->relE_0_1_LT < 0.1f ) + { + hStereoClassif->vad_relE = 0; + } + else + { + hStereoClassif->vad_relE = 1; + } + + /* combine classical VAD flag with VAD flag based on relative energy */ + hStereoClassif->vad_flag_glob &= hStereoClassif->vad_relE; + } + + if ( idchan == 0 ) + { + mvr2r( lsf_new, hStereoClassif->lsf_ch1, M ); + hStereoClassif->lepsP_ch1 = logf( epsP[13] + 1e-5f ) - logf( epsP[0] + 1e-5f ); + + hStereoClassif->xtalk_fv[E_lsf_1] = lsf_new[0]; + hStereoClassif->xtalk_fv[E_lsf_4] = lsf_new[3]; + hStereoClassif->xtalk_fv[E_lsf_9] = lsf_new[8]; + hStereoClassif->xtalk_fv[E_lsf_14] = lsf_new[13]; + hStereoClassif->xtalk_fv[E_lepsP_13] = hStereoClassif->lepsP_ch1; + } + else + { + hStereoClassif->xtalk_fv[E_sum_d_LSF] = 0; + for ( i = 0; i < M; i++ ) + { + hStereoClassif->xtalk_fv[E_sum_d_LSF] += fabsf( lsf_new[i] - hStereoClassif->lsf_ch1[i] ); + } + + if ( hStereoClassif->vad_flag_glob && ( hStereoClassif->ratio_L > 0.0f && hStereoClassif->ratio_L < 1.0f ) ) + { + hStereoClassif->xtalk_fv[E_sum_d_LSF] = 0.0f; + } + lepsP_ch2 = logf( epsP[13] + 1e-5f ) - logf( epsP[0] + 1e-5f ); + hStereoClassif->xtalk_fv[E_d_lepsP_13] = fabsf( hStereoClassif->lepsP_ch1 - lepsP_ch2 ); + } + + if ( idchan == 0 ) + { + mvs2s( pitch, hStereoClassif->pitch_ch1, 3 ); + mvr2r( voicing, hStereoClassif->voicing_ch1, 3 ); + + hStereoClassif->xtalk_fv[E_pitch] = 1 / 3.0f * ( pitch[0] + pitch[1] + pitch[2] ); + hStereoClassif->xtalk_fv[E_voicing] = 1 / 3.0f * ( voicing[0] + voicing[1] + voicing[2] ); + } + else + { + hStereoClassif->xtalk_fv[E_d_pitch] = 0; + hStereoClassif->xtalk_fv[E_d_voicing] = 0; + for ( i = 0; i < 3; i++ ) + { + hStereoClassif->xtalk_fv[E_d_pitch] += (float) abs( pitch[i] - hStereoClassif->pitch_ch1[i] ); + hStereoClassif->xtalk_fv[E_d_voicing] += fabsf( voicing[i] - hStereoClassif->voicing_ch1[i] ); + } + hStereoClassif->xtalk_fv[E_d_pitch] /= 3.0f; + hStereoClassif->xtalk_fv[E_d_voicing] /= 3.0f; + } + + if ( idchan == 0 ) + { + hStereoClassif->cor_map_sum_ch1 = cor_map_sum; + hStereoClassif->non_sta_ch1 = non_staX; + hStereoClassif->sp_div_ch1 = sp_div; + + hStereoClassif->xtalk_fv[E_cor_map_sum] = cor_map_sum; + hStereoClassif->xtalk_fv[E_nchar] = logf( hStereoClassif->nchar_ch1 + 1.0f ); + hStereoClassif->xtalk_fv[E_non_sta] = non_staX; + hStereoClassif->xtalk_fv[E_sp_div] = logf( sp_div + 1.0f ); + } + else + { + hStereoClassif->xtalk_fv[E_d_cor_map_sum] = fabsf( hStereoClassif->cor_map_sum_ch1 - cor_map_sum ); + hStereoClassif->xtalk_fv[E_d_nchar] = fabsf( logf( hStereoClassif->nchar_ch1 + 1.0f ) - logf( hStereoClassif->nchar_ch2 + 1.0f ) ); + hStereoClassif->xtalk_fv[E_d_non_sta] = fabsf( hStereoClassif->non_sta_ch1 - non_staX ); + hStereoClassif->xtalk_fv[E_d_sp_div] = fabsf( logf( hStereoClassif->sp_div_ch1 + 1.0f ) - logf( sp_div + 1.0f ) ); + } + + if ( idchan == 0 ) + { + hStereoClassif->xtalk_fv[E_dE1] = logf( hStereoClassif->dE1_ch1 + 1.0f ); + } + else + { + hStereoClassif->xtalk_fv[E_d_dE1] = fabsf( logf( hStereoClassif->dE1_ch1 + 1.0f ) - logf( hStereoClassif->dE1_ch2 + 1.0f ) ); + } + + if ( idchan == 0 ) + { + if ( clas > VOICED_CLAS ) + { + hStereoClassif->clas_ch1 = VOICED_CLAS; + } + else if ( clas < VOICED_CLAS ) + { + hStereoClassif->clas_ch1 = UNVOICED_CLAS; + } + else + { + hStereoClassif->clas_ch1 = clas; + } + + hStereoClassif->xtalk_fv[E_clas] = hStereoClassif->clas_ch1; + } + else + { + if ( clas > VOICED_CLAS ) + { + clas_ch2 = VOICED_CLAS; + } + else if ( clas < VOICED_CLAS ) + { + clas_ch2 = UNVOICED_CLAS; + } + else + { + clas_ch2 = clas; + } + + hStereoClassif->xtalk_fv[E_d_clas] = (float) abs( hStereoClassif->clas_ch1 - clas_ch2 ); + } + + if ( idchan == 0 ) + { + hStereoClassif->xtalk_fv[E_ps_diff] = hStereoClassif->ps_diff_ch1; + hStereoClassif->xtalk_fv[E_ps_sta] = hStereoClassif->ps_sta_ch1; + } + else + { + hStereoClassif->xtalk_fv[E_d_ps_diff] = fabsf( hStereoClassif->ps_diff_ch1 - hStereoClassif->ps_diff_ch2 ); + hStereoClassif->xtalk_fv[E_d_ps_sta] = fabsf( hStereoClassif->ps_sta_ch1 - hStereoClassif->ps_sta_ch2 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function unclr_classifier_td() + * + * Classify current TD frame as uncorrelated L/R (1) or normal (0) + *-------------------------------------------------------------------*/ + +void unclr_classifier_td( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +) +{ + int16_t i, ind; + float relE_ST, edge, edge_0_1; + float score, fvn[SSC_MAX_NFEA]; +#ifdef DEBUG_MODE_TD + int16_t dec; +#endif + STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; + + set_f( fvn, -1.0f, SSC_MAX_NFEA ); + + /* calcualte raw score based on LR */ + score = UNCLR_INTERCEPT_TD; + for ( i = 0; i < SIZE_UNCLR_ISEL_TD; i++ ) + { + ind = unclr_isel_td[i]; + + /* mean & std removal */ + fvn[i] = ( hStereoClassif->unclr_fv[ind] - unclr_mean_td[i] ) / unclr_scale_td[i]; + + /* LR */ + score += fvn[i] * unclr_coef_td[i]; + } + +#ifdef DEBUG_MODE_TD + /* raw decision */ + dec = score > 0; +#endif + + /* normalize score to -1:+1 */ + if ( score > UNCLR_SCORE_THR ) + { + score = UNCLR_SCORE_THR; + } + else if ( score < -UNCLR_SCORE_THR ) + { + score = -UNCLR_SCORE_THR; + } + score /= 2 * UNCLR_SCORE_THR; + + /* weight raw score with relative energy */ + score *= hStereoClassif->relE_0_1; + + /* rising edge detection on relE */ + relE_ST = mean( hStereoClassif->relE_buf, UNCLR_L_RELE ); + if ( hStereoClassif->relE_0_1 > relE_ST ) + { + rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_UP ); + } + else + { + rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_DOWN ); + } + + edge = hStereoClassif->relE_0_1 - hStereoClassif->unclr_relE_0_1_LT[UNCLR_RC_ORDER - 1]; + edge_0_1 = lin_interp( edge, 0.0f, 0.95f, 1.0f, 0.9f, 1 ); + + /* LT average */ + hStereoClassif->unclr_wscore = edge_0_1 * hStereoClassif->unclr_wscore + ( 1 - edge_0_1 ) * score; + + /* binary decision w. hysteresis (switch the decision only when coder_type is GC, UC or IC) */ + if ( ( ( hStereoClassif->unclr_decision == 0 && hStereoClassif->unclr_wscore > 0.1f ) || ( hStereoClassif->unclr_decision == 1 && hStereoClassif->unclr_wscore < -0.07f ) ) && ( hStereoClassif->unclr_sw_enable_cnt[0] > 0 || hStereoClassif->unclr_sw_enable_cnt[1] > 0 ) ) + { + /* let's switch the binary decision */ + hStereoClassif->unclr_decision = !hStereoClassif->unclr_decision; + } + +#ifdef DEBUG_MODE_TD + dbgwrite( &dec, sizeof( int16_t ), 1, 1, "res/unclr_dec.x" ); + dbgwrite( &hStereoClassif->unclr_wscore, sizeof( float ), 1, 1, "res/unclr_wscore.x" ); + dbgwrite( &hStereoClassif->unclr_decision, sizeof( int16_t ), 1, 1, "res/unclr_dec_hyst.x" ); +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * Function unclr_classifier_dft() + * + * Classifies current DFT frame as uncorrelated L/R (1) or normal stereo (0) + *-------------------------------------------------------------------*/ + +void unclr_classifier_dft( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +) +{ + int16_t i, ind; + float edge, relE_ST, edge_0_1; + float score, fvn[SSC_MAX_NFEA]; +#ifdef DEBUG_MODE_TD + int16_t dec; +#endif + + STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; + + /* calculate raw score based on LR */ + score = UNCLR_INTERCEPT_DFT; + for ( i = 0; i < SIZE_UNCLR_ISEL_DFT; i++ ) + { + ind = unclr_isel_dft[i]; + + /* mean & std removal */ + fvn[i] = ( hStereoClassif->unclr_fv[ind] - unclr_mean_dft[i] ) / unclr_scale_dft[i]; + + /* LR */ + score += fvn[i] * unclr_coef_dft[i]; + } + +#ifdef DEBUG_MODE_TD + /* raw decision */ + dec = score > 0; +#endif + + /* normalize score to -1:+1 */ + if ( score > UNCLR_SCORE_THR ) + { + score = UNCLR_SCORE_THR; + } + else if ( score < -UNCLR_SCORE_THR ) + { + score = -UNCLR_SCORE_THR; + } + score /= 2 * UNCLR_SCORE_THR; + + /* weight raw score with relative energy */ + score *= hStereoClassif->relE_0_1; + + if ( !hStereoClassif->vad_flag_glob ) + { + score = 0; + } + + /* rising edge detector on relE */ + relE_ST = mean( hStereoClassif->relE_buf, UNCLR_L_RELE ); + if ( hStereoClassif->relE_0_1 > relE_ST ) + { + rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_UP ); + } + else + { + rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_DOWN ); + } + + edge = hStereoClassif->relE_0_1 - hStereoClassif->unclr_relE_0_1_LT[UNCLR_RC_ORDER - 1]; + edge_0_1 = lin_interp( edge, 0.0f, 0.95f, 1.0f, 0.9f, 1 ); + + /* LT average */ + hStereoClassif->unclr_wscore = edge_0_1 * hStereoClassif->unclr_wscore + ( 1 - edge_0_1 ) * score; + + /* binary decision w. hysteresis (switch the decision only when coder_type is GC, UC or IC) */ + if ( ( ( hStereoClassif->unclr_decision == 0 && hStereoClassif->unclr_wscore > 0.1f ) || ( hStereoClassif->unclr_decision == 1 && hStereoClassif->unclr_wscore < -0.07f ) ) && ( hStereoClassif->unclr_sw_enable_cnt[0] > 0 ) ) + { + /* let's switch the binary decision */ + hStereoClassif->unclr_decision = !hStereoClassif->unclr_decision; + } + +#ifdef DEBUG_MODE_TD + dbgwrite( &dec, sizeof( int16_t ), 1, 1, "res/unclr_dec.x" ); + dbgwrite( &hStereoClassif->unclr_wscore, sizeof( float ), 1, 1, "res/unclr_wscore.x" ); + dbgwrite( &hStereoClassif->unclr_decision, sizeof( int16_t ), 1, 1, "res/unclr_dec_hyst.x" ); +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * Function xtalk_classifier_td() + * + * Classify current TD frame as cross-talk frame (1) or normal stereo frame (0) + *-------------------------------------------------------------------*/ + +void xtalk_classifier_td( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +) +{ + int16_t i, ind, edge_type; + float score, fvn[SSC_MAX_NFEA]; + float edge, edge_0_1, wedge, scr_min, scr_max, wrelE; + +#ifdef DEBUG_MODE_TD + int16_t dec; +#endif + + STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; + + set_f( fvn, -1.0f, SSC_MAX_NFEA ); + + /* calcualte raw score based on LR */ + score = XTALK_INTERCEPT_TD; + for ( i = 0; i < SIZE_XTALK_ISEL_TD; i++ ) + { + ind = xtalk_isel_td[i]; + + /* mean & std removal */ + fvn[i] = ( hStereoClassif->xtalk_fv[ind] - xtalk_mean_td[i] ) / xtalk_scale_td[i]; + + /* LR */ + score += fvn[i] * xtalk_coef_td[i]; + } + + /* normalize raw score to -1:+1 */ + if ( score > XTALK_SCORE_THR_TD_UP ) + { + score = 1.0f; + } + else if ( score < -XTALK_SCORE_THR_TD_DN ) + { + score = -1.0f; + } + else if ( score > 0.0f ) + { + score /= XTALK_SCORE_THR_TD_UP; + } + else + { + score /= XTALK_SCORE_THR_TD_DN; + } + + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + /* overwrite score if we have just switched from DFT stereo */ + score = hStereoClassif->xtalk_score; + } + else + { + hStereoClassif->xtalk_score = score; + } + + if ( !hStereoClassif->vad_flag_glob ) + { + /* reset score to 0 in inactive segments */ + score = 0; + } + +#ifdef DEBUG_MODE_TD + /* raw decision */ + dec = score > 0; +#endif + + /* weight raw score with relative energy */ + wrelE = lin_interp( hStereoClassif->relE_0_1, 0.5f, 0.95f, 0.9f, 0.0f, 1 ); + hStereoClassif->xtalk_score_wrelE = wrelE * hStereoClassif->xtalk_score_wrelE + ( 1 - wrelE ) * score; + score = hStereoClassif->xtalk_score_wrelE; + + /* rising edge detector on raw score -> yields 1 if strong rising edge is detected in the raw score buffer */ + mvr2r( &hStereoClassif->xtalk_score_buf[0], &hStereoClassif->xtalk_score_buf[1], XTALK_SCORE_BUF_LEN - 1 ); + hStereoClassif->xtalk_score_buf[0] = score; + + minimum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_min ); + maximum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_max ); + + if ( ( ( scr_min < 0.0f && scr_max > 0.2f ) || ( scr_max - scr_min > 0.5f ) ) ) + { + /* test rising edge (use 0 as edge_type because of newer->older buffer samples ordering) */ + edge_type = 0; + edge_detect( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, -0.2f, 1.0f, &edge, &edge_type ); + + if ( edge_type == 0 && edge < 0.3f ) + { + /* normalize edge to 0-1 interval */ + edge_0_1 = lin_interp( 1 - edge, 1.0f, 1.0f, 0.6f, 0.0f, 1 ); + } + else + { + edge_0_1 = 0; + } + } + else + { + edge_0_1 = 0.0f; + } + + /* weight raw score based on rising edge detector */ + wedge = lin_interp( edge_0_1, 0.0f, 0.9f, 1.0f, 0.5f, 1 ); + + hStereoClassif->xtalk_wscore = wedge * hStereoClassif->xtalk_wscore + ( 1 - wedge ) * score; + + if ( !hStereoClassif->vad_flag_glob ) + { + hStereoClassif->xtalk_wscore = 0; + } + + /* binary decision w. hysteresis (switch the decision only when coder_type is GC, UC or IC) */ + if ( ( hStereoClassif->unclr_decision == 0 && hStereoClassif->xtalk_decision == 0 && hStereoClassif->xtalk_wscore > 0.03f ) /*|| (hStereoClassif->xtalk_decision == 1 && hStereoClassif->xtalk_wscore < 0.00f)*/ && ( hStereoClassif->unclr_sw_enable_cnt[0] > 0 || hStereoClassif->unclr_sw_enable_cnt[1] > 0 ) ) + { + /* let's switch the binary decision */ + hStereoClassif->xtalk_decision = !hStereoClassif->xtalk_decision; + } + +#ifdef DEBUG_MODE_TD + dbgwrite( &hStereoClassif->xtalk_wscore, sizeof( float ), 1, 1, "res/xtalk_wscore.x" ); + dbgwrite( &dec, sizeof( int16_t ), 1, 1, "res/xtalk_dec.x" ); + dbgwrite( &hStereoClassif->xtalk_decision, sizeof( int16_t ), 1, 1, "res/xtalk_dec_hyst.x" ); +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * Function xtalk_classifier_dft() + * + * Classify current DFT frame as cross-talk frame (1) or normal stereo frame (0) + *-------------------------------------------------------------------*/ + +void xtalk_classifier_dft( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int16_t itd, /* i : ITD from DFT stereo - used as a feature */ + const float gcc_phat[] /* i : GPHAT cross-channel correlation function*/ +) +{ + int16_t i, ind, itd2, thr; + float score, m1, m2; + STEREO_CLASSIF_HANDLE hStereoClassif; + ITD_DATA_HANDLE hItd; + float fvn[SSC_MAX_NFEA], edge, edge_0_1, wedge; + float ratio_m1_m2, m2_m2, d_itd2, itd1_flip; + float scr_min, scr_max; +#ifdef DEBUG_MODE_TD + int16_t dec; +#endif + + hStereoClassif = hCPE->hStereoClassif; + hItd = ( hCPE->hStereoDft != NULL ) ? hCPE->hStereoDft->hItd : hCPE->hStereoMdct->hItd; + + m1 = 0.0f; + m2 = 0.0f; + + itd2 = 0; + thr = ( hCPE->element_brate >= IVAS_32k ? 2 : 1 ) * CLASSIFIER_ITD_THRES; + + if ( itd > thr ) + { + m1 = fabsf( gcc_phat[itd + XTALK_PHAT_LEN] ); + m2 = fabsf( gcc_phat[0] ); + itd2 = -XTALK_PHAT_LEN; + for ( i = 1; i < XTALK_PHAT_LEN - thr; i++ ) + { + if ( fabsf( gcc_phat[i] ) > m2 ) + { + itd2 = -XTALK_PHAT_LEN + i; + m2 = fabsf( gcc_phat[i] ); + } + } + } + else if ( itd < -thr ) + { + m1 = fabsf( gcc_phat[itd + XTALK_PHAT_LEN] ); + m2 = fabsf( gcc_phat[XTALK_PHAT_LEN + thr + 1] ); + itd2 = thr + 1; + for ( i = XTALK_PHAT_LEN + thr + 2; i < 2 * XTALK_PHAT_LEN + 1; i++ ) + { + if ( fabsf( gcc_phat[i] ) > m2 ) + { + itd2 = -XTALK_PHAT_LEN + i; + m2 = fabsf( gcc_phat[i] ); + } + } + } + + ratio_m1_m2 = fabsf( m1 * m2 ) / fabsf( m1 + m2 + 1.0f ); + m2_m2 = hItd->prev_m2 * m2; + d_itd2 = (float) abs( itd2 - hItd->prev_itd2 ); + itd1_flip = (float) ( max( itd, hItd->prev_itd1 ) * ( -min( itd, hItd->prev_itd1 ) ) ); + + + hStereoClassif->xtalk_fv[E_gphat_d_itd2] = d_itd2; + hStereoClassif->xtalk_fv[E_gphat_itd1_flip] = itd1_flip; + hStereoClassif->xtalk_fv[E_gphat_ratio_m1_m2] = ratio_m1_m2 * hStereoClassif->prev_ratio_m1_m2; + hStereoClassif->xtalk_fv[E_gphat_m2_m2] = m2_m2; + + hStereoClassif->prev_ratio_m1_m2 = ratio_m1_m2; + + set_f( fvn, -1.0f, SSC_MAX_NFEA ); + + /* calcualte raw score based on LR */ + score = XTALK_INTERCEPT_DFT; + for ( i = 0; i < SIZE_XTALK_ISEL_DFT; i++ ) + { + ind = xtalk_isel_dft[i]; + + /* mean & std removal */ + fvn[i] = ( hStereoClassif->xtalk_fv[ind] - xtalk_mean_dft[i] ) / xtalk_scale_dft[i]; + + /* LR */ + score += fvn[i] * xtalk_coef_dft[i]; + } + + /* normalize score to -1:+1 */ + if ( score > XTALK_SCORE_THR_DFT ) + { + score = 1.0f; + } + else if ( score < -XTALK_SCORE_THR_DFT ) + { + score = -1.0f; + } + else + { + score /= XTALK_SCORE_THR_DFT; + } + + /* raw score */ + hStereoClassif->xtalk_score = score; + + if ( !hStereoClassif->vad_flag_glob ) + { + score = 0; + } + +#ifdef DEBUG_MODE_TD + /* raw decision */ + dec = score > 0; +#endif + + + /* rising edge detector on raw score -> yields 1 if strong rising edge is detected in the given buffer */ + mvr2r( &hStereoClassif->xtalk_score_buf[0], &hStereoClassif->xtalk_score_buf[1], XTALK_SCORE_BUF_LEN - 1 ); + hStereoClassif->xtalk_score_buf[0] = score; + + minimum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_min ); + maximum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_max ); + + if ( scr_min < 0.2f && scr_max > 0.0f ) + { + edge = redge_detect( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, -0.2f, 1.0f ); + edge_0_1 = lin_interp( 1 - edge, 1.0f, 1.0f, 0.83f, 0.0f, 1 ); + } + else + { + edge_0_1 = 0.0f; + } + + /* weight raw score based on rising edge detector */ + wedge = lin_interp( edge_0_1, 0.0f, 0.95f, 1.0f, 0.3f, 1 ); + hStereoClassif->xtalk_wscore = wedge * hStereoClassif->xtalk_wscore + ( 1 - wedge ) * score; + + if ( ( itd == 0 ) || ( hCPE->hCoreCoder[0]->vad_flag == 0 ) ) + { + hStereoClassif->xtalk_decision = 0; + } + else if ( hCPE->element_brate >= IVAS_24k4 && + hStereoClassif->xtalk_decision == 0 && ( ( m1 * 0.8 < m2 && hItd->prev_m1 * 0.8 < hItd->prev_m2 && abs( itd2 - hItd->prev_itd2 ) < 4 && m1 > 0.15 && hItd->prev_m1 > 0.15 ) || ( hStereoClassif->xtalk_wscore > 0.8 ) || ( itd > thr && hItd->prev_itd1 < -thr && hStereoClassif->silence_flag == 0 ) || ( hItd->prev_itd1 > thr && itd < -thr && hStereoClassif->silence_flag == 0 ) ) && + hCPE->hCoreCoder[0]->vad_flag == 1 && hCPE->hCoreCoder[0]->flag_noisy_speech_snr == 0 && hCPE->hCoreCoder[0]->hNoiseEst->aEn_inac_cnt > 15 ) + { + hStereoClassif->xtalk_decision = 1; +#ifdef DEBUG_MODE_TD + printf( "\nSwitch DFT-stereo -> TD-LR on frame %d\n", frame ); +#endif + } + else if ( hCPE->element_brate >= IVAS_16k4 && hStereoClassif->xtalk_decision == 0 && abs( itd ) > STEREO_DFT_ITD_MAX && ( hCPE->hCoreCoder[0]->lp_speech - hCPE->hCoreCoder[0]->lp_noise ) > 25.0f ) + { + hStereoClassif->xtalk_decision = 1; + } + +#ifdef DEBUG_MODE_TD + dbgwrite( &hStereoClassif->xtalk_wscore, sizeof( float ), 1, 1, "res/xtalk_wscore.x" ); + dbgwrite( &dec, sizeof( int16_t ), 1, 1, "res/xtalk_dec.x" ); + dbgwrite( &hStereoClassif->xtalk_decision, sizeof( int16_t ), 1, 1, "res/xtalk_dec_hyst.x" ); +#endif + + /* updates */ + hItd->prev_m1 = m1; + hItd->prev_m2 = m2; + hItd->prev_itd1 = itd; + hItd->prev_itd2 = itd2; + + return; +} + + +/*-------------------------------------------------------------------* + * Function rc_filter() + * + * + *-------------------------------------------------------------------*/ + +static void rc_filter( + const float x, + float *y, + const int16_t order, + const float tau ) +{ + int16_t i; + + y[0] = tau * y[0] + ( 1 - tau ) * x; + for ( i = 1; i < order; i++ ) + { + y[i] = tau * y[i] + ( 1 - tau ) * y[i - 1]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function edge_detect() + * + * Rising/falling edge detection algorithm + * Analyzes the input buffer and outputs strength and type of the detected edge (rising or falling) + * Set edge_type to 0/1/2 when calling this function to specify the edge type you want to detect. The returned value will be modified + * according to the edge type detected (-1 indicates that no edge has been detected) + *-------------------------------------------------------------------*/ + +static void edge_detect( + const float *inp, /* i : input buffer */ + const int16_t len, /* i : length of the input buffer */ + const float inp_min, /* i : minimum value for edge detection */ + const float inp_max, /* i : maximum value for edge detection */ + float *edge_str, /* o : edge strength (from 0 to Inf) */ + int16_t *edge_type /* i/o: edge type (to be) detected: 0 = falling, 1 = rising, 2 = both */ +) +{ + int16_t i, j, et; + float y, err, edge_slope, edge[EDGE_MAX_LEN]; + float edge_min, err0; + + et = -1; + edge_min = 1e7f; + + if ( *edge_type == 0 || *edge_type == 2 ) + { + /* falling edge detection */ + set_f( edge, 0.0f, EDGE_MAX_LEN ); + + /* set error at 0th index */ + if ( inp[0] > inp_max ) + { + err0 = 0.0f; + } + else + { + /* inhibits edge smearing effect */ + err0 = powf( inp[0] - inp_max, 2 ); + } + + /* test edges on intervals from 2 to len */ + for ( i = 1; i < len; i++ ) + { + edge_slope = ( inp_max - inp_min ) / i; + edge[i] = err0; + for ( j = 1; j <= i; j++ ) + { + y = inp_max - edge_slope * j; + err = y - thr_f( inp[j], inp_min, inp_max ); + edge[i] += err * err; + } + + edge[i] /= i + 1; + + if ( edge[i] < edge_min ) + { + edge_min = edge[i]; + et = 0; + } + } + } + + if ( *edge_type == 1 || *edge_type == 2 ) + { + /* rising edge detection */ + set_f( edge, 0.0f, EDGE_MAX_LEN ); + + /* set error at 0th index */ + if ( inp[0] < inp_min ) + { + err0 = 0.0f; + } + else + { + /* inhibits edge smearing effect */ + err0 = powf( inp[0] - inp_min, 2 ); + } + + /* test edges on intervals from 2 to len */ + for ( i = 1; i <= len; i++ ) + { + edge_slope = ( inp_max - inp_min ) / i; + edge[i] = err0; + for ( j = 1; j < i; j++ ) + { + y = inp_min + edge_slope * j; + err = y - thr_f( inp[j], inp_min, inp_max ); + edge[i] += err * err; + } + + edge[i] /= i + 1; + + if ( edge[i] < edge_min ) + { + edge_min = edge[i]; + et = 1; + } + } + } + + *edge_str = edge_min; + *edge_type = et; + + return; +} + + +/*-------------------------------------------------------------------* + * Function redge_detect() + * + * Rising edge detection algorithm + * Analyzes the input buffer and outputs value close to 1 when it detects strong rising edge + *-------------------------------------------------------------------*/ + +/*! r: rising edge strength normalized to 0-1 */ +static float redge_detect( + const float *inp, /* i : input buffer (ordered from newest to oldest values)*/ + const int16_t len, /* i : length of the input buffer */ + const float inp_min, /* i : minimum value for edge detection */ + const float inp_max /* i : maximum value for edge detection */ +) +{ + int16_t i, j; + float y, err, edge_slope, edge[REDGE_MAX_LEN]; + float edge_min, err0; + + set_f( edge, 0.0f, REDGE_MAX_LEN ); + edge_min = 1e7f; + + /* test rising edges on intervals from 2 to len */ + if ( inp[0] > inp_max ) + { + err0 = 0.0f; + } + else + { + err0 = powf( inp[0] - inp_max, 2 ); + } + for ( i = 1; i < len; i++ ) + { + edge_slope = ( inp_max - inp_min ) / i; + edge[i] = err0; + for ( j = 1; j < i; j++ ) + { + y = inp_max - edge_slope * j; + if ( inp[j] == inp[j - 1] && inp[j] == inp_max ) + { + /* we are saturated at inp_max */ + err = 0.0f; + } + else if ( inp[j] < inp_min ) + { + /* we are below inp_min */ + err = y - inp_min; + } + else + { + err = y - inp[j]; + } + err = err * err; + edge[i] += err; + } + + edge[i] /= i + 1; + + if ( edge[i] < edge_min ) + { + edge_min = edge[i]; + } + } + + return edge_min; +} diff --git a/lib_enc/ivas_stereo_cng_enc.c b/lib_enc/ivas_stereo_cng_enc.c new file mode 100644 index 0000000000..860cdbe88f --- /dev/null +++ b/lib_enc/ivas_stereo_cng_enc.c @@ -0,0 +1,487 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------- + * Local constants + *-------------------------------------------------------------------*/ + +#define COH_FADE_MAX 4 + + +/*--------------------------------------------------------------- + * stereo_dft_enc_sid_calc_coh() + * + * Encodes the coherence in SID frames + * ---------------------------------------------------------------*/ + +void stereo_dft_enc_sid_calc_coh( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ + float coh_crossfade[STEREO_DFT_BAND_MAX / 2], /* i/o: Coherence crossfade memory */ + int16_t *td_active, /* i/o: TD stereo mode indicator */ + int16_t *first_SID, /* i/o: First SID indicator */ + float *cohBand /* i/o: Coherence per band */ +) +{ + int16_t b, k; + float coh_weight; + float coh_weight_sum; + + /* Cluster the coherence into bands using a weighted average. The coherence is weighted with the energy spectrum of the + mixdown signal. */ + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + cohBand[b] = 0; + coh_weight_sum = 0; + + for ( k = hStereoDft->band_limits[b]; k < hStereoDft->band_limits[b + 1]; k++ ) + { + coh_weight = hStereoDft->DFT[0][2 * k] * hStereoDft->DFT[0][2 * k] + hStereoDft->DFT[0][2 * k + 1] * hStereoDft->DFT[0][2 * k + 1]; + cohBand[b] += coh_weight * ( hStereoDft->xspec_smooth[2 * k] * hStereoDft->xspec_smooth[2 * k] + hStereoDft->xspec_smooth[2 * k + 1] * hStereoDft->xspec_smooth[2 * k + 1] ) / ( hStereoDft->Spd_L_smooth[k] * hStereoDft->Spd_R_smooth[k] + EPSILON ); + coh_weight_sum += coh_weight; + } + if ( coh_weight_sum > 0 ) + { + cohBand[b] = cohBand[b] / coh_weight_sum; + } + } + + if ( *first_SID ) + { + mvr2r( cohBand, coh_crossfade, hStereoDft->nbands ); + *first_SID = 0; + } + + if ( hStereoDft->coh_fade_counter < COH_FADE_MAX && *td_active ) + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + cohBand[b] = ( cohBand[b] * hStereoDft->coh_fade_counter + coh_crossfade[b] * ( COH_FADE_MAX - hStereoDft->coh_fade_counter ) ) / COH_FADE_MAX; + } + hStereoDft->coh_fade_counter++; + mvr2r( cohBand, coh_crossfade, hStereoDft->nbands ); + } + else + { + mvr2r( cohBand, coh_crossfade, hStereoDft->nbands ); + hStereoDft->coh_fade_counter = COH_FADE_MAX; + *td_active = 0; + } + + return; +} + + +/*--------------------------------------------------------------- + * stereo_dft_enc_sid_coh() + * + * Encodes the coherence in SID frames + * ---------------------------------------------------------------*/ + +void stereo_dft_enc_sid_coh( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + float *mem_cohBand, /* i/o: Coherence memory */ + const int16_t nbands, /* i : number of DFT stereo bands */ + int16_t *nb_bits, /* i/o: number of bits written */ + float *cohBand /* i/o: Coherence per band */ +) +{ + int16_t b, k; + int16_t zeropad; + int16_t nr_of_sid_stereo_bits; + int16_t coh_pred_index; + float min_pred_err; + float pred_err; + int16_t res_index; + int16_t i; + float tmp; + const float *pptr; + float pred; + float cohBandq[STEREO_DFT_BAND_MAX / 2]; /* Reconstructed coherence values for intra-frame prediction */ + const float *alphaptr; + int16_t nbbits_test; + int16_t prev_nbbits_test; + int16_t alpha_step; + int16_t alpha_level; + int16_t n; + + nr_of_sid_stereo_bits = ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + zeropad = 0; + + /* Encode coherence vector. Find best fixed predictor by minimizing prediction error on input vector. + The prediction is formed by a linear combination of the previous values + in the vector. Hence, prediction is only done for coefficient 1 and up. + If not enough bits for at least one bit for encoding prediction + residual then skip the coding and write zeroes to the bitstream if needed. + In this case the decoder will set alpha to 0, i.e. reuse previous coherence */ + + if ( ( nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS - STEREO_DFT_PRED_NBITS ) > 0 ) + { + min_pred_err = 1e6f; + coh_pred_index = -1; + pptr = dft_cng_coh_pred[0]; + for ( k = 0; k < STEREO_DFT_N_COH_PRED; k++ ) + { + pred_err = 0; + for ( b = 1; b < nbands; b++ ) /* Set b=1 to skip first coefficient (same error would otherwise be added for all predictors: (cohBand[0] - 0).^2) */ + { + pred = 0; + for ( i = 0; i < b; i++ ) + { + pred += ( *pptr++ ) * cohBand[i]; + } + tmp = cohBand[b] - pred; + pred_err += tmp * tmp; + } + if ( pred_err < min_pred_err ) /* Store best candidate */ + { + min_pred_err = pred_err; + coh_pred_index = k; + } + } + + push_next_indice( hBstr, coh_pred_index, STEREO_DFT_PRED_NBITS ); /* Write selected predictor to bitstream */ + ( *nb_bits ) += STEREO_DFT_PRED_NBITS; + + /* Pick two different alphas (one low and one high) as a function + of the number of available bits. */ + alpha_step = 0; + for ( i = 0; i < STEREO_DFT_N_COH_ALPHA_STEPS - 1; i++ ) + { + if ( nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS > dft_cng_coh_alpha_start[i] ) + { + alpha_step = i + 1; + } + } + + /* Calculate the number of encoded bits. */ + alphaptr = dft_cng_alpha_bits[alpha_step]; + alpha_level = 0; + prev_nbbits_test = 100; + for ( i = 0; i < STEREO_DFT_N_COH_ALPHA_LEVELS; i++ ) + { + nbbits_test = 0; + pptr = dft_cng_coh_pred[coh_pred_index]; + pred = 0.4f; + for ( b = 0; b < nbands; b++ ) + { + for ( n = 0; n < b; n++ ) + { + pred += ( *pptr++ ) * cohBandq[n]; + } + + pred = ( *alphaptr ) * pred + ( 1 - ( *alphaptr ) ) * mem_cohBand[b]; + pred_err = cohBand[b] - pred; + res_index = usquant( pred_err, &pred_err, -0.4f, 0.1f, 9 ); + res_index = dft_cng_coh_i2u[res_index]; + nbbits_test += res_index + 1; + res_index = dft_cng_coh_u2i[res_index]; + pred_err = usdequant( res_index, -0.4f, 0.1f ); + cohBandq[b] = pred + pred_err; + if ( cohBandq[b] > 1 ) + { + cohBandq[b] = 1; + } + else if ( cohBandq[b] < 0 ) + { + cohBandq[b] = 0; + } + pred = 0; + } + + if ( nbbits_test < nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS ) + { + alpha_level = i; + } + + if ( nbbits_test < prev_nbbits_test ) + { + alpha_level = i; + } + + prev_nbbits_test = nbbits_test; + alphaptr++; + } + + /* Do the actual encoding using the selected predictor and alpha */ + push_next_indice( hBstr, alpha_level, STEREO_DFT_N_COH_ALPHA_BITS ); /* Write selected alpha index to bitstream */ + ( *nb_bits ) += STEREO_DFT_N_COH_ALPHA_BITS; + alphaptr = &dft_cng_alpha_bits[alpha_step][alpha_level]; + pptr = dft_cng_coh_pred[coh_pred_index]; /* Set pointer to selected predictor */ + pred = 0.4f; + + for ( b = 0; b < nbands; b++ ) + { + /* Intra-frame prediction using quantized values */ + for ( i = 0; i < b; i++ ) + { + pred += ( *pptr++ ) * cohBandq[i]; + } + /* Weighted intra/inter-frame prediction */ + pred = ( *alphaptr ) * pred + ( 1 - ( *alphaptr ) ) * mem_cohBand[b]; + pred_err = cohBand[b] - pred; + res_index = usquant( pred_err, &pred_err, -0.4f, 0.1f, 9 ); /* Quantize prediction residual */ + res_index = dft_cng_coh_i2u[res_index]; /* Convert to unary codeword - res_index+1 now equal to codeword + length in bits with the following order: + [0.0, 0.1, -0.1, 0.2, -0.2, 0.3, -0.3, 0.4, -0.4] */ + /* Bit rate truncation */ + while ( res_index + 1 + *nb_bits > nr_of_sid_stereo_bits && res_index > 0 ) + { + res_index = max( 0, res_index - 2 ); /* Reduce step by one, keeping sign. */ + } + /* Write residual index to bitstream */ + if ( res_index + 1 + *nb_bits <= nr_of_sid_stereo_bits ) /* If the bit limit is reached, res_index = 0 is assumed for remaining indices */ + { + *nb_bits += write_GR0( hBstr, IND_STEREO_DFT_SID_COH, &res_index, 1 ); + } + + /* Reconstruct */ + res_index = dft_cng_coh_u2i[res_index]; + pred_err = usdequant( res_index, -0.4f, 0.1f ); + cohBandq[b] = pred + pred_err; /* Store for intra-frame prediction */ + if ( cohBandq[b] > 1 ) + { + cohBandq[b] = 1; + } + else if ( cohBandq[b] < 0 ) + { + cohBandq[b] = 0; + } + + mem_cohBand[b] = cohBandq[b]; /* Update memory for next frame */ + pred = 0; + } + } + + /* Zero pad up to max number of bits to get constant bitrate */ + for ( k = *nb_bits; k < nr_of_sid_stereo_bits; k++ ) + { + push_next_indice( hBstr, zeropad, 1 ); + ( *nb_bits )++; + } + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_cng_side_gain() + * + * Calculate CNG side gain + *-------------------------------------------------------------------------*/ + +void stereo_dft_cng_side_gain( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ + STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ + const int32_t core_brate, /* i : core bitrate */ + const int32_t last_core_brate, /* i : last core bitrate */ + const int16_t bwidth /* i : audio band-width */ +) +{ + int16_t b; + int16_t sgSum; + int16_t band_limits_full[STEREO_DFT_BAND_MAX + 1]; + float prev_weight; + int16_t NFFT_inner; + int16_t nbands_full; + float tmp; + + NFFT_inner = ( STEREO_DFT_N_MAX_ENC * inner_frame_tbl[bwidth] ) / L_FRAME48k; + nbands_full = hStereoDft->nbands; + + /* Calculate side gain average. First average in an inactive period */ + /* uses a weighted sum of the current average and the one from the */ + /* previous inactive segment */ + + /* Inactive frame => Update both sets of averages */ + for ( b = 0; b < nbands_full; b++ ) + { + hStereoCng->sg_average[b] += hStereoDft->sidSideGain[b]; + } + hStereoCng->sg_average_counter++; + + if ( core_brate == SID_2k40 ) + { + /* SID frame */ + if ( last_core_brate == FRAME_NO_DATA || hStereoCng->first_SID ) + { + /* If first ever SID frame or not the first SID in an inactive segment */ + /* Calculate average only based on current sg_average */ + /* Copy current sum to previous */ + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + hStereoCng->prev_sg_average[b] = hStereoCng->sg_average[b]; + hStereoCng->sg_average[b] = hStereoCng->sg_average[b] / (float) hStereoCng->sg_average_counter; + } + + hStereoCng->prev_sg_average_counter = hStereoCng->sg_average_counter; + } + else + { + /* If first SID in a new inactive segment */ + /* Calculate weighting factor based on the time since the last inactive segment */ + prev_weight = 0.8f * (float) ( STEREO_DFT_SG_ACT_CNT_MAX - hStereoCng->sg_active_cnt ) / (float) STEREO_DFT_SG_ACT_CNT_MAX + 0.2f; + + /* Calculate weighted average between prev and current sg */ + /* Set prev_sg sum to current. */ + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + tmp = hStereoCng->sg_average[b]; + hStereoCng->sg_average[b] = ( hStereoCng->sg_average[b] + prev_weight * hStereoCng->prev_sg_average[b] ) / ( (float) hStereoCng->sg_average_counter + prev_weight * (float) hStereoCng->prev_sg_average_counter ); + hStereoCng->prev_sg_average[b] = tmp; + } + hStereoCng->prev_sg_average_counter = hStereoCng->sg_average_counter; + } + + /* Use coarse band partitioning in inactive frames */ + /* Rescale bands to the coarser partitioning taking the band size into account */ + mvs2s( hStereoDft->band_limits, band_limits_full, STEREO_DFT_BAND_MAX + 1 ); + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->hConfig->band_res, min( STEREO_DFT_N_32k_ENC, NFFT_inner ), ENC ); + if ( nbands_full > hStereoDft->nbands + 1 ) + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + hStereoDft->sidSideGain[b] = hStereoCng->sg_average[2 * b] * ( band_limits_full[2 * b + 1] - band_limits_full[2 * b] ); + sgSum = band_limits_full[2 * b + 1] - band_limits_full[2 * b]; + if ( ( 2 * b + 1 ) < nbands_full ) + { + hStereoDft->sidSideGain[b] += hStereoCng->sg_average[2 * b + 1] * ( band_limits_full[2 * b + 2] - band_limits_full[2 * b + 1] ); + sgSum += band_limits_full[2 * b + 2] - band_limits_full[2 * b + 1]; + } + hStereoDft->sidSideGain[b] = hStereoDft->sidSideGain[b] / sgSum; + stereo_dft_quantize_res_gains( &hStereoDft->sidSideGain[b], NULL, NULL, NULL, hStereoDft->side_gain_index_EC + b, NULL ); + } + } + else + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + stereo_dft_quantize_res_gains( &hStereoCng->sg_average[b], NULL, NULL, NULL, hStereoDft->side_gain_index_EC + b, NULL ); + } + } + /* Restart SID avg after sending SID */ + hStereoCng->sg_average_counter = 0; + set_zero( hStereoCng->sg_average, STEREO_DFT_BAND_MAX ); + } + else + { + for ( b = 0; b < nbands_full; b++ ) + { + hStereoCng->prev_sg_average[b] += hStereoDft->sidSideGain[b]; + } + + hStereoCng->prev_sg_average_counter++; + } + + hStereoCng->sg_active_cnt = 0; + hStereoCng->first_SID_after_TD = 0; + + return; +} + + +/*--------------------------------------------------------------- + * stereo_enc_cng_init() + * + * Initializes counters and averages + * ---------------------------------------------------------------*/ + +void stereo_enc_cng_init( + STEREO_CNG_ENC_HANDLE hStereoCng /* i/o: stereo CNG encoder structure */ +) +{ + hStereoCng->sg_average_counter = 0; + set_zero( hStereoCng->sg_average, STEREO_DFT_BAND_MAX ); + hStereoCng->prev_sg_average_counter = 0; + set_zero( hStereoCng->prev_sg_average, STEREO_DFT_BAND_MAX ); + hStereoCng->sg_active_cnt = 0; + hStereoCng->first_SID = 1; + set_f( hStereoCng->mem_cohBand, 0.5f, STEREO_DFT_BAND_MAX / 2 ); + set_zero( hStereoCng->coh_crossfade, STEREO_DFT_BAND_MAX / 2 ); + hStereoCng->td_active = 0; + hStereoCng->first_SID_after_TD = 1; + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_cng_upd_counters() + * + * Update Stereo CNG counters + *-------------------------------------------------------------------------*/ + +void stereo_cng_upd_counters( + STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ + const int32_t element_mode, /* i : element mode */ + const int16_t nbands, /* i : Number of bands in active */ + const float sidSideGain[], /* i : SID side gains */ + const int16_t burst_ho_count /* i : Hang-over count */ +) +{ + int16_t b; + + /* Update sg avg in hangover frames, reset in active frames */ + if ( burst_ho_count > 0 && element_mode == IVAS_CPE_DFT ) + { + for ( b = 0; b < nbands; b++ ) + { + hStereoCng->sg_average[b] += sidSideGain[b]; + } + hStereoCng->sg_average_counter++; + } + else + { + hStereoCng->sg_average_counter = 0; + set_zero( hStereoCng->sg_average, STEREO_DFT_BAND_MAX ); + } + + /* Increment active counter, stop at max value */ + hStereoCng->sg_active_cnt++; + hStereoCng->sg_active_cnt = min( hStereoCng->sg_active_cnt, STEREO_DFT_SG_ACT_CNT_MAX ); + + return; +} diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c new file mode 100644 index 0000000000..08b89ac9c3 --- /dev/null +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -0,0 +1,3430 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif +#ifdef DEBUG_MODE_DFT +static FILE *pF = NULL; +#endif + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define STEREO_DFT_NRG_PAST_MAX_BAND 9 +#define STEREO_DFT_NRG_PAST_MAX_BAND_LB 4 +#define STEREO_DFT_DMX_CROSSOVER ( int16_t )( 132 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) + 0.5f ) /* crossover bin between binwise and bandwise DMX */ +#define ITD_VAD_E_BAND_N_INIT 200000 + + +/*------------------------------------------------------------------------- + * Local function prototypes + *------------------------------------------------------------------------*/ + +static void stereo_dft_enc_open( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const int32_t input_Fs, const int16_t max_bwidth ); + +static void stereo_dft_enc_compute_prm( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *DFT_L, float *DFT_R, int16_t k_offset, int16_t flag_quant, const int16_t sp_aud_decision0, const int16_t vad_flag, float *bin_nrgL, float *bin_nrgR, float *dot_prod_nrg_ratio ); + +#ifdef DEBUG_MODE_DFT +static void stereo_dft_enc_get_nipd_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *pgIpd, const int16_t sp_aud_decision0, const float gainIPD ); +#else +static void stereo_dft_enc_get_nipd_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const int16_t sp_aud_decision0, const float gainIPD ); +#endif + +static void stereo_dft_enc_get_reverb_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *pPredGain, float *sub_nrg_DMX, const float *sub_nrg_L, const float *sub_nrg_R, const int16_t k_offset, const float *bin_nrgL, const float *bin_nrgR ); + +static float stereo_dft_gain_offset( const float c, const int16_t itd ); + +static void side_gain_mode_decision( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, int16_t encoded_ind_GR[], const int16_t sp_aud_decision0, const int32_t last_core_brate ); + +static void res_pred_gain_mode_decision( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, int16_t encoded_ind_pred_GR[], const int16_t k_offset, const int32_t last_core_brate ); + +static void stereo_dft_enc_calculate_nrg_for_icbwe( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const float *DMX, const int32_t input_Fs ); + +static void stereo_dft_enc_get_res_cod_mode_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const float res_nrg_all_curr, const float dmx_nrg_all_curr, float *res_dmx_ratio, float *frame_nrg_ratio ); + + +/*------------------------------------------------------------------------- + * stereo_dft_quantize_res_gains() + * + * Joint quantization routine for residual gains + *------------------------------------------------------------------------*/ + +void stereo_dft_quantize_res_gains( + const float *g, + const float *r, + float *gq, + float *rq, + int16_t *ig, + int16_t *ir ) +{ + int8_t sign; + int16_t min_ind, i; + float min_val, old_val, gg, rr; + int16_t level, index; + float ild; + + gg = *g; + + if ( rq != NULL ) + { + rr = *r; + } + else + { + rr = 0; + } + + if ( gg < 0 ) + { + gg = -gg; + sign = -1; + } + else + { + sign = 1; + } + +#ifdef DEBUGGING + /* the following assertions should be satisfied by the input data: */ + assert( 1 - gg * gg + EPSILON >= rr * rr / 2 ); + assert( gg <= 1 ); +#endif + + gg = min( gg, 1 - EPSILON ); + rr = min( rr, sqrtf( 1 - gg * gg ) - EPSILON ); + + /* we calculate the ILD ... */ + ild = 10.f * log10f( ( ( 1 + gg ) * ( 1 + gg ) + rr * rr ) / ( ( 1 - gg ) * ( 1 - gg ) + rr * rr ) ); + + /* ... which is truncated to the range [0,50] ... */ + ild = ild > 50 ? 50 : ild; + + /* ... and determine the optimal ILD quantization ...*/ + min_ind = 0; + old_val = fabsf( ild_q[0] - ild ); + + for ( i = 1; i < 16; i++ ) + { + min_val = fabsf( ild_q[i] - ild ); + if ( min_val < old_val ) + { + min_ind = i; + } + else + { + break; + } + old_val = min_val; + } + + /* ... which determines the quantization level: */ + level = min_ind; + + /* Now we look for the closest quantization point in the corresponding column of res_gain_energy_q*/ + old_val = FLT_MAX; + min_ind = 0; + index = -1; + for ( i = 0; i < 8; i++ ) + { + min_val = ( gg - dft_res_gains_q[8 * level + i][0] ) * ( gg - dft_res_gains_q[8 * level + i][0] ) + ( rr - dft_res_gains_q[8 * level + i][1] ) * ( rr - dft_res_gains_q[8 * level + i][1] ); + + min_ind = min_val < old_val ? i : min_ind; + old_val = min_val < old_val ? min_val : old_val; + + index = min_ind; + } + + /* and here we are: */ + if ( rq != NULL ) + { + *gq = dft_res_gains_q[8 * level + index][0] * sign; + *rq = dft_res_gains_q[8 * level + index][1]; + + *ir = index; + } + *ig = sign < 0 ? 15 - level : 15 + level; + + return; +} + +/*------------------------------------------------------------------------- + * stereo_dft_quantize_ipd() + * + * Quantize the IPD between [-PI, PI] on 3 or 4 bits + *------------------------------------------------------------------------*/ + +static void stereo_dft_quantize_ipd( + const float *in, + float *out, + int16_t *ind, + const int16_t bits ) +{ + int16_t max_ind; + float delta; + + if ( bits == 2 ) /* New 2-bit phase quantization for the highest frequency band only */ + { + delta = EVS_PI / 2.0f; + max_ind = 3; + } + else if ( bits == 3 ) + { + delta = EVS_PI / 4.f; + max_ind = 7; + } + else if ( bits == 4 ) + { + delta = EVS_PI / 8.f; + max_ind = 15; + } + else + { + delta = EVS_PI / 4.f; + max_ind = 7; + assert( 0 ); + } + + *ind = (int16_t) ( ( ( *in + EVS_PI ) / delta ) + 0.5f ); + + /*modulo 2*PI*/ + if ( *ind == max_ind + 1 ) + { + *ind = 0; + } + + /*Sanity check since no saturation can normally happen*/ + *ind = min( max( *ind, 0 ), max_ind ); + + *out = *ind * delta - EVS_PI; + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_create() + * + * Create DFT stereo handle + *------------------------------------------------------------------------*/ + +ivas_error stereo_dft_enc_create( + STEREO_DFT_ENC_DATA_HANDLE *hStereoDft, /* i/o: encoder DFT stereo handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t max_bwidth /* i : maximum encoded bandwidth */ +) +{ + STEREO_DFT_ENC_DATA_HANDLE hStereoDft_loc; + int16_t tmpS; + + if ( *hStereoDft != NULL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: DFT Stereo memory already allocated\n" ); + } + + if ( ( hStereoDft_loc = (STEREO_DFT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo\n" ) ); + } + + if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo Config\n" ) ); + } + + if ( ( hStereoDft_loc->hItd = (ITD_DATA_HANDLE) count_malloc( sizeof( ITD_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); + } + + hStereoDft_loc->hConfig->force_mono_transmission = 0; + + stereo_dft_config( hStereoDft_loc->hConfig, IVAS_24k4, &tmpS, &tmpS ); + stereo_dft_hybrid_ITD_flag( hStereoDft_loc->hConfig, input_Fs ); + stereo_dft_enc_open( hStereoDft_loc, input_Fs, max_bwidth ); + + *hStereoDft = hStereoDft_loc; + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_open() + * + * Initialize DFT stereo handle + *------------------------------------------------------------------------*/ + +static void stereo_dft_enc_open( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t max_bwidth /* i : maximum encoded bandwidth */ +) +{ + int16_t NFFT_inner; + float win[STEREO_DFT_OVL_MAX]; + + /*Sizes*/ + hStereoDft->N = (int16_t) ( STEREO_DFT_HOP_MAX_ENC * input_Fs / 48000 ); + assert( ( ( input_Fs / FRAMES_PER_SEC ) / hStereoDft->N ) == 1 ); + + /*Init. DFT sizes*/ + hStereoDft->NFFT = (int16_t) ( STEREO_DFT_N_MAX_ENC * input_Fs / 48000 ); + hStereoDft->dft_ovl = (int16_t) ( STEREO_DFT_OVL_MAX * input_Fs / 48000 ); + mdct_window_sine( win, input_Fs, hStereoDft->dft_ovl, FULL_OVERLAP, IVAS_CPE_DFT ); + + hStereoDft->win_ana_energy = (float) hStereoDft->N - hStereoDft->dft_ovl; + hStereoDft->win_ana_energy += 2 * sum_f( win, hStereoDft->dft_ovl ); + hStereoDft->win_ana_energy = hStereoDft->win_ana_energy / hStereoDft->NFFT; + set_f( hStereoDft->output_mem_dmx_32k, 0, STEREO_DFT_OVL_32k ); + + hStereoDft->dft_zp = (int16_t) ( STEREO_DFT_ZP_MAX_ENC * input_Fs / 48000 ); + + hStereoDft->dft_trigo_8k = dft_trigo_32k; + hStereoDft->dft_trigo_12k8 = dft_trigo_12k8; + hStereoDft->dft_trigo_16k = dft_trigo_32k; + hStereoDft->dft_trigo_32k = dft_trigo_32k; + + hStereoDft->win_ana_8k = win_ana_8k; + hStereoDft->win_ana_12k8 = win_ana_12k8; + hStereoDft->win_ana_16k = win_ana_16k; + hStereoDft->win_ana_32k = win_ana_32k; + + hStereoDft->win_8k = win_syn_8k; + hStereoDft->win_12k8 = win_syn_12k8; + hStereoDft->win_16k = win_syn_16k; + hStereoDft->win_32k = win_syn_32k; + + if ( input_Fs == 16000 ) + { + hStereoDft->dft_trigo = dft_trigo_32k; + hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; + hStereoDft->win_ana = win_ana_16k; + hStereoDft->win = win_syn_16k; + } + else if ( input_Fs == 32000 ) + { + hStereoDft->dft_trigo = dft_trigo_32k; + hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; + hStereoDft->win_ana = win_ana_32k; + hStereoDft->win = win_syn_32k; + } + else + { + assert( input_Fs == 48000 ); + hStereoDft->dft_trigo = dft_trigo_48k; + hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_48k_STEP; + hStereoDft->win_ana = win_ana_48k; + hStereoDft->win = win_syn_48k; + } + + hStereoDft->win_mdct_8k = win_mdct_8k; + + /*I/O Buffers*/ + set_zero( hStereoDft->output_mem_dmx, STEREO_DFT_OVL_MAX ); + set_zero( hStereoDft->output_mem_dmx_12k8, STEREO_DFT_OVL_12k8 ); + set_zero( hStereoDft->output_mem_dmx_16k, STEREO_DFT_OVL_16k ); + set_zero( hStereoDft->output_mem_dmx_16k_shb, STEREO_DFT_OVL_16k ); + set_zero( hStereoDft->output_mem_res_8k, STEREO_DFT_OVL_8k ); + + /*Bands: find the number of bands, Nyquist freq. is not taken into account*/ + NFFT_inner = STEREO_DFT_N_MAX_ENC * inner_frame_tbl[max_bwidth] / L_FRAME48k; + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->hConfig->band_res, NFFT_inner, ENC ); + hStereoDft->nbands_dmx = stereo_dft_band_config( hStereoDft->band_limits_dmx, 1, NFFT_inner, ENC ); + + /*Set configuration*/ + set_s( hStereoDft->band_res, hStereoDft->hConfig->band_res, STEREO_DFT_ENC_DFT_NB ); + if ( hStereoDft->hConfig->ada_wb_res_cod_mode && hStereoDft->NFFT == STEREO_DFT_N_16k_ENC ) + { + /* residual coding is only applied for 16 kHz sampling rate */ + set_s( hStereoDft->res_cod_mode, hStereoDft->hConfig->ada_wb_res_cod_mode, STEREO_DFT_ENC_DFT_NB ); + } + else + { + set_s( hStereoDft->res_cod_mode, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_ENC_DFT_NB ); + } + set_s( hStereoDft->res_pred_mode, hStereoDft->hConfig->res_pred_mode, STEREO_DFT_ENC_DFT_NB ); + + /* reset DFT stereo memories */ + stereo_dft_enc_reset( hStereoDft ); + + return; +} + +/*------------------------------------------------------------------------- + * stereo_dft_enc_reset() + * + * Reset DFT stereo memories + *------------------------------------------------------------------------*/ + +void stereo_dft_enc_reset( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft /* i/o: encoder stereo handle */ +) +{ + int16_t i; +#ifdef ITD_WINNER_GAIN_MODIFY + hStereoDft->noise_coherence = 0.0f; + hStereoDft->local_vad = 0; + hStereoDft->mus_flag = 2; + set_zero( hStereoDft->spd_L_noise, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hStereoDft->spd_R_noise, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hStereoDft->spd_L_noise_min, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hStereoDft->spd_R_noise_min, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hStereoDft->spd_L_noise_max, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hStereoDft->spd_R_noise_max, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hStereoDft->winner_gain_L, STEREO_DFT_N_32k_ENC / 2 ); + set_zero( hStereoDft->winner_gain_R, STEREO_DFT_N_32k_ENC / 2 ); + set_f( hStereoDft->spd_L_smooth_new, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); + set_f( hStereoDft->spd_R_smooth_new, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); +#endif + /*reset parameters*/ + set_zero( hStereoDft->side_gain, STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX ); + set_s( hStereoDft->side_gain_index_EC, 15, STEREO_DFT_BAND_MAX ); + set_s( hStereoDft->side_gain_index_ECDiff, 0, STEREO_DFT_BAND_MAX ); + set_s( hStereoDft->side_gain_index_ECprevious, 15, STEREO_DFT_BAND_MAX ); + hStereoDft->side_gain_counter = 0; + hStereoDft->side_gain_bitdiff_lp = STEREO_DFT_BITDIFF_INIT; + set_zero( hStereoDft->gipd, STEREO_DFT_ENC_DFT_NB ); + hStereoDft->gipd_index = 0; + set_zero( hStereoDft->res_pred_gain, STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX ); + set_s( hStereoDft->res_pred_index_EC, 0, STEREO_DFT_BAND_MAX ); + set_s( hStereoDft->res_pred_index_ECDiff, 0, STEREO_DFT_BAND_MAX ); + set_s( hStereoDft->res_pred_index_ECprevious, 0, STEREO_DFT_BAND_MAX ); + hStereoDft->res_pred_counter = 0; + set_zero( hStereoDft->past_nrgL, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); + set_zero( hStereoDft->past_nrgR, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); + set_zero( hStereoDft->past_dot_prod_real, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); + set_zero( hStereoDft->past_dot_prod_imag, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); + hStereoDft->nrg_past_pos = 0; + + hStereoDft->res_dmx_ratio_lt = 1.0f; + hStereoDft->hangover_cnt0 = 0; + hStereoDft->hangover_cnt1 = 0; + hStereoDft->dmx_res_all_prev = EPSILON; + hStereoDft->last_res_cod_mode_modify_flag = 0; + hStereoDft->res_cod_sw_flag = 0; + hStereoDft->switch_fade_factor = 0.5f; + hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1] = STEREO_DFT_RES_COD_1kHz; + for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) + { + hStereoDft->res_cod_NRG_M[i] = 0; + hStereoDft->res_cod_NRG_S[i] = 0; + } + hStereoDft->old_snr = 0.f; + + + hStereoDft->reverb_flag = 0; + set_zero( hStereoDft->pre_sub_nrg_DMX, STEREO_DFT_BAND_MAX ); + hStereoDft->diff_l_h_sm = 0.0f; + hStereoDft->diff_r_h_sm = 0.0f; + hStereoDft->prev_fac2 = 1.0f; + + set_zero( hStereoDft->res_pred_gain_f, STEREO_DFT_BAND_MAX ); + + /*misc*/ + hStereoDft->no_ipd_flag = 1; /* Initialization of the no IPD variables */ + hStereoDft->prev_no_ipd_flag = 1; + hStereoDft->no_ipd_cnt = 0; + hStereoDft->no_ipd_cnt1 = 0; + hStereoDft->attackPresent = 0; + hStereoDft->wasTransient = 0; + hStereoDft->gainIPD_sm = 1.f; + + + hStereoDft->voicing_lt = 0; + + hStereoDft->flip_sign = 1; + + hStereoDft->sfm = 0.f; + hStereoDft->sum_dot_prod_real = 0.f; + hStereoDft->sum_dot_prod_img = 0.f; + + /*Coherence*/ + set_f( hStereoDft->xspec_smooth, 1.0f, STEREO_DFT_N_32k_ENC ); + set_f( hStereoDft->Spd_L_smooth, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); + set_f( hStereoDft->Spd_R_smooth, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); + + hStereoDft->coh_fade_counter = 0; + + /* Xtalk classifier */ + hStereoDft->hItd->prev_m1 = 0; + hStereoDft->hItd->prev_m2 = 0; + hStereoDft->hItd->prev_itd1 = 0; + hStereoDft->hItd->prev_itd2 = 0; + +#ifdef DEBUG_MODE_DFT + hStereoDft->verbose = 1; +#endif + + stereo_enc_itd_init( hStereoDft->hItd ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_enc_itd_init() + * + * initialize ITD struct + *------------------------------------------------------------------------*/ + +void stereo_enc_itd_init( + ITD_DATA_HANDLE hItd /* i/o: encoder ITD handle */ +) +{ + hItd->prev_itd = 0; + set_zero( hItd->itd, STEREO_DFT_ENC_DFT_NB ); + set_zero( hItd->deltaItd, STEREO_DFT_ENC_DFT_NB ); + set_s( hItd->td_itd, 0, STEREO_DFT_ENC_DFT_NB ); + set_s( hItd->td_itd_32k, 0, STEREO_DFT_ENC_DFT_NB ); + set_s( hItd->itd_index, 0, STEREO_DFT_ENC_DFT_NB ); + set_zero( hItd->xcorr_smooth, STEREO_DFT_N_32k_ENC ); + hItd->lp_phat_peak = 0.f; + hItd->itd_hangover = 0; + hItd->itd_cnt = 0; + hItd->prev_sum_nrg_L_lb = 0.f; + set_zero( hItd->prev_xcorr_lb, STEREO_DFT_XCORR_LB_MAX ); + set_f( hItd->E_band_n, (float) ITD_VAD_E_BAND_N_INIT, STEREO_DFT_ITD_VAD_BAND_NUM ); + hItd->vad_frm_cnt = 0; + hItd->pre_vad = 0; + hItd->itd_nonzero_cnt = 0; + set_zero( hItd->acorr_L, STEREO_DFT_BAND_MAX ); + set_zero( hItd->acorr_R, STEREO_DFT_BAND_MAX ); + hItd->cohSNR = 15.f; + hItd->itd_thres = 0.f; + hItd->valid_itd_cnt = 0; + + hItd->detected_itd_flag = 0; + hItd->itd_tracking = 0; + hItd->prev_max = 0.f; + hItd->prev_index = 0; + hItd->prev_avg_max = 0.f; + hItd->currFlatness = 0.f; + + /* Xtalk classifier */ + hItd->prev_m1 = 0; + hItd->prev_m2 = 0; + hItd->prev_itd1 = 0; + hItd->prev_itd2 = 0; + + return; +} + + +/*-------------------------------------------------------------------------- + * stereo_dft_enc_update() + * + * Update DFT stereo memories for new frame + *--------------------------------------------------------------------------*/ + +void stereo_dft_enc_update( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ + const int16_t max_bwidth /* i : maximum encoded bandwidth */ +#ifdef DEBUG_MODE_DFT + , + const int16_t res_cod_bits +#endif +) +{ + int16_t i, k_offset; + int16_t NFFT_inner; + + /* Initialization */ + k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ + + /* Update the parameters and serial */ + for ( i = 0; i < k_offset * STEREO_DFT_BAND_MAX; i++ ) + { + hStereoDft->side_gain[i] = hStereoDft->side_gain[STEREO_DFT_BAND_MAX + i]; + hStereoDft->res_pred_gain[i] = hStereoDft->res_pred_gain[STEREO_DFT_BAND_MAX + i]; + } + + for ( i = 0; i < k_offset; i++ ) + { + hStereoDft->gipd[i] = hStereoDft->gipd[i + 1]; + } + + /*Update configurations*/ + for ( i = 0; i < k_offset; i++ ) + { + hStereoDft->band_res[i] = hStereoDft->band_res[i + 1]; + hStereoDft->hItd->itd[i] = hStereoDft->hItd->itd[i + 1]; + hStereoDft->res_cod_mode[i] = hStereoDft->res_cod_mode[i + 1]; + hStereoDft->res_pred_mode[i] = hStereoDft->res_pred_mode[i + 1]; + } + + /*Set new configurations*/ + hStereoDft->band_res[k_offset] = hStereoDft->hConfig->band_res; + + if ( hStereoDft->hConfig->ada_wb_res_cod_mode && hStereoDft->NFFT == STEREO_DFT_N_16k_ENC ) + { + hStereoDft->res_cod_mode[k_offset] = hStereoDft->hConfig->ada_wb_res_cod_mode; + } + else + { + hStereoDft->res_cod_mode[k_offset] = hStereoDft->hConfig->res_cod_mode; + } + hStereoDft->res_pred_mode[k_offset] = hStereoDft->hConfig->res_pred_mode; + + hStereoDft->last_res_cod_mode_modify_flag = hStereoDft->res_cod_sw_flag; + hStereoDft->res_cod_sw_flag = 0; + + /* update band limits in case of rate switching assuming max_bwidth as BWD output not yet know here */ + NFFT_inner = STEREO_DFT_N_MAX_ENC * inner_frame_tbl[max_bwidth] / L_FRAME48k; + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->hConfig->band_res, NFFT_inner, ENC ); + hStereoDft->nbands_dmx = stereo_dft_band_config( hStereoDft->band_limits_dmx, 1, NFFT_inner, ENC ); + + /*Compute main parameters*/ + hStereoDft->gipd_band_max = dft_band_ipd[hStereoDft->hConfig->band_res][3]; + hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->res_cod_mode[k_offset]]; + hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * hStereoDft->N / (float) ( hStereoDft->NFFT ) ); + hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); + hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); + +#ifdef DEBUG_MODE_DFT + /*Compute the expected bitrate*/ + if ( hStereoDft->verbose ) + { + int16_t tmp, nbits, N_div_param, bits_itd; + int16_t input_frame = hStereoDft->N; + int32_t input_Fs; + input_Fs = input_frame * FRAMES_PER_SEC; + + hStereoDft->verbose = 0; + + /*init*/ + N_div_param = 1; + + nbits = 0; /*header: 0 bits*/ + + fprintf( stderr, "Stereo DFT\n" ); + + /*ITD*/ + tmp = 1 + STEREO_DFT_ITD_NBITS; + nbits += 1; + bits_itd = STEREO_DFT_ITD_NBITS; + fprintf( stderr, "\t ITD: %.2f kbps\n", tmp * input_Fs / ( 1000.f * input_frame ) ); + + /*SIDE_GAIN*/ + tmp = hStereoDft->nbands * 5 * N_div_param; + nbits += tmp; + fprintf( stderr, "\t SIDE_GAIN: %.2f kbps\n", tmp * input_Fs / ( 1000.f * input_frame ) ); + + + /*residual coding prediction*/ + tmp = 0; + if ( hStereoDft->hConfig->res_pred_mode ) + { + tmp = ( hStereoDft->nbands - hStereoDft->res_pred_band_min ) * 3 * N_div_param; + fprintf( stderr, "\t Res pred.: %.2f kbps\n", tmp * input_Fs / ( 1000.f * input_frame ) ); + } + nbits += max( tmp, bits_itd ); + + /*residual coding*/ + if ( hStereoDft->hConfig->res_cod_mode ) + { + tmp = res_cod_bits; + nbits += tmp; + fprintf( stderr, "\t Res cod.: %.2f kbps\n", tmp * input_Fs / ( 1000.f * input_frame ) ); + } + + fprintf( stderr, "\t Total: %.2f kbps\n", nbits * input_Fs / ( 1000.f * input_frame ) ); + } +#endif /*DEBUGGING*/ + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_destroy() + * + * destroy DFT stereo handle + *-------------------------------------------------------------------------*/ + +void stereo_dft_enc_destroy( + STEREO_DFT_ENC_DATA_HANDLE *hStereoDft /* i/o: encoder DFT stereo handle */ +) +{ + if ( ( *hStereoDft )->hConfig != NULL ) + { + count_free( ( *hStereoDft )->hConfig ); + ( *hStereoDft )->hConfig = NULL; + } + + if ( ( *hStereoDft )->hItd != NULL ) + { + count_free( ( *hStereoDft )->hItd ); + ( *hStereoDft )->hItd = NULL; + } + + count_free( *hStereoDft ); + *hStereoDft = NULL; + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_analyze() + * + * DFT analysis on a 20ms frame + *-------------------------------------------------------------------------*/ + +void stereo_dft_enc_analyze( + Encoder_State **sts, /* i/o: encoder state structure */ + const int16_t n_channels, /* i : number of input channels */ + const int16_t input_frame, /* i : input frame length */ + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: encoder MDCT stereo handle */ + float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC], /* o : DFT buffers */ + float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ +) +{ + int16_t i, n; + float *pDFT_L, *pDFT_R; + int16_t N, NFFT; + int16_t dft_zp, dft_ovl; + const float *pWin, *pTrigo; + int16_t offset; + float *input[CPE_CHANNELS], *mem[CPE_CHANNELS]; + float trigo_enc[STEREO_DFT_N_MAX_ENC / 2 + 1]; + int16_t trigo_step; + + + wmops_sub_start( "DFT_analysis" ); + + /*-----------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + for ( n = 0; n < n_channels; n++ ) + { + input[n] = sts[n]->input; + mem[n] = input_mem[n]; + } + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp[1024]; + + /*fcs: stereo side info is only simulated */ + for ( i = 0; i < input_frame; i++ ) + { + tmp[i] = (int16_t) ( input[0][i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, "./res/stereo_dft_ch0_input.pcm" ); + for ( i = 0; i < input_frame; i++ ) + { + tmp[i] = (int16_t) ( input[1][i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, "./res/stereo_dft_ch1_input.pcm" ); + } +#endif + + /*-----------------------------------------------------------------* + * DFT Analysis + *-----------------------------------------------------------------*/ + + pDFT_L = DFT[0]; + pDFT_R = DFT[1]; + + if ( hStereoDft != NULL ) + { + N = hStereoDft->N; + NFFT = hStereoDft->NFFT; + dft_zp = hStereoDft->dft_zp; + dft_ovl = hStereoDft->dft_ovl; + offset = -dft_ovl; + pWin = hStereoDft->win_ana; + pTrigo = hStereoDft->dft_trigo; + trigo_step = hStereoDft->dft_trigo_step; + } + else + { + N = hStereoMdct->hDft_ana->N; + NFFT = hStereoMdct->hDft_ana->NFFT; + dft_zp = hStereoMdct->hDft_ana->dft_zp; + dft_ovl = hStereoMdct->hDft_ana->dft_ovl; + offset = -dft_ovl; + pWin = hStereoMdct->hDft_ana->win_ana; + pTrigo = hStereoMdct->hDft_ana->dft_trigo; + trigo_step = hStereoMdct->hDft_ana->dft_trigo_step; + } + + for ( i = 0; i < NFFT / 4; i++ ) + { + trigo_enc[i] = pTrigo[i * trigo_step]; + trigo_enc[NFFT / 2 - i] = pTrigo[i * trigo_step]; + } + trigo_enc[NFFT / 4] = pTrigo[NFFT / 4 * trigo_step]; + + /*Forwards FFT: L and R*/ + /*zero padding*/ + for ( i = 0; i < dft_zp; i++ ) + { + pDFT_L[i] = 0.f; + pDFT_L[NFFT - 1 - i] = 0.f; + + pDFT_R[i] = 0.f; + pDFT_R[NFFT - 1 - i] = 0.f; + } + + /*overlapping parts*/ + for ( i = 0; i < dft_ovl; i++ ) + { + pDFT_L[dft_zp + i] = mem[0][i] * pWin[i]; + pDFT_L[dft_zp + N + dft_ovl - 1 - i] = input[0][offset + N + dft_ovl - 1 - i] * pWin[i]; + + pDFT_R[dft_zp + i] = mem[1][i] * pWin[i]; + pDFT_R[dft_zp + N + dft_ovl - 1 - i] = input[1][offset + N + dft_ovl - 1 - i] * pWin[i]; + } + + /*middle part*/ + for ( i = 0; i < N - dft_ovl; i++ ) + { + pDFT_L[dft_zp + dft_ovl + i] = input[0][offset + dft_ovl + i]; + + pDFT_R[dft_zp + dft_ovl + i] = input[1][offset + dft_ovl + i]; + } + + rfft( pDFT_L, trigo_enc, NFFT, -1 ); + rfft( pDFT_R, trigo_enc, NFFT, -1 ); + + /* update pointers to overlap memory */ + for ( n = 0; n < n_channels; n++ ) + { + mem[n] = &input[n][N - dft_ovl]; + } + +#ifdef DEBUG_MODE_DFT + if ( hStereoDft != NULL && hStereoDft->hConfig->hybrid_itd_flag && hStereoDft->hConfig->itd_mode && hStereoDft->hItd->td_itd[STEREO_DFT_OFFSET] ) +#else + if ( hStereoDft != NULL && hStereoDft->hConfig->hybrid_itd_flag && hStereoDft->hItd->td_itd[STEREO_DFT_OFFSET] ) +#endif + { + for ( n = 0; n < n_channels; n++ ) + { + mvr2r( hStereoDft->input_mem_itd[n], input_mem[n], dft_ovl ); + } + } + else + { + for ( n = 0; n < n_channels; n++ ) + { + mvr2r( input[n] + input_frame - dft_ovl, input_mem[n], dft_ovl ); + } + } + + wmops_sub_end(); + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_synthesize() + * + * Inverse DFT on a 20ms frame + *-------------------------------------------------------------------------*/ + +float stereo_dft_enc_synthesize( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ + float *output, /* o : output synthesis */ + const int16_t chan, /* i : channel number */ + const int32_t input_Fs, /* i : input sampling rate */ + const int32_t output_sampling_rate, /* i : output sampling rate */ + const int16_t L_frame /* i : frame length at internal Fs */ +) +{ + int16_t i, j, sign; + float *pDFT_in; + int16_t offset, NFFT, N, ovl, zp; + float fac; + float *mem; + const float *trigo, *win, *win_ana; + float tmp[STEREO_DFT_N_MAX_ENC]; + float nrg; + float trigo_enc[STEREO_DFT_N_MAX_ENC / 2 + 1]; + int16_t trigo_step; + + + /*-----------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + if ( L_frame > 0 ) + { + assert( ( output_sampling_rate == 16000 ) && "High-band generation only possible at 16kHz!" ); + } + nrg = 0.f; + + hStereoDft->icbweRefEner = 0; + hStereoDft->lbEner = 0; + + if ( chan == 0 ) + { + pDFT_in = hStereoDft->DFT[0]; + } + else + { + pDFT_in = hStereoDft->DFT[1]; + } + + if ( output_sampling_rate == input_Fs ) + { + assert( chan == 0 ); + + NFFT = hStereoDft->NFFT; + fac = 1.f; + N = hStereoDft->N; + ovl = hStereoDft->dft_ovl; + zp = hStereoDft->dft_zp; + trigo = hStereoDft->dft_trigo; + trigo_step = hStereoDft->dft_trigo_step; + if ( L_frame > 0 ) + { + mem = hStereoDft->output_mem_dmx_16k_shb; + } + else + { + mem = hStereoDft->output_mem_dmx; + } + win = hStereoDft->win; + win_ana = hStereoDft->win_ana; + + wmops_sub_start( "DFT_synth_fs" ); + } + else if ( output_sampling_rate == INT_FS_12k8 ) + { + assert( chan == 0 ); + + NFFT = STEREO_DFT_N_12k8_ENC; + N = STEREO_DFT_HOP_12k8_ENC; + zp = STEREO_DFT_ZP_12k8_ENC; + fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); + ovl = STEREO_DFT_OVL_12k8; + trigo = hStereoDft->dft_trigo_12k8; + trigo_step = STEREO_DFT_TRIGO_SRATE_12k8_STEP; + mem = hStereoDft->output_mem_dmx_12k8; + win = hStereoDft->win_12k8; + win_ana = hStereoDft->win_ana_12k8; + + wmops_sub_start( "DFT_synth_12k8" ); + } + else if ( output_sampling_rate == 16000 ) + { + assert( chan == 0 ); + + NFFT = STEREO_DFT_N_16k_ENC; + N = STEREO_DFT_HOP_16k_ENC; + zp = STEREO_DFT_ZP_16k_ENC; + fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); + ovl = STEREO_DFT_OVL_16k; + trigo = hStereoDft->dft_trigo_16k; + trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; + if ( L_frame > 0 ) + { + mem = hStereoDft->output_mem_dmx_16k_shb; + + wmops_sub_start( "DFT_synth_16k_shb" ); + } + else + { + mem = hStereoDft->output_mem_dmx_16k; + + wmops_sub_start( "DFT_synth_16k" ); + } + win = hStereoDft->win_16k; + win_ana = hStereoDft->win_ana_16k; + } + else if ( output_sampling_rate == 32000 ) + { + assert( chan == 0 ); + + NFFT = STEREO_DFT_N_32k_ENC; + N = STEREO_DFT_HOP_32k_ENC; + zp = STEREO_DFT_ZP_32k_ENC; + fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); + ovl = STEREO_DFT_OVL_32k; + trigo = hStereoDft->dft_trigo_32k; + trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; + mem = hStereoDft->output_mem_dmx_32k; + win = hStereoDft->win_32k; + win_ana = hStereoDft->win_ana_32k; + + wmops_sub_start( "DFT_synth_32k" ); + } + else if ( output_sampling_rate == 8000 ) + { + assert( chan == 1 ); + + NFFT = STEREO_DFT_N_8k_ENC; + N = STEREO_DFT_HOP_8k_ENC; + zp = STEREO_DFT_ZP_8k_ENC; + fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); + ovl = STEREO_DFT_OVL_8k; + trigo = hStereoDft->dft_trigo_8k; + trigo_step = STEREO_DFT_TRIGO_SRATE_8k_STEP; + mem = hStereoDft->output_mem_res_8k; + win = hStereoDft->win_8k; + win_ana = hStereoDft->win_ana_8k; + + wmops_sub_start( "DFT_synth_8k" ); + } + else + { + assert( 0 && "DFT stereo: sampling rate not supported!" ); + NFFT = -1; /* to avoid compilation warning */ + fac = -1; /* to avoid compilation warning */ + N = -1; /* to avoid compilation warning */ + zp = -1; /* to avoid compilation warning */ + win = NULL; /* to avoid compilation warning */ + trigo = NULL; /* to avoid compilation warning */ + trigo_step = -1; /* to avoid compilation warning */ + ovl = -1; /* to avoid compilation warning */ + mem = NULL; /* to avoid compilation warning */ + win_ana = NULL; /* to avoid compilation warning */ + } + + offset = 0; + + for ( i = 0; i < NFFT / 4; i++ ) + { + trigo_enc[i] = trigo[i * trigo_step]; + trigo_enc[NFFT / 2 - i] = trigo[i * trigo_step]; + } + trigo_enc[NFFT / 4] = trigo[NFFT / 4 * trigo_step]; + + /*-----------------------------------------------------------------* + * Synthesizing & resampling + *-----------------------------------------------------------------*/ + + offset = -ovl; + + if ( L_frame == L_FRAME || L_frame == L_FRAME16k ) + { + for ( i = (int16_t) ( 200 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i < (int16_t) ( 400 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i++ ) + { + hStereoDft->icbweRefEner += pDFT_in[2 * i] * pDFT_in[2 * i] + pDFT_in[2 * i + 1] * pDFT_in[2 * i + 1]; + } + for ( i = 0; i < (int16_t) ( 200 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i++ ) + { + hStereoDft->lbEner += pDFT_in[2 * i] * pDFT_in[2 * i] + pDFT_in[2 * i + 1] * pDFT_in[2 * i + 1]; + } + hStereoDft->icbweRefEner *= fac; + hStereoDft->lbEner *= fac; + } + + /*Flip?*/ + if ( L_frame == L_FRAME ) + { + /* 6 to 14 kHz SHB target signal*/ + j = 2; + set_zero( tmp, STEREO_DFT_N_MAX_ENC ); + sign = hStereoDft->flip_sign; + + for ( i = (int16_t) ( 350 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i >= (int16_t) 150 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i-- ) + { + /* alternate sign between frames for even starting index */ + tmp[j++] = sign * pDFT_in[2 * i] * fac; + tmp[j++] = -sign * pDFT_in[2 * i + 1] * fac; + } + hStereoDft->flip_sign = -sign; + + for ( i = 0; i <= (int16_t) 100 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i++ ) + { + nrg += tmp[2 * i] * tmp[2 * i]; + nrg += tmp[2 * i + 1] * tmp[2 * i + 1]; + } + } + else if ( L_frame == L_FRAME16k ) + { + /* 7.5 - 15.5 kHz SHB target signal*/ + j = 2; + set_zero( tmp, STEREO_DFT_N_MAX_ENC ); + for ( i = (int16_t) ( 400 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ) - 1; i >= (int16_t) 200 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i-- ) + { + tmp[j++] = pDFT_in[2 * i] * fac; + tmp[j++] = -1.f * pDFT_in[2 * i + 1] * fac; + } + + for ( i = 0; i <= (int16_t) 100 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i++ ) + { + nrg += tmp[2 * i] * tmp[2 * i]; + nrg += tmp[2 * i + 1] * tmp[2 * i + 1]; + } + } + else if ( fac != 1.f ) + { + /*Copy and scale*/ + tmp[0] = pDFT_in[0] * fac; + tmp[1] = 0.f; + for ( i = 2; i < NFFT; i++ ) + { + tmp[i] = pDFT_in[i] * fac; + } + + if ( fac < 1.f ) + { + tmp[1] = 0.f; /*Nyquist is set to 0*/ + tmp[0] = 0.f; /*DC is set to 0*/ + } + } + else + { + for ( i = 0; i < NFFT; i++ ) + { + tmp[i] = pDFT_in[i]; + } + } + + /*Reconstruct */ + /*IFFT*/ + rfft( tmp, trigo_enc, NFFT, +1 ); + + for ( i = 0; i < ovl; i++ ) + { + output[offset + i] = mem[i] + tmp[zp + i] * win[i]; + mem[i] = tmp[zp + N + i] * win[ovl - 1 - i]; + } + + /*Middle->Copy*/ + for ( i = 0; i < N - ovl; i++ ) + { + output[offset + ovl + i] = tmp[zp + ovl + i]; + } + + /*-----------------------------------------------------------------* + * Lookahead: redress signal + *-----------------------------------------------------------------*/ + + for ( i = 0; i < ovl; i++ ) + { + float ifft_deviation = tmp[zp + N + ovl]; + output[offset + N + i] = ( tmp[zp + N + i] - ifft_deviation ) / win_ana[ovl - 1 - i] + ifft_deviation; + } + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp_dbg[L_FRAME48k]; +#ifdef DEBUG_STEREO_DFT_NOCORE + static float mem_win[2][STEREO_DFT_OVL_MAX] = { { 0 }, { 0 } }; +#endif + char file_name[50] = { 0 }; + int16_t input_frame = N; + int16_t b = 0; + offset = -ovl; + b = L_frame; + +#ifdef DEBUG_STEREO_DFT_NOCORE + /*Simulate the un-windowing process which breaks partly TDAC of MDCT*/ + if ( ( ( chan == 1 ) || ( output_sampling_rate == input_Fs ) ) && ( L_frame <= 0 ) ) + { + float tmp_f[L_FRAME48k + STEREO_DFT_OVL_MAX]; + float MDCT[L_FRAME48k]; + + /*window signal*/ + for ( i = 0; i < ovl; i++ ) + { + tmp_f[i] = output[offset + i] * sqrt( win_ana[i] * win[i] ); + tmp_f[input_frame + i] = output[offset + input_frame + i] * sqrt( win_ana[ovl - 1 - i] * win[ovl - 1 - i] ); + } + /*Middle->Copy*/ + for ( ; i < input_frame; i++ ) + { + tmp_f[i] = output[offset + i]; + } + + /*MDCT -IMDCT (inject Time domain aliasing)*/ + TCX_MDCT( tmp_f, MDCT, ovl, input_frame - ovl, ovl, IVAS_CPE_DFT ); + TCX_MDCT_Inverse( MDCT, tmp_f, ovl, input_frame - ovl, ovl, IVAS_CPE_DFT ); + + /*OLA*/ + /*overlapping parts*/ + for ( i = 0; i < ovl; i++ ) + { + tmp_f[i] = mem_win[chan][i] + tmp_f[i] * sqrt( win_ana[i] * win[i] ); + mem_win[chan][i] = tmp_f[input_frame + i] * sqrt( win_ana[ovl - 1 - i] * win[ovl - 1 - i] ); + } + for ( i = 0; i < input_frame; i++ ) + { + tmp_dbg[i] = (int16_t) ( tmp_f[i] + 0.5f ); + } + } + else +#endif + { + for ( i = 0; i < input_frame; i++ ) + { + tmp_dbg[i] = (int16_t) ( output[offset + i] + 0.5f ); + } + } + + sprintf( file_name, "./res/stereo_dft_enc_M_S_%d_c%d_b%d.pcm", output_sampling_rate, chan, b ); + dbgwrite( tmp_dbg, sizeof( int16_t ), input_frame, 1, file_name ); + } +#endif + + wmops_sub_end(); + return ( nrg ); +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_process() + * + * DFT-based stereo main processing function: + * 1) compute/encode stereo parameters + * 2) Mid/Side computation + *-------------------------------------------------------------------------*/ + +void stereo_dft_enc_process( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int16_t input_frame /* i : input frame length */ +) +{ + int16_t i, j, b; + float *pDFT_L, *pDFT_R; + float *pDFT_DMX; + float *pDFT_RES; + int16_t k_offset; + float *pgIpd; + float *pSideGain; + float c, alpha, g; + float wL, wR, wS; + float tmp; + float s, c1, s1; + float fac_att; + STEREO_DFT_ENC_DATA_HANDLE hStereoDft; + float DFT_DMX[STEREO_DFT_N_MAX_ENC]; + float DFT_RES[STEREO_DFT_N_8k_ENC]; + int32_t input_Fs; + float bin_nrgL[STEREO_DFT_N_MAX_ENC]; + float bin_nrgR[STEREO_DFT_N_MAX_ENC]; + float *pNrgL, *pNrgR; + float res_nrg_all_curr, dmx_nrg_all_curr; + float res_dmx_ratio, frame_nrg_ratio; + float dot_prod_nrg_ratio[STEREO_DFT_BAND_MAX]; /* contains only dot product for higher bands */ + float sum_nrg_L2, sum_nrg_R2, dot_prod_real2; + float sum_nrg_Mid, sum_abs; + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + input_Fs = input_frame * FRAMES_PER_SEC; + + hStereoDft = hCPE->hStereoDft; + + wL = 0; /* avoid compilation warning */ + wR = 0; /* avoid compilation warning */ + + /* Initialization */ + k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ + + hStereoDft->gipd_band_max = dft_band_ipd[hStereoDft->band_res[k_offset]][3]; + hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; + hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * input_frame / (float) ( hStereoDft->NFFT ) ); + hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); + + hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); + +#ifdef DEBUG_MODE_DFT + dbgwrite( &( hStereoDft->nbands ), sizeof( int16_t ), 1, 1, "./res/stereo_dft_nbands.dat" ); +#endif + + hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[0]; + hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[1]; + + /*------------------------------------------------------------------* + * Compute stereo parameters + *-----------------------------------------------------------------*/ + + /*ITD in Frequency domain*/ + fac_att = 1.0f; + + pDFT_L = hStereoDft->DFT[0]; + pDFT_R = hStereoDft->DFT[1]; + +#ifdef DEBUG_MODE_DFT + if ( hStereoDft->hConfig->itd_mode ) +#endif + { + stereo_dft_enc_compute_itd( hCPE, pDFT_L, pDFT_R, k_offset, input_frame, bin_nrgL, bin_nrgR ); + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + return; + } + + if ( hStereoDft->hItd->deltaItd[k_offset] != 0 && hStereoDft->hConfig->dmx_active ) + { + /*time shift channels*/ + alpha = -2.0f * EVS_PI * hStereoDft->hItd->deltaItd[k_offset] / hStereoDft->NFFT; + c = 1.f; /*cos(0)*/ + s = 0.f; /*sin(0)*/ + c1 = cosf( alpha ); + s1 = sinf( alpha ); + + if ( alpha >= 0 ) + { + for ( i = 1; i < hStereoDft->NFFT / 2; i++ ) + { + tmp = s * c1 + c * s1; + c = c * c1 - s * s1; + s = tmp; + + /*time shift of L*/ + tmp = pDFT_L[2 * i] * c - pDFT_L[2 * i + 1] * s; + pDFT_L[2 * i + 1] = pDFT_L[2 * i] * s + pDFT_L[2 * i + 1] * c; + pDFT_L[2 * i] = tmp; + } + } + else + { + for ( i = 1; i < hStereoDft->NFFT / 2; i++ ) + { + tmp = s * c1 + c * s1; + c = c * c1 - s * s1; + s = tmp; + + /*time shift of R*/ + tmp = pDFT_R[2 * i] * c + pDFT_R[2 * i + 1] * s; + pDFT_R[2 * i + 1] = -pDFT_R[2 * i] * s + pDFT_R[2 * i + 1] * c; + pDFT_R[2 * i] = tmp; + } + } + + if ( fabsf( hStereoDft->hItd->deltaItd[k_offset] * 32000.f / input_Fs ) > 80.0f ) + { + fac_att = min( 1.0f, max( 0.2f, 2.6f - 0.02f * fabsf( hStereoDft->hItd->deltaItd[1] ) * 32000.f / input_Fs ) ); + } + } + + /* compute remaining binwise energies for FB mode (ITD function only computes energies up to 16 kHz) */ + for ( i = STEREO_DFT_N_32k_ENC / 2; i < hStereoDft->NFFT / 2; i++ ) + { + bin_nrgL[i] = pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; + bin_nrgR[i] = pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; + } + } +#ifdef DEBUG_MODE_DFT + else + { + /* no ITD computation, get binwise energies here */ + + for ( i = 0; i < hStereoDft->NFFT / 2; i++ ) + { + bin_nrgL[i] = pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; + bin_nrgR[i] = pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; + } + } +#endif + + /* DFT stereo parameters */ + stereo_dft_enc_compute_prm( hStereoDft, pDFT_L, pDFT_R, k_offset, 1, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->vad_flag, bin_nrgL, bin_nrgR, dot_prod_nrg_ratio ); + + /*----------------------------------------------------------------* + * UNCLR classifier (detection of uncorrelated L and R channels) + *----------------------------------------------------------------*/ + + unclr_classifier_dft( hCPE ); + + /*------------------------------------------------------------------* + * Channel mapping: computation of DMX and RES + *-----------------------------------------------------------------*/ +#ifdef DEBUG_MODE_DFT + { + int16_t tmp_dbg = (int16_t) ( 100 * fac_att ); + dbgwrite( &tmp_dbg, sizeof( int16_t ), 1, 1, "./res/stereo_dft_enc_facAtt.pcm" ); + } +#endif + + res_nrg_all_curr = EPSILON; + dmx_nrg_all_curr = EPSILON; + + pDFT_DMX = DFT_DMX; + pDFT_RES = DFT_RES; + pNrgL = bin_nrgL; + pNrgR = bin_nrgR; + + set_zero( pDFT_DMX, STEREO_DFT_N_MAX_ENC ); + set_zero( pDFT_RES, STEREO_DFT_N_8k_ENC ); + + pgIpd = hStereoDft->gipd + k_offset; + pSideGain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; + + if ( hStereoDft->hConfig->dmx_active ) + { + /*Active DMX*/ + alpha = 0; /* to avoid compilation warning */ + g = 1.f; + + /*Apply active DMX*/ + pDFT_DMX[0] = 0.f; + pDFT_RES[0] = 0.f; + for ( b = 0; b < hStereoDft->nbands_dmx; b++ ) + { + g = pSideGain[b]; + + if ( pgIpd[0] != 0.f ) + { + c = cosf( pgIpd[0] ); + s = sinf( pgIpd[0] ); + for ( i = hStereoDft->band_limits_dmx[b]; i < hStereoDft->band_limits_dmx[b + 1]; i++ ) + { + /*rotate L*/ + tmp = pDFT_L[2 * i] * c + pDFT_L[2 * i + 1] * s; + pDFT_L[2 * i + 1] = pDFT_L[2 * i + 1] * c - pDFT_L[2 * i] * s; + pDFT_L[2 * i] = tmp; + } + } + + if ( b < hStereoDft->res_cod_band_max ) + { +#ifdef DEBUGGING + assert( hStereoDft->nbands == hStereoDft->nbands_dmx && "Don't use coarser stereo parameter resolution for residual coding bitrates!" ); +#endif +#ifdef DEBUG_MODE_DFT + dbgwrite( &g, sizeof( float ), 1, 1, "./res/stereo_dft_enc_g.pcm" ); + dbgwrite( &alpha, sizeof( float ), 1, 1, "./res/stereo_dft_enc_alpha.pcm" ); +#endif + + /*Get the previous frame energy*/ + if ( hStereoDft->hConfig->ada_wb_res_cod_mode ) + { + /*Calculate the energy of RES and DMX*/ + /* 90% of old frame ... */ + dmx_nrg_all_curr += hStereoDft->res_cod_NRG_M[b] * 0.9f; + res_nrg_all_curr += hStereoDft->res_cod_NRG_S[b] * 0.9f; + } + hStereoDft->res_cod_NRG_M[b] = EPSILON; + hStereoDft->res_cod_NRG_S[b] = EPSILON; + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + pDFT_DMX[2 * i] = ( pDFT_L[2 * i] + pDFT_R[2 * i] ) * 0.5f; + pDFT_DMX[2 * i + 1] = ( pDFT_L[2 * i + 1] + pDFT_R[2 * i + 1] ) * 0.5f; + + pDFT_RES[2 * i] = ( pDFT_L[2 * i] - pDFT_R[2 * i] ) * 0.5f; + pDFT_RES[2 * i + 1] = ( pDFT_L[2 * i + 1] - pDFT_R[2 * i + 1] ) * 0.5f; + + /*Prediction of RES with DMX*/ + pDFT_RES[2 * i] = pDFT_RES[2 * i] - g * pDFT_DMX[2 * i]; + pDFT_RES[2 * i + 1] = pDFT_RES[2 * i + 1] - g * pDFT_DMX[2 * i + 1]; + + pDFT_RES[2 * i] *= fac_att; + pDFT_RES[2 * i + 1] *= fac_att; + + /*Energy of the DMX and RES*/ + hStereoDft->res_cod_NRG_M[b] += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; + hStereoDft->res_cod_NRG_S[b] += pDFT_RES[2 * i] * pDFT_RES[2 * i] + pDFT_RES[2 * i + 1] * pDFT_RES[2 * i + 1]; + } + + if ( hStereoDft->hConfig->ada_wb_res_cod_mode ) + { + /*Calculate the energy of RES and DMX*/ + /* ... + 10% of current frame. */ + dmx_nrg_all_curr += hStereoDft->res_cod_NRG_M[b] * 0.1f; + res_nrg_all_curr += hStereoDft->res_cod_NRG_S[b] * 0.1f; + } + } + else + { + int16_t upper_border; + int16_t triple_bin; + float frac_dot_prod; /* fraction of dot product according to energy ratio of current bins and whole band */ + float Sr, Si; + float comb_nrgL, comb_nrgR; + + upper_border = min( STEREO_DFT_DMX_CROSSOVER, hStereoDft->band_limits_dmx[b + 1] ); + + triple_bin = 0; + if ( upper_border > hStereoDft->band_limits_dmx[b] && ( upper_border - hStereoDft->band_limits_dmx[b] ) % 2 ) + { + /* if odd number of bins in band, combine last 3 bins */ + triple_bin = 1; + upper_border -= 3; + } + + for ( i = hStereoDft->band_limits_dmx[b]; i < upper_border; i += 2 ) + { + comb_nrgL = pNrgL[i] + pNrgL[i + 1]; + comb_nrgR = pNrgR[i] + pNrgR[i + 1]; + Sr = ( pDFT_L[2 * i] + pDFT_R[2 * i] ) * ( pDFT_L[2 * i] + pDFT_R[2 * i] ) + ( pDFT_L[2 * i + 2] + pDFT_R[2 * i + 2] ) * ( pDFT_L[2 * i + 2] + pDFT_R[2 * i + 2] ); + Si = ( pDFT_L[2 * i + 1] + pDFT_R[2 * i + 1] ) * ( pDFT_L[2 * i + 1] + pDFT_R[2 * i + 1] ) + ( pDFT_L[2 * i + 3] + pDFT_R[2 * i + 3] ) * ( pDFT_L[2 * i + 3] + pDFT_R[2 * i + 3] ); + + sum_abs = sqrtf( comb_nrgL ) + sqrtf( comb_nrgR ) + EPSILON; + frac_dot_prod = ( comb_nrgL + comb_nrgR ) * dot_prod_nrg_ratio[b]; + wR = sqrtf( 0.5f * ( comb_nrgL + comb_nrgR ) + frac_dot_prod ) / sum_abs; + + wL = wR + sqrtf( 2.f ) * ( 1.f - ( sqrtf( Sr + Si ) / sum_abs ) ); + + /*DMX Mapping*/ + pDFT_DMX[2 * i] = ( wL * pDFT_L[2 * i] + wR * pDFT_R[2 * i] ) * INV_SQRT_2; + pDFT_DMX[2 * i + 1] = ( wL * pDFT_L[2 * i + 1] + wR * pDFT_R[2 * i + 1] ) * INV_SQRT_2; + pDFT_DMX[2 * i + 2] = ( wL * pDFT_L[2 * i + 2] + wR * pDFT_R[2 * i + 2] ) * INV_SQRT_2; + pDFT_DMX[2 * i + 3] = ( wL * pDFT_L[2 * i + 3] + wR * pDFT_R[2 * i + 3] ) * INV_SQRT_2; + } + + if ( triple_bin ) + { + comb_nrgL = comb_nrgR = 0.f; + Sr = Si = 0.f; + for ( j = i; j < i + 3; j++ ) + { + comb_nrgL += pNrgL[j]; + comb_nrgR += pNrgR[j]; + Sr += ( pDFT_L[2 * j] + pDFT_R[2 * j] ) * ( pDFT_L[2 * j] + pDFT_R[2 * j] ); + Si += ( pDFT_L[2 * j + 1] + pDFT_R[2 * j + 1] ) * ( pDFT_L[2 * j + 1] + pDFT_R[2 * j + 1] ); + } + + sum_abs = sqrtf( comb_nrgL ) + sqrtf( comb_nrgR ) + EPSILON; + frac_dot_prod = ( comb_nrgL + comb_nrgR ) * dot_prod_nrg_ratio[b]; + wR = sqrtf( 0.5f * ( comb_nrgL + comb_nrgR ) + frac_dot_prod ) / sum_abs; + wL = wR + sqrtf( 2.f ) * ( 1.f - ( sqrtf( Sr + Si ) / sum_abs ) ); + + for ( j = i; j < i + 3; j++ ) + { + pDFT_DMX[2 * j] = ( wL * pDFT_L[2 * j] + wR * pDFT_R[2 * j] ) * INV_SQRT_2; + pDFT_DMX[2 * j + 1] = ( wL * pDFT_L[2 * j + 1] + wR * pDFT_R[2 * j + 1] ) * INV_SQRT_2; + } + i += 3; + } + + if ( i < hStereoDft->band_limits_dmx[b + 1] ) + { + sum_nrg_L2 = EPSILON; + sum_nrg_R2 = EPSILON; + dot_prod_real2 = EPSILON; + for ( j = hStereoDft->band_limits_dmx[b]; j < hStereoDft->band_limits_dmx[b + 1]; j++ ) + { + sum_nrg_L2 += pDFT_L[2 * j] * pDFT_L[2 * j] + pDFT_L[2 * j + 1] * pDFT_L[2 * j + 1]; + sum_nrg_R2 += pDFT_R[2 * j] * pDFT_R[2 * j] + pDFT_R[2 * j + 1] * pDFT_R[2 * j + 1]; + dot_prod_real2 += pDFT_L[2 * j] * pDFT_R[2 * j] + pDFT_L[2 * j + 1] * pDFT_R[2 * j + 1]; + } + + sum_nrg_Mid = max( 0.f, sum_nrg_L2 + sum_nrg_R2 + 2.f * dot_prod_real2 ); + sum_abs = sqrtf( sum_nrg_L2 ) + sqrtf( sum_nrg_R2 ) + EPSILON; + wR = sqrtf( 0.5f * ( sum_nrg_L2 + sum_nrg_R2 ) + dot_prod_nrg_ratio[b] ) / sum_abs; + wL = wR + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); + } + + for ( ; i < hStereoDft->band_limits_dmx[b + 1]; i++ ) + { + /*DMX Mapping*/ + pDFT_DMX[2 * i] = ( wL * pDFT_L[2 * i] + wR * pDFT_R[2 * i] ) * INV_SQRT_2; + pDFT_DMX[2 * i + 1] = ( wL * pDFT_L[2 * i + 1] + wR * pDFT_R[2 * i + 1] ) * INV_SQRT_2; + } + } + } + + for ( i = hStereoDft->band_limits_dmx[b]; i < hStereoDft->NFFT / 2; i++ ) + { + pDFT_DMX[2 * i] = 0.f; + pDFT_DMX[2 * i + 1] = 0.f; + } + + /*Nyquist Freq.*/ + if ( hStereoDft->band_limits_dmx[b] >= hStereoDft->NFFT / 2 ) + { + pDFT_DMX[1] = ( pDFT_L[1] + pDFT_R[1] ) * 0.5f; + } + else + { + pDFT_DMX[1] = 0.f; + } + + /* DC component */ + pDFT_DMX[0] = ( pDFT_L[0] + pDFT_R[0] ) * 0.5f; + } + else + { +#ifndef DEBUG_STEREO_DFT_NOSTEREO + /*passive DMX*/ + assert( hStereoDft->nbands == hStereoDft->nbands_dmx && "Don't use coarser stereo parameter resolution for residual coding bitrates!" ); + for ( i = 0; i < hStereoDft->band_limits[hStereoDft->res_cod_band_max]; i++ ) + { + pDFT_DMX[i] = ( pDFT_L[i] + pDFT_R[i] ) * 0.5f; + pDFT_RES[i] = ( pDFT_L[i] - pDFT_R[i] ) * 0.5f; + } + for ( ; i < hStereoDft->NFFT; i++ ) + { + pDFT_DMX[i] = ( pDFT_L[i] + pDFT_R[i] ) * 0.5f; + } +#else + /*Copy Left channel to DMX and reset residual coding*/ + mvr2r( pDFT_L, DFT_DMX, hStereoDft->NFFT ); + set_zero( pDFT_RES, hStereoDft->NFFT ); + + /*for( b=0; bnbands; b++ ) + { + if( hStereoDft->res_pred_mode[k+k_offset] && b>= hStereoDft->res_pred_band_min ) + { + if( (k % hStereoDft->prm_res_enc[k+k_offset]) == (hStereoDft->prm_res_enc[k+k_offset]-1) ) + { + stereo_dft_quantize_res_pred_gain( pPredGain+b, pPredGain+b, 1, hStereoDft->Ind+(k_offset+k)*STEREO_DFT_PRM_MAX, hStereoDft->nInd+k+k_offset ); + } + } + }*/ +#endif + } + + /*------------------------------------------------------------------* + * Recalculate RES and DMX + *-----------------------------------------------------------------*/ + + if ( hStereoDft->NFFT == STEREO_DFT_N_16k_ENC && hStereoDft->hConfig->ada_wb_res_cod_mode ) + { + stereo_dft_enc_get_res_cod_mode_flag( hStereoDft, res_nrg_all_curr, dmx_nrg_all_curr, &res_dmx_ratio, &frame_nrg_ratio ); + + if ( hStereoDft->res_cod_mode[k_offset] == STEREO_DFT_RES_COD_OFF || hStereoDft->res_cod_sw_flag ) + { + int16_t res_cod_band_max; + + res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->hConfig->ada_wb_res_cod_mode]; + + /* Recalculate RES and DMX */ + for ( b = 0; b < res_cod_band_max; b++ ) + { + sum_nrg_L2 = EPSILON; + sum_nrg_R2 = EPSILON; + dot_prod_real2 = EPSILON; + for ( j = hStereoDft->band_limits_dmx[b]; j < hStereoDft->band_limits_dmx[b + 1]; j++ ) + { + sum_nrg_L2 += pDFT_L[2 * j] * pDFT_L[2 * j] + pDFT_L[2 * j + 1] * pDFT_L[2 * j + 1]; + sum_nrg_R2 += pDFT_R[2 * j] * pDFT_R[2 * j] + pDFT_R[2 * j + 1] * pDFT_R[2 * j + 1]; + dot_prod_real2 += pDFT_L[2 * j] * pDFT_R[2 * j] + pDFT_L[2 * j + 1] * pDFT_R[2 * j + 1]; + } + sum_nrg_Mid = max( 0.f, sum_nrg_L2 + sum_nrg_R2 + 2.f * dot_prod_real2 ); + wL = 0.5f * max( sqrtf( sum_nrg_L2 ) + sqrtf( sum_nrg_R2 ) - sqrtf( sum_nrg_Mid ), 0 ) / sqrtf( sum_nrg_L2 + EPSILON ); + wS = 1; + if ( hStereoDft->res_cod_sw_flag ) + { + wL *= ( 1 - hStereoDft->switch_fade_factor ); + wS = hStereoDft->switch_fade_factor; + } + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) + { + /*DMX Recalculation*/ + DFT_DMX[2 * i] += wL * pDFT_L[2 * i]; + DFT_DMX[2 * i + 1] += wL * pDFT_L[2 * i + 1]; + + /*RES Recalculation*/ + DFT_RES[2 * i] *= wS; + DFT_RES[2 * i + 1] *= wS; + } + } + } + } + + if ( input_Fs >= 32000 ) + { + stereo_dft_enc_calculate_nrg_for_icbwe( hStereoDft, DFT_DMX, input_Fs ); + } + + mvr2r( DFT_DMX, hStereoDft->DFT[0], STEREO_DFT_N_MAX_ENC ); + mvr2r( DFT_RES, hStereoDft->DFT[1], STEREO_DFT_N_8k_ENC ); + set_zero( hStereoDft->DFT[1] + STEREO_DFT_N_8k_ENC, STEREO_DFT_N_MAX_ENC - STEREO_DFT_N_8k_ENC ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_get_res_cod_mode_flag() + * + * Get the residual signal coding flag + *-------------------------------------------------------------------------*/ + +static void stereo_dft_enc_get_res_cod_mode_flag( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, + const float res_nrg_all_curr, + const float dmx_nrg_all_curr, + float *res_dmx_ratio, + float *frame_nrg_ratio ) +{ + int16_t b, k_offset; + float dmx_res_all, g; + int16_t fast_update_flag; + int16_t prev_res_cod_mode_flag, res_cod_mode_flag; + + k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ + + /*Calculate energy ratio between residual signal and downmix signal */ + *res_dmx_ratio = 0; + + for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) + { + g = fabsf( hStereoDft->side_gain[(k_offset) *STEREO_DFT_BAND_MAX + b] ); + *res_dmx_ratio = max( hStereoDft->res_cod_NRG_S[b] / ( hStereoDft->res_cod_NRG_S[b] + ( 1 - g ) * ( 1 - g ) * hStereoDft->res_cod_NRG_M[b] + 1 ), *res_dmx_ratio ); + } + check_bounds( res_dmx_ratio, 0, 1 ); /*should always be satisfied*/ + + /*Calculate the total energy of RES and DMX*/ + dmx_res_all = res_nrg_all_curr + dmx_nrg_all_curr; + + /*Calculate the energy ratio of the inter-frame */ + *frame_nrg_ratio = dmx_res_all / hStereoDft->dmx_res_all_prev; + *frame_nrg_ratio = min( 5.0f, max( 0.2f, *frame_nrg_ratio ) ); + + /* Get fast update flag */ + fast_update_flag = 0; + if ( ( *frame_nrg_ratio > 3.2f && *res_dmx_ratio < 0.1f ) || ( *frame_nrg_ratio < 0.21f && *res_dmx_ratio > 0.4f ) ) + { + fast_update_flag = 1; + } + + /* Calculate long term energy ratio between residual signal and downmix signal */ + if ( fast_update_flag ) + { + hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.5f + hStereoDft->res_dmx_ratio_lt * 0.5f; + } + else + { + hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.1f + hStereoDft->res_dmx_ratio_lt * 0.9f; + } + + /*Get the residual signal coding initial flag */ + if ( hStereoDft->res_dmx_ratio_lt > 0.075f ) + { + res_cod_mode_flag = 1; + } + else + { + res_cod_mode_flag = 0; + } + + /* Get the residual signal coding flag */ + prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1]; + if ( res_cod_mode_flag != prev_res_cod_mode_flag ) + { + if ( prev_res_cod_mode_flag == 1 ) + { + if ( hStereoDft->hangover_cnt0 < 3 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0 ) + { + res_cod_mode_flag = prev_res_cod_mode_flag; + hStereoDft->hangover_cnt0++; + } + else + { + /* reset hangover */ + hStereoDft->hangover_cnt0 = 0; + } + } + else + { + if ( *frame_nrg_ratio > 2.5f || *frame_nrg_ratio < 0.21f ) + { + /* reset hangover */ + hStereoDft->hangover_cnt1 = 0; + } + else + { + if ( hStereoDft->hangover_cnt1 < 3 ) + { + res_cod_mode_flag = prev_res_cod_mode_flag; + hStereoDft->hangover_cnt1++; + } + else + { + /* reset hangover */ + hStereoDft->hangover_cnt1 = 0; + } + } + } + } + + /* handle switching frames */ + if ( res_cod_mode_flag != prev_res_cod_mode_flag && hStereoDft->last_res_cod_mode_modify_flag == 0 ) + { + hStereoDft->res_cod_sw_flag = 1; + + /* Update switch_fade_factor */ + if ( *frame_nrg_ratio > 3.2f && *res_dmx_ratio < 0.1f ) + { + hStereoDft->switch_fade_factor = 0.75f; + } + else if ( *frame_nrg_ratio < 0.21f && *res_dmx_ratio > 0.4f ) + { + hStereoDft->switch_fade_factor = 0.25f; + } + else + { + hStereoDft->switch_fade_factor = 0.5f; + } + + if ( res_cod_mode_flag == 0 ) + { + res_cod_mode_flag = 1; + } + } + + /*update previous frame's total energy of RES and DMX */ + hStereoDft->dmx_res_all_prev = dmx_res_all; + + /* update residual coding mode */ + hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] = res_cod_mode_flag; + if ( !hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) + { + hStereoDft->res_cod_band_max = 0; + hStereoDft->res_cod_line_max = 0; + } + + /*Update residual signal memory when switching from not coding residual signal to coding it*/ + if ( prev_res_cod_mode_flag == 0 && res_cod_mode_flag == 1 ) + { + set_zero( hStereoDft->output_mem_res_8k, STEREO_DFT_OVL_8k ); + } + +#ifdef DEBUG_MODE_DFT + /* look at res_nrg_all value */ + { + static FILE *ResNrgAll_FILE = NULL; + + if ( ResNrgAll_FILE == NULL ) + ResNrgAll_FILE = fopen( "./res/stereo_dft_res_nrg.txt", "w" ); + fprintf( ResNrgAll_FILE, "%f\t\t%d\n", hStereoDft->res_dmx_ratio_lt, hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ); + dbgwrite( &hStereoDft->res_cod_mode[STEREO_DFT_OFFSET], sizeof( int16_t ), 1, 320, "./res/stereo_dft_res_cod_mode_flag.pcm" ); + } +#endif + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_res() + * + * Code the residual signal + *-------------------------------------------------------------------------*/ + +void stereo_dft_enc_res( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ + const float *input_8k, /* i : input buffer sampled at 8kHz*/ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + int16_t *nb_bits, /* o : number of bits written */ + const int16_t max_bits ) +{ + int16_t i, b; + RangeUniEncState range_uni_enc_state; + ECSQ_instance ecsq_inst; + float MDCT_RES[L_FRAME8k]; + float win[L_FRAME8k + STEREO_DFT_OVL_8k]; + int16_t global_gain_index; + int16_t total_bit_count; + float max_snr; + float panning_gain, panning_gain_min; + float res_cod_gain[10]; + float in_phase_ratio; +#ifdef DEBUG_MODE_DFT + float MDCT_RES_dec[L_FRAME8k] = { 0 }; +#endif + + assert( hStereoDft->res_cod_line_max <= L_FRAME8k ); + + if ( hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) + { + /* Windowing */ + /* overlapping parts */ + /*input_8k-=STEREO_DFT_OVL_8k;*/ + for ( i = 0; i < STEREO_DFT_OVL_8k; i++ ) + { + win[i] = input_8k[i] * hStereoDft->win_mdct_8k[i]; + win[L_FRAME8k + i] = input_8k[L_FRAME8k + i] * hStereoDft->win_mdct_8k[STEREO_DFT_OVL_8k - 1 - i]; + } + /* middle part */ + for ( ; i < L_FRAME8k; i++ ) + { + win[i] = input_8k[i]; + } + + /* MDCT analysis */ + TCX_MDCT( win, MDCT_RES, STEREO_DFT_OVL_8k, L_FRAME8k - STEREO_DFT_OVL_8k, STEREO_DFT_OVL_8k, IVAS_CPE_DFT ); + + /*Compute the DMX to RES for each band*/ + max_snr = 0.f; /*minimum gain for residual coding -> no coding*/ + for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) + { + /*Get side gain information and it is we*/ + panning_gain = hStereoDft->side_gain[STEREO_DFT_OFFSET * STEREO_DFT_BAND_MAX + b]; + panning_gain_min = 1.f - fabsf( panning_gain ); + + in_phase_ratio = ( panning_gain_min * panning_gain_min * hStereoDft->res_cod_NRG_M[b] ) / ( panning_gain_min * panning_gain_min * hStereoDft->res_cod_NRG_M[b] + hStereoDft->res_cod_NRG_S[b] + 1 ); + check_bounds( &in_phase_ratio, 0, 1 ); + res_cod_gain[b] = in_phase_ratio * STEREO_DFT_RES_COD_SNR_MIN + ( 1 - in_phase_ratio ) * STEREO_DFT_RES_COD_SNR_MAX; + + /*get the maximum through bands*/ + if ( res_cod_gain[b] > max_snr ) + { + max_snr = res_cod_gain[b]; + } + } + + /*Smooth max_snr because of several perturbations in computation*/ +#ifdef DEBUG_MODE_DFT + dbgwrite( &max_snr, sizeof( float ), 1, 1, "./res/stereo_dft_res_cod_target_snr0.dat" ); +#endif + hStereoDft->old_snr = 0.2f * max_snr + 0.8f * hStereoDft->old_snr; + max_snr = hStereoDft->old_snr; + + if ( max_snr < STEREO_DFT_RES_COD_SNR_MIN ) + { + max_snr = STEREO_DFT_RES_COD_SNR_MIN; + } +#ifdef DEBUG_MODE_DFT + dbgwrite( &max_snr, sizeof( float ), 1, 1, "./res/stereo_dft_res_cod_target_snr.dat" ); +#endif + + wmops_sub_start( "residual_encode" ); + + /* residual encoding */ + ECSQ_init_instance( &ecsq_inst, 0 /*dummy index*/, &range_uni_enc_state ); + rc_uni_enc_init( &range_uni_enc_state ); + + ecsq_inst.bit_count_estimate = 0; + ecsq_inst.config_index = 2 * hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] - 1; + + /* 7 bits (STEREO_DFT_RES_GLOBAL_GAIN_BITS) for global_gain_index, 2 bits for closing of the arithmetic coder, 8 safety bits to account for the size estimation accuracy */ +#ifndef DEBUG_MODE_DFT + ECSQ_encode_target_SNR( &ecsq_inst, MDCT_RES, hStereoDft->res_cod_line_max, max_snr, max_bits - ( *nb_bits ) - STEREO_DFT_RES_GLOBAL_GAIN_BITS - 2 - 8, NULL, &global_gain_index ); +#else + total_bit_count = (int16_t) ECSQ_encode_target_SNR( &ecsq_inst, MDCT_RES, hStereoDft->res_cod_line_max, max_snr, max_bits - ( *nb_bits ) - STEREO_DFT_RES_GLOBAL_GAIN_BITS - 2 - 8, MDCT_RES_dec, &global_gain_index ); +#endif + if ( global_gain_index != ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO ) + { + total_bit_count = rc_uni_enc_finish( &range_uni_enc_state ); + + if ( total_bit_count <= max_bits - *nb_bits - STEREO_DFT_RES_GLOBAL_GAIN_BITS ) + { + int16_t idx; + uint8_t *byte_buffer; + + /* Global gain */ + push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_GLOBAL_GAIN, global_gain_index, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); + ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; +#ifdef DEBUG_MODE_DFT + fprintf( pF, "Gain: %d ", global_gain_index ); +#endif + + /* Push arithmetic coded bits */ + byte_buffer = range_uni_enc_state.byte_buffer; + for ( idx = 0; idx < ( total_bit_count >> 3 ); ++idx ) + { + push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_COD, byte_buffer[idx], 8 ); + } + if ( ( total_bit_count & 7 ) != 0 ) + { + /* move the last 1 to 7 bits from the MSB position of the last byte to the LSB postion */ + push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_COD, byte_buffer[idx] >> ( 8 - ( total_bit_count & 7 ) ), total_bit_count & 7 ); + } + ( *nb_bits ) += total_bit_count; +#ifdef DEBUG_MODE_DFT + fprintf( pF, "%d (max: %d)\n", STEREO_DFT_RES_GLOBAL_GAIN_BITS + total_bit_count, max_bits ); +#endif + } + else + { + /* Global gain -> 127*/ + global_gain_index = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; + push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_GLOBAL_GAIN, global_gain_index, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); + ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; +#ifdef DEBUG_MODE_DFT + fprintf( pF, "Gain: %d ", global_gain_index ); + fprintf( pF, "%d (max: %d)\n", STEREO_DFT_RES_GLOBAL_GAIN_BITS, max_bits ); +#endif + } + } + else + { + /* Global gain -> 127*/ + push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_GLOBAL_GAIN, global_gain_index, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); + ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; +#ifdef DEBUG_MODE_DFT + fprintf( pF, "Gain: %d ", global_gain_index ); + fprintf( pF, "%d (max: %d)\n", STEREO_DFT_RES_GLOBAL_GAIN_BITS, max_bits ); +#endif + } +#ifdef DEBUG_MODE_DFT + { + static FILE *resCodingSNR = NULL; + if ( resCodingSNR == NULL ) + resCodingSNR = fopen( "./res/resCodingSNR.txt", "w" ); + fprintf( resCodingSNR, "%d\t%d\t%f\n", STEREO_DFT_RES_GLOBAL_GAIN_BITS + total_bit_count, max_bits, max_snr ); + } +#endif + + wmops_sub_end(); + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp[1024]; + static float mem_win[STEREO_DFT_OVL_8k]; + float global_gain; + int16_t input_frame = L_FRAME8k; + float res_cod_error, res_cod_nrg, res_cod_snr; + + for ( i = 0; i < input_frame; i++ ) + { + tmp[i] = (int16_t) ( input_8k[i] + 0.5f ); + } + dbgwrite( &tmp, sizeof( int16_t ), input_frame, 1, "./res/stereo_dft_enc_res_original.pcm" ); + + if ( global_gain_index != ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO ) + { + global_gain = ECSQ_dequantize_gain( global_gain_index ); + } + else + { + global_gain = 0.f; + } + dbgwrite( &global_gain, sizeof( float ), 1, 1, "./res/stereo_dft_res_cod_gain.dat" ); + + tmp[0] = total_bit_count; + dbgwrite( &tmp, sizeof( int16_t ), 1, 1, "./res/stereo_dft_res_cod_bits.dat" ); + + dbgwrite( &( hStereoDft->res_cod_line_max ), sizeof( int16_t ), 1, 1, "./res/stereo_dft_res_cod_line.dat" ); + dbgwrite( &( hStereoDft->res_cod_band_max ), sizeof( int16_t ), 1, 1, "./res/stereo_dft_res_cod_band_max.dat" ); + dbgwrite( &( hStereoDft->res_cod_NRG_M ), sizeof( float ), hStereoDft->nbands, 1, "./res/stereo_dft_dmx_nrg.dat" ); + dbgwrite( &( hStereoDft->res_cod_NRG_S ), sizeof( float ), hStereoDft->nbands, 1, "./res/stereo_dft_res_nrg.dat" ); + + /*Compute coding SNR*/ + res_cod_nrg = EPSILON; + res_cod_error = EPSILON; + for ( i = 0; i < hStereoDft->res_cod_line_max; i++ ) + { + res_cod_nrg += MDCT_RES[i] * MDCT_RES[i]; + res_cod_error += ( MDCT_RES[i] - MDCT_RES_dec[i] ) * ( MDCT_RES[i] - MDCT_RES_dec[i] ); + } + + res_cod_snr = 10.f * log10f( res_cod_nrg / res_cod_error ); + dbgwrite( &( res_cod_snr ), sizeof( float ), 1, 1, "./res/stereo_dft_res_cod_snr.dat" ); + + /*IMDCT*/ + TCX_MDCT_Inverse( MDCT_RES_dec, win, STEREO_DFT_OVL_8k, L_FRAME8k - STEREO_DFT_OVL_8k, STEREO_DFT_OVL_8k, IVAS_CPE_DFT ); + + /*OLA*/ + /*overlapping parts*/ + for ( i = 0; i < STEREO_DFT_OVL_8k; i++ ) + { + win[i] = mem_win[i] + win[i] * hStereoDft->win_mdct_8k[i]; + mem_win[i] = win[input_frame + i] * hStereoDft->win_mdct_8k[STEREO_DFT_OVL_8k - 1 - i]; + } + for ( i = 0; i < input_frame; i++ ) + { + tmp[i] = (int16_t) ( win[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, "./res/stereo_dft_enc_res_decoded.pcm" ); + } +#endif + } + +#ifdef DEBUG_MODE_DFT + { + int16_t input_frame = L_FRAME8k; + static FILE *bits_consumed = NULL; + if ( bits_consumed == NULL ) + bits_consumed = fopen( "./res/stereo_dft_bits_consumed.txt", "w" ); + + fprintf( bits_consumed, " %d \n", *nb_bits ); + dbgwrite( nb_bits, sizeof( int16_t ), 1, input_frame, "./res/stereo_dft_bits_consumed.dat" ); + } +#endif + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_write_BS() + * + * Write DFT stereo bitstream + *-------------------------------------------------------------------------*/ + +void stereo_dft_enc_write_BS( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + int16_t *nb_bits /* o : number of bits written */ +) +{ + int16_t b, k_offset, itd, nb, nbands, sp_aud_decision0; + int16_t NFFT_inner, nbands_full; + int16_t no_GR_ord; + int16_t encoded_ind_GR[STEREO_DFT_BAND_MAX]; + int16_t encoded_ind_pred_GR[STEREO_DFT_BAND_MAX]; + int16_t sid_gIpd_index, sid_itd; + float cohBand[STEREO_DFT_BAND_MAX / 2]; + BSTR_ENC_HANDLE hBstr; + STEREO_DFT_ENC_DATA_HANDLE hStereoDft; + int32_t core_brate; +#ifdef DEBUG_MODE_DFT + static FILE *ITD_values = NULL, *side_gain_values = NULL, *RPG_values = NULL; + static FILE *cum_freq_enc = NULL; + + if ( pF == NULL ) + pF = fopen( "./res/stereo_dft_enc_ind.txt", "w" ); + if ( ITD_values == NULL ) + ITD_values = fopen( "./res/itd_indicies_enc.txt", "w" ); + if ( side_gain_values == NULL ) + side_gain_values = fopen( "./res/side_gain_indicies_enc.txt", "w" ); + if ( RPG_values == NULL ) + RPG_values = fopen( "./res/rpg_indicies_enc.txt", "w" ); + if ( cum_freq_enc == NULL ) + cum_freq_enc = fopen( "./res/cum_freq_enc.txt", "w" ); +#endif + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + hStereoDft = hCPE->hStereoDft; + hBstr = hCPE->hMetaData; + core_brate = hCPE->hCoreCoder[0]->core_brate; + + sp_aud_decision0 = 0; + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + sp_aud_decision0 = hCPE->hCoreCoder[0]->sp_aud_decision0; + } + + *nb_bits = 0; + k_offset = STEREO_DFT_OFFSET; + + nbands_full = hStereoDft->nbands; + NFFT_inner = STEREO_DFT_N_MAX_ENC * inner_frame_tbl[hCPE->hCoreCoder[0]->bwidth] / L_FRAME48k; + + if ( !( core_brate == SID_2k40 || core_brate == FRAME_NO_DATA ) ) + { + /* set number of bands according to bandwidth after BWD */ + hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], NFFT_inner, ENC ); + } + + if ( core_brate == FRAME_NO_DATA ) + { + /* No data frame */ + ( *nb_bits ) = 0; + return; + } + + /* attack present */ + /* attackPresent not sent in inactive frames, receiver assumes = 0 */ + if ( core_brate != SID_2k40 ) + { + push_indice( hBstr, IND_STEREO_DFT_ATTACK_PRESENT, hStereoDft->attackPresent, 1 ); + ( *nb_bits )++; + } + + /* Writing coding residual coding mode into bitstream */ + if ( hStereoDft->hConfig->ada_wb_res_cod_mode && hCPE->hCoreCoder[0]->bwidth == WB ) + { + push_indice( hBstr, IND_STEREO_DFT_RES_COD, hStereoDft->res_cod_mode[k_offset], 1 ); + ( *nb_bits )++; + hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->res_cod_mode[k_offset]]; + hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); +#ifdef DEBUG_MODE_DFT + fprintf( pF, "res_cod_mode: %d\n", hStereoDft->res_cod_mode[k_offset] ); +#endif + } + +#ifdef DEBUG_MODE_DFT + fprintf( pF, "stereo Data: %d %d %d %d %d\n", hStereoDft->band_res[k_offset], 1, hStereoDft->res_pred_mode[k_offset], hStereoDft->res_cod_mode[k_offset], hStereoDft->res_cod_band_max ); + fprintf( pF, "stereo Bands: %d\n", hStereoDft->nbands ); + + dbgwrite( &( hStereoDft->nbands ), sizeof( int16_t ), 1, 1, "./res/stereo_dft_encBS_nbands.dat" ); + dbgwrite( &( hCPE->hCoreCoder[0]->bwidth ), sizeof( int16_t ), 1, 1, "./res/stereo_dft_encBS_bwidth.dat" ); + +#endif + + if ( nbands_full < hStereoDft->nbands ) + { + hStereoDft->reverb_flag = 0; + } + + /* Side gains */ + hStereoDft->side_gain_flag_1 = 0; /* EC coding by default */ + side_gain_mode_decision( hStereoDft, encoded_ind_GR, sp_aud_decision0, hCPE->hCoreCoder[0]->last_core_brate ); + + /* residual pred. gains */ + hStereoDft->res_pred_flag_1 = 0; /* EC coding by default */ + + res_pred_gain_mode_decision( hStereoDft, encoded_ind_pred_GR, k_offset, hCPE->hCoreCoder[0]->last_core_brate ); + + /*------------------------------------------------------------------* + * write ITD indices + *-----------------------------------------------------------------*/ + + if ( core_brate != SID_2k40 ) + { + push_indice( hBstr, IND_STEREO_DFT_ITD_MODE, ( hStereoDft->hItd->itd[k_offset] != 0 ), STEREO_DFT_ITD_MODE_NBITS ); + ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ + } + +#ifdef DEBUG_MODE_DFT + fprintf( pF, "ITD: %d ", hStereoDft->hConfig->itd_mode && ( hStereoDft->hItd->itd[k_offset] != 0 ) ); +#endif + if ( core_brate != SID_2k40 ) + { + if ( hStereoDft->hItd->itd[k_offset] ) + { + itd = hStereoDft->hItd->itd_index[k_offset]; + if ( itd > 255 ) + { + itd -= 256; + + if ( itd < 20 ) + { + push_indice( hBstr, IND_STEREO_DFT_ITD_HUFF, 1, 1 ); /* use Huffman*/ + push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 1, 1 ); /* negative */ + push_indice( hBstr, IND_STEREO_DFT_ITD_COD, dft_code_itd[itd], dft_len_itd[itd] ); + ( *nb_bits ) += dft_len_itd[itd] + 2; + } + else + { + push_indice( hBstr, IND_STEREO_DFT_ITD_HUFF, 0, 1 ); /* don't use Huffman */ + push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 1, 1 ); /* negative */ + push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_ITD_NBITS - 1 ); + ( *nb_bits ) += STEREO_DFT_ITD_NBITS + 1; + } + } + else + { + if ( itd < 20 ) + { + push_indice( hBstr, IND_STEREO_DFT_ITD_HUFF, 1, 1 ); /* use Huffman*/ + push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 0, 1 ); /* positive */ + push_indice( hBstr, IND_STEREO_DFT_ITD_COD, dft_code_itd[itd], dft_len_itd[itd] ); + ( *nb_bits ) += dft_len_itd[itd] + 2; + } + else + { + /* don't use Huffman and positive*/ + push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_ITD_NBITS + 1 ); + ( *nb_bits ) += STEREO_DFT_ITD_NBITS + 1; + } + } +#ifdef DEBUG_MODE_DFT + fprintf( pF, "ITD: %d ", hStereoDft->hItd->itd_index[k_offset] ); + fprintf( ITD_values, "%d %d ", frame, hStereoDft->hItd->itd_index[k_offset] ); +#endif + } + } + +#ifdef DEBUG_MODE_DFT_BITS + fprintf( ITD_bits, "%d ", *nb_bits ); +#endif + + /*------------------------------------------------------------------* + * write Side gain indices + *-----------------------------------------------------------------*/ + + /* Side Gain flag 1 */ + nb = 0; + if ( hStereoDft->side_gain_flag_1 > 0 ) + { + push_indice( hBstr, IND_STEREO_DFT_SIDEGAIN_FLAG, hStereoDft->side_gain_flag_1, 2 ); + nb += 2; + } + else + { + push_indice( hBstr, IND_STEREO_DFT_SIDEGAIN_FLAG, hStereoDft->side_gain_flag_1, STEREO_DFT_FLAG_BITS ); + nb += STEREO_DFT_FLAG_BITS; + } + + no_GR_ord = 3; + +#ifdef DEBUG_MODE_DFT + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + fprintf( pF, "Side gain: %d ", hStereoDft->side_gain_index_EC[b] ); + fprintf( side_gain_values, " %d ", hStereoDft->side_gain_index_EC[b] ); + } +#endif + if ( hStereoDft->side_gain_flag_1 == 0 ) + { + nb += write_bitstream_adapt_GR( hBstr, IND_STEREO_DFT_SIDEGAINS, encoded_ind_GR, hStereoDft->nbands, hStereoDft->side_gain_flag_2, no_GR_ord ); + } + else + { + if ( hStereoDft->side_gain_flag_1 == 2 ) + { + nb += write_bitstream_GR( hBstr, IND_STEREO_DFT_SIDEGAINS, hStereoDft->side_gain_index_ECDiff, hStereoDft->nbands, hStereoDft->side_gain_flag_2 - no_GR_ord ); + } + else + { + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + /*ILD*/ + push_indice( hBstr, IND_STEREO_DFT_SIDEGAINS, hStereoDft->side_gain_index_EC[b], STEREO_DFT_SIDEGAIN_NBITS ); + nb += STEREO_DFT_SIDEGAIN_NBITS; + } + } + } + + /* nb bits are used for side gain*/ + ( *nb_bits ) += nb; +#ifdef DEBUG_MODE_DFT_BITS + fprintf( SG_bits, "%d ", nb ); +#endif + nb = 0; + + if ( core_brate == SID_2k40 ) + { + stereo_dft_enc_sid_calc_coh( hStereoDft, hCPE->hStereoCng->coh_crossfade, &hCPE->hStereoCng->td_active, &hCPE->hStereoCng->first_SID, cohBand ); + + if ( *nb_bits <= ( ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS - STEREO_DFT_ITD_MODE_NBITS - STEREO_DFT_SID_ITD_NBITS - 1 ) ) + { + if ( hStereoDft->hItd->itd[k_offset] != 0 ) + { + /* Re-quantize ITD with lower resolution for Stereo CNG */ + itd = hStereoDft->hItd->itd_index[k_offset]; + if ( itd > 255 ) + { + itd -= 256; + } + itd = itd >> STEREO_DFT_SID_ITD_FAC; + + sid_itd = itd && 1; + } + else + { + sid_itd = 0; + } + + push_indice( hBstr, IND_STEREO_DFT_ITD_MODE, sid_itd, STEREO_DFT_ITD_MODE_NBITS ); + ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ + + if ( sid_itd ) + { + itd = hStereoDft->hItd->itd_index[k_offset]; + if ( itd > 255 ) + { + itd -= 256; + itd = itd >> STEREO_DFT_SID_ITD_FAC; + + if ( itd > ( ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1 ) ) + { + itd = ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1; + } + + push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 1, 1 ); /* negative */ + push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_SID_ITD_NBITS ); + ( *nb_bits ) += STEREO_DFT_SID_ITD_NBITS + 1; + } + else + { + itd = itd >> STEREO_DFT_SID_ITD_FAC; + + if ( itd > ( ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1 ) ) + { + itd = ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1; + } + + push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 0, 1 ); /* Positive */ + push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_SID_ITD_NBITS ); + ( *nb_bits ) += STEREO_DFT_SID_ITD_NBITS + 1; + } + +#ifdef DEBUG_MODE_DFT + fprintf( pF, "ITD: %d ", hStereoDft->hItd->itd_index[k_offset] ); + fprintf( ITD_values, "%d %d ", frame, hStereoDft->hItd->itd_index[k_offset] ); +#endif + } + } + } + + /*------------------------------------------------------------------* + * write IPD indices + *-----------------------------------------------------------------*/ + + if ( core_brate != SID_2k40 ) + { + push_indice( hBstr, IND_STEREO_DFT_NO_IPD_FLAG, hStereoDft->no_ipd_flag, STEREO_DFT_FLAG_BITS ); + nb += STEREO_DFT_FLAG_BITS; /*IPD mode flag: 1bit*/ + + if ( hStereoDft->no_ipd_flag == 0 ) + { + push_indice( hBstr, IND_STEREO_DFT_GIPD, hStereoDft->gipd_index, STEREO_DFT_GIPD_NBITS ); + nb += STEREO_DFT_GIPD_NBITS; + } + } + else if ( *nb_bits <= ( ( IVAS_SID_4k4 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS - STEREO_DFT_FLAG_BITS - STEREO_DFT_SID_GIPD_NBITS ) ) + { + push_indice( hBstr, IND_STEREO_DFT_NO_IPD_FLAG, hStereoDft->no_ipd_flag, STEREO_DFT_FLAG_BITS ); + nb += STEREO_DFT_FLAG_BITS; /*IPD mode flag: 1bit*/ + + if ( hStereoDft->no_ipd_flag == 0 ) + { + stereo_dft_quantize_ipd( &hStereoDft->sid_gipd, &hStereoDft->sid_gipd, &sid_gIpd_index, STEREO_DFT_SID_GIPD_NBITS ); + push_indice( hBstr, IND_STEREO_DFT_GIPD, sid_gIpd_index, STEREO_DFT_SID_GIPD_NBITS ); + nb += STEREO_DFT_SID_GIPD_NBITS; + } + } + + +#ifdef DEBUG_MODE_DFT_BITS + fprintf( IPD_bits, "%d ", nb ); +#endif + ( *nb_bits ) += nb; + + + /*----------------------------------------------------------------* + * Residual prediction + *----------------------------------------------------------------*/ + + nb = 0; /* bits for residual pred gains */ + if ( hStereoDft->res_pred_mode[k_offset] ) + { + if ( hStereoDft->attackPresent == 0 ) + { + nbands = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); + b = hStereoDft->res_pred_band_min; + + /*Adaptive SF*/ + if ( hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + /*read flag*/ + push_indice( hBstr, IND_STEREO_DFT_REVERB_MODE, hStereoDft->reverb_flag, STEREO_DFT_REVERB_MODE_NBITS ); + nb += STEREO_DFT_REVERB_MODE_NBITS; +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, " reverb_flag %d ", hStereoDft->reverb_flag ); +#endif + if ( hStereoDft->reverb_flag ) + { + nbands -= STEREO_DFT_RES_PRED_BAND_MIN_CONST; + } + } + + /* Res Pred Gain flag 0 */ + if ( hStereoDft->res_pred_flag_1 > 0 ) + { + push_indice( hBstr, IND_STEREO_DFT_RES_PRED_FLAG, hStereoDft->res_pred_flag_1, 2 ); + nb += 2; /*pred gain mode flag: 2 bits*/ + } + else + { + push_indice( hBstr, IND_STEREO_DFT_RES_PRED_FLAG, hStereoDft->res_pred_flag_1, STEREO_DFT_FLAG_BITS ); + nb += STEREO_DFT_FLAG_BITS; /*pred gain mode flag: 1bit*/ + } + + no_GR_ord = 2; + if ( hStereoDft->res_pred_flag_1 == 0 ) + { +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, "flag: 0" ); +#endif + if ( encoded_ind_pred_GR[0] == dft_maps_rpg[8 * NO_SYMB_GR_PRED_G] ) + { + nb += write_GR1( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, encoded_ind_pred_GR, 1 ); + } + else + { + nb += write_bitstream_adapt_GR( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, encoded_ind_pred_GR, nbands - hStereoDft->res_pred_band_min, hStereoDft->res_pred_flag_2, 2 ); + } + } + else + { + if ( hStereoDft->res_pred_flag_1 == 2 ) + { +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, "flag: 2" ); +#endif + nb += write_bitstream_GR( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, &hStereoDft->res_pred_index_ECDiff[hStereoDft->res_pred_band_min], nbands - hStereoDft->res_pred_band_min, hStereoDft->res_pred_flag_2 - no_GR_ord ); + } + else + { +#ifdef DEBUG_MODE_DFT + fprintf( RPG_values, "flag: 1" ); +#endif + for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) + { + push_indice( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, hStereoDft->res_pred_index_EC[b], STEREO_DFT_RES_GAINS_BITS ); + nb += STEREO_DFT_RES_GAINS_BITS; + } + } + } + +#ifdef DEBUG_MODE_DFT + for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) + { + fprintf( pF, "Res pred values: %d ", hStereoDft->res_pred_index_EC[b] ); + if ( hStereoDft->res_pred_flag_1 == 2 ) + { + fprintf( RPG_values, " %d(%d) ", hStereoDft->res_pred_index_EC[b], hStereoDft->res_pred_index_EC[b] + ( ( hStereoDft->res_pred_index_ECDiff[b] % 2 ) ? -( hStereoDft->res_pred_index_ECDiff[b] + 1 ) / 2 : ( hStereoDft->res_pred_index_ECDiff[b] ) / 2 ) ); + } + else + { + fprintf( RPG_values, " %d ", hStereoDft->res_pred_index_EC[b] ); + } + } +#endif + } + else + { + set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands - hStereoDft->res_pred_band_min ); + } + } + else + { + set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands - hStereoDft->res_pred_band_min ); + } + + ( *nb_bits ) += nb; + + if ( core_brate == SID_2k40 ) + { + stereo_dft_enc_sid_coh( hBstr, hCPE->hStereoCng->mem_cohBand, hStereoDft->nbands, nb_bits, cohBand ); + } + +#ifdef DEBUG_MODE_DFT + /*fprintf(pF, "Total bits: %d", (*nb_bits));*/ + fprintf( pF, "\n" ); + fprintf( ITD_values, "\n" ); + fprintf( side_gain_values, "\n" ); + fprintf( RPG_values, "\n" ); +#endif + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_compute_prm() + * + * Compute stereo parameters: IPD and SIDE_GAIN + * SIDE_GAIN: Interchannel Level Difference + * IPD: Interchannel Phase Difference: angle(L)-angle(R) = acos(/(|L|.|R|)) or atan2(Img(L.R*)/Re(L.R*)) + *------------------------------------------------------------------------*/ + +static void stereo_dft_enc_compute_prm( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, + float *DFT_L, + float *DFT_R, + int16_t k_offset, + int16_t flag_quant, + const int16_t sp_aud_decision0, + const int16_t vad_flag, + float *bin_nrgL, + float *bin_nrgR, + float *dot_prod_nrg_ratio ) +{ + int16_t b, i; + int16_t b2; + float *pDFT_L, *pDFT_R; + float sum_nrg_L, sum_nrg_R; + float dot_prod_real, dot_prod_img; + float sum_nrg_L2, sum_nrg_R2; + float dot_prod_real2, dot_prod_img2; + float *pPredGain; + float *pSideGain; + float sum_energy_L, sum_energy_R; + float g, c; + float abs_L_R; + float gain_IPD; + float sub_nrg_DMX[STEREO_DFT_BAND_MAX]; + float sub_nrg_L[STEREO_DFT_BAND_MAX]; + float sub_nrg_R[STEREO_DFT_BAND_MAX]; + float diff_ipd; + float *pNrgL, *pNrgR; + float reg; + float *pgIpd, sum_dot_prod_real, sum_dot_prod_img; + float sum_past_nrgL, sum_past_nrgL2; + float sum_past_nrgR, sum_past_nrgR2; + float sum_past_dpr, sum_past_dpr2; + float sum_past_dpi, sum_past_dpi2; + float sum_past_dot_prod_abs, sum_past_dot_prod_abs2; + float sum_past_nrg_dmx; + int16_t pos; + + /*------------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + sum_past_dot_prod_abs2 = 0.0f; + pos = hStereoDft->nrg_past_pos; + + set_f( sub_nrg_DMX, 0, STEREO_DFT_BAND_MAX ); + set_f( sub_nrg_L, 0, STEREO_DFT_BAND_MAX ); + set_f( sub_nrg_R, 0, STEREO_DFT_BAND_MAX ); + + + pSideGain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; + pgIpd = hStereoDft->gipd + k_offset; + pPredGain = hStereoDft->res_pred_gain + k_offset * STEREO_DFT_BAND_MAX; + gain_IPD = EPSILON; + sum_energy_L = EPSILON; /* Set the accumulations for the no IPD Calculation */ + sum_energy_R = EPSILON; + sum_dot_prod_real = EPSILON; + sum_dot_prod_img = EPSILON; +#ifdef DEBUG_MODE_DFT + sum_nrg_L = EPSILON; + sum_nrg_R = EPSILON; +#endif + + /*------------------------------------------------------------------* + * Band-wise processing + *-----------------------------------------------------------------*/ + + b2 = 0; + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + pPredGain[b] = 1.f; + sum_nrg_L = EPSILON; + sum_nrg_R = EPSILON; + dot_prod_real = EPSILON; + dot_prod_img = EPSILON; + sum_past_nrgL = 0; + sum_past_nrgR = 0; + sum_past_dpr = 0; + sum_past_dpi = 0; + + while ( hStereoDft->band_limits_dmx[b2] < hStereoDft->band_limits[b + 1] ) + { + pDFT_L = DFT_L; + pDFT_R = DFT_R; + pNrgL = bin_nrgL; + pNrgR = bin_nrgR; + + sum_nrg_L2 = 0; + sum_nrg_R2 = 0; + dot_prod_real2 = 0; + dot_prod_img2 = 0; + + for ( i = hStereoDft->band_limits_dmx[b2]; i < hStereoDft->band_limits_dmx[b2 + 1]; i++ ) + { + sum_nrg_L2 += pNrgL[i]; + sum_nrg_R2 += pNrgR[i]; + + /* compute dot product*/ + dot_prod_real2 += pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; + dot_prod_img2 += pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; + } + + sum_past_nrgL2 = EPSILON; + sum_past_nrgR2 = EPSILON; + sum_past_dpr2 = EPSILON; + sum_past_dpi2 = EPSILON; + if ( ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_HIGH && b2 < STEREO_DFT_NRG_PAST_MAX_BAND ) || + ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_LOW && b2 < 2 * STEREO_DFT_NRG_PAST_MAX_BAND_LB ) ) + { + hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = sum_nrg_L2; + hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = sum_nrg_R2; + hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = dot_prod_real2; + hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = dot_prod_img2; + + for ( i = 0; i < STEREO_DFT_NRG_PAST_LEN; i++ ) + { + sum_past_nrgL2 += hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + i]; + sum_past_nrgR2 += hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + i]; + sum_past_dpr2 += hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + i]; + sum_past_dpi2 += hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + i]; + } + + if ( hStereoDft->attackPresent ) + { + /* omit transient frames from past part of parameter estimation in following frames */ + int16_t prev_pos = ( pos + STEREO_DFT_NRG_PAST_LEN - 1 ) % STEREO_DFT_NRG_PAST_LEN; + hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; + hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; + hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; + hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; + } + + sum_past_dot_prod_abs2 = sqrtf( sum_past_dpr2 * sum_past_dpr2 + sum_past_dpi2 * sum_past_dpi2 ); + dot_prod_nrg_ratio[b2] = sum_past_dot_prod_abs2 / ( sum_past_nrgL2 + sum_past_nrgR2 + EPSILON ); + } + else + { + sum_past_nrgL2 += sum_nrg_L2; + sum_past_nrgR2 += sum_nrg_R2; + dot_prod_nrg_ratio[b2] = sqrtf( dot_prod_real2 * dot_prod_real2 + dot_prod_img2 * dot_prod_img2 ); + if ( b2 == 2 * STEREO_DFT_NRG_PAST_MAX_BAND_LB ) /* hStereoDft->band_res[k_offset] == 2 */ + { + dot_prod_nrg_ratio[b2] /= ( sum_nrg_L2 + sum_nrg_R2 + EPSILON ); + } + } + sum_nrg_L += sum_nrg_L2; + sum_nrg_R += sum_nrg_R2; + dot_prod_real += dot_prod_real2; + dot_prod_img += dot_prod_img2; + + sum_past_nrgL += sum_past_nrgL2; + sum_past_nrgR += sum_past_nrgR2; + sum_past_dpr += sum_past_dpr2; + sum_past_dpi += sum_past_dpi2; + + b2++; + } + sum_energy_L += sum_nrg_L; /* Energies of the individual Band for Left and Right */ + sum_energy_R += sum_nrg_R; + sum_dot_prod_real += dot_prod_real; + sum_dot_prod_img += dot_prod_img; + + /* compute side and residual gains over two frames */ + abs_L_R = sqrtf( dot_prod_real * dot_prod_real + dot_prod_img * dot_prod_img ); + + if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_LOW && b < 4 ) + { + sum_past_dot_prod_abs = sqrtf( sum_past_dpr * sum_past_dpr + sum_past_dpi * sum_past_dpi ); + } + else if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_HIGH && b < 9 ) + { + sum_past_dot_prod_abs = sum_past_dot_prod_abs2; + } + else + { + sum_past_dot_prod_abs = abs_L_R; + } + + c = sqrtf( sum_past_nrgL / sum_past_nrgR ); + sum_past_nrg_dmx = sum_past_nrgL + sum_past_nrgR + 2 * sum_past_dot_prod_abs; + sub_nrg_DMX[b] = sum_nrg_L + sum_nrg_R + 2 * abs_L_R; + + sub_nrg_L[b] = sum_nrg_L; + sub_nrg_R[b] = sum_nrg_R; + + if ( ( hStereoDft->res_pred_mode[k_offset] && b >= hStereoDft->res_pred_band_min ) || ( b < hStereoDft->res_cod_band_max ) ) + { + g = ( sum_past_nrgL - sum_past_nrgR ) / ( sum_past_nrg_dmx ); + pSideGain[b] = g; + } + else + { + g = 0.0f; /* to avoid compilation warning */ + pSideGain[b] = ( c - 1 ) / ( c + 1 ); + } + + if ( hStereoDft->res_pred_mode[k_offset] && b >= hStereoDft->res_pred_band_min && !( hStereoDft->attackPresent ) ) + { + /*(1-g)^2*L*L' + (1+g)^2*R*R' - 2(1-g^2)*abs(L*R')*/ + pPredGain[b] = max( 0, ( ( 1 - g ) * sum_past_nrgL + ( 1 + g ) * sum_past_nrgR - 2 * sum_past_dot_prod_abs ) ); + + /*Normalized with energy of DMX*/ + + /*Regularized gain computation by adding a coherent low energy contribution->avoid singularity for very low energy signals */ + + reg = ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) * sqrtf( STEREO_DFT_N_32k_ENC ); + reg *= reg; + + pPredGain[b] = sqrtf( pPredGain[b] / ( reg + sum_past_nrg_dmx ) ); + + if ( hStereoDft->hItd->deltaItd[k_offset] != 0 ) + { + float gain_offset, conversion_factor; + int16_t dItd32; + + /* factor for converting deltaItd to 32kHz */ + conversion_factor = 1.f; + if ( hStereoDft->NFFT == STEREO_DFT_N_16k_ENC ) + { + conversion_factor = 2.f; + } + else if ( hStereoDft->NFFT == STEREO_DFT_N_MAX_ENC ) + { + conversion_factor = 2.f / 3; + } + dItd32 = (int16_t) floor( conversion_factor * hStereoDft->hItd->deltaItd[k_offset] + 0.5f ); + + gain_offset = stereo_dft_gain_offset( c, dItd32 ); + pPredGain[b] = max( 0, pPredGain[b] - gain_offset ); + } + + /*Limiter for active speech*/ + if ( sp_aud_decision0 == 0 && vad_flag ) + { + /*Avoid jump of residual prediction gain when ITD is changing*/ + if ( hStereoDft->hItd->deltaItd[k_offset] != hStereoDft->hItd->deltaItd[0] ) + { + pPredGain[b] = min( hStereoDft->res_pred_gain_f[b], pPredGain[b] ); + } + + /*Limiter*/ + hStereoDft->res_pred_gain_f[b] = 0.9f * hStereoDft->res_pred_gain_f[b] + 0.1f * pPredGain[b]; + pPredGain[b] = min( 1.1f * hStereoDft->res_pred_gain_f[b], pPredGain[b] ); + } + else + { + hStereoDft->res_pred_gain_f[b] = pPredGain[b]; + } + } + else + { + pPredGain[b] = 0.f; + } + + + if ( b < hStereoDft->gipd_band_max ) + { + gain_IPD += ( sum_nrg_L + sum_nrg_R + 2 * dot_prod_real ) / sub_nrg_DMX[b] / hStereoDft->gipd_band_max; + } + + if ( b == hStereoDft->gipd_band_max - 1 ) + { + hStereoDft->sum_dot_prod_real = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_real + hStereoDft->sfm * sum_dot_prod_real; + hStereoDft->sum_dot_prod_img = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_img + hStereoDft->sfm * sum_dot_prod_img; + + pgIpd[0] = (float) atan2( hStereoDft->sum_dot_prod_img, hStereoDft->sum_dot_prod_real ); + } + } + + hStereoDft->nrg_past_pos = ( pos + 1 ) % STEREO_DFT_NRG_PAST_LEN; + +#ifdef DEBUG_MODE_DFT + { + float tmp_f; + dbgwrite( pPredGain, sizeof( float ), hStereoDft->nbands, 1, "./res/stereo_dft_gainPred.pcm" ); + dbgwrite( pSideGain, sizeof( float ), hStereoDft->nbands, 1, "./res/stereo_dft_gainSide.pcm" ); + + for ( i = 0; i < hStereoDft->nbands; i++ ) + { + float regularization; + + regularization = ( hStereoDft->band_limits[i + 1] - hStereoDft->band_limits[i] ) * sqrtf( hStereoDft->NFFT ); + tmp_f = sub_nrg_DMX[i] / ( regularization * regularization ); + dbgwrite( &tmp_f, sizeof( float ), 1, 1, "./res/stereo_dft_nrgDMX.pcm" ); + + g = sqrtf( sum_nrg_L / sum_nrg_R ); + tmp_f = ( g - 1 ) / ( g + 1 ); + dbgwrite( &tmp_f, sizeof( float ), 1, 1, "./res/stereo_dft_gainILD.pcm" ); + } + } +#endif + + /*------------------------------------------------------------------* + * Compute IPDs + *-----------------------------------------------------------------*/ + +#ifdef DEBUG_MODE_DFT + stereo_dft_enc_get_nipd_flag( hStereoDft, pgIpd, sp_aud_decision0, gain_IPD ); +#else + stereo_dft_enc_get_nipd_flag( hStereoDft, sp_aud_decision0, gain_IPD ); +#endif + +#ifdef DEBUG_MODE_DFT + hStereoDft->no_ipd_flag = ( hStereoDft->hConfig->gipd_mode == 0 ) ? 1 : hStereoDft->no_ipd_flag; +#endif + + if ( flag_quant ) + { + if ( hStereoDft->no_ipd_flag == 0 ) + { + hStereoDft->sid_gipd = *pgIpd; + stereo_dft_quantize_ipd( pgIpd, pgIpd, &( hStereoDft->gipd_index ), STEREO_DFT_GIPD_NBITS ); + } + else + { + pgIpd[0] = 0; + } + } + diff_ipd = pgIpd[0] - pgIpd[-1]; + + if ( diff_ipd < -EVS_PI ) + { + pgIpd[0] += PI2; + } + else if ( diff_ipd > EVS_PI ) + { + pgIpd[0] -= PI2; + } + + if ( !hStereoDft->attackPresent ) + { + if ( hStereoDft->wasTransient ) + { + pgIpd[0] = 0.8f * pgIpd[0] + 0.2f * pgIpd[-1]; + } + else + { + pgIpd[0] = 0.5f * pgIpd[0] + 0.5f * pgIpd[-1]; + } + } + + c = sqrtf( sum_energy_L / sum_energy_R ); + g = fabsf( ( c - 1 ) / ( c + 1 ) ); + if ( g > 0.8f ) + { + g = max( 0.f, -10.f * g + 9.0f ); + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + pPredGain[b] *= g; + } + } + + if ( hStereoDft->hConfig->band_res == STEREO_DFT_BAND_RES_LOW ) + { + hStereoDft->reverb_flag = 1; + } + else + { + stereo_dft_enc_get_reverb_flag( hStereoDft, pPredGain, sub_nrg_DMX, sub_nrg_L, sub_nrg_R, k_offset, bin_nrgL, bin_nrgR ); + } + + + /*------------------------------------------------------------------* + * Compute Side gains + *-----------------------------------------------------------------*/ + + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + hStereoDft->sidSideGain[b] = *( pSideGain + b ); + + /* Quantization */ + if ( flag_quant ) + { + stereo_dft_quantize_res_gains( pSideGain + b, pPredGain + b, pSideGain + b, pPredGain + b, hStereoDft->side_gain_index_EC + b, hStereoDft->res_pred_index_EC + b ); + } + + + if ( !hStereoDft->attackPresent ) + { + if ( b < hStereoDft->res_cod_band_max ) + { + pSideGain[b] = dft_res_cod_alpha[b] * pSideGain[b] + ( 1 - dft_res_cod_alpha[b] ) * pSideGain[b - STEREO_DFT_BAND_MAX]; + } + } + } + + /*------------------------------------------------------------------* + * simulate prediction of parameters at the decoder + *-----------------------------------------------------------------*/ + + if ( hStereoDft->reverb_flag ) + { + int16_t ipred, bpred0, bpred1, max_dev, sum_abs_dev; + + ipred = 0; + max_dev = 0; + sum_abs_dev = 0; + + /* parameters for bred0 <= b < bpred1 are estimated from parameters of + the remaining bands with ptrans0 <= b < btrans1. */ + bpred1 = ( hStereoDft->nbands > 10 ) ? hStereoDft->nbands - 2 : hStereoDft->nbands; + bpred0 = bpred1 - STEREO_DFT_RES_PRED_BAND_MIN_CONST; + + /* get estimate (currently the maximal index) */ + for ( b = hStereoDft->res_pred_band_min; b < bpred0; b++ ) + { + ipred = max( ipred, hStereoDft->res_pred_index_EC[b] ); + } + + /* check prediction error */ + for ( b = bpred0; b < bpred1; b++ ) + { + max_dev = (int16_t) max( max_dev, abs( ipred - hStereoDft->res_pred_index_EC[b] ) ); + sum_abs_dev += (int16_t) abs( ipred - hStereoDft->res_pred_index_EC[b] ); + } + + hStereoDft->reverb_flag = ( max_dev <= 1 && sum_abs_dev <= 2 ); + + if ( hStereoDft->reverb_flag && hStereoDft->nbands > 10 ) /*SWB and FB*/ + { + for ( b = hStereoDft->nbands - 1; b >= hStereoDft->nbands - 2; b-- ) + { + hStereoDft->res_pred_index_EC[b - STEREO_DFT_RES_PRED_BAND_MIN_CONST] = hStereoDft->res_pred_index_EC[b]; + } + } +#ifdef DEBUG_MODE_DFT + if ( hStereoDft->reverb_flag ) + { + dbgwrite( &ipred, sizeof( ipred ), 1, 1, "./res/stereo_dft_enc_ipred" ); + } +#endif + } +#ifdef DEBUG_MODE_DFT + dbgwrite( &( hStereoDft->reverb_flag ), sizeof( int16_t ), 1, 640, "./res/stereo_dft_reverb_flag2.pcm" ); +#endif + + assert( hStereoDft->nbands <= 13 ); /* always use band_limits_erb4 and not band_limits_erb2 */ + + return; +} + + +/*---------------------------------------------------------------------* + * side_gain_mode_decision() + * + * + *---------------------------------------------------------------------*/ + +static void side_gain_mode_decision( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ + int16_t encoded_ind_GR[], + const int16_t sp_aud_decision0, /* i : Speech/audio decision 0 */ + const int32_t last_core_brate /* i : Last core bitrate */ +) +{ + int16_t try_diff, nb_diff, no_GR_ord, n_bits, i; + + try_diff = sp_aud_decision0; + if ( try_diff ) + { + if ( hStereoDft->side_gain_counter == STEREO_DFT_FEC_THRESHOLD ) + { + try_diff = 0; + hStereoDft->side_gain_counter = 0; + } + } + else + { + hStereoDft->side_gain_counter = 0; + } + + /* If last frame SID/NO_DATA do not use differential coding */ + if ( last_core_brate <= SID_2k40 ) + { + try_diff = 0; + } + no_GR_ord = 3; + hStereoDft->side_gain_flag_2 = adapt_GR_ief( hStereoDft->side_gain_index_EC, hStereoDft->side_gain_index_ECDiff, hStereoDft->side_gain_index_ECprevious, + hStereoDft->nbands, NO_SYMB_GR_SIDE_G, &n_bits, encoded_ind_GR, dft_maps_sg, no_GR_ord, &nb_diff, + hStereoDft->side_gain_counter, &hStereoDft->side_gain_bitdiff_lp, try_diff ); + + + for ( i = 0; i < hStereoDft->nbands; i++ ) + { + hStereoDft->side_gain_index_ECprevious[i] = hStereoDft->side_gain_index_EC[i]; + } + + if ( n_bits > ( hStereoDft->nbands * STEREO_DFT_SIDE_GAIN_NBITS - 1 ) ) + { + /* use fixed rate */ + hStereoDft->side_gain_flag_1 = 3; + hStereoDft->side_gain_counter = 0; + } + else + { + if ( hStereoDft->side_gain_flag_2 >= no_GR_ord ) + { + hStereoDft->side_gain_flag_1 = 2; + hStereoDft->side_gain_counter += 1; + } + else + { + hStereoDft->side_gain_flag_1 = 0; + hStereoDft->side_gain_counter = 0; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * res_pred_gain_mode_decision() + * + * + *---------------------------------------------------------------------*/ + +static void res_pred_gain_mode_decision( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ + int16_t encoded_ind_pred_GR[], + const int16_t k_offset, /* i : Parameter offset */ + const int32_t last_core_brate /* i : Last core bitrate */ +) +{ + int16_t nb_diff, try_diff, no_GR_ord, i, n_bits; + int16_t nbands; + + /* Residual Prediction Gain */ + if ( hStereoDft->res_pred_mode[k_offset] ) + { + if ( hStereoDft->attackPresent == 0 ) + { + nbands = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); + + if ( hStereoDft->reverb_flag ) + { + nbands -= STEREO_DFT_RES_PRED_BAND_MIN_CONST; + } + + try_diff = 1; + if ( hStereoDft->res_pred_counter == STEREO_DFT_FEC_THRESHOLD ) + { + try_diff = 0; + hStereoDft->res_pred_counter = 0; + } + + /* If last frame SID/NO_DATA do not use differential coding */ + if ( last_core_brate <= SID_2k40 ) + { + try_diff = 0; + } + + no_GR_ord = 2; + + hStereoDft->res_pred_flag_2 = adapt_GR_rpg1_ief( &hStereoDft->res_pred_index_EC[hStereoDft->res_pred_band_min], &hStereoDft->res_pred_index_ECDiff[hStereoDft->res_pred_band_min], &hStereoDft->res_pred_index_ECprevious[hStereoDft->res_pred_band_min], nbands - hStereoDft->res_pred_band_min, NO_SYMB_GR_PRED_G, &n_bits, encoded_ind_pred_GR, dft_maps_rpg, &nb_diff, no_GR_ord, try_diff ); + + for ( i = 0; i < nbands; i++ ) + { + hStereoDft->res_pred_index_ECprevious[i] = hStereoDft->res_pred_index_EC[i]; + } + + for ( ; i < hStereoDft->nbands; i++ ) + { + hStereoDft->res_pred_index_ECprevious[i] = 0; + } + + if ( n_bits > ( nbands - hStereoDft->res_pred_band_min ) * STEREO_DFT_RES_GAINS_BITS - 1 ) + { + hStereoDft->res_pred_flag_1 = 3; + hStereoDft->res_pred_counter = 0; + } + else + { + if ( hStereoDft->res_pred_flag_2 > 1 ) + { + /* differential coding */ + hStereoDft->res_pred_flag_1 = 2; + hStereoDft->res_pred_counter += 1; + } + else + { + hStereoDft->res_pred_counter = 0; + hStereoDft->res_pred_flag_1 = 0; + } + } + } + else + { + set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); + } + } + else + { + set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_enc_get_nipd_flag() + * + * + *------------------------------------------------------------------------*/ + +static void stereo_dft_enc_get_nipd_flag( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, +#ifdef DEBUG_MODE_DFT + float *pgIpd, +#endif + const int16_t sp_aud_decision0, + const float gainIPD ) +{ + hStereoDft->gainIPD_sm = 0.5f * hStereoDft->gainIPD_sm + 0.5f * gainIPD; /* to decide on use of no IPD */ + + hStereoDft->no_ipd_flag = 0; /* Set flag initially to zero - subband IPD */ + + if ( hStereoDft->gainIPD_sm >= 0.75f || ( hStereoDft->prev_no_ipd_flag && ( sp_aud_decision0 || hStereoDft->voicing_lt > 0.98f ) ) ) + { + hStereoDft->no_ipd_flag = 1; /* Set the flag */ + } + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp; + dbgwrite( &( hStereoDft->no_ipd_flag ), sizeof( int16_t ), 1, 640, "./res/stereo_dft_nipd_first.pcm" ); + tmp = (int16_t) ( hStereoDft->gainIPD_sm * 100.f ); + dbgwrite( &tmp, sizeof( int16_t ), 1, 640, "./res/stereo_dft_gipd_gain_IPD.pcm" ); + dbgwrite( pgIpd, sizeof( float ), 1, 1, "./res/stereo_dft_gipd_IPD.pcm" ); + } +#endif + + /* hangover between the group IPD and subband IPD */ + if ( hStereoDft->prev_no_ipd_flag != hStereoDft->no_ipd_flag && hStereoDft->no_ipd_cnt < 5 ) + { + hStereoDft->no_ipd_flag = hStereoDft->prev_no_ipd_flag; + hStereoDft->no_ipd_cnt++; + } + else + { + hStereoDft->no_ipd_cnt = 0; + } + + hStereoDft->prev_no_ipd_flag = hStereoDft->no_ipd_flag; /* Save the no IPD flag for the next frame */ + +#ifdef DEBUG_MODE_DFT + /*fprintf(pF2, "%d\n",hStereoDft->no_ipd_flag);*/ + dbgwrite( &( hStereoDft->no_ipd_flag ), sizeof( int16_t ), 1, 640, "./res/stereo_dft_nipd_final.pcm" ); +#endif + + return; +} + + +/*--------------------------------------------------------------- + * stereo_dft_enc_get_reverb_flag() + * + * + * ---------------------------------------------------------------*/ + +static void stereo_dft_enc_get_reverb_flag( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, + float *pPredGain, + float *sub_nrg_DMX, + const float *sub_nrg_L, + const float *sub_nrg_R, + const int16_t k_offset, + const float *bin_nrgL, + const float *bin_nrgR ) +{ + int16_t i, b, b1, index_min, nbands; + float nrg_DMX_min; + float norm_r, norm_l, norm_dmx; + float diff_l_l, diff_r_l, diff_l_h, diff_r_h; + float ener_l, ener_r, ener_dmx; + float nrg_DMX_max_avrg, nrg_DMX_min_avrg; + float fac; + + hStereoDft->reverb_flag = 0; + if ( hStereoDft->res_pred_mode[k_offset] && hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { + diff_r_l = EPSILON; + diff_l_l = EPSILON; + diff_r_h = EPSILON; + diff_l_h = EPSILON; + + for ( b = 0; b <= min( hStereoDft->nbands, 6 ); b++ ) /* choose the subbands used for stereo filling */ + { + norm_dmx = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_DMX[b] ); + norm_l = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_L[b] ); + norm_r = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_R[b] ); + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) /* normalization on each subbands */ + { + ener_l = bin_nrgL[i]; + ener_r = bin_nrgR[i]; + ener_dmx = ( ener_l + ener_r + 2 * sqrtf( ener_l * ener_r ) ) * norm_dmx; /*approximation of nrg of DMX per line*/ + ener_l *= norm_l; + ener_r *= norm_r; + + diff_l_l += fabsf( ener_l - ener_dmx ); + diff_r_l += fabsf( ener_r - ener_dmx ); + } + } + if ( hStereoDft->nbands <= 10 ) + { + for ( ; b < min( hStereoDft->nbands, 10 ); b++ ) /* choose the subbands used for stereo filling */ + { + norm_dmx = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_DMX[b] ); + norm_l = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_L[b] ); + norm_r = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_R[b] ); + + for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) /* normalization on each subbands */ + { + ener_l = bin_nrgL[i]; + ener_r = bin_nrgR[i]; + ener_dmx = ( ener_l + ener_r + 2 * sqrtf( ener_l * ener_r ) ) * norm_dmx; /*approximation of nrg of DMX per line*/ + ener_l *= norm_l; + ener_r *= norm_r; + + diff_l_h += fabsf( ener_l - ener_dmx ); + diff_r_h += fabsf( ener_r - ener_dmx ); + } + } + } + + for ( b = 0; b < hStereoDft->nbands; b++ ) /* choose the subbands used for stereo filling */ + { + sub_nrg_DMX[b] /= ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ); + sub_nrg_DMX[b] = 0.6f * hStereoDft->pre_sub_nrg_DMX[b] + 0.4f * sub_nrg_DMX[b]; + hStereoDft->pre_sub_nrg_DMX[b] = sub_nrg_DMX[b]; + } + + /* adaptively select the subbands to predict based on the energy */ + nbands = ( hStereoDft->nbands > 10 ) ? ( hStereoDft->nbands - 2 ) : hStereoDft->nbands; + nrg_DMX_min_avrg = 0.0f; + for ( b = 2; b < STEREO_DFT_RES_PRED_BAND_MIN_RED; b++ ) + { + nrg_DMX_min = sub_nrg_DMX[b]; + index_min = b; + + for ( b1 = 2; b1 < nbands; b1++ ) + { + if ( nrg_DMX_min > sub_nrg_DMX[b1] ) + { + nrg_DMX_min = sub_nrg_DMX[b1]; + index_min = b1; + } + } + + nrg_DMX_min_avrg += nrg_DMX_min; + sub_nrg_DMX[index_min] = FLT_MAX; + } + + nrg_DMX_max_avrg = 0.0f; + for ( b = 2, b1 = STEREO_DFT_RES_PRED_BAND_MIN_RED; b < nbands; b++ ) + { + if ( sub_nrg_DMX[b] != FLT_MAX ) + { + nrg_DMX_max_avrg += sub_nrg_DMX[b]; + } + } + + if ( hStereoDft->nbands <= 10 ) /*WB*/ + { + if ( hStereoDft->res_pred_mode[0] == STEREO_DFT_RESPRED_OFF || hStereoDft->hConfig->res_cod_mode != STEREO_DFT_RES_COD_OFF ) + { + hStereoDft->diff_l_h_sm = diff_l_h; + hStereoDft->diff_r_h_sm = diff_r_h; + } + else + { + hStereoDft->diff_l_h_sm = 0.9f * hStereoDft->diff_l_h_sm + 0.1f * diff_l_h; + hStereoDft->diff_r_h_sm = 0.9f * hStereoDft->diff_r_h_sm + 0.1f * diff_r_h; + } + + if ( hStereoDft->diff_l_h_sm > 120.0f || hStereoDft->diff_r_h_sm > 120.0f ) + { + hStereoDft->reverb_flag = 1; + } + } + else /*SWB/FB*/ + { + if ( 3 * nrg_DMX_max_avrg > 64 * 5 * nrg_DMX_min_avrg ) + { + hStereoDft->reverb_flag = 1; + } + } + + /*Stereo Filling gain damping*/ + fac = ( ( diff_l_l > diff_r_l ) ? diff_r_l / diff_l_l : diff_l_l / diff_r_l ); + fac = fac > 0.25f ? 1.0f : 4.f * fac; + fac = 0.98f * hStereoDft->prev_fac2 + 0.02f * fac; + hStereoDft->prev_fac2 = fac; + + for ( b = 0; b < hStereoDft->nbands; b++ ) + { + if ( b < 5 ) + { + pPredGain[b] *= max( 0.5f, fac ); + } + else + { + pPredGain[b] *= min( 1.0f, max( 0.75f, 0.5f + fac ) ); + } + } + } + +#ifdef DEBUG_MODE_DFT + dbgwrite( &( hStereoDft->reverb_flag ), sizeof( int16_t ), 1, 640, "./res/stereo_dft_reverb_flag.pcm" ); +#endif + + return; +} + +/*--------------------------------------------------------------- + * stereo_dft_gain_offset() + * + * c = gain between L and R, itd = itd in samples @ 32kHz + * ---------------------------------------------------------------*/ + +static float stereo_dft_gain_offset( + const float c, + const int16_t itd ) +{ + float wnt, go, alpha; + int16_t tau, k0; + + tau = (int16_t) min( abs( itd ), 160 ); + /* Wn_table contains every 8th sample of the window's cross-correlation + * function @ 32kHz from which the values are interpolated: */ + k0 = tau >> 3; + alpha = ( tau & 7 ) / 8.f; + wnt = ( 1 - alpha ) * Wn_table[k0] + alpha * Wn_table[k0 + 1]; + + go = sqrtf( 8 * c * c / ( ( 1 + c ) * ( 1 + c ) ) * ( 1 - wnt ) / ( 1 + c * c + 2 * c * wnt ) ); + + return go; +} + +/*--------------------------------------------------------------- + * stereo_dft_enc_calculate_nrg_for_icbwe() + * + * calculate energy of downmix and left and right channel in the + * SHB region for later use in ICBWE + * ---------------------------------------------------------------*/ + +static void stereo_dft_enc_calculate_nrg_for_icbwe( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ + const float *DMX, /* i : DFT Stereo downmix */ + const int32_t input_Fs /* i : input sampling rate */ +) +{ + float *pDFT_L, *pDFT_R, bandResDft; + int16_t i, shbBins[3]; + + bandResDft = ( (float) input_Fs ) / hStereoDft->NFFT; + shbBins[0] = (int16_t) ( 6400 / bandResDft ); + shbBins[1] = (int16_t) ( 10400 / bandResDft ); + shbBins[2] = (int16_t) ( 14400 / bandResDft ); + assert( shbBins[1] <= hStereoDft->NFFT / 2 ); + + set_f( hStereoDft->nrg_L, EPSILON, 2 ); + set_f( hStereoDft->nrg_R, EPSILON, 2 ); + set_f( hStereoDft->nrg_DMX, EPSILON, 2 ); + + pDFT_L = hStereoDft->DFT[0]; + pDFT_R = hStereoDft->DFT[1]; + + for ( i = shbBins[0]; i < shbBins[1]; i++ ) + { + hStereoDft->nrg_L[0] += pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; + hStereoDft->nrg_R[0] += pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; + hStereoDft->nrg_DMX[0] += DMX[2 * i] * DMX[2 * i] + DMX[2 * i + 1] * DMX[2 * i + 1]; + } + for ( ; i < shbBins[2]; i++ ) + { + hStereoDft->nrg_L[1] += pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; + hStereoDft->nrg_R[1] += pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; + hStereoDft->nrg_DMX[1] += DMX[2 * i] * DMX[2 * i] + DMX[2 * i + 1] * DMX[2 * i + 1]; + } + + return; +} diff --git a/lib_enc/ivas_stereo_dft_enc_itd.c b/lib_enc/ivas_stereo_dft_enc_itd.c new file mode 100644 index 0000000000..4c1967c2ad --- /dev/null +++ b/lib_enc/ivas_stereo_dft_enc_itd.c @@ -0,0 +1,1598 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define LP_GCC_PHAT_UP 0.9f /* LP filter coefficient, going up */ +#define LP_GCC_PHAT_DOWN 0.1f /* LP filter coefficient, going down */ +#define ITD_CNT_MAX 2 /* Minimum number of consecutive ITD estimates for ITD hangover */ +#define ITD_HO_GCC_PHAT_MAX 0.6f /* LP GCC PHAT value which gives zero hangover */ +#define ITD_HO_GCC_PHAT_MIN 0.3f /* LP GCC PHAT value which gives ITD_HO_MAX ITD hangover frames */ +#define ITD_HO_MAX 6 /* Maximum number of ITD hangover frames */ +#define ITD_HO_GCC_PHAT_INCL ( -( ITD_HO_MAX - 1 ) / ( ITD_HO_GCC_PHAT_MAX - ITD_HO_GCC_PHAT_MIN ) ) +#define ITD_HO_GCC_PHAT_OFFS ( -ITD_HO_GCC_PHAT_INCL * ITD_HO_GCC_PHAT_MAX + 1 ) +#define SFM_PROD_GRP 4 /*maximum grouping of products for calculating SFM in ITD estimation*/ +#define B_DENOM 0.083333333333333f +#define L_SAMPLES 20 +#define SUBDIV ( 2 * STEREO_DFT_ITD_MAX_ANA / L_SAMPLES ) +#define DENOM 0.05f + +#define XSPEC_ALPHA ( 1.f / 32 ) + +#define ITD_VAD_NOISE_INIT_FRAMES 30 +#define ITD_VAD_THRSHOLD 0.001f +#define ITD_VAD_MS_SNR_UPDATE_THRESH 15.0f +#define HIGHT_SNR_VOICE_TH 10000.0f +#define MAX_ITD_VAD_HANGOVER 10 + +#define XCORR_LB_NUM_BANDS 3 +#define XCORR_LB_BAND_WIDTH 8 + +#define ITD_MAX_MDCT 80 + + +#ifdef ITD_WINNER_GAIN_MODIFY +/*------------------------------------------------------------------------- + * stereo_dft_frame_coherence() + * Calculate the frame coherence of the stereo signal + * + *-------------------------------------------------------------------------*/ + +static void stereo_dft_frame_coherence( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, + float *xcorr, + float *Spd_L, + float *Spd_R, + float *frame_coherence ) +{ + float spd_xcorr_real, spd_xcorr_imag, spd_LR; + int16_t i, NFFT; + + NFFT = min( STEREO_DFT_N_32k_ENC, hStereoDft->NFFT ); + spd_xcorr_real = 0.0f; + spd_xcorr_imag = 0.0f; + spd_LR = 0.0f; + *frame_coherence = 0.0f; + + for ( i = 1; i < NFFT / 2; i++ ) + { + spd_xcorr_real += (float) xcorr[i * 2]; + spd_xcorr_imag += (float) xcorr[i * 2 + 1]; + spd_LR += (float) sqrt( Spd_L[i] ) * sqrt( Spd_R[i] ); + } + + *frame_coherence = (float) ( sqrt( spd_xcorr_real * spd_xcorr_real + spd_xcorr_imag * spd_xcorr_imag ) / spd_LR ); + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_itd_winner_gain() + * Estimate the spectral power density of noise in the stereo signal and + * calculate the winner gain for the ITD estimation + *-------------------------------------------------------------------------*/ + +static void stereo_dft_itd_winner_gain( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, + float *Spd_L, + float *Spd_R ) +{ + int16_t i; + float alpha1 = 0.05f; + float alpha2 = 0.95f; + float trackingfactor = 0.5f; + float ratio = 2.75f; + + for ( i = 0; i < STEREO_DFT_N_16k_ENC / 2; i++ ) + { + if ( hStereoDft->spd_L_noise_min[i] > Spd_L[i] ) + { + hStereoDft->spd_L_noise_min[i] = ( 1 - 0.15 ) * hStereoDft->spd_L_noise_min[i] + 0.15 * Spd_L[i]; + } + else + { + hStereoDft->spd_L_noise_min[i] = hStereoDft->spd_L_noise_min[i] + alpha1 * ( Spd_L[i] - hStereoDft->spd_L_noise_min[i] ); + } + if ( hStereoDft->spd_R_noise[i] > Spd_R[i] ) + { + hStereoDft->spd_R_noise_min[i] = ( 1 - 0.15 ) * hStereoDft->spd_R_noise_min[i] + 0.15 * Spd_R[i]; + } + else + { + hStereoDft->spd_R_noise_min[i] = hStereoDft->spd_R_noise_min[i] + alpha1 * ( Spd_R[i] - hStereoDft->spd_R_noise_min[i] ); + } + if ( hStereoDft->spd_L_noise_max[i] < Spd_L[i] ) + { + hStereoDft->spd_L_noise_max[i] = Spd_L[i]; + } + else + { + hStereoDft->spd_L_noise_max[i] = hStereoDft->spd_L_noise_max[i] + alpha2 * ( Spd_L[i] - hStereoDft->spd_L_noise_max[i] ); + } + if ( hStereoDft->spd_R_noise_max[i] < Spd_R[i] ) + { + hStereoDft->spd_R_noise_max[i] = Spd_R[i]; + } + else + { + hStereoDft->spd_R_noise_max[i] = hStereoDft->spd_R_noise_max[i] + alpha2 * ( Spd_R[i] - hStereoDft->spd_R_noise_max[i] ); + } + if ( hStereoDft->spd_L_noise_max[i] > ratio * hStereoDft->spd_L_noise_min[i] ) + { + hStereoDft->spd_L_noise[i] = hStereoDft->spd_L_noise[i]; + hStereoDft->winner_gain_L[i] = ( Spd_L[i] - hStereoDft->spd_L_noise[i] ) / Spd_L[i]; + } + else + { + hStereoDft->spd_L_noise[i] = hStereoDft->spd_L_noise[i] + trackingfactor * ( Spd_L[i] - hStereoDft->spd_L_noise[i] ); + hStereoDft->winner_gain_L[i] = ( Spd_L[i] - hStereoDft->spd_L_noise[i] ) / Spd_L[i]; + } + if ( hStereoDft->spd_R_noise_max[i] > ratio * hStereoDft->spd_R_noise_min[i] ) + { + hStereoDft->spd_R_noise[i] = hStereoDft->spd_R_noise[i]; + hStereoDft->winner_gain_R[i] = ( Spd_R[i] - hStereoDft->spd_R_noise[i] ) / Spd_R[i]; + } + else + { + hStereoDft->spd_R_noise[i] = hStereoDft->spd_R_noise[i] + trackingfactor * ( Spd_R[i] - hStereoDft->spd_R_noise[i] ); + hStereoDft->winner_gain_R[i] = ( Spd_R[i] - hStereoDft->spd_R_noise[i] ) / Spd_R[i]; + } + } + + for ( i = 0; i < STEREO_DFT_N_16k_ENC / 2; i++ ) + { + hStereoDft->winner_gain_L[i] = max( hStereoDft->winner_gain_L[i], 0.01f ); + hStereoDft->winner_gain_R[i] = max( hStereoDft->winner_gain_R[i], 0.01f ); + hStereoDft->winner_gain_L[i] = min( hStereoDft->winner_gain_L[i], 1.0f ); + hStereoDft->winner_gain_R[i] = min( hStereoDft->winner_gain_R[i], 1.0f ); + if ( hStereoDft->winner_gain_L[i] >= 0.80f ) + hStereoDft->winner_gain_L[i] = 1.0f; + else + hStereoDft->winner_gain_L[i] = 0.01f; + if ( hStereoDft->winner_gain_R[i] >= 0.80f ) + hStereoDft->winner_gain_R[i] = 1.0f; + else + hStereoDft->winner_gain_R[i] = 0.01f; + } + + return; +} +#endif + +/*------------------------------------------------------------------------- + * set_band_limits() + * + * configure bands as used in DFT Stereo + *------------------------------------------------------------------------*/ + +static void set_band_limits( + int16_t *nbands, + int16_t band_limits[STEREO_DFT_BAND_MAX + 1], + int16_t NFFT ) +{ + band_limits[0] = 1; + *nbands = 0; + while ( band_limits[( *nbands )++] < NFFT / 2 ) + { + band_limits[*nbands] = (int16_t) round_f( dft_band_limits_erb4[*nbands] * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); + } + ( *nbands )--; + band_limits[*nbands] = NFFT / 2; /*Nyquist Freq*/ + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_hybrid_ITD_flag() + * + * Get the hybrid ITD flag + *------------------------------------------------------------------------*/ + +void stereo_dft_hybrid_ITD_flag( + STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ + const int32_t input_Fs /* i : CPE element sampling rate */ +) +{ + if ( hConfig != NULL ) + { + if ( hConfig->res_cod_mode || ( hConfig->ada_wb_res_cod_mode && input_Fs == 16000 ) ) + { + hConfig->hybrid_itd_flag = 1; + } + else + { + hConfig->hybrid_itd_flag = 0; + } + } + else + { + assert( 0 && "Stereo Dft Config Data Handle is uninitialized" ); + } + + return; +} + + +/*------------------------------------------------------------------------- + * stereo_dft_quantize_itd() + * + * Quantize the ITD + *------------------------------------------------------------------------*/ + +static void stereo_dft_quantize_itd( + const int16_t in, + float *out, + const int32_t input_Fs, + int16_t *ind ) +{ + int16_t itd; + + itd = (int16_t) ( sign( in ) * 0.5f + in ); + + /*Limit ITD*/ + if ( ( ABSVAL( itd ) > STEREO_DFT_ITD_MAX ) || ( ABSVAL( itd ) < STEREO_DFT_ITD_MIN ) ) + { + itd = 0; + } + else + { + *ind = ( ( itd < 0 ) << ( STEREO_DFT_ITD_NBITS - 1 ) ) + ABSVAL( itd ) - STEREO_DFT_ITD_MIN; + } + + /*Convert back @ fs*/ + *out = (float) ( itd * input_Fs ) / ( (float) ( STEREO_DFT_ITD_FS ) ); + + return; +} + + +/*------------------------------------------------------------------------- + * itd_vad_ms_snr_calc() + * + * + *-------------------------------------------------------------------------*/ + +static float itd_vad_ms_snr_calc( + float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], + float *Spd, + float *E_band ) +{ + float snr[STEREO_DFT_ITD_VAD_BAND_NUM]; + float msnr[STEREO_DFT_ITD_VAD_BAND_NUM]; + float ms_snr; + int16_t i, j; + + for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) + { + E_band[i] = 0; + for ( j = itd_vad_band_tbl[i]; j < itd_vad_band_tbl[i + 1]; j++ ) + { + E_band[i] += Spd[j]; + } + E_band[i] = E_band[i] / ( itd_vad_band_tbl[i + 1] - itd_vad_band_tbl[i] ); + } + + ms_snr = 0; + for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) + { + snr[i] = E_band[i] / E_band_n[i]; + if ( snr[i] < 1 ) + { + snr[i] = 1; + } + msnr[i] = snr[i] - 1.0f; + if ( msnr[i] < 6 ) + { + msnr[i] = powf( msnr[i], 2 ) / 6.0f; + } + ms_snr += msnr[i]; + } + + return ( ms_snr ); +} + + +/*------------------------------------------------------------------------- + * itd_vad_background_update() + * + * + *-------------------------------------------------------------------------*/ + +static void itd_vad_background_update( + float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], + int16_t *vad_frm_cnt, + const float ms_snr, + float *E_band ) +{ + int16_t i; + float energy; + + energy = 0.0f; + for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) + { + energy += E_band[i] / (float) STEREO_DFT_ITD_VAD_BAND_NUM; + } + + if ( *vad_frm_cnt < ITD_VAD_NOISE_INIT_FRAMES ) + { + ( *vad_frm_cnt )++; + } + + if ( ( *vad_frm_cnt < ITD_VAD_NOISE_INIT_FRAMES ) && energy < 40000000 ) + { + for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) + { + /* using the init values as frame (-1) values */ + E_band_n[i] = ( E_band_n[i] * ( (float) ( *vad_frm_cnt ) ) + E_band[i] ) / ( (float) ( *vad_frm_cnt + 1 ) ); + } + } + else + { + if ( ms_snr < ITD_VAD_MS_SNR_UPDATE_THRESH ) + { + for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) + { + E_band_n[i] = 0.96f * E_band_n[i] + 0.04f * E_band[i]; + if ( E_band_n[i] < 1.0f ) + { + E_band_n[i] = 1.0f; + } + } + } + } + + return; +} + +/*------------------------------------------------------------------------- + * stereo_dft_enc_itd_vad() + * + * + *-------------------------------------------------------------------------*/ + +static int16_t stereo_dft_enc_itd_vad( + float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], + int16_t *vad_frm_cnt, + float *Spd_L, + float *Spd_R, + float *mssnr ) +{ + int16_t i; + float E_band[STEREO_DFT_ITD_VAD_BAND_NUM]; + int16_t vad_flag_itd; + + float Spd[STEREO_DFT_N_16k_ENC / 2 + 1]; + + for ( i = 0; i <= STEREO_DFT_N_16k_ENC / 2; i++ ) + { + Spd[i] = 0.5f * ( Spd_L[i] + Spd_R[i] ); + } + + *mssnr = itd_vad_ms_snr_calc( E_band_n, Spd, E_band ); + + itd_vad_background_update( E_band_n, vad_frm_cnt, *mssnr, E_band ); + + if ( *mssnr < ITD_VAD_THRSHOLD ) + { + vad_flag_itd = 0; + } + else + { + vad_flag_itd = 1; + } + + return ( vad_flag_itd ); +} + + +/*------------------------------------------------------------------------- + * calc_mean_E_ratio() + * + * calculates mean energy of main-to-background signal ratio + *-------------------------------------------------------------------------*/ + +static float calc_mean_E_ratio( + ITD_DATA_HANDLE hItd, + int16_t nbands, + int16_t band_limits[], + const int16_t NFFT, + const float sfm, + const float nrg_L[STEREO_DFT_N_32k_ENC / 2], + const float nrg_R[STEREO_DFT_N_32k_ENC / 2], + float *total_mEr ) +{ + float sum_xcorr[2]; + float Sxcorr; + float Er[STEREO_DFT_BAND_MAX], fi[STEREO_DFT_BAND_MAX], a, acorr; + float sum_nrg_L, sum_nrg_R; + int16_t b, i; + float sum_Er; + float total_fi; + float grand_nrg_L, grand_nrg_R, grand_sum_xcorr_real, grand_sum_xcorr_img; + + grand_nrg_L = 0.0f; + grand_nrg_R = 0.0f; + grand_sum_xcorr_real = 0.0f; + grand_sum_xcorr_img = 0.0f; + + /*take bands up to 32kHz bandwidth as ITD is always calculated at 32kHz sampling rate*/ + nbands -= ( NFFT > STEREO_DFT_N_32k_ENC ); + + sum_Er = 0; + for ( b = 0; b < nbands; b++ ) + { + /*reset buffers*/ + sum_xcorr[0] = 0.f; + sum_xcorr[1] = 0.f; + sum_nrg_L = 0.f; + sum_nrg_R = 0.f; + + for ( i = band_limits[b]; i < min( band_limits[b + 1], STEREO_DFT_N_32k_ENC / 2 ); i++ ) + { + sum_xcorr[0] += hItd->xcorr_smooth[2 * i]; + sum_xcorr[1] += hItd->xcorr_smooth[2 * i + 1]; + sum_nrg_L += nrg_L[i]; + sum_nrg_R += nrg_R[i]; + } + + Sxcorr = sum_xcorr[0] * sum_xcorr[0] + sum_xcorr[1] * sum_xcorr[1]; + hItd->acorr_L[b] = ( 1.f - sfm ) * hItd->acorr_L[b] + sfm * sum_nrg_L; + hItd->acorr_R[b] = ( 1.f - sfm ) * hItd->acorr_R[b] + sfm * sum_nrg_R; + + a = hItd->acorr_L[b] - hItd->acorr_R[b]; + acorr = hItd->acorr_L[b] + hItd->acorr_R[b]; + fi[b] = sqrtf( a * a + 4 * Sxcorr ); + Er[b] = ( acorr + fi[b] ) / ( acorr - fi[b] + EPSILON ); + sum_Er += Er[b]; + + grand_nrg_L += sum_nrg_L; + grand_nrg_R += sum_nrg_R; + grand_sum_xcorr_real += sum_xcorr[0]; + grand_sum_xcorr_img += sum_xcorr[1]; + } + + Sxcorr = grand_sum_xcorr_real * grand_sum_xcorr_real + grand_sum_xcorr_img * grand_sum_xcorr_img; + a = grand_nrg_L - grand_nrg_R; + acorr = grand_nrg_L + grand_nrg_R; + total_fi = sqrtf( a * a + 4 * Sxcorr ); + *total_mEr = ( acorr + total_fi ) / ( acorr - total_fi + EPSILON ); + + return ( sum_Er * B_DENOM ); +} + + +/*------------------------------------------------------------------------- + * resetEstimates() + * + * resets long term estimates to initial values. + *-------------------------------------------------------------------------*/ + +static void resetEstimates( + ITD_DATA_HANDLE hItd ) +{ + set_zero( hItd->xcorr_smooth, STEREO_DFT_N_32k_ENC ); + set_zero( hItd->acorr_L, STEREO_DFT_BAND_MAX ); + set_zero( hItd->acorr_R, STEREO_DFT_BAND_MAX ); + hItd->cohSNR = 15; + + return; +} + +/*------------------------------------------------------------------------- + * td_sm_filter() + * + * time-domain smoothing filter for smoothing the cross-correlation vector + *-------------------------------------------------------------------------*/ + +static void td_sm_filter( + float *x, + float *y, + const int16_t L ) +{ + int16_t i; + float tmp_x[STEREO_DFT_N_32k_ENC + 1]; + float a0, a1; + + set_f( tmp_x, 0, STEREO_DFT_N_32k_ENC + 1 ); + mvr2r( x, tmp_x, L ); + + a0 = 0.5f; + a1 = 0.25f; + + y[0] = a0 * tmp_x[0] + a1 * x[1]; + for ( i = 1; i < L; i++ ) + { + y[i] = a1 * tmp_x[i + 1] + a0 * tmp_x[i] + a1 * tmp_x[i - 1]; + } + + return; +} + +/*------------------------------------------------------------------------- + * peak_detect() + * + * function for calculating the threshold for peak detection of the + * cross-correlation vector + *-------------------------------------------------------------------------*/ + +static float peak_detect( + float *xcorr_itd, + float *max_max, + int16_t *index, + int16_t *zero_itd_flag, + const float snr, + const int16_t vad, + float *second_max, + int16_t *second_max_lag, + const float prev_itd, + const int16_t flag_noisy_speech_snr, + const int16_t detected_itd_flag, + float *prev_max, + int16_t *prev_index, + float *prev_avg_max, + float *total_max ) +{ + int16_t i; + float tmp_max[SUBDIV], tmp_xcorr_itd[2 * STEREO_DFT_ITD_MAX_ANA + 1], tmp_xcorr_itd_sm[2 * STEREO_DFT_ITD_MAX_ANA + 1]; + int16_t index_subd[SUBDIV], ind; + float avg_max, max_low, max_high, sum_max, tmp_max_max; + float thres_diff; + float wfac; + int16_t d, i1, i2; + + wfac = 2.5f; + if ( snr > 50.f ) + { + wfac = 3.f; + } + + /*detect maxima outside the [-5, 5] ms boundaries */ + maximum( xcorr_itd, STEREO_DFT_N_32k_ENC / 2 - STEREO_DFT_ITD_MAX_ANA, &max_low ); + maximum( xcorr_itd + STEREO_DFT_N_32k_ENC / 2 + STEREO_DFT_ITD_MAX_ANA + 1, STEREO_DFT_N_32k_ENC / 2 - STEREO_DFT_ITD_MAX_ANA - 1, &max_high ); + + /* create temp buffer that includes xcorr within [-5, 5] ms */ + mvr2r( xcorr_itd + STEREO_DFT_N_32k_ENC / 2 - STEREO_DFT_ITD_MAX_ANA, tmp_xcorr_itd, 2 * STEREO_DFT_ITD_MAX_ANA + 1 ); + + *index = maximumAbs( tmp_xcorr_itd, 2 * STEREO_DFT_ITD_MAX_ANA + 1, max_max ); + *total_max = *max_max; + + d = max( 2, (int16_t) round_f( fabsf( prev_itd ) / 16.f ) ); + i1 = max( 0, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA - d ); + i2 = min( 2 * STEREO_DFT_ITD_MAX_ANA, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA + d ); + *second_max_lag = maximumAbs( tmp_xcorr_itd + i1, i2 - i1 + 1, second_max ); + *second_max_lag += i1; + + + /*if maximum is out of boundaries signal zero itd OR maximum value is negative*/ + *zero_itd_flag = ( *max_max < max_low || *max_max < max_high ); + + if ( *zero_itd_flag ) + { + return 0; + } + else + { + sum_max = 0; + + if ( snr >= 25.f ) + { + /*apply smoothing filter*/ + td_sm_filter( tmp_xcorr_itd, tmp_xcorr_itd_sm, 2 * STEREO_DFT_ITD_MAX_ANA + 1 ); + + /*subdivide the area of interest and look for local maxima*/ + for ( i = 0; i < SUBDIV - 1; i++ ) + { + index_subd[i] = maximumAbs( &tmp_xcorr_itd_sm[i * L_SAMPLES], L_SAMPLES, &tmp_max[i] ); + sum_max += tmp_max[i]; + } + + index_subd[i] = maximumAbs( &tmp_xcorr_itd_sm[i * L_SAMPLES], L_SAMPLES + 1, &tmp_max[i] ); + sum_max += tmp_max[i]; + + ind = maximumAbs( tmp_max, SUBDIV, &tmp_max_max ); + + /*final position of maxmimum*/ + *index = index_subd[ind] + ind * L_SAMPLES; + *max_max = tmp_max_max; + /*calculate average of all maxima to determine the threshold*/ + avg_max = sum_max * DENOM; + + d = max( 2, (int16_t) round_f( fabsf( prev_itd ) / 16.f ) ); + i1 = max( 0, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA - d ); + i2 = min( 2 * STEREO_DFT_ITD_MAX_ANA, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA + d ); + *second_max_lag = maximumAbs( tmp_xcorr_itd_sm + i1, i2 - i1 + 1, second_max ); + *second_max_lag += i1; + } + else + { + /*determine weight for threshold depending on snr value*/ + if ( snr <= 20.f && snr > 15.f ) + { + wfac = snr * 0.1f + 0.5f; + } + else + { + wfac = 2.5f; + } + + for ( i = 0; i < SUBDIV - 1; i++ ) + { + index_subd[i] = maximumAbs( &tmp_xcorr_itd[i * L_SAMPLES], L_SAMPLES, &tmp_max[i] ); + sum_max += tmp_max[i]; + } + + index_subd[i] = maximumAbs( &tmp_xcorr_itd[i * L_SAMPLES], L_SAMPLES + 1, &tmp_max[i] ); + sum_max += tmp_max[i]; + + /*calculate average of all maxima to determine the threshold*/ + avg_max = sum_max * DENOM; + } + + /*relax threshold if threshold is very close to max: when 7 0.f && ( ( thres_diff < 0.05f && ( snr <= 15 && snr > 7.f ) ) || ( thres_diff < 0.01f && ( snr > 15.f && snr < 30.f ) ) ) ) + { + wfac = 2.0f; + } + + if ( flag_noisy_speech_snr == 1 ) + { + if ( vad == 0 ) + { + wfac = 2.5f; + } + else if ( detected_itd_flag == 0 && *max_max > 1.5f * avg_max && *prev_max > 1.5f * *prev_avg_max && abs( *index - *prev_index ) <= 2 ) + { + wfac = 1.5f; + } + else + { + wfac = 2.0f; + } + } + *prev_max = *max_max; + *prev_avg_max = avg_max; + *prev_index = *index; + + return ( wfac * avg_max ); + } +} + + +/*------------------------------------------------------------------------- + * Compute stereo parameter: ITD + * ITD: Interchannel Time Difference + *------------------------------------------------------------------------*/ + +void stereo_dft_enc_compute_itd( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + float *DFT_L, + float *DFT_R, + const int16_t k_offset, + const int16_t input_frame, + float *bin_nrgL, + float *bin_nrgR ) +{ + int16_t i, j; + STEREO_DFT_ENC_DATA_HANDLE hStereoDft; + ITD_DATA_HANDLE hItd; + float *pDFT_L, *pDFT_R; + float abs_L, abs_R, prod_L, prod_R, sum_abs_L, sum_abs_R; + float log_prod_L, log_prod_R; + float sum_nrg_L, sum_nrg_R; + float sfm_L, sfm_R; + float xcorr[STEREO_DFT_N_32k_ENC]; + int16_t itd, itd_td; + float xcorr_itd[STEREO_DFT_N_32k_ENC]; + float tmpf1, tmpf2, tmpf3; +#ifdef ITD_WINNER_GAIN_MODIFY + float frame_coherence, tmpf4; +#endif + float thres, alpha; + int16_t index; + float xcorr_max, sum_nrg_L_lb, par_L[XCORR_LB_NUM_BANDS], par_L_avrg, sum_nrg_L_tmp; + float xcorr_lb[STEREO_DFT_XCORR_LB_MAX]; + float num_cor, den_cor_cur, den_cor_prev, cor_lb_avrg; + float cor_lb[XCORR_LB_NUM_BANDS]; + float Spd_L[STEREO_DFT_N_32k_ENC / 2 + 1]; + float Spd_R[STEREO_DFT_N_32k_ENC / 2 + 1]; + int16_t vad_flag_itd; + float mssnr; + int16_t itd_cal_flag; + int16_t NFFT, NFFT_mid; + int16_t zero_itd; + float mEr; + float cohSNR; + float *pNrgL, *pNrgR; + float second_max; + int16_t second_max_lag; + int16_t fc_condition_1, fc_condition_2, fc_condition_3, fc_condition_4, fc_condition_5, fc_condition_6_a, fc_condition_6_b, fc_condition_6_c; + int16_t fc_condition_1234; + int16_t split, shift, flag_noisy_speech_snr; + float gcc_phat[2 * XTALK_PHAT_LEN + 1]; + float grand_dot_prod_real, grand_dot_prod_img; + float xcorr_abs[STEREO_DFT_N_32k_ENC], sum_xcorr, prod_LL, prod_RR, total_mEr, total_max; + STEREO_CLASSIF_HANDLE hStereoClassif; + const float *dft_trigo32k; + float trigo_enc[STEREO_DFT_N_32k_ENC / 2 + 1]; + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + hStereoDft = hCPE->hStereoDft; + hItd = hCPE->hStereoDft->hItd; + NFFT = min( STEREO_DFT_N_32k_ENC, hStereoDft->NFFT ); + dft_trigo32k = hStereoDft->dft_trigo_32k; + } + else + { + hStereoDft = NULL; + hItd = hCPE->hStereoMdct->hItd; + NFFT = min( STEREO_DFT_N_32k_ENC, hCPE->hStereoMdct->hDft_ana->NFFT ); + dft_trigo32k = hCPE->hStereoMdct->hDft_ana->dft_trigo_32k; + } + hStereoClassif = hCPE->hStereoClassif; + + for ( i = 0; i < STEREO_DFT_N_32k_ENC / 4; i++ ) + { + trigo_enc[i] = dft_trigo32k[i]; + trigo_enc[STEREO_DFT_N_32k_ENC / 2 - i] = dft_trigo32k[i]; + } + trigo_enc[STEREO_DFT_N_32k_ENC / 4] = dft_trigo32k[STEREO_DFT_N_32k_ENC / 4]; + + flag_noisy_speech_snr = hCPE->hCoreCoder[0]->flag_noisy_speech_snr; /* flag from the previous frame */ + + /* initializations to avoid compilation warnings */ + sum_nrg_L = 0.0f; + sum_nrg_R = 0.0f; + sum_nrg_L_lb = 0.0f; + mssnr = 0.0f; + sfm_L = 0.0f; + + + NFFT_mid = (int16_t) ( ( min( STEREO_DFT_N_16k_ENC, NFFT ) ) * 0.5f ); + + pDFT_L = DFT_L; + pDFT_R = DFT_R; + pNrgL = bin_nrgL; + pNrgR = bin_nrgR; + xcorr[0] = 0.f; + xcorr[1] = 0.f; + log_prod_L = logf( max( FLT_MIN, ABSVAL( pDFT_L[0] ) ) ); + log_prod_R = logf( max( FLT_MIN, ABSVAL( pDFT_R[0] ) ) ); + prod_L = 1.0f; + prod_R = 1.0f; + sum_nrg_L = pDFT_L[0] * pDFT_L[0] + FLT_MIN; + sum_nrg_R = pDFT_R[0] * pDFT_R[0] + FLT_MIN; + sum_abs_L = ABSVAL( pDFT_L[0] ) + EPSILON; + sum_abs_R = ABSVAL( pDFT_R[0] ) + EPSILON; + xcorr_lb[0] = pDFT_L[0] * pDFT_L[0] + EPSILON; + sum_nrg_L_lb = xcorr_lb[0]; + prod_LL = 1.0f; + prod_RR = 1.0f; + grand_dot_prod_real = EPSILON; + grand_dot_prod_img = EPSILON; + + for ( i = 1, j = 0; i < NFFT_mid; i++, j++ ) + { + xcorr[2 * i] = pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; + xcorr[2 * i + 1] = pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; + + pNrgL[i] = pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; + pNrgR[i] = pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; + + Spd_L[i] = pNrgL[i]; + Spd_R[i] = pNrgR[i]; + + abs_L = sqrtf( pNrgL[i] ); + abs_R = sqrtf( pNrgR[i] ); + + sum_nrg_L += pNrgL[i]; + sum_nrg_R += pNrgR[i]; + + sum_abs_L += abs_L; + sum_abs_R += abs_R; + prod_L *= abs_L; + prod_R *= abs_R; + + grand_dot_prod_real += xcorr[2 * i]; + grand_dot_prod_img += xcorr[2 * i + 1]; + xcorr_abs[i] = sqrtf( xcorr[2 * i] * xcorr[2 * i] + xcorr[2 * i + 1] * xcorr[2 * i + 1] ); + /* VM: prod_LL tends to overflow, better to replace with sum(log(prod_L)) and retrain the classifier */ + prod_LL = prod_L; + prod_RR = prod_R; + + if ( j == SFM_PROD_GRP || i == NFFT_mid - 1 ) + { + prod_L = max( FLT_MIN, prod_L ); + prod_R = max( FLT_MIN, prod_R ); + log_prod_L += logf( prod_L ); + log_prod_R += logf( prod_R ); + prod_L = 1; + prod_R = 1; + j = 0; + } + } + + /* collect UNCLR classifier parameters */ + { + float IPD, d_IPD, g_IPD, g_ILD, angle_rot, g_side, g_pred, abs_L_R, grand_nrg_DMX; + + if ( hCPE->last_element_mode != IVAS_CPE_DFT ) + { + hStereoClassif->prev_g_IPD = 0.5f; + hStereoClassif->prev_IPD = 0.0f; + } + + + abs_L_R = sqrtf( grand_dot_prod_real * grand_dot_prod_real + grand_dot_prod_img * grand_dot_prod_img ); + grand_nrg_DMX = sum_nrg_L + sum_nrg_R + 2 * abs_L_R; + + g_ILD = sqrtf( sum_nrg_L / ( sum_nrg_R + 1.0f ) ); + g_ILD = fabsf( ( g_ILD - 1 ) / ( g_ILD + 1 ) ); + hStereoClassif->unclr_fv[E_gainILD] = g_ILD; + hStereoClassif->xtalk_fv[E_gainILD] = g_ILD; + + IPD = atan2f( grand_dot_prod_img, grand_dot_prod_real ); + hStereoClassif->unclr_fv[E_IPD] = IPD; + hStereoClassif->xtalk_fv[E_IPD] = IPD; + + d_IPD = fabsf( IPD - hStereoClassif->prev_IPD ); + hStereoClassif->unclr_fv[E_d_IPD] = IPD; /* VM: need to replace IPD by d_IPD and re-train the UNCLR classifier for DFT stereo */ + hStereoClassif->xtalk_fv[E_d_IPD] = d_IPD; + hStereoClassif->prev_IPD = IPD; + + g_IPD = ( sum_nrg_L + sum_nrg_R + 2 * grand_dot_prod_real ) / grand_nrg_DMX; + if ( g_IPD >= 1.0f ) + { + g_IPD = hStereoClassif->prev_g_IPD; + } + else + { + hStereoClassif->prev_g_IPD = g_IPD; + } + g_IPD = logf( 1.0f - g_IPD ); + hStereoClassif->unclr_fv[E_gainIPD] = g_IPD; + hStereoClassif->xtalk_fv[E_gainIPD] = g_IPD; + + angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / ( sum_nrg_L - sum_nrg_R + 1.0f ) ) ); + hStereoClassif->unclr_fv[E_angle_rot] = angle_rot; + hStereoClassif->xtalk_fv[E_angle_rot] = angle_rot; + + g_side = fabsf( sum_nrg_L - sum_nrg_R ) / ( grand_nrg_DMX ); + g_side = max( 0.01f, min( g_side, 0.99f ) ); + hStereoClassif->unclr_fv[E_g_side] = g_side; + hStereoClassif->xtalk_fv[E_g_side] = g_side; + + g_pred = logf( max( 0, ( ( 1 - g_side ) * sum_nrg_L + ( 1 + g_side ) * sum_nrg_R - 2 * abs_L_R ) ) + 1.0f ); + g_pred = max( 14.0f, g_pred ); + hStereoClassif->unclr_fv[E_g_pred] = g_pred; + hStereoClassif->xtalk_fv[E_g_pred] = g_pred; + } + + mvr2r( &Spd_L[1], &xcorr_lb[1], STEREO_DFT_XCORR_LB_MAX - 1 ); + sum_nrg_L_lb = sum_nrg_L_lb + sum_f( &Spd_L[1], 11 ); + + vad_flag_itd = stereo_dft_enc_itd_vad( hItd->E_band_n, &( hItd->vad_frm_cnt ), Spd_L, Spd_R, &mssnr ); + + if ( sum_nrg_L < EPSILON ) + { + sfm_L = 0; + } + else + { + sfm_L = expf( log_prod_L / ( NFFT_mid ) ) / ( sum_abs_L / ( NFFT_mid ) ); + } + + if ( sum_nrg_R < EPSILON ) + { + sfm_R = 0; + } + else + { + sfm_R = expf( log_prod_R / ( NFFT_mid ) ) / ( sum_abs_R / ( NFFT_mid ) ); + } + + if ( sfm_R > sfm_L ) + { + sfm_L = sfm_R; + } + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + hStereoDft->sfm = sfm_L; + } + + for ( ; i < NFFT / 2; i++ ) + { + xcorr[2 * i] = pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; + xcorr[2 * i + 1] = pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; + + pNrgL[i] = pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; + pNrgR[i] = pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; + /* Calculate L and R energy power spectrum */ + Spd_L[i] = pNrgL[i]; + Spd_R[i] = pNrgR[i]; + } + + for ( ; i < STEREO_DFT_N_32k_ENC / 2; i++ ) + { + xcorr[2 * i] = 0.f; + xcorr[2 * i + 1] = 0.f; + } + + hItd->xcorr_smooth[0] = 0.f; + hItd->xcorr_smooth[1] = 0.f; + xcorr[0] = sign( hItd->xcorr_smooth[0] ); + xcorr[1] = sign( hItd->xcorr_smooth[1] ); + +#ifdef ITD_WINNER_GAIN_MODIFY + if ( hStereoDft->mus_flag == 0 ) + { + stereo_dft_frame_coherence( hStereoDft, xcorr, Spd_L, Spd_R, &frame_coherence ); + if ( hStereoDft->local_vad == 0 ) + { + hStereoDft->noise_coherence = 0.9f * hStereoDft->noise_coherence + ( 1.0 - 0.9f ) * frame_coherence; + } + else + { + hStereoDft->noise_coherence = hStereoDft->noise_coherence; + } + stereo_dft_itd_winner_gain( hStereoDft, Spd_L, Spd_R ); + + if ( hStereoDft->noise_coherence > 0.25f ) + { + for ( i = 1; i < NFFT / 2; i++ ) + { + xcorr[2 * i] = ( hStereoDft->winner_gain_L[i] * hStereoDft->winner_gain_R[i] ) * xcorr[2 * i]; + xcorr[2 * i + 1] = ( hStereoDft->winner_gain_L[i] * hStereoDft->winner_gain_R[i] ) * xcorr[2 * i + 1]; + Spd_L[i] = hStereoDft->winner_gain_L[i] * Spd_L[i]; + Spd_R[i] = hStereoDft->winner_gain_R[i] * Spd_R[i]; + } + } + } +#endif + + if ( hCPE->element_mode == IVAS_CPE_DFT && ( hItd->td_itd[k_offset] - hItd->td_itd[k_offset - 1] ) ) + { + float alphaD, c, s, c1, s1, ctmp, vtmp; + alphaD = -2.f * EVS_PI * ( (float) hItd->td_itd[k_offset] - hItd->td_itd[k_offset - 1] ) / hStereoDft->NFFT; + c1 = cosf( alphaD ); + s1 = sinf( alphaD ); + c = 1.f; /* cos(0) */ + s = 0.f; /* sin(0) */ + + for ( i = 1; i < NFFT / 2; i++ ) + { + ctmp = c; + c = c * c1 - s * s1; + s = ctmp * s1 + s * c1; + vtmp = hItd->xcorr_smooth[2 * i] * c - hItd->xcorr_smooth[2 * i + 1] * s; + hItd->xcorr_smooth[2 * i + 1] = hItd->xcorr_smooth[2 * i] * s + hItd->xcorr_smooth[2 * i + 1] * c; + hItd->xcorr_smooth[2 * i] = vtmp; + } + } + + tmpf3 = 2.f; +#ifdef ITD_WINNER_GAIN_MODIFY + if ( hStereoDft->mus_flag == 0 ) + { + alpha = -0.8f; + } + else + { + if ( flag_noisy_speech_snr ) + { + alpha = -0.8f; + } + else + { + alpha = -1.0f; + } + } +#else + if ( flag_noisy_speech_snr ) + { + alpha = -0.8f; + } + else + { + alpha = -1.0f; + } +#endif + + if ( hCPE->hCoreCoder[0]->Opt_DTX_ON && hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( hCPE->hCoreCoder[0]->last_core_brate == SID_2k40 || hCPE->hCoreCoder[0]->last_core_brate == FRAME_NO_DATA || hCPE->hStereoCng->first_SID_after_TD ) + { + for ( i = 1; i < NFFT / 2; i++ ) + { + /* Low pass filter cross L/R power spectrum */ + hStereoDft->xspec_smooth[2 * i] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->xspec_smooth[2 * i] + XSPEC_ALPHA * xcorr[2 * i]; + hStereoDft->xspec_smooth[2 * i + 1] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->xspec_smooth[2 * i + 1] + XSPEC_ALPHA * xcorr[2 * i + 1]; + + hItd->xcorr_smooth[2 * i] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i] + sfm_L * xcorr[2 * i]; + hItd->xcorr_smooth[2 * i + 1] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i + 1] + sfm_L * xcorr[2 * i + 1]; + + tmpf1 = sqrtf( hItd->xcorr_smooth[i * 2] * hItd->xcorr_smooth[i * 2] + hItd->xcorr_smooth[i * 2 + 1] * hItd->xcorr_smooth[i * 2 + 1] ); + tmpf1 += EPSILON; + tmpf2 = tmpf1; + tmpf1 = powf( tmpf1, alpha ); +#ifdef ITD_WINNER_GAIN_MODIFY + if ( hStereoDft->mus_flag == 0 ) + { + tmpf4 = 1.0f; + /* Calculate smoothed spectral power density for the L/R channel */ + hStereoDft->spd_L_smooth_new[i] = ( 1.f - sfm_L ) * hStereoDft->spd_L_smooth_new[i] + sfm_L * Spd_L[i]; + hStereoDft->spd_R_smooth_new[i] = ( 1.f - sfm_L ) * hStereoDft->spd_R_smooth_new[i] + sfm_L * Spd_R[i]; + /* Calculate cross spectral power density using the smoothed spectral power density*/ + tmpf4 = (float) sqrt( hStereoDft->spd_L_smooth_new[i] ) * sqrt( hStereoDft->spd_R_smooth_new[i] ); + /* Calculate the value of weighted function for each frequency bin */ + tmpf4 += EPSILON; + if ( hStereoDft->noise_coherence > 0.25f ) + { + tmpf4 = tmpf1 * pow( tmpf2, 2.0f ) * pow( tmpf4, -2.0f ); + tmpf3 += tmpf2 * tmpf1; + tmpf3 -= tmpf2 * tmpf4; + } + else + { + tmpf4 = tmpf2 * pow( tmpf4, -2.0f ); + } + /* Calculate the value of weighted generlized cross-correlation function for each frequency bin */ + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf4; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf4; + } + else + { + tmpf3 += tmpf2 * tmpf1; + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; + } +#else + tmpf3 += tmpf2 * tmpf1; + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; +#endif + + /* Low pass filter L/R power spectrum */ + /* Calculate coherence as cross spectral density divided by L*R power spectrum */ + hStereoDft->Spd_L_smooth[i] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->Spd_L_smooth[i] + XSPEC_ALPHA * Spd_L[i]; + hStereoDft->Spd_R_smooth[i] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->Spd_R_smooth[i] + XSPEC_ALPHA * Spd_R[i]; + } + } + else + { + for ( i = 1; i < NFFT / 2; i++ ) + { + hItd->xcorr_smooth[2 * i] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i] + sfm_L * xcorr[2 * i]; + hItd->xcorr_smooth[2 * i + 1] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i + 1] + sfm_L * xcorr[2 * i + 1]; + tmpf1 = sqrtf( hItd->xcorr_smooth[i * 2] * hItd->xcorr_smooth[i * 2] + hItd->xcorr_smooth[i * 2 + 1] * hItd->xcorr_smooth[i * 2 + 1] ); + tmpf1 += EPSILON; + tmpf2 = tmpf1; + tmpf1 = powf( tmpf1, alpha ); +#ifdef ITD_WINNER_GAIN_MODIFY + if ( hStereoDft->mus_flag == 0 ) + { + tmpf4 = 1.0f; + /* Calculate smoothed spectral power density for the L/R channel */ + hStereoDft->spd_L_smooth_new[i] = ( 1.f - sfm_L ) * hStereoDft->spd_L_smooth_new[i] + sfm_L * Spd_L[i]; + hStereoDft->spd_R_smooth_new[i] = ( 1.f - sfm_L ) * hStereoDft->spd_R_smooth_new[i] + sfm_L * Spd_R[i]; + /* Calculate cross spectral power density using the smoothed spectral power density*/ + tmpf4 = (float) sqrt( hStereoDft->spd_L_smooth_new[i] ) * sqrt( hStereoDft->spd_R_smooth_new[i] ); + /* Calculate the value of weighted function for each frequency bin */ + tmpf4 += EPSILON; + if ( hStereoDft->noise_coherence > 0.25f ) + { + tmpf4 = tmpf1 * pow( tmpf2, 2.0f ) * pow( tmpf4, -2.0f ); + tmpf3 += tmpf2 * tmpf1; + tmpf3 -= tmpf2 * tmpf4; + } + else + { + tmpf4 = tmpf2 * pow( tmpf4, -2.0f ); + } + /* Calculate the value of weighted generlized cross-correlation function for each frequency bin */ + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf4; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf4; + } + else + { + tmpf3 += tmpf2 * tmpf1; + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; + } +#else + tmpf3 += tmpf2 * tmpf1; + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; +#endif + } + } + } + else + { + for ( i = 1; i < NFFT / 2; i++ ) + { + hItd->xcorr_smooth[2 * i] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i] + sfm_L * xcorr[2 * i]; + hItd->xcorr_smooth[2 * i + 1] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i + 1] + sfm_L * xcorr[2 * i + 1]; + tmpf1 = sqrtf( hItd->xcorr_smooth[i * 2] * hItd->xcorr_smooth[i * 2] + hItd->xcorr_smooth[i * 2 + 1] * hItd->xcorr_smooth[i * 2 + 1] ); + tmpf1 += EPSILON; + tmpf2 = tmpf1; + tmpf1 = powf( tmpf1, alpha ); +#ifdef ITD_WINNER_GAIN_MODIFY + if ( hStereoDft->mus_flag == 0 ) + { + tmpf4 = 1.0f; + /* Calculate smoothed spectral power density for the L/R channel */ + hStereoDft->spd_L_smooth_new[i] = ( 1.f - sfm_L ) * hStereoDft->spd_L_smooth_new[i] + sfm_L * Spd_L[i]; + hStereoDft->spd_R_smooth_new[i] = ( 1.f - sfm_L ) * hStereoDft->spd_R_smooth_new[i] + sfm_L * Spd_R[i]; + /* Calculate cross spectral power density using the smoothed spectral power density*/ + tmpf4 = (float) sqrt( hStereoDft->spd_L_smooth_new[i] ) * sqrt( hStereoDft->spd_R_smooth_new[i] ); + /* Calculate the value of weighted function for each frequency bin */ + tmpf4 += EPSILON; + if ( hStereoDft->noise_coherence > 0.25f ) + { + tmpf4 = tmpf1 * pow( tmpf2, 2.0f ) * pow( tmpf4, -2.0f ); + tmpf3 += tmpf2 * tmpf1; + tmpf3 -= tmpf2 * tmpf4; + } + else + { + tmpf4 = tmpf2 * pow( tmpf4, -2.0f ); + } + /* Calculate the value of weighted generlized cross-correlation function for each frequency bin */ + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf4; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf4; + } + else + { + tmpf3 += tmpf2 * tmpf1; + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; + } +#else + tmpf3 += tmpf2 * tmpf1; + xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; + xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; +#endif + } + } +#ifdef ITD_WINNER_GAIN_MODIFY + if ( hStereoDft->mus_flag == 0 ) + { + if ( hStereoDft->noise_coherence > 0.25f ) + { + tmpf1 = (float) ( NFFT / 2 + 1 ) / tmpf3; + for ( i = 0; i < NFFT; i++ ) + { + xcorr[i] *= tmpf1; + } + } + else + { + for ( i = NFFT / 2; i < NFFT; i++ ) + { + xcorr[i] = 0.0f; + } + } + } +#else + tmpf1 = (float) ( NFFT / 2 + 1 ) / tmpf3; + for ( i = 0; i < NFFT; i++ ) + { + xcorr[i] *= tmpf1; + } +#endif + /*calculate mean E ratio of main to background signal for cohSNR*/ + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + mEr = calc_mean_E_ratio( hItd, hStereoDft->nbands, hStereoDft->band_limits, hStereoDft->NFFT, sfm_L, pNrgL, pNrgR, &total_mEr ); + } + else + { + int16_t nbands; + int16_t band_limits[STEREO_DFT_BAND_MAX + 1]; + + set_s( band_limits, 0, STEREO_DFT_BAND_MAX + 1 ); + set_band_limits( &nbands, band_limits, hCPE->hStereoMdct->hDft_ana->NFFT ); + mEr = calc_mean_E_ratio( hItd, nbands, band_limits, hCPE->hStereoMdct->hDft_ana->NFFT, sfm_L, pNrgL, pNrgR, &total_mEr ); + } + + /*calculate total cohSNR for frame in dB*/ + cohSNR = 20 * log10f( mEr ); + + /* collect UNCLR classifier parameters */ + { + float es_em, d_prodL_prodR; + + if ( total_mEr < 1.0f ) + { + hStereoClassif->unclr_fv[E_cohSNR] = 0; + } + else + { + hStereoClassif->unclr_fv[E_cohSNR] = 20 * log10f( total_mEr ); + } + + es_em = fabsf( sum_nrg_L - sum_nrg_R ) / ( sum_nrg_L + sum_nrg_R + 1e-5f ); + hStereoClassif->unclr_fv[E_es_em] = es_em; + hStereoClassif->xtalk_fv[E_es_em] = es_em; + + d_prodL_prodR = logf( max( prod_LL, prod_RR ) / ( min( prod_LL, prod_RR ) + 1e-5f ) + 1.0f ); + hStereoClassif->unclr_fv[E_d_prodL_prodR] = d_prodL_prodR; + hStereoClassif->xtalk_fv[E_d_prodL_prodR] = d_prodL_prodR; + + sum_xcorr = 0.0f; + for ( i = 1; i < NFFT_mid; i++ ) + { + xcorr_abs[i] = logf( xcorr_abs[i] / ( sum_nrg_L + sum_nrg_R + 1e-5f ) + 1e-5f ); + sum_xcorr += xcorr_abs[i]; + } + + hStereoClassif->unclr_fv[E_sum_xcorr] = sum_xcorr; + hStereoClassif->xtalk_fv[E_sum_xcorr] = sum_xcorr; + +#ifdef DEBUG_STEREO_CLF + dbgwrite( &hStereoClassif->unclr_fv[E_cohSNR], sizeof( float ), 1, 1, "res/cohSNR.x" ); + dbgwrite( &hStereoClassif->unclr_fv[E_es_em], sizeof( float ), 1, 1, "res/es_em.x" ); + dbgwrite( &hStereoClassif->unclr_fv[E_d_prodL_prodR], sizeof( float ), 1, 1, "res/d_prodL_prodR.x" ); + dbgwrite( &hStereoClassif->unclr_fv[E_sum_xcorr], sizeof( float ), 1, 1, "res/sum_xcorr.x" ); +#endif + } + + /* reset estimates when silence is detected*/ + if ( ( sum_nrg_L && sum_nrg_R ) < EPSILON ) + { + resetEstimates( hItd ); + } + + /*smooth cohSNR with time */ + if ( ( hItd->cohSNR - cohSNR ) < 10.0f ) + { + tmpf1 = max( 0.05f, min( 0.25f, sfm_L * 0.5f ) ); + hItd->cohSNR = ( 1.f - tmpf1 ) * hItd->cohSNR + tmpf1 * cohSNR; + } + else + { + hItd->cohSNR = hItd->cohSNR - 0.05f; + } + + cohSNR = hItd->cohSNR; + + rfft( xcorr, trigo_enc, STEREO_DFT_N_32k_ENC, +1 ); + + itd_td = hItd->td_itd_32k[k_offset]; /* This ITD always operates at 32kHz*/ + shift = ( STEREO_DFT_N_32k_ENC / 2 - itd_td ) % STEREO_DFT_N_32k_ENC; + split = STEREO_DFT_N_32k_ENC - shift; + + mvr2r( &xcorr[0], &xcorr_itd[shift], split ); + mvr2r( &xcorr[split], &xcorr_itd[0], shift ); + + mvr2r( &xcorr_itd[STEREO_DFT_N_32k_ENC / 2 - XTALK_PHAT_LEN], gcc_phat, 2 * XTALK_PHAT_LEN + 1 ); + +#ifdef DEBUG_MODE_DFT + dbgwrite( gcc_phat, sizeof( float ), 2 * XTALK_PHAT_LEN + 1, 1, "res/gcc_phat" ); +#endif + + thres = peak_detect( xcorr_itd, &tmpf1, &index, &zero_itd, cohSNR, hCPE->hCoreCoder[0]->vad_flag, &second_max, &second_max_lag, hItd->prev_itd, flag_noisy_speech_snr, hItd->detected_itd_flag, &hItd->prev_max, &hItd->prev_index, &hItd->prev_avg_max, &total_max ); + + hStereoClassif->ave_ener_L = sum_nrg_L / ( NFFT_mid * NFFT_mid ); + hStereoClassif->ave_ener_R = sum_nrg_R / ( NFFT_mid * NFFT_mid ); + + if ( hCPE->hCoreCoder[0]->input_Fs == 16000 ) + { + total_max *= 2.0f; + } + hStereoClassif->unclr_fv[E_xcorr_itd_value] = total_max; + hStereoClassif->xtalk_fv[E_xcorr_itd_value] = total_max; + +#ifdef DEBUG_STEREO_CLF + { + int16_t stmp = index - STEREO_DFT_ITD_MAX_ANA; + dbgwrite( &stmp, sizeof( int16_t ), 1, 1, "res/raw_itd.x" ); + } + dbgwrite( &hStereoClassif->unclr_fv[E_xcorr_itd_value], sizeof( float ), 1, 1, "res/xcorr_itd_value.x" ); +#endif + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp; + + tmp = (int16_t) ( tmpf1 * 100.f / thres ); + dbgwrite( &tmp, sizeof( int16_t ), 1, input_frame, "./res/stereo_dft_itd_thres0.pcm" ); + } +#endif + /*for tonal music items increase thresholing by a factor up to 2.*/ + if ( hCPE->hCoreCoder[0]->sp_aud_decision0 && ( index - STEREO_DFT_ITD_MAX_ANA ) != hItd->prev_itd && !flag_noisy_speech_snr && hCPE->hCoreCoder[0]->vad_flag && tmpf1 < 0.3 ) + { + thres *= 1.0f + 1.f * min( 1.f, max( 0.f, ( -1.0f * sfm_L + 0.5f ) / ( 0.5f - 0.2f ) ) ); + } + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp; + + tmp = (int16_t) ( sfm_L * 100.f ); + dbgwrite( &tmp, sizeof( int16_t ), 1, input_frame, "./res/stereo_dft_itd_sfm.pcm" ); + tmp = (int16_t) ( tmpf1 * 100.f / thres ); + dbgwrite( &tmp, sizeof( int16_t ), 1, input_frame, "./res/stereo_dft_itd_thres.pcm" ); + } +#endif + + itd_cal_flag = 0; + /*smooth threshold value depending on sfm for music items*/ + if ( hCPE->hCoreCoder[0]->ini_frame == 0 || hCPE->last_element_mode != IVAS_CPE_DFT || !hCPE->hCoreCoder[0]->sp_aud_decision0 || flag_noisy_speech_snr || cohSNR < 20 ) + { + hItd->itd_thres = thres; + } + else + { + hItd->itd_thres = ( 1.0f - sfm_L ) * hItd->itd_thres + sfm_L * thres; + } + + if ( flag_noisy_speech_snr == 0 && hCPE->hCoreCoder[0]->vad_flag == 1 && hItd->detected_itd_flag == 0 && ( hItd->currFlatness < 1.5f || hCPE->hCoreCoder[0]->sp_aud_decision0 == 1 ) ) + { + hItd->itd_thres *= 1.5f; + } + if ( hCPE->hCoreCoder[0]->vad_flag == 0 || hItd->detected_itd_flag == 0 ) + { + hItd->itd_tracking = 0; + } + else if ( abs( hItd->prev_itd ) > 2 ) + { + hItd->itd_tracking = 1; + } + + if ( hItd->itd_tracking == 1 && ( second_max > hItd->itd_thres || tmpf1 - second_max < min( tmpf1 * 0.5f, 0.2f ) ) ) + { + index = second_max_lag; + } + + if ( hItd->itd_tracking == 1 && abs( hItd->prev_itd - ( index - STEREO_DFT_ITD_MAX_ANA ) ) <= max( 2, (int16_t) round_f( abs( hItd->prev_itd ) / 16.f ) ) ) + { + hItd->itd_thres *= 0.75f; + } + + if ( tmpf1 > hItd->itd_thres && !zero_itd ) + { + /* LP filter GCC PHAT peak to follow peak envelope */ + if ( tmpf1 > hItd->lp_phat_peak ) + { + alpha = LP_GCC_PHAT_UP; + } + else + { + alpha = LP_GCC_PHAT_DOWN; + } + hItd->lp_phat_peak = alpha * tmpf1 + ( 1 - alpha ) * hItd->lp_phat_peak; + hItd->itd_cnt++; + if ( hItd->itd_cnt > ITD_CNT_MAX || hItd->itd_hangover > 0 ) + { + /* If max count is reached, or if an ITD candidate is found during hangover, + set itd_cnt = ITD_CNT_MAX to ensure hangover is applied */ + hItd->itd_cnt = ITD_CNT_MAX; + } + hItd->itd_hangover = 0; + + itd = index - STEREO_DFT_ITD_MAX_ANA; + hItd->itd_nonzero_cnt = 0; /* (1+0+9) <= hItd->itd_nonzero_cnt <= (1+6+3) */ + itd_cal_flag = 1; /* Indicates P>T case */ + hItd->valid_itd_cnt = hItd->itd_cnt; /* Store last non-zero value (when P>T) before reset */ + hItd->detected_itd_flag = 1; + } + else + { + /* Set prev_itd hangover period */ + if ( hItd->itd_cnt == ITD_CNT_MAX ) + { + hItd->itd_hangover = max( 0, min( ITD_HO_MAX, (int16_t) ( hItd->lp_phat_peak * ITD_HO_GCC_PHAT_INCL + ITD_HO_GCC_PHAT_OFFS ) ) ); + } + + if ( hItd->itd_hangover > 0 ) + { + itd = hItd->prev_itd; + if ( hItd->itd_nonzero_cnt < MAX_ITD_VAD_HANGOVER ) + { + hItd->itd_nonzero_cnt++; + } + hItd->itd_hangover--; + hItd->detected_itd_flag = 1; + } + else + { + itd = 0; + hItd->detected_itd_flag = 0; + } + + /* Reset */ + hItd->itd_cnt = 0; + hItd->lp_phat_peak = 0.0f; + } + + { + /* stereo Xtalk classifier */ + xtalk_classifier_dft( hCPE, itd, gcc_phat ); + } + + /*avoid enabling ITD fine control for music*/ + if ( !hCPE->hCoreCoder[0]->sp_aud_decision0 || flag_noisy_speech_snr || cohSNR < 20 ) + { + /* ITD fine control base on vad and correlation parameters */ + cor_lb_avrg = 0.0f; + par_L_avrg = 0.0f; + for ( i = 0; i < XCORR_LB_NUM_BANDS; i++ ) + { + num_cor = xcorr_lb[i * XCORR_LB_BAND_WIDTH] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH]; + den_cor_cur = xcorr_lb[i * XCORR_LB_BAND_WIDTH] * xcorr_lb[i * XCORR_LB_BAND_WIDTH] + 1.0f; + den_cor_prev = hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH] + 1.0f; + xcorr_max = xcorr_lb[i * XCORR_LB_BAND_WIDTH]; + sum_nrg_L_tmp = xcorr_lb[i * XCORR_LB_BAND_WIDTH]; + for ( j = 1; j < XCORR_LB_BAND_WIDTH; j++ ) + { + num_cor += xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; + den_cor_cur += xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] * xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; + den_cor_prev += hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; + if ( xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] > xcorr_max ) + { + xcorr_max = xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; + } + sum_nrg_L_tmp += xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; + } + cor_lb[i] = num_cor / ( sqrtf( den_cor_cur ) * sqrtf( den_cor_prev ) ); + cor_lb_avrg += cor_lb[i]; + par_L[i] = xcorr_max / ( sum_nrg_L_tmp + FLT_MIN ); + par_L_avrg += par_L[i]; + } + cor_lb_avrg /= XCORR_LB_NUM_BANDS; + par_L_avrg /= XCORR_LB_NUM_BANDS; + + /*Breakdown of fine-control conditions */ + fc_condition_1 = abs( hItd->prev_itd ) > 0.2f * abs( itd ); + fc_condition_2 = cor_lb_avrg > 0.85f; + fc_condition_3 = ( cor_lb_avrg > 0.7f && ( cor_lb[0] > 0.9f || cor_lb[1] > 0.9f || cor_lb[2] > 0.9f ) && hItd->prev_sum_nrg_L_lb > 0.5f * sum_nrg_L_lb && hItd->prev_sum_nrg_L_lb < 2.0f * sum_nrg_L_lb ); + fc_condition_4 = par_L_avrg > 0.6f; + fc_condition_5 = hItd->prev_itd != 0; + fc_condition_6_a = itd * hItd->prev_itd < 0; /* ITD sign change */ + fc_condition_6_b = itd * hItd->prev_itd == 0; /* ITD jump to zero */ + fc_condition_6_c = abs( itd - hItd->prev_itd ) > 0.5f * ( ( abs( itd ) > abs( hItd->prev_itd ) ) ? abs( itd ) : abs( hItd->prev_itd ) ); /* Magnitude of the ITD jump */ + + /* Combining conditions 1,2,3,4 */ + fc_condition_1234 = fc_condition_1 && ( fc_condition_2 || fc_condition_3 || fc_condition_4 ); + + if ( ( fc_condition_1234 && ( ( fc_condition_5 && fc_condition_6_b ) || fc_condition_6_c ) ) || ( fc_condition_1234 && fc_condition_6_a ) ) + { + itd = hItd->prev_itd; + + if ( hItd->itd_nonzero_cnt < MAX_ITD_VAD_HANGOVER ) + { + hItd->itd_nonzero_cnt++; + } + hItd->detected_itd_flag = 1; + } + + /* stop the fine control when inactive or very high mssnr is detected*/ + if ( mssnr < 6e-7f * HIGHT_SNR_VOICE_TH || mssnr > 200 * HIGHT_SNR_VOICE_TH ) + { + hItd->itd_nonzero_cnt = MAX_ITD_VAD_HANGOVER; + } + + if ( vad_flag_itd ) + { + /* Fine-control for hangover if set HR period = 0 or if HR period expires */ + /* However fine-control shouldn't be used when HR is disabled because itd_cnt < 2 - hence the extra last condition */ + if ( hItd->itd_hangover == 0 && hItd->prev_itd != 0 && itd == 0 && itd_cal_flag != 1 && hItd->itd_nonzero_cnt < MAX_ITD_VAD_HANGOVER && hItd->valid_itd_cnt == ITD_CNT_MAX && hItd->pre_vad == 1 ) + { + itd = hItd->prev_itd; + hItd->itd_nonzero_cnt++; + hItd->detected_itd_flag = 1; + } + hItd->pre_vad = 1; + } + else + { + hItd->pre_vad = 0; + } + + if ( itd == 0 && itd_cal_flag != 1 ) + { + hItd->itd_nonzero_cnt = 0; + } + + hItd->prev_sum_nrg_L_lb = sum_nrg_L_lb; + mvr2r( xcorr_lb, hItd->prev_xcorr_lb, STEREO_DFT_XCORR_LB_MAX ); + } + + /* Update memory */ + hItd->prev_itd = itd; + + check_bounds_s( &itd, -STEREO_DFT_ITD_MAX, STEREO_DFT_ITD_MAX ); + + /*Inverse the time diff*/ + hItd->itd[k_offset] = -1.f * itd; + + /* collect UNCLR classifier parameters */ + hStereoClassif->unclr_fv[E_ITD] = hItd->itd[k_offset]; + +#ifdef DEBUG_STEREO_CLF + dbgwrite( &hItd->itd[k_offset], sizeof( float ), 1, 1, "res/ITD.x" ); +#endif + + if ( hCPE->element_mode == IVAS_CPE_MDCT && fabsf( hItd->itd[k_offset] ) > ITD_MAX_MDCT ) + { + itd = 0; + } + + stereo_dft_quantize_itd( -1 * itd, hItd->itd + k_offset, input_frame * FRAMES_PER_SEC, hItd->itd_index + k_offset ); + + hItd->deltaItd[k_offset] = hItd->itd[k_offset] - hItd->td_itd[k_offset]; + + /* limit ITD range for MDCT stereo even more */ +#ifdef DEBUG_MODE_DFT + { + int16_t tmp; + static FILE *log_fid = NULL; + + tmp = (int16_t) hItd->itd[k_offset]; + dbgwrite( &tmp, sizeof( int16_t ), 1, input_frame, "./res/stereo_dft_itd_combined_fc.pcm" ); + dbgwrite( &tmp, sizeof( int16_t ), 1, input_frame, "./res/stereo_dft_itd_combined_fc.txt" ); + + if ( log_fid == NULL ) + log_fid = fopen( "./res/itd_log_td_itd.txt", "w" ); + fprintf( log_fid, "frame: %d\t itd: %f\t td_itd: %d\t delta_itd: %f\n", frame, hItd->itd[1], (int16_t) hItd->td_itd[1], hItd->deltaItd[1] ); + } +#endif + + return; +} diff --git a/lib_enc/ivas_stereo_dft_td_itd.c b/lib_enc/ivas_stereo_dft_td_itd.c new file mode 100644 index 0000000000..8f1f653b18 --- /dev/null +++ b/lib_enc/ivas_stereo_dft_td_itd.c @@ -0,0 +1,425 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_stat_enc.h" +#include "ivas_cnst.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define STEREO_DFT_CHANNEL_EXTR_LPC_ORDER 10 +#define STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT 320 + + +/*--------------------------------------------------------------- + * stereo_td_get_td_itd() + * + * + * ---------------------------------------------------------------*/ + +static void stereo_td_get_td_itd( + int16_t *td_itd, /* o : td_itd in samples at sampling frequency */ + int16_t *td_itd_32, /* o : td_itd in samples at 32kHz */ + const float itd, /* i : itd in samples at sampling frequency */ + const int32_t input_Fs /* i : sampling frequency */ +) +{ + /* *td_itd is the closest integer to itd that transforms into an integer value * + * under the transform x -> (32000/fs) x. */ + int16_t d; + + if ( input_Fs == 32000 ) + { + *td_itd_32 = *td_itd = (int16_t) itd; + } + else + { + assert( ( input_Fs % 16000 ) == 0 && "sampling frequency should be divisible by 16000" ); + d = (int16_t) ( input_Fs / 16000 ); + *td_itd_32 = 2 * (int16_t) floor( itd / d + 0.5f ); + *td_itd = ( ( *td_itd_32 ) / 2 ) * d; + } + + return; +} + +/*--------------------------------------------------------------- + * stereo_td_channel_extrapolate() + * + * + * ---------------------------------------------------------------*/ + +static void stereo_td_channel_extrapolate( + Encoder_State **sts, + const int16_t dft_ovl, + const float shift_mem[], + float shift_input[], + const int16_t input_frame, + const int16_t itd_shift, + const int16_t lagging_channel, + float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ +) +{ + int16_t leading_channel, i, size_ovl, pred_ovlp; + float g, nsr, g_lpc, dot_lead_lag, dot_lead_lead, dot_lag_lag; + float window[STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT], mem_zero[STEREO_DFT_CHANNEL_EXTR_LPC_ORDER]; + float residual[STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + ( STEREO_DFT_ITD_MAX * L_FRAME48k ) / L_FRAME32k]; + float r[STEREO_DFT_CHANNEL_EXTR_LPC_ORDER + 1]; + float A[STEREO_DFT_CHANNEL_EXTR_LPC_ORDER + 1]; + float shift_combined[L_FRAME48k + L_FRAME48k]; + int16_t flag; + int16_t pitch_lag; + int16_t res_shift; + int16_t pitch0; + + set_f( shift_combined, 0.0f, L_FRAME48k + L_FRAME48k ); + set_f( residual, 0.0f, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + ( STEREO_DFT_ITD_MAX * input_frame ) / L_FRAME32k ); + + leading_channel = ( lagging_channel + 1 ) % 2; + if ( sts[0]->element_mode == IVAS_CPE_DFT ) + { + size_ovl = dft_ovl; + pitch0 = sts[0]->pitch[0]; + } + else + { + size_ovl = input_frame; + pitch0 = sts[lagging_channel]->pitch[0]; + } + + pred_ovlp = input_frame / 10; + + /*get pitch lag from previous frame */ + pitch_lag = (int16_t) ( pitch0 * ( (float) input_frame / L_FRAME ) ); + + /* compute the parameters g, nsr and g_lpc */ + dot_lead_lag = EPSILON; + dot_lead_lead = EPSILON; + dot_lag_lag = EPSILON; + for ( i = 0; i < size_ovl; i++ ) + { + shift_combined[i] = shift_mem[i]; + dot_lead_lag += input_mem[leading_channel][i] * shift_mem[i]; + dot_lead_lead += input_mem[leading_channel][i] * input_mem[leading_channel][i]; + dot_lag_lag += shift_mem[i] * shift_mem[i]; + } + for ( i = 0; i < input_frame - itd_shift; i++ ) + { + shift_combined[i + size_ovl] = shift_input[i]; + dot_lead_lag += sts[leading_channel]->input[i] * shift_input[i]; + dot_lead_lead += sts[leading_channel]->input[i] * sts[leading_channel]->input[i]; + dot_lag_lag += shift_input[i] * shift_input[i]; + } + + g = dot_lead_lag / dot_lead_lead; + nsr = 1 - ( ( dot_lead_lag * dot_lead_lag ) / ( dot_lead_lead * dot_lag_lag ) ); + + check_bounds( &g, -1, 1.5f ); + check_bounds( &nsr, 0.0f, 1 ); + g_lpc = sqrtf( nsr ); + + /* rectangular window */ + set_f( window, 1.0f, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT ); + set_zero( mem_zero, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER ); + + /* get the LPC filter */ + autocorr( shift_combined + input_frame + size_ovl - itd_shift - STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, r, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, window, 0, 0, 0 ); + + /* Ensure R[0] isn't zero when entering Levinson-Durbin */ + r[0] = max( r[0], 1.0e-8f ); + for ( i = 0; i <= STEREO_DFT_CHANNEL_EXTR_LPC_ORDER; i++ ) + { + r[i] = r[i] * wac_swb[i]; + } + + /* Ensure R[0] isn't zero when entering Levinson-Durbin */ + r[0] += 1.0e-8f; + + flag = lev_dur( A, r, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, NULL ); + + if ( flag == 1 ) + { + g_lpc = 0.0f; + } + else + { + /* get the residual */ + fir( shift_combined + input_frame + size_ovl - itd_shift - STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, A, residual, mem_zero, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, 0 ); + + /* extend the residual */ + /* to prevent out of bound reading */ + + res_shift = ( pitch_lag < PIT_MAX ? pitch_lag : itd_shift ); + + for ( i = STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT; i < STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + itd_shift; i++ ) + { + residual[i] = residual[i - res_shift]; + } + + /* perform sythesis */ + syn_filt( A, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, residual, shift_combined + input_frame + size_ovl - STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT - itd_shift, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + itd_shift, mem_zero, 0 ); + } + + mvr2r( shift_combined + size_ovl, shift_input, input_frame ); + + /* use this synthesis part to replace the zeros in the lagging channel */ + for ( i = input_frame - itd_shift; i < input_frame; i++ ) + { + shift_input[i] = ( g_lpc * shift_input[i] ) + ( g * sts[leading_channel]->input[i] ); + } + + /* smooth transition (currently done by blending over linearly, could be replaced by something more elaborate.) */ + for ( i = input_frame - itd_shift - pred_ovlp; i < input_frame - itd_shift; i++ ) + { + shift_input[i] = ( i - input_frame + itd_shift + pred_ovlp ) * ( ( g_lpc * shift_input[i] ) + ( g * sts[leading_channel]->input[i] ) ) / pred_ovlp + ( input_frame - itd_shift - i ) * shift_input[i] / pred_ovlp; + } + + return; +} + + +/*--------------------------------------------------------------- + * stereo_td_itd() + * + * + * ---------------------------------------------------------------*/ + +void stereo_td_itd( + ITD_DATA *hITD, /* i/o: ITD data structure */ + float input_mem_itd[CPE_CHANNELS][STEREO_DFT_OVL_MAX], /* o : ITD memory (only used in DFT Stereo) */ + const int16_t hybrid_itd_flag, /* i : flag for hybrid TD/FD ITD processing */ +#ifdef DEBUG_MODE_DFT + const int16_t itd_mode, /* i : main ITD processing flag */ +#endif + const int16_t dft_ovl, /* i : size of DFT overlap */ + Encoder_State **sts, /* i/o: Encoder state structure */ + const int16_t input_frame, /* i : input frame length */ + float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ +) +{ + int16_t i, ch, n; + int16_t size_ovl, k_offset; + int16_t shift[2]; + int16_t itd, itd_max; + float shift_input[L_FRAME48k]; + float shift_mem[L_FRAME48k]; + float *mdct_mem[CPE_CHANNELS]; + + k_offset = STEREO_DFT_OFFSET; + set_f( shift_input, 0.0f, input_frame ); + if ( sts[0]->element_mode == IVAS_CPE_MDCT ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mdct_mem[n] = sts[n]->old_input_signal; + } + } + if ( sts[0]->element_mode == IVAS_CPE_DFT ) + { + /* Update the parameters */ + for ( i = 0; i < k_offset; i++ ) + { + hITD->deltaItd[i] = hITD->deltaItd[i + 1]; + hITD->td_itd[i] = hITD->td_itd[i + 1]; + hITD->td_itd_32k[i] = hITD->td_itd_32k[i + 1]; + } + } + if ( hybrid_itd_flag == 0 ) + { + return; + } + + stereo_td_get_td_itd( &( hITD->td_itd[k_offset] ), &( hITD->td_itd_32k[k_offset] ), hITD->itd[k_offset], sts[0]->input_Fs ); + +/* initializations*/ +#ifdef DEBUG_MODE_DFT + if ( itd_mode ) +#endif + { + size_ovl = dft_ovl; + + itd_max = ( STEREO_DFT_ITD_MAX * input_frame ) / L_FRAME32k; + + assert( ( fabsf( hITD->itd[k_offset] ) <= itd_max ) && "ITD value is too high!" ); + assert( ( fabsf( hITD->itd[k_offset - 1] ) <= itd_max ) && "ITD value is too high!" ); + + itd = hITD->td_itd[k_offset]; + + /*Time shift with current ITD*/ + if ( itd < 0 ) + { + shift[1] = 0; + shift[0] = -itd; + ch = 0; + } + else + { + shift[1] = itd; + shift[0] = 0; + ch = 1; + } + + /* extrapolate lagging channel */ + if ( shift[ch] > 0 ) + { + if ( sts[0]->element_mode == IVAS_CPE_DFT ) + { + /* store last part of signal before extrapolation */ + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mvr2r( sts[n]->input + input_frame - dft_ovl, input_mem_itd[n], dft_ovl ); + } + + /*shift past part*/ + mvr2r( input_mem[ch] + shift[ch], shift_mem, size_ovl - shift[ch] ); + mvr2r( sts[ch]->input, shift_mem + size_ovl - shift[ch], shift[ch] ); + } + else + { + /*shift past part*/ + mvr2r( mdct_mem[ch] + shift[ch], shift_mem, input_frame - shift[ch] ); + mvr2r( sts[ch]->input, shift_mem + input_frame - shift[ch], shift[ch] ); + } + /*shift current part*/ + mvr2r( sts[ch]->input + shift[ch], shift_input, input_frame - shift[ch] ); + if ( sts[0]->element_mode == IVAS_CPE_DFT ) + { + /*Extrapolate current frame*/ + stereo_td_channel_extrapolate( sts, dft_ovl, shift_mem, shift_input, input_frame, shift[ch], ch, input_mem ); + } + else + { + /*Extrapolate current frame*/ + stereo_td_channel_extrapolate( sts, 0, shift_mem, shift_input, input_frame, shift[ch], ch, mdct_mem ); + } + + /* write back the extrapolated signal into sts[ch]->input */ + mvr2r( shift_input, sts[ch]->input, input_frame ); + if ( sts[0]->element_mode == IVAS_CPE_DFT ) + { + mvr2r( shift_mem, input_mem[ch], size_ovl ); + } + else + { + mvr2r( shift_mem, mdct_mem[ch], input_frame ); + } + } + } + +#ifdef DEBUG_MODE_DFT + { + int16_t tmp[L_FRAME48k]; + + for ( i = 0; i < input_frame; i++ ) + { + tmp[i] = (int16_t) ( sts[0]->input[i] + 0.5f ); + } + + dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, "./res/td_shifted_signal_ch0.pcm" ); + + for ( i = 0; i < input_frame; i++ ) + { + tmp[i] = (int16_t) ( sts[1]->input[i] + 0.5f ); + } + + dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, "./res/td_shifted_signal_ch1.pcm" ); + } +#endif + return; +} + + +/*--------------------------------------------------------------- + * stereo_td_itd_mdct_stereo() + * + * Time-domain ITD in MDCT stereo + * ---------------------------------------------------------------*/ + +void stereo_td_itd_mdct_stereo( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder handle */ + const int16_t input_frame /* i : frame length */ +) +{ + int16_t i; + float bin_nrgL[STEREO_DFT_N_32k_ENC]; + float bin_nrgR[STEREO_DFT_N_32k_ENC]; + float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC]; + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct; + + if ( hCPE->hStereoMdct != NULL && hCPE->hStereoMdct->hItd != NULL ) + { + hStereoMdct = hCPE->hStereoMdct; + + hCPE->hStereoMdct->hItd->td_itd_32k[STEREO_DFT_OFFSET] = 0; + hStereoMdct->hItd->td_itd[STEREO_DFT_OFFSET] = 0; + + /* Update the parameters */ + for ( i = 0; i < STEREO_DFT_OFFSET; i++ ) + { + hStereoMdct->hItd->deltaItd[i] = hStereoMdct->hItd->deltaItd[i + 1]; + hStereoMdct->hItd->td_itd[i] = hStereoMdct->hItd->td_itd[i + 1]; + hStereoMdct->hItd->td_itd_32k[i] = hStereoMdct->hItd->td_itd_32k[i + 1]; + } + + stereo_dft_enc_analyze( hCPE->hCoreCoder, CPE_CHANNELS, input_frame, NULL, hStereoMdct, DFT, hCPE->input_mem ); + + /*call ITD function*/ + stereo_dft_enc_compute_itd( hCPE, DFT[0], DFT[1], STEREO_DFT_OFFSET, input_frame, bin_nrgL, bin_nrgR ); + + /* Time Domain ITD compensation using extrapolation */ +#ifdef DEBUG_MODE_DFT + stereo_td_itd( hStereoMdct->hItd, NULL, 1, 1, hStereoMdct->hDft_ana->dft_ovl, hCPE->hCoreCoder, input_frame, hCPE->input_mem ); +#else + stereo_td_itd( hStereoMdct->hItd, NULL, 1, hStereoMdct->hDft_ana->dft_ovl, hCPE->hCoreCoder, input_frame, hCPE->input_mem ); +#endif + } + + return; +} diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c new file mode 100644 index 0000000000..af3430766a --- /dev/null +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -0,0 +1,812 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define STEREO_DMX_EVS_FIND_POC_PEAK_TAU 4 +#define STEREO_DMX_EVS_FIND_POC_PEAK_TAU2 8 + +#define STEREO_DMX_EVS_POC_GAMMA 0.75f +#define STEREO_DMX_EVS_POC_SMOOTH 1.25f +#define STEREO_DMX_EVS_POC_FORGETTING 0.78f +#define STEREO_DMX_EVS_TARGET_POC_FORGETTING 0.79f +#define STEREO_DMX_EVS_POC_W_FORGETTING 0.875f +#define STEREO_DMX_EVS_SHIFT_LIMIT 5.625f /* ms */ + +#define STEREO_DMX_EVS_DMX_EGY_FORGETTING 0.25f +#define STEREO_DMX_EVS_CORR_FORGETTING 0.78f + +/*-----------------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------------*/ + +static void estimate_itd_wnd_fft( const float *input, float *specr, float *speci, const float *rfft_coef, const float *wnd, const int16_t input_frame ); +static void calc_poc( STEREO_DMX_EVS_POC_HANDLE hPOC, const float wnd[], const float rfft_coef[], const float specLr[], const float specLi[], const float specRr[], const float specRi[], const int16_t input_frame ); +static ivas_error estimate_itd( float *corr, STEREO_DMX_EVS_POC_HANDLE hPOC, const float srcL[], const float srcR[], float itd[], const int16_t input_frame ); +static void weighted_ave( const float src1[], const float src2[], float dst[], const float gain, const float old_gain, const int16_t input_frame, const float wnd[] ); +static void adapt_gain( const float src[], float dst[], const float gain, const float old_gain, const int16_t input_frame, const float wnd[] ); +static void create_M_signal( const float srcL[], const float srcR[], float dmx[], const float w_curr, const int16_t input_frame, const float wnd[], float *w_prev, float *dmx_energy, float *src_energy ); +static float find_poc_peak( STEREO_DMX_EVS_POC_HANDLE hPOC, float itd[], const int16_t input_frame, const float ratio ); +static void calc_energy( const float src1[], const float src2[], float energy[], const int16_t input_frame, const float ratio ); + +/*-------------------------------------------------------------------* + * estimate_itd_wnd_fft() + * + * Transforms input signal from time domain into frequency domain. + * The input signal is windowed before being transformed. + *-------------------------------------------------------------------*/ + +void estimate_itd_wnd_fft( + const float *input, /* i : input signal */ + float *specr, /* o : real-part spectra */ + float *speci, /* o : imaginary-part spectra */ + const float *rfft_coef, /* i : rfft coef */ + const float *wnd, /* i : window coef */ + const int16_t input_frame /* i : input frame length per channel */ +) +{ + int16_t n0, i; + float rfft_buf[L_FRAME48k]; + int16_t step, bias; + + n0 = input_frame >> 1; + if ( input_frame == L_FRAME16k ) + { + step = 3; + bias = 1; + } + else + { + step = 1; + bias = 0; + } + + for ( i = 0; i < input_frame; i++ ) + { + /* window */ + rfft_buf[i] = input[i] * wnd[i * step + bias]; + } + + rfft( rfft_buf, rfft_coef, input_frame, -1 ); + + for ( i = 1; i < n0; i++ ) + { + specr[i] = rfft_buf[i * 2]; + speci[i] = rfft_buf[i * 2 + 1]; + } + + specr[0] = rfft_buf[0]; + specr[n0] = rfft_buf[1]; + speci[0] = 0.f; + speci[n0] = 0.f; + + return; +} + + +/*-------------------------------------------------------------------* + * calc_poc() + * + * calculate phase only correlation + *-------------------------------------------------------------------*/ + +static void calc_poc( + STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ + const float wnd[], /* i : window coef */ + const float rfft_coef[], /* i : RFFT coef */ + const float specLr[], /* i : Lch real-part spectra */ + const float specLi[], /* i : Lch imaginary-part input signal */ + const float specRr[], /* i : Rch real-part spectra */ + const float specRi[], /* i : Rch imaginary-part input signal */ + const int16_t input_frame /* i : input frame length per channel */ +) +{ + int16_t i, n1, n2; + int16_t n0, *itdLR; + const float *c, *s; + float *P; + float tmp1, tmp2, Lr, Li, Rr, Ri, gamma, igamma, iN; + float specPOr[L_FRAME48k], specPOi[L_FRAME48k]; + float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; + float rfft_buf[L_FRAME48k]; + int16_t step, bias; + + /* Initialization */ + iN = 1.0f / (float) input_frame; + + c = hPOC->sin + ( input_frame >> 2 ); + s = hPOC->sin; + P = hPOC->P; + n0 = input_frame / 2; + itdLR = hPOC->itdLR; + igamma = STEREO_DMX_EVS_POC_GAMMA * iN; + gamma = 1.0f - igamma; + set_zero( tmpPOC1, L_FRAME48k ); + set_zero( tmpPOC2, L_FRAME48k ); + + if ( input_frame == L_FRAME16k ) + { + step = 3; + bias = 1; + } + else + { + step = 1; + bias = 0; + } + + specPOr[0] = sign( specLr[0] ) * sign( specRr[0] ) * wnd[bias]; + specPOi[0] = 0.0f; + + for ( i = 1; i < n0; i++ ) + { + Lr = specLr[i]; + Li = specLi[i]; + Rr = specRr[i]; + Ri = specRi[i]; + + Lr += ( specRr[i] * c[i] + specRi[i] * s[i] ); + Li += ( -specRr[i] * s[i] + specRi[i] * c[i] ); + Rr += ( specLr[i] * c[i] + specLi[i] * s[i] ); + Ri += ( -specLr[i] * s[i] + specLi[i] * c[i] ); + + tmp1 = wnd[i * step + bias] * gamma / ( sqrtf( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) ) + hPOC->eps ); + + specPOr[i] = ( Lr * Rr + Li * Ri ) * tmp1; + specPOi[i] = ( Lr * Ri - Li * Rr ) * tmp1; + + gamma -= igamma; + } + specPOr[n0] = sign( specLr[i] ) * sign( specRr[i] ) * wnd[i * step + bias] * gamma; + + rfft_buf[0] = specPOr[0]; + rfft_buf[1] = specPOr[n0]; + for ( i = 1; i < n0; i++ ) + { + rfft_buf[i * 2] = specPOr[i]; + rfft_buf[i * 2 + 1] = specPOi[i]; + } + + rfft( rfft_buf, rfft_coef, input_frame, +1 ); + + tmp1 = rfft_buf[0]; + tmpPOC1[n0] = tmp1 * tmp1; + + for ( i = 1; i < hPOC->shift_limit + 1; i++ ) + { + n1 = n0 + i; + n2 = n0 - i; + + tmp1 = rfft_buf[i]; + tmpPOC1[n1] = tmp1 * tmp1; + + tmp1 = rfft_buf[input_frame - i]; + tmpPOC1[n2] = tmp1 * tmp1; + } + + tmp1 = STEREO_DMX_EVS_POC_SMOOTH * tmpPOC1[n0] + 0.5f * ( 1.0f - STEREO_DMX_EVS_POC_SMOOTH ) * ( tmpPOC1[n0 - 1] + tmpPOC1[n0 + 1] ); + tmpPOC2[n0] = max( tmp1, 0.0f ); + + for ( i = 1; i < hPOC->shift_limit; i++ ) + { + n1 = n0 + i; + n2 = n0 - i; + tmp1 = STEREO_DMX_EVS_POC_SMOOTH * tmpPOC1[n1] + 0.5f * ( 1.0f - STEREO_DMX_EVS_POC_SMOOTH ) * ( tmpPOC1[n1 - 1] + tmpPOC1[n1 + 1] ); + tmp2 = STEREO_DMX_EVS_POC_SMOOTH * tmpPOC1[n2] + 0.5f * ( 1.0f - STEREO_DMX_EVS_POC_SMOOTH ) * ( tmpPOC1[n2 - 1] + tmpPOC1[n2 + 1] ); + tmpPOC2[n1] = max( tmp1, 0.0f ); + tmpPOC2[n2] = max( tmp2, 0.0f ); + } + + P[n0] = P[n0] * STEREO_DMX_EVS_POC_FORGETTING + tmpPOC2[n0] * ( 1.0f - STEREO_DMX_EVS_POC_FORGETTING ); + + for ( i = 1; i < hPOC->shift_limit; i++ ) + { + n1 = n0 + i; + n2 = n0 - i; + + if ( i == -itdLR[1] ) + { + P[n1] = P[n1] * STEREO_DMX_EVS_TARGET_POC_FORGETTING + tmpPOC2[n1] * ( 1.0f - STEREO_DMX_EVS_TARGET_POC_FORGETTING ); + } + else + { + P[n1] = P[n1] * STEREO_DMX_EVS_POC_FORGETTING + tmpPOC2[n1] * ( 1.0f - STEREO_DMX_EVS_POC_FORGETTING ); + } + + if ( i == itdLR[0] ) + { + P[n2] = P[n2] * STEREO_DMX_EVS_TARGET_POC_FORGETTING + tmpPOC2[n2] * ( 1.0f - STEREO_DMX_EVS_TARGET_POC_FORGETTING ); + } + else + { + P[n2] = P[n2] * STEREO_DMX_EVS_POC_FORGETTING + tmpPOC2[n2] * ( 1.0f - STEREO_DMX_EVS_POC_FORGETTING ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * find_poc_peak() + * + * find peak phase only correlation + *-------------------------------------------------------------------*/ + +static float find_poc_peak( + STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ + float itd[], /* o : estimated itd */ + const int16_t input_frame, /* i : input frame length per channel */ + const float ratio /* i : adapting ratio */ +) +{ + int16_t itd_cand[CPE_CHANNELS], i, n, cnt[CPE_CHANNELS], Lh, peak_range, *on, *itdLR, prev_off[CPE_CHANNELS]; + float Q[CPE_CHANNELS], aQ[CPE_CHANNELS], cQ[CPE_CHANNELS], width, eps, cconfidence, *peak_width, *peakQ; + float *P, tmpf; + float eps2; + + /* Initialization */ + Lh = input_frame / 2; + on = hPOC->ispeak; + itdLR = hPOC->itdLR; + width = 0.38f; + eps = 1.0f / (float) input_frame; + peak_width = hPOC->peak_width; + peakQ = hPOC->peakQ; + Q[0] = hPOC->P[Lh]; + Q[1] = 0.0f; + itd_cand[0] = itd_cand[1] = 0; + P = hPOC->P; + + for ( i = 1; i < hPOC->shift_limit; i++ ) + { + if ( P[Lh - i] > Q[0] ) + { + Q[0] = P[Lh - i]; + itd_cand[0] = i; + } + if ( P[Lh + i] > Q[1] ) + { + Q[1] = P[Lh + i]; + itd_cand[1] = -i; + } + } + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + prev_off[n] = !on[n]; + + aQ[n] = Q[n] * width; + cnt[n] = 0; + cQ[n] = P[Lh - itd_cand[n]]; + + peak_range = (int16_t) ( abs( itd_cand[n] ) + hPOC->shift_limit / STEREO_DMX_EVS_FIND_POC_PEAK_TAU ) / STEREO_DMX_EVS_FIND_POC_PEAK_TAU2; + + for ( i = 1; i <= peak_range; i++ ) + { + cnt[n] += ( P[Lh - itd_cand[n] + i] > aQ[n] ) + ( P[Lh - itd_cand[n] - i] > aQ[n] ); + cQ[n] += P[Lh - itd_cand[n] + i] + P[Lh - itd_cand[n] - i]; + } + + peak_width[n] = peak_width[n] * ratio + (float) cnt[n] * ( 1.0f - ratio ); + eps2 = eps * peak_width[n] * 0.25f; + Q[n] = ( 1.0f - ( cQ[n] / ( peak_range * 2 + 1 ) + eps2 ) / ( Q[n] + eps2 ) ); + Q[n] = max( Q[n], 0.0f ); + + if ( on[n] ) + { + tmpf = ( 0.3f - 0.2f * (float) abs( itd_cand[n] ) / (float) hPOC->shift_limit ) * peakQ[n]; + if ( Q[n] < tmpf ) + { + itdLR[n] = 0; + on[n] = 0; + peakQ[n] = 0.0f; + Q[n] = 0.0f; + } + else if ( Q[n] > 1.25f * peakQ[n] ) + { + itdLR[n] = itd_cand[n]; + } + + peakQ[n] = max( peakQ[n], Q[n] ); + } + else + { + tmpf = ( 0.75f - 0.2f * (float) abs( itd_cand[n] ) / (float) hPOC->shift_limit ); + + if ( Q[n] < tmpf ) + { + itdLR[n] = 0; + Q[n] = 0.0f; + } + else + { + itdLR[n] = itd_cand[n]; + on[n] = 1; + } + } + } + + if ( on[0] && prev_off[0] ) + { + *itd = (float) itdLR[0]; + } + else if ( on[1] && prev_off[1] ) + { + *itd = (float) itdLR[1]; + } + else + { + *itd = ( *itd > 0 ) ? (float) itdLR[0] : (float) itdLR[1]; + } + + cconfidence = sqrtf( fabsf( Q[0] - Q[1] ) ); + + return hPOC->confidence = hPOC->confidence * STEREO_DMX_EVS_CORR_FORGETTING + cconfidence * ( 1.0f - STEREO_DMX_EVS_CORR_FORGETTING ); +} + + +/*-------------------------------------------------------------------* + * estimate_itd() + * + * estimate itd + *-------------------------------------------------------------------*/ + +static ivas_error estimate_itd( + float *corr, /* o : correlation */ + STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ + const float srcL[], /* i : Lch input signal */ + const float srcR[], /* i : Rch input signal */ + float itd[], /* o : estimated itd */ + const int16_t input_frame /* i : input frame length per channel */ +) +{ + float specLr[L_FRAME48k / 2 + 1], specLi[L_FRAME48k / 2 + 1], specRr[L_FRAME48k / 2 + 1], specRi[L_FRAME48k / 2 + 1]; + float rfft_coef[L_FRAME48k]; + const float *p_w; + int16_t n, n0, n1; + int16_t rfft_coef_step; + ivas_error error; + + error = IVAS_ERR_OK; + + n0 = input_frame >> 1; + n1 = input_frame >> 2; + + if ( input_frame == L_FRAME16k ) + { + p_w = dft_trigo_32k; + rfft_coef_step = 4; + } + else if ( input_frame == L_FRAME32k ) + { + p_w = dft_trigo_32k; + rfft_coef_step = 2; + } + else if ( input_frame == L_FRAME48k ) + { + p_w = dft_trigo_48k; + rfft_coef_step = 2; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "failed estimate_itd()\n" ); + } + + for ( n = 0; n < n1; n++ ) + { + rfft_coef[n] = p_w[n * rfft_coef_step]; + rfft_coef[n0 - n] = p_w[n * rfft_coef_step]; + } + rfft_coef[n1] = p_w[n1 * rfft_coef_step]; + + estimate_itd_wnd_fft( srcL, specLr, specLi, rfft_coef, hPOC->wnd, input_frame ); + estimate_itd_wnd_fft( srcR, specRr, specRi, rfft_coef, hPOC->wnd, input_frame ); + + calc_poc( hPOC, hPOC->wnd, rfft_coef, specLr, specLi, specRr, specRi, input_frame ); + *corr = find_poc_peak( hPOC, itd, input_frame, STEREO_DMX_EVS_POC_W_FORGETTING ); + + return error; +} + + +/*-------------------------------------------------------------------* + * weighted_ave() + * + * create weighted downmix signal + *-------------------------------------------------------------------*/ + +static void weighted_ave( + const float src1[], /* i : Lch input signal */ + const float src2[], /* i : Rch input signal */ + float dst[], /* o : output signal */ + const float gain, /* i : adapting gain */ + const float old_gain, /* i : adapting prev gain */ + const int16_t input_frame, /* i : input frame length per channel */ + const float wnd[] /* i : window coef */ +) +{ + int16_t i, len; + float gain_tmp = 0.f, gain_sub; + + len = input_frame >> 4; + gain_sub = gain - old_gain; + + for ( i = 0; i < len; i++ ) + { + gain_tmp = old_gain + gain_sub * wnd[i]; + dst[i] = src1[i] * gain_tmp + src2[i] * ( 1.0f - gain_tmp ); + } + for ( ; i < input_frame; i++ ) + { + dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * calc_energy() + * + * calculate energy + *-------------------------------------------------------------------*/ + +static void calc_energy( + const float src1[], /* i : Lch input signal */ + const float src2[], /* i : Rch input signal */ + float energy[], /* o : calculated energy */ + const int16_t input_frame, /* i : input frame length per channel */ + const float ratio /* i : adapting ratio */ +) +{ + float E, wnd, wnd_diff; + int16_t i, adaptlen; + + /* Initialization */ + E = 0.0f; + adaptlen = input_frame >> 4; + wnd = 0.5f / (float) adaptlen; + wnd_diff = 1.0f / (float) adaptlen; + + for ( i = 0; i < adaptlen; i++ ) + { + E += ( src1[i] * wnd ) * ( src2[i] * wnd ); + + wnd += wnd_diff; + } + for ( ; i < input_frame - adaptlen; i++ ) + { + E += src1[i] * src2[i]; + } + for ( ; i < input_frame; i++ ) + { + wnd -= wnd_diff; + + E += ( src1[i] * wnd ) * ( src2[i] * wnd ); + } + + *energy = *energy * ratio + ( E / (float) input_frame ) * ( 1.0f - ratio ); + + return; +} + + +/*-------------------------------------------------------------------* + * adapt_gain() + * + * adapt gain to the signal + *-------------------------------------------------------------------*/ + +static void adapt_gain( + const float src[], /* i : input signal */ + float dst[], /* o : output signal */ + const float gain, /* i : adapting gain */ + const float old_gain, /* i : adapting prev gain */ + const int16_t input_frame, /* i : input frame length per channel */ + const float wnd[] /* i : window coef */ +) +{ + int16_t i, len; + float gain_tmp, gain_sub; + + len = input_frame >> 4; + gain_sub = gain - old_gain; + + for ( i = 0; i < len; i++ ) + { + gain_tmp = old_gain + gain_sub * wnd[i]; + dst[i] = src[i] * gain_tmp; + } + for ( ; i < input_frame; i++ ) + { + dst[i] = src[i] * gain; + } + + return; +} + + +/*-------------------------------------------------------------------* + * create_M_signal() + * + * create downmix signal + *-------------------------------------------------------------------*/ + +static void create_M_signal( + const float srcL[], /* i : Lch input signal */ + const float srcR[], /* i : Rch input signal */ + float dmx[], /* o : output signal */ + const float w_curr, /* i : adapting weight */ + const int16_t input_frame, /* i : input frame length per channel */ + const float wnd[], /* i : window coef */ + float *w_prev, /* i/o: adapting prev weight */ + float *dmx_energy, /* i/o: downmix signal energy */ + float *src_energy /* i/o: input signal energy */ +) +{ + float weighted[L_FRAME48k], eps, amp_mod[CPE_CHANNELS], Lbias; + + /* Initialization */ + eps = 1024.0f; + Lbias = ( w_prev[2] == 0 ) ? 4.0f : 0.25f; + + weighted_ave( srcL, srcR, dmx, w_curr, w_prev[0], input_frame, wnd ); + + calc_energy( srcL, srcL, src_energy, input_frame, STEREO_DMX_EVS_DMX_EGY_FORGETTING ); + calc_energy( srcR, srcR, src_energy + 1, input_frame, STEREO_DMX_EVS_DMX_EGY_FORGETTING ); + calc_energy( dmx, dmx, dmx_energy, input_frame, STEREO_DMX_EVS_DMX_EGY_FORGETTING ); + + if ( src_energy[0] * Lbias > src_energy[1] ) + { + amp_mod[0] = 1.0f - sqrtf( ( dmx_energy[0] + eps ) / ( src_energy[0] + eps ) ); + amp_mod[0] = max( amp_mod[0], 0.0f ); + amp_mod[1] = 0.0f; + } + else + { + amp_mod[1] = 1.0f - sqrtf( ( dmx_energy[0] + eps ) / ( src_energy[1] + eps ) ); + amp_mod[1] = max( amp_mod[1], 0.0f ); + amp_mod[0] = 0.0f; + } + + adapt_gain( srcL, weighted, amp_mod[0], w_prev[1], input_frame, wnd ); + v_add( dmx, weighted, dmx, input_frame ); + adapt_gain( srcR, weighted, amp_mod[1], w_prev[2], input_frame, wnd ); + v_add( dmx, weighted, dmx, input_frame ); + + w_prev[0] = w_curr; + w_prev[1] = amp_mod[0]; + w_prev[2] = amp_mod[1]; + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_dmx_evs_enc() + * + * Stereo downmix for EVS encoder routine + *-------------------------------------------------------------------*/ + +void stereo_dmx_evs_enc( + STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS, /* i/o: Stereo downmix for EVS encoder handle */ + const int32_t input_Fs, /* i : input sampling rate */ + int16_t data[CPE_CHANNELS * L_FRAME48k], /* i/o: input signal */ + const int16_t n_samples /* i : number of input samples */ +) +{ + int16_t n; + float dmx_weight, corr; + float data_f[CPE_CHANNELS][L_FRAME48k]; + float dmx_data[L_FRAME48k]; + int16_t input_frame; + + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + + for ( n = 0; n < input_frame; n++ ) + { + data_f[0][n] = (float) data[2 * n]; + data_f[1][n] = (float) data[2 * n + 1]; + } + if ( n_samples < input_frame ) + { + set_f( data_f[0] + n_samples, 0.0f, input_frame - n_samples ); + set_f( data_f[1] + n_samples, 0.0f, input_frame - n_samples ); + } + + estimate_itd( &corr, hStereoDmxEVS->hPOC, data_f[0], data_f[1], &hStereoDmxEVS->itd, input_frame ); + + if ( hStereoDmxEVS->itd ) + { + dmx_weight = ( ( hStereoDmxEVS->itd > 0 ) ? ( -1 ) : 1 ) * 0.5f * corr + 0.5f; + } + else + { + dmx_weight = 0.5f; + } + + create_M_signal( data_f[0], data_f[1], dmx_data, dmx_weight, input_frame, hStereoDmxEVS->s_wnd, + hStereoDmxEVS->dmx_weight, hStereoDmxEVS->pre_dmx_energy, hStereoDmxEVS->aux_dmx_energy ); + + mvr2s( dmx_data, data, n_samples ); + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_dmx_evs_init_encoder() + * + * open and initialize stereo downmix for EVS encoder + *-------------------------------------------------------------------*/ + +ivas_error stereo_dmx_evs_init_encoder( + STEREO_DMX_EVS_ENC_HANDLE *hStereoDmxEVS_out, /* o : Stereo downmix for EVS encoder handle */ + const int32_t input_Fs /* i : input sampling rate */ +) +{ + STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS; + int16_t n, input_frame; + + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + + hStereoDmxEVS = NULL; + if ( ( hStereoDmxEVS = (STEREO_DMX_EVS_ENC_HANDLE) count_malloc( sizeof( STEREO_DMX_EVS_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_ENC_DATA\n" ) ); + } + + hStereoDmxEVS->itd = 0.0f; + hStereoDmxEVS->pre_dmx_energy[0] = 0.0f; + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + hStereoDmxEVS->aux_dmx_energy[n] = 0.0f; + } + + hStereoDmxEVS->dmx_weight[0] = 0.5f; + hStereoDmxEVS->dmx_weight[1] = 0.0f; + hStereoDmxEVS->dmx_weight[2] = 0.0f; + + if ( input_frame == L_FRAME16k ) + { + hStereoDmxEVS->s_wnd = Stereo_dmx_s_wnd_coef_16k; + } + else if ( input_frame == L_FRAME32k ) + { + hStereoDmxEVS->s_wnd = Stereo_dmx_s_wnd_coef_32k; + } + else if ( input_frame == L_FRAME48k ) + { + hStereoDmxEVS->s_wnd = Stereo_dmx_s_wnd_coef_48k; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid frame length\n" ); + } + + hStereoDmxEVS->hPOC = NULL; + if ( ( hStereoDmxEVS->hPOC = (STEREO_DMX_EVS_POC_HANDLE) count_malloc( sizeof( STEREO_DMX_EVS_POC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_POC_DATA\n" ) ); + } + + hStereoDmxEVS->hPOC->shift_limit = (int16_t) ( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 ); + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + hStereoDmxEVS->hPOC->peakQ[n] = 0.0f; + hStereoDmxEVS->hPOC->peak_width[n] = (float) hStereoDmxEVS->hPOC->shift_limit / 2; + hStereoDmxEVS->hPOC->ispeak[n] = 0; + hStereoDmxEVS->hPOC->itdLR[n] = 0; + } + set_f( hStereoDmxEVS->hPOC->P, 0.0f, L_FRAME48k ); + + if ( input_frame == L_FRAME16k ) + { + hStereoDmxEVS->hPOC->wnd = Stereo_dmx_wnd_coef_48k; + } + else if ( input_frame == L_FRAME32k ) + { + hStereoDmxEVS->hPOC->wnd = Stereo_dmx_wnd_coef_32k; + } + else if ( input_frame == L_FRAME48k ) + { + hStereoDmxEVS->hPOC->wnd = Stereo_dmx_wnd_coef_48k; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid frame length\n" ); + } + hStereoDmxEVS->hPOC->eps = 2.0f * EVS_PI / ( (float) input_frame ); + + if ( input_frame == L_FRAME16k ) + { + hStereoDmxEVS->hPOC->sin = Stereo_dmx_s_wnd_coef_eps_16k; + } + else if ( input_frame == L_FRAME32k ) + { + hStereoDmxEVS->hPOC->sin = Stereo_dmx_s_wnd_coef_eps_32k; + } + else if ( input_frame == L_FRAME48k ) + { + hStereoDmxEVS->hPOC->sin = Stereo_dmx_s_wnd_coef_eps_48k; + } + else + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid frame length\n" ); + } + hStereoDmxEVS->hPOC->confidence = 0.0f; + + *hStereoDmxEVS_out = hStereoDmxEVS; + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * stereo_dmx_evs_close_encoder() + * + * close stereo downmix for EVS encoder + *-------------------------------------------------------------------*/ + +void stereo_dmx_evs_close_encoder( + STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS /* i/o: Stereo downmix for EVS encoder handle */ +) +{ + if ( hStereoDmxEVS->hPOC != NULL ) + { + count_free( hStereoDmxEVS->hPOC ); + hStereoDmxEVS->hPOC = NULL; + } + + count_free( hStereoDmxEVS ); + + return; +} diff --git a/lib_enc/ivas_stereo_eclvq_enc.c b/lib_enc/ivas_stereo_eclvq_enc.c new file mode 100644 index 0000000000..dffdafd17a --- /dev/null +++ b/lib_enc/ivas_stereo_eclvq_enc.c @@ -0,0 +1,959 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#include +#include "prot.h" +#include "wmops.h" +/* used only for norm_s in the code_length_from_count function */ +#include "basop32.h" + + +/*--------------------------------------------------------------- + * log_base2() + * + * + * ---------------------------------------------------------------*/ + +static double log_base2( + double x ) +{ + return log( x ) * INV_LOG_2; +} + +/*--------------------------------------------------------------- + * get_sign() + * + * + * ---------------------------------------------------------------*/ + +static int16_t get_sign( int16_t n ) +{ + return (uint16_t) n >> 15; /* extract the sign bit */ +} + + +/*--------------------------------------------------------------- + * ECSQ_quantize_vector() + * + * + * ---------------------------------------------------------------*/ + +void ECSQ_quantize_vector( + const float *input, + const float global_gain, + const int16_t N, + int16_t *output ) +{ + int16_t i; + float inv_global_gain; +#ifdef DEBUGGING + assert( N > 0 ); + assert( global_gain > 0.0f ); +#endif + + inv_global_gain = 1.0f / global_gain; + for ( i = 0; i < N; ++i ) + { + output[i] = (int16_t) round_f( input[i] * inv_global_gain ); + } + + return; +} + +/*--------------------------------------------------------------- + * ECSQ_compute_optimal_gain() + * + * compute the optimal global gain for dequantization of output + * if all the values in output are zero, it returns 0 + * ---------------------------------------------------------------*/ + +float ECSQ_compute_optimal_gain( + const float *input, + const int16_t N, + const int16_t *output ) +{ + int16_t i; + float sum_sq_output; + float sum_input_output; + float optimal_global_gain; +#ifdef DEBUGGING + assert( N > 0 ); +#endif + + sum_sq_output = 0.0f; + sum_input_output = 0.0f; + for ( i = 0; i < N; ++i ) + { + sum_sq_output += (float) output[i] * (float) output[i]; + sum_input_output += input[i] * (float) output[i]; + } + + optimal_global_gain = 0.0f; + if ( sum_sq_output != 0.0f ) + { + optimal_global_gain = sum_input_output / sum_sq_output; + } + + return optimal_global_gain; +} + +/*--------------------------------------------------------------- + * ECSQ_quantize_gain() + * + * quantize global gain + * ---------------------------------------------------------------*/ + +static int16_t ECSQ_quantize_gain( + float global_gain ) +{ + int16_t index; + +#ifdef DEBUGGING + assert( global_gain > 0.0f ); +#endif + + global_gain = max( global_gain, 1.0f ); /* because always index >= 0 anyway */ + + /* min gain = 1 (index 0), max gain ~= 29145 (index 126), domain range ~= 90 dB, resolution 90 / 127 ~= 0.7 dB */ + /* value 127 (ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO) is reserved and indicates that all values in the vector are zero */ + + index = (int16_t) ( ECLVQ_GLOBAL_GAIN_FACTOR * log10f( global_gain ) + 0.4898f ); + + /* for MSE quantization, the value f in (0, 1) is the middle between consecutive quantization points in the linear scale */ + /* 10 ^ (inv_global_gain_factor * f) - 1 = 10 ^ inv_global_gain_factor - 10 ^ (inv_global_gain_factor * f) */ + /* f = 0.5102, and when applying floor to convert to integer, 1 - f = 0.4898 must be used as the offset */ + + index = (int16_t) min( max( index, 0 ), 126 ); + + return index; +} + +/*--------------------------------------------------------------- + * arith_encode_bit() + * + * + * ---------------------------------------------------------------*/ + +static void arith_encode_bit( + ECSQ_instance *ecsq_inst, + const int16_t bit ) +{ + RangeUniEncState *rc_st_enc; + rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; + +#ifdef DEBUGGING + assert( bit >= 0 ); + assert( bit < 2 ); +#endif + + ecsq_inst->bit_count_estimate += 1024; /* 1024 eq 1 << 10, 22Q10 fixed-point representation */ + + if ( ecsq_inst->encoding_active ) + { + /* call to the actual AC */ + rc_uni_enc_encode_bits( rc_st_enc, bit, 1 ); + } + + return; +} + +/*--------------------------------------------------------------- + * arith_encode_bits() + * + * + * ---------------------------------------------------------------*/ + +static void arith_encode_bits( + ECSQ_instance *ecsq_inst, + const uint16_t n, + int16_t size ) +{ + RangeUniEncState *rc_st_enc; + rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; + +#ifdef DEBUGGING + assert( n < ( 1 << size ) ); +#endif + + ecsq_inst->bit_count_estimate += size << 10; /* 22Q10 fixed-point representation */ + + if ( ecsq_inst->encoding_active ) + { + rc_uni_enc_encode_bits( rc_st_enc, n, size ); + } + + return; +} + + +/*--------------------------------------------------------------- + * code_length_from_count() + * + * + * ---------------------------------------------------------------*/ + +static int16_t code_length_from_count( + const int16_t c ) +{ + /* compute the approximation of code length, 14 - log2(c), in 22Q10 fixed-point representation */ + /* with c in {1, ..., 2 ^ 14}, representing a probability count in 14-bit AC implementations */ + int16_t c_norm; + int16_t res; +#ifdef DEBUGGING + assert( c >= 1 ); + assert( c <= ( 1 << 14 ) ); +#endif + +#define WMC_TOOL_MAN + c_norm = norm_s( (int16_t) c ); /* equivalent with 14 - floor(log_base2(c)) */ +#undef WMC_TOOL_MAN + + /* compute linear approximation of log2(1 + x), for x in [0, 1], using a look-up table with 64 entries */ + /* normalize to {16384, ..., 32767}, subtract MSB bit, and convert to Q6 for indexing log2_1px_table */ + res = ( c_norm << 10 ) - log2_1px_table[( ( c << c_norm ) - ( 1 << 14 ) + ( 1 << 7 ) ) >> 8]; + +#ifdef DEBUGGING + assert( res >= 0 ); /* for c == 1 */ + assert( res <= 14 * ( 1 << 10 ) ); /* for c == 16384 */ +#endif + + /* |(14 - log2(c)) - res / (1 << 10)| < 0.0113, for c in {1, ..., 2 ^ 14} */ + /* complexity: 1 norm_s, 2 adds, 3 shifts, 1 table lookup */ + return res; +} + +/*--------------------------------------------------------------- + * arith_encode_bit_prob() + * + * encoding for one bit with the probabilies prob_0 = count0 / 2 ^ ECSQ_PROB_BITS and prob_1 = 1 - prob_0 + * ---------------------------------------------------------------*/ + +static void arith_encode_bit_prob( + ECSQ_instance *ecsq_inst, + const int16_t count0, + const int16_t bit ) +{ + int16_t count; + RangeUniEncState *rc_st_enc; + rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; + +#ifdef DEBUGGING + assert( bit >= 0 ); + assert( bit < 2 ); + assert( count0 >= 1 ); + assert( count0 <= ECSQ_PROB_TOTAL - 1 ); +#endif + + count = ECSQ_PROB_TOTAL - count0; + + if ( bit == 0 ) + { + count = count0; + } + + ecsq_inst->bit_count_estimate += code_length_from_count( count ); /* 22Q10 fixed-point representation */ + + if ( ecsq_inst->encoding_active ) + { + /* call to the actual AC */ + rc_uni_enc_encode_fast( rc_st_enc, bit * count0, count, 14 ); + } + + return; +} + +/*--------------------------------------------------------------- + * arith_encode_prob() + * + * + * ---------------------------------------------------------------*/ + +static void arith_encode_prob( + ECSQ_instance *ecsq_inst, + const uint16_t table[], + const int16_t table_size, + const int16_t symbol ) +{ + int16_t count; + RangeUniEncState *rc_st_enc; + + rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; + +#ifdef DEBUGGING + assert( symbol < table_size ); + assert( table[symbol] <= ( 1 << 14 ) ); +#else + count = table_size; /* just to avoid warning when DEBUGGING is deactivated */ +#endif + + count = table[symbol] - table[symbol + 1]; +#ifdef DEBUGGING + assert( count >= 1 ); + assert( count <= ( 1 << 14 ) ); +#endif + + ecsq_inst->bit_count_estimate += code_length_from_count( count ); /* 22Q10 fixed-point representation */ + + if ( ecsq_inst->encoding_active ) + { + /* call to the actual AC */ + rc_uni_enc_encode_fast( rc_st_enc, ECSQ_PROB_TOTAL - table[symbol], count, 14 ); + } + + return; +} + +/*--------------------------------------------------------------- + * arith_encode_elias_mod() + * + * + * ---------------------------------------------------------------*/ + +static void arith_encode_elias_mod( + ECSQ_instance *ecsq_inst, + const int16_t n ) +{ + int16_t i; +#ifdef DEBUGGING + assert( n >= 0 ); + /* n is already limited by the data type int16_t, so n_bits = floor(log_2(n)) <= 14 */ +#endif + + if ( n <= 1 ) + { + /* code for 0 is 10 and code for 1 is 11 */ + arith_encode_bit( ecsq_inst, 1 ); + arith_encode_bit( ecsq_inst, n ); + } + else /* n >= 2 */ + { + /* code consists of n_bits zero bits, an one bit, and n_bits data bits */ + int16_t n_bits; + + /* n_bits is floor(log_2(n)), the number of bits after the leading one bit */ + n_bits = 30 - norm_l( n ); + for ( i = 0; i < n_bits; i++ ) + { + arith_encode_bit( ecsq_inst, 0 ); + } + arith_encode_bit( ecsq_inst, 1 ); + + /* encode the n_bits data bits at once */ + arith_encode_bits( ecsq_inst, n - ( 1 << n_bits ), n_bits ); + } + + return; +} + +/*--------------------------------------------------------------- + * arith_encode_prob_escape() + * + * + * ---------------------------------------------------------------*/ + +static void arith_encode_prob_escape( + ECSQ_instance *ecsq_inst, + const uint16_t table[], + const int16_t table_size, + const int16_t symbol ) +{ + if ( symbol < table_size - 1 ) + { + arith_encode_prob( ecsq_inst, table, table_size, symbol ); + } + else + { + arith_encode_prob( ecsq_inst, table, table_size, table_size - 1 ); /* escape symbol */ + /* encode the additional value using a modified Elias integer code */ + arith_encode_elias_mod( ecsq_inst, symbol - ( table_size - 1 ) ); + } + + return; +} + + +/*--------------------------------------------------------------- + * get_best_param() + * + * + * ---------------------------------------------------------------*/ + +static int16_t get_best_param( + int16_t *x, + const int16_t start_offset, + const int16_t stop_offset, + float *avg_abs_sum, + int16_t *N0 ) +{ + int16_t v; + int16_t val; + int32_t sum_abs; + int16_t count; + int16_t count0; + int16_t param; + + const float offset = INV_LOG_2; /* offset = 1 / ln(2) and log2(offset) ~ 0.528766 */ + + sum_abs = 0; + count = stop_offset - start_offset + 1; + count0 = 0; +#ifdef DEBUGGING + assert( count > 0 ); +#endif + + /* compute sum(abs(x[v])) and sum(x[v] == 0) */ + for ( v = start_offset; v <= stop_offset; ++v ) + { +#ifdef DEBUGGING + assert( abs( x[v] ) <= MAX16B ); +#endif + + val = x[v]; + sum_abs += abs( val ); + if ( val == 0 ) + { + ++count0; + } + } + +#ifdef DEBUGGING + assert( sum_abs <= count * MAX16B ); +#endif + + /* the vector has at most ECSQ_NONZERO_MAX values of +-1 and the rest are zeros */ + if ( ( count - count0 <= ECSQ_NONZERO_MAX ) && ( sum_abs == count - count0 ) ) + { + *avg_abs_sum = ( sum_abs + 0.25f * count0 ) / count; + *N0 = count0; + + return ECSQ_ALL_ZERO_PARAM; + } + + *avg_abs_sum = ( sum_abs + 0.25f * count0 ) / count; + *N0 = count0; + + /* the best Laplace integer parameter is floor(log2(avg_abs_sum) + log2(offset)) */ + param = (int16_t) floor( log_base2( *avg_abs_sum * offset ) ); + + /* limit param value to the available exponent range */ + param = max( ECSQ_ALL_ZERO_PARAM + 1, param ); + param = min( param, ECSQ_ALL_ZERO_PARAM + ECSQ_PARAM_COUNT - 1 ); + + return param; +} + + +/*--------------------------------------------------------------- + * get_est_size() + * + * + * ---------------------------------------------------------------*/ + +#define ECSQ_log2TB_FIRST_PARAM -2 + +static float get_est_size( + const int16_t N, + float avg_abs_sum, + const int16_t N0, + int16_t param ) +{ + float size; + float two_to_param; + + two_to_param = (float) ( 1 << abs( param ) ); + if ( param < 0 ) + { + two_to_param = 1.0f / two_to_param; + } + + if ( param != ECSQ_ALL_ZERO_PARAM ) /* not all values are zeros */ + { + int16_t index; + index = param - ECSQ_log2TB_FIRST_PARAM; + index = min( index, ECSQ_log2TB_SIZE - 2 ); + +#ifdef DEBUGGING + assert( index >= 0 ); +#endif + + /* the estimated size in bits is N * log2(2 * 2 ^ param) + */ + /* + N * log2(e) * (avg_abs_sum / 2 ^ param) - (N - N0) * log2(T(2 ^ param)) - */ + /* - N0 * log2(T(2 * 2 ^ param)) */ + size = N * ( 1 + param + INV_LOG_2 * ( avg_abs_sum / two_to_param ) ); + size -= ( N - N0 ) * log2TB[index]; + size -= N0 * log2TB[index + 1]; + } + else + { + /* used for all zero values or for very low entropy with number of nonzeros <= ECSQ_NONZERO_MAX */ + int16_t nonzero; + float required_avg_abs_sum; + + nonzero = N - N0; + + required_avg_abs_sum = ( nonzero + 0.25f * N0 ) / N; /* the vector must have nonzero +-1 and N0 zeros */ + + if ( ( avg_abs_sum == required_avg_abs_sum ) && ( nonzero <= ECSQ_NONZERO_MAX ) ) + { + size = 2.0f; /* log_base2(1 + ECSQ_NONZERO_MAX), indicate the nonzero count */ + + /* the number of bits for the nonzero mask is log2(nchoosek(N, nonzero)) */ + size += ECSQ_log2_fact[N] - ECSQ_log2_fact[N - nonzero] - ECSQ_log2_fact[nonzero]; + + size += (float) nonzero; /* indicate the signs for nonzero values */ + } + else + { + /* the method cannot be used, return a huge value so that it will never be chosen */ + size = 1.0e11f; + } + } + + return size; +} + +/*--------------------------------------------------------------- + * ECSQ_encode_raw() + * + * encode input, which contains a concatenation of quantized RE8 integer-valued vectors; + * the return value is the approximate number of bits written, expressed in 22Q10 fixed-point representation + * ---------------------------------------------------------------*/ + +static int32_t ECSQ_encode_raw( + ECSQ_instance *ecsq_inst, + int16_t *input, + const int16_t N ) +{ + int32_t bit_count_estimate_initial; + + float total_size; + int16_t segment_count; + + int16_t seg_length, seg_start, seg_stop, segment, seg_count0; + int32_t est_size; + + int16_t est_param, first_param, last_param, param; + float best_size, test_size; + int16_t best_param, best_params[ECSQ_VECTOR_SIZE_MAX / ECSQ_SEGMENT_SIZE]; + int16_t saved_seg_count0[ECSQ_VECTOR_SIZE_MAX / ECSQ_SEGMENT_SIZE]; + + float avg_abs_sum; + const float scale_Q10 = 1.0f / 1024.0f; + int16_t i, idx, shift, val, sym, nonzero, left0, left1, count, count0, lsbs; + int16_t param_zb, best_param_zb; /* zero-based parameter index for coding */ + const uint16_t *tab_vals, *tab_abs_lsbs; + + bit_count_estimate_initial = ecsq_inst->bit_count_estimate; + +#ifdef DEBUGGING + assert( N > 0 ); + assert( ECSQ_ALL_ZERO_PARAM == -1 ); /* other values need code and table adjustments */ + assert( ( ecsq_inst->config_index >= 1 ) && ( ecsq_inst->config_index < ECSQ_CONFIG_COUNT ) ); + + /* ensure we are using target SNR configurations, disable target bits configurations for the moment */ + assert( ( ecsq_inst->config_index == 1 ) || ( ecsq_inst->config_index == 3 ) || ( ecsq_inst->config_index == 5 ) ); +#endif + + total_size = 0.0f; + segment_count = ( N + ECSQ_SEGMENT_SIZE - 1 ) / ECSQ_SEGMENT_SIZE; + + for ( segment = 0; segment < segment_count; ++segment ) + { + seg_start = segment * ECSQ_SEGMENT_SIZE; + seg_stop = min( seg_start + ECSQ_SEGMENT_SIZE, N ) - 1; + seg_length = seg_stop - seg_start + 1; + + est_param = get_best_param( input, seg_start, seg_stop, &avg_abs_sum, &seg_count0 ); + saved_seg_count0[segment] = seg_count0; + + /* find the best param around est_param for the current segment count */ + best_size = 1.0e10f; + best_param = -1000; + + if ( est_param == ECSQ_ALL_ZERO_PARAM ) /* all values are zero */ + { + first_param = ECSQ_ALL_ZERO_PARAM; + last_param = ECSQ_ALL_ZERO_PARAM + 2 * ECSQ_PARAM_SEARCH_RANGE; + } + else + { + first_param = max( ECSQ_ALL_ZERO_PARAM, est_param - ECSQ_PARAM_SEARCH_RANGE ); + last_param = min( est_param + ECSQ_PARAM_SEARCH_RANGE, ECSQ_ALL_ZERO_PARAM + ECSQ_PARAM_COUNT - 1 ); + } + + for ( param = first_param; param <= last_param; ++param ) + { + param_zb = param - ECSQ_ALL_ZERO_PARAM; + count = ECSQ_tab_param[ecsq_inst->config_index][param_zb] - ECSQ_tab_param[ecsq_inst->config_index][param_zb + 1]; + test_size = scale_Q10 * code_length_from_count( count ); + + test_size += get_est_size( seg_length, avg_abs_sum, seg_count0, param ); + + if ( test_size < best_size ) + { + best_param = param; + best_size = test_size; + } + } + + best_params[segment] = best_param; + total_size += best_size; + } + + if ( !ecsq_inst->encoding_active ) /* only size estimation is needed */ + { + est_size = (int32_t) ( total_size * 1024.0 + 0.5 ); /* 22Q10 fixed-point representation */ + + return est_size; + } + + /* encode with the best parameters: best_params[] */ + for ( segment = 0; segment < segment_count; ++segment ) + { + seg_start = segment * ECSQ_SEGMENT_SIZE; + seg_stop = seg_start + ECSQ_SEGMENT_SIZE - 1; + seg_length = ECSQ_SEGMENT_SIZE; + if ( segment == segment_count - 1 ) + { + seg_stop = N - 1; + seg_length = seg_stop - seg_start + 1; + } + + best_param_zb = best_params[segment] - ECSQ_ALL_ZERO_PARAM; + shift = max( 0, best_param_zb - 3 ); /* first nonzero shift of 1 is used for param 3 */ + + arith_encode_prob( ecsq_inst, ECSQ_tab_param[ecsq_inst->config_index], ECSQ_PARAM_COUNT, best_param_zb ); + + /* encode the actual values if not using the ECSQ_ALL_ZERO_PARAM parameter */ + if ( best_param_zb != 0 ) + { + tab_vals = ECSQ_tab_vals[best_param_zb - 1]; + idx = min( shift, 4 ); + tab_abs_lsbs = ECSQ_tab_abs_lsbs[idx]; + + for ( i = seg_start; i <= seg_stop; ++i ) + { + val = input[i]; + sym = (int16_t) abs( val ); + + if ( shift != 0 ) + { + lsbs = sym & ( ( 1 << shift ) - 1 ); + sym = sym >> shift; + + arith_encode_prob_escape( ecsq_inst, tab_vals, ECSQ_TAB_VALS_SIZE, sym ); + + if ( ( sym > 0 ) || ( shift > 4 ) ) + { + arith_encode_bits( ecsq_inst, lsbs, shift ); + } + else /* (sym == 0) && (shift <= 4) */ + { + arith_encode_prob( ecsq_inst, tab_abs_lsbs, 1 << shift, lsbs ); + } + } + else /* shift == 0 */ + { + arith_encode_prob_escape( ecsq_inst, tab_vals, ECSQ_TAB_VALS_SIZE, sym ); + } + + if ( val != 0 ) + { + arith_encode_bit( ecsq_inst, get_sign( val ) ); + } + } + } + else + { + nonzero = seg_length - saved_seg_count0[segment]; + +#ifdef DEBUGGING + assert( ECSQ_NONZERO_MAX == 3 ); + assert( nonzero <= ECSQ_NONZERO_MAX ); +#endif + + arith_encode_bits( ecsq_inst, nonzero, 2 ); /* log_base2(ECSQ_NONZERO_MAX + 1) == 2 */ + + left1 = nonzero; + left0 = seg_length - nonzero; + + for ( i = seg_start; i <= seg_stop; ++i ) + { + val = input[i]; + sym = (int16_t) abs( val ); + +#ifdef DEBUGGING + assert( sym <= 1 ); +#endif + + if ( left1 == 0 ) + { +#ifdef DEBUGGING + assert( sym == 0 ); +#endif + } + else if ( left0 == 0 ) + { +#ifdef DEBUGGING + assert( sym == 1 ); +#endif + } + else + { + count0 = left0 * ECSQ_tab_inverse[left0 + left1]; /* left0 * round(ECSQ_PROB_TOTAL / (left0 + left1)) */ + arith_encode_bit_prob( ecsq_inst, count0, sym ); + } + + if ( sym != 0 ) + { + arith_encode_bit( ecsq_inst, get_sign( val ) ); + --left1; + } + else + { + --left0; + } + } + } + } + +#ifdef DEBUGGING + DEBUG_LINE( 1 ) + { + static FILE *tolf = NULL; + if ( tolf == NULL ) + { + tolf = fopen( "tolerance.txt", "wt" ); + } + fprintf( tolf, "%8.3f %8.3f\n", ( ecsq_inst->bit_count_estimate - bit_count_estimate_initial ) / 1024.0, ( ecsq_inst->bit_count_estimate - bit_count_estimate_initial ) / 1024.0 - total_size ); + fflush( tolf ); + } +#endif + + return ecsq_inst->bit_count_estimate - bit_count_estimate_initial; +} + + +/*--------------------------------------------------------------- + * ECSQ_encode_target_SNR() + * + * encode input with an approximate target of target_SNR signal-to-noise ratio, and ensure no more than max_bits are used; + * the computed global gain index is returned into global_gain_index_output; + * if global_gain_index_output == ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO, nothing is written and the function returns 0; + * if output pointer is not NULL, it will contain the dequantized vector, as it will be available at the decoder side; + * the return value is the approximate number of bits written, expressed in 22Q10 fixed-point representation + * ---------------------------------------------------------------*/ + +#define ECSQ_MAX_BITS_ITERATIONS 2 + +int32_t ECSQ_encode_target_SNR( + ECSQ_instance *ecsq_inst, + const float *input, + const int16_t N, + const float target_SNR, + const int16_t max_bits, + float *output, + int16_t *global_gain_index_output ) +{ + int16_t global_gain_index; + int16_t global_gain_index_last; /* used to potentially save one call to ECSQ_quantize_vector */ + int16_t quantized_input[ECSQ_VECTOR_SIZE_MAX]; + int16_t saved_encoding_active; + int32_t saved_bit_count_estimate; + int32_t test_size, adjust_size; + int16_t i, iteration; + float global_gain, adjust_global_gain_index; + int32_t max_bits_fixpt; + float sum_squared, target_ratio, target_sum_squared_error; + const float global_gain_step = powf( 10.0f, ECLVQ_INV_GLOBAL_GAIN_FACTOR ); +#ifdef DEBUGGING + int16_t j; + assert( N > 0 ); +#endif + + max_bits_fixpt = max_bits * 1024; /* max_bits_fixpt is in 22Q10 fixed-point representation */ + + if ( target_SNR <= 0.0f ) + { + /* a target SNR of 0.0 dB is already achieved by quantizing all values in the vector to zero */ + *global_gain_index_output = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; + if ( output != NULL ) + { + set_f( output, 0.0f, N ); + } + + return 0; /* nothing is coded when global gain index is ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO */ + } + + sum_squared = 0.0f; + for ( i = 0; i < N; ++i ) + { + sum_squared += input[i] * input[i]; + } + + if ( sum_squared < 0.25f ) /* all the values in the input vector will always be quantized to zero */ + { + /* the condition above holds because sum(input[i] ^ 2) < 0.25 => max(abs(input[i])) < 0.5 */ + *global_gain_index_output = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; + if ( output != NULL ) + { + set_f( output, 0.0f, N ); + } + + return 0; /* nothing is coded when global gain index is ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO */ + } + + /* save internal state and activate size evaluation only */ + saved_encoding_active = ecsq_inst->encoding_active; + saved_bit_count_estimate = ecsq_inst->bit_count_estimate; + ecsq_inst->encoding_active = 0; + + /* target_ratio is the target ratio between the sum squared values of input and sum squared values of quantization error */ + target_ratio = powf( 10.0f, target_SNR / 10.0f ); + target_sum_squared_error = sum_squared / target_ratio; + /* the mean of squared quantization error for uniform scalar quantization is 1 / 12, approximately 0.0833 */ + /* when including global_gain, the relationship is target_sum_squared_error ~ (0.0833 * N) * global_gain ^ 2 */ + /* the representable range for global_gain is from 1 (global_gain_index 0) to 29145 (global_gain_index 126) inclusive */ + global_gain = sqrtf( target_sum_squared_error / ( 0.0833f * (float) N ) ); + /* quantize the estimated global_gain */ + global_gain_index = ECSQ_quantize_gain( global_gain ); + + iteration = 0; + + /* do the quantization with the dequantized estimated global_gain_index found */ + global_gain = ECSQ_dequantize_gain( global_gain_index ); + global_gain_index_last = global_gain_index; + ECSQ_quantize_vector( input, global_gain, N, quantized_input ); + + test_size = ECSQ_encode_raw( ecsq_inst, quantized_input, N ); +#ifdef DEBUGGING + DEBUG_LINE( 1 ) + printf( "global_gain_index[0] %3d global_gain %9.3f test_size %9d max_bits %9d\n", global_gain_index, global_gain, test_size, max_bits_fixpt ); +#endif + + ++iteration; + while ( ( test_size > max_bits_fixpt ) && ( iteration < ECSQ_MAX_BITS_ITERATIONS ) ) + { + adjust_size = test_size - max_bits_fixpt; + /* assume doubling the quantization step size will reduce the entropy with (up to) one bit */ + adjust_global_gain_index = (int16_t) ceil( adjust_size / ( 1024.0f * N * log_base2( global_gain_step ) ) ); + global_gain_index = min( (int16_t) ( global_gain_index + adjust_global_gain_index ), 126 ); + + global_gain = ECSQ_dequantize_gain( global_gain_index ); + global_gain_index_last = global_gain_index; + ECSQ_quantize_vector( input, global_gain, N, quantized_input ); + + test_size = ECSQ_encode_raw( ecsq_inst, quantized_input, N ); +#ifdef DEBUGGING + DEBUG_LINE( 1 ) + printf( "global_gain_index[%d] %3d global_gain %9.3f test_size %9d max_bits %9d\n", iteration, global_gain_index, global_gain, test_size, max_bits_fixpt ); +#endif + + ++iteration; + } + + if ( test_size > max_bits_fixpt ) + { +#ifdef DEBUGGING + DEBUG_LINE( 1 ) + printf( "test_size %9d still larger than max_bits %9d, incrementing global_gain_index\n", test_size, max_bits_fixpt ); +#endif + /* further increase the quantization step with the smallest increment for global_gain_index */ + global_gain_index = (int16_t) min( global_gain_index + 1, 126 ); + } + + /* restore internal state */ + ecsq_inst->encoding_active = saved_encoding_active; + ecsq_inst->bit_count_estimate = saved_bit_count_estimate; + + /* do the quantization with the dequantized final global_gain_index found */ + global_gain = ECSQ_dequantize_gain( global_gain_index ); + + if ( global_gain_index != global_gain_index_last ) + { + ECSQ_quantize_vector( input, global_gain, N, quantized_input ); + } + + global_gain = ECSQ_compute_optimal_gain( input, N, quantized_input ); + + if ( global_gain == 0.0f ) /* all values in quantized_input are zero */ + { + *global_gain_index_output = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; + if ( output != NULL ) + { + set_f( output, 0.0f, N ); + } + + return 0; /* nothing is coded when global gain index is ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO */ + } + + global_gain_index = ECSQ_quantize_gain( global_gain ); + *global_gain_index_output = global_gain_index; + +#ifdef DEBUGGING + DEBUG_LINE( 1 ) + { + float actual_sum_squared_error; + float delta_global_gain_index; + actual_sum_squared_error = 0.0f; + + /* compute the actual sum squared quantization error */ + global_gain = ECSQ_dequantize_gain( global_gain_index ); + for ( j = 0; j < N; ++j ) + { + float error; + error = input[j] - (float) quantized_input[j] * global_gain; + + actual_sum_squared_error += error * error; + } + delta_global_gain_index = (float) ( log( target_sum_squared_error / actual_sum_squared_error ) / ( 2.0f * log( global_gain_step ) ) ); + printf( "global_gain_index %3d global_gain %9.3f target_SSE %13.6e actual_SSE %13.6e delta_global_gain_index %9.3f\n", global_gain_index, global_gain, target_sum_squared_error, actual_sum_squared_error, delta_global_gain_index ); + } +#endif + + if ( output != NULL ) + { + global_gain = ECSQ_dequantize_gain( global_gain_index ); + ECSQ_dequantize_vector( quantized_input, global_gain, N, output ); + } + + ECSQ_encode_raw( ecsq_inst, quantized_input, N ); + + return ecsq_inst->bit_count_estimate - saved_bit_count_estimate; +} diff --git a/lib_enc/ivas_stereo_ica_enc.c b/lib_enc/ivas_stereo_ica_enc.c new file mode 100644 index 0000000000..d63c8b217c --- /dev/null +++ b/lib_enc/ivas_stereo_ica_enc.c @@ -0,0 +1,1400 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" +#include "rom_com.h" +#include "ivas_rom_com.h" + + +/*--------------------------------------------------------------- + * Local function prototypes + * ---------------------------------------------------------------*/ + +static void unclr_calc_corr_features( STEREO_CLASSIF_HANDLE hStereoClassif, STEREO_TCA_ENC_HANDLE hStereoTCA, const float buf1[], const float buf2[], const int16_t length, const float corrEst[], const int16_t lagSearchRange[], float *corrEst_ncorr ); + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define XL_BIAS 0.20f +#define XH_BIAS 0.40f +#define XL_WIDTH 0.12f +#define XH_WIDTH 0.15f /* 0.25 is MAX */ +#define YL_DIST 7.0f +#define YH_DIST 9.0f +#define SMOOTH_DIST_FACTOR 0.4f +#define SMOOTH_ENV_FACTOR 0.6f + +#define A_BIAS ( ( XH_BIAS - XL_BIAS ) / ( YH_DIST - YL_DIST ) ) +#define B_BIAS ( XH_BIAS - ( A_BIAS * YH_DIST ) ) +#define A_WIDTH ( ( XH_WIDTH - XL_WIDTH ) / ( YH_DIST - YL_DIST ) ) +#define B_WIDTH ( XH_WIDTH - ( A_WIDTH * YH_DIST ) ) + + +/*--------------------------------------------------------------- + * tcaTargetCh_LA() + * + * Temporal channel adjustment of LA samples in target channel + * ---------------------------------------------------------------*/ + +static void tcaTargetCh_LA( + STEREO_TCA_ENC_HANDLE hStereoTCA, + float *ptrChanL, + float *ptrChanR, + const int16_t currentNCShift, + const int16_t input_frame ) +{ + int16_t i, j; + int16_t tempS; + float tempF1, tempF2, gAdj; + + float *ref, *target; + float win[240]; /* 5 ms at 48 kHz */ + + if ( hStereoTCA->refChanIndx == L_CH_INDX ) + { + ref = ptrChanL; + target = ptrChanR; + } + else + { + ref = ptrChanR; + target = ptrChanL; + } + + tempS = NS2SA( input_frame * FRAMES_PER_SEC, L_SAMPLES_LA_NS ); + tempF1 = 0.0f; + tempF2 = 0.0f; + for ( i = 0; i < ( input_frame - currentNCShift ); i++ ) + { + tempF1 += fabsf( ref[i] ); + tempF2 += fabsf( target[i + currentNCShift] ); + } + gAdj = ( tempF1 == 0 ) ? 1.0f : tempF2 / max( tempF1, 0.00001f ); + + tempF1 = EVS_PI / ( 2.0f * (float) tempS ); + for ( i = 0; i < tempS; i++ ) + { + win[i] = sinf( tempF1 * ( 0.5f + (float) i ) ); + } + + j = 0; + for ( i = ( input_frame - currentNCShift - tempS ); i < input_frame - currentNCShift; i++, j++ ) + { + target[i + currentNCShift] = ( win[j] * gAdj ) * ref[i] + ( 1.0f - win[j] ) * target[i + currentNCShift]; + } + for ( ; i < input_frame; i++, j++ ) + { + target[i + currentNCShift] = gAdj * ref[i]; + } + + return; +} + +/*--------------------------------------------------------------- + * spectral_balancer() + * + * Spectral-balancer to take care of the low-freq rumble and + * compensate for the pre-emphasis. + * ---------------------------------------------------------------*/ + +void spectral_balancer( + float *signal, + float *mem, + const int16_t lg, + const int16_t coeff_set ) +{ + int16_t i; + float x0, x1, x2, y0, y1, y2; + float a1, a2, b0, b1, b2; + + y1 = mem[0]; + y2 = mem[1]; + x0 = mem[2]; + x1 = mem[3]; + + /* hp filter 60Hz at 3dB for 8000KHz sampling rate + 1. [b,a] = butter(1, 60.0/8000.0, 'high'); + 2. spectral_balancing_filter + < maybe not needed>> + b =[1, -1] [1, -0.6] + a =[1, -0.95395255590776329] [1, 0.5] */ + if ( coeff_set == 0 ) + { + a1 = 0.747789178258504f; + a2 = -0.272214937925007f; + b0 = 0.505001029045878f; + b1 = -1.01000205809176f; + b2 = 0.505001029045878f; + } + else + { + a1 = -0.13456126833218354f; + a2 = -0.38813694706072926f; + b0 = 1.0f; + b1 = -1.9980666374183167f; + b2 = 1.0f; + } + + for ( i = 0; i < lg; i++ ) + { + x2 = x1; + x1 = x0; + x0 = signal[i]; + y0 = ( y1 * a1 ) + ( y2 * a2 ) + ( x0 * b0 ) + ( x1 * b1 ) + ( x2 * b2 ); + signal[i] = y0; + y2 = y1; + y1 = y0; + } + + mem[0] = ( ( y1 > 1e-10 ) | ( y1 < -1e-10 ) ) ? y1 : 0; + mem[1] = ( ( y2 > 1e-10 ) | ( y2 < -1e-10 ) ) ? y2 : 0; + mem[2] = ( ( x0 > 1e-10 ) | ( x0 < -1e-10 ) ) ? x0 : 0; + mem[3] = ( ( x1 > 1e-10 ) | ( x1 < -1e-10 ) ) ? x1 : 0; + + return; +} + + +/*--------------------------------------------------------------- + * deEmphResample() + * + * De-emphasize and resample the L and R channels. + * ---------------------------------------------------------------*/ + +static void deEmphResample( + STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA encoder handle */ + const float *tempChan1, /* i : Stereo data */ + const float *tempChan2, /* i : Stereo data */ + float *chan1, + float *chan2, + const int16_t input_frame, + const int16_t dsFactor ) +{ + float buf1[L_FRAME48k], buf2[L_FRAME48k]; + float tempBuf1[2 * L_FRAME_DS], tempBuf2[2 * L_FRAME_DS]; + int16_t i; + int16_t dsFac1, dsFac2; + + /* Estimate first and second stage downsample factors */ + dsFac1 = ( dsFactor >> 1 ); + dsFac2 = dsFactor / dsFac1; + + /* convert stereo data to two distinct channels, e.g., L, R */ + mvr2r( tempChan1, buf1, input_frame ); + mvr2r( tempChan2, buf2, input_frame ); + + /* De-emphasis, 1/(1-mu z^-1), and resample, stage 1 */ + deemph( buf1, PREEMPH_FAC_16k, input_frame, &hStereoTCA->memdecim[0] ); + deemph( buf2, PREEMPH_FAC_16k, input_frame, &hStereoTCA->memdecim[1] ); + + for ( i = 0; i < ( input_frame / dsFac1 ); i++ ) + { + tempBuf1[i] = buf1[i * dsFac1]; + tempBuf2[i] = buf2[i * dsFac1]; + } + + /* De-emphasis, 1/(1-mu z^-1), and resample, stage 2 */ + deemph( tempBuf1, PREEMPH_FAC_16k, ( input_frame / dsFac1 ), &hStereoTCA->memdecim[2] ); + deemph( tempBuf2, PREEMPH_FAC_16k, ( input_frame / dsFac1 ), &hStereoTCA->memdecim[3] ); + + for ( i = 0; i < ( input_frame / dsFactor ); i++ ) + { + chan1[i] = tempBuf1[i * dsFac2]; + chan2[i] = tempBuf2[i * dsFac2]; + } + + spectral_balancer( chan1, &hStereoTCA->memdecim[4], input_frame / dsFactor, 0 ); /*4 mem */ + spectral_balancer( chan2, &hStereoTCA->memdecim[8], input_frame / dsFactor, 0 ); /*4 mem */ + + return; +} + +/*--------------------------------------------------------------- + * utilCrossCorr_mod() + * + * Biased crossCorr estimation between buf1, buf2 over the + * lag range of (lagSearchRange[0], lagSearchRange[1]). + * ---------------------------------------------------------------*/ + +static void utilCrossCorr_mod( + STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: ICA Stereo Encoder handle */ + const float *buf1, + const float *buf2, + float *corrEst, /* o : correlation estimate */ + const int16_t *lagSearchRange, + const int16_t len ) +{ + float C, E1, E2; + int16_t i, j; + float Inv_Tot_E; + + E1 = sum2_f( buf1, len ); + E2 = sum2_f( buf2, len ); + + Inv_Tot_E = 1.0f / ( ( 2.0f * (float) len ) * sqrtf( ( E1 + hStereoTCA->E1_mem ) * ( E2 + hStereoTCA->E2_mem ) + 0.000000001f ) ); + + hStereoTCA->E1_mem = E1; + hStereoTCA->E2_mem = E2; + + for ( i = lagSearchRange[0], j = 0; i <= 0; i++, j++ ) + { + C = dotp( buf1, buf2 + i, len ); + corrEst[j] = ( C + hStereoTCA->C_mem[j] ) * Inv_Tot_E; + hStereoTCA->C_mem[j] = C; + } + + for ( ; i <= lagSearchRange[1]; i++, j++ ) + { + C = dotp( buf1 - i, buf2, len ); + corrEst[j] = ( C + hStereoTCA->C_mem[j] ) * Inv_Tot_E; + hStereoTCA->C_mem[j] = C; + } + + return; +} + + +/*--------------------------------------------------------------- + * utilCrossCorr() + * + * crossCorr estimation between buf1, buf2 over the + * lag range of (lagSearchRange[0], lagSearchRange[1]). + * ---------------------------------------------------------------*/ + +static void utilCrossCorr( + const float *buf1, + const float *buf2, + const float *win, + float *corrEst, /* o : correlation estimate */ + const int16_t *lagSearchRange, + const int16_t len, + const int16_t winSymmFlag ) +{ + float tempBuf1[L_FRAME48k]; + float tempBuf2[L_FRAME48k]; + float temp, scale; + int16_t i, j; + + /* Apply windowing */ + if ( win != NULL ) + { + if ( winSymmFlag == 0 ) + { + v_mult( buf1, win, tempBuf1, len ); + v_mult( buf2, win, tempBuf2, len ); + } + else + { + v_mult( buf1, win, tempBuf1, ( len >> 1 ) ); + v_mult( buf2, win, tempBuf2, ( len >> 1 ) ); + + for ( i = ( len >> 1 ); i < len; i++ ) + { + tempBuf1[i] = win[len - 1 - i] * buf1[i]; + tempBuf2[i] = win[len - 1 - i] * buf2[i]; + } + } + } + else + { + mvr2r( buf1, tempBuf1, len ); + mvr2r( buf2, tempBuf2, len ); + } + + temp = sum2_f( tempBuf1, len ); + temp *= sum2_f( tempBuf2, len ); + scale = ( temp == 0 ) ? 1.0f : 1.0f / sqrtf( temp ); + + /* starting point of lag search range should be less than the ending point */ + assert( lagSearchRange[0] <= lagSearchRange[1] ); + + /* first part of noncausal corr est. */ + for ( i = lagSearchRange[0], j = 0; i <= min( 0, lagSearchRange[1] ); i++, j++ ) + { + temp = dotp( tempBuf1 - i, tempBuf2, ( len + i ) ); + corrEst[j] = temp / ( len + i ); + } + + /* second part of noncausal corr est. */ + for ( ; i <= lagSearchRange[1]; i++, j++ ) + { + temp = dotp( tempBuf1, tempBuf2 + i, ( len - i ) ); + corrEst[j] = temp / ( len - i ); + } + v_multc( corrEst, scale, corrEst, j ); + + return; +} + +/*--------------------------------------------------------------- + * corrStatsEst() + * + * Non-causal shift estimation to encode future samples. + * ---------------------------------------------------------------*/ + +static void corrStatsEst( + STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA Encoder handle */ + const float *buf1, /* i : channel 1 */ + const float *buf2, /* i : channel 2 */ + const int16_t bufLenDS, /* i : buffer length */ + const int16_t dsFactor, /* i : buffer length */ + const int16_t vad_flag1, /* i : VAD flag channel 1 */ + const int16_t vad_flag2, /* i : VAD flag channel 2 */ + STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier handle */ +) +{ + int16_t lagSearchRange[2]; + float corrEst[2 * L_NCSHIFT_DS + 1]; + int16_t corrLagStats[3]; + float *tempRK; + const float *winInterp; + float rInterp[MAX_INTERPOLATE]; + int16_t interpMin, interpMax, interpLen; + int16_t i, j, k, m; + float tempF, alpha; + float win_bias; + int16_t tempLen, win_width; + float loc_weight_win[4 * L_NCSHIFT_DS + 1]; + float X_hat, Y_hat, XY_hat, X_SQR_hat; + float alpha_reg, beta_reg, reg_prv_corr, dist_reg_prv_corr, bias_par, width_par; + float k1, k2, temp_A, temp_B; + int16_t stmp; + float corrEst_ncorr; + + /* init of regression parameters*/ + X_hat = 0; + X_SQR_hat = 0; + XY_hat = 0; + + /* Initializations */ + alpha = 0.7f; + lagSearchRange[0] = -L_NCSHIFT_DS; + lagSearchRange[1] = L_NCSHIFT_DS; + tempLen = ( 2 * L_NCSHIFT_DS + 1 ); + + set_s( corrLagStats, 0, 3 ); + + /* First iteration of xcorr estimation */ + utilCrossCorr_mod( hStereoTCA, buf1, buf2, corrEst, lagSearchRange, bufLenDS - L_XCORRMEM_DS ); + + /* calculate features for the UNCLR classifier */ + unclr_calc_corr_features( hStereoClassif, hStereoTCA, buf1, buf2, bufLenDS - L_XCORRMEM_DS, corrEst, lagSearchRange, &corrEst_ncorr ); + + for ( i = 1; i < 3; i++ ) + { + v_add( hStereoTCA->corrEstPrev[i], hStereoTCA->corrEstPrev[0], hStereoTCA->corrEstPrev[0], tempLen ); + } + + /* back up the corrEst */ + for ( i = 0; i < 2; i++ ) + { + mvr2r( hStereoTCA->corrEstPrev[i + 1], hStereoTCA->corrEstPrev[i], tempLen ); + } + mvr2r( corrEst, hStereoTCA->corrEstPrev[2], tempLen ); + + temp_A = sumAbs( buf1, L_FRAME_DS - L_XCORRMEM_DS ) + sumAbs( buf2, L_FRAME_DS - L_XCORRMEM_DS ); + temp_B = sumAbs( buf1 + ( L_FRAME_DS - L_XCORRMEM_DS ), L_XCORRMEM_DS ) + sumAbs( buf2 + ( L_FRAME_DS - L_XCORRMEM_DS ), L_XCORRMEM_DS ); + tempF = temp_A + temp_B + hStereoTCA->mem_tempF; + hStereoTCA->mem_tempF = temp_B; + + alpha = 0.93f; + if ( tempF > 4.0f * hStereoTCA->ica_envVarLT ) + { + alpha = 0.83f; + } + else if ( tempF > 2.0f * hStereoTCA->ica_envVarLT ) + { + alpha = 0.85f; + } + else if ( tempF > hStereoTCA->ica_envVarLT ) + { + alpha = 0.90f; + } + + hStereoTCA->corrStatsSmoothFac = alpha; + + /* long term corr Stats estimation */ + v_multc( hStereoTCA->corrEstLT, alpha, hStereoTCA->corrEstLT, 2 * L_NCSHIFT_DS + 1 ); + v_multc( corrEst, 1.0f - alpha, corrEst, 2 * L_NCSHIFT_DS + 1 ); + v_add( hStereoTCA->corrEstLT, corrEst, hStereoTCA->corrEstLT, 2 * L_NCSHIFT_DS + 1 ); + + hStereoTCA->ica_envVarLT = SMOOTH_ENV_FACTOR * hStereoTCA->ica_envVarLT + ( 1 - SMOOTH_ENV_FACTOR ) * tempF; + + mvr2r( hStereoTCA->corrEstLT, corrEst, 2 * L_NCSHIFT_DS + 1 ); + Y_hat = hStereoTCA->delay_0_mem[0]; + /* Note: keep X_hat and X_SQR_hat calculations inside the loop to allow future tuning of MAX_DELAYREGLEN */ + for ( i = 1; i < MAX_DELAYREGLEN; i++ ) + { + X_hat += (float) i; + Y_hat += hStereoTCA->delay_0_mem[i]; + XY_hat += i * hStereoTCA->delay_0_mem[i]; + X_SQR_hat += (float) ( i * i ); + } + X_hat *= INV_MAX_DELAYREGLEN; + Y_hat *= INV_MAX_DELAYREGLEN; + XY_hat *= INV_MAX_DELAYREGLEN; + X_SQR_hat *= INV_MAX_DELAYREGLEN; + + beta_reg = 0; + tempF = X_SQR_hat - ( X_hat * X_hat ); + if ( tempF != 0 ) + { + beta_reg = ( XY_hat - X_hat * Y_hat ) / tempF; + } + alpha_reg = ( Y_hat - beta_reg * X_hat ); + reg_prv_corr = beta_reg * MAX_DELAYREGLEN + alpha_reg; + + if ( TRUNC( reg_prv_corr ) <= -L_NCSHIFT_DS ) + { + reg_prv_corr = -L_NCSHIFT_DS + 1; + } + + if ( TRUNC( reg_prv_corr ) >= L_NCSHIFT_DS ) + { + reg_prv_corr = L_NCSHIFT_DS - 1; + } + + bias_par = A_BIAS * hStereoTCA->smooth_dist_reg_prv_corr + B_BIAS; + bias_par = min( bias_par, XH_BIAS ); + bias_par = max( bias_par, XL_BIAS ); + + width_par = A_WIDTH * hStereoTCA->smooth_dist_reg_prv_corr + B_WIDTH; + width_par = min( width_par, XH_WIDTH ); + width_par = max( width_par, XL_WIDTH ); + + win_width = (int16_t) ( width_par * ( 4 * L_NCSHIFT_DS + 1 ) ); + win_bias = bias_par; + k1 = 0.5f * ( 1.0f + win_bias ); + k2 = 0.5f * ( 1.0f - win_bias ); + + for ( i = 0; i < ( 2 * L_NCSHIFT_DS - 2 * win_width ); i++ ) + { + loc_weight_win[i] = win_bias; + } + + for ( i = ( 2 * L_NCSHIFT_DS - 2 * win_width ); i <= ( 2 * L_NCSHIFT_DS + 2 * win_width ); i++ ) + { + loc_weight_win[i] = k1 + k2 * cosf( EVS_PI * ( ( i - 2 * L_NCSHIFT_DS ) / ( 2.0f * win_width ) ) ); + } + + for ( i = ( 2 * L_NCSHIFT_DS + 2 * win_width ); i < ( 4 * L_NCSHIFT_DS + 1 ); i++ ) + { + loc_weight_win[i] = win_bias; + } + + for ( i = 0, j = L_NCSHIFT_DS - TRUNC( reg_prv_corr ); i < 2 * L_NCSHIFT_DS + 1; i++, j++ ) + { + corrEst[i] *= loc_weight_win[j]; + } + + if ( hStereoTCA->prevTargetGain < 0.8f && vad_flag1 ) + { + /* ch 2 is prev reference channel */ + v_multc( corrEst, 1.2f, corrEst, L_NCSHIFT_DS + 1 ); + v_multc( corrEst + L_NCSHIFT_DS + 1, 0.833f, corrEst + L_NCSHIFT_DS + 1, L_NCSHIFT_DS ); + } + else if ( hStereoTCA->prevTargetGain > 1.2f && vad_flag1 ) + { + /* ch 1 is prev reference channel */ + v_multc( corrEst, 0.833f, corrEst, L_NCSHIFT_DS ); + v_multc( corrEst + L_NCSHIFT_DS, 1.2f, corrEst + L_NCSHIFT_DS, L_NCSHIFT_DS + 1 ); + } + + if ( corrEst_ncorr > 0.8f && vad_flag1 ) + { + i = max( 0, hStereoTCA->prevCorrLagStats[0] - 1 + L_NCSHIFT_DS ); + j = min( 2 * L_NCSHIFT_DS, hStereoTCA->prevCorrLagStats[0] + 1 + L_NCSHIFT_DS ); + k = j - i + 1; + v_multc( corrEst + i, 1.2f, corrEst + i, k ); + } + + /* Initial corr lag estimate */ + corrLagStats[0] = maximum( corrEst, ( lagSearchRange[1] - lagSearchRange[0] + 1 ), &tempF ); + corrLagStats[0] += lagSearchRange[0]; + + stmp = corrLagStats[0] * dsFactor; + hStereoClassif->unclr_fv[E_corrLagStats0] = (float) stmp; + hStereoClassif->xtalk_fv[E_corrLagStats0] = (float) stmp; + hStereoClassif->xtalk_fv[E_ica_corr_value0] = tempF; + + if ( vad_flag1 == 0 && alpha > 0.7f ) + { + corrLagStats[0] = 0; + } + + dist_reg_prv_corr = fabsf( reg_prv_corr - corrLagStats[0] ); + + if ( vad_flag1 == 1 && vad_flag2 == 1 ) + { + hStereoTCA->smooth_dist_reg_prv_corr = SMOOTH_DIST_FACTOR * hStereoTCA->smooth_dist_reg_prv_corr + ( 1.0f - SMOOTH_DIST_FACTOR ) * dist_reg_prv_corr; + + mvr2r( &( hStereoTCA->delay_0_mem[1] ), &( hStereoTCA->delay_0_mem[0] ), MAX_DELAYREGLEN - 1 ); + + hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1] = 0.2f * hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1] + 0.8f * corrLagStats[0]; + + if ( fabsf( reg_prv_corr - hStereoTCA->delay_0_mem[0] ) > 25 ) + { + set_f( &( hStereoTCA->delay_0_mem[0] ), hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1], MAX_DELAYREGLEN - 1 ); + } + } + else + { + hStereoTCA->smooth_dist_reg_prv_corr = 0.; + } + + if ( vad_flag1 == 0 || vad_flag2 == 0 ) + { + corrLagStats[0] = TRUNC( hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1] ); + } + + /* second iteration of xcorr update @ inputFs with interp*/ + tempRK = hStereoTCA->corrEstLT - lagSearchRange[0] + corrLagStats[0]; + set_f( rInterp, 0, MAX_INTERPOLATE ); + + /* select the Rk interp sinc window */ + winInterp = ica_sincInterp4 + SINC_ORDER1; + if ( dsFactor == 2 ) + { + winInterp = ica_sincInterp2 + SINC_ORDER1; + } + else if ( dsFactor == 6 ) + { + winInterp = ica_sincInterp6 + SINC_ORDER1; + } + + corrLagStats[1] = corrLagStats[0] * dsFactor; + + interpMin = max( -( dsFactor - 1 ), -corrLagStats[1] - L_NCSHIFT_DS * dsFactor ); + interpMax = min( ( dsFactor - 1 ), L_NCSHIFT_DS * dsFactor - corrLagStats[1] ); + interpLen = interpMax - interpMin + 1; + + for ( i = interpMin, k = 0; i <= interpMax; i++, k++ ) + { + rInterp[k] = 0.0f; + for ( j = -SINC_ORDER1 / dsFactor; j <= SINC_ORDER1 / dsFactor; j++ ) + { + m = j * dsFactor; + if ( ( m - i >= -SINC_ORDER1 ) && ( m - i <= SINC_ORDER1 ) ) + { + if ( j > lagSearchRange[1] - corrLagStats[0] ) + { + rInterp[k] += winInterp[m - i] * tempRK[lagSearchRange[1] - corrLagStats[0]]; + } + else if ( j < lagSearchRange[0] - corrLagStats[0] ) + { + rInterp[k] += winInterp[m - i] * tempRK[lagSearchRange[0] - corrLagStats[0]]; + } + else + { + rInterp[k] += winInterp[m - i] * tempRK[j]; + } + } + } + } + corrLagStats[1] += ( maximum( rInterp, interpLen, &tempF ) + interpMin ); + + /* save corr lag stats for the current frame */ + mvs2s( corrLagStats, hStereoTCA->corrLagStats, 3 ); + + return; +} + + +/*--------------------------------------------------------------- + * Function estDownmixGain() + * + * Down mix gain estimation module; convert L/R to M/S. + * ---------------------------------------------------------------*/ + +static void estDownmixGain( + STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA Encoder handle */ + const float *chan1, /* i : reference signal */ + const float *chan2, /* i/o: target signal to be scaled */ + const int16_t ncShift, /* i : shift */ + const int16_t length, /* i : input frame length */ + const int16_t element_mode, /* i : element mode */ + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier handle */ + const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ +) +{ + int16_t i, i1, i2; + float tempN, tempD; + float alpha, currentGain; + float unclr_instTargetGain; + + if ( hStereoTCA->refChanIndx == L_CH_INDX ) + { + i1 = 0; + i2 = ncShift; + } + else + { + i1 = ncShift; + i2 = 0; + } + + /* abs sample sum estimation */ + tempN = 0; + tempD = 0; + for ( i = 0, tempN = 0.0f, tempD = 0.0f; i < length; i++ ) + { + tempN += fabsf( chan1[i1 + i] ); + tempD += fabsf( chan2[i2 + i] ); + } + + alpha = hStereoTCA->corrStatsSmoothFac; + currentGain = ( tempD == 0 ) ? ( hStereoTCA->prevTargetGain ) : ( tempN / tempD ); + currentGain = max( 1e-5f, currentGain ); + hStereoTCA->instTargetGain = currentGain; + currentGain = (alpha) *log10f( hStereoTCA->prevTargetGain ) + ( 1.0f - alpha ) * log10f( currentGain ); + + if ( element_mode == IVAS_CPE_TD && hStereoClassif != NULL ) + { + tempD = powf( 10, currentGain ); + unclr_instTargetGain = log10f( tempN / ( tempD + 1e-5f ) + 1.0f ); + hStereoClassif->unclr_fv[E_ica_instTargetGain] = unclr_instTargetGain; + } + + if ( tdm_LRTD_flag == 1 ) + { + currentGain = 0.0f; + } + else if ( hStereoTCA->LRTD_G_ATT_cnt > 1 ) /* lrtd_mode == 1 but tdm_LRTD_flag still 0 */ + { + currentGain /= ( (float) hStereoTCA->LRTD_G_ATT_cnt ); + } + + /* quantize the target gain */ + hStereoTCA->indx_ica_gD = (int16_t) usquant( currentGain, &tempD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP, 1 << STEREO_BITS_TCA_GD ); + hStereoTCA->targetGain = powf( 10, tempD ); + + return; +} + +/*--------------------------------------------------------------- + * Function icaMemUpdate() + * + * Recalculates the memories corresponding to the previous frame. + * ---------------------------------------------------------------*/ + +static void icaMemUpdate( + Encoder_State **sts, /* i/o: encoder state structure */ + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + float *bufChanL, /* i/o: L signal correction from previous frame */ + float *bufChanR, /* i/o: R signal correction from previous frame */ + const int16_t lMemRecalc, /* i : memory length at input Sampling Rate */ + const int16_t lMemRecalc_SCh, /* i : SCh memory length at input Sampling Rate*/ + const int16_t input_frame /* i : frame length */ +) +{ + float *ptr1, *ptr2; + int16_t i; + float ratio_L, One_m_Ratio; + + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + /* Recalc of the memories - Downmix @ inputFs */ + /*----------------------------------------------------------------* + * Create first part of the mixture using the old ratios + *----------------------------------------------------------------*/ + + if ( hCPE->hStereoTD->tdm_last_SM_flag ) + { + ratio_L = hCPE->hStereoTD->tdm_last_ratio_SM; + One_m_Ratio = ratio_L - 1.0f; + } + else + { + ratio_L = hCPE->hStereoTD->tdm_last_ratio; + One_m_Ratio = 1.0f - ratio_L; + } + + ptr1 = sts[0]->input - lMemRecalc - lMemRecalc_SCh; + ptr2 = sts[1]->input - lMemRecalc - lMemRecalc_SCh; + + if ( hCPE->last_element_mode == IVAS_CPE_TD ) + { + if ( hCPE->hStereoTD->flag_skip_DMX ) + { + for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) + { + ptr1[i] = bufChanL[i]; + ptr2[i] = bufChanR[i]; + } + } + else + { + for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) + { + ptr1[i] = bufChanR[i] * One_m_Ratio + bufChanL[i] * ratio_L; + ptr2[i] = bufChanL[i] * One_m_Ratio - bufChanR[i] * ratio_L; + } + } + } + else + { + float fac, incr, tmp1, tmp2; + + /* reset the past input signal (the signal is used in SWB BWE) */ + set_f( sts[1]->input - input_frame, 0, input_frame ); + + if ( hCPE->hStereoTD->flag_skip_DMX ) + { + /* reconstruction of the Secondary channel past segment */ + for ( i = 0; i < lMemRecalc_SCh; i++ ) + { + ptr2[i] = bufChanL[i] * One_m_Ratio + bufChanR[i] * ratio_L; + } + + /* overlap-add smoothing to equalize for different DMX signal energy between DFT and TD stereo */ + fac = 1.0f / (float) lMemRecalc; + incr = fac; + + for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) + { + tmp1 = bufChanL[i]; + tmp2 = bufChanR[i]; + + ptr1[i] = ( 1.0f - fac ) * ptr1[i] + fac * tmp1; + /*ptr2[i] = (1.0f - fac) * ptr2[i] + fac * tmp2;*/ /* the secondary channel (downmixed) buffer of DFT stereo is empty ! */ + ptr2[i] = tmp2; + + fac += incr; + } + } + else + { + /* reconstruction of the Secondary channel past segment */ + for ( i = 0; i < lMemRecalc_SCh; i++ ) + { + ptr2[i] = bufChanL[i] * One_m_Ratio - bufChanR[i] * ratio_L; + } + + /* overlap-add smoothing to equalize for different DMX signal energy between DFT and TD stereo */ + fac = 1.0f / (float) lMemRecalc; + incr = fac; + + for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) + { + tmp1 = bufChanR[i] * One_m_Ratio + bufChanL[i] * ratio_L; + tmp2 = bufChanL[i] * One_m_Ratio - bufChanR[i] * ratio_L; + + ptr1[i] = ( 1.0f - fac ) * ptr1[i] + fac * tmp1; + /*ptr2[i] = (1.0f - fac) * ptr2[i] + fac * tmp2;*/ /* the secondary channel (downmixed) buffer of DFT stereo is empty ! */ + ptr2[i] = tmp2; + + fac += incr; + } + } + } + } + + if ( hCPE->hStereoICBWE != NULL ) + { + assert( L_MEM_RECALC_TBE_NS <= L_MEM_RECALC_NS ); + i = NS2SA( sts[0]->input_Fs, L_MEM_RECALC_TBE_NS ); + mvr2r( bufChanL + lMemRecalc + lMemRecalc_SCh - i, hCPE->hStereoICBWE->icbwe_inp_mem[0], i ); + mvr2r( bufChanR + lMemRecalc + lMemRecalc_SCh - i, hCPE->hStereoICBWE->icbwe_inp_mem[1], i ); + } + + return; +} + +/*--------------------------------------------------------------- + * stereo_tca_enc() + * + * Stereo temporal inter-channel adjustment/allocation processing module; + * Downmix, convert L/R to M/S. + * ---------------------------------------------------------------*/ + +void stereo_tca_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int16_t input_frame /* i : length of a frame per channel */ +) +{ + /* temp variables */ + int16_t i, dsFactor, lMemRecalc; + Encoder_State **sts; + STEREO_TCA_ENC_HANDLE hStereoTCA; + + /* Buffers, input Left and right channels @ input_Fs*/ + int16_t lMemRecalc_SCh; + float bufChanL[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH + L_FRAME48k + L_NCSHIFTMAX]; + float bufChanR[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH + L_FRAME48k + L_NCSHIFTMAX]; + float input_mem_loc[2][NS2SA( 48000, L_MEM_RECALC_NS + L_MEM_RECALC_SCH_NS )]; + float *ptrChanL, *ptrChanR; + + /* Buffers at internal sampling rate, i.e., CORR_INTER_FS */ + float bufChanL_DS[L_FRAME_DS + ADDED_MEM_DS]; + float bufChanR_DS[L_FRAME_DS + ADDED_MEM_DS]; + float *ptrChanL_DS, *ptrChanR_DS; + float *target; + int16_t target_idx; + + int16_t prevNCShift, currentNCShift; + int16_t tempLag[2]; + float corrEstStage2[N_MAX_SHIFT_CHANGE + 1]; + + /* temp variables */ + float tempF, tempF1; + int16_t tempS, tempS_buff[3]; + int16_t maxCorrStatsDev, L_shift_adapt; + int16_t musicMode = 0, neighborLimit; + int32_t input_Fs; + int16_t prev_ICA_flag; + + /* initialization */ + sts = hCPE->hCoreCoder; + hStereoTCA = hCPE->hStereoTCA; + + input_Fs = sts[0]->input_Fs; + + lMemRecalc = NS2SA( input_Fs, L_MEM_RECALC_NS ); + lMemRecalc_SCh = NS2SA( input_Fs, L_MEM_RECALC_SCH_NS ); + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + return; + } + + /* populate L/R memories into current buffers */ + mvr2r( hStereoTCA->memChanL, bufChanL, lMemRecalc + lMemRecalc_SCh ); + mvr2r( hStereoTCA->memChanR, bufChanR, lMemRecalc + lMemRecalc_SCh ); + + /* pointers to the current frame */ + ptrChanL = bufChanL + lMemRecalc + lMemRecalc_SCh; + ptrChanR = bufChanR + lMemRecalc + lMemRecalc_SCh; + + /* copy interleaved stereo data to two channels, e.g., L, R */ + mvr2r( sts[0]->input, ptrChanL, input_frame ); + mvr2r( sts[1]->input, ptrChanR, input_frame ); + + /* UNCLR classifier update */ + if ( hCPE->hStereoClassif->lrtd_mode == 0 ) /* Normal TD mode, no attenuation */ + { + hStereoTCA->LRTD_G_ATT_cnt = 1; + } + else if ( hCPE->hStereoTD != NULL ) + { + if ( hCPE->hStereoTD->tdm_LRTD_flag == 0 ) /* lrtd_mode == 1, but in td section */ + { + hStereoTCA->LRTD_G_ATT_cnt++; + hStereoTCA->LRTD_G_ATT_cnt = min( 1000, hStereoTCA->LRTD_G_ATT_cnt ); + } + } + + if ( hCPE->element_mode != IVAS_CPE_TD ) + { + hStereoTCA->refChanIndx = L_CH_INDX; + hStereoTCA->corrStatsSmoothFac = 0.7f; + estDownmixGain( hStereoTCA, ptrChanL, ptrChanR, 0, input_frame, hCPE->element_mode, NULL, 0 ); + hStereoTCA->prevTargetGain = hStereoTCA->targetGain; +#ifdef DEBUG_MODE_INFO + hStereoTCA->indx_ica_NCShift = 0; +#endif + + /* back up the L/R missing target */ + mvr2r( bufChanL + input_frame, hStereoTCA->memChanL, lMemRecalc + lMemRecalc_SCh ); + mvr2r( bufChanR + input_frame, hStereoTCA->memChanR, lMemRecalc + lMemRecalc_SCh ); + + hStereoTCA->lMemRecalc = 0; + hStereoTCA->lMemRecalc_12k8 = 0; + hStereoTCA->lMemRecalc_16k = 0; + + return; + } + else if ( hCPE->last_element_mode != IVAS_CPE_TD ) + { + tempF = hStereoTCA->targetGain; + tempF1 = hStereoTCA->prevTargetGain; + tempS = hStereoTCA->prevRefChanIndx; + mvs2s( hStereoTCA->prevCorrLagStats, tempS_buff, 3 ); + stereo_tca_init_enc( hStereoTCA, input_Fs ); + hStereoTCA->targetGain = tempF; + hStereoTCA->prevTargetGain = tempF1; + + if ( hCPE->hStereoClassif->lrtd_mode == 1 ) + { + hStereoTCA->targetGain = min( hStereoTCA->targetGain, 1.0f ); + hStereoTCA->prevTargetGain = min( hStereoTCA->prevTargetGain, 1.0f ); + + hStereoTCA->prevTargetGain = 1; + } + + hStereoTCA->prevRefChanIndx = tempS; + mvs2s( tempS_buff, hStereoTCA->prevCorrLagStats, 3 ); + + /* populate memory */ + if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + mvr2r( sts[0]->input - lMemRecalc - lMemRecalc_SCh, bufChanL, lMemRecalc + lMemRecalc_SCh ); + mvr2r( sts[1]->input - lMemRecalc - lMemRecalc_SCh, bufChanR, lMemRecalc + lMemRecalc_SCh ); + } + } + + /* populate L/R DS memories into current buffers */ + mvr2r( hStereoTCA->memChanL_DS, bufChanL_DS, ADDED_MEM_DS ); + mvr2r( hStereoTCA->memChanR_DS, bufChanR_DS, ADDED_MEM_DS ); + + /* pointers to the current frame of DS */ + ptrChanL_DS = bufChanL_DS + ADDED_MEM_DS; + ptrChanR_DS = bufChanR_DS + ADDED_MEM_DS; + + /* resample factor */ + dsFactor = (int16_t) ( input_Fs / CORR_INTER_FS ); + + /* resample the stereo channels */ + deEmphResample( hStereoTCA, ptrChanL, ptrChanR, ptrChanL_DS, ptrChanR_DS, input_frame, dsFactor ); + + + /* inter-channel corrStats estimation */ + corrStatsEst( hStereoTCA, bufChanL_DS + ADDED_MEM_DS, bufChanR_DS + ADDED_MEM_DS, ( L_FRAME_DS + L_XCORRMEM_DS ), dsFactor, hCPE->hCoreCoder[0]->vad_flag, hCPE->hCoreCoder[1]->vad_flag, hCPE->hStereoClassif ); + + /*-----------------------------------------------------------------* + * refine the ICA stats + *-----------------------------------------------------------------*/ + + prev_ICA_flag = 0; + if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec && abs( hStereoTCA->prevCorrLagStats[2] ) != 0 ) + { + prev_ICA_flag = 1; + } + + if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 0 || prev_ICA_flag == 1 ) + { + /* initialize the refinement search for NC-shift */ + hStereoTCA->corrLagStats[2] = hStereoTCA->corrLagStats[1]; + + maxCorrStatsDev = N_MAX_SHIFT_CHANGE; + if ( hStereoTCA->corrStatsSmoothFac <= 0.7f ) + { + maxCorrStatsDev = 160; /* L_NCSHIFT_MAX @ 32kHz */ + } + + if ( input_Fs < 32000 ) + { + maxCorrStatsDev = (int16_t) ( maxCorrStatsDev * input_Fs / 32000.0f ); + } + + musicMode = ( hCPE->hCoreCoder[0]->sp_aud_decision0 == 1 || sts[0]->last_core > ACELP_CORE ); + if ( musicMode ) + { + maxCorrStatsDev = 1; + set_s( hStereoTCA->corrLagStats + 1, 0, 2 ); + } + + tempS = ( hStereoTCA->corrLagStats[1] - hStereoTCA->prevCorrLagStats[2] ); + if ( abs( tempS ) > maxCorrStatsDev ) + { + hStereoTCA->corrLagStats[2] = hStereoTCA->prevCorrLagStats[2] + ( ( tempS > 0 ) ? maxCorrStatsDev : -maxCorrStatsDev ); + } + + neighborLimit = maxCorrStatsDev; + + /* refine and search based on the corrlag stats */ + if ( tempS != 0 && dsFactor != 1 && prev_ICA_flag == 0 ) + { + tempF = 0; + if ( !musicMode ) + { + tempLag[0] = min( hStereoTCA->corrLagStats[2], hStereoTCA->prevCorrLagStats[2] ); + tempLag[1] = max( hStereoTCA->corrLagStats[2], hStereoTCA->prevCorrLagStats[2] ); + + neighborLimit = min( 3, maxCorrStatsDev ); + if ( hStereoTCA->prevCorrLagStats[2] < hStereoTCA->corrLagStats[2] ) + { + tempLag[1] = min( tempLag[1], tempLag[0] + neighborLimit ); + } + else + { + tempLag[0] = max( tempLag[0], tempLag[1] - neighborLimit ); + } + + utilCrossCorr( ptrChanL, ptrChanR, NULL, corrEstStage2, tempLag, input_frame, 0 ); + + hStereoTCA->corrLagStats[2] = maximum( corrEstStage2, ( tempLag[1] - tempLag[0] + 1 ), &tempF ); + hStereoTCA->corrLagStats[2] += tempLag[0]; + } + + if ( abs( tempS ) > neighborLimit ) + { + tempLag[0] = hStereoTCA->corrLagStats[1]; + tempLag[1] = hStereoTCA->corrLagStats[1]; + utilCrossCorr( ptrChanL, ptrChanR, NULL, &tempF1, tempLag, input_frame, 0 ); + + if ( tempF1 > tempF || musicMode ) + { + hStereoTCA->corrLagStats[2] = hStereoTCA->prevCorrLagStats[2] + ( ( tempS > 0 ) ? min( (int16_t) abs( tempS ), maxCorrStatsDev ) : max( (int16_t) -abs( tempS ), -maxCorrStatsDev ) ); + } + } + + /* restrict the reference channel for +/- variation */ + if ( ( hStereoTCA->corrLagStats[2] < 0 && hStereoTCA->prevCorrLagStats[2] > 0 ) || ( hStereoTCA->corrLagStats[2] > 0 && hStereoTCA->prevCorrLagStats[2] < 0 ) ) + { + hStereoTCA->corrLagStats[2] = 0; + } + } + + if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec /*hCPE->hStereoClassif->lrtd_mode*/ == 1 ) /* Content is considered as uncorrelated -> ICA shift is turned off */ + { + hStereoTCA->corrLagStats[2] = 0; + + if ( hCPE->hStereoTD->tdm_LRTD_flag == 1 && prev_ICA_flag == 0 ) + { + hStereoTCA->prevCorrLagStats[2] = 0; + } + } + + /* Perform the following: + 1. adjust samples, + 2. interp shift variation, + 3. gain estimation */ + prevNCShift = (int16_t) abs( hStereoTCA->prevCorrLagStats[2] ); + currentNCShift = (int16_t) abs( hStereoTCA->corrLagStats[2] ); + + if ( hStereoTCA->prevRefChanIndx == L_CH_INDX ) + { + mvr2r( ptrChanL - lMemRecalc - lMemRecalc_SCh, input_mem_loc[0], lMemRecalc + lMemRecalc_SCh ); + v_multc( ptrChanR + prevNCShift - lMemRecalc - lMemRecalc_SCh, hStereoTCA->prevTargetGain, input_mem_loc[1], lMemRecalc + lMemRecalc_SCh ); + } + else + { + mvr2r( ptrChanL + prevNCShift - lMemRecalc - lMemRecalc_SCh, input_mem_loc[0], lMemRecalc + lMemRecalc_SCh ); + v_multc( ptrChanR - lMemRecalc - lMemRecalc_SCh, hStereoTCA->prevTargetGain, input_mem_loc[1], lMemRecalc + lMemRecalc_SCh ); + } + + target = ptrChanR; + target_idx = R_CH_INDX; + /* identify target signal to correct for shift variations */ + if ( ( prevNCShift == 0 && hStereoTCA->corrLagStats[2] < 0 ) || ( hStereoTCA->prevRefChanIndx == R_CH_INDX ) ) + { + target = ptrChanL; + target_idx = L_CH_INDX; + } + + /* target signal adjustment for temporal shift variations */ + if ( ( prevNCShift - currentNCShift ) != 0 ) + { + L_shift_adapt = L_SHIFT_ADAPT_16k; + if ( input_Fs > INT_FS_16k ) + { + L_shift_adapt = L_SHIFT_ADAPT_MAX; + } + + /* Note!! : Always keep the assert (prevNCShift>>1) below according to the equation used here to get tempS */ + tempS = ( currentNCShift >> 1 ); + if ( abs( currentNCShift - prevNCShift ) <= min( N_MAX_SHIFT_CHANGE, N_MAX_SHIFT_CHANGE * input_Fs / 32000.0f ) ) + { +#ifdef DEBUGGING + /* Max sample looked in INTERP1 should lie within the bounds of input_frame and memory populated */ + assert( ( ( abs( currentNCShift - prevNCShift ) + 1 ) + SINC_ORDER1 / INTERP_FACTOR1 ) + L_shift_adapt - tempS < input_frame ); + assert( ( ( abs( currentNCShift - prevNCShift ) + 1 ) + SINC_ORDER1 / INTERP_FACTOR1 + tempS ) < L_NCSHIFTMAX ); + assert( tempS + currentNCShift <= lMemRecalc ); + assert( input_frame - ( min( N_MAX_SHIFT_CHANGE, ( N_MAX_SHIFT_CHANGE * input_Fs ) / 32000 ) + 1 + SINC_ORDER1 / INTERP_FACTOR1 ) - ( prevNCShift >> 1 ) >= L_shift_adapt - tempS ); +#endif + adjustTargetSignal( ( target - tempS ), prevNCShift, currentNCShift, L_shift_adapt, 0 ); + } + else + { + tempS = min( max( tempS, prevNCShift - currentNCShift + L_shift_adapt - input_frame ), prevNCShift - currentNCShift + lMemRecalc ); + adjustTargetSignal( ( target - tempS ), prevNCShift, currentNCShift, L_shift_adapt, 1 ); + } + + if ( target_idx == L_CH_INDX ) + { + mvr2r( target - tempS, &( input_mem_loc[target_idx][lMemRecalc + lMemRecalc_SCh - tempS - currentNCShift] ), currentNCShift + tempS ); + } + else + { + v_multc( target - tempS, hStereoTCA->prevTargetGain, &( input_mem_loc[target_idx][lMemRecalc + lMemRecalc_SCh - tempS - currentNCShift] ), currentNCShift + tempS ); + } + } + + /* reference channel index */ + if ( hStereoTCA->corrLagStats[2] >= 0 ) + { + hStereoTCA->refChanIndx = L_CH_INDX; + } + else + { + hStereoTCA->refChanIndx = R_CH_INDX; + } + + /* Estimate and quantize the gain for scaling */ + estDownmixGain( hStereoTCA, ptrChanL, ptrChanR, currentNCShift, ( input_frame - currentNCShift ), hCPE->element_mode, hCPE->hStereoClassif, hCPE->hStereoTD->tdm_LRTD_flag ); + + /* quantize the corrStats */ + hStereoTCA->indx_ica_NCShift = (int16_t) usquant( ( (float) currentNCShift ) / dsFactor, &tempF, 0, 1.0f, 1 << STEREO_BITS_TCA_CORRSTATS ); + } + else + { + hStereoTCA->refChanIndx = L_CH_INDX; + hStereoTCA->corrLagStats[2] = 0; + hStereoTCA->prevCorrLagStats[2] = 0; + hStereoTCA->indx_ica_NCShift = 0; + + currentNCShift = 0; /* only to avoid compilation warning */ + target = ptrChanL; /* only to avoid compilation warning */ + target_idx = L_CH_INDX; /* only to avoid compilation warning */ + + mvr2r( ptrChanL - lMemRecalc - lMemRecalc_SCh, input_mem_loc[0], lMemRecalc + lMemRecalc_SCh ); + v_multc( ptrChanR - lMemRecalc - lMemRecalc_SCh, hStereoTCA->prevTargetGain, input_mem_loc[1], lMemRecalc + lMemRecalc_SCh ); + + /* Estimate and quantize the gain for scaling */ + estDownmixGain( hStereoTCA, ptrChanL, ptrChanR, 0, input_frame, hCPE->element_mode, hCPE->hStereoClassif, hCPE->hStereoTD->tdm_LRTD_flag ); + } + + /*-----------------------------------------------------------------* + * updates and memory backups + *-----------------------------------------------------------------*/ + + /* back up the L/R missing target */ + mvr2r( bufChanL + input_frame, hStereoTCA->memChanL, lMemRecalc + lMemRecalc_SCh ); + mvr2r( bufChanR + input_frame, hStereoTCA->memChanR, lMemRecalc + lMemRecalc_SCh ); + + if ( currentNCShift != 0 ) + { + /* Temporal channel adjustment of the LA samples based on the NC shift */ + tcaTargetCh_LA( hStereoTCA, ptrChanL, ptrChanR, currentNCShift, input_frame ); + } + + /* Update of changed samples corresponding to the memory */ + icaMemUpdate( sts, hCPE, input_mem_loc[0], input_mem_loc[1], lMemRecalc, lMemRecalc_SCh, input_frame ); + + /* populate the st->input target buffer */ + if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 0 || prev_ICA_flag == 1 ) + { + mvr2r( target + currentNCShift, sts[target_idx]->input, input_frame ); + } + + if ( hCPE->element_mode != IVAS_CPE_DFT ) + { + /* Scale the Right channel with the gain */ + int16_t j; + int16_t l_ica_ovl = NS2SA( input_Fs, STEREO_L_TCA_OVLP_NS ); + float winSlope = 1.0f / (float) l_ica_ovl; + + tempF1 = hStereoTCA->targetGain; + tempF = hStereoTCA->prevTargetGain; + + for ( i = 0, j = 0; i < l_ica_ovl; i++, j++ ) + { + sts[1]->input[i] = ( 1.0f - j * winSlope ) * tempF * sts[1]->input[i] + ( j * winSlope ) * tempF1 * sts[1]->input[i]; + } + for ( ; i < input_frame; i++ ) + { + sts[1]->input[i] *= tempF1; + } + } + + /* update L/R DS memories */ + mvr2r( bufChanL_DS + L_FRAME_DS, hStereoTCA->memChanL_DS, ADDED_MEM_DS ); + mvr2r( bufChanR_DS + L_FRAME_DS, hStereoTCA->memChanR_DS, ADDED_MEM_DS ); + + /* save the reference channel index for next frame */ + hStereoTCA->prevRefChanIndx = hStereoTCA->refChanIndx; + + /* save the corr lag stats for next frame */ + mvs2s( hStereoTCA->corrLagStats, hStereoTCA->prevCorrLagStats, 3 ); + + /* save the target gain for next frame */ + hStereoTCA->prevTargetGain = hStereoTCA->targetGain; + + return; +} + +/*-------------------------------------------------------------------* + * stereo_tca_init_enc() + * + * Stereo temporal inter-channel adjustment (ICA) encoder initialization + *-------------------------------------------------------------------*/ + +void stereo_tca_init_enc( + STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo ICA handle */ + const int32_t input_Fs /* i : input sampling frequency */ +) +{ + hStereoTCA->lMemRecalc = NS2SA( input_Fs, L_MEM_RECALC_NS ); + hStereoTCA->lMemRecalc_12k8 = (int16_t) ( ( hStereoTCA->lMemRecalc * INT_FS_12k8 ) / input_Fs ); + hStereoTCA->lMemRecalc_16k = (int16_t) ( ( hStereoTCA->lMemRecalc * INT_FS_16k ) / input_Fs ); + + hStereoTCA->refChanIndx = L_CH_INDX; + hStereoTCA->prevRefChanIndx = L_CH_INDX; + + hStereoTCA->targetGain = 1.0f; + hStereoTCA->prevTargetGain = 1.0f; + hStereoTCA->instTargetGain = 1.0f; + hStereoTCA->corrStatsSmoothFac = 0.7f; + + set_s( hStereoTCA->corrLagStats, 0, 3 ); + set_s( hStereoTCA->prevCorrLagStats, 0, 3 ); + + set_f( hStereoTCA->memChanL, 0.0f, L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH ); + set_f( hStereoTCA->memChanR, 0.0f, L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH ); + set_f( hStereoTCA->memChanL_DS, 0.0f, ADDED_MEM_DS ); + set_f( hStereoTCA->memChanR_DS, 0.0f, ADDED_MEM_DS ); + hStereoTCA->mem_tempF = 0.; + set_f( hStereoTCA->corrEstPrev[0], 0.0f, 2 * L_NCSHIFT_DS + 1 ); + set_f( hStereoTCA->corrEstPrev[1], 0.0f, 2 * L_NCSHIFT_DS + 1 ); + set_f( hStereoTCA->corrEstPrev[2], 0.0f, 2 * L_NCSHIFT_DS + 1 ); + + set_f( hStereoTCA->corrEstLT, 0.0f, 2 * L_NCSHIFT_DS + 1 ); + set_f( hStereoTCA->memdecim, 0.0f, 12 ); + hStereoTCA->ica_envVarLT = 2000.0f; + + set_f( hStereoTCA->C_mem, 0.0f, 2 * L_NCSHIFT_DS + 1 ); + hStereoTCA->E1_mem = 0.0f; + hStereoTCA->E2_mem = 0.0f; + set_f( hStereoTCA->delay_0_mem, 0.0f, MAX_DELAYREGLEN ); + hStereoTCA->smooth_dist_reg_prv_corr = 1.0f; + hStereoTCA->LRTD_G_ATT_cnt = 1; + + return; +} + + +/*-------------------------------------------------------------------* + * Function unclr_calc_corr_features() + * + *-------------------------------------------------------------------*/ + +static void unclr_calc_corr_features( + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier handle */ + STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: ICA Stereo Encoder handle */ + const float buf1[], /* i : left channel */ + const float buf2[], /* i : right channel */ + const int16_t length, /* i : length of input signal buffers */ + const float corrEst[], /* i : buffer containing inter-channel correlation values */ + const int16_t lagSearchRange[], /* i : minimum and maximum lags for corrEst[] */ + float *corrEst_ncorr /* o : norm. x-correlation btw. current and previous correlation buffers */ +) +{ + int16_t i, corrLagMax, d_corrLagMax, tempLen; + float num, den; + float corrL, corrR, ener, ener_side, mono_i, side_i, ic_Lm, ic_Rm, tdm_es_em, m_corrL_corrR, d_corrL_corrR; + float prod_i, sum_prod, corrEstMax; + + corrL = 1.0f; + corrR = 1.0f; + ener = 1.0f; + ener_side = 1.0f; + sum_prod = 0.0f; + + for ( i = 0; i < length; i++ ) + { + mono_i = ( buf1[i] + buf2[i] ) / 2.0f; + corrL += buf1[i] * mono_i; + corrR += buf2[i] * mono_i; + ener += mono_i * mono_i; + side_i = ( buf1[i] - buf2[i] ) / 2.0f; + ener_side += side_i * side_i; + prod_i = buf1[i] * buf2[i]; + sum_prod += prod_i; + } + + /* average energy of L and R channels */ + hStereoClassif->ave_ener_L = hStereoTCA->E1_mem / length; + hStereoClassif->ave_ener_R = hStereoTCA->E2_mem / length; + + /* unnormalized L/R correlation */ + sum_prod = log10f( fabsf( sum_prod ) + 1.0f ); + hStereoClassif->unclr_fv[E_sum_prod] = sum_prod; + hStereoClassif->xtalk_fv[E_sum_prod] = sum_prod; + + /* S/M energy ratio */ + tdm_es_em = fabsf( 10.0f * ( log10f( sqrtf( ener_side / L_FRAME_DS ) ) - log10f( sqrtf( ener / L_FRAME_DS ) ) ) ); + hStereoClassif->unclr_fv[E_tdm_es_em] = tdm_es_em; + hStereoClassif->xtalk_fv[E_tdm_es_em] = tdm_es_em; + + /* L/R correlation values (zero lag, maximum) */ + corrLagMax = maximum( corrEst, ( lagSearchRange[1] - lagSearchRange[0] + 1 ), &corrEstMax ); + d_corrLagMax = corrLagMax - hStereoClassif->unclr_corrLagMax_prev; + hStereoClassif->unclr_fv[E_d_corrLagMax] = (float) d_corrLagMax; + hStereoClassif->unclr_corrLagMax_prev = corrLagMax; + hStereoClassif->xtalk_fv[E_d_corrLagMax] = (float) d_corrLagMax; + + if ( corrEstMax < 0 ) + { + corrEstMax = 0; + } + + hStereoClassif->unclr_fv[E_corrEst0] = corrEst[abs( lagSearchRange[0] )]; + hStereoClassif->unclr_fv[E_corrEstMax] = corrEstMax; + hStereoClassif->unclr_fv[E_corrLagMax] = corrLagMax; + hStereoClassif->xtalk_fv[E_corrEst0] = corrEst[abs( lagSearchRange[0] )]; + hStereoClassif->xtalk_fv[E_corrEstMax] = corrEstMax; + hStereoClassif->xtalk_fv[E_corrLagMax] = corrLagMax; + + /* L/M and R/M correlation */ + if ( corrL < 0 ) + { + corrL = 0; + } + + if ( corrR < 0 ) + { + corrR = 0; + } + + ic_Lm = corrL / ener; + ic_Rm = corrR / ener; + m_corrL_corrR = max( fabsf( ic_Lm ), fabsf( ic_Rm ) ) - min( fabsf( ic_Lm ), fabsf( ic_Rm ) ); + d_corrL_corrR = log10f( fabsf( corrL - corrR ) + 1.0f ); + + hStereoClassif->unclr_fv[E_m_corrL_corrR] = m_corrL_corrR; + hStereoClassif->unclr_fv[E_d_corrL_corrR] = d_corrL_corrR; + hStereoClassif->xtalk_fv[E_m_corrL_corrR] = m_corrL_corrR; + + /* norm. x-correlation btw. current and previous correlation buffers */ + tempLen = ( 2 * L_NCSHIFT_DS + 1 ); + num = dotp( corrEst, hStereoTCA->corrEstPrev[2], tempLen ); + den = sqrtf( sum2_f( corrEst, tempLen ) * sum2_f( hStereoTCA->corrEstPrev[2], tempLen ) ); + + *corrEst_ncorr = ( den == 0 ) ? 0.0f : ( num / den ); + hStereoClassif->unclr_fv[E_corrEst_ncorr] = *corrEst_ncorr; + hStereoClassif->xtalk_fv[E_corrEst_ncorr] = *corrEst_ncorr; + + return; +} diff --git a/lib_enc/ivas_stereo_icbwe_enc.c b/lib_enc/ivas_stereo_icbwe_enc.c new file mode 100644 index 0000000000..1d1f89f656 --- /dev/null +++ b/lib_enc/ivas_stereo_icbwe_enc.c @@ -0,0 +1,874 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" +#include "rom_com.h" +#include "ivas_rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + +/*-------------------------------------------------------------------* + * ic_bwe_enc_reset() + * + * core switching reset of IC BWE memory + *-------------------------------------------------------------------*/ + +static void ic_bwe_enc_reset( + STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo ICBWE handle */ +) +{ + /* unscaled & scaled SHB synthesis memory */ + set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, LPC_SHB_ORDER ); + + /* inter-channel BWE spectral shape adj. */ + hStereoICBWE->prevSpecMapping = 0; + hStereoICBWE->prevgsMapping = 1.0f; + set_f( &( hStereoICBWE->memShbSpecMapping ), 0, 1 ); + set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); + set_f( hStereoICBWE->memGsEnerMap, 1.0f, 2 ); + set_f( hStereoICBWE->mem_nrg_L, 0, 2 ); + set_f( hStereoICBWE->mem_nrg_R, 0, 2 ); + set_f( hStereoICBWE->mem_nrg_DMX, 0, 2 ); + hStereoICBWE->gDes_pastFrame = 1.0f; + hStereoICBWE->icbweRefEner = 0.0f; + + return; +} + +/*--------------------------------------------------------------------------* + * ic_bwe_specMapping() + * + * Encode and apply the spectral shape mapping of ref to the non-ref channel + *---------------------------------------------------------------------------*/ + +static int16_t ic_bwe_enc_specMapping( + const float *shb_frame_target, /* i : target shb */ + float *shb_synth_nonref, /* o : non-ref shb synth */ + float *specMapping, /* i/o: current frame's mapping */ + float *memShbSpecMapping, /* i/o: ic bwe filtering memory */ + float *memShbSpecXcorr /* i/o: ic bwe spec mapping scorr memory */ +) +{ + int16_t idx; + float Txx1 = 0, Txx2 = 0, Txx3 = 0, T_desired = 0; + float T_nonref_target; + float temp, temp0, temp1, temp2, temp3, alpha; + float a, b, c; + float u, u1, u2; +#ifdef QC_DBG_ICBWE + float T_achieved; +#endif + + alpha = 0.5f; + /* Calculate rxx(1)/rxx(0) of the non ref target */ + temp0 = dotp( shb_frame_target, shb_frame_target, L_FRAME16k - 1 ); + temp1 = dotp( shb_frame_target, shb_frame_target + 1, L_FRAME16k - 1 ); + + /* Smoothing */ + temp0 = alpha * memShbSpecXcorr[0] + ( 1 - alpha ) * temp0; + temp1 = alpha * memShbSpecXcorr[1] + ( 1 - alpha ) * temp1; + memShbSpecXcorr[0] = temp0; + memShbSpecXcorr[1] = temp1; + + T_nonref_target = ( temp0 != 0 ) ? ( temp1 / temp0 ) : ( 0 ); + + /* Calculate rxx(1)/rxx(0) of the non ref synth */ + temp0 = dotp( shb_synth_nonref, shb_synth_nonref, L_FRAME16k - 3 ); + temp1 = dotp( shb_synth_nonref, shb_synth_nonref + 1, L_FRAME16k - 3 ); + temp2 = dotp( shb_synth_nonref, shb_synth_nonref + 2, L_FRAME16k - 3 ); + temp3 = dotp( shb_synth_nonref, shb_synth_nonref + 3, L_FRAME16k - 3 ); + + /* Smoothing */ + temp0 = alpha * memShbSpecXcorr[2] + ( 1 - alpha ) * temp0; + temp1 = alpha * memShbSpecXcorr[3] + ( 1 - alpha ) * temp1; + temp2 = alpha * memShbSpecXcorr[4] + ( 1 - alpha ) * temp2; + temp3 = alpha * memShbSpecXcorr[5] + ( 1 - alpha ) * temp3; + + memShbSpecXcorr[2] = temp0; + memShbSpecXcorr[3] = temp1; + memShbSpecXcorr[4] = temp2; + memShbSpecXcorr[5] = temp3; + + if ( temp0 != 0 ) + { + Txx1 = temp1 / temp0; + Txx2 = temp2 / temp0; + Txx3 = temp3 / temp0; + } + + T_desired = T_nonref_target; + + a = 2 * Txx2 * T_desired - Txx3 - Txx1; + b = ( 2 * T_desired * Txx1 - Txx2 - 1.0f ); + c = ( T_desired - Txx1 ); + + u = *specMapping; + temp = ( b * b - 4 * a * c ); + if ( temp >= 0 && a != 0 ) + { + temp = sqrtf( temp ); + u1 = ( -b + temp ) / ( 2 * a ); + u2 = ( -b - temp ) / ( 2 * a ); + + if ( fabsf( u1 ) < 1.0f && fabsf( u2 ) < 1.0f ) + { + u = min( u1, u2 ); + } + else if ( fabsf( u1 ) < 1.0f ) + { + u = u1; + } + else if ( fabsf( u2 ) < 1.0f ) + { + u = u2; + } + } + u = max( min( u, 0 ), -0.6f ); + + /* Quantize spec. mapping **/ + idx = (int16_t) usquant( u, specMapping, -0.6f, 0.2f, 1 << STEREO_ICBWE_SPBITS ); + +#ifdef QC_DBG_ICBWE + dbgwrite( &specMapping, 4, 1, 1, "spMapping_enc.pcm" ); +#endif + + /* ic bwe spec mapping */ + deemph( shb_synth_nonref, *specMapping, L_FRAME16k, memShbSpecMapping ); + +#ifdef QC_DBG_ICBWE + temp1 = dotp( shb_synth_nonref, shb_synth_nonref + 1, L_FRAME16k - 1 ); + temp0 = dotp( shb_synth_nonref, shb_synth_nonref, L_FRAME16k - 1 ); + T_achieved = ( temp0 != 0 ) ? ( temp1 / temp0 ) : ( 0 ); + + dbgwrite( &T_desired, 4, 1, 1, "T_nonref_target.pcm" ); + dbgwrite( &Txx1, 4, 1, 1, "T_nonref_synth.pcm" ); + dbgwrite( &T_achieved, 4, 1, 1, "T_nonref_achieved.pcm" ); +#endif + + return idx; +} + +/*----------------------------------------------------------------------* + * ic_bwe_gsMapping() + * + * Encode and apply the gain shape mapping of ref to the non-ref channel + *-----------------------------------------------------------------------*/ + +/*! r: return quant. index value */ +static int16_t ic_bwe_enc_gsMapping( + const float relG_targ, /* i : gDes, rel gain target */ + const float *shbSynth, /* i : ref synth signal */ + float *synthSHB_nonref, /* i : nonref synth signal */ + float *gsMapping, /* i/o: gs mapping */ + float *memEner, + const int16_t element_mode /* i : element mode */ +) +{ + int16_t i; + int16_t idx = 0; + float temp1, temp2; + float alpha; + float prev_gsMapping; + + alpha = 0; + prev_gsMapping = *gsMapping; + + /* rel gain of synth signals */ + for ( i = 0, temp1 = 0, temp2 = 0; i < L_FRAME16k; i++ ) + { + temp1 += fabsf( shbSynth[i] ); + temp2 += fabsf( synthSHB_nonref[i] ); + } + temp1 = alpha * memEner[0] + ( 1 - alpha ) * temp1; + temp2 = alpha * memEner[1] + ( 1 - alpha ) * temp2; + + memEner[0] = temp1; + memEner[1] = temp2; + + *gsMapping = ( temp2 == 0 ) ? ( *gsMapping ) : ( ( relG_targ * temp1 ) / temp2 ); + temp2 = ( 0.0f ) * log10f( prev_gsMapping ) + ( 1.0f ) * log10f( *gsMapping ); /* no impact from prev_gsMapping */ + + /* quantize the IC-BWE GS mapping*/ + if ( element_mode == IVAS_CPE_TD ) + { + idx = squant( temp2, gsMapping, icbwe_gsMapping_tbl, 1 << STEREO_ICBWE_GSBITS ); + } + else + { + idx = squant( temp2, gsMapping, icbwe_gsMappingDFT_tbl, 1 << STEREO_ICBWE_GSBITS_DFT ); + } + + *gsMapping = powf( 10, *gsMapping ); + +#ifdef QC_DBG_ICBWE + dbgwrite( &relG_targ, 4, 1, 1, "relG_targ_enc.pcm" ); + dbgwrite( gsMapping, 4, 1, 1, "gsMapping_enc.pcm" ); + dbgwrite( &frame, sizeof( int32_t ), 1, 1, "frame_gsMapping_bwe.pcm" ); +#endif + + return idx; +} + + +/*----------------------------------------------------------------------* + * icbwe_dft_stereo_param() + * + * Estimate ICBWE parameters in DFT stereo + *-----------------------------------------------------------------------*/ + +static void icbwe_dft_stereo_param( + STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: */ + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : */ + Encoder_State *st, /* i/o: */ + float *shb_synth_nonref /* i/o: */ +) +{ + float slopeILD, normFac, gDes, alpha; + int16_t gsIndx, spIndx; + float *nrg_L, *nrg_R, *nrg_DMX; + float sum_nrg_L, sum_nrg_R, sum_nrg_DMX; + float slope_table[4] = { -2.17141801027151f, -1.29118591145892f, -0.588623666024448f, 0 }; + float spec_table[4] = { -0.6f, -0.4f, -0.2f, 0 }; + + BSTR_ENC_HANDLE hBstr = st->hBstr; + + normFac = 2.5f; /* 1000 * (10/((14400+10400)/2 - (6400+10400)/2)) */ + + nrg_L = hStereoDft->nrg_L; + nrg_R = hStereoDft->nrg_R; + nrg_DMX = hStereoDft->nrg_DMX; + + alpha = 0.0f; + hStereoICBWE->mem_nrg_L[0] = alpha * hStereoICBWE->mem_nrg_L[0] + ( 1 - alpha ) * nrg_L[0]; + hStereoICBWE->mem_nrg_R[0] = alpha * hStereoICBWE->mem_nrg_R[0] + ( 1 - alpha ) * nrg_R[0]; + hStereoICBWE->mem_nrg_DMX[0] = alpha * hStereoICBWE->mem_nrg_DMX[0] + ( 1 - alpha ) * nrg_DMX[0]; + hStereoICBWE->mem_nrg_L[1] = alpha * hStereoICBWE->mem_nrg_L[1] + ( 1 - alpha ) * nrg_L[1]; + hStereoICBWE->mem_nrg_R[1] = alpha * hStereoICBWE->mem_nrg_R[1] + ( 1 - alpha ) * nrg_R[1]; + hStereoICBWE->mem_nrg_DMX[1] = alpha * hStereoICBWE->mem_nrg_DMX[1] + ( 1 - alpha ) * nrg_DMX[1]; + + sum_nrg_L = sum_f( hStereoICBWE->mem_nrg_L, 2 ); + sum_nrg_R = sum_f( hStereoICBWE->mem_nrg_R, 2 ); + sum_nrg_DMX = sum_f( hStereoICBWE->mem_nrg_DMX, 2 ); + +#ifdef QC_DBG_ICBWE + dbgwrite( &nrg_L, 4, 1, 1, "nrg_L.pcm" ); + dbgwrite( &nrg_R, 4, 1, 1, "nrg_R.pcm" ); + dbgwrite( &nrg_DMX, 4, 1, 1, "nrg_DMX.pcm" ); +#endif + + /* refChanIndex_bwe refinement */ + if ( ( sum_nrg_R < 0.64f * sum_nrg_L && hStereoICBWE->refChanIndx_bwe == hStereoICBWE->prev_refChanIndx_bwe ) || sum_nrg_R < 0.36f * sum_nrg_L ) + { + hStereoICBWE->refChanIndx_bwe = L_CH_INDX; + } + else if ( ( sum_nrg_L < 0.64f * sum_nrg_R && hStereoICBWE->refChanIndx_bwe == hStereoICBWE->prev_refChanIndx_bwe ) || sum_nrg_L < 0.36f * sum_nrg_R ) + { + hStereoICBWE->refChanIndx_bwe = R_CH_INDX; + } + + /* Initialization of spIndx */ + slopeILD = 0; + spIndx = squant( slopeILD, &slopeILD, slope_table, 1 << STEREO_ICBWE_SPBITS_DFT ); + + if ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) + { + /* Spec Mapping Estimate */ + slopeILD = normFac * ( log10f( ( hStereoICBWE->mem_nrg_L[1] * hStereoICBWE->mem_nrg_R[0] ) / ( hStereoICBWE->mem_nrg_R[1] * hStereoICBWE->mem_nrg_L[0] ) ) ); + slopeILD = ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) ? ( -slopeILD ) : ( slopeILD ); + spIndx = squant( slopeILD, &slopeILD, slope_table, 1 << STEREO_ICBWE_SPBITS_DFT ); + if ( spec_table[spIndx] * hStereoICBWE->prevSpecMapping < 0 ) + { + slopeILD = 0; + spIndx = squant( slopeILD, &slopeILD, slope_table, 1 << STEREO_ICBWE_SPBITS_DFT ); + } + hStereoICBWE->prevSpecMapping = spec_table[spIndx]; + + /* ic bwe spec mapping application */ + deemph( shb_synth_nonref, hStereoICBWE->prevSpecMapping, L_FRAME16k, &hStereoICBWE->memShbSpecMapping ); + } + else + { + hStereoICBWE->memShbSpecMapping = 0; + hStereoICBWE->prevSpecMapping = 0; + } + + /* gsMapping estimate */ + + gDes = ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) ? ( sum_nrg_R / sum_nrg_DMX ) : ( sum_nrg_L / sum_nrg_DMX ); + gDes = sqrtf( gDes ); + + alpha = 0.5f; + /* Geometric Mean */ + hStereoICBWE->gDes_pastFrame = powf( hStereoICBWE->gDes_pastFrame, alpha ) * powf( gDes, 1 - alpha ); + + gsIndx = ic_bwe_enc_gsMapping( hStereoICBWE->gDes_pastFrame, hStereoICBWE->shbSynthRef, shb_synth_nonref, &( hStereoICBWE->prevgsMapping ), hStereoICBWE->memGsEnerMap, st->element_mode ); + hStereoICBWE->gDes_pastFrame = gDes; + + push_indice( hBstr, IND_STEREO_ICBWE_REF, hStereoICBWE->refChanIndx_bwe, STEREO_ICBWE_REFBITS ); + if ( st->flag_ACELP16k == 1 ) + { + push_indice( hBstr, IND_STEREO_ICBWE_SP, spIndx, STEREO_ICBWE_SPBITS_DFT ); + } + + /* IC BWE GS mapping */ + push_indice( hBstr, IND_STEREO_ICBWE_GS, gsIndx, STEREO_ICBWE_GSBITS_DFT ); + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_icBWE_enc() + * + * Encode the spatial mapping of reference to the non-reference channels in HB + *-------------------------------------------------------------------*/ + +void stereo_icBWE_enc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const float shb_speech_ref[], /* i : SHB speech ref channel */ + float shb_speech_nonref[], /* i/o: SHB speech non-ref channel */ + const float *voice_factors /* i : voicing factors */ +) +{ + int16_t i, j, k, nbSubFr; + STEREO_DFT_ENC_DATA_HANDLE hStereoDft; + STEREO_ICBWE_ENC_HANDLE hStereoICBWE; + BSTR_ENC_HANDLE hBstr; + Encoder_State *st; + int16_t spIndx, gsIndx; + float shb_frame_ref[L_LOOK_16k + L_FRAME16k]; + float excSHB_nonref[L_FRAME16k]; + float shb_frame_nonref[L_LOOK_16k + L_FRAME16k]; + float shb_synth_nonref[L_FRAME16k]; + + float nlMixFac[NB_SUBFR16k]; + float temp1, temp2; + float gDes, gTarget; + int16_t nonRefMemLen, refMemLen; + + /* initialization */ + hStereoDft = hCPE->hStereoDft; + hStereoICBWE = hCPE->hStereoICBWE; + st = hCPE->hCoreCoder[0]; + hBstr = st->hBstr; + + gTarget = hCPE->hStereoTCA->targetGain; /* i : gain norm for target (or R) channel */ + + nonRefMemLen = L_MEM_RECALC_TBE_16K + L_FILT16k; + + if ( st->element_mode == IVAS_CPE_TD ) + { + refMemLen = L_MEM_RECALC_TBE_16K + 20; + } + else if ( st->element_mode == IVAS_CPE_DFT && st->core_brate > SID_2k40 ) + { + refMemLen = 20; + } + else + { + ic_bwe_enc_reset( hStereoICBWE ); + + return; + } + + if ( st->element_mode == IVAS_CPE_DFT ) + { + /* memory resets */ + set_f( hStereoICBWE->mem_shb_speech_nonref, 0, L_LOOK_16k ); + set_f( shb_speech_nonref, 0, L_FRAME16k ); + + /* core switching reset */ + if ( st->last_core != ACELP_CORE || st->core != ACELP_CORE || st->bwidth < SWB || st->extl == -1 ) + { + /* IVAS-219: QCToDo: ICBWEDFT for WB TBV */ + ic_bwe_enc_reset( hStereoICBWE ); + if ( st->core != ACELP_CORE || st->bwidth < SWB || st->input_Fs < 32000 || st->extl == -1 ) + { + return; + } + } + + set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); + + hStereoICBWE->prevRefEner = 0; + hStereoICBWE->prevNonRefEner = 0; + + /* SHB frame buffer offsets for TBE processing << re-adjust check >>*/ + set_f( shb_frame_ref, 0, L_LOOK_16k + L_FRAME16k ); + mvr2r( hStereoICBWE->mem_shb_speech_ref, shb_frame_ref, L_LOOK_16k ); + + /* shb_frame_ref_ICBWE @ (8.75 - shb_speech_delay (=1.25) ms) after shb_speech */ + mvr2r( shb_speech_ref, shb_frame_ref + L_LOOK_16k - refMemLen, L_FRAME16k ); + mvr2r( shb_frame_ref + L_FRAME16k, hStereoICBWE->mem_shb_speech_ref, L_LOOK_16k ); + + if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) + { + mvr2r( voice_factors, nlMixFac, NB_SUBFR16k ); + /*if( gDes < 0.5f || gDes > 2.0f )*/ + if ( gTarget < 0.5f || gTarget > 2.0f ) + { + v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); + } + + nbSubFr = ( st->flag_ACELP16k == 0 ) ? NB_SUBFR : NB_SUBFR16k; + for ( i = 0, k = 0; i < nbSubFr; i++ ) + { + if ( st->coder_type == UNVOICED || hStereoICBWE->MSFlag == 1 ) + { + temp1 = 0; + temp2 = 1.0f; + } + else + { + temp1 = sqrtf( nlMixFac[i] ); + temp2 = sqrtf( 1.0f - nlMixFac[i] ); + } + + for ( j = 0; j < ( L_FRAME16k / nbSubFr ); j++, k++ ) + { + excSHB_nonref[k] = temp1 * hStereoICBWE->nlExc16k[k] + temp2 * hStereoICBWE->mixExc16k[k]; + } + } + + /* LP synthesis */ + syn_filt( hStereoICBWE->lpSHBRef, LPC_SHB_ORDER, excSHB_nonref, shb_synth_nonref, L_FRAME16k, hStereoICBWE->mem_lpc_shbsynth_nonref, 1 ); +#ifdef DBG_STEREO_ICBWE2_TBE2K8 + /* Normalize the non-ref signal to the reference channel energy to compensate for the scaling shb_ener_sf */ + if ( st->extl_brate == SWB_TBE_2k8 || st->extl_brate == FB_TBE_3k0 ) + { + temp1 = sumAbs( hStereoICBWE->shbSynthRef, L_FRAME16k ); + temp2 = sumAbs( shb_synth_nonref, L_FRAME16k ); + temp1 = ( temp2 > 0 ) ? ( temp1 / temp2 ) : ( 1.0f ); + v_multc( shb_synth_nonref, temp1, shb_synth_nonref, L_FRAME16k ); + } +#endif + } + else + { + mvr2r( shb_frame_ref, hStereoICBWE->shbSynthRef, L_FRAME16k ); + mvr2r( shb_frame_ref, shb_synth_nonref, L_FRAME16k ); + set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, 10 ); + } + + icbwe_dft_stereo_param( hStereoICBWE, hStereoDft, st, shb_synth_nonref ); + } + else + { + /* SHB frame buffer offsets for TBE processing << re-adjust check >>*/ + set_f( shb_frame_ref, 0, L_LOOK_16k + L_FRAME16k ); + mvr2r( hStereoICBWE->mem_shb_speech_ref, shb_frame_ref, L_LOOK_16k ); + + /* shb_frame_ref_ICBWE @ (8.75 - shb_speech_delay (=1.25) ms) after shb_speech */ + mvr2r( shb_speech_ref, shb_frame_ref + L_LOOK_16k - refMemLen, L_FRAME16k ); + mvr2r( shb_frame_ref + L_FRAME16k, hStereoICBWE->mem_shb_speech_ref, L_LOOK_16k ); + + set_f( shb_frame_nonref, 0, L_LOOK_16k + L_FRAME16k ); + mvr2r( hStereoICBWE->mem_shb_speech_nonref, shb_frame_nonref, L_LOOK_16k ); + mvr2r( shb_speech_nonref, shb_frame_nonref + L_LOOK_16k - nonRefMemLen, L_FRAME16k ); + mvr2r( shb_frame_nonref + L_FRAME16k, hStereoICBWE->mem_shb_speech_nonref, L_LOOK_16k ); + + /* core switching reset */ + /* IVAS-219: QCToDo: check this "if condition" if IVAS_CPE_TD is needed? */ + if ( st->last_core != ACELP_CORE || st->core != ACELP_CORE || st->bwidth < SWB || st->element_mode != IVAS_CPE_TD || st->extl == -1 ) + { + ic_bwe_enc_reset( hStereoICBWE ); + + if ( st->core != ACELP_CORE || st->bwidth < SWB || st->input_Fs < 32000 || st->element_mode != IVAS_CPE_TD || st->extl == -1 ) + { + return; + } + } + + /* resets done here. Need to move them to a separate function */ + if ( ( hStereoICBWE->prev_refChanIndx_bwe != hStereoICBWE->refChanIndx_bwe ) || ( st->last_extl != st->extl ) || st->flag_ACELP16k != 1 ) /* IVAS-219: QCToDo: dont reset for SWB<->FB */ + { + hStereoICBWE->prevSpecMapping = 0; + hStereoICBWE->memShbSpecMapping = 0; + set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); + } + + /* voice fac adjustment based on IC intensities */ + /*temp2 = (float)sqrt(sum2_f(shb_frame_ref + L_LOOK_16k - refMemLen, L_FRAME16k));*/ + temp2 = hStereoICBWE->icbweRefEner; + temp1 = sqrtf( sum2_f( shb_frame_nonref + L_LOOK_16k - refMemLen, L_FRAME16k ) ); + /*temp1 = 0.8f*hStereoICBWE->prevNonRefEner + 0.2f*temp1;*/ + /*temp2 = 0.8f*hStereoICBWE->prevRefEner + 0.2f*temp2;*/ + gDes = ( temp2 == 0 ) ? 1.0f : ( temp1 / temp2 ); + hStereoICBWE->gDes_pastFrame = powf( hStereoICBWE->gDes_pastFrame, 0.5f ) * powf( gDes, 1 - 0.5f ); + + hStereoICBWE->prevRefEner = temp2; + hStereoICBWE->prevNonRefEner = temp1; + + if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) + { + mvr2r( voice_factors, nlMixFac, NB_SUBFR16k ); + + if ( gTarget < 0.5f || gTarget > 2.0f ) + { + v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); + } + + nbSubFr = ( st->flag_ACELP16k == 0 ) ? NB_SUBFR : NB_SUBFR16k; + for ( i = 0, k = 0; i < nbSubFr; i++ ) + { + if ( st->coder_type == UNVOICED || hStereoICBWE->MSFlag == 1 ) + { + temp1 = 0; + temp2 = 1.0f; + } + else + { + temp1 = sqrtf( nlMixFac[i] ); + temp2 = sqrtf( 1.0f - nlMixFac[i] ); + } + + for ( j = 0; j < ( L_FRAME16k / nbSubFr ); j++, k++ ) + { + excSHB_nonref[k] = temp1 * hStereoICBWE->nlExc16k[k] + temp2 * hStereoICBWE->mixExc16k[k]; + } + } + + /* LP synthesis */ + syn_filt( hStereoICBWE->lpSHBRef, LPC_SHB_ORDER, excSHB_nonref, shb_synth_nonref, L_FRAME16k, hStereoICBWE->mem_lpc_shbsynth_nonref, 1 ); + } + else + { + mvr2r( shb_frame_ref, hStereoICBWE->shbSynthRef, L_FRAME16k ); + mvr2r( shb_frame_ref, shb_synth_nonref, L_FRAME16k ); + set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, 10 ); + } + + if ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) + { + /* IC BWE spectral mapping */ + spIndx = ic_bwe_enc_specMapping( shb_frame_nonref, shb_synth_nonref, &( hStereoICBWE->prevSpecMapping ), &( hStereoICBWE->memShbSpecMapping ), hStereoICBWE->memShbSpecXcorr ); + } + else + { + spIndx = 3; + hStereoICBWE->prevSpecMapping = 0; +#ifdef QC_DBG_ICBWE + dbgwrite( &( hStereoICBWE->prevSpecMapping ), 4, 1, 1, "spMapping_enc.pcm" ); +#endif + } + + push_indice( hBstr, IND_STEREO_ICBWE_REF, hStereoICBWE->refChanIndx_bwe, STEREO_ICBWE_REFBITS ); + + if ( st->flag_ACELP16k == 1 ) + { + push_indice( hBstr, IND_STEREO_ICBWE_SP, spIndx, STEREO_ICBWE_SPBITS ); + } + else + { + hStereoICBWE->prevSpecMapping = -0.6f; + } + + /* IC BWE GS mapping */ + gsIndx = ic_bwe_enc_gsMapping( hStereoICBWE->gDes_pastFrame, hStereoICBWE->shbSynthRef, shb_synth_nonref, &( hStereoICBWE->prevgsMapping ), hStereoICBWE->memGsEnerMap, st->element_mode ); + hStereoICBWE->gDes_pastFrame = gDes; + push_indice( hBstr, IND_STEREO_ICBWE_GS, gsIndx, STEREO_ICBWE_GSBITS ); + } + +#ifdef QC_DBG_ICBWE + dbgwrite( &hStereoICBWE->refChanIndx_bwe, 2, 1, 1, "refChanIndx_bwe_enc.pcm" ); + dbgwrite( &hStereoICBWE->prevSpecMapping, 4, 1, 1, "spMapping_enc.pcm" ); + dbgwrite( &gDes, 4, 1, 1, "relG_targ_enc.pcm" ); + dbgwrite( &hStereoICBWE->prevgsMapping, 4, 1, 1, "gsMapping_enc.pcm" ); +#endif + + /* IC BWE Updates */ + hStereoICBWE->prev_refChanIndx_bwe = hStereoICBWE->refChanIndx_bwe; + + return; +} + +/*-------------------------------------------------------------------* + * stereo_icBWE_init_enc() + * + * Stereo (inter-channel) BWE mapping - encoder initialization + *-------------------------------------------------------------------*/ + +void stereo_icBWE_init_enc( + STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ +) +{ + /* SHB speech resampler memory */ + set_f( hStereoICBWE->mem_decim_shb_ch0, 0, ( 2 * L_FILT_MAX ) ); + + /* SHB ref channel */ + set_f( hStereoICBWE->mem_shb_speech_ref, 0, L_LOOK_16k ); + + /* SHB non-ref channel */ + set_f( hStereoICBWE->mem_shb_speech_nonref, 0, L_LOOK_16k ); + + /* unscaled & scaled SHB synthesis memory */ + set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, LPC_SHB_ORDER ); + + /* inter-channel BWE spectral shape adj. */ + hStereoICBWE->prevSpecMapping = 0; + hStereoICBWE->prevgsMapping = 1.0f; + set_f( &( hStereoICBWE->memShbSpecMapping ), 0, 1 ); + set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); + + hStereoICBWE->prevNonRefEner = 1.0f; + hStereoICBWE->prevRefEner = 1.0f; + + set_f( hStereoICBWE->memGsEnerMap, 1.0f, 2 ); + + set_f( hStereoICBWE->dec_2over3_mem, 0, L_FILT_2OVER3 ); + set_f( hStereoICBWE->dec_2over3_mem_lp, 0, L_FILT_2OVER3_LP ); + set_f( hStereoICBWE->memHPF, 0, 8 ); + + /* BWE ref channel */ + hStereoICBWE->refChanIndx_bwe = L_CH_INDX; + hStereoICBWE->prev_refChanIndx_bwe = L_CH_INDX; + + set_f( hStereoICBWE->memModifyFs_icbwe[0], 0, 2 * L_FILT32k ); + set_f( hStereoICBWE->memModifyFs_icbwe[1], 0, 2 * L_FILT32k ); + + set_f( hStereoICBWE->mem_nrg_L, 0, 2 ); + set_f( hStereoICBWE->mem_nrg_R, 0, 2 ); + set_f( hStereoICBWE->mem_nrg_DMX, 0, 2 ); + hStereoICBWE->gDes_pastFrame = 1.0f; + hStereoICBWE->icbweRefEner = 0.0f; + + hStereoICBWE->MSFlag = 0; + + return; +} + + +/*-------------------------------------------------------------------* + * findRefChanBWE() + * + * Inter-channel BWE pre-proc of the non-ref channel + *-------------------------------------------------------------------*/ + +static void findRefChanBWE( + const float *input0, + const float *input1, + int16_t *refChanIndx_bwe, + const int16_t input_frame, + float *mem0, + float *mem1 ) +{ + float inp0[L_FRAME48k], inp1[L_FRAME48k]; + float tempF, tempF1; + + mvr2r( input0, inp0, input_frame ); + mvr2r( input1, inp1, input_frame ); + + spectral_balancer( inp0, mem0, input_frame, 1 ); + spectral_balancer( inp1, mem1, input_frame, 1 ); + + tempF = sum2_f( inp0, input_frame ); + tempF1 = sum2_f( inp1, input_frame ); + + if ( tempF1 < 0.64f * tempF ) + { + *refChanIndx_bwe = L_CH_INDX; + } + else if ( tempF < 0.64f * tempF1 ) + { + *refChanIndx_bwe = R_CH_INDX; + } + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_icBWE_preproc() + * + * Inter-channel BWE pre-proc of the non-ref channel + *-------------------------------------------------------------------*/ + +void stereo_icBWE_preproc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const int16_t input_frame, /* i : input frame length */ + float shb_speech_nonref[] /* o : SHB speech non-ref channel */ +) +{ + int16_t i, refChanIndx_bwe; + STEREO_TCA_ENC_HANDLE hStereoTCA; + STEREO_ICBWE_ENC_HANDLE hStereoICBWE; + Encoder_State *st; + float temp_inp[L_FRAME48k]; + float tempSHB[L_FRAME16k]; + float temp_in[L_FRAME48k]; + int16_t /*nonRefOffset,*/ nonRefMemLen; + float gD; + int32_t input_Fs; + + /* initialization */ + hStereoTCA = hCPE->hStereoTCA; /* Stereo TCA encoder handle */ + hStereoICBWE = hCPE->hStereoICBWE; /* Stereo IC BWE encoder handle */ + st = hCPE->hCoreCoder[0]; + input_Fs = st->input_Fs; + + /*nonRefOffset = NS2SA(st_ivas->input_Fs, ACELP_LOOK_NS - L_MEM_RECALC_TBE_NS);*/ + nonRefMemLen = NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ); + + if ( hCPE->element_mode == IVAS_CPE_MDCT || st->core != ACELP_CORE || st->extl == -1 || input_Fs < 32000 ) + { + set_f( hStereoICBWE->dec_2over3_mem, 0, L_FILT_2OVER3 ); + set_f( hStereoICBWE->dec_2over3_mem_lp, 0, L_FILT_2OVER3_LP ); + set_f( hStereoICBWE->mem_decim_shb_ch0, 0, ( 2 * L_FILT_MAX ) ); + set_f( shb_speech_nonref, 0, L_FRAME16k ); + set_f( hStereoICBWE->memHPF, 0, 8 ); + hStereoICBWE->refChanIndx_bwe = hStereoICBWE->prev_refChanIndx_bwe = L_CH_INDX; + + if ( hCPE->element_mode >= IVAS_CPE_DFT && input_Fs >= 32000 ) + { + set_f( temp_inp, 0, L_FRAME48k ); + mvr2r( hStereoICBWE->dataChan[0], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); + + if ( input_Fs == 48000 ) + { + mvr2r( temp_inp, temp_in, L_FRAME48k ); + set_f( temp_inp, 0, L_FRAME48k ); + i = 2 * L_FILT48k + L_FILT_2OVER3; + decimate_2_over_3_allpass( temp_in + ( input_frame - i ), i, temp_inp + ( 2 * ( input_frame - i ) ) / 3, hStereoICBWE->dec_2over3_mem, hStereoICBWE->dec_2over3_mem_lp ); + } + /* flip the spectrum */ + for ( i = 0; i < L_FRAME32k; i += 2 ) + { + temp_inp[i] *= -1.0f; + } + mvr2r( temp_inp + L_FRAME32k - 2 * L_FILT32k, hStereoICBWE->memModifyFs_icbwe[0], 2 * L_FILT32k ); + + set_f( temp_inp, 0, L_FRAME48k ); + mvr2r( hStereoICBWE->dataChan[1], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); + + if ( input_Fs == 48000 ) + { + mvr2r( temp_inp, temp_in, L_FRAME48k ); + set_f( temp_inp, 0, L_FRAME48k ); + i = 2 * L_FILT48k + L_FILT_2OVER3; + /* IVAS-219: the same filter memories are used for both channels; the continuity is thus lost; shouldn't the memories be separated? */ + decimate_2_over_3_allpass( temp_in + ( input_frame - i ), i, temp_inp + ( 2 * ( input_frame - i ) ) / 3, hStereoICBWE->dec_2over3_mem, hStereoICBWE->dec_2over3_mem_lp ); + } + /* flip the spectrum */ + for ( i = 0; i < input_frame; i += 2 ) + { + temp_inp[i] *= -1.0f; + } + mvr2r( temp_inp + L_FRAME32k - 2 * L_FILT32k, hStereoICBWE->memModifyFs_icbwe[1], 2 * L_FILT32k ); + } + + return; + } + + if ( hCPE->element_mode != IVAS_CPE_TD ) + { + /* initial estimate of refChanIndx_bwe */ + gD = hStereoTCA->targetGain; + + refChanIndx_bwe = hStereoTCA->refChanIndx; + if ( ( gD > 1.0f && refChanIndx_bwe == R_CH_INDX ) || ( gD < 1.0f && refChanIndx_bwe == L_CH_INDX ) ) + { + refChanIndx_bwe = !( hStereoTCA->refChanIndx ); + } + hStereoICBWE->refChanIndx_bwe = refChanIndx_bwe; + + set_f( hStereoICBWE->dec_2over3_mem, 0, L_FILT_2OVER3 ); + set_f( hStereoICBWE->dec_2over3_mem_lp, 0, L_FILT_2OVER3_LP ); + set_f( hStereoICBWE->mem_decim_shb_ch0, 0, ( 2 * L_FILT_MAX ) ); + set_f( shb_speech_nonref, 0, L_FRAME16k ); + set_f( hStereoICBWE->memHPF, 0, 8 ); + + return; + } + + gD = hStereoTCA->targetGain; + + refChanIndx_bwe = hStereoTCA->refChanIndx; + if ( ( gD > 1.0f && refChanIndx_bwe == R_CH_INDX ) || ( gD < 1.0f && refChanIndx_bwe == L_CH_INDX ) ) + { + refChanIndx_bwe = !( hStereoTCA->refChanIndx ); + } + + findRefChanBWE( hStereoICBWE->dataChan[0], hStereoICBWE->dataChan[1], &refChanIndx_bwe, input_frame, &hStereoICBWE->memHPF[0], &hStereoICBWE->memHPF[4] ); + + hStereoICBWE->refChanIndx_bwe = refChanIndx_bwe; + + if ( refChanIndx_bwe == R_CH_INDX ) + { + mvr2r( hStereoICBWE->icbwe_inp_mem[0], temp_inp, nonRefMemLen ); + mvr2r( hStereoICBWE->dataChan[0], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); + } + else + { + mvr2r( hStereoICBWE->icbwe_inp_mem[1], temp_inp, nonRefMemLen ); + mvr2r( hStereoICBWE->dataChan[1], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); + } + + if ( input_Fs == 48000 ) + { + /*printf("\n Non-ref target HB generation for 48 kHz sample rate needs alignment verification \n");*/ + mvr2r( temp_inp, temp_in, L_FRAME48k ); + set_f( temp_inp, 0, L_FRAME48k ); + decimate_2_over_3_allpass( temp_in, L_FRAME48k, temp_inp, hStereoICBWE->dec_2over3_mem, hStereoICBWE->dec_2over3_mem_lp ); + } + + /* flip the spectrum */ + for ( i = 0; i < input_frame; i += 2 ) + { + temp_inp[i] *= -1.0f; + } + + if ( hCPE->element_mode >= IVAS_CPE_DFT && input_Fs >= 32000 && ( st->last_core != ACELP_CORE || st->last_extl == -1 ) ) + { + mvr2r( hStereoICBWE->memModifyFs_icbwe[!refChanIndx_bwe], hStereoICBWE->mem_decim_shb_ch0, 2 * L_FILT32k ); + } + + /* IVAS-219: Re-wire the shb nonref estimation through a lite CLDFB */ + modify_Fs( temp_inp, L_FRAME32k, 32000, tempSHB, 16000, hStereoICBWE->mem_decim_shb_ch0, 0 ); + + mvr2r( tempSHB, shb_speech_nonref, L_FRAME16k ); + +#ifdef QC_DBG_ICBWE + dbgwrite( &refChanIndx_bwe, 2, 1, 1, "refChanIndx_bwe.pcm" ); + dbgwrite( &frame, sizeof( int32_t ), 1, 1, "frame_refChanIndx_bwe.pcm" ); + /*dbgwrite(hStereoICBWE->shb_speech_nonref, sizeof(float), L_FRAME16k, 1, "shb_speech_nonref.pcm");*/ +#endif + + return; +} diff --git a/lib_enc/ivas_stereo_mdct_core_enc.c b/lib_enc/ivas_stereo_mdct_core_enc.c new file mode 100644 index 0000000000..710e671972 --- /dev/null +++ b/lib_enc/ivas_stereo_mdct_core_enc.c @@ -0,0 +1,447 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_com.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +/*-------------------------------------------------------------------* + * sync_tcx_mode() + * + * Synchronize under certain conditions the tcx modes and set overlap + * windows accordingly + *-------------------------------------------------------------------*/ + +static void sync_tcx_mode( + Encoder_State **st /* i/o: Encoder state */ +) +{ + const float prevAccNrg0 = st[0]->hTranDet->subblockEnergies.accSubblockNrg[st[0]->hTranDet->subblockEnergies.nDelay]; + const float prevAccNrg1 = st[1]->hTranDet->subblockEnergies.accSubblockNrg[st[1]->hTranDet->subblockEnergies.nDelay]; + const float lastAccNrg0 = st[0]->hTranDet->subblockEnergies.accSubblockNrg[st[0]->hTranDet->subblockEnergies.nDelay + st[0]->hTranDet->transientDetector.nSubblocksToCheck]; + const float lastAccNrg1 = st[1]->hTranDet->subblockEnergies.accSubblockNrg[st[1]->hTranDet->subblockEnergies.nDelay + st[1]->hTranDet->transientDetector.nSubblocksToCheck]; + + if ( ( st[0]->hTcxEnc->tcxMode == st[1]->hTcxEnc->tcxMode ) && ( st[0]->element_brate == IVAS_48k ) && + ( st[0]->hTcxCfg->tcx_curr_overlap_mode != st[1]->hTcxCfg->tcx_curr_overlap_mode ) ) + { + if ( ( st[0]->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) || ( st[1]->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) /* synchronize overlaps */ + { + st[0]->hTcxCfg->tcx_curr_overlap_mode = st[1]->hTcxCfg->tcx_curr_overlap_mode = max( st[0]->hTcxCfg->tcx_curr_overlap_mode, st[1]->hTcxCfg->tcx_curr_overlap_mode ); + } + else + { + st[0]->hTcxCfg->tcx_curr_overlap_mode = st[1]->hTcxCfg->tcx_curr_overlap_mode = min( st[0]->hTcxCfg->tcx_curr_overlap_mode, st[1]->hTcxCfg->tcx_curr_overlap_mode ); + } + } + + if ( + ( prevAccNrg0 * 25.0f > prevAccNrg1 ) && ( prevAccNrg1 * 25.0f > prevAccNrg0 ) && /* 14 dB */ + ( lastAccNrg0 * 16.0f > lastAccNrg1 ) && ( lastAccNrg1 * 16.0f > lastAccNrg0 ) ) /* 12 dB */ + { + st[0]->hTcxEnc->tcxMode = st[1]->hTcxEnc->tcxMode = max( st[0]->hTcxEnc->tcxMode, st[1]->hTcxEnc->tcxMode ); /* synchronize TCX mode of both channels */ + + if ( st[0]->hTcxEnc->tcxMode == TCX_10 ) + { + if ( st[0]->hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ) + { + st[0]->hTcxCfg->tcx_curr_overlap_mode = st[1]->hTcxCfg->tcx_curr_overlap_mode; + } + + if ( st[0]->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ) + { + st[0]->hTcxCfg->tcx_last_overlap_mode = st[1]->hTcxCfg->tcx_last_overlap_mode; + } + } + + if ( st[1]->hTcxEnc->tcxMode == TCX_10 ) + { + if ( st[1]->hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ) + { + st[1]->hTcxCfg->tcx_curr_overlap_mode = st[0]->hTcxCfg->tcx_curr_overlap_mode; + } + + if ( st[1]->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ) + { + st[1]->hTcxCfg->tcx_last_overlap_mode = st[0]->hTcxCfg->tcx_last_overlap_mode; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_mdct_core_enc() + * + * joint stereo mdct core encoder + *-------------------------------------------------------------------*/ + +void stereo_mdct_core_enc( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + float new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ + float old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ + float pitch_buf[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe */ +) +{ + int16_t i, ch, nSubframes, L_subframeTCX; + int16_t n, nAvailBits; + int16_t tnsSize[CPE_CHANNELS][2]; /* number of tns parameters put into prm */ + int16_t tnsBits[CPE_CHANNELS][2]; /* number of tns bits in the frame */ + float *p_orig_spectrum_long[CPE_CHANNELS], orig_spectrum_long[CPE_CHANNELS][N_MAX]; /* MDCT output (L/R). */ + float *orig_spectrum[CPE_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */ + float powerSpec[CPE_CHANNELS][N_MAX]; + float powerSpecMsInv_long[CPE_CHANNELS][N_MAX]; /* MS inv power spectrum, also inverse MDST spectrum */ + float *powerSpecMsInv[CPE_CHANNELS][2]; + float quantized_spectrum_long[CPE_CHANNELS][N_MAX]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ + float *quantized_spectrum[CPE_CHANNELS][2]; + float *inv_mdst_spectrum[CPE_CHANNELS][2]; + float *inv_spectrum[CPE_CHANNELS][2]; + float *p_mdst_spectrum_long[CPE_CHANNELS], mdst_spectrum_long[CPE_CHANNELS][N_MAX]; + float *mdst_spectrum[CPE_CHANNELS][2]; + Encoder_State *st, **sts; + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct; + BSTR_ENC_HANDLE hBstr; + int16_t ms_mask[2][MAX_SFB]; + int16_t p_param[CPE_CHANNELS][2]; + int16_t stereo_bits; + int16_t meta_bits, signal_bits; + + wmops_sub_start( "stereo_mdct_core_enc" ); + + L_subframeTCX = 0; /* to avoid compilation warning */ + + /*--------------------------------------------------------------* + * Set pointers + *---------------------------------------------------------------*/ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + p_mdst_spectrum_long[ch] = mdst_spectrum_long[ch]; + p_orig_spectrum_long[ch] = orig_spectrum_long[ch]; + } + + sts = hCPE->hCoreCoder; + hStereoMdct = hCPE->hStereoMdct; + hBstr = sts[0]->hBstr; + + meta_bits = hCPE->hMetaData->nb_bits_tot; + signal_bits = hBstr->nb_bits_tot; + + + /*--------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------*/ + + sts[0]->hTcxEnc->tfm_mem = sts[1]->hTcxEnc->tfm_mem = sqrtf( 0.5f * ( sts[0]->hTcxEnc->tfm_mem * sts[0]->hTcxEnc->tfm_mem + sts[1]->hTcxEnc->tfm_mem * sts[1]->hTcxEnc->tfm_mem ) ); /* RMS */ + sts[0]->hTcxEnc->tcxltp_norm_corr_past = sts[1]->hTcxEnc->tcxltp_norm_corr_past = 0.5f * ( sts[0]->hTcxEnc->tcxltp_norm_corr_past + sts[1]->hTcxEnc->tcxltp_norm_corr_past ); + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); + } + + /* adaptively sync tcx modes*/ + if ( ( hCPE->last_element_mode == IVAS_CPE_MDCT ) && ( abs( sts[0]->hTcxCfg->tcx_last_overlap_mode - sts[1]->hTcxCfg->tcx_last_overlap_mode ) > 2 || + sts[0]->hTcxCfg->tcx_last_overlap_mode == sts[1]->hTcxCfg->tcx_last_overlap_mode || + sts[0]->hTcxCfg->tcx_last_overlap_mode + sts[1]->hTcxCfg->tcx_last_overlap_mode == 5 ) ) /* disable syncing for stereo switching or large diff in last frame overlap */ + { + sync_tcx_mode( sts ); + } + + if ( hCPE->hCoreCoder[0]->igf ) + { +#ifdef DEBUGGING + int16_t orig_mdct_stereo_mode_cmdl = hCPE->hStereoMdct->mdct_stereo_mode_cmdl; + hCPE->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; +#endif + initMdctStereoEncData( hCPE->hStereoMdct, STEREO_FORMAT, IVAS_CPE_MDCT, hCPE->element_brate, hCPE->hCoreCoder[0]->bwidth, hCPE->hCoreCoder[0]->igf, hCPE->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid, 0 ); +#ifdef DEBUGGING + hCPE->hStereoMdct->mdct_stereo_mode_cmdl = orig_mdct_stereo_mode_cmdl; +#endif + stereo_mdct_init_igf_start_band( &( hCPE->hStereoMdct->stbParamsTCX20 ), 1.0f, hCPE->hCoreCoder[0]->bwidth, hCPE->element_brate ); + stereo_mdct_init_igf_start_band( &( hCPE->hStereoMdct->stbParamsTCX10 ), 0.5f, hCPE->hCoreCoder[0]->bwidth, hCPE->element_brate ); + stereo_mdct_init_igf_start_band( &( hCPE->hStereoMdct->stbParamsTCX20afterACELP ), 1.25f, hCPE->hCoreCoder[0]->bwidth, hCPE->element_brate ); + } + else + { + hCPE->hStereoMdct->stbParamsTCX20.sfbIgfStart = -1; + hCPE->hStereoMdct->stbParamsTCX10.sfbIgfStart = -1; + hCPE->hStereoMdct->stbParamsTCX10.nBandsStereoCore = hCPE->hStereoMdct->stbParamsTCX10.sfbCnt; + hCPE->hStereoMdct->stbParamsTCX20.nBandsStereoCore = hCPE->hStereoMdct->stbParamsTCX20.sfbCnt; + } + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + orig_spectrum[ch][0] = orig_spectrum_long[ch]; + orig_spectrum[ch][1] = orig_spectrum_long[ch] + N_TCX10_MAX; + quantized_spectrum[ch][0] = quantized_spectrum_long[ch]; + quantized_spectrum[ch][1] = quantized_spectrum_long[ch] + N_TCX10_MAX; + inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch]; + inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX; + inv_spectrum[ch][0] = quantized_spectrum[ch][0]; + inv_spectrum[ch][1] = quantized_spectrum[ch][1]; + mdst_spectrum[ch][0] = mdst_spectrum_long[ch]; + mdst_spectrum[ch][1] = mdst_spectrum_long[ch] + N_TCX10_MAX; + } + + + /*--------------------------------------------------------------* + * MDCT core preprocessing: + * - initialization + * - Core Signal Analysis: MDCT, TNS + * - Envelope Quantization and FDNS + * - TNS + *---------------------------------------------------------------*/ + + ivas_mdct_core_whitening_enc( hCPE, new_samples, old_wsp, pitch_buf, p_mdst_spectrum_long, + tnsBits, p_orig_spectrum_long, tnsSize, p_param, hBstr, NULL, 0, CPE_CHANNELS ); + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + + for ( n = 0; n < nSubframes; n++ ) + { + st->side_bits_frame_channel += NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; + } + } + + sts[0]->side_bits_frame_channel += SMDCT_NBBITS_SPLIT_RATIO; + + + /*--------------------------------------------------------------* + * Stereo Processing + *---------------------------------------------------------------*/ + + stereo_coder_tcx( hStereoMdct, sts, ms_mask, mdst_spectrum, inv_spectrum, inv_mdst_spectrum, 0 ); + + + /*--------------------------------------------------------------* + * Power spectrum calculation + *---------------------------------------------------------------*/ + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + L_subframeTCX = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; + if ( sts[ch]->last_core == ACELP_CORE ) + { + L_subframeTCX += L_subframeTCX / 4; + } + + for ( n = 0; n < nSubframes; n++ ) + { + if ( !sts[ch]->hTcxEnc->fUseTns[n] ) + { + /* power spectrum: MDCT^2 + MDST^2 */ + for ( i = 0; i < L_subframeTCX; i++ ) + { + powerSpecMsInv[ch][n][i] = inv_mdst_spectrum[ch][n][i] * inv_mdst_spectrum[ch][n][i] + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; + powerSpec[ch][i + n * L_subframeTCX] = mdst_spectrum[ch][n][i] * mdst_spectrum[ch][n][i] + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; + } + } + else + { + /* power spectrum: MDCT^2 + MDST^2 */ + powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; + for ( i = 1; i < L_subframeTCX - 1; i++ ) + { + float mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ + powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; + } + powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; + + /* power spectrum: MDCT^2 + MDST^2 */ + powerSpec[ch][n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][0] * sts[ch]->hTcxEnc->spectrum[n][0]; + for ( i = 1; i < L_subframeTCX - 1; i++ ) + { + float mdst = ( sts[ch]->hTcxEnc->spectrum[n][i + 1] - sts[ch]->hTcxEnc->spectrum[n][i - 1] ); /* An MDST estimate */ + powerSpec[ch][i + n * L_subframeTCX] = mdst * mdst + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; + } + powerSpec[ch][L_subframeTCX - 1 + n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1] * sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1]; + } + } + } + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; +#ifdef DEBUG_MODE_MDCT + dbgwrite( powerSpec[ch], sizeof( float ), 640, 1, "./res/powerSpec" ); + +#endif + if ( st->last_core == ACELP_CORE ) + { + L_subframeTCX += L_subframeTCX / 4; + } + + if ( ( st->hTcxEnc->tcxMode == TCX_20 ) && ( st->element_brate < HQ_96k || st->igf ) ) + { + /*-----------------------------------------------------------* + * Compute noise-measure flags for spectrum filling * + * and quantization (0: tonal, 1: noise-like). * + * Detect low pass if present. * + *-----------------------------------------------------------*/ + + ComputeSpectrumNoiseMeasure( powerSpec[ch], L_subframeTCX, st->hTcxEnc->nmStartLine * ( L_subframeTCX / st->hTcxEnc->L_frameTCX ), + ( st->L_frame * st->last_sr_core != st->L_frame_past * st->sr_core ) || ( st->last_core != TCX_20_CORE ), + st->hTcxEnc->memQuantZeros, L_subframeTCX ); + } + + st->hTcxEnc->measuredBwRatio = 1.f; /* No bandwidth limit for the noise filling */ + } + + /*--------------------------------------------------------------* + * IGF + *---------------------------------------------------------------*/ + + if ( sts[0]->igf || sts[1]->igf ) + { + if ( sts[0]->hTcxEnc->tcxMode == sts[1]->hTcxEnc->tcxMode ) + { + /* Band-wise M/S for MDST */ + nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 || sts[1]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + for ( n = 0; n < nSubframes; n++ ) + { + if ( hStereoMdct->mdct_stereo_mode[n] != hStereoMdct->IGFStereoMode[n] || + hStereoMdct->mdct_stereo_mode[n] == SMDCT_BW_MS ) + { + ProcessStereoIGF( hStereoMdct, sts, ms_mask, orig_spectrum, powerSpec, powerSpecMsInv, inv_spectrum, n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 ); + } + else + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + + ProcessIGF( st, st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, hCPE->hCoreCoder[0]->sp_aud_decision0, 0 ); + } + } + } + } + else + { + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + st = sts[ch]; + nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + if ( st->igf ) + { + for ( n = 0; n < nSubframes; n++ ) + { + ProcessIGF( st, st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, hCPE->hCoreCoder[0]->sp_aud_decision0, 0 ); + } + } + } + } + + /*write IGF data to bitstream*/ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { +#ifdef DEBUG_PLOT_BITS + int16_t tmp = hBstr->nb_bits_tot; +#endif + st = sts[ch]; + enc_prm_igf_mdct( st, hBstr ); +#ifdef DEBUG_PLOT_BITS + tmp = hBstr->nb_bits_tot - tmp; + dbgwrite( &tmp, sizeof( int16_t ), 1, 1, "./res/bits_IGF" ); +#endif + } + } + + /* correct side bits per channel*/ + sts[0]->side_bits_frame_channel -= SMDCT_NBBITS_SPLIT_RATIO; + + stereo_bits = write_stereo_to_bitstream( hStereoMdct, sts, ms_mask, 0, hBstr ); + + /*--------------------------------------------------------------* + * Split available bits between channels + *---------------------------------------------------------------*/ + + FindSplitRatio( hCPE, sts ); + + assert( hStereoMdct->split_ratio > 0 && hStereoMdct->split_ratio < SMDCT_BITRATE_RATIO_RANGE ); + + /* Split available bits between channels */ + nAvailBits = sts[0]->bits_frame_channel + sts[1]->bits_frame_channel - hBstr->nb_bits_tot - sts[0]->core * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS ) - sts[1]->core * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS ); + + /* remove metadata bits */ + nAvailBits -= meta_bits; + + nAvailBits -= SMDCT_NBBITS_SPLIT_RATIO; + splitAvailableBits( nAvailBits, hStereoMdct->split_ratio, &sts[0]->bits_frame_channel, &sts[1]->bits_frame_channel ); +#ifdef DEBUG_MODE_MDCT + dbgwrite( &nAvailBits, sizeof( int16_t ), 1, 1, "./res/nAvailBits" ); +#endif + + sts[0]->bits_frame_channel += sts[0]->core * SMDCT_MINIMUM_ARITH_BITS; + sts[1]->bits_frame_channel += sts[1]->core * SMDCT_MINIMUM_ARITH_BITS; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + sts[ch]->total_brate = ( sts[ch]->bits_frame_channel + sts[ch]->side_bits_frame_channel ) * FRAMES_PER_SEC; + } + stereo_bits += SMDCT_NBBITS_SPLIT_RATIO; + assert( ( sts[0]->total_brate + sts[1]->total_brate + ( stereo_bits + signal_bits + meta_bits ) * FRAMES_PER_SEC ) == hCPE->element_brate ); + assert( hStereoMdct->split_ratio > 0 && hStereoMdct->split_ratio < SMDCT_BITRATE_RATIO_RANGE ); + + push_next_indice( hBstr, hStereoMdct->split_ratio, SMDCT_NBBITS_SPLIT_RATIO ); + +#ifdef DEBUG_MODE_MDCT + dbgwrite( &hStereoMdct->split_ratio, sizeof( int16_t ), 1, 1, "./res/split_ratio" ); + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + dbgwrite( &sts[ch]->bits_frame_channel, sizeof( int16_t ), 1, 1, "./res/bit_frame_channel" ); + } +#endif + + ivas_mdct_quant_coder( hCPE, 0, tnsBits, tnsSize, p_param, 0 ); + + wmops_sub_end(); + + return; +} diff --git a/lib_enc/ivas_stereo_mdct_igf_enc.c b/lib_enc/ivas_stereo_mdct_igf_enc.c new file mode 100644 index 0000000000..b04fe84de2 --- /dev/null +++ b/lib_enc/ivas_stereo_mdct_igf_enc.c @@ -0,0 +1,271 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "prot.h" +#include "cnst.h" +#include "stat_enc.h" +#include "ivas_stat_enc.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define IGF_PATCH_MS 1 +#define IGF_PATCH_LR 0 +#define TARGET_COH_THRESHOLD 0.6f +#define SOURCE_COH_THRESHOLD 0.7f +#define PANNING_THRESHOLD 0.07f + + +/*-------------------------------------------------------------------* + * calcCoh() + * + * + *-------------------------------------------------------------------*/ + +static float calcCoh( + const float *sig1, + const float *sig2, + const int16_t nSamples, + float *corr, + float *predCoeff ) +{ + float coh, ener1, ener2, cEner, cc; + + coh = 0.0f; + ener1 = dotp( sig1, sig1, nSamples ); + ener2 = dotp( sig2, sig2, nSamples ); + cEner = sqrtf( ener1 * ener2 ); + cc = dotp( sig1, sig2, nSamples ); + + if ( corr != NULL ) + { + *corr = cc; + } + + if ( cEner > 0.0f ) + { + coh = cc / cEner; + } + + if ( predCoeff != NULL ) + { + *predCoeff = 0.f; + if ( ener1 > 0.0f ) + { + *predCoeff = cc / ener1; + } + } + + return coh; +} + + +/*-------------------------------------------------------------------* + * IGF_MsStereoDecision() + * + * + *-------------------------------------------------------------------*/ + +static void IGF_MsStereoDecision( + STEREO_MDCT_BAND_PARAMETERS *sfbParam, + H_IGF_GRID hGrid, + const float *specL, + const float *specR, + int16_t *igfStereoMode, /* output*/ + int16_t *msMask, /* output*/ + const int16_t mdct_stereo_mode ) +{ + int16_t sfb; + int16_t msMaskTrueSomewhere, msMaskFalseSomewhere; + int16_t numMsMaskTrue, numMsMaskFalse, numMsMaskThresh, numMsMaskMSForLR; + int16_t tile_idx; + int16_t strt_cpy; + float thresh; + + thresh = TARGET_COH_THRESHOLD; + if ( mdct_stereo_mode == SMDCT_MS_FULL ) + { + thresh *= 0.7f; /* lower threshold if core is already MS */ + } + + for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) + { + strt_cpy = hGrid->sbWrap[tile_idx]; + + for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) + { + int16_t width = hGrid->swb_offset[sfb + 1] - hGrid->swb_offset[sfb]; + float cc_src, cc_target, pc_target, pc_src; + float coh_src = calcCoh( &specL[strt_cpy], &specR[strt_cpy], width, &cc_src, &pc_src ); + float coh_target = calcCoh( &specL[hGrid->swb_offset[sfb]], &specR[hGrid->swb_offset[sfb]], width, &cc_target, &pc_target ); + + strt_cpy += width; + if ( fabsf( coh_target ) > thresh ) + { + /* target is very coherent */ + if ( fabsf( coh_src ) > SOURCE_COH_THRESHOLD ) + { + if ( fabsf( pc_target - pc_src ) < PANNING_THRESHOLD && fabsf( pc_target - 1.0f ) > 2.0f * PANNING_THRESHOLD ) /* same position but not close to the MID */ + { + /* same for the source, stereo pos are close, stay on LR */ + msMask[sfb] = IGF_PATCH_LR; + } + else + { + msMask[sfb] = IGF_PATCH_MS; + } + } + else + { + /* we need to get the coherent patch, do MS */ + msMask[sfb] = IGF_PATCH_MS; + } + } + else + { + /* target is not coherent, stick to LR patching */ + msMask[sfb] = IGF_PATCH_LR; + } + } + } + + msMaskTrueSomewhere = 0; + msMaskFalseSomewhere = 0; + numMsMaskTrue = 0; + numMsMaskFalse = 0; + numMsMaskThresh = ( sfbParam->sfbCnt - sfbParam->nBandsStereoCore ) / 4; + numMsMaskMSForLR = 0; + + for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) + { + for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) + { + switch ( msMask[sfb] ) + { + case IGF_PATCH_LR: + msMask[sfb] = 0; + numMsMaskFalse++; + msMaskFalseSomewhere = 1; + break; + case IGF_PATCH_MS: + msMask[sfb] = 1; + numMsMaskTrue++; + msMaskTrueSomewhere = 1; + break; + default: + assert( 0 ); + break; + } + } + } + + if ( msMaskTrueSomewhere ) + { + if ( msMaskFalseSomewhere ) + { + *igfStereoMode = SMDCT_BW_MS; + + if ( numMsMaskFalse <= numMsMaskThresh ) + { + *igfStereoMode = SMDCT_MS_FULL; + set_s( &msMask[0], 1, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); + } + else if ( numMsMaskTrue <= numMsMaskThresh && !numMsMaskMSForLR ) + { + *igfStereoMode = SMDCT_DUAL_MONO; + set_s( &msMask[0], 0, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); + } + } + else + { + *igfStereoMode = SMDCT_MS_FULL; + set_s( &msMask[0], 1, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); + } + } + else + { + *igfStereoMode = SMDCT_DUAL_MONO; + set_s( &msMask[0], 0, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * IGFEncStereoEncoder() + * + * + *-------------------------------------------------------------------*/ + +void IGFEncStereoEncoder( + STEREO_MDCT_BAND_PARAMETERS *sfbParam, /* i/o: sfb parameters for the right channel */ + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : IGF handle */ + const float *mdctSpectrumL, /* i : left spectrum */ + const float *mdctSpectrumR, /* i : right spectrum */ + int16_t *msMask, /* i/o: MS mask */ + int16_t *igfStereoMode, /* o : IGF stereo mode */ + const int16_t mdct_stereo_mode, /* i : MDCT stereo mode */ + const int16_t isTCX20, /* i : flag for indicating TCX20 */ + const int16_t isTransition /* i : flag for transtition */ +) +{ + int16_t igfGridIdx; + H_IGF_GRID hGrid; + + if ( isTransition && isTCX20 ) + { + igfGridIdx = IGF_GRID_LB_TRAN; + } + else if ( isTCX20 ) + { + igfGridIdx = IGF_GRID_LB_NORM; + } + else + { + /* It is short block */ + igfGridIdx = IGF_GRID_LB_SHORT; + } + + hGrid = &hIGFEnc->igfData.igfInfo.grid[igfGridIdx]; + + IGF_MsStereoDecision( sfbParam, hGrid, mdctSpectrumL, mdctSpectrumR, igfStereoMode, msMask + sfbParam->nBandsStereoCore, mdct_stereo_mode ); + + return; +} diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c new file mode 100644 index 0000000000..fcad004b3a --- /dev/null +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -0,0 +1,1240 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#include +#include "ivas_cnst.h" +#include "ivas_prot.h" +#include "prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_enc.h" +#include "wmops.h" +#include "stat_enc.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define OFFSET_BITS_TCX20 126 +#define OFFSET_BITS_TCX10 222 + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void convertToBwMS( const int16_t startLine, const int16_t stopLine, float x0[], float x1[], const float norm_fac ); + +void convertToMS( const int16_t L_frame, float x0[], float x1[], const float norm_fac ); + +static float GetChannelEnergyRatio( Encoder_State **st, const int16_t iFirstSubframe, const int16_t iLastSubframe, const uint8_t ratioInRmsDomain ); + +static void MsStereoDecision( STEREO_MDCT_BAND_PARAMETERS *sfbParam, float *specL, float *specR, float *specM, float *specS, int16_t *mdct_stereo_mode, int16_t *msMask, const int16_t nBitsAvailable ); + + +/*-------------------------------------------------------------------* + * dft_ana_init() + * + * Initialization function for dft analysis handle within + * MDCT-stereo + *-------------------------------------------------------------------*/ + +static void dft_ana_init( + DFT_ANA_HANDLE hDft_ana, /*i : DFT analysis handle */ + const int32_t input_Fs /*i : Input sampling frequency */ +) +{ + hDft_ana->N = (int16_t) ( STEREO_DFT_HOP_MAX_ENC * input_Fs / 48000 ); + hDft_ana->NFFT = (int16_t) ( STEREO_DFT_N_MAX_ENC * input_Fs / 48000 ); + hDft_ana->dft_ovl = (int16_t) ( STEREO_DFT_OVL_MAX * input_Fs / 48000 ); + hDft_ana->dft_zp = (int16_t) ( STEREO_DFT_ZP_MAX_ENC * input_Fs / 48000 ); + + hDft_ana->dft_trigo_32k = dft_trigo_32k; + + if ( input_Fs == 16000 ) + { + hDft_ana->dft_trigo = dft_trigo_32k; + hDft_ana->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; + hDft_ana->win_ana = win_ana_16k; + } + else if ( input_Fs == 32000 ) + { + hDft_ana->dft_trigo = dft_trigo_32k; + hDft_ana->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; + hDft_ana->win_ana = win_ana_32k; + } + else + { + assert( input_Fs == 48000 ); + hDft_ana->dft_trigo = dft_trigo_48k; + hDft_ana->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_48k_STEP; + hDft_ana->win_ana = win_ana_48k; + } + + return; +} + + +/*-------------------------------------------------------------------* + * write_itd_data() + * + * Bitstream writing of ITDs + *-------------------------------------------------------------------*/ + +static void write_itd_data( + ITD_DATA_HANDLE hItd, /* i : ITD data handle */ + BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ +) +{ + int16_t k_offset; + int16_t itd; + + k_offset = 1; + + push_next_indice( hBstr, ( hItd->itd[k_offset] != 0 ), STEREO_DFT_ITD_MODE_NBITS ); + + if ( hItd->itd[k_offset] ) + { + itd = hItd->itd_index[k_offset]; + if ( itd > 255 ) + { + itd -= 256; + + if ( itd < 20 ) + { + push_next_indice( hBstr, 1, 1 ); /* use Huffman*/ + push_next_indice( hBstr, 1, 1 ); /* negative */ + push_next_indice( hBstr, dft_code_itd[itd], dft_len_itd[itd] ); + } + else + { + push_next_indice( hBstr, 0, 1 ); /* don't use Huffman */ + push_next_indice( hBstr, 1, 1 ); /* negative */ + push_next_indice( hBstr, itd, STEREO_DFT_ITD_NBITS - 1 ); + } + } + else + { + if ( itd < 20 ) + { + push_next_indice( hBstr, 1, 1 ); /* use Huffman*/ + push_next_indice( hBstr, 0, 1 ); /* positive */ + push_next_indice( hBstr, dft_code_itd[itd], dft_len_itd[itd] ); + } + else + { + /* don't use Huffman and positive*/ + push_next_indice( hBstr, itd, STEREO_DFT_ITD_NBITS + 1 ); + } + } + } + return; +} + + +/*-------------------------------------------------------------------* + * stereo_coder_tcx() + * + * + *-------------------------------------------------------------------*/ + +void stereo_coder_tcx( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + float *mdst_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: MDST spectrum */ + float *inv_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: inverse spectrum */ + float *inv_mdst_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: inverse MDST spectrum */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +) +{ + STEREO_MDCT_BAND_PARAMETERS *sfbConf = NULL; + float nrgRatio[CPE_CHANNELS]; + float nonQNrgRatio[CPE_CHANNELS]; + int16_t k; + int16_t nSubframes, L_frameTCX; + int16_t nAvailBitsMS[NB_DIV]; + wmops_sub_start( "stereo_coder_tcx" ); + + set_s( nAvailBitsMS, 0, NB_DIV ); + + nSubframes = ( sts[0]->core == TCX_20_CORE && sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV; + L_frameTCX = sts[0]->hTcxEnc->L_frameTCX / nSubframes; + + set_s( &ms_mask[0][0], 0, MAX_SFB ); + set_s( &ms_mask[1][0], 0, MAX_SFB ); + + if ( !mct_on ) + { + if ( sts[0]->core == sts[1]->core ) + { + for ( k = 0; k < nSubframes; k++ ) + { + nonQNrgRatio[k] = GetChannelEnergyRatio( sts, k, k, 1 ); + + hStereoMdct->global_ild[k] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * nonQNrgRatio[k] + 0.5f ) ) ); + nrgRatio[k] = (float) SMDCT_ILD_RANGE / hStereoMdct->global_ild[k] - 1; /* nrgRatio = nrg[1]/nrg[0] */ + + nonQNrgRatio[k] = max( 0.5f / SMDCT_ILD_RANGE, min( ( SMDCT_ILD_RANGE - 0.5f ) / SMDCT_ILD_RANGE, nonQNrgRatio[k] ) ); + nonQNrgRatio[k] = 1.0f / nonQNrgRatio[k] - 1.0f; + } +#ifdef DEBUG_MODE_MDCT + { + float tmp; + for ( k = 0; k < 2; k++ ) + { + tmp = GetChannelEnergyRatio( sts, k, k, 1 ); + if ( nSubframes == 1 && k == 1 ) + { + tmp = 0; + } + dbgwrite( &tmp, sizeof( float ), 1, 1, "./res/ild" ); + } + } +#endif + } + else + { + nonQNrgRatio[0] = nonQNrgRatio[1] = GetChannelEnergyRatio( sts, 0, nSubframes - 1, + 1 ); + hStereoMdct->global_ild[0] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * nonQNrgRatio[0] + 0.5f ) ) ); + nrgRatio[0] = nrgRatio[1] = (float) SMDCT_ILD_RANGE / hStereoMdct->global_ild[0] - 1; /* nrgRatio = nrg[1]/nrg[0] */ + nonQNrgRatio[0] = nonQNrgRatio[1] = max( 0.5f / SMDCT_ILD_RANGE, min( ( SMDCT_ILD_RANGE - 0.5f ) / SMDCT_ILD_RANGE, nonQNrgRatio[0] ) ); + nonQNrgRatio[0] = nonQNrgRatio[1] = 1.0f / nonQNrgRatio[0] - 1.0f; +#ifdef DEBUG_MODE_MDCT + { + float tmp; + for ( k = 0; k < 2; k++ ) + { + tmp = GetChannelEnergyRatio( sts, 0, nSubframes - 1, 1 ); + if ( nSubframes == 1 && k == 1 ) + { + tmp = 0; + } + dbgwrite( &tmp, sizeof( float ), 1, 1, "./res/ild" ); + } + } +#endif + } + + for ( k = 0; k < nSubframes; k++ ) + { + if ( ( nrgRatio[k] > 1.0f ) && ( k < ( ( sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV ) ) ) + { + L_frameTCX = sts[1]->hTcxEnc->L_frameTCX + ( ( sts[1]->last_core == 0 ) ? sts[1]->hTcxEnc->L_frameTCX / 4 : 0 ); + L_frameTCX /= ( ( sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV ); + + v_multc( sts[1]->hTcxEnc->spectrum[k], 1.0f / nrgRatio[k], sts[1]->hTcxEnc->spectrum[k], L_frameTCX ); + v_multc( mdst_spectrum[1][k], 1.0f / nrgRatio[k], mdst_spectrum[1][k], L_frameTCX ); + } + else if ( ( nrgRatio[k] < 1.0f ) && k < ( ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV ) ) + { + L_frameTCX = sts[0]->hTcxEnc->L_frameTCX + ( ( sts[0]->last_core == 0 ) ? sts[0]->hTcxEnc->L_frameTCX / 4 : 0 ); + L_frameTCX /= ( ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV ); + + v_multc( sts[0]->hTcxEnc->spectrum[k], nrgRatio[k], sts[0]->hTcxEnc->spectrum[k], L_frameTCX ); + v_multc( mdst_spectrum[0][k], nrgRatio[k], mdst_spectrum[0][k], L_frameTCX ); + } + } + } + + if ( +#ifdef DEBUGGING + hStereoMdct->fDualMono || +#endif + ( sts[0]->hTcxEnc->transform_type[0] != sts[1]->hTcxEnc->transform_type[0] ) || ( sts[0]->hTcxEnc->transform_type[1] != sts[1]->hTcxEnc->transform_type[1] ) || ( sts[0]->last_core != sts[1]->last_core && ( sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE ) ) || sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE ) + { + hStereoMdct->mdct_stereo_mode[0] = SMDCT_DUAL_MONO; + hStereoMdct->mdct_stereo_mode[1] = SMDCT_DUAL_MONO; + +#ifdef DEBUG_MODE_MDCT + for ( k = 0; k < 2; k++ ) + { + nAvailBitsMS[k] = -1; + dbgwrite( &nAvailBitsMS[k], sizeof( int16_t ), 1, 1, "./res/nAvailBitsMS" ); + } +#endif + + if ( sts[0]->igf ) + { + hStereoMdct->IGFStereoMode[0] = SMDCT_DUAL_MONO; + hStereoMdct->IGFStereoMode[1] = SMDCT_DUAL_MONO; + } +#ifdef DEBUG_MODE_MDCT + /* MDCT stereo data */ + { + float Em[2]; + int16_t ch; + getChannelEnergies( sts, Em, 2 ); + dbgwrite( Em, sizeof( float ), 2, 1, "./res/Ech" ); + for ( k = 0; k < 2; k++ ) + { + dbgwrite( &hStereoMdct->global_ild[k], sizeof( int16_t ), 1, 1, "./res/ild_q" ); + dbgwrite( &hStereoMdct->mdct_stereo_mode[k], sizeof( int16_t ), 1, 1, "./res/stereo_mode" ); + dbgwrite( &hStereoMdct->IGFStereoMode[k], sizeof( int16_t ), 1, 1, "./res/stereo_mode_ifg" ); + dbgwrite( ms_mask[k], sizeof( int16_t ), 70, 1, "./res/ms_mask" ); + } + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + for ( k = 0; k < 2; k++ ) + { + dbgwrite( sts[ch]->hTcxEnc->spectrum[k], sizeof( float ), 640, 1, "./res/MDCT_spec_after_stereo" ); + dbgwrite( mdst_spectrum[ch][k], sizeof( float ), 640, 1, "./res/MDST_spec_after_stereo" ); + } + } + } +#endif + hStereoMdct->sw_uncorr = 1; + + wmops_sub_end(); + return; + } +#ifdef DEBUGGING + else if ( hStereoMdct->fMSstereo ) + { + hStereoMdct->mdct_stereo_mode[0] = SMDCT_MS_FULL; + hStereoMdct->mdct_stereo_mode[1] = SMDCT_MS_FULL; + if ( sts[0]->igf ) + { + hStereoMdct->IGFStereoMode[0] = SMDCT_MS_FULL; + hStereoMdct->IGFStereoMode[1] = SMDCT_MS_FULL; + } + for ( k = 0; k < nSubframes; k++ ) + { + convertToMS( L_frameTCX, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], SQRT2_OVER_2 ); + + /* Make sure that the MDST is processed in the correct way also */ + set_s( &ms_mask[k][0], 1, MAX_SFB ); + } + + wmops_sub_end(); + return; + } +#endif + else /* decide based on signal */ + { + for ( k = 0; k < nSubframes; k++ ) + { + sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + if ( sts[0]->last_core == ACELP_CORE ) + { + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + if ( ( sts[0]->element_brate < IVAS_80k ) && ( sts[0]->core == sts[1]->core ) && !mct_on ) /* band-wise HF ILD alignment to increase channel compaction */ + { + int16_t sfb = 1; + + while ( ( sfb < sfbConf->nBandsStereoCore ) && ( sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] < 12 ) ) + { + sfb++; /* find start offset */ + } + + for ( sfb--; sfb < sfbConf->nBandsStereoCore; sfb++ ) /* start one SFB early for the fade-in */ + { + const int16_t startLine = sfbConf->sfbOffset[sfb]; + const int16_t endLine = sfbConf->sfbOffset[sfb + 1]; + const int16_t sfbWidth = endLine - startLine; + + nrgRatio[0] = sum2_f( &sts[0]->hTcxEnc->spectrum[k][startLine], sfbWidth ); + nrgRatio[1] = sum2_f( &sts[1]->hTcxEnc->spectrum[k][startLine], sfbWidth ); + + if ( !sts[0]->hTcxEnc->fUseTns[k] && !sts[1]->hTcxEnc->fUseTns[k] ) /* no TNS in either ch */ + { + nrgRatio[0] += sum2_f( &mdst_spectrum[0][k][startLine], sfbWidth ); + nrgRatio[1] += sum2_f( &mdst_spectrum[1][k][startLine], sfbWidth ); + } + if ( ( nrgRatio[0] > 0.f ) && ( nrgRatio[1] > 0.f ) && ( nrgRatio[0] != nrgRatio[1] ) ) + { + float fTemp = 0.5f * ( nrgRatio[0] + nrgRatio[1] ); + nrgRatio[0] = sqrtf( fTemp / nrgRatio[0] ); + nrgRatio[1] = sqrtf( fTemp / nrgRatio[1] ); + + nrgRatio[0] = max( 0.25f, min( 4.f, nrgRatio[0] ) ); + nrgRatio[1] = max( 0.25f, min( 4.f, nrgRatio[1] ) ); + + if ( ( sfbWidth < 12 && sfb + 1 < sfbConf->nBandsStereoCore ) || ( sts[0]->element_brate > IVAS_48k ) ) /* attenuate ILD alignment in the first SFB or at 64k */ + { + nrgRatio[0] = powf( nrgRatio[0], 0.25f ); + nrgRatio[1] = powf( nrgRatio[1], 0.25f ); + } + else + { + nrgRatio[0] = sqrtf( nrgRatio[0] ); + nrgRatio[1] = sqrtf( nrgRatio[1] ); + } + v_multc( &sts[0]->hTcxEnc->spectrum[k][startLine], nrgRatio[0], &sts[0]->hTcxEnc->spectrum[k][startLine], sfbWidth ); + v_multc( &mdst_spectrum[0][k][startLine], nrgRatio[0], &mdst_spectrum[0][k][startLine], sfbWidth ); + + v_multc( &sts[1]->hTcxEnc->spectrum[k][startLine], nrgRatio[1], &sts[1]->hTcxEnc->spectrum[k][startLine], sfbWidth ); + v_multc( &mdst_spectrum[1][k][startLine], nrgRatio[1], &mdst_spectrum[1][k][startLine], sfbWidth ); + } + } + } + + /* set mask to zero */ + set_s( &ms_mask[k][0], 0, MAX_SFB ); + + nAvailBitsMS[k] = ( ( mct_on ? 2 * sts[0]->bits_frame_channel : sts[0]->bits_frame_nominal ) - sts[0]->side_bits_frame_channel - sts[1]->side_bits_frame_channel - ( nSubframes == 2 ? OFFSET_BITS_TCX10 : OFFSET_BITS_TCX20 ) ) / nSubframes; + + MsStereoDecision( sfbConf, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], inv_spectrum[0][k], inv_spectrum[1][k], &hStereoMdct->mdct_stereo_mode[k], &ms_mask[k][0], nAvailBitsMS[k] ); + + if ( sts[0]->igf ) + { + IGFEncStereoEncoder( sfbConf, sts[0]->hIGFEnc, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], &ms_mask[k][0], + &hStereoMdct->IGFStereoMode[k], hStereoMdct->mdct_stereo_mode[k], sts[0]->core == TCX_20_CORE, sts[0]->last_core == ACELP_CORE ); + } + else + { + hStereoMdct->IGFStereoMode[k] = hStereoMdct->mdct_stereo_mode[k]; + } + + if ( hStereoMdct->mdct_stereo_mode[k] != SMDCT_DUAL_MONO || hStereoMdct->IGFStereoMode[k] != SMDCT_DUAL_MONO ) + { + ms_inv_mask_processing( hStereoMdct, sts, ms_mask, k, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], inv_spectrum[0][k], inv_spectrum[1][k], sfbConf->sfbCnt ); + ms_processing( hStereoMdct, sts, ms_mask, k, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], sfbConf->sfbCnt ); + + if ( !sts[0]->hTcxEnc->fUseTns[k] && !sts[1]->hTcxEnc->fUseTns[k] ) + { + ms_inv_mask_processing( hStereoMdct, sts, ms_mask, k, mdst_spectrum[0][k], mdst_spectrum[1][k], inv_mdst_spectrum[0][k], inv_mdst_spectrum[1][k], -1 ); + ms_processing( hStereoMdct, sts, ms_mask, k, mdst_spectrum[0][k], mdst_spectrum[1][k], sfbConf->sfbCnt ); + } + } + } /* for k */ + +#ifdef DEBUG_MODE_MDCT + for ( k = 0; k < 2; k++ ) + { + dbgwrite( &nAvailBitsMS[k], sizeof( int16_t ), 1, 1, "./res/nAvailBitsMS" ); + } +#endif + } + /* for bitrate switching determine correlation depending on m/s decision */ + { + int16_t ms_bands[2]; + float sw_uncorr[2], sw_uncorr_mean; + for ( k = 0; k < nSubframes; k++ ) + { + sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + ms_bands[k] = sum_s( ms_mask[k], sfbConf->nBandsStereoCore ); + sw_uncorr[k] = ( 1.0f - (float) ms_bands[k] / sfbConf->nBandsStereoCore ); + } + if ( sts[0]->core == TCX_20_CORE ) + { + sw_uncorr_mean = sw_uncorr[0]; + } + else + { + sw_uncorr_mean = ( sw_uncorr[0] + sw_uncorr[1] ) * 0.5f; + } + hStereoMdct->sw_uncorr = ( sw_uncorr_mean > 0.6f ); + } + + wmops_sub_end(); + +#ifdef DEBUG_MODE_MDCT + /* MDCT stereo data */ + { + float Em[2]; + int16_t ch; + getChannelEnergies( sts, Em, 2 ); + dbgwrite( Em, sizeof( float ), 2, 1, "./res/Ech" ); + for ( k = 0; k < 2; k++ ) + { + dbgwrite( &hStereoMdct->global_ild[k], sizeof( int16_t ), 1, 1, "./res/ild_q" ); + dbgwrite( &hStereoMdct->mdct_stereo_mode[k], sizeof( int16_t ), 1, 1, "./res/stereo_mode" ); + dbgwrite( &hStereoMdct->IGFStereoMode[k], sizeof( int16_t ), 1, 1, "./res/stereo_mode_ifg" ); + dbgwrite( ms_mask[k], sizeof( int16_t ), 70, 1, "./res/ms_mask" ); + } + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + for ( k = 0; k < 2; k++ ) + { + dbgwrite( sts[ch]->hTcxEnc->spectrum[k], sizeof( float ), 640, 1, "./res/MDCT_spec_after_stereo" ); + dbgwrite( mdst_spectrum[ch][k], sizeof( float ), 640, 1, "./res/MDST_spec_after_stereo" ); + } + } + } +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * ms_processing() + * + * + *-------------------------------------------------------------------*/ + +void ms_processing( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ + Encoder_State **sts, /* i/o: Encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + const int16_t iSubframe, /* i : subframe number */ + float x_0[], /* i/o: spectrum 1 */ + float x_1[], /* i/o: spectrum 1 */ + int16_t maxSfb /* i : number of stereo frequency bands*/ +) +{ + int16_t sfb; + STEREO_MDCT_BAND_PARAMETERS *sfbConf; + + sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + + if ( sts[0]->last_core == ACELP_CORE ) + { + assert( sts[1]->last_core == ACELP_CORE ); + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + + if ( maxSfb == -1 ) + { + maxSfb = sfbConf->sfbCnt; + } + + for ( sfb = 0; sfb < maxSfb; sfb++ ) + { + if ( ms_mask[iSubframe][sfb] ) + { + convertToBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], x_0, x_1, SQRT2_OVER_2 ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ms_inv_mask_processing() + * + * + *-------------------------------------------------------------------*/ + +void ms_inv_mask_processing( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ + Encoder_State **sts, /* i/o: Encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + const int16_t iSubframe, /* i : subframe number */ + const float x_0[], /* i : spectrum 1 */ + const float x_1[], /* i : spectrum 2 */ + float x_inv_0[], /* o : inverse spectrum 1 */ + float x_inv_1[], /* o : inverse spectrum 2 */ + int16_t maxSfb /* i : number of stereo frequency bands*/ +) +{ + int16_t sfb; + STEREO_MDCT_BAND_PARAMETERS *sfbConf; + + sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + + if ( sts[0]->last_core == ACELP_CORE ) + { + assert( sts[1]->last_core == ACELP_CORE ); + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + + if ( maxSfb == -1 ) + { + maxSfb = sfbConf->sfbCnt; + } + + for ( sfb = 0; sfb < maxSfb; sfb++ ) + { + mvr2r( &x_0[sfbConf->sfbOffset[sfb]], &x_inv_0[sfbConf->sfbOffset[sfb]], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); + mvr2r( &x_1[sfbConf->sfbOffset[sfb]], &x_inv_1[sfbConf->sfbOffset[sfb]], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); + + if ( ms_mask[iSubframe][sfb] == 0 ) + { + convertToBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], x_inv_0, x_inv_1, SQRT2_OVER_2 ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * write_stereo_to_bitstream() + * + * + *-------------------------------------------------------------------*/ + +int16_t write_stereo_to_bitstream( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ + Encoder_State **sts, /* i/o: Encoder state structure */ + int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ + const int16_t mct_on, /* i : flag mct block (1) or stereo (0)*/ + BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ +) +{ + int16_t i, k, nSubframes; + uint16_t mdct_stereo_mode, stereo_mode_bits; + STEREO_MDCT_BAND_PARAMETERS *sfbConf; + int16_t start_bits = hBstr->nb_bits_tot; + + if ( !mct_on ) + { + assert( ( ( sts[0]->hTcxEnc->transform_type[0] == sts[1]->hTcxEnc->transform_type[0] ) && ( sts[0]->hTcxEnc->transform_type[1] == sts[1]->hTcxEnc->transform_type[1] ) ) || ( ( hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) && ( hStereoMdct->mdct_stereo_mode[1] == SMDCT_DUAL_MONO ) ) ); + } + + nSubframes = ( sts[0]->core == TCX_10_CORE || ( sts[0]->core != sts[1]->core ) ) ? NB_DIV : 1; + sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; + + if ( sts[0]->last_core == ACELP_CORE ) + { + assert( sts[1]->ini_frame == 0 || sts[1]->last_core == ACELP_CORE ); + sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; + } + + if ( hStereoMdct->hItd != NULL ) + { + write_itd_data( hStereoMdct->hItd, hBstr ); + } + + for ( k = 0; k < nSubframes; k++ ) + { + mdct_stereo_mode = 0; + stereo_mode_bits = 1; + + switch ( hStereoMdct->mdct_stereo_mode[k] ) + { + case SMDCT_DUAL_MONO: + mdct_stereo_mode = 0; + stereo_mode_bits = 1; + break; + case SMDCT_MS_FULL: + mdct_stereo_mode = 2; + stereo_mode_bits = 2; + break; + case SMDCT_BW_MS: + mdct_stereo_mode = 3; + stereo_mode_bits = 2; + break; + default: + assert( !"Not supported MDCT stereo mode\n" ); + } + + push_next_indice( hBstr, mdct_stereo_mode, stereo_mode_bits ); + + if ( !mct_on ) + { + if ( ( sts[0]->core == sts[1]->core ) || ( k == 0 ) ) + { + push_next_indice( hBstr, hStereoMdct->global_ild[k], SMDCT_GLOBAL_ILD_BITS ); + } + } + + if ( hStereoMdct->mdct_stereo_mode[k] == SMDCT_BW_MS ) + { + for ( i = 0; i < sfbConf->nBandsStereoCore; i++ ) + { + push_next_indice( hBstr, ms_mask[k][i] ? 1 : 0, 1 ); + } + } + + if ( sts[0]->igf ) + { + mdct_stereo_mode = 0; + stereo_mode_bits = 1; + switch ( hStereoMdct->IGFStereoMode[k] ) + { + case SMDCT_DUAL_MONO: + mdct_stereo_mode = 0; + stereo_mode_bits = 1; + break; + case SMDCT_MS_FULL: + mdct_stereo_mode = 2; + stereo_mode_bits = 2; + break; + case SMDCT_BW_MS: + mdct_stereo_mode = 3; + stereo_mode_bits = 2; + break; + default: + assert( !"Not supported MDCT stereo mode\n" ); + } + + push_next_indice( hBstr, mdct_stereo_mode, stereo_mode_bits ); + + + if ( hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS ) + { + for ( i = sfbConf->nBandsStereoCore; i < sfbConf->sfbCnt; i++ ) + { + push_next_indice( hBstr, ms_mask[k][i] ? 1 : 0, 1 ); + } + } + } + } + + return ( hBstr->nb_bits_tot - start_bits ); +} + +/*-------------------------------------------------------------------* + * Band-wise M/S stereo processing + * + * + *-------------------------------------------------------------------*/ + +static void convertToBwMS( + const int16_t startLine, /* i : start line of sfb */ + const int16_t stopLine, /* i : stop line of sfb */ + float x0[], /* i/o: mid/left channel coefficients */ + float x1[], /* i/o: side/right channel coefficients */ + const float norm_fac /* i : normalization factor */ +) +{ + int16_t j; + float tmpValue; + + for ( j = startLine; j < stopLine; j++ ) + { + tmpValue = x0[j]; + x0[j] = ( x0[j] + x1[j] ) * norm_fac; + x1[j] = ( tmpValue - x1[j] ) * norm_fac; + } + + return; +} + +/*-------------------------------------------------------------------* + * convertToMS() + * + * + *-------------------------------------------------------------------*/ + +void convertToMS( + const int16_t L_frame, /* i : frame length */ + float x0[], /* i/o: mid/left channel coefficients */ + float x1[], /* i/o: side/right channel coefficients */ + const float norm_fac /* i : normalization factor */ +) +{ + convertToBwMS( 0, L_frame, x0, x1, norm_fac ); + + return; +} + +/*-------------------------------------------------------------------* + * SQ_gain_estimate_stereo() + * + * + *-------------------------------------------------------------------*/ + +/*! r: SQ gain */ +static float SQ_gain_estimate_stereo( + float xL[], /* i : L vector to quantize */ + float xR[], /* i : R vector to quantize */ + const int16_t nbitsSQ, /* i : number of bits targeted */ + const int16_t lg /* i : vector size (2048 max) */ +) +{ + int16_t i, q, iter; + float ener, tmp, target, fac, offset; + float en[N_MAX / 2]; + int16_t lg2, lg_4, lg2_4; + + lg_4 = lg >> 2; + lg2_4 = 2 * lg_4; + lg2 = lg2_4 << 2; + i = 0; + + set_f( en, 0.01f, N_MAX / 2 ); + + /* energy of quadruples with 9dB offset */ + /* ignore that we may take no all lines into account, max. 3 lines at the upper end of the spectrum can be missed (if lg is not a multiple of 4, happens also in SQGain()*/ + for ( q = 0; q < lg_4; q++ ) + { + ener = 0.01f + xL[i] * xL[i] + xL[i + 1] * xL[i + 1] + xL[i + 2] * xL[i + 2] + xL[i + 3] * xL[i + 3]; + en[q] = log10f( ener ); /* saves a MAC */ + i += 4; + } + i = 0; + for ( ; q < lg2_4; q++ ) + { + ener = 0.01f + xR[i] * xR[i] + xR[i + 1] * xR[i + 1] + xR[i + 2] * xR[i + 2] + xR[i + 3] * xR[i + 3]; + en[q] = log10f( ener ); /* saves a MAC */ + i += 4; + } + + /* SQ scale: 4 bits / 6 dB per quadruple */ + target = 0.15f * (float) ( nbitsSQ - ( lg2 >> 4 ) ); + fac = 12.8f; + offset = fac; + + /* find offset (0 to 128 dB with step of 0.125dB) */ + for ( iter = 0; iter < 10; iter++ ) + { + fac *= 0.5f; + offset -= fac; + ener = 0.0f; + + for ( i = 0; i < lg2_4; i++ ) + { + tmp = en[i] - offset; + + /* avoid SV with 1 bin of amp < 0.5f */ + if ( tmp > 0.3f ) + { + ener += tmp; + + /* if ener is above target -> break and increase offset */ + if ( ener > target ) + { + offset += fac; + break; + } + } + } + } + + /* return gain */ + return powf( 10.0f, 0.45f + 0.5f * offset ); +} + +/*-------------------------------------------------------------------* + * QuantSpecEstimateBits() + * + * + *-------------------------------------------------------------------*/ + +static int16_t QuantSpecEstimateBits( + float *spec, + float G, + const int16_t length, + const int16_t nBitsAvailable, + int16_t sqQ[] ) +{ + int16_t stop, sqBits, nEncoded; + int16_t lastnz; + + tcx_scalar_quantization( spec, sqQ, length, G, 0.5f, NULL, 1 ); + + stop = 0; + + sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, length, &lastnz, &nEncoded, nBitsAvailable, &stop, 0, NULL ); + + if ( stop != 0 ) + { + sqBits = stop; + } + + return sqBits; +} + +/*-------------------------------------------------------------------* + * context_update() + * + * + *-------------------------------------------------------------------*/ + +static void context_update( + HANDLE_RC_CONTEXT_MEM ctxSrc, + HANDLE_RC_CONTEXT_MEM ctxTarget, + const int16_t endLine ) +{ + int16_t last_nz; + + /* check if last_nz of target is smaller than endLine, save and update */ + last_nz = max( ctxTarget->lastnz, endLine ); + + mvc2c( (uint8_t *) ctxSrc, (uint8_t *) ctxTarget, sizeof( RC_CONTEXT_MEM ) ); + ctxTarget->lastnz = last_nz; + + return; +} + +/*-------------------------------------------------------------------* + * GetChannelEnergyRatio() + * + * + *-------------------------------------------------------------------*/ + +static float GetChannelEnergyRatio( + Encoder_State **sts, /* i/o: Encoder state structure */ + const int16_t iFirstSubframe, + const int16_t iLastSubframe, + const uint8_t ratioInRmsDomain ) +{ + int16_t ch, n, i; + float nrg[2]; + + /* Calculate energies per channel */ + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + const Encoder_State *st = sts[ch]; + const int16_t nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; + int16_t L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; + + if ( st->last_core == ACELP_CORE ) + { + L_subframeTCX += L_subframeTCX / 4; + } + assert( iFirstSubframe >= 0 && iFirstSubframe <= iLastSubframe ); + + nrg[ch] = 0; + for ( n = iFirstSubframe; n <= min( nSubframes - 1, iLastSubframe ); n++ ) + { + for ( i = 0; i < L_subframeTCX; i++ ) + { + nrg[ch] += st->hTcxEnc->spectrum[n][i] * st->hTcxEnc->spectrum[n][i]; + } + } + if ( ratioInRmsDomain ) + { + nrg[ch] = sqrtf( nrg[ch] ); + } + } + + return ( nrg[0] + nrg[1] ) > 0 ? nrg[0] / ( nrg[0] + nrg[1] ) : -1.0f; +} + +/*-------------------------------------------------------------------* + * FindSplitRatio() + * + * + *-------------------------------------------------------------------*/ + +void FindSplitRatio( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + Encoder_State **sts /* i/o: Encoder state structure */ +) +{ + const uint8_t highRateMdctStereo = ( sts[0]->element_brate < IVAS_80k && sts[0]->core == sts[1]->core && sts[0]->element_mode == IVAS_CPE_MDCT && sts[0]->hTcxEnc->enc_ste_pre_corr_past ? 0 : 1 ); + float ratio; + + /* Calculate split ratio and quantize it */ + hCPE->hStereoMdct->split_ratio = SMDCT_EQUAL_RATIO_RANGE; /* Equal bits to both channels */ + + ratio = GetChannelEnergyRatio( sts, 0, 1, highRateMdctStereo ); + + if ( ratio >= 0 ) + { + hCPE->hStereoMdct->split_ratio = (uint16_t) ( SMDCT_BITRATE_RATIO_RANGE * ratio + 0.5f ); + /* Tuning to get closer to the optimal split ratio */ + if ( ratio < 8.0f / 9.0f && hCPE->hStereoMdct->split_ratio > SMDCT_EQUAL_RATIO_RANGE + ( SMDCT_BITRATE_RATIO_RANGE >> 4 ) ) + { + hCPE->hStereoMdct->split_ratio -= SMDCT_BITRATE_RATIO_RANGE >> 3; + } + if ( ratio > 1.0f / 9.0f && hCPE->hStereoMdct->split_ratio < SMDCT_EQUAL_RATIO_RANGE - ( SMDCT_BITRATE_RATIO_RANGE >> 4 ) ) + { + hCPE->hStereoMdct->split_ratio += SMDCT_BITRATE_RATIO_RANGE >> 3; + } + + hCPE->hStereoMdct->split_ratio = min( SMDCT_BITRATE_RATIO_RANGE - 1, max( 1, hCPE->hStereoMdct->split_ratio ) ); + } + + return; +} + +/*-------------------------------------------------------------------* + * MsStereoDecision() + * + * + *-------------------------------------------------------------------*/ + +static void MsStereoDecision( + STEREO_MDCT_BAND_PARAMETERS *sfbParam, + float *specL, + float *specR, + float *specM, /* scratch buffer for M, use buffer for inverse MS mask spectrum */ + float *specS, /* scratch buffer for M, use buffer for inverse MS mask spectrum */ + int16_t *mdct_stereo_mode, /* output */ + int16_t *msMask, /* output */ + const int16_t nBitsAvailable ) +{ + int16_t length = sfbParam->sfbOffset[sfbParam->nBandsStereoCore]; + + int16_t bitsL, bitsR, bitsM, bitsS; + int16_t bitsBW, bitsLR, bitsMS; + float G; + float GLR; + int16_t sfb, i; + int16_t nMSOn; /* Number of MS active bands */ + int16_t quantSpecL[N_MAX]; + int16_t quantSpecR[N_MAX]; + int16_t quantSpecM[N_MAX]; + int16_t quantSpecS[N_MAX]; + RC_CONTEXT_MEM ctxMem[4]; + HANDLE_RC_CONTEXT_MEM ctxL, ctxR, ctxM, ctxS; + + set_s( quantSpecL, 0, N_MAX ); + set_s( quantSpecR, 0, N_MAX ); + set_s( quantSpecM, 0, N_MAX ); + set_s( quantSpecS, 0, N_MAX ); + + assert( nBitsAvailable > 0 ); + + ctxL = &ctxMem[0]; + ctxR = &ctxMem[1]; + ctxM = &ctxMem[2]; + ctxS = &ctxMem[3]; + + GLR = SQ_gain_estimate_stereo( specL, specR, nBitsAvailable, length ); + + for ( i = 0; i < length; i++ ) + { + specM[i] = ( specL[i] + specR[i] ) * SQRT2_OVER_2; + specS[i] = ( specL[i] - specR[i] ) * SQRT2_OVER_2; + } + + G = 0.5f * GLR; /* seems to be favourable to underestimate a bit */ + + /* do the full spectrum estimates already here, as side effect we get the quantized spectra... */ + bitsLR = QuantSpecEstimateBits( specL, G, length, nBitsAvailable, quantSpecL ) + QuantSpecEstimateBits( specR, G, length, nBitsAvailable, quantSpecR ); + bitsMS = QuantSpecEstimateBits( specM, G, length, nBitsAvailable, quantSpecM ) + QuantSpecEstimateBits( specS, G, length, nBitsAvailable, quantSpecS ); + + /* clean-up MS scratch buffers */ + set_zero( specM, length ); + set_zero( specS, length ); + + nMSOn = 0; + bitsBW = 0; + + RCcontextMapping_encode2_estimate_bandWise_start( quantSpecL, length, nBitsAvailable, ctxL ); + RCcontextMapping_encode2_estimate_bandWise_start( quantSpecR, length, nBitsAvailable, ctxR ); + + bitsBW += RCcontextMapping_encode2_estimate_bandWise_start( quantSpecM, length, nBitsAvailable, ctxM ); + bitsBW += RCcontextMapping_encode2_estimate_bandWise_start( quantSpecS, length, nBitsAvailable, ctxS ); + + /*find_max_lastnz(ctxL,ctxR,ctxM,ctxS);*/ + + for ( sfb = 0; sfb < sfbParam->nBandsStereoCore; sfb++ ) + { + const int16_t startline = sfbParam->sfbOffset[sfb]; + const int16_t endline = sfbParam->sfbOffset[sfb + 1]; + + bitsL = RCcontextMapping_encode2_estimate_bandWise( quantSpecL, startline, endline, ctxL ); + bitsR = RCcontextMapping_encode2_estimate_bandWise( quantSpecR, startline, endline, ctxR ); + bitsM = RCcontextMapping_encode2_estimate_bandWise( quantSpecM, startline, endline, ctxM ); + bitsS = RCcontextMapping_encode2_estimate_bandWise( quantSpecS, startline, endline, ctxS ); + + if ( bitsM + bitsS <= bitsL + bitsR ) + { + msMask[sfb] = 1; + ++nMSOn; + context_update( ctxM, ctxL, endline ); + context_update( ctxS, ctxR, endline ); + bitsBW += bitsM + bitsS; + } + else + { + msMask[sfb] = 0; + context_update( ctxL, ctxM, endline ); + context_update( ctxR, ctxS, endline ); + bitsBW += bitsL + bitsR; + } +#ifdef DEBUG_MODE_MDCT + dbgwrite( &bitsL, sizeof( int16_t ), 1, 1, "./res/bitsL" ); + dbgwrite( &bitsR, sizeof( int16_t ), 1, 1, "./res/bitsR" ); + dbgwrite( &bitsM, sizeof( int16_t ), 1, 1, "./res/bitsM" ); + dbgwrite( &bitsS, sizeof( int16_t ), 1, 1, "./res/bitsS" ); +#endif + } + + bitsBW += sfbParam->nBandsStereoCore; /* Signaling bits */ + + if ( bitsLR < bitsBW ) + { + nMSOn = 0; + set_s( msMask, 0, sfbParam->sfbCnt ); + bitsBW = bitsLR; + } + + if ( bitsMS < bitsBW ) + { + nMSOn = sfbParam->nBandsStereoCore; + set_s( msMask, 1, sfbParam->sfbCnt ); + } + + *mdct_stereo_mode = SMDCT_BW_MS; + if ( nMSOn == sfbParam->nBandsStereoCore ) + { + *mdct_stereo_mode = SMDCT_MS_FULL; + } + else if ( nMSOn == 0 ) + { + *mdct_stereo_mode = SMDCT_DUAL_MONO; + } + + return; +} + + +/*-----------------------------------------------------------------------* + * initMdctStereoEncData() + * + * initialize encoder mdct stereo structure + *-----------------------------------------------------------------------*/ + +void initMdctStereoEncData( + STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t bwidth, /* i : bandwidth */ + const int16_t igf, /* i : flag indicating IGF activity */ + const H_IGF_GRID hIgfGrid, /* i : IGF grid setup */ + const int16_t mem_init /* i : initialize memory after malloc */ +) +{ + int16_t tcx_coded_lines; + + tcx_coded_lines = getNumTcxCodedLines( bwidth ); + + /*initialize mdct stereo mode*/ + set_s( hStereoMdct->mdct_stereo_mode, -1, 2 ); + + /*Initialize sfb parameteres for TCX20 */ + stereo_mdct_init_bands( tcx_coded_lines, TCX_20_CORE, element_brate, igf, &hIgfGrid[IGF_GRID_LB_NORM], &hStereoMdct->stbParamsTCX20.sfbOffset[0], &hStereoMdct->stbParamsTCX20.sfbCnt ); + + /*Initialize sfb parameteres for TCX10 */ + stereo_mdct_init_bands( tcx_coded_lines, TCX_10_CORE, element_brate, igf, &hIgfGrid[IGF_GRID_LB_SHORT], + &hStereoMdct->stbParamsTCX10.sfbOffset[0], &hStereoMdct->stbParamsTCX10.sfbCnt ); + + /*Initialize sfb parameteres for transitions */ + stereo_mdct_init_bands( tcx_coded_lines, -1, element_brate, igf, &hIgfGrid[IGF_GRID_LB_TRAN], + &hStereoMdct->stbParamsTCX20afterACELP.sfbOffset[0], &hStereoMdct->stbParamsTCX20afterACELP.sfbCnt ); + + set_s( hStereoMdct->IGFStereoMode, -1, 2 ); + +#ifdef DEBUG_FORCE_MDCT_STEREO_MODE + /*set all other members to defined states */ + hStereoMdct->fDualMono = 0; + hStereoMdct->fMSstereo = 0; + + if ( hStereoMdct->mdct_stereo_mode_cmdl == SMDCT_FORCE_LR ) + { + hStereoMdct->fDualMono = 1; + } + else if ( hStereoMdct->mdct_stereo_mode_cmdl == SMDCT_FORCE_MS ) + { + hStereoMdct->fMSstereo = 1; + } +#endif + + hStereoMdct->split_ratio = SMDCT_EQUAL_RATIO_RANGE; + set_s( hStereoMdct->global_ild, SMDCT_ILD_RANGE >> 1, 2 ); + + if ( mem_init ) + { + hStereoMdct->hItd = NULL; + hStereoMdct->hDft_ana = NULL; + } + + if ( !( element_mode == IVAS_CPE_MDCT && element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) ) + { + if ( hStereoMdct->hDft_ana != NULL ) + { + count_free( hStereoMdct->hDft_ana ); + hStereoMdct->hDft_ana = NULL; + } + + if ( hStereoMdct->hItd != NULL ) + { + count_free( hStereoMdct->hItd ); + hStereoMdct->hItd = NULL; + } + } + + return; +} + +/*-----------------------------------------------------------------------* + * initMdctItdHandling() + * + * initialize encoder mdct ITD handling structures + *-----------------------------------------------------------------------*/ + +ivas_error initMdctItdHandling( + STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ + const int32_t input_Fs /* i : input sampling rate */ +) +{ + if ( hStereoMdct->hItd == NULL ) + { + if ( ( hStereoMdct->hItd = (ITD_DATA_HANDLE) count_malloc( sizeof( ITD_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); + } + } + + if ( hStereoMdct->hDft_ana == NULL ) + { + if ( ( hStereoMdct->hDft_ana = (DFT_ANA_HANDLE) count_malloc( sizeof( DFT_ANA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); + } + } + + /*Initialize ITD parameters*/ + stereo_enc_itd_init( hStereoMdct->hItd ); + + /*Initialize DFT analysis parameters*/ + dft_ana_init( hStereoMdct->hDft_ana, input_Fs ); + + return IVAS_ERR_OK; +} + +/*------------------------------------------------------------------------- + * stereo_mdct_enc_destroy() + * + * destroy MDCT stereo handle + *-------------------------------------------------------------------------*/ + +void stereo_mdct_enc_destroy( + STEREO_MDCT_ENC_DATA_HANDLE *hStereoMdct /* i/o: encoder MDCT stereo handle */ +) +{ + if ( ( *hStereoMdct )->hDft_ana != NULL ) + { + count_free( ( *hStereoMdct )->hDft_ana ); + ( *hStereoMdct )->hDft_ana = NULL; + } + + if ( ( *hStereoMdct )->hItd != NULL ) + { + count_free( ( *hStereoMdct )->hItd ); + ( *hStereoMdct )->hItd = NULL; + } + + count_free( *hStereoMdct ); + *hStereoMdct = NULL; + + return; +} diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c new file mode 100644 index 0000000000..3074509870 --- /dev/null +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -0,0 +1,830 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Function allocate_CoreCoder_enc() + * + * Allocate CoreCoder modules + *-------------------------------------------------------------------*/ + +static ivas_error allocate_CoreCoder_enc( + ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ +) +{ + if ( st->hLPDmem == NULL && st->element_mode != IVAS_CPE_MDCT ) + { + if ( ( st->hLPDmem = (LPD_state_HANDLE) count_malloc( sizeof( LPD_state ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) ); + } + LPDmem_enc_init( st->hLPDmem ); + } + + if ( st->hGSCEnc == NULL && st->element_mode != IVAS_CPE_MDCT ) + { + if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) count_malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); + } + GSC_enc_init( st->hGSCEnc ); + } + + if ( st->hNoiseEst == NULL ) + { + if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) count_malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ) ); + } + noise_est_init( st->hNoiseEst ); + } + + if ( st->hVAD == NULL ) + { + if ( ( st->hVAD = (VAD_HANDLE) count_malloc( sizeof( VAD_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); + } + wb_vad_init( st->hVAD ); + } + + if ( st->hSpMusClas == NULL ) + { + if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) count_malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); + } + speech_music_clas_init( st->hSpMusClas ); + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * Function deallocate_CoreCoder_TCX_enc() + * + * Deallocate CoreCoder TCX modules + *-------------------------------------------------------------------*/ + +static void deallocate_CoreCoder_TCX_enc( + ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ +) +{ + if ( st->hTcxEnc != NULL ) + { + count_free( st->hTcxEnc ); + st->hTcxEnc = NULL; + } + + if ( st->hTcxCfg != NULL ) + { + count_free( st->hTcxCfg ); + st->hTcxCfg = NULL; + } + + if ( st->hIGFEnc != NULL ) + { + count_free( st->hIGFEnc ); + st->hIGFEnc = NULL; + } + + if ( st->hHQ_core != NULL ) + { + count_free( st->hHQ_core ); + st->hHQ_core = NULL; + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function deallocate_CoreCoder_enc() + * + * Deallocate CoreCoder modules + *-------------------------------------------------------------------*/ + +static void deallocate_CoreCoder_enc( + ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ +) +{ + if ( st->hLPDmem != NULL ) + { + count_free( st->hLPDmem ); + st->hLPDmem = NULL; + } + + if ( st->hGSCEnc != NULL ) + { + count_free( st->hGSCEnc ); + st->hGSCEnc = NULL; + } + + if ( st->hNoiseEst != NULL && st->element_mode != IVAS_CPE_MDCT ) + { + count_free( st->hNoiseEst ); + st->hNoiseEst = NULL; + } + + if ( st->hVAD != NULL && st->element_mode != IVAS_CPE_MDCT ) + { + count_free( st->hVAD ); + st->hVAD = NULL; + } + + if ( st->hSpMusClas != NULL && st->element_mode != IVAS_CPE_MDCT ) + { + count_free( st->hSpMusClas ); + st->hSpMusClas = NULL; + } + + if ( st->cldfbAnaEnc != NULL ) + { + deleteCldfb( &st->cldfbAnaEnc ); + } + + if ( st->hBWE_TD != NULL ) + { + count_free( st->hBWE_TD ); + st->hBWE_TD = NULL; + } + + if ( st->cldfbSynTd != NULL ) + { + deleteCldfb( &st->cldfbSynTd ); + } + + if ( st->hBWE_FD != NULL ) + { + count_free( st->hBWE_FD ); + st->hBWE_FD = NULL; + } + + if ( st->element_mode != IVAS_CPE_MDCT ) + { + deallocate_CoreCoder_TCX_enc( st ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_memory_enc() + * + * Dynamically allocate/deallocate data structures depending on the actual CPE mode + *-------------------------------------------------------------------*/ + +ivas_error stereo_memory_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int32_t input_Fs, /* i : input sampling rate */ + const int16_t max_bwidth, /* i : maximum audio bandwidth */ + float *tdm_last_ratio, /* o : TD stereo last ratio */ + const IVAS_FORMAT ivas_format /* i : ivas format */ +) +{ + Encoder_State *st; + ivas_error error; + + error = IVAS_ERR_OK; + + /*--------------------------------------------------------------* + * save parameters from structures that will be freed + *---------------------------------------------------------------*/ + + if ( hCPE->last_element_mode == IVAS_CPE_TD ) + { + *tdm_last_ratio = hCPE->hStereoTD->tdm_last_ratio; /* note: this must be set to local variable before data structures are allocated/deallocated */ + } + + if ( hCPE->hStereoTCA != NULL && hCPE->last_element_mode == IVAS_CPE_DFT ) + { + set_s( hCPE->hStereoTCA->prevCorrLagStats, (int16_t) hCPE->hStereoDft->hItd->itd[1], 3 ); + hCPE->hStereoTCA->prevRefChanIndx = ( hCPE->hStereoDft->hItd->itd[1] >= 0 ) ? ( L_CH_INDX ) : ( R_CH_INDX ); + } + + /*--------------------------------------------------------------* + * allocate/deallocate data structures + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode != hCPE->last_element_mode ) + { + /*--------------------------------------------------------------* + * switching CPE mode to DFT stereo + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + /* deallocate data structure of the previous CPE mode */ + if ( hCPE->hStereoTD != NULL ) + { + count_free( hCPE->hStereoTD ); + hCPE->hStereoTD = NULL; + } + + if ( hCPE->hStereoMdct != NULL ) + { + stereo_mdct_enc_destroy( &( hCPE->hStereoMdct ) ); + hCPE->hStereoMdct = NULL; + } + + /* deallocate CoreCoder secondary channel */ + deallocate_CoreCoder_enc( hCPE->hCoreCoder[1] ); + + /* allocate DFT stereo data structure */ + if ( ( error = stereo_dft_enc_create( &( hCPE->hStereoDft ), input_Fs, max_bwidth ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* allocate ICBWE structure */ + if ( hCPE->hStereoICBWE == NULL ) + { + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); + } + + stereo_icBWE_init_enc( hCPE->hStereoICBWE ); + } + + /* allocate HQ core in M channel */ + st = hCPE->hCoreCoder[0]; + if ( st->hHQ_core == NULL ) + { + if ( ( st->hHQ_core = (HQ_ENC_HANDLE) count_malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); + } + + HQ_core_enc_init( st->hHQ_core ); + } + } + + /*--------------------------------------------------------------* + * switching CPE mode to TD stereo + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + /* deallocate data structure of the previous CPE mode */ + if ( hCPE->hStereoDft != NULL ) + { + stereo_dft_enc_destroy( &( hCPE->hStereoDft ) ); + hCPE->hStereoDft = NULL; + } + + if ( hCPE->hStereoMdct != NULL ) + { + stereo_mdct_enc_destroy( &( hCPE->hStereoMdct ) ); + hCPE->hStereoMdct = NULL; + } + + /* deallocated TCX/IGF structures for second channel */ + deallocate_CoreCoder_TCX_enc( hCPE->hCoreCoder[1] ); + + /* allocate TD stereo data structure */ + if ( hCPE->hStereoTD != NULL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TD Stereo memory already allocated\n" ); + } + + if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); + } + + stereo_td_init_enc( hCPE->hStereoTD, hCPE->last_element_mode ); + + /* allocate secondary channel */ + if ( ( error = allocate_CoreCoder_enc( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /*--------------------------------------------------------------* + * allocate DFT/TD stereo structures after MDCT stereo frame + *---------------------------------------------------------------*/ + + if ( hCPE->last_element_mode == IVAS_CPE_MDCT && ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) ) + { + /* Deallocate MDCT CNG structures */ + deleteCldfb( &hCPE->hCoreCoder[0]->cldfbAnaEnc ); + deleteCldfb( &hCPE->hCoreCoder[1]->cldfbAnaEnc ); + + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + if ( hCPE->hCoreCoder[1]->hDtxEnc != NULL ) + { + count_free( hCPE->hCoreCoder[1]->hDtxEnc ); + hCPE->hCoreCoder[1]->hDtxEnc = NULL; + } + + if ( hCPE->hCoreCoder[1]->hFdCngEnc != NULL ) + { + deleteFdCngEnc( &hCPE->hCoreCoder[1]->hFdCngEnc ); + } + } + + if ( hCPE->hCoreCoder[0]->Opt_DTX_ON && hCPE->hCoreCoder[0]->hTdCngEnc == NULL ) + { + if ( ( hCPE->hCoreCoder[0]->hTdCngEnc = (TD_CNG_ENC_HANDLE) count_malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); + } + + td_cng_enc_init( hCPE->hCoreCoder[0]->hTdCngEnc, hCPE->hCoreCoder[0]->Opt_DTX_ON, hCPE->hCoreCoder[0]->max_bwidth ); + } + + /* allocate TCA data structure */ + if ( hCPE->hStereoTCA != NULL ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TCA Stereo memory already allocated\n" ); + } + + if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) count_malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); + } + + stereo_tca_init_enc( hCPE->hStereoTCA, input_Fs ); + + st = hCPE->hCoreCoder[0]; + + /* allocate primary channel substructures */ + if ( ( error = allocate_CoreCoder_enc( st ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* allocate CLDFB for primary channel */ + if ( st->cldfbAnaEnc == NULL ) + { + if ( ( error = openCldfb( &st->cldfbAnaEnc, CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* allocate BWEs for primary channel */ + if ( st->hBWE_TD == NULL ) + { + if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) count_malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); + } + + if ( st->cldfbSynTd == NULL ) + { + if ( ( error = openCldfb( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + InitSWBencBuffer( st->hBWE_TD ); + ResetSHBbuffer_Enc( st->hBWE_TD ); + + if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) count_malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); + } + + fd_bwe_enc_init( st->hBWE_FD ); + } + + /* allocate stereo CNG structure */ + if ( hCPE->hStereoCng == NULL ) + { + if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) count_malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo Cng for Unified/TD\n" ) ); + } + + stereo_enc_cng_init( hCPE->hStereoCng ); + } + } + + /*--------------------------------------------------------------* + * switching CPE mode to MDCT stereo + *---------------------------------------------------------------*/ + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + int16_t i; + + /* deallocate data structure of the previous CPE mode */ + if ( hCPE->hStereoDft != NULL ) + { + stereo_dft_enc_destroy( &( hCPE->hStereoDft ) ); + hCPE->hStereoDft = NULL; + } + + if ( hCPE->hStereoTD != NULL ) + { + count_free( hCPE->hStereoTD ); + hCPE->hStereoTD = NULL; + } + + if ( hCPE->hStereoTCA != NULL ) + { + count_free( hCPE->hStereoTCA ); + hCPE->hStereoTCA = NULL; + } + + if ( hCPE->hStereoICBWE != NULL ) + { + count_free( hCPE->hStereoICBWE ); + hCPE->hStereoICBWE = NULL; + } + + for ( i = 0; i < CPE_CHANNELS; i++ ) + { + /* deallocate core-coder substructures */ + deallocate_CoreCoder_enc( hCPE->hCoreCoder[i] ); + } + + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + /* allocate secondary channel */ + if ( ( error = allocate_CoreCoder_enc( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* allocate TCX/IGF structures for second channel */ + st = hCPE->hCoreCoder[1]; + + if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) count_malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) ); + } + st->hTcxEnc->spectrum[0] = st->hTcxEnc->spectrum_long; + st->hTcxEnc->spectrum[1] = st->hTcxEnc->spectrum_long + N_TCX10_MAX; + set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); + set_f( st->hTcxEnc->spectrum_long, 0, N_MAX ); + st->hTcxEnc->tfm_mem = 0.75f; + + if ( hCPE->last_element_mode == IVAS_CPE_DFT ) + { + st->last_core = ACELP_CORE; /* needed to set-up TCX core in SetTCXModeInfo() */ + } + + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); + } + + if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) count_malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); + } + st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode, st->mct_chan_mode ); + + /* allocate and initialize MDCT stereo structure */ + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); + } + +#ifdef DEBUGGING + hCPE->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; +#endif + initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, hCPE->hCoreCoder[0]->max_bwidth, 0, NULL, 1 ); + + if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) + { + if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* allocate/deallocate and initialize DTX/CNG structures */ + if ( hCPE->hCoreCoder[0]->Opt_DTX_ON ) + { + for ( i = 0; i < CPE_CHANNELS; i++ ) + { + st = hCPE->hCoreCoder[i]; + if ( ( error = openCldfb( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + + st->currEnergyLookAhead = 6.1e-5f; + + if ( st->hDtxEnc == NULL ) + { + if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) count_malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) ); + } + } + dtx_enc_init( st, 0, FIXED_SID_RATE ); + + if ( st->hTdCngEnc != NULL ) + { + count_free( st->hTdCngEnc ); + st->hTdCngEnc = NULL; + } + + if ( st->hFdCngEnc == NULL ) + { + if ( ( error = createFdCngEnc( &st->hFdCngEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + initFdCngEnc( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale ); + configureFdCngEnc( st->hFdCngEnc, st->bwidth, st->rf_mode && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate ); + } + } + } + } + } + + if ( ivas_format == STEREO_FORMAT && hCPE->element_mode == IVAS_CPE_MDCT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE && hCPE->last_element_brate > MAX_MDCT_ITD_BRATE ) + { + /* allocate MDCT stereo ITD handling structure */ + if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + return error; +} + + +/*-------------------------------------------------------------------* + * Function stereo_switching_enc() + * + * Handling of memories in case of CPE modes switching + *-------------------------------------------------------------------*/ + +void stereo_switching_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + float old_input_signal_pri[], /* i : old input signal of primary channel */ + const int16_t input_frame /* i : input frame length */ +) +{ + int16_t i, n, dft_ovl, offset; + float tmpF; + Encoder_State **sts; + + sts = hCPE->hCoreCoder; + dft_ovl = STEREO_DFT_OVL_MAX * input_frame / L_FRAME48k; + + /* update DFT analysis overlap memory */ + if ( hCPE->element_mode > IVAS_CPE_DFT && hCPE->input_mem[0] != NULL && hCPE->element_mode != IVAS_CPE_MDCT ) + { + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + mvr2r( sts[n]->input + input_frame - dft_ovl, hCPE->input_mem[n], dft_ovl ); + } + } + + /* save original stereo input (MDCT overlap part) for both channels in unused old input of right channel for possible DFT->MDCT transition */ + if ( hCPE->element_mode == IVAS_CPE_DFT ) + { + mvr2r( sts[0]->input + sts[0]->input_Fs / FRAMES_PER_SEC - sts[0]->encoderLookahead_FB, sts[1]->input - 2 * sts[0]->encoderLookahead_FB, sts[0]->encoderLookahead_FB ); + mvr2r( sts[1]->input + sts[1]->input_Fs / FRAMES_PER_SEC - sts[1]->encoderLookahead_FB, sts[1]->input - sts[1]->encoderLookahead_FB, sts[1]->encoderLookahead_FB ); + } + + /* TD/MDCT -> DFT stereo switching */ + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode != IVAS_CPE_DFT ) + { + /* window DFT synthesis overlap memory @input_Fs, primary channel */ + for ( i = 0; i < dft_ovl; i++ ) + { + hCPE->hStereoDft->output_mem_dmx[i] = old_input_signal_pri[input_frame - dft_ovl + i] * hCPE->hStereoDft->win[dft_ovl - 1 - i]; + } + + /* reset 48kHz BWE overlap memory */ + set_f( hCPE->hStereoDft->output_mem_dmx_32k, 0, STEREO_DFT_OVL_32k ); + + stereo_dft_enc_reset( hCPE->hStereoDft ); + + /* update ITD parameters */ + if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_TD ) + { + set_f( hCPE->hStereoDft->hItd->itd, hCPE->hStereoTCA->prevCorrLagStats[2], STEREO_DFT_ENC_DFT_NB ); + } + + /* Update the side_gain[] parameters */ + if ( hCPE->hStereoTCA != NULL && hCPE->last_element_mode != IVAS_CPE_MDCT ) + { + tmpF = usdequant( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); + for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) + { + hCPE->hStereoDft->side_gain[STEREO_DFT_BAND_MAX + i] = tmpF; + } + } + + /* do not allow differential coding of DFT side parameters */ + hCPE->hStereoDft->res_pred_counter = STEREO_DFT_FEC_THRESHOLD; + + /* update DFT synthesis overlap memory @12.8kHz */ + for ( i = 0; i < STEREO_DFT_OVL_12k8; i++ ) + { + hCPE->hStereoDft->output_mem_dmx_12k8[i] = sts[0]->buf_speech_enc[L_FRAME32k + L_FRAME - STEREO_DFT_OVL_12k8 + i] * hCPE->hStereoDft->win_12k8[STEREO_DFT_OVL_12k8 - 1 - i]; + } + + /* update DFT synthesis overlap memory @16kHz, primary channel only */ + lerp( hCPE->hStereoDft->output_mem_dmx, hCPE->hStereoDft->output_mem_dmx_16k, STEREO_DFT_OVL_16k, dft_ovl ); + + /* reset DFT synthesis overlap memory @8kHz, secondary channel */ + set_f( hCPE->hStereoDft->output_mem_res_8k, 0, STEREO_DFT_OVL_8k ); + + hCPE->hCoreCoder[1]->vad_flag = 0; + } + + /* MDCT -> TD stereo switching */ + if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; + hCPE->hStereoTD->tdm_last_ratio_idx_SM = LRTD_STEREO_LEFT_IS_PRIM; + hCPE->hStereoTD->tdm_last_SM_flag = 0; + hCPE->hStereoTD->tdm_last_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + hCPE->hStereoTD->tdm_last_ratio = tdm_ratio_tabl[LRTD_STEREO_LEFT_IS_PRIM]; + } + /* DFT -> TD stereo switching */ + else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_DFT ) + { + hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + hCPE->hStereoTD->tdm_last_ratio_idx_SM = LRTD_STEREO_MID_IS_PRIM; + hCPE->hStereoTD->tdm_last_SM_flag = 0; + hCPE->hStereoTD->tdm_last_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + + /* First frame after DFT frame AND the content is uncorrelated or xtalk -> the primary channel is forced to left */ + if ( hCPE->hStereoClassif->lrtd_mode == 1 ) + { + set_zero( sts[1]->input - input_frame, input_frame ); + + hCPE->hStereoTD->tdm_last_ratio = tdm_ratio_tabl[LRTD_STEREO_LEFT_IS_PRIM]; + hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; + + if ( hCPE->hStereoTCA->instTargetGain < 0.05f && ( hCPE->hCoreCoder[0]->vad_flag || hCPE->hCoreCoder[1]->vad_flag ) ) /* but if there is no content in the L channel -> the primary channel is forced to right */ + { + hCPE->hStereoTD->tdm_last_ratio = tdm_ratio_tabl[LRTD_STEREO_RIGHT_IS_PRIM]; + hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; + } + } + } + + /* no secondary channel in the previous frame -> memory resets */ + if ( hCPE->element_mode > IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_DFT ) + { + if ( sts[0]->cldfbAnaEnc != NULL ) + { + offset = sts[0]->cldfbAnaEnc->p_filter_length - sts[0]->cldfbAnaEnc->no_channels; + mvr2r( old_input_signal_pri + input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ), sts[0]->cldfbAnaEnc->cldfb_state, offset ); + } + + if ( sts[0]->cldfbSynTd != NULL ) + { + cldfb_reset_memory( sts[0]->cldfbSynTd ); + sts[0]->currEnergyLookAhead = 6.1e-5f; + } + + if ( hCPE->hStereoICBWE == NULL && sts[1]->cldfbAnaEnc != NULL ) + { + offset = sts[1]->cldfbAnaEnc->p_filter_length - sts[1]->cldfbAnaEnc->no_channels; + + if ( hCPE->hStereoTD != NULL && hCPE->hStereoTD->tdm_last_ratio_idx == LRTD_STEREO_LEFT_IS_PRIM ) + { + v_multc( hCPE->hCoreCoder[1]->old_input_signal + input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ), -1.0f, sts[1]->cldfbAnaEnc->cldfb_state, offset ); + } + else + { + mvr2r( hCPE->hCoreCoder[1]->old_input_signal + input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ), sts[1]->cldfbAnaEnc->cldfb_state, offset ); + } + + if ( sts[1]->cldfbSynTd != NULL ) + { + cldfb_reset_memory( sts[1]->cldfbSynTd ); + sts[1]->currEnergyLookAhead = 6.1e-5f; + } + } + + sts[1]->last_extl = -1; + + /* no secondary channel in the previous frame -> memory resets */ + set_zero( sts[1]->old_inp_12k8, L_INP_MEM ); + /*set_zero( sts[1]->old_inp_16k, L_INP_MEM );*/ + set_zero( sts[1]->mem_decim, 2 * L_FILT_MAX ); + /*set_zero( sts[1]->mem_decim16k, 2*L_FILT_MAX );*/ + sts[1]->mem_preemph = 0; + /*sts[1]->mem_preemph16k = 0;*/ + + set_zero( sts[1]->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + set_zero( sts[1]->buf_speech_enc_pe, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + + if ( sts[1]->hTcxEnc != NULL ) + { + set_zero( sts[1]->hTcxEnc->buf_speech_ltp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + } + set_zero( sts[1]->buf_wspeech_enc, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k ); + set_zero( sts[1]->buf_synth, OLD_SYNTH_SIZE_ENC + L_FRAME32k ); + sts[1]->mem_wsp = 0.0f; + sts[1]->mem_wsp_enc = 0.0f; + init_gp_clip( sts[1]->clip_var ); + + set_f( sts[1]->Bin_E, 0, L_FFT ); + set_f( sts[1]->Bin_E_old, 0, L_FFT / 2 ); + + /* sts[1]->hLPDmem reset already done in allocation of handles */ + + sts[1]->last_L_frame = sts[0]->last_L_frame; + + pitch_ol_init( &sts[1]->old_thres, &sts[1]->old_pitch, &sts[1]->delta_pit, &sts[1]->old_corr ); + set_zero( sts[1]->old_wsp, L_WSP_MEM ); + set_zero( sts[1]->old_wsp2, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); + set_zero( sts[1]->mem_decim2, 3 ); + mvs2s( sts[0]->pitch, sts[1]->pitch, 3 ); + + sts[1]->Nb_ACELP_frames = 0; + + /* populate PCh memories into the SCh */ + if ( sts[0]->hLPDmem != NULL ) + { + mvr2r( sts[0]->hLPDmem->old_exc, sts[1]->hLPDmem->old_exc, L_EXC_MEM ); + } + mvr2r( sts[0]->lsf_old, sts[1]->lsf_old, M ); + mvr2r( sts[0]->lsp_old, sts[1]->lsp_old, M ); + mvr2r( sts[0]->lsf_old1, sts[1]->lsf_old1, M ); + mvr2r( sts[0]->lsp_old1, sts[1]->lsp_old1, M ); + + sts[1]->GSC_noisy_speech = 0; + + if ( hCPE->element_mode == IVAS_CPE_MDCT ) + { + /* cross-fade overlap region of DFT Stereo downmix and original stereo channels */ + tmpF = 1.f / sts[0]->encoderLookahead_FB; + for ( i = 0; i < sts[0]->encoderLookahead_FB; i++ ) + { + sts[1]->input[-sts[0]->encoderLookahead_FB + i] = ( ( sts[0]->encoderLookahead_FB - i ) * sts[0]->input[-sts[0]->encoderLookahead_FB + i] + i * sts[1]->input[-sts[0]->encoderLookahead_FB + i] ) * tmpF; + sts[0]->input[-sts[0]->encoderLookahead_FB + i] = ( ( sts[0]->encoderLookahead_FB - i ) * sts[0]->input[-sts[0]->encoderLookahead_FB + i] + i * sts[1]->input[-2 * sts[0]->encoderLookahead_FB + i] ) * tmpF; + } + /* restore continous signal in right channel (part of old_output was used to store original left channel) */ + mvr2r( sts[0]->input - sts[0]->hTcxEnc->L_frameTCX, sts[1]->input - sts[0]->hTcxEnc->L_frameTCX, sts[0]->hTcxEnc->L_frameTCX - sts[0]->encoderLookahead_FB ); + + sts[1]->last_core = sts[0]->last_core; + sts[1]->last_coder_type = sts[0]->last_coder_type; + sts[1]->last_bwidth = sts[0]->last_bwidth; + sts[1]->hTcxCfg->last_aldo = sts[0]->hTcxCfg->last_aldo; + sts[1]->hTcxCfg->tcx_curr_overlap_mode = sts[0]->hTcxCfg->tcx_curr_overlap_mode; + } + } + else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_MDCT ) + { + set_f( sts[0]->hLPDmem->old_exc, 0.0f, L_EXC_MEM ); + set_f( sts[1]->hLPDmem->old_exc, 0.0f, L_EXC_MEM ); + } + + return; +} diff --git a/lib_enc/ivas_stereo_td_analysis.c b/lib_enc/ivas_stereo_td_analysis.c new file mode 100644 index 0000000000..cda6387f05 --- /dev/null +++ b/lib_enc/ivas_stereo_td_analysis.c @@ -0,0 +1,1454 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_cnst.h" +#include "rom_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define RMS_MIN 1500 /* Minimum energy for ratio index*/ +#define RMS_MIN2 1000 /* Minimum energy for LR encoding*/ +#define CORR_THRES 0.95f /* Maximal open loop correlation */ +#define DT_ENER_THR 200 /* Energy variation threshold */ + +#define ALP_REF 0.8f /* smoothing factor */ +#define BET_REF ( 1.0f - ALP_REF ) + +#define ALP1 0.5f /* smoothing factor in case of correlation are going in different directions */ +#define BET1 ( 1.0f - ALP1 ) /* increase the update rate */ + +#define ALP2 0.2f /* smoothing factor in case of correlation are going in different directions in SM mode*/ +#define BET2 ( 1.0f - ALP2 ) /* increase the update rate in SM mode*/ +#define RATIO_MAX 1.5f /* Maximum correlation ratio */ + +#define LIMIT_ADAP_FAC 0.15f +#define MIN_ADAP_FAC 0.1f +#define M_ADAP 0.0009f +#define B_ADAP 0.16f + +#define PC_LIMIT 64 +#define RATIO_PG_HR 0.94f +#define RATIO_PG 0.92f +#define PG2ND 3.0f +#define EUCLDST 0.04f +#define RATIO_PG2 0.86f +#define PG2ND2 3.0f +#define EUCLDST2 0.08f + +#define RMS_THR 100 +#define RATIO_PG_LRTD 0.96f + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static int16_t stereo_tdm_ener_analysis_SM( CPE_ENC_HANDLE hCPE, Encoder_State **sts, const int16_t input_frame, int16_t *tdm_SM_flag ); + +static void Get_corr_n( const float L[], const float R[], float *ic_Lm, float *ic_Rm, const int16_t len, float *es_em, const int16_t tdm_SM_calc_flag ); + +static int16_t stereo_smooth_LR_transition( int16_t *tdm_prev_stable_idx, int16_t *tdm_ratio_transition_mov_flag, int16_t tdm_last_ratio_idx, int16_t *tdm_prev_desired_idx, int16_t *tdm_ratio_transition_cnt, const int16_t tdm_SM_flag, int16_t desired_idx ); + +static int16_t limit_idx_Dwnmix( const int16_t idx_in, const int16_t unclr_decision, const int16_t inst_idx, const int16_t previous_idx, const int16_t tdm_last_LRTD_PriCh_cnt, const int16_t tdm_last_LRTD_frame_cnt ); + +static int16_t limit_idx_NoDwnmix( const int16_t idx_in, const int16_t side_can_change, const float d_lt_corr_raw ); + +static void Get_LR_rms( const float *Left_in, const float *Right_in, const int16_t input_frame, float *rms_L, float *rms_R ); + +static int16_t Get_dt_lt_ener( CPE_ENC_HANDLE hCPE, const int16_t IsSideMono, const int16_t input_frame, const int16_t tdm_last_SM_flag, const float rms_L, const float rms_R, float *tdm_lt_rms_L, float *tdm_lt_rms_R, float *tdm_last_ener_lt_L, float *tdm_last_ener_lt_R, float *tdm_LT_es_em, int16_t *tdm_hyst_cnt, int16_t *tdm_NOOP_SM_flag_loc, float *ener_R_dt, float *ener_L_dt, float *corr_LM, float *corr_RM ); + +static void NOOP_decision( CPE_ENC_HANDLE hCPE, const int16_t tdm_NOOP_flag_loc, const int16_t tmp_SM_flag, const float rms_L, const float rms_R, int16_t *tdm_SM_flag_loc ); + +static float Comp_diff_lt_corr( CPE_ENC_HANDLE hCPE, const int16_t IsSideMono, const float rms_L, const float rms_R, const float ener_L_dt, const float ener_R_dt, float corr_LM, float corr_RM, const float tdm_lt_rms_L, const float tdm_lt_rms_R, float *tdm_lt_corr_LM, float *tdm_lt_corr_RM, float *tdm_last_diff_lt_corr, float *inst_ratio_L_out, float *diff_lt_corr ); + +/*-------------------------------------------------------------------* + * Function stereo_tdm_ener_analysis() + * + *-------------------------------------------------------------------*/ + +int16_t stereo_tdm_ener_analysis( + CPE_ENC_HANDLE hCPE, /* i : CPE structure */ + const int16_t input_frame, /* i : Number of samples */ + int16_t *tdm_SM_or_LRTD_Pri, /* o : channel combination scheme flag in TD stereo OR LRTD primary channel */ + int16_t *tdm_ratio_idx_SM /* o : TDM ratio index for SM mode */ +) +{ + float rms_R, rms_L; + float corr_RM, corr_LM, diff_lt_corr = 0, ratio_L, dist; + int16_t i, side_can_change; + int16_t idx, tdm_SM_flag_loc; + int16_t tmp_SM_flag; + float ener_R_dt, ener_L_dt; + int16_t desired_idx; + float rms_thd; + int16_t tdm_NOOP_flag_loc, tdm_NOOP_flag; + STEREO_TD_ENC_DATA_HANDLE hStereoTD; + Encoder_State **sts; + const float *Left_in, *Right_in; + float d_lt_corr_raw; + float inst_ratio_L = 0; + int16_t tdm_LRTD_pri_side; + + hStereoTD = hCPE->hStereoTD; + sts = hCPE->hCoreCoder; + Left_in = sts[0]->input; /* Left channel */ + Right_in = sts[1]->input; /* Right channel */ + + desired_idx = 0; + + /*----------------------------------------------------------------* + * Compute L and R energy and Long term RMS of each channel + *----------------------------------------------------------------*/ + + Get_LR_rms( Left_in, Right_in, input_frame, &rms_L, &rms_R ); + + /*----------------------------------------------------------------* + * Compute the 1st order energy difference difference + * Compute the gain of L&R channel compared to mono + * - estimate the long term evolution of the L to Mono gain + * - estimate the long term evolution of the R to Mono gain + * - estimate the long term difference between the long term + * - evolution of the L and R to Mono gain + *----------------------------------------------------------------*/ + + tdm_SM_flag_loc = hStereoTD->tdm_last_SM_flag; + + tmp_SM_flag = Get_dt_lt_ener( hCPE, 0, input_frame, hStereoTD->tdm_last_SM_flag, rms_L, rms_R, &hStereoTD->tdm_lt_rms_L, &hStereoTD->tdm_lt_rms_R, &hStereoTD->tdm_last_ener_lt_L, &hStereoTD->tdm_last_ener_lt_R, + &hStereoTD->tdm_LT_es_em, &hStereoTD->tdm_hyst_cnt, &tdm_NOOP_flag_loc, &ener_R_dt, &ener_L_dt, &corr_LM, &corr_RM ); + + hStereoTD->tdm_SM_reset_flag = 0; + + /*----------------------------------------------------------------* + * Check if the signal has Near Out Of Phase characteristics + * and trigger side/mono configuration if needed + *----------------------------------------------------------------*/ + + NOOP_decision( hCPE, tdm_NOOP_flag_loc, tmp_SM_flag, rms_L, rms_R, &tdm_SM_flag_loc ); + + /*----------------------------------------------------------------* + * Adjust stereo downmixing adaptation rate factor + * in function of the signal energy. If signal energy is low, + * adaptation rate factor is lower. This prevent stereo image + * move on speech offset + *----------------------------------------------------------------*/ + + d_lt_corr_raw = Comp_diff_lt_corr( hCPE, 0, rms_L, rms_R, ener_L_dt, ener_R_dt, corr_LM, corr_RM, hStereoTD->tdm_lt_rms_L, hStereoTD->tdm_lt_rms_R, &hStereoTD->tdm_lt_corr_LM, + &hStereoTD->tdm_lt_corr_RM, &hStereoTD->tdm_last_diff_lt_corr, &inst_ratio_L, &diff_lt_corr ); + + /*----------------------------------------------------------------* + * UNCLR classifier (detection of uncorrelated L and R channels) + * Xtalk classifier (detection of cross-talk L and R channels) + *----------------------------------------------------------------*/ + + unclr_classifier_td( hCPE ); + xtalk_classifier_td( hCPE ); + + /* switch to LRTD on cross-talk segments where two speakers are weakly correlated */ + hStereoTD->prev_fr_LRTD_TD_dec = hCPE->hStereoClassif->lrtd_mode; + + /*----------------------------------------------------------------* + * When the energies of channels are low enough, compute the ratio + * of L and R needed to create new mono/side signals + *----------------------------------------------------------------*/ + + rms_thd = RMS_MIN; + if ( hCPE->hStereoClassif->lrtd_mode == 1 ) + { + rms_thd *= .25f; + if ( hStereoTD->tdm_lt_rms_L <= 75 || hStereoTD->tdm_lt_rms_R <= 75 /*|| sts[0]->last_coder_type == TRANSITION */ ) + { + rms_thd *= .03125f; + } + else if ( sts[0]->hVAD->hangover_cnt >= 8 && sts[1]->hVAD->hangover_cnt >= 8 ) + { + rms_thd /= .2f; + } + + /* Overwrite the LR decision flag in case the signals is already considered as S/M or when the signal is very similar between left and right channel */ + if ( tdm_SM_flag_loc == 1 ) + { + hStereoTD->prev_fr_LRTD_TD_dec = 0; + } + else if ( hStereoTD->tdm_LRTD_flag == 1 && hStereoTD->tdm_FD2LRTD_SW_cnt > 10 && + ( hCPE->hStereoClassif->vad_flag_glob == 0 || ( hCPE->hStereoClassif->unclr_decision == 0 && ( hCPE->hStereoClassif->xtalk_score < -0.8f || hCPE->hStereoClassif->xtalk_wscore < -0.13f ) ) || + ( hCPE->hStereoClassif->unclr_decision == 1 && sts[0]->last_clas == UNVOICED_CLAS && sts[1]->last_clas == UNVOICED_CLAS && fabsf( hCPE->hStereoClassif->unclr_wscore ) < 0.005f ) ) ) + { + /* This forces the LRTD to switch to TD when inactive content happens on both channel */ + hStereoTD->prev_fr_LRTD_TD_dec = 0; + } + else if ( hStereoTD->tdm_LRTD_flag == 0 && + ( hCPE->hStereoClassif->vad_flag_glob == 0 || ( hCPE->hStereoClassif->unclr_decision == 0 && ( hCPE->hStereoClassif->xtalk_score <= 0.0f || hCPE->hStereoClassif->xtalk_wscore <= 0.1f ) ) || + ( hCPE->hStereoClassif->unclr_decision == 1 && ( sts[0]->last_clas == UNVOICED_CLAS && sts[1]->last_clas == UNVOICED_CLAS ) && fabsf( hCPE->hStereoClassif->unclr_wscore ) < 0.025f ) + /* (sts[0]->last_clas == UNVOICED_CLAS && sts[1]->last_clas == UNVOICED_CLAS && hCPE->hStereoClassif->xtalk_wscore <= 0.0f)*/ ) ) + { + /* This forces the LRTD to switch to TD when inactive content happens on both channel */ + hStereoTD->prev_fr_LRTD_TD_dec = 0; + } + } + + side_can_change = 0; + + /* update LRTD->DFT stereo hangover counters */ + if ( hStereoTD->prev_fr_LRTD_TD_dec == 1 ) + { + hStereoTD->tdm_last_LRTD_frame_cnt = 0; + } + else + { + hStereoTD->tdm_last_LRTD_frame_cnt++; + hStereoTD->tdm_last_LRTD_frame_cnt = min( hStereoTD->tdm_last_LRTD_frame_cnt, 100 ); + } + + if ( hCPE->last_element_mode != IVAS_CPE_TD ) + { + side_can_change = 1; + } + + if ( hStereoTD->prev_fr_LRTD_TD_dec == 1 && side_can_change == 0 ) + { + if ( ( hStereoTD->tdm_lt_rms_L <= rms_thd && hStereoTD->tdm_lt_rms_R <= 2 * rms_thd ) || + ( hStereoTD->tdm_lt_rms_R <= rms_thd && hStereoTD->tdm_lt_rms_L <= 2 * rms_thd ) || + ( sts[0]->hVAD->hangover_cnt != 0 && sts[1]->hNoiseEst->Etot_last < 12 ) || + ( sts[1]->hVAD->hangover_cnt != 0 && sts[0]->hNoiseEst->Etot_last < 12 ) || + ( sts[0]->hSpMusClas->past_dec[0] != sts[1]->hSpMusClas->past_dec[0] ) ) + { + if ( ( ( rms_L < RMS_THR && rms_R < RMS_THR && fabsf( rms_R - rms_L ) < RMS_THR / 2.0f && fabsf( d_lt_corr_raw ) > 0.3f ) || + ( fabsf( sts[0]->old_corr - sts[1]->old_corr ) < 0.15f && sts[0]->old_corr > 0.7f && sts[0]->old_corr < 0.85f && fabsf( rms_L - rms_R ) < rms_thd && fabsf( d_lt_corr_raw ) > 0.3f ) ) /* Both channels are low energy, clean background switching is allowed */ + ) + { + side_can_change = 1; + } + } + } + else if ( side_can_change == 0 ) /*if( hStereoTD->prev_fr_LRTD_TD_dec == 0 )*/ + { + if ( ( ( sts[0]->old_corr < CORR_THRES && sts[1]->old_corr < CORR_THRES ) || ( hStereoTD->tdm_lt_rms_L <= RMS_MIN2 && hStereoTD->tdm_lt_rms_R <= RMS_MIN2 ) ) && + ( ( ( hStereoTD->tdm_lt_rms_L <= rms_thd && hStereoTD->tdm_lt_rms_R <= 2 * rms_thd ) || ( hStereoTD->tdm_lt_rms_R <= rms_thd && hStereoTD->tdm_lt_rms_L <= 2 * rms_thd ) ) || + ( hCPE->hStereoClassif->lrtd_mode == 1 && ( sts[0]->tdm_LRTD_flag == 0 || ( sts[0]->tdm_LRTD_flag == 1 && ( ( rms_L < 2 * rms_thd && rms_R < 2 * rms_thd ) || ( sts[0]->hSpMusClas->past_dec[0] != sts[1]->hSpMusClas->past_dec[0] ) ) ) ) ) /* Even if the UNCLR is set to 1, the content should be encoded with TD, lower swichting requierment */ + ) ) + { + side_can_change = 1; + } + } + + if ( hCPE->hStereoClassif->xtalk_wscore >= 0.05f && hStereoTD->prev_fr_LRTD_TD_dec == 0 && hCPE->hStereoClassif->lrtd_mode == 1 ) + { + side_can_change = 0; + } + if ( hCPE->last_element_mode == IVAS_CPE_MDCT || hStereoTD->flag_skip_DMX == 1 ) + { + desired_idx = LRTD_STEREO_LEFT_IS_PRIM; + hStereoTD->tdm_prev_desired_idx = LRTD_STEREO_LEFT_IS_PRIM; + ratio_L = 1.0f; + hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_LEFT_IS_PRIM; + hStereoTD->tdm_ratio_transition_mov_flag = 0; + hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; + hStereoTD->tdm_ratio_transition_cnt = 0; + idx = TDM_NQ; /* Reserved quantizer index for special case */ + } + else if ( side_can_change || sts[1]->ini_frame <= 1 ) + { + ratio_L = max( diff_lt_corr, -RATIO_MAX ); + ratio_L = min( ratio_L, RATIO_MAX ); + ratio_L = 0.667f * ratio_L + 1.0f; + + if ( hCPE->hStereoClassif->lrtd_mode == 1 && ( hCPE->last_element_mode != IVAS_CPE_TD || hStereoTD->tdm_FD2LRTD_SW_cnt < 4 ) ) + { + ratio_L = hCPE->hStereoTD->tdm_last_ratio; /* note: the last_ratio is set in before in stereo_set_tdm() */ + } + else + { + ratio_L = ( 1.0f - cosf( EVS_PI * ratio_L / 2.0f ) ) / 2.0f; + } + + if ( hStereoTD->tdm_LRTD_flag == 1 || ( hCPE->hStereoClassif->lrtd_mode == 1 && ( hCPE->hStereoClassif->prev_lrtd_mode == 0 || abs( hCPE->hStereoTCA->indx_ica_gD - 20 ) > 2 ) ) ) + { + if ( ratio_L >= 0.53f ) /* small hysteresis is used to prevent undesired switching during inactive segment */ + { + desired_idx = LRTD_STEREO_LEFT_IS_PRIM - 1; + } + else if ( ratio_L < 0.47f ) + { + desired_idx = LRTD_STEREO_RIGHT_IS_PRIM + 1; + } + else if ( rms_L - rms_R > 10 ) + { + desired_idx = LRTD_STEREO_LEFT_IS_PRIM - 1; + } + else + { + desired_idx = LRTD_STEREO_RIGHT_IS_PRIM + 1; + } + + if ( desired_idx != hStereoTD->tdm_prev_desired_idx && hStereoTD->tdm_last_LRTD_frame_cnt == 1 && sts[0]->last_coder_type <= UNVOICED ) /* TD transtionning to FD, we don't want an inversion of channels on the first transition frame */ + { + desired_idx = hStereoTD->tdm_prev_desired_idx; + } + else + { + hStereoTD->tdm_prev_desired_idx = desired_idx; + } + idx = desired_idx; + } + else + { + if ( hCPE->element_brate >= IVAS_48k && sts[0]->hVAD->hangover_cnt != 0 && max( hStereoTD->tdm_lt_rms_L, hStereoTD->tdm_lt_rms_R ) < 512.0f ) + { + check_bounds( &ratio_L, 0.3f, 0.7f ); + } + + if ( ( hCPE->hStereoTCA->instTargetGain > 1.2f || hCPE->hStereoTCA->targetGain > 1.0f ) && ratio_L < 0.4f ) + { + ratio_L = 0.4f; + } + else if ( ( hCPE->hStereoTCA->instTargetGain < 0.8f || hCPE->hStereoTCA->targetGain < 1.0f ) && ratio_L > 0.6f ) + { + ratio_L = 0.6f; + } + +#ifdef FORCE_RATIO_L_0 + ratio_L = 0; +#endif + dist = fabsf( ratio_L - tdm_ratio_tabl[0] ); + + desired_idx = 0; + for ( i = 1; i < TDM_NQ; i++ ) + { + if ( fabsf( ratio_L - tdm_ratio_tabl[i] ) <= dist ) + { + dist = fabsf( ratio_L - tdm_ratio_tabl[i] ); + desired_idx = i; + } + } + + idx = stereo_smooth_LR_transition( &hStereoTD->tdm_prev_stable_idx, &hStereoTD->tdm_ratio_transition_mov_flag, hStereoTD->tdm_last_ratio_idx, &hStereoTD->tdm_prev_desired_idx, &hStereoTD->tdm_ratio_transition_cnt, tdm_SM_flag_loc, desired_idx ); + + /* Change the switching level in case of dual mono (in case the scenario still accept left right switching */ + /* This logic is needed in case the content is exactly the same in the 2 channel and it is expected to get back to LRTD, to prevent the secondary channel to be completely empty */ + if ( hCPE->hStereoClassif->lrtd_mode == 1 ) + { + if ( idx <= LRTD_STEREO_MID_IS_PRIM ) + { + idx = min( idx, LRTD_STEREO_MID_IS_PRIM - 1 ); + } + else + { + idx = max( idx, LRTD_STEREO_MID_IS_PRIM + 1 ); + } + + hStereoTD->tdm_prev_desired_idx = idx; + } + /* 0 and 30 are reserved to signal L-R only coding */ + } + } + else + { + idx = hStereoTD->tdm_last_ratio_idx; + } + + hStereoTD->tdm_inst_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; + tdm_LRTD_pri_side = -1; + if ( hStereoTD->tdm_FD2LRTD_SW_cnt < 5 ) + { + desired_idx = 15; + } + else + { + desired_idx = 0; + dist = fabsf( inst_ratio_L - tdm_ratio_tabl[0] ); + + for ( i = 1; i < TDM_NQ; i++ ) + { + if ( fabsf( inst_ratio_L - tdm_ratio_tabl[i] ) <= dist ) + { + dist = fabsf( inst_ratio_L - tdm_ratio_tabl[i] ); + desired_idx = i; + } + } + } + + if ( ( sts[1]->lp_speech - sts[1]->lp_noise ) < 50.0f ) /* likely presence of noisy content */ + { + /* pointing in the right direction, inverse it else do nothing */ + if ( ( idx > LRTD_STEREO_MID_IS_PRIM && desired_idx > LRTD_STEREO_MID_IS_PRIM ) || ( idx < LRTD_STEREO_MID_IS_PRIM && desired_idx < LRTD_STEREO_MID_IS_PRIM ) ) + { + int16_t idx_offet; + idx_offet = 5; + if ( desired_idx > LRTD_STEREO_MID_IS_PRIM ) /* slightly Favor the 2nd channel */ + { + idx_offet *= -1; + } + desired_idx += idx_offet; + check_bounds_s( &desired_idx, 0, 30 ); + } + } + + if ( sts[1]->clas != UNVOICED_CLAS || sts[0]->clas != UNVOICED_CLAS ) + { + desired_idx = min( desired_idx, 25 ); + desired_idx = max( desired_idx, 5 ); + } + + hStereoTD->tdm_inst_ratio_idx = desired_idx; + if ( /*hCPE->last_element_mode == IVAS_CPE_MDCT ||*/ hStereoTD->flag_skip_DMX == 1 ) + { + /*force tdm_inst_ratio_idx to the reserved index */ + hStereoTD->tdm_inst_ratio_idx = idx; + tdm_LRTD_pri_side = 1; /* left channel */ + } + else if ( hStereoTD->tdm_LRTD_flag == 1 ) + { + idx = limit_idx_NoDwnmix( idx, side_can_change, d_lt_corr_raw ); + hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_LEFT_IS_PRIM; + tdm_LRTD_pri_side = 0; /* right channel */ + if ( idx != LRTD_STEREO_RIGHT_IS_PRIM ) + { + tdm_LRTD_pri_side = 1; /* left channel */ + hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_RIGHT_IS_PRIM; + } + } + else + { + idx = limit_idx_Dwnmix( idx, ( hCPE->hStereoClassif->unclr_decision || ( sts[0]->flag_noisy_speech_snr == 1 && hCPE->hStereoClassif->xtalk_wscore > 0.1f ) ), desired_idx, hStereoTD->tdm_last_ratio_idx, hStereoTD->tdm_last_LRTD_PriCh_cnt, hStereoTD->tdm_last_LRTD_frame_cnt ); + } + + if ( abs( hStereoTD->tdm_last_ratio_idx - idx ) > LRTD_STEREO_MID_IS_PRIM ) + { + hStereoTD->tdm_last_LRTD_PriCh_cnt = 0; + } + else + { + hStereoTD->tdm_last_LRTD_PriCh_cnt++; + } + ratio_L = tdm_ratio_tabl[idx]; + + if ( hStereoTD->tdm_SM_modi_flag == 1 && hStereoTD->tdm_LRTD_flag == 0 ) + { + idx = (int16_t) ( ( hStereoTD->tdm_last_ratio_idx + ( LRTD_STEREO_MID_IS_PRIM + 1 ) ) * 0.5 ); + ratio_L = tdm_ratio_tabl[idx]; + } + + if ( ( hStereoTD->tdm_ratio_transition_mov_flag == 1 && hStereoTD->tdm_ratio_transition_cnt >= 31 ) || ( ( hStereoTD->tdm_last_SM_flag == tdm_SM_flag_loc ) && ( idx == hStereoTD->tdm_prev_stable_idx ) ) ) + { + hStereoTD->tdm_ratio_transition_cnt = 0; + hStereoTD->tdm_ratio_transition_mov_flag = 0; + } + + if ( hStereoTD->tdm_ratio_transition_mov_flag == 0 || tdm_SM_flag_loc == 0 ) + { + hStereoTD->tdm_prev_stable_idx = idx; + } + + /* NOOP ratio calculation */ + if ( tdm_SM_flag_loc ) + { + if ( hStereoTD->tdm_SM_reset_flag ) + { + hStereoTD->tdm_lt_corr_RM_SM = 0.01f; + hStereoTD->tdm_lt_corr_LM_SM = 0.01f; + hStereoTD->tdm_last_ratio_SM = hStereoTD->tdm_last_ratio; + hStereoTD->tdm_last_ratio_idx_SM = hStereoTD->tdm_last_ratio_idx; + hStereoTD->tdm_lt_rms_L_SM = 40.0f; + hStereoTD->tdm_lt_rms_R_SM = 40.0f; + hStereoTD->tdm_last_diff_lt_corr_SM = 0; + hStereoTD->tdm_last_ener_lt_R_SM = 0; + hStereoTD->tdm_last_ener_lt_L_SM = 0; + + hStereoTD->tdm_noop_mov_flag = 0; + hStereoTD->tdm_noop_cnt = 0; + hStereoTD->tdm_last_SM_flag_noop = 0; + hStereoTD->tdm_prev_stable_idx_SM = 0; + hStereoTD->tdm_prev_desired_idx_SM = 0; + hStereoTD->tdm_LT_es_em_SM = 0.1f; + hStereoTD->tdm_hyst_cnt_SM = 0; + } + + *tdm_ratio_idx_SM = stereo_tdm_ener_analysis_SM( hCPE, sts, input_frame, &tdm_NOOP_flag ); + } + else + { + *tdm_ratio_idx_SM = LRTD_STEREO_MID_IS_PRIM; + tdm_NOOP_flag = 1; + } + + sts[0]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; + sts[1]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; + + /* set channel combination scheme flag */ + *tdm_SM_or_LRTD_Pri = tdm_SM_flag_loc; + if ( hCPE->hStereoTD->tdm_LRTD_flag == 1 ) + { + *tdm_SM_or_LRTD_Pri = tdm_LRTD_pri_side; + } + + hCPE->hStereoClassif->ratio_L = ratio_L; + +#ifdef DEBUG_MODE_TD + dbgwrite( &ratio_L, 4, 1, 320, "res/ratio_L" ); + dbgwrite( &hStereoTD->prev_fr_LRTD_TD_dec, 2, 1, 320, "res/prev_fr_LRTD_TD_dec" ); + dbgwrite( &hStereoTD->tdm_inst_ratio_idx, 2, 1, 320, "res/inst_ratio_L" ); +#endif + + return ( idx ); +} + +/*-------------------------------------------------------------------* + * Function Get_LR_rms() + * + * Get current frame left and right rms values + *-------------------------------------------------------------------*/ + +static void Get_LR_rms( + const float *Left_in, + const float *Right_in, + const int16_t input_frame, + float *rms_L, + float *rms_R ) +{ + float ener_l, ener_r; + int16_t i; + + ener_l = 0.01f; + ener_r = 0.01f; + + for ( i = 0; i < input_frame; i++ ) + { + ener_l += Left_in[i] * Left_in[i]; + ener_r += Right_in[i] * Right_in[i]; + } + *rms_L = sqrtf( ener_l / input_frame ); + *rms_R = sqrtf( ener_r / input_frame ); + + return; +} + + +/*-------------------------------------------------------------------* + * Function Get_dt_lt_ener() + * + * Compute the gain of L&R channel compared to mono + * - estimate the long term evolution of the L to Mono gain + * - estimate the long term evolution of the R to Mono gain + * - estimate the long term difference between the long term + * - evolution of the L and R to Mono gain + *-------------------------------------------------------------------*/ + +static int16_t Get_dt_lt_ener( + CPE_ENC_HANDLE hCPE, + const int16_t IsSideMono, + const int16_t input_frame, + const int16_t tdm_last_SM_flag, + const float rms_L, + const float rms_R, + float *tdm_lt_rms_L, + float *tdm_lt_rms_R, + float *tdm_last_ener_lt_L, + float *tdm_last_ener_lt_R, + float *tdm_LT_es_em, + int16_t *tdm_hyst_cnt, + int16_t *tdm_NOOP_SM_flag_loc, + float *ener_R_dt, + float *ener_L_dt, + float *corr_LM, + float *corr_RM ) +{ + Encoder_State **sts; + const float *Left_in, *Right_in; + float es_em; + int16_t tmp_SM_flag, tdm_SM_flag_loc; + + sts = hCPE->hCoreCoder; + Left_in = sts[0]->input; /* Left channel */ + Right_in = sts[1]->input; /* Right channel */ + + tdm_SM_flag_loc = tdm_last_SM_flag; + + if ( hCPE->last_element_mode != IVAS_CPE_TD && IsSideMono == 0 ) /* last coding mode not TD and normal mono/side case, quick update of lt energy */ + { + *tdm_lt_rms_L = .9f * rms_L; + *tdm_lt_rms_R = .9f * rms_R; + sts[1]->hNoiseEst->Etot_last = 0.9f * ( sts[0]->hNoiseEst->Etot_last ); + sts[1]->hVAD->hangover_cnt = 0; + } + else + { + *tdm_lt_rms_L = 0.6f * *tdm_lt_rms_L + 0.4f * rms_L; + *tdm_lt_rms_R = 0.6f * *tdm_lt_rms_R + 0.4f * rms_R; + } + + /*----------------------------------------------------------------* + * Compute the 1st order energy difference difference + *----------------------------------------------------------------*/ + + *ener_R_dt = *tdm_lt_rms_R - *tdm_last_ener_lt_R; + *tdm_last_ener_lt_R = *tdm_lt_rms_R; + + *ener_L_dt = *tdm_lt_rms_L - *tdm_last_ener_lt_L; + *tdm_last_ener_lt_L = *tdm_lt_rms_L; + + /*----------------------------------------------------------------* + * Compute the gain of L&R channel compared to mono + * - estimate the long term evolution of the L to Mono gain + * - estimate the long term evolution of the R to Mono gain + * - estimate the long term difference between the long term + * - evolution of the L and R to Mono gain + *----------------------------------------------------------------*/ + + Get_corr_n( Left_in, Right_in, corr_LM, corr_RM, input_frame, &es_em, IsSideMono ); + + hCPE->hStereoClassif->xtalk_fv[E_diff_corrLM_corrRM] = *corr_LM - *corr_RM; + + if ( sts[0]->hVAD->hangover_cnt != 0 ) + { + *tdm_LT_es_em = 0.9f * *tdm_LT_es_em; + } + else + { + *tdm_LT_es_em = 0.9f * *tdm_LT_es_em + 0.1f * es_em; + } + + hCPE->hStereoClassif->xtalk_fv[E_tdm_LT_es_em] = *tdm_LT_es_em; + + tmp_SM_flag = 0; + if ( min( sts[0]->old_corr, sts[1]->old_corr ) < 0.85f && max( sts[0]->old_corr, sts[1]->old_corr < 0.92f ) && + ( *tdm_LT_es_em > 2.0f || es_em > 2.5f ) && ( sts[0]->hVAD->hangover_cnt <= 1 && sts[1]->hVAD->hangover_cnt <= 3 && sts[0]->tdm_LRTD_flag == 0 ) ) + { + tmp_SM_flag = 1; + } + if ( IsSideMono == 0 ) + { + *tdm_NOOP_SM_flag_loc = tdm_SM_flag_loc; + } + + if ( tmp_SM_flag != tdm_SM_flag_loc ) + { + if ( ( *tdm_hyst_cnt )++ >= 2 && tmp_SM_flag == 1 && ( sts[0]->tdm_pc > PC_LIMIT || sts[1]->tdm_pc > PC_LIMIT ) ) + { + *tdm_NOOP_SM_flag_loc = tmp_SM_flag; + *tdm_hyst_cnt = 0; + } + else if ( ( *tdm_hyst_cnt )++ >= 20 && tmp_SM_flag == 0 && + ( sts[0]->tdm_pc > PC_LIMIT || sts[1]->tdm_pc > PC_LIMIT ) && ( *tdm_LT_es_em <= 0.5f || es_em < -10.0f ) ) + { + *tdm_NOOP_SM_flag_loc = tmp_SM_flag; + *tdm_hyst_cnt = 0; + } + } + else + { + *tdm_hyst_cnt = 0; + } + + return tmp_SM_flag; +} + + +/*-------------------------------------------------------------------* + * Function NOOP_decision() + * + * Set Near Out Of Phase decision + *-------------------------------------------------------------------*/ + +static void NOOP_decision( + CPE_ENC_HANDLE hCPE, + const int16_t tdm_NOOP_flag_loc, + const int16_t tmp_SM_flag, + const float rms_L, + const float rms_R, + int16_t *tdm_SM_flag_loc ) +{ + int16_t tdm_NOOP_switch_flag; + STEREO_TD_ENC_DATA_HANDLE hStereoTD; + Encoder_State **sts; + + hStereoTD = hCPE->hStereoTD; + sts = hCPE->hCoreCoder; + + tdm_NOOP_switch_flag = 0; + hStereoTD->tdm_NOOP_cnt++; + if ( hCPE->hCoreCoder[0]->sp_aud_decision0 == 0 ) + { + if ( ( ( hStereoTD->tdm_SM_last2_clas[0] > VOICED_TRANSITION && ( hStereoTD->tdm_SM_last_clas[0] == UNVOICED_CLAS || hStereoTD->tdm_SM_last_clas[0] == VOICED_TRANSITION ) ) || + ( hStereoTD->tdm_SM_last2_clas[1] > VOICED_TRANSITION && ( hStereoTD->tdm_SM_last_clas[1] == UNVOICED_CLAS || hStereoTD->tdm_SM_last_clas[1] == VOICED_TRANSITION ) ) ) && + ( !( sts[0]->last_coder_type_raw == VOICED || sts[1]->last_coder_type_raw == VOICED ) && hStereoTD->tdm_NOOP_cnt > 5 ) ) + { + tdm_NOOP_switch_flag = 1; + hStereoTD->tdm_NOOP_cnt = 0; + } + else if ( ( hStereoTD->tdm_SM_last_clas[0] == UNVOICED_CLAS || hStereoTD->tdm_SM_last_clas[1] == UNVOICED_CLAS ) && + ( !( sts[0]->last_coder_type_raw == VOICED || sts[1]->last_coder_type_raw == VOICED ) ) && ( rms_L < 400.0f && rms_R < 400.0f ) && ( hStereoTD->tdm_NOOP_cnt > 5 ) ) + { + tdm_NOOP_switch_flag = 1; + hStereoTD->tdm_NOOP_cnt = 0; + } + } + else + { + if ( sts[0]->ee_old < 5000.f && sts[1]->ee_old < 5000.f ) + { + tdm_NOOP_switch_flag = 1; + } + } + + if ( *tdm_SM_flag_loc != tdm_NOOP_flag_loc ) + { + hStereoTD->tdm_SM_flag = 1; + if ( hCPE->hCoreCoder[0]->sp_aud_decision0 == 0 ) + { + if ( tdm_NOOP_switch_flag == 1 ) + { + *tdm_SM_flag_loc = tdm_NOOP_flag_loc; + if ( *tdm_SM_flag_loc ) + { + hStereoTD->tdm_SM_reset_flag = 1; + } + hStereoTD->tdm_SM_flag = 0; + } + } + else + { + if ( tdm_NOOP_switch_flag == 1 ) + { + *tdm_SM_flag_loc = tdm_NOOP_flag_loc; + if ( *tdm_SM_flag_loc ) + { + hStereoTD->tdm_SM_reset_flag = 1; + } + hStereoTD->tdm_SM_flag = 0; + } + } + + if ( tdm_NOOP_flag_loc == 1 ) + { + hStereoTD->tdm_hyst_cnt = 2; + } + else + { + hStereoTD->tdm_hyst_cnt = 20; + } + } + + if ( hStereoTD->tdm_SM_flag > 0 && tdm_NOOP_switch_flag == 1 && *tdm_SM_flag_loc != tmp_SM_flag ) + { + *tdm_SM_flag_loc = !( *tdm_SM_flag_loc ); + hStereoTD->tdm_SM_flag = 0; + if ( *tdm_SM_flag_loc ) + { + hStereoTD->tdm_SM_reset_flag = 1; + } + } + + if ( hStereoTD->tdm_SM_modi_flag == 1 ) + { + *tdm_SM_flag_loc = 1; + hStereoTD->tdm_SM_modi_flag = 0; + hStereoTD->tdm_SM_reset_flag = 1; + } + else + { + if ( *tdm_SM_flag_loc == 1 && hStereoTD->tdm_SM_reset_flag == 1 && hStereoTD->tdm_last_ratio < 0.5 ) + { + hStereoTD->tdm_SM_reset_flag = 0; + *tdm_SM_flag_loc = 0; + hStereoTD->tdm_SM_modi_flag = 1; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function Comp_diff_lt_corr() + * + * Adjust stereo downmixing adaptation rate factor + * in function of the signal energy. + *-------------------------------------------------------------------*/ + +static float Comp_diff_lt_corr( + CPE_ENC_HANDLE hCPE, + const int16_t IsSideMono, + const float rms_L, + const float rms_R, + const float ener_L_dt, + const float ener_R_dt, + float corr_LM, + float corr_RM, + const float tdm_lt_rms_L, + const float tdm_lt_rms_R, + float *tdm_lt_corr_LM, + float *tdm_lt_corr_RM, + float *tdm_last_diff_lt_corr, + float *inst_ratio_L_out, + float *diff_lt_corr ) +{ + float adaprate, adaprate_tmp, madaprate, d_lt_corr_raw, diff_lt_corr_tmp; + float d_lt_corr, inst_ratio_L, diff_lt_corr_LM_tmp, diff_lt_corr_RM_tmp; + Encoder_State **sts; + + sts = hCPE->hCoreCoder; + + /*----------------------------------------------------------------* + * Adjust stereo downmixing adaptation rate factor + * in function of the signal energy. If signal energy is low, + * adaptation rate factor is lower. This prevent stereo image + * move on speech offset + *----------------------------------------------------------------*/ + + if ( IsSideMono == 0 && hCPE->hStereoClassif->lrtd_mode == 1 && ( ( tdm_lt_rms_R > 2.0f * tdm_lt_rms_L ) || ( tdm_lt_rms_L > 2.0f * tdm_lt_rms_R ) ) ) + { + adaprate = M_ADAP * max( tdm_lt_rms_R, tdm_lt_rms_L ) + B_ADAP; + } + else + { + adaprate = M_ADAP * min( tdm_lt_rms_R, tdm_lt_rms_L ) + B_ADAP; + } + + check_bounds( &adaprate, MIN_ADAP_FAC, 1.0f ); + + /*----------------------------------------------------------------* + * In case of unvoiced content (expect when it is part of an onset), + * the adaptation rate is minimal. + *----------------------------------------------------------------*/ + + if ( sts[0]->ini_frame > 2 && + ( ( sts[0]->last_clas <= VOICED_TRANSITION && sts[0]->hVAD->hangover_cnt == 0 ) || + ( sts[1]->last_clas <= VOICED_TRANSITION && sts[1]->hVAD->hangover_cnt == 0 ) ) ) + { + adaprate = min( adaprate, LIMIT_ADAP_FAC ); + } + + d_lt_corr_raw = 0.0f; + if ( IsSideMono == 0 ) + { + if ( hCPE->last_element_mode != IVAS_CPE_TD || ( ( tdm_lt_rms_R < 1.0f || tdm_lt_rms_L < 1.0f ) && hCPE->hStereoClassif->lrtd_mode == 1 && max( tdm_lt_rms_R, tdm_lt_rms_L ) < 10.0f ) ) + { + adaprate = 0.98f; /* speed up the adaptation of the long term values to the current values after coming from DFT */ + } + adaprate_tmp = max( adaprate, 0.8f ); + madaprate = 1.0f - adaprate_tmp; /* madaprate has temporary value, will updated few lines below */ + + d_lt_corr_raw = ( adaprate_tmp * corr_LM + madaprate * *tdm_lt_corr_LM ) - + ( adaprate_tmp * corr_RM + madaprate * *tdm_lt_corr_RM ); /* Short term smooth correlation differences to mono */ + inst_ratio_L = 0.0f; + /*inst_ratio_L = max(diff_lt_corr,-RATIO_MAX);*/ + inst_ratio_L = max( d_lt_corr_raw, -RATIO_MAX ); + inst_ratio_L = min( inst_ratio_L, RATIO_MAX ); + inst_ratio_L = 0.667f * inst_ratio_L + 1.0f; + *inst_ratio_L_out = ( 1.0f - cosf( EVS_PI * inst_ratio_L / 2.0f ) ) / 2.0f; + } + madaprate = 1.0f - adaprate; + corr_RM = adaprate * corr_RM + madaprate * *tdm_lt_corr_RM; + corr_LM = adaprate * corr_LM + madaprate * *tdm_lt_corr_LM; + diff_lt_corr_LM_tmp = ( ALP_REF * *tdm_lt_corr_LM + BET_REF * corr_LM ); + diff_lt_corr_RM_tmp = ( ALP_REF * *tdm_lt_corr_RM + BET_REF * corr_RM ); + diff_lt_corr_tmp = diff_lt_corr_LM_tmp - diff_lt_corr_RM_tmp; + + d_lt_corr = diff_lt_corr_tmp - *tdm_last_diff_lt_corr; + *tdm_last_diff_lt_corr = diff_lt_corr_tmp; + + /*----------------------------------------------------------------* + * Correct the estimation depending of channels energies evolution + *----------------------------------------------------------------*/ + + if ( IsSideMono == 1 && ( ( rms_L < RMS_MIN2 && rms_R < RMS_MIN2 ) && ( ( tdm_lt_rms_L < 0.8f * rms_L ) && ( tdm_lt_rms_R < 0.8f * rms_R ) ) && + ( ( tdm_lt_rms_L > 2.0f * tdm_lt_rms_R ) || ( tdm_lt_rms_L < 0.5f * tdm_lt_rms_R ) ) ) ) + { + *tdm_lt_corr_LM = ALP2 * *tdm_lt_corr_LM + BET2 * corr_LM; + *tdm_lt_corr_RM = ALP2 * *tdm_lt_corr_RM + BET2 * corr_RM; + + *tdm_lt_corr_LM *= 2.5f; + *tdm_lt_corr_RM *= 2.5f; + } + else if ( ( !( ( ener_R_dt > DT_ENER_THR && ener_L_dt < DT_ENER_THR ) || ( ener_R_dt < DT_ENER_THR && ener_L_dt > DT_ENER_THR ) ) /* Energy are going in the same direction */ + && ( fabsf( d_lt_corr ) < 0.31f /* small difference regarding the difference gain evolution */ + || tdm_lt_rms_L > 2 * RMS_MIN2 || tdm_lt_rms_R > 2 * RMS_MIN2 ) ) /* Energy of at least one of the channel is not low */ + ) + { + /* Use estimated results */ + *tdm_lt_corr_LM = diff_lt_corr_LM_tmp; + *tdm_lt_corr_RM = diff_lt_corr_RM_tmp; + } + else + { + *tdm_lt_corr_LM = ALP1 * *tdm_lt_corr_LM + BET1 * corr_LM; + *tdm_lt_corr_RM = ALP1 * *tdm_lt_corr_RM + BET1 * corr_RM; + } + + *diff_lt_corr = *tdm_lt_corr_LM - *tdm_lt_corr_RM; /* update the difference */ + + return d_lt_corr_raw; +} + + +/*-------------------------------------------------------------------* + * Function limit_idx_Dnwmix() + * + * + *-------------------------------------------------------------------*/ + +static int16_t limit_idx_Dwnmix( + const int16_t idx_in, + const int16_t unclr_decision, + const int16_t inst_idx, + const int16_t previous_idx, + const int16_t tdm_last_LRTD_PriCh_cnt, + const int16_t tdm_last_LRTD_frame_cnt ) +{ + int16_t idx; + + idx = idx_in; + check_bounds_s( &idx, 1, 29 ); + + if ( unclr_decision == 1 && tdm_last_LRTD_frame_cnt > 1 ) + { + if ( tdm_last_LRTD_PriCh_cnt > 0 ) + { + if ( idx <= LRTD_STEREO_MID_IS_PRIM && ( inst_idx < LRTD_STEREO_MID_IS_PRIM + 2 ) ) + { + idx = min( 1, idx ); + } + else if ( idx >= LRTD_STEREO_MID_IS_PRIM && ( inst_idx > LRTD_STEREO_MID_IS_PRIM - 2 ) ) + { + idx = max( 29, idx ); + } + else if ( inst_idx < LRTD_STEREO_MID_IS_PRIM - 4 ) + { + idx = min( 1, idx ); + } + else if ( inst_idx > LRTD_STEREO_MID_IS_PRIM + 4 ) + { + idx = max( 29, idx ); + } + else + { + idx = previous_idx; + } + } + else + { + idx = previous_idx; + } + } + + return idx; +} + + +/*-------------------------------------------------------------------* + * Function limit_idx_NoDwnmix() + * + *-------------------------------------------------------------------*/ + +static int16_t limit_idx_NoDwnmix( + const int16_t idx_in, /* i : Index */ + const int16_t side_can_change, /* i : Primary and secondary channel allowed to change ? */ + const float d_lt_corr_raw /* i : Raw corrrelation differences */ +) +{ + int16_t idx; + + idx = idx_in; + if ( side_can_change == 0 && idx_in > 10 && idx_in < 20 ) + { + idx = 30; + if ( d_lt_corr_raw < -0.1f ) + { + idx = 0; + } + } + else + { + if ( idx <= 15 ) + { + idx = 0; + } + else + { + idx = 30; + } + } + + return idx; +} + + +/*-------------------------------------------------------------------* + * Function stereo_tdm_ener_analysis_SM() + * + * + *-------------------------------------------------------------------*/ + +static int16_t stereo_tdm_ener_analysis_SM( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + Encoder_State **sts, /* i/o: Encoder static variables structure */ + const int16_t input_frame, /* i : Number of samples */ + int16_t *tdm_SM_flag /* i/o: channel combination scheme flag */ +) +{ + float rms_R, rms_L; + float corr_RM, corr_LM, diff_lt_corr, ratio_L, dist; + int16_t i, side_can_change; + int16_t idx, tdm_SM_flag_loc; + float es_em = 0.01f; + float ener_R_dt, ener_L_dt; + int16_t desired_idx = 0; + STEREO_TD_ENC_DATA_HANDLE hStereoTD; + + hStereoTD = hCPE->hStereoTD; + + /*----------------------------------------------------------------* + * set SM flag + *----------------------------------------------------------------*/ + + /* Simple logic to set SM flag, should be done in the frequency domain for low SM correlation signal, especially for music item such as Music_1_org_s */ + tdm_SM_flag_loc = hStereoTD->tdm_last_SM_flag_noop; + + /*----------------------------------------------------------------* + * Compute L and R energy and Long term RMS of each channel + *----------------------------------------------------------------*/ + + Get_LR_rms( sts[0]->input, sts[1]->input, input_frame, &rms_L, &rms_R ); + + /*----------------------------------------------------------------* + * Compute the 1st order energy difference difference + * Compute the gain of L&R channel compared to mono + * - estimate the long term evolution of the L to Mono gain + * - estimate the long term evolution of the R to Mono gain + * - estimate the long term difference between the long term + * - evolution of the L and R to Mono gain + *----------------------------------------------------------------*/ + + Get_dt_lt_ener( hCPE, 1, input_frame, hStereoTD->tdm_last_SM_flag_noop, rms_L, rms_R, + &hStereoTD->tdm_lt_rms_L_SM, &hStereoTD->tdm_lt_rms_R_SM, &hStereoTD->tdm_last_ener_lt_L_SM, &hStereoTD->tdm_last_ener_lt_R_SM, &hStereoTD->tdm_LT_es_em_SM, &hStereoTD->tdm_hyst_cnt_SM, &tdm_SM_flag_loc, + &ener_R_dt, &ener_L_dt, &corr_LM, &corr_RM ); + + hStereoTD->tdm_SM_reset_flag = 0; + + /*----------------------------------------------------------------* + * Adjust stereo downmixing adaptation rate factor + * in function of the signal energy. If signal energy is low, + * adaptation rate factor is lower. This prevent stereo image + * move on speech offset + *----------------------------------------------------------------*/ + + Comp_diff_lt_corr( hCPE, 1, rms_L, rms_R, ener_L_dt, ener_R_dt, corr_LM, corr_RM, hStereoTD->tdm_lt_rms_L_SM, hStereoTD->tdm_lt_rms_R_SM, &hStereoTD->tdm_lt_corr_LM_SM, + &hStereoTD->tdm_lt_corr_RM_SM, &( hStereoTD->tdm_last_diff_lt_corr_SM ), NULL, &diff_lt_corr ); + + side_can_change = 0; + + /*----------------------------------------------------------------* + * When the energies of channels are low enough, compute the ratio + * of L and R needed to create new mono/side signals + *----------------------------------------------------------------*/ + + if ( ( hStereoTD->tdm_lt_rms_L_SM <= RMS_MIN && hStereoTD->tdm_lt_rms_R_SM <= 2 * RMS_MIN ) || ( hStereoTD->tdm_lt_rms_R_SM <= RMS_MIN && hStereoTD->tdm_lt_rms_L_SM <= 2 * RMS_MIN ) ) + { + if ( ( sts[0]->old_corr < CORR_THRES && sts[1]->old_corr < CORR_THRES ) || ( hStereoTD->tdm_lt_rms_L_SM <= RMS_MIN2 && hStereoTD->tdm_lt_rms_R_SM <= RMS_MIN2 ) ) + { + side_can_change = 1; + } + } + + if ( ( hStereoTD->tdm_lt_rms_L_SM <= RMS_MIN2 && hStereoTD->tdm_lt_rms_R_SM <= 2 * RMS_MIN2 ) || ( hStereoTD->tdm_lt_rms_R_SM <= RMS_MIN2 && hStereoTD->tdm_lt_rms_L_SM <= 2 * RMS_MIN2 ) ) + { + if ( ( ( hStereoTD->tdm_last_SM_flag_noop != tdm_SM_flag_loc ) && hStereoTD->tdm_noop_cnt == 0 ) || + hStereoTD->tdm_noop_mov_flag == 1 || hStereoTD->tdm_prev_desired_idx_SM != hStereoTD->tdm_prev_stable_idx_SM ) + { + hStereoTD->tdm_noop_mov_flag = 1; + if ( hStereoTD->tdm_last_ratio_idx_SM != 0 && hStereoTD->tdm_last_ratio_idx_SM != ( TDM_NQ - 1 ) ) + { + side_can_change = 1; + } + } + } + + if ( side_can_change == 0 && tdm_SM_flag_loc == 1 && es_em > 15.0f ) + { + side_can_change = 1; + } + + if ( side_can_change ) + { + ratio_L = max( diff_lt_corr, -RATIO_MAX ); + ratio_L = min( ratio_L, RATIO_MAX ); + + if ( ratio_L > 0.5f * RATIO_MAX ) + { + ratio_L = 1.08f * ratio_L + 0.38f; + } + else if ( ratio_L < -0.5f * RATIO_MAX ) + { + ratio_L = 0.64f * ratio_L + 1.28f; + } + else + { + ratio_L = 0.26f * ratio_L + 0.995f; + } + + ratio_L = ( 1.0f - cosf( EVS_PI * ratio_L / 2.0f ) ) / 2.0f; + + dist = fabsf( ratio_L - tdm_ratio_tabl[0] ); + + desired_idx = 0; + for ( i = 1; i < TDM_NQ; i++ ) + { + if ( fabsf( ratio_L - tdm_ratio_tabl[i] ) <= dist ) + { + dist = fabsf( ratio_L - tdm_ratio_tabl[i] ); + desired_idx = i; + } + } + + idx = stereo_smooth_LR_transition( &hStereoTD->tdm_prev_stable_idx_SM, &hStereoTD->tdm_noop_mov_flag, hStereoTD->tdm_last_ratio_idx_SM, &hStereoTD->tdm_prev_desired_idx_SM, &hStereoTD->tdm_noop_cnt, tdm_SM_flag_loc, desired_idx ); + + idx = (int16_t) ( idx * 0.8f + hStereoTD->tdm_last_ratio_idx_SM * 0.2f ); + + ratio_L = tdm_ratio_tabl[idx]; + } + else + { + ratio_L = hStereoTD->tdm_last_ratio_SM; + idx = hStereoTD->tdm_last_ratio_idx_SM; + } + + if ( ( hStereoTD->tdm_noop_mov_flag == 1 && hStereoTD->tdm_noop_cnt >= 31 ) || ( ( hStereoTD->tdm_last_SM_flag_noop == tdm_SM_flag_loc ) && ( idx == hStereoTD->tdm_prev_stable_idx_SM ) ) ) + { + hStereoTD->tdm_noop_cnt = 0; + hStereoTD->tdm_noop_mov_flag = 0; + } + + if ( hStereoTD->tdm_noop_mov_flag == 0 || tdm_SM_flag_loc == 0 ) + { + hStereoTD->tdm_prev_stable_idx_SM = idx; + } + + hStereoTD->tdm_last_SM_flag_noop = tdm_SM_flag_loc; + *tdm_SM_flag = tdm_SM_flag_loc; + + return ( idx ); +} + + +/*-------------------------------------------------------------------* + * tdm_lp_comparison() + * + * Perform the comparison of the 2 sets of LP coefficients + *-------------------------------------------------------------------*/ + +/*! r: replication decision; 1 = Use old LP */ +int16_t tdm_lp_comparison( + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + Encoder_State *st, /* i/o: Encoder structure */ + const float *speech, /* i : Current speech frame */ + const float *A_PCh, /* i : primary channel LP coefficients */ + const float *A_SCh, /* i : secondary channel LP coeff. */ + const int16_t m, /* i : filter length */ + const float *isp_PCh, /* i : primary channel LSPs */ + const float *isp_SCh, /* i : secondary channel LSPs */ + const int16_t L_frame, /* i : frame length */ + const int32_t element_brate_wo_meta /* i : element bitrate without metadata*/ +) +{ + float predgain_SCh, pred_gain_reuse_PCh, ener_sig; + float res[L_FRAME16k]; + int16_t LP_mode; + float dist, ftmp; + int16_t i; + + /* Find prediction gain for current LP filter */ + residu( A_SCh, m, speech, res, L_frame ); + ener_sig = log10f( sum2_f( speech, L_frame ) + 0.01f ); + predgain_SCh = 10.0f * ( ener_sig - log10f( sum2_f( res, L_frame ) + 0.01f ) ); + + /* Find prediction gain when resuing the Primary Channel LP filter */ + residu( A_PCh, m, speech, res, L_frame ); + pred_gain_reuse_PCh = 10.0f * ( ener_sig - log10f( sum2_f( res, L_frame ) + 0.01f ) ); + + /* Find Euclidian distance between the 2 filters */ + dist = 0; + for ( i = 0; i < m; i++ ) + { + ftmp = isp_SCh[i] - isp_PCh[i]; + dist += ftmp * ftmp; + } + ener_sig *= 10.0f; + + /* Verification of the filters similartiies and prediction gain obtained for each channel */ + /* Threshold are more relax if alpha is close to 0.5 (Valid if ICA is used ) */ + if ( ( ( pred_gain_reuse_PCh >= RATIO_PG * predgain_SCh && dist < EUCLDST ) /* Prediction gain are close & Euclidian dist is small */ + || ( predgain_SCh < PG2ND && dist < EUCLDST2 ) ) /* Prediction gain if the secondary channel is low & Euclidian dist is not too large */ + || ( hStereoTD->tdm_last_ratio_idx >= ( LRTD_STEREO_MID_IS_PRIM - 2 ) && hStereoTD->tdm_last_ratio_idx <= ( LRTD_STEREO_MID_IS_PRIM + 2 ) && /* ratio between 0.4 and 0.6 */ + ( ( pred_gain_reuse_PCh >= RATIO_PG2 * predgain_SCh && dist < EUCLDST2 ) || predgain_SCh < PG2ND2 ) ) /* Prediction gain are not far & Euclidian dist is not too large or Prediction gain if the secondary channel is low */ + || ener_sig <= 30.0f /* secondary channel has low energy */ + ) + { + LP_mode = 1; + + if ( ( element_brate_wo_meta >= IVAS_48k && !( pred_gain_reuse_PCh >= RATIO_PG_HR * predgain_SCh && dist < EUCLDST ) ) || + ( hStereoClassif->lrtd_mode == 1 && element_brate_wo_meta < IVAS_16k4 && !( pred_gain_reuse_PCh >= RATIO_PG_HR * predgain_SCh && dist < EUCLDST / 2.0f ) ) || + ( hStereoClassif->lrtd_mode == 1 && element_brate_wo_meta >= IVAS_16k4 && !( pred_gain_reuse_PCh >= RATIO_PG_LRTD * predgain_SCh && dist < EUCLDST / 4.0f ) ) || st->tc_cnt > 0 ) + { + LP_mode = 0; + } + } + else + { + /* Prediction or and filters are too different -> quantize the difference*/ + LP_mode = 0; + } + + return LP_mode; +} + + +/*-------------------------------------------------------------------* + * tdm_ol_pitch_comparison() + * + * Perform the comparison of the 2 sets of OL pitch + *-------------------------------------------------------------------*/ + +/*! r: replication decision; 1 = Use old LP */ +void tdm_ol_pitch_comparison( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + float pitch_fr[CPE_CHANNELS][NB_SUBFR], /* i/o: fractional pitch values */ + float voicing_fr[CPE_CHANNELS][NB_SUBFR] /* i/o: fractional pitch gains */ +) +{ + int16_t tmp_diff; + int16_t diff_thr = 6; + Encoder_State *st0, *st1; + + st0 = hCPE->hCoreCoder[0]; /* Encoder structure - primary channel */ + st1 = hCPE->hCoreCoder[1]; /* Encoder structure - secondary channel */ + + if ( hCPE->element_brate > IVAS_13k2 ) + { + diff_thr = 3; + } + + if ( hCPE->element_brate >= IVAS_48k || hCPE->hStereoTD->tdm_LRTD_flag == 1 ) + { + diff_thr = 1; + } + + hCPE->hStereoTD->tdm_Pitch_reuse_flag = 0; + + if ( ( ( st0->sp_aud_decision1 == 0 && st0->sp_aud_decision2 == 0 ) && /* Pitch is not recycled in case of music coding*/ + ( hCPE->element_brate <= IVAS_16k4 || ( hCPE->element_brate <= IVAS_24k4 && st0->coder_type == VOICED && st1->coder_type == VOICED ) ) ) || + hCPE->element_brate < IVAS_13k2 ) + { + if ( hCPE->hStereoClassif->lrtd_mode == 1 ) + { + float voicmin[4]; + + minimum( st0->voicing, 3, voicmin ); + minimum( st1->voicing, 3, voicmin + 1 ); + minimum( voicing_fr[0], 4, voicmin + 2 ); + minimum( voicing_fr[1], 4, voicmin + 3 ); + + tmp_diff = 10; + if ( voicmin[0] >= .9f && voicmin[1] >= .9f && voicmin[2] >= .85f && voicmin[3] >= .85f ) + { + tmp_diff = (int16_t) ( abs( ( st0->pitch[0] - st1->pitch[0] ) ) + abs( ( st0->pitch[1] - st1->pitch[1] ) ) + abs( ( st0->pitch[2] - st1->pitch[2] ) ) ); + } + } + else + { + tmp_diff = (int16_t) abs( ( st0->pitch[0] + st0->pitch[1] + st0->pitch[2] ) - ( st1->pitch[0] + st1->pitch[1] + st1->pitch[2] ) ); + } + + if ( tmp_diff <= diff_thr ) + { + hCPE->hStereoTD->tdm_Pitch_reuse_flag = 1; + + /* 1/4 pitch precision update*/ + mvs2s( st0->pitch, st1->pitch, 3 ); + mvr2r( st0->voicing, st1->voicing, 3 ); + + /* Update some parameters accordingly */ + st1->old_corr = st0->old_corr; + st1->old_thres = st0->old_thres; + st1->delta_pit = st0->delta_pit; + + /* Updates for adaptive lag window memory */ + st1->old_pitch_la = st0->old_pitch_la; + /* 1/4 pitch precision update*/ + mvr2r( pitch_fr[0], pitch_fr[1], NB_SUBFR ); + mvr2r( voicing_fr[0], voicing_fr[1], NB_SUBFR ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Function Get_corr_n() + * + * + *-------------------------------------------------------------------*/ + +static void Get_corr_n( + const float L[], /* i : Left signal */ + const float R[], /* i : Right signal */ + float *ic_Lm, /* o : Right signal */ + float *ic_Rm, /* o : Right signal */ + const int16_t len, /* i : segment length */ + float *es_em, /* o : return the difference between the side and mono energy */ + const int16_t tdm_SM_calc_flag /* i : Flag that indicates that it is for SM mode */ +) +{ + float corrL, corrR, ener, mono_i; + int16_t i; + float ener_side, side_i; + + corrL = 0; + corrR = 0; + ener = 1e-6f; + ener_side = 1e-6f; + + /*----------------------------------------------------------------* + * Find the normalized correlation between: left/mono and right/mono based + *----------------------------------------------------------------*/ + + if ( tdm_SM_calc_flag ) + { + for ( i = 0; i < len; i++ ) + { + mono_i = ( L[i] - R[i] ) / 2.0f; + corrL += fabsf( L[i] ) * fabsf( mono_i ); + corrR += fabsf( R[i] ) * fabsf( mono_i ); + ener += mono_i * mono_i; + side_i = ( L[i] + R[i] ) / 2.0f; + ener_side += side_i * side_i; + } + } + else + { + for ( i = 0; i < len; i++ ) + { + mono_i = ( L[i] + R[i] ) / 2.0f; + corrL += L[i] * mono_i; + corrR += R[i] * mono_i; + ener += mono_i * mono_i; + side_i = ( L[i] - R[i] ) / 2.0f; + ener_side += side_i * side_i; + } + } + + *ic_Lm = corrL / ener; + *ic_Rm = corrR / ener; + + *es_em = 10 * ( log10f( sqrtf( ener_side / len ) ) - log10f( sqrtf( ener / len ) ) ); + + return; +} + + +/*-------------------------------------------------------------------* + * Function stereo_smooth_LR_transition() + * + *-------------------------------------------------------------------*/ + +/*! r: smoothed position */ +static int16_t stereo_smooth_LR_transition( + int16_t *tdm_prev_stable_idx, /* i/o: Previous Transmitted ratio index */ + int16_t *tdm_ratio_transition_mov_flag, /* i/o: Flag that indicates that L-R energy is changing */ + int16_t tdm_last_ratio_idx, /* i : last TDM ratio index */ + int16_t *tdm_prev_desired_idx, /* i/o: Previous Transmitted ratio index */ + int16_t *tdm_ratio_transition_cnt, /* i/o: Counter */ + const int16_t tdm_SM_flag, /* i : channel combination scheme flag for current frame */ + int16_t desired_idx /* i : desired final position */ +) +{ + int16_t idx; + + if ( tdm_SM_flag == 1 ) + { + desired_idx = 15; + } + + if ( desired_idx != *tdm_prev_stable_idx ) + { + *tdm_ratio_transition_mov_flag = 1; + } + + if ( *tdm_ratio_transition_mov_flag == 1 ) + { + if ( desired_idx != *tdm_prev_desired_idx ) + { + *tdm_prev_stable_idx = tdm_last_ratio_idx; + *tdm_ratio_transition_cnt = 0; + } + + *tdm_ratio_transition_cnt += 4; + if ( desired_idx < *tdm_prev_stable_idx - 2 ) + { + idx = *tdm_prev_stable_idx - *tdm_ratio_transition_cnt; + idx = max( desired_idx, idx ); + } + else if ( desired_idx > *tdm_prev_stable_idx + 2 ) + { + idx = *tdm_prev_stable_idx + *tdm_ratio_transition_cnt; + idx = min( desired_idx, idx ); + } + else + { + idx = desired_idx; + } + } + else + { + idx = desired_idx; + } + + *tdm_prev_desired_idx = desired_idx; + + return idx; +} diff --git a/lib_enc/ivas_stereo_td_enc.c b/lib_enc/ivas_stereo_td_enc.c new file mode 100644 index 0000000000..cba218a3d0 --- /dev/null +++ b/lib_enc/ivas_stereo_td_enc.c @@ -0,0 +1,825 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#include "assert.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "wmops.h" +#include "math.h" + + +/*-------------------------------------------------------------------* + * stereo_td_init_enc() + * + * Initialize TD stereo encoder + *-------------------------------------------------------------------*/ + +void stereo_td_init_enc( + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ + const int16_t last_element_mode /* i : last element mode */ +) +{ + hStereoTD->tdm_lt_corr_RM = 0.01f; + hStereoTD->tdm_lt_corr_LM = 0.01f; + hStereoTD->tdm_last_ratio = 0.5f; + hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_lt_rms_L = 40.0f; + hStereoTD->tdm_lt_rms_R = 40.0f; + hStereoTD->tdm_last_diff_lt_corr = 0; + hStereoTD->tdm_last_ener_lt_R = 0; + hStereoTD->tdm_last_ener_lt_L = 0; + + hStereoTD->tdm_ratio_transition_mov_flag = 0; + hStereoTD->tdm_ratio_transition_cnt = 0; + hStereoTD->tdm_noop_mov_flag = 0; + hStereoTD->tdm_noop_cnt = 0; + hStereoTD->tdm_last_SM_flag = 0; + + hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_prev_desired_idx = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_FD2LRTD_SW_cnt = 0; + hStereoTD->tdm_LT_es_em = 0.1f; + hStereoTD->tdm_hyst_cnt = 0; + /* NOOP parameters */ + hStereoTD->tdm_lt_corr_RM_SM = 0.01f; + hStereoTD->tdm_lt_corr_LM_SM = 0.01f; + hStereoTD->tdm_last_ratio_SM = 0.5f; + hStereoTD->tdm_last_ratio_idx_SM = 0; + hStereoTD->tdm_lt_rms_L_SM = 40.0f; + hStereoTD->tdm_lt_rms_R_SM = 40.0f; + hStereoTD->tdm_last_diff_lt_corr_SM = 0; + hStereoTD->tdm_last_ener_lt_R_SM = 0; + hStereoTD->tdm_last_ener_lt_L_SM = 0; + hStereoTD->tdm_noop_mov_flag = 0; + hStereoTD->tdm_NOOP_cnt = 0; + hStereoTD->tdm_last_SM_flag_noop = 0; + hStereoTD->tdm_last_ratio_idx_SM = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_prev_stable_idx_SM = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_prev_desired_idx_SM = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_LT_es_em_SM = 0.1f; + hStereoTD->tdm_hyst_cnt_SM = 0; + hStereoTD->tdm_noop_cnt = 0; + hStereoTD->tdm_SM_flag = 0; + hStereoTD->tdm_SM_last_clas[0] = VOICED_CLAS; + hStereoTD->tdm_SM_last_clas[1] = VOICED_CLAS; + hStereoTD->tdm_SM_last2_clas[0] = VOICED_CLAS; + hStereoTD->tdm_SM_last2_clas[1] = VOICED_CLAS; + hStereoTD->tdm_SM_modi_flag = 0; + hStereoTD->tdm_SM_reset_flag = 0; + hStereoTD->prev_fr_LRTD_TD_dec = 0; + hStereoTD->tdm_LRTD_flag = 0; + hStereoTD->tdm_inst_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; + hStereoTD->tdm_last_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; + hStereoTD->tdm_last_LRTD_frame_cnt = 0; + hStereoTD->tdm_vad_hangover_cnt = 0; + hStereoTD->tdm_ini_frame_cnt = 0; + hStereoTD->tdm_last_LRTD_PriCh_cnt = 0; + + hStereoTD->flag_skip_DMX = 0; + if ( last_element_mode == IVAS_CPE_MDCT ) + { + hStereoTD->flag_skip_DMX = 1; + hStereoTD->prev_fr_LRTD_TD_dec = 1; + hStereoTD->tdm_last_ratio = 1.0f; + hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; + hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_LEFT_IS_PRIM; + hStereoTD->tdm_prev_desired_idx = LRTD_STEREO_LEFT_IS_PRIM; + } + + return; +} + + +/*-------------------------------------------------------------------* + * stereo_set_tdm() + * + * Set TD stereo encoder parameters + *-------------------------------------------------------------------*/ + +ivas_error stereo_set_tdm( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int16_t input_frame /* i : input frame length per channel */ +) +{ + Encoder_State **sts; + sts = hCPE->hCoreCoder; + ivas_error error; + + error = IVAS_ERR_OK; + + /* initialize TD stereo parameters */ + if ( hCPE->hStereoTD != NULL ) + { + hCPE->hStereoTD->tdm_lp_reuse_flag = 0; + hCPE->hStereoTD->tdm_low_rate_mode = 0; + hCPE->hStereoTD->tdm_Pitch_reuse_flag = 0; + + if ( hCPE->hStereoClassif->lrtd_mode == 1 ) + { + /* initialize this flag when uncorrelated L&R channels have been detected in the previous frame */ + if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 1 || hCPE->last_element_mode != IVAS_CPE_TD || hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt < 5 ) + { + hCPE->hStereoTD->tdm_LRTD_flag = 1; + } + else + { + hCPE->hStereoTD->tdm_LRTD_flag = 0; + } + } + else + { + hCPE->hStereoTD->tdm_LRTD_flag = hCPE->hStereoTD->prev_fr_LRTD_TD_dec; + } + +#ifdef DEBUG_MODE_INFO + dbgwrite( &hCPE->hStereoTD->tdm_LRTD_flag, 2, 1, (int16_t) ( hCPE->hCoreCoder[0]->input_Fs / FRAMES_PER_SEC ), "res/tdm_LRTD_flag" ); +#endif + + /* normal TD / LRTD switching */ + if ( hCPE->hStereoTD->tdm_LRTD_flag == 0 ) + { + Encoder_State *st; + st = hCPE->hCoreCoder[1]; + + /* deallocate CLDFB ana for secondary channel */ + if ( st->cldfbAnaEnc != NULL ) + { + deleteCldfb( &st->cldfbAnaEnc ); + } + + /* deallocate BWEs for secondary channel */ + if ( st->hBWE_TD != NULL ) + { + if ( st->hBWE_TD != NULL ) + { + count_free( st->hBWE_TD ); + st->hBWE_TD = NULL; + } + + deleteCldfb( &st->cldfbSynTd ); + + if ( st->hBWE_FD != NULL ) + { + count_free( st->hBWE_FD ); + st->hBWE_FD = NULL; + } + } + + /* allocate ICBWE structure */ + if ( hCPE->hStereoICBWE == NULL ) + { + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); + } + + stereo_icBWE_init_enc( hCPE->hStereoICBWE ); + } + } + else /* tdm_LRTD_flag == 1 */ + { + Encoder_State *st; + st = hCPE->hCoreCoder[1]; + + /* deallocate ICBWE structure */ + if ( hCPE->hStereoICBWE != NULL ) + { + count_free( hCPE->hStereoICBWE ); + hCPE->hStereoICBWE = NULL; + } + + /* allocate CLDFB ana for secondary channel */ + if ( st->cldfbAnaEnc == NULL ) + { + if ( ( error = openCldfb( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* allocate BWEs for secondary channel */ + if ( st->hBWE_TD == NULL ) + { + if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) count_malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); + } + + if ( ( error = openCldfb( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) + { + return error; + } + + InitSWBencBuffer( st->hBWE_TD ); + ResetSHBbuffer_Enc( st->hBWE_TD ); + + if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) count_malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); + } + + fd_bwe_enc_init( st->hBWE_FD ); + } + } + + if ( hCPE->hStereoClassif->lrtd_mode == 0 ) + { + hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt = 0; + } + hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt = min( 100, hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt + 1 ); + stereo_tdm_prep_dwnmx( hCPE, sts[1]->input, input_frame ); + } + else + { +#ifdef DEBUG_MODE_INFO + { + int16_t tmp = -2; + dbgwrite( &tmp, 2, 1, (int16_t) ( hCPE->hCoreCoder[0]->input_Fs / FRAMES_PER_SEC ), "res/tdm_LRTD_flag" ); + } +#endif +#ifdef DEBUG_MODE_TD + { + float ftmp = -0.0; + int16_t tmp = -2; + dbgwrite( &tmp, 2, 1, 320, "res/prev_fr_LRTD_TD_dec" ); + dbgwrite( &tmp, 2, 1, 320, "res/inst_ratio_L" ); + dbgwrite( &ftmp, 4, 1, 320, "res/ratio_L" ); + dbgwrite( &tmp, 2, 1, 320, "res/tdm_low_rate_mode" ); + dbgwrite( &tmp, 2, 1, 320, "res/tdm_lp_reuse_flag" ); + dbgwrite( &tmp, 2, 1, 320, "res/mod_ct.enx" ); + } +#endif + hCPE->hCoreCoder[0]->tdm_LRTD_flag = 0; + hCPE->hCoreCoder[1]->tdm_LRTD_flag = 0; + } + + return error; +} + + +/*-------------------------------------------------------------------* + * tdm_configure_enc() + * + * Configure TD stereo encoder + *-------------------------------------------------------------------*/ + +void tdm_configure_enc( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag in TD stereo OR LRTD primary channel */ + const int16_t tdm_ratio_idx, /* i : ratio index */ + const int16_t tdm_ratio_idx_SM, /* i : ratio index in SM mode */ + const int16_t attack_flag, /* i : Primary channel attack flag */ + const int16_t nb_bits_metadata /* i : number of metadata bits */ +) +{ + int16_t tdm_ratio_bit_alloc_idx, mod_ct; + STEREO_TD_ENC_DATA_HANDLE hStereoTD; + Encoder_State **sts; + BSTR_ENC_HANDLE hBstr; + int16_t loc_coder_tyape_raw0; + + hStereoTD = hCPE->hStereoTD; + sts = hCPE->hCoreCoder; + hBstr = sts[1]->hBstr; + loc_coder_tyape_raw0 = sts[0]->coder_type_raw; + + /*----------------------------------------------------------------* + * Overwrite certain decisions depending on the input + *----------------------------------------------------------------*/ + + hStereoTD->tdm_use_IAWB_Ave_lpc = 0; /* Flag initialisation */ + sts[0]->hSpMusClas->tdm_lt_Etot = 0.1f * sts[0]->hNoiseEst->Etot_last + 0.9f * sts[0]->hSpMusClas->tdm_lt_Etot; + sts[1]->hSpMusClas->tdm_lt_Etot = 0.1f * sts[1]->hNoiseEst->Etot_last + 0.9f * sts[1]->hSpMusClas->tdm_lt_Etot; + + if ( hCPE->hStereoClassif->lrtd_mode == 0 && ( ( sts[1]->hSpMusClas->tdm_lt_Etot < 0 && hCPE->hCoreCoder[1]->vad_flag == 0 ) /* very clean signal */ + || ( hCPE->hCoreCoder[1]->vad_flag == 0 || ( sts[1]->hNoiseEst->Etot_last < 30.0f && ( sts[0]->hSpMusClas->tdm_lt_Etot - sts[1]->hSpMusClas->tdm_lt_Etot ) > 26.0f ) ) ) ) + { + sts[1]->coder_type = INACTIVE; + + if ( hStereoTD->tdm_lp_reuse_flag == 0 && hCPE->hCoreCoder[0]->vad_flag != 0 ) + { + hStereoTD->tdm_use_IAWB_Ave_lpc = 1; + } + hStereoTD->tdm_lp_reuse_flag = 1; + } + else if ( ( ( hCPE->hCoreCoder[1]->vad_flag == 0 ) || ( hCPE->hCoreCoder[0]->vad_flag == 0 && sts[1]->hNoiseEst->Etot_last < 30.0f && ( sts[0]->hSpMusClas->tdm_lt_Etot - sts[1]->hSpMusClas->tdm_lt_Etot ) > 26.0f ) ) && ( hCPE->hStereoClassif->lrtd_mode == 1 ) /* && NO_DTX */ ) /* boths channels are inactive but not DTX used*/ + { + sts[1]->coder_type = INACTIVE; + if ( tdm_ratio_idx > 1 && tdm_ratio_idx < 29 ) + { + if ( hStereoTD->tdm_lp_reuse_flag == 0 && hCPE->hCoreCoder[0]->vad_flag != 0 ) + { + hStereoTD->tdm_use_IAWB_Ave_lpc = 1; + } + hStereoTD->tdm_lp_reuse_flag = 1; + } + } + else if ( !( sts[1]->sp_aud_decision0 ) && sts[1]->tc_cnt <= 0 && ( sts[1]->coder_type_raw == UNVOICED || ( hStereoTD->tdm_LRTD_flag == 1 && hStereoTD->tdm_lp_reuse_flag == 0 && ( hCPE->hCoreCoder[1]->vad_flag == 0 || ( sts[1]->hNoiseEst->Etot_last < 30.0f && ( sts[0]->hSpMusClas->tdm_lt_Etot - sts[1]->hSpMusClas->tdm_lt_Etot ) > 26.0f ) ) ) ) ) + { + sts[1]->coder_type = UNVOICED; + if ( hStereoTD->tdm_LRTD_flag == 1 ) + { + hStereoTD->tdm_lp_reuse_flag = 0; + } + } + else if ( ( sts[1]->coder_type < AUDIO && sts[1]->coder_type != UNVOICED ) || /* TC and VC are not supported in secondary channel */ + ( ( sts[1]->coder_type == AUDIO && hCPE->element_brate <= IVAS_24k4 ) || ( sts[0]->sp_aud_decision1 == 1 && hCPE->element_brate >= IVAS_16k4 ) || ( sts[1]->sp_aud_decision0 == 1 && hCPE->element_brate > IVAS_13k2 ) ) ) + { + sts[1]->coder_type = GENERIC; + } + else if ( sts[1]->coder_type == GENERIC && sts[1]->coder_type_raw == UNVOICED ) + { + hStereoTD->tdm_lp_reuse_flag = 0; + } + + if ( hCPE->element_brate > IVAS_24k4 && hCPE->hStereoClassif->lrtd_mode == 1 ) + { + if ( sts[1]->coder_type == UNVOICED ) + { + sts[1]->coder_type = GENERIC; + } + + if ( sts[0]->coder_type == UNVOICED ) + { + sts[0]->coder_type = GENERIC; + loc_coder_tyape_raw0 = GENERIC; + } + } + + if ( hCPE->element_brate >= IVAS_24k4 && hCPE->hStereoClassif->lrtd_mode == 0 && sts[0]->coder_type == UNVOICED ) + { + sts[0]->coder_type = GENERIC; + loc_coder_tyape_raw0 = GENERIC; + } + + if ( sts[1]->coder_type != GENERIC ) + { + hStereoTD->tdm_Pitch_reuse_flag = 0; + } + + if ( attack_flag != 0 ) + { + if ( sts[1]->coder_type != INACTIVE ) + { + hStereoTD->tdm_lp_reuse_flag = 0; /* Do not allow the LP filter reusing on TC or attack in the primary channel */ + } + } + + if ( tdm_SM_or_LRTD_Pri && hStereoTD->tdm_LRTD_flag == 0 ) + { + tdm_ratio_bit_alloc_idx = tdm_ratio_idx_SM; + } + else + { + tdm_ratio_bit_alloc_idx = tdm_ratio_idx; + } + + if ( ( hCPE->hStereoClassif->lrtd_mode == 1 && sts[1]->coder_type >= UNVOICED && abs( hStereoTD->tdm_last_ratio_idx - tdm_ratio_bit_alloc_idx ) > 15 ) /* channel inversion in lrtd */ + || ( hStereoTD->tdm_FD2LRTD_SW_cnt < 4 && hStereoTD->tdm_last_LRTD_frame_cnt < 4 ) ) + { + sts[1]->coder_type = GENERIC; + } + + mod_ct = AUDIO; + if ( hCPE->element_brate < IVAS_24k4 ) + { + mod_ct = sts[0]->coder_type; + /* Only sure TRANSITION coding modes are important for bit allocation, otherwise mod_ct is set to AUDIO only to easy debugging if needed */ + if ( ( ( sts[0]->last_L_frame >= L_FRAME16k && sts[0]->flag_ACELP16k == 0 ) || ( sts[0]->last_L_frame == L_FRAME && sts[0]->flag_ACELP16k == 1 ) ) && sts[0]->last_core_brate != FRAME_NO_DATA && sts[0]->last_core_brate != SID_2k40 && sts[0]->coder_type_raw != VOICED /*in case of CNG, this code is not reached sts[0]->core_brate != FRAME_NO_DATA && sts[0]->core_brate != SID_2k40 &&*/ ) + { + mod_ct = TRANSITION; + } + else if ( sts[0]->sp_aud_decision1 == 1 || sts[0]->sp_aud_decision2 == 1 || mod_ct != TRANSITION ) + { + mod_ct = AUDIO; + } + } + + /* Correction of tdm_inst_ratio_idx in case of TC in the seecondary channel */ + if ( hStereoTD->flag_skip_DMX == 0 && hStereoTD->tdm_LRTD_flag == 1 && sts[1]->tc_cnt > 1 /*&& abs(hStereoTD->tdm_inst_ratio_idx-LRTD_STEREO_MID_IS_PRIM) > 5*/ ) + { + if ( tdm_SM_or_LRTD_Pri == 0 ) /* Primary is right */ + { + hStereoTD->tdm_inst_ratio_idx += LRTD_STEREO_QUARTER_RANGE; + } + else if ( tdm_SM_or_LRTD_Pri == 1 ) /* Primary is left */ + { + hStereoTD->tdm_inst_ratio_idx -= LRTD_STEREO_QUARTER_RANGE; + } + check_bounds_s( &( hStereoTD->tdm_inst_ratio_idx ), 8, 22 ); + } + + /*----------------------------------------------------------------* + * bitbudget distribution between channels (taking into account also metadata bitbudget) + *----------------------------------------------------------------*/ + + tdm_bit_alloc( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC, hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), &( hStereoTD->tdm_low_rate_mode ), sts[1]->coder_type, tdm_ratio_bit_alloc_idx, hStereoTD->tdm_Pitch_reuse_flag, sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, hStereoTD->tdm_inst_ratio_idx ); + + if ( sts[0]->GSC_IVAS_mode > 0 && sts[0]->total_brate <= STEREO_GSC_BIT_RATE_ALLOC ) + { + sts[0]->GSC_IVAS_mode = 0; + } + if ( sts[1]->GSC_IVAS_mode > 0 && ( sts[1]->total_brate <= STEREO_GSC_BIT_RATE_ALLOC || hStereoTD->tdm_low_rate_mode == 1 ) ) + { + sts[1]->GSC_IVAS_mode = 0; + } + + if ( sts[0]->coder_type == GENERIC && loc_coder_tyape_raw0 == UNVOICED ) + { + if ( sts[0]->total_brate <= MAX_UNVOICED_BRATE ) + { + sts[0]->coder_type = UNVOICED; + } + } + + /*----------------------------------------------------------------* + * Bitstream writing + *----------------------------------------------------------------*/ + + /* transmit the ratio index */ + if ( tdm_SM_or_LRTD_Pri && hStereoTD->tdm_LRTD_flag == 0 ) + { + push_indice( hBstr, IND_STEREO_TD_ALPHA, tdm_ratio_idx_SM, TDM_RATIO_BITS ); + } + else + { + if ( hStereoTD->tdm_LRTD_flag == 1 ) + { + push_indice( hBstr, IND_STEREO_TD_ALPHA, hStereoTD->tdm_inst_ratio_idx, TDM_RATIO_BITS ); + } + else + { + push_indice( hBstr, IND_STEREO_TD_ALPHA, tdm_ratio_idx, TDM_RATIO_BITS ); + } + } + + /* LPC reuse flag */ + if ( sts[1]->coder_type == INACTIVE && tdm_ratio_idx < 29 && tdm_ratio_idx > 1 ) + { + /* normal TD, tdm_lp_reuse_flag always on, tdm_use_IAWB_Ave_lpc varies tdm_ratio_idx<29 && tdm_ratio_idx> 1*/ + push_indice( hBstr, IND_STEREO_LPC_REUSE, hStereoTD->tdm_use_IAWB_Ave_lpc, TDM_LP_REUSE_BITS ); + } + else + { + push_indice( hBstr, IND_STEREO_LPC_REUSE, hStereoTD->tdm_lp_reuse_flag, TDM_LP_REUSE_BITS ); + } + + /* LRTD flag */ + push_indice( hBstr, IND_STEREO_LRTD_FLAG, hStereoTD->tdm_LRTD_flag, TDM_LR_CONTENT_BITS ); + + /* Stereo ICA parameters */ + if ( hStereoTD->tdm_LRTD_flag == 0 ) + { + push_indice( hBstr, IND_STEREO_REFCHAN, hCPE->hStereoTCA->refChanIndx, STEREO_BITS_TCA_CHAN ); + push_indice( hBstr, IND_STEREO_CORRSTATS, hCPE->hStereoTCA->indx_ica_NCShift, STEREO_BITS_TCA_CORRSTATS ); + push_indice( hBstr, IND_STEREO_GD, hCPE->hStereoTCA->indx_ica_gD, STEREO_BITS_TCA_GD ); + } + +#ifdef DEBUG_MODE_TD + dbgwrite( &hStereoTD->tdm_low_rate_mode, 2, 1, 320, "res/tdm_low_rate_mode" ); + dbgwrite( &hStereoTD->tdm_lp_reuse_flag, 2, 1, 320, "res/tdm_lp_reuse_flag" ); + dbgwrite( &mod_ct, 2, 1, 320, "res/mod_ct.enx" ); +#endif + /*----------------------------------------------------------------* + * Updates + *----------------------------------------------------------------*/ + + hStereoTD->tdm_last_ratio_idx = tdm_ratio_idx; + hStereoTD->tdm_last_ratio_idx_SM = tdm_ratio_idx_SM; + hStereoTD->tdm_last_SM_flag = tdm_SM_or_LRTD_Pri; + + if ( hStereoTD->tdm_LRTD_flag == 1 ) + { + hStereoTD->tdm_last_SM_flag = 0; + } + + hStereoTD->tdm_last_inst_ratio_idx = hStereoTD->tdm_inst_ratio_idx; + + return; +} + + +/*-------------------------------------------------------------------* + * signalling_enc_secondary() + * + * Signalling of the secondary channel + *-------------------------------------------------------------------*/ + +ivas_error signalling_enc_secondary( + Encoder_State *st, /* i/o: Encoder structure */ + const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag OR LRTD primary channel */ + const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag*/ +) +{ + int16_t ind; + BSTR_ENC_HANDLE hBstr = st->hBstr; + ivas_error error; + + error = IVAS_ERR_OK; + + /* The secondary channel band-witdh is always the same as the primary channel bandwidth */ + + ind = st->coder_type; + if ( tdm_Pitch_reuse_flag == 1 ) /* possible only for bitrate <= 24400 */ + { + ind = 3; + } + else if ( st->coder_type == GENERIC ) + { + ind = 2; + } + else if ( st->coder_type == AUDIO ) + { + ind -= 2; + } +#ifdef DEBUGGING + else if ( st->coder_type == TRANSITION || st->coder_type == VOICED ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Coder type not supported in secondary channel\n" ); + } +#endif + + ind <<= 1; + ind += tdm_SM_or_LRTD_Pri; /* addition of the channel combination scheme flag value or the LRTD primary channel*/ + push_indice( hBstr, IND_STEREO_2ND_CODER_T, ind, TDM_SECONDARY_SIGNALLING ); + + /* write extension layer flag to distinguish between TBE (0) and BWE (1) */ + if ( st->extl_brate > 0 ) + { + if ( st->extl == WB_TBE || st->extl == SWB_TBE || st->extl == FB_TBE ) + { + push_indice( hBstr, IND_BWE_FLAG, 0, 1 ); + } + else if ( st->extl == WB_BWE || st->extl == SWB_BWE || st->extl == FB_BWE ) + { + push_indice( hBstr, IND_BWE_FLAG, 1, 1 ); + } + } + + return error; +} + +/*-------------------------------------------------------------------* + * Function tdm_downmix_plain() + * + * downmix Left+Right to Primary+Secondary channel + *-------------------------------------------------------------------*/ + +static void tdm_downmix_plain( + float FR_Y[], /* o : primary channel */ + float LR_X[], /* o : secondary channel */ + const float Left_in[], /* i : Left channel */ + const float Right_in[], /* i : Right channel */ + const float ratio_L, /* i : mixing ratio */ + const float One_m_Ratio, /* i : 1 - mixing ration */ + const int16_t start_index, /* i : start index */ + const int16_t end_index /* i : end index */ +) +{ + int16_t i; + + for ( i = start_index; i < end_index; i++ ) + { + FR_Y[i] = ( Right_in[i] * One_m_Ratio + ( Left_in[i] * ratio_L ) ); + LR_X[i] = ( Left_in[i] * One_m_Ratio - ( Right_in[i] * ratio_L ) ); + } + + return; +} + +/*-------------------------------------------------------------------* + * Function tdm_downmix_fade() + * + * downmix Left+Right to Primary+Secondary channel with fade in/out + *-------------------------------------------------------------------*/ + +static void tdm_downmix_fade( + float FR_Y[], /* o : primary channel */ + float LR_X[], /* o : secondary channel */ + const float Left_in[], /* i : Left channel */ + const float Right_in[], /* i : Right channel */ + const float ratio_L, /* i : mixing ratio */ + const float One_m_Ratio, /* i : 1 - mixing ratio */ + const float OldRatio_L, /* i : old mixing ratio */ + const float One_m_OldRatio, /* i : 1 - old mixing ratio */ + const int16_t start_index, /* i : start index */ + const int16_t end_index /* i : end index */ +) +{ + int16_t i; + float step, fade_in, fade_out; + + step = 1.0f / (float) ( end_index - start_index ); + fade_out = 1.0f; + fade_in = 0.0f; + + for ( i = start_index; i < end_index; i++ ) + { + FR_Y[i] = ( Right_in[i] * One_m_OldRatio + Left_in[i] * OldRatio_L ) * fade_out + ( Right_in[i] * One_m_Ratio + Left_in[i] * ratio_L ) * fade_in; + LR_X[i] = ( Left_in[i] * One_m_OldRatio - Right_in[i] * OldRatio_L ) * fade_out + ( Left_in[i] * One_m_Ratio - Right_in[i] * ratio_L ) * fade_in; + + fade_in += step; + fade_out -= step; + } + + return; +} + +/*-------------------------------------------------------------------* + * Function stereo_tdm_downmix() + * + * Compute the TD stereo downmix signal based on the ratio index + *-------------------------------------------------------------------*/ + +void stereo_tdm_downmix( + STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i : TD stereo IVAS encoder structure */ + float *Left_in, /* i/o: Left channel -> Primary channel */ + float *Right_in, /* i/o: Right channel -> Secondary channel */ + const int16_t input_frame, /* i : Number of samples */ + const int16_t tdm_ratio_idx, /* i : TDM ratio index */ + const int16_t tdm_SM_flag, /* i : channel combination scheme flag */ + const int16_t tdm_ratio_idx_SM /* i : TDM ratio index for SM mode */ +) +{ + float FR_Y[L_FRAME48k], LR_X[L_FRAME48k]; + int16_t i, tdm_n_OVA; + int16_t stereo_tdm_coder_type; + + tdm_n_OVA = NS2SA( input_frame * FRAMES_PER_SEC, TDM_L_NOVA_NS ); + + if ( hStereoTD->flag_skip_DMX ) + { + stereo_tdm_coder_type = 10; /* no DMX */ + mvr2r( Left_in, FR_Y, input_frame ); + mvr2r( Right_in, LR_X, input_frame ); + } + else if ( tdm_SM_flag == 1 ) + { + if ( hStereoTD->tdm_last_SM_flag == 0 ) + { + stereo_tdm_coder_type = 0; /* mode 1 : Switching from YX scheme to SM scheme*/ + } + else + { + stereo_tdm_coder_type = 1; /* mode 2 : SM scheme*/ + } + } + else + { + if ( hStereoTD->tdm_last_SM_flag == 1 ) + { + stereo_tdm_coder_type = 2; /* mode 3 : Switching from SM scheme to YX scheme*/ + } + else + { + stereo_tdm_coder_type = 3; /* mode 4 : YX scheme*/ + } + } + + switch ( stereo_tdm_coder_type ) + { + case ( 0 ): + { + /* Switching from YX scheme to SM scheme */ + tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, hStereoTD->tdm_last_ratio, 1.0f - hStereoTD->tdm_last_ratio, 0, tdm_n_OVA ); + + /* Create new mixture of using the ratio computed above and formular for SM scheme */ + tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, tdm_n_OVA, input_frame ); + } + break; + case ( 1 ): + { + /* Create new mixture of using the ratio computed above and formular for SM scheme */ + if ( tdm_ratio_tabl[tdm_ratio_idx_SM] == hStereoTD->tdm_last_ratio_SM ) + { + tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, 0, input_frame ); + } + else + { + tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, hStereoTD->tdm_last_ratio_SM, hStereoTD->tdm_last_ratio_SM - 1.0f, 0, tdm_n_OVA ); + tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, tdm_n_OVA, input_frame ); + } + } + break; + case ( 2 ): + { + /* Switching from SM scheme to YX scheme */ + tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], hStereoTD->tdm_last_ratio_SM, hStereoTD->tdm_last_ratio_SM - 1.0f, 0, tdm_n_OVA ); + + /* Create new mixture of using the ratio computed above and formular for YX scheme */ + tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], tdm_n_OVA, input_frame ); + } + break; + case ( 3 ): + { + /* Create new mixture of using the ratio computed above and formular for YX scheme */ + if ( tdm_ratio_tabl[tdm_ratio_idx] == hStereoTD->tdm_last_ratio ) + { + tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], 0, input_frame ); + } + else + { + tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], hStereoTD->tdm_last_ratio, 1.0f - hStereoTD->tdm_last_ratio, 0, tdm_n_OVA ); + tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], tdm_n_OVA, input_frame ); + } + } + break; + default: + break; + } + + for ( i = 0; i < input_frame; i++ ) + { + Left_in[i] = FR_Y[i]; + Right_in[i] = LR_X[i]; + } + + hStereoTD->tdm_last_ratio = tdm_ratio_tabl[tdm_ratio_idx]; + hStereoTD->tdm_last_ratio_SM = tdm_ratio_tabl[tdm_ratio_idx_SM]; + + return; +} + +/*-------------------------------------------------------------------* + * Function stereo_tdm_prep_dwnmx() + * + * Reactivate downmixing after bitrate switching from MDCT to lower rate + *-------------------------------------------------------------------*/ + +void stereo_tdm_prep_dwnmx( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + const float *input1, /* i : right channel input */ + const int16_t input_frame /* i : frame lenght */ +) +{ +#define USER_ENER + float mener; + int16_t i, sw_pos, enr_len; + Encoder_State **sts; + sts = hCPE->hCoreCoder; + + i = input_frame / L_FRAME16k; + + sw_pos = 22 * i; + enr_len = 6 * i; +#ifdef DEBUG_MODE_TD + assert( sw_pos > 15 ); +#endif + if ( hCPE->element_mode == IVAS_CPE_TD ) + { + if ( hCPE->hStereoTD->flag_skip_DMX == 1 ) /* hStereoTD is defined only if element mode == TD */ + { + if ( hCPE->last_element_mode == IVAS_CPE_TD ) + { + mener = sum2_f( input1 + input_frame - sw_pos, enr_len ) + EPSILON; + mener = sqrtf( mener / enr_len ); + if ( mener < 10.0f && ( sts[1]->vad_flag == 0 || sts[1]->coder_type_raw == UNVOICED ) ) + { + hCPE->hStereoTD->flag_skip_DMX = 0; /* Can start using the TD downmix whenever the right channel is sufficiently low energy to limit switching artefacts */ + } + } + else if ( hCPE->last_element_mode == IVAS_CPE_DFT || hCPE->last_element_brate == IVAS_13k2 ) /* Just security check, should not happened */ + { + hCPE->hStereoTD->flag_skip_DMX = 0; + } + } + } +} diff --git a/lib_enc/ivas_stereo_td_low_rate_enc.c b/lib_enc/ivas_stereo_td_low_rate_enc.c new file mode 100644 index 0000000000..92abf45e9a --- /dev/null +++ b/lib_enc/ivas_stereo_td_low_rate_enc.c @@ -0,0 +1,353 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "stat_enc.h" +#include "rom_com.h" +#include "ivas_rom_com.h" +#include "ivas_cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * tdm_low_rate_enc() + * + * Encode secondary channel of TD Stereo with a low-bitrate encoder + *-------------------------------------------------------------------*/ + +void tdm_low_rate_enc( + Encoder_State *st, /* i/o: State structure */ + const float Aq[], /* i : 12k8 Lp coefficient */ + const float *res, /* i : residual signal */ + float *synth, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t attack_flag, /* i : GSC attack flag */ + const float *lsf_new, /* i : current frame ISF vector */ + float *tmp_noise /* o : long-term noise energy */ +) +{ + const float *p_Aq; + int16_t i_subfr, nb_subfr, last_pit_bin; + int16_t tmp_nb_bits_tot; + float dct_res[L_FRAME], dct_epit[L_FRAME]; + float exc_wo_nf[L_FRAME]; + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + tmp_nb_bits_tot = 0; + + /*---------------------------------------------------------------* + * DCT transform of the residual and create a subsample residual + *---------------------------------------------------------------*/ + + edct( res, dct_res, L_FRAME, st->element_mode ); + + nb_subfr = 2; + + /*---------------------------------------------------------------* + * Compute time domain excitation contribution in the subsample domain + *---------------------------------------------------------------*/ + + hLPDmem->tilt_code = 0.0f; + + st->GSC_noisy_speech = 1; + set_f( dct_epit, 0, L_FRAME ); + set_f( pitch_buf, 64, NB_SUBFR ); + st->hGSCEnc->noise_lev = 14; + last_pit_bin = L_FRAME / 2; + + /*--------------------------------------------------------------------------------------* + * GSC encoder + *--------------------------------------------------------------------------------------*/ + + /* Find the current total number of bits used */ + tmp_nb_bits_tot = st->hBstr->nb_bits_tot; + + if ( st->extl_brate > 0 ) + { + /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ + tmp_nb_bits_tot--; + } + + gsc_enc( st, dct_res, dct_epit, last_pit_bin, tmp_nb_bits_tot, nb_subfr, lsf_new, exc_wo_nf, tmp_noise ); + + /*--------------------------------------------------------------------------------------* + * iDCT transform + *--------------------------------------------------------------------------------------*/ + + edct( dct_epit, exc, L_FRAME, st->element_mode ); + + edct( exc_wo_nf, exc_wo_nf, L_FRAME, st->element_mode ); + + /*--------------------------------------------------------------------------------------* + * Remove potential pre-echo in case an onset has been detected + *--------------------------------------------------------------------------------------*/ + + pre_echo_att( &st->hGSCEnc->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); + + /*--------------------------------------------------------------------------------------* + * Update BWE excitation + *--------------------------------------------------------------------------------------*/ + + if ( st->hBWE_TD != NULL ) + { + set_f( voice_factors, 0.0f, NB_SUBFR ); + + if ( st->tdm_LRTD_flag ) + { + interp_code_5over2( exc, bwe_exc, L_FRAME ); + } + else + { + set_f( bwe_exc, 0, L_FRAME32k ); + } + } + + /*--------------------------------------------------------------------------------------* + * Synthesis + *--------------------------------------------------------------------------------------*/ + + p_Aq = Aq; + for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) + { + syn_filt( p_Aq, M, &exc_wo_nf[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn, 1 ); + p_Aq += ( M + 1 ); + } + + /*--------------------------------------------------------------------------------------* + * Updates + *--------------------------------------------------------------------------------------*/ + mvr2r( exc_wo_nf, exc, L_FRAME ); + + return; +} + + +/*-------------------------------------------------------------------* + * encod_gen_2sbfr() + * + * Encode GC, 2 subframes mode + *-------------------------------------------------------------------*/ + +void encod_gen_2sbfr( + Encoder_State *st, /* i/o: state structure */ + const float speech[], /* i : input speech */ + const float Aw[], /* i : weighted A(z) unquantized for subframes */ + const float Aq[], /* i : LP coefficients */ + const float *res, /* i : residual signal */ + float *syn, /* i/o: core synthesis */ + float *exc, /* i/o: current non-enhanced excitation */ + float *exc2, /* i/o: current enhanced excitation */ + float *pitch_buf, /* i/o: floating pitch values for each subframe */ + float *voice_factors, /* o : voicing factors */ + float *bwe_exc, /* o : excitation for SWB TBE */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ +) +{ + float xn[2 * L_SUBFR]; /* Target vector for pitch search */ + float xn2[2 * L_SUBFR]; /* Target vector for codebook search */ + float cn[2 * L_SUBFR]; /* Target vector in residual domain */ + float h1[2 * L_SUBFR + ( M + 1 )]; /* Impulse response vector */ + float code[2 * L_SUBFR]; /* Fixed codebook excitation */ + float y1[2 * L_SUBFR]; /* Filtered adaptive excitation */ + float y2[2 * L_SUBFR]; /* Filtered algebraic excitation */ + float gain_pit; /* Pitch gain */ + float voice_fac; /* Voicing factor */ + float gain_code; /* Gain of code */ + float gain_inov; /* inovation gain */ + int16_t L_frame, coder_type; /* L_frame; coder type */ + int16_t i, i_subfr; /* tmp variables */ + int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ + int16_t T0_min, T0_max; /* pitch variables */ + float *pt_pitch; /* pointer to floating pitch buffer */ + float g_corr[6]; /* ACELP correl, values + gain pitch */ + float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ + int16_t clip_gain; /* LSF clip gain */ + const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector*/ + float norm_gain_code; + int16_t pitch_limit_flag; + float error; + + LPD_state_HANDLE hLPDmem = st->hLPDmem; + + /*------------------------------------------------------------------* + * Initializations + *------------------------------------------------------------------*/ + + gain_pit = 0; + gain_code = 0; + error = 0.0f; + + T0_max = PIT_MAX; + T0_min = PIT_MIN; + + L_frame = L_FRAME; + coder_type = GENERIC; + + p_Aw = Aw; + p_Aq = Aq; + pt_pitch = pitch_buf; + + /*------------------------------------------------------------------* + * ACELP subframe loop + *------------------------------------------------------------------*/ + + for ( i_subfr = 0; i_subfr < L_frame; i_subfr += 2 * L_SUBFR ) + { + /*----------------------------------------------------------------* + * Find the the excitation search target "xn" and innovation + * target in residual domain "cn" + * Compute impulse response, h1[], of weighted synthesis filter + *----------------------------------------------------------------*/ + + mvr2r( &res[i_subfr], &exc[i_subfr], 2 * L_SUBFR ); + + find_targets( speech, hLPDmem->mem_syn, i_subfr, &hLPDmem->mem_w0, p_Aq, res, 2 * L_SUBFR, p_Aw, st->preemph_fac, xn, cn, h1 ); + + /*------------------------------------------------------------------------* + * Close-loop pitch search on the 1st and 3rd subfr only and quantization + * Adaptive exc. construction + *------------------------------------------------------------------------*/ + + *pt_pitch = pit_encode( st->hBstr, st->acelp_cfg.pitch_bits, st->core_brate, 0, L_frame, coder_type, &pitch_limit_flag, i_subfr, exc, 2 * L_SUBFR, st->pitch, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); + + tbe_celp_exc( st->element_mode, st->idchan, bwe_exc, L_frame, 2 * L_SUBFR, i_subfr, T0, T0_frac, &error, st->tdm_LRTD_flag ); + + /*-----------------------------------------------------------------* + * Find adaptive exitation + *-----------------------------------------------------------------*/ + + pred_lt4( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, 2 * L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + /*-----------------------------------------------------------------* + * Gain clipping test to avoid unstable synthesis on frame erasure + *-----------------------------------------------------------------*/ + + clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, coder_type, xn, st->clip_var ); + + /*-----------------------------------------------------------------* + * LP filtering of the adaptive excitation, codebook target computation + *-----------------------------------------------------------------*/ + + lp_filt_exc_enc( MODE1, coder_type, i_subfr, exc, h1, xn, y1, xn2, 2 * L_SUBFR, L_frame, g_corr, clip_gain, &gain_pit, &st->acelp_cfg.ltf_mode ); + + /* update long-term pitch gain for speech/music classifier */ + st->hSpMusClas->lowrate_pitchGain = 0.9f * st->hSpMusClas->lowrate_pitchGain + 0.1f * gain_pit; + + /*-----------------------------------------------------------------* + * Innovation encoding + *-----------------------------------------------------------------*/ + + inov_encode( st, st->core_brate, 0, L_frame, st->last_L_frame, coder_type, st->bwidth, st->sharpFlag, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code, *pt_pitch, xn2, code, y2, &i, 2 * L_SUBFR ); + + /*-----------------------------------------------------------------* + * Gain encoding + *-----------------------------------------------------------------*/ + + gain_enc_lbr( st->hBstr, st->acelp_cfg.gains_mode, coder_type, i_subfr, xn, y1, y2, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, gains_mem, clip_gain, 2 * L_SUBFR ); + + if ( st->Opt_SC_VBR ) + { + if ( st->hSC_VBR->last_ppp_mode == 1 ) + { + /* SC-VBR - all other st->clip_var values will be updated even in a PPP frame */ + st->clip_var[1] = gain_pit; + } + } + + /*-----------------------------------------------------------------* + * update LP-filtered gains for the case of frame erasures + *-----------------------------------------------------------------*/ + + gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); + + hLPDmem->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, 2 * L_SUBFR, 0 ); + + /*-----------------------------------------------------------------* + * Update memory of the weighting filter + *-----------------------------------------------------------------*/ + + hLPDmem->mem_w0 = xn[2 * L_SUBFR - 1] - ( gain_pit * y1[2 * L_SUBFR - 1] ) - ( gain_code * y2[2 * L_SUBFR - 1] ); + + /*-----------------------------------------------------------------* + * Construct adaptive part of the excitation + * Save the non-enhanced excitation for FEC_exc + *-----------------------------------------------------------------*/ + + for ( i = 0; i < 2 * L_SUBFR; i++ ) + { + exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; + exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; + } + + /*-----------------------------------------------------------------* + * Prepare TBE excitation + *-----------------------------------------------------------------*/ + + prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, 0, NULL, T0, coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); + + voice_factors[i_subfr / L_SUBFR + 1] = voice_factors[i_subfr / L_SUBFR]; + + /*-----------------------------------------------------------------* + * Synthesize speech to update mem_syn[]. + * Update A(z) filters + *-----------------------------------------------------------------*/ + + syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], 2 * L_SUBFR, hLPDmem->mem_syn, 1 ); + + p_Aw += 2 * ( M + 1 ); + p_Aq += 2 * ( M + 1 ); + + pt_pitch++; + *pt_pitch = *( pt_pitch - 1 ); + pt_pitch++; + } + + /* SC-VBR */ + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->prev_ppp_gain_pit = gain_pit; + st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code; + } + + return; +} diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c new file mode 100644 index 0000000000..f5725b48af --- /dev/null +++ b/lib_enc/ivas_tcx_core_enc.c @@ -0,0 +1,908 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "basop_proto_func.h" +#include "wmops.h" +#include "ivas_prot.h" + +/*-------------------------------------------------------------------* + * stereo_tcx_init_enc() + * + * Initialize stereo TCX encoder + *-------------------------------------------------------------------*/ + +void stereo_tcx_init_enc( + Encoder_State *st /* i/o: encoder state structure */ +) +{ + assert( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ); + + /* Get the raw coder type from signal analysis*/ + st->coder_type = st->coder_type_raw; + if ( !st->localVAD ) + { + st->coder_type = INACTIVE; + } + else if ( st->coder_type > GENERIC ) + { + st->coder_type = GENERIC; + } + + if ( st->tcxonly ) + { + st->coder_type = GENERIC; + } + + st->hTcxCfg->coder_type = st->coder_type; + if ( !st->tcxonly && !st->localVAD && st->hTcxCfg->coder_type == GENERIC ) + { + st->hTcxCfg->coder_type = UNVOICED; + } + + /*sampling rate*/ + st->sr_core = getCoreSamplerateMode2( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->flag_ACELP16k, st->rf_mode ); + st->fscale = sr2fscale( st->sr_core ); + + /*frame size*/ + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + st->hTcxEnc->L_frameTCX = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); + + if ( ( st->L_frame == L_FRAME16k && ( st->bits_frame_nominal * FRAMES_PER_SEC ) <= MAX_ACELP_BRATE ) || ( st->tcxonly && ( st->sr_core == INT_FS_16k || st->sr_core == INT_FS_16k ) ) ) + { + st->nb_subfr = NB_SUBFR16k; + } + else + { + st->nb_subfr = NB_SUBFR; + } + + /*TCX tools*/ + st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_mode ); + st->hTcxCfg->resq = getResq( st->bits_frame_nominal * FRAMES_PER_SEC ); + st->hTcxEnc->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_mode, st->element_mode ); + st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_mode, st->mct_chan_mode ); + + st->core_brate = st->total_brate; + + return; +} + +/*-------------------------------------------------------------------* + * stereo_tcx_core_enc() + * + * Stereo TCX encoder + *-------------------------------------------------------------------*/ + +void stereo_tcx_core_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float new_samples_12k8[], /* i : buffer of input signal @12.8 kHz */ + const float new_samples_16k[], /* i : buffer of input signal @16 kHz */ + const float Aw[], /* i : weighted A(z) unquant. for subframes*/ + float lsp_new[], /* i : LSPs at the end of the frame */ + float lsp_mid[], /* i : LSPs in the middle of the frame */ + float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ + const int16_t last_element_mode, /* i : last element mode */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + TCX_ENC_HANDLE hTcxEnc; + int16_t i, n; + + /*size and windowing*/ + const float *p_new_samples; + int16_t n_subframes; + int16_t last_core_orig; + + /*Bits*/ + int16_t nbits_start, total_nbbits, nbits_header; + int16_t target_bits[2], bitsAvailable; + int16_t nbits_lpc[2]; + int16_t tnsSize[2]; /* number of tns parameters put into prm */ + int16_t tnsBits[2]; /* number of tns bits in the frame */ + int16_t ltpBits; + + /*Parameters*/ + int16_t param_lpc[NPRM_LPC_NEW]; + int16_t param_core[2 * NPRM_DIV]; + int16_t bits_param_lpc[10], no_param_lpc; + + /*LPC*/ + float lsf_q[M], lsp_q[M], lsp[M], lsf[M]; + float lspmid_q[M]; + float A_q[M + 1]; + float gainlpc[2][FDNS_NPTS]; + float lsp_tcx_q[M], lsf_tcx_q[M]; + int16_t tcx_lpc_cdk; + Word16 A_q_ind[M + 1]; /*for LPC-based AC*/ + Word16 lspq_ind[M]; /*for LPC-based AC*/ + + /*TCX-LTP*/ + int16_t T_op[3]; + + /*HM*/ + int16_t indexBuffer[2 * ( ( N_MAX / 2 ) + 1 )]; + CONTEXT_HM_CONFIG hm_cfg[2]; + + /* bitstream */ + BSTR_ENC_HANDLE hBstr = st->hBstr; + +#ifdef DEBUG_MODE_TCX + static FILE *pF = NULL; + if ( pF == NULL ) + pF = fopen( "./res/stereo_tcx_enc_ind.txt", "w" ); +#endif + + wmops_sub_start( "stereo_tcx_core_enc" ); + + /*Sanity check*/ + assert( st->mdct_sw == MODE1 && "MDCT switching should be in TCX MODE 1\n" ); + assert( st->rf_mode == 0 && "Channel aware not supported! " ); + + no_param_lpc = 0; + n_subframes = 1; + + hTcxEnc = st->hTcxEnc; + + /*--------------------------------------------------------------* + * Configuration of TCX + *---------------------------------------------------------------*/ + + stereo_tcx_init_enc( st ); + + /*--------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------*/ + + /* Subtract the bits of common header */ + st->bits_frame_core = (int16_t) ( st->total_brate / FRAMES_PER_SEC ) - hBstr->nb_bits_tot; + + /*Get Bits of TCX header*/ +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + nbits_header = 2; /* Coder types (2) */ +#else + nbits_header = 3; /* Coder types (2) + last_core for bfi (1) */ +#endif + + if ( st->tcxonly ) + { + /* TCX20/10 flag */ + nbits_header++; + } + + /* bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ + nbits_header += ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; + + hm_cfg[0].indexBuffer = &indexBuffer[0]; + hm_cfg[1].indexBuffer = &indexBuffer[N_MAX / 2 + 1]; + + set_s( tnsSize, 0, 2 ); + set_s( tnsBits, 0, 2 ); + set_s( nbits_lpc, 0, 2 ); + ltpBits = 0; + + for ( i = 0; i < 3; i++ ) + { + T_op[i] = st->pitch[i]; + + /* check minimum pitch for quantization */ + if ( T_op[i] < PIT_MIN_SHORTER ) + { + T_op[i] *= 2; + } + + /* convert pitch values to core sampling-rate */ + if ( st->L_frame != L_FRAME ) + { + T_op[i] = (int16_t) ( T_op[i] * (float) st->L_frame / (float) L_FRAME + 0.5f ); + } + } + + if ( st->L_frame == L_FRAME ) + { + p_new_samples = new_samples_12k8; + } + else + { + p_new_samples = new_samples_16k; + } + + /*--------------------------------------------------------------* + * TCX20/TCX10 switching decision + *---------------------------------------------------------------*/ + + if ( hTcxEnc->tcxMode == TCX_10 ) + { + st->core = TCX_10_CORE; + n_subframes = 2; +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + nbits_header += ( st->hTcxCfg->tcx_last_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? 2 : 1; +#endif + } + else if ( hTcxEnc->tcxMode == TCX_20 ) + { + st->core = TCX_20_CORE; + n_subframes = 1; +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + nbits_header += 1; /* last core for bfi */ +#endif + } + +#ifdef DEBUG_MODE_TCX + fprintf( pF, "== stereo Chan %d - Nominal Bits %d - Allocated Bits %d ==\n", st->idchan, st->bits_frame_nominal, (int16_t) ( st->total_brate / FRAMES_PER_SEC ) ); + fprintf( pF, "stereo Common Header: %d bits\n", hBstr->nb_bits_tot ); +#endif + nbits_start = hBstr->nb_bits_tot; + + /*--------------------------------------------------------------------------------* + * Write TCX signalling + *--------------------------------------------------------------------------------*/ + + /* TCX20/TCX10 and coder type */ +#ifdef FIX_IVAS_185_MDCT_ST_PLC_FADEOUT + writeTCXMode( st, hBstr, 0, /* <- is_mct */ &nbits_start ); +#else + writeTCXMode( st, hBstr, &nbits_start ); +#endif + + /* write last_core for error concealment */ +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + if ( st->core == TCX_20_CORE ) + { + push_next_indice( hBstr, ( st->last_core != ACELP_CORE || st->core == TCX_10_CORE ), 1 ); + } +#else + push_next_indice( hBstr, ( st->last_core != ACELP_CORE || st->core == TCX_10_CORE ), 1 ); +#endif + + /* write TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ +#ifdef FIX_IVAS_180_PLC_SIGNAL_LAST_OVLP_IN_TCX10 + writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); + if ( st->core == TCX_10_CORE ) + { + writeTCXWindowing( hBstr, st->hTcxCfg->tcx_last_overlap_mode ); + } +#else + writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); +#endif + + assert( nbits_header == ( hBstr->nb_bits_tot - nbits_start ) ); +#ifdef DEBUG_MODE_TCX + fprintf( pF, "\t TCX Header: %d bits: %d %d %d %d\n", hBstr->nb_bits_tot - nbits_start, st->tcxonly, st->core, st->tcxonly ? st->clas : st->hTcxCfg->coder_type, st->hTcxCfg->tcx_curr_overlap_mode ); +#endif + + /*--------------------------------------------------------------* + * Core Signal Analysis: MDCT, TNS, LPC analysis + *---------------------------------------------------------------*/ + + core_signal_analysis_high_bitrate( p_new_samples, T_op, lsp_new, lsp_mid, st, NULL, tnsSize, tnsBits, param_core, <pBits, NULL, st->L_frame, hTcxEnc->L_frameTCX, last_element_mode, vad_hover_flag ); + + bitsAvailable = st->bits_frame_core - nbits_header; + if ( st->igf ) + { + bitsAvailable -= st->hIGFEnc->infoTotalBitsWritten; + } + + /*--------------------------------------------------------------* + * Envelope Quantization and FDNS + *---------------------------------------------------------------*/ + + if ( !st->enableTcxLpc ) + { + if ( st->envWeighted ) + { + /* Unweight the envelope */ + E_LPC_lsp_unweight( st->lsp_old, st->lsp_old, st->lsf_old, 1.0f / st->gamma ); + st->envWeighted = 0; + } + + lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, AUDIO, 0, /*No acelp->no need to compute any mid-LPC*/ + param_lpc, nbits_lpc, bits_param_lpc, &no_param_lpc ); + + /*--------------------------------------------------------------* + * Rate switching + *--------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + mvr2r( lsp_q, st->lsp_old, M ); + mvr2r( lsf_q, st->lsf_old, M ); + } + } + + last_core_orig = st->last_core; + for ( n = 0; n < n_subframes; n++ ) + { + /* Get the envelope */ + if ( st->enableTcxLpc ) + { + tcx_lpc_cdk = tcxlpc_get_cdk( st->hTcxCfg->coder_type ); + + /* Get the envelope corresponding to the current frame */ + E_LPC_int_lpc_tcx( st->lspold_enc, lsp_new, A_q ); + + /* Weight the envelope */ + weight_a( A_q, A_q, st->gamma, M ); + + /* Convert to lsp and lsf */ + a2lsp_stab( A_q, lsp, lsp_new ); + lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); + + /* Quantize */ + Q_lsf_tcxlpc( lsf, lsf_tcx_q, lspq_ind, param_lpc, st->narrowBand, tcx_lpc_cdk, st->mem_MA, st->hTcxCfg->coder_type, st->Bin_E ); + + /* Account for consumed bits */ + nbits_lpc[0] = TCXLPC_NUMBITS; + if ( param_lpc[0] ) + { + nbits_lpc[0] += TCXLPC_IND_NUMBITS; + } + + /* Convert quantized lsf to lsp and A */ + lsf2lsp( lsf_tcx_q, lsp_tcx_q, M, INT_FS_12k8 ); + lsp2a_stab( lsp_tcx_q, A_q, M ); + } + else if ( !st->tcxonly ) + { + E_LPC_int_lpc_tcx( st->lsp_old, lsp_q, A_q ); + } + else if ( n + 2 == n_subframes ) /* First TCX10/5 subframe */ + { + lsp2a_stab( lspmid_q, A_q, M ); + } + else + { + lsp2a_stab( lsp_q, A_q, M ); + } + + if ( hTcxEnc->tcx_lpc_shaped_ari ) + { + basop_E_LPC_f_lsp_a_conversion( lspq_ind, A_q_ind, M ); + } + + bitsAvailable -= nbits_lpc[n]; + + /* Shape spectrum */ + ShapeSpectrum( st->hTcxCfg, A_q, gainlpc[n], st->L_frame / n_subframes, st->hTcxCfg->tcx_coded_lines / n_subframes, hTcxEnc->spectrum[n], hTcxEnc->fUseTns[n], st, NULL ); + + st->last_core = st->core; + } + + st->last_core = last_core_orig; + + /*--------------------------------------------------------------------------------* + * Write LPC parameters + *--------------------------------------------------------------------------------*/ + + n = st->coder_type; /* IVAS_fmToDo: hack to keep bit-exactness -> TBV */ + st->coder_type = INACTIVE; + writeLPCparam( st, hBstr, param_lpc, bits_param_lpc, no_param_lpc, &total_nbbits ); + st->coder_type = n; + + assert( total_nbbits == ( nbits_lpc[0] + nbits_lpc[1] ) ); +#ifdef DEBUG_MODE_TCX + fprintf( pF, "\t TCX LPC: %d bits\n", total_nbbits ); +#endif + + /*--------------------------------------------------------------* + * Run TCX10/20 Core + *---------------------------------------------------------------*/ + + hTcxEnc->measuredBwRatio = 1.f; + + for ( n = 0; n < n_subframes; n++ ) + { + target_bits[n] = ( bitsAvailable + ( n_subframes - 1 ) - n ) / n_subframes - tnsBits[n]; + + if ( st->enablePlcWaveadjust && ( n == n_subframes - 1 ) ) + { + target_bits[n] -= 1; + } + if ( n == 0 ) + { + target_bits[n] -= ltpBits; + } + + /* Run TCX20/10 encoder */ + QuantizeSpectrum( st, A_q, A_q_ind, gainlpc[n], st->synth + n * st->L_frame / n_subframes, target_bits[n], tnsSize[n], param_core + n * NPRM_DIV, n, &hm_cfg[n], vad_hover_flag ); + } + + /* Update tcx overlap mode */ + st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; + + coder_tcx_post( st, A_q, Aw ); + + if ( st->enableTcxLpc ) + { + E_LPC_lsp_unweight( lsp_tcx_q, lsp_q, lsf_q, 1.0f / st->gamma ); /* Update lsf_q for encoderSideLossSimulation() */ + } + + /* Update lsp/lsf memory */ + if ( st->enableTcxLpc && st->core != ACELP_CORE ) + { + /* Update lsf / lsp memory */ + mvr2r( lsf_tcx_q, st->lsf_old, M ); + mvr2r( lsp_tcx_q, st->lsp_old, M ); + st->envWeighted = 1; + + /* Update ACELP quantizer state */ + lsf_update_memory( st->narrowBand, st->lsf_old, st->mem_MA, st->mem_MA ); + st->pstreaklen = 0; + st->streaklimit = 1.0f; + /* check resonance for pitch clipping algorithm */ + gp_clip_test_lsf( st->element_mode, st->core_brate, st->lsf_old, st->clip_var, 0 ); + mvr2r( st->lsf_old, st->mem_AR, M ); + } + else + { + mvr2r( lsf_q, st->lsf_old, M ); + mvr2r( lsp_q, st->lsp_old, M ); + } + + if ( st->Opt_DTX_ON && !st->tcxonly ) + { + /* update CNG parameters in active frames */ + if ( st->bwidth == NB && st->enableTcxLpc && st->core != ACELP_CORE ) + { + float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; + + assert( st->L_frame == L_FRAME ); + + mvr2r( st->synth + L_FRAME - L_LP, buf, L_LP ); + tmp = st->synth[L_FRAME - L_LP - 1]; + preemph( buf, st->preemph_fac, L_LP, &tmp ); + autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); + lag_wind( r, M, INT_FS_12k8, LAGW_WEAK ); + lev_dur( A, r, M, NULL ); + a2lsp_stab( A, lsptmp, lsp_new ); + + residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); + + cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); + } + else + { + cng_params_upd( lsp_new, st->hLPDmem->old_exc + L_EXC_MEM - st->L_frame, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); + } + + if ( st->L_frame == L_FRAME ) + { + /* store LSPs@16k, potentially to be used in CNG@16k */ + mvr2r( st->lsp_old16k, &( st->hTdCngEnc->ho_lsp_circ2[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); + } + + /* Set 16k LSP flag for CNG buffer */ + st->hTdCngEnc->ho_16k_lsp[st->hTdCngEnc->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); + + /* efficient DTX hangover control */ + if ( st->hTdCngEnc->burst_ho_cnt > 1 ) + { + dtx_hangover_control( st, lsp_new ); + } + } + +#ifdef DEBUG_MODE_TCX + { + int16_t tmp[L_FRAME48k]; + + for ( i = 0; i < st->L_frame; i++ ) + { + tmp[i] = (int16_t) ( st->synth[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), st->L_frame, 1, "./res/stereo_tcx_enc_synth.pcm" ); + + for ( i = 0; i < st->L_frame; i++ ) + { + tmp[i] = (int16_t) ( st->speech_enc[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), st->L_frame, 1, "./res/stereo_tcx_enc_inLB.pcm" ); + + for ( i = 0; i < hTcxEnc->L_frameTCX; i++ ) + { + tmp[i] = (int16_t) ( st->hTcxEnc->speech_TCX[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), hTcxEnc->L_frameTCX, 1, "./res/stereo_tcx_enc_inFB.pcm" ); + } +#endif + + /*--------------------------------------------------------------------------------* + * Encode TCX20/10 parameters + *--------------------------------------------------------------------------------*/ + + writeTCXparam( st, hBstr, hm_cfg, param_core, nbits_header, nbits_start, nbits_lpc[0] + nbits_lpc[1], NULL, NULL, NULL, -1 ); + + total_nbbits = hBstr->nb_bits_tot - nbits_start; + +#ifdef DEBUG_MODE_TCX + { + static FILE *sP = NULL; + + if ( sP == NULL ) + sP = fopen( "./res/stereo_tcx_core_enc_swicthes.txt", "w" ); + + fprintf( sP, "frame:%d\t mdct_sw=%d\t rf_mode=%d tcxonly=%d\t tcxMode=%d\t core=%d\t, enableTcxLpc=%d\t igf=%d\t envWeighted=%d\t lpcQuantization=%d\t enablePlcWaveadjust=%d\t tcxltp=%d\t fIsTNSAllowed=%d\t tcx_lpc_shaped_ari=%d\t ctx_hm=%d\t \n", frame, st->mdct_sw, st->rf_mode, st->tcxonly, hTcxEnc->tcxMode, st->core, st->enableTcxLpc, st->igf, st->envWeighted, st->lpcQuantization, st->enablePlcWaveadjust, hTcxEnc->tcxltp, st->hTcxCfg->fIsTNSAllowed, hTcxEnc->tcx_lpc_shaped_ari, st->hTcxCfg->ctx_hm ); + } +#endif + + if ( param_core[1 + NOISE_FILL_RANGES] != 0 ) + { + set_f( pitch_buf, hTcxEnc->tcxltp_pitch_int + (float) hTcxEnc->tcxltp_pitch_fr / (float) st->pit_res_max, NB_SUBFR16k ); + } + else + { + set_f( pitch_buf, L_SUBFR, NB_SUBFR16k ); + } + + wmops_sub_end(); + return; +} + + +/*-------------------------------------------------------------------* + * ivas_acelp_tcx20_switching() + * + * Open-loop ACELP/TCX20 core decision + *-------------------------------------------------------------------*/ + +/*! r: S/M decision (0=speech or noise,1=unclear,2=music) */ +int16_t ivas_acelp_tcx20_switching( + Encoder_State *st, /* i/o: encoder state structure */ + const float *inp, /* i : new input signal */ + const float *wsp, /* i : input weighted signal */ + const float non_staX, /* i : unbound non-stationarity for sp/mu clas.*/ + const float *pitch_fr, /* i : fraction pitch values */ + const float *voicing_fr, /* i : fractional voicing values */ + const float currFlatness, /* i : flatness */ + const float lsp_mid[M], /* i : LSPs at the middle of the frame */ + const float stab_fac, /* i : LP filter stability */ + float *res_cod_SNR_M, + const int16_t flag_16k_smc /* i : flag to compute parameters with 16kHz core */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t i, j; + float A_q_tcx[NB_SUBFR16k * ( M + 1 )]; + float dsnr, snr_tcx, snr_acelp; + int16_t iter; + float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; + float window[L_LOOK_16k]; + float Ap[M + 1]; + float gainlpc[FDNS_NPTS]; + float en[N_MAX / 4]; + float sqGain, ener, tmp, fac, offset; + int16_t L_frame, L_frame_tmp, L_loop; + int16_t overlap; + int16_t tcx_offset; + float *x; + float target; + int16_t T0; + float gain, noise, scale; + float *pt_ener_sfr, ener_sfr[NB_SUBFR16k]; + float pitch_fr_local[4], voicing_fr_local[4]; + int16_t smc_dec_ol; + float y[N_MAX]; + + /* Initialization */ + L_frame = flag_16k_smc ? st->L_frame : L_FRAME; + L_frame_tmp = L_frame; + + x = hTcxEnc->spectrum_long; + + /* Check minimum pitch for quantization */ + for ( i = 0; i < 4; i++ ) + { + pitch_fr_local[i] = pitch_fr[i]; + voicing_fr_local[i] = voicing_fr[i]; + } + + lsp2a_stab( lsp_mid, A_q_tcx, M ); + + /*--------------------------------------------------------------* + * Estimate TCX SNR + *---------------------------------------------------------------*/ + + target = 850.f; + if ( flag_16k_smc ) + { + tcx_offset = st->hTcxCfg->tcx_offset; + + if ( st->last_core == ACELP_CORE ) + { + L_frame += tcx_offset; + + if ( st->hTcxCfg->lfacNext < 0 ) + { + L_frame -= st->hTcxCfg->lfacNext; + tcx_offset = st->hTcxCfg->lfacNext; + } + else + { + tcx_offset = 0; + } + } + + overlap = st->hTcxCfg->tcx_mdct_window_delay; + mvr2r( st->hTcxCfg->tcx_mdct_window, window, L_LOOK_16k ); + } + else + { + overlap = L_LOOK_12k8; + tcx_offset = ( overlap >> 1 ); + mdct_window_sine( window, INT_FS_12k8, overlap, FULL_OVERLAP, st->element_mode ); + + if ( st->last_core == ACELP_CORE ) + { + L_frame += L_frame / 4; + tcx_offset -= L_frame / 4; + } + } + mvr2r( inp - ( overlap >> 1 ) + tcx_offset, xn_buf, L_frame + overlap ); + + if ( st->last_core == ACELP_CORE ) + { + if ( ( tcx_offset < 0 && flag_16k_smc ) || !flag_16k_smc ) + { + set_f( xn_buf, 0.0f, overlap >> 1 ); + } + } + else + { + for ( i = 0; i < overlap; i++ ) + { + xn_buf[i] *= window[i]; + } + } + + for ( i = 0; i < overlap; i++ ) + { + xn_buf[L_frame + i] *= window[overlap - 1 - i]; + } + + TCX_MDCT( xn_buf, x, overlap, L_frame - overlap, overlap, st->element_mode ); + + for ( i = 0; i < L_frame; i++ ) + { + x[i] *= (float) L_frame / sqrtf( 2 * NORM_MDCT_FACTOR ); + y[i] = x[i]; + } + + weight_a( A_q_tcx, Ap, GAMMA1, M ); + + lpc2mdct( Ap, M, gainlpc, FDNS_NPTS, 0 ); + + mdct_preShaping( x, L_frame, gainlpc ); + + for ( i = 0; i < L_frame; i += 4 ) + { + ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; + en[i / 4] = 9.0f + 10.0f * log10f( ener ); + } + + fac = 128.0f; + offset = fac; + + for ( iter = 0; iter < 10; iter++ ) + { + fac *= 0.5f; + offset -= fac; + ener = 0.0f; + + for ( i = 0; i < L_frame / 4; i++ ) + { + tmp = en[i] - offset; + + if ( tmp > 3.0f ) + { + ener += tmp; + } + + if ( ener > target ) + { + offset += fac; + break; + } + } + } + + if ( offset <= 32.f ) + { + offset = -128.f; + } + + sqGain = powf( 10.0f, offset / 20.0f ); + ener = sqGain * sqGain / 12.f * sqrtf( 2.f ) / (float) L_frame; + + if ( !flag_16k_smc ) + { + int16_t *bands; + int16_t bands_20[8] = { 0, 5, 9, 19, 34, 51, 81, 111 }; + int16_t bands_25[8] = { 0, 4, 7, 15, 28, 40, 65, 89 }; + float nrg_s, nrg_n; + + /*Approximate SNR of TCX*/ + set_f( x, sqrtf( ener ), L_frame ); + mdct_noiseShaping( x, L_frame, gainlpc, FDNS_NPTS ); + + if ( st->last_core != ACELP_CORE ) + { + /*25Hz resolution*/ + bands = bands_25; + } + else + { + /*20Hz resolution*/ + bands = bands_20; + } + + for ( iter = 0; iter < 7; iter++ ) + { + nrg_s = 1e-6f; + nrg_n = 1e-6f; + for ( i = bands[iter]; i < bands[iter + 1]; i++ ) + { + nrg_s += y[i] * y[i]; + nrg_n += x[i] * x[i]; + } + res_cod_SNR_M[iter] = nrg_s / nrg_n; + } + } + + snr_tcx = 0.0f; + pt_ener_sfr = ener_sfr; + + L_loop = flag_16k_smc ? L_frame_tmp : L_frame; + + for ( i = 0; i < L_loop; i += L_SUBFR ) + { + *pt_ener_sfr = sum2_f( wsp + i, L_SUBFR ) + 1e-6f; + snr_tcx += log10f( *pt_ener_sfr / ( ener * L_SUBFR ) ); + pt_ener_sfr++; + } + snr_tcx *= ( (float) ( 10 * L_SUBFR ) ) / (float) L_loop; + + + /*--------------------------------------------------------------* + * Estimate ACELP SNR + *---------------------------------------------------------------*/ + + if ( flag_16k_smc ) + { + scale = 0.092f; + } + else + { + scale = 0.059f; + } + + snr_acelp = 0.0f; + fac = flag_16k_smc ? (float) st->sr_core / (float) INT_FS_12k8 : 1.0f; + L_loop = flag_16k_smc ? L_frame_tmp : L_FRAME; + + pt_ener_sfr = ener_sfr; + for ( i = 0; i < L_loop; i += L_SUBFR ) + { + T0 = (int16_t) ( ( fac * pitch_fr_local[(int16_t) ( (float) ( i / L_SUBFR ) / fac + 0.5f )] ) + 0.5f ); + gain = get_gain( wsp + i, wsp + i - T0, L_SUBFR, NULL ); + noise = 1e-6f; + for ( j = 0; j < L_SUBFR; j++ ) + { + tmp = wsp[i + j] - gain * wsp[i + j - T0]; + noise += tmp * tmp; + } + + noise *= scale; + snr_acelp += log10f( *pt_ener_sfr / noise ); + pt_ener_sfr++; + } + + snr_acelp *= ( (float) ( 10 * L_SUBFR ) ) / (float) L_loop; + + + /*--------------------------------------------------------------* + * Switching Decision + *---------------------------------------------------------------*/ + + dsnr = 0.0f; + /* hysteresis for very small SNR differences between ACELP and TCX */ + + /* try to use TCX instead of ACELP on temporally stationary frames */ + if ( ( snr_acelp > snr_tcx ) && ( snr_acelp < snr_tcx + 2.0f ) && + ( st->prevTempFlatness + currFlatness < 3.25f || stab_fac == 1.0f || + ( !flag_16k_smc && st->sp_aud_decision0 > 0 && st->prevTempFlatness + currFlatness < 20.f ) ) && + ( st->Nb_ACELP_frames <= 6 ) ) + { + dsnr = -2.0f; + } + + /* try to use ACELP instead of TCX on transient and "buzzy" frames */ + if ( ( snr_acelp < snr_tcx ) && + ( snr_acelp > snr_tcx - 2.0f ) && + ( st->prevTempFlatness + currFlatness > 3.25f ) && + ( st->Nb_ACELP_frames >= 6 ) ) + { + dsnr = 2.0f; + } + if ( ( !flag_16k_smc ) && ( offset < 74.0f ) && ( non_staX > 5.0f ) && ( snr_acelp >= snr_tcx - 4 ) && st->Nb_ACELP_frames >= 1 && ( ( ( st->hSpMusClas->lps > st->hSpMusClas->lpm ) && mean( voicing_fr_local, 4 ) >= 0.3f ) || ( st->Nb_ACELP_frames >= 6 && ( st->hSpMusClas->lps > st->hSpMusClas->lpm - 1.5f ) ) ) && ( st->sp_aud_decision0 == 0 ) && st->vad_flag ) + { + /* Fine tuned across various databases based on various metrics to detect TCX frames in speech.*/ + dsnr = 4.0f; + } + + if ( st->flag_noisy_speech_snr ) + { + + if ( st->vad_flag || st->Opt_DTX_ON ) + { + dsnr += 2.f; + } + else + { + dsnr -= 2.f; + } + } + + /* Select ACELP or TCX */ + if ( ( snr_acelp + dsnr > snr_tcx ) && ( st->sp_aud_decision0 == 0 || st->prevTempFlatness + currFlatness > 3.25f ) ) + { + smc_dec_ol = 0; + } + else + { + smc_dec_ol = 2; + } + +#ifdef DEBUGGING + if ( st->force == FORCE_SPEECH ) + { + /* enforce ACELP */ + smc_dec_ol = 0; + } + else if ( st->force == FORCE_MUSIC ) + { + /* enforce TCX */ + smc_dec_ol = 2; + } +#endif + + st->prevTempFlatness = currFlatness; + + return smc_dec_ol; +} diff --git a/lib_enc/lead_indexing.c b/lib_enc/lead_indexing.c new file mode 100644 index 0000000000..d97ccc6955 --- /dev/null +++ b/lib_enc/lead_indexing.c @@ -0,0 +1,211 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static int16_t fcb_encode_pos( const int16_t pos_vector[], const int16_t pulse_num, const int16_t pos_num ); + + +/*-------------------------------------------------------------------* + * re8_compute_base_index: + * + * Compute base index for RE8 + *-------------------------------------------------------------------*/ + +void re8_compute_base_index( + const int16_t *x, /* i : Elemen of Q2, Q3 or Q4 */ + const int16_t ka, /* i : Identifier of the absolute leader related to x */ + uint16_t *I /* o : index */ +) +{ + int16_t i, j, k1, m; + int16_t setor_8p[8], setor_8p_temp[8]; + int16_t sign_8p; + int16_t code_index, code_level, code_area; + uint16_t offset; + const int16_t *a1, *a2; + + a1 = vals_a[ka]; + a2 = vals_q[ka]; + + /* the sign process */ + + sign_8p = 0; + m = 0; + code_index = 0; + k1 = a2[0]; + + if ( ( a2[1] == 2 ) && ( a1[0] ^ 1 ) && ( ka != 5 ) ) + { + for ( i = 0; i < 8; i++ ) + { + if ( x[i] != 0 ) + { + sign_8p = sign_8p * 2; + setor_8p_temp[m] = i; + m++; + } + if ( x[i] < 0 ) + { + sign_8p += 1; + } + } + + code_index = fcb_encode_pos( setor_8p_temp, 8, m ); + code_index = ( code_index << k1 ) + sign_8p; + + offset = Is[ka]; + + + *I = offset + code_index; + } + else + { + for ( i = 0; i < 8; i++ ) + { + setor_8p[i] = (int16_t) abs( x[i] ); + + if ( x[i] < 0 ) + { + sign_8p = sign_8p * 2 + 1; + m++; + } + if ( x[i] > 0 ) + { + sign_8p = sign_8p * 2; + m++; + } + } + + if ( k1 != m ) + { + sign_8p = sign_8p >> 1; + } + + /* code level by level */ + + code_level = a2[1]; + code_area = 8; + + if ( a2[2] != 1 ) + { + for ( j = 0; j < code_level - 1; j++ ) + { + m = 0; + + for ( i = 0; i < code_area; i++ ) + { + if ( setor_8p[i] != a1[j] ) + { + setor_8p_temp[m] = i; + setor_8p[m] = setor_8p[i]; + m++; + } + } + code_index *= select_table22[m][code_area]; + + code_index += fcb_encode_pos( setor_8p_temp, code_area, m ); + + code_area = m; + } + } + else + { + for ( i = 0; i < code_area; i++ ) + { + if ( setor_8p[i] == a1[1] ) + { + code_index += i; + } + } + } + + code_index = ( code_index << k1 ) + sign_8p; + + offset = Is[ka]; + + *I = offset + code_index; + } + + return; +} + +/*-------------------------------------------------------------------* + * fcb_encode_pos: + * + * Base function to compute base index for RE8 + *-------------------------------------------------------------------*/ + +/*! r: Code index */ +static int16_t fcb_encode_pos( + const int16_t pos_vector[], /* i : Position vectort */ + const int16_t pulse_num, /* i : Pulse number */ + const int16_t pos_num /* i : Position number */ +) +{ + int16_t i, j; + int16_t code_index; + int16_t temp, temp1; + const int16_t *select_table23; + + temp = pulse_num - 1; + + select_table23 = select_table22[pos_num]; + + code_index = select_table23[pulse_num] - select_table23[pulse_num - pos_vector[0]]; + + for ( i = 0, j = 1; i < pos_num - 1; i++, j++ ) + { + temp1 = pos_num - j; + + select_table23 = select_table22[temp1]; + + code_index += select_table23[temp - pos_vector[i]] - select_table23[pulse_num - pos_vector[j]]; + } + + return code_index; +} diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c new file mode 100644 index 0000000000..93b43ee63f --- /dev/null +++ b/lib_enc/lib_enc.c @@ -0,0 +1,2073 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "lib_enc.h" +#include "ivas_prot.h" +#include "prot.h" +#include +#include +#include +#ifdef DEBUGGING +#include "debug.h" +#endif +#ifdef WMOPS +#include "wmops.h" +#endif + +/*---------------------------------------------------------------------* + * Local struct + *---------------------------------------------------------------------*/ + +struct IVAS_ENC +{ + Encoder_Struct *st_ivas; + Indice ind_list[MAX_NUM_DATA][MAX_NUM_INDICES]; /* list of indices */ + Indice ind_list_metadata[MAX_NUM_METADATA][MAX_BITS_METADATA]; /* list of indices for metadata */ + ENC_CORE_HANDLE hCoreCoder; + /* Some of these can be moved to Encoder_Struct, but for now leave them here to keep merging simpler */ + bool isConfigured; +#ifdef DEBUGGING + bool cmd_stereo; +#endif + bool switchingActive; /* flag for configuration changes during encoding - currently only used with mono */ + int16_t Opt_RF_ON_loc; + int16_t rf_fec_offset_loc; + bool ismMetadataProvided[MAX_NUM_OBJECTS]; + bool maxBandwidthUser; /* Was a specific max bandwith selected by the user? */ +}; + +/*---------------------------------------------------------------------* + * Local functions + *---------------------------------------------------------------------*/ + +static ivas_error configureEncoder( IVAS_ENC_HANDLE hIvasEnc, const int32_t inputFs, const int32_t initBitrate, const IVAS_ENC_BANDWIDTH initBandwidth, const IVAS_ENC_DTX_CONFIG dtxConfig, const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ); +static ivas_error setBandwidth( IVAS_ENC_HANDLE hIvasEnc, const IVAS_ENC_BANDWIDTH maxBandwidth ); +static ivas_error setBitrate( IVAS_ENC_HANDLE hIvasEnc, const int32_t totalBitrate ); +static ivas_error setChannelAwareConfig( IVAS_ENC_HANDLE hIvasEnc, const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ); +static int16_t getInputBufferSize( const Encoder_Struct *st_ivas ); +static ivas_error doCommonConfigureChecks( IVAS_ENC_HANDLE hIvasEnc ); +static ivas_error doCommonSetterChecks( IVAS_ENC_HANDLE hIvasEnc ); +static void updateBandwidthFromFs( const ENCODER_CONFIG_HANDLE hEncoderConfig ); +static void init_encoder_config( ENCODER_CONFIG_HANDLE hEncoderConfig ); +static void resetIsmMetadataProvidedFlags( IVAS_ENC_HANDLE hIvasEnc ); +static ivas_error bandwidthApiToInternal( const IVAS_ENC_BANDWIDTH maxBandwidth, int16_t *internalMaxBandwidth ); +static ivas_error fecIndicatorApiToInternal( const IVAS_ENC_FEC_INDICATOR fecIndicator, int16_t *fecIndicatorInternal ); +#ifdef DEBUGGING +static ivas_error forcedModeApiToInternal( IVAS_ENC_FORCED_MODE forcedMode, int16_t *forcedModeInternal ); +#endif + + +/*---------------------------------------------------------------------* + * IVAS_ENC_Open() + * + * Open IVAS encoder + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_Open( + IVAS_ENC_HANDLE *phIvasEnc /* i/o: pointer to an encoder handle to be opened */ +) +{ + Encoder_Struct *st_ivas; + int16_t i, j; + + if ( phIvasEnc == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + +#ifdef BITSTREAM_INDICES_MEMORY + if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) dynamic_malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) +#else + if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) count_malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) +#endif + { + return IVAS_ERR_FAILED_ALLOC; + } + + if ( ( ( *phIvasEnc )->st_ivas = (Encoder_Struct *) count_malloc( sizeof( Encoder_Struct ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS encoder structure" ); + } + + if ( ( ( *phIvasEnc )->st_ivas->hEncoderConfig = (ENCODER_CONFIG_HANDLE) count_malloc( sizeof( ENCODER_CONFIG ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Encoder config structure" ); + } + + /*-----------------------------------------------------------------* + * Initialize indices + *-----------------------------------------------------------------*/ + + for ( i = 0; i < MAX_NUM_DATA; ++i ) + { + for ( j = 0; j < MAX_NUM_INDICES; ++j ) + { + ( *phIvasEnc )->ind_list[i][j].nb_bits = 0; + ( *phIvasEnc )->ind_list[i][j].value = 0; + } + } + + for ( i = 0; i < MAX_NUM_METADATA; ++i ) + { + for ( j = 0; j < MAX_BITS_METADATA; ++j ) + { + ( *phIvasEnc )->ind_list_metadata[i][j].nb_bits = 0; + ( *phIvasEnc )->ind_list_metadata[i][j].value = 0; + } + } + + /*-----------------------------------------------------------------* + * Initialize encoder state + *-----------------------------------------------------------------*/ + + st_ivas = ( *phIvasEnc )->st_ivas; + st_ivas->hEncoderConfig->ivas_total_brate = ACELP_12k65; + st_ivas->hEncoderConfig->Opt_SC_VBR = 0; + st_ivas->hEncoderConfig->last_Opt_SC_VBR = 0; + + st_ivas->mc_mode = MC_MODE_NONE; + st_ivas->ism_mode = ISM_MODE_NONE; + st_ivas->sba_mode = SBA_MODE_NONE; + + init_encoder_config( st_ivas->hEncoderConfig ); + + ( *phIvasEnc )->hCoreCoder = NULL; + ( *phIvasEnc )->isConfigured = false; +#ifdef DEBUGGING + ( *phIvasEnc )->cmd_stereo = false; +#endif + ( *phIvasEnc )->switchingActive = false; + ( *phIvasEnc )->maxBandwidthUser = false; + resetIsmMetadataProvidedFlags( *phIvasEnc ); + + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_Close() + * + * + *---------------------------------------------------------------------*/ + +void IVAS_ENC_Close( + IVAS_ENC_HANDLE *phIvasEnc /* i/o: pointer to IVAS encoder handle */ +) +{ + /* Free all memory */ + if ( phIvasEnc == NULL || *phIvasEnc == NULL ) + { + return; + } + + if ( ( *phIvasEnc )->isConfigured ) + { + ivas_destroy_enc( ( *phIvasEnc )->st_ivas ); + } + else + { + if ( ( *phIvasEnc )->st_ivas->hEncoderConfig ) + { + count_free( ( *phIvasEnc )->st_ivas->hEncoderConfig ); + ( *phIvasEnc )->st_ivas->hEncoderConfig = NULL; + } + count_free( ( *phIvasEnc )->st_ivas ); + } + + ( *phIvasEnc )->st_ivas = NULL; + +#ifdef BITSTREAM_INDICES_MEMORY + dynamic_free( *phIvasEnc ); +#else + count_free( *phIvasEnc ); +#endif + + *phIvasEnc = NULL; + phIvasEnc = NULL; + + return; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_ConfigureForMono() + * + * Configure and initialize the mono encoder. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_ConfigureForMono( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig, /* i : configuration of channel-aware mode, can by set to default by using IVAS_ENC_GetDefaultChannelAwareConfig() */ + const bool downmixFromStereo /* i : if true, the encoder accepts a stereo input and internally downmixes it to mono before encoding */ +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + + if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + hIvasEnc->st_ivas->hEncoderConfig->ivas_format = MONO_FORMAT; + + if ( downmixFromStereo ) + { + hIvasEnc->st_ivas->hEncoderConfig->stereo_dmx_evs = 1; + } + hIvasEnc->maxBandwidthUser = max_bwidth_user; + + error = configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, caConfig ); + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_ConfigureForStereo() + * + * Configure and initialize the stereo encoder. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_ConfigureForStereo( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ +#ifdef DEBUGGING + , + const IVAS_ENC_STEREO_MODE stereoMode /* i : forces a specific stereo coding mode */ +#endif +) +{ + Encoder_Struct *st_ivas; + ENCODER_CONFIG_HANDLE hEncoderConfig; + + ivas_error error; + + if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + st_ivas = hIvasEnc->st_ivas; + hEncoderConfig = st_ivas->hEncoderConfig; + hEncoderConfig->nchan_inp = 2; + hEncoderConfig->ivas_format = STEREO_FORMAT; + +#ifdef DEBUGGING + switch ( stereoMode ) + { + case IVAS_ENC_STEREO_MODE_UNIFIED: + hEncoderConfig->stereo_mode_cmdl = 1; /* set unified stereo by default */ + hEncoderConfig->element_mode_init = IVAS_CPE_DFT; + hIvasEnc->cmd_stereo = true; + break; + case IVAS_ENC_STEREO_MODE_DFT: + hEncoderConfig->element_mode_init = IVAS_CPE_DFT; + hEncoderConfig->stereo_mode_cmdl = IVAS_CPE_DFT; + break; + case IVAS_ENC_STEREO_MODE_TD: + hEncoderConfig->stereo_mode_cmdl = IVAS_CPE_TD; + hEncoderConfig->element_mode_init = IVAS_CPE_TD; + break; + case IVAS_ENC_STEREO_MODE_MDCT_DECISION: + hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + hEncoderConfig->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; + break; +#ifdef DEBUG_FORCE_MDCT_STEREO_MODE + case IVAS_ENC_STEREO_MODE_MDCT_FORCE_LR: + hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + hEncoderConfig->mdct_stereo_mode_cmdl = SMDCT_FORCE_LR; + break; + case IVAS_ENC_STEREO_MODE_MDCT_FORCE_MS: + hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + hEncoderConfig->mdct_stereo_mode_cmdl = SMDCT_FORCE_MS; + break; +#endif + default: + return IVAS_ERR_INVALID_STEREO_MODE; + break; + } +#endif /* DEBUGGING */ + + hIvasEnc->maxBandwidthUser = max_bwidth_user; + + error = configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_ConfigureForObjects() + * + * Configure and initialize the ISM encoder. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_ConfigureForObjects( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const uint16_t numObjects /* i : number of objects to be encoded */ +) +{ + Encoder_Struct *st_ivas; + ivas_error error; + + if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( numObjects > MAX_NUM_OBJECTS ) + { + return IVAS_ERR_TOO_MANY_OBJECT_INPUTS; + } + + st_ivas = hIvasEnc->st_ivas; + st_ivas->hEncoderConfig->ivas_format = ISM_FORMAT; + st_ivas->hEncoderConfig->element_mode_init = IVAS_SCE; + st_ivas->hEncoderConfig->nchan_inp = numObjects; + + hIvasEnc->maxBandwidthUser = max_bwidth_user; + + error = configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_FeedObjectMetadata() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_FeedObjectMetadata( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const uint16_t ismIndex, /* i : object index */ + const IVAS_ISM_METADATA metadata /* i : object metadata handle for current frame */ +) +{ + ivas_error error; + + error = IVAS_ERR_OK; + + if ( !hIvasEnc->isConfigured ) + { + return IVAS_ERR_NOT_CONFIGURED; + } + + if ( hIvasEnc->st_ivas->hEncoderConfig->ivas_format != ISM_FORMAT ) + { + return IVAS_ERR_METADATA_NOT_EXPECTED; + } + + if ( ismIndex > hIvasEnc->st_ivas->hEncoderConfig->nchan_inp ) + { + return IVAS_ERR_INDEX_OUT_OF_BOUNDS; + } + + error = set_ism_metadata( hIvasEnc->st_ivas->hIsmMetaData[ismIndex], metadata.azimuth, metadata.elevation ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + + hIvasEnc->ismMetadataProvided[ismIndex] = true; + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_ConfigureForAmbisonics() + * + * Configure and initialize the SBA encoder. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_ConfigureForAmbisonics( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_SBA_ORDER order, /* i : order of the Ambisonics input */ + const bool isPlanar, /* i : if true, input is treated as planar Ambisonics */ + const bool Opt_AGC_ON, /* i : AGC on/off flag */ + const bool Opt_PCA_ON /* i : PCA option flag */ +) +{ + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + hEncoderConfig = hIvasEnc->st_ivas->hEncoderConfig; + + hEncoderConfig->ivas_format = SBA_FORMAT; + hEncoderConfig->element_mode_init = IVAS_SCE; /* Just needs to be something not mono, will be set later */ + hEncoderConfig->sba_planar = isPlanar; + hEncoderConfig->sba_order = order; + + /* Input in ACN/SN3D in all cases (3D and planar): get number of channels */ + hEncoderConfig->nchan_inp = ivas_sba_get_nchan( hEncoderConfig->sba_order, 0 ); /*planar input arg. deliberately set to zero since input always in ACN/SN3D*/ + + hEncoderConfig->Opt_AGC_ON = (int16_t) Opt_AGC_ON; + hEncoderConfig->Opt_PCA_ON = (int16_t) Opt_PCA_ON; + + hIvasEnc->maxBandwidthUser = max_bwidth_user; + + error = configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_ConfigureForMasa() + * + * Configure and initialize the MASA encoder. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_ConfigureForMasa( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_MASA_VARIANT masaVariant /* i : type of MASA input (either 1 or 2 channels) */ +) +{ + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + hEncoderConfig = hIvasEnc->st_ivas->hEncoderConfig; + + hEncoderConfig->ivas_format = MASA_FORMAT; + + switch ( masaVariant ) + { + case IVAS_ENC_MASA_1CH: + hEncoderConfig->nchan_inp = 1; + hEncoderConfig->element_mode_init = IVAS_SCE; + break; + case IVAS_ENC_MASA_2CH: + hEncoderConfig->nchan_inp = 2; +#ifdef DEBUGGING + hEncoderConfig->stereo_mode_cmdl = 1; /* set unified stereo by default */ +#endif + hEncoderConfig->element_mode_init = IVAS_CPE_DFT; /* initialization only, might be changed later based on element_brate */ + break; + default: + return IVAS_ERR_INVALID_MASA_CONFIG; + break; + } + + hIvasEnc->maxBandwidthUser = max_bwidth_user; + + error = configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_FeedMasaMetadata() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_FeedMasaMetadata( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + IVAS_MASA_METADATA_HANDLE hMasaMetadata /* i : MASA metadata for current frame */ +) +{ + if ( !hIvasEnc->isConfigured ) + { + return IVAS_ERR_NOT_CONFIGURED; + } + + if ( hIvasEnc->st_ivas->hEncoderConfig->ivas_format != MASA_FORMAT ) + { + return IVAS_ERR_METADATA_NOT_EXPECTED; + } + + hIvasEnc->st_ivas->hMasa->masaMetadata = *hMasaMetadata; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_ConfigureForMultichannel() + * + * Configure and initialize the MC encoder. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_ConfigureForMultichannel( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_MC_LAYOUT mcLayout /* i : inpu MC layput */ +) +{ + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + hEncoderConfig = hIvasEnc->st_ivas->hEncoderConfig; + + hEncoderConfig->ivas_format = MC_FORMAT; + hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; /*just for initialization*/ + + switch ( mcLayout ) + { + case IVAS_ENC_MC_5_1: + hEncoderConfig->mc_input_setup = MC_LS_SETUP_5_1; + break; + case IVAS_ENC_MC_7_1: + hEncoderConfig->mc_input_setup = MC_LS_SETUP_7_1; + break; + case IVAS_ENC_MC_5_1_2: + hEncoderConfig->mc_input_setup = MC_LS_SETUP_5_1_2; + break; + case IVAS_ENC_MC_5_1_4: + hEncoderConfig->mc_input_setup = MC_LS_SETUP_5_1_4; + break; + case IVAS_ENC_MC_7_1_4: + hEncoderConfig->mc_input_setup = MC_LS_SETUP_7_1_4; + break; + default: + return IVAS_ERR_INVALID_CICP_INDEX; + break; + } + + hIvasEnc->maxBandwidthUser = max_bwidth_user; + + error = configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); + + return error; +} + + +/*---------------------------------------------------------------------* + * configureEncoder() + * + * Configure the IVAS encoder. + *---------------------------------------------------------------------*/ + +static ivas_error configureEncoder( + IVAS_ENC_HANDLE hIvasEnc, + const int32_t inputFs, + const int32_t initBitrate, + const IVAS_ENC_BANDWIDTH initBandwidth, + const IVAS_ENC_DTX_CONFIG dtxConfig, + const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ) +{ + Encoder_Struct *st_ivas; + ENCODER_CONFIG_HANDLE hEncoderConfig; + ivas_error error; + + error = IVAS_ERR_OK; + + st_ivas = hIvasEnc->st_ivas; + hEncoderConfig = st_ivas->hEncoderConfig; + + /*-----------------------------------------------------------------* + * Bandwidth limitation + *-----------------------------------------------------------------*/ + + if ( ( error = setBandwidth( hIvasEnc, initBandwidth ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*-----------------------------------------------------------------* + * DTX/CNG + *-----------------------------------------------------------------*/ + + if ( dtxConfig.enabled ) + { + hEncoderConfig->Opt_DTX_ON = 1; + + if ( dtxConfig.variable_SID_rate ) + { + hEncoderConfig->var_SID_rate_flag = 1; + hEncoderConfig->interval_SID = 0; + } + else + { + hEncoderConfig->var_SID_rate_flag = 0; + + if ( dtxConfig.SID_interval >= 3 && dtxConfig.SID_interval <= 100 ) + { + hEncoderConfig->interval_SID = dtxConfig.SID_interval; + } + else + { + return IVAS_ERR_INVALID_DTX_UPDATE_RATE; + } + } + } + else + { + hEncoderConfig->Opt_DTX_ON = 0; + } + + /*-----------------------------------------------------------------* + * Bitrate + *-----------------------------------------------------------------*/ + + hEncoderConfig->ivas_total_brate = initBitrate; + + /* SC-VBR at 5.90 kbps */ + if ( hEncoderConfig->ivas_total_brate == ACELP_5k90 ) + { + hEncoderConfig->ivas_total_brate = ACELP_7k20; + hEncoderConfig->Opt_SC_VBR = 1; + hEncoderConfig->last_Opt_SC_VBR = hEncoderConfig->Opt_SC_VBR; + + if ( hEncoderConfig->max_bwidth != NB ) + { + hEncoderConfig->max_bwidth = WB; + } + } + + /* check if the entered bitrate is supported */ + if ( hEncoderConfig->ivas_format != UNDEFINED_FORMAT && hEncoderConfig->ivas_format != MONO_FORMAT ) /* IVAS */ + { + if ( !is_IVAS_bitrate( hEncoderConfig->ivas_total_brate ) ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Incorrect bitrate specification in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + + if ( hEncoderConfig->ivas_format == STEREO_FORMAT ) + { +#ifdef DEBUGGING + if ( hIvasEnc->cmd_stereo ) +#endif + { + hEncoderConfig->element_mode_init = IVAS_CPE_DFT; +#ifdef DEBUGGING + hEncoderConfig->stereo_mode_cmdl = 1; +#endif + if ( hEncoderConfig->ivas_total_brate >= MIN_BRATE_MDCT_STEREO ) + { + hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; +#ifdef DEBUGGING + hEncoderConfig->stereo_mode_cmdl = 0; +#endif + } + } + + if ( ( hEncoderConfig->element_mode_init == IVAS_CPE_TD || hEncoderConfig->element_mode_init == IVAS_CPE_DFT ) && hEncoderConfig->ivas_total_brate > IVAS_48k ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Too high bitrate for TD/DFT Stereo specified in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + + if ( hEncoderConfig->element_mode_init == IVAS_CPE_MDCT && hEncoderConfig->ivas_total_brate < IVAS_48k ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Too low bitrate for MDCT Stereo specified in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + + if ( hEncoderConfig->ivas_total_brate > IVAS_256k ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Too high bitrate for Stereo specified in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + } + else if ( hEncoderConfig->ivas_format == ISM_FORMAT ) + { + if ( hEncoderConfig->ivas_total_brate > IVAS_256k ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Too high bitrate for ISm specified in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + if ( hEncoderConfig->ivas_total_brate < IVAS_16k4 && hEncoderConfig->nchan_inp == 2 ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Too low bitrate for 2 ISm specified in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + if ( hEncoderConfig->ivas_total_brate < IVAS_24k4 && hEncoderConfig->nchan_inp == 3 ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Too low bitrate for 3 ISm specified in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + if ( hEncoderConfig->ivas_total_brate < IVAS_24k4 && hEncoderConfig->nchan_inp == 4 ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Too low bitrate for 4 ISm specified in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + } + else if ( hEncoderConfig->ivas_format == SBA_FORMAT ) + { + if ( hEncoderConfig->ivas_total_brate < IVAS_256k ) + { + /* set SBA order to 1 for bit rates below 256kbps for correct handling of input with higher order */ + /* IVAS_fmToDo: needs more work in case of bitrate switching */ + hEncoderConfig->sba_order = 1; + } + st_ivas->sba_mode = ivas_sba_mode_select( hEncoderConfig->ivas_total_brate ); // VE: is it needed here? + } + else if ( hEncoderConfig->ivas_format == MASA_FORMAT ) + { + /* adapt element_mode according to the bitrate */ + if ( hEncoderConfig->nchan_inp == 2 && hEncoderConfig->element_mode_init != IVAS_SCE ) + { + if ( hEncoderConfig->ivas_total_brate >= IVAS_48k ) + { + hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; + } + else if ( hEncoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + { + hEncoderConfig->element_mode_init = IVAS_CPE_DFT; + } + } + } + } + else /* EVS mono */ + { + hEncoderConfig->ivas_format = MONO_FORMAT; + hEncoderConfig->element_mode_init = EVS_MONO; + + if ( !is_EVS_bitrate( hEncoderConfig->ivas_total_brate, &hEncoderConfig->Opt_AMR_WB ) ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Incorrect bitrate specification in EVS mono: %d", hEncoderConfig->ivas_total_brate ); + } + + if ( hEncoderConfig->stereo_dmx_evs == 1 ) + { + hEncoderConfig->nchan_inp = 2; + } + } + + /*-----------------------------------------------------------------* + * Input sampling frequency + *-----------------------------------------------------------------*/ + + if ( inputFs != 8000 && inputFs != 16000 && inputFs != 32000 && inputFs != 48000 ) + { + return IVAS_ERR_INVALID_SAMPLING_RATE; + } + + hEncoderConfig->input_Fs = inputFs; + + updateBandwidthFromFs( hEncoderConfig ); + + /*-----------------------------------------------------------------* + * Channel-aware mode + *-----------------------------------------------------------------*/ + + if ( ( error = setChannelAwareConfig( hIvasEnc, caConfig ) ) != IVAS_ERR_OK ) + { + return error; + } + + /*-----------------------------------------------------------------* + * Set codec mode + *-----------------------------------------------------------------*/ + + st_ivas->codec_mode = MODE1; /* Note: in IVAS, set MODE1 */ + + if ( hEncoderConfig->ivas_format == MONO_FORMAT ) + { + if ( hEncoderConfig->Opt_AMR_WB ) + { + st_ivas->codec_mode = MODE1; + } + else + { + st_ivas->codec_mode = get_codec_mode( hEncoderConfig->ivas_total_brate ); + } + } + + if ( hEncoderConfig->ivas_total_brate == 13200 && hEncoderConfig->Opt_RF_ON == 1 ) + { + st_ivas->codec_mode = MODE2; + } + + st_ivas->last_codec_mode = st_ivas->codec_mode; + + /*-----------------------------------------------------------------* + * Sanity checks + *-----------------------------------------------------------------*/ + + assert( hEncoderConfig->ivas_format != UNDEFINED_FORMAT && "\n IVAS format undefined" ); + + if ( ( hEncoderConfig->ivas_format != MONO_FORMAT || hEncoderConfig->stereo_dmx_evs ) && hEncoderConfig->input_Fs == 8000 ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "8kHz input sampling rate is not supported in IVAS." ); + } + + if ( hEncoderConfig->Opt_DTX_ON && hEncoderConfig->ivas_format != MONO_FORMAT && + !( hEncoderConfig->ivas_format == MASA_FORMAT && hEncoderConfig->ivas_total_brate <= IVAS_128k ) && + hEncoderConfig->ivas_format != SBA_FORMAT && + ( hEncoderConfig->element_mode_init != IVAS_CPE_DFT && hEncoderConfig->element_mode_init != IVAS_CPE_TD ) && !( hEncoderConfig->ivas_format == ISM_FORMAT && hEncoderConfig->nchan_inp == 1 ) && + hEncoderConfig->element_mode_init != IVAS_CPE_MDCT ) + { + return IVAS_ERROR( IVAS_ERR_DTX_NOT_SUPPORTED, "DTX is not supported in this IVAS format and element mode." ); + } + + if ( hEncoderConfig->ivas_format != MONO_FORMAT && hEncoderConfig->Opt_RF_ON ) + { + return IVAS_ERROR( IVAS_ERR_NOT_IMPLEMENTED, "Channel-aware mode is not supported in IVAS yet." ); + } + + if ( hEncoderConfig->Opt_AGC_ON && !( hEncoderConfig->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) ) + { + return IVAS_ERROR( IVAS_ERR_NOT_SUPPORTED_OPTION, "AGC supported in SBA format at bitrates >= 24.4 kbps only." ); + } + + if ( hEncoderConfig->Opt_PCA_ON && !( hEncoderConfig->ivas_format == SBA_FORMAT && hEncoderConfig->ivas_total_brate == PCA_BRATE && hEncoderConfig->ivas_total_brate == IVAS_256k && hEncoderConfig->sba_order == 1 ) ) + { + return IVAS_ERROR( IVAS_ERR_NOT_SUPPORTED_OPTION, "PCA supported at SBA FOA 256 kbps only." ); + } + + /*-----------------------------------------------------------------* + * Finalize initialization + *-----------------------------------------------------------------*/ + + if ( ( error = ivas_init_encoder( st_ivas, hIvasEnc->ind_list, hIvasEnc->ind_list_metadata ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hEncoderConfig->ivas_format == MONO_FORMAT ) + { + hIvasEnc->hCoreCoder = st_ivas->hSCE[0]->hCoreCoder[0]; /* Note: this is needed for switching in EVS mono */ + } + else + { + hIvasEnc->hCoreCoder = NULL; + } + + hIvasEnc->Opt_RF_ON_loc = hEncoderConfig->Opt_RF_ON; + hIvasEnc->rf_fec_offset_loc = hEncoderConfig->rf_fec_offset; + + hIvasEnc->isConfigured = true; + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_GetDelay() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_GetDelay( + const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ + int16_t *delay /* o : encoder delay */ +) +{ + ENCODER_CONFIG_HANDLE hEncoderConfig; + + hEncoderConfig = hIvasEnc->st_ivas->hEncoderConfig; + + if ( !hIvasEnc->isConfigured ) + { + return IVAS_ERR_NOT_CONFIGURED; + } + + if ( delay == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + *delay = NS2SA( hEncoderConfig->input_Fs, (int32_t) ( get_delay( ENC, hEncoderConfig->input_Fs, hEncoderConfig->ivas_format, NULL, RENDERER_DISABLE, 0 ) + 0.5f ) ); + + *delay *= hEncoderConfig->nchan_inp; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_GetNumInputChannels() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_GetNumInputChannels( + const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ + int16_t *numInChannels /* o : number of input channels with current */ +) +{ + if ( !hIvasEnc->isConfigured ) + { + return IVAS_ERR_NOT_CONFIGURED; + } + + if ( numInChannels == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + *numInChannels = hIvasEnc->st_ivas->hEncoderConfig->nchan_inp; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * getInputBufferSize() + * + * + *---------------------------------------------------------------------*/ + +static int16_t getInputBufferSize( + const Encoder_Struct *st_ivas /* i: IVAS encoder handle */ +) +{ + return (int16_t) ( st_ivas->hEncoderConfig->input_Fs * st_ivas->hEncoderConfig->nchan_inp / FRAMES_PER_SEC ); +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_GetInputBufferSize() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_GetInputBufferSize( + const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ + int16_t *inputBufferSize /* o : total number of samples expected in the input buffer for current encoder configuration */ +) +{ + if ( !hIvasEnc->isConfigured ) + { + return IVAS_ERR_NOT_CONFIGURED; + } + + if ( inputBufferSize == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + *inputBufferSize = getInputBufferSize( hIvasEnc->st_ivas ); + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_EncodeFrameToSerial() + * + * Main function to encode one frame to a serial bitstream + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_EncodeFrameToSerial( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + int16_t *inputBuffer, /* i : PCM input */ + int16_t inputBufferSize, /* i : total number of samples in the input buffer. Related function: IVAS_ENC_GetInputBufferSize() */ + uint16_t *outputBitStream, /* o : pointer to serial output bitstream. The array must already be allocated and be of size at least IVAS_MAX_BITS_PER_FRAME */ + uint16_t *numOutBits /* o : number of bits written to output bitstream. Each bit is stored as a single uint16_t value */ +) +{ + Encoder_Struct *st_ivas; + ENCODER_CONFIG_HANDLE hEncoderConfig; + ENC_CORE_HANDLE hCoreCoder; + int16_t i; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( !hIvasEnc->isConfigured ) + { + return IVAS_ERR_NOT_CONFIGURED; + } + + st_ivas = hIvasEnc->st_ivas; + hEncoderConfig = st_ivas->hEncoderConfig; + hCoreCoder = hIvasEnc->hCoreCoder; + + if ( inputBufferSize != getInputBufferSize( st_ivas ) ) + { + return IVAS_ERR_INVALID_INPUT_BUFFER_SIZE; + } + + if ( hEncoderConfig->ivas_format == ISM_FORMAT ) + { + for ( i = 0; i < hEncoderConfig->nchan_inp; ++i ) + { + if ( !hIvasEnc->ismMetadataProvided[i] ) + { + ivas_ism_reset_metadata_API( hIvasEnc->st_ivas->hIsmMetaData[i] ); + } + } + resetIsmMetadataProvidedFlags( hIvasEnc ); + } + + if ( ( hEncoderConfig->Opt_RF_ON && ( hEncoderConfig->ivas_total_brate != ACELP_13k20 || hEncoderConfig->input_Fs == 8000 || hEncoderConfig->max_bwidth == NB ) ) || hEncoderConfig->rf_fec_offset == 0 ) + { + if ( hEncoderConfig->ivas_total_brate == ACELP_13k20 && hEncoderConfig->ivas_format == MONO_FORMAT ) + { + st_ivas->codec_mode = MODE1; + reset_rf_indices( hCoreCoder->hRF, hCoreCoder->L_frame, &( hCoreCoder->rf_target_bits_write ) ); + } + hEncoderConfig->Opt_RF_ON = 0; + hEncoderConfig->rf_fec_offset = 0; + hIvasEnc->switchingActive = true; + } + + if ( hIvasEnc->Opt_RF_ON_loc && hIvasEnc->rf_fec_offset_loc != 0 && L_sub( hEncoderConfig->ivas_total_brate, ACELP_13k20 ) == 0 && L_sub( hEncoderConfig->input_Fs, 8000 ) != 0 && hEncoderConfig->max_bwidth != NB ) + { + st_ivas->codec_mode = MODE2; + if ( hEncoderConfig->Opt_RF_ON == 0 && hEncoderConfig->ivas_format == MONO_FORMAT ) + { + reset_rf_indices( hCoreCoder->hRF, hCoreCoder->L_frame, &( hCoreCoder->rf_target_bits_write ) ); + } + hEncoderConfig->Opt_RF_ON = 1; + hEncoderConfig->rf_fec_offset = hIvasEnc->rf_fec_offset_loc; + hIvasEnc->switchingActive = true; + } + + /* in case of 8kHz sampling rate or when in "max_band NB" mode, limit the total bitrate to 24.40 kbps */ + if ( ( ( hEncoderConfig->input_Fs == 8000 ) || ( hEncoderConfig->max_bwidth == NB ) ) && ( hEncoderConfig->ivas_total_brate > ACELP_24k40 ) ) + { + hEncoderConfig->ivas_total_brate = ACELP_24k40; + st_ivas->codec_mode = MODE2; + hIvasEnc->switchingActive = true; + } + + if ( hIvasEnc->switchingActive && hEncoderConfig->ivas_format == MONO_FORMAT ) + { + copy_encoder_config( st_ivas, hCoreCoder, 0 ); + hEncoderConfig->last_ivas_total_brate = hEncoderConfig->ivas_total_brate; + } + + /* run the main encoding routine */ + if ( hEncoderConfig->ivas_format == MONO_FORMAT ) /* EVS mono */ + { + hCoreCoder->total_brate = hEncoderConfig->ivas_total_brate; /* needed in case of bitrate switching */ +#ifdef DEBUGGING + hCoreCoder->id_element = 0; +#endif + + if ( hEncoderConfig->stereo_dmx_evs == 1 ) + { + inputBufferSize /= 2; + stereo_dmx_evs_enc( st_ivas->hStereoDmxEVS, hEncoderConfig->input_Fs, inputBuffer, inputBufferSize ); + } + + if ( hEncoderConfig->Opt_AMR_WB ) + { + amr_wb_enc( hCoreCoder, inputBuffer, st_ivas->mem_hp20_in[0], inputBufferSize ); + } + else + { + if ( ( error = evs_enc( hCoreCoder, inputBuffer, st_ivas->mem_hp20_in[0], inputBufferSize ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + else /* IVAS */ + { + if ( ( error = ivas_enc( st_ivas, inputBuffer, inputBufferSize ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* write indices into bitstream buffer */ + write_indices_ivas( st_ivas, outputBitStream, numOutBits ); + + /* Reset switching flag before next call - can be set to "true" by some setters */ + hIvasEnc->switchingActive = false; + + return error; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_EncodeFrameToCompact() + * + * Main function to encode one frame to a compact bitstream (bytestream) + *---------------------------------------------------------------------*/ + +/* IVAS_fmToDo: Currently unused and untested */ +ivas_error IVAS_ENC_EncodeFrameToCompact( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + int16_t *inputBuffer, /* i : PCM input */ + const int16_t inputBufferSize, /* i : total number of samples in the input buffer. Related function: IVAS_ENC_GetInputBufferSize() */ + uint8_t *outputBitStream, /* o : pointer to compact output bitstream. The array must already be allocated. */ + uint16_t *numOutBits /* o : number of bits written to output bitstream */ +) +{ + ivas_error error; + uint16_t bitstream[IVAS_MAX_BITS_PER_FRAME]; + + if ( ( error = IVAS_ENC_EncodeFrameToSerial( hIvasEnc, inputBuffer, inputBufferSize, bitstream, numOutBits ) ) != IVAS_ERR_OK ) + { + return error; + } + + convertSerialToBytestream( bitstream, *numOutBits, outputBitStream ); + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_SetBandwidth() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_SetBandwidth( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const IVAS_ENC_BANDWIDTH maxBandwidth /* i : bandwidth limitation to be used */ +) +{ + ivas_error error; + + /* Do additional checks for user-facing function */ + if ( ( error = doCommonSetterChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Use internal function to set bandiwdth */ + return setBandwidth( hIvasEnc, maxBandwidth ); +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_SetBitrate() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_SetBitrate( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t totalBitrate /* i : requested bitrate of the output bitstream */ +) +{ + ivas_error error; + + /* Do additional checks for user-facing function */ + if ( ( error = doCommonSetterChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Use internal function to set bitrate */ + return setBitrate( hIvasEnc, totalBitrate ); +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_SetChannelAwareConfig() + * + * Sets the configuration of channel-aware mode. Since CA mode is only + * supported at 13.2 kbps, this function has no effect at other bitrates. + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_SetChannelAwareConfig( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const IVAS_ENC_CHANNEL_AWARE_CONFIG rfConfig /* i : configuration of channel-aware mode */ +) +{ + ivas_error error; + + /* Do additional checks for user-facing function */ + if ( ( error = doCommonSetterChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Use internal function to set CA config */ + return setChannelAwareConfig( hIvasEnc, rfConfig ); +} + + +#ifdef DEBUGGING +/*---------------------------------------------------------------------* + * IVAS_ENC_SetForcedMode() + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_ENC_SetForcedMode( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const IVAS_ENC_FORCED_MODE forcedMode /* i : forced coding mode */ +) +{ + int16_t newForced; + ivas_error error; + + /* Do additional checks for user-facing function */ + if ( ( error = doCommonSetterChecks( hIvasEnc ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( ( error = forcedModeApiToInternal( forcedMode, &newForced ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( hIvasEnc->st_ivas->hEncoderConfig->force != newForced ) + { + hIvasEnc->st_ivas->hEncoderConfig->force = newForced; + hIvasEnc->switchingActive = true; + } + + return IVAS_ERR_OK; +} +#endif /* DEBUGGING */ + + +/*---------------------------------------------------------------------* + * IVAS_ENC_GetDefaultBandwidth() + * + * + *---------------------------------------------------------------------*/ + +IVAS_ENC_BANDWIDTH IVAS_ENC_GetDefaultBandwidth( const bool isEVS ) +{ + IVAS_ENC_BANDWIDTH bwidth = IVAS_ENC_BANDWIDTH_FB; + + if ( isEVS ) + { + bwidth = IVAS_ENC_BANDWIDTH_SWB; + } + + return bwidth; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_GetDefaultDtxConfig() + * + * + *---------------------------------------------------------------------*/ + +IVAS_ENC_DTX_CONFIG IVAS_ENC_GetDefaultDtxConfig( void ) +{ + IVAS_ENC_DTX_CONFIG defaultDtxConfig; + defaultDtxConfig.enabled = false; + defaultDtxConfig.SID_interval = 0; + defaultDtxConfig.variable_SID_rate = false; + + return defaultDtxConfig; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_GetDefaultChannelAwareConfig() + * + * + *---------------------------------------------------------------------*/ + +IVAS_ENC_CHANNEL_AWARE_CONFIG IVAS_ENC_GetDefaultChannelAwareConfig( void ) +{ + IVAS_ENC_CHANNEL_AWARE_CONFIG defaultCaConfig; + defaultCaConfig.channelAwareModeEnabled = false; + defaultCaConfig.fec_indicator = IVAS_ENC_FEC_HI; + defaultCaConfig.fec_offset = 0; + + return defaultCaConfig; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_GetErrorMessage() + * + * + *---------------------------------------------------------------------*/ + +const char *IVAS_ENC_GetErrorMessage( + ivas_error error /* i : encoder error code enum */ +) +{ + switch ( error ) + { + case IVAS_ERR_OK: + return "no error"; + case IVAS_ERR_FAILED_ALLOC: + return "memory error"; + case IVAS_ERR_INVALID_BANDWIDTH: + return "invalid bandwidth"; + case IVAS_ERR_INVALID_DTX_UPDATE_RATE: + return "invalid DTX update rate"; + case IVAS_ERR_INVALID_SAMPLING_RATE: + return "invalid sampling rate"; + case IVAS_ERR_NOT_CONFIGURED: + return "encoder has not been configured"; + case IVAS_ERR_INVALID_STEREO_MODE: + return "invalid stereo mode"; + case IVAS_ERR_INVALID_CICP_INDEX: + return "invalid CICP index"; + case IVAS_ERR_INVALID_BITRATE: + return "invalid bitrate"; + case IVAS_ERR_INVALID_MASA_CONFIG: + return "invalid MASA config"; + case IVAS_ERR_TOO_MANY_OBJECT_INPUTS: + return "too many object inputs provided"; + case IVAS_ERR_INDEX_OUT_OF_BOUNDS: + return "index out of bounds"; + case IVAS_ERR_INTERNAL: + return "internal error"; + case IVAS_ERR_RECONFIGURE_NOT_SUPPORTED: + return "reconfigure not supported"; + case IVAS_ERR_INVALID_FEC_OFFSET: + return "invalid FEC offset"; + case IVAS_ERR_INVALID_INPUT_BUFFER_SIZE: + return "invalid input buffer size"; + case IVAS_ERR_DTX_NOT_SUPPORTED: + return "DTX is not supported in this IVAS format and element mode"; + case IVAS_ERR_UNEXPECTED_NULL_POINTER: + return "unexpected NULL pointer"; + case IVAS_ERR_METADATA_NOT_EXPECTED: + return "metadata input not expected for current configuration"; +#ifdef DEBUGGING + case IVAS_ERR_INVALID_FORCE_MODE: + return "invalid force mode"; +#endif + case IVAS_ERR_NOT_IMPLEMENTED: + return "not implemented"; + case IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH: + return "mismatched timestamp"; + case IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT: + return "invalid metadata format"; + case IVAS_ERR_FAILED_FILE_READ: + return "could not read from file"; + case IVAS_ERR_NOT_SUPPORTED_OPTION: + return "option not supported in this set-up"; + case IVAS_ERR_UNKNOWN: + default: + break; + } + + return "unknown error"; +} + + +/*---------------------------------------------------------------------* + * Local functions + *---------------------------------------------------------------------*/ + +static ivas_error printConfigInfo_enc( + IVAS_ENC_HANDLE hIvasEnc ) +{ + Encoder_Struct *st_ivas; + ENCODER_CONFIG_HANDLE hEncoderConfig; + char max_bwidth_string[4]; + + st_ivas = hIvasEnc->st_ivas; + hEncoderConfig = st_ivas->hEncoderConfig; + + /*-----------------------------------------------------------------* + * Print input signal sampling frequency + *-----------------------------------------------------------------*/ + + fprintf( stdout, "Input sampling rate: %d Hz\n", hEncoderConfig->input_Fs ); + + /*-----------------------------------------------------------------* + * Print bitrate + *-----------------------------------------------------------------*/ + + if ( st_ivas->hEncoderConfig->Opt_SC_VBR ) + { + fprintf( stdout, "Average bitrate: %.2f kbps\n", (float) ACELP_5k90 / 1000 ); + } + else + { + fprintf( stdout, "Bitrate: %.2f kbps\n", (float) hEncoderConfig->ivas_total_brate / 1000 ); + } + + /*-----------------------------------------------------------------* + * Print IVAS format + *-----------------------------------------------------------------*/ + + if ( hEncoderConfig->ivas_format == MONO_FORMAT ) + { + if ( hEncoderConfig->stereo_dmx_evs ) + { + fprintf( stdout, "IVAS format: stereo downmix to bit-exact EVS mono\n" ); + } + else + { + fprintf( stdout, "IVAS format: bit-exact EVS mono\n" ); + } + } + else if ( hEncoderConfig->ivas_format == STEREO_FORMAT ) + { +#ifdef DEBUGGING + if ( hEncoderConfig->stereo_mode_cmdl == 1 ) + { + fprintf( stdout, "IVAS format: stereo - Unified stereo\n" ); + } + else if ( hEncoderConfig->element_mode_init == IVAS_CPE_DFT ) + { + fprintf( stdout, "IVAS format: stereo - DFT stereo\n" ); + } + else if ( hEncoderConfig->element_mode_init == IVAS_CPE_TD ) + { + fprintf( stdout, "IVAS format: stereo - TD stereo\n" ); + } + else if ( hEncoderConfig->element_mode_init == IVAS_CPE_MDCT ) + { + fprintf( stdout, "IVAS format: stereo - MDCT stereo\n" ); + } +#else + if ( hEncoderConfig->element_mode_init != IVAS_CPE_MDCT ) + { + fprintf( stdout, "IVAS format: stereo - Unified stereo\n" ); + } + else + { + fprintf( stdout, "IVAS format: stereo - MDCT stereo\n" ); + } +#endif + } + else if ( hEncoderConfig->ivas_format == ISM_FORMAT ) + { + if ( hEncoderConfig->ivas_total_brate <= ACELP_32k && hEncoderConfig->nchan_inp > 2 ) + { + fprintf( stdout, "IVAS format: Param-ISm (%i streams)\n", hEncoderConfig->nchan_inp ); + } + else + { + fprintf( stdout, "IVAS format: ISm (%i streams)\n", hEncoderConfig->nchan_inp ); + } + } + else if ( hEncoderConfig->ivas_format == SBA_FORMAT ) + { + fprintf( stdout, "IVAS format: Scene Based Analysis %s ", hEncoderConfig->sba_planar ? "(Planar)" : "" ); + if ( hEncoderConfig->Opt_PCA_ON ) + { + fprintf( stdout, "- PCA configured with signal adaptive decision " ); + } + if ( hEncoderConfig->Opt_AGC_ON ) + { + fprintf( stdout, "- AGC ON " ); + } + fprintf( stdout, "\n" ); + } + else if ( hEncoderConfig->ivas_format == MASA_FORMAT ) + { + fprintf( stdout, "IVAS format: MASA format\n" ); + } + else if ( hEncoderConfig->ivas_format == MC_FORMAT ) + { + if ( hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1 ) + { + fprintf( stdout, "IVAS mode: Multi-Channel 5.1 \n" ); + } + else if ( hEncoderConfig->mc_input_setup == MC_LS_SETUP_7_1 ) + { + fprintf( stdout, "IVAS mode: Multi-Channel 7.1 \n" ); + } + else if ( hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1_2 ) + { + fprintf( stdout, "IVAS mode: Multi-Channel 5.1+2 \n" ); + } + else if ( hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1_4 ) + { + fprintf( stdout, "IVAS mode: Multi-Channel 5.1+4\n" ); + } + else if ( hEncoderConfig->mc_input_setup == MC_LS_SETUP_7_1_4 ) + { + fprintf( stdout, "IVAS mode: Multi-Channel 7.1+4\n" ); + } + } + + /*-----------------------------------------------------------------* + * Print CNG update interval, if DTX is activated + *-----------------------------------------------------------------*/ + + if ( hEncoderConfig->Opt_DTX_ON ) + { + if ( hEncoderConfig->var_SID_rate_flag ) + { + fprintf( stdout, "DTX: ON, variable CNG update interval\n" ); + } + else + { + fprintf( stdout, "DTX: ON, CNG update interval = %d frames\n", hEncoderConfig->interval_SID ); + } + } + + /*-----------------------------------------------------------------* + * Print potential limitation of audio bandwidth + *-----------------------------------------------------------------*/ + + switch ( hEncoderConfig->max_bwidth ) + { + case NB: + strncpy( max_bwidth_string, "NB\0", sizeof( max_bwidth_string ) ); + break; + case WB: + strncpy( max_bwidth_string, "WB\0", sizeof( max_bwidth_string ) ); + break; + case SWB: + strncpy( max_bwidth_string, "SWB\0", sizeof( max_bwidth_string ) ); + break; + case FB: + strncpy( max_bwidth_string, "FB\0", sizeof( max_bwidth_string ) ); + break; + } + + if ( st_ivas->hEncoderConfig->Opt_SC_VBR && !hEncoderConfig->Opt_DTX_ON ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "\nError: SC-VBR 5900 bps not supported without DTX\n\n" ); + } + + if ( hIvasEnc->maxBandwidthUser ) + { + fprintf( stdout, "\nBandwidth limited to %s.\n", max_bwidth_string ); + } + if ( hIvasEnc->maxBandwidthUser && hEncoderConfig->max_bwidth < FB && hEncoderConfig->input_Fs == 48000 ) + { + fprintf( stdout, "\nBandwidth limited to %s. To enable FB coding, please use -max_band FB.\n", max_bwidth_string ); + } + + if ( hEncoderConfig->ivas_format == MONO_FORMAT ) + { + if ( hEncoderConfig->max_bwidth == FB && hEncoderConfig->ivas_total_brate < ACELP_16k40 ) + { + fprintf( stdout, "\nFB coding not supported below %.2f kbps. ", ACELP_16k40 / 1000.f ); + if ( hEncoderConfig->ivas_total_brate < ACELP_9k60 ) + { + fprintf( stdout, "Switching to WB.\n" ); + } + else + { + fprintf( stdout, "Switching to SWB.\n" ); + } + } + + if ( hEncoderConfig->max_bwidth == SWB && hEncoderConfig->ivas_total_brate < ACELP_9k60 ) + { + fprintf( stdout, "\nSWB coding not supported below %.2f kbps. Switching to WB.", ACELP_9k60 / 1000.f ); + } + + /* in case of 8kHz input sampling or "-max_band NB", require the total bitrate to be below 24.40 kbps */ + if ( ( hEncoderConfig->max_bwidth == NB || hEncoderConfig->input_Fs == 8000 ) && hEncoderConfig->ivas_total_brate > ACELP_24k40 ) + { + fprintf( stdout, "\nError: Unsupported mode NB %d bps, NB mode supports rates 5900-24400 bps\n\n", hEncoderConfig->ivas_total_brate ); + return IVAS_ERR_INVALID_BITRATE; + } + } + else + { + if ( hEncoderConfig->max_bwidth == FB && hEncoderConfig->ivas_total_brate < MIN_BRATE_FB_STEREO ) + { + fprintf( stdout, "\nFB coding not supported below %.2f kbps. Switching to SWB.\n", MIN_BRATE_FB_STEREO / 1000.f ); + } + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * setBitrate() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error setBitrate( + IVAS_ENC_HANDLE hIvasEnc, + const int32_t totalBitrate ) +{ + Encoder_Struct *st_ivas; + ENCODER_CONFIG_HANDLE hEncoderConfig; + + st_ivas = hIvasEnc->st_ivas; + hEncoderConfig = st_ivas->hEncoderConfig; + + hEncoderConfig->ivas_total_brate = totalBitrate; + hIvasEnc->switchingActive = true; + + /* channel-aware mode is supported only at 13.20 kbps */ + if ( hEncoderConfig->Opt_RF_ON && hEncoderConfig->ivas_total_brate != ACELP_13k20 ) + { + assert( 0 && "\nChannel-aware mode is supported only at 13.20 kbps\n" ); + hEncoderConfig->Opt_RF_ON = 0; + } + + if ( hEncoderConfig->ivas_total_brate == ACELP_5k90 ) + { + st_ivas->hEncoderConfig->Opt_SC_VBR = 1; + hEncoderConfig->ivas_total_brate = ACELP_7k20; + } + else + { + st_ivas->hEncoderConfig->Opt_SC_VBR = 0; + } + + /* check if the entered bitrate is supported */ + if ( hEncoderConfig->element_mode_init > EVS_MONO ) + { + if ( !is_IVAS_bitrate( hEncoderConfig->ivas_total_brate ) ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Incorrect bitrate specification in IVAS: %d", hEncoderConfig->ivas_total_brate ); + } + } + else + { + if ( !is_EVS_bitrate( hEncoderConfig->ivas_total_brate, &hEncoderConfig->Opt_AMR_WB ) ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_BITRATE, "Incorrect bitrate specification in EVS mono: %d", hEncoderConfig->ivas_total_brate ); + } + + /* in case of 8kHz signal, limit the total bitrate to 24.40 kbps */ + if ( hEncoderConfig->input_Fs == 8000 && hEncoderConfig->ivas_total_brate > ACELP_24k40 ) + { + hEncoderConfig->ivas_total_brate = ACELP_24k40; + } + } + + st_ivas->codec_mode = MODE1; + + if ( hEncoderConfig->element_mode_init == EVS_MONO ) + { + if ( hEncoderConfig->Opt_AMR_WB ) + { + st_ivas->codec_mode = MODE1; + } + else + { + st_ivas->codec_mode = get_codec_mode( hEncoderConfig->ivas_total_brate ); + } + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * setChannelAwareConfig() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error setChannelAwareConfig( + IVAS_ENC_HANDLE hIvasEnc, + const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ) +{ + int16_t newFecIndicator; + ivas_error error; + Encoder_Struct *st_ivas; + ENCODER_CONFIG_HANDLE hEncoderConfig; + + st_ivas = hIvasEnc->st_ivas; + hEncoderConfig = st_ivas->hEncoderConfig; + + /* channel-aware mode is supported only at 13.20 kbps and with WB or SWB bandwidth */ + if ( ( hEncoderConfig->Opt_RF_ON && st_ivas->hEncoderConfig->ivas_total_brate != ACELP_13k20 ) || ( hEncoderConfig->Opt_RF_ON && hEncoderConfig->input_Fs == 8000 ) ) + { + hEncoderConfig->Opt_RF_ON = 0; + hEncoderConfig->rf_fec_offset = 0; + return IVAS_ERR_OK; + } + + if ( caConfig.channelAwareModeEnabled ) + { + hEncoderConfig->Opt_RF_ON = 1; + + /* Convert FEC indicator from API type */ + if ( ( error = fecIndicatorApiToInternal( caConfig.fec_indicator, &newFecIndicator ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* Set new values only if they differ from current values */ + if ( ( newFecIndicator != hEncoderConfig->rf_fec_indicator || caConfig.fec_offset != hEncoderConfig->rf_fec_offset ) ) + { + hEncoderConfig->rf_fec_indicator = newFecIndicator; + + /* Check if new FEC offset has a valid value */ + if ( caConfig.fec_offset == 0 || caConfig.fec_offset == 2 || caConfig.fec_offset == 3 || caConfig.fec_offset == 5 || caConfig.fec_offset == 7 ) + { + hEncoderConfig->rf_fec_offset = caConfig.fec_offset; + } + else + { + return IVAS_ERR_INVALID_FEC_OFFSET; + } + + hIvasEnc->switchingActive = true; + } + + /* Save a copy of FEC offset value - needed during encoding */ + hIvasEnc->rf_fec_offset_loc = hEncoderConfig->rf_fec_offset; + } + else + { + hEncoderConfig->Opt_RF_ON = 0; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * doCommonConfigureChecks() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error doCommonConfigureChecks( + IVAS_ENC_HANDLE hIvasEnc ) +{ + if ( hIvasEnc == NULL || hIvasEnc->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hIvasEnc->isConfigured ) + { + return IVAS_ERR_RECONFIGURE_NOT_SUPPORTED; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * doCommonSetterChecks() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error doCommonSetterChecks( + IVAS_ENC_HANDLE hIvasEnc ) +{ + if ( hIvasEnc == NULL || hIvasEnc->st_ivas == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + /* Currently settings can be changed only after configuration step */ + if ( !hIvasEnc->isConfigured ) + { + return IVAS_ERR_NOT_CONFIGURED; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * updateBandwidthFromFs() + * + * + *---------------------------------------------------------------------*/ + +static void updateBandwidthFromFs( + const ENCODER_CONFIG_HANDLE hEncoderConfig ) +{ + /* Prevent st_ivas->max_bwidth from being higher than Fs/2 */ + if ( hEncoderConfig->input_Fs == 8000 && hEncoderConfig->max_bwidth > NB ) + { + hEncoderConfig->max_bwidth = NB; + } + else if ( hEncoderConfig->input_Fs == 16000 && hEncoderConfig->max_bwidth > WB ) + { + hEncoderConfig->max_bwidth = WB; + } + else if ( hEncoderConfig->input_Fs == 32000 && hEncoderConfig->max_bwidth > SWB ) + { + hEncoderConfig->max_bwidth = SWB; + } + + return; +} + + +/*---------------------------------------------------------------------* + * setBandwidth() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error setBandwidth( + IVAS_ENC_HANDLE hIvasEnc, + const IVAS_ENC_BANDWIDTH maxBandwidth ) +{ + ivas_error error; + int16_t newBandwidth; + ENCODER_CONFIG_HANDLE hEncoderConfig; + + hEncoderConfig = hIvasEnc->st_ivas->hEncoderConfig; + + /* Convert bandwidth from API type */ + if ( ( error = bandwidthApiToInternal( maxBandwidth, &newBandwidth ) ) != IVAS_ERR_OK ) + { + return error; + } + + /* NB coding not supported in IVAS. Switching to WB. */ + if ( newBandwidth == NB && hEncoderConfig->ivas_format != UNDEFINED_FORMAT && hEncoderConfig->ivas_format != MONO_FORMAT ) + { + newBandwidth = WB; + } + + if ( hEncoderConfig->max_bwidth != newBandwidth ) + { + hEncoderConfig->max_bwidth = newBandwidth; + hIvasEnc->switchingActive = true; + } + + /* Limit bandwidth to half of sampling rate - only possible if + * sampling rate has already been set via configure function */ + if ( hIvasEnc->isConfigured ) + { + updateBandwidthFromFs( hIvasEnc->st_ivas->hEncoderConfig ); + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * resetIsmMetadataProvidedFlags() + * + * + *---------------------------------------------------------------------*/ + +static void resetIsmMetadataProvidedFlags( + IVAS_ENC_HANDLE hIvasEnc ) +{ + int16_t i; + + for ( i = 0; i < MAX_NUM_OBJECTS; ++i ) + { + hIvasEnc->ismMetadataProvided[i] = false; + } + + return; +} + + +/*---------------------------------------------------------------------* + * bandwidthApiToInternal() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error bandwidthApiToInternal( + const IVAS_ENC_BANDWIDTH maxBandwidth, + int16_t *internalMaxBandwidth ) +{ + switch ( maxBandwidth ) + { + case IVAS_ENC_BANDWIDTH_NB: + *internalMaxBandwidth = NB; + break; + case IVAS_ENC_BANDWIDTH_WB: + *internalMaxBandwidth = WB; + break; + case IVAS_ENC_BANDWIDTH_SWB: + *internalMaxBandwidth = SWB; + break; + case IVAS_ENC_BANDWIDTH_FB: + *internalMaxBandwidth = FB; + break; + case IVAS_ENC_BANDWIDTH_UNDEFINED: + default: + return IVAS_ERR_INVALID_BANDWIDTH; + break; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * fecIndicatorApiToInternal() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error fecIndicatorApiToInternal( + const IVAS_ENC_FEC_INDICATOR fecIndicator, + int16_t *fecIndicatorInternal ) +{ + switch ( fecIndicator ) + { + case IVAS_ENC_FEC_LO: + *fecIndicatorInternal = 0; + break; + case IVAS_ENC_FEC_HI: + *fecIndicatorInternal = 1; + break; + default: + return IVAS_ERR_INTERNAL; + break; + } + + return IVAS_ERR_OK; +} + +#ifdef DEBUGGING +/*---------------------------------------------------------------------* + * forcedModeApiToInternal() + * + * + *---------------------------------------------------------------------*/ + +static ivas_error forcedModeApiToInternal( + IVAS_ENC_FORCED_MODE forcedMode, + int16_t *forcedModeInternal ) +{ + switch ( forcedMode ) + { + case IVAS_ENC_FORCE_SPEECH: + *forcedModeInternal = FORCE_SPEECH; + break; + case IVAS_ENC_FORCE_MUSIC: + *forcedModeInternal = FORCE_MUSIC; + break; + case IVAS_ENC_FORCE_ACELP: + *forcedModeInternal = FORCE_ACELP; + break; + case IVAS_ENC_FORCE_GSC: + *forcedModeInternal = FORCE_GSC; + break; + case IVAS_ENC_FORCE_TCX: + *forcedModeInternal = FORCE_TCX; + break; + case IVAS_ENC_FORCE_HQ: + *forcedModeInternal = FORCE_HQ; + break; + case IVAS_ENC_FORCE_UNFORCED: + *forcedModeInternal = -1; + break; + default: + return IVAS_ERR_INVALID_FORCE_MODE; + break; + } + + return IVAS_ERR_OK; +} +#endif + + +/*---------------------------------------------------------------------* + * IVAS_ENC_PrintConfig() + * + * + *---------------------------------------------------------------------*/ + +void IVAS_ENC_PrintConfig( + const IVAS_ENC_HANDLE hIvasDec /* i : IVAS encoder handle */ +) +{ + printConfigInfo_enc( hIvasDec ); + + return; +} + + +/*---------------------------------------------------------------------* + * IVAS_ENC_PrintDisclaimer() + * + * Print IVAS disclaimer to console + *---------------------------------------------------------------------*/ + +void IVAS_ENC_PrintDisclaimer( void ) +{ + print_disclaimer( stderr ); + + return; +} + + +/*---------------------------------------------------------------------* + * init_encoder_config() + * + * Initialize Encoder Config. handle + *---------------------------------------------------------------------*/ + +static void init_encoder_config( + ENCODER_CONFIG_HANDLE hEncoderConfig /* o : configuration structure */ +) +{ + hEncoderConfig->max_bwidth = SWB; + hEncoderConfig->input_Fs = 16000; + hEncoderConfig->nchan_inp = 1; + hEncoderConfig->element_mode_init = EVS_MONO; + hEncoderConfig->ivas_format = UNDEFINED_FORMAT; + hEncoderConfig->Opt_AMR_WB = 0; + hEncoderConfig->Opt_DTX_ON = 0; + hEncoderConfig->Opt_RF_ON = 0; + hEncoderConfig->rf_fec_offset = 0; + hEncoderConfig->rf_fec_indicator = 1; + hEncoderConfig->interval_SID = FIXED_SID_RATE; + hEncoderConfig->var_SID_rate_flag = 1; +#ifdef DEBUGGING + hEncoderConfig->stereo_mode_cmdl = 0; + hEncoderConfig->force = -1; + hEncoderConfig->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; +#endif + hEncoderConfig->mc_input_setup = MC_LS_SETUP_INVALID; + hEncoderConfig->stereo_dmx_evs = 0; + hEncoderConfig->sba_order = 0; + hEncoderConfig->sba_planar = 0; + hEncoderConfig->Opt_AGC_ON = 0; + hEncoderConfig->Opt_PCA_ON = 0; + + return; +} diff --git a/lib_enc/lib_enc.h b/lib_enc/lib_enc.h new file mode 100644 index 0000000000..b8744a2731 --- /dev/null +++ b/lib_enc/lib_enc.h @@ -0,0 +1,349 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef LIB_ENC_H +#define LIB_ENC_H + +#include "common_api_types.h" +#include "ivas_error.h" +#include +#include + + +/*---------------------------------------------------------------------* + * Encoder enums + *---------------------------------------------------------------------*/ + +/* Possible input formats to the encoder */ +typedef enum _IVAS_ENC_INPUT_FORMAT +{ + IVAS_ENC_INPUT_MONO = 0x0001, + IVAS_ENC_INPUT_STEREO, + IVAS_ENC_INPUT_ISM, + IVAS_ENC_INPUT_SBA, + IVAS_ENC_INPUT_MASA, + IVAS_ENC_INPUT_MC, + IVAS_DEC_INPUT_UNKNOWN = 0xffff +} IVAS_ENC_INPUT_FORMAT; + +typedef enum _IVAS_ENC_BANDWIDTH +{ + IVAS_ENC_BANDWIDTH_NB, + IVAS_ENC_BANDWIDTH_WB, + IVAS_ENC_BANDWIDTH_SWB, + IVAS_ENC_BANDWIDTH_FB, + IVAS_ENC_BANDWIDTH_UNDEFINED = 0xffff +} IVAS_ENC_BANDWIDTH; + +typedef struct _IVAS_ENC_DTX_CONFIG +{ + bool enabled; + bool variable_SID_rate; + int16_t SID_interval; +} IVAS_ENC_DTX_CONFIG; + +#ifdef DEBUGGING +typedef enum _IVAS_ENC_STEREO_MODE +{ + IVAS_ENC_STEREO_MODE_UNIFIED, + IVAS_ENC_STEREO_MODE_DFT, + IVAS_ENC_STEREO_MODE_TD, + IVAS_ENC_STEREO_MODE_MDCT_DECISION, + IVAS_ENC_STEREO_MODE_MDCT_FORCE_LR, + IVAS_ENC_STEREO_MODE_MDCT_FORCE_MS, + IVAS_ENC_STEREO_MODE_UNDEFINED = 0xffff +} IVAS_ENC_STEREO_MODE; +#endif /* DEBUGGING */ + +typedef enum _IVAS_ENC_SBA_ORDER +{ + IVAS_ENC_SBA_FOA = 1, + IVAS_ENC_SBA_HOA2 = 2, + IVAS_ENC_SBA_HOA3 = 3, + IVAS_ENC_SBA_ORDER_UNDEFINED = 0xffff +} IVAS_ENC_SBA_ORDER; + +typedef enum _IVAS_ENC_MC_LAYOUT +{ + IVAS_ENC_MC_5_1 = 6, + IVAS_ENC_MC_7_1 = 12, + IVAS_ENC_MC_5_1_2 = 14, + IVAS_ENC_MC_5_1_4 = 16, + IVAS_ENC_MC_7_1_4 = 19, + IVAS_ENC_CICP_UNDEFINED = 0xffff +} IVAS_ENC_MC_LAYOUT; + +typedef enum _IVAS_ENC_MASA_VARIANT +{ + IVAS_ENC_MASA_1CH = 1, + IVAS_ENC_MASA_2CH = 2, + IVAS_ENC_MASA_UNDEFINED = 0xffff +} IVAS_ENC_MASA_VARIANT; + +#ifdef DEBUGGING +typedef enum _IVAS_ENC_FORCED_MODE +{ + IVAS_ENC_FORCE_SPEECH, + IVAS_ENC_FORCE_MUSIC, + IVAS_ENC_FORCE_ACELP, + IVAS_ENC_FORCE_GSC, + IVAS_ENC_FORCE_TCX, + IVAS_ENC_FORCE_HQ, + IVAS_ENC_FORCE_UNFORCED, + IVAS_ENC_FORCE_UNDEFINED = 0xffff +} IVAS_ENC_FORCED_MODE; +#endif + +typedef enum _IVAS_ENC_FEC_INDICATOR +{ + IVAS_ENC_FEC_LO, + IVAS_ENC_FEC_HI, + IVAS_ENC_FEC_UNDEFINED = 0xffff +} IVAS_ENC_FEC_INDICATOR; + + +/*---------------------------------------------------------------------* + * Encoder structures + *---------------------------------------------------------------------*/ + +typedef struct _IVAS_ENC_CHANNEL_AWARE_CONFIG +{ + bool channelAwareModeEnabled; + IVAS_ENC_FEC_INDICATOR fec_indicator; + int16_t fec_offset; +} IVAS_ENC_CHANNEL_AWARE_CONFIG; + +typedef struct IVAS_ENC *IVAS_ENC_HANDLE; + +/* clang-format off */ +/*---------------------------------------------------------------------* + * Encoder function declarations + *---------------------------------------------------------------------*/ + +/* Open, configure, close functions - should be called once per encoder lifetime */ + +/*! r: error code */ +ivas_error IVAS_ENC_Open( + IVAS_ENC_HANDLE *phIvasEnc /* i/o: pointer to an encoder handle to be opened */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_ConfigureForMono( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig, /* i : configuration of channel-aware mode, can by set to default by using IVAS_ENC_GetDefaultChannelAwareConfig() */ + const bool downmixFromStereo /* i : if true, the encoder accepts a stereo input and internally downmixes it to mono before encoding */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_ConfigureForStereo( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ +#ifdef DEBUGGING + , + const IVAS_ENC_STEREO_MODE stereoMode /* i : forces a specific stereo coding mode */ +#endif +); + +/*! r: error code */ +ivas_error IVAS_ENC_ConfigureForObjects( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const uint16_t numObjects /* i : number of objects to be encoded */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_ConfigureForAmbisonics( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_SBA_ORDER order, /* i : order of the Ambisonics input */ + const bool isPlanar, /* i : if true, input is treated as planar Ambisonics */ + const bool Opt_AGC_ON, /* i : AGC on/off flag */ + const bool Opt_PCA_ON /* i : PCA option flag */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_ConfigureForMasa( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_MASA_VARIANT masaVariant /* i : type of MASA input (either 1 or 2 channels) */ +); + +/*! r: encoder error code */ +ivas_error IVAS_ENC_ConfigureForMultichannel( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t inputFs, /* i : input sampling frequency */ + const int32_t bitrate, /* i : requested bitrate of the output bitstream */ + const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ + const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ + const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ + const IVAS_ENC_MC_LAYOUT mcLayout /* i : input MC layout */ +); + +void IVAS_ENC_Close( + IVAS_ENC_HANDLE *phIvasEnc /* i/o: pointer to IVAS encoder handle */ +); + +/* Encoding functions - should be called with a configured encoder handle */ + +/*! r: error code */ +ivas_error IVAS_ENC_FeedObjectMetadata( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const uint16_t ismIndex, /* i : object index */ + const IVAS_ISM_METADATA metadata /* i : object metadata handle for current frame */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_FeedMasaMetadata( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + IVAS_MASA_METADATA_HANDLE hMasaMetadata /* i : MASA metadata for current frame */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_EncodeFrameToSerial( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + int16_t *inputBuffer, /* i : PCM input */ + int16_t inputBufferSize, /* i : total number of samples in the input buffer. Related function: IVAS_ENC_GetInputBufferSize() */ + uint16_t *outputBitStream, /* o : pointer to serial output bitstream. The array must already be allocated and be of size at least IVAS_MAX_BITS_PER_FRAME */ + uint16_t *numOutBits /* o : number of bits written to output bitstream. Each bit is stored as a single uint16_t value */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_EncodeFrameToCompact( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + int16_t *inputBuffer, /* i : PCM input */ + const int16_t inputBufferSize, /* i : total number of samples in the input buffer. Related function: IVAS_ENC_GetInputBufferSize() */ + uint8_t *outputBitStream, /* o : pointer to compact output bitstream. The array must already be allocated. */ + uint16_t *numOutBits /* o : number of bits written to output bitstream */ +); + +/* Setter functions - apply changes to encoder configuration */ + +/*! r: error code */ +ivas_error IVAS_ENC_SetBandwidth( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const IVAS_ENC_BANDWIDTH maxBandwidth /* i : bandwidth limitation to be used */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_SetBitrate( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const int32_t totalBitrate /* i : requested bitrate of the output bitstream */ +); + +/*! r: error code */ +ivas_error IVAS_ENC_SetChannelAwareConfig( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const IVAS_ENC_CHANNEL_AWARE_CONFIG rfConfig /* i : configuration of channel-aware mode */ +); + +#ifdef DEBUGGING +/*! r: error code */ +ivas_error IVAS_ENC_SetForcedMode( + IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + const IVAS_ENC_FORCED_MODE forcedMode /* i : forced coding mode */ +); +#endif + +/* Getter functions - retrieve information from an encoder through a handle */ + +/*! r: encoder error code */ +ivas_error IVAS_ENC_GetDelay( + const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ + int16_t *delay /* o : encoder delay */ +); + +/*! r: encoder error code */ +ivas_error IVAS_ENC_GetNumInputChannels( + const IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + int16_t *numInChannels /* o : number of input channels with current configuration */ +); + +/*! r: encoder error code */ +ivas_error IVAS_ENC_GetInputBufferSize( + const IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ + int16_t *inputBufferSize /* o : total number of samples expected in the input buffer for current encoder configuration */ +); + +/* Utility functions */ +/*! r: default bandwidth for the encoder */ +IVAS_ENC_BANDWIDTH IVAS_ENC_GetDefaultBandwidth( + const bool isEvs /* i : EVS or IVAS mode */ +); + +/*! r: default DTX config for the encoder */ +IVAS_ENC_DTX_CONFIG IVAS_ENC_GetDefaultDtxConfig( + void +); + +/*! r: default channel-aware mode config for the encoder */ +IVAS_ENC_CHANNEL_AWARE_CONFIG IVAS_ENC_GetDefaultChannelAwareConfig( + void +); + +/*! r: pointer to an error message string */ +const char *IVAS_ENC_GetErrorMessage( + ivas_error error /* i : error code enum */ +); + + +void IVAS_ENC_PrintConfig( + const IVAS_ENC_HANDLE hIvasDec /* i : IVAS encoder handle */ +); + +void IVAS_ENC_PrintDisclaimer( + void +); + +/* clang-format on */ + +#endif /* LIB_ENC_H */ diff --git a/lib_enc/long_enr.c b/lib_enc/long_enr.c new file mode 100644 index 0000000000..3dc098af61 --- /dev/null +++ b/lib_enc/long_enr.c @@ -0,0 +1,156 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * long_enr() + * + * Compute relative energy, long-term average total noise energy and total active speech energy + *-------------------------------------------------------------------*/ + +void long_enr( + Encoder_State *st, /* i/o: encoder state structure */ + const float Etot, /* i : total channel energy */ + const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ + const int16_t high_lpn_flag, /* i : sp/mus LPN flag */ + FRONT_VAD_ENC_HANDLE hFrontVad[CPE_CHANNELS], /* i/o: front-VAD handles */ + const int16_t n_chan, /* i : number of channels */ + const int16_t localVAD_HE_SAD_LR[CPE_CHANNELS], /* i : HE-SAD flag without hangover LR channels */ + const float Etot_LR[CPE_CHANNELS] /* i : total channel energy LR channels */ +) +{ + float tmp; + int16_t n; + + /*-----------------------------------------------------------------* + * Compute long term estimate of total noise energy + * and total active speech energy + *-----------------------------------------------------------------*/ + if ( hFrontVad != NULL ) + { + if ( hFrontVad[0]->ini_frame < 4 ) + { + for ( n = 0; n < n_chan; n++ ) + { + hFrontVad[n]->lp_noise = hFrontVad[n]->hNoiseEst->totalNoise; + tmp = hFrontVad[n]->lp_noise + 10.0f; + + if ( hFrontVad[n]->lp_speech < tmp ) + { + hFrontVad[n]->lp_speech = tmp; + } + } + } + else + { + float smooth_prev, smooth_curr; + + if ( hFrontVad[0]->ini_frame < 150 ) + { + smooth_prev = 0.95f; + smooth_curr = 0.05f; + } + else + { + smooth_prev = 0.98f; + smooth_curr = 0.02f; + } + + for ( n = 0; n < n_chan; n++ ) + { + hFrontVad[n]->lp_noise = smooth_prev * hFrontVad[n]->lp_noise + smooth_curr * hFrontVad[n]->hNoiseEst->totalNoise; + + if ( localVAD_HE_SAD_LR[n] && !high_lpn_flag ) + { + if ( ( hFrontVad[n]->lp_speech - Etot_LR[n] ) < 10.0f ) + { + hFrontVad[n]->lp_speech = 0.98f * hFrontVad[n]->lp_speech + 0.02f * Etot_LR[n]; + } + else + { + hFrontVad[n]->lp_speech = hFrontVad[n]->lp_speech - 0.05f; + } + } + } + } + } + else + { + if ( st->ini_frame < 4 ) + { + st->lp_noise = st->hNoiseEst->totalNoise; + tmp = st->lp_noise + 10.0f; + + if ( st->lp_speech < tmp ) + { + st->lp_speech = tmp; + } + } + else + { + if ( st->ini_frame < 150 ) + { + st->lp_noise = 0.95f * st->lp_noise + 0.05f * st->hNoiseEst->totalNoise; + } + else + { + st->lp_noise = 0.98f * st->lp_noise + 0.02f * st->hNoiseEst->totalNoise; + } + + if ( localVAD_HE_SAD && !high_lpn_flag ) + { + if ( ( st->lp_speech - Etot ) < 10.0f ) + { + st->lp_speech = 0.98f * st->lp_speech + 0.02f * Etot; + } + else + { + st->lp_speech = st->lp_speech - 0.05f; + } + } + } + } + + return; +} diff --git a/lib_enc/lp_exc_e.c b/lib_enc/lp_exc_e.c new file mode 100644 index 0000000000..e8078c5e0e --- /dev/null +++ b/lib_enc/lp_exc_e.c @@ -0,0 +1,302 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define GAIN_PIT_MAX 1.2f +#define ACELP_GAINS_CONST 0.8f /* adaptive codebook gain constraint */ + + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static float adpt_enr( const int16_t codec_mode, const float *exc, const float *h1, float *y1, const int16_t L_subfr, float *gain, float *g_corr, const int16_t clip_gain, const float *xn, float *xn2, int16_t use_prev_sf_pit_gain ); + + +/*-------------------------------------------------------------------* + * lp_filt_exc_enc() + * + * Low-pass filtering of the adaptive excitation + * Innovation target construction + * Gain quantization limitation + *-------------------------------------------------------------------*/ + +int16_t lp_filt_exc_enc( + const int16_t codec_mode, /* i : codec mode */ + const int16_t coder_type, /* i : coding type */ + const int16_t i_subfr, /* i : subframe index */ + float *exc, /* i/o: pointer to excitation signal frame */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + float *y1, /* o : zero-memory filtered adaptive excitation */ + float *xn2, /* o : target vector for innovation search */ + const int16_t L_subfr, /* i : length of vectors for gain quantization */ + const int16_t L_frame, /* i : frame size */ + float *g_corr, /* o : ACELP correlation values */ + const int16_t clip_gain, /* i : adaptive gain clipping flag */ + float *gain_pit, /* o : adaptive excitation gain */ + int16_t *lp_flag /* i/o: mode selection */ +) +{ + float ener, ener_tmp, gain1, gain2, g_corr2[2], exc_tmp[L_FRAME16k], xn2_tmp[L_FRAME16k]; + float y1_tmp[L_FRAME16k]; + int16_t select, i; + int16_t use_prev_sf_pit_gain; + + gain1 = 0.0f; + gain2 = 0.0f; + ener = 0.0f; + ener_tmp = 0.0f; + use_prev_sf_pit_gain = 0; + + /*----------------------------------------------------------------* + * Find energy of the fixed cb. target with respect to adaptive + * exc. filtering + * Find flag about splitting the gain quantizer in half + * - find the target energy if adaptive exc. is not filtered + * - filter the adaptive excitation and find the target energy + * if the exc. is filtered. + *----------------------------------------------------------------*/ + + if ( codec_mode == MODE2 && coder_type == 100 ) + { + use_prev_sf_pit_gain = 1; + } + + if ( *lp_flag == FULL_BAND || *lp_flag == NORMAL_OPERATION ) + { + if ( use_prev_sf_pit_gain == 1 ) + { + ener = adpt_enr( codec_mode, &exc[i_subfr], h1, y1, L_subfr, gain_pit, g_corr, clip_gain, xn, xn2, use_prev_sf_pit_gain ); + } + else + { + ener = adpt_enr( codec_mode, &exc[i_subfr], h1, y1, L_subfr, &gain1, g_corr, clip_gain, xn, xn2, use_prev_sf_pit_gain ); + } + } + + /*----------------------------------------------------------------* + * Find energy of the fixed cb. target with respect to adaptive + * exc. filtering + * filter the adaptive excitation and find the target energy + * if the exc. is filtered. + *----------------------------------------------------------------*/ + + if ( *lp_flag == LOW_PASS || *lp_flag == NORMAL_OPERATION ) + { + if ( codec_mode == MODE2 && L_frame == L_FRAME16k ) + { + for ( i = 0; i < L_subfr; i++ ) + { + exc_tmp[i] = (float) ( 0.21f * exc[i - 1 + i_subfr] + 0.58f * exc[i + i_subfr] + 0.21f * exc[i + 1 + i_subfr] ); + } + } + else + { + for ( i = 0; i < L_subfr; i++ ) + { + exc_tmp[i] = (float) ( 0.18f * exc[i - 1 + i_subfr] + 0.64f * exc[i + i_subfr] + 0.18f * exc[i + 1 + i_subfr] ); + } + } + + if ( use_prev_sf_pit_gain == 1 ) + { + ener_tmp = adpt_enr( codec_mode, exc_tmp, h1, y1_tmp, L_subfr, gain_pit, g_corr2, clip_gain, xn, xn2_tmp, use_prev_sf_pit_gain ); + } + else + { + ener_tmp = adpt_enr( codec_mode, exc_tmp, h1, y1_tmp, L_subfr, &gain2, g_corr2, clip_gain, xn, xn2_tmp, use_prev_sf_pit_gain ); + } + } + + /*-----------------------------------------------------------------* + * use the best prediction (minimize quadratic error) + *-----------------------------------------------------------------*/ + + if ( ( ( ener_tmp < ener ) && ( *lp_flag == NORMAL_OPERATION ) ) || ( *lp_flag == LOW_PASS ) ) + { + /* use the LP filter for pitch excitation prediction */ + select = LOW_PASS; + mvr2r( exc_tmp, &exc[i_subfr], L_subfr ); + mvr2r( y1_tmp, y1, L_subfr ); + mvr2r( xn2_tmp, xn2, L_subfr ); + + if ( use_prev_sf_pit_gain == 0 ) + { + *gain_pit = gain2; + g_corr[0] = g_corr2[0]; + g_corr[1] = g_corr2[1]; + } + } + else + { + /* no LP filter used for pitch excitation prediction */ + select = FULL_BAND; + if ( use_prev_sf_pit_gain == 0 ) + { + *gain_pit = gain1; + } + } + + return ( select ); +} + +/*-------------------------------------------------------------------* + * adpt_enr() + * + * Find the adaptive excitation energy + * This serves to decide about the filtering of the adaptive excitation + *-------------------------------------------------------------------*/ + +static float adpt_enr( + const int16_t codec_mode, /* i : codec mode */ + const float *exc, /* i : Excitation vector */ + const float *h1, /* i : impuls response */ + float *y1, /* o : zero-memory filtered adpt. excitation */ + const int16_t L_subfr, /* i : vector length */ + float *gain, /* o : subframe adaptive gain */ + float *g_corr, /* o : correlations for adptive gain */ + const int16_t clip_gain, /* i : adaptive gain clipping flag */ + const float *xn, /* i : adaptive codebook target */ + float *xn2, /* o : algebraic codebook target */ + int16_t use_prev_sf_pit_gain /* i : flag to use prev sf pitch gain or not */ +) +{ + float ener; + + conv( exc, h1, y1, L_subfr ); + if ( use_prev_sf_pit_gain == 0 ) + { + *gain = corr_xy1( xn, y1, g_corr, L_subfr, codec_mode == MODE2 ); + + /* clip gain, if necessary to avoid problems at decoder */ + if ( clip_gain == 1 && *gain > 0.95f ) + { + *gain = 0.95f; + } + + if ( clip_gain == 2 && *gain > 0.65f ) + { + *gain = 0.65f; + } + } + + /* find energy of new target xn2[] */ + updt_tar( xn, xn2, y1, *gain, L_subfr ); + ener = dotp( xn2, xn2, L_subfr ); + + return ener; +} + +/*-------------------------------------------------------------------* + * corr_xy1() + * + * Find the correlations between the target xn[] and the filtered adaptive + * codebook excitation y1[]. ( and -2 ) + *-------------------------------------------------------------------*/ + +/*! r: pitch gain (0..GAIN_PIT_MAX) */ +float corr_xy1( + const float xn[], /* i : target signal */ + const float y1[], /* i : filtered adaptive codebook excitation */ + float g_corr[], /* o : correlations and -2 */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t norm_flag /* i : flag for constraining pitch contribution */ +) +{ + float temp1, temp2, gain, gain_p_snr; + + /*-----------------------------------------------------------------* + * Find the ACELP correlations and the pitch gain + * (for current subframe) + *-----------------------------------------------------------------*/ + + /* Compute scalar product */ + temp1 = dotp( xn, y1, L_subfr ); + + /* Compute scalar product */ + temp2 = dotp( y1, y1, L_subfr ) + 0.01f; + + g_corr[0] = temp2; + g_corr[1] = -2.0f * temp1 + 0.01f; + + /* find pitch gain and bound it by [0,GAIN_PIT_MAX] */ + if ( norm_flag ) + { + gain = ( temp1 + 0.01f ) / temp2; + } + else + { + gain = temp1 / temp2; + } + + if ( gain < 0.0f ) + { + gain = 0.0f; + } + if ( gain > GAIN_PIT_MAX ) + { + gain = GAIN_PIT_MAX; + } + + /* Limit the energy of pitch contribution */ + if ( norm_flag ) + { + /* Compute scalar product */ + temp1 = dotp( xn, xn, L_subfr ); + gain_p_snr = (float) ( ACELP_GAINS_CONST * sqrt( temp1 / temp2 ) ); + + if ( gain > gain_p_snr ) + { + gain = gain_p_snr; + } + } + + return gain; +} diff --git a/lib_enc/lsf_enc.c b/lib_enc/lsf_enc.c new file mode 100644 index 0000000000..a6d973b36e --- /dev/null +++ b/lib_enc/lsf_enc.c @@ -0,0 +1,2132 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#include +#endif +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "basop_proto_func.h" +#ifdef LSF_RE_USE_SECONDARY_CHANNEL +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#endif +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define MSVQ_MAXCNT 3000 /* was 300 */ +#define LOWEMPH_LSFI 1.0f /* bigger value means more weight for lower frequencies */ + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void lsfq_CNG( BSTR_ENC_HANDLE hBstr, const float *lsf, const float *wghts, float *qlsf ); + +static void lsf_mid_enc( BSTR_ENC_HANDLE hBstr, int16_t nb_bits, const int32_t int_fs, const float qisp0[], const float qisp1[], float isp[], const int16_t coder_type, const int16_t bwidth, const float Bin_Ener[], const int16_t ppp_mode, const int16_t nelp_mode ); + +static float vq_lvq_lsf_enc( const int16_t pred_flag, const int16_t mode, const float u[], const int16_t *levels, const int16_t stages, const float w[], int16_t Idx[], const float *lsf, const float *pred, float *resq, float *lsfq ); + +static float qlsf_ARSN_tcvq_Enc_16k( const float *x, float *y, int16_t *indice, const float *w, const int16_t nBits, const int16_t safety_net ); + + +/*-------------------------------------------------------------------* + * lsf_enc() + * + * Quantization of LSF vector + *-------------------------------------------------------------------*/ + +void lsf_enc( + Encoder_State *st, /* i/o: state structure */ + float *lsf_new, /* o : quantized LSF vector */ + float *lsp_new, /* i/o: LSP vector to quantize/quantized */ + float *lsp_mid, /* i/o: mid-frame LSP vector */ + float *Aq, /* o : quantized A(z) for 4 subframes */ + const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ + const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +#endif +) +{ + int16_t i, nBits, force_sf, no_param_lpc; + float fec_lsf[M], stab; + int16_t param_lpc[NPRM_LPC_NEW]; + int16_t coder_type, ppp_mode, nelp_mode; + + if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) + { + coder_type = INACTIVE; + } + else + { + coder_type = st->coder_type; + } + + if ( coder_type == AUDIO && GSC_IVAS_mode > 0 ) + { + coder_type = GENERIC; + } + + + /* initialize */ + no_param_lpc = 0; + + if ( st->Opt_SC_VBR ) + { + ppp_mode = st->hSC_VBR->ppp_mode; + nelp_mode = st->hSC_VBR->nelp_mode; + } + else + { + ppp_mode = 0; + nelp_mode = 0; + } + + /* convert LSPs to LSFs */ + lsp2lsf( lsp_new, lsf_new, M, st->sr_core ); + + /* check resonance for pitch clipping algorithm */ + gp_clip_test_lsf( st->element_mode, st->core_brate, lsf_new, st->clip_var, 0 ); + + /*-------------------------------------------------------------------------------------* + * Find the number of bits for LSF quantization + *-------------------------------------------------------------------------------------*/ + + nBits = 0; + if ( st->core_brate == SID_2k40 ) + { + nBits = LSF_BITS_CNG; + } + else + { + if ( nelp_mode == 0 && ppp_mode == 0 ) + { + nBits = st->acelp_cfg.lsf_bits; + } + else if ( nelp_mode == 1 ) + { + if ( st->bwidth == NB ) + { + nBits = 32; /* Stole 1 bit for SID/NELP harmonization*/ + } + else if ( st->bwidth == WB ) + { + nBits = 30; /* Stole 1 bit for SID/NELP harmonization */ + } + } + else if ( ppp_mode == 1 ) + { + + /*The LSF bit scaling does not work here. */ + nBits = 26; /*Stole 1 bit for SID PPP harmonization*/ + } + } + + + force_sf = 0; + if ( st->Nb_ACELP_frames < 3 && st->core_brate != SID_2k40 ) + { + /* first three ACELP frames after an HQ frame shall be processed only with safety-net quantizer */ + force_sf = 1; + } + + if ( st->next_force_safety_net == 1 ) + { + /* in case of unstable filter, choose safety-net to help FEC */ + force_sf = 1; + st->next_force_safety_net = 0; + } + + /*-------------------------------------------------------------------------------------* + * LSF quantization + *-------------------------------------------------------------------------------------*/ + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + lsf_end_enc( st, lsf_new, lsf_new, nBits, coder_type, force_sf, param_lpc, &no_param_lpc, NULL, st->coder_type_raw, + tdm_lsfQ_PCh ); +#else + lsf_end_enc( st, lsf_new, lsf_new, nBits, coder_type, force_sf, param_lpc, &no_param_lpc, NULL, st->coder_type_raw ); +#endif + + /* convert quantized LSFs back to LSPs */ + lsf2lsp( lsf_new, lsp_new, M, st->sr_core ); + + if ( st->last_core == HQ_CORE && st->core == ACELP_CORE ) + { + /* don't use old LSF values if this is the first ACELP frame after HQ frames */ + mvr2r( lsf_new, st->lsf_old, M ); + } + + /* set seed_acelp used in UC mode */ + if ( coder_type == UNVOICED && st->element_mode > EVS_MONO ) + { + st->seed_acelp = 0; + for ( i = no_param_lpc - 1; i >= 0; i-- ) + { + /* rightshift before *seed_acelp+param_lpc[i] to avoid overflows*/ + st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[i] ) * 31821L + 13849L ); + } + } + + if ( st->core_brate == SID_2k40 ) + { + /* return if SID frame (conversion to A(z) done in the calling function) */ + return; + } + + /*-------------------------------------------------------------------------------------* + * FEC - enforce safety-net in the next frame in case of unstable filter + *-------------------------------------------------------------------------------------*/ + + if ( st->last_L_frame != st->L_frame ) + { + /* FEC - in case of core switching, use old LSFs that have been smoothed with adaptive mean */ + mvr2r( st->lsf_old, st->lsfoldbfi1, M ); + mvr2r( st->lsf_old, st->lsfoldbfi0, M ); + mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); + } + + FEC_lsf_estim_enc( st, fec_lsf ); + + /* FEC - calculate LSF stability */ + stab = lsf_stab( lsf_new, fec_lsf, 0, st->L_frame ); + + if ( st->L_frame == L_FRAME16k && stab < STAB_FAC_LIMIT && coder_type == GENERIC ) + { + st->next_force_safety_net = 1; + } + else + { + if ( stab < STAB_FAC_LIMIT && ( st->clas == VOICED_CLAS || ( st->clas < VOICED_CLAS && coder_type == AUDIO ) ) ) + { + st->next_force_safety_net = 1; + } + } + + /* FEC - update adaptive LSF mean vector */ + for ( i = 0; i < M; i++ ) + { + st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsf_new[i] ) / 3; + } + + /* FEC - update LSF memories */ + mvr2r( st->lsfoldbfi0, st->lsfoldbfi1, M ); + mvr2r( lsf_new, st->lsfoldbfi0, M ); + + /*-------------------------------------------------------------------------------------* + * Mid-frame LSF encoding + * LSP interpolation and conversion of LSPs to A(z) + *-------------------------------------------------------------------------------------*/ + + if ( st->rate_switching_reset ) + { + /*extrapolation in case of unstable LSF convert*/ + mvr2r( lsp_new, st->lsp_old, M ); + mvr2r( lsf_new, st->lsf_old, M ); + } + + /* Mid-frame LSF encoding */ + lsf_mid_enc( st->hBstr, st->acelp_cfg.mid_lsf_bits, st->sr_core, st->lsp_old, lsp_new, lsp_mid, coder_type, st->bwidth, st->Bin_E_old, ppp_mode, nelp_mode ); + + if ( st->last_core == HQ_CORE && st->core == ACELP_CORE ) + { + /* don't use old LSP/LSF values if this is the first ACELP frame after HQ frames */ + mvr2r( lsp_mid, st->lsp_old, M ); + lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); + } + + if ( tdm_low_rate_mode == 1 && coder_type > UNVOICED ) + { + if ( st->active_cnt == 1 ) + { + mvr2r( lsp_mid, st->lsp_old, M ); + lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); + mvr2r( lsp_new, lsp_mid, M ); + } + + /* LSP interpolation and conversion of LSPs to A(z) - two-subframe mode */ + int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, -2 ); + } + else + { + /* LSP interpolation and conversion of LSPs to A(z) */ + int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, 0 ); + } + + /*------------------------------------------------------------------* + * Check LSF stability (distance between old LSFs and current LSFs) + *------------------------------------------------------------------*/ + + if ( st->core_brate != SID_2k40 ) + { + st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * lsfq_CNG() + * + * LSF quantizer for SID frames (uses 29 bits, 4 for VQ, 25 for LVQ) + * Note: + * The sampling frequency of the LP-CNG frame can be determined by checking the value of the highest order LSF + * coefficient (last coefficient of lsf). If the last LSF coefficient (lsf[M-1]) is larger than 6350 + * the decoded frame is WB2 with sampling rate of 16 kHz, otherwise it is sampled at 12.8kHz and contains + * either NB or WB LSF data. + *-------------------------------------------------------------------*/ + +static void lsfq_CNG( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *lsf, + const float *wghts, + float *qlsf_out ) +{ + int16_t i, j, idx_cv, idx_lvq[3]; + float min_dist, dist, dd[M], ddq[M]; + const float *p_cb; + int16_t first_cb, last_cb; + int16_t idx_lead_cng[2], idx_scale_cng[2]; + + float qlsf[M]; + idx_cv = 0; + + /* quantize first stage with 4 bits */ + if ( lsf[M - 1] > WB_LIMIT_LSF ) /* 16kHz sampled LSF vector*/ + { + p_cb = &CNG_SN1[0]; + first_cb = 0; + last_cb = 6; + } + else /* 12.8kHz sampled LSF vector*/ + { + p_cb = &CNG_SN1[6 * M]; + first_cb = 6; + last_cb = M; + } + + min_dist = 1.0e30f; + for ( i = first_cb; i < last_cb; i++ ) + { + dist = 0.0f; + for ( j = 0; j < M; j++ ) + { + dist += wghts[j] * ( *p_cb ) * ( *p_cb - 2 * lsf[j] ); + p_cb++; + } + + if ( dist < min_dist ) + { + min_dist = dist; + idx_cv = i; + } + } + + /* calculate difference */ + for ( i = 0; i < M; i++ ) + { + dd[i] = lsf[i] - CNG_SN1[idx_cv * M + i]; + } + + /* quantize the difference with LVQ */ + mslvq_cng( idx_cv, dd, qlsf, ddq, idx_lead_cng, idx_scale_cng, wghts ); + + index_lvq( ddq, idx_lead_cng, idx_scale_cng, START_CNG + idx_cv, idx_lvq, 0 ); + + v_add( qlsf, &CNG_SN1[idx_cv * M], qlsf, M ); + /* write the VQ index to the bitstream */ + push_indice( hBstr, IND_ISF_0_0, idx_cv, 4 ); + + /* write the LVQ index to the bitstream */ + push_indice( hBstr, IND_ISF_0_1, idx_lvq[0], LEN_INDICE ); + push_indice( hBstr, IND_ISF_0_1, idx_lvq[1], LSF_BITS_CNG - 4 - LEN_INDICE ); + + mvr2r( qlsf, qlsf_out, M ); + + return; +} + +/*-------------------------------------------------------------------* + * qlsf_Mode_Select() + * + * Mode selection for LSF quantizer + *-------------------------------------------------------------------*/ + +static int16_t qlsf_Mode_Select( + const float *lsf, /* i : LSF vector */ + const float *w, /* i : weighting vector */ + const float *pred1, /* i : prediction vector */ + const float streaklimit, /* i : predictive streak limit */ + const float op_loop_thr /* i : Open-loop Threshold */ +) +{ + int16_t i; + int16_t safety_net; + float pred_pow2[M], En; + + /* calculate the prediction residual */ + for ( i = 0; i < M; i++ ) + { + pred_pow2[i] = lsf[i] - pred1[i]; + } + + /* calculate its energy */ + v_mult( pred_pow2, pred_pow2, pred_pow2, M ); + En = dotp( pred_pow2, w, M ); + + /* choose the mode */ + if ( En > streaklimit * op_loop_thr ) + { + /* Safety-net */ + safety_net = 1; + } + else + { + /* Predictive */ + safety_net = 0; + } + + return safety_net; +} + + +/*-------------------------------------------------------------------* + * lsf_end_enc() + * + * Quantization of LSF parameters + *-------------------------------------------------------------------*/ + +void lsf_end_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *lsf, /* i : LSF in the frequency domain (0..6400) */ + float *qlsf, /* o : quantized LSF */ + const int16_t nBits_in, /* i : number of bits to spend on ISF quantization */ + const int16_t coder_type_org, /* i : coding type */ + const int16_t force_sf, /* i : Force safety-net usage (if possible), due to filter instability, MDCT-core switching etc. */ + int16_t *lpc_param, + int16_t *no_indices, + int16_t *bits_param_lpc, + const int16_t coder_type_raw +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ +#endif +) +{ + int16_t i; + int16_t Idx0[MAX_VQ_STAGES + 3]; /* Optimal codebook indices for safety-net quantizer */ + int16_t Idx1[MAX_VQ_STAGES + 3]; /* Optimal codebook indices for predictive quantizer */ + int16_t indice[MAX_VQ_STAGES + 3]; /* Temp. array of indice for vector de-quantizer */ + int16_t mode_lvq = 0, mode_lvq_p = 0; + int16_t bits0[MAX_VQ_STAGES], bits1[MAX_VQ_STAGES]; + const int16_t *Bit_alloc1 = NULL; + float Err[2]; /* Quantization error for safety-net(0) and predictive(1) quantizers */ + float Tmp[M]; /* Temporary target vector (mean and prediction removed) */ + float pred0[M]; /* Prediction for the safety-net quantizer (usually mean) */ + float pred1[M]; /* Prediction for the predictive quantizer */ + float pred2[M]; /* Prediction for the predictive quantizer */ + float wghts[M]; /* Weighting used for quantizer (currently GSM based) */ + int16_t stages0; /* Amount of stages used by safety-net quantizer */ + int16_t stages1; /* Amount of stages used by predictive quantizer */ + int16_t levels0[MAX_VQ_STAGES]; /* Sizes of different codebook stages for safety-net quantizer */ + int16_t levels1[MAX_VQ_STAGES]; /* Sizes of different codebook stages for predictive quantizer */ + int16_t predmode; /* 0: safety-net only, 1: predictive only, 2: best of the two */ + int16_t safety_net, cumleft, num_bits; + int16_t *Idx, stages, *bits; + float Tmp1[M], Tmp2[M]; /* Temporary target vectors for MA and AR quantizers respectively */ + float abs_threshold; /* Absolute Error value that is considered as "good enough" (in practice close to SD of 1.0dB)*/ + float lsfq[M * 2], resq[M * 2]; + int16_t coder_type; + int16_t nBits; + int16_t TCQIdx0[M + 2]; /* Optimal codebook indices for VQ-TCQ quantizer */ + int16_t *TCQIdx; + int16_t flag_1bit_gran; + BSTR_ENC_HANDLE hBstr = st->hBstr; +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + float pred3[M]; + int16_t dummy, dummy_v[5]; +#endif + + flag_1bit_gran = ( st->element_mode > EVS_MONO ); + nBits = nBits_in; + + if ( coder_type_org == GENERIC && st->sr_core == INT_FS_16k && st->codec_mode == MODE1 +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + && ( st->idchan == 0 ) /* this bit is used only for primary channel or mono */ +#endif + ) + { + if ( coder_type_raw == VOICED ) + { + coder_type = VOICED; /* Reflect Inactive mode */ + if ( flag_1bit_gran == 1 ) + { + nBits--; + } + } + else + { + nBits--; /* This is for real Generic*/ + coder_type = coder_type_org; + } + } + else + { + coder_type = coder_type_org; + } + + + /*--------------------------------------------------------------------------------* + * Calculate the number of stages and levels for each stage based on allowed bit budget + * Set absolute threshold for codebook-type decision logic + *--------------------------------------------------------------------------------*/ + + if ( st->bwidth == NB ) + { + abs_threshold = SFNETLOWLIMIT_NB; + } + else + { + abs_threshold = SFNETLOWLIMIT_WB; + } + + Unified_weighting( &st->Bin_E[L_FFT / 2], lsf, wghts, st->bwidth == NB, coder_type == UNVOICED, st->sr_core, M ); + + /*--------------------------------------------------------------------------------* + * LSF quantization of SID frames + *--------------------------------------------------------------------------------*/ + + if ( st->core_brate == SID_2k40 ) + { + lsfq_CNG( st->hBstr, lsf, wghts, qlsf ); + v_sort( qlsf, 0, M - 1 ); + reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); + + return; + } + + find_pred_mode( &predmode, coder_type, st->bwidth, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); + + /*----------------------------------------------------------------* + * Calculate number of stages and levels for each stage based on the allowed bit allocation + * (subtract one bit for LSF predictor selection) + *----------------------------------------------------------------*/ + + lsf_allocate( nBits - ( predmode >> 1 ), mode_lvq, mode_lvq_p, &stages0, &stages1, levels0, levels1, bits0, bits1 ); + + /*--------------------------------------------------------------------------------* + * LSF quantization of all other frames but SID frames + * Select safety-net or predictive mode + *--------------------------------------------------------------------------------*/ + + Err[0] = FLT_MAX; + Err[1] = FLT_MAX; + /* for mem_MA update */ + for ( i = 0; i < M; i++ ) + { + pred1[i] = ModeMeans[mode_lvq][i] + MU_MA * st->mem_MA[i]; + } + +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + /* TD stereo SCh: perform intra-frame prediction with pulling-to-mean */ + if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) + { + /* if secondary channel predmode is set to be > 2 */ + predmode += 3; + + tdm_SCh_LSF_intra_pred( st->element_brate, tdm_lsfQ_PCh, pred3 ); + } +#endif + + if ( predmode == 0 ) /* Safety-net only */ + { + /* Subtract only mean */ + mvr2r( ModeMeans[mode_lvq], pred0, M ); + v_sub( lsf, pred0, Tmp, M ); + + /* LVQ quantization (safety-net only) */ + Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, resq, lsfq ); + safety_net = 1; + st->pstreaklen = 0; /* Streak is ended with safety-net */ + } + else if ( predmode == 1 ) /* only MA prediction */ + { + v_sub( lsf, pred1, Tmp1, M ); + Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp1, levels1, stages1, wghts, Idx1, lsf, pred1, resq, lsfq ); + + safety_net = 0; + } + else /* Switched Safety-Net/AR prediction */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + { + if ( predmode == 2 ) +#endif + { + /* Subtract mean and AR prediction */ + mvr2r( ModeMeans[mode_lvq], pred0, M ); + + /* subtract only mean */ + v_sub( lsf, pred0, Tmp, M ); + + for ( i = 0; i < M; i++ ) + { + /* subtract mean and AR prediction */ + pred2[i] = pred0[i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - pred0[i] ); + Tmp2[i] = lsf[i] - pred2[i]; + } + + /* Adaptive scaling factor (multiplier) is updated in order to reduce the amount of consecutive predictive frames in + case of possible frame erasure. AR-predictive usage for VOICED mode is allowed to be higher than other modes. */ + if ( ( ( st->pstreaklen > ( STREAKLEN + 3 ) ) && ( coder_type == VOICED ) ) || ( ( st->pstreaklen > ( STREAKLEN ) ) && ( coder_type != VOICED ) ) ) + { + /* update the adaptive scaling factor to become smaller with increasing number of concecutive predictive frames. */ + st->streaklimit *= STREAKMULT; + } + + if ( st->pstreaklen == 0 ) + { + /* reset the adaptive scaling factor */ + st->streaklimit = 1.0f; + } + + /* VOICED_WB@16kHz */ + if ( st->sr_core == INT_FS_16k && coder_type == VOICED && flag_1bit_gran == 0 ) + { + /* select safety_net or predictive in open loop*/ + safety_net = qlsf_Mode_Select( lsf, wghts, pred2, st->streaklimit, OP_LOOP_THR_HVO ); + + if ( force_sf == 1 ) + { + safety_net = 1; + } + + if ( safety_net ) + { + /* Safety-net - BC-TCQ quantization : SN */ + Err[0] = qlsf_ARSN_tcvq_Enc_16k( Tmp, lsfq, TCQIdx0, wghts, nBits - 1, safety_net ); + st->pstreaklen = 0; + } + else + { + /* predictive - BC-TCQ quantization : AR */ + /* For consistency Err[1] contains predictive error */ + Err[1] = qlsf_ARSN_tcvq_Enc_16k( Tmp2, lsfq, TCQIdx0, wghts, nBits - 1, safety_net ); + ( st->pstreaklen )++; + } + } + /* all other frames (not VOICED@16kHz) */ + else + { + /* safety-net */ + Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, resq, lsfq ); + /* Predictive quantizer is calculated only if it can be selected, this saves computation */ + if ( !force_sf || Err[0] > abs_threshold ) + { + Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp2, levels1, stages1, wghts, Idx1, lsf, pred2, &resq[M], &lsfq[M] ); + } + /* Select whether to use safety-net or predictive LSF quantizer. The decision is based on following: + if the non-predictive (safety-net) quantization error (Err[0]) is low enough it is selected + or if the predictively quantized error (Err[1]) is by at least adaptive margin smaller than non-predictive quantizer. + or if the in case of frame erasure the resulting concealed predictive LSF would be unstable safety-net is selected */ + if ( force_sf || Err[0] * ( st->streaklimit ) < PREFERSFNET * Err[1] || Err[0] < abs_threshold ) + { + safety_net = 1; + st->pstreaklen = 0; /* Reset the consecutive predictive frame counter */ + } + else + { + safety_net = 0; + ( st->pstreaklen )++; /* Increase the consecutive predictive frame counter by one */ + } + } + } +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + else /* of "if (predmode==2)" */ + { + mvr2r( ModeMeans[mode_lvq], pred0, M ); + + if ( predmode == 4 ) + { + mode_lvq_p = 9; /* force to Generic WB with AR*/ + } + + for ( i = 0; i < M; i++ ) + { + /* subtract mean and AR prediction */ + pred2[i] = pred0[i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - pred0[i] ); + Tmp[i] = lsf[i] - pred2[i]; + Tmp2[i] = lsf[i] - pred3[i]; + } + + /* Adaptive scaling factor (multiplier) is updated in order to reduce the amount of consecutive predictive frames in + case of possible frame erasure. AR-predictive usage for VOICED mode is allowed to be higher than other modes. */ + if ( st->pstreaklen > ( STREAKLEN ) ) + { + /* update the adaptive scaling factor to become smaller with increasing number of concecutive predictive frames. */ + st->streaklimit *= STREAKMULT; + } + + if ( st->pstreaklen == 0 ) + { + /* reset the adaptive scaling factor */ + st->streaklimit = 1.0f; + } + + /* intra pred */ + /* use G AR pred for the intra mode (as a safety mode, this is why the indexes 0/1 are interchanged)*/ + + lsf_allocate( nBits - 1, mode_lvq, 9, &stages1, &stages0, levels1, levels0, bits1, bits0 ); + + Err[0] = vq_lvq_lsf_enc( 2, 9, Tmp2, levels0, stages0, wghts, Idx0, lsf, pred3, &resq[M], &lsfq[M] ); + + if ( force_sf ) + { + safety_net = 1; /* intra-frame prediction */ + st->pstreaklen = 0; /* Reset the consecutive predictive frame counter */ + } + else + { /* try also the inter frame prediction */ + + /* AR inter-frame prediction */ + lsf_allocate( nBits - 1, mode_lvq, mode_lvq_p, &dummy, &stages1, dummy_v, levels1, dummy_v, bits1 ); + + + Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp, levels1, stages1, wghts, Idx1, lsf, pred2, resq, lsfq ); + + if ( Err[0] * ( st->streaklimit ) < PREFERSFNET * Err[1] ) + { + safety_net = 1; + st->pstreaklen = 0; /* Reset the consecutive predictive frame counter */ + } + else + { + safety_net = 0; + ( st->pstreaklen )++; /* Increase the consecutive predictive frame counter by one */ + } + } + } + } +#endif + /*--------------------------------------------------------------------------* + * Write indices to array + *--------------------------------------------------------------------------*/ + + if ( st->codec_mode == MODE1 && st->core == ACELP_CORE ) + { + /* write coder_type bit for VOICED@16kHz or GENERIC@16kHz */ + if ( coder_type_org == GENERIC && st->sr_core == INT_FS_16k +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + && ( st->idchan == 0 ) +#endif + ) + { + /* VOICED =2 and GENERIC=3, so "coder_type-2" means VOICED =0 and GENERIC=1*/ + push_indice( hBstr, IND_LSF_PREDICTOR_SELECT_BIT, coder_type - 2, 1 ); + } + + /* write predictor selection bit */ +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + if ( predmode >= 2 ) +#else + if ( predmode == 2 ) +#endif + { + push_indice( hBstr, IND_LSF_PREDICTOR_SELECT_BIT, safety_net, 1 ); + } + + if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) + { + /* BC-TCVQ (only for VOICED@16kHz) */ + TCQIdx = &TCQIdx0[1]; + Bit_alloc1 = &BC_TCVQ_BIT_ALLOC_40B[1]; + for ( i = 0; i < M / 2 + 3; i++ ) + { + push_indice( hBstr, IND_LSF, TCQIdx[i], Bit_alloc1[i] ); + } + } + else + { + cumleft = nBits; +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + if ( predmode >= 2 ) +#else + if ( predmode == 2 ) +#endif + { + /* subtract predictor selection bit */ + cumleft = nBits - 1; + } + + if ( safety_net ) + { + stages = stages0; + Idx = Idx0; + bits = bits0; + } + else + { + stages = stages1; + Idx = Idx1; + bits = bits1; + } + + for ( i = 0; i < stages - 1; i++ ) + { + indice[i] = Idx[i]; + num_bits = bits[i]; + cumleft -= num_bits; + + push_indice( hBstr, IND_LSF, indice[i], num_bits ); + } + + while ( cumleft > 0 ) + { + indice[i] = Idx[i]; + + if ( cumleft > LEN_INDICE ) + { + num_bits = LEN_INDICE; + } + else + { + num_bits = cumleft; + } + + cumleft -= num_bits; + + push_indice( hBstr, IND_LSF, indice[i], num_bits ); + + i++; + } + } + } + else + { + if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) + { + /* BC-TCVQ (only for VOICED@16kHz) */ + /* Number of quantization indices */ + *no_indices = 10; + for ( i = 0; i < *no_indices; i++ ) + { + lpc_param[i] = TCQIdx0[i]; + bits_param_lpc[i] = BC_TCVQ_BIT_ALLOC_40B[i]; + } + } + else + { + /* Number of quantization indices */ + + /* there are 31 bits */ + if ( safety_net == 1 ) + { + Idx = Idx0; + *no_indices = stages0 + 1; + for ( i = 0; i < stages0; i++ ) + { + lpc_param[i] = Idx[i]; + indice[i] = Idx[i]; + bits_param_lpc[i] = bits0[i]; + } + lpc_param[stages0] = Idx[stages0]; + indice[stages0] = Idx[stages0]; + + bits_param_lpc[stages0 - 1] = LEN_INDICE; + bits_param_lpc[stages0] = bits0[stages0 - 1] - LEN_INDICE; + } + else + { + *no_indices = stages1 + 1; + Idx = Idx1; + for ( i = 0; i < stages1; i++ ) + { + lpc_param[i] = Idx[i]; + indice[i] = Idx[i]; + bits_param_lpc[i] = bits1[i]; + } + lpc_param[stages1] = Idx[stages1]; + indice[stages1] = Idx[stages1]; + + bits_param_lpc[stages1 - 1] = LEN_INDICE; + bits_param_lpc[stages1] = bits1[stages1 - 1] - LEN_INDICE; + } + if ( predmode == 2 ) + { + for ( i = *no_indices; i > 0; i-- ) + { + lpc_param[i] = lpc_param[i - 1]; + bits_param_lpc[i] = bits_param_lpc[i - 1]; + } + lpc_param[0] = safety_net; /* put the safety net info on the last param */ + bits_param_lpc[0] = 1; + *no_indices = *no_indices + 1; + } + } + } + + + /*--------------------------------------------------------------------------* + * De-quantize encoded LSF vector + *--------------------------------------------------------------------------*/ + + if ( safety_net ) + { + /* Safety-net */ + if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) + { + /* BC-TCQ */ + mvr2r( lsfq, st->mem_MA, M ); + v_add( lsfq, pred0, qlsf, M ); + } + else + { +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) + { + /* intra mode*/ + vq_dec_lvq( 0, qlsf, &indice[0], stages0, M, 9, /*mode_lvq_p,*/ levels0[stages0 - 1] ); + v_add( qlsf, pred3, qlsf, M ); + v_sub( qlsf, pred1, st->mem_MA, M ); + } + else + { +#endif + vq_dec_lvq( 1, qlsf, &indice[0], stages0, M, mode_lvq, levels0[stages0 - 1] ); + + v_add( qlsf, pred0, qlsf, M ); + v_sub( qlsf, pred1, st->mem_MA, M ); +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + } +#endif + } + } + else + { + if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) + { + /* BC-TCVQ */ + mvr2r( lsfq, st->mem_MA, M ); + v_add( lsfq, pred2, qlsf, M ); + } + else + { + /* LVQ */ + vq_dec_lvq( 0, qlsf, &indice[0], stages1, M, mode_lvq_p, levels1[stages1 - 1] ); + if ( predmode == 1 ) + { + mvr2r( qlsf, st->mem_MA, M ); + v_add( qlsf, pred1, qlsf, M ); + } + else + { + v_add( qlsf, pred2, qlsf, M ); + v_sub( qlsf, pred1, st->mem_MA, M ); + } + } + } + + /*--------------------------------------------------------------------------* + * Sort the quantized vector + * Verify stability + * Update AR-predictor memory + *--------------------------------------------------------------------------*/ + + /* Sort the quantized vector to ascending order */ + v_sort( qlsf, 0, M - 1 ); + + /* Verify stability by adding minimum separation */ + reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); + + /* Update predictor memories */ + mvr2r( qlsf, st->mem_AR, M ); + + return; +} + + +/*-------------------------------------------------------------------* + * first_VQstages() + * + * + *-------------------------------------------------------------------*/ +void first_VQstages( + const float *const *cb, + const float u[], /* i : vector to be encoded (prediction and mean removed) */ + const int16_t *levels, /* i : number of levels in each stage */ + const int16_t stagesVQ, /* i : number of stages */ + const float w[], /* i : weights */ + const int16_t N, /* i : vector dimension */ + const int16_t max_inner, /* i : maximum number of swaps in inner loop */ + int16_t indices_VQstage[] ) +{ + float ftmp, resid_buf[2 * LSFMBEST * M], *resid[2], dist_buf[2 * LSFMBEST], *dist[2]; + float en, tmp, Tmp[M], *pTmp; + int16_t *pTmp_short, idx_buf[2 * LSFMBEST * MAX_VQ_STAGES], parents[LSFMBEST], counter = 0, j, m, s, c, c2, p_max, *indices[2]; + int16_t maxC = LSFMBEST; + + /*float dd[16];*/ + const float *cb_stage, *cbp; + + /* Set pointers to previous (parent) and current node (parent node is indexed [0], current node is indexed [1]) */ + indices[0] = idx_buf; + indices[1] = idx_buf + maxC * stagesVQ; + resid[0] = resid_buf; + resid[1] = resid_buf + maxC * N; + dist[0] = dist_buf; + dist[1] = dist_buf + maxC; + + set_s( idx_buf, 0, ( const int16_t )( 2 * stagesVQ * maxC ) ); + set_s( parents, 0, maxC ); + + /* Set up inital distance vector */ + for ( tmp = 0, j = 0; j < N; j++ ) + { + tmp += u[j] * u[j] * w[j]; + } + set_f( dist[1], tmp, maxC ); + + /* Set up inital error (residual) vectors */ + pTmp = resid[1]; + for ( c = 0; c < maxC; c++ ) + { + mvr2r( u, pTmp, N ); + pTmp += N; + } + + /*----------------------------------------------------------------* + * LSF quantization + *----------------------------------------------------------------*/ + + /* Loop over all stages */ + for ( m = 1, s = 0; s < stagesVQ; s++ ) + { + /* set codebook pointer to point to first stage */ + cbp = cb[s]; + + /* save pointer to the beginning of the current stage */ + cb_stage = cbp; + + /* swap pointers to parent and current nodes */ + pTmp_short = indices[0]; + indices[0] = indices[1]; + indices[1] = pTmp_short; + + pTmp = resid[0]; + resid[0] = resid[1]; + resid[1] = pTmp; + + pTmp = dist[0]; + dist[0] = dist[1]; + dist[1] = pTmp; + + /* p_max points to maximum distortion node (worst of best) */ + p_max = 0; + + /* set distortions to a large value */ + set_f( dist[1], 99e10f, maxC ); + + for ( j = 0; j < levels[s]; j++ ) + { + /* compute weighted codebook element and its energy */ + for ( c2 = 0; c2 < N; c2++ ) + { + Tmp[c2] = w[c2] * cbp[c2]; + } + + en = cbp[0] * Tmp[0]; + for ( c2 = 1; c2 < N; c2++ ) + { + en += cbp[c2] * Tmp[c2]; + } + cbp += N; + + /* iterate over all parent nodes */ + for ( c = 0; c < m; c++ ) + { + pTmp = &resid[0][c * N]; + tmp = pTmp[0] * Tmp[0]; + for ( c2 = 1; c2 < N; c2++ ) + { + tmp += pTmp[c2] * Tmp[c2]; + } + tmp = en - 2.0f * tmp; + tmp += dist[0][c]; + + if ( tmp <= dist[1][p_max] ) + { + /* replace worst */ + dist[1][p_max] = tmp; + indices[1][p_max * stagesVQ + s] = j; + parents[p_max] = c; + + /* limit number of times inner loop is entered */ + if ( counter < max_inner ) + { + counter++; + if ( counter < max_inner ) + { + /* find new worst */ + p_max = maximum( dist[1], maxC, &ftmp ); + } + else + { + /* find minimum distortion */ + p_max = minimum( dist[1], maxC, &ftmp ); + } + } + } + } + } + + /*------------------------------------------------------------* + * Compute error vectors for each node + *------------------------------------------------------------*/ + + for ( c = 0; c < maxC; c++ ) + { + /* subtract codebook entry from the residual vector of the parent node */ + pTmp = resid[1] + c * N; + mvr2r( resid[0] + parents[c] * N, pTmp, N ); + v_sub( pTmp, cb_stage + ( indices[1][c * stagesVQ + s] ) * N, pTmp, N ); + + /* get indices that were used for parent node */ + mvs2s( indices[0] + parents[c] * stagesVQ, indices[1] + c * stagesVQ, s ); + } + + m = maxC; + } + + mvs2s( indices[1], indices_VQstage, maxC * stagesVQ ); + + return; +} + +/*--------------------------------------------------------------------------- + * vq_enc_lsf_lvq() + * + * Multi-stage VQ encoder for LSF quantization. Trained codebooks are used in initial stages + * and lattice-VQ quantization is applied on residual vector in other stages. + * + * Note: + * Compared to normal multistage VQ resulting LSF vector is reordered to ascending order before + * weighted error calculation (spectral distortion) at the final stage. + * + * Returns: + * Weighted error + *--------------------------------------------------------------------------*/ + +static float vq_lvq_lsf_enc( + const int16_t pred_flag, + const int16_t mode, + const float u[], + const int16_t levels[], + const int16_t stages, + const float w[], + int16_t Idx[], + const float *lsf, + const float *pred, + float *resq, + float *lsfq ) +{ + int16_t i; + const float *const *cb, *cb_stage; + float cand[LSFMBEST][M]; + int16_t maxC = LSFMBEST, stagesVQ; + int16_t mode_glb, j, indices_firstVQ[LSFMBEST * MAX_VQ_STAGES], c2; + float dd[M]; + float quant[LSFMBEST][M], diff[M]; + float lat_cv[LSFMBEST][M], e[LSFMBEST], ftmp, tmp; + int16_t idx_lead[LSFMBEST][2], idx_scale[LSFMBEST][2]; + + stagesVQ = stages - 1; + /* Codebook selection */ + if ( pred_flag == 0 ) /* safety net*/ + { + cb = &Quantizers[CB_lsf[mode]]; +#ifdef DEBUGGING + assert( levels[stagesVQ] >= min_lat_bits_SN[mode] ); +#endif + if ( mode < 6 ) /* for NB */ + { + mode_glb = offset_lvq_modes_SN[mode] + offset_in_lvq_mode_SN[mode][levels[stagesVQ] - min_lat_bits_SN[mode]]; + } + else + { + mode_glb = offset_lvq_modes_SN[mode] + levels[stagesVQ] - min_lat_bits_SN[mode]; /* there is granularity of 1 bit */ + } + } + else /* pred */ + { + cb = &Quantizers_p[CB_p_lsf[mode]]; +#ifdef DEBUGGING + assert( levels[stagesVQ] >= min_lat_bits_pred[mode] ); +#endif + if ( ( mode < 6 ) || ( mode == 12 ) ) /* for NB or I 16k */ + { + mode_glb = offset_lvq_modes_pred[mode] + offset_in_lvq_mode_pred[mode][levels[stagesVQ] - min_lat_bits_pred[mode]]; + } + else + { + mode_glb = offset_lvq_modes_pred[mode] + levels[stagesVQ] - min_lat_bits_pred[mode]; + } + } + + if ( stagesVQ > 0 ) + { + /* first VQ stages */ + first_VQstages( cb, u, levels, stagesVQ, w, M, MSVQ_MAXCNT, indices_firstVQ ); + } + + for ( i = 0; i < maxC; i++ ) + { + mvr2r( pred, cand[i], M ); + for ( j = 0; j < stagesVQ; j++ ) + { + Idx[j] = indices_firstVQ[i * stagesVQ + j]; + } + + for ( j = 0; j < stagesVQ; j++ ) + { + cb_stage = cb[j]; + v_add( cand[i], cb_stage + Idx[j] * M, cand[i], M ); + } + + + /* LVQ quantization */ + v_sub( lsf, cand[i], dd, M ); + mslvq( dd, quant[i], lat_cv[i], idx_lead[i], idx_scale[i], w, mode, mode_glb, pred_flag ); + v_add( cand[i], quant[i], cand[i], M ); + + /* arrange the LSF candidate vector prior to selection to an ascending order*/ + v_sort( cand[i], 0, M - 1 ); + + /* calculate the spectral distortion using weighted MSE of sorted LSF vector*/ + v_sub( cand[i], lsf, diff, M ); + v_mult( diff, diff, diff, M ); + e[i] = dotp( diff, w, M ); + } + + /* find the optimal candidate */ + c2 = minimum( e, maxC, &ftmp ); + set_f( resq, 0.0f, M ); + for ( j = 0; j < stagesVQ; j++ ) + { + Idx[j] = indices_firstVQ[c2 * stagesVQ + j]; + cb_stage = cb[j]; + v_add( resq, cb_stage + Idx[j] * M, resq, M ); + } + v_add( resq, quant[c2], resq, M ); /* quantized prediction residual */ + + mvr2r( cand[c2], lsfq, M ); + index_lvq( lat_cv[c2], idx_lead[c2], idx_scale[c2], mode_glb, &Idx[stagesVQ], pred_flag ); + + tmp = e[c2]; + + return tmp; +} + + +/*--------------------------------------------------------------------------- + * BcTcvq_1st() + * + * + *--------------------------------------------------------------------------*/ + +static void BcTcvq_1st( + /*const*/ float x[][2], + const float CB[][128][2], + int16_t s[][16], + int16_t c[][16], + float cDist[][16], + float Q[][16][2], + /*const*/ float W[][2] ) +{ + int16_t state, prev_state; + int16_t index, bestCode; + float dist, minDist; + + for ( state = 0; state < NUM_STATE; state += 2 ) + { + prev_state = NTRANS[0][state]; + index = NTRANS[2][state]; + + minDist = ( x[0][0] - CB[0][index][0] ) * ( x[0][0] - CB[0][index][0] ) * W[0][0]; + minDist += ( x[0][1] - CB[0][index][1] ) * ( x[0][1] - CB[0][index][1] ) * W[0][1]; + bestCode = index; + + for ( index = index + 8; index < 128; index += 8 ) + { + dist = ( x[0][0] - CB[0][index][0] ) * ( x[0][0] - CB[0][index][0] ) * W[0][0]; + dist += ( x[0][1] - CB[0][index][1] ) * ( x[0][1] - CB[0][index][1] ) * W[0][1]; + + if ( dist < minDist ) + { + minDist = dist; + bestCode = index; + } + } + + /* Update */ + s[0][state] = prev_state; + c[0][state] = bestCode; + cDist[0][state] = minDist; + Q[0][state][0] = CB[0][bestCode][0]; + Q[0][state][1] = CB[0][bestCode][1]; + } + + return; +} + +/*--------------------------------------------------------------------------- + * BcTcvq_2nd() + * + * + *--------------------------------------------------------------------------*/ + +static void BcTcvq_2nd( + /*const*/ float x[][2], + const float CB[][128][2], + int16_t s[][16], + int16_t c[][16], + float cDist[][16], + float Q[][16][2], + /*const*/ float W[][2], + const float itc[][2][2] ) +{ + int16_t state, prev_state; + int16_t index, bestCode; + float dist, minDist; + float pred[N_DIM], target[N_DIM]; + + for ( state = 0; state < NUM_STATE; state++ ) + { + prev_state = NTRANS[0][state]; + index = NTRANS[2][state]; + + /* Prediction */ + pred[0] = itc[0][0][0] * Q[0][prev_state][0] + itc[0][0][1] * Q[0][prev_state][1]; + pred[1] = itc[0][1][0] * Q[0][prev_state][0] + itc[0][1][1] * Q[0][prev_state][1]; + target[0] = x[1][0] - pred[0]; + target[1] = x[1][1] - pred[1]; + + minDist = ( target[0] - CB[1][index][0] ) * ( target[0] - CB[1][index][0] ) * W[1][0]; + minDist += ( target[1] - CB[1][index][1] ) * ( target[1] - CB[1][index][1] ) * W[1][1]; + bestCode = index; + + for ( index = index + 8; index < 128; index += 8 ) + { + dist = ( target[0] - CB[1][index][0] ) * ( target[0] - CB[1][index][0] ) * W[1][0]; + dist += ( target[1] - CB[1][index][1] ) * ( target[1] - CB[1][index][1] ) * W[1][1]; + + if ( dist < minDist ) + { + minDist = dist; + bestCode = index; + } + } + + /* Update */ + s[1][state] = prev_state; + c[1][state] = bestCode; + cDist[1][state] = cDist[0][prev_state] + minDist; + Q[1][state][0] = CB[1][bestCode][0] + pred[0]; + Q[1][state][1] = CB[1][bestCode][1] + pred[1]; + } + + return; +} + + +/*--------------------------------------------------------------------------- + * BcTcvq_SubBlock() + * + * + *--------------------------------------------------------------------------*/ + +static void BcTcvq_SubBlock( + /*const*/ float x[][2], + const float CB[][64][2], + int16_t s[][16], + int16_t c[][16], + float cDist[][16], + float Q[][16][2], + const int16_t stage, + /*const*/ float W[][2], + const float itc[][2][2] ) +{ + int16_t stage1, stage2, state, prev_state, branch; + int16_t index, bestCode, brCode[N_DIM]; + float dist, minDist, brDist[N_DIM]; + float pred[N_DIM], target[N_DIM], brQuant[N_DIM][N_DIM]; + + stage1 = stage - 1; + stage2 = stage - 2; + + for ( state = 0; state < NUM_STATE; state++ ) + { + + /* 1st brarnch search */ + prev_state = NTRANS[0][state]; + index = NTRANS[2][state]; + + /* Prediction */ + pred[0] = itc[stage1][0][0] * Q[stage1][prev_state][0] + itc[stage1][0][1] * Q[stage1][prev_state][1]; + pred[1] = itc[stage1][1][0] * Q[stage1][prev_state][0] + itc[stage1][1][1] * Q[stage1][prev_state][1]; + target[0] = x[stage][0] - pred[0]; + target[1] = x[stage][1] - pred[1]; + + minDist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; + minDist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; + bestCode = index; + + for ( index = index + 8; index < 64; index += 8 ) + { + dist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; + dist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; + + if ( dist < minDist ) + { + minDist = dist; + bestCode = index; + } + } + + brCode[0] = bestCode; + brDist[0] = cDist[stage1][prev_state] + minDist; + brQuant[0][0] = CB[stage2][bestCode][0] + pred[0]; + brQuant[0][1] = CB[stage2][bestCode][1] + pred[1]; + + /* 2nd branch search */ + prev_state = NTRANS[1][state]; + index = NTRANS[3][state]; + + /* Prediction */ + pred[0] = itc[stage1][0][0] * Q[stage1][prev_state][0] + itc[stage1][0][1] * Q[stage1][prev_state][1]; + pred[1] = itc[stage1][1][0] * Q[stage1][prev_state][0] + itc[stage1][1][1] * Q[stage1][prev_state][1]; + target[0] = x[stage][0] - pred[0]; + target[1] = x[stage][1] - pred[1]; + + minDist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; + minDist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; + bestCode = index; + + for ( index = index + 8; index < 64; index += 8 ) + { + + dist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; + dist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; + + if ( dist < minDist ) + { + minDist = dist; + bestCode = index; + } + } + + brCode[1] = bestCode; + brDist[1] = cDist[stage1][prev_state] + minDist; + brQuant[1][0] = CB[stage2][bestCode][0] + pred[0]; + brQuant[1][1] = CB[stage2][bestCode][1] + pred[1]; + + /* Select Best branch */ + branch = 1; + + if ( brDist[0] <= brDist[1] ) + { + branch = 0; + } + + /* Update */ + s[stage][state] = NTRANS[branch][state]; + c[stage][state] = brCode[branch]; + cDist[stage][state] = brDist[branch]; + Q[stage][state][0] = brQuant[branch][0]; + Q[stage][state][1] = brQuant[branch][1]; + } + + return; +} + + +/*--------------------------------------------------------------------------- + * BcTcvq_FixSearch() + * + * + *--------------------------------------------------------------------------*/ + +static float BcTcvq_FixSearch( + /*const*/ float x[][2], + const float CB[][32][2], + int16_t c[][4], + float Q[][16][2], + const int16_t FixBranch[][4][4], + const int16_t stage, + const int16_t inis, + const int16_t fins, + int16_t *prev_state, + /*const*/ float W[][2], + const float itc[][2][2] ) +{ + int16_t stage1, stage4, branch; + int16_t index, bestCode; + float dist, minDist; + float pred[N_DIM], target[N_DIM]; + + stage1 = stage - 1; + stage4 = stage - 4; + + branch = FixBranch[inis >> 2][fins][stage4]; + index = NTRANS2[branch + 2][*prev_state]; + + /* Prediction */ + pred[0] = itc[stage1][0][0] * Q[stage1][*prev_state][0] + itc[stage1][0][1] * Q[stage1][*prev_state][1]; + pred[1] = itc[stage1][1][0] * Q[stage1][*prev_state][0] + itc[stage1][1][1] * Q[stage1][*prev_state][1]; + target[0] = x[stage][0] - pred[0]; + target[1] = x[stage][1] - pred[1]; + + minDist = ( target[0] - CB[stage4][index][0] ) * ( target[0] - CB[stage4][index][0] ) * W[stage][0]; + minDist += ( target[1] - CB[stage4][index][1] ) * ( target[1] - CB[stage4][index][1] ) * W[stage][1]; + bestCode = index; + + for ( index = index + 8; index < 32; index += 8 ) + { + dist = ( target[0] - CB[stage4][index][0] ) * ( target[0] - CB[stage4][index][0] ) * W[stage][0]; + dist += ( target[1] - CB[stage4][index][1] ) * ( target[1] - CB[stage4][index][1] ) * W[stage][1]; + + if ( dist < minDist ) + { + minDist = dist; + bestCode = index; + } + } + + /* Update */ + *prev_state = NTRANS2[branch][*prev_state]; + c[fins][stage4] = bestCode; + Q[stage][*prev_state][0] = CB[stage4][bestCode][0] + pred[0]; + Q[stage][*prev_state][1] = CB[stage4][bestCode][1] + pred[1]; + + return minDist; +} + +/*--------------------------------------------------------------------------- + * optimalPath() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t optimalPath( + /*const*/ float cDist[][16], + /*const*/ float blockDist[], + /*const*/ int16_t blockCodeword[][4], + int16_t bestCodeword[], + /*const*/ int16_t codeWord[][16], + int16_t bestState[], + int16_t preState[][16] ) +{ + int16_t stage, state; + float opDist[NUM_STATE]; + float minDist; + int16_t fBlock; + int16_t prev_state; + + for ( state = 0; state < NUM_STATE; state++ ) + { + opDist[state] = cDist[3][state] + blockDist[state]; + } + + minDist = opDist[0]; + fBlock = 0; + + for ( state = 1; state < NUM_STATE; state++ ) + { + if ( opDist[state] < minDist ) + { + minDist = opDist[state]; + fBlock = state; + } + } + + prev_state = bestState[4] = fBlock; + + for ( stage = N_STAGE_VQ - 5; stage >= 0; stage-- ) + { + bestCodeword[stage] = codeWord[stage][prev_state]; + bestState[stage] = preState[stage][prev_state]; + prev_state = bestState[stage]; + } + + for ( stage = 0; stage < 4; stage++ ) + { + bestCodeword[stage + 4] = blockCodeword[fBlock][stage]; + } + + return fBlock; +} + +/*--------------------------------------------------------------------------- + * quantEnc() + * + * + *--------------------------------------------------------------------------*/ + +static void quantEnc( + float *y, + const int16_t c[], + const float CB_SUB1[][128][2], + const float CB_SUB2[][64][2], + const float CB_SUB3[][32][2], + const float itc[][2][2] ) +{ + int16_t i, j; + int16_t stage; + float pred[N_DIM], Y[8][2]; + + /* stage #1 */ + Y[0][0] = CB_SUB1[0][c[0]][0]; + Y[0][1] = CB_SUB1[0][c[0]][1]; + + /* stage #2 */ + pred[0] = itc[0][0][0] * Y[0][0] + itc[0][0][1] * Y[0][1]; + pred[1] = itc[0][1][0] * Y[0][0] + itc[0][1][1] * Y[0][1]; + Y[1][0] = CB_SUB1[1][c[1]][0] + pred[0]; + Y[1][1] = CB_SUB1[1][c[1]][1] + pred[1]; + + /* stage #3 - #4 */ + for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) + { + pred[0] = itc[stage - 1][0][0] * Y[stage - 1][0] + itc[stage - 1][0][1] * Y[stage - 1][1]; + pred[1] = itc[stage - 1][1][0] * Y[stage - 1][0] + itc[stage - 1][1][1] * Y[stage - 1][1]; + + Y[stage][0] = CB_SUB2[stage - 2][c[stage]][0] + pred[0]; + Y[stage][1] = CB_SUB2[stage - 2][c[stage]][1] + pred[1]; + } + + /* stage #5 - #8 */ + for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) + { + pred[0] = itc[stage - 1][0][0] * Y[stage - 1][0] + itc[stage - 1][0][1] * Y[stage - 1][1]; + pred[1] = itc[stage - 1][1][0] * Y[stage - 1][0] + itc[stage - 1][1][1] * Y[stage - 1][1]; + + Y[stage][0] = CB_SUB3[stage - 4][c[stage]][0] + pred[0]; + Y[stage][1] = CB_SUB3[stage - 4][c[stage]][1] + pred[1]; + } + + /* Transform Vector to Scalar */ + for ( i = 0; i < N_STAGE_VQ; i++ ) + { + for ( j = 0; j < N_DIM; j++ ) + { + y[i * N_DIM + j] = Y[i][j]; + } + } + + return; +} + +/*--------------------------------------------------------------------------- + * buildCode() + * + * + *--------------------------------------------------------------------------*/ + +static void buildCode( int16_t *ind, const int16_t fins, const int16_t c[], const int16_t s[] ) +{ + int16_t stage; + int16_t BrIndex[4]; + + set_s( BrIndex, 0, ( N_STAGE_VQ - 4 ) ); + + + for ( stage = N_STAGE_VQ - 4; stage >= 1; stage-- ) + { + if ( s[stage] > 7 ) + { + BrIndex[stage - 1] = 1; + } + } + ind[0] = fins; + + /* stage #1 - #2 */ + for ( stage = 0; stage < 2; stage++ ) + { + ind[stage + 1] = BrIndex[stage] << 4; + ind[stage + 1] += c[stage] >> 3; + } + + /* stage #3 - #4 */ + for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) + { + ind[stage + 1] = BrIndex[stage] << 3; + ind[stage + 1] += c[stage] >> 3; + } + + /* Stage #5 - #8 */ + for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) + { + ind[stage + 1] = c[stage] >> 3; + } + + return; +} + +/*--------------------------------------------------------------------------- + * BcTcvq() + * + * + *--------------------------------------------------------------------------*/ + +static void BcTcvq( int16_t snFlag, const float *x, float *y, const float *weight, int16_t *ind ) +{ + float X[N_STAGE_VQ][N_DIM], W[N_STAGE_VQ][N_DIM]; + + /* Count Variable */ + int16_t i, j; + + /* TCVQ Structure */ + int16_t stage, state, prev_state; + int16_t preState[N_STAGE_VQ][NUM_STATE]; + int16_t codeWord[N_STAGE_VQ][NUM_STATE]; + float acumDist[N_STAGE_VQ - 4][NUM_STATE]; + int16_t inis, fins, ptr_fins; + int16_t fBlock; + int16_t fState[NUM_STATE]; + int16_t fCodeword[4][4]; + int16_t iniBlock[NUM_STATE]; + int16_t blockCodeword[NUM_STATE][4]; + + /* Prediction variable */ + float quant[N_STAGE_VQ][NUM_STATE][N_DIM]; + + /* Distortion variable */ + float minDist; + float fDist; + float blockDist[NUM_STATE]; + + /* Decoding variable */ + int16_t bestCodeword[N_STAGE_VQ]; + int16_t bestState[N_STAGE_VQ]; + + /* Code Share variable */ + const float( *TCVQ_CB_SUB1 )[128][2], ( *TCVQ_CB_SUB2 )[64][2], ( *TCVQ_CB_SUB3 )[32][2]; + const float( *IntraCoeff )[2][2]; + + /* Memoryless Module */ + if ( snFlag ) + { + TCVQ_CB_SUB1 = SN_TCVQ_CB_SUB1; + TCVQ_CB_SUB2 = SN_TCVQ_CB_SUB2; + TCVQ_CB_SUB3 = SN_TCVQ_CB_SUB3; + IntraCoeff = SN_IntraCoeff; + } + else /* Memory Module */ + { + TCVQ_CB_SUB1 = AR_TCVQ_CB_SUB1; + TCVQ_CB_SUB2 = AR_TCVQ_CB_SUB2; + TCVQ_CB_SUB3 = AR_TCVQ_CB_SUB3; + IntraCoeff = AR_IntraCoeff; + } + + /* Transform Scalar to Vector */ + for ( i = 0; i < N_STAGE_VQ; i++ ) + { + for ( j = 0; j < N_DIM; j++ ) + { + X[i][j] = x[( N_DIM * i ) + j]; + W[i][j] = weight[( N_DIM * i ) + j]; + } + } + + /* Initialzie */ + for ( i = 0; i < N_STAGE_VQ - 4; i++ ) + { + for ( j = 0; j < NUM_STATE; j++ ) + { + acumDist[i][j] = 0.f; + } + } + + /* BcTcvq Search */ + /* stage #1 */ + BcTcvq_1st( X, TCVQ_CB_SUB1, preState, codeWord, acumDist, quant, W ); + + /* stage #2 */ + BcTcvq_2nd( X, TCVQ_CB_SUB1, preState, codeWord, acumDist, quant, W, IntraCoeff ); + + /* stage #3 - #4 */ + for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) + { + BcTcvq_SubBlock( X, TCVQ_CB_SUB2, preState, codeWord, acumDist, quant, stage, W, IntraCoeff ); + } + + /* Search initial state at each block */ + for ( state = 0; state < NUM_STATE; state++ ) + { + prev_state = state; + + for ( stage = N_STAGE_VQ - 5; stage >= 0; stage-- ) + { + prev_state = preState[stage][prev_state]; + } + iniBlock[state] = prev_state; + } + + /* stage #5 - #8 */ + for ( state = 0; state < NUM_STATE; state++ ) + { + inis = iniBlock[state]; + ptr_fins = inis >> 2; + + minDist = FLT_MAX; + + for ( i = 0; i < 4; i++ ) + { + fins = ptr_fins * 4 + i; + + prev_state = state; + fDist = BcTcvq_FixSearch( X, TCVQ_CB_SUB3, fCodeword, quant, FixBranch_tbl, N_STAGE_VQ - 4, inis, i, &prev_state, W, IntraCoeff ); + + for ( stage = N_STAGE_VQ - 3; stage < N_STAGE_VQ; stage++ ) + { + fDist += BcTcvq_FixSearch( X, TCVQ_CB_SUB3, fCodeword, quant, FixBranch_tbl, stage, inis, i, &prev_state, W, IntraCoeff ); + } + + if ( fDist < minDist ) + { + minDist = fDist; + blockDist[state] = minDist; + fState[state] = fins; + + for ( j = 0; j < 4; j++ ) + { + blockCodeword[state][j] = fCodeword[i][j]; + } + } + } + } + + /* Select optimal path */ + fBlock = optimalPath( acumDist, blockDist, blockCodeword, bestCodeword, codeWord, bestState, preState ); + + /* Select Quantized Value */ + quantEnc( y, bestCodeword, TCVQ_CB_SUB1, TCVQ_CB_SUB2, TCVQ_CB_SUB3, IntraCoeff ); + + /* Buid Code for Decoder */ + buildCode( ind, fState[fBlock], bestCodeword, bestState ); + + return; +} + + +/*--------------------------------------------------------------------------- + * SVQ_2d() + * + * + *--------------------------------------------------------------------------*/ + +static int16_t SVQ_2d( + const float *x, + float *y, + const float *W, + const float CB[][8], + const int16_t Size ) +{ + int16_t i, j; + int16_t index = 0; + float distortion; + float temp; + + temp = FLT_MAX; + + for ( i = 0; i < Size; i++ ) + { + distortion = 0.0; + for ( j = 0; j < 8; j++ ) + { + distortion += ( x[j] - CB[i][j] ) * ( x[j] - CB[i][j] ) * W[j]; + } + + if ( distortion < temp ) + { + temp = distortion; + index = i; + } + } + + for ( i = 0; i < M / 2; i++ ) + { + y[i] = CB[index][i]; + } + + return index; +} + + +/*--------------------------------------------------------------------------- + * qlsf_ARSN_tcvq_Enc_16k() + * + * Predictive BC-TCQ encoder for LSF quantization + *--------------------------------------------------------------------------*/ + +static float qlsf_ARSN_tcvq_Enc_16k( + const float *x, /* i : Vector to be encoded */ + float *y, /* o : Quantized LSF vector */ + int16_t *indice, /* o : Indices */ + const float *w, /* i : LSF Weights */ + const int16_t nBits, /* i : number of bits */ + const int16_t safety_net /* i : safety_net flag */ +) +{ + int16_t i; + float temp_f; + float yy[M]; + float error_svq[M], error_svq_q[M]; + float x_q[M]; + if ( safety_net == 1 ) + { + indice[0] = 1; + BcTcvq( 1, x, x_q, w, &indice[1] ); + + if ( nBits > 30 ) + { + /* SVQ */ + for ( i = 0; i < M; i++ ) + { + error_svq[i] = ( x[i] - x_q[i] ) * scale_inv_ARSN[i]; + } + + /* 5bits 1st Split VQ for Residual*/ + indice[10] = SVQ_2d( error_svq, error_svq_q, w, AR_SVQ_CB1, 32 ); + /* 4bits 2nd Split VQ for Residual*/ + indice[11] = SVQ_2d( &error_svq[8], &error_svq_q[8], &w[8], AR_SVQ_CB2, 16 ); + + for ( i = 0; i < M; i++ ) + { + x_q[i] = x_q[i] + ( error_svq_q[i] * scale_ARSN[i] ); + } + } + } + else + { + indice[0] = 0; + BcTcvq( 0, x, x_q, w, &indice[1] ); + + if ( nBits > 30 ) + { + /* SVQ */ + for ( i = 0; i < M; i++ ) + { + error_svq[i] = x[i] - x_q[i]; + } + + /* 5bits 1st Split VQ for Residual*/ + indice[10] = SVQ_2d( error_svq, error_svq_q, w, AR_SVQ_CB1, 32 ); + /* 4bits 2nd Split VQ for Residual*/ + indice[11] = SVQ_2d( &error_svq[8], &error_svq_q[8], &w[8], AR_SVQ_CB2, 16 ); + + for ( i = 0; i < M; i++ ) + { + x_q[i] = x_q[i] + error_svq_q[i]; + } + } + } + + v_sub( x_q, x, yy, M ); + v_mult( yy, yy, yy, M ); + temp_f = dotp( yy, w, M ); + + /* Recover the quantized LSF */ + mvr2r( x_q, y, M ); + + return temp_f; +} + +/*-------------------------------------------------------------------* + * lsf_mid_enc() + * + * Mid-frame LSF quantization + --------------------------------------------------------------------*/ + +static void lsf_mid_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + int16_t nb_bits, /* i : number of bits */ + const int32_t int_fs, /* i : internal (ACELP) sampling frequency */ + const float qlsp0[], /* i : quantized LSPs from frame beginning */ + const float qlsp1[], /* i : quantized LSPs from frame end */ + float lsp[], /* i/o: mid-frame LSP */ + const int16_t coder_type, /* i : coding type */ + const int16_t bwidth, /* i : input signal bandwidth */ + const float Bin_Ener[], /* i : per bin log energy spectrum */ + const int16_t ppp_mode, + const int16_t nelp_mode ) +{ + float ftemp, lsf[M], qlsf[M], qlsf1[M], qlsf0[M], wghts[M], err, err_min; + int16_t j, k, idx, size = 0; + const float *ratio = 0; + + /* convert LSPs to LSFs */ + lsp2lsf( lsp, lsf, M, int_fs ); + lsp2lsf( qlsp0, qlsf0, M, int_fs ); + lsp2lsf( qlsp1, qlsf1, M, int_fs ); + + Unified_weighting( Bin_Ener, lsf, wghts, bwidth == NB, coder_type == UNVOICED, (int32_t) ( int_fs ), M ); + + /* codebook selection, number of bits, size of the codebook */ + if ( ppp_mode == 0 && nelp_mode == 0 ) + { + /* codebook selection */ + if ( coder_type == VOICED ) + { + switch ( nb_bits ) + { + case 5: + { + ratio = tbl_mid_voi_wb_5b; + break; + } + case 4: + { + ratio = tbl_mid_voi_wb_4b; + break; + } + case 1: + { + ratio = tbl_mid_voi_wb_1b; + break; + } + } + } + else if ( coder_type == UNVOICED ) + { + ratio = tbl_mid_unv_wb_5b; + } + else + { + /* GENERIC, TRANSITION, AUDIO and INACTIVE */ + switch ( nb_bits ) + { + case 5: + { + ratio = tbl_mid_gen_wb_5b; + break; + } + case 4: + { + ratio = tbl_mid_gen_wb_4b; + break; + } + case 2: + { + ratio = tbl_mid_gen_wb_2b; + break; + } + } + } + + size = 1 << nb_bits; + } + else if ( ppp_mode == 1 ) + { + ratio = tbl_mid_voi_wb_1b; + nb_bits = 1; + size = 2; + } + else if ( nelp_mode == 1 ) + { + ratio = tbl_mid_unv_wb_4b; + nb_bits = 4; + size = 16; + } + + /* loop over codevectors */ + err_min = 1e30f; + idx = 0; + for ( k = 0; k < size; k++ ) + { + err = 0; + + for ( j = 0; j < M; j++ ) + { + qlsf[j] = ( 1.0f - ratio[k * M + j] ) * qlsf0[j] + ratio[k * M + j] * qlsf1[j]; + + if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) + { + qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; + } + + ftemp = lsf[j] - qlsf[j]; + err += wghts[j] * ftemp * ftemp; + } + + if ( err < err_min ) + { + err_min = err; + idx = k; + } + } + + /* calculate the quantized LSF vector */ + for ( j = 0; j < M; j++ ) + { + qlsf[j] = ( 1.0f - ratio[idx * M + j] ) * qlsf0[j] + ratio[idx * M + j] * qlsf1[j]; + + if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) + { + qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; + } + } + + reorder_lsf( qlsf, LSF_GAP_MID, M, int_fs ); + + /* convert LSFs back to LSPs */ + lsf2lsp( qlsf, lsp, M, int_fs ); + + push_indice( hBstr, IND_MID_FRAME_LSF_INDEX, idx, nb_bits ); + + return; +} diff --git a/lib_enc/lsf_msvq_ma_enc.c b/lib_enc/lsf_msvq_ma_enc.c new file mode 100644 index 0000000000..bf115aa671 --- /dev/null +++ b/lib_enc/lsf_msvq_ma_enc.c @@ -0,0 +1,553 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "basop_proto_func.h" +#include "wmops.h" + +#define kMaxC 8 + +/*--------------------------------------------------------------------------* + * msvq_enc() + * + * MSVQ encoder + *--------------------------------------------------------------------------*/ + +void msvq_enc( + const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ + const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ + const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ + const float u[], /* i : Vector to be encoded (prediction and mean removed) */ + const int16_t *levels, /* i : Number of levels in each stage */ + const int16_t maxC, /* i : Tree search size (number of candidates kept from */ + /* one stage to the next == M-best) */ + const int16_t stages, /* i : Number of stages */ + const float w[], /* i : Weights */ + const int16_t N, /* i : Vector dimension */ + const int16_t maxN, /* i : Codebook dimension */ + int16_t Idx[] /* o : Indices */ +) +{ + float *resid[2], *dist[2]; + float en, tmp, *pTmp, *p1; + const float *cb_stage, *cbp, *p2; + int16_t *indices[2]; + int16_t j, m, s, c, c2, p_max, i; + float resid_buf[2 * LSFMBEST_MAX * M_MAX], dist_buf[2 * LSFMBEST_MAX], Tmp[M_MAX]; + int16_t idx_buf[2 * LSFMBEST_MAX * MAX_VQ_STAGES_USED], parents[LSFMBEST_MAX]; + int16_t n, maxn, start; + + /*----------------------------------------------------------------* + * Allocate memory for previous (parent) and current nodes. + * Parent node is indexed [0], current node is indexed [1]. + *----------------------------------------------------------------*/ + + indices[0] = idx_buf; + indices[1] = idx_buf + maxC * stages; + set_s( idx_buf, 0, 2 * stages * maxC ); + + resid[0] = resid_buf; + pTmp = resid_buf + maxC * N; + resid[1] = pTmp; + + dist[0] = dist_buf; + dist[1] = dist_buf + maxC; + set_s( parents, 0, maxC ); + + /* Set up initial distance vector */ + for ( tmp = 0.0, j = 0; j < N; j++ ) + { + tmp += u[j] * u[j] * w[j]; + } + set_f( dist[1], tmp, maxC ); + + /* Set up initial error (residual) vectors */ + for ( c = 0; c < maxC; c++ ) + { + for ( i = 0; i < N; i++ ) + { + *pTmp++ = u[i]; + } + } + + /* Loop over all stages */ + for ( m = 1, s = 0; s < stages; s++ ) + { + /* codebook pointer is set to point to first stage */ + cbp = cb[s]; + /* Save pointer to beginning of current stage */ + cb_stage = cbp; + + /* Set up pointers to parent and current nodes */ +#define WMC_TOOL_MAN + swap( indices[0], indices[1], int16_t * ); + MOVE( 3 ); + swap( resid[0], resid[1], float * ); + MOVE( 3 ); + swap( dist[0], dist[1], float * ); + MOVE( 3 ); +#undef WMC_TOOL_MAN + + /* p_max points to maximum distortion node (worst of best) */ + p_max = 0; + + if ( dims ) + { + n = dims[s]; + maxn = dims[s]; + } + else + { + n = N; + maxn = maxN; + } + + if ( offs ) + { + start = offs[s]; + } + else + { + start = 0; + } + + set_zero( Tmp, start ); + set_zero( Tmp + start + n, N - ( start + n ) ); + /* Set distortions to a large value */ + for ( j = 0; j < maxC; j++ ) + { + dist[1][j] = FLT_MAX; + } + if ( !s ) /* means: m==1 */ + { + /* This loop is identical to the one below, except, that the inner + loop over c=0..m is hardcoded to c=0, since m=1. */ + /* dist[0][0] */ + for ( j = 0; j < levels[s]; j++ ) + { + en = 0.0f; + /* w,Tmp */ + /* Compute weighted codebook element and its energy */ + for ( c2 = 0; c2 < n; c2++ ) + { + Tmp[start + c2] = w[start + c2] * cbp[c2]; + en += cbp[c2] * Tmp[start + c2]; + } + cbp += maxn; /* pointer is incremented */ + + pTmp = &resid[0][0]; + /* Tmp */ + tmp = ( *pTmp++ ) * Tmp[0]; + for ( c2 = 1; c2 < N; c2++ ) + { + tmp += ( *pTmp++ ) * Tmp[c2]; + } + tmp = en - 2.0f * tmp; + tmp += dist[0][0]; + if ( tmp < dist[1][p_max] ) + { + /* Replace worst */ + dist[1][p_max] = tmp; + indices[1][p_max * stages] = j; + parents[p_max] = 0; + + p_max = 0; + for ( c2 = 1; c2 < maxC; c2++ ) + { + if ( dist[1][c2] > dist[1][p_max] ) + { + p_max = c2; + } + } + } /* if (tmp <= dist[1][p_max]) */ + } /* for (j=0; j dist[1][p_max] ) + { + p_max = c2; + } + } + } /* if (tmp <= dist[1][p_max]) */ + } /* for(c=0; c 0 && j < N && pred[j] < pred[j - 1] + LSF_GAP_MID ) + { + pred[j] = pred[j - 1] + LSF_GAP_MID; + } + + tmp = lsf[j] - pred[j]; + err += wghts[j] * tmp * tmp; + } + + if ( err < err_min ) + { + err_min = err; + *idx = k; + } + } + + return; +} + + +/*--------------------------------------------------------------------------* + * Q_lsf_tcxlpc() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: number of indices */ +int16_t Q_lsf_tcxlpc( + /* const */ float lsf[], /* i : original lsf */ + float lsf_q[], /* o : quantized lsf */ + Word16 lsp_q_ind[], /* o : quantized lsp (w/o MA prediction) */ + int16_t indices[], /* o : VQ indices */ + const int16_t narrowband, /* i : narrowband flag */ + const int16_t cdk, /* i : codebook selector */ + const float mem_MA[], /* i : MA memory */ + const int16_t coder_type, /* i : acelp extended mode */ + const float *Bin_Ener /* i : Spectrum energy */ +) +{ + float weights[M]; + float pred[M16k]; + int16_t i, NumIndices; + const float *means; + Word16 lsf_q_ind[M16k]; + float lsf_rem[M]; + float lsf_rem_q[M]; + Word16 lsf_rem_q_ind[M]; + + Unified_weighting( &Bin_Ener[L_FFT / 2], lsf, weights, narrowband, coder_type == UNVOICED, 12800, M ); + + NumIndices = 0; + + /* Put disabled flag */ + indices[NumIndices++] = 0; + + /* Inter-frame prediction */ + means = lsf_means[narrowband]; + for ( i = 0; i < M; ++i ) + { + pred[i] = means[i] + MU_MA * mem_MA[i]; + } + + /* Subtract prediction */ + for ( i = 0; i < M; ++i ) + { + lsf[i] -= pred[i]; + } + + msvq_enc( lsf_codebook[narrowband][cdk], lsf_dims, lsf_offs, lsf, lsf_numlevels, kMaxC, TCXLPC_NUMSTAGES, weights, M, M, indices + NumIndices ); + + msvq_dec( lsf_codebook[narrowband][cdk], lsf_dims, lsf_offs, TCXLPC_NUMSTAGES, M, M, indices + NumIndices, lsf_q, lsf_q_ind ); + + NumIndices += TCXLPC_NUMSTAGES; + + /* Update flag */ + indices[0] = lsf_ind_is_active( lsf_q_ind, lsf_means[narrowband], narrowband, cdk ); + + /* Get residual vector */ + for ( i = 0; i < M; ++i ) + { + lsf_rem[i] = ( pred[i] + lsf[i] ) - ( lsf_means[narrowband][i] + lsf_q_ind[i] / (float) ( 2.0f * 1.28f ) ); + } + /* Quantize using extra stage(s) */ + msvq_enc( lsf_ind_codebook[narrowband][cdk], lsf_ind_dims, lsf_ind_offs, lsf_rem, lsf_ind_numlevels, kMaxC, TCXLPC_IND_NUMSTAGES, weights, M, M, indices + NumIndices ); + + /* Only add contribution if flag is enabled */ + if ( indices[0] ) + { + /* Decode */ + msvq_dec( lsf_ind_codebook[narrowband][cdk], lsf_ind_dims, lsf_ind_offs, TCXLPC_IND_NUMSTAGES, M, M, indices + NumIndices, lsf_rem_q, lsf_rem_q_ind ); + NumIndices += TCXLPC_IND_NUMSTAGES; + + /* Add to MA-removed vector */ + for ( i = 0; i < M; ++i ) + { + lsf_q_ind[i] = add( lsf_q_ind[i], lsf_rem_q_ind[i] ); + } + } + + /* Add inter-frame prediction */ + for ( i = 0; i < M; ++i ) + { + lsf_q[i] += pred[i]; + lsf[i] += pred[i]; + } + + reorder_lsf( lsf_q, TCXLPC_LSF_GAP, M, INT_FS_12k8 ); + for ( i = 0; i < M; ++i ) + { + lsf_q_ind[i] = add( lsf_q_ind[i], LSFM( lsf_means[narrowband][i] ) ); + move16(); + } + + basop_reorder_lsf( lsf_q_ind, LSF_GAP_VAL( TCXLPC_LSF_GAP ), M, INT_FS_FX ); + if ( lsp_q_ind ) + { + basop_lsf2lsp( lsf_q_ind, lsp_q_ind ); + } + + return NumIndices; +} + + +/*--------------------------------------------------------------------------* + * enc_lsf_tcxlpc() + * + * + *--------------------------------------------------------------------------*/ + +/*! r: number of bits written */ +int16_t enc_lsf_tcxlpc( + const int16_t **indices, /* i : Ptr to VQ indices */ + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +) +{ + int16_t i, NumBits, flag; + + /* Read flag */ + flag = ( *indices )[0]; + ++*indices; + + NumBits = TCXLPC_NUMBITS; + for ( i = 0; i < TCXLPC_NUMSTAGES; ++i ) + { + push_next_indice( hBstr, **indices, lsf_numbits[i] ); + ++*indices; + } + if ( flag ) + { + NumBits += TCXLPC_IND_NUMBITS; + for ( i = 0; i < TCXLPC_IND_NUMSTAGES; ++i ) + { + push_next_indice( hBstr, **indices, lsf_ind_numbits[i] ); + ++*indices; + } + } + + return NumBits; +} + + +/*--------------------------------------------------------------------------* + * lsf_bctcvq_encprm() + * + * + *--------------------------------------------------------------------------*/ + +int16_t lsf_bctcvq_encprm( + BSTR_ENC_HANDLE hBstr, + const int16_t *param_lpc, + const int16_t *bits_param_lpc, + const int16_t no_indices ) +{ + int16_t i, nbits_lpc; + + nbits_lpc = 0; + + for ( i = 0; i < no_indices; i++ ) + { + push_next_indice( hBstr, *param_lpc, bits_param_lpc[i] ); + param_lpc++; + nbits_lpc += bits_param_lpc[i]; + } + + return nbits_lpc; +} diff --git a/lib_enc/ltd_stable.c b/lib_enc/ltd_stable.c new file mode 100644 index 0000000000..5650f93e67 --- /dev/null +++ b/lib_enc/ltd_stable.c @@ -0,0 +1,133 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * ltd_stable() + * + * + *-------------------------------------------------------------------*/ + +void ltd_stable( + float frames_power[], /* i/o: energy of several frames */ + float ltd_stable_rate[], /* o : time-domain stable rate */ + const float frame_energy, /* i : current frame energy */ + const int16_t frameloop /* i : number of frames */ +) +{ + int16_t i; + float tmp; + float mid_frame_amp[28]; + float seg_amp; + float dif, apow; + + frames_power[0] = (float) ( sqrt( frame_energy ) + 0.001 ); + + if ( frameloop < 3 ) + { + for ( i = 1; i < POWER_NUM; i++ ) + { + frames_power[i] = frames_power[0]; + } + } + + for ( i = 0; i < 20; i++ ) + { + mid_frame_amp[i] = frames_power[2 * i] + frames_power[2 * i + 1]; + } + seg_amp = 0; + for ( i = 0; i < 20; i++ ) + { + seg_amp += mid_frame_amp[i]; + } + seg_amp = seg_amp / 20; + dif = 0; + apow = 0; + for ( i = 0; i < 20; i++ ) + { + tmp = mid_frame_amp[i] - seg_amp; + dif += tmp * tmp; + apow += mid_frame_amp[i] * mid_frame_amp[i]; + } + tmp = dif / ( apow + 0.0001f ); + ltd_stable_rate[0] = dif / ( apow + FLT_MIN ); + + + seg_amp = 0; + for ( i = 0; i < 14; i++ ) + { + seg_amp += mid_frame_amp[i]; + } + seg_amp = seg_amp / 14; + dif = 0; + apow = 0; + for ( i = 0; i < 14; i++ ) + { + tmp = mid_frame_amp[i] - seg_amp; + dif += tmp * tmp; + apow += mid_frame_amp[i] * mid_frame_amp[i]; + } + ltd_stable_rate[1] = dif / ( apow + 0.0001f ); + + seg_amp = 0; + for ( i = 0; i < 8; i++ ) + { + seg_amp += mid_frame_amp[i]; + } + seg_amp = seg_amp / 8; + dif = 0; + apow = 0; + for ( i = 0; i < 8; i++ ) + { + tmp = mid_frame_amp[i] - seg_amp; + dif += tmp * tmp; + apow += mid_frame_amp[i] * mid_frame_amp[i]; + } + ltd_stable_rate[2] = (float) ( dif / ( apow + 0.0001f ) ); + ltd_stable_rate[3] = 0.90f * ltd_stable_rate[3] + 0.1f * ltd_stable_rate[2]; + + for ( i = POWER_NUM - 1; i > 0; i-- ) + { + frames_power[i] = frames_power[i - 1]; + } + + return; +} diff --git a/lib_enc/mdct_classifier.c b/lib_enc/mdct_classifier.c new file mode 100644 index 0000000000..ae7e6f7e3f --- /dev/null +++ b/lib_enc/mdct_classifier.c @@ -0,0 +1,369 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "wmops.h" +#include + + +/*--------------------------------------------------------------------------* + * Local constants + *--------------------------------------------------------------------------*/ + +#define SMOOTH_FILT_COEFF 0.8f +#define THRESH_UP 1.6f +#define THRESH_DOWN 1.1f +#define HQ_LOCAL 3 +#define TCX_LOCAL 1 + +#define GAIN2_START_WB 6 +#define GAIN3_START_WB 12 +#define GAIN4_START_WB 9 +#define H1_START_WB 17 +#define H2_START_WB 14 +#define H_LENGTH_WB 3 +#define GAIN2_START_SWB 8 +#define GAIN3_START_SWB 16 +#define GAIN4_START_SWB 12 +#define H1_START_SWB 25 +#define H2_START_SWB 20 +#define H_LENGTH_SWB 5 + + +/*-------------------------------------------------------------------* + * mdct_classifier() + * + * MDCT signal classifier for HQ_CORE/TCX_20_CORE + *-------------------------------------------------------------------*/ + +/*! r: HQ_CORE/TCX_20_CORE decision */ +int16_t mdct_classifier( + Encoder_State *st, /* i/o: Encoder state variable */ + const float *fft_buff, /* i : FFT spectrum from fft_rel */ + const float enerBuffer[], /* i : energy buffer */ + const int32_t brate /* i : current brate, IVAS: nominal bitrate, EVS: st->total_brate */ +) +{ + int16_t c; + float X[129]; + int16_t k; + float y[2]; + float nf; + float pe; + int16_t np; + float max_cand; + int16_t max_i; + float p_energy; + float n_energy; + int16_t d_acc; + int16_t pos_last; + float clas_sec; + int16_t clas_final; + int16_t i; + float gain1, gain2, gain3, gain11, gain4; + float peak_l, peak_h, avrg_l, avrg_h, peak_H1, avrg_H1, peak_H2, avrg_H2; + int16_t condition1, condition2; + int16_t condition3, condition4; + int16_t gain2_start, gain3_start, gain4_start, H1_start, H2_start, H_length; + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + if ( st->input_Fs == 32000 || st->input_Fs == 48000 ) + { + gain2_start = GAIN2_START_SWB; + gain3_start = GAIN3_START_SWB; + gain4_start = GAIN4_START_SWB; + H1_start = H1_START_SWB; + H2_start = H2_START_SWB; + H_length = H_LENGTH_SWB; + } + else if ( st->input_Fs == 16000 ) + { + gain2_start = GAIN2_START_WB; + gain3_start = GAIN3_START_WB; + gain4_start = GAIN4_START_WB; + H1_start = H1_START_WB; + H2_start = H2_START_WB; + H_length = H_LENGTH_WB; + } + else + { + assert( !"Unknown sampling frequency in MDCT_classifier" ); + H1_start = -1; /* to avoid compilation warning */ + H2_start = -1; /* to avoid compilation warning */ + H_length = -1; /* to avoid compilation warning */ + gain2_start = -1; /* to avoid compilation warning */ + gain3_start = -1; /* to avoid compilation warning */ + gain4_start = -1; /* to avoid compilation warning */ + } + + if ( st->element_mode != IVAS_CPE_DFT ) + { + for ( k = 0; k < 127; k++ ) + { + X[1 + k] = fft_buff[1 + k] * fft_buff[1 + k] + fft_buff[255 - k] * fft_buff[255 - k]; + } + + for ( k = 0; k < 2; k++ ) + { + y[k] = fft_buff[k << 7] * fft_buff[k << 7]; + } + + for ( k = 0; k < 2; k++ ) + { + X[k << 7] = y[k]; + } + } + else + { + float norm_val; + + norm_val = ( L_FFT * L_FFT ) / 4.f; + for ( k = 0; k < 128; k++ ) + { + X[k + 1] = st->Bin_E_old[k] * norm_val; + } + X[0] = X[1]; + } + + nf = X[0]; + pe = X[0]; + np = 0; + max_cand = -1.0F; + max_i = 0; + p_energy = 0.0F; + n_energy = 0.0F; + d_acc = 0; + pos_last = -1; + + for ( k = 0; k < 128; k++ ) + { + if ( X[k + 1] > nf ) + { + nf = 0.9578F * nf + 0.0422F * X[k + 1]; + } + else + { + nf = 0.6472F * nf + 0.3528F * X[k + 1]; + } + + if ( X[k + 1] > pe ) + { + pe = 0.42237F * pe + 0.57763F * X[k + 1]; + } + else + { + pe = 0.80285F * pe + 0.19715F * X[k + 1]; + } + + if ( X[k + 1] > pe * 0.64F ) + { + if ( X[k + 1] > max_cand ) + { + max_cand = X[k + 1]; + max_i = (int16_t) ( 2 + k ); + } + } + else + { + if ( max_i > 0 ) + { + if ( np > 0 ) + { + d_acc = (int16_t) ( (int16_t) ( d_acc + max_i ) - pos_last ); + } + np++; + pos_last = max_i; + } + + max_cand = -1.0F; + max_i = 0; + } + + p_energy += pe * pe; + n_energy += nf * nf; + } + + if ( np > 1 ) + { + nf = (float) d_acc / ( (float) np - 1.0F ); + } + else + { + nf = 0.0F; + } + gain1 = 0.0f; + gain2 = 0.0f; + gain3 = 0.0f; + + for ( i = 0; i < gain2_start; i++ ) + { + gain1 += enerBuffer[i] / gain2_start; + gain2 += enerBuffer[gain2_start + i] / gain2_start; + gain3 += enerBuffer[gain3_start + i] / gain2_start; + } + + gain11 = gain2_start * ( gain1 - enerBuffer[0] / gain2_start ) / ( gain2_start - 1 ); + gain4 = 0.0f; + for ( i = 0; i < gain4_start; i++ ) + { + gain4 += enerBuffer[gain4_start + i] / gain4_start; + } + + peak_H1 = enerBuffer[H1_start]; + avrg_H1 = enerBuffer[H1_start]; + for ( i = 1; i < H_length; i++ ) + { + if ( enerBuffer[H1_start + i] > peak_H1 ) + { + peak_H1 = enerBuffer[H1_start + i]; + } + avrg_H1 += enerBuffer[H1_start + i]; + } + + peak_H2 = enerBuffer[H2_start]; + avrg_H2 = enerBuffer[H2_start]; + for ( i = 1; i < H_length; i++ ) + { + if ( enerBuffer[H2_start + i] > peak_H2 ) + { + peak_H2 = enerBuffer[H2_start + i]; + } + avrg_H2 += enerBuffer[H2_start + i]; + } + + peak_l = 0.0f; + avrg_l = EPSILON; + peak_h = 0.0f; + avrg_h = EPSILON; + for ( i = 0; i < 32; i++ ) + { + avrg_l += X[20 + i]; + avrg_h += X[96 + i]; + if ( X[20 + i] > peak_l ) + { + peak_l = X[20 + i]; + } + if ( X[96 + i] > peak_h ) + { + peak_h = X[96 + i]; + } + } + + condition1 = nf > 12.0F; + condition2 = p_energy - n_energy * 147.87276f > 0; + condition3 = gain3 > 1.2f * gain2 || + ( gain3 >= 0.8f * gain2 && 5 * peak_H1 > 2.0f * avrg_H1 ) || + ( 2.6f * peak_l * avrg_h < peak_h * avrg_l || peak_l * avrg_h > 2.6f * peak_h * avrg_l ); + condition4 = ( gain4 > 0.8f * gain11 && 2.56f * peak_l * avrg_h > peak_h * avrg_l && peak_l * avrg_h < 5.12f * peak_h * avrg_l ) || + ( gain4 > 0.3f * gain11 && 32 * peak_h < 1.5f * avrg_h && 5 * peak_H2 < 1.5f * avrg_H2 ) || + ( 2.56f * peak_l * avrg_h < peak_h * avrg_l && 32 * peak_h > 1.5f * avrg_h ) || ( peak_l * avrg_h > 2.56f * peak_h * avrg_l && 32 * peak_h < 1.5f * avrg_h ); + + if ( ( ( brate >= HQ_MDCTCLASS_CROSSOVER_BRATE ) && st->input_Fs > 16000 && ( ( !condition1 && condition2 ) || ( condition1 && !condition2 ) || condition3 ) ) || ( ( ( brate < HQ_MDCTCLASS_CROSSOVER_BRATE ) || st->input_Fs == 16000 ) && condition4 ) ) + { + c = HQ_LOCAL; + } + else + { + c = TCX_LOCAL; + } + + /* Smooth decision from instantaneous decision*/ + clas_sec = ( SMOOTH_FILT_COEFF * hTcxEnc->clas_sec_old ) + ( ( 1 - SMOOTH_FILT_COEFF ) * c ); + + /* Do thresholding with hysteresis */ + if ( ( hTcxEnc->clas_final_old == HQ_CORE || hTcxEnc->clas_final_old == TCX_20_CORE ) && ( ( hTcxEnc->last_gain1 > 0.5f * gain1 && hTcxEnc->last_gain1 < 2.0f * gain1 ) && ( hTcxEnc->last_gain2 > 0.5f * gain2 && hTcxEnc->last_gain2 < 2.0f * gain2 ) ) ) + { + clas_final = hTcxEnc->clas_final_old; + } + else if ( clas_sec > hTcxEnc->clas_sec_old && clas_sec > THRESH_UP ) /* Going up? */ + { + clas_final = HQ_CORE; + } + else if ( clas_sec < THRESH_DOWN ) /* Going down */ + { + clas_final = TCX_20_CORE; + } + else + { + clas_final = hTcxEnc->clas_final_old; + } + + /* Prevent the usage of HQ_CORE on noisy-speech or inactive */ + if ( ( st->mdct_sw_enable == MODE2 || st->element_mode > EVS_MONO ) && ( st->flag_noisy_speech_snr == 1 || st->vad_flag == 0 ) && clas_final == HQ_CORE ) + { + clas_final = TCX_20_CORE; + } + + /* Restrict usage of HQ_core to supported operating range */ + /* EVS: brate == st->total_brate */ + /* IVAS: brate is the nominal bitrate while st->total_brate may fluctuate. This sets a hard limit for HQ at HQ_16k40 */ + if ( st->total_brate <= HQ_16k40 || brate < HQ_16k40 || st->bwidth == NB || brate > IVAS_48k ) + { + clas_final = TCX_20_CORE; + } + + /* Memory update */ + hTcxEnc->clas_sec_old = clas_sec; + hTcxEnc->clas_final_old = clas_final; + hTcxEnc->last_gain1 = gain1; + hTcxEnc->last_gain2 = gain2; + + return clas_final; +} + +/*--------------------------------------------------------------------------* + * MDCT_classifier_reset() + * + * reset MDCT classifier memories + *--------------------------------------------------------------------------*/ + +void MDCT_classifier_reset( + TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ +) +{ + hTcxEnc->clas_sec_old = 1.0f; + hTcxEnc->clas_final_old = 1; + hTcxEnc->last_gain1 = 0.0f; + hTcxEnc->last_gain2 = 0.0f; + + return; +} diff --git a/lib_enc/mdct_selector.c b/lib_enc/mdct_selector.c new file mode 100644 index 0000000000..1f118d23d2 --- /dev/null +++ b/lib_enc/mdct_selector.c @@ -0,0 +1,292 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define MDCT_SW_SIG_LINE_THR 2.85f /* Significant spectral line threshold above Etot (dB) */ +#define MDCT_SW_SIG_PEAK_THR 36.0f /* Significant peak threshold below Etot (dB) */ +#define MDCT_SW_HI_SPARSE_THR 0.25f /* Max. ratio of significant spectral lines for the spectrum to be considered sparse */ +#define MDCT_SW_HI_ENER_LO_THR 7.5f /* Hi band low energy threshold (dB) */ +#define MDCT_SW_1_VOICING_THR 0.9f /* Voicing threshold */ +#define MDCT_SW_1_HI_ENER_LO_THR 12.5f /* Hi band low energy threshold (dB) */ +#define MDCT_SW_1_SIG_HI_LEVEL_THR 28.0f /* High signal level threshold above noise floor (dB) */ +#define MDCT_SW_1_SIG_LO_LEVEL_THR 22.5f /* Low signal level threshold above noise floor (dB) */ +#define MDCT_SW_1_COR_THR 80.0f /* Threshold on cor_map_sum to indicate strongly tonal signal */ +#define MDCT_SW_1_SPARSENESS_THR 0.65f /* Threshold on spectrum sparseness */ + +#define MDCT_SW_2_VOICING_THR 0.6f /* Voicing threshold */ +#define MDCT_SW_2_HI_ENER_LO_THR 9.5f /* Hi band low energy threshold (dB) */ +#define MDCT_SW_2_SIG_HI_LEVEL_THR 19.0f /* High signal level threshold above noise floor (dB) */ +#define MDCT_SW_2_SIG_LO_LEVEL_THR 23.5f /* Low signal level threshold above noise floor (dB) */ +#define MDCT_SW_2_COR_THR 62.5f /* Threshold on cor_map_sum to indicate strongly tonal signal */ +#define MDCT_SW_2_SPARSENESS_THR 0.4f /* Threshold on spectrum sparseness */ + +#define MDCT_SW_HYST_FAC 0.8f /* Hysteresis tolerance factor */ + + +/*--------------------------------------------------------------------------* + * get_sparseness() + * + * + *--------------------------------------------------------------------------*/ + +static float get_sparseness( + const float Bin_E[], + int16_t n, + float thr ) +{ + int16_t num_max, i; + + thr = (float) ( thr * log( 10 ) ); /* Convert to 10*log() domain from 10*log10() domain */ + + thr = max( thr, 3.0f ); /* Set an absolute minimum for close to silent signals */ + + num_max = 0; + for ( i = 1; i < n - 1; ++i ) + { + if ( Bin_E[i] > max( max( Bin_E[i - 1], Bin_E[i + 1] ), thr ) ) + { + ++num_max; + } + } + + return 1.0f - num_max / (float) ( ( n - 2 ) / 2 ); +} + +/*--------------------------------------------------------------------------* + * MDCT_selector() + * + * + *--------------------------------------------------------------------------*/ + +void MDCT_selector( + Encoder_State *st, /* i/o: Encoder State */ + const float sp_floor, /* i : Noise floor estimate */ + const float Etot, /* i : Total energy */ + const float cor_map_sum, /* i : sum of correlation map */ + const float enerBuffer[] /* i : energy buffer */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + if ( st->mdct_sw_enable == MODE1 || st->mdct_sw_enable == MODE2 ) + { + float hi_ener, frame_voicing, sparseness; + int16_t peak_count; + int16_t prefer_tcx, prefer_hq_core, switching_point, hi_sparse, sparse; + int16_t lob_cldfb, hib_cldfb, lob_fft, hib_fft; + int16_t i; + float sig_lo_level_thr, sig_hi_level_thr, cor_thr, voicing_thr, sparseness_thr, hi_ener_lo_thr; + int16_t last_core; + + if ( st->bwidth == NB ) + { + lob_cldfb = 3200 / 400; + hib_cldfb = 4000 / 400; + lob_fft = ( L_FFT / 2 ) / 2; /* 3.2 KHz */ + hib_fft = ( 40 * ( L_FFT / 2 ) ) / 64; /* 4.0 KHz */ + } + else if ( st->bwidth == WB ) + { + lob_cldfb = 4800 / 400; + hib_cldfb = 8000 / 400; + lob_fft = 3 * L_FFT / 2 / 4; /* 4.8 KHz */ + hib_fft = L_FFT / 2; /* 6.4 KHz (should be 8 KHz) */ + } + else + { + lob_cldfb = 6400 / 400; + hib_cldfb = 16000 / 400; + if ( st->bwidth == FB ) + { + hib_cldfb = 24000 / 400; + } + lob_fft = L_FFT / 2; /* 6.4 KHz */ + hib_fft = L_FFT / 2; /* 6.4 KHz (should be 8 KHz) */ + } + + /* st->last_core is reset to TCX_20_CORE in init_acelp() => fix it here */ + last_core = st->last_core; + if ( st->last_codec_mode == MODE1 && last_core == TCX_20_CORE ) + { + last_core = HQ_CORE; + } + + /* Voicing */ + frame_voicing = ( st->voicing[0] + st->voicing[1] ) * 0.5f; + + /* Spectral sparseness */ + sparseness = get_sparseness( st->Bin_E, lob_fft, Etot - MDCT_SW_SIG_PEAK_THR ); + + /* Hi band energy */ + hi_ener = (float) log10( mean( &enerBuffer[lob_cldfb], hib_cldfb - lob_cldfb ) + 0.0001f ); + + /* Hi band sparseness */ + if ( st->bwidth >= SWB ) + { + /* For SWB, assume hi band sparseness based on 4.8 KHz-6.4 KHz band */ + lob_fft = 3 * L_FFT / 2 / 4; /* 4.8 KHz */ + } + + peak_count = 0; + for ( i = lob_fft; i < hib_fft; ++i ) + { + if ( st->Bin_E[i] >= Etot + MDCT_SW_SIG_LINE_THR * LOG_10 ) + { + ++peak_count; + } + } + hi_sparse = peak_count <= anint( ( hib_fft - lob_fft ) * MDCT_SW_HI_SPARSE_THR ); + sparse = peak_count <= anint( ( hib_fft - lob_fft ) * MDCT_SW_HI_SPARSE_THR / MDCT_SW_HYST_FAC ); + + /* Hysteresis */ + if ( hTcxEnc->prev_hi_sparse > 0 && sparse > 0 && min( min( st->voicing[0], st->voicing[1] ), st->voicing[2] ) >= MDCT_SW_1_VOICING_THR ) + { + hi_sparse = 1; + } + + /* Allowed switching point? */ + switching_point = ( last_core != HQ_CORE && last_core != TCX_20_CORE ) || /* previous core was non-MDCT */ + ( hTcxEnc->prev_hi_ener <= MDCT_SW_HI_ENER_LO_THR || hi_ener <= MDCT_SW_HI_ENER_LO_THR ) || /* hi band is close to silent */ + ( last_core == HQ_CORE && ( st->mdct_sw_enable == MODE1 || ( hi_sparse > 0 && hTcxEnc->prev_hi_sparse >= 0 && hTcxEnc->prev_hi_sparse <= 1 ) ) ) || /* HQ_CORE and hi band became sparse */ + ( last_core == TCX_20_CORE && ( hi_sparse == 0 && hTcxEnc->prev_hi_sparse > 0 ) ); /* TCX and hi band became dense */ + + if ( st->mdct_sw_enable == MODE1 ) + { + sig_lo_level_thr = MDCT_SW_1_SIG_LO_LEVEL_THR; + sig_hi_level_thr = MDCT_SW_1_SIG_HI_LEVEL_THR; + cor_thr = MDCT_SW_1_COR_THR; + voicing_thr = MDCT_SW_1_VOICING_THR; + sparseness_thr = MDCT_SW_1_SPARSENESS_THR; + hi_ener_lo_thr = MDCT_SW_1_HI_ENER_LO_THR; + } + else + { + /* st->mdct_sw_enable == MODE2 */ + sig_lo_level_thr = MDCT_SW_2_SIG_LO_LEVEL_THR; + sig_hi_level_thr = MDCT_SW_2_SIG_HI_LEVEL_THR; + cor_thr = MDCT_SW_2_COR_THR; + voicing_thr = MDCT_SW_2_VOICING_THR; + sparseness_thr = MDCT_SW_2_SPARSENESS_THR; + hi_ener_lo_thr = MDCT_SW_2_HI_ENER_LO_THR; + } + + prefer_tcx = ( Etot - sp_floor >= sig_hi_level_thr ) && /* noise floor is low */ + ( cor_map_sum >= cor_thr || frame_voicing >= voicing_thr || sparseness >= sparseness_thr ) && /* strong tonal components */ + ( hi_ener <= hi_ener_lo_thr || hi_sparse > 0 ); /* high freqs have low energy or are sparse */ + + prefer_hq_core = ( Etot - sp_floor < sig_lo_level_thr ) || /* noise floor is very high */ + ( cor_map_sum < cor_thr * MDCT_SW_HYST_FAC && frame_voicing < voicing_thr * MDCT_SW_HYST_FAC && sparseness < sparseness_thr * MDCT_SW_HYST_FAC ) || /* too weak tonal components */ + ( st->mdct_sw_enable == MODE1 && !prefer_tcx && st->hTranDet->transientDetector.bIsAttackPresent ); + + /* Prefer HQ_CORE on transients */ + if ( st->mdct_sw_enable == MODE2 && st->hTranDet->transientDetector.bIsAttackPresent ) + { + prefer_tcx = 0; + prefer_hq_core = 1; + } + + if ( switching_point && ( prefer_tcx || prefer_hq_core ) ) + { + if ( prefer_tcx ) + { + st->core = TCX_20_CORE; + } + else /* prefer_hq_core */ + { + st->core = HQ_CORE; + } + } + else if ( last_core == HQ_CORE || last_core == TCX_20_CORE ) + { + st->core = last_core; + } + + /* Prevent the usage of HQ_CORE on noisy-speech or inactive */ + if ( st->mdct_sw_enable == MODE2 && st->core == HQ_CORE && ( st->flag_noisy_speech_snr == 1 || st->vad_flag == 0 ) ) + { + st->core = TCX_20_CORE; + } + + + /* Update memories */ + if ( hi_sparse <= 0 ) + { + hTcxEnc->prev_hi_sparse = hi_sparse; + } + else + { + hTcxEnc->prev_hi_sparse += hi_sparse; + if ( hTcxEnc->prev_hi_sparse >= 2 ) + { + hTcxEnc->prev_hi_sparse = 2; + } + } + hTcxEnc->prev_hi_ener = hi_ener; + } + + return; +} + +/*--------------------------------------------------------------------------* + * MDCT_selector_reset() + * + * reset MDCT selector memories + *--------------------------------------------------------------------------*/ + +void MDCT_selector_reset( + TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ +) +{ + hTcxEnc->prev_hi_ener = 0; + hTcxEnc->prev_hi_sparse = -1; + + return; +} diff --git a/lib_enc/mslvq_enc.c b/lib_enc/mslvq_enc.c new file mode 100644 index 0000000000..3f7c0715ff --- /dev/null +++ b/lib_enc/mslvq_enc.c @@ -0,0 +1,846 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "rom_com.h" +#include "cnst.h" +#include "wmops.h" +#include "ivas_prot.h" + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static float quantize_data( float *data, const float *w_in, float *qin, float *cv_out, int16_t *idx_lead, int16_t *idx_scale, const float *sigma, const float *inv_sigma, const float *scales, Word8 *no_leaders ); +static float q_data( float *pTmp1, const float *w1, float *quant, float *cv_out, int16_t *idx_lead, int16_t *idx_scale, const float *p_inv_sigma, const float *p_sigma, const float *p_scales, Word8 *no_leaders ); +static void prepare_data( float *xsort, int16_t *sign, float *data, float *w, const float *w_in, const float *sigma, const float *inv_sigma, int16_t *p_sig ); +static float calculate_min_dist( float cv_pot[LATTICE_DIM], const float *scale, const float *w, int16_t *p_best_scale, int16_t *p_best_idx, Word8 *no_leaders, int16_t sig, int16_t *indx ); +static int16_t find_pos( float *c, const int16_t len, float arg, int16_t *p ); +static void take_out_val( float *v, float *v_out, const float val, const int16_t len ); +static UWord32 index_leaders( float *cv, int16_t idx_lead, const int16_t dim ); +static UWord32 c2idx( const int16_t n, int16_t *p, const int16_t k ); +static UWord32 encode_sign_pc1( const int16_t parity, float *cv ); +static UWord32 encode_comb( float *cv, const int16_t idx_lead ); + + +/*-----------------------------------------------------------------* + * mslvq() + * + * Encodes the LSF residual + *-----------------------------------------------------------------*/ + +float mslvq( + float *pTmp, /* i : M-dimensional input vector */ + float *quant, /* o : quantized vector */ + float *cv_out, /* o : corresponding 8-dim lattice codevectors (without the scaling) */ + int16_t *idx_lead, /* o : leader index for each 8-dim subvector */ + int16_t *idx_scale, /* o : scale index for each subvector */ + const float *w, /* i : weights for LSF quantization */ + const int16_t mode, /* i : number indicating the coding type (V/UV/G...)*/ + const int16_t mode_glb, /* i : LVQ coding mode */ + const int16_t pred_flag /* i : prediction flag (0: safety net, 1,2 - predictive )*/ +) +{ + float dist; + const float *p_scales, *p_sigma, *p_inv_sigma; + int16_t i, tmp, tmp1; + Word8 p_no_lead[MAX_NO_SCALES * 2]; + + dist = 0.0f; + + if ( pred_flag == 0 ) + { + p_sigma = sigma_MSLVQ[mode]; + /* inverse sigma is precomputed to save complexity */ + p_inv_sigma = inv_sigma_MSLVQ[mode]; + p_scales = scales[mode_glb]; + + tmp = no_lead_idx[mode_glb][0]; + tmp1 = no_lead_idx[mode_glb][1]; + if ( ( tmp <= LIMIT_LEADER ) && ( tmp < tmp1 - 2 ) ) + { + tmp += DELTA_LEADER; + } + for ( i = 0; i < MAX_NO_SCALES; i++ ) + { + p_no_lead[i] = (int16_t) leaders_short[tmp][i]; + p_no_lead[i + MAX_NO_SCALES] = (int16_t) leaders_short[tmp1][i]; + } + } + else + { + if ( pred_flag >= 5 ) + { + /* assert( pred_flag >= 12 && pred_flag <= 15 ); */ + /* pred_flag is here the number of bits for MSLVQ */ + + p_sigma = &sigma_BWE[mode_glb * LATTICE_DIM]; + + /* inverse sigma is precomputed to save complexity */ + p_inv_sigma = &inv_sigma_BWE[mode_glb * LATTICE_DIM]; + + if ( mode_glb == 0 ) + { + p_scales = &scales_BWE[( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; + for ( i = 0; i < MAX_NO_SCALES; i++ ) + { + p_no_lead[i] = no_lead_BWE[i + ( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; + } + } + else + { + p_scales = &scales_BWE_3b[( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; + for ( i = 0; i < MAX_NO_SCALES; i++ ) + { + p_no_lead[i] = no_lead_BWE_3b[i + ( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; + } + } + } + else + { + p_sigma = sigma_p[mode]; + + /* inverse sigma is precomputed to save complexity */ + p_inv_sigma = inv_sigma_p[mode]; + p_scales = scales_p[mode_glb]; + + tmp = no_lead_p_idx[mode_glb][0]; + tmp1 = no_lead_p_idx[mode_glb][1]; + + if ( ( tmp <= LIMIT_LEADER ) && ( tmp < tmp1 - 2 ) ) + { + tmp += DELTA_LEADER; + } + + if ( ( tmp == LIMIT_LEADER ) && ( tmp1 == 0 ) ) + { + tmp += DELTA_LEADER; + tmp1 += DELTA_LEADER; + } + + for ( i = 0; i < MAX_NO_SCALES; i++ ) + { + p_no_lead[i] = (int16_t) leaders_short[tmp][i]; + p_no_lead[i + MAX_NO_SCALES] = (int16_t) leaders_short[tmp1][i]; + } + } + } + + /* first subvector */ + dist += quantize_data( pTmp, w, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); + + if ( pred_flag < 5 ) + { + /* second subvector */ + dist += quantize_data( pTmp + LATTICE_DIM, w + LATTICE_DIM, quant + LATTICE_DIM, cv_out + LATTICE_DIM, &idx_lead[1], &idx_scale[1], p_sigma + LATTICE_DIM, p_inv_sigma + LATTICE_DIM, p_scales + MAX_NO_SCALES, p_no_lead + MAX_NO_SCALES ); + } + + return dist; +} + + +/*-----------------------------------------------------------------* + * q_data() + * + * (used for LSF quantization in CNG) + *-----------------------------------------------------------------*/ + +static float q_data( + float *pTmp1, + const float *w1, + float *quant, + float *cv_out, + int16_t *idx_lead, + int16_t *idx_scale, + const float *p_sigma, + const float *p_inv_sigma, + const float *p_scales, + Word8 *p_no_lead ) +{ + float dist = 0.0f; + /* first subvector */ + dist += quantize_data( pTmp1, w1, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); + /* second subvector */ + dist += quantize_data( pTmp1 + LATTICE_DIM, w1 + LATTICE_DIM, quant + LATTICE_DIM, cv_out + LATTICE_DIM, &idx_lead[1], &idx_scale[1], p_sigma + LATTICE_DIM, p_inv_sigma + LATTICE_DIM, p_scales + MAX_NO_SCALES, p_no_lead + MAX_NO_SCALES ); + + return dist; +} + +/*-----------------------------------------------------------------* + * mslvq_cng() + * + * Encodes the LSF residual in SID frames + *-----------------------------------------------------------------*/ + +float mslvq_cng( + int16_t idx_cv, /* i : index of cv from previous stage */ + float *pTmp, /* i : 16 dimensional input vector */ + float *quant, /* o : quantized vector */ + float *cv_out, /* o : corresponding 8-dim lattice codevectors (without the scaling) */ + int16_t *idx_lead, /* o : leader index for each 8-dim subvector */ + int16_t *idx_scale, /* o : scale index for each subvector */ + const float *w /* i : weights for LSF quantization */ +) +{ + float dist; + const float *p_scales, *p_sigma, *p_inv_sigma; + Word8 p_no_lead[MAX_NO_SCALES * 2]; + int16_t no_scales[2]; + int16_t mode_glb, mode, i; + float pTmp1[M], w1[M]; + + dist = 0.0f; + mode = LVQ_COD_MODES + idx_cv; + + /* for CNG there is only one bitrate but several quantizer structures, depending on the previous VQ stage */ + mode_glb = START_CNG + idx_cv; + + p_sigma = sigma_MSLVQ[mode]; + p_inv_sigma = inv_sigma_MSLVQ[mode]; + p_scales = scales[mode_glb]; + + no_scales[0] = 0; + no_scales[1] = 0; + + for ( i = 0; i < MAX_NO_SCALES; i++ ) + { + p_no_lead[i] = (int16_t) leaders_short[no_lead_idx[mode_glb][0]][i]; + p_no_lead[i + MAX_NO_SCALES] = (int16_t) leaders_short[no_lead_idx[mode_glb][1]][i]; + + if ( p_scales[i] > 0.0f ) + { + no_scales[0] += 1; + } + if ( p_scales[i + MAX_NO_SCALES] > 0.0f ) + { + no_scales[1] += 1; + } + } + + /* check if LSF component permutation is needed or not */ + if ( cng_sort[idx_cv] ) + { + /* change order in subvecs */ + for ( i = 0; i < M; i++ ) + { + pTmp1[i] = pTmp[i]; + w1[i] = w[i]; + } + /* sorting the quantizer input and the corresponding weights according to the specified permutations */ + permute( pTmp1, perm_MSLVQ[idx_cv] ); + permute( w1, perm_MSLVQ[idx_cv] ); + + dist = q_data( pTmp1, w1, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); + /* permute back */ + permute( quant, perm_MSLVQ[idx_cv] ); + } + else + { + dist = q_data( pTmp, w, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); + } + + return dist; +} +/*-----------------------------------------------------------------* + * prepare_data() + * + *-----------------------------------------------------------------*/ + +static void prepare_data( + float *xsort, + int16_t *sign, + float *data, + float *w, + const float *w_in, + const float *sigma, + const float *inv_sigma, + int16_t *p_sig ) +{ + int16_t j, sig; + float s, inv_s; + + /* scale data */ + for ( j = 0; j < LATTICE_DIM; j++ ) + { + s = sigma[j]; + inv_s = inv_sigma[j]; + xsort[j] = data[j] * inv_s; + w[j] = w_in[j] * ( s * s ); + } + + sig = 1; + for ( j = 0; j < LATTICE_DIM; j++ ) + { + if ( xsort[j] < 0 ) + { + sign[j] = -1; + sig = -sig; + xsort[j] = -xsort[j]; + } + else + { + sign[j] = 1; + } + } + *p_sig = sig; + + return; +} + +/*-----------------------------------------------------------------* + * calculate_min_dist() + * + *-----------------------------------------------------------------*/ + +static float calculate_min_dist( + float cv_pot[LATTICE_DIM], + const float *scale, + const float *w, + int16_t *p_best_scale, + int16_t *p_best_idx, + Word8 *no_leaders, + int16_t sig, + int16_t *indx ) +{ + int16_t k, l, j, best_scale = -1, best_idx = -1; + float s, s2, tmp_dist, min_dist, wx[LATTICE_DIM], wind[LATTICE_DIM]; + float sum1[NO_LEADERS], sum2[NO_LEADERS]; + const float *pl_crt; + float p; + + /* compare first with the origin */ + min_dist = 0.0f; + for ( j = 0; j < LATTICE_DIM; j++ ) + { + /* sorting the weight based on the ordering indx[] of the input vector */ + wind[j] = w[indx[j]]; + wx[j] = 2.0f * wind[j] * cv_pot[j]; + } + s = scale[0]; + s2 = s * s; + pl_crt = &pl_HQ[0]; + + for ( j = 0; j < no_leaders[0]; j++ ) + { + sum1[j] = 0; + sum2[j] = 0; + l = 0; + while ( l < LATTICE_DIM - 1 ) + { + p = *pl_crt; + if ( p ) + { + sum1[j] += wx[l] * p; + sum2[j] += wind[l] * p * p; + pl_crt++; + l++; + } + else + { + pl_crt += LATTICE_DIM - l; + l = LATTICE_DIM; + } + } + if ( ( l - LATTICE_DIM + 1 ) == 0 ) + { + p = *pl_crt; + /* if it went up to 7th position */ + if ( pl_par[j] ) + { + if ( sig != pl_par[j] ) + { + sum1[j] -= wx[l] * p; + sum2[j] += wind[l] * p * p; + pl_crt++; + } + else + { + sum1[j] += wx[l] * p; + sum2[j] += wind[l] * p * p; + pl_crt++; + } + } + else + { + sum1[j] += wx[l] * p; + sum2[j] += wind[l] * p * p; + pl_crt++; + } + } + /* distance between the potential codevector and the input calculated in ordered space */ + tmp_dist = s2 * sum2[j] - s * sum1[j]; + if ( tmp_dist < min_dist ) + { + min_dist = tmp_dist; + best_scale = 0; + best_idx = j; + } + } + + tmp_dist = min_dist + 1.0f; + + for ( k = 1; k < MAX_NO_SCALES; k++ ) + { + s = scale[k]; + + if ( s > 0.0f ) + { + s2 = s * s; + for ( j = 0; j < no_leaders[k]; j++ ) + { + /* distance between the potential codevector and the input calculated in ordered space */ + tmp_dist = s2 * sum2[j] - s * sum1[j]; + if ( tmp_dist < min_dist ) + { + min_dist = tmp_dist; + best_scale = k; + best_idx = j; + } + } + } + } + *p_best_scale = best_scale; + *p_best_idx = best_idx; + + return min_dist; +} + + +/*-----------------------------------------------------------------* + * quantize_data() + * + *-----------------------------------------------------------------*/ + +static float quantize_data( + float *data, /* i : residual LSF data to quantize */ + const float *w_in, /* i : weights */ + float *qin, /* o : quantized output (scaled) */ + float *cv_out, /* o : codevectors */ + int16_t *idx_lead, /* o : leader indexes for each subvector */ + int16_t *idx_scale, /* o : scale indexes for each subvector */ + const float *sigma, /* i : standard deviation */ + const float *inv_sigma, /* i : inverse of standard deviation */ + const float *scale, /* i : scales for each truncation */ + Word8 *no_leaders /* i : number of leader vectors for each truncation of each subvector */ +) +{ + int16_t j; + float w[LATTICE_DIM], min_dist = 0; + int16_t best_idx = 0, best_scale = -1; + float s; + float cv_pot[LATTICE_DIM]; + int16_t indx[LATTICE_DIM]; + int16_t sig, sign[LATTICE_DIM]; + int16_t smallest; + int16_t id[LATTICE_DIM]; + + if ( scale[0] > 0.0f ) + { + prepare_data( cv_pot, sign, data, w, w_in, sigma, inv_sigma, &sig ); + /* sorting of the input vector based on its absolute values; indx: permutation corresponding to the sorting */ + sort_desc_ind( cv_pot, LATTICE_DIM, indx ); + smallest = indx[LATTICE_DIM - 1]; + min_dist = calculate_min_dist( cv_pot, scale, w, &best_scale, &best_idx, no_leaders, sig, indx ); + if ( best_scale > -1 ) + { + for ( j = 0; j < LATTICE_DIM; j++ ) + { + id[indx[j]] = j; + } + for ( j = 0; j < LATTICE_DIM; j++ ) + { + cv_out[j] = sign[j] * pl_HQ[best_idx * LATTICE_DIM + id[j]]; + } + if ( pl_par[best_idx] ) + { + if ( sig - pl_par[best_idx] != 0 ) + { + cv_out[smallest] = -cv_out[smallest]; + } + } + s = scale[best_scale]; + for ( j = 0; j < LATTICE_DIM; j++ ) + { + qin[j] = cv_out[j] * s * sigma[j]; + } + *idx_lead = best_idx; + *idx_scale = best_scale; + } + else + { + for ( j = 0; j < LATTICE_DIM; j++ ) + { + qin[j] = 0; + } + + *idx_lead = best_idx; + *idx_scale = best_scale; + } + } + else + { + *idx_lead = 0; + *idx_scale = -1; + for ( j = 0; j < LATTICE_DIM; j++ ) + { + cv_out[j] = 0; + qin[j] = 0; + } + } + + return min_dist; +} + +/*-----------------------------------------------------------------* + * index_lvq() + * + * sorts in descending order and computes indices in the sorted vector + *-----------------------------------------------------------------*/ + +void index_lvq( + float *quant, /* i : codevector to be indexed (2 8-dim subvectors) */ + int16_t *idx_lead, /* i : leader class index for each subvector */ + int16_t *idx_scale, /* i : scale index for each subvector */ + const int16_t mode, /* i : integer signalling the quantizer structure for the current bitrate */ + int16_t *index, /* o : encoded index (represented on 3 short each with 15 bits ) */ + const int16_t prediction_flag ) +{ + UWord32 index1, index2, tmp, idx[2]; + UWord32 offset_scale1[MAX_NO_SCALES + 1], offset_scale2[MAX_NO_SCALES + 1]; + + + index1 = 0; + create_offset( offset_scale1, offset_scale2, mode, prediction_flag ); + + /* for first subvector */ + if ( idx_scale[0] > -1 ) + { + /* create offset */ + index1 = encode_comb( quant, idx_lead[0] ) + table_no_cv[idx_lead[0]] + offset_scale1[idx_scale[0]]; + } + + /* for second subvector */ + index2 = 0; + if ( idx_scale[1] > -1 ) + { + index2 = encode_comb( &quant[LATTICE_DIM], idx_lead[1] ) + table_no_cv[idx_lead[1]] + offset_scale2[idx_scale[1]]; + } + + multiply32_32_64( index1, offset_scale2[MAX_NO_SCALES], idx ); + + tmp = idx[0] + index2; + if ( tmp < idx[0] || tmp < index2 ) + { + idx[1] += 1; + } + + idx[0] = tmp; + + /* convert to 3 short */ + index[0] = (int16_t) ( ( idx[0] ) & ( 0xffff >> 1 ) ); + index[1] = (int16_t) ( ( idx[0] ) >> 15 ) & ( 0xffff >> 1 ); + index[2] = (int16_t) ( ( idx[0] ) >> 30 ) + ( ( ( idx[1] ) << 2 ) & ( 0xffff >> 1 ) ); + + return; +} + + +/*-----------------------------------------------------------------* + * encode_comb() + * + * creates an index for the lattice codevector + *-----------------------------------------------------------------*/ + +/*! r: index of the absolute valued codevector */ +static UWord32 encode_comb( + float *cv, /* i : codevector to be indexed */ + const int16_t idx_lead /* i : leader class index, to know the values */ +) +{ + UWord32 idx_sign; + UWord32 idx_ld_class; + + idx_sign = encode_sign_pc1( pl_par[idx_lead], cv ); + idx_ld_class = index_leaders( cv, idx_lead, LATTICE_DIM ); + + return idx_sign * (UWord32) pi0[idx_lead] + idx_ld_class; +} + + +/*-----------------------------------------------------------------* + * index_leaders() + * + * gives the index in a class of leaders without considering the sign yet + *-----------------------------------------------------------------*/ + +/*! r: index */ +static UWord32 index_leaders( + float *cv, /* i : codevector to be indexed */ + int16_t idx_lead, /* i : leader class index */ + const int16_t dim /* i : vector dimension */ +) +{ + UWord32 index; + int16_t p[LATTICE_DIM]; + int16_t i, no_vals_loc, nr, dim_loc; + float cv_copy[LATTICE_DIM], val_crt; + + no_vals_loc = no_vals[idx_lead]; + + if ( no_vals_loc == 1 ) + { + return 0; + } + + for ( i = 0; i < LATTICE_DIM; i++ ) + { + cv_copy[i] = (float) fabs( cv[i] ); + } + + val_crt = vals[idx_lead][0]; + nr = find_pos( cv_copy, dim, val_crt, p ); + index = c2idx( LATTICE_DIM, p, nr ); + + if ( no_vals_loc == 2 ) + { + return index; + } + + take_out_val( cv_copy, cv_copy, val_crt, dim ); + dim_loc = dim - no_vals_ind[idx_lead][0]; + index *= C_VQ[dim_loc][no_vals_ind[idx_lead][1]]; + val_crt = vals[idx_lead][1]; + nr = find_pos( cv_copy, dim_loc, val_crt, p ); + index += c2idx( dim_loc, p, nr ); + + if ( no_vals_loc == 3 ) + { + return index; + } + + take_out_val( cv_copy, cv_copy, val_crt, dim_loc ); + dim_loc = dim_loc - no_vals_ind[idx_lead][1]; + index *= C_VQ[dim_loc][no_vals_ind[idx_lead][2]]; + val_crt = vals[idx_lead][2]; + nr = find_pos( cv_copy, dim_loc, val_crt, p ); + index += c2idx( dim_loc, p, nr ); + /* maximum 4 values */ + + return index; +} + +/*-----------------------------------------------------------------* + * find_pos() + * + * Finds the positions in vector c for which the vector components are equal to 'arg'. + * It returns the number of such positions and their values in the array 'p'. + *-----------------------------------------------------------------*/ + +/*! r: number of positions */ +int16_t find_pos( + float *c, /* i : input vector */ + const int16_t len, /* i : input vector dim */ + float arg, /* i : argument to be compared with */ + int16_t *p /* o : vector of positions */ +) +{ + int16_t i = 0, j = 0; + + /* how many (j) and which (p) positions are in the relation pred(arg,c[i]) */ + for ( i = 0; i < len; i++ ) + { + if ( (int16_t) ( arg * 10 ) == (int16_t) ( c[i] * 10 ) ) + { + p[j++] = i; + } + } + + return j; +} + +/*-----------------------------------------------------------------* + * encode_sign_pc1() + * + * Creates an index for signs of the significant codevector components + * Gives the index of the signs - binary representation where negative sign stands for 1 + * and positive sign stands for 1. + *-----------------------------------------------------------------*/ + +/*! r: index of signs */ +static UWord32 encode_sign_pc1( + const int16_t parity, /* i : parity of the leader class to which the codevector belongs */ + float *cv /* i : input codevector */ +) +{ + UWord32 idx_sign; + int16_t cnt, i, len = LATTICE_DIM; + + idx_sign = 0; + cnt = 0; + + if ( parity ) + { + len -= 1; + } + + for ( i = 0; i < len; i++ ) + { + if ( cv[i] < 0 ) + { + idx_sign += ( 1 << cnt ); + cnt++; + } + + if ( cv[i] > 0 ) + { + cnt++; + } + } + + return idx_sign; +} + +/*-----------------------------------------------------------------* + * take_out_val() + * + * removes the value val from the vector v + *-----------------------------------------------------------------*/ + +static void take_out_val( + float *v, /* i : input vector */ + float *v_out, /* o : output vector without the value val*/ + const float val, /* i : value to be removed */ + const int16_t len /* i : input vector length */ +) +{ + int16_t i, cnt; + + cnt = 0; + + for ( i = 0; i < len; i++ ) + { + if ( (int16_t) ( v[i] * 10 ) != (int16_t) ( val * 10 ) ) + { + v_out[cnt++] = v[i]; + } + } + + return; +} + + +/*-----------------------------------------------------------------* + * c2idx() + * + *-----------------------------------------------------------------*/ + +static UWord32 c2idx( + const int16_t n, + int16_t *p, + const int16_t k ) +{ + int16_t i, p0; + UWord32 skip; + + if ( k == 1 ) + { + return (UWord32) ( p[0] ); + } + else + { + skip = 0; + for ( i = 1; i <= p[0]; i++ ) + { + skip += C_VQ[n - i][k - 1]; + } + + p0 = p[0]; + for ( i = 1; i < k; i++ ) + { + p[i] -= p0 + 1; + } + + return skip + c2idx( n - p0 - 1, p + 1, k - 1 ); + } +} + +/*-----------------------------------------------------------------* + * index_lvq_SHB() + * + *-----------------------------------------------------------------*/ + +UWord32 index_lvq_SHB( + const int16_t idx_lead, + const int16_t idx_scale, + const int16_t nbits, + float *lat_cv, + const int16_t mode ) +{ + uint16_t i; + const Word8 *p_no_lead; + UWord32 index; + + if ( mode == 0 ) + { + p_no_lead = &no_lead_BWE[( nbits - mslvq_SHB_min_bits[0] ) * 3]; + } + else + { + p_no_lead = &no_lead_BWE_3b[( nbits - mslvq_SHB_min_bits[1] ) * 3]; + } + + index = 0; + if ( idx_lead > -1 ) + { + index = 1; + for ( i = 0; i < idx_scale; i++ ) + { + index += table_no_cv[p_no_lead[i]]; + } + + if ( idx_lead > 0 ) + { + index += table_no_cv[idx_lead]; + } + + index += encode_comb( lat_cv, idx_lead ); + } + + return index; +} diff --git a/lib_enc/multi_harm.c b/lib_enc/multi_harm.c new file mode 100644 index 0000000000..4427b3376c --- /dev/null +++ b/lib_enc/multi_harm.c @@ -0,0 +1,329 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define THR_CORR_MAX 60 /* upper threshold of multi-harm. correlation */ +#define THR_CORR_MIN 49 /* lower threshold of multi-harm. correlation */ +#define THR_CORR_STEP 0.2f /* step for the threshold of multi-harm. correlation */ + +/*---------------------------------------------------------------------* + * multi_harm() + * + * Perform multi-harmonic analysis, information used for UV and VAD decision + *---------------------------------------------------------------------*/ + +/*! r: frame multi-harmonicity (1-harmonic, 0-not) */ +int16_t multi_harm( + const float Bin_E[], /* i : log-energy spectrum of the current frame */ + float old_S[], /* i/o: prev. log-energy spectrum w. subtracted floor */ + float cor_map_LT[], /* i/o: LT correlation map */ + float *multi_harm_limit, /* i/o: multi harminic threshold */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : input signal bandwidth */ + int16_t *cor_strong_limit, /* i/o: HF correlation indicator */ + float *st_mean_avr_dyn, /* i/o: long term average dynamic */ + float *st_last_sw_dyn, /* i/o: last dynamic */ + float *cor_map_sum, /* i : sum of correlation map */ + float *sp_floor, /* o : noise floor estimate */ + float S_map[] /* o : short-term correlation map */ +) +{ + int16_t i, j, k, L, stemp, N_mins, ind_mins[L_FFT / 4], *pt_mins, harm; + float ftemp, ftemp2, flor, step, corx2, cory2, corxy, cor, cor_map_LT_sum, cor_strong, S[L_FFT / 2]; + float mean_dyn; + + /*------------------------------------------------------------------* + * initialization + *------------------------------------------------------------------*/ + + if ( bwidth == NB ) + { + /* length of the useful part of the spectrum (up to 4kHz) */ + L = 76; + } + else + { + /* length of the useful part of the spectrum (up to 6.4kHz) */ + L = L_FFT / 2; + } + + mvr2r( Bin_E, S, L ); + + /*------------------------------------------------------------------* + * searching of spectral maxima and minima + *------------------------------------------------------------------*/ + + pt_mins = ind_mins; + + /* index of the first minimum */ + if ( Bin_E[0] < Bin_E[1] ) + + { + *pt_mins++ = 0; + } + + for ( i = 1; i < L - 1; i++ ) + { + /* minimum found */ + if ( Bin_E[i] < Bin_E[i - 1] && Bin_E[i] < Bin_E[i + 1] ) + { + *pt_mins++ = i; + } + } + + /* index of the last minimum */ + if ( Bin_E[L - 1] < Bin_E[L - 2] ) + { + *pt_mins++ = L - 1; + } + + /* total number of minimas found */ + N_mins = (int16_t) ( pt_mins - ind_mins - 1 ); + + /*------------------------------------------------------------------* + * calculation of the spectral floor + * subtraction of the spectral floor + *------------------------------------------------------------------*/ + + set_f( S, 0, L ); + if ( N_mins > 0 ) + { + *sp_floor = 0; + for ( i = 0; i < N_mins; ++i ) + { + *sp_floor += Bin_E[ind_mins[i]]; + } + *sp_floor /= (float) N_mins; + set_f( S, 0, ind_mins[0] ); + set_f( &S[ind_mins[N_mins]], 0, L - ind_mins[N_mins] ); + + pt_mins = ind_mins; + flor = 0; + step = 0; + + for ( i = ind_mins[0]; i < ind_mins[N_mins]; i++ ) + { + /* we are at the end of the next minimum */ + if ( i == *pt_mins ) + { + pt_mins++; + flor = Bin_E[i]; + + /* calculate the new step */ + step = ( Bin_E[*pt_mins] - Bin_E[i] ) / ( *pt_mins - i ); + } + + /* subtract the floor */ + if ( Bin_E[i] > flor ) + { + S[i] = Bin_E[i] - flor; + } + else + { + S[i] = 0; + } + + /* update the floor */ + flor += step; + } + } + else + { + *sp_floor = Bin_E[0]; + } + *sp_floor *= 1.0f / logf( 10.0f ); + + /* calculate the maximum dynamic per band */ + mean_dyn = mean( &S[L - 40], 40 ); + mean_dyn = 0.6f * *st_mean_avr_dyn + 0.4f * mean_dyn; + + if ( mean_dyn < 9.6f && *cor_strong_limit != 0 ) + { + *cor_strong_limit = 0; + *st_last_sw_dyn = mean_dyn; + } + else if ( ( mean_dyn - *st_last_sw_dyn ) > 4.5f ) + { + *cor_strong_limit = 1; + } + + if ( total_brate < ACELP_9k60 || total_brate > ACELP_16k40 ) + { + *cor_strong_limit = 1; + } + + *st_mean_avr_dyn = mean_dyn; + + /*------------------------------------------------------------------* + * calculation of the correlation map + *------------------------------------------------------------------*/ + + if ( N_mins > 0 ) + { + corx2 = 0; + corxy = 0; + stemp = ind_mins[0]; + ftemp = old_S[stemp]; + cory2 = ftemp * ftemp; + k = 1; + for ( i = stemp + 1; i <= ind_mins[N_mins]; i++ ) + { + if ( i == ind_mins[k] ) + { + /* include the last peak point (new minimum) to the corr. sum */ + ftemp = old_S[i]; + cory2 += ftemp * ftemp; + + /* calculation of the norm. peak correlation */ + if ( ( corx2 == 0 ) || ( cory2 == 0 ) ) + { + cor = 0; + } + else + { + cor = corxy * corxy / ( corx2 * cory2 ); + } + + /* save the norm. peak correlation in the correlation map */ + for ( j = ind_mins[k - 1]; j < ind_mins[k]; j++ ) + { + old_S[j] = S[j]; + S[j] = cor; + } + + corx2 = 0; + cory2 = 0; + corxy = 0; + + k++; + } + + ftemp = S[i]; + ftemp2 = old_S[i]; + corx2 += ftemp * ftemp; + cory2 += ftemp2 * ftemp2; + corxy += ftemp * ftemp2; + } + + mvr2r( S, old_S, ind_mins[0] ); + mvr2r( &S[ind_mins[N_mins]], &old_S[ind_mins[N_mins]], L - ind_mins[N_mins] ); + } + + /*------------------------------------------------------------------* + * updating of the long-term correlation map + * summation of the long-term correlation map + *------------------------------------------------------------------*/ + + cor_strong = 0; + *cor_map_sum = 0; + + for ( i = 0; i < L; i++ ) + { + *cor_map_sum += S[i]; + cor_map_LT[i] = M_ALPHA * cor_map_LT[i] + ( 1 - M_ALPHA ) * S[i]; + if ( cor_map_LT[i] > 0.95f ) + { + cor_strong = 1; + } + } + + /* summation of the LT correlation map */ + cor_map_LT_sum = sum_f( cor_map_LT, L ); + + if ( bwidth == NB ) + { + cor_map_LT_sum *= 1.53f; + *cor_map_sum *= 1.53f; + } + + /* final decision about multi-harmonicity */ + if ( ( cor_map_LT_sum > *multi_harm_limit ) || ( cor_strong == 1 ) ) + { + harm = 1; + } + else + { + harm = 0; + } + + /*------------------------------------------------------------------* + * updating of the decision threshold + *------------------------------------------------------------------*/ + + if ( cor_map_LT_sum > THR_CORR ) + { + *multi_harm_limit -= THR_CORR_STEP; + } + else + { + *multi_harm_limit += THR_CORR_STEP; + } + + if ( *multi_harm_limit > THR_CORR_MAX ) + { + *multi_harm_limit = THR_CORR_MAX; + } + + if ( *multi_harm_limit < THR_CORR_MIN ) + { + *multi_harm_limit = THR_CORR_MIN; + } + + if ( N_mins <= 0 ) + { + set_f( old_S, 0, L ); + } + + if ( S_map != 0 ) + { + mvr2r( S, S_map, L ); + } + + return harm; +} diff --git a/lib_enc/nelp_enc.c b/lib_enc/nelp_enc.c new file mode 100644 index 0000000000..8f8f407749 --- /dev/null +++ b/lib_enc/nelp_enc.c @@ -0,0 +1,447 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * quantize_uvg() + * + * Quantize unvoiced gains + *--------------------------------------------------------------------*/ + +static void quantize_uvg( + float *G, /* i : unvoiced gain */ + int16_t *iG1, /* i : gain 1 index */ + int16_t *iG2, /* i : gain 2 index */ + float *quantG, /* o : quantized gain */ + const int16_t bwidth ) +{ + float G1[2], G2[10]; + int16_t i, j, k; + float mse, mmse; + const float( *UVG1CB )[2] = NULL; + const float( *UVG2CB1 )[5] = NULL; + const float( *UVG2CB2 )[5] = NULL; + + if ( bwidth == NB ) + { + UVG1CB = UVG1CB_NB; + UVG2CB1 = UVG2CB1_NB; + UVG2CB2 = UVG2CB2_NB; + } + else if ( bwidth == WB || bwidth == SWB ) + { + UVG1CB = UVG1CB_WB; + UVG2CB1 = UVG2CB1_WB; + UVG2CB2 = UVG2CB2_WB; + } + + for ( i = 0; i < 2; i++ ) + { + G1[i] = 0; + for ( j = 0; j < 5; j++ ) + { + G1[i] += SQR( G[i * 5 + j] ); + } + G1[i] = (float) log10( sqrt( G1[i] / 5 ) ); + } + + mmse = (float) 1e30; + *iG1 = 0; + + for ( i = 0; i < UVG1_CBSIZE; i++ ) + { + mse = SQR( G1[0] - ( UVG1CB[i][0] ) ) + SQR( G1[1] - ( UVG1CB[i][1] ) ); + if ( mse < mmse ) + { + *iG1 = i; + mmse = mse; + } + } + + G1[0] = (float) pow( 10.0, ( UVG1CB[*iG1][0] ) ); + G1[1] = (float) pow( 10.0, ( UVG1CB[*iG1][1] ) ); + + for ( i = 0; i < 2; i++ ) + { + for ( j = 0; j < 5; j++ ) + { + G2[i * 5 + j] = G[i * 5 + j] / G1[i]; + } + } + + for ( i = 0; i < 2; i++ ) + { + mmse = (float) 1e30; + iG2[i] = 0; + for ( j = 0; j < UVG2_CBSIZE; j++ ) + { + mse = 0; + for ( k = 0; k < 5; k++ ) + { + if ( i == 0 ) + { + mse += SQR( G2[i * 5 + k] - UVG2CB1[j][k] ); + } + else if ( i == 1 ) + { + mse += SQR( G2[i * 5 + k] - UVG2CB2[j][k] ); + } + } + + if ( mse < mmse ) + { + mmse = mse; + iG2[i] = j; + } + } + } + + mvr2r( G, G2, 10 ); + + dequantize_uvg( *iG1, iG2, quantG, bwidth ); + + return; +} + + +/*-------------------------------------------------------------------* + * nelp_encoder() + * + * NELP encoder + *--------------------------------------------------------------------*/ + +void nelp_encoder( + Encoder_State *st, /* i/o: encoder state */ + float *in, /* i : residual signal */ + float *exc, /* o : NELP quantized excitation signal */ + const int16_t reduce_gains ) +{ + int16_t i, j; + float *ptr = exc; + int16_t lag = 25; /* to cover 25*9 + 31 */ + float Gains[10], gain_fac; + int16_t iG1, iG2[2], fid; + float fdbck, var_dB, tmp; + float E1 = 0, E2, E3, R, EL1 = 0, EH1 = 0, EL2, EH2, RL, RH; + float filtRes[L_FRAME]; + float ptr_tmp[L_FRAME]; + int16_t rf_flag; + + SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + rf_flag = st->rf_mode; + + if ( ( hSC_VBR->last_nelp_mode == 1 ) && ( st->bwidth != st->last_bwidth ) ) + { + hSC_VBR->last_nelp_mode = 0; + } + + if ( st->bwidth == NB ) + { + if ( hSC_VBR->last_nelp_mode != 1 ) + { + set_f( hSC_VBR->bp1_filt_mem_nb, 0, 7 * 2 ); + } + } + else if ( st->bwidth == WB || st->bwidth == SWB ) + { + if ( hSC_VBR->last_nelp_mode != 1 ) + { + set_f( hSC_VBR->bp1_filt_mem_wb, 0, 4 * 2 ); + } + } + + if ( hSC_VBR->last_nelp_mode != 1 ) + { + if ( st->bwidth == WB || st->bwidth == SWB ) + { + set_f( hSC_VBR->shape1_filt_mem, 0, 20 ); + set_f( hSC_VBR->shape2_filt_mem, 0, 20 ); + set_f( hSC_VBR->shape3_filt_mem, 0, 20 ); + set_f( hSC_VBR->txlpf1_filt1_mem, 0, 20 ); + set_f( hSC_VBR->txlpf1_filt2_mem, 0, 20 ); + set_f( hSC_VBR->txhpf1_filt1_mem, 0, 20 ); + set_f( hSC_VBR->txhpf1_filt2_mem, 0, 20 ); + } + } + + /* Start Unvoiced/NELP Processing */ + if ( st->bwidth == WB || st->bwidth == SWB ) + { + for ( i = 0, E1 = 0.001f; i < L_FRAME; i++ ) + { + E1 += SQR( in[i] ); + } + + polezero_filter( in, filtRes, L_FRAME, txlpf1_num_coef, txlpf1_den_coef, 10, hSC_VBR->txlpf1_filt1_mem ); + + for ( i = 0, EL1 = 0.001f; i < L_FRAME; i++ ) + { + EL1 += SQR( filtRes[i] ); + } + + polezero_filter( in, filtRes, L_FRAME, txhpf1_num_coef, txhpf1_den_coef, 10, hSC_VBR->txhpf1_filt1_mem ); + + for ( i = 0, EH1 = 0.001f; i < L_FRAME; i++ ) + { + EH1 += SQR( filtRes[i] ); + } + } + + for ( i = 0; i < 9; i++ ) + { + for ( j = i * lag, Gains[i] = 0.001f; j < ( i + 1 ) * lag; j++ ) + { + Gains[i] += SQR( in[j] ); + } + + Gains[i] = (float) sqrt( Gains[i] / lag ); + } + + for ( j = i * lag, Gains[i] = 0.001f; j < L_FRAME; j++ ) + { + Gains[i] += SQR( in[j] ); + } + + Gains[i] = (float) sqrt( Gains[i] / ( L_FRAME - ( lag * i ) ) ); + + if ( reduce_gains == 1 ) + { + for ( i = 0; i < 10; i++ ) + { + Gains[i] = ( Gains[i] * 0.6f ); + } + } + + if ( hSC_VBR->last_nelp_mode != 1 ) /* if prev frame was not NELP then init mem*/ + { + hSC_VBR->nelp_gain_mem = Gains[0]; + } + + tmp = (float) ( 20.0 * ( log10( Gains[0] ) - log10( hSC_VBR->nelp_gain_mem ) ) ); + var_dB = tmp * tmp; + for ( i = 1; i < 10; i++ ) + { + tmp = (float) ( 20.0 * ( log10( Gains[i] ) - log10( Gains[i - 1] ) ) ); + var_dB += tmp * tmp; + } + + if ( hSC_VBR->last_nelp_mode != 1 ) + { + var_dB *= 0.111f; + } + else + { + var_dB *= 0.1f; + } + + fdbck = (float) ( 0.82f / ( 1.0f + exp( 0.25f * ( var_dB - 20.0f ) ) ) ); + + for ( i = 0; i < 10; i++ ) + { + Gains[i] = (float) ( ( 1.0f - fdbck ) * Gains[i] + fdbck * hSC_VBR->nelp_gain_mem ); + hSC_VBR->nelp_gain_mem = Gains[i]; + } + + quantize_uvg( Gains, &iG1, iG2, Gains, (int16_t) st->bwidth ); + + if ( rf_flag ) + { + st->hRF->rf_indx_nelp_iG1[0] = (int16_t) iG1; + st->hRF->rf_indx_nelp_iG2[0][0] = (int16_t) iG2[0]; + st->hRF->rf_indx_nelp_iG2[0][1] = (int16_t) iG2[1]; + } + else + { + push_indice( hBstr, IND_IG1, iG1, 5 ); + push_indice( hBstr, IND_IG2A, iG2[0], 6 ); + push_indice( hBstr, IND_IG2B, iG2[1], 6 ); + } + + if ( st->bwidth == WB || st->bwidth == SWB ) + { + gain_fac = 1.16f; + } + else + { + gain_fac = 1.37f; + } + + generate_nelp_excitation( &( hSC_VBR->nelp_enc_seed ), Gains, ptr, gain_fac ); + + if ( st->bwidth == WB || st->bwidth == SWB ) + { + polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_wb, bp1_den_coef_wb, 4, hSC_VBR->bp1_filt_mem_wb ); + mvr2r( ptr_tmp, ptr, L_FRAME ); + } + else if ( st->bwidth == NB ) + { + polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_nb_fx_order7, bp1_den_coef_nb_fx_order7, 7, hSC_VBR->bp1_filt_mem_nb ); + mvr2r( ptr_tmp, ptr, L_FRAME ); + } + + for ( i = 0, E3 = 0.001f; i < L_FRAME; i++ ) + { + E3 += SQR( ptr[i] ); + } + + if ( st->bwidth == WB || st->bwidth == SWB ) + { + polezero_filter( ptr, ptr_tmp, L_FRAME, shape1_num_coef, shape1_den_coef, 10, hSC_VBR->shape1_filt_mem ); + mvr2r( ptr_tmp, ptr, L_FRAME ); + + for ( i = 0, E2 = 0.001f; i < L_FRAME; i++ ) + { + E2 += SQR( ptr[i] ); + } + + R = (float) sqrt( E1 / E2 ); + + for ( i = 0; i < L_FRAME; i++ ) + { + filtRes[i] = R * ptr[i]; + } + + polezero_filter( filtRes, ptr_tmp, L_FRAME, txlpf1_num_coef, txlpf1_den_coef, 10, hSC_VBR->txlpf1_filt2_mem ); + mvr2r( ptr_tmp, filtRes, L_FRAME ); + + for ( i = 0, EL2 = 0.001f; i < L_FRAME; i++ ) + { + EL2 += SQR( filtRes[i] ); + } + + for ( i = 0; i < L_FRAME; i++ ) + { + filtRes[i] = R * ptr[i]; + } + + polezero_filter( filtRes, ptr_tmp, L_FRAME, txhpf1_num_coef, txhpf1_den_coef, 10, hSC_VBR->txhpf1_filt2_mem ); + mvr2r( ptr_tmp, filtRes, L_FRAME ); + + for ( i = 0, EH2 = 0.001f; i < L_FRAME; i++ ) + { + EH2 += SQR( filtRes[i] ); + } + + RL = (float) 10.0f * (float) log10( EL1 / EL2 ); + RH = (float) 10.0f * (float) log10( EH1 / EH2 ); + + fid = 0; + if ( RL < -3 ) + { + fid = 1; + } + else if ( RH < -3 ) + { + fid = 2; + } + + if ( rf_flag == 0 ) + { + + switch ( fid ) + { + case 1: + /* Update other filter memory */ + polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem ); + + /* filter the residual to desired shape */ + polezero_filter( ptr, ptr_tmp, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem ); + + mvr2r( ptr_tmp, ptr, L_FRAME ); + + break; + case 2: + /* Update other filter memory */ + polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem ); + + /* filter the residual to desired shape */ + polezero_filter( ptr, ptr_tmp, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem ); + + mvr2r( ptr_tmp, ptr, L_FRAME ); + + break; + default: + /* Update other filter memory */ + polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem ); + polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem ); + + break; + } + + for ( i = 0, E2 = 0.001f; i < L_FRAME; i++ ) + { + E2 += SQR( ptr[i] ); + } + + R = (float) sqrt( E3 / E2 ); + for ( i = 0; i < L_FRAME; i++ ) + { + ptr[i] *= R; + } + } + + if ( rf_flag ) + { + st->hRF->rf_indx_nelp_fid[0] = (int16_t) fid; + } + else + { + push_indice( hBstr, IND_NELP_FID, fid, 2 ); + } + } + + if ( rf_flag == 0 ) + { + for ( i = 0; i < L_FRAME; i++ ) + { + exc[i] = ptr[i]; + } + } + + return; +} diff --git a/lib_enc/nois_est.c b/lib_enc/nois_est.c new file mode 100644 index 0000000000..b8d551a738 --- /dev/null +++ b/lib_enc/nois_est.c @@ -0,0 +1,998 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define ALPHA 0.1f + +#define COR_MIN8 0.65f +#define COR_MAX8 0.7f +#define TH_PC8 14 +#define TH_EPS8 10.4f +#define TH_STA8 5.0e5f +#define K_8 0.0091f +#define C_8 0.3185f +#define ALPHA_MAX8 0.999f +#define THR_NCHAR8 1.0f + +#define COR_MIN16 0.52f +#define COR_MAX16 0.85f +#define TH_PC16 4 +#define TH_EPS16 1.6f +/* 10.0e5f causes problems with music - as the noise estimate starts to track the music */ +#define TH_STA16 3.5e5f +#define K_16 0.0245f +#define C_16 -0.235f +#define ALPHA_MAX16 0.99f +#define THR_NCHAR16 1.0f + +#define TH_PC 12 +#define TH_PRED 0.8f +#define THR_SPDIV 5 + +#define HC_CNT 20 /* limit for harm corr count */ +#define HC_CNT_SLOW 80 /* limit for harm corr count slow */ +#define BCKR_SLOW_UPDATE_SCALE 0.1f /* step size for slow bckr update */ + +#define HE_LT_THR1 10.0f +#define HE_LT_THR2 30.0f +#define HE_LT_CNT 30 + +/*-----------------------------------------------------------------* + * noise_est_init() + * + * Initialization of Noise estimator + *-----------------------------------------------------------------*/ + +void noise_est_init( + NOISE_EST_HANDLE hNoiseEst /* i/o: Noise estimation handle */ +) +{ + int16_t i; + + for ( i = 0; i < NB_BANDS; i++ ) + { + hNoiseEst->fr_bands1[i] = 1e-5f; + hNoiseEst->fr_bands2[i] = 1e-5f; + hNoiseEst->ave_enr2[i] = E_MIN; + + hNoiseEst->enrO[i] = E_MIN; + hNoiseEst->bckr[i] = E_MIN; + hNoiseEst->ave_enr[i] = E_MIN; + } + + hNoiseEst->totalNoise = 0.0f; + hNoiseEst->first_noise_updt = 0; + hNoiseEst->first_noise_updt_cnt = 0; + + hNoiseEst->aEn = 6; + hNoiseEst->aEn_inac_cnt = 0; + hNoiseEst->harm_cor_cnt = 0; + hNoiseEst->bg_cnt = 0; + hNoiseEst->lt_tn_track = 0.20f; + hNoiseEst->lt_tn_dist = 0.0f; + hNoiseEst->lt_Ellp_dist = 0.0f; + hNoiseEst->lt_haco_ev = 0.4f; + hNoiseEst->low_tn_track_cnt = 0; + + hNoiseEst->Etot_st_est = 20.0f; + hNoiseEst->Etot_sq_st_est = 400.0f; + + hNoiseEst->epsP_0_2_lp = 1.0f; + hNoiseEst->epsP_0_2_ad_lp = 0.0f; + hNoiseEst->epsP_2_16_lp = 1.0f; + hNoiseEst->epsP_2_16_lp2 = 1.0f; + hNoiseEst->epsP_2_16_dlp_lp = 0.0f; + hNoiseEst->epsP_2_16_dlp_lp2 = 0.0f; + hNoiseEst->lt_aEn_zero = 0.0f; + + /* Tonal detector */ + for ( i = 0; i < L_FFT / 2; i++ ) + { + hNoiseEst->old_S[i] = 1; + } + set_f( hNoiseEst->cor_map, 0, L_FFT / 2 ); + hNoiseEst->act_pred = 1; + hNoiseEst->noise_char = 0; + hNoiseEst->multi_harm_limit = THR_CORR; + + hNoiseEst->Etot_lp = 0.0f; + hNoiseEst->Etot_h = 0.0f; + hNoiseEst->Etot_l = 0.0f; + hNoiseEst->Etot_l_lp = 0.0f; + hNoiseEst->Etot_last = 0.0f; + hNoiseEst->Etot_v_h2 = 0.0f; + hNoiseEst->sign_dyn_lp = 0.0f; + + return; +} + + +/*-----------------------------------------------------------------* + * noise_est_pre() + * + * Track energy and signal dynamics + *-----------------------------------------------------------------*/ + +void noise_est_pre( + const float Etot, /* i : Energy of current frame */ + const int16_t ini_frame, /* i : Frame number (init) */ + NOISE_EST_HANDLE hNoiseEst, /* i/o: Noise estimation data handle*/ + const int16_t idchan, /* i : channel ID */ + const int16_t element_mode, /* i : element mode */ + const int16_t last_element_mode /* i : last element mode */ +) +{ + if ( ini_frame <= 1 || ( idchan == 1 && element_mode == IVAS_CPE_TD && last_element_mode == IVAS_CPE_DFT ) ) + { + hNoiseEst->Etot_lp = Etot; + hNoiseEst->Etot_h = Etot; + hNoiseEst->Etot_l = Etot; + hNoiseEst->Etot_l_lp = Etot; + hNoiseEst->Etot_last = Etot; + hNoiseEst->Etot_v_h2 = 0.0f; + hNoiseEst->sign_dyn_lp = 0.0f; + } + else + { + hNoiseEst->Etot_lp = 0.20f * Etot + 0.80f * hNoiseEst->Etot_lp; + hNoiseEst->Etot_h -= 0.04f; + if ( Etot > hNoiseEst->Etot_h ) + { + hNoiseEst->Etot_h = Etot; + } + hNoiseEst->Etot_l += 0.08f; + + /* Could even be higher but it also delays first entry to DTX */ + if ( hNoiseEst->harm_cor_cnt > 50 ) + { + if ( ini_frame < min( 150, MAX_FRAME_COUNTER - 1 ) && ( hNoiseEst->Etot_h - hNoiseEst->Etot_lp ) < 3.0f ) + { + hNoiseEst->Etot_l += min( 2, ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) * 0.1f ); + } + + /* Avoids large steps in short active segments */ + if ( hNoiseEst->Etot_last - hNoiseEst->Etot_l > HE_LT_THR2 && hNoiseEst->harm_cor_cnt > 250 ) + { + hNoiseEst->Etot_l += ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) * 0.02f; + } + else if ( ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) > HE_LT_THR1 ) + { + hNoiseEst->Etot_l += 0.08f; + } + } + + if ( Etot < hNoiseEst->Etot_l ) + { + hNoiseEst->Etot_l = Etot; + } + + if ( ini_frame < 100 && hNoiseEst->Etot_l < hNoiseEst->Etot_l_lp ) + { + hNoiseEst->Etot_l_lp = 0.1f * hNoiseEst->Etot_l + ( 1.0f - 0.1f ) * hNoiseEst->Etot_l_lp; + } + else if ( ( hNoiseEst->harm_cor_cnt > HE_LT_CNT && ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) > HE_LT_THR2 ) || ( hNoiseEst->harm_cor_cnt > HE_LT_CNT && ( ini_frame < 150 ) ) || ( ( hNoiseEst->Etot_l_lp - hNoiseEst->Etot_l ) > HE_LT_THR2 ) ) + { + hNoiseEst->Etot_l_lp = 0.03f * hNoiseEst->Etot_l + ( 1.0f - 0.03f ) * hNoiseEst->Etot_l_lp; + } + else + { + hNoiseEst->Etot_l_lp = 0.02f * hNoiseEst->Etot_l + ( 1.0f - 0.02f ) * hNoiseEst->Etot_l_lp; + } + + hNoiseEst->sign_dyn_lp = 0.1f * ( hNoiseEst->Etot_h - hNoiseEst->Etot_l ) + ( 1.0f - 0.1f ) * hNoiseEst->sign_dyn_lp; + } + + return; +} + + +/*-----------------------------------------------------------------* + * noise_est_down() + * + * Down-ward noise udatation routine + * Total Noise computation, relative frame Energy computation + * Noise energy update - here, the energy is updated only if it is + * decreasing to improve noise suppression. Otherwise, the noise + * update is done on noise-only frames and this decision is made in + * nois_est() later in this file. + *-----------------------------------------------------------------*/ + +void noise_est_down( + const float fr_bands[], /* i : per band input energy (contains 2 vectors) */ + float bckr[], /* i/o: per band background noise energy estimate */ + float tmpN[], /* o : temporary noise update */ + float enr[], /* o : averaged energy over both subframes */ + const int16_t min_band, /* i : minimum critical band */ + const int16_t max_band, /* i : maximum critical band */ + float *totalNoise, /* o : noise estimate over all critical bands */ + const float Etot, /* i : Energy of current frame */ + float *Etot_last, /* i/o: Energy of last frame */ + float *Etot_v_h2 /* i/o: Energy variaions of noise frames */ +) +{ + const float *pt1, *pt2; + int16_t i; + float Etot_v; + + /*-----------------------------------------------------------------* + * Estimate total noise energy + *-----------------------------------------------------------------*/ + + *totalNoise = 0.0f; + for ( i = min_band; i <= max_band; i++ ) + { + *totalNoise += bckr[i]; + } + *totalNoise = 10.0f * (float) log10( *totalNoise ); + + /*-----------------------------------------------------------------* + * Average energy per frame for each frequency band + *-----------------------------------------------------------------*/ + + pt1 = fr_bands; + pt2 = fr_bands + NB_BANDS; + + for ( i = 0; i < NB_BANDS; i++ ) + { + enr[i] = 0.5f * ( *pt1++ + *pt2++ ); + } + + /*-----------------------------------------------------------------* + * Background noise energy update + *-----------------------------------------------------------------*/ + + for ( i = 0; i < NB_BANDS; i++ ) + { + tmpN[i] = ( 1 - ALPHA ) * bckr[i] + ALPHA * enr[i]; + if ( tmpN[i] < bckr[i] ) + { + bckr[i] = tmpN[i]; /* Defend to increase noise estimate: keep as it is or decrease */ + } + } + + /*------------------------------------------------------------------* + * Energy variation update + *------------------------------------------------------------------*/ + + Etot_v = (float) fabs( *Etot_last - Etot ); + *Etot_v_h2 = ( 1.0f - 0.02f ) * *Etot_v_h2 + 0.02f * min( 3.0f, Etot_v ); + if ( *Etot_v_h2 < 0.1f ) + { + *Etot_v_h2 = 0.1f; + } + + return; +} + + +/*-----------------------------------------------------------------* + * noise_est() + * + * Noise energy estimation (noise energy is updated in case of noise-only frame) + *-----------------------------------------------------------------*/ + +void noise_est( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t old_pitch1, /* i : previous frame OL pitch[1] */ + const float tmpN[], /* i : temporary noise update */ + const float *epsP, /* i : LP prediction error energies */ + const float Etot, /* i : total channel E */ + const float relE, /* i : relative frame energy */ + const float corr_shift, /* i : normalized correlation correction */ + const float enr[], /* i : averaged energy over both subframes */ + float fr_bands[], /* i : spectrum per critical bands of the current frame*/ + float *cor_map_sum, /* o : sum of correlation map from mult-harm analysis */ + float *ncharX, /* o : noise character for sp/mus classifier */ + float *sp_div, /* o : spectral diversity feature */ + float *non_staX, /* o : non-stationarity for sp/mus classifier */ + int16_t *loc_harm, /* o : multi-harmonicity flag for UV classifier */ + const float *lf_E, /* i : per bin energy for low frequencies */ + int16_t *st_harm_cor_cnt, /* i/o: 1st harm correlation timer */ + const float Etot_l_lp, /* i : Smoothed low energy */ + float *sp_floor, /* o : noise floor estimate */ + float S_map[], /* o : short-term correlation map */ + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + FRONT_VAD_ENC_HANDLE hFrontVad, /* i/o: front-VAD handle */ + const int16_t ini_frame /* i : Frame number (init) */ +) +{ + int16_t i, tmp_pc, pc, spec_div, noise_char; + float alpha, th_eps, th_sta, non_sta, cor_min, cor_max; + float non_sta2, alpha2, sum_num, sum_den, *pt1, *pt2, ftemp, ftemp2, nchar_thr; + float updt_step, log_enr; + int16_t aE_bgd, sd1_bgd, bg_bgd2; + int16_t tn_ini; + float epsP_0_2, epsP_0_2_ad, epsP_0_2_ad_lp_max; + float epsP_2_16, epsP_2_16_dlp, epsP_2_16_dlp_max; + int16_t PAU, BG_1, NEW_POS_BG; + float haco_ev_max; + float Etot_l_lp_thr; + float comb_ahc_epsP, comb_hcm_epsP; + int16_t enr_bgd, cns_bgd, lp_bgd, ns_mask; + int16_t lt_haco_mask, bg_haco_mask; + int16_t SD_1, bg_bgd3, PD_1, PD_2, PD_3, PD_4, PD_5; + float tmp_enr, tmp_ave, tmp_ave2; + float non_staB; + float lim_Etot; + NOISE_EST_HANDLE hNoiseEst; + + /* Check if LR-VAD */ + if ( hFrontVad != NULL ) + { + hNoiseEst = hFrontVad->hNoiseEst; + } + else + { + hNoiseEst = st->hNoiseEst; + } + + /*-----------------------------------------------------------------* + * Initialization + *-----------------------------------------------------------------*/ + + if ( hFrontVad == NULL ) + { + if ( st->hSpMusClas != NULL ) + { + st->hSpMusClas->ener_RAT = 10.0f * (float) log10( mean( lf_E, 8 ) ); + st->hSpMusClas->ener_RAT /= ( Etot + 0.01f ); + + if ( st->hSpMusClas->ener_RAT < 0.0f ) + { + st->hSpMusClas->ener_RAT = 0.0f; + } + + if ( st->hSpMusClas->ener_RAT > 1.0 ) + { + st->hSpMusClas->ener_RAT = 1.0f; + } + } + } + + /*-----------------------------------------------------------------* + * Set the threshold for eps & non_sta based on input sampling rate + * The reason is that in case of 8kHz sampling input, there is nothing + * between 4kHz-6.4kHz. In noisy conditions, this makes a fast + * transition even in noise-only parts, hence producing a "higher + * order" spectral envelope => the epsP ratio is much less effective. + *-----------------------------------------------------------------*/ + + if ( st->input_bwidth != NB ) + { + /* WB input */ + th_eps = TH_EPS16; + th_sta = TH_STA16; + cor_min = COR_MIN16; + cor_max = COR_MAX16; + } + else + { + /* NB input */ + th_eps = TH_EPS8; + th_sta = TH_STA8; + cor_min = COR_MIN8; + cor_max = COR_MAX8; + } + + /*-----------------------------------------------------------------* + * Estimation of pitch stationarity + *-----------------------------------------------------------------*/ + + pc = (int16_t) ( abs( st->pitch[0] - old_pitch1 ) + abs( st->pitch[1] - st->pitch[0] ) ); + + if ( ( ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3.0f + corr_shift ) < cor_min ) + { + /* low correlation -> probably inactive signal */ + tmp_pc = TH_PC; + } + else + { + tmp_pc = pc; + } + + /*-----------------------------------------------------------------* + * Multi-harmonic analysis + *-----------------------------------------------------------------*/ + + if ( hFrontVad == NULL ) + { + if ( st->hSpMusClas != NULL ) + { + i = 0; + *loc_harm = multi_harm( st->Bin_E, hNoiseEst->old_S, hNoiseEst->cor_map, &hNoiseEst->multi_harm_limit, st->total_brate, st->bwidth, ( st->hGSCEnc != NULL ) ? &st->hGSCEnc->cor_strong_limit : &i, &st->hSpMusClas->mean_avr_dyn, &st->hSpMusClas->last_sw_dyn, cor_map_sum, sp_floor, S_map ); + } + } + + /*-----------------------------------------------------------------* + * Detection of frames with non-stationary spectral content + *-----------------------------------------------------------------*/ + + /* weighted sum of spectral changes per critical bands */ + sum_num = 0; + sum_den = 0; + + pt1 = fr_bands + 10; + pt2 = hNoiseEst->fr_bands2 + 10; + for ( i = 10; i <= st->max_band; i++ ) + { + if ( *pt1 > *pt2 ) + { + sum_num += *pt1 * *pt1 / *pt2; + sum_den += *pt1; + } + else + { + sum_num += *pt2 * *pt2 / *pt1; + sum_den += *pt2; + } + + pt1++; + pt2++; + } + + /* calculation of spectral diversity */ + if ( sum_num > THR_SPDIV * sum_den ) + { + spec_div = 1; + } + else + { + spec_div = 0; + } + + *sp_div = sum_num / ( sum_den + 1e-5f ); + + /*-----------------------------------------------------------------* + * Detection of frames with high energy content in high frequencies + *-----------------------------------------------------------------*/ + + /* calculation of energy in first 10 critical bands */ + ftemp = sum_f( &fr_bands[st->min_band], 10 - st->min_band ); + + /* calculation of energy in the rest of bands */ + ftemp2 = sum_f( &fr_bands[10], st->max_band - 10 + 1 ); + + if ( ncharX != NULL ) + { + *ncharX = ftemp2 / ( ftemp + 1e-5f ); + } + + if ( ftemp < 1e2 || ftemp2 < 1e2 ) + { + ftemp2 = 0; + } + else + { + ftemp2 /= ftemp; + } + + if ( hStereoClassif != NULL ) + { + if ( st->idchan == 0 ) + { + hStereoClassif->nchar_ch1 = ftemp2; + } + else + { + hStereoClassif->nchar_ch2 = ftemp2; + } + } + + if ( ftemp2 > 10 ) + { + ftemp2 = 10; + } + + /* update LT value of the final parameter */ + hNoiseEst->noise_char = M_ALPHA * hNoiseEst->noise_char + ( 1 - M_ALPHA ) * ftemp2; + + if ( st->input_bwidth == NB ) + { + nchar_thr = THR_NCHAR8; + } + else + { + nchar_thr = THR_NCHAR16; + } + + if ( hNoiseEst->noise_char > nchar_thr ) + { + noise_char = 1; + } + else + { + noise_char = 0; + } + + /* save the 2 last spectra per crit. bands for the future */ + mvr2r( hNoiseEst->fr_bands1, hNoiseEst->fr_bands2, NB_BANDS ); + mvr2r( fr_bands + NB_BANDS, hNoiseEst->fr_bands1, NB_BANDS ); + + /*-----------------------------------------------------------------* + * Non-stationarity estimation for each band (handicap high E frames in average computing) + *-----------------------------------------------------------------*/ + + /* set averaging factor */ + ftemp = relE; + if ( ftemp < 0.0f ) + { + ftemp = 0.0f; + } + + alpha = 0.064f * ftemp + 0.75f; + + if ( alpha > 0.999f ) + { + alpha = 0.999f; + } + + /* during significant attacks, replace LT energy by the */ + /* current energy - this will cause non_sta2 failures to occur in */ + /* different frames than non_sta failures */ + alpha2 = alpha; + if ( spec_div > 0 ) + { + alpha2 = 0.0f; + } + + /* calculate non-stationarity */ + non_sta = 1.0f; + non_sta2 = 1.0f; + *non_staX = 0.0f; + non_staB = 0.0f; + for ( i = st->min_band; i <= st->max_band; i++ ) + { + /* + 1.0f added to reduce sencitivity to non stationarity in low energies */ + tmp_enr = enr[i] + 1.0f; + if ( non_sta <= th_sta ) /* Just to limit the saturation */ + { + tmp_ave = hNoiseEst->ave_enr[i] + 1.0f; + if ( tmp_enr > tmp_ave ) + { + non_sta = non_sta * ( tmp_enr / tmp_ave ); /* non_stationarity measure */ + } + else + { + non_sta = non_sta * ( tmp_ave / tmp_enr ); /* non_stationarity measure */ + } + } + hNoiseEst->ave_enr[i] = alpha * hNoiseEst->ave_enr[i] + ( 1 - alpha ) * enr[i]; /* update long-term average */ + + /* calculation of another non-stationarity measure (following attacks) */ + if ( non_sta2 <= th_sta ) + { + tmp_ave2 = hNoiseEst->ave_enr2[i] + 1.0f; + if ( tmp_enr > tmp_ave2 ) + { + non_sta2 = non_sta2 * ( tmp_enr / tmp_ave2 ); + } + else + { + non_sta2 = non_sta2 * ( tmp_ave2 / tmp_enr ); + } + } + + hNoiseEst->ave_enr2[i] = alpha2 * hNoiseEst->ave_enr2[i] + ( 1 - alpha2 ) * enr[i]; + + /* calculate non-stationarity feature for speech/music classifier */ + if ( hFrontVad == NULL ) + { + if ( i >= START_BAND_SPMUS && i < NB_BANDS_SPMUS + START_BAND_SPMUS && st->hSpMusClas != NULL ) + { + log_enr = (float) log( enr[i] ); + if ( log_enr > st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS] ) + { + *non_staX += log_enr - st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS]; + } + else + { + *non_staX += st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS] - log_enr; + } + + st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS] = log_enr; + } + } + + /* calculate non-stationarity feature relative background */ + if ( ini_frame < 100 ) + { + /* During init don't include updates */ + if ( i >= 2 && i <= 16 ) + { + non_staB += (float) fabs( log( enr[i] + 1.0f ) - log( E_MIN + 1.0f ) ); + } + } + else + { + /* After init compare with background estimate */ + if ( i >= 2 && i <= 16 ) + { + non_staB += (float) fabs( log( enr[i] + 1.0f ) - log( hNoiseEst->bckr[i] + 1.0f ) ); + } + } + + if ( non_staB >= 128 ) + { + non_staB = MAX16B_FLT / 256.0f; + } + } + + if ( Etot < -5.0f ) + { + non_sta = 1.0f; + non_sta2 = 1.0f; + } + + lim_Etot = max( 20.0f, Etot ); + + if ( ini_frame < 150 ) + { + /* Allow use of quicker filter during init - if needed */ + hNoiseEst->Etot_st_est = 0.25f * lim_Etot + ( 1.0f - 0.25F ) * hNoiseEst->Etot_st_est; + hNoiseEst->Etot_sq_st_est = 0.25f * lim_Etot * lim_Etot + ( 1.0f - 0.25f ) * hNoiseEst->Etot_sq_st_est; + } + else + { + hNoiseEst->Etot_st_est = 0.25f * lim_Etot + ( 1.0f - 0.25f ) * hNoiseEst->Etot_st_est; + hNoiseEst->Etot_sq_st_est = 0.25f * lim_Etot * lim_Etot + ( 1.0f - 0.25f ) * hNoiseEst->Etot_sq_st_est; + } + + /*-----------------------------------------------------------------* + * Count frames since last correlation or harmonic event + *-----------------------------------------------------------------*/ + + if ( Etot > 0 && ( *loc_harm > 0 || 0.5f * ( st->voicing[0] + st->voicing[1] ) > 0.85f ) ) + { + hNoiseEst->harm_cor_cnt = 0; + } + else + { + hNoiseEst->harm_cor_cnt += 1; + } + + if ( hNoiseEst->harm_cor_cnt > 1 && ( ( Etot < 15.0f ) || ( ini_frame > 10 && ( Etot - hNoiseEst->Etot_lp ) > 7.0f ) ) ) + { + hNoiseEst->harm_cor_cnt = 1; + } + + if ( hNoiseEst->harm_cor_cnt > 1 && Etot > 30.0f && ( hNoiseEst->Etot_sq_st_est - hNoiseEst->Etot_st_est * hNoiseEst->Etot_st_est ) > 8.0f ) + { + hNoiseEst->harm_cor_cnt = max( 1, (int16_t) round_f( (float) hNoiseEst->harm_cor_cnt / 4.0f ) ); + } + + /*-----------------------------------------------------------------* + * Energy-based pause-length counter + *-----------------------------------------------------------------*/ + + if ( hNoiseEst->bg_cnt >= 0 && ( Etot - hNoiseEst->Etot_l_lp ) > 5 ) + { + /* probably speech burst */ + hNoiseEst->bg_cnt = -1; + } + else + { + if ( hNoiseEst->bg_cnt == -1 && ( Etot - hNoiseEst->Etot_l_lp ) < 5 ) + { + /* probably start of speech pause */ + hNoiseEst->bg_cnt = 0; + } + } + + if ( hNoiseEst->bg_cnt >= 0 ) + { + hNoiseEst->bg_cnt += 1; + } + + /*-----------------------------------------------------------------* + * Linear predition efficiency 0 to 2 order + *-----------------------------------------------------------------*/ + + epsP_0_2 = max( 0, min( 8, epsP[0] / epsP[2] ) ); + hNoiseEst->epsP_0_2_lp = 0.15f * epsP_0_2 + ( 1.0f - 0.15f ) * hNoiseEst->epsP_0_2_lp; + epsP_0_2_ad = (float) fabs( epsP_0_2 - hNoiseEst->epsP_0_2_lp ); + if ( epsP_0_2_ad < hNoiseEst->epsP_0_2_ad_lp ) + { + hNoiseEst->epsP_0_2_ad_lp = 0.1f * epsP_0_2_ad + ( 1.0f - 0.1f ) * hNoiseEst->epsP_0_2_ad_lp; + } + else + { + hNoiseEst->epsP_0_2_ad_lp = 0.2f * epsP_0_2_ad + ( 1.0f - 0.2f ) * hNoiseEst->epsP_0_2_ad_lp; + } + epsP_0_2_ad_lp_max = max( epsP_0_2_ad, hNoiseEst->epsP_0_2_ad_lp ); + + /*-----------------------------------------------------------------* + * Linear predition efficiency 2 to 16 order + *-----------------------------------------------------------------*/ + + epsP_2_16 = max( 0, min( 8, epsP[2] / epsP[16] ) ); + if ( epsP_2_16 > hNoiseEst->epsP_2_16_lp ) + { + hNoiseEst->epsP_2_16_lp = 0.2f * epsP_2_16 + ( 1.0f - 0.2f ) * hNoiseEst->epsP_2_16_lp; + } + else + { + hNoiseEst->epsP_2_16_lp = 0.03f * epsP_2_16 + ( 1.0f - 0.03f ) * hNoiseEst->epsP_2_16_lp; + } + hNoiseEst->epsP_2_16_lp2 = 0.02f * epsP_2_16 + ( 1.0f - 0.02f ) * hNoiseEst->epsP_2_16_lp2; + + epsP_2_16_dlp = hNoiseEst->epsP_2_16_lp - hNoiseEst->epsP_2_16_lp2; + + if ( epsP_2_16_dlp < hNoiseEst->epsP_2_16_dlp_lp2 ) + { + hNoiseEst->epsP_2_16_dlp_lp2 = 0.02f * epsP_2_16_dlp + ( 1.0f - 0.02f ) * hNoiseEst->epsP_2_16_dlp_lp2; + } + else + { + hNoiseEst->epsP_2_16_dlp_lp2 = 0.05f * epsP_2_16_dlp + ( 1.0f - 0.05f ) * hNoiseEst->epsP_2_16_dlp_lp2; + } + + epsP_2_16_dlp_max = max( epsP_2_16_dlp, hNoiseEst->epsP_2_16_dlp_lp2 ); + + /*-----------------------------------------------------------------* + * long term extensions of frame features + *-----------------------------------------------------------------*/ + + hNoiseEst->lt_tn_track = 0.03f * ( Etot - hNoiseEst->totalNoise < 10 ) + 0.97f * hNoiseEst->lt_tn_track; + hNoiseEst->lt_tn_dist = 0.03f * ( Etot - hNoiseEst->totalNoise ) + 0.97f * hNoiseEst->lt_tn_dist; + hNoiseEst->lt_Ellp_dist = 0.03f * ( Etot - hNoiseEst->Etot_l_lp ) + 0.97f * hNoiseEst->lt_Ellp_dist; + + if ( hNoiseEst->harm_cor_cnt == 0 ) + { + hNoiseEst->lt_haco_ev = 0.03f + 0.97f * hNoiseEst->lt_haco_ev; + } + else + { + hNoiseEst->lt_haco_ev = 0.99f * hNoiseEst->lt_haco_ev; + } + + if ( hNoiseEst->lt_tn_track < 0.05f ) + { + hNoiseEst->low_tn_track_cnt++; + } + else + { + hNoiseEst->low_tn_track_cnt = 0; + } + + + /* update of the long-term non-stationarity measure (between 0 and 1) */ + if ( ( non_sta > th_sta ) || ( *loc_harm > 0 ) ) + { + hNoiseEst->act_pred = M_GAMMA * hNoiseEst->act_pred + ( 1 - M_GAMMA ) * 1; + } + else + { + hNoiseEst->act_pred = M_GAMMA * hNoiseEst->act_pred + ( 1 - M_GAMMA ) * 0; + } + + /*-----------------------------------------------------------------* + * Increment/decrement counter for enabling background noise update + *-----------------------------------------------------------------*/ + + if ( ( ( *st_harm_cor_cnt < 3 * HC_CNT_SLOW ) && ( ( non_sta > th_sta ) || + ( tmp_pc < TH_PC ) || + ( noise_char > 0 ) ) ) || + ( ( ini_frame > 150 ) && ( Etot - Etot_l_lp ) > 10 ) || + ( 0.5f * ( st->voicing[0] + st->voicing[1] ) > cor_max ) || + ( epsP[2] / epsP[16] > th_eps ) || + ( *loc_harm > 0 ) || + ( ( hNoiseEst->act_pred > 0.8f ) && ( non_sta2 > th_sta ) ) ) + + { + /* active signal present - increment counter */ + hNoiseEst->aEn = hNoiseEst->aEn + 2; + } + else + { + /* background noise present - decrement counter */ + hNoiseEst->aEn = hNoiseEst->aEn - 1; + } + + if ( hNoiseEst->aEn > 6 ) + { + hNoiseEst->aEn = 6; + } + else if ( hNoiseEst->aEn < 0 ) + { + hNoiseEst->aEn = 0; + } + + if ( hNoiseEst->aEn <= 1 ) + { + hNoiseEst->aEn_inac_cnt++; + hNoiseEst->aEn_inac_cnt = min( hNoiseEst->aEn_inac_cnt, 128 ); + } + + /*-----------------------------------------------------------------* + * Stereo classifier - save raw aEn + *-----------------------------------------------------------------*/ + + if ( hStereoClassif != NULL ) + { + if ( ( non_sta > th_sta ) || + ( tmp_pc < TH_PC ) || + ( 0.5f * ( st->voicing[0] + st->voicing[1] ) > cor_max ) || + ( epsP[2] / epsP[16] > th_eps ) || + ( ( hNoiseEst->act_pred > 0.8f ) && ( non_sta2 > th_sta ) ) ) + { + /* active signal present - increment counter */ + hStereoClassif->aEn_raw[st->idchan] = hStereoClassif->aEn_raw[st->idchan] + 2; + } + else + { + /* background noise present - decrement counter */ + hStereoClassif->aEn_raw[st->idchan] = hStereoClassif->aEn_raw[st->idchan] - 1; + } + + if ( hStereoClassif->aEn_raw[st->idchan] > 6 ) + { + hStereoClassif->aEn_raw[st->idchan] = 6; + } + else if ( hStereoClassif->aEn_raw[st->idchan] < 0 ) + { + hStereoClassif->aEn_raw[st->idchan] = 0; + } + } + + /*--------------------------------------------------------------* + * Background noise update + * (bckr[] has been already updated downwards in nois_est_down()) + *--------------------------------------------------------------*/ + + /* Additional detectors */ + comb_ahc_epsP = max( max( hNoiseEst->act_pred, hNoiseEst->lt_haco_ev ), epsP_2_16_dlp ); + comb_hcm_epsP = max( max( hNoiseEst->lt_haco_ev, epsP_2_16_dlp_max ), epsP_0_2_ad_lp_max ); + + haco_ev_max = max( *st_harm_cor_cnt == 0, hNoiseEst->lt_haco_ev ); + Etot_l_lp_thr = hNoiseEst->Etot_l_lp + ( 1.5f + 1.5f * ( hNoiseEst->Etot_lp < 50.0f ) ) * hNoiseEst->Etot_v_h2; + + enr_bgd = Etot < Etot_l_lp_thr; + cns_bgd = ( epsP_0_2 > 7.95f ) && ( non_sta < 1e3f ); + lp_bgd = epsP_2_16_dlp_max < 0.10f; + ns_mask = non_sta < 1e5f; + lt_haco_mask = hNoiseEst->lt_haco_ev < 0.5f; + bg_haco_mask = haco_ev_max < 0.4f; + + SD_1 = ( ( epsP_0_2_ad > 0.5f ) && ( epsP_0_2 > 7.95f ) ); + + bg_bgd3 = enr_bgd || ( ( cns_bgd || lp_bgd ) && ns_mask && lt_haco_mask && SD_1 == 0 ); + + PD_1 = ( epsP_2_16_dlp_max < 0.10f ); + PD_2 = ( epsP_0_2_ad_lp_max < 0.10f ); + PD_3 = ( comb_ahc_epsP < 0.85f ); + PD_4 = comb_ahc_epsP < 0.15f; + PD_5 = comb_hcm_epsP < 0.30f; + + BG_1 = ( ( SD_1 == 0 ) || ( Etot < Etot_l_lp_thr ) ) && bg_haco_mask && ( hNoiseEst->act_pred < 0.85f ) && ( hNoiseEst->Etot_lp < 50.0f ); + + PAU = ( hNoiseEst->aEn == 0 ) || ( ( Etot < 55.0f ) && ( SD_1 == 0 ) && ( ( PD_3 && ( PD_1 || PD_2 ) ) || ( PD_4 || PD_5 ) ) ); + + NEW_POS_BG = ( PAU | BG_1 ) & bg_bgd3; + + /* Original silence detector works in most cases */ + aE_bgd = hNoiseEst->aEn == 0; + + /* When the signal dynamics is high and the energy is close to the background estimate */ + sd1_bgd = ( hNoiseEst->sign_dyn_lp > 15 ) && ( Etot - hNoiseEst->Etot_l_lp ) < 2 * hNoiseEst->Etot_v_h2 && hNoiseEst->harm_cor_cnt > 20; + + /* init conditions steadily dropping act_pred and/or lt_haco_ev */ + tn_ini = ini_frame < 150 && hNoiseEst->harm_cor_cnt > 5 && + ( Etot - hNoiseEst->Etot_lp ) < 7 && + ( ( hNoiseEst->act_pred < 0.59f && hNoiseEst->lt_haco_ev < 0.23f ) || + hNoiseEst->act_pred < 0.38f || + ( ( st->element_mode == EVS_MONO && hNoiseEst->lt_haco_ev < 0.15f ) || ( st->element_mode > EVS_MONO && hNoiseEst->lt_haco_ev < 0.08f ) ) || + non_staB < 50.0f || + aE_bgd || ( Etot < 42.0f && hNoiseEst->harm_cor_cnt > 10 && hNoiseEst->lt_haco_ev < 0.35f && hNoiseEst->act_pred < 0.8f ) ); + + /* Energy close to the background estimate serves as a mask for other background detectors */ + bg_bgd2 = Etot < Etot_l_lp_thr || tn_ini; + + updt_step = 0.0f; + if ( ( bg_bgd2 && ( aE_bgd || sd1_bgd || hNoiseEst->lt_tn_track > 0.90f || NEW_POS_BG ) ) || tn_ini ) + { + if ( ( ( hNoiseEst->act_pred < 0.85f ) && + aE_bgd && + ( hNoiseEst->lt_Ellp_dist < 10 || sd1_bgd ) && hNoiseEst->lt_tn_dist < 40 && + ( ( Etot - hNoiseEst->totalNoise ) < 10.0f ) ) || + ( hNoiseEst->first_noise_updt == 0 && hNoiseEst->harm_cor_cnt > 80 && aE_bgd && hNoiseEst->lt_aEn_zero > 0.5f ) || + ( tn_ini && ( aE_bgd || non_staB < 10.0 || hNoiseEst->harm_cor_cnt > 80 ) ) ) + { + updt_step = 1.0f; + hNoiseEst->first_noise_updt = 1; + for ( i = 0; i < NB_BANDS; i++ ) + { + hNoiseEst->bckr[i] = tmpN[i]; + } + } + else if ( ( ( hNoiseEst->act_pred < 0.80f ) && ( aE_bgd || PAU ) && hNoiseEst->lt_haco_ev < 0.10f ) || ( ( hNoiseEst->act_pred < 0.70f ) && ( aE_bgd || non_staB < 17.0f ) && PAU && hNoiseEst->lt_haco_ev < 0.15f ) || ( hNoiseEst->harm_cor_cnt > 80 && hNoiseEst->totalNoise > 5.0f && Etot < max( 1.0f, Etot_l_lp + 1.5f * hNoiseEst->Etot_v_h2 ) ) || ( hNoiseEst->harm_cor_cnt > 50 && hNoiseEst->first_noise_updt > 30 && aE_bgd && hNoiseEst->lt_aEn_zero > 0.5f ) || tn_ini ) + { + updt_step = 0.1f; + if ( !aE_bgd && + hNoiseEst->harm_cor_cnt < 50 && + ( hNoiseEst->act_pred > 0.6f || + ( !tn_ini && Etot_l_lp - hNoiseEst->totalNoise < 10.0f && non_staB > 8.0f ) ) ) + { + updt_step = 0.01f; + } + + hNoiseEst->first_noise_updt = 1; + for ( i = 0; i < NB_BANDS; i++ ) + { + hNoiseEst->bckr[i] = hNoiseEst->bckr[i] + updt_step * ( tmpN[i] - hNoiseEst->bckr[i] ); + } + } + else if ( aE_bgd || hNoiseEst->harm_cor_cnt > 100 ) + { + hNoiseEst->first_noise_updt += 1; + } + } + else + { + /* If in music decrease bckr[] to drop further */ + if ( hNoiseEst->low_tn_track_cnt > 300 && hNoiseEst->lt_haco_ev > 0.9f && hNoiseEst->totalNoise > 0.0f ) + { + updt_step = -0.02f; + for ( i = 0; i < NB_BANDS; i++ ) + { + if ( hNoiseEst->bckr[i] > 2 * E_MIN ) + { + hNoiseEst->bckr[i] = 0.98f * hNoiseEst->bckr[i]; + } + } + } + } + hNoiseEst->lt_aEn_zero = 0.2f * ( hNoiseEst->aEn == 0 ) + ( 1 - 0.2f ) * hNoiseEst->lt_aEn_zero; + + if ( st->element_mode > EVS_MONO ) + { + if ( hNoiseEst->first_noise_updt > 0 && hNoiseEst->first_noise_updt_cnt < 100 ) + { + hNoiseEst->first_noise_updt_cnt++; + } + } + + return; +} diff --git a/lib_enc/noise_adjust.c b/lib_enc/noise_adjust.c new file mode 100644 index 0000000000..5d592d071b --- /dev/null +++ b/lib_enc/noise_adjust.c @@ -0,0 +1,119 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * noise_adjust() + * + * Calculate attenuation + *--------------------------------------------------------------------------*/ + +/*! r: index of noise attenuation */ +int16_t noise_adjust( + const float *coeffs_norm, /* i : normalized coefficients */ + const int16_t *bitalloc, /* i : bit allocation */ + const int16_t *sfm_start, + const int16_t *sfm_end, + const int16_t core_sfm /* i : index of the end band for core */ +) +{ + int16_t nf_idx, sfm, bin, num_coeffs; + int16_t E, diff, tmp; + + E = 0; + num_coeffs = 0; + + for ( sfm = 0; sfm <= core_sfm; sfm++ ) + { + if ( bitalloc[sfm] == 0 ) + { + for ( bin = sfm_start[sfm]; bin < sfm_end[sfm]; bin++ ) + { + if ( coeffs_norm[bin] == 0 ) + { + E = E - 1; + } + else + { + tmp = (int16_t) ( floor( log10( fabs( coeffs_norm[bin] * L_FRAME ) ) / 0.301030f ) + 1 ); + if ( tmp < 0 ) + { + tmp = 0; + } + E = E + tmp; + } + + num_coeffs = num_coeffs + 1; + } + } + } + + if ( num_coeffs != 0 ) + { + E = E / num_coeffs; + } + else + { + E = 0; + } + + diff = 7 - E; + + if ( diff >= 0 ) + { + nf_idx = (int16_t) diff; + if ( diff > 3 ) + { + nf_idx = 3; + } + } + else + { + nf_idx = 0; + } + + return nf_idx; +} diff --git a/lib_enc/normalizecoefs.c b/lib_enc/normalizecoefs.c new file mode 100644 index 0000000000..7e039f171e --- /dev/null +++ b/lib_enc/normalizecoefs.c @@ -0,0 +1,74 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------- + * normalizecoefs() + * + * Normalize MDCT coefficients with quantized norms + *--------------------------------------------------------------------------*/ + +void normalizecoefs( + float *coefs, /* i/o: MDCT coefficients */ + const int16_t *ynrm, /* i : quantization indices for norms */ + const int16_t num_bands, /* i : Number of bands */ + const int16_t *band_start, /* i : Start of bands */ + const int16_t *band_end /* i : End of bands */ +) +{ + int16_t i, band; + float normq; + + for ( band = 0; band < num_bands; band++ ) + { + normq = dicn_inv[ynrm[band]]; + + for ( i = band_start[band]; i < band_end[band]; i++ ) + { + coefs[i] *= normq; + } + } + + return; +} diff --git a/lib_enc/peak_vq_enc.c b/lib_enc/peak_vq_enc.c new file mode 100644 index 0000000000..a77f071112 --- /dev/null +++ b/lib_enc/peak_vq_enc.c @@ -0,0 +1,663 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" +#include + +/*-------------------------------------------------------------------------- + * Local function prototypes + *--------------------------------------------------------------------------*/ + +static void quant_peaks( BSTR_ENC_HANDLE hBstr, const float *vect_in, float *vect_out, const float *peak_gain, int16_t *vq_idx, const int16_t overlap, const int32_t core_brate, const int16_t Npeaks ); + +static int16_t hvq_code_pos( BSTR_ENC_HANDLE hBstr, const int16_t *const inp, const int16_t length, const int16_t num_peaks ); + +static int16_t sparse_code_pos( const int16_t *inp, const int16_t length, int16_t *result ); + + +/*-------------------------------------------------------------------------- + * peak_vq_enc() + * + * Vector Quantization of MDCT peaks + *--------------------------------------------------------------------------*/ + +int16_t peak_vq_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t bwidth, /* i : audio bandwidth */ +#ifdef DEBUGGING + const int16_t idchan, /* i : channel ID */ +#endif + const float *coefs, /* i : Input coefficient vector */ + float *coefs_out, /* o : Quantized output vector */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t num_bits, /* i : Number of bits for HVQ */ + const int16_t vq_peaks, /* i : Number of identified peaks */ + const int16_t *ynrm, /* i : Envelope coefficients */ + int16_t *R, /* i/o: Bit allocation/updated bit allocation */ + int16_t *vq_peak_idx, /* i : Peak index vector */ + float *nf_gains /* i : Estimated noise floor gains */ +) +{ + int16_t pos_bits; + float normq; + float pgain_q[HVQ_MAX_PEAKS]; + float peak_gains[HVQ_MAX_PEAKS]; + float coefs_pvq[HVQ_PVQ_BUF_LEN]; + float pvq_vector[HVQ_PVQ_BUF_LEN]; + float *pPvqVectorBandStart; + float fg_pred[NB_SFM_MAX]; + int16_t i, j, k, m, r, pvq_bands, num_overlap_bins; + int16_t hcode_l, FlagN, low_peak_bin, vq_cb_idx, max_peaks, bin_th; + int16_t bits = 0; + int16_t q_nf_gain_idx[HVQ_NF_GROUPS]; + int16_t nf_seed = RANDOM_INITSEED; + int16_t pgain_cb_idx[HVQ_MAX_PEAKS], pgain_difidx[HVQ_MAX_PEAKS]; + int16_t pvq_norm[MAX_PVQ_BANDS]; + int16_t pvq_bits, bit_budget; + int16_t pos_vec[HVQ_THRES_BIN_32k]; + int16_t npulses[MAX_PVQ_BANDS]; + int16_t pvq_inp_vector[HVQ_PVQ_BUF_LEN]; + int16_t k_sort[MAX_PVQ_BANDS]; + int16_t Rk[MAX_PVQ_BANDS]; + int16_t Rk_f[MAX_PVQ_BANDS]; /*Q3*/ + float gopt[NB_SFM]; + int16_t sel_bnds[HVQ_NUM_SFM_24k]; + int16_t n_sel_bnds; + int32_t manE_peak, manPkEnrg; + int16_t expE_peak, expPkEnrg; + int16_t hvq_band_end[MAX_PVQ_BANDS]; + int16_t hvq_band_start[MAX_PVQ_BANDS]; + int16_t hvq_band_width[MAX_PVQ_BANDS]; + int16_t n; + int16_t s; + set_f( coefs_pvq, 0.0f, HVQ_PVQ_BUF_LEN ); + set_f( pvq_vector, 0.0f, HVQ_PVQ_BUF_LEN ); + set_s( npulses, 0, MAX_PVQ_BANDS ); + + /* Set bitrate dependent variables */ + assert( ( core_brate > HQ_16k40 && core_brate <= HQ_48k ) && "HVQ rate not supported" ); + max_peaks = (int16_t) ( ( core_brate * HVQ_PEAKS_PER_DELTA + HVQ_PEAKS_PER_DELTA_OFFS ) / HVQ_PEAKS_BPS_DELTA ); + bin_th = HVQ_THRES_BIN_24k; + if ( core_brate >= HQ_BWE_CROSSOVER_BRATE ) + { + bin_th = HVQ_THRES_BIN_32k; + } + + for ( i = 0; i < bin_th; i++ ) + { + pos_vec[i] = 0; + } + + /* Quantize noise floor gains */ + for ( i = 0; i < HVQ_NF_GROUPS; i++ ) + { + logqnorm( &nf_gains[i], &q_nf_gain_idx[i], 32, 1, &thren_HQ[0] ); + nf_gains[i] = 0.5f * dicn[q_nf_gain_idx[i]]; + push_indice( hBstr, IND_HVQ_NF_GAIN, q_nf_gain_idx[i], 5 ); + bits += 5; + } + + /* Signal number of peaks */ + i = max_peaks - vq_peaks; + push_indice( hBstr, IND_NUM_PEAKS, i, 5 ); + bits += 5; + + /* Identify position of first peak and arrange peak gains by position */ + low_peak_bin = bin_th; + for ( i = 0; i < vq_peaks; i++ ) + { + if ( vq_peak_idx[i] < low_peak_bin ) + { + low_peak_bin = vq_peak_idx[i]; + } + pos_vec[vq_peak_idx[i]] = (int16_t) sign( (float) coefs[vq_peak_idx[i]] ); + } + + for ( i = 0, j = 0; i < bin_th; i++ ) + { + if ( pos_vec[i] != 0 ) + { + peak_gains[j] = (float) fabs( coefs[i] ); + vq_peak_idx[j] = i; + j++; + } + } + + /* Scale down peak gains */ + for ( i = 0; i < vq_peaks; i++ ) + { + peak_gains[i] *= 0.25f; + } + + /* Quantize peak gains */ + logqnorm( &peak_gains[0], &pgain_cb_idx[0], 32, 1, &thren_pg[0] ); + for ( i = 1; i < vq_peaks; i++ ) + { + logqnorm( &peak_gains[i], &pgain_cb_idx[i], 45, 1, &thren_pg[0] ); + } + + /* Code quantized peak gain indices */ + diffcod( vq_peaks, pgain_cb_idx, &pgain_difidx[1] ); + for ( i = 0; i < vq_peaks; i++ ) + { + pgain_q[i] = dicn_pg[pgain_cb_idx[i]]; + } + pgain_difidx[0] = pgain_cb_idx[0]; + + /* Scale up peak gains and accumulate peak energy */ + manE_peak = 0; + expE_peak = 32; + for ( i = 0; i < vq_peaks; i++ ) + { + pgain_q[i] *= 4.0f; + manPkEnrg = manPkEnrg_tbl[pgain_cb_idx[i]]; + expPkEnrg = expPkEnrg_tbl[pgain_cb_idx[i]]; + floating_point_add( &manE_peak, &expE_peak, manPkEnrg, expPkEnrg ); + } + + /* Huffman coding */ + hcode_l = 0; + for ( i = 1; i < vq_peaks; i++ ) + { + hcode_l += pgain_huffsizn[pgain_difidx[i]]; + } + + FlagN = HUFCODE; + + if ( hcode_l >= GAINI_BITS * ( vq_peaks - 1 ) ) + { + hcode_l = GAINI_BITS * ( vq_peaks - 1 ); + FlagN = NOHUFCODE; + } + + push_indice( hBstr, IND_FLAGN, FlagN, 1 ); + push_indice( hBstr, IND_PG_IDX, pgain_difidx[0], GAIN0_BITS ); + + if ( FlagN ) + { + for ( i = 1; i < vq_peaks; i++ ) + { + j = pgain_difidx[i]; + m = pgain_huffnorm[j]; + r = pgain_huffsizn[j]; + + push_indice( hBstr, IND_PG_IDX, m, r ); + } + } + else + { + for ( i = 1; i < vq_peaks; i++ ) + { + push_indice( hBstr, IND_PG_IDX, pgain_difidx[i], GAINI_BITS ); + } + } + + /* Number of bits used for peak gain quantization */ + bits += FLAGN_BITS + GAIN0_BITS + hcode_l; + + /* Add sign for peak shape normalization */ + for ( i = 0; i < vq_peaks; i++ ) + { + peak_gains[i] = pos_vec[vq_peak_idx[i]] * pgain_q[i]; + } + + /* Quantize peak shapes */ + for ( i = 0; i < vq_peaks - 1; i++ ) + { + num_overlap_bins = 5 - ( vq_peak_idx[i + 1] - vq_peak_idx[i] ); + quant_peaks( hBstr, &coefs[vq_peak_idx[i] - 2], &coefs_out[vq_peak_idx[i] - 2], &peak_gains[i], &vq_cb_idx, num_overlap_bins, core_brate, vq_peaks ); + push_indice( hBstr, IND_HVQ_PEAKS, vq_cb_idx, 8 ); + bits += 9; + } + + quant_peaks( hBstr, &coefs[vq_peak_idx[i] - 2], &coefs_out[vq_peak_idx[i] - 2], &peak_gains[i], &vq_cb_idx, 0, core_brate, vq_peaks ); + push_indice( hBstr, IND_HVQ_PEAKS, vq_cb_idx, 8 ); + bits += 9; + + pos_bits = hvq_code_pos( hBstr, pos_vec, bin_th, vq_peaks ); + + bits += pos_bits; + bit_budget = num_bits - bits; + + /* Calculate number of PVQ bands to code and assign bits */ + pvq_bands = hvq_pvq_bitalloc( bit_budget, core_brate, bwidth, ynrm, manE_peak, expE_peak, Rk, R, sel_bnds, &n_sel_bnds ); + + /* Get band limits for concatenated PVQ target */ + hvq_concat_bands( pvq_bands, sel_bnds, n_sel_bnds, hvq_band_start, hvq_band_width, hvq_band_end ); + + /* Quantize PVQ bands */ + i = 0; + n = 0; + s = 0; + for ( k = 0; k < pvq_bands; k++ ) + { + if ( k >= pvq_bands - n_sel_bnds ) + { + i = band_start_harm[sel_bnds[s]]; + s++; + } + k_sort[k] = k; + j = 0; + pPvqVectorBandStart = &pvq_vector[n]; + while ( j < hvq_band_width[k] ) + { + if ( coefs_out[i] == 0 ) + { + pvq_vector[n] = coefs[i]; + j++; + n++; + } + i++; + } + logqnorm( pPvqVectorBandStart, &pvq_norm[k], 40, hvq_band_width[k], &thren_HQ[0] ); + } + + normalizecoefs( pvq_vector, pvq_norm, pvq_bands, hvq_band_start, hvq_band_end ); + + bit_budget -= HVQ_PVQ_GAIN_BITS * pvq_bands; + for ( k = 0; k < pvq_bands; k++ ) + { + Rk_f[k] = Rk[k] * 8; + } + + pvq_bits = bit_budget; + set_s( npulses, 0, MAX_PVQ_BANDS ); + + pvq_encode_frame( hBstr, pvq_vector, coefs_pvq, gopt, npulses, pvq_inp_vector, hvq_band_start, hvq_band_end, hvq_band_width, pvq_bands, Rk_f, pvq_bits, HQ_CORE ); + + for ( i = 0; i < pvq_bands; i++ ) + { + k_sort[i] = i; + } + +#ifdef DEBUGGING + /* SNR measurement */ + for ( i = 0; i < pvq_bands; i++ ) + { + float diff[120]; + + if ( npulses[i] > 0 ) + { + for ( j = 0; j < hvq_band_width[i]; j++ ) + { + diff[j] = pvq_vector[hvq_band_start[i] + j] - gopt[i] * coefs_pvq[hvq_band_start[i] + j]; + } + + if ( idchan == 0 ) + { + snr( &pvq_vector[hvq_band_start[i]], diff, hvq_band_width[i], "HVQ_PVQ_output" ); + } + else + { + snr( &pvq_vector[hvq_band_start[i]], diff, hvq_band_width[i], "HVQ_PVQ_output_chan2" ); + } + } + } +#endif + + fine_gain_pred( hvq_band_start, hvq_band_end, hvq_band_width, k_sort, npulses, NULL, NULL, pvq_bands, coefs_pvq, pvq_inp_vector, fg_pred, HQ_CORE ); + + i = 0; + n = 0; + s = 0; + for ( k = 0; k < pvq_bands; k++ ) + { + normq = dicn[pvq_norm[k]] * ( gopt[k] / fg_pred[k] ); + + logqnorm( &normq, &pvq_norm[k], 40, 1, &thren_HQ[0] ); + pvq_norm[k] -= 8; + if ( pvq_norm[k] < 0 ) + { + pvq_norm[k] = 0; + } + + push_indice( hBstr, IND_HVQ_PVQ_GAIN, pvq_norm[k], HVQ_PVQ_GAIN_BITS ); + pvq_bits += HVQ_PVQ_GAIN_BITS; + + pvq_norm[k] += 8; + j = 0; + if ( k >= pvq_bands - n_sel_bnds ) + { + i = band_start_harm[sel_bnds[s++]]; + } + while ( j < hvq_band_width[k] ) + { + normq = dicn[pvq_norm[k]]; + if ( coefs_out[i] == 0 ) + { + coefs_out[i] = coefs_pvq[n] * fg_pred[k]; + coefs_out[i] = coefs_out[i] * normq; + j++; + n++; + } + i++; + } + } + + bits += pvq_bits; + + /* Noise fill unquantized coeffs with one gain per group */ + for ( i = 0; i < HVQ_NF_GROUPS; i++ ) + { + for ( j = i * ( bin_th / HVQ_NF_GROUPS ); j < ( i + 1 ) * ( bin_th / HVQ_NF_GROUPS ); j++ ) + { + if ( coefs_out[j] == 0 ) + { + coefs_out[j] = ( (float) own_random( &nf_seed ) / MAX16B ) * nf_gains[i]; + } + } + } + + return bits; +} + +/*-------------------------------------------------------------------------- + * quant_peaks() + * + * Applies VQ on input vector + *--------------------------------------------------------------------------*/ + +static void quant_peaks( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *vect_in, /* i : Target vector */ + float *vect_out, /* i/o: Quantized vector */ + const float *peak_gain, /* i : Peak gain vector */ + int16_t *vq_idx, /* o : Codebook index */ + const int16_t overlap, /* i : Overlap indicator */ + const int32_t core_brate, /* i : Core bitrate */ + const int16_t Npeaks /* i : Number of peaks */ +) +{ + float x[4]; + float xq[4]; + int16_t weights[4]; + int16_t i, idx, cb_class, search_overlap; + + set_s( weights, 1, 4 ); + + x[0] = vect_in[0] / ( *peak_gain ); + x[1] = vect_in[1] / ( *peak_gain ); + x[2] = vect_in[3] / ( *peak_gain ); + x[3] = vect_in[4] / ( *peak_gain ); + + if ( vect_out[0] != 0 ) + { + if ( fabs( peak_gain[-1] ) > fabs( *peak_gain ) ) + { + weights[0] = 0; + + if ( vect_out[1] != 0 ) + { + weights[1] = 0; + } + } + } + + if ( overlap > 0 ) + { + if ( fabs( peak_gain[1] ) > fabs( *peak_gain ) ) + { + for ( i = 3; i > 3 - overlap; i-- ) + { + weights[i] = 0; + } + } + } + + + /* Classify */ + cb_class = (int16_t) w_vquant( x, 0, weights, 0, hvq_class_c, HVQ_VQ_DIM - 1, HVQ_NUM_CLASS, 0 ); + + if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) + { + idx = max( 0, HVQ_MAX_PEAKS_24k - Npeaks ); + search_overlap = hvq_cb_search_overlap24k[idx]; + } + else + { + idx = max( 0, HVQ_MAX_PEAKS_32k - Npeaks ); + search_overlap = hvq_cb_search_overlap32k[idx]; + } + + /* Quantize */ + if ( cb_class == 0 ) + { + *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, hvq_peak_cb, 4, HVQ_CB_SIZE / 2 + search_overlap, 0 ); + push_indice( hBstr, IND_HVQ_PEAKS, 0, 1 ); + } + else if ( cb_class == 1 ) + { + *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, &hvq_peak_cb[HVQ_CB_SIZE * 2 - search_overlap * 4], 4, HVQ_CB_SIZE / 2 + search_overlap, 0 ); + *vq_idx += HVQ_CB_SIZE / 2 - search_overlap; + push_indice( hBstr, IND_HVQ_PEAKS, 0, 1 ); + } + else if ( cb_class == 2 ) + { + *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, &hvq_peak_cb[HVQ_CB_SIZE * 2 - search_overlap * 4], 4, HVQ_CB_SIZE / 2 + search_overlap, 1 ); + *vq_idx += HVQ_CB_SIZE / 2 - search_overlap; + push_indice( hBstr, IND_HVQ_PEAKS, 1, 1 ); + } + else + { + *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, hvq_peak_cb, 4, HVQ_CB_SIZE / 2 + search_overlap, 1 ); + push_indice( hBstr, IND_HVQ_PEAKS, 1, 1 ); + } + + vect_out[0] = weights[0] * ( xq[0] * ( *peak_gain ) ) + ( weights[0] ^ 1 ) * vect_out[0]; + vect_out[1] = weights[1] * ( xq[1] * ( *peak_gain ) ) + ( weights[1] ^ 1 ) * vect_out[1]; + vect_out[2] = *peak_gain; + vect_out[3] = weights[2] * ( xq[2] * ( *peak_gain ) ) + ( weights[2] ^ 1 ) * vect_out[3]; + vect_out[4] = weights[3] * ( xq[3] * ( *peak_gain ) ) + ( weights[3] ^ 1 ) * vect_out[4]; + + return; +} + +/*-------------------------------------------------------------------------- + * code_pos() + * + * Code pulse positions + *--------------------------------------------------------------------------*/ + +/*! r: number of consumed bits */ +static int16_t sparse_code_pos( + const int16_t *inp, /* i : positions to encode */ + const int16_t length, /* i : number of positions */ + int16_t *result /* o : sparse encoding */ +) +{ + int16_t layer2[HVQ_CP_L2_MAX]; + int16_t layer_length; + int16_t i, j; + int16_t val, idx; + int16_t bits = 0; + int16_t mask; + + set_s( layer2, 0, HVQ_CP_L2_MAX ); + + layer_length = (int16_t) ( (float) length / HVQ_CP_L1_LEN + 0.5 ); + + for ( j = 0; j < layer_length; j++ ) + { + for ( i = j * HVQ_CP_L1_LEN; i < min( ( j + 1 ) * HVQ_CP_L1_LEN, length ); i++ ) + { + if ( inp[i] ) + { + layer2[j] = 1; + break; + } + } + } + + for ( i = 0; i < layer_length; i++ ) + { + result[i] = layer2[i]; + } + bits += layer_length; + + for ( j = 0; j < layer_length; j++ ) + { + if ( layer2[j] ) + { + val = 0; + for ( i = j * HVQ_CP_L1_LEN; i < min( ( j + 1 ) * HVQ_CP_L1_LEN, length ); i++ ) + { + val <<= 1; + val |= inp[i]; + } + + for ( idx = 0; idx < HVQ_CP_MAP_LEN; idx++ ) + { + if ( hvq_cp_layer1_map5[idx] == val ) + { + break; + } + } + + mask = 1 << ( HVQ_CP_MAP_IDX_LEN - 1 ); + for ( i = 0; i < HVQ_CP_MAP_IDX_LEN; i++ ) + { + result[bits++] = ( idx & mask ) >> ( HVQ_CP_MAP_IDX_LEN - 1 - i ); + mask >>= 1; + } + } + } + + return bits; +} + +/*-------------------------------------------------------------------------- + * hvq_code_pos() + * + * Code pulse positions + *--------------------------------------------------------------------------*/ + +static int16_t hvq_code_pos( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t *const inp, /* i : positions to encode */ + const int16_t length, /* i : number of positions */ + const int16_t num_peaks /* i : number of peaks */ +) +{ + int16_t sparse_result[4 * HVQ_THRES_BIN_32k / HVQ_CP_L1_LEN]; + int16_t delta[HVQ_MAX_PEAKS]; + int16_t peak_idx[HVQ_MAX_PEAKS]; + int16_t inp_abs[HVQ_THRES_BIN_32k]; + int16_t inp_sign[HVQ_MAX_PEAKS]; + int16_t i, j; + int16_t bits; + int16_t delta_max; + int16_t delta_bits, sparse_bits; + + bits = 0; + + /* Extract sorted peak index vector and sign vector */ + for ( i = 0, j = 0; i < length; i++ ) + { + inp_abs[i] = (int16_t) abs( inp[i] ); + if ( inp[i] ) + { + peak_idx[j] = i; + inp_sign[j++] = inp[i]; + } + } + + /* Calculate delta */ + delta[0] = peak_idx[0] + HVQ_CP_HUFF_OFFSET; + delta_max = delta[0]; + for ( i = 1; i < num_peaks; i++ ) + { + delta[i] = peak_idx[i] - peak_idx[i - 1] - HVQ_CP_HUFF_OFFSET; + if ( delta_max < delta[i] ) + { + delta_max = delta[i]; + } + } + + /* Calculate bits needed for huffman coding of deltas */ + delta_bits = -1; + if ( delta_max <= HVQ_CP_HUFF_MAX ) + { + delta_bits = 0; + for ( i = 0; i < num_peaks; i++ ) + { + delta_bits += hvq_cp_huff_len[delta[i]]; + } + } + + /* Calculate bits neeed for sparse coding */ + sparse_bits = sparse_code_pos( inp_abs, length, sparse_result ); + + /* Decide which coding mode to use */ + if ( delta_bits > sparse_bits || delta_bits < 0 ) + { + push_indice( hBstr, IND_POS_IDX, HVQ_CP_SPARSE, 1 ); + + for ( i = 0; i < sparse_bits; i++ ) + { + push_indice( hBstr, IND_POS_IDX, sparse_result[i], 1 ); + } + bits += sparse_bits + 1; + } + else + { + push_indice( hBstr, IND_POS_IDX, HVQ_CP_DELTA, 1 ); + + for ( i = 0; i < num_peaks; i++ ) + { + j = delta[i]; + push_indice( hBstr, IND_POS_IDX, hvq_cp_huff_val[j], hvq_cp_huff_len[j] ); + } + bits += delta_bits + 1; + } + + /* Send sign */ + for ( i = 0; i < num_peaks; i++ ) + { + push_indice( hBstr, IND_POS_IDX, ( inp_sign[i] < 0 ? 0 : 1 ), 1 ); + } + bits += num_peaks; + + return bits; +} diff --git a/lib_enc/pit_enc.c b/lib_enc/pit_enc.c new file mode 100644 index 0000000000..f2c518bd3d --- /dev/null +++ b/lib_enc/pit_enc.c @@ -0,0 +1,1388 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * pit_encode() + * + * Close-loop pitch lag search and pitch lag quantization + * Adaptive excitation construction + *------------------------------------------------------------------*/ + +/*! r: Fractional pitch for each subframe */ +float pit_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t pitch_bits[], /* i : pitch bits */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t coder_type, /* i : coding type */ + int16_t *limit_flag, /* i/o: restrained(0) or extended(1) Q limits */ + const int16_t i_subfr, /* i : subframe index */ + float *exc, /* i/o: pointer to excitation signal frame */ + const int16_t L_subfr, /* i : subframe length */ + const int16_t *pitch, /* i : open loop pitch estimates in current frame */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ + const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ +) +{ + float pitch_cl; + int16_t pit_flag, delta, mult_Top, nBits; + int16_t T_op[2]; /* values for two half-frames */ + + /*----------------------------------------------------------------* + * convert pitch values to 16kHz domain + *----------------------------------------------------------------*/ + + if ( L_frame == L_FRAME || ( tdm_Pri_pitch_buf != NULL && tdm_Pri_pitch_buf[0] < 0 ) ) + { + mvs2s( pitch, T_op, 2 ); + } + else /* L_frame == L_FRAME16k */ + { + T_op[0] = (int16_t) ( pitch[0] * 1.25f + 0.5f ); + T_op[1] = (int16_t) ( pitch[1] * 1.25f + 0.5f ); + } + + /*----------------------------------------------------------------* + * Initializations + *----------------------------------------------------------------*/ + + /* Set pit_flag to 0 for every subframe with absolute pitch search */ + pit_flag = i_subfr; + if ( i_subfr == 2 * L_SUBFR ) + { + pit_flag = 0; + } + + /*-----------------------------------------------------------------* + * Limit range of pitch search + * Fractional pitch search + * Pitch quantization + *-----------------------------------------------------------------*/ + + mult_Top = 1; + + if ( !Opt_AMR_WB ) + { + /*----------------------------------------------------------------* + * Set limit_flag to 0 for restrained limits, and 1 for extended limits + *----------------------------------------------------------------*/ + + if ( i_subfr == 0 ) + { + *limit_flag = 1; + if ( coder_type == VOICED ) + { + *limit_flag = 2; /* double-extended limits */ + } + + if ( coder_type == GENERIC && core_brate == ACELP_7k20 ) + { + *limit_flag = 0; + } + } + else if ( i_subfr == 2 * L_SUBFR && coder_type == GENERIC && core_brate <= ACELP_13k20 ) + { + if ( *T0 > ( PIT_FR1_EXTEND_8b + PIT_MIN ) >> 1 ) + { + *limit_flag = 0; + } + } + + /* check the minimum pitch value */ + if ( *limit_flag == 0 ) + { + if ( ( i_subfr == 0 && T_op[0] < PIT_MIN ) || ( i_subfr == 2 * L_SUBFR && T_op[1] < PIT_MIN ) ) + { + mult_Top = 2; + } + } + + /*-------------------------------------------------------* + * Retrieve the number of Q bits + *-------------------------------------------------------*/ + + nBits = 0; + if ( coder_type != AUDIO ) + { + nBits = pitch_bits[i_subfr / L_subfr]; + } + + if ( coder_type == AUDIO ) + { + /*-------------------------------------------------------* + * Pitch encoding in AUDIO coder type + * (both ACELP@12k8 and ACELP@16k cores) + *-------------------------------------------------------*/ + + delta = 4; + + if ( L_subfr == L_frame / 2 && i_subfr != 0 ) + { + pit_flag = L_SUBFR; + } + + if ( pit_flag == 0 ) + { + nBits = 10; + } + else + { + nBits = 6; + } + + /* pitch lag search limitation */ + if ( i_subfr == 0 ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); + } + else if ( i_subfr == 2 * L_SUBFR && pit_flag == 0 ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); + } + + /* search and encode the closed loop pitch period */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MAX, PIT_MAX, L_FRAME, L_subfr ); + + pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + else if ( coder_type == VOICED ) + { + /*-------------------------------------------------------* + * Pitch encoding in VOICED coder type (ACELP@12k8 core only) + *-------------------------------------------------------*/ + + delta = 4; + + if ( i_subfr == 2 * L_SUBFR ) + { + pit_flag = i_subfr; + } + + /* pitch lag search limitation */ + if ( i_subfr == 0 ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); + } + + /* search and encode the closed loop pitch period */ + if ( nBits == 9 || nBits == 5 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_DOUBLEEXTEND_9b, PIT_FR1_DOUBLEEXTEND_9b, L_FRAME, L_SUBFR ); + } + else if ( nBits == 10 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MAX, PIT_MAX, L_FRAME, L_SUBFR ); + } + + pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + else if ( tdm_Pitch_reuse_flag == 1 || nBits == 4 ) + { + /*-------------------------------------------------------* + * Pitch encoding with reusing primary channel information + *-------------------------------------------------------*/ + int16_t loc_T0, loc_frac; + + delta = 4; + + pit_flag = L_SUBFR; + + if ( L_subfr == 2 * L_SUBFR ) + { + loc_T0 = (int16_t) ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ); + loc_frac = (int16_t) ( ( ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ) - loc_T0 ) * 4.0f ); + } + else + { + loc_T0 = (int16_t) tdm_Pri_pitch_buf[i_subfr / L_SUBFR]; + loc_frac = (int16_t) ( ( tdm_Pri_pitch_buf[i_subfr / L_SUBFR] - loc_T0 ) * 4.0f ); + } + + /* pitch lag search limitation */ + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, loc_T0, loc_frac, T0_min, T0_max ); + if ( nBits > 0 ) + { + /* search and encode the closed loop pitch period */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); + if ( delta == 8 ) + { + *T0_frac = 0; + } + pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + else + { + *T0 = loc_T0; + *T0_frac = loc_frac; + } + } + else + { + /*-------------------------------------------------------* + * Pitch encoding in GENERIC coder type + * (both ACELP@12k8 and ACELP@16k cores) + *-------------------------------------------------------*/ + + delta = 8; + + /* pitch lag search limitation */ + if ( i_subfr == 0 ) + { + limit_T0( L_frame, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); + } + else if ( i_subfr == 2 * L_SUBFR ) + { + limit_T0( L_frame, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); + } + + /* search and encode the closed loop pitch period */ + if ( L_frame == L_FRAME ) + { + if ( nBits == 8 || nBits == 5 ) + { + if ( *limit_flag == 0 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); + } + else + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN_EXTEND, PIT_FR1_EXTEND_8b, L_FRAME, L_SUBFR ); + } + } + else if ( nBits == 9 || nBits == 6 ) + { + if ( *limit_flag == 0 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); + } + else + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_EXTEND_9b, PIT_FR1_EXTEND_9b, L_FRAME, L_SUBFR ); + } + } + else if ( nBits == 10 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MAX, PIT_MAX, L_FRAME, L_SUBFR ); + } + + pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + else /* L_frame == L_FRAME16k */ + { + if ( nBits == 9 || nBits == 6 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT16k_FR2_EXTEND_9b, PIT16k_FR1_EXTEND_9b, L_FRAME16k, L_SUBFR ); + } + else if ( nBits == 10 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT16k_FR2_EXTEND_10b, PIT16k_MAX, L_FRAME16k, L_SUBFR ); + } + + pit16k_Q_enc( hBstr, nBits, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + } + } + + /*-------------------------------------------------------* + * Pitch encoding in AMR-WB IO mode + *-------------------------------------------------------*/ + + else + { + delta = 8; + *limit_flag = 0; + + if ( core_brate == ACELP_6k60 ) + { + nBits = 5; + + /* pitch lag search limitation */ + if ( i_subfr == 0 ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); + nBits = 8; + } + + if ( i_subfr == 2 * L_SUBFR ) + { + /* rewrite pit_flag - it must not be zero */ + pit_flag = i_subfr; + } + + /* search and encode the closed loop pitch period */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); + } + else if ( core_brate == ACELP_8k85 ) + { + nBits = 5; + + /* pitch lag search limitation */ + if ( i_subfr == 0 ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); + nBits = 8; + } + else if ( i_subfr == 2 * L_SUBFR ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); + nBits = 8; + } + + /* search and encode the closed loop pitch period */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); + } + else + { + nBits = 6; + + /* pitch lag search limitation */ + if ( i_subfr == 0 ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); + nBits = 9; + } + else if ( i_subfr == 2 * L_SUBFR ) + { + limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); + nBits = 9; + } + else + { + limit_T0( L_FRAME, delta, pit_flag, 0, *T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ + } + + /* search and encode the closed loop pitch period */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); + } + + pit_Q_enc( hBstr, 1, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + + /*-------------------------------------------------------* + * Compute floating pitch output + *-------------------------------------------------------*/ + + pitch_cl = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ + + return pitch_cl; +} + +/*-------------------------------------------------------------------* + * pitch_fr4() + * + * Find the closed loop pitch period with 1/4 subsample resolution. + *-------------------------------------------------------------------*/ + +/*! r: chosen integer pitch lag */ +int16_t pitch_fr4( + const float exc[], /* i : excitation buffer */ + const float xn[], /* i : target signal */ + const float h[], /* i : weighted synthesis filter impulse response */ + const int16_t t0_min, /* i : minimum value in the searched range. */ + const int16_t t0_max, /* i : maximum value in the searched range. */ + int16_t *pit_frac, /* o : chosen fraction (0, 1, 2 or 3) */ + const int16_t i_subfr, /* i : flag to first subframe */ + const int16_t limit_flag, /* i : flag for limits (0=restrained, 1=extended) */ + const int16_t t0_fr2, /* i : minimum value for resolution 1/2 */ + const int16_t t0_fr1, /* i : minimum value for resolution 1 */ + const int16_t L_frame, /* i : length of the frame */ + const int16_t L_subfr /* i : size of subframe */ +) +{ + int16_t i, fraction, step; + int16_t t0, t1, t_min, t_max, pit_min; + float cor_max, max_val, temp; + float *corr, corr_v[15 + 2 * L_INTERPOL1 + 1]; + + /* initialization */ + if ( limit_flag == 0 ) + { + if ( L_frame == L_FRAME ) + { + pit_min = PIT_MIN; + } + else /* L_frame == L_FRAME16k */ + { + pit_min = PIT16k_MIN; + } + } + else + { + if ( L_frame == L_FRAME ) + { + pit_min = PIT_MIN_EXTEND; + if ( limit_flag == 2 ) + { + pit_min = PIT_MIN_DOUBLEEXTEND; + } + } + else /* L_frame == L_FRAME16k */ + { + pit_min = PIT16k_MIN_EXTEND; + } + } + + + /*-----------------------------------------------------------------* + * - Find interval to compute normalized correlation + * - allocate memory to normalized correlation vector + * - Compute normalized correlation between target and filtered + * excitation + *-----------------------------------------------------------------*/ + + t_min = t0_min - L_INTERPOL1; + t_max = t0_max + L_INTERPOL1; + corr = &corr_v[0] - t_min; /* corr[t_min..t_max] */ + + norm_corr( exc, xn, h, t_min, t_max, corr, L_subfr ); + + /*-----------------------------------------------------------------* + * Find integer pitch + *-----------------------------------------------------------------*/ + + max_val = corr[t0_min]; + t0 = t0_min; + + for ( i = t0_min + 1; i <= t0_max; i++ ) + { + if ( corr[i] >= max_val ) + { + max_val = corr[i]; + t0 = i; + } + } + + if ( t0_fr1 == pit_min ) + { + /* don't search fraction (for 7b/4b quant) */ + if ( ( i_subfr == 0 ) && ( t0 >= t0_fr2 ) ) + { + i = ( t0 >> 1 ) * 2; /* 2 samples resolution */ + if ( ( i + 2 ) > PIT_MAX ) + { + i -= 2; + } + if ( corr[i] > corr[i + 2] ) + { + t0 = i; + } + else + { + t0 = i + 2; + } + } + + *pit_frac = 0; + + return ( t0 ); + } + if ( ( i_subfr == 0 ) && ( t0 >= t0_fr1 ) ) + { + *pit_frac = 0; + + return ( t0 ); + } + + /*------------------------------------------------------------------* + * Search fractionnal pitch with 1/4 subsample resolution. + * search the fractions around t0 and choose the one which maximizes + * the interpolated normalized correlation. + *-----------------------------------------------------------------*/ + + t1 = t0; + step = 1; /* 1/4 subsample resolution */ + fraction = 1; + if ( ( ( i_subfr == 0 ) && ( t0 >= t0_fr2 ) ) || ( t0_fr2 == pit_min ) ) + { + step = 2; /* 1/2 subsample resolution */ + fraction = 2; + } + + if ( t0 == t0_min ) /* Limit case */ + { + fraction = 0; + cor_max = interpolation( &corr[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); + } + else /* Process negative fractions */ + { + t0--; + cor_max = interpolation( &corr[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); + for ( i = ( fraction + step ); i <= 3; i = i + step ) + { + temp = interpolation( &corr[t0], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + } + } + } + + for ( i = 0; i <= 3; i = i + step ) /* Process positive fractions */ + { + temp = interpolation( &corr[t1], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + t0 = t1; + } + } + + *pit_frac = fraction; + + return ( t0 ); +} + +/*-------------------------------------------------------------------* + * norm_corr() + * + * Find the normalized correlation between the target vector and the + * filtered past excitation (correlation between target and filtered + * excitation divided by the square root of energy of filtered + * excitation) + *---------------------------------------------------------------------*/ + +void norm_corr( + const float exc[], /* i : excitation buffer */ + const float xn[], /* i : target signal */ + const float h[], /* i : weighted synthesis filter impulse response */ + const int16_t t_min, /* i : minimum value of searched range */ + const int16_t t_max, /* i : maximum value of searched range */ + float corr_norm[], /* o : normalized correlation */ + const int16_t L_subfr /* i : subframe size */ +) +{ + int16_t t, j, k; + float excf[L_FRAME16k]; /* filtered past excitation */ /* length up to L_FRAME in GSC */ + float alp, ps, norm; + + k = -t_min; + + /*-----------------------------------------------------------------* + * compute the filtered excitation for the first delay t_min + *-----------------------------------------------------------------*/ + + conv( &exc[k], h, excf, L_subfr ); + + /*-----------------------------------------------------------------* + * loop for every possible period + *-----------------------------------------------------------------*/ + + for ( t = t_min; t <= t_max; t++ ) + { + /* Compute correlation between xn[] and excf[] */ + + ps = 0.0f; + for ( j = 0; j < L_subfr; ++j ) + { + ps += xn[j] * excf[j]; + } + + /* Compute 1/sqrt(energie of excf[]) */ + + alp = 0.01f; + for ( j = 0; j < L_subfr; ++j ) + { + alp += excf[j] * excf[j]; + } + norm = inv_sqrt( alp ); + + /* Normalize correlation = correlation * (1/sqrt(energie)) */ + corr_norm[t] = ps * norm; + + /* update the filtered excitation excf[] for the next iteration */ + if ( t != t_max ) + { + k--; + for ( j = L_subfr - 1; j > 0; j-- ) + { + excf[j] = excf[j - 1] + exc[k] * h[j]; + } + excf[0] = exc[k]; + } + } + return; +} + +/*-------------------------------------------------------------------* + * abs_pit_enc() + * + * Encode pitch lag absolutely with resolution for shortest pitches + * depending on parameter 'fr_step': + * fr_step = 2: pitch range encoded with 8 bits + * fr_step = 4: pitch range encoded with 9 bits + *-------------------------------------------------------------------*/ + +/*! r: pitch index */ +int16_t abs_pit_enc( + const int16_t fr_steps, /* i : fractional resolution step */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac /* i : pitch fraction */ +) +{ + int16_t pitch_index; + + if ( limit_flag == 0 ) + { + if ( fr_steps == 2 ) + { + /*-----------------------------------------------------------------* + * The pitch range is encoded absolutely with 8 bits + * and is divided as follows: + * PIT_MIN to PIT_FR1_8b-1 resolution 1/2 (frac = 0 or 2) + * PIT_FR1_8b to PIT_MAX resolution 1 (frac = 0) + *-----------------------------------------------------------------*/ + if ( T0 < PIT_FR1_8b ) + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_MIN * 2 ); + } + else + { + pitch_index = T0 - PIT_FR1_8b + ( ( PIT_FR1_8b - PIT_MIN ) * 2 ); + } + } + else if ( fr_steps == 4 ) + { + /*-------------------------------------------------------------------* + * The pitch range is encoded absolutely with 9 bits + * and is divided as follows: + * PIT_MIN to PIT_FR2_9b-1 resolution 1/4 (frac = 0,1,2 or 3) + * PIT_FR2_9b to PIT_FR1_9b-1 resolution 1/2 (frac = 0 or 2) + * PIT_FR1_9b to PIT_MAX resolution 1 (frac = 0) + *-------------------------------------------------------------------*/ + if ( T0 < PIT_FR2_9b ) + { + pitch_index = T0 * 4 + T0_frac - ( PIT_MIN * 4 ); + } + else if ( T0 < PIT_FR1_9b ) + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_FR2_9b * 2 ) + ( ( PIT_FR2_9b - PIT_MIN ) * 4 ); + } + else + { + pitch_index = T0 - PIT_FR1_9b + ( ( PIT_FR2_9b - PIT_MIN ) * 4 ) + ( ( PIT_FR1_9b - PIT_FR2_9b ) * 2 ); + } + } + else /* fr_step == 0 */ + { + /* not used in the codec */ + pitch_index = 0; + } + } + else if ( limit_flag == 1 ) /* extended Q range */ + { + if ( fr_steps == 2 ) + { + /*-----------------------------------------------------------------* + * The pitch range is encoded absolutely with 8 bits + * and is divided as follows: + * PIT_MIN_EXTEND to PIT_FR1_EXTEND_8b-1 resolution 1/2 (frac = 0 or 2) + * PIT_FR1_EXTEND_8b to PIT_MAX resolution 1 (frac = 0) + *-----------------------------------------------------------------*/ + + if ( T0 < PIT_FR1_EXTEND_8b ) + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_MIN_EXTEND * 2 ); + } + else + { + pitch_index = T0 - PIT_FR1_EXTEND_8b + ( ( PIT_FR1_EXTEND_8b - PIT_MIN_EXTEND ) * 2 ); + } + } + else if ( fr_steps == 4 ) + { + /*-------------------------------------------------------------------* + * The pitch range is encoded absolutely with 9 bits + * and is divided as follows: + * PIT_MIN_EXTEND to PIT_FR2__EXTEND9b-1 resolution 1/4 (frac = 0,1,2 or 3) + * PIT_FR2_EXTEND_9b to PIT_FR1__EXTEND9b-1 resolution 1/2 (frac = 0 or 2) + * PIT_FR1_EXTEND_9b to PIT_MAX resolution 1 (frac = 0) + *-------------------------------------------------------------------*/ + + if ( T0 < PIT_FR2_EXTEND_9b ) + { + pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_EXTEND * 4 ); + } + else if ( T0 < PIT_FR1_EXTEND_9b ) + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_FR2_EXTEND_9b * 2 ) + ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ); + } + else + { + pitch_index = T0 - PIT_FR1_EXTEND_9b + ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ) + ( ( PIT_FR1_EXTEND_9b - PIT_FR2_EXTEND_9b ) * 2 ); + } + } + else /* fr_step == 0 */ + { + /* not used in the codec */ + pitch_index = 0; + } + } + else /* double-extended Q range */ + { + if ( fr_steps == 2 ) + { + /*-----------------------------------------------------------------* + * The pitch range is encoded absolutely with 8 bits + * and is divided as follows: + * PIT_MIN_DOUBLEEXTEND to PIT_FR1_DOUBLEEXTEND_8b-1 resolution 1/2 (frac = 0 or 2) + * PIT_FR1_DOUBLEEXTEND_8b to PIT_MAX resolution 1 (frac = 0) + *-----------------------------------------------------------------*/ + + if ( T0 < PIT_FR1_DOUBLEEXTEND_8b ) + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_MIN_DOUBLEEXTEND * 2 ); + } + else + { + pitch_index = T0 - PIT_FR1_DOUBLEEXTEND_8b + ( ( PIT_FR1_DOUBLEEXTEND_8b - PIT_MIN_DOUBLEEXTEND ) * 2 ); + } + } + else if ( fr_steps == 4 ) + { + /*-------------------------------------------------------------------* + * The pitch range is encoded absolutely with 9 bits + * and is divided as follows: + * PIT_MIN_DOUBLEEXTEND to PIT_FR2_DOUBLEEXTEND9b-1 resolution 1/4 (frac = 0,1,2 or 3) + * PIT_FR2_DOUBLEEXTEND_9b to PIT_FR1_DOOBLEEXTEND9b-1 resolution 1/2 (frac = 0 or 2) + * PIT_FR1_DOUBLEEXTEND_9b to PIT_MAX resolution 1 (frac = 0) + *-------------------------------------------------------------------*/ + + if ( T0 < PIT_FR2_DOUBLEEXTEND_9b ) + { + pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_DOUBLEEXTEND * 4 ); + } + else if ( T0 < PIT_FR1_DOUBLEEXTEND_9b ) + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_FR2_DOUBLEEXTEND_9b * 2 ) + ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ); + } + else + { + pitch_index = T0 - PIT_FR1_DOUBLEEXTEND_9b + ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ) + ( ( PIT_FR1_DOUBLEEXTEND_9b - PIT_FR2_DOUBLEEXTEND_9b ) * 2 ); + } + } + else /* fr_step == 0 */ + { + /* not used in the codec */ + pitch_index = 0; + } + } + + return pitch_index; +} + +/*-------------------------------------------------------------------* + * delta_pit_enc() + * + * Encode pitch lag differentially from T0_min to T0_max + * with resolution depending on parameter 'fr_step': + * fr_step = 0: resolution 1 (frac = 0), or + * fr_step = 2: resolution 1/2 (frac = 0 or 2), or + * fr_step = 4: resolution 1/4 (frac = 0, 1, 2, or 3) + *-------------------------------------------------------------------*/ + +/*! r: pitch index */ +int16_t delta_pit_enc( + const int16_t fr_steps, /* i : fractional resolution step */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + const int16_t T0_min /* i : delta search min */ +) +{ + int16_t pitch_index; + + if ( fr_steps == 0 ) + { + pitch_index = T0 - T0_min; + } + else if ( fr_steps == 2 ) + { + pitch_index = ( T0 - T0_min ) * 2 + ( T0_frac >> 1 ); + } + else /* fr_steps == 4 */ + { + pitch_index = ( T0 - T0_min ) * 4 + T0_frac; + } + + return pitch_index; +} + +/*-------------------------------------------------------------------* + * pit_Q_enc() + * + * Encode subframe pitch lag + *-------------------------------------------------------------------*/ + +void pit_Q_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t delta, /* i : Half the CL searched interval */ + const int16_t pit_flag, /* i : absolute(0) or delta(1) pitch Q */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max /* o : delta search max */ +) +{ + int16_t pitch_index; + + if ( nBits == 10 ) /* absolute encoding with 10 bits */ + { + if ( limit_flag == 0 ) + { + pitch_index = T0 * 4 + T0_frac - ( PIT_MIN * 4 ); + } + else if ( limit_flag == 1 ) + { + pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_EXTEND * 4 ); + } + else /* limit_flag == 2 */ + { + pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_DOUBLEEXTEND * 4 ); + } + } + else if ( nBits == 9 ) /* absolute encoding with 9 bits */ + { + pitch_index = abs_pit_enc( 4, limit_flag, T0, T0_frac ); + + /* find T0_min and T0_max for delta search */ + if ( Opt_AMR_WB ) + { + limit_T0( L_FRAME, delta, pit_flag, 0, T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ + } + } + else if ( nBits == 8 ) /* absolute encoding with 8 bits */ + { + pitch_index = abs_pit_enc( 2, limit_flag, T0, T0_frac ); + + /* find T0_min and T0_max for delta search */ + if ( Opt_AMR_WB ) + { + limit_T0( L_FRAME, delta, pit_flag, 0, T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ + } + } + else if ( nBits == 6 ) /* relative encoding with 6 bits */ + { + pitch_index = delta_pit_enc( 4, T0, T0_frac, *T0_min ); + } + else if ( nBits == 5 ) /* relative encoding with 5 bits */ + { + if ( delta == 8 ) + { + pitch_index = delta_pit_enc( 2, T0, T0_frac, *T0_min ); + } + else /* delta == 4 */ + { + pitch_index = delta_pit_enc( 4, T0, T0_frac, *T0_min ); + } + } + else /* nBits == 4 ) */ /* relative encoding with 4 bits */ + { + if ( delta == 8 ) + { + pitch_index = delta_pit_enc( 0, T0, T0_frac, *T0_min ); + } + else /* delta == 4 */ + { + pitch_index = delta_pit_enc( 2, T0, T0_frac, *T0_min ); + } + } + + if ( !Opt_AMR_WB ) + { + /* find T0_min and T0_max for delta search */ + limit_T0( L_FRAME, delta, L_SUBFR, limit_flag, T0, T0_frac, T0_min, T0_max ); + } + + push_indice( hBstr, IND_PITCH, pitch_index, nBits ); + + return; +} + +/*-------------------------------------------------------------------* + * pit16k_Q_enc() + * + * Encode subframe pitch lag @16kHz core + *-------------------------------------------------------------------*/ + +void pit16k_Q_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t nBits, /* i : # of Q bits */ + const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + int16_t *T0_min, /* i/o: delta search min */ + int16_t *T0_max /* o : delta search max */ +) +{ + int16_t pitch_index; + + if ( nBits == 10 ) /* absolute encoding with 10 bits */ + { + if ( T0 < PIT16k_FR2_EXTEND_10b ) + { + pitch_index = T0 * 4 + T0_frac - ( PIT16k_MIN_EXTEND * 4 ); + } + else + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT16k_FR2_EXTEND_10b * 2 ) + ( ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4 ); + } + + push_indice( hBstr, IND_PITCH, pitch_index, nBits ); + } + else if ( nBits == 9 ) /* absolute encoding with 9 bits */ + { + { + /*-------------------------------------------------------------------* + * The pitch range is encoded absolutely with 9 bits + * and is divided as follows: + * PIT16k_EXTEND_MIN to PIT16k_FR2_EXTEND_9b-1 resolution 1/4 (frac = 0,1,2 or 3) + * PIT16k_FR2_EXTEND_9b to PIT16k_FR1_EXTEND_9b-1 resolution 1/2 (frac = 0 or 2) + * PIT16k_FR1_EXTEND_9b to PIT16k_MAX resolution 1 (frac = 0) + *-------------------------------------------------------------------*/ + + if ( T0 < PIT16k_FR2_EXTEND_9b ) + { + pitch_index = T0 * 4 + T0_frac - ( PIT16k_MIN_EXTEND * 4 ); + } + else if ( T0 < PIT16k_FR1_EXTEND_9b ) + { + pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT16k_FR2_EXTEND_9b * 2 ) + ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ); + } + else + { + pitch_index = T0 - PIT16k_FR1_EXTEND_9b + ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ) + ( ( PIT16k_FR1_EXTEND_9b - PIT16k_FR2_EXTEND_9b ) * 2 ); + } + } + + push_indice( hBstr, IND_PITCH, pitch_index, 9 ); + } + else /* nBits == 6 */ /* relative encoding with 6 bits */ + { + pitch_index = ( T0 - *T0_min ) * 4 + T0_frac; + + push_indice( hBstr, IND_PITCH, pitch_index, nBits ); + } + + limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, T0, T0_frac, T0_min, T0_max ); + + return; +} + + +/*------------------------------------------------------------------* + * limit_T0_voiced2: + * + * + *------------------------------------------------------------------*/ + +static void limit_T0_voiced2( + const int16_t res, + const int16_t *T_op, + int16_t *T0_min, + int16_t *T0_min_frac, + int16_t *T0_max, + int16_t *T0_max_frac, + const int16_t pit_min, + const int16_t pit_max, + const int16_t i_subfr ) +{ + int16_t t, temp1, temp2; + + /* Lower-bound */ + if ( i_subfr == 0 ) + { + temp1 = ( T_op[0] * res ) - 32; + } + else + { + temp1 = ( T_op[1] * res ) - 32; + } + + if ( T_op[0] < T_op[1] ) + { + t = ( T_op[0] * res ) - 16; + } + else + { + t = ( T_op[1] * res ) - 16; + } + + if ( temp1 < t ) + { + temp1 = t; + } + + temp2 = temp1 / res; + *T0_min = temp2; + *T0_min_frac = temp1 - temp2 * res; + + if ( *T0_min < pit_min ) + { + *T0_min = pit_min; + *T0_min_frac = 0; + } + + /* Higher-bound */ + temp1 = ( *T0_min * res ) + *T0_min_frac + 64 - 1; + + if ( T_op[0] < T_op[1] ) + { + t = ( T_op[1] * res ) + 16 + res - 1; + } + else + { + t = ( T_op[0] * res ) + 16 + res - 1; + } + + if ( temp1 > t ) + { + temp1 = t; + } + + temp2 = temp1 / res; + *T0_max = temp2; + *T0_max_frac = temp1 - temp2 * res; + + if ( *T0_max > pit_max ) + { + *T0_max = pit_max; + *T0_max_frac = res - 1; + temp1 = ( *T0_max * res ) - 64 + res; + temp2 = temp1 / res; + *T0_min = temp2; + *T0_min_frac = temp1 - temp2 * res; + } + + return; +} + + +/*------------------------------------------------------------------* + * Mode2_pit_encode: + * + * Close-loop pitch lag search and pitch lag quantization + * Adaptive excitation construction + *------------------------------------------------------------------*/ + +void Mode2_pit_encode( + const int16_t coder_type, /* i : coding model */ + const int16_t i_subfr, /* i : subframe index */ + int16_t **pt_indice, /* i/o: quantization indices pointer */ + float *exc, /* i/o: pointer to excitation signal frame */ + const int16_t *T_op, /* i : open loop pitch estimates in current frame */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_min_frac, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + int16_t *T0_max_frac, /* i/o: higher limit for close-loop search */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ + int16_t *T0_res, /* i/o: close loop pitch resolution */ + float *h1, /* i : weighted filter impulse response */ + float *xn, /* i : target vector */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr1b, + const int16_t pit_fr2, + const int16_t pit_max, + const int16_t pit_res_max ) +{ + int16_t pit_flag; + + /* Pitch flag */ + pit_flag = i_subfr; + + if ( i_subfr == ( 2 * L_SUBFR ) ) + { + pit_flag = 0; + } + + /*-----------------------------------------------------------------* + * - Limit range of pitch search + * - Fractional pitch search + * - Pitch quantization + *-----------------------------------------------------------------*/ + + if ( coder_type == 0 ) /*Unvoiced Coding do nothing*/ + { + *T0 = L_SUBFR; + *T0_frac = 0; + *T0_res = 1; + } + else if ( coder_type == 1 ) /* 8/4/4/4 (EVS) */ + { + if ( i_subfr == 0 ) + { + limit_T0_voiced( 4, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + else + { + limit_T0_voiced( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + + *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_min, pit_fr1b, L_SUBFR ); + + if ( i_subfr == 0 ) + { + Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 2 ) /* 8/5/8/5 (EVS) */ + { + + if ( i_subfr == 0 ) + { + limit_T0_voiced( 5, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + else if ( i_subfr == 2 * L_SUBFR ) + { + limit_T0_voiced( 5, pit_res_max >> 1, T_op[1], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + else + { + limit_T0_voiced( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + + *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, pit_flag, pit_min, pit_min, pit_fr1b, L_SUBFR ); + + if ( pit_flag == 0 ) + { + Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 3 ) /* 9/6/6/6 (HRs- VC) */ + { + int16_t pit_res_max2 = pit_res_max; + + if ( pit_min == PIT_MIN_16k ) + { + + pit_res_max2 = pit_res_max >> 1; + } + + if ( i_subfr == 0 ) + { + + limit_T0_voiced2( pit_res_max2, T_op, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max, i_subfr ); + } + else + { + limit_T0_voiced( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + + *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max2, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_fr2, pit_fr1, L_SUBFR ); + + if ( i_subfr == 0 ) /* if 1st subframe */ + { + Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); + } + else + { + Mode2_delta_pit_enc( *T0, *T0_frac, pit_res_max2, *T0_min, *T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 4 ) /* 9/6/9/6 (AMRWB) */ + { + int16_t pit_res_max2 = pit_res_max; + + if ( pit_min == PIT_MIN_16k ) + { + + pit_res_max2 = pit_res_max >> 1; + } + + + if ( ( i_subfr == 0 ) || ( i_subfr == 2 * L_SUBFR ) ) + { + + limit_T0_voiced2( pit_res_max2, T_op, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max, i_subfr ); + } + else + { + limit_T0_voiced( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + + *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max2, T0_frac, T0_res, pit_res_max, pit_flag, pit_min, pit_fr2, pit_fr1, L_SUBFR ); + + if ( pit_flag == 0 ) /* if 1st/3rd/5th subframe */ + { + Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); + } + else /* if subframe 2 or 4 */ + { + Mode2_delta_pit_enc( *T0, *T0_frac, pit_res_max2, *T0_min, *T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 8 ) /* 8/5/5/5 (RF all pred mode) */ + { + if ( i_subfr == 0 ) + { + limit_T0_voiced( 5, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + else + { + limit_T0_voiced( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_min, pit_fr1b, L_SUBFR ); + + if ( i_subfr == 0 ) + { + Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); + } + } + else if ( coder_type == 9 ) /* 8/0/8/0 (RF mode Gen pred) */ + { + if ( i_subfr == 0 ) + { + limit_T0_voiced( 4, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + else + { + limit_T0_voiced( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); + } + *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_min, pit_fr1b, L_SUBFR ); + + if ( i_subfr == 0 ) + { + Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); + } + else + { + Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); + } + } + else + { + assert( 0 ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Mode2_abs_pit_enc: + * + * Encode pitch lag absolutely + *-------------------------------------------------------------------*/ + +void Mode2_abs_pit_enc( + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + int16_t **pt_indice, /* i/o: pointer to Vector of Q indexes */ + const int16_t pit_min, + const int16_t pit_fr1, + const int16_t pit_fr2, + const int16_t pit_res_max ) +{ + int16_t pit_res_max_half; + + pit_res_max_half = pit_res_max >> 1; + + if ( T0 < pit_fr2 ) + { + **pt_indice = T0 * pit_res_max + T0_frac - ( pit_min * pit_res_max ); + } + else if ( T0 < pit_fr1 ) + { + **pt_indice = T0 * pit_res_max_half + T0_frac - ( pit_fr2 * pit_res_max_half ) + ( ( pit_fr2 - pit_min ) * pit_res_max ); + } + else + { + **pt_indice = T0 - pit_fr1 + ( ( pit_fr2 - pit_min ) * pit_res_max ) + ( ( pit_fr1 - pit_fr2 ) * pit_res_max_half ); + } + + ( *pt_indice )++; + + return; +} + + +/*-------------------------------------------------------------------* + * Mode2_delta_pit_enc: + * + * Encode pitch lag differentially + *-------------------------------------------------------------------*/ + +void Mode2_delta_pit_enc( + const int16_t T0, /* i : integer pitch lag */ + const int16_t T0_frac, /* i : pitch fraction */ + const int16_t T0_res, /* i : pitch resolution */ + const int16_t T0_min, /* i : delta search min */ + const int16_t T0_min_frac, /* i : delta search min */ + int16_t **pt_indice /* o : pointer to Vector of Q indexes */ +) +{ + + **pt_indice = ( T0 - T0_min ) * T0_res + T0_frac - T0_min_frac; + + ( *pt_indice )++; + + return; +} diff --git a/lib_enc/pitch_ol.c b/lib_enc/pitch_ol.c new file mode 100644 index 0000000000..72d454fd30 --- /dev/null +++ b/lib_enc/pitch_ol.c @@ -0,0 +1,992 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define PIT_MIN2 20 /* pit_min for pitch tracking */ +#define PIT_MIN_1 44 /* pitch tracking */ +#define PIT_MIN2_1 24 +#define THR_relE -11.0f +#define THRES0 1.17f /* Threshold to favor smaller pitch lags */ +#define DELTA0 2.0f /* initial range of multiples search */ +#define STEP 1.0f /* increment in range of multiples search */ +#define THRES1 0.4f /* Threshold to favor pitch lags coherence for neighbours */ +#define DELTA_COH 14 /* Maximum pitch lags difference for neighbours to be considered as coherent */ +#define THRES3 0.7f /* Threshold to favor pitch lags coherence with previous frames */ +#define CORR_TH0 0.4f /* Noise threshold for reinforcement with past frame pitch */ +#define CORR_TH1 0.5f /* Noise threshold for reinforcement with neighbourhood pitch correlations */ +#define LEN_X ( ( PIT_MAX / OPL_DECIM ) - ( PIT_MIN2 / OPL_DECIM ) + 1 ) /* Correlation buffer length */ +#define COH_FAC 1.4f /* Factor for measuring the pitch coherence */ +#define NSECT 4 +#define NHFR 3 +#define L_FIR_PO 5 +#define L_MEM ( L_FIR_PO - 2 ) + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void pitch_neighbour( const int16_t sect0, const int16_t pitch_tmp[], int16_t pitch[NHFR][2 * NSECT], const float corr_tmp[], float corr[3][2 * NSECT], const float thres1[2 * NHFR], const int16_t ind_tmp[2 * NHFR] ); + +static void find_mult( float *fac, const int16_t pitch0, const int16_t pitch1, const int16_t pit_max0, float *corr, int16_t *old_pitch, float *old_corr, float delta, const float step ); + +static int16_t pitch_coherence( const int16_t pitch0, const int16_t pitch1, const float fac_max, const int16_t diff_max ); + +static void lp_decim2( const float x[], float y[], const int16_t l, float *mem ); + + +/*-----------------------------------------------------------------* + * pitch_ol_init + * + * Open loop pitch variable initialization + *-----------------------------------------------------------------*/ + +void pitch_ol_init( + float *old_thres, /* o : threshold for reinforcement of past pitch influence */ + int16_t *old_pitch, /* o : pitch of the 1st half-frame of previous frame */ + int16_t *delta_pit, /* o : pitch evolution extrapolation */ + float *old_corr /* o : correlation */ +) +{ + *old_thres = 0.0f; + *old_pitch = 0; + *delta_pit = 0; + *old_corr = 0.0f; + + return; +} + +/*-----------------------------------------------------------------* + * pitch_ol() + * + * Compute the open loop pitch lag. + * + * The pitch lag search is divided in three sections of two sets. + * Each section cannot have a pitch multiple. + * We find a maximum for each section. + * We compare the maxima of each section. + * + * As there is a margin between section overlaps, especially for + * longer delays, this section selection is more robust for not + * to find multiples in the same section when pitch evolves rapidly + * + * For each section, the length of the vectors to correlate is + * greater than or equal to the longest pitch delay + *------------------------------------------------------------------*/ + +void pitch_ol( + int16_t pitch[3], /* o : open loop pitch lag for each half-frame */ + float voicing[3], /* o : maximum normalized correlation for each half-frame */ + int16_t *old_pitch, /* i/o: OL pitch of the 2nd half-frame of the last frame */ + float *old_corr, /* i/o: correlation */ + float corr_shift, /* i : normalized correlation correction */ + float *old_thres, /* i/o: maximum correlation weighting with respect to past frame pitch */ + int16_t *delta_pit, /* i/o: old pitch extrapolation correction (added to old pitch) */ + float *st_old_wsp2, /* i/o: weighted speech memory */ + const float *wsp, /* i : weighted speech for current frame and look-ahead */ + float mem_decim2[3], /* i/o: wsp decimation filter memory */ + const float relE, /* i : relative frame energy */ + const int16_t L_look, /* i : look-ahead length */ + const int16_t last_class, /* i : frame classification of last frame */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t Opt_SC_VBR /* i : SC-VBR flag */ +) +{ + float old_wsp2[( L_WSP - L_INTERPOL ) / OPL_DECIM], *wsp2; + float tmp_mem[3], scale1[2 * DELTA_COH - 1]; + float scaled_buf[2 * LEN_X + 3 * ( DELTA_COH - 1 )]; + float cor_temp, cor_buf[2 * LEN_X], *pt1, *pt2, *pt3, *pt4, *pt5 = 0, *pt6 = 0, *pt_cor0, *pt_cor1, *pt_cor2, *pt_cor3, *pt_cor4; + float thres1[2 * NHFR]; + int16_t diff, cnt, ind, ind1, offset, offset1, offset_la = 0, offset_la1 = 0, coh_flag, coh_flag1; + + int16_t i, j, k, m, pit_min, pit_min1, sect0, subsect0, old_tmp, old_tmp1, len_x, len_x1, len_temp, len_temp1; + int16_t pitchX[NHFR][2 * NSECT], pitch_tmp[2 * NHFR], ind_tmp[2 * NHFR], tmp_buf[NHFR + 1]; + float enr, enr1 = 0.0f, enr_norm[NSECT], enr_norm1[NSECT], fac; + float scaledX[NHFR][2 * NSECT], corX[NHFR][2 * NSECT], cor_tmp[2 * NHFR], cor_mean; + + const int16_t *nb_sect, *nb_subsect, *len, *len1, *sublen, *sublen1, *pit_max, *sec_length, *sec_length1; + int16_t ind_corX, ind1_corX; + float pit_min_coding; + + /*--------------------------------------------------------------* + * Initialization + *--------------------------------------------------------------*/ + + nb_sect = nb_sect_12k8; + nb_subsect = nb_subsect_12k8; + + len = len_12k8; + len1 = len1_12k8; + sublen = sublen_12k8; + sublen1 = sublen1_12k8; + pit_max = pit_max_12k8; + sec_length = sec_length_12k8; + sec_length1 = sec_length1_12k8; + + if ( last_class < VOICED_TRANSITION && bwidth != NB ) + { + /* reset last pitch reinforcement in case of unvoiced or transitions: it avoids some pitch doublings */ + *old_thres = 0.0f; + } + + pit_min_coding = PIT_MIN_EXTEND; + if ( ( bwidth != NB && *old_pitch > PIT_MIN ) || + ( bwidth == NB && ( *old_pitch > PIT_MIN2_1 || *old_thres < 0.1 ) ) ) + { + pit_min = PIT_MIN / OPL_DECIM; + pit_min1 = PIT_MIN_1 / OPL_DECIM; + subsect0 = 2; + sect0 = 1; + } + else + { + pit_min = PIT_MIN2 / OPL_DECIM; + pit_min1 = PIT_MIN2_1 / OPL_DECIM; + subsect0 = 0; + sect0 = 0; + } + + len_x = PIT_MAX / OPL_DECIM - pit_min + 1; + len_x1 = PIT_MAX / OPL_DECIM - pit_min1 + 1; + + /*--------------------------------------------------------------* + * Find decimated weighted speech + * Update wsp buffer with the memory + * decimation of wsp[] to search pitch in LF and to reduce complexity + * Extend the decimation of wsp to the end of the speech buffer + * Update wsp memory + *--------------------------------------------------------------*/ + + mvr2r( st_old_wsp2, old_wsp2, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); + wsp2 = old_wsp2 + ( ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); + lp_decim2( wsp, wsp2, L_FRAME, mem_decim2 ); + + mvr2r( mem_decim2, tmp_mem, 3 ); + lp_decim2( &wsp[L_FRAME], &wsp2[L_FRAME / OPL_DECIM], L_look, tmp_mem ); + + mvr2r( &old_wsp2[L_FRAME / OPL_DECIM], st_old_wsp2, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); + + /*-----------------------------------------------------------------* + * attenuate the correlation correction factor due to noise + * reset correlation buffer outside the useful range + * Find the scaling functions for immediate neigbours and + * further ones + *-----------------------------------------------------------------*/ + + corr_shift *= 0.5f; + set_f( scaled_buf, 0, DELTA_COH - 1 ); + set_f( scaled_buf + ( DELTA_COH - 1 ) + len_x, 0, DELTA_COH - 1 ); + set_f( scaled_buf + 2 * ( DELTA_COH - 1 ) + len_x + len_x1, 0, DELTA_COH - 1 ); + + pt1 = scale1 + DELTA_COH - 1; + pt2 = pt1; + for ( i = 0; i < DELTA_COH; i++ ) + { + *pt1 = -( *old_thres ) / DELTA_COH * i + *old_thres + 1.0f; + *pt2-- = *pt1++; + } + + /*-----------------------------------------------------------------* + * Estimate the new pitch by extrapolating the old pitch value + * for 2 half-frames + *-----------------------------------------------------------------*/ + + old_tmp = *old_pitch + *delta_pit; + + if ( old_tmp > PIT_MAX / OPL_DECIM ) + { + old_tmp = PIT_MAX / OPL_DECIM; + } + + if ( old_tmp < pit_min ) + { + old_tmp = pit_min; + } + + old_tmp1 = old_tmp + *delta_pit; + if ( old_tmp1 > PIT_MAX / OPL_DECIM ) + { + old_tmp1 = PIT_MAX / OPL_DECIM; + } + + if ( old_tmp1 < pit_min ) + { + old_tmp1 = pit_min; + } + + + /*-----------------------------------------------------------------* + * Loop for all three half-frames (current frame + look-ahead) + *-----------------------------------------------------------------*/ + pt_cor0 = scaled_buf + DELTA_COH - 1; + + pt_cor2 = pt_cor0 - pit_min + old_tmp; + pt_cor4 = pt_cor0 - pit_min1 + old_tmp + ( DELTA_COH - 1 ) + len_x; + + for ( i = 0; i < NHFR; i++ ) + { + pt1 = wsp2 + i * 2 * ( L_SUBFR / OPL_DECIM ); + pt2 = pt1 - pit_min; + enr = 0.01f; + pt_cor1 = pt_cor0; + pt4 = pt1 - pit_min1; + pt_cor3 = pt_cor0 + ( DELTA_COH - 1 ) + len_x; + + /*-----------------------------------------------------------------* + * First two half-frames (corresponding to current frame) + *-----------------------------------------------------------------*/ + if ( i < NHFR - 1 ) + { + pt3 = pt1; + pt5 = pt1; + + for ( j = sect0; j < nb_sect[i]; j++ ) /* loop for each section */ + { + /*-----------------------------------------------------------------* + * Find fixed vector energy + *-----------------------------------------------------------------*/ + + /* 1st set */ + k = (int16_t) ( pt1 - pt3 ); + for ( k = k + len[j]; k > 0; k-- ) + { + enr += *pt3 * *pt3; + pt3++; + } + enr_norm[j] = enr; + + /* Reduce complexity (length of 'enr1' section is equal or larger than 'enr') */ + pt5 = pt3; + enr1 = enr; + + /* 2nd set */ + k = (int16_t) ( pt1 - pt5 ); + for ( k = k + len1[j]; k > 0; k-- ) + { + enr1 += *pt5 * *pt5; + pt5++; + } + enr_norm1[j] = enr1; + } + + /*-----------------------------------------------------------------* + * Find correlation for the non-overlapping pitch lag values + *-----------------------------------------------------------------*/ + k = (int16_t) ( pt2 - pt1 ); + for ( k = k + pit_max[subsect0]; k >= 0; k-- ) + { + *pt_cor1++ = dotp( pt1, pt2--, sublen[0] ); + } + + /*-----------------------------------------------------------------* + * For each subsection, find the correlation + *-----------------------------------------------------------------*/ + for ( j = subsect0; j < nb_subsect[i]; j++ ) + { + len_temp = sublen[j]; + len_temp1 = sublen1[j]; + + k = (int16_t) ( pt2 - pt1 ); + if ( len_temp < len_temp1 ) + { + for ( k = k + pit_max[j + 1]; k >= 0; k-- ) + { + cor_temp = pt1[0] * pt2[0]; + for ( m = 1; m < len_temp; m++ ) + { + cor_temp += pt1[m] * pt2[m]; + } + *pt_cor1++ = cor_temp; + for ( ; m < len_temp1; m++ ) + { + cor_temp += pt1[m] * pt2[m]; + } + *pt_cor3++ = cor_temp; + pt2--; + } + } + else + { + for ( k = k + pit_max[j + 1]; k >= 0; k-- ) + { + cor_temp = pt1[0] * pt2[0]; + for ( m = 1; m < len_temp1; m++ ) + { + cor_temp += pt1[m] * pt2[m]; + } + *pt_cor3++ = cor_temp; + for ( ; m < len_temp; m++ ) + { + cor_temp += pt1[m] * pt2[m]; + } + *pt_cor1++ = cor_temp; + pt2--; + } + } + } + } + + /*-----------------------------------------------------------------* + * Third half-frame (look-ahead) + *-----------------------------------------------------------------*/ + + else + { + /*-----------------------------------------------------------------* + * For each section in both sets, find fixed vector energy + *-----------------------------------------------------------------*/ + + pt6 = pt1 + L_look / OPL_DECIM - 1; + pt3 = pt6; + pt5 = pt6; + + for ( j = sect0; j < nb_sect[i]; j++ ) /* loop for each section */ + { + /* 1st set */ + k = (int16_t) ( pt3 - pt6 ); + for ( k = k + len[j]; k > 0; k-- ) + { + enr += *pt3 * *pt3; + pt3--; + } + + enr_norm[j] = enr; + + pt5 = pt3; + enr1 = enr; + + /* 2nd set */ + k = (int16_t) ( pt5 - pt6 ); + for ( k = k + len1[j]; k > 0; k-- ) + { + enr1 += *pt5 * *pt5; + pt5--; + } + + enr_norm1[j] = enr1; + } + + /* Set pointers */ + if ( sect0 == 0 ) + { + pt2 = pt6 - pit_min; + k = 2; + } + else + { + pt2 = pt6 - pit_max[1] - 1; + k = pit_max[2] - pit_max[1]; + } + + /*-----------------------------------------------------------------* + * Find correlation for the non-overlapping pitch lag values + *-----------------------------------------------------------------*/ + + for ( ; k > 0; k-- ) + { + *pt_cor1 = 0; + for ( m = 0; m < sublen[0]; m++ ) + { + *pt_cor1 += pt6[-m] * pt2[-m]; + } + pt_cor1++; + pt2--; + } + + /*-----------------------------------------------------------------* + * For each subsection, find the correlation (overlapping pitch lag values) + *-----------------------------------------------------------------*/ + + for ( j = subsect0; j < nb_subsect[i]; j++ ) + { + len_temp = sublen[j]; + len_temp1 = sublen1[j]; + + k = pit_max[j + 1] - pit_max[j]; + if ( len_temp < len_temp1 ) + { + for ( ; k > 0; k-- ) + { + cor_temp = pt6[0] * pt2[0]; + for ( m = 1; m < len_temp; m++ ) + { + cor_temp += pt6[-m] * pt2[-m]; + } + *pt_cor1++ = cor_temp; + for ( ; m < len_temp1; m++ ) + { + cor_temp += pt6[-m] * pt2[-m]; + } + *pt_cor3++ = cor_temp; + pt2--; + } + } + else + { + for ( ; k > 0; k-- ) + { + cor_temp = pt6[0] * pt2[0]; + for ( m = 1; m < len_temp1; m++ ) + { + cor_temp += pt6[-m] * pt2[-m]; + } + *pt_cor3++ = cor_temp; + for ( ; m < len_temp; m++ ) + { + cor_temp += pt6[-m] * pt2[-m]; + } + *pt_cor1++ = cor_temp; + pt2--; + } + } + } + } + + /* Save unscaled correlation vector */ + mvr2r( pt_cor0, cor_buf, len_x ); + mvr2r( pt_cor0 + ( DELTA_COH - 1 ) + len_x, cor_buf + len_x, len_x1 ); + + /*-----------------------------------------------------------------* + * scale correlation function in the neighbourhood of + * the extrapolated pitch + *-----------------------------------------------------------------*/ + pt_cor1 = pt_cor2 - ( DELTA_COH - 1 ); + pt_cor3 = pt_cor4 - ( DELTA_COH - 1 ); + pt2 = scale1; + + for ( k = 0; k < 2 * DELTA_COH - 1; k++ ) + { + *pt_cor1++ *= ( *pt2 ); + *pt_cor3++ *= ( *pt2++ ); + } + + /* update for next half-frame */ + pt_cor2 = pt_cor0 - pit_min + old_tmp1; + pt_cor4 = pt_cor0 - pit_min1 + old_tmp1 + ( DELTA_COH - 1 ) + len_x; + /*-----------------------------------------------------------------* + * For each section, find maximum correlation and compute + * normalized correlation + *-----------------------------------------------------------------*/ + + pt_cor1 = pt_cor0; + offset = 0; + pt_cor3 = pt_cor0 + ( DELTA_COH - 1 ) + len_x; + offset1 = 0; + for ( j = sect0; j < nb_sect[i]; j++ ) /* loop for each section */ + { + /* 1st set */ + if ( i == 2 ) + { + offset_la = L_look / OPL_DECIM - 1 - ( len[j] - 1 ); + } + else + { + offset_la = 0; + } + + /* 2nd set */ + if ( i == 2 ) + { + offset_la1 = L_look / OPL_DECIM - 1 - ( len1[j] - 1 ); + } + else + { + offset_la1 = 0; + } + + /* 1st set of candidates */ + ind = maximum( pt_cor1, sec_length[j], 0 ) + offset; + pitchX[i][j] = ind + pit_min; + pt2 = pt1 - pitchX[i][j] + offset_la; /* selected moving vector */ + enr1 = dotp( pt2, pt2, len[j] ) + 0.01f; + enr1 = inv_sqrt( enr_norm[j] * enr1 ); /* 1/sqrt(energy) */ + corX[i][j] = cor_buf[ind] * enr1; /* find best normalized correlation per section */ + scaledX[i][j] = pt_cor0[ind] * enr1; /* find best scaled normalized correlation per section */ + + pt_cor1 += sec_length[j]; + offset = offset + sec_length[j]; + + /* 2nd set of candidates */ + ind1 = maximum( pt_cor3, sec_length1[j], 0 ) + offset1; + pitchX[i][j + NSECT] = ind1 + pit_min1; + pt4 = pt1 - pitchX[i][j + NSECT] + offset_la1; /* selected moving vector */ + enr1 = dotp( pt4, pt4, len1[j] ) + 0.01f; + enr1 = inv_sqrt( enr_norm1[j] * enr1 ); /* 1/sqrt(energy) */ + corX[i][j + NSECT] = cor_buf[ind1 + len_x] * enr1; /* find best normalized correlation per section */ + scaledX[i][j + NSECT] = pt_cor0[ind1 + ( DELTA_COH - 1 ) + len_x] * enr1; /* find best scaled normalized correlation per section */ + + pt_cor3 += sec_length1[j]; + offset1 = offset1 + sec_length1[j]; + } + } + /*-----------------------------------------------------------------* + * Favor a smaller delay if it happens that it has its multiple + * in the longer-delay sections (harmonics check) + *-----------------------------------------------------------------*/ + + for ( i = 0; i < 2; i++ ) /* loop for the 2 half-frames */ + { + fac = THRES0; + find_mult( &fac, pitchX[i][2], pitchX[i][3], pit_max[7], &scaledX[i][2], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in longest-delay section */ + find_mult( &fac, pitchX[i][1], pitchX[i][2], pit_max[5], &scaledX[i][1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ + + if ( ( sect0 == 0 ) && ( ( pitchX[i][0] * 2 ) >= pit_min_coding ) ) + { + find_mult( &fac, pitchX[i][0], pitchX[i][1], pit_max[3], &scaledX[i][0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ + } + fac = THRES0; + find_mult( &fac, pitchX[i][NSECT + 2], pitchX[i][NSECT + 3], pit_max[7], &scaledX[i][NSECT + 2], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in longest-delay section */ + find_mult( &fac, pitchX[i][NSECT + 1], pitchX[i][NSECT + 2], pit_max[6], &scaledX[i][NSECT + 1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ + + if ( ( sect0 == 0 ) && ( pitchX[i][NSECT + 0] * 2 >= pit_min_coding ) ) + { + find_mult( &fac, pitchX[i][NSECT + 0], pitchX[i][NSECT + 1], pit_max[4], &scaledX[i][NSECT + 0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ + } + } + + fac = THRES0; /* the look-ahead */ + find_mult( &fac, pitchX[i][2], pitchX[i][3], pit_max[7], &scaledX[i][2], old_pitch, old_corr, 2.0f, 2.0f ); /* Multiples in longest-delay section */ + find_mult( &fac, pitchX[i][1], pitchX[i][2], pit_max[5], &scaledX[i][1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ + + if ( ( sect0 == 0 ) && ( pitchX[i][0] * 2 >= pit_min_coding ) ) + { + find_mult( &fac, pitchX[i][0], pitchX[i][1], pit_max[3], &scaledX[i][0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ + } + + fac = THRES0; /* the look-ahead */ + find_mult( &fac, pitchX[i][NSECT + 2], pitchX[i][NSECT + 3], pit_max[7], &scaledX[i][NSECT + 2], old_pitch, old_corr, 2.0f, 2.0f ); /* Multiples in longest-delay section */ + find_mult( &fac, pitchX[i][NSECT + 1], pitchX[i][NSECT + 2], pit_max[6], &scaledX[i][NSECT + 1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ + + if ( ( sect0 == 0 ) && ( pitchX[i][NSECT + 0] * 2 >= pit_min_coding ) ) + { + find_mult( &fac, pitchX[i][NSECT + 0], pitchX[i][NSECT + 1], pit_max[4], &scaledX[i][NSECT + 0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ + } + + /*-----------------------------------------------------------------* + * Do 1st estimate for pitch values + * Adjust the normalized correlation using estimated noise level + * Compute the maximum scaling for the neighbour correlation + * reinforcement + *-----------------------------------------------------------------*/ + + for ( i = 0; i < NHFR; i++ ) + { + ind = maximum( scaledX[i] + sect0, (int16_t) ( NSECT - sect0 ), 0 ); + ind = ind + sect0; + ind_tmp[i] = ind; + pitch_tmp[i] = pitchX[i][ind]; + cor_tmp[i] = corX[i][ind]; + cor_tmp[i] += corr_shift; + + if ( cor_tmp[i] > 1.0f ) + { + cor_tmp[i] = 1.0f; + } + thres1[i] = THRES1 * cor_tmp[i]; /* Higher is the neighbour's correlation, higher is the weighting */ + + /* 2nd set of pitch candidates */ + ind1 = maximum( scaledX[i] + sect0 + NSECT, (int16_t) ( NSECT - sect0 ), 0 ); + ind1 += ( sect0 + NSECT ); + ind_tmp[i + NHFR] = ind1; + pitch_tmp[i + NHFR] = pitchX[i][ind1]; + cor_tmp[i + NHFR] = corX[i][ind1]; + cor_tmp[i + NHFR] += corr_shift; + + if ( cor_tmp[i + NHFR] > 1.0f ) + { + cor_tmp[i + NHFR] = 1.0f; + } + thres1[i + NHFR] = THRES1 * cor_tmp[i + NHFR]; /* Higher is the neighbour's correlation, higher is the weighting */ + } + /*-----------------------------------------------------------------* + * Take into account previous and next pitch values of the present + * frame and look-ahead. Choose the pitch lags and normalize + * correlations for each half-frame & look-ahead + *-----------------------------------------------------------------*/ + + pitch_neighbour( sect0, pitch_tmp, pitchX, cor_tmp, scaledX, thres1, ind_tmp ); + for ( i = 0; i < NHFR; i++ ) + { + ind = maximum( scaledX[i] + sect0, (int16_t) ( NSECT - sect0 ), 0 ); + ind = ind + sect0; + ind_corX = maximum( corX[i] + sect0, (int16_t) ( NSECT - sect0 ), 0 ); + ind_corX = ind_corX + sect0; + + ind1 = maximum( scaledX[i] + sect0 + NSECT, (int16_t) ( NSECT - sect0 ), 0 ); + ind1 += ( sect0 + NSECT ); + ind1_corX = maximum( corX[i] + sect0 + NSECT, (int16_t) ( NSECT - sect0 ), 0 ); + ind1_corX += ( sect0 + NSECT ); + + if ( scaledX[i][ind1] > scaledX[i][ind] ) + { + ind = ind1; + } + + if ( Opt_SC_VBR && corX[i][ind1_corX] > corX[i][ind_corX] ) + { + ind_corX = ind1_corX; + } + + if ( Opt_SC_VBR && ( pitchX[i][ind] * 0.4 < pitchX[i][ind_corX] ) && ( pitchX[i][ind] * 0.6 > pitchX[i][ind_corX] ) && ( corX[i][ind_corX] >= 0.9 ) ) /* && (pitchX[i][ind]>50)) */ + { + pitch[i] = pitchX[i][ind_corX]; + voicing[i] = corX[i][ind_corX]; + } + else + { + pitch[i] = pitchX[i][ind]; + voicing[i] = corX[i][ind]; + } + } + + /*-----------------------------------------------------------------* + * Increase the threshold for correlation reinforcement with + * the past if correlation is high and pitch is stable + *-----------------------------------------------------------------*/ + + cor_mean = 0.5f * ( voicing[0] + voicing[1] ) + corr_shift; + if ( cor_mean > 1.0f ) + { + cor_mean = 1.0f; + } + + /* pitch unstable in present frame or from previous frame or normalized correlation too low */ + coh_flag = pitch_coherence( (int16_t) pitch[0], (int16_t) pitch[1], COH_FAC, DELTA_COH ); + coh_flag1 = pitch_coherence( (int16_t) pitch[0], (int16_t) *old_pitch, COH_FAC, DELTA_COH ); + if ( ( coh_flag == 0 ) || ( coh_flag1 == 0 ) || ( cor_mean < CORR_TH0 ) || ( relE < THR_relE ) ) + { + *old_thres = 0.0f; /* Reset the threshold */ + } + else + { + *old_thres += ( 0.16f * cor_mean ); /* The threshold increase is directly dependent on normalized correlation */ + } + + if ( *old_thres > THRES3 ) + { + *old_thres = THRES3; + } + + if ( voicing[1] > voicing[0] ) + { + *old_corr = voicing[1]; + } + else + { + *old_corr = cor_mean; + } + + /*-----------------------------------------------------------------* + * Extrapolate the pitch value for the next frame by estimating + * the pitch evolution. This value is added to the old_pitch + * in the next frame and is then used when the normalized + * correlation is reinforced by the past estimate + *-----------------------------------------------------------------*/ + + tmp_buf[0] = *old_pitch; + for ( i = 0; i < NHFR; i++ ) + { + tmp_buf[i + 1] = pitch[i]; + } + + *delta_pit = 0; + cnt = 0; + for ( i = 0; i < NHFR; i++ ) + { + diff = tmp_buf[i + 1] - tmp_buf[i]; + coh_flag = pitch_coherence( (int16_t) tmp_buf[i], (int16_t) tmp_buf[i + 1], COH_FAC, DELTA_COH ); + if ( coh_flag != 0 ) + { + *delta_pit = *delta_pit + diff; + cnt++; + } + } + + if ( cnt == 2 ) + { + *delta_pit /= 2; + } + + if ( cnt == 3 ) + { + *delta_pit /= 3; + } + + /*-----------------------------------------------------------------* + * update old pitch, upsample pitch + *-----------------------------------------------------------------*/ + + *old_pitch = pitch[1]; + + for ( i = 0; i < NHFR; i++ ) + { + pitch[i] *= OPL_DECIM; + } + + + return; +} + +/*-----------------------------------------------------------------* + * find_mult + * + * Verifies whether max pitch delays in higher sections have multiples + * in lower sections + *-----------------------------------------------------------------*/ + +static void find_mult( + float *fac, /* i/o: correlation scaling factor */ + const int16_t pitch0, /* i : pitch of max correlation in the c section */ + const int16_t pitch1, /* i : pitch of max correlation in the longer-delay section */ + const int16_t pit_max0, /* i : max pitch delay in the longer-delay section */ + float *corr, /* i/o: max correlation in the shorter-delay section */ + int16_t *old_pitch, /* i : pitch from previous frame */ + float *old_corr, /* i : max correlation from previous frame */ + float delta, /* i : initial multiples search range */ + const float step /* i : increment in range of multiples search */ +) +{ + int16_t pit_min; + + pit_min = 2 * pitch0; /* double the shorter-delay section pitch */ + while ( pit_min <= pit_max0 + (int16_t) delta ) /* check for section boundary */ + { + if ( abs( pit_min - pitch1 ) <= (int16_t) delta ) /* if multiple in the allowed range */ + { + if ( *old_corr < 0.6f || (float) pitch0 > (float) *old_pitch * 0.4f ) + { + /* reinforce the normalized correlation */ + *corr *= *fac; + } + *fac *= THRES0; + } + pit_min = pit_min + pitch0; /* next multiple */ + delta += step; /* add the incertitude to the allowed range */ + } + return; +} + +/*---------------------------------------------------------------------------* + * pitch_neighbour + * + * Verifies if the maximum correlation pitch lag is coherent with neighbour + * values + *---------------------------------------------------------------------------*/ +static void pitch_neighbour( + const int16_t sect0, /* i : indicates whether section 0 (below PIT_MIN) is used */ + const int16_t pitch_tmp[], /* i : estimated pitch values for each half-frame & look-ahead */ + int16_t pitch[NHFR][2 * NSECT], /* i : tested pitch values for each half-frame & look-ahead */ + const float corr_tmp[], /* i : raw normalized correlation (before different scalings) */ + float corr[NHFR][2 * NSECT], /* i/o: normalized correlation for each half-frame & look-ahead */ + const float thres1[2 * NHFR], /* i : maximum scaling for the immediate neighbours */ + const int16_t ind_tmp[2 * NHFR] /* i : maximum section indices */ +) +{ + int16_t delta, i, j, k, K, coh_flag; + + for ( k = sect0; k < NSECT; k++ ) /* loop for each section */ + { + if ( k == ( NSECT - 1 ) ) + { + K = 2; /* the number of tests depends on the section */ + } + else + { + K = 3; + } + for ( i = 0; i < K; i++ ) /* loop for the 2 half-frames and the look-ahead */ + { + /* Compare pitch values of the present frame */ + for ( j = 0; j < K; j++ ) /* Verify pitch coherence with neighbours (including past pitch) */ + { + if ( j != i ) /* Exclude itself */ + { + if ( corr_tmp[j] >= CORR_TH1 ) /* reinforcement can happen only if the correlation is high enough */ + { + delta = (int16_t) abs( pitch[i][k] - pitch_tmp[j] ); /* Find difference of pitch values */ + coh_flag = pitch_coherence( (int16_t) pitch[i][k], (int16_t) pitch_tmp[j], COH_FAC, DELTA_COH ); + if ( coh_flag != 0 ) + { + /* Favour section-wise stability */ + if ( ind_tmp[j] == k ) + { + corr[i][k] *= ( -thres1[j] / DELTA_COH * delta + thres1[j] + 1.0f ); /* Favour closer values */ + } + else + { + corr[i][k] *= ( -thres1[j] / DELTA_COH * 0.625f * delta + thres1[j] * 0.625f + 1.0f ); + } + } + } + } + } + } + } + /*---------------------* + * 2nd set of sections + *---------------------*/ + for ( k = sect0; k < NSECT; k++ ) /* loop for each section */ + { + if ( k == ( NSECT - 1 ) ) + { + K = 2; /* the number of tests depends on the section */ + } + else + { + K = 3; + } + for ( i = 0; i < K; i++ ) /* loop for the 2 half-frames and the look-ahead */ + { + /* Compare pitch values of the present frame */ + for ( j = 0; j < K; j++ ) /* Verify pitch coherence with neighbours (including past pitch) */ + { + if ( j != i ) /* Exclude itself */ + { + if ( corr_tmp[j + NHFR] >= CORR_TH1 ) /* reinforcement can happen only if the correlation is high enough */ + { + delta = (int16_t) abs( pitch[i][NSECT + k] - pitch_tmp[j + NHFR] ); /* Find difference of pitch values */ + coh_flag = pitch_coherence( (int16_t) pitch[i][NSECT + k], (int16_t) pitch_tmp[j + NHFR], COH_FAC, DELTA_COH ); + if ( coh_flag != 0 ) + { + /* Favour section-wise stability */ + if ( ind_tmp[j + NHFR] == ( NSECT + k ) ) + { + corr[i][NSECT + k] *= ( -thres1[j + NHFR] / DELTA_COH * delta + thres1[j + NHFR] + 1.0f ); /* Favour closer values */ + } + else + { + corr[i][NSECT + k] *= ( -thres1[j + NHFR] / DELTA_COH * 0.625f * delta + thres1[j + NHFR] * 0.625f + 1.0f ); + } + } + } + } + } + } + } + return; +} + +/*-----------------------------------------------------------------* + * pitch_coherence + * + * Verify if pitch evolution is smooth + *-----------------------------------------------------------------*/ + +static int16_t pitch_coherence( + const int16_t pitch0, /* i : first pitch to compare */ + const int16_t pitch1, /* i : 2nd pitch to compare */ + const float fac_max, /* i : max ratio of both values */ + const int16_t diff_max /* i : max difference of both values */ +) +{ + int16_t smaller, larger; + if ( pitch1 < pitch0 ) /* Finds smaller and larger of 2 short values */ + { + smaller = pitch1; + larger = pitch0; + } + else + { + smaller = pitch0; + larger = pitch1; + } + if ( ( (float) larger < fac_max * (float) smaller ) && ( ( larger - smaller ) < diff_max ) ) + { + return 1; + } + else + { + return 0; + } +} + + +/*-----------------------------------------------------------------* + * lp_decim2: + * + * Decimate a vector by 2 with 2nd order fir filter. + *-----------------------------------------------------------------*/ + +static void lp_decim2( + const float x[], /* i : signal to process */ + float y[], /* o : processed signals */ + const int16_t l, /* i : size of filtering */ + float *mem /* i/o: memory (size=3) */ +) +{ + const float *p_h; + float temp, *p_x, x_buf[L_FRAME_PLUS + L_MEM]; + int16_t i, j, k; + + /* copy initial filter states into buffer */ + p_x = x_buf; + for ( i = 0; i < L_MEM; i++ ) + { + *p_x++ = mem[i]; + } + for ( i = 0; i < l; i++ ) + { + *p_x++ = x[i]; + } + for ( i = 0; i < L_MEM; i++ ) + { + mem[i] = x[l - L_MEM + i]; + } + for ( i = 0, j = 0; i < l; i += 2, j++ ) + { + p_x = &x_buf[i]; + p_h = h_fir; + temp = 0.0f; + + for ( k = 0; k < L_FIR_PO; k++ ) + { + temp += *p_x++ * *p_h++; + } + y[j] = temp; + } + return; +} diff --git a/lib_enc/pitch_ol2.c b/lib_enc/pitch_ol2.c new file mode 100644 index 0000000000..13f5bd33de --- /dev/null +++ b/lib_enc/pitch_ol2.c @@ -0,0 +1,337 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_enc.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define MAX_DELTA 16 /* half-length of the delta search */ +#define COR_BUF_LEN ( L_INTERPOL1 * 2 + MAX_DELTA * 2 + 1 ) + +/*-------------------------------------------------------------------* + * pitch_ol2() + * + * Open-loop pitch precision improvement with 1/4 resolution + * The pitch is searched in the interval PIT_MAX ) + { + t0_max = PIT_MAX; + } + t_max = t0_max + L_INTERPOL1; + + pt_wsp = wsp + pos; + pt_cor = cor; + for ( t = t_min; t <= t_max; t++ ) + { + *pt_cor++ = dotp( pt_wsp, pt_wsp - t, L_SUBFR ); + } + + pt_cor = cor + L_INTERPOL1; + cor_max = *pt_cor++; + t1 = t0_min; + for ( t = t0_min + 1; t <= t0_max; t++ ) + { + if ( *pt_cor > cor_max ) + { + cor_max = *pt_cor; + t1 = t; + } + pt_cor++; + } + + /*------------------------------------------------------------------* + * Search fractional pitch with 1/4 subsample resolution. + * search the fractions around t0 and choose the one which maximizes + * the interpolated normalized correlation. + *-----------------------------------------------------------------*/ + + pt_cor = cor + L_INTERPOL1 - t0_min; + t0 = t1; + + step = 1; /* 1/4 subsample resolution */ + fraction = 1; + + if ( t0 == t0_min ) /* Limit case */ + { + fraction = 0; + cor_max = interpolation( &pt_cor[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); + } + else /* Process negative fractions */ + { + t0--; + cor_max = interpolation( &pt_cor[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); + for ( i = ( fraction + step ); i <= 3; i = i + step ) + { + temp = interpolation( &pt_cor[t0], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + } + } + } + + for ( i = 0; i <= 3; i = i + step ) /* Process positive fractions */ + { + temp = interpolation( &pt_cor[t1], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + t0 = t1; + } + } + + *pitch_fr = t0 + (float) fraction / 4.0f; + pred_lt4( pt_wsp, wsp_fr, t0, fraction, L_SUBFR, E_ROM_inter4_1, 4, PIT_UP_SAMP ); + + enr_wsp = dotp( pt_wsp, pt_wsp, L_SUBFR ) + 0.01f; + enr_old = dotp( wsp_fr, wsp_fr, L_SUBFR ) + 0.01f; + *voicing_fr = cor_max * inv_sqrt( enr_wsp * enr_old ); + + return; +} + + +/*-------------------------------------------------------------------* + * StableHighPitchDetect() + * + * Very short stable pitch detection + *-------------------------------------------------------------------*/ + +void StableHighPitchDetect( + int16_t *flag_spitch, /* o : flag to indicate very short stable pitch*/ + int16_t pitch[], /* i/o: OL pitch buffer */ + const float voicing[], /* i : OL pitch gains */ + const float Bin_E[], /* i : per bin log energy spectrum */ + const float wsp[], /* i : weighted speech */ + const int16_t localVAD, /* i : local VAD flag */ + float *voicing_sm, /* i/o: smoothed open-loop pitch gains */ + float *voicing0_sm, /* i/o: smoothed high pitch gains */ + float *LF_EnergyRatio_sm, /* i/o: smoothed [0, 300Hz] relative peak energy*/ + int16_t *predecision_flag, /* i/o: predecision flag */ + float *diff_sm, /* i/o: smoothed pitch frequency difference */ + float *energy_sm /* i/o: smoothed energy around pitch frequency */ +) +{ + int16_t i, pitch_freq_point, pit_min_up; + int16_t T, Tp, pit_min; + + float voicing_m; + float energy0, energy1, ratio, cor_max, diff, sum_energy; + const float *pt_wsp; + + voicing_m = mean( voicing, 3 ); + *voicing_sm = 0.75f * ( *voicing_sm ) + 0.25f * voicing_m; + + + /* initial short pitch possibility pre-decision */ + pitch_freq_point = (int16_t) ( L_FFT / pitch[1] + 0.5f ); + diff = 0.0f; + sum_energy = 0.0f; + + for ( i = 1; i < 2 * pitch_freq_point; i++ ) + { + diff += ( Bin_E[pitch_freq_point] - Bin_E[i] ); + sum_energy += Bin_E[i]; + } + sum_energy /= ( 2 * pitch_freq_point - 1 ); + + *diff_sm = 0.2f * diff + 0.8f * *diff_sm; + *energy_sm = 0.2f * sum_energy + 0.8f * *energy_sm; + diff /= sum_energy; + + if ( *diff_sm < -10 && *energy_sm < 38.5 && diff < -0.8 ) + { + *predecision_flag = 1; + } + + if ( *diff_sm > 10 && *energy_sm > 83 && diff > 0.5 ) + { + *predecision_flag = 0; + } + + /* short pitch possiblity pre-decision */ + maximum( Bin_E, 7, &energy0 ); + maximum( Bin_E + 8, 7, &energy1 ); + ratio = max( energy1 - energy0, 0 ); + ratio *= max( voicing_m, 0 ); + + *LF_EnergyRatio_sm = ( 15 * ( *LF_EnergyRatio_sm ) + ratio ) / 16; + + if ( *LF_EnergyRatio_sm > 35 || ratio > 50 ) + { + *predecision_flag = 1; + } + + if ( *LF_EnergyRatio_sm < 16 ) + { + *predecision_flag = 0; + } + + /* short pitch candidate detection */ + Tp = pitch[1]; + cor_max = 0; + + pt_wsp = wsp + 3 * L_SUBFR; + pit_min = PIT_MIN_DOUBLEEXTEND; + pit_min_up = PIT_MIN; + + for ( T = pit_min; T <= pit_min_up; T++ ) + { + energy1 = dotp( pt_wsp, pt_wsp - T, L_SUBFR ); + + if ( energy1 > cor_max || T == pit_min ) + { + cor_max = energy1; + Tp = T; + } + } + + energy0 = dotp( pt_wsp, pt_wsp, L_SUBFR ) + 0.01f; + energy1 = dotp( pt_wsp - Tp, pt_wsp - Tp, L_SUBFR ) + 0.01f; + cor_max *= inv_sqrt( energy0 * energy1 ); + *voicing0_sm = 0.75f * ( *voicing0_sm ) + 0.25f * cor_max; + + /* final short pitch correction */ + *flag_spitch = 0; + if ( localVAD && *predecision_flag && *voicing0_sm > 0.65f && *voicing0_sm > 0.7f * ( *voicing_sm ) ) + { + *flag_spitch = 1; + + pitch[0] = Tp; + pitch[1] = Tp; + pitch[2] = Tp; + } + + return; +} + +/*-------------------------------------------------------------------* + * pitchDoubling_det() + * Multiple pitch doubling detector + * + *-------------------------------------------------------------------*/ + +void pitchDoubling_det( + const float *wspeech, + int16_t *pitch_ol, + float *pitch_fr, + float *voicing_fr ) +{ + float new_op_fr[2]; + float new_voicing[2]; + int16_t new_Top[2]; + int16_t m, T; + + /*save initial values*/ + new_Top[0] = pitch_ol[0]; + new_Top[1] = pitch_ol[1]; + for ( m = 2; m < 5; m++ ) + { + T = pitch_ol[0] / m; + if ( T >= PIT_MIN_12k8 ) + { + pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[0], &new_voicing[0], 0, wspeech, 2 ); + pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[1], &new_voicing[1], L_SUBFR, wspeech, 2 ); + + if ( ( new_voicing[0] + new_voicing[1] ) > ( voicing_fr[0] + voicing_fr[1] ) ) + { + new_Top[0] = T; + pitch_fr[0] = new_op_fr[0]; + pitch_fr[1] = new_op_fr[1]; + voicing_fr[0] = new_voicing[0]; + voicing_fr[1] = new_voicing[1]; + } + } + + T = pitch_ol[1] / m; + if ( T >= PIT_MIN_12k8 ) + { + pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[0], &new_voicing[0], 2 * L_SUBFR, wspeech, 2 ); + pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[1], &new_voicing[1], 3 * L_SUBFR, wspeech, 2 ); + + if ( ( new_voicing[0] + new_voicing[1] ) > ( voicing_fr[2] + voicing_fr[3] ) ) + { + new_Top[1] = T; + pitch_fr[2] = new_op_fr[0]; + pitch_fr[3] = new_op_fr[1]; + voicing_fr[2] = new_voicing[0]; + voicing_fr[3] = new_voicing[1]; + } + } + } + pitch_ol[0] = new_Top[0]; + pitch_ol[1] = new_Top[1]; + + return; +} diff --git a/lib_enc/plc_enc_ext.c b/lib_enc/plc_enc_ext.c new file mode 100644 index 0000000000..70b573c5a9 --- /dev/null +++ b/lib_enc/plc_enc_ext.c @@ -0,0 +1,137 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "typedef.h" +#include "stat_enc.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +#define NBITS_GACELP 5 + +/*-------------------------------------------------------------------* + * init_PLC_enc() + * + * + *-------------------------------------------------------------------*/ + +void init_PLC_enc( + PLC_ENC_EVS_HANDLE hPlcExt, + const int32_t sr_core ) +{ + int16_t itr; + + hPlcExt->enableGplc = 0; + hPlcExt->calcOnlylsf = 1; + hPlcExt->nBits = NBITS_GACELP; + hPlcExt->stab_fac = 0; + set_f( hPlcExt->lsfoldbfi0, 0.0f, M ); + set_f( hPlcExt->lsfoldbfi1, 0.0f, M ); + set_f( hPlcExt->lsf_adaptive_mean, 0.0f, M ); + set_f( hPlcExt->old_exc, 0.0f, 8 ); + set_f( hPlcExt->mem_MA, 0.0f, M ); + set_f( hPlcExt->lsfold, 0.0f, M ); + set_f( hPlcExt->lspold, 0.0f, M ); + + if ( sr_core == INT_FS_12k8 ) + { + hPlcExt->T0_4th = L_SUBFR; + hPlcExt->T0 = L_SUBFR; + for ( itr = 0; itr < M; itr++ ) + { + hPlcExt->lsf_con[itr] = lsf_init[itr]; + hPlcExt->last_lsf_ref[itr] = lsf_init[itr]; + hPlcExt->last_lsf_con[itr] = lsf_init[itr]; + } + } + else + { + hPlcExt->T0_4th = L_SUBFR; + hPlcExt->T0 = L_SUBFR; + for ( itr = 0; itr < M; itr++ ) + { + hPlcExt->lsf_con[itr] = lsf_init[itr] * 1.25f; + hPlcExt->last_lsf_ref[itr] = lsf_init[itr] * 1.25f; + hPlcExt->last_lsf_con[itr] = lsf_init[itr] * 1.25f; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * gPLC_encInfo() + * + * Function to extract and write guided information + *-------------------------------------------------------------------*/ + +void gPLC_encInfo( + PLC_ENC_EVS_HANDLE hPlcExt, + const int32_t total_brate, + const int16_t bwidth, + const int16_t last_clas, + const int16_t coder_type ) +{ + if ( hPlcExt ) + { + hPlcExt->calcOnlylsf = 1; + if ( bwidth >= WB && total_brate == ACELP_24k40 ) + { + hPlcExt->enableGplc = 1; + + if ( ( last_clas == VOICED_CLAS || last_clas == ONSET ) && ( coder_type == VOICED || coder_type == GENERIC ) ) + { + hPlcExt->nBits = NBITS_GACELP; + hPlcExt->calcOnlylsf = 0; + } + else + { + hPlcExt->nBits = 1; + } + } + else + { + hPlcExt->enableGplc = 0; + hPlcExt->nBits = 0; + } + } + + return; +} diff --git a/lib_enc/ppp_enc.c b/lib_enc/ppp_enc.c new file mode 100644 index 0000000000..887be74fd5 --- /dev/null +++ b/lib_enc/ppp_enc.c @@ -0,0 +1,470 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * DTFS_getSpEngyFromResAmp() + * + * Get speech energy from the DTFS + *-------------------------------------------------------------------*/ + +static float DTFS_getSpEngyFromResAmp( + DTFS_STRUCTURE X, /* i : DTFS */ + float lband, /* i : Low band end to get energy from */ + float hband, /* i : High band end to get energy from */ + const float *curr_lsp /* i : LPCs */ +) +{ + int16_t i, k; + float w, tmp, Re, Im; + double en, freq, fdiff; + + fdiff = (float) INT_FS_12k8 / X.lag; + + if ( hband == X.upper_cut_off_freq ) + { + hband = 4001.0; + } + + en = 0.0f; + for ( freq = 0.0, k = 0; k <= min( X.lag >> 1, X.nH_4kHz ); k++, freq += fdiff ) + { + if ( X.a[k] < 0.0 ) + { + X.a[k] = 0.0; + } + + if ( freq < hband && freq >= lband ) + { + Re = 1.0f; + Im = 0.0f; + tmp = (float) ( PI2 * freq / (float) INT_FS_12k8 ); + for ( i = 0, w = tmp; i < M + 1; i++, w += tmp ) + { + Re += (float) ( curr_lsp[i] * cos( w ) ); + Im -= (float) ( curr_lsp[i] * sin( w ) ); + } + if ( k == 0 || ( X.lag % 2 == 0 && k == X.lag >> 1 ) ) + { + en += X.a[k] * X.a[k] / ( Re * Re + Im * Im ); + } + else + { + en += 2.0 * X.a[k] * X.a[k] / ( Re * Re + Im * Im ); + } + } + } + return ( (float) en ); +} + +/*-------------------------------------------------------------------* + * DTFS_quant_cw() + * + * DTFS quantization + *-------------------------------------------------------------------*/ + +#define P_CBSIZE 64 + +static int16_t DTFS_quant_cw( + DTFS_STRUCTURE *X, /* i/o: DTFS unquant inp, quant out */ + const int16_t pl, /* i : Previous lag */ + const float *curr_lpc, /* i : LPC */ + int16_t *POWER_IDX, /* o : Power index */ + int16_t *AMP_IDX, /* o : Amplitude index */ + float *lastLgainE, /* i/o: last frame lowband gain */ + float *lastHgainE, /* i/o: last frame highband gain */ + float *lasterbE /* i/o: last frame ERB vector */ +) +{ + int16_t num_erb = 0; + const float( *PowerCB )[2] = NULL; + float G_CURR_ERB[NUM_ERB_WB]; + float G_A_POWER[2]; + float tmp, w[2], target1, target2, error, minerror; + float mfreq[NUM_ERB_WB], diff_erb[NUM_ERB_WB], curr_erb[NUM_ERB_WB]; + int16_t j, slot[NUM_ERB_WB], bincount; + int16_t returnFlag = 1; + float amperror; + + if ( X->upper_cut_off_freq == 4000.0 ) + { + num_erb = NUM_ERB_NB; + PowerCB = PowerCB_NB; + } + else if ( X->upper_cut_off_freq == 6400.0 ) + { + num_erb = NUM_ERB_WB; + PowerCB = PowerCB_WB; + } + + /* Getting the Speech Domain Energy LOG Ratio */ + w[0] = (float) max( 1E-10, log10( DTFS_getSpEngyFromResAmp( *X, 0.0, 1104.5, curr_lpc ) ) ); + w[1] = (float) max( 1E-10, log10( DTFS_getSpEngyFromResAmp( *X, 1104.5, X->upper_cut_off_freq, curr_lpc ) ) ); + tmp = w[0] + w[1]; + w[0] /= tmp; + w[1] /= tmp; + + /* Power Quantization */ + G_A_POWER[0] = (float) log10( X->lag * DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, X ) ); + G_A_POWER[1] = (float) log10( X->lag * DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, 1.0, X ) ); + target1 = G_A_POWER[0] - *lastLgainE; + target2 = G_A_POWER[1] - *lastHgainE; + minerror = (float) HUGE_VAL; + *POWER_IDX = -1; + for ( j = 0; j < P_CBSIZE; j++ ) + { + error = (float) ( w[0] * fabs( target1 - PowerCB[j][0] ) + w[1] * fabs( target2 - PowerCB[j][1] ) ); + if ( ( target1 >= PowerCB[j][0] ) && ( target2 >= PowerCB[j][1] ) ) + { + error *= 0.8f; + } + if ( error < minerror ) + { + minerror = error; + *POWER_IDX = j; + } + } + DTFS_to_erb( *X, curr_erb ); + + for ( j = 0; j < num_erb; j++ ) + { + G_CURR_ERB[j] = curr_erb[j]; + } + erb_slot( X->lag, slot, mfreq, num_erb ); + /* Amplitude Quantization */ + erb_diff( lasterbE, pl, curr_erb, X->lag, curr_lpc, diff_erb, AMP_IDX, num_erb ); + + /* Amplitude Dequantization */ + erb_add( curr_erb, X->lag, lasterbE, pl, AMP_IDX, num_erb ); + curr_erb[0] = curr_erb[1] * 0.3f; + curr_erb[num_erb - 2] = curr_erb[num_erb - 3] * 0.3f; + curr_erb[num_erb - 1] = 0; + /* Determine if the amplitude quantization is good enough */ + amperror = 0.0; + bincount = 0; + for ( j = 1; j < 10; j++ ) + { + if ( slot[j] != 0 ) + { + amperror += (float) ( fabs( G_CURR_ERB[j] - curr_erb[j] ) ); + bincount++; + } + } + amperror /= bincount; + + if ( ( amperror > 0.47 ) && ( target1 > -0.4 ) ) + { + returnFlag = 0; /* Bumping up */ + } + + DTFS_erb_inv( curr_erb, slot, mfreq, X, num_erb ); + + /* Back up the lasterbE memory after power normalization */ + DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, X ); + DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, 1.0, X ); + + DTFS_to_erb( *X, lasterbE ); + + /* Power Dequantization */ + *lastLgainE += (float) PowerCB[*POWER_IDX][0]; + *lastHgainE += (float) PowerCB[*POWER_IDX][1]; + target1 = (float) pow( 10.0, (double) ( *lastLgainE ) ) / X->lag; + + if ( !( target1 >= 0.0 ) ) + { + target1 = 0; + } + + DTFS_setEngyHarm( 92.0f, 1104.5f, 0.0f, 1104.5f, target1, X ); + target2 = (float) pow( 10.0, (double) ( *lastHgainE ) ) / X->lag; + + if ( !( target2 >= 0.0 ) ) + { + target2 = 0; + } + + DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, target2, X ); + + return returnFlag; /* amp quant performance pass/fail */ +} + +/*-------------------------------------------------------------------* + * DTFS_alignment_fine_new() + * + * Shift value for DTFS finer alignment. + *-------------------------------------------------------------------*/ + +static float DTFS_alignment_fine_new( + DTFS_STRUCTURE X1_DTFS, /* i : X1 the reference DTFS to keep fixed */ + DTFS_STRUCTURE X2_DTFS, /* i : X2 the test DTFS to shift to find best match */ + float Eshift /* i : Expected shift - coarse value */ +) +{ + int16_t k; + float maxcorr, corr, Adiff, diff, tmp, tmp1, fshift, n; + + if ( X1_DTFS.lag < X2_DTFS.lag ) + { + DTFS_zeroPadd( X2_DTFS.lag, &X1_DTFS ); + } + maxcorr = (float) -HUGE_VAL; + fshift = Eshift; + Adiff = 20.0f; + diff = 1.0f; + for ( n = Eshift - Adiff + 1; n <= Eshift + Adiff; n += diff ) + { + corr = tmp = 0.0; + /* bit-exact optimization - PI2/X2_DTFS.lag should be counted as a single divide outside loops */ + tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); + + for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH ); k++, tmp += tmp1 ) + { + corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); + corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); + } + if ( corr * ( 1.0f - 0.01f * fabs( n - Eshift ) ) > maxcorr ) + { + fshift = n; + maxcorr = corr; + } + } + + return fshift; /* o : shift value to shift X2 by */ +} + + +/*-------------------------------------------------------------------* + * ppp_quarter_encoder() + * + * PPP quarter encoder + *--------------------------------------------------------------------*/ + +ivas_error ppp_quarter_encoder( + int16_t *returnFlag, /* o : return value */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + DTFS_STRUCTURE *CURRCW_Q, /* o : Quantized (amp/phase) DTFS */ + DTFS_STRUCTURE *TARGETCW, /* o : DTFS with quant phase but unquant Amp */ + const int16_t prevCW_lag, /* i : previous lag */ + DTFS_STRUCTURE vCURRCW_NQ, /* i : Unquantized DTFS */ + const float *curr_lpc, /* i : LPCS */ + float *lastLgainE, /* i/o: last low band gain */ + float *lastHgainE, /* i/o: last high band gain */ + float *lasterbE, /* i/o: last ERB vector */ + DTFS_STRUCTURE PREV_CW_E /* i : past DTFS */ +) +{ + DTFS_STRUCTURE *PREVDTFS; + float tmp, temp_pl, temp_l; + int16_t l; + int16_t POWER_IDX; /* Codebook index for the power quantization for PPP */ + int16_t AMP_IDX[2]; /* Codebook index for the Amplitude quantization for PPP */ + float Erot = 0.0, z = 0.0; + ivas_error error; + + error = IVAS_ERR_OK; + *returnFlag = 1; + + if ( ( error = DTFS_new( &PREVDTFS ) ) != IVAS_ERR_OK ) + { + return error; + } + + + DTFS_copy( CURRCW_Q, vCURRCW_NQ ); + DTFS_copy( PREVDTFS, PREV_CW_E ); + + l = CURRCW_Q->lag; + temp_l = (float) CURRCW_Q->lag; + temp_pl = (float) prevCW_lag; + + DTFS_adjustLag( PREVDTFS, l ); + + z = ( ( L_FRAME - temp_l ) * ( temp_l + temp_pl ) ) / ( 2 * temp_l * temp_pl ); + + Erot = (float) ( temp_l - rint_new( temp_l * ( z - floor( z ) ) ) ); + + DTFS_phaseShift( PREVDTFS, (float) ( PI2 * Erot / CURRCW_Q->lag ) ); + DTFS_car2pol( PREVDTFS ); + + /* Amplitude Quantization */ + DTFS_car2pol( CURRCW_Q ); /* at this point currCW_q=curr_nq */ + + *returnFlag = DTFS_quant_cw( CURRCW_Q, prevCW_lag, curr_lpc, &POWER_IDX, AMP_IDX, lastLgainE, lastHgainE, lasterbE ); + + push_indice( hBstr, IND_AMP0, AMP_IDX[0], 6 ); + push_indice( hBstr, IND_AMP1, AMP_IDX[1], 6 ); + push_indice( hBstr, IND_POWER, POWER_IDX, 6 ); + + DTFS_copy( TARGETCW, *CURRCW_Q ); + + /* Copying phase spectrum over */ + mvr2r( PREVDTFS->b, CURRCW_Q->b, (int16_t) ( CURRCW_Q->lag >> 1 ) + 1 ); + + DTFS_pol2car( CURRCW_Q ); + DTFS_pol2car( TARGETCW ); + tmp = DTFS_alignment_fine_new( *TARGETCW, *CURRCW_Q, 0.0 ); + + if ( ( ( tmp + 3 ) > 7 ) || ( ( tmp + 3 ) < 0 ) ) + { + tmp = 0; + *returnFlag = 0; + } + + DTFS_phaseShift( CURRCW_Q, (float) ( PI2 * tmp / CURRCW_Q->lag ) ); + + push_indice( hBstr, IND_GLOBAL_ALIGNMENT, (int16_t) ( tmp + 3 ), 3 ); + + count_free( PREVDTFS ); + + return error; +} + +/*-------------------------------------------------------------------* + * set_ppp_mode() + * + * Determine if the current frame should be coded by PPP or not + * Impose PPP - CELP - CELP pattern + *-------------------------------------------------------------------*/ + +void set_ppp_mode( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t noisy_speech_HO, /* i : SC-VBR noisy speech HO flag */ + const int16_t clean_speech_HO, /* i : SC-VBR clean speech HO flag */ + const int16_t NB_speech_HO, /* i : SC-VBR NB speech HO flag */ + const int16_t localVAD_he /* i : HE-SAD flag without hangover*/ +) +{ + SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; + + if ( st->vad_flag == 1 && + ( noisy_speech_HO == 1 || clean_speech_HO == 1 || NB_speech_HO == 1 ) && + ( st->localVAD == 0 || localVAD_he == 0 ) ) + { + st->coder_type = UNVOICED; + } + + if ( st->coder_type == INACTIVE && st->vad_flag == 0 && hSC_VBR->last_nelp_mode == 1 ) /* avoid HO frame go to GSC */ + { + st->coder_type = UNVOICED; + } + + /* force the coder to NELP mode during the first five frames */ + /* this will indicate the decoder that the coder is operating in the VBR mode */ + if ( st->ini_frame < 5 ) + { + st->coder_type = UNVOICED; + st->vad_flag = 1; + } + + /* Pattern PPP-CELP-CELP (pppcountE holds number of consecutive PPP frames) */ + if ( st->coder_type != VOICED || st->last_coder_type == TRANSITION ) + { + /* ensure no transient to PPP transition */ + hSC_VBR->pppcountE = 0; + } + else + { + /* current mode is voiced */ + hSC_VBR->pppcountE++; + + if ( ( hSC_VBR->pppcountE == 1 && hSC_VBR->last_last_ppp_mode != 1 && !hSC_VBR->rate_control ) || + ( hSC_VBR->pppcountE == 1 && hSC_VBR->mode_QQF ) ) + { + hSC_VBR->ppp_mode = 1; + st->core_brate = PPP_NELP_2k80; + } + else if ( hSC_VBR->pppcountE == 2 ) + { + if ( hSC_VBR->last_ppp_mode == 1 && !hSC_VBR->mode_QQF ) + { + /* QFF mode */ + hSC_VBR->ppp_mode = 0; + } + else + { + /* QQF Mode */ + hSC_VBR->ppp_mode = 1; + st->core_brate = PPP_NELP_2k80; + } + } + else + { + hSC_VBR->ppp_mode = 0; + hSC_VBR->pppcountE = 0; + } + } + + if ( hSC_VBR->ppp_mode == 0 && hSC_VBR->set_ppp_generic == 1 ) + { + hSC_VBR->set_ppp_generic = 0; + st->coder_type = GENERIC; + } + + if ( st->last_core == HQ_CORE ) + { + hSC_VBR->ppp_mode = 0; + hSC_VBR->set_ppp_generic = 0; + st->coder_type = TRANSITION; + } + + if ( hSC_VBR->last_ppp_mode && !hSC_VBR->ppp_mode && st->sp_aud_decision1 && st->bwidth == NB && st->Opt_SC_VBR ) /*if it were about to go from ppp->HQ*/ + { + hSC_VBR->avoid_HQ_VBR_NB = 1; + st->coder_type = GENERIC; + } + + if ( hSC_VBR->last_nelp_mode && st->sp_aud_decision1 && st->bwidth == NB && st->Opt_SC_VBR ) /*if it were about to go from nelp->HQ*/ + { + hSC_VBR->avoid_HQ_VBR_NB = 1; + st->coder_type = GENERIC; + } + + if ( ( ( st->old_pitch_buf[( 2 * NB_SUBFR ) - 1] > PPP_LAG_THRLD ) || ( st->pitch[1] > PPP_LAG_THRLD ) || !st->last_Opt_SC_VBR ) && ( hSC_VBR->ppp_mode == 1 ) ) + { + hSC_VBR->ppp_mode = 0; + st->core_brate = ACELP_7k20; + } + + return; +} diff --git a/lib_enc/pre_proc.c b/lib_enc/pre_proc.c new file mode 100644 index 0000000000..6b25d86df3 --- /dev/null +++ b/lib_enc/pre_proc.c @@ -0,0 +1,964 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * pre_proc() + * + * Pre-processing (spectral analysis, LP analysis, VAD, OL pitch calculation, coder mode selection, ...) + *--------------------------------------------------------------------*/ + +void pre_proc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t input_frame, /* i : frame length */ + float old_inp_12k8[], /* i/o: buffer of old input signal */ + float old_inp_16k[], /* i/o: buffer of old input signal @ 16kHz */ + float **inp, /* o : ptr. to inp. signal in the current frame*/ + float fr_bands[2 * NB_BANDS], /* i : energy in frequency bands */ + float *Etot, /* i : total energy */ + float *ener, /* o : residual energy from Levinson-Durbin */ +#ifndef FIX_I4_OL_PITCH + int16_t pitch_orig[3], /* o : open-loop pitch values for quantization */ +#endif + float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ + float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ + float epsP[M + 1], /* i/o: LP prediction errors */ + float lsp_new[M], /* i/o: LSPs at the end of the frame */ + float lsp_mid[M], /* i/o: LSPs in the middle of the frame */ + int16_t *vad_hover_flag, /* i : VAD hangover flag */ + int16_t *attack_flag, /* o : attack flag */ + float *new_inp_resamp16k, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ + int16_t *Voicing_flag, /* o : voicing flag for HQ FEC */ + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ + int16_t *hq_core_type /* o : HQ core type */ +) +{ + int16_t delay; + const float *signal_in; + float *inp_12k8, *new_inp_12k8, *inp_16k, *new_inp_16k; /* pointers to current frame and new data */ + float old_wsp[L_WSP], *wsp; /* weighted input signal buffer */ + float pitch_fr[NB_SUBFR]; /* fractional pitch values */ + float voicing_fr[NB_SUBFR]; /* fractional pitch gains */ + float lf_E[2 * VOIC_BINS]; /* per bin spectrum energy in lf */ + float tmpN[NB_BANDS]; /* Temporary noise update */ + float tmpE[NB_BANDS]; /* Temporary averaged energy of 2 sf. */ + float ee[2]; /* Spectral tilt */ + float corr_shift; /* correlation shift */ + float relE; /* frame relative energy */ + int16_t loc_harm; /* harmonicity flag */ + float cor_map_sum, sp_div, PS[128]; /* speech/music clasif. parameters */ + int16_t L_look; /* length of look-ahead */ + float snr_sum_he; /* HE SAD parameters */ + int16_t localVAD_HE_SAD; /* HE SAD parameters */ + int16_t vad_flag_dtx; /* HE-SAD flag with additional DTX HO */ + int16_t vad_flag_cldfb; + float old_cor; + float hp_E[2]; /* Energy in HF */ + int16_t noisy_speech_HO, clean_speech_HO, NB_speech_HO; /* SC-VBR HO flags */ + float non_staX; /* unbound non-stationarity for sp/mus clas. */ + int32_t sr_core_tmp; + int16_t L_frame_tmp; + int16_t flag_spitch; + float lsf_new[M], stab_fac; + float band_energies[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ + float enerBuffer[CLDFB_NO_CHANNELS_MAX]; + float currFlatness; + int16_t high_lpn_flag; + int16_t cldfb_addition; + int16_t alw_pitch_lag_12k8[2]; + float alw_voicing[2]; + float fft_buff[2 * L_FFT]; + float sp_floor; + int16_t last_core_orig; + int16_t clas_mod; + int16_t old_pitch1; + + wmops_sub_start( "pre_proc" ); + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + signal_in = st->input; + + localVAD_HE_SAD = 0; + NB_speech_HO = 0; + clean_speech_HO = 0; + noisy_speech_HO = 0; + snr_sum_he = 0; + currFlatness = 0; + + *vad_hover_flag = 0; + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + st->coder_type = GENERIC; + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; + *attack_flag = 0; + + if ( st->hSC_VBR != NULL ) + { + st->hSC_VBR->bump_up = 0; + st->hSC_VBR->ppp_mode = 0; + st->hSC_VBR->nelp_mode = 0; + st->hSC_VBR->avoid_HQ_VBR_NB = 0; + } + + L_look = L_LOOK_12k8; /* lookahead at 12.8kHz */ + + new_inp_12k8 = old_inp_12k8 + L_INP_MEM; /* pointer to new samples of the input signal in 12.8kHz core */ + inp_12k8 = new_inp_12k8 - L_look; /* pointer to the current frame of input signal in 12.8kHz core */ + mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM ); + + mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); + wsp = old_wsp + L_WSP_MEM; /* pointer to the current frame of weighted signal in 12.8kHz core */ + + old_cor = st->old_corr; /* save old_cor for speech/music classifier */ + + st->rf_mode = st->Opt_RF_ON; + + last_core_orig = st->last_core; + + /*--------------------------------------------------------------* + * Cldfb analysis + *---------------------------------------------------------------*/ + + st->prevEnergyHF = st->currEnergyHF; + + analysisCldfbEncoder( st, signal_in, input_frame, realBuffer, imagBuffer, enerBuffer ); + + /*----------------------------------------------------------------* + * Change the sampling frequency to 12.8 kHz + *----------------------------------------------------------------*/ + + modify_Fs( signal_in, input_frame, st->input_Fs, new_inp_12k8, INT_FS_12k8, st->mem_decim, ( st->max_bwidth == NB ) ); + + /* save input resampled at 12.8kHz, non-preemhasised */ + mvr2r( new_inp_12k8, st->buf_speech_enc + L_FRAME32k, L_FRAME ); + + /*------------------------------------------------------------------* + * Perform fixed preemphasis (12.8 kHz signal) through 1 - g*z^-1 + *-----------------------------------------------------------------*/ + + preemph( new_inp_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph ); + + /*-------------------------------------------------------------------------* + * Spectral analysis + *--------------------------------------------------------------------------*/ + + analy_sp( -1, NULL, st->input_Fs, inp_12k8, st->Bin_E, st->Bin_E_old, fr_bands, lf_E, Etot, st->min_band, st->max_band, band_energies, PS, fft_buff ); + + /*----------------------------------------------------------------* + * SAD (1-signal, 0-noise) + *----------------------------------------------------------------*/ + + noise_est_pre( *Etot, st->ini_frame, st->hNoiseEst, 0, EVS_MONO, EVS_MONO ); + st->vad_flag = wb_vad( st, fr_bands, &noisy_speech_HO, &clean_speech_HO, &NB_speech_HO, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); + vad_flag_cldfb = vad_proc( realBuffer, imagBuffer, enerBuffer, st->cldfbAnaEnc->no_channels, st->hVAD_CLDFB, &cldfb_addition, st->vad_flag ); + + if ( st->Pos_relE_cnt < 20 ) /* Ensure the level is high enough and cldfb decision is reliable */ + { + /* Combine decisions from SADS */ + if ( st->vad_flag == 1 && vad_flag_cldfb == 0 ) + { + st->localVAD = 0; + } + + st->vad_flag = vad_flag_cldfb; + } + + vad_flag_dtx = dtx_hangover_addition( st, st->vad_flag, st->lp_speech - st->lp_noise, cldfb_addition, vad_hover_flag, NULL, NULL ); + + /*----------------------------------------------------------------* + * NB/WB/SWB/FB bandwidth detector + *----------------------------------------------------------------*/ + + bw_detect( st, st->input, NULL, enerBuffer ); + + /*----------------------------------------------------------------* + * Noise energy down-ward update and total noise energy estimation + * Long-term energies and relative frame energy updates + * Correlation correction as a function of total noise level + *----------------------------------------------------------------*/ + + noise_est_down( fr_bands, st->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &st->hNoiseEst->totalNoise, *Etot, &st->hNoiseEst->Etot_last, &st->hNoiseEst->Etot_v_h2 ); + + relE = *Etot - st->lp_speech; + + if ( relE > 1.5f ) + { + st->Pos_relE_cnt = 0; + } + else if ( relE < 0.0f && st->vad_flag == 1 ) + { + st->Pos_relE_cnt++; + } + corr_shift = correlation_shift( st->hNoiseEst->totalNoise ); + + /*----------------------------------------------------------------* + * FD-CNG Noise Estimator + *----------------------------------------------------------------*/ + + resetFdCngEnc( st ); + + perform_noise_estimation_enc( band_energies, enerBuffer, st->hFdCngEnc, 1, NULL ); + + /*-----------------------------------------------------------------* + * Select SID or FRAME_NO_DATA frame if DTX enabled + *-----------------------------------------------------------------*/ + + dtx( st, vad_flag_dtx, inp_12k8 ); + + /*----------------------------------------------------------------* + * Adjust FD-CNG Noise Estimator + *----------------------------------------------------------------*/ + + if ( ( st->last_total_brate != st->total_brate ) || ( st->last_bwidth != st->bwidth ) ) + { + configureFdCngEnc( st->hFdCngEnc, st->bwidth, st->rf_mode && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate ); + } + if ( st->hFdCngEnc != NULL && st->Opt_DTX_ON ) + { + AdjustFirstSID( st ); + } + + /*----------------------------------------------------------------* + * Reconfigure Mode 2 + *----------------------------------------------------------------*/ + + if ( st->codec_mode == MODE2 ) + { + SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); + } + + calcLoEnvCheckCorrHiLo( st->cldfbAnaEnc->no_col, freqTable, st->hTECEnc->loBuffer, st->hTECEnc->loTempEnv, st->hTECEnc->loTempEnv_ns, st->hTECEnc->hiTempEnv, &( st->hTECEnc->corrFlag ) ); + + /*---------------------------------------------------------------* + * Time Domain Transient Detector + *---------------------------------------------------------------*/ + + if ( st->tcx10Enabled || st->tcx20Enabled ) + { + RunTransientDetection( signal_in, input_frame, st->hTranDet ); + + currFlatness = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 0 ); + } + + /*----------------------------------------------------------------* + * LP analysis + *----------------------------------------------------------------*/ + + alw_pitch_lag_12k8[0] = st->old_pitch_la; + alw_pitch_lag_12k8[1] = st->old_pitch_la; + alw_voicing[0] = st->voicing[2]; + alw_voicing[1] = st->voicing[2]; + + analy_lp( inp_12k8, L_FRAME, L_look, ener, A, epsP, lsp_new, lsp_mid, st->lsp_old1, alw_pitch_lag_12k8, alw_voicing, INT_FS_12k8, -1 ); + + lsp2lsf( lsp_new, lsf_new, M, INT_FS_12k8 ); + stab_fac = lsf_stab( lsf_new, st->lsf_old1, 0, L_FRAME ); + mvr2r( lsf_new, st->lsf_old1, M ); + + /*----------------------------------------------------------------* + * Compute weighted input (for OL pitch analysis) + * OL pitch analysis + * stable high pitch detection + * 1/4 pitch precision improvement + *----------------------------------------------------------------*/ + + find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp_12k8, TILT_FAC, wsp, &st->mem_wsp, GAMMA1, L_look ); + + if ( st->vad_flag == 0 ) + { + /* reset the OL pitch tracker memories during inactive frames */ + pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); + } + + old_pitch1 = st->pitch[1]; + + pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, relE, L_look, st->clas, st->input_bwidth, st->Opt_SC_VBR ); + + /* Updates for adaptive lag window memory */ + st->old_pitch_la = st->pitch[2]; + + /* Detection of very short stable pitch period (MODE1 bitrates) */ + StableHighPitchDetect( &flag_spitch, st->pitch, st->voicing, st->Bin_E, wsp, st->localVAD, &st->voicing_sm, &st->voicing0_sm, &st->LF_EnergyRatio_sm, &st->predecision_flag, &st->diff_sm, &st->energy_sm ); + + /* 1/4 pitch precision improvement */ + if ( st->total_brate <= ACELP_24k40 ) + { + pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[0], &voicing_fr[0], 0, wsp, 7 ); + pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[1], &voicing_fr[1], L_SUBFR, wsp, 7 ); + pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[2], &voicing_fr[2], 2 * L_SUBFR, wsp, 7 ); + pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[3], &voicing_fr[3], 3 * L_SUBFR, wsp, 7 ); + } + else + { + pitch_fr[0] = st->pitch[0]; + pitch_fr[1] = st->pitch[0]; + pitch_fr[2] = st->pitch[1]; + pitch_fr[3] = st->pitch[1]; + + voicing_fr[0] = st->voicing[0]; + voicing_fr[1] = st->voicing[0]; + voicing_fr[2] = st->voicing[1]; + voicing_fr[3] = st->voicing[1]; + } + + /*------------------------------------------------------------------* + * Update estimated noise energy and voicing cut-off frequency + *-----------------------------------------------------------------*/ + + noise_est( st, old_pitch1, tmpN, epsP, *Etot, relE, corr_shift, tmpE, fr_bands, &cor_map_sum, NULL, &sp_div, &non_staX, &loc_harm, lf_E, &st->hNoiseEst->harm_cor_cnt, st->hNoiseEst->Etot_l_lp, &sp_floor, 0, NULL, NULL, st->ini_frame ); + + /*------------------------------------------------------------------* + * Update parameters used in the VAD and DTX + *-----------------------------------------------------------------*/ + + vad_param_updt( st, corr_shift, corr_shift, A, old_pitch1, NULL, 1 ); + + /*-----------------------------------------------------------------* + * Find spectral tilt + * UC and VC frame selection + *-----------------------------------------------------------------*/ + + find_tilt( fr_bands, st->hNoiseEst->bckr, ee, st->pitch, st->voicing, lf_E, corr_shift, st->input_bwidth, st->max_band, hp_E, st->codec_mode, &( st->bckr_tilt_lt ), st->Opt_SC_VBR ); + + st->coder_type = find_uv( st, pitch_fr, voicing_fr, inp_12k8, ee, NULL, corr_shift, relE, *Etot, hp_E, &flag_spitch, last_core_orig, NULL ); + + /*-----------------------------------------------------------------* + * channel aware mode configuration * + *-----------------------------------------------------------------*/ + + if ( !st->Opt_RF_ON ) + { + st->rf_mode = 0; + st->rf_target_bits_write = 0; + } + else if ( st->rf_mode && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) + { + /* the RF config is for (n- fec_offset)th frame that will be packed along with the n-th frame bistream */ + st->rf_mode = 1; + st->codec_mode = MODE2; + + st->rf_target_bits_write = st->hRF->rf_targetbits_buff[st->rf_fec_offset]; + } + else + { + st->rf_mode = 0; + st->codec_mode = MODE1; + if ( st->Opt_RF_ON ) + { + st->hRF->rf_indx_frametype[0] = RF_NO_DATA; + st->hRF->rf_targetbits_buff[0] = 6; /* rf_mode: 1, rf_frame_type: 3, and fec_offset: 2 */ + } + } + + /*-----------------------------------------------------------------* + * Signal classification for FEC + * TC frame selection + *-----------------------------------------------------------------*/ + + st->clas = signal_clas( st, inp_12k8, ee, relE, L_look, &clas_mod ); + + select_TC( st->codec_mode, st->tc_cnt, &st->coder_type, st->localVAD ); + + /* limit coder_type depending on the bitrate */ + coder_type_modif( st, relE ); + + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->Local_VAD = st->localVAD; + } + + /*----------------------------------------------------------------* + * Speech/music classification + * AC frame selection + *----------------------------------------------------------------*/ + + st->GSC_IVAS_mode = 0; + + speech_music_classif( st, new_inp_12k8, inp_12k8, localVAD_HE_SAD, lsp_new, cor_map_sum, epsP, PS, *Etot, old_cor, attack_flag, non_staX, relE, &high_lpn_flag, flag_spitch ); + long_enr( st, *Etot, localVAD_HE_SAD, high_lpn_flag, NULL, 1, NULL, NULL ); + + /*----------------------------------------------------------------* + * Final VAD correction ( when HE-SAD is used instead of the normal VAD, + * rewrite the VAD flag by VAD flag with DTX hangover for further processing) + *----------------------------------------------------------------*/ + + if ( st->Opt_DTX_ON ) + { + st->vad_flag = vad_flag_dtx; + } + + /*----------------------------------------------------------------* + * Selection of internal ACELP Fs (12.8 kHz or 16 kHz) + *----------------------------------------------------------------*/ + + if ( st->codec_mode == MODE1 ) + { + if ( st->core_brate == FRAME_NO_DATA ) + { + /* prevent "L_frame" changes in CNG segments */ + st->L_frame = st->last_L_frame; + } + else if ( st->core_brate == SID_2k40 && st->bwidth >= WB && st->hDtxEnc->first_CNG && ( st->hTdCngEnc != NULL && st->hTdCngEnc->act_cnt2 < MIN_ACT_CNG_UPD ) ) + { + /* prevent "L_frame" changes in SID frame after short segment of active frames */ + st->L_frame = st->hDtxEnc->last_CNG_L_frame; + } + else if ( ( st->core_brate == SID_2k40 && st->total_brate >= ACELP_9k60 && ( ( st->bwidth == WB && !( st->total_brate == ACELP_13k20 && st->cng_type == FD_CNG ) ) || ( st->cng_type == LP_CNG && st->bwidth > WB && st->total_brate >= ACELP_16k40 ) ) ) || ( st->total_brate > ACELP_24k40 && st->total_brate < HQ_96k ) || ( st->total_brate == ACELP_24k40 && st->bwidth >= WB ) ) + { + st->L_frame = L_FRAME16k; + } + else + { + st->L_frame = L_FRAME; + } + + if ( st->ini_frame == 0 ) + { + /* avoid switching of internal ACELP Fs in the very first frame */ + st->last_L_frame = st->L_frame; + } + + if ( st->L_frame == L_FRAME ) + { + st->gamma = GAMMA1; + st->preemph_fac = PREEMPH_FAC; + } + else + { + st->gamma = GAMMA16k; + st->preemph_fac = PREEMPH_FAC_16k; + } + + st->sr_core = st->L_frame * FRAMES_PER_SEC; + st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); + st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; + } + + /*-----------------------------------------------------------------* + * coder_type rewriting in case of switching + * IC frames selection + * enforce TC frames in case of switching + *-----------------------------------------------------------------*/ + + if ( st->codec_mode == MODE1 ) + { + /* enforce TRANSITION frames */ + if ( st->last_L_frame != st->L_frame && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && ( st->coder_type_raw != VOICED ) ) + { + /* enforce TC frame in case of ACELP@12k8 <-> ACELP@16k core switching */ + st->coder_type = TRANSITION; + } + else if ( st->last_core == HQ_CORE || st->last_core == TCX_10_CORE || st->last_core == TCX_20_CORE ) + { + /* enforce TC frame in case of HQ -> ACELP core switching */ + st->coder_type = TRANSITION; + } + else if ( st->last_core_brate <= SID_2k40 && st->cng_type == FD_CNG ) + { + /* enforce TC frame in case of FD_CNG -> ACELP switching (past excitation not available) */ + st->coder_type = TRANSITION; + } + /* select INACTIVE frames */ + else if ( st->total_brate <= ACELP_24k40 && st->vad_flag == 0 ) + { + /* inactive frames will be coded by GSC technology */ + /* except for the VBR mode. VBR mode uses NELP for that */ + if ( !( st->Opt_SC_VBR && vad_flag_dtx ) ) + { + st->coder_type = INACTIVE; + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP3; + } + } + else if ( st->total_brate > ACELP_24k40 && ( ( st->vad_flag == 0 && st->bwidth >= SWB && st->max_bwidth >= SWB ) || ( st->localVAD == 0 && ( st->bwidth <= WB || st->max_bwidth <= WB ) ) ) ) + { + /* inactive frames will be coded by AVQ technology */ + st->coder_type = INACTIVE; + } + } + else /* st->codec_mode == MODE2 */ + { + if ( !st->vad_flag ) + { + st->coder_type = INACTIVE; + } + else if ( st->coder_type > GENERIC ) + { + st->coder_type = GENERIC; + } + } + + /*---------------------------------------------------------------* + * SC-VBR - decision about PPP/NELP mode + *---------------------------------------------------------------*/ + + if ( st->Opt_SC_VBR ) + { + set_ppp_mode( st, noisy_speech_HO, clean_speech_HO, NB_speech_HO, localVAD_HE_SAD ); + } + + if ( !st->Opt_AMR_WB && !st->rf_mode ) + { + if ( st->total_brate == ACELP_13k20 || st->total_brate == ACELP_32k ) + { + st->mdct_sw_enable = MODE1; + } + else if ( ACELP_16k40 <= st->total_brate && st->total_brate <= ACELP_24k40 ) + { + st->mdct_sw_enable = MODE2; + } + } + + /*---------------------------------------------------------------------* + * Decision matrix (selection of technologies) + *---------------------------------------------------------------------*/ + + if ( st->codec_mode == MODE1 ) /* mono case */ + { + decision_matrix_enc( st, hq_core_type ); + + + /* HQ_CORE/TCX_20_CORE decision */ + if ( st->core == HQ_CORE ) /* Decision matrix decided for MDCT coding */ + { + if ( ( st->bwidth == SWB || st->bwidth == FB ) && st->total_brate == ACELP_32k ) + { + /* Select MDCT Core */ + st->core = mdct_classifier( st, fft_buff, enerBuffer, st->total_brate ); + } + if ( st->total_brate == ACELP_13k20 && st->bwidth != FB ) + { + MDCT_selector( st, sp_floor, *Etot, cor_map_sum, enerBuffer ); + } + } + else + { + MDCT_selector_reset( st->hTcxEnc ); + } + + /* Switch to MODE2 if TCX_20_CORE */ + if ( st->core == TCX_20_CORE ) + { + st->codec_mode = MODE2; + + if ( st->last_codec_mode == MODE1 ) + { + int32_t last_total_brate = st->last_total_brate; + st->last_total_brate = -1; + SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); + st->last_total_brate = last_total_brate; + } + else + { + SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); + st->sr_core = getCoreSamplerateMode2( EVS_MONO, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode ); + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); + st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; + + if ( st->sr_core == INT_FS_12k8 ) + { + st->preemph_fac = PREEMPH_FAC; + st->gamma = GAMMA1; + } + else + { + st->preemph_fac = PREEMPH_FAC_16k; + st->gamma = GAMMA16k; + } + + st->igf = getIgfPresent( EVS_MONO, st->total_brate, st->bwidth, st->rf_mode, MCT_CHAN_MODE_REGULAR ); /* TBV: needs checking */ + } + + st->coder_type = st->coder_type_raw; + + if ( st->vad_flag == 0 ) + { + st->coder_type = INACTIVE; + } + else if ( st->coder_type > GENERIC ) + { + st->coder_type = GENERIC; + } + + st->mdct_sw = MODE1; + } + } + + /*-----------------------------------------------------------------* + * Update of ACELP harmonicity counter (used in ACELP transform codebook @32kbps) + *-----------------------------------------------------------------*/ + + if ( st->total_brate == ACELP_32k && loc_harm == 1 && cor_map_sum > 50 && st->clas == VOICED_CLAS && st->coder_type == GENERIC ) + { + st->last_harm_flag_acelp++; + + if ( st->last_harm_flag_acelp > 10 ) + { + st->last_harm_flag_acelp = 10; + } + } + else + { + st->last_harm_flag_acelp = 0; + } + + /*-----------------------------------------------------------------* + * Update audio frames counter (used for UV decision) + *-----------------------------------------------------------------*/ + + if ( st->coder_type == AUDIO ) + { + st->audio_frame_cnt += AUDIO_COUNTER_STEP; + } + else if ( st->coder_type != INACTIVE ) + { + st->audio_frame_cnt--; + } + + if ( st->audio_frame_cnt > AUDIO_COUNTER_MAX ) + { + st->audio_frame_cnt = AUDIO_COUNTER_MAX; + } + + if ( st->audio_frame_cnt < 0 ) + { + st->audio_frame_cnt = 0; + } + + /*-----------------------------------------------------------------* + * Set formant sharpening flag + *-----------------------------------------------------------------*/ + + st->sharpFlag = 0; + + if ( st->coder_type == TRANSITION ) + { + if ( ( st->total_brate > ACELP_48k && st->bwidth < SWB ) || /* Deactivate for core bitrates higher than 48.0 kb/s */ + ( st->total_brate >= ACELP_13k20 && st->total_brate <= ACELP_16k40 ) || /* Deactivate for bitrates <13.2, 16.4> kb/s (this is basically due to lack of signaling configurations */ + ( st->total_brate > ACELP_16k40 && st->lp_noise > FORMANT_SHARPENING_NOISE_THRESHOLD ) ) /* Deactivate for bitrates >= 24.4 kb/s if the long-term noise level exceeds 34 dB */ + { + st->sharpFlag = 0; + } + else + { + st->sharpFlag = 1; + } + } + + if ( st->coder_type == GENERIC || st->coder_type == VOICED ) + { + if ( *vad_hover_flag || + ( st->total_brate > ACELP_48k && st->bwidth < SWB ) || /* Deactivate for core bitrates higher than 48.0 kb/s */ + ( st->total_brate >= ACELP_13k20 && st->lp_noise > FORMANT_SHARPENING_NOISE_THRESHOLD && st->total_brate > CNA_MAX_BRATE ) ) /* Deactivate for bitrates >= 13.2 kb/s if the long-term noise level exceeds 34 dB */ + { + st->sharpFlag = 0; + } + else + { + st->sharpFlag = 1; + } + } + + /* channel-aware mode - due to lack of signalling bit, sharpFlag is 1 always in RF mode */ + if ( st->rf_mode && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) + { + st->sharpFlag = 1; + } + + /*-----------------------------------------------------------------* + * Set voicing flag for HQ FEC + *-----------------------------------------------------------------*/ + + if ( st->sp_aud_decision1 == 0 && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) + { + *Voicing_flag = 1; + } + else + { + *Voicing_flag = 0; + } + + /*---------------------------------------------------------------* + * Preprocessing at other sampling frequency rate (16/25.6/32kHz) + *----------------------------------------------------------------*/ + + sr_core_tmp = ( st->codec_mode == MODE1 ) ? INT_FS_16k : max( INT_FS_16k, st->sr_core ); /* indicates the ACELP sampling rate */ + L_frame_tmp = ( st->codec_mode == MODE1 ) ? L_FRAME16k : max( L_FRAME16k, st->L_frame ); + + L_look = NS2SA( sr_core_tmp, ACELP_LOOK_NS ); /* lookahead at other sampling rate (16kHz, 25.6kHz, 32kHz) */ + + new_inp_16k = old_inp_16k + L_INP_MEM; /* pointer to new samples of the input signal in 16kHz core */ + inp_16k = new_inp_16k - L_look; /* pointer to the current frame of input signal in 16kHz core */ + + mvr2r( st->old_inp_16k, old_inp_16k, L_INP_MEM ); + + /*---------------------------------------------------------------* + * Change the sampling frequency to 16/25.6/32 kHz + *----------------------------------------------------------------*/ + + if ( st->input_Fs == sr_core_tmp ) + { + /* no resampling needed, only delay adjustment to account for the FIR resampling delay */ + delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + mvr2r( st->mem_decim16k + delay, new_inp_16k, delay ); + mvr2r( signal_in, new_inp_16k + delay, input_frame - delay ); + mvr2r( signal_in + input_frame - 2 * delay, st->mem_decim16k, 2 * delay ); + } + else if ( st->input_Fs == 32000 || st->input_Fs == 48000 ) + { + modify_Fs( signal_in, input_frame, st->input_Fs, new_inp_16k, sr_core_tmp, st->mem_decim16k, 0 ); + } + else /* keep memories up-to-date in case of bitrate switching */ + { + /* no resampling needed, only delay adjustment to account for the FIR resampling delay */ + delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + mvr2r( st->mem_decim16k + delay, new_inp_16k, delay ); + mvr2r( signal_in, new_inp_16k + delay, input_frame - delay ); + mvr2r( signal_in + input_frame - 2 * delay, st->mem_decim16k, 2 * delay ); + } + + if ( sr_core_tmp == INT_FS_16k ) + { + /* save input resampled at 16kHz, non-preemhasised */ + mvr2r( new_inp_16k, new_inp_resamp16k, L_FRAME16k ); + } + else if ( sr_core_tmp > INT_FS_16k ) + { + /* reset the buffer, the signal is needed for WB BWEs */ + set_f( new_inp_resamp16k, 0.0f, L_FRAME16k ); + } + + /*------------------------------------------------------------------* + * Perform fixed preemphasis (16kHz signal) through 1 - g*z^-1 + *-----------------------------------------------------------------*/ + + if ( ( st->tcxonly == 0 || st->codec_mode == MODE1 ) && st->input_Fs > 8000 ) + { + st->mem_preemph_enc = new_inp_16k[L_frame_tmp - 1]; + } + + if ( st->input_Fs > 8000 && sr_core_tmp == INT_FS_16k ) + { + preemph( new_inp_16k, PREEMPH_FAC_16k, L_FRAME16k, &( st->mem_preemph16k ) ); + } + else if ( st->input_Fs > 8000 ) /* keep memory up-to-date in case of bitrate switching */ + { + st->mem_preemph16k = new_inp_16k[L_frame_tmp - 1]; + } + + /*-----------------------------------------------------------------* + * Redo LP analysis at 16kHz if ACELP@16k core was selected + * update buffers + *-----------------------------------------------------------------*/ + + if ( ( ( ( st->tcxonly == 0 ) || !( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) ) && + st->L_frame == L_FRAME16k && st->codec_mode == MODE2 ) || + ( st->L_frame == L_FRAME16k && st->codec_mode == MODE1 ) ) + { + /* update signal buffers */ + mvr2r( new_inp_resamp16k, st->buf_speech_enc + L_FRAME16k, L_FRAME16k ); + mvr2r( new_inp_16k, st->buf_speech_enc_pe + L_FRAME16k, L_FRAME16k ); + + /*--------------------------------------------------------------* + * LPC analysis + *---------------------------------------------------------------*/ + + if ( st->last_L_frame == L_FRAME && st->codec_mode == MODE1 ) + { + /* this is just an approximation, but it is sufficient */ + mvr2r( st->lsp_old1, st->lspold_enc, M ); + } + + analy_lp( inp_16k, L_FRAME16k, L_look, ener, A, epsP, lsp_new, lsp_mid, st->lspold_enc, st->pitch, st->voicing, 16000, -1 ); + + /*--------------------------------------------------------------* + * Compute Weighted Input + *---------------------------------------------------------------*/ + + if ( st->codec_mode == MODE2 ) + { + find_wsp( L_FRAME16k, L_SUBFR, st->nb_subfr, A, Aw, st->speech_enc_pe, PREEMPH_FAC_16k, st->wspeech_enc, &st->mem_wsp_enc, st->gamma, L_LOOK_16k ); + } + else + { + weight_a_subfr( NB_SUBFR16k, A, Aw, GAMMA16k, M ); + } + } + else + { + /* update signal buffers */ + mvr2r( new_inp_12k8, st->buf_speech_enc_pe + st->L_frame, L_FRAME ); + mvr2r( st->buf_speech_enc + L_FRAME32k, st->buf_speech_enc + st->L_frame, L_FRAME ); + + if ( st->tcxonly == 0 ) + { + mvr2r( wsp, st->wspeech_enc, L_FRAME + L_LOOK_12k8 ); + } + } + + /*-----------------------------------------------------------------* + * ACELP/TCX20 Switching Decision + *-----------------------------------------------------------------*/ + +#ifndef FIX_I4_OL_PITCH + mvs2s( st->pitch, pitch_orig, 3 ); +#endif + + if ( st->codec_mode == MODE2 ) + { + if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && st->tcxonly == 0 ) + { + core_acelp_tcx20_switching( st, non_staX, pitch_fr, voicing_fr, currFlatness, lsp_mid, stab_fac ); + } + + if ( st->mdct_sw_enable == MODE2 && !st->rf_mode ) + { + if ( st->core == TCX_20_CORE ) /* Switching only possible from TCX_20_CORE frames, not from TCX_10_CORE frames */ + { + /* Select MDCT Core */ + if ( ( st->bwidth == SWB || st->bwidth == FB ) && st->total_brate == ACELP_24k40 ) + { + st->core = mdct_classifier( st, fft_buff, enerBuffer, st->total_brate ); + } + + if ( st->total_brate == ACELP_16k40 && st->bwidth != FB ) + { + MDCT_selector( st, sp_floor, *Etot, cor_map_sum, enerBuffer ); + } + } + else + { + MDCT_selector_reset( st->hTcxEnc ); + } + + /* Do the switching that was decided in the MDCT selector */ + if ( st->core == HQ_CORE ) + { + st->codec_mode = MODE1; + st->mdct_sw = MODE2; + } + else if ( st->last_codec_mode == MODE1 && st->last_core == HQ_CORE ) + { + int16_t L_frame_old = st->last_L_frame; + st->last_L_frame = st->L_frame; + SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); + st->last_L_frame = L_frame_old; + } + } + + /*--------------------------------------------------------------* + * TCX mode decision + *---------------------------------------------------------------*/ + + SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); + } + + /*-----------------------------------------------------------------* + * Updates + *-----------------------------------------------------------------*/ + + /* update old weighted speech buffer - for OL pitch analysis */ + mvr2r( &old_wsp[L_FRAME], st->old_wsp, L_WSP_MEM ); + + /* update old input signal buffer */ + mvr2r( &old_inp_12k8[L_FRAME], st->old_inp_12k8, L_INP_MEM ); + + /* update old input signal @16kHz buffer */ + if ( st->input_Fs > 8000 && sr_core_tmp == INT_FS_16k ) + { + mvr2r( &old_inp_16k[L_frame_tmp], st->old_inp_16k, L_INP_MEM ); + } + else if ( st->input_Fs > 8000 ) + { + lerp( st->old_inp_12k8 + L_INP_MEM - L_INP_MEM * 4 / 5, st->old_inp_16k, L_INP_MEM, L_INP_MEM * 4 / 5 ); + } + + if ( sr_core_tmp == INT_FS_16k && st->tcxonly && st->codec_mode == MODE2 ) + { + /* copy input resampled at 16kHz, non-preemhasised */ + mvr2r( new_inp_resamp16k, new_inp_16k, L_FRAME16k ); + } + + /* update of old per-band energy spectrum */ + mvr2r( fr_bands + NB_BANDS, st->hNoiseEst->enrO, NB_BANDS ); + + /* set the pointer of the current frame for the ACELP core */ + if ( st->L_frame == L_FRAME ) + { + *inp = inp_12k8; + } + else + { + *inp = inp_16k; + } + if ( ( st->core != HQ_CORE && st->tcxonly == 0 ) || st->core == ACELP_CORE ) + { + /* Update vAD hangover frame counter in active frames */ + if ( !( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) + { + if ( st->Opt_DTX_ON && *vad_hover_flag ) + { + st->hTdCngEnc->burst_ho_cnt++; + if ( st->hTdCngEnc->burst_ho_cnt > HO_HIST_SIZE ) + { + st->hTdCngEnc->burst_ho_cnt = HO_HIST_SIZE; + } + } + else if ( st->hTdCngEnc != NULL && vad_flag_dtx ) + { + st->hTdCngEnc->burst_ho_cnt = 0; + } + } + } + + wmops_sub_end(); + return; +} diff --git a/lib_enc/pvq_core_enc.c b/lib_enc/pvq_core_enc.c new file mode 100644 index 0000000000..3603b950e9 --- /dev/null +++ b/lib_enc/pvq_core_enc.c @@ -0,0 +1,567 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "rom_com.h" +#include "prot.h" +#include "prot.h" +#include "stl.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------*/ + +static int16_t calc_pvq_splits( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const int16_t band_bits, const int16_t sfmsize, const float *y, int16_t *bits ); + +static void obtainEnergyParameter( const float Enear, const float Eopp, int16_t *param ); + +static void densityIndexSymbolEncode( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const int16_t density, const int16_t r_dim, const int16_t l_dim, const int16_t index_phi ); + +static void encode_energies( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const float *coefs, const int16_t Np, int16_t *dim_part, float *E_part, int16_t *bits_part, int16_t *g_part, const int16_t qband, int16_t *bits_left, const float enr, const int16_t n, const int16_t strict_bits ); + + +/*-------------------------------------------------------------------* + * pvq_encode_band() + * + * Encode band with PVQ + *--------------------------------------------------------------------*/ + +static void pvq_encode_band( + BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const float *coefs_norm, /* i : normalized vector to encode */ + int16_t *pulse_vector, /* o : quantized vector, integer */ + int16_t *npulses, /* o : number of pulses */ + float *coefs_quant, /* o : quantized vector */ + const int16_t sfmsize, /* i : length of vector */ + const int16_t band_bits, /* i : assigned bits */ + int16_t *bits_left, /* o : bits remaining */ + const int16_t strict_bits /* i : conservative rounding flag */ +) +{ + int16_t K_val; + int16_t j, Np; + float enr, E_part[MAX_SPLITS + 1]; + int16_t part_start[MAX_SPLITS + 1], dim_part[MAX_SPLITS + 1], bits_part[MAX_SPLITS + 1]; + int16_t pool_tot, pool_part, dim_parts; + float g_part[MAX_SPLITS]; + int16_t g_part_s[MAX_SPLITS]; + int16_t sg_part[MAX_SPLITS + 1]; + int16_t idx_sort[MAX_SPLITS + 1]; + int16_t js, band_bits_tot, split_bit; + + Np = calc_pvq_splits( hBstr, hPVQ, band_bits, sfmsize, coefs_norm, &split_bit ); + band_bits_tot = band_bits - split_bit; + + enr = 0.0f; + for ( j = 0; j < sfmsize; j++ ) + { + enr += coefs_norm[j] * coefs_norm[j]; + } + + dim_parts = (int16_t) intLimCDivPos( sfmsize, Np ); + set_s( dim_part, dim_parts, Np - 1 ); + dim_part[Np - 1] = sfmsize - dim_parts * ( Np - 1 ); + + part_start[0] = 0; + for ( j = 1; j < Np; j++ ) + { + part_start[j] = part_start[j - 1] + dim_part[j - 1]; + } + + set_s( g_part_s, -32768, Np ); + if ( Np > 1 ) + { + encode_energies( hBstr, hPVQ, coefs_norm, Np, dim_part, E_part, bits_part, g_part_s, band_bits_tot, bits_left, enr, sfmsize, strict_bits ); + } + else + { + bits_part[0] = band_bits_tot; + } + + pool_tot = 0; + pool_part = 0; + + for ( j = 0; j < Np; j++ ) + { + g_part[j] = -( (float) g_part_s[j] ) / 32768; + g_part_s[j] = -g_part_s[j]; + } + + srt_vec_ind( g_part_s, sg_part, idx_sort, Np ); + + for ( j = 0; j < Np; j++ ) + { + js = idx_sort[Np - 1 - j]; + + + pool_part = shrtCDivSignedApprox( pool_tot, Np - j ); + bits_part[js] = max( 0, min( bits_part[js] + pool_part, 256 ) ); + + conservativeL1Norm( dim_part[js], bits_part[js], strict_bits, *bits_left, pool_tot, *npulses, /* inputs */ + &K_val, bits_left, &pool_tot, npulses ); /* outputs */ + if ( K_val >= 1 ) + { + pvq_encode( hBstr, hPVQ, coefs_norm + part_start[js], pulse_vector + part_start[js], coefs_quant + part_start[js], K_val, dim_part[js], g_part[js] ); + } + else + { + set_f( coefs_quant + part_start[js], 0.0f, dim_part[js] ); + set_s( pulse_vector + part_start[js], 0, dim_part[js] ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * pvq_encode_frame() + * + * + *--------------------------------------------------------------------*/ + +void pvq_encode_frame( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const float *coefs_norm, /* i : normalized coefficients to encode */ + float *coefs_quant, /* o : quantized coefficients */ + float *gopt, /* o : optimal shape gains */ + int16_t *npulses, /* o : number of pulses per band */ + int16_t *pulse_vector, /* o : non-normalized pulse shapes */ + const int16_t *sfm_start, /* i : indices of first coefficients in the bands */ + const int16_t *sfm_end, /* i : indices of last coefficients in the bands */ + const int16_t *sfmsize, /* i : band sizes */ + const int16_t nb_sfm, /* i : total number of bands */ + const int16_t *R, /* i : bitallocation per band (Q3)*/ + const int16_t pvq_bits, /* i : number of bits avaiable */ + const int16_t core /* i : core */ +) +{ + int16_t i, j; + int16_t band_bits, bits_left; + int16_t bit_pool = 0; + int16_t coded_bands, bands_to_code; + int16_t curr_bits; + int16_t R_sort[NB_SFM]; /*Q3*/ + int16_t is, i_sort[NB_SFM]; + int16_t strict_bits; + PVQ_ENC_DATA pvq_enc; + + PVQ_ENC_HANDLE hPVQ = &pvq_enc; + + rc_enc_init( hPVQ, pvq_bits ); + curr_bits = ( pvq_bits - RC_BITS_RESERVED ) << 3; + + bands_to_code = 0; + for ( i = 0; i < nb_sfm; i++ ) + { + if ( R[i] > 0 ) + { + bands_to_code++; + } + } + + if ( core == ACELP_CORE ) + { + strict_bits = 1; + srt_vec_ind( R, R_sort, i_sort, nb_sfm ); + } + else + { + strict_bits = 0; + for ( i = 0; i < nb_sfm; i++ ) + { + i_sort[i] = i; + } + } + + coded_bands = 0; + for ( i = 0; i < nb_sfm; i++ ) + { + is = i_sort[i]; + gopt[is] = 0; + if ( R[is] > 0 ) + { + bandBitsAdjustment( hPVQ->rc_num_bits, hPVQ->rc_range, curr_bits, bands_to_code, bands_to_code - coded_bands, sfmsize[is], R[is], bit_pool, /* inputs */ + &band_bits, &bits_left, &bit_pool ); /* outputs */ + + pvq_encode_band( hBstr, hPVQ, &coefs_norm[sfm_start[is]], &pulse_vector[sfm_start[is]], &npulses[is], &coefs_quant[sfm_start[is]], sfmsize[is], band_bits, &bits_left, strict_bits ); + + gopt[is] = dotp( coefs_quant + sfm_start[is], coefs_norm + sfm_start[is], sfmsize[is] ) / + ( dotp( coefs_quant + sfm_start[is], coefs_quant + sfm_start[is], sfmsize[is] ) + 1e-15f ); + + if ( gopt[is] == 0.0f ) + { + gopt[is] = 1e-10f; + } + /* Updates */ + coded_bands++; + } + else + { + for ( j = sfm_start[is]; j < sfm_end[is]; j++ ) + { + coefs_quant[j] = 0.0f; + pulse_vector[j] = 0; + } + } + } + + rc_enc_finish( hBstr, hPVQ ); + + return; +} + +/*---------------------------------------------------------------------* + * pvq_core_enc() + * + * Main Generic Audio Encoder Routine + *---------------------------------------------------------------------*/ + +/*! r: number of bits encoded */ +int16_t pvq_core_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + float coefs_norm[], /* i/o: normalized coefficients to encode */ + float coefs_quant[], /* o : quantized coefficients */ + const int16_t bits_tot, /* i : total number of bits */ + const int16_t nb_sfm, /* i : number of bands */ + const int16_t *sfm_start, /* i : Subband start coefficient */ + const int16_t *sfm_end, /* i : Subband end coefficient */ + const int16_t *sfmsize, /* i : subband width */ + int16_t *R, /* i/o: Bit allocation/Adjusted bit alloc. (Q3) */ + int16_t *Rs, /* i/o: Integer bit allocation */ + int16_t *npulses, /* o : number of pulses */ + int16_t *maxpulse, /* i : maximum pulse per band */ + const int16_t core /* i : number of bands */ +) +{ + int16_t i; + int16_t R_upd; /*Q3*/ + int16_t ord[NB_SFM_MAX]; + float fg_pred[NB_SFM_MAX]; + int16_t pvq_bits; + int16_t pulse_vector[L_SPEC48k_EXT]; + float gopt[NB_SFM]; + int16_t gain_bits_array[NB_SFM]; + int16_t gain_bits_tot; + + R_upd = bits_tot * 8; + gain_bits_tot = assign_gain_bits( core, nb_sfm, sfmsize, R, gain_bits_array, &R_upd ); + pvq_bits = R_upd >> 3; + pvq_encode_frame( hBstr, coefs_norm, coefs_quant, gopt, npulses, pulse_vector, sfm_start, sfm_end, sfmsize, nb_sfm, R, pvq_bits, core ); + + if ( Rs != NULL ) + { + for ( i = 0; i < nb_sfm; i++ ) + { + Rs[i] = Rs[i] * ( npulses[i] > 0 ); /* Update Rs in case no pulses were assigned */ + } + } + + for ( i = 0; i < nb_sfm; i++ ) + { + ord[i] = i; + R[i] = R[i] * ( npulses[i] > 0 ); /* Update in case no pulses were assigned */ + } + + get_max_pulses( sfm_start, sfm_end, ord, npulses, nb_sfm, pulse_vector, maxpulse ); + + fine_gain_pred( sfm_start, sfm_end, sfmsize, ord, npulses, maxpulse, R, nb_sfm, coefs_quant, pulse_vector, fg_pred, core ); + + fine_gain_quant( hBstr, ord, nb_sfm, gain_bits_array, fg_pred, gopt ); + + apply_gain( ord, sfm_start, sfm_end, nb_sfm, fg_pred, coefs_quant ); + + return ( pvq_bits + gain_bits_tot ); +} + + +/*-------------------------------------------------------------------* + * encode_energies() + * + * + *--------------------------------------------------------------------*/ + +static void encode_energies( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const float *coefs, /* i : coefficients to encode */ + const int16_t Np, /* i : number of parts */ + int16_t *dim_part, /* o : sizes of parts */ + float *E_part, /* o : energies of parts */ + int16_t *bits_part, /* o : assigned bits per part */ + int16_t *g_part, /* o : gains */ + const int16_t qband, /* i : assigned quanta per band */ + int16_t *bits_left, /* o : remaining bits */ + const float enr, /* i : energy of vector */ + const int16_t dim, /* i : size of vector */ + const int16_t strict_bits /* i : conservative rounding flag */ +) +{ + int16_t i, j, l_Np, r_Np; + int16_t l_bits, r_bits, l_dim, r_dim; + float l_enr, r_enr; + int16_t il, ir; + int16_t oppRQ3, qzero; + int16_t density; + int16_t phi; + int16_t index_phi = -1; + + l_Np = Np >> 1; + r_Np = Np - l_Np; + + l_enr = 0.0f; + l_bits = 0; + l_dim = 0; + for ( i = 0; i < l_Np; i++ ) + { + l_dim += dim_part[i]; + } + for ( j = 0; j < l_dim; j++ ) + { + l_enr += coefs[j] * coefs[j]; + } + r_enr = enr - l_enr; + r_dim = dim - l_dim; + + obtainEnergyQuantizerDensity( dim, qband, &density ); + obtainEnergyParameter( l_enr, r_enr, &phi ); + rangeCoderFinalizationFBits( hPVQ->rc_num_bits, hPVQ->rc_range, &qzero ); + densityAngle2RmsProjEnc( density, phi, &index_phi, &ir, &il, &oppRQ3 ); + densityIndexSymbolEncode( hBstr, hPVQ, density, r_dim, l_dim, index_phi ); + + for ( i = 0; i < l_Np; i++ ) + { + g_part[i] = ( g_part[i] * il + 16384 ) >> 15; + } + + for ( i = l_Np; i < Np; i++ ) + { + g_part[i] = ( g_part[i] * ir + 16384 ) >> 15; + } + + NearOppSplitAdjustment( qband, qzero, hPVQ->rc_num_bits, hPVQ->rc_range, *bits_left, strict_bits, Np, dim_part[0], dim_part[Np - 1], l_dim, r_dim, oppRQ3, &l_bits, &r_bits, bits_left ); + + if ( l_Np > 1 ) + { + encode_energies( hBstr, hPVQ, coefs, l_Np, dim_part, E_part, bits_part, g_part, l_bits, bits_left, l_enr, l_dim, strict_bits ); + } + else + { + E_part[0] = l_enr; + bits_part[0] = l_bits; + } + + if ( r_Np > 1 ) + { + encode_energies( hBstr, hPVQ, &coefs[l_dim], r_Np, &dim_part[l_Np], &E_part[l_Np], &bits_part[l_Np], &g_part[l_Np], r_bits, bits_left, r_enr, r_dim, strict_bits ); + } + else + { + E_part[1] = r_enr; + bits_part[1] = r_bits; + } + + return; +} + + +static void densityIndexSymbolEncode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const int16_t density, /* i : Current density */ + const int16_t opp_sz, /* i : Opposite size */ + const int16_t near_sz, /* i : Near size */ + const int16_t index_phi /* i : Index */ +) +{ + int16_t angle, c; + uint32_t sym_freq = 1; + int32_t cum_freq, tot; + int16_t densityPlOne, densitySubC; + int16_t densitySubIndex, nearFlag; +#ifdef BASOP_NOGLOB + Flag Overflow; +#endif /* BASOP_NOGLOB */ + + if ( ( 0xFFFE & density ) != 0 ) /* even */ + { + angle = atan2_fx( SQRT_DIM_fx[opp_sz], SQRT_DIM_fx[near_sz] ); +#ifndef BASOP_NOGLOB + angle = shl( angle, 1 ); +#else /* BASOP_NOGLOB */ + angle = shl_o( angle, 1, &Overflow ); +#endif /* BASOP_NOGLOB */ + angle = mult_r( angle, 20861 ); + c = mult_r( density, angle ); + + densityPlOne = 1 + density; + densitySubC = density - c; + + tot = 2 + density * densityPlOne; /* c==0, c==density*/ + sym_freq = 1 + 2 * index_phi; /* c==density */ + cum_freq = index_phi * index_phi; /* c==density*/ + + if ( c == 0 ) + { + sym_freq = 2 * densityPlOne - sym_freq; + cum_freq = 2 * index_phi * (densityPlOne) -cum_freq; + } + else if ( densitySubC != 0 ) /* c n.eq. density */ + { + densitySubIndex = density - index_phi; + nearFlag = ( index_phi <= c ); + + tot = densityPlOne + density * c * ( densitySubC ); + sym_freq = nearFlag ? ( 1 + 2 * index_phi * densitySubC ) : ( 1 + 2 * densitySubIndex * c ); + cum_freq = nearFlag ? ( index_phi * ( ( index_phi - 1 ) * densitySubC + 1 ) ) : ( tot - densityPlOne - densitySubIndex * ( densitySubIndex + 1 ) * c + index_phi ); + } + /* else keep values for c==density*/ + rc_encode( hBstr, hPVQ, cum_freq, sym_freq, tot ); + } + + return; +} + + +/*--------------------------------------------------------------------------* + * calc_pvq_splits() + * + * Calculate the number of segments needed + *--------------------------------------------------------------------------*/ + +/*! r: Number of segments */ +static int16_t calc_pvq_splits( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const int16_t band_bits, /* i : Band bit-budget */ + const int16_t sfmsize, /* i : Band width */ + const float *y, /* i : Target vector */ + int16_t *bits /* o : Consumed bits */ +) +{ + int16_t Np; + int16_t Npart; + int16_t i, j, k; + float E[MAX_SPLITS]; + float Emean; + float tmp; + float max_dev; + + Np = (int16_t) ( intLimCDivPos( band_bits, 67 ) >> 2 ); + if ( band_bits - 268 * Np != 0 || Np == 0 ) /* L_msu */ + { + Np++; /* ceil */ + } + *bits = 0; + + if ( Np < MAX_SPLITS && ( band_bits - ( 8 * sfmsize * THR_ADD_SPLIT ) > 0 ) ) + { + Npart = (int16_t) intLimCDivPos( sfmsize, Np ); + *bits = 8; + Emean = 0; + k = 0; + for ( i = 0; i < Np; i++ ) + { + E[i] = EPSILON; + for ( j = 0; j < Npart; j++, k++ ) + { + E[i] += y[k] * y[k]; + } + E[i] = (float) 30 - norm_l( (Word32) max( E[i], 1 ) ); /* a 0 input integer Ei yields a zeroed log2(Ei) out */ + Emean += E[i]; + } + Emean /= Np; + + max_dev = -1; + for ( i = 0; i < Np; i++ ) + { + tmp = (float) fabs( E[i] - Emean ); + if ( tmp > max_dev ) + { + max_dev = tmp; + } + } + + if ( max_dev > ( 32 - band_bits / ( 8 * Np ) ) ) + { + rc_enc_bits( hBstr, hPVQ, 1, 1 ); + Np += 1; + } + else + { + rc_enc_bits( hBstr, hPVQ, 0, 1 ); + } + } + + Np = max( Np, (int16_t) ( ceil( (float) sfmsize / PVQ_MAX_BAND_SIZE ) ) ); + Np = min( MAX_SPLITS, Np ); + Np = min( (int16_t) floor( (float) sfmsize / MIN_BAND_SIZE ), Np ); + + return Np; +} + + +#define EPSILON_obtainEnergyParameter 0.00373f /**/ +#define C_obtainEnergyParameter ( (float) ( 1 << 15 ) / EVS_PI + EPSILON_obtainEnergyParameter ) + +static void obtainEnergyParameter( + const float Enear, /* i : Near energy */ + const float Eopp, /* i : Opposite energy */ + int16_t *param /* o : Energy parameter */ +) +{ + if ( !Eopp ) + { + *param = 0; + return; + } + if ( !Enear ) + { + *param = 1 << 14; + return; + } + *param = (int16_t) ( C_obtainEnergyParameter * atan2( (float) sqrt( Eopp ), (float) sqrt( Enear ) ) + 0.5f ); + + return; +} +#undef C_obtainEnergyParameter +#undef EPSILON_obtainEnergyParameter diff --git a/lib_enc/pvq_encode.c b/lib_enc/pvq_encode.c new file mode 100644 index 0000000000..acf7928a6f --- /dev/null +++ b/lib_enc/pvq_encode.c @@ -0,0 +1,211 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + + +static void pyramidSearch( const float *const s, const int16_t L, const int16_t Ptot, const float A, int16_t *ztak, float *stak ); + +/*-------------------------------------------------------------------* + * pvq_encode() + * + * + *--------------------------------------------------------------------*/ + +void pvq_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const float *x, /* i : vector to quantize */ + int16_t *y, /* o : quantized vector (non-scaled short)*/ + float *xq, /* o : quantized vector (scaled float) */ + const int16_t pulses, /* i : number of allocated pulses */ + const int16_t dim, /* i : Length of vector */ + const float gain /* i : Gain */ +) +{ + PvqEntry entry; + + pyramidSearch( x, dim, pulses, gain, y, xq ); + + entry = mpvq_encode_vec( y, dim, pulses ); + if ( dim != 1 ) + { + rc_enc_bits( hBstr, hPVQ, (uint32_t) entry.lead_sign_ind, 1 ); + rc_enc_uniform( hBstr, hPVQ, entry.index, entry.size ); + } + else + { + rc_enc_bits( hBstr, hPVQ, (uint32_t) entry.lead_sign_ind, 1 ); + } + return; +} + +/*! r: L1 norm value */ +static float L1norm( + const float *const s, /* i : input vector */ + float *abso_s, /* o : absolute vector */ + int16_t *sign_s, /* o : signs */ + const int16_t L /* i : vector length */ +) +{ + int16_t i; + float ftmp, r = 0.0f; + + for ( i = 0; i < L; i++ ) + { + ftmp = s[i]; + sign_s[i] = (int16_t) sign( ftmp ); + abso_s[i] = (float) fabs( ftmp ); + r += abso_s[i]; + } + + return r; +} + + +void pyramidSearch( + const float *const s, /* i : input vector */ + const int16_t L, /* i : vector length */ + const int16_t Ptot, /* i : assigned diracs */ + const float A, /* i : gain */ + int16_t *ztak, /* i : integer output vector */ + float *stak /* i : normalize output vector */ +) +{ + int16_t i, high_pulse_dens; + int16_t z[PVQ_MAX_BAND_SIZE]; + float sL1; + float energy, xcorr; + int16_t P; + float energy1, energy2; + float xcorr1sq, xcorr2sq; + float zscale, sscale; + float abso_s[PVQ_MAX_BAND_SIZE]; + int16_t sign_s[PVQ_MAX_BAND_SIZE]; + int16_t n = 0; + + high_pulse_dens = Ptot > (int16_t) ( 0.501892089843750f * L ); + sL1 = L1norm( s, abso_s, sign_s, L ); + if ( high_pulse_dens && sL1 > 0 && A > 0 ) + { + P = Ptot - PYR_OFFSET; + zscale = P / sL1; + for ( i = 0; i < L; i++ ) + { + z[i] = (int16_t) floor( zscale * abso_s[i] ); + } + } + else + { + for ( i = 0; i < L; i++ ) + { + z[i] = 0; + } + } + + energy = 0.0f; + if ( sL1 > 0 && A > 0 ) + { + xcorr = 0.0f; + P = 0; + for ( i = 0; i < L; i++ ) + { + xcorr += abso_s[i] * z[i]; + energy += z[i] * z[i]; + P += z[i]; + } + energy = 0.5f * energy; + while ( P < Ptot ) + { + energy += 0.5f; + n = 0; + xcorr1sq = xcorr + abso_s[0]; + xcorr1sq *= xcorr1sq; + energy1 = energy + z[0]; + + for ( i = 1; i < L; i++ ) + { + xcorr2sq = xcorr + abso_s[i]; + xcorr2sq *= xcorr2sq; + energy2 = energy + z[i]; + + if ( ( xcorr1sq * energy2 ) < ( xcorr2sq * energy1 ) ) + { + n = i; + xcorr1sq = xcorr2sq; + energy1 = energy2; + } + } + + z[n]++; + xcorr += abso_s[n]; + energy = energy1; + P++; + } + } + else + { + if ( L > 1 ) + { + z[0] = (int16_t) ( Ptot * 0.5f ); + z[L - 1] = -( Ptot - z[0] ); + energy = 0.5f * ( z[0] * z[0] + z[L - 1] * z[L - 1] ); + } + else + { + z[0] = Ptot; + energy = 0.5f * ( z[0] * z[0] ); + } + } + + sscale = (float) A / (float) sqrt( 2.0f * energy ); + for ( i = 0; i < L; i++ ) + { + ztak[i] = z[i] * sign_s[i]; + stak[i] = sscale * ztak[i]; + } + + return; +} diff --git a/lib_enc/q_gain2p.c b/lib_enc/q_gain2p.c new file mode 100644 index 0000000000..8a3bc04b9a --- /dev/null +++ b/lib_enc/q_gain2p.c @@ -0,0 +1,390 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------------*/ + +static int16_t gain_enc_uv( const float *code, const int16_t lcode, float *gain_pit, float *gain_code, ACELP_CbkCorr *coeff, float *past_gcode, float *gain_inov ); + + +/*-------------------------------------------------------------------------* + * procedure q_gain2_plus * + * ~~~~~~~~~~~~~~~~~~~~~~ * + * Quantization of pitch and codebook gains. * + * The following routines is Q_gains updated for AMR_WB_PLUS. * + * MA prediction is removed and MEAN_ENER is now quantized with 2 bits and * + * transmitted once every ACELP frame to the gains decoder. * + * The pitch gain and the code gain are vector quantized and the * + * mean-squared weighted error criterion is used in the quantizer search. * + *-------------------------------------------------------------------------*/ + +void encode_acelp_gains( + const float *code, + const int16_t gains_mode, + const float mean_ener_code, + const int16_t clip_gain, + ACELP_CbkCorr *g_corr, + float *gain_pit, + float *gain_code, + int16_t **pt_indice, + float *past_gcode, + float *gain_inov, + const int16_t L_subfr, + float *code2, + float *gain_code2, + const int16_t noisy_speech_flag ) +{ + int16_t index = 0; + + if ( ( ( gains_mode > 0 ) && ( gains_mode < 4 ) ) ) + { + /* Memory-less gain coding */ + index = Mode2_gain_enc_mless( code, L_subfr, gain_pit, gain_code, g_corr, mean_ener_code, clip_gain, past_gcode, gain_inov, gains_mode - 1 ); + } + else if ( gains_mode == 6 ) + { + /* UV gains quantizer (6bits/subfr) */ + index = gain_enc_uv( code, L_subfr, gain_pit, gain_code, g_corr, past_gcode, gain_inov ); + } + else if ( gains_mode == 7 ) + { + /* GACELP_UV gains quantizer (7=5-2bits/subfr) */ + index = gain_enc_gacelp_uv( code, code2, L_subfr, mean_ener_code, gain_pit, gain_code, gain_code2, g_corr, past_gcode, gain_inov, noisy_speech_flag ); + } + else + { + IVAS_ERROR( IVAS_ERR_INTERNAL, "invalid gains coding for acelp!" ); + } + + **pt_indice = index; + ( *pt_indice )++; + + return; +} + +/*---------------------------------------------------------------------* + * procedure Mode2_gain_enc_mless + * Quantization of pitch and codebook gains. + * - an initial predicted gain, gcode0, is first determined based on + * the predicted scaled innovation energy + * - the correction factor gamma = g_code / gcode0 is then vector quantized + * along with gain_pit + * - the mean-squared weighted error criterion is used for the quantizer search + *---------------------------------------------------------------------*/ + +int16_t Mode2_gain_enc_mless( + const float *code, /* i : algebraic excitation */ + const int16_t lcode, /* i : Subframe size */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + ACELP_CbkCorr *pcoeff, /* i/o: correlations , -2,, -2 and 2*/ + const float mean_ener, /* i : mean_ener defined in open-loop (3 bits) */ + const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ + float *past_gcode, /* i/o: past gain of code */ + float *gain_inov, /* o : unscaled innovation gain */ + const int16_t coder_type /* i : coder type */ +) +{ + int16_t index, i, size, size_clip; + const Word16 *p, *t_qua_gain; + float dist, dist_min, g_pitch, g_code, gcode0, ener_code; + ACELP_CbkCorr coeff; + + /*-----------------------------------------------------------------* + * - calculate the unscaled innovation energy + * - calculate the predicted gain code + *-----------------------------------------------------------------*/ + + if ( coder_type == 0 ) + { + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + ener_code = 10 * (float) log10( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + gcode0 = (float) pow( 10, 0.05 * ( mean_ener - ener_code ) ); + } + else + { + ener_code = 0.01F; + for ( i = 0; i < lcode; i++ ) + { + ener_code += code[i] * code[i]; + } + + *gain_inov = (float) sqrt( (float) lcode / ener_code ); + + ener_code = (float) ( -10.0 * log10( (float) lcode / ener_code ) ); + gcode0 = mean_ener - ener_code; + gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); /* predicted gain */ + } + + /*-----------------------------------------------------------------* + * gain quantization initializations + * - find the initial quantization pitch index + * - set the gains searching range + *-----------------------------------------------------------------*/ + + if ( coder_type == 0 ) + { + t_qua_gain = E_ROM_qua_gain5b_const; + size_clip = 9; + size = NB_QUA_GAIN5B; + } + else if ( coder_type == 1 ) + { + t_qua_gain = E_ROM_qua_gain6b_const; + size_clip = 6; + size = NB_QUA_GAIN6B; /* searching range of the gain quantizer */ + } + else + { + t_qua_gain = E_ROM_qua_gain7b_const; + size_clip = 21; + size = NB_QUA_GAIN7B; + } + + if ( clip_gain == 1 ) + { + size -= size_clip; /* limit pitch gain to 1.0 */ + } + + coeff = *pcoeff; + coeff.xy1 *= -2.0f; + coeff.xy2 *= -2.0f; + coeff.y1y2 *= 2.0f; + + /*-----------------------------------------------------------------* + * search for the best quantizer + *-----------------------------------------------------------------*/ + + p = t_qua_gain; + dist_min = FLT_MAX; + index = 0; + + for ( i = 0; i < size; i++ ) + { + g_pitch = (float) ( *p++ ) / ( 1 << 14 ); /* pitch gain */ + g_code = gcode0 * (float) ( *p++ ) / ( 1 << 11 ); /* codebook gain */ + + dist = g_pitch * g_pitch * coeff.y1y1 + g_pitch * coeff.xy1 + g_code * g_code * coeff.y2y2 + g_code * coeff.xy2 + g_pitch * g_code * coeff.y1y2; + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + + *gain_pit = (float) ( t_qua_gain[index * 2] ) / ( 1 << 14 ); + *gain_code = (float) ( t_qua_gain[index * 2 + 1] ) / ( 1 << 11 ) * gcode0; + + *past_gcode = *gain_code / *gain_inov; + + return index; +} + +/*---------------------------------------------------------------------* + * procedure gain_enc_uv + * Quantization of pitch and codebook gains. + * - an initial predicted gain, gcode0, is first determined based on + * the predicted scaled innovation energy + * - the correction factor gamma = g_code / gcode0 is then vector quantized + * along with gain_pit + * - the mean-squared weighted error criterion is used for the quantizer search + *---------------------------------------------------------------------*/ + +static int16_t gain_enc_uv( + const float *code, /* i : algebraic excitation */ + const int16_t lcode, /* i ) : Subframe size */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + ACELP_CbkCorr *coeff, /* i/o : correlations , -2,, -2 and 2 */ + float *past_gcode, /* i/o : past gain of code */ + float *gain_inov /* o : unscaled innovation gain */ +) +{ + int16_t index; + float g_code, g_code_corr; + + /*-----------------------------------------------------------------* + * - calculate the unscaled innovation energy + *-----------------------------------------------------------------*/ + + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + + g_code_corr = coeff->xy2 / ( coeff->y2y2 * ( *gain_inov ) ); /*Correlation based*/ + + g_code = g_code_corr; + + /*90dB max of gain for 2^15 amplitude code, */ + if ( g_code > 0.000001f ) + { + index = (int16_t) ( ( ( 20.f * log10( g_code ) + 30.f ) / 1.9f ) + 0.5f ); + + if ( index > 63 ) + { + index = 63; + } + else if ( index < 0 ) + { + index = 0; + } + } + else + { + index = 0; + } + + *gain_code = (float) pow( 10.f, ( ( ( index * 1.9f ) - 30.f ) / 20.f ) ); + *past_gcode = *gain_code; /*unscaled gain*/ + *gain_code *= *gain_inov; /*scaled gain*/ + *gain_pit = 0.f; + + return index; +} + +/*---------------------------------------------------------------------* + * procedure gain_enc_gacelp_uv + * Quantization of pitch and codebook gains. + * - an initial predicted gain, gcode0, is first determined based on + * the predicted scaled innovation energy + * - the correction factor gamma = g_code / gcode0 is then vector quantized + * along with gain_pit + * - the mean-squared weighted error criterion is used for the quantizer search + *---------------------------------------------------------------------*/ + +int16_t gain_enc_gacelp_uv( + const float *code, /* i : algebraic excitation */ + const float *code2, /* i : gaussian excitation */ + const int16_t lcode, /* i : Subframe size */ + const float mean_ener, /* i : quantized mean energy of the frame */ + float *gain_pit, /* o : quantized pitch gain */ + float *gain_code, /* o : quantized codebook gain */ + float *gain_code2, /* o : quantized codebook gain */ + ACELP_CbkCorr *coeff, /* i/o: correlations , -2,, -2 and 2 */ + float *past_gcode, /* i/o: past gain of code */ + float *gain_inov, /* o : unscaled innovation gain */ + const int16_t noisy_speech_flag /* i : noisy speech flag */ +) +{ + int16_t index; + float gcode, gcode2, pred_nrg_frame; + float norm_code2; + int16_t i; + float c, c_index2, c_first; + int16_t index2; + + /*-----------------------------------------------------------------* + * - calculate the unscaled innovation energy + *-----------------------------------------------------------------*/ + + *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); + pred_nrg_frame = (float) pow( 10.0, mean_ener / 20.0 ); + gcode = pred_nrg_frame * ( *gain_inov ); + norm_code2 = 1.0f / (float) sqrt( ( dotp( code2, code2, lcode ) + 0.01f ) / lcode ); + gcode2 = pred_nrg_frame * ( norm_code2 ); + + /*-----------------------------------------------------------------* + * search for the best quantizer + *-----------------------------------------------------------------*/ + + *gain_code = coeff->xy2 / ( coeff->y2y2 * gcode ); + + if ( *gain_code > 0.000001f ) + { + index = (int16_t) ( ( ( 20.f * log10( *gain_code ) + 20.f ) / 1.25f ) + 0.5f ); + + if ( index > 31 ) + { + index = 31; + } + else if ( index < 0 ) + { + index = 0; + } + } + else + { + index = 0; + } + + *gain_code = (float) pow( 10.f, ( ( ( index * 1.25f ) - 20.f ) / 20.f ) ); + *gain_code *= gcode; + + if ( noisy_speech_flag ) + { + c_first = 0.8f * coeff->xx - ( *gain_code ) * ( *gain_code ) * coeff->y2y2; + } + else + { + c_first = coeff->xx - ( *gain_code ) * ( *gain_code ) * coeff->y2y2; + } + index2 = 0; + *gain_code2 = (float) ( index2 * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); + + c_index2 = c_first - ( *gain_code2 ) * ( *gain_code2 ) * coeff->y1y1 - 2 * ( *gain_code ) * ( *gain_code2 ) * coeff->y1y2; + + for ( i = 1; i < 4; i++ ) + { + *gain_code2 = (float) ( i * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); + + c = c_first - ( *gain_code2 ) * ( *gain_code2 ) * coeff->y1y1 - 2 * ( *gain_code ) * ( *gain_code2 ) * coeff->y1y2; + + if ( fabs( c ) < fabs( c_index2 ) ) + { + index2 = i; + c_index2 = c; + } + } + + *gain_code2 = (float) ( index2 * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); + index += index2 * 32; + + *gain_pit = 0.f; + *past_gcode = *gain_code / *gain_inov; /*unscaled gain*/ + + return index; +} diff --git a/lib_enc/qlpc_avq.c b/lib_enc/qlpc_avq.c new file mode 100644 index 0000000000..03aeab128e --- /dev/null +++ b/lib_enc/qlpc_avq.c @@ -0,0 +1,385 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "ivas_prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * qlpc_avq() + * + * + *--------------------------------------------------------------------*/ + +void qlpc_avq( + const float *lsf, /* i : Input LSF vectors */ + const float *lsfmid, /* i : Input mid-LSF vectors */ + float *lsf_q, /* o : Quantized LFS vectors */ + float *lsfmid_q, /* o : Quantized mid-LFS vectors */ + int16_t *index, /* o : Quantization indices */ + int16_t *nb_indices, /* o : Number of quantization indices */ + int16_t *nbbits, /* o : Number of quantization bits */ + const int16_t core, /* i : core */ + const int32_t sr_core /* i : internal sampling rate */ +) +{ + int16_t i; + float lsfmid_q0[M]; + int16_t *tmp_index, indxt[256], nbits, nbt, nit; + float dummy[M]; + + /* Init */ + tmp_index = &index[0]; + *nb_indices = 0; + + /* Quantize end_frame LPC */ + set_f( lsf_q, 0, M ); + + tmp_index[0] = vlpc_1st_cod( lsf, lsf_q, sr_core, dummy ); + + nbt = vlpc_2st_cod( lsf, lsf_q, &tmp_index[1], 0, sr_core ); + + nit = 1 + 2 + index[1] + index[2]; + tmp_index += nit; + *nb_indices += nit; + nbbits[0] = 8 + nbt; + + *tmp_index = 0; + + /* Quantize mid-frame LPC */ + if ( core == TCX_10_CORE ) + { + tmp_index++; + *nb_indices += 1; + + /* LPC2: Abs? */ + set_f( lsfmid_q, 0, M ); + + tmp_index[0] = vlpc_1st_cod( lsfmid, lsfmid_q, sr_core, dummy ); + + nbits = vlpc_2st_cod( lsfmid, lsfmid_q, &tmp_index[1], 0, sr_core ); + + nbt = 8 + nbits; + nit = 1 + 2 + tmp_index[1] + tmp_index[2]; + + /* LPC2: RelR? */ + for ( i = 0; i < M; i++ ) + { + lsfmid_q0[i] = lsf_q[i]; + } + + nbits = vlpc_2st_cod( lsfmid, lsfmid_q0, indxt, 3, sr_core ); + + if ( nbits < nbt ) + { + nbt = nbits; + nit = 2 + indxt[0] + indxt[1]; + tmp_index[-1] = 1; + + for ( i = 0; i < M; i++ ) + { + lsfmid_q[i] = lsfmid_q0[i]; + } + + for ( i = 0; i < nit; i++ ) + { + tmp_index[i] = indxt[i]; + } + } + + tmp_index += nit; + *nb_indices += nit; + nbbits[1] = 1 + nbt; + } + + return; +} + + +/*-------------------------------------------------------------------* + * unary_code() + * + * + *--------------------------------------------------------------------*/ + +static int16_t unary_code( int16_t ind, BSTR_ENC_HANDLE hBstr ) +{ + int16_t nb_bits; + + nb_bits = 1; + + /* Index bits */ + ind -= 1; + + while ( ind >= 16 ) + { + push_next_indice( hBstr, 0xffffU, 16 ); + nb_bits += 16; + ind -= 16; + } + if ( ind > 0 ) + { + push_next_indice( hBstr, ( 1U << ind ) - 1, ind ); + nb_bits += ind; + } + + /* Stop bit */ + push_next_indice( hBstr, 0, 1 ); + + return ( nb_bits ); +} + + +/*-------------------------------------------------------------------* + * unpack4bits() + * + * + *--------------------------------------------------------------------*/ + +static int16_t unpack4bits( int16_t nbits, const int16_t *prm, BSTR_ENC_HANDLE hBstr ) +{ + int16_t i; + + if ( nbits == 0 ) + { + push_next_indice( hBstr, 0, 0 ); + i = 1; + } + else + { + i = 0; + + while ( nbits > 4 ) + { + push_next_indice( hBstr, prm[i], 4 ); + nbits -= 4; + i++; + } + push_next_indice( hBstr, prm[i], nbits ); + i++; + } + + return ( i ); +} + + +/*-------------------------------------------------------------------* + * encode_lpc_avq() + * + * + *--------------------------------------------------------------------*/ + +int16_t encode_lpc_avq( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + const int16_t numlpc, /* i : Number of sets of lpc */ + const int16_t *param_lpc, /* i : lpc parameters */ + const int16_t core, /* i : core */ + const int16_t element_mode /* i : element mode - decides between SNS and LPC coding */ +) +{ + int16_t k, j; + int16_t q_type, nb_ind; + int16_t i, qn1, qn2, nb, avqBits, st1 = 0; + int16_t nb_bits; + int16_t stereo_mode, bits_for_abs_quant; + + stereo_mode = 0; + + if ( element_mode == IVAS_CPE_MDCT ) + { + bits_for_abs_quant = SNS_ABS_QUANT_BITS; + } + else + { + bits_for_abs_quant = LPC_ABS_QUANT_BITS; + } + + j = 0; + nb_bits = 0; + + for ( k = 0; k < numlpc; k++ ) + { + /* Retrieve quantizer type */ + if ( k == 0 ) + { + q_type = 0; + } + else + { + q_type = param_lpc[j++]; + } + + if ( element_mode == IVAS_CPE_MDCT && k == 0 ) + { + stereo_mode = param_lpc[j++]; + } + + /* Determine number of AVQ indices */ + nb_ind = 0; + + if ( q_type == 0 ) + { + st1 = param_lpc[j++]; + } + qn1 = param_lpc[j++]; + qn2 = param_lpc[j++]; + if ( qn1 != SNS_LOW_BR_MODE ) + { + nb_ind += qn1 + qn2; + } + + if ( k == 0 || ( k == 1 && core != TCX_20_CORE ) ) + { + /* Encode quantizer type */ + if ( k == 0 ) + { + nb = 0; + } + else + { + nb = 1; + push_next_indice( hBstr, q_type, nb ); + } + + nb_bits += nb; + + /* Encode quantizer data */ + if ( ( ( q_type == 0 ) && element_mode != IVAS_CPE_MDCT ) || ( ( q_type == 0 ) && ( st1 >= 0 ) && element_mode == IVAS_CPE_MDCT ) ) + { + /* Absolute quantizer with 1st stage stochastic codebook */ + push_next_indice( hBstr, st1, bits_for_abs_quant ); + nb_bits += bits_for_abs_quant; + } + + if ( element_mode == IVAS_CPE_MDCT && stereo_mode == 3 && st1 < 0 ) + { + push_next_indice( hBstr, st1 + 2, 1 ); + nb_bits++; + } + + if ( element_mode != IVAS_CPE_MDCT || ( st1 != -2 && qn1 != SNS_LOW_BR_MODE ) ) + { + /* 2 bits to specify Q2,Q3,Q4,ext */ + nb_bits += 4; + i = qn1 - 2; + + if ( ( i < 0 ) || ( i > 3 ) ) + { + i = 3; + } + push_next_indice( hBstr, i, 2 ); + + i = qn2 - 2; + + if ( ( i < 0 ) || ( i > 3 ) ) + { + i = 3; + } + push_next_indice( hBstr, i, 2 ); + + /* Unary code for abs and rel LPC0/LPC2 */ + /* Q5 = 0, Q6=10, Q0=110, Q7=1110, ... */ + nb = qn1; + + if ( nb > 6 ) + { + nb -= 3; + } + else if ( nb > 4 ) + { + nb -= 4; + } + else if ( nb == 0 ) + { + nb = 3; + } + else + { + nb = 0; + } + + if ( nb > 0 ) + { + unary_code( nb, hBstr ); + } + nb_bits += nb; + + nb = qn2; + + if ( nb > 6 ) + { + nb -= 3; + } + else if ( nb > 4 ) + { + nb -= 4; + } + else if ( nb == 0 ) + { + nb = 3; + } + else + { + nb = 0; + } + + if ( nb > 0 ) + { + unary_code( nb, hBstr ); + } + nb_bits += nb; + + avqBits = 4 * qn1; + unpack4bits( avqBits, ¶m_lpc[j], hBstr ); + j += qn1; + nb_bits += avqBits; + + avqBits = 4 * qn2; + unpack4bits( avqBits, ¶m_lpc[j], hBstr ); + j += qn2; + nb_bits += avqBits; + } + } + else + { + j += nb_ind; + } + } + + return ( nb_bits ); +} diff --git a/lib_enc/qlpc_stoch.c b/lib_enc/qlpc_stoch.c new file mode 100644 index 0000000000..7723f507ec --- /dev/null +++ b/lib_enc/qlpc_stoch.c @@ -0,0 +1,340 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * lpc_quantization() + * + * + *--------------------------------------------------------------------*/ + +void lpc_quantization( + Encoder_State *st, + const float lsp[], + const float lspmid[], + float lsp_q[], + float lsf_q[], + float lspmid_q[], + const int16_t coder_type, + const int16_t acelp_midLpc, + int16_t param_lpc[], + int16_t nbits_lpc[], + int16_t *bits_param_lpc, + int16_t *no_param_lpc ) +{ + int16_t nb_indices; + float lsfmid_q[M]; + int16_t lsfmid_idx; + int16_t i; + float lsf[M], lsfmid[M]; + int16_t force_sf; + float fec_lsf[M], stab; + + nb_indices = 0; + + /****** High-rate LPC quantizer *******/ + if ( st->lpcQuantization == 0 ) + { + lsp2lsf( lsp, lsf, M, st->sr_core ); + + if ( st->core == TCX_10_CORE ) + { + lsp2lsf( lspmid, lsfmid, M, st->sr_core ); + } + + qlpc_avq( lsf, lsfmid, lsf_q, lsfmid_q, param_lpc, &nb_indices, nbits_lpc, st->core, st->sr_core ); + + lsf2lsp( lsf_q, lsp_q, M, st->sr_core ); + + if ( st->core == TCX_10_CORE ) + { + lsf2lsp( lsfmid_q, lspmid_q, M, st->sr_core ); + } + + assert( nb_indices <= NPRM_LPC_NEW ); + } + + /****** Low-rate LPC quantizer *******/ + + else if ( st->lpcQuantization == 1 ) + { + + lsp2lsf( lsp, lsf, M, st->sr_core ); + + force_sf = 0; + /*Force safety net when possible in case of transitions*/ + if ( st->tc_cnt >= 1 || st->last_core_brate <= SID_2k40 || st->next_force_safety_net ) + { + force_sf = 1; + st->next_force_safety_net = 0; + } + + if ( st->next_force_safety_net == 1 && st->Opt_RF_ON ) + { + force_sf = 1; + st->next_force_safety_net = 0; + } + + if ( st->sr_core == INT_FS_16k && coder_type == UNVOICED ) + { + lsf_end_enc( st, lsf, lsf_q, ENDLSF_NBITS, GENERIC, force_sf, param_lpc, no_param_lpc, bits_param_lpc, GENERIC +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + NULL +#endif + ); + + nb_indices = *no_param_lpc; + } + else + { + lsf_end_enc( st, lsf, lsf_q, ENDLSF_NBITS, coder_type, force_sf, param_lpc, no_param_lpc, bits_param_lpc, coder_type +#ifdef LSF_RE_USE_SECONDARY_CHANNEL + , + NULL +#endif + ); + + nb_indices = *no_param_lpc; + } + + FEC_lsf_estim_enc( st, fec_lsf ); + + /* FEC - calculate LSF stability */ + stab = lsf_stab( lsf_q, fec_lsf, 0, st->L_frame ); + + if ( stab < ( STAB_FAC_LIMIT + 0.2 ) && ( coder_type == VOICED || coder_type == GENERIC ) && st->Opt_RF_ON ) + { + st->next_force_safety_net = 1; + } + + lsf2lsp( lsf_q, lsp_q, M, st->sr_core ); + + *nbits_lpc = ENDLSF_NBITS; + } + else + { + assert( 0 ); + } + + st->seed_acelp = 0; + for ( i = nb_indices - 1; i >= 0; i-- ) + { + /* rightshift before seed_acelp+param_lpc[i] to avoid overflows*/ + st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[i] ) * 31821L + 13849L ); + } + + /* Mid-frame LPC quantization */ + if ( st->lpcQuantization && acelp_midLpc ) + { + if ( st->rate_switching_reset == 0 ) + { + lsp2lsf( lspmid, lsfmid, M, st->sr_core ); + midlsf_enc( st->lsf_old, lsf_q, lsfmid, &lsfmid_idx, M, st->Bin_E_old, st->narrowBand, st->sr_core, coder_type ); + param_lpc[nb_indices++] = lsfmid_idx; + + midlsf_dec( st->lsf_old, lsf_q, lsfmid_idx, lsfmid_q, M, coder_type, NULL, 0, 1 ); + + reorder_lsf( lsfmid_q, LSF_GAP_MID, M, st->sr_core ); + lsf2lsp( lsfmid_q, lspmid_q, M, st->sr_core ); + } + else + { + param_lpc[nb_indices++] = 0; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * Unified_weighting() + * + * LSF weighting + *-------------------------------------------------------------------*/ + +void Unified_weighting( + const float Bin_Ener_128[], /* i : FFT Bin energy 128 bins in two sets */ + const float lsf[], /* i : LSF vector */ + float w[], /* o : LP weighting filter (numerator) */ + const int16_t narrowBand, /* i : flag for Narrowband */ + const int16_t unvoiced, /* i : flag for Unvoiced frame */ + const int32_t sr_core, /* i : sampling rate of core-coder */ + const int16_t order /* i : LP order */ +) +{ + int16_t i; + float nf; + const int16_t( *ptr_lsf_fit_model )[M]; + int16_t norm_lsf[M]; + float tmp, min_val; + float w_fft[M]; + float Bin_Ener_160[160]; + const float *Bin_Ener; + const float *Freq_w_Table; + int16_t last_bin; + + /*Config. weighting*/ + if ( narrowBand ) + { + ptr_lsf_fit_model = lsf_unified_fit_model_nb; + nf = 6400.f; + + last_bin = 127; + Bin_Ener = Bin_Ener_128; + } + else if ( sr_core == INT_FS_12k8 ) + { + ptr_lsf_fit_model = lsf_unified_fit_model_wb; + nf = 6400.f; + + last_bin = 127; + Bin_Ener = Bin_Ener_128; + } + else + { + ptr_lsf_fit_model = lsf_unified_fit_model_wbhb; + nf = 8000.f; + + /* Fill the missing part (128~159) of the bin energy */ + last_bin = 159; + + mvr2r( Bin_Ener_128, Bin_Ener_160, L_FFT / 2 ); + + /* Find average bin energy (32 Energy) */ + tmp = 0.f; + for ( i = 95; i < 127; i++ ) + { + tmp += Bin_Ener_160[i]; + } + + tmp = tmp / 32.f; + for ( i = 127; i < 160; i++ ) + { + Bin_Ener_160[i] = tmp; + } + + Bin_Ener = Bin_Ener_160; + } + + /* 1) FFT weights*/ + if ( unvoiced ) + { + Freq_w_Table = Freq_Weight_UV; + } + else + { + Freq_w_Table = Freq_Weight_Com; + } + + /* Use Envelope */ + min_val = 1000.0f; + for ( i = 0; i < M; i++ ) + { + norm_lsf[i] = (int16_t) ( ( lsf[i] / 50.f ) + 0.5f ); + + if ( norm_lsf[i] == 0 ) + { + w_fft[i] = Bin_Ener[1]; + } + else if ( norm_lsf[i] == last_bin ) + { + w_fft[i] = Bin_Ener[last_bin - 1]; + } + else + { + tmp = max( Bin_Ener[norm_lsf[i]], Bin_Ener[norm_lsf[i] - 1] ); + w_fft[i] = max( Bin_Ener[norm_lsf[i] + 1], tmp ); + } + + if ( w_fft[i] < MIN_LOG_60dB ) + { + w_fft[i] = MIN_LOG_VAL_60dB; + } + else + { + w_fft[i] = (float) ( 10.0 * log10( w_fft[i] ) ); + } + + if ( w_fft[i] < min_val ) + { + min_val = w_fft[i]; + } + } + + for ( i = 0; i < M; i++ ) + { + w_fft[i] = (float) ( sqrt( w_fft[i] - min_val ) + 2.f ); + w_fft[i] *= Freq_w_Table[norm_lsf[i]]; + } + + /* 2) IHM weights*/ + w[0] = 1.f / ( lsf[0] - 0 ) + 1.f / ( lsf[1] - lsf[0] ); + for ( i = 1; i < order - 1; i++ ) + { + w[i] = 1.f / ( lsf[i] - lsf[i - 1] ) + 1.f / ( lsf[i + 1] - lsf[i] ); + } + w[order - 1] = 1.f / ( lsf[order - 1] - lsf[order - 2] ) + + 1.f / ( nf - lsf[order - 1] ); + + /* 3) Fitting model combining the two weights*/ + for ( i = 0; i < order; i++ ) + { + w[i] *= ( nf / EVS_PI ); + w[i] = ( (float) ( ptr_lsf_fit_model[0][i] ) / ( 1 << 10 ) ) + w[i] * ( (float) ( ptr_lsf_fit_model[1][i] ) / ( 1 << 15 ) ) + w[i] * w[i] * ( (float) ( ptr_lsf_fit_model[2][i] ) / ( 1 << 18 ) ) + w_fft[i] * ( (float) ( ptr_lsf_fit_model[3][i] ) / ( 1 << 12 ) ); + + if ( w[i] < 1.f / ( i + 1 ) ) + { + w[i] = 1.f / ( i + 1 ); + } + } + + return; +} diff --git a/lib_enc/range_enc.c b/lib_enc/range_enc.c new file mode 100644 index 0000000000..d44ed895a4 --- /dev/null +++ b/lib_enc/range_enc.c @@ -0,0 +1,329 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *-------------------------------------------------------------------*/ + +static void rc_enc_shift( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ ); + +static void rc_enc_write( BSTR_ENC_HANDLE hBstr, const int16_t byte, const int16_t bits ); + + +/*-------------------------------------------------------------------* + * rc_enc_init() + * + * Initalize range coder + *-------------------------------------------------------------------*/ + +void rc_enc_init( + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + int16_t tot_bits /* i : Total bit budget */ +) +{ + hPVQ->rc_low = 0; + hPVQ->rc_range = 0xffffffff; + hPVQ->rc_cache = -1; + hPVQ->rc_carry = 0; + hPVQ->rc_carry_count = 0; + hPVQ->rc_num_bits = 0; + hPVQ->rc_tot_bits = tot_bits; + hPVQ->rc_offset = 0; + + return; +} + +/*-------------------------------------------------------------------* + * rc_encode() + * + * Encode symbol with range coder + *-------------------------------------------------------------------*/ + +void rc_encode( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const uint32_t cum_freq, /* i : Cumulative frequency up to symbol */ + const uint32_t sym_freq, /* i : Symbol probability */ + const uint32_t tot /* i : Total cumulative frequency */ +) +{ + uint32_t r, tmp; + uint32_t inv_tot; + int16_t exp; + + inv_tot = UL_inverse( tot, &exp ); + tmp = UMult_32_32( hPVQ->rc_range, inv_tot ); + r = tmp >> ( exp - 32 ); + tmp = r * cum_freq; + + hPVQ->rc_low = hPVQ->rc_low + tmp; + if ( hPVQ->rc_low < tmp ) + { + hPVQ->rc_carry = 1; + } + + hPVQ->rc_range = r * sym_freq; + + while ( hPVQ->rc_range < 1 << 24 ) + { + hPVQ->rc_range = hPVQ->rc_range << 8; + hPVQ->rc_num_bits += 8; + rc_enc_shift( hBstr, hPVQ ); + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_enc_finish() + * + * Finalize range coder + *-------------------------------------------------------------------*/ + +void rc_enc_finish( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ +) +{ + uint32_t val, mask, high; + int16_t bits, over1, over2; + + bits = norm_ul( hPVQ->rc_range ) + 1; /* aligned to BASOP */ + mask = 0xffffffff >> bits; + + val = hPVQ->rc_low + mask; + high = hPVQ->rc_low + hPVQ->rc_range; + + over1 = val < hPVQ->rc_low; + over2 = high < hPVQ->rc_low; + + val = val & ~mask; + + if ( !( over1 ^ over2 ) ) + { + if ( ( val + mask ) >= high ) + { + bits++; + mask >>= 1; + val = ( hPVQ->rc_low + mask ) & ~mask; + } + + if ( val < hPVQ->rc_low ) + { + hPVQ->rc_carry = 1; + } + } + + hPVQ->rc_low = val; + + if ( bits > hPVQ->rc_tot_bits - hPVQ->rc_num_bits ) + { + bits = hPVQ->rc_tot_bits - hPVQ->rc_num_bits; + } + + hPVQ->rc_num_bits += bits; + while ( bits > 0 ) + { + rc_enc_shift( hBstr, hPVQ ); + bits -= 8; + } + + bits += 8; + + if ( hPVQ->rc_carry_count > 0 ) + { + rc_enc_write( hBstr, hPVQ->rc_cache + hPVQ->rc_carry, 8 ); + + while ( hPVQ->rc_carry_count > 1 ) + { + rc_enc_write( hBstr, ( hPVQ->rc_carry + 0xff ), 8 ); + hPVQ->rc_carry_count--; + } + rc_enc_write( hBstr, ( hPVQ->rc_carry + 0xff ) & ( ( 1 << bits ) - 1 ), bits ); + } + else + { + rc_enc_write( hBstr, ( hPVQ->rc_cache + hPVQ->rc_carry ) >> ( 8 - bits ), bits ); + } + + bits = hPVQ->rc_num_bits; + while ( bits < hPVQ->rc_tot_bits - 16 ) + { + rc_enc_write( hBstr, 0, 16 ); + bits += 16; + } + + bits = hPVQ->rc_tot_bits - bits; + if ( bits > 0 ) + { + rc_enc_write( hBstr, 0, bits ); + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_enc_shift() + * + * Shift a byte out to bitstream + *-------------------------------------------------------------------*/ + +static void rc_enc_shift( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ +) +{ + + if ( hPVQ->rc_low < ( 0xffUL << 24 ) || hPVQ->rc_carry ) + { + if ( hPVQ->rc_cache >= 0 ) + { + rc_enc_write( hBstr, hPVQ->rc_cache + hPVQ->rc_carry, 8 ); + } + + while ( hPVQ->rc_carry_count > 0 ) + { + rc_enc_write( hBstr, ( hPVQ->rc_carry + 0xff ) & 255, 8 ); + hPVQ->rc_carry_count--; + } + + hPVQ->rc_cache = hPVQ->rc_low >> 24; + hPVQ->rc_carry = 0; + } + else + { + hPVQ->rc_carry_count++; + } + + hPVQ->rc_low = hPVQ->rc_low << 8; + + return; +} + +/*-------------------------------------------------------------------* + * rc_enc_bits() + * + * + *-------------------------------------------------------------------*/ + +void rc_enc_bits( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle*/ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + const uint32_t value, /* i : Value to encode */ + const int16_t bits /* i : Number of bits used */ +) +{ + + if ( rc_get_bits2( hPVQ->rc_num_bits, hPVQ->rc_range ) + bits <= hPVQ->rc_tot_bits ) + { + hPVQ->rc_num_bits += bits; + if ( bits > 16 ) + { + push_indice( hBstr, IND_RC_END - hPVQ->rc_offset, (int16_t) ( value >> 16 ), bits - 16 ); + hPVQ->rc_offset++; + + push_indice( hBstr, IND_RC_END - hPVQ->rc_offset, (int16_t) ( value & ( ( 1 << 16 ) - 1 ) ), 16 ); + hPVQ->rc_offset++; + } + else + { + push_indice( hBstr, IND_RC_END - hPVQ->rc_offset++, (int16_t) value, bits ); + } + } + else + { + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_enc_uniform() + * + * Encode with uniform distribution + *-------------------------------------------------------------------*/ + +void rc_enc_uniform( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ + uint32_t value, /* i : Value to encode */ + uint32_t tot /* i : Maximum value */ +) +{ + int16_t n; + + n = 32 - norm_ul( tot - 1 ); /* aligned to BASOP */ + + if ( n <= 8 ) + { + rc_encode( hBstr, hPVQ, value, 1, tot ); + } + else + { + n -= 8; + rc_encode( hBstr, hPVQ, value >> n, 1, ( tot >> n ) + 1 ); + rc_enc_bits( hBstr, hPVQ, value & ( ( 1 << n ) - 1 ), n ); + } + + return; +} + +/*-------------------------------------------------------------------* + * rc_enc_write() + * + * Write a byte to bitstream + *-------------------------------------------------------------------*/ + +static void rc_enc_write( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const int16_t byte, /* i : Byte to write */ + const int16_t bits /* i : Number of bits */ +) +{ + push_indice( hBstr, IND_RC_START, byte, bits ); + + return; +} diff --git a/lib_enc/re8_cod.c b/lib_enc/re8_cod.c new file mode 100644 index 0000000000..30030cc394 --- /dev/null +++ b/lib_enc/re8_cod.c @@ -0,0 +1,89 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + + +/*------------------------------------------------------------------------ + * re8_cod() + * + * MULTI-RATE INDEXING OF A POINT y in THE LATTICE RE8 (INDEX COMPUTATION) + *--------------------------------------------------------------------------*/ + +void re8_cod( + int16_t x[], /* i : point in RE8 (8-dimensional integer vector) */ + int16_t *n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ + uint16_t *I, /* o : index of c (pointer to unsigned 16-bit word) */ + int16_t k[] /* o : index of v (8-dimensional vector of binary indices) = Voronoi index */ +) +{ + int16_t ka, c[8]; + + /*---------------------------------------------------------------------- + * decompose x as x = 2^r c + v, where r is an integer >=0, c is an element + * of Q0, Q2, Q3 or Q4, and v is an element of a Voronoi code in RE8 + * (if r=0, x=c) + * this decomposition produces as a side-product the index k[] of v + * and the identifier ka of the absolute leader related to c + * + * the index of y is split into 2 parts : + * - the index I of c + * - the index k[] of v + ----------------------------------------------------------------------*/ + + re8_vor( x, n, k, c, &ka ); + + /* safeguard in case that the AVQ subquantizer is not found - might happen for extremely strong onsets at the end of the frame */ + if ( ka >= NB_LEADER ) + { + *n = 0; + set_s( x, 0, 8 ); + } + + /* compute the index I (only if c is in Q2, Q3 or Q4) */ + if ( *n > 0 ) + { + re8_compute_base_index( c, ka, I ); + } + + return; +} diff --git a/lib_enc/reordernorm.c b/lib_enc/reordernorm.c new file mode 100644 index 0000000000..2387263aab --- /dev/null +++ b/lib_enc/reordernorm.c @@ -0,0 +1,88 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------*/ +/* Function reordernorm */ +/* ~~~~~~~~~~~~~~~~~~~~~ */ +/* */ +/* Reorder quantization indices and norms */ +/*--------------------------------------------------------------------------*/ + +void reordernorm( + const int16_t *ynrm, /* i : quantization indices for norms */ + const int16_t *normqlg2, /* i : quantized norms */ + int16_t *idxbuf, /* o : reordered quantization indices */ + int16_t *normbuf, /* o : reordered quantized norms */ + const int16_t nb_sfm /* i : number of bands */ +) +{ + int16_t i; + const int16_t *order = NULL; + + switch ( nb_sfm ) + { + case NB_SFM: + order = norm_order_48; + break; + case SFM_N_SWB: + order = norm_order_32; + break; + case SFM_N_WB: + order = norm_order_16; + break; + default: + order = norm_order_48; + break; + } + + for ( i = 0; i < nb_sfm; i++ ) + { + idxbuf[i] = ynrm[order[i]]; + normbuf[i] = normqlg2[order[i]]; + } + + return; +} diff --git a/lib_enc/rom_enc.c b/lib_enc/rom_enc.c new file mode 100644 index 0000000000..cc9755ce92 --- /dev/null +++ b/lib_enc/rom_enc.c @@ -0,0 +1,1026 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "wmops.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * VAD ROM tables + *----------------------------------------------------------------------------------*/ + +const int16_t hangover_hd_tbl[3] = {1, 1, 3}; +const int16_t hangover_sf_tbl[6] = {1, 3, 4, 1, 1, 2}; +const int16_t bwd_start_bin[BWD_N_BINS_MAX] = {1, 3, 6, 11}; +const int16_t bwd_end_bin[BWD_N_BINS_MAX] = {1, 4, 9, 12}; + +const int16_t BAND_NUM_TAB[5] = {10,10,20,40,60}; /* {OFFSET, NB, WB, SWB, FB} */ + +const float M_inr[16] = +{ + 1.00000000f, 0.98078525f, 0.92387950f, 0.83146960f, 0.70710677f, 0.55557019f, 0.38268343f, 0.19509035f, + 0.00000008f, -0.19509020f, -0.38268328f, -0.55557019f, -0.70710677f, -0.83146966f, -0.92387962f, -0.98078531f +}; + +const float M_ini[16] = +{ + 0.00000000f, 0.19509032f, 0.38268346f, 0.55557024f, 0.70710677f, 0.83146966f, 0.92387950f, 0.98078525f, + 1.00000000f, 0.98078531f, 0.92387956f, 0.83146966f, 0.70710677f, 0.55557019f, 0.38268328f, 0.19509009f +}; + +const float M_r[8] = +{ + 1.00000000f, 0.92387950f, 0.70710677f, 0.38268343f, -0.00000004f, -0.38268352f, -0.70710677f, -0.92387950f +}; + +const float M_i[8] = +{ + 0.00000000f, 0.38268346f, 0.70710677f, 0.92387950f, 1.00000000f, 0.92387950f, 0.70710677f, 0.38268349f +}; + +const float M_Wr[16]= +{ + 9.9518473e-001f, 9.5694034e-001f, 8.8192126e-001f, 7.7301045e-001f, 6.3439328e-001f, 4.7139674e-001f, 2.9028468e-001f, 9.8017140e-002f, + -9.8017140e-002f, -2.9028468e-001f, -4.7139674e-001f, -6.3439328e-001f, -7.7301045e-001f, -8.8192126e-001f, -9.5694034e-001f, -9.9518473e-001f +}; + +const float M_Wi[16] = +{ + 9.8017140e-002f, 2.9028468e-001f, 4.7139674e-001f, 6.3439328e-001f, 7.7301045e-001f, 8.8192126e-001f, 9.5694034e-001f, 9.9518473e-001f, + 9.9518473e-001f, 9.5694034e-001f, 8.8192126e-001f, 7.7301045e-001f, 6.3439328e-001f, 4.7139674e-001f, 2.9028468e-001f, 9.8017140e-002f +}; + +const int16_t SP_CENTER_BAND_NUM_TAB[5] = {10, 10, 20, 24, 24}; + +/* 107374184.f = 32768.f * 32768.f * 0.1 */ +const float VAD_DELTA1[5] = {107374184.f, 0.0f, 107374184.f, 107374184.f, 0.0f}; +const float VAD_DELTA2[5] = {107374184.f, 1.f, 107374184.f, 107374184.f, 107374184.f}; + +const int16_t NREGION_INDEX_NB[9] = {0,1,2,3,4,5,6,7, 9}; +const int16_t NREGION_INDEX_WB[13] = {0,1,2,3,4,5,6,8,10,12,16}; +const int16_t NREGION_INDEX_SWB[16] = {0,1,2,3,4,5,6,8,10,12,16,24,36}; +const int16_t NREGION_INDEX_FB[16] = {0,1,2,3,4,5,6,8,10,12,16,24,36}; +const int16_t ENERGY_BAND_NUM[4] = {8,10,12,MAX_SUBBAND_NUM}; +const int16_t * const REGION_INDEX[4] = {NREGION_INDEX_NB, NREGION_INDEX_WB,NREGION_INDEX_SWB,NREGION_INDEX_FB}; +const float MAX_LF_SNR_TAB[4] = {0.8f, 0.8f, 1.6f, 0.8f}; + +const float COMVAD_INIT_SNR_DELTA[5] = {1.0f, 0.6f, 0.86f, 1.16f, 1.0f}; +const float LS_MIN_SELENCE_SNR[3] = {7.5f, 7.5f, 6.8f}; +const float LT_MIN_SILENCE_SNR[3] = {4.5f, 4.5f, 4.5f}; + +/* half of the square root hanning window for spectral analysis */ +const float sqrt_han_window[L_FFT/2+1]= +{ + 0.000000f, 0.012272f, 0.024541f, 0.036807f, 0.049068f, 0.061321f, 0.073565f, 0.085797f, + 0.098017f, 0.110222f, 0.122411f, 0.134581f, 0.146730f, 0.158858f, 0.170962f, 0.183040f, + 0.195090f, 0.207111f, 0.219101f, 0.231058f, 0.242980f, 0.254866f, 0.266713f, 0.278520f, + 0.290285f, 0.302006f, 0.313682f, 0.325310f, 0.336890f, 0.348419f, 0.359895f, 0.371317f, + 0.382683f, 0.393992f, 0.405241f, 0.416430f, 0.427555f, 0.438616f, 0.449611f, 0.460539f, + 0.471397f, 0.482184f, 0.492898f, 0.503538f, 0.514103f, 0.524590f, 0.534998f, 0.545325f, + 0.555570f, 0.565732f, 0.575808f, 0.585798f, 0.595699f, 0.605511f, 0.615232f, 0.624860f, + 0.634393f, 0.643832f, 0.653173f, 0.662416f, 0.671559f, 0.680601f, 0.689541f, 0.698376f, + 0.707107f, 0.715731f, 0.724247f, 0.732654f, 0.740951f, 0.749136f, 0.757209f, 0.765167f, + 0.773010f, 0.780737f, 0.788346f, 0.795837f, 0.803208f, 0.810457f, 0.817585f, 0.824589f, + 0.831470f, 0.838225f, 0.844854f, 0.851355f, 0.857729f, 0.863973f, 0.870087f, 0.876070f, + 0.881921f, 0.887640f, 0.893224f, 0.898674f, 0.903989f, 0.909168f, 0.914210f, 0.919114f, + 0.923880f, 0.928506f, 0.932993f, 0.937339f, 0.941544f, 0.945607f, 0.949528f, 0.953306f, + 0.956940f, 0.960431f, 0.963776f, 0.966976f, 0.970031f, 0.972940f, 0.975702f, 0.978317f, + 0.980785f, 0.983105f, 0.985278f, 0.987301f, 0.989177f, 0.990903f, 0.992480f, 0.993907f, + 0.995185f, 0.996313f, 0.997290f, 0.998118f, 0.998795f, 0.999322f, 0.999699f, 0.999925f, + 1.000000f +}; + +/*----------------------------------------------------------------------------------* + * Starting points for pulse position search in Algebraic innovation codebook + *----------------------------------------------------------------------------------*/ +const int16_t tipos[40] = +{ + 0, 1, 2, 3, /* starting point &ipos[0], 1st iter */ + 1, 2, 3, 0, /* starting point &ipos[4], 2nd iter */ + 2, 3, 0, 1, /* starting point &ipos[8], 3rd iter */ + 3, 0, 1, 2, /* starting point &ipos[12], 4th iter */ + 0, 1, 2, 3, + 1, 2, 3, 0, + 2, 3, 0, 1, + 3, 0, 1, 2, + 0, 1, 2, 3, + 1, 2, 3, 0 /* end point for 28 pulses &ipos[39], 4th iter */ +}; + +/*----------------------------------------------------------------------------------* + * 1/4 resolution interpolation filter (-3 dB at 0.791*fs/2) + * for fractional pitch search + *----------------------------------------------------------------------------------*/ + +/* 1/4 resolution interpolation filter (-3 dB at 0.791*fs/2) */ +const float E_ROM_inter4_1[PIT_UP_SAMP * L_INTERPOL1 + 1] = +{ + 0.900000F, + 0.818959F, 0.604850F, 0.331379F, 0.083958F, + -0.075795F, -0.130717F, -0.105685F, -0.046774F, + 0.004467F, 0.027789F, 0.025642F, 0.012571F, + 0.001927F, -0.001571F, -0.000753F, 0.000000f +}; + +/* 1/6 resolution interpolation filter (-3 dB at 0.9*fs/2) */ +const float E_ROM_inter6_1[PIT_UP_SAMP6 * L_INTERPOL1 + 1] = +{ + 0.900848F, + 0.864136F, 0.760071F, 0.605408F, 0.424072F, + 0.242462F, 0.0840759F, -0.0343933F, -0.105560F, + -0.131348F, -0.121124F, -0.0884705F, -0.0476379F, + -0.0102539F, 0.0162964F, 0.0296021F, 0.0312195F, + 0.0251160F, 0.0157471F, 0.00671387F, 0.000000F, + -0.00399780F, -0.00592041F, -0.00656128F, 0.000000F +}; + +/*----------------------------------------------------------------------------------* + * Open-loop pitch tables + *----------------------------------------------------------------------------------*/ + +const int16_t nb_sect_12k8[3] = { 4, 4, 4 }; +const int16_t nb_subsect_12k8[3] = { 7, 7, 7 }; +const int16_t pit_max_12k8[8] = { 11, 16, 21, 31, 40, 61, 77, 115}; + +const int16_t len_12k8[4] = { 40, 40, 62, 115 }; +const int16_t len1_12k8[4] = { 40, 50, 80, 115 }; +const int16_t sublen_12k8[7] = { 40, 40, 40, 62, 62, 115, 115 }; +const int16_t sublen1_12k8[7] = { 40, 40, 50, 50, 80, 80, 115 }; +const int16_t sec_length_12k8[4] = { 7, 15, 30, 54 }; +const int16_t sec_length1_12k8[4] = { 10, 19, 37, 38 }; +const float h_fir[5] = {0.13f, 0.23f, 0.28f, 0.23f, 0.13f}; + +const float W_HIST[DTX_HIST_SIZE] = +{ + 0.2f, 0.16f, 0.128f, 0.1024f, 0.08192f, 0.065536f, 0.0524288f, 0.01048576f +}; + +const float preemphCompensation[NB_BANDS] = { 9.7461f, 9.5182f, 9.0262f, 8.3493f, 7.5764f, 6.7838f, 5.8377f, 4.8502f, 4.0346f, 3.2788f, 2.6283f, 2.0920f, 1.6304f, 1.2850f, 1.0108f, 0.7916f, 0.6268f, 0.5011f, 0.4119f, 0.3637f }; + +/*----------------------------------------------------------------------------------* + * LSF quantizer + *----------------------------------------------------------------------------------*/ + +const int16_t lsf_numlevels[TCXLPC_NUMSTAGES] = { 32, 16, 16 }; +const int16_t lsf_ind_numlevels[TCXLPC_IND_NUMSTAGES] = { 4 }; + +const int16_t lsf_unified_fit_model_nb[4][16] = +{ + {12506 , -17641 , -6444 , -6646 , -3523 , -2132 , -511 , -92 , 699 , 1062 , 2578 , 3564 , 3200 , -285 , 2928 , -250}, + {20383 , 18855 , 8494 , 8062 , 8105 , 6211 , 5068 , 4408 , 3741 , 3458 , 2732 , 3174 , 2412 , 17421 , -21717 , 0}, + {-717 , -617 , -144 , -117 , -229 , -144 , -141 , -98 , -92 , -69 , -51 , -87 , -37 , -3019 , 19864 , 8034}, + {-2424 , 8999 , 5723 , 5629 , 4239 , 3423 , 2507 , 2019 , 1245 , 736 , -907 , -2237 , -2558 , -1979 , -652 , 1657} +}; + +const int16_t lsf_unified_fit_model_wb[4][16] = +{ + {8323 , -567 , 3402 , 1389 , 1437 , 1820 , 1407 , 1299 , 1292 , 1206 , 1031 , 928 , 898 , 832 , 840 , 681}, + {24635 , 19605 , 9294 , 7407 , 6419 , 5459 , 4966 , 4189 , 3394 , 2964 , 2425 , 2110 , 2140 , 1972 , 1540 , 2252}, + {-867 , -666 , -168 , -114 , -90 , -122 , -129 , -101 , -65 , -56 , -39 , -35 , -40 , -42 , -35 , -56}, + {-2313 , 3035 , 1677 , 2854 , 2334 , 1232 , 1347 , 1034 , 863 , 707 , 886 , 891 , 432 , 357 , 206 , -310} +}; + +const int16_t lsf_unified_fit_model_wbhb[4][16] = +{ + {5312 , 1967 , 2914 , 1438 , 2595 , 1848 , 1980 , 2021 , 1535 , 1489 , 1651 , 1502 , 1447 , 1311 , 1353 , 1202}, + {28135 , 16053 , 10129 , 7366 , 5898 , 5341 , 3290 , 2780 , 3146 , 2423 , 1613 , 1370 , 1294 , 1635 , 1105 , 1431}, + {-615 , -308 , -147 , -119 , -104 , -105 , -30 , -28 , -50 , -39 , -15 , -14 , -14 , -21 , -19 , -29}, + {1534 , 3569 , 3138 , 4023 , 2105 , 2023 , 2046 , 1264 , 1340 , 1067 , 780 , 547 , 188 , -540 , -722 , -479} +}; + +/* LPC weights used in SWB TBE */ +const float lpc_weights[LPC_SHB_ORDER+1] = +{ + 1.0f, 0.975000000f, 0.950625000f, 0.926859375f, 0.903687891f, + 0.881095693f, 0.859068301f, 0.837591593f, 0.816651804f, + 0.796235509f, 0.776329621f +}; + +/* LSF weighting */ +const float Freq_Weight_Com[160] = +{ + 0.50000000f, 0.62940955f, 0.75000000f, 0.85355341f, 0.93301272f, 0.98296291f, 1.00000000f, 1.00000000f, + 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, + 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 0.97272730f, 0.94690263f, 0.92241377f, + 0.89915967f, 0.87704921f, 0.85600001f, 0.83593750f, 0.81679392f, 0.79850745f, 0.78102189f, 0.76428574f, + 0.74825174f, 0.73287672f, 0.71812081f, 0.70394737f, 0.69032258f, 0.67721522f, 0.66459626f, 0.65243900f, + 0.64071858f, 0.62941176f, 0.61849713f, 0.60795456f, 0.59776539f, 0.58791208f, 0.57837838f, 0.56914896f, + 0.56020945f, 0.55154639f, 0.54314721f, 0.53500003f, 0.52709359f, 0.51941746f, 0.51196170f, 0.50471699f, + 0.49767441f, 0.49082568f, 0.48416290f, 0.47767857f, 0.47136563f, 0.46521738f, 0.45922747f, 0.45338982f, + 0.44769874f, 0.44214877f, 0.43673471f, 0.43145162f, 0.42629483f, 0.42125985f, 0.41634241f, 0.41153845f, + 0.40684411f, 0.40225562f, 0.39776951f, 0.39338234f, 0.38909090f, 0.38489208f, 0.38078293f, 0.37676057f, + 0.37282231f, 0.36896551f, 0.36518770f, 0.36148649f, 0.35785952f, 0.35430464f, 0.35081968f, 0.34740260f, + 0.34405145f, 0.34076434f, 0.33753943f, 0.33437499f, 0.33126935f, 0.32822084f, 0.32522798f, 0.32228917f, + 0.31940299f, 0.31656805f, 0.31378299f, 0.31104651f, 0.30835736f, 0.30571428f, 0.30311614f, 0.30056179f, + 0.29805014f, 0.29558012f, 0.29315069f, 0.29076087f, 0.28840971f, 0.28609625f, 0.28381962f, 0.28157896f, + 0.27937338f, 0.27720207f, 0.27506426f, 0.27295917f, 0.27088606f, 0.26884422f, 0.26683292f, 0.26485148f, + 0.26289925f, 0.26097560f, 0.25907990f, 0.25721154f, 0.25536993f, 0.25355449f, 0.25176471f, 0.25000000f, + 0.24825986f, 0.24654378f, 0.24485126f, 0.24318182f, 0.24153499f, 0.23991032f, 0.23830736f, 0.23672566f, + 0.23516484f, 0.23362446f, 0.23210412f, 0.23060344f, 0.22912206f, 0.22765957f, 0.22621565f, 0.22478992f, + 0.22338204f, 0.22199170f, 0.22061856f, 0.21926230f, 0.21792261f, 0.21659920f, 0.21529175f, 0.21400000f, + 0.21272366f, 0.21146245f, 0.21021610f, 0.20898438f, 0.20776699f, 0.20656371f, 0.20537429f, 0.20419848f +}; + +const float Freq_Weight_UV[160] = +{ + 0.50000000f, 0.62940955f, 0.75000000f, 0.85355341f, 0.93301272f, 0.98296291f, 1.00000000f, 0.99180329f, + 0.98373985f, 0.97580647f, 0.96799999f, 0.96031743f, 0.95275593f, 0.94531250f, 0.93798447f, 0.93076921f, + 0.92366409f, 0.91666669f, 0.90977442f, 0.90298510f, 0.89629632f, 0.88970590f, 0.88321167f, 0.87681162f, + 0.87050360f, 0.86428571f, 0.85815603f, 0.85211265f, 0.84615386f, 0.84027779f, 0.83448273f, 0.82876712f, + 0.82312924f, 0.81756759f, 0.81208056f, 0.80666667f, 0.80132449f, 0.79605263f, 0.79084969f, 0.78571427f, + 0.78064513f, 0.77564102f, 0.77070063f, 0.76582277f, 0.76100630f, 0.75625002f, 0.75155282f, 0.74691355f, + 0.74233127f, 0.73780489f, 0.73333335f, 0.72891569f, 0.72455090f, 0.72023809f, 0.71597636f, 0.71176469f, + 0.70760232f, 0.70348835f, 0.69942194f, 0.69540232f, 0.69142854f, 0.68750000f, 0.68361580f, 0.67977530f, + 0.67597765f, 0.67222220f, 0.66850829f, 0.66483516f, 0.66120219f, 0.65760869f, 0.65405405f, 0.65053761f, + 0.64705884f, 0.64361703f, 0.64021164f, 0.63684213f, 0.63350785f, 0.63020831f, 0.62694299f, 0.62371135f, + 0.62051284f, 0.61734694f, 0.61421317f, 0.61111110f, 0.60804021f, 0.60500002f, 0.60199004f, 0.59900987f, + 0.59605908f, 0.59313726f, 0.59024388f, 0.58737862f, 0.58454108f, 0.58173078f, 0.57894737f, 0.57619047f, + 0.57345974f, 0.57075471f, 0.56807512f, 0.56542057f, 0.56279069f, 0.56018519f, 0.55760366f, 0.55504584f, + 0.55251139f, 0.55000001f, 0.54751134f, 0.54504502f, 0.54260087f, 0.54017860f, 0.53777778f, 0.53539824f, + 0.53303963f, 0.53070176f, 0.52838427f, 0.52608699f, 0.52380955f, 0.52155173f, 0.51931328f, 0.51709402f, + 0.51489359f, 0.51271188f, 0.51054853f, 0.50840336f, 0.50627613f, 0.50416666f, 0.50207472f, 0.50000000f, + 0.49794239f, 0.49590164f, 0.49387756f, 0.49186993f, 0.48987854f, 0.48790324f, 0.48594376f, 0.48400000f, + 0.48207173f, 0.48015872f, 0.47826087f, 0.47637796f, 0.47450981f, 0.47265625f, 0.47081712f, 0.46899223f, + 0.46718147f, 0.46538460f, 0.46360153f, 0.46183205f, 0.46007603f, 0.45833334f, 0.45660377f, 0.45488721f, + 0.45318353f, 0.45149255f, 0.44981414f, 0.44814816f, 0.44649446f, 0.44485295f, 0.44322345f, 0.44160584f +}; + +/*----------------------------------------------------------------------------------* + * Speech/music classification + *----------------------------------------------------------------------------------*/ + +const float w_spmus[HANG_LEN][HANG_LEN] = +{ + {1.0f, 0, 0, 0, 0, 0, 0, 0}, + {0.6f, 0.4f, 0, 0, 0, 0, 0, 0}, + {0.47f, 0.33f, 0.2f, 0, 0, 0, 0, 0}, + {0.4f, 0.3f, 0.2f, 0.1f, 0, 0, 0, 0}, + {0.30f, 0.25f, 0.2f, 0.15f, 0.1f, 0, 0, 0}, + {0.233f, 0.207f, 0.18f, 0.153f, 0.127f, 0.1f, 0, 0}, + {0.235f, 0.205f, 0.174f, 0.143f, 0.112f, 0.081f, 0.05f, 0}, + {0.200f, 0.179f, 0.157f, 0.136f, 0.114f, 0.093f, 0.071f, 0.05f} +}; + +const float sm_means[N_SMC_FEATURES] = +{ + 109.073304f, 0.727576f, 0.246557f, 0.291464f, 0.836498f, 1.021915f, 1.213649f, 64.230265f, 1.236224f, -2.347783f, 1.795570f, -0.039230f, -0.292081f, 0.611993f, 5.587905f, +}; + +const float sm_scale[N_SMC_FEATURES] = +{ + 44.621579f, 0.159182f, 0.063806f, 0.067614f, 0.112130f, 0.103447f, 0.091769f, 16.522003f, 0.115806f, 1.284023f, 3.337835f, 1.726416f, 1.422670f, 0.270914f, 0.422958f, +}; + +const float hout_intervals[N_SMC_FEATURES * 2] = +{ + 18.000000f, 230.000000f, 0.000000f, 0.999769f, 0.119389f, 0.990880f, 0.255791f, 1.181627f, + 0.406328f, 1.384250f, 0.580520f, 1.543470f, 0.780707f, 1.881730f, 0.000000f, 121.586754f, + 0.000000f, 262.696747f, -8.535435f, -0.000056f, -14.433754f, 17.815642f, -10.632537f, 12.045707f, + -11.751500f, 10.883281f, 0.000793f, 1.994476f, + 3.021017f, 10.545962f, +}; + +const float bcox_add_cnst[N_SMC_FEATURES] = +{ + 0.000000f, 0.000000f, -0.878682f, -0.726044f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + -0.778993f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f +}; + +const float bcox_lmbd[N_SMC_FEATURES] = +{ + 0.000000f, 0.000000f, -0.664282f, -0.422504f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + -0.634475f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +}; + +const float pca_mean_[N_SMC_FEATURES] = +{ + 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.000000f, -0.000000f, 0.000000f, -0.000000f, + -0.000000f, 0.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f, 0.000000f +}; + +const float pca_components_[N_SMC_FEATURES * N_PCA_COEF] = +{ + 0.025076f, -0.242897f, 0.309604f, 0.391805f, 0.384930f, 0.378366f, 0.352165f, -0.191363f, 0.158511f, 0.329501f, 0.145794f, 0.086507f, 0.009591f, 0.276506f, -0.007154f, + 0.257163f, -0.155283f, 0.246218f, 0.085165f, 0.045108f, 0.015357f, -0.016262f, 0.401832f, -0.474550f, 0.265252f, -0.139009f, 0.045243f, 0.193588f, -0.320563f, 0.469797f, + 0.018485f, 0.411620f, -0.274918f, 0.116888f, 0.292559f, 0.264870f, 0.143960f, 0.125920f, -0.165879f, -0.160480f, 0.562003f, -0.092482f, -0.230844f, -0.334957f, 0.074177f, + -0.543239f, 0.130739f, 0.154372f, -0.038147f, 0.035080f, 0.100375f, 0.228511f, 0.201526f, -0.046292f, 0.160674f, -0.362982f, -0.578790f, -0.234618f, -0.078058f, -0.050249f, + -0.182307f, 0.037429f, 0.061261f, 0.093339f, 0.059335f, -0.193803f, -0.080321f, 0.090248f, -0.034781f, 0.112808f, -0.142238f, 0.569180f, -0.728376f, 0.006001f, 0.092312f, + -0.580333f, 0.267716f, 0.100290f, 0.247248f, 0.169273f, -0.103110f, -0.306500f, 0.185496f, 0.038247f, 0.039038f, 0.108890f, 0.290420f, 0.500892f, 0.013977f, -0.049396f, + -0.065514f, 0.046068f, -0.237602f, -0.273503f, 0.133385f, 0.314017f, 0.457390f, -0.016266f, -0.086721f, -0.150066f, -0.424647f, 0.446826f, 0.227552f, -0.208976f, -0.176039f, + -0.478224f, -0.674547f, -0.269482f, -0.137992f, 0.016470f, 0.044476f, -0.031077f, -0.179975f, -0.121603f, -0.122852f, 0.236972f, -0.009416f, -0.014771f, -0.118357f, 0.297773f, + -0.077792f, 0.418931f, -0.084287f, -0.022155f, -0.151479f, 0.022706f, 0.094876f, -0.494710f, 0.113785f, 0.131465f, -0.127655f, 0.012390f, 0.078456f, 0.074088f, 0.689439f, + -0.082841f, 0.013846f, 0.493010f, 0.317749f, -0.257594f, -0.112637f, 0.188073f, -0.375933f, -0.292828f, -0.462353f, 0.024861f, 0.031511f, -0.010596f, -0.276552f, -0.124346f, + -0.025136f, -0.058113f, 0.137926f, 0.044374f, -0.239076f, 0.007627f, 0.343252f, 0.516920f, 0.447960f, -0.427809f, 0.100915f, 0.071696f, 0.016780f, 0.162128f, 0.327376f, + -0.016076f, -0.042889f, -0.441975f, 0.409942f, -0.243623f, -0.482644f, 0.460423f, 0.052715f, -0.067754f, 0.305681f, 0.058106f, -0.008628f, 0.098064f, -0.032513f, -0.123637f, +}; + +const float means_speech[N_SMC_MIXTURES*N_PCA_COEF] = +{ + 4.144528f, -0.445994f, -0.070302f, 0.359876f, -0.040196f, -0.118265f, 0.644765f, -0.174143f, -0.114585f, 0.658716f, 0.278107f, -0.260928f, + -0.030065f, -1.206812f, 0.639289f, -0.610196f, -0.053418f, 0.478088f, -0.616374f, -0.216908f, 0.606710f, 0.113900f, -0.003494f, 0.216351f, + -1.910358f, -1.553362f, 0.643357f, 0.417784f, 0.274502f, 0.145654f, 0.013066f, -0.241637f, 0.220763f, 0.108261f, -0.062127f, 0.030421f, + 1.887472f, -0.864524f, -0.953246f, -0.252614f, 0.064793f, -0.105010f, -0.229351f, 0.277444f, 0.033348f, -0.089741f, -0.033241f, 0.019242f, + -0.413334f, -1.784803f, -0.187205f, -0.391714f, -0.243155f, -0.223117f, -0.018042f, 0.129642f, 0.137285f, -0.049526f, 0.029685f, -0.024247f, + -0.694581f, -1.756488f, 0.597206f, 1.030080f, 0.297682f, 0.383268f, 0.135800f, -0.177134f, 0.096645f, -0.268388f, -0.151836f, -0.101950f, +}; + +const float log_det_chol_speech[N_SMC_MIXTURES] = +{ + 6.500575f, 5.852711f, 5.579274f, 6.652653f, 4.752021f, 5.338445f, +}; + +const float prec_chol_speech[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = +{ + 0.865878f, -0.223069f, 1.134475f, -0.467260f, 0.369334f, 1.214700f, -0.211695f, 0.172669f, 0.139801f, 1.227951f, 0.116632f, -0.073137f, 0.119470f, 0.215339f, 1.501916f, 0.013243f, 0.241111f, -0.233638f, 0.209664f, -0.018477f, 1.781218f, -0.379717f, -0.055418f, 0.148630f, -0.151909f, -0.176478f, 0.700080f, 1.271311f, 0.079390f, -0.578062f, 0.405159f, -0.535997f, -0.075627f, -0.020922f, 0.275374f, 2.125945f, 0.814927f, -0.606386f, -0.240098f, -0.027454f, -0.137439f, -0.139499f, -0.299115f, 0.030554f, 2.224794f, -0.568133f, -0.955587f, -0.171094f, -0.289375f, -0.522709f, -0.635692f, -0.351548f, 0.418509f, 0.752386f, 2.817156f, -0.775162f, 0.841142f, 0.217873f, 0.245892f, -0.180432f, 0.026225f, -0.382074f, 0.147919f, -1.265659f, -0.335493f, 2.967484f, 0.754874f, 0.141008f, 0.037836f, 0.308811f, 0.275340f, -0.452874f, -0.553189f, -0.418168f, 0.103281f, 0.201651f, 0.314494f, 3.377585f, + 0.779866f, 0.119905f, 1.141061f, -0.433102f, -0.137556f, 0.835925f, -0.090233f, 0.132780f, 0.173085f, 1.162743f, -0.145567f, -0.028395f, 0.225752f, 0.256599f, 0.910930f, -0.217284f, -0.136945f, 0.088241f, 0.645317f, 0.087336f, 1.763780f, -0.058051f, -0.130243f, 0.140597f, 0.115878f, -0.276806f, 0.046556f, 1.584224f, 0.124624f, 0.035427f, -0.450071f, 0.235519f, 0.026577f, 0.378839f, 0.229695f, 2.869275f, -0.064182f, -1.030753f, 0.478893f, -0.037797f, -0.056435f, 0.399677f, -0.031347f, -1.444284f, 2.420667f, 0.188893f, -0.274488f, -0.214157f, 0.033407f, -0.011455f, 0.074756f, 0.504102f, 1.017356f, -0.133849f, 3.051604f, -0.073218f, -0.087385f, 0.077721f, 0.043399f, -0.015758f, 0.444000f, 0.562457f, -0.191897f, -0.302418f, 1.360105f, 2.524057f, -0.004116f, 0.250276f, -0.555062f, -0.066119f, -0.117207f, 0.137765f, -0.906956f, -0.113493f, 0.148421f, -0.263721f, -0.027223f, 2.956242f, + 0.733245f, -0.119951f, 0.865278f, -0.284074f, 0.078205f, 0.774011f, 0.074174f, 0.050798f, 0.120807f, 1.043815f, -0.093873f, -0.004341f, 0.160160f, -0.049218f, 0.884860f, -0.233987f, -0.371980f, 0.176357f, 0.862305f, -0.213931f, 1.822231f, 0.073135f, 0.011031f, -0.032639f, 0.353599f, -0.046119f, 0.299068f, 1.350803f, 0.531362f, 0.119452f, -1.304316f, 0.474532f, 0.177936f, 0.231008f, -0.132024f, 4.311452f, -1.292563f, -1.363504f, 2.222133f, 0.634631f, 0.206881f, 1.656581f, 0.313303f, -3.861843f, 4.023381f, 0.551323f, -0.021584f, -0.028669f, 0.207615f, 0.060790f, 0.510691f, 0.402249f, 0.641479f, -0.595568f, 2.659337f, 0.391733f, -0.194752f, -0.176729f, 0.099828f, 0.043602f, 0.576035f, 0.237896f, 0.662829f, -0.011826f, 1.098881f, 2.184154f, -0.206869f, 0.373664f, -0.688495f, -0.451344f, -0.083556f, -0.698290f, -0.246953f, 1.487042f, -0.541136f, -1.623548f, -0.847720f, 2.354680f, + 0.877970f, -0.031860f, 0.897153f, -0.139154f, -0.036593f, 1.259062f, -0.180257f, -0.027482f, 0.133144f, 1.316491f, 0.081446f, -0.121134f, 0.106265f, 0.117032f, 1.545899f, -0.077895f, 0.200631f, -0.067932f, 0.170562f, -0.237579f, 1.822282f, -0.134144f, -0.050759f, 0.041119f, -0.232042f, 0.084914f, 0.153996f, 1.891612f, 0.136661f, -0.437424f, 0.084375f, -0.242023f, -0.080411f, -0.220920f, 0.230393f, 2.053484f, 0.105555f, -0.361013f, -0.040929f, -0.011767f, -0.004277f, -0.004061f, -0.080962f, -0.367068f, 2.043357f, -0.046665f, -0.463621f, -0.148325f, 0.104752f, -0.308704f, -0.181149f, 0.155644f, 0.056089f, 0.427374f, 2.803357f, -0.269472f, 0.516361f, 0.001706f, 0.217995f, -0.127911f, 0.029542f, 0.254344f, 0.267460f, -0.813244f, 0.111844f, 2.549009f, 0.109195f, 0.092682f, -0.018745f, -0.013426f, -0.401214f, 0.127705f, -0.601705f, -0.111657f, 0.169593f, -0.107168f, 0.262454f, 3.714371f, + 0.674920f, -0.038705f, 1.051066f, -0.068032f, -0.035061f, 0.725132f, -0.129053f, 0.054747f, 0.122093f, 0.993569f, -0.045902f, -0.029557f, 0.159814f, 0.066913f, 1.215179f, -0.227482f, 0.010274f, -0.035148f, 0.424745f, -0.168736f, 1.576698f, 0.167059f, 0.026802f, -0.077380f, 0.064844f, -0.047268f, 0.101866f, 1.483204f, -0.078188f, 0.028231f, -0.136149f, 0.119205f, 0.005789f, 0.045958f, 0.087542f, 1.955771f, 0.142281f, -0.822192f, -0.014402f, -0.193328f, -0.030001f, 0.017168f, 0.009956f, 0.394809f, 2.300930f, 0.517255f, -0.517422f, -0.062056f, 0.053836f, -0.049730f, 0.156868f, 0.336429f, 0.171164f, 0.338078f, 2.660829f, -0.135033f, 0.812377f, 0.224385f, 0.495786f, 0.135518f, 0.547065f, 0.080456f, -0.299118f, -0.904148f, -0.094750f, 2.689407f, -0.273906f, 0.047255f, -0.099798f, -0.175864f, -0.111706f, -0.187478f, 0.017459f, 0.179466f, 0.303312f, -0.914377f, -0.454025f, 2.476254f, + 0.621627f, 0.011114f, 0.981192f, -0.253924f, -0.028998f, 0.716900f, -0.000541f, -0.058620f, -0.133470f, 1.285166f, 0.023501f, -0.107565f, 0.003875f, 0.521398f, 0.938485f, -0.274409f, -0.864538f, 0.475578f, 1.350173f, 0.704398f, 1.977759f, -0.009563f, -0.180193f, -0.152311f, 0.308965f, 0.476963f, 0.235046f, 1.431437f, 0.203638f, -1.193943f, -0.776895f, 2.853604f, 1.384001f, 2.607643f, 0.210453f, 4.753994f, -0.318441f, -0.641232f, 0.681624f, 0.064183f, 0.062136f, 0.491965f, 0.078715f, -1.190437f, 2.299521f, 0.279093f, -0.531432f, 0.056751f, 0.908371f, 0.596757f, 1.108720f, 0.554711f, 1.171101f, -0.006235f, 2.159307f, 0.175362f, -0.505673f, 0.166484f, 0.362916f, 0.227361f, 0.587717f, 0.301477f, 0.363320f, 0.233596f, 0.708472f, 2.246567f, -0.273318f, 0.112575f, -0.014105f, -0.074279f, -0.077574f, -0.191145f, -0.280995f, 0.338633f, 0.068418f, -1.464972f, -0.873218f, 2.629376f, +}; + +const float weights_speech[N_SMC_MIXTURES] = +{ + 0.110243f, 0.158178f, 0.164349f, 0.167653f, 0.235143f, 0.164434f, +}; + +const float means_music[N_SMC_MIXTURES*N_PCA_COEF] = +{ + 0.656611f, 1.525081f, 0.094663f, 0.532436f, 0.093851f, 0.302220f, -0.010327f, -0.389405f, -0.291664f, -0.049673f, 0.073362f, 0.080331f, + -0.430694f, -0.007781f, 0.065952f, -1.004505f, -0.195157f, -0.457738f, 0.402081f, 0.277964f, -0.025551f, 0.144147f, 0.103940f, -0.083957f, + -0.360195f, 1.474304f, -0.268462f, -0.060606f, -0.008471f, -0.155261f, -0.242842f, 0.119412f, -0.196130f, -0.300577f, -0.029504f, 0.060241f, + -2.474926f, 1.226681f, -0.002546f, 0.253692f, -0.118133f, 0.066950f, 0.167503f, 0.047745f, -0.302155f, 0.018914f, 0.034468f, 0.011810f, + -0.944544f, 1.303678f, 0.326616f, 0.443005f, 0.339787f, 0.353776f, 0.811425f, -0.201050f, 0.056356f, 0.825931f, 0.425448f, -0.400853f, + 2.416758f, 0.991434f, -0.249973f, -0.264729f, -0.003941f, -0.242565f, -0.114334f, 0.179267f, 0.085679f, -0.001649f, -0.267403f, 0.028878f, +}; + +const float log_det_chol_music[N_SMC_MIXTURES] = +{ + 3.236255f, 3.517110f, 5.675361f, 2.875446f, -2.234983f, 7.961542f, +}; + +const float prec_chol_music[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = +{ + 0.865468f, 0.096250f, 0.875676f, -0.081846f, -0.330935f, 1.076934f, 0.141790f, 0.047793f, 0.095596f, 0.805507f, 0.014703f, 0.133837f, -0.185849f, 0.065923f, 0.878885f, -0.023521f, -0.109075f, 0.293645f, -0.004503f, 0.103060f, 1.017106f, -0.140600f, -0.264764f, 0.386274f, -0.037347f, -0.140433f, -0.230523f, 1.476784f, -0.097932f, 0.056998f, -0.001711f, -0.088553f, 0.012943f, -0.094897f, 0.176247f, 1.239658f, 0.145315f, 0.034242f, -0.028931f, -0.132416f, 0.080181f, 0.025223f, -0.464244f, 0.005253f, 1.895192f, -0.096706f, -0.029121f, 0.072887f, 0.005231f, -0.191996f, -0.169344f, 0.616334f, -0.105826f, -0.302582f, 2.184961f, -0.173989f, -0.194028f, 0.036340f, -0.116044f, -0.145628f, -0.150018f, 0.249165f, 0.112598f, 0.374794f, 0.091387f, 2.450082f, 0.253605f, 0.179610f, -0.178889f, 0.182902f, -0.015903f, 0.219889f, -0.718143f, -0.189849f, -0.115940f, -0.439124f, -0.679777f, 2.330453f, + 0.538970f, -0.035968f, 0.813335f, 0.022517f, -0.181125f, 0.948319f, -0.159673f, -0.049540f, 0.123396f, 1.071468f, -0.045159f, -0.114757f, 0.123202f, 0.060699f, 1.446151f, -0.071575f, 0.090669f, 0.052802f, -0.124821f, -0.326671f, 1.345917f, 0.129963f, 0.194230f, -0.182184f, -0.063497f, 0.009279f, 0.273701f, 1.322214f, 0.151468f, 0.144482f, 0.090362f, -0.417473f, -0.022089f, -0.353023f, -0.136793f, 1.200676f, -0.210558f, -0.243242f, 0.041053f, -0.058388f, 0.047228f, -0.190541f, -0.223507f, 0.254937f, 1.699705f, 0.164428f, 0.014902f, -0.289802f, 0.230417f, -0.013618f, -0.154441f, 0.264950f, -0.320963f, -0.258504f, 2.316852f, 0.000212f, 0.187401f, -0.011045f, 0.382538f, -0.052954f, -0.256577f, 0.155038f, -0.129821f, -0.074534f, 0.208774f, 2.065668f, -0.134512f, -0.076705f, -0.095956f, -0.239026f, 0.198459f, 0.130585f, -0.290055f, -0.028346f, 0.367803f, 0.031032f, 0.304326f, 3.008867f, + 0.768930f, 0.108937f, 0.919200f, -0.112951f, -0.528392f, 1.553020f, -0.115801f, 0.007334f, -0.029592f, 1.098616f, 0.003621f, 0.099218f, -0.247408f, -0.078849f, 1.367811f, 0.042889f, -0.077877f, 0.209637f, -0.165400f, -0.017952f, 1.342725f, -0.184761f, 0.050278f, 0.029655f, 0.175364f, -0.016161f, -0.161006f, 1.722900f, 0.051465f, 0.010021f, 0.385607f, -0.264551f, -0.281174f, -0.362257f, -0.036395f, 1.382524f, -0.066193f, -0.084715f, -0.123814f, -0.032121f, 0.092897f, 0.068140f, -0.260849f, 0.010565f, 1.773789f, 0.236448f, 0.096324f, -0.080643f, 0.122260f, 0.129134f, 0.109539f, 0.427091f, -0.456268f, -0.254883f, 3.037065f, 0.130895f, -0.132792f, -0.126857f, 0.006429f, 0.009618f, -0.233609f, 0.804552f, -0.307940f, -0.127871f, 1.666924f, 2.807298f, -0.369826f, -0.012257f, 0.017262f, -0.057686f, -0.135910f, 0.150073f, -1.517210f, 0.219460f, 0.501691f, -2.240129f, -1.288359f, 3.654831f, + 0.768658f, 0.003820f, 0.830374f, -0.217304f, -0.148821f, 0.978966f, -0.069324f, 0.005255f, -0.006609f, 0.791961f, 0.067522f, 0.106222f, -0.221519f, 0.017580f, 0.917797f, -0.000305f, -0.087966f, 0.058007f, -0.062253f, 0.174119f, 1.000509f, 0.111418f, 0.138297f, 0.085620f, 0.205840f, 0.010353f, -0.212830f, 1.272419f, 0.019098f, 0.078237f, -0.022486f, -0.089409f, -0.174376f, -0.190770f, -0.036704f, 1.255936f, -0.031611f, -0.422268f, -0.059954f, -0.227044f, 0.032839f, -0.039616f, -0.299988f, 0.188407f, 1.783848f, 0.555498f, 0.100881f, 0.083480f, -0.091083f, 0.227518f, 0.151158f, 0.519622f, -0.289353f, -0.348091f, 2.626882f, 0.069054f, 0.080511f, -0.097590f, -0.066670f, 0.182192f, 0.038856f, 0.195598f, -0.205755f, -0.129408f, 0.675275f, 2.359014f, -0.290034f, -0.005755f, -0.061652f, -0.041416f, 0.115984f, 0.037760f, -0.462742f, 0.100872f, 0.299008f, -1.288345f, -0.758290f, 2.209114f, + 0.370886f, 0.068065f, 0.614958f, -0.068457f, -0.114038f, 0.796522f, -0.079392f, -0.027007f, 0.057585f, 0.635611f, -0.018133f, -0.062099f, -0.185303f, 0.084657f, 0.533251f, -0.148971f, -0.038737f, 0.268261f, 0.165710f, 0.022648f, 0.747975f, -0.004069f, 0.059367f, 0.050886f, 0.069492f, -0.103153f, -0.088546f, 0.703324f, 0.045359f, -0.122298f, -0.227646f, 0.062645f, 0.011837f, 0.069355f, -0.019762f, 1.067046f, 0.105756f, -0.440658f, 0.192851f, -0.058815f, 0.028047f, 0.138805f, -0.125973f, -0.667383f, 1.143016f, -0.065451f, 0.083705f, -0.153760f, -0.060730f, -0.000403f, -0.090839f, 0.063298f, -0.037514f, 0.351583f, 1.182379f, -0.106357f, -0.016221f, -0.010726f, 0.100052f, 0.057551f, 0.105911f, -0.001332f, -0.078458f, -0.268890f, -0.242942f, 1.545230f, 0.023359f, -0.080829f, 0.231242f, -0.036875f, 0.079070f, 0.062469f, 0.004314f, 0.075508f, 0.036818f, 0.069211f, -0.363344f, 1.482260f, + 1.209142f, 0.088647f, 1.211345f, -0.361558f, -0.636888f, 1.613629f, -0.073522f, 0.094440f, 0.348373f, 1.388855f, 0.080521f, -0.037507f, 0.070824f, 0.052632f, 1.876701f, -0.032255f, 0.124895f, -0.048464f, -0.228421f, -0.227230f, 1.726811f, -0.291388f, -0.077976f, 0.299319f, -0.171845f, 0.012052f, 0.228501f, 2.014814f, -0.039524f, -0.252147f, 0.412488f, -0.546076f, -0.276125f, -0.498767f, 0.283854f, 1.733851f, 0.044785f, -0.173411f, 0.095814f, -0.035061f, 0.007025f, 0.236956f, -0.269935f, -0.192304f, 1.968567f, -0.667309f, -0.209738f, -0.260295f, 0.087080f, -0.241920f, -0.281580f, 0.361767f, -0.183381f, 0.175271f, 3.096483f, -0.472230f, -0.015951f, -0.043282f, -0.052428f, -0.352133f, -0.334534f, 0.390436f, 0.113373f, -0.300916f, 1.454841f, 2.885831f, 0.478838f, 0.050578f, -0.039767f, 0.114396f, -0.067675f, 0.013117f, -1.117973f, -0.208723f, 0.445495f, -0.031657f, 0.011242f, 4.388051f, +}; + +const float weights_music[N_SMC_MIXTURES] = +{ + 0.156143f, 0.136090f, 0.300104f, 0.193919f, 0.051812f, 0.161931f, +}; + +const float means_noise[N_SMC_MIXTURES*N_PCA_COEF] = +{ + 1.038195f, 0.637194f, -1.048590f, -0.949921f, -0.088088f, -0.620960f, -0.230118f, 0.960491f, 0.410842f, 0.323754f, -0.634407f, 0.010970f, + -1.206174f, -0.844701f, -0.731341f, -1.143035f, -0.316326f, -0.425896f, 0.447156f, 1.554899f, -0.100991f, 0.950109f, -0.229985f, -0.201161f, + 1.333451f, 0.554427f, -1.252278f, -0.248920f, 0.051240f, -0.444626f, -0.158659f, 1.095395f, 0.246439f, 0.057993f, -0.786062f, 0.175020f, + 1.232670f, 0.329225f, -0.881330f, -0.052693f, 0.156031f, -0.303587f, -0.111282f, 0.790189f, 0.130987f, 0.064452f, -0.478277f, 0.103193f, + -1.990813f, -0.723883f, -1.196019f, -1.768941f, -0.344735f, -0.677093f, -0.256214f, 1.351858f, -0.353724f, 0.768104f, -0.384513f, -0.371595f, + -2.101499f, -1.294068f, -0.188406f, -1.843713f, -0.786294f, -0.539876f, 0.241184f, 1.600162f, -0.300266f, 1.225627f, 0.080940f, -0.231195f, +}; + +const float log_det_chol_noise[N_SMC_MIXTURES] = +{ + 11.878154f, 13.025598f, 12.831137f, 7.099546f, 13.242941f, 11.898383f, +}; + +const float prec_chol_noise[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = +{ + 1.632699f, -0.379077f, 1.966804f, -0.344223f, -0.149261f, 2.120968f, -0.643124f, 0.344982f, 0.335749f, 1.870530f, -0.261820f, 0.059065f, 0.158862f, -0.280203f, 2.457868f, 0.081479f, 0.745744f, -0.249165f, -0.769764f, -1.012361f, 2.160652f, -0.156229f, 0.672157f, -0.261424f, 0.116279f, -0.228307f, -0.056947f, 3.407241f, 0.356097f, -0.736238f, 0.705233f, -1.408321f, -0.717390f, -1.037433f, 0.333510f, 2.484870f, 0.323039f, -1.483297f, -0.500337f, -0.090107f, -0.439007f, -0.290405f, 0.327256f, -0.243020f, 2.511947f, 0.442037f, 0.525936f, -1.436016f, 0.336699f, 0.176533f, -0.643667f, 0.793828f, -0.342947f, 0.672485f, 4.147797f, 0.332162f, 0.594025f, -1.072022f, 0.522281f, 0.199482f, 0.046997f, 0.786233f, -0.726740f, -1.173474f, 0.744190f, 3.950012f, -0.607163f, -0.630364f, 1.025563f, -0.779746f, -0.553567f, 0.336951f, -1.148469f, 0.489795f, 0.770505f, -1.178058f, -0.433118f, 6.111872f, + 2.143755f, -0.413062f, 2.014192f, -0.075622f, -0.450719f, 2.205736f, 0.280257f, 0.584592f, 0.270209f, 2.063094f, -1.015927f, -0.580325f, 0.143926f, -0.584358f, 2.804261f, -0.678043f, 0.350781f, -0.335668f, -1.550830f, -0.871893f, 2.572887f, 0.675586f, 0.480079f, -0.359260f, 0.282963f, 0.038297f, -0.806271f, 3.881284f, -0.007880f, -0.600785f, 0.418550f, -1.442369f, 0.052922f, -0.189472f, -0.679946f, 2.474994f, -0.050026f, -1.336880f, -0.230418f, -0.014308f, -0.572717f, -1.251292f, 0.476137f, 0.270476f, 2.682144f, -0.043322f, -0.275643f, -1.378692f, -0.310016f, -0.355372f, -0.291887f, -0.105540f, -0.006300f, 0.295662f, 4.390412f, -0.318893f, 0.350906f, -0.770328f, 0.501645f, -0.080125f, -0.331810f, 0.474472f, -0.445056f, -1.149920f, 1.144612f, 4.264102f, 0.070893f, -0.033470f, -0.263519f, -0.577897f, 0.826515f, 0.188348f, 0.256791f, -0.351058f, 0.993722f, 0.972258f, 1.109502f, 6.637324f, + 1.568506f, -0.221341f, 1.966173f, -0.367708f, -0.350875f, 2.751533f, -0.123500f, 0.287689f, -0.365051f, 2.117681f, 0.163212f, 0.082424f, -0.165235f, -0.143181f, 2.593907f, 0.033464f, 0.285970f, 0.290856f, -0.552542f, -0.344460f, 2.494827f, 0.116380f, 0.004019f, -0.298612f, 0.063575f, 0.159355f, -0.363974f, 3.116427f, 0.379961f, -0.086746f, -0.164435f, -0.242829f, -0.121803f, -0.644812f, 0.433181f, 2.516195f, 0.092920f, -1.078008f, -0.106551f, -0.224285f, -0.252404f, -0.173980f, 0.329091f, -0.646624f, 2.951021f, 0.051908f, -0.385181f, -0.300332f, 0.016299f, 0.082525f, 0.077887f, 0.789534f, -0.866108f, 1.039234f, 4.648430f, -0.262984f, 0.276620f, -0.203404f, 0.098407f, -0.039619f, 0.124315f, 1.110207f, -0.567436f, -0.910194f, 2.916694f, 4.692430f, 0.077585f, 0.031716f, 0.378054f, -0.133353f, -0.557203f, -0.075146f, -1.984817f, 0.529554f, 0.608864f, -2.224605f, -1.402217f, 6.366141f, + 0.779595f, -0.089397f, 1.234740f, 0.024544f, -0.218958f, 1.424978f, -0.070141f, 0.146756f, -0.121060f, 1.420921f, 0.081782f, -0.063427f, -0.064760f, 0.108557f, 1.528785f, -0.082491f, 0.002662f, 0.169068f, 0.112307f, -0.279665f, 1.745017f, 0.025568f, -0.009241f, -0.013853f, -0.070061f, 0.170304f, -0.047415f, 1.938777f, 0.196318f, 0.002824f, -0.012629f, -0.213627f, -0.071292f, -0.352020f, 0.181309f, 2.060772f, 0.057579f, -0.207220f, 0.138657f, -0.078942f, 0.052427f, 0.140410f, -0.305897f, -0.468443f, 2.109666f, 0.091878f, -0.295279f, -0.302448f, 0.067905f, -0.086834f, -0.131233f, 0.170017f, -0.373685f, 0.413721f, 2.785042f, -0.144180f, -0.183951f, -0.006815f, -0.092817f, -0.164308f, 0.014492f, 0.354251f, 0.016589f, -0.393079f, 0.228511f, 2.902565f, 0.052404f, 0.092540f, 0.171645f, 0.052254f, -0.274919f, -0.103905f, -0.641625f, 0.082116f, 0.031077f, -0.507968f, -0.058403f, 3.419316f, + 1.206695f, -0.682889f, 2.049445f, -0.507047f, -0.343185f, 1.895558f, -0.136277f, 0.093440f, 0.696606f, 2.282985f, 0.012380f, -0.155599f, 0.040493f, -0.121679f, 3.355282f, -0.492283f, 0.647906f, -1.064008f, -0.988783f, -0.065537f, 2.779347f, 0.650801f, 0.326591f, -0.046862f, 0.187397f, -0.194321f, -0.032757f, 4.176259f, 0.551237f, -0.536042f, 0.150845f, -1.240364f, -0.370417f, -0.855459f, 0.336866f, 2.809574f, 0.340270f, -1.176219f, 0.013030f, 0.354705f, -0.488960f, -0.466479f, 0.783022f, -0.149058f, 2.884207f, 1.206646f, 0.307873f, -1.411090f, 0.070099f, 0.209224f, 0.291007f, -0.377239f, -0.640368f, 0.406003f, 5.155920f, 0.809698f, 0.669060f, -0.941776f, 1.072041f, -0.116894f, -0.149209f, 0.452617f, -0.740148f, -1.188619f, 2.296872f, 4.692944f, -0.040471f, -0.131586f, 0.797791f, -2.162108f, 1.341433f, 1.097095f, -1.576712f, 0.454951f, 0.343379f, -0.053275f, 0.073795f, 6.902156f, + 1.388928f, -0.529069f, 1.914570f, -0.246147f, -0.376892f, 1.708861f, -0.205445f, 0.314175f, 0.650069f, 1.841539f, -0.085711f, -0.013295f, -0.070955f, -0.466548f, 3.166998f, -0.260572f, 0.720834f, -0.792817f, -1.467658f, -0.372909f, 2.710914f, 0.606852f, 0.637359f, -0.541404f, -0.330263f, 0.170983f, 0.064970f, 2.980650f, 0.184834f, -0.340049f, 0.288191f, -1.044021f, -0.466651f, -0.374637f, -0.231777f, 2.131845f, 0.132432f, -0.963210f, -0.294608f, 0.042302f, -0.114246f, -0.932316f, -0.166230f, 0.203508f, 2.563777f, 0.548839f, -0.440379f, -0.934541f, -0.344106f, 0.030490f, -0.377361f, -0.085154f, -0.262774f, 0.477136f, 4.772394f, 0.084517f, 0.357867f, -0.429870f, 0.688023f, 0.353825f, -0.439173f, 0.076948f, -0.769601f, -1.177351f, 1.958859f, 4.300092f, -0.207814f, 0.243404f, -0.706169f, -0.588024f, 0.962382f, 0.338356f, -0.298229f, -0.351656f, 0.768647f, 0.689511f, 0.692148f, 6.121235f, +}; + +const float weights_noise[N_SMC_MIXTURES] = +{ + 0.186702f, 0.110792f, 0.358051f, 0.085247f, 0.132809f, 0.126399f, +}; + +const float m_speech[N_MIXTURES*N_FEATURES] = +{ + 0.287950f, 0.915145f, 0.146341f, 0.215938f, 0.337233f, 0.416424f, 0.464061f, 0.463680f, 0.059083f, 0.853025f, 0.768184f, 0.314352f, + 0.306930f, 0.936427f, 0.255783f, 0.304095f, 0.328435f, 0.264893f, 0.353664f, 0.481807f, 0.050087f, 0.816373f, 0.828952f, 0.335445f, + 0.241923f, 0.953049f, 0.219456f, 0.259538f, 0.436515f, 0.498549f, 0.456902f, 0.490619f, 0.062629f, 0.832243f, 0.845146f, 0.331393f, + 0.424629f, 0.528660f, 0.325986f, 0.502250f, 0.543419f, 0.561620f, 0.591057f, 0.386511f, 0.067280f, 0.903251f, 0.891515f, 0.344377f, + 0.380487f, 0.727792f, 0.209973f, 0.314364f, 0.421881f, 0.398734f, 0.446999f, 0.402498f, 0.105313f, 0.867979f, 0.877883f, 0.317694f, + 0.344962f, 0.658148f, 0.240913f, 0.348251f, 0.433178f, 0.480324f, 0.498983f, 0.419444f, 0.187060f, 0.868077f, 0.855516f, 0.347290f +}; + +const float invV_speech[N_MIXTURES*N_FEATURES*N_FEATURES] = +{ + -39.495125f, -14.409725f, -38.632778f, -17.688078f, 8.772461f, -11.402443f, 0.439471f, -10.340120f, -48.738274f, 0.349716f, 16.818443f, 32.142887f, + -14.409725f, -195.908417f, -27.029999f, -27.433266f, -16.451397f, -6.243556f, 5.814015f, 12.751663f, -65.479347f, -46.738777f, -8.373536f, 18.300566f, + -38.632782f, -27.029999f, -753.940247f, 115.388985f, -47.167007f, 27.107189f, -36.896187f, 72.593445f, -298.310120f, -22.776127f, 177.255432f, 89.802238f, + -17.688076f, -27.433270f, 115.388954f, -222.724594f, 40.140877f, -45.163593f, 21.461746f, 7.970023f, -27.137230f, 76.520920f, 25.476706f, 38.804222f, + 8.772461f, -16.451405f, -47.167007f, 40.140877f, -94.404678f, 40.199402f, -17.781452f, 3.901072f, -14.428046f, 23.148809f, 13.478944f, 17.505091f, + -11.402439f, -6.243560f, 27.107193f, -45.163593f, 40.199394f, -93.411865f, 57.189003f, 3.581622f, 0.100851f, 5.812640f, 9.256781f, 10.823537f, + 0.439471f, 5.814015f, -36.896187f, 21.461748f, -17.781452f, 57.189003f, -89.808571f, -5.465971f, -46.055283f, -15.567553f, 14.521687f, 10.769546f, + -10.340121f, 12.751663f, 72.593445f, 7.970019f, 3.901072f, 3.581622f, -5.465971f, -100.358055f, 24.768887f, -20.986031f, -47.276218f, 13.192144f, + -48.738274f, -65.479347f, -298.310120f, -27.137238f, -14.428048f, 0.100851f, -46.055275f, 24.768887f, -1377.781250f, -56.637291f, 233.195129f, -114.883377f, + 0.349715f, -46.738777f, -22.776127f, 76.520912f, 23.148806f, 5.812638f, -15.567553f, -20.986031f, -56.637291f, -216.730820f, -0.914011f, 39.627998f, + 16.818443f, -8.373537f, 177.255432f, 25.476713f, 13.478942f, 9.256781f, 14.521687f, -47.276218f, 233.195129f, -0.914013f, -153.435181f, -48.048389f, + 32.142887f, 18.300564f, 89.802223f, 38.804218f, 17.505091f, 10.823533f, 10.769546f, 13.192144f, -114.883377f, 39.628006f, -48.048389f, -313.631622f, + -53.471222f, -47.464245f, -0.896915f, -25.132132f, 30.892912f, -27.316641f, 22.758862f, -18.016706f, -66.564011f, -3.584184f, -7.795120f, 35.122147f, + -47.464249f, -438.709412f, -11.227010f, -14.463504f, 12.490106f, -11.184597f, 2.622577f, -3.664124f, -84.887161f, -29.377838f, -53.413090f, 17.047739f, + -0.896916f, -11.227015f, -251.993881f, 153.947250f, 4.508913f, 26.900564f, -22.145449f, 7.110321f, -215.903503f, -47.320839f, 78.247871f, 16.021702f, + -25.132132f, -14.463490f, 153.947235f, -326.623169f, 62.711872f, 7.543400f, 23.738796f, 19.846117f, -97.089355f, 2.828130f, 75.120659f, 34.945835f, + 30.892912f, 12.490105f, 4.508915f, 62.711872f, -289.161591f, 178.348740f, -26.642651f, 11.309997f, -10.248929f, 16.504482f, 48.839104f, 20.334949f, + -27.316643f, -11.184605f, 26.900568f, 7.543384f, 178.348740f, -267.764130f, 15.141651f, 4.242836f, -7.640367f, 77.632545f, -2.166305f, 12.531335f, + 22.758862f, 2.622574f, -22.145449f, 23.738796f, -26.642651f, 15.141647f, -71.479584f, 2.006794f, -4.579958f, 30.676281f, 15.085149f, 8.568682f, + -18.016706f, -3.664128f, 7.110321f, 19.846119f, 11.309998f, 4.242836f, 2.006794f, -76.086823f, 56.165844f, -8.384334f, -103.682259f, 6.086752f, + -66.564011f, -84.887161f, -215.903488f, -97.089355f, -10.248927f, -7.640366f, -4.579959f, 56.165840f, -1920.100708f, -8.861668f, 500.888123f, -16.967447f, + -3.584186f, -29.377846f, -47.320839f, 2.828135f, 16.504475f, 77.632553f, 30.676281f, -8.384336f, -8.861669f, -181.010406f, -15.615012f, 8.247152f, + -7.795123f, -53.413109f, 78.247864f, 75.120659f, 48.839104f, -2.166309f, 15.085151f, -103.682251f, 500.888123f, -15.615015f, -433.988953f, -70.138153f, + 35.122147f, 17.047737f, 16.021706f, 34.945835f, 20.334948f, 12.531336f, 8.568681f, 6.086751f, -16.967451f, 8.247154f, -70.138176f, -217.081589f, + -94.138069f, -64.204018f, 0.309024f, -46.150829f, 42.051434f, -41.965660f, 10.197500f, -19.122877f, -42.942600f, -19.220772f, -21.222412f, 46.903416f, + -64.204025f, -818.921143f, 30.093992f, -42.236637f, 6.486305f, -4.382217f, 10.975861f, 0.330433f, -16.922922f, -58.340889f, -111.845398f, -1.666081f, + 0.309030f, 30.093992f, -342.960907f, 202.719925f, -66.503586f, 59.412266f, -81.710594f, 14.449543f, -155.271118f, 13.000940f, 119.772522f, 37.219341f, + -46.150829f, -42.236637f, 202.719910f, -315.177094f, 74.731415f, -97.374359f, 58.435394f, 19.693314f, -62.044556f, 6.968471f, 74.460442f, 22.385506f, + 42.051434f, 6.486304f, -66.503578f, 74.731415f, -93.988602f, 52.841560f, -21.181007f, 2.344793f, -35.600548f, -19.262661f, 37.872654f, 6.642675f, + -41.965660f, -4.382209f, 59.412254f, -97.374352f, 52.841560f, -278.285614f, 214.990295f, -0.626728f, -43.822613f, -21.303955f, 15.663709f, 3.870531f, + 10.197496f, 10.975868f, -81.710587f, 58.435387f, -21.181000f, 214.990295f, -234.196167f, 1.970801f, -16.810629f, -1.859668f, 16.002600f, 3.998644f, + -19.122877f, 0.330433f, 14.449545f, 19.693314f, 2.344791f, -0.626729f, 1.970801f, -57.165413f, 20.255400f, -9.028506f, -83.099960f, 8.659401f, + -42.942604f, -16.922922f, -155.271103f, -62.044556f, -35.600552f, -43.822613f, -16.810629f, 20.255400f, -986.222534f, 27.520060f, 397.979370f, -10.706357f, + -19.220772f, -58.340889f, 13.000940f, 6.968470f, -19.262661f, -21.303955f, -1.859668f, -9.028505f, 27.520063f, -181.756256f, -31.725298f, 5.532037f, + -21.222410f, -111.845398f, 119.772507f, 74.460449f, 37.872654f, 15.663704f, 16.002598f, -83.099960f, 397.979370f, -31.725298f, -499.032318f, -64.723236f, + 46.903416f, -1.666086f, 37.219345f, 22.385508f, 6.642675f, 3.870531f, 3.998645f, 8.659404f, -10.706349f, 5.532042f, -64.723228f, -245.227646f, + -20.650835f, 1.359996f, -2.309748f, 3.667799f, -4.431922f, -1.491803f, 2.244124f, -6.511281f, -7.420423f, -2.656161f, -5.103209f, 2.977657f, + 1.359996f, -45.519173f, -27.833733f, 11.524545f, -5.826983f, 8.198447f, -4.084381f, 13.450377f, 18.150373f, -9.569582f, -6.539153f, -3.438999f, + -2.309748f, -27.833733f, -75.630455f, 54.383217f, -10.366678f, 10.230091f, -6.134814f, 5.390231f, -18.911335f, 8.611535f, -4.468428f, 2.542004f, + 3.667800f, 11.524545f, 54.383224f, -148.724060f, 102.126076f, -8.536950f, 14.920280f, -2.707708f, 16.232759f, -12.092183f, -2.761442f, 5.324492f, + -4.431922f, -5.826983f, -10.366676f, 102.126083f, -239.405472f, 114.426819f, -4.901945f, 3.331610f, -2.787818f, -19.461893f, 9.501407f, 1.843912f, + -1.491803f, 8.198447f, 10.230090f, -8.536962f, 114.426842f, -252.874207f, 133.055328f, -2.890811f, -8.063058f, -19.651783f, -6.576759f, -6.167914f, + 2.244124f, -4.084381f, -6.134819f, 14.920280f, -4.901949f, 133.055328f, -188.368149f, 0.868558f, -5.905251f, -73.150818f, 15.489239f, 3.931309f, + -6.511280f, 13.450379f, 5.390231f, -2.707708f, 3.331610f, -2.890812f, 0.868557f, -291.328827f, 8.357405f, 5.690188f, -65.318748f, -3.008168f, + -7.420423f, 18.150373f, -18.911335f, 16.232759f, -2.787818f, -8.063062f, -5.905251f, 8.357409f, -817.866455f, -35.719170f, 465.940338f, -57.209427f, + -2.656161f, -9.569582f, 8.611535f, -12.092187f, -19.461897f, -19.651789f, -73.150826f, 5.690184f, -35.719170f, -273.267426f, 28.788002f, 35.708652f, + -5.103208f, -6.539154f, -4.468427f, -2.761442f, 9.501406f, -6.576763f, 15.489231f, -65.318748f, 465.940338f, 28.788004f, -993.901489f, -74.051056f, + 2.977657f, -3.439001f, 2.542004f, 5.324495f, 1.843912f, -6.167918f, 3.931307f, -3.008166f, -57.209423f, 35.708649f, -74.051048f, -188.919189f, + -29.690845f, -6.602296f, -5.942207f, -8.191399f, 12.539626f, -17.187153f, 8.095049f, -11.539900f, -3.959312f, -2.929833f, -13.009781f, 14.593680f, + -6.602297f, -27.784903f, -12.036678f, -8.735461f, 10.268900f, -8.173005f, -0.508073f, 2.189236f, -3.210277f, -19.652676f, 0.174784f, 12.064508f, + -5.942207f, -12.036678f, -176.179718f, 87.371017f, -19.441795f, 2.946336f, -40.577980f, 4.105769f, -30.427385f, -23.225182f, 84.964821f, 43.734604f, + -8.191399f, -8.735461f, 87.371017f, -143.001602f, 51.919571f, -27.973251f, 29.284573f, -2.447426f, -11.954906f, 27.745192f, 11.595254f, 0.393728f, + 12.539626f, 10.268898f, -19.441788f, 51.919567f, -178.068130f, 128.031281f, -3.544543f, 6.851246f, -10.772905f, -42.477104f, 34.736156f, 40.172005f, + -17.187153f, -8.173005f, 2.946335f, -27.973251f, 128.031281f, -165.563629f, 51.259937f, -4.838826f, 3.758103f, 40.516190f, -7.739178f, -19.154724f, + 8.095048f, -0.508073f, -40.577976f, 29.284571f, -3.544538f, 51.259933f, -108.403847f, -0.894440f, 3.337809f, 2.241667f, 3.315053f, 1.456518f, + -11.539901f, 2.189236f, 4.105764f, -2.447426f, 6.851246f, -4.838827f, -0.894440f, -214.332535f, -4.848935f, -3.779825f, -75.247871f, -1.171161f, + -3.959312f, -3.210277f, -30.427393f, -11.954905f, -10.772905f, 3.758103f, 3.337807f, -4.848933f, -266.199005f, 2.878902f, 180.030838f, -44.094963f, + -2.929832f, -19.652674f, -23.225182f, 27.745188f, -42.477104f, 40.516193f, 2.241667f, -3.779825f, 2.878902f, -156.775406f, -11.596662f, 4.385890f, + -13.009781f, 0.174784f, 84.964828f, 11.595254f, 34.736156f, -7.739182f, 3.315054f, -75.247871f, 180.030838f, -11.596662f, -489.502777f, -57.779266f, + 14.593680f, 12.064507f, 43.734604f, 0.393729f, 40.172005f, -19.154715f, 1.456519f, -1.171165f, -44.094959f, 4.385883f, -57.779274f, -250.653564f, + -23.921967f, -5.683947f, -2.099401f, 0.128250f, 5.166994f, -10.038282f, 6.450608f, -0.731379f, -2.247439f, -4.157187f, 6.583568f, 4.081524f, + -5.683947f, -30.142115f, -8.658390f, -12.576810f, -1.309613f, 1.993960f, -4.383123f, 6.826682f, -0.827366f, -21.146013f, 3.620328f, 11.092305f, + -2.099401f, -8.658390f, -121.018547f, 88.485786f, -27.739552f, 24.281445f, -27.560604f, 3.724861f, 6.288231f, -12.520897f, 2.671664f, 12.669825f, + 0.128251f, -12.576811f, 88.485771f, -144.032974f, 84.679276f, -37.420727f, 25.546324f, 1.023258f, -7.474452f, 16.698721f, 8.763003f, 1.241009f, + 5.166994f, -1.309613f, -27.739553f, 84.679291f, -144.411407f, 72.554382f, -14.219510f, 2.006990f, 17.638592f, 1.209377f, -4.082684f, 14.381269f, + -10.038282f, 1.993960f, 24.281441f, -37.420734f, 72.554382f, -164.510483f, 115.127594f, -0.853720f, -16.850563f, 0.659630f, 12.865159f, -12.793469f, + 6.450607f, -4.383123f, -27.560604f, 25.546320f, -14.219501f, 115.127594f, -144.301163f, -12.984586f, 2.706392f, -4.143620f, -4.696592f, 1.570192f, + -0.731379f, 6.826682f, 3.724859f, 1.023259f, 2.006988f, -0.853720f, -12.984586f, -75.763382f, -31.576742f, -4.753652f, 9.548754f, -6.625205f, + -2.247438f, -0.827366f, 6.288230f, -7.474454f, 17.638592f, -16.850563f, 2.706394f, -31.576742f, -68.203148f, 11.220890f, 20.883671f, -23.079214f, + -4.157187f, -21.146011f, -12.520897f, 16.698721f, 1.209376f, 0.659629f, -4.143620f, -4.753652f, 11.220889f, -148.282272f, -2.460779f, 12.595567f, + 6.583566f, 3.620328f, 2.671665f, 8.763003f, -4.082685f, 12.865157f, -4.696593f, 9.548755f, 20.883675f, -2.460779f, -59.110310f, -3.725027f, + 4.081524f, 11.092305f, 12.669825f, 1.241007f, 14.381269f, -12.793469f, 1.570194f, -6.625203f, -23.079216f, 12.595569f, -3.725027f, -62.429104f +}; + +const float lvm_speech[N_MIXTURES] = +{ + 31.996607f, 32.762783f, 32.964325f, 31.979258f, 30.885334f, 26.185850f +}; + +const float m_music[N_MIXTURES*N_FEATURES] = +{ + 0.451772f, 0.776554f, 0.271046f, 0.354725f, 0.395602f, 0.413925f, 0.451482f, 0.627645f, 0.031510f, 0.835348f, 0.725457f, 0.357440f, + 0.487510f, 0.629043f, 0.236111f, 0.388441f, 0.440188f, 0.465005f, 0.494082f, 0.465069f, 0.069486f, 0.918461f, 0.858141f, 0.351628f, + 0.538064f, 0.605061f, 0.283209f, 0.430647f, 0.474700f, 0.497116f, 0.519075f, 0.527071f, 0.034547f, 0.951717f, 0.846345f, 0.380536f, + 0.484100f, 0.744331f, 0.238170f, 0.341071f, 0.358081f, 0.365782f, 0.392370f, 0.702362f, 0.021764f, 0.879612f, 0.725783f, 0.420504f, + 0.305845f, 0.692470f, 0.378321f, 0.465361f, 0.486968f, 0.499951f, 0.520584f, 0.473288f, 0.125325f, 0.726521f, 0.692794f, 0.374433f, + 0.513981f, 0.696380f, 0.246046f, 0.343276f, 0.374858f, 0.396051f, 0.418772f, 0.646286f, 0.026468f, 0.930184f, 0.778228f, 0.369588f +}; + +const float invV_music[N_MIXTURES*N_FEATURES*N_FEATURES] = +{ + -7.693553f, -0.657163f, -1.988950f, -0.864460f, -0.230076f, -0.650926f, 0.731884f, -1.685300f, -19.945335f, -0.839110f, 2.405366f, 3.916922f, + -0.657164f, -30.621262f, -1.553432f, -2.976453f, -1.828387f, 1.246830f, -3.716787f, 8.629019f, 5.424546f, -1.983033f, -10.816823f, -7.156825f, + -1.988950f, -1.553432f, -64.019180f, 41.928944f, -11.140388f, 11.880524f, 0.733497f, 8.586295f, 23.512827f, -15.433292f, -2.485986f, -2.458197f, + -0.864460f, -2.976454f, 41.928940f, -86.408936f, 41.949852f, -12.773962f, 4.663799f, 14.073083f, 23.178215f, -5.600554f, 14.946990f, 14.853354f, + -0.230076f, -1.828387f, -11.140390f, 41.949852f, -88.611122f, 37.060493f, -1.752939f, 3.927101f, -34.439037f, 12.153290f, 13.335299f, 16.994671f, + -0.650926f, 1.246830f, 11.880524f, -12.773962f, 37.060493f, -84.266197f, 37.053310f, 3.348819f, -5.522115f, 5.531706f, 8.455176f, -0.010933f, + 0.731884f, -3.716787f, 0.733498f, 4.663802f, -1.752939f, 37.053310f, -76.037888f, -8.315558f, -72.524521f, 21.789789f, 3.751793f, 0.630349f, + -1.685300f, 8.629018f, 8.586294f, 14.073083f, 3.927101f, 3.348819f, -8.315558f, -57.921276f, -118.393280f, 1.583935f, -8.300871f, 4.850578f, + -19.945335f, 5.424546f, 23.512829f, 23.178215f, -34.439041f, -5.522115f, -72.524521f, -118.393280f, -5404.569336f, 171.743378f, 241.973938f, -289.196930f, + -0.839109f, -1.983034f, -15.433292f, -5.600554f, 12.153290f, 5.531708f, 21.789789f, 1.583935f, 171.743362f, -101.897446f, -1.140457f, 31.464947f, + 2.405366f, -10.816823f, -2.485986f, 14.946990f, 13.335299f, 8.455174f, 3.751793f, -8.300871f, 241.973923f, -1.140458f, -77.658661f, -44.502563f, + 3.916922f, -7.156825f, -2.458197f, 14.853354f, 16.994675f, -0.010933f, 0.630349f, 4.850579f, -289.196899f, 31.464947f, -44.502563f, -243.168915f, + -9.878029f, 0.598697f, -4.302856f, -0.393763f, 0.713794f, 0.876955f, 0.341871f, -1.948222f, -8.764623f, -0.165505f, -1.265450f, 1.204445f, + 0.598697f, -29.943895f, -12.133356f, -1.089194f, -1.817891f, 2.837961f, -2.426654f, 12.585359f, -8.634910f, -11.784335f, 4.719538f, 2.997951f, + -4.302856f, -12.133356f, -84.521080f, 48.461727f, -11.249048f, 15.025650f, -19.584152f, 20.383547f, -13.363368f, 27.676975f, 22.609833f, -0.788566f, + -0.393763f, -1.089193f, 48.461727f, -128.134705f, 79.103844f, 1.020304f, 3.012457f, 7.957530f, -11.608212f, -3.021832f, 42.826736f, 14.192619f, + 0.713794f, -1.817891f, -11.249048f, 79.103836f, -220.859680f, 112.957855f, 8.839993f, -6.276199f, -19.145348f, -19.927418f, 7.305478f, 5.922347f, + 0.876955f, 2.837961f, 15.025646f, 1.020303f, 112.957878f, -275.141998f, 147.030670f, -5.400043f, 0.264864f, -5.583443f, 1.633528f, 7.493776f, + 0.341871f, -2.426655f, -19.584156f, 3.012456f, 8.839993f, 147.030670f, -196.030136f, -21.359327f, -9.146851f, 10.225628f, -2.139116f, 3.010611f, + -1.948222f, 12.585359f, 20.383547f, 7.957529f, -6.276197f, -5.400044f, -21.359325f, -108.690598f, -28.919056f, -26.963711f, -53.457581f, -9.210483f, + -8.764623f, -8.634909f, -13.363366f, -11.608211f, -19.145348f, 0.264862f, -9.146851f, -28.919056f, -602.275146f, 73.117203f, 185.012711f, -77.751747f, + -0.165505f, -11.784335f, 27.676975f, -3.021834f, -19.927414f, -5.583444f, 10.225626f, -26.963711f, 73.117210f, -350.919952f, -12.616115f, 28.914690f, + -1.265450f, 4.719537f, 22.609833f, 42.826729f, 7.305476f, 1.633531f, -2.139116f, -53.457581f, 185.012711f, -12.616107f, -398.114899f, -16.563597f, + 1.204445f, 2.997951f, -0.788567f, 14.192617f, 5.922347f, 7.493775f, 3.010611f, -9.210481f, -77.751747f, 28.914690f, -16.563597f, -176.464386f, + -12.120523f, 5.409175f, -1.857854f, 0.089656f, 2.747151f, 0.330849f, -0.110976f, -1.052840f, -23.532089f, -2.869304f, -1.769891f, 0.390127f, + 5.409175f, -35.374779f, -7.060057f, -0.748528f, -2.384489f, 2.017226f, -2.828100f, 8.307317f, 16.044216f, -11.155272f, -11.784020f, -0.186719f, + -1.857854f, -7.060059f, -112.721130f, 43.297070f, 11.361997f, 13.618838f, -3.489388f, 22.195547f, -71.385941f, 116.419769f, 68.520813f, 4.576182f, + 0.089655f, -0.748527f, 43.297066f, -183.503693f, 79.711113f, 24.255428f, 12.465648f, 1.436299f, -42.306995f, -23.502007f, 43.622116f, 3.459679f, + 2.747151f, -2.384489f, 11.361995f, 79.711113f, -288.300781f, 101.748329f, 51.744507f, -3.170304f, -142.892792f, -76.845322f, 33.559555f, -2.748073f, + 0.330848f, 2.017227f, 13.618836f, 24.255434f, 101.748344f, -339.510773f, 165.319336f, -4.353420f, -124.114395f, -92.283844f, 41.981186f, 5.566007f, + -0.110976f, -2.828100f, -3.489391f, 12.465652f, 51.744499f, 165.319336f, -302.816223f, -18.169355f, -26.544678f, -18.664721f, -2.650121f, 0.010451f, + -1.052840f, 8.307317f, 22.195547f, 1.436298f, -3.170304f, -4.353420f, -18.169355f, -67.658730f, 39.626808f, -46.781792f, -132.578033f, -6.489147f, + -23.532089f, 16.044214f, -71.385941f, -42.306988f, -142.892792f, -124.114395f, -26.544678f, 39.626808f, -8048.467285f, -69.854523f, 1809.758301f, -171.409134f, + -2.869304f, -11.155272f, 116.419769f, -23.502005f, -76.845306f, -92.283836f, -18.664721f, -46.781792f, -69.854530f, -1329.704834f, -35.750607f, 26.050083f, + -1.769890f, -11.784019f, 68.520813f, 43.622116f, 33.559555f, 41.981186f, -2.650122f, -132.578033f, 1809.758423f, -35.750607f, -1306.246704f, -81.942009f, + 0.390127f, -0.186719f, 4.576182f, 3.459679f, -2.748072f, 5.566006f, 0.010449f, -6.489147f, -171.409149f, 26.050083f, -81.942001f, -218.411270f, + -8.602416f, 3.247867f, -1.244849f, -1.473311f, 1.389639f, 1.193549f, -0.749351f, -3.831526f, -63.977875f, -5.851153f, 9.731353f, 3.762766f, + 3.247867f, -31.158295f, -1.860033f, 4.017265f, -4.594161f, 1.111136f, -0.570251f, 10.457798f, 101.742371f, 5.974397f, -29.646946f, -5.117320f, + -1.244849f, -1.860033f, -180.090790f, 66.379784f, -17.006353f, 31.490606f, -6.954518f, 15.675142f, -2.924051f, -51.747025f, 22.995018f, 27.119001f, + -1.473310f, 4.017266f, 66.379791f, -156.629517f, 84.327309f, -8.737753f, 13.449555f, 8.031604f, 3.398430f, 2.564645f, 23.766497f, 1.825905f, + 1.389639f, -4.594161f, -17.006353f, 84.327293f, -194.113434f, 66.407173f, 7.188343f, 13.696414f, 10.890992f, 22.594927f, 12.302410f, 9.738532f, + 1.193549f, 1.111136f, 31.490606f, -8.737754f, 66.407173f, -162.236801f, 56.553402f, 17.216257f, 115.981384f, 38.547184f, 1.763872f, 7.097052f, + -0.749351f, -0.570251f, -6.954517f, 13.449550f, 7.188342f, 56.553402f, -120.315659f, 2.011221f, 46.796513f, 58.099625f, 10.238644f, -4.947532f, + -3.831526f, 10.457799f, 15.675138f, 8.031604f, 13.696414f, 17.216261f, 2.011219f, -88.214516f, -358.424683f, -29.549349f, -19.958910f, -2.982261f, + -63.977875f, 101.742371f, -2.924051f, 3.398430f, 10.890991f, 115.981384f, 46.796513f, -358.424683f, -16459.796875f, -177.281921f, 882.743164f, -92.799385f, + -5.851152f, 5.974398f, -51.747017f, 2.564646f, 22.594927f, 38.547184f, 58.099625f, -29.549349f, -177.281921f, -313.395386f, -11.227232f, 55.211266f, + 9.731353f, -29.646946f, 22.995022f, 23.766500f, 12.302408f, 1.763873f, 10.238644f, -19.958918f, 882.743225f, -11.227232f, -192.809204f, -15.728045f, + 3.762767f, -5.117321f, 27.118999f, 1.825905f, 9.738532f, 7.097054f, -4.947530f, -2.982259f, -92.799385f, 55.211269f, -15.728045f, -105.412018f, + -14.256830f, -2.369603f, -4.383267f, 2.198855f, 0.019220f, -0.679427f, -2.574428f, 5.400897f, 1.071412f, 0.106907f, 1.327079f, 2.677950f, + -2.369603f, -22.438606f, 1.295039f, -4.309244f, -6.401002f, 0.194309f, -2.196638f, 15.858343f, 6.752327f, -6.119870f, 1.303229f, -0.311533f, + -4.383267f, 1.295039f, -37.935478f, 39.653362f, -15.988548f, -0.134974f, 6.192506f, 2.302801f, -5.721854f, 1.463135f, -1.312438f, -3.824724f, + 2.198855f, -4.309245f, 39.653366f, -92.374901f, 67.554337f, -3.709706f, -16.418154f, -5.289310f, -10.926604f, -3.034606f, 2.011261f, -3.425366f, + 0.019220f, -6.401002f, -15.988548f, 67.554329f, -118.435379f, 53.987152f, 0.083914f, 3.628703f, 11.506127f, -9.430386f, 3.335730f, 0.535830f, + -0.679426f, 0.194309f, -0.134974f, -3.709705f, 53.987152f, -103.065208f, 60.766655f, 5.174506f, 3.534084f, 1.888132f, -2.451842f, 0.595043f, + -2.574428f, -2.196638f, 6.192506f, -16.418154f, 0.083914f, 60.766647f, -77.825020f, -7.066206f, -9.501147f, -2.838846f, 2.729818f, 0.055436f, + 5.400897f, 15.858343f, 2.302801f, -5.289312f, 3.628702f, 5.174504f, -7.066205f, -51.364357f, -39.811016f, -5.072917f, 2.924570f, 10.896112f, + 1.071412f, 6.752328f, -5.721853f, -10.926604f, 11.506124f, 3.534082f, -9.501149f, -39.811012f, -93.637161f, 18.029125f, 2.729363f, -18.075464f, + 0.106908f, -6.119870f, 1.463135f, -3.034606f, -9.430385f, 1.888131f, -2.838846f, -5.072917f, 18.029125f, -28.455194f, 2.956357f, 16.863293f, + 1.327079f, 1.303229f, -1.312438f, 2.011261f, 3.335730f, -2.451841f, 2.729818f, 2.924570f, 2.729363f, 2.956357f, -10.622586f, -6.668186f, + 2.677950f, -0.311532f, -3.824724f, -3.425365f, 0.535831f, 0.595042f, 0.055436f, 10.896112f, -18.075462f, 16.863293f, -6.668186f, -47.191391f, + -9.240052f, 2.899430f, -1.061725f, -1.878852f, 1.384787f, -0.341924f, 0.387138f, -3.050452f, -34.497913f, 0.665648f, 3.172123f, 5.710633f, + 2.899430f, -28.464540f, -2.599636f, 2.343385f, -2.987666f, 2.706673f, 0.826991f, 8.178236f, 58.632381f, -6.619084f, -22.678297f, -7.513733f, + -1.061725f, -2.599636f, -168.556702f, 81.834229f, 2.535699f, 32.237877f, 3.761089f, 12.106804f, 80.076279f, -79.117699f, 15.459833f, 34.635460f, + -1.878852f, 2.343384f, 81.834229f, -199.355972f, 64.456390f, 2.859692f, 17.605833f, 14.360981f, 8.356211f, 15.654006f, 43.245403f, 35.328991f, + 1.384787f, -2.987666f, 2.535698f, 64.456375f, -197.841049f, 46.107910f, 19.035957f, 10.296391f, -4.554988f, 45.390419f, 10.640046f, 17.738880f, + -0.341924f, 2.706673f, 32.237885f, 2.859688f, 46.107910f, -193.370590f, 74.545746f, 13.889868f, 120.411064f, 69.282364f, 1.826012f, 8.071488f, + 0.387138f, 0.826990f, 3.761087f, 17.605829f, 19.035957f, 74.545746f, -173.431549f, -5.219500f, 77.031425f, 112.113403f, -0.166995f, 3.456159f, + -3.050452f, 8.178238f, 12.106802f, 14.360980f, 10.296390f, 13.889872f, -5.219500f, -66.011856f, -245.560532f, -53.745152f, -21.376526f, 7.093097f, + -34.497917f, 58.632385f, 80.076279f, 8.356211f, -4.554988f, 120.411072f, 77.031425f, -245.560532f, -12485.017578f, -211.927429f, 791.254944f, -708.115784f, + 0.665648f, -6.619084f, -79.117699f, 15.654002f, 45.390419f, 69.282356f, 112.113403f, -53.745152f, -211.927429f, -775.154602f, -7.915978f, 73.130432f, + 3.172123f, -22.678297f, 15.459837f, 43.245403f, 10.640046f, 1.826011f, -0.166995f, -21.376526f, 791.254944f, -7.915982f, -312.138367f, -76.008308f, + 5.710633f, -7.513731f, 34.635460f, 35.328983f, 17.738880f, 8.071489f, 3.456159f, 7.093094f, -708.115784f, 73.130432f, -76.008293f, -469.943726f +}; + +const float lvm_music[N_MIXTURES] = +{ + 27.932661f, 30.347250f, 34.528702f, 31.239647f, 20.447638f, 33.589111f +}; + +const float m_noise[N_MIXTURES*N_FEATURES] = +{ + 0.452427f, 0.570086f, 0.242006f, 0.342721f, 0.403700f, 0.415107f, 0.444218f, 0.438761f, 0.034564f, 0.893050f, 0.819168f, 0.404974f, + 0.436768f, 0.457530f, 0.286204f, 0.393398f, 0.429530f, 0.444983f, 0.474495f, 0.377982f, 0.032033f, 0.980933f, 0.864315f, 0.377762f, + 0.554771f, 0.507113f, 0.244596f, 0.401393f, 0.425160f, 0.441338f, 0.467793f, 0.361573f, 0.031537f, 0.971703f, 0.866892f, 0.372985f, + 0.482864f, 0.545745f, 0.098616f, 0.246756f, 0.304649f, 0.303124f, 0.352083f, 0.363268f, 0.031057f, 0.901759f, 0.838419f, 0.339094f, + 0.421798f, 0.491610f, 0.266544f, 0.367277f, 0.407442f, 0.415130f, 0.458496f, 0.395402f, 0.035484f, 0.951506f, 0.861898f, 0.362091f, + 0.422524f, 0.475384f, 0.321804f, 0.436169f, 0.468526f, 0.481682f, 0.505572f, 0.389095f, 0.048487f, 0.967269f, 0.878799f, 0.409561f +}; + +const float invV_noise[N_MIXTURES*N_FEATURES*N_FEATURES] = +{ + -10.867715f, -0.756548f, -0.787901f, 4.638586f, -4.208551f, -1.593690f, 1.654504f, 0.517274f, -24.544769f, -2.342500f, 1.593914f, 1.892730f, + -0.756548f, -42.676064f, -5.171525f, -22.601748f, -3.989791f, -1.960918f, 9.223408f, 12.652583f, 16.718012f, 10.374084f, -17.742804f, -14.035854f, + -0.787901f, -5.171525f, -115.159836f, 77.010605f, -22.974529f, 22.149885f, -7.457938f, 51.154774f, 20.176580f, -1.104116f, 17.582054f, -18.231829f, + 4.638585f, -22.601746f, 77.010605f, -162.083023f, 69.046974f, -0.931657f, 9.922201f, 6.555853f, 49.297676f, 18.854517f, -9.951534f, 16.527628f, + -4.208551f, -3.989791f, -22.974525f, 69.046974f, -181.796692f, 112.212860f, -28.314665f, 9.765093f, 17.263042f, -17.941118f, -20.316977f, -12.281874f, + -1.593690f, -1.960918f, 22.149881f, -0.931659f, 112.212860f, -230.312469f, 120.808189f, -3.664834f, 21.109715f, 8.984108f, 15.273976f, -10.366921f, + 1.654504f, 9.223406f, -7.457942f, 9.922205f, -28.314672f, 120.808205f, -152.423096f, -1.527340f, -7.447964f, 5.038412f, 13.851591f, -12.278207f, + 0.517274f, 12.652583f, 51.154770f, 6.555853f, 9.765094f, -3.664836f, -1.527341f, -113.809120f, -127.203827f, -2.824038f, -50.058937f, -1.399267f, + -24.544767f, 16.718014f, 20.176580f, 49.297676f, 17.263042f, 21.109715f, -7.447963f, -127.203827f, -6696.807617f, -22.621326f, 415.747192f, -168.268478f, + -2.342500f, 10.374086f, -1.104114f, 18.854517f, -17.941120f, 8.984108f, 5.038413f, -2.824039f, -22.621326f, -153.911545f, 9.088697f, 20.155067f, + 1.593914f, -17.742804f, 17.582056f, -9.951534f, -20.316977f, 15.273976f, 13.851592f, -50.058945f, 415.747162f, 9.088697f, -180.485260f, -2.179248f, + 1.892730f, -14.035856f, -18.231823f, 16.527628f, -12.281875f, -10.366921f, -12.278206f, -1.399268f, -168.268478f, 20.155067f, -2.179248f, -92.283646f, + -23.031761f, -1.252800f, 2.168407f, 5.677273f, -1.038399f, -5.394459f, 4.921468f, -0.398360f, -7.562253f, 64.160614f, -4.832063f, 1.192536f, + -1.252800f, -99.841995f, 18.003206f, -17.730101f, -6.070672f, 16.703362f, -1.826001f, 24.508341f, 95.143112f, 31.486519f, -75.776428f, -4.459583f, + 2.168407f, 18.003206f, -298.278900f, 136.582794f, 23.557480f, 32.080963f, -44.544701f, 44.470726f, 121.132362f, 294.113434f, -22.118645f, 3.540136f, + 5.677273f, -17.730099f, 136.582779f, -552.121826f, 236.890076f, 45.754177f, 49.528828f, -18.333956f, -155.456558f, 137.723495f, 87.803368f, 9.539282f, + -1.038398f, -6.070671f, 23.557480f, 236.890076f, -779.760498f, 250.522018f, 101.655136f, 9.155396f, -82.543655f, -398.953156f, 95.902740f, 4.389515f, + -5.394459f, 16.703358f, 32.080971f, 45.754185f, 250.522049f, -825.768005f, 305.349487f, -6.825818f, 49.064461f, -530.656738f, -41.630035f, 0.097057f, + 4.921468f, -1.825999f, -44.544685f, 49.528828f, 101.655106f, 305.349457f, -714.934082f, 14.071314f, 81.227341f, -137.562592f, -2.118532f, -2.266444f, + -0.398360f, 24.508341f, 44.470741f, -18.333960f, 9.155393f, -6.825818f, 14.071318f, -306.676453f, 267.131439f, -29.354313f, -247.414047f, -3.381219f, + -7.562254f, 95.143112f, 121.132362f, -155.456558f, -82.543648f, 49.064457f, 81.227341f, 267.131439f, -18849.244141f, -929.838013f, 3582.389648f, -91.670364f, + 64.160622f, 31.486523f, 294.113434f, 137.723495f, -398.953186f, -530.656738f, -137.562607f, -29.354321f, -929.838013f, -15657.494141f, -160.551666f, -23.622292f, + -4.832063f, -75.776428f, -22.118641f, 87.803375f, 95.902733f, -41.630043f, -2.118535f, -247.414047f, 3582.389648f, -160.551666f, -2443.248535f, -102.662750f, + 1.192536f, -4.459581f, 3.540133f, 9.539283f, 4.389517f, 0.097059f, -2.266439f, -3.381226f, -91.670372f, -23.622292f, -102.662750f, -246.260574f, + -11.285410f, 5.316821f, 1.028375f, 1.780153f, -1.713055f, -6.356722f, 3.452291f, -0.472106f, 5.616539f, 22.361168f, -4.266212f, 2.444066f, + 5.316821f, -59.978729f, -45.510380f, 0.510493f, -4.121831f, 5.250934f, -14.358817f, 2.281706f, 4.310630f, 4.492869f, 17.377964f, 5.232576f, + 1.028376f, -45.510380f, -192.404053f, 60.491817f, 29.311884f, 10.877782f, -13.830601f, 4.475446f, 14.358991f, 170.638504f, 103.112320f, 3.708024f, + 1.780153f, 0.510493f, 60.491817f, -566.125488f, 303.482666f, -24.292496f, -8.399674f, -1.485864f, -37.162815f, -301.527344f, 10.013409f, 11.255829f, + -1.713055f, -4.121831f, 29.311880f, 303.482666f, -852.739014f, 287.208618f, 7.622868f, 2.283498f, -27.422876f, -496.049957f, -5.396815f, -1.631967f, + -6.356722f, 5.250934f, 10.877782f, -24.292484f, 287.208618f, -723.304810f, 301.939606f, -18.888754f, -49.648453f, -140.429428f, 26.881662f, 4.222802f, + 3.452292f, -14.358817f, -13.830603f, -8.399690f, 7.622864f, 301.939575f, -496.315796f, 24.400175f, 203.557098f, -224.619278f, -47.202961f, -9.425015f, + -0.472106f, 2.281706f, 4.475447f, -1.485866f, 2.283498f, -18.888754f, 24.400175f, -354.005493f, 136.772644f, -115.911537f, -131.393005f, 0.959444f, + 5.616539f, 4.310630f, 14.358991f, -37.162819f, -27.422880f, -49.648449f, 203.557098f, 136.772644f, -20332.845703f, -321.084869f, 3009.444580f, -97.580765f, + 22.361168f, 4.492869f, 170.638519f, -301.527344f, -496.049957f, -140.429428f, -224.619293f, -115.911537f, -321.084839f, -7067.310059f, -220.679733f, -46.764927f, + -4.266212f, 17.377964f, 103.112320f, 10.013409f, -5.396815f, 26.881662f, -47.202957f, -131.393005f, 3009.444336f, -220.679733f, -2442.017334f, -122.001373f, + 2.444066f, 5.232576f, 3.708023f, 11.255831f, -1.631966f, 4.222802f, -9.425015f, 0.959446f, -97.580765f, -46.764931f, -122.001373f, -270.966095f, + -14.192688f, 3.186916f, -7.950537f, 12.989626f, 5.455102f, 1.765226f, -5.165048f, 0.461338f, 7.198293f, -20.877787f, -2.402384f, 0.581967f, + 3.186916f, -44.923344f, -55.269123f, 8.982286f, -0.746719f, 13.665676f, 5.123918f, 2.567272f, -14.412151f, -21.068356f, 5.512080f, 3.727387f, + -7.950538f, -55.269123f, -874.676270f, 396.753632f, -241.704224f, 70.721024f, -240.685715f, 31.769787f, -186.425156f, -72.526421f, 58.346741f, 10.030197f, + 12.989626f, 8.982285f, 396.753632f, -538.253601f, 134.091171f, 33.957142f, -5.240913f, 40.302223f, 65.792999f, 256.190460f, 41.462269f, 59.464478f, + 5.455101f, -0.746719f, -241.704254f, 134.091171f, -942.252197f, 384.468231f, 36.093376f, 5.026894f, 111.673508f, 64.876976f, -19.179228f, 18.067732f, + 1.765226f, 13.665678f, 70.721085f, 33.957142f, 384.468231f, -885.075134f, 358.333008f, 13.728846f, 74.583847f, 277.755707f, 15.872023f, 32.199970f, + -5.165048f, 5.123920f, -240.685776f, -5.240921f, 36.093372f, 358.333008f, -694.631653f, 22.914997f, 82.867088f, 154.286697f, 2.264358f, 21.074474f, + 0.461338f, 2.567272f, 31.769791f, 40.302223f, 5.026892f, 13.728846f, 22.915001f, -341.417511f, -72.276520f, -87.553932f, -17.271832f, 7.437448f, + 7.198294f, -14.412151f, -186.425171f, 65.792999f, 111.673508f, 74.583847f, 82.867088f, -72.276520f, -16628.691406f, -258.116119f, 387.521759f, -260.230133f, + -20.877787f, -21.068354f, -72.526451f, 256.190460f, 64.876984f, 277.755707f, 154.286697f, -87.553932f, -258.116089f, -851.111816f, 3.469927f, 2.253677f, + -2.402384f, 5.512080f, 58.346741f, 41.462273f, -19.179226f, 15.872023f, 2.264359f, -17.271832f, 387.521759f, 3.469929f, -327.105011f, -45.187340f, + 0.581967f, 3.727389f, 10.030209f, 59.464478f, 18.067736f, 32.199970f, 21.074471f, 7.437444f, -260.230133f, 2.253681f, -45.187363f, -348.881165f, + -20.546539f, -1.232953f, -6.539483f, 7.977976f, -1.242327f, -4.323449f, 4.044850f, -8.261212f, -61.714569f, -16.814053f, 0.693824f, 2.217177f, + -1.232953f, -81.245918f, -33.514919f, -26.628014f, 2.160939f, -0.234839f, -0.764257f, 21.764839f, 133.689529f, 9.364232f, -27.287352f, -6.621866f, + -6.539483f, -33.514919f, -321.563904f, 105.228661f, 0.660729f, -32.550903f, -45.134315f, 42.045963f, -200.154724f, -42.022831f, 200.115005f, 19.959410f, + 7.977976f, -26.628016f, 105.228653f, -362.669098f, 100.723396f, 10.423860f, 45.250904f, -3.221930f, -63.687748f, -41.052856f, -5.156573f, 12.700191f, + -1.242327f, 2.160941f, 0.660730f, 100.723396f, -410.276917f, 189.899841f, 1.538413f, 21.637842f, -26.361103f, 35.868237f, 46.390850f, 13.527671f, + -4.323449f, -0.234840f, -32.550911f, 10.423860f, 189.899841f, -359.953278f, 149.268143f, 13.839684f, 104.534042f, 43.236813f, -23.356220f, -8.712662f, + 4.044850f, -0.764257f, -45.134308f, 45.250904f, 1.538413f, 149.268143f, -274.089874f, -8.017480f, 39.217266f, 23.817112f, 13.071558f, 8.212641f, + -8.261212f, 21.764839f, 42.045967f, -3.221937f, 21.637842f, 13.839684f, -8.017480f, -250.062653f, 77.902710f, -1.225836f, -98.802437f, 0.740895f, + -61.714565f, 133.689514f, -200.154709f, -63.687748f, -26.361105f, 104.534027f, 39.217266f, 77.902695f, -12793.175781f, 257.379974f, 1953.936523f, -236.987503f, + -16.814053f, 9.364232f, -42.022831f, -41.052856f, 35.868237f, 43.236813f, 23.817108f, -1.225832f, 257.379974f, -1194.391846f, -211.503952f, -22.654963f, + 0.693823f, -27.287352f, 200.115005f, -5.156573f, 46.390850f, -23.356216f, 13.071561f, -98.802437f, 1953.936523f, -211.503983f, -1273.349854f, -88.061317f, + 2.217178f, -6.621865f, 19.959414f, 12.700191f, 13.527678f, -8.712662f, 8.212641f, 0.740895f, -236.987518f, -22.654963f, -88.061317f, -364.010010f, + -23.764925f, -0.313664f, -1.392676f, 1.488295f, 1.913436f, -4.066601f, 6.848008f, -3.074351f, -7.675101f, 9.171298f, 3.117799f, 2.142688f, + -0.313664f, -88.759735f, -8.855761f, -26.637909f, 5.178853f, 10.666278f, 2.244489f, 21.984133f, 16.797499f, 4.685480f, 13.074540f, -2.708393f, + -1.392676f, -8.855759f, -175.915054f, 83.474174f, 41.251793f, 14.369057f, -12.605553f, 33.395245f, 65.670242f, 39.710125f, 36.098553f, -9.562349f, + 1.488295f, -26.637909f, 83.474182f, -383.095245f, 216.683212f, 12.198986f, 32.383698f, -14.022625f, 7.763216f, -100.727264f, -28.525242f, -5.235438f, + 1.913436f, 5.178854f, 41.251801f, 216.683212f, -586.877808f, 253.507355f, 29.591257f, 7.710151f, -31.813087f, -112.656593f, 20.279724f, -7.102311f, + -4.066601f, 10.666278f, 14.369057f, 12.198978f, 253.507355f, -597.128113f, 296.967621f, 6.174671f, -41.961372f, -36.203259f, -20.597570f, -14.877533f, + 6.848009f, 2.244488f, -12.605548f, 32.383701f, 29.591269f, 296.967590f, -456.794678f, 26.321606f, -34.872383f, 28.424320f, 34.979023f, -8.548788f, + -3.074351f, 21.984133f, 33.395245f, -14.022625f, 7.710150f, 6.174670f, 26.321606f, -265.545593f, 2.918175f, 0.831582f, -125.449432f, -11.139709f, + -7.675101f, 16.797503f, 65.670242f, 7.763219f, -31.813070f, -41.961380f, -34.872383f, 2.918175f, -1731.894409f, -210.794144f, 739.213074f, -97.542229f, + 9.171299f, 4.685479f, 39.710129f, -100.727264f, -112.656593f, -36.203262f, 28.424320f, 0.831581f, -210.794113f, -2326.243652f, -106.282173f, 1.036536f, + 3.117799f, 13.074540f, 36.098553f, -28.525242f, 20.279724f, -20.597570f, 34.979023f, -125.449432f, 739.213074f, -106.282112f, -1878.532593f, -113.480858f, + 2.142687f, -2.708396f, -9.562349f, -5.235439f, -7.102309f, -14.877532f, -8.548790f, -11.139709f, -97.542229f, 1.036536f, -113.480865f, -101.406532f +}; + +const float lvm_noise[N_MIXTURES] = +{ + 28.723963f, 41.180500f, 39.296734f, 38.508724f, 37.029205f, 35.496319f +}; + +/* Mel filterbank */ +const int16_t mel_fb_start[NB_MEL_BANDS] = +{ + 1, 1, 2, 3, 4, 5, 5, 7, 8, 9, 10, 11, 13, 14, 16, 17, 19, 21, 23, 25, 28, 30, 33, 35, 38, 41, 45, 48, 52, 56, 60, 65, 69, 74, 80, 86, 92, 98, 105, 112 +}; + +const int16_t mel_fb_len[NB_MEL_BANDS] = +{ + 1, 2, 2, 2, 1, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 7, 7, 7, 8, 8, 9, 9, 9, 11, 12, 12, 12, 13, 14, 15, 16 +}; + +const float mel_fb[246] = +{ + 1.21713338f, 0.78286662f, 0.65362656f, 1.34637344f, 0.27740994f, + 1.72259006f, 0.06297006f, 1.93702994f, 1.98967602f, 0.04060794f, + 0.01032398f, 1.95939206f, 0.20171708f, 1.79828292f, 0.46121084f, + 1.53878916f, 0.80909416f, 1.19090584f, 1.23682173f, 0.76317827f, + 1.73703053f, 0.30333129f, 0.26296947f, 1.69666871f, 0.93014405f, + 1.06985595f, 1.61256694f, 0.34627063f, 0.38743306f, 1.65372937f, + 1.12741246f, 0.87258754f, 1.95256612f, 0.81866363f, 0.04743388f, + 1.18133637f, 1.72294702f, 0.66292792f, 0.27705298f, 1.33707208f, + 1.63635355f, 0.64117786f, 0.36364645f, 1.35882214f, 1.67553701f, + 0.73772833f, 0.32446299f, 1.26227167f, 1.82619229f, 0.93949686f, + 0.076324f, 0.17380771f, 1.06050314f, 1.923676f, 1.23545786f, + 0.4157745f, 0.76454214f, 1.5842255f, 1.61623283f, 0.83586669f, + 0.07377779f, 0.38376717f, 1.16413331f, 1.92622221f, 1.32912953f, + 0.60114148f, 0.67087047f, 1.39885852f, 1.88908443f, 1.19227603f, + 0.51007685f, 0.11091557f, 0.80772397f, 1.48992315f, 1.84188687f, + 1.18714227f, 0.54531261f, 0.15811313f, 0.81285773f, 1.45468739f, + 1.91589823f, 1.29842793f, 0.69245681f, 0.09756439f, 0.08410177f, + 0.70157207f, 1.30754319f, 1.90243561f, 1.51335285f, 0.9394454f, + 0.37548486f, 0.48664715f, 1.0605546f, 1.62451514f, 1.82113229f, + 1.2760658f, 0.7399794f, 0.21258197f, 0.17886771f, 0.7239342f, + 1.2600206f, 1.78741803f, 1.69359635f, 1.18275841f, 0.67981626f, + 0.18452955f, 0.30640365f, 0.81724159f, 1.32018374f, 1.81547045f, + 1.69666871f, 1.21601434f, 0.74235665f, 0.27549486f, 0.30333129f, + 0.78398566f, 1.25764335f, 1.72450514f, 1.81523671f, 1.36139799f, + 0.91380209f, 0.4722796f, 0.03666789f, 0.18476329f, 0.63860201f, + 1.08619791f, 1.5277204f, 1.96333211f, 1.60681079f, 1.18255825f, + 0.763766f, 0.35029527f, 0.39318921f, 0.81744175f, 1.236234f, + 1.64970473f, 1.94201251f, 1.53878916f, 1.14050133f, 0.74702969f, + 0.35825913f, 0.05798749f, 0.46121084f, 0.85949867f, 1.25297031f, + 1.64174087f, 1.97407865f, 1.59438112f, 1.21906313f, 0.8480248f, + 0.48116964f, 0.11840435f, 0.02592135f, 0.40561888f, 0.78093687f, + 1.1519752f, 1.51883036f, 1.88159565f, 1.75963877f, 1.40478565f, + 1.05376058f, 0.70648184f, 0.36287032f, 0.02284937f, 0.24036123f, + 0.59521435f, 0.94623942f, 1.29351816f, 1.63712968f, 1.97715063f, + 1.68634473f, 1.35328441f, 1.02359863f, 0.69721967f, 0.37408188f, + 0.05412149f, 0.31365527f, 0.64671559f, 0.97640137f, 1.30278033f, + 1.62591812f, 1.94587851f, 1.73727665f, 1.42348724f, 1.11269492f, + 0.80484297f, 0.49987627f, 0.19774124f, 0.26272335f, 0.57651276f, + 0.88730508f, 1.19515703f, 1.50012373f, 1.80225876f, 1.89838578f, + 1.60175922f, 1.30781224f, 1.01649688f, 0.72776643f, 0.44157541f, + 0.15787955f, 0.10161422f, 0.39824078f, 0.69218776f, 0.98350312f, + 1.27223357f, 1.55842459f, 1.84212045f, 1.87663572f, 1.59780189f, + 1.32133711f, 1.04720147f, 0.77535604f, 0.50576287f, 0.23838496f, + 0.12336428f, 0.40219811f, 0.67866289f, 0.95279853f, 1.22464396f, + 1.49423713f, 1.76161504f, 1.97318619f, 1.71013133f, 1.449186f, + 1.19031663f, 0.93349044f, 0.67867544f, 0.42584038f, 0.17495472f, + 0.02681381f, 0.28986867f, 0.550814f, 0.80968337f, 1.06650956f, + 1.32132456f, 1.57415962f, 1.82504528f, 1.92598864f, 1.67891297f, + 1.43369924f, 1.19031958f, 0.94874676f, 0.70895416f, 0.47091573f, + 0.23460598f +}; + +const float dct_mtx[NB_MEL_BANDS * NB_MEL_COEF] = +{ + 2.23434405e-01f, 2.22056858e-01f, 2.19310256e-01f, 2.15211533e-01f, 2.09785960e-01f, 2.03066987e-01f, 1.95096038e-01f, 1.85922257e-01f, 1.75602204e-01f, 1.64199505e-01f, 1.51784461e-01f, 1.38433616e-01f, + 1.24229281e-01f, 1.09259031e-01f, 9.36151633e-02f, 7.73941268e-02f, 6.06959298e-02f, 4.36235222e-02f, 2.62821611e-02f, 8.77876168e-03f, -8.77876168e-03f, -2.62821611e-02f, -4.36235222e-02f, -6.06959298e-02f, + -7.73941268e-02f, -9.36151633e-02f, -1.09259031e-01f, -1.24229281e-01f, -1.38433616e-01f, -1.51784461e-01f, -1.64199505e-01f, -1.75602204e-01f, -1.85922257e-01f, -1.95096038e-01f, -2.03066987e-01f, -2.09785960e-01f, + -2.15211533e-01f, -2.19310256e-01f, -2.22056858e-01f, -2.23434405e-01f, + + 2.22917493e-01f, 2.17428524e-01f, 2.06585744e-01f, 1.90656137e-01f, 1.70031943e-01f, 1.45220998e-01f, 1.16834231e-01f, 8.55706169e-02f, 5.21999703e-02f, 1.75439872e-02f, -1.75439872e-02f, -5.21999703e-02f, + -8.55706169e-02f, -1.16834231e-01f, -1.45220998e-01f, -1.70031943e-01f, -1.90656137e-01f, -2.06585744e-01f, -2.17428524e-01f, -2.22917493e-01f, -2.22917493e-01f, -2.17428524e-01f, -2.06585744e-01f, -1.90656137e-01f, + -1.70031943e-01f, -1.45220998e-01f, -1.16834231e-01f, -8.55706169e-02f, -5.21999703e-02f, -1.75439872e-02f, 1.75439872e-02f, 5.21999703e-02f, 8.55706169e-02f, 1.16834231e-01f, 1.45220998e-01f, 1.70031943e-01f, + 1.90656137e-01f, 2.06585744e-01f, 2.17428524e-01f, 2.22917493e-01f, + + 2.22056858e-01f, 2.09785960e-01f, 1.85922257e-01f, 1.51784461e-01f, 1.09259031e-01f, 6.06959298e-02f, 8.77876168e-03f, -4.36235222e-02f, -9.36151633e-02f, -1.38433616e-01f, -1.75602204e-01f, -2.03066987e-01f, + -2.19310256e-01f, -2.23434405e-01f, -2.15211533e-01f, -1.95096038e-01f, -1.64199505e-01f, -1.24229281e-01f, -7.73941268e-02f, -2.62821611e-02f, 2.62821611e-02f, 7.73941268e-02f, 1.24229281e-01f, 1.64199505e-01f, + 1.95096038e-01f, 2.15211533e-01f, 2.23434405e-01f, 2.19310256e-01f, 2.03066987e-01f, 1.75602204e-01f, 1.38433616e-01f, 9.36151633e-02f, 4.36235222e-02f, -8.77876168e-03f, -6.06959298e-02f, -1.09259031e-01f, + -1.51784461e-01f, -1.85922257e-01f, -2.09785960e-01f, -2.22056858e-01f, + + 2.20853827e-01f, 1.99235116e-01f, 1.58113883e-01f, 1.01515362e-01f, 3.49798098e-02f, -3.49798098e-02f, -1.01515362e-01f, -1.58113883e-01f, -1.99235116e-01f, -2.20853827e-01f, -2.20853827e-01f, -1.99235116e-01f, + -1.58113883e-01f, -1.01515362e-01f, -3.49798098e-02f, 3.49798098e-02f, 1.01515362e-01f, 1.58113883e-01f, 1.99235116e-01f, 2.20853827e-01f, 2.20853827e-01f, 1.99235116e-01f, 1.58113883e-01f, 1.01515362e-01f, + 3.49798098e-02f, -3.49798098e-02f, -1.01515362e-01f, -1.58113883e-01f, -1.99235116e-01f, -2.20853827e-01f, -2.20853827e-01f, -1.99235116e-01f, -1.58113883e-01f, -1.01515362e-01f, -3.49798098e-02f, 3.49798098e-02f, + 1.01515362e-01f, 1.58113883e-01f, 1.99235116e-01f, 2.20853827e-01f, + + 2.19310256e-01f, 1.85922257e-01f, 1.24229281e-01f, 4.36235222e-02f, -4.36235222e-02f, -1.24229281e-01f, -1.85922257e-01f, -2.19310256e-01f, -2.19310256e-01f, -1.85922257e-01f, -1.24229281e-01f, -4.36235222e-02f, + 4.36235222e-02f, 1.24229281e-01f, 1.85922257e-01f, 2.19310256e-01f, 2.19310256e-01f, 1.85922257e-01f, 1.24229281e-01f, 4.36235222e-02f, -4.36235222e-02f, -1.24229281e-01f, -1.85922257e-01f, -2.19310256e-01f, + -2.19310256e-01f, -1.85922257e-01f, -1.24229281e-01f, -4.36235222e-02f, 4.36235222e-02f, 1.24229281e-01f, 1.85922257e-01f, 2.19310256e-01f, 2.19310256e-01f, 1.85922257e-01f, 1.24229281e-01f, 4.36235222e-02f, + -4.36235222e-02f, -1.24229281e-01f, -1.85922257e-01f, -2.19310256e-01f, + + 2.17428524e-01f, 1.70031943e-01f, 8.55706169e-02f, -1.75439872e-02f, -1.16834231e-01f, -1.90656137e-01f, -2.22917493e-01f, -2.06585744e-01f, -1.45220998e-01f, -5.21999703e-02f, 5.21999703e-02f, 1.45220998e-01f, + 2.06585744e-01f, 2.22917493e-01f, 1.90656137e-01f, 1.16834231e-01f, 1.75439872e-02f, -8.55706169e-02f, -1.70031943e-01f, -2.17428524e-01f, -2.17428524e-01f, -1.70031943e-01f, -8.55706169e-02f, 1.75439872e-02f, + 1.16834231e-01f, 1.90656137e-01f, 2.22917493e-01f, 2.06585744e-01f, 1.45220998e-01f, 5.21999703e-02f, -5.21999703e-02f, -1.45220998e-01f, -2.06585744e-01f, -2.22917493e-01f, -1.90656137e-01f, -1.16834231e-01f, + -1.75439872e-02f, 8.55706169e-02f, 1.70031943e-01f, 2.17428524e-01f, + + 2.15211533e-01f, 1.51784461e-01f, 4.36235222e-02f, -7.73941268e-02f, -1.75602204e-01f, -2.22056858e-01f, -2.03066987e-01f, -1.24229281e-01f, -8.77876168e-03f, 1.09259031e-01f, 1.95096038e-01f, 2.23434405e-01f, + 1.85922257e-01f, 9.36151633e-02f, -2.62821611e-02f, -1.38433616e-01f, -2.09785960e-01f, -2.19310256e-01f, -1.64199505e-01f, -6.06959298e-02f, 6.06959298e-02f, 1.64199505e-01f, 2.19310256e-01f, 2.09785960e-01f, + 1.38433616e-01f, 2.62821611e-02f, -9.36151633e-02f, -1.85922257e-01f, -2.23434405e-01f, -1.95096038e-01f, -1.09259031e-01f, 8.77876168e-03f, 1.24229281e-01f, 2.03066987e-01f, 2.22056858e-01f, 1.75602204e-01f, + 7.73941268e-02f, -4.36235222e-02f, -1.51784461e-01f, -2.15211533e-01f, + + 2.12662702e-01f, 1.31432778e-01f, 1.36919675e-17f, -1.31432778e-01f, -2.12662702e-01f, -2.12662702e-01f, -1.31432778e-01f, -4.10759024e-17f, 1.31432778e-01f, 2.12662702e-01f, 2.12662702e-01f, 1.31432778e-01f, + 6.84598373e-17f, -1.31432778e-01f, -2.12662702e-01f, -2.12662702e-01f, -1.31432778e-01f, -9.58437722e-17f, 1.31432778e-01f, 2.12662702e-01f, 2.12662702e-01f, 1.31432778e-01f, 1.23227707e-16f, -1.31432778e-01f, + -2.12662702e-01f, -2.12662702e-01f, -1.31432778e-01f, 2.46593822e-16f, 1.31432778e-01f, 2.12662702e-01f, 2.12662702e-01f, 1.31432778e-01f, 5.75201041e-16f, -1.31432778e-01f, -2.12662702e-01f, -2.12662702e-01f, + -1.31432778e-01f, -6.02584976e-16f, 1.31432778e-01f, 2.12662702e-01f, + + 2.09785960e-01f, 1.09259031e-01f, -4.36235222e-02f, -1.75602204e-01f, -2.23434405e-01f, -1.64199505e-01f, -2.62821611e-02f, 1.24229281e-01f, 2.15211533e-01f, 2.03066987e-01f, 9.36151633e-02f, -6.06959298e-02f, + -1.85922257e-01f, -2.22056858e-01f, -1.51784461e-01f, -8.77876168e-03f, 1.38433616e-01f, 2.19310256e-01f, 1.95096038e-01f, 7.73941268e-02f, -7.73941268e-02f, -1.95096038e-01f, -2.19310256e-01f, -1.38433616e-01f, + 8.77876168e-03f, 1.51784461e-01f, 2.22056858e-01f, 1.85922257e-01f, 6.06959298e-02f, -9.36151633e-02f, -2.03066987e-01f, -2.15211533e-01f, -1.24229281e-01f, 2.62821611e-02f, 1.64199505e-01f, 2.23434405e-01f, + 1.75602204e-01f, 4.36235222e-02f, -1.09259031e-01f, -2.09785960e-01f, + + 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, + -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, + 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, + -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, + + 2.03066987e-01f, 6.06959298e-02f, -1.24229281e-01f, -2.22056858e-01f, -1.64199505e-01f, 8.77876168e-03f, 1.75602204e-01f, 2.19310256e-01f, 1.09259031e-01f, -7.73941268e-02f, -2.09785960e-01f, -1.95096038e-01f, + -4.36235222e-02f, 1.38433616e-01f, 2.23434405e-01f, 1.51784461e-01f, -2.62821611e-02f, -1.85922257e-01f, -2.15211533e-01f, -9.36151633e-02f, 9.36151633e-02f, 2.15211533e-01f, 1.85922257e-01f, 2.62821611e-02f, + -1.51784461e-01f, -2.23434405e-01f, -1.38433616e-01f, 4.36235222e-02f, 1.95096038e-01f, 2.09785960e-01f, 7.73941268e-02f, -1.09259031e-01f, -2.19310256e-01f, -1.75602204e-01f, -8.77876168e-03f, 1.64199505e-01f, + 2.22056858e-01f, 1.24229281e-01f, -6.06959298e-02f, -2.03066987e-01f, + + 1.99235116e-01f, 3.49798098e-02f, -1.58113883e-01f, -2.20853827e-01f, -1.01515362e-01f, 1.01515362e-01f, 2.20853827e-01f, 1.58113883e-01f, -3.49798098e-02f, -1.99235116e-01f, -1.99235116e-01f, -3.49798098e-02f, + 1.58113883e-01f, 2.20853827e-01f, 1.01515362e-01f, -1.01515362e-01f, -2.20853827e-01f, -1.58113883e-01f, 3.49798098e-02f, 1.99235116e-01f, 1.99235116e-01f, 3.49798098e-02f, -1.58113883e-01f, -2.20853827e-01f, + -1.01515362e-01f, 1.01515362e-01f, 2.20853827e-01f, 1.58113883e-01f, -3.49798098e-02f, -1.99235116e-01f, -1.99235116e-01f, -3.49798098e-02f, 1.58113883e-01f, 2.20853827e-01f, 1.01515362e-01f, -1.01515362e-01f, + -2.20853827e-01f, -1.58113883e-01f, 3.49798098e-02f, 1.99235116e-01f, + + 1.95096038e-01f, 8.77876168e-03f, -1.85922257e-01f, -2.03066987e-01f, -2.62821611e-02f, 1.75602204e-01f, 2.09785960e-01f, 4.36235222e-02f, -1.64199505e-01f, -2.15211533e-01f, -6.06959298e-02f, 1.51784461e-01f, + 2.19310256e-01f, 7.73941268e-02f, -1.38433616e-01f, -2.22056858e-01f, -9.36151633e-02f, 1.24229281e-01f, 2.23434405e-01f, 1.09259031e-01f, -1.09259031e-01f, -2.23434405e-01f, -1.24229281e-01f, 9.36151633e-02f, + 2.22056858e-01f, 1.38433616e-01f, -7.73941268e-02f, -2.19310256e-01f, -1.51784461e-01f, 6.06959298e-02f, 2.15211533e-01f, 1.64199505e-01f, -4.36235222e-02f, -2.09785960e-01f, -1.75602204e-01f, 2.62821611e-02f, + 2.03066987e-01f, 1.85922257e-01f, -8.77876168e-03f, -1.95096038e-01f +}; + +const float SF[N_FEATURES*2] = +{ + 0.0048f, -0.0952f, + 1.0002f, 0, + 0.6226f, -0.0695f, + 0.5497f, -0.1265f, + 0.4963f, -0.2230f, + 0.5049f, -0.4103f, + 0.5069f, -0.5717f, + 0.0041f, 0, + 0.0022f, -0.0029f, + 0.0630f, 1.0015f, + 0.0684f, 0.9103f, + 0.1159f, -0.2931f +}; + +const float SF_8k[N_FEATURES*2] = +{ + 0.0041f, 0, + 0.8572f, 0.1020f, + 0.6739f, -0.1000f, + 0.6257f, -0.1678f, + 0.5495f, -0.2380f, + 0.5793f, -0.4646f, + 0.2502f, 0, + 0.0041f, 0, + 0.0020f, 0, + 0.0630f, 1.0015f, + 0.0598f, 0.8967f, + 0.0631f, 0 +}; + + +/* searching thresholds for quantization of peak gains */ +const float thren_pg[44] = +{ + 120193.5539509f, 101070.3286539f, + 84989.6770536f, 71467.5147680f, + 60096.7769755f, 50535.1643270f, + 42494.8385268f, 35733.7573840f, + 30048.3884877f, 25267.5821635f, + 19483.9693722f, 13777.2468675f, + 9741.9846861f, 6888.6234338f, + 4870.9923431f, 3444.3117169f, + 2435.4961715f, 1722.1558584f, + 1217.7480858f, 861.0779292f, + 608.8740429f, 430.5389646f, + 304.4370214f, 215.2694823f, + 152.2185107f, 107.6347412f, + 76.1092554f, 53.8173706f, + 38.0546277f, 26.9086853f, + 19.0273138f, 13.4543426f, + 9.5136569f, 6.7271713f, + 4.7568285f, 3.3635857f, + 2.3784142f, 1.6817928f, + 1.1892071f, 0.840896f, + 0.594604f, 0.420448f, + 0.297302f, 0.210224f +}; + +/* Huffmann coding - searching thresholds for quantization of peak gains */ +const int16_t huffnorm_e[32] = +{ + 1062, 550, 314, 274, 273, 272, 156, 79, 69, 38, + 18, 40, 5, 3, 0, 1, 3, 4, 11, 21, + 41, 32, 35, 67, 133, 264, 530, 315, 551, 2126, 4254, 4255 +}; + +const int16_t huffnorm_n[32] = +{ + 14831, 14830, 7414, 3706, 593, 927, 462, 297, 230, 116, + 50, 36, 13, 8, 5, 1, 0, 2, 6, 7, + 15, 19, 24, 56, 59, 51, 114, 117, 75, 149, 592, 1852 +}; + +const int16_t huffsizn_e[32] = +{ + 13, 12, 11, 11, 11, 11, 10, 9, 9, 8, + 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, + 6, 8, 8, 9, 10, 11, 12, 11, 12, 14, 15, 15 +}; + +const int16_t huffsizn_n[32] = +{ + 14, 14, 13, 12, 10, 10, 9, 9, 8, 7, + 7, 6, 5, 4, 3, 3, 3, 3, 3, 4, + 4, 5, 6, 6, 6, 7, 7, 7, 7, 8, 10, 11 +}; + +const int16_t resize_huffnorm[32] = +{ + 0, 0, 0, 0, 0, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, + 2, 5, 11, 23, 47, 95, 191, 383, 767, 2047, 0, 0, 0, 0, 0, 0 +}; + +const int16_t huffnorm[32] = +{ + 26, 58, 90, 122, 27, 59, 91, 123, 12, 28, 44, 60, 2, 6, 4, 6, + 0, 2, 10, 14, 14, 30, 46, 62, 30, 62, 94, 126, 31, 63, 95, 127 +}; + +const int16_t pgain_huffnorm[32] = +{ + 1, 1, 2, 3, 3, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 4, 5, 3, 2, 3, 3, 4, 5, 0, 1 +}; + +const int16_t hessize[8]= +{ + 7, 5, 3, 2, 1, 4, 6, 7 +}; + +const int16_t hescode[8]= +{ + 11, 3, 1, 1, 1, 0, 4, 10 +}; + +/*----------------------------------------------------------------------------------* + * BWD + *----------------------------------------------------------------------------------*/ + +const float hann_window_320[BWD_TOTAL_WIDTH/2] = +{ + 0.0f, 0.000096984948331f, 0.000387902169007f, 0.000872638803658f, + 0.001551006803657f, 0.002422743003060f, 0.003487509220708f, 0.004744892391413f, + 0.006194404726209f, 0.007835483901579f, 0.009667493277608f, 0.011689722144956f, + 0.013901386000576f, 0.016301626852047f, 0.018889513550430f, 0.021664042151495f, + 0.024624136305188f, 0.027768647673197f, 0.031096356374430f, 0.034605971458262f, + 0.038296131405342f, 0.042165404655783f, 0.046212290164521f, 0.050435217983627f, + 0.054832549871356f, 0.059402579927684f, 0.064143535256096f, 0.069053576651361f, + 0.074130799313035f, 0.079373233584409f, 0.084778845716614f, 0.090345538657597f, + 0.096071152865649f, 0.101953467147178f, 0.107990199518396f, 0.114179008090596f, + 0.120517491978659f, 0.127003192232455f, 0.133633592790768f, 0.140406121457376f, + 0.147318150898908f, 0.154366999664091f, 0.161549933223991f, 0.168864165032848f, + 0.176306857609086f, 0.183875123636085f, 0.191566027082286f, 0.199376584340196f, + 0.207303765383847f, 0.215344494944262f, 0.223495653702478f, 0.231754079499652f, + 0.240116568563785f, 0.248579876752599f, 0.257140720812064f, 0.265795779650105f, + 0.274541695624985f, 0.283375075847868f, 0.292292493499057f, 0.301290489157390f, + 0.310365572142292f, 0.319514221867944f, 0.328732889209064f, 0.338017997877748f, + 0.347365945810858f, 0.356773106567405f, 0.366235830735390f, 0.375750447347553f, + 0.385313265305494f, 0.394920574811589f, 0.404568648808175f, 0.414253744423419f, + 0.423972104423331f, 0.433719958669339f, 0.443493525580883f, 0.453289013602435f, + 0.463102622674396f, 0.472930545707291f, 0.482768970058690f, 0.492614079012283f, + 0.502462053258538f, 0.512309072376361f, 0.522151316315189f, 0.531984966876945f, + 0.541806209197260f, 0.551611233225420f, 0.561396235202429f, 0.571157419136643f, + 0.580890998276382f, 0.590593196578969f, 0.600260250175597f, 0.609888408831494f, + 0.619473937400779f, 0.629013117275481f, 0.638502247828131f, 0.647937647847382f, + 0.657315656966103f, 0.666632637081372f, 0.675884973765851f, 0.685069077669957f, + 0.694181385914321f, 0.703218363471965f, 0.712176504539683f, 0.721052333898081f, + 0.729842408259752f, 0.738543317605065f, 0.747151686505047f, 0.755664175430844f, + 0.764077482049264f, 0.772388342503876f, 0.780593532681191f, 0.788689869461429f, + 0.796674211953372f, 0.804543462712845f, 0.812294568944333f, 0.819924523685287f, + 0.827430366972643f, 0.834809186991105f, 0.842058121202763f, 0.849174357457574f, + 0.856155135084319f, 0.862997745961565f, 0.869699535568266f, 0.876257904013544f, + 0.882670307045301f, 0.888934257037231f, 0.895047323953867f, 0.901007136293294f, + 0.906811382007145f, 0.912457809397536f, 0.917944227990593f, 0.923268509386220f, + 0.928428588083795f, 0.933422462283452f, 0.938248194662667f, 0.942903913127819f, + 0.947387811540448f, 0.951698150417930f, 0.955833257608292f, 0.959791528938907f, + 0.963571428838810f, 0.967171490934417f, 0.970590318618383f, 0.973826585591401f, + 0.976879036376732f, 0.979746486807249f, 0.982427824484824f, 0.984922009211872f, + 0.987228073394887f, 0.989345122419805f, 0.991272334999066f, 0.993008963490220f, + 0.994554334185968f, 0.995907847575523f, 0.997068978577180f, 0.998037276742018f, + 0.998812366428647f, 0.999393946948934f, 0.999781792684653f, 0.999975753175008f +}; + +/*----------------------------------------------------------------------------------* + * Starting line for the noise measurement in TCX. + *----------------------------------------------------------------------------------*/ + +const int16_t startLineWB[N_TCX_STARTLINE_NOISE_WB] = { 8, 23, 36, 45, 66, 128 /* 13.2kbps */, 200, 320, 320, 320 /* 48kbps */, 320 }; + +const int16_t startLineSWB[N_TCX_STARTLINE_NOISE_SWB] = { 8, 44, 96 /* 13.2kbps */, 160, 320, 320, 256 /* 48kbps */, 341, 640 }; + + +/* clang-format on */ diff --git a/lib_enc/rom_enc.h b/lib_enc/rom_enc.h new file mode 100644 index 0000000000..e3e62cb6e9 --- /dev/null +++ b/lib_enc/rom_enc.h @@ -0,0 +1,209 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef ROM_ENC_H +#define ROM_ENC_H + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_enc.h" +#include "cnst.h" + +/*----------------------------------------------------------------------------------* + * General tables + *----------------------------------------------------------------------------------*/ + +extern const float sqrt_han_window[]; /* Half of the square root hanning window */ +extern const int16_t tipos[]; /* Starting points for pulse position search in Algebraic innovation codebook */ +extern const float E_ROM_inter4_1[PIT_UP_SAMP * L_INTERPOL1 + 1]; +extern const float E_ROM_inter6_1[PIT_UP_SAMP6 * L_INTERPOL1 + 1]; +extern const float E_ROM_inter4_1[PIT_UP_SAMP * L_INTERPOL1 + 1]; +extern const float E_ROM_inter6_1[PIT_UP_SAMP6 * L_INTERPOL1 + 1]; +extern const float W_HIST[DTX_HIST_SIZE]; /* CNG & DTX - table for calculation of average excitation energy */ + +extern const int16_t bwd_start_bin[]; +extern const int16_t bwd_end_bin[]; + +extern const float h_fir[]; /* 2nd order fir filter for wsp, decimation by 2 */ + +extern const float preemphCompensation[]; + +/*----------------------------------------------------------------------------------* + * VAD tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t hangover_hd_tbl[3]; +extern const int16_t hangover_sf_tbl[6]; + +/*----------------------------------------------------------------------------------* + * Open-loop pitch search tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t nb_sect_12k8[]; +extern const int16_t nb_subsect_12k8[]; +extern const int16_t len_12k8[]; +extern const int16_t len1_12k8[]; +extern const int16_t sublen_12k8[]; +extern const int16_t sublen1_12k8[]; +extern const int16_t pit_max_12k8[]; +extern const int16_t sec_length_12k8[]; +extern const int16_t sec_length1_12k8[]; + +/*----------------------------------------------------------------------------------* + * LSF quantizer + *----------------------------------------------------------------------------------*/ + +extern const int16_t lsf_numlevels[TCXLPC_NUMSTAGES]; +extern const int16_t lsf_ind_numlevels[TCXLPC_IND_NUMSTAGES]; + +extern const int16_t lsf_unified_fit_model_nb[4][16]; +extern const int16_t lsf_unified_fit_model_wb[4][16]; +extern const int16_t lsf_unified_fit_model_wbhb[4][16]; + +extern const float Freq_Weight_Com[160]; +extern const float Freq_Weight_UV[160]; + +/*----------------------------------------------------------------------------------* + * Speech/music classification + *----------------------------------------------------------------------------------*/ + +extern const float w_spmus[HANG_LEN][HANG_LEN]; + +extern const float sm_means[]; +extern const float sm_scale[]; +extern const float hout_intervals[]; +extern const float bcox_add_cnst[N_SMC_FEATURES]; +extern const float bcox_lmbd[N_SMC_FEATURES]; +extern const float pca_mean_[]; +extern const float pca_components_[]; +extern const float weights_speech[]; +extern const float means_speech[]; +extern const float weights_music[]; +extern const float means_music[]; +extern const float weights_noise[]; +extern const float means_noise[]; +extern const float prec_chol_speech[]; +extern const float log_det_chol_speech[]; +extern const float prec_chol_music[]; +extern const float log_det_chol_music[]; +extern const float prec_chol_noise[]; +extern const float log_det_chol_noise[]; + +extern const float m_speech[]; +extern const float invV_speech[]; +extern const float lvm_speech[]; + +extern const float m_music[]; +extern const float invV_music[]; +extern const float lvm_music[]; + +extern const float m_noise[]; +extern const float invV_noise[]; +extern const float lvm_noise[]; + +extern const int16_t mel_fb_start[]; +extern const int16_t mel_fb_len[]; +extern const float mel_fb[]; +extern const float dct_mtx[]; + +extern const float SF[]; +extern const float SF_8k[]; + +/*----------------------------------------------------------------------------------* + * SWB TBE + *----------------------------------------------------------------------------------*/ + +extern const float lpc_weights[]; + +/*----------------------------------------------------------------------------------* + * WB, SWB and FB bandwidth detector + *----------------------------------------------------------------------------------*/ + +extern const float hann_window_320[]; + +/*----------------------------------------------------------------------------------* + * Huffman coding + *----------------------------------------------------------------------------------*/ + +extern const int16_t huffsizn_e[32]; +extern const int16_t huffsizn_n[32]; + +extern const int16_t huffnorm_e[32]; +extern const int16_t huffnorm_n[32]; +extern const int16_t hessize[8]; +extern const int16_t hescode[8]; + +/*----------------------------------------------------------------------------------* + * VAD + *----------------------------------------------------------------------------------*/ + +extern const int16_t BAND_NUM_TAB[5]; + +extern const float M_inr[16]; +extern const float M_ini[16]; +extern const float M_r[8]; +extern const float M_i[8]; +extern const float M_Wr[16]; +extern const float M_Wi[16]; + +extern const int16_t SP_CENTER_BAND_NUM_TAB[5]; +extern const float VAD_DELTA1[5]; +extern const float VAD_DELTA2[5]; + +extern const int16_t NREGION_INDEX_NB[9]; +extern const int16_t NREGION_INDEX_WB[13]; +extern const int16_t NREGION_INDEX_SWB[16]; +extern const int16_t NREGION_INDEX_FB[16]; +extern const int16_t ENERGY_BAND_NUM[4]; +extern const int16_t *REGION_INDEX[4]; +extern const float MAX_LF_SNR_TAB[4]; + +extern const float COMVAD_INIT_SNR_DELTA[5]; +extern const float LS_MIN_SELENCE_SNR[3]; +extern const float LT_MIN_SILENCE_SNR[3]; + +/*----------------------------------------------------------------------------------* + * Starting line for the noise measurement in TCX. + *----------------------------------------------------------------------------------*/ + +extern const int16_t startLineWB[N_TCX_STARTLINE_NOISE_WB]; +extern const int16_t startLineSWB[N_TCX_STARTLINE_NOISE_SWB]; + + +#endif diff --git a/lib_enc/rst_enc.c b/lib_enc/rst_enc.c new file mode 100644 index 0000000000..ac8853c721 --- /dev/null +++ b/lib_enc/rst_enc.c @@ -0,0 +1,94 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * CNG_reset_enc() + * + * Reset encoder static variables after a CNG frame + *-------------------------------------------------------------------*/ + +void CNG_reset_enc( + Encoder_State *st, /* i/o: encoder state structure */ + float *pitch_buf, /* o : floating pitch for each subframe */ + float *voice_factors, /* o : voicing factors */ + int16_t VBR_cng_reset_flag ) +{ + init_gp_clip( st->clip_var ); + mvr2r( UVWB_Ave, st->mem_AR, M ); + set_f( st->mem_MA, 0, M ); + st->hLPDmem->mem_w0 = 0.0f; + st->hLPDmem->tilt_code = 0.0f; + st->hLPDmem->gc_threshold = 0.0f; + + if ( VBR_cng_reset_flag ) + { + set_f( st->hLPDmem->mem_syn, 0, M ); + } + set_f( st->hLPDmem->dispMem, 0, 8 ); + + /* last good received frame for FEC in ACELP */ + st->clas = UNVOICED_CLAS; + + /* reset the pitch buffer in case of FRAME_NO_DATA or SID frames */ + if ( st->L_frame == L_FRAME ) + { + set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR ); + } + else /* st->L_frame == L_FRAME16k */ + { + set_f( pitch_buf, (float) L_SUBFR16k, NB_SUBFR16k ); + } + + set_f( voice_factors, 1.0, NB_SUBFR16k ); + + /* Reset active frame counter */ + st->hTdCngEnc->act_cnt2 = 0; + + /* deactivate bass post-filter */ + st->bpf_off = 1; + + return; +} diff --git a/lib_enc/set_impulse.c b/lib_enc/set_impulse.c new file mode 100644 index 0000000000..493d373d1e --- /dev/null +++ b/lib_enc/set_impulse.c @@ -0,0 +1,342 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local constant + *-----------------------------------------------------------------*/ + +#define INPOL 4 /* +- range in samples for impulse position searching */ + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void convolve_tc( const float g[], const float h[], float y[], const int16_t L_1, const int16_t L_2 ); + +static void correlate_tc( const float *x, float *y, const float *h, const int16_t start, const int16_t L_1, const int16_t L_2 ); + +static void convolve_tc2( const float g[], const float h[], float y[], const int16_t pos_max ); + + +/*---------------------------------------------------------------------------------------* + * Function set_impulse() for TC * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * Builds glottal codebook contribution based on glotal impulses positions finding. * + * * + * Returns a position of the glotal impulse center and * + * a number of the glotal impulse shape. * + * * + * |----| |----| xn * + * imp_pos-> || | imp_shape-> | g1 | | * + * | | | | g2 | exc |---| y1 ---- | * + * | | |--------------| |---------| h |-------|gain|-------(-)---> xn2 * + * | || | gn | |---| ---- * + * |----| |----| * + * codebook excitation h_orig gain * + * * + * * + * nominator dd * * + * Searching criterion: maximize ------------- = ---- = ----------------- * + * denominator rr * + * * + * Notice: gain = gain_trans * gain_pit (computed in trans_enc() function) * + * * + *---------------------------------------------------------------------------------------*/ + +void set_impulse( + const float xn[], /* i : target signal */ + const float h_orig[], /* i : impulse response of weighted synthesis filter */ + float exc[], /* o : adaptive codebook excitation */ + float y1[], /* o : filtered adaptive codebook excitation */ + int16_t *imp_shape, /* o : adaptive codebook index */ + int16_t *imp_pos, /* o : position of the glotal impulse center index */ + float *gain_trans /* o : transition gain */ +) +{ + float rr[L_SUBFR]; /* criterion: nominator coeficients */ + float dd[L_SUBFR]; /* criterion: denominator coeficients */ + float gh[L_SUBFR]; /* convolution of 'g' and 'h' filters */ + float krit, krit_max; + int16_t i, j, m; + int16_t start1, start2, end1; + + + krit_max = -1.0e+12f; + + /* main loop */ + /* impulse */ + for ( m = 0; m < NUM_IMPULSE; m++ ) + { + /* set searching ranges */ + if ( *imp_pos < L_SUBFR - INPOL ) + { + end1 = *imp_pos + INPOL; + } + else + { + end1 = L_SUBFR; + } + if ( *imp_pos > INPOL ) + { + start1 = *imp_pos - INPOL; + } + else + { + start1 = 0; + } + if ( start1 > L_IMPULSE2 ) + { + start2 = start1; + } + else + { + start2 = L_IMPULSE2; + } + + /*-----------------------------------------------------* + * nominator & DEnominator, gh=conv(g,h) + *-----------------------------------------------------*/ + if ( start1 < L_IMPULSE2 ) + { + rr[start1] = 0; + dd[start1] = 0; + convolve_tc( &glottal_cdbk[m * L_IMPULSE + L_IMPULSE2 - start1], &h_orig[0], gh, (int16_t) ( L_IMPULSE - L_IMPULSE2 + start1 ), L_SUBFR ); + + /* nominator & Denominator row <0> */ + for ( i = 0; i < L_SUBFR; i++ ) + { + rr[start1] += gh[i] * gh[i]; + dd[start1] += gh[i] * xn[i]; + } + for ( i = start1 + 1; i < L_IMPULSE2; i++ ) + { + rr[i] = 0; + dd[i] = 0; + /* Denominator rows <1,L_IMPULSE2-1> */ + for ( j = L_SUBFR - 1; j > 0; j-- ) + { + gh[j] = gh[j - 1] + glottal_cdbk[m * L_IMPULSE + L_IMPULSE2 - i] * h_orig[j]; + rr[i] += gh[j] * gh[j]; + dd[i] += gh[j] * xn[j]; + } + gh[0] = glottal_cdbk[m * L_IMPULSE + L_IMPULSE2 - i] * h_orig[0]; + rr[i] += gh[0] * gh[0]; + dd[i] += gh[0] * xn[0]; + /* move rr and dd into rr[i] and dd[i] */ + } + /* complete convolution(excitation,h_orig) */ + for ( j = L_SUBFR - 1; j > 0; j-- ) + { + gh[j] = gh[j - 1] + glottal_cdbk[m * L_IMPULSE] * h_orig[j]; + } + } + else + { + convolve_tc( &glottal_cdbk[m * L_IMPULSE], &h_orig[0], gh, L_IMPULSE, L_SUBFR ); + } + if ( end1 >= start2 ) + { + /* Denominator row */ + rr[L_SUBFR - 1] = 0; + for ( j = 0; j <= L_IMPULSE2; j++ ) + { + rr[L_SUBFR - 1] += gh[j] * gh[j]; + } + /* move rr into rr[L_SUBFFR-1 */ + /* Denominator rows */ + for ( i = L_SUBFR - 2; i >= start2; i-- ) + { + rr[i] = rr[i + 1] + gh[L_SUBFR + L_IMPULSE2 - 1 - i] * gh[L_SUBFR + L_IMPULSE2 - 1 - i]; + } + + /* nominator rows */ + correlate_tc( xn, &dd[L_IMPULSE2], gh, (int16_t) ( start2 - L_IMPULSE2 ), L_SUBFR, (int16_t) ( end1 - L_IMPULSE2 ) ); + } + + /*------------------------------------------------------* + * maxim. criterion + *------------------------------------------------------*/ + for ( i = start1; i < end1; i++ ) + { + krit = (float) ( dd[i] * dd[i] ) / rr[i]; + if ( krit > krit_max ) + { + krit_max = krit; + *imp_pos = i; + *imp_shape = m; + } + } + } + + /*--------------------------------------------------------* + * Build the excitation using found codeword + *--------------------------------------------------------*/ + + set_f( exc, 0, L_SUBFR ); + set_f( y1, 0, L_SUBFR ); + for ( i = ( *imp_pos - L_IMPULSE2 ); i <= ( *imp_pos + L_IMPULSE2 ); i++ ) + { + if ( ( i >= 0 ) && ( i < L_SUBFR ) ) + { + exc[i] = glottal_cdbk[( *imp_shape ) * L_IMPULSE + i - ( *imp_pos ) + L_IMPULSE2]; + } + } + + /*------------------------------------------------------* + * Form filtered excitation, find gain_trans + *------------------------------------------------------*/ + + convolve_tc2( exc, h_orig, y1, *imp_pos ); + + /* Find the ACELP correlations and the pitch gain (for current subframe) */ + *gain_trans = dotp( xn, y1, L_SUBFR ) / ( dotp( y1, y1, L_SUBFR ) + 0.01f ); + + return; +} + +/*-------------------------------------------------------------------* + * convolve_tc: + * + * convolution for different vectors' lengths + *-------------------------------------------------------------------*/ +static void convolve_tc( + const float g[], /* i : input vector */ + const float h[], /* i : impulse response (or second input vector) */ + float y[], /* o : output vetor (result of convolution) */ + const int16_t L_1, /* i : vector h size */ + const int16_t L_2 /* i : vector g size */ +) +{ + float temp; + int16_t i, n; + + + for ( n = 0; n < L_2; n++ ) + { + temp = g[0] * h[n]; + for ( i = 1; i < ( ( n < L_1 ) ? ( n + 1 ) : L_1 ); i++ ) + { + temp += g[i] * h[n - i]; + } + y[n] = temp; + } + + return; +} + +/*-------------------------------------------------------------------* + * convolve_tc2: + * + * convolution for one vector with only L_IMPULSE nonzero coefficients + *-------------------------------------------------------------------*/ +static void convolve_tc2( + const float g[], /* i : input vector */ + const float h[], /* i : impulse response (or second input vector) */ + float y[], /* o : output vetor (result of convolution) */ + const int16_t pos_max /* o : artificial impulse position */ +) + +{ + float temp; + int16_t i, n; + int16_t i_start, i_end; + int16_t i_end2; + + + i_start = pos_max - L_IMPULSE2; + + if ( i_start < 0 ) + { + i_start = 0; + } + + i_end = pos_max + L_IMPULSE; + if ( i_end > L_SUBFR ) + { + i_end = L_SUBFR; + } + for ( n = i_start; n < L_SUBFR; n++ ) + { + temp = g[0] * h[n]; + i_end2 = ( ( n <= i_end ) ? ( n + 1 ) : i_end ); + for ( i = 1; i < i_end2; i++ ) + { + temp += g[i] * h[n - i]; + } + y[n] = temp; + } + + return; +} + +/*-------------------------------------------------------------------* + * correlate_tc: + * + * correlation for different vectors' lengths + *-------------------------------------------------------------------*/ + +static void correlate_tc( + const float *x, /* i : target signal */ + float *y, /* o : correlation between x[] and h[] */ + const float *h, /* i : impulse response (of weighted synthesis filter) */ + const int16_t start, /* i : index of iterest */ + const int16_t L_1, /* i : vector size */ + const int16_t L_2 /* i : index of interest */ +) +{ + int16_t i, j; + float s; + + + for ( i = start; i < L_2; i++ ) + { + s = 0.0f; + for ( j = i; j < L_1; j++ ) + { + s += x[j] * h[j - i]; + } + y[i] = s; + } + + return; +} diff --git a/lib_enc/setmodeindex.c b/lib_enc/setmodeindex.c new file mode 100644 index 0000000000..199933fbaf --- /dev/null +++ b/lib_enc/setmodeindex.c @@ -0,0 +1,85 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------- + + function name: SetModeIndex + description: function for configuring the codec between frames - currently bitrate and bandwidth only + must not be called while a frame is encoded - hence mutexes must be used in MT environments + + format: BANDWIDTH*16 + BITRATE (mode index) + + ---------------------------------------------------------------------------*/ + +void SetModeIndex( + Encoder_State *st, + const int32_t last_total_brate, + const int16_t last_element_mode, + const int16_t is_mct ) +{ + int16_t ini_frame_loc = st->ini_frame; + + if ( st->element_mode == IVAS_CPE_MDCT && last_element_mode != IVAS_CPE_MDCT && st->idchan == 1 ) + { + st->ini_frame = 0; + } + + /* Reconfigure the core coder */ + if ( ( last_total_brate != st->total_brate ) || + ( st->last_bwidth != st->bwidth ) || + ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) || + ( ( st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) && st->element_mode > EVS_MONO ) || + ( st->rf_mode_last != st->rf_mode ) || + ( st->element_mode > EVS_MONO && st->ini_frame == 0 ) ) + { + core_coder_mode_switch( st, last_total_brate, is_mct ); + } + + + st->ini_frame = ini_frame_loc; + + return; +} diff --git a/lib_enc/sig_clas.c b/lib_enc/sig_clas.c new file mode 100644 index 0000000000..c1438b6b76 --- /dev/null +++ b/lib_enc/sig_clas.c @@ -0,0 +1,418 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define K_COR_ENC 2.857f +#define C_COR_ENC -1.286f +#define K_EE_ENC 0.04167f +#define C_EE_ENC 0.0f +#define K_ZC_ENC -0.04f +#define C_ZC_ENC 2.4f +#define K_RELE_ENC 0.05f +#define C_RELE_ENC 0.45f +#define K_PC_ENC -0.07143f +#define C_PC_ENC 1.857f +#define K_SNR_ENC 0.1111f +#define C_SNR_ENC -0.3333f + +/*-------------------------------------------------------------------* + * signal_clas() + * + * Classification state machine for FEC + * Coder type modification + *-------------------------------------------------------------------*/ + +/*! r: classification for current frames */ +int16_t signal_clas( + Encoder_State *st, /* i/o: encoder state structure */ + const float *speech, /* i : pointer to speech signal for E computation */ + const float *ee, /* i : lf/hf E ration for 2 half-frames */ + const float relE, /* i : frame relative E to the long term average */ + const int16_t L_look, /* i : look-ahead */ + int16_t *clas_mod /* o : class flag for NOOP detection */ +) +{ + float mean_voi2, mean_ee2, tmp; + float een, corn, zcn, relEn, pcn, fmerit1; + int16_t i, clas, pc, zc; + + /*----------------------------------------------------------------* + * Calculate average voicing + * Calculate average spectral tilt + * Calculate zero-crossing rate + * Calculate pitch stability + *----------------------------------------------------------------*/ + + /* average voicing on second half-frame and look-ahead */ + mean_voi2 = 0.5f * ( st->voicing[1] + st->voicing[2] ); + + /* average spectral tilt in dB */ + tmp = ee[0] * ee[1]; + if ( tmp < 1.0f ) + { + tmp = 1.0f; + } + + mean_ee2 = 0.5f * 20.0f * (float) log10( tmp ); + + /* compute zero crossing rate */ + zc = 0; + for ( i = L_look; i < L_FRAME + L_look; i++ ) + { + if ( speech[i] <= 0.0f && speech[i - 1] > 0.0f ) + { + zc++; + } + } + + /* compute pitch stability */ + pc = (int16_t) ( abs( st->pitch[1] - st->pitch[0] ) + abs( st->pitch[2] - st->pitch[1] ) ); + st->tdm_pc = pc; + + /*-----------------------------------------------------------------* + * Transform parameters to the range <0:1> + * Compute the merit function + *-----------------------------------------------------------------*/ + + een = K_EE_ENC * mean_ee2 + C_EE_ENC; + if ( een > 1.0f ) + { + een = 1.0f; + } + else if ( een < 0.0f ) + { + een = 0.0f; + } + + corn = K_COR_ENC * mean_voi2 + C_COR_ENC; + if ( corn > 1.0f ) + { + corn = 1.0f; + } + else if ( corn < 0.0f ) + { + corn = 0.0f; + } + + zcn = K_ZC_ENC * zc + C_ZC_ENC; + if ( zcn > 1.0f ) + { + zcn = 1.0f; + } + else if ( zcn < 0.0f ) + { + zcn = 0.0f; + } + + relEn = K_RELE_ENC * relE + C_RELE_ENC; + if ( relEn > 1.0f ) + { + relEn = 1.0f; + } + else if ( relEn < 0.5f ) + { + relEn = 0.5f; + } + + pcn = K_PC_ENC * pc + C_PC_ENC; + if ( pcn > 1.0f ) + { + pcn = 1.0f; + } + else if ( pcn < 0.0f ) + { + pcn = 0.0f; + } + + fmerit1 = ( 1.0f / 6.0f ) * ( een + 2.0f * corn + zcn + relEn + pcn ); + + /*-----------------------------------------------------------------* + * FEC classification + *-----------------------------------------------------------------*/ + + st->fmerit_dt = st->prev_fmerit - fmerit1; + st->prev_fmerit = fmerit1; + + /* FEC classification */ + if ( st->localVAD == 0 || st->coder_type == UNVOICED || relE < -6.0f ) + { + clas = UNVOICED_CLAS; + *clas_mod = clas; + } + else + { + switch ( st->last_clas ) + { + case VOICED_CLAS: + case ONSET: + case VOICED_TRANSITION: + if ( fmerit1 < 0.49f ) + { + clas = UNVOICED_CLAS; + } + else if ( fmerit1 < 0.66f ) + { + clas = VOICED_TRANSITION; + } + else + { + clas = VOICED_CLAS; + } + + if ( fmerit1 < 0.45f ) + { + *clas_mod = UNVOICED_CLAS; + } + else if ( fmerit1 < 0.66f ) + { + *clas_mod = VOICED_TRANSITION; + } + else + { + *clas_mod = VOICED_CLAS; + } + break; + + case UNVOICED_CLAS: + case UNVOICED_TRANSITION: + if ( fmerit1 > 0.63f ) + { + clas = ONSET; + } + else if ( fmerit1 > 0.585f ) + { + clas = UNVOICED_TRANSITION; + } + else + { + clas = UNVOICED_CLAS; + } + *clas_mod = clas; + break; + + default: + clas = UNVOICED_CLAS; + *clas_mod = clas; + break; + } + } + + /*-----------------------------------------------------------------* + * Onset classification + *-----------------------------------------------------------------*/ + + /* tc_cnt == -1: frame after TC frame in continuous block of GC/VC frames */ + /* tc_cnt == 0: UC frame */ + /* tc_cnt == 1: onset/transition frame, coded by GC coder type */ + /* tc_cnt == 2: frame after onset/transition frame, coded by TC coder type */ + + if ( clas == UNVOICED_CLAS ) + { + st->tc_cnt = 0; + } + + if ( clas >= VOICED_TRANSITION && st->tc_cnt >= 0 ) + { + st->tc_cnt += 1; + } + + if ( st->tc_cnt > 2 ) + { + st->tc_cnt = -1; + } + + return clas; +} + + +/*-------------------------------------------------------------------* + * select_TC() + * + * Select TC coder type for appropriate frames which is in general VOICED_TRANSITION, + * VOICED_CLAS or ONSET frames following UNVOICED_CLAS frames + *-------------------------------------------------------------------*/ + +void select_TC( + const int16_t codec_mode, /* i : codec mode */ + const int16_t tc_cnt, /* i : TC frame counter */ + int16_t *coder_type, /* i/o: coder type */ + const int16_t localVAD /* i : VAD without hangover */ +) +{ + if ( codec_mode == MODE1 ) + { + /*---------------------------------------------------------------------* + * Select TC coder type for appropriate frames which is in general VOICED_TRANSITION, + * VOICED_CLAS or ONSET frames following UNVOICED_CLAS frames + *---------------------------------------------------------------------*/ + + if ( localVAD != 0 && tc_cnt >= 1 ) + { + if ( tc_cnt == 1 ) + { + /* onset/transition frame is always coded using GC coder type */ + *coder_type = GENERIC; + } + else + { + /* frame after onset/transition frame is coded by TC coder type */ + *coder_type = TRANSITION; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * coder_type_modif() + * + * Coder type modification + *-------------------------------------------------------------------*/ + +void coder_type_modif( + Encoder_State *st, /* i/o: encoder state structure */ + const float relE /* i : frame relative E to the long term average */ +) +{ + int16_t unmod_coder_type, vbr_generic_ho; + + if ( st->Opt_SC_VBR ) + { + vbr_generic_ho = st->hSC_VBR->vbr_generic_ho; + } + else + { + vbr_generic_ho = -1; + } + + if ( st->codec_mode == MODE1 ) + { + /*---------------------------------------------------------------------* + * Coder type modification + * + * Prevent UC coder type in certain conditions + * Prevent VC coder type in certain conditions + * Select TC coder type in appropriate frames + *---------------------------------------------------------------------*/ + + /* At higher rates, use GC coding instead of UC coding to improve quality */ + if ( ( st->element_mode == EVS_MONO && st->total_brate > ACELP_9k60 && st->coder_type == UNVOICED ) || + ( st->element_mode > EVS_MONO && st->total_brate > MAX_UNVOICED_BRATE && st->coder_type == UNVOICED ) ) + { + st->coder_type = GENERIC; + } + + /* Prevent UC coding on mixed content at 9.6 kb/s */ + if ( st->total_brate >= ACELP_9k60 && st->coder_type == UNVOICED && st->audio_frame_cnt != 0 ) + { + st->coder_type = GENERIC; + } + + unmod_coder_type = st->coder_type; + + /* Enforce GC coder type on inactive signal (this can be later overwritten to INACTIVE) */ + if ( st->localVAD == 0 && ( ( st->coder_type == UNVOICED && ( !st->Opt_SC_VBR || + ( st->Opt_SC_VBR && vbr_generic_ho == 0 && st->last_coder_type > UNVOICED ) ) ) || + st->coder_type == TRANSITION || st->coder_type == VOICED ) ) + { + st->coder_type = GENERIC; + } + + + if ( st->Opt_SC_VBR ) + { + if ( st->coder_type == GENERIC && unmod_coder_type == UNVOICED && st->Opt_SC_VBR ) + { + st->hSC_VBR->vbr_generic_ho = 1; + } + + if ( st->coder_type > UNVOICED && st->Opt_SC_VBR ) + { + st->hSC_VBR->vbr_generic_ho = 0; + } + + if ( st->localVAD == 0 && st->coder_type == UNVOICED ) + { + st->hSC_VBR->last_7k2_coder_type = GENERIC; + } + else + { + st->hSC_VBR->last_7k2_coder_type = st->coder_type; + } + } + + if ( st->element_mode == EVS_MONO ) + { + /* At higher rates and with 16kHz core, allow only GC and TC coder type */ + if ( st->total_brate > ACELP_16k40 && st->coder_type != GENERIC && st->coder_type != TRANSITION ) + { + st->coder_type = GENERIC; + } + } + else + { + /* At higher bitrates, disable UC and VC coder type; note that IC coder type is classified later */ + if ( ( st->total_brate > MAX_VOICED_BRATE && st->coder_type == VOICED ) || + ( st->total_brate > MAX_UNVOICED_BRATE && st->coder_type == UNVOICED ) ) + { + st->coder_type = GENERIC; + } + } + + /* Patch for certain low-level signals for which the gain quantizer sometimes goes out of its dynamic range */ + if ( st->coder_type == VOICED && st->input_bwidth == NB && relE < -10.0f && st->total_brate <= ACELP_8k00 ) + { + st->coder_type = GENERIC; + } + } + + return; +} diff --git a/lib_enc/spec_center.c b/lib_enc/spec_center.c new file mode 100644 index 0000000000..f565cba7a8 --- /dev/null +++ b/lib_enc/spec_center.c @@ -0,0 +1,94 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "rom_enc.h" +#include "cnst.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * spec_center() + * + * + *-------------------------------------------------------------------*/ + +void spec_center( + float spec_power[], /* i : energy of sub-band divided uniformly */ + float sp_center[], /* o : spectral centroid */ + const int16_t bw_index /* i : bandwidth */ +) +{ + int16_t i; + float t_sp_center, frame_power; + int16_t sp_center_band_num = SP_CENTER_BAND_NUM_TAB[bw_index]; + float sp_center_mem; + + t_sp_center = 0; + frame_power = 0; + + for ( i = 1; i < sp_center_band_num; i++ ) + { + t_sp_center += spec_power[i] * ( i ); + frame_power += spec_power[i]; + } + sp_center[3] = (float) ( ( t_sp_center + VAD_DELTA1[bw_index] ) / ( frame_power + VAD_DELTA2[bw_index] ) ); + + sp_center_mem = 0; + frame_power = 0; + + for ( i = 0; i < 10; i++ ) + { + sp_center_mem += spec_power[i] * ( i + 1 ); + frame_power += spec_power[i]; + } + + /* 107374184.f = 32768.f * 32768.f * 0.1 */ + t_sp_center = (float) ( ( sp_center_mem + 107374184.f ) / ( frame_power + 107374184.f ) ); + + sp_center[0] = 0.7f * sp_center[0] + 0.3f * t_sp_center; + sp_center[2] = t_sp_center; + + if ( bw_index == CLDFBVAD_NB_ID ) + { + t_sp_center = (float) ( ( sp_center_mem ) / ( frame_power + FLT_MIN ) ); + sp_center[0] = 0.7f * sp_center[0] + 0.3f * t_sp_center; + sp_center[2] = t_sp_center; + } + + return; +} diff --git a/lib_enc/spec_flatness.c b/lib_enc/spec_flatness.c new file mode 100644 index 0000000000..2ef6bd3b60 --- /dev/null +++ b/lib_enc/spec_flatness.c @@ -0,0 +1,131 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * spec_flatness() + * + * + *-------------------------------------------------------------------*/ + +void spec_flatness( + float spec_amp[], /* i : spectral amplitude */ + float smooth_spec_amp[], /* i : smoothed spectral amplitude */ + float sSFM[] /* o : spectral flatness rate */ +) +{ + int16_t i; + double prods, sums; + float SFM; + + for ( i = MIN_AMP_ID; i <= MAX_AMP_ID; i++ ) + { + smooth_spec_amp[i - MIN_AMP_ID] = smooth_spec_amp[i - MIN_AMP_ID] * 0.7f + spec_amp[i] * 0.3f; + } + + /* sSFM1 */ + prods = 1; + sums = 0; + assert( MIN_AMP_ID <= 5 ); + for ( i = ( 5 - MIN_AMP_ID ); i < ( 20 - MIN_AMP_ID ); i++ ) + { + prods = smooth_spec_amp[i] * prods; + sums = sums + smooth_spec_amp[i]; + } + + if ( prods > 0 ) + { + prods = pow( prods, 1.0 / 15 ); + } + else + { + prods = 0; + } + sums = sums / 15; + + SFM = (float) ( ( prods + 3276.8f ) / ( sums + 3276.8f ) ); + sSFM[0] = 0.85f * sSFM[0] + 0.15f * SFM; + + /* sSFM2 */ + prods = 1; + sums = 0; + for ( i = ( 20 - MIN_AMP_ID ); i < ( 40 - MIN_AMP_ID ); i++ ) + { + prods = smooth_spec_amp[i] * prods; + sums = sums + smooth_spec_amp[i]; + } + + if ( prods > 0 ) + { + prods = pow( prods, 1.0 / 20 ); + } + else + { + prods = 0; + } + sums = sums / 20; + SFM = (float) ( ( prods + 3276.8f ) / ( sums + 3276.8f ) ); + sSFM[1] = 0.85f * sSFM[1] + 0.15f * SFM; + /* sSFM3 */ + prods = 1; + sums = 0; + for ( i = ( 40 - MIN_AMP_ID ); i <= ( MAX_AMP_ID - MIN_AMP_ID ); i++ ) + { + prods = smooth_spec_amp[i] * prods; + sums = sums + smooth_spec_amp[i]; + } + + if ( prods > 0 ) + { + prods = pow( prods, 0.04 ); + } + else + { + prods = 0; + } + sums = sums / 25; + SFM = (float) ( ( prods + 3276.8f ) / ( sums + 3276.8f ) ); + sSFM[2] = 0.85f * sSFM[2] + 0.15f * SFM; + + + return; +} diff --git a/lib_enc/speech_music_classif.c b/lib_enc/speech_music_classif.c new file mode 100644 index 0000000000..a61e42c164 --- /dev/null +++ b/lib_enc/speech_music_classif.c @@ -0,0 +1,3087 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include "rom_enc.h" +#include "rom_com.h" /* Common static table prototypes */ +#include "wmops.h" + + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define ATT_SEG_LEN ( L_FRAME / ATT_NSEG ) +#define ATT_3LSUB_POS ( 3 * ATT_NSEG / NB_SUBFR ) +#define ATT_3LSUB_POS_16k ( int16_t )( ( 4.0f * ATT_NSEG / (float) NB_SUBFR16k ) + 0.5f ) + +#define THR_CORR_PEAK 0.95f +#define TON_FACT 0.95f +#define TON_ALPHA 0.95f + +#define DLP_BIAS 0.138121f + +#define THR_MASS_MAX 0.85f +#define THR_MASS_MIN 0.75f +#define THR_MASS_STEP_UP 0.01f +#define THR_MASS_STEP_DN 0.02f + + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static void spec_analysis( float *Bin_E, float *p2v_map ); + +static void flux( float *Bin_E, float *p2v_map, float *old_Bin_E, float *buf_flux, int16_t attack_hangover, float dec_mov ); + +static void tonal_dist( float *p2v_map, float *buf_pkh, float *buf_Ntonal, float *buf_Ntonal2, float *buf_Ntonal_lf ); + +static int16_t mode_decision( Encoder_State *st, int16_t len, float *dec_mov, float *buf_flux, float *buf_epsP_tilt, float *buf_pkh, float *buf_cor_map_sum, float *buf_Ntonal, float *buf_Ntonal2, float *buf_Ntonal_lf, float *buf_dlp ); + +static void var_cor_calc( const float old_corr, float *mold_corr, float var_cor_t[], int16_t *high_stable_cor ); + +static int16_t attack_det( const float *inp, const int16_t last_clas, const int16_t localVAD, const int16_t coder_type, const int32_t total_brate, const int16_t element_mode, const int16_t clas, float finc_prev[], float *lt_finc, int16_t *last_strong_attack ); + +static float tonal_det( const float S[], int16_t vad_flag, float tod_S_map_lt[], float *tod_thr_lt, float *tod_weight, float *tod_S_mass_prev, float *tod_S_mass_lt ); + +static void tonal_context_improv( Encoder_State *st, const float PS[], const float voi_fv, const float cor_map_sum_fv, const float LPCErr ); + +static void order_spectrum( float *vec, const int16_t len ); + +static void detect_sparseness( Encoder_State *st, const int16_t localVAD_HE_SAD, const float voi_fv ); + +static int16_t sp_mus_classif_1st( Encoder_State *st, const int16_t localVAD_HE_SAD, const float lsp_new[M], const float cor_map_sum, const float epsP[M + 1], const float PS[], float non_sta, float relE, float *voi_fv, float *cor_map_sum_fv, float *LPCErr, int16_t *high_lpn_flag ); + +static void sp_mus_classif_2nd( Encoder_State *st, const float Etot, int16_t *attack_flag, const float *inp ); + +static void music_mixed_classif_improv( Encoder_State *st, const float *new_inp, const float *epsP, const float etot, const float old_cor, const float cor_map_sum ); + + +/*---------------------------------------------------------------------* + * speech_music_clas_init() + * + * Initialization of speech/music classifier + *---------------------------------------------------------------------*/ + +void speech_music_clas_init( + SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ +) +{ + int16_t i; + + set_f( hSpMusClas->FV_st, 0.0f, N_SMC_FEATURES ); + + hSpMusClas->inact_cnt = 0; + set_s( hSpMusClas->past_dec, 0, HANG_LEN - 1 ); + set_f( hSpMusClas->past_dlp, 0, HANG_LEN - 1 ); + set_f( hSpMusClas->past_dlp_mean_ST, 0, HANG_LEN - 1 ); + hSpMusClas->dlp_mean_ST = 0.0f; + hSpMusClas->dlp_mean_LT = 0.0f; + hSpMusClas->dlp_var_LT = 0.0f; + + for ( i = 0; i < N_SMC_FEATURES; i++ ) + { + hSpMusClas->prev_FV[i] = 0.5f * hout_intervals[2 * i] + 0.5f * hout_intervals[2 * i + 1]; + } + + for ( i = 0; i < NB_BANDS_SPMUS; i++ ) + { + hSpMusClas->past_log_enr[i] = logf( E_MIN ); + } + + hSpMusClas->sp_mus_state = -8; + hSpMusClas->wdrop = 0.0f; + hSpMusClas->wrise = 0.0f; + hSpMusClas->wdlp_0_95_sp = 0.0f; + hSpMusClas->wdlp_xtalk = 0.0f; + set_f( hSpMusClas->last_lsp, 0.0f, M_LSP_SPMUS ); + hSpMusClas->last_cor_map_sum = 0.0f; + hSpMusClas->last_non_sta = 0.0f; + set_f( hSpMusClas->past_PS, 0.0f, HIGHEST_FBIN - LOWEST_FBIN ); + hSpMusClas->past_ps_diff = 0; + hSpMusClas->past_epsP2 = 01; + hSpMusClas->past_epsP = 0; + hSpMusClas->flag_spitch_cnt = 0; + + hSpMusClas->gsc_thres[0] = TH_0_MIN; + hSpMusClas->gsc_thres[1] = TH_1_MIN; + hSpMusClas->gsc_thres[2] = TH_2_MIN; + hSpMusClas->gsc_thres[3] = TH_3_MIN; + set_f( hSpMusClas->gsc_lt_diff_etot, 0.0f, MAX_LT ); + hSpMusClas->gsc_mem_etot = 0.0f; + hSpMusClas->gsc_last_music_flag = 0; + hSpMusClas->gsc_nb_thr_1 = 0; + hSpMusClas->gsc_nb_thr_3 = 0; + hSpMusClas->mold_corr = 0.9f; + hSpMusClas->mean_avr_dyn = 0.5f; + hSpMusClas->last_sw_dyn = 10.0f; + + hSpMusClas->relE_attack_cnt = 0; + hSpMusClas->prev_relE = 0.0f; + hSpMusClas->prev_Etot = 0.0f; + hSpMusClas->prev_vad = 0; + hSpMusClas->vad_0_1_cnt = 0; + hSpMusClas->relE_attack_sum = 0; + + /* speech/music classifier improvement */ + for ( i = 0; i < BUF_LEN; i++ ) + { + hSpMusClas->buf_flux[i] = -100; + hSpMusClas->buf_pkh[i] = 0; + hSpMusClas->buf_epsP_tilt[i] = 0; + hSpMusClas->buf_cor_map_sum[i] = 0; + hSpMusClas->buf_Ntonal[i] = 0; + hSpMusClas->buf_Ntonal2[i] = 0; + hSpMusClas->buf_Ntonal_lf[i] = 0; + } + + set_f( hSpMusClas->lpe_buf, 0, HANG_LEN_INIT ); + set_f( hSpMusClas->voicing_buf, 0, HANG_LEN_INIT ); + hSpMusClas->gsc_hangover = 0; + set_f( hSpMusClas->sparse_buf, 0, HANG_LEN_INIT ); + set_f( hSpMusClas->hf_spar_buf, 0, HANG_LEN_INIT ); + hSpMusClas->LT_sparse = 0.0f; + hSpMusClas->gsc_cnt = 0; + hSpMusClas->last_vad_spa = 0; + + set_f( hSpMusClas->old_Bin_E, 0.0f, 3 * N_OLD_BIN_E ); + set_f( hSpMusClas->buf_etot, 0, 4 ); + set_f( hSpMusClas->buf_dlp, 0, 10 ); + + hSpMusClas->UV_cnt1 = 300; + hSpMusClas->LT_UV_cnt1 = 250.0f; + hSpMusClas->onset_cnt = 0; + hSpMusClas->attack_hangover = 0; + hSpMusClas->dec_mov = 0.0f; + hSpMusClas->dec_mov1 = 0.0f; + hSpMusClas->mov_log_max_spl = 200.0f; + hSpMusClas->old_lt_diff[0] = 0.0f; + hSpMusClas->old_lt_diff[1] = 0.0f; + + set_f( hSpMusClas->finc_prev, 0.0f, ATT_NSEG ); + hSpMusClas->lt_finc = 0.0f; + hSpMusClas->last_strong_attack = 0; + hSpMusClas->tdm_lt_Etot = 0.01f; + set_f( hSpMusClas->tod_lt_Bin_E, 0.0f, TOD_NSPEC ); + set_f( hSpMusClas->tod_S_map_lt, 0.0f, TOD_NSPEC ); + hSpMusClas->tod_thr_lt = TOD_THR_MASS; + hSpMusClas->tod_weight = 0.0f; + hSpMusClas->tod_S_mass_prev = 0.0f; + hSpMusClas->tod_S_mass_lt = 0.0f; + + /* speech/music classification */ + set_s( hSpMusClas->lt_old_mode, 1, 3 ); + hSpMusClas->lt_voicing = 0.5f; + hSpMusClas->lt_corr = 0.5f; + hSpMusClas->lt_tonality = 0; + set_s( hSpMusClas->lt_corr_pitch, 0, 3 ); + hSpMusClas->lt_hangover = 0; + hSpMusClas->lowrate_pitchGain = 0; + + hSpMusClas->lt_music_hangover = 0; + set_f( hSpMusClas->tonality2_buf, 0, HANG_LEN_INIT ); + set_f( hSpMusClas->tonality3_buf, 0, HANG_LEN_INIT ); + set_f( hSpMusClas->LPCErr_buf, 0, HANG_LEN_INIT ); + hSpMusClas->lt_music_state = 0; + hSpMusClas->lt_speech_state = 0; + hSpMusClas->lt_speech_hangover = 0; + + hSpMusClas->lt_dec_thres = 10.0f; + hSpMusClas->ener_RAT = 0.0f; + + hSpMusClas->high_stable_cor = 0; + set_f( hSpMusClas->var_cor_t, 0.0f, VAR_COR_LEN ); + + hSpMusClas->lps = 0.0f; + hSpMusClas->lpm = 0.0f; + hSpMusClas->lpn = 0.0f; + + return; +} + + +/*---------------------------------------------------------------------* + * speech_music_classif() + * + * Speech/music classification + * + * The following technologies are used based on the outcome of the sp/mus classifier + * sp_aud_decision1 sp_aud_decision2 + * 0 0 use ACELP (+TD BWE) + * 1 0 use ACELP (+FD BWE) or HQ/LR-MDCT depending on bitrate + * 1 1 use GSC (+FD BWE) or HQ/LR-MDCT depending on bitrate + * + * 0 1 exceptionally use GSC (+FD BWE) instead of LR-MDCT at 13.2 kbps (WB/SWB) for sparse spectra + *---------------------------------------------------------------------*/ + +/*! r: 1st stage decision (1-music, 0-speech or noise) */ +void speech_music_classif( + Encoder_State *st, /* i/o: state structure */ + const float *new_inp, /* i : new input signal */ + const float *inp, /* i : input signal to locate attach position */ + const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ + const float lsp_new[M], /* i : LSPs in current frame */ + const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ + const float epsP[M + 1], /* i : LP prediciton error */ + const float PS[], /* i : energy spectrum */ + const float Etot, /* i : total frame energy */ + const float old_cor, /* i : max correlation from previous frame */ + int16_t *attack_flag, /* o : attack flag (GSC or TC) */ + const float non_sta, /* i : unbound non-stationarity for sp/mus classifier */ + const float relE, /* i : relative frame energy */ + int16_t *high_lpn_flag, /* o : sp/mus LPN flag */ + const int16_t flag_spitch /* i : flag to indicate very short stable pitch */ +) +{ + float voi_fv, cor_map_sum_fv, LPCErr; + + /* 1st stage speech/music classification based on the GMM model */ + st->sp_aud_decision1 = sp_mus_classif_1st( st, localVAD_HE_SAD, lsp_new, cor_map_sum, epsP, PS, non_sta, relE, &voi_fv, &cor_map_sum_fv, &LPCErr, high_lpn_flag ); + + if ( st->codec_mode == MODE1 || st->sr_core == INT_FS_12k8 ) + { + + /* Improvement of the 1st stage decision for mixed/music content */ + if ( !st->Opt_SC_VBR && ( st->total_brate != ACELP_24k40 ) ) + { + music_mixed_classif_improv( st, new_inp, epsP, Etot, old_cor, cor_map_sum ); + } + + st->sp_aud_decision0 = st->sp_aud_decision1; + + /* 2nd stage speech/music classification (rewrite music to speech in onsets) */ + st->sp_aud_decision2 = st->sp_aud_decision1; + + if ( st->bwidth > NB ) + { + sp_mus_classif_2nd( st, Etot, attack_flag, inp ); + + if ( flag_spitch && st->bwidth == WB && st->total_brate < ACELP_13k20 ) + { + /* avoid switch to AUDIO/MUSIC class for very short stable high pitch + and/or stable pitch with high correlation at low bitrates*/ + st->sp_aud_decision2 = 0; + } + } + + /* Context-based improvement of 1st and 2nd stage decision on stable tonal signals */ + if ( !st->Opt_SC_VBR && st->total_brate != ACELP_24k40 ) + { + tonal_context_improv( st, PS, voi_fv, cor_map_sum_fv, LPCErr ); + } + + /* Avoid using LR-MDCT on sparse spectra, use GSC instead at 13.2 kbps (WB/SWB) */ + if ( !st->Opt_SC_VBR && st->total_brate == ACELP_13k20 && st->vad_flag == 1 && ( st->bwidth == WB || st->bwidth == SWB ) ) + { + detect_sparseness( st, localVAD_HE_SAD, voi_fv ); + } + + /* override speech/music classification to ACELP when background noise level reaches certain level */ + /* this is a patch against mis-classifications during active noisy speech segments */ + if ( st->lp_noise > 12.0f ) + { + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + } + + /* set GSC noisy speech flag on unvoiced SWB segments */ + st->GSC_noisy_speech = 0; + if ( st->vad_flag == 1 && st->total_brate >= ACELP_13k20 && st->total_brate < ACELP_24k40 && + st->lp_noise > 12.0f && st->sp_aud_decision1 == 0 && st->bwidth >= SWB && + st->coder_type_raw == UNVOICED ) + { + st->GSC_noisy_speech = 1; + } + + /* Select AUDIO frames */ +#ifdef DEBUGGING + if ( st->codec_mode == MODE1 && ( st->force == 1 || ( st->force == -1 && ( st->sp_aud_decision2 || st->GSC_noisy_speech ) ) ) ) +#else + if ( st->codec_mode == MODE1 && ( st->sp_aud_decision2 || st->GSC_noisy_speech ) ) +#endif + { + st->coder_type = AUDIO; + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; + } + } + else + { + st->sp_aud_decision0 = st->sp_aud_decision1; + } + + + return; +} + + +/*---------------------------------------------------------------------* + * sp_mus_classif_1st() + * + * 1st stage speech/music classification (based on the GMM model) + *---------------------------------------------------------------------*/ + +/*! r: decision flag (1-music, 0-speech or noise) */ +static int16_t sp_mus_classif_1st( + Encoder_State *st, /* i/o: state structure */ + const int16_t localVAD_HE_SAD, /* i : local VAD HE flag */ + const float lsp_new[M], /* i : LSPs in current frame */ + const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ + const float epsP[M + 1], /* i : LP prediciton error */ + const float PS[], /* i : energy spectrum */ + float non_sta, /* i : unbound non-stationarity */ + float relE, /* i : relative frame energy */ + float *voi_fv, /* o : scaled voicing feature */ + float *cor_map_sum_fv, /* o : scaled correlation map feature */ + float *LPCErr, /* o : scaled LP prediction error feature */ + int16_t *high_lpn_flag /* o : sp/mus LPN flag */ +) +{ + int16_t i, k, p, dec, vad; + float dlp, ftmp, lepsP1, sum_PS, ps_diff, ps_sta, wrelE, wdrop, wght, mx; + float FV[N_FEATURES], *pFV = FV, PS_norm[128], dPS[128], lsp[M]; + float pys, pym, xm[N_FEATURES], py, lps = 0, lpm = 0; + const float *pSF; + float pyn, lpn = 0; + + SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + vad = localVAD_HE_SAD; + + /*------------------------------------------------------------------* + * Preparation of the feature vector + *------------------------------------------------------------------*/ + + /* [0] OL pitch */ + if ( st->tc_cnt == 1 || st->tc_cnt == 2 ) + { + *pFV++ = (float) st->pitch[2]; + } + else + { + *pFV++ = (float) ( st->pitch[0] + st->pitch[1] + st->pitch[2] ) / 3.0f; + } + + /* [1] voicing */ + if ( st->tc_cnt == 1 || st->tc_cnt == 2 ) + { + *pFV++ = st->voicing[2]; + } + else + { + *pFV++ = (float) ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3.0f; + } + + /* [2,3,4,5,6] LSFs */ + mvr2r( lsp_new, lsp, M ); + + ftmp = (float) acos( lsp[1] ); + *pFV++ = ftmp + hSpMusClas->last_lsp[1]; + hSpMusClas->last_lsp[1] = ftmp; + + ftmp = (float) acos( lsp[2] ); + *pFV++ = ftmp + hSpMusClas->last_lsp[2]; + hSpMusClas->last_lsp[2] = ftmp; + + ftmp = (float) acos( lsp[3] ); + *pFV++ = ftmp + hSpMusClas->last_lsp[3]; + hSpMusClas->last_lsp[3] = ftmp; + + ftmp = (float) acos( lsp[4] ); + *pFV++ = ftmp + hSpMusClas->last_lsp[4]; + hSpMusClas->last_lsp[4] = ftmp; + + ftmp = (float) acos( lsp[5] ); + *pFV++ = ftmp + hSpMusClas->last_lsp[5]; + hSpMusClas->last_lsp[5] = ftmp; + + /* [7] cor_map_sum */ + *pFV++ = cor_map_sum + hSpMusClas->last_cor_map_sum; + hSpMusClas->last_cor_map_sum = cor_map_sum; + + /* [8] non_sta */ + *pFV++ = non_sta + hSpMusClas->last_non_sta; + hSpMusClas->last_non_sta = non_sta; + + /* [9] epsP */ + if ( st->bwidth == NB ) + { + /* do not take into account (statistics are too different) */ + *pFV++ = -1.647f; + } + else + { + lepsP1 = logf( epsP[1] + 1e-5f ); + ftmp = logf( epsP[13] ) - lepsP1; + *pFV++ = ftmp + hSpMusClas->past_epsP2; + hSpMusClas->past_epsP2 = ftmp; + } + + /* calculation of differential normalized power spectrum */ + sum_PS = 1e-5f; + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + sum_PS += PS[i]; + } + + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + PS_norm[i] = PS[i] / sum_PS; + dPS[i] = fabsf( PS_norm[i] - hSpMusClas->past_PS[i - LOWEST_FBIN] ); + } + + /* [10] ps_diff (spectral difference) */ + ps_diff = 0; + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + ps_diff += dPS[i]; + } + + ps_diff = logf( ps_diff + 1e-5f ); + *pFV++ = ps_diff + hSpMusClas->past_ps_diff; + hSpMusClas->past_ps_diff = ps_diff; + + /* [11] ps_sta (spectral stationarity) */ + ps_sta = 0; + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + mx = PS_norm[i] > hSpMusClas->past_PS[i - LOWEST_FBIN] ? PS_norm[i] : hSpMusClas->past_PS[i - LOWEST_FBIN]; + ps_sta += mx / ( dPS[i] + 1e-5f ); + } + + *pFV++ = logf( ps_sta + 1e-5f ); + mvr2r( &PS_norm[LOWEST_FBIN], hSpMusClas->past_PS, HIGHEST_FBIN - LOWEST_FBIN ); + + /*------------------------------------------------------------------* + * Scaling of the feature vector + *------------------------------------------------------------------*/ + + pFV = FV; + if ( st->bwidth == NB ) + { + pSF = SF_8k; + } + else + { + pSF = SF; + } + + for ( i = 0; i < N_FEATURES; i++, pFV++, pSF += 2 ) + { + *pFV = pSF[0] * *pFV + pSF[1]; + } + + /* store some scaled parameters for later correction of the 1st stage speech/music classification */ + *voi_fv = FV[1]; + *cor_map_sum_fv = FV[7]; + *LPCErr = FV[9]; + + /*------------------------------------------------------------------* + * Calculation of posterior probability + * Log-probability + *------------------------------------------------------------------*/ + + pys = pym = pyn = 1e-5f; + + /* run loop for all mixtures (for each mixture, calculate the probability of speech or noise and the probability of music) */ + for ( k = 0; k < N_MIXTURES; k++ ) + { + /* active frames - calculate the probability of speech */ + for ( p = 0; p < N_FEATURES; p++ ) + { + xm[p] = FV[p] - m_speech[k * N_FEATURES + p]; + } + + py = lvm_speech[k] + dot_product_mat( xm, &invV_speech[k * N_FEATURES * N_FEATURES], N_FEATURES ); + pys += expf( py ); + /* inactive frames - calculate the probability of noise */ + for ( p = 0; p < N_FEATURES; p++ ) + { + xm[p] = FV[p] - m_noise[k * N_FEATURES + p]; + } + + py = lvm_noise[k] + dot_product_mat( xm, &invV_noise[k * N_FEATURES * N_FEATURES], N_FEATURES ); + pyn += expf( py ); + + /* either active or inactive frames - calculate the probability of music */ + for ( p = 0; p < N_FEATURES; p++ ) + { + xm[p] = FV[p] - m_music[k * N_FEATURES + p]; + } + + py = lvm_music[k] + dot_product_mat( xm, &invV_music[k * N_FEATURES * N_FEATURES], N_FEATURES ); + pym += expf( py ); + } + + /* calculate log-probability */ + lps = logf( pys ) - 0.5f * N_FEATURES * logf( PI2 ); + lpm = logf( pym ) - 0.5f * N_FEATURES * logf( PI2 ); + lpn = logf( pyn ) - 0.5f * N_FEATURES * logf( PI2 ); + + *high_lpn_flag = 0; + if ( lpn > lps && lpn > lpm ) + { + *high_lpn_flag = 1; + } + + if ( !vad ) + { + /* artificially increase log-probability of noise */ + lps = lpn * 1.2f; + } + + hSpMusClas->lpm = lpm; + hSpMusClas->lps = lps; + + /* determine HQ Generic speech class */ + if ( st->hHQ_core != NULL ) + { + if ( lps > lpm + 0.5f ) + { + st->hHQ_core->hq_generic_speech_class = 1; + } + else + { + st->hHQ_core->hq_generic_speech_class = 0; + } + } + + /*------------------------------------------------------------------* + * State machine (sp_mus_state < 0 .. inactive, > 0 .. entry, = 0 .. active ) + *------------------------------------------------------------------*/ + + if ( vad ) + { + if ( relE < -20 || ( lps <= -5 && lpm <= -5 ) ) + { + if ( hSpMusClas->sp_mus_state > 0 ) + { + if ( hSpMusClas->sp_mus_state < HANG_LEN ) + { + /* energy is too low but we are in entry period -> reset the inactive counter to allow new entry later */ + hSpMusClas->inact_cnt = 0; + } + + /* energy is too low -> we are going to instable state */ + hSpMusClas->sp_mus_state = 0; + } + else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) + { + /* energy is still too low -> we are still in instable state */ + hSpMusClas->sp_mus_state--; + } + } + else if ( hSpMusClas->sp_mus_state <= 0 ) + { + if ( hSpMusClas->inact_cnt == 0 ) + { + + hSpMusClas->sp_mus_state = 1; + } + else + { + + hSpMusClas->sp_mus_state = HANG_LEN; + } + + hSpMusClas->inact_cnt = 12; + } + else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + /* we are inside an entry period -> increment the counter of entry frames */ + hSpMusClas->sp_mus_state++; + } + + if ( hSpMusClas->sp_mus_state < 0 && hSpMusClas->inact_cnt > 0 ) + { + hSpMusClas->inact_cnt--; + } + } + else + { + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + hSpMusClas->inact_cnt = 0; + } + else if ( hSpMusClas->inact_cnt > 0 ) + { + hSpMusClas->inact_cnt--; + } + + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + hSpMusClas->sp_mus_state = -HANG_LEN; + } + else if ( hSpMusClas->sp_mus_state > 0 ) + { + hSpMusClas->sp_mus_state = -1; + } + else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) + { + /* we are in inactive state */ + hSpMusClas->sp_mus_state--; + } + } + + /*------------------------------------------------------------------* + * Decision without hangover + * Weighted decision + *------------------------------------------------------------------*/ + + /* decision without hangover (0 - speech/noise, 1 - music) */ + dec = lpm > lps; + dlp = lpm - lps; + + if ( !vad ) + { + dec = 0; + dlp = 0; + } + + /* calculate weight based on relE (close to 0.01 in low-E regions, close to 1 in high-E regions) */ + wrelE = 1.0f + relE / 15; + + if ( wrelE > 1.0f ) + { + wrelE = 1.0f; + } + else if ( wrelE < 0.01f ) + { + wrelE = 0.01f; + } + + /* calculate weight based on drops of dlp (close to 1 during sudden drops of dlp, close to 0 otherwise) */ + if ( dlp < 0 && dlp < hSpMusClas->past_dlp[0] ) + { + if ( hSpMusClas->past_dlp[0] > 0 ) + { + hSpMusClas->wdrop = -dlp; + } + else + { + hSpMusClas->wdrop += hSpMusClas->past_dlp[0] - dlp; + } + } + else + { + hSpMusClas->wdrop = 0; + } + + wdrop = hSpMusClas->wdrop / 20; + + if ( wdrop > 1.0f ) + { + wdrop = 1.0f; + } + else if ( wdrop < 0.1f ) + { + wdrop = 0.1f; + } + + /* combine weights into one */ + wght = wrelE * wdrop; + if ( wght < 0.01f ) + { + wght = 0.01f; + } + + /* calculate weighted decision */ + hSpMusClas->wdlp_0_95_sp = wght * dlp + ( 1 - wght ) * hSpMusClas->wdlp_0_95_sp; + + if ( hSpMusClas->sp_mus_state == -HANG_LEN ) + { + hSpMusClas->wdlp_0_95_sp = 0; + } + + /*------------------------------------------------------------------* + * Final speech/music decision + *------------------------------------------------------------------*/ + + if ( !vad && hSpMusClas->sp_mus_state == -HANG_LEN ) + { + /* inactive state */ + dec = 0; + } + else if ( hSpMusClas->sp_mus_state <= 0 ) + { + /* transition from active to inactive state or instable state */ + dec = hSpMusClas->past_dec[0]; + } + else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + /* entry state -> final decision is calculated based on weighted average of past non-binary decisions */ + ftmp = w_spmus[hSpMusClas->sp_mus_state - 1][0] * dlp; + ftmp += dotp( &w_spmus[hSpMusClas->sp_mus_state - 1][1], hSpMusClas->past_dlp, HANG_LEN - 1 ); + dec = ftmp > 2.0f; + } + else + { + /* stable active state */ + if ( hSpMusClas->wdlp_0_95_sp > 0 && hSpMusClas->past_dec[0] == 0 && hSpMusClas->past_dec[1] == 0 && hSpMusClas->past_dec[2] == 0 ) + { + /* switching from speech to music */ + dec = 1; + } + else if ( hSpMusClas->past_dec[0] == 1 && hSpMusClas->wdlp_0_95_sp < 0 ) + { + /* switching from music to speech */ + dec = 0; + } + else + { + dec = hSpMusClas->past_dec[0]; + } + } + + /*------------------------------------------------------------------* + * Updates + *------------------------------------------------------------------*/ + + /* update buffer of past non-binary decisions */ + mvr2r( &hSpMusClas->past_dlp[0], &hSpMusClas->past_dlp[1], HANG_LEN - 2 ); + hSpMusClas->past_dlp[0] = dlp; + + /* update buffer of past binary decisions */ + mvs2s( &hSpMusClas->past_dec[0], &hSpMusClas->past_dec[1], HANG_LEN - 2 ); + hSpMusClas->past_dec[0] = dec; + + return dec; +} + + +/*---------------------------------------------------------------------* + * sp_mus_classif_2nd() + * + * 2nd stage speech/music classifier (convert music to speech for onsets) + *---------------------------------------------------------------------*/ + +static void sp_mus_classif_2nd( + Encoder_State *st, /* i/o: encoder state structure */ + const float Etot, /* i : total frame energy */ + int16_t *attack_flag, /* i/o: attack flag (GSC or TC) */ + const float *inp /* i : input signal */ +) +{ + int16_t attack; + SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; + + /* initialization */ + *attack_flag = 0; + + /* signal stability estimation */ + stab_est( Etot, hSpMusClas->gsc_lt_diff_etot, &hSpMusClas->gsc_mem_etot, &hSpMusClas->gsc_nb_thr_3, &hSpMusClas->gsc_nb_thr_1, hSpMusClas->gsc_thres, &hSpMusClas->gsc_last_music_flag, st->vad_flag ); + + /* calculate variance of correlation */ + var_cor_calc( st->old_corr, &hSpMusClas->mold_corr, hSpMusClas->var_cor_t, &hSpMusClas->high_stable_cor ); + + /* attack detection */ + attack = attack_det( inp, st->clas, st->localVAD, st->coder_type, st->total_brate, EVS_MONO, st->clas, hSpMusClas->finc_prev, &hSpMusClas->lt_finc, &hSpMusClas->last_strong_attack ); + + /* change decision from music to speech in certain special cases */ + if ( st->sp_aud_decision1 == 1 ) + { + if ( hSpMusClas->ener_RAT < 0.18f && hSpMusClas->lt_dec_thres > 15.0f ) + { + /* strong music decision but almost no content below 1kHz */ + st->sp_aud_decision2 = 0; + } + else if ( hSpMusClas->high_stable_cor && st->pitch[0] >= 130 ) + { + /* prevent GSC in highly correlated signal with low energy variation */ + /* this is basically a patch against bassoon-type of music */ + st->sp_aud_decision2 = 0; + + if ( st->codec_mode == MODE1 && st->coder_type == TRANSITION ) + { + st->coder_type = GENERIC; + } + } + else if ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] > 4.5f && ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] - hSpMusClas->gsc_lt_diff_etot[MAX_LT - 2] > 10.0f ) ) + { + if ( st->tc_cnt == 1 ) + { + /* do TC coding instead of GC/VC if onset has been already declared before */ + st->sp_aud_decision2 = 0; + + if ( st->codec_mode == MODE1 ) + { + st->coder_type = TRANSITION; + } + } + else + { + if ( attack >= ATT_3LSUB_POS ) + { + /* do TC coding if attack is located in the last subframe */ + st->sp_aud_decision2 = 0; + *attack_flag = attack + 1; + + if ( st->codec_mode == MODE1 ) + { + st->coder_type = TRANSITION; + } + } + else if ( attack >= ATT_SEG_LEN / 2 ) + { + /* do GSC coding if attack is located after the first quarter of the first subframe */ + /* (pre-echo will be treated at the decoder side) */ + st->sp_aud_decision2 = 1; + *attack_flag = 31; + } + } + } + } + else if ( st->localVAD == 1 && st->coder_type == GENERIC && ( ( attack >= ATT_3LSUB_POS && st->total_brate < ACELP_24k40 ) || ( attack >= ATT_3LSUB_POS_16k && st->total_brate >= ACELP_24k40 && st->total_brate < ACELP_48k ) ) ) + { + /* do TC coding if attack is located in the last subframe */ + *attack_flag = attack + 1; + + if ( st->codec_mode == MODE1 ) + { + st->coder_type = TRANSITION; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * tonal_det() + * + * Tonal detector based on spectral stability and harmonicity + *---------------------------------------------------------------------*/ + +static float tonal_det( + const float S[], + int16_t vad_flag, + float tod_S_map_lt[], + float *tod_thr_lt, + float *tod_weight, + float *tod_S_mass_prev, + float *tod_S_mass_lt ) +{ + int16_t i; + float S_mass, alpha; + + /* update the adaptive weight */ + *tod_weight = TON_ALPHA * *tod_weight + ( 1 - TON_ALPHA ) * vad_flag; + if ( *tod_weight > TON_ALPHA ) + { + *tod_weight = TON_ALPHA; + } + else if ( *tod_weight < ( 1 - TON_ALPHA ) ) + { + *tod_weight = 1 - TON_ALPHA; + } + + /* calculate LT spectral correlation in each band up to 4KHz */ + S_mass = 0.0f; + for ( i = 0; i < TOD_NSPEC; i++ ) + { + tod_S_map_lt[i] = *tod_weight * tod_S_map_lt[i] + ( 1 - *tod_weight ) * S[i]; + + S_mass += tod_S_map_lt[i]; + } + S_mass /= TOD_NSPEC; + + if ( S_mass > *tod_S_mass_prev ) + { + alpha = 0.7f; + } + else + { + alpha = 0.3f; + } + *tod_S_mass_prev = S_mass; + *tod_S_mass_lt = alpha * *tod_S_mass_lt + ( 1 - alpha ) * S_mass; + S_mass = *tod_S_mass_lt; + + /* updating adaptive decision threshold */ + if ( S_mass > *tod_thr_lt ) + { + *tod_thr_lt -= THR_MASS_STEP_DN; + } + else + { + *tod_thr_lt += THR_MASS_STEP_UP; + } + + if ( *tod_thr_lt > THR_MASS_MAX ) + { + *tod_thr_lt = THR_MASS_MAX; + } + + if ( *tod_thr_lt < THR_MASS_MIN ) + { + *tod_thr_lt = THR_MASS_MIN; + } + + return S_mass; +} + +/*---------------------------------------------------------------------* + * var_cor_calc() + * + * Calculate variance of correlation + *---------------------------------------------------------------------*/ + +static void var_cor_calc( + const float old_corr, + float *mold_corr, + float var_cor_t[], + int16_t *high_stable_cor ) +{ + int16_t i; + float var_cor; + + /* update buffer of old correlation values */ + for ( i = VAR_COR_LEN - 1; i > 0; i-- ) + { + var_cor_t[i] = var_cor_t[i - 1]; + } + var_cor_t[i] = old_corr; + + /* calculate variance of correlation */ + var_cor = var( var_cor_t, VAR_COR_LEN ); + + /* set flag in case of highly-correlated stable signal */ + if ( *mold_corr > 0.8f && var_cor < 5e-4f ) + { + *high_stable_cor = 1; + } + else + { + *high_stable_cor = 0; + } + + /* update average correlation */ + *mold_corr = 0.1f * old_corr + 0.9f * *mold_corr; + + return; +} + +/*---------------------------------------------------------------------* + * attack_det() + * + * Attack detection + *---------------------------------------------------------------------*/ + +static int16_t attack_det( + const float *inp, /* i : input signal */ + const int16_t last_clas, /* i : last signal clas */ + const int16_t localVAD, /* i : local VAD flag */ + const int16_t coder_type, /* i : coder type */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t element_mode, /* i : IVAS element mode */ + const int16_t clas, /* i : signal class */ + float finc_prev[], /* i/o: previous finc */ + float *lt_finc, /* i/o: long-term mean finc */ + int16_t *last_strong_attack /* i/o: last strong attack flag */ +) +{ + int16_t i, attack; + float etmp, etmp2, finc[ATT_NSEG]; + int16_t att_3lsub_pos; + int16_t attack1; + + att_3lsub_pos = ATT_3LSUB_POS; + if ( total_brate >= ACELP_24k40 ) + { + att_3lsub_pos = ATT_3LSUB_POS_16k; + } + + /* compute energy per section */ + for ( i = 0; i < ATT_NSEG; i++ ) + { + finc[i] = sum2_f( inp + i * ATT_SEG_LEN, ATT_SEG_LEN ); + } + + attack = maximum( finc, ATT_NSEG, &etmp ); + attack1 = attack; + + if ( localVAD == 1 && coder_type == GENERIC ) + { + /* compute mean energy in the first three subframes */ + etmp = mean( finc, att_3lsub_pos ); + + /* compute mean energy after the attack */ + etmp2 = mean( finc + attack, ATT_NSEG - attack ); + + /* and compare them */ + if ( etmp * 8 > etmp2 ) + { + /* stop, if the attack is not sufficiently strong */ + attack = 0; + } + + if ( last_clas == VOICED_CLAS && etmp * 20 > etmp2 ) + { + /* stop, if the signal was voiced and the attack is not sufficiently strong */ + attack = 0; + } + + /* compare wrt. other sections (reduces miss-classification) */ + if ( attack > 0 ) + { + etmp2 = finc[attack]; + + for ( i = 2; i < att_3lsub_pos - 2; i++ ) + { + if ( finc[i] * 2.0f > etmp2 ) + { + /* stop, if the attack is not sufficiently strong */ + attack = 0; + break; + } + } + } + + if ( attack == 0 && element_mode > EVS_MONO && ( clas < VOICED_TRANSITION || clas == ONSET ) ) + { + mvr2r( finc, finc_prev, attack1 ); + + /* compute mean energy before the attack */ + etmp = mean( finc_prev, ATT_NSEG ); + + etmp2 = finc[attack1]; + + if ( ( etmp * 16 < etmp2 ) || ( etmp * 12 < etmp2 && last_clas == UNVOICED_CLAS ) ) + { + attack = attack1; + } + + if ( 20 * *lt_finc > etmp2 || *last_strong_attack ) + { + attack = 0; + } + } + + *last_strong_attack = attack; + } + + /* compare wrt. other sections (reduces miss-classification) */ + else if ( attack > 0 ) + { + for ( i = 2; i < att_3lsub_pos - 2; i++ ) + { + if ( i != attack && finc[i] * 1.3f > finc[attack] ) + { + /* stop, if the attack is not sufficiently strong */ + attack = 0; + break; + } + } + *last_strong_attack = 0; + } + + /* updates */ + mvr2r( finc, finc_prev, ATT_NSEG ); + *lt_finc = 0.95f * *lt_finc + 0.05f * mean( finc, ATT_NSEG ); + + return attack; +} + +/*---------------------------------------------------------------------* + * ivas_smc_gmm() + * + * 1st stage of the speech/music classification (based on the GMM model) + *---------------------------------------------------------------------*/ + +/*! r: S/M decision (0=speech or noise,1=unclear,2=music) */ +int16_t ivas_smc_gmm( + Encoder_State *st, /* i/o: state structure */ + STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ + const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ + const float Etot, /* i : total frame energy */ + const float lsp_new[M], /* i : LSPs in current frame */ + const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ + const float epsP[M + 1], /* i : LP prediciton error */ + const float PS[], /* i : energy spectrum */ + const float non_sta, /* i : unbound non-stationarity */ + const float relE, /* i : relative frame energy */ + int16_t *high_lpn_flag, /* i/o: sp/mus LPN flag */ + const int16_t flag_spitch /* i : flag to indicate very short stable pitch */ +) +{ + int16_t i, m, dec; + int16_t flag_odv; + float lps, lpm, lpn; + float ps[N_SMC_MIXTURES], pm[N_SMC_MIXTURES], pn[N_SMC_MIXTURES]; + float fvm[N_PCA_COEF], lprob; + float dlp, ftmp, sum_PS, ps_diff, ps_sta, wrelE, wdrop, wght; + float wrise; + float dlp_mean2var; + float FV[N_SMC_FEATURES], *pFV, PS_norm[128], dPS[128]; + const float *pODV; + float *pFV_st, smc_st_mean_fact; + int16_t relE_attack_flag; + int16_t j, len; + const float *pt_mel_fb; + float melS[NB_MEL_BANDS], mfcc[NB_MEL_BANDS]; + int16_t odv_cnt; + int16_t i_out[N_SMC_FEATURES], *p_out; + + /*------------------------------------------------------------------* + * Initialization + *------------------------------------------------------------------*/ + + SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; + + /*------------------------------------------------------------------* + * State machine (sp_mus_state: -8 = INACTIVE, -7:-1 = UNSTABLE, 0:7 = ENTRY, 8 = STABLE ) + *------------------------------------------------------------------*/ + + if ( localVAD_HE_SAD ) + { + if ( relE < -20 ) + { + if ( hSpMusClas->sp_mus_state > 0 ) + { + if ( hSpMusClas->sp_mus_state < HANG_LEN ) + { + /* energy is too low but we are in entry period -> reset the inactive counter to allow new entry later */ + hSpMusClas->inact_cnt = 0; + } + + /* energy is too low -> we are going to instable state */ + hSpMusClas->sp_mus_state = 0; + } + else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) + { + /* energy is still too low -> we are still in instable state */ + hSpMusClas->sp_mus_state--; + } + } + else if ( hSpMusClas->sp_mus_state <= 0 ) + { + if ( hSpMusClas->inact_cnt == 0 ) + { + + hSpMusClas->sp_mus_state = 1; + } + else + { + + hSpMusClas->sp_mus_state = HANG_LEN; + } + + hSpMusClas->inact_cnt = 12; + } + else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + /* we are inside an entry period -> increment the counter of entry frames */ + hSpMusClas->sp_mus_state++; + } + + if ( hSpMusClas->sp_mus_state < 0 && hSpMusClas->inact_cnt > 0 ) + { + hSpMusClas->inact_cnt--; + } + } + else + { + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + hSpMusClas->inact_cnt = 0; + } + else if ( hSpMusClas->inact_cnt > 0 ) + { + hSpMusClas->inact_cnt--; + } + + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + hSpMusClas->sp_mus_state = -HANG_LEN; + } + else if ( hSpMusClas->sp_mus_state > 0 ) + { + hSpMusClas->sp_mus_state = -1; + } + else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) + { + /* we are in inactive state */ + hSpMusClas->sp_mus_state--; + } + } + + /* detect attacks based on relE */ + if ( relE > hSpMusClas->prev_relE ) + { + hSpMusClas->relE_attack_sum += relE - hSpMusClas->prev_relE; + } + else + { + hSpMusClas->relE_attack_sum = 0; + } + hSpMusClas->prev_relE = relE; + + /* update counter from last VAD 0->1 change */ + if ( hSpMusClas->prev_vad == 0 && localVAD_HE_SAD == 1 ) + { + hSpMusClas->vad_0_1_cnt = 1; + } + else if ( localVAD_HE_SAD == 1 && hSpMusClas->vad_0_1_cnt > 0 && hSpMusClas->vad_0_1_cnt < 50 ) + { + hSpMusClas->vad_0_1_cnt++; + } + else + { + hSpMusClas->vad_0_1_cnt = 0; + } + hSpMusClas->prev_vad = localVAD_HE_SAD; + + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN && hSpMusClas->relE_attack_sum > 5.0f ) + { + hSpMusClas->relE_attack_cnt++; + + /* set flag only in the first X frames in a series */ + if ( hSpMusClas->relE_attack_cnt > 0 && hSpMusClas->relE_attack_cnt < 3 ) + { + relE_attack_flag = 1; + } + else + { + relE_attack_flag = 0; + } + } + else + { + hSpMusClas->relE_attack_cnt = 0; + relE_attack_flag = 0; + } + + hSpMusClas->prev_Etot = Etot; + + /*------------------------------------------------------------------* + * Preparation of the feature vector + *------------------------------------------------------------------*/ + + pFV = FV; + + /* [0] OL pitch */ + if ( relE_attack_flag || st->tc_cnt == 1 || st->tc_cnt == 2 ) + { + *pFV++ = (float) st->pitch[2]; + } + else + { + *pFV++ = (float) ( st->pitch[0] + st->pitch[1] + st->pitch[2] ) / 3.0f; + } + + /* [1] voicing */ + if ( relE_attack_flag || st->tc_cnt == 1 || st->tc_cnt == 2 ) + { + *pFV++ = st->voicing[2]; + } + else + { + *pFV++ = ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3.0f; + } + + /* [2,3,4,5,6] LSFs */ + *pFV++ = acosf( lsp_new[2] ); + *pFV++ = acosf( lsp_new[3] ); + *pFV++ = acosf( lsp_new[4] ); + *pFV++ = acosf( lsp_new[5] ); + *pFV++ = acosf( lsp_new[6] ); + + /* [7] cor_map_sum */ + *pFV++ = cor_map_sum; + + /* [8] non_sta */ + *pFV++ = non_sta; + + /* [9] epsP */ + *pFV++ = logf( epsP[14] + 1e-5f ) - logf( epsP[0] + 1e-5f ); + + /* [10,11,12] MFCCs */ + set_zero( melS, NB_MEL_BANDS ); + pt_mel_fb = mel_fb; + for ( i = 0; i < NB_MEL_BANDS; i++ ) + { + j = mel_fb_start[i]; + len = mel_fb_len[i]; + melS[i] = logf( dotp( &PS[j], pt_mel_fb, len ) + 1e-5f ); + pt_mel_fb += len; + } + + v_mult_mat( mfcc, melS, dct_mtx, NB_MEL_BANDS, NB_MEL_COEF ); + + *pFV++ = mfcc[2]; + *pFV++ = mfcc[6]; + *pFV++ = mfcc[12]; + + /* calculation of differential normalized power spectrum */ + sum_PS = 1e-5f; + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + sum_PS += PS[i]; + } + + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + PS_norm[i] = PS[i] / sum_PS; + dPS[i] = fabsf( PS_norm[i] - hSpMusClas->past_PS[i - LOWEST_FBIN] ); + } + + /* [13] ps_diff (spectral difference) */ + ps_diff = 0; + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + ps_diff += dPS[i]; + } + + *pFV++ = ps_diff; + + /* [14] ps_sta (spectral stationarity) */ + ps_sta = 0; + for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) + { + if ( PS_norm[i] > hSpMusClas->past_PS[i - LOWEST_FBIN] ) + { + ps_sta += PS_norm[i] / ( dPS[i] + 1e-5f ); + } + else + { + ps_sta += hSpMusClas->past_PS[i - LOWEST_FBIN] / ( dPS[i] + 1e-5f ); + } + } + + *pFV++ = logf( ps_sta + 1e-5f ); + mvr2r( &PS_norm[LOWEST_FBIN], hSpMusClas->past_PS, HIGHEST_FBIN - LOWEST_FBIN ); + + /* save ps_diff and ps_sta features for XTALK and UNCLR classifier */ + if ( hStereoClassif != NULL ) + { + if ( st->idchan == 0 ) + { + hStereoClassif->ps_diff_ch1 = ps_diff; + hStereoClassif->ps_sta_ch1 = logf( ps_sta + 1e-5f ); + } + else + { + hStereoClassif->ps_diff_ch2 = ps_diff; + hStereoClassif->ps_sta_ch2 = logf( ps_sta + 1e-5f ); + } + } + + /*------------------------------------------------------------------* + * Outlier detection based on feature histograms + *------------------------------------------------------------------*/ + + flag_odv = 0; + if ( localVAD_HE_SAD ) + { + pFV = FV; + pODV = hout_intervals; + p_out = i_out; + odv_cnt = 0; + for ( i = 0; i < N_SMC_FEATURES; i++ ) + { + if ( *pFV < pODV[0] || *pFV > pODV[1] ) + { + *p_out++ = i; + odv_cnt++; + } + + pFV++; + pODV += 2; + } + + /* set outlier flag */ + if ( odv_cnt >= 2 ) + { + flag_odv = 1; + + /* replace outlying features with values from the previous frame */ + for ( i = 0; i < odv_cnt; i++ ) + { + FV[i_out[i]] = hSpMusClas->prev_FV[i_out[i]]; + } + } + } + + /*------------------------------------------------------------------* + * Adaptive short-term mean filter on feature vector + *------------------------------------------------------------------*/ + + pFV = FV; + pFV_st = hSpMusClas->FV_st; + smc_st_mean_fact = SMC_ST_MEAN_FACT; + for ( i = 0; i < N_SMC_FEATURES; i++ ) + { + *pFV_st = smc_st_mean_fact * ( *pFV_st ) + ( 1 - smc_st_mean_fact ) * ( *pFV ); + + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN && ( relE_attack_flag || flag_odv ) ) + { + /* strong attack or outlier frame during entry state -> features cannot be trusted but there is also no useful past info -> */ + /* -> do whatever you want because dlp will be reset to 0 anyway */ + pFV++; + pFV_st++; + } + else if ( hSpMusClas->sp_mus_state == HANG_LEN && ( st->tc_cnt == 1 || st->tc_cnt == 2 ) ) + { + /* energy attack in stable state -> use current features intead of the long-term average */ + pFV++; + pFV_st++; + } + else + { + *pFV++ = *pFV_st++; + } + } + + /* update */ + mvr2r( FV, hSpMusClas->prev_FV, N_SMC_FEATURES ); + + /*------------------------------------------------------------------* + * Non-linear power transformation (boxcox) on certain features + *------------------------------------------------------------------*/ + + pFV = FV; + for ( i = 0; i < N_SMC_FEATURES; i++ ) + { + if ( bcox_lmbd[i] != 0 ) + { + *pFV -= bcox_add_cnst[i]; + if ( *pFV < 1 ) + { + *pFV = 1; + } + *pFV = ( powf( *pFV, bcox_lmbd[i] ) - 1 ) / bcox_lmbd[i]; + } + + pFV++; + } + + /*------------------------------------------------------------------* + * Scaling of the feature vector + * PCA + *------------------------------------------------------------------*/ + + pFV = FV; + for ( i = 0; i < N_SMC_FEATURES; i++ ) + { + /* Standard scaler - mean and variance normalization */ + *pFV = ( *pFV - sm_means[i] ) / sm_scale[i]; + pFV++; + + /* MinMax sclaer - mean and variance normalization */ + /**pFV = *pFV * sm_scale[i] + sm_min[i];*/ + /*pFV++;*/ + } + + /* PCA */ + v_sub( FV, pca_mean_, FV, N_SMC_FEATURES ); + v_mult_mat( FV, FV, pca_components_, N_SMC_FEATURES, N_PCA_COEF ); + + /*------------------------------------------------------------------* + * Calculation of posterior probability + * Log-probability + *------------------------------------------------------------------*/ + + /* run loop for all mixtures (for each mixture, calculate the probability of speech, music and noise) */ + lps = lpm = lpn = 0; + for ( m = 0; m < N_SMC_MIXTURES; m++ ) + { + v_sub( FV, &means_speech[m * N_PCA_COEF], fvm, N_PCA_COEF ); + lprob = dot_product_cholesky( fvm, &prec_chol_speech[m * ( N_PCA_COEF * N_PCA_COEF + N_PCA_COEF ) / 2], N_PCA_COEF ); + ps[m] = logf( weights_speech[m] ) + log_det_chol_speech[m] - 0.5f * N_PCA_COEF * logf( PI2 ) - 0.5f * lprob; + + v_sub( FV, &means_music[m * N_PCA_COEF], fvm, N_PCA_COEF ); + lprob = dot_product_cholesky( fvm, &prec_chol_music[m * ( N_PCA_COEF * N_PCA_COEF + N_PCA_COEF ) / 2], N_PCA_COEF ); + pm[m] = logf( weights_music[m] ) + log_det_chol_music[m] - 0.5f * N_PCA_COEF * logf( PI2 ) - 0.5f * lprob; + + v_sub( FV, &means_noise[m * N_PCA_COEF], fvm, N_PCA_COEF ); + lprob = dot_product_cholesky( fvm, &prec_chol_noise[m * ( N_PCA_COEF * N_PCA_COEF + N_PCA_COEF ) / 2], N_PCA_COEF ); + pn[m] = logf( weights_noise[m] ) + log_det_chol_noise[m] - 0.5f * N_PCA_COEF * logf( PI2 ) - 0.5f * lprob; + } + + lps = logsumexp( ps, N_SMC_MIXTURES ); + lpm = logsumexp( pm, N_SMC_MIXTURES ); + lpn = logsumexp( pn, N_SMC_MIXTURES ); + + *high_lpn_flag = 0; + if ( lpn > lps && lpn > lpm ) + { + *high_lpn_flag = 1; + } + + hSpMusClas->lpm = lpm; + hSpMusClas->lps = lps; + hSpMusClas->lpn = lpn; + + /* determine HQ Generic speech class */ + if ( st->hHQ_core != NULL ) + { + if ( lps > lpm + 0.5f ) + { + st->hHQ_core->hq_generic_speech_class = 1; + } + else + { + st->hHQ_core->hq_generic_speech_class = 0; + } + } + + /*------------------------------------------------------------------* + * Decision without hangover + * Weighted decision + *------------------------------------------------------------------*/ + + /* decision without hangover (0 - speech/noise, 1 - music) */ + if ( !localVAD_HE_SAD || Etot < 10 || ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN && ( relE_attack_flag || flag_odv ) ) ) + { + dlp = 0; + } + else + { + dlp = lpm - lps + DLP_BIAS; + + if ( dlp > 30.0f ) + { + dlp = 30.0f; + } + else if ( dlp < -30.0f ) + { + dlp = -30.0f; + } + } + + dec = dlp > 0; + + /* calculate weight based on relE (higher relE -> lower weight, lower relE -> higher weight) */ + wrelE = lin_interp( relE, 15.0f, 0.9f, -15.0f, 0.99f, 1 ); + + /* calculate weight based on drops of dlp (close to 1 during sudden drops of dlp, close to 0 otherwise) */ + hSpMusClas->dlp_mean_ST = 0.8f * hSpMusClas->dlp_mean_ST + 0.2f * dlp; + hSpMusClas->lt_dec_thres = hSpMusClas->dlp_mean_ST; + + if ( dlp < 0 && dlp < hSpMusClas->dlp_mean_ST ) + { + if ( hSpMusClas->dlp_mean_ST > 0 ) + { + hSpMusClas->wdrop = -dlp; + } + else if ( hSpMusClas->wdrop > 0 ) + { + hSpMusClas->wdrop += hSpMusClas->dlp_mean_ST - dlp; + } + } + else + { + hSpMusClas->wdrop = 0; + } + + wdrop = lin_interp( hSpMusClas->wdrop, 15.0f, 0.7f, 0.0f, 1.0f, 1 ); + + /* calculate weight based on rises of dlp (close to 1 during sudden rise of dlp, close to 0 otherwise) */ + if ( hSpMusClas->sp_mus_state == HANG_LEN && hSpMusClas->dlp_mean_ST > 0 && hSpMusClas->dlp_mean_ST > hSpMusClas->past_dlp_mean_ST[0] ) + { + if ( hSpMusClas->past_dlp_mean_ST[0] < 0 ) + { + hSpMusClas->wrise = hSpMusClas->dlp_mean_ST; + } + else if ( hSpMusClas->wrise > 0 ) + { + hSpMusClas->wrise += hSpMusClas->dlp_mean_ST - hSpMusClas->past_dlp_mean_ST[0]; + } + } + else + { + hSpMusClas->wrise = 0; + } + + wrise = lin_interp( hSpMusClas->wrise, 5.0f, 0.95f, 0.0f, 1.0f, 1 ); + + /* combine weights into one */ + wght = wrelE * wdrop * wrise; + + /* ratio of delta means vs. delta variances */ + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + hSpMusClas->dlp_mean_LT = dlp; + hSpMusClas->dlp_var_LT = 0; + } + + hSpMusClas->dlp_mean_LT = 0.9f * hSpMusClas->dlp_mean_LT + 0.1f * dlp; + ftmp = dlp - hSpMusClas->dlp_mean_LT; + hSpMusClas->dlp_var_LT = 0.9f * hSpMusClas->dlp_var_LT + 0.1f * ( ftmp * ftmp ); + + if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + dlp_mean2var = 0; + } + else + { + dlp_mean2var = fabsf( hSpMusClas->dlp_mean_LT ) / ( sqrtf( fabsf( hSpMusClas->dlp_var_LT ) ) + 1.0f ); + } + + if ( dlp_mean2var > 15.0f ) + { + /* decrease the weight little bit when the classifier indicates "strong speech" or "strong music" */ + wght *= 0.9f; + } + + if ( wght > 1.0f ) + { + wght = 1.0f; + } + else if ( wght < 0.01f ) + { + wght = 0.01f; + } + + if ( Etot < 10 ) + { + /* silence */ + wght = 0.92f; + } + + /* calculate weighted decision */ + hSpMusClas->wdlp_0_95_sp = wght * hSpMusClas->wdlp_0_95_sp + ( 1 - wght ) * dlp; + + /* xtalk classifier: apply long hysteresis to prevent LRTD on music */ + hSpMusClas->wdlp_xtalk = 0.995f * hSpMusClas->wdlp_xtalk + 0.005f * dlp; + + /*------------------------------------------------------------------* + * Final speech/music decision + *------------------------------------------------------------------*/ + + if ( flag_spitch ) + { + hSpMusClas->flag_spitch_cnt = 5; + } + else if ( hSpMusClas->flag_spitch_cnt > 0 ) + { + hSpMusClas->flag_spitch_cnt--; + } + + if ( Etot < 10 ) + { + /* silence */ + dec = 0; + } + else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) + { + /* entry state -> final decision is calculated based on weighted average of past non-binary decisions */ + ftmp = w_spmus[hSpMusClas->sp_mus_state - 1][0] * dlp; + ftmp += dotp( &w_spmus[hSpMusClas->sp_mus_state - 1][1], hSpMusClas->past_dlp, HANG_LEN - 1 ); + if ( ftmp > 2.0f ) + { + if ( dlp > 2.0f ) + { + dec = 2; + } + else + { + dec = 1; + } + } + else + { + dec = 0; + } + } + else + { + /* stable active state */ + if ( hSpMusClas->past_dec[0] == 0 && hSpMusClas->past_dec[1] == 0 && hSpMusClas->past_dec[2] == 0 && + ( ( hSpMusClas->flag_spitch_cnt > 0 && hSpMusClas->wdlp_0_95_sp > 3.4f ) || ( hSpMusClas->flag_spitch_cnt == 0 && hSpMusClas->wdlp_0_95_sp > 2.1f ) ) ) + { + /* switching from speech to unclear */ + dec = 1; + } + else if ( hSpMusClas->past_dec[0] == 0 && hSpMusClas->vad_0_1_cnt < 50 && hSpMusClas->relE_attack_sum == 0.0f && hSpMusClas->wdlp_0_95_sp > 1.0f ) + { + /* switch from speech to unclear also during slowly rising weak music onsets */ + dec = 1; + } + else if ( hSpMusClas->past_dec[0] == 1 && hSpMusClas->wdlp_0_95_sp > 2.5f ) + { + /* switching from unclear to music */ + dec = 2; + } + else if ( hSpMusClas->past_dec[0] == 2 && hSpMusClas->past_dec[1] == 2 && hSpMusClas->past_dec[2] == 2 && hSpMusClas->wdlp_0_95_sp < -1.0f ) + { + /* switching from music to unclear */ + dec = 1; + } + else if ( hSpMusClas->past_dec[0] == 1 && hSpMusClas->wdlp_0_95_sp < -2.5f ) + { + /* switching from unclear to speech */ + dec = 0; + } + else + { + dec = hSpMusClas->past_dec[0]; + } + } + + /*------------------------------------------------------------------* + * raw S/M decision based on smoothed GMM score + *------------------------------------------------------------------*/ + + if ( dec == 0 || st->hSpMusClas->wdlp_0_95_sp <= 0 ) + { + st->sp_aud_decision0 = 0; + st->sp_aud_decision1 = 0; + } + else + { + st->sp_aud_decision0 = 1; + st->sp_aud_decision1 = 1; + } + + /*------------------------------------------------------------------* + * Updates + *------------------------------------------------------------------*/ + + /* update buffer of past non-binary decisions */ + mvr2r( &hSpMusClas->past_dlp[0], &hSpMusClas->past_dlp[1], HANG_LEN - 2 ); + hSpMusClas->past_dlp[0] = dlp; + + mvr2r( &hSpMusClas->past_dlp_mean_ST[0], &hSpMusClas->past_dlp_mean_ST[1], HANG_LEN - 2 ); + hSpMusClas->past_dlp_mean_ST[0] = hSpMusClas->dlp_mean_ST; + + /* update buffer of past binary decisions */ + mvs2s( &hSpMusClas->past_dec[0], &hSpMusClas->past_dec[1], HANG_LEN - 2 ); + hSpMusClas->past_dec[0] = dec; + +#ifdef DEBUG_MODE_INFO + dbgwrite( &st->hSpMusClas->wdlp_0_95_sp, sizeof( float ), 1, 1, "res/wdlp_0_95_sp.x" ); +#endif + + return dec; +} + +/*---------------------------------------------------------------------* + * ivas_smc_mode_selection() + * + * 2nd stage speech/music classifier (select coding mode (ACELP, GSC and TCX) based on S/M classification) + * output (sp_aud_decision1 - sp_aud_decision2 -> coding mode): + * 0 - 0 -> ACELP + * 1 - 0 -> GSC + * 1 - 1 -> TCX + *---------------------------------------------------------------------*/ + +void ivas_smc_mode_selection( + Encoder_State *st, /* i/o: encoder state structure */ + const int32_t element_brate, /* i : element bitrate */ + int16_t smc_dec, /* i : raw decision of the 1st stage classifier*/ + const float relE, /* i : relative frame energy */ + const float Etot, /* i : total frame energy */ + int16_t *attack_flag, /* i/o: attack flag (GSC or TC) */ + const float *inp, /* i : input signal */ + const float S_map[], /* i : short-term correlation map */ + const int16_t flag_spitch /* i : flag to indicate very short stable pitch*/ +) +{ + int16_t attack; + float ton; + int16_t i; + float S_p2a, S_max, S_ave; + + SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; + + /* initialization */ + *attack_flag = 0; + st->sp_aud_decision2 = 0; + + /* signal stability estimation */ + stab_est( Etot, hSpMusClas->gsc_lt_diff_etot, &hSpMusClas->gsc_mem_etot, &hSpMusClas->gsc_nb_thr_3, &hSpMusClas->gsc_nb_thr_1, hSpMusClas->gsc_thres, &hSpMusClas->gsc_last_music_flag, st->vad_flag ); + + /* calculate variance of correlation */ + var_cor_calc( st->old_corr, &hSpMusClas->mold_corr, hSpMusClas->var_cor_t, &hSpMusClas->high_stable_cor ); + + /* attack detection */ + attack = attack_det( inp, st->clas, st->localVAD, st->coder_type, 0, st->element_mode, st->clas, hSpMusClas->finc_prev, &hSpMusClas->lt_finc, &hSpMusClas->last_strong_attack ); + + /* tonal detector */ + ton = tonal_det( S_map, st->vad_flag, hSpMusClas->tod_S_map_lt, &hSpMusClas->tod_thr_lt, &hSpMusClas->tod_weight, &hSpMusClas->tod_S_mass_prev, &hSpMusClas->tod_S_mass_lt ); + + + /* calculate spectral peak-to-average ratio */ + for ( i = 0; i < TOD_NSPEC; i++ ) + { + st->hSpMusClas->tod_lt_Bin_E[i] = P2A_FACT * st->hSpMusClas->tod_lt_Bin_E[i] + ( 1 - P2A_FACT ) * st->Bin_E[i]; + } + + maximum( st->hSpMusClas->tod_lt_Bin_E, TOD_NSPEC, &S_max ); + S_ave = sum_f( st->hSpMusClas->tod_lt_Bin_E, TOD_NSPEC ) / TOD_NSPEC; + S_p2a = S_max - S_ave; + + /* initial 3-way selection of coding modes (ACELP/GSC/TCX) */ + if ( relE > -10.0f && ( S_p2a > THR_P2A || ton > hSpMusClas->tod_thr_lt ) ) + { + /* select TCX to encode extremely peaky signals or strongly tonal signals */ + st->sp_aud_decision1 = 1; + st->sp_aud_decision2 = 1; + } + else if ( smc_dec == SPEECH ) + { + /* select ACELP to encode speech */ + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + } + else if ( smc_dec == SPEECH_OR_MUSIC ) + { + /* select GSC to encode "unclear" segments (classifier's score on the borderline) */ + st->sp_aud_decision1 = 1; + st->sp_aud_decision2 = 0; + } + else + { + /* select TCX to encode music */ + st->sp_aud_decision1 = 1; + st->sp_aud_decision2 = 1; + } + + /* change decision from GSC to ACELP/TCX in some special cases */ + if ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) + { + if ( hSpMusClas->ener_RAT < 0.18f && hSpMusClas->lt_dec_thres > 15.0f ) + { + /* prevent GSC on strong music with almost no content below 1kHz */ + st->sp_aud_decision2 = 1; + } + else if ( flag_spitch ) + { + /* prevent GSC on signals with very short and stable high pitch period */ + if ( hSpMusClas->wdlp_0_95_sp < 2.5f ) + { + /* select ACELP instead */ + st->sp_aud_decision1 = 0; + } + else + { + /* select TCX instead */ + st->sp_aud_decision2 = 1; + } + } + else if ( hSpMusClas->high_stable_cor && st->pitch[0] >= 130 ) + { + /* prevent GSC in highly correlated signal with low energy variation */ + /* this is basically a patch against bassoon-type of music */ + st->sp_aud_decision2 = 1; + } + } + + /* change decision from GSC to ACELP TC during attacks/onsets */ + if ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) + { + if ( ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] > 4.5f ) && + ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] - hSpMusClas->gsc_lt_diff_etot[MAX_LT - 2] > 10.0f ) ) + { + if ( st->tc_cnt == 1 ) + { + /* do ACELP TC coding instead of GC/VC if onset has been already declared before */ + st->sp_aud_decision1 = 0; + st->coder_type = TRANSITION; + } + else + { + if ( attack >= ATT_3LSUB_POS ) + { + /* do ACELP TC coding also if attack is located in the last subframe */ + st->sp_aud_decision1 = 0; + *attack_flag = attack + 1; + st->coder_type = TRANSITION; + } + else if ( attack >= ATT_SEG_LEN / 2 ) + { + /* do GSC coding if attack is located after the first quarter of the first subframe */ + /* (pre-echo will be treated at the decoder side) */ + *attack_flag = 31; + *attack_flag = attack + 1; + } + } + } + } + + if ( st->localVAD == 1 && st->coder_type == GENERIC && attack > 0 /*&& *attack_flag < 32*/ /*&& st->tc_cnt != 2*/ && !( st->sp_aud_decision2 == 1 && ton > 0.65f ) ) + { + /* change ACELP coder_type to TC if attack has been detected */ + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + + st->coder_type = TRANSITION; + *attack_flag = attack + 1; + } + +#ifdef DEBUGGING + if ( st->idchan == 0 && st->coder_type != INACTIVE ) + { + if ( st->force == FORCE_GSC && element_brate < IVAS_24k4 ) + { + /* enforce GSC */ + st->sp_aud_decision1 = 1; + st->sp_aud_decision2 = 0; + } + else if ( st->force == FORCE_SPEECH && ( st->sp_aud_decision1 == 1 || st->sp_aud_decision2 == 1 ) ) + { + if ( element_brate < IVAS_24k4 ) + { + /* convert TCX to GSC */ + st->sp_aud_decision1 = 1; + st->sp_aud_decision2 = 0; + } + else + { + /* convert TCX to ACELP */ + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + } + } + else if ( st->force == FORCE_MUSIC ) + { + /* enforce TCX */ + st->sp_aud_decision1 = 1; + st->sp_aud_decision2 = 1; + } + } +#endif + + /* set GSC noisy speech flag on unvoiced SWB segments */ + st->GSC_noisy_speech = 0; + if ( st->vad_flag == 1 && element_brate <= IVAS_16k4 && st->lp_noise > 30.0f && st->sp_aud_decision1 == 0 && st->bwidth >= SWB && st->coder_type_raw == UNVOICED ) + { + st->GSC_noisy_speech = 1; + } + + /* set GSC submode */ + if ( st->element_mode > EVS_MONO && ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) && st->total_brate > STEREO_GSC_BIT_RATE_ALLOC ) /* below STEREO_GSC_BIT_RATE_ALLOC, fall back on normal GSC */ + { + st->GSC_IVAS_mode = 1; + if ( st->hSpMusClas->wdlp_0_95_sp > 0.0f ) + { + /* music-like content */ + st->GSC_IVAS_mode = 3; + } + else if ( st->tc_cnt > 0 ) + { + /* likely presence of an onset, GSC bit allocation will be more focused on LF */ + st->GSC_IVAS_mode = 2; + } + + if ( st->coder_type_raw == UNVOICED && st->sp_aud_decision0 == 0 /*&& st->GSC_IVAS_mode < 3*/ ) + { + st->GSC_noisy_speech = 1; + } + else + { + st->GSC_noisy_speech = 0; + } + } + + /* set coder_type to AUDIO when GSC is selected (st->core will be set later in the decision matrix) */ + if ( ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) || st->GSC_noisy_speech ) + { + st->coder_type = AUDIO; + if ( st->hGSCEnc != NULL && st->GSC_noisy_speech == 0 ) /* In case of GSC_noisy_speech, NOISE_LEVEL should remain at NOISE_LEVEL_SP3 */ + { + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; + } + } + + return; +} + + +/*------------------------------------------------------------------------* + * music_mixed_classif_improv() + * + * Improve 1st stage speech/music decision for mixed&music signals + *------------------------------------------------------------------------*/ + +static void music_mixed_classif_improv( + Encoder_State *st, /* i/o: Encoder state structure */ + const float *new_inp, /* i : new input signal */ + const float *epsP, /* i : LP prediction error */ + const float etot, /* i : total frame energy */ + const float old_cor, /* i : normalized correlation */ + const float cor_map_sum /* i : correlation map sum */ +) +{ + int16_t i, dec, len, percus_flag; + float p2v_map[128], ftmp, ftmp1, lt_diff, log_max_spl, epsP_tilt, max_spl; + + SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; + + /* find sample with maximum absolute amplitude */ + max_spl = 0; + for ( i = 0; i < L_FRAME; i++ ) + { + if ( fabs( new_inp[i] ) > max_spl ) + { + max_spl = fabsf( new_inp[i] ); + } + } + + /* music is considered only appearing in high SNR condition and active signal */ + if ( st->vad_flag == 0 || st->lp_speech - st->lp_noise < 25 ) + { + hSpMusClas->dec_mov = 0.5f; + hSpMusClas->dec_mov1 = 0.5f; + + if ( st->vad_flag == 0 ) + { + hSpMusClas->onset_cnt = 0; + } + + return; + } + + hSpMusClas->onset_cnt++; + + if ( hSpMusClas->onset_cnt > 9 ) + { + hSpMusClas->onset_cnt = 9; + } + + if ( hSpMusClas->onset_cnt == 1 ) + { + set_f( hSpMusClas->buf_flux, -100, BUF_LEN ); + } + + /* spectral analysis */ + spec_analysis( st->Bin_E, p2v_map ); + + /* percussive music detection */ + log_max_spl = 20 * logf( max_spl + 0.0001f ); + lt_diff = log_max_spl - hSpMusClas->mov_log_max_spl; + + for ( i = 0; i < 3; i++ ) + { + hSpMusClas->buf_etot[i] = hSpMusClas->buf_etot[i + 1]; + } + hSpMusClas->buf_etot[i] = etot; + + percus_flag = 0; + if ( hSpMusClas->buf_etot[1] - hSpMusClas->buf_etot[0] > 6 && hSpMusClas->buf_etot[2] < hSpMusClas->buf_etot[1] && hSpMusClas->buf_etot[1] - st->lp_speech > 3 ) + { + if ( hSpMusClas->buf_etot[1] - hSpMusClas->buf_etot[3] > 3 && hSpMusClas->buf_etot[3] < hSpMusClas->buf_etot[2] && 0.5f * ( 0.5f * ( st->voicing[0] + st->voicing[1] ) + old_cor ) < 0.75f ) + { + if ( hSpMusClas->dec_mov > 0.8f ) + { + percus_flag = 1; + } + else if ( old_cor < 0.75f && st->voicing[0] < 0.75f && st->voicing[1] < 0.75f && hSpMusClas->old_lt_diff[0] > 10 ) + { + percus_flag = 1; + } + } + } + + /* sound attack detection */ + if ( hSpMusClas->buf_etot[3] - hSpMusClas->buf_etot[2] > 6 && hSpMusClas->dec_mov > 0.9f && etot - st->lp_speech > 5 && hSpMusClas->old_lt_diff[0] > 5 ) + { + hSpMusClas->attack_hangover = 3; + } + + if ( st->voicing[0] > 0.9f && st->voicing[1] > 0.9f ) + { + if ( log_max_spl > hSpMusClas->mov_log_max_spl ) + { + hSpMusClas->mov_log_max_spl = 0.75f * hSpMusClas->mov_log_max_spl + ( 1 - 0.75f ) * log_max_spl; + } + else + { + hSpMusClas->mov_log_max_spl = 0.995f * hSpMusClas->mov_log_max_spl + ( 1 - 0.995f ) * log_max_spl; + } + } + + hSpMusClas->old_lt_diff[0] = hSpMusClas->old_lt_diff[1]; + hSpMusClas->old_lt_diff[1] = lt_diff; + + /* calculate and buffer spectral energy fluctuation */ + flux( st->Bin_E, p2v_map, hSpMusClas->old_Bin_E, hSpMusClas->buf_flux, hSpMusClas->attack_hangover, hSpMusClas->dec_mov ); + + hSpMusClas->attack_hangover--; + if ( hSpMusClas->attack_hangover < 0 ) + { + hSpMusClas->attack_hangover = 0; + } + + /* identify flux buffer status */ + len = 0; + for ( i = BUF_LEN - 1; i >= 0 && hSpMusClas->buf_flux[i] >= 0; i-- ) + { + len++; + } + + /* reset flux buffer if percussive music is detected */ + if ( percus_flag == 1 ) + { + set_f( &hSpMusClas->buf_flux[BUF_LEN - len], 5, len ); + } + + /* calculate and buffer the tilt of residual LP analysis energies */ + ftmp = 0.00001f; + ftmp1 = 0; + for ( i = 1; i < 16; i++ ) + { + ftmp += epsP[i] * epsP[i]; + ftmp1 += epsP[i] * epsP[i + 1]; + } + + epsP_tilt = ftmp1 / ftmp; + + for ( i = 0; i < BUF_LEN - 1; i++ ) + { + hSpMusClas->buf_epsP_tilt[i] = hSpMusClas->buf_epsP_tilt[i + 1]; + } + hSpMusClas->buf_epsP_tilt[i] = epsP_tilt; + + /* calculate and buffer highband spectral peakness */ + tonal_dist( p2v_map, hSpMusClas->buf_pkh, hSpMusClas->buf_Ntonal, hSpMusClas->buf_Ntonal2, hSpMusClas->buf_Ntonal_lf ); + + /* buffer sum of correlation map */ + for ( i = 0; i < BUF_LEN - 1; i++ ) + { + hSpMusClas->buf_cor_map_sum[i] = hSpMusClas->buf_cor_map_sum[i + 1]; + } + hSpMusClas->buf_cor_map_sum[i] = cor_map_sum; + + /* buffer voicing metric */ + for ( i = 0; i < 9; i++ ) + { + hSpMusClas->buf_dlp[i] = hSpMusClas->buf_dlp[i + 1]; + } + hSpMusClas->buf_dlp[i] = hSpMusClas->lps - hSpMusClas->lpm; + + /* classification */ + dec = mode_decision( st, len, &hSpMusClas->dec_mov, hSpMusClas->buf_flux, hSpMusClas->buf_epsP_tilt, hSpMusClas->buf_pkh, hSpMusClas->buf_cor_map_sum, hSpMusClas->buf_Ntonal, hSpMusClas->buf_Ntonal2, hSpMusClas->buf_Ntonal_lf, hSpMusClas->buf_dlp ); + + /* update long term moving average of the classification decisions */ + if ( len > 30 ) + { + hSpMusClas->dec_mov = 0.97f * hSpMusClas->dec_mov + ( 1 - 0.97f ) * dec; + hSpMusClas->dec_mov1 = 0.97f * hSpMusClas->dec_mov1 + ( 1 - 0.97f ) * dec; + } + + /* update long-term unvoiced counter */ + if ( ( st->coder_type_raw == UNVOICED || st->coder_type_raw == INACTIVE ) && etot > 1.5f && hSpMusClas->buf_Ntonal2[59] < 2 ) + { + hSpMusClas->UV_cnt1 -= 8; + } + else + { + hSpMusClas->UV_cnt1++; + } + + if ( hSpMusClas->UV_cnt1 > 300 ) + { + hSpMusClas->UV_cnt1 = 300; + } + else if ( hSpMusClas->UV_cnt1 < 0 ) + { + hSpMusClas->UV_cnt1 = 0; + } + + hSpMusClas->LT_UV_cnt1 = 0.9f * hSpMusClas->LT_UV_cnt1 + 0.1f * hSpMusClas->UV_cnt1; + + /* revert classification decision due to long-term unvoiced counter */ + if ( dec == 1 && hSpMusClas->dec_mov1 < 0.2f && hSpMusClas->LT_UV_cnt1 < 200 ) + { + dec = 0; + } + + /* overwrite 1st stage speech/music decision to music */ + if ( dec == 1 ) + { + st->sp_aud_decision1 = 1; + } + + return; +} + + +/*---------------------------------------------------------------------* + * spec_analysis() + * + * Spectral analysis for mixed/music classification improvement + *---------------------------------------------------------------------*/ + +static void spec_analysis( + float *Bin_E, /* i : log energy spectrum of the current frame */ + float *p2v_map /* o : spectral peakiness map */ +) +{ + int16_t i, k, m; + float peak[L_FFT / 4 + 1]; + float valley[L_FFT / 4 + 1]; + int16_t peak_idx[L_FFT / 4 + 1]; + int16_t valey_idx[L_FFT / 4 + 1]; + float p2v[L_FFT / 4 + 1]; + + /* find spectral peaks */ + k = 0; + for ( i = 1; i < L_FFT / 2 - 2; i++ ) + { + if ( Bin_E[i] > Bin_E[i - 1] && Bin_E[i] > Bin_E[i + 1] ) + { + peak[k] = Bin_E[i]; + peak_idx[k] = i; + k++; + } + } + assert( k + 1 < L_FFT / 4 + 1 ); + peak_idx[k] = -1; + peak_idx[k + 1] = -1; + + if ( k == 0 ) + { + for ( i = 0; i < L_FFT / 2 - 1; i++ ) + { + p2v_map[i] = 0; + } + + return; + } + + /* find spectral valleys */ + m = 0; + if ( Bin_E[0] < Bin_E[1] ) + { + valley[0] = Bin_E[0]; + valey_idx[0] = 0; + m++; + } + + k = L_FFT / 2 - 2; + for ( i = L_FFT / 2 - 3; i >= 0 && Bin_E[i + 1] > Bin_E[i]; i-- ) + { + k = i; + } + + for ( i = 1; i < k; i++ ) + { + if ( Bin_E[i] < Bin_E[i - 1] && Bin_E[i] < Bin_E[i + 1] ) + { + valley[m] = Bin_E[i]; + valey_idx[m] = i; + m++; + } + } + + valley[m] = Bin_E[k]; + valey_idx[m] = k; + + /* find spectral peak to valley distances */ + k = 0; + for ( i = 0; i < m; i++ ) + { + if ( peak_idx[k] > valey_idx[i] && peak_idx[k] < valey_idx[i + 1] ) + { + p2v[k] = 2 * peak[k] - valley[i] - valley[i + 1]; + k++; + } + } + + for ( i = 0; i < L_FFT / 2 - 1; i++ ) + { + p2v_map[i] = 0; + } + + for ( i = 0; i < k; i++ ) + { + p2v_map[peak_idx[i]] = p2v[i]; + } + + return; +} + +/*---------------------------------------------------------------------* + * flux() + * + * Calculation of spectral flux + *---------------------------------------------------------------------*/ + +static void flux( + float *Bin_E, /* i : log energy spectrum of the current frame */ + float *p2v_map, /* i : spectral peakiness map */ + float *old_Bin_E, /* i/o: log energy spectrum of the frame 60ms ago */ + float *buf_flux, /* i/o: buffer storing spectral energy fluctuation */ + int16_t attack_hangover, /* i/o: hangover preventing flux buffering */ + float dec_mov /* i/o: moving average of classifier decision */ +) +{ + int16_t i; + float *pt1, *pt2, *pt3, *pt4, *pt5, *pt6; + float flux; + int16_t cnt; + + /* calculate flux */ + flux = 0; + cnt = 0; + for ( i = 0; i < N_OLD_BIN_E; i++ ) + { + if ( p2v_map[i] != 0 ) + { + flux += fabsf( Bin_E[i] - old_Bin_E[i] ); + cnt++; + } + } + + if ( cnt == 0 ) + { + flux = 5; + } + else + { + flux = flux / (float) cnt; + } + + if ( flux > 20 && dec_mov > 0.8f ) + { + flux = 20; + } + + /* update old Bin_E buffer */ + pt1 = old_Bin_E; + pt2 = old_Bin_E + N_OLD_BIN_E; + pt3 = Bin_E; + pt4 = old_Bin_E + N_OLD_BIN_E; + pt5 = old_Bin_E + 2 * N_OLD_BIN_E; + pt6 = old_Bin_E + 2 * N_OLD_BIN_E; + + for ( i = 0; i < N_OLD_BIN_E; i++ ) + { + *pt1++ = *pt2++; + *pt4++ = *pt5++; + *pt6++ = *pt3++; + } + + /* update flux buffer */ + if ( attack_hangover <= 0 ) + { + for ( i = 0; i < BUF_LEN - 1; i++ ) + { + buf_flux[i] = buf_flux[i + 1]; + } + + buf_flux[i] = flux; + } + + return; +} + + +/*---------------------------------------------------------------------* + * tonal_dist() + * + * Calculation of spectral distance + *---------------------------------------------------------------------*/ + +static void tonal_dist( + float *p2v_map, /* i : spectral peakiness map */ + float *buf_pkh, /* i/o: buffer storing highband spectral peakiness */ + float *buf_Ntonal, /* i/o: buffer storing No.of 1st spectral tone */ + float *buf_Ntonal2, /* i/o: buffer storing No.of 2nd spectral tone */ + float *buf_Ntonal_lf /* i/o: buffer storing low band spectral tone ratio */ +) +{ + int16_t i; + float pk; + int16_t Ntonal; + int16_t Ntonal2; + int16_t Ntonal_lf; + + /* find number of tonals, number of tonals at low-band, + spectral peakiness at high-band */ + pk = 0; + Ntonal = 0; + Ntonal2 = 0; + Ntonal_lf = 0; + for ( i = 0; i < 64; i++ ) + { + if ( p2v_map[i] > 55 ) + { + Ntonal++; + } + + if ( p2v_map[i] > 80 ) + { + Ntonal2++; + Ntonal_lf++; + } + } + + for ( i = 64; i < 127; i++ ) + { + if ( p2v_map[i] != 0 ) + { + pk += p2v_map[i]; + } + + if ( p2v_map[i] > 55 ) + { + Ntonal++; + } + + if ( p2v_map[i] > 80 ) + { + Ntonal2++; + } + } + + /* update buffers */ + for ( i = 0; i < BUF_LEN - 1; i++ ) + { + buf_pkh[i] = buf_pkh[i + 1]; + buf_Ntonal[i] = buf_Ntonal[i + 1]; + buf_Ntonal2[i] = buf_Ntonal2[i + 1]; + buf_Ntonal_lf[i] = buf_Ntonal_lf[i + 1]; + } + + buf_pkh[i] = pk; + buf_Ntonal[i] = (float) Ntonal; + buf_Ntonal2[i] = (float) Ntonal2; + buf_Ntonal_lf[i] = (float) Ntonal_lf; + + return; +} + + +/*---------------------------------------------------------------------* + * mode_decision() + * + * Decision about internal mode of the mixed/music classifier improvement + *---------------------------------------------------------------------*/ + +static int16_t mode_decision( + Encoder_State *st, + int16_t len, /* i : buffering status */ + float *dec_mov, /* i/o: moving average of classifier decision */ + float *buf_flux, /* i : buffer storing spectral energy fluctuation */ + float *buf_epsP_tilt, /* i : buffer storing LP prediciton error tilt */ + float *buf_pkh, /* i : buffer storing highband spectral peakiness */ + float *buf_cor_map_sum, /* i : buffer storing correlation map sum */ + float *buf_Ntonal, /* i : buffer storing No.of 1st spectral tone */ + float *buf_Ntonal2, /* i : buffer storing No.of 2nd spectral tone */ + float *buf_Ntonal_lf, /* i : buffer storing low band spectral tone ratio */ + float *buf_dlp /* i : buffer storing voicing estimate */ +) +{ + int16_t mode; + int16_t i; + int16_t voiced_cnt; + float M_pkh; + float M_cor_map_sum; + float M_Ntonal; + float M_flux; + float V_epsP_tilt; + float lf_Ntonal_ratio; + + mode = *dec_mov > 0.5f; + + if ( len <= 5 ) + { + return ( mode ); + } + else if ( len < 10 ) + { + M_pkh = mean( buf_pkh + BUF_LEN - len, len ); + M_cor_map_sum = mean( buf_cor_map_sum + BUF_LEN - len, len ); + M_Ntonal = mean( buf_Ntonal + BUF_LEN - len, len ); + V_epsP_tilt = var( buf_epsP_tilt + BUF_LEN - len, len ); + + voiced_cnt = 0; + for ( i = 9; i > 3; i-- ) + { + if ( buf_dlp[i] > 0.0f ) + { + voiced_cnt++; + } + } + + if ( ( M_pkh > 1100 || V_epsP_tilt < 0.00008f || M_cor_map_sum > 100 ) && voiced_cnt < 4 ) + { + mode = 1; + } + else if ( M_Ntonal > 27 && voiced_cnt < 4 ) + { + mode = 1; + } + } + else + { + voiced_cnt = 0; + for ( i = 0; i < 10; i++ ) + { + if ( buf_dlp[i] > 0.0f ) + { + voiced_cnt++; + } + } + + M_flux = mean( &buf_flux[BUF_LEN - 10], 10 ); + M_pkh = mean( buf_pkh + BUF_LEN - 10, 10 ); + M_cor_map_sum = mean( buf_cor_map_sum + BUF_LEN - 10, 10 ); + V_epsP_tilt = var( buf_epsP_tilt + BUF_LEN - 10, 10 ); + + if ( ( M_flux < 8.5f || ( V_epsP_tilt < 0.001f && M_flux < 12.0f ) || M_pkh > 1050 || M_cor_map_sum > 100 ) && voiced_cnt < 3 && mean( &buf_flux[55], 5 ) < 15 ) + { + mode = 1; + *dec_mov = 1; + return ( mode ); + } + + if ( M_flux > 16.0f || ( M_flux > 15 && voiced_cnt > 2 ) || mean( &buf_flux[55], 5 ) > 19.0f || ( buf_flux[59] >= 20 && st->hSpMusClas->lps - st->hSpMusClas->lpm > 0 ) ) + { + *dec_mov = 0; + mode = 0; + return ( mode ); + } + + for ( i = 10; i < len; i++ ) + { + M_flux = mean( &buf_flux[BUF_LEN - i], i ); + M_pkh = mean( buf_pkh + BUF_LEN - i, i ); + M_cor_map_sum = mean( buf_cor_map_sum + BUF_LEN - i, i ); + V_epsP_tilt = var( buf_epsP_tilt + BUF_LEN - i, i ); + + if ( ( ( M_flux < 12 + 0.05f * ( len - 10 ) && mean( &buf_flux[BUF_LEN - 10], 10 ) < 15 ) || V_epsP_tilt < 0.0001f + 0.000018f * ( len - 10 ) || M_pkh > 1050 - 5.0f * ( len - 10 ) || M_cor_map_sum > 95 - 0.3f * ( len - 10 ) ) && voiced_cnt < 3 ) + { + mode = 1; + return ( mode ); + } + } + + if ( len == BUF_LEN ) + { + M_Ntonal = mean( buf_Ntonal, BUF_LEN ); + lf_Ntonal_ratio = sum_f( buf_Ntonal_lf, BUF_LEN ) / ( sum_f( buf_Ntonal2, BUF_LEN ) + 0.0001f ); + + if ( M_Ntonal > 18 || lf_Ntonal_ratio < 0.2f ) + { + mode = 1; + } + else if ( M_Ntonal < 1 ) + { + mode = 0; + } + } + } + + return ( mode ); +} + + +/*----------------------------------------------------------------------------------* + * tonal_context_improv() + * + * Context-based improvement of 1st/2nd stage speech/music decision on stable tonal signals + *----------------------------------------------------------------------------------*/ + +static void tonal_context_improv( + Encoder_State *st, /* i/o: encoder state structure */ + const float PS[], /* i : energy spectrum */ + const float voi_fv, /* i : scaled voicing feature */ + const float cor_map_sum_fv, /* i : scaled correlation map feature */ + const float LPCErr /* i : scaled LP prediction error feature */ +) +{ + int16_t lt_pitch_diff; + float sort_max, sort_avg, sort_val[80]; + float tonality, tonality1, tonality2, tonality3, t2, t3, tL, err, cor, dft; + + SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; + + /* reset in case of codec mode switching */ + if ( st->last_codec_mode == MODE2 ) + { + set_f( hSpMusClas->tonality2_buf, 0, HANG_LEN_INIT ); + set_f( hSpMusClas->tonality3_buf, 0, HANG_LEN_INIT ); + set_f( hSpMusClas->LPCErr_buf, 0, HANG_LEN_INIT ); + hSpMusClas->lt_music_hangover = 0; + hSpMusClas->lt_music_state = 0; + hSpMusClas->lt_speech_state = 0; + hSpMusClas->lt_speech_hangover = 0; + } + + /* estimate maximum tonality in bands [0-1 kHz], [1-2kHz] and [2-4kHz] */ + mvr2r( PS, sort_val, 80 ); + + /* tonality in band 0-1 kHz */ + v_sort( sort_val, 0, 19 ); + sort_max = sort_val[19]; + sort_avg = sum_f( &sort_val[0], 10 ); + tonality1 = sort_max / sort_avg; + + /* tonality in band 1-2 kHz */ + v_sort( sort_val, 20, 39 ); + sort_max = sort_val[39]; + sort_avg = sum_f( &sort_val[20], 10 ); + tonality2 = sort_max / sort_avg; + + /* tonality in band 2-4 kHz */ + v_sort( sort_val, 40, 79 ); + sort_max = sort_val[79]; + sort_avg = sum_f( &sort_val[40], 20 ); + tonality3 = sort_max / sort_avg; + + tonality = max( max( tonality1, tonality2 ), tonality3 ); + + if ( st->hVAD->hangover_cnt == 10 && st->vad_flag == 1 ) + { + /* long-term voicing parameter */ + hSpMusClas->lt_voicing = 0.1f * hSpMusClas->lt_voicing + 0.9f * *st->voicing; + + /* long-term correlation value */ + hSpMusClas->lt_corr = 0.1f * hSpMusClas->lt_corr + 0.9f * st->old_corr; + + /* long-term tonality measure */ + hSpMusClas->lt_tonality = 0.1f * hSpMusClas->lt_tonality + 0.9f * tonality; + } + else + { + /* long-term voicing parameter */ + hSpMusClas->lt_voicing = 0.7f * hSpMusClas->lt_voicing + 0.3f * *st->voicing; + + /* long-term correlation value */ + hSpMusClas->lt_corr = 0.7f * hSpMusClas->lt_corr + 0.3f * st->old_corr; + + /* long-term tonality measure */ + hSpMusClas->lt_tonality = 0.5f * hSpMusClas->lt_tonality + 0.5f * tonality; + } + + /* pitch difference w.r.t to past 3 frames */ + lt_pitch_diff = (int16_t) abs( hSpMusClas->lt_corr_pitch[0] - st->pitch[0] ); + lt_pitch_diff += (int16_t) abs( hSpMusClas->lt_corr_pitch[1] - st->pitch[0] ); + lt_pitch_diff += (int16_t) abs( hSpMusClas->lt_corr_pitch[2] - st->pitch[0] ); + + hSpMusClas->lt_corr_pitch[0] = hSpMusClas->lt_corr_pitch[1]; + hSpMusClas->lt_corr_pitch[1] = hSpMusClas->lt_corr_pitch[2]; + hSpMusClas->lt_corr_pitch[2] = st->pitch[0]; + + hSpMusClas->lt_old_mode[0] = hSpMusClas->lt_old_mode[1]; + hSpMusClas->lt_old_mode[1] = hSpMusClas->lt_old_mode[2]; + + if ( st->sp_aud_decision1 == 1 && + ( min( min( tonality1, tonality2 ), tonality3 ) > 50.0f ) && + ( tonality1 + tonality2 > 200.0f && tonality2 + tonality3 > 200.0f && tonality1 + tonality3 > 200.0f ) && + ( hSpMusClas->lt_tonality < 20000.0f ) && + ( ( hSpMusClas->lt_tonality > 1000 && max( hSpMusClas->lt_voicing, *st->voicing ) > 0.99f ) || + ( hSpMusClas->lt_tonality > 1500 && hSpMusClas->lt_corr > 0.99f ) || + ( hSpMusClas->lt_tonality > 3000 && hSpMusClas->lowrate_pitchGain > 0.96f ) || + ( lt_pitch_diff == 0 && hSpMusClas->lowrate_pitchGain > 0.89f ) ) ) + { + if ( sum_s( hSpMusClas->lt_old_mode, 2 ) < 2 ) + { + /* probably speech - change the decision to speech */ + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + + if ( hSpMusClas->lt_hangover == 0 ) + { + hSpMusClas->lt_hangover = 6; + } + } + } + else + { + /* not speech, but still in the hangover period - change the decision to speech */ + if ( hSpMusClas->lt_hangover > 0 ) + { + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + hSpMusClas->lt_hangover--; + } + } + + /* calculate standard deviation of log-tonality */ + mvr2r( hSpMusClas->tonality2_buf + 1, hSpMusClas->tonality2_buf, HANG_LEN_INIT - 1 ); + hSpMusClas->tonality2_buf[HANG_LEN_INIT - 1] = 0.2f * log10f( tonality2 ); + t2 = std_dev( hSpMusClas->tonality2_buf, HANG_LEN_INIT ); + + mvr2r( hSpMusClas->tonality3_buf + 1, hSpMusClas->tonality3_buf, HANG_LEN_INIT - 1 ); + hSpMusClas->tonality3_buf[HANG_LEN_INIT - 1] = 0.2f * log10f( tonality3 ); + t3 = std_dev( hSpMusClas->tonality3_buf, HANG_LEN_INIT ); + + tL = 0.2f * log10f( hSpMusClas->lt_tonality ); + + /* calculate standard deviation of residual LP energy */ + mvr2r( hSpMusClas->LPCErr_buf + 1, hSpMusClas->LPCErr_buf, HANG_LEN_INIT - 1 ); + hSpMusClas->LPCErr_buf[HANG_LEN_INIT - 1] = LPCErr; + err = std_dev( hSpMusClas->LPCErr_buf, HANG_LEN_INIT ); + + cor = max( voi_fv - cor_map_sum_fv, 0.0f ); + dft = 0.2f * fabsf( log10f( tonality2 ) - log10f( tonality3 ) ); + + /* state machine for strong music */ + if ( st->sp_aud_decision1 == 1 && hSpMusClas->lt_music_state == 0 && hSpMusClas->lt_music_hangover == 0 && + t2 < 0.54f && t2 > 0.26f && t3 > 0.22f && tL < 0.54f && tL > 0.26f && err > 0.5f ) + { + hSpMusClas->lt_music_state = 1; + hSpMusClas->lt_music_hangover = 6; + } + else if ( hSpMusClas->lt_music_state == 1 && hSpMusClas->lt_music_hangover == 0 && t2 < 0.34 && t3 < 0.26f && tL < 0.45f ) + { + hSpMusClas->lt_music_state = 0; + hSpMusClas->lt_music_hangover = 6; + } + + if ( hSpMusClas->lt_music_hangover > 0 ) + { + hSpMusClas->lt_music_hangover--; + } + + /* state machine for strong speech */ + if ( st->sp_aud_decision1 == 1 && hSpMusClas->lt_speech_state == 0 && hSpMusClas->lt_speech_hangover == 0 && + cor > 0.40f && dft < 0.1f && voi_fv > 2 * cor_map_sum_fv + 0.12f && + t2 < cor && t3 < cor && tL < cor && cor_map_sum_fv < cor && voi_fv > cor && voi_fv > 0.76f ) + { + hSpMusClas->lt_speech_state = 1; + hSpMusClas->lt_speech_hangover = 6; + } + else if ( hSpMusClas->lt_speech_state == 1 && hSpMusClas->lt_speech_hangover == 0 && cor < 0.40f ) + { + hSpMusClas->lt_speech_state = 0; + hSpMusClas->lt_speech_hangover = 6; + } + + if ( hSpMusClas->lt_speech_hangover > 0 ) + { + hSpMusClas->lt_speech_hangover--; + } + + /* final decision */ + if ( st->sp_aud_decision1 == 1 && hSpMusClas->lt_speech_state == 1 ) + { + /* strong speech - probably error in speech/music classification */ + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 0; + } + else if ( st->sp_aud_decision1 == 0 && hSpMusClas->lt_music_state == 1 ) + { + /* strong music - probably error in speech/music classification */ + st->sp_aud_decision1 = 1; + st->sp_aud_decision2 = 1; + } + + /* update the buffer of past decisions */ + hSpMusClas->lt_old_mode[2] = st->sp_aud_decision1; + + return; +} + +/*---------------------------------------------------------------------* + * detect_sparseness() + * + * + *---------------------------------------------------------------------*/ + +static void detect_sparseness( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ + const float voi_fv /* i : scaled voicing feature */ +) +{ + float sum; + float ftmp; + float ftmp1; + float S1[128]; + int16_t i, j; + int16_t hb_sp_high_flag = 0; + int16_t lb_sp_high_flag = 0; + float sumh; + float sparse; + float tmp_buf[4]; + float Mlpe = 0.0f; + float Mv = 0.0f; + float Msp; + + SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; + + mvr2r( st->Bin_E, S1, 128 ); + + sum = 0; + for ( i = 0; i < 80; i++ ) + { + if ( S1[i] < 0 ) + { + S1[i] = 0; + } + sum += S1[i]; + } + + sumh = 0; + for ( i = 80; i < 128; i++ ) + { + if ( S1[i] < 0 ) + { + S1[i] = 0; + } + sumh += S1[i]; + } + + sum += sumh; + + /* order spectral from max to min */ + order_spectrum( S1, 128 ); + + /* calculate spectral sparseness in the range 0 - 6.4 kHz */ + j = 0; + ftmp = 0.0f; + ftmp1 = 0.75f * sum; + for ( i = 0; i < 128; i++ ) + { + ftmp += S1[i]; + if ( ftmp > ftmp1 ) + { + j = i; + break; + } + } + + for ( i = 0; i < HANG_LEN_INIT - 1; i++ ) + { + hSpMusClas->sparse_buf[i] = hSpMusClas->sparse_buf[i + 1]; + } + + sparse = (float) j; + hSpMusClas->sparse_buf[i] = sparse; + + if ( st->bwidth == WB ) + { + Msp = mean( hSpMusClas->sparse_buf, 8 ); + + /* find long-term smoothed sparseness */ + if ( hSpMusClas->last_vad_spa == 0 ) + { + set_f( &hSpMusClas->sparse_buf[0], sparse, HANG_LEN_INIT - 1 ); + hSpMusClas->LT_sparse = sparse; + } + else + { + set_f( tmp_buf, 0.0f, 4 ); + + for ( i = 0; i < HANG_LEN_INIT; i++ ) + { + for ( j = 0; j < 4; j++ ) + { + if ( hSpMusClas->sparse_buf[i] > tmp_buf[j] ) + { + mvr2r( &tmp_buf[j], &tmp_buf[j + 1], 3 - j ); + tmp_buf[j] = hSpMusClas->sparse_buf[i]; + break; + } + } + } + + ftmp = 0.25f * ( HANG_LEN_INIT * Msp - sum_f( tmp_buf, 4 ) ) - hSpMusClas->LT_sparse; + + hSpMusClas->LT_sparse = hSpMusClas->LT_sparse + 0.25f * ftmp; + } + + /* find high-band sparseness */ + mvr2r( st->Bin_E + 80, S1, 48 ); + order_spectrum( S1, 48 ); + + for ( i = 0; i < HANG_LEN_INIT - 1; i++ ) + { + hSpMusClas->hf_spar_buf[i] = hSpMusClas->hf_spar_buf[i + 1]; + } + hSpMusClas->hf_spar_buf[i] = sum_f( S1, 5 ) / ( sumh + 0.1f ); + if ( mean( hSpMusClas->hf_spar_buf, 8 ) > 0.2f ) + { + hb_sp_high_flag = 1; + } + + /* find low-band sparseness */ + mvr2r( st->Bin_E, S1, 60 ); + order_spectrum( S1, 60 ); + + if ( sum_f( S1, 5 ) / sum_f( S1, 60 ) > 0.18f ) + { + lb_sp_high_flag = 1; + } + + /* find smoothed linear prediction efficiency */ + for ( i = 0; i < 7; i++ ) + { + hSpMusClas->lpe_buf[i] = hSpMusClas->lpe_buf[i + 1]; + } + + hSpMusClas->lpe_buf[i] = hSpMusClas->past_epsP2; + Mlpe = mean( hSpMusClas->lpe_buf, 8 ); + + /* find smoothed voicing */ + for ( i = 0; i < HANG_LEN_INIT - 1; i++ ) + { + hSpMusClas->voicing_buf[i] = hSpMusClas->voicing_buf[i + 1]; + } + + hSpMusClas->voicing_buf[i] = voi_fv; + Mv = mean( hSpMusClas->voicing_buf, 8 ); + } + + /* avoid using LR-MDCT on sparse spectra */ + if ( st->sp_aud_decision1 == 1 ) + { + if ( st->bwidth == WB ) + { + ftmp = 90; + } + else + { + ftmp = 91; + } + if ( sparse > ftmp ) + { + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 1; + hSpMusClas->gsc_hangover = 1; + } + else if ( hSpMusClas->gsc_hangover == 1 ) + { + if ( sparse > 85 ) + { + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 1; + } + else if ( fabs( sparse - mean( &hSpMusClas->sparse_buf[HANG_LEN_INIT - 1 - hSpMusClas->gsc_cnt], hSpMusClas->gsc_cnt ) ) < 7.0f ) + { + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 1; + } + } + + if ( st->bwidth == WB ) + { + if ( hSpMusClas->LT_sparse > 60 && sparse > 50 && Mlpe < -1.3f && Mv > 0.85f && + lb_sp_high_flag == 0 && ( ( hb_sp_high_flag == 0 && sumh > 0.15f * sum ) || sumh <= 0.15f * sum ) ) + { + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 1; + hSpMusClas->gsc_hangover = 1; + } + else if ( hSpMusClas->gsc_hangover == 1 && !( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) ) + { + if ( fabs( sparse - mean( &hSpMusClas->sparse_buf[HANG_LEN_INIT - 1 - hSpMusClas->gsc_cnt], hSpMusClas->gsc_cnt ) ) < 7.0f ) + { + st->sp_aud_decision1 = 0; + st->sp_aud_decision2 = 1; + } + } + } + } + + /* update the counter of consecutive GSC frames with sparse spectrum */ + if ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) + { + ( hSpMusClas->gsc_cnt )++; + if ( hSpMusClas->gsc_cnt > 7 ) + { + hSpMusClas->gsc_cnt = 7; + } + } + else + { + hSpMusClas->gsc_cnt = 0; + hSpMusClas->gsc_hangover = 0; + } + + hSpMusClas->last_vad_spa = localVAD_HE_SAD; + + return; +} + + +/*---------------------------------------------------------------------* + * order_spectrum() + * + * + *---------------------------------------------------------------------*/ + +static void order_spectrum( + float *vec, + const int16_t len ) +{ + int16_t i, j, imax, imin; + float temp; + + for ( i = 0; i < len / 2; i++ ) + { + imax = i; + imin = i; + for ( j = i; j < len - i; j++ ) + { + if ( vec[j] > vec[imax] ) + { + imax = j; + } + else + { + if ( vec[j] < vec[imin] ) + { + imin = j; + } + } + } + + temp = vec[i]; + vec[i] = vec[imax]; + vec[imax] = temp; + + if ( imin == i ) + { + imin = imax; + } + + temp = vec[len - i - 1]; + vec[len - i - 1] = vec[imin]; + vec[imin] = temp; + } + + return; +} diff --git a/lib_enc/stat_enc.h b/lib_enc/stat_enc.h new file mode 100644 index 0000000000..910a31f2dc --- /dev/null +++ b/lib_enc/stat_enc.h @@ -0,0 +1,1575 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef STAT_ENC_H +#define STAT_ENC_H + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_com.h" +#include "cnst.h" +#include "ivas_cnst.h" + + +/*------------------------------------------------------------------------------------------* + * Indice + *------------------------------------------------------------------------------------------*/ + +typedef struct +{ + uint16_t value; /* value of the quantized indice */ + int16_t nb_bits; /* number of bits used for the quantization of the indice */ +} Indice; + +/*----------------------------------------------------------------------------------* + * Bitstream structure + *----------------------------------------------------------------------------------*/ + +typedef struct bitstream_enc_data_structure +{ + int16_t nb_bits_tot; /* total number of bits already written */ + Indice *ind_list; /* list of indices */ + int16_t next_ind; /* pointer to the next empty slot in the list of indices */ + int16_t last_ind; /* last written indice */ + +} BSTR_ENC_DATA, *BSTR_ENC_HANDLE; + +/*----------------------------------------------------------------------------------* + * General Signal buffers structure + *----------------------------------------------------------------------------------*/ + +typedef struct signal_buffers_enc_data_structure +{ + float input_buff[L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS )]; + + float Bin_E_old[L_FFT / 2]; /* per bin energy of old 2nd frames */ + float mem_decim[2 * L_FILT_MAX]; /* decimation filter memory */ + float mem_decim16k[2 * L_FILT_MAX]; /* ACELP@16kHz - decimation filter memory @16kHz */ + float old_inp_12k8[L_INP_MEM]; /* memory of input signal at 12.8kHz */ + float old_inp_16k[L_INP_MEM]; /* ACELP@16kHz - memory of input signal @16 kHz */ + float buf_speech_enc_pe[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; + float buf_synth[OLD_SYNTH_SIZE_ENC + L_FRAME32k]; /* can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching */ + float buf_speech_enc[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; + float buf_wspeech_enc[L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320]; /* increased by 320 to avoid memory overlap in find_wsp() and also to accomodate for the wspeech_enc */ + +} SIGNAL_BUFFERS_ENC_DATA, *SIGNAL_BUFFERS_ENC_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * Transient Detection structures + *------------------------------------------------------------------------------------------*/ + +/* Delay buffer: Used to buffer input samples and to define the subblock size of a transient detector. */ +typedef struct +{ + int16_t nSubblockSize; /* Subblock size of a transient detector that uses this delay buffer. */ + float buffer[L_FRAME_MAX / NSUBBLOCKS]; /* Delay buffer */ + int16_t nDelay; /* Size of the delay buffer in use. Maximum delay from all users of this buffer. */ + +} DelayBuffer; + +/* Subblock energies: Holds subblock energies and recursively accumulated energies. Also buffers the energies. */ +typedef struct +{ + DelayBuffer *pDelayBuffer; /* Delay buffer. */ + float subblockNrg[NSUBBLOCKS + MAX_TD_DELAY]; /* Subblock energies with a delay buffering. */ + float accSubblockNrg[NSUBBLOCKS + MAX_TD_DELAY + 1]; /* Recursively accumulated subblock energies with a delay buffering. + At index i the value corresponds to the accumulated subblock energy up to i-1, + including block i-1 and without block i. */ + float subblockNrgChange[NSUBBLOCKS + MAX_TD_DELAY]; /* subblockNrgChange[i] = max(subblockNrg[i]/subblockNrg[i-1], subblockNrg[i-1]/subblockNrg[i]) */ + int16_t nDelay; /* Size of the delay buffer in use, as number of subblocks. Maximum delay from all users of this buffer. */ + int16_t nPartialDelay; /* Delay of the input (modulo pDelayBuffer->nSubblockSize), nPartialDelay <= pDelayBuffer->nDelay. */ + + /* Decay factor for the recursive accumulation */ + float facAccSubblockNrg; + + /* High-pass filter states (delay line) */ + float firState1; + float firState2; + +} SubblockEnergies; + + +/* Attack detection function. */ +typedef void ( *TCheckSubblocksForAttack )( const float *pSubblockNrg, const float *pAccSubblockNrg, int16_t nSubblocks, int16_t nPastSubblocks, float attackRatioThreshold, int16_t *pbIsAttackPresent, int16_t *pAttackIndex ); + +/* Transient detector. */ +typedef struct TransientDetector +{ + SubblockEnergies *pSubblockEnergies; /* Subblock energies used in this transient detector. */ + int16_t nDelay; /* Delay of the transient detector in number of subblocks, nDelay <= pSubblockEnergies->nDelay. */ + int16_t nSubblocksToCheck; /* Number of subblocks to check for transients. */ + TCheckSubblocksForAttack CheckSubblocksForAttack; /* Function for checking a presence of an attack. */ + float attackRatioThreshold; /* Attack ratio threshold. */ + int16_t bIsAttackPresent; /* True when an attack was detected. */ + int16_t attackIndex; /* The index of an attack. */ + +} TransientDetector; + +/* Transient detection: Holds all transient detectors and buffers used by them. */ +typedef struct TransientDetection_structure +{ + TransientDetector transientDetector; /* Transient detector. */ + DelayBuffer delayBuffer; /* Delay buffer used by the transient detectors. */ + SubblockEnergies subblockEnergies; /* Subblock energies used by the transient detector. */ + +} TRAN_DET_DATA, *TRAN_DET_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * VAD structures + *------------------------------------------------------------------------------------------*/ + +typedef struct vad_structure +{ + int16_t nb_active_frames; + int16_t hangover_cnt; + int16_t nb_active_frames_he; + int16_t hangover_cnt_he; + int32_t vad_flag_reg_H; + int32_t vad_flag_reg_L; + int32_t vad_prim_reg; + + int16_t vad_flag_cnt_50; + int16_t vad_prim_cnt_16; + + int16_t hangover_cnt_dtx; + int16_t hangover_cnt_music; + + float bcg_flux; + int16_t soft_hangover; + int16_t voiced_burst; + int16_t bcg_flux_init; + int16_t nb_active_frames_he1; + int16_t hangover_cnt_he1; + + float prim_act_quick; /* Noise estimator - primary activity quick */ + float prim_act_slow; /* Noise estimator - primary activity slow */ + float prim_act; /* Noise estimator - primary activity slow rise quick fall */ + float prim_act_quick_he; /* Noise estimator - primary activity quick */ + float prim_act_slow_he; /* Noise estimator - primary activity slow */ + float prim_act_he; /* Noise estimator - primary activity slow rise quick fall */ + + int16_t spectral_tilt_reset; + int16_t consec_inactive; + float ra_deltasum; + int16_t trigger_SID; + float running_avg; + float snr_sum_vad; + + int16_t hangover_terminate_flag; /* CNG and DTX - flag indicating whether to early terminate DTX hangover */ + int16_t vad_flag; /* VAD flag */ + +} VAD_DATA, *VAD_HANDLE; + + +typedef struct cldfb_vad_structure +{ + int16_t bw_index; /* index of band width */ + + /* feature */ + float sp_center[SP_CENTER_NUM]; /* spectral center*/ + float ltd_stable_rate[STABLE_NUM]; /* time-domain stable rate*/ + float sfm[SFM_NUM]; /* spectral flatness*/ + float f_tonality_rate[TONA_NUM]; /* tonality rate*/ + float frame_sb_energy[BG_ENG_NUM]; /* energy of sub-band divided non-uniformly*/ + float frames_power[POWER_NUM]; /* energy of several frames*/ + float pre_spec_low_dif[PRE_SPEC_DIF_NUM]; /* low frequency spectral different*/ + float t_bg_energy; /* time background energy of several frames*/ + float t_bg_energy_sum; /* number of time background energy*/ + int16_t tbg_energy_count; /* sum of time background energy of several frames*/ + int16_t bg_update_count; /* time of background update*/ + float frame_energy_smooth; /* smoothed energy of several frames*/ + + /* history parameters */ + float smooth_spec_amp[SPEC_AMP_NUM]; /* smoothed spectral amplitude*/ + float sb_bg_energy[BG_ENG_NUM]; /* sub-band background energy*/ + float pre_snr[PRE_SNR_NUM]; /* previous time SNR*/ + float lt_snr_org; /* original long time SNR*/ + float lf_snr_smooth; /* smoothed lf_snr*/ + float l_silence_snr; /* sum of snr's of non active frames*/ + float l_speech_snr; /* sum of snr's of active frames*/ + int16_t l_silence_snr_count; /* number of non active frames*/ + int16_t l_speech_snr_count; /* number of active frames*/ + float fg_energy; /* foreground energy sum */ + float bg_energy; /* background energy sum */ + int16_t fg_energy_count; /* number of the foreground energy frame */ + int16_t bg_energy_count; /* number of the background energy frame */ + int16_t fg_energy_est_start; /* flag by that indicate whether if estimate energy*/ + int16_t speech_flag; /* residual number of hangover 1 */ + int16_t continuous_noise_num; /* time of continuous noise frames*/ + int16_t continuous_speech_num; /* time of continuous speech frames*/ + int16_t continuous_speech_num2; /* time 2 of continuous speech frames*/ + int16_t frameloop; /* number of frame*/ + float tonality_rate3; /* tonality rate*/ + float music_background_rate; /* music background rate*/ + float lt_noise_sp_center_diff_sum; /* different sum of long time noise sp_center*/ + float lt_noise_sp_center_diff_counter; /* number of the member lt_noise_sp_center_diff_sum*/ + float lt_noise_sp_center0; /* long time noise sp_center0*/ + float lt_noise_sp_center3; /* long time noise sp_center3*/ + float lt_bg_highf_eng; /* average of long time high frequency energy*/ + int16_t update_num_with_snr; /* the number of the background update with SNR*/ + int16_t update_count; + int16_t warm_hang_num; /* the number of hangover for warm up*/ + int16_t vad_flag_for_bk_update; + +} T_CldfbVadState, *VAD_CLDFB_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * DTX and TD CNG structure + *------------------------------------------------------------------------------------------*/ + +typedef struct td_cng_enc_structure +{ + int16_t lp_cng_mode2; + + float lp_ener; /* CNG and DTX - low-pass filtered energy for CNG */ + int16_t cng_seed; /* CNG and DTX - seed for white noise random generator */ + int16_t old_enr_index; /* CNG and DTX - index of last encoded CNG energy */ + float Enew; /* CNG and DTX - CNG target residual energy */ + int16_t cng_hist_ptr; /* CNG and DTX - pointer for averaging buffers */ + float cng_lsp_hist[DTX_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ + float cng_ener_hist[DTX_HIST_SIZE]; /* CNG and DTX - log energy buffer for averaging */ + int16_t cng_ener_seed; /* CNG and DTX - seed for random generator for variation of excitation energy */ + int16_t cng_ener_seed1; + float lp_sp_enr; + int16_t last_allow_cn_step; + int16_t ho_hist_size; /* CNG and DTX - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ + int16_t ho_hist_ptr; /* CNG and DTX - pointer for averaging buffers */ + int32_t ho_sid_bw; /* CNG and DTX - SID bandwidth flags */ + float ho_lsp_hist[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ + float ho_ener_hist[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging */ + float ho_env_hist[HO_HIST_SIZE * NUM_ENV_CNG]; + int16_t act_cnt; /* CNG and DTX - counter of active frames */ + int16_t ho_circ_size; /* CNG and DTX - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ + int16_t ho_circ_ptr; /* CNG and DTX - pointer for averaging buffers */ + float ho_lsp_circ[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ + float ho_ener_circ[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging */ + float ho_env_circ[HO_HIST_SIZE * NUM_ENV_CNG]; + int16_t burst_ho_cnt; /* CNG and DTX - counter of hangover frames at end of active burst */ + int16_t cng_buf_cnt; /* CNG and DTX - Counter of buffered CNG parameters */ + float cng_exc2_buf[HO_HIST_SIZE * L_FFT]; /* CNG and DTX - exc2 buffer for storing */ + int32_t cng_brate_buf[HO_HIST_SIZE]; /* CNG and DTX - buffer for storing last_active_brate */ + float CNG_att; /* CNG and DTX - attenuation factor for CNG, in dB */ + int16_t ho_16k_lsp[HO_HIST_SIZE]; /* CNG and DTX - 16k LSPs flags */ + int16_t act_cnt2; /* CNG and DTX - counter of active frames for CNG_mode switching */ + float ho_lsp_circ2[HO_HIST_SIZE * M]; /* CNG and DTX - second buffer of LSPs */ + int16_t num_ho; /* CNG and DTX - number of selected hangover frames */ + float old_env[NUM_ENV_CNG]; + float lp_env[NUM_ENV_CNG]; + float cng_res_env[NUM_ENV_CNG * HO_HIST_SIZE]; + float exc_mem[24]; + float exc_mem1[30]; + float exc_mem2[30]; + + + /* SWB DTX/CNG parameters */ + int16_t last_vad; + float last_wb_cng_ener; + float last_shb_cng_ener; + float mov_wb_cng_ener; + float mov_shb_cng_ener; + int16_t last_idx_ener; + int16_t shb_cng_ini_cnt; + int16_t last_SID_bwidth; + int16_t shb_NO_DATA_cnt; + +} TD_CNG_ENC_DATA, *TD_CNG_ENC_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * FD CNG arrays and variables + *------------------------------------------------------------------------------------------*/ + +typedef struct fd_cng_enc_structure +{ + HANDLE_FD_CNG_COM hFdCngCom; + + float msPeriodog[NPART]; /* Periodogram */ + float msBminWin[NPART]; + float msBminSubWin[NPART]; + float msPsd[NPART]; /* Power Spectral Density estimate (i.e., smoothed periodogram) */ + float msAlpha[NPART]; /* Optimal smoothing parameter */ + float msMinBuf[MSNUMSUBFR * NPART]; /* Buffer of minima */ + float msCurrentMinOut[NPART]; + float msCurrentMin[NPART]; + float msCurrentMinSubWindow[NPART]; + int16_t msLocalMinFlag[NPART]; + int16_t msNewMinFlag[NPART]; + float msPsdFirstMoment[NPART]; + float msPsdSecondMoment[NPART]; + float msNoiseFloor[NPART]; /* Estimated noise floor */ + float msNoiseEst[NPART]; /* Estimated noise level */ + float energy_ho[NPART]; + float msNoiseEst_old[NPART]; + float msLogPeriodog[NPART]; /* Periodogram */ + float msLogNoiseEst[NPART]; /* Estimated noise level */ + + float msPeriodogBuf[MSBUFLEN * NPART]; + int16_t msPeriodogBufPtr; + + int16_t stopFFTbinDec; + int16_t startBandDec; + int16_t stopBandDec; + int16_t npartDec; + int16_t midbandDec[NPART]; + int16_t nFFTpartDec; + int16_t partDec[NPART]; + + float mem_coherence[4]; + +} FD_CNG_ENC, *HANDLE_FD_CNG_ENC; + +/*------------------------------------------------------------------------------------------* + * Structure for DTX-related variables used in both FD- and TD-CNG + *------------------------------------------------------------------------------------------*/ + +typedef struct dtx_enc_structure +{ + int16_t cnt_SID; /* CNG and DTX - counter of SID update for the interop. mode or DTX, if enabled */ + int16_t first_CNG; /* CNG and DTX - first CNG frame flag */ + int16_t cng_cnt; /* CNG and DTX - counter of CNG frames for averaging */ + int16_t max_SID; /* CNG and DTX - max allowed number of CNG FRAME_NO_DATA frames */ + int16_t CNG_mode; /* CNG and DTX - mode for DTX configuration */ + float lspCNG[M]; /* CNG and DTX - LP filtered ISPs */ + int16_t VarDTX_cnt_voiced; /* CNG and DTX - counter for variable DTX activation (speech) */ + int16_t VarDTX_cnt_noise; /* CNG and DTX - counter for variable DTX activation (noise) */ + float lt_ener_voiced; /* CNG and DTX - long-term energy of signal (measured on voiced parts) */ + float lt_ener_noise; /* CNG and DTX - long-term energy of background noise */ + float frame_ener; + int16_t cng_hist_size; /* CNG and DTX - size of CNG history buffer for averaging, <0,DTX_HIST_SIZE> */ + float lt_ener_last_SID; /* CNG and DTX - long-term energy of last SID frame */ + int16_t last_CNG_L_frame; /* CNG and DTX - last CNG frame length */ + int16_t var_SID_rate_flag; /* CNG and DTX - flag for variable SID rate */ + int16_t interval_SID; /* CNG and DTX - interval of SID update, default 8 */ + int32_t last_active_brate; /* CNG and DTX - last active frame bitrate used for CNG_mode control */ + +} DTX_ENC_DATA, *DTX_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * IGF structures + *----------------------------------------------------------------------------------*/ + +typedef struct igfscfenc_public_data_struct +{ + int16_t ptrBitIndex; + int16_t bitCount; + int16_t prev[64]; /* no more than 64 SCFs for the IGF energy envelope of one block */ + int16_t prevSave[64]; + int16_t scfCountLongBlock[IGF_NOF_GRIDS]; + int16_t t; + int16_t Tsave; + int16_t contex_saved; + const uint16_t *cf_se00; + const uint16_t *cf_se01; + int16_t cf_off_se01; + const uint16_t *cf_se02; + const int16_t *cf_off_se02; + const uint16_t *cf_se10; + int16_t cf_off_se10; + const uint16_t *cf_se11; + const int16_t *cf_off_se11; + Tastat acState; + +} IGFSCFENC_INSTANCE, *IGFSCFENC_INSTANCE_HANDLE; + + +typedef struct igf_enc_private_data_struct +{ + IGF_INFO igfInfo; + int16_t igfScfQuantized[IGF_MAX_SFB]; + IGFSCFENC_INSTANCE hIGFSCFArithEnc; + + float prevSFM_FIR_SFB_TB[IGF_MAX_SFB]; + float prevSFM_IIR_SFB_TB[IGF_MAX_SFB]; + float prevSFM_FIR_SFB_SB[IGF_MAX_SFB]; + float prevSFM_IIR_SFB_SB[IGF_MAX_SFB]; + int16_t logSpec[L_FRAME_PLUS]; + + float prevDampingFactor_IIR[IGF_MAX_SFB]; + int16_t dampingFactorSmoothing[IGF_MAX_SFB]; + float SFM_tb[IGF_MAX_SFB]; + float SFM_sb[IGF_MAX_SFB]; + + int16_t igfCurrWhiteningLevel[IGF_MAX_TILES]; + int16_t igfPrevWhiteningLevel[IGF_MAX_TILES]; + int16_t igfWhiteningHangoverCnt[IGF_MAX_TILES]; + float igfPastSFM[IGF_MAX_TILES][IGF_PAST_SFM_LEN]; + int16_t igfPastSFM_pos; + + float prevSFM_FIR[IGF_MAX_TILES]; + float prevSFM_IIR[IGF_MAX_TILES]; + int16_t wasTransient; + + UWord8 igfBitstream[IGF_BITBUFSIZE / 8]; + int16_t igfBitstreamBits; + +} IGF_ENC_PRIVATE_DATA, *IGF_ENC_PRIVATE_DATA_HANDLE; + + +typedef struct igf_enc_instance_struct +{ + IGF_ENC_PRIVATE_DATA igfData; + int32_t infoSamplingRate; + int16_t infoStartFrequency; + int16_t infoStopFrequency; + int16_t infoStartLine; + int16_t infoStopLine; + int16_t infoTotalBitsWritten; + int16_t infoTotalBitsPerFrameWritten; + int16_t flatteningTrigger; + float spec_be_igf[N_MAX_TCX - IGF_START_MN]; + float tns_predictionGain; + +} IGF_ENC_INSTANCE, *IGF_ENC_INSTANCE_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Noise estimation structure + *----------------------------------------------------------------------------------*/ + +typedef struct noise_estimation_structure +{ + float fr_bands1[NB_BANDS]; /* spectrum per critical bands of the previous frame */ + float fr_bands2[NB_BANDS]; /* spectrum per critical bands 2 frames ago */ + + float old_S[L_FFT / 2]; /* Tonal detector - prev. log-energy spectrum with subtracted floor */ + float cor_map[L_FFT / 2]; /* Tonal detector - LT correlation map */ + float noise_char; /* Tonal detector - LT noise character */ + float ave_enr2[NB_BANDS]; /* Tonal detector - LT average E per crit. band (for non_sta2) */ + float act_pred; /* Tonal detector - prediction of speech activity from 0 to 1 (0-inactive, 1-active) */ + float multi_harm_limit; /* Tonal detector - adaptive threshold */ + float enrO[NB_BANDS]; /* Noise estimator - previous energy per critical band */ + float bckr[NB_BANDS]; /* Noise estimator - background noise estimation per critical band */ + float ave_enr[NB_BANDS]; /* Noise estimator - long-term average energy per critical band */ + int16_t aEn; /* Noise estimator - noise estimator adaptation flag */ + float totalNoise; /* Noise estimator - total noise energy */ + int16_t first_noise_updt; /* Noise estimator - flag used to determine if the first noise update frame */ + int16_t first_noise_updt_cnt; /* Noise estimator - counter of frame after first noise update */ + int16_t harm_cor_cnt; /* Noise estimator - 1st memory counter of harm or correlation frame */ + int16_t bg_cnt; /* Noise estimator - pause length counter */ + float Etot_l; /* Noise estimator - Track energy from below */ + float Etot_h; /* Noise estimator - Track energy from above */ + float Etot_l_lp; /* Noise estimator - Smoothed low energy */ + float Etot_last; /* Noise estimator - Energy of last frame */ + float Etot_lp; /* Noise estimator - Filtered input energy */ + float lt_tn_track; + float lt_tn_dist; + float lt_Ellp_dist; + float lt_haco_ev; + int16_t low_tn_track_cnt; + float epsP_0_2_lp; + float epsP_0_2_ad_lp; + float epsP_2_16_lp; + float epsP_2_16_lp2; + float epsP_2_16_dlp_lp; + float epsP_2_16_dlp_lp2; + float lt_aEn_zero; + + float Etot_v_h2; + float sign_dyn_lp; + float Etot_st_est; /* Noise estimation - short term estimate of E{ Etot } */ + float Etot_sq_st_est; /* Noise estimation - short term estimate of E{ Etot^2 } */ + int16_t aEn_inac_cnt; +} NOISE_EST_DATA, *NOISE_EST_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Speech/music classifier structure + *----------------------------------------------------------------------------------*/ + +typedef struct sp_mus_clas_structure +{ + float FV_st[N_SMC_FEATURES]; /* Speech/music classifier - short-term mean of the feature vector */ + float past_PS[HIGHEST_FBIN - LOWEST_FBIN]; + float past_ps_diff; + float prev_FV[N_SMC_FEATURES]; + float past_epsP; + float past_epsP2; + int16_t inact_cnt; + float wdrop; + float wrise; + float wdlp_0_95_sp; + float wdlp_xtalk; + int16_t sp_mus_state; + int16_t past_dec[HANG_LEN - 1]; /* Speech/music classifier - buffer of past binary decisions */ + float past_dlp[HANG_LEN - 1]; /* Speech/music classifier - buffer of past non-binary decisions */ + float past_dlp_mean_ST[HANG_LEN - 1]; /* Speech/music classifier - buffer of past non-binary decisions (with ST smoothing) */ + float dlp_mean_ST; + int16_t flag_spitch_cnt; + float dlp_mean_LT; + float dlp_var_LT; + float last_lsp[M_LSP_SPMUS]; + float last_cor_map_sum; + float last_non_sta; + float past_log_enr[NB_BANDS_SPMUS]; /* Speech/music classifier - last average per-band log energy used for non_staX */ + float gsc_thres[4]; /* Speech/music classifier - classification threshold */ + float gsc_lt_diff_etot[MAX_LT]; /* Speech/music classifier - long-term total energy variation */ + float gsc_mem_etot; /* Speech/music classifier - total energy memory */ + int16_t gsc_last_music_flag; /* Speech/music classifier - last music flag */ + int16_t gsc_nb_thr_1; /* Speech/music classifier - number of consecutives frames of level 1 */ + int16_t gsc_nb_thr_3; /* Speech/music classifier - number of consecutives frames of level 3 */ + float mold_corr; + float mean_avr_dyn; /* Speech/music classifier - long term average dynamic */ + float last_sw_dyn; /* Speech/music classifier - last dynamic */ + float lt_dec_thres; /* Speech/music classifier - Long term speech/music thresold values */ + float ener_RAT; /* Speech/music classifier - LF/to total energy ratio */ + + int16_t relE_attack_cnt; + float prev_relE; + float prev_Etot; + int16_t prev_vad; + int16_t vad_0_1_cnt; + float relE_attack_sum; + + /* speech/music classifier improvement parameters */ + float old_Bin_E[3 * N_OLD_BIN_E]; + float buf_flux[BUF_LEN]; + float buf_pkh[BUF_LEN]; + float buf_epsP_tilt[BUF_LEN]; + float buf_cor_map_sum[BUF_LEN]; + float buf_Ntonal[BUF_LEN]; + float buf_Ntonal2[BUF_LEN]; + float buf_Ntonal_lf[BUF_LEN]; + float buf_dlp[10]; + int16_t onset_cnt; + float buf_etot[4]; + int16_t attack_hangover; + float dec_mov; + float dec_mov1; + float mov_log_max_spl; + float old_lt_diff[2]; + int16_t UV_cnt1; + float LT_UV_cnt1; + + float finc_prev[ATT_NSEG]; /* strong attack detection - previous finc */ + float lt_finc; /* strong attack detection - long-term finc energy */ + int16_t last_strong_attack; /* strong attack detection - last strong attack flag */ + float tod_lt_Bin_E[TOD_NSPEC]; /* tonal detector - long-term energy spectrum */ + float tod_S_map_lt[TOD_NSPEC]; /* tonal detector - long-term correlation map */ + float tod_thr_lt; /* tonal detector - adaptive threshold */ + float tod_weight; /* tonal detector - adaptive weight */ + float tod_S_mass_prev; + float tod_S_mass_lt; + + int16_t lt_music_hangover; + float tonality2_buf[HANG_LEN_INIT]; + float tonality3_buf[HANG_LEN_INIT]; + float LPCErr_buf[HANG_LEN_INIT]; + int16_t lt_music_state; + int16_t lt_speech_state; + int16_t lt_speech_hangover; + float lpe_buf[HANG_LEN_INIT]; + float voicing_buf[HANG_LEN_INIT]; + int16_t gsc_hangover; + float sparse_buf[HANG_LEN_INIT]; + float hf_spar_buf[HANG_LEN_INIT]; + float LT_sparse; + int16_t gsc_cnt; + + /* speech/music classification */ + int16_t last_vad_spa; + int16_t lt_old_mode[3]; + float lt_voicing; + float lt_corr; + float lt_tonality; + int16_t lt_corr_pitch[3]; + int16_t lt_hangover; + float lowrate_pitchGain; + + float tdm_lt_Etot; + float var_cor_t[VAR_COR_LEN]; + int16_t high_stable_cor; + + float lps; + float lpm; + float lpn; + +} SP_MUS_CLAS_DATA, *SP_MUS_CLAS_HANDLE; + + +/*----------------------------------------------------------------------------------* + * ACELP core structure + *----------------------------------------------------------------------------------*/ + +typedef struct lpd_state_structure +{ + /* signal memory */ + float syn[1 + M]; /* Synthesis memory (non-pe) */ + + /* ACELP memories*/ + float old_exc[L_EXC_MEM]; /* ACELP exc memory (Aq) */ + float mem_w0; + float mem_syn[M]; /* ACELP synthesis memory (pe) before post-proc */ + float mem_syn1[M]; + float mem_syn2[M]; /* ACELP synthesis memory (pe) after post-proc */ + float mem_syn_r[L_SYN_MEM]; /* ACELP synthesis memory for 1.25ms */ + float mem_syn3[M]; + + float tilt_code; + float gc_threshold; /* Noise enhancer - threshold for gain_code */ + float dispMem[8]; /* Noise enhancer - phase dispersion algorithm memory */ + +} LPD_state, *LPD_state_HANDLE; + + +/* Structure for storing correlations between ACELP codebook components and target */ +typedef struct acelp_cbkcorr_structure +{ + float xx; /* energy of target x */ + float y1y1; /* energy of adaptive cbk contribution y1 */ + float y2y2; /* energy of fixed cbk contribution y2 */ + float xy1; /* correlation of x and y1 */ + float xy2; /* correlation of x and y2 */ + float y1y2; /* correlation of y1 and y2 */ +} ACELP_CbkCorr; + + +/*----------------------------------------------------------------------------------* + * GSC static variables + *----------------------------------------------------------------------------------*/ + +typedef struct gsc_enc_structure +{ + int16_t seed_tcx; /* AC mode (GSC) - seed for noise fill */ + int16_t cor_strong_limit; /* AC mode (GSC) - Indicator about high spectral correlation per band */ + int16_t mem_last_pit_band; /* AC mode (GSC) - memory of the last band where pitch contribution was significant */ + float mem_w0_tmp; + float mem_syn_tmp[M]; + float mid_dyn; /* AC mode (GSC) - signal dynamic */ + int16_t noise_lev; /* AC mode (GSC) - noise level */ + int16_t past_dyn_dec; /* AC mode (GSC) - Past noise level decision */ + float Last_frame_ener; /* AC mode (GSC) - Last frame energy */ + int16_t pit_exc_hangover; /* AC mode (GSC) - Hangover for the time contribution switching */ + float last_exc_dct_in[L_FRAME16k]; /* AC mode (GSC) - previous excitation */ + float last_ener; /* AC mode (GSC) - previous energy */ + int16_t last_bitallocation_band[6]; /* AC mode (GSC) - previous bit allocation of each band */ + float lt_gpitch; + +} GSC_ENC_DATA, *GSC_ENC_HANDLE; + +/*----------------------------------------------------------------------------------* + * HQ core structure + *----------------------------------------------------------------------------------*/ + +typedef struct hq_enc_structure +{ + int16_t mode_count; /* HQ_HARMONIC mode count */ + int16_t mode_count1; /* HQ_NORMAL mode count */ + int16_t prev_Npeaks; /* number of peaks in previous frame */ + int16_t prev_peaks[HVQ_MAX_PEAKS]; /* indices of the peaks in previous frame */ + int16_t hvq_hangover; + int16_t prev_hqswb_clas; + int16_t prev_SWB_peak_pos[SPT_SHORTEN_SBNUM]; + + int16_t hq_generic_speech_class; + float crest_lp; /* Low-pass filtered crest of high band */ + float crest_mod_lp; /* Low-pass filtered noise band detection */ + + /* SWB BWE LR classification */ + int16_t prev_frm_index[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; + int16_t prev_frm_hfe2; + int16_t prev_stab_hfe2; + float prev_ni_ratio; + float prev_En_sb[NB_SWB_SUBBANDS]; + int16_t last_bitalloc_max_band[2]; + float last_ni_gain[BANDS_MAX]; + float last_env[BANDS_MAX]; + int16_t last_max_pos_pulse; + +} HQ_ENC_DATA, *HQ_ENC_HANDLE; + +/* PVQ range coder state */ +typedef struct pvq_enc_structure +{ + uint32_t rc_low; + uint32_t rc_range; + int16_t rc_cache; + int16_t rc_carry; + int16_t rc_carry_count; + int16_t rc_num_bits; + int16_t rc_tot_bits; + int16_t rc_offset; + +} PVQ_ENC_DATA, *PVQ_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * SC-VBR structure + *----------------------------------------------------------------------------------*/ + +typedef struct sc_vbr_enc_structure +{ + float vadsnr; + float vadnoise; + + /* NELP variables */ + float shape1_filt_mem[20]; + float shape2_filt_mem[20]; + float shape3_filt_mem[20]; + float txlpf1_filt1_mem[20]; + float txlpf1_filt2_mem[20]; + float txhpf1_filt1_mem[20]; + float txhpf1_filt2_mem[20]; + float bp1_filt_mem_wb[8]; + float nelp_lp_fit_mem[NELP_LP_ORDER * 2]; + float bp1_filt_mem_nb[14]; + int16_t nelp_enc_seed; + float nelp_gain_mem; + int16_t last_nelp_mode; + int16_t nelp_mode; + + /* PPP variables */ + int16_t pppcountE; + int16_t bump_up; + int16_t last_ppp_mode; + int16_t last_last_ppp_mode; + int16_t ppp_mode; + float prev_ppp_gain_pit; + float prev_tilt_code; + + /* voiced encoder variables */ + int16_t firstTime_voicedenc; + + /* DTFS variables */ + float dtfs_enc_a[MAXLAG_WI]; + float dtfs_enc_b[MAXLAG_WI]; + int16_t dtfs_enc_lag; + int16_t dtfs_enc_nH; + int16_t dtfs_enc_nH_4kHz; + float dtfs_enc_upper_cut_off_freq_of_interest; + float dtfs_enc_upper_cut_off_freq; + + float prev_cw_en; + float ph_offset_E; + float lastLgainE; /* Previous gain value for the low band */ + float lastHgainE; /* Previous gain value for the high band */ + float lasterbE[NUM_ERB_WB]; /* Previous Amplitude spectrum (ERB) */ + + int16_t mode_QQF; + int16_t rate_control; + float SNR_THLD; + int16_t Q_to_F; + int16_t pattern_m; + int16_t patterncount; + int16_t Last_Resort; + int16_t numactive; /* keep the count of the frames inside current 600 frame block */ + float sum_of_rates; /* sum of the rates of past 600 active frames */ + float global_avr_rate; /* global rate up to current time. recorded a (rate in kbps) * 6000 */ + int16_t global_frame_cnt; /* 600 active frame block count. Used to update the global rate */ + int16_t set_ppp_generic; + int16_t avoid_HQ_VBR_NB; + + int16_t vbr_generic_ho; + int16_t Local_VAD; + int16_t last_7k2_coder_type; + +} SC_VBR_ENC_DATA, *SC_VBR_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * AMR-WB IO mode structure + *----------------------------------------------------------------------------------*/ + +typedef struct amrwb_io_enc_structure +{ + float past_qua_en[4]; /* gain quantization memory (used also in AMR-WB IO mode) */ + + /* HF WB BWE for AMR-WB IO mode at 23.85 kbps */ + float gain_alpha; + float mem_hf2_enc[L_FIR - 1]; + float mem_hp400_enc[4]; + float mem_hf_enc[L_FIR - 1]; + float mem_syn_hf_enc[M]; + int16_t seed2_enc; + +} AMRWB_IO_ENC_DATA, *AMRWB_IO_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * TD BWE structure + *----------------------------------------------------------------------------------*/ + +typedef struct td_bwe_enc_structure +{ + float old_speech_shb[L_LOOK_16k + L_SUBFR16k]; /* Buffer memories */ + float old_speech_wb[( L_LOOK_12k8 + L_SUBFR ) * 5 / 16]; /* Buffer memories */ + float old_input_fhb[NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2]; + float prev_lsp_shb[LPC_SHB_ORDER]; + float state_ana_filt_shb[2 * ALLPASSSECTIONS_STEEP + 1]; /* states for the analysis filters */ + float cldfbHBLT; + /* states for the filters used in generating SHB excitation from WB excitation*/ + float mem_csfilt[2]; + float mem_shb_res[MAX_LEN_MA_FILTER]; /* old SHB residual signal */ + float old_EnvSHBres[L_FRAME4k]; /* old TD envelope of the SHB residual signal */ + float old_mean_EnvSHBres; /* energy of the last subframe of the SHB residual signal from previous frame */ + float prev_enr_EnvSHBres; /* energy of the residual SHB envelope from the previous frame */ + float prev_shb_env_tilt; /* tilt of the residual SHB envelope from the previous frame */ + float prev_pow_exc16kWhtnd; /* power of the LB excitation signal in the previous frame */ + float prev_mix_factor; /* mixing factor in the previous frame */ + float prev_Env_error; /* error in SHB envelope modelling */ + + /* states for the filters used in generating SHB signal from SHB excitation*/ + float state_syn_shbexc[L_SHB_LAHEAD]; + float state_lpc_syn[LPC_SHB_ORDER]; + float old_bwe_exc[PIT16k_MAX * 2]; /* old excitation */ + int16_t bwe_seed[2]; + float bwe_non_lin_prev_scale; + float old_bwe_exc_extended[NL_BUFF_OFFSET]; + float syn_overlap[L_SHB_LAHEAD]; /* overlap buffer used to Adjust SHB Frame Gain*/ + float decim_state1[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float decim_state2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float mem_genSHBexc_filt_down_wb2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float mem_genSHBexc_filt_down_wb3[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float mem_genSHBexc_filt_down_shb[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + + float elliptic_bpf_2_48k_mem[4][4]; + float prev_fb_energy; + float prev_gainFr_SHB; + float lsp_shb_slow_interpl[LPC_SHB_ORDER]; + float lsp_shb_fast_interpl[LPC_SHB_ORDER]; + float shb_inv_filt_mem[LPC_SHB_ORDER]; + float lsp_shb_spacing[3]; + float prev_swb_GainShape; + int16_t prev_frGainAtten; + + float prev_wb_GainShape; + float swb_lsp_prev_interp[LPC_SHB_ORDER]; + float fb_state_lpc_syn[LPC_SHB_ORDER]; + float fb_tbe_demph; + float tilt_mem; + + int16_t prev_coder_type; + float prev_lsf_diff[LPC_SHB_ORDER - 2]; + float prev_tilt_para; + float cur_sub_Aq[M + 1]; + + /* quantized data */ + int16_t lsf_idx[NUM_Q_LSF]; + int16_t m_idx; + int16_t grid_idx; + int16_t idxSubGains; + int16_t idxFrameGain; + int16_t idx_shb_fr_gain; + int16_t idx_res_gs[NB_SUBFR16k]; + int16_t idx_mixFac; + + int16_t lsf_WB; + int16_t gFrame_WB; + + int16_t idxGain; + float dec_2_over_3_mem[L_FILT_2OVER3]; + float dec_2_over_3_mem_lp[L_FILT_2OVER3_LP]; + + float tbe_demph; + float tbe_premph; + float mem_stp_swb[LPC_SHB_ORDER]; + float *ptr_mem_stp_swb; + float gain_prec_swb; + float mem_zero_swb[LPC_SHB_ORDER]; + +} TD_BWE_ENC_DATA, *TD_BWE_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * FD BWE structure + *----------------------------------------------------------------------------------*/ + +typedef struct fd_bwe_enc_structure +{ + float new_input_hp[NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS )]; + float old_input[NS2SA( 48000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS )]; + float old_input_wb[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; + float old_input_lp[NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS )]; + float old_syn_12k8_16k[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; + float old_fdbwe_speech[L_FRAME48k]; + float mem_deemph_old_syn; + int16_t prev_mode; + float old_wtda_swb[L_FRAME48k]; + int16_t prev_L_swb_norm1; + float prev_global_gain; + int16_t modeCount; + float EnergyLF; + float mem_old_wtda_swb; + +} FD_BWE_ENC_DATA, *FD_BWE_ENC_HANDLE; + + +/*----------------------------------------------------------------------------------* + * Channel-aware mode + *----------------------------------------------------------------------------------*/ + +typedef struct rf_enc_structure +{ + int16_t rf_frame_type; + int16_t rf_targetbits_buff[MAX_RF_FEC_OFFSET]; + int16_t rf_indx_frametype[MAX_RF_FEC_OFFSET]; + + ACELP_config acelp_cfg_rf; /* configuration for RF frame */ + + float rf_mem_w0; + float rf_clip_var[6]; + float rf_tilt_code; + float rf_mem_syn2[M]; + float rf_dispMem[8]; + float rf_gc_threshold; + + int16_t rf_target_bits; + float rf_tilt_buf[NB_SUBFR16k]; + + int16_t rf_indx_lsf[MAX_RF_FEC_OFFSET][3]; + int16_t rf_indx_pitch[MAX_RF_FEC_OFFSET][NB_SUBFR16k]; + int16_t rf_indx_fcb[MAX_RF_FEC_OFFSET][NB_SUBFR16k]; + int16_t rf_indx_gain[MAX_RF_FEC_OFFSET][NB_SUBFR16k]; + int16_t rf_indx_EsPred[MAX_RF_FEC_OFFSET]; + int16_t rf_indx_ltfMode[MAX_RF_FEC_OFFSET][NB_SUBFR16k]; + + int16_t rf_indx_nelp_fid[MAX_RF_FEC_OFFSET]; + int16_t rf_indx_nelp_iG1[MAX_RF_FEC_OFFSET]; + int16_t rf_indx_nelp_iG2[MAX_RF_FEC_OFFSET][2]; + + int16_t rf_indx_tbeGainFr[MAX_RF_FEC_OFFSET]; + + int16_t rf_tcxltp_pitch_int_past; + int16_t rf_last_tns_active; + int16_t rf_second_last_tns_active; + int16_t rf_second_last_core; + int16_t rf_clas[MAX_RF_FEC_OFFSET]; + int16_t rf_gain_tcx[MAX_RF_FEC_OFFSET]; + int16_t rf_tcxltp_param[MAX_RF_FEC_OFFSET]; + + int16_t RF_bwe_gainFr_ind; + +} RF_ENC_DATA, *RF_ENC_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * PLC encoder + *------------------------------------------------------------------------------------------*/ + +typedef struct plc_enc_evs_structure +{ + int16_t nBits; /* number of bits */ + + int16_t enableGplc; + int16_t T0_4th; + int16_t T0; + int16_t calcOnlylsf; + int16_t pit_min; + int16_t pit_max; + + float mem_MA[M]; + float mem_AR[M]; + + float lsfold[M]; /* old lsf (frequency domain) */ + float lspold[M]; /* old lsp (immittance spectral pairs) */ + + float lsfoldbfi0[M]; /* Previous frame lsf */ + float lsfoldbfi1[M]; /* Past previous frame lsf */ + float lsf_adaptive_mean[M]; /* Mean lsf for bfi cases */ + float stab_fac; + + LPD_state *LPDmem; + float old_exc[8]; /* ACELP exc memory (Aq) */ + + float lsf_con[M]; + float last_lsf_ref[M]; + float last_lsf_con[M]; + +} PLC_ENC_EVS, *PLC_ENC_EVS_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * TEC structure + *------------------------------------------------------------------------------------------*/ + +typedef struct tec_enc_structure +{ + float loBuffer[CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC]; + float loTempEnv[CLDFB_NO_COL_MAX]; + float loTempEnv_ns[CLDFB_NO_COL_MAX]; + float hiTempEnv[CLDFB_NO_COL_MAX + DELAY_TEMP_ENV_BUFF_TEC + EXT_DELAY_HI_TEMP_ENV]; + int16_t tranFlag; + int16_t corrFlag; + +} TEC_ENC_DATA, *TEC_ENC_HANDLE; + + +/*------------------------------------------------------------------------------------------* + * TCX encoder + *------------------------------------------------------------------------------------------*/ + +typedef struct tcx_enc_structure +{ + int16_t L_frameTCX; + + int16_t tcxMode; /* Chosen TCX mode for this frame */ + int16_t transform_type[2]; /* TCX20/10/5 mode in each subframe */ + + /* Core Signal Analysis Outputs */ + float *spectrum[2]; /* MDCT output for a short block */ + float spectrum_long[N_MAX]; /* MDCT output for a long block. Points to spectrum */ + + float noiseTiltFactor; /* compensation for LPC tilt in noise filling */ + int16_t noiseLevelMemory_cnt; /* counter of consecutive low TCX noise levels */ + float ltpGainMemory[N_LTP_GAIN_MEMS]; /* for smoothing noiseTransWidth */ + STnsData tnsData[2]; + int16_t fUseTns[2]; + int16_t bTnsOnWhithenedSpectra[2]; + + int16_t memQuantZeros[L_FRAME_PLUS]; /* Quantization deadzone flags */ + + float *speech_TCX; + float *new_speech_TCX; + + int16_t tcxltp; + int16_t tcxltp_pitch_int; + int16_t tcxltp_pitch_fr; + float tcxltp_gain; + int16_t tcxltp_pitch_int_past; + int16_t tcxltp_pitch_fr_past; + float tcxltp_gain_past; + float tcxltp_norm_corr_past; + float tcxltp_norm_corr_mem; + float kernel_switch_corr_past; + uint16_t kernel_type[2]; /* transform kernel type in each subframe (MDCT or MDST) */ + uint16_t kernel_symmetry_past; /* last TDA symmetry (0 for MDCT, 1 for MDST type) */ + uint16_t enc_ste_pre_corr_past; + float tfm_mem; /* state of IIR filtered temporal flatness measure */ + float buf_speech_ltp[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; + float *speech_ltp; + float *new_speech_ltp; + int16_t tcxltp_filt_idx; + int16_t tcxltp_bits; + int16_t tcxltp_param[LTPSIZE]; + int16_t tcxltp_on_mem; + + float measuredBwRatio; /* measured bw; used for TCX noise-filling */ + int16_t nmStartLine; /* Starting line for the noise measurement */ + + int16_t tcx_lpc_shaped_ari; + + float old_out[L_FRAME32k]; + + /* MDCT switching */ + float prev_hi_ener; + int16_t prev_hi_sparse; + float clas_sec_old; + int16_t clas_final_old; + float last_gain1; + float last_gain2; + + /* TCX memory */ + float Txnq[L_FRAME32k / 2 + 64]; /* Q target (overlap or ACELP+ZIR, use Aq) */ + float *acelp_zir; + float tcx_target_bits_fac; + +} TCX_ENC_DATA, *TCX_ENC_HANDLE; +/*----------------------------------------------------------------------------------* + * + * Main Core encoder structure + * + *----------------------------------------------------------------------------------*/ + +typedef struct enc_core_structure +{ + /*----------------------------------------------------------------------------------* + * Common parameters + *----------------------------------------------------------------------------------*/ + + int16_t idchan; /* channel ID (audio channel number) */ + int16_t element_mode; /* element mode */ +#ifdef DEBUGGING + int16_t id_element; /* element ID */ +#endif + int32_t element_brate; /* element bitrate */ + int16_t codec_mode; /* Mode1 or Mode2 */ + int16_t last_codec_mode; /* previous frame Mode 1 or 2 */ + int16_t last_codec_mode_cng; /* previous inactive frame Mode 1 or 2 */ + + /* MDCT switching */ + int16_t mdct_sw_enable; /* MDCT switching enable flag */ + int16_t mdct_sw; /* MDCT switching indicator */ + + BSTR_ENC_HANDLE hBstr; /* encoder bitstream handle */ + int16_t bitstreamformat; /* Bitstream format flag (G.192/MIME) */ + + int32_t input_Fs; /* input signal sampling frequency in Hz */ + int32_t total_brate; /* total bitrate in kbps of the codec */ + int32_t last_total_brate; /* last frame's total bitrate in kbps of the codec */ + int32_t last_total_brate_cng; /* last inactive frame's total bitrate in kbps of the codec */ + int16_t core; /* core (ACELP_CORE, TCX_20_CORE, TCX_10_CORE, HQ_CORE, AMR_WB_CORE) */ + int16_t last_core; /* previous frame core */ + int16_t coder_type; /* core coder type */ + int16_t flag_ACELP16k; /* flag indicating use of ACELP core at 16kHz internal sampling rate */ + int32_t core_brate; /* core bitrate */ + int32_t last_core_brate; /* previous frame core bitrate */ + int16_t extl; /* extension layer */ + int16_t last_extl; /* previous extension layer */ + int32_t extl_brate; /* extension layer bitrate */ + int16_t input_bwidth; /* input signal bandwidth */ + int16_t bwidth; /* encoded bandwidth NB, WB, SWB or FB */ + int16_t max_bwidth; /* maximum encoded bandwidth */ + int16_t last_input_bwidth; /* input signal bandwidth in the previous frame */ + int16_t last_bwidth; /* coded bandwidth in the previous frame */ + int16_t last_bwidth_cng; /* coded bandwidth in the previous inactive frame */ + int16_t bwidth_sw_cnt; /* bandwidth switching counter */ + int16_t L_frame; /* ACELP core internal frame length */ + int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ + int16_t Opt_DTX_ON; /* flag indicating DTX operation */ + int16_t cng_type; /* flag indicating LP or CLDFB based SID/CNG */ + int16_t cng_dirac_flag; /* flag indicating CNG/SID for DirAC 2TC */ + int16_t cng_spar_flag; /* flag indicating CNG/SID for SPAR 2TC */ + int16_t Opt_SC_VBR; /* flag indicating SC-VBR mode */ + int16_t last_Opt_SC_VBR; /* flag indicating prev frame's SC-VBR mode */ + int16_t low_rate_mode; /* low-rate mode flag */ +#ifdef DEBUGGING + int16_t force; /* flag indicating specific signal type (0 = speech, 1 = music, -1 = N/A) */ +#endif + + int16_t ini_frame; /* initialization frames counter */ + + /*----------------------------------------------------------------------------------* + * ACELP core parameters + *----------------------------------------------------------------------------------*/ + + int16_t clas; /* current frame clas */ + int16_t last_clas; /* previous frame signal classification */ + float prev_fmerit; /* previous signal classification score*/ + float fmerit_dt; /* signal classification score difference */ + int16_t Nb_ACELP_frames; + + int16_t pitch[3]; /* open-loop pitch values @12.8 kHz for three half-frames */ + float voicing[3]; /* open-loop normalized correlation values for three half-frames */ + + LPD_state_HANDLE hLPDmem; /* ACELP LPDmem memories */ + + float Bin_E[L_FFT]; /* per bin energy of two frames */ + float lsp_old1[M]; /* old unquantized LSP vector at the end of the frame at 12k8 */ + float lsf_old1[M]; /* old unquantized LSF vector at the end of the frame at 12k8 */ + float lsp_old[M]; /* old LSP vector at the end of the frame */ + float lsf_old[M]; /* old LSF vector at the end of the frame */ + float lsp_old16k[M]; /* old LSP vector at the end of the frame @16kHz */ + float lspold_enc[M]; /* old lsp (immittance spectral pairs) */ + int16_t pstreaklen; /* LSF quantizer */ + float streaklimit; /* LSF quantizer */ + float stab_fac; /* LSF stability factor */ + float mem_preemph; /* preemphasis filter memory */ + float old_wsp[L_WSP_MEM]; /* old weighted signal vector */ + float old_wsp2[( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM]; /* old decimated weighted signal vector */ + float mem_wsp; /* weighted signal vector memory */ + float mem_decim2[3]; /* weighted signal decimation filter memory */ + + float clip_var[6]; /* pitch gain clipping memory */ + float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ + float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) */ + + int16_t GSC_noisy_speech; /* AC mode (GSC) - flag to indicate GSC on SWB noisy speech */ + int16_t GSC_IVAS_mode; + GSC_ENC_HANDLE hGSCEnc; + + int16_t Last_pulse_pos; /* FEC - last position of the first glottal pulse in the frame */ + float lsfoldbfi0[M]; /* FEC - LSF vector of the previous frame */ + float lsfoldbfi1[M]; /* FEC - LSF vector of the past previous frame */ + float lsf_adaptive_mean[M]; /* FEC - adaptive mean LSF vector for FEC */ + int16_t next_force_safety_net; /* FEC - flag to force safety net in next frame */ + + int16_t uv_count; /* Stationary noise UV modification - unvoiced counter */ + int16_t act_count; /* Stationary noise UV modification - activation counter */ + float ge_sm; /* Stationary noise UV modification - smoothed excitation gain */ + float lspold_s[M]; /* Stationary noise UV modification - old LSP vector */ + int16_t noimix_seed; /* Stationary noise UV modification - mixture seed */ + float min_alpha; /* Stationary noise UV modification - minimum alpha */ + float exc_pe; /* Stationary noise UV modification - memory of the preemphasis filter */ + + int16_t coder_type_raw; /* raw coder_type (before UNVOICED is lost) */ + int16_t last_coder_type_raw; /* raw last_coder_type (coming from the sigal classification) */ + int16_t last_coder_type; /* previous coding type */ + float old_thres; /* normalized correlation weighting in open-loop pitch */ + float old_corr; /* normalized correlation in previous frame (mean value) */ + int16_t old_pitch; /* previous pitch for open-loop pitch search */ + int16_t delta_pit; /* open-loop pitch extrapolation correction */ + float ee_old; /* previous frame low/high frequency energy ratio */ + int16_t min_band; /* minimum critical band of useful bandwidth */ + int16_t max_band; /* maximum critical band of useful bandwidth */ + int16_t tc_cnt; /* TC frame counter */ + int16_t audio_frame_cnt; /* Counter of relative presence of audio frames */ + float old_dE1; /* Maximum energy increase in previous frame */ + int16_t old_ind_deltaMax; /* Index of the sub-subframe of maximum energy in previous frame */ + float old_enr_ssf[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ + int16_t spike_hyst; /* Hysteresis to prevent UC after sharp energy spike */ + int16_t last_harm_flag_acelp; /* harmonicity flag for ACELP @32kbps rate */ + float old_Aq_12_8[M + 1]; /* old Aq[] for core switching */ + float old_Es_pred; /* old Es_pred for core switching */ + + int16_t last_L_frame; /* ACELP@16kHz - last L_frame value */ + float mem_preemph16k; /* ACELP@16kHz - preemphasis filter memory @16kHz */ + float mem_deemp_preQ; /* ACELP@16kHz - prequantizer deemhasis memory */ + float mem_preemp_preQ; /* ACELP@16kHz - prequantizer preemhasis memory */ + int16_t last_nq_preQ; /* ACELP@16kHz - AVQ subquantizer number of the last sub-band of the last subframe */ + int16_t last_code_preq; /* ACELP@16kHz - last coefficient of the pre-quantizer contribution */ + int16_t use_acelp_preq; /* ACELP@16kHz - flag of prequantizer usage */ + + int16_t bpf_off; /* Bass post-filter - do not use BPF when this flag is set to 1 */ + float old_pitch_buf[2 * NB_SUBFR16k]; /* Bass post-filter - buffer of old subframe pitch values */ + float pst_mem_deemp_err; /* Bass post-filter - filter memory of noise LP filter */ + float pst_lp_ener; /* Bass post-filter - long-term energy */ + + /* stable short pitch detection */ + float voicing0_sm; + float voicing_sm; + float LF_EnergyRatio_sm; + int16_t predecision_flag; + float diff_sm; + float energy_sm; + + int16_t sharpFlag; + + int16_t flag_noisy_speech_snr; /* encoder detector for noisy speech */ + int16_t Pos_relE_cnt; /* Number of frames between relE */ + + int16_t tdm_pc; /* pitch stability - used in TD stereo */ + + + /*----------------------------------------------------------------------------------* + * General signal buffers + *----------------------------------------------------------------------------------*/ + + float *input_buff; + float *input; + float *old_input_signal; + + SIGNAL_BUFFERS_ENC_HANDLE hSignalBuf; + + float *Bin_E_old; /* per bin energy of old 2nd frames */ + float *mem_decim; /* decimation filter memory */ + float *mem_decim16k; /* ACELP@16kHz - decimation filter memory @16kHz */ + float *old_inp_12k8; /* memory of input signal at 12.8kHz */ + float *old_inp_16k; /* ACELP@16kHz - memory of input signal @16 kHz */ + float *buf_speech_enc_pe; + float *buf_synth; /*can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching*/ + float *buf_speech_enc; + float *buf_wspeech_enc; + + /*----------------------------------------------------------------------------------* + * Noise estimation + *----------------------------------------------------------------------------------*/ + + NOISE_EST_HANDLE hNoiseEst; + + /*----------------------------------------------------------------------------------* + * Speech/music classifier + *----------------------------------------------------------------------------------*/ + + SP_MUS_CLAS_HANDLE hSpMusClas; + + int16_t sp_aud_decision0; /* 1st stage speech/music decision flag */ + int16_t sp_aud_decision1; /* 1st stage speech/music classification flag */ + int16_t sp_aud_decision2; /* 2nd stage speech/music classification flag */ + + /*----------------------------------------------------------------------------------* + * VAD/DTX/CNG + *----------------------------------------------------------------------------------*/ + + VAD_HANDLE hVAD; + + VAD_CLDFB_HANDLE hVAD_CLDFB; + + int16_t vad_flag; /* i : VAD flag */ + int16_t localVAD; /* i : local VAD flag */ + + float bckr_tilt_lt; + float lp_speech; + float lp_noise; /* CNG and DTX - LP filterend total noise estimation */ + int16_t active_cnt; /* counter of active frames */ + + TD_CNG_ENC_HANDLE hTdCngEnc; + + DTX_ENC_HANDLE hDtxEnc; /* Struct for DTX-related data used by both FD- and LP-CNG */ + + /*----------------------------------------------------------------------------------* + * AMR-WB IO handle + *----------------------------------------------------------------------------------*/ + + AMRWB_IO_ENC_HANDLE hAmrwb_IO; /* AMR-WB IO encoder handle */ + + /*----------------------------------------------------------------------------------* + * CLDFB analysis + *----------------------------------------------------------------------------------*/ + + HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc; /* main analysis filter bank handle */ + HANDLE_CLDFB_FILTER_BANK cldfbSynTd; /* synthesis filterbank - used for HB signal generation */ + + /*----------------------------------------------------------------------------------* + * FD CNG handle + *----------------------------------------------------------------------------------*/ + + HANDLE_FD_CNG_ENC hFdCngEnc; + int16_t fd_cng_reset_flag; + float last_totalNoise; + float totalNoise_increase_hist[TOTALNOISE_HIST_SIZE]; + int16_t totalNoise_increase_len; + + /*----------------------------------------------------------------------------------* + * SC-VBR parameters + *----------------------------------------------------------------------------------*/ + + SC_VBR_ENC_HANDLE hSC_VBR; + + + /*----------------------------------------------------------------------------------* + * HQ core parameters + *----------------------------------------------------------------------------------*/ + + /* Memory for detect_transient() */ + float old_hpfilt_in; + float old_hpfilt_out; + float EnergyLT; + float Energy_Old; + int16_t TransientHangOver; + + HQ_ENC_HANDLE hHQ_core; /* HQ core encoder handle */ + + /*----------------------------------------------------------------------------------* + * TD BWE parameters + *----------------------------------------------------------------------------------*/ + + TD_BWE_ENC_HANDLE hBWE_TD; + + /*----------------------------------------------------------------------------------* + * FD BWE parameters + *----------------------------------------------------------------------------------*/ + + FD_BWE_ENC_HANDLE hBWE_FD; + + /*----------------------------------------------------------------------------------* + * WB, SWB and FB bandwidth detector + *----------------------------------------------------------------------------------*/ + + float lt_mean_NB; + float lt_mean_WB; + float lt_mean_SWB; + int16_t count_WB; + int16_t count_SWB; + int16_t count_FB; + + /*----------------------------------------------------------------------------------* + * Channel-aware mode + *----------------------------------------------------------------------------------*/ + + int16_t rf_mode; /* flag to signal the RF mode */ + int16_t rf_mode_last; + int16_t last_rf_mode_cng; + int16_t Opt_RF_ON; + int16_t rf_fec_offset; + int16_t rf_target_bits_write; + int16_t rf_fec_indicator; + + RF_ENC_HANDLE hRF; /* RF encoder handle */ + + /*----------------------------------------------------------------------------------* + * TCX core encoder handle + *----------------------------------------------------------------------------------*/ + + TCX_ENC_HANDLE hTcxEnc; + + /*----------------------------------------------------------------------------------* + * Mode2 + *----------------------------------------------------------------------------------*/ + + int16_t frame_size_index; /* 0-FRAME_SIZE_NB-1: index determining the frame size */ + int16_t bits_frame_nominal; /* avg bits per frame on active frame */ + int16_t last_bits_frame_nominal; /* avg bits per frame on active frame */ + int16_t bits_frame; /* bits per frame overall */ + int16_t bits_frame_core; /* bits per frame for the core */ + int16_t bits_frame_channel; + int16_t side_bits_frame_channel; + int16_t narrowBand; + int16_t restrictedMode; + int16_t nb_subfr; + int16_t tcxonly; + int16_t fscale; + int32_t sr_core; + + /*ACELP config*/ + ACELP_config acelp_cfg; /*configuration set for each frame*/ + + /*TCX config*/ + TCX_CONFIG_HANDLE hTcxCfg; + + /* cod_main.c */ + float mem_preemph_enc; /* speech preemph filter memory (at encoder-sampling-rate) */ + + /* Signal Buffers and Pointers at encoder-sampling-rate */ + float *speech_enc; + float *speech_enc_pe; + float *new_speech_enc; + float *new_speech_enc_pe; + float *wspeech_enc; + float *synth; + + + int16_t enableTcxLpc; /* global toggle for the TCX LPC quantizer */ + int16_t envWeighted; /* are is{p,f}_old_q[] weighted or not? */ + + int16_t acelpEnabled; /* Flag indicating if ACELP can be used */ + int16_t tcx10Enabled; /* Flag indicating if TCX 10 can be used */ + int16_t tcx20Enabled; /* Flag indicating if TCX 20 can be used */ + + float mem_wsp_enc; /* wsp vector memory */ + + int16_t nb_bits_header_ace; /* number of bits for the header */ + int16_t nb_bits_header_tcx; /* number of bits for the header */ + + float preemph_fac; /* Preemphasis factor */ + float gamma; + + TRAN_DET_HANDLE hTranDet; + + int16_t acelpFramesCount; + float prevTempFlatness; + + float prevEnergyHF; + float currEnergyHF; + float currEnergyLookAhead; + + int16_t lpcQuantization; + + int16_t encoderLookahead_enc; + int16_t encoderPastSamples_enc; + int16_t encoderLookahead_FB; + + /* pitch_ol for adaptive lag window */ + int16_t old_pitch_la; /* past open loop pitch lag from look-ahead before very short stable pitch detection */ + + int16_t acelp_autocorr; /* Optimize acelp in 0 covariance or 1 correlation domain */ + + int16_t pit_min; + int16_t pit_fr1; + int16_t pit_fr1b; + int16_t pit_fr2; + int16_t pit_max; + int16_t pit_res_max; + + /* for FAC */ + int16_t L_frame_past; + + /*Adaptive BPF*/ + int16_t bpf_gain_param; + float mem_bpf[2 * L_FILT16k]; + float mem_error_bpf[2 * L_FILT16k]; + + int16_t glr; + int16_t glr_idx[2]; + float mean_gc[2]; + float prev_lsf4_mean; + int16_t glr_reset; + int32_t last_sr_core; + float last_stab_fac; + + /*for rate switching*/ + int16_t rate_switching_reset; /*Rate switching flag requiring a reset of memories at least partially */ + int16_t rate_switching_reset_16kHz; + + int16_t enablePlcWaveadjust; + int16_t Tonal_SideInfo; + + int16_t seed_acelp; + + PLC_ENC_EVS_HANDLE hPlcExt; + + /*----------------------------------------------------------------------------------* + * IGF + *----------------------------------------------------------------------------------*/ + + IGF_ENC_INSTANCE_HANDLE hIGFEnc; /* IGF encoder handle */ + int16_t igf; + + /*----------------------------------------------------------------------------------* + * TEC + *----------------------------------------------------------------------------------*/ + + int16_t tec_tfa; + TEC_ENC_HANDLE hTECEnc; /* TEC encoder handle */ + int16_t tec_flag; + int16_t tfa_flag; + float tfa_enr[N_TEC_TFA_SUBFR]; + + + /*---------------------------------------------------------------* + * Stereo/IVAS parameters + *---------------------------------------------------------------*/ + + int16_t tdm_LRTD_flag; /* LRTD stereo mode flag */ + + /* stereo switching memories */ + float mem_preemph_DFT; + float inp_12k8_mem_stereo_sw[STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT]; + float mem_preemph16k_DFT; + float inp_16k_mem_stereo_sw[STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k]; + + /* MCT Channel mode indication: LFE, ignore channel? */ + MCT_CHAN_MODE mct_chan_mode; + + int16_t dtx_sce_sba; /* enable use of FD CNG with transform domain cores in SCE SBA */ + +} Encoder_State, *ENC_CORE_HANDLE; + + +typedef struct GainItemStr +{ + float nmrValue; + int16_t gainIndex; +} GainItem; + +typedef struct context_rc_mem_struct +{ + int16_t nbits_old; + int16_t ctx; + float bit_estimate; + int16_t rateFlag; + int16_t lastnz; + int16_t nt_half; + +} RC_CONTEXT_MEM, *HANDLE_RC_CONTEXT_MEM; + + +#endif diff --git a/lib_enc/stat_noise_uv_enc.c b/lib_enc/stat_noise_uv_enc.c new file mode 100644 index 0000000000..3cb876097b --- /dev/null +++ b/lib_enc/stat_noise_uv_enc.c @@ -0,0 +1,107 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * stat_noise_uv_enc() + * + * Modifies excitation signal when the noise is stationary + *-----------------------------------------------------------------*/ + +void stat_noise_uv_enc( + Encoder_State *st, /* i/o: state structure */ + const float *epsP, /* i : LP prediction errors */ + const float *isp_new, /* i : immittance spectral pairs at 4th sfr */ + const float *isp_mid, /* i : immittance spectral pairs at 2nd sfr */ + float *Aq, /* i/o: A(z) quantized for the 4 subframes */ + float *exc2, /* i/o: excitation buffer */ + const int16_t uc_two_stage_flag /* o : flag undicating two-stage UC */ +) +{ + int16_t noisiness = 0; + int16_t levels = ( 1 << NBITS_NOISENESS ); + + /*-----------------------------------------------------------------* + * Calculate and write the noisiness parameter + *-----------------------------------------------------------------*/ + + if ( ( st->coder_type == UNVOICED && !uc_two_stage_flag ) || ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 ) ) + { + if ( st->bwidth != NB ) + { + /* WB case */ + noisiness = (int16_t) ( ( ( epsP[2] / epsP[16] ) - 1 ) * 2.0f * levels ); + } + else if ( st->coder_type == INACTIVE && st->bwidth == NB ) + { + /* NB GSC case */ + noisiness = (int16_t) ( ( ( epsP[2] / epsP[16] ) - 1 ) * 0.25f * levels ); + } + else + { + /* NB case */ + noisiness = (int16_t) ( ( ( epsP[2] / epsP[16] ) - 1 ) * 0.5f * levels ); + } + + if ( noisiness < 0 ) + { + noisiness = 0; + } + + if ( noisiness > levels - 1 ) + { + noisiness = levels - 1; + } + + push_indice( st->hBstr, IND_NOISINESS, noisiness, NBITS_NOISENESS ); + } + + /*-----------------------------------------------------------------* + * Modify the stationary noise excitation signal + *-----------------------------------------------------------------*/ + + stat_noise_uv_mod( st->coder_type, noisiness, st->lsp_old, isp_new, isp_mid, Aq, exc2, 0, &st->ge_sm, &st->uv_count, &st->act_count, st->lspold_s, &st->noimix_seed, &st->min_alpha, &st->exc_pe, st->core_brate, st->bwidth ); + + return; +} diff --git a/lib_enc/subband_fft.c b/lib_enc/subband_fft.c new file mode 100644 index 0000000000..9f02fa04ae --- /dev/null +++ b/lib_enc/subband_fft.c @@ -0,0 +1,213 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "rom_enc.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * fft16() + * + * + *-------------------------------------------------------------------*/ + +static void fft16( float *r_samp, float *i_samp ) +{ + int16_t i, j, N, Nv2, nm1, k; + float tmpr[16], tmpi[16]; + float r1, s1, r2, s2; + + for ( i = 0; i < 16; i++ ) + { + tmpr[i] = r_samp[i] * M_inr[i] - i_samp[i] * M_ini[i]; + tmpi[i] = r_samp[i] * M_ini[i] + i_samp[i] * M_inr[i]; + } + + for ( i = 0; i < 8; i++ ) + { + s1 = tmpr[i] - tmpr[8 + i]; + r1 = tmpi[i] - tmpi[8 + i]; + + tmpr[i] = tmpr[i] + tmpr[8 + i]; + tmpi[i] = tmpi[i] + tmpi[8 + i]; + + tmpr[i + 8] = s1 * M_r[i] - r1 * M_i[i]; + tmpi[i + 8] = s1 * M_i[i] + r1 * M_r[i]; + } + + for ( i = 0; i < 4; i++ ) + { + s1 = tmpr[i] - tmpr[4 + i]; + r1 = tmpi[i] - tmpi[4 + i]; + + tmpr[i] = tmpr[i] + tmpr[4 + i]; + tmpi[i] = tmpi[i] + tmpi[4 + i]; + + tmpr[i + 4] = s1 * M_r[2 * i] - r1 * M_i[2 * i]; + tmpi[i + 4] = s1 * M_i[2 * i] + r1 * M_r[2 * i]; + } + for ( i = 0; i < 4; i++ ) + { + s1 = tmpr[i + 8] - tmpr[12 + i]; + r1 = tmpi[i + 8] - tmpi[12 + i]; + + tmpr[i + 8] = tmpr[i + 8] + tmpr[12 + i]; + tmpi[i + 8] = tmpi[i + 8] + tmpi[12 + i]; + + tmpr[i + 12] = s1 * M_r[2 * i] - r1 * M_i[2 * i]; + tmpi[i + 12] = s1 * M_i[2 * i] + r1 * M_r[2 * i]; + } + + + for ( i = 0; i < 16; i = i + 4 ) + { + s1 = tmpr[i] - tmpr[2 + i]; + r1 = tmpi[i] - tmpi[2 + i]; + s2 = tmpr[i + 1] - tmpr[3 + i]; + r2 = tmpi[i + 1] - tmpi[3 + i]; + + tmpr[i] = tmpr[i] + tmpr[2 + i]; + tmpi[i] = tmpi[i] + tmpi[2 + i]; + tmpr[i + 1] = tmpr[i + 1] + tmpr[3 + i]; + tmpi[i + 1] = tmpi[i + 1] + tmpi[3 + i]; + + tmpr[i + 2] = s1 * M_r[0] - r1 * M_i[0]; + tmpi[i + 2] = s1 * M_i[0] + r1 * M_r[0]; + tmpr[i + 3] = s2 * M_r[4] - r2 * M_i[4]; + tmpi[i + 3] = s2 * M_i[4] + r2 * M_r[4]; + } + + for ( i = 0; i < 16; i = i + 2 ) + { + s1 = tmpr[i] - tmpr[1 + i]; + r1 = tmpi[i] - tmpi[1 + i]; + + tmpr[i] = tmpr[i] + tmpr[1 + i]; + tmpi[i] = tmpi[i] + tmpi[1 + i]; + + tmpr[i + 1] = s1 * M_r[0] - r1 * M_i[0]; + tmpi[i + 1] = s1 * M_i[0] + r1 * M_r[0]; + } + + N = 16; + Nv2 = N >> 1; + nm1 = N - 1; + j = 0; + for ( i = 0; i < nm1; i++ ) + { + if ( i < j ) + { + r_samp[j] = tmpr[i] * M_Wr[j] - tmpi[i] * M_Wi[j]; + i_samp[j] = tmpr[i] * M_Wi[j] + tmpi[i] * M_Wr[j]; + r_samp[i] = tmpr[j] * M_Wr[i] - tmpi[j] * M_Wi[i]; + i_samp[i] = tmpr[j] * M_Wi[i] + tmpi[j] * M_Wr[i]; + } + else if ( i == j ) + { + r_samp[i] = tmpr[i] * M_Wr[i] - tmpi[i] * M_Wi[i]; + i_samp[i] = tmpr[i] * M_Wi[i] + tmpi[i] * M_Wr[i]; + } + + k = Nv2; + while ( k <= j ) + { + j -= k; + k >>= 1; + } + j += k; + } + + r_samp[15] = tmpr[15] * M_Wr[15] - tmpi[15] * M_Wi[15]; + i_samp[15] = tmpr[15] * M_Wi[15] + tmpi[15] * M_Wr[15]; + + return; +} + + +/*-------------------------------------------------------------------* + * subband_FFT() + * + * + *-------------------------------------------------------------------*/ + +void subband_FFT( + float Sr[16][60], /* i : real part of the cldfb */ + float Si[16][60], /* i : imag part of the cldfb */ + float *spec_amp /* o : spectral amplitude */ +) +{ + int16_t i, j; + float tmpr[16], tmpi[16]; + float ptmp[16], tmp1; + + for ( i = 0; i < 10; i++ ) + { + for ( j = 0; j < 16; j++ ) + { + tmpr[j] = Sr[j][i]; + tmpi[j] = Si[j][i]; + } + + fft16( tmpr, tmpi ); + + for ( j = 0; j < 16; j++ ) + { + ptmp[j] = tmpr[j] * tmpr[j] + tmpi[j] * tmpi[j]; + } + if ( i % 2 == 0 ) + { + for ( j = 0; j < 8; j++ ) + { + tmp1 = ptmp[j] + ptmp[15 - j]; + spec_amp[i * 8 + j] = (float) sqrt( tmp1 ); + } + } + else + { + for ( j = 0; j < 8; j++ ) + { + tmp1 = ptmp[j] + ptmp[15 - j]; + spec_amp[i * 8 + 7 - j] = (float) sqrt( tmp1 ); + } + } + } + + return; +} diff --git a/lib_enc/swb_bwe_enc.c b/lib_enc/swb_bwe_enc.c new file mode 100644 index 0000000000..b54fbede57 --- /dev/null +++ b/lib_enc/swb_bwe_enc.c @@ -0,0 +1,1863 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ + +static int16_t SWB_BWE_encoding( Encoder_State *st, const float *insig, const float *insig_lp, const float *insig_hp, const float *synth, const float *yos, float *SWB_fenv, const float tilt_nb, const int16_t st_offset ); +static void MSVQ_Interpol_Tran( float *SWB_env_energy, int16_t *indice ); +static void calculate_tonality( const float *org, const float *gen, float *SFM_org, float *SFM_gen, const int16_t length ); +static int16_t WB_BWE_encoding( Encoder_State *st, const float *yos, float *WB_fenv ); +static void energy_control( Encoder_State *st, const int16_t core, const int16_t mode, const int16_t coder_type, const float *org, const int16_t offset, float *energy_factor ); +static int16_t decision_hq_generic_class( const float *coefs, const int16_t hq_generic_offset ); + + +/*-------------------------------------------------------------------* + * wb_bwe_enc() + * + * WB BWE encoder + *-------------------------------------------------------------------*/ + +void wb_bwe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *new_wb_speech /* i : original input signal at 16kHz */ +) +{ + FD_BWE_ENC_HANDLE hBWE_FD; + float old_input[NS2SA( 16000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME16k]; + float *new_input; /* pointer to original input signal */ + float yorig[L_FRAME16k]; /* MDCT spectrum of weighted original */ + int16_t mode = 0; + float wtda_old_input[2 * L_FRAME16k]; + float WB_fenv[SWB_FENV]; + int16_t Sample_Delay_WB_BWE; + + hBWE_FD = st->hBWE_FD; + + if ( st->extl_brate > 0 ) + { + /*---------------------------------------------------------------------* + * Delay the original input signal to be synchronized with ACELP core synthesis + *---------------------------------------------------------------------*/ + + set_f( old_input, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME16k ); + + Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); + + new_input = old_input + Sample_Delay_WB_BWE; + mvr2r( hBWE_FD->old_input_wb, old_input, Sample_Delay_WB_BWE ); + mvr2r( new_wb_speech, new_input, L_FRAME16k ); + mvr2r( old_input + L_FRAME16k, hBWE_FD->old_input_wb, Sample_Delay_WB_BWE ); + + /*---------------------------------------------------------------------* + * WB BWE encoding + *---------------------------------------------------------------------*/ + + /* MDCT of the original signal */ + wtda( old_input, wtda_old_input, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, L_FRAME16k ); + + direct_transform( wtda_old_input, yorig, 0, L_FRAME16k, st->element_mode ); + + mode = WB_BWE_encoding( st, yorig, WB_fenv ); + + push_indice( st->hBstr, IND_WB_CLASS, mode - 2, 1 ); + } + + hBWE_FD->prev_mode = mode; + + return; +} + +/*-------------------------------------------------------------------* + * get_normalize_spec() + * + *-------------------------------------------------------------------*/ + +static void get_normalize_spec( + const int16_t core, /* i : core selected */ + const int16_t extl, /* i : extension layer selected */ + const int16_t mode, /* i : SHB BWE class */ + const int16_t core_type, /* i : coding type */ + const float *org, /* i : input spectrum */ + float *SWB_signal, /* o : output spectrum */ + int16_t *prev_L_swb_norm, /* i : previous norm. len */ + const int16_t offset /* i : frequency offset */ +) +{ + int16_t n_freq, L_swb_norm; + float envelope[L_FRAME32k]; + int16_t frq_end; + + set_f( SWB_signal, 0, HQ_GENERIC_HIGH0 + offset ); + calc_normal_length( core, org, mode, extl, &L_swb_norm, prev_L_swb_norm ); + + if ( extl == SWB_BWE || extl == FB_BWE ) + { + if ( mode == HARMONIC ) + { + mvr2r( org, &SWB_signal[240 + offset], 240 ); + mvr2r( &org[128], &SWB_signal[480 + offset], 80 ); + } + else + { + mvr2r( &org[112], &SWB_signal[240 + offset], 128 ); + mvr2r( &org[112], &SWB_signal[368 + offset], 128 ); + mvr2r( &org[176], &SWB_signal[496 + offset], 64 ); + } + frq_end = 560 + offset; + } + else if ( extl == WB_BWE ) + { + if ( core_type == 0 ) + { + mvr2r( &org[160], &SWB_signal[240], 80 ); + } + else + { + mvr2r( &org[80], &SWB_signal[240], 80 ); + } + frq_end = L_FRAME16k; + } + else + { + mvr2r( org + HQ_GENERIC_OFFSET, SWB_signal + HQ_GENERIC_HIGH0 + offset, HQ_GENERIC_LEN0 ); + mvr2r( org + HQ_GENERIC_OFFSET, SWB_signal + HQ_GENERIC_HIGH1 + offset, HQ_GENERIC_LEN0 ); + if ( offset == HQ_GENERIC_FOFFSET_24K4 ) + { + mvr2r( org + HQ_GENERIC_LOW0, SWB_signal + HQ_GENERIC_HIGH2 + offset, HQ_GENERIC_END_FREQ - HQ_GENERIC_HIGH2 ); + } + frq_end = L_FRAME32k; + } + + /* calculate envelope */ + calc_norm_envelop( SWB_signal, envelope, L_swb_norm, frq_end - offset, offset ); + + /* Normalize with envelope */ + for ( n_freq = swb_bwe_subband[0] + offset; n_freq < frq_end; n_freq++ ) + { + SWB_signal[n_freq] /= envelope[n_freq]; + } + + return; +} + +/*-------------------------------------------------------------------* + * WB_BWE_fenv_q() + * + * Scalar quantizer routine + *-------------------------------------------------------------------*/ + +/*! r: quantized gain index */ +static int16_t WB_BWE_fenv_q( + float *x, /* i/o: energy of WB envelop */ + const float *cb, /* i : quantizer codebook */ + const int16_t cb_length, /* i : length of codebook */ + const int16_t cb_dim /* i : dimension of codebook */ +) +{ + int16_t i, j, indx = 0; + float dist, min_dist; + const float *pit = cb; + + min_dist = FLT_MAX; + for ( i = 0; i < cb_length; i++ ) + { + dist = 0.0f; + for ( j = 0; j < cb_dim; j++ ) + { + dist += ( x[j] - ( *pit ) ) * ( x[j] - ( *pit ) ); + pit++; + } + + if ( dist < min_dist ) + { + min_dist = dist; + indx = i; + } + } + + for ( j = 0; j < cb_dim; j++ ) + { + x[j] = cb[cb_dim * indx + j]; + } + + return ( indx ); +} + +/*-------------------------------------------------------------------* + * FD_BWE_class() + * + * classify signal of above 6.4kHz, can be used for WB/SWB switch + *-------------------------------------------------------------------*/ + +/*! r: FD BWE class */ +static int16_t FD_BWE_class( + const float *fSpectrum, /* i : input spectrum */ + const float fGain, /* i : global gain */ + const float tilt_nb, /* i : BWE tilt */ + Encoder_State *st /* i/o: Encoder structure */ +) +{ + int16_t i, j, k, noise, sharpMod = 0; + float peak, mean[20], mag; + float sharpPeak; + const float *input_hi = 0; + float sharp; + float gain_tmp = 0; + int16_t mode; + float meanH, mean_d = 0; + int16_t sharplimit; + int16_t numsharp; + int16_t numharmonic; + + mode = NORMAL; + k = 0; + noise = 0; + sharpPeak = 0; + numsharp = 0; + numharmonic = 4; + sharplimit = 10; + + if ( st->extl == SWB_BWE || st->extl == FB_BWE ) + { + input_hi = &fSpectrum[256]; + numsharp = NUM_SHARP; + if ( ( st->last_extl == SWB_BWE && st->extl == SWB_BWE ) || ( st->last_extl == FB_BWE && st->extl == FB_BWE ) ) + { + gain_tmp = fGain / ( st->hBWE_FD->prev_global_gain + EPSILON ); + if ( st->hBWE_FD->prev_mode == TRANSIENT ) + { + numharmonic = numharmonic * 2; + } + else if ( st->hBWE_FD->prev_mode == NORMAL || st->hBWE_FD->prev_mode == NOISE ) + { + numharmonic = 3 * numharmonic / 2; + } + } + else + { + gain_tmp = 1; + if ( st->hBWE_FD->prev_mode == HARMONIC ) + { + numharmonic = numharmonic / 2; + sharplimit = sharplimit / 2; + } + else + { + numharmonic = numharmonic * 2; + sharplimit = sharplimit * 2; + } + } + } + else if ( st->extl == WB_BWE ) + { + input_hi = &fSpectrum[224]; + numsharp = NUM_SHARP / 3; + if ( st->hBWE_FD->prev_mode == HARMONIC ) + { + numharmonic = numharmonic / 4; + } + else + { + numharmonic = numharmonic / 2; + } + if ( st->last_extl != WB_BWE ) + { + if ( st->hBWE_FD->prev_mode == HARMONIC ) + { + sharplimit = sharplimit / 2; + } + else + { + sharplimit = sharplimit * 2; + } + } + } + + meanH = EPSILON; + for ( i = 0; i < numsharp; i++ ) + { + peak = 0.0f; + mean[i] = 0; + + for ( j = 0; j < SHARP_WIDTH; j++ ) + { + mag = (float) fabs( *input_hi ); + if ( mag > peak ) + { + peak = mag; + } + mean[i] += mag; + input_hi++; + } + meanH += mean[i]; + + if ( mean[i] != peak ) + { + sharp = (float) ( peak * ( SHARP_WIDTH - 1 ) / ( mean[i] - peak ) ); + } + else + { + sharp = 0.0f; + } + + if ( sharp > 4.5 && peak > 8 ) + { + k += 1; + } + else if ( sharp < 3.0 ) + { + noise += 1; + } + + if ( sharp > sharpPeak ) + { + sharpPeak = sharp; + } + } + + if ( st->extl == SWB_BWE || st->extl == FB_BWE ) + { + if ( k >= numharmonic && gain_tmp > 0.5f && gain_tmp < 1.8f && sharpPeak > sharplimit ) + { + sharpMod = 1; + } + else + { + sharpMod = 0; + } + meanH /= 288; + mean_d = 0.0f; + for ( i = 0; i < NUM_SHARP; i++ ) + { + mean_d += (float) fabs( mean[i] / 32 - meanH ); + } + } + else if ( st->extl == WB_BWE ) + { + if ( k >= numharmonic && sharpPeak > sharplimit ) + { + sharpMod = 1; + } + else + { + sharpMod = 0; + } + } + + if ( sharpMod && st->hBWE_FD->modeCount < 12 ) + { + st->hBWE_FD->modeCount++; + } + else if ( sharpMod == 0 && st->hBWE_FD->modeCount > 0 ) + { + st->hBWE_FD->modeCount--; + } + + if ( st->hBWE_FD->modeCount >= 2 ) + { + sharpMod = 1; + } + + if ( sharpMod ) + { + mode = HARMONIC; + } + else if ( st->extl == SWB_BWE || st->extl == FB_BWE ) + { + if ( noise > 4 && mean_d < 4.8f * meanH && tilt_nb < 5 ) + { + mode = NOISE; + } + } + + return mode; +} + +/*-------------------------------------------------------------------* + * WB_BWE_encoding() + * + * WB BWE main encoder + *-------------------------------------------------------------------*/ + +/*! r: classification of wb signal */ +static int16_t WB_BWE_encoding( + Encoder_State *st, /* i/o: Encoder structure */ + const float *yos, /* i : MDCT coefficients of weighted original */ + float *WB_fenv /* i/o: energy of WB envelope */ +) +{ + int16_t mode; + float global_gain; + float energy; + int16_t i, n_coeff, n_band; + int16_t index; + float energy_factor[4]; + + /* Energy for the different bands and global energies */ + global_gain = EPSILON; + + for ( i = 0, n_band = 0; i < 2; i++ ) + { + energy = EPSILON; + for ( n_coeff = swb_bwe_subband[n_band]; n_coeff < swb_bwe_subband[n_band + 2]; n_coeff++ ) + { + energy += yos[n_coeff] * yos[n_coeff]; + } + + WB_fenv[i] = energy; + n_band += 2; + global_gain += energy; + } + + mode = FD_BWE_class( yos, global_gain, 0, st ); + + energy_control( st, ACELP_CORE, mode, st->coder_type, yos, 0, energy_factor ); + + for ( i = 0; i < 2; i++ ) + { + WB_fenv[i] = (float) ( log10( WB_fenv[i] * energy_factor[i << 1] / 40 ) * FAC_LOG2 ); + } + + index = WB_BWE_fenv_q( WB_fenv, F_2_5, 32, 2 ); + + push_indice( st->hBstr, IND_WB_FENV, index, 5 ); + + + return ( mode ); +} + + +/*-------------------------------------------------------------------* + * swb_bwe_enc() + * + * SWB BWE encoder (only for 32kHz signals) + *-------------------------------------------------------------------*/ + +void swb_bwe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t last_element_mode, /* i : last element mode */ + const float *old_input_12k8, /* i : input signal @12.8kHz for SWB BWE */ + const float *old_input_16k, /* i : input signal @16kHz for SWB BWE */ + const float *old_syn_12k8_16k, /* i : ACELP core synthesis at 12.8kHz or 16kHz*/ + const float *new_swb_speech, /* i : original input signal at 32kHz */ + const float *shb_speech /* i : SHB target signal (6-14kHz) at 16kHz */ +) +{ + int16_t i, inner_frame, idxGain; + TD_BWE_ENC_HANDLE hBWE_TD; + FD_BWE_ENC_HANDLE hBWE_FD; + float *new_input; + int32_t inner_Fs; + float old_input[NS2SA( 48000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k]; + float old_input_lp[L_FRAME16k], new_input_hp[L_FRAME16k]; + float yorig[L_FRAME48k]; + float wtda_old_input[2 * L_FRAME48k]; + float SWB_fenv[SWB_FENV]; + float tilt_nb; + int16_t Sample_Delay_SWB_BWE, Sample_Delay_HP, Sample_Delay_LP; + float ener_low, energy_fbe_fb, fb_ener_adjust, ener_adjust_quan; + int16_t fb_band_begin; + + hBWE_TD = st->hBWE_TD; + hBWE_FD = st->hBWE_FD; + + ener_adjust_quan = 0.0f; + idxGain = 0; + + /*---------------------------------------------------------------------* + * Delay the original input signal to be synchronized with ACELP core synthesis + *---------------------------------------------------------------------*/ + + if ( st->extl == FB_BWE ) + { + inner_frame = L_FRAME48k; + inner_Fs = 48000; + } + else + { + inner_frame = L_FRAME32k; + inner_Fs = 32000; + } + + set_f( old_input, 0.0f, NS2SA( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + inner_frame ); + + if ( st->L_frame == L_FRAME ) + { + Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); + if ( st->element_mode == IVAS_CPE_TD ) + { + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); + } + Sample_Delay_LP = NS2SA( 12800, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS ); + + if ( st->element_mode > EVS_MONO ) + { + Sample_Delay_SWB_BWE -= NS2SA( inner_Fs, DELAY_FIR_RESAMPL_NS ); + Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); + + if ( st->element_mode == IVAS_CPE_DFT ) + { + mvr2r( old_input_12k8 + L_INP_MEM - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); + mvr2r( hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - Sample_Delay_HP, new_input_hp, Sample_Delay_HP ); + } + } + + mvr2r( hBWE_FD->old_input_lp, old_input_lp, Sample_Delay_LP ); + mvr2r( old_input_12k8 + L_INP_MEM, &old_input_lp[Sample_Delay_LP], L_FRAME - Sample_Delay_LP ); + mvr2r( old_input_12k8 + L_INP_MEM + L_FRAME - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); + } + else + { + Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS ); + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); + if ( st->element_mode == IVAS_CPE_TD ) + { + Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); + } + Sample_Delay_LP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ); + + if ( st->element_mode > EVS_MONO ) + { + Sample_Delay_SWB_BWE -= NS2SA( inner_Fs, DELAY_FIR_RESAMPL_NS ); + Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); + + if ( st->element_mode == IVAS_CPE_DFT ) + { + mvr2r( old_input_16k + L_INP_MEM - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); + mvr2r( hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - Sample_Delay_HP, new_input_hp, Sample_Delay_HP ); + } + } + + mvr2r( hBWE_FD->old_input_lp, old_input_lp, Sample_Delay_LP ); + mvr2r( old_input_16k + L_INP_MEM, &old_input_lp[Sample_Delay_LP], L_FRAME16k - Sample_Delay_LP ); + mvr2r( old_input_16k + L_INP_MEM + L_FRAME16k - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); + } + + mvr2r( hBWE_FD->new_input_hp, new_input_hp, Sample_Delay_HP ); + mvr2r( shb_speech, new_input_hp + Sample_Delay_HP, L_FRAME16k - Sample_Delay_HP ); + mvr2r( shb_speech + L_FRAME16k - Sample_Delay_HP, hBWE_FD->new_input_hp, Sample_Delay_HP ); + + new_input = old_input + Sample_Delay_SWB_BWE; + mvr2r( hBWE_FD->old_input, old_input, Sample_Delay_SWB_BWE ); + mvr2r( new_swb_speech, new_input, inner_frame ); + mvr2r( old_input + inner_frame, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); + + /*----------------------------------------------------------------------* + * Calculate tilt of the input signal and the ACELP core synthesis + *----------------------------------------------------------------------*/ + + calc_tilt_bwe( old_input_lp, &tilt_nb, L_FRAME ); + + /*---------------------------------------------------------------------* + * SWB BWE encoding + * FB BWE encoding + *---------------------------------------------------------------------*/ + + if ( st->idchan == 1 && last_element_mode == IVAS_CPE_DFT ) + { + for ( i = 0; i < inner_frame; i++ ) + { + hBWE_FD->old_wtda_swb[i] *= (float) i / (float) inner_frame; + } + } + + /* windowing of the original input signal */ + wtda( old_input, wtda_old_input, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, inner_frame ); + + /* DCT of the original input signal */ + direct_transform( wtda_old_input, yorig, 0, inner_frame, st->element_mode ); + + /* high-band gain control in case of BWS */ + if ( st->bwidth_sw_cnt > 0 ) + { + v_multc( yorig + L_FRAME16k, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, yorig + L_FRAME16k, inner_frame - L_FRAME16k ); + } + + /* FB BWE encoding */ + if ( st->extl == FB_BWE ) + { + fb_band_begin = FB_BAND_BEGIN; + if ( st->L_frame == L_FRAME ) + { + fb_band_begin = FB_BAND_BEGIN_12k8; + } + + energy_fbe_fb = sum2_f( yorig + fb_band_begin, FB_BAND_WIDTH ) + EPSILON; + ener_low = EPSILON; + for ( i = fb_band_begin - FB_BAND_WIDTH; i < fb_band_begin; i++ ) + { + ener_low += yorig[i] * yorig[i]; + } + + fb_ener_adjust = (float) sqrt( energy_fbe_fb / ener_low ); + fb_ener_adjust = min( fb_ener_adjust, FB_MAX_GAIN_VAR ); + idxGain = (int16_t) usquant( fb_ener_adjust, &ener_adjust_quan, FB_GAIN_QLOW, FB_GAIN_QDELTA, 1 << NUM_BITS_FB_FRAMEGAIN ); + } + + /* SWB BWE encoding */ + if ( st->L_frame == L_FRAME16k ) + { + SWB_BWE_encoding( st, old_input, old_input_lp, new_input_hp, old_syn_12k8_16k, yorig, SWB_fenv, tilt_nb, 80 ); + } + else + { + SWB_BWE_encoding( st, old_input, old_input_lp, new_input_hp, old_syn_12k8_16k, yorig, SWB_fenv, tilt_nb, 6 ); + } + + /* write FB BWE frame gain to the bitstream */ + if ( st->extl == FB_BWE ) + { + push_indice( st->hBstr, IND_FB_SLOPE, idxGain, NUM_BITS_FB_FRAMEGAIN ); + } + + return; +} + + +/*-------------------------------------------------------------------* + * Freq_weights() + * + *-------------------------------------------------------------------*/ + +static void freq_weights( + const float Band_Ener[], /* i : Band energy */ + const float f_weighting[], /* i : weigting coefs. */ + float w_env[], /* o : Freq. weighting */ + const int16_t Nbands /* i : Number of bands */ +) +{ + int16_t i; + float tmp, w1[SWB_FENV], w2[SWB_FENV]; + float min_b, max_b; + + /* Find Max band energy */ + min_b = Band_Ener[0]; + max_b = Band_Ener[0]; + for ( i = 1; i < Nbands; i++ ) + { + if ( Band_Ener[i] < min_b ) + { + min_b = Band_Ener[i]; + } + if ( Band_Ener[i] > max_b ) + { + max_b = Band_Ener[i]; + } + } + + /* Find weighting function */ + tmp = 1.f / ( max_b - min_b ); + for ( i = 0; i < Nbands; i++ ) + { + w1[i] = ( Band_Ener[i] - min_b ) * tmp + 1.f; /*1<= var <=2 */ + w2[i] = f_weighting[i]; /*1~0.75*/ + w_env[i] = w1[i] * w2[i]; + } + + return; +} + + +/*-------------------------------------------------------------------* + * VQwithCand_w() + * + *-------------------------------------------------------------------*/ + +static void vqWithCand_w( + const float *x, /* i : input vector */ + const float *E_ROM_dico, /* i : codebook */ + const int16_t dim, /* i : codebook dimension */ + const int16_t E_ROM_dico_size, /* i : codebook size */ + int16_t *index, /* o : survivors indices */ + const int16_t surv, /* i : survivor number */ + float dist_min[], /* o : minimum distortion */ + const float *w, /* i : weighting */ + const int16_t flag /* i : flag indicationg weighted distortion metric */ +) +{ + int16_t i, j, k, l; + const float *p_E_ROM_dico; + float dist, temp1; + + if ( flag ) + { + set_f( dist_min, 3.402823466e+38F, surv ); /* FLT_MAX */ + + for ( i = 0; i < surv; i++ ) + { + index[i] = i; + } + + p_E_ROM_dico = E_ROM_dico; + + for ( i = 0; i < E_ROM_dico_size; i++ ) + { + dist = x[0] - *p_E_ROM_dico++; + dist *= ( dist * w[0] ); + + for ( j = 1; j < dim; j++ ) + { + temp1 = x[j] - *p_E_ROM_dico++; + dist += temp1 * temp1 * w[j]; + } + + for ( k = 0; k < surv; k++ ) + { + if ( dist < dist_min[k] ) + { + for ( l = surv - 1; l > k; l-- ) + { + dist_min[l] = dist_min[l - 1]; + index[l] = index[l - 1]; + } + dist_min[k] = dist; + index[k] = i; + break; + } + } + } + } + else + { + set_f( dist_min, 3.402823466e+38F, surv ); /* FLT_MAX */ + + for ( i = 0; i < surv; i++ ) + { + index[i] = i; + } + + p_E_ROM_dico = E_ROM_dico; + + for ( i = 0; i < E_ROM_dico_size; i++ ) + { + dist = x[0] - *p_E_ROM_dico++; + dist *= dist; + + for ( j = 1; j < dim; j++ ) + { + temp1 = x[j] - *p_E_ROM_dico++; + dist += temp1 * temp1; + } + + for ( k = 0; k < surv; k++ ) + { + if ( dist < dist_min[k] ) + { + for ( l = surv - 1; l > k; l-- ) + { + dist_min[l] = dist_min[l - 1]; + index[l] = index[l - 1]; + } + dist_min[k] = dist; + index[k] = i; + break; + } + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * vqSimple_w() + * + *-------------------------------------------------------------------*/ + +static int16_t vqSimple_w( + const float *x, /* i : input for quantizer */ + float *y, /* i : quantized value */ + const float *cb, /* i : codebooks */ + const float *w, /* i : weight */ + const int16_t dim, /* i : dimension */ + const int16_t l, /* i : number of candidates */ + const int16_t flag /* i : flag indicationg weighted distortion metric */ +) +{ + int16_t i, j, index; + const float *cbP; + float dist_min, dist, temp; + + index = 0; + dist_min = FLT_MAX; + cbP = cb; + + if ( flag ) + { + for ( i = 0; i < l; i++ ) + { + dist = x[0] - *cbP++; + dist *= ( dist * w[0] ); + for ( j = 1; j < dim; j++ ) + { + temp = x[j] - *cbP++; + dist += temp * temp * w[j]; + } + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + } + else + { + for ( i = 0; i < l; i++ ) + { + dist = x[0] - *cbP++; + dist *= dist; + for ( j = 1; j < dim; j++ ) + { + temp = x[j] - *cbP++; + dist += temp * temp; + } + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; + } + } + } + + /* Reading the selected vector */ + mvr2r( &cb[index * dim], y, dim ); + + return ( index ); +} + +/*-------------------------------------------------------------------* + * MSVQ_Interpol_Tran() + * + *-------------------------------------------------------------------*/ + +static void MSVQ_Interpol_Tran( + float *SWB_env_energy, /* i/o: (original/quantized) energy */ + int16_t *indice /* o : quantized index */ +) +{ + int16_t k, n_band, candInd[N_CAND_TR], ind_tmp[2]; + float env_temp11[SWB_FENV_TRANS / 2], env_temp12[SWB_FENV_TRANS / 2]; + float dist, minDist, tmp_q; + float quant_tmp[SWB_FENV_TRANS], quant_tmp2[SWB_FENV_TRANS]; + float distCand[N_CAND_TR], quant_select[SWB_FENV_TRANS]; + + /* Extract target vector */ + for ( n_band = 0; n_band < DIM_TR1; n_band++ ) + { + env_temp11[n_band] = SWB_env_energy[2 * n_band]; + env_temp12[n_band] = SWB_env_energy[2 * n_band + 1]; + } + + vqWithCand_w( env_temp11, Env_TR_Cdbk1, DIM_TR1, N_CB_TR1, candInd, N_CAND_TR, distCand, NULL, 0 ); + + minDist = FLT_MAX; + for ( k = 0; k < N_CAND_TR; k++ ) + { + for ( n_band = 0; n_band < DIM_TR1; n_band++ ) + { + quant_tmp[n_band] = Env_TR_Cdbk1[candInd[k] * DIM_TR1 + n_band]; + } + + for ( n_band = 0; n_band < DIM_TR2 - 1; n_band++ ) + { + quant_tmp2[n_band] = env_temp12[n_band] - ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ); + } + quant_tmp2[n_band] = env_temp12[n_band] - quant_tmp[n_band]; + ind_tmp[0] = vqSimple_w( quant_tmp2, quant_tmp2, Env_TR_Cdbk2, NULL, DIM_TR2, N_CB_TR2, 0 ); + + for ( n_band = 0; n_band < DIM_TR1; n_band++ ) + { + quant_select[n_band * 2] = quant_tmp[n_band]; + } + + for ( n_band = 0; n_band < DIM_TR2 - 1; n_band++ ) + { + quant_select[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band]; + } + quant_select[n_band * 2 + 1] = quant_tmp[n_band] + quant_tmp2[n_band]; + + dist = 0.f; + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + tmp_q = SWB_env_energy[n_band] - quant_select[n_band]; + dist += tmp_q * tmp_q; + } + + /* Check optimal candidate */ + if ( dist < minDist ) + { + minDist = dist; + indice[0] = candInd[k]; + indice[1] = ind_tmp[0]; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * MSVQ_Interpol() + * + *-------------------------------------------------------------------*/ +static void msvq_interpol( + float *SWB_env_energy, /* i/o: (original/quantized) energy */ + float *w_env, /* i/o: weighting coffecients */ + int16_t *indice /* o : quantized index */ +) +{ + int16_t k, n_band, candInd[N_CAND], ind_tmp[4]; + float dist, minDist, tmp_q; + float env_temp11[SWB_FENV / 2], env_temp12[SWB_FENV / 2]; + float quant_tmp[SWB_FENV], quant_tmp1[SWB_FENV], quant_tmp2[SWB_FENV], distCand[N_CAND]; + float quant_select[SWB_FENV], w_env11[SWB_FENV / 2], w_env12[SWB_FENV / 2]; + float synth_energy[SWB_FENV]; + + /* Extract target vector */ + for ( n_band = 0; n_band < DIM11; n_band++ ) + { + env_temp11[n_band] = SWB_env_energy[2 * n_band]; + env_temp12[n_band] = SWB_env_energy[2 * n_band + 1]; + + w_env11[n_band] = w_env[2 * n_band]; + w_env12[n_band] = w_env[2 * n_band + 1]; + } + + vqWithCand_w( env_temp11, EnvCdbk11, DIM11, N_CB11, candInd, N_CAND, distCand, w_env11, 1 ); + + minDist = FLT_MAX; + for ( k = 0; k < N_CAND; k++ ) + { + for ( n_band = 0; n_band < DIM11; n_band++ ) + { + quant_tmp1[n_band] = EnvCdbk11[candInd[k] * DIM11 + n_band]; + quant_tmp2[n_band] = env_temp11[n_band] - quant_tmp1[n_band]; + } + + ind_tmp[0] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk1st, w_env11, DIM1ST, N_CB1ST, 1 ); + ind_tmp[1] = vqSimple_w( quant_tmp2 + DIM1ST, quant_tmp2 + DIM1ST, EnvCdbk2nd, w_env11 + DIM1ST, DIM2ND, N_CB2ND, 1 ); + + /* Extract vector for odd position */ + for ( n_band = 0; n_band < DIM11; n_band++ ) + { + quant_tmp[n_band] = quant_tmp1[n_band] + quant_tmp2[n_band]; + } + + for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) + { + quant_tmp2[n_band] = env_temp12[n_band] - ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ); + } + + quant_tmp2[n_band] = env_temp12[n_band] - quant_tmp[n_band]; + + ind_tmp[2] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk3rd, w_env12, DIM3RD, N_CB3RD, 1 ); + ind_tmp[3] = vqSimple_w( quant_tmp2 + DIM3RD, quant_tmp2 + DIM3RD, EnvCdbk4th, w_env12 + DIM3RD, DIM4TH, N_CB4TH, 1 ); + + for ( n_band = 0; n_band < DIM11; n_band++ ) + { + quant_select[n_band * 2] = quant_tmp[n_band]; + } + + for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) + { + quant_select[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band]; + } + quant_select[n_band * 2 + 1] = quant_tmp[n_band] + quant_tmp2[n_band]; + + dist = 0.f; + for ( n_band = 0; n_band < SWB_FENV; n_band++ ) + { + tmp_q = SWB_env_energy[n_band] - quant_select[n_band]; + tmp_q = tmp_q * tmp_q; + dist += tmp_q * w_env[n_band]; + } + + /* Check optimal candidate */ + if ( dist < minDist ) + { + minDist = dist; + mvr2r( quant_select, synth_energy, SWB_FENV ); + + indice[0] = candInd[k]; + indice[1] = ind_tmp[0]; + indice[2] = ind_tmp[1]; + indice[3] = ind_tmp[2]; + indice[4] = ind_tmp[3]; + } + } + + mvr2r( synth_energy, SWB_env_energy, SWB_FENV ); + + return; +} + +/*-------------------------------------------------------------------* + * msvq_interpol_2() + * + * + *-------------------------------------------------------------------*/ + +static void msvq_interpol_2( + float *hq_generic_fenv, /* i/o: (original/quantized) energy */ + const float *w_env, /* i : weighting coffecients */ + int16_t *indice, /* o : quantized index */ + const int16_t nenv /* i : the number of envelopes */ +) +{ + int16_t k, n_band, candInd[N_CAND], ind_tmp[4]; + float dist, minDist, tmp_q; + float env_temp11[SWB_FENV / 2], env_temp12[SWB_FENV / 2]; + float quant_tmp[SWB_FENV], quant_tmp1[SWB_FENV], quant_tmp2[SWB_FENV], distCand[N_CAND]; + float quant_select[SWB_FENV], w_env11[SWB_FENV / 2], w_env12[SWB_FENV / 2]; + float synth_energy[SWB_FENV]; + + /* Extract target vector */ + for ( n_band = 0; n_band < DIM11 - 1; n_band++ ) + { + env_temp11[n_band] = hq_generic_fenv[2 * n_band]; + w_env11[n_band] = w_env[2 * n_band]; + } + env_temp11[DIM11 - 1] = hq_generic_fenv[2 * ( DIM11 - 2 ) + 1]; + w_env11[DIM11 - 1] = w_env[2 * ( DIM11 - 2 ) + 1]; + + env_temp12[0] = hq_generic_fenv[0]; + w_env12[0] = w_env[0]; + for ( n_band = 1; n_band < DIM11 - 1; n_band++ ) + { + env_temp12[n_band] = hq_generic_fenv[2 * n_band - 1]; + w_env12[n_band] = w_env[2 * n_band - 1]; + } + + vqWithCand_w( env_temp11, EnvCdbk11, DIM11, N_CB11, candInd, N_CAND, distCand, w_env11, 1 ); + + minDist = FLT_MAX; + for ( k = 0; k < N_CAND; k++ ) + { + for ( n_band = 0; n_band < DIM11; n_band++ ) + { + quant_tmp1[n_band] = EnvCdbk11[candInd[k] * DIM11 + n_band]; + quant_tmp2[n_band] = env_temp11[n_band] - quant_tmp1[n_band]; + } + + ind_tmp[0] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk1st, w_env11, DIM1ST, N_CB1ST, 1 ); + ind_tmp[1] = vqSimple_w( quant_tmp2 + DIM1ST, quant_tmp2 + DIM1ST, EnvCdbk2nd, w_env11 + DIM1ST, DIM2ND, N_CB2ND, 1 ); + + /* Extract vector for odd position */ + for ( n_band = 0; n_band < DIM11; n_band++ ) + { + quant_tmp[n_band] = quant_tmp1[n_band] + quant_tmp2[n_band]; + } + + quant_tmp2[0] = env_temp12[0] - quant_tmp[0]; + for ( n_band = 1; n_band < DIM12 - 1; n_band++ ) + { + quant_tmp2[n_band] = env_temp12[n_band] - ( ( quant_tmp[n_band - 1] + quant_tmp[n_band] ) / 2.f ); + } + + ind_tmp[2] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk3rd, w_env12, DIM3RD, N_CB3RD, 1 ); + ind_tmp[3] = vqSimple_w( quant_tmp2 + DIM3RD, quant_tmp2 + DIM3RD, EnvCdbk3rd, w_env12 + DIM3RD, DIM3RD, N_CB3RD, 1 ); + + for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) + { + quant_select[n_band * 2] = quant_tmp[n_band]; + } + quant_select[11] = quant_tmp[DIM12 - 1]; + + quant_select[0] += quant_tmp2[0]; + for ( n_band = 1; n_band < DIM12 - 1; n_band++ ) + { + quant_select[n_band * 2 - 1] = ( ( quant_tmp[n_band - 1] + quant_tmp[n_band] ) / 2.f ) + quant_tmp2[n_band]; + } + + dist = 0.f; + for ( n_band = 0; n_band < SWB_FENV - 2; n_band++ ) + { + tmp_q = hq_generic_fenv[n_band] - quant_select[n_band]; + tmp_q = tmp_q * tmp_q; + dist += tmp_q * w_env[n_band]; + } + + /* Check optimal candidate */ + if ( dist < minDist ) + { + minDist = dist; + mvr2r( quant_select, synth_energy, SWB_FENV - 2 ); + synth_energy[SWB_FENV - 2] = 0; + synth_energy[SWB_FENV - 1] = 0; + + indice[0] = candInd[k]; + indice[1] = ind_tmp[0]; + indice[2] = ind_tmp[1]; + indice[3] = ind_tmp[2]; + indice[4] = ind_tmp[3]; + } + } + + mvr2r( synth_energy, hq_generic_fenv, nenv ); + + return; +} + +/*-------------------------------------------------------------------* + * calculate_tonality() + * + * Calculate tonality + *-------------------------------------------------------------------*/ + +static void calculate_tonality( + const float *org, /* i : MDCT coefficients of original */ + const float *gen, /* i : MDCT coefficients of generated signal */ + float *SFM_org, /* o : Spectral Flatness results */ + float *SFM_gen, /* o : Spectral Flatness results */ + const int16_t length /* i : length for calculating tonality */ +) +{ + int16_t n_coeff; + float am_org, am_gen, gm_org, gm_gen; + float inv_len, max_val, mult; + float org_spec[80], gen_spec[80]; + + /* to reduce dynamic range of original spectrum */ + max_val = EPSILON; + for ( n_coeff = 0; n_coeff < length; n_coeff++ ) + { + org_spec[n_coeff] = (float) fabs( org[n_coeff] ); + + if ( max_val < org_spec[n_coeff] ) + { + max_val = org_spec[n_coeff]; + } + } + mult = 25.f / max_val; + + for ( n_coeff = 0; n_coeff < length; n_coeff++ ) + { + org_spec[n_coeff] *= mult; + } + + max_val = EPSILON; + for ( n_coeff = 0; n_coeff < length; n_coeff++ ) + { + gen_spec[n_coeff] = (float) fabs( gen[n_coeff] ); + + if ( max_val < gen_spec[n_coeff] ) + { + max_val = gen_spec[n_coeff]; + } + } + mult = 25.f / max_val; + + for ( n_coeff = 0; n_coeff < length; n_coeff++ ) + { + gen_spec[n_coeff] *= mult; + } + + inv_len = 1.f / (float) length; + + am_org = EPSILON; + am_gen = EPSILON; + gm_org = 1.f; + gm_gen = 1.f; + + for ( n_coeff = 0; n_coeff < length; n_coeff++ ) + { + am_org += org_spec[n_coeff]; + am_gen += gen_spec[n_coeff]; + gm_org *= org_spec[n_coeff]; + gm_gen *= gen_spec[n_coeff]; + } + + *SFM_org = 10.f * ( (float) log10( am_org * inv_len ) - inv_len * (float) log10( gm_org ) ); + *SFM_org = max( 0.0001f, min( *SFM_org, 5.993f ) ); + *SFM_gen = 10.f * ( (float) log10( am_gen * inv_len ) - inv_len * (float) log10( gm_gen ) ); + *SFM_gen = max( 0.0001f, min( *SFM_gen, 5.993f ) ); + + return; +} + +/*-------------------------------------------------------------------* + * energy_control() + * + *-------------------------------------------------------------------*/ + +static void energy_control( + Encoder_State *st, /* i/o: encoder structure */ + const int16_t core, /* i : core */ + const int16_t mode, /* i : SHB BWE class */ + const int16_t coder_type, /* i : SHB BWE class */ + const float *org, /* i : input spectrum */ + const int16_t offset, /* i : frequency offset */ + float *energy_factor /* o : energy factor */ +) +{ + int16_t n_band; + float gamma; + int16_t core_type; + float SWB_signal[L_FRAME32k], SFM_org[SWB_FENV], SFM_gen[SWB_FENV]; + int16_t max_band = SWB_FENV, band_step = 1; + + if ( core == ACELP_CORE ) + { + gamma = 0.35f; + if ( coder_type != AUDIO && st->total_brate <= ACELP_8k00 ) + { + core_type = 0; + } + else + { + core_type = 1; + } + + get_normalize_spec( core, st->extl, mode, core_type, org, SWB_signal, &( st->hBWE_FD->prev_L_swb_norm1 ), offset ); + + if ( st->extl == WB_BWE ) + { + max_band = 4; + band_step = 2; + } + } + else /* HQ core */ + { + gamma = 0.55f; + get_normalize_spec( core, -1, mode, -1, org, SWB_signal, &( st->hBWE_FD->prev_L_swb_norm1 ), offset ); + + if ( offset == HQ_GENERIC_FOFFSET_32K ) + { + max_band = 12; + } + } + + for ( n_band = 0; n_band < max_band; n_band += band_step ) + { + calculate_tonality( org + swb_bwe_subband[n_band] + offset, SWB_signal + swb_bwe_subband[n_band] + offset, &SFM_org[n_band], &SFM_gen[n_band], swb_bwe_subband[n_band + band_step] - swb_bwe_subband[n_band] ); + + if ( SFM_gen[n_band] < 0.75 * SFM_org[n_band] ) + { + energy_factor[n_band] = ( SFM_gen[n_band] / SFM_org[n_band] ); + + if ( energy_factor[n_band] < gamma ) + { + energy_factor[n_band] = gamma; + } + } + else + { + energy_factor[n_band] = 1.0f; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * SWB_BWE_encoding() + * + * SWB BWE encoder + *-------------------------------------------------------------------*/ + +static int16_t SWB_BWE_encoding( + Encoder_State *st, /* i/o: Encoder state structure */ + const float *insig, /* i : delayed original input signal at 32kHz */ + const float *insig_lp, /* i : delayed original lowband input signal at 16kHz */ + const float *insig_hp, /* i : delayed original highband input signal at 16kHz */ + const float *synth, /* i : delayed ACELP core synthesis at 12.8kHz */ + const float *yos, /* i : MDCT coefficients of the windowed original input signal at 32kHz */ + float *SWB_fenv, /* o : frequency-domain quantized BWE envelope */ + const float tilt_nb, /* i : SWB tilt */ + const int16_t st_offset /* i : start frequency offset for BWE envelope */ +) +{ + int16_t IsTransient, mode; + int16_t index; + float SWB_tenv_tmp[SWB_TENV]; + float SWB_tenv[SWB_TENV]; + float global_gain; + float energy; + float max_val; + int16_t i, n_coeff, n_band, pos, indice[6]; + float tilt, WB_tenv_orig, WB_tenv_syn, Rat_tenv; + float energy_factor[SWB_FENV], w_env[SWB_FENV]; + int16_t L; + int16_t IsTransient_LF; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( st->L_frame == L_FRAME ) + { + L = L_SUBFR; + } + else + { + L = L_SUBFR16k; + } + + /* HF transient detect */ + IsTransient = detect_transient( st, insig_hp, L_FRAME16k ); + + /* LF transient detect */ + IsTransient_LF = 0; + for ( n_band = 0; n_band < 4; n_band++ ) + { + energy = EPSILON; + for ( i = 0; i < L; i++ ) + { + energy += insig_lp[i + n_band * L] * insig_lp[i + n_band * L]; + } + + if ( energy > 5.5f * st->hBWE_FD->EnergyLF ) + { + IsTransient_LF = 1; + } + + st->hBWE_FD->EnergyLF = energy; + } + calc_tilt_bwe( insig, &tilt, L_FRAME32k ); + if ( IsTransient == 1 && ( tilt > 8.0 || st->clas > 1 ) ) + { + IsTransient = 0; + st->TransientHangOver = 0; + } + + if ( IsTransient == 1 ) + { + mode = IsTransient; + push_indice( hBstr, IND_SWB_CLASS, mode, 2 ); + + /* Energy for the different bands and global energies */ + global_gain = 0; + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + energy = EPSILON; + for ( n_coeff = swb_bwe_trans_subband[n_band] + st_offset; n_coeff < swb_bwe_trans_subband[n_band + 1] + st_offset; n_coeff++ ) + { + energy += yos[n_coeff] * yos[n_coeff]; + } + global_gain += energy; + SWB_fenv[n_band] = energy; + } + global_gain *= 0.5f; + + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + SWB_fenv[n_band] = 10.0f * (float) log10( SWB_fenv[n_band] / swb_bwe_trans_subband_width[n_band] ) - Mean_env_tr[n_band]; + } + + WB_tenv_orig = EPSILON; + WB_tenv_syn = EPSILON; + for ( n_band = 0; n_band < SWB_TENV; n_band++ ) + { + SWB_tenv[n_band] = EPSILON; + + for ( i = 0; i < L_SUBFR16k; i++ ) + { + SWB_tenv[n_band] += insig_hp[i + n_band * L_SUBFR16k] * insig_hp[i + n_band * L_SUBFR16k]; + } + + for ( i = 0; i < L; i++ ) + { + WB_tenv_syn += synth[i + n_band * L] * synth[i + n_band * L]; + WB_tenv_orig += insig_lp[i + n_band * L] * insig_lp[i + n_band * L]; + } + + SWB_tenv[n_band] = (float) ( sqrt( SWB_tenv[n_band] * INV_L_SUBFR16k ) ); + } + + Rat_tenv = (float) sqrt( WB_tenv_syn / WB_tenv_orig ); + + if ( Rat_tenv < 0.5 ) + { + Rat_tenv *= 1.2f; + } + else if ( Rat_tenv > 1 ) + { + Rat_tenv = 1.0f; + } + + for ( n_band = 0; n_band < SWB_TENV; n_band++ ) + { + SWB_tenv[n_band] *= Rat_tenv; + } + + max_val = SWB_tenv[0]; + pos = 0; + for ( n_band = 1; n_band < SWB_TENV; n_band++ ) + { + if ( SWB_tenv[n_band] > max_val ) + { + max_val = SWB_tenv[n_band]; + pos = n_band; + } + } + + for ( n_band = 1; n_band < SWB_TENV; n_band++ ) + { + if ( SWB_tenv[n_band] > 5.0f * SWB_tenv[n_band - 1] ) + { + break; + } + } + + if ( n_band < SWB_TENV ) + { + energy = 0.0f; + for ( n_band = ( pos + 1 ); n_band < SWB_TENV; n_band++ ) + { + energy += SWB_tenv[n_band]; + } + if ( pos == SWB_TENV - 1 ) + { + energy = 0.0f; + } + else + { + energy /= ( SWB_TENV - pos - 1 ); + } + + for ( n_band = 0; n_band < pos; n_band++ ) + { + SWB_tenv[n_band] *= 0.5f; + } + + SWB_tenv[pos] *= 1.005f; + if ( energy < SWB_tenv[pos] ) + { + for ( n_band = pos + 1; n_band < SWB_TENV; n_band++ ) + { + SWB_tenv[n_band] *= 0.9f; + } + } + } + else + { + for ( n_band = 1; n_band < SWB_TENV; n_band++ ) + { + if ( SWB_tenv[n_band - 1] > SWB_tenv[n_band] ) + { + SWB_tenv[n_band - 1] = 0.5f * ( SWB_tenv[n_band - 1] + SWB_tenv[n_band] ); + } + else + { + SWB_tenv[n_band] = 0.5f * ( SWB_tenv[n_band - 1] + SWB_tenv[n_band] ); + } + } + + for ( n_band = 0; n_band < SWB_TENV; n_band++ ) + { + SWB_tenv[n_band] *= 0.9f; + } + } + + if ( IsTransient_LF == 0 && st->coder_type == INACTIVE && st->TransientHangOver == 1 ) + { + for ( n_band = 0; n_band < SWB_TENV; n_band++ ) + { + SWB_tenv[n_band] *= 0.5f; + } + for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) + { + SWB_fenv[n_band] *= 0.05f; + } + } + else + { + SWB_fenv[2] *= 0.1f; + SWB_fenv[3] *= 0.05f; + } + + for ( n_band = 0; n_band < SWB_TENV; n_band++ ) + { + SWB_tenv_tmp[n_band] = (float) log10( SWB_tenv[n_band] + EPSILON ) * FAC_LOG2; + if ( SWB_tenv_tmp[n_band] > 15 ) + { + index = 15; + } + else if ( SWB_tenv_tmp[n_band] < 0 ) + { + index = 0; + } + else + { + index = (int16_t) ( SWB_tenv_tmp[n_band] + 0.5f ); + } + + push_indice( hBstr, IND_SWB_TENV, index, 4 ); + } + + MSVQ_Interpol_Tran( SWB_fenv, indice ); + + push_indice( hBstr, IND_SWB_FENV, indice[0], 7 ); + push_indice( hBstr, IND_SWB_FENV, indice[1], 6 ); + } + else + { + /* Energy for the different bands and global energies */ + global_gain = 0; + for ( n_band = 0; n_band < SWB_FENV; n_band++ ) + { + energy = EPSILON; + for ( n_coeff = swb_bwe_subband[n_band] + st_offset; n_coeff < swb_bwe_subband[n_band + 1] + st_offset; n_coeff++ ) + { + energy += yos[n_coeff] * yos[n_coeff]; + } + + if ( n_band < SWB_FENV - 2 ) + { + global_gain += energy; + } + SWB_fenv[n_band] = energy; + } + + global_gain *= 0.5f; + + mode = FD_BWE_class( yos, global_gain, tilt_nb, st ); + + push_indice( hBstr, IND_SWB_CLASS, mode, 2 ); + + energy_control( st, ACELP_CORE, mode, -1, yos, st_offset, energy_factor ); + + for ( n_band = 0; n_band < SWB_FENV; n_band++ ) + { + SWB_fenv[n_band] *= energy_factor[n_band]; + SWB_fenv[n_band] = 10.0f * (float) log10( SWB_fenv[n_band] * swb_inv_bwe_subband_width[n_band] ); + } + + freq_weights( SWB_fenv, w_NOR, w_env, SWB_FENV ); + + for ( n_band = 0; n_band < SWB_FENV; n_band++ ) + { + SWB_fenv[n_band] -= Mean_env[n_band]; + } + + /* Energy VQ */ + msvq_interpol( SWB_fenv, w_env, indice ); + + push_indice( hBstr, IND_SWB_FENV, indice[0], 5 ); + push_indice( hBstr, IND_SWB_FENV, indice[1], 7 ); + push_indice( hBstr, IND_SWB_FENV, indice[2], 6 ); + push_indice( hBstr, IND_SWB_FENV, indice[3], 5 ); + push_indice( hBstr, IND_SWB_FENV, indice[4], 6 ); + } + + st->hBWE_FD->prev_mode = mode; + st->hBWE_FD->prev_global_gain = global_gain; + + return mode; +} + + +/*-------------------------------------------------------------------* + * decision_hq_generic_class() + * + *-------------------------------------------------------------------*/ + +static int16_t decision_hq_generic_class( + const float *coefs, /* i : original MDCT spectrum */ + const int16_t hq_generic_offset /* i : frequency offset of high frequency spectrum */ +) +{ + int16_t i, k; + float p, a, e; + float p2a; + float avgp2a; + int16_t nband; + + if ( hq_generic_offset == HQ_GENERIC_FOFFSET_24K4 ) + { + nband = 10; + } + else + { + nband = 8; + } + + avgp2a = 0.f; + for ( k = 0; k < nband; k++ ) + { + a = 0.0f; + p = 0.0f; + for ( i = swb_bwe_subband[k] + hq_generic_offset; i < swb_bwe_subband[k + 1] + hq_generic_offset; i++ ) + { + e = coefs[i] * coefs[i]; + + if ( e > p ) + { + p = e; + } + + a += e; + } + + if ( a > 0.0f ) + { + a *= swb_inv_bwe_subband_width[k]; + p2a = 10.0f * (float) log10( p / a ); + avgp2a += p2a; + } + } + + avgp2a /= (float) ( nband ); + + if ( avgp2a > 8.6f ) + { + return HQ_GENERIC_EXC1; + } + else + { + return HQ_GENERIC_EXC0; + } +} + +/*-------------------------------------------------------------------* + * hq_generic_hf_encoding() + * + *-------------------------------------------------------------------*/ + +void hq_generic_hf_encoding( + const float *coefs, /* i : MDCT coefficients of weighted original */ + float *hq_generic_fenv, /* i/o: energy of SWB envelope */ + const int16_t hq_generic_offset, /* i : frequency offset for extracting energy */ + Encoder_State *st, /* i/o: encoder state structure */ + int16_t *hq_generic_exc_clas, /* o : HF excitation class */ + const int16_t length /* i : Length of spectrum */ +) +{ + int16_t n_coeff, n_band; + float energy; + float energy_factor[SWB_FENV], w_env[SWB_FENV]; + int16_t indice[HQ_GENERIC_NVQIDX]; + int16_t nenv; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) + { + nenv = SWB_FENV; + } + else + { + nenv = SWB_FENV - 2; + } + + for ( n_band = 0; n_band < nenv; n_band++ ) + { + energy = EPSILON; + for ( n_coeff = swb_bwe_subband[n_band] + hq_generic_offset; n_coeff < swb_bwe_subband[n_band + 1] + hq_generic_offset; n_coeff++ ) + { + energy += coefs[n_coeff] * coefs[n_coeff]; + } + + hq_generic_fenv[n_band] = energy; + } + + if ( length == L_SPEC48k ) + { + for ( n_band = 0; n_band < DIM_FB; n_band++ ) + { + energy = EPSILON; + for ( n_coeff = fb_bwe_subband[n_band]; n_coeff < fb_bwe_subband[n_band + 1]; n_coeff++ ) + { + energy += coefs[n_coeff] * coefs[n_coeff]; + } + + hq_generic_fenv[n_band + nenv] = energy; + } + } + + energy_control( st, HQ_CORE, -1, -1, coefs, hq_generic_offset, energy_factor ); + + if ( st->hHQ_core->hq_generic_speech_class == 1 ) + { + push_indice( hBstr, IND_HQ_SWB_EXC_SP_CLAS, 1, 1 ); + *hq_generic_exc_clas = HQ_GENERIC_SP_EXC; + } + else + { + *hq_generic_exc_clas = decision_hq_generic_class( coefs, hq_generic_offset ); + push_indice( hBstr, IND_HQ_SWB_EXC_SP_CLAS, 0, 1 ); + push_indice( hBstr, IND_HQ_SWB_EXC_CLAS, *hq_generic_exc_clas, 1 ); + } + + for ( n_band = 0; n_band < nenv; n_band++ ) + { + hq_generic_fenv[n_band] *= energy_factor[n_band]; + hq_generic_fenv[n_band] = 10.0f * (float) log10( hq_generic_fenv[n_band] * swb_inv_bwe_subband_width[n_band] ); + } + + if ( length == L_SPEC48k ) + { + for ( n_band = 0; n_band < DIM_FB; n_band++ ) + { + hq_generic_fenv[n_band + nenv] = 10.0f * (float) log10( hq_generic_fenv[n_band + nenv] * fb_inv_bwe_subband_width[n_band] ); + } + } + + freq_weights( hq_generic_fenv, w_NOR, w_env, nenv ); + + for ( n_band = 0; n_band < nenv; n_band++ ) + { + hq_generic_fenv[n_band] -= Mean_env[n_band]; + } + + if ( length == L_SPEC48k ) + { + for ( n_band = 0; n_band < DIM_FB; n_band++ ) + { + hq_generic_fenv[n_band + nenv] -= Mean_env_fb[n_band]; + } + } + + /* Energy VQ */ + if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) + { + msvq_interpol( hq_generic_fenv, w_env, indice ); + } + else + { + msvq_interpol_2( hq_generic_fenv, w_env, indice, nenv ); + } + + if ( length == L_SPEC48k ) + { + indice[5] = vqSimple_w( hq_generic_fenv + nenv, hq_generic_fenv + nenv, EnvCdbkFB, NULL, DIM_FB, N_CB_FB, 0 ); + } + + push_indice( hBstr, IND_SWB_FENV_HQ, indice[0], 5 ); + push_indice( hBstr, IND_SWB_FENV_HQ, indice[1], 7 ); + push_indice( hBstr, IND_SWB_FENV_HQ, indice[2], 6 ); + push_indice( hBstr, IND_SWB_FENV_HQ, indice[3], 5 ); + + if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) + { + push_indice( hBstr, IND_SWB_FENV_HQ, indice[4], 6 ); + } + else + { + push_indice( hBstr, IND_SWB_FENV_HQ, indice[4], 5 ); + } + + if ( length == L_SPEC48k ) + { + push_indice( hBstr, IND_FB_FENV_HQ, indice[5], 5 ); + } + + for ( n_band = 0; n_band < nenv; n_band++ ) + { + Word16 tmp, frac, exp; + Word32 L_tmp; + tmp = add( (int16_t) ( hq_generic_fenv[n_band] * 256 ), (int16_t) ( Mean_env[n_band] * 256 ) ); /*Q8 */ + + L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q26 */ + L_tmp = L_shr( L_tmp, 10 ); /* From Q26 to Q16 */ + frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ + + tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ + /* output of Pow2() will be: */ + /* 16384 < Pow2() <= 32767 */ + exp = sub( exp, 13 ); + tmp = shl( tmp, add( exp, 1 ) ); /*Q1 */ + hq_generic_fenv[n_band] = (float) tmp * 0.5f; /*Q1 */ + } + + if ( length == L_SPEC48k ) + { + for ( n_band = 0; n_band < DIM_FB; n_band++ ) + { + Word16 tmp, frac, exp; + Word32 L_tmp; + + tmp = add( (int16_t) ( hq_generic_fenv[n_band + nenv] * 128 ), (int16_t) ( Mean_env_fb[n_band] * 128 ) ); /*Q7 */ + L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q25 */ + L_tmp = L_shr( L_tmp, 9 ); /* From Q25 to Q16 */ + frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ + + tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ + /* output of Pow2() will be: */ + /* 16384 < Pow2() <= 32767 */ + exp = sub( exp, 13 ); + tmp = shl( tmp, add( exp, 1 ) ); /*Q1 */ + hq_generic_fenv[add( n_band, nenv )] = (float) tmp * 0.5f; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * fd_bwe_enc_init() + * + * Initialize FD BWE state structure at the encoder + *-------------------------------------------------------------------*/ + +void fd_bwe_enc_init( + FD_BWE_ENC_HANDLE hBWE_FD /* i/o: FD BWE data handle */ +) +{ + set_f( hBWE_FD->new_input_hp, 0, NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ) ); + set_f( hBWE_FD->old_input, 0, NS2SA( 48000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) ); + set_f( hBWE_FD->old_input_wb, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ) ); + set_f( hBWE_FD->old_input_lp, 0, NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ) ); + set_f( hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + + hBWE_FD->prev_mode = NORMAL; + set_f( hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); + hBWE_FD->prev_L_swb_norm1 = 8; + hBWE_FD->prev_global_gain = 0.0f; + hBWE_FD->modeCount = 0; + hBWE_FD->EnergyLF = 0.0f; + hBWE_FD->mem_old_wtda_swb = 0.0f; + + set_f( hBWE_FD->old_fdbwe_speech, 0.0f, L_FRAME48k ); + hBWE_FD->mem_deemph_old_syn = 0.0f; + + return; +} diff --git a/lib_enc/swb_bwe_enc_hr.c b/lib_enc/swb_bwe_enc_hr.c new file mode 100644 index 0000000000..63e5753650 --- /dev/null +++ b/lib_enc/swb_bwe_enc_hr.c @@ -0,0 +1,508 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * en_band_quant() + * + * Quantize the band envelop + *-------------------------------------------------------------------*/ + +/*! r: quantization index */ +static int16_t en_band_quant( + float *en_band, /* i/o: (un)quantized envelope value */ + const float *env_code, /* i : envelope codebook */ + const int16_t N /* i : codebook dimension */ +) +{ + float maxerr, err; + int16_t i, j, ind; + + maxerr = FLT_MAX; + ind = 0; + + for ( i = 0; i < N; i++ ) + { + err = FLT_MIN; + for ( j = 0; j < 2; j++ ) + { + err += ( en_band[j] - env_code[i * 2 + j] ) * ( en_band[j] - env_code[i * 2 + j] ); + } + if ( err < maxerr ) + { + maxerr = err; + ind = i; + } + } + + en_band[0] = env_code[2 * ind]; + en_band[1] = env_code[2 * ind + 1]; + + return ( ind ); +} + +/*-------------------------------------------------------------------* + * swb_bwe_enc_hr() + * + * HR SWB BWE encoder + *-------------------------------------------------------------------*/ + +void swb_bwe_enc_hr( + Encoder_State *st, /* i/o: encoder state structure */ + const float *new_input, /* i : input signal */ + const int16_t input_frame, /* i : frame length */ + const int16_t unbits /* i : number of core unused bits */ +) +{ + int16_t i, j, k, nBits, nBits_total, nBits_block, Nsv, Nsv2, width_noncoded; + int16_t is_transient, pos; + int16_t x_norm[NSV_MAX * ( WIDTH_BAND + 1 )], x_norm1[NSV_MAX * ( WIDTH_BAND + 1 )]; + float t_audio[L_FRAME48k], t_audio_tmp[L_FRAME48k]; + float gain, gain2, en_band[N_BANDS_BWE_HR]; + int16_t ind1, ind2; + int16_t nq[NSV_MAX], nq2[NSV_MAX]; + float tmpF, min_env; + float en_noncoded; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + /*---------------------------------------------------------------------* + * initializations + *---------------------------------------------------------------------*/ + + ind2 = 0; /* only to suppress warnings */ + Nsv2 = 0; /* only to suppress warnings */ + gain2 = 0; /* only to suppress warnings */ + en_noncoded = 0; /* only to suppress warnings */ + + /* reset memories in case that last frame was a different technology */ + if ( st->last_core == HQ_CORE || st->last_extl != st->extl ) + { + set_f( st->hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); + } + + /* calculate SWB BWE bit-budget (extension layer bitrate + AVQ unused bits from the core layer) */ + nBits = (int16_t) ( st->extl_brate ) / FRAMES_PER_SEC + unbits; + nBits_total = nBits; + + + /*---------------------------------------------------------------------* + * detect transient frames + *---------------------------------------------------------------------*/ + + is_transient = detect_transient( st, new_input, input_frame ); + push_indice( hBstr, IND_HR_IS_TRANSIENT, is_transient, 1 ); + + /*---------------------------------------------------------------------* + * OLA and MDCT + *---------------------------------------------------------------------*/ + + wtda( new_input, t_audio_tmp, st->hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, input_frame ); + + direct_transform( t_audio_tmp, t_audio, is_transient, input_frame, st->element_mode ); + + if ( is_transient ) + { + nBits = -1; /* is_transient flag */ + nBits_block = nBits_total / NUM_TIME_SWITCHING_BLOCKS; + nBits += nBits_total % NUM_TIME_SWITCHING_BLOCKS; + + /* set width of noncoded (blind estimated) spectrum */ + if ( st->extl == SWB_BWE_HIGHRATE ) + { + width_noncoded = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; + } + else /* st->extl == FB_BWE_HIGHRATE */ + { + width_noncoded = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; + } + + /*---------------------------------------------------------------------* + * transient frames: processing in blocks (subframes) + *---------------------------------------------------------------------*/ + + for ( k = 0; k < NUM_TIME_SWITCHING_BLOCKS; k++ ) + { + nBits += nBits_block; + + /* compute energy of noncoded (14.4-20kHz) spectrum */ + if ( st->extl == FB_BWE_HIGHRATE ) + { + en_noncoded = sum2_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF, width_noncoded ) + 0.001f; + en_noncoded = (float) sqrt( en_noncoded / width_noncoded ); + } + + /* keep only frequencies in interest */ + set_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS, 0, NUM_TRANS_START_FREQ_COEF ); + set_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS, 0, ( input_frame - L_FRAME32k ) / NUM_TIME_SWITCHING_BLOCKS ); + + /*---------------------------------------------------------------------* + * global gain coding + *---------------------------------------------------------------------*/ + + /* compute and quantize global energy */ + gain = sum2_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF, WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR ) + 0.001f; + gain = (float) sqrt( gain ) / ( WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR ); + ind1 = gain_quant( &gain, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); + + push_indice( hBstr, IND_HR_GAIN, ind1, NBITS_GLOB_GAIN_BWE_HR ); + nBits -= NBITS_GLOB_GAIN_BWE_HR; + + /* normalization with global gain */ + tmpF = 1 / gain; + for ( i = 0; i < WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR; i++ ) + { + t_audio[NUM_TRANS_START_FREQ_COEF + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + i] *= tmpF; + } + + /*---------------------------------------------------------------------* + * envelope coding + *---------------------------------------------------------------------*/ + + /* compute energy per band */ + for ( i = 0; i < N_BANDS_TRANS_BWE_HR; i++ ) + { + en_band[i] = sum2_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i * WIDTH_TRANS_FREQ_COEF, WIDTH_TRANS_FREQ_COEF ) + 0.001f; + en_band[i] = (float) sqrt( en_band[i] / ( WIDTH_TRANS_FREQ_COEF ) ); + } + + /* Q energy per band */ + if ( k == 0 ) + { + ind1 = en_band_quant( en_band, swb_hr_env_code3, NUM_ENVLOPE_CODE_HR_TR ); + push_indice( hBstr, IND_HR_ENVELOPE, ind1, NBITS_ENVELOPE_BWE_HR_TR ); + nBits -= NBITS_ENVELOPE_BWE_HR_TR; + ind2 = ind1; + } + else + { + if ( ind2 < NUM_ENVLOPE_CODE_HR_TR2 ) + { + ind1 = en_band_quant( en_band, swb_hr_env_code3, NUM_ENVLOPE_CODE_HR_TR2 ); + } + else + { + ind1 = en_band_quant( en_band, swb_hr_env_code3 + ( NUM_ENVLOPE_CODE_HR_TR2 * 2 ), NUM_ENVLOPE_CODE_HR_TR2 ); + } + + push_indice( hBstr, IND_HR_ENVELOPE, ind1, NBITS_ENVELOPE_BWE_HR_TR - 1 ); + nBits -= ( NBITS_ENVELOPE_BWE_HR_TR - 1 ); + } + + /* normalize spectrum per bands */ + for ( i = 0; i < N_BANDS_TRANS_BWE_HR; i++ ) + { + tmpF = 1 / en_band[i]; + for ( j = 0; j < WIDTH_TRANS_FREQ_COEF; j++ ) + { + t_audio[k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i * WIDTH_TRANS_FREQ_COEF + j] *= tmpF; + } + } + + /*---------------------------------------------------------------------* + * estimate energy of noncoded spectrum (14.4-20kHz) + *---------------------------------------------------------------------*/ + + if ( st->extl == SWB_BWE_HIGHRATE ) + { + en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1]; + } + else /* st->extl == FB_BWE_HIGHRATE */ + { + en_noncoded /= ( gain * en_band[N_BANDS_TRANS_BWE_HR - 1] ); + + ind1 = 0; + if ( en_noncoded < BWE_HR_TRANS_EN_LIMIT1 ) + { + ind1 = 1; + en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1] * BWE_HR_TRANS_EN_LIMIT1; + } + else if ( en_noncoded < BWE_HR_TRANS_EN_LIMIT2 ) + { + ind1 = 2; + en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1] * BWE_HR_TRANS_EN_LIMIT2; + } + else if ( en_noncoded < BWE_HR_TRANS_EN_LIMIT3 ) + { + ind1 = 3; + en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1] * BWE_HR_TRANS_EN_LIMIT3; + } + else + { + en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1]; + } + push_indice( hBstr, IND_HR_HF_GAIN, ind1, NBITS_HF_GAIN_BWE_HR ); + nBits -= NBITS_HF_GAIN_BWE_HR; + } + + /*---------------------------------------------------------------------* + * AVQ coding (quantize normalized spectrum) + *---------------------------------------------------------------------*/ + + Nsv = ( NUM_TRANS_END_FREQ_COEF - NUM_TRANS_START_FREQ_COEF ) / WIDTH_BAND; + AVQ_cod( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF, x_norm, nBits, Nsv ); + AVQ_encmux( hBstr, st->extl, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); + } + } + else /* !is_transient */ + { + nBits--; /* is_transient flag */ + + /*---------------------------------------------------------------------* + * processing of normal (non-transient) frames + *---------------------------------------------------------------------*/ + + /* set width of noncoded (blind estimated) spectrum */ + if ( st->extl == SWB_BWE_HIGHRATE ) + { + width_noncoded = L_FRAME32k - NUM_NONTRANS_END_FREQ_COEF; + } + else /* st->extl == FB_BWE_HIGHRATE */ + { + width_noncoded = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_END_FREQ_COEF; + } + + /* compute energy of noncoded (14.4-20kHz) spectrum */ + if ( st->extl == FB_BWE_HIGHRATE ) + { + en_noncoded = sum2_f( t_audio + NUM_NONTRANS_END_FREQ_COEF, width_noncoded ) + 0.001f; + en_noncoded = (float) sqrt( en_noncoded / width_noncoded ); + } + + /* keep only frequencies in interest */ + set_f( t_audio, 0, NUM_NONTRANS_START_FREQ_COEF ); + set_f( t_audio + NUM_NONTRANS_END_FREQ_COEF, 0, input_frame - NUM_NONTRANS_END_FREQ_COEF ); + + /*---------------------------------------------------------------------* + * global gain coding + *---------------------------------------------------------------------*/ + + /* compute and quantize global gain */ + gain = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF, WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR ) + 0.001f; + gain = (float) sqrt( gain ) / ( WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR ); + ind1 = gain_quant( &gain, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); + + push_indice( hBstr, IND_HR_GAIN, ind1, NBITS_GLOB_GAIN_BWE_HR ); + nBits -= NBITS_GLOB_GAIN_BWE_HR; + + /* normalization with global gain */ + tmpF = 1 / gain; + for ( i = 0; i < WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR; i++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= tmpF; + } + + /*---------------------------------------------------------------------* + * envelope coding + *---------------------------------------------------------------------*/ + + /* compute energy per band */ + for ( i = 0; i < N_BANDS_BWE_HR; i++ ) + { + en_band[i] = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF + i * WIDTH_NONTRANS_FREQ_COEF, WIDTH_NONTRANS_FREQ_COEF ) + 0.001f; + en_band[i] = (float) sqrt( en_band[i] / WIDTH_NONTRANS_FREQ_COEF ); + } + + /* Q energy per band */ + ind1 = en_band_quant( en_band, swb_hr_env_code1, NUM_ENVLOPE_CODE_HR1 ); + ind2 = en_band_quant( en_band + 2, swb_hr_env_code2, NUM_ENVLOPE_CODE_HR2 ); + + push_indice( hBstr, IND_HR_ENVELOPE, ind1, NBITS_ENVELOPE_BWE_HR1 ); + push_indice( hBstr, IND_HR_ENVELOPE, ind2, NBITS_ENVELOPE_BWE_HR2 ); + + nBits -= NBITS_ENVELOPE_BWE_HR1 + NBITS_ENVELOPE_BWE_HR2; + + /* normalize spectrum per bands */ + for ( i = 0; i < N_BANDS_BWE_HR; i++ ) + { + tmpF = 1 / en_band[i]; + for ( j = 0; j < WIDTH_NONTRANS_FREQ_COEF; j++ ) + { + t_audio[NUM_NONTRANS_START_FREQ_COEF + i * WIDTH_NONTRANS_FREQ_COEF + j] *= tmpF; + } + } + + /*---------------------------------------------------------------------* + * choose sub-bands to be quantized + *---------------------------------------------------------------------*/ + + /* find the subband with the min envelope */ + pos = minimum( en_band, N_BANDS_BWE_HR, &min_env ); + + /* decide the spectrum to be quantized */ + if ( nBits_total > NBITS_THRESH_BWE_HR ) + { + i = NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF; + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, t_audio_tmp, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF ); + } + else + { + /* reorder the spectrum */ + ind1 = ( pos * 64 + pos / 2 * WIDTH_BAND ); + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, t_audio_tmp, ind1 ); + + ind2 = ( ( pos + 1 ) * 64 + ( pos + 1 ) / 2 * WIDTH_BAND ); + mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF + ind2, t_audio_tmp + ind1, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - ind2 ); + + i = ind1 + NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - ind2; + } + + /*---------------------------------------------------------------------* + * estimate energy of noncoded spectrum (14.4-20kHz) + *---------------------------------------------------------------------*/ + + if ( st->extl == SWB_BWE_HIGHRATE ) + { + en_noncoded = 0.5f * min_env; + } + else /* st->extl == FB_BWE_HIGHRATE */ + { + en_noncoded /= ( gain * min_env ); + + ind1 = 0; + if ( en_noncoded < BWE_HR_NONTRANS_EN_LIMIT1 ) + { + ind1 = 1; + en_noncoded = 0.5f * min_env * BWE_HR_NONTRANS_EN_LIMIT1; + } + else if ( en_noncoded > BWE_HR_NONTRANS_EN_LIMIT2 ) + { + ind1 = 2; + en_noncoded = min_env * BWE_HR_NONTRANS_EN_LIMIT2; + } + else if ( en_noncoded > BWE_HR_NONTRANS_EN_LIMIT3 ) + { + ind1 = 3; + en_noncoded = min_env * BWE_HR_NONTRANS_EN_LIMIT3; + } + else + { + en_noncoded = 0.5f * min_env; + } + + push_indice( hBstr, IND_HR_HF_GAIN, ind1, NBITS_HF_GAIN_BWE_HR ); + nBits -= NBITS_HF_GAIN_BWE_HR; + } + + /*---------------------------------------------------------------------* + * AVQ coding (quantize normalized spectrum) + *---------------------------------------------------------------------*/ + + Nsv = i / WIDTH_BAND; + AVQ_cod( t_audio_tmp, x_norm, nBits, Nsv ); + AVQ_encmux( hBstr, st->extl, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); + /*---------------------------------------------------------------------* + * second stage coding + *---------------------------------------------------------------------*/ + + if ( nBits >= 9 + NBITS_GLOB_GAIN_BWE_HR && sum_s( nq, Nsv ) > 0 ) + { + /* select spectrum of the second stage coding */ + k = 0; + for ( i = 0; i < Nsv; i++ ) + { + if ( nq[i] == 0 ) + { + for ( j = 0; j < WIDTH_BAND; j++ ) + { + t_audio[k++] = t_audio_tmp[i * WIDTH_BAND + j]; + } + } + } + + for ( i = 0; i < Nsv; i++ ) + { + if ( nq[i] != 0 ) + { + for ( j = 0; j < WIDTH_BAND; j++ ) + { + t_audio[k++] = t_audio_tmp[i * WIDTH_BAND + j] - x_norm[i * WIDTH_BAND + j]; + } + } + } + + /* calculate the number of subbands according to the rest bits */ + if ( nBits > 396 ) + { + Nsv2 = 33; + } + else + { + Nsv2 = nBits / 12; + } + + /* second stage global gain estimation and coding */ + gain2 = sum2_f( t_audio, Nsv2 * WIDTH_BAND ) + 0.001f; + gain2 = (float) ( 16 * sqrt( gain2 / ( Nsv2 * WIDTH_BAND ) ) ); + ind1 = gain_quant( &gain2, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); + + push_indice( hBstr, IND_HR_GAIN, ind1, NBITS_GLOB_GAIN_BWE_HR ); + nBits -= NBITS_GLOB_GAIN_BWE_HR; + + /* normalize with global gain */ + gain2 *= 0.0625f; /* 1/16 */ + tmpF = 1 / gain2; + for ( i = 0; i < Nsv2 * WIDTH_BAND; i++ ) + { + t_audio[i] *= tmpF; + } + + set_s( nq2, 0, Nsv ); + + AVQ_cod( t_audio, x_norm1, nBits, Nsv2 ); + AVQ_encmux( hBstr, st->extl, x_norm1, &nBits, Nsv2, nq2, 0, Nsv2 - 1 ); + } + } + + /* write unused bits */ + while ( nBits > 0 ) + { + i = min( nBits, 16 ); + push_indice( hBstr, IND_UNUSED, 0, i ); + nBits -= i; + } + + + return; +} diff --git a/lib_enc/swb_bwe_enc_lr.c b/lib_enc/swb_bwe_enc_lr.c new file mode 100644 index 0000000000..7273972d7c --- /dev/null +++ b/lib_enc/swb_bwe_enc_lr.c @@ -0,0 +1,706 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "stat_com.h" +#include "wmops.h" + +/*--------------------------------------------------------------------------* + * GetSubbandCorrIndex2_har() + * + * Finds the index of best correlation between highband (*inBuf) and lowband (*predBuf) for current subband of length (fLen) + *--------------------------------------------------------------------------*/ + +/*! r: best correlation index */ +static int16_t GetSubbandCorrIndex2_har( + const float *inBuf, /* i : target buffer (i.e., highband signal) */ + const float *predBuf, /* i : prediction buffer (i.e., lowband) */ + const int16_t fLen, /* i : window length */ + const int16_t maxLag, /* i : search length */ + const GainItem *G_item, /* i : nZero nonzero components (value+index) */ + const int16_t nZero, /* i : number of nonzero components used in */ + int16_t *prev_frame_bstindx /* i : previous frame best Indices */ +) +{ + int16_t bestIdx, i, j; + float corr, energy, corr_sq; + float lagCorr_sq, lagEnergy, eOld; + int16_t absPos; + int16_t N1, N2; + + + absPos = 0; + bestIdx = 0; + lagCorr_sq = 0.0f; + lagEnergy = 1e30f; + + for ( i = 0, energy = 0.0f; i < fLen - 1; i++, predBuf++ ) + { + energy += *predBuf * *predBuf; + } + + predBuf -= fLen - 1; + eOld = 0.0f; + N1 = max( 0, *prev_frame_bstindx - maxLag / 2 ); + if ( *prev_frame_bstindx < 0 ) + { + N2 = maxLag - 1; + } + else + { + N2 = min( maxLag - 1, *prev_frame_bstindx + maxLag / 2 ); + } + + predBuf += N1; + + /* find the best lag */ + for ( i = N1; i <= N2; i++ ) + { + corr = 0.0f; + + /* get the energy, remove the old and update with the new energy index */ + for ( j = 0, energy = 0.0f; j < fLen; j++, predBuf++ ) + { + energy += *predBuf * *predBuf; + } + + predBuf -= fLen; + + /* energy to be removed in the next lag */ + eOld = *predBuf; + eOld *= eOld; + + /* get cross-correlation */ + if ( energy ) + { + for ( j = 0, corr = 0.0f; j < nZero; j++ ) + { + corr += inBuf[G_item[j].gainIndex] * predBuf[G_item[j].gainIndex]; + } + + corr_sq = corr * corr; + + if ( (double) lagCorr_sq * (double) energy < (double) corr_sq * (double) lagEnergy ) + { + bestIdx = i; + lagCorr_sq = corr_sq; + lagEnergy = energy; + } + } + + predBuf++; + absPos++; + } + + if ( lagCorr_sq == 0.0f && *prev_frame_bstindx < 0 ) + { + bestIdx = 0; + } + else + { + if ( lagCorr_sq == 0.0f ) + { + bestIdx = *prev_frame_bstindx; + } + } + + *prev_frame_bstindx = bestIdx; + + return bestIdx; +} + + +/*--------------------------------------------------------------------------* + * getswbindices_har() + * + * Finds the pulse index of best correlation between highband (*yos) and lowband (*y2) for two groups of length sbLen + *--------------------------------------------------------------------------*/ + +static void getswbindices_har( + float *yos, /* i : original input spectrum */ + float *y2, /* i : decoded spectrum */ + const int16_t nBands_search, /* i : number of bands */ + int16_t *lagIndices, /* o : pulse index */ + int16_t *prev_frame_bstindx, /* i/o: prev frame index */ + const int16_t swb_lowband, /* i : length of the LF spectrum */ + const int16_t *subband_offsets, + const int16_t *sbWidth, + const int16_t *subband_search_offset + +) +{ + GainItem Nbiggest[(NB_SWB_SUBBANDS_HAR_SEARCH_SB) *N_NBIGGEST_PULSEARCH]; + const float *refBuf, *predBuf; + int16_t search_offset[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; + int16_t nlags[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; + int16_t j, k, sb; + int16_t n_nbiggestsearch[NB_SWB_SUBBANDS_HAR]; + float low_freqsgnl[L_FRAME32k]; + + /* Initializations */ + predBuf = y2; + + /* Get the number of HF groups for performing Similarity search */ + for ( sb = 0; sb < nBands_search; sb++ ) + { + nlags[sb] = (int16_t) pow( 2, bits_lagIndices_mode0_Har[sb] ); + } + + for ( sb = 0; sb < nBands_search; sb++ ) + { + j = sb * N_NBIGGEST_PULSEARCH; + refBuf = yos + swb_lowband + subband_offsets[sb]; + + /* Find NBiggest samples in HF Groups */ + FindNBiggest2_simple( refBuf, Nbiggest + j, sbWidth[sb], &n_nbiggestsearch[sb], N_NBIGGEST_PULSEARCH ); + search_offset[sb] = subband_search_offset[sb]; + } + + /* Similarity Search for the HF spectrum */ + for ( sb = 0; sb < nBands_search; sb++ ) + { + k = 0; + if ( sb == 0 ) + { + /* copy SSmoothed LF Spectrum */ + mvr2r( predBuf + search_offset[sb] - nlags[sb] / 2, low_freqsgnl, sbWidth[sb] + nlags[sb] ); + } + else + { + /* copy SSmoothed LF Spectrum */ + for ( j = search_offset[sb] + nlags[sb] / 2; j > search_offset[sb] - sbWidth[sb] - nlags[sb] / 2; j-- ) + { + low_freqsgnl[k] = predBuf[j]; + k++; + } + } + /* correlation b/w HF spectrum Group1 of length sbLen and decoded LF spectrum */ + lagIndices[sb] = GetSubbandCorrIndex2_har( yos + swb_lowband + subband_offsets[sb], low_freqsgnl, sbWidth[sb], nlags[sb], Nbiggest + ( sb * N_NBIGGEST_PULSEARCH ), n_nbiggestsearch[sb], &prev_frame_bstindx[sb] ); + } + + return; +} + +static int16_t GetSubbandCorrIndex2_pulsestep( + const float *inBuf, + const float *predBuf, + const float *predBufMa, + const int16_t fLen, + const int16_t maxLag, + const GainItem *G_item, + const int16_t nZero, + int16_t ssearch_buflim, + const float *predBuf_ni ) +{ + int16_t bestIdx, i, j; + float corr, energy, corr_sq; + float lagCorr_sq, lagEnergy; + int16_t absPos; + int16_t ib_flag = 0; + + + absPos = 0; + bestIdx = -1; + lagCorr_sq = 0.0f; + lagEnergy = 1e30f; + + /* Get the initial energy for zero lag */ + while ( *predBuf == 0.0f && absPos < ssearch_buflim ) + { + predBuf++; + absPos++; + predBuf_ni++; + } + + if ( absPos == ssearch_buflim ) + { + predBuf--; + absPos--; + predBuf_ni--; + } + for ( i = 0, energy = 0.0f; i < fLen; i++, predBuf_ni++ ) + { + energy += *predBuf_ni * *predBuf_ni; + } + + predBuf_ni -= fLen; + lagEnergy = energy; + + /* Find the best lag */ + for ( i = 0; i < maxLag; i++ ) + { + corr = 0.0f; + + /* Get the energy, remove the old and update with the new energy index */ + for ( j = 0, energy = 0.0f; j < fLen; j++, predBuf_ni++ ) + { + energy += *predBuf_ni * *predBuf_ni; + } + predBuf_ni -= fLen; + + /* Get cross-correlation */ + if ( energy ) + { + for ( j = 0, corr = 0.0f; j < nZero; j++ ) + { + corr += inBuf[G_item[j].gainIndex] * predBufMa[G_item[j].gainIndex]; + } + + corr_sq = corr * corr; + + if ( ( lagCorr_sq == 0.0f && corr_sq == 0.0f ) || (double) lagCorr_sq * (double) energy < (double) corr_sq * (double) lagEnergy ) + { + bestIdx = i; + lagCorr_sq = corr_sq; + lagEnergy = energy; + } + } + + predBuf++; + absPos++; + predBuf_ni++; + while ( *predBuf == 0.0f && absPos < ssearch_buflim ) + { + predBuf++; + absPos++; + predBuf_ni++; + } + + if ( absPos >= ssearch_buflim ) + { + if ( bestIdx == -1 ) + { + ib_flag = 1; + } + + break; + } + } + if ( ib_flag ) + { + bestIdx = 0; + } + return bestIdx; +} + + +/*--------------------------------------------------------------------------* + * GetSWBIndices() + * + * Finds the subband lags for subband coding. Each lag corresponds to + * the section that is copied and scaled from the low-frequency band + * to form the high-frequency subband. + * + * The subbands are searched in two steps to reduce the complexity of + * the search relative to full search. In first step, a most representative + * subband is selected based on the similarity of the subbands.Full search + * is performed for the selected subband.Based on the lagIndice value for + * this subband, the region of highest interest is selected. A partial + * search is performed for rest of the subbands around this region of the + * low-frequency range. + *--------------------------------------------------------------------------*/ + +static void GetSWBIndices( + const float *predBuf, /* i : low-frequency band */ + const float *targetBuf, /* i : high-frequency band */ + const int16_t nBands_search, /* i : number of search subbands */ + const int16_t *sbWidth, /* i : subband lengths */ + int16_t *lagIndices, /* o : selected lags for subband coding */ + const int16_t predBufLen, /* i : low-frequency band length */ + GainItem *Nbiggest, /* o : most representative region */ + const int16_t *subband_offsets, /* o : N biggest components */ + float *predBuf_ni /* i : low-frequency band filled noise */ +) +{ + const float *refBuf; + int16_t search_offset[NB_SWB_SUBBANDS]; + int16_t nlags[NB_SWB_SUBBANDS]; + int16_t sbLen; + int16_t j, sb; + int16_t n_nbiggestsearch[NB_SWB_SUBBANDS]; + int16_t ssearch_buflim; + float sspectra_ma[L_FRAME32k]; + + /* Initializations */ + for ( sb = 0; sb < nBands_search; sb++ ) + { + j = sb * N_NBIGGEST_PULSEARCH; + sbLen = sbWidth[sb]; + refBuf = targetBuf + subband_offsets[sb]; + FindNBiggest2_simple( refBuf, Nbiggest + j, sbLen, &n_nbiggestsearch[sb], N_NBIGGEST_PULSEARCH ); + } + + /* Selection of most representative subband (full search) */ + for ( sb = 0; sb < nBands_search; sb++ ) + { + nlags[sb] = (int16_t) pow( 2, bits_lagIndices_modeNormal[sb] ); + } + + for ( sb = 0; sb < nBands_search; sb++ ) + { + search_offset[sb] = subband_search_offsets[sb]; + } + sspectra_ma[0] = ( predBuf_ni[0] + predBuf_ni[1] ) / 2.0f; + + for ( sb = 1; sb < predBufLen - 1; sb++ ) + { + sspectra_ma[sb] = ( predBuf_ni[sb - 1] + predBuf_ni[sb] + predBuf_ni[sb + 1] ) / 3.0f; + } + + sspectra_ma[sb] = ( predBuf_ni[sb - 1] + predBuf_ni[sb] ) / 2.0f; + /* Partial search for rest of subbands except the last which is fixed */ + for ( sb = 0; sb < nBands_search; sb++ ) + { + sbLen = sbWidth[sb]; + ssearch_buflim = predBufLen - ( sbLen + search_offset[sb] ); + lagIndices[sb] = GetSubbandCorrIndex2_pulsestep( targetBuf + subband_offsets[sb], predBuf + search_offset[sb], sspectra_ma + search_offset[sb], sbLen, nlags[sb], Nbiggest + ( sb * N_NBIGGEST_PULSEARCH ), n_nbiggestsearch[sb], ssearch_buflim, predBuf_ni + search_offset[sb] ); + } + + return; +} + + +static void gethar_noisegn( + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + float spectra[], + float noise_flr[], + float xSynth_har[], + const int16_t sbWidth[], + const int16_t lagIndices[], + const int16_t bands, + const int16_t har_bands, + const int16_t fLenLow, + const int16_t fLenHigh, + const int16_t subband_offsets[], + const int16_t subband_search_offset[], + int16_t band_start[], + int16_t band_end[], + int16_t band_width[], + float band_energy[], + float be_tonal[], + float *sspectra, + const int16_t har_freq_est2, + const int16_t pos_max_hfe2, + int16_t *pul_res, + GainItem pk_sf[] ) +{ + GainItem get_pk[N_NBIGGEST_SEARCH_LRG_B]; + int16_t n_nbiggestsearch, imin, gqlevs; + int16_t i; + float hfspec[L_FRAME32k]; + float g, g1, g2, dmin, d; + + /*Generate HF noise*/ + genhf_noise( noise_flr, xSynth_har, sspectra, bands, har_bands, har_freq_est2, pos_max_hfe2, pul_res, pk_sf, fLenLow, fLenHigh, sbWidth, lagIndices, subband_offsets, subband_search_offset ); + + mvr2r( spectra + fLenLow, hfspec, fLenHigh ); + FindNBiggest2_simple( hfspec, get_pk, fLenHigh, &n_nbiggestsearch, N_NBIGGEST_SEARCH_LRG_B ); + for ( i = 0; i < n_nbiggestsearch; i++ ) + { + hfspec[get_pk[i].gainIndex] = 0.0f; + } + + g1 = sum2_f( hfspec, fLenHigh ); + g2 = sum2_f( xSynth_har, fLenHigh ); + imin = 0; + if ( g1 != 0.0 && g2 != 0.0 ) + { + g = (float) log10( sqrt( g1 / g2 ) ); + gqlevs = 4; + dmin = FLT_MAX; + imin = 0; + + for ( i = 0; i < gqlevs; i++ ) + { + d = (float) fabs( g - gain_table_SWB_BWE[i] ); + if ( d < dmin ) + { + dmin = d; + imin = i; + } + } + } + push_indice( hBstr, IND_NOISEG, imin, 2 ); + g = (float) pow( 10.0f, gain_table_SWB_BWE[imin] ); + + /*Tonal energy estimation*/ + ton_ene_est( xSynth_har, be_tonal, band_energy, band_start, band_end, band_width, fLenLow, fLenHigh, bands, har_bands, g, pk_sf, pul_res ); + + return; +} + + +/*--------------------------------------------------------------------------* + * EncodeSWBSubbands() + * + * Main routine for generic SWB coding. High-frequency subband + * replicated based on the lowband signal. A search is perform + * find lowband indices denoting the selected lowband subband. + *--------------------------------------------------------------------------*/ + +static void EncodeSWBSubbands( + Encoder_State *st, /* i/o: encoder state structure */ + float *spectra, /* i/o: MDCT domain spectrum */ + const int16_t fLenLow, /* i : lowband length */ + const int16_t fLenHigh, /* i : highband length */ + const int16_t nBands, /* i : number of subbands */ + const int16_t nBands_search, /* i : number of subbands to be searched for BWE */ + const int16_t *sbWidth, /* i : subband lengths */ + const int16_t *subband_offsets, /* i : Subband offset for BWE */ + int16_t *lagIndices, /* o : lowband index for each subband */ + float *lagGains, /* o : first gain for each subband */ + int16_t BANDS, /* i : noise estimate from WB part */ + int16_t *band_start, /* i : Number subbands/Frame */ + int16_t *band_end, /* i : Band Start of each SB */ + float *band_energy, /* i : Band end of each SB */ + const int16_t *p2a_flags, /* i : BAnd energy of each SB */ + const int16_t hqswb_clas, /* i : lowband synthesis */ + int16_t *prev_frm_index, /* i : clas information */ + const int16_t har_bands, /* i/o: Index of the previous Frame */ + const int16_t *subband_search_offset, /* i : Number of harmonic LF bands */ + int16_t *prev_frm_hfe2, + int16_t *prev_stab_hfe2, + int16_t band_width[], + const float spectra_ni[], /* i : coded MDCT domain spectrum + noise */ + int16_t *ni_seed /* i/o: random seed for search buffer NI */ +) +{ + GainItem Nbiggest[NB_SWB_SUBBANDS * N_NBIGGEST_PULSEARCH]; + int16_t i, k; + float sspectra[L_FRAME32k]; + float sspectra_ni[L_FRAME32k], sspectra_diff[L_FRAME32k], be_tonal[SWB_HAR_RAN1], xSynth_har[L_FRAME32k]; + float ss_min = 1.0f, th_g[NB_SWB_SUBBANDS]; + GainItem pk_sf[(NB_SWB_SUBBANDS) *8]; + int16_t pul_res[NB_SWB_SUBBANDS], cnt; + int16_t har_freq_est1 = 0, har_freq_est2 = 0; + int16_t flag_dis = 1; + int16_t pos_max_hfe2 = 0; + + HQ_ENC_HANDLE hHQ_core = st->hHQ_core; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + set_f( sspectra, 0.0f, fLenLow ); + set_f( sspectra_ni, 0.0f, fLenLow ); + set_f( xSynth_har, 0.0f, L_FRAME32k ); + set_s( pul_res, 0, NB_SWB_SUBBANDS ); + + + if ( hqswb_clas == HQ_HARMONIC ) + { + /* Harmonic Structure analysis */ + pos_max_hfe2 = har_est( spectra, fLenLow, &har_freq_est1, &har_freq_est2, &flag_dis, prev_frm_hfe2, subband_search_offset, sbWidth, prev_stab_hfe2 ); + /* Spectrum normalization for the corecoder */ + noise_extr_corcod( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, hHQ_core->prev_hqswb_clas, &hHQ_core->prev_ni_ratio ); + + /* Find best indices for each group */ + getswbindices_har( spectra, sspectra_ni, nBands_search, lagIndices, prev_frm_index, fLenLow, subband_offsets, sbWidth, subband_search_offset ); + /* Write the indices into the bitstream */ + for ( k = 0; k < nBands_search; k++ ) + { + push_indice( hBstr, IND_LAGINDICES, lagIndices[k], bits_lagIndices_mode0_Har[k] ); + } + + if ( flag_dis == 0 ) + { + if ( har_freq_est2 != SWB_HAR_RAN1 || har_freq_est2 != *prev_frm_hfe2 ) + { + har_freq_est2 += lagIndices[0]; + } + } + + /*noise generation*/ + gethar_noisegn( hBstr, spectra, sspectra_diff, xSynth_har, sbWidth, lagIndices, BANDS, har_bands, fLenLow, fLenHigh, subband_offsets, subband_search_offset, band_start, band_end, band_width, band_energy, be_tonal, sspectra, har_freq_est2, pos_max_hfe2, pul_res, pk_sf ); + + /*HF Spectrum Generation*/ + Gettonl_scalfact( xSynth_har, spectra_ni, fLenLow, fLenHigh, har_bands, BANDS, band_energy, band_start, band_end, p2a_flags, be_tonal, pk_sf, pul_res ); + + if ( flag_dis == 0 ) + { + *prev_frm_hfe2 = 0; + } + else + { + *prev_frm_hfe2 = har_freq_est2; + } + + for ( k = har_bands; k < BANDS; k++ ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + spectra[i] = xSynth_har[i - fLenLow]; + } + } + } + else + { + /* Spectrum normalization for the corecoder*/ + ss_min = spectrumsmooth_noiseton( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, ni_seed ); + + /* Get lag indices */ + GetSWBIndices( sspectra, spectra + fLenLow, nBands, sbWidth, lagIndices, fLenLow, Nbiggest, subband_offsets, sspectra ); + /* Bitstream operations */ + for ( k = 0; k < nBands; k++ ) + { + if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 0 ) + { + push_indice( hBstr, IND_LAGINDICES, lagIndices[k], bits_lagIndices_modeNormal[k] ); + } + else + { + lagIndices[k] = 0; + } + } + convert_lagIndices_pls2smp( lagIndices, nBands, lagIndices, sspectra, sbWidth, fLenLow ); + /*get levels for missing bands*/ + GetlagGains( sspectra_ni, &band_energy[BANDS - NB_SWB_SUBBANDS], nBands, sbWidth, lagIndices, fLenLow, lagGains ); + for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) + { + lagGains[k] *= 0.9f; + } + + cnt = 0; + for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) + { + th_g[k] = 0.0f; + if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 0 ) + { + th_g[k] = lagGains[k] * ss_min; + cnt++; + } + } + + /* Construct spectrum */ + GetSynthesizedSpecThinOut( sspectra_ni, xSynth_har, nBands, sbWidth, lagIndices, lagGains, fLenLow ); + /*Level adjustment for the missing bands*/ + noiseinj_hf( xSynth_har, th_g, band_energy, hHQ_core->prev_En_sb, p2a_flags, BANDS, band_start, band_end, fLenLow ); + + for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) + { + if ( p2a_flags[k] == 0 ) + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + spectra[i] = xSynth_har[i - fLenLow]; + } + } + else + { + for ( i = band_start[k]; i <= band_end[k]; i++ ) + { + spectra[i] = spectra_ni[i]; + } + } + } + } + + return; +} + +/*--------------------------------------------------------------------------* + * swb_bwe_enc_lr() + * + * Main encoding routine of SWB BWE for the LR MDCT core + *--------------------------------------------------------------------------*/ + +void swb_bwe_enc_lr( + Encoder_State *st, /* i/o: encoder state structure */ + const float m_core[], /* i : lowband synthesis */ + const float m_orig[], /* i/o: scaled orig signal (MDCT) */ + float m[], /* o : highband synthesis with lowband zeroed */ + const int32_t total_brate, /* i : total bitrate for selecting subband pattern */ + int16_t BANDS, /* i : Total number of Subbands in a frame */ + int16_t *band_start, /* i : band start of each SB */ + int16_t *band_end, /* i : band end of each SB */ + float *band_energy, /* i : band_energy of each SB */ + int16_t *p2a_flags, /* i : HF tonal indicator */ + const int16_t hqswb_clas, /* i : HQ_NORMAL or HQ_HARMONIC class */ + int16_t lowlength, /* i : lowband length */ + int16_t highlength, /* i : highband length */ + int16_t *prev_frm_index, /* i/o: previous frame lag index for harmonic mode */ + const int16_t har_bands, /* i : Number of LF harmonic bands */ + int16_t *prev_frm_hfe2, + int16_t *prev_stab_hfe2, + int16_t band_width[], /* i : subband bandwidths */ + const float y2_ni[], /* i/o: Sparse filled core coder */ + int16_t *ni_seed /* i/o: random seed for search buffer NI */ +) +{ + int16_t k; + int16_t nBands; + int16_t nBands_search; + int16_t wBands[NB_SWB_SUBBANDS]; + int16_t lagIndices[NB_SWB_SUBBANDS]; + float lagGains[NB_SWB_SUBBANDS]; + const int16_t *subband_offsets; + int16_t swb_lowband, swb_highband; + const int16_t *subband_search_offset; + + subband_search_offset = subband_search_offsets_13p2kbps_Har; + subband_offsets = subband_offsets_sub5_13p2kbps_Har; + + hf_parinitiz( total_brate, hqswb_clas, lowlength, highlength, wBands, &subband_search_offset, &subband_offsets, &nBands, &nBands_search, &swb_lowband, &swb_highband ); + + /* Prepare m[], low part from WB core, high part from 32k input */ + mvr2r( m_core, m, swb_lowband ); + mvr2r( m_orig + swb_lowband, m + swb_lowband, swb_highband ); + + /* SWB BWE encoding */ + EncodeSWBSubbands( st, m, swb_lowband, swb_highband, nBands, nBands_search, wBands, subband_offsets, lagIndices, lagGains, BANDS, band_start, band_end, band_energy, p2a_flags, hqswb_clas, prev_frm_index, har_bands, subband_search_offset, prev_frm_hfe2, prev_stab_hfe2, band_width, y2_ni, ni_seed ); + + m[swb_lowband + swb_highband - 1] *= 0.0625f; + m[swb_lowband + swb_highband - 2] *= 0.125f; + m[swb_lowband + swb_highband - 3] *= 0.25f; + m[swb_lowband + swb_highband - 4] *= 0.5f; + + /* set frequencies below 6.4 kHz to zero */ + if ( hqswb_clas == HQ_NORMAL ) + { + for ( k = 0; k < swb_lowband; k++ ) + { + m[k] = 0.0f; + } + } + + return; +} diff --git a/lib_enc/swb_pre_proc.c b/lib_enc/swb_pre_proc.c new file mode 100644 index 0000000000..99c410ed47 --- /dev/null +++ b/lib_enc/swb_pre_proc.c @@ -0,0 +1,742 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "wmops.h" +#include "ivas_prot.h" +#include "ivas_rom_enc.h" + +/*-------------------------------------------------------------------* + * Local constants + * + *-------------------------------------------------------------------*/ + +#define CLDFB_NO_CHANNELS_HB 20 + + +/*-------------------------------------------------------------------* + * wb_pre_proc() + * + * - Resampling of input signal when input signal sampling rate + * is above 16kHz + * - Common WB TBE and WB BWE pre-processing + *-------------------------------------------------------------------*/ + +void wb_pre_proc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t last_element_mode, /* i : last element mode */ + const float *new_inp_resamp16k, /* i : original input signal */ + float *hb_speech /* o : HB target signal (6-8kHz) at 16kHz */ +) +{ + int16_t Sample_Delay_WB_BWE, ramp_flag; + TD_BWE_ENC_HANDLE hBWE_TD; + FD_BWE_ENC_HANDLE hBWE_FD; + float decim_state1[( 2 * ALLPASSSECTIONS_STEEP + 1 )], decim_state2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; + float old_input[NS2SA( 16000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + STEREO_DFT_OVL_16k + L_FRAME16k]; + float *highband_new_speech, highband_old_speech[( L_LOOK_12k8 + L_SUBFR + L_FRAME ) * 5 / 16]; + int16_t fSwitchFromIO = 0; + int16_t ppp_mode; + + hBWE_TD = st->hBWE_TD; + hBWE_FD = st->hBWE_FD; + + if ( st->Opt_SC_VBR ) + { + ppp_mode = st->hSC_VBR->ppp_mode; + } + else + { + ppp_mode = 0; + } + + if ( ( st->last_total_brate == ACELP_6k60 ) || + ( st->last_total_brate == ACELP_8k85 ) || + ( st->last_total_brate == ACELP_12k65 ) || + ( st->last_total_brate == ACELP_14k25 ) || + ( st->last_total_brate == ACELP_15k85 ) || + ( st->last_total_brate == ACELP_18k25 ) || + ( st->last_total_brate == ACELP_19k85 ) || + ( st->last_total_brate == ACELP_23k05 ) || + ( st->last_total_brate == ACELP_23k85 ) ) + { + fSwitchFromIO = 1; + } + + set_f( old_input, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + STEREO_DFT_OVL_16k + L_FRAME16k ); + + if ( st->extl == WB_BWE || st->extl == WB_TBE || st->igf ) + { + ramp_flag = 0; + if ( ( st->last_extl != WB_TBE && st->last_extl != WB_BWE && !st->igf ) || ( st->igf && fSwitchFromIO ) ) + { + ramp_flag = 1; + } + + if ( !ppp_mode ) + { + if ( st->element_mode == IVAS_CPE_DFT ) + { + Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); + + if ( last_element_mode == IVAS_CPE_TD ) + { + set_f( hBWE_TD->decim_state1, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->decim_state2, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + ramp_flag = 1; + } + + /*Get past signal*/ + mvr2r( hBWE_FD->old_wtda_swb + L_FRAME16k - STEREO_DFT_OVL_16k, old_input, STEREO_DFT_OVL_16k ); + mvr2r( hBWE_FD->old_input_wb, old_input + STEREO_DFT_OVL_16k, Sample_Delay_WB_BWE ); + + /*Get new signal*/ + mvr2r( new_inp_resamp16k, &old_input[Sample_Delay_WB_BWE + STEREO_DFT_OVL_16k], L_FRAME16k ); + + /*compute hb_speech on delayed input*/ + flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); + + /*Update memory*/ + mvr2r( hb_speech, hBWE_TD->old_speech_wb + ( L_SUBFR * 5 / 16 ), STEREO_DFT_OVL_16k / 4 ); + mvr2r( hb_speech + STEREO_DFT_OVL_16k / 4, hb_speech, ( L_FRAME16k - STEREO_DFT_OVL_16k ) / 4 ); + + /*rest without memory update*/ + mvr2r( hBWE_TD->decim_state1, decim_state1, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + mvr2r( hBWE_TD->decim_state2, decim_state2, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE + L_FRAME16k, hb_speech + ( L_FRAME16k - STEREO_DFT_OVL_16k ) / 4, STEREO_DFT_OVL_16k, decim_state1, decim_state2, 0 ); + } + else if ( st->element_mode == IVAS_CPE_TD ) + { + int16_t l_recalc_16k = L_MEM_RECALC_16K + L_FILT16k + 1; /* Note: "+1" is used because L_FILT16k is not divisible by 4 */ + int16_t l_recalc_4k = ( L_MEM_RECALC_16K + L_FILT16k + 1 ) / 4; + Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); + + if ( last_element_mode == IVAS_CPE_DFT ) + { + set_f( hBWE_TD->decim_state1, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->decim_state2, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + ramp_flag = 1; + } + + /*Get past signal*/ + mvr2r( hBWE_FD->old_wtda_swb + L_FRAME16k - l_recalc_16k, old_input, l_recalc_16k ); + mvr2r( hBWE_FD->old_input_wb, old_input + l_recalc_16k, Sample_Delay_WB_BWE ); + + old_input[Sample_Delay_WB_BWE] = hBWE_FD->mem_old_wtda_swb; + + /*Get new signal*/ + mvr2r( new_inp_resamp16k, old_input + Sample_Delay_WB_BWE + l_recalc_16k, L_FRAME16k ); + + /*compute hb_speech on delayed input*/ + flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); + + /*Update memory*/ + mvr2r( hb_speech, hBWE_TD->old_speech_wb + ( ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ) - l_recalc_4k, l_recalc_4k ); + mvr2r( hb_speech + l_recalc_4k, hb_speech, ( L_FRAME16k / 4 ) - l_recalc_4k ); + + /*rest without memory update*/ + mvr2r( hBWE_TD->decim_state1, decim_state1, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + mvr2r( hBWE_TD->decim_state2, decim_state2, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE + L_FRAME16k, hb_speech + ( L_FRAME16k / 4 ) - l_recalc_4k, l_recalc_16k, decim_state1, decim_state2, 0 ); + } + else if ( st->element_mode == IVAS_SCE ) + { + if ( st->input_Fs == 16000 ) + { + flip_spectrum_and_decimby4( new_inp_resamp16k, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); + } + else + { + int16_t l_recalc_16k = L_FILT16k + 1; /* Note: "+1" is used because L_FILT16k is not divisible by 4 */ + int16_t l_recalc_4k = ( L_FILT16k + 1 ) / 4; + + Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); + + /*Get past signal*/ + mvr2r( hBWE_FD->old_wtda_swb + L_FRAME16k - l_recalc_16k, old_input, l_recalc_16k ); + mvr2r( hBWE_FD->old_input_wb, old_input + l_recalc_16k, Sample_Delay_WB_BWE ); + + /*Get new signal*/ + mvr2r( new_inp_resamp16k, old_input + Sample_Delay_WB_BWE + l_recalc_16k, L_FRAME16k ); + + /*compute hb_speech on delayed input*/ + flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); + + /* update hBWE_TD->old_speech_wb memory */ + mvr2r( hb_speech, hBWE_TD->old_speech_wb + ( ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ) - l_recalc_4k, l_recalc_4k ); + mvr2r( hb_speech + l_recalc_4k, hb_speech, ( L_FRAME16k / 4 ) - l_recalc_4k ); + + /*rest without memory update*/ + mvr2r( hBWE_TD->decim_state1, decim_state1, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + mvr2r( hBWE_TD->decim_state2, decim_state2, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE + L_FRAME16k, hb_speech + ( L_FRAME16k / 4 ) - l_recalc_4k, l_recalc_16k, decim_state1, decim_state2, 0 ); + } + } + else + { + flip_spectrum_and_decimby4( new_inp_resamp16k, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); + } + + if ( st->extl != WB_TBE ) + { + /* Update the previous wideband speech buffer in case of a WB_BWE frame - this code is in wb_tbe_enc */ + Sample_Delay_WB_BWE = ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16; + + highband_new_speech = highband_old_speech + Sample_Delay_WB_BWE; + + mvr2r( hBWE_TD->old_speech_wb, highband_old_speech, Sample_Delay_WB_BWE ); + mvr2r( hb_speech, highband_new_speech, L_FRAME16k / 4 ); + mvr2r( highband_old_speech + L_FRAME16k / 4, hBWE_TD->old_speech_wb, Sample_Delay_WB_BWE ); + } + } + } + else + { + set_f( hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->old_speech_wb, 0.0f, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ); + } + + if ( hBWE_FD != NULL ) + { + hBWE_FD->mem_old_wtda_swb = new_inp_resamp16k[L_FRAME16k - L_MEM_RECALC_16K - L_FILT16k - 1]; + } + + /* st->old_input_wb and st->old_wtda_wb must be updated each frame, or there are often some clicks during WB TBE <-> WB BWE switching */ + if ( ( st->extl != WB_BWE || ( st->extl == WB_BWE && st->extl_brate == 0 ) ) && !ppp_mode ) + { + Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); + + mvr2r( new_inp_resamp16k, &old_input[Sample_Delay_WB_BWE], L_FRAME16k ); + mvr2r( hBWE_FD->old_input_wb, old_input, Sample_Delay_WB_BWE ); + mvr2r( new_inp_resamp16k + L_FRAME16k - Sample_Delay_WB_BWE, hBWE_FD->old_input_wb, Sample_Delay_WB_BWE ); + if ( ( st->extl != SWB_BWE ) && ( st->extl != FB_BWE ) ) + { + mvr2r( old_input, hBWE_FD->old_wtda_swb, L_FRAME16k ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * swb_pre_proc() + * + * - Calculate the 6 to 14 kHz (or 7.5 - 15.5 kHz) SHB target signal + * for SWB TBE or SWB BWE coding + * - Common SWB TBE and SWB BWE pre-processing + *-------------------------------------------------------------------*/ + +void swb_pre_proc( + Encoder_State *st, /* i/o: encoder state structure */ + float *new_swb_speech, /* o : original input signal at 32kHz */ + float *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz */ + float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : real buffer */ + float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : imag buffer */ + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +) +{ + int16_t Sample_Delay_SWB_BWE, inner_frame, delay; + TD_BWE_ENC_HANDLE hBWE_TD; + FD_BWE_ENC_HANDLE hBWE_FD; + int32_t inner_Fs, input_Fs; + float old_input[NS2SA( 48000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k]; + float spchTmp[640]; + int16_t i, j; + int16_t startB, endB; + float *realBufferFlipped[CLDFB_NO_COL_MAX]; + float *imagBufferFlipped[CLDFB_NO_COL_MAX]; + float realBufferTmp[CLDFB_NO_COL_MAX][20]; + float imagBufferTmp[CLDFB_NO_COL_MAX][20]; + int16_t ts, nB, uB; + float sign; + float lbEner, v, t; + float regression; + const float *thr, *regV; + int16_t Sample_Delay_SWB_BWE32k, lMemRecalc32k, dft_ovl32k; + + lMemRecalc32k = NS2SA( 32000, L_MEM_RECALC_NS ); + + /* initialization */ + hBWE_TD = st->hBWE_TD; + hBWE_FD = st->hBWE_FD; + input_Fs = st->input_Fs; + + for ( j = 0; j < CLDFB_NO_COL_MAX; j++ ) + { + set_f( realBufferTmp[j], 0, 20 ); + set_f( imagBufferTmp[j], 0, 20 ); + realBufferFlipped[j] = realBufferTmp[j]; + imagBufferFlipped[j] = imagBufferTmp[j]; + } + + set_f( old_input, 0.0f, NS2SA( 48000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k ); + + if ( input_Fs == 32000 ) + { + if ( st->element_mode > EVS_MONO ) + { + Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_12k8_NS ); + if ( st->L_frame == L_FRAME16k ) + { + Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_16k_NS ); + } + + mvr2r( st->input - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); + mvr2r( st->input - L_FRAME32k, hBWE_FD->old_fdbwe_speech, L_FRAME32k ); + + if ( st->element_mode == IVAS_CPE_TD && st->bwidth >= SWB ) + { + mvr2r( st->input - hCPE->hStereoTCA->lMemRecalc, hBWE_FD->old_wtda_swb + L_FRAME32k - ( hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ), hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ); + } + else if ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB ) + { + mvr2r( st->input - hCPE->hStereoDft->dft_ovl, hBWE_FD->old_wtda_swb + L_FRAME32k - ( hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ), hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ); + } + } + + mvr2r( st->input, new_swb_speech, L_FRAME32k ); + + if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE && st->extl != SWB_BWE_HIGHRATE ) + { + Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); + if ( st->element_mode > EVS_MONO && st->L_frame == L_FRAME16k ) + { + Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS ); + } + if ( st->element_mode > EVS_MONO ) + { + Sample_Delay_SWB_BWE -= NS2SA( 32000, DELAY_FIR_RESAMPL_NS ); + } + + mvr2r( hBWE_FD->old_fdbwe_speech, &old_input[Sample_Delay_SWB_BWE], L_FRAME32k ); + + set_f( old_input, 0, Sample_Delay_SWB_BWE ); + mvr2r( hBWE_FD->old_fdbwe_speech + L_FRAME32k - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); + if ( st->extl != WB_BWE ) + { + mvr2r( old_input, hBWE_FD->old_wtda_swb, L_FRAME32k ); + } + } + + if ( st->extl != SWB_BWE && st->extl != FB_BWE ) + { + mvr2r( st->input, hBWE_FD->old_fdbwe_speech, L_FRAME32k ); + } + } + else /* 48 kHz */ + { + + Sample_Delay_SWB_BWE32k = NS2SA( 32000, DELAY_FD_BWE_ENC_12k8_NS ); + Sample_Delay_SWB_BWE = NS2SA( 48000, DELAY_FD_BWE_ENC_12k8_NS ); + if ( st->L_frame == L_FRAME16k ) + { + Sample_Delay_SWB_BWE32k = NS2SA( 32000, DELAY_FD_BWE_ENC_16k_NS ); + Sample_Delay_SWB_BWE = NS2SA( 48000, DELAY_FD_BWE_ENC_16k_NS ); + } + + dft_ovl32k = 0; + if ( st->element_mode == IVAS_CPE_DFT ) + { + dft_ovl32k = (int16_t) ( STEREO_DFT_OVL_MAX * 32000 / 48000 ); + } + + if ( st->codec_mode == MODE1 ) + { + if ( st->element_mode > EVS_MONO ) + { + + if ( st->element_mode == IVAS_CPE_TD ) + { + } + else if ( st->bwidth == FB ) + { + mvr2r( st->input - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); + } + + mvr2r( st->input - L_FRAME48k, hBWE_FD->old_fdbwe_speech, L_FRAME48k ); + + if ( st->element_mode == IVAS_CPE_TD && st->bwidth >= SWB ) + { + if ( st->bwidth == SWB ) + { + /* buffers hBWE_FD->old_input[] and hBWE_FD->old_wtda_swb[] need to be at 32 kHz (inner) sampling rate */ + + decimate_2_over_3_allpass( st->input - hCPE->hStereoTCA->lMemRecalc, hCPE->hStereoTCA->lMemRecalc, spchTmp, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); + + mvr2r( spchTmp, hBWE_FD->old_wtda_swb + L_FRAME32k - ( lMemRecalc32k - Sample_Delay_SWB_BWE32k ), lMemRecalc32k - Sample_Delay_SWB_BWE32k ); + mvr2r( spchTmp + lMemRecalc32k - Sample_Delay_SWB_BWE32k, hBWE_FD->old_input, Sample_Delay_SWB_BWE32k ); + } + else /* FB_BWE */ + { + mvr2r( st->input - hCPE->hStereoTCA->lMemRecalc, hBWE_FD->old_wtda_swb + L_FRAME48k - ( hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ), hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ); + mvr2r( st->input - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); + } + } + else if ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB ) + { + if ( st->bwidth == SWB ) + { + lerp( st->input - hCPE->hStereoDft->dft_ovl, spchTmp, dft_ovl32k - Sample_Delay_SWB_BWE32k, hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ); + + mvr2r( spchTmp, hBWE_FD->old_wtda_swb + L_FRAME32k - ( dft_ovl32k - Sample_Delay_SWB_BWE32k ), dft_ovl32k - Sample_Delay_SWB_BWE32k ); + } + else + { + mvr2r( st->input - hCPE->hStereoDft->dft_ovl, hBWE_FD->old_wtda_swb + L_FRAME48k - ( hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ), hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ); + } + } + } + + if ( ( st->extl != SWB_BWE && st->extl != FB_BWE && st->core == ACELP_CORE ) || ( st->element_mode == IVAS_CPE_DFT && st->core != ACELP_CORE ) /*resampling not needed for MDCT cores*/ ) + { + /* move the resampling out of the TDBWE path as new_swb_speech is not needed for TDBWE. */ + mvr2r( st->input, hBWE_FD->old_fdbwe_speech, L_FRAME48k ); + } + else + { + if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE ) + { + /* resample 48 kHz to 32kHz */ + if ( st->last_bwidth == FB ) + { + inner_frame = L_FRAME48k; + inner_Fs = 48000; + mvr2r( hBWE_FD->old_fdbwe_speech, new_swb_speech, L_FRAME48k ); + } + else + { + inner_frame = L_FRAME32k; + inner_Fs = 32000; + + if ( st->element_mode != IVAS_CPE_DFT ) + { + decimate_2_over_3_allpass( hBWE_FD->old_fdbwe_speech, L_FRAME48k, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); + } + else + { + lerp( hBWE_FD->old_fdbwe_speech, new_swb_speech, inner_frame, L_FRAME48k ); + } + + if ( st->element_mode == IVAS_CPE_DFT && st->idchan == 0 ) + { + for ( i = 0; i < STEREO_DFT_OVL_32k; i++ ) + { + hCPE->hStereoDft->output_mem_dmx_32k[i] = new_swb_speech[inner_frame - STEREO_DFT_OVL_32k + i] * hCPE->hStereoDft->win_32k[STEREO_DFT_OVL_32k - 1 - i]; + } + } + } + + Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); + if ( st->element_mode > EVS_MONO && st->L_frame == L_FRAME16k ) + { + Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS ); + } + if ( st->element_mode > EVS_MONO ) + { + Sample_Delay_SWB_BWE -= NS2SA( inner_Fs, DELAY_FIR_RESAMPL_NS ); + } + + mvr2r( new_swb_speech, &old_input[Sample_Delay_SWB_BWE], inner_frame ); + set_f( old_input, 0, Sample_Delay_SWB_BWE ); + mvr2r( new_swb_speech + inner_frame - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); + mvr2r( old_input, hBWE_FD->old_wtda_swb, inner_frame ); + } + + /* resample 48 kHz to 32kHz */ + if ( st->bwidth == FB ) + { + mvr2r( st->input, new_swb_speech, L_FRAME48k ); + } + else + { + if ( st->element_mode == IVAS_CPE_TD ) + { + float dec_2_over_3_mem_tmp[L_FILT_2OVER3], dec_2_over_3_mem_lp_tmp[L_FILT_2OVER3_LP]; + + decimate_2_over_3_allpass( st->input, L_FRAME48k - hCPE->hStereoTCA->lMemRecalc, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); + + mvr2r( hBWE_TD->dec_2_over_3_mem, dec_2_over_3_mem_tmp, L_FILT_2OVER3 ); + mvr2r( hBWE_TD->dec_2_over_3_mem_lp, dec_2_over_3_mem_lp_tmp, L_FILT_2OVER3_LP ); + + decimate_2_over_3_allpass( st->input + L_FRAME48k - hCPE->hStereoTCA->lMemRecalc, hCPE->hStereoTCA->lMemRecalc, new_swb_speech + L_FRAME32k - lMemRecalc32k, dec_2_over_3_mem_tmp, dec_2_over_3_mem_lp_tmp ); + } + else if ( st->element_mode != IVAS_CPE_DFT ) + { + decimate_2_over_3_allpass( st->input, L_FRAME48k, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); + } + else /* IVAS_CPE_DFT */ + { + stereo_dft_enc_synthesize( hCPE->hStereoDft, new_swb_speech, st->idchan, input_Fs, 32000, 0 ); + + mvr2r( new_swb_speech - Sample_Delay_SWB_BWE32k, hBWE_FD->old_input, Sample_Delay_SWB_BWE32k ); + } + } + } + } + else + { + /* resample 48 kHz to 32kHz */ + if ( st->bwidth == FB ) + { + mvr2r( st->input, new_swb_speech, L_FRAME48k ); + } + else + { + decimate_2_over_3_allpass( st->input, L_FRAME48k, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); + } + } + } + + if ( ( st->core == ACELP_CORE && st->extl != SWB_BWE_HIGHRATE && st->extl != FB_BWE_HIGHRATE ) || + ( ( st->total_brate == ACELP_9k60 || st->rf_mode ) && st->bwidth == SWB && st->element_mode == EVS_MONO ) ) + { + float CldfbHB = 0; + + if ( st->element_mode == IVAS_CPE_DFT ) + { + CldfbHB = stereo_dft_enc_synthesize( hCPE->hStereoDft, old_input + STEREO_DFT_OVL_16k, st->idchan, input_Fs, 16000, st->L_frame ); + + /* delay corresponding to CLDFB delay */ + mvr2r( old_input + STEREO_DFT_OVL_16k - 20, shb_speech, L_FRAME16k ); + mvr2r( old_input, hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - ( STEREO_DFT_OVL_16k - 20 ), STEREO_DFT_OVL_16k - 20 ); + mvr2r( old_input, hCPE->hStereoICBWE->mem_shb_speech_ref, STEREO_DFT_OVL_16k - 20 ); + + if ( CldfbHB <= 0 ) + { + CldfbHB = 1.0f; + } + hBWE_TD->cldfbHBLT = 0.9f * hBWE_TD->cldfbHBLT + 0.1f * ( 0.221462f /*=1/log10(32768)*/ * ( log10f( CldfbHB ) - 1.0f ) ); + + lbEner = 0.05f * (float) sqrt( hCPE->hStereoDft->lbEner ); + hCPE->hStereoICBWE->icbweRefEner = 0.05f * (float) sqrt( hCPE->hStereoDft->icbweRefEner ); + lbEner = 0.05f * (float) sqrt( hCPE->hStereoDft->lbEner ); + thr = icbwe_thr_DFT; + regV = icbwe_regressionValuesDFT; + } + else + { + if ( st->L_frame == L_FRAME ) + { + startB = 34; + endB = 14; + for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) + { + for ( nB = startB, uB = 0; nB > endB; nB--, uB++ ) + { + sign = ( ts % 2 ) ? 1.0f : -1.0f; + realBufferFlipped[ts][uB] = -sign * realBuffer[ts][nB]; + imagBufferFlipped[ts][uB] = sign * imagBuffer[ts][nB]; + } + } + } + else + { + startB = 39; + endB = 19; + for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) + { + for ( nB = startB, uB = 0; nB > endB; nB--, uB++ ) + { + realBufferFlipped[ts][uB] = -realBuffer[ts][nB]; + imagBufferFlipped[ts][uB] = imagBuffer[ts][nB]; + } + } + } + + for ( nB = 0; nB < 10; nB++ ) + { + for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) + { + CldfbHB += ( realBufferFlipped[ts][nB] * realBufferFlipped[ts][nB] + imagBufferFlipped[ts][nB] * imagBufferFlipped[ts][nB] ); + } + } + if ( CldfbHB <= 0 ) + { + CldfbHB = 1.0f; + } + hBWE_TD->cldfbHBLT = 0.9f * hBWE_TD->cldfbHBLT + 0.1f * ( 0.221462f /*=1/log10(32768)*/ * ( log10f( CldfbHB ) - 1.0f ) ); + + if ( st->element_mode >= IVAS_CPE_DFT && hCPE->hStereoICBWE != NULL ) + { + hCPE->hStereoICBWE->icbweRefEner = EPSILON; + for ( nB = 20; nB < 40; nB++ ) + { + for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) + { + hCPE->hStereoICBWE->icbweRefEner += ( realBuffer[ts][nB] * realBuffer[ts][nB] + imagBuffer[ts][nB] * imagBuffer[ts][nB] ); + } + } + hCPE->hStereoICBWE->icbweRefEner = 0.05f * sqrtf( hCPE->hStereoICBWE->icbweRefEner ); + } + + lbEner = EPSILON; + for ( nB = 0; nB < 20; nB++ ) + { + for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) + { + lbEner += ( realBuffer[ts][nB] * realBuffer[ts][nB] + imagBuffer[ts][nB] * imagBuffer[ts][nB] ); + } + } + lbEner = 0.05f * sqrtf( lbEner ); + thr = icbwe_thr_TDM; + regV = icbwe_regressionValuesTDM; + + cldfbSynthesis( realBufferFlipped, imagBufferFlipped, shb_speech, -1, st->cldfbSynTd ); + } + + if ( st->element_mode >= IVAS_CPE_DFT && hCPE->hStereoICBWE != NULL ) + { + hCPE->hStereoICBWE->MSFlag = 0; /* Init the multi-source flag */ + v = 0.3333f * sum_f( st->voicing, 3 ); + t = log10f( ( hCPE->hStereoICBWE->icbweRefEner + 1e-6f ) / ( lbEner + 1e-6f ) ); + + /* Three Level Decision Tree to calculate a regression value first */ + if ( t < thr[0] ) /* level 1 */ + { + if ( t < thr[1] ) /* level 2 */ + { + regression = ( v < thr[3] ) ? regV[0] : regV[1]; /* level 3 */ + } + else + { + regression = ( v < thr[4] ) ? regV[2] : regV[3]; /* level 3 */ + } + } + else + { + if ( t < thr[2] ) /* level 2 */ + { + regression = ( v < thr[5] ) ? regV[4] : regV[5]; /* level 3 */ + } + else + { + regression = ( v < thr[6] ) ? regV[6] : regV[7]; /* level 3 */ + } + } + + /* Convert the regression to a hard decision (classification) */ + if ( regression > 0.79f && !( st->bwidth < SWB || hCPE->hCoreCoder[0]->vad_flag == 0 ) ) + { + hCPE->hStereoICBWE->MSFlag = 1; + } + } + + if ( st->extl != WB_TBE && st->extl != SWB_TBE && st->extl != FB_TBE ) + { + /* Update the previous superwideband speech buffer in case of a SWB_BWE frame - this code is in swb_tbe_enc */ + delay = L_LOOK_16k + L_SUBFR16k; + mvr2r( shb_speech + L_FRAME16k - delay, hBWE_TD->old_speech_shb, delay ); + } + } + else + { + if ( st->bwidth == FB || st->core == ACELP_CORE || ( st->element_mode == IVAS_CPE_DFT && input_Fs == 48000 ) ) + { + set_f( hBWE_TD->old_speech_shb, 0, L_LOOK_16k + L_SUBFR16k ); + set_f( shb_speech, 0, L_FRAME16k ); /* shb_speech for FB/SWB BWE_HIGHRATE is not used at 64kbps */ + set_f( st->hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); + set_f( st->hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); + st->hBWE_TD->old_mean_EnvSHBres = 0.0f; + st->hBWE_TD->prev_enr_EnvSHBres = 1.0f; + st->hBWE_TD->prev_shb_env_tilt = 0.0f; + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + st->hBWE_TD->prev_Env_error = 0.0f; + + if ( st->element_mode == IVAS_CPE_DFT ) + { + set_f( hCPE->hStereoDft->output_mem_dmx_16k_shb, 0, STEREO_DFT_OVL_16k ); + } + } + else + { + /* flip the spectrm */ + mvr2r( new_swb_speech, spchTmp, L_FRAME32k ); + + for ( i = 0; i < L_FRAME32k; i = i + 2 ) + { + spchTmp[i] = -spchTmp[i]; + } + + Decimate_allpass_steep( spchTmp, hBWE_TD->state_ana_filt_shb, L_FRAME32k, shb_speech ); + mvr2r( shb_speech + L_FRAME16k - ( L_LOOK_16k + L_SUBFR16k ), hBWE_TD->old_speech_shb, L_LOOK_16k + L_SUBFR16k ); + + /*Compute the past overlap for potential next iDFTs SHB*/ + if ( st->element_mode == IVAS_CPE_DFT ) + { + for ( i = 0; i < STEREO_DFT_OVL_16k; i++ ) + { + hCPE->hStereoDft->output_mem_dmx_16k_shb[i] = shb_speech[20 + i] * hCPE->hStereoDft->win_ana_16k[STEREO_DFT_OVL_16k - 1 - i] * hCPE->hStereoDft->win_ana_16k[STEREO_DFT_OVL_16k - 1 - i]; + } + } + } + + if ( st->element_mode != IVAS_CPE_DFT ) + { + /* Reset CLDFB synthesis buffer */ + set_f( st->cldfbSynTd->cldfb_state, 0.0f, st->cldfbSynTd->p_filter_length ); + } + } + + /* Memory reset to compensate for 0.9375 ms offset when transitioning from IO to SWB */ + /* When switching from n >1 to n = 1, we keep the enc/dec delay as 8.75/3.25 and below code not needed; + only when n = 1 start, it will be 9.6875/2.3125 in that case this reset is needed for IO->BWE.*/ + /* IVAS_fmToDo: revisit for IVAS (the condition is currently entered for both TD and DFT stereo - is it desirable?) */ + if ( st->last_extl == -1 ) + { + delay = NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ); + for ( i = 0; i < delay; i++ ) + { + shb_speech[i] = (float) i * ( 0.03f * shb_speech[2 * delay - 1 - i] ); + } + } + + return; +} diff --git a/lib_enc/swb_tbe_enc.c b/lib_enc/swb_tbe_enc.c new file mode 100644 index 0000000000..32b1118c15 --- /dev/null +++ b/lib_enc/swb_tbe_enc.c @@ -0,0 +1,2858 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "rom_enc.h" +#include "wmops.h" +#include "ivas_prot.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define ENVSHBRES_ACORR_MIN 40 /* minimum lag for calculating autocorrelation function on SHB residual TD envelope */ +#define ENVSHBRES_ACORR_MAX 80 /* maximum lag for calculating autocorrelation function on SHB residual TD envelope */ + + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void return_M_Least( const float *inp, const int16_t n_cols, const float *codebook, const int16_t num_grp, const float *weight, const int16_t interNum, int16_t *least ); +static void singlevectortest_gain( const float *inp, const int16_t dimen, const int16_t cb_size, int16_t *index, const float *weight, float *recon, const float *codebook ); +static void determine_gain_weights( const float *gain, float *weights, const int16_t dims ); +static void QuantizeSHBsubgains( Encoder_State *st, float *subgains, const int16_t extl ); +static void QuantizeSHBframegain( Encoder_State *st, float *GainFrame, const int16_t extl, const int32_t extl_brate, int16_t *rf_gainFrame_ind, int16_t flag_conservative ); +static int16_t closest_centroid( const float *data, const float *weights, const float *quantizer, const int16_t centroids, const int16_t length ); +static void EstimateSHBFrameGain( const int16_t length, const float *oriSHB, const float *synSHB, float *subgain, float *GainFrame, const float *win_shb, const float *subwin ); +static void EstimateSHBGainShape( const int16_t length, const float *oriSHB, const float *synSHB, float *subgain, const float *subwin ); +static float pow_off_pk( float a[], const int16_t len, const int16_t step ); +static float pow_off_pk_corrected( float a[], const int16_t len, const int16_t step ); +static void Quant_lower_LSF( const float lsf[], float lsf_q[], int16_t lsf_idx[] ); +static int16_t Quant_mirror_point( const float lsf[], const float lsf_q[], float *m ); +static int16_t Find_LSF_grid( const float lsf[], float lsf_q[], const float m ); +static void gainFrSmooth_En( TD_BWE_ENC_HANDLE hBWE_TD, const int16_t last_extl, float *shb_frame, const float *lpc_shb, const float *lsp_shb, float *MA_lsp_shb_spacing, int16_t *frGainAttenuate, int16_t *frGainSmoothEn ); +static void Quant_BWE_LSF( BSTR_ENC_HANDLE hBstr, TD_BWE_ENC_HANDLE hBWE_TD, const int16_t codec_mode, const float lsp_shb[], float Q_lsfs[], const int32_t extl_brate ); +static void Quant_shb_ener_sf( Encoder_State *st, float *shb_ener_sf ); +static void Quant_shb_res_gshape( Encoder_State *st, float *shb_res_gshape ); + +static void LVQQuant_BWE_LSF( BSTR_ENC_HANDLE hBstr, const float lsf_shb[], float Q_lsfs[], int16_t nbits ); + +/*-------------------------------------------------------------------* + * InitSWBencBuffer() + * + * Initialize SWB buffers and parameters + *-------------------------------------------------------------------*/ + +void InitSWBencBuffer( + TD_BWE_ENC_HANDLE hBWE_TD /* i/o: TD BWE data handle */ +) +{ + int16_t i; + + set_f( hBWE_TD->old_bwe_exc, 0.0f, ( PIT16k_MAX * 2 ) ); + hBWE_TD->bwe_seed[0] = 23; + hBWE_TD->bwe_seed[1] = 59; + set_f( hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); + hBWE_TD->bwe_non_lin_prev_scale = 0; + + set_f( hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + set_f( hBWE_TD->elliptic_bpf_2_48k_mem[0], 0.0f, 4 ); + set_f( hBWE_TD->elliptic_bpf_2_48k_mem[1], 0.0f, 4 ); + set_f( hBWE_TD->elliptic_bpf_2_48k_mem[2], 0.0f, 4 ); + set_f( hBWE_TD->elliptic_bpf_2_48k_mem[3], 0.0f, 4 ); + hBWE_TD->prev_fb_energy = 0.0f; + + set_f( hBWE_TD->old_speech_shb, 0.0f, L_LOOK_16k + L_SUBFR16k ); + set_f( hBWE_TD->old_speech_wb, 0.0f, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ); + set_f( hBWE_TD->old_input_fhb, 0.0f, NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2 ); + set_f( hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); + set_f( hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); + hBWE_TD->old_mean_EnvSHBres = 0.0f; + hBWE_TD->prev_enr_EnvSHBres = 1.0f; + hBWE_TD->prev_shb_env_tilt = 0.0f; + hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + hBWE_TD->prev_mix_factor = 1.0f; + hBWE_TD->prev_Env_error = 0.0f; + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->prev_lsp_shb[i] = i / 20.0f; + } + + hBWE_TD->cldfbHBLT = 1.0f; + hBWE_TD->prev_gainFr_SHB = 0; + set_f( hBWE_TD->lsp_shb_slow_interpl, 0, LPC_SHB_ORDER ); + set_f( hBWE_TD->lsp_shb_fast_interpl, 0, LPC_SHB_ORDER ); + set_f( hBWE_TD->shb_inv_filt_mem, 0, LPC_SHB_ORDER ); + set_f( hBWE_TD->lsp_shb_spacing, 0.1f, 3 ); + hBWE_TD->prev_swb_GainShape = 0; + hBWE_TD->prev_frGainAtten = 0; + hBWE_TD->prev_wb_GainShape = 0; + set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + hBWE_TD->fb_tbe_demph = 0.0f; + hBWE_TD->tilt_mem = 0.0f; + + hBWE_TD->prev_coder_type = GENERIC; + set_f( hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); + hBWE_TD->prev_tilt_para = 0.0f; + set_f( hBWE_TD->cur_sub_Aq, 0.0f, M + 1 ); + + /* TD BWE post-processing */ + hBWE_TD->ptr_mem_stp_swb = hBWE_TD->mem_stp_swb + LPC_SHB_ORDER - 1; + set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->swb_lsp_prev_interp[i] = (float) cos( (float) i * EVS_PI / (float) 10.0f ); + } + + set_f( hBWE_TD->dec_2_over_3_mem, 0.0f, L_FILT_2OVER3 ); + set_f( hBWE_TD->dec_2_over_3_mem_lp, 0.0f, L_FILT_2OVER3_LP ); + + return; +} + + +/*-------------------------------------------------------------------* + * ResetSHBbuffer_Enc() + * + *-------------------------------------------------------------------*/ + +void ResetSHBbuffer_Enc( + TD_BWE_ENC_HANDLE hBWE_TD /* i/o: TD BWE data handle */ +) +{ + /* states for the filters used in generating SHB excitation from WB excitation*/ + set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->mem_csfilt, 0, 2 ); + + /* states for the filters used in generating SHB signal from SHB excitation*/ + set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD ); + set_f( hBWE_TD->state_lpc_syn, 0, LPC_SHB_ORDER ); + set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + hBWE_TD->fb_tbe_demph = 0; + + /* states for the filters used in generating WB signal from WB excitation*/ + set_f( hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->mem_genSHBexc_filt_down_wb2, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( hBWE_TD->mem_genSHBexc_filt_down_wb3, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + /* overlap buffer used to Adjust SHB Frame Gain */ + set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); + hBWE_TD->gain_prec_swb = 1.0f; + set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); + hBWE_TD->tbe_demph = 0.0f; + hBWE_TD->tbe_premph = 0.0f; + + return; +} + + +/*-------------------------------------------------------------------* + * wb_tbe_enc() + * + * WB TBE encoder, 6 - 8 kHz band encoding module + *-------------------------------------------------------------------*/ + +void wb_tbe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float *hb_speech, /* i : HB target signal (6-8kHz) at 16kHz */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + const float voice_factors[], /* i : voicing factors */ + const float pitch_buf[] /* i : pitch for each subframe */ +) +{ + int16_t i, j, k, delay; + TD_BWE_ENC_HANDLE hBWE_TD; + BSTR_ENC_HANDLE hBstr; + float hb_old_speech[( L_LOOK_12k8 + L_SUBFR + L_FRAME ) * 5 / 16]; + float shaped_wb_excitation[( L_FRAME16k + L_SHB_LAHEAD ) / 4]; + float exc4kWhtnd[L_FRAME16k / 4]; + int16_t ana_align_delay = -L_SHB_LAHEAD / 4 - 5; + float GainFrame, GainShape[NUM_SHB_SUBFR]; + float lpc_wb[LPC_SHB_ORDER_WB + 1]; + float lsp_wb[LPC_SHB_ORDER_WB], weights_lsp[LPC_SHB_ORDER_WB] = { 1.0, 1.0 }; + float *hb_new_speech, *hb_frame; + float R[LPC_SHB_ORDER_WB + 2], ervec[LPC_SHB_ORDER_WB + 1]; + float prev_pow, curr_pow, scale; + float p2m_in, p2m_out; + int16_t uv_flag; + float pitBufAvg, voicingBufAvg; + float vf_modified[NB_SUBFR16k]; + float temp_wb_fac, feedback; + float lsp_spacing; + float ervec_temp[LPC_SHB_ORDER_WB + 1]; + float lsp_wb_temp[LPC_SHB_ORDER_WB], lpc_wb_temp[LPC_SHB_ORDER_WB + 1]; + + hBWE_TD = st->hBWE_TD; + hBstr = st->hBstr; + + /* delay alignment */ + delay = ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16; + + hb_new_speech = hb_old_speech + delay; + hb_frame = hb_old_speech + L_SUBFR * 5 / 16 + ana_align_delay; + + mvr2r( hBWE_TD->old_speech_wb, hb_old_speech, delay ); + mvr2r( hb_speech, hb_new_speech, L_FRAME16k / 4 ); + mvr2r( hb_old_speech + L_FRAME16k / 4, hBWE_TD->old_speech_wb, delay ); + + if ( ( st->last_extl != WB_TBE && st->last_extl != WB_BWE ) && + ( st->clas == UNVOICED_CLAS || ( st->voicing[0] < 0.5f && st->voicing[1] < 0.5f && st->voicing[2] < 0.5f ) ) && + ( !st->igf ) ) + { + /* In case of unvoiced signals after switching cores, back-propagate the target signal */ + mvr2r( hb_speech, hb_old_speech, delay ); + + for ( i = ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16, j = k = 0; j < L_SUBFR16k; i--, j += 4, k++ ) + { + hb_old_speech[i] *= ola_win_shb_switch_fold[j]; + hb_old_speech[i] += hb_speech[k] * ola_win_shb_switch_fold[L_SUBFR16k - 4 - j]; + } + } + + autocorr( hb_old_speech, R, LPC_SHB_ORDER_WB + 1, ( NS2SA( INT_FS_12k8, 5000000L ) + L_SUBFR + L_FRAME ) * 5 / 16, win_lpc_hb_wb, 0, 1, 1 ); + lev_dur( lpc_wb_temp, R, LPC_SHB_ORDER_WB, ervec_temp ); + a2lsp( lsp_wb_temp, lpc_wb_temp, LPC_SHB_ORDER_WB ); + lsp_spacing = 0.5f; + + for ( i = 0; i < LPC_SHB_ORDER_WB; i++ ) + { + lsp_spacing = min( lsp_spacing, (float) ( i == 0 ? lsp_wb_temp[0] : ( lsp_wb_temp[i] - lsp_wb_temp[i - 1] ) ) ); + } + + /* Spectral smoothing of autocorrelation coefficients */ + for ( i = 0; i <= LPC_SHB_ORDER_WB; i++ ) + { + R[i] = R[i] * wac[i]; + } + R[0] = max( R[0], 1.0e-8f ); + + if ( st->rf_mode == 1 || st->extl_brate == WB_TBE_0k35 ) + { + lev_dur( lpc_wb, R, LPC_SHB_ORDER_LBR_WB, ervec ); + + /* Expand bandwidth of the LP coeffs */ + for ( i = 0; i <= LPC_SHB_ORDER_LBR_WB; i++ ) + { + lpc_wb[i] *= lpc_weights[i]; + } + + /* convert into lsps and calculate weights */ + a2lsp( lsp_wb, lpc_wb, LPC_SHB_ORDER_LBR_WB ); + lsp_weights( lsp_wb, weights_lsp, LPC_SHB_ORDER_LBR_WB ); + + /* Quantization of LSFs */ + i = closest_centroid( lsp_wb, weights_lsp, lbr_wb_bwe_lsfvq_cbook_2bit, 4, LPC_SHB_ORDER_LBR_WB ); + if ( st->codec_mode == MODE2 ) + { + hBWE_TD->lsf_WB = i; + } + else + { + push_indice( hBstr, IND_SHB_LSF, i, NUM_BITS_LBR_WB_LSF ); + } + + mvr2r( lbr_wb_bwe_lsfvq_cbook_2bit + i * LPC_SHB_ORDER_LBR_WB, lsp_wb, LPC_SHB_ORDER_LBR_WB ); + + lsp2a( lpc_wb, lsp_wb, LPC_SHB_ORDER_LBR_WB ); + set_f( lpc_wb + LPC_SHB_ORDER_LBR_WB + 1, 0.0f, ( LPC_SHB_ORDER_WB - LPC_SHB_ORDER_LBR_WB ) ); + } + else + { + lev_dur( lpc_wb, R, LPC_SHB_ORDER_WB, ervec ); + + /* Expand bandwidth of the LP coeffs */ + for ( i = 0; i <= LPC_SHB_ORDER_WB; i++ ) + { + lpc_wb[i] *= lpc_weights[i]; + } + + /* convert into lsps and calculate weights */ + a2lsp( lsp_wb, lpc_wb, LPC_SHB_ORDER_WB ); + lsp_weights( lsp_wb, weights_lsp, LPC_SHB_ORDER_WB ); + + /* Quantization of LSFs */ + i = closest_centroid( lsp_wb, weights_lsp, wb_bwe_lsfvq_cbook_8bit, 256, LPC_SHB_ORDER_WB ); + push_indice( hBstr, IND_SHB_LSF, i, NUM_BITS_WB_LSF ); + + mvr2r( wb_bwe_lsfvq_cbook_8bit + i * LPC_SHB_ORDER_WB, lsp_wb, LPC_SHB_ORDER_WB ); + + lsp2a( lpc_wb, lsp_wb, LPC_SHB_ORDER_WB ); + } + + uv_flag = 0; + if ( st->extl_brate == WB_TBE_1k05 && st->coder_type_raw == UNVOICED ) + { + uv_flag = 1; + } + + mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); + if ( st->coder_type == VOICED ) + { + for ( i = 1; i < NB_SUBFR; i++ ) + { + vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; + } + + if ( st->L_frame != L_FRAME ) + { + vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; + } + } + + /* From low band excitation, generate highband excitation */ + mvr2r( hBWE_TD->state_syn_shbexc, shaped_wb_excitation, L_SHB_LAHEAD / 4 ); + GenShapedWBExcitation( shaped_wb_excitation + L_SHB_LAHEAD / 4, lpc_wb, exc4kWhtnd, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, uv_flag, st->igf ); + + prev_pow = sum2_f( shaped_wb_excitation, L_SHB_LAHEAD / 4 ); + curr_pow = sum2_f( shaped_wb_excitation + L_SHB_LAHEAD / 4, L_SHB_LAHEAD / 4 ); + + if ( voice_factors[0] > 0.75f ) + { + curr_pow = (float) ( curr_pow * 0.25 ); + } + + if ( prev_pow == 0 ) + { + scale = 0; + } + else + { + scale = (float) sqrt( curr_pow / prev_pow ); + } + + for ( i = 0; i < ( L_SHB_LAHEAD / 4 - 1 ); i++ ) + { + shaped_wb_excitation[i] *= scale; + } + + scale = (float) sqrt( scale ); + + shaped_wb_excitation[L_SHB_LAHEAD / 4 - 1] *= scale; + + /* Update WB excitation */ + mvr2r( shaped_wb_excitation + L_FRAME16k / 4, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD / 4 ); + + /* estimate the gain shape parameter */ + EstimateSHBGainShape( SHB_OVERLAP_LEN / 2, hb_frame, shaped_wb_excitation, GainShape, subwin_wb ); + + /* Gain frame adjustment factor */ + temp_wb_fac = (float) log( ( GainShape[0] + 0.00001f ) / ( hBWE_TD->prev_wb_GainShape + 0.0001f ) ); + feedback = temp_wb_fac * temp_wb_fac; + for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) + { + temp_wb_fac = (float) log( ( GainShape[i] + 0.00001f ) / ( GainShape[i - 1] + 0.0001f ) ); + feedback += ( temp_wb_fac * temp_wb_fac ); + } + feedback = 0.4f / ( 1 + 0.5f * feedback ); + + temp_wb_fac = hBWE_TD->prev_wb_GainShape; + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + GainShape[i] = ( 1 - feedback ) * GainShape[i] + feedback * temp_wb_fac; + temp_wb_fac = GainShape[i]; + } + hBWE_TD->prev_wb_GainShape = GainShape[NUM_SHB_SUBFR / 4 - 1]; + + /* Compute the power of gains away from the peak gain prior to quantization */ + if ( st->element_mode > EVS_MONO ) + { + p2m_in = pow_off_pk_corrected( GainShape, NUM_SHB_SUBFR / 4, 1 ); + } + else + p2m_in = pow_off_pk( GainShape, NUM_SHB_SUBFR / 4, 1 ); + + if ( st->extl_brate == WB_TBE_0k35 ) + { + for ( i = 0; i < 8; i++ ) + { + GainShape[i] = RECIP_ROOT_EIGHT; + } + } + else + { + push_indice( hBstr, IND_UV_FLAG, uv_flag, 1 ); + + /* Quantization of the subframe gain parameter */ + QuantizeSHBsubgains( st, GainShape, st->extl ); + } + + /* Compute the power of gains away from the peak gain after quantization */ + if ( st->element_mode > EVS_MONO ) + { + p2m_out = pow_off_pk_corrected( GainShape, NUM_SHB_SUBFR / 2, 2 ); + } + else + p2m_out = pow_off_pk( GainShape, NUM_SHB_SUBFR / 2, 2 ); + + /* Estimate the gain parameter */ + EstimateSHBFrameGain( SHB_OVERLAP_LEN / 2, hb_frame, shaped_wb_excitation, GainShape, &GainFrame, window_wb, subwin_wb ); + + /* If there's a big difference in the power of gains away from the peak gain */ + /* due to poor quantization then suppress energy of the high band. */ + if ( p2m_out > 2.0f * p2m_in ) + { + float temp = 0; + if ( p2m_in >= 0 && p2m_out > 0 ) + { + temp = (float) sqrt( ( 2.0f * p2m_in ) / p2m_out ); + } + GainFrame *= temp; + } + + pitBufAvg = 0.0025f * sum_f( pitch_buf, NB_SUBFR ); + voicingBufAvg = 0.333f * sum_f( st->voicing, 3 ); + if ( voicingBufAvg <= 0.0f && ( pitBufAvg != 0 ) ) + { + voicingBufAvg = pitBufAvg / 1.001f; + } + else if ( voicingBufAvg <= 0.0f ) + { + voicingBufAvg = 1.0f; + } + + GainFrame *= max( min( (float) ( pitBufAvg / voicingBufAvg ), 1.0f ), 0.7f ); + + if ( lsp_spacing < 0.01f ) + { + GainFrame *= 0.65f; + } + + /* Quantization of the frame gain parameter */ + if ( st->igf && st->coder_type == VOICED ) + { + GainFrame *= 0.5f; + } + else if ( st->igf && ( 0.25f * sum_f( voice_factors, NB_SUBFR ) > 0.35f ) ) + { + GainFrame *= 0.75f; + } + + if ( st->rf_mode ) + { + QuantizeSHBframegain( st, &GainFrame, st->extl, st->extl_brate, &st->hRF->RF_bwe_gainFr_ind, + 0 ); + } + else + { + QuantizeSHBframegain( st, &GainFrame, st->extl, st->extl_brate, NULL, + 0 ); + } + + /* Adjust the subframe and frame gain of the synthesized SHB signal */ + /* Scale the shaped excitation*/ + ScaleShapedSHB( SHB_OVERLAP_LEN / 2, shaped_wb_excitation, hBWE_TD->syn_overlap, GainShape, GainFrame, window_wb, subwin_wb ); + + return; +} + + +/*-------------------------------------------------------------------* + * swb_tbe_enc() + * + * SWB TBE encoder, 6 - 14 kHz (or 7.5 - 15.5 kHz) band encoding module + *-------------------------------------------------------------------*/ + +void swb_tbe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ + const float *shb_speech, /* i : SHB target signal (6-14kHz) at 16kHz */ + const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ + const float voice_factors[], /* i : voicing factors */ + float *White_exc16k, /* o : shaped white excitation for the FB TBE */ + const float pitch_buf[] /* i : pitch for each subframe */ +) +{ + int16_t i, j, delay; + TD_BWE_ENC_HANDLE hBWE_TD; + BSTR_ENC_HANDLE hBstr; + float shb_old_speech[L_LOOK_16k + L_SUBFR16k + L_FRAME16k]; + float shaped_shb_excitation[L_FRAME16k + L_SHB_LAHEAD]; + float GainFrame, GainShape[NUM_SHB_SUBFR]; + float lpc_shb[LPC_SHB_ORDER + 1]; + float lsf_q[LPC_SHB_ORDER]; + float weights_lsp[LPC_SHB_ORDER]; + float *shb_frame, *shb_new_speech; + float lsf_shb_orig[LPC_SHB_ORDER]; + float lsp_shb_1[LPC_SHB_ORDER], lsp_shb_2[LPC_SHB_ORDER], lsp_temp[LPC_SHB_ORDER]; + float lpc_shb_sf[4 * ( LPC_SHB_ORDER + 1 )]; + const float *ptr_lsp_interp_coef; + int16_t tmp; + float shb_ener_sf; + float lsf_shb[LPC_SHB_ORDER]; + float shb_res[L_FRAME16k]; + float shb_res_gshape[NB_SUBFR16k], normFac; + int16_t vf_ind; + float sd_uq_q, vf_modified[NB_SUBFR16k]; + float pitBufAvg, voicingBufAvg; + float R[LPC_SHB_ORDER + 2], ervec[LPC_SHB_ORDER + 1]; + int16_t ana_align_delay; + float prev_pow, curr_pow, scale; + float p2m_in, p2m_out; + int16_t frGainAttenuate, frGainSmoothEn; + float MA_lsp_shb_spacing; + float temp_swb_fac, feedback; + float shaped_shb_excitationTemp[L_FRAME16k]; + float lsf_diff[LPC_SHB_ORDER], w[LPC_SHB_ORDER]; + float refl[M]; + float tilt_para; + float formant_fac; + float temp; + int16_t stab_check = 1; + int16_t MSFlag; + float *nlExc16k, *mixExc16k; + int16_t k; + float pow0, fact_atten, alpha; + float acorr_EnvSHBres[ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN], *p_acorr, acorr_v2a, shb_env_tilt, Env_error; + float buf_EnvSHBres[2 * L_FRAME4k], *p_buf, EnvSHBres[L_FRAME16k], EnvSHBres_4k[L_FRAME4k], EnvSHBres_4k_norm[L_FRAME4k], env_mean_normf[L_FRAME4k]; + float GainShape_Interp[NUM_SHB_SUBGAINS], GainShape_tilt; + float seg_mean[4], den_seg_mean[4], *p_env, step; + int16_t seg_len, seg_len_2; + float den_seg_len, den_seg_len_2; + float sum_gain, normFact; + float Env_error_part[NUM_SHB_SUBGAINS]; + + + Env_error = 0.0f; + pitBufAvg = 0.0f; + voicingBufAvg = 0.0f; + set_zero( Env_error_part, NUM_SHB_SUBGAINS ); + shb_env_tilt = 0.0f; + + hBWE_TD = st->hBWE_TD; + hBstr = st->hBstr; + + if ( st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) + { + nlExc16k = hStereoICBWE->nlExc16k; + mixExc16k = hStereoICBWE->mixExc16k; + MSFlag = hStereoICBWE->MSFlag; + } + else + { + nlExc16k = NULL; + mixExc16k = NULL; + MSFlag = 0; + } + + /* initializations */ + set_f( shaped_shb_excitationTemp, 0.0f, L_FRAME16k ); + + if ( st->element_mode == IVAS_CPE_TD && ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) ) + { + ana_align_delay = -L_SHB_LAHEAD - ( NL_BUFF_OFFSET / 2 ) + 20; /* 20 corresponds to the 1.25 ms CLDFB delay */ + } + else + { + ana_align_delay = -L_SHB_LAHEAD - ( NL_BUFF_OFFSET / 2 ); + } + + /* compensate for the delay in target generation and subframe LA */ + shb_frame = shb_old_speech + L_SUBFR16k + ana_align_delay; + + set_f( shb_old_speech, 0, L_LOOK_16k + L_SUBFR16k + L_FRAME16k ); + + /* set up the speech buffers for TBE processing */ + delay = L_LOOK_16k + L_SUBFR16k; + if ( st->element_mode == IVAS_CPE_TD ) + { + shb_new_speech = shb_old_speech + delay - L_MEM_RECALC_TBE_16K; + } + else + { + shb_new_speech = shb_old_speech + delay; + } + + mvr2r( hBWE_TD->old_speech_shb, shb_old_speech, delay ); + mvr2r( shb_speech, shb_new_speech, L_FRAME16k ); + mvr2r( shb_old_speech + L_FRAME16k, hBWE_TD->old_speech_shb, delay ); + + autocorr( shb_old_speech, R, LPC_SHB_ORDER + 1, NS2SA( INT_FS_16k, ACELP_LOOK_NS ) + L_SUBFR16k + L_FRAME16k, win_lpc_shb, 0, 1, 1 ); + + /* Spectral smoothing of autocorrelation coefficients */ + if ( st->rf_mode || st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) + { + for ( i = 0; i <= LPC_SHB_ORDER; i++ ) + { + R[i] = R[i] * wac_swb[i]; + } + } + + /* Set the autocorr[0] element to a non-negative value */ + R[0] = max( R[0], 1.0e-8f ); + + lev_dur( lpc_shb, R, LPC_SHB_ORDER, ervec ); + { + float enerG, lpc_shb1[M + 1]; + + /* extend the lpc_shb to a 16th order gain calc */ + set_f( lpc_shb1, 0, M + 1 ); + mvr2r( lpc_shb, lpc_shb1, LPC_SHB_ORDER + 1 ); + + /* estimate the LP gain */ + enerG = enr_1_Az( lpc_shb1, 2 * L_SUBFR ); + + /* if the LP gain is greater than a threshold, avoid saturation. + The function 'is_numeric_float' used to check for infinity enerG */ + if ( enerG > 32 || !( is_numeric_float( enerG ) ) ) + { + set_f( lpc_shb, 0, LPC_SHB_ORDER + 1 ); + lev_dur( lpc_shb, R, 2, ervec ); + } + } + + /* Expand bandwidth of the LP coeffs */ + if ( st->rf_mode || st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) + { + for ( i = 0; i <= LPC_SHB_ORDER; i++ ) + { + lpc_shb[i] *= lpc_weights[i]; + } + } + + /* convert to LSFs */ + stab_check = a2lsp( lsf_shb, lpc_shb, LPC_SHB_ORDER ); + + if ( ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) || st->ini_frame == 0 ) + { + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + hBWE_TD->prev_lsp_shb[i] = i / 20.0f; + } + } + + if ( stab_check == 0 ) + { + mvr2r( hBWE_TD->prev_lsp_shb, lsf_shb, LPC_SHB_ORDER ); + } + + mvr2r( lsf_shb, hBWE_TD->prev_lsp_shb, LPC_SHB_ORDER ); + + mvr2r( lsf_shb, lsf_shb_orig, LPC_SHB_ORDER ); + + gainFrSmooth_En( hBWE_TD, st->last_extl, shb_frame, lpc_shb, lsf_shb, &MA_lsp_shb_spacing, &frGainAttenuate, &frGainSmoothEn ); + + if ( st->rf_mode || st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) + { + lsp_weights( lsf_shb, weights_lsp, LPC_SHB_ORDER ); + + /* to compensate for the 1.1* weighting done inside the function lsp_weights */ + weights_lsp[3] *= 0.909091f; + weights_lsp[4] *= 0.909091f; + + /* 8-bit VQ, 10 dimension */ + i = closest_centroid( lsf_shb, weights_lsp, swb_tbe_lsfvq_cbook_8b, 256, LPC_SHB_ORDER ); + mvr2r( swb_tbe_lsfvq_cbook_8b + i * LPC_SHB_ORDER, lsf_shb, LPC_SHB_ORDER ); + + set_s( hBWE_TD->lsf_idx, 0, NUM_Q_LSF ); + + if ( st->codec_mode == MODE1 ) + { + push_indice( hBstr, IND_SHB_LSF, i, 8 ); + } + else + { + hBWE_TD->lsf_idx[0] = i; + } + + mvr2r( swb_tbe_lsfvq_cbook_8b + i * LPC_SHB_ORDER, lsf_shb, LPC_SHB_ORDER ); + } + else + { + /* Quantization of LSFs */ + Quant_BWE_LSF( hBstr, st->hBWE_TD, st->codec_mode, lsf_shb, lsf_q, st->extl_brate ); + + mvr2r( lsf_q, lsf_shb, LPC_SHB_ORDER ); + } + + space_lsfs( lsf_shb, LPC_SHB_ORDER ); + + /* voice factor adjustment and gainframe attenuation factor */ + sd_uq_q = 0; + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + /* Estimate the QD in lsps between UQ and Q*/ + sd_uq_q += ( lsf_shb[i] - lsf_shb_orig[i] ) * ( lsf_shb[i] - lsf_shb_orig[i] ); + } + + mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); + + if ( st->coder_type == VOICED || mean( voice_factors, 4 ) > 0.4f ) + { + for ( i = 1; i < NB_SUBFR; i++ ) + { + vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; + } + + if ( st->L_frame != L_FRAME ) + { + vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; + } + } + + /* SHB LSF from current frame; and convert to LSP for interpolation */ + lsf2lsp( lsf_shb, lsp_shb_2, LPC_SHB_ORDER, 1 ); + + if ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) + { + /* SHB LSP values from prev. frame for interpolation */ + mvr2r( hBWE_TD->swb_lsp_prev_interp, lsp_shb_1, LPC_SHB_ORDER ); + } + else + { + /* Use current frame's LSPs; in effect no interpolation */ + mvr2r( lsp_shb_2, lsp_shb_1, LPC_SHB_ORDER ); + } + + lsf_diff[0] = lsf_diff[LPC_SHB_ORDER - 1] = 0.5f; + for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) + { + lsf_diff[i] = lsf_shb[i] - lsf_shb[i - 1]; + } + a2rc( hBWE_TD->cur_sub_Aq + 1, refl, M ); + + /* LSP interpolation for 13.2 kbps and 16.4 kbps */ + tilt_para = 6.6956f * ( 1.0f + refl[0] ) * ( 1.0f + refl[0] ) - 3.8714f * ( 1.0f + refl[0] ) + 1.3041f; + if ( st->last_extl != SWB_TBE ) + { + for ( i = 1; i < LPC_SHB_ORDER - 1; i++ ) + { + hBWE_TD->prev_lsf_diff[i - 1] = 0.5f * lsf_diff[i]; + } + } + + if ( st->extl_brate <= FB_TBE_1k8 ) + { + if ( !( hBWE_TD->prev_tilt_para > 5.0f && ( st->coder_type == TRANSITION || tilt_para < 1.0f ) ) && !( ( hBWE_TD->prev_tilt_para < 3.0f && hBWE_TD->prev_coder_type >= VOICED ) && tilt_para > 5.0f ) ) + { + for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) + { + w[i] = ( lsf_diff[i] < hBWE_TD->prev_lsf_diff[i - 1] ) ? min( max( 0.8f * lsf_diff[i] / hBWE_TD->prev_lsf_diff[i - 1], 0.5f ), 1.0f ) : min( max( 0.8f * hBWE_TD->prev_lsf_diff[i - 1] / lsf_diff[i], 0.5f ), 1.0f ); + } + w[0] = w[1]; + w[LPC_SHB_ORDER - 1] = w[LPC_SHB_ORDER - 2]; + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + lsp_temp[i] = lsp_shb_1[i] * ( 1.0f - w[i] ) + lsp_shb_2[i] * w[i]; + } + } + else + { + mvr2r( lsp_shb_2, lsp_temp, LPC_SHB_ORDER ); + } + } + + mvr2r( lsf_diff + 1, hBWE_TD->prev_lsf_diff, LPC_SHB_ORDER - 2 ); + hBWE_TD->prev_tilt_para = tilt_para; + + if ( st->extl_brate >= SWB_TBE_2k8 ) + { + /* SHB LSP interpolation */ + ptr_lsp_interp_coef = interpol_frac_shb; + for ( j = 0; j < 4; j++ ) + { + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + lsp_temp[i] = lsp_shb_1[i] * ( *ptr_lsp_interp_coef ) + lsp_shb_2[i] * ( *( ptr_lsp_interp_coef + 1 ) ); + } + ptr_lsp_interp_coef += 2; + + tmp = j * ( LPC_SHB_ORDER + 1 ); + /* convert from lsp to lsf */ + lsp2lsf( lsp_temp, lpc_shb_sf + tmp, LPC_SHB_ORDER, 1 ); + /* convert lsf to lpc for SHB synthesis */ + lsp2a( lpc_shb_sf + tmp, lpc_shb_sf + tmp, LPC_SHB_ORDER ); + lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )] = 1.0f; + } + + /* -------- Calculate the SHB Energy -------- */ + shb_ener_sf = 0.003125f * sum2_f( shb_frame + L_SHB_LAHEAD, L_FRAME16k ); + Quant_shb_ener_sf( st, &shb_ener_sf ); + + /* -------- calculate the residuals using the FOUR subframe LPCs -------- */ + set_f( shb_res, 0, L_FRAME16k ); + residu( lpc_shb_sf, LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD, shb_res, 80 ); + residu( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 80, shb_res + 80, 80 ); + residu( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 160, shb_res + 160, 80 ); + residu( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 240, shb_res + 240, 80 ); + + set_f( shb_res_gshape, 0, NB_SUBFR16k ); + for ( i = 0; i < NB_SUBFR16k; i++ ) + { + shb_res_gshape[i] = sum2_f( shb_res + i * 64, 64 ); + } + + maximum( shb_res_gshape, NB_SUBFR16k, &normFac ); + normFac = (float) 1.0f / ( 0.0001f + normFac ); + for ( i = 0; i < NB_SUBFR16k; i++ ) + { + shb_res_gshape[i] = (float) sqrt( shb_res_gshape[i] * normFac ); + } + + Quant_shb_res_gshape( st, shb_res_gshape ); + } + else if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + for ( j = 0; j < 4; j++ ) + { + tmp = j * ( LPC_SHB_ORDER + 1 ); + + /* convert from lsp to lsf */ + lsp2lsf( lsp_temp, lpc_shb_sf + tmp, LPC_SHB_ORDER, 1 ); + + /* convert lsf to lpc for SHB synthesis */ + lsp2a( lpc_shb_sf + tmp, lpc_shb_sf + tmp, LPC_SHB_ORDER ); + lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )] = 1.0f; + } + + /* -------- calculate the residuals using the FOUR subframe LPCs -------- */ + set_f( shb_res, 0, L_FRAME16k ); + residu( lpc_shb_sf, LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD, shb_res, 80 ); + residu( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 80, shb_res + 80, 80 ); + residu( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 160, shb_res + 160, 80 ); + residu( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 240, shb_res + 240, 80 ); + } + + /* Save the SWB LSP values from current frame for interpolation */ + mvr2r( lsp_shb_2, hBWE_TD->swb_lsp_prev_interp, LPC_SHB_ORDER ); + + /* convert from lsp to lsf */ + lsp2lsf( lsp_temp, lpc_shb, LPC_SHB_ORDER, 1 ); + + /* convert lsf to lpc for SHB synthesis */ + lsp2a( lpc_shb, lpc_shb, LPC_SHB_ORDER ); + lpc_shb[0] = 1.0f; + + mvr2r( hBWE_TD->state_syn_shbexc, shaped_shb_excitation, L_SHB_LAHEAD ); + + /* Determine formant PF strength */ + formant_fac = swb_formant_fac( lpc_shb[1], &hBWE_TD->tilt_mem ); + + /* calculate SHB auto-correlation function and convert to SHB voicing factor */ + acorr_v2a = 0.0f; + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + /* calculate the TD envelope of the SHB residual signal */ + find_td_envelope( shb_res, L_FRAME16k, 20, hBWE_TD->mem_shb_res, EnvSHBres ); + + /* downsample the TD envelope by 4 */ + for ( k = 0; k < L_FRAME4k; k++ ) + { + EnvSHBres_4k[k] = EnvSHBres[4 * k]; + } + + /* calculate long-term mean envelope over four consecutive segments using linear interpolation */ + seg_len = L_FRAME4k / 4; + den_seg_len = 1.0f / seg_len; + seg_len_2 = L_FRAME4k / 8; + den_seg_len_2 = 1.0f / ( seg_len_2 - 1 ); + for ( k = 0; k < 4; k++ ) + { + seg_mean[k] = max( 1.0f, mean( &EnvSHBres_4k[k * seg_len], seg_len ) ); + den_seg_mean[k] = 1.0f / seg_mean[k]; + } + + /* first half of the first segment */ + if ( hBWE_TD->old_mean_EnvSHBres == 0 ) + { + set_f( env_mean_normf, den_seg_mean[0], seg_len_2 ); + } + else + { + env_mean_normf[0] = hBWE_TD->old_mean_EnvSHBres; + step = ( den_seg_mean[0] - hBWE_TD->old_mean_EnvSHBres ) * den_seg_len_2; + for ( i = 1; i < seg_len_2; i++ ) + { + env_mean_normf[i] = env_mean_normf[i - 1] + step; + } + } + + /* segments 1-4 */ + p_env = &env_mean_normf[seg_len_2]; + for ( k = 1; k < 4; k++ ) + { + step = ( den_seg_mean[k] - den_seg_mean[k - 1] ) * den_seg_len; + for ( i = 0; i < seg_len; i++ ) + { + *p_env = *( p_env - 1 ) + step; + p_env++; + } + } + + /* last half of the last segment */ + set_f( p_env, den_seg_mean[3], seg_len_2 ); + hBWE_TD->old_mean_EnvSHBres = den_seg_mean[3]; + + /* normalize residual SHB envelope with its long-term mean envelope */ + for ( k = 0; k < L_FRAME4k; k++ ) + { + EnvSHBres_4k_norm[k] = EnvSHBres_4k[k] * env_mean_normf[k]; + } + + /* calculate tilt of the long-term mean envelope */ + lls_interp_n( seg_mean, 4, &shb_env_tilt, &temp, 0 ); + + /* copy previous residual envelope to the buffer */ + mvr2r( hBWE_TD->old_EnvSHBres, buf_EnvSHBres, L_FRAME4k ); + + /* subtract mean value from the normalized SHB residual envelope */ + p_buf = &buf_EnvSHBres[L_FRAME4k]; + temp = mean( EnvSHBres_4k_norm, L_FRAME4k ); + for ( k = 0; k < L_FRAME4k; k++ ) + { + *p_buf++ = EnvSHBres_4k_norm[k] - temp; + } + + /* update memory */ + mvr2r( &buf_EnvSHBres[L_FRAME4k], hBWE_TD->old_EnvSHBres, L_FRAME4k ); + + /* calculate energy normalization factor for the auto-correlation function */ + pow0 = sum2_f( &buf_EnvSHBres[L_FRAME4k], L_FRAME4k ) + 1.0f; + if ( hBWE_TD->prev_enr_EnvSHBres == 1.0f ) + { + scale = 1.0f / pow0; + } + else + { + scale = 1.0f / max( pow0, hBWE_TD->prev_enr_EnvSHBres ); + } + hBWE_TD->prev_enr_EnvSHBres = pow0; + + /* calculate normalized auto-correlation function on the residual normalized SHB envelope */ + p_acorr = acorr_EnvSHBres; + p_buf = &buf_EnvSHBres[L_FRAME4k - ENVSHBRES_ACORR_MIN]; + for ( k = 0; k < ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN; k++ ) + { + *p_acorr++ = scale * dotp( &buf_EnvSHBres[L_FRAME4k], p_buf--, L_FRAME4k ); + } + + /* calculate variance of the SHB autocorrelation function */ + acorr_v2a = sum2_f( acorr_EnvSHBres, ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN ) / ( ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN ); + + /* multiply with the maximum of the SHB autocorrelation function */ + maximum( acorr_EnvSHBres, ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN, &temp ); + acorr_v2a *= temp; + + alpha = 25.0f; + acorr_v2a = 2.0f / ( 1.0f + (float) expf( -alpha * acorr_v2a ) ) - 1.0f; + + /* limit in the range 0.0 - 1.0 */ + acorr_v2a = min( 1.0f, max( 0.0f, acorr_v2a ) ); + + hBWE_TD->prev_shb_env_tilt = shb_env_tilt; + } + + vf_ind = 20; + GenShapedSHBExcitation( shaped_shb_excitation + L_SHB_LAHEAD, lpc_shb, White_exc16k, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, st->extl, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), lpc_shb_sf, &shb_ener_sf, shb_res_gshape, shb_res, &vf_ind, formant_fac, hBWE_TD->fb_state_lpc_syn, &( hBWE_TD->fb_tbe_demph ), st->total_brate, 0, st->element_mode, st->flag_ACELP16k, nlExc16k, mixExc16k, st->extl_brate, MSFlag, + EnvSHBres_4k_norm, &( hBWE_TD->prev_pow_exc16kWhtnd ), &( hBWE_TD->prev_mix_factor ), &Env_error, Env_error_part ); + + /* fill-in missing SHB excitation */ + if ( ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) && st->last_core_brate <= SID_2k40 ) + { + mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, shaped_shb_excitation, L_SHB_LAHEAD ); + } + + if ( st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) + { + mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, hStereoICBWE->shbSynthRef, L_FRAME16k ); + } + + if ( st->extl_brate >= SWB_TBE_2k8 || st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + if ( st->codec_mode == MODE2 ) + { + hBWE_TD->idx_mixFac = vf_ind; + } + else + { + push_indice( hBstr, IND_SHB_VF, vf_ind, NUM_BITS_SHB_VF ); + } + } + + if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) + { + for ( i = 0; i < L_FRAME16k; i += L_SUBFR16k ) + { + /* TD BWE post-processing */ + PostShortTerm( &shaped_shb_excitation[L_SHB_LAHEAD + i], lpc_shb, &shaped_shb_excitationTemp[i], hBWE_TD->mem_stp_swb, hBWE_TD->ptr_mem_stp_swb, &( hBWE_TD->gain_prec_swb ), hBWE_TD->mem_zero_swb, formant_fac ); + } + + mvr2r( shaped_shb_excitationTemp, &shaped_shb_excitation[L_SHB_LAHEAD], L_FRAME16k ); + + prev_pow = sum2_f( shaped_shb_excitation, L_SHB_LAHEAD + 10 ); + curr_pow = sum2_f( shaped_shb_excitation + L_SHB_LAHEAD + 10, L_SHB_LAHEAD + 10 ); + + if ( voice_factors[0] > 0.75f ) + { + curr_pow = (float) ( curr_pow * 0.25 ); + } + + if ( prev_pow == 0 ) + { + scale = 0; + } + else + { + scale = (float) sqrt( curr_pow / prev_pow ); + } + + for ( i = 0; i < L_SHB_LAHEAD; i++ ) + { + shaped_shb_excitation[i] *= scale; + } + + for ( ; i < L_SHB_LAHEAD + 10; i++ ) + { + temp = ( i - 19 ) / 10.0f; + shaped_shb_excitation[i] *= ( temp * 1.0f + ( 1.0f - temp ) * scale ); + } + } + else + { + /* reset the PF memories if the PF is not running */ + set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); + hBWE_TD->gain_prec_swb = 1.0f; + set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); + } + + /* Update SHB excitation */ + mvr2r( shaped_shb_excitation + L_FRAME16k, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD ); + + /* Estimate the gain-shape parameter */ + EstimateSHBGainShape( SHB_OVERLAP_LEN, shb_frame, shaped_shb_excitation, GainShape, subwin_shb ); + + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + /* Gain shape attenuation in case of big error in envelope modelling */ + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + if ( Env_error_part[i] > 100.0f ) + { + /* set gain shape to the average of the remaining gains */ + GainShape[i] = ( sum_f( GainShape, NUM_SHB_SUBGAINS ) - GainShape[i] ) / ( NUM_SHB_SUBGAINS - 1 ); + } + } + } + + if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) + { + /* Gain shape BWS/high band low energy fix */ + if ( hBWE_TD->cldfbHBLT < 1.0f ) + { + /* There is not much HB past 10kHz; the temporal resolution is quite coarse, so reduce the dynamic range */ + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + /* 0.35f +/- delta variation; delta = 0.1*(GS-0.35)*/ + GainShape[i] = 0.315f + 0.1f * GainShape[i]; + } + } + } + + /* high-band gain control in case of BWS */ + if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) + { + if ( st->bwidth_sw_cnt > 0 ) + { + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape[i] *= ( (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD ); + } + } + } + + /* Gain shape adjustment factor */ + temp_swb_fac = (float) log( ( GainShape[0] + 0.00001f ) / ( hBWE_TD->prev_swb_GainShape + 0.0001f ) ); + feedback = temp_swb_fac * temp_swb_fac; + for ( i = 1; i < NUM_SHB_SUBGAINS; i++ ) + { + temp_swb_fac = (float) log( ( GainShape[i] + 0.00001f ) / ( GainShape[i - 1] + 0.0001f ) ); + feedback += ( temp_swb_fac * temp_swb_fac ); + } + + feedback = 0.4f / ( 1 + 0.5f * feedback ); + + /* calculate tilt in all sub-frame gains */ + mvr2r( GainShape, GainShape_Interp, NUM_SHB_SUBGAINS ); + lls_interp_n( GainShape_Interp, NUM_SHB_SUBGAINS, &GainShape_tilt, &temp, 1 ); + + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + if ( acorr_v2a < 0.4f && vf_ind >= 5 && fabs( GainShape_tilt ) < 0.2f && shb_env_tilt < 500.0f && hBWE_TD->prev_shb_env_tilt < 500.0f ) + { + /* stronger smoothing in case of unvoiced SHB residual signal with gaussian excitation */ + feedback = lin_interp( acorr_v2a, 0.4f, 0.0f, 0.0f, 0.95f, 0 ); + feedback = min( max( feedback, 0.0f ), 1.0f ); + + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape[i] = ( 1 - feedback ) * GainShape[i] + feedback * GainShape_Interp[i]; + } + } + } + else + { + if ( frGainAttenuate == 1 || ( sum_f( st->voicing, 3 ) > 2.4f && sum_f( voice_factors, 4 ) > 0.8f ) ) + { + temp_swb_fac = hBWE_TD->prev_swb_GainShape; + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape[i] = ( 1 - feedback ) * GainShape[i] + feedback * temp_swb_fac; + temp_swb_fac = GainShape[i]; + } + } + } + + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + /* Re-normalize gain shape before quantization */ + sum_gain = sum2_f( GainShape, NUM_SHB_SUBGAINS ); + if ( sum_gain == 0 ) + { + normFact = 0; + } + else + { + normFact = (float) sqrt( 1.0f / sum_gain ); + } + + v_multc( GainShape, normFact, GainShape, NUM_SHB_SUBGAINS ); + } + + hBWE_TD->prev_swb_GainShape = GainShape[3]; + + /* Compute the power of gains away from the peak gain prior to quantization */ + if ( st->element_mode > EVS_MONO ) + { + p2m_in = pow_off_pk_corrected( GainShape, NUM_SHB_SUBGAINS, 1 ); + } + else + p2m_in = pow_off_pk( GainShape, NUM_SHB_SUBGAINS, 1 ); + + /* Quantization of the gain shape parameter */ + QuantizeSHBsubgains( st, GainShape, st->extl ); + + /* Compute the power of gains away from the peak gain after quantization */ + if ( st->element_mode > EVS_MONO ) + { + p2m_out = pow_off_pk_corrected( GainShape, NUM_SHB_SUBFR, 4 ); + } + else + p2m_out = pow_off_pk( GainShape, NUM_SHB_SUBFR, 4 ); + + /* Gain shape smoothing after quantization */ + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape_Interp[i] = GainShape[i * NUM_SHB_SUBGAINS]; + } + + lls_interp_n( GainShape_Interp, NUM_SHB_SUBGAINS, &GainShape_tilt, &temp, 1 ); + + if ( vf_ind >= 6 && fabs( GainShape_tilt ) < 0.12f ) + { + feedback = 0.3f; + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + GainShape[i] = ( 1 - feedback ) * GainShape[i * NUM_SHB_SUBGAINS] + feedback * GainShape_Interp[i]; + } + + for ( i = NUM_SHB_SUBFR - 1; i > 0; i-- ) + { + GainShape[i] = GainShape[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; + } + } + } + + /* Estimate the gain parameter */ + EstimateSHBFrameGain( SHB_OVERLAP_LEN, shb_frame, shaped_shb_excitation, GainShape, &GainFrame, window_shb, subwin_shb ); + + if ( st->tec_tfa == 1 ) + { + tfaCalcEnv( shb_frame, st->tfa_enr ); + } + + /* If there's a big difference in the power of gains away from the peak gain */ + /* due to poor quantization then suppress energy of the high band. */ + if ( p2m_out > 2.0f * p2m_in ) + { + temp = 0.f; + if ( p2m_in >= 0 && p2m_out > 0 ) + { + temp = (float) sqrt( ( 2.0f * p2m_in ) / p2m_out ); + } + GainFrame *= temp; + } + + if ( st->element_mode > EVS_MONO && st->L_frame != st->last_L_frame && st->coder_type == TRANSITION && st->coder_type_raw != VOICED && st->clas == VOICED_CLAS && st->last_clas == VOICED_CLAS && ( 3.0f * voice_factors[0] < voice_factors[( st->L_frame >> 6 ) - 1] ) ) + { + float fac = GainFrame / hBWE_TD->prev_gainFr_SHB; + + if ( fac > 4.0f ) + { + GainFrame = 4.0f * GainFrame / fac; + } + } + + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + if ( acorr_v2a > 0.1f && Env_error > 5.0f ) + { + /* attenuate frame gain in case of voiced SHB residual signal with gaussian excitation */ + fact_atten = lin_interp( Env_error, 5.0f, 1.0f, 25.0f, 0.2f, 1 ); + GainFrame *= fact_atten; + } + /* Frame gain attenuation in case of big error in envelope modelling */ + else if ( Env_error > 100.0f || hBWE_TD->prev_Env_error > 100.0f ) + { + if ( Env_error > 100.0f ) + { + fact_atten = lin_interp( Env_error, 100.0f, 1.0f, 300.0f, 0.1f, 1 ); + } + else + { + fact_atten = lin_interp( hBWE_TD->prev_Env_error, 100.0f, 1.0f, 300.0f, 0.5f, 1 ); + } + GainFrame *= fact_atten; + } + } + else + { + if ( frGainSmoothEn == 1 && hBWE_TD->prev_gainFr_SHB < GainFrame ) + { + GainFrame = 0.5f * ( hBWE_TD->prev_gainFr_SHB + GainFrame ); + } + } + + if ( frGainAttenuate == 1 && MA_lsp_shb_spacing <= 0.0024f ) + { + GainFrame = (float) pow( GainFrame, 0.8f ); + } + else if ( hBWE_TD->prev_frGainAtten == 1 && GainFrame > 3.0f * hBWE_TD->prev_gainFr_SHB ) + { + GainFrame *= ( 0.8f + 0.5f * feedback ); + } + hBWE_TD->prev_frGainAtten = frGainAttenuate; + + hBWE_TD->prev_gainFr_SHB = GainFrame; + + if ( GainFrame > 153.0f && st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) + { + hStereoICBWE->MSFlag = 1; + } + + /* Gain attenuation when the SWB LSF quantization error is larger than a threshold */ + sd_uq_q = ( sd_uq_q / 0.0025f ); + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + sd_uq_q = 1 - 0.7f * ( sd_uq_q * sd_uq_q ); + } + else + { + if ( st->L_frame == L_FRAME ) + { + sd_uq_q = 1 - 0.2f * ( sd_uq_q * sd_uq_q ); + } + else + { + sd_uq_q = 1 - 0.1f * ( sd_uq_q * sd_uq_q ); + } + } + + sd_uq_q = max( min( sd_uq_q, 1.0f ), 0.5f ); + + if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) + { + pitBufAvg = 0.0025f * sum_f( pitch_buf, 4 ); + voicingBufAvg = ( sum_f( voice_factors, 4 ) > 0.6f ) ? 0.333f : 0.1667f; + voicingBufAvg = voicingBufAvg * sum_f( st->voicing, 3 ); + + if ( voicingBufAvg <= 0.0f && sd_uq_q * pitBufAvg != 0 ) + { + voicingBufAvg = sd_uq_q * pitBufAvg / 1.001f; + } + else if ( voicingBufAvg <= 0.0f ) + { + voicingBufAvg = 1.0f; + } + } + + /* high-band gain control in case of BWS */ + if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) + { + if ( st->bwidth_sw_cnt > 0 ) + { + GainFrame *= ( (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD ); + } + } + + /* Controlled gain evolution in SWB for stronger voiced segments */ + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + GainFrame *= sd_uq_q; + } + else + { + GainFrame *= max( min( (float) ( sd_uq_q * pitBufAvg / voicingBufAvg ), 1.0f ), 0.6f ); + } + + if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) + { + if ( st->rf_mode == 1 ) + { + /* Compensate for energy increase mismatch due to memory-less synthesis */ + GainFrame *= 0.85f; + } + } + else + { + if ( st->L_frame == L_FRAME16k || st->rf_mode == 1 ) + { + /* Compensate for energy increase mismatch due to memory-less synthesis*/ + GainFrame *= 0.85f; + } + } + + /* Quantization of the frame gain parameter */ + if ( st->rf_mode ) + { + QuantizeSHBframegain( st, &GainFrame, st->extl, 0, &st->hRF->RF_bwe_gainFr_ind, + 0 ); + } + else + { + QuantizeSHBframegain( st, &GainFrame, st->extl, 0, NULL, + ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) ? 1 : 0 ); + } + + if ( hStereoICBWE != NULL ) + { + push_indice( hBstr, IND_STEREO_ICBWE_MSFLAG, hStereoICBWE->MSFlag, STEREO_ICBWE_MSFLAG_BITS ); + } + + /* Backup for the IC BWE parameters */ + if ( st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) + { + mvr2r( lpc_shb, hStereoICBWE->lpSHBRef, LPC_SHB_ORDER + 1 ); + } + + if ( st->extl == FB_TBE ) + { + for ( i = 0; i < L_FRAME16k; i++ ) + { + White_exc16k[i] *= GainFrame * GainShape[NUM_SHB_SUBFR * i / L_FRAME16k]; + } + } + + hBWE_TD->prev_Env_error = Env_error; + + return; +} + + +/*-------------------------------------------------------------------* + * EstimateSHBFrameGain() + * + * Estimate the overall gain factor needed to scale synthesized highband + * to original highband signal level. + *-------------------------------------------------------------------*/ + +static void EstimateSHBFrameGain( + const int16_t length, /* i : SHB overlap length */ + const float *oriSHB, /* i : target original SHB frame */ + const float *synSHB, /* i : shaped SHB excitation */ + float *subgain, /* o : estimate of gain shape */ + float *GainFrame, /* o : estimat of gain frame */ + const float *win_shb, /* i : SHB window */ + const float *subwin /* i : subframe window */ +) +{ + const int16_t *skip; + int16_t i, j, k, l_shb_lahead, l_frame; + int16_t join_length, num_join; + float sig, mod_syn[L_FRAME16k + L_SHB_LAHEAD]; + float oriNrg = 0.0f, synNrg = 0.0f, sum_gain; + float frame_gain; + + /* initilaization */ + l_frame = L_FRAME16k; + l_shb_lahead = L_SHB_LAHEAD; + skip = skip_bands_SWB_TBE; + + if ( length == SHB_OVERLAP_LEN / 2 ) + { + skip = skip_bands_WB_TBE; + l_frame = L_FRAME16k / 4; + l_shb_lahead = L_SHB_LAHEAD / 4; + } + + /* apply gain for each subframe, and store noise output signal using overlap-add*/ + set_f( mod_syn, 0, l_frame + l_shb_lahead ); + + if ( length == SHB_OVERLAP_LEN / 2 ) + { + sum_gain = 0; + for ( k = 0; k < length / 2; k++ ) + { + sum_gain = subwin[2 * k + 2] * subgain[0]; + mod_syn[skip[0] + k] = synSHB[skip[0] + k] * sum_gain; + mod_syn[skip[0] + k + length / 2] = synSHB[skip[0] + k + length / 2] * subgain[0]; + } + + for ( i = 1; i < NUM_SHB_SUBFR / 2; i++ ) + { + for ( k = 0; k < length; k++ ) + { + sum_gain = subwin[k + 1] * subgain[i] + subwin[length - k - 1] * subgain[i - 1]; + mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; + } + } + + for ( k = 0; k < length / 2; k++ ) + { + sum_gain = subwin[length - 2 * k - 2] * subgain[i - 1]; + mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; + } + } + else + { + num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; + join_length = num_join * length; + for ( k = 0, j = 0; k < length; k++ ) + { + mod_syn[j] = synSHB[j] * subwin[k + 1] * subgain[0]; + j++; + } + for ( i = 0; i < NUM_SHB_SUBGAINS - 1; i++ ) + { + for ( k = 0; k < join_length - length; k++ ) + { + mod_syn[j] = synSHB[j] * subgain[i * num_join]; + j++; + } + + for ( k = 0; k < length; k++ ) + { + mod_syn[j] = synSHB[j] * ( subwin[length - k - 1] * subgain[i * num_join] + subwin[k + 1] * subgain[( i + 1 ) * num_join] ); + j++; + } + } + for ( k = 0; k < join_length - length; k++ ) + { + mod_syn[j] = synSHB[j] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; + j++; + } + for ( k = 0; k < length; k++ ) + { + mod_syn[j] = synSHB[j] * subwin[length - k - 1] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; + j++; + } + } + + /* adjust frame energy */ + oriNrg = (float) 1e-10; + synNrg = (float) 1e-10; + + for ( i = 0; i < l_shb_lahead; i++ ) + { + sig = oriSHB[i] * win_shb[i]; + oriNrg += sig * sig; + + sig = mod_syn[i] * win_shb[i]; + synNrg += sig * sig; + } + + for ( ; i < l_frame; i++ ) + { + oriNrg += oriSHB[i] * oriSHB[i]; + synNrg += mod_syn[i] * mod_syn[i]; + } + + for ( ; i < l_frame + l_shb_lahead; i++ ) + { + sig = oriSHB[i] * win_shb[l_frame + l_shb_lahead - 1 - i]; + oriNrg += sig * sig; + + sig = mod_syn[i] * win_shb[l_frame + l_shb_lahead - 1 - i]; + synNrg += sig * sig; + } + + frame_gain = (float) sqrt( oriNrg / synNrg ); + if ( ( synNrg ) == 0 ) + { + frame_gain = 0; + } + + *GainFrame = (float) frame_gain; + + return; +} + + +/*-------------------------------------------------------------------* + * pow_off_pk() + * + * Sums squares of SWB shape gain parameters away from peak values + *-------------------------------------------------------------------*/ + +static float pow_off_pk( + float a[], + const int16_t len, + const int16_t step ) +{ + int16_t i, j = 0; + float sum; + + sum = a[0] * a[0]; + for ( j = 0, i = 1; i < len; i += step ) + { + sum += a[i] * a[i]; + if ( a[i] > a[j] ) + { + j = i; + } + } + + sum -= a[j] * a[j]; + + return ( sum ); +} + +/*-------------------------------------------------------------------* + * pow_off_pk_corrected() + * + * Sums squares of SWB shape gain parameters away from peak values + * VM: !! includes correction of indexing !! + *-------------------------------------------------------------------*/ + +static float pow_off_pk_corrected( + float a[], + const int16_t len, + const int16_t step ) +{ + int16_t i, j = 0; + float sum; + + sum = a[0] * a[0]; + for ( j = 0, i = step; i < len; i += step ) + { + sum += a[i] * a[i]; + if ( a[i] > a[j] ) + { + j = i; + } + } + + sum -= a[j] * a[j]; + + return ( sum ); +} + + +/*-------------------------------------------------------------------* + * EstimateSHBGainShape() + * + * Estimate temporal gain parameters + *-------------------------------------------------------------------*/ + +static void EstimateSHBGainShape( + const int16_t length, /* i : SHB overlap length */ + const float *oriSHB, /* i : target original SHB frame */ + const float *synSHB, /* i : shaped SHB excitation */ + float *subgain, /* o : estimate of gain shape */ + const float *subwin /* i : SHB subframe window */ +) +{ + const int16_t *skip; + int16_t i, k; + float sum_gain, oriNrg, synNrg, sig; + int16_t num_join, num_gains, join_length; + float normFact; + + num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; + num_gains = NUM_SHB_SUBGAINS; + skip = skip_bands_SWB_TBE; + + if ( length == SHB_OVERLAP_LEN / 2 ) + { + num_gains = NUM_SHB_SUBFR / 4; + skip = skip_bands_WB_TBE; + } + + /* calculate and normalize the subgain */ + sum_gain = (float) 1e-10; + oriNrg = 0.0f; + synNrg = 0.0f; + + if ( length == SHB_OVERLAP_LEN / 2 ) + { + for ( i = 0; i < NUM_SHB_SUBFR / 2; i++ ) + { + if ( ( i & 0x1 ) == 0 ) + { + oriNrg = 1e-10f; + synNrg = 1e-10f; + } + + if ( i == 0 ) + { + for ( k = 0; k < length / 2; k++ ) + { + sig = oriSHB[skip[i] + k] * subwin[2 * k + 2]; + oriNrg += sig * sig; + + sig = synSHB[skip[i] + k] * subwin[2 * k + 2]; + synNrg += sig * sig; + } + + for ( k = length / 2; k < length; k++ ) + { + sig = oriSHB[skip[i] + k]; + oriNrg += sig * sig; + + sig = synSHB[skip[i] + k]; + synNrg += sig * sig; + } + } + else + { + for ( k = 0; k < length; k++ ) + { + sig = oriSHB[skip[i] + k] * subwin[k + 1]; + oriNrg += sig * sig; + + sig = synSHB[skip[i] + k] * subwin[k + 1]; + synNrg += sig * sig; + } + } + + if ( i == NUM_SHB_SUBFR / 2 - 1 ) + { + for ( ; k < 2 * length - length / 2; k++ ) + { + sig = oriSHB[skip[i] + k] * subwin[3 * length - 2 * k - 2]; + oriNrg += sig * sig; + + sig = synSHB[skip[i] + k] * subwin[3 * length - 2 * k - 2]; + synNrg += sig * sig; + } + } + else + { + for ( ; k < 2 * length; k++ ) + { + sig = oriSHB[skip[i] + k] * subwin[2 * length - k - 1]; + oriNrg += sig * sig; + + sig = synSHB[skip[i] + k] * subwin[2 * length - k - 1]; + synNrg += sig * sig; + } + } + + if ( ( i & 0x1 ) == 1 ) + { + subgain[i / 2] = (float) sqrt( oriNrg / synNrg ); + if ( synNrg == 0 ) + { + subgain[i / 2] = 0; + } + + sum_gain += subgain[i / 2] * subgain[i / 2]; + } + } + } + else + { + join_length = num_join * length; + + for ( i = 0; i < num_gains; i++ ) + { + oriNrg = 1e-10f; + synNrg = 1e-10f; + + for ( k = 0; k < length; k++ ) + { + sig = oriSHB[join_length * i + k] * subwin[k + 1]; + oriNrg += sig * sig; + + sig = synSHB[join_length * i + k] * subwin[k + 1]; + synNrg += sig * sig; + } + + for ( k = 0; k < ( join_length - length ); k++ ) + { + sig = oriSHB[length + join_length * i + k]; + oriNrg += sig * sig; + + sig = synSHB[length + join_length * i + k]; + synNrg += sig * sig; + } + + for ( k = 0; k < length; k++ ) + { + sig = oriSHB[join_length * ( i + 1 ) + k] * subwin[length - k - 1]; + oriNrg += sig * sig; + + sig = synSHB[join_length * ( i + 1 ) + k] * subwin[length - k - 1]; + synNrg += sig * sig; + } + + subgain[i] = (float) sqrt( oriNrg / synNrg ); + if ( synNrg == 0 ) + { + subgain[i] = 0; + } + + sum_gain += subgain[i] * subgain[i]; + } + } + + /* normalize the subgain */ + normFact = (float) sqrt( 1.0f / sum_gain ); + if ( sum_gain == 0 ) + { + normFact = 0; + } + + for ( i = 0; i < num_gains; i++ ) + { + subgain[i] *= normFact; + } + + return; +} + + +/*-------------------------------------------------------------------* + * Quant_lower_LSF() + * + * Quantize the lower half of the LSF vector + *-------------------------------------------------------------------*/ + +static void Quant_lower_LSF( + const float lsf[], /* i : Input LSFs */ + float lsf_q[], /* o : Quantized LSFs */ + int16_t lsf_idx[] /* o : Quantized LSFs indices */ +) +{ + int16_t i; + + lsf_idx[0] = (int16_t) squant( lsf[0], &lsf_q[0], lsf_q_cb[0], lsf_q_cb_size[0] ); + for ( i = 1; i < NUM_Q_LSF; i++ ) + { + lsf_idx[i] = (int16_t) squant( lsf[i] - lsf_q[i - 1], &lsf_q[i], lsf_q_cb[i], lsf_q_cb_size[i] ); + lsf_q[i] += lsf_q[i - 1]; + } + + return; +} + +/*-------------------------------------------------------------------* + * Quant_mirror_point() + * + * Quantize the mirror point + *-------------------------------------------------------------------*/ + +static int16_t Quant_mirror_point( + const float lsf[], /* i : Input LSFs */ + const float lsf_q[], + float *m /* o : Mirror point */ +) +{ + float m_diff; + int16_t m_idx; + + m_diff = 0.5f * ( lsf[NUM_Q_LSF] - lsf_q[NUM_Q_LSF - 1] ); + m_idx = (int16_t) squant( m_diff, m, mirror_point_q_cb, MIRROR_POINT_Q_CB_SIZE ); + + *m += lsf_q[NUM_Q_LSF - 1]; + + return m_idx; +} + +/*-------------------------------------------------------------------* + * Find_LSF_grid() + * + * Find the best grid for the LSFs + *-------------------------------------------------------------------*/ + +static int16_t Find_LSF_grid( + const float lsf[], /* i : Input LSFs */ + float lsf_q[], /* o : Quantized LSFs */ + const float m /* i : Mirror point */ +) +{ + float lsf_map[NUM_MAP_LSF]; + float grid[NUM_LSF_GRIDS][NUM_MAP_LSF]; + float offset; + float last_q_lsf; + float lsf_t[NUM_MAP_LSF]; + float lsf_smooth[NUM_MAP_LSF]; + float D, D_best; + int16_t I_best = 0; + int16_t i, j; + float scale; + + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + lsf_map[i] = 2 * m - lsf_q[NUM_MAP_LSF - 1 - i]; + } + + if ( m > MAX_LSF / 2 ) + { + offset = lsf_map[0]; + scale = ( MAX_LSF - m ) / m; + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + lsf_map[i] = ( lsf_map[i] - offset ) * scale + offset; + } + } + + last_q_lsf = lsf_q[NUM_Q_LSF - 1]; + scale = MAX_LSF - last_q_lsf; + + for ( i = 0; i < NUM_LSF_GRIDS; i++ ) + { + for ( j = 0; j < NUM_MAP_LSF; j++ ) + { + grid[i][j] = lsf_grid[i][j] * scale + last_q_lsf; + } + } + + D_best = QUANT_DIST_INIT; + for ( i = 0; i < NUM_LSF_GRIDS; i++ ) + { + D = EPSILON; + for ( j = 0; j < NUM_MAP_LSF; j++ ) + { + lsf_t[j] = ( 1 - grid_smoothing[j] ) * lsf_map[j] + grid_smoothing[j] * grid[i][j]; + D += ( lsf_t[j] - lsf[NUM_Q_LSF + j] ) * ( lsf_t[j] - lsf[NUM_Q_LSF + j] ); + } + + if ( D < D_best ) + { + mvr2r( lsf_t, lsf_smooth, NUM_MAP_LSF ); + D_best = D; + I_best = i; + } + } + + for ( i = 0; i < NUM_MAP_LSF; i++ ) + { + lsf_q[NUM_Q_LSF + i] = lsf_smooth[i]; + } + + return I_best; +} + +/*-------------------------------------------------------------------* + * gainFrSmooth_En() + * + * Gain frame smoothing and attenuation control + *-------------------------------------------------------------------*/ + +static void gainFrSmooth_En( + TD_BWE_ENC_HANDLE hSWB_TD, + const int16_t last_extl, + float *shb_frame, + const float *lpc_shb, + const float *lsp_shb, + float *MA_lsp_shb_spacing, + int16_t *frGainAttenuate, + int16_t *frGainSmoothEn ) +{ + float lsp_slow_evol_rate = 0, lsp_fast_evol_rate = 0, lsp_spacing = 0.5f; + float temp_shb_frame[L_FRAME16k + L_SHB_LAHEAD]; + int16_t i; + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + lsp_spacing = min( lsp_spacing, (float) ( i == 0 ? lsp_shb[0] : ( lsp_shb[i] - lsp_shb[i - 1] ) ) ); + + /* estimate the mean square error in lsps from current frame to past frames */ + lsp_slow_evol_rate += ( lsp_shb[i] - hSWB_TD->lsp_shb_slow_interpl[i] ) * ( lsp_shb[i] - hSWB_TD->lsp_shb_slow_interpl[i] ); + lsp_fast_evol_rate += ( lsp_shb[i] - hSWB_TD->lsp_shb_fast_interpl[i] ) * ( lsp_shb[i] - hSWB_TD->lsp_shb_fast_interpl[i] ); + + /* update the slow and fast interpolation lsps for next frame */ + hSWB_TD->lsp_shb_slow_interpl[i] = 0.7f * hSWB_TD->lsp_shb_slow_interpl[i] + 0.3f * lsp_shb[i]; + hSWB_TD->lsp_shb_fast_interpl[i] = 0.3f * hSWB_TD->lsp_shb_fast_interpl[i] + 0.7f * lsp_shb[i]; + } + + if ( last_extl != SWB_TBE && last_extl != FB_TBE && lsp_spacing < 0.008f ) + { + hSWB_TD->lsp_shb_spacing[0] = lsp_spacing; + hSWB_TD->lsp_shb_spacing[1] = lsp_spacing; + hSWB_TD->lsp_shb_spacing[2] = lsp_spacing; + hSWB_TD->prev_frGainAtten = 1; + } + + *MA_lsp_shb_spacing = 0.1f * hSWB_TD->lsp_shb_spacing[0] + 0.2f * hSWB_TD->lsp_shb_spacing[1] + 0.3f * hSWB_TD->lsp_shb_spacing[2] + 0.4f * lsp_spacing; + + hSWB_TD->lsp_shb_spacing[0] = hSWB_TD->lsp_shb_spacing[1]; + hSWB_TD->lsp_shb_spacing[1] = hSWB_TD->lsp_shb_spacing[2]; + hSWB_TD->lsp_shb_spacing[2] = lsp_spacing; + + *frGainAttenuate = 0; + *frGainSmoothEn = 0; + + if ( ( lsp_spacing < 0.008f && ( *MA_lsp_shb_spacing < 0.005f || hSWB_TD->prev_frGainAtten == 1 ) ) || lsp_spacing <= 0.0032f ) + { + *frGainAttenuate = 1; + mvr2r( shb_frame, temp_shb_frame, L_FRAME16k + L_SHB_LAHEAD ); + + fir( temp_shb_frame, lpc_shb, shb_frame, hSWB_TD->shb_inv_filt_mem, L_FRAME16k + L_SHB_LAHEAD, LPC_SHB_ORDER, 1 ); + + if ( lsp_slow_evol_rate < 0.001f && lsp_fast_evol_rate < 0.001f ) + { + *frGainSmoothEn = 1; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * Quant_BWE_LSF() + * + * Quantize super highband spectral envolope + *-------------------------------------------------------------------*/ + +static void LVQQuant_BWE_LSF( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle*/ + const float lsf_shb[], /* i : unquanitzed LSFs */ + float Q_lsfs[], /* o : quanitzed LSFs */ + int16_t nbits ) +{ + float lsf[LPC_SHB_ORDER]; + float lsf_q[LPC_SHB_ORDER]; + int16_t i, c2, dim1 = 6; + int16_t levels[1], numbits_VQ; + + + float w[8] = { 5.0f, 5.0f, 2.0f, 2.0f, 2.0f, 1.0f, 1.0f, 1.0f }; + float cand[LPC_SHB_ORDER], quant[LPC_SHB_ORDER], e[2], ftmp; + const float *cb_stage; + int16_t indices_firstVQ[LSFMBEST]; + + int16_t Idx, idx_lead, idx_scale; + UWord32 LVQ_index; + float dd[LATTICE_DIM], cv_out[LATTICE_DIM]; + int16_t bits_lvq, predictor_bits, empty_bits; + + empty_bits = 0; /* This is the difference to 21 bits, if we want lower number of bits */ + nbits -= empty_bits; /* THIS IS TO SIMULATE DIFFERENT NUMBER OF input BITS - should be removed */ + + c2 = NUM_BITS_SHB_MSLVQ - nbits; + + numbits_VQ = config_LSF_BWE[c2 * 3]; + levels[0] = config_LSF_BWE[c2 * 3 + 1]; + predictor_bits = config_LSF_BWE[c2 * 3 + 2]; + + if ( nbits < 19 ) + { + cb_stage = cb_LSF_BWE[1]; + } + else + { + cb_stage = cb_LSF_BWE[0]; + } + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + lsf[i] = 0.5f - lsf_shb[LPC_SHB_ORDER - 1 - i]; + } + + /* remove mean */ + v_sub( lsf, SHB_LSF_mean, Q_lsfs, LPC_SHB_ORDER ); + + /* 6D multi-stage 6bit coding */ + first_VQstages( &cb_stage, Q_lsfs, levels, 1, w, dim1, 3000, indices_firstVQ ); + + + /* 8D MSLVQ coding */ + bits_lvq = nbits - numbits_VQ - predictor_bits; + mvr2r( SHB_LSF_mean, cand, LPC_SHB_ORDER ); + Idx = indices_firstVQ[0]; + v_add( cand, cb_stage + Idx * dim1, cand, dim1 ); + + /* LVQ quantization */ + mvr2r( cand, quant, LPC_SHB_ORDER ); + v_sub( lsf, cand, dd, LATTICE_DIM ); + mslvq( dd, quant, cv_out, &idx_lead, &idx_scale, w, 0, ( nbits < 19 ), bits_lvq ); + + if ( idx_scale == -1 ) + { + set_zero( cv_out, LATTICE_DIM ); + } + v_add( cand, quant, cand, LATTICE_DIM ); + + /* arrange the LSF candidate vector prior to selection to an ascending order*/ + v_sort( cand, 0, LPC_SHB_ORDER - 1 ); + + set_zero( Q_lsfs, LPC_SHB_ORDER ); + /* mvr2r( mean_lsf, Q_lsfs, LPC_SHB_ORDER ); */ + + v_add( Q_lsfs, cb_stage + Idx * dim1, Q_lsfs, dim1 ); + + /* write VQ indexes */ + push_indice( hBstr, IND_SHB_LSF, Idx, numbits_VQ ); + + /* write MSLVQ index */ + LVQ_index = index_lvq_SHB( idx_lead, idx_scale, bits_lvq, cv_out, ( nbits < 19 ) ); + + if ( bits_lvq > 15 ) + { + push_indice( hBstr, IND_SHB_LSF, (int16_t) ( ( LVQ_index ) & ( 0xffff >> 1 ) ), 15 ); + push_indice( hBstr, IND_SHB_LSF, (int16_t) ( ( LVQ_index ) >> 15 ) & ( 0xffff >> 1 ), bits_lvq - 15 ); + } + else + { + push_indice( hBstr, IND_SHB_LSF, (int16_t) LVQ_index, bits_lvq ); + } + + v_add( Q_lsfs, quant, lsf_q, LATTICE_DIM ); /* quantized mean removed data for first 8 dim*/ + + /* predict last 2 components */ + if ( predictor_bits == 0 ) + { + lsf_q[LATTICE_DIM] = dotp( lsf_q, LastCoefPred_0bit, LATTICE_DIM ); + lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_0bit[LATTICE_DIM + 1], LATTICE_DIM ); + } + else + { + v_sub( &lsf[LATTICE_DIM], &SHB_LSF_mean[LATTICE_DIM], &lsf_q[LATTICE_DIM], 2 ); + + for ( i = 0; i < 2; i++ ) + { + ftmp = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * i], LATTICE_DIM ) - lsf_q[LATTICE_DIM]; + e[i] = ( ftmp * ftmp ); + ftmp = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * i + LATTICE_DIM + 1], LATTICE_DIM ) - lsf_q[LATTICE_DIM + 1]; + e[i] += ( ftmp * ftmp ); + } + + c2 = minimum( e, 2, &ftmp ); + + lsf_q[LATTICE_DIM] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * c2], LATTICE_DIM ); + lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * c2 + LATTICE_DIM + 1], LATTICE_DIM ); + + push_indice( hBstr, IND_SHB_LSF, c2, 1 ); + } + + if ( empty_bits > 0 ) + { + push_indice( hBstr, IND_SHB_LSF, 0, empty_bits ); + } + + v_add( SHB_LSF_mean, lsf_q, lsf_q, LPC_SHB_ORDER ); + v_sort( lsf_q, 0, LPC_SHB_ORDER - 1 ); + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + Q_lsfs[i] = 0.5f - lsf_q[LPC_SHB_ORDER - 1 - i]; + } + + return; +} + +/*-------------------------------------------------------------------* + * Quant_BWE_LSF() + * + * Quantize super highband spectral envolope + *-------------------------------------------------------------------*/ + +static void Quant_BWE_LSF( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + TD_BWE_ENC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + const int16_t codec_mode, /* i : codec mode */ + const float lsf_shb[], /* i : unquanitzed LSFs */ + float Q_lsfs[], /* o : quanitzed LSFs */ + const int32_t extl_brate /* i : extension layer bit rate */ +) +{ + float lsf[LPC_SHB_ORDER]; + float lsf_q[LPC_SHB_ORDER]; + int16_t lsf_idx[NUM_Q_LSF]; + int16_t i; + int16_t m_idx; + float m; + int16_t grid_idx; + + if ( extl_brate == SWB_TBE_1k75 ) + { + /* Todo: input properly the number of bits */ + LVQQuant_BWE_LSF( hBstr, lsf_shb, Q_lsfs, NUM_BITS_SHB_MSLVQ ); + } + else + { + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + lsf[i] = 0.5f - lsf_shb[LPC_SHB_ORDER - 1 - i]; + } + + Quant_lower_LSF( lsf, lsf_q, lsf_idx ); + + for ( i = 0; i < NUM_Q_LSF; i++ ) + { + if ( codec_mode == MODE2 ) + { + hBWE_TD->lsf_idx[i] = lsf_idx[i]; + } + else + { + push_indice( hBstr, IND_SHB_LSF, lsf_idx[i], lsf_q_num_bits[i] ); + } + } + + m_idx = Quant_mirror_point( lsf, lsf_q, &m ); + + if ( codec_mode == MODE2 ) + { + hBWE_TD->m_idx = m_idx; + } + else + { + push_indice( hBstr, IND_SHB_MIRROR, m_idx, MIRROR_POINT_BITS ); + } + + grid_idx = Find_LSF_grid( lsf, lsf_q, m ); + + if ( codec_mode == MODE2 ) + { + hBWE_TD->grid_idx = grid_idx; + } + else + { + push_indice( hBstr, IND_SHB_GRID, grid_idx, NUM_LSF_GRID_BITS ); + } + + for ( i = 0; i < LPC_SHB_ORDER; i++ ) + { + Q_lsfs[i] = 0.5f - lsf_q[LPC_SHB_ORDER - 1 - i]; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * closest_centroid() + * + * Determine a set of closest VQ centroids for a given input + *-------------------------------------------------------------------*/ + +static int16_t closest_centroid( + const float *data, /* i : input data */ + const float *weights, /* i : weights */ + const float *quantizer, /* i : quantizer table */ + const int16_t centroids, /* i : number of centroids */ + const int16_t length ) /* i : dimension of quantiser */ +{ + int16_t i, j, index; + float tmp, werr, best_werr; + + index = 0; + best_werr = 1.0E20f; + + for ( i = 0; i < centroids; i++ ) + { + werr = 0.0f; + for ( j = 0; j < length; j++ ) + { + tmp = (float) *( data + j ) - quantizer[i * length + j]; + werr += (float) ( *( weights + j ) * tmp * tmp ); + if ( werr > best_werr ) + { + break; + } + } + + if ( werr < best_werr ) + { + best_werr = werr; + index = i; + } + } + + return index; +} + +/*-------------------------------------------------------------------* + * QuantizeSHBsubgains() + * + * Quantize super highband temporal gains + *-------------------------------------------------------------------*/ + +static void QuantizeSHBsubgains( + Encoder_State *st, /* i/o: encoder state structure */ + float subgains[], /* i/o: super highband temporal gains */ + const int16_t extl /* i : extension layer */ +) +{ + int16_t i, idxSubGain; + float Unit_weights10[NUM_SHB_SUBFR]; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( extl == WB_TBE ) + { + set_f( Unit_weights10, 1.0f, (int16_t) NUM_SHB_SUBFR / 4 ); + + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + subgains[i + NUM_SHB_SUBFR / 4] = 20.0f * (float) log10( subgains[i] ); + } + + idxSubGain = closest_centroid( subgains + NUM_SHB_SUBFR / 4, Unit_weights10, HBCB_SubGain5bit, 1 << NUM_BITS_SHB_SUBGAINS, NUM_SHB_SUBFR / 4 ); + + mvr2r( HBCB_SubGain5bit + idxSubGain * NUM_SHB_SUBFR / 4, subgains, NUM_SHB_SUBFR / 4 ); + + push_indice( hBstr, IND_SHB_SUBGAIN, idxSubGain, NUM_BITS_SHB_SUBGAINS ); + for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) + { + subgains[i] = (float) pow( 10.0f, subgains[i] / 20.0f ); + } + + for ( i = NUM_SHB_SUBFR / 2 - 1; i >= 0; i-- ) + { + subgains[i] = subgains[i / 2]; + } + } + else + { + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + subgains[i] = (float) log10( subgains[i] + 0.001f ); + } + + idxSubGain = (int16_t) vquant( subgains, 0, subgains, SHBCB_SubGain5bit, NUM_SHB_SUBGAINS, 1 << NUM_BITS_SHB_SUBGAINS ); + + for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) + { + subgains[i] = (float) pow( 10.0, subgains[i] ); + } + + for ( i = NUM_SHB_SUBFR - 1; i >= 0; i-- ) + { + subgains[i] = subgains[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; + } + + if ( st->codec_mode == MODE2 ) + { + st->hBWE_TD->idxSubGains = idxSubGain; + } + else + { + push_indice( hBstr, IND_SHB_SUBGAIN, idxSubGain, NUM_BITS_SHB_SUBGAINS ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * Quant_shb_ener_sf() + * + * Quantize SHB subframe energies + *-------------------------------------------------------------------*/ + +static void Quant_shb_ener_sf( + Encoder_State *st, /* i/o: encoder state structure */ + float *shb_ener_sf /* i/o: super highband subframe energies */ +) +{ + int16_t idxSubEner; + + float temp_shb_ener_sf, sum; + + sum = *shb_ener_sf; + *shb_ener_sf = (float) log10( sum ); + + temp_shb_ener_sf = 0; + idxSubEner = usquant( *shb_ener_sf, &temp_shb_ener_sf, 0, 0.042f, 1 << NUM_BITS_SHB_ENER_SF ); + *shb_ener_sf = (float) pow( 10.0, temp_shb_ener_sf ); + + if ( st->codec_mode == MODE2 ) + { + st->hBWE_TD->idx_shb_fr_gain = idxSubEner; + } + else + { + push_indice( st->hBstr, IND_SHB_ENER_SF, idxSubEner, NUM_BITS_SHB_ENER_SF ); + } + + return; +} + +/*-------------------------------------------------------------------* + * Quant_shb_res_gshape() + * + * Quantize SHB gain shapes in residual domain + *-------------------------------------------------------------------*/ + +static void Quant_shb_res_gshape( + Encoder_State *st, /* i/o: encoder state structure */ + float shb_res_gshape[] /* i/o: super highband gain shapes */ +) +{ + int16_t i, idxSubGain[NB_SUBFR16k]; + + for ( i = 0; i < NB_SUBFR16k; i++ ) + { + idxSubGain[i] = usquant( shb_res_gshape[i], &shb_res_gshape[i], 0.125, 0.125f, 1 << NUM_BITS_SHB_RES_GS ); + if ( st->codec_mode == MODE2 ) + { + st->hBWE_TD->idx_res_gs[i] = idxSubGain[i]; + } + else + { + push_indice( st->hBstr, IND_SHB_RES_GS + i, idxSubGain[i], NUM_BITS_SHB_RES_GS ); + } + } + + return; +} + +/*-------------------------------------------------------------------* + * QuantizeSHBframegains() + * + * Quantize super highband frame gain + *-------------------------------------------------------------------*/ + +static void QuantizeSHBframegain( + Encoder_State *st, /* i/o: encoder state structure */ + float *GainFrame, /* i/o: Gain */ + const int16_t extl, /* i : extension layer */ + const int32_t extl_brate, /* i : extension layer bitrate */ + int16_t *rf_gainFrame_ind, + int16_t flag_conservative /* i : flag to indicate more conservative gain quantization */ +) +{ + int16_t idxFrameGain; + float Q_GainFrame; + float Unit_weights1 = 1.0f; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + float GainFrameLog; + + if ( extl == WB_TBE ) + { + determine_gain_weights( GainFrame, &( Unit_weights1 ), 1 ); + + if ( extl_brate == WB_TBE_0k35 ) + { + singlevectortest_gain( GainFrame, 1, 1 << NUM_BITS_SHB_FrameGain_LBR_WB, &idxFrameGain, &( Unit_weights1 ), &Q_GainFrame, SHBCB_FrameGain16 ); + + if ( Q_GainFrame > *GainFrame * 1.06f && idxFrameGain > 0 ) /* 1.06 = +0.5 dB */ + { + idxFrameGain--; + Q_GainFrame = SHBCB_FrameGain16[idxFrameGain]; + } + + if ( st->codec_mode == MODE2 ) + { + st->hBWE_TD->gFrame_WB = idxFrameGain; + } + else + { + push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FrameGain_LBR_WB ); + } + + if ( st->rf_mode ) + { + *rf_gainFrame_ind = idxFrameGain; + } + } + else + { + singlevectortest_gain( GainFrame, 1, 1 << NUM_BITS_SHB_FrameGain, &idxFrameGain, &( Unit_weights1 ), &Q_GainFrame, SHBCB_FrameGain64 ); + + push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FrameGain ); + + if ( st->rf_mode ) + { + *rf_gainFrame_ind = idxFrameGain; + } + } + } + else + { + GainFrameLog = (float) log10( *GainFrame + 0.001f ); + + if ( st->extl_brate == SWB_TBE_1k75 ) + { + idxFrameGain = (int16_t) usquant( GainFrameLog, &Q_GainFrame, SHB_GAIN_QLOW_1k75, SHB_GAIN_QDELTA_1k75, 1 << NUM_BITS_SHB_FRAMEGAIN_1k75 ); + } + else + { + idxFrameGain = (int16_t) usquant( GainFrameLog, &Q_GainFrame, SHB_GAIN_QLOW, SHB_GAIN_QDELTA, 1 << NUM_BITS_SHB_FRAMEGAIN ); + } + + while ( Q_GainFrame > GainFrameLog + 0.495 * SHB_GAIN_QDELTA && idxFrameGain != 0 ) + { + idxFrameGain = idxFrameGain - 1; + Q_GainFrame = idxFrameGain * SHB_GAIN_QDELTA + SHB_GAIN_QLOW; + } + + if ( flag_conservative && ( Q_GainFrame > GainFrameLog + 0.41 * SHB_GAIN_QDELTA ) && idxFrameGain != 0 ) + { + /* be more conservative in the quantization process -> prevent energy overshoot */ + idxFrameGain = idxFrameGain - 1; + Q_GainFrame = idxFrameGain * SHB_GAIN_QDELTA + SHB_GAIN_QLOW; + } + + Q_GainFrame = (float) pow( 10.0, Q_GainFrame ); + if ( st->codec_mode == MODE2 ) + { + st->hBWE_TD->idxFrameGain = idxFrameGain; + } + else + { + if ( st->extl_brate == SWB_TBE_1k75 ) + { + push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FRAMEGAIN_1k75 ); + } + else + { + push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FRAMEGAIN ); + } + } + + if ( st->rf_mode ) + { + *rf_gainFrame_ind = idxFrameGain; + } + } + + if ( st->rf_mode ) + { + /*Currently intended for SWB only. Modify for WB is needed later!*/ + if ( st->hRF->rf_frame_type == RF_NELP ) + { + *rf_gainFrame_ind = idxFrameGain; /* NELP Frame uses full 5 bits */ + } + else /*RF_ALLPRED, RF_GENPRED, RF_NOPRED modes*/ + { + if ( *GainFrame <= 1.25 ) /* [0 to 1.25] range --> 0.5*/ + { + *rf_gainFrame_ind = 0; + } + else if ( *GainFrame <= 3 ) /* (1.25 to 3] --> 2 */ + { + *rf_gainFrame_ind = 1; + } + else if ( *GainFrame <= 6 ) /* (3 to 6] --> 4 */ + { + *rf_gainFrame_ind = 2; + } + else /* (6 to Inf) --> 8 */ + { + *rf_gainFrame_ind = 3; + } + } + } + + *GainFrame = Q_GainFrame; + + return; +} + + +/*-------------------------------------------------------------------* + * determine_gain_weights() + * + * Determine weights for gain quantization + *-------------------------------------------------------------------*/ + +static void determine_gain_weights( + const float *gain, /* i : Gain parameter */ + float *weights, /* o : gain weights */ + const int16_t dims /* i : number of gains */ +) +{ + int16_t j; + + for ( j = 0; j < dims; j++ ) + { + if ( gain[j] > 1e-6 ) + { + weights[j] = (float) ( pow( fabs( gain[j] ), -0.9f ) ); + } + else + { + weights[j] = 501.187233628f; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * singlevectortest_gain() + * + * VQ for coding superhigh band gain + *-------------------------------------------------------------------*/ + +static void singlevectortest_gain( + const float *inp, /* i : input gain vector */ + const int16_t dimen, /* i : dimension of the input vector */ + const int16_t cb_size, /* i : codebook size */ + int16_t *index, /* o : quanitzation index */ + const float *weight, /* i : Weights for the quanitzation */ + float *recon, /* o : Reconstruction */ + const float *codebook /* i : Codebook */ +) +{ + int16_t k, interNum, flag; + float meanU, meanQ; + int16_t least[4]; + + interNum = 4; + + return_M_Least( inp, dimen, codebook, cb_size, weight, interNum, least ); + + meanU = sum_f( inp, dimen ); + mvr2r( codebook + dimen * least[0], recon, dimen ); + + index[0] = least[0]; + flag = 0; + for ( k = 0; k < interNum; k++ ) + { + if ( flag == 0 ) + { + meanQ = sum_f( codebook + dimen * least[k], dimen ); + + if ( meanQ <= 1.1 * meanU ) + { + flag = 1; + mvr2r( codebook + dimen * least[k], recon, dimen ); + index[0] = least[k]; + } + } + } + + return; +} + +/*-------------------------------------------------------------------* + * return_M_Least() + * + * + *-------------------------------------------------------------------*/ + +static void return_M_Least( + const float *inp, /* i : input */ + const int16_t n_cols, /* i : vector size */ + const float *codebook, /* i : codebook */ + const int16_t num_grp, /* i : number of centroids */ + const float *weight, /* i : gain weights */ + const int16_t interNum, /* i : number on short list prior to 2nd stage search*/ + int16_t *least /* o : return value */ +) +{ + int16_t i, k; + float distance[1024], mindist, tmp; + + mindist = QUANT_DIST_INIT; + for ( i = 0; i < num_grp; i++ ) + { + distance[i] = 0; + for ( k = 0; k < n_cols; k++ ) + { + tmp = inp[k] - codebook[n_cols * i + k]; + distance[i] += weight[k] * tmp * tmp; + } + + if ( distance[i] < mindist ) + { + mindist = distance[i]; + least[0] = i; + } + } + + distance[least[0]] = QUANT_DIST_INIT; + + for ( k = 1; k < interNum; k++ ) + { + mindist = QUANT_DIST_INIT; + for ( i = 0; i < num_grp; i++ ) + { + if ( distance[i] < mindist ) + { + mindist = distance[i]; + least[k] = i; + } + } + + distance[least[k]] = QUANT_DIST_INIT; + } + + return; +} + + +/*-------------------------------------------------------------------* + * fb_tbe_reset_enc() + * + * Reset the extra parameters needed for FB TBE encoding + *-------------------------------------------------------------------*/ + +void fb_tbe_reset_enc( + float elliptic_bpf_2_48k_mem[][4], + float *prev_fb_energy ) +{ + set_f( elliptic_bpf_2_48k_mem[0], 0.0f, 4 ); + set_f( elliptic_bpf_2_48k_mem[1], 0.0f, 4 ); + set_f( elliptic_bpf_2_48k_mem[2], 0.0f, 4 ); + set_f( elliptic_bpf_2_48k_mem[3], 0.0f, 4 ); + *prev_fb_energy = 0.0f; + + return; +} + +/*-------------------------------------------------------------------* + * fb_tbe_enc() + * + * FB TBE encoder, 14(resp. 15.5) - 20 kHz band encoding module + *-------------------------------------------------------------------*/ + +void fb_tbe_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const float new_input[], /* i : input speech at 48 kHz sample rate */ + const float fb_exc[] /* i : FB excitation from the SWB part */ +) +{ + float fb_exc_energy, ratio, temp2; + float tmp_vec[L_FRAME48k]; + int16_t idxGain; + float input_fhb[L_FRAME48k]; + int16_t Sample_Delay_HP; + + TD_BWE_ENC_HANDLE hBWE_TD = st->hBWE_TD; + + if ( st->element_mode == IVAS_CPE_DFT ) + { + /*don't process first samples of redressed lookahead (energy is not relevant for these samples)*/ + elliptic_bpf_48k_generic( new_input - NS2SA( 48000, DELAY_FIR_RESAMPL_NS ), tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem, full_band_bpf_2 ); + } + else + { + elliptic_bpf_48k_generic( new_input, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem, full_band_bpf_2 ); + } + + if ( st->element_mode > IVAS_CPE_DFT || st->element_mode == IVAS_SCE ) + { + if ( st->L_frame == L_FRAME ) + { + Sample_Delay_HP = NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS ) - L_FRAME48k / 2; + } + else + { + Sample_Delay_HP = NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ) - L_FRAME48k / 2; + } + } + else + { + Sample_Delay_HP = NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2; + } + + if ( st->last_extl != FB_TBE ) + { + set_f( hBWE_TD->old_input_fhb, 0.0f, Sample_Delay_HP ); + set_f( tmp_vec, 0.0f, 320 ); + } + + mvr2r( hBWE_TD->old_input_fhb, input_fhb, Sample_Delay_HP ); + mvr2r( tmp_vec, input_fhb + Sample_Delay_HP, L_FRAME48k - Sample_Delay_HP ); + mvr2r( tmp_vec + L_FRAME48k - Sample_Delay_HP, hBWE_TD->old_input_fhb, Sample_Delay_HP ); + + /* Compute the energy of the Fullband component over 4kHz (16kHz to 20kHz) */ + temp2 = sum2_f( input_fhb, L_FRAME48k / 2 ) + hBWE_TD->prev_fb_energy; + hBWE_TD->prev_fb_energy = sum2_f( input_fhb + L_FRAME48k / 2, L_FRAME48k / 2 ); + fb_exc_energy = sum2_f( fb_exc, L_FRAME16k ) + EPSILON; + ratio = (float) sqrt( temp2 / fb_exc_energy ); + idxGain = (int16_t) ( log2_f( (float) ratio ) + 0.5f ); + idxGain = max( 0, min( 15, idxGain ) ); + ratio = (float) ( 1 << idxGain ); + + if ( st->codec_mode == MODE2 ) + { + hBWE_TD->idxGain = idxGain; + } + else + { + push_indice( st->hBstr, IND_FB_SLOPE, idxGain, 4 ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * tbe_write_bitstream() + * + * Write TBE bitstream. + *---------------------------------------------------------------------*/ + +void tbe_write_bitstream( + Encoder_State *st ) +{ + int16_t i; + TD_BWE_ENC_HANDLE hBWE_TD = st->hBWE_TD; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + if ( ( st->rf_mode || st->total_brate == ACELP_9k60 ) && st->bwidth == WB ) + { + /* WB LSF */ + push_next_indice( hBstr, hBWE_TD->lsf_WB, NUM_BITS_LBR_WB_LSF ); + + /* WB frame */ + push_next_indice( hBstr, hBWE_TD->gFrame_WB, NUM_BITS_SHB_FrameGain_LBR_WB ); + } + else if ( st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_32k && ( st->bwidth == SWB || st->bwidth == FB ) ) + { + /* LSF coefficients */ + + if ( st->rf_mode || st->total_brate == ACELP_9k60 ) + { + push_next_indice( hBstr, hBWE_TD->lsf_idx[0], 8 ); + } + else + { + for ( i = 0; i < NUM_Q_LSF; i++ ) + { + push_next_indice( hBstr, hBWE_TD->lsf_idx[i], lsf_q_num_bits[i] ); + } + + /* LSF mirror points */ + push_next_indice( hBstr, hBWE_TD->m_idx, MIRROR_POINT_BITS ); + + /* LSF grid points */ + push_next_indice( hBstr, hBWE_TD->grid_idx, NUM_LSF_GRID_BITS ); + } + + /* Gain shape */ + push_next_indice( hBstr, hBWE_TD->idxSubGains, NUM_BITS_SHB_SUBGAINS ); + + /* frame gain */ + push_next_indice( hBstr, hBWE_TD->idxFrameGain, NUM_BITS_SHB_FRAMEGAIN ); + + if ( st->total_brate >= ACELP_24k40 ) + { + /* sub frame energy*/ + push_next_indice( hBstr, hBWE_TD->idx_shb_fr_gain, NUM_BITS_SHB_ENER_SF ); + + /* gain shapes residual */ + for ( i = 0; i < NB_SUBFR16k; i++ ) + { + push_next_indice( hBstr, hBWE_TD->idx_res_gs[i], NUM_BITS_SHB_RES_GS ); + } + + /* voicing factor */ + push_next_indice( hBstr, hBWE_TD->idx_mixFac, NUM_BITS_SHB_VF ); + } + + if ( st->tec_tfa == 1 ) + { + push_next_indice( hBstr, st->tec_flag, BITS_TEC ); + push_next_indice( hBstr, st->tfa_flag, BITS_TFA ); + } + } + + if ( st->bwidth == FB ) + { + push_next_indice( hBstr, hBWE_TD->idxGain, 4 ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * TBEreset_enc() + * + * + *---------------------------------------------------------------------*/ + +void TBEreset_enc( + TD_BWE_ENC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + const int16_t last_core, /* i : last core */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + if ( last_core != ACELP_CORE ) + { + set_f( hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); + hBWE_TD->bwe_non_lin_prev_scale = 0.f; + } + + if ( bwidth == WB ) + { + wb_tbe_extras_reset( hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3 ); + + set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0, 7 ); + set_f( hBWE_TD->state_lpc_syn, 0, 10 ); + set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); + set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); + set_f( hBWE_TD->mem_csfilt, 0, 2 ); + } + else if ( bwidth == SWB || bwidth == FB ) + { + set_f( hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + + swb_tbe_reset( hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, hBWE_TD->syn_overlap, hBWE_TD->state_syn_shbexc, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), hBWE_TD->mem_stp_swb, &( hBWE_TD->gain_prec_swb ) ); + + if ( bwidth == FB ) + { + set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_enc( hBWE_TD->elliptic_bpf_2_48k_mem, &hBWE_TD->prev_fb_energy ); + } + } + + return; +} diff --git a/lib_enc/tcq_core_enc.c b/lib_enc/tcq_core_enc.c new file mode 100644 index 0000000000..11d96e2015 --- /dev/null +++ b/lib_enc/tcq_core_enc.c @@ -0,0 +1,505 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "rom_com.h" +#include "prot.h" +#include "cnst.h" +#include "basop_util.h" +#include "basop_proto_func.h" +#include "wmops.h" + +/*---------------------------------------------------------------------* + * tcq_core_LR_enc() + * + * Main Generic Audio Encoder Routine for LR-MDCT + *---------------------------------------------------------------------*/ + +ivas_error tcq_core_LR_enc( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ +#ifdef DEBUGGING + const int16_t idchan, +#endif + int32_t inp_vector[], + const float coefs_norm[], + float coefs_quant[], + const int16_t bit_budget, /* number of bits */ + const int16_t BANDS, + const int16_t *sfm_start, + const int16_t *sfm_end, + const int16_t *sfmsize, + Word32 *Rk_fx, + int16_t *npulses, + int16_t *k_sort, + const int16_t *p2a_flags, + const int16_t p2a_bands, + const int16_t *last_bitalloc, + const int16_t input_frame, + const int16_t adjustFlag, + const int16_t is_transient ) +{ + int16_t i, j, k, size, nb_bytes; + int32_t nzp; + + float gain; + float step_scale[NB_SFM]; + + int16_t pos_index[NB_SFM]; + float Rk_sort[NB_SFM]; + int16_t USQ_TCQ[NB_SFM]; /* TCQ is selected by default*/ + float coefs_norm_dec[L_FRAME32k]; /* New output buffer (TCQ+USQ)*/ + + float pulses, crosscorr, selfcorr; + int32_t savedstates[TCQ_MAX_BAND_SIZE]; + ARCODEC arenc, *parenc; + TCQ_BITSTREAM bs, *pbs; + int16_t k_num[2]; + + int8_t flag_wbnb = 0; + int16_t lsbtcq_bits = TCQ_AMP; + int16_t tcq_arbits = 2; + int16_t nzbands = 0; + int16_t bcount = 0; + float abuffer[560]; + float mbuffer[560]; + float sbuffer[560]; + int16_t dpath[280]; + /*Word32 Rk_fx[NB_SFM];*/ /* Q16 */ + Word32 Rk_sort_fx[NB_SFM]; /* Q16 */ + Word32 bsub_fx = 0; + Word32 est_frame_bits_fx; + + Word16 nzb = 0; + Word32 delta_fx; + Word32 surplus_fx; + Word32 bit_surplus_fx[2]; + + Word32 leftbits = 0; + Word32 sepbits = 0; + Word32 divider = 0; + + ivas_error error; + + error = IVAS_ERR_OK; + + set_s( dpath, 0, 280 ); + set_f( abuffer, 0.f, 560 ); + set_f( mbuffer, 0.f, 560 ); + + set_f( sbuffer, FLT_MAX, 560 ); + + /* initialization */ + set_f( Rk_sort, 0.f, NB_SFM ); + set_s( USQ_TCQ, 0, NB_SFM ); + set_f( coefs_norm_dec, 0.f, L_FRAME32k ); + InitLSBTCQ( &bcount ); + + if ( input_frame <= L_FRAME16k && adjustFlag == 0 && is_transient == 0 ) + { + flag_wbnb = 1; + lsbtcq_bits = 0; + tcq_arbits = 0; + } + + parenc = &arenc; + pbs = &bs; + + pbs->curPos = 7; + pbs->numbits = 0; + pbs->numByte = 0; + for ( i = 0; i < MAX_SIZEBUF_PBITSTREAM; i++ ) + { + pbs->buf[i] = 0; + } + + ar_encoder_start( parenc, pbs, bit_budget ); + + /* TCQ Index initialize */ + set_s( pos_index, 0, NB_SFM ); + + /* Bits distribution analysis */ + for ( i = 0; i < BANDS; i++ ) + { + if ( L_sub( ar_div( Rk_fx[i], sfmsize[i] ), 49152 ) >= 0 ) + { + /* USQ used for high importance bands*/ + USQ_TCQ[i] = 1; + } + else + { + /* TCQ used for usual bands */ + USQ_TCQ[i] = 0; + } + if ( Rk_fx[i] > 0 ) + { + nzbands++; + } + } + + for ( j = 0; j < BANDS; j++ ) + { + if ( Rk_fx[j] > 0 ) + { + nzb++; + } + } + +#define WMC_TOOL_MAN + bsub_fx = L_shl( L_add( tcq_arbits, lsbtcq_bits ), 16 ); + IF( bsub_fx > 0 ) + { + bsub_fx = L_add( bsub_fx, 2048 ); + } + for ( j = BANDS - 1; j >= 0; j-- ) + { + if ( Rk_fx[j] > 0 ) + { + Rk_fx[j] = L_sub( Rk_fx[j], ar_div( bsub_fx, nzb ) ); + if ( Rk_fx[j] < 0 ) + { + bsub_fx = L_sub( bsub_fx, L_add( ar_div( bsub_fx, nzb ), Rk_fx[j] ) ); + Rk_fx[j] = 0; + } + else + { + bsub_fx = L_sub( bsub_fx, ar_div( bsub_fx, nzb ) ); + } + nzb = sub( nzb, 1 ); + } + } + + srt_vec_ind_fx( Rk_fx, Rk_sort_fx, k_sort, BANDS ); +#undef WMC_TOOL_MAN + + /* Quantize spectral band shapes using TCQ */ + /* Select ISC */ + set_f( coefs_quant, 0.0, sfm_end[BANDS - 1] + 1 ); + + mvr2r( coefs_norm, coefs_quant, sfm_end[BANDS - 1] + 1 ); + + delta_fx = 0; + est_frame_bits_fx = 0; + if ( input_frame <= L_FRAME16k && adjustFlag == 0 && is_transient == 0 ) + { + surplus_fx = -131072; + bit_allocation_second_fx( Rk_fx, Rk_sort_fx, BANDS, sfmsize, k_sort, k_num, p2a_flags, p2a_bands, last_bitalloc, input_frame ); + + nzbands = 0; + for ( j = 0; j < BANDS; j++ ) + { + if ( sub( j, k_num[0] ) != 0 && sub( j, k_num[1] ) != 0 ) + { + leftbits = L_add( leftbits, Rk_fx[k_sort[j]] ); + if ( Rk_fx[k_sort[j]] > 0 ) + { + nzbands = add( (int16_t) nzbands, 1 ); + } + } + else + { + sepbits = L_add( sepbits, Rk_fx[k_sort[j]] ); + } + } + + /* Separate the position information from the input signal(coefs_norm) */ + /* Gather the NZ coefficients*/ + for ( k = 0; k < BANDS; k++ ) /* Loop through non-zero blocks */ + { + if ( k != k_num[0] && k != k_num[1] ) + { + if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) /* Then have non-zero block AND WILL BE ENCODED BY TCQ */ + { + /* Encode Position Info, NZ Info, Signs */ + size = sfmsize[k_sort[k]]; + /* Determine scale step, ISC and TCQ quantizer */ + GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, L_add( Rk_fx[k_sort[k]], delta_fx ), &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 0, &nzp, 0, 0, 0, 0 ); + leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); + + npulses[k_sort[k]] = (int16_t) pulses; + + encode_position_ari_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); + encode_magnitude_tcq_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, savedstates, &est_frame_bits_fx ); + encode_signs_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); + nzbands--; + } + /* Have USQ coded band */ + else if ( Rk_fx[k_sort[k]] > 0 && sub( USQ_TCQ[k_sort[k]], 1 ) == 0 ) + { + size = sfmsize[k_sort[k]]; + GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, L_add( Rk_fx[k_sort[k]], delta_fx ), &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 1, &nzp, 0, 0, 0, 0 ); + leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); + + npulses[k_sort[k]] = (int16_t) pulses; + + encode_position_ari_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); + encode_magnitude_usq_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, &est_frame_bits_fx ); + encode_signs_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); + + nzbands--; + } + else /* Then have zero block */ + { + npulses[k_sort[k]] = 0; + size = sfmsize[k_sort[k]]; + } + + if ( Rk_fx[k_sort[k]] > 0 && surplus_fx < 0 ) + { +#define WMC_TOOL_MAN + IF( nzbands <= 1 ) + { + divider = 0; + } + ELSE + { + divider = 2; + } + + IF( L_add( L_add( surplus_fx, sepbits ), ar_div( leftbits, divider ) ) < 0 ) + { + /* Overflow possible => start to distribute negative surplus */ + delta_fx = ar_div( surplus_fx + sepbits, nzbands ); + } + else + { + delta_fx = 0; + } + surplus_fx = L_sub( surplus_fx, delta_fx ); +#undef WMC_TOOL_MAN + } + else + { + delta_fx = 0; + } + } + } + +#define WMC_TOOL_MAN + if ( ( L_sub( surplus_fx, 524288 ) > 0 && sub( input_frame, L_FRAME8k ) == 0 ) || ( L_sub( surplus_fx, 786432 ) > 0 && sub( input_frame, L_FRAME16k ) == 0 ) ) + { + bit_surplus_fx[0] = Mult_32_16( surplus_fx, 24576 ); /* Q16 */ + bit_surplus_fx[1] = Mult_32_16( surplus_fx, 8192 ); /* Q16 */ + } +#undef WMC_TOOL_MAN + else + { + bit_surplus_fx[0] = surplus_fx; + bit_surplus_fx[1] = 0; + } + for ( k = 0; k < BANDS; k++ ) + { + for ( j = 0; j < 2; j++ ) + { + if ( k == k_num[j] ) + { +#define WMC_TOOL_MAN + Rk_fx[k_sort[k]] = L_add( Rk_fx[k_sort[k]], bit_surplus_fx[j] ); +#undef WMC_TOOL_MAN + + if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) /* Then have non-zero block AND WILL BE ENCODED BY TCQ */ + { + /* Encode Position Info, NZ Info, Signs */ + size = sfmsize[k_sort[k]]; + + /* Determine scale step, ISC and TCQ quantizer */ + GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, Rk_fx[k_sort[k]], &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 0, &nzp, 0, 0, 0, 0 ); + + npulses[k_sort[k]] = (int16_t) pulses; + + encode_position_ari_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); + encode_magnitude_tcq_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, savedstates, &est_frame_bits_fx ); + encode_signs_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); + } + /* Have USQ coded band */ + else if ( Rk_fx[k_sort[k]] > 0 && sub( USQ_TCQ[k_sort[k]], 1 ) == 0 ) + { + size = sfmsize[k_sort[k]]; + + GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, Rk_fx[k_sort[k]], &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 1, &nzp, 0, 0, 0, 0 ); + + npulses[k_sort[k]] = (int16_t) pulses; + + encode_position_ari_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); + encode_magnitude_usq_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, &est_frame_bits_fx ); + encode_signs_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); + } + else /* Then have zero block */ + { + npulses[k_sort[k]] = 0; + size = sfmsize[k_sort[k]]; + } + } + } + } + } + else + { + surplus_fx = 0; + + /* Separate the position information from the input signal(coefs_norm) */ + /* Gather the NZ coefficients*/ + for ( k = 0; k < BANDS; k++ ) /* Loop through non-zero blocks */ + { + if ( Rk_fx[k_sort[k]] > 0 ) + { + size = sfmsize[k_sort[k]]; + GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, L_add( Rk_fx[k_sort[k]], delta_fx ), &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 1, &nzp, &bcount, abuffer, mbuffer, sbuffer ); + + npulses[k_sort[k]] = (int16_t) pulses; + encode_position_ari_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); + encode_magnitude_usq_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, &est_frame_bits_fx ); + encode_signs_fx( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); + /* nzbands--; */ + nzbands = sub( (int16_t) nzbands, 1 ); + } + else /* Then have zero block */ + { + npulses[k_sort[k]] = 0; + size = sfmsize[k_sort[k]]; + } + + /* Surplus distribution */ + if ( surplus_fx > 0 && nzbands > 0 ) + { + delta_fx = ar_div( surplus_fx, nzbands ); + surplus_fx = L_sub( surplus_fx, delta_fx ); + } + } + } + + TCQLSB( bcount, abuffer, mbuffer, sbuffer, dpath ); + + /* Save TCQ path to bitstream */ + SaveTCQdata( parenc, dpath, (int16_t) lsbtcq_bits ); + + /* Add tcq sequence to decoding buffer */ + InitLSBTCQ( &bcount ); + + ar_encoder_done( parenc ); + + /* Loop through non-zero blocks */ + if ( !flag_wbnb ) + { + for ( k = 0; k < BANDS; k++ ) + { + if ( Rk_fx[k_sort[k]] > 0 ) + { + size = sfmsize[k_sort[k]]; + RestoreTCQ( &coefs_norm_dec[sfm_start[k_sort[k]]], size, &bcount, mbuffer ); + } + } + } + + nb_bytes = bit_budget >> 3; + j = bit_budget - ( nb_bytes << 3 ); + for ( i = 0; i < nb_bytes; i++ ) + { + push_indice( hBstr, IND_HQ2_SUBBAND_TCQ, pbs->buf[i], 8 ); + } + if ( j > 0 ) + { + push_indice( hBstr, IND_HQ2_SUBBAND_TCQ, ( pbs->buf[nb_bytes] >> ( 8 - j ) ), j ); + } + + /* Clear decoding buffer */ + set_f( coefs_quant, 0.0, sfm_end[BANDS - 1] + 1 ); + /* New analysis of decoded frame */ + for ( i = 0; i < BANDS; i++ ) + { + if ( Rk_fx[k_sort[i]] > 0 ) + { + gain = 0.0f; + + crosscorr = 0.0f; + selfcorr = EPSILON; + for ( j = 0; j < sfmsize[k_sort[i]]; j++ ) + { + crosscorr += ( coefs_norm[sfm_start[k_sort[i]] + j] * coefs_norm_dec[sfm_start[k_sort[i]] + j] ); + selfcorr += ( coefs_norm_dec[sfm_start[k_sort[i]] + j] * coefs_norm_dec[sfm_start[k_sort[i]] + j] ); + } + + gain = crosscorr / selfcorr; + + if ( gain == 0 ) + { + gain = 1e-10f; + } + + /* Use optimal gain */ + for ( j = 0; j < sfmsize[k_sort[i]]; j++ ) + { + inp_vector[sfm_start[k_sort[i]] + j] = round_f( ( ( 1.0f / QTCQ ) * coefs_norm_dec[sfm_start[k_sort[i]] + j] ) ); + coefs_quant[sfm_start[k_sort[i]] + j] = gain * coefs_norm_dec[sfm_start[k_sort[i]] + j]; + } + } + } + +#ifdef DEBUGGING + if ( parenc->num_bits > bit_budget + 1 ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "nTCQ too much bits used! \n" ); + } + + for ( i = 0; i < BANDS; i++ ) + { + float diff[TCQ_MAX_BAND_SIZE]; + + if ( npulses[i] > 0 ) + { + /* SNR measurement */ + for ( j = 0; j < sfmsize[i]; j++ ) + { + diff[j] = coefs_norm[sfm_start[i] + j] - coefs_quant[sfm_start[i] + j]; + } + + if ( idchan == 0 ) + { + snr( &coefs_norm[sfm_start[i]], diff, sfmsize[i], "TCQ_output" ); + } + else + { + snr( &coefs_norm[sfm_start[i]], diff, sfmsize[i], "TCQ_output_chan2" ); + } + } + } +#endif + + return error; +} diff --git a/lib_enc/tcx_ltp_enc.c b/lib_enc/tcx_ltp_enc.c new file mode 100644 index 0000000000..fbac9b1640 --- /dev/null +++ b/lib_enc/tcx_ltp_enc.c @@ -0,0 +1,596 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_enc.h" +#include "rom_com.h" +#include "wmops.h" +#ifdef DEBUG_PLOT +#include "deb_out.h" +#endif + + +/*---------------------------------------------------------------------* + * interpolate_corr() + * + * + *---------------------------------------------------------------------*/ + +/*! r: interpolated value */ +static float interpolate_corr( + const float *x, /* i : input vector */ + const int16_t frac, /* i : fraction of lag */ + const int16_t frac_max /* i : max fraction */ +) +{ + int16_t i; + float s; + const float *c1, *c2, *x1, *x2, *win; + + + if ( frac_max == 6 ) + { + win = E_ROM_inter6_1; + } + else + { + win = E_ROM_inter4_1; + } + + x1 = &x[0]; + x2 = &x[1]; + c1 = &win[frac]; + c2 = &win[frac_max - frac]; + s = 0.0f; + for ( i = 0; i < 4; i++, c1 += frac_max, c2 += frac_max ) + { + s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); + } + + return s; +} + + +/*---------------------------------------------------------------------* + * tcx_ltp_pitch_search() + * + * + *---------------------------------------------------------------------*/ + +static void tcx_ltp_pitch_search( + const int16_t pitch_ol, + int16_t *pitch_int, + int16_t *pitch_fr, + int16_t *index, + float *norm_corr, + const int16_t len, + const float *wsp, + const int16_t pitmin, + const int16_t pitfr1, + const int16_t pitfr2, + const int16_t pitmax, + const int16_t pitres, + const int16_t check_border_case, + int16_t *border_case ) +{ + int16_t i, t, t0, t1, step, fraction, t0_min, t0_max, t_min, t_max, delta; + float temp, cor_max, cor[256], *pt_cor; + + if ( pitres == 6 ) + { + delta = 8; + } + else + { + delta = 16; + } + + t0_min = (int16_t) pitch_ol - ( delta >> 1 ); + t0_max = (int16_t) pitch_ol + ( delta >> 1 ) - 1; + + if ( t0_min < pitmin ) + { + t0_min = pitmin; + t0_max = t0_min + delta - 1; + } + if ( t0_max > pitmax ) + { + t0_max = pitmax; + t0_min = t0_max - delta + 1; + } + + + t_min = t0_min - L_INTERPOL1; + t_max = t0_max + L_INTERPOL1; + + pt_cor = cor; + for ( t = t_min; t <= t_max; t++ ) + { + *pt_cor++ = dotp( wsp, wsp - t, len ); + } + + pt_cor = cor + L_INTERPOL1; + cor_max = *pt_cor++; + t1 = t0_min; + for ( t = t0_min + 1; t <= t0_max; t++ ) + { + if ( *pt_cor > cor_max ) + { + cor_max = *pt_cor; + t1 = t; + } + pt_cor++; + } + temp = dotp( wsp, wsp, len ) * dotp( wsp - t1, wsp - t1, len ); + *norm_corr = cor_max / (float) sqrt( temp + 0.1f ); + + /* check for border cases at the low lag border */ + /*pt_cor=cor;*/ + if ( check_border_case && t1 == t0_min ) + { + float tmpCor; + for ( t = t1 - L_INTERPOL1; t < t1; t++ ) + { + tmpCor = dotp( wsp, wsp - t, len ); + if ( tmpCor > cor_max ) + { + /* no real maximum but still on a rising slope */ + /* keep t1 but set norm_corr to zero to avoid activating the LTP here */ + *border_case = 1; + break; + } + } + } + + if ( t1 >= pitfr1 ) + { + *pitch_int = t1; + *pitch_fr = 0; + *index = t1 - pitfr1 + ( ( pitfr2 - pitmin ) * pitres ) + ( ( pitfr1 - pitfr2 ) * ( pitres >> 1 ) ); + return; + } + + /*------------------------------------------------------------------* + * Search fractional pitch with 1/4 subsample resolution. + * search the fractions around t0 and choose the one which maximizes + * the interpolated normalized correlation. + *-----------------------------------------------------------------*/ + + pt_cor = cor + L_INTERPOL1 - t0_min; + t0 = t1; + if ( t0 >= pitfr2 ) + { + step = 2; + fraction = 2; + } + else + { + step = 1; + fraction = 1; + } + + if ( t0 == t0_min ) /* Limit case */ + { + fraction = 0; + cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres ); + } + else /* Process negative fractions */ + { + t0--; + cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres ); + for ( i = ( fraction + step ); i <= pitres - 1; i = i + step ) + { + temp = interpolate_corr( &pt_cor[t0], i, pitres ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + } + } + } + + for ( i = 0; i <= pitres - 1; i = i + step ) /* Process positive fractions */ + { + temp = interpolate_corr( &pt_cor[t1], i, pitres ); + if ( temp > cor_max ) + { + cor_max = temp; + fraction = i; + t0 = t1; + } + } + *pitch_int = t0; + *pitch_fr = fraction; + if ( t0 >= pitfr2 ) + { + *index = t0 * ( pitres >> 1 ) + ( fraction >> 1 ) - ( pitfr2 * ( pitres >> 1 ) ) + ( ( pitfr2 - pitmin ) * pitres ); + } + else + { + *index = t0 * pitres + fraction - ( pitmin * pitres ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * tcx_ltp_find_gain() + * + * + *---------------------------------------------------------------------*/ + +static void tcx_ltp_find_gain( + const float *speech, + float *pred_speech, + const int16_t L_frame, + float *gain, + int16_t *gain_index ) +{ + int16_t gainbits = 2; + + /* Find gain */ + *gain = get_gain( speech, pred_speech, L_frame, NULL ); + + /* Quantize gain */ + if ( *gain >= 0.875f ) + { + *gain_index = 3; /* 1.00/2 */ + } + else if ( *gain >= 0.625f ) + { + *gain_index = 2; /* 0.75/2 */ + } + else if ( *gain >= 0.375f ) + { + *gain_index = 1; /* 0.50/2 */ + } + else if ( *gain >= 0.125f ) + { + *gain_index = 0; /* 0.25/2 */ + } + else + { + *gain_index = -1; /* escape */ + } + /* Dequantize gain */ + *gain = (float) ( *gain_index + 1 ) * 0.625f / (float) ( 1 << gainbits ); + + return; +} + +/*---------------------------------------------------------------------* + * tcx_ltp_encode() + * + * + *---------------------------------------------------------------------*/ + +void tcx_ltp_encode( + Encoder_State *st, + const int16_t tcxMode, + const int16_t L_frame, + const float *speech, + float *speech_ltp, + const float *wsp, + const int16_t Top[], + int16_t *ltp_param, + int16_t *ltp_bits, + float *A, + const int16_t disable_ltp, + const int16_t element_mode ) +{ + int16_t i, j, n; + int16_t ltp_on, tcxOnly, L_subfr, SideInfoOnly, delta; + float s; + float norm_corr; + float pred_speech[L_FRAME_PLUS]; + float tempFlatness; + float maxEnergyChange; + float buf_zir[M + L_FRAME_PLUS / 4], *zir; + float r[M + 1], Aest[M + 1]; + float alpha, step; + float si_gain; + int16_t border_case; + + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + tcxOnly = st->tcxonly; + L_subfr = L_SUBFR; + SideInfoOnly = st->sr_core > 25600; + + /* Reset memory if past frame is acelp */ + if ( st->last_core == ACELP_CORE ) + { + hTcxEnc->tcxltp_pitch_int_past = L_frame; + hTcxEnc->tcxltp_pitch_fr_past = 0; + hTcxEnc->tcxltp_gain_past = 0.f; + } + + /* By default, LTP is off */ + ltp_param[0] = 0; + norm_corr = 0.0f; + border_case = 0; + + if ( hTcxEnc->tcxltp || SideInfoOnly ) + { + /* Find pitch lag */ + if ( st->pit_res_max == 6 ) + { + delta = 8; + } + else + { + delta = 16; + } + + if ( st->element_mode == IVAS_CPE_MDCT ) + { + if ( abs( Top[0] - Top[1] ) < ( delta / 2 ) ) + { + /* estimates are close enough and stable, take the artihmetic mean as estimate */ + tcx_ltp_pitch_search( ( Top[0] + Top[1] ) / 2, &hTcxEnc->tcxltp_pitch_int, &hTcxEnc->tcxltp_pitch_fr, <p_param[1], &norm_corr, L_frame, wsp, st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max, 1, &border_case ); + } + else + { + /* pitch jumps between half frames, calc ltp for both estimates, choose the better one */ + int16_t pitch_int_2[2]; + int16_t pitch_fr_2[2]; + float norm_corr_2[2]; + int16_t pit_param_2[2]; + + for ( i = 0; i < 2; i++ ) + { + tcx_ltp_pitch_search( Top[i], &pitch_int_2[i], &pitch_fr_2[i], &pit_param_2[i], &norm_corr_2[i], L_frame, wsp, st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max, 1, &border_case ); + } + + i = ( norm_corr_2[1] > norm_corr_2[0] ) ? 1 : 0; + hTcxEnc->tcxltp_pitch_int = pitch_int_2[i]; + hTcxEnc->tcxltp_pitch_fr = pitch_fr_2[i]; + ltp_param[1] = pit_param_2[i]; + norm_corr = norm_corr_2[i]; + } + } + else + { + tcx_ltp_pitch_search( Top[1], &hTcxEnc->tcxltp_pitch_int, &hTcxEnc->tcxltp_pitch_fr, <p_param[1], &norm_corr, L_frame, wsp, st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max, ( element_mode > EVS_MONO ) ? 1 : 0, &border_case ); + } + + if ( border_case ) + { + norm_corr = 0.0f; + } + if ( st->element_mode == IVAS_CPE_DFT ) + { + tempFlatness = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS - NSUBBLOCKS_SHIFT, ( NSUBBLOCKS_SHIFT + 1 ) + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * ( 1.0f * ( hTcxEnc->tcxltp_pitch_int ) / L_frame ) ) ) ); + + maxEnergyChange = GetTCXMaxenergyChange( st->hTranDet, tcxMode == TCX_10, NSUBBLOCKS - NSUBBLOCKS_SHIFT, ( NSUBBLOCKS_SHIFT + 1 ) + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * (float) ( hTcxEnc->tcxltp_pitch_int ) / (float) L_frame ) ) ); + } + else + { + tempFlatness = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 1 + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * ( 1.0f * ( hTcxEnc->tcxltp_pitch_int ) / L_frame ) ) ) ); + + maxEnergyChange = GetTCXMaxenergyChange( st->hTranDet, tcxMode == TCX_10, NSUBBLOCKS, 1 + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * (float) ( hTcxEnc->tcxltp_pitch_int ) / (float) L_frame ) ) ); + } + + /* Switch LTP on */ + if ( ( tcxOnly == 0 && tcxMode == TCX_20 && norm_corr * hTcxEnc->tcxltp_norm_corr_past > 0.25f && tempFlatness < 3.5f ) || + ( tcxOnly == 1 && tcxMode == TCX_10 && max( norm_corr, hTcxEnc->tcxltp_norm_corr_past ) > 0.5f && maxEnergyChange < 3.5f ) || + /* Use LTP for lower correlation when pitch lag is big, L_frame*(1.2f-norm_corr) < hTcxEnc->tcxltp_pitch_int <=> norm_corr > 1.2f-hTcxEnc->/L_frame */ + ( tcxOnly == 1 && norm_corr > 0.44f && L_frame * ( 1.2f - norm_corr ) < hTcxEnc->tcxltp_pitch_int ) || + ( tcxOnly == 1 && tcxMode == TCX_20 && norm_corr > 0.44f && ( tempFlatness < 6.0f || ( tempFlatness < 7.0f && maxEnergyChange < 22.0f ) ) ) ) + { + if ( disable_ltp == 0 ) + { + ltp_param[0] = 1; + } + } + + /* hysteresis for stable ltp prediction */ + ltp_on = 0; + if ( tcxOnly == 1 && st->element_mode == IVAS_CPE_MDCT && ( ( sqrt( (float) ( hTcxEnc->tcxltp_on_mem ) ) * (norm_corr) *0.9f ) > 0.44f && ( tempFlatness < 6.0f || ( tempFlatness < 7.0f && maxEnergyChange < 22.0f ) ) ) ) + { + ltp_on = 1; + } + + if ( tcxOnly == 1 && ltp_param[0] == 1 ) + { + /* increase ltp counter */ + hTcxEnc->tcxltp_on_mem = min( 5, hTcxEnc->tcxltp_on_mem + 1 ); + } + else if ( ltp_on == 1 ) + { + /* hysteresis takes effect, decrease counter */ + hTcxEnc->tcxltp_on_mem = max( 0, hTcxEnc->tcxltp_on_mem - 1 ); + ltp_param[0] = ltp_on; + } + else + { + /* no ltp in this frame, reset counter */ + hTcxEnc->tcxltp_on_mem = 0; + } + } + + /* Find predicted signal */ + predict_signal( speech, pred_speech, hTcxEnc->tcxltp_pitch_int, hTcxEnc->tcxltp_pitch_fr, st->pit_res_max, L_frame ); + + /* Find gain */ + tcx_ltp_find_gain( speech, pred_speech, L_frame, &hTcxEnc->tcxltp_gain, <p_param[2] ); + + if ( ltp_param[0] ) + { + /* Total number of bits for LTP */ + if ( ltp_param[2] + 1 ) /* hTcxEnc->tcxltp_gain > 0 */ + { + *ltp_bits = 12; + } + else /* hTcxEnc->tcxltp_gain <= 0 -> turn off LTP */ + { + ltp_param[0] = 0; + } + } + + if ( !ltp_param[0] ) + { + /* No LTP -> set everything to zero */ + hTcxEnc->tcxltp_pitch_int = L_frame; + hTcxEnc->tcxltp_pitch_fr = 0; + ltp_param[1] = 0; + set_zero( pred_speech, L_frame ); + hTcxEnc->tcxltp_gain = 0.f; + ltp_param[2] = 0; + if ( hTcxEnc->tcxltp || SideInfoOnly ) + { + *ltp_bits = 1; + } + else + { + *ltp_bits = 0; + } + } + + si_gain = 0; + if ( SideInfoOnly ) + { + si_gain = hTcxEnc->tcxltp_gain; + hTcxEnc->tcxltp_gain = 0.f; + } + + if ( speech_ltp != NULL ) + { + if ( hTcxEnc->tcxltp_gain_past == 0.f && hTcxEnc->tcxltp_gain == 0.f ) + { + mvr2r( speech, speech_ltp, L_subfr ); + } + else if ( hTcxEnc->tcxltp_gain_past == 0.f ) + { + alpha = 0.f; + step = 1.f / (float) ( L_subfr ); + for ( n = 0; n < L_subfr; n++ ) + { + speech_ltp[n] = speech[n] - alpha * hTcxEnc->tcxltp_gain * pred_speech[n]; + alpha += step; + } + } + else + { + if ( A == NULL ) + { + for ( i = 0; i <= M; i++ ) + { + s = 0.0; + for ( j = 0; j < L_frame - i; j++ ) + { + s += speech[j - L_frame] * speech[j + i - L_frame]; + } + r[i] = s; + } + if ( r[0] < 100.0f ) + { + r[0] = 100.0f; + } + r[0] *= 1.0001f; + lev_dur( Aest, r, M, NULL ); + A = Aest; + } + + if ( hTcxEnc->tcxltp_gain > 0.f ) + { + predict_signal( speech - M, buf_zir, hTcxEnc->tcxltp_pitch_int, hTcxEnc->tcxltp_pitch_fr, st->pit_res_max, M ); + } + else + { + set_f( buf_zir, 0.0f, M ); + } + + for ( n = 0; n < M; n++ ) + { + buf_zir[n] = speech_ltp[n - M] - speech[n - M] + hTcxEnc->tcxltp_gain * buf_zir[n]; + } + + zir = buf_zir + M; + set_f( zir, 0.0f, L_subfr ); + syn_filt( A, M, zir, zir, L_subfr, buf_zir, 0 ); + alpha = 1.f; + step = 1.f / (float) ( L_subfr / 2 ); + + for ( n = L_subfr / 2; n < L_subfr; n++ ) + { + zir[n] *= alpha; + alpha -= step; + } + + for ( n = 0; n < L_subfr; n++ ) + { + speech_ltp[n] = ( speech[n] - hTcxEnc->tcxltp_gain * pred_speech[n] ) + zir[n]; + } + } + + if ( SideInfoOnly || hTcxEnc->tcxltp_gain == 0.0f ) + { + for ( n = L_subfr; n < L_frame; n++ ) + { + speech_ltp[n] = speech[n]; + } + } + else + { + for ( n = L_subfr; n < L_frame; n++ ) + { + speech_ltp[n] = speech[n] - hTcxEnc->tcxltp_gain * pred_speech[n]; + } + } + } + + /* Update */ + hTcxEnc->tcxltp_pitch_int_past = hTcxEnc->tcxltp_pitch_int; + hTcxEnc->tcxltp_pitch_fr_past = hTcxEnc->tcxltp_pitch_fr; + hTcxEnc->tcxltp_gain_past = hTcxEnc->tcxltp_gain; + + if ( SideInfoOnly ) + { + hTcxEnc->tcxltp_gain = si_gain; + } + + hTcxEnc->tcxltp_norm_corr_past = norm_corr; + + return; +} diff --git a/lib_enc/tcx_utils_enc.c b/lib_enc/tcx_utils_enc.c new file mode 100644 index 0000000000..ca88663355 --- /dev/null +++ b/lib_enc/tcx_utils_enc.c @@ -0,0 +1,1608 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "prot.h" +#include "rom_com.h" +#include "cnst.h" +#include "wmops.h" +#include "ivas_prot.h" + +/*---------------------------------------------------------------------* + * ComputeSpectrumNoiseMeasure() + * + * compute noise-measure flags for spectrum filling and quantization (0: tonal, 1: noise-like) + *---------------------------------------------------------------------*/ + +void ComputeSpectrumNoiseMeasure( + const float *powerSpec, + const int16_t L_frame, + const int16_t startLine, + const int16_t resetMemory, + int16_t *noiseFlags, + const int16_t lowpassLine ) +{ + int16_t i, lastTone; + float s, c; + + if ( resetMemory ) + { + for ( i = 0; i < lowpassLine; i++ ) + { + noiseFlags[i] = 0; + } + } + for ( i = lowpassLine; i < L_frame; i++ ) + { + noiseFlags[i] = 1; + } + + if ( powerSpec && startLine + 6 < L_frame ) + { + lastTone = 0; + /* noise-measure flags for spectrum filling and quantization (0: tonal, 1: noise-like) */ + i = startLine - 1; + s = powerSpec[i - 7] + powerSpec[i - 6] + powerSpec[i - 5] + + powerSpec[i - 4] + powerSpec[i - 3] + powerSpec[i - 2] + + powerSpec[i - 1] + powerSpec[i] + powerSpec[i + 1] + + powerSpec[i + 2] + powerSpec[i + 3] + powerSpec[i + 4] + + powerSpec[i + 5] + powerSpec[i + 6] + powerSpec[i + 7]; + + for ( i++; i < lowpassLine - 7; i++ ) + { + c = powerSpec[i - 1] + powerSpec[i] + powerSpec[i + 1]; + s += powerSpec[i + 7] - powerSpec[i - 8]; + if ( s >= ( 1.75f - 0.5f * noiseFlags[i] ) * c ) + { + noiseFlags[i] = 1; + } + else + { + noiseFlags[i] = 0; + lastTone = i; + } + } + /* lower L_frame*startRatio lines are tonal (0), upper 7 lines are processed separately */ + for ( ; i < lowpassLine - 1; i++ ) + { + c = powerSpec[i - 1] + powerSpec[i] + powerSpec[i + 1]; + /* running sum can't be updated any more, just use the latest one */ + if ( s >= ( 1.75f - 0.5f * noiseFlags[i] ) * c ) + { + noiseFlags[i] = 1; + } + else + { + noiseFlags[i] = 0; + /* lastTone = i; */ + } + } + noiseFlags[i] = 1; /* uppermost line is defined as noise-like (1) */ + + if ( lastTone > 0 ) /* spread uppermost tonal line one line upward */ + { + noiseFlags[lastTone + 1] = 0; + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * detectLowpassFac() + * + * + *---------------------------------------------------------------------*/ + +static void detectLowpassFac( + const float *powerSpec, + const int16_t L_frame, + const int16_t rectWin, + float *pLpFac, + const int16_t lowpassLine ) +{ + int16_t i; + float threshold; + + threshold = 0.1f * 2 * NORM_MDCT_FACTOR; + if ( rectWin ) + { + /* compensate for bad side-lobe attenuation with asymmetric windows */ + threshold *= 2.f; + } + + for ( i = lowpassLine - 1; i >= lowpassLine / 2; i-- ) + { + if ( powerSpec[i] > threshold ) + { + break; + } + } + + *pLpFac = ( 0.3f * ( *pLpFac ) ) + ( 0.7f * ( (float) ( i + 1 ) / (float) L_frame ) ); + + return; +} + +/*-----------------------------------------------------------* + * Compute noise-measure flags for spectrum filling * + * and quantization (0: tonal, 1: noise-like). * + * Detect low pass if present. * + *-----------------------------------------------------------*/ + +void AnalyzePowerSpectrum( + Encoder_State *st, /* i/o: encoder states */ + const int16_t L_frame, /* i : frame length */ + const int16_t L_frameTCX, /* i : full band frame length */ + const int16_t left_overlap, /* i : left overlap length */ + const int16_t right_overlap, /* i : right overlap length */ + const float mdctSpectrum[], /* i : MDCT spectrum */ + const float signal[], /* i : windowed signal corresponding to mdctSpectrum */ + float powerSpec[] /* o : Power spectrum. Can point to signal */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + int16_t i, iStart, iEnd, lowpassLine; + + lowpassLine = L_frameTCX; + iStart = 0; + iEnd = L_frameTCX; + + TCX_MDST( signal, powerSpec, left_overlap, L_frameTCX - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); + + if ( st->narrowBand ) + { + attenuateNbSpectrum( L_frameTCX, powerSpec ); + } + + /* power spectrum: MDCT^2 + MDST^2 */ + for ( i = iStart; i < iEnd; i++ ) + { + powerSpec[i] *= powerSpec[i]; + powerSpec[i] += mdctSpectrum[i] * mdctSpectrum[i]; + } + + ComputeSpectrumNoiseMeasure( powerSpec, L_frameTCX, hTcxEnc->nmStartLine * L_frame / st->L_frame, ( st->L_frame * st->last_sr_core != st->L_frame_past * st->sr_core ) || ( st->last_core != TCX_20_CORE ), hTcxEnc->memQuantZeros, lowpassLine ); + + if ( st->total_brate <= ACELP_24k40 ) + { + lowpassLine = (int16_t) ( 2.0f * st->hTcxCfg->bandwidth * L_frame ); + detectLowpassFac( powerSpec, L_frame, ( st->last_core == ACELP_CORE ), &hTcxEnc->measuredBwRatio, lowpassLine ); + } + else + { + hTcxEnc->measuredBwRatio = 1.0f; + } + + return; +} + + +/*---------------------------------------------------------------------* + * mdct_preShaping() + * + * + *---------------------------------------------------------------------*/ + +void mdct_preShaping( + float x[], + const int16_t lg, + const float gains[] ) +{ + int16_t i, j, k, l; + float g; + int16_t m, n, k1, k2; + + j = 0; /* not counted, is included in ptr init */ + /* FDNS_NPTS = 64 !!! */ + k = lg / FDNS_NPTS; + m = lg % FDNS_NPTS; + if ( m ) + { + if ( m <= ( FDNS_NPTS / 2 ) ) + { + n = FDNS_NPTS / m; + k1 = k; + k2 = k + 1; + } + else + { + n = FDNS_NPTS / ( FDNS_NPTS - m ); + k1 = k + 1; + k2 = k; + } + for ( i = 0; i < lg; ) + { + if ( j % n ) + { + k = k1; + } + else + { + k = k2; + } + g = 1.f / gains[j++]; + + /* Limit number of loops, if end is reached */ + k = min( k, lg - i ); + for ( l = 0; l < k; l++ ) + { + x[i++] *= g; + } + } + } + else + { + for ( i = 0; i < lg; ) + { + g = 1.f / gains[j++]; + for ( l = 0; l < k; l++ ) + { + x[i++] *= g; + } + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * AdaptLowFreqEmph() + * + * + *---------------------------------------------------------------------*/ + +void AdaptLowFreqEmph( + float x[], + int16_t xq[], + float invGain, + const int16_t tcx_lpc_shaped_ari, + const float lpcGains[], + const int16_t lg ) +{ + int16_t i, i_max, i_max_old; + + if ( !tcx_lpc_shaped_ari ) + { + /* 1. find first magnitude maximum in lower quarter of spectrum */ + invGain *= 2.0f; + i_max = -1; + for ( i = 0; i < lg / 4; i++ ) + { + if ( ( ( xq[i] <= -2 ) || ( xq[i] >= 2 ) ) && + ( ( invGain * x[i] <= -3.625f ) || ( invGain * x[i] >= 3.625f ) ) ) + { + xq[i] += ( xq[i] < 0 ) ? -2 : 2; + i_max = i; + break; + } + } + /* 2. compress value range of all xq up to i_max: add two steps */ + for ( i = 0; i < i_max; i++ ) + { + if ( x[i] < 0.0f ) + { + xq[i] = (int16_t) ( invGain * x[i] - 0.375f ); + } + else + { + xq[i] = (int16_t) ( invGain * x[i] + 0.375f ); + } + } + /* 3. find first mag. maximum below i_max which is half as high */ + i_max_old = i_max; + if ( i_max_old > -1 ) + { + invGain *= 2.0f; + i_max = -1; /* reset first maximum, update inverse gain */ + for ( i = 0; i < lg / 4; i++ ) + { + if ( ( ( xq[i] <= -2 ) || ( xq[i] >= 2 ) ) && + ( ( invGain * x[i] <= -3.625f ) || ( invGain * x[i] >= 3.625f ) ) ) + { + xq[i] += ( xq[i] < 0 ) ? -2 : 2; + i_max = i; + break; + } + } + } + /* 4. re-compress and quantize all xq up to half-height i_max+1 */ + for ( i = 0; i < i_max; i++ ) + { + if ( x[i] < 0.0f ) + { + xq[i] = (int16_t) ( invGain * x[i] - 0.375f ); + } + else + { + xq[i] = (int16_t) ( invGain * x[i] + 0.375f ); + } + } + /* 5. always compress 2 lines; lines could be at index 0 and 1! */ + if ( i_max_old > -1 ) + { + invGain *= 0.5f; /* reset inverse gain */ + if ( i_max < i_max_old ) + { + i_max = i_max_old; + } + } + i = i_max + 1; + + if ( x[i] < 0.0f ) + { + xq[i] = ( invGain * x[i] <= -3.625f ) ? xq[i] - 2 : (int16_t) ( invGain * x[i] - 0.375f ); + } + else + { + xq[i] = ( invGain * x[i] >= 3.625f ) ? xq[i] + 2 : (int16_t) ( invGain * x[i] + 0.375f ); + } + i++; + if ( x[i] < 0.0f ) + { + xq[i] = ( invGain * x[i] <= -3.625f ) ? xq[i] - 2 : (int16_t) ( invGain * x[i] - 0.375f ); + } + else + { + xq[i] = ( invGain * x[i] >= 3.625f ) ? xq[i] + 2 : (int16_t) ( invGain * x[i] + 0.375f ); + } + } + else + { + PsychAdaptLowFreqEmph( x, lpcGains ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * PsychAdaptLowFreqEmph() + * + * + *---------------------------------------------------------------------*/ + +void PsychAdaptLowFreqEmph( + float x[], + const float lpcGains[] ) +{ + int16_t i; + float max_val, fac, tmp; + max_val = tmp = lpcGains[0]; + + /* find minimum (tmp) and maximum (max) of LPC gains in low frequencies */ + for ( i = 1; i < 9; i++ ) + { + if ( tmp > lpcGains[i] ) + { + tmp = lpcGains[i]; + } + if ( max_val < lpcGains[i] ) + { + max_val = lpcGains[i]; + } + } + tmp *= 32.0f; + if ( ( max_val < tmp ) && ( max_val > FLT_MIN ) ) + { + fac = tmp = (float) pow( tmp / max_val, 0.0078125f ); + + /* gradual boosting of lowest 32 bins; DC is boosted by (tmp/max)^1/4 */ + for ( i = 31; i >= 0; i-- ) + { + x[i] *= fac; + fac *= tmp; + } + } + + return; +} + +/*---------------------------------------------------------------------* + * SQ_gain() + * + * + *---------------------------------------------------------------------*/ + +/*! r: SQ gain */ +float SQ_gain( + const float x[], /* i : vector to quantize */ + const int16_t nbitsSQ, /* i : number of bits targeted */ + const int16_t lg /* i : vector size (2048 max) */ +) +{ + int16_t i, iter; + float ener, tmp, target, fac, offset; + float en[N_MAX / 2]; + + /* energy of quadruples with 9dB offset */ + for ( i = 0; i < lg; i += 4 ) + { + ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; + en[i >> 2] = (float) log10( ener ); + } + + /* SQ scale: 4 bits / 6 dB per quadruple */ + target = 0.15f * (float) ( nbitsSQ - ( lg >> 4 ) ); + fac = 12.8f; + offset = fac; + + /* find offset (0 to 128 dB with step of 0.125dB) */ + for ( iter = 0; iter < 10; iter++ ) + { + fac *= 0.5f; + offset -= fac; + ener = 0.0f; + + for ( i = 0; i < lg / 4; i++ ) + { + tmp = en[i] - offset; + + /* avoid SV with 1 bin of amp < 0.5f */ + if ( tmp > 0.3f ) + { + ener += tmp; + + /* if ener is above target -> break and increase offset */ + if ( ener > target ) + { + offset += fac; + break; + } + } + } + } + + /* return gain */ + return (float) pow( 10.0f, 0.45f + 0.5f * offset ); +} + + +/*---------------------------------------------------------------------* + * SQ_gain_estimate() + * + * + *---------------------------------------------------------------------*/ + +/*! r: SQ gain */ +float SQ_gain_estimate( + const float x[], /* i : vector to quantize */ + const int16_t nbitsSQ, /* i : number of bits targeted */ + const int16_t lg /* i : vector size (2048 max) */ +) +{ + int16_t i, iter, max_iter; + float ener, tmp, target, fac, offset; + float en[N_MAX / 2]; + float minGainInv = 0.5f * (float) log10( (float) lg / (float) NORM_MDCT_FACTOR ); /* lowest possible quantized gain */ + + tmp = minGainInv + 0.94f; /* lowest gain + expected value of the quantization noise energy per quadruple (log10(4/12)) */ + /* SNR of quadruples for unit step quantizer and lowest possible gain */ + for ( i = 0; i < lg; i += 4 ) + { + ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; + en[i >> 2] = (float) log10( ener ) + tmp; + } + + /* SQ scale: 4 bits / 6 dB per quadruple */ + target = 0.15f * (float) ( nbitsSQ - ( lg >> 4 ) ); + fac = 18.4f; + max_iter = 8; /* for 0.36dB steps */ + offset = fac - fac / (float) ( 2 << max_iter ); + + /* find offset, resolution similar to SQ gain quantizer resolution (92dB range, 0.719db resolution) */ + for ( iter = 0; iter < max_iter; iter++ ) + { + fac *= 0.5f; + offset -= fac; + ener = 0.0f; + + for ( i = 0; i < lg / 4; i++ ) + { + tmp = en[i] - offset; + + /* avoid SV with 1 bin of amp < 0.5f */ + if ( tmp > 0.3f ) + { + ener += tmp; + + /* if SNR is above target -> break and increase offset */ + if ( ener > target ) + { + offset += fac; + break; + } + } + } + } + + /* return gain */ + return (float) pow( 10.0f, 0.5f * offset - minGainInv ); +} + +/*---------------------------------------------------------------------* + * tcx_scalar_quantization() + * + * + *---------------------------------------------------------------------*/ + +void tcx_scalar_quantization( + float *x, /* i : input coefficients */ + int16_t *xq, /* o : quantized coefficients */ + const int16_t L_frame, /* i : frame length */ + const float gain, /* i : quantization gain */ + const float offset, /* i : rounding offset (deadzone) */ + int16_t *memQuantZeros, /* o : coefficients set to 0 */ + const int16_t tcxonly ) +{ + int16_t i; + float gainInv, rounding, rounding2; + + /* Init scalar quantizer */ + gainInv = 1.0f / gain; + rounding = offset; + rounding2 = -offset; + + if ( memQuantZeros == NULL ) + { + i = L_frame - 1; + } + else + { + for ( i = L_frame - 1; ( memQuantZeros[i] ) && ( (float) fabs( x[i] ) * gainInv < 1.0f ); i-- ) + { + xq[i] = 0; + } + } + + for ( ; i >= 0; i-- ) + { + if ( x[i] > 0.f ) + { + xq[i] = ( (int16_t) min( MAX16B, ( rounding + x[i] * gainInv ) ) ); + } + else + { + /* limit to -32767 (although 16 bit would allow -32768) - avoids potential issues in arithmetic coding routines, where a sign flip is happening */ + xq[i] = ( (int16_t) max( -32767, ( rounding2 + x[i] * gainInv ) ) ); + } + } + + if ( !tcxonly ) + { + AdaptLowFreqEmph( x, xq, gainInv, 0, NULL, L_frame ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * tcx_scalar_quantization_rateloop() + * + * + *---------------------------------------------------------------------*/ + +int16_t tcx_scalar_quantization_rateloop( + float *x, /* i : input coefficients */ + int16_t *xq, /* o : quantized coefficients */ + const int16_t L_frame, /* i : frame length */ + float *gain, /* i/o: quantization gain */ + float offset, /* i : rounding offset (deadzone) */ + int16_t *memQuantZeros, /* o : coefficients set to 0 */ + int16_t *lastnz_out, /* i/o: last nonzero coeff index */ + const int16_t target, /* i : target number of bits */ + int16_t *nEncoded, /* o : number of encoded coeff */ + int16_t *stop, /* i/o: stop param */ + const int16_t sqBits_in_noStop, /* i : number of sqBits as determined in prev. quant. stage, w/o using stop mechanism (ie might exceed target bits) */ + const int16_t sqBits_in, /* i : number of sqBits as determined in prev. quant. stage, using stop mechanism (ie always <= target bits) */ + const int16_t tcxRateLoopOpt, /* i : turns on/off rateloop optimization */ + const int16_t tcxonly, + CONTEXT_HM_CONFIG *hm_cfg, + const int16_t iter_max, + const int16_t element_mode ) +{ + int16_t sqBits, stopFlag; + int16_t ubfound, lbfound; + float ub = 0.f, lb = 0.f; + float shift; + int16_t iter; + float sqGain; + float w_lb, w_ub; + const int16_t kDampen = 10; + int16_t old_stopFlag, old_nEncoded, old_sqBits; + float mod_adjust0, mod_adjust1; + float inv_target; + const float kMargin = 0.96f; + int16_t lastnz; + int16_t saturated; + float minSqGain; + + /* Init */ + saturated = 0; + minSqGain = (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_frame ); + + sqGain = *gain; + stopFlag = *stop; + ubfound = 0; + lbfound = 0; + shift = 0.25f; + w_lb = 0.0f; + w_ub = 0.0f; + lastnz = *lastnz_out; + + old_stopFlag = stopFlag; + old_nEncoded = *nEncoded; + old_sqBits = sqBits_in_noStop; + + sqBits = sqBits_in; + + mod_adjust0 = max( 1.0f, 2.3f - 0.0025f * target ); + mod_adjust1 = 1.0f / mod_adjust0; + + inv_target = 1.0f / (float) target; + + /* Loop */ + for ( iter = 0; iter < iter_max; iter++ ) + { + if ( tcxRateLoopOpt >= 2 ) + { + /* Ajust sqGain */ + if ( stopFlag ) + { + lbfound = 1; + lb = sqGain; + w_lb = (float) ( stopFlag - target + kDampen ); + saturated = 0; + + if ( ubfound ) + { + sqGain = ( lb * w_ub + ub * w_lb ) / ( w_ub + w_lb ); + } + else + { + sqGain *= ( 1.0f + ( (float) ( stopFlag / kMargin ) * inv_target - 1.0f ) * mod_adjust0 ); + } + } + else if ( saturated == 0 ) + { + ubfound = 1; + ub = sqGain; + w_ub = (float) ( target - sqBits + kDampen ); + if ( lbfound ) + { + sqGain = ( lb * w_ub + ub * w_lb ) / ( w_ub + w_lb ); + } + else + { + sqGain *= ( 1.0f - ( 1.0f - (float) ( sqBits * kMargin ) * inv_target ) * mod_adjust1 ); + } + + if ( tcxRateLoopOpt == 3 && sqGain < minSqGain ) + { + sqGain = minSqGain; + saturated = 1; + } + } + else + { + break; /* we cannot go any lower anyway*/ + } + } + else /* tcxRateLoopOpt != 2 */ + { + /* Ajust sqGain */ + if ( stopFlag ) + { + lbfound = 1; + lb = sqGain; + if ( ubfound ) + { + sqGain = (float) sqrt( lb * ub ); + } + else + { + sqGain = sqGain * (float) pow( 10.0f, shift / 10.0f ); + shift *= 2.0f; + } + } + else + { + ubfound = 1; + ub = sqGain; + if ( lbfound ) + { + sqGain = (float) sqrt( lb * ub ); + } + else + { + sqGain = sqGain * (float) pow( 10.0f, -shift / 10.0f ); + shift *= 2.0f; + } + } + } + + /* Quantize spectrum */ + tcx_scalar_quantization( x, xq, L_frame, sqGain, offset, memQuantZeros, tcxonly ); + + /* Estimate bitrate */ + if ( tcxRateLoopOpt >= 1 ) + { + stopFlag = 0; + } + else + { + stopFlag = 1; + } + + if ( element_mode > EVS_MONO ) + { + sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( xq, L_frame, &lastnz, nEncoded, target, &stopFlag, 0, hm_cfg ); + } + else + { + sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( xq, L_frame, &lastnz, nEncoded, target, &stopFlag, hm_cfg ); + } + + if ( tcxRateLoopOpt >= 1 ) + { + if ( ( *nEncoded >= old_nEncoded && ( stopFlag >= old_stopFlag ) ) || ( *nEncoded > old_nEncoded && ( stopFlag == 0 && old_stopFlag > 0 ) ) || ( stopFlag == 0 && old_stopFlag == 0 ) ) + { + *gain = sqGain; + old_nEncoded = *nEncoded; + old_stopFlag = stopFlag; + old_sqBits = sqBits; + *lastnz_out = lastnz; + } + } + } /* for ( iter=0; iter= 1 ) + { + /* Quantize spectrum */ + tcx_scalar_quantization( x, xq, L_frame, *gain, offset, memQuantZeros, tcxonly ); + + /* Output */ + *nEncoded = old_nEncoded; + sqBits = old_sqBits; + *stop = old_stopFlag; + } + else + { + /* Output */ + *gain = sqGain; + *stop = stopFlag; + *lastnz_out = lastnz; + } + + return sqBits; +} + +/*---------------------------------------------------------------------* + * tcx_QuantizeGain() + * + * + *---------------------------------------------------------------------*/ + +void tcx_QuantizeGain( + const int16_t n, + float *pGain, + int16_t *pQuantizedGain ) +{ + float ener, gain; + int16_t quantizedGain; + + ener = (float) sqrt( (float) n / (float) NORM_MDCT_FACTOR ); + + gain = *pGain * ener; + + assert( gain > 0 ); + + /* quantize gain with step of 0.714 dB */ + quantizedGain = (int16_t) floor( 0.5f + 28.0f * (float) log10( gain ) ); + + if ( quantizedGain < 0 ) + { + quantizedGain = 0; + } + if ( quantizedGain > 127 ) + { + quantizedGain = 127; + } + + *pQuantizedGain = quantizedGain; + *pGain = (float) pow( 10.0f, ( (float) quantizedGain ) / 28.0f ) / ener; + + return; +} + +/*---------------------------------------------------------------------* + * tcx_noise_factor() + * + * + *---------------------------------------------------------------------*/ + +void tcx_noise_factor( + const float *x_orig, /* i : unquantized mdct coefficients */ + float *sqQ, /* i/o: quantized mdct coefficients */ + const int16_t iFirstLine, /* i : first coefficient to be considered */ + const int16_t lowpassLine, /* i : last nonzero coefficients after low-pass */ + const int16_t nTransWidth, /* i : minimum size of hole to be checked */ + const int16_t L_frame, /* i : frame length */ + const float gain_tcx, /* i : tcx gain */ + const float tiltCompFactor, /* i : LPC tilt compensation factor */ + float *fac_ns, /* o : noise factor */ + int16_t *quantized_fac_ns, /* o : quantized noise factor */ + const int16_t element_mode /* i : IVAS element mode */ +) +{ + int16_t i, k, win, segmentOffset; + float inv_gain2 = 0.f, sqErrorNrg, n, tilt_factor, tmp; + float att; /* noise level attenuation factor for transient windows */ + + /*Adjust noise filling level*/ + sqErrorNrg = 0.0f; + n = 0.0f; + /* max() */ + tilt_factor = 1.0f / (float) pow( max( 0.375f, tiltCompFactor ), 1.0f / (float) L_frame ); /* 1/(a^b) = a^-b */ + inv_gain2 = 1.0f / ( (float) ( nTransWidth * nTransWidth ) * gain_tcx ); + + /* find last nonzero line below iFirstLine, use it as start offset */ + i = iFirstLine; + + if ( element_mode == IVAS_CPE_MDCT ) /* ... but only in mono or parametric stereo since it may cause binaural unmasking in discrete stereo */ + { + segmentOffset = i; + } + else + { + for ( ; i > ( iFirstLine >> 1 ); i-- ) + { + if ( sqQ[i] != 0.0f ) + { + break; + } + } + inv_gain2 *= (float) pow( tilt_factor, (float) i ); + segmentOffset = ++i; + } + + if ( nTransWidth <= 3 ) + { + att = tmp = FLT_MIN; + for ( k = i & 0xFFFE; k < lowpassLine; k++ ) + { + att += x_orig[k] * x_orig[k]; /* even-index bins, left sub-win */ + k++; + tmp += x_orig[k] * x_orig[k]; /* odd-index bins, right sub-win */ + } + att = (float) sqrt( ( min( att, tmp ) * 2.0f ) / ( att + tmp ) ); + } + else + { + att = 1.0f; + } + win = 0; + for ( ; i < lowpassLine; i++ ) + { + inv_gain2 *= tilt_factor; + if ( sqQ[i] != 0 ) /* current line is not zero, so reset pointers */ + { + if ( win > 0 ) /* add segment sum to sum of segment magnitudes */ + { + k = i - segmentOffset; + if ( nTransWidth <= 3 ) + { + n += ( k > 2 * nTransWidth - 4 ) ? (float) ( k - nTransWidth + 1 ) + : (float) ( k * k ) * 0.28125f / nTransWidth; /* table lookup instead of */ + } + else + { + n += ( k > 12 ) ? (float) k - 7.0f : (float) ( k * k ) * 0.03515625f; + } + for ( k = segmentOffset; k < i - win; k++ ) + { + sqErrorNrg += sqQ[k] * (float) nTransWidth; + sqQ[k] = 0; + } + for ( ; win > 0; win-- ) + { + sqErrorNrg += sqQ[k] * (float) win; + sqQ[k++] = 0; + } + } + segmentOffset = i + 1; /* new segment might start at next line */ + } + else /* current line is zero, so update pointers & segment sum */ + { + if ( win < nTransWidth ) + { + win++; + } + /* update segment sum: magnitudes scaled by smoothing function */ + sqQ[i] = (float) fabs( x_orig[i] ) * (float) win * inv_gain2; + } + } + if ( win > 0 ) /* add last segment sum to sum of segment magnitudes */ + { + k = i - segmentOffset; + if ( nTransWidth <= 3 ) + { + n += ( k > 2 * nTransWidth - 4 ) ? (float) ( k - nTransWidth + 1 ) + : (float) ( k * k ) * 0.28125f / nTransWidth; /* table lookup instead of */ + } + else + { + n += ( k > 12 ) ? (float) k - 7.0f : (float) ( k * k ) * 0.03515625f; + } + for ( k = segmentOffset; k < i - win; k++ ) + { + sqErrorNrg += sqQ[k] * (float) nTransWidth; + sqQ[k] = 0; + } + for ( ; win > 0; win-- ) + { + sqErrorNrg += sqQ[k] * (float) win; + sqQ[k++] = 0; + } + } + + /* noise level factor: average of segment magnitudes of noise bins */ + if ( n > 0.0f ) + { + *fac_ns = ( sqErrorNrg * att ) / n; + } + else + { + *fac_ns = 0.0f; + } + + /* quantize, dequantize noise level factor (range 0.09375 - 0.65625) */ + *quantized_fac_ns = (int16_t) ( 0.5f + *fac_ns * 1.34375f * ( 1 << NBITS_NOISE_FILL_LEVEL ) ); + if ( *quantized_fac_ns > ( 1 << NBITS_NOISE_FILL_LEVEL ) - 1 ) + { + *quantized_fac_ns = ( 1 << NBITS_NOISE_FILL_LEVEL ) - 1; + } + *fac_ns = (float) ( *quantized_fac_ns ) * 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); + + return; +} + + +/*---------------------------------------------------------------------* + * tcx_encoder_memory_update() + * + * + *---------------------------------------------------------------------*/ + +void tcx_encoder_memory_update( + Encoder_State *st, /* i/o: encoder memory state */ + float *xn_buf, /* i/o: mdct output buffer/time domain weigthed synthesis */ + const float *Ai, /* i : Unquantized (interpolated) LPC coefficients */ + const float *A /* i : Quantized LPC coefficients */ +) +{ + int16_t L_frame_glob; + float tmp; + float buf[1 + M + L_FRAME_PLUS]; + float *synth; + LPD_state *LPDmem = st->hLPDmem; + + L_frame_glob = st->L_frame; + + /* Output synth */ + mvr2r( xn_buf, st->synth, L_frame_glob ); + + /* Update synth */ + synth = buf + 1 + M; + mvr2r( LPDmem->syn, buf, 1 + M ); + + mvr2r( xn_buf, synth, L_frame_glob ); + mvr2r( synth + L_frame_glob - M - 1, LPDmem->syn, 1 + M ); + + if ( !st->tcxonly ) + { + /* Update weighted synthesis */ + residu( Ai + ( st->nb_subfr - 1 ) * ( M + 1 ), M, synth + L_frame_glob - 1, &tmp, 1 ); + LPDmem->mem_w0 = st->wspeech_enc[L_frame_glob - 1] - tmp; + } + + /* Emphasis of synth -> synth_pe */ + tmp = synth[-M - 1]; + preemph( synth - M, st->hTcxCfg->preemph_fac, M + L_frame_glob, &tmp ); + mvr2r( synth + L_frame_glob - M, LPDmem->mem_syn, M ); + mvr2r( synth + L_frame_glob - M, LPDmem->mem_syn2, M ); + mvr2r( synth + L_frame_glob - L_SYN_MEM, LPDmem->mem_syn_r, L_SYN_MEM ); + + if ( !st->tcxonly || ( L_frame_glob == L_FRAME16k ) ) + { + /* Update excitation */ + if ( L_frame_glob < L_EXC_MEM ) + { + mvr2r( LPDmem->old_exc + ( L_frame_glob ), LPDmem->old_exc, L_EXC_MEM - L_frame_glob ); + residu( A, M, synth, LPDmem->old_exc + L_EXC_MEM - ( L_frame_glob ), L_frame_glob ); + } + else + { + residu( A, M, synth + (L_frame_glob) -L_EXC_MEM, LPDmem->old_exc, L_EXC_MEM ); + } + } + + return; +} + + +/*---------------------------------------------------------------------* + * tcx_ari_res_Q_spec() + * + * Residual Quantization + *---------------------------------------------------------------------*/ + +/*! r: number of bits used (including "bits") */ +int16_t tcx_ari_res_Q_spec( + const float x_orig[], /* i : original spectrum */ + const int16_t signs[], /* i : signs (x_orig[.]<0) */ + float x_Q[], /* i/o: quantized spectrum */ + const int16_t L_frame, /* i : number of lines */ + const float gain, /* i : TCX gain */ + int16_t prm[], /* o : bitstream */ + int16_t target_bits, /* i : number of bits available */ + int16_t bits, /* i : number of bits used so far */ + const float deadzone, /* i : quantizer deadzone */ + const float x_fac[] /* i : spectrum post-quantization factors */ +) +{ + int16_t i, j, num_zeros; + int16_t zeros[L_FRAME_PLUS]; + float fac_m, fac_p, thres, x_Q_m, x_Q_p; + + /* Limit the number of residual bits */ + target_bits = min( target_bits, NPRM_RESQ ); + + + /* Requantize the spectrum line-by-line */ + fac_m = deadzone * 0.5f; + fac_p = 0.5f - fac_m; + num_zeros = 0; + + if ( x_fac == NULL ) + { + for ( i = 0; i < L_frame; ++i ) + { + if ( bits >= target_bits ) + { + /* no bits left */ + break; + } + if ( x_Q[i] != 0 ) + { + int16_t sign = ( 1 - 2 * signs[i] ); + + x_Q_m = x_Q[i] - sign * fac_m; + x_Q_p = x_Q[i] + sign * fac_p; + if ( fabs( x_orig[i] - gain * x_Q_m ) < fabs( x_orig[i] - gain * x_Q_p ) ) /* Decrease magnitude */ + { + x_Q[i] = x_Q_m; + prm[bits++] = 0; + } + else /* Increase magnitude */ + { + x_Q[i] = x_Q_p; + prm[bits++] = 1; + } + } + else + { + zeros[num_zeros++] = i; + } + } + + /* Requantize zeroed-lines of the spectrum */ + fac_p = ( 1.0f - deadzone ) * 0.33f; + --target_bits; /* reserve 1 bit for the check below */ + for ( j = 0; j < num_zeros; ++j ) + { + if ( bits >= target_bits ) + { + /* 1 or 0 bits left */ + break; + } + + i = zeros[j]; + + thres = fac_p; + if ( fabs( x_orig[i] ) > thres * gain ) + { + prm[bits++] = 1; + prm[bits++] = 1 - signs[i]; + x_Q[i] = ( 2 - 4 * signs[i] ) * thres; + } + else + { + prm[bits++] = 0; + } + } + + return bits; + } + + for ( i = 0; i < L_frame; ++i ) + { + if ( bits >= target_bits ) + { + /* no bits left */ + break; + } + if ( x_Q[i] != 0 ) + { + float sign = ( 1 - 2 * signs[i] ) * x_fac[i]; + + x_Q_m = x_Q[i] - sign * fac_m; + x_Q_p = x_Q[i] + sign * fac_p; + if ( fabs( x_orig[i] - gain * x_Q_m ) < fabs( x_orig[i] - gain * x_Q_p ) ) /* Decrease magnitude */ + { + x_Q[i] = x_Q_m; + prm[bits++] = 0; + } + else /* Increase magnitude */ + { + x_Q[i] = x_Q_p; + prm[bits++] = 1; + } + } + else + { + zeros[num_zeros++] = i; + } + } + + /* Requantize zeroed-lines of the spectrum */ + fac_p = ( 1.0f - deadzone ) * 0.33f; + --target_bits; /* reserve 1 bit for the check below */ + for ( j = 0; j < num_zeros; ++j ) + { + if ( bits >= target_bits ) + { + /* 1 or 0 bits left */ + break; + } + + i = zeros[j]; + + thres = fac_p * x_fac[i]; + if ( fabs( x_orig[i] ) > thres * gain ) + { + prm[bits++] = 1; + prm[bits++] = 1 - signs[i]; + x_Q[i] = ( 2 - 4 * signs[i] ) * thres; + } + else + { + prm[bits++] = 0; + } + } + + return bits; +} + + +/*---------------------------------------------------------------------* + * tcx_res_Q_gain() + * + * + *---------------------------------------------------------------------*/ + +#define kMaxEstimatorOvershoot 5 +#define kMaxEstimatorUndershoot 0 + +int16_t tcx_res_Q_gain( + float sqGain, + float *gain_tcx, + int16_t *prm, + int16_t sqTargetBits ) +{ + int16_t bits; + float gain_reQ; + + /*Refine the gain quantization : Normal greedy gain coding */ + gain_reQ = *gain_tcx; + for ( bits = 0; bits < TCX_RES_Q_BITS_GAIN; bits++ ) + { + if ( sqGain < gain_reQ ) + { + prm[bits] = 0; + gain_reQ *= gain_corr_inv_fac[bits]; + } + else + { + prm[bits] = 1; + gain_reQ *= gain_corr_fac[bits]; + } + if ( bits < sqTargetBits ) + { + *gain_tcx = gain_reQ; + } + } + + return ( bits ); +} + +/*---------------------------------------------------------------------* + * refine_0() + * + * + *---------------------------------------------------------------------*/ + +static void refine_0( + const float x_orig, + float *x_Q, + const float sqGain, + int16_t *prm, + int16_t *bits, + const float sq_round, + const float lf_deemph_factor ) +{ + float /*b,*/ thres; + /* was */ + /*b = x_orig/sqGain;*/ + thres = ( 1.0f - sq_round ) * 0.33f * lf_deemph_factor; + if ( x_orig > thres * sqGain ) + { + /* was (b > thres) */ + prm[( *bits )++] = 1; + prm[( *bits )++] = 1; + *x_Q = 2.f * thres; + } + else if ( x_orig < -thres * sqGain ) + { + /* was (b < -thres) */ + prm[( *bits )++] = 1; + prm[( *bits )++] = 0; + *x_Q = -2.f * thres; + } + else + { + prm[( *bits )++] = 0; + } + + return; +} + +/*---------------------------------------------------------------------* + * tcx_res_Q_spec() + * + * + *---------------------------------------------------------------------*/ + +int16_t tcx_res_Q_spec( + const float *x_orig, + float *x_Q, + const int16_t L_frame, + const float sqGain, + int16_t *prm, + int16_t sqTargetBits, + int16_t bits, + const float sq_round, + const float lf_deemph_factors[] ) +{ + int16_t i; + float fac_m, fac_p; + + /* Limit the number of residual bits */ + sqTargetBits = min( sqTargetBits, NPRM_RESQ ); + + /* Requantize the spectrum line-by-line */ + fac_p = 0.5f - sq_round * 0.5f; + fac_m = sq_round * 0.5f; + if ( !lf_deemph_factors ) + { + for ( i = 0; i < L_frame; i++ ) + { + if ( bits >= sqTargetBits - kMaxEstimatorUndershoot ) + { + fac_m = fac_p = 0; + if ( bits >= min( NPRM_RESQ, sqTargetBits + kMaxEstimatorOvershoot ) ) + { + break; + } + } + + if ( x_Q[i] != 0.0f ) + { + if ( x_orig[i] < (sqGain) *x_Q[i] ) + { + prm[bits++] = 0; + x_Q[i] -= ( x_Q[i] > 0 ) ? fac_m : fac_p; + } + else + { + prm[bits++] = 1; + x_Q[i] += ( x_Q[i] > 0 ) ? fac_p : fac_m; + } + } + } + sqTargetBits -= 2; /* Quantize zeroed lines of the spectrum */ + for ( i = 0; ( i < L_frame ) && ( bits < sqTargetBits ); i++ ) + { + /* bits < sqTargetBits */ + if ( x_Q[i] == 0.0f ) + { + refine_0( x_orig[i], &x_Q[i], sqGain, prm, &bits, sq_round, 1.0f ); /* inlined */ + } + } + /* Make sure that all possible bits are initialized */ + for ( i = bits; i < NPRM_RESQ; i++ ) + { + prm[i] = 0; + } + return bits; + } + for ( i = 0; i < L_frame; i++ ) + { + if ( bits >= sqTargetBits - kMaxEstimatorUndershoot ) + { + fac_m = fac_p = 0; + if ( bits >= min( NPRM_RESQ, sqTargetBits + kMaxEstimatorOvershoot ) ) + { + break; + } + } + + if ( x_Q[i] != 0 && lf_deemph_factors[i] > 0.5f ) + { + if ( x_orig[i] < (sqGain) *x_Q[i] ) + { + prm[bits++] = 0; + x_Q[i] -= ( x_Q[i] > 0 ) ? fac_m * lf_deemph_factors[i] : fac_p * lf_deemph_factors[i]; + } + else + { + prm[bits++] = 1; + x_Q[i] += ( x_Q[i] > 0 ) ? fac_p * lf_deemph_factors[i] : fac_m * lf_deemph_factors[i]; + } + } + } + + /*Quantize zeroed-line of the spectrum*/ + for ( i = 0; ( i < L_frame ) && ( bits < ( sqTargetBits - 2 ) ); i++ ) + { + /* For (bits >= (sqTargetBits-2)) */ + if ( x_Q[i] == 0 && lf_deemph_factors[i] > 0.5f ) + { + refine_0( x_orig[i], &x_Q[i], sqGain, prm, &bits, sq_round, lf_deemph_factors[i] ); + } + } + + /*Be sure that every possible bits are initialized*/ + for ( i = bits; i < NPRM_RESQ; i++ ) + { + prm[i] = 0; + } + + return bits; +} + + +/*---------------------------------------------------------------------* + * ProcessIGF() + * + * + *---------------------------------------------------------------------*/ + +void ProcessIGF( + Encoder_State *st, /* i : Encoder state */ + float *pMDCTSpectrum, /* i : MDCT spectrum */ + const float *pITFMDCTSpectrum, /* i : MDCT spectrum fir ITF */ + float *pPowerSpectrum, /* i : MDCT^2 + MDST^2 spectrum, or estimate */ + const int16_t isTCX20, /* i : flag indicating if the input is TCX20 or TCX10/2xTCX5 */ + const int16_t frameno, /* i : flag indicating index of current subframe */ + const int16_t sp_aud_decision0, /* i : first stage switching decision */ + const int16_t vad_hover_flag /* i : VAD hangover flag */ +) +{ + int16_t igfGridIdx, isIndepFlag, bsBits, pBsStart, curr_order; + float predictionGain; + float A[ITF_MAX_FILTER_ORDER + 1]; + + IGF_ENC_INSTANCE_HANDLE hIGFEnc = st->hIGFEnc; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + isIndepFlag = 1; + if ( st->last_core == ACELP_CORE && isTCX20 ) + { + igfGridIdx = IGF_GRID_LB_TRAN; + } + else if ( isTCX20 ) + { + igfGridIdx = IGF_GRID_LB_NORM; + } + else + { + /* It is short block */ + igfGridIdx = IGF_GRID_LB_SHORT; + if ( frameno == 1 ) + { + isIndepFlag = 0; + } + } + + IGFSaveSpectrumForITF( hIGFEnc, igfGridIdx, pITFMDCTSpectrum ); + + IGFEncApplyMono( st, igfGridIdx, pMDCTSpectrum, pPowerSpectrum, isTCX20, st->hTcxEnc->fUseTns[frameno], sp_aud_decision0, vad_hover_flag ); + + curr_order = 0; + predictionGain = 0; + + ITF_Detect( hIGFEnc->spec_be_igf, hIGFEnc->infoStartLine, hIGFEnc->infoStopLine, 8 /*maxOrder*/, A, &predictionGain, &curr_order ); + + hIGFEnc->flatteningTrigger = hIGFEnc->tns_predictionGain < 1.15 && predictionGain < 1.15; + + hIGFEnc->infoTotalBitsPerFrameWritten = 0; + + if ( isTCX20 ) + { + IGFEncWriteBitstream( hIGFEnc, NULL, &hIGFEnc->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); + } + else + { + pBsStart = hBstr->next_ind; + + IGFEncWriteBitstream( hIGFEnc, hBstr, &hIGFEnc->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); + + bsBits = hBstr->next_ind - pBsStart; + IGFEncConcatenateBitstream( hIGFEnc, bsBits, hBstr ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * ProcessStereoIGF() + * + * + *---------------------------------------------------------------------*/ + +void ProcessStereoIGF( + STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, + Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ + int16_t ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ + float *pITFMDCTSpectrum[CPE_CHANNELS][2], /* i : MDCT spectrum fir ITF */ + float pPowerSpectrum[CPE_CHANNELS][N_MAX], /* i : MDCT^2 + MDST^2 spectrum, or estimate */ + float *pPowerSpectrumMsInv[CPE_CHANNELS][2], /* i : inverse power spectrum */ + float *inv_spectrum[CPE_CHANNELS][2], /* i : inverse spectrum */ + const int16_t frameno, /* i : flag indicating index of current subfr. */ + const int16_t sp_aud_decision0, /* i : sp_aud_decision0 */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +) +{ + int16_t ch, igfGridIdx, isIndepFlag, bsBits, pBsStart, curr_order; + float predictionGain; + float A[ITF_MAX_FILTER_ORDER + 1]; + IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS]; + BSTR_ENC_HANDLE hBstr; + + hIGFEnc[0] = sts[0]->hIGFEnc; + hIGFEnc[1] = sts[1]->hIGFEnc; + + isIndepFlag = 1; + + if ( sts[0]->last_core == ACELP_CORE && sts[0]->core == TCX_20_CORE ) + { + igfGridIdx = IGF_GRID_LB_TRAN; + } + else if ( sts[0]->core == TCX_20_CORE ) + { + igfGridIdx = IGF_GRID_LB_NORM; + } + else + { + /* It is short block */ + igfGridIdx = IGF_GRID_LB_SHORT; + if ( frameno == 1 ) + { + isIndepFlag = 0; + } + } + + IGFSaveSpectrumForITF( hIGFEnc[0], igfGridIdx, pITFMDCTSpectrum[0][frameno] ); + + IGFSaveSpectrumForITF( hIGFEnc[1], igfGridIdx, pITFMDCTSpectrum[1][frameno] ); + + IGFEncApplyStereo( hStereoMdct, ms_mask, hIGFEnc, igfGridIdx, sts, pPowerSpectrum, pPowerSpectrumMsInv, inv_spectrum, frameno, sp_aud_decision0, element_brate, mct_on ); + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + curr_order = 0; + + ITF_Detect( hIGFEnc[ch]->spec_be_igf, hIGFEnc[ch]->infoStartLine, hIGFEnc[ch]->infoStopLine, 8 /*maxOrder*/, A, &predictionGain, &curr_order ); + + hIGFEnc[ch]->flatteningTrigger = hIGFEnc[ch]->tns_predictionGain < 1.15 && predictionGain < 1.15; + + hIGFEnc[ch]->infoTotalBitsPerFrameWritten = 0; + + if ( sts[ch]->core == TCX_20_CORE ) + { + IGFEncWriteBitstream( hIGFEnc[ch], NULL, &hIGFEnc[ch]->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); + } + else + { + hBstr = sts[ch]->hBstr; + pBsStart = hBstr->next_ind; + + IGFEncWriteBitstream( hIGFEnc[ch], hBstr, &hIGFEnc[ch]->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); + + bsBits = hBstr->next_ind - pBsStart; + IGFEncConcatenateBitstream( hIGFEnc[ch], bsBits, hBstr ); + } + } + + return; +} + +/*---------------------------------------------------------------------* + * attenuateNbSpectrum() + * + * + *---------------------------------------------------------------------*/ + +void attenuateNbSpectrum( + const int16_t L_frame, + float *spectrum ) +{ + int16_t i, length; + float att; + + length = L_frame / 20; + att = ( length == 8 ) ? 0.6f : 0.66f; + + for ( i = 0; i < length; i++ ) + { + spectrum[L_frame - length + i] *= att; + att *= att; + } + + return; +} diff --git a/lib_enc/tfa_enc.c b/lib_enc/tfa_enc.c new file mode 100644 index 0000000000..dca8b62623 --- /dev/null +++ b/lib_enc/tfa_enc.c @@ -0,0 +1,120 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * tfaCalcEnv() + * + * + *-------------------------------------------------------------------*/ + +void tfaCalcEnv( + const float *shb_speech, + float *enr ) +{ + int16_t i, j, k; + for ( i = 0, k = 0; i < N_TEC_TFA_SUBFR; i++ ) + { + enr[i] = 1e-12f; + for ( j = 0; j < L_TEC_TFA_SUBFR16k; j++ ) /* XX/2 since Fs = 16kHz */ + { + enr[i] += shb_speech[k] * shb_speech[k]; + k++; + } + } + + return; +} + +/*-------------------------------------------------------------------* + * tfaEnc_TBE() + * + * + *-------------------------------------------------------------------*/ + +int16_t tfaEnc_TBE( + const float *enr, + const int16_t last_core, + const float *voicing, + const float *pitch_buf ) +{ + int16_t i; + float m_g, m_a; /* m_g: geometrical mean, m_a: arithmetical mean */ + float flatness = 0; + float voicing_sum; + int16_t tfa_flag; + + float pitch_buf_sum; + const float m_a_bottom = 10000.0 / N_TEC_TFA_SUBFR; + + tfa_flag = 0; + + m_a = 1e-12f; + m_g = 0.0; + for ( i = 0; i < N_TEC_TFA_SUBFR; i++ ) + { + m_a += enr[i]; + m_g = (float) ( m_g + log10( enr[i] ) ); + } + m_a /= N_TEC_TFA_SUBFR; + m_g /= N_TEC_TFA_SUBFR; + m_g = (float) pow( 10.0, m_g ); + + flatness = m_g / m_a; + + voicing_sum = voicing[0] + voicing[1]; + + pitch_buf_sum = pitch_buf[0] + pitch_buf[1] + pitch_buf[2] + pitch_buf[3]; + + if ( ( flatness > 0.70 && pitch_buf_sum > 4.0 * 110 && voicing_sum > 2.0 * 0.70 ) || + ( last_core == TCX_20_CORE && flatness > 0.50 && voicing_sum < 2.0 * 0.70 ) ) + { + tfa_flag = 1; + } + + /* energy lower limit */ + if ( m_a < m_a_bottom ) + { + tfa_flag = 0; + } + + return tfa_flag; +} diff --git a/lib_enc/tns_base_enc.c b/lib_enc/tns_base_enc.c new file mode 100644 index 0000000000..f008ed728f --- /dev/null +++ b/lib_enc/tns_base_enc.c @@ -0,0 +1,485 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "wmops.h" +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "stat_com.h" + +/*---------------------------------------------------------------------------- + * Local constants + *---------------------------------------------------------------------------*/ + +#define HLM_MIN_NRG ( PCM16_TO_FLT_FAC * 2 * NORM_MDCT_FACTOR / ( 640 * 640 ) ) + +#define MAX_SUBDIVISIONS 3 + + +/*---------------------------------------------------------------------------- + * Local prototypes + *---------------------------------------------------------------------------*/ + +static void GetFilterParameters( const float rxx[], const int16_t maxOrder, STnsFilter *pTnsFilter ); + +static void Parcor2Index( const float parCoeff[], int16_t index[], const int16_t order ); + +static void TnsDecision( STnsConfig const *pTnsConfig, TRAN_DET_HANDLE hTranDet, const int16_t isTCX10, const float ltp_gain, STnsData *pTnsData ); + + +/*---------------------------------------------------------------------* + * DetectTnsFilt() + * + * + *---------------------------------------------------------------------*/ + +int16_t DetectTnsFilt( + const STnsConfig *pTnsConfig, /* i : TNS Configuration struct */ + const float pSpectrum[], /* i : MDCT spectrum */ + TRAN_DET_HANDLE hTranDet, /* i : transient detection handle */ + const int16_t isTCX10, /* i : TCX10 or TCX20? */ + const float ltp_gain, /* i : LTP gain */ + STnsData *pTnsData, /* o : TNS data struct */ + float *predictionGain /* o : TNS prediction gain */ +) +{ + ResetTnsData( pTnsData ); + + if ( pTnsConfig->maxOrder <= 0 ) + { + return 0; + } + + CalculateTnsFilt( pTnsConfig, pSpectrum, pTnsData, predictionGain ); + + TnsDecision( pTnsConfig, hTranDet, isTCX10, ltp_gain, pTnsData ); + + return ( pTnsData->nFilters > 0 ) ? 1 : 0; +} + + +/*---------------------------------------------------------------------* + * EncodeTnsData() + * + * + *---------------------------------------------------------------------*/ + +void EncodeTnsData( + STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ + STnsData const *pTnsData, /* i : TNS data struct (quantized param) */ + int16_t *stream, /* o : internal data stream */ + int16_t *pnSize, /* o : number of written parameters */ + int16_t *pnBits /* o : number of written bits */ +) +{ + *pnSize = 0; + *pnBits = 0; + + if ( pTnsConfig->nMaxFilters > 1 ) + { + if ( pTnsConfig->allowTnsOnWhite ) + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + GetParameters( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, pTnsData, &stream, pnSize, pnBits ); + } + else + { + GetParameters( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, pTnsData, &stream, pnSize, pnBits ); + } + } + else + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + GetParameters( &tnsEnabledSWBTCX10BitMap, 1, pTnsData, &stream, pnSize, pnBits ); + } + else + { + GetParameters( &tnsEnabledSWBTCX20BitMap, 1, pTnsData, &stream, pnSize, pnBits ); + } + } + } + else + { + GetParameters( &tnsEnabledWBTCX20BitMap, 1, pTnsData, &stream, pnSize, pnBits ); + } + + return; +} + + +/*---------------------------------------------------------------------* + * WriteTnsData() + * + * + *---------------------------------------------------------------------*/ + +void WriteTnsData( + const STnsConfig *pTnsConfig, /* i : TNS Configuration struct */ + const int16_t *stream, /* i : internal data stream */ + int16_t *pnSize, /* o : number of written parameters */ + BSTR_ENC_HANDLE hBstr, /* o : bitstream */ + int16_t *pnBits /* o : number of written bits */ +) +{ + if ( pTnsConfig->nMaxFilters > 1 ) + { + if ( pTnsConfig->allowTnsOnWhite ) + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + WriteToBitstream( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, &stream, pnSize, hBstr, pnBits ); + } + else + { + WriteToBitstream( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, &stream, pnSize, hBstr, pnBits ); + } + } + else + { + if ( pTnsConfig->iFilterBorders[0] < 512 ) + { + WriteToBitstream( &tnsEnabledSWBTCX10BitMap, 1, &stream, pnSize, hBstr, pnBits ); + } + else + { + WriteToBitstream( &tnsEnabledSWBTCX20BitMap, 1, &stream, pnSize, hBstr, pnBits ); + } + } + } + else + { + WriteToBitstream( &tnsEnabledWBTCX20BitMap, 1, &stream, pnSize, hBstr, pnBits ); + } + + return; +} + + +/*********************************************************************************************/ +/* Definitions of functions used in the mapping between TNS parameters and a bitstream. */ +/*********************************************************************************************/ + +/*---------------------------------------------------------------------* + * AutoToParcor() + * + * Autocorrelation to parcor coefficients + *---------------------------------------------------------------------*/ + +static float AutoToParcor( + const float input[], /* i : autocorrelation */ + float parCoeff[], /* o : parcor coeffs */ + const int16_t order /* i : prediction order */ +) +{ + int16_t i, j; + float tmp, tmp2; + float workBuffer[2 * TNS_MAX_FILTER_ORDER]; + float *const pWorkBuffer = &workBuffer[order]; /* temp pointer */ + + for ( i = 0; i < order; i++ ) + { + workBuffer[i] = input[i]; + pWorkBuffer[i] = input[i + 1]; + } + + for ( i = 0; i < order; i++ ) + { + if ( workBuffer[0] < 1.0f / 65536.0f ) + { + tmp = 0; + } + else + { + tmp = -pWorkBuffer[i] / workBuffer[0]; + } + + /* compensate for calculation inaccuracies limit reflection coefs to ]-1,1[ */ + tmp = min( 0.999f, max( -0.999f, tmp ) ); + + parCoeff[i] = tmp; + for ( j = i; j < order; j++ ) + { + tmp2 = pWorkBuffer[j] + tmp * workBuffer[j - i]; + workBuffer[j - i] += tmp * pWorkBuffer[j]; + pWorkBuffer[j] = tmp2; + } + } + + return ( ( input[0] + 1e-30f ) / ( workBuffer[0] + 1e-30f ) ); +} + + +/*---------------------------------------------------------------------* + * GetFilterParameters() + * + * Get TNS filter parameters from autocorrelation + *---------------------------------------------------------------------*/ + +static void GetFilterParameters( + const float rxx[], /* i : auto correlation */ + const int16_t maxOrder, /* i : max. prediction order */ + STnsFilter *pTnsFilter /* i : TNS filter coeffs */ +) +{ + int16_t i; + float parCoeff[TNS_MAX_FILTER_ORDER]; + const float *values = tnsCoeff4; + int16_t *indexes = pTnsFilter->coefIndex; + + /* Variable initialization */ + /* compute TNS filter in lattice (ParCor) form with LeRoux-Gueguen algorithm */ + pTnsFilter->predictionGain = AutoToParcor( rxx, parCoeff, maxOrder ); + + /* non-linear quantization of TNS lattice coefficients with given resolution */ + Parcor2Index( parCoeff, indexes, maxOrder ); + + /* reduce filter order by truncating trailing zeros */ + i = maxOrder - 1; + while ( ( i >= 0 ) && ( indexes[i] == 0 ) ) + { + --i; + /* Loop condition */ + } + pTnsFilter->order = i + 1; + + /* compute avg(coef*coef) */ + pTnsFilter->avgSqrCoef = 0; + for ( i = pTnsFilter->order - 1; i >= 0; i-- ) + { + const float value = values[indexes[i] + INDEX_SHIFT]; + + /* Variable initialization */ + pTnsFilter->avgSqrCoef += value * value; + } + pTnsFilter->avgSqrCoef /= maxOrder; + + return; +} + + +/*---------------------------------------------------------------------* + * Parcor2Index() + * + * Quantization for reflection coefficients + *---------------------------------------------------------------------*/ + +static void Parcor2Index( + const float parCoeff[], /* i : parcor coefficients */ + int16_t index[], /* o : quantized parcor coeffs */ + const int16_t order /* i : order */ +) +{ + const int16_t nValues = 1 << TNS_COEF_RES; + const float *values = tnsCoeff4; + int16_t i; + int16_t iIndex; + float x; + + for ( i = 0; i < order; i++ ) + { + iIndex = 1; + x = parCoeff[i]; + /* Variable initialization */ + assert( ( x >= -1.0f ) && ( x <= 1.0f ) ); + while ( ( iIndex < nValues ) && ( x > 0.5f * ( values[iIndex - 1] + values[iIndex] ) ) ) + { + ++iIndex; + /* Loop condition */ + } + index[i] = ( iIndex - 1 ) - INDEX_SHIFT; + } + + return; +} + + +/*---------------------------------------------------------------------* + * CalculateTnsFilt() + * + * + *---------------------------------------------------------------------*/ + +void CalculateTnsFilt( + STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ + const float pSpectrum[], /* i : MDCT spectrum */ + STnsData *pTnsData, /* o : TNS data struct */ + float *predictionGain /* o : TNS prediction gain */ +) +{ + float norms[TNS_MAX_NUM_OF_FILTERS][MAX_SUBDIVISIONS]; + int16_t i, iFilter, idx0, idx1, nSubdivisions, iSubdivisions, spectrumLength; + int16_t iStartLine, iEndLine, lag; + float fac; + float rxx[TNS_MAX_FILTER_ORDER + 1]; + const float *pWindow; + STnsFilter *pFilter; + + for ( i = 0; i < TNS_MAX_NUM_OF_FILTERS; i++ ) + { + set_f( norms[i], 0, MAX_SUBDIVISIONS ); + } + + /* Calculate norms for each spectrum part */ + for ( iFilter = 0; iFilter < pTnsConfig->nMaxFilters; iFilter++ ) + { + idx0 = pTnsConfig->iFilterBorders[iFilter + 1]; + idx1 = pTnsConfig->iFilterBorders[iFilter]; + nSubdivisions = pTnsConfig->pTnsParameters[iFilter].nSubdivisions; + + /* Variable initialization */ + assert( pTnsConfig->pTnsParameters[iFilter].nSubdivisions <= MAX_SUBDIVISIONS ); + for ( iSubdivisions = 0; iSubdivisions < nSubdivisions; iSubdivisions++ ) + { + iStartLine = idx0 + ( idx1 - idx0 ) * iSubdivisions / nSubdivisions; + iEndLine = idx0 + ( idx1 - idx0 ) * ( iSubdivisions + 1 ) / nSubdivisions; + + /* Variable initialization */ + norms[iFilter][iSubdivisions] = sum2_f( pSpectrum + iStartLine, iEndLine - iStartLine ); + } + } + + /* Calculate normalized autocorrelation for spectrum subdivision and get TNS filter parameters based on it */ + for ( iFilter = 0; iFilter < pTnsConfig->nMaxFilters; iFilter++ ) + { + idx0 = pTnsConfig->iFilterBorders[iFilter + 1]; + idx1 = pTnsConfig->iFilterBorders[iFilter]; + spectrumLength = idx1 - idx0; + pFilter = pTnsData->filter + iFilter; + nSubdivisions = pTnsConfig->pTnsParameters[iFilter].nSubdivisions; + + set_f( rxx, 0, TNS_MAX_FILTER_ORDER + 1 ); /* WMOPS: This initialization is required */ + + /* Variable initialization */ + for ( iSubdivisions = 0; ( iSubdivisions < nSubdivisions ) && ( norms[iFilter][iSubdivisions] > HLM_MIN_NRG ); iSubdivisions++ ) + { + fac = 1.0f / norms[iFilter][iSubdivisions]; + iStartLine = idx0 + spectrumLength * iSubdivisions / nSubdivisions; + iEndLine = idx0 + spectrumLength * ( iSubdivisions + 1 ) / nSubdivisions; + pWindow = tnsAcfWindow; + + /* For additional loop condition */ + /* Variable initialization */ + for ( lag = 1; lag <= pTnsConfig->maxOrder; lag++ ) + { + rxx[lag] += fac * ( *pWindow ) * dotp( pSpectrum + iStartLine, pSpectrum + iStartLine + lag, iEndLine - iStartLine - lag ); + pWindow++; + } + } + + if ( iSubdivisions == nSubdivisions ) /* meaning there is no subdivision with low energy */ + { + rxx[0] = (float) pTnsConfig->pTnsParameters[iFilter].nSubdivisions; + pFilter->spectrumLength = spectrumLength; + /* Limit the maximum order to spectrum length/4 */ + GetFilterParameters( rxx, min( pTnsConfig->maxOrder, pFilter->spectrumLength / 4 ), pFilter ); + } + } + + if ( predictionGain ) + { + assert( pTnsConfig->nMaxFilters == 1 ); + *predictionGain = pTnsData->filter->predictionGain; + } + + return; +} + + +/*---------------------------------------------------------------------* + * TnsDecision() + * + * + *---------------------------------------------------------------------*/ + +static void TnsDecision( + STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ + TRAN_DET_HANDLE hTranDet, /* i : transient detection handle */ + const int16_t isTCX10, /* i : TCX10 or TCX20? */ + const float ltp_gain, /* i : LTP gain */ + STnsData *pTnsData /* i/o: TNDS data structure */ +) +{ + int16_t iFilter; + float maxEnergyChange; + STnsFilter *pFilter; + const struct TnsParameters *pTnsParameters; + + /* We check the filter's decisions in the opposite direction */ + for ( iFilter = pTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) + { + pFilter = pTnsData->filter + iFilter; + pTnsParameters = pTnsConfig->pTnsParameters + iFilter; + + /* TNS decision function */ + if ( ( pFilter->predictionGain > pTnsParameters->minPredictionGain ) || ( pFilter->avgSqrCoef > pTnsParameters->minAvgSqrCoef ) ) + { + if ( pTnsData->nFilters > 0 || isTCX10 || ltp_gain < 0.6f || hTranDet == NULL ) + { + ++pTnsData->nFilters; + } + else + { + maxEnergyChange = GetTCXMaxenergyChange( hTranDet, isTCX10, NSUBBLOCKS, 3 ); + if ( maxEnergyChange >= pTnsParameters->minEnergyChange ) + { + ++pTnsData->nFilters; + } + else + { + ClearTnsFilterCoefficients( pFilter ); + } + } + } + else if ( pTnsData->nFilters > 0 ) /* If a previous filter is turned on */ + { + /* Since TNS filter of order 0 is not allowed we haved to signal in the stream filter of order 1 with the 0th coefficient equal to 0 */ + ClearTnsFilterCoefficients( pFilter ); + pFilter->order = 1; + ++pTnsData->nFilters; + } + else + { + ClearTnsFilterCoefficients( pFilter ); + } + } + + return; +} diff --git a/lib_enc/transient_detection.c b/lib_enc/transient_detection.c new file mode 100644 index 0000000000..469c7c4d8d --- /dev/null +++ b/lib_enc/transient_detection.c @@ -0,0 +1,826 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "stat_enc.h" +#include "cnst.h" +#include "prot.h" +#include "ivas_prot.h" +#include +#include "wmops.h" + + +/*---------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------*/ + +#define MIN_BLOCK_ENERGY 107.37f + + +/*---------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------*/ + +static void InitDelayBuffer( const int16_t nFrameLength, const int16_t nDelay, DelayBuffer *pDelayBuffer ); +static void InitSubblockEnergies( const int16_t nFrameLength, const int16_t nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies ); +static void InitTransientDetector( SubblockEnergies *pSubblockEnergies, const int16_t nDelay, const int16_t nSubblocksToCheck, TCheckSubblocksForAttack pCheckSubblocksForAttack, const float attackRatioThreshold, TransientDetector *pTransientDetector ); +static void UpdateDelayBuffer( const float *inputconst, const int16_t nSamplesAvailable, DelayBuffer *pDelayBuffer ); +static void HighPassFilter( const float *input, const int16_t length, float *pFirState1, float *pFirState2, float *output ); +static void UpdateSubblockEnergies( const float *input, const int16_t nSamplesAvailable, SubblockEnergies *pSubblockEnergies ); +static void CalculateSubblockEnergies( const float *input, const int16_t nSamplesAvailable, SubblockEnergies *pSubblockEnergies ); +static void RunTransientDetector( TransientDetector *pTransientDetector ); +static void GetAttackForTCXDecision( const float *pSubblockNrg, const float *pAccSubblockNrg, const int16_t nSubblocks, const int16_t nPastSubblocks, const float attackRatioThreshold, int16_t *pbIsAttackPresent, int16_t *pAttackIndex ); + + +/*-------------------------------------------------------------------* + * InitTransientDetection() + * + * + *-------------------------------------------------------------------*/ + +void InitTransientDetection( + const int16_t nFrameLength, + const int16_t nTCXDelay, + TRAN_DET_HANDLE hTranDet, + const int16_t ext_mem_flag ) +{ + /* Init the delay buffer. */ + InitDelayBuffer( nFrameLength, nTCXDelay, &hTranDet->delayBuffer ); + + /* Init a subblock energies buffer used for the TCX Short/Long decision. */ + InitSubblockEnergies( nFrameLength, nTCXDelay, &hTranDet->delayBuffer, &hTranDet->subblockEnergies ); + + /* Init the TCX Short/Long transient detector. */ + InitTransientDetector( &hTranDet->subblockEnergies, nTCXDelay, NSUBBLOCKS, GetAttackForTCXDecision, 8.5f, &hTranDet->transientDetector ); + + /* We need two past subblocks for the TCX TD and NSUBBLOCKS+1 for the temporal flatness measure for the TCX LTP. */ + if ( ext_mem_flag ) + { + hTranDet->transientDetector.pSubblockEnergies->nDelay += ( NSUBBLOCKS_SHIFT + 1 ) + NSUBBLOCKS + 1; + } + else + { + hTranDet->transientDetector.pSubblockEnergies->nDelay += NSUBBLOCKS + 1; + } + + return; +} + + +/*-------------------------------------------------------------------* + * GetTCXAvgTemporalFlatnessMeasure() + * + * + *-------------------------------------------------------------------*/ + +float GetTCXAvgTemporalFlatnessMeasure( + TRAN_DET_HANDLE hTranDet, + const int16_t nCurrentSubblocks, + const int16_t nPrevSubblocks ) +{ + int16_t i; + TransientDetector *pTransientDetector = &hTranDet->transientDetector; + const SubblockEnergies *pSubblockEnergies = pTransientDetector->pSubblockEnergies; + const int16_t nDelay = pTransientDetector->nDelay; + const int16_t nRelativeDelay = pSubblockEnergies->nDelay - nDelay; + const float *pSubblockNrgChange = NULL; + float sumTempFlatness; + const int16_t nTotBlocks = nCurrentSubblocks + nPrevSubblocks; + + /* Initialization */ + assert( nTotBlocks > 0 ); + sumTempFlatness = 0.0f; + + assert( ( nPrevSubblocks <= nRelativeDelay ) && ( nCurrentSubblocks <= NSUBBLOCKS + nDelay ) ); + pSubblockNrgChange = &pSubblockEnergies->subblockNrgChange[nRelativeDelay - nPrevSubblocks]; + for ( i = 0; i < nTotBlocks; i++ ) + { + sumTempFlatness += pSubblockNrgChange[i]; + } + + return sumTempFlatness / (float) nTotBlocks; +} + + +/*-------------------------------------------------------------------* + * GetTCXMaxenergyChange() + * + * + *-------------------------------------------------------------------*/ + +float GetTCXMaxenergyChange( + TRAN_DET_HANDLE hTranDet, + const int16_t isTCX10, + const int16_t nCurrentSubblocks, + const int16_t nPrevSubblocks ) +{ + int16_t i; + const TransientDetector *pTransientDetector = &hTranDet->transientDetector; + const SubblockEnergies *pSubblockEnergies = pTransientDetector->pSubblockEnergies; + const int16_t nDelay = pTransientDetector->nDelay; + const int16_t nRelativeDelay = pSubblockEnergies->nDelay - nDelay; + const float *pSubblockNrgChange = NULL; + float maxEnergyChange; + int16_t nTotBlocks = nCurrentSubblocks + nPrevSubblocks; + /* Initialization */ + assert( nTotBlocks > 0 ); + maxEnergyChange = 0.0f; + + assert( ( nPrevSubblocks <= nRelativeDelay ) && ( nCurrentSubblocks <= NSUBBLOCKS + nDelay ) ); + pSubblockNrgChange = &pSubblockEnergies->subblockNrgChange[nRelativeDelay - nPrevSubblocks]; + if ( pTransientDetector->bIsAttackPresent || isTCX10 ) /* frame is TCX-10 */ + { + const float *pSubblockNrg = &pSubblockEnergies->subblockNrg[nRelativeDelay - nPrevSubblocks]; + float nrgMin, nrgMax = pSubblockNrg[0]; + int16_t idxMax = 0; + /* find subblock with maximum energy */ + for ( i = 1; i < nTotBlocks; i++ ) + { + if ( nrgMax < pSubblockNrg[i] ) + { + nrgMax = pSubblockNrg[i]; + idxMax = i; + } + } + nrgMin = nrgMax; + /* find minimum energy after maximum */ + for ( i = idxMax + 1; i < nTotBlocks; i++ ) + { + if ( nrgMin > pSubblockNrg[i] ) + { + nrgMin = pSubblockNrg[i]; + } + } + /* lower maxEnergyChange if energy doesn't decrease much after energy peak */ + if ( nrgMin > 0.375f * nrgMax ) + { + nTotBlocks = idxMax - 3; + } + } + for ( i = 0; i < nTotBlocks; i++ ) + { + maxEnergyChange = max( maxEnergyChange, pSubblockNrgChange[i] ); + } + + return maxEnergyChange; +} + + +/*---------------------------------------------------------------* + * RunTransientDetection() + * + * Time Domain Transient Detector for TCX + *---------------------------------------------------------------*/ + +void RunTransientDetection( + const float *input, /* i : input signal */ + const int16_t length, /* i : frame length */ + TRAN_DET_HANDLE hTranDet /* i/o: transient detection handle */ +) +{ + float filteredInput[L_FRAME_MAX]; + SubblockEnergies *pSubblockEnergies = &hTranDet->subblockEnergies; + TransientDetector *pTransientDetector = &hTranDet->transientDetector; + + assert( ( input != NULL ) && ( hTranDet != NULL ) && ( pSubblockEnergies != NULL ) && ( pTransientDetector != NULL ) ); + + /* Variable initializations */ + HighPassFilter( input, length, &pSubblockEnergies->firState1, &pSubblockEnergies->firState2, filteredInput ); + + /* Update subblock energies. */ + UpdateSubblockEnergies( filteredInput, length, pSubblockEnergies ); + + /* Run transient detectors. */ + RunTransientDetector( pTransientDetector ); + + /* Update the delay buffer. */ + UpdateDelayBuffer( filteredInput, length, &hTranDet->delayBuffer ); + + return; +} + +static uint16_t isLongTermTransient( const float frameTFM, float *lastTFM ) +{ + float currTFM; + + if ( frameTFM > *lastTFM ) + { + const float f = ( frameTFM - *lastTFM ) * ( frameTFM - *lastTFM ); + + currTFM = *lastTFM * ( 0.96875f - f ) + frameTFM * ( 0.03125f + f ); + } + else + { + currTFM = *lastTFM * 0.96875f + frameTFM * 0.03125f; + } + *lastTFM = max( 0.015625f, currTFM ); + + return ( currTFM < 0.5625f ? 1 : 0 ); +} + +/*-------------------------------------------------------------------* + * SetTCXModeInfo() + * + * + *-------------------------------------------------------------------*/ + +void SetTCXModeInfo( + Encoder_State *st, /* i/o: encoder state structure */ + TRAN_DET_HANDLE hTranDet, /* i/o: transient detection handle */ + int16_t *tcxModeOverlap /* o : window overlap of current frame */ +) +{ + TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; + + if ( st->codec_mode == MODE2 || ( st->element_mode > EVS_MONO && st->core != HQ_CORE ) ) + { + assert( hTranDet != NULL ); + + /* determine window sequence (1 long or 2 short windows) */ + if ( st->tcx10Enabled && st->tcx20Enabled ) + { + /* window switching based on transient detector output */ + if ( ( ( hTranDet->transientDetector.bIsAttackPresent ) || ( st->currEnergyHF > st->prevEnergyHF * 39.0f && st->element_mode != IVAS_CPE_MDCT ) ) && + ( ( st->last_core != ACELP_CORE ) && ( st->last_core != AMR_WB_CORE ) ) ) + { + hTcxEnc->tcxMode = TCX_10; + } + else + { + hTcxEnc->tcxMode = TCX_20; + } + } + else + { + /* window selection (non-adaptive) based on flags only */ + if ( st->tcx10Enabled ) + { + hTcxEnc->tcxMode = TCX_10; + } + else if ( st->tcx20Enabled ) + { + hTcxEnc->tcxMode = TCX_20; + } + else + { + hTcxEnc->tcxMode = NO_TCX; + } + } + + if ( st->mct_chan_mode == MCT_CHAN_MODE_LFE ) + { + hTcxEnc->tcxMode = TCX_20; + *tcxModeOverlap = FULL_OVERLAP; + st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; + } + + + if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE ) + { + /* set the left window overlap */ + if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) + { + st->hTcxCfg->tcx_last_overlap_mode = TRANSITION_OVERLAP; + } + else if ( ( hTcxEnc->tcxMode == TCX_10 ) && ( st->hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ) ) + { + st->hTcxCfg->tcx_last_overlap_mode = FULL_OVERLAP; + } + else + { + st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; + } + + /* determine the right window overlap */ + if ( hTcxEnc->tcxMode == TCX_10 ) + { + if ( hTranDet->transientDetector.attackIndex < 0 ) + { + *tcxModeOverlap = HALF_OVERLAP; + } + else + { + *tcxModeOverlap = hTranDet->transientDetector.attackIndex % 4; + if ( *tcxModeOverlap == 1 ) + { + *tcxModeOverlap = FULL_OVERLAP; + } + } + if ( isLongTermTransient( 1.0f / GetTCXAvgTemporalFlatnessMeasure( hTranDet, NSUBBLOCKS, 0 ), &hTcxEnc->tfm_mem ) && st->element_mode == IVAS_CPE_MDCT ) + { + if ( ( *tcxModeOverlap != MIN_OVERLAP ) && ( hTcxEnc->tcxltp_norm_corr_past < 0.5625f ) ) + { + *tcxModeOverlap = HALF_OVERLAP; + } + } + } + else if ( hTcxEnc->tcxMode == TCX_20 ) + { + if ( hTranDet->transientDetector.attackIndex == 7 ) + { + *tcxModeOverlap = HALF_OVERLAP; + } + else if ( hTranDet->transientDetector.attackIndex == 6 ) + { + *tcxModeOverlap = MIN_OVERLAP; + } + else + { + *tcxModeOverlap = ALDO_WINDOW; + } + if ( isLongTermTransient( 1.0f / GetTCXAvgTemporalFlatnessMeasure( hTranDet, NSUBBLOCKS, 0 ), &hTcxEnc->tfm_mem ) && st->element_mode == IVAS_CPE_MDCT ) + { + if ( ( *tcxModeOverlap != MIN_OVERLAP ) && ( hTcxEnc->tcxltp_norm_corr_past < 0.5625f ) ) + { + *tcxModeOverlap = HALF_OVERLAP; + } + } + } + else + { + /* NO_TCX */ + *tcxModeOverlap = TRANSITION_OVERLAP; + if ( st->element_mode == IVAS_CPE_MDCT ) + { + hTcxEnc->tfm_mem = 0.75f; + } + } + } + + /* for the ACELP -> TCX transition frames use full right window overlap */ + if ( ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) && ( *tcxModeOverlap == ALDO_WINDOW ) ) + { + *tcxModeOverlap = FULL_OVERLAP; + } + } + + return; +} + + +/*---------------------------------------------------------------* + * Local functions + *---------------------------------------------------------------*/ + +/** TCX decision. + * Check if there is an attack in a subblock. Version for TCX Long/Short decision. + * See TCheckSubblocksForAttack for definition of parameters. + * It is assumed that the delay of MDCT overlap was not taken into account, so that the last subblock corresponds to the newest input subblock. + */ +static void GetAttackForTCXDecision( + const float *pSubblockNrg, + const float *pAccSubblockNrg, + const int16_t nSubblocks, + const int16_t nPastSubblocks, + const float attackRatioThreshold, + int16_t *pbIsAttackPresent, + int16_t *pAttackIndex ) +{ + int16_t i; + int16_t bIsAttackPresent, attackIndex; + + assert( nSubblocks >= NSUBBLOCKS ); + assert( nPastSubblocks >= 2 ); + + bIsAttackPresent = FALSE; + attackIndex = -1; + /* Search for the last attack in the subblocks */ + if ( ( pSubblockNrg[-1] > pAccSubblockNrg[-1] * attackRatioThreshold ) || ( pSubblockNrg[-2] > pAccSubblockNrg[-2] * attackRatioThreshold ) ) + { + bIsAttackPresent = TRUE; + attackIndex = 0; + } + for ( i = 0; i < NSUBBLOCKS; i++ ) + { + if ( pSubblockNrg[i] > pAccSubblockNrg[i] * attackRatioThreshold ) + { + if ( i < 6 ) + { + bIsAttackPresent = TRUE; + } + if ( ( attackIndex != 2 ) && ( attackIndex != 6 ) ) + { + attackIndex = i; + if ( ( pSubblockNrg[i] < pAccSubblockNrg[i] * 1.125f * attackRatioThreshold ) && ( i == 2 || i == 6 ) ) + { + attackIndex++; /* avoid minimum overlap to prevent clicks */ + } + } + } + else /* no attack, but set index anyway in case of strong energy increase */ + { + if ( ( pSubblockNrg[i] > pSubblockNrg[i - 1] * 1.5f * attackRatioThreshold ) && + ( pSubblockNrg[i] > pSubblockNrg[i - 2] * 1.5f * attackRatioThreshold ) ) + { + if ( ( attackIndex != 2 ) && ( attackIndex != 6 ) ) + { + attackIndex = i; + + if ( ( ( pSubblockNrg[i] < pSubblockNrg[i - 1] * 2.0f * attackRatioThreshold ) || + ( pSubblockNrg[i] < pSubblockNrg[i - 2] * 2.0f * attackRatioThreshold ) ) && + ( i == 2 || i == 6 ) ) + { + attackIndex++; /* avoid minimum overlap to prevent clicks */ + } + } + } + } + } + + /* avoid post-echos on click sounds (very short transients) due to TNS aliasing */ + if ( attackIndex == 4 ) + { + attackIndex = 7; + } + else if ( attackIndex == 5 ) + { + attackIndex = 6; + } + *pAttackIndex = attackIndex; + *pbIsAttackPresent = bIsAttackPresent; + + return; +} + + +static void InitDelayBuffer( + const int16_t nFrameLength, + const int16_t nDelay, + DelayBuffer *pDelayBuffer ) +{ + const int16_t nMaxBuffSize = L_FRAME_MAX / NSUBBLOCKS; + + assert( ( nFrameLength > NSUBBLOCKS ) && ( nFrameLength % NSUBBLOCKS == 0 ) && ( nDelay >= 0 ) && ( pDelayBuffer != NULL ) ); + pDelayBuffer->nSubblockSize = nFrameLength / NSUBBLOCKS; + assert( pDelayBuffer->nSubblockSize <= nMaxBuffSize ); + set_f( pDelayBuffer->buffer, 0.0f, nMaxBuffSize ); + pDelayBuffer->nDelay = nDelay % pDelayBuffer->nSubblockSize; + assert( pDelayBuffer->nDelay <= nMaxBuffSize ); + + return; +} + + +static void InitSubblockEnergies( + const int16_t nFrameLength, + const int16_t nDelay, + DelayBuffer *pDelayBuffer, + SubblockEnergies *pSubblockEnergies ) +{ + const int16_t nMaxBuffSize = NSUBBLOCKS + MAX_TD_DELAY; + + assert( ( pDelayBuffer != NULL ) && ( pSubblockEnergies != NULL ) && ( pDelayBuffer->nSubblockSize * NSUBBLOCKS == nFrameLength ) && ( pDelayBuffer->nSubblockSize > 0 ) ); + + set_f( pSubblockEnergies->subblockNrg, MIN_BLOCK_ENERGY, nMaxBuffSize ); + set_f( pSubblockEnergies->accSubblockNrg, MIN_BLOCK_ENERGY, nMaxBuffSize + 1 ); + set_f( pSubblockEnergies->subblockNrgChange, 1.0f, nMaxBuffSize ); + pSubblockEnergies->nDelay = nDelay / pDelayBuffer->nSubblockSize; + assert( pSubblockEnergies->nDelay < nMaxBuffSize ); + pSubblockEnergies->nPartialDelay = nDelay % pDelayBuffer->nSubblockSize; + pSubblockEnergies->facAccSubblockNrg = 0.8125f; /* Energy accumulation factor */ + pSubblockEnergies->firState1 = 0.0f; + pSubblockEnergies->firState2 = 0.0f; + + pSubblockEnergies->pDelayBuffer = pDelayBuffer; + pDelayBuffer->nDelay = max( pDelayBuffer->nDelay, pSubblockEnergies->nPartialDelay ); + + return; +} + + +/** Init transient detector. + * Fills TransientDetector structure with sensible content and enable it. + * @param pSubblockEnergies Subblock energies used in this transient detector. + * @param nDelay Delay for this transient detector. + * @param nSubblocksToCheck Number of subblocks to check in this transient detector. + * @param pCheckSubblockForAttack Attack detection function for this transient detector. + * @param pSetAttackPosition Function for finalizing this transient detector. + * @param attackRatioThreshold Attack ratio threshold. + * @param pTransientDetector Structure to be initialized. + */ +static void InitTransientDetector( + SubblockEnergies *pSubblockEnergies, + const int16_t nDelay, + const int16_t nSubblocksToCheck, + TCheckSubblocksForAttack pCheckSubblocksForAttack, + const float attackRatioThreshold, + TransientDetector *pTransientDetector ) +{ + const int16_t nMaxBuffSize = NSUBBLOCKS + MAX_TD_DELAY; + + assert( ( pSubblockEnergies != NULL ) && ( pSubblockEnergies->pDelayBuffer != NULL ) && ( pTransientDetector != NULL ) && ( pSubblockEnergies->pDelayBuffer->nSubblockSize != 0 ) ); + pTransientDetector->pSubblockEnergies = pSubblockEnergies; + pTransientDetector->nDelay = ( nDelay - pSubblockEnergies->nPartialDelay ) / pSubblockEnergies->pDelayBuffer->nSubblockSize; + assert( nDelay == pTransientDetector->nDelay * pSubblockEnergies->pDelayBuffer->nSubblockSize + pSubblockEnergies->nPartialDelay ); + assert( pTransientDetector->nDelay < nMaxBuffSize ); + pSubblockEnergies->nDelay = max( pSubblockEnergies->nDelay, pTransientDetector->nDelay ); + assert( nSubblocksToCheck <= NSUBBLOCKS + pTransientDetector->nDelay ); + pTransientDetector->nSubblocksToCheck = nSubblocksToCheck; + pTransientDetector->CheckSubblocksForAttack = pCheckSubblocksForAttack; + pTransientDetector->attackRatioThreshold = attackRatioThreshold; + pTransientDetector->bIsAttackPresent = FALSE; + pTransientDetector->attackIndex = -1; + + return; +} + + +/* This function should be inlined and WMOPS instrumentation takes that into account, meaning that all references are considered as local variables */ +static float InlineFilter( + float inValue, + float firState1, + float firState2 ) +{ + return 0.375f * inValue - 0.5f * firState1 + 0.125f * firState2; +} + + +static void HighPassFilter( + const float *input, + const int16_t length, + float *pFirState1, + float *pFirState2, + float *output ) +{ + int16_t i; + + output[0] = InlineFilter( input[0], *pFirState1, *pFirState2 ); + output[1] = InlineFilter( input[1], input[0], *pFirState1 ); + for ( i = 2; i < length; i++ ) + { + output[i] = InlineFilter( input[i], input[i - 1], input[i - 2] ); + } + + /* update filter states: shift time samples through delay line */ + *pFirState2 = input[length - 2]; + *pFirState1 = input[length - 1]; + + return; +} + + +static void RunTransientDetector( + TransientDetector *pTransientDetector ) +{ + const float attackRatioThreshold = pTransientDetector->attackRatioThreshold; + const SubblockEnergies *pSubblockEnergies = pTransientDetector->pSubblockEnergies; + const int16_t nDelay = pTransientDetector->nDelay; + const int16_t nRelativeDelay = pSubblockEnergies->nDelay - nDelay; + const float *pSubblockNrg = &pSubblockEnergies->subblockNrg[nRelativeDelay]; + const float *pAccSubblockNrg = &pSubblockEnergies->accSubblockNrg[nRelativeDelay]; + + assert( ( pTransientDetector->CheckSubblocksForAttack != NULL ) ); + + /* Variable initialization */ +#define WMC_TOOL_MAN + pTransientDetector->CheckSubblocksForAttack( pSubblockNrg, pAccSubblockNrg, NSUBBLOCKS + nDelay, nRelativeDelay, attackRatioThreshold, &pTransientDetector->bIsAttackPresent, &pTransientDetector->attackIndex ); +#undef WMC_TOOL_MAN + + return; +} + + +static void UpdateDelayBuffer( + const float *input, + const int16_t nSamplesAvailable, + DelayBuffer *pDelayBuffer ) +{ + int16_t i; + int16_t nDelay = pDelayBuffer->nDelay; + + assert( ( nDelay >= 0 ) && ( nDelay <= (int16_t) sizeof( pDelayBuffer->buffer ) / (int16_t) sizeof( pDelayBuffer->buffer[0] ) ) ); + assert( nSamplesAvailable <= NSUBBLOCKS * pDelayBuffer->nSubblockSize ); + + /* If this is not the last frame */ + if ( nSamplesAvailable == NSUBBLOCKS * pDelayBuffer->nSubblockSize ) + { + /* Store the newest samples into the delay buffer */ + for ( i = 0; i < nDelay; i++ ) + { + pDelayBuffer->buffer[i] = input[i + nSamplesAvailable - nDelay]; + } + } + + return; +} + + +static void UpdateSubblockEnergies( + const float *input, + const int16_t nSamplesAvailable, + SubblockEnergies *pSubblockEnergies ) +{ + int16_t i; + + assert( ( pSubblockEnergies->nDelay >= 0 ) && ( pSubblockEnergies->nDelay + NSUBBLOCKS <= (int16_t) sizeof( pSubblockEnergies->subblockNrg ) / (int16_t) sizeof( pSubblockEnergies->subblockNrg[0] ) ) ); + assert( pSubblockEnergies->nPartialDelay <= pSubblockEnergies->pDelayBuffer->nDelay ); + /* At least one block delay is required when subblock energy change is required */ + assert( pSubblockEnergies->nDelay >= 1 ); + + /* Shift old subblock energies */ + for ( i = 0; i < pSubblockEnergies->nDelay; i++ ) + { + pSubblockEnergies->subblockNrg[i] = pSubblockEnergies->subblockNrg[i + NSUBBLOCKS]; + pSubblockEnergies->accSubblockNrg[i] = pSubblockEnergies->accSubblockNrg[i + NSUBBLOCKS]; + pSubblockEnergies->subblockNrgChange[i] = pSubblockEnergies->subblockNrgChange[i + NSUBBLOCKS]; + } + + /* Compute filtered subblock energies for the new samples */ + CalculateSubblockEnergies( input, nSamplesAvailable, pSubblockEnergies ); + + return; +} + + +/* This function should be inlined and WMOPS instrumentation takes that into account, meaning that all references are considered as local variables */ +static void UpdatedAndStoreAccWindowNrg( + float newWindowNrgF, + float *pAccSubblockNrg, + float facAccSubblockNrg, + float *pOutAccWindowNrgF ) +{ + /* Store the accumulated energy */ + *pOutAccWindowNrgF = *pAccSubblockNrg; + + /* Update the accumulated energy: maximum of the current and the accumulated energy */ + *pAccSubblockNrg *= facAccSubblockNrg; + if ( newWindowNrgF > *pAccSubblockNrg ) + { + *pAccSubblockNrg = newWindowNrgF; + } + + return; +} + + +static void CalculateSubblockEnergies( + const float *input, + const int16_t nSamplesAvailable, + SubblockEnergies *pSubblockEnergies ) +{ + DelayBuffer *pDelayBuffer = pSubblockEnergies->pDelayBuffer; /* */ + const int16_t nSubblockSize = pDelayBuffer->nSubblockSize; /* */ + const int16_t nDelay = pSubblockEnergies->nDelay; /* */ + const int16_t nPartialDelay = pSubblockEnergies->nPartialDelay; /* */ + const float *delayBuffer = &pDelayBuffer->buffer[pDelayBuffer->nDelay - nPartialDelay]; /* */ + const float facAccSubblockNrg = pSubblockEnergies->facAccSubblockNrg; /* */ + float *pSubblockNrg = &pSubblockEnergies->subblockNrg[nDelay]; /* */ + float *pAccSubblockNrg = &pSubblockEnergies->accSubblockNrg[nDelay]; /* */ + float *pSubblockNrgChange = &pSubblockEnergies->subblockNrgChange[nDelay]; /* */ + float *pAccSubblockTmp; + int16_t nWindows; + int16_t i, w, k; + /* Variable initializations */ + nWindows = ( nSamplesAvailable + nPartialDelay ) / nSubblockSize; + pAccSubblockTmp = &pAccSubblockNrg[nWindows]; + + set_f( pSubblockNrg, MIN_BLOCK_ENERGY, NSUBBLOCKS ); + + if ( nWindows > 0 ) + { + /* Process left over samples from the previous frame. */ + for ( k = 0; k < nPartialDelay; k++ ) + { + pSubblockNrg[0] += delayBuffer[k] * delayBuffer[k]; + } + k = 0; + + /* Process new samples in the 0. subblock. */ + for ( i = nPartialDelay; i < nSubblockSize; i++, k++ ) + { + pSubblockNrg[0] += input[k] * input[k]; + } + + /* Set accumulated subblock energy at this point. */ + UpdatedAndStoreAccWindowNrg( pSubblockNrg[0], pAccSubblockTmp, facAccSubblockNrg, &pAccSubblockNrg[0] ); + + for ( w = 1; w < nWindows; w++ ) + { + /* Process new samples in the w. subblock. */ + for ( i = 0; i < nSubblockSize; i++, k++ ) + { + pSubblockNrg[w] += input[k] * input[k]; + } + /* Set accumulated subblock energy at this point. */ + UpdatedAndStoreAccWindowNrg( pSubblockNrg[w], pAccSubblockTmp, facAccSubblockNrg, &pAccSubblockNrg[w] ); + } + + /* Calculate energy change for each block. */ + for ( w = 0; w < nWindows; w++ ) + { + if ( pSubblockNrg[w] > pSubblockNrg[w - 1] ) + { + pSubblockNrgChange[w] = pSubblockNrg[w] / pSubblockNrg[w - 1]; + } + else + { + pSubblockNrgChange[w] = pSubblockNrg[w - 1] / pSubblockNrg[w]; + } + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * set_transient_stereo() + * + * + *-------------------------------------------------------------------*/ + +void set_transient_stereo( + CPE_ENC_HANDLE hCPE, /* i : CPE structure */ + float currFlatness[] /* i/o: current flatness */ +) +{ + int16_t n, attackIsPresent; + float currFlatnessMax; + Encoder_State **sts; + + sts = hCPE->hCoreCoder; + + /* for DFT/TD based stereo ,map avg. flatness to individual stereo channels (M/S or X/Y) */ + maximum( currFlatness, CPE_CHANNELS, &currFlatnessMax ); + attackIsPresent = 0; + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + attackIsPresent = max( attackIsPresent, sts[n]->hTranDet->transientDetector.bIsAttackPresent ); + } + + set_f( currFlatness, currFlatnessMax, CPE_CHANNELS ); + + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + sts[n]->hTranDet->transientDetector.bIsAttackPresent = attackIsPresent; + } + + if ( hCPE->hStereoDft != NULL ) + { + if ( hCPE->hStereoDft->attackPresent ) + { + hCPE->hStereoDft->wasTransient = 1; + } + else if ( hCPE->hStereoDft->wasTransient ) + { + hCPE->hStereoDft->wasTransient = 0; + } + + hCPE->hStereoDft->attackPresent = attackIsPresent; + + hCPE->hStereoDft->hItd->currFlatness = 0; + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + hCPE->hStereoDft->hItd->currFlatness = max( hCPE->hStereoDft->hItd->currFlatness, currFlatness[n] ); + } + } + + if ( hCPE->hStereoMdct != NULL ) + { + hCPE->hStereoMdct->hItd->currFlatness = 0; + for ( n = 0; n < CPE_CHANNELS; n++ ) + { + hCPE->hStereoMdct->hItd->currFlatness = max( hCPE->hStereoMdct->hItd->currFlatness, currFlatness[n] ); + } + } + + return; +} diff --git a/lib_enc/transition_enc.c b/lib_enc/transition_enc.c new file mode 100644 index 0000000000..9b3acee612 --- /dev/null +++ b/lib_enc/transition_enc.c @@ -0,0 +1,1064 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-----------------------------------------------------------------* + * Local function prototypes + *-----------------------------------------------------------------*/ + +static void gain_trans_enc( float *gain_trans, float exc[], int16_t *quant_index, int16_t *quant_sign ); + +static void tc_enc( Encoder_State *st, const int16_t i_subfr, int16_t *tc_subfr, int16_t *position, const float *h1, const float *xn, float *exc, float *y1, int16_t *T0_min, int16_t *T0_max, int16_t *T0, int16_t *T0_frac, float *gain_pit, float g_corr[], float *bwe_exc ); + + +/*-----------------------------------------------------------------* + * transition_enc() + * + * Principal function for adaptive excitation construction in TC + *-----------------------------------------------------------------*/ + +void transition_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t i_subfr, /* i : subframe index */ + int16_t *tc_subfr, /* i/o: TC subframe index */ + int16_t *Jopt_flag, /* i : joint optimization flag */ + int16_t *position, /* i/o: maximum of residual signal index */ + int16_t *T0, /* i/o: close loop integer pitch */ + int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ + int16_t *T0_min, /* i/o: lower limit for close-loop search */ + int16_t *T0_max, /* i/o: higher limit for close-loop search */ + float *exc, /* i/o: pointer to excitation signal frame */ + float *y1, /* o : zero-memory filtered adaptive excitation */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target vector */ + float *xn2, /* o : target vector for innovation search */ + float *gp_cl, /* i/o: memory of gain of pitch clipping algorithm */ + float *gain_pit, /* o : adaptive excitation gain */ + float *g_corr, /* o : ACELP correlation values */ + int16_t *clip_gain, /* i/o: adaptive gain clipping flag */ + float **pt_pitch, /* o : floating pitch values */ + float *bwe_exc, /* o : excitation for SWB TBE */ + int16_t *unbits_ACELP /* i/o: unused bits */ +) +{ + int16_t i, pit_flag, pit_start, pit_limit, index, nBits; + int16_t limit_flag, mult_Top; + int16_t lp_select, lp_flag; + BSTR_ENC_HANDLE hBstr = st->hBstr; + int16_t offset; + int16_t T_op[2]; + + /* set limit_flag to 0 for restrained limits, and 1 for extended limits */ + limit_flag = 0; + + pit_start = PIT_MIN; + + if ( st->L_frame == L_FRAME16k ) + { + T_op[0] = (int16_t) ( st->pitch[0] * 1.25f + 0.5f ); + T_op[1] = (int16_t) ( st->pitch[1] * 1.25f + 0.5f ); + } + else + { + T_op[0] = st->pitch[0]; + T_op[1] = st->pitch[1]; + } + + lp_flag = st->acelp_cfg.ltf_mode; + + if ( i_subfr == 0 ) + { + mult_Top = 1; + if ( limit_flag == 0 ) + { + if ( st->L_frame == L_FRAME && T_op[1] < PIT_MIN ) + { + mult_Top = 2; + } + + if ( st->L_frame == L_FRAME16k && T_op[1] < PIT16k_MIN ) + { + mult_Top = 2; + } + } + + limit_T0( st->L_frame, 8, 0, limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); + } + + /*-----------------------------------------------------------------* + * zero adaptive excitation signal construction + *-----------------------------------------------------------------*/ + + if ( *tc_subfr > i_subfr ) + { + *gain_pit = 0.0f; + *clip_gain = 0; + g_corr[0] = 1.0f; + g_corr[1] = 1.0f; + + set_f( &exc[i_subfr], 0, L_SUBFR ); /* set excitation for current subrame to 0 */ + + if ( st->L_frame == L_FRAME ) + { + set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); /* set past excitation buffer to 0 */ + } + else + { + set_f( &bwe_exc[i_subfr * 2], 0, (int16_t) ( L_SUBFR * 2 ) ); /* set past excitation buffer to 0 */ + } + + set_f( y1, 0, L_SUBFR ); /* set filtered adaptive excitation to 0 */ + mvr2r( xn, xn2, L_SUBFR ); /* target vector for codebook search */ + *T0 = L_SUBFR; + *T0_frac = 0; + + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ + } + + /*-----------------------------------------------------------------* + * glottal codebook contribution construction + *-----------------------------------------------------------------*/ + + else if ( *tc_subfr == i_subfr ) + { + if ( st->L_frame == L_FRAME ) + { + set_f( bwe_exc - PIT_MAX * HIBND_ACB_L_FAC, 0, PIT_MAX * HIBND_ACB_L_FAC ); /* set past excitation buffer to 0 */ + } + else + { + set_f( bwe_exc - PIT16k_MAX * 2, 0, PIT16k_MAX * 2 ); /* set past excitation buffer to 0 */ + } + + tc_enc( st, i_subfr, tc_subfr, position, h1, xn, exc, y1, T0_min, T0_max, T0, T0_frac, gain_pit, g_corr, bwe_exc ); + + if ( *tc_subfr == TC_0_0 ) + { + /* this is called only to compute unused bits */ + config_acelp1( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, L_FRAME, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, TRANSITION, TC_0_0, 3, NULL, unbits_ACELP, st->element_mode, &i /*dummy*/, 0 /*tdm_lp_reuse_flag*/, 0 /*tdm_low_rate_mode*/, st->idchan, 0 /*tdm_Pitch_reuse_flag*/, st->tdm_LRTD_flag, 0 /*GSC_IVAS_mode*/ + ); + } + + *clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, TRANSITION, xn, gp_cl ); + + updt_tar( xn, xn2, y1, *gain_pit, L_SUBFR ); + + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ + *Jopt_flag = 1; + } + + /*--------------------------------------------------------------* + * other subframes -> GENERIC encoding type, + * standard adaptive excitation contribution + * - exemption only in case when first glottal impulse is + * in the 1st subframe and the second one in 2nd subframe + * and later + *--------------------------------------------------------------*/ + + else if ( *tc_subfr < i_subfr ) + { + if ( st->L_frame == L_FRAME ) + { + *Jopt_flag = 1; + + /* pit_flag for T0 bits number coding determination */ + if ( ( ( i_subfr - *tc_subfr ) == L_SUBFR ) || ( ( i_subfr - *tc_subfr ) == L_SUBFR - TC_0_0 ) ) + { + pit_flag = 0; + } + else + { + pit_flag = L_SUBFR; + } + if ( *tc_subfr == TC_0_0 ) + { + if ( i_subfr == L_SUBFR ) + { + limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); + } + pit_flag = 1; + } + + /*----------------------------------------------------------* + * if tc_subfr==0, change tc_subfr corresponding to the + * second glot. impulse position + *----------------------------------------------------------*/ + + if ( ( *tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) ) + { + if ( PIT_MIN > ( *position ) ) + { + pit_start = L_SUBFR - ( *position ); + } + else + { + pit_start = PIT_MIN; + } + if ( pit_start < PIT_MIN ) + { + pit_start = PIT_MIN; + } + + pit_limit = 2 * pit_start + ( *position ); + + /* Find the closed loop pitch period */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, pit_start, pit_limit, L_FRAME, L_SUBFR ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + + if ( ( *T0 ) > ( 2 * L_SUBFR - ( *position ) ) ) + { + if ( ( *T0 ) + ( *position ) >= 3 * L_SUBFR ) + { + /* second glottal impulse is in the 4th subframe */ + *tc_subfr = TC_0_192; + } + else + { + /* second glottal impulse is in the 3rd subframe */ + *tc_subfr = TC_0_128; + } + } + else if ( ( *tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) ) + { + /* second glottal impulse is in the 2nd subframe */ + *tc_subfr = TC_0_64; + } + } + + if ( i_subfr - *tc_subfr <= L_SUBFR ) + { + config_acelp1( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, TRANSITION, *tc_subfr, 2, NULL, unbits_ACELP, st->element_mode, &i /*dummy*/, 0 /*tdm_lp_reuse_flag*/, 0 /*tdm_low_rate_mode*/, st->idchan, 0 /*tdm_Pitch_reuse_flag*/, st->tdm_LRTD_flag, 0 /*GSC_IVAS_mode*/ + ); + } + + /*-----------------------------------------------------------------* + * get number of bits for pitch encoding + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; + + /*-----------------------------------------------------------------* + * Find adaptive part of excitation, encode pitch period + *-----------------------------------------------------------------*/ + + /* first glottal impulse is in the 1st subrame */ + if ( ( i_subfr == L_SUBFR ) && ( *tc_subfr >= TC_0_128 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 3rd or 4th subframe + * - build exc[] in 2nd subframe + *--------------------------------------------------------*/ + + *T0 = 2 * L_SUBFR; + *T0_frac = 0; + *Jopt_flag = 0; + + set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); + set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); + } + else if ( ( i_subfr == L_SUBFR ) && ( *tc_subfr == TC_0_64 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 2nd subframe, + * - build exc[] in 2nd subframe + *--------------------------------------------------------*/ + + if ( ( *T0 ) + ( *position ) < L_SUBFR ) + { + /* impulse must be in the 2nd subframe (not in 1st) */ + *T0 = L_SUBFR - ( *position ); + *T0_frac = 0; + } + + if ( ( *T0 ) + ( *position ) >= 2 * L_SUBFR ) + { + /* impulse must be in the 2nd subframe (not in 3rd) */ + *T0 = 2 * L_SUBFR - 1 - ( *position ); + *T0_frac = 2; + } + + limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max for delta search */ + + /* 7bit ENCODER */ + index = ( *T0 - pit_start ) * 2 + *T0_frac / 2; + push_indice( hBstr, IND_PITCH, index, nBits ); + + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + else if ( ( i_subfr == 2 * L_SUBFR ) && ( *tc_subfr == TC_0_128 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 3rd subframe + * - build exc[] in 3rd subframe + *--------------------------------------------------------*/ + + pit_start = 2 * L_SUBFR - ( *position ); + + pit_flag = 0; + + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, pit_start, 3 * L_SUBFR, L_FRAME, L_SUBFR ); + + if ( ( *T0 ) + ( *position ) < 2 * L_SUBFR ) + { + /* impulse must be in the 3rd subframe (not in 2nd) */ + *T0 = 2 * L_SUBFR - ( *position ); + *T0_frac = 0; + } + if ( ( *T0 ) + ( *position ) >= 3 * L_SUBFR ) + { + /* impulse must be in the 3rd subframe (not in 4th) */ + *T0 = 3 * L_SUBFR - 1 - ( *position ); + *T0_frac = 2; + } + + limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max for delta search */ + + index = ( *T0 - pit_start ) * 2 + *T0_frac / 2; + push_indice( hBstr, IND_PITCH, index, nBits ); + + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + else if ( ( i_subfr == 2 * L_SUBFR ) && ( *tc_subfr == TC_0_192 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 4th subframe + * - build exc[] in 3rd subframe + *--------------------------------------------------------*/ + + *T0 = 4 * L_SUBFR; + *T0_frac = 0; + *Jopt_flag = 0; + + set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); + set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); + } + else if ( ( i_subfr == 3 * L_SUBFR ) && ( *tc_subfr == TC_0_192 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse is in the 4th subframe + * - build exc[] in 4th subframe + *--------------------------------------------------------*/ + /* always T0_frac = 0 */ + pit_flag = 0; + + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); + + if ( ( *T0 ) + ( *position ) < 3 * L_SUBFR ) + { + /* impulse must be in the 4th subframe (not in 3rd) */ + *T0 = 3 * L_SUBFR - ( *position ); + *T0_frac = 0; + } + + pit_start = 3 * L_SUBFR - ( *position ); + pit_limit = 2 * L_FRAME - PIT_MAX - 2 - 2 * ( *position ); + + if ( *T0 < pit_limit ) + { + index = ( *T0 - pit_start ) * 2 + *T0_frac / 2; + } + else + { + index = *T0 - pit_limit + ( pit_limit - pit_start ) * 2; + *T0_frac = 0; + } + + push_indice( hBstr, IND_PITCH, index, nBits ); + + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + else if ( ( i_subfr == 3 * L_SUBFR ) && ( *tc_subfr == TC_0_128 ) ) + { + /*--------------------------------------------------------* + * second glottal impulse in the 3rd subframe + * build exc[] in 4th subframe + *--------------------------------------------------------*/ + + pit_flag = L_SUBFR; + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); + index = delta_pit_enc( 2, *T0, *T0_frac, *T0_min ); + push_indice( hBstr, IND_PITCH, index, nBits ); + + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + + /*------------------------------------------------------------* + * first glottal impulse is NOT in the 1st subframe, + * or two impulses are in the 1st subframe + *------------------------------------------------------------*/ + else + { + if ( nBits == 8 || nBits == 5 ) + { + if ( !( ( *tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) ) ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); + } + } + else + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); + } + + pit_Q_enc( hBstr, 0, nBits, 8, pit_flag, limit_flag, *T0, *T0_frac, T0_min, T0_max ); + + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + offset = tbe_celp_exc_offset( *T0, *T0_frac ); + for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) + { + bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; + } + } + + if ( *Jopt_flag == 0 ) + { + /* adaptive/TC excitation is zero */ + mvr2r( xn, xn2, L_SUBFR ); + g_corr[0] = 0.0f; + g_corr[1] = 0.0f; + *clip_gain = 0; + } + else + { + *clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, TRANSITION, xn, gp_cl ); + + lp_select = lp_filt_exc_enc( MODE1, TRANSITION, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr, *clip_gain, gain_pit, &lp_flag ); + + if ( lp_flag == NORMAL_OPERATION ) + { + push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); + } + } + + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ + + /*---------------------------------------------------------------------* + * fill the pitch buffer - needed for post-processing + *---------------------------------------------------------------------*/ + + if ( ( *tc_subfr >= 2 * L_SUBFR ) && ( i_subfr == 3 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 3; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( *tc_subfr == L_SUBFR ) && ( i_subfr == 2 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 2; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( *tc_subfr == TC_0_64 ) && ( i_subfr == L_SUBFR ) ) + { + ( *pt_pitch ) -= 1; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( *tc_subfr == TC_0_128 ) && ( i_subfr == 2 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 2; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + else if ( ( *tc_subfr == TC_0_192 ) && ( i_subfr == 3 * L_SUBFR ) ) + { + ( *pt_pitch ) -= 3; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + } + else /* L_frame == L_FRAME16k */ + { + if ( i_subfr >= 2 * L_SUBFR ) + { + limit_flag = 1; + } + + if ( i_subfr <= 2 * L_SUBFR ) + { + if ( i_subfr < 2 * L_SUBFR ) + { + mult_Top = 1; + if ( T_op[0] < PIT16k_MIN ) + { + mult_Top = 2; + } + limit_T0( L_FRAME16k, 8, 0, limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); /* TC0 second subfr. */ + } + else + { + limit_T0( L_FRAME16k, 8, 0, limit_flag, T_op[1], 0, T0_min, T0_max ); /* TC0 third subfr., or TC64 third subfr. */ + } + } + + /*-----------------------------------------------------------------* + * get number of bits for pitch encoding + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; + + /*-----------------------------------------------------------------* + * Find adaptive part of excitation, encode pitch period + *-----------------------------------------------------------------*/ + + if ( nBits == 10 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, limit_flag, PIT16k_FR2_EXTEND_10b, PIT16k_MAX, st->L_frame, L_SUBFR ); + pit16k_Q_enc( hBstr, nBits, limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + else if ( nBits == 8 ) /* tc_subfr==0 && i_subfr==L_SUBFR */ + { + /*-----------------------------------------------------------------------------* + * The pitch range is encoded absolutely with 8 bits and is divided as follows: + * PIT16k_MIN to PIT16k_FR2_TC0_2SUBFR-1 resolution 1/4 (frac = 0,1,2 or 3) + * PIT16k_FR2_TC0_2SUBFR to 2*L_SUBFR resolution 1/2 (frac = 0 or 2) + *-----------------------------------------------------------------------------*/ + + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, limit_flag, PIT16k_FR2_TC0_2SUBFR, 2 * L_SUBFR, st->L_frame, L_SUBFR ); + + if ( *T0_max > 2 * L_SUBFR ) + { + *T0 = 2 * L_SUBFR; + *T0_frac = 0; + } + + if ( *T0 < PIT16k_FR2_TC0_2SUBFR ) + { + index = ( *T0 ) * 4 + ( *T0_frac ) - ( PIT16k_MIN * 4 ); + } + else + { + index = ( *T0 ) * 2 + ( ( *T0_frac ) >> 1 ) - ( PIT16k_FR2_TC0_2SUBFR * 2 ) + ( ( PIT16k_FR2_TC0_2SUBFR - PIT16k_MIN ) * 4 ); + } + + push_indice( hBstr, IND_PITCH, index, nBits ); + } + else if ( nBits == 6 ) + { + /* delta search */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, L_SUBFR, limit_flag, PIT16k_FR2_EXTEND_9b, PIT16k_FR1_EXTEND_9b, st->L_frame, L_SUBFR ); + + index = delta_pit_enc( 4, *T0, *T0_frac, *T0_min ); + + push_indice( hBstr, IND_PITCH, index, nBits ); + } + if ( nBits == 6 ) + { + limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); + } + + /*-----------------------------------------------------------------* + * - gain clipping test to avoid unstable synthesis + * - LP filtering of the adaptive excitation + * - codebook target computation + *-----------------------------------------------------------------*/ + + if ( ( i_subfr == L_SUBFR ) && ( *T0 == 2 * L_SUBFR ) ) + { + *gain_pit = 0.0f; + *clip_gain = 0; + g_corr[0] = 0.01f; + g_corr[1] = 0.01f; + *Jopt_flag = 0; + + set_f( &exc[i_subfr], 0, L_SUBFR + 1 ); /* set excitation for current subrame to 0 */ + + push_indice( hBstr, IND_LP_FILT_SELECT, 0, 1 ); /* this bit is actually not needed */ + + mvr2r( xn, xn2, L_SUBFR ); /* target vector for codebook search */ + set_f( y1, 0, L_SUBFR ); /* set filtered adaptive excitation to 0 */ + set_f( &bwe_exc[i_subfr * 2], 0, L_SUBFR * 2 ); + } + else + { + /* Find the adaptive codebook vector - ACELP long-term prediction */ + pred_lt4( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); + + for ( i = 0; i < L_SUBFR * 2; i++ ) + { + bwe_exc[i + i_subfr * 2] = bwe_exc[i + i_subfr * 2 - *T0 * 2 - (int16_t) ( (float) *T0_frac * 0.5f + 4 + 0.5f ) + 4]; + } + + *clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, TRANSITION, xn, gp_cl ); + + lp_select = lp_filt_exc_enc( MODE1, TRANSITION, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr, *clip_gain, gain_pit, &lp_flag ); + + if ( lp_flag == NORMAL_OPERATION ) + { + push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); + } + + *Jopt_flag = 1; + } + + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch value */ + + /*---------------------------------------------------------------------* + * fill the pitch buffer - needed for post-processing + *---------------------------------------------------------------------*/ + + if ( ( i_subfr - *tc_subfr == L_SUBFR ) || ( *tc_subfr == 0 && i_subfr == 2 * L_SUBFR ) ) + { + index = i_subfr / L_SUBFR; + ( *pt_pitch ) -= index; + + for ( i = 0; i < index; i++ ) + { + **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; + ( *pt_pitch )++; + } + } + } + } + + return; +} + + +/*-------------------------------------------------------------------------------------------* + * tc_enc() + * + * Principal function for transition coding (TC) in encoder. + * Glottal codebook contribution part: + * + * |----| |----| xn + * imp_pos->|| | imp_shape->| g1 | | + * | | | | g2 | ---- exc |---| y1 ---- | + * | | |-------------| |----|gain|-------| h |------|gain|----(-)---> xn2 + * | || | gn | ---- |---| ---- + * |----| |----| + * codebook excitation gain_trans h_orig gain_pit + * + *-------------------------------------------------------------------------------------------*/ + +static void tc_enc( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t i_subfr, /* i : subrame index */ + int16_t *tc_subfr, /* i/o: TC subframe index */ + int16_t *position, /* i/o: index of the residual signal maximum */ + const float *h1, /* i : weighted filter input response */ + const float *xn, /* i : target signal */ + float *exc, /* o : glottal codebook contribution */ + float *y1, /* o : filtered glottal codebook contribution */ + int16_t *T0_min, /* o : lower pitch limit */ + int16_t *T0_max, /* o : higher pitch limit */ + int16_t *T0, /* o : close loop integer pitch */ + int16_t *T0_frac, /* o : close loop fractional part of the pitch */ + float *gain_pit, /* o : pitch gain (0..GAIN_PIT_MAX) */ + float g_corr[], /* o : correlations and -2 */ + float *bwe_exc /* i/o: excitation for SWB TBE */ +) +{ + int16_t imp_shape, imp_pos, imp_sign, imp_gain, index, nBits; + float gain_trans; + BSTR_ENC_HANDLE hBstr = st->hBstr; + + imp_pos = *position - i_subfr; + + /*-----------------------------------------------------------------* + * get number of bits for pitch encoding + *-----------------------------------------------------------------*/ + + nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; + + /*--------------------------------------------------------------* + * Closed loop pitch search + *--------------------------------------------------------------*/ + + *T0_frac = 0; + if ( st->L_frame == L_FRAME ) + { + if ( ( *T0_min <= L_SUBFR ) || ( *tc_subfr == 3 * L_SUBFR ) ) + { + if ( nBits == 9 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); + } + else if ( nBits == 6 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT_MIN, L_SUBFR, L_FRAME, L_SUBFR ); + } + else + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT_MAX, PIT_MIN, L_FRAME, L_SUBFR ); + } + } + else + { + *T0 = L_SUBFR; + } + + if ( ( *tc_subfr == L_SUBFR ) && ( *T0 < L_SUBFR ) ) + { + *T0 = L_SUBFR; + } + } + else /* L_frame == L_FRAME16k */ + { + if ( nBits == 10 ) + { + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 1, PIT16k_FR2_EXTEND_10b, PIT16k_MAX, L_FRAME16k, L_SUBFR ); + } + else if ( nBits == 6 ) + { + /* T0_frac with 1/2 sample resolution */ + *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT16k_MIN, L_SUBFR, L_FRAME16k, L_SUBFR ); + + if ( *T0 > L_SUBFR ) + { + *T0 = L_SUBFR; + *T0_frac = 0; + } + } + } + + /* set tc_subfr to TC_0_0 */ + if ( i_subfr == 0 && st->L_frame == L_FRAME && ( *T0 < L_SUBFR || *tc_subfr == 3 * L_SUBFR ) ) + { + *tc_subfr = TC_0_0; + } + + /*--------------------------------------------------------------* + * Builds glottal codebook contribution + *--------------------------------------------------------------*/ + + set_impulse( xn, h1, &exc[i_subfr], y1, &imp_shape, &imp_pos, &gain_trans ); + + /*--------------------------------------------------------------* + * quantize gain_trans and scale glottal codebook contribution + *--------------------------------------------------------------*/ + + gain_trans_enc( &gain_trans, &exc[i_subfr], &imp_gain, &imp_sign ); + + /* set past excitation buffer to zeros */ + set_f( exc - L_EXC_MEM, 0, L_EXC_MEM ); + + /*--------------------------------------------------------------* + * adapt. search of the second impulse in the same subframe + * (when appears) + *--------------------------------------------------------------*/ + + pred_lt4_tc( exc, *T0, *T0_frac, inter4_2, imp_pos, i_subfr ); + + if ( st->hBWE_TD != NULL ) + { + if ( st->L_frame == L_FRAME ) + { + interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); + } + else + { + interp_code_4over2( &exc[i_subfr], &bwe_exc[i_subfr * 2], L_SUBFR ); + } + } + + /*--------------------------------------------------------------* + * compute glottal-shape codebook excitation + *--------------------------------------------------------------*/ + + /* create filtered glottal codebook contribution */ + conv( &exc[i_subfr], h1, y1, L_SUBFR ); + + /* gain_pit computation */ + *gain_pit = corr_xy1( xn, y1, g_corr, L_SUBFR, 0 ); + + /*--------------------------------------------------------------* + * Encode parameters and write indices + *--------------------------------------------------------------*/ + + if ( st->L_frame == L_FRAME ) + { + if ( ( ( i_subfr != 0 ) || ( *tc_subfr == TC_0_0 ) ) && ( *tc_subfr != L_SUBFR ) ) + { + /* write pitch index */ + if ( ( *T0 >= L_SUBFR ) && ( *tc_subfr != 3 * L_SUBFR ) ) + { + push_indice( hBstr, IND_PITCH, 0, nBits ); + } + else if ( *tc_subfr == 3 * L_SUBFR ) + { + if ( nBits == 9 ) + { + index = abs_pit_enc( 4, 0, *T0, *T0_frac ); + } + else + { + index = abs_pit_enc( 2, 0, *T0, *T0_frac ); + } + + push_indice( hBstr, IND_PITCH, index, nBits ); + + limit_T0( L_FRAME, 8, 0, 0, *T0, 0, T0_min, T0_max ); + } + else + { + if ( nBits == 6 ) + { + index = delta_pit_enc( 2, *T0, *T0_frac, PIT_MIN - 1 ); + push_indice( hBstr, IND_PITCH, index, nBits ); + } + else + { + index = delta_pit_enc( 0, *T0, *T0_frac, PIT_MIN - 1 ); + push_indice( hBstr, IND_PITCH, index, nBits ); + } + } + } + } + else /* L_frame == L_FRAME16k */ + { + if ( nBits == 10 ) + { + pit16k_Q_enc( hBstr, nBits, 1, *T0, *T0_frac, T0_min, T0_max ); + } + else if ( nBits == 6 ) + { + index = 2 * ( *T0 - PIT16k_MIN ) + *T0_frac / 2; + push_indice( hBstr, IND_PITCH, index, nBits ); + } + } + + push_indice( hBstr, IND_TC_IMP_SHAPE, imp_shape, 3 ); + push_indice( hBstr, IND_TC_IMP_POS, imp_pos, 6 ); + push_indice( hBstr, IND_TC_IMP_SIGN, imp_sign, 1 ); + push_indice( hBstr, IND_TC_IMP_GAIN, imp_gain, 3 ); + + *position = imp_pos + i_subfr; + + return; +} + +/*-----------------------------------------------------------------* + * gain_trans_enc() + * + * Quantize gain_trans of TC (gains of glottal impulses). + * - Uses scalar quantization prototypes tbl_gain_trans_tc[N_GAIN_TC]. + * - Gains the glottal codebook contibution signal. + *-----------------------------------------------------------------*/ + +static void gain_trans_enc( + float *gain_trans, /* i/o: gain for TC */ + float exc[], /* i/o: glottal codebook contribution */ + int16_t *quant_index, /* o : index of quantized gain_trans */ + int16_t *quant_sign /* o : sign of quantized gain_trans */ +) +{ + int16_t i; + + + if ( *gain_trans < 0 ) + { + *gain_trans *= -1; + *quant_sign = 0; + } + else + { + *quant_sign = 1; + } + + *quant_index = N_GAIN_TC - 1; + + for ( i = 0; i < N_GAIN_TC - 1; i++ ) + { + if ( *gain_trans < tbl_gain_trans_tc[i] ) + { + *quant_index = i; + break; + } + } + + /* restore gain_trans */ + *gain_trans = tbl_gain_trans_tc[i]; + + if ( *quant_sign == 0 ) + { + *gain_trans *= -1; + } + + for ( i = 0; i < L_SUBFR; i++ ) + { + exc[i] *= ( *gain_trans ); + } + + return; +} + + +/*-----------------------------------------------------------------* + * tc_classif_enc() + * + * TC subframe determination + *-----------------------------------------------------------------*/ + +void tc_classif_enc( + const int16_t L_frame, /* i : length of the frame */ + int16_t *tc_subfr, /* o : TC subframe index */ + int16_t *position, /* o : maximum of residual signal index */ + const int16_t attack_flag, /* i : attack flag */ + const int16_t pitch, /* i : open loop pitch estimates for first halfframe */ + const float *res /* i : pointer to the LP residual signal frame */ +) +{ + float temp; + int16_t T_op; + + T_op = pitch; + if ( L_frame == L_FRAME16k ) + { + T_op = (int16_t) ( pitch * 1.25f + 0.5f ); + } + + *tc_subfr = -1; + if ( attack_flag ) + { + *tc_subfr = 3 * L_SUBFR; + + if ( attack_flag > 0 ) + { + if ( L_frame == L_FRAME ) + { + *tc_subfr = NB_SUBFR * ( attack_flag - 1 ) / 32 /*ATT_NSEG*/; + } + else + { + *tc_subfr = NB_SUBFR16k * ( attack_flag - 1 ) / 32 /*ATT_NSEG*/; + } + *tc_subfr *= L_SUBFR; + } + } + + if ( attack_flag ) + { + /*-----------------------------------------------------------------* + * TC: subrame determination for glottal shape search + * ------------------------------------------------------- + * tc_subfr == 0 - TC in 1st subframe + * tc_subfr == TC_0_0 - TC in 1st subframe + information about T0 + * tc_subfr == L_SUBFR - TC in 2nd subframe + * tc_subfr == 2*L_SUBFR - TC in 3rd subframe + * tc_subfr == 3*L_SUBFR - TC in 4th subframe + *-----------------------------------------------------------------*/ + + *position = emaximum( res + *tc_subfr, min( T_op + 2, L_SUBFR ), &temp ) + *tc_subfr; + } + else + { + *position = emaximum( res, (int16_t) ( T_op + 2 ), &temp ); + + /* correction in case of possibly wrong T_op (double-pitch values) */ + if ( ( L_frame == L_FRAME && T_op > 2 * PIT_MIN ) || + ( L_frame == L_FRAME16k && T_op > 2 * PIT16k_MIN ) ) + { + int16_t position_tmp, len; + float aver, temp2; + + len = (int16_t) ( T_op / 2 + 2 ); + + position_tmp = emaximum( res, len, &temp2 ); + aver = dotp( res, res, len ) + 0.01f; + aver = sqrtf( aver / len ); + + temp = sqrtf( temp ); + temp2 = sqrtf( temp2 ); + + if ( temp2 > 0.8f * temp && aver < 0.25f * temp ) + { + *position = position_tmp; + } + } + + *tc_subfr = (int16_t) floor( ( *position ) / L_SUBFR ) * L_SUBFR; + } + + return; +} diff --git a/lib_enc/update_decision.c b/lib_enc/update_decision.c new file mode 100644 index 0000000000..05877f7a7e --- /dev/null +++ b/lib_enc/update_decision.c @@ -0,0 +1,287 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * bg_music_decision() + * + * + *-------------------------------------------------------------------*/ + +void bg_music_decision( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + int16_t *music_backgound_f, /* i : background music flag */ + const float frame_energy /* i : current frame energy 1 */ +) +{ + int16_t music_background_frame = 0; + float *sp_center = hVAD_CLDFB->sp_center; + float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; + float *sSFM = hVAD_CLDFB->sfm; + float *f_tonality_rate = hVAD_CLDFB->f_tonality_rate; + + if ( ( f_tonality_rate[1] > 0.60 ) || ( f_tonality_rate[0] > 0.86 ) ) + { + if ( ltd_stable_rate[0] < 0.072 && sp_center[0] > 1.2 && ( sSFM[0] < 0.76 || sSFM[1] < 0.88 || sSFM[2] < 0.96 ) ) + { + music_background_frame = 1; + } + } + + if ( music_background_frame && ( 4.6 * hVAD_CLDFB->fg_energy_count * frame_energy > hVAD_CLDFB->fg_energy ) && ( hVAD_CLDFB->fg_energy_est_start == 1 ) ) + { + hVAD_CLDFB->music_background_rate = hVAD_CLDFB->music_background_rate * 0.975f + 0.025f; + } + else if ( music_background_frame ) + { + hVAD_CLDFB->music_background_rate = hVAD_CLDFB->music_background_rate * 0.998f + 0.002f; + } + else + { + hVAD_CLDFB->music_background_rate = hVAD_CLDFB->music_background_rate * 0.997f; + } + + if ( hVAD_CLDFB->music_background_rate > 0.5 ) + { + *music_backgound_f = 1; + } + else + { + *music_backgound_f = 0; + } + + return; +} + + +/*-------------------------------------------------------------------* + * update_decision() + * + * + *-------------------------------------------------------------------*/ + +int16_t update_decision( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + const float snr, /* i : frequency domain SNR */ + const float tsnr, /* i : time domain SNR */ + const float frame_energy, /* i : current frame energy */ + const float high_eng, /* i : current frame high frequency energy */ + const int16_t vad_flag, /* i : VAD flag */ + const int16_t music_backgound_f /* i : background music flag */ +) +{ + float g_high_eng_sacle = 0.0f; + float sp_center3_diff; + int16_t update_flag = 1; + int16_t tonality_flag = 0; + int16_t frameloop = hVAD_CLDFB->frameloop; + int16_t bw = hVAD_CLDFB->bw_index; + float *sp_center = hVAD_CLDFB->sp_center; + float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; + float *sSFM = hVAD_CLDFB->sfm; + float *f_tonality_rate = hVAD_CLDFB->f_tonality_rate; + float tmpout = frame_energy - 4 * hVAD_CLDFB->frame_energy_smooth; + + g_high_eng_sacle = high_eng / ( hVAD_CLDFB->lt_bg_highf_eng + FLT_MIN ); + sp_center3_diff = sp_center[3] - hVAD_CLDFB->lt_noise_sp_center3; + + if ( frameloop > 50 ) + { + if ( ltd_stable_rate[0] > 0.12 ) + { + update_flag = 0; + } + + if ( ( bw == CLDFBVAD_WB_ID || bw == CLDFBVAD_SWB_ID ) && hVAD_CLDFB->frame_energy_smooth < 4 * frame_energy ) + { + if ( g_high_eng_sacle > 3.0f && ( sp_center3_diff > 0.4 ) ) + { + update_flag = 0; + } + if ( ( sp_center[3] > 2.8f ) && ( ltd_stable_rate[0] > 0.02f ) ) + { + update_flag = 0; + } + } + } + + if ( ( f_tonality_rate[1] > 0.50 ) && ( ltd_stable_rate[0] > 0.1 ) ) + { + update_flag = 0; + } + if ( sSFM[1] < 0.92 && sSFM[0] < 0.92 && sSFM[2] < 0.92 ) + { + update_flag = 0; + } + if ( sSFM[0] < 0.80 || sSFM[1] < 0.78 || sSFM[2] < 0.80 ) + { + update_flag = 0; + } + + if ( frame_energy > 32 * hVAD_CLDFB->frame_energy_smooth ) + { + update_flag = 0; + } + if ( ( 4.6 * hVAD_CLDFB->fg_energy_count * frame_energy > hVAD_CLDFB->fg_energy ) && ( hVAD_CLDFB->fg_energy_est_start == 1 ) && ( frame_energy > 3 ) ) + { + update_flag = 0; + } + if ( ( f_tonality_rate[1] > 0.60 ) || ( f_tonality_rate[0] > 0.86 ) ) + { + update_flag = 0; + tonality_flag = 1; + } + + if ( tonality_flag ) + { + hVAD_CLDFB->tonality_rate3 = hVAD_CLDFB->tonality_rate3 * 0.983f + 0.017f; + } + else + { + hVAD_CLDFB->tonality_rate3 = hVAD_CLDFB->tonality_rate3 * 0.983f; + } + + if ( hVAD_CLDFB->tonality_rate3 > 0.5 ) + { + update_flag = 0; + } + + if ( ( sp_center[0] > 4.0f ) && ltd_stable_rate[0] > 0.04 ) + { + update_flag = 0; + } + if ( ( f_tonality_rate[1] > 0.46 ) && ( ( sSFM[1] > 0.93 ) || ( ltd_stable_rate[0] > 0.09 ) ) ) + { + update_flag = 0; + } + if ( ( sSFM[1] < 0.93 && sSFM[0] < 0.92 && sSFM[2] < 0.97 ) && ( f_tonality_rate[1] > 0.5 ) ) + { + update_flag = 0; + } + if ( ( f_tonality_rate[1] > 0.43 ) && ( sSFM[0] < 0.95 ) && ( sp_center[1] > 1.94f ) ) + { + update_flag = 0; + } + + if ( update_flag ) + { + if ( hVAD_CLDFB->update_count < 1000 ) + { + hVAD_CLDFB->update_count = hVAD_CLDFB->update_count + 1; + } + } + + if ( update_flag ) + { + hVAD_CLDFB->lt_noise_sp_center3 = 0.9f * hVAD_CLDFB->lt_noise_sp_center3 + 0.1f * sp_center[3]; + } + if ( ( tmpout > 0 ) && ( frameloop < 100 ) && ( f_tonality_rate[1] < 0.56 ) && ( ( sp_center[0] < 1.36 ) || ltd_stable_rate[0] < 0.03 ) ) + { + update_flag = 1; + } + if ( snr < 0.3 && tmpout < 0 && tsnr < 1.2 && vad_flag == 0 && f_tonality_rate[1] < 0.5 && ( music_backgound_f == 0 ) && ltd_stable_rate[3] < 0.1 ) + + { + update_flag = 1; + } + if ( vad_flag && ( snr > 1.0 ) && bw == CLDFBVAD_SWB_ID && tmpout > 0 ) + { + update_flag = 0; + } + + if ( vad_flag && ( snr > 1.5 ) && bw != CLDFBVAD_SWB_ID && tmpout > 0 ) + { + update_flag = 0; + } + + if ( update_flag == 0 ) + { + hVAD_CLDFB->update_num_with_snr = 0; + } + else + { + if ( vad_flag && ( snr > 3.0 ) && hVAD_CLDFB->update_num_with_snr < 10 ) + { + update_flag = 0; + hVAD_CLDFB->update_num_with_snr++; + } + } + + if ( vad_flag == 0 || update_flag == 1 ) + { + float tmpp = (float) fabs( hVAD_CLDFB->sp_center[2] - hVAD_CLDFB->lt_noise_sp_center0 ); + + if ( tmpp > 2.5 ) + { + tmpp = 2.5f; + } + + hVAD_CLDFB->lt_noise_sp_center_diff_sum += tmpp; + hVAD_CLDFB->lt_noise_sp_center_diff_counter++; + + if ( hVAD_CLDFB->lt_noise_sp_center_diff_counter == 128 ) + { + hVAD_CLDFB->lt_noise_sp_center_diff_sum = hVAD_CLDFB->lt_noise_sp_center_diff_sum * 0.75f; + hVAD_CLDFB->lt_noise_sp_center_diff_counter = 96; + } + + if ( fabs( sp_center[0] - hVAD_CLDFB->lt_noise_sp_center0 ) > 2.4 ) + { + hVAD_CLDFB->lt_noise_sp_center0 = 0.996f * hVAD_CLDFB->lt_noise_sp_center0 + 0.004f * sp_center[0]; + } + else if ( fabs( sp_center[0] - hVAD_CLDFB->lt_noise_sp_center0 ) > 1.0 ) + { + hVAD_CLDFB->lt_noise_sp_center0 = 0.99f * hVAD_CLDFB->lt_noise_sp_center0 + 0.01f * sp_center[0]; + } + else + { + hVAD_CLDFB->lt_noise_sp_center0 = 0.96f * hVAD_CLDFB->lt_noise_sp_center0 + 0.04f * sp_center[0]; + } + } + + if ( ( fabs( sp_center[2] - hVAD_CLDFB->lt_noise_sp_center0 ) > ( 6 * ( hVAD_CLDFB->lt_noise_sp_center_diff_sum / hVAD_CLDFB->lt_noise_sp_center_diff_counter ) + 0.3 ) ) && hVAD_CLDFB->frameloop > 200 ) + { + update_flag = 0; + } + + return update_flag; +} diff --git a/lib_enc/updt_enc.c b/lib_enc/updt_enc.c new file mode 100644 index 0000000000..cb573fd07b --- /dev/null +++ b/lib_enc/updt_enc.c @@ -0,0 +1,469 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * updt_enc() + * + * Common updates (all frame types) + *-------------------------------------------------------------------*/ + +void updt_enc( + Encoder_State *st, /* i/o: state structure */ + const float *old_exc, /* i : buffer of excitation */ + const float *pitch_buf, /* i : floating pitch for each subframe */ + const float Es_pred, /* i : predicited scaled innovation energy */ + const float *Aq, /* i : A(z) quantized for all subframes */ + const float *lsf_new, /* i : current frame LSF vector */ + const float *lsp_new, /* i : current frame LSP vector */ + const float *old_bwe_exc /* i : buffer of excitation */ +) +{ + int16_t i; + + /* update old excitation buffer */ + mvr2r( &old_exc[st->L_frame], st->hLPDmem->old_exc, L_EXC_MEM ); + if ( !st->Opt_AMR_WB && st->hBWE_TD != NULL ) + { + mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); + } + + /* update old LSP and LSF vector */ + mvr2r( lsp_new, st->lsp_old, M ); + mvr2r( lsf_new, st->lsf_old, M ); + + /* update last coder type */ + st->last_coder_type = st->coder_type; + if ( st->coder_type == INACTIVE || ( st->bpf_off == 1 && st->coder_type != AUDIO && st->coder_type != TRANSITION ) ) + { + st->last_coder_type = UNVOICED; + } + + /* this ensures that st->last_coder_type is never set to INACTIVE in case of AVQ inactive because the FEC does not distinguish between GSC inactive and AVQ inactive */ + if ( st->coder_type == INACTIVE && st->total_brate > ACELP_24k40 ) + { + st->last_coder_type = GENERIC; + } + + if ( st->Opt_AMR_WB && st->coder_type == INACTIVE && st->core_brate != SID_1k75 && st->core_brate != FRAME_NO_DATA ) + { + /* overwrite previous coding type to help FEC */ + st->last_coder_type = UNVOICED; + } + + /* AC mode (GSC) - in speech we can consider that the last pitch band reached the max */ + if ( st->hGSCEnc != NULL && st->coder_type != AUDIO && st->coder_type != INACTIVE ) + { + st->hGSCEnc->mem_last_pit_band = 10 + BAND1k2; + st->hGSCEnc->past_dyn_dec = NOISE_LEVEL_SP0 - 1; /* tends to speech */ + st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0 - 1; /* tends to speech */ + st->hGSCEnc->mid_dyn = 40.0f * 0.5f + st->hGSCEnc->mid_dyn * 0.5f; + } + + /* convert old LSP vector from 12kHz domain to 16kHz domain (needed in case of ACELP@12k8 <-> ACELP@16kHz switching) */ + if ( st->L_frame == L_FRAME ) + { + mvr2r( st->lsp_old, st->lsp_old16k, M ); + + st->rate_switching_reset_16kHz = lsp_convert_poly( st->lsp_old16k, L_FRAME16k, st->Opt_AMR_WB ); + } + + /* update buffer of old subframe pitch values */ + if ( st->last_L_frame != st->L_frame ) + { + if ( st->L_frame == L_FRAME ) + { + for ( i = 0; i < NB_SUBFR; i++ ) + { + st->old_pitch_buf[NB_SUBFR + i] = 0.8f * st->old_pitch_buf[NB_SUBFR + i + 1]; + } + } + else + { + for ( i = NB_SUBFR; i > 0; i-- ) + { + st->old_pitch_buf[NB_SUBFR + i] = 1.25f * st->old_pitch_buf[NB_SUBFR + i - 1]; + } + st->old_pitch_buf[2 * NB_SUBFR16k - 1] = st->old_pitch_buf[2 * NB_SUBFR16k - 2]; + } + } + + mvr2r( &st->old_pitch_buf[st->L_frame / L_SUBFR], st->old_pitch_buf, st->L_frame / L_SUBFR ); + mvr2r( pitch_buf, &st->old_pitch_buf[st->L_frame / L_SUBFR], st->L_frame / L_SUBFR ); + + /* SC-VBR */ + st->last_Opt_SC_VBR = st->Opt_SC_VBR; + if ( st->hSC_VBR != NULL ) + { + st->hSC_VBR->last_last_ppp_mode = st->hSC_VBR->last_ppp_mode; + st->hSC_VBR->last_ppp_mode = st->hSC_VBR->ppp_mode; + st->hSC_VBR->last_nelp_mode = st->hSC_VBR->nelp_mode; + } + + /* core switching updates */ + mvr2r( &Aq[( st->L_frame / L_SUBFR - 1 ) * ( M + 1 )], st->old_Aq_12_8, M + 1 ); + st->old_Es_pred = Es_pred; + + return; +} + +/*-------------------------------------------------------------------* + * updt_IO_switch() + * + * Common updates for AMR-WB IO mode and EVS primary mode switching + *-------------------------------------------------------------------*/ + +void updt_IO_switch_enc( + Encoder_State *st, /* i/o: state structure */ + const int16_t input_frame /* i : input frame length */ +) +{ + float xsp_tmp[M]; + + if ( st->last_core == AMR_WB_CORE ) /* switching to EVS primary mode */ + { + /* reset onset detection counter */ + st->tc_cnt = -1; + + /* force safety-net LSFQ in the first frames after the switching */ + st->Nb_ACELP_frames = 0; + + /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ + mvr2r( stable_LSP, xsp_tmp, M ); + isf2lsf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); + mvr2r( stable_LSP, xsp_tmp, M ); + isp2lsp( st->lsp_old, st->lsp_old, xsp_tmp, M ); + isp2lsp( st->lsp_old1, st->lsp_old1, xsp_tmp, M ); + + mvr2r( stable_LSP, xsp_tmp, M ); + isp2lsp( st->hDtxEnc->lspCNG, st->hDtxEnc->lspCNG, xsp_tmp, M ); + if ( st->hTdCngEnc->old_enr_index >= 0 ) + { + st->hTdCngEnc->old_enr_index = min( (int16_t) ( (float) st->hTdCngEnc->old_enr_index / STEP_AMR_WB_SID * STEP_SID ), 127 ); + } + /* Perform preemphasis of the old input signal @16kHz */ + st->mem_preemph16k = 0; + preemph( st->old_inp_16k, PREEMPH_FAC_16k, L_INP_MEM, &( st->mem_preemph16k ) ); + + /* reset TD BWE buffers */ + set_f( st->hBWE_TD->old_speech_shb, 0.0f, L_LOOK_16k + L_SUBFR16k ); + set_f( st->hBWE_TD->old_speech_wb, 0.0f, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ); + set_f( st->hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); + set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); + set_f( st->hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); + set_f( st->hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); + st->hBWE_TD->old_mean_EnvSHBres = 0.0f; + st->hBWE_TD->prev_enr_EnvSHBres = 1.0f; + st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; + st->hBWE_TD->prev_mix_factor = 1.0f; + st->hBWE_TD->prev_Env_error = 0.0f; + + st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; + set_f( st->hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( st->hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set_f( st->hBWE_FD->old_wtda_swb, 0, L_FRAME16k ); + set_f( st->hBWE_FD->old_input_wb, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + + wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); + if ( input_frame >= L_FRAME32k ) + { + swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); + } + + if ( input_frame == L_FRAME48k ) + { + set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); + st->hBWE_TD->fb_tbe_demph = 0; + fb_tbe_reset_enc( st->hBWE_TD->elliptic_bpf_2_48k_mem, &st->hBWE_TD->prev_fb_energy ); + } + + /* reset FD BWE buffers */ + st->hBWE_FD->prev_mode = NORMAL; + + /* reset the unvoiced/audio signal improvement memories */ + st->hGSCEnc->seed_tcx = 15687; + + st->use_acelp_preq = 0; + + set_f( st->hSpMusClas->finc_prev, 0.0f, ATT_NSEG ); + st->hSpMusClas->lt_finc = 0.0f; + st->hSpMusClas->last_strong_attack = 0; + set_f( st->hSpMusClas->tod_lt_Bin_E, 0.0f, TOD_NSPEC ); + set_f( st->hSpMusClas->tod_S_map_lt, 0.0f, TOD_NSPEC ); + st->hSpMusClas->tod_thr_lt = TOD_THR_MASS; + st->hSpMusClas->tod_weight = 0.0f; + st->hSpMusClas->tod_S_mass_prev = TOD_THR_MASS; + st->hSpMusClas->tod_S_mass_lt = TOD_THR_MASS; + } + else /* switching to AMR-WB IO mode */ + { + set_f( st->mem_MA, 0, M ); + + /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ + mvr2r( stable_ISP, xsp_tmp, M ); + lsf2isf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); + mvr2r( stable_ISP, xsp_tmp, M ); + lsp2isp( st->lsp_old, st->lsp_old, xsp_tmp, M ); + mvr2r( st->lsp_old, st->lsp_old1, M ); + lsp2isp( st->lsp_old1, st->lsp_old1, xsp_tmp, M ); + mvr2r( stable_ISP, xsp_tmp, M ); + lsp2isp( st->hDtxEnc->lspCNG, st->hDtxEnc->lspCNG, xsp_tmp, M ); + if ( st->hTdCngEnc->old_enr_index >= 0 ) + { + st->hTdCngEnc->old_enr_index = min( (int16_t) ( (float) st->hTdCngEnc->old_enr_index / STEP_SID * STEP_AMR_WB_SID ), 63 ); + } + + /* gain quantization memory */ + set_f( st->hAmrwb_IO->past_qua_en, -14.0f, GAIN_PRED_ORDER ); + + /* reset VBR signalling */ + if ( st->Opt_SC_VBR ) + { + st->hSC_VBR->ppp_mode = 0; + st->hSC_VBR->nelp_mode = 0; + } + + /* reset the unvoiced/audio signal improvement memories */ + st->hGSCEnc->seed_tcx = 15687; + } + + if ( st->hTdCngEnc != NULL ) + { + /* Force SID in case of AMR-WB IO mode/EVS primary mode switching */ + st->hDtxEnc->cnt_SID = 0; + st->hDtxEnc->cng_cnt = 0; + st->hTdCngEnc->ho_hist_size = 0; + st->hTdCngEnc->burst_ho_cnt = 0; + } + + /* LP memories */ + mvr2r( UVWB_Ave, st->mem_AR, M ); + + /* FEC - update adaptive LSF mean vector */ + mvr2r( st->lsf_old, st->lsfoldbfi0, M ); + mvr2r( st->lsf_old, st->lsfoldbfi1, M ); + mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); + + return; +} + + +/*-------------------------------------------------------------------* + * updt_enc_common() + * + * Common updates for MODE1 and MODE2 + *-------------------------------------------------------------------*/ + +void updt_enc_common( + Encoder_State *st, /* i/o: encoder state structure */ + const float Etot /* i : total energy */ +) +{ + /*---------------------------------------------------------------------* + * Updates - main main codec parameters + *---------------------------------------------------------------------*/ + + st->last_sr_core = st->sr_core; + st->last_codec_mode = st->codec_mode; + st->last_L_frame = st->L_frame; + st->last_core = st->core; + + st->last_total_brate = st->total_brate; + st->last_bits_frame_nominal = st->bits_frame_nominal; + st->last_core_brate = st->core_brate; + st->last_extl = st->extl; + st->last_input_bwidth = st->input_bwidth; + st->last_bwidth = st->bwidth; + st->hNoiseEst->Etot_last = Etot; + st->last_coder_type_raw = st->coder_type_raw; + + if ( st->core_brate > SID_2k40 && st->hDtxEnc != NULL ) + { + st->hDtxEnc->last_active_brate = st->total_brate; + } + + if ( st->hBWE_TD != NULL ) + { + if ( st->core == HQ_CORE ) + { + /* in the HQ core, coder_type is not used so it could have been set to anything */ + st->hBWE_TD->prev_coder_type = GENERIC; + } + else + { + st->hBWE_TD->prev_coder_type = st->coder_type; + } + } + + if ( st->Opt_DTX_ON && st->hTdCngEnc != NULL ) + { + if ( st->core_brate > SID_2k40 ) + { + if ( st->hDtxEnc->first_CNG == 1 ) + { + if ( st->hTdCngEnc->act_cnt >= BUF_DEC_RATE ) + { + st->hTdCngEnc->act_cnt = 0; + } + st->hTdCngEnc->act_cnt++; + + if ( st->hTdCngEnc->act_cnt == BUF_DEC_RATE && st->hTdCngEnc->ho_hist_size > 0 ) + { + st->hTdCngEnc->ho_hist_size--; + } + } + + if ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD || st->hDtxEnc->first_CNG == 1 ) + { + if ( ++( st->hTdCngEnc->act_cnt2 ) >= MIN_ACT_CNG_UPD ) + { + st->hTdCngEnc->act_cnt2 = MIN_ACT_CNG_UPD; + } + + if ( ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && st->hTdCngEnc->act_cnt2 >= MIN_ACT_CNG_UPD ) + { + st->hTdCngEnc->CNG_att = 0.0f; + + apply_scale( &st->hTdCngEnc->CNG_att, st->hFdCngEnc->hFdCngCom->CngBandwidth, st->hFdCngEnc->hFdCngCom->CngBitrate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); + } + } + } + + if ( ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) && st->hDtxEnc->first_CNG == 0 && st->cng_type == LP_CNG ) + { + st->hDtxEnc->first_CNG = 1; + } + } + + /*-----------------------------------------------------------------* + * Increase the counter of initialization frames + * Limit the max number of init. frames + *-----------------------------------------------------------------*/ + + if ( st->ini_frame < MAX_FRAME_COUNTER ) + { + ( st->ini_frame )++; + } + + /* synchronisation of CNG seeds */ + if ( st->hTdCngEnc != NULL && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && st->core != AMR_WB_CORE ) + { + own_random( &( st->hTdCngEnc->cng_seed ) ); + own_random( &( st->hTdCngEnc->cng_ener_seed ) ); + } + + /*---------------------------------------------------------------------* + * Updates - MODE2 + *---------------------------------------------------------------------*/ + + if ( st->element_mode == EVS_MONO && st->mdct_sw == MODE2 ) + { + st->codec_mode = MODE2; + + st->sr_core = getCoreSamplerateMode2( EVS_MONO, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode ); + + st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); + + if ( st->sr_core == INT_FS_12k8 ) + { + st->preemph_fac = PREEMPH_FAC; + st->gamma = GAMMA1; + } + else + { + st->preemph_fac = PREEMPH_FAC_16k; + st->gamma = GAMMA16k; + } + + st->igf = getIgfPresent( EVS_MONO, st->total_brate, st->bwidth, st->rf_mode, MCT_CHAN_MODE_REGULAR ); + } + + /* update FER clas */ + if ( st->core != AMR_WB_CORE ) + { + st->last_clas = st->clas; + } + + /* Update Core */ + core_encode_update( st ); + + /*---------------------------------------------------------------------* + * RF mode updates + *---------------------------------------------------------------------*/ + + if ( st->rf_mode ) + { + if ( st->hSC_VBR != NULL ) + { + if ( st->hRF->rf_frame_type == RF_NELP ) + { + st->hSC_VBR->last_nelp_mode = 1; + } + else + { + st->hSC_VBR->last_nelp_mode = 0; + } + } + } + + st->rf_mode_last = st->rf_mode; + + if ( st->Opt_RF_ON ) + { + st->L_frame = L_FRAME; + st->rf_mode = 1; + } + + /*---------------------------------------------------------------------* + * Other updates + *---------------------------------------------------------------------*/ + + if ( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) + { + st->hTcxEnc->tcxltp_norm_corr_mem = st->hTcxEnc->tcxltp_norm_corr_past; + } + + return; +} diff --git a/lib_enc/updt_tar.c b/lib_enc/updt_tar.c new file mode 100644 index 0000000000..4cf7f78680 --- /dev/null +++ b/lib_enc/updt_tar.c @@ -0,0 +1,68 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "prot.h" +#include "wmops.h" + +/*----------------------------------------------------------------------------------* + * procedure updt_tar() + * + * Update the target vector for codebook search. + *----------------------------------------------------------------------------------*/ + +void updt_tar( + const float *x, /* i : old target (for pitch search) */ + float *x2, /* o : new target (for codebook search) */ + const float *y, /* i : filtered adaptive codebook vector */ + const float gain, /* i : adaptive codebook gain */ + const int16_t L /* i : subframe size */ +) +{ + int16_t i; + + + for ( i = 0; i < L; i++ ) + { + x2[i] = x[i] - gain * y[i]; + } + + return; +} diff --git a/lib_enc/vad.c b/lib_enc/vad.c new file mode 100644 index 0000000000..8d3c0beb4f --- /dev/null +++ b/lib_enc/vad.c @@ -0,0 +1,1097 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "rom_enc.h" +#include "wmops.h" +#include "ivas_prot.h" + +/*-----------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------*/ + +#define HANGOVER_LONG 10 /* Hangover for CNG */ +#define HANGOVER_LONG_HE 20 /* Hangover of CNG */ +#define HANGOVER_LONG_MUSIC 20 /* Hangover of CNG */ +#define HANGOVER_LONG_NB 8 /* Hangover for CNG */ +#define ACTIVE_FRAMES 3 /* Number of consecutive active SPEECH frames necessary to trigger HO */ + +#define TH16_2 35.0f /* long-term SNR that separates the curves for clean speech and noisy speech */ +#define TH8_1 20.0f /* long-term SNR that separates the curves for clean speech and noisy speech */ +#define TH16_2_NFLAG 35.0f +#define TH8_1_NFLAG 35.0f + + +#define SNR_OUTLIER_WGHT_1 1.00f +#define SNR_OUTLIER_WGHT_2 1.01f +#define SNR_OUTLIER_WGHT_3 1.02f +#define OUTLIER_THR_1 10.0f +#define OUTLIER_THR_2 6.0f +#define MAX_SNR_OUTLIER_IND 17 +#define MAX_SNR_OUTLIER_1 10.0f +#define MAX_SNR_OUTLIER_2 25.0f +#define MAX_SNR_OUTLIER_3 50.0f + +/*---------------------------------------------------------------------* + * wb_vad_init() + * + * VAD initializations + *---------------------------------------------------------------------*/ + +void wb_vad_init( + VAD_HANDLE hVAD /* i/o: VAD data handle */ +) +{ + hVAD->hangover_cnt = 0; /* Hangover counter initialized to 0 */ + hVAD->nb_active_frames = ACTIVE_FRAMES; /* The counter of SPEECH frames necessary to trigger HO */ + /* is set to max (-> start with hangover) */ + + hVAD->vad_flag_reg_H = 0L; + hVAD->vad_flag_reg_L = 0L; + hVAD->vad_prim_reg = 0L; + hVAD->vad_flag_cnt_50 = 0; + hVAD->vad_prim_cnt_16 = 0; + + /* By default one should not start with a hangover */ + hVAD->hangover_cnt_dtx = HANGOVER_LONG; /* hangover for DTX */ + hVAD->hangover_cnt_music = HANGOVER_LONG_MUSIC; /* hangover for DTX */ + + hVAD->hangover_cnt_he = 0; /* Hangover counter initialized to 0 */ + hVAD->nb_active_frames_he = ACTIVE_FRAMES; /* The counter of SPEECH frames necessary to trigger HO */ + hVAD->bcg_flux = 70; + hVAD->soft_hangover = 0; + hVAD->voiced_burst = 0; + hVAD->bcg_flux_init = 50; + hVAD->nb_active_frames_he1 = ACTIVE_FRAMES; + hVAD->hangover_cnt_he1 = 0; + + hVAD->prim_act_quick = 0.0f; + hVAD->prim_act_slow = 0.0f; + hVAD->prim_act = 0.0f; + hVAD->prim_act_quick_he = 0.0f; + hVAD->prim_act_slow_he = 0.0f; + hVAD->prim_act_he = 0.0f; + + hVAD->consec_inactive = 0; + hVAD->spectral_tilt_reset = 1; + hVAD->running_avg = 0; + hVAD->ra_deltasum = 0; + hVAD->trigger_SID = 0; + hVAD->snr_sum_vad = 0; + + hVAD->hangover_terminate_flag = 0; + + return; +} + +/*-----------------------------------------------------------------* + * sing_thr_snr_acc() + * + * accumulate snr_sum with significance thresholds + *-----------------------------------------------------------------*/ + +static void sign_thr_snr_acc( + float *snr_sum, + float snr, + float sign_thr, + float min_snr ) +{ + if ( snr >= sign_thr ) + { + *snr_sum = *snr_sum + snr; + } + else + { + *snr_sum = *snr_sum + min_snr; + } + + return; +} + +/*-----------------------------------------------------------------* + * dtx_hangover_addition() + * + * accumulate snr_sum with significance thresholds + *-----------------------------------------------------------------*/ + +int16_t dtx_hangover_addition( + Encoder_State *st, /* i/o: encoder state structure */ + const int16_t vad_flag, /* i : VAD flag */ + const float lp_snr, /* i : input single SNR estimate */ + const int16_t cldfb_subtraction, /* i : */ + int16_t *vad_hover_flag, /* o : VAD hangover flag */ + VAD_HANDLE hVAD, /* i/o: VAD handle for L or R channel */ + NOISE_EST_HANDLE hNoiseEst /* i : Noise estimation handle */ +) +{ + int16_t hangover_short_dtx, flag_dtx; + int16_t ho_limit_clean; + + if ( hVAD == NULL ) + { + hVAD = st->hVAD; + } + if ( hNoiseEst == NULL ) + { + hNoiseEst = st->hNoiseEst; + } + + flag_dtx = 0; + + /* Determine initial hangover length */ + hangover_short_dtx = 2; /* was 1 */ + if ( ( lp_snr < 16.0f && st->input_bwidth != NB ) || + hVAD->prim_act_he > 0.95f ) + { + hangover_short_dtx = 3; /* was 2 */ + } + + /* Adjust hangover according to activity history */ + if ( hVAD->vad_prim_cnt_16 > 12 ) /* 12 requires roughly > 80% primary activity */ + { + hangover_short_dtx = hangover_short_dtx + 2; + } + + if ( hVAD->vad_flag_cnt_50 > 40 ) /* 40 requires roughtly > 80% flag activity */ + { + hangover_short_dtx = hangover_short_dtx + 5; + } + + /* Keep hangover_short lower than maximum hangover count */ + if ( hangover_short_dtx > HANGOVER_LONG - 1 ) + { + hangover_short_dtx = HANGOVER_LONG - 1; + } + + /* Only allow short HO if not sufficient active frames */ + ho_limit_clean = 3; + if ( st->core == AMR_WB_CORE ) + { + ho_limit_clean = 2; + } + + if ( st->input_bwidth != NB && st->core != AMR_WB_CORE && lp_snr > 25.0f ) + { + ho_limit_clean = 2; + } + + if ( ho_limit_clean != 0 ) + { + if ( ( hangover_short_dtx > ho_limit_clean ) && ( ( hVAD->vad_prim_cnt_16 < 7 ) || ( lp_snr > 16 && hVAD->prim_act_he < 0.85 ) ) ) + { + hangover_short_dtx = ho_limit_clean; + } + } + + /* hangover adjustment from combined FFT + CLDFBVAD */ + if ( st->core != AMR_WB_CORE ) + { + hangover_short_dtx = hangover_short_dtx - cldfb_subtraction; + if ( hangover_short_dtx < 0 ) + { + hangover_short_dtx = 0; + } + } + + if ( vad_flag == 1 ) /* Speech present */ + { + flag_dtx = 1; + + /* Add hangover after sufficient # of active frames or sufficient activity during last second */ + if ( hVAD->nb_active_frames >= ACTIVE_FRAMES || hVAD->vad_flag_cnt_50 > 45 ) /* 45 requires roughtly > 90% flag activity */ + { + hVAD->hangover_cnt_dtx = 0; + } + + /* inside HO period */ + if ( hVAD->hangover_cnt_dtx < HANGOVER_LONG && hVAD->hangover_cnt_dtx != 0 ) + { + hVAD->hangover_cnt_dtx++; + } + + hVAD->hangover_terminate_flag = 0; + + /* Music hangover when music detected */ + if ( hVAD->prim_act_he > 0.98f && hNoiseEst->Etot_lp > 40 && hVAD->vad_prim_cnt_16 > 14 && hVAD->vad_flag_cnt_50 > 48 ) + { + hVAD->hangover_cnt_music = 0; + } + + /* inside music HO period */ + if ( hVAD->hangover_cnt_music < HANGOVER_LONG_MUSIC && hVAD->hangover_cnt_music != 0 ) + { + hVAD->hangover_cnt_music++; + } + } + else + { + /* Reset the counter of speech frames necessary to start hangover algorithm */ + if ( hVAD->hangover_cnt_dtx < HANGOVER_LONG ) /* inside HO period */ + { + hVAD->hangover_cnt_dtx++; + } + + if ( hVAD->hangover_cnt_music < HANGOVER_LONG_MUSIC ) /* inside music HO period */ + { + hVAD->hangover_cnt_music++; + } + + /* fast terminate DTX hangover if st->hangover_terminate_flag is set */ + if ( hVAD->hangover_terminate_flag == 1 ) + { + hVAD->hangover_cnt = HANGOVER_LONG; + hVAD->hangover_cnt_dtx = HANGOVER_LONG; + hVAD->hangover_terminate_flag = 0; + /* only shorten music hangover when low energy frames */ + if ( hNoiseEst->Etot_lp < 20.0f ) + { + hVAD->hangover_cnt_music = HANGOVER_LONG_MUSIC; + } + } + + if ( hVAD->hangover_cnt_dtx <= hangover_short_dtx ) /* "hard" hangover */ + { + flag_dtx = 1; + } + + if ( hVAD->hangover_cnt_music <= 15 ) /* "hard" hangover */ + { + flag_dtx = 1; + } + } + + if ( flag_dtx != 0 && st->localVAD == 0 ) + { + *vad_hover_flag = 1; + } + + return flag_dtx; +} + + +/*-----------------------------------------------------------------* + * wb_vad() + * + * Voice Activity Detector + *-----------------------------------------------------------------*/ + +int16_t wb_vad( + Encoder_State *st, /* i/o: encoder state structure */ + const float fr_bands[], /* i : per band input energy (contains 2 vectors) */ + int16_t *noisy_speech_HO, /* o : SC-VBR noisy speech HO flag */ + int16_t *clean_speech_HO, /* o : SC-VBR clean speech HO flag */ + int16_t *NB_speech_HO, /* o : SC-VBR NB speech HO flag */ + float *snr_sum_he, /* o : Output snr_sum as weighted spectral measure */ + int16_t *localVAD_HE_SAD, /* o : HE_SAD decision without hangovers */ + int16_t *flag_noisy_speech_snr, /* o : */ + VAD_HANDLE hVAD, /* i/o: VAD handle */ + NOISE_EST_HANDLE hNoiseEst, /* i/o: Noise estimation handle */ + float lp_speech, /* i : long term active speech energy average */ + float lp_noise /* i : long term noise energy */ +) +{ + int16_t i, j, flag, hangover_short; + float snr[NB_BANDS], snr_sum, thr1, thr2, lp_snr, nk, nc, th_clean; + const float *pt1, *pt2, *pt3; + float min_snr, sign_thr; + float fr_enr; + float ftmp, ftmp1; + float mssnr = 0; + float snr_sumt; + float vad_thr; + int16_t hangover_hd; + int16_t snr_idx; + float delta1, delta2, delta3; + int16_t flag_he1; + float mssnr_hov; + int16_t stmp; + float msnr; + float snr_outlier; + int16_t snr_outlier_index; + float accum_ener_L, accum_ener_H; + float delta4; + float snr18 = 1.0f, snr19 = 1.0f; + int16_t nb_sig_snr; + float nv; + float snr_sum_HE_SAD; + float sign_thr_HE_SAD, min_snr_HE_SAD; + float nv_ofs; + float thr1_ol; + float snr_sum_ol; + int16_t last_7k2_coder_type; + + if ( hNoiseEst == NULL ) + { + hNoiseEst = st->hNoiseEst; + } + + if ( hVAD == NULL ) + { + hVAD = st->hVAD; + } + + if ( lp_speech < -100.0f ) + { + lp_speech = st->lp_speech; + } + + if ( lp_noise < -100.0f ) + { + lp_noise = st->lp_noise; + } + + /*---------------------------------------------------------------------* + * Initialization + *---------------------------------------------------------------------*/ + + snr_outlier = 0; + snr_outlier_index = 0; + accum_ener_L = 0; + accum_ener_H = 0; + + if ( st->input_bwidth == NB ) + { + st->min_band = 1; + st->max_band = 16; + } + else + { + st->min_band = 0; + st->max_band = 19; + } + + if ( st->Opt_SC_VBR ) + { + last_7k2_coder_type = st->hSC_VBR->last_7k2_coder_type; + } + else + { + last_7k2_coder_type = -1; + } + + /*---------------------------------------------------------------------* + * set SNR thresholds depending on the input rate + *---------------------------------------------------------------------*/ + + if ( st->max_band == 19 ) /* WB input */ + { + nk = 0.1f; + nc = 16.1f; + nv = 2.05f; + nv_ofs = 1.65f; + th_clean = TH16_2; + if ( st->input_bwidth == WB ) + { + sign_thr = 1.3f; + min_snr = 0.8f; + } + else + { + sign_thr = 1.75f; + min_snr = 0.25f; + } + sign_thr_HE_SAD = 2.5f; + min_snr_HE_SAD = 0.2f; + } + else /* NB input */ + { + nk = 0.10f; + nc = 16.0f; + nv = 4.00f; /* Was 4.5f but trunkated to 4.00 used when converted to short */ + nv_ofs = 1.15f; + th_clean = TH8_1; + sign_thr = 1.75f; + min_snr = 0.25f; + + sign_thr_HE_SAD = 2.65f; + min_snr_HE_SAD = 0.05f; + } + + hangover_short = 0; + + + if ( st->Opt_SC_VBR ) + { + *noisy_speech_HO = 0; + *clean_speech_HO = 0; + *NB_speech_HO = 0; + } + + /*---------------------------------------------------------------------* + * compute SNR for each band & total + *---------------------------------------------------------------------*/ + + pt1 = fr_bands; + pt2 = fr_bands + NB_BANDS; + snr_sum = 0.0f; + *snr_sum_he = 0.0f; + snr_sumt = 0; + mssnr_hov = 0; + snr_sum_HE_SAD = 0.0f; + lp_snr = lp_speech - lp_noise; + + if ( lp_snr > 24.0f ) + { + snr_idx = 0; + } + else if ( lp_snr > 18 ) + { + snr_idx = 1; + } + else + { + snr_idx = 2; + } + + if ( snr_idx == 0 ) + { + stmp = 6; + delta1 = 0.0f; + delta2 = 0.0f; + delta3 = 0.0f; + delta4 = 0.0f; + vad_thr = 2.4f * lp_snr - 42.2f; + vad_thr = min( vad_thr, 80 ); + } + else if ( snr_idx == 1 ) + { + stmp = 6; + delta1 = 0.1f; + delta2 = 0.2f; + delta3 = 0.2f; + delta4 = 0.2f; + vad_thr = 2.4f * lp_snr - 40.2f; + vad_thr = min( vad_thr, 80 ); + } + else + { + stmp = 9; + delta1 = 0.2f; + delta2 = 0.4f; + delta3 = 0.3f; + delta4 = 0.4f; + vad_thr = 2.5f * lp_snr - 10.0f; + vad_thr = max( vad_thr, 1 ); + } + pt3 = hNoiseEst->bckr; + nb_sig_snr = 20; + + for ( i = st->min_band; i <= st->max_band; i++ ) + { + ftmp = *pt1++; + ftmp1 = *pt2++; + fr_enr = ( 0.2f * hNoiseEst->enrO[i] + 0.4f * ftmp + 0.4f * ftmp1 ); + + if ( ftmp > ftmp1 ) + { + snr[i] = ( 0.2f * hNoiseEst->enrO[i] + 0.4f * ftmp + 0.4f * ftmp1 ) / *pt3++; + } + else + { + snr[i] = ( 0.2f * hNoiseEst->enrO[i] + 0.3f * ftmp + 0.5f * ftmp1 ) / *pt3++; + } + + if ( snr[i] < 2.0f ) + { + nb_sig_snr--; + } + + if ( snr[i] < 1 ) + { + snr[i] = 1; + } + + snr[i] = (float) log10( snr[i] ); + snr_sumt += snr[i]; + if ( i < 2 ) + { + ftmp = snr[i] + delta1; + } + else if ( i < 7 ) + { + ftmp = snr[i] + delta2; + } + else if ( i < 18 ) + { + ftmp = snr[i] + delta3; + } + else + { + ftmp = snr[i] + delta4; + } + ftmp1 = ftmp; + if ( i < 7 ) + { + ftmp1 = ftmp + 0.4f; + } + ftmp = min( ftmp, 2.0f ); + ftmp1 = min( ftmp1, 2.0f ); + msnr = 1; + for ( j = 0; j < stmp; j++ ) + { + msnr *= ftmp; + } + mssnr += msnr; + if ( i == 18 ) + { + snr18 = msnr; + } + else if ( i == 19 ) + { + snr19 = msnr; + } + msnr = 1; + for ( j = 0; j < stmp; j++ ) + { + msnr *= ftmp1; + } + mssnr_hov += msnr; + snr[i] = fr_enr / hNoiseEst->bckr[i]; + + sign_thr_snr_acc( &snr_sum_HE_SAD, snr[i], sign_thr_HE_SAD, min_snr_HE_SAD ); + sign_thr_snr_acc( &snr_sum, snr[i], sign_thr, min_snr ); + + /* To make snr[] compatible with older versions where snr[i] >= 1 + also this could be removed if this no longer is a requriement */ + if ( snr[i] < 1.0f ) + { + snr[i] = 1.0f; + } + /* accumulate background noise energy in bands [0-2] and in bands [3-19]*/ + if ( i < 3 ) + { + accum_ener_L = accum_ener_L + hNoiseEst->bckr[i]; + } + else + { + accum_ener_H = accum_ener_H + hNoiseEst->bckr[i]; + } + + /* identify the outlier band */ + if ( snr[i] > snr_outlier ) + { + snr_outlier = snr[i]; + snr_outlier_index = i; + } + } + + if ( ( st->max_band == 19 ) && ( snr[18] > 5.0f ) && ( snr[19] > 5.0f ) ) + { + ftmp = ( mssnr + 3 * ( snr18 + snr19 ) ) * 0.77f; + if ( ftmp > mssnr ) + { + mssnr = ftmp; + } + } + else if ( snr_idx != 0 && nb_sig_snr > 13 ) + { + if ( 2.5f * lp_snr - 15.5f > 0 ) + { + mssnr += 2.5f * lp_snr - 15.5f; + } + } + + + /* Separate SNR_SUM modification to */ + snr_sum_ol = snr_sum; + if ( st->max_band == 19 && snr_outlier < MAX_SNR_OUTLIER_3 && snr_outlier_index > 3 && snr_outlier_index < MAX_SNR_OUTLIER_IND ) /* Update the total SNR only for WB signals */ + { + if ( ( accum_ener_L > OUTLIER_THR_1 * accum_ener_H ) || ( snr_outlier < MAX_SNR_OUTLIER_1 ) ) + { + snr_sum_ol = SNR_OUTLIER_WGHT_1 * ( snr_sum_ol - snr_outlier ); + } + else if ( ( accum_ener_L > OUTLIER_THR_2 * accum_ener_H ) || ( snr_outlier < MAX_SNR_OUTLIER_2 ) ) + { + snr_sum_ol = SNR_OUTLIER_WGHT_2 * ( snr_sum_ol - snr_outlier ); + } + else + { + snr_sum_ol = SNR_OUTLIER_WGHT_3 * ( snr_sum_ol - snr_outlier ); + } + } + + hVAD->snr_sum_vad = 0.5f * hVAD->snr_sum_vad + 0.5f * snr_sum_ol; + + snr_sum_ol = 10.0f * (float) log10( snr_sum_ol ); + snr_sum = snr_sum_ol; /* for NB no outlier modification */ + + snr_sum_HE_SAD = 10.0f * (float) log10( snr_sum_HE_SAD ); + *snr_sum_he = snr_sum_HE_SAD; + + /*---------------------------------------------------------------------* + * compute threshold for VAD decision + *---------------------------------------------------------------------*/ + + lp_snr = lp_speech - lp_noise; /* long-term SNR */ + + if ( lp_snr < hNoiseEst->sign_dyn_lp ) + { + lp_snr += 1; + + if ( lp_snr > hNoiseEst->sign_dyn_lp ) + { + lp_snr = hNoiseEst->sign_dyn_lp; + } + } + + thr1 = nk * lp_snr + nc + nv * ( hNoiseEst->Etot_v_h2 - nv_ofs ); /* threshold as a linear function of long-term SNR */ + + if ( st->element_mode > EVS_MONO && hNoiseEst->first_noise_updt_cnt < 100 ) + { + /* lower threshold during warmup time */ + thr1 -= 10.0f; + vad_thr = 0.f; + } + + if ( lp_snr > 20.0f ) + { + if ( st->element_mode == EVS_MONO || hNoiseEst->first_noise_updt_cnt >= 100 ) + { + /* increase the threshold when SNR is high */ + thr1 = thr1 + 0.3f * ( lp_snr - 20.0f ); + if ( st->max_band == 16 && lp_snr > 40 && thr1 > 24.1f && lp_speech < 45.0f ) + { + thr1 = 24.1f; + } + } + } + + /*---------------------------------------------------------------------* + * WB input + * SNR threshold computing + * Hangover control & final VAD decision + *---------------------------------------------------------------------*/ + + if ( st->input_bwidth != NB ) + { + /* Outlier Detection first calculates thr1_ol and snr_sum_ol instead of + thr1 and snr_sum */ + + thr1_ol = thr1; + if ( lp_snr < th_clean ) + { + hangover_short = 4; + if ( ( snr_outlier_index <= 4 && ( st->last_coder_type > UNVOICED ) && !st->Opt_SC_VBR ) || + ( snr_outlier_index <= 4 && ( last_7k2_coder_type > UNVOICED ) && st->Opt_SC_VBR ) ) + { + thr1_ol = thr1 - 1.0f; + snr_sum_ol = 10.0f * (float) log10( hVAD->snr_sum_vad ); + } + else if ( ( ( st->last_coder_type <= UNVOICED ) && ( snr_outlier < MAX_SNR_OUTLIER_2 ) && !st->Opt_SC_VBR ) || ( ( last_7k2_coder_type <= UNVOICED ) && ( snr_outlier < MAX_SNR_OUTLIER_2 ) && st->Opt_SC_VBR ) ) + { + thr1_ol = thr1 + (float) ( 1.0f - 0.04f * snr_outlier ); + } + else + { + thr1_ol = thr1 + max( 0, (float) ( 0.6f - 0.01f * snr_outlier ) ); + } + } + else + { + if ( st->Opt_SC_VBR ) + { + hangover_short = 3; + } + else + { + hangover_short = 3; + } + } + + /* The use of outlier detection had been removed by accident at some point */ + snr_sum = snr_sum_ol; + thr1 = thr1_ol; + + /* DTX HANGOVER ADDITION MOVED TO pre_proc() */ + + flag_he1 = 0; + st->localVAD = 0; + if ( mssnr > vad_thr ) + { + st->localVAD = 1; /* he1 primary decision */ + flag_he1 = 1; + hVAD->nb_active_frames_he1++; /* Counter of consecutive active speech frames */ + if ( hVAD->nb_active_frames_he1 >= ACTIVE_FRAMES ) + { + hVAD->nb_active_frames_he1 = ACTIVE_FRAMES; + hVAD->hangover_cnt_he1 = 0; /* Reset the counter of hangover frames after at least "active_frames" speech frames */ + } + /* inside HO period */ + if ( hVAD->hangover_cnt_he1 < HANGOVER_LONG_HE && hVAD->hangover_cnt_he1 != 0 ) + { + hVAD->hangover_cnt_he1++; + } + + if ( hVAD->soft_hangover > 0 ) + { + hVAD->soft_hangover--; + } + } + else + { + /* Reset the counter of speech frames necessary to start hangover algorithm */ + hVAD->nb_active_frames_he1 = 0; + } + + if ( hVAD->voiced_burst > 3 ) + { + if ( hVAD->bcg_flux < 40 ) + { + hVAD->soft_hangover = hangover_sf_tbl[snr_idx + 3]; + } + else + { + hVAD->soft_hangover = hangover_sf_tbl[snr_idx]; + } + } + + + hangover_hd = hangover_hd_tbl[snr_idx]; + + if ( hVAD->bcg_flux < 40 ) + { + hangover_hd = ( hangover_hd >> 1 ) + 1; + } + + if ( flag_he1 == 0 && hVAD->soft_hangover > 0 ) + { + if ( mssnr_hov > vad_thr ) + { + flag_he1 = 1; + hVAD->soft_hangover--; + } + else + { + hVAD->soft_hangover = 0; + } + + if ( hVAD->soft_hangover < 0 ) + { + hVAD->soft_hangover = 0; + } + } + + if ( flag_he1 == 0 && hVAD->hangover_cnt_he1 < hangover_hd && hVAD->soft_hangover == 0 ) + { + flag_he1 = 1; + hVAD->hangover_cnt_he1++; + } + + /* Calculate background stationarity */ + if ( flag_he1 == 0 && hNoiseEst->first_noise_updt > 0 ) + { + if ( snr_sumt > hVAD->bcg_flux ) + { + if ( hVAD->bcg_flux_init-- > 0 ) + { + if ( snr_sumt > hVAD->bcg_flux + 50 ) + { + hVAD->bcg_flux = 0.9f * hVAD->bcg_flux + ( 1 - 0.9f ) * ( hVAD->bcg_flux + 50 ); + } + else + { + hVAD->bcg_flux = 0.9f * hVAD->bcg_flux + ( 1 - 0.9f ) * snr_sumt; + } + } + else + { + if ( snr_sumt > hVAD->bcg_flux + 10 ) + { + hVAD->bcg_flux = 0.99f * hVAD->bcg_flux + ( 1 - 0.99f ) * ( hVAD->bcg_flux + 10 ); + } + else + { + hVAD->bcg_flux = 0.99f * hVAD->bcg_flux + ( 1 - 0.99f ) * snr_sumt; + } + } + } + else + { + if ( hVAD->bcg_flux_init-- > 0 ) + { + if ( snr_sumt < hVAD->bcg_flux - 30 ) + { + hVAD->bcg_flux = 0.95f * hVAD->bcg_flux + ( 1 - 0.95f ) * ( hVAD->bcg_flux - 30 ); + } + else + { + hVAD->bcg_flux = 0.95f * hVAD->bcg_flux + ( 1 - 0.95f ) * snr_sumt; + } + } + else + { + if ( snr_sumt < hVAD->bcg_flux - 10 ) + { + hVAD->bcg_flux = 0.9992f * hVAD->bcg_flux + ( 1 - 0.9992f ) * ( hVAD->bcg_flux - 10 ); + } + else + { + hVAD->bcg_flux = 0.9992f * hVAD->bcg_flux + ( 1 - 0.9992f ) * snr_sumt; + } + } + } + + if ( hVAD->bcg_flux_init < 0 ) + { + hVAD->bcg_flux_init = 0; + } + } + + flag = 0; + st->localVAD = 0; + + if ( ( snr_sum > thr1 && flag_he1 == 1 ) ) /* Speech present */ + { + flag = 1; + st->localVAD = 1; + hVAD->nb_active_frames++; /* Counter of consecutive active speech frames */ + if ( hVAD->nb_active_frames >= ACTIVE_FRAMES ) + { + hVAD->nb_active_frames = ACTIVE_FRAMES; + hVAD->hangover_cnt = 0; /* Reset the counter of hangover frames after at least "active_frames" speech frames */ + } + + /* inside HO period */ + if ( hVAD->hangover_cnt < HANGOVER_LONG && hVAD->hangover_cnt != 0 ) + { + hVAD->hangover_cnt++; + } + } + else + { + /* Reset the counter of speech frames necessary to start hangover algorithm */ + hVAD->nb_active_frames = 0; + if ( hVAD->hangover_cnt < HANGOVER_LONG ) /* inside HO period */ + { + hVAD->hangover_cnt++; + } + + if ( hVAD->hangover_cnt <= hangover_short ) /* "hard" hangover */ + { + /* send the extra 3 HO frames to NELP */ + if ( st->element_mode == EVS_MONO && ( lp_snr < th_clean ) && ( st->Opt_SC_VBR ) && ( hVAD->hangover_cnt >= 2 ) ) + { + *noisy_speech_HO = 1; + } + + if ( st->element_mode == EVS_MONO && ( lp_snr >= th_clean ) && ( st->Opt_SC_VBR ) && ( hVAD->hangover_cnt >= 2 ) ) + { + *clean_speech_HO = 1; + } + + flag = 1; + } + } + + /* localVAD and vad_flag for HE-SAD - in parallel with normal localVAD and vad_flag */ + *localVAD_HE_SAD = 0; + if ( snr_sum_HE_SAD > thr1 && ( flag_he1 == 1 ) ) /* Speech present */ + { + *localVAD_HE_SAD = 1; + } + } + + /*---------------------------------------------------------------------* + * NB input + * SNR threshold computing + * Hangover control & final VAD decision + *---------------------------------------------------------------------*/ + + else /* NB input */ + { + /* Add localVAD_HE_SAD also for NB operation for use with speech music classifier */ + *localVAD_HE_SAD = 0; + if ( snr_sum_HE_SAD > thr1 ) + { + *localVAD_HE_SAD = 1; + } + + st->localVAD = 0; /* init needed in NB, otherwise it can be undefined */ + if ( snr_sum > thr1 ) /* Speech present */ + { + hVAD->nb_active_frames++; /* Counter of consecutive active speech frames */ + if ( hVAD->nb_active_frames >= ACTIVE_FRAMES ) + { + hVAD->nb_active_frames = ACTIVE_FRAMES; + hVAD->hangover_cnt = 0; /* Reset the counter of hangover frames after at least "active_frames" speech frames */ + } + + st->localVAD = 1; + } + else + { + hVAD->nb_active_frames = 0; /* Reset the counter of speech frames necessary to start hangover algorithm */ + } + + if ( hVAD->hangover_cnt < HANGOVER_LONG_NB ) + { + hVAD->hangover_cnt++; + if ( lp_snr < 19.0f ) /* very low SNR */ + { + thr1 -= 5.2f; + } + else if ( lp_snr < 35.0f ) /* low SNR */ + { + thr1 -= 2.0f; + } + } + + if ( st->Opt_DTX_ON ) + { + if ( lp_snr < th_clean ) + { + thr2 = thr1 - 1.10f; + } + else + { + thr2 = thr1 - 1.5f; + } + } + else + { + if ( lp_snr < th_clean ) + { + thr2 = thr1 - 1.3f; + } + else + { + thr2 = thr1 - 1.5f; + } + } + + flag = 0; + if ( snr_sum > thr1 ) /* Speech present */ + { + flag = 1; + } + + if ( ( snr_sum < thr1 ) && ( snr_sum > thr2 ) ) /* Speech present */ + { + flag = 1; + st->localVAD = 0; + + if ( st->element_mode == EVS_MONO ) + { + *NB_speech_HO = 1; + } + } + + /* Need to handle the case when switching from WB -> NB */ + } + + if ( st->input_bwidth != NB ) + { + *flag_noisy_speech_snr = ( lp_snr < TH16_2_NFLAG ); /*original threshold: 35dB*/ + } + else + { + *flag_noisy_speech_snr = ( lp_snr < TH8_1_NFLAG ); /*original threshold: 20dB, not yet tested!*/ + } + + /* SC-VBR */ + if ( st->hSC_VBR != NULL ) + { + st->hSC_VBR->vadsnr = snr_sum; + st->hSC_VBR->vadnoise = thr1; + } + + /* Updates */ + hVAD->prim_act_quick = 0.2f * ( st->localVAD ) + ( 1.0f - 0.2f ) * hVAD->prim_act_quick; + hVAD->prim_act_slow = 0.01f * ( st->localVAD ) + ( 1.0f - 0.01f ) * hVAD->prim_act_slow; + if ( hVAD->prim_act_quick <= hVAD->prim_act_slow ) + { + hVAD->prim_act = 0.1f * hVAD->prim_act_quick + ( 1.0f - 0.1f ) * hVAD->prim_act; + } + else + { + hVAD->prim_act = 0.1f * hVAD->prim_act_slow + ( 1.0f - 0.1f ) * hVAD->prim_act; + } + + hVAD->prim_act_quick_he = 0.2f * *localVAD_HE_SAD + ( 1.0f - 0.2f ) * hVAD->prim_act_quick_he; + hVAD->prim_act_slow_he = 0.01f * *localVAD_HE_SAD + ( 1.0f - 0.01f ) * hVAD->prim_act_slow_he; + + if ( hVAD->prim_act_quick_he <= hVAD->prim_act_slow_he ) + { + hVAD->prim_act_he = 0.1f * hVAD->prim_act_quick_he + ( 1.0f - 0.1f ) * hVAD->prim_act_he; + } + else + { + hVAD->prim_act_he = 0.1f * hVAD->prim_act_slow_he + ( 1.0f - 0.1f ) * hVAD->prim_act_he; + } + + + if ( ( hVAD->vad_flag_reg_H & (int32_t) 0x40000L ) != 0 ) /* 0x4000L = 0x01L << 18 */ + { + hVAD->vad_flag_cnt_50 = hVAD->vad_flag_cnt_50 - 1; + } + + hVAD->vad_flag_reg_H = ( hVAD->vad_flag_reg_H & (int32_t) 0x3fffffffL ) << 1; + + if ( ( hVAD->vad_flag_reg_L & (int32_t) 0x40000000L ) != 0 ) + { + hVAD->vad_flag_reg_H = hVAD->vad_flag_reg_H | 0x01L; + } + + hVAD->vad_flag_reg_L = ( hVAD->vad_flag_reg_L & (int32_t) 0x3fffffffL ) << 1; + + if ( flag ) /* should not include the extra DTX hangover */ + { + hVAD->vad_flag_reg_L = hVAD->vad_flag_reg_L | 0x01L; + hVAD->vad_flag_cnt_50 = hVAD->vad_flag_cnt_50 + 1; + } + + if ( ( hVAD->vad_prim_reg & (int32_t) 0x8000L ) != 0 ) /* 0x8000L = 1L << 15 */ + { + hVAD->vad_prim_cnt_16 = hVAD->vad_prim_cnt_16 - 1; + } + + hVAD->vad_prim_reg = ( hVAD->vad_prim_reg & (int32_t) 0x3fffffffL ) << 1; + + if ( st->localVAD ) + { + hVAD->vad_prim_reg = hVAD->vad_prim_reg | 0x01L; + hVAD->vad_prim_cnt_16 = hVAD->vad_prim_cnt_16 + 1; + } + + return flag; +} diff --git a/lib_enc/vad_param_updt.c b/lib_enc/vad_param_updt.c new file mode 100644 index 0000000000..cbbf5c37d9 --- /dev/null +++ b/lib_enc/vad_param_updt.c @@ -0,0 +1,176 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * vad_param_updt() + * + * Update parameters used by the VAD or DTX + *--------------------------------------------------------------------*/ + +void vad_param_updt( + Encoder_State *st, /* i/o: encoder state structure */ + const float corr_shift, /* i : correlation shift */ + const float corr_shiftR, /* i : correlation shift */ + const float A[], /* i : A(z) unquantized for the 4 subframes */ + const int16_t old_pitch1, /* i : previous frame OL pitch[1] */ + FRONT_VAD_ENC_HANDLE hFrontVad[], /* i/o: front-VAD handles */ + const int16_t n_channels /* i : number of channels */ +) +{ + float refl[M + 1]; + int16_t tmp_active_flag; + VAD_HANDLE hVAD; + int16_t i; + int16_t ini_frame; + float corr_shift_temp[2]; + + corr_shift_temp[0] = corr_shift; + corr_shift_temp[1] = corr_shiftR; + + if ( hFrontVad != NULL ) + { + hVAD = hFrontVad[0]->hVAD; + ini_frame = hFrontVad[0]->ini_frame; + } + else + { + hVAD = st->hVAD; + ini_frame = st->ini_frame; + } + + for ( i = 0; i < n_channels; i++ ) + { + if ( i == 1 ) + { + hVAD = hFrontVad[1]->hVAD; + } + + if ( !st->Opt_AMR_WB ) + { + /* fix explanation: after function dtx_fx, the "vad_flag" + parameter can not be used for SID scheduling purposes any + longer as dtx_fx can schedules active frames even if the + initial analyzed vad_flag is 0 ) in the worst case without + the fix an active frame could be classified as SID frame, + quite/very unlikley though + */ + tmp_active_flag = 0; + + if ( ( st->core_brate != SID_2k40 ) && ( st->core_brate != 0 ) ) /* Note, core_brate_fx can be -1 */ + { + tmp_active_flag = 1; /* requires active coding according to dtx_fx logic */ + } + + if ( st->Opt_DTX_ON != 0 && tmp_active_flag == 0 && ini_frame > 3 ) + + { + /* update the counter of consecutive inactive frames in DTX */ + hVAD->consec_inactive++; + if ( hVAD->consec_inactive > 5 ) + { + hVAD->consec_inactive = 5; + } + + if ( hVAD->consec_inactive == 5 ) + { + /* compute spectral tilt parameter */ + a2rc( &A[1], refl, M ); + + if ( hVAD->spectral_tilt_reset == 1 ) + { + hVAD->spectral_tilt_reset = 0; + hVAD->running_avg = refl[0]; + hVAD->ra_deltasum = 0; + } + + hVAD->ra_deltasum += ( 0.80f * hVAD->running_avg + 0.20f * refl[0] ) - hVAD->running_avg; + hVAD->running_avg = 0.80f * hVAD->running_avg + 0.20f * refl[0]; + + if ( fabs( hVAD->ra_deltasum ) > 0.2f ) + { + hVAD->spectral_tilt_reset = 1; + hVAD->running_avg = 0; + hVAD->ra_deltasum = 0; + hVAD->trigger_SID = 1; + } + } + } + else + { + hVAD->trigger_SID = 0; + hVAD->consec_inactive = 0; + } + + if ( hVAD->trigger_SID == 1 ) + { + if ( st->hDtxEnc->cng_cnt >= 8 ) + { + /* Declare SID frame due to spectral tilt changes */ + st->hDtxEnc->cnt_SID = 1; + st->core_brate = SID_2k40; + hVAD->trigger_SID = 0; + } + else if ( st->core_brate == SID_2k40 ) + { + /* SID fame has already been declared before */ + hVAD->trigger_SID = 0; + } + } + } + + if ( ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3 + corr_shift_temp[i] > 0.65 && + (int16_t) ( abs( st->pitch[0] - old_pitch1 ) + abs( st->pitch[1] - st->pitch[0] ) + abs( st->pitch[2] - st->pitch[1] ) ) / 3 < 14 ) + { + ( hVAD->voiced_burst )++; + } + else + { + hVAD->voiced_burst = 0; + } + } + + return; +} diff --git a/lib_enc/vad_proc.c b/lib_enc/vad_proc.c new file mode 100644 index 0000000000..f40ca2cb5f --- /dev/null +++ b/lib_enc/vad_proc.c @@ -0,0 +1,291 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "prot.h" +#include "rom_enc.h" +#include "wmops.h" + + +/*-------------------------------------------------------------------* + * vad_init() + * + * + *-------------------------------------------------------------------*/ + +int16_t vad_init( + VAD_CLDFB_HANDLE hVAD_CLDFB /* i/o: CLDFB VAD state */ +) +{ + float sSFM[SFM_NUM] = { 0.88f, 0.92f, 0.92f }; + int16_t i; + + if ( hVAD_CLDFB == NULL ) + { + return -1; + } + + hVAD_CLDFB->frameloop = 0; + hVAD_CLDFB->lt_snr_org = 1.0f; + hVAD_CLDFB->lf_snr_smooth = 5.0f; + hVAD_CLDFB->l_silence_snr = 0.5f; + hVAD_CLDFB->l_speech_snr = 5.0f; + hVAD_CLDFB->l_silence_snr_count = 1; + hVAD_CLDFB->l_speech_snr_count = 1; + hVAD_CLDFB->fg_energy = 16 * ( 3.0518e-5f ); + hVAD_CLDFB->bg_energy = 16 * ( 4.6566e-10f ); + hVAD_CLDFB->fg_energy_count = 16; + hVAD_CLDFB->bg_energy_count = 16; + hVAD_CLDFB->tonality_rate3 = 0.46f; + hVAD_CLDFB->music_background_rate = 0.46f; + hVAD_CLDFB->lt_noise_sp_center_diff_sum = 0.4f; + hVAD_CLDFB->lt_noise_sp_center_diff_counter = 4; + hVAD_CLDFB->lt_noise_sp_center0 = 1.8f; + hVAD_CLDFB->lt_noise_sp_center3 = 2.0f; + hVAD_CLDFB->lt_bg_highf_eng = 2.0f; + hVAD_CLDFB->t_bg_energy = 0.01f; + hVAD_CLDFB->t_bg_energy_sum = 0.01f; + hVAD_CLDFB->tbg_energy_count = 1; + hVAD_CLDFB->bg_update_count = 0; + hVAD_CLDFB->frame_energy_smooth = 1.0f; + hVAD_CLDFB->fg_energy_est_start = 0; + hVAD_CLDFB->speech_flag = 0; + hVAD_CLDFB->continuous_noise_num = 0; + hVAD_CLDFB->continuous_speech_num = 0; + hVAD_CLDFB->continuous_speech_num2 = 0; + hVAD_CLDFB->update_num_with_snr = 0; /* the number of the background update with SNR*/ + hVAD_CLDFB->update_count = 0; + hVAD_CLDFB->warm_hang_num = 0; + + for ( i = 0; i < PRE_SNR_NUM; i++ ) + { + hVAD_CLDFB->pre_snr[i] = 0.0f; + } + + for ( i = 0; i < POWER_NUM; i++ ) + { + hVAD_CLDFB->frames_power[i] = 0; + } + + for ( i = 0; i < SPEC_AMP_NUM; i++ ) + { + hVAD_CLDFB->smooth_spec_amp[i] = 0; + } + + for ( i = 0; i < SFM_NUM; i++ ) + { + hVAD_CLDFB->sfm[i] = sSFM[i]; + } + + for ( i = 0; i < SP_CENTER_NUM; i++ ) + { + hVAD_CLDFB->sp_center[i] = 1.2f; + } + + for ( i = 0; i < STABLE_NUM; i++ ) + { + hVAD_CLDFB->ltd_stable_rate[i] = 0.07f; + } + + for ( i = 0; i < BG_ENG_NUM; i++ ) + { + hVAD_CLDFB->sb_bg_energy[i] = 0.01f; + hVAD_CLDFB->frame_sb_energy[i] = 0.001f; + } + + for ( i = 0; i < TONA_NUM; i++ ) + { + hVAD_CLDFB->f_tonality_rate[i] = 0.48f; + } + + for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) + { + hVAD_CLDFB->pre_spec_low_dif[i] = 1.0f; + } + + return 0; +} + + +/*-------------------------------------------------------------------* + * UpdateState() + * + * + *-------------------------------------------------------------------*/ + +static void UpdateState( + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + const float frame_energy, /* i : current frame energy */ + const float high_eng, /* i : current frame high frequency energy */ + const int16_t update_flag, /* i : current frame update flag */ + const int16_t music_backgound_f, /* i : background music flag */ + const int16_t vad_flag, /* i : VAD flag */ + const float snr ) +{ + hVAD_CLDFB->frame_energy_smooth = hVAD_CLDFB->frame_energy_smooth * 0.95f + frame_energy * 0.05f; + + if ( vad_flag == 0 ) + { + hVAD_CLDFB->lt_bg_highf_eng = hVAD_CLDFB->lt_bg_highf_eng * 0.95f + high_eng * 0.05f; + } + + if ( hVAD_CLDFB->frameloop < 1000 ) + { + hVAD_CLDFB->frameloop++; + } + + background_update( hVAD_CLDFB, frame_energy, update_flag, music_backgound_f, snr ); + + if ( vad_flag == 0 ) + { + hVAD_CLDFB->continuous_speech_num2 = 0; + + if ( hVAD_CLDFB->continuous_noise_num > 10 ) + { + hVAD_CLDFB->continuous_speech_num = 0; + } + else if ( hVAD_CLDFB->continuous_speech_num > 9 ) + { + hVAD_CLDFB->continuous_speech_num = 9; + } + + hVAD_CLDFB->continuous_noise_num++; + + if ( hVAD_CLDFB->continuous_noise_num > 2048 ) + { + hVAD_CLDFB->continuous_noise_num = 2048; + } + } + else + { + hVAD_CLDFB->continuous_noise_num = 0; + hVAD_CLDFB->continuous_speech_num2++; + hVAD_CLDFB->continuous_speech_num++; + + if ( hVAD_CLDFB->continuous_speech_num > 2048 ) + { + hVAD_CLDFB->continuous_speech_num = 2048; + } + + if ( hVAD_CLDFB->continuous_speech_num2 > 2048 ) + { + hVAD_CLDFB->continuous_speech_num2 = 2048; + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * vad_proc() + * + * + *-------------------------------------------------------------------*/ + +int16_t vad_proc( + float realValues[16][60], /* CLDFB real values */ + float imagValues[16][60], /* CLDFB imag values */ + float *sb_power, /* Energy of CLDFB data */ + const int16_t numBands, /* number of input bands */ + VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ + int16_t *cldfb_addition, + const int16_t vada_flag /* i : VAD flag */ +) +{ + float frame_energy, frame_energy2; + float spec_amp[8 * 10]; /* 120 */ + float snr, tsnr; + int16_t update_flag; + int16_t vad_flag; + int16_t music_backgound_f = 0; + float HB_Power = 0; + float snr_flux; + float lt_snr; + float lt_snr_org; + float lf_snr; + int16_t bw_index; + + if ( numBands < 20 ) + { + bw_index = 1; + } + else if ( numBands < 40 ) + { + bw_index = 2; + } + else + { + bw_index = 3; + } + + hVAD_CLDFB->bw_index = bw_index; + + assert( numBands >= 10 ); + + /* new optimized structure */ + est_energy( sb_power, hVAD_CLDFB->frame_sb_energy, &frame_energy, &frame_energy2, &HB_Power, bw_index ); + + subband_FFT( realValues, imagValues, spec_amp ); + + spec_center( sb_power, hVAD_CLDFB->sp_center, bw_index ); + + ltd_stable( hVAD_CLDFB->frames_power, hVAD_CLDFB->ltd_stable_rate, frame_energy, hVAD_CLDFB->frameloop ); + + spec_flatness( spec_amp, hVAD_CLDFB->smooth_spec_amp, hVAD_CLDFB->sfm ); + + frame_spec_dif_cor_rate( spec_amp, hVAD_CLDFB->pre_spec_low_dif, hVAD_CLDFB->f_tonality_rate ); + + bg_music_decision( hVAD_CLDFB, &music_backgound_f, frame_energy ); + + SNR_calc( hVAD_CLDFB->frame_sb_energy, hVAD_CLDFB->sb_bg_energy, hVAD_CLDFB->t_bg_energy, &snr, &tsnr, frame_energy2, bw_index ); + + calc_snr_flux( tsnr, hVAD_CLDFB->pre_snr, &snr_flux ); + + calc_lt_snr( <_snr_org, <_snr, hVAD_CLDFB->fg_energy, hVAD_CLDFB->fg_energy_count, hVAD_CLDFB->bg_energy, hVAD_CLDFB->bg_energy_count, bw_index, hVAD_CLDFB->lt_noise_sp_center0 ); + + calc_lf_snr( &hVAD_CLDFB->lf_snr_smooth, &lf_snr, hVAD_CLDFB->l_speech_snr, hVAD_CLDFB->l_speech_snr_count, hVAD_CLDFB->l_silence_snr, hVAD_CLDFB->l_silence_snr_count, hVAD_CLDFB->fg_energy_count, hVAD_CLDFB->bg_energy_count, bw_index ); + + vad_flag = comvad_decision( hVAD_CLDFB, snr, tsnr, snr_flux, lt_snr, lt_snr_org, lf_snr, frame_energy2, music_backgound_f, cldfb_addition, vada_flag ); + + update_flag = update_decision( hVAD_CLDFB, snr, tsnr, frame_energy, HB_Power, hVAD_CLDFB->vad_flag_for_bk_update, music_backgound_f ); + + UpdateState( hVAD_CLDFB, frame_energy2, HB_Power, update_flag, music_backgound_f, hVAD_CLDFB->vad_flag_for_bk_update, snr ); + + return vad_flag; +} diff --git a/lib_enc/vbr_average_rate.c b/lib_enc/vbr_average_rate.c new file mode 100644 index 0000000000..a32091f690 --- /dev/null +++ b/lib_enc/vbr_average_rate.c @@ -0,0 +1,202 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * Local constants + *------------------------------------------------------------------*/ + +#define RATEWIN 600 /* length of the rate control window. This is 600 active speech frames. This equals roughly 12s of active speech */ + +/*------------------------------------------------------------------* + * update_average_rate() + * + * SC-VBR update average data rate + *------------------------------------------------------------------*/ + +void update_average_rate( + SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ + const int32_t core_brate /* i : core bitrate */ +) +{ + float avratetarg; /* target rate for next RATEWIN active frames */ + float target; /* target set by VBR_ADR_MAX_TARGET*RATEWIN*10 */ + + if ( hSC_VBR->numactive == RATEWIN ) /* goes into rate control only the numactive ==RATEWIN. So rate control is triggered after each RATEWIN avtive frames */ + { + /* after 1000 blocks of RATEWIN frames, we change the way we control the average rate by using + st->global_avr_rate=0.99*st->global_avr_rate+0.01*st->sum_of_rates. This will avoid + veriables growing indefinitely while providing a good long term average rate */ + + if ( hSC_VBR->global_frame_cnt < 1000 ) + { + hSC_VBR->global_frame_cnt++; + hSC_VBR->global_avr_rate = ( hSC_VBR->global_avr_rate * ( hSC_VBR->global_frame_cnt - 1 ) + hSC_VBR->sum_of_rates ) / hSC_VBR->global_frame_cnt; + } + else + { + hSC_VBR->global_avr_rate = 0.01f * hSC_VBR->sum_of_rates + 0.99f * hSC_VBR->global_avr_rate; + } + + if ( hSC_VBR->sum_of_rates == 0 ) + { + hSC_VBR->sum_of_rates = (float) ( RATEWIN * VBR_ADR_MAX_TARGET * 10 ); + } + + target = VBR_ADR_MAX_TARGET * 10 * RATEWIN; + + if ( target < hSC_VBR->global_avr_rate ) /* Action is taken to reduce the averge rate. Only initiated if the global rate > target rate */ + { + /* Check the VAD SNR values to table the noisey/not noisey decision */ + + if ( hSC_VBR->SNR_THLD < 67 ) /* Currently in QFF mode. The bumpup thresholds are slightly relaxed for noisy speech. */ + { + /* Increase the threshold so the the bumpup procedure is done using the noisy thresholds. + Use 3.5 steps to quickly ramp up the rate control to reduce the settling time */ + hSC_VBR->SNR_THLD += 3.5f; + } + else if ( hSC_VBR->mode_QQF == 0 && hSC_VBR->sum_of_rates > target ) /* Now SNR_THLD is in the max allowed. Sill the global average is higher and + last RATEWIN frames have a higher agerage than the target rate. Now slightly + more aggresive rate control is used by changing the mode to QQF. Still the + same strict bumpups (more bumpups,higher rate) are used. */ + { + /* Kick in QQF mode */ + hSC_VBR->mode_QQF = 1; + } + else if ( hSC_VBR->sum_of_rates > target ) /* Actions (1) and (2) are not sufficient to control the rate. Still the last RATEWIN active + frames have a higher average rate than the target rate. More aggresive rate control is + needed. At this point the rate_control flag is set. This will enable the more relaxed + bump up thresholds (less bump ups->reduced rate)*/ + { + /* Relaxed bump ups are used */ + hSC_VBR->rate_control = 1; + + /* This will be triggered only if the gloabl average rate is considerablly higher than the target rate. + Keep a higher threshold to avoid short term rate increases over the target rate. */ + if ( hSC_VBR->global_avr_rate > ( target + 420.0f ) ) /* Last resort rate control. This is a safer rate control mechanism by increasing NELPS */ + { + hSC_VBR->Last_Resort = 1; /* compute based on a larger window as the last resort */ + } + else + { + hSC_VBR->Last_Resort = 0; + } + } + else if ( hSC_VBR->sum_of_rates < target ) /* If the average rate of last RATEWIN frames is controlled by above actions, disable the most + aggresive rate control mechanisms. Still keep QQF mode as the global rate is not under + the target rate*/ + { + hSC_VBR->Last_Resort = 0; + hSC_VBR->mode_QQF = 1; + hSC_VBR->rate_control = 0; + } + } + else + { + /* floding back to lesser and leser aggresive rate control mechanisms gradually if global rate is under control */ + hSC_VBR->Last_Resort = 0; + + if ( hSC_VBR->rate_control == 1 ) + { + hSC_VBR->rate_control = 0; + } + else if ( hSC_VBR->mode_QQF == 1 ) /* now rate control is not active and still the global rate is below the target. so go to QFF mode */ + { + hSC_VBR->mode_QQF = 0; + } + else + { + if ( hSC_VBR->SNR_THLD >= 60 ) + { + hSC_VBR->SNR_THLD -= 1.5f; + } + else + { + hSC_VBR->SNR_THLD = 60.0f; + } + } + } + + if ( hSC_VBR->global_avr_rate < target - 120 ) /* In QFF mode and global rate is less than target rate-0.2kbps. We can send some Q frames + to F frames to improve the quality */ + { + /* kick in bouncing back from Q to F */ + hSC_VBR->Q_to_F = 1; + + /* average rate for next 600ms = global_rate * 2 - rate of the past RATEWIN active frames */ + avratetarg = (float) ( ( RATEWIN * 10 ) * 2 * VBR_ADR_MAX_TARGET - hSC_VBR->global_avr_rate ); + + /* compute the percentage of frames that needed to be sent to F. st->pattern_m is computed as % val * 1000. eg. if % is 10%, then + st->pattern_m=100 . Later this value is used in voiced.enc to bump up 10% of PPP frames to F frames. */ + hSC_VBR->pattern_m = (int16_t) ( 1000 * ( avratetarg - 6.15f * RATEWIN * 10 ) / ( 10 * RATEWIN * 0.1f ) ); + + if ( hSC_VBR->pattern_m < 0 ) + { + hSC_VBR->pattern_m = 0; /* no bump up will ever happen */ + } + + if ( hSC_VBR->pattern_m > 1000 ) + { + hSC_VBR->pattern_m = 1000; /* 10% of bump ups */ + } + + hSC_VBR->patterncount = 0; + } + else + { + hSC_VBR->Q_to_F = 0; + } + + hSC_VBR->sum_of_rates = 0; + hSC_VBR->numactive = 0; + } + + hSC_VBR->numactive++; + + /* sum the total number of bits (in kbytes) * 10 here */ + hSC_VBR->sum_of_rates += ( core_brate / 1000.0f ) * 10; + + return; +} diff --git a/lib_enc/vlpc_1st_cod.c b/lib_enc/vlpc_1st_cod.c new file mode 100644 index 0000000000..9f93167054 --- /dev/null +++ b/lib_enc/vlpc_1st_cod.c @@ -0,0 +1,163 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#ifdef DEBUGGING +#include +#endif +#include "cnst.h" +#include "prot.h" +#include "rom_com.h" +#include "wmops.h" + + +/*------------------------------------------------------------------* + * lsf_weight() + * + * outputs only the weightings, doesn't do anything with the lsfq + *------------------------------------------------------------------*/ + +static void lsf_weight( + const float *lsfq, + float *w, + const int32_t sr_core ) +{ + int16_t i; + float inv_di0, inv_di1; + float scale = ( (float) sr_core ) / INT_FS_12k8; + float freq_max = sr_core / 2.f; + +#ifdef DEBUGGING + /* Verify, that M is pair, otherwise adapt exit of loop below */ + assert( ( M & 1 ) == 0 ); +#endif + + /* weighting function */ + inv_di0 = scale / lsfq[0]; + for ( i = 1; i < ( M - 2 ); i += 2 ) + { + inv_di1 = scale / ( lsfq[i] - lsfq[i - 1] ); + w[i - 1] = inv_di0 + inv_di1; + + inv_di0 = scale / ( lsfq[i + 1] - lsfq[i] ); + w[i] = inv_di1 + inv_di0; + } + inv_di1 = scale / ( lsfq[i] - lsfq[i - 1] ); + w[i - 1] = inv_di0 + inv_di1; + + inv_di0 = scale / ( freq_max - lsfq[i] ); + w[i] = inv_di1 + inv_di0; + + return; +} + + +/*------------------------------------------------------------------* + * vlpc_1st_cod() + * + * + *------------------------------------------------------------------*/ + +/*! r: codebook index */ +int16_t vlpc_1st_cod( + const float *lsf, /* i : vector to quantize */ + float *lsfq, /* i/o: i:prediction o:quantized lsf */ + const int32_t sr_core, /* i : internal sampling rate */ + float *wout /* o : lsf weights */ +) +{ + int16_t i, j, index; + float w[M], x[M]; + float dist_min, dist, temp; + const float *p_dico; +#ifdef DEBUGGING + int16_t hit = 0; +#endif + float scale = ( (float) sr_core ) / INT_FS_12k8; + float scaleinv = 1.f / scale; + + /* weighting */ + lsf_weight( lsf, w, sr_core ); + + mvr2r( w, wout, M ); + + /* remove lsf prediction/means */ + + for ( i = 0; i < M; i++ ) + { + x[i] = ( lsf[i] - lsfq[i] ) * scaleinv; + } + + dist_min = 1.0e30f; + p_dico = dico_lsf_abs_8b; + index = 0; + + for ( i = 0; i < 256; i++ ) + { + dist = 0.0; + + for ( j = 0; j < M; j++ ) + { + temp = x[j] - *p_dico++; + dist += w[j] * temp * temp; + } + + if ( dist < dist_min ) + { + dist_min = dist; + index = i; +#ifdef DEBUGGING + hit++; /*just for testing*/ +#endif + } + } + + /* quantized vector */ + p_dico = &dico_lsf_abs_8b[index * M]; + + for ( j = 0; j < M; j++ ) + { + lsfq[j] += scale * *p_dico++; /* += cause it's differential */ + } + +#ifdef DEBUGGING + assert( index < 256 ); + assert( hit > 0 ); +#endif + + return index; +} diff --git a/lib_enc/vlpc_2st_cod.c b/lib_enc/vlpc_2st_cod.c new file mode 100644 index 0000000000..86abfec1b0 --- /dev/null +++ b/lib_enc/vlpc_2st_cod.c @@ -0,0 +1,147 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "cnst.h" +#include "prot.h" +#include "wmops.h" + +/*------------------------------------------------------------------* + * vlpc_2st_cod() + * + * + *------------------------------------------------------------------*/ + +/*! r: number of allocated bits */ +int16_t vlpc_2st_cod( + const float *lsf, /* i : normalized vector to quantize */ + float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ + int16_t *indx, /* o : index[] (4 bits per words) */ + const int16_t mode, /* i : 0=abs, >0=rel */ + const int32_t sr_core /* i : internal sampling rate */ +) +{ + int16_t i, nbits; + float w[M], x[M], tmp; + int16_t nq, xq[M]; + float scale = ( (float) sr_core ) / INT_FS_12k8; + float scaleinv = 1.f / scale; + + /* 0 bit with true weighting: save 0.5 bit */ + + lsf_weight_2st( lsf, w, 1, sr_core ); + + for ( i = 0; i < M; i++ ) + { + x[i] = ( lsf[i] - lsfq[i] ) * scaleinv; + } + + for ( i = 0; i < M; i++ ) + { + x[i] /= w[i]; + } + + tmp = 0.0f; + + for ( i = 0; i < M; i++ ) + { + tmp += x[i] * x[i]; + } + + if ( tmp < 8.0f ) + { + indx[0] = 0; + indx[1] = 0; + + return ( 10 ); /* 2*(2+3) */ + } + + /* weighting from the 1st stage */ + lsf_weight_2st( lsfq, w, mode, sr_core ); + + /* find lsf residual */ + + for ( i = 0; i < M; i++ ) + { + x[i] = ( lsf[i] - lsfq[i] ) * scaleinv; + } + + /* scale the residual */ + + for ( i = 0; i < M; i++ ) + { + x[i] /= w[i]; + } + + /* quantize */ + AVQ_cod_lpc( x, xq, indx, 2 ); + + /* quantized lsf */ + + for ( i = 0; i < M; i++ ) + { + lsfq[i] += scale * ( w[i] * (float) xq[i] ); + } + + /* total number of bits using entropic code to index the quantizer number */ + nbits = 0; + + for ( i = 0; i < 2; i++ ) + { + nq = indx[i]; + nbits += ( 2 + ( nq * 4 ) ); /* 2 bits to specify Q2,Q3,Q4,ext */ + + if ( nq > 6 ) + { + nbits += nq - 3; /* unary code (Q7=1110, ...) */ + } + else if ( nq > 4 ) + { + nbits += nq - 4; /* Q5=0, Q6=10 */ + } + else if ( nq == 0 ) + { + nbits += 3; /* Q0=110 */ + } + } + + /* reorder */ + v_sort( lsfq, 0, M - 1 ); + reorder_lsf( lsfq, LSF_GAP, M, sr_core ); + + return ( nbits ); +} diff --git a/lib_enc/voiced_enc.c b/lib_enc/voiced_enc.c new file mode 100644 index 0000000000..55ee77a476 --- /dev/null +++ b/lib_enc/voiced_enc.c @@ -0,0 +1,1180 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "cnst.h" +#include "rom_com.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * Local function prototypes + *--------------------------------------------------------------------*/ + +static void SynthesisFilter( float *output, float *input, float *coef, float *memory, int16_t order, int16_t length ); + + +/*-------------------------------------------------------------------* + * DTFS_alignment_extract() + * + * Alignment for the best match between the reference DTFS and the test DTFS. + *-------------------------------------------------------------------*/ + +static float DTFS_alignment_extract( + DTFS_STRUCTURE refX1_DTFS, /* i : X1 the reference DTFS to keep fixed */ + DTFS_STRUCTURE X2_DTFS, /* i : X2 the test DTFS to shift to find best match */ + float Eshift, /* i : Expected shift - coarse value */ + const float *LPC2 /* i : LPC to filter to find correlation in spch */ +) +{ + /* Eshift is w.r.t X2 */ + int16_t k; + float maxcorr, corr, Adiff, diff, tmp, tmp1, fshift, n; + float pwf = 0.7f, tmplpc[M + 1]; + DTFS_STRUCTURE X1_DTFS; + + X1_DTFS = refX1_DTFS; /* copy into local copy */ + + DTFS_adjustLag( &X1_DTFS, X2_DTFS.lag ); + + DTFS_poleFilter( &X1_DTFS, LPC2, M + 1 ); + DTFS_poleFilter( &X2_DTFS, LPC2, M + 1 ); + + for ( k = 0, tmp = 1.0; k < M + 1; k++ ) + { + tmplpc[k] = LPC2[k] * ( tmp *= pwf ); + } + DTFS_zeroFilter( &X1_DTFS, tmplpc, M + 1 ); + DTFS_zeroFilter( &X2_DTFS, tmplpc, M + 1 ); + + maxcorr = (float) -HUGE_VAL; + fshift = Eshift; + Adiff = max( 4.0f, refX1_DTFS.lag / 8 ); + diff = 1.0f; /* Non-Fractional alignment */ + + for ( n = Eshift - Adiff; n <= Eshift + Adiff; n += diff ) + { + corr = tmp = 0.0f; + /* bit-exact optimization - PI2/X2_DTFS.lag should be counted as a single divide outside WI functions and passed in as input */ + tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); + + for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, tmp += tmp1 ) + + { + corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); + corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); + } + + if ( corr * ( 1.0f - 0.01f * fabs( n - Eshift ) ) > maxcorr ) + { + fshift = n; + maxcorr = corr; + } + } + + return fshift; /* o : shift value to shift X2 by */ +} + + +/*-------------------------------------------------------------------* + * DTFS_getEngy_band() + * + * Get DTFS energy in the specified range from lband to hband. + *-------------------------------------------------------------------*/ + +static float DTFS_getEngy_band( + DTFS_STRUCTURE X, /* i : DTFS to compute energy of */ + float lband, /* i : low end of band of interest */ + float hband /* i : high end of band of interest */ +) +{ + int16_t k; + float en, freq, fdiff; + + fdiff = (float) INT_FS_12k8 / X.lag; + + en = 0.0f; + for ( freq = fdiff, k = 1; k <= min( ( X.lag - 1 ) >> 1, X.nH_4kHz ); k++, freq += fdiff ) + { + if ( freq < hband && freq >= lband ) + { + en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; + } + } + en /= 2.0; + if ( lband == 0.0 ) + { + en += X.a[0] * X.a[0]; + } + if ( ( X.lag % 2 == 0 ) && ( hband == X.upper_cut_off_freq ) ) + { + en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; + } + return en; +} + + +/*-------------------------------------------------------------------* + * DTFS_freq_corr() + * + * Calculate correlation between two DTFS. + *-------------------------------------------------------------------*/ + +/*! r: correlation */ +static double DTFS_freq_corr( + DTFS_STRUCTURE X1_DTFS, /* i : X1 DTFS */ + DTFS_STRUCTURE X2_DTFS, /* i : X2 DTFS */ + float lband, /* i : low cutoff */ + float hband /* i : high cutoff */ +) +{ + int16_t k; + double corr, fdiff, freq; + double tmp; + + if ( X1_DTFS.lag < X2_DTFS.lag ) + { + DTFS_zeroPadd( X2_DTFS.lag, &X1_DTFS ); + } + + corr = freq = 0.0; + fdiff = (float) INT_FS_12k8 / X2_DTFS.lag; + for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, freq += fdiff ) + { + if ( freq < hband && freq >= lband ) + { + corr += ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ); + } + } + + tmp = DTFS_getEngy_band( X1_DTFS, lband, hband ) * DTFS_getEngy_band( X2_DTFS, lband, hband ); + + if ( tmp == 0.0 ) + { + tmp = 0.001; + } + + return corr / sqrt( tmp ); +} + +/*-------------------------------------------------------------------* + * DTFS_peaktoaverage() + * + * Estimate peak to average ratio in the DTFS + *-------------------------------------------------------------------*/ + +static void DTFS_peaktoaverage( + DTFS_STRUCTURE X, /* i : DTFS */ + float *pos, /* o : positive peak to ave */ + float *neg /* o : negative peak to ave */ +) +{ + float tmp, time[PIT_MAX], sum = 0.0, maxPosEn = 0.0, maxNegEn = 0.0; + int16_t i; + + DTFS_fs_inv( &X, time, X.lag, 0.0 ); + + for ( i = 0; i < X.lag; i++ ) + { + tmp = SQR( time[i] ); + if ( time[i] >= 0 ) + { + if ( tmp > maxPosEn ) + { + maxPosEn = tmp; + } + } + else + { + if ( tmp > maxNegEn ) + { + maxNegEn = tmp; + } + } + sum += tmp; + } + + if ( sum == 0.0 ) + { + *pos = 0.0f; + *neg = 0.0f; + } + else + { + if ( maxPosEn == 0.0 ) + { + *pos = 0.0; + } + else + { + *pos = (float) sqrt( maxPosEn * X.lag / sum ); + } + if ( maxPosEn == 0.0 ) + { + *neg = 0.0; + } + else + { + *neg = (float) sqrt( maxNegEn * X.lag / sum ); + } + } + + return; +} + + +/*-------------------------------------------------------------------* + * ppp_extract_pitch_period() + * + * Pitch period extraction + *-------------------------------------------------------------------*/ + +static int16_t ppp_extract_pitch_period( + const float *in, /* i : input residual */ + float *out, /* o : output residual */ + const int16_t l, /* i : lag */ + int16_t *out_of_bound /* o : out of bound flag */ +) +{ + int16_t i, j, k; + int16_t spike = 0, range; + float max1 = 0.0; + const float *ptr = in + L_FRAME - l; + float en1 = 0.0, en2 = 0.0, tmp; + int16_t spike_near_edge = 0; + float pos_max, neg_max; + int16_t spike_pos = 0, spike_neg = 0; + float x; + + pos_max = (float) -HUGE_VAL; + neg_max = 0.0; + *out_of_bound = 0; + + for ( i = 0; i < l; i++ ) + { + if ( ( x = (float) fabs( ptr[i] ) ) > max1 ) + { + max1 = x; + spike = i; + } + en1 += ptr[i] * ptr[i]; + } + + if ( ptr[spike] > 0 ) + { + spike_pos = spike; + + /* search for neg spike around the pos spike */ + for ( j = spike - 10; j < spike + 10; j++ ) + { + k = ( j + l ) % l; + if ( ptr[k] < neg_max ) + { + neg_max = ptr[k]; + spike_neg = k; + } + } + } + else if ( ptr[spike] < 0 ) + { + spike_neg = spike; + + /* search for pos spike around the neg spike */ + for ( j = spike - 10; j < spike + 10; j++ ) + { + k = ( j + l ) % l; + if ( ptr[k] > pos_max ) + { + pos_max = ptr[k]; + spike_pos = k; + } + } + } + if ( ( ( l - 1 - max( spike_pos, spike_neg ) ) <= 2 ) || ( min( spike_pos, spike_neg ) <= 2 ) ) + { + *out_of_bound = 1; + return spike_near_edge; + } + range = (int16_t) anint( max( CUTFREE_REL_RANGE * l, CUTFREE_ABS_RANGE ) ); + if ( ( spike - range < 0 ) || ( spike + range >= l ) ) + { + /* need to grab from one lag before + ensure that there is no array bound read */ + if ( L_FRAME - l - l < 0 ) + { + *out_of_bound = 1; + return spike_near_edge; + } + spike_near_edge = 1; + } + if ( spike - range < 0 ) + { + for ( i = 0; i < l + ( spike - range ); i++ ) + { + out[i] = ptr[i]; + } + + /* Grab Remaining From One Lag Before */ + ptr -= l; + for ( ; i < l; i++ ) + { + out[i] = ptr[i]; + } + } + else if ( spike + range >= l ) + { + for ( i = 0; i < spike - range; i++ ) + { + out[i] = ptr[i]; + } + /* Grab Remaining From One Lag Before */ + if ( ptr - l + i >= in ) + { + for ( ptr -= l; i < l; i++ ) + { + out[i] = ptr[i]; + } + } + else + { + for ( ; i < l; i++ ) + { + out[i] = ptr[i]; + } + } + } + else + { + for ( i = 0; i < l; i++ ) + { + out[i] = ptr[i]; + } + } + + /* Energy adjustment added to eliminate artifacts at the end of voicing */ + for ( i = 0; i < l; i++ ) + { + en2 += out[i] * out[i]; + } + + if ( en1 < en2 ) + { + tmp = (float) sqrt( en1 / en2 ); + for ( i = 0; i < l; i++ ) + { + out[i] *= tmp; + } + } + + return spike_near_edge; +} + + +/*-------------------------------------------------------------------* + * DTFS_getEngy_band_wb() + * + * Get DTFS energy in the specified range from lband to hband. + * This function is different to "DTFS_getEngy_band" as this can calculate + * lband, hband \in [1,6400] where "DTFS_getEngy_band" only upperlimited to + * 4Khz. Possibility: modify ""DTFS_getEngy_band"" and get rid of this + * function. + *-------------------------------------------------------------------*/ + +static float DTFS_getEngy_band_wb( + DTFS_STRUCTURE X, /* i : DTFS to compute energy of */ + float lband, /* i : low end of band of interest */ + float hband /* i : high end of band of interest */ +) +{ + int16_t k; + float en, freq, fdiff; + + fdiff = (float) INT_FS_12k8 / X.lag; + + en = 0.0f; + for ( freq = fdiff, k = 1; k <= ( ( X.lag - 1 ) >> 1 ); k++, freq += fdiff ) + { + if ( freq < hband && freq >= lband ) + { + en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; + } + } + en /= 2.0; + if ( lband == 0.0 ) + { + en += X.a[0] * X.a[0]; + } + if ( ( X.lag % 2 == 0 ) && ( hband == X.upper_cut_off_freq ) ) + { + en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; + } + return en; +} + + +/*-------------------------------------------------------------------* + * ppp_voiced_encoder() + * + * + *--------------------------------------------------------------------*/ + +ivas_error ppp_voiced_encoder( + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t last_coder_type_raw, /* i : raw last_coder_type */ + const float old_pitch_buf[], /* i : buffer of old subframe pitch values */ + float *in, /* i : residual signal */ + float *out, /* o : Quantized residual signal */ + const int16_t delay, /* i : open loop pitch */ + float *lpc1, /* i : prev frame de-emphasized LPC */ + float *lpc2, /* i : current frame de-emphasized LPC */ + float *exc, /* i : previous frame quantized excitation */ + float *pitch /* o : floating pitch values for each subframe */ +) +{ + int16_t i; + int16_t spike_near_edge = 0; + int16_t flag; + int16_t delta_lag_E = 0, PPP_MODE_E, Q_delta_lag = 0; + int16_t out_of_bound = 0; + float tmp, tmptmp, tmptmp1, res_enratio = 0, sp_enratio = 0; + double tmp2; + int16_t pl, l; + float interp_delay[3], temp_pl, temp_l; + int16_t upper_cut_off_freq_of_interest = 0, upper_cut_off_freq = 0; + float pos_nq, neg_nq, pos_q, neg_q; + float impzi[160]; + float impzo[160]; + float mem[10]; + float energy_impz = 0.0f; + float pos_nq0, neg_nq0, tmpres; + float sp_hb_enratio; + float low_band_en; + + DTFS_STRUCTURE *CURRP_NQ; + DTFS_STRUCTURE *TMPDTFS; + DTFS_STRUCTURE *TMPDTFS2; + DTFS_STRUCTURE *TMPDTFS3; + DTFS_STRUCTURE *CURRP_Q_E; + DTFS_STRUCTURE *dtfs_temp; + + ivas_error error; + + error = IVAS_ERR_OK; + + /* TODO: deallocation missing */ + if ( ( error = DTFS_new( &CURRP_NQ ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + if ( ( error = DTFS_new( &TMPDTFS ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + if ( ( error = DTFS_new( &TMPDTFS2 ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + if ( ( error = DTFS_new( &TMPDTFS3 ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + if ( ( error = DTFS_new( &CURRP_Q_E ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + if ( ( error = DTFS_new( &dtfs_temp ) ) != IVAS_ERR_OK ) + { + IVAS_ERROR( error, "Error creating DTFS structure" ); + } + + if ( bwidth == WB ) + { + upper_cut_off_freq_of_interest = 4000; + upper_cut_off_freq = 6400; + } + else if ( bwidth == NB ) + { + upper_cut_off_freq_of_interest = 3300; + upper_cut_off_freq = 4000; + } + + /* Initialization */ + if ( hSC_VBR->firstTime_voicedenc ) + { + hSC_VBR->firstTime_voicedenc = 0; + hSC_VBR->dtfs_enc_lag = 0; + hSC_VBR->dtfs_enc_nH = 0; + hSC_VBR->dtfs_enc_nH_4kHz = 0; + hSC_VBR->dtfs_enc_upper_cut_off_freq_of_interest = 3300.0; + hSC_VBR->dtfs_enc_upper_cut_off_freq = 4000.0; + + set_f( hSC_VBR->dtfs_enc_a, 0, MAXLAG_WI ); + set_f( hSC_VBR->dtfs_enc_b, 0, MAXLAG_WI ); + } + + /* Figure out the PPP_MODE */ + if ( hSC_VBR->last_ppp_mode == 1 && !hSC_VBR->mode_QQF ) + { + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + + /* Use the aggresive bumpups if there are two consecutive Q frames */ + /* Aggresive bump upsare only used in the second Q frame */ + if ( hSC_VBR->last_ppp_mode == 1 ) + { + hSC_VBR->rate_control = 0; + } + + PPP_MODE_E = 'Q'; + pl = min( MAX_LAG_PIT, (int16_t) rint_new( old_pitch_buf[( 2 * NB_SUBFR ) - 1] ) ); + l = min( MAX_LAG_PIT, (int16_t) rint_new( delay ) ); + + /* Bump up if the lag is out_fx of range */ + if ( ( l - pl ) > 13 || ( l - pl ) < -11 || ( l < 19 ) || ( pl < 19 ) ) + { + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + return error; + } + + if ( hSC_VBR->last_ppp_mode != 1 ) + { + /* Obtain DTFS of last pl values of past excitation */ + DTFS_to_fs( exc - pl, pl, dtfs_temp, bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); + } + + if ( last_coder_type_raw == UNVOICED ) + { + pl = l; /* if prev frame was sil/uv */ + } + + /* Use the out array as a temp storage for currp */ + spike_near_edge = ppp_extract_pitch_period( in, out, l, &out_of_bound ); + + if ( out_of_bound == 1 ) + { + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + + /* Get DTFS of current prototype */ + DTFS_to_fs( out, l, CURRP_NQ, bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); + + /* Ensure the extracted prototype is time-synchronous to the + * last l samples of the frame. This proves to eliminate + * some of the PPP-CELP transition problems. + * Convert last samples into DTFS */ + if ( spike_near_edge != 0 ) + { + DTFS_to_fs( in + L_FRAME - l, l, TMPDTFS, bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); + + tmp = DTFS_alignment_extract( *TMPDTFS, *CURRP_NQ, 0.0, lpc2 ); /* figure out how much to shift currp_nq to align with TMP */ + + DTFS_phaseShift( CURRP_NQ, (float) ( PI2 * tmp / l ) ); + } + + temp_pl = (float) pl; + temp_l = (float) l; + + for ( i = 0; i < NB_SUBFR; i++ ) + { + /* do the linear pitch interp to drive the nb_post_filt */ + Interpol_delay( interp_delay, &( temp_pl ), &( temp_l ), i, frac_4sf ); + pitch[i] = interp_delay[0]; + } + + + /* Restoring PPP memories when the last frame is non-PPP */ + if ( hSC_VBR->last_ppp_mode != 1 ) + { + hSC_VBR->ph_offset_E = 0.0; + hSC_VBR->prev_cw_en = DTFS_getEngy( *dtfs_temp ); + + /* Copy over dtfs_temp into TMPDTFS */ + DTFS_copy( TMPDTFS, *dtfs_temp ); + + DTFS_car2pol( TMPDTFS ); + + hSC_VBR->lastLgainE = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, TMPDTFS ) ); + hSC_VBR->lastHgainE = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 1104.5, upper_cut_off_freq_of_interest, 1104.5, upper_cut_off_freq, 1.0, TMPDTFS ) ); + + DTFS_to_erb( *TMPDTFS, hSC_VBR->lasterbE ); + } + else + { + /* Copy DTFS related parameters from 'hSC_VBR' to 'dtfs_temp' structure */ + dtfs_temp->lag = hSC_VBR->dtfs_enc_lag; + dtfs_temp->nH = hSC_VBR->dtfs_enc_nH; + dtfs_temp->nH_4kHz = hSC_VBR->dtfs_enc_nH_4kHz; + dtfs_temp->upper_cut_off_freq_of_interest = hSC_VBR->dtfs_enc_upper_cut_off_freq_of_interest; + dtfs_temp->upper_cut_off_freq = hSC_VBR->dtfs_enc_upper_cut_off_freq; + + mvr2r( hSC_VBR->dtfs_enc_a, dtfs_temp->a, MAXLAG_WI ); + mvr2r( hSC_VBR->dtfs_enc_b, dtfs_temp->b, MAXLAG_WI ); + } + + /*-----Open-loop Bump-Up-------- */ + + /* Energy ratio calculation in residual and speech domain */ + /* Also, compute correlation between the previous and the */ + /* current prototype */ + res_enratio = DTFS_getEngy( *CURRP_NQ ) / DTFS_getEngy( *dtfs_temp ); + + /* Copy over CURRP_NQ into TMPDTFS */ + DTFS_copy( TMPDTFS, *CURRP_NQ ); + + /* Copy over dtfs_temp into TMPDTFS2 */ + DTFS_copy( TMPDTFS2, *dtfs_temp ); + + tmptmp = DTFS_alignment_full( *TMPDTFS2, *TMPDTFS, TMPDTFS->lag * 2 ); /* align of prev_cw wrt curr_cw, new method */ + + tmptmp1 = TMPDTFS->lag - tmptmp; + tmp = tmptmp1; + + DTFS_phaseShift( TMPDTFS, (float) ( -PI2 * tmp / TMPDTFS->lag ) ); /* fixed bug, phase shift by tmp computed in TMP.lag domain (above) */ + tmpres = (float) ( DTFS_freq_corr( *TMPDTFS, *TMPDTFS2, 100.0f, 3700.0f ) ); + + DTFS_poleFilter( TMPDTFS, lpc2, M + 1 ); + + DTFS_adjustLag( TMPDTFS2, TMPDTFS->lag ); /* operate in CL domain */ + + DTFS_poleFilter( TMPDTFS2, lpc1, M + 1 ); + + tmp = (float) ( DTFS_freq_corr( *TMPDTFS, *TMPDTFS2, 100.0f, 3700.0f ) ); + + if ( DTFS_getEngy( *TMPDTFS2 ) > 0 ) + { + sp_enratio = DTFS_getEngy( *TMPDTFS ) / DTFS_getEngy( *TMPDTFS2 ); + } + else + { + sp_enratio = 0.0f; + } + + if ( PPP_MODE_E == 'Q' ) + { + /* Bump up if the lag is out of range */ + if ( ( ( l - pl ) > 13 ) || ( ( l - pl ) < -11 ) ) + { + PPP_MODE_E = 'B'; + } + else + { + delta_lag_E = (int16_t) ( l - pl ); + } + + /* Bump up if big change between the previous and the current CWs */ + if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) + { + if ( res_enratio > 5.0 && tmp < 0.65 ) + { + PPP_MODE_E = 'B'; + } + } + else + { + if ( res_enratio > 3.0 && tmp < 1.2 ) + { + PPP_MODE_E = 'B'; + } + } + } + + /* Rapid rampdown frame where time resolution is important */ + /* Not a suitable PPP frame -> Bump to CELP */ + if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) + { + if ( res_enratio < 0.025 ) + { + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + } + else + { + if ( res_enratio < 0.092f ) + { + hSC_VBR->bump_up = 1; + } + } + + if ( min( res_enratio, sp_enratio ) < 0.075f && tmp < -0.5f ) + { + hSC_VBR->bump_up = 1; + } + + /* Rapid rampup frame where time resolution is important */ + /* Not a suitable PPP frame -> Bump to CELP */ + if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) + { + if ( res_enratio > 14.5 ) + { + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + } + else + { + if ( res_enratio > 7.0 ) + { + hSC_VBR->bump_up = 1; + } + } + + if ( hSC_VBR->bump_up == 1 ) + { + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + + /* Bump up when the previous frame is an unvoiced or a silent frame */ + if ( last_coder_type_raw == UNVOICED ) + { + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + /* -----End Open-loop Bump-Up */ + + /* PPP-WI Quantization */ + if ( PPP_MODE_E == 'Q' ) + { + flag = 1; + if ( PPP_MODE_E == 'Q' ) + { + if ( ( error = ppp_quarter_encoder( &flag, hBstr, CURRP_Q_E, TMPDTFS, dtfs_temp->lag, *CURRP_NQ, lpc2, &( hSC_VBR->lastLgainE ), &( hSC_VBR->lastHgainE ), &( hSC_VBR->lasterbE[0] ), *dtfs_temp ) ) != IVAS_ERR_OK ) + { + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + return error; + } + } + + if ( flag ) + { + /* TMPDTFS : Target prototype: Amp Quantized + Phase Unquantized */ + /* TMPDTFS2: Quantized prototype: Amp Quantized + Phase Quantized */ + /* TMPDTFS3: Delta prototype: Diff betw. target and quant. in speech dom */ + + /* ----- Closed-loop Bump-Up ---------- */ + DTFS_peaktoaverage( *TMPDTFS, &pos_nq, &neg_nq ); + DTFS_peaktoaverage( *CURRP_Q_E, &pos_q, &neg_q ); + + /* Before we perform the peak-to-average ratio comparison, we have to */ + /* ensure that the energy is not decaying and also the pitch pulse */ + /* is clearly defined */ + + /* Usually triggers in the slow ramp down frames. Does not fall under the test condition (res_enratio < 0.025) as + both frames have little energy and the ratio is not very small. Not suitable for PPP */ + + if ( CURRP_Q_E->upper_cut_off_freq > 4000 ) + { + /* Use this bumup only for WB signals */ + if ( DTFS_getEngy_band_wb( *CURRP_Q_E, 0.0, 2000.0 ) > 0 ) + { + sp_hb_enratio = DTFS_getEngy_band_wb( *CURRP_Q_E, 2000.0, 6400.0 ) / DTFS_getEngy_band_wb( *CURRP_Q_E, 0.0, 2000.0 ); + } + else + { + sp_hb_enratio = 0; + } + + low_band_en = (float) DTFS_getEngy_band_wb( *CURRP_Q_E, 0.0, 2000.0 ); + + if ( low_band_en < 25.0f && sp_hb_enratio < 1.6f ) + { + PPP_MODE_E = 'B'; + } + } + + if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) + { + if ( DTFS_getEngy( *CURRP_NQ ) > 0.8f * hSC_VBR->prev_cw_en && max( pos_nq, neg_nq ) > 3.0f && hSC_VBR->rate_control ) + { + if ( pos_nq > neg_nq && pos_nq > 2.0f * pos_q ) + { + PPP_MODE_E = 'B'; + } + + if ( pos_nq < neg_nq && neg_nq > 2.0f * neg_q ) + { + PPP_MODE_E = 'B'; + } + } + } + else + { + if ( ( ( ( DTFS_getEngy( *CURRP_NQ ) > ( hSC_VBR->prev_cw_en ) ) && ( max( pos_nq, neg_nq ) > 3.5 ) ) && ( hSC_VBR->rate_control ) ) || + ( ( ( DTFS_getEngy( *CURRP_NQ ) > 0.8 * ( hSC_VBR->prev_cw_en ) ) && ( max( pos_nq, neg_nq ) > 3.0 ) ) && ( !hSC_VBR->rate_control ) ) ) + { + if ( ( ( pos_nq > neg_nq ) && ( pos_nq > 2.5 * pos_q ) && ( hSC_VBR->rate_control ) ) || + ( ( pos_nq > neg_nq ) && ( pos_nq > 2.0 * pos_q ) && ( !hSC_VBR->rate_control ) ) ) + { + PPP_MODE_E = 'B'; + } + + if ( ( ( ( pos_nq < neg_nq ) && ( neg_nq > 2.5 * neg_q ) ) && ( hSC_VBR->rate_control ) ) || + ( ( pos_nq < neg_nq ) && ( neg_nq > 2.0 * neg_q ) && ( !hSC_VBR->rate_control ) ) ) + { + PPP_MODE_E = 'B'; + } + } + + if ( hSC_VBR->rate_control ) + { + DTFS_peaktoaverage( *CURRP_NQ, &pos_nq0, &neg_nq0 ); + + for ( impzi[0] = 1.0, i = 1; i < 160; i++ ) + { + impzi[i] = 0.0; + } + + for ( i = 0; i < 160; i++ ) + { + impzo[i] = 0.0; + } + + for ( i = 0; i < 10; i++ ) + { + mem[i] = 0.0; + } + + SynthesisFilter( &impzo[0], &impzi[0], lpc2, &mem[0], 10, 160 ); + + for ( i = 0; i < 160; i++ ) + { + energy_impz += ( impzo[i] * impzo[i] ); + } + + energy_impz = (float) ( 10 * log10( (float) energy_impz ) ); + + if ( ( DTFS_getEngy( *CURRP_Q_E ) > hSC_VBR->prev_cw_en ) && ( max( pos_q, neg_q ) > 3.5 ) && energy_impz > 15.0 && tmpres > 0.7 ) + { + if ( ( pos_q > neg_q ) && ( ( pos_q > 3.0 * pos_nq0 ) || ( ( pos_q > 1.5 * pos_nq0 ) && ( neg_q < 1.5 * neg_q ) ) ) ) + { + PPP_MODE_E = 'B'; + } + + if ( ( pos_q <= neg_q ) && ( ( neg_q > 3.0 * neg_nq0 ) || ( ( neg_q > 1.5 * neg_nq0 ) && ( pos_q < 1.5 * pos_q ) ) ) ) + { + PPP_MODE_E = 'B'; + } + } + } + } + + DTFS_copy( TMPDTFS2, *CURRP_Q_E ); + + DTFS_poleFilter( TMPDTFS, lpc2, M + 1 ); + DTFS_poleFilter( TMPDTFS2, lpc2, M + 1 ); + + DTFS_sub( TMPDTFS3, *TMPDTFS, *TMPDTFS2 ); + + /* operate in ADR mode only the rate control is active. This adds some bumpups to improve the speech quality */ + tmp2 = DTFS_getEngy_band( *TMPDTFS, 1500.0, upper_cut_off_freq_of_interest ) / DTFS_getEngy( *TMPDTFS ); + if ( tmp2 == 0.0 ) + { + tmp2 = 0.001; + } + if ( ( tmp2 > 0.05 ) && ( !hSC_VBR->rate_control ) ) + { + tmp2 = DTFS_getEngy_band( *TMPDTFS, 1500.0, upper_cut_off_freq_of_interest ) / DTFS_getEngy_band( *TMPDTFS3, 1500.0, upper_cut_off_freq_of_interest ); + if ( tmp2 == 0.0 ) + { + tmp2 = 0.001; + } + if ( 10.0 * log10( tmp2 ) < 0.1 ) + { + if ( res_enratio > 0.8 ) + { + PPP_MODE_E = 'B'; + } + } + } + + /* To increase bump up, raise first threshold, lower second */ + tmp = (float) ( 10.0 * log10( DTFS_getEngy( *TMPDTFS ) / DTFS_getEngy( *TMPDTFS3 ) ) ); + + if ( ( tmp <= 0 ) && ( !hSC_VBR->rate_control ) ) + { + PPP_MODE_E = 'B'; + } + + if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) + { + if ( ( ( tmp < 3.05 && max( res_enratio, sp_enratio ) > 0.8 ) && ( hSC_VBR->rate_control ) ) || + ( ( tmp < 2.8 && max( res_enratio, sp_enratio ) > 0.65 ) && ( !hSC_VBR->rate_control ) ) ) + { + PPP_MODE_E = 'B'; + } + } + else + { + if ( ( ( tmp < 2.4 && max( res_enratio, sp_enratio ) > 0.94 ) && ( hSC_VBR->rate_control ) ) || + ( ( tmp < 4.5 && max( res_enratio, sp_enratio ) > 0.5 ) && ( !hSC_VBR->rate_control ) ) ) + { + PPP_MODE_E = 'B'; + } + } + /* -----End closed-loop Bump-Up */ + } + else + { + PPP_MODE_E = 'B'; /* Amplitude quantization is failing */ + } + } + else + { + } + + if ( PPP_MODE_E == 'B' ) + { + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + + if ( hSC_VBR->Q_to_F ) + { + hSC_VBR->patterncount += hSC_VBR->pattern_m; + + if ( hSC_VBR->patterncount >= 1000 ) + { + hSC_VBR->patterncount -= 1000; + PPP_MODE_E = 'B'; + hSC_VBR->bump_up = 1; + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; + } + } + + /* packetization of the delta lag in PPP */ + if ( PPP_MODE_E == 'Q' ) + { + Q_delta_lag = delta_lag_E + 11; /* to make it positive always */ + push_indice( hBstr, IND_DELTALAG, Q_delta_lag, 5 ); + } + + if ( ( error = WIsyn( *dtfs_temp, CURRP_Q_E, lpc2, &( hSC_VBR->ph_offset_E ), out, L_FRAME, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + + + DTFS_copy( dtfs_temp, *CURRP_Q_E ); + hSC_VBR->prev_cw_en = DTFS_getEngy( *CURRP_NQ ); + + /* Copy DTFS related parameters from 'dtfs_temp' to 'hSC_VBR' structure */ + hSC_VBR->dtfs_enc_lag = dtfs_temp->lag; + hSC_VBR->dtfs_enc_nH = dtfs_temp->nH; + hSC_VBR->dtfs_enc_nH_4kHz = dtfs_temp->nH_4kHz; + hSC_VBR->dtfs_enc_upper_cut_off_freq_of_interest = dtfs_temp->upper_cut_off_freq_of_interest; + hSC_VBR->dtfs_enc_upper_cut_off_freq = dtfs_temp->upper_cut_off_freq; + + mvr2r( dtfs_temp->a, hSC_VBR->dtfs_enc_a, MAXLAG_WI ); + mvr2r( dtfs_temp->b, hSC_VBR->dtfs_enc_b, MAXLAG_WI ); + + count_free( CURRP_NQ ); + count_free( TMPDTFS ); + count_free( TMPDTFS2 ); + count_free( TMPDTFS3 ); + count_free( CURRP_Q_E ); + count_free( dtfs_temp ); + + return error; +} + + +/*-------------------------------------------------------------------* + * SynthesisFilter() + * + * + *--------------------------------------------------------------------*/ + +static void SynthesisFilter( + float *output, + float *input, + float *coef, + float *memory, + int16_t order, + int16_t length ) +{ + int16_t i, j; + float acc; + + /* IIR filter for each subframe */ + for ( i = 0; i < length; i++ ) + { + for ( j = order - 1, acc = *input++; j > 0; j-- ) + { + acc -= coef[j] * memory[j]; + memory[j] = memory[j - 1]; + } + + acc -= coef[0] * memory[0]; + *output++ = acc; + memory[0] = acc; + } + + return; +} + + +/*---------------------------------------------------------------------* + * sc_vbr_enc_init() + * + * Initialize SC-VBR encoder + *---------------------------------------------------------------------*/ + +void sc_vbr_enc_init( + SC_VBR_ENC_HANDLE hSC_VBR /* i/o: SC-VBR encoder handle */ +) +{ + hSC_VBR->nelp_enc_seed = 0; + hSC_VBR->last_nelp_mode = 0; + hSC_VBR->pppcountE = 0; + hSC_VBR->last_ppp_mode = 0; + hSC_VBR->last_last_ppp_mode = 0; + hSC_VBR->firstTime_voicedenc = 1; + hSC_VBR->prev_ppp_gain_pit = 0.0; + hSC_VBR->prev_tilt_code = 0.0; + + hSC_VBR->ppp_mode = 0; + hSC_VBR->nelp_mode = 0; + + hSC_VBR->pattern_m = 0; + hSC_VBR->Last_Resort = 0; + hSC_VBR->set_ppp_generic = 0; + hSC_VBR->Q_to_F = 0; + + hSC_VBR->numactive = 0; /* keep the count of the frames inside current 600 frame bloack.*/ + hSC_VBR->sum_of_rates = 0.0f; /* sum of the rates of past 600 active frames*/ + hSC_VBR->global_avr_rate = 0.0f; /* global rate upto current time. recorded a (rate in kbps) *6000*/ + hSC_VBR->global_frame_cnt = 0; /* 600 active frame block count. Used to update the global rate*/ + + hSC_VBR->rate_control = 0; + hSC_VBR->SNR_THLD = 67.0f; + hSC_VBR->mode_QQF = 1; + + set_f( hSC_VBR->shape1_filt_mem, 0, 20 ); + set_f( hSC_VBR->shape2_filt_mem, 0, 20 ); + set_f( hSC_VBR->shape3_filt_mem, 0, 20 ); + set_f( hSC_VBR->txlpf1_filt1_mem, 0, 20 ); + set_f( hSC_VBR->txlpf1_filt2_mem, 0, 20 ); + set_f( hSC_VBR->txhpf1_filt1_mem, 0, 20 ); + set_f( hSC_VBR->txhpf1_filt2_mem, 0, 20 ); + + hSC_VBR->last_7k2_coder_type = GENERIC; + hSC_VBR->vbr_generic_ho = 0; + hSC_VBR->Local_VAD = 0; + + return; +} diff --git a/lib_enc/waveadjust_fec_cod.c b/lib_enc/waveadjust_fec_cod.c new file mode 100644 index 0000000000..e0b87477be --- /dev/null +++ b/lib_enc/waveadjust_fec_cod.c @@ -0,0 +1,73 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "prot.h" +#include "wmops.h" + +/*-------------------------------------------------------------------* + * SFM_Cal() + * + * + *--------------------------------------------------------------------*/ + +float SFM_Cal( + const float fcoef[], + const int16_t n ) +{ + int16_t i, k; + double geoMean = 0, arithMean = 0, SFM; + double tmp[4] = { 1, 1, 1, 1 }; + + for ( k = 0; k < 4; k++ ) + { + + for ( i = k * ( n >> 2 ); i < ( k + 1 ) * ( n >> 2 ); i++ ) + { + tmp[k] *= ( fabs( fcoef[i] ) + EPSILON ); + arithMean += fabs( fcoef[i] ); + } + } + geoMean = log( tmp[0] ) + log( tmp[1] ) + log( tmp[2] ) + log( tmp[3] ); + geoMean = geoMean / n; + geoMean = exp( geoMean ); + arithMean /= n; + SFM = ( geoMean + EPSILON ) / ( arithMean + EPSILON ); + + return (float) SFM; +} diff --git a/lib_util/audio_file_reader.c b/lib_util/audio_file_reader.c new file mode 100644 index 0000000000..d391735a94 --- /dev/null +++ b/lib_util/audio_file_reader.c @@ -0,0 +1,198 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "audio_file_reader.h" +#include "tinywavein_c.h" +#include +#include "wmops.h" + +struct AudioFileReader +{ + FILE *rawFile; + WAVEFILEIN *wavFile; + int16_t numChannels; +}; + +static int8_t AudioFileReader_open_raw( + AudioFileReader *self, + const char *fileName ) +{ + self->rawFile = fopen( fileName, "rb" ); + + return self->rawFile != NULL ? 0 : -1; +} + +static int8_t AudioFileReader_open_wav( + AudioFileReader *self, + const char *fileName, + uint32_t expSampleRate ) +{ + uint32_t sampleRate, samplesInFile; + int16_t bps; + + self->wavFile = OpenWav( fileName, &sampleRate, &self->numChannels, &samplesInFile, &bps ); + + if ( !self->wavFile ) + { + fprintf( stderr, "Failed to open input wav file: %s\n", fileName ); + return -1; + } + + if ( sampleRate != expSampleRate ) + { + fprintf( stderr, "Input wav file has unexpected samplerate (should be %d): %s\n", expSampleRate, fileName ); + return -1; + } + + return 0; +} + + +/*! r: AudioFileReader handle */ +ivas_error AudioFileReader_open( + AudioFileReader **audioReader, /* o : AudioFileReader handle */ + const char *fileName, /* i : path to wav/raw pcm file */ + uint32_t expSampleRate /* i : expected sample rate */ +) +{ + AudioFileReader *self; + const char *wavSuffix = ".wav"; + uint8_t retCode; + uint32_t fileNameLen, wavSuffixLen; + + *audioReader = NULL; + + if ( !fileName ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + fileNameLen = (uint32_t) strlen( fileName ); + wavSuffixLen = (uint32_t) strlen( wavSuffix ); + + if ( fileNameLen == 0 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + self = calloc( sizeof( AudioFileReader ), 1 ); + self->numChannels = 0; + + if ( fileNameLen > wavSuffixLen && strncmp( fileName + fileNameLen - wavSuffixLen, wavSuffix, wavSuffixLen ) == 0 ) + { + retCode = AudioFileReader_open_wav( self, fileName, expSampleRate ); + } + else + { + retCode = AudioFileReader_open_raw( self, fileName ); + } + + if ( retCode != 0 ) + { + AudioFileReader_close( &self ); + return IVAS_ERR_FAILED_FILE_OPEN; + } + + *audioReader = self; + + return IVAS_ERR_OK; +} + + +void AudioFileReader_close( + AudioFileReader **selfPtr /* i/o: pointer to AudioFileReader handle */ +) +{ + AudioFileReader *self; + if ( !selfPtr || !*selfPtr ) + { + return; + } + self = *selfPtr; + if ( self->rawFile ) + { + fclose( self->rawFile ); + self->rawFile = NULL; + } + else if ( self->wavFile ) + { + CloseWavIn( self->wavFile ); + self->wavFile = NULL; + } + free( self ); + *selfPtr = NULL; + + return; +} + + +/*! r: number of read samples */ +ivas_error AudioFileReader_read( + AudioFileReader *self, /* i/o: AudioFileReader handle */ + int16_t *samples, /* o : samples read from the opened file */ + const int16_t numSamples, /* i : number of samples to read */ + int16_t *numSamplesRead /* i : number of samples actualy read */ +) +{ + uint32_t numSamplesRead32 = 0; + ivas_error error = IVAS_ERR_OK; + + if ( self->rawFile ) + { + /* No errors possible here, numSamples != *numSamplesRead is a valid condition */ + *numSamplesRead = (int16_t) fread( samples, sizeof( int16_t ), numSamples, self->rawFile ); + } + + if ( self->wavFile ) + { + if ( ReadWavShort( self->wavFile, samples, numSamples, &numSamplesRead32 ) != __TWI_SUCCESS ) + { + error = IVAS_ERR_FAILED_FILE_READ; + } + + *numSamplesRead = (int16_t) numSamplesRead32; + } + + return error; +} + +/*! r: number of channels of the opened file */ +int16_t AudioFileReader_getNumChannels( + AudioFileReader *self /* i/o: AudioFileReader handle */ +) +{ + if ( self != NULL ) + { + return self->numChannels; + } + + return 0; +} diff --git a/lib_util/audio_file_reader.h b/lib_util/audio_file_reader.h new file mode 100644 index 0000000000..d878e3cab4 --- /dev/null +++ b/lib_util/audio_file_reader.h @@ -0,0 +1,68 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_AUDIO_FILE_READER_H +#define IVAS_AUDIO_FILE_READER_H + +#include +#include "ivas_error.h" + +struct AudioFileReader; +typedef struct AudioFileReader AudioFileReader; + +/* clang-format off */ + +ivas_error AudioFileReader_open( + AudioFileReader **audioReader, /* o : AudioFileReader handle */ + const char *fileName, /* i : path to wav/raw pcm file */ + uint32_t expSampleRate /* i : expected sample rate */ +); + +/*! r: number of read samples */ +ivas_error AudioFileReader_read( + AudioFileReader *self, /* i/o: AudioFileReader handle */ + int16_t *samples, /* o : samples read from the opened file */ + const int16_t numSamples, /* i : number of samples to read */ + int16_t *numSamplesRead /* i : number of samples actualy read */ +); + +/*! r: number of channels of the opened file */ +int16_t AudioFileReader_getNumChannels( + AudioFileReader *self /* i/o: AudioFileReader handle */ +); + +void AudioFileReader_close( + AudioFileReader **selfPtr /* i/o: pointer to AudioFileReader handle */ +); +/* clang-format on */ + +#endif /* IVAS_AUDIO_FILE_READER_H */ diff --git a/lib_util/audio_file_writer.c b/lib_util/audio_file_writer.c new file mode 100644 index 0000000000..af9c6ee0e6 --- /dev/null +++ b/lib_util/audio_file_writer.c @@ -0,0 +1,172 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "audio_file_writer.h" +#include "tinywaveout_c.h" +#include +#include +#include "wmops.h" + +struct AudioFileWriter +{ + FILE *rawFile; + WAVEFILEOUT *wavFile; +}; + +static int8_t AudioFileWriter_open_raw( + AudioFileWriter *self, + const char *fileName ) +{ + self->rawFile = fopen( fileName, "wb" ); + return self->rawFile != NULL ? 0 : -1; +} + +static int8_t AudioFileWriter_open_wav( + AudioFileWriter *self, + const char *fileName, + uint32_t sampleRate, + uint32_t numChannels ) +{ + self->wavFile = CreateWav( fileName, sampleRate, numChannels, 16 ); + if ( !self->wavFile ) + { + fprintf( stderr, "Failed to open output wav file: %s\n", fileName ); + return -1; + } + return 0; +} + + +ivas_error AudioFileWriter_open( + AudioFileWriter **afWriter, + const char *fileName, + uint32_t sampleRate, + uint32_t numChannels ) +{ + AudioFileWriter *self; + const char *wavSuffix = ".wav"; + + *afWriter = NULL; + + if ( !fileName ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + uint32_t fileNameLen = (uint32_t) strlen( fileName ); + uint32_t wavSuffixLen = (uint32_t) strlen( wavSuffix ); + + if ( fileNameLen == 0 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + self = calloc( sizeof( AudioFileWriter ), 1 ); + if ( self == NULL ) + { + return IVAS_ERR_FAILED_ALLOC; + } + + int8_t retCode; + + if ( fileNameLen > wavSuffixLen && strncmp( fileName + fileNameLen - wavSuffixLen, wavSuffix, wavSuffixLen ) == 0 ) + { + retCode = AudioFileWriter_open_wav( self, fileName, sampleRate, numChannels ); + } + else + { + retCode = AudioFileWriter_open_raw( self, fileName ); + } + + if ( retCode != 0 ) + { + AudioFileWriter_close( &self ); + return IVAS_ERR_FAILED_FILE_OPEN; + } + + *afWriter = self; + + return IVAS_ERR_OK; +} + + +void AudioFileWriter_close( + AudioFileWriter **selfPtr ) +{ + AudioFileWriter *self; + if ( !selfPtr || !*selfPtr ) + { + return; + } + self = *selfPtr; + if ( self->rawFile ) + { + fclose( self->rawFile ); + self->rawFile = NULL; + } + else if ( self->wavFile ) + { + CloseWav( self->wavFile ); + self->wavFile = NULL; + } + free( self ); + *selfPtr = NULL; + + return; +} + + +ivas_error AudioFileWriter_write( + AudioFileWriter *self, + int16_t *samples, + uint32_t numSamples ) +{ + ivas_error error = IVAS_ERR_OK; + + if ( self->rawFile ) + { + if ( fwrite( samples, sizeof( int16_t ), numSamples, self->rawFile ) != numSamples ) + { + error = IVAS_ERR_FAILED_FILE_WRITE; + } + } + + if ( self->wavFile ) + { + if ( WriteWavShort( self->wavFile, samples, numSamples ) != __TWO_SUCCESS ) + { + error = IVAS_ERR_FAILED_FILE_WRITE; + } + } + + return error; +} diff --git a/lib_util/audio_file_writer.h b/lib_util/audio_file_writer.h new file mode 100644 index 0000000000..cd7d2ce5d2 --- /dev/null +++ b/lib_util/audio_file_writer.h @@ -0,0 +1,61 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_AUDIO_FILE_WRITER_H +#define IVAS_AUDIO_FILE_WRITER_H + +#include +#include "ivas_error.h" + +struct AudioFileWriter; +typedef struct AudioFileWriter AudioFileWriter; + +/* clang-format off */ +ivas_error AudioFileWriter_open( + AudioFileWriter **afWriter, /* o : AudioFileWriter handle */ + const char *fileName, /* i : path to wav/raw pcm file */ + uint32_t sampleRate, /* i : sample rate of output file */ + uint32_t numChannels /* i : number of channels in output file */ +); + +ivas_error AudioFileWriter_write( + AudioFileWriter *self, /* i/o: AudioFileReader handle */ + int16_t *samples, /* i : samples to write to output file */ + uint32_t numSamples /* i : number of samples to write */ +); + +void AudioFileWriter_close( + AudioFileWriter **selfPtr /* i/o: pointer to AudioFileReader handle */ +); +/* clang-format on */ + +#endif /* IVAS_AUDIO_FILE_WRITER_H */ diff --git a/lib_util/bitstream_reader.c b/lib_util/bitstream_reader.c new file mode 100644 index 0000000000..caa8b52c59 --- /dev/null +++ b/lib_util/bitstream_reader.c @@ -0,0 +1,331 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "bitstream_reader.h" +#include "g192.h" +#include "mime_io.h" +#include "ivas_error.h" +#include "ivas_error_utils.h" +#include +#include + + +struct BS_Reader +{ + void *hFormatReader; + + /* clang-format off */ + /* Depending on the requested bitstream format, function pointers below should be set to corresponding wrapper functions. + * `open_filename` and `close` must be implemented for all supported formats, all other functions are optional */ + + /* Allocate hFormatReader and open file with given file name */ + ivas_error ( *open_filename )( void *phFormatReader, const char *filename ); + + /* Close file open by hFormatReader and then free hFormatReader. Even if an error occurs, + * all memory is expected to be freed and (*phFormatReader) set to NULL */ + ivas_error ( *close )( void *phFormatReader); + + /* Rewind file open by hFormatReader */ + ivas_error ( *rewind )( void *hFormatReader ); + + /* Read one frame from open file into a serial bitstream buffer, with each uint16_t representing one bit. */ + ivas_error ( *read_frame_short )( void *hFormatReader, uint16_t *serial, int16_t *num_bits, int16_t *bfi ); + + /* Read one VoIP frame from open file into a bitstream byte buffer. */ + ivas_error ( *read_voip_frame_compact )( void *hFormatReader, uint8_t *serial, int16_t *num_bits, uint16_t *rtpSequenceNumber, uint32_t *rtpTimeStamp, uint32_t *rcvTime_ms ); + /* clang-format on */ +}; + +/*-----------------------------------------------------------------------* + * G192 wrapper functions + *-----------------------------------------------------------------------*/ + +static ivas_error convert_g192_error( int32_t g192_error ) +{ + switch ( g192_error ) + { + case G192_NO_ERROR: + return IVAS_ERR_OK; + case G192_MEMORY_ERROR: + return IVAS_ERR_FAILED_ALLOC; + case G192_WRONG_PARAMS: + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + case G192_INIT_ERROR: + return IVAS_ERR_NOT_CONFIGURED; + case G192_READ_ERROR: + return IVAS_ERR_FAILED_FILE_READ; + case G192_FILE_NOT_FOUND: + return IVAS_ERR_FAILED_FILE_OPEN; + case G192_INVALID_DATA: + return IVAS_ERR_BITSTREAM_READER_INVALID_DATA; + case G192_NOT_IMPLEMENTED: + return IVAS_ERR_NOT_IMPLEMENTED; + case G192_NOT_INITIALIZED: + return IVAS_ERR_NOT_CONFIGURED; + case G192_EOF: + return IVAS_ERR_END_OF_FILE; + default: + break; + } + + return IVAS_ERR_UNKNOWN; +} + +static ivas_error g192_open_filename( void *phFormatReader, const char *filename ) +{ + return convert_g192_error( G192_Reader_Open_filename( (G192_HANDLE *) phFormatReader, filename ) ); +} + +static ivas_error g192_close( void *phFormatReader ) +{ + return convert_g192_error( G192_Reader_Close( (G192_HANDLE *) phFormatReader ) ); +} + +static ivas_error g192_rewind( void *hFormatReader ) +{ + return convert_g192_error( G192_Reader_Rewind( (G192_HANDLE) hFormatReader ) ); +} + +static ivas_error g192_read_frame_short( void *hFormatReader, uint16_t *serial, int16_t *num_bits, int16_t *bfi ) +{ + return convert_g192_error( G192_ReadFrame_short( (G192_HANDLE) hFormatReader, serial, num_bits, bfi ) ); +} + +static ivas_error g192_read_voip_frame_compact( void *hFormatReader, uint8_t *serial, int16_t *num_bits, uint16_t *rtpSequenceNumber, uint32_t *rtpTimeStamp, uint32_t *rcvTime_ms ) +{ + return convert_g192_error( G192_ReadVoipFrame_compact( (G192_HANDLE) hFormatReader, serial, num_bits, rtpSequenceNumber, rtpTimeStamp, rcvTime_ms ) ); +} + +static void init_for_g192( BS_READER_HANDLE hBsReader ) +{ + /* Note: functions on RHS must have exactly the same signature as the corresponding + * function pointer expects, otherwise we are in UB territory */ + hBsReader->open_filename = g192_open_filename; + hBsReader->close = g192_close; + hBsReader->rewind = g192_rewind; + hBsReader->read_frame_short = g192_read_frame_short; + hBsReader->read_voip_frame_compact = g192_read_voip_frame_compact; +} + +/*-----------------------------------------------------------------------* + * MIME wrapper functions + *-----------------------------------------------------------------------*/ + +static ivas_error convert_mime_error( int32_t mime_error ) +{ + switch ( mime_error ) + { + case MIME_NO_ERROR: + return IVAS_ERR_OK; + case MIME_MEMORY_ERROR: + return IVAS_ERR_FAILED_ALLOC; + case MIME_WRONG_PARAMS: + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + case MIME_FILE_NOT_FOUND: + return IVAS_ERR_FAILED_FILE_OPEN; + case MIME_NOT_INITIALIZED: + return IVAS_ERR_NOT_CONFIGURED; + case MIME_READ_ERROR: + return IVAS_ERR_FAILED_FILE_READ; + case MIME_INVALID_DATA: + return IVAS_ERR_BITSTREAM_READER_INVALID_DATA; + case MIME_EOF: + return IVAS_ERR_END_OF_FILE; + default: + break; + } + + return IVAS_ERR_UNKNOWN; +} + +static ivas_error mime_open_filename( void *phFormatReader, const char *filename ) +{ + return convert_mime_error( MIME_Reader_Open_filename( (MIME_HANDLE *) phFormatReader, filename ) ); +} + +static ivas_error mime_close( void *phFormatReader ) +{ + return convert_mime_error( MIME_Reader_Close( (MIME_HANDLE *) phFormatReader ) ); +} + +static ivas_error mime_rewind( void *hFormatReader ) +{ + return convert_mime_error( MIME_Reader_Rewind( (MIME_HANDLE) hFormatReader ) ); +} + +static ivas_error mime_read_frame_short( void *hFormatReader, uint16_t *serial, int16_t *num_bits, int16_t *bfi ) +{ + return convert_mime_error( MIME_ReadFrame_short( (MIME_HANDLE) hFormatReader, serial, num_bits, bfi ) ); +} + +static void init_for_mime( BS_READER_HANDLE hBsReader ) +{ + /* Note: functions on RHS must have exactly the same signature as the corresponding + * function pointer expects, otherwise we are in UB territory */ + hBsReader->open_filename = mime_open_filename; + hBsReader->close = mime_close; + hBsReader->rewind = mime_rewind; + hBsReader->read_frame_short = mime_read_frame_short; +} + +/*-----------------------------------------------------------------------* + * API functions implementation + *-----------------------------------------------------------------------*/ + +static ivas_error init_for_format( BS_READER_HANDLE *phBsReader, BS_READER_FORMAT format ) +{ + /* Allocate memory under handle and check if allocation successful */ + ( *phBsReader ) = (BS_READER_HANDLE) malloc( sizeof( struct BS_Reader ) ); + if ( *phBsReader == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "could not allocate bitstream reader" ); + } + + /* Initialize all struct members to NULL - supported functions + * will be overwritten below in init_for_ */ + BS_READER_HANDLE hBsReader = *phBsReader; + memset( hBsReader, 0, sizeof( struct BS_Reader ) ); + + /* Set function pointers to selected format */ + switch ( format ) + { + case BS_READER_FORMAT_G192: + init_for_g192( hBsReader ); + break; + case BS_READER_FORMAT_MIME: + init_for_mime( hBsReader ); + break; + default: + BS_Reader_Close( phBsReader ); + return IVAS_ERR_BITSTREAM_READER_INVALID_FORMAT; + } + + return IVAS_ERR_OK; +} + +ivas_error BS_Reader_Open_filename( BS_READER_HANDLE *phBsReader, const char *filename, BS_READER_FORMAT format ) +{ + ivas_error error = IVAS_ERR_OK; + + /* Check if pointers valid */ + if ( phBsReader == NULL || filename == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + /* Allocate and set up for the requested format */ + if ( ( error = init_for_format( phBsReader, format ) ) != IVAS_ERR_OK ) + { + goto cleanup; + } + + /* Open file with the handle of the selected format */ + BS_READER_HANDLE hBsReader = *phBsReader; + if ( ( error = hBsReader->open_filename( &hBsReader->hFormatReader, filename ) ) != IVAS_ERR_OK ) + { + goto cleanup; + } + + return IVAS_ERR_OK; + +cleanup: + + BS_Reader_Close( phBsReader ); + return error; +} + +ivas_error BS_Reader_Rewind( BS_READER_HANDLE hBsReader ) +{ + if ( hBsReader == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hBsReader->rewind == NULL ) + { + return IVAS_ERR_NOT_IMPLEMENTED; + } + + return hBsReader->rewind( hBsReader->hFormatReader ); +} + +ivas_error BS_Reader_ReadFrame_short( BS_READER_HANDLE hBsReader, uint16_t *serial, int16_t *num_bits, int16_t *bfi ) +{ + if ( hBsReader == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hBsReader->read_frame_short == NULL ) + { + return IVAS_ERR_NOT_IMPLEMENTED; + } + + return hBsReader->read_frame_short( hBsReader->hFormatReader, serial, num_bits, bfi ); +} + +ivas_error BS_Reader_ReadVoipFrame_compact( BS_READER_HANDLE hBsReader, uint8_t *serial, int16_t *num_bits, uint16_t *rtpSequenceNumber, uint32_t *rtpTimeStamp, uint32_t *rcvTime_ms ) +{ + if ( hBsReader == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hBsReader->read_voip_frame_compact == NULL ) + { + return IVAS_ERR_NOT_IMPLEMENTED; + } + + return hBsReader->read_voip_frame_compact( hBsReader->hFormatReader, serial, num_bits, rtpSequenceNumber, rtpTimeStamp, rcvTime_ms ); +} + + +ivas_error BS_Reader_Close( BS_READER_HANDLE *phBsReader ) +{ + if ( phBsReader == NULL || *phBsReader == NULL ) + { + return IVAS_ERR_OK; + } + + BS_READER_HANDLE hBsReader = *phBsReader; + ivas_error error = IVAS_ERR_OK; + + if ( hBsReader->close != NULL ) + { + error = hBsReader->close( &( hBsReader )->hFormatReader ); + } + + free( hBsReader ); + *phBsReader = NULL; + + return error; +} diff --git a/lib_util/bitstream_reader.h b/lib_util/bitstream_reader.h new file mode 100644 index 0000000000..2b750566eb --- /dev/null +++ b/lib_util/bitstream_reader.h @@ -0,0 +1,72 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef BITSTREAM_READER_H +#define BITSTREAM_READER_H + +#include "options.h" +#include "ivas_error.h" +#include + + +/*-----------------------------------------------------------------------* + * Enums + *-----------------------------------------------------------------------*/ + +typedef enum BS_READER_FORMAT +{ + BS_READER_FORMAT_G192 = 0, + BS_READER_FORMAT_MIME = 1, +} BS_READER_FORMAT; + +/*-----------------------------------------------------------------------* + * Structures + *-----------------------------------------------------------------------*/ + +typedef struct BS_Reader *BS_READER_HANDLE; + +/*-----------------------------------------------------------------------* + * Functions + *-----------------------------------------------------------------------*/ + +ivas_error BS_Reader_Open_filename( BS_READER_HANDLE *phBsReader, const char *filename, BS_READER_FORMAT format ); + +ivas_error BS_Reader_Rewind( BS_READER_HANDLE hBsReader ); + +ivas_error BS_Reader_ReadFrame_short( BS_READER_HANDLE hBsReader, uint16_t *serial, int16_t *num_bits, int16_t *bfi ); + +ivas_error BS_Reader_ReadVoipFrame_compact( BS_READER_HANDLE hBsReader, uint8_t *serial, int16_t *num_bits, uint16_t *rtpSequenceNumber, uint32_t *rtpTimeStamp, uint32_t *rcvTime_ms ); + +ivas_error BS_Reader_Close( BS_READER_HANDLE *phBsReader ); + + +#endif /* BITSTREAM_READER_H */ diff --git a/lib_util/bitstream_writer.c b/lib_util/bitstream_writer.c new file mode 100644 index 0000000000..c133ceba25 --- /dev/null +++ b/lib_util/bitstream_writer.c @@ -0,0 +1,252 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "bitstream_writer.h" +#include "g192.h" +#include "mime_io.h" +#include "ivas_error.h" +#include "ivas_error_utils.h" +#include +#include + + +struct BS_Writer +{ + void *hFormatWriter; + + /* clang-format off */ + ivas_error ( *open_filename )( void *phFormatWriter, const char *filename ); + ivas_error ( *close )( void *phFormatWriter ); + ivas_error ( *write_frame_short )( void *hFormatWriter, const uint16_t *serial, int32_t num_bits, int32_t frame_bitrate ); + /* clang-format on */ +}; + +/*-----------------------------------------------------------------------* + * G192 wrapper functions + *-----------------------------------------------------------------------*/ + +static ivas_error convert_g192_error( int32_t g192_error ) +{ + switch ( g192_error ) + { + case G192_NO_ERROR: + return IVAS_ERR_OK; + case G192_MEMORY_ERROR: + return IVAS_ERR_FAILED_ALLOC; + case G192_WRONG_PARAMS: + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + case G192_INIT_ERROR: + return IVAS_ERR_INIT_ERROR; + case G192_WRITE_ERROR: + return IVAS_ERR_FAILED_FILE_READ; + case G192_NOT_IMPLEMENTED: + return IVAS_ERR_NOT_IMPLEMENTED; + case G192_NOT_INITIALIZED: + return IVAS_ERR_NOT_CONFIGURED; + } + + return IVAS_ERR_UNKNOWN; +} + +static ivas_error g192_open_filename( void *phFormatWriter, const char *filename ) +{ + return convert_g192_error( G192_Writer_Open_filename( (G192_HANDLE *) phFormatWriter, filename ) ); +} + +static ivas_error g192_close( void *phFormatWriter ) +{ + return convert_g192_error( G192_Writer_Close( (G192_HANDLE *) phFormatWriter ) ); +} + +static ivas_error g192_write_frame_short( void *hFormatWriter, const uint16_t *serial, int32_t num_bits, int32_t frame_bitrate ) +{ + (void) frame_bitrate; /* Unused */ + return convert_g192_error( G192_WriteFrame( (G192_HANDLE) hFormatWriter, serial, (int16_t) num_bits ) ); +} + +static void init_for_g192( BS_WRITER_HANDLE hBsWriter ) +{ + /* Note: functions on RHS must have exactly the same signature as the corresponding + * function pointer expects, otherwise we are in UB territory */ + hBsWriter->open_filename = g192_open_filename; + hBsWriter->close = g192_close; + hBsWriter->write_frame_short = g192_write_frame_short; +} + +/*-----------------------------------------------------------------------* + * MIME wrapper functions + *-----------------------------------------------------------------------*/ + +static ivas_error convert_mime_error( int32_t mime_error ) +{ + switch ( mime_error ) + { + case MIME_NO_ERROR: + return IVAS_ERR_OK; + case MIME_MEMORY_ERROR: + return IVAS_ERR_FAILED_ALLOC; + case MIME_WRONG_PARAMS: + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + case MIME_NOT_INITIALIZED: + return IVAS_ERR_NOT_CONFIGURED; + case MIME_WRITE_ERROR: + return IVAS_ERR_FAILED_FILE_READ; + } + + return IVAS_ERR_UNKNOWN; +} + +static ivas_error mime_open_filename( void *phFormatWriter, const char *filename ) +{ + return convert_mime_error( MIME_Writer_Open_filename( (MIME_HANDLE *) phFormatWriter, filename ) ); +} + +static ivas_error mime_close( void *phFormatWriter ) +{ + return convert_mime_error( MIME_Writer_Close( (MIME_HANDLE *) phFormatWriter ) ); +} + +static ivas_error mime_write_frame_short( void *hFormatWriter, const uint16_t *serial, int32_t num_bits, int32_t frame_bitrate ) +{ + return convert_mime_error( MIME_WriteFrame( (MIME_HANDLE) hFormatWriter, serial, (int16_t) num_bits, frame_bitrate ) ); +} + +static void init_for_mime( BS_WRITER_HANDLE hBsWriter ) +{ + /* Note: functions on RHS must have exactly the same signature as the corresponding + * function pointer expects, otherwise we are in UB territory */ + hBsWriter->open_filename = mime_open_filename; + hBsWriter->close = mime_close; + hBsWriter->write_frame_short = mime_write_frame_short; +} + + +/*-----------------------------------------------------------------------* + * API functions implementation + *-----------------------------------------------------------------------*/ + +static ivas_error init_for_format( BS_WRITER_HANDLE *phBsWriter, BS_WRITER_FORMAT format ) +{ + /* Allocate memory under handle and check if allocation successful */ + ( *phBsWriter ) = (BS_WRITER_HANDLE) malloc( sizeof( struct BS_Writer ) ); + if ( *phBsWriter == NULL ) + { + IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "could not allocate bitstream writer" ); + } + + /* Initialize all struct members to NULL - supported functions + * will be overwritten below in init_for_ */ + BS_WRITER_HANDLE hBsWriter = *phBsWriter; + memset( hBsWriter, 0, sizeof( struct BS_Writer ) ); + + /* Set function pointers to selected format */ + switch ( format ) + { + case BS_WRITER_FORMAT_G192: + init_for_g192( hBsWriter ); + break; + case BS_WRITER_FORMAT_MIME: + init_for_mime( hBsWriter ); + break; + default: + BS_Writer_Close( phBsWriter ); + return IVAS_ERR_BITSTREAM_WRITER_INVALID_FORMAT; + } + + return IVAS_ERR_OK; +} + +ivas_error BS_Writer_Open_filename( BS_WRITER_HANDLE *phBsWriter, const char *filename, BS_WRITER_FORMAT format ) +{ + ivas_error error = IVAS_ERR_OK; + + /* Check if pointers valid */ + if ( phBsWriter == NULL || filename == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + /* Allocate and set up for the requested format */ + if ( ( error = init_for_format( phBsWriter, format ) ) != IVAS_ERR_OK ) + { + goto cleanup; + } + + /* Open file with the handle of the selected format */ + BS_WRITER_HANDLE hBsWriter = *phBsWriter; + if ( ( error = hBsWriter->open_filename( &hBsWriter->hFormatWriter, filename ) ) != IVAS_ERR_OK ) + { + goto cleanup; + } + + return IVAS_ERR_OK; + +cleanup: + BS_Writer_Close( phBsWriter ); + return error; +} + +ivas_error BS_Writer_WriteFrame_short( BS_WRITER_HANDLE hBsWriter, const uint16_t *serial, int32_t numBits, int32_t frameBitrate ) +{ + if ( hBsWriter == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + if ( hBsWriter->write_frame_short == NULL ) + { + return IVAS_ERR_NOT_IMPLEMENTED; + } + + return hBsWriter->write_frame_short( hBsWriter->hFormatWriter, serial, numBits, frameBitrate ); +} + +ivas_error BS_Writer_Close( BS_WRITER_HANDLE *phBsWriter ) +{ + if ( phBsWriter == NULL || *phBsWriter == NULL ) + { + return IVAS_ERR_OK; + } + + BS_WRITER_HANDLE hBsWriter = *phBsWriter; + ivas_error error = IVAS_ERR_OK; + + if ( hBsWriter->close != NULL ) + { + error = hBsWriter->close( &( hBsWriter )->hFormatWriter ); + } + + free( hBsWriter ); + *phBsWriter = NULL; + + return error; +} diff --git a/lib_util/bitstream_writer.h b/lib_util/bitstream_writer.h new file mode 100644 index 0000000000..9a8acc8106 --- /dev/null +++ b/lib_util/bitstream_writer.h @@ -0,0 +1,67 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef BITSTREAM_WRITER_H +#define BITSTREAM_WRITER_H + +#include +#include "ivas_error.h" + + +/*-----------------------------------------------------------------------* + * Enums + *-----------------------------------------------------------------------*/ + +typedef enum BS_WRITER_FORMAT +{ + BS_WRITER_FORMAT_G192 = 0, + BS_WRITER_FORMAT_MIME = 1, +} BS_WRITER_FORMAT; + +/*-----------------------------------------------------------------------* + * Structures + *-----------------------------------------------------------------------*/ + +typedef struct BS_Writer *BS_WRITER_HANDLE; + +/*-----------------------------------------------------------------------* + * Functions + *-----------------------------------------------------------------------*/ + +ivas_error BS_Writer_Open_filename( BS_WRITER_HANDLE *phBsWriter, const char *filename, BS_WRITER_FORMAT format ); + +ivas_error BS_Writer_WriteFrame_short( BS_WRITER_HANDLE hBsWriter, const uint16_t *serial, int32_t numBits, int32_t frameBitrate ); + +ivas_error BS_Writer_Close( BS_WRITER_HANDLE *phBsWriter ); + + +#endif /* BITSTREAM_WRITER_H */ diff --git a/lib_util/cmdl_tools.c b/lib_util/cmdl_tools.c new file mode 100644 index 0000000000..aee640a17e --- /dev/null +++ b/lib_util/cmdl_tools.c @@ -0,0 +1,80 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "cmdl_tools.h" + +/*---------------------------------------------------------------------* + * to_upper() + * + * Capitalize all letters of a string. + *---------------------------------------------------------------------*/ + +char *to_upper( char *str ) +{ + int16_t i; + + i = 0; + while ( str[i] != 0 ) + { + if ( str[i] >= 'a' && str[i] <= 'z' ) + { + str[i] += 'A' - 'a'; + } + i++; + } + + return str; +} + + +/*---------------------------------------------------------------------* + * is_digits_only() + * + * Check if a string contains only digits. + *---------------------------------------------------------------------*/ + +bool is_digits_only( char *str ) +{ + int16_t i; + + i = 0; + while ( str[i] != 0 ) + { + if ( str[i] < '0' || str[i] > '9' ) + { + return false; + } + i++; + } + + return true; +} diff --git a/lib_util/cmdl_tools.h b/lib_util/cmdl_tools.h new file mode 100644 index 0000000000..3bc9cb81f7 --- /dev/null +++ b/lib_util/cmdl_tools.h @@ -0,0 +1,44 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef CMDL_TOOLS_H +#define CMDL_TOOLS_H + +#include +#include + +bool is_digits_only( char *str ); + +char *to_upper( char *str ); + + +#endif /* CMDL_TOOLS_H */ diff --git a/lib_util/evs_rtp_payload.c b/lib_util/evs_rtp_payload.c new file mode 100644 index 0000000000..67dcaa6f36 --- /dev/null +++ b/lib_util/evs_rtp_payload.c @@ -0,0 +1,305 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "evs_rtp_payload.h" + +static void evsPayload_unpackFrame_compact_amrWbIo( const char *payload, uint16_t payloadSizeBits, uint16_t iProtectedSize, unsigned char **framePtr, uint16_t *frameSizeInBits ) +{ + uint16_t i, iBit0; + unsigned char d0, *frame = *framePtr; + /* ignore 3 bit CMR and padding bits for EVS AMR-WB IO */ + if ( iProtectedSize == 2 ) + { /* EVS AMR-WB IO 6.6 */ + *frameSizeInBits = payloadSizeBits - 4; + } + else if ( iProtectedSize == 5 ) + { /* EVS AMR-WB IO 8.85 */ + *frameSizeInBits = payloadSizeBits - 7; + } + else + { + *frameSizeInBits = payloadSizeBits - 3; + } + iBit0 = *frameSizeInBits + 3 - 1; + d0 = ( ( (unsigned char) payload[iBit0 / 8] ) >> ( 7 - ( iBit0 % 8 ) ) ) & 0x01; + frame[0] = ( d0 << 7 ) | ( ( payload[0] & 0x1f ) << 2 ); /* d(1..5) */ + ++payload; + for ( i = 1; i != ( payloadSizeBits + 7 ) / 8; ++i ) + { + *frame++ |= ( *payload & 0xc0 ) >> 6; + *frame = ( *payload & 0x3f ) << 2; + ++payload; + } + assert( frame == *framePtr + ( *frameSizeInBits + 7 ) / 8 - 1 ); + /* last payload byte contained d(0), clear it */ + ( *framePtr )[*frameSizeInBits / 8] &= ~( 0x80 >> ( *frameSizeInBits % 8 ) ); +} + +static void evsPayload_unpackFrame_compact_evsPrimary( char *payload, uint16_t payloadSizeBits, unsigned char **framePtr, uint16_t *frameSizeInBits ) +{ + *framePtr = (unsigned char *) payload; /* no need to copy frame bytes */ + *frameSizeInBits = payloadSizeBits; +} + + +static void evsPayload_unpackFrame_compact( char *payload, uint16_t payloadSizeBits, uint16_t iProtectedSize, bool *isAMRWB_IOmode, uint16_t *frameTypeIndex, unsigned char **framePtr, uint16_t *frameSizeInBits ) +{ + if ( iProtectedSize == 1 ) + { /* A.2.1.3 Special case for 56 bit payload size (EVS Primary or EVS AMR-WB IO SID) */ + assert( ( payload[0] & 0x80 ) == 0 ); /* AMR-WB IO SID has no compact format and therefore is handled outside this function */ + *isAMRWB_IOmode = false; + *frameTypeIndex = 0; /* PRIMARY_2800 */ + } + else + { + *isAMRWB_IOmode = evsPayloadProtectedSizes_isAMRWB_IOmode[iProtectedSize]; + *frameTypeIndex = evsPayloadProtectedSizes_frameTypeIndex[iProtectedSize]; + } + if ( *isAMRWB_IOmode ) + { + evsPayload_unpackFrame_compact_amrWbIo( payload, payloadSizeBits, iProtectedSize, framePtr, frameSizeInBits ); + } + else + { + evsPayload_unpackFrame_compact_evsPrimary( payload, payloadSizeBits, framePtr, frameSizeInBits ); + } +} + +bool evsPayload_unpackFrame( bool hf_only, char *payload, uint16_t payloadSizeBytes, uint16_t frameIndex, bool *isAMRWB_IOmode, bool *frameFollowing, uint16_t *frameTypeIndex, bool *qBit, unsigned char **framePtr, uint16_t *frameSizeInBits ) +{ + uint16_t payloadSizeBits = payloadSizeBytes * 8; + bool specialCaseIoSid = payloadSizeBits == 56 && ( payload[0] & 0x80 ); /* A.2.1.3 Special case for 56 bit payload size */ + if ( !hf_only && !specialCaseIoSid ) + { /* A.2.3.1 Default format handling */ + uint16_t i; + for ( i = 0; i != sizeof( evsPayloadProtectedSizes ) / sizeof( evsPayloadProtectedSizes )[0]; ++i ) + { + if ( payloadSizeBits == evsPayloadProtectedSizes[i] ) + { + assert( frameIndex == 0 ); + *frameFollowing = false; + *qBit = true; + evsPayload_unpackFrame_compact( payload, payloadSizeBits, i, isAMRWB_IOmode, frameTypeIndex, framePtr, frameSizeInBits ); + return true; + } + } + } /* else: A.2.3.2 Header-Full-only format handling */ + return evsHeaderFullPayload_unpackFrame( payload, payloadSizeBytes, frameIndex, isAMRWB_IOmode, + frameFollowing, frameTypeIndex, qBit, framePtr, frameSizeInBits ); +} + +static void evsHeaderFullPayload_parseToc( uint8_t toc, bool *isAMRWB_IOmode, bool *frameFollowing, uint16_t *frameTypeIndex, bool *qBit, int32_t *bitrate ) +{ + bool evsModeBit = ( toc & 0x20 ) != 0; + *isAMRWB_IOmode = evsModeBit; + *frameFollowing = ( toc & 0x40 ) != 0; + *frameTypeIndex = toc & 0x0f; + if ( !*isAMRWB_IOmode ) + { + *qBit = true; /* assume good q_bit for the unused EVS-mode bit */ + *bitrate = PRIMARYmode2rate[*frameTypeIndex]; + } + else + { + *qBit = ( toc & 0x10 ) != 0; + *bitrate = AMRWB_IOmode2rate[*frameTypeIndex]; + } +} + +bool evsPayload_getFrameTypeFromSize( int16_t frameSizeBits, bool *isAMRWB_IOmode, uint16_t *frameTypeIndex ) +{ + int16_t i; + int32_t rate; + rate = frameSizeBits * 50; + if ( rate == 0 ) + { + assert( 0 ); /* VOIP_G192_RTP should not transmit empty frames */ + return false; /* no information available */ + } + for ( i = 0; i <= 9; ++i ) + { + if ( rate == AMRWB_IOmode2rate[i] ) + { + *isAMRWB_IOmode = true; + *frameTypeIndex = i; + return true; + } + } + for ( i = 0; i <= 12; ++i ) + { + if ( rate == PRIMARYmode2rate[i] ) + { + *isAMRWB_IOmode = false; + *frameTypeIndex = i; + return true; + } + } + return false; +} + +bool evsHeaderFullPayload_unpackFrame( char *payload, uint16_t payloadSizeBytes, uint16_t frameIndex, bool *isAMRWB_IOmode, bool *frameFollowing, uint16_t *frameTypeIndex, bool *qBit, unsigned char **frame, uint16_t *frameSizeInBits ) +{ + bool someIsAMRWB_IOmode, someFrameFollowing = true, someQBit; + uint16_t someFrameTypeIndex, someFrameSizeInBits; + int32_t bitrate; + uint16_t iFrame; + if ( payloadSizeBytes < 1 ) + { + fprintf( stderr, "Error: payload too small to parse ToC\n" ); + return false; + } + /* skip CMR */ + if ( *payload & 0x80 ) + { + ++payload; + --payloadSizeBytes; + } + /* parse all ToC entries */ + *frame = (unsigned char *) payload; /* no need to copy frame bytes */ + for ( iFrame = 0; someFrameFollowing; ++iFrame ) + { + if ( (int16_t) payloadSizeBytes <= 0 ) + { + fprintf( stderr, "Error: payload too small\n" ); + return false; + } + if ( *payload & 0x80 ) + { + fprintf( stderr, "Error: expected ToC, found CMR\n" ); + return false; + } + evsHeaderFullPayload_parseToc( *payload, &someIsAMRWB_IOmode, &someFrameFollowing, &someFrameTypeIndex, &someQBit, &bitrate ); + if ( bitrate < 0 ) + { + fprintf( stderr, "Error: unexpected frameTypeIndex in ToC\n" ); + return false; + } + ++payload; + ++*frame; + someFrameSizeInBits = (uint16_t) ( bitrate / 50 ); + /* just keep/copy zero padding bits + * in case of AMRWB_IO_SID the STI bit and CMI bits following the SID_1k75 frame are also kept (A.2.2.1.3) */ + payloadSizeBytes -= 1 + ( someFrameSizeInBits + 7 ) / 8; + if ( iFrame < frameIndex ) + { + *frame += ( someFrameSizeInBits + 7 ) / 8; + if ( !someFrameFollowing ) + { + fprintf( stderr, "Error: expected ToC with F bit set\n" ); + return false; + } + } + else if ( iFrame == frameIndex ) + { + *isAMRWB_IOmode = someIsAMRWB_IOmode; + *frameFollowing = someFrameFollowing; + *frameTypeIndex = someFrameTypeIndex; + *qBit = someQBit; + *frameSizeInBits = someFrameSizeInBits; + } + if ( (int16_t) payloadSizeBytes < 0 ) + { + fprintf( stderr, "Error: payload too small for frame %u data\n", frameIndex ); + return false; + } + } + return true; +} + +EVS_RTPDUMP_DEPACKER_ERROR EVS_RTPDUMP_DEPACKER_open( EVS_RTPDUMP_DEPACKER *self, FILE *file, bool hf_only ) +{ + RTPDUMP_ERROR rtpdumpError; + self->hf_only = hf_only; + self->frameFollowing = false; + rtpdumpError = RTPDUMP_OpenWithFileToRead( &self->rtpdump, file ); + if ( rtpdumpError != RTPDUMP_NO_ERROR ) + { + return EVS_RTPDUMP_DEPACKER_RTPDUMP_ERROR; + } + return EVS_RTPDUMP_DEPACKER_NO_ERROR; +} + +EVS_RTPDUMP_DEPACKER_ERROR EVS_RTPDUMP_DEPACKER_readNextFrame( + EVS_RTPDUMP_DEPACKER *self, + uint16_t *rtpSequenceNumber, + uint32_t *rtpTimeStamp, + uint32_t *rcvTime_ms, + bool *isAMRWB_IOmode, + uint16_t *frameTypeIndex, + bool *qBit, + unsigned char **frame, + uint16_t *frameSizeBits ) +{ + /* read next RTP packet from rtpdump */ + if ( !self->frameFollowing ) + { + RTPDUMP_ERROR rtpdumpError = RTPDUMP_ReadPacket( self->rtpdump, &self->rtpPacket, &self->timeoffset_ms ); + if ( rtpdumpError == RTPDUMP_READ_ENDOFFILE ) + { + return EVS_RTPDUMP_DEPACKER_EOF; + } + else if ( rtpdumpError != RTPDUMP_NO_ERROR ) + { + return EVS_RTPDUMP_DEPACKER_RTPDUMP_ERROR; + } + self->frameIndex = 0; + } + /* unpack next frame from RTP packet */ + if ( !evsPayload_unpackFrame( self->hf_only, self->rtpPacket.data + self->rtpPacket.headerSize, + self->rtpPacket.payloadSize, self->frameIndex, + isAMRWB_IOmode, &self->frameFollowing, frameTypeIndex, qBit, + frame, frameSizeBits ) ) + { + return EVS_RTPDUMP_DEPACKER_PAYLOAD_ERROR; + } + /* return frame */ + *rtpSequenceNumber = self->rtpPacket.sequenceNumber; + *rtpTimeStamp = self->rtpPacket.timeStamp + self->frameIndex * 16000 / 50; + *rcvTime_ms = self->timeoffset_ms; + ++self->frameIndex; + return EVS_RTPDUMP_DEPACKER_NO_ERROR; +} + +void EVS_RTPDUMP_DEPACKER_close( EVS_RTPDUMP_DEPACKER *self ) +{ + if ( !self ) + { + return; + } + RTPDUMP_Close( &self->rtpdump, 0 ); +} diff --git a/lib_util/evs_rtp_payload.h b/lib_util/evs_rtp_payload.h new file mode 100644 index 0000000000..55073a7fa5 --- /dev/null +++ b/lib_util/evs_rtp_payload.h @@ -0,0 +1,202 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#pragma once +#include +#include +#include +#include "rtpdump.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + static const int32_t AMRWB_IOmode2rate[16] = { + 6600, /* AMRWB_IO_6600 */ + 8850, /* AMRWB_IO_8850 */ + 12650, /* AMRWB_IO_1265 */ + 14250, /* AMRWB_IO_1425 */ + 15850, /* AMRWB_IO_1585 */ + 18250, /* AMRWB_IO_1825 */ + 19850, /* AMRWB_IO_1985 */ + 23050, /* AMRWB_IO_2305 */ + 23850, /* AMRWB_IO_2385 */ + 1750, /* AMRWB_IO_SID: SID_1k75 followed by STI bit and CMI bits (A.2.2.1.3) */ + -1, /* AMRWB_IO_FUT1 */ + -1, /* AMRWB_IO_FUT2 */ + -1, /* AMRWB_IO_FUT3 */ + -1, /* AMRWB_IO_FUT4 */ + 0, /* SPEECH_LOST */ + 0 /* NO_DATA */ + }; + + static const int32_t PRIMARYmode2rate[16] = { + 2800, /* PRIMARY_2800 */ + 7200, /* PRIMARY_7200 */ + 8000, /* PRIMARY_8000 */ + 9600, /* PRIMARY_9600 */ + 13200, /* PRIMARY_13200 */ + 16400, /* PRIMARY_16400 */ + 24400, /* PRIMARY_24400 */ + 32000, /* PRIMARY_32000 */ + 48000, /* PRIMARY_48000 */ + 64000, /* PRIMARY_64000 */ + 96000, /* PRIMARY_96000 */ + 128000, /* PRIMARY_128000 */ + 2400, /* PRIMARY_SID */ + -1, /* PRIMARY_FUT1 */ + 0, /* SPEECH_LOST */ + 0 /* NO_DATA */ + }; + + static const uint16_t evsPayloadProtectedSizes[22] = { + 48, + 56, + 136, + 144, + 160, + 184, + 192, + 256, + 264, + 288, + 320, + 328, + 368, + 400, + 464, + 480, + 488, + 640, + 960, + 1280, + 1920, + 2560 + }; + + static const bool evsPayloadProtectedSizes_isAMRWB_IOmode[22] = { + 0, + 0, /* Special case (see clause A.2.1.3) */ + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + }; + + static const uint16_t evsPayloadProtectedSizes_frameTypeIndex[22] = { + 12, /* PRIMARY_SID */ + 0, /* Special case (see clause A.2.1.3) */ + 0, /* AMRWB_IO_6600 */ + 1, /* PRIMARY_7200 */ + 2, /* PRIMARY_8000 */ + 1, /* AMRWB_IO_8850 */ + 3, /* PRIMARY_9600 */ + 2, /* AMRWB_IO_1265 */ + 4, /* PRIMARY_13200 */ + 3, /* AMRWB_IO_1425 */ + 4, /* AMRWB_IO_1585 */ + 5, /* PRIMARY_16400 */ + 5, /* AMRWB_IO_1825 */ + 6, /* AMRWB_IO_1985 */ + 7, /* AMRWB_IO_2305 */ + 8, /* AMRWB_IO_2385 */ + 6, /* PRIMARY_24400 */ + 7, /* PRIMARY_32000 */ + 8, /* PRIMARY_48000 */ + 9, /* PRIMARY_64000 */ + 10, /* PRIMARY_96000 */ + 11 /* PRIMARY_128000 */ + }; + + bool evsPayload_unpackFrame( bool hf_only, char *payload, uint16_t payloadSizeBytes, uint16_t frameIndex, bool *isAMRWB_IOmode, bool *frameFollowing, uint16_t *frameTypeIndex, bool *qBit, unsigned char **framePtr, uint16_t *frameSizeBits ); + + bool evsPayload_getFrameTypeFromSize( int16_t frameSizeBits, bool *isAMRWB_IOmode, uint16_t *frameTypeIndex ); + + bool evsHeaderFullPayload_unpackFrame( char *payload, uint16_t payloadSizeBytes, uint16_t frameIndex, bool *isAMRWB_IOmode, bool *frameFollowing, uint16_t *frameTypeIndex, bool *qBit, unsigned char **frame, uint16_t *frameSizeBits ); + + typedef struct + { + RTPDUMP_HANDLE rtpdump; + bool hf_only; + RTPDUMP_RTPPACKET rtpPacket; + uint32_t timeoffset_ms; + uint16_t frameIndex; + bool frameFollowing; + } EVS_RTPDUMP_DEPACKER; + + typedef enum + { + EVS_RTPDUMP_DEPACKER_NO_ERROR = 0, + EVS_RTPDUMP_DEPACKER_EOF = -1, + EVS_RTPDUMP_DEPACKER_RTPDUMP_ERROR = 1, + EVS_RTPDUMP_DEPACKER_PAYLOAD_ERROR + } EVS_RTPDUMP_DEPACKER_ERROR; + + EVS_RTPDUMP_DEPACKER_ERROR EVS_RTPDUMP_DEPACKER_open( EVS_RTPDUMP_DEPACKER *self, FILE *file, bool hf_only ); + + EVS_RTPDUMP_DEPACKER_ERROR EVS_RTPDUMP_DEPACKER_readNextFrame( + EVS_RTPDUMP_DEPACKER *self, + uint16_t *rtpSequenceNumber, + uint32_t *rtpTimeStamp, + uint32_t *rcvTime_ms, + bool *isAMRWB_IOmode, + uint16_t *frameTypeIndex, + bool *qBit, + unsigned char **frame, + uint16_t *frameSizeBits ); + + void EVS_RTPDUMP_DEPACKER_close( EVS_RTPDUMP_DEPACKER *self ); + +#ifdef __cplusplus +} +#endif diff --git a/lib_util/g192.c b/lib_util/g192.c new file mode 100644 index 0000000000..26b3aae578 --- /dev/null +++ b/lib_util/g192.c @@ -0,0 +1,558 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +/* WMC_TOOL_SKIP_FILE (basic ops file) */ + +#include "options.h" +#include "g192.h" +#include "cnst.h" +#include +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#else +#include +#endif + + +/*-----------------------------------------------------------------------* + * Constants + *-----------------------------------------------------------------------*/ + +#define G192_SYNC_GOOD_FRAME (uint16_t) 0x6B21 +#define G192_SYNC_BAD_FRAME (uint16_t) 0x6B20 +#define G192_BIT0 (uint16_t) 0x007F +#define G192_BIT1 (uint16_t) 0x0081 +#define RTP_HEADER_PART1 (int16_t) 22 /* magic number by network simulator */ + + +/*-----------------------------------------------------------------------* + * Structures + *-----------------------------------------------------------------------*/ + +/* main handle */ +struct __G192 +{ + FILE *file; + int16_t ownFileHandle; /* flag whether FILE handle created by instance or externally */ +}; + + +/*-----------------------------------------------------------------------* + * Functions + *-----------------------------------------------------------------------*/ + + +G192_ERROR G192_Reader_Open_filename( + G192_HANDLE *phG192, + const char *filename ) +{ + /* create handle */ + *phG192 = (G192_HANDLE) calloc( 1, sizeof( struct __G192 ) ); + if ( !phG192 ) + { + return G192_MEMORY_ERROR; + } + memset( *phG192, 0, sizeof( struct __G192 ) ); + + /* open file stream */ + ( *phG192 )->file = fopen( filename, "rb" ); + if ( ( *phG192 )->file == NULL ) + { + G192_Reader_Close( phG192 ); + return G192_FILE_NOT_FOUND; + } + ( *phG192 )->ownFileHandle = 1; + + return G192_NO_ERROR; +} + + +G192_ERROR G192_Reader_Rewind( + G192_HANDLE const hG192 ) +{ + if ( !hG192 || !hG192->file ) + { + return G192_NOT_INITIALIZED; + } + rewind( hG192->file ); + + return G192_NO_ERROR; +} + + +G192_ERROR G192_ReadFrame_compact( + G192_HANDLE const hG192, + unsigned char *const serial, + int16_t *const num_bits, + int16_t *const bfi ) +{ + uint16_t short_serial[MAX_BITS_PER_FRAME]; + G192_ERROR err; + int16_t i; + + err = G192_ReadFrame_short( hG192, short_serial, num_bits, bfi ); + + for ( i = 0; i < *num_bits; i++ ) + { + unsigned char bit = ( short_serial[i] == G192_BIT1 ) ? 1 : 0; + unsigned char bitinbyte = bit << ( 7 - ( i & 0x7 ) ); + if ( !( i & 0x7 ) ) + { + serial[i >> 3] = 0; + } + serial[i >> 3] |= bitinbyte; + } + + return err; +} + + +G192_ERROR G192_ReadVoipFrame_compact( + G192_HANDLE const hG192, + unsigned char *const serial, + int16_t *const num_bits, + uint16_t *const rtpSequenceNumber, + uint32_t *const rtpTimeStamp, + uint32_t *const rcvTime_ms ) +{ + int16_t short_serial[MAX_BITS_PER_FRAME]; + G192_ERROR err; + int16_t i; + + err = G192_ReadVoipFrame_short( hG192, short_serial, num_bits, rtpSequenceNumber, rtpTimeStamp, rcvTime_ms ); + if ( err != G192_NO_ERROR ) + { + return err; + } + + for ( i = 0; i < *num_bits; i++ ) + { + uint8_t bit = ( short_serial[i] == G192_BIT1 ) ? 1 : 0; + uint8_t bitinbyte = bit << ( 7 - ( i & 0x7 ) ); + if ( !( i & 0x7 ) ) + { + serial[i >> 3] = 0; + } + serial[i >> 3] |= bitinbyte; + } + + return G192_NO_ERROR; +} + + +G192_ERROR G192_ReadFrame_short( + G192_HANDLE const hG192, + uint16_t *const serial, + int16_t *const num_bits, + int16_t *const bfi ) +{ + uint16_t G192_SYNC_WORD; + if ( num_bits ) + { + *num_bits = 0; + } + + if ( fread( &G192_SYNC_WORD, sizeof( uint16_t ), 1, hG192->file ) != 1 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + return G192_READ_ERROR; + } + else + { + if ( ( G192_SYNC_WORD != G192_SYNC_GOOD_FRAME ) && ( G192_SYNC_WORD != G192_SYNC_BAD_FRAME ) ) + { + fprintf( stderr, "\n Invalid bitstream. Wrong G192_SYNC_WORD\n " ); + return G192_READ_ERROR; + } + else + { + int16_t i; + if ( G192_SYNC_WORD == G192_SYNC_BAD_FRAME ) + { + *bfi = 1; + } + else + { + *bfi = 0; + } + + if ( fread( num_bits, sizeof( int16_t ), 1, hG192->file ) != 1 ) + { + fprintf( stderr, "\n Premature end of file, cannot read frame length " ); + return G192_READ_ERROR; + } + + if ( *num_bits > MAX_BITS_PER_FRAME ) + { + fprintf( stderr, "\n Frame is too large " ); + return G192_READ_ERROR; + } + + if ( fread( serial, sizeof( int16_t ), *num_bits, hG192->file ) != (uint16_t) *num_bits ) + { + fprintf( stderr, "\n Premature end of file, cannot read frame" ); + return G192_READ_ERROR; + } + + /* convert from G.192 representation to binary, i.e. from 0x007F to 0x0 and from 0x0081 to 0x1 */ + for ( i = 0; i < (int16_t) *num_bits; ++i ) + { + serial[i] = ( serial[i] == G192_BIT1 ? 1 : 0 ); + } + + /* pad extra bytes (2 bytes required for EVS, 4 for IVAS) for arithmetic decoder flush */ + if ( *num_bits > 0 ) + { + for ( ; i < *num_bits + ( 8 * 4 ); ++i ) + { + serial[i] = 0; + } + } + } + } + + return ( G192_NO_ERROR ); +} + + +G192_ERROR G192_ReadVoipFrame_short( + G192_HANDLE const hG192, + int16_t *const serial, + int16_t *const num_bits, + uint16_t *const rtpSequenceNumber, + uint32_t *const rtpTimeStamp, + uint32_t *const rcvTime_ms ) +{ + uint32_t rtpPacketSize; + uint16_t rtpPacketHeaderPart1; + uint32_t ssrc; + uint16_t rtpPayloadG192[2]; + uint16_t rtpPayloadSize; + + /* RTP packet size */ + if ( fread( &rtpPacketSize, sizeof( rtpPacketSize ), 1, hG192->file ) != 1 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + fprintf( stderr, "RTP Packet Size could't be read\n" ); + + return G192_READ_ERROR; + } + + if ( rtpPacketSize <= 12 ) + { + fprintf( stderr, "RTP Packet size too small: %ud\n", rtpPacketSize ); + return G192_INVALID_DATA; + } + + /* RTP packet arrival time */ + if ( fread( rcvTime_ms, sizeof( *rcvTime_ms ), 1, hG192->file ) != 1 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + fprintf( stderr, "Reception Time in ms could't be read\n" ); + + return G192_READ_ERROR; + } + + /* RTP packet header (part without sequence number) */ + if ( fread( &rtpPacketHeaderPart1, sizeof( rtpPacketHeaderPart1 ), 1, hG192->file ) != 1 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + fprintf( stderr, "RTP Header couldn't be read\n" ); + + return G192_READ_ERROR; + } + + if ( rtpPacketHeaderPart1 != RTP_HEADER_PART1 ) + { + fprintf( stderr, "Unexpected RTP Packet header\n" ); + + return G192_INVALID_DATA; + } + + /* RTP sequence number */ + if ( fread( rtpSequenceNumber, sizeof( *rtpSequenceNumber ), 1, hG192->file ) != 1 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + fprintf( stderr, "RTP Sequence Number be read\n" ); + + return G192_READ_ERROR; + } + + *rtpSequenceNumber = ntohs( *rtpSequenceNumber ); + + /* RTP timestamp */ + if ( fread( rtpTimeStamp, sizeof( *rtpTimeStamp ), 1, hG192->file ) != 1 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + fprintf( stderr, "RTP Timestamp could't be read\n" ); + + return G192_READ_ERROR; + } + + *rtpTimeStamp = ntohl( *rtpTimeStamp ); + + /* RTP ssrc */ + if ( fread( &ssrc, sizeof( ssrc ), 1, hG192->file ) != 1 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + fprintf( stderr, "RTP SSRC could't be read\n" ); + + return G192_READ_ERROR; + } + + /* RTP payload size */ + rtpPayloadSize = (uint16_t) rtpPacketSize - 12; + if ( rtpPayloadSize <= 2 ) + { + fprintf( stderr, "RTP payload size too small: %u\n", rtpPayloadSize ); + return G192_INVALID_DATA; + } + + /* RTP payload */ + if ( fread( rtpPayloadG192, sizeof( int16_t ), 2, hG192->file ) != 2 ) + { + if ( feof( hG192->file ) != 0 ) + { + return G192_EOF; + } + + fprintf( stderr, "Premature end of file, cannot read G.192 header\n" ); + return G192_READ_ERROR; + } + + if ( rtpPayloadG192[0] != G192_SYNC_GOOD_FRAME ) + { + fprintf( stderr, "G192_SYNC_WORD missing from RTP payload!" ); + return G192_INVALID_DATA; + } + + *num_bits = rtpPayloadG192[1]; + if ( *num_bits == 0u || *num_bits + 2u != rtpPayloadSize || *num_bits > MAX_BITS_PER_FRAME ) + { + fprintf( stderr, "error in parsing RTP payload: rtpPayloadSize=%u nBits=%d", rtpPayloadSize, *num_bits ); + return G192_INVALID_DATA; + } + + if ( fread( serial, sizeof( int16_t ), *num_bits, hG192->file ) != (uint16_t) *num_bits ) + { + fprintf( stderr, "Premature end of file, cannot read G.192 payload\n" ); + return G192_READ_ERROR; + } + + return G192_NO_ERROR; +} + + +G192_ERROR G192_Reader_Close( + G192_HANDLE *phG192 ) +{ + if ( phG192 == NULL || *phG192 == NULL ) + { + return G192_NO_ERROR; + } + + if ( ( *phG192 )->file && ( *phG192 )->ownFileHandle ) + { + fclose( ( *phG192 )->file ); + } + + free( *phG192 ); + *phG192 = NULL; + phG192 = NULL; + + return G192_NO_ERROR; +} + + +G192_ERROR G192_Writer_Open_filename( + G192_HANDLE *phG192, + const char *filename ) +{ + /* create handle */ + *phG192 = (G192_HANDLE) calloc( 1, sizeof( struct __G192 ) ); + if ( !phG192 ) + { + return G192_MEMORY_ERROR; + } + + /* open file stream */ + ( *phG192 )->file = fopen( filename, "wb" ); + if ( ( *phG192 )->file == NULL ) + { + free( *phG192 ); + *phG192 = NULL; + return G192_FILE_NOT_FOUND; + } + ( *phG192 )->ownFileHandle = 1; + + return G192_NO_ERROR; +} + + +G192_ERROR G192_WriteFrame( + G192_HANDLE const hG192, + const uint16_t *serial, + const int16_t numBits ) +{ + uint16_t G192_HEADER[2], G192_DATA[MAX_BITS_PER_FRAME]; + uint16_t i, bit; + + assert( numBits <= MAX_BITS_PER_FRAME ); + + G192_HEADER[0] = G192_SYNC_GOOD_FRAME; + G192_HEADER[1] = numBits; /* Frame Length */ + fwrite( G192_HEADER, sizeof( uint16_t ), 2, hG192->file ); + + for ( i = 0; i < numBits; i++ ) + { + bit = serial[i]; + if ( bit == 0 ) + { + G192_DATA[i] = G192_BIT0; + } + else if ( bit == 1 ) + { + G192_DATA[i] = G192_BIT1; + } + else + { + return G192_WRITE_ERROR; + } + } + fwrite( G192_DATA, sizeof( uint16_t ), numBits, hG192->file ); + + return G192_NO_ERROR; +} + + +G192_ERROR G192_WriteVoipFrame_short( + G192_HANDLE const hG192, + const uint16_t *serial, + const int16_t numBits, + uint16_t const rtpSequenceNumber, + uint16_t const rtpTimeStamp, + uint32_t const rcvTime_ms ) +{ + int16_t G192_HEADER[2], G192_DATA[MAX_BITS_PER_FRAME]; + int16_t i, bit; + + uint32_t rtpPacketSize = numBits + 12 + 2; + uint16_t rtpPacketHeaderPart1 = RTP_HEADER_PART1; + uint32_t ssrc = 0; + uint16_t rtpSequenceNumber_2 = htons( rtpSequenceNumber ); + uint32_t rtpTimeStamp_2 = htonl( rtpTimeStamp ); + uint16_t ssrc_2 = (uint16_t) htonl( ssrc ); + + assert( numBits <= MAX_BITS_PER_FRAME ); + + fwrite( &rtpPacketSize, sizeof( rtpPacketSize ), 1, hG192->file ); + fwrite( &rcvTime_ms, sizeof( rcvTime_ms ), 1, hG192->file ); + fwrite( &rtpPacketHeaderPart1, sizeof( rtpPacketHeaderPart1 ), 1, hG192->file ); + fwrite( &rtpSequenceNumber_2, sizeof( rtpSequenceNumber ), 1, hG192->file ); + fwrite( &rtpTimeStamp_2, sizeof( rtpTimeStamp ), 1, hG192->file ); + fwrite( &ssrc_2, sizeof( ssrc ), 1, hG192->file ); + + G192_HEADER[0] = 0x6b21; + G192_HEADER[1] = numBits; + + fwrite( G192_HEADER, sizeof( int16_t ), 2, hG192->file ); + for ( i = 0; i < numBits; i++ ) + { + bit = serial[i]; + if ( bit == 0 ) + { + G192_DATA[i] = G192_BIT0; + } + else if ( bit == 1 ) + { + G192_DATA[i] = G192_BIT1; + } + else + { + return G192_WRITE_ERROR; + } + } + fwrite( G192_DATA, sizeof( int16_t ), numBits, hG192->file ); + + return G192_NO_ERROR; +} + + +G192_ERROR G192_Writer_Close( + G192_HANDLE *phG192 ) +{ + if ( phG192 == NULL || *phG192 == NULL ) + { + return G192_NO_ERROR; + } + + if ( ( *phG192 )->file ) + { + fclose( ( *phG192 )->file ); + } + + free( *phG192 ); + *phG192 = NULL; + phG192 = NULL; + + return G192_NO_ERROR; +} diff --git a/lib_util/g192.h b/lib_util/g192.h new file mode 100644 index 0000000000..c96b5bf756 --- /dev/null +++ b/lib_util/g192.h @@ -0,0 +1,100 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef G192_H +#define G192_H G192_H + +#include +#include + +/*-----------------------------------------------------------------------* + * Enums + *-----------------------------------------------------------------------*/ + +/* error enums */ +typedef enum _G192_ERROR +{ + G192_NO_ERROR = 0x0000, + G192_MEMORY_ERROR = 0x0001, + G192_WRONG_PARAMS = 0x0002, + G192_INIT_ERROR = 0x0003, + G192_WRITE_ERROR = 0x0004, + G192_READ_ERROR = 0x0005, + G192_FILE_NOT_FOUND = 0x0006, + G192_INVALID_DATA = 0x0007, /* error returned when read data is invalid */ + G192_NOT_IMPLEMENTED = 0x0010, + G192_NOT_INITIALIZED = 0x0100, + G192_UNKNOWN_ERROR = 0x1000, + G192_EOF = 0xffff /* EOF during reading */ +} G192_ERROR; + + +/*-----------------------------------------------------------------------* + * Structures + *-----------------------------------------------------------------------*/ + +/* main handle */ +struct __G192; +typedef struct __G192 *G192_HANDLE; + + +/*-----------------------------------------------------------------------* + * Functions + *-----------------------------------------------------------------------*/ + +G192_ERROR G192_Reader_Open_filename( G192_HANDLE *phG192, const char *filename ); + +G192_ERROR G192_Reader_Rewind( G192_HANDLE const hG192 ); + +G192_ERROR G192_ReadFrame_compact( G192_HANDLE const hG192, unsigned char *const serial, int16_t *const num_bits, int16_t *const bfi ); + +G192_ERROR G192_ReadVoipFrame_compact( G192_HANDLE const hG192, unsigned char *const serial, int16_t *const num_bits, uint16_t *const rtpSequenceNumber, uint32_t *const rtpTimeStamp, uint32_t *const rcvTime_ms ); + +G192_ERROR G192_ReadFrame_short( G192_HANDLE const hG192, uint16_t *const serial, int16_t *const num_bits, int16_t *const bfi ); + +G192_ERROR G192_ReadVoipFrame_short( G192_HANDLE const hG192, int16_t *const serial, int16_t *const num_bits, uint16_t *const rtpSequenceNumber, uint32_t *const rtpTimeStamp, uint32_t *const rcvTime_ms ); + +G192_ERROR G192_Reader_Close( G192_HANDLE *phG192 ); + +G192_ERROR G192_Writer_Open_filename( G192_HANDLE *phG192, const char *filename ); + +G192_ERROR G192_WriteFrame( G192_HANDLE const hG192, const uint16_t *serial, const int16_t numBits ); + +G192_ERROR G192_WriteVoipFrame_short( G192_HANDLE const hG192, const uint16_t *serial, const int16_t num_bits, uint16_t const rtpSequenceNumber, uint16_t const rtpTimeStamp, uint32_t const rcvTime_ms ); + +G192_ERROR G192_Writer_Close( G192_HANDLE *phG192 ); + +#endif /* G192_H */ diff --git a/lib_util/head_rotation_file_reader.c b/lib_util/head_rotation_file_reader.c new file mode 100644 index 0000000000..1cf27cbfdb --- /dev/null +++ b/lib_util/head_rotation_file_reader.c @@ -0,0 +1,212 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "head_rotation_file_reader.h" +#include +#include +#include +#include +#include "prot.h" + +struct HeadRotFileReader +{ + FILE *trajFile; + int32_t frameCounter; + char *file_path; + bool fileRewind; +}; + + +/*-----------------------------------------------------------------------* + * HeadRotationFrameCheck() + * + * Check if the read frame number corresponds to the decoder frame + *-----------------------------------------------------------------------*/ + +static ivas_error HeadRotationFrameCheck( + HeadRotFileReader *headRotReader, /* i/o: HeadRotFileReader handle */ + const int32_t frame_dec ) +{ + if ( headRotReader->fileRewind == false ) + { + if ( headRotReader->frameCounter / IVAS_MAX_PARAM_SPATIAL_SUBFRAMES != frame_dec + 1 ) + { + return IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH; + } + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * HeadRotationFileReader_open() + * + * Allocate and initialize Head-Tracking reader + *-----------------------------------------------------------------------*/ + +ivas_error HeadRotationFileReader_open( + char *trajFilePath, /* i : head rotation trajectory file name */ + HeadRotFileReader **headRotReader /* o : HeadRotFileReader handle */ +) +{ + HeadRotFileReader *self; + FILE *trajFile; + + /* Open trajectory file */ + if ( strlen( trajFilePath ) < 1 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + trajFile = fopen( trajFilePath, "r" ); + + if ( !trajFile ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + self = calloc( sizeof( HeadRotFileReader ), 1 ); + self->trajFile = trajFile; + self->frameCounter = 0; + self->file_path = calloc( sizeof( char ), strlen( trajFilePath ) + 1 ); + strcpy( self->file_path, trajFilePath ); + self->fileRewind = false; + + *headRotReader = self; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * HeadRotationFileReading() + * + * Read values from the trajectory file + *-----------------------------------------------------------------------*/ + +ivas_error HeadRotationFileReading( + HeadRotFileReader *headRotReader, /* i/o: HeadRotFileReader handle */ + IVAS_QUATERNION *Quaternions, /* o : head-tracking data */ + const int32_t frame_dec /* i : decoded frame number */ +) +{ + uint16_t i; + int32_t time_stamp = 0; + float w, x, y, z; + + for ( i = 0; i < IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + if ( 5 != fscanf( headRotReader->trajFile, "%d,%f,%f,%f,%f", &time_stamp, &w, &x, &y, &z ) ) + { + if ( feof( headRotReader->trajFile ) ) + { + rewind( headRotReader->trajFile ); + headRotReader->fileRewind = true; + return HeadRotationFileReading( headRotReader, Quaternions, frame_dec ); + } + return IVAS_ERR_FAILED_FILE_PARSE; + } + + + if ( headRotReader->fileRewind == false && headRotReader->frameCounter != time_stamp ) + { + return IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH; + } + + + ( headRotReader->frameCounter )++; + + Quaternions[i].w = w; + Quaternions[i].x = x; + Quaternions[i].y = y; + Quaternions[i].z = z; + } + + if ( headRotReader->fileRewind == false ) + { + if ( ( time_stamp + 1 ) % IVAS_MAX_PARAM_SPATIAL_SUBFRAMES != 0 ) + { + return IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH; + } + } + + if ( HeadRotationFrameCheck( headRotReader, frame_dec ) != IVAS_ERR_OK ) + { + return IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH; + } + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * HeadRotationFileReader_close() + * + * Deallocates memory for the Head-Tracking reader + *-----------------------------------------------------------------------*/ + +void HeadRotationFileReader_close( + HeadRotFileReader **headRotReader /* i/o: HeadRotFileReader handle */ +) +{ + if ( headRotReader == NULL || *headRotReader == NULL ) + { + return; + } + + fclose( ( *headRotReader )->trajFile ); + free( ( *headRotReader )->file_path ); + free( *headRotReader ); + *headRotReader = NULL; + + return; +} + + +/*-----------------------------------------------------------------------* + * HeadRotationFileReader_getFilePath() + * + * + *-----------------------------------------------------------------------*/ + +const char *HeadRotationFileReader_getFilePath( + HeadRotFileReader *headRotReader /* i/o: HeadRotFileReader handle */ +) +{ + if ( headRotReader == NULL ) + { + return NULL; + } + + return headRotReader->file_path; +} diff --git a/lib_util/head_rotation_file_reader.h b/lib_util/head_rotation_file_reader.h new file mode 100644 index 0000000000..6664908b00 --- /dev/null +++ b/lib_util/head_rotation_file_reader.h @@ -0,0 +1,88 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_HR_FILE_READER_H +#define IVAS_HR_FILE_READER_H + +#include "common_api_types.h" +#include "ivas_error.h" + + +#define IVAS_MAX_PARAM_SPATIAL_SUBFRAMES 4 + +typedef struct HeadRotFileReader HeadRotFileReader; + +/*-----------------------------------------------------------------------* + * HeadRotationFileReader_open() + * + * Allocate and initialize Head-Tracking handle + *-----------------------------------------------------------------------*/ + +ivas_error HeadRotationFileReader_open( + char *trajFilePath, /* i : head rotation trajectory file name */ + HeadRotFileReader **headRotReader /* o : HeadRotFileReader handle */ +); + +/*-----------------------------------------------------------------------* + * HeadRotationFileReading() + * + * Read values from the trajectory file + *-----------------------------------------------------------------------*/ + +ivas_error HeadRotationFileReading( + HeadRotFileReader *headRotReader, /* i/o: HeadRotFileReader handle */ + IVAS_QUATERNION *Quaternions, /* o : head-tracking data */ + const int32_t frame_dec /* i : decoded frame number */ +); + +/*-----------------------------------------------------------------------* + * HeadRotationFileReader_close() + * + * Deallocates memory for the Head-Tracking handle + *-----------------------------------------------------------------------*/ + +void HeadRotationFileReader_close( + HeadRotFileReader **headRotReader /* i/o: HeadRotFileReader handle */ +); + +/*-----------------------------------------------------------------------* + * HeadRotationFileReader_getFilePath() + * + * + *-----------------------------------------------------------------------*/ + +const char *HeadRotationFileReader_getFilePath( + HeadRotFileReader *headRotReader /* i/o: HeadRotFileReader handle */ +); + + +#endif /* IVAS_HR_FILE_READER_H */ diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c new file mode 100644 index 0000000000..1dc481c84e --- /dev/null +++ b/lib_util/hrtf_file_reader.c @@ -0,0 +1,375 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "hrtf_file_reader.h" +#include +#include +#include "prot.h" +#include "ivas_prot.h" + + +struct hrtfFileReader +{ + FILE *file; + char *file_path; +}; + +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ + +#define RESAMPLE_FACTOR_16_48 ( 16.0f / 48.0f ) +#define RESAMPLE_FACTOR_32_48 ( 32.0f / 48.0f ) + +/*---------------------------------------------------------------------* + * hrtfFileReader_open() + * + * Allocates memory for an hrtfFileReader and opens the file at given path for reading. + *---------------------------------------------------------------------*/ + +ivas_error hrtfFileReader_open( + const char *filePath, /* i : path to hrtf binary file */ + hrtfFileReader **hrtfReader /* o : hrtfFileReader handle */ +) +{ + hrtfFileReader *self; + FILE *file; + + if ( !filePath ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + file = fopen( filePath, "rb" ); + + if ( !file ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + self = calloc( sizeof( hrtfFileReader ), 1 ); + self->file = file; + self->file_path = calloc( sizeof( char ), strlen( filePath ) + 1 ); + strcpy( self->file_path, filePath ); + + *hrtfReader = self; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * hrtfFileReader_close() + * + * De-allocates all underlying memory of an hrtfFileReader. + *---------------------------------------------------------------------*/ + +void hrtfFileReader_close( + hrtfFileReader **hrtfReader /* i/o: pointer to hrtfFileReader handle */ +) +{ + if ( hrtfReader == NULL || *hrtfReader == NULL ) + { + return; + } + + fclose( ( *hrtfReader )->file ); + free( ( *hrtfReader )->file_path ); + free( *hrtfReader ); + *hrtfReader = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * LoadBSplineBinaryITD() + * + * Loads the B Spline HR filter model ITD data from file. + --------------------------------------------------------------------*/ + +static void LoadBSplineBinaryITD( + ModelParamsITD_t *modelITD, /* i/o: ITD model parameter structure */ + FILE *f_hrtf /* i : HR filter data file handle */ +) +{ + int16_t tmp; + fread( &modelITD->N, sizeof( int16_t ), 1, f_hrtf ); + fread( &modelITD->elevDim2, sizeof( int16_t ), 1, f_hrtf ); + fread( &modelITD->elevDim3, sizeof( int16_t ), 1, f_hrtf ); + modelITD->elevKSeq_dyn = (float *) count_malloc( ( modelITD->elevDim3 - 2 ) * sizeof( float ) ); + fread( modelITD->elevKSeq_dyn, sizeof( float ), modelITD->elevDim3 - 2, f_hrtf ); + + fread( &modelITD->azimDim2, sizeof( int16_t ), 1, f_hrtf ); + fread( &modelITD->azimDim3, sizeof( int16_t ), 1, f_hrtf ); + modelITD->azimKSeq_dyn = (float *) count_malloc( ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ) * sizeof( float ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */ + fread( modelITD->azimKSeq_dyn, sizeof( float ), ( modelITD->azimDim3 + 1 ) / 2 - 2, f_hrtf ); + + fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); + modelITD->W_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + fread( modelITD->W_dyn, sizeof( float ), tmp, f_hrtf ); + + /* azimuth */ + fread( modelITD->azimBsLen, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); + fread( modelITD->azimBsStart, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); + + fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); + + modelITD->azimBsShape_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + fread( modelITD->azimBsShape_dyn, sizeof( float ), tmp, f_hrtf ); + + fread( &modelITD->azimSegSamples, sizeof( int16_t ), 1, f_hrtf ); + + /* elevation */ + fread( modelITD->elevBsLen, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); + fread( modelITD->elevBsStart, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); + + fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); + + modelITD->elevBsShape_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + fread( modelITD->elevBsShape_dyn, sizeof( float ), tmp, f_hrtf ); + + fread( &modelITD->elevSegSamples, sizeof( int16_t ), 1, f_hrtf ); + + modelITD->elevKSeq = (const float *) modelITD->elevKSeq_dyn; + modelITD->azimKSeq = (const float *) modelITD->azimKSeq_dyn; + modelITD->W = (const float *) modelITD->W_dyn; + modelITD->azimBsShape = (const float *) modelITD->azimBsShape_dyn; + modelITD->elevBsShape = (const float *) modelITD->elevBsShape_dyn; + return; +} + + +/*-------------------------------------------------------------------* + * LoadBSplineBinary() + * + * Loads the B Spline HR filter model data from file. + --------------------------------------------------------------------*/ + +static ivas_error LoadBSplineBinary( + IVAS_DEC_HRTF_HANDLE HrFiltSet_p, /* i/o: HR filter model parameter structure */ + FILE *f_hrtf /* i : HR filter data file handle */ +) +{ + ModelParams_t *model; + int16_t i, tmp; + + model = &( HrFiltSet_p->ModelParams ); + + /* Set ROM flag for correct deallocation */ + model->modelROM = FALSE; + + fread( &model->UseItdModel, sizeof( int16_t ), 1, f_hrtf ); /* Indicates if ITD model is active */ + fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); + + switch ( tmp ) + { + case 16: + HrFiltSet_p->SampleRate = 16000; + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + HrFiltSet_p->ModelParamsITD.resamp_factor = RESAMPLE_FACTOR_16_48; + } + break; + case 32: + HrFiltSet_p->SampleRate = 32000; + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + HrFiltSet_p->ModelParamsITD.resamp_factor = RESAMPLE_FACTOR_32_48; + } + break; + case 48: + HrFiltSet_p->SampleRate = 48000; + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + HrFiltSet_p->ModelParamsITD.resamp_factor = 1.0f; + } + break; + default: + return IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "Error: HR filter file had an unsupported sampling rate (%d kHz)", tmp ); + } + + fread( &model->SplineDegree, sizeof( int16_t ), 1, f_hrtf ); + fread( &model->K, sizeof( int16_t ), 1, f_hrtf ); + + fread( &model->elevDim2, sizeof( int16_t ), 1, f_hrtf ); + fread( &model->elevDim3, sizeof( int16_t ), 1, f_hrtf ); + model->elevKSeq_dyn = (float *) count_malloc( ( model->elevDim3 - 2 ) * sizeof( float ) ); + fread( model->elevKSeq_dyn, sizeof( float ), model->elevDim3 - 2, f_hrtf ); + model->azimDim2_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azimDim3_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azim_start_idx_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azimKSeq = (float **) count_malloc( model->elevDim3 * sizeof( float * ) ); + for ( i = 0; i < model->elevDim3; i++ ) + { + fread( &model->azimDim2_dyn[i], sizeof( int16_t ), 1, f_hrtf ); + fread( &model->azimDim3_dyn[i], sizeof( int16_t ), 1, f_hrtf ); + fread( &model->azim_start_idx_dyn[i], sizeof( int16_t ), 1, f_hrtf ); + model->azimKSeq[i] = (float *) count_malloc( ( model->azimDim3_dyn[i] + 1 ) * sizeof( float ) ); + fread( model->azimKSeq[i], sizeof( float ), ( model->azimDim3_dyn[i] + 1 ), f_hrtf ); + } + fread( &model->AlphaN, sizeof( int16_t ), 1, f_hrtf ); + + model->AlphaL_dyn = (float *) count_malloc( model->AlphaN * model->K * sizeof( float ) ); + fread( model->AlphaL_dyn, sizeof( float ), model->AlphaN * model->K, f_hrtf ); + + model->AlphaR_dyn = (float *) count_malloc( model->AlphaN * model->K * sizeof( float ) ); + fread( model->AlphaR_dyn, sizeof( float ), model->AlphaN * model->K, f_hrtf ); + + /* azimuth */ + fread( &model->num_unique_azim_splines, sizeof( int16_t ), 1, f_hrtf ); + model->azimBsShape = (const float **) count_malloc( model->num_unique_azim_splines * sizeof( float * ) ); + model->azimBsShape_dyn = (float **) count_malloc( model->num_unique_azim_splines * sizeof( float * ) ); + model->azimSegSamples_dyn = (int16_t *) count_malloc( model->num_unique_azim_splines * sizeof( int16_t ) ); + for ( i = 0; i < model->num_unique_azim_splines; i++ ) + { + fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); + model->azimBsShape_dyn[i] = (float *) count_malloc( tmp * sizeof( float ) ); + fread( model->azimBsShape_dyn[i], sizeof( float ), tmp, f_hrtf ); + fread( &model->azimSegSamples_dyn[i], sizeof( int16_t ), 1, f_hrtf ); + } + + model->azimShapeIdx_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); + fread( model->azimShapeIdx_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf ); + model->azimShapeSampFactor_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); + fread( model->azimShapeSampFactor_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf ); + + /* elevation */ + fread( model->elevBsLen, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); + fread( model->elevBsStart, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); + fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); + model->elevBsShape_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + fread( model->elevBsShape_dyn, sizeof( float ), tmp, f_hrtf ); + + fread( &model->elevSegSamples, sizeof( int16_t ), 1, f_hrtf ); + + /* Set const pointers */ + model->AlphaL = (const float *) model->AlphaL_dyn; + model->AlphaR = (const float *) model->AlphaR_dyn; + model->EL = (const float *) model->EL_dyn; + model->ER = (const float *) model->ER_dyn; + model->elevBsShape = (const float *) model->elevBsShape_dyn; + model->elevKSeq = (const float *) model->elevKSeq_dyn; + model->azimDim2 = (const int16_t *) model->azimDim2_dyn; + model->azimDim3 = (const int16_t *) model->azimDim3_dyn; + model->azim_start_idx = (const int16_t *) model->azim_start_idx_dyn; + model->azimSegSamples = (const int16_t *) model->azimSegSamples_dyn; + model->azimShapeIdx = (const int16_t *) model->azimShapeIdx_dyn; + model->azimShapeSampFactor = (const int16_t *) model->azimShapeSampFactor_dyn; + + for ( i = 0; i < model->num_unique_azim_splines; i++ ) + { + model->azimBsShape[i] = (const float *) model->azimBsShape_dyn[i]; + } + + HRTF_model_precalc( model ); + HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K; + + BSplineModelEvalAlloc( &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ); + + if ( HrFiltSet_p->ModelParams.UseItdModel ) + { + LoadBSplineBinaryITD( &HrFiltSet_p->ModelParamsITD, f_hrtf ); + } + + return IVAS_ERR_OK; +} + + +/*-------------------------------------------------------------------* + * TDREND_MIX_LoadHRTF() + * + * Load HRTF model or table from file + --------------------------------------------------------------------*/ +/*! r: TD Renderer result code. */ +static ivas_error TDREND_MIX_LoadHRTF( + FILE *f_hrtf, /* i/o: File pointer to HRTF file */ + IVAS_DEC_HRTF_HANDLE HrFiltSet_p /* o : Loaded HR filter set */ +) +{ + int16_t tmp; + ivas_error error; + + error = IVAS_ERR_OK; + + if ( fread( &tmp, sizeof( int16_t ), 1, f_hrtf ) == 0 ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); + } + + HrFiltSet_p->FilterMethod = (TDREND_HRFILT_Method_t) tmp; + +#ifdef TDREND_HRTF_TABLE_METHODS + switch ( HrFiltSet_p->FilterMethod ) + { + case TDREND_HRFILT_Method_BSplineModel: + error = LoadBSplineBinary( HrFiltSet_p, f_hrtf ); + break; + case TDREND_HRFILT_Method_Table_F: + case TDREND_HRFILT_Method_Table_S: + TDREND_HRFILT_SetFiltSet( HrFiltSet_p, f_hrtf ); + break; + default: + error = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." ); + } +#else + if ( HrFiltSet_p->FilterMethod != TDREND_HRFILT_Method_BSplineModel ) + { + error = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." ); + } + else + { + error = LoadBSplineBinary( HrFiltSet_p, f_hrtf ); + } +#endif + + return error; +} + + +/*---------------------------------------------------------------------* + * load_HRTF_binary() + * + * Load HRTF binary data into the HRTF handle + *---------------------------------------------------------------------*/ + +ivas_error load_HRTF_binary( + IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ + const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */ +) +{ + ivas_error error; + + error = TDREND_MIX_LoadHRTF( hrtfReader->file, hHrtf ); + + return error; +} diff --git a/lib_util/hrtf_file_reader.h b/lib_util/hrtf_file_reader.h new file mode 100644 index 0000000000..ed3d572d56 --- /dev/null +++ b/lib_util/hrtf_file_reader.h @@ -0,0 +1,75 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_HRTF_FILE_READER_H +#define IVAS_HRTF_FILE_READER_H + +#include +#include "common_api_types.h" +#include "ivas_error.h" + + +typedef struct hrtfFileReader hrtfFileReader; + +/*---------------------------------------------------------------------* + * hrtfFileReader_open() + * + * Allocates memory for an hrtfFileReader and opens the file at given path for reading. + *---------------------------------------------------------------------*/ + +ivas_error hrtfFileReader_open( + const char *filePath, /* i : path to hrtf binary file */ + hrtfFileReader **hrtfReader /* o : hrtfFileReader handle */ +); + +/*---------------------------------------------------------------------* + * hrtfFileReader_close() + * + * De-allocates all underlying memory of an hrtfFileReader. + *---------------------------------------------------------------------*/ + +void hrtfFileReader_close( + hrtfFileReader **hrtfReader /* i/o: pointer to hrtfFileReader handle */ +); + +/*---------------------------------------------------------------------* + * load_HRTF_binary() + * + * Load HRTF binary data into the HRTF handle + *---------------------------------------------------------------------*/ + +ivas_error load_HRTF_binary( + IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ + const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */ +); + +#endif /* IVAS_HRTF_FILE_READER_H */ diff --git a/lib_util/ism_file_reader.c b/lib_util/ism_file_reader.c new file mode 100644 index 0000000000..c3e45fa446 --- /dev/null +++ b/lib_util/ism_file_reader.c @@ -0,0 +1,161 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ism_file_reader.h" +#include +#include +#include + + +#define META_LINE_LENGTH 200 /* max number of characters at one line of metadata input/output file */ +#define NUM_ISM_METADATA_PER_LINE 5 /* Number of ISM metadata per line in a metadata file */ + + +struct IsmFileReader +{ + FILE *file; + int32_t frameCounter; + char *file_path; +}; + +IsmFileReader *IsmFileReader_open( + const char *filePath /* i : path to ism metadata file */ +) +{ + IsmFileReader *self; + FILE *file; + + if ( !filePath ) + { + return NULL; + } + + file = fopen( filePath, "rt" ); + + if ( !file ) + { + return NULL; + } + + self = calloc( sizeof( IsmFileReader ), 1 ); + self->file = file; + self->frameCounter = 0; + self->file_path = calloc( sizeof( char ), strlen( filePath ) + 1 ); + strcpy( self->file_path, filePath ); + + return self; +} + +/*! r: error code */ +ivas_error IsmFileReader_readNextFrame( + IsmFileReader *self, /* i/o: IsmFileReader handle */ + IVAS_ISM_METADATA *ismMetadata /* o ISM : metadata read from the opened file */ +) +{ + char char_buff[META_LINE_LENGTH]; + float meta_prm[NUM_ISM_METADATA_PER_LINE]; + char *char_ptr; + int16_t i; + int32_t time_stamp; + FILE *file; + + if ( ismMetadata == NULL || self->file == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + file = self->file; + + if ( fgets( char_buff, META_LINE_LENGTH, file ) == NULL ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + char_ptr = strtok( char_buff, "," ); + time_stamp = (int32_t) atoi( char_ptr ); + + if ( time_stamp != self->frameCounter ) + { + return IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH; + } + + i = 0; + while ( ( char_ptr = strtok( NULL, "," ) ) != NULL && i < NUM_ISM_METADATA_PER_LINE ) + { + meta_prm[i++] = (float) atof( char_ptr ); + } + + if ( i != NUM_ISM_METADATA_PER_LINE ) + { + /* Not enough values provided in one line */ + return IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT; + } + + ismMetadata->azimuth = meta_prm[0]; + ismMetadata->elevation = meta_prm[1]; + ismMetadata->radius = meta_prm[2]; + ismMetadata->spread = meta_prm[3]; + ismMetadata->gainFactor = meta_prm[4]; + + ++self->frameCounter; + + return IVAS_ERR_OK; +} + +void IsmFileReader_close( + IsmFileReader **selfPtr /* i/o: pointer to IsmFileReader handle */ +) +{ + if ( selfPtr == NULL || *selfPtr == NULL ) + { + return; + } + + fclose( ( *selfPtr )->file ); + free( ( *selfPtr )->file_path ); + free( *selfPtr ); + *selfPtr = NULL; + + return; +} + +const char *IsmFileReader_getFilePath( + IsmFileReader *self /* i/o: IsmFileReader handle */ +) +{ + if ( self == NULL ) + { + return NULL; + } + + return self->file_path; +} diff --git a/lib_util/ism_file_reader.h b/lib_util/ism_file_reader.h new file mode 100644 index 0000000000..294b26260e --- /dev/null +++ b/lib_util/ism_file_reader.h @@ -0,0 +1,86 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_ISM_FILE_READER_H +#define IVAS_ISM_FILE_READER_H + +#include +#include "common_api_types.h" +#include "ivas_error.h" + + +typedef struct IsmFileReader IsmFileReader; + +/* clang-format off */ + +/*---------------------------------------------------------------------* + * IsmFileReader_open() + * + * Allocates memory for an IsmFileReader and opens the file at given path for reading. + *---------------------------------------------------------------------*/ +/*! r: IsmFileReader handle */ +IsmFileReader *IsmFileReader_open( + const char *filePath /* i : path to ISM metadata file */ +); + +/*---------------------------------------------------------------------* + * IsmFileReader_readNextFrame() + * + * Reads ISM metadata from a previously opened file into the provided struct. + *---------------------------------------------------------------------*/ +/*! r: error code */ +ivas_error IsmFileReader_readNextFrame( + IsmFileReader *self, /* i/o: IsmFileReader handle */ + IVAS_ISM_METADATA *ismMetadata /* o : ISM metadata read from the opened file */ +); + +/*---------------------------------------------------------------------* + * IsmFileReader_close() + * + * De-allocates all underlying memory of an IsmFileReader. + *---------------------------------------------------------------------*/ +void IsmFileReader_close( + IsmFileReader **selfPtr /* i/o: pointer to IsmFileReader handle */ +); + +/*---------------------------------------------------------------------* + * IsmFileReader_getFilePath() + * + *---------------------------------------------------------------------*/ +/*! r: path to the currently opened file or NULL if `self` is NULL */ +const char *IsmFileReader_getFilePath( + IsmFileReader* self /* i/o: IsmFileReader handle */ +); +/* clang-format on */ + + +#endif /* IVAS_ISM_FILE_READER_H */ diff --git a/lib_util/ism_file_writer.c b/lib_util/ism_file_writer.c new file mode 100644 index 0000000000..64f04f7b02 --- /dev/null +++ b/lib_util/ism_file_writer.c @@ -0,0 +1,178 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ism_file_writer.h" +#include +#include +#include + + +#define META_LINE_LENGTH 200 /* max number of characters at one line of metadata input/output file */ +#define NUM_ISM_METADATA_PER_LINE 5 /* Number of ISM metadata per line in a metadata file */ + + +struct IsmFileWriter +{ + FILE *file; + int32_t frameCounter; + char *file_path; +}; + +/*---------------------------------------------------------------------* + * IsmFileWriter_open() + * + * Allocates memory for an IsmFileReader and opens the file at given path for writing. + *---------------------------------------------------------------------*/ + +/*! r: error code */ +ivas_error IsmFileWriter_open( + const char *filePathWav, /* i : path to output file */ + const int16_t obj_num, /* i : ISm number */ + IsmFileWriter **ismWriter /* o : IsmFileWriter handle */ +) +{ + char filePath[FILENAME_MAX], metadata_filename_loc[FILENAME_MAX - 12], ext_meta[16]; + IsmFileWriter *self; + FILE *file; + + strncpy( metadata_filename_loc, filePathWav, sizeof( metadata_filename_loc ) - 1 ); + sprintf( ext_meta, ".%d.csv", obj_num ); + const int32_t maxNumCharactersToAppend = (int32_t) sizeof( metadata_filename_loc ) - strlen( metadata_filename_loc ) - 1; + strncat( metadata_filename_loc, ext_meta, maxNumCharactersToAppend ); + + strcpy( filePath, metadata_filename_loc ); + metadata_filename_loc[strlen( metadata_filename_loc ) - strlen( ext_meta )] = '\0'; + + if ( strlen( filePathWav ) < 1 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + file = fopen( filePath, "w" ); + + if ( !file ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + self = calloc( sizeof( IsmFileWriter ), 1 ); + self->file = file; + self->frameCounter = 0; + self->file_path = calloc( sizeof( char ), strlen( filePath ) + 1 ); + strcpy( self->file_path, filePath ); + + *ismWriter = self; + + return IVAS_ERR_OK; +} + +/*---------------------------------------------------------------------* + * IsmFileWriter_writeFrame() + * + * Writes ISM metadata into a previously opened file + *---------------------------------------------------------------------*/ + +/*! r: error code */ +ivas_error IsmFileWriter_writeFrame( + const IVAS_ISM_METADATA ismMetadata, /* i : decoded ISM metadata */ + IsmFileWriter *ismWriter /* o : IsmFileReader handle */ +) +{ + char char_buff[META_LINE_LENGTH]; + FILE *file; + + if ( ismWriter->file == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + file = ismWriter->file; + + /* IVAS_fmToDo: work in progress; currently position_azimuth, position_elevation, position_radius, spread, gain_factor */ + sprintf( char_buff, "%04d,%+07.2f,%+06.2f,%05.2f,%06.2f,%04.2f\n", ismWriter->frameCounter, ismMetadata.azimuth, ismMetadata.elevation, ismMetadata.radius, ismMetadata.spread, ismMetadata.gainFactor ); + + if ( file ) + { + fputs( char_buff, file ); + } + else + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + ++ismWriter->frameCounter; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * IsmFileWriter_close() + * + * De-allocates all underlying memory of an IsmFileWriter. + *---------------------------------------------------------------------*/ + +void IsmFileWriter_close( + IsmFileWriter **ismWriter /* i/o: pointer to IsmFileWriter handle */ +) +{ + if ( ismWriter == NULL || *ismWriter == NULL ) + { + return; + } + + fclose( ( *ismWriter )->file ); + free( ( *ismWriter )->file_path ); + free( *ismWriter ); + *ismWriter = NULL; + + return; +} + + +/*---------------------------------------------------------------------* + * IsmFileWriter_getFilePath() + * + *---------------------------------------------------------------------*/ + +/*! r: path to the currently opened file or NULL if `ismWriter` is NULL */ +const char *IsmFileWriter_getFilePath( + IsmFileWriter *ismWriter /* i/o: IsmFileWriter handle */ +) +{ + if ( ismWriter == NULL ) + { + return NULL; + } + + return ismWriter->file_path; +} diff --git a/lib_util/ism_file_writer.h b/lib_util/ism_file_writer.h new file mode 100644 index 0000000000..1624eddd1a --- /dev/null +++ b/lib_util/ism_file_writer.h @@ -0,0 +1,70 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_ISM_FILE_WRITER_H +#define IVAS_ISM_FILE_WRITER_H + +#include +#include "common_api_types.h" +#include "ivas_error.h" + + +typedef struct IsmFileWriter IsmFileWriter; + +/* clang-format off */ + +/*! r: error code */ +ivas_error IsmFileWriter_open( + const char *filePathWav, /* i : path to output file */ + const int16_t obj_num, /* i : ISm number */ + IsmFileWriter **ismWriter /* o : IsmFileReader handle */ +); + +/*! r: error code */ +ivas_error IsmFileWriter_writeFrame( + const IVAS_ISM_METADATA ismMetadata, /* i : decoded ISM metadata */ + IsmFileWriter *ismWriter /* o : IsmFileWriter handle */ +); + +void IsmFileWriter_close( + IsmFileWriter **ismWriter /* i/o: pointer to IsmFileWriter handle */ +); + +/*! r: path to the currently opened file or NULL if `ismWriter` is NULL */ +const char *IsmFileWriter_getFilePath( + IsmFileWriter *ismWriter /* i : IsmFileWriter handle */ +); + + +/* clang-format on */ + +#endif /* IVAS_ISM_FILE_WRITER_H */ diff --git a/lib_util/ivas_prerenderer.c b/lib_util/ivas_prerenderer.c new file mode 100644 index 0000000000..a2c0b4c710 --- /dev/null +++ b/lib_util/ivas_prerenderer.c @@ -0,0 +1,1733 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "options.h" +#include "ivas_prerenderer.h" +#include "ivas_prot.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_prerenderer.h" +#include "prot.h" +#include "wmops.h" + +#include +#include +#include +#include +#include + +#define LIMITER_THRESHOLD 0.9988493699f /* -0.01 dBFS */ + +struct Prndr_Prerenderer +{ + uint32_t sampleRate; + + int8_t isConfigured; /* flag */ + int8_t firstFrame; /* flag */ + + /* I/O */ + Prndr_InputConfig inConfig; + Prndr_OutputConfig outConfig; + + /* =========== Panning =========== */ + EFAP_HANDLE efapRenderer; + + Prndr_ObjPanInfo *objPanInfo; /* size: [numInObjects] */ + + float ***speakerPanGains; /* size: [numInMc][numSpeakers][numOutChannels] */ + + float *tmpGainBuffer; /* size: [numOutChannels] */ + float *noLfePanBuffer; /* size: [numOutChannels] */ + float *crossfade; /* size: [frameSize] */ + /* =============================== */ + + /* Helpers */ + int16_t numOutChannels; /* Total number of output channels */ + int16_t numInChannels; /* Total number of input channels */ + int16_t numInChannelsObj; /* Total number of input channels of object inputs */ + int16_t numInChannelsAmbi; /* Total number of input channels of ambisonics inputs */ + int16_t numInChannelsMc; /* Total number of input channels of multichannel inputs */ + + /* For each channel of MC inputs mcPassThrough contains the corresponding + * output channel index if a passthrough is possible, otherwise contains -1 */ + int32_t *mcPassthrough; /* size: [numInChannelsMc] */ + + /* =========== LFE Handling =========== */ + /* Do not drop LFE when rendering to a layout that does not have + * an LFE channel - render LFE into other channels*/ + int8_t neverDropLfe; /* flag */ + float *lfePanGains; + + /* =========== limiter handle =========== */ + IVAS_LIMITER_HANDLE hLimiter; + + /* Ambisonics decoding matrix */ + float *ambi_dec_mtx; +}; + +/*---------------------------------------------------------------------* + * Prototypes + *---------------------------------------------------------------------*/ +/* clang-off */ +static void renderAmbiToAmbi( + const Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ); + +static void renderChannelsToAmbi( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ); + +static void renderObjectsToAmbi( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const Prndr_AudioObjectMetadataBuffer metadataBuffer, + Prndr_AudioBuffer outAudio ); + +static void renderAmbiToChannels( + const Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ); + +static void renderChannelsToChannels( + const Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ); + +static void renderObjectsToChannels( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const Prndr_AudioObjectMetadataBuffer metadataBuffer, + Prndr_AudioBuffer outAudio ); + +static void renderSingleObjectToAmbi( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const uint32_t itemChnlIdx, /* Index of the item within input audio buffer */ + Prndr_ObjPanInfo *prevPanInfo, + const Prndr_AudioObjectPosition curFrmPos, + const float gain_lin, + Prndr_AudioBuffer outAudio ); + +static void renderSingleObjectToChannels( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const uint32_t itemChnlIdx, /* Index of the item within input audio buffer */ + Prndr_ObjPanInfo *prevPanInfo, + const Prndr_AudioObjectPosition curFrmPos, + const float gain_lin, + Prndr_AudioBuffer outAudio ); + +/* Multiply a single channel by a vector of gains and add result to corresponding output channels */ +static void applyChannelGainsAndAddToOutput( + const Prndr_AudioBuffer inAudio, + const uint32_t itemChnlIdx, /* Index of the item within input audio buffer */ + const float *const gainsCurrent, /* Vector of gains for current frame, corresponding to output channels */ + const float *const gainsPrev, /* Vector of previously applied gains, used for interpolation. Set to NULL for no interpolation */ + const float gain_lin, /* Additional linear gain to be applied when mixing with output buffer */ + const float *const crossfade, + Prndr_AudioBuffer outAudio ); + +static void prepareMcPanGains( + Prndr_Prerenderer *const st ); + +static void prepareLfeHandling( + Prndr_Prerenderer *const st ); + +static void prepareMcPassthrough( + Prndr_Prerenderer *const st ); + +static void passthroughChannel( + const Prndr_AudioBuffer inAudio, + const uint32_t srcChnlIdx, + const uint32_t dstChnlIdx, + const float gain_lin, + Prndr_AudioBuffer outAudio ); + +static void getSpeakerGains( + const Prndr_Prerenderer *const st, + const float azi, + const float ele, + float *const spkGains ); + +static int16_t Prndr_getNumChannelsAmbisonics( + Prndr_Ambisonics ambisonics ); + +static int16_t Prndr_getAmbisonicsOrder( + Prndr_Ambisonics ambisonics ); + +static int16_t Prndr_getNumChannelsInSpeakerLayout( + Prndr_SpeakerLayout layout ); + +static int16_t Prndr_getNumNonLfeChannelsInSpeakerLayout( + Prndr_SpeakerLayout layout ); + +static const float *Prndr_getSpeakerAzimuths( + Prndr_SpeakerLayout layout ); + +static const float *Prndr_getSpeakerElevations( + Prndr_SpeakerLayout layout ); + +static const uint32_t *Prndr_getReorderedChannelIndices( + Prndr_SpeakerLayout layout ); + +static ivas_error Prndr_getHoaRenderMtx( + const Prndr_OutputConfig outConfig, + float **decMtx, + uint32_t ambiOrder ); + +static void Prndr_getHoaDecVecForAmbiChnl( + uint32_t ambiChnnlIdx, + const Prndr_OutputConfig outConfig, + const float *decMtx, + float *decCoeffs ); + +static void ivas_limiter_prerenderer( + IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ + float *output, /* i/o: I/O buffer */ + const int16_t output_frame, /* i : number of samples per channel in the buffer */ + const float threshold /* i : signal amplitude above which limiting starts to be applied */ +); + +static float dBToLin( const float gain_dB ); +/* clang-on */ +/* ========================================================================== */ + +Prndr_Prerenderer *Prndr_Prerenderer_open() +{ + Prndr_Prerenderer *st; + st = (Prndr_Prerenderer *) count_malloc( sizeof( Prndr_Prerenderer ) ); + st->isConfigured = 0; + st->efapRenderer = NULL; + + st->objPanInfo = NULL; + st->speakerPanGains = NULL; + st->tmpGainBuffer = NULL; + st->noLfePanBuffer = NULL; + st->crossfade = NULL; + st->mcPassthrough = NULL; + st->neverDropLfe = 0; + st->lfePanGains = NULL; + st->hLimiter = NULL; + st->ambi_dec_mtx = NULL; + + return st; +} + +ivas_error Prndr_Prerenderer_configure( Prndr_Prerenderer *const st, + const Prndr_InputConfig inConfig, + const Prndr_OutputConfig outConfig, + int32_t frameSize, + uint32_t sampleRate ) +{ + uint32_t i; + int32_t j; + ivas_error error; + + error = IVAS_ERR_OK; + + /* ============================= Error checks ============================= */ + assert( st != NULL && "Can't configure prerenderer - pointer is NULL" ); + assert( !st->isConfigured && "Re-configuring a prerenderer is not supported" ); + assert( !( outConfig.ambisonics != prndr_ambisonics_none && outConfig.speakerLayout != prndr_speaker_layout_none ) && "Multiple outputs not supported" ); + assert( !( outConfig.ambisonics == prndr_ambisonics_none && outConfig.speakerLayout == prndr_speaker_layout_none ) && "At least one output must be selected" ); + assert( !( inConfig.numAudioObjects == 0 && inConfig.numMultiChannelBuses == 0 && inConfig.numAmbisonicsBuses == 0 ) && "At least one input must be active" ); + + /* ========================== Store useful values ========================= */ + st->sampleRate = sampleRate; + st->isConfigured = 1; + st->firstFrame = 1; + st->inConfig = inConfig; + st->outConfig = outConfig; + + /* Save total number of channels in ambisonics inputs */ + st->numInChannelsAmbi = 0; + for ( i = 0; i < inConfig.numAmbisonicsBuses; ++i ) + { + st->numInChannelsAmbi += Prndr_getNumChannelsAmbisonics( inConfig.ambisonicsBuses[i].ambisonicsConfig ); + } + + /* Save total number of channels in MC input */ + st->numInChannelsMc = 0; + for ( i = 0; i < inConfig.numMultiChannelBuses; ++i ) + { + st->numInChannelsMc += Prndr_getNumChannelsInSpeakerLayout( inConfig.multiChannelBuses[i].speakerLayout ); + } + + /* Save total number of channels of audio object inputs */ + st->numInChannelsObj = st->inConfig.numAudioObjects; + + /* Save total number of input channels */ + st->numInChannels = st->numInChannelsObj + st->numInChannelsAmbi + st->numInChannelsMc; + + if ( st->outConfig.ambisonics != prndr_ambisonics_none ) + { + /* Save number of output channels */ + st->numOutChannels = Prndr_getNumChannelsAmbisonics( st->outConfig.ambisonics ); + } + + /* ============================ Prepare panning and ambisonics =========================== */ + if ( st->outConfig.speakerLayout != prndr_speaker_layout_none ) + { + if ( st->outConfig.speakerLayout == prndr_speaker_layout_custom ) + { + /* Save number of output channels */ + st->numOutChannels = st->outConfig.outSetupCustom->num_spk + st->outConfig.outSetupCustom->num_lfe; + + /* Open and initialize EFAP struct */ + if ( ( error = efap_init_data( &st->efapRenderer, st->outConfig.outSetupCustom->ls_azimuth, st->outConfig.outSetupCustom->ls_elevation, st->outConfig.outSetupCustom->num_spk, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + /* Save number of output channels */ + st->numOutChannels = Prndr_getNumChannelsInSpeakerLayout( st->outConfig.speakerLayout ); + + /* Open and initialize EFAP struct */ + if ( ( error = efap_init_data( &st->efapRenderer, Prndr_getSpeakerAzimuths( st->outConfig.speakerLayout ), Prndr_getSpeakerElevations( st->outConfig.speakerLayout ), Prndr_getNumNonLfeChannelsInSpeakerLayout( st->outConfig.speakerLayout ), EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + + assert( st->efapRenderer != NULL && "Could not init EFAP" ); + + /* Compute Ambisonics to loudspeaker decoding matrix */ + if ( ( error = Prndr_getHoaRenderMtx( st->outConfig, &st->ambi_dec_mtx, 3 ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + /* Allocate temporary pan/enc buffer to avoid allocations during rendering */ + st->tmpGainBuffer = count_calloc( st->numOutChannels, sizeof( float ) ); + + /* Allocate temporary buffer for panning gains with lfe omitted */ + if ( st->outConfig.speakerLayout != prndr_speaker_layout_none ) + { + if ( st->outConfig.speakerLayout == prndr_speaker_layout_custom ) + { + st->noLfePanBuffer = count_calloc( st->outConfig.outSetupCustom->num_spk, sizeof( float ) ); + } + else + { + st->noLfePanBuffer = count_calloc( Prndr_getNumNonLfeChannelsInSpeakerLayout( st->outConfig.speakerLayout ), sizeof( float ) ); + } + } + + /* Create lookup tables for panning/encoding speaker signals */ + if ( st->inConfig.numMultiChannelBuses != 0 ) + { + prepareMcPanGains( st ); + prepareLfeHandling( st ); + } + + /* Allocate structs for interpolation of object pan/enc gains between frames */ + if ( st->inConfig.numAudioObjects != 0 ) + { + st->objPanInfo = count_calloc( st->inConfig.numAudioObjects, sizeof( Prndr_ObjPanInfo ) ); + + for ( i = 0; i < st->inConfig.numAudioObjects; ++i ) + { + st->objPanInfo[i].panGains = count_calloc( st->numOutChannels, sizeof( float ) ); + } + } + + /* =========================== Prepare crossfades ========================= */ + st->crossfade = count_calloc( frameSize, sizeof( float ) ); + + for ( j = 0; j < frameSize; ++j ) + { + st->crossfade[j] = (float) j / ( frameSize - 1 ); + } + + /* ========================= Prepare optimizations ======================== */ + /* Make note of possible processing shortcuts in cases where input and output + * config is the same or similar. This only needs to be done for MC I/O, since + * Ambisonics I/O can always be passed through and objects can never be passed + * through */ + if ( st->inConfig.numMultiChannelBuses > 0 && st->outConfig.speakerLayout != prndr_speaker_layout_none ) + { + prepareMcPassthrough( st ); + } + + /* ============================ Configure limiter =========================== */ + st->hLimiter = ivas_limiter_open( st->numOutChannels, st->sampleRate ); + + return error; +} + +void Prndr_Prerenderer_render( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const Prndr_AudioObjectMetadataBuffer metadataBuffer, + Prndr_AudioBuffer outAudio ) +{ +#ifdef WMOPS + wmops_sub_start( "Prndr_Prerenderer_render" ); +#endif + + /* ============================= Error checks ============================= */ + assert( st != NULL && "Can't render - prerenderer pointer is NULL" ); + assert( st->isConfigured && "Can't render - prerenderer pointer is not configured" ); + assert( inAudio.config.sampleRate == outAudio.config.sampleRate && "Input and output sample rate must be the same" ); + assert( inAudio.config.bufferSize == outAudio.config.bufferSize && "Input and output frame size must be the same" ); + assert( inAudio.config.numChannels == st->numInChannels && "Number of input channels does not match between prerenderer and input config" ); + assert( outAudio.config.numChannels == st->numOutChannels && "Number of input channels does not match between prerenderer and input config" ); + assert( inAudio.config.sampleRate != 0 && "Invalid sample rate" ); + assert( inAudio.config.bufferSize != 0 && "Invalid frame size" ); + assert( inAudio.data != NULL && "Can't render - input buffer is empty" ); + + /* ========================== Actual processing =========================== */ + /* Clear output buffer */ + set_zero( outAudio.data, outAudio.config.numChannels * outAudio.config.bufferSize ); + + /* Render target format: Ambisonics */ + if ( st->outConfig.ambisonics != prndr_ambisonics_none ) + { + if ( st->inConfig.numAmbisonicsBuses != 0 ) + { + renderAmbiToAmbi( st, inAudio, outAudio ); + } + + if ( st->inConfig.numMultiChannelBuses != 0 ) + { + renderChannelsToAmbi( st, inAudio, outAudio ); + } + + if ( st->inConfig.numAudioObjects != 0 ) + { + renderObjectsToAmbi( st, inAudio, metadataBuffer, outAudio ); + } + } /* Render target format: multichannel */ + else if ( st->outConfig.speakerLayout != prndr_speaker_layout_none ) + { + if ( st->inConfig.numAmbisonicsBuses != 0 ) + { + renderAmbiToChannels( st, inAudio, outAudio ); + } + + if ( st->inConfig.numMultiChannelBuses != 0 ) + { + renderChannelsToChannels( st, inAudio, outAudio ); + } + + if ( st->inConfig.numAudioObjects != 0 ) + { + renderObjectsToChannels( st, inAudio, metadataBuffer, outAudio ); + } + } + + /* Apply limiting in place */ + ivas_limiter_prerenderer( + st->hLimiter, + outAudio.data, + outAudio.config.bufferSize, + LIMITER_THRESHOLD ); + + if ( st->firstFrame ) + { + st->firstFrame = 0; + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +void Prndr_Prerenderer_setNeverDropLfe( + Prndr_Prerenderer *st, + int8_t neverDropLfe ) +{ + st->neverDropLfe = neverDropLfe; +} + +int16_t Prndr_Prerenderer_getInChannels( + Prndr_Prerenderer *st ) +{ + assert( st != NULL && "Can't get number of input channels - prerenderer pointer is NULL" ); + if ( st ) + { + return st->numInChannels; + } + return 0; +} + +int16_t Prndr_Prerenderer_getOutChannels( + Prndr_Prerenderer *st ) +{ + assert( st != NULL && "Can't get number of output channels - prerenderer pointer is NULL" ); + if ( st ) + { + return st->numOutChannels; + } + return 0; +} + +void Prndr_Prerenderer_close( Prndr_Prerenderer *st ) +{ + uint32_t i; + uint32_t j; + uint32_t numChannels; + assert( st != NULL && "Can't close prerenderer - pointer is NULL" ); + + if ( st->efapRenderer != NULL ) + { + efap_free_data( &st->efapRenderer ); + } + + if ( st->objPanInfo != NULL ) + { + for ( i = 0; i < st->inConfig.numAudioObjects; ++i ) + { + if ( st->objPanInfo[i].panGains != NULL ) + { + count_free( st->objPanInfo[i].panGains ); + } + } + + count_free( st->objPanInfo ); + } + + if ( st->speakerPanGains != NULL ) + { + for ( i = 0; i < st->inConfig.numMultiChannelBuses; ++i ) + { + numChannels = Prndr_getNumChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[i].speakerLayout ); + + for ( j = 0; j < numChannels; ++j ) + { + count_free( st->speakerPanGains[i][j] ); + } + + count_free( st->speakerPanGains[i] ); + } + + count_free( st->speakerPanGains ); + } + + if ( st->outConfig.speakerLayout == prndr_speaker_layout_custom ) + { + count_free( st->outConfig.outSetupCustom ); + st->outConfig.outSetupCustom = NULL; + } + + if ( st->tmpGainBuffer != NULL ) + { + count_free( st->tmpGainBuffer ); + } + + if ( st->noLfePanBuffer != NULL ) + { + count_free( st->noLfePanBuffer ); + } + + if ( st->crossfade != NULL ) + { + count_free( st->crossfade ); + } + + if ( st->mcPassthrough != NULL ) + { + count_free( st->mcPassthrough ); + } + + if ( st->lfePanGains ) + { + count_free( st->lfePanGains ); + } + + if ( st->ambi_dec_mtx != NULL ) + { + count_free( st->ambi_dec_mtx ); + } + + ivas_limiter_close( &st->hLimiter ); + + count_free( st ); +} + +/* ============================= Local functions ============================ */ +static float *get_smpl_ptr( Prndr_AudioBuffer buffer, uint32_t chnlIdx, uint32_t smplIdx ) +{ + return buffer.data + chnlIdx * buffer.config.bufferSize + smplIdx; +} + +static void renderAmbiToAmbi( const Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ) +{ + float *inSmpl; + float *outSmpl; + int16_t lastChannelIdx; + int16_t smplIdx; + int16_t chnlIdx; + uint32_t inAmbiChannelIdx; + uint32_t ambiIdx; + float gain_lin; + + +#ifdef WMOPS + wmops_sub_start( "renderAmbiToAmbi" ); +#endif + + /* Iterate over given Ambisonics inputs */ + for ( ambiIdx = 0; ambiIdx < st->inConfig.numAmbisonicsBuses; ++ambiIdx ) + { + inAmbiChannelIdx = st->inConfig.ambisonicsBuses[ambiIdx].inputChannelIndex; + + /* Find out how many channels to process */ + lastChannelIdx = min( Prndr_getNumChannelsAmbisonics( st->inConfig.ambisonicsBuses[ambiIdx].ambisonicsConfig ), st->numOutChannels ) - 1; + + gain_lin = dBToLin( st->inConfig.ambisonicsBuses[ambiIdx].gain_dB ); + + /* Passthrough channels */ + for ( chnlIdx = 0; chnlIdx <= lastChannelIdx; ++chnlIdx ) + { + inSmpl = get_smpl_ptr( inAudio, chnlIdx + inAmbiChannelIdx, 0 ); + outSmpl = get_smpl_ptr( outAudio, chnlIdx, 0 ); + + for ( smplIdx = 0; smplIdx < inAudio.config.bufferSize; ++smplIdx ) + { + *outSmpl += *inSmpl * gain_lin; + + ++inSmpl; + ++outSmpl; + } + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void renderChannelsToAmbi( Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ) +{ + const uint32_t *lfeLastIdxs; + uint32_t inMcChannelIdx; + uint32_t numNonLfeInChannels; + uint32_t numInChannels; + uint32_t mcIdx; + uint32_t inChIdx; + float gain_lin; + +#ifdef WMOPS + wmops_sub_start( "renderChannelsToAmbi" ); +#endif + + /* Iterate over given MC inputs */ + for ( mcIdx = 0; mcIdx < st->inConfig.numMultiChannelBuses; ++mcIdx ) + { + /* Get channel idx of current MC input within the multitrack buffer */ + inMcChannelIdx = st->inConfig.multiChannelBuses[mcIdx].inputChannelIndex; + + /* Number of input speakers */ + numInChannels = Prndr_getNumChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + numNonLfeInChannels = Prndr_getNumNonLfeChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + lfeLastIdxs = Prndr_getReorderedChannelIndices( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + gain_lin = dBToLin( st->inConfig.multiChannelBuses[mcIdx].gain_dB ); + + /* Iterate over channels */ + for ( inChIdx = 0; inChIdx < numNonLfeInChannels; ++inChIdx ) + { + applyChannelGainsAndAddToOutput( inAudio, + inMcChannelIdx + lfeLastIdxs[inChIdx], + st->speakerPanGains[mcIdx][inChIdx], + NULL, + gain_lin, + st->crossfade, + outAudio ); + } + + if ( st->neverDropLfe ) + { + /* Render LFE channels into the scene */ + for ( ; inChIdx < numInChannels; ++inChIdx ) + { + applyChannelGainsAndAddToOutput( inAudio, + inMcChannelIdx + lfeLastIdxs[inChIdx], + st->lfePanGains, + NULL, + gain_lin, + st->crossfade, + outAudio ); + } + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void renderObjectsToAmbi( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const Prndr_AudioObjectMetadataBuffer metadataBuffer, + Prndr_AudioBuffer outAudio ) +{ + const Prndr_AudioObject *curObj; + uint32_t objIdx; + Prndr_AudioObjectPosition pos; + float gain_lin; + +#ifdef WMOPS + wmops_sub_start( "renderObjectsToAmbi" ); +#endif + + assert( st->inConfig.numAudioObjects == metadataBuffer.numObjects && "Metadata provided for a different number of objects than found in input" ); + + /* Iterate over given audio objects */ + for ( objIdx = 0; objIdx < st->inConfig.numAudioObjects; ++objIdx ) + { + /* Get pointer to current object and its metadata */ + curObj = &st->inConfig.audioObjects[objIdx]; + pos = metadataBuffer.positions[objIdx]; + gain_lin = dBToLin( st->inConfig.audioObjects[objIdx].gain_dB ); + + /* Render to ambisonics */ + renderSingleObjectToAmbi( + st, + inAudio, + curObj->inputChannelIndex, + &st->objPanInfo[objIdx], + pos, + gain_lin, + outAudio ); + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void renderAmbiToChannels( const Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ) +{ + uint32_t inAmbiChannelIdx; + uint32_t ambiIdx; + uint32_t numInAmbiChnls; + uint32_t ambiChnIdx; + float gain_lin; + +#ifdef WMOPS + wmops_sub_start( "renderAmbiToChannels" ); +#endif + + /* Iterate over all given ambisonics inputs */ + for ( ambiIdx = 0; ambiIdx < st->inConfig.numAmbisonicsBuses; ++ambiIdx ) + { + inAmbiChannelIdx = st->inConfig.ambisonicsBuses[ambiIdx].inputChannelIndex; + + /* Number of input channels */ + numInAmbiChnls = Prndr_getNumChannelsAmbisonics( st->inConfig.ambisonicsBuses[ambiIdx].ambisonicsConfig ); + + gain_lin = dBToLin( st->inConfig.multiChannelBuses[ambiIdx].gain_dB ); + + /* Render each ambisonics channel */ + for ( ambiChnIdx = 0; ambiChnIdx < numInAmbiChnls; ++ambiChnIdx ) + { + /* Write decoding gains to temp buffer */ + Prndr_getHoaDecVecForAmbiChnl( ambiChnIdx, st->outConfig, st->ambi_dec_mtx, st->tmpGainBuffer ); + + /* Apply decoding gains and add to output */ + applyChannelGainsAndAddToOutput( inAudio, + inAmbiChannelIdx + ambiChnIdx, + st->tmpGainBuffer, + NULL, + gain_lin, + st->crossfade, + outAudio ); + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void renderChannelsToChannels( + const Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + Prndr_AudioBuffer outAudio ) +{ + const uint32_t *lfeLastIdxs; + uint32_t inMcChannelIdx; + uint32_t numNonLfeInChannels; + uint32_t numInChannels; + uint32_t passThroughIdx; + uint32_t mcIdx; + uint32_t inChIdx; + float gain_lin; + +#ifdef WMOPS + wmops_sub_start( "renderChannelsToChannels" ); +#endif + + passThroughIdx = 0; + + /* Iterate over given MC inputs */ + for ( mcIdx = 0; mcIdx < st->inConfig.numMultiChannelBuses; ++mcIdx ) + { + /* Get channel idx of current MC input within the multitrack buffer */ + inMcChannelIdx = st->inConfig.multiChannelBuses[mcIdx].inputChannelIndex; + + /* Number of non-LFE input channels */ + numNonLfeInChannels = Prndr_getNumNonLfeChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + /* Number of all input channels */ + numInChannels = Prndr_getNumChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + lfeLastIdxs = Prndr_getReorderedChannelIndices( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + gain_lin = dBToLin( st->inConfig.multiChannelBuses[mcIdx].gain_dB ); + + /* Iterate over non-LFE channels */ + for ( inChIdx = 0; inChIdx < numNonLfeInChannels; ++inChIdx ) + { + if ( st->mcPassthrough[passThroughIdx] == -1 ) + { + applyChannelGainsAndAddToOutput( inAudio, + inMcChannelIdx + lfeLastIdxs[inChIdx], + st->speakerPanGains[mcIdx][inChIdx], + NULL, + gain_lin, + st->crossfade, + outAudio ); + } + else + { + passthroughChannel( inAudio, + inMcChannelIdx + lfeLastIdxs[inChIdx], + st->mcPassthrough[passThroughIdx], + gain_lin, + outAudio ); + } + + ++passThroughIdx; + } + + /* Iterate over LFE channels */ + for ( ; inChIdx < numInChannels; ++inChIdx ) + { + /* Pass through if possible */ + if ( st->mcPassthrough[passThroughIdx] != -1 ) + { + passthroughChannel( inAudio, + inMcChannelIdx + lfeLastIdxs[inChIdx], + st->mcPassthrough[passThroughIdx], + gain_lin, + outAudio ); + } + else + { + if ( st->neverDropLfe ) + { + applyChannelGainsAndAddToOutput( inAudio, + inMcChannelIdx + lfeLastIdxs[inChIdx], + st->lfePanGains, + NULL, + gain_lin, + st->crossfade, + outAudio ); + } + } + + ++passThroughIdx; + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void renderObjectsToChannels( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const Prndr_AudioObjectMetadataBuffer metadataBuffer, + Prndr_AudioBuffer outAudio ) +{ + const Prndr_AudioObject *curObj; + uint32_t objIdx; + Prndr_AudioObjectPosition pos; + float gain_lin; + +#ifdef WMOPS + wmops_sub_start( "renderObjectsToChannels" ); +#endif + + assert( st->inConfig.numAudioObjects == metadataBuffer.numObjects && "Metadata provided for a different number of objects than found in input" ); + + /* Iterate over given audio objects */ + for ( objIdx = 0; objIdx < st->inConfig.numAudioObjects; ++objIdx ) + { + /* Get pointer to current object and its metadata */ + curObj = &st->inConfig.audioObjects[objIdx]; + pos = metadataBuffer.positions[objIdx]; + gain_lin = dBToLin( st->inConfig.audioObjects[objIdx].gain_dB ); + + /* Render to MC */ + renderSingleObjectToChannels( + st, + inAudio, + curObj->inputChannelIndex, + &st->objPanInfo[objIdx], + pos, + gain_lin, + outAudio ); + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void renderSingleObjectToAmbi( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const uint32_t itemChnlIdx, + Prndr_ObjPanInfo *prevPanInfo, + const Prndr_AudioObjectPosition curFrmPos, + const float gain_lin, + Prndr_AudioBuffer outAudio ) +{ + float *swapPtr; + +#ifdef WMOPS + wmops_sub_start( "renderSingleObjectToAmbi" ); +#endif + + /* Update panning gains if position changed */ + if ( prevPanInfo->position.azimuth != curFrmPos.azimuth || + prevPanInfo->position.elevation != curFrmPos.elevation || + st->firstFrame ) + { + /* Write current panning gains to tmpBuffer */ + ivas_dirac_dec_get_response( curFrmPos.azimuth, + curFrmPos.elevation, + st->tmpGainBuffer, + Prndr_getAmbisonicsOrder( st->outConfig.ambisonics ) ); + + prevPanInfo->position.azimuth = curFrmPos.azimuth; + prevPanInfo->position.elevation = curFrmPos.elevation; + + applyChannelGainsAndAddToOutput( inAudio, + itemChnlIdx, + st->tmpGainBuffer, + st->firstFrame ? NULL : prevPanInfo->panGains, + gain_lin, + st->crossfade, + outAudio ); + + /* Save current gains as most recently applied gains */ + swapPtr = prevPanInfo->panGains; + prevPanInfo->panGains = st->tmpGainBuffer; + st->tmpGainBuffer = swapPtr; + } + /* Otherwise use most recent gains and no interpolation */ + else + { + applyChannelGainsAndAddToOutput( inAudio, + itemChnlIdx, + prevPanInfo->panGains, + NULL, + gain_lin, + st->crossfade, + outAudio ); + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void renderSingleObjectToChannels( + Prndr_Prerenderer *const st, + const Prndr_AudioBuffer inAudio, + const uint32_t itemChnlIdx, + Prndr_ObjPanInfo *prevPanInfo, + const Prndr_AudioObjectPosition curFrmPos, + const float gain_lin, + Prndr_AudioBuffer outAudio ) +{ + float *swapPtr; + +#ifdef WMOPS + wmops_sub_start( "renderSingleObjectToChannels" ); +#endif + + /* Update panning gains if position changed */ + if ( prevPanInfo->position.azimuth != curFrmPos.azimuth || + prevPanInfo->position.elevation != curFrmPos.elevation || + st->firstFrame ) + { + /* Write current panning gains to tmpBuffer */ + getSpeakerGains( st, curFrmPos.azimuth, curFrmPos.elevation, st->tmpGainBuffer ); + prevPanInfo->position.azimuth = curFrmPos.azimuth; + prevPanInfo->position.elevation = curFrmPos.elevation; + + applyChannelGainsAndAddToOutput( inAudio, + itemChnlIdx, + st->tmpGainBuffer, + st->firstFrame ? NULL : prevPanInfo->panGains, + gain_lin, + st->crossfade, + outAudio ); + + /* Save current gains as most recently applied gains */ + swapPtr = prevPanInfo->panGains; + prevPanInfo->panGains = st->tmpGainBuffer; + st->tmpGainBuffer = swapPtr; + } + /* Otherwise use most recent gains and no interpolation */ + else + { + applyChannelGainsAndAddToOutput( inAudio, + itemChnlIdx, + prevPanInfo->panGains, + NULL, + gain_lin, + st->crossfade, + outAudio ); + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void applyChannelGainsAndAddToOutput( + const Prndr_AudioBuffer inAudio, + const uint32_t itemChnlIdx, + const float *const gainsCurrent, + const float *const gainsPrev, + const float gain_lin, + const float *const crossfade, + Prndr_AudioBuffer outAudio ) +{ + float *inSmpl; + float *outSmpl; + const float *fadeIn; + const float *fadeOut; + const float *lastInSmpl; + int16_t outChnlIdx; + float currentGain; + float previousGain; + +#ifdef WMOPS + wmops_sub_start( "applyChannelGainsAndAddToOutput" ); +#endif + + + /* Pointer to behind last input sample */ + lastInSmpl = get_smpl_ptr( inAudio, itemChnlIdx, inAudio.config.bufferSize ); + + for ( outChnlIdx = 0; outChnlIdx < outAudio.config.numChannels; ++outChnlIdx ) + { +#ifdef WMOPS + wmops_sub_start( "applyChannelGainsAndAddToOutput_chnl_loop" ); +#endif + currentGain = gainsCurrent[outChnlIdx] * gain_lin; + previousGain = gainsPrev == NULL ? 0.f : gainsPrev[outChnlIdx] * gain_lin; + + /* Process current output channel only if applying non-zero gains */ + if ( fabsf( currentGain ) > EPSILON || ( gainsPrev != NULL && fabsf( previousGain ) > EPSILON ) ) + { + /* Reset crossfade pointers */ + fadeIn = crossfade; + fadeOut = &crossfade[inAudio.config.bufferSize - 1]; + + /* Reset input pointer to the beginning of input channel */ + inSmpl = get_smpl_ptr( inAudio, itemChnlIdx, 0 ); + + /* Set output pointer to first output channel sample */ + outSmpl = get_smpl_ptr( outAudio, outChnlIdx, 0 ); + + if ( gainsPrev == NULL || fabsf( previousGain - currentGain ) <= EPSILON ) + { +#ifdef WMOPS + wmops_sub_start( "applyChannelGainsAndAddToOutput_smpl_loop_no_intrpl" ); +#endif + /* If no interpolation from previous frame, apply current gain */ + do + { + *outSmpl += currentGain * ( *inSmpl ); + ++outSmpl; + ++inSmpl; + + } while ( inSmpl != lastInSmpl ); +#ifdef WMOPS + wmops_sub_end(); +#endif + } + else + { +#ifdef WMOPS + wmops_sub_start( "applyChannelGainsAndAddToOutput_smpl_loop_intrpl" ); +#endif + /* Otherwise use weighted average between previous and current gain */ + do + { + *outSmpl += ( ( *fadeIn ) * currentGain + ( *fadeOut ) * previousGain ) * ( *inSmpl ); + ++outSmpl; + ++inSmpl; + + ++fadeIn; + --fadeOut; + } while ( inSmpl != lastInSmpl ); +#ifdef WMOPS + wmops_sub_end(); +#endif + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void prepareLfeHandling( + Prndr_Prerenderer *const st ) +{ + /* uint32_t i; */ + +#ifdef WMOPS + wmops_sub_start( "prepareLfeHandling" ); +#endif + + st->lfePanGains = count_calloc( st->numOutChannels, sizeof( float ) ); + + if ( st->outConfig.ambisonics != prndr_ambisonics_none ) + { + /* Pan LFE to south pole (experimental) */ + ivas_dirac_dec_get_response( 0, + -90, + st->lfePanGains, + Prndr_getAmbisonicsOrder( st->outConfig.ambisonics ) ); + + /* TODO(sgi): Apply 10 dB gain? Almost surely will clip */ + /* for (i=0; i< st->numOutChannels; ++i) { + st->lfePanGains[i] *= 3.1622776602f; + } */ + } + else + { + set_zero( st->lfePanGains, st->numOutChannels ); + + /* Pan LFE to L and R with 4dB gain each (== 10dB - 6dB) */ + if ( st->numOutChannels > 1 ) + { + st->lfePanGains[0] = 1.5848931925f; + st->lfePanGains[1] = 1.5848931925f; + } + else + { + /* Put LFE in center channel, do not add 10dB gain to avoid clipping */ + st->lfePanGains[1] = 1.f; + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void prepareMcPanGains( Prndr_Prerenderer *const st ) +{ + uint32_t mcIdx; + int32_t spkIdx; + int32_t numChannels; + const float *spkAzi; + const float *spkEle; + +#ifdef WMOPS + wmops_sub_start( "prepareMcPanGains" ); +#endif + + st->speakerPanGains = count_calloc( st->inConfig.numMultiChannelBuses, sizeof( float ** ) ); + + for ( mcIdx = 0; mcIdx < st->inConfig.numMultiChannelBuses; ++mcIdx ) + { + numChannels = Prndr_getNumChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + st->speakerPanGains[mcIdx] = count_calloc( numChannels, sizeof( float * ) ); + + spkAzi = Prndr_getSpeakerAzimuths( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + spkEle = Prndr_getSpeakerElevations( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + if ( st->outConfig.ambisonics != prndr_ambisonics_none ) + { + for ( spkIdx = 0; spkIdx < numChannels; ++spkIdx ) + { + st->speakerPanGains[mcIdx][spkIdx] = count_calloc( st->numOutChannels, sizeof( float ) ); + ivas_dirac_dec_get_response( (int16_t) spkAzi[spkIdx], + (int16_t) spkEle[spkIdx], + st->speakerPanGains[mcIdx][spkIdx], + Prndr_getAmbisonicsOrder( st->outConfig.ambisonics ) ); + } + } + else if ( st->outConfig.speakerLayout != prndr_speaker_layout_none ) + { + for ( spkIdx = 0; spkIdx < numChannels; ++spkIdx ) + { + st->speakerPanGains[mcIdx][spkIdx] = count_calloc( st->numOutChannels, sizeof( float ) ); + getSpeakerGains( st, spkAzi[spkIdx], spkEle[spkIdx], st->speakerPanGains[mcIdx][spkIdx] ); + } + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void prepareMcPassthrough( Prndr_Prerenderer *const st ) +{ + /* Output config */ + const float *outSpkAzi; + const float *outSpkEle; + const uint32_t *lfeLastIdxs; + uint32_t numNonLfeOutChannels; + uint32_t numOutChannels; + uint32_t lfeLastIdx_lsCustom[MAX_OUTPUT_CHANNELS]; + + /* Input config */ + const float *inSpkAzi; + const float *inSpkEle; + uint32_t numInChannels; + uint32_t numNonLfeInChannels; + + /* Input channel index */ + uint32_t passThroughIdx; + + uint32_t mcIdx; + uint32_t inChIdx; + uint32_t outChIdx; + +#ifdef WMOPS + wmops_sub_start( "prepareMcPassthrough" ); +#endif + + st->mcPassthrough = count_calloc( st->numInChannelsMc, sizeof( int32_t ) ); + + + if ( st->outConfig.speakerLayout == prndr_speaker_layout_custom ) + { + /* Number of non-LFE output channels */ + numNonLfeOutChannels = st->outConfig.outSetupCustom->num_spk; + + /* Number of output channels */ + numOutChannels = st->outConfig.outSetupCustom->num_spk + st->outConfig.outSetupCustom->num_lfe; + + /* Output speaker coordinates */ + outSpkAzi = st->outConfig.outSetupCustom->ls_azimuth; + outSpkEle = st->outConfig.outSetupCustom->ls_elevation; + + /* num_spk + num_lfe must be <= MAX_OUTPUT_CHANNELS for custom loudspeaker layouts */ + if ( st->outConfig.outSetupCustom->num_lfe > 0 ) + { + lfeLastIdx_lsCustom[numNonLfeOutChannels] = st->outConfig.outSetupCustom->lfe_idx[0]; + } + + for ( outChIdx = 0; outChIdx < numNonLfeOutChannels; ++outChIdx ) + { + ( ( st->outConfig.outSetupCustom->num_lfe > 0 ) && ( (int16_t) outChIdx >= st->outConfig.outSetupCustom->lfe_idx[0] ) ) ? ( lfeLastIdx_lsCustom[outChIdx] = outChIdx + 1 ) : ( lfeLastIdx_lsCustom[outChIdx] = outChIdx ); + } + + lfeLastIdxs = &lfeLastIdx_lsCustom[0]; + } + else + { + /* Number of non-LFE output channels */ + numNonLfeOutChannels = Prndr_getNumNonLfeChannelsInSpeakerLayout( st->outConfig.speakerLayout ); + + /* Number of output channels */ + numOutChannels = Prndr_getNumChannelsInSpeakerLayout( st->outConfig.speakerLayout ); + + /* Output speaker coordinates */ + outSpkAzi = Prndr_getSpeakerAzimuths( st->outConfig.speakerLayout ); + outSpkEle = Prndr_getSpeakerElevations( st->outConfig.speakerLayout ); + + lfeLastIdxs = Prndr_getReorderedChannelIndices( st->outConfig.speakerLayout ); + } + + passThroughIdx = 0; + for ( mcIdx = 0; mcIdx < st->inConfig.numMultiChannelBuses; ++mcIdx ) + { + /* Number of non-LFE input channels for current MC input */ + numNonLfeInChannels = Prndr_getNumNonLfeChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + /* Number of input channels for current MC input */ + numInChannels = Prndr_getNumChannelsInSpeakerLayout( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + /* Input speaker coordinates */ + inSpkAzi = Prndr_getSpeakerAzimuths( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + inSpkEle = Prndr_getSpeakerElevations( st->inConfig.multiChannelBuses[mcIdx].speakerLayout ); + + /* Check if passthrough possible for, save I/O mapping */ + for ( inChIdx = 0; inChIdx < numNonLfeInChannels; ++inChIdx ) + { + st->mcPassthrough[passThroughIdx] = -1; + + for ( outChIdx = 0; outChIdx < numNonLfeOutChannels; ++outChIdx ) + { + if ( inSpkAzi[inChIdx] == outSpkAzi[outChIdx] && + inSpkEle[inChIdx] == outSpkEle[outChIdx] ) + { + st->mcPassthrough[passThroughIdx] = lfeLastIdxs[outChIdx]; + break; + } + } + + ++passThroughIdx; + } + + /* Setup LFE passthrough, save I/O mapping */ + outChIdx = numNonLfeOutChannels; + for ( ; inChIdx < numInChannels; ++inChIdx ) + { + if ( outChIdx < numOutChannels ) + { + st->mcPassthrough[passThroughIdx] = lfeLastIdxs[outChIdx]; + } + else + { + st->mcPassthrough[passThroughIdx] = -1; + } + + ++outChIdx; + ++passThroughIdx; + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void passthroughChannel( const Prndr_AudioBuffer inAudio, + const uint32_t srcChnlIdx, + const uint32_t dstChnlIdx, + const float gain_lin, + Prndr_AudioBuffer outAudio ) +{ + float *inSmpl; + float *outSmpl; + int16_t smplIdx; + +#ifdef WMOPS + wmops_sub_start( "passthroughChannel" ); +#endif + + inSmpl = get_smpl_ptr( inAudio, srcChnlIdx, 0 ); + outSmpl = get_smpl_ptr( outAudio, dstChnlIdx, 0 ); + + for ( smplIdx = 0; smplIdx < inAudio.config.bufferSize; ++smplIdx ) + { + *outSmpl += *inSmpl * gain_lin; + + ++outSmpl; + ++inSmpl; + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +static void getSpeakerGains( const Prndr_Prerenderer *const st, + const float azi, + const float ele, + float *const spkGains ) +{ + const uint32_t *lfeLastIdxs; + int16_t numNonLfeOutChannels; + int16_t noLfeIdx; + Prndr_SpeakerLayout speakerLayout; + +#ifdef WMOPS + wmops_sub_start( "getSpeakerGains" ); +#endif + + /* EFAP returns an array of gains only for non-LFE speakers */ + efap_determine_gains( st->efapRenderer, st->noLfePanBuffer, azi, ele, EFAP_MODE_EFAP ); + + speakerLayout = st->outConfig.speakerLayout; + if ( speakerLayout == prndr_speaker_layout_custom ) + { + uint32_t lfeIdx; + + numNonLfeOutChannels = st->outConfig.outSetupCustom->num_spk; + + /* Clear speaker gains - not all elements will be overwritten below */ + set_zero( spkGains, numNonLfeOutChannels + st->outConfig.outSetupCustom->num_lfe ); + + /* Copy to gain array where LFE channel(s) are included */ + for ( lfeIdx = 0, noLfeIdx = 0; noLfeIdx < numNonLfeOutChannels; lfeIdx++, noLfeIdx++ ) + { + if ( noLfeIdx == st->outConfig.outSetupCustom->lfe_idx[0] ) + { + lfeIdx++; + } + spkGains[lfeIdx] = st->noLfePanBuffer[noLfeIdx]; + } + } + else + { + numNonLfeOutChannels = Prndr_getNumNonLfeChannelsInSpeakerLayout( speakerLayout ); + lfeLastIdxs = Prndr_getReorderedChannelIndices( speakerLayout ); + + /* Clear speaker gains - not all elements will be overwritten below */ + set_zero( spkGains, Prndr_getNumChannelsInSpeakerLayout( speakerLayout ) ); + + /* Copy to gain array where LFE channel(s) are included */ + for ( noLfeIdx = 0; noLfeIdx < numNonLfeOutChannels; ++noLfeIdx ) + { + spkGains[lfeLastIdxs[noLfeIdx]] = st->noLfePanBuffer[noLfeIdx]; + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +int16_t Prndr_getNumChannelsAmbisonics( Prndr_Ambisonics ambisonics ) +{ + switch ( ambisonics ) + { + case prndr_ambisonics_none: + return 0; + case prndr_ambisonics_mono: + return 1; + case prndr_ambisonics_foa: + return 4; + case prndr_ambisonics_soa: + return 9; + case prndr_ambisonics_toa: + return 16; + default: + assert( !"Invalid ambisonics config" ); + } + + return 0; +} + +static int16_t Prndr_getAmbisonicsOrder( Prndr_Ambisonics ambisonics ) +{ + assert( ambisonics != prndr_ambisonics_none && "Invalid ambisonics config" ); + return ambisonics; /* Enum values map to ambisonics order */ +} + +int16_t Prndr_getNumChannelsInSpeakerLayout( Prndr_SpeakerLayout layout ) +{ + switch ( layout ) + { + case prndr_speaker_layout_none: + return 0; + case prndr_speaker_layout_mono: + return 1; + case prndr_speaker_layout_stereo: + return 2; + case prndr_speaker_layout_5_1: + return 6; + case prndr_speaker_layout_7_1: + return 8; + case prndr_speaker_layout_5_1_4: + return 10; + case prndr_speaker_layout_7_1_4: + return 12; + default: + assert( !"Invalid speaker layout" ); + } + + return 0; +} + +int16_t Prndr_getNumNonLfeChannelsInSpeakerLayout( Prndr_SpeakerLayout layout ) +{ + switch ( layout ) + { + case prndr_speaker_layout_mono: + return 1; + case prndr_speaker_layout_stereo: + return 2; + case prndr_speaker_layout_5_1: + return 5; + case prndr_speaker_layout_7_1: + return 7; + case prndr_speaker_layout_5_1_4: + return 9; + case prndr_speaker_layout_7_1_4: + return 11; + default: + assert( !"Invalid speaker layout" ); + } + + return 0; +} + +const float *Prndr_getSpeakerAzimuths( Prndr_SpeakerLayout layout ) +{ + switch ( layout ) + { + case prndr_speaker_layout_mono: + return ls_azimuth_CICP1; + case prndr_speaker_layout_stereo: + return ls_azimuth_CICP2; + case prndr_speaker_layout_5_1: + return ls_azimuth_CICP6; + case prndr_speaker_layout_7_1: + return ls_azimuth_CICP12; + case prndr_speaker_layout_5_1_4: + return ls_azimuth_CICP16; + case prndr_speaker_layout_7_1_4: + return ls_azimuth_CICP19; + default: + assert( !"Invalid speaker layout" ); + } + + return NULL; +} + +const float *Prndr_getSpeakerElevations( Prndr_SpeakerLayout layout ) +{ + switch ( layout ) + { + case prndr_speaker_layout_mono: + return ls_elevation_CICP1; + case prndr_speaker_layout_stereo: + return ls_elevation_CICP2; + case prndr_speaker_layout_5_1: + return ls_elevation_CICP6; + case prndr_speaker_layout_7_1: + return ls_elevation_CICP12; + case prndr_speaker_layout_5_1_4: + return ls_elevation_CICP16; + case prndr_speaker_layout_7_1_4: + return ls_elevation_CICP19; + default: + assert( !"Invalid speaker layout" ); + } + + return NULL; +} + +const uint32_t *Prndr_getReorderedChannelIndices( Prndr_SpeakerLayout layout ) +{ + switch ( layout ) + { + case prndr_speaker_layout_mono: + return ls_LFE_last_idx_CICP1; + case prndr_speaker_layout_stereo: + return ls_LFE_last_idx_CICP2; + case prndr_speaker_layout_5_1: + return ls_LFE_last_idx_CICP6; + case prndr_speaker_layout_7_1: + return ls_LFE_last_idx_CICP12; + case prndr_speaker_layout_5_1_4: + return ls_LFE_last_idx_CICP16; + case prndr_speaker_layout_7_1_4: + return ls_LFE_last_idx_CICP19; + default: + assert( !"Invalid speaker layout" ); + } + + return NULL; +} + +static ivas_error Prndr_getHoaRenderMtx( + const Prndr_OutputConfig outConfig, + float **decMtx, + uint32_t ambiOrder ) +{ + IVAS_OUTPUT_SETUP hOutSetup; + ivas_error error; + + error = IVAS_ERR_OK; + +#ifdef WMOPS + wmops_sub_start( "Prndr_getHoaRenderMtx" ); +#endif + + switch ( outConfig.speakerLayout ) + { + case prndr_speaker_layout_mono: + ivas_output_init( &hOutSetup, AUDIO_CONFIG_MONO ); + hOutSetup.ls_azimuth = ls_azimuth_CICP1; + hOutSetup.ls_elevation = ls_elevation_CICP1; + break; + case prndr_speaker_layout_stereo: + ivas_output_init( &hOutSetup, AUDIO_CONFIG_STEREO ); + break; + case prndr_speaker_layout_5_1: + ivas_output_init( &hOutSetup, AUDIO_CONFIG_5_1 ); + break; + case prndr_speaker_layout_7_1: + ivas_output_init( &hOutSetup, AUDIO_CONFIG_7_1 ); + break; + case prndr_speaker_layout_5_1_4: + ivas_output_init( &hOutSetup, AUDIO_CONFIG_5_1_4 ); + break; + case prndr_speaker_layout_7_1_4: + ivas_output_init( &hOutSetup, AUDIO_CONFIG_7_1_4 ); + break; + case prndr_speaker_layout_custom: + ivas_ls_custom_setup( &hOutSetup, outConfig.outSetupCustom ); + break; + default: + assert( !"Invalid speaker config" ); + return IVAS_ERR_WRONG_PARAMS; + } + + if ( ( error = ivas_sba_get_hoa_dec_matrix( hOutSetup, decMtx, (int16_t) ambiOrder ) ) != IVAS_ERR_OK ) + { + return error; + } + + +#ifdef WMOPS + wmops_sub_end(); +#endif + + return error; +} + +void Prndr_getHoaDecVecForAmbiChnl( + uint32_t ambiChnnlIdx, + const Prndr_OutputConfig outConfig, + const float *decMtx, + float *decCoeffs ) +{ + + const uint32_t *lfeLastIdxs; + int16_t numNonLfeChannels; + int16_t nonLfeChIdx; + +#ifdef WMOPS + wmops_sub_start( "Prndr_getHoaDecVecForAmbiChnl" ); +#endif + + + if ( outConfig.speakerLayout == prndr_speaker_layout_custom ) + { + uint32_t lfeIdx; + + numNonLfeChannels = outConfig.outSetupCustom->num_spk; + + /* Clear speaker gains - not all elements will be overwritten below */ + set_zero( decCoeffs, numNonLfeChannels + outConfig.outSetupCustom->num_lfe ); + + /* Copy to gain array where LFE channel(s) are included */ + for ( lfeIdx = 0, nonLfeChIdx = 0; nonLfeChIdx < numNonLfeChannels; lfeIdx++, nonLfeChIdx++ ) + { + if ( nonLfeChIdx == outConfig.outSetupCustom->lfe_idx[0] ) + { + lfeIdx++; + } + decCoeffs[lfeIdx] = decMtx[16 * nonLfeChIdx + ambiChnnlIdx]; + } + } + else + { + numNonLfeChannels = Prndr_getNumNonLfeChannelsInSpeakerLayout( outConfig.speakerLayout ); + + lfeLastIdxs = Prndr_getReorderedChannelIndices( outConfig.speakerLayout ); + + /* Clear decoding coefficients - not all elements will be overwritten below */ + set_zero( decCoeffs, Prndr_getNumChannelsInSpeakerLayout( outConfig.speakerLayout ) ); + + for ( nonLfeChIdx = 0; nonLfeChIdx < numNonLfeChannels; ++nonLfeChIdx ) + { + decCoeffs[lfeLastIdxs[nonLfeChIdx]] = decMtx[16 * nonLfeChIdx + ambiChnnlIdx]; + } + } + +#ifdef WMOPS + wmops_sub_end(); +#endif +} + +/*-------------------------------------------------------------------* + * ivas_limiter_prerenderer() + * + * In-place saturation control for multichannel buffers with adaptive release time + *-------------------------------------------------------------------*/ +static void ivas_limiter_prerenderer( + IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ + float *output, /* i/o: I/O buffer */ + const int16_t output_frame, /* i : number of samples per channel in the buffer */ + const float threshold /* i : signal amplitude above which limiting starts to be applied */ +) +{ + int16_t c; + float **channels; + int16_t num_channels; + + /* return early if given bad parameters */ + if ( hLimiter == NULL || output == NULL || output_frame <= 0 ) + { + return; + } + + channels = hLimiter->channel_ptrs; + num_channels = hLimiter->num_channels; + + for ( c = 0; c < num_channels; ++c ) + { + channels[c] = output + c * output_frame; + } + + limiter_process( hLimiter, output_frame, threshold, 0, NULL ); + + return; +} + +static float dBToLin( const float gain_dB ) +{ + return powf( 10.f, gain_dB / 20.f ); +} diff --git a/lib_util/ivas_prerenderer.h b/lib_util/ivas_prerenderer.h new file mode 100644 index 0000000000..f21f893dc9 --- /dev/null +++ b/lib_util/ivas_prerenderer.h @@ -0,0 +1,190 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_PRERENDERER_H +#define IVAS_PRERENDERER_H + +#include +#include + +#include "options.h" +#include "common_api_types.h" +#include "ls_custom_file_reader.h" +#include "ivas_error.h" + +#define PRERENDERER_MAX_ISM_INPUTS 16 +#define PRERENDERER_MAX_MC_INPUTS 2 +#define PRERENDERER_MAX_SBA_INPUTS 2 + +typedef enum Prndr_Ambisonics +{ + prndr_ambisonics_none = -1, + prndr_ambisonics_mono = 0, + prndr_ambisonics_foa = 1, + prndr_ambisonics_soa = 2, + prndr_ambisonics_toa = 3 +} Prndr_Ambisonics; /* Numerical value corresponds to Ambisonics order */ + +typedef enum Prndr_SpeakerLayout +{ + prndr_speaker_layout_none = -1, + prndr_speaker_layout_custom = 0, + prndr_speaker_layout_mono = 1, + prndr_speaker_layout_stereo = 2, + prndr_speaker_layout_5_1 = 6, + prndr_speaker_layout_5_1_4 = 16, + prndr_speaker_layout_7_1 = 12, + prndr_speaker_layout_7_1_4 = 19 +} Prndr_SpeakerLayout; /* Numerical value corresponds to CICP index */ + +typedef struct Prndr_AudioObjectPosition +{ + int16_t azimuth; + int16_t elevation; +} Prndr_AudioObjectPosition; + +typedef struct Prndr_AudioObjectMetadataBuffer +{ + Prndr_AudioObjectPosition positions[PRERENDERER_MAX_ISM_INPUTS]; + uint32_t numObjects; +} Prndr_AudioObjectMetadataBuffer; + +typedef struct Prndr_AudioObject +{ + uint8_t inputChannelIndex; + float gain_dB; +} Prndr_AudioObject; + +typedef struct Prndr_ObjPanInfo +{ + Prndr_AudioObjectPosition position; + float *panGains; +} Prndr_ObjPanInfo; + +typedef struct Prndr_AmbisonicsBus +{ + Prndr_Ambisonics ambisonicsConfig; + uint8_t inputChannelIndex; + float gain_dB; +} Prndr_AmbisonicsBus; + +typedef struct Prndr_MultiChannelBus +{ + Prndr_SpeakerLayout speakerLayout; + uint8_t inputChannelIndex; + float gain_dB; +} Prndr_MultiChannelBus; + +typedef struct Prndr_AudioBufferConfig +{ + int32_t sampleRate; + int16_t bufferSize; + int16_t numChannels; +} Prndr_AudioBufferConfig; + +typedef struct Prndr_AudioBuffer +{ + Prndr_AudioBufferConfig config; + float *data; +} Prndr_AudioBuffer; + +typedef struct Prndr_InputConfig +{ + Prndr_AudioObject audioObjects[PRERENDERER_MAX_ISM_INPUTS]; + uint8_t numAudioObjects; + Prndr_MultiChannelBus multiChannelBuses[PRERENDERER_MAX_MC_INPUTS]; + uint8_t numMultiChannelBuses; + Prndr_AmbisonicsBus ambisonicsBuses[PRERENDERER_MAX_SBA_INPUTS]; + uint8_t numAmbisonicsBuses; +} Prndr_InputConfig; + +typedef struct Prndr_OutputConfig +{ + Prndr_SpeakerLayout speakerLayout; + Prndr_Ambisonics ambisonics; + IVAS_LSSETUP_CUSTOM_HANDLE outSetupCustom; +} Prndr_OutputConfig; + +typedef struct Prndr_Prerenderer Prndr_Prerenderer; + +/* clang-format off */ +/*----------------------------------------------------------------------------------* + * Prerenderer prototypes + *----------------------------------------------------------------------------------*/ + +/*! Creates a prerenderer state. + * r: pointer to opened prerenderer */ +Prndr_Prerenderer *Prndr_Prerenderer_open( + void +); + +/*! Configures the prerenderer - needs to be called after Prndr_Prerenderer_open(). */ +ivas_error Prndr_Prerenderer_configure( + Prndr_Prerenderer *const st, /* i : Prerenderer state */ + const Prndr_InputConfig inConfig, /* i : Input configuration */ + const Prndr_OutputConfig outConfig, /* i : Output configuration */ + int32_t frameSize, /* i : Processing frame size in samples */ + uint32_t sampleRate /* i : Processing sampling rate */ +); + +/*! Renders one frame of audio samples */ +void Prndr_Prerenderer_render( + Prndr_Prerenderer *const st, /* i : Prerenderer state */ + const Prndr_AudioBuffer inAudio, /* i : Buffer with pointer to input samples and associated info */ + const Prndr_AudioObjectMetadataBuffer metadataBuffer, /* i : Buffer with object metadata for current frame */ + Prndr_AudioBuffer outAudio /* o : Buffer with pointer to output samples and associated info */ +); + +/*! Enable/disable experimental LFE handling */ +void Prndr_Prerenderer_setNeverDropLfe( + Prndr_Prerenderer *st, /* i : Prerenderer state */ + int8_t neverDropLfe /* i : If 0, LFE channel will be dropped when rendering to configs w/o LFE. + If 1, tries to render LFE into other channels in an optimal way when rendering to configs w/o LFE. */ +); + +/*! Get number of input channels based on InputConfig */ +int16_t Prndr_Prerenderer_getInChannels( + Prndr_Prerenderer *st /* i : Prerenderer state */ +); + +/*! Get number of output channels based on OutputConfig */ +int16_t Prndr_Prerenderer_getOutChannels( + Prndr_Prerenderer *st /* i : Prerenderer state */ +); + +/*! Destructs the prerenderer state and frees memory */ +void Prndr_Prerenderer_close( + Prndr_Prerenderer *st /* i : Prerenderer state */ +); +/* clang-format on */ + +#endif /* IVAS_PRERENDERER_H */ diff --git a/lib_util/ivas_rom_prerenderer.c b/lib_util/ivas_rom_prerenderer.c new file mode 100644 index 0000000000..4342116577 --- /dev/null +++ b/lib_util/ivas_rom_prerenderer.c @@ -0,0 +1,62 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_rom_prerenderer.h" +#include "wmops.h" + +/* clang-format off */ + +/*----------------------------------------------------------------------------------* + * Prerenderer SBA & MC enc/dec matrices + *----------------------------------------------------------------------------------*/ + +/* CICP1 - Mono */ +const float ls_azimuth_CICP1[1] = { 0.0f }; +const float ls_elevation_CICP1[1] = { 0.0f }; +const uint32_t ls_LFE_last_idx_CICP1[1] = { 0 }; + +/* CICP2 - Stereo */ +const uint32_t ls_LFE_last_idx_CICP2[2] = { 0, 1 }; + +/* CICP6 - 5.1 */ +const uint32_t ls_LFE_last_idx_CICP6[6] = { 0, 1, 2, 4, 5, 3 }; + +/* CICP12 - 7.1 */ +const uint32_t ls_LFE_last_idx_CICP12[8] = { 0, 1, 2, 4, 5, 6, 7, 3 }; + +/* CICP16 - 5.1.4 */ +const uint32_t ls_LFE_last_idx_CICP16[10] = { 0, 1, 2, 4, 5, 6, 7, 8, 9, 3 }; + +/* CICP19 - 7.1.4 */ +const uint32_t ls_LFE_last_idx_CICP19[12] = { 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 3 }; + +/* clang-format on */ diff --git a/lib_util/ivas_rom_prerenderer.h b/lib_util/ivas_rom_prerenderer.h new file mode 100644 index 0000000000..6be6ae9863 --- /dev/null +++ b/lib_util/ivas_rom_prerenderer.h @@ -0,0 +1,53 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_ROM_PRERENDERER_H +#define IVAS_ROM_PRERENDERER_H + +#include +#include "options.h" + +/*----------------------------------------------------------------------------------* + * Prerenderer SBA & MC enc/dec matrices + *----------------------------------------------------------------------------------*/ + +extern const float hoa_dec_mtx_CICP1[16]; +extern const float ls_azimuth_CICP1[1]; +extern const float ls_elevation_CICP1[1]; +extern const uint32_t ls_LFE_last_idx_CICP1[1]; +extern const uint32_t ls_LFE_last_idx_CICP2[2]; +extern const uint32_t ls_LFE_last_idx_CICP6[6]; +extern const uint32_t ls_LFE_last_idx_CICP12[8]; +extern const uint32_t ls_LFE_last_idx_CICP16[10]; +extern const uint32_t ls_LFE_last_idx_CICP19[12]; + +#endif /* IVAS_ROM_PRERENDERER_H */ diff --git a/lib_util/jbm_file_writer.c b/lib_util/jbm_file_writer.c new file mode 100644 index 0000000000..bf34c51872 --- /dev/null +++ b/lib_util/jbm_file_writer.c @@ -0,0 +1,293 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "jbm_file_writer.h" +#include +#include +#include + + +struct JbmOffsetFileWriter +{ + FILE *file; + char *file_path; +}; + +#ifdef SUPPORT_JBM_TRACEFILE +struct JbmTraceFileWriter +{ + FILE *file; + char *file_path; +}; +#endif + + +/*---------------------------------------------------------------------* + * JbmOffsetFileWriter_open() + * + * Allocates memory for an JbmOffsetFileReader and opens the file at given path for writing. + *---------------------------------------------------------------------*/ + +/*! r: error code */ +ivas_error JbmOffsetFileWriter_open( + const char *jbmOffsetFilename, /* i : path to output JBM offset file */ + JbmOffsetFileWriter **jbmOffsetWriter /* o : JbmOffsetFileWriter handle */ +) +{ + JbmOffsetFileWriter *self; + FILE *file; + + if ( strlen( jbmOffsetFilename ) < 1 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + file = fopen( jbmOffsetFilename, "w" ); + + if ( !file ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + self = calloc( sizeof( JbmTraceFileWriter ), 1 ); + self->file = file; + self->file_path = calloc( sizeof( char ), strlen( jbmOffsetFilename ) + 1 ); + strcpy( self->file_path, jbmOffsetFilename ); + + *jbmOffsetWriter = self; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * JbmOffsetFileWriter_writeFrame() + * + * Writes JBM offset to a previously opened file. + *---------------------------------------------------------------------*/ + +/*! r: error code */ +ivas_error JbmOffsetFileWriter_writeFrame( + const int16_t FEC_hi, + int16_t optimum_offset, + JbmOffsetFileWriter *jbmOffsetWriter /* i/o: JbmOffsetFileWriter handle */ +) +{ + FILE *file; + + if ( jbmOffsetWriter->file == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + file = jbmOffsetWriter->file; + + if ( file ) + { + if ( FEC_hi == 1 ) + { + fprintf( file, "HI " ); + } + else + { + fprintf( file, "LO " ); + } + + if ( optimum_offset == 1 || optimum_offset == 2 ) + { + optimum_offset = 2; + } + else if ( optimum_offset == 3 || optimum_offset == 4 ) + { + optimum_offset = 3; + } + else if ( optimum_offset == 5 || optimum_offset == 6 ) + { + optimum_offset = 5; + } + else if ( optimum_offset >= 7 ) + { + optimum_offset = 7; + } + + fprintf( file, "%d\n", optimum_offset ); + } + else + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * JbmOffsetFileWriter_close() + * + * De-allocates all underlying memory of an JbmOffsetFileWriter. + *---------------------------------------------------------------------*/ + +void JbmOffsetFileWriter_close( + JbmOffsetFileWriter **jbmOffsetWriter /* i/o: pointer to JbmOffsetFileWriter handle */ +) +{ + if ( jbmOffsetWriter == NULL || *jbmOffsetWriter == NULL ) + { + return; + } + + fclose( ( *jbmOffsetWriter )->file ); + free( ( *jbmOffsetWriter )->file_path ); + free( *jbmOffsetWriter ); + *jbmOffsetWriter = NULL; + + return; +} + + +#ifdef SUPPORT_JBM_TRACEFILE + +/*---------------------------------------------------------------------* + * JbmTraceFileWriter_open() + * + * Allocates memory for an JbmTraceFileReader and opens the file at given path for writing. + *---------------------------------------------------------------------*/ + +/*! r: error code */ +ivas_error JbmTraceFileWriter_open( + const char *jbmTraceFilename, /* i : path to output JBM tracefile */ + JbmTraceFileWriter **jbmTraceWriter /* o : JbmFileWriter handle */ +) +{ + JbmTraceFileWriter *self; + FILE *file; + +#ifdef SUPPORT_JBM_TRACEFILE +#endif + + if ( strlen( jbmTraceFilename ) < 1 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + file = fopen( jbmTraceFilename, "w" ); + + if ( !file ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + fprintf( file, "#rtpSeqNo;rtpTs;rcvTime;playTime;active\n" ); + + self = calloc( sizeof( JbmTraceFileWriter ), 1 ); + self->file = file; + self->file_path = calloc( sizeof( char ), strlen( jbmTraceFilename ) + 1 ); + strcpy( self->file_path, jbmTraceFilename ); + + *jbmTraceWriter = self; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * JbmTraceFileWriter_writeFrame() + * + * Writes JBM Tracefile data to a previously opened file. + *---------------------------------------------------------------------*/ + +/*! r: error code */ +ivas_error JbmTraceFileWriter_writeFrame( + const IVAS_JBM_TRACE_DATA *JbmTraceData, /* i : JBM trace data */ + JbmTraceFileWriter *jbmTraceWriter /* o : JbmTraceFileWriter handle */ +) +{ + FILE *file; + + if ( jbmTraceWriter->file == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + file = jbmTraceWriter->file; + + if ( file ) + { + /* rtpSeqNo;rtpTs;rcvTime;playTime;active\n */ + if ( JbmTraceData->dataUnit_flag ) + { + if ( JbmTraceData->partial_frame_flag == 1 ) + { + fprintf( file, "%d;%d;%d;%f;%d;%d\n", -1, -1, -1, JbmTraceData->playTime, JbmTraceData->lastDecodedWasActive, JbmTraceData->partialCopyOffset ); + } + else + { + fprintf( file, "%u;%u;%u;%f;%d\n", JbmTraceData->sequenceNumber, JbmTraceData->timeStamp, JbmTraceData->rcvTime, JbmTraceData->playTime, JbmTraceData->lastDecodedWasActive ); + } + } + else + { + fprintf( file, "%d;%d;%d;%f;%d\n", -1, -1, -1, JbmTraceData->playTime, JbmTraceData->lastDecodedWasActive ); + } + } + else + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * JbmTraceFileWriter_close() + * + * De-allocates all underlying memory of an JbmTraceFileWriter. + *---------------------------------------------------------------------*/ + +void JbmTraceFileWriter_close( + JbmTraceFileWriter **jbmTraceWriter /* i/o: pointer to JbmTraceFileWriter handle */ +) +{ + if ( jbmTraceWriter == NULL || *jbmTraceWriter == NULL ) + { + return; + } + + fclose( ( *jbmTraceWriter )->file ); + free( ( *jbmTraceWriter )->file_path ); + free( *jbmTraceWriter ); + *jbmTraceWriter = NULL; + + return; +} +#endif diff --git a/lib_util/jbm_file_writer.h b/lib_util/jbm_file_writer.h new file mode 100644 index 0000000000..5cfab08f61 --- /dev/null +++ b/lib_util/jbm_file_writer.h @@ -0,0 +1,86 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_JBM_FILE_WRITER_H +#define IVAS_JBM_FILE_WRITER_H + +#include +#include "common_api_types.h" +#include "ivas_error.h" + +/* clang-format off */ + + +typedef struct JbmOffsetFileWriter JbmOffsetFileWriter; +#ifdef SUPPORT_JBM_TRACEFILE +typedef struct JbmTraceFileWriter JbmTraceFileWriter; +#endif + + +ivas_error JbmOffsetFileWriter_open( + const char *jbmOffsetFilename, /* i : path to output JBM offset file */ + JbmOffsetFileWriter **jbmOffsetWriter /* o : JbmOffsetFileWriter handle */ +); + +/*! r: error code */ +ivas_error JbmOffsetFileWriter_writeFrame( + const int16_t FEC_hi, + int16_t optimum_offset, + JbmOffsetFileWriter *jbmOffsetWriter /* o : JbmTOffsetFileWriter handle */ +); + +void JbmOffsetFileWriter_close( + JbmOffsetFileWriter **jbmOffsetWriter /* i/o: pointer to JbmOffsetFileWriter handle */ +); + + +#ifdef SUPPORT_JBM_TRACEFILE +/*! r: error code */ +ivas_error JbmTraceFileWriter_open( + const char *jbmTraceFilename, /* i : path to output JBM tracefile */ + JbmTraceFileWriter **jbmTraceWriter /* o : JbmTraceFileWriter handle */ +); + +/*! r: error code */ +ivas_error JbmTraceFileWriter_writeFrame( + const IVAS_JBM_TRACE_DATA *JbmTraceData, /* i : JBM data */ + JbmTraceFileWriter *jbmWriter /* o : JbmTraceFileWriter handle */ +); + +void JbmTraceFileWriter_close( + JbmTraceFileWriter **jbmTraceWriter /* i/o: pointer to JbmTraceFileWriter handle */ +); +#endif + +/* clang-format on */ + +#endif /* IVAS_JBM_FILE_WRITER_H */ diff --git a/lib_util/ls_custom_file_reader.c b/lib_util/ls_custom_file_reader.c new file mode 100644 index 0000000000..c961374c20 --- /dev/null +++ b/lib_util/ls_custom_file_reader.c @@ -0,0 +1,404 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ls_custom_file_reader.h" +#include +#include +#include +#include "ivas_prot.h" +#include "prot.h" + + +struct LsCustomFileReader +{ + FILE *file; + char *file_path; +}; + + +/*-----------------------------------------------------------------------* + * CustomLsReader_open() + * + * Allocate and initialize Custom LS layout reader + *-----------------------------------------------------------------------*/ + +ivas_error CustomLsReader_open( + char *LsFilePath, /* i : LS custom layout file name */ + LsCustomFileReader **hLsCustomReader /* o : HeadRotFileReader handle */ +) +{ + LsCustomFileReader *self; + FILE *lsFile; + + /* Open trajectory file */ + if ( strlen( LsFilePath ) < 1 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + lsFile = fopen( LsFilePath, "r" ); + + if ( !lsFile ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + self = calloc( sizeof( LsCustomFileReader ), 1 ); + self->file = lsFile; + self->file_path = calloc( sizeof( char ), strlen( LsFilePath ) + 1 ); + strcpy( self->file_path, LsFilePath ); + + *hLsCustomReader = self; + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * CustomLsReader_close() + * + * Deallocates memory for the Custom LS layout reader + *-----------------------------------------------------------------------*/ + +void CustomLsReader_close( + LsCustomFileReader **hLsCustomReader /* i/o: HeadRotFileReader handle */ +) +{ + if ( hLsCustomReader == NULL || *hLsCustomReader == NULL ) + { + return; + } + + fclose( ( *hLsCustomReader )->file ); + free( ( *hLsCustomReader )->file_path ); + free( *hLsCustomReader ); + *hLsCustomReader = NULL; + + return; +} + + +/*-------------------------------------------------------------------------* + * CustomLoudspeakerLayout_validate() + * + * Validate values for a custom loudspeaker setup + *-------------------------------------------------------------------------*/ + +static LS_CUSTOM_FILEREADER_ERROR CustomLoudspeakerLayout_validate( + int16_t *num_azi, /* i : Number of azimuth loudspeakers */ + int16_t *num_ele, /* i : Number of elevation loudspeakers */ + float *azi, /* i : Loudspeaker azimuths */ + float *ele, /* i : Loudspeaker elevations */ + const int16_t num_lfe /* i : Number of LFE channels */ +) +{ + int16_t i, j; + int16_t dup_count; + int16_t dup[IVAS_MAX_OUTPUT_CHANNELS]; + float azi_tmp[IVAS_MAX_OUTPUT_CHANNELS]; + float ele_tmp[IVAS_MAX_OUTPUT_CHANNELS]; + + if ( *num_azi != *num_ele ) + { + return LS_CUSTOM_FILEREADER_NUM_SPK_MISMATCH_ERROR; + } + + /* IVAS_OUTPUT_SETUP only supports 1 LFE - can be removed in the future */ + if ( num_lfe > 1 ) + { + return LS_CUSTOM_FILEREADER_LFE_NUM_SPK_EXCEEDED_ERROR; + } + + if ( ( *num_azi + num_lfe ) > IVAS_MAX_OUTPUT_CHANNELS ) + { + return LS_CUSTOM_FILEREADER_OUTPUT_NCHAN_EXCEEDED_ERROR; + } + + /* Wrap angles */ + for ( i = 0; i < *num_azi; i++ ) + { + panning_wrap_angles( azi[i], ele[i], &azi[i], &ele[i] ); + } + + /* Check for and flag duplicate loudspeakers */ + dup_count = 0; + set_s( dup, 0, IVAS_MAX_OUTPUT_CHANNELS ); + for ( i = 0; i < *num_azi; i++ ) + { + for ( j = i + 1; j < *num_azi; j++ ) + { + if ( azi[i] == azi[j] && ele[i] == ele[j] ) + { + dup[j] = 1; + } + } + } + + /* Remove duplicates from array */ + set_zero( azi_tmp, IVAS_MAX_OUTPUT_CHANNELS ); + set_zero( ele_tmp, IVAS_MAX_OUTPUT_CHANNELS ); + + for ( i = 0, j = 0; i < *num_azi; i++ ) + { + if ( dup[i] ) + { + dup_count++; + continue; + } + azi_tmp[j] = azi[i]; + ele_tmp[j] = ele[i]; + j++; + } + + ( *num_azi ) -= dup_count; + mvr2r( azi_tmp, azi, IVAS_MAX_OUTPUT_CHANNELS ); + mvr2r( ele_tmp, ele, IVAS_MAX_OUTPUT_CHANNELS ); + + return LS_CUSTOM_FILEREADER_NO_ERROR; +} + + +/*-------------------------------------------------------------------------* + * CustomLoudspeakerLayout_print_info() + * + * Print information for a custom loudspeaker setup + *-------------------------------------------------------------------------*/ + +static void CustomLoudspeakerLayout_print_info( + const IVAS_CUSTOM_LS_DATA *hLsCustomData /* i : Custom loudspeaker setup data */ +) +{ + int16_t i; + + fprintf( stdout, "\nCustom Loudspeaker configuration:" ); + fprintf( stdout, "\n AZI, ELE " ); + for ( i = 0; i < hLsCustomData->num_spk; i++ ) + { + fprintf( stdout, "\n(% 4.0f, % 4.0f)", hLsCustomData->azimuth[i], hLsCustomData->elevation[i] ); + } + + if ( hLsCustomData->num_lfe > 0 ) + { + fprintf( stdout, "\nLFE indice(s):" ); + for ( i = 0; i < ( hLsCustomData->num_lfe - 1 ); i++ ) + { + fprintf( stdout, " % 2d,", hLsCustomData->lfe_idx[i] ); + } + fprintf( stdout, " % 2d", hLsCustomData->lfe_idx[i] ); + } + + fprintf( stdout, "\n" ); + + return; +} + + +/*-------------------------------------------------------------------------* + * CustomLsFileReading() + * + * Parse a custom loudspeaker setup file data + *-------------------------------------------------------------------------*/ + +LS_CUSTOM_FILEREADER_ERROR CustomLsFileReading( + LsCustomFileReader *hLsCustomReader, /* i/o: HeadRotFileReader handle */ + IVAS_CUSTOM_LS_DATA *hLsCustomData /* o : Custom loudspeaker setup data */ +) +{ + LS_CUSTOM_FILEREADER_ERROR error; + + char line[200]; /* > (10 chars * IVAS_MAX_OUTPUT_CHANNELS) i.e. "-999, " */ + const char *tok; + + int16_t num_azi, num_ele, num_lfe; + + /* initialize variables */ + num_azi = 0; + num_ele = 0; + num_lfe = 0; + + set_zero( hLsCustomData->azimuth, IVAS_MAX_OUTPUT_CHANNELS ); + set_zero( hLsCustomData->elevation, IVAS_MAX_OUTPUT_CHANNELS ); + set_s( hLsCustomData->lfe_idx, -1, IVAS_MAX_OUTPUT_CHANNELS ); + + if ( hLsCustomReader->file == NULL ) + { + return LS_CUSTOM_FILEREADER_NULL_PTR; + } + + /* parse loudspeaker azimuths */ + if ( ( fgets( line, 200, hLsCustomReader->file ) == NULL ) || ( strcmp( line, "\n" ) == 0 ) || ( strcmp( line, "\r\n" ) == 0 ) ) + { + fclose( hLsCustomReader->file ); + + return LS_CUSTOM_FILEREADER_EOF_ERROR; + } + + for ( tok = strtok( line, "," ); tok && *tok; tok = strtok( NULL, ",\n" ) ) + { + while ( *tok == ' ' ) + { + tok++; + } + + if ( *tok == '\0' ) + { + continue; + } + + if ( num_azi >= IVAS_MAX_OUTPUT_CHANNELS ) + { + return LS_CUSTOM_FILEREADER_AZI_NUM_SPK_EXCEEDED_ERROR; + } + else + { + hLsCustomData->azimuth[num_azi] = (float) atof( tok ); + num_azi++; + } + } + + /* parse loudspeaker elevations */ + if ( ( fgets( line, 200, hLsCustomReader->file ) == NULL ) || ( strcmp( line, "\n" ) == 0 ) || ( strcmp( line, "\r\n" ) == 0 ) ) + { + return LS_CUSTOM_FILEREADER_EOF_ERROR; + } + + for ( tok = strtok( line, "," ); tok && *tok; tok = strtok( NULL, ",\n" ) ) + { + while ( *tok == ' ' ) + { + tok++; + } + + if ( *tok == '\0' ) + { + continue; + } + + if ( num_ele >= IVAS_MAX_OUTPUT_CHANNELS ) + { + return LS_CUSTOM_FILEREADER_ELE_NUM_SPK_EXCEEDED_ERROR; + } + else + { + hLsCustomData->elevation[num_ele] = (float) atof( tok ); + num_ele++; + } + } + + /* parse LFE indicies; skip if blank line */ + if ( ( fgets( line, 200, hLsCustomReader->file ) != NULL ) && ( strcmp( line, "\n" ) != 0 ) && ( strcmp( line, "\r\n" ) != 0 ) ) + { + for ( tok = strtok( line, "," ); tok && *tok; tok = strtok( NULL, ",\n" ) ) + { + while ( *tok == ' ' ) + { + tok++; + } + + if ( *tok == '\0' ) + { + continue; + } + + if ( num_lfe > IVAS_MAX_OUTPUT_CHANNELS ) + { + return LS_CUSTOM_FILEREADER_LFE_NUM_SPK_EXCEEDED_ERROR; + } + else + { + hLsCustomData->lfe_idx[num_lfe] = (int16_t) atoi( tok ); + if ( hLsCustomData->lfe_idx[num_lfe] < 0 || hLsCustomData->lfe_idx[num_lfe] > ( IVAS_MAX_OUTPUT_CHANNELS - 1 ) ) + { + return LS_CUSTOM_FILEREADER_LFE_INDEX_ERROR; + } + num_lfe++; + } + } + } + + /* Perform validation */ + if ( ( error = CustomLoudspeakerLayout_validate( &num_azi, &num_ele, hLsCustomData->azimuth, hLsCustomData->elevation, num_lfe ) ) != LS_CUSTOM_FILEREADER_NO_ERROR ) + { + return error; + } + + /* Loudspeaker azimuths and elevations */ + hLsCustomData->num_spk = num_azi; + + /* Loudspeaker LFE */ + hLsCustomData->num_lfe = num_lfe; + + /* Print information about setup */ + CustomLoudspeakerLayout_print_info( hLsCustomData ); + + return LS_CUSTOM_FILEREADER_NO_ERROR; +} + + +/*-------------------------------------------------------------------------* + * CustomLoudspeakerLayout_getError() + * + * Retrun error message for custom loudspeaker setup error + *-------------------------------------------------------------------------*/ + +/*!r : custom LS error message */ +const char *CustomLoudspeakerLayout_getError( + LS_CUSTOM_FILEREADER_ERROR error /* i : custom LS error */ +) +{ + switch ( error ) + { + case LS_CUSTOM_FILEREADER_NO_ERROR: + return "no error"; + case LS_CUSTOM_FILEREADER_NULL_PTR: + return "unexpected NULL pointer"; + case LS_CUSTOM_FILEREADER_EOF_ERROR: + return "early or unexpected EOF"; + case LS_CUSTOM_FILEREADER_AZI_NUM_SPK_EXCEEDED_ERROR: + return "too many azimuth positions specified"; + case LS_CUSTOM_FILEREADER_ELE_NUM_SPK_EXCEEDED_ERROR: + return "too many elevation positions specified"; + case LS_CUSTOM_FILEREADER_LFE_NUM_SPK_EXCEEDED_ERROR: + return "only one LFE channel index is supported"; + case LS_CUSTOM_FILEREADER_LFE_INDEX_ERROR: + return "invalid or negative LFE index specified"; + case LS_CUSTOM_FILEREADER_NUM_SPK_MISMATCH_ERROR: + return "mismatch between specified number of azimuth and elevation positions"; + case LS_CUSTOM_FILEREADER_OUTPUT_NCHAN_EXCEEDED_ERROR: + return "too many output channels specified"; + case LS_CUSTOM_FILEREADER_MALLOC_ERROR: + return "error allocating memory"; + case LS_CUSTOM_FILEREADER_UNKNOWN_ERROR: + default: + return "unknown error"; + } +} diff --git a/lib_util/ls_custom_file_reader.h b/lib_util/ls_custom_file_reader.h new file mode 100644 index 0000000000..3f9e0d56d3 --- /dev/null +++ b/lib_util/ls_custom_file_reader.h @@ -0,0 +1,105 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_LS_CUSTOM_FILE_READER_H +#define IVAS_LS_CUSTOM_FILE_READER_H + +#include +#include "common_api_types.h" +#include "ivas_error.h" + + +typedef struct LsCustomFileReader LsCustomFileReader; + + +typedef enum _LS_CUSTOM_FILEREADER_ERROR +{ + LS_CUSTOM_FILEREADER_NO_ERROR = 0x0000, + LS_CUSTOM_FILEREADER_NULL_PTR = 0x0001, + LS_CUSTOM_FILEREADER_EOF_ERROR = 0x0002, + LS_CUSTOM_FILEREADER_AZI_NUM_SPK_EXCEEDED_ERROR = 0x0003, + LS_CUSTOM_FILEREADER_ELE_NUM_SPK_EXCEEDED_ERROR = 0x0004, + LS_CUSTOM_FILEREADER_LFE_NUM_SPK_EXCEEDED_ERROR = 0x0005, + LS_CUSTOM_FILEREADER_LFE_INDEX_ERROR = 0x0006, + LS_CUSTOM_FILEREADER_NUM_SPK_MISMATCH_ERROR = 0x0007, + LS_CUSTOM_FILEREADER_OUTPUT_NCHAN_EXCEEDED_ERROR = 0x0008, + LS_CUSTOM_FILEREADER_MALLOC_ERROR = 0x0009, + LS_CUSTOM_FILEREADER_UNKNOWN_ERROR = 0xffff, + +} LS_CUSTOM_FILEREADER_ERROR; + + +/*-----------------------------------------------------------------------* + * CustomLsReader_open() + * + * Allocate and initialize Custom LS layout reader + *-----------------------------------------------------------------------*/ + +ivas_error CustomLsReader_open( + char *LsFilePath, /* i : LS custom layout file name */ + LsCustomFileReader **hLsCustomReader /* o : HeadRotFileReader handle */ +); + +/*-----------------------------------------------------------------------* + * CustomLsReader_close() + * + * Deallocates memory for the Custom LS layout reader + *-----------------------------------------------------------------------*/ + +void CustomLsReader_close( + LsCustomFileReader **hLsCustomReader /* i/o: HeadRotFileReader handle */ +); + +/*-------------------------------------------------------------------------* + * CustomLsFileReading() + * + * Parse a custom loudspeaker setup file data + *-------------------------------------------------------------------------*/ + +LS_CUSTOM_FILEREADER_ERROR CustomLsFileReading( + LsCustomFileReader *hLsCustomReader, /* i/o: HeadRotFileReader handle */ + IVAS_CUSTOM_LS_DATA *hLsCustomData /* o : Custom loudspeaker setup data */ +); + +/*-------------------------------------------------------------------------* + * CustomLoudspeakerLayout_getError() + * + * Retrun error message for custom loudspeaker setup error + *-------------------------------------------------------------------------*/ + +/*!r : custom LS error message */ +const char *CustomLoudspeakerLayout_getError( + LS_CUSTOM_FILEREADER_ERROR error /* i : custom LS error */ +); + + +#endif /* IVAS_LS_CUSTOM_FILE_READER_H */ diff --git a/lib_util/masa_file_reader.c b/lib_util/masa_file_reader.c new file mode 100644 index 0000000000..918d613d37 --- /dev/null +++ b/lib_util/masa_file_reader.c @@ -0,0 +1,428 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "masa_file_reader.h" +#include "ivas_prot.h" +#include +#include +#include + + +struct MasaFileReader +{ + FILE *file; + MASA_METADATA_FRAME metadataFrame; + SPHERICAL_GRID_DATA sph_grid16; +}; + +/*------------------------------------------------------------------------- + * MasaFileReader_open() + * + * Allocate and open MasaFileReader handle + *------------------------------------------------------------------------*/ + +MasaFileReader *MasaFileReader_open( + const char *fileName /* i : path to MASA metadata file */ +) +{ + MasaFileReader *self; + FILE *file; + + if ( !fileName ) + { + return NULL; + } + + file = fopen( fileName, "rb" ); + + if ( !file ) + { + return NULL; + } + + self = calloc( sizeof( MasaFileReader ), 1 ); + self->file = file; + generate_gridEq( &self->sph_grid16 ); + + return self; +} + + +/*------------------------------------------------------------------------- + * MasaFileReader_getMetadataHandle() + * + * AGet MasaFileReader handle + *------------------------------------------------------------------------*/ + +IVAS_MASA_METADATA_HANDLE MasaFileReader_getMetadataHandle( + MasaFileReader *self /* i/o: MasaFileReader handle */ +) +{ + if ( self == NULL ) + { + return NULL; + } + + return &self->metadataFrame; +} + +/*------------------------------------------------------------------------- + * deindex_sph_idx() + * + * deindex the MASA metadata from the input metadata file + *------------------------------------------------------------------------*/ + +static void deindex_sph_idx( + const uint16_t sphIndex, /* i : Spherical index */ + const SPHERICAL_GRID_DATA *gridData, /* i : Prepared spherical grid */ + float *theta, /* o : Elevation */ + float *phi /* o : Azimuth */ +) +{ + float ba_crt, del_crt, div_crt, a4_crt; + float estim; + int32_t base_low, base_up; + int16_t n_crt; + int16_t id_th; + int16_t sign_theta; + int16_t id_phi; + int16_t no_th = gridData->no_theta; + const int16_t *n = gridData->no_phi; + const float ba[3] = { + 2.137991118026424e+02f, + 1.244854404591542e+02f, + 1.228408647140870e+02f, + }; + const float del[3] = { 7.998262115303199e+05f, 1.300883976959332e+06f, 1.424072242426373e+06f }; + const float div[3] = { -0.237662341081474f, -0.100938185496887f, -0.092050209205032f }; + const float a4[3] = { -8.415300425381099f, -19.814106922515204f, -21.727272727270197f }; + const uint16_t limit_index1 = 64964, limit_index2 = 47870; + + if ( sphIndex >= limit_index1 ) + { + ba_crt = ba[2]; + div_crt = div[2]; + a4_crt = a4[2]; + del_crt = del[2]; + } + else if ( sphIndex >= limit_index2 ) + { + ba_crt = ba[1]; + div_crt = div[1]; + a4_crt = a4[1]; + del_crt = del[1]; + } + else + { + ba_crt = ba[0]; + div_crt = div[0]; + a4_crt = a4[0]; + del_crt = del[0]; + } + estim = ba_crt + div_crt * sqrtf( del_crt + a4_crt * sphIndex ); + + if ( estim > MASA_NO_CIRCLES ) + { + estim = MASA_NO_CIRCLES; + } + + assert( estim > 0 ); + id_th = (int16_t) roundf( estim ) - 1; + if ( id_th < 0 ) + { + id_th = 0; + } + + if ( id_th == 0 ) + { + base_low = 0; + base_up = n[0]; + } + else + { + estim = MASA_ANGLE_AT_EQUATOR * (float) ( id_th - 0.5f ); + base_low = n[0]; + if ( id_th >= 2 ) + { + if ( id_th == 2 ) + { + base_low += 2 * (int16_t) ceilf( MASA_NTOT2_FAC * ( sinf( estim ) - MASA_ASIN_OFFSET ) ); + } + else + { + base_low += 2 * (int16_t) roundf( MASA_NTOT2_FAC * ( sinf( estim ) - MASA_ASIN_OFFSET ) ); + } + } + base_up = base_low + 2 * n[id_th]; + } + + sign_theta = 1; + + n_crt = n[id_th]; + if ( sphIndex < base_low ) + { + id_th--; + n_crt = n[id_th]; + if ( id_th == 0 ) + { + base_low = 0; + base_up = n_crt; + } + else + { + base_up = base_low; + base_low -= 2 * n[id_th]; + } + assert( sphIndex >= base_low ); + } + else if ( sphIndex >= base_up ) + { + id_th++; + n_crt = n[id_th]; + base_low = base_up; + base_up += 2 * n_crt; + assert( sphIndex < base_up ); + } + + id_phi = (int16_t) ( sphIndex - base_low ); + if ( sphIndex - base_low >= n_crt ) + { + id_phi -= n_crt; + sign_theta = -1; + } + + if ( id_th == 0 ) + { + *theta = 0.f; + *phi = (float) sphIndex * 360 / (float) n_crt - 180; + } + else + { + if ( id_th == no_th - 1 ) + { + id_phi = 0; + *phi = -180; + *theta = 90 * (float) sign_theta; + } + else + { + *theta = id_th * MASA_ANGLE_AT_EQUATOR_DEG * (float) sign_theta; + if ( id_th % 2 == 0 ) + { + *phi = (float) id_phi * 360 / (float) n_crt - 180; + } + else + { + *phi = ( (float) id_phi + 0.5f ) * 360 / (float) n_crt - 180; + } + } + } + + return; +} + + +/*------------------------------------------------------------------------- + * MasaFileReader_readNextFrame() + * + * Read MASA data + *------------------------------------------------------------------------*/ + +ivas_error MasaFileReader_readNextFrame( + MasaFileReader *self /* i/o: MasaFileReader handle */ +) +{ + if ( self == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + const uint8_t ivasmasaFormatDescriptor[8] = { 0x49, 0x56, 0x41, 0x53, 0x4D, 0x41, 0x53, 0x41 }; /* "IVASMASA" */ + uint16_t twoByteBuffer = 0; + int16_t i, j, b; + IVAS_MASA_METADATA_HANDLE hMeta; + FILE *metafile; + uint16_t readIndex[MASA_FREQUENCY_BANDS]; + uint8_t readOther[MASA_FREQUENCY_BANDS]; + + hMeta = &self->metadataFrame; + metafile = self->file; + + /* Read version */ + if ( fread( &hMeta->descriptive_meta.formatDescriptor, sizeof( uint8_t ), 8, metafile ) != 8 ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + for ( i = 0; i < 8; i++ ) + { + if ( hMeta->descriptive_meta.formatDescriptor[i] != ivasmasaFormatDescriptor[i] ) + { +#ifdef DEBUGGING + fprintf( stderr, "Input format is not IVASMASA\n" ); +#endif + return IVAS_ERR_INVALID_MASA_FORMAT_METADATA_FILE; + } + } + + /* Read combined descriptive meta */ + if ( fread( &twoByteBuffer, sizeof( uint16_t ), 1, metafile ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + /* Extract rest of the descriptive meta from the two-byte value */ + hMeta->descriptive_meta.numberOfDirections = ( twoByteBuffer >> 15u ) & 0x1u; + hMeta->descriptive_meta.numberOfChannels = ( twoByteBuffer >> 14u ) & 0x1u; + hMeta->descriptive_meta.sourceFormat = ( twoByteBuffer >> 12u ) & 0x3u; + if ( hMeta->descriptive_meta.sourceFormat == 0x0 || hMeta->descriptive_meta.sourceFormat == 0x1 ) + { + hMeta->descriptive_meta.transportDefinition = ( twoByteBuffer >> 9u ) & 0x7u; + hMeta->descriptive_meta.channelAngle = ( twoByteBuffer >> 6u ) & 0x7u; + hMeta->descriptive_meta.channelDistance = twoByteBuffer & 0x3Fu; + hMeta->descriptive_meta.channelLayout = 0; /* Set to zero as unused */ + } + else if ( hMeta->descriptive_meta.sourceFormat == 0x2 ) + { + hMeta->descriptive_meta.channelLayout = ( twoByteBuffer >> 9u ) & 0x7u; + /* 9 LSB unused */ + hMeta->descriptive_meta.transportDefinition = 0; /* Set to zero as unused */ + hMeta->descriptive_meta.channelAngle = 0; /* Set to zero as unused */ + hMeta->descriptive_meta.channelDistance = 0; /* Set to zero as unused */ + } + else if ( hMeta->descriptive_meta.sourceFormat == 0x3 ) + { + hMeta->descriptive_meta.transportDefinition = ( twoByteBuffer >> 9u ) & 0x7u; + hMeta->descriptive_meta.channelAngle = ( twoByteBuffer >> 6u ) & 0x7u; + /* 6 LSB unused */ + hMeta->descriptive_meta.channelDistance = 0; /* Set to zero as unused */ + hMeta->descriptive_meta.channelLayout = 0; /* Set to zero as unused */ + } + + for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; ++j ) + { + /* Read directional spatial meta */ + for ( i = 0; i < hMeta->descriptive_meta.numberOfDirections + 1; ++i ) + { + /* Spherical index */ + if ( fread( readIndex, sizeof( uint16_t ), MASA_FREQUENCY_BANDS, metafile ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) + { + deindex_sph_idx( readIndex[b], &self->sph_grid16, &( hMeta->directional_meta[i].elevation[j][b] ), &( hMeta->directional_meta[i].azimuth[j][b] ) ); + } + + /* Direct-to-total ratio */ + if ( fread( readOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, metafile ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) + { + hMeta->directional_meta[i].energy_ratio[j][b] = ( (float) readOther[b] ) / UINT8_MAX; + } + + /* Spread coherence */ + if ( fread( readOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, metafile ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) + { + hMeta->directional_meta[i].spread_coherence[j][b] = ( (float) readOther[b] ) / UINT8_MAX; + } + } + + /* Read common spatial meta */ + /* Diffuse-to-total ratio */ + if ( fread( readOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, metafile ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) + { + hMeta->common_meta.diffuse_to_total_ratio[j][b] = ( (float) readOther[b] ) / UINT8_MAX; + } + + /* Surround coherence */ + if ( fread( readOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, metafile ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) + { + hMeta->common_meta.surround_coherence[j][b] = ( (float) readOther[b] ) / UINT8_MAX; + } + + /* Remainder-to-total ratio */ + if ( fread( readOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, metafile ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) + { + hMeta->common_meta.remainder_to_total_ratio[j][b] = ( (float) readOther[b] ) / UINT8_MAX; + } + } + + return IVAS_ERR_OK; +} + +/*------------------------------------------------------------------------- + * MasaFileReader_close() + * + * Close MasaFileReader + *------------------------------------------------------------------------*/ + +void MasaFileReader_close( + MasaFileReader **selfPtr /* i/o: pointer to MasaFileReader handle */ +) +{ + if ( selfPtr == NULL || *selfPtr == NULL ) + { + return; + } + + fclose( ( *selfPtr )->file ); + free( *selfPtr ); + *selfPtr = NULL; + + return; +} diff --git a/lib_util/masa_file_reader.h b/lib_util/masa_file_reader.h new file mode 100644 index 0000000000..898303c99e --- /dev/null +++ b/lib_util/masa_file_reader.h @@ -0,0 +1,85 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_MASA_FILE_READER_H +#define IVAS_MASA_FILE_READER_H + +#include +#include "common_api_types.h" +#include "ivas_error.h" + + +struct MasaFileReader; +typedef struct MasaFileReader MasaFileReader; + + +/*! r: MasaFileReader handle */ +MasaFileReader *MasaFileReader_open( + const char *fileName /* i : path to MASA metadata file */ +); + +/*---------------------------------------------------------------------* + * MasaFileReader_getMetadataHandle() + * + * Returns a handle to an already allocated MASA metadata frame struct. + * Metadata for each frame is available through this handle after + * MasaFileReader_readNextFrame is called. + *---------------------------------------------------------------------*/ +/*! r: handle to MASA metadata */ +IVAS_MASA_METADATA_HANDLE MasaFileReader_getMetadataHandle( + MasaFileReader *self /* i/o: MasaFileReader handle */ +); + +/*---------------------------------------------------------------------* + * MasaFileReader_readNextFrame() + * + * Reads MASA metadata for one frame from the opened file into the internal + * MASA metadata frame struct. The metadata is available through the struct + * handle returned by MasaFileReader_getMetadataHandle(). + *---------------------------------------------------------------------*/ +/*! r: error code */ +ivas_error MasaFileReader_readNextFrame( + MasaFileReader *self /* i/o: MasaFileReader handle */ +); + +/*---------------------------------------------------------------------* + * MasaFileReader_close() + * + * Deallocate the MasaFileReader. This also includes the MASA metadata + * frame struct available through MasaFileReader_getMetadataHandle. + *---------------------------------------------------------------------*/ +void MasaFileReader_close( + MasaFileReader **selfPtr /* i/o: pointer to MasaFileReader handle */ +); + + +#endif /* IVAS_MASA_FILE_READER_H */ diff --git a/lib_util/masa_file_writer.c b/lib_util/masa_file_writer.c new file mode 100644 index 0000000000..e8f9a09c68 --- /dev/null +++ b/lib_util/masa_file_writer.c @@ -0,0 +1,357 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "masa_file_writer.h" +#include "ivas_stat_com.h" +#include "ivas_cnst.h" +#include +#include +#include +#include + + +struct MasaFileWriter +{ + FILE *file; + char *file_path; +}; + +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define SPH_IDX_FRONT ( MASA_NO_POINTS_EQUATOR / 2 ) /* Spherical index corresponding to front direction for setting as default value */ + + +/*-----------------------------------------------------------------------* + * Local functions + *-----------------------------------------------------------------------*/ + +static void getExtMasaMetadataFileName( + const char *outputWavFilename, /* i : name of the output audio file */ + char metadata_filename[IVAS_MAX_NUM_OBJECTS][FILENAME_MAX - 12] /* o : name of the output masa metadata file */ +) +{ + char ext_meta[5]; + + /* sizeof( ext_meta ) accounts for terminating NULL, don't subtract extra 1 */ + const int32_t maxNameLenWithoutExt = sizeof( metadata_filename[0] ) - sizeof( ext_meta ); + strncpy( metadata_filename[0], outputWavFilename, maxNameLenWithoutExt ); + sprintf( ext_meta, ".met" ); + + /* strlen( metadata_filename[0] ) doesn't account for terminating NULL, subtract extra 1 */ + const int32_t maxNumCharactersToAppend = (int32_t) ( sizeof( metadata_filename[0] ) - strlen( metadata_filename[0] ) - 1 ); + strncat( metadata_filename[0], ext_meta, maxNumCharactersToAppend ); + + return; +} + + +/*---------------------------------------------------------------------* + * MasaFileWriter_writeFrame() + * + * + *---------------------------------------------------------------------*/ + +ivas_error MasaFileWriter_open( + const char *outputWavFilename, /* i : name of the output audio file */ + MasaFileWriter **masaWriter /* o : MasaFileWriter handle */ +) +{ + MasaFileWriter *self; + FILE *file; + char filePath[FILENAME_MAX - 12]; + + if ( strlen( outputWavFilename ) < 1 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + getExtMasaMetadataFileName( outputWavFilename, &filePath ); + + file = fopen( filePath, "wb" ); + + if ( !file ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + self = calloc( sizeof( MasaFileWriter ), 1 ); + self->file = file; + self->file_path = calloc( sizeof( char ), strlen( filePath ) + 1 ); + strcpy( self->file_path, filePath ); + + *masaWriter = self; + + return IVAS_ERR_OK; +} + + +/*---------------------------------------------------------------------* + * MasaFileWriter_writeFrame() + * + * + *---------------------------------------------------------------------*/ + +ivas_error MasaFileWriter_writeFrame( + MasaFileWriter *self, /* i/o: MasaFileWriter handle */ + IVAS_MASA_QMETADATA_HANDLE hMasaQMetadata /* i/o: MASA qMetadata handle to be written */ +) +{ + if ( self == NULL ) + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + const uint8_t ivasmasaFormatDescriptor[8] = { 0x49, 0x56, 0x41, 0x53, 0x4D, 0x41, 0x53, 0x41 }; /* "IVASMASA" */ + uint16_t descMetaTemp = 0; + int16_t i, sf, b_old, b_new, dir; + uint16_t writeTempIndex[MASA_FREQUENCY_BANDS]; + uint8_t writeTempOther[MASA_FREQUENCY_BANDS]; + MASA_DECRIPTIVE_META descMeta; + int16_t *bandMap; + uint8_t numCodingBands; + uint8_t numDirections; + int16_t nchan_transport; + + numDirections = (uint8_t) hMasaQMetadata->no_directions; + numCodingBands = hMasaQMetadata->numCodingBands; + bandMap = hMasaQMetadata->bandMap; + nchan_transport = hMasaQMetadata->nchan_transport; + + /* Construct descriptive meta */ + for ( i = 0; i < 8; i++ ) + { + descMeta.formatDescriptor[i] = ivasmasaFormatDescriptor[i]; + descMeta.numberOfDirections = numDirections - 1; + descMeta.numberOfChannels = (uint8_t) ( nchan_transport - 1 ); + /* Following correspond to "unknown" values until transmission is implemented */ + descMeta.sourceFormat = 0x0u; + descMeta.transportDefinition = 0x0u; + descMeta.channelAngle = 0x0u; + descMeta.channelDistance = 0x0u; + descMeta.channelLayout = 0x0u; + } + + if ( fwrite( &( descMeta.formatDescriptor ), sizeof( uint8_t ), 8, self->file ) != 8 ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + descMetaTemp += descMeta.numberOfDirections << 15u; + descMetaTemp += descMeta.numberOfChannels << 14u; + descMetaTemp += descMeta.sourceFormat << 12u; + if ( descMeta.sourceFormat == 0x0 || descMeta.sourceFormat == 0x1 ) + { + descMetaTemp += descMeta.transportDefinition << 9u; + descMetaTemp += descMeta.channelAngle << 6u; + descMetaTemp += descMeta.channelDistance; + } + else if ( descMeta.sourceFormat == 0x2 ) + { + descMetaTemp += descMeta.channelLayout << 9u; + /* 9 LSB remain at zero */ + } + else if ( descMeta.sourceFormat == 0x3 ) + { + descMetaTemp += descMeta.transportDefinition << 9u; + descMetaTemp += descMeta.channelAngle << 6u; + /* 6 LSB remain at zero */ + } + + if ( fwrite( &( descMetaTemp ), sizeof( uint16_t ), 1, self->file ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + for ( dir = 0; dir < numDirections; dir++ ) + { + /* Spherical index */ + for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) + { + writeTempIndex[i] = SPH_IDX_FRONT; + } + + for ( b_old = 0; b_old < numCodingBands; b_old++ ) + { + for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) + { + writeTempIndex[b_new] = hMasaQMetadata->q_direction[dir].band_data[b_old].spherical_index[sf]; + } + } + + if ( fwrite( writeTempIndex, sizeof( uint16_t ), MASA_FREQUENCY_BANDS, self->file ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + /* Direct-to-total ratio */ + for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) + { + writeTempOther[i] = 0; + } + + for ( b_old = 0; b_old < numCodingBands; b_old++ ) + { + for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) + { + writeTempOther[b_new] = (uint8_t) floorf( hMasaQMetadata->q_direction[dir].band_data[b_old].energy_ratio[sf] * UINT8_MAX ); + } + } + + if ( fwrite( writeTempOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, self->file ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + /* Spread coherence */ + for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) + { + writeTempOther[i] = 0; + } + + if ( hMasaQMetadata->q_direction[dir].coherence_band_data != NULL ) + { + for ( b_old = 0; b_old < numCodingBands; b_old++ ) + { + for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) + { + writeTempOther[b_new] = hMasaQMetadata->q_direction[dir].coherence_band_data[b_old].spread_coherence[sf]; + } + } + } + + if ( fwrite( writeTempOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, self->file ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + } + + /* Common spatial meta */ + /* Diffuse-to-total ratio = 1 - sum(direct-to-total ratios) */ + for ( b_new = 0; b_new < MASA_FREQUENCY_BANDS; b_new++ ) + { + writeTempOther[b_new] = UINT8_MAX; + } + + for ( b_old = 0; b_old < numCodingBands; b_old++ ) + { + for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) + { + writeTempOther[b_new] = UINT8_MAX; + for ( dir = 0; dir < numDirections; dir++ ) + { + writeTempOther[b_new] -= (uint8_t) floorf( hMasaQMetadata->q_direction[dir].band_data[b_old].energy_ratio[sf] * UINT8_MAX ); + } + } + } + + if ( fwrite( writeTempOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, self->file ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + /* Surround coherence */ + for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) + { + writeTempOther[i] = 0; + } + + if ( hMasaQMetadata->surcoh_band_data != NULL ) + { + for ( b_old = 0; b_old < numCodingBands; b_old++ ) + { + for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) + { + writeTempOther[b_new] = hMasaQMetadata->surcoh_band_data[b_old].surround_coherence[sf]; + } + } + } + + if ( fwrite( writeTempOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, self->file ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + /* Remainder-to-total ratio */ + /* This is zero after codec */ + for ( b_new = 0; b_new < MASA_FREQUENCY_BANDS; b_new++ ) + { + writeTempOther[b_new] = 0u; + } + + if ( fwrite( writeTempOther, sizeof( uint8_t ), MASA_FREQUENCY_BANDS, self->file ) != MASA_FREQUENCY_BANDS ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + } + + return IVAS_ERR_OK; +} + +/*---------------------------------------------------------------------* + * MasaFileWriter_close() + * + * Deallocate the MasaFileWriter. This also includes the MASA metadata + * frame struct available through MasaFileWriter_getMetadataHandle. + *---------------------------------------------------------------------*/ + +void MasaFileWriter_close( + MasaFileWriter **selfPtr /* i/o: pointer to MasaFileWriter handle */ +) +{ + if ( selfPtr == NULL || *selfPtr == NULL ) + { + return; + } + + fclose( ( *selfPtr )->file ); + free( ( *selfPtr )->file_path ); + free( *selfPtr ); + *selfPtr = NULL; + + return; +} + +const char *MasaFileWriter_getFilePath( + MasaFileWriter *selfPtr /* i : MasaFileWriter handle */ +) +{ + if ( selfPtr == NULL ) + { + return NULL; + } + + return selfPtr->file_path; +} diff --git a/lib_util/masa_file_writer.h b/lib_util/masa_file_writer.h new file mode 100644 index 0000000000..ce4ed2e238 --- /dev/null +++ b/lib_util/masa_file_writer.h @@ -0,0 +1,63 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_MASA_FILE_WRITER_H +#define IVAS_MASA_FILE_WRITER_H + +#include +#include "common_api_types.h" +#include "ivas_error.h" + + +struct MasaFileWriter; +typedef struct MasaFileWriter MasaFileWriter; + +ivas_error MasaFileWriter_open( + const char *outputWavFilename, /* i : name of the output audio file */ + MasaFileWriter **masaWriter /* o : MasaFileWriter handle */ +); + +ivas_error MasaFileWriter_writeFrame( + MasaFileWriter *self, /* i/o: MasaFileWriter handle */ + IVAS_MASA_QMETADATA_HANDLE hMasaQMetadata /* i/o: MASA qMetadata handle to be written */ +); + +void MasaFileWriter_close( + MasaFileWriter **selfPtr /* i/o: pointer to MasaFileWriter handle */ +); + +const char *MasaFileWriter_getFilePath( + MasaFileWriter *selfPtr /* i : MasaFileWriter handle */ +); + + +#endif /* IVAS_MASA_FILE_WRITER_H */ diff --git a/lib_util/mime_io.c b/lib_util/mime_io.c new file mode 100644 index 0000000000..36cd61adbb --- /dev/null +++ b/lib_util/mime_io.c @@ -0,0 +1,658 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "options.h" +#include "mime_io.h" +#include "mime.h" +#include "prot.h" +#include "string.h" +#include +#include +#include + + +#define NUM_CHANNELS 1 + +/* main handle */ +struct MIME_IO +{ + FILE *file; + bool ownFileHandle; /* flag whether FILE handle created by instance or externally */ + uint16_t numChannels; +}; + + +/*-------------------------------------------------------------------* + * writeByte() + * + * function to write a 8-bit value to the file + *-------------------------------------------------------------------*/ + +static bool writeByte( + FILE *file, + unsigned char value ) +{ + if ( fputc( value, file ) == value ) + { + return true; + } + return false; +} + + +/*-------------------------------------------------------------------* + * writeLong() + * + * function to write a 32-bit value to the file + *-------------------------------------------------------------------*/ + +static bool writeLong( + FILE *file, + uint32_t value ) +{ + char buffer[4]; + + buffer[3] = value & 0xff; + buffer[2] = ( value >> 8 ) & 0xff; + buffer[1] = ( value >> 16 ) & 0xff; + buffer[0] = ( value >> 24 ) & 0xff; + + if ( fwrite( buffer, 4, 1, file ) != 1U ) + { + return false; + } + + return true; +} + +/*-------------------------------------------------------------------* + * writeHeader() + * + * Write MIME header + *-------------------------------------------------------------------*/ + +static int16_t writeHeader( + FILE *file ) +{ + /* write mime header */ + fprintf( file, "#!EVS_MC%s\n", "1.0" ); + if ( !writeLong( file, 1 ) ) + { + return 0; + } + return -1; +} + + +/*-------------------------------------------------------------------* + * MIME_Writer_Open_FILE() + * + * Open MIME writer handle + *-------------------------------------------------------------------*/ + +MIME_ERROR MIME_Writer_Open_FILE( MIME_HANDLE *phMIME, FILE *file ) +{ + /* create handle */ + *phMIME = (MIME_HANDLE) calloc( 1, sizeof( struct MIME_IO ) ); + if ( !phMIME ) + { + return MIME_MEMORY_ERROR; + } + + /* open file stream */ + ( *phMIME )->file = file; + if ( ( *phMIME )->file == NULL ) + { + MIME_Writer_Close( phMIME ); + return MIME_WRONG_PARAMS; + } + ( *phMIME )->ownFileHandle = false; + + writeHeader( ( *phMIME )->file ); + + return MIME_NO_ERROR; +} + + +/*-------------------------------------------------------------------* + * MIME_Writer_Open_filename() + * + * Open MIME writer + *-------------------------------------------------------------------*/ + +MIME_ERROR MIME_Writer_Open_filename( + MIME_HANDLE *phMIME, + const char *filename ) +{ + /* create handle */ + *phMIME = (MIME_HANDLE) calloc( 1, sizeof( struct MIME_IO ) ); + if ( !phMIME ) + { + return MIME_MEMORY_ERROR; + } + + /* open file stream */ + ( *phMIME )->file = fopen( filename, "wb" ); + if ( ( *phMIME )->file == NULL ) + { + free( *phMIME ); + *phMIME = NULL; + return MIME_FILE_NOT_FOUND; + } + ( *phMIME )->ownFileHandle = true; + + writeHeader( ( *phMIME )->file ); + + return MIME_NO_ERROR; +} + + +/*-------------------------------------------------------------------* + * MIME_WriteFrame() + * + * Write MIME frame + *-------------------------------------------------------------------*/ + +MIME_ERROR MIME_WriteFrame( + MIME_HANDLE hMIME, + const uint16_t *serial, + const int16_t numBits, + const int32_t totalBrate ) +{ + uint8_t ToC = 0x00; + int16_t i; + uint8_t byte = 0; + int16_t isAmrWb = 0; + + if ( !hMIME ) + { + return MIME_NOT_INITIALIZED; + } + + for ( i = 0; i < NUM_CHANNELS; i++ ) + { + int16_t mode; + int16_t cmi; + mode = rate2EVSmode( numBits * FRAMES_PER_SEC, &isAmrWb ); + cmi = rate2EVSmode( totalBrate, &isAmrWb ); + + ToC = (uint8_t) ( isAmrWb << 5 | isAmrWb << 4 | mode ); + writeByte( hMIME->file, ToC ); + + if ( isAmrWb ) + { + const int16_t numExtraBits = ( mode == AMRWB_IO_SID ) ? 5 : 0; + uint16_t serial_extra[5], mask; + uint8_t bit, bitinbyte; + int16_t j; + + if ( mode == AMRWB_IO_SID ) /* SID frame */ + { + /* insert STI bit and CMI */ + serial_extra[0] = 1; + + for ( mask = 0x08, j = 0; mask > 0; mask >>= 1, j++ ) + { + serial_extra[1 + j] = ( cmi & mask ) ? 1 : 0; + } + } + + for ( i = 0; i < numBits + numExtraBits; i++ ) + { + if ( i < numBits ) + { + bit = (uint8_t) serial[sort_ptr[mode][i]]; + } + else + { + bit = (uint8_t) serial_extra[i - numBits]; + } + assert( ( bit == 1 || bit == 0 ) && "Values other than 0/1 will lead to corrupt bitstream! " ); + bitinbyte = bit << ( 7 - ( i & 0x7 ) ); + + if ( i % 8 == 0 ) + { + byte = 0; + } + + byte |= bitinbyte; + + /* Write to buffer on every last bit in byte and after converting last bit in input */ + if ( i % 8 == 7 || i == ( numBits + numExtraBits ) - 1 ) + { + writeByte( hMIME->file, byte ); + } + } + } + else + { + for ( i = 0; i < numBits; i++ ) + { + uint8_t bit = (uint8_t) serial[i]; + uint8_t bitinbyte = bit << ( 7 - ( i & 0x7 ) ); + + if ( i % 8 == 0 ) + { + byte = 0; + } + + byte |= bitinbyte; + + /* Write to buffer on every last bit in byte and after converting last bit in input */ + if ( i % 8 == 7 || i == numBits - 1 ) + { + writeByte( hMIME->file, byte ); + } + } + } + } + return MIME_NO_ERROR; +} + + +/*-------------------------------------------------------------------* + * MIME_Writer_Close() + * + * Close MIME writer + *-------------------------------------------------------------------*/ + +MIME_ERROR MIME_Writer_Close( + MIME_HANDLE *phMIME ) +{ + if ( phMIME == NULL || *phMIME == NULL ) + { + return MIME_NO_ERROR; + } + + if ( ( *phMIME )->file ) + { + fclose( ( *phMIME )->file ); + } + + free( *phMIME ); + *phMIME = NULL; + phMIME = NULL; + + return MIME_NO_ERROR; +} + + +static bool readByte( FILE *file, uint8_t *value ) +{ + if ( fread( value, 1, 1, file ) != 1U ) + { + return false; + } + return true; +} + +static bool readLong( FILE *file, uint16_t *value ) +{ + char buffer[4] = { 0 }; + if ( fread( buffer, 4, 1, file ) != 1U ) + { + return false; + } + *value = 0; + *value = (uint16_t) ( buffer[3] & 0xFF ); + *value |= (uint16_t) ( buffer[2] & 0xFF ) << 8; + *value |= (uint16_t) ( buffer[1] & 0xFF ) << 16; + *value |= (uint16_t) ( buffer[0] & 0xFF ) << 24; + + return true; +} + + +/*-------------------------------------------------------------------* + * byteToSerialReordered() + * + * Write each bit in given byte as a separate uint16_t value + * to the given serial bitstream array at indices provided in + * `sort_indices` array. + * + * Bits with corresponding negative indices will not be written + * to the serial bitstream. + *-------------------------------------------------------------------*/ + +static void byteToSerialReordered( uint8_t byte, uint16_t *serial, const int16_t *sort_indices ) +{ + for ( uint32_t i = 0; i < 8; ++i ) + { + const uint8_t bit = ( byte & 0x80 ) == 0 ? 0 : 1; + + /* Negative index means "skip writing corresponding bit" */ + if ( sort_indices[i] >= 0 ) + { + serial[sort_indices[i]] = bit; + } + + byte <<= 1; + } +} + +/*-------------------------------------------------------------------* + * byteToSerial() + * + * Write each bit in given byte as a separate uint16_t value + * to the given serial bitstream array. + *-------------------------------------------------------------------*/ + +static void byteToSerial( uint8_t byte, uint16_t *serial ) +{ + const int16_t indices[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; + byteToSerialReordered( byte, serial, indices ); +} + +static MIME_ERROR readHeader( MIME_HANDLE hMIME ) +{ + const char id[] = "#!EVS_MC1.0\n"; + const uint16_t num_char_id = sizeof( id ) - 1; + + char buffer[sizeof( id )] = { 0 }; + if ( fread( buffer, sizeof( char ), num_char_id, hMIME->file ) != num_char_id ) + { + return MIME_READ_ERROR; + } + + if ( strcmp( buffer, id ) != 0 ) + { + return MIME_INVALID_DATA; + } + + if ( !readLong( hMIME->file, &hMIME->numChannels ) ) + { + return MIME_READ_ERROR; + } + + return MIME_NO_ERROR; +} +/*-------------------------------------------------------------------* + * MIME_Reader_Open_filename() + * + * Open MIME reader + *-------------------------------------------------------------------*/ + +MIME_ERROR MIME_Reader_Open_filename( MIME_HANDLE *phMIME, const char *filename ) +{ + MIME_ERROR error = MIME_NO_ERROR; + + /* create handle */ + *phMIME = (MIME_HANDLE) malloc( sizeof( struct MIME_IO ) ); + if ( !*phMIME ) + { + return MIME_MEMORY_ERROR; + } + + /* open file stream */ + ( *phMIME )->file = fopen( filename, "rb" ); + if ( ( *phMIME )->file == NULL ) + { + MIME_Reader_Close( phMIME ); + return MIME_FILE_NOT_FOUND; + } + ( *phMIME )->ownFileHandle = true; + + /* Read header */ + if ( ( error = readHeader( *phMIME ) ) != MIME_NO_ERROR ) + { + MIME_Reader_Close( phMIME ); + return error; + } + + return MIME_NO_ERROR; +} + +/*-------------------------------------------------------------------* + * MIME_Reader_Rewind() + * + * Rewind currently opened file to beginning + *-------------------------------------------------------------------*/ + +MIME_ERROR MIME_Reader_Rewind( MIME_HANDLE hMIME ) +{ + if ( !hMIME || !hMIME->file ) + { + return MIME_NOT_INITIALIZED; + } + rewind( hMIME->file ); + + + /* Skip over header, to first frame */ + readHeader( hMIME ); + + return MIME_NO_ERROR; +} + +static MIME_ERROR readEvsFrame( FILE *file, uint8_t ToC, uint16_t *serial, int16_t *num_bits, int16_t *bfi ) +{ + switch ( ToC & 0x0f ) + { + case PRIMARY_2800: + *num_bits = 56; + break; + case PRIMARY_7200: + *num_bits = 144; + break; + case PRIMARY_8000: + *num_bits = 160; + break; + case PRIMARY_9600: + *num_bits = 192; + break; + case PRIMARY_13200: + *num_bits = 264; + break; + case PRIMARY_16400: + *num_bits = 328; + break; + case PRIMARY_24400: + *num_bits = 488; + break; + case PRIMARY_32000: + *num_bits = 640; + break; + case PRIMARY_48000: + *num_bits = 960; + break; + case PRIMARY_64000: + *num_bits = 1280; + break; + case PRIMARY_96000: + *num_bits = 1920; + break; + case PRIMARY_128000: + *num_bits = 2560; + break; + case PRIMARY_SID: + *num_bits = 48; + break; + case SPEECH_LOST: + *bfi = 1; + *num_bits = 0; + break; + case 0xf: /* NO_DATA */ + *num_bits = 0; + break; + default: + return MIME_READ_ERROR; + } + + for ( int16_t i = 0; i < *num_bits; i += 8 ) + { + uint8_t byte = 0; + + if ( !readByte( file, &byte ) ) + { + return MIME_READ_ERROR; + } + + byteToSerial( byte, &serial[i] ); + } + + return MIME_NO_ERROR; +} + +static MIME_ERROR readAmrWbFrame( FILE *file, uint8_t ToC, uint16_t *serial, int16_t *num_bits, int16_t *bfi ) +{ + const uint8_t mode = ToC & 0x0f; + + switch ( mode ) + { + case AMRWB_IO_6600: + *num_bits = 132; + break; + case AMRWB_IO_8850: + *num_bits = 177; + break; + case AMRWB_IO_1265: + *num_bits = 253; + break; + case AMRWB_IO_1425: + *num_bits = 285; + break; + case AMRWB_IO_1585: + *num_bits = 317; + break; + case AMRWB_IO_1825: + *num_bits = 365; + break; + case AMRWB_IO_1985: + *num_bits = 397; + break; + case AMRWB_IO_2305: + *num_bits = 461; + break; + case AMRWB_IO_2385: + *num_bits = 477; + break; + case AMRWB_IO_SID: + *num_bits = 35; + break; + case 0xe: /* SPEECH_LOST */ + *bfi = 1; + *num_bits = 0; + break; + case 0xf: /* NO_DATA */ + *num_bits = 0; + break; + default: + return MIME_READ_ERROR; + } + + for ( int16_t i = 0; i < *num_bits; i += 8 ) + { + uint8_t byte = 0; + + if ( !readByte( file, &byte ) ) + { + return MIME_READ_ERROR; + } + + /* Since num_bits is not a multiple of 8, ensure last + * padding bits will be discarded by byteToSerialReordered() */ + int16_t sort_indices[8] = { -1, -1, -1, -1, -1, -1, -1, -1 }; + for ( uint16_t j = 0; j < 8 && ( i + j ) < *num_bits; ++j ) + { + sort_indices[j] = sort_ptr[mode][i + j]; + } + + /* Reorder bits and write to serial */ + byteToSerialReordered( byte, serial, sort_indices ); + } + + return MIME_NO_ERROR; +} + +/*-------------------------------------------------------------------* + * MIME_ReadFrame_short() + * + * Read MIME frame to serial bitstream + *-------------------------------------------------------------------*/ +MIME_ERROR MIME_ReadFrame_short( MIME_HANDLE hMIME, uint16_t *serial, int16_t *num_bits, int16_t *bfi ) +{ + if ( !hMIME ) + { + return MIME_NOT_INITIALIZED; + } + + assert( hMIME->numChannels == 1 && "Multichannel currently not supported" ); + + MIME_ERROR error = MIME_NO_ERROR; + uint8_t ToC = 0; + + for ( uint32_t i = 0; i < hMIME->numChannels; i++ ) + { + if ( !readByte( hMIME->file, &ToC ) ) + { + return MIME_EOF; + } + + if ( ToC & 0x30 ) + { + if ( ( error = readAmrWbFrame( hMIME->file, ToC, serial, num_bits, bfi ) ) != MIME_NO_ERROR ) + { + return error; + } + } + else + { + if ( ( error = readEvsFrame( hMIME->file, ToC, serial, num_bits, bfi ) ) != MIME_NO_ERROR ) + { + return error; + } + } + } + + return MIME_NO_ERROR; +} +/*-------------------------------------------------------------------* + * MIME_Reader_Close() + * + * Close MIME reader + *-------------------------------------------------------------------*/ +MIME_ERROR MIME_Reader_Close( MIME_HANDLE *phMIME ) +{ + if ( phMIME == NULL || *phMIME == NULL ) + { + return MIME_NO_ERROR; + } + + if ( ( *phMIME )->file && ( *phMIME )->ownFileHandle ) + { + fclose( ( *phMIME )->file ); + } + + free( *phMIME ); + *phMIME = NULL; + + return MIME_NO_ERROR; +} diff --git a/lib_util/mime_io.h b/lib_util/mime_io.h new file mode 100644 index 0000000000..770b4dd5e4 --- /dev/null +++ b/lib_util/mime_io.h @@ -0,0 +1,75 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef MIME_IO_H +#define MIME_IO_H + +#include +#include + +typedef enum MIME_ERROR +{ + MIME_NO_ERROR, + MIME_MEMORY_ERROR, + MIME_WRONG_PARAMS, + MIME_FILE_NOT_FOUND, + MIME_NOT_INITIALIZED, + MIME_READ_ERROR, + MIME_WRITE_ERROR, + MIME_INVALID_DATA, + MIME_EOF, + MIME_UNKNOWN_ERROR +} MIME_ERROR; + +typedef struct MIME_IO *MIME_HANDLE; + +MIME_ERROR MIME_Writer_Open_FILE( MIME_HANDLE *phMIME, FILE *file ); + +MIME_ERROR MIME_Writer_Open_filename( MIME_HANDLE *phMIME, const char *filename ); + +MIME_ERROR MIME_WriteFrame( MIME_HANDLE hMIME, const uint16_t *serial, const int16_t numBits, const int32_t frameBitrate ); + +MIME_ERROR MIME_Writer_Close( MIME_HANDLE *phMIME ); + +MIME_ERROR MIME_Reader_Open_filename( MIME_HANDLE *phMIME, const char *filename ); + +MIME_ERROR MIME_Reader_Rewind( MIME_HANDLE hMIME ); + +MIME_ERROR MIME_ReadFrame_short( + MIME_HANDLE hMIME, + uint16_t *serial, + int16_t *num_bits, + int16_t *bfi ); + +MIME_ERROR MIME_Reader_Close( MIME_HANDLE *phMIME ); + +#endif diff --git a/lib_util/render_config_reader.c b/lib_util/render_config_reader.c new file mode 100644 index 0000000000..a9027bf92a --- /dev/null +++ b/lib_util/render_config_reader.c @@ -0,0 +1,478 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "render_config_reader.h" +#include +#include +#include +#include +#include +#include "cmdl_tools.h" +#include "prot.h" +#include "ivas_cnst.h" + +/*------------------------------------------------------------------------------------------* + * PreProc Macros + *------------------------------------------------------------------------------------------*/ + +#define MAX_LINE_LENGTH ( 1024 ) +#define MAX_ITEM_LENGTH ( 64 ) +#define N_REVERB_VECTORS ( 3 ) + + +/*------------------------------------------------------------------------------------------* + * Type definitions + *------------------------------------------------------------------------------------------*/ + +struct RenderConfigReader +{ + FILE *pConfigFile; +}; + + +/*-----------------------------------------------------------------------------------------* + * Function read_bool() + * Reads a boolean value from a line + *-----------------------------------------------------------------------------------------*/ + +/* !r: false on success, true on failure */ +static int16_t read_bool( + const char *pLine, /* i : String to read from */ + int16_t *pTarget /* o : Output pointer (int16_t type used instead of bool because of coding rules/specs) */ +) +{ + char value[8]; + + if ( sscanf( pLine, "%s", (char *) &value ) != 1 ) + { + return true; + } + if ( strcmp( value, "TRUE" ) == 0 ) + { + *pTarget = true; + return false; + } + if ( strcmp( value, "FALSE" ) == 0 ) + { + *pTarget = false; + return false; + } + + return true; +} + + +/*-----------------------------------------------------------------------------------------* + * Function read_vector() + * + * Reads a vector value from a line + *-----------------------------------------------------------------------------------------*/ + +static int16_t read_vector( + char *pLine, /* i : String to read from */ + const int16_t length, /* i : Number of expected vector elements */ + float *pTarget /* o : Output vector pointer */ +) +{ + char *tmp; + int16_t n; + int16_t count; + + n = (int16_t) sscanf( pLine, "[%s", pLine ); + if ( n == 0 ) + { + return true; + } + + /* Additional comma to make parsing easier */ + pLine[strlen( pLine ) - 1] = ','; + + tmp = pLine; + /* Count # of commas to determine vector length */ + for ( n = 0; tmp[n]; tmp[n] == ',' ? n++ : *tmp++ ) + ; + + count = n; + + tmp = pLine; + + /* Check for maximum vector length */ + if ( n != length ) + { + return true; + } + + for ( n = 0; n < count; n++ ) + { + if ( (int16_t) sscanf( tmp, "%f,", &pTarget[n] ) != 1 ) + { + return true; + } + + tmp = strchr( tmp, ',' ) + 1; + } + + return false; +} + + +/*-----------------------------------------------------------------------------------------* + * Function strip_spaces_upper() + * + * Strips the spaces from a buffer and uppercases it + *-----------------------------------------------------------------------------------------*/ + +static void strip_spaces_upper( + char *pStr /* i : String to read from */ +) +{ + int32_t read_idx = 0, write_idx = 0; + + while ( pStr[read_idx] ) + { + if ( !isspace( pStr[read_idx] ) && !iscntrl( pStr[read_idx] ) ) + { + pStr[write_idx++] = pStr[read_idx]; + } + read_idx++; + } + pStr[write_idx] = '\0'; + to_upper( pStr ); + + return; +} + + +/*-----------------------------------------------------------------------------------------* + * Function errorHandler() + * + * Prints error message and exits + *-----------------------------------------------------------------------------------------*/ + +/* !r: error accumulation */ +static int32_t errorHandler( + const char *badStr, /* i : String to complain about */ + const ERROR_CODES_t error ) +{ + static int32_t numErrors = 0; + + switch ( error ) + { + case ERROR_NONE: + break; + case ERROR_ITEM_UNKNOWN: + numErrors++; + fprintf( stderr, "Unknown variable %s in renderer configuration file.\n\n", badStr ); + break; + case ERROR_VALUE_INVALID: + numErrors++; + fprintf( stderr, "Invalid value %s in renderer configuration file.\n\n", badStr ); + break; + default: + numErrors++; + fprintf( stderr, "Unknown error while reading configuration file.\n\n" ); + } + + return numErrors; +} + + +/*------------------------------------------------------------------------------------------* + * RenderConfigReader_open() + * + * Allocates and initializes a renderer configuration reader instance + *------------------------------------------------------------------------------------------*/ + +ivas_error RenderConfigReader_open( + char *pConfigPath, /* i : renderer configuration file path */ + RenderConfigReader **ppRenderConfigReader /* o : RenderConfigReader handle */ +) +{ + RenderConfigReader *pSelf; + FILE *pConfigFile; + + /* Open the configuration file */ + if ( strlen( pConfigPath ) < 1 ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + pConfigFile = fopen( pConfigPath, "r" ); + + if ( !pConfigFile ) + { + return IVAS_ERR_FAILED_FILE_OPEN; + } + + pSelf = calloc( sizeof( RenderConfigReader ), 1 ); + pSelf->pConfigFile = pConfigFile; + + *ppRenderConfigReader = pSelf; + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------------------------* + * RenderConfigReader_read() + * + * Reads the configuration from a file + *------------------------------------------------------------------------------------------*/ + +ivas_error RenderConfigReader_read( + RenderConfigReader *pRenderConfigReader, /* i : RenderConfigReader handle */ + IVAS_RENDER_CONFIG_HANDLE hRenderConfig /* o : Renderer configuration handle */ +) +{ + int32_t file_size; + char *pConfig_str; + char *pParams; + char *pTemp; + int32_t read_idx; + int32_t params_idx; + char item[MAX_ITEM_LENGTH + 1]; + char chapter[MAX_ITEM_LENGTH + 1]; + char *pValue; + int16_t nBandsInput; + int16_t nVectorsMissing; + + fseek( pRenderConfigReader->pConfigFile, 0, SEEK_END ); + file_size = ftell( pRenderConfigReader->pConfigFile ); + rewind( pRenderConfigReader->pConfigFile ); + pConfig_str = (char *) calloc( file_size + 1, sizeof( char ) ); + pParams = (char *) calloc( file_size + 1, sizeof( char ) ); + pTemp = (char *) calloc( file_size + 1, sizeof( char ) ); + nBandsInput = hRenderConfig->room_acoustics.nBands; + nVectorsMissing = N_REVERB_VECTORS; + + /* read file line by line */ + while ( fgets( pConfig_str, file_size, pRenderConfigReader->pConfigFile ) != NULL ) + { + + if ( sscanf( pConfig_str, "[%64[^]]]", chapter ) == 1 ) + { + /* read line by line (except comments) until next chapter or EOF */ + pParams[0] = '\0'; + do + { + read_idx = ftell( pRenderConfigReader->pConfigFile ); + if ( fgets( pTemp, file_size, pRenderConfigReader->pConfigFile ) == NULL ) + { + break; + } + + if ( ( pTemp[0] != '#' ) && ( sscanf( pTemp, "[%64[^]]]", item ) != 1 ) ) + { + /* ignore inline comments */ + sscanf( pTemp, "%[^#]", pTemp ); + strcat( pParams, pTemp ); + } + } while ( sscanf( pTemp, "[%64[^]]]", item ) != 1 ); + + /* go back one line */ + fseek( pRenderConfigReader->pConfigFile, read_idx, SEEK_SET ); + + strip_spaces_upper( pParams ); + to_upper( chapter ); + + /* interpret params */ + if ( strcmp( chapter, "ROOMACOUSTICS" ) == 0 ) + { + params_idx = 0; + pValue = (char *) calloc( strlen( pParams ), sizeof( char ) ); + while ( sscanf( pParams + params_idx, "%64[^=]=%[^;];", item, pValue ) == 2 ) + { + hRenderConfig->room_acoustics.override = true; + params_idx += strlen( item ) + strlen( pValue ) + 2; +#ifdef DEBUGGING + fprintf( stderr, " PARAM: %s -> %s\n", item, pValue ); +#endif + if ( strcmp( item, "REVERB" ) == 0 ) + { + if ( read_bool( pValue, &hRenderConfig->room_acoustics.late_reverb_on ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + else if ( strcmp( item, "BRIR" ) == 0 ) + { + if ( read_bool( pValue, &hRenderConfig->room_acoustics.use_brir ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + else if ( strcmp( item, "NBANDS" ) == 0 ) + { + if ( !sscanf( pValue, "%hd", &hRenderConfig->room_acoustics.nBands ) || + hRenderConfig->room_acoustics.nBands > CLDFB_NO_CHANNELS_MAX ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + else if ( strcmp( item, "FC" ) == 0 ) + { + set_zero( hRenderConfig->room_acoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); + if ( read_vector( pValue, hRenderConfig->room_acoustics.nBands, hRenderConfig->room_acoustics.pFc_input ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + nVectorsMissing--; + } + else if ( strcmp( item, "RT60" ) == 0 ) + { + set_zero( hRenderConfig->room_acoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); + if ( read_vector( pValue, hRenderConfig->room_acoustics.nBands, hRenderConfig->room_acoustics.pAcoustic_rt60 ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + nVectorsMissing--; + } + else if ( strcmp( item, "DSR" ) == 0 ) + { + set_zero( hRenderConfig->room_acoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); + if ( read_vector( pValue, hRenderConfig->room_acoustics.nBands, hRenderConfig->room_acoustics.pAcoustic_dsr ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + nVectorsMissing--; + } + else if ( strcmp( item, "ACOUSTICPREDELAY" ) == 0 ) + { + if ( !sscanf( pValue, "%f", &hRenderConfig->room_acoustics.acousticPreDelay ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + else if ( strcmp( item, "INPUTPREDELAY" ) == 0 ) + { + if ( !sscanf( pValue, "%f", &hRenderConfig->room_acoustics.inputPreDelay ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } +#ifdef DEBUGGING + else + { + fprintf( stderr, "Unsupported configuration property %s\n", item ); + } +#endif + } + free( pValue ); + if ( ( nBandsInput != hRenderConfig->room_acoustics.nBands ) && ( nVectorsMissing > 0 ) ) + { + fprintf( stderr, "Reverb config: number of bands changed but configuration vectors missing\n" ); + } + } +#ifdef DEBUGGING + else if ( strcmp( chapter, "GENERAL" ) == 0 && strlen( pParams ) != 0 ) + { + params_idx = 0; + pValue = (char *) calloc( strlen( pParams ), sizeof( char ) ); + while ( sscanf( pParams + params_idx, "%64[^=]=%[^;];", item, pValue ) == 2 ) + { + params_idx += strlen( item ) + strlen( pValue ) + 2; + fprintf( stderr, " PARAM: %s -> %s\n", item, pValue ); + if ( strcmp( item, "RENDERER" ) == 0 ) + { + if ( strcmp( pValue, "CREND" ) == 0 ) + { + hRenderConfig->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_CREND; + } + else if ( strcmp( pValue, "FASTCONV" ) == 0 ) + { + hRenderConfig->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_FASTCONV; + } + else + { + errorHandler( pValue, ERROR_VALUE_INVALID ); + } + } +#ifdef DEBUGGING + else + { + fprintf( stderr, "Unsupported configuration property %s\n", item ); + } +#endif + } + free( pValue ); + } +#endif + else + { + fprintf( stderr, "Unknown chapter: %s\n", chapter ); + } + } + else if ( pConfig_str[0] == '#' ) + { + /* comment lines are to be ignored */ + } +#ifdef DEBUGGING + else + { + fprintf( stderr, "Unsupported configuration property %s\n", item ); + } +#endif + } + + free( pConfig_str ); + free( pParams ); + free( pTemp ); + + if ( errorHandler( "", ERROR_NONE ) > 0 ) + { + fprintf( stderr, "Errors occurred\n" ); + return IVAS_ERR_FAILED_FILE_PARSE; + } + + return IVAS_ERR_OK; +} + + +/*------------------------------------------------------------------------------------------* + * RenderConfigReader_close() + * + * Closes the renderer configuration reader and deallocates memory + *------------------------------------------------------------------------------------------*/ + +void RenderConfigReader_close( + RenderConfigReader **ppRenderConfigReader /* i : RenderConfigReader handle */ +) +{ + if ( ppRenderConfigReader == NULL || *ppRenderConfigReader == NULL ) + { + return; + } + + fclose( ( *ppRenderConfigReader )->pConfigFile ); + free( *ppRenderConfigReader ); + + return; +} diff --git a/lib_util/render_config_reader.h b/lib_util/render_config_reader.h new file mode 100644 index 0000000000..1130b43b8c --- /dev/null +++ b/lib_util/render_config_reader.h @@ -0,0 +1,66 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef RENDER_CONFIG_READER_H +#define RENDER_CONFIG_READER_H + +#include "common_api_types.h" +#include "ivas_error.h" + + +typedef struct RenderConfigReader RenderConfigReader; + +typedef enum +{ + ERROR_NONE = 0, + ERROR_ITEM_UNKNOWN, + ERROR_VALUE_INVALID +} ERROR_CODES_t; + +/* Allocates and initializes a renderer configuration reader instance */ +ivas_error RenderConfigReader_open( + char *pConfigPath, /* i : renderer configuration file path */ + RenderConfigReader **ppRenderConfigReader /* o : RenderConfigReader handle */ +); + +/* Reads a configuration */ +ivas_error RenderConfigReader_read( + RenderConfigReader *pRenderConfigReader, /* i : RenderConfigReader handle */ + IVAS_RENDER_CONFIG_HANDLE hRenderConfig /* o : Renderer configuration handle */ +); + +/* Closes the renderer configuration reader and deallocates memory */ +void RenderConfigReader_close( + RenderConfigReader **ppRenderConfigReader /* i : RenderConfigReader handle */ +); + +#endif diff --git a/lib_util/rtpdump.c b/lib_util/rtpdump.c new file mode 100644 index 0000000000..79a4e43ede --- /dev/null +++ b/lib_util/rtpdump.c @@ -0,0 +1,383 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include +#include "rtpdump.h" + +struct RTPDUMP +{ + FILE *file; + unsigned int startSeconds; + unsigned int startMicroSeconds; + unsigned int source; + unsigned short port; +}; + +/** function to read a 32-bit value from a buffer */ +static unsigned char *parseLong( unsigned char *buffer, unsigned int *value ) +{ + *value = 0; + *value = (unsigned int) ( buffer[3] & 0xFF ); + *value |= (unsigned int) ( buffer[2] & 0xFF ) << 8; + *value |= (unsigned int) ( buffer[1] & 0xFF ) << 16; + *value |= (unsigned int) ( buffer[0] & 0xFF ) << 24; + return buffer + 4; +} + +/** function to read a 16-bit value from a buffer */ +static unsigned char *parseShort( unsigned char *buffer, unsigned short *value ) +{ + *value = 0; + *value = (unsigned int) ( buffer[1] & 0xFF ); + *value |= (unsigned int) ( buffer[0] & 0xFF ) << 8; + return buffer + 2; +} + +/** function to read a 8-bit value from a buffer */ +static unsigned char *parseByte( unsigned char *buffer, unsigned char *value ) +{ + *value = 0; + *value = (unsigned int) ( buffer[0] & 0xFF ); + return buffer + 1; +} + +/** function to read a 32-bit value from the file */ +static int readLong( FILE *file, unsigned int *value ) +{ + char buffer[4] = { 0 }; + if ( fread( buffer, 4, 1, file ) != 1U ) + { + return -1; + } + *value = 0; + *value = (unsigned int) ( buffer[3] & 0xFF ); + *value |= (unsigned int) ( buffer[2] & 0xFF ) << 8; + *value |= (unsigned int) ( buffer[1] & 0xFF ) << 16; + *value |= (unsigned int) ( buffer[0] & 0xFF ) << 24; + return 0; +} + +/** function to read a 16-bit value from the file */ +static int readShort( FILE *file, unsigned short *value ) +{ + char buffer[2] = { 0 }; + if ( fread( buffer, 2, 1, file ) != 1U ) + { + return -1; + } + *value = 0; + *value = (unsigned int) ( buffer[1] & 0xFF ); + *value |= (unsigned int) ( buffer[0] & 0xFF ) << 8; + return 0; +} + +/** function to write a 32-bit value to the file */ +static int writeLong( FILE *file, unsigned int value ) +{ + char buffer[4] = { 0 }; + buffer[3] = value & 0xff; + buffer[2] = ( value >> 8 ) & 0xff; + buffer[1] = ( value >> 16 ) & 0xff; + buffer[0] = ( value >> 24 ) & 0xff; + if ( fwrite( buffer, 4, 1, file ) != 1U ) + { + return -1; + } + return 0; +} + +/** function to write a 16-bit value to the file */ +static int writeShort( FILE *file, unsigned short value ) +{ + char buffer[2] = { 0 }; + buffer[1] = value & 0xff; + buffer[0] = ( value >> 8 ) & 0xff; + if ( fwrite( buffer, 2, 1, file ) != 1U ) + { + return -1; + } + return 0; +} + +/** function to write a 8-bit value to the file */ +static int writeByte( FILE *file, unsigned char value ) +{ + if ( fputc( value, file ) == value ) + { + return 0; + } + return -1; +} + +/** function to parse the rtpdump file header */ +static int readHeader( struct RTPDUMP *hRTPDUMP ) +{ + unsigned short padding; + char buffer[255] = { 0 }; + /* read identifier */ + /* + char buffer[255] = {0}; + const char id [] = "#!rtpplay1.0"; + fgets( buffer, sizeof(buffer), hRTPDUMP->file ); + if( memcmp( buffer, id, sizeof(id)-1 ) != 0 ) + return -1; + */ + char version[4] = { 0 }; + char address[128] = { 0 }; + unsigned int port = 0; + unsigned int a, b, c, d; + + fgets( buffer, sizeof( buffer ), hRTPDUMP->file ); + if ( sscanf( buffer, "#!rtpplay%3s %127[0123456789.]/%u\n", version, address, &port ) == 3 ) + { + if ( sscanf( address, "%u.%u.%u.%u", &a, &b, &c, &d ) != 4 ) + { + return -1; + } + } + else if ( sscanf( buffer, "#!rtpplay%3s %127[0123456789abcdef:]/%u\n", version, address, &port ) == 3 ) + /* no verification of IPv6 addresses yet */ + { + } + else + { + fprintf( stderr, "unable to read rtpplay\n" ); + fprintf( stderr, "Buffer: %s\n", buffer ); + return -1; + } + if ( strcmp( version, "1.0" ) ) + { + return -1; + } + + /* read binary header (RD_hdr_t) */ + readLong( hRTPDUMP->file, &( hRTPDUMP->startSeconds ) ); + readLong( hRTPDUMP->file, &( hRTPDUMP->startMicroSeconds ) ); + readLong( hRTPDUMP->file, &( hRTPDUMP->source ) ); + readShort( hRTPDUMP->file, &( hRTPDUMP->port ) ); + readShort( hRTPDUMP->file, &padding ); + + return 0; +} + +static int writeHeader( struct RTPDUMP *hRTPDUMP ) +{ + /* write rtpdump header */ + fprintf( hRTPDUMP->file, "#!rtpplay%s %s/%d\n", "1.0", "127.0.0.1", 5000 ); + if ( !writeLong( hRTPDUMP->file, hRTPDUMP->startSeconds ) && + !writeLong( hRTPDUMP->file, hRTPDUMP->startMicroSeconds ) && + !writeLong( hRTPDUMP->file, hRTPDUMP->source ) && + !writeShort( hRTPDUMP->file, hRTPDUMP->port ) && + !writeShort( hRTPDUMP->file, 0 ) ) + { + return 0; + } + return -1; +} + +RTPDUMP_ERROR +RTPDUMP_OpenForReading( RTPDUMP_HANDLE *phRTPDUMP, const char *filename ) +{ + return RTPDUMP_OpenWithFileToRead( phRTPDUMP, fopen( filename, "rb" ) ); +} + +RTPDUMP_ERROR +RTPDUMP_OpenWithFileToRead( RTPDUMP_HANDLE *phRTPDUMP, FILE *file ) +{ + *phRTPDUMP = (RTPDUMP_HANDLE) calloc( 1, sizeof( struct RTPDUMP ) ); + if ( !phRTPDUMP ) + { + return RTPDUMP_MEMORY_ERROR; + } + + /* open file stream */ + ( *phRTPDUMP )->file = file; + if ( ( *phRTPDUMP )->file == NULL ) + { + return RTPDUMP_FILE_NOT_FOUND; + } + + if ( readHeader( *phRTPDUMP ) != 0 ) + { + return RTPDUMP_INIT_ERROR; + } + + return RTPDUMP_NO_ERROR; +} + +RTPDUMP_ERROR +RTPDUMP_OpenForWriting( RTPDUMP_HANDLE *phRTPDUMP, const char *filename ) +{ + *phRTPDUMP = (RTPDUMP_HANDLE) calloc( 1, sizeof( struct RTPDUMP ) ); + if ( !phRTPDUMP ) + { + return RTPDUMP_MEMORY_ERROR; + } + + /* open file stream */ + ( *phRTPDUMP )->file = fopen( filename, "wb" ); + if ( ( *phRTPDUMP )->file == NULL ) + { + return RTPDUMP_FILE_NOT_FOUND; + } + + if ( writeHeader( *phRTPDUMP ) != 0 ) + { + return RTPDUMP_INIT_ERROR; + } + + return RTPDUMP_NO_ERROR; +} + +RTPDUMP_ERROR +RTPDUMP_ReadPacket( RTPDUMP_HANDLE hRTPDUMP, + RTPDUMP_RTPPACKET *packet, + uint32_t *timeoffset_ms ) +{ + unsigned short length = 0; + + if ( !hRTPDUMP ) + { + return RTPDUMP_NOT_INITIALIZED; + } + + /* length of packet, including this header (may be smaller than plen if not whole packet recorded) */ + if ( readShort( hRTPDUMP->file, &length ) ) + { + return RTPDUMP_READ_ENDOFFILE; + } + length -= 8; + + /* actual header+payload length for RTP, 0 for RTCP */ + if ( readShort( hRTPDUMP->file, &( packet->payloadSize ) ) ) + { + return RTPDUMP_READ_ERROR; + } + if ( packet->payloadSize < length ) + { + return RTPDUMP_UNKNOWN_ERROR; + } + + /* remove size of RTP header so that plen is payload length */ + packet->headerSize = 12; + packet->payloadSize -= packet->headerSize; + + /* milliseconds since the start of recording */ + if ( readLong( hRTPDUMP->file, timeoffset_ms ) ) + { + return RTPDUMP_READ_ERROR; + } + + if ( length > sizeof( packet->data ) / sizeof( packet->data[0] ) ) + { + return RTPDUMP_UNKNOWN_ERROR; + } + + /* read entire RTP packet */ + if ( length != 0U ) + { + fread( packet->data, length, 1, hRTPDUMP->file ); + } + + RTPDUMP_ParseRTPHeader( packet ); + return RTPDUMP_NO_ERROR; +} + +RTPDUMP_ERROR +RTPDUMP_WritePacket( RTPDUMP_HANDLE hRTPDUMP, + const RTPDUMP_RTPPACKET *packet, + uint32_t timeoffset_ms ) +{ + /* rtpdump packet header */ + writeShort( hRTPDUMP->file, 8 + packet->headerSize + packet->payloadSize ); + writeShort( hRTPDUMP->file, packet->headerSize + packet->payloadSize ); + writeLong( hRTPDUMP->file, timeoffset_ms ); + + /* RTP header */ + writeByte( hRTPDUMP->file, packet->v_p_x_xx ); + writeByte( hRTPDUMP->file, packet->payloadTypeId ); + writeShort( hRTPDUMP->file, packet->sequenceNumber ); + writeLong( hRTPDUMP->file, packet->timeStamp ); + writeLong( hRTPDUMP->file, packet->ssrc ); + + /* RTP payload */ + fwrite( packet->data + packet->headerSize, packet->payloadSize, 1, hRTPDUMP->file ); + return RTPDUMP_NO_ERROR; +} + +void RTPDUMP_Close( RTPDUMP_HANDLE *phRTPDUMP, short closeFile ) +{ + if ( !phRTPDUMP ) + { + return; + } + + if ( !( *phRTPDUMP ) ) + { + return; + } + + if ( closeFile && ( *phRTPDUMP )->file ) + { + fclose( ( *phRTPDUMP )->file ); + } + + free( *phRTPDUMP ); + *phRTPDUMP = NULL; +} + +void RTPDUMP_SetDefaultRtpPacketHeader( RTPDUMP_RTPPACKET *packet ) +{ + packet->v_p_x_xx = 128; + packet->payloadTypeId = 96; + packet->sequenceNumber = 0; + packet->timeStamp = 0; + packet->ssrc = 0xaabbccdd; + packet->headerSize = 12; + packet->payloadSize = 0; +} + +void RTPDUMP_ParseRTPHeader( RTPDUMP_RTPPACKET *packet ) +{ + unsigned char *payload = (unsigned char *) packet->data; + payload = parseByte( payload, &( packet->v_p_x_xx ) ); + payload = parseByte( payload, &( packet->payloadTypeId ) ); + payload = parseShort( payload, &( packet->sequenceNumber ) ); + payload = parseLong( payload, &( packet->timeStamp ) ); + parseLong( payload, &( packet->ssrc ) ); +} diff --git a/lib_util/rtpdump.h b/lib_util/rtpdump.h new file mode 100644 index 0000000000..3b5cb6b64b --- /dev/null +++ b/lib_util/rtpdump.h @@ -0,0 +1,107 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#pragma once +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum _RTPDUMP_ERROR + { + RTPDUMP_NO_ERROR = 0x0000, + RTPDUMP_MEMORY_ERROR = 0x0001, + RTPDUMP_WRONG_PARAMS = 0x0002, + RTPDUMP_INIT_ERROR = 0x0003, + RTPDUMP_WRITE_ERROR = 0x0004, + RTPDUMP_READ_ERROR = 0x0005, + RTPDUMP_FILE_NOT_FOUND = 0x0006, + RTPDUMP_NOT_IMPLEMENTED = 0x0010, + RTPDUMP_NOT_INITIALIZED = 0x0100, + RTPDUMP_READ_ENDOFFILE = 0x0101, + RTPDUMP_UNKNOWN_ERROR = 0x1000 + } RTPDUMP_ERROR; + + typedef struct RTPDUMP *RTPDUMP_HANDLE; + typedef struct RTPDUMP RTPDUMP; + + typedef struct RTPDUMP_RTPPACKET + { + unsigned char v_p_x_xx; /* version, padding, extension etc. */ + unsigned char payloadTypeId; + unsigned short sequenceNumber; + unsigned int timeStamp; + unsigned int ssrc; + char data[1500 + 12]; /* raw RTP packet */ + unsigned short headerSize; + unsigned short payloadSize; + } RTPDUMP_RTPPACKET; + + + RTPDUMP_ERROR + RTPDUMP_OpenForReading( RTPDUMP_HANDLE *phRTPDUMP, const char *filename ); + + RTPDUMP_ERROR + RTPDUMP_OpenWithFileToRead( RTPDUMP_HANDLE *phRTPDUMP, FILE *file ); + + RTPDUMP_ERROR + RTPDUMP_OpenForWriting( RTPDUMP_HANDLE *phRTPDUMP, const char *filename ); + + RTPDUMP_ERROR + RTPDUMP_ReadPacket( RTPDUMP_HANDLE hRTPDUMP, + RTPDUMP_RTPPACKET *packet, + uint32_t *timeoffset_ms ); + + RTPDUMP_ERROR + RTPDUMP_WritePacket( RTPDUMP_HANDLE hRTPDUMP, + const RTPDUMP_RTPPACKET *packet, + uint32_t timeoffset_ms ); + + void + RTPDUMP_Close( RTPDUMP_HANDLE *phRTPDUMP, short closeFile ); + + void + RTPDUMP_SetDefaultRtpPacketHeader( RTPDUMP_RTPPACKET *packet ); + + void + RTPDUMP_ParseRTPHeader( RTPDUMP_RTPPACKET *packet ); + +#ifdef __cplusplus +} +#endif diff --git a/lib_util/tinywavein_c.h b/lib_util/tinywavein_c.h new file mode 100644 index 0000000000..1f826a0301 --- /dev/null +++ b/lib_util/tinywavein_c.h @@ -0,0 +1,556 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef __TINYWAVEIN_C_H__ +#define __TINYWAVEIN_C_H__ + +#include +#include +#include +#include + +#if defined( __i386__ ) || defined( _M_IX86 ) || defined( __x86_64__ ) || defined( _M_X64 ) || defined( __arm__ ) || defined( __aarch64__ ) || ( defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ ) +#define __TWI_LE /* _T_iny _W_ave _I_n _L_ittle _E_ndian */ +#endif + +#if defined( __POWERPC__ ) || defined( __sparc__ ) || ( defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ) +#define __TWI_BE /* _T_iny _W_ave _I_n _B_ig _E_ndian */ +#endif + +#if !defined( __TWI_LE ) && !defined( __TWI_BE ) +#pragma message( "unknown processor - assuming Little Endian" ) +#define __TWI_LE +#endif + +#define __TWI_SUCCESS ( 0 ) +#define __TWI_ERROR ( -1 ) + +typedef struct __tinyWaveInHandle +{ + FILE *theFile; + fpos_t dataChunkPos; + uint32_t position; + uint32_t length; + uint32_t bps; +} __tinyWaveInHandle, WAVEFILEIN; + +typedef struct +{ + int16_t compressionCode; + int16_t numberOfChannels; + uint32_t sampleRate; + uint32_t averageBytesPerSecond; + int16_t blockAlign; + int16_t bitsPerSample; + /* int16_t extraFormatBytes ; */ +} SWavInfo; + +typedef struct +{ + char chunkID[4]; + uint32_t chunkSize; + /* long dataOffset ; */ /* never used */ +} SChunk; + +/* local wrapper, always returns correct endian */ +static size_t fread_LE( + void *ptr, + size_t size, + size_t nmemb, + FILE *stream ); + +#ifdef __TWI_BE +static int16_t BigEndian16( int16_t v ); +static int32_t BigEndian32( int32_t v ); +#endif + +/*! + * \brief Read header from a WAVEfile. Host endianess is handled accordingly. + * \fp filepointer of type FILE*. + * \wavinfo SWavInfo struct where the decoded header info is stored into. + * \return 0 on success and non-zero on failure. + * + */ +static WAVEFILEIN *OpenWav( + const char *filename, + uint32_t *samplerate, + int16_t *channels, + uint32_t *samplesInFile, + int16_t *bps ) +{ + WAVEFILEIN *self; + + SChunk fmt_chunk, data_chunk; + int32_t offset; + uint32_t tmpSize; + char tmpFormat[4]; + SWavInfo wavinfo = { 0, 0, 0, 0, 0, 0 }; + + self = (WAVEFILEIN *) calloc( 1, sizeof( WAVEFILEIN ) ); + if ( !self ) + { + goto bail; /* return NULL; */ + } + + if ( !filename ) + { + goto bail; + } + if ( !samplerate ) + { + goto bail; + } + if ( !channels ) + { + goto bail; + } + if ( !samplesInFile ) + { + goto bail; + } + if ( !bps ) + { + goto bail; + } + + self->theFile = fopen( filename, "rb" ); + if ( !self->theFile ) + { + goto bail; + } + + /* read RIFF-chunk */ + if ( fread( tmpFormat, 1, 4, self->theFile ) != 4 ) + { + goto bail; + } + + if ( strncmp( "RIFF", tmpFormat, 4 ) ) + { + goto bail; + } + + /* Read RIFF size. Ignored. */ + fread_LE( &tmpSize, 4, 1, self->theFile ); + + /* read WAVE-chunk */ + if ( fread( tmpFormat, 1, 4, self->theFile ) != 4 ) + { + goto bail; + } + + if ( strncmp( "WAVE", tmpFormat, 4 ) ) + { + goto bail; + } + + /* read format/bext-chunk */ + if ( fread( fmt_chunk.chunkID, 1, 4, self->theFile ) != 4 ) + { + goto bail; + } + + /* skip some potential chunks up to fmt chunk */ + /* todo: merge "bext" reading into this loop */ + while ( strncmp( "fmt ", fmt_chunk.chunkID, 4 ) != 0 ) + { + uint32_t chunkSize = 0; + + if ( fread_LE( &chunkSize, 1, 4, self->theFile ) != 4 ) + { + goto bail; + } + + /* skip chunk data */ + while ( chunkSize ) + { + int32_t nulbuf; + if ( fread_LE( &nulbuf, 1, 1, self->theFile ) != 1 ) + { + goto bail; + } + chunkSize -= 1; + } + + /* read next chunk header */ + if ( fread( fmt_chunk.chunkID, 1, 4, self->theFile ) != 4 ) + { + goto bail; + } + } + + /* go on with fmt-chunk */ + if ( strncmp( "fmt ", fmt_chunk.chunkID, 4 ) ) + { + goto bail; + } + + if ( fread_LE( &fmt_chunk.chunkSize, 4, 1, self->theFile ) != + 1 ) + { /* should be 16 for PCM-format (uncompressed) */ + goto bail; + } + + /* read info */ + fread_LE( &( wavinfo.compressionCode ), 2, 1, self->theFile ); + fread_LE( &( wavinfo.numberOfChannels ), 2, 1, self->theFile ); + fread_LE( &( wavinfo.sampleRate ), 4, 1, self->theFile ); + fread_LE( &( wavinfo.averageBytesPerSecond ), 4, 1, self->theFile ); + fread_LE( &( wavinfo.blockAlign ), 2, 1, self->theFile ); + fread_LE( &( wavinfo.bitsPerSample ), 2, 1, self->theFile ); + + offset = fmt_chunk.chunkSize - 16; + if ( wavinfo.compressionCode == 0x01 ) + { + if ( ( wavinfo.bitsPerSample != 16 ) && ( wavinfo.bitsPerSample != 24 ) ) + { /* we do only support 16 and 24 bit PCM audio */ + goto bail; + } + } + else if ( wavinfo.compressionCode == 0x03 ) + { + if ( wavinfo.bitsPerSample != 32 ) + { /* we do only support 32 bit float audio */ + goto bail; + } + } + + /* Skip rest of fmt header if any. */ + for ( ; offset > 0; offset-- ) + { + size_t read = fread( &tmpSize, 1, 1, self->theFile ); + (void) read; + } + + do + { + /* Read data chunk ID */ + if ( fread( data_chunk.chunkID, 1, 4, self->theFile ) != 4 ) + { + goto bail; + } + + /* Read chunk length. */ + + if ( fread_LE( &offset, 4, 1, self->theFile ) != 1 ) + { + goto bail; + } + + /* Check for data chunk signature. */ + if ( strncmp( "data", data_chunk.chunkID, 4 ) == 0 ) + { + data_chunk.chunkSize = offset; + break; + } + + /* unused 1 byte present, if size is odd */ + /* see https:/ /www.daubnet.com/en/file-format-riff */ + if ( offset % 2 ) + { + offset++; + } + + /* Jump over non data chunk. */ + for ( ; offset > 0; offset-- ) + { + size_t read = fread( &tmpSize, 1, 1, self->theFile ); + (void) read; + } + + } while ( !feof( self->theFile ) ); + + /* success so far */ + *samplerate = wavinfo.sampleRate; + *channels = wavinfo.numberOfChannels; + *samplesInFile = data_chunk.chunkSize / wavinfo.numberOfChannels; + *samplesInFile /= ( ( wavinfo.bitsPerSample + 7 ) / 8 ); + *bps = wavinfo.bitsPerSample; + + self->position = 0; + self->bps = wavinfo.bitsPerSample; + self->length = *samplesInFile * wavinfo.numberOfChannels; + + fgetpos( self->theFile, &self->dataChunkPos ); + + return self; + +bail: + free( self ); + return NULL; +} + +static int32_t __ReadSample16( + WAVEFILEIN *self, + int32_t *sample, + int32_t scale ) +{ + size_t cnt; + int16_t v = 0; + + cnt = fread( &v, 2, 1, self->theFile ); + + if ( cnt != 1 ) + { + return __TWI_ERROR; + } + + self->position += 1; + +#ifdef __TWI_BE + v = BigEndian16( v ); +#endif + + if ( ( scale - 16 ) > 0 ) + { + *sample = v << ( scale - 16 ); + } + else + { + *sample = v >> ( 16 - scale ); + } + + return __TWI_SUCCESS; +} + +static int32_t __ReadSample24( + WAVEFILEIN *self, + int32_t *sample, + int32_t scale ) +{ + size_t cnt; + int32_t v = 0; + + cnt = fread( &v, 3, 1, self->theFile ); + + if ( cnt != 1 ) + { + return __TWI_ERROR; + } + + self->position += 1; + +#ifdef __TWI_BE + v = BigEndian32( v ); +#endif + + if ( v >= 0x800000 ) + { + v |= 0xff000000; + } + + if ( ( scale - 24 ) > 0 ) + { + *sample = v << ( scale - 24 ); + } + else + { + *sample = v >> ( 24 - scale ); + } + + return __TWI_SUCCESS; +} + +static int32_t __ReadSample32( + WAVEFILEIN *self, + float *sample ) +{ + size_t cnt; + union fl_int + { + float v_float; + int32_t v_int; + }; + union fl_int v; + + cnt = fread( &v, 4, 1, self->theFile ); + if ( cnt != 1 ) + { + return __TWI_ERROR; + } + + self->position += 1; +#ifdef __TWI_BE + v.v_int = BigEndian32( v.v_int ); +#endif + + *sample = v.v_float; + + return __TWI_SUCCESS; +} + +static int32_t __ReadSampleInternal( + WAVEFILEIN *self, + int32_t *sample, + int32_t scale ) +{ + int32_t err; + + if ( !self ) + { + return __TWI_ERROR; + } + + switch ( self->bps ) + { + case 16: + err = __ReadSample16( self, sample, scale ); + break; + + case 24: + err = __ReadSample24( self, sample, scale ); + break; + + default: + err = __TWI_ERROR; + break; + } + + return err; +} + +/* not fully tested */ +/* this function returns normalized values in the range +32767..-32768 */ +static int32_t ReadWavShort( + WAVEFILEIN *self, + int16_t sampleBuffer[], + uint32_t nSamplesToRead, + uint32_t *nSamplesRead ) +{ + uint32_t i; + int32_t err = __TWI_SUCCESS; + + if ( !sampleBuffer ) + { + return __TWI_ERROR; + } + + /* check if we have enough samples left, if not, + set nSamplesToRead to number of samples left. */ + if ( self->position + nSamplesToRead > self->length ) + { + nSamplesToRead = self->length - self->position; + } + + for ( i = 0; i < nSamplesToRead; i++ ) + { + if ( self->bps == 32 ) + { + float tmp; + err = __ReadSample32( self, &tmp ); + if ( err != __TWI_SUCCESS ) + { + return err; + } + sampleBuffer[i] = (int16_t) ( tmp * 32768.0f ); + } + else + { + int32_t tmp; + err = __ReadSampleInternal( self, &tmp, 16 ); + if ( err != __TWI_SUCCESS ) + { + return err; + } + sampleBuffer[i] = (int16_t) tmp; + } + *nSamplesRead += 1; + } + + return __TWI_SUCCESS; +} + +static int32_t CloseWavIn( + WAVEFILEIN *self ) +{ + if ( self ) + { + if ( self->theFile ) + { + fclose( self->theFile ); + } + } + free( self ); + + return __TWI_SUCCESS; +} + +/*------------- local subs ----------------*/ + +static size_t fread_LE( + void *ptr, + size_t size, + size_t nmemb, + FILE *stream ) +{ +#ifdef __TWI_LE + return fread( ptr, size, nmemb, stream ); +#endif +#ifdef __TWI_BE + + unsigned char x[sizeof( int32_t )]; + unsigned char *y = (unsigned char *) ptr; + int32_t i; + int32_t len; + + len = fread( x, size, nmemb, stream ); + + for ( i = 0; i < size * nmemb; i++ ) + { + *y++ = x[size * nmemb - i - 1]; + } + + return len; +#endif +} + +#ifdef __TWI_BE +static int16_t BigEndian16( int16_t v ) +{ + int16_t a = ( v & 0x0ff ); + int16_t b = ( v & 0x0ff00 ) >> 8; + + return a << 8 | b; +} + +static int32_t BigEndian32( int32_t v ) +{ + int32_t a = ( v & 0x0ff ); + int32_t b = ( v & 0x0ff00 ) >> 8; + int32_t c = ( v & 0x0ff0000 ) >> 16; + int32_t d = ( v & 0xff000000 ) >> 24; + + return a << 24 | b << 16 | c << 8 | d; +} +#endif + +#endif /* __TINYWAVEIN_C_H__ */ diff --git a/lib_util/tinywaveout_c.h b/lib_util/tinywaveout_c.h new file mode 100644 index 0000000000..c0cdf08129 --- /dev/null +++ b/lib_util/tinywaveout_c.h @@ -0,0 +1,592 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef __TINYWAVEOUT_C_H__ +#define __TINYWAVEOUT_C_H__ + +#include +#include +#include + +#if defined( __i386__ ) || defined( _M_IX86 ) || defined( _M_X64 ) || defined( __x86_64__ ) || defined( __arm__ ) || defined( __aarch64__ ) || ( defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ ) +#define __TWO_LE /* _T_iny _W_ave _O_ut _L_ittle _E_ndian */ +#endif + +#if defined( __POWERPC__ ) || defined( __sparc__ ) || ( defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ) +#define __TWO_BE /* _T_iny _W_ave _O_ut _B_ig _E_ndian */ +#endif + +#if !defined( __TWO_LE ) && !defined( __TWO_BE ) +#pragma message( "unknown processor - assuming Little Endian" ) +#define __TWI_LE +#endif + +#define __TWO_SUCCESS ( 0 ) +#define __TWO_ERROR ( -1 ) + +/*--- local types/structs ----------------------------------*/ + +#if defined( _MSC_VER ) +#pragma pack( push, 1 ) +#else +#pragma pack( 1 ) +#endif + +#ifndef TW_INT64 +#if !( defined( WIN32 ) ) +#include +#define TWO_INT64 /* long long */ int64_t +#else +#define TWO_INT64 __int64 +#endif +#endif + +typedef struct __tinyWaveOutHeader +{ + uint32_t riffType; /* 'RIFF' */ + uint32_t riffSize; /* file size */ + + uint32_t waveType; /* 'WAVE' */ +} __tinyWaveOutHeader; + +typedef struct __tinyWaveOutFmtChunk +{ + uint32_t formatType; + uint32_t formatSize; + + uint16_t formatTag; + uint16_t numChannels; + uint32_t sampleRate; + uint32_t bytesPerSecond; + uint16_t blockAlignment; + uint16_t bitsPerSample; + + /* wav fmt ext hdr here */ +} __tinyWaveOutFmtChunk; + +typedef struct __tinyWaveOutDataChunk +{ + uint32_t dataType; + uint32_t dataSize; + +} __tinyWaveOutDataChunk; + +typedef struct __tinyWaveOutHandle +{ + FILE *theFile; + uint32_t dataSize; + TWO_INT64 dataSizeLimit; + uint32_t fmtChunkOffset; + uint32_t dataChunkOffset; + uint32_t bps; + uint32_t clipCount; +} __tinyWaveOutHandle, WAVEFILEOUT; + +/*--- local protos --------------------------------------------------*/ +static __inline uint32_t BigEndian32( char, char, char, char ); +static __inline uint32_t LittleEndian32( uint32_t ); +static __inline uint32_t LittleEndian32s( int32_t ); +static __inline int16_t LittleEndian16( int16_t ); +static __inline int32_t __dataSizeChk( WAVEFILEOUT *self, int32_t newbytes ); + +#if defined( _MSC_VER ) +#pragma pack( pop ) +#else +#pragma pack() +#endif + +static WAVEFILEOUT *CreateBWF( + const char *fileName, + const uint32_t sampleRate, + const uint32_t numChannels, + const uint32_t bps + /* ,const uint32_t writeWaveExt */ ) +{ + WAVEFILEOUT *self; + __tinyWaveOutHeader whdr; + __tinyWaveOutFmtChunk wfch; + __tinyWaveOutDataChunk wdch; + uint32_t blockAlignment = 0; + uint32_t ByteCnt = 0; /* Byte counter for fwrite */ + + self = (WAVEFILEOUT *) calloc( 1, sizeof( WAVEFILEOUT ) ); + if ( !self ) + { + goto bail; /* return NULL; */ + } + + if ( !fileName ) + { + goto bail; + } + if ( sampleRate == 0 ) + { + goto bail; + } + if ( sampleRate > 768000 ) + { + goto bail; + } + if ( numChannels == 0 ) + { + goto bail; + } + if ( numChannels > 64 ) + { + goto bail; + } + if ( bps != 16 && bps != 24 && bps != 32 ) + { + goto bail; + } + + self->theFile = fopen( fileName, "wb+" ); + if ( !self->theFile ) + { + goto bail; + } + + /* WAV-Header */ + whdr.riffType = BigEndian32( 'R', 'I', 'F', 'F' ); + whdr.riffSize = LittleEndian32( 0xffffffff ); /* set to maximum, if fseek() doesn't work later */ + whdr.waveType = BigEndian32( 'W', 'A', 'V', 'E' ); + /* write to file */ + ByteCnt = 0; + ByteCnt += (uint32_t) fwrite( &whdr, 1, sizeof( whdr ), self->theFile ); + + /* FMT-Chunk */ + wfch.formatType = BigEndian32( 'f', 'm', 't', ' ' ); + wfch.formatSize = LittleEndian32( 16 ); + switch ( bps ) + { + case 16: + case 24: + wfch.formatTag = LittleEndian16( 0x0001 ); /* WAVE_FORMAT_PCM */ + break; + case 32: + wfch.formatTag = LittleEndian16( 0x0003 ); /* WAVE_FORMAT_IEEE_FLOAT */ + break; + default: + goto bail; + } + self->bps = bps; + wfch.bitsPerSample = LittleEndian16( (int16_t) bps ); + wfch.numChannels = LittleEndian16( (int16_t) numChannels ); + blockAlignment = numChannels * ( bps >> 3 ); + wfch.blockAlignment = LittleEndian16( (int16_t) blockAlignment ); + wfch.sampleRate = LittleEndian32( sampleRate ); + wfch.bytesPerSecond = LittleEndian32( sampleRate * blockAlignment ); + /* tbd: wavfmt ext hdr here */ + /* write to file */ + self->fmtChunkOffset = ByteCnt; + ByteCnt += (uint32_t) fwrite( &wfch, 1, sizeof( wfch ), self->theFile ); + + /* DATA-Chunk */ + self->dataChunkOffset = ByteCnt; + wdch.dataType = BigEndian32( 'd', 'a', 't', 'a' ); + wdch.dataSize = LittleEndian32( 0xffffffff - ByteCnt ); /* yet unknown. set to maximum of 4 GB file */ + /* write to file */ + ByteCnt += (uint32_t) fwrite( &wdch, 1, sizeof( wdch ), self->theFile ); + + self->dataSize = 0; + self->dataSizeLimit = LittleEndian32( 0xffffffff - ByteCnt ); /* maximum size for data chunk for 4 GB files */ + /* self->dataSizeLimit = LittleEndian32(0x7fffffff - ByteCnt); */ /* maximum size for data chunk for 2 GB files */ + + self->clipCount = 0; + + return self; + +bail: + free( self ); + return NULL; +} + +static WAVEFILEOUT *CreateWav( + const char *fileName, + const uint32_t sampleRate, + const uint32_t numChannels, + const uint32_t bps + /* const uint32_t writeWaveExt */ +) +{ + return CreateBWF( fileName, sampleRate, numChannels, bps ); +} + +const int16_t MAX_PCM16 = 32767; +const int16_t MIN_PCM16 = -32768; +static __inline int32_t CLIP_PCM16( + int32_t sample, + uint32_t *clipcount ) +{ + int32_t tmp = sample; + + if ( sample >= MAX_PCM16 ) + { + tmp = MAX_PCM16; + ( *clipcount )++; + } + else + { + if ( sample <= MIN_PCM16 ) + { + tmp = MIN_PCM16; + ( *clipcount )++; + } + } + + return tmp; +} + +const int32_t MAX_PCM24 = 8388607; +const int32_t MIN_PCM24 = -8388608; +static __inline int32_t CLIP_PCM24( + int32_t sample, + uint32_t *clipcount ) +{ + int32_t tmp = sample; + + if ( sample >= MAX_PCM24 ) + { + tmp = MAX_PCM24; + ( *clipcount )++; + } + else + { + if ( sample <= MIN_PCM24 ) + { + tmp = MIN_PCM24; + ( *clipcount )++; + } + } + + return tmp; +} +#define MAX_FLOAT32 ( +1.0f ) +#define MIN_FLOAT32 ( -1.0f ) +static __inline float CLIP_FLOAT32( + float sample, + uint32_t *clipcount ) +{ + float tmp = sample; + + if ( sample >= MAX_FLOAT32 ) + { + tmp = MAX_FLOAT32; + ( *clipcount )++; + } + else + { + if ( sample <= MIN_FLOAT32 ) + { + tmp = MIN_FLOAT32; + ( *clipcount )++; + } + } + + return tmp; +} + +static int32_t __WriteSample16( + WAVEFILEOUT *self, + int32_t sample, + int32_t scale ) +{ + size_t cnt; + int16_t v; + + if ( 16 != scale ) + { + if ( ( scale - 16 ) > 0 ) + { + sample = sample >> ( scale - 16 ); + } + else + { + sample = sample << ( 16 - scale ); + } + } + + v = (int16_t) CLIP_PCM16( sample, &( self->clipCount ) ); +#ifdef __TWO_BE + v = LittleEndian16( v ); +#endif + + cnt = fwrite( &v, sizeof( int16_t ), 1, self->theFile ); + + if ( cnt == 1 ) + { + self->dataSize += 2; + return __TWO_SUCCESS; + } + + return __TWO_ERROR; +} + +static int32_t __WriteSample24( + WAVEFILEOUT *self, + int32_t sample, + int32_t scale ) +{ + size_t cnt; + int32_t v; + + if ( ( scale - 24 ) > 0 ) + { + sample = sample >> ( scale - 24 ); + } + else + { + sample = sample << ( 24 - scale ); + } + + v = (int32_t) CLIP_PCM24( sample, &( self->clipCount ) ); +#ifdef __TWO_BE + v = LittleEndian32s( v ); +#endif + cnt = fwrite( &v, 3, 1, self->theFile ); + + if ( cnt == 1 ) + { + self->dataSize += 3; + return __TWO_SUCCESS; + } + + return __TWO_ERROR; +} + +static int32_t __WriteSample32( + WAVEFILEOUT *self, + float sample ) +{ + size_t cnt; + union fl_int + { + float v_float; + int32_t v_int; + }; + union fl_int v; + +#if CLIP_FLOAT + v.v_float = CLIP_FLOAT32( sample, &( self->clipCount ) ); +#else + v.v_float = sample; + if ( ( sample > 1.0f ) || ( sample < -1.0f ) ) + { + self->clipCount++; + } +#endif + +#ifdef __TWO_BE + v.v_int = LittleEndian32s( v.v_int ); +#endif + cnt = fwrite( &v, 4, 1, self->theFile ); + + if ( cnt == 1 ) + { + self->dataSize += 4; + return __TWO_SUCCESS; + } + + return __TWO_ERROR; +} + +static int32_t __WriteSampleInt( + WAVEFILEOUT *self, + int32_t sample, + int32_t scale ) +{ + int32_t err; + + if ( !self ) + { + return __TWO_ERROR; + } + + switch ( self->bps ) + { + case 16: + err = __WriteSample16( self, sample, scale ); + break; + + case 24: + err = __WriteSample24( self, sample, scale ); + break; + + default: + err = __TWO_ERROR; + break; + } + + return err; +} + +/* this function expects values in the 16 bit range +-32767/8 */ +static int32_t WriteWavShort( + WAVEFILEOUT *self, + int16_t sampleBuffer[], + uint32_t nSamples ) +{ + uint32_t i; + int32_t err = __TWO_SUCCESS; + + if ( !self ) + { + return __TWO_ERROR; + } + if ( !sampleBuffer ) + { + return __TWO_ERROR; + } + if ( __dataSizeChk( self, nSamples * sizeof( int16_t ) ) ) + { + return __TWO_ERROR; + } + + for ( i = 0; i < nSamples; i++ ) + { + if ( self->bps == 32 ) + { + err = __WriteSample32( self, sampleBuffer[i] / 32768.0f ); + } + else + { + err = __WriteSampleInt( self, (int32_t) sampleBuffer[i], 16 ); + } + if ( err != __TWO_SUCCESS ) + { + return err; + } + } + + return __TWO_SUCCESS; +} + +static int32_t CloseWav( + WAVEFILEOUT *self ) +{ + uint32_t riffSize_le = 0; + uint32_t dataSize_le = 0; + + if ( !self ) + { + return __TWO_ERROR; + } + + riffSize_le = LittleEndian32( + self->dataChunkOffset - 8 + 8 + + self->dataSize ); /* sizeof(hdr) - (8 bytes of riff chunk header) + (8 bytes data chunk + header) + sizeof(raw-pcm-data) */ + dataSize_le = LittleEndian32( self->dataSize ); + + /* now overwrite length/size values in header with the actual/real ones */ + /* fseek(self->theFile, 0, SEEK_SET);*/ + + /* seek to riffsize */ + fseek( self->theFile, 4, SEEK_SET ); + fwrite( &riffSize_le, sizeof( riffSize_le ), 1, self->theFile ); + /* seek to datasize */ + fseek( self->theFile, self->dataChunkOffset + 4, SEEK_SET ); + fwrite( &dataSize_le, sizeof( dataSize_le ), 1, self->theFile ); + + fclose( self->theFile ); + free( self ); + + return __TWO_SUCCESS; +} + +/*------------- local subs ----------------*/ + +static __inline uint32_t BigEndian32( + char a, + char b, + char c, + char d ) +{ +#ifdef __TWO_LE + return (uint32_t) d << 24 | (uint32_t) c << 16 | (uint32_t) b << 8 | (uint32_t) a; +#else + return (uint32_t) a << 24 | (uint32_t) b << 16 | (uint32_t) c << 8 | (uint32_t) d; +#endif +} + +static __inline uint32_t LittleEndian32( + uint32_t v ) +{ +#ifdef __TWO_LE + return v; +#else + return ( v & 0x000000FF ) << 24 | ( v & 0x0000FF00 ) << 8 | + ( v & 0x00FF0000 ) >> 8 | ( v & 0xFF000000 ) >> 24; +#endif +} + +/* signed version of the above */ +static __inline uint32_t LittleEndian32s( + int32_t v ) +{ +#ifdef __TWO_LE + return v; +#else + return ( v & 0x000000FF ) << 24 | ( v & 0x0000FF00 ) << 8 | + ( v & 0x00FF0000 ) >> 8 | ( v & 0xFF000000 ) >> 24; +#endif +} + +static __inline int16_t LittleEndian16( + int16_t v ) +{ +#ifdef __TWO_LE + return v; +#else + return ( ( v << 8 ) & 0xFF00 ) | ( ( v >> 8 ) & 0x00FF ); +#endif +} + +static __inline int32_t __dataSizeChk( + WAVEFILEOUT *self, + int32_t newbytes ) +{ + if ( !self ) + { + return __TWO_ERROR; + } + + if ( ( ( (TWO_INT64) self->dataSize ) + ( (TWO_INT64) newbytes ) ) > + self->dataSizeLimit ) + { + return __TWO_ERROR; + } + + return __TWO_SUCCESS; +} + +#endif /* __TINYWAVEOUT_C_H__ */ diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000000..4d4de5864a --- /dev/null +++ b/readme.txt @@ -0,0 +1,401 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + + +These files represent a pre-release of a codec candidate to the IVAS +Extension to the 3GPP EVS Codec floating-point C simulation. All code is +written in ANSI-C. The system is implemented as two separate programs: + + IVAS_cod Encoder + IVAS_dec Decoder + +For encoding using the coder program, the input is a binary +audio file (*.8k, *.16k, *.32k, *.48k) and the output is a binary +encoded parameter file (*.192). For decoding using the decoder program, +the input is a binary parameter file (*.192) and the output is a binary +synthesized audio file (*.8k, *.16k, *.32k, *.48k). For certain audio +formats (ISM, MASA), there are additional metadata files required. Audio +channels are interleaved in the input and output audio file. + + + FILE FORMATS: + ============= + +The file format of the supplied binary data (*.8k, *.16k, *.32k, *.48k, +*.192) is 16-bit binary data which is read and written in 16 bit words. +The data is therefore platform DEPENDENT. +The files contain only data, i.e., there is no header. +The test files included in this package are "PC" format, meaning that the +least signification byte of the 16-bit word comes first in the files. + +If the software is to be run on some other platform than PC, +such as an HP (HP-UX) or a Sun, then binary files will need to be modified +by swapping the byte order in the files. + +The input and output files (*.8k, *.16k, *.32k, *.48k) are 16-bit signed +binary files with 8/16/32/48 kHz sampling rate with no headers. + +The Encoder produces bitstream files in either ITU G.192 or MIME file +storage format. + +Using ITU G.192 format: + +For every 20 ms input audio frame, the encoded bitstream contains the +following data: + + Word16 SyncWord + Word16 DataLen + Word16 1st Databit + Word16 2nd DataBit + . + . + . + Word16 Nth DataBit + + +The SyncWord from the encoder is always 0x6b21. If decoder receives +SyncWord as 0x6b20 it indicates that the current frame was received in +error (bad frame). + +The DataLen parameter gives the number of audio data bits in the +frame. For example using DTX, DataLen for NO_DATA frames is zero. + +Each bit is presented as follows: Bit 0 = 0x007f, Bit 1 = 0x0081. + +Using MIME file storage format: + +The MIME file storage format is a byte based format which is +appropriate for media file storage or as format for email/MMS +attachments. + +Encoder: With the "-mime" option, the encoder always produces EVS-mime +storage format specified in TS26.445 Annex.2.6. The AMRWB-mime(RFC4867) +storage format is not supported by the encoder. + +Decoder: With the "-mime" option, the decoder can parse both EVS-mime +format storage files and AMRWB-mime (RFC4867) storage format files. +The decoder automatically distinguishes between the two +mime storage formats by reading the initial Magic Word in the bitstream +file. The EVS-mime storage format is described in TS 26.445, Annex +A.2.6. The AMRWB-mime storage format is described in RFC-4867. + + + INSTALLING THE SOFTWARE + ======================= + +Installing the software on the PC: + +First unpack the compressed folder into your directory. After that you +should have the following structure: + +. +`-- c-code + |-- Makefile + |-- Workspace_msvc + |-- apps + |-- lib_com +....|-- lib_debug + |-- lib_dec + |-- lib_enc + |-- lib_util + |-- scripts +....|-- work_in_progress + |-- readme_OSS.txt + `-- readme.txt + +The package includes a Makefile for gcc, which has been verified on +32-bit Linux systems. The code can be compiled by entering the directory +"c-code" and typing the command: make. The resulting encoder/decoder +executables are named "IVAS_cod" and "IVAS_dec". Both reside in the c-code +directory. + +The package also includes a solution-file for Microsoft Visual Studio 2017 (x86). +To compile the code, please open "Workspace_msvc\Workspace_msvc.sln" and build +"encoder" for the encoder and "decoder" for the decoder executable. The resulting +encoder/decoder executables are named "IVAS_cod.exe" and "IVAS_dec.exe". Both reside +in the c-code directory. + + + RUNNING THE SOFTWARE + ==================== + +The usage of the "IVAS_cod" program is as follows: + +Usage: IVAS_cod.exe [Options] R Fs input_file bitstream_file + +Mandatory parameters: +--------------------- +R : Bitrate in bps, + for EVS native modes R = (5900*, 7200, 8000, 9600, 13200, 16400, + 24400, 32000, 48000, 64000, 96000, 128000) + *VBR mode (average bitrate), + for AMR-WB IO modes R = (6600, 8850, 12650, 14250, 15850, 18250, + 19850, 23050, 23850) + for IVAS stereo & ISm R =(13200, 16400, 24400, 32000, 48000, 64000, 80000, + 96000, 128000, 160000, 192000, 256000) + for IVAS SBA, MASA, MC R=(13200, 16400, 24400, 32000, 48000, 64000, 80000, + 96000, 128000, 160000, 192000, 256000, 384000, 512000) + Alternatively, R can be a bitrate switching file which consists of R values + indicating the bitrate for each frame in bps. These values are stored in + binary format using 4 bytes per value +Fs : Input sampling rate in kHz, Fs = (8, 16, 32 or 48) +input_file : Input audio filename +bitstream_file : Output bitstream filename + +Options: +-------- +EVS mono is default, for IVAS choose one of the following: -stereo, -ism, -sba, -masa, -mc +-stereo [Mode] : Stereo format, default is unified stereo + optional for Mode: 1: DFT Stereo, 2: TD Stereo, 3: MDCT Stereo +-ism Channels Files : ISm format + where Channels specifies the number of ISms (1-4) + and Files specify input files containing metadata, one file per object + (use NULL for no input metadata) +-sba +/-Order : Scene Based Audio input format (Ambisonics ACN/SN3D), + where Order specifies the Ambisionics order (1-3), + where positive (+) means full 3D and negative (-) only 2D/planar components to be coded +-masa Ch File : MASA format + where Ch specifies the number of input/transport channels (1 or 2): + and File specifies input file containing parametric metadata +-mc InputConf : Multi-channel format + where InputConf specifies the channel configuration: 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4 + Loudspeaker positions are assumed to have azimuth and elevation as per + ISO/IEC 23091-3:2018 Table 3. Channel order is as per ISO/IEC 23008-3:2015 Table 95. + See readme.txt for details. +-dtx D : Activate DTX mode, D = (0, 3-100) is the SID update rate + where 0 = adaptive, 3-100 = fixed in number of frames, + default is deactivated +-dtx : Activate DTX mode with a SID update rate of 8 frames + Note: DTX is currently supported in EVS, DFT/TD stereo, 1 ISm, + SBA (up to 128kbps) and MASA (up to 128kbps) +-rf p o : Activate channel-aware mode for WB and SWB signal at 13.2kbps, + where FEC indicator, p: LO or HI, and FEC offset, o: 2, 3, 5, or 7 in number of frames. + Alternatively p and o can be replaced by a rf configuration file with each line + contains the values of p and o separated by a space, + default is deactivated +-max_band B : Activate bandwidth limitation, B = (NB, WB, SWB or FB) + alternatively, B can be a text file where each line contains "nb_frames B" +-no_delay_cmp : Turn off delay compensation +-stereo_dmx_evs : Activate stereo downmix function for EVS. +-mime : Mime output bitstream file format + The encoder produces TS26.445 Annex.2.6 Mime Storage Format, (not RFC4867 Mime Format). + default output bitstream file format is G.192 +-agc op : SBA Adaptive gain control, op = (0, 1), by default op is 0 or deactivated +-bypass mode : SBA PCA by-pass, mode = (1, 2), 1 = PCA off, 2 = signal adaptive, default is 1 +-q : Quiet mode, no frame counters + default is deactivated + + +The usage of the "IVAS_dec" program is as follows: + +Usage for EVS: IVAS_dec.exe [Options] Fs bitstream_file output_file +Usage for IVAS: IVAS_dec.exe [Options] OutputConf Fs bitstream_file output_file + +Mandatory parameters: +--------------------- +OutputConf : Output configuration: MONO, STEREO, 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4, FOA, + HOA2, HOA3, BINAURAL, BINAURAL_ROOM, EXT + By default, channel order and loudspeaker positions are equal to the + encoder. For loudspeaker outputs, OutputConf can be a custom loudspeaker + layout file. See below for details. + Parameter is only used when decoding IVAS bitstream. +Fs : Output sampling rate in kHz (8, 16, 32 or 48) +bitstream_file : Input bitstream filename or RTP packet filename (in VOIP mode) +output_file : Output audio filename + +Options: +-------- +-VOIP : VoIP mode: RTP in G192 +-VOIP_hf_only=0 : VoIP mode: EVS RTP Payload Format hf_only=0 in rtpdump +-VOIP_hf_only=1 : VoIP mode: EVS RTP Payload Format hf_only=1 in rtpdump + The decoder may read rtpdump files containing TS26.445 Annex A.2.2 + EVS RTP Payload Format. The SDP parameter hf_only is required. + Reading RFC4867 AMR/AMR-WB RTP payload format is not supported. +-Tracefile TF : VoIP mode: Generate trace file named TF +-fec_cfg_file : Optimal channel aware configuration computed by the JBM + as described in Section 6.3.1 of TS26.448. The output is + written into a .txt file. Each line contains the FER indicator + (HI|LO) and optimal FEC offset. +-no_delay_cmp : Turn off delay compensation +-mime : Mime bitstream file format + The decoder may read both TS26.445 Annex.2.6 and RFC4867 Mime Storage + Format files, the magic word in the mime file is used to determine + which of the two supported formats is in use. + default bitstream file format is G.192 +-T File : Head rotation specified by external trajectory File +-hrtf File : HRTF filter File used in ISm format and BINAURAL output configuration +-force_subframe_bin : Forces parametric binauralizer code to use 5 ms time resolution even when + output time resolution is larger. +-FEC X : Insert frame erasures, X = 0-10 is the percentage + of erased frames, or X may be the name of binary file or + file with G192 headers indicating GOOD FRAME or BAD FRAME + containing FEC pattern (short values of 0 (good) or 1 (bad)) + default is OFF, if this option is not used +-force R : Force specific binaural rendering mode, R = (TDREND, CLDFBREND), +-otr tracking_type : head orientation tracking type: 'ref' or 'avg' (only for binaural rendering) +-render_config File : Renderer configuration option File +-no_diegetic_pan : panning mono no dietic sound to stereo -1<= pan <=1, + left or l or 1->left, right or r or -1->right, center or c or 0->middle +-q : Quiet mode, no frame counter + default is deactivated + + + MULTICHANNEL LOUDSPEAKER INPUT / OUTPUT CONFIGURATIONS + ====================================================== +The loudspeaker positions for each MC layouts are assumed to have the following azimuth and elevation +(as per ISO/IEC 23091-3:2018 Table 3), 4th channel is LFE: + 5_1 -> CICP6: azi | 30| -30| 0| 0| 110|-110| + ele | 0| 0| 0| 0| 0| 0| + 7_1 -> CICP12: azi | 30| -30| 0| 0| 110|-110| 135|-135| + ele | 0| 0| 0| 0| 0| 0| 0| 0| + 5_1_2 -> CICP14: azi | 30| -30| 0| 0| 110|-110| 30| -30| + ele | 0| 0| 0| 0| 0| 0| 35| 35| + 5_1_4 -> CICP16: azi | 30| -30| 0| 0| 110|-110| 30| -30| 110|-110| + ele | 0| 0| 0| 0| 0| 0| 35| 35| 35| 35| + 7_1_4 -> CICP19: azi | 30| -30| 0| 0| 135|-135| 90| -90| 30| -30| 135|-135| + ele | 0| 0| 0| 0| 0| 0| 0| 0| 35| 35| 35| 35| +Position is not considered for the LFE channel. Channel order is as per ISO/IEC 23008-3:2015 Table 95. + +Additionally, at the decoder, OutputConf can be a custom loudspeaker layout file with the format: + azi0, azi1, ... aziN-1 + ele0, ele1, ... eleN-1 + LFE0 [optional] +Where the first two rows are comma separated azimuth and elevation positions of the N loudspeakers. +The output channel ordering is 0, 1, ... N-1. The third row contains an index "LFE0" (zero based) +specifying the output channel to which the LFE input will be routed if present. If the third row is +omitted, the LFE input is downmixed to all channels with a factor of 1/N. Position is not considered for +the LFE channel. + + + + RUNNING THE SELF TEST + ===================== + +A codec verification script is available in scripts/self_test.py. The +script demonstrates how to use the software at several operating points and +compares the output to a reference version/implementation. Please note: +In order to keep the run-time short it does not cover all operating +points or complete coverage. + +Documentation on the self_test.py can be found as a part of scripts/README.md. + +Note: Running the self_test.py requires the input vectors in the folder scripts/testv. The +audio files could unfortunately not be shared, and they need to be replaced in order to +run the self_test.py. To complement the test vector set, please replace the empty *.pcm-files +in the self_test folder with 16 bit PCM files following the specification below. + +stv1ISM48s.pcm - 1 channel (1 audio object), 48000 Hz, 1440000 samples +stv2ISM48s.pcm - 2 channels (discrete audio objects), 48000 Hz, 1440000 samples per channel +stv2OA32c.pcm - 9 channels (2nd order Ambisonics ACN/SN3D), 32000 Hz +stv2OA48c.pcm - 9 channels (2nd order Ambisonics ACN/SN3D), 48000 Hz +stv3ISM48s.pcm - 3 channels (discrete audio objects), 48000 Hz, 1440000 samples per channel +stv3OA32c.pcm - 16 channels (3rd order Ambisonics ACN/SN3D), 32000 Hz, 288939 samples per channel +stv3OA48c.pcm - 16 channels (3rd order Ambisonics ACN/SN3D), 48000 Hz, 433408 samples per channel +stv4ISM48s.pcm - 4 channel (discrete audio objects), 48000 Hz, 1440000 samples per channel +stv8c.pcm - 1 channel, 8000 Hz, clean speech/audio +stv8n.pcm - 1 channel, 8000 Hz, noisy speech +stv16c.pcm - 1 channel, 16000 Hz, 610307 samples, clean speech +stv16n.pcm - 1 channel, 16000 Hz, 257024 samples, noisy speech +stv32c.pcm - 1 channel, 32000 Hz, 1220613 samples, clean speech/audio +stv32n.pcm - 1 channel, 32000 Hz, 514048 samples, noisy speech +stv48c.pcm - 1 channel, 48000 Hz, 1830919 samples, clean speech/audio +stv51MC48c.pcm - 6 channels (5.1 1..6 where 4th channel is LFE), 3231233 samples per channel, 48000 Hz, movie excerpt +stv512MC48c.pcm - 8 channels (5.1+2 1..8 where 4th channel is LFE), 144000 samples per channel, 48000 Hz, movie excerpt +stv714MC48c.pcm - 12 channels (7.1+4 1..12 where 4th channel is LFE), 144000 samples per channel, 48000 Hz, movie excerpt +stvFOA16c.pcm - 4 channels (1st order Ambisonics ACN/SN3D), 16000 Hz, +stvFOA32c.pcm - 4 channels (1st order Ambisonics ACN/SN3D), 32000 Hz, 288939 samples per channel +stvFOA48c.pcm - 4 channels (1st order Ambisonics ACN/SN3D), 48000 Hz, 433408 samples per channel +stvST16c.pcm - 2 channels, 16000 Hz, 329601 samples per channel, clean speech/audio +stvST16n.pcm - 2 channels, 16000 Hz, 310401 samples per channel, noisy speech +stvST32c.pcm - 2 channels, 32000 Hz, 659200 samples per channel, clean speech/audio +stvST32n.pcm - 2 channels, 32000 Hz, 620800 samples per channel, noisy speech +stvST48c.pcm - 2 channels, 48000 Hz, 988800 samples per channel, clean speech/audio +stvST48n.pcm - 2 channels, 48000 Hz, 931200 samples per channel, noisy speech +stv_IVASMASA_1dir1TC.pcm - 1 channel (1 MASA transport channel), 48000 Hz, 48000 Hz, 144000 samples +stv_IVASMASA_1dir1TC_DTX.pcm - 1 channel (1 MASA transport channel), 48000 Hz, 48000 Hz, 963840 samples +stv_IVASMASA_1dir2TC.pcm - 2 channels (2 MASA transport channel), 48000 Hz, 48000 Hz, 288000 samples per channel +stv_IVASMASA_1dir2TC_DTX.pcm - 2 channels (2 MASA transport channel), 48000 Hz, 48000 Hz, 963840 samples per channel +stv_IVASMASA_2dir1TC.pcm - 1 channel (1 MASA transport channel), 48000 Hz, 48000 Hz, 288000 +stv_IVASMASA_2dir2TC.pcm - 2 channels (2 MASA transport channel), 48000 Hz, 48000 Hz, 144000 samples per channel + + +For the MASA operation modes, in addition the following metadata files +are required: + +stv_IVASMASA_1dir1TC.met +stv_IVASMASA_1dir1TC_DTX.met +stv_IVASMASA_1dir2TC.met +stv_IVASMASA_1dir2TC_DTX.met +stv_IVASMASA_2dir1TC.met +stv_IVASMASA_2dir2TC.met + +It is strongly recommended to align these files to the corresponding +PCM audio files. The MASA metadata files can be generated with the +latest version of the IVAS MASA C Reference Software, which was made +available at +https://www.3gpp.org/ftp/TSG_SA/WG4_CODEC/TSGS4_118-e/Docs/S4-220443.zip + +For the ISM operation modes, in addition the following metadata files +are required: + +stvISM1.csv +stvISM2.csv +stvISM3.csv +stvISM4.csv + +These are comma separated files (csv) which indicate the per object position +in the format: +frame index, azimuth, elevation, distance (unit circle), spread, gain + +with the following meaning: +| Parameter | format, value range | meaning +---------------------------------------------------------------------- +| frame index | int, [0, INT_MAX] | associated IVAS frame +---------------------------------------------------------------------- +| azimuth | float, [-180,180[ | azimuth; positive indicates left +---------------------------------------------------------------------- +| elevation | float, [-90,90] | elevation; positive indicates up +---------------------------------------------------------------------- +| distance | float, tbd | default: 0 +---------------------------------------------------------------------- +| spread | float, [0,360] | spread in angles from 0 ... 360ø +---------------------------------------------------------------------- +| gain | float, [0,1] | gain +---------------------------------------------------------------------- + + + ADDITIONAL SCRIPTS + ================== + +Additional scripts for item generation and codec testing are available +in the directory scripts. Please refer to scripts/README.md for +additional documentation. diff --git a/scripts/IvasBuildAndRun.py b/scripts/IvasBuildAndRun.py new file mode 100644 index 0000000000..9053d55291 --- /dev/null +++ b/scripts/IvasBuildAndRun.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os.path +import sys + +from pyivastest.IvasSvnBuilder import * +from pyivastest import IvasScriptsCommon +import pyivastest.constants as constants + + +class IvasBuildAndRun(IvasScriptsCommon.IvasScript): + def __init__(self): + super().__init__( + ivas_parser=True, enable_logging=True, logger_name="IvasBuildAndRun" + ) + self.parser.add_argument( + "--srcdir", + help="Existing source file directory or desired directory for SVN export for the reference, default is the base directory of this working copy {}".format( + constants.WC_BASE_DIR + ), + ) + self.parser.add_argument( + "--svn", help="Path to SVN repository for the reference" + ) + self.parser.add_argument( + "--r", + help="SVN revision for the reference (default HEAD)", + default=None, + type=int, + ) + self.parser.add_argument( + "--rebuild", help="force a rebuild of the binaries", action="store_true" + ) + self.parser.add_argument("--svnuser", help="SVN user name", default="") + self.parser.add_argument("--svnpass", help="SVN password", default="") + + def run(self): + self.parse_args() + if self.args["svn"]: + # check if we have an output directory + if not ["srcdir"]: + sys.exit("You have to specifiy a root directory for the SVN export!") + + elif self.args["srcdir"]: + # check if srcdir exists + if not os.path.exists(self.args["srcdir"]): + sys.exit("Source directory " + self.args["srcdir"] + " does not exist") + else: + self.args["srcdir"] = constants.WC_BASE_DIR + # sys.exit("You need to specify either a SVN repository or an existing source code directory for the reference") + + if self.args["svn"]: + br_ref = IvasBuilderAndRunner.fromSvn( + self.args["svn"], + svn_user=self.args["svnuser"], + revision=self.args["r"], + svn_pwd=self.args["svnpass"], + out_dir=self.args["srcdir"], + site_config=self.args["config"], + sample_rate_enc_in=self.args["srin"], + sample_rate_dec_out=self.args["srout"], + enable_logging=True, + logger_name="{}.br".format(self.logger.name), + ) + + elif self.args["srcdir"]: + br_ref = IvasBuilderAndRunner( + src_dir=self.args["srcdir"], + site_config=self.args["config"], + sample_rate_enc_in=self.args["srin"], + sample_rate_dec_out=self.args["srout"], + enable_logging=True, + logger_name="{}.br".format(self.logger.name), + ) + + print("Creating Items for " + str(self.args["formats"])) + + check = "RUN" + + defines_to_enable = [] + if self.args["info"] is True: + defines_to_enable = ["DEBUG_MODE_INFO"] + + if self.args["rebuild"] == True: + br_ref.force_build = True + + br_ref.add_build_and_run_config( + check, + formats_fname=self.args["format_file"], + max_workers=self.args["max_workers"], + sample_rate_enc_in=self.args["srin"], + sample_rate_dec_out=self.args["srout"], + defines_to_enable=defines_to_enable, + instrumented=False, + ) + + IvasScriptsCommon.runner_setup( + br_ref.build_and_run_dict[check]["runner"], self.args + ) + IvasScriptsCommon.analyzer_setup( + br_ref.build_and_run_dict[check]["analyzer"], self.args + ) + + br_ref.run(check) + for r in br_ref.build_and_run_dict[check]["runner"].results: + self.logger.console(r[0]) + + +if __name__ == "__main__": + script = IvasBuildAndRun() + script.run() diff --git a/scripts/IvasBuildAndRunChecks.py b/scripts/IvasBuildAndRunChecks.py new file mode 100644 index 0000000000..fe1953a603 --- /dev/null +++ b/scripts/IvasBuildAndRunChecks.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os.path +import sys + +from pyivastest.IvasSvnBuilder import * +from pyivastest import IvasScriptsCommon +import pyivastest.constants as constants +from pyivastest import ivas_svn + + +class IvasBuildAndRunChecks(IvasScriptsCommon.IvasScript): + def __init__(self): + super().__init__( + ivas_parser=True, enable_logging=True, logger_name="IvasBuildAndRunChecks" + ) + + self.parser.add_argument( + "--checks", + nargs="*", + default="all", + help="List of checks to run, default all", + choices=["all", "CLANG1", "CLANG2", "CLANG3", "VALGRIND", "COMPLEXITY"], + ) + self.parser.add_argument( + "--srcdir", + help="Existing source file directory or desired directory for SVN export, default is the base directory of this working copy {}".format( + constants.WC_BASE_DIR + ), + ) + self.parser.add_argument("--svn", help="Path to SVN repository") + self.parser.add_argument("--svnuser", help="SVN user name", default="") + self.parser.add_argument("--svnpass", help="SVN password", default="") + self.parser.add_argument( + "-r", help="SVN revision (default HEAD)", type=int, default=None + ) + self.parser.add_argument( + "--def", + help="defines to enable for the version to be tested", + nargs="*", + default=None, + ) + self.parser.add_argument( + "--undef", + help="defines to disable for the version to be tested", + nargs="*", + default=None, + ) + self.parser.add_argument( + "--create_complexity_tables", + help="create complexity tables with the given prefix", + default="", + ) + self.parser.add_argument( + "--create_html_output", + help="create html output for automated tests emails with given prefix", + default="", + ) + self.parser.add_argument( + "--rebuild", help="force a rebuild of the binaries", action="store_true" + ) + + def run(self): + + self.parse_args() + if self.args["error"] or self.args["exit"]: + exit() + + if self.args["svn"]: + # check if we have an output directory + if not ["srcdir"]: + sys.exit("You have to specifiy a root directory for the SVN export!") + + elif self.args["srcdir"]: + # check if srcdir exists + self.args["srcdir"] = os.path.abspath(self.args["srcdir"]) + if not os.path.exists(self.args["srcdir"]): + sys.exit("Source directory " + self.args["srcdir"] + " does not exist") + else: + self.args["srcdir"] = constants.WC_BASE_DIR + + if "all" in self.args["checks"]: + checks = ["CLANG1", "CLANG2", "CLANG3", "VALGRIND"] + else: + checks = self.args["checks"] + + if self.args["svn"]: + br = IvasBuilderAndRunner.fromSvn( + self.args["svn"], + self.args["svnuser"], + revision=self.args["r"], + svn_pwd=self.args["svnpass"], + out_dir=self.args["srcdir"], + site_config=self.args["config"], + sample_rate_enc_in=self.args["srin"], + sample_rate_dec_out=self.args["srout"], + enable_logging=True, + logger_name="{}.br".format(self.logger.name), + ) + + elif self.args["srcdir"]: + br = IvasBuilderAndRunner( + src_dir=self.args["srcdir"], + site_config=self.args["config"], + sample_rate_enc_in=self.args["srin"], + sample_rate_dec_out=self.args["srout"], + enable_logging=True, + logger_name="{}.br".format(self.logger.name), + ) + + modes = self.args["formats"] + + self.logger.console("Running checks for {}".format(str(modes)), logging.INFO) + + for check in checks: + if check == "COMPLEXITY": + br.add_complexity( + format_select_list=modes, + formats_fname=self.args["format_file"], + max_workers=self.args["max_workers"], + ) + else: + br.add_check( + check, + format_select_list=modes, + formats_fname=self.args["format_file"], + max_workers=self.args["max_workers"], + ) + IvasScriptsCommon.runner_setup( + br.build_and_run_dict[check]["runner"], self.args + ) + IvasScriptsCommon.analyzer_setup( + br.build_and_run_dict[check]["analyzer"], self.args + ) + + if self.args["rebuild"] == True: + br.force_build = True + + for check in checks: + br.run(check) + if self.args["create_html_output"]: + revision = ivas_svn.get_local_svn_info(self.args["srcdir"], self.logger) + if revision is None: + print("Could not get revision from local copy") + revision = -1 + else: + revision = revision["commit_revision"] + br.build_and_run_dict[check]["analyzer"].write_html_file( + check, self.args["create_html_output"], revision + ) + for r in br.build_and_run_dict[check]["runner"].results: + self.logger.console(r[0]) + + if "COMPLEXITY" in checks and self.args["create_complexity_tables"]: + cmplx_analyzer = br.build_and_run_dict["COMPLEXITY"]["analyzer"] + if self.args["formats"]: + cmplx_analyzer.set_format_select_list(self.args["formats"]) + if self.args["oc_dict"]: + for ivas_format in self.args["formats"]: + cmplx_analyzer.set_format_output_config( + ivas_format, self.args["oc_dict"] + ) + cmplx_analyzer.ls_modes() + cmplx_analyzer.all_instrumented_to_csv( + self.args["create_complexity_tables"] + ) + + +if __name__ == "__main__": + script = IvasBuildAndRunChecks() + script.run() diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000000..7264ccf7a5 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,644 @@ + + +--- +title: Python scripts for Testing the IVAS code and Generating test items +--- +# Python scripts for Testing the IVAS code and Generating test items +## Contents +0. [Requirements](#0-requirements) +1. [Scripts and classes for testing IVAS code](#1-scripts-and-classes-for-testing-ivas-code) + - [Classes](#11-classes) + - [Output directory structure](#12-output-directory-structure) + - [Scripts](#13-scripts) + - [Common commandline options for the scripts](#common-commandline-options-for-the-scripts) + - [runIvasCodec.py](#runivascodecpy) + - [IvasBuildAndRun.py](#ivasbuildandrunpy) + - [IvasBuildAndRunChecks.py](#ivasbuildandruncheckspy) + - [testBitexact.py](#testbitexactpy) + - [self_test.py](#self_testpy) +2. [Script for generating listening test items](#2-script-for-generating-listening-test-items) + - [generate_test_items.py](#21-generate_test_itemspy) + - [Test configuration file](#22-test-configuration-file) + - [Supported test conditions](#23-supported-test-conditions) + - [Supported input/output/rendered audio formats](#24-supported-inputoutputrendered-audio-formats) + - [Pre-renderer Metadata definiton](#25-pre-renderer-metadata-definition) +3. [Script for converting formats and binauralizing](#3-script-for-converting-formats-and-binauralizing) + - [Binauralizing with head rotation](#31-binauralizing-with-head-rotation) + - [Generating binaural reference signals](#32-generating-binaural-reference-signals) + +--- + + +## 0. Requirements +- Python >= 3.7 +- numpy and scipy for `generate_test_items.py`, `testBitexact.py` and `self_test.py` +--- + +## 1. Scripts and classes for testing IVAS code + +### 1.1 Classes + +- IvasModeCollector.py + - IvasModeCollector: manages operating modes +- IvasModeRunner.py: + - IvasModeRunner(IvasModeCollector): run the encoder/decoder (multithreaded) +- IvasSvnBuilder.py: checks out and builds the source code + - IvasBuilder: build the source code + - IvasSvnBuilder(IvasBuilder): export and build the source code + - IvasBuilderAndRunner: (export and) build the code, run a number of specific configrations +- IvasModeAnalyzer.py: + - IvasModeAnalyzer(IvasModeRunner): parses log files, generates error info and creates complexity tables + +The classes rely on a set of configuration dictionaries which, some basic dictionaries are available as .json files. + +One dictionary defines the paths for necesarry AFSP and util binaries and the default input directories for items, and is similar to the configuration files given by `-p` to `runEvsCoded.pl`. As examples `FhG_linux.json`, `FhG_windows.json` and `FhG_macos.json` already exist. + +The other necessary dictionary contains the IVAS format and mode definitions. Also two default dictionaries (`ivas_modes.json` and `ivas_modes_debug.json`) already exist + +Examples of how to use this classes can be found in the Jupyter notebook `ivas_examples.ipynb` and in the scripts below + +### 1.2 Output directory structure + +Given output directories have a certain structure to avoid to much cluttering + +| `outdir/` | | | | +|-----------|------------------|-----------------------------|--------------------------------------------------| +| | `pcm/` | PCM file cache | | +| | `enc/` | Encoded bitstreams | | +| | `dec/` | Decoded waveforms | | +| | `logs/` | Encoder/Decoder/PCM logs | one log per generated PCM/bitstream/decoded waveform | +| | `IVAS_cod[.exe]` | Encoder binary | Only if a build step was involved | +| | `IVAS_dec[.exe]` | Decoder binary | Only if a build step was involved | +| | `build.log` | Log of build messages | Only if a build step was involved | +| | `run.log` | Log of general run messages | | + +--- + +### 1.3 Scripts + +- runIvasCodec.py : replacement for runIvasCodec.pl +- IvasBuildAndRun.py : (export), build and run the IVAS framework +- IvasBuildAndRunChecks.py : (export), build and run various checks (CLANG, valgrind, complexity measures) +- testBitexact.py: (export), build and run two different versions of the IVAS codec and test for bitexactness +- self_test.py: run the self tests (replacement for the self_test binary) + +#### Common commandline options for the scripts + +The different scripts share a common set of command line options: +``` + -h, --help show this help message and exit + -C [FORMAT [FORMAT ...]], --formats [FORMAT [FORMAT ...]] + List of IVAS formats to run, default all (for possible + choices get a list with -L + -m [MODE [MODE ...]], --modes [MODE [MODE ...]] + List of IVAS modes to run, default all (for possible + choices get a list with -l + --oc [OC_DICT [OC_DICT ...]] + List of output formats, either a space separated list + or a json string in single quotes + -E "-opt1 opt2", --enc_options "-opt1 opt2" + Additional command line options for the encoder + (always use it in the form -E="-o -opt ...") + -D "-opt1 opt2", --dec_options "-opt1 opt2" + Additional command line options for the decoder + (always use it in the form -D="-o -opt ...") + --format_file FORMAT_FILE + File name for the IVAS ivas_format dictionary to use + (default: ivas_modes.json) + -I [ITEM [ITEM ...]], --items [ITEM [ITEM ...]] + List of items to be coded, allows for explicit + definition of metadata files by grouping an item + together with its metadata files in square brackets + [ITEM,METADATAFILE,...] + --metadata_files [MDFILE [MDFILE ...]] + List of common metadata files + -z [{silent,debug,info,warning,error,critical}], --silent [{silent,debug,info,warning,error,critical}] + Either show with minimal output (default, 'silent'), + or reroute log messages with levels higher than LEVEL + to the console + -S SRIN, --srin SRIN Input sample rate for the encoder + -R SROUT, --srout SROUT + Output sample rate for the decoder + -p CONFIG, --config CONFIG + select site-related config as CONFIG.json + -t [MAX_WORKERS], --max_workers [MAX_WORKERS] + use multithreading with MAX_WORKERS threads (default: + number of CPUs available at the machine) + -l, --list_modes list all supported IVAS ivas_formats + -L, --list_formats list all supported IVAS formats + -U LIMIT_DURATION, --limit_duration LIMIT_DURATION + limit dUration of input file to X seconds + -f FER_FILE, --fer_file FER_FILE + frame error pattern file + -i INDIR, --indir INDIR + Directory for items to be coded, either a single + directory or a json string for different directories + with the input formats as keys + --decoder_only only run the decoder + -x FILTER_REGEX, --filter FILTER_REGEX + Regex for filtering modes + -s, --sidstart Cut bitstreams until the first SID frame before decoding +``` + +Some notable difference exits to similar command line options of `runEvsCodec.pl` and a few new ones are added: + +`-i` is only intended for input directories. But `-i` is also more flexible than in `runEvsCodec.pl`. You can still give a single input directory which is then used as input directory for all possible input formats. But you can also give a json string if you like to give different input directories for different input formats. E.g. +``` +-i {\"MONO\":\"/path/to/mono/files\", \"STEREO\":\"/path/to/stereo/files\"} +``` +gives input paths for mono and stereo input files, all other input formats use the default paths form the given config. Don't forget to escape the double quotes. For backwards compatibility to `runEvsCodec.pl` `-i` also accepts a single input file, but it is encouraged to use `-I` for this purpose. + +`-I, --items` is new and only for input files, you can give either absolute paths names or you can use the basename only, then the scripts searches in the given input directories for the item(s). You can also give metadata files belonging to the item direclty here by enclosing them together with the item in square brackets and separated by commas. So e.g.: +``` +--items item1.wav [item2.wav, metadata1foritem2.cvs, metadata2foritem2] +``` +tells the script to use `item1.wav` (with some default metadatafiles if needed) and `item2.wav` together withs the metadata files `metadata1foritem2.csv` and `metadata2foritem2.csv` + +`--metadata_files` gives a list of metadatafiles to be used for all input items where no specific metadata files were given. E.g. +``` +--metadata_files commonmetadatafile1.cvs commonmetadatafile2.csv +``` + +`--format_file` gives a json file with the format specification directory (what was hardcoded in `runEvsCodec.pl` as `$modes_whatever`), the default is `ivas_modes.json`, another with some more subformats for debugging purposes is `ivas_modes_debug.json`. The format is described in the example notebook `ivas_examples.ipynb`, so for specific purposes it is easy to create a dedicated format dictionary. + +`-L, --list_formats` outputs a list of all defined formats in the given format dictionary, these can be used to restrict the formats with `-C` + +`-C, --formats` restricts which formats should be run, e.g. `-C MC ISM1` only runs the MC and ISM1 format (and all modes belonging to the format) + +`-l, --list_modes` outputs a list of availble modes (already restricted if `-C` was given), pretty much like `-l` in `runEvsCodec.pl` but the default modes in the default dictionary `ivas_modes.json` have some nicer names now. Mode names could be used with `-m, --modes` + +`-m, --modes` can now take a list of modes instead of just one + +`--oc` is new and is for defining the list of output formats for decoding eg. `--oc STEREO CICP6 BINAURAL` . There is also a very advanced posibility to give extra decoder command line options for each output format by again providing a json string (this time in single quotes!). If you are interested look at the python code itself... + +`--decoder_only` runs only the decoding. Note that in this case the output directory structure and the encoded files have to exist already. + +`-x, --filter` also accepts regular expressions for filtering modes so a simple `-x swb` will run all SWB modes, while e.g. `-x b(48|64|80).*dtx` will run all dtx modes with 48,64, and 80kbps. For python regular expressions syntax please see https://docs.python.org/3/library/re.html + +`-s, --sidstart` cuts all frames preceding the first SID frame in the encoded bit streams before decoding + +`--info` enables writing to individual sub directories of `/res` for the debug info output (works for `runIvasCodec.py` if DEBUG_MODE_INFO is active, activates DEBUG_MODE_INFO in the build step of `IvasBuildAndRun.py`, has no impact on `IvasBuildAndRunChecks.py` and `testBitexact.py`) + +--- + +#### `runIvasCodec.py` + +Additional arguments: +``` + -V, --valgrind Run with valgrind + -o OUTDIR, --outdir OUTDIR + Output directory for items to be coded, (default + ./out) + -e ENC, --enc ENC Encoder binary name + -d DEC, --dec DEC Decoder binary name +``` +Pretty much self explaining and in line with `runEvsCodec.pl` + +Default binaries are `../../IVAS_cod` and `../../IVAS_dec` relative to the directory `runIvasCodec.py` sits in. + +--- + +#### `IvasBuildAndRun.py` + +(Exports), builds and runs the IVAS codec +``` +Additional arguments: + + --srcdir SRCDIR Existing source file directory or desired directory + for SVN export for the reference + --svn SVN Path to SVN repository for the reference + --r R SVN revision for the reference (default HEAD) + --svnuser SVNUSER SVN user name + --svnpass SVNPASS SVN password + --rebuild force a rebuild of the binaries +``` + +`--srcdir` is either an already existing source code directory or the target directory for the script to export the code from a svn respository into (in this case the code is in reality exported to `srcdir/trunk_or_branch_name/rR` ). This option is mandatory. + +`--svn` optional the SVN URL to be exported. This url can either be the complete svn url or just the relative path to the standard svn URL for the IVAS project. So e.g. `--svn https://INSERT_SVN_REPO/trunk/` and `--svn trunk` would lead to the export of the trunk of the default IVAS project svn repo. + +`--r` The desired revision (if not given, the `HEAD` revision is checked out) + +`--svnuser` Username for the SVN. If ommitted the scripts try to identify the svn user from the saved svn credentials. If not found, the user is prompted for a user name. + +`--svnpass` SVN password for the given svn user. If ommitted the scripts see if the password is saved in the svn credentials, otherwise the user is prompted for the password. + +`--rebuild` forces a rebuild if the `RUN` directory and the encoder and the decoder binaries already exist, normally they would reused and not built anew. + +Example, checks out the trunk of revision 4000 to `/home/user/ivas/automated_tests/trunk/r4000` and runs all MC and SBA modes with 48 kHz input and output sample rate with a special user config and the default format dictionary, the output directory is `/home/user/ivas/automated_tests/trunk/r4000/RUN` +``` +./IvasBuildAndRun.py -p user_linux -C MC SBA -srcdir /home/user/ivas/automated_tests/ --svn https://INSERT_SVN_REPO/trunk/ --r 4000 --svnuser user --srin 48 --srout 48 +``` + +--- + +#### `IvasBuildAndRunChecks.py` + +(Exports), builds and runs some dedictated checks. + +Additional arguments: +``` + --checks [{all,CLANG1,CLANG2,CLANG3,VALGRIND,COMPLEXITY} [{all,CLANG1,CLANG2,CLANG3,VALGRIND,COMPLEXITY} ...]] + List of checks to run, default all + --srcdir SRCDIR Existing source file directory or desired directory + for SVN export + --svn SVN Path to SVN repository + --svnuser SVNUSER SVN user name + --svnpass SVNPASS SVN password + -r R SVN revision (default HEAD) + --def [DEF [DEF ...]] + defines to enable for the version to be tested + --undef [UNDEF [UNDEF ...]] + defines to disable for the version to be tested + --create_complexity_tables CREATE_COMPLEXITY_TABLES + create complexity tables with the given prefix + --create_html_output CREATE_HTML_OUTPUT + create html output for automated tests emails with + given prefix + --rebuild force a rebuild of the binaries +``` + +`--checks` which checks to run, `all` runs `CLANG1 CLANG2 CLANG3 VALGRIND` + +`--srcdir, --svn, --svnuser, --svnpass, -r` like for `IvasBuildAndRun.py` + +`--def` list of defines to enable (from `lib_com/options.h`) + +`--undef` list of defines to disable (from `lib_com/options.h`) + +`--create_complexity_tables` optional if checks includes `COMPLEXITY` , the csv files containing the complexity numbers per mode are created automatically with the file name suffix `CREATE_COMPLEXITY_TABLES` given as argument parameter. + +`--create_html_output` creates the html output used in the automated test emails. + +`--rebuild` forces a rebuild if the chosen checks directories and the encoder and the decoder binaries therein already exist, normally they would reused and not built anew. + + +Example, checks out the trunk of revision 4000 to `/home/user/ivas/automated_tests/trunk/r4000` and runs checks `CLANG1` and `CLANG2` with the define `IVAS_666_APOCALYPSE_FIX` activated in `lib_com/options.h` for all MC and SBA modes with 48 kHz input and output sample rate with a special user config and the default format dictionary, the output directories per check are below `/home/user/ivas/automated_tests/trunk/r4000/` +``` +./IvasBuildAndRunChecks.py -p user_linux -C MC SBA --checks CLANG1 CLANG2 --def IVAS_666_APOCALYPSE_FIX --srcdir /home/user/ivas/automated_tests/ --svn https://INSERT_SVN_REPO/trunk/ --r 4000 --svnuser user --srin 48 --srout 48 +``` +Example, create complextiy tables for the `HEAD` revision of the trunk, only ParamMC modes (needs the `ivas_modes_debug.json` format directory) +``` +./IvasBuildAndRunChecks.py -p user_linux -C MC_ParamMC --format_file ivas_modes_debug.json --checks COMPLEXITY --create_complexity_tables PMC_ --srcdir /home/user/ivas/automated_tests/ --svn https://INSERT_SVN_REPO/trunk/ --r 4000 --svnuser user --srin 48 --srout 48 +``` + +--- + +#### `testBitexact.py` + +(Exports), builds and runs two different versions of the code and comapares the bitexactness of the decoded bit streams +Also usable for just comparing decoded wav files in two different directories. + +Additional arguments: +``` + --srcdirref SRCDIRREF + Existing source file directory or desired directory + for SVN export for the reference + --svnref SVNREF Path to SVN repository for the reference + --rref RREF SVN revision for the reference (default HEAD) + --srcdirtest SRCDIRTEST + Existing source file directory or desired directory + for SVN export for the version to be tested + --svntest SVNTEST Path to SVN repository for the version to be tested + --rtest RTEST SVN revision for the version to be tested (default + HEAD) + --deftest [DEFTEST [DEFTEST ...]] + defines to enable for the version to be tested + --svnuser SVNUSER SVN user name + --svnpass SVNPASS SVN password + --testdeconly only run the decoder to generate files to be tested + --refdeconly only run the decoder to generate ref files + --forcetestbuild rebuild binaries to be tested + --filedirtest FILEDIRTEST + directory for decoded waveforms to be tested + --filedirref FILEDIRREF + directory for decoded referenence waveforms +``` +Similar to `IvasBuildAndRun*.py`, but with dedicated switches for reference code and code to be tested, and also for both test +and reference files a directory with existing waveforms can be given. + +So for either reference or test files one of the three following possibilities is mandatory (only shown for ref files): + +`--svnref --srcdirref [--svnuser --svnpass --rref]` + +`--srcdirref` + +`--filedirref` + +A new build of the encoder decoder binaries for producing the items to be tested can be forced with `--forcetestbuild`. + +The list of files to be tested is, if waveform directories are compared, generated from the waveforms in the reference directory, +otherwise it is generated using the given format dictionary, selected modes and selected output formats and the input +items for encoding the selected modes. + +Example for checking BE between some local code and the trunk for SBA modes and binaural output formats +``` +./testBitexact.py -p user_linux -C SBA --oc BINAURAL BINAURAL_ROOM -srcdirtest /some/local/src/dir/ -srcdirref /home/user/ivas/automated_tests/ --svnref https://INSERT_SVN_REPO/trunk/ --svnuser user --srin 48 --srout 48 +``` +Example for checking BE between the head of a dev branch and a specific version of the trunk, all MC, SBA, MASA modes and all output formats, limit to 10 seconds input signal length for the sake of run time. +``` +./testBitexact.py -p user_linux -C SBA PlanarSBA MC MASA --oc BINAURAL BINAURAL_ROOM MONO STEREO FOA HOA2 HOA3 CICP6 CICP12 CICP16 CICP19 -srcdirtest /home/user/ivas/automated_tests/ --svntest https://INSERT_SVN_REPO/B20290120_some_dev_branch/ -srcdirref /home/user/ivas/automated_tests/ --svnref https://INSERT_SVN_REPO/trunk/ --rref 4000 --svnuser user --srin 48 --srout 48 -U 10 +``` + +--- + +#### `self_test.py` +Runs the self tests + +``` +usage: self_test.py [-h] + [-z [{silent,console,progress,debug,info,warning,error,critical}]] + [-g LOGFILE] [-t MAX_WORKERS] [--create] + [--srcdirref SRCDIRREF] [--svnref SVNREF] [--rref RREF] + [--svnuser SVNUSER] [--svnpass SVNPASS] + [--filedirref FILEDIRREF] [--encref ENCREF] + [--decref DECREF] [--enctest ENCTEST] [--dectest DECTEST] + [-p] + [test_prm] + +positional arguments: + test_prm Test parameter file name + +optional arguments: + -h, --help show this help message and exit + --test_prm TEST_PRM Test parameter file name + --srcdirref SRCDIRREF + Existing source file directory or desired directory + for SVN export for the reference + --svnref SVNREF Path to SVN repository for the reference + --rref RREF SVN revision for the reference (default HEAD) + --svnuser SVNUSER SVN user name + --svnpass SVNPASS SVN password + --filedirref FILEDIRREF + directory for decoded referenence waveforms + --encref ENCREF Reference encoder binary + --decref DECREF Reference decoder binary + --enctest ENCTEST Test encoder binary + --dectest DECTEST Test decoder binary + --logfile LOGFILE file for logging, default .log in the current working + directory + -z [{silent,debug,info,warning,error,critical}], --silent [{silent,debug,info,warning,error,critical}] + Either show with minimal output (default, 'silent'), + or reroute log messages with levels higher than LEVEL + to the console + -t [MAX_WORKERS], --max_workers [MAX_WORKERS] + use multithreading with MAX_WORKERS threads (default: + number of CPUs available at the machine) + --create Create reference conditions with existing binaries + -p, --pesq Run PESQ tool on output mono downmix, default is No +``` +`-p, --pesq` also run the PESQ tool on non-BE conditions + +`[test_prm]` self test parameter file (default config/self_test.prm) + +`--*ref` arguments for the reference conditions, similar to eg. `testBitexact.py` + +`--create` similar behaviour as the `-create` option of the old self_test binary, if `IVAS_cod` and `IVAS_dec` exist in the root directory of the working copy, it creates the reference conditions with these binaries. + + +`self-test.py` can be called without any arguments, then it will first check if +the reference conditions already exist (in the `scripts/ref/` directory of the current working copy), if some are missing, it checks if the +reference encoder and decoder binaries exist (`IVAS_[cod|dec]_ref` in the root directory of the working copy). +If they do not exist, the svn branch and revision of the working copy self_test.py +is called from are determined, a clean copy of the code is checked out and built. +The script then checks if the test binaries are already copied to `self_test/`. +If not, they are built from the working copy. +Missing reference conditions and the test conditions are then generated and +the reference and test conditions are compared. + +----- + + +## 2. Script for generating listening test items + +The `generate_test_items.py` python script helps to quickly setup listening tests with multiple (pre-)processing and post-processing options. + +### 2.1. `generate_test_items.py` + +Script for generating (listening) test items. + +``` +usage: generate_test_items.py [-h] -i INFILE [INFILE ...] + +Generate test items + +optional arguments: + -h, --help show this help message and exit + -i INFILE [INFILE ...], --infile INFILE [INFILE ...] + Configuration file(s): FILE1.json FILE2.json ... +``` + +Example how to call it: + +``` + python3 .\generate_test_items.py -i .\examples\my_test_config.json +``` + +Where `my_test_config.json` is a test configuration file in json format with fields explained in next section. + +### 2.2. Test configuration file + +This is the main file to edit in order to change global configuration options, detailed below. + +*NOTE: Paths specified in the JSON file are relative to the working directory where the script is executed from, NOT the location of the JSON file itself. It is possible (and recommended!) to use absolute paths instead to avoid confusion.* + +| key | values (example) | default | description | +|---------------------------|:------------------:|:-------------:|-----------------------------------------------| +| name | "my_test" | Required | name of the test session | +| author | "myself" | | Author of the configuration file (optional) | +| date | 20210205 | | Date of creation (optional) | +| | | | | +| enable_multiprocessing | True/False | True | Enables multiprocessing, recommended to set to True to make things fast. | +| delete_tmp | True/False | False | Enables deletion of temporary directories (containing intermediate processing files, bitstreams and per-item logfiles etc.). | +| | | | | +| input_path | ./my_items/ | Required | Input directory with *.WAV, *.PCM or *.TXT files to process | +| preproc_input | True/False | False | Whether to execute preprocessing on the input files | +| in_format | HOA3 | Required | Input format for the conditions to generate, see spatial_audio_format | +| in_fs | 32000 | 48000 | Input sampling rate for conditions to generate (assumed to be sampling-rate of input PCM files to process) | +| input_select | ["in", "file2"] | Required | Filenames to filter in the input directory, can be a single value, an array or null. Only compares filenames (therefore "in" in this array would match both "in.wav" and "in.pcm") | +| | | | | +| concatenate_input | True/False | False | Whether to (horizontally) concatenate files in the input directory | +| concat_silence_ms | [1000, 1000] | [0, 0] | Specifies the pre- and post-silence duration to pad concatenation with in ms. If a single value is specified it will be used for BOTH pre- and post-padding | +| preproc_loudness | -26 | | Loudness to preprocess input to (dBov / LKFS depending on tool). Only processed if preproc_input is True. | +| | | | | +| output_path | ./out/ | | Output root directory hosting generated items & log | +| out_fs | 48000 | 48000 | Output sampling rate for conditions to generate | +| output_loudness | -26 | | Loudness level for output file (dBov / LKFS depending on tool). | +| | | | | +| renderer_format | 7_1_4 or CICP19 | Required | Format to be rendered (using offline rendering, will be bypassed if = out_format) | +| binaural_rendered | True/False | False | Extra binauralization of the rendered outputs (using offline rendering) | +| include_LFE | True/False | False | Whether to include LFE in binural rendering | +| gain_factor | float value | 1.0 | Gain factor to be applied to LFE channel | +| loudness_tool | "sv56demo" | "bs1770demo" | Tool to use for loudness adjustment. Currently only sv56demo and bs1770demo are supported for appropriate format configurations. Optionally can be a path to the binary. | +| | | | | +| lt_mode | "MUSHRA" | | Automatically generates a NAME.ltg file with generate_lt_file.py in output_path according to the specified mode | +| conditions_to_generate | ["ref", "ivas"] | Required | list of conditions to be generated, for ivas and evs, multiple conditions can be specified with an \_ separator (i.e. "ivas_branch", "ivas_trunk" etc.) | +| | | | | +| ref | | | | +| - out_fc | 32000 | 48000 | cut-off frequency to be applied to the reference condition in post | +| ivas | | | | +| - bitrates | [16400, 128000] | Required | Bitrate(s) used for IVAS encoder | +| - enc_fs | 48000 | 48000 | Sampling rate for input to the encoder (pre-processing) | +| - max_band | wb, swb, fb etc. | FB | Maximum encoded bandwidth | +| - out_format | 7_1_4 or CICP19 | Required | Output format for IVAS, see spatial_audio_format | +| - dec_fs | 48000 | 48000 | Sampling rate for decoder output | +| - dtx | True/False | False | Enable DTX mode | +| - head_tracking | True/False | False | Enable head tracking | +| - ht_file | | "./trajectories/full_circle_in_15s" | Head rotation file | +| - plc | True/False | False | Enables forward error correction `IVAS_dec -FEC X` | +| - plc_rate | 0-10 | 10 | Percentage of erased frames | +| - cod_bin | "../../../IVAS_cod"| "../IVAS_cod" | path to encoder binary | +| - dec_bin | "../../../IVAS_dec"| "../IVAS_dec" | path to decoder binary | +| - cod_opt | ["-ucct", "1"] | | list of additional encoder options | +| - dec_opt | ["-q"] | | list of additional decoder options | +| evs | | | | +| - bitrates | [13200, 164000] | Required | Bitrate used for multi-stream EVS condition per stream/channel | +| - enc_fs | 48000 | 48000 | Sampling rate for input to the encoder (pre-processing) | +| - max_band | wb, swb, fb etc. | FB | Maximum encoded bandwidth | +| - dec_fs | 48000 | 480000 | Sampling rate for decoder output | +| - dtx | True/False | False | Enable DTX mode | +| - cod_bin | ../../../IVAS_cod | "../IVAS_cod" | path to binary | +| - dec_bin | ../../../IVAS_dec | "../IVAS_dec" | path to binary | +| | | | | + +--- +### 2.3. Supported test conditions + +The following conditions are the conditions which can be generated currently by `generate_test_items.py`. + +| Supported conditions | Description | +|:--------------------:|-----------------------------------------------------------| +| ref | Uncoded (reference) | +| lp3k5 | Uncoded low-passed at 3.5 kHz (anchor) | +| lp7k | Uncoded low-passed at 7 kHz (anchor) | +| evs_mono | Coded with multi-stream EVS codec, !!metadata not coded!! | +| ivas | Coded with IVAS codec | + + +Multiple conditions for evs_mono and ivas can be specified by using underscore separators e.g. `"ivas_1" : {...}, "ivas_2" : {...}` +(also see `test_SBA.json` for an example) + +--- + +### 2.4. Supported input/output/rendered audio formats + +| spatial_audio_format | Input/Ouput/Rendered | Description | +|--------------------------------------------------|----------------------|------------------------------------------------| +| MONO | yes/yes/yes | mono signals | +| STEREO | yes/yes/yes | stereo signals | +| ISM or ISMx | yes/no/no | Objects with metadata, description using pre-renderer metadata | +| MASA or MASAx | yes/no/no | mono or stereo signals with spatial metadata !!!metadata must share same basename as waveform file but with .met extension!!! | +| FOA/HOA2/HOA3 or PLANAR(FOA/HOAx) | yes/yes/yes | Ambisonic signals or planar ambisonic signals | +| BINAURAL/BINAURAL_ROOM | no/yes/yes | Binaural signals | +| 5_1/5_1_2/5_1_4/7_1/7_1_4 or CICP[6/12/14/16/19] | yes/yes/yes | Multi-channel signals for predefined loudspeaker layout | +| META | yes/yes/no | Audio scene described by a pre-renderer config | + +--- + +### 2.5. Processing + +The processing chain is as follows: + +1. Preprocessing + - **Condition**: `preproc_input == true` + - Input files converted to `in_format` +2. Processing + - **Condition**: Performed depending on key in `conditions_to_generate` + - Coding/decoding from `in_format` to `out_format` +3. Postprocessing + 1. Rendering to `renderer_format` + - **Condition**: `out_format != renderer_format` + - output files converted from `out_format` to `renderer_format` + 1. Binaural Rendering + - **Condition**: `binaural_rendered == true` and `out_format` is not a BINAURAL type + - output files converted from `out_format` to `BINAURAL` + +--- + +### 2.6. Pre-renderer Metadata definition + +To run, the pre-renderer requires a config file describing the input scene.The expected format of the config file is as follows: + +--- + +- Line 1: Path to a "multitrack" audio file. This should be a single multichannel wav/pcm file that contains all input audio. For example channels 1-4 can be an FOA scene,channel 5 - an object and channels 6-11 - a 5.1 channel bed. If the path is not absolute, it is considered relative to the pre-renderer executable, not the config file. This path has lower priority than the one given on the command line: *The path in the config file is ignored if the --inputAudio argument to the pre-renderer executable is specified.* When running together with the encoder using EVS_cod_prerenderer.sh, the path in the config file is ignored and the one provided as script argument is used instead. + +--- + +- Line 2: Contains number of inputs. An input can either be an Ambisonics scene, anobject or a channel bed.This is NOT the total number of channels in the input audio file.The pre-renderer currently supports simultaneously: *Up to 2 SBA inputs, Up to 2 MC inputs* Up to 16 ISM inputsThese limits can be freely changed with pre-processor macros, if needed. + +--- +- Following lines: +Define each of the inputs. Inputs can be listed in any order - they are NOT required to be listed in the same order as in the audio file. +Input definitions: + - First line of an input definition contains the input type: SBA, MC or ISM.Following lines depend on the input type:SBAIndex of the first channel of this input in the multitrack file (1-indexed)Ambisonics orderMCIndex of the first channel of this input in the multitrack file (1-indexed)CICP index of the speaker layoutISMIndex of this input's audio in the multitrack file (1-indexed)Path to ISM metadata file (if not absolute, relative to executable location)ORISMIndex of this input's audio in the multitrack file (1-indexed)Number N of positions defined, followed by N lines in form: +stay in position for x frames, azimuth, elevation(ISM position metadata defined this way is looped if there are more framesof audio than given positions) + +--- +Example config +The following example defines a scene with 4 inputs: *ISM with trajectory defined in a separate file. Channel 12 in the input file.* Ambisonics, order 1. Channels 1-4 in the input audio file. *CICP6 channel bed. Channels 5-10 in the input audio file.* ISM with 2 defined positions (-90,0) and (90,0). Channel 11 in the input file. The object will start at position (-90,0) and stay there for 5 frames, then move to (90,0) and stay there for 5 frames. This trajectory is looped over the duration of the input audio file. + +``` +./input_audio.wav4ISM12path/to/IVAS_ISM_metadata.csv +3 +SBA +1 +1 +MC +5 +6 +ISM +1 +1 +25,-90,05,90, +``` + +## 3. Script for converting formats and binauralizing + +The script audio3dtool.py can convert between different input and output formats and binauralize the signals. + +### 3.1. Binauralizing with head rotation + +This example binauralizes a HOA3 signal with a head-rotation trajectory. Head rotation is peformed in SHD. It is supported for HOA3 and META input formats. For META input format, the audioscene is first prerendered to HOA3 and then rotated and binauralized. + +``` +python -m pyaudio3dtools.audio3dtools -i hoa3_input.wav -o . -F BINAURAL -T .\trajectories\full_circle_in_15s +``` + +### 3.2. Generating binaural reference signals + +Currently MC input signals are supported. The reference processing can be activated by selecting BINAURAL[_ROOM]_REF as output format. The signals are generated by convolving the channels with the filters from the database that are closes to the current position of the virtual LS. All interpolation methods supported by numpy can be chosen between the measured points along the trajectory. + +``` +python -m pyaudio3dtools.audio3dtools -i cicp6_input.wav -o . -F BINAURAL_REF -T .\trajectories\full_circle_in_15s +``` diff --git a/scripts/batch_comp_audio.py b/scripts/batch_comp_audio.py new file mode 100644 index 0000000000..2fd075928e --- /dev/null +++ b/scripts/batch_comp_audio.py @@ -0,0 +1,262 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import argparse +import concurrent.futures +import os +import re +import shutil +import subprocess +import sys +import threading +from itertools import repeat + +FILES_EQUAL = "File A = File B" +SNR_EXPR = r"SNR\s+=(.+)dB\s*\(File B Gain = (.+)\)" +SEG_SNR_EXPR = r"Seg. SNR\s+=(.+)dB" +DIFF_EXPR = r"Max Diff\s+=\s+(\d+)" + + +def main(args): + + if shutil.which("CompAudio") is None: + print("CompAudio not in PATH - abort.") + sys.exit(-1) + + num_files_diff = 0 + + with OutFileManager(args.out_file) as out_file: + if args.diffs_only: + print("Only printing differing files!", file=out_file) + + fol1, fol2 = os.path.normpath(args.folder1), os.path.normpath(args.folder2) + common_files = get_common_files(fol1, fol2) + diff_files = get_diff_files(fol1, fol2) + num_files_diff = len(diff_files) + + print(f"Comparing {len(common_files)} files...", file=out_file) + + outputs = dict() + if args.num_threads > 1: + with concurrent.futures.ThreadPoolExecutor( + max_workers=args.num_threads + ) as exc: + exc.map( + compare_files, + common_files, + repeat(fol1), + repeat(fol2), + repeat(outputs), + ) + else: + # if only one thread is passed, do everything in the main thread + # to allow for meaningful debugging if needed + for f in common_files: + compare_files(f, fol1, fol2, outputs) + + if args.sort: + out = dict(sorted(outputs.items(), key=lambda item: item[1])) + else: + out = outputs + + for f, output_tuple in out.items(): + diff, snr, gain, seg_snr = output_tuple + + if diff > 0: + num_files_diff = num_files_diff + 1 + + if not args.diffs_only or diff > 0: + if diff == 0.0: + label = "\033[00;32m[OKAY]\033[00;00m" + else: + label = "\033[00;31m[FAIL]\033[00;00m" + + result = f"{label} Max. diff (PCM) for file {f}: {diff}" + + if args.verbose and diff != 0.0: + result += f", SNR = {snr:4.2f} dB (File 2 Gain = {gain:4.3f})" + result += f", Seg. SNR = {seg_snr:4.2f} dB" + + print(result, file=out_file) + + if num_files_diff > 0: + print(f"{num_files_diff} files differ/don't exist", file=out_file) + else: + print(f"All files are bitexact", file=out_file) + + +def compare_files(f, fol1, fol2, outputs_dict): + """ + Compare file f in both folders fol1 and fol2 using CompAudio and + store the parsed difference in outputs_dict. + """ + f1 = os.path.join(fol1, f) + f2 = os.path.join(fol2, f) + cmd = f"CompAudio {f1} {f2}" + try: + output = subprocess.check_output(cmd.split(" ")) + except subprocess.CalledProcessError: + print("CompAudio returned a non-zero exit status. Check your files.") + sys.exit(-1) + + output_tuple = _parse_comp_audio(output) + + with threading.Lock(): + outputs_dict.update({f: output_tuple}) + + +def get_common_files(fol1, fol2): + if not os.path.isdir(fol1): + print(f"Folder {fol1} does not exist") + sys.exit(-1) + if not os.path.isdir(fol2): + print(f"Folder {fol2} does not exist") + sys.exit(-1) + + files1 = set([f for f in os.listdir(fol1) if f.endswith(".wav")]) + files2 = set([f for f in os.listdir(fol2) if f.endswith(".wav")]) + + # get files that are present in both folders + common_files = files1.intersection(files2) + if len(files1) != len(common_files) or len(files2) != len(common_files): + files_only_in_1 = files1.difference(files2) + files_only_in_2 = files2.difference(files1) + print( + "Differing files found in folders - only files present in both will be tested!" + ) + print(f"Files only in {fol1}:") + for f in files_only_in_1: + print(f" |{os.path.basename(f)}") + print(f"Files only in {fol2}") + for f in files_only_in_2: + print(f" |{os.path.basename(f)}") + print() + + return common_files + + +def get_diff_files(fol1, fol2): + if not os.path.isdir(fol1): + print(f"Folder {fol1} does not exist") + sys.exit(-1) + if not os.path.isdir(fol2): + print(f"Folder {fol2} does not exist") + sys.exit(-1) + + files1 = set([f for f in os.listdir(fol1) if f.endswith(".wav")]) + files2 = set([f for f in os.listdir(fol2) if f.endswith(".wav")]) + + # get files that are present in both folders + diff_files = files1.symmetric_difference(files2) + + return diff_files + + +def _parse_comp_audio(output): + output = output.decode("utf-8") + + if FILES_EQUAL in output: + diff = 0 + snr = float("inf") + seg_snr = float("inf") + gain = 1 + else: + try: + snr, gain = re.findall(SNR_EXPR, output, re.MULTILINE)[0] + snr = float(snr) + gain = float(gain) + seg_snr = float(re.findall(SEG_SNR_EXPR, output)[0]) + diff = int(re.findall(DIFF_EXPR, output)[0]) + except: + print("Warning: unexpected values encountered in CompAudio output!") + snr = float("nan") + seg_snr = float("nan") + diff = float("nan") + gain = float("nan") + + return diff, snr, gain, seg_snr + + +class OutFileManager: + def __init__(self, out_file): + self.out_file = out_file + + def __enter__(self): + if self.out_file is not None: + self.out_file = open(self.out_file, "w") + return self.out_file + + def __exit__(self, exc_type, exc_value, exc_traceback): + if self.out_file is not None: + self.out_file.close() + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser( + description="Compare .wav files in two folders using CompAudio" + ) + parser.add_argument("folder1", type=str, help="Input folder 1") + parser.add_argument("folder2", type=str, help="Input folder 2") + parser.add_argument( + "-d", + "--diffs_only", + action="store_true", + default=False, + help="Only output files where max diff is > 0", + ) + parser.add_argument( + "-s", + "--sort", + action="store_true", + default=False, + help="Print files in ascending size of differences", + ) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + help="Show additional information from CompAudio (SNR, Gain, Seg. SNR)", + ) + parser.add_argument( + "-o", + "--out_file", + type=str, + default=None, + help="If given, write output diffs to this file", + ) + parser.add_argument( + "-t", "--num_threads", type=int, default=1, help="Number of threads to use" + ) + args = parser.parse_args() + + main(args) diff --git a/scripts/check-format.sh b/scripts/check-format.sh new file mode 100644 index 0000000000..c88442c959 --- /dev/null +++ b/scripts/check-format.sh @@ -0,0 +1,209 @@ +#!/bin/bash + +# +# (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, +# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +# contributors to this repository. All Rights Reserved. +# +# This software is protected by copyright law and by international treaties. +# The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, +# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +# contributors to this repository retain full ownership rights in their respective contributions in +# the software. This notice grants no license of any kind, including but not limited to patent +# license, nor is any license granted by implication, estoppel or otherwise. +# +# Contributors are required to enter into the IVAS codec Public Collaboration agreement before making +# contributions. +# +# This software is provided "AS IS", without any express or implied warranties. The software is in the +# development stage. It is intended exclusively for experts who have experience with such software and +# solely for the purpose of inspection. All implied warranties of non-infringement, merchantability +# and fitness for a particular purpose are hereby disclaimed and excluded. +# +# Any dispute, controversy or claim arising under or in relation to providing this software shall be +# submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in +# accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and +# the United Nations Convention on Contracts on the International Sales of Goods. +# + +# Simple script to format or check formatting of your working copy before you commit to the SVN +# for questions: dla@iis.fhg.de + +if [ ! -d "lib_com" ]; then + echo "not in root directory! - please run in IVAS root" + exit 1 +fi + +CLANG_FORMAT=clang-format +CLANG_FORMAT_REQUIRED_VERSION="13.0" + +# list (with space between entries) of substrings that are excluded from the file list, e.g. very large files +EXCLUDE_FILES="ivas_rom_binaural_crend_head.c" + +NUMPROCS=1 + +function usage() { + cat <&2 + make -C prerenderer DEBUG=0 STRIP=1 clean all 1>&2 +fi + +if [ $evaluateFunctions != 0 ]; then + # delete text files + rm -f functions_obj.txt functions_exe.txt 1>&2 + + # find all functions in object files + nm ../${OBJDIR}/*.o | grep "^[0-9a-f]* T " | sed 's/^[0-9a-f]* T //' | sort -u > functions_obj.txt + # find all symbols in final executables + nm ${EXECUTABLES} | grep "^[0-9a-f]* T " | sed 's/^[0-9a-f]* T //' | sort -u > functions_exe.txt + + # diff output + echo "Unused functions:" + echo "=================" + comm -13 functions_exe.txt functions_obj.txt + echo "" +fi + +if [ $evaluateTables -ne 0 ]; then + # delete text files + rm -f tables_obj.txt tables_exe.txt 1>&2 + + # find all functions in object files + nm ../${OBJDIR}/*.o | grep "^[0-9a-f]* [RD] " | sed 's/^[0-9a-f]* [RD] //' | sort -u > tables_obj.txt + # find all symbols in final executables + nm ${EXECUTABLES} | grep "^[0-9a-f]* [RD] " | sed 's/^[0-9a-f]* [RD] //' | sort -u > tables_exe.txt + + # diff output + echo "Unused tables:" + echo "==============" + comm -13 tables_exe.txt tables_obj.txt + echo "" +fi diff --git a/scripts/generate_test_items.py b/scripts/generate_test_items.py new file mode 100644 index 0000000000..0f42130037 --- /dev/null +++ b/scripts/generate_test_items.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import argparse +import logging +import multiprocessing as mp +import os +from typing import Iterable + +from generate_lt_file import generate_lt_file +from pyaudio3dtools import audiofile +from pyprocessing import processing, processing_configs, utils + +# Global logging options +logger = logging.getLogger(__name__) +LOGGER_MAIN_LOG_FILENAME = "log.txt" +LOGGER_PROC_ITEM_SUFFIX = "_log.txt" +LOGGER_FORMAT = "%(asctime)s | %(name)-12s | %(levelname)-8s | %(message)s" +LOGGER_DATEFMT = "%m-%d %H:%M" + + +def _run_condition_and_item( + out_folder: str, tmp_folder: str, item: str, proc_chain: Iterable +) -> None: + item_name, _ = os.path.splitext(os.path.basename(item)) + out_item = os.path.join(out_folder, item_name + ".wav") + + # Create a logfile for the item + fh = logging.FileHandler( + os.path.join(tmp_folder, item_name + LOGGER_PROC_ITEM_SUFFIX), mode="w" + ) + fh.setLevel(logging.DEBUG) + formatter = logging.Formatter(LOGGER_FORMAT, datefmt=LOGGER_DATEFMT) + fh.setFormatter(formatter) + logger.addHandler(fh) + + processing.process_chain(proc_chain, item, out_item, tmp_folder) + + # Log after completion + logger.removeHandler(fh) + output_nickname = "Done " + os.path.join( + os.path.basename(out_folder), item_name + ".wav" + ) + logger.info(f"{output_nickname:-^100.100}") + + +def main(test_cfg): + # Create pool if multiprocessing is enabled + if test_cfg.enable_multiprocessing: + pool = mp.Pool(mp.cpu_count()) + results = [] + + # pre-process items if required + if test_cfg.preproc_input: + condition = test_cfg.list_of_conditions[0] + out_folder = test_cfg.output_folders[0] + tmp_folder = test_cfg.tmp_folders[0] + + proc_id = condition["id"] + logger.info(" Condition: " + proc_id) + + proc_chain = condition["proc_chain"] + + for item in test_cfg.items_list: + logger.info(" Item: " + item) + if test_cfg.enable_multiprocessing: + results.append( + pool.apply_async( + _run_condition_and_item, + args=(out_folder, tmp_folder, item, proc_chain), + ) + ) + else: + _run_condition_and_item(out_folder, tmp_folder, item, proc_chain) + + if test_cfg.enable_multiprocessing: + pool.close() + pool.join() + for r in results: + r.get() + pool = mp.Pool(mp.cpu_count()) + results = [] + + test_cfg.items_list = utils.list_audio(out_folder, absolute=True) + + test_cfg.list_of_conditions = test_cfg.list_of_conditions[1:] + test_cfg.output_folders = test_cfg.output_folders[1:] + test_cfg.tmp_folders = test_cfg.tmp_folders[1:] + + # concatenate items if required + if test_cfg.concatenate_input: + if len(test_cfg.items_list) > 1: + concat_filename = os.path.join( + test_cfg.output_path, + os.path.basename(test_cfg.input_path) + "_concat.wav", + ) + audiofile.concatenatefiles( + test_cfg.items_list, + concat_filename, + test_cfg.concat_silence_pre, + test_cfg.concat_silence_post, + test_cfg.in_fs, + ) + # simply pad if single item + else: + concat_filename = os.path.join( + test_cfg.output_path, + os.path.splitext(os.path.basename(test_cfg.input_path))[0] + + "_padded.wav", + ) + audiofile.concatenatefiles( + test_cfg.items_list, + concat_filename, + test_cfg.concat_silence_pre, + test_cfg.concat_silence_post, + test_cfg.in_fs, + ) + test_cfg.items_list = [concat_filename] + + for condition, out_folder, tmp_folder in zip( + test_cfg.list_of_conditions, test_cfg.output_folders, test_cfg.tmp_folders + ): + proc_id = condition["id"] + logger.info(f" Condition: {proc_id} in {out_folder}") + + proc_chain = condition["proc_chain"] + + for item in test_cfg.items_list: + logger.info(f" Item: {item}") + if test_cfg.enable_multiprocessing: + results.append( + pool.apply_async( + _run_condition_and_item, + args=(out_folder, tmp_folder, item, proc_chain), + ) + ) + else: + _run_condition_and_item(out_folder, tmp_folder, item, proc_chain) + + if test_cfg.enable_multiprocessing: + pool.close() + pool.join() + for r in results: + r.get() + + # generate LT file if specified + if hasattr(test_cfg, "lt_mode"): + generate_lt_file( + test_cfg, + test_cfg.lt_mode, + os.path.join(test_cfg.output_path, test_cfg.name + ".ltg"), + ) + + # copy over JSON to main output directory + output_json = os.path.join(test_cfg.output_path, test_cfg.name + ".json") + with open(output_json, "w") as fp: + fp.write(test_cfg.json_out) + + # remove concatenated file + if ( + test_cfg.delete_tmp + and test_cfg.concatenate_input + and os.path.exists(concat_filename) + ): + os.remove(concat_filename) + + +if __name__ == "__main__": + # Parse command line + parser = argparse.ArgumentParser( + description="Generate test items. Refer to README.md for detailed usage instructions." + ) + parser.add_argument( + "-i", + "--infile", + required=True, + nargs="+", + help="Configuration file(s): FILE1.json FILE2.json ...", + ) + args = parser.parse_args() + + # Get all test configuration files to process + infile = args.infile + tests_list = [] + for infile in args.infile: + if os.path.isdir(infile): + tests_list.extend( + [ + os.path.join(infile, f) + for f in os.listdir(infile) + if f.endswith((".json")) + ] + ) + else: + tests_list.append(infile) + + # Read configuration file + for test in tests_list: + test_cfg = processing_configs.test_config(test) + + # context manager to create output folders and clean up temporary folders + delete_folders = test_cfg.tmp_folders if test_cfg.delete_tmp else [] + with utils.DirManager( + test_cfg.output_folders + test_cfg.tmp_folders, delete_folders + ): + + # Set up logging handlers + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + console_handler.setFormatter(logging.Formatter("%(message)s")) + + file_handler = logging.FileHandler( + os.path.join(test_cfg.output_path, LOGGER_MAIN_LOG_FILENAME), mode="w" + ) + file_handler.setLevel(logging.INFO) + file_handler.setFormatter( + logging.Formatter(LOGGER_FORMAT, datefmt=LOGGER_DATEFMT) + ) + + # Configure loggers + logging.basicConfig( + format=LOGGER_FORMAT, + datefmt=LOGGER_DATEFMT, + level=logging.INFO, + handlers=[console_handler, file_handler], + ) + + # Log some info + logger.info(f"===Generate test: {test}===") + logger.info(f"Test name: {test_cfg.name}") + logger.info(f"Input path: {test_cfg.input_path}") + logger.info(f"Output path: {test_cfg.output_path}") + + main(test_cfg) diff --git a/scripts/ivas_pytests/build_all.bat b/scripts/ivas_pytests/build_all.bat new file mode 100644 index 0000000000..102a370b7f --- /dev/null +++ b/scripts/ivas_pytests/build_all.bat @@ -0,0 +1,7 @@ +cd .\scripts\ivas_pytests\tests\unit_tests\crend +call build.bat || exit /b 1 +cd ..\..\..\..\..\ + +cd .\Workspace_msvc +MSBuild.exe Workspace_msvc.sln /property:Configuration=Release /p:Platform="Win32" || exit /b 1 +cd ..\ diff --git a/scripts/ivas_pytests/build_all.sh b/scripts/ivas_pytests/build_all.sh new file mode 100644 index 0000000000..d0ee9cf858 --- /dev/null +++ b/scripts/ivas_pytests/build_all.sh @@ -0,0 +1,4 @@ +#! /bin/bash + +make -f Makefile all || exit +make -f Makefile unittests || exit diff --git a/scripts/ivas_pytests/clean_all.bat b/scripts/ivas_pytests/clean_all.bat new file mode 100644 index 0000000000..1f5c18f21d --- /dev/null +++ b/scripts/ivas_pytests/clean_all.bat @@ -0,0 +1,7 @@ +cd .\Workspace_msvc +MSBuild.exe Workspace_msvc.sln /t:Clean /p:configuration=Release || exit /b 1 +cd ..\ + +cd .\scripts\ivas_pytests\tests\unit_tests\crend +call clean.bat +cd ..\..\..\..\..\ diff --git a/scripts/ivas_pytests/clean_all.sh b/scripts/ivas_pytests/clean_all.sh new file mode 100644 index 0000000000..1af6eb498f --- /dev/null +++ b/scripts/ivas_pytests/clean_all.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +make -f Makefile clean diff --git a/scripts/ivas_pytests/conftest.py b/scripts/ivas_pytests/conftest.py new file mode 100644 index 0000000000..fc0eff1087 --- /dev/null +++ b/scripts/ivas_pytests/conftest.py @@ -0,0 +1,423 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +from pathlib import Path +import platform +from subprocess import run +import textwrap +from typing import Optional +import os + +import pytest + +logger = logging.getLogger(__name__) +USE_LOGGER_FOR_DBG = False # current tests do not make use of the logger feature + + +def log_dbg_msg(message): + """ + Helper function to log debug messages. + """ + if USE_LOGGER_FOR_DBG: + logger.debug(message) + else: + print(message) + + +@pytest.fixture(scope="session", autouse=True) +def rootdir(request): + return str(request.config.rootdir) + + +def pytest_addoption(parser): + parser.addoption("--update_ref", action="store", default="0") + parser.addoption("--p4_CL", action="store") + parser.addoption("--p4cmd_active", action="store", default="0") + + parser.addoption( + "--dut_encoder_path", + action="store", + help="If specified, use given binary as DUT encoder." + ) + + parser.addoption( + "--dut_decoder_path", + action="store", + help="If specified, use given binary as DUT decoder." + ) + + parser.addoption( + "--ref_encoder_path", + action="store", + help="If specified, use given binary as REF encoder." + ) + + parser.addoption( + "--ref_decoder_path", + action="store", + help="If specified, use given binary as REF decoder." + ) + + # TODO: rename to test_vector_path + parser.addoption( + "--data_system_tests_path", + action="store", + help="If specified, use given directory as base data directory for system tests." + ) + + parser.addoption( + "--reference_path", + action="store", + help="If specified, use given directory as base directory for reference files." + ) + + parser.addoption( + "--dut_base_path", + action="store", + help="If specified, use given directory as base data directory for dut files." + ) + + +@pytest.fixture(scope="session", autouse=True) +def update_ref(request): + return int(request.config.getoption("--update_ref")) + + +@pytest.fixture(scope="session", autouse=True) +def p4_CL(request): + return request.config.option.p4_CL + + +@pytest.fixture(scope="session", autouse=True) +def p4cmd_active(request): + return int(request.config.getoption("--p4cmd_active")) + + +@pytest.fixture(scope="session") +def dut_encoder_path(request) -> Path: + if request.config.option.dut_encoder_path: + return request.config.option.dut_encoder_path + + here = Path(__file__).parent.resolve() + system = platform.system() + + if system == "Windows": + path = here.joinpath("../../IVAS_cod.exe") + elif system in ["Darwin", "Linux"]: + path = here.joinpath("../../IVAS_cod") + else: + raise ValueError(f'Wrong system "{system}"!') + + path = str(path.resolve()) + + assert os.path.isfile(path) + + return path + + +class EncoderFrontend: + def __init__(self, path, enc_type) -> None: + self._path = path + self._type = enc_type + self.returncode = None + self.stdout = None + self.stderr = None + + def run( + self, + bitrate: int, + input_sampling_rate: int, + input_path: Path, + output_bitstream_path: Path, + sba_order: Optional[str] = None, + dtx_mode: Optional[bool] = False, + max_band: Optional[str] = None, + agc_op: Optional[int] = None, + bypass_mode: Optional[int] = None, + quiet_mode: Optional[bool] = True, + ) -> None: + command = [self._path] + + # add optional parameters + if sba_order is not None: + command.extend(["-sba", sba_order]) + + if dtx_mode: + command.extend(["-dtx"]) + + if max_band is not None: + command.extend(["-max_band", max_band]) + + if agc_op is not None: + command.extend(["-agc", str(agc_op)]) + + if bypass_mode is not None: + command.extend(["-bypass", str(bypass_mode)]) + + if quiet_mode: + command.extend(["-q"]) + + # add mandatory parameters + command += [ + str(bitrate), + str(input_sampling_rate), + str(input_path), + str(output_bitstream_path), + ] + + cmd_str = textwrap.indent(" ".join(command), prefix="\t") + log_dbg_msg(f"{self._type} encoder command:\n{cmd_str}") + + result = run(command, capture_output=True, check=False) + self.returncode = result.returncode + self.stderr = result.stderr.decode("ascii") + self.stdout = result.stdout.decode("ascii") + if self.stdout: + stdout_str = textwrap.indent(self.stdout, prefix="\t") + log_dbg_msg(f"{self._type} encoder stdout:\n{stdout_str}") + if self.stderr: + stderr_str = textwrap.indent(self.stderr, prefix="\t") + log_dbg_msg(f"{self._type} encoder stderr:\n{stderr_str}") + assert self.returncode == 0, self._type + " encoder terminated with a non-0 return code" + + def _check_run(self): + if self.returncode: + assert self.returncode == 0, self._type + " encoder terminated with a non-0 return code" + else: + logger.warning("%s encoder was set-up, but not run", self._type) + # next assert is not OK since stderr contains messages even when encoding was successful + # assert not self.stderr, self._type + " encoder stderr is not empty" + + +@pytest.fixture(scope="function") +def dut_encoder_frontend(dut_encoder_path) -> EncoderFrontend: + encoder = EncoderFrontend(dut_encoder_path, "DUT") + yield encoder + + # Fixture teardown +# encoder._check_run() + + +@pytest.fixture(scope="session") +def ref_encoder_path(request) -> Path: + if request.config.option.ref_encoder_path: + return request.config.option.ref_encoder_path + + update_ref = int(request.config.getoption("--update_ref")) + if not update_ref: + return None + + # assume default encoder when update_ref is selected, but no ref_encoder_path is specified + here = Path(__file__).parent.resolve() + system = platform.system() + + if system == "Windows": + path = here.joinpath("../../IVAS_cod.exe") + elif system in ["Darwin", "Linux"]: + path = here.joinpath("../../IVAS_cod") + else: + raise ValueError(f'Wrong system "{system}"!') + + path = str(path.resolve()) + + assert os.path.isfile(path) + + return path + + +@pytest.fixture(scope="session") +def dut_decoder_path(request) -> Path: + if request.config.option.dut_decoder_path: + return request.config.option.dut_decoder_path + + here = Path(__file__).parent.resolve() + system = platform.system() + + if system == "Windows": + path = here.joinpath("../../IVAS_dec.exe") + elif system in ["Darwin", "Linux"]: + path = here.joinpath("../../IVAS_dec") + else: + raise ValueError(f'Wrong system "{system}"!') + + path = str(path.resolve()) + + assert os.path.isfile(path) + + return path + + +class DecoderFrontend: + def __init__(self, path, dec_type) -> None: + self._path = path + self._type = dec_type + self.returncode = None + self.stdout = None + self.stderr = None + + def run( + self, + output_config: str, + output_sampling_rate: int, + input_bitstream_path: Path, + output_path: Path, + quiet_mode: Optional[bool] = True, + plc_file: Optional[Path] = None, + ) -> None: + command = [self._path] + + # add optional parameters + if quiet_mode: + command.extend(["-q"]) + + if plc_file is not None: + command.extend(["-fec", str(plc_file)]) + + # add mandatory parameters + command += [ + output_config, + str(output_sampling_rate), + str(input_bitstream_path), + str(output_path), + ] + + cmd_str = textwrap.indent(" ".join(command), prefix="\t") + log_dbg_msg(f"{self._type} decoder command:\n{cmd_str}") + + result = run(command, capture_output=True, check=False) + self.returncode = result.returncode + self.stderr = result.stderr.decode("ascii") + self.stdout = result.stdout.decode("ascii") + if self.stdout: + stdout_str = textwrap.indent(self.stdout, prefix="\t") + log_dbg_msg(f"{self._type} decoder stdout:\n{stdout_str}") + if self.stderr: + stderr_str = textwrap.indent(self.stderr, prefix="\t") + log_dbg_msg(f"{self._type} decoder stderr:\n{stderr_str}") + assert self.returncode == 0, self._type + " decoder terminated with a non-0 return code" + + def _check_run(self): + if self.returncode: + assert self.returncode == 0, self._type + " decoder terminated with a non-0 return code" + else: + logger.warning("%s decoder was set-up, but not run", self._type) + # next assert is not OK since stderr contains messages even when decoding was successful + # assert not self.stderr, self._type + " decoder stderr is not empty" + + +@pytest.fixture(scope="function") +def dut_decoder_frontend(dut_decoder_path) -> DecoderFrontend: + decoder = DecoderFrontend(dut_decoder_path, "DUT") + yield decoder + + # Fixture teardown +# decoder._check_run() + + +@pytest.fixture(scope="session") +def ref_decoder_path(request) -> Path: + if request.config.option.ref_decoder_path: + return request.config.option.ref_decoder_path + + update_ref = int(request.config.getoption("--update_ref")) + if not update_ref: + return None + + # assume default decoder when update_ref is selected, but no ref_decoder_path is specified + here = Path(__file__).parent.resolve() + system = platform.system() + + if system == "Windows": + path = here.joinpath("../../IVAS_dec.exe") + elif system in ["Darwin", "Linux"]: + path = here.joinpath("../../IVAS_dec") + else: + raise ValueError(f'Wrong system "{system}"!') + + path = str(path.resolve()) + + assert os.path.isfile(path) + + return path + + +@pytest.fixture(scope="session") +def data_system_tests_path(request) -> Path: + if request.config.option.data_system_tests_path: + return request.config.option.data_system_tests_path + + here = Path(__file__).parent.resolve() + + path = here.joinpath("testv") + + path = str(path.resolve()) + + return path + + +@pytest.fixture(scope="session") +def reference_path(request) -> Path: + if request.config.option.reference_path: + return request.config.option.reference_path + + here = Path(__file__).parent.resolve() + + path = here.joinpath("ref") + + path = str(path.resolve()) + + return path + + +@pytest.fixture(scope="session") +def dut_base_path(request) -> Path: + if request.config.option.dut_base_path: + return request.config.option.dut_base_path + + here = Path(__file__).parent.resolve() + + path = here.joinpath("dut") + + path = str(path.resolve()) + + return path + + +def pytest_configure(config): + config.addinivalue_line( + "markers", "serial: mark test to run only in serial" + ) + config.addinivalue_line( + "markers", "create_ref: mark test capable of producing references" + ) + config.addinivalue_line( + "markers", "create_ref_serial: reference creation test that should not run in parallel" + ) diff --git a/scripts/ivas_pytests/disable_lib_com_optim.py b/scripts/ivas_pytests/disable_lib_com_optim.py new file mode 100644 index 0000000000..6704b6d81a --- /dev/null +++ b/scripts/ivas_pytests/disable_lib_com_optim.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +""" +Disable optimization in vcxproj file for lib_com. +""" + +import fileinput +import sys +from pathlib import Path + +HERE = Path(__file__).parent.resolve() +LIB_COM_PROJECT_FILE = str(HERE.joinpath("../../Workspace_msvc/lib_com.vcxproj")) + + +def replace_config(file, search_text, replace_text): + for line in fileinput.input(file, inplace=1): + if search_text in line: + line = line.replace(search_text, replace_text) + sys.stdout.write(line) + + +TXT_OLD = "MaxSpeed" +TXT_NEW = "Disabled" +replace_config(LIB_COM_PROJECT_FILE, TXT_OLD, TXT_NEW) diff --git a/scripts/ivas_pytests/endofline.py b/scripts/ivas_pytests/endofline.py new file mode 100644 index 0000000000..c012e1e7ce --- /dev/null +++ b/scripts/ivas_pytests/endofline.py @@ -0,0 +1,26 @@ +import glob + +def add_newline(filename): + fixed = 0 + with open(filename, "r") as f: + lines = f.readlines() + f.close() + if lines: + last_char = lines[-1][-1] + if last_char != '\n': + fixed = 1 + print( filename+ ": Missing newline at end of file" ) + # append newline + f = open(filename, "a") + f.write("\n") + f.close() + return fixed + +#for name in glob.glob(join("./**/*.h", "./**/*.c"), recursive=True): +count = 0 +count_fixed = 0 +for name in glob.glob("./**/*.[h|c]", recursive=True): + count+=1 + count_fixed += add_newline(name) +print(count, "processed files") +print(count_fixed, "fixed files") \ No newline at end of file diff --git a/scripts/ivas_pytests/self_test_b.py b/scripts/ivas_pytests/self_test_b.py new file mode 100644 index 0000000000..60d4126d04 --- /dev/null +++ b/scripts/ivas_pytests/self_test_b.py @@ -0,0 +1,378 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +""" +Script to run the pytest tests. + +Step 1: Set the stage for the pytest run. + +Step 2: Run pytest. +""" + +import os +import sys +import argparse +import subprocess +import shutil +import platform +from pathlib import Path + +TRUNK_SVN_PATH = "https://svnext02.iis.fraunhofer.de/ivas_dev/trunk" + +SVNUSER = os.getenv("SVNUSER") +SVNPASSWD = os.getenv("SVNPASSWD") + +BIN_EXT = ".exe" if platform.system() == "Windows" else "" +HERE = Path(__file__).parent.resolve() +DEFAULT_ENCODER_DUT = str(HERE.joinpath(f"../../IVAS_cod{BIN_EXT}").resolve()) +DEFAULT_DECODER_DUT = str(HERE.joinpath(f"../../IVAS_dec{BIN_EXT}").resolve()) +DEFAULT_ENCODER_REF = str(HERE.joinpath(f"../../IVAS_cod_ref{BIN_EXT}").resolve()) +DEFAULT_DECODER_REF = str(HERE.joinpath(f"../../IVAS_dec_ref{BIN_EXT}").resolve()) +CREND_UNITTEST_REF = str(HERE.joinpath(f"tests/unit_tests/crend/IVAS_crend_unit_test_ref{BIN_EXT}").resolve()) +DATA_DIR = str(HERE.joinpath("../../../data").resolve()) +TEST_VECTOR_DIR = str(HERE.joinpath("testv").resolve()) +REFERENCE_DIR = str(HERE.joinpath("ref").resolve()) +DUT_BASE_DIR = str(HERE.joinpath("dut").resolve()) + + +def get_svn_trunk_revision(): + """ + Get the SVN HEAD revision number of the trunk folder. + """ + command = ["svn"] + if SVNUSER: + command.extend(["--username", SVNUSER]) + if SVNPASSWD: + command.extend(["--password", SVNPASSWD]) + command.extend(["info", TRUNK_SVN_PATH]) + result = subprocess.run(command, capture_output=True, check=True) + for line in result.stdout.decode("ascii").splitlines(): + if line.startswith("Revision:"): + return int(line.split()[1]) + assert 0, "unable to determine SVN trunk revision" + + +def get_svn_local_revision(): + """ + Get the SVN revision number of the local (trunk) folder. + """ + command = ["svn", "info", "."] + result = subprocess.run(command, capture_output=True, check=True) + for line in result.stdout.decode("ascii").splitlines(): + if line.startswith("Revision:"): + return int(line.split()[1]) + return 0 # unable to determine local SVN revision + + +def svn_export_trunk(revision, out_folder): + """ + Export the SVN trunk folder in a specific revision. + """ + command = ["svn"] + if SVNUSER: + command.extend(["--username", SVNUSER]) + if SVNPASSWD: + command.extend(["--password", SVNPASSWD]) + command.extend(["export", "-q", "-r", str(revision), TRUNK_SVN_PATH, out_folder]) + subprocess.run(command, check=True) + + +def build_enc_and_dec(src_dir): + """ + Build the encoder and decoder binaries. + """ + if platform.system() == "Windows": + olddir = os.getcwd() + os.chdir(src_dir) + os.chdir("Workspace_msvc") + command = ["MSBuild.exe", "Workspace_msvc.sln", "/t:Clean", "/p:configuration=Release", "/p:Platform=Win32"] + subprocess.run(command, check=True) + command = ["MSBuild.exe", "Workspace_msvc.sln", "/property:configuration=Release", "/p:Platform=Win32"] + subprocess.run(command, check=True) + os.chdir(olddir) + else: + command = ["make", "-C", src_dir, "clean"] + subprocess.run(command, check=True) + command = ["make", "-C", src_dir] + subprocess.run(command, check=True) + + +def build_crend_unittest(src_dir): + """ + Build the crend unit test binary. + """ + crend_dir = f"{src_dir}/scripts/ivas_pytests/tests/unit_tests/crend" + if platform.system() == "Windows": + olddir = os.getcwd() + os.chdir(crend_dir) + # command = ["MSBuild.exe", "ivas_crend_unit_test.sln", "/t:Clean", "/p:configuration=Release", "/p:Platform=Win32"] + # subprocess.run(command, check=True) + command = ["MSBuild.exe", "ivas_crend_unit_test.sln", "/property:configuration=Release", "/p:Platform=Win32"] + subprocess.run(command, check=True) + os.chdir(olddir) + else: + # command = ["make", "-C", src_dir, "clean"] + # subprocess.run(command, check=True) + command = ["make", "-C", src_dir, "IVAS_crend_unit_test"] + subprocess.run(command, check=True) + + +def build_ref_binaries(ref_decoder_path, ref_encoder_path, ref_version): + """ + Build the REF binaries. + """ + print("Building the REF binaries") + if ref_version is None: + ref_version = get_svn_local_revision() + if ref_version == 0: + ref_version = get_svn_trunk_revision() + + if ref_version == 0: + # special REF binaries generation: copy DUT binaries + print("- copy DUT binaries -> REF binaries") + dut_src_dir = str(HERE.joinpath("../..").resolve()) + shutil.copy(f"{dut_src_dir}/IVAS_cod{BIN_EXT}", ref_encoder_path) + shutil.copy(f"{dut_src_dir}/IVAS_dec{BIN_EXT}", ref_decoder_path) + shutil.copy(f"{dut_src_dir}/scripts/ivas_pytests/tests/unit_tests/crend/IVAS_crend_unit_test{BIN_EXT}", CREND_UNITTEST_REF) + return + + # is a local directory with the reference version available? + ref_src_dir = str(HERE.joinpath(f"../../../ref_src/{ref_version}").resolve()) + if not os.path.exists(ref_src_dir): + print(f"ref src dir {ref_src_dir} does not exist") + svn_export_trunk(ref_version, ref_src_dir) + build_enc_and_dec(ref_src_dir) + print(f"copy: {ref_src_dir}/IVAS_cod{BIN_EXT} -> {ref_encoder_path}") + shutil.copy(f"{ref_src_dir}/IVAS_cod{BIN_EXT}", ref_encoder_path) + print(f"copy: {ref_src_dir}/IVAS_dec{BIN_EXT} -> {ref_decoder_path}") + shutil.copy(f"{ref_src_dir}/IVAS_dec{BIN_EXT}", ref_decoder_path) + build_crend_unittest(ref_src_dir) + print(f"copy: {ref_src_dir}/scripts/ivas_pytests/tests/unit_tests/crend/IVAS_crend_unit_test{BIN_EXT} -> {CREND_UNITTEST_REF}") + shutil.copy(f"{ref_src_dir}/scripts/ivas_pytests/tests/unit_tests/crend/IVAS_crend_unit_test{BIN_EXT}", CREND_UNITTEST_REF) + + +def build_dut_binaries(): + """ + Build the DUT binaries. + """ + print("Building the DUT binaries") + dut_src_dir = str(HERE.joinpath("../..").resolve()) + build_enc_and_dec(dut_src_dir) + build_crend_unittest(dut_src_dir) + + +def setup_test_vector_directory(): + """ + Setup the test vector directory. + + Copy test vectors from data directory. + Current assumption: data directory is available and parallel to trunk. + Later, after some cleanup in the data folder, we can consider to do + "svn export" of the test vectors folder. + """ + os.makedirs(TEST_VECTOR_DIR) + os.makedirs(f"{TEST_VECTOR_DIR}/spar_foa_bs/enc") + os.makedirs(f"{TEST_VECTOR_DIR}/spar_foa_bs/dec") + os.makedirs(f"{TEST_VECTOR_DIR}/crend/tests/crend") + os.makedirs(f"{TEST_VECTOR_DIR}/crend/tests/reverb") + os.makedirs(f"{TEST_VECTOR_DIR}/crend/tests/proximity") + os.makedirs(f"{TEST_VECTOR_DIR}/crend/tests/ingest") + os.makedirs(f"{TEST_VECTOR_DIR}/crend/tests/otr") + systest_subfolder = ["spar_foa_bs/enc/in", "spar_foa_bs/dec/plc_file"] + for folder in systest_subfolder: + shutil.copytree(f"{DATA_DIR}/ivas_pytests/system_tests/{folder}", f"{TEST_VECTOR_DIR}/{folder}") + unittest_subfolder = [ + "crend/tests/crend/in_wav", + "crend/tests/crend/in_new_wav", + "crend/tests/crend/in_csv_wav", + "crend/tests/reverb/in_wav", + "crend/tests/proximity/in_wav", + "crend/tests/proximity/bitstream", + "crend/tests/ingest/in_wav", + "crend/tests/custom/in_wav", + "crend/tests/hr/in_wav", + "crend/tests/SOFA", + "crend/tests/default-SOFA", + "crend/tests/custom_SOFA", + "crend/tests/hrtf_ref", + "crend/tests/csv", + "crend/tests/render_config", + ] + for folder in unittest_subfolder: + shutil.copytree(f"{DATA_DIR}/ivas_pytests/unit_tests/{folder}", f"{TEST_VECTOR_DIR}/{folder}") + + +def main(argv): + # check for python >= 3.7 + if sys.version_info[0] < 3 or sys.version_info[1] < 7: + sys.exit("This script is written for Python >= 3.7. Found: " + platform.python_version()) + + parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) + parser.add_argument( + "--rref", + action="store", + type=int, + default=None, + help="SVN revision for the reference (default: HEAD)", + ) + parser.add_argument( + "--create_only", + action="store_true", + default=False, + help="Create references when needed, but don't run the tests" + ) + parser.add_argument( + "--numprocesses", + action="store", + default="auto", + help="Number of processes to use in pytest (default: auto)", + ) + parser.add_argument("--encref", help=f"REF encoder binary (default:{DEFAULT_ENCODER_REF})") + parser.add_argument("--decref", help=f"REF decoder binary (default:{DEFAULT_DECODER_REF})") + parser.add_argument("--encdut", help=f"DUT encoder binary (default:{DEFAULT_ENCODER_DUT})") + parser.add_argument("--decdut", help=f"DUT decoder binary (default:{DEFAULT_DECODER_DUT})") + + args = parser.parse_args(argv[1:]) + + # check for DUT binaries + if args.encdut: + encdut_path = os.path.realpath(args.encdut) + if not os.path.exists(encdut_path): + sys.exit(f"DUT encoder binary {encdut_path} does not exist.") + else: + encdut_path = DEFAULT_ENCODER_DUT + if args.decdut: + decdut_path = os.path.realpath(args.decdut) + if not os.path.exists(decdut_path): + sys.exit(f"DUT encoder binary {decdut_path} does not exist.") + else: + decdut_path = DEFAULT_DECODER_DUT + if not os.path.exists(encdut_path) or not os.path.exists(decdut_path): + build_dut_binaries() + + if not os.path.exists(REFERENCE_DIR): + # check for REF binaries + if args.encref: + encref_path = os.path.realpath(args.encref) + if not os.path.exists(encref_path): + sys.exit(f"REF encoder binary {encref_path} does not exist.") + else: + encref_path = DEFAULT_ENCODER_REF + if args.decref: + decref_path = os.path.realpath(args.decref) + if not os.path.exists(decref_path): + sys.exit(f"REF encoder binary {decref_path} does not exist.") + else: + decref_path = DEFAULT_DECODER_REF + if not os.path.exists(encref_path) or not os.path.exists(decref_path): + build_ref_binaries(decref_path, encref_path, args.rref) + + # check for test vectors + if os.path.exists(TEST_VECTOR_DIR): + print(f"Using existing test vector directory {TEST_VECTOR_DIR}") + else: + print(f"Creating test vector directory {TEST_VECTOR_DIR}") + setup_test_vector_directory() + + # check for references + if os.path.exists(REFERENCE_DIR): + print(f"Using existing references directory {REFERENCE_DIR}") + else: + # create references + print(f"Creating references within the references directory {REFERENCE_DIR}") + if platform.system() == "Windows": + base_cmd = ["pytest"] + else: + base_cmd = ["python3", "-m", "pytest"] + base_cmd += [ + "scripts/ivas_pytests/tests", + "--update_ref", + "1", + "-v", + "--data_system_tests_path", + TEST_VECTOR_DIR, + "--reference_path", + REFERENCE_DIR, + "--dut_base_path", + DUT_BASE_DIR, + "--ref_encoder_path", + encref_path, + "--ref_decoder_path", + decref_path, + ] + # work-around in unit tests via environment variable + # TESTVECTOR_PATH_REL_GROUPB: to specify the test vector directory relative to ivas_pytests folder + # TESTVECTOR_PATH_REL_TRUNK: to specify the test vector directory relative to trunk + my_env = os.environ.copy() + my_env["TESTVECTOR_PATH_REL_GROUPB"] = "testv/" + my_env["TESTVECTOR_PATH_REL_TRUNK"] = "/scripts/ivas_pytests/testv/" # leading "/" is important + my_env["CREND_UNIT_TEST_BIN"] = CREND_UNITTEST_REF + print("pytest command line to be executed from trunk folder:") + print(" ".join(base_cmd + ["-m", "create_ref", "-n", args.numprocesses])) + subprocess.run(base_cmd + ["-m", "create_ref", "-n", args.numprocesses], check=False, env=my_env) + print("pytest command line to be executed from trunk folder:") + print(" ".join(base_cmd + ["-m", "create_ref_serial"])) + subprocess.run(base_cmd + ["-m", "create_ref_serial"], check=False, env=my_env) + + if args.create_only: + return + + # run pytest + if platform.system() == "Windows": + cmd = ["pytest"] + else: + cmd = ["python3", "-m", "pytest"] + cmd += [ + "scripts/ivas_pytests/tests", + "-n", + args.numprocesses, + "-v", + "--data_system_tests_path", + TEST_VECTOR_DIR, + "--reference_path", + REFERENCE_DIR, + "--dut_base_path", + DUT_BASE_DIR, + "--dut_encoder_path", + encdut_path, + "--dut_decoder_path", + decdut_path, + ] + # print pytest commandline + print("pytest command line to be executed from trunk folder:") + print(" ".join(cmd)) + result = subprocess.run(cmd, check=False) + return result.returncode + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff --git a/scripts/ivas_pytests/tests/cmp_custom.py b/scripts/ivas_pytests/tests/cmp_custom.py new file mode 100644 index 0000000000..e52d6df46c --- /dev/null +++ b/scripts/ivas_pytests/tests/cmp_custom.py @@ -0,0 +1,199 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +""" +Script to compare samples in 2 PCM files. + +USAGE : cmp_custom.py file_1 file_2 sample_size_in_bytes tolerance [end_samples_to_skip] +file_1, file_2 : files to compare +sample_size_in_bytes : 1, 2, 4, 8, these many bytes will be compared in single iteration +tolerance : abs error tolerance, will be computed based on sample_size_in_bytes +end_samples_to_skip : num of samples to be skipped at the end +""" + +import sys +import platform + + +class CompareSamples: + """ + A class to compare PCM samples. + """ + + def __init__( + self, + filename_1: str, + filename_2: str, + sample_size_in_bytes: int, + tolerance: int, + end_samples_to_skip: int, + ): + self.file_1 = open(filename_1, "rb") + self.file_2 = open(filename_2, "rb") + self.sample_size = sample_size_in_bytes + self.tolerance = tolerance + self.end_samples_to_skip = end_samples_to_skip + self.samples = 0 + self.max_diff = 0 + self.max_diff_sample_num = 0 + self.diff_present = False + self.first_diff_sample_num = 0 + self.first_diff = 0 + self.file_samples_to_read = 0 + self.file_size_1_samples = 0 + self.file_size_2_samples = 0 + + def get_file_sizes(self): + """ + Determine the file sizes in samples of the 2 PCM files. + """ + self.file_1.seek(0, 2) + self.file_2.seek(0, 2) + self.file_size_1_samples = self.file_1.tell() / self.sample_size + self.file_size_2_samples = self.file_2.tell() / self.sample_size + self.file_samples_to_read = ( + min(self.file_size_1_samples, self.file_size_2_samples) + - self.end_samples_to_skip + ) + self.file_1.seek(0) + self.file_2.seek(0) + + def print_summary(self): + """ + Print the summary of the comparison. + """ + print("Compare Custom Report") + print("=====================") + print( + f"file size in samples: file 1 = {self.file_size_1_samples},", + f"file 2 = {self.file_size_2_samples}", + ) + if self.file_size_1_samples != self.file_size_2_samples: + print("WARNING !!!! file size different") + print(f"Total number of samples compared = {self.samples}") + if not self.diff_present: + print("Comparison success") + print("") + return 0 + else: + print( + f"First unmatched diff ==> {self.first_diff}", + f"at sample num {self.first_diff_sample_num}", + ) + print( + f"MAXIMUM ABS DIFF ==> {self.max_diff} at sample num {self.max_diff_sample_num}" + ) + print("Comparison failed") + print("") + return 1 + return 1 + + def compare_next_sample(self): + """ + Compare the next input sample from both files. + """ + if self.samples == self.file_samples_to_read: + return 1 + val1_c = self.file_1.read(self.sample_size) + val2_c = self.file_2.read(self.sample_size) + if (len(val1_c) != self.sample_size) or (len(val2_c) != self.sample_size): + return 1 + + val1 = int.from_bytes(val1_c, byteorder="little", signed=True) + val2 = int.from_bytes(val2_c, byteorder="little", signed=True) + + self.samples = self.samples + 1 + abs_diff = (val1 - val2) if (val1 > val2) else (val2 - val1) + if abs_diff > self.tolerance: + if abs_diff > self.max_diff: + self.max_diff = abs_diff + self.max_diff_sample_num = self.samples + if not self.diff_present: + self.first_diff = abs_diff + self.first_diff_sample_num = self.samples + self.diff_present = True + return 0 + + +def usage(): + print(__doc__) + return 1 + + +def cmp_custom( + file_1_name, + file_2_name, + sample_size_in_bytes_str, + tolerance_str, + end_samples_to_skip_str="0", +): + """ + Function to compare the samples in 2 PCM files. + """ + + # check for python >= 3.7 + if sys.version_info[0] < 3 or sys.version_info[1] < 7: + sys.exit( + "This script is written for Python >= 3.7. Found: " + + platform.python_version() + ) + + sample_size_in_bytes = int(sample_size_in_bytes_str) + if sample_size_in_bytes not in [1, 2, 4, 8]: + print(f"Error: unsupported sample size ({sample_size_in_bytes})") + return usage() + + cmp_samples = CompareSamples( + file_1_name, + file_2_name, + sample_size_in_bytes, + int(tolerance_str), + int(end_samples_to_skip_str), + ) + + cmp_samples.get_file_sizes() + + result = 0 + while result == 0: + result = cmp_samples.compare_next_sample() + + return cmp_samples.print_summary() + + +def main(argv): + if len(argv) < 5: + return usage() + return cmp_custom(*argv[1:]) + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff --git a/scripts/ivas_pytests/tests/il2mm.py b/scripts/ivas_pytests/tests/il2mm.py new file mode 100644 index 0000000000..eb09593bdb --- /dev/null +++ b/scripts/ivas_pytests/tests/il2mm.py @@ -0,0 +1,61 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os + + +def il2mm(file_in, num_ch, b_delete=True): + """ + Convert interleaved input file to multiple mono output files. + """ + num_bytes_per_sample = 2 + num_bytes_per_frame = num_bytes_per_sample * num_ch + num_bytes_per_channel = os.path.getsize(file_in) / num_ch + + with open(file_in, "rb") as fid_in: + out_path = os.path.splitext(file_in)[0] + for chan in range(num_ch): + file_out = out_path + str(chan + 1) + "ch.raw" + with open(file_out, "wb") as fid_out: + bytes_written = 0 + offset = chan * num_bytes_per_sample + fid_in.seek(offset, 0) + while bytes_written < num_bytes_per_channel: + data = fid_in.read(num_bytes_per_sample) + fid_in.seek(num_bytes_per_frame - num_bytes_per_sample, 1) + written = fid_out.write(bytes(data)) + assert ( + written == num_bytes_per_sample + ), f"Error writing data: {written} != {num_bytes_per_sample}" + bytes_written += num_bytes_per_sample + + # delete interleaved input file + if b_delete: + os.remove(file_in) diff --git a/scripts/ivas_pytests/tests/requirements.txt b/scripts/ivas_pytests/tests/requirements.txt new file mode 100644 index 0000000000..764694dfc0 --- /dev/null +++ b/scripts/ivas_pytests/tests/requirements.txt @@ -0,0 +1,4 @@ +pytest==5.3.5 +pytest-xdist==1.31.0 +scipy==1.5.2 +numpy==1.19.2 diff --git a/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec.py b/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec.py new file mode 100644 index 0000000000..48380b3077 --- /dev/null +++ b/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec.py @@ -0,0 +1,186 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +""" +Test file to run C decoder code. +The outputs are compared with C generated references. +""" + +import os +import pytest +import errno +import shutil +import sys + +sys.path.append('scripts/ivas_pytests/') +sys.path.append('scripts/ivas_pytests/tests/') +from il2mm import il2mm +from cmp_custom import cmp_custom +from conftest import DecoderFrontend + +#params +tag_list = ['stv_FOA', 'WYZX_Talker_Moving_15s_22s'] +tag_list_bw_force = ['stv_FOA'] +dtx_set = ['0', '1'] +dict_fsample_bw = {'48':'3', '32':'2', '16':'1'} +dict_bw_idx = {'FB':'3', 'SWB':'2', 'WB':'1'} +dict_bw_tag = {'SWB':'_ForceSWB', 'WB':'_ForceWB'} +ivas_br_list = ['32000', '64000', '96000', '160000', '256000'] +sample_rate_list = ['48', '32', '16'] +sample_rate_bw_idx_list = [('48', 'SWB'), ('48', 'WB'), ('32', 'WB')] +AbsTol = '3' + +ch_count_foa = 4 + + +def check_and_makedir(dir_path): + if not os.path.exists(dir_path): + try: + os.makedirs(dir_path) + except OSError as e: + if e.errno != errno.EEXIST: + raise # raises the error again + + +@pytest.mark.parametrize("ivas_br", ivas_br_list) +@pytest.mark.parametrize("dtx", dtx_set) +@pytest.mark.parametrize("tag", tag_list) +@pytest.mark.parametrize("fs", sample_rate_list) +def test_spar_foa_dec_system( + dut_decoder_frontend: DecoderFrontend, + reference_path, + dut_base_path, + ivas_br, + dtx, + tag, + fs +): + tag = tag + '_' + fs + 'k' + bw = "FB" + + #dec + spar_foa_dec(dut_decoder_frontend, reference_path, dut_base_path, tag, ch_count_foa, fs, ivas_br, dtx, bw) + + +@pytest.mark.parametrize("ivas_br", ivas_br_list) +@pytest.mark.parametrize("dtx", dtx_set) +@pytest.mark.parametrize("tag", tag_list_bw_force) +@pytest.mark.parametrize("sample_rate_bw_idx", sample_rate_bw_idx_list) +def test_spar_foa_dec_BWforce_system( + dut_decoder_frontend: DecoderFrontend, + reference_path, + dut_base_path, + ivas_br, + dtx, + tag, + sample_rate_bw_idx +): + + fs = sample_rate_bw_idx[0] + bw = sample_rate_bw_idx[1] + tag = tag + '_' + fs + 'k' + + #dec + spar_foa_dec(dut_decoder_frontend, reference_path, dut_base_path, tag, ch_count_foa, fs, ivas_br, dtx, bw) + + +######################################################### +############ test function ############################## + +def spar_foa_dec( + decoder_frontend, + reference_path, + dut_base_path, + tag, + ch_count, + sampling_rate, + ivas_br, + dtx, + ivas_max_bw +): + + ######### run cmd ##################################### + #sampling rate to BW mapping + bw_idx = dict_fsample_bw[sampling_rate] + if int(dict_bw_idx[ivas_max_bw]) < int(bw_idx): + bw_tag = dict_bw_tag[ivas_max_bw] + tag = tag + bw_tag + + tag_out = f"{tag}_ivasbr{ivas_br[:-3]}k_DTX{dtx}" + + dut_out_dir = f"{dut_base_path}/spar_foa_bs/raw/{tag_out}" + ref_out_dir = f"{reference_path}/spar_foa_bs/raw/{tag_out}" + check_and_makedir(dut_out_dir) + + ref_in_pkt = f"{reference_path}/spar_foa_bs/pkt/{tag_out}.pkt" + + decoder_frontend.run( + "FOA", + sampling_rate, + ref_in_pkt, + f"{dut_out_dir}/out.raw", + ) + + il2mm(f"{dut_out_dir}/out.raw", ch_count) + + ######### compare cmd ##################################### + + end_skip_samples = '0' + + test_fail = False + for count in range(ch_count): + ch_id = str(count + 1) + + if cmp_custom( + f"{dut_out_dir}/out{ch_id}ch.raw", + f"{ref_out_dir}/out{ch_id}ch.raw", + "2", + AbsTol, + end_skip_samples + ) != 0: + test_fail = True + + ##File removal## + # Unclear whether this clean-up is still needed + # TODO: check temp file generation + for count in range(ch_count, 16): + ch_id = str(count + 1) + temp_raw_file = f"{dut_out_dir}/out{ch_id}ch.raw" + if os.path.isfile(temp_raw_file): + os.remove(temp_raw_file) + + temp_md_file = f"{dut_out_dir}/MD_OUT_DUMMY.BIN" + if os.path.isfile(temp_md_file): + os.remove(temp_md_file) + + shutil.rmtree(dut_out_dir, ignore_errors=True) + + ##report failure + assert not test_fail diff --git a/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec_plc.py b/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec_plc.py new file mode 100644 index 0000000000..490e943640 --- /dev/null +++ b/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_dec_plc.py @@ -0,0 +1,263 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os +import pytest +import shutil +import errno +import sys + +sys.path.append('scripts/ivas_pytests/') +sys.path.append('scripts/ivas_pytests/tests/') +from il2mm import il2mm +from cmp_custom import cmp_custom +from conftest import EncoderFrontend, DecoderFrontend + +#params +tag_list = ['stv_FOA', 'WYZX_Talker_Moving_7_12s'] +plc_patterns = ['PLperc12mblen5', 'PLperc40mblen50', 'PLperc42mblen2'] +dtx_set = ['0', '1'] +ivas_br_list = ['32000', '64000', '96000', '256000'] +sampling_rate_list = ['48', '32', '16'] + +agc_tag_list = ['stv_FOA_24dB'] + +ch_count_foa = 4 +AbsTol = '3' + + +def check_and_makedir(dir_path): + if not os.path.exists(dir_path): + try: + os.makedirs(dir_path) + except OSError as e: + if e.errno != errno.EEXIST: + raise # raises the error again + + +@pytest.mark.create_ref_serial +@pytest.mark.parametrize("ivas_br", ivas_br_list) +@pytest.mark.parametrize("dtx", dtx_set) +@pytest.mark.parametrize("tag", tag_list) +@pytest.mark.parametrize("plc_pattern", plc_patterns) +@pytest.mark.parametrize("fs", sampling_rate_list) +def test_spar_foa_plc_system( + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + ivas_br, + dtx, + tag, + plc_pattern, + fs +): + tag = tag + '_' + fs + 'k' + agc = 0 + + if update_ref == 1 and plc_pattern == plc_patterns[0] and ref_encoder_path: + # enc + spar_foa_ref_enc(ref_encoder_path, data_system_tests_path, reference_path, tag, fs, ivas_br, dtx, agc) + + #dec + spar_foa_dec_plc(dut_decoder_frontend, data_system_tests_path, reference_path, dut_base_path, ref_decoder_path, tag, ch_count_foa, fs, ivas_br, dtx, plc_pattern, update_ref, agc) + + +@pytest.mark.create_ref_serial +@pytest.mark.parametrize("ivas_br", ivas_br_list) +@pytest.mark.parametrize("dtx", dtx_set) +@pytest.mark.parametrize("tag", agc_tag_list) +@pytest.mark.parametrize("plc_pattern", plc_patterns) +@pytest.mark.parametrize("fs", sampling_rate_list) +def test_spar_foa_agc_plc_system( + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + ivas_br, + dtx, + tag, + plc_pattern, + fs +): + tag = tag + '_' + fs + 'k' + agc = 1 + + if update_ref == 1 and plc_pattern == plc_patterns[0] and ref_encoder_path: + # enc + spar_foa_ref_enc(ref_encoder_path, data_system_tests_path, reference_path, tag, fs, ivas_br, dtx, agc) + + # dec + spar_foa_dec_plc(dut_decoder_frontend, data_system_tests_path, reference_path, dut_base_path, ref_decoder_path, tag, ch_count_foa, fs, ivas_br, dtx, plc_pattern, update_ref, agc) + + +######################################################### +############ test function ############################## +def spar_foa_ref_enc( + ref_encoder_path, + data_system_tests_path, + reference_path, + tag, + sampling_rate, + ivas_br, + dtx, + agc +): + + ######### run cmd ##################################### + ref_out_dir = f"{reference_path}/spar_foa_bs/pkt" + check_and_makedir(ref_out_dir) + + tag_out = f"{tag}_ivasbr{ivas_br[:-3]}k_DTX{dtx}" + if agc == 1: + tag_out += '_AGC1' + + input_path = f"{data_system_tests_path}/spar_foa_bs/enc/in/{tag}/in.raw" + + ref_pkt_file = f"{ref_out_dir}/{tag_out}.pkt" + + dtx_mode = dtx == '1' + + ref_encoder = EncoderFrontend(ref_encoder_path, "REF") + # call REF encoder + ref_encoder.run( + ivas_br, + sampling_rate, + input_path, + ref_pkt_file, + sba_order="+1", + max_band="FB", + agc_op=agc, + dtx_mode=dtx_mode, + ) + + +def spar_foa_dec_plc( + decoder_frontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_decoder_path, + tag, + ch_count, + sampling_rate, + ivas_br, + dtx, + plc_pattern, + update_ref, + agc +): + + ######### run cmd ##################################### + + tag_out = f"{tag}_ivasbr{ivas_br[:-3]}k_DTX{dtx}" + if agc == 1: + tag_out += '_AGC1' + plc_tag_out = f"{tag_out}_{plc_pattern}" + + dut_out_dir = f"{dut_base_path}/spar_foa_bs/raw/{plc_tag_out}" + ref_out_dir = f"{reference_path}/spar_foa_bs/raw/{plc_tag_out}" + + check_and_makedir(dut_out_dir) + check_and_makedir(ref_out_dir) + + plc_file = f"{data_system_tests_path}/spar_foa_bs/dec/plc_file/{plc_pattern}.g192" + ref_in_pkt = f"{reference_path}/spar_foa_bs/pkt/{tag_out}.pkt" + + if ref_decoder_path: + ref_decoder = DecoderFrontend(ref_decoder_path, "REF") + + # call REF decoder + ref_decoder.run( + "FOA", + sampling_rate, + ref_in_pkt, + f"{ref_out_dir}/out.raw", + plc_file=plc_file, + ) + + # convert REF interleaved to multi-mono + il2mm(f"{ref_out_dir}/out.raw", ch_count) + + if update_ref == 0: + # call DUT decoder + decoder_frontend.run( + "FOA", + sampling_rate, + ref_in_pkt, + f"{dut_out_dir}/out.raw", + plc_file=plc_file, + ) + + il2mm(f"{dut_out_dir}/out.raw", ch_count) + + ######### compare cmd ##################################### + + end_skip_samples = '0' + + test_fail = False + for count in range(ch_count): + ch_id = str(count + 1) + + if cmp_custom( + f"{dut_out_dir}/out{ch_id}ch.raw", + f"{ref_out_dir}/out{ch_id}ch.raw", + "2", + AbsTol, + end_skip_samples + ) != 0: + test_fail = True + + ##File removal## + shutil.rmtree(dut_out_dir, ignore_errors=True) + + ##report failure + assert not test_fail + + if ref_decoder_path: + # Unclear whether this clean-up is still needed + # TODO: check temp file generation + + ##File removal## + for count in range(ch_count, 25): + ch_id = str(count + 1) + temp_raw_file = f"{ref_out_dir}/out{ch_id}ch.raw" + if os.path.isfile(temp_raw_file): + os.remove(temp_raw_file) + + temp_md_file = f"{ref_out_dir}/MD_OUT_DUMMY.BIN" + if os.path.isfile(temp_md_file): + os.remove(temp_md_file) diff --git a/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_enc.py b/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_enc.py new file mode 100644 index 0000000000..796b3eb5d3 --- /dev/null +++ b/scripts/ivas_pytests/tests/system_tests/test_spar_foa_bs_enc.py @@ -0,0 +1,682 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +""" +Test file to run C encoder and decoder code. +The outputs are compared with C generated references. +""" + +import os +import pytest +import errno +import shutil +import sys + +sys.path.append('scripts/ivas_pytests/') +sys.path.append('scripts/ivas_pytests/tests/') +from il2mm import il2mm +from cmp_custom import cmp_custom +from conftest import EncoderFrontend, DecoderFrontend + +# disable SPAR HOA tests until SPAR_HOA macro is enabled +SPAR_HOA_TEST = 1 +#params +tag_list = ['stv_FOA', 'WYZX_Talker_Moving_15s_22s'] +tag_list_HOA2 = ['stv_HOA2'] +tag_list_HOA3 = ['stv_HOA3'] + +tag_list_bw_force = ['stv_FOA'] +dtx_set = ['0', '1'] +dict_fsample_bw = {'48':'3', '32':'2', '16':'1'} +dict_bw_idx = {'FB':'3', 'SWB':'2', 'WB':'1'} +dict_bw_tag = {'SWB':'_ForceSWB', 'WB':'_ForceWB'} +ivas_br_FOA = ['32000', '64000', '96000', '160000', '256000', '384000', '512000'] +ivas_br_HOA2 = ['256000', '384000', '512000'] +ivas_br_HOA3 = ['256000', '384000', '512000'] + +sample_rate_list = ['48', '32', '16'] +bypass_list = [1, 2] + +agc_tag_list = ['stv_FOA_24dB'] +agc_list = [-1, 0, 1] + +sample_rate_bw_idx_list = [('48', 'SWB'), ('48', 'WB'), ('32', 'WB')] + +AbsTol = '4' +ch_count_foa = 4 + + +def check_and_makedir(dir_path): + if not os.path.exists(dir_path): + try: + os.makedirs(dir_path) + except OSError as e: + if e.errno != errno.EEXIST: + raise # raises the error again + + +@pytest.mark.create_ref +@pytest.mark.parametrize("tag", tag_list) +@pytest.mark.parametrize("fs", sample_rate_list) +@pytest.mark.parametrize("bypass", bypass_list) +def test_bypass_enc( + dut_encoder_frontend: EncoderFrontend, + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + tag, + fs, + bypass +): + if update_ref == 1 and bypass == 1: + pytest.skip() + + tag = tag + '_' + fs + 'k' + ivas_br = '256000' + dtx = '0' + max_bw = "FB" + agc = 0 + use_agc_ref = 0 + sba_order = "+1" + output_config = "FOA" + + # enc + spar_foa_enc( + dut_encoder_frontend, + data_system_tests_path, + ref_encoder_path, + reference_path, + dut_base_path, + tag, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + sba_order, + update_ref + ) + + # dec + spar_foa_dec( + dut_decoder_frontend, + ref_decoder_path, + reference_path, + dut_base_path, + tag, + ch_count_foa, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + output_config, + update_ref + ) + + +@pytest.mark.create_ref +@pytest.mark.parametrize("ivas_br", ivas_br_FOA) +@pytest.mark.parametrize("dtx", dtx_set) +@pytest.mark.parametrize("tag", tag_list) +@pytest.mark.parametrize("fs", sample_rate_list) +@pytest.mark.parametrize("agc", agc_list) +def test_spar_foa_enc_system( + dut_encoder_frontend: EncoderFrontend, + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + ivas_br, + dtx, + tag, + fs, + agc +): + if update_ref == 1 and agc >= 0: + pytest.skip() + + tag = tag + '_' + fs + 'k' + max_bw = "FB" + bypass = -1 + use_agc_ref = 0 + sba_order = "+1" + output_config = "FOA" + + # enc + spar_foa_enc( + dut_encoder_frontend, + data_system_tests_path, + ref_encoder_path, + reference_path, + dut_base_path, + tag, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + sba_order, + update_ref + ) + + # dec + spar_foa_dec( + dut_decoder_frontend, + ref_decoder_path, + reference_path, + dut_base_path, + tag, + ch_count_foa, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + output_config, + update_ref + ) + +@pytest.mark.create_ref +@pytest.mark.parametrize("ivas_br", ivas_br_HOA2) +@pytest.mark.parametrize("tag", tag_list_HOA2) +def test_spar_hoa2_enc_system( + dut_encoder_frontend: EncoderFrontend, + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + ivas_br, + tag +): + # until SPAR HOA is enabled + if not SPAR_HOA_TEST: + pytest.skip() + + fs = '48' + dtx = '0' + agc = -1 + + tag = tag + '_' + fs + 'k' + max_bw = "FB" + bypass = -1 + use_agc_ref = 0 + sba_order = "+2" + output_config = "HOA2" + + # enc + spar_foa_enc( + dut_encoder_frontend, + data_system_tests_path, + ref_encoder_path, + reference_path, + dut_base_path, + tag, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + sba_order, + update_ref + ) + + # dec + spar_foa_dec( + dut_decoder_frontend, + ref_decoder_path, + reference_path, + dut_base_path, + tag, + ch_count_foa, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + output_config, + update_ref + ) + +@pytest.mark.create_ref +@pytest.mark.parametrize("ivas_br", ivas_br_HOA3) +@pytest.mark.parametrize("tag", tag_list_HOA3) +def test_spar_hoa3_enc_system( + dut_encoder_frontend: EncoderFrontend, + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + ivas_br, + tag +): + # until SPAR HOA is enabled + if not SPAR_HOA_TEST: + pytest.skip() + + fs = '48' + dtx = '0' + agc = -1 + + tag = tag + '_' + fs + 'k' + max_bw = "FB" + bypass = -1 + use_agc_ref = 0 + sba_order = "+3" + output_config = "HOA3" + + # enc + spar_foa_enc( + dut_encoder_frontend, + data_system_tests_path, + ref_encoder_path, + reference_path, + dut_base_path, + tag, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + sba_order, + update_ref + ) + + # dec + spar_foa_dec( + dut_decoder_frontend, + ref_decoder_path, + reference_path, + dut_base_path, + tag, + ch_count_foa, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + output_config, + update_ref + ) + +@pytest.mark.create_ref +@pytest.mark.parametrize("ivas_br", ivas_br_FOA) +@pytest.mark.parametrize("dtx", dtx_set) +@pytest.mark.parametrize("tag", tag_list_bw_force) +@pytest.mark.parametrize("sample_rate_bw_idx", sample_rate_bw_idx_list) +def test_spar_foa_enc_BWforce_system( + dut_encoder_frontend: EncoderFrontend, + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + ivas_br, + dtx, + tag, + sample_rate_bw_idx +): + fs = sample_rate_bw_idx[0] + bw = sample_rate_bw_idx[1] + tag = tag + '_' + fs + 'k' + bypass = -1 + agc = 0 + use_agc_ref = 0 + sba_order = "+1" + output_config = "FOA" + + # enc + spar_foa_enc( + dut_encoder_frontend, + data_system_tests_path, + ref_encoder_path, + reference_path, + dut_base_path, + tag, + fs, + ivas_br, + dtx, + bw, + bypass, + agc, + use_agc_ref, + sba_order, + update_ref + ) + + # dec + spar_foa_dec( + dut_decoder_frontend, + ref_decoder_path, + reference_path, + dut_base_path, + tag, + ch_count_foa, + fs, + ivas_br, + dtx, + bw, + bypass, + agc, + use_agc_ref, + output_config, + update_ref + ) + + +@pytest.mark.create_ref +@pytest.mark.parametrize("ivas_br", ivas_br_FOA) +@pytest.mark.parametrize("dtx", dtx_set) +@pytest.mark.parametrize("tag", agc_tag_list) +@pytest.mark.parametrize("fs", sample_rate_list) +def test_spar_foa_enc_agc_system( + dut_encoder_frontend: EncoderFrontend, + dut_decoder_frontend: DecoderFrontend, + data_system_tests_path, + reference_path, + dut_base_path, + ref_encoder_path, + ref_decoder_path, + update_ref, + ivas_br, + dtx, + tag, + fs +): + tag = tag + '_' + fs + 'k' + max_bw = "FB" + bypass = -1 + agc = 1 + use_agc_ref = 1 + sba_order = "+1" + output_config = "FOA" + + # enc + spar_foa_enc( + dut_encoder_frontend, + data_system_tests_path, + ref_encoder_path, + reference_path, + dut_base_path, + tag, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + sba_order, + update_ref + ) + + # dec + spar_foa_dec( + dut_decoder_frontend, + ref_decoder_path, + reference_path, + dut_base_path, + tag, + ch_count_foa, + fs, + ivas_br, + dtx, + max_bw, + bypass, + agc, + use_agc_ref, + output_config, + update_ref + ) + + +######################################################### +############ test function ############################## +def spar_foa_enc( + encoder_frontend, + data_system_tests_path, + ref_encoder_path, + reference_path, + dut_base_path, + tag, + sampling_rate, + ivas_br, + dtx, + ivas_max_bw, + bypass, + agc, + use_agc_ref, + sba_order, + update_ref +): + + ######### run cmd ##################################### + dut_out_dir = f"{dut_base_path}/spar_foa_bs/pkt" + ref_out_dir = f"{reference_path}/spar_foa_bs/pkt" + + check_and_makedir(dut_out_dir) + check_and_makedir(ref_out_dir) + + tag_in = tag + #sampling rate to BW mapping + bw_idx = dict_fsample_bw[sampling_rate] + if int(dict_bw_idx[ivas_max_bw]) < int(bw_idx): + tag = tag + dict_bw_tag[ivas_max_bw] + + + tag_out = f"{tag}_ivasbr{ivas_br[:-3]}k_DTX{dtx}" + short_tag_ext = "" + if agc == 1 and use_agc_ref == 1: + short_tag_ext += '_AGC1' + # we update only bypass = 0/2 (bypass 1 is the same as the baseline) + if bypass in [0, 2]: + short_tag_ext += f"_pca{bypass}" + # to avoid conflicting names in case of parallel test execution, differentiate all cases + long_tag_ext = f"_AGC{agc}_pca{bypass}" + dut_pkt_file = f"{dut_out_dir}/{tag_out}{long_tag_ext}.pkt" + ref_pkt_file = f"{ref_out_dir}/{tag_out}{short_tag_ext}.pkt" + + input_path = f"{data_system_tests_path}/spar_foa_bs/enc/in/{tag_in}/in.raw" + agc_op = agc if agc >= 0 else None + bypass_mode = bypass if bypass >= 0 else None + dtx_mode = dtx == '1' + + if ref_encoder_path: + ref_encoder = EncoderFrontend(ref_encoder_path, "REF") + # call REF encoder + ref_encoder.run( + ivas_br, + sampling_rate, + input_path, + ref_pkt_file, + sba_order=sba_order, + max_band=ivas_max_bw, + agc_op=agc_op, + bypass_mode=bypass_mode, + dtx_mode=dtx_mode, + ) + + if update_ref == 0: + # call DUT encoder + encoder_frontend.run( + ivas_br, + sampling_rate, + input_path, + dut_pkt_file, + sba_order=sba_order, + max_band=ivas_max_bw, + agc_op=agc_op, + bypass_mode=bypass_mode, + dtx_mode=dtx_mode, + ) + + +def spar_foa_dec( + decoder_frontend, + ref_decoder_path, + reference_path, + dut_base_path, + tag, + ch_count, + sampling_rate, + ivas_br, + dtx, + ivas_max_bw, + bypass, + agc, + use_agc_ref, + output_config, + update_ref, + keep_files=False +): + + ######### run cmd ##################################### + #sampling rate to BW mapping + bw_idx = dict_fsample_bw[sampling_rate] + if int(dict_bw_idx[ivas_max_bw]) < int(bw_idx): + tag = tag + dict_bw_tag[ivas_max_bw] + + + tag_out = f"{tag}_ivasbr{ivas_br[:-3]}k_DTX{dtx}" + + short_tag_ext = "" + if agc == 1 and use_agc_ref == 1: + short_tag_ext += '_AGC1' + # we update only bypass = 0/2 (bypass 1 is the same as the baseline) + if bypass in [0, 2]: + short_tag_ext += f"_pca{bypass}" + + # to avoid conflicting names in case of parallel test execution, differentiate all cases + long_tag_ext = f"_AGC{agc}_pca{bypass}" + + dut_out_dir = f"{dut_base_path}/spar_foa_bs/raw/{tag_out}{long_tag_ext}" + ref_out_dir = f"{reference_path}/spar_foa_bs/raw/{tag_out}{short_tag_ext}" + + dut_in_pkt = f"{dut_base_path}/spar_foa_bs/pkt/{tag_out}{long_tag_ext}.pkt" + ref_in_pkt = f"{reference_path}/spar_foa_bs/pkt/{tag_out}{short_tag_ext}.pkt" + + check_and_makedir(dut_out_dir) + check_and_makedir(ref_out_dir) + + if ref_decoder_path: + ref_decoder = DecoderFrontend(ref_decoder_path, "REF") + + # call REF decoder + ref_decoder.run( + output_config, + sampling_rate, + ref_in_pkt, + f"{ref_out_dir}/out.raw", + ) + + # convert REF interleaved to multi-mono + il2mm(f"{ref_out_dir}/out.raw", ch_count, b_delete=not keep_files) + + if update_ref == 0: + # call DUT decoder + decoder_frontend.run( + output_config, + sampling_rate, + dut_in_pkt, + f"{dut_out_dir}/out.raw", + ) + + il2mm(f"{dut_out_dir}/out.raw", ch_count, b_delete=not keep_files) + + ######### compare cmd ##################################### + + end_skip_samples = '0' + + test_fail = False + for count in range(ch_count): + ch_id = str(count + 1) + + if cmp_custom( + f"{dut_out_dir}/out{ch_id}ch.raw", + f"{ref_out_dir}/out{ch_id}ch.raw", + "2", + AbsTol, + end_skip_samples + ) != 0: + test_fail = True + + ##File removal## + if not keep_files: + os.remove(dut_in_pkt) + shutil.rmtree(dut_out_dir, ignore_errors=True) + + ##report failure + assert not test_fail + + if ref_decoder_path: + # Unclear whether this clean-up is still needed + # TODO: check temp file generation + + ##File removal## + for count in range(ch_count, 25): + ch_id = str(count + 1) + temp_raw_file = f"{ref_out_dir}/out{ch_id}ch.raw" + if os.path.isfile(temp_raw_file): + os.remove(temp_raw_file) + + temp_md_file = f"{ref_out_dir}/MD_OUT_DUMMY.BIN" + if os.path.isfile(temp_md_file): + os.remove(temp_md_file) diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/.vs/ivas_crend_unit_test/v16/Solution.VC.db-wal b/scripts/ivas_pytests/tests/unit_tests/crend/.vs/ivas_crend_unit_test/v16/Solution.VC.db-wal new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/build.bat b/scripts/ivas_pytests/tests/unit_tests/crend/build.bat new file mode 100644 index 0000000000..2cf3a27265 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/build.bat @@ -0,0 +1 @@ +MSBuild.exe ivas_crend_unit_test.sln /property:Configuration=Release /p:Platform="Win32" \ No newline at end of file diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/clean.bat b/scripts/ivas_pytests/tests/unit_tests/crend/clean.bat new file mode 100644 index 0000000000..c535a2cc62 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/clean.bat @@ -0,0 +1 @@ +MSBuild.exe ivas_crend_unit_test.sln /t:Clean /p:configuration=Release /p:Platform="Win32" \ No newline at end of file diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_io_parse.h b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_io_parse.h new file mode 100644 index 0000000000..21b59ad06f --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_io_parse.h @@ -0,0 +1,124 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/**************************************************************************** +* File description - +* This source file contains definitions specific to IVAS common renderer +****************************************************************************/ + +#ifndef IVAS_CREND_IO_PARSE_H +#define IVAS_CREND_IO_PARSE_H + +#include "ivas_cnst.h" +#include "audio_file_reader.h" +#include "audio_file_writer.h" +#include + +#define IVAS_IN_FMT_510 "510" +#define IVAS_IN_FMT_710 "710" +#define IVAS_IN_FMT_512 "512" +#define IVAS_IN_FMT_714 "714" +#define IVAS_IN_FMT_FOA "HOA1S" + +#define IVAS_MAX_PATH_LEN ( 2000 ) + +typedef enum ivas_in_out_fmt_struct_t +{ + MONO_1, + STEREO_2, + BIN_2, + FOA_4, + MULT_CH_5_1, + MULT_CH_7_1, + MULT_CH_5_1_2, + MULT_CH_7_1_4, + HOA_9, + HOA_16, + OBA, +} ivas_in_out_fmt_t, + IVAS_IN_OUT_FMT_CONFIG; + +#define CREND_MAND_ARGS 6 +/* Tests */ + +typedef enum test_types +{ + CREND_BIN_TEST = 1, + FASTCONV_BIN_TEST, + PARAM_BIN_TEST, + TD_BIN_TEST, + CREND_ACOUSTIC_PROXIMITY, + CREND_TEST_NO_DIEGETIC, + CREND_NUM_TESTS +} test_types; + +typedef struct ivas_crend_sanity_test_inp_t +{ + int32_t inp_len; + int32_t data_ch_idx; +} ivas_crend_sanity_test_inp_t; + +typedef struct ivas_crend_io_params_t +{ + test_types test; + int32_t sample_rate; + ivas_in_out_fmt_t in_fmt; + ivas_in_out_fmt_t out_fmt; +#ifdef USE_PCM_OUT + FILE *fIn[IVAS_MAX_NUM_CH]; + FILE *fOut; + FILE *fRef; +#else + AudioFileReader *fIn[IVAS_MAX_NUM_CH]; + AudioFileWriter *fOut; + AudioFileReader *fRef; +#endif + FILE *fProx; + char ref_path[IVAS_MAX_PATH_LEN]; + char in_path[IVAS_MAX_PATH_LEN]; + char out_path[IVAS_MAX_PATH_LEN]; + char prox_path[IVAS_MAX_PATH_LEN]; + char csv_path[IVAS_MAX_PATH_LEN]; + float latency_s; + int32_t use_brir; + int32_t lfe_lp_enable; + int32_t limiter_enable; + ivas_crend_sanity_test_inp_t sanity_test; + float no_diegetic_pan; + float tol; + int32_t no_delay_cmp; + int16_t renderConfigEnabled; + char renderConfigFilename[IVAS_MAX_PATH_LEN]; + OTR_TRACKING_T orientation_tracking; +} ivas_crend_io_params_t; + +#endif /* IVAS_CREND_IO_PARSE_H */ diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_public.h b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_public.h new file mode 100644 index 0000000000..057cfba10a --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_public.h @@ -0,0 +1,85 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/**************************************************************************** +* File description - +* This source file contains definitions specific to IVAS common renderer +****************************************************************************/ + +#include "ivas_crend_io_parse.h" +#include "ivas_dec_parse_io.h" +#include "ivas_stat_dec.h" +#include "ivas_result_t.h" + +#ifndef IVAS_CREND_PUBLIC_H +#define IVAS_CREND_PUBLIC_H + +#define FAIL 0 +#define PASS 1 + +#define TC_GLFE 1.88364908948980f +#define TC_M3DB 0.707945784384138f +#define TC_M3DB_BY2 ( TC_M3DB * 0.5f ) +#define TC_M6DB 0.501187233627272f +#define TC_TOL 3.05175781250000e-05f +#define TC_GAIN 0.2f + +/* for smart mixing test */ +#define PROXIMITY_USER_ID ( 0 ) + +#define IVAS_CREND_TOT_BIN_SANITY_TESTS ( 10 ) +#define IVAS_CREND_FOA_Z_TO_CHAN_INP_LEN ( 48000 ) +#define IVAS_CREND_CHAN_TO_BIN_INP_LEN ( 1920 ) +#define IVAS_SOFA_THR_VAL ( 1e-15f ) + +AUDIO_CONFIG ivas_crend_map_out_fmt( IVAS_IN_OUT_FMT_CONFIG fmt ); +const char * ivas_crend_map_in_fmt( IVAS_IN_OUT_FMT_CONFIG fmt ); + +ivas_result_t ivas_crend_default_io_params( ivas_crend_io_params_t *pIO_params ); +ivas_result_t ivas_crend_parse_io_params( int argc, char **argv, ivas_crend_io_params_t *pIo_params ); + +void ivas_open_files_ingest( ivas_crend_io_params_t *pIo_params ); +void ivas_open_files_crend( ivas_crend_io_params_t *pIo_params ); + +int16_t ivas_get_num_channels( const int16_t ch_format ); + +ivas_result_t ivas_crend_copy_hrtf_data( HRTFS_DATA *hHrtf, HRTFS_DATA *pCrend_hrtfs ); + +int32_t ivas_wrapper_get_frame_len( int32_t sample_rate ); + +ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, float *mixer ); + +ivas_result_t ivas_object_mixer_renderer( ivas_crend_io_params_t *pIo_params, int16_t *userLoc ); + +ivas_result_t ivas_wav_header_skip( FILE *in_file ); + +#endif /* IVAS_CREND_PUBLIC_H */ diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c new file mode 100644 index 0000000000..b2a24534c0 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c @@ -0,0 +1,725 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/**************************************************************************** + * File description - + * This source file contains definitions specific to IVAS common renderer unit tests + ****************************************************************************/ + + +/*------------------------------------------------------------------------------------------* + * include header files + *------------------------------------------------------------------------------------------*/ +#include +#include +#include +#include "options.h" +#include "stdlib.h" +#include "string.h" +#include "ivas_crend_public.h" +#include "ivas_crend_unit_test.h" +#include "ivas_stat_dec.h" +#include "ivas_prox_mix.h" +#include "prot.h" +#include "ivas_prot.h" + +#if defined( __unix__ ) || defined( __unix ) || defined( __APPLE__ ) || defined( __CYGWIN__ ) +#define USE_DIRENT +#endif + +#ifdef USE_DIRENT +#include "dirent.h" +#endif + +#ifdef USE_PCM_OUT +#define FILES_CLOSE \ + if ( NULL != io_params.fIn ) \ + { \ + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) \ + { \ + if ( NULL != io_params.fIn[i] ) \ + { \ + fclose( io_params.fIn[i] ); \ + io_params.fIn[i] = NULL; \ + } \ + } \ + } \ + if ( NULL != io_params.fRef ) \ + { \ + if ( NULL != io_params.fRef ) \ + { \ + fclose( io_params.fRef ); \ + io_params.fRef = NULL; \ + } \ + } \ + if ( io_params.fOut != NULL ) \ + { \ + fclose( io_params.fOut ); \ + } +#else +#define FILES_CLOSE \ + if ( NULL != io_params.fIn ) \ + { \ + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) \ + { \ + if ( NULL != io_params.fIn[i] ) \ + { \ + AudioFileReader_close( &io_params.fIn[i] ); \ + io_params.fIn[i] = NULL; \ + } \ + } \ + } \ + if ( NULL != io_params.fRef ) \ + { \ + if ( NULL != io_params.fRef ) \ + { \ + AudioFileReader_close( &io_params.fRef ); \ + io_params.fRef = NULL; \ + } \ + } \ + if ( io_params.fOut != NULL ) \ + { \ + AudioFileWriter_close( &io_params.fOut ); \ + } +#endif +/* temp change : to silence the compilation error */ +int32_t frame = 0; /* Counter of frames */ +/*-----------------------------------------------------------------------------------------* + * Function description - + * Reverb test + * + * Inputs - + * ivas_crend_io_params_t io_params + * + * Outputs - + * + * This function is based on a copy of the ivas_crend_test_to_200 + *-----------------------------------------------------------------------------------------*/ +static ivas_result_t ivas_crend_reverb_test( ivas_crend_io_params_t *pIo_params ) +{ + + char *test_case; + + if ( pIo_params->in_fmt == MULT_CH_5_1 ) + { + test_case = "CREND_510_TO_200"; + } + else + { + test_case = "CREND_710_TO_200"; + } + + /* Call CREND */ + ivas_common_mixer_renderer( pIo_params, NULL ); + + /* Compare */ + int16_t out, ref, test = PASS; + long long samples = 0; +#ifdef USE_PCM_OUT + fseek( pIo_params->fOut, 0, SEEK_SET ); + /* Compare */ + if ( pIo_params->fRef ) + { + fseek( pIo_params->fRef, 0, SEEK_SET ); + ivas_wav_header_skip( pIo_params->fRef ); + + uint32_t headerOffset = ftell( pIo_params->fRef ); + uint32_t sizeRef = 0; + uint32_t sizeOut = 0; + + fseek( pIo_params->fRef, 0, SEEK_END ); + sizeRef = ftell( pIo_params->fRef ) - headerOffset; + fseek( pIo_params->fRef, headerOffset, SEEK_SET ); + + fseek( pIo_params->fOut, 0, SEEK_END ); + sizeOut = ftell( pIo_params->fOut ); + fseek( pIo_params->fOut, 0, SEEK_SET ); + + /* Comparing the size of test output file with the size of reference file. */ + /* The data length should be identical, when the header size is taken into account. */ + if ( sizeRef != sizeOut ) + { + test = FAIL; + } + if ( test != FAIL ) + { + while ( ( fread( &out, sizeof( int16_t ), 1, pIo_params->fOut ) > 0 ) && ( fread( &ref, sizeof( int16_t ), 1, pIo_params->fRef ) > 0 ) ) + { + if ( fabs( (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ) - (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ) ) > pIo_params->tol ) + { + test = FAIL; + break; + } + samples++; + } + } + + if ( test == PASS ) + { + printf( "%s test PASSED\n\n", test_case ); + } + else + { + printf( "%s test FAILED\n\n", test_case ); + exit( -1 ); + } + } + else + { + printf( "%s test vector GENERATED\n\n", test_case ); + } +#else + AudioFileWriter_close( &pIo_params->fOut ); + AudioFileReader *fOut; + AudioFileReader_open( &fOut , pIo_params->out_path, pIo_params->sample_rate); + int16_t numRead; + /* Compare */ + if ( pIo_params->fRef ) + { + AudioFileReader_close( &pIo_params->fRef ); + AudioFileReader *fRef; + AudioFileReader_open( &fRef, pIo_params->ref_path, pIo_params->sample_rate ); + + if ( test != FAIL ) + { + while ( ( AudioFileReader_read( fOut, &out, 1, &numRead ) == IVAS_ERR_OK ) && ( numRead > 0 ) && ( AudioFileReader_read( fRef, &ref, 1, &numRead ) == IVAS_ERR_OK ) && ( numRead > 0 ) ) + { + if ( fabs( (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ) - (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ) ) > pIo_params->tol ) + { + test = FAIL; + break; + } + samples++; + } + } + + if ( test == PASS ) + { + printf( "%s test PASSED\n\n", test_case ); + } + else + { + printf( "%s test FAILED\n\n", test_case ); + exit( -1 ); + } + AudioFileReader_close( &fOut ); + AudioFileReader_close( &fRef ); + } + else + { + printf( "%s test vector GENERATED\n\n", test_case ); + } +#endif + return IVAS_SUCCESS; +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * common function call for ivas_crend_proximity_test which tests the proximity mixer + * + * Inputs - + * ivas_crend_io_params_t io_params + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +static ivas_result_t ivas_crend_proximity_test( ivas_crend_io_params_t *pIo_params ) +{ + int16_t *userLoc; + int32_t in_ch; +#ifdef USE_PCM_OUT + size_t num; +#else + int16_t num; +#endif + int16_t out = 0, test = PASS; + int16_t ref; + + float out_0f, acc_0f; + + uint8_t bitstream[MAX_BITSTREAM_LEN]; + + assert( pIo_params->in_fmt == OBA ); + assert( pIo_params->out_fmt == MONO_1 ); + + in_ch = ivas_get_num_channels( pIo_params->in_fmt ); + + /* allocate up to in_ch users to userLoc array */ + userLoc = (int16_t *) calloc( in_ch, sizeof( int16_t ) ); + + /* load bitstream data */ + num = (int16_t)fread( bitstream, sizeof( uint8_t ), MAX_BITSTREAM_LEN, pIo_params->fProx ); + + /* using bitstream information fill in the location in the userLoc vector */ + get_users_locations( bitstream, num, userLoc ); + + /* call the object mixer-renderer */ + ivas_object_mixer_renderer( pIo_params, userLoc ); + + free( userLoc ); + +#ifdef USE_PCM_OUT + int32_t i; + for (i = 0; i < in_ch; i++) + { + fseek(pIo_params->fRef, 0, SEEK_SET); + ivas_wav_header_skip(pIo_params->fRef); + } +#endif +#ifdef USE_PCM_OUT + if ( pIo_params->fRef ) + { + fseek( pIo_params->fRef, 0, SEEK_SET ); + fseek( pIo_params->fOut, 0, SEEK_SET ); + if ( strstr( pIo_params->ref_path, ".wav" ) != NULL ) + { + ivas_wav_header_skip( pIo_params->fRef ); + } + while ( 1 ) + { + acc_0f = 0.0f; + /* read reference channel correspnding to the given user in USER_ID */ + if ( fread( &ref, sizeof( int16_t ), 1, pIo_params->fRef ) <= 0 ) + { + printf( "Ref file finished\n" ); + goto DONE; + } + acc_0f = (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + /* compare to output from object mixer-renderer call above */ + if ( fread( &out, sizeof( int16_t ), 1, pIo_params->fOut ) <= 0 ) + { + printf( "Output file finished\n" ); + goto DONE; + } + out_0f = (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + /* check if much different.. */ + if ( fabs( out_0f - acc_0f ) > TC_TOL ) + { + test = FAIL; + } + } + } +#else + if ( pIo_params->fRef ) + { + int16_t numRead; + AudioFileReader_close( &pIo_params->fRef ); + AudioFileWriter_close( &pIo_params->fOut ); + AudioFileReader *fRef, *fOut; + AudioFileReader_open( &fOut, pIo_params->out_path, pIo_params->sample_rate ); + AudioFileReader_open( &fRef, pIo_params->ref_path, pIo_params->sample_rate ); + while ( 1 ) + { + acc_0f = 0.0f; + /* read reference channel correspnding to the given user in USER_ID */ + if ( (AudioFileReader_read( fRef , &ref, 1, &numRead ) != IVAS_ERR_OK) || (numRead == 0) ) + { + printf( "Ref file finished\n" ); + goto DONE; + } + acc_0f = (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + /* compare to output from object mixer-renderer call above */ + if ( ( AudioFileReader_read( fOut, &out, 1, &numRead ) != IVAS_ERR_OK ) || ( numRead == 0 ) ) + { + printf( "Output file finished\n" ); + goto DONE; + } + out_0f = (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + /* check if much different.. */ + if ( fabs( out_0f - acc_0f ) > TC_TOL ) + { + test = FAIL; + } + } + AudioFileReader_close( &fOut ); + AudioFileReader_close( &fRef ); + } + + + +#endif +DONE: + if ( test == PASS ) + { + printf( "%s PASSED\n\n", "CREND_PROXIMITY" ); + } + else + { + printf( "%s FAILED\n\n", "CREND_PROXIMITY" ); + exit( -1 ); + } + if ( pIo_params->fProx ) + { + fclose( pIo_params->fProx ); + } + return IVAS_SUCCESS; +} +/*-----------------------------------------------------------------------------------------* + * Function description - + * function call for ivas_crend_binaural_test + * + * Inputs - + * ivas_crend_io_params_t io_params + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +static ivas_result_t ivas_crend_binaural_test( ivas_crend_io_params_t *pIo_params ) +{ + float *mixer = NULL; + char *test_case; + int16_t out = 0, ref = 0, test = PASS; + int32_t skip_samples = 0; + + if ( pIo_params->in_fmt == MULT_CH_5_1 ) + { + test_case = "CREND_510_TO_BIN"; + } + else if ( pIo_params->in_fmt == MULT_CH_7_1 ) + { + test_case = "CREND_710_TO_BIN"; + } + else if ( pIo_params->in_fmt == MULT_CH_5_1_2 ) + { + test_case = "CREND_512_TO_BIN"; + } + else if ( pIo_params->in_fmt == MULT_CH_7_1_4 ) + { + test_case = "CREND_714_TO_BIN"; + } + else if ( pIo_params->in_fmt == FOA_4 ) + { + test_case = "CREND_FOA_TO_BIN"; + } + else if ( pIo_params->in_fmt == HOA_9 ) + { + test_case = "CREND_HOA_9_TO_BIN"; + } + else if ( pIo_params->in_fmt == HOA_16 ) + { + test_case = "CREND_HOA_16_TO_BIN"; + } + else + { + test_case = ""; + } + /* Call CREND */ + ivas_common_mixer_renderer( pIo_params, mixer ); + +#ifdef USE_PCM_OUT + int32_t skip_bytes = 0; + /* Compare */ + if ( pIo_params->fRef ) + { + ivas_wav_header_skip( pIo_params->fRef ); + skip_samples = (int32_t)( pIo_params->latency_s * pIo_params->sample_rate ); + if ( pIo_params->no_delay_cmp == 0 ) + { + skip_bytes = skip_samples * ivas_get_num_channels( BIN_2 ) * sizeof( int16_t ); + } + /* skip intial samples based on latency */ + fseek( pIo_params->fOut, skip_bytes, SEEK_SET ); + int16_t tail = 0; + int32_t tail_zeros = 0; + while ( ( fread( &out, sizeof( int16_t ), 1, pIo_params->fOut ) > 0 ) && ( fread( &ref, sizeof( int16_t ), 1, pIo_params->fRef ) > 0 ) ) + { + if ( fabs( (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ) - (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ) ) > pIo_params->tol ) + { + tail = 1; + } + if ( tail == 1 ) + { + tail_zeros++; + if ( tail_zeros > skip_samples * ivas_get_num_channels( BIN_2 ) ) + { + test = FAIL; + } + if ( out != 0 ) + { + test = FAIL; + } + } + } + + if ( test == PASS ) + { + printf( "%s TEST PASSED\n\n", test_case ); + } + else + { + printf( "%s TEST FAILED\n\n", test_case ); + exit( -1 ); + } + } + else + { + printf( "%s TEST VECTOR GENERATED\n\n", test_case ); + } +#else + /* Compare */ + if ( pIo_params->fRef ) + { + int16_t numRead; + AudioFileReader_close( &pIo_params->fRef ); + AudioFileWriter_close( &pIo_params->fOut ); + AudioFileReader *fRef, *fOut; + AudioFileReader_open( &fOut, pIo_params->out_path, pIo_params->sample_rate ); + AudioFileReader_open( &fRef, pIo_params->ref_path, pIo_params->sample_rate ); + + skip_samples = (int32_t) ( pIo_params->latency_s * pIo_params->sample_rate ); + /* skip intial samples based on latency */ + int16_t tail = 0; + int32_t tail_zeros = 0; + + while ( ( AudioFileReader_read( fOut, &out, 1, &numRead ) == IVAS_ERR_OK ) && ( numRead > 0 ) && ( AudioFileReader_read( fRef, &ref, 1, &numRead ) == IVAS_ERR_OK ) && ( numRead > 0 ) ) + { + if ( fabs( (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ) - (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ) ) > pIo_params->tol ) + { + tail = 1; + } + if ( tail == 1 ) + { + tail_zeros++; + if ( tail_zeros > skip_samples * ivas_get_num_channels( BIN_2 ) ) + { + test = FAIL; + } + if ( out != 0 ) + { + test = FAIL; + } + } + } + + if ( test == PASS ) + { + printf( "%s TEST PASSED\n\n", test_case ); + } + else + { + printf( "%s TEST FAILED\n\n", test_case ); + exit( -1 ); + } + AudioFileReader_close( &fOut ); + AudioFileReader_close( &fRef ); + } + else + { + printf( "%s TEST VECTOR GENERATED\n\n", test_case ); + } +#endif + + return IVAS_SUCCESS; +} + + +/*-----------------------------------------------------------------------------------------* + * Function description - + * common function call for ivas_crend_HOA_to_200_test + * + * Inputs - + * ivas_crend_io_params_t io_params + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +static ivas_result_t ivas_crend_no_diegetic_test( ivas_crend_io_params_t *pIo_params ) +{ + char *test_case = "CREND_NO_DIEGETIC"; + int16_t out = 0, test = PASS; + int16_t ref; + float out_f, ref_f; + float no_diegetic_pan; + float mixer[2]; + + if ( pIo_params->in_fmt > MONO_1 ) + return IVAS_FAILED; + if ( pIo_params->out_fmt != STEREO_2 ) + return IVAS_FAILED; + + no_diegetic_pan = pIo_params->no_diegetic_pan; + if ( no_diegetic_pan > 1 ) + no_diegetic_pan = 1; + if ( no_diegetic_pan < -1 ) + no_diegetic_pan = -1; + + mixer[0] = ( no_diegetic_pan + 1.f ) * 0.5f; + mixer[1] = 1.f - mixer[0]; + + /* Call CREND */ + ivas_common_mixer_renderer( pIo_params, mixer ); + + if ( pIo_params->fRef == NULL ) + { + printf( "%s test vector GENERATED\n\n", test_case ); + return IVAS_SUCCESS; + } + +#ifdef USE_PCM_OUT + int32_t in_ch,i; + in_ch = ivas_get_num_channels( pIo_params->in_fmt ); + + /* Compare */ + + for ( i = 0; i < in_ch; i++ ) + { + fseek( pIo_params->fRef, 0, SEEK_SET ); + ivas_wav_header_skip( pIo_params->fRef ); + } + + fseek( pIo_params->fOut, 0, SEEK_SET ); + + if ( pIo_params->fRef ) + { + while ( 1 ) + { + + if ( fread( &ref, sizeof( int16_t ), 1, pIo_params->fRef ) <= 0 ) + goto DONE; + ref_f = (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + if ( fread( &out, sizeof( int16_t ), 1, pIo_params->fOut ) <= 0 ) + goto DONE; + out_f = (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + if ( fabs( out_f - ref_f ) > TC_TOL ) + test = FAIL; + } + } +#else + /* Compare */ + + int16_t numRead; + AudioFileReader_close( &pIo_params->fRef ); + AudioFileWriter_close( &pIo_params->fOut ); + AudioFileReader *fRef, *fOut; + AudioFileReader_open( &fOut, pIo_params->out_path, pIo_params->sample_rate ); + AudioFileReader_open( &fRef, pIo_params->ref_path, pIo_params->sample_rate ); + + if ( fRef ) + { + while ( 1 ) + { + if ( ( AudioFileReader_read( fRef, &ref, 1, &numRead ) != IVAS_ERR_OK ) || ( numRead == 0 ) ) + goto DONE; + ref_f = (float) ( ref ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + if (( AudioFileReader_read( fOut, &out, 1, &numRead ) != IVAS_ERR_OK ) || (numRead == 0) ) + goto DONE; + out_f = (float) ( out ) * ( 1.0 / PCM16_TO_FLT_FAC ); + + if ( fabs( out_f - ref_f ) > TC_TOL ) + test = FAIL; + } + } + AudioFileReader_close( &fOut ); + AudioFileReader_close( &fRef ); +#endif +DONE: + + if ( test == PASS ) + { + printf( "%s PASSED\n\n", test_case ); + } + else + { + printf( "%s FAILED\n\n", test_case ); + exit( -1 ); + } + + return IVAS_SUCCESS; +} + + +/*-----------------------------------------------------------------------------------------* + * Function description - + * main process call + * + * Inputs - + * int argc + * char** argv + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +int main( int argc, char **argv ) +{ + ivas_crend_io_params_t io_params = { 0 }; + int32_t i; + + ivas_crend_default_io_params( &io_params ); + ivas_crend_parse_io_params( argc, argv, &io_params ); + + if ( io_params.in_path[0] != '\0' ) + { + if ( + io_params.test == CREND_ACOUSTIC_PROXIMITY || + io_params.test == CREND_BIN_TEST || + io_params.test == FASTCONV_BIN_TEST || + io_params.test == PARAM_BIN_TEST || + io_params.test == TD_BIN_TEST || + io_params.test == CREND_TEST_NO_DIEGETIC ) + { + ivas_open_files_crend( &io_params ); + } + } + switch ( io_params.test ) + { + case CREND_ACOUSTIC_PROXIMITY: + ivas_crend_proximity_test( &io_params ); + break; + case CREND_BIN_TEST: + case FASTCONV_BIN_TEST: + case PARAM_BIN_TEST: + case TD_BIN_TEST: + ivas_crend_binaural_test( &io_params ); + break; + case CREND_TEST_NO_DIEGETIC: + ivas_crend_no_diegetic_test( &io_params ); + break; + default: + ivas_common_mixer_renderer( &io_params, NULL ); + break; + } + + FILES_CLOSE; + +#ifdef RAM_COUNTING_TOOL + mem_count_summary( USE_DEFAULT ); +#endif + + return 0; +} diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.h b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.h new file mode 100644 index 0000000000..c26134aba1 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.h @@ -0,0 +1,57 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/**************************************************************************** +* File description - +* This source file contains definitions specific to IVAS common renderer +****************************************************************************/ + +#ifndef IVAS_CREND_UNIT_TEST_H +#define IVAS_CREND_UNIT_TEST_H + +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include "ivas_stat_dec.h" +#include "ivas_result_t.h" + + +/* Tables */ + +extern float ivas_mixer_510_to_510_tc_gain[]; +extern float ivas_mixer_710_to_710_tc_gain[]; +extern float ivas_mixer_510_LFE_to_BIN_tc_gain[]; +extern float ivas_mixer_710_LFE_to_BIN_tc_gain[]; + + +#endif /* IVAS_CREND_UNIT_TEST_H */ diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.sln b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.sln new file mode 100644 index 0000000000..e3a6f0a4e8 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31911.196 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ivas_crend_unit_test", "ivas_crend_unit_test.vcxproj", "{32354377-ACA7-40F9-9A0E-87FC956F0B78}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_com", "..\..\..\..\..\Workspace_msvc\lib_com.vcxproj", "{39EC200D-7795-4FF8-B214-B24EDA5526AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_dec", "..\..\..\..\..\Workspace_msvc\lib_dec.vcxproj", "{E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_debug", "..\..\..\..\..\Workspace_msvc\lib_debug.vcxproj", "{54509728-928B-44D9-A118-A6F92F08B34F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_util", "..\..\..\..\..\Workspace_msvc\lib_util.vcxproj", "{2FA8F384-0775-F3B7-F8C3-85209222FC70}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Debug|Win32.ActiveCfg = Debug|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Debug|Win32.Build.0 = Debug|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Release|Win32.ActiveCfg = Release|Win32 + {32354377-ACA7-40F9-9A0E-87FC956F0B78}.Release|Win32.Build.0 = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.Build.0 = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.ActiveCfg = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.Build.0 = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.Build.0 = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.ActiveCfg = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.Build.0 = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.ActiveCfg = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.Build.0 = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.ActiveCfg = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.Build.0 = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.ActiveCfg = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.Build.0 = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.ActiveCfg = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {47313E68-F2E1-4EB5-81D6-46E2327E12EB} + EndGlobalSection +EndGlobal diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.vcxproj b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.vcxproj new file mode 100644 index 0000000000..3d8e7ab07f --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.vcxproj @@ -0,0 +1,192 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + {39ec200d-7795-4ff8-b214-b24eda5526ae} + + + {e822ddaf-0f5f-4cd0-a694-38ae69de74d3} + + + {2fa8f384-0775-f3b7-f8c3-85209222fc70} + + + {5821967e-dd91-4b90-9b06-3b2cd896be57} + + + + + + + + + + + + + + + {32354377-ACA7-40F9-9A0E-87FC956F0B78} + evs_enc + 10.0.17763.0 + + + + Application + false + MultiByte + v141 + + + Application + false + MultiByte + v141 + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.26228.10 + + + .\ + .\Release_crend_unit_test\ + false + false + IVAS_crend_unit_test + + + .\ + .\Debug_crend_unit_test\ + false + false + IVAS_crend_unit_test + + + + + + + .\Release/vbr_enc.tlb + + + + MaxSpeed + AnySuitable + false + Neither + false + false + ..\..\..\..\..\lib_util;..\..\..\..\..\lib_dec;..\..\..\..\..\lib_com;..\..\..\..\..\lib_enc;..\..\..\..\..\lib_debug;..\..\..\..\..\lib_util;%(AdditionalIncludeDirectories) + UNIT_TEST_CREND_TD_BINAURAL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + Precise + false + + + $(IntDir)ens_enc.pdb + Level4 + true + + Default + 4100;4244;4310;%(DisableSpecificWarnings) + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + IVAS_crend_unit_test.exe + true + + false + .\Release_crend_unit_test/ivas_crend_unit_test.pdb + Console + false + + MachineX86 + libcmtd.lib + + + + + + + + .\Debug/vbr_enc.tlb + + + + Disabled + ..\..\..\..\..\lib_util;..\..\..\..\..\lib_dec;..\..\..\..\..\lib_com;..\..\..\..\..\lib_enc;..\..\..\..\..\lib_debug;..\..\..\..\..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;%(PreprocessorDefinitions) + + EnableFastChecks + MultiThreadedDebug + false + NotUsing + + $(IntDir)ivas_quant_dequant_test.pdb + Level4 + true + OldStyle + Default + 4100;4244;4310;%(DisableSpecificWarnings) + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + + IVAS_crend_unit_test.exe + true + + false + true + .\Debug_crend_unit_test/ivas_crend_unit_test.pdb + Console + + false + + MachineX86 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c new file mode 100644 index 0000000000..d3eff0b87d --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c @@ -0,0 +1,1815 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/**************************************************************************** + * File description - + * This source file contains utility definitions specific to IVAS common renderer unit tests + ****************************************************************************/ + + +/*------------------------------------------------------------------------------------------* + * include header files + *------------------------------------------------------------------------------------------*/ + +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include +#include +#include "options.h" +#include "ivas_dec_parse_io.h" +#include "ivas_crend_public.h" +#include "ivas_stat_dec.h" +#include "ivas_prox_mix.h" +#include "prot.h" +#include "ivas_prot.h" +#include "cmdl_tools.h" +#include "ivas_stat_dec.h" +#include "ivas_cnst.h" +#include "assert.h" +#include "ivas_rom_binaural_crend_head.h" +#include "ivas_rom_binauralRenderer.h" +#include "ivas_rom_com.h" +#include "head_rotation_file_reader.h" +#include "options.h" +#include "render_config_reader.h" + + + +static ivas_result_t ivas_dec_default_io_params( ivas_dec_io_params_t *pIO_params ) +{ + memset( pIO_params, 0, sizeof( ivas_dec_io_params_t ) ); + pIO_params->quiet_mode = IVAS_DEFAULT_QUIET_MODE; + pIO_params->no_delay_cmp = IVAS_DEFAULT_NO_DELAY_COMP_MODE; + pIO_params->bs_format = IVAS_DEFAULT_BS_FORMAT; + pIO_params->out_fmt = IVAS_DEFAULT_FMT; + pIO_params->in_fmt = IVAS_DEFAULT_FMT; + pIO_params->lfe_ch_idx = IVAS_DEFAULT_LFE_CH_IDX; + pIO_params->block_offset_ms = IVAS_EXT_ADD_DELAY_MS; + pIO_params->no_diegetic_pan = 0; + pIO_params->orientation_tracking = OTR_TRACKING_NONE; + + return IVAS_SUCCESS; +} + +/*------------------------------------------------------------------------- + * ivas_hrtf_init() + * + * Initialize hHrtf handle + *------------------------------------------------------------------------*/ + +static ivas_error ivas_hrtf_init( + HRTFS_DATA *hHrtf /* i/o: HRTF handle */ +) +{ + int16_t i, j; + + if ( hHrtf == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + hHrtf->latency_s = 0; + hHrtf->max_num_ir = 0; + hHrtf->max_num_iterations = 0; + hHrtf->gain_lfe = 0; + hHrtf->index_frequency_max_diffuse = 0; + + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + hHrtf->inv_diffuse_weight[i] = 0; + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations[i][j] = 0; + hHrtf->pIndex_frequency_max[i][j] = NULL; + hHrtf->pOut_to_bin_re[i][j] = NULL; + hHrtf->pOut_to_bin_im[i][j] = NULL; + } + } + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->num_iterations_diffuse[j] = 0; + hHrtf->pIndex_frequency_max_diffuse[j] = NULL; + hHrtf->pOut_to_bin_diffuse_re[j] = NULL; + hHrtf->pOut_to_bin_diffuse_im[j] = NULL; + } + + return IVAS_ERR_OK; +} + +AUDIO_CONFIG ivas_crend_map_out_fmt( + IVAS_IN_OUT_FMT_CONFIG fmt ) +{ + switch ( fmt ) + { + case MONO_1: + return AUDIO_CONFIG_MONO; + case STEREO_2: + return AUDIO_CONFIG_STEREO; + case BIN_2: + return AUDIO_CONFIG_BINAURAL; + case FOA_4: + return AUDIO_CONFIG_FOA; + case HOA_9: + return AUDIO_CONFIG_HOA2; + case HOA_16: + return AUDIO_CONFIG_HOA3; + case MULT_CH_5_1: + return AUDIO_CONFIG_5_1; + case MULT_CH_7_1: + return AUDIO_CONFIG_7_1; + case MULT_CH_5_1_2: + return AUDIO_CONFIG_5_1_2; + case MULT_CH_7_1_4: + return AUDIO_CONFIG_7_1_4; + default: + return -1; + } +} + +const char *ivas_crend_map_in_fmt( + IVAS_IN_OUT_FMT_CONFIG fmt ) +{ + switch ( fmt ) + { + case MONO_1: + case STEREO_2: + case MULT_CH_5_1: + case MULT_CH_7_1: + case MULT_CH_5_1_2: + case MULT_CH_7_1_4: + return IVAS_IN_FMT_COMBINED; + case FOA_4: + case HOA_9: + case HOA_16: + return IVAS_IN_FMT_HOA_3; + default: + return ""; + } +} + + +int16_t ivas_get_num_channels( + const int16_t ch_format ) +{ + int16_t num_channels = 0; + + switch ( ch_format ) + { + case MONO_1: + num_channels = 1; + break; + case BIN_2: + case STEREO_2: + num_channels = 2; + break; + case FOA_4: + num_channels = FOA_CHANNELS; + break; + case MULT_CH_5_1: + num_channels = 6; + break; + case MULT_CH_7_1: + num_channels = 8; + break; + case HOA_9: + num_channels = 9; + break; + case HOA_16: + num_channels = 16; + break; + case OBA: + num_channels = 8; + break; + case MULT_CH_5_1_2: + num_channels = 8; + break; + case MULT_CH_7_1_4: + num_channels = 12; + break; + default: + assert( !"Not supported Input format for Common Renderer!" ); + break; + } + + return num_channels; +} + +static ivas_result_t ivas_crend_mixer( + float ppPcm_in[][L_FRAME48k], + float ppPcm_out[][L_FRAME48k], + int32_t in_ch, + int32_t out_ch, + const float *pMixer_gain, + const int16_t frame_len ) +{ + int16_t i, j, k, offset; + + for ( i = 0; i < out_ch; i++ ) + { + offset = i * in_ch; + + for ( j = 0; j < frame_len; j++ ) + { + float temp = 0; + const float *pMixer = &pMixer_gain[offset]; + + for ( k = 0; k < in_ch; k++ ) + { + temp += ( ppPcm_in[k][j] * pMixer[k] ); + } + ppPcm_out[i][j] = temp; + } + } + + return IVAS_SUCCESS; +} + +/* prototypes */ +static void ivas_copy_io_params_to_dec_io_params( ivas_crend_io_params_t *pIo_params, ivas_dec_io_params_t *pDec_io_params ); +ivas_result_t ivas_crend_copy_latencies_to_io_params( ivas_crend_io_params_t *pIo_params, HRTFS_DATA *pCrend_hrtfs ); + + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Unit test usage details + * + * Inputs - + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +static void ivas_crend_unit_test_usage( void ) +{ + fprintf( stdout, "Usage: ivas_crend_unit_test.exe -test -sr -ifmt -ofmt [options]\n\n" ); + + fprintf( stdout, "Mandatory arguments:\n" ); + fprintf( stdout, "--------------------\n" ); + fprintf( stdout, "-test : Test case for binaural renderer to run (crend = 1, fastconv = 2, param = 3, td = 4)\n" ); + fprintf( stdout, "-sr : Sampling rate in kHz\n" ); + fprintf( stdout, "\nOptional arguments:\n" ); + fprintf( stdout, "---------------------\n" ); + fprintf( stdout, "-ifmt : Input format index\n" ); + fprintf( stdout, " (0 - MONO, 1 - STEREO, 2 - BINAURAL, 3 - FOA, 4 - 5.1, 5 - 7.1, 6 - 5.1.2, 7 - 7.1.4, 8 - HOA2, 9 - HOA3)\n" ); + fprintf( stdout, "-ofmt : Output format index\n" ); + fprintf( stdout, " (0 - MONO, 1 - STEREO, 2 - BINAURAL, 3 - FOA, 4 - 5.1, 5 - 7.1, 6 - 5.1.2, 7 - 7.1.4, 8 - HOA2, 9 - HOA3)\n" ); + fprintf( stdout, "-i : Input path/file\n" ); + fprintf( stdout, "-o : Output file\n" ); + fprintf( stdout, "-r : Reference path/file\n" ); + fprintf( stdout, "-otr : orientation tracker mode\n" ); + fprintf( stdout, "-t : CSV files path\n" ); + fprintf( stdout, "-prox : prox files path\n" ); + fprintf( stdout, "-zero_tol : ability to force some tests to check for bitexactness\n" ); + fprintf( stdout, "-limiter : add limiter\n" ); + fprintf( stdout, "-lp_lfe : add low pass filtering on LFE channel\n" ); + fprintf( stdout, "-no_delay_cmp : avoid delay conpensation on output wav file\n" ); + fprintf( stdout, "-brir : use default brir if available for de specified binaural renderer\n" ); + fprintf( stdout, "-render_config file : Renderer configuration file\n" ); + fprintf( stdout, "-no_diegetic_pan : panning mono no dietic sound to stereo -1<= pan <=1,\n" ); + fprintf( stdout, " left or l or 1->left, right or r or -1->right, center or c or 0->middle\n" ); + + fprintf( stdout, "\n" ); + + exit( -1 ); +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Set default IO parameters to 0 + * + * Inputs - + * ivas_crend_io_params_t *pIO_params + * + * Outputs - + * ivas_crend_io_params_t *pIO_params + * + *-----------------------------------------------------------------------------------------*/ +ivas_result_t ivas_crend_default_io_params( ivas_crend_io_params_t *pIO_params ) +{ + memset( pIO_params, 0, sizeof( ivas_crend_io_params_t ) ); + pIO_params->tol = TC_TOL; + pIO_params->orientation_tracking = OTR_TRACKING_NONE; + + return IVAS_SUCCESS; +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Get frame length + * + * Inputs - + * int32_t sample_rate + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +int32_t ivas_wrapper_get_frame_len( int32_t sample_rate ) +{ + return ( (int32_t) ( sample_rate / FRAMES_PER_SEC ) ); +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Set config parameters + * + * Inputs - + * ivas_crend_io_params_t *p_io_params + * ivas_crend_hrtfs_t *pCrend_hrtfs + * + * Outputs - + * ivas_dec_cfg_t *pDec_cfg + *-----------------------------------------------------------------------------------------*/ +static ivas_result_t ivas_crend_set_config_params( + DECODER_CONFIG_HANDLE hDecoderConfig, + ivas_dec_io_params_t *p_io_params, + int16_t *in_format, + int16_t *lfe_ch_idx ) +{ + *in_format = p_io_params->in_fmt; + hDecoderConfig->output_config = ivas_crend_map_out_fmt( p_io_params->out_fmt ); + + *lfe_ch_idx = p_io_params->lfe_ch_idx; + + hDecoderConfig->nchan_out = audioCfg2channels( hDecoderConfig->output_config ); + + hDecoderConfig->output_Fs = p_io_params->out_sample_rate; + hDecoderConfig->no_diegetic_pan = p_io_params->no_diegetic_pan; + + return IVAS_SUCCESS; +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Copy latencies to io_params + * + * Inputs - + * ivas_crend_hrtfs_t *pCrend_hrtfs + * + * Outputs - + * ivas_dec_cfg_t *pDec_cfg + *-----------------------------------------------------------------------------------------*/ +ivas_result_t ivas_crend_copy_latencies_to_io_params( ivas_crend_io_params_t *pIo_params, HRTFS_DATA *pCrend_hrtfs ) +{ + + pIo_params->latency_s = pCrend_hrtfs->latency_s; + + return IVAS_SUCCESS; +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Copy hrtf data to config parameters + * + * Inputs - + * ivas_crend_hrtfs_t *pCrend_hrtfs + * + * Outputs - + * ivas_dec_cfg_t *pDec_cfg + *-----------------------------------------------------------------------------------------*/ +ivas_result_t ivas_crend_copy_hrtf_data( HRTFS_DATA *hHrtf, HRTFS_DATA *pCrend_hrtfs ) +{ + int16_t i, j; + + hHrtf->latency_s = pCrend_hrtfs->latency_s; + hHrtf->max_num_ir = pCrend_hrtfs->max_num_ir; + hHrtf->max_num_iterations = pCrend_hrtfs->max_num_iterations; + hHrtf->gain_lfe = pCrend_hrtfs->gain_lfe; + + for ( i = 0; i < pCrend_hrtfs->max_num_ir; i++ ) + { + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->pOut_to_bin_re[i][j] = pCrend_hrtfs->pOut_to_bin_re[i][j]; + hHrtf->pOut_to_bin_im[i][j] = pCrend_hrtfs->pOut_to_bin_im[i][j]; + hHrtf->num_iterations[i][j] = pCrend_hrtfs->num_iterations[i][j]; + hHrtf->pIndex_frequency_max[i][j] = pCrend_hrtfs->pIndex_frequency_max[i][j]; + } + hHrtf->inv_diffuse_weight[i] = pCrend_hrtfs->inv_diffuse_weight[i]; + } + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + hHrtf->pOut_to_bin_diffuse_re[j] = pCrend_hrtfs->pOut_to_bin_diffuse_re[j]; + hHrtf->pOut_to_bin_diffuse_im[j] = pCrend_hrtfs->pOut_to_bin_diffuse_im[j]; + hHrtf->num_iterations_diffuse[j] = pCrend_hrtfs->num_iterations_diffuse[j]; + hHrtf->pIndex_frequency_max_diffuse[j] = pCrend_hrtfs->pIndex_frequency_max_diffuse[j]; + } + hHrtf->index_frequency_max_diffuse = pCrend_hrtfs->index_frequency_max_diffuse; + + return IVAS_SUCCESS; +} + + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Open files corresponding to the reference tests + * + * Inputs - + * ivas_crend_io_params_t *pIo_params + * + * Outputs - + * ivas_crend_io_params_t *pIo_params + * + *-----------------------------------------------------------------------------------------*/ + +void ivas_open_files_crend( ivas_crend_io_params_t *pIo_params ) +{ + /* Input File */ +#ifdef USE_PCM_OUT + if ( ( pIo_params->fIn[0] = fopen( pIo_params->in_path, "rb" ) ) == NULL ) +#else + if ( AudioFileReader_open( &pIo_params->fIn[0] , pIo_params->in_path, pIo_params->sample_rate ) != IVAS_ERR_OK ) +#endif + { + fprintf( stderr, "Error: Input audio file %s could not be opened\n\n", pIo_params->in_path ); + ivas_crend_unit_test_usage(); + } + fprintf( stdout, "Input audio file: %s\n", pIo_params->in_path ); + + /* Reference File */ +#ifdef USE_PCM_OUT + if ( ( strlen( pIo_params->ref_path ) > 0 ) && ( ( pIo_params->fRef = fopen( pIo_params->ref_path, "rb" ) ) == NULL ) ) +#else + if ( ( strlen( pIo_params->ref_path ) > 0 ) && ( AudioFileReader_open( &pIo_params->fRef, pIo_params->ref_path, pIo_params->sample_rate ) != IVAS_ERR_OK ) ) +#endif + { + fprintf( stderr, "Error: Reference audio file %s could not be opened\n\n", pIo_params->ref_path ); + ivas_crend_unit_test_usage(); + } + fprintf( stdout, "Reference audio file: %s\n", pIo_params->ref_path ); + + + /*if (pIo_params->test == CREND_IR_GREATER_960) + { + if ((pIo_params->custom_hrtf = fopen(pIo_params->sofa_path, "rb")) == NULL) + { + fprintf(stderr, "Error: Custom HRTF file %s could not be opened\n\n", pIo_params->sofa_path); + ivas_crend_unit_test_usage(); + } + }*/ + + + if ( pIo_params->test == CREND_ACOUSTIC_PROXIMITY ) + { + /* open proximity bitstream file */ + if ( ( pIo_params->fProx = fopen( pIo_params->prox_path, "rb" ) ) == NULL ) + { + fprintf( stderr, "Error: LocSharing bitstream file %s could not be opened\n\n", pIo_params->prox_path ); + ivas_crend_unit_test_usage(); + } + } + fprintf( stdout, "prox file or path: %s\n", pIo_params->prox_path ); +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Parse the cmd line params into IO param structure + * + * Inputs - + * int argc + * char** argv + * + * Outputs - + * ivas_enc_io_params_t *pIO_params + * + * + *-----------------------------------------------------------------------------------------*/ +ivas_result_t ivas_crend_parse_io_params( int argc, char **argv, ivas_crend_io_params_t *pIo_params ) +{ + int i = 1; + int mandatory_args = 0; + int optional_args = 0; + int check_output_format_set = 0; + +#ifdef DEBUG_SPAR_FOA + fprintf( stderr, "Number of cmd line args: %d\n", argc ); + fprintf( stderr, "CMD: " ); + while ( i < argc ) + { + /*printing with stderr so that it gets printed always*/ + fprintf( stderr, "%s ", argv[i++] ); + } + fprintf( stderr, "\n\n" ); + + i = 1; +#endif + + while ( i < argc ) + { + /*-----------------------------------------------------------------* + * Sampling rate + *-----------------------------------------------------------------*/ + if ( strcmp( to_upper( argv[i] ), "-SR" ) == 0 ) + { + pIo_params->sample_rate = atoi( argv[++i] ) * 1000; + if ( ( pIo_params->sample_rate != 8000 ) && ( pIo_params->sample_rate != 16000 ) && ( pIo_params->sample_rate != 32000 ) && ( pIo_params->sample_rate != 48000 ) ) + { + fprintf( stderr, "Error: %d kHz is not a supported sampling rate\n\n", atoi( argv[i] ) ); + ivas_crend_unit_test_usage(); + } + i++; + mandatory_args++; + } + /*-----------------------------------------------------------------* + *render config + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-RENDER_CONFIG" ) == 0 ) + { + pIo_params->renderConfigFilename[0] = '\0'; + pIo_params->renderConfigEnabled = true; + strcpy( pIo_params->renderConfigFilename, argv[++i] ); + + if ( pIo_params->renderConfigFilename[0] == '\0' ) + { + fprintf( stderr, "Error: Renderer configuration file path not specified\n\n" ); + ivas_crend_unit_test_usage(); + } + i++; + optional_args++; + } + /*-----------------------------------------------------------------* + * Input Format + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-IFMT" ) == 0 ) + { + pIo_params->in_fmt = atoi( argv[++i] ); + if ( ( pIo_params->in_fmt != MONO_1 ) && ( pIo_params->in_fmt != STEREO_2 ) && ( pIo_params->in_fmt != BIN_2 ) && ( pIo_params->in_fmt != FOA_4 ) && ( pIo_params->in_fmt != HOA_9 ) && ( pIo_params->in_fmt != HOA_16 ) && ( pIo_params->in_fmt != MULT_CH_5_1 ) && ( pIo_params->in_fmt != MULT_CH_7_1 ) && ( pIo_params->in_fmt != MULT_CH_5_1_2 ) && ( pIo_params->in_fmt != MULT_CH_7_1_4 ) && ( pIo_params->in_fmt != OBA ) ) + { + fprintf( stderr, "Error: Invalid input format\n\n" ); + ivas_crend_unit_test_usage(); + } + i++; + mandatory_args++; + } + /*-----------------------------------------------------------------* + * Output Format + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-OFMT" ) == 0 ) + { + pIo_params->out_fmt = atoi( argv[++i] ); + if ( ( pIo_params->out_fmt != MONO_1 ) && ( pIo_params->out_fmt != STEREO_2 ) && ( pIo_params->out_fmt != BIN_2 ) && ( pIo_params->out_fmt != FOA_4 ) && ( pIo_params->out_fmt != HOA_9 ) && ( pIo_params->out_fmt != HOA_16 ) && ( pIo_params->out_fmt != MULT_CH_5_1 ) && ( pIo_params->out_fmt != MULT_CH_7_1 ) && ( pIo_params->out_fmt != MULT_CH_5_1_2 ) && ( pIo_params->out_fmt != MULT_CH_7_1_4 ) ) + { + fprintf( stderr, "Error: Invalid output format\n\n" ); + ivas_crend_unit_test_usage(); + } + check_output_format_set = 1; + i++; + mandatory_args++; + } + /*-----------------------------------------------------------------* + * Input file(s) + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-I" ) == 0 ) + { + strcpy( pIo_params->in_path, argv[++i] ); + if ( pIo_params->in_path[0] == '\0' ) + { + fprintf( stderr, "Error: input folder %s could not be opened\n\n", argv[i] ); + ivas_crend_unit_test_usage(); + } + i++; + mandatory_args++; + } + + /*-----------------------------------------------------------------* + * Proximity file + *------------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-PROX" ) == 0 ) + { + if ( strlen( argv[++i] ) > IVAS_MAX_PATH_LEN ) + { + fprintf( stderr, "Error: input proximity path %s too big\n\n", argv[i] ); + ivas_crend_unit_test_usage(); + } + strcpy( pIo_params->prox_path, argv[i] ); + if ( pIo_params->prox_path[0] == '\0' ) + { + fprintf( stderr, "Error: input proximity folder %s could not be opened\n\n", argv[i] ); + ivas_crend_unit_test_usage(); + } + i++; + optional_args++; + } + /*-----------------------------------------------------------------* + * Input csv file + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-T" ) == 0 ) + { + if ( strlen( argv[++i] ) > IVAS_MAX_PATH_LEN ) + { + fprintf( stderr, "Error: input head orientation CSV file path %s too long\n\n", argv[i] ); + ivas_crend_unit_test_usage(); + } + strcpy( pIo_params->csv_path, argv[i] ); + if ( pIo_params->csv_path[0] == '\0' ) + { + fprintf( stderr, "Error: input head orientation CSV file %s could not be opened\n\n", argv[i] ); + ivas_crend_unit_test_usage(); + } + + i++; + optional_args++; + } + + /*-----------------------------------------------------------------* + * Orientation tracking + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-OTR" ) == 0 ) + { + char tmp[5]; + strcpy( tmp, argv[++i] ); + if ( strcmp( to_upper( tmp ), "AVG" ) == 0 ) + { + pIo_params->orientation_tracking = OTR_TRACKING_AVG_ORIENT; + } + else if ( strcmp( to_upper( tmp ), "REF" ) == 0 ) + { + pIo_params->orientation_tracking = OTR_TRACKING_REF_ORIENT; + } + else + { + fprintf( stderr, "Error: Invalid orientation tracking type\n\n" ); + ivas_crend_unit_test_usage(); + } + i++; + optional_args++; + } + + /*-----------------------------------------------------------------* + * Output file(s) + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-O" ) == 0 ) + { + if ( check_output_format_set == 0 ) + { + fprintf( stderr, "Error: Output format flag must be set beform output file name\n\n" ); + ivas_crend_unit_test_usage(); + } + if ( pIo_params->sample_rate == 0 ) + { + fprintf( stderr, "Error: Sample rate flag must be set beform output file name\n\n" ); + ivas_crend_unit_test_usage(); + } + strcpy( pIo_params->out_path, argv[++i] ); +#ifdef USE_PCM_OUT + if ( ( pIo_params->fOut = fopen( pIo_params->out_path, "wb+" ) ) == NULL ) +#else + if ( AudioFileWriter_open( &pIo_params->fOut, pIo_params->out_path, pIo_params->sample_rate, ivas_get_num_channels( pIo_params->out_fmt ) ) != IVAS_ERR_OK ) +#endif + { + fprintf( stderr, "Error: output audio file %s could not be opened\n\n", argv[i] ); + ivas_crend_unit_test_usage(); + } + fprintf( stdout, "Output audio file: %s\n", argv[i] ); + i++; + mandatory_args++; + } + /*-----------------------------------------------------------------* + * Reference file(s) path + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-R" ) == 0 ) + { + strcpy( pIo_params->ref_path, argv[++i] ); + if ( pIo_params->ref_path[0] == '\0' ) + { + fprintf( stderr, "Error: Ref folder %s could not be opened\n\n", argv[i] ); + ivas_crend_unit_test_usage(); + } + i++; + optional_args++; + } + /*-----------------------------------------------------------------* + * Test to Run + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-TEST" ) == 0 ) + { + pIo_params->test = atoi( argv[++i] ); + if ( pIo_params->test < 0 || pIo_params->test >= CREND_NUM_TESTS ) + { + fprintf( stderr, "Error: Invalid Test case\n\n" ); + ivas_crend_unit_test_usage(); + } + i++; + mandatory_args++; + } + /*-----------------------------------------------------------------* + * Use BRIR Length + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-BRIR" ) == 0 ) + { + pIo_params->use_brir = 1; + i++; + optional_args++; + } + /*-----------------------------------------------------------------* + * Apply low pass filter to LFE + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-LP_LFE" ) == 0 ) + { + pIo_params->lfe_lp_enable = 1; + i++; + optional_args++; + } + /*-----------------------------------------------------------------* + * Apply limiter + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-LIMITER" ) == 0 ) + { + pIo_params->limiter_enable = 1; + i++; + optional_args++; + } + /*-----------------------------------------------------------------* + * CREND non diegetic panning value + *-----------------------------------------------------------------*/ + else if ( strcmp( to_upper( argv[i] ), "-NO_DIEGETIC_PAN" ) == 0 ) + { + i++; + char *param = to_upper( argv[i++] ); + if ( ( strcmp( param, "CENTER" ) == 0 ) || ( strchr( param, 'C' ) != NULL ) ) + { + pIo_params->no_diegetic_pan = 0; + } + else if ( ( strcmp( param, "LEFT" ) == 0 ) || ( strchr( param, 'L' ) != NULL ) ) + { + pIo_params->no_diegetic_pan = -1; + } + else if ( ( strcmp( param, "RIGHT" ) == 0 ) || ( strchr( param, 'R' ) != NULL ) ) + { + pIo_params->no_diegetic_pan = 1; + } + else + { + pIo_params->no_diegetic_pan = atof( param ); + } + optional_args++; + } + else if ( strcmp( to_upper( argv[i] ), "-ZERO_TOL" ) == 0 ) + { + pIo_params->tol = 0.0f; + i++; + optional_args++; + } + else if ( strcmp( to_upper( argv[i] ), "-NO_DELAY_CMP" ) == 0 ) + { + pIo_params->no_delay_cmp = 1; + i++; + optional_args++; + } + else + { + fprintf( stderr, "Error: Flag not found\n\n" ); + i++; + } + } + if ( mandatory_args != CREND_MAND_ARGS ) + { + fprintf( stderr, "Error: Not enough mandatory arguments\n\n" ); + ivas_crend_unit_test_usage(); + } + + return IVAS_SUCCESS; +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Skip WAV header from a WAV file + * + * Inputs - + * FILE *in_file + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +ivas_result_t ivas_wav_header_skip( FILE *in_file ) +{ + int8_t data_start[4] = { 0 }; + int32_t check, count = 0; + int32_t length; + + check = 1; + while ( check ) + { + if ( data_start[0] == 'd' && data_start[1] == 'a' && + data_start[2] == 't' && data_start[3] == 'a' ) + { + ( fread( &length, 4, 1, in_file ) ); + check = 0; + } + else + { + data_start[0] = data_start[1]; + data_start[1] = data_start[2]; + data_start[2] = data_start[3]; + ( fread( &data_start[3], 1, 1, in_file ) ); + } + count++; + if ( count > 2000 ) + { + length = 0xffffffff; + return IVAS_FAILED; + } + } + return IVAS_SUCCESS; +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Read/Generate inputs + * + * Inputs - + * ivas_enc_io_params_t *pIo_params + * + * Outputs - + * ivas_enc_in_buf_t *pIn_buf + * + * + *-----------------------------------------------------------------------------------------*/ +static ivas_result_t ivas_wrapper_get_in_buf( ivas_crend_io_params_t *pIo_params, float ppPcm_in[][L_FRAME48k] ) +{ + int32_t i = 0, j = 0, samples_read = 0, num_in_ch = 0; + int32_t offset; + int32_t input_frame_len = ivas_wrapper_get_frame_len( pIo_params->sample_rate ); + int16_t tmp, read = 0; + + num_in_ch = ivas_get_num_channels( pIo_params->in_fmt ); + if ( pIo_params->test == CREND_BIN_TEST || pIo_params->test == FASTCONV_BIN_TEST || pIo_params->test == PARAM_BIN_TEST || pIo_params->test == TD_BIN_TEST || pIo_params->test == CREND_ACOUSTIC_PROXIMITY) + { + /* Read in PCM */ + for ( j = 0; j < input_frame_len; j++ ) + { + for ( i = 0; i < num_in_ch; i++ ) + { +#ifdef USE_PCM_OUT + if ( ( read = (int16_t) fread( &tmp, sizeof( int16_t ), 1, pIo_params->fIn[0] ) ) > 0 ) +#else + if ( (AudioFileReader_read( pIo_params->fIn[0], &tmp, 1, &read ) == IVAS_ERR_OK) && (read > 0) ) +#endif + { + ppPcm_in[i][j] = (float) tmp; + ppPcm_in[i][j] *= ( 1.0 / PCM16_TO_FLT_FAC ); + samples_read += 1; + } + else + { + if ( samples_read != 0 && samples_read < input_frame_len * num_in_ch ) + { + /* Setting remaining buffer to zeros */ + offset = samples_read / num_in_ch; + for ( i = 0; i < num_in_ch; i++ ) + { + set_zero( &ppPcm_in[i][offset], input_frame_len - offset ); + } + return IVAS_SUCCESS; + } + else + { + return IVAS_READ_DONE; + } + } + } + } + } + else + { + /* Read in PCM */ + for ( i = 0; i < num_in_ch; i++ ) + { + samples_read = 0; + for ( j = 0; j < input_frame_len; j++ ) + { +#ifdef USE_PCM_OUT + if ( ( read = (int16_t) fread( &tmp, sizeof( int16_t ), 1, pIo_params->fIn[i] ) ) > 0 ) +#else + if ( ( AudioFileReader_read( pIo_params->fIn[i], &tmp, 1, &read ) == IVAS_ERR_OK ) && ( read > 0 ) ) +#endif + { + ppPcm_in[i][j] = (float) tmp; + ppPcm_in[i][j] *= ( 1.0 / PCM16_TO_FLT_FAC ); + samples_read += 1; + } + else + { + if ( samples_read != 0 && samples_read < input_frame_len ) + { + /* Setting remaining buffer to zeros */ + offset = samples_read; + set_zero( &ppPcm_in[i][offset], input_frame_len - offset ); + break; + } + else + { + return IVAS_READ_DONE; + } + } + } + } + } + + return IVAS_SUCCESS; +} +/*---------------------------------------------------------------------* + * ivas_feed_head_track_data( ) + * + * Feed the decoder with the head tracking data + *---------------------------------------------------------------------*/ + +static ivas_result_t ivas_feed_head_track_data( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + IVAS_QUATERNION *orientation /* i : head-tracking data */ +) +{ + HEAD_TRACK_DATA_HANDLE hHeadTrackData; + int16_t i; + + + hHeadTrackData = st_ivas->hHeadTrackData; + + if ( hHeadTrackData == NULL ) + { + return IVAS_FAILED; + } + + /* Move head-tracking data to the decoder handle */ + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hHeadTrackData->Quaternions[i].w = orientation[i].w; + hHeadTrackData->Quaternions[i].x = orientation[i].x; + hHeadTrackData->Quaternions[i].y = orientation[i].y; + hHeadTrackData->Quaternions[i].z = orientation[i].z; + } + + st_ivas->hHeadTrackData->num_quaternions = 0; + + return IVAS_SUCCESS; +} + + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Copy io_params to dec_io_params + * + * Inputs - + * ivas_crend_io_params_t *pIo_params + * + * Outputs - + * ivas_dec_io_params_t *pDec_io_params + * + *-----------------------------------------------------------------------------------------*/ +static void ivas_copy_io_params_to_dec_io_params( ivas_crend_io_params_t *pIo_params, ivas_dec_io_params_t *pDec_io_params ) +{ + pDec_io_params->in_fmt = pIo_params->in_fmt; + pDec_io_params->out_fmt = pIo_params->out_fmt; + pDec_io_params->out_sample_rate = pIo_params->sample_rate; + pDec_io_params->no_diegetic_pan = pIo_params->no_diegetic_pan; + pDec_io_params->renderConfigEnabled = pIo_params->renderConfigEnabled; + pDec_io_params->use_brir = pIo_params->use_brir; + strcpy( pDec_io_params->renderConfigFilename, pIo_params->renderConfigFilename ); + pDec_io_params->orientation_tracking = pIo_params->orientation_tracking; + switch ( pIo_params->in_fmt ) + { + case MULT_CH_5_1: + case MULT_CH_7_1: + case MULT_CH_5_1_2: + case MULT_CH_7_1_4: + pDec_io_params->lfe_ch_idx = IVAS_DEFAULT_LFE_CH_IDX; + break; + case FOA_4: + case HOA_9: + case HOA_16: + default: + pDec_io_params->lfe_ch_idx = -1; + break; + } +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Main Common Renderer block + * + * Inputs - + * ivas_enc_io_params_t io_params + * float* mixer + * int16_t delay_cmp + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, float *mixer ) +{ + ivas_result_t result = IVAS_SUCCESS; + ivas_error error; + + float ppPcm_in[IVAS_MAX_NUM_CH][L_FRAME48k]; + float ppPcm_out[IVAS_MAX_NUM_CH][L_FRAME48k]; + float *ppDelay_lines[IVAS_MAX_NUM_CH]; + const float *filt_coeff; + int16_t delay_lp = 0; + Decoder_Struct st_ivas; + HeadRotFileReader *headRotReader = NULL; + + memset( &st_ivas, 0, sizeof( Decoder_Struct ) ); + + int64_t frame_count = 0; + + int32_t i = 0, j = 0; + int32_t frame_len = 0; + + ivas_dec_io_params_t dec_io_params; + int16_t in_format; + int16_t lfe_ch_idx; + DECODER_CONFIG decConfig; + + st_ivas.hDecoderConfig = &decConfig; + memset( st_ivas.hDecoderConfig, 0, sizeof( DECODER_CONFIG ) ); + memset( &st_ivas.hOutSetup, 0, sizeof( IVAS_OUTPUT_SETUP ) ); + + ivas_dec_default_io_params( &dec_io_params ); + ivas_copy_io_params_to_dec_io_params( pIo_params, &dec_io_params ); + result = ivas_crend_set_config_params( st_ivas.hDecoderConfig, &dec_io_params, &in_format, &lfe_ch_idx ); + st_ivas.transport_config = st_ivas.intern_config = ivas_crend_map_out_fmt( in_format ); + + if ( IVAS_SUCCESS != result ) + { + fprintf( stderr, "Crend configuration parameters setting failed\n" ); + exit( -1 ); + } + + frame_len = ivas_wrapper_get_frame_len( pIo_params->sample_rate ); + frame_len = frame_len >> 2; +#ifdef USE_PCM_OUT + /* skip WAV header */ + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + if ( pIo_params->fIn[i] != NULL ) + { + result = ivas_wav_header_skip( pIo_params->fIn[i] ); + if ( IVAS_SUCCESS != result ) + { + fprintf( stderr, "WAV header skip failed\n" ); + ivas_crend_close( &st_ivas ); + exit( -1 ); + } + } + } +#endif + + ivas_render_config_open( &st_ivas.hRenderConfig ); + ivas_render_config_init_from_rom( &st_ivas.hRenderConfig, 0 ); + if ( pIo_params->renderConfigEnabled ) + { + RenderConfigReader *renderConfigReader = NULL; + if ( ( error = RenderConfigReader_open( pIo_params->renderConfigFilename, &renderConfigReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Can't open Renderer configuration file %s \n\n", pIo_params->renderConfigFilename ); + exit( -1 ); + } + if ( RenderConfigReader_read( renderConfigReader, (IVAS_RENDER_CONFIG_HANDLE) st_ivas.hRenderConfig ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Failed to read renderer configuration from file %s\n", pIo_params->renderConfigFilename ); + exit( -1 ); + } + } + + st_ivas.hRenderConfig->roomAcoustics.use_brir = pIo_params->use_brir; + + if ( ( pIo_params->in_fmt >= MULT_CH_5_1 ) && ( pIo_params->in_fmt <= MULT_CH_7_1_4 ) ) + { + st_ivas.ivas_format = MC_FORMAT; + } + else + { + st_ivas.ivas_format = SBA_FORMAT; + } + + if ( ( pIo_params->out_fmt == BIN_2 ) && ( pIo_params->in_fmt != pIo_params->out_fmt ) ) + { + if ( pIo_params->test == FASTCONV_BIN_TEST ) + { + if ( st_ivas.hRenderConfig->roomAcoustics.use_brir ) + { + st_ivas.renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL_ROOM; + pIo_params->latency_s = ( (float) frame_len ) / (float) dec_io_params.out_sample_rate + FASTCONV_BRIR_latency_s; + } + else + { + st_ivas.renderer_type = RENDERER_BINAURAL_FASTCONV; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL; + if (st_ivas.ivas_format == MC_FORMAT) + pIo_params->latency_s = ( (float) frame_len ) / (float) dec_io_params.out_sample_rate + FASTCONV_HRIR_latency_s ; + else + pIo_params->latency_s = ( (float) frame_len ) / (float) dec_io_params.out_sample_rate + FASTCONV_HOA3_latency_s; + } + } + else if ( pIo_params->test == TD_BIN_TEST ) + { + if ( st_ivas.ivas_format == SBA_FORMAT ) + { + fprintf( stderr, "TD Renderer configuration wrong input format\n" ); + exit( -1 ); + } + + if ( st_ivas.hRenderConfig->roomAcoustics.use_brir ) + { + st_ivas.renderer_type = RENDERER_BINAURAL_OBJECTS_TD; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL; + } + else + { + st_ivas.renderer_type = RENDERER_BINAURAL_OBJECTS_TD; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL; + } + pIo_params->latency_s = BINAURAL_TD_LATENCY_S; + } + else if ( pIo_params->test == PARAM_BIN_TEST ) + { + if ( st_ivas.hRenderConfig->roomAcoustics.use_brir ) + { + st_ivas.renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL_ROOM; + } + else + { + st_ivas.renderer_type = RENDERER_BINAURAL_PARAMETRIC; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL; + } + pIo_params->latency_s = ( (float) frame_len ) / (float) dec_io_params.out_sample_rate; + } + else if( pIo_params->test == CREND_BIN_TEST ) + { + if ( st_ivas.hRenderConfig->roomAcoustics.use_brir ) + { + st_ivas.renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL_ROOM; + } + else + { + st_ivas.renderer_type = RENDERER_BINAURAL_MIXER_CONV; + st_ivas.hOutSetup.output_config = st_ivas.hDecoderConfig->output_config = AUDIO_CONFIG_BINAURAL; + } + } + else + { + fprintf( stderr, "Crend configuration wrong renderer\n" ); + exit( -1 ); + } + } + else + { + ivas_hrtf_init( st_ivas.hHrtf ); + } + + int32_t in_ch = audioCfg2channels( st_ivas.transport_config ); + int32_t out_ch = audioCfg2channels( st_ivas.hDecoderConfig->output_config ); + + /*------------------------------------------------------------------------------------------* + * State memory allocation for Common renderer + *------------------------------------------------------------------------------------------*/ + st_ivas.hDecoderConfig->Opt_Headrotation = pIo_params->orientation_tracking != OTR_TRACKING_NONE ? 1 : 0; + /*-------------------------------------------------------------------* + * Allocate and initialize Head-Tracking handle + *--------------------------------------------------------------------*/ + + if ( st_ivas.hDecoderConfig->Opt_Headrotation ) + { + if ( ( error = ivas_headTrack_open( &( st_ivas.hHeadTrackData ) ) ) != IVAS_ERR_OK ) + { + return error; + } + if ( ( error = HeadRotationFileReader_open( pIo_params->csv_path , &headRotReader ) ) != IVAS_ERR_OK ) + { + return error; + } + + } + + st_ivas.nchan_transport = audioCfg2channels( st_ivas.transport_config ); + st_ivas.hIntSetup.index_lfe[0] = lfe_ch_idx; + st_ivas.hIntSetup.num_lfe = lfe_ch_idx > 0 ? 1 : 0; + + if ( pIo_params->test == FASTCONV_BIN_TEST ) + { + ivas_output_init( &st_ivas.hIntSetup, st_ivas.transport_config ); + int16_t numCldfbAnalyses, numCldfbSyntheses; + numCldfbAnalyses = st_ivas.nchan_transport; + numCldfbSyntheses = st_ivas.hDecoderConfig->nchan_out; + + for ( i = 0; i < numCldfbAnalyses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas.cldfbAnaDec[i] ), CLDFB_ANALYSIS, dec_io_params.out_sample_rate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return IVAS_FAILED; + } + } + for ( ; i < MAX_INTERN_CHANNELS; i++ ) + { + st_ivas.cldfbAnaDec[i] = NULL; + } + + for ( i = 0; i < numCldfbSyntheses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas.cldfbSynDec[i] ), CLDFB_SYNTHESIS, dec_io_params.out_sample_rate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return IVAS_FAILED; + } + } + for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) + { + st_ivas.cldfbSynDec[i] = NULL; + } + + ivas_binRenderer_open( &st_ivas ); + } + else if ( pIo_params->test == TD_BIN_TEST ) + { + ivas_output_init( &st_ivas.hIntSetup, st_ivas.transport_config ); + ivas_output_init( &st_ivas.hOutSetup, st_ivas.transport_config ); + ivas_td_binaural_open( &st_ivas ); + } + else if ( pIo_params->test == PARAM_BIN_TEST ) + { + if ( ( pIo_params->in_fmt != FOA_4 ) && ( pIo_params->in_fmt != HOA_9 ) && ( pIo_params->in_fmt != HOA_16 ) ) + { + fprintf( stderr, "PARAM renderer configuration wrong format, must be FOA or HOA up to order 3\n" ); + exit( -1 ); + } + + ivas_output_init( &st_ivas.hIntSetup, st_ivas.transport_config ); + ivas_output_init( &st_ivas.hOutSetup, st_ivas.transport_config ); + st_ivas.hOutSetup.separateChannelEnabled = 1; + int16_t numCldfbAnalyses, numCldfbSyntheses; + numCldfbAnalyses = st_ivas.nchan_transport; + numCldfbSyntheses = st_ivas.hDecoderConfig->nchan_out; + + for ( i = 0; i < numCldfbAnalyses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas.cldfbAnaDec[i] ), CLDFB_ANALYSIS, dec_io_params.out_sample_rate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return IVAS_FAILED; + } + } + for ( ; i < MAX_INTERN_CHANNELS; i++ ) + { + st_ivas.cldfbAnaDec[i] = NULL; + } + + for ( i = 0; i < numCldfbSyntheses; i++ ) + { + if ( ( error = openCldfb( &( st_ivas.cldfbSynDec[i] ), CLDFB_SYNTHESIS, dec_io_params.out_sample_rate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return IVAS_FAILED; + } + } + for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) + { + st_ivas.cldfbSynDec[i] = NULL; + } + } + else + { + ivas_output_init( &st_ivas.hIntSetup, st_ivas.transport_config ); + ivas_output_init( &st_ivas.hOutSetup, st_ivas.transport_config ); + ivas_crend_open( &st_ivas ); + } + + if ( pIo_params->test == CREND_BIN_TEST ) + { + pIo_params->latency_s = st_ivas.hHrtf->latency_s; + } + if ( st_ivas.ivas_format == MC_FORMAT ) + { + ivas_create_lfe_dec( &st_ivas.hLFE, st_ivas.hDecoderConfig->output_Fs, pIo_params->latency_s ); + if ( st_ivas.hLFE->lfe_addl_delay > 0 ) + { + if ( st_ivas.hLFE->lfe_delay_buf != NULL ) + { + count_free( st_ivas.hLFE->lfe_delay_buf ); + st_ivas.hLFE->lfe_delay_buf = NULL; + } + if ( pIo_params->latency_s > 0 ) + { + st_ivas.hLFE->lfe_addl_delay = (int16_t) roundf( pIo_params->latency_s * dec_io_params.out_sample_rate ); + if ( st_ivas.hLFE->lfe_addl_delay > 0 ) + { + if ( ( st_ivas.hLFE->lfe_delay_buf = (float *) count_malloc( st_ivas.hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE additional delay buffer\n" ) ); + } + set_zero( (float *) st_ivas.hLFE->lfe_delay_buf, st_ivas.hLFE->lfe_addl_delay ); + } + } + else + { + st_ivas.hLFE->lfe_addl_delay = 0; + } + } + /* delay input channel of latency of lp filter*/ + if ( pIo_params->lfe_lp_enable ) + { + delay_lp = (int16_t) ( ivas_lfe_lpf_delay[1] * (float) pIo_params->sample_rate ); + for ( i = 0; i < in_ch - st_ivas.hIntSetup.num_lfe; i++ ) + { + if ( ( ppDelay_lines[i] = (float *) count_malloc( delay_lp * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE additional delay buffer\n" ) ); + } + set_zero( (float *) ppDelay_lines[i], delay_lp ); + } + ivas_lfe_lpf_select_filt_coeff( pIo_params->sample_rate, IVAS_FILTER_ORDER_4, &filt_coeff ); + ivas_filters_init( &st_ivas.hLFE->filter_state, filt_coeff, IVAS_FILTER_ORDER_4 ); + pIo_params->latency_s = pIo_params->latency_s + ivas_lfe_lpf_delay[1]; + } + else + { + delay_lp = 0; + } + } + + if ( pIo_params->limiter_enable ) + { + st_ivas.hLimiter = ivas_limiter_open( out_ch, pIo_params->sample_rate ); + } + + /*------------------------------------------------------------------------------------------* + * Loop for every frame of input data + * - Read the input data + * - Run the Common renderer + * - Write the parameters into output bitstream file + *------------------------------------------------------------------------------------------*/ + +#define _FIND_MAX_ +#ifdef _FIND_MAX_ + float valMax = 0; + float valEner = 0; +#endif + + /* delay adjustment */ + int32_t skip_samples = 0; + int32_t skipped_samples = 0; + int16_t write_flag = 0; + if ( ( pIo_params->out_fmt == BIN_2 ) && ( pIo_params->no_delay_cmp == 0 ) ) + { + skip_samples = NS2SA( pIo_params->sample_rate, (int32_t) ( pIo_params->latency_s * 1000000000.f ) ); + } + fprintf( stdout, "IVAS Common Renderer skip samples = %d\n", (int)skip_samples ); + + frame_len = frame_len << 2; + + int32_t frame_dec=0; + IVAS_QUATERNION Quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES] = {0}; + + /* process loop */ + while ( ( ( result = ivas_wrapper_get_in_buf( pIo_params, ppPcm_in ) ) == IVAS_SUCCESS ) && ( (st_ivas.hDecoderConfig->Opt_Headrotation == 0) || ( (st_ivas.hDecoderConfig->Opt_Headrotation == 1) && (HeadRotationFileReading( headRotReader, Quaternions, frame_dec ) == IVAS_ERR_OK ) ) ) ) + { + int16_t pcm[MAX_OUTPUT_CHANNELS]; + frame_dec++; + result = IVAS_SUCCESS; + if ( ( st_ivas.hDecoderConfig->Opt_Headrotation == 1 ) && (ivas_feed_head_track_data( &st_ivas, Quaternions ) != IVAS_SUCCESS )) + { + return IVAS_IO_ERROR; + } + + + if ( pIo_params->lfe_lp_enable ) + { + int32_t idx = 0; + for ( i = 0; i < in_ch; i++ ) + { + if ( i != lfe_ch_idx ) + { + delay_signal( ppPcm_in[idx], frame_len, ppDelay_lines[idx], delay_lp ); + idx++; + } + } + ivas_filter_process( &st_ivas.hLFE->filter_state, ppPcm_in[lfe_ch_idx], frame_len ); + } + + if ( pIo_params->test == FASTCONV_BIN_TEST ) + { + ivas_binaural_cldfb( &st_ivas, ppPcm_in ); + for ( i = 0; i < out_ch; i++ ) + { + mvr2r( ppPcm_in[i], ppPcm_out[i], frame_len ); + } + } + else if ( pIo_params->test == TD_BIN_TEST ) + { + ObjRenderIVASFrame( &st_ivas, ppPcm_in, frame_len ); + for ( i = 0; i < out_ch; i++ ) + { + mvr2r( ppPcm_in[i], ppPcm_out[i], frame_len ); + } + } + else if ( pIo_params->test == PARAM_BIN_TEST ) + { + float Cldfb_RealBuffer[MAX_INTERN_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_INTERN_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float RealBuffer[CLDFB_NO_CHANNELS_MAX]; + float ImagBuffer[CLDFB_NO_CHANNELS_MAX]; + int16_t slot_idx, maxBand, ch; + float gain = powf( 10.f, -6.f / 20.f ); /* add gain to compensate loudness with decoder, but are missing when compare to other renderers*/ + + /* Implement a 5 msec loops */ + maxBand = (int16_t) ( ( CLDFB_NO_CHANNELS_MAX * st_ivas.hDecoderConfig->output_Fs ) / 48000 ); + + for ( slot_idx = 0; slot_idx < (int16_t)CLDFB_NO_COL_MAX; slot_idx++ ) + { + + for ( ch = 0; ch < in_ch; ch++ ) + { + cldfbAnalysis_ts( &( ppPcm_in[ch][maxBand * slot_idx] ), + Cldfb_RealBuffer[ch][slot_idx], + Cldfb_ImagBuffer[ch][slot_idx], + maxBand, st_ivas.cldfbAnaDec[ch] ); + } + } + + for ( slot_idx = 0; slot_idx < (int16_t)CLDFB_NO_COL_MAX ; slot_idx++ ) + { + /* Implement binaural rendering */ + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + float *outSlotRePr, *outSlotImPr; /* Pointers needed for function call compatibility */ + + set_zero( RealBuffer, maxBand ); + set_zero( ImagBuffer, maxBand ); + + int16_t bandIdx, chIdx; + const float *filterTapsRealPtr, *filterTapsImagPtr; + + for ( chIdx = 0; chIdx < in_ch; chIdx++ ) + { + filterTapsRealPtr = hrtfShCoeffsRe[ch][chIdx]; + filterTapsImagPtr = hrtfShCoeffsIm[ch][chIdx]; + + for ( bandIdx = 0; bandIdx < maxBand; bandIdx++ ) + { + RealBuffer[bandIdx] += gain * ( Cldfb_RealBuffer[chIdx][slot_idx][bandIdx] * filterTapsRealPtr[bandIdx] ) - ( Cldfb_ImagBuffer[chIdx][slot_idx][bandIdx] * filterTapsImagPtr[bandIdx] ); + ImagBuffer[bandIdx] += gain * ( Cldfb_RealBuffer[chIdx][slot_idx][bandIdx] * filterTapsImagPtr[bandIdx] ) + ( Cldfb_ImagBuffer[chIdx][slot_idx][bandIdx] * filterTapsRealPtr[bandIdx] ); + } + } + outSlotRePr = &( RealBuffer[0] ); + outSlotImPr = &( ImagBuffer[0] ); + cldfbSynthesis( &outSlotRePr, &outSlotImPr, &( ppPcm_in[ch][slot_idx * maxBand] ), maxBand, st_ivas.cldfbSynDec[ch] ); + } + } + + for ( i = 0; i < out_ch; i++ ) + { + mvr2r( ppPcm_in[i], ppPcm_out[i], frame_len ); + } + + } + else + { + if ( mixer != NULL ) + { + ivas_crend_mixer( ppPcm_in, ppPcm_out, in_ch, out_ch, mixer, frame_len ); + } + else + { + ivas_crend_process( &st_ivas, ppPcm_in ); + } + } + + if ( mixer == NULL ) + { + if ( st_ivas.hLFE ) + { + /* if ( st_ivas.hLFE->filter_state.order > 0 ) + { + + ivas_filter_process( &st_ivas.hLFE->filter_state, ppPcm_in[lfe_ch_idx], frame_len ); + }*/ + + /* ADD delay to make overall max(block_offset, 11.5)*/ + if ( st_ivas.hLFE->lfe_addl_delay > 0 ) + { + delay_signal( ppPcm_in[lfe_ch_idx], frame_len, st_ivas.hLFE->lfe_delay_buf, st_ivas.hLFE->lfe_addl_delay ); + } + + ivas_binaural_add_LFE( &st_ivas, frame_len, ppPcm_in ); + } + for ( i = 0; i < out_ch; i++ ) + { + mvr2r( ppPcm_in[i], ppPcm_out[i], frame_len ); + } + if ( pIo_params->limiter_enable ) + { + ivas_limiter_dec( st_ivas.hLimiter, ppPcm_out, out_ch, frame_len, FALSE ); + } + } + + + float valMaxLoc = 0; + float clip = 1.0f; + for ( j = 0; j < frame_len; j++ ) + { + if ( ( write_flag == 0 ) && ( skipped_samples == skip_samples ) ) + { + write_flag = 1; + } + for ( i = 0; i < out_ch; i++ ) + { + float temp = roundf( ppPcm_out[i][j] * PCM16_TO_FLT_FAC ); +#ifdef _FIND_MAX_ + valMaxLoc = ( ppPcm_out[i][j] > valMaxLoc ) ? ppPcm_out[i][j] : ( ppPcm_out[i][j] < -valMaxLoc ) ? -ppPcm_out[i][j] + : valMaxLoc; + /* if (valMaxLoc > 1.0) printf("Saturation valMax = %f at frame_len = %ld sample = %ld \n", valMaxLoc, frame_len, i); */ + if ( valMax < valMaxLoc ) + valMax = valMaxLoc; + valEner += ppPcm_out[i][j] * ppPcm_out[i][j]; +#endif + pcm[i] = ( temp > MAX16B ) ? MAX16B : ( temp < MIN16B_FLT ) ? MIN16B + : (short) temp; + clip = max( clip, fabs( ppPcm_out[i][j] ) ); + + + } + if ( write_flag == 1 ) + { +#ifdef USE_PCM_OUT + fwrite( pcm, sizeof( int16_t ), out_ch, pIo_params->fOut ); +#else + AudioFileWriter_write( pIo_params->fOut, pcm, out_ch ); +#endif + } + if ( write_flag == 0 ) + skipped_samples++; + } + if ( clip > 1.0f ) + { + fprintf( stdout, "IVAS Common Renderer Clipped: max gain = %f\n", clip ); + } + + fprintf( stdout, "Processed frame: %ld\r", (long) frame_count ); + frame_count++; + + } + + int16_t pcm[MAX_OUTPUT_CHANNELS] = {0}; + while ( skipped_samples > 0 ) + { + AudioFileWriter_write( pIo_params->fOut, pcm, out_ch ); + skipped_samples--; + } + +#ifdef _FIND_MAX_ + valEner = sqrt( valEner / ( frame_count * frame_len ) ); + printf( "valMax = %f valEner = %f \n", 20.f * log10( valMax ), 20.f * log10( valEner ) ); +#endif + printf( "Total Frames Processed : %lld\n", (long long int) frame_count ); + + if ( st_ivas.hLFE ) + { + ivas_lfe_dec_close( st_ivas.hLFE ); + } + + if ( st_ivas.hDirAC != NULL ) + ivas_dirac_dec_close( st_ivas.hDirAC ); + if ( st_ivas.hBinRenderer != NULL ) + ivas_binRenderer_close( &st_ivas.hBinRenderer ); + ivas_crend_close( &st_ivas ); + if ( st_ivas.hBinRendererTd != NULL ) + ivas_td_binaural_close( &st_ivas.hBinRendererTd ); + if ( st_ivas.hLimiter != NULL ) + ivas_limiter_close( &st_ivas.hLimiter ); + + if ( pIo_params->lfe_lp_enable ) + { + for ( i = 0; i < in_ch - st_ivas.hIntSetup.num_lfe; i++ ) + { + count_free( ppDelay_lines[i] ); + } + } + if ( st_ivas.hRenderConfig->roomAcoustics.late_reverb_on ) + { + ivas_render_config_close( &st_ivas.hRenderConfig ); + } + + /* Head track data handle */ + if ( st_ivas.hHeadTrackData != NULL ) + { + count_free( st_ivas.hHeadTrackData ); + st_ivas.hHeadTrackData = NULL; + } + + if ( headRotReader ) + { + HeadRotationFileReader_close( &headRotReader ); + } + + +#ifdef RAM_COUNTING_TOOL + mem_count_summary( USE_DEFAULT ); +#endif + + return IVAS_SUCCESS; +} + +/*-----------------------------------------------------------------------------------------* + * Function description - + * Object mixer renderer block + * + * Inputs - + * ivas_enc_io_params_t io_params + * + * Outputs - + * + *-----------------------------------------------------------------------------------------*/ +ivas_result_t ivas_object_mixer_renderer( ivas_crend_io_params_t *pIo_params, int16_t *userLoc ) +{ + ivas_result_t result = IVAS_SUCCESS; + + float ppPcm_in[IVAS_MAX_NUM_CH][L_FRAME48k]; + float ppPcm_out[IVAS_MAX_NUM_CH][L_FRAME48k]; + DECODER_CONFIG decoder_config; + Decoder_Struct st_ivas; + + memset( &st_ivas, 0, sizeof( Decoder_Struct ) ); + + st_ivas.hDecoderConfig = &decoder_config; + memset( st_ivas.hDecoderConfig, 0, sizeof( DECODER_CONFIG ) ); + + int64_t frame_count = 0; + + int32_t i = 0, j = 0; + int32_t frame_len = 0; + + float *Smixer; + float *powvec; + ivas_dec_io_params_t dec_io_params = { 0 }; + int16_t in_format; + int16_t lfe_ch_idx; + + ivas_dec_default_io_params( &dec_io_params ); + ivas_copy_io_params_to_dec_io_params( pIo_params, &dec_io_params ); + + frame_len = ivas_wrapper_get_frame_len( pIo_params->sample_rate ); + +#ifdef USE_PCM_OUT + /* skip WAV header */ + for ( i = 0; i < IVAS_MAX_NUM_CH; i++ ) + { + if ( pIo_params->fIn[i] != NULL ) + { + result = ivas_wav_header_skip( pIo_params->fIn[i] ); + + if ( IVAS_SUCCESS != result ) + { + fprintf( stderr, "WAV header skip failed\n" ); + ivas_crend_close( &st_ivas ); + exit( -1 ); + } + } + } +#endif + + result = ivas_crend_set_config_params( &decoder_config, &dec_io_params, &in_format, &lfe_ch_idx ); + + st_ivas.transport_config = ivas_crend_map_out_fmt( in_format ); + + + if ( IVAS_SUCCESS != result ) + { + fprintf( stderr, "Crend configuration parameters setting failed\n" ); + ivas_crend_close( &st_ivas ); + exit( -1 ); + } + + /*------------------------------------------------------------------------------------------* + * State memory allocation for Common renderer + *------------------------------------------------------------------------------------------*/ + decoder_config.Opt_Headrotation = 0; + ivas_crend_open( &st_ivas ); + + /*------------------------------------------------------------------------------------------* + * In/out buffer memory allocation for encoder + *------------------------------------------------------------------------------------------*/ + int32_t in_ch = ivas_get_num_channels( pIo_params->in_fmt ); + int32_t out_ch = ivas_get_num_channels( pIo_params->out_fmt ); + + Smixer = (float *) calloc( in_ch, sizeof( float ) ); + powvec = (float *) calloc( in_ch, sizeof( float ) ); + + /* init - ignore FLC */ + for ( i = 0; i < in_ch; i++ ) + { + powvec[i] = 0.0f; + } + + /*------------------------------------------------------------------------------------------* + * Loop for every frame of input data + * - Read the input data + * - Run the Common renderer + * - Write the parameters into output bitstream file + *------------------------------------------------------------------------------------------*/ + +#define _FIND_MAX_ +#ifdef _FIND_MAX_ + float valMax = 0; + float valEner = 0; +#endif + + while ( ( ( result = ivas_wrapper_get_in_buf( pIo_params, ppPcm_in ) ) == IVAS_SUCCESS ) ) /* process loop */ + { +#ifdef USE_PCM_OUT + int16_t pcm; +#else + int16_t pcm[MAX_OUTPUT_CHANNELS]; +#endif + result = IVAS_SUCCESS; + + /* get the mixing matrix.. */ + get_prox_downmix_mixer( (int16_t) PROXIMITY_USER_ID, Smixer, userLoc, in_ch, ppPcm_in, frame_len, powvec ); + + result = ivas_crend_mixer( ppPcm_in, ppPcm_out, in_ch, out_ch, Smixer, frame_len ); + + if ( IVAS_SUCCESS != result ) + { + fprintf( stderr, "Error: ivas_crend_process failed with %d \n\n", (int32_t) result ); + ivas_crend_close( &st_ivas ); + exit( -1 ); + } + + float valMaxLoc = 0; + + for ( j = 0; j < frame_len; j++ ) + { + + for ( i = 0; i < out_ch; i++ ) + { + + float temp = roundf( ppPcm_out[i][j] * PCM16_TO_FLT_FAC ); +#ifdef _FIND_MAX_ + + valMaxLoc = ( ppPcm_out[i][j] > valMaxLoc ) ? ppPcm_out[i][j] : ( ppPcm_out[i][j] < -valMaxLoc ) ? -ppPcm_out[i][j] + : valMaxLoc; + /* if (valMaxLoc > 1.0) printf("Saturation valMax = %f at frame_len = %ld sample = %ld \n", valMaxLoc, frame_len, i); */ + + if ( valMax < valMaxLoc ) + { + valMax = valMaxLoc; + } + valEner += ppPcm_out[i][j] * ppPcm_out[i][j]; +#endif + +#ifdef USE_PCM_OUT + pcm = ( temp > MAX16B_FLT ) ? MAX16B : ( temp < MIN16B_FLT ) ? MIN16B + : (short) temp; + fwrite( &pcm, sizeof( int16_t ), 1, pIo_params->fOut ); +#else + pcm[i] = ( temp > MAX16B_FLT ) ? MAX16B : ( temp < MIN16B_FLT ) ? MIN16B + : (short) temp; + +#endif + } +#ifndef USE_PCM_OUT + AudioFileWriter_write( pIo_params->fOut, pcm, out_ch ); +#endif + } + + frame_count++; + } + free( powvec ); + free( Smixer ); + +#ifdef _FIND_MAX_ + valEner = sqrt( valEner / ( frame_count * frame_len ) ); + printf( "valMax = %f valEner = %f \n", 20.f * log10( valMax ), 20.f * log10( valEner ) ); +#endif + printf( "Total Frames Processed : %lld\n", (long long int) frame_count ); + + ivas_crend_close( &st_ivas ); + + return IVAS_SUCCESS; +} diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_dec_parse_io.h b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_dec_parse_io.h new file mode 100644 index 0000000000..e72e36a3f4 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_dec_parse_io.h @@ -0,0 +1,133 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_DEC_PARSE_IO_H +#define IVAS_DEC_PARSE_IO_H + +/**************************************************************************** +* File description - +* This header file contains declarations for IO/cmd line params parsing of IVAS decoder +****************************************************************************/ + +/*------------------------------------------------------------------------------------------* +* include header files +*------------------------------------------------------------------------------------------*/ +#include +#include +#include +#include "ivas_cnst.h" +#include "audio_file_writer.h" + +/*------------------------------------------------------------------------------------------* +* PreProcessor +*------------------------------------------------------------------------------------------*/ + +#define IVAS_IN_FMT_COMBINED "Combined" +#define IVAS_IN_FMT_HOA_3 "HOA3S" + +#define MAX_PCM_OUT_FILES ( IVAS_MAX_NUM_CH ) +#define REQ_DEC_CMD_LINE_PARAMS ( 7 ) + +#define IVAS_MAX_PATH_LEN ( 2000 ) + +#define IVAS_EXT_ADD_DELAY_MS ( 2 ) +#define MAX_OUT_FILE_LEN ( 1000 ) +#define MAX_CH_IDX_TAG_LEN ( 10 ) + +/*------------------------------------------------------------------------------------------* +* Global variables +*------------------------------------------------------------------------------------------*/ +/* IVAS bitstream formats */ +#define IVAS_G192 ( 0 ) +#define IVAS_MIME ( 1 ) + +/* IVAS decoder output formats */ +#define IVAS_NO_RENDERER ( -1 ) /* no renderer required */ + +#define IVAS_DEFAULT_QUIET_MODE ( 0 ) +#define IVAS_DEFAULT_NO_DELAY_COMP_MODE ( 0 ) +#define IVAS_DEFAULT_BS_FORMAT ( IVAS_G192 ) +#define IVAS_DEFAULT_FMT ( IVAS_NO_RENDERER ) +#define IVAS_DEFAULT_LFE_CH_IDX ( 3 ) /* ch count starting from 0 */ +#define IVAS_DEFAULT_AGC ( 0 ) + +#define IVAS_IN_FMT_510 "510" +#define IVAS_IN_FMT_710 "710" +#define IVAS_IN_FMT_512 "512" +#define IVAS_IN_FMT_714 "714" +#define IVAS_IN_FMT_FOA "HOA1S" +#define IVAS_IN_FMT_HOA_2 "HOA2S" +#define IVAS_IN_FMT_HOA_3 "HOA3S" +#define IVAS_IN_FMT_HOA_4 "HOA4S" + +/*------------------------------------------------------------------------------------------* +* Structure definitions +*------------------------------------------------------------------------------------------*/ +typedef struct ivas_dec_io_params_t +{ + int32_t in_fmt; + int32_t out_sample_rate; + int32_t out_fmt; + int32_t crend_enable; + int16_t quiet_mode; + int16_t no_delay_cmp; + int16_t bs_format; + int16_t lfe_ch_idx; + int16_t block_offset_ms; +#ifdef USE_PCM_OUT + FILE *fOut[MAX_PCM_OUT_FILES]; +#else + AudioFileWriter *fOut[MAX_PCM_OUT_FILES]; +#endif + FILE *fBs; + FILE *fMd; + FILE *fPlc; + char sofa_path[IVAS_MAX_PATH_LEN]; + char csv_path[IVAS_MAX_PATH_LEN]; + int16_t orientation_tracking; + int16_t coding_tool; + float no_diegetic_pan; + int16_t renderConfigEnabled; + int16_t use_brir; + char renderConfigFilename[IVAS_MAX_PATH_LEN]; +#ifdef DEBUG_AGC + FILE *agcBitstream; /* temporary */ +#endif +#ifdef DEBUG_SPAR_FOA + int8_t file_tag[50]; + int16_t dtx_on; +#endif + +} ivas_dec_io_params_t; + + +#endif diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c new file mode 100644 index 0000000000..2bf19080e5 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c @@ -0,0 +1,229 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*-----------------------------------------------------------------------------------------* +* File description - +* This file contains funciton definitions which are common between IVAS spatial decoding +* tools +*-----------------------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------------------------* +* include header files +*------------------------------------------------------------------------------------------*/ +#include +#include "options.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "ivas_prox_mix.h" +#include "wmops.h" + +/*------------------------------------------------------------------------------------------* +* PreProcessor +*------------------------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------------------------* + * Global variables + *------------------------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------------------------* + * Static functions declaration + *------------------------------------------------------------------------------------------*/ + +static float get_block_power( float *vec, int32_t frame_len ); + +/*------------------------------------------------------------------------------------------* + * function definitions + *------------------------------------------------------------------------------------------*/ + +/*-----------------------------------------------------------------------------------------* + * Function description - Returns mixer to combine uplink signals in an intelligent way to + * prevent unnecessary reproduction of certain signals and prevent acoustic feedback. + * + * Inputs - + * userID: a given user ID + * bitstream: float of bitstream data containing co-located user IDs + * pMixer: a 1-d mixer to be used in ivas_crend to combine the multichannel audio data into + * a single Mono signal. + * Outputs - + * + * + * + *-----------------------------------------------------------------------------------------*/ + +ivas_result_t get_users_locations( + uint8_t *bitstream, + int32_t len, + int16_t *userLoc ) +{ + /* userID = channelID starting from index=0 */ + int16_t nrLoc = 1; + int32_t i; + + /* enter user location depending on position in userLoc array */ + for ( i = 0; i < len; i++ ) + { + + if ( bitstream[i] == LOC_BITSTREAM_DELIMITER ) + { + nrLoc++; + } + else + { + userLoc[bitstream[i]] = nrLoc; + } + } + + return IVAS_SUCCESS; +} + + +ivas_result_t get_prox_downmix_mixer( + int16_t userID, + float *sMixer, + int16_t *userLoc, + int32_t nChan, + float ppPcm_in[][L_FRAME48k], + int32_t frame_len, + float *powvec ) +{ + /* userID = channelID starting from index=0 */ + int16_t nrUsers = 0, nrLoc = 0; + int32_t i, j; + int16_t locIdx = 0; + float pow_1, pow_2; + float *pow; + + pow = (float *) calloc( nChan, sizeof( float ) ); + + /* init */ + for ( i = 0; i < nChan; i++ ) + { + pow[i] = get_block_power( ppPcm_in[i], frame_len ); + + if ( pow[i] >= powvec[i] ) + { + powvec[i] = POWER_SMOOTH_HI * ( powvec[i] - pow[i] ) + pow[i]; + } + else + { + powvec[i] = POWER_SMOOTH_LO * ( powvec[i] - pow[i] ) + pow[i]; + } + /* reset the mixer */ + sMixer[i] = 0.0f; + } + + /* first find the room where userID is located*/ + locIdx = userLoc[userID]; + + /* iterate one more time, this time ignoring the room where the user is in. */ + for ( i = 0; i < nChan; i++ ) + { + if ( ( locIdx != userLoc[i] ) && ( userLoc[i] > 0 ) ) + { + sMixer[i] = 1.0f; + + nrUsers++; + + if ( userLoc[i] > nrLoc ) + { + nrLoc = userLoc[i]; + } + } + } + + /* Check for co-located users and select user with max */ + /* nrUsers contains the number of far-end users, i.e non-co-located*/ + /* These have to be treated differently */ + for ( i = 0; i < nChan; i++ ) + { + if ( sMixer[i] > 0.0f ) + { + locIdx = userLoc[i]; + pow_1 = powvec[i]; + for ( j = i + 1; j < nChan; j++ ) + { + if ( userLoc[j] == locIdx ) + { + /* compare signal power in block.. */ + pow_2 = powvec[j]; + + if ( pow_2 > POWER_FACT * pow_1 ) + { + sMixer[i] = 0.0f; + break; + } + else + { + sMixer[j] = 0.0f; + } + } + } + } + } + + nrUsers = 0; + for ( i = 0; i < nChan; i++ ) + { + if ( sMixer[i] > 0.0f ) + { + nrUsers++; + } + } + + if ( nrUsers != 0 ) + { + for ( i = 0; i < nChan; i++ ) + { + sMixer[i] = sMixer[i] / (float) nrUsers; + } + } + free( pow ); + + return IVAS_SUCCESS; +} + + +static float get_block_power( + float *vec, + int32_t frame_len ) +{ + int32_t i; + float pow = 0.0f; + + for ( i = 0; i < frame_len; i++ ) + { + pow = pow + vec[i] * vec[i]; + } + + return pow; +} diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.h b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.h new file mode 100644 index 0000000000..8aa4b57130 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.h @@ -0,0 +1,71 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + + +#ifndef IVAS_PROX_MIX_H +#define IVAS_PROX_MIX_H + +/**************************************************************************** +* File description - +* This header file contains declarations which are common between IVAS +* spatial decoding tools +****************************************************************************/ + +/*------------------------------------------------------------------------------------------* +* include header files +*------------------------------------------------------------------------------------------*/ +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include "ivas_stat_dec.h" +#include "ivas_result_t.h" + +/*------------------------------------------------------------------------------------------* +* PreProcessor +*------------------------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------------------------* + * Global variables + *------------------------------------------------------------------------------------------*/ +#define LOC_BITSTREAM_DELIMITER ( 128 ) +#define MAX_BITSTREAM_LEN ( 128 ) +#define POWER_FACT ( 1.2f ) +#define POWER_SMOOTH_HI ( 0.8f ) +#define POWER_SMOOTH_LO ( 0.95f ) + +/*------------------------------------------------------------------------------------------* + * function declarations + *------------------------------------------------------------------------------------------*/ +ivas_result_t get_users_locations( uint8_t *bitstream, int32_t len, int16_t *userLoc ); +ivas_result_t get_prox_downmix_mixer( int16_t userID, float *pMixer, int16_t *userLoc, int32_t nChan, float ppPcm_in[][L_FRAME48k], int32_t frame_len, float *powvec ); + +#endif diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_result_t.h b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_result_t.h new file mode 100644 index 0000000000..7702760f4c --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_result_t.h @@ -0,0 +1,56 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef IVAS_RESULT_H +#define IVAS_RESULT_H + +/*----------------------------------------------------------------------------------* + * IVAS Error codes + *----------------------------------------------------------------------------------*/ + +typedef enum ivas_result_t +{ + IVAS_SUCCESS = 0, + IVAS_FAILED = -1, + IVAS_IO_ERROR = -2, + IVAS_MEM_ERROR = -3, + IVAS_READ_DONE = -4, + IVAS_INVALID_SOFA_FORMAT = -5, + IVAS_SOFA_UNKNOWN_VARIABLE = -6, + IVAS_SOFA_FILE_OPEN_FAILED = -7, + IVAS_SOFA_FILE_READ_FAILED = -8, + IVAS_SOFA_FILE_SEEK_FAILED = -9, + IVAS_SOFA_DATA_UNZIP_FAILED = -10, + +} ivas_result_t; + +#endif diff --git a/scripts/ivas_pytests/tests/unit_tests/test_crend_unittest.py b/scripts/ivas_pytests/tests/unit_tests/test_crend_unittest.py new file mode 100644 index 0000000000..51345971f9 --- /dev/null +++ b/scripts/ivas_pytests/tests/unit_tests/test_crend_unittest.py @@ -0,0 +1,576 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os +import subprocess +import pytest +import errno +import tempfile as tf +import sys +import shutil +from scipy.io.wavfile import read, write +import numpy as np + +unit_test_path = "/scripts/ivas_pytests" +inpath = os.getenv("TESTVECTOR_PATH_REL_GROUPB") +if not inpath: + # Assuming `data` folder is checked out at the same level as trunk + inpath = '../../../data/ivas_pytests/unit_tests/' +inpath_sh = os.getenv("TESTVECTOR_PATH_REL_TRUNK") +if not inpath_sh: + # Assuming `data` folder is checked out at the same level as trunk + inpath_sh = '/../data/ivas_pytests/unit_tests/' + +unit_test_exe = os.getenv("CREND_UNIT_TEST_BIN") +if not unit_test_exe: + if sys.platform.startswith('win32'): + unit_test_exe = 'tests/unit_tests/crend/IVAS_crend_unit_test.exe' + else: + unit_test_exe = './tests/unit_tests/crend/IVAS_crend_unit_test' + +p4EditCmd = 'p4 edit -c ' +p4AddCmd = 'p4 add -c ' +p4RevertCmd = 'p4 revert -a -c ' + + +#Input/Output formats +MONO_1 = '0' +STEREO_2 = '1' +BIN_2 = '2' +FOA_4 = '3' +MULT_CH_5_1 = '4' +MULT_CH_7_1 = '5' +MULT_CH_5_1_2 = '6' +MULT_CH_7_1_4 = '7' +HOA_9 = '8' +HOA_16 = '9' +OBA_25 = '10' + +#List of Tests +CREND_BIN_TEST = '1' +FASTCONV_BIN_TEST = '2' +PARAM_BIN_TEST = '3' +TD_BIN_TEST = '4' +CREND_ACOUSTIC_PROXIMITY = '5' +CREND_NO_DIEGETIC_TEST = '6' +CREND_REVERB = '7' + +CHECK_PASS = 1 +CHECK_FAIL = 0 +CHECK_INFMT_ERROR = 2 + +ZERO_TOL = 0 + +projects = ['/chan_stereo/','/chan_binaural/','/scen_HOA1S/','/chan_standard_510/','/chan_standard_710/'] + +out_fmt_list = [MONO_1, STEREO_2, MULT_CH_5_1, MULT_CH_7_1, MULT_CH_5_1_2, MULT_CH_7_1_4] +prox_path = inpath + 'crend/tests/proximity/bitstream/userSharingLoc.bin' +csv_path = inpath + 'crend/tests/csv/' + +rel_in_csv_file_path_crend = 'crend/tests/crend/in_csv_wav' +in_csv_file_path_crend = inpath + rel_in_csv_file_path_crend +rel_in_new_file_path_crend = 'crend/tests/crend/in_new_wav' +in_new_file_path_crend = inpath + rel_in_new_file_path_crend +rel_in_file_path_crend = 'crend/tests/crend/in_wav' +in_file_path_crend = inpath + rel_in_file_path_crend + +rel_in_file_path_reverb = 'crend/tests/reverb/in_wav' +rel_in_cfg_path_reverb = 'crend/tests/reverb' +in_file_path_reverb = inpath + rel_in_file_path_reverb +render_cfg_path = inpath + 'crend/tests/render_config' + +temp = os.getcwd() + inpath_sh + rel_in_file_path_reverb + +# D:\DEV\IVAS-Ref\trunk\scripts\ivas_pytests\testv\crend\tests + +file_list_reverb_in = os.listdir(os.getcwd() + inpath_sh + rel_in_file_path_reverb) + +in_file_path_prox = inpath + 'crend/tests/proximity/in_wav' + +rel_in_file_path_custom = 'crend/tests/custom/in_wav' +in_file_path_custom = inpath + rel_in_file_path_custom + +file_list_crend_bin = os.listdir(os.getcwd() + inpath_sh + rel_in_file_path_crend) + +file_list_crend_in = os.listdir(os.getcwd() + inpath_sh + rel_in_file_path_crend) +file_list_crend_new = os.listdir(os.getcwd() + inpath_sh + rel_in_new_file_path_crend) +file_list_crend_csv = os.listdir(os.getcwd() + inpath_sh + rel_in_csv_file_path_crend) + +file_list_crend_foa = [file for file in file_list_crend_in if "HOA" in file and ".wav" in file] + +# file_list_crend_in_new_hoa is currently unused +file_list_crend_in_new_hoa = [file for file in file_list_crend_new if "HOA" in file and ".wav" in file] + +# file_list_crend_in_48k is currently unused +file_list_crend_in_48k = [file for file in file_list_crend_in if "48k" in file and ".wav" in file] + +file_list_custom_bin = os.listdir(os.getcwd() + inpath_sh + rel_in_file_path_custom) + +# file_list_custom_bin_48k is currently unused +file_list_custom_bin_48k = [file for file in file_list_custom_bin if "48k" in file and ".wav" in file] + +file_list_custom_hoa = [file for file in file_list_custom_bin if "HOA" in file and ".wav" in file] +def check_and_makedir(dir_path): + if not os.path.exists(dir_path): + try: + os.makedirs(dir_path) + except OSError as e: + if e.errno != errno.EEXIST: + raise # raises the error again + +crend_unit_test_proximity = [(OBA_25, MONO_1, '/proximity/', prox_path),] + +# bin_test_cases = [CREND_BIN_TEST, FASTCONV_BIN_TEST, PARAM_BIN_TEST, TD_BIN_TEST] +bin_test_cases = [CREND_BIN_TEST] + +#CREND_TEST_CSV +@pytest.mark.create_ref +@pytest.mark.parametrize("file", file_list_crend_csv) +def test_ivas_crend_csv(rootdir, update_ref, p4_CL, p4cmd_active, reference_path, dut_base_path, file): + os.chdir(rootdir + unit_test_path) + + if ".wav" in file: + if '32k' in file: + fs = '32' + elif '16k' in file: + fs = '16' + elif '48k' in file: + fs = '48' + else: + fs = 'NA' + + if fs != 'NA': + if reference_path: + ref_file_path_csv = f"{reference_path}/crend/otr/wav" + else: + ref_file_path_csv = inpath + 'crend/tests/otr/ref_wav' + if dut_base_path: + out_file_path_csv = f"{dut_base_path}/crend/otr/wav" + else: + out_file_path_csv = inpath + 'crend/tests/otr/out_wav' + check_and_makedir(out_file_path_csv) + if update_ref == 1: + check_and_makedir(ref_file_path_csv) + + + infile = in_csv_file_path_crend + "/" + file + reffile1 = ref_file_path_csv + "/" + file[:-4] + '_binRot_csv1_ref.wav' + reffile2 = ref_file_path_csv + "/" + file[:-4] + '_binRot_csv2_ref.wav' + reffile3 = ref_file_path_csv + "/" + file[:-4] + '_binRot_csv2_avg.wav' + outfile1 = out_file_path_csv + "/" + file[:-4] + '_binRot_csv1_ref.wav' + outfile2 = out_file_path_csv + "/" + file[:-4] + '_binRot_csv2_ref.wav' + outfile3 = out_file_path_csv + "/" + file[:-4] + '_binRot_csv2_avg.wav' + csvfile1 = csv_path + 'headrot.csv' + csvfile2 = csv_path + 'headrot_case00_3000_q.csv' + + ivas_crend_run(CHECK_PASS, '48', CREND_BIN_TEST, HOA_16, BIN_2, infile, reffile1, outfile1, 'NA', 'NA', 'NA', csvfile1, 'ref', 'NA', 'NA', 'NA', 'NA', update_ref, '', p4cmd_active) + ivas_crend_run(CHECK_PASS, '48', CREND_BIN_TEST, HOA_16, BIN_2, infile, reffile2, outfile2, 'NA', 'NA', 'NA', csvfile2, 'ref', 'NA', 'NA', 'NA', 'NA', update_ref, '', p4cmd_active) + ivas_crend_run(CHECK_PASS, '48', CREND_BIN_TEST, HOA_16, BIN_2, infile, reffile3, outfile3, 'NA', 'NA', 'NA', csvfile2, 'avg', 'NA', 'NA', 'NA', 'NA', update_ref, '', p4cmd_active) + +#CREND_REVERB +@pytest.mark.create_ref +@pytest.mark.parametrize("file", file_list_reverb_in) +def test_ivas_crend_reverb(rootdir, update_ref, p4_CL, p4cmd_active, reference_path, dut_base_path, file): + os.chdir(rootdir + unit_test_path) + + if ".wav" in file: + if '32k' in file: + fs = '32' + elif '16k' in file: + fs = '16' + elif '48k' in file: + fs = '48' + else: + fs = 'NA' + + if fs != 'NA': + if reference_path: + ref_file_path_reverb = f"{reference_path}/crend/reverb/wav" + else: + ref_file_path_reverb = inpath + 'crend/tests/reverb/ref_wav' + if dut_base_path: + out_file_path_reverb = f"{dut_base_path}/crend/reverb/wav" + else: + out_file_path_reverb = inpath + 'crend/tests/reverb/out_wav' + check_and_makedir(out_file_path_reverb) + if update_ref == 1: + check_and_makedir(ref_file_path_reverb) + + infile = in_file_path_reverb + '/' + file + reffile = ref_file_path_reverb + '/' + file[:-4] + '_reverb.wav' + outfile = out_file_path_reverb + '/' + file[:-4] + '_reverb.wav' + render_config_file_path = render_cfg_path + '/' + 'just_reverb.cfg' + + ivas_crend_run(CHECK_PASS, fs, CREND_BIN_TEST, MULT_CH_5_1, BIN_2, infile, reffile, outfile, 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', render_config_file_path, update_ref, p4_CL, p4cmd_active) + +#CREND_PROXIMITY +@pytest.mark.create_ref +@pytest.mark.parametrize("ifmt, ofmt, project, prox", crend_unit_test_proximity) +def test_ivas_crend_proximity(rootdir, update_ref, p4_CL, p4cmd_active, reference_path, dut_base_path, ifmt, ofmt, project, prox): + + project += "" # just to remove a warning about an unused argument + + os.chdir(rootdir + unit_test_path) + + if reference_path: + ref_file_path_prox = f"{reference_path}/crend/proximity/wav" + else: + ref_file_path_prox = inpath + 'crend/tests/proximity/ref_wav' + if dut_base_path: + out_file_path_prox = f"{dut_base_path}/crend/proximity/wav" + else: + out_file_path_prox = inpath + 'crend/tests/proximity/out_wav' + check_and_makedir(out_file_path_prox) + if update_ref == 1: + check_and_makedir(ref_file_path_prox) + + infile = in_file_path_prox + "/" + 'au_up_oba.wav' + reffile = ref_file_path_prox + "/" + 'au_up_oba_100_prox.wav' + outfile = out_file_path_prox + "/" + 'au_up_oba_100_prox.wav' + + ivas_crend_run(CHECK_PASS, '48', CREND_ACOUSTIC_PROXIMITY, ifmt, ofmt, infile, reffile, outfile, 'NA', prox, 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', update_ref, p4_CL, p4cmd_active) + +#CREND_NO_DIEGETIC_TEST +@pytest.mark.create_ref +def test_ivas_crend_non_diegitic(rootdir, update_ref, p4_CL, p4cmd_active, reference_path, dut_base_path): + os.chdir(rootdir + unit_test_path) + + if reference_path: + ref_file_path_crend = f"{reference_path}/crend/crend/wav" + else: + ref_file_path_crend = inpath + 'crend/tests/crend/ref_wav' + if dut_base_path: + out_file_path_crend = f"{dut_base_path}/crend/crend/wav" + else: + out_file_path_crend = inpath + 'crend/tests/crend/out_wav' + check_and_makedir(out_file_path_crend) + if update_ref == 1: + check_and_makedir(ref_file_path_crend) + + fileName = 'stv48c' + + infile = in_new_file_path_crend + "/" + fileName + '.wav' + reffile = ref_file_path_crend + "/" + fileName + '_100_48k_200_non_diegetic_1.wav' + outfile = out_file_path_crend + "/" + fileName + '_100_48k_200_no_diegetic_1.wav' + + ivas_crend_run(CHECK_PASS, '48', CREND_NO_DIEGETIC_TEST, MONO_1, STEREO_2, infile, reffile, outfile, 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', '1', 'NA', 'NA', update_ref, p4_CL, p4cmd_active) + + reffile = ref_file_path_crend + "/" + fileName + '_100_48k_200_non_diegetic_-1.wav' + outfile = out_file_path_crend + "/" + fileName + '_100_48k_200_no_diegetic_-1.wav' + + ivas_crend_run(CHECK_PASS, '48', CREND_NO_DIEGETIC_TEST, MONO_1, STEREO_2, infile, reffile, outfile, 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', '-1', 'NA', 'NA', update_ref, p4_CL, p4cmd_active) + + reffile = ref_file_path_crend + "/" + fileName + '_100_48k_200_non_diegetic_-0.5.wav' + outfile = out_file_path_crend + "/" + fileName + '_100_48k_200_no_diegetic_-0.5.wav' + + ivas_crend_run(CHECK_PASS, '48', CREND_NO_DIEGETIC_TEST, MONO_1, STEREO_2, infile, reffile, outfile, 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', '-0.5', 'NA', 'NA', update_ref, p4_CL, p4cmd_active) + + +#CREND_BIN_TEST +@pytest.mark.create_ref +def test_ivas_crend_reference_tests_bin_test(rootdir, update_ref, p4_CL, p4cmd_active, reference_path, dut_base_path): + os.chdir(rootdir + unit_test_path) + + if reference_path: + ref_file_path_crend = f"{reference_path}/crend/crend/wav" + else: + ref_file_path_crend = inpath + 'crend/tests/crend/ref_wav' + if dut_base_path: + out_file_path_crend = f"{dut_base_path}/crend/crend/wav" + else: + out_file_path_crend = inpath + 'crend/tests/crend/out_wav' + check_and_makedir(out_file_path_crend) + if update_ref == 1: + check_and_makedir(ref_file_path_crend) + + test_cases = bin_test_cases + ir_cases = ['NA','brir'] + add_to_path = '' + + for ir_case in ir_cases: + for test_case in test_cases: + if test_case == CREND_BIN_TEST: + add_to_path = add_to_path + '_' + 'crend' + if 'brir' == ir_case : + add_to_path = 'brir' + else: + add_to_path = 'hrir' + elif test_case == FASTCONV_BIN_TEST: + add_to_path = add_to_path + '_' + 'fastconv' + if 'brir' == ir_case : + add_to_path = 'brir' + else: + add_to_path = 'hrir' + elif test_case == PARAM_BIN_TEST: + if 'brir' == ir_case : + continue + add_to_path = 'hrir' + add_to_path = add_to_path + '_' + 'param' + elif test_case == TD_BIN_TEST: + if 'brir' == ir_case : + continue + add_to_path = 'hrir' + add_to_path = add_to_path + '_' + 'td' + else: + continue + for file in file_list_crend_bin: + if ".wav" in file: + if '32k' in file: + fs = '32' + elif '16k' in file: + fs = '16' + else: + fs = '48' + if '510' in file: + if PARAM_BIN_TEST == test_case : + continue + in_fmt = MULT_CH_5_1 + elif '710' in file: + if PARAM_BIN_TEST == test_case : + continue + in_fmt = MULT_CH_7_1 + elif 'HOA' in file: + if TD_BIN_TEST == test_case : + continue + if 'brir' == ir_case : + continue + in_fmt = FOA_4 + elif '512' in file: + if PARAM_BIN_TEST == test_case : + continue + in_fmt = MULT_CH_5_1_2 + elif '714' in file: + if PARAM_BIN_TEST == test_case : + continue + in_fmt = MULT_CH_7_1_4 + elif 'HOA1' in file: + if TD_BIN_TEST == test_case : + continue + if 'brir' == ir_case : + continue + in_fmt = FOA_4 + elif 'HOA2' in file: + if TD_BIN_TEST == test_case : + continue + if 'brir' in ir_case : + continue + in_fmt = HOA_9 + elif 'HOA3' in file: + if TD_BIN_TEST == test_case : + continue + if 'brir' == ir_case : + continue + in_fmt = HOA_16 + else: + continue + + infile = in_file_path_crend + "/" + file + reffile = f"{ref_file_path_crend}/{file[:-4]}_" + add_to_path + ".wav" + outfile = f"{out_file_path_crend}/{file[:-4]}_" + add_to_path + ".wav" + + ivas_crend_run(CHECK_PASS, fs, test_case, in_fmt, BIN_2, infile, reffile, outfile, ir_case, 'NA', 'NA','NA', 'NA', 'NA', 'NA', 'NA', 'NA', update_ref, p4_CL, p4cmd_active) + + +####### run cmd ####### + +def ivas_crend_run(check_pass, fs, test, in_fmt, out_fmt, infile, reffile, outfile, use_brir, path_prox, use_limiter, csvfile, orientrk, use_lp_lfe, no_diegetic_pan, zero_tol, render_config_file_path, update_ref, p4_CL, p4cmd_active): + + cmd = [ + unit_test_exe, + '-test', test, + ] + + if fs != 'NA': + cmd = cmd + ['-sr', fs] + if in_fmt != 'NA': + cmd = cmd + ['-ifmt', in_fmt] + if out_fmt != 'NA': + cmd = cmd + ['-ofmt', out_fmt] + if infile != 'NA': + cmd = cmd + ['-i', infile] + if outfile != 'NA': + cmd = cmd + ['-o', outfile] + if reffile != 'NA' and update_ref != 1: + cmd = cmd + ['-r', reffile] + if csvfile != 'NA': + cmd = cmd + ['-t', csvfile] + if orientrk != 'NA': + cmd = cmd + ['-otr', orientrk] + if use_limiter != 'NA': + cmd = cmd + ['-limiter'] + if path_prox != 'NA': + cmd = cmd + ['-prox', path_prox] + if use_brir != 'NA': + cmd = cmd + ['-brir', ] + if use_lp_lfe != 'NA': + cmd = cmd + ['-lp_lfe'] + if no_diegetic_pan != 'NA': + if no_diegetic_pan == '-1': + cmd = cmd + ['-no_diegetic_pan', 'left' ] + else: + if no_diegetic_pan == '1': + cmd = cmd + ['-no_diegetic_pan', 'right' ] + else: + if no_diegetic_pan == '0': + cmd = cmd + ['-no_diegetic_pan', 'center' ] + else: + cmd = cmd + ['-no_diegetic_pan', no_diegetic_pan ] + if zero_tol != 'NA': + cmd = cmd + ["-zero_tol"] + if render_config_file_path != 'NA': + cmd = cmd + ["-render_config", render_config_file_path] + + + + ## reference update code here + if update_ref == 1: + new_file = False + if os.path.exists(reffile) and p4cmd_active: + p4cmd = p4EditCmd + p4_CL + ' ' + reffile + assert subprocess.call(p4cmd.split(), shell=False) == 0 + else: + new_file = True + + stdoutfile = tf.NamedTemporaryFile(mode='w', suffix='.txt', prefix='stdout', dir='.', delete=False) + stderrfile = tf.NamedTemporaryFile(mode='w', suffix='.txt', prefix='stderr', dir='.', delete=False) + stdoutname = stdoutfile.name + stderrname = stderrfile.name + print(' '.join(cmd)) + test_status = subprocess.call(cmd, shell=False, stdout=stdoutfile, stderr=stderrfile) + stdoutfile.close() + stderrfile.close() + + if update_ref == 1: + assert test_status == 0 + # convert raw out to wav + shutil.copyfile(outfile, reffile) + # raw2wav(outfile, reffile, int(fs)*1000, format_chans(out_fmt)) + ##Revert if unchanged## + if p4cmd_active: + p4cmd = p4RevertCmd + p4_CL + ' ' + reffile + assert subprocess.call(p4cmd.split(), shell=False) == 0 + if new_file: + p4cmd = p4AddCmd + p4_CL + ' ' + reffile + assert subprocess.call(p4cmd.split(), shell=False) == 0 + ## ref update code ends + else: + # assert integer_frame_check(fs, outfile, out_fmt, test) + # print_error_warning(stderrname) ## print stderr msgs by default + + print("Test status: " + str(test_status)) + if check_pass == CHECK_PASS: + assert test_status == 0 + elif check_pass == CHECK_FAIL: + assert test_status != 0 + elif check_pass == CHECK_INFMT_ERROR: + assert test_status != 0 + assert find_error_warning(stderrname) == 1 + + if os.path.isfile(outfile): + os.remove(outfile) + + + if os.path.isfile(stdoutname): + os.remove(stdoutname) + + if os.path.isfile(stderrname): + os.remove(stderrname) + + + +def find_clipping_warning(filename): + f = open(filename,'r') + clipped = 0 + for line in f: + print(line) + if "IVAS Common Renderer Clipped:" in line: + clipped = 1 + print(clipped) + return clipped + f.close() +def find_error_warning(filename): + f = open(filename,'r') + clipped = 0 + for line in f: + if "Error: CREND HR may only be turned on for SPAR (FOA) inputs." in line: + clipped = 1 + print(clipped) + return clipped + f.close() + +def print_error_warning(filename): + f = open(filename,'r') + print("############Logged STDERR MSGS START##################") + for line in f: + print(line) + print("############Logged STDERR MSGS END##################") + f.close() + +def integer_frame_check(fs, outfile, out_fmt, test): + num_chan = format_chans(out_fmt) + frsz = int(fs)*1000*0.02 + samples = os.stat(outfile).st_size/num_chan/2 + if samples/frsz != samples//frsz: + print(samples, frsz, samples/frsz, samples//frsz) + return False + else: + return True + +def raw2wav(rawfile, wavfile, fs, num_ch): + x = np.fromfile(rawfile, dtype=np.int16) + # numpy fills arrays along 1st dimension before the 0th? + x = x.reshape(len(x)//num_ch, num_ch) + write(wavfile, fs, x) + +def format_chans(out_fmt): + if out_fmt == MONO_1: + num_chan = 1 + elif out_fmt == STEREO_2: + num_chan = 2 + elif out_fmt == BIN_2: + num_chan = 2 + elif out_fmt == FOA_4: + num_chan = 4 + elif out_fmt == MULT_CH_5_1: + num_chan = 6 + elif out_fmt == MULT_CH_7_1: + num_chan = 8 + elif out_fmt == MULT_CH_5_1_2: + num_chan = 8 + elif out_fmt == MULT_CH_7_1_4: + num_chan = 12 + elif out_fmt == HOA_9: + num_chan = 9 + elif out_fmt == HOA_16: + num_chan = 16 + else: + print("Invalid output format.") + assert 0 + return num_chan diff --git a/scripts/ls_layouts/16ch_8+4+4.txt b/scripts/ls_layouts/16ch_8+4+4.txt new file mode 100644 index 0000000000..b69c10a735 --- /dev/null +++ b/scripts/ls_layouts/16ch_8+4+4.txt @@ -0,0 +1,3 @@ +30.0, -30.0, 0.0, 150.0, -150.0, 100.0, -100.0, -180, 45.0, -45.0, 115.0, -115.0, 50.0, -50.0, 125.0, -125.0 + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 30.0, 30.0, 30.0, 30.0, -30.0, -30.0, -30.0, -30.0 + diff --git a/scripts/ls_layouts/4d0.txt b/scripts/ls_layouts/4d0.txt new file mode 100644 index 0000000000..f8f37f46b3 --- /dev/null +++ b/scripts/ls_layouts/4d0.txt @@ -0,0 +1,2 @@ +45, -45, 135, -135 +0, 0, 0, 0 diff --git a/scripts/ls_layouts/4d4.txt b/scripts/ls_layouts/4d4.txt new file mode 100644 index 0000000000..7826a9bc84 --- /dev/null +++ b/scripts/ls_layouts/4d4.txt @@ -0,0 +1,2 @@ +45, -45, 135, -135, 45, -45, 135, -135 +0, 0, 0, 0, 35, 35, 35, 35 diff --git a/scripts/ls_layouts/cicp1.txt b/scripts/ls_layouts/cicp1.txt new file mode 100644 index 0000000000..aa47d0d46d --- /dev/null +++ b/scripts/ls_layouts/cicp1.txt @@ -0,0 +1,2 @@ +0 +0 diff --git a/scripts/ls_layouts/cicp12.txt b/scripts/ls_layouts/cicp12.txt new file mode 100644 index 0000000000..75368406a3 --- /dev/null +++ b/scripts/ls_layouts/cicp12.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110, 135, -135 +0, 0, 0, 0, 0, 0, 0 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp13.txt b/scripts/ls_layouts/cicp13.txt new file mode 100644 index 0000000000..5ff15f86c1 --- /dev/null +++ b/scripts/ls_layouts/cicp13.txt @@ -0,0 +1,3 @@ +0, 30 -30, 60, -60, 90, -90, 135, -135, 180, 0, 45, -45, 90, -90, 0, 135, -135, 180, 0, 45, -45 +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 90, 35, 35, 35, -15, -15, -15 +3, 9 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp14.txt b/scripts/ls_layouts/cicp14.txt new file mode 100644 index 0000000000..5f39e5f581 --- /dev/null +++ b/scripts/ls_layouts/cicp14.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110, 30, -30 + 0, 0, 0, 0, 0, 35, 35 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp15.txt b/scripts/ls_layouts/cicp15.txt new file mode 100644 index 0000000000..44311e1c5f --- /dev/null +++ b/scripts/ls_layouts/cicp15.txt @@ -0,0 +1,3 @@ +0, 30, -30, 90, -90, 135, -135, 45, -45, 180, 45, -45 +0, 0, 0, 0, 0, 0, 0, 35, 35, 45, -15, -15 +3, 9 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp16.txt b/scripts/ls_layouts/cicp16.txt new file mode 100644 index 0000000000..bce7d1fc02 --- /dev/null +++ b/scripts/ls_layouts/cicp16.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110, 30, -30, 110, -110 +0, 0, 0, 0, 0, 35, 35, 35, 35 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp17.txt b/scripts/ls_layouts/cicp17.txt new file mode 100644 index 0000000000..1852b65ea0 --- /dev/null +++ b/scripts/ls_layouts/cicp17.txt @@ -0,0 +1,3 @@ +0, 30, -30, 110, -110, 30, -30, 0, 110, -110, 0 +0, 0, 0, 0, 0, 30, 30, 30, 30, 30, 90 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp18.txt b/scripts/ls_layouts/cicp18.txt new file mode 100644 index 0000000000..03a65541e0 --- /dev/null +++ b/scripts/ls_layouts/cicp18.txt @@ -0,0 +1,3 @@ +0, 30, -30, 110, -110, 150, -150, 30, -30, 0, 110, -110, 0 +0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30, 90 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp19.txt b/scripts/ls_layouts/cicp19.txt new file mode 100644 index 0000000000..f0aa03635c --- /dev/null +++ b/scripts/ls_layouts/cicp19.txt @@ -0,0 +1,3 @@ +30, -30, 0, 135, -135, 90, -90, 30, -30, 135, -135 +0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp2.txt b/scripts/ls_layouts/cicp2.txt new file mode 100644 index 0000000000..df2e8b7638 --- /dev/null +++ b/scripts/ls_layouts/cicp2.txt @@ -0,0 +1,2 @@ +30, -30 + 0, 0 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp20.txt b/scripts/ls_layouts/cicp20.txt new file mode 100644 index 0000000000..5fc6557900 --- /dev/null +++ b/scripts/ls_layouts/cicp20.txt @@ -0,0 +1,3 @@ +0, 15, -15, 30, -30, 90, -90, 135, -135, 45, -45, 0, 135, -135 +0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp3.txt b/scripts/ls_layouts/cicp3.txt new file mode 100644 index 0000000000..58c682a357 --- /dev/null +++ b/scripts/ls_layouts/cicp3.txt @@ -0,0 +1,2 @@ +30, -30, 0 + 0, 0, 0 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp4.txt b/scripts/ls_layouts/cicp4.txt new file mode 100644 index 0000000000..1576fb2dc4 --- /dev/null +++ b/scripts/ls_layouts/cicp4.txt @@ -0,0 +1,2 @@ +30, -30, 0, 180 + 0, 0, 0, 0 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp5.txt b/scripts/ls_layouts/cicp5.txt new file mode 100644 index 0000000000..54d87ac35b --- /dev/null +++ b/scripts/ls_layouts/cicp5.txt @@ -0,0 +1,2 @@ +30, -30, 0, 110, -110 + 0, 0, 0, 0, 0 diff --git a/scripts/ls_layouts/cicp6.txt b/scripts/ls_layouts/cicp6.txt new file mode 100644 index 0000000000..ed5c1fe484 --- /dev/null +++ b/scripts/ls_layouts/cicp6.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110 +0, 0, 0, 0, 0 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/cicp7.txt b/scripts/ls_layouts/cicp7.txt new file mode 100644 index 0000000000..190ea6e187 --- /dev/null +++ b/scripts/ls_layouts/cicp7.txt @@ -0,0 +1,3 @@ +30, -30, 0, 45, -45, 110, -110 + 0, 0, 0, 0, 0, 0, 0 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/custom1.txt b/scripts/ls_layouts/custom1.txt new file mode 100644 index 0000000000..a7d474da9b --- /dev/null +++ b/scripts/ls_layouts/custom1.txt @@ -0,0 +1,2 @@ +45, -45, 0, 150, -150, 100,-100, 45, -45, 150, -150 +0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_0+2+0.txt b/scripts/ls_layouts/itu_0+2+0.txt new file mode 100644 index 0000000000..8b15eda33d --- /dev/null +++ b/scripts/ls_layouts/itu_0+2+0.txt @@ -0,0 +1,2 @@ +30, -30 + 0, 0 diff --git a/scripts/ls_layouts/itu_0+5+0.txt b/scripts/ls_layouts/itu_0+5+0.txt new file mode 100644 index 0000000000..97f77f5a19 --- /dev/null +++ b/scripts/ls_layouts/itu_0+5+0.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110 + 0, 0, 0, 0, 0 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_0+7+0.txt b/scripts/ls_layouts/itu_0+7+0.txt new file mode 100644 index 0000000000..7c5c628556 --- /dev/null +++ b/scripts/ls_layouts/itu_0+7+0.txt @@ -0,0 +1,3 @@ +30, -30, 0, 90, -90, 135, -135 + 0, 0, 0, 0, 0, 0, 0 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_2+5+0.txt b/scripts/ls_layouts/itu_2+5+0.txt new file mode 100644 index 0000000000..c9555de031 --- /dev/null +++ b/scripts/ls_layouts/itu_2+5+0.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110, 30, -30 + 0, 0, 0, 0, 0, 30, 30 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_3+7+0.txt b/scripts/ls_layouts/itu_3+7+0.txt new file mode 100644 index 0000000000..e4e207cc2f --- /dev/null +++ b/scripts/ls_layouts/itu_3+7+0.txt @@ -0,0 +1,3 @@ +0, 30, -30, 45, -45, 90, -90, 135, -135, 180 +0, 0, 0, 30, 30, 0, 0, 0, 0, 45 +10, 11 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_4+5+0.txt b/scripts/ls_layouts/itu_4+5+0.txt new file mode 100644 index 0000000000..e4068eb052 --- /dev/null +++ b/scripts/ls_layouts/itu_4+5+0.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110, 30, -30, 110, -110 + 0, 0, 0, 0, 0, 30, 30, 30, 30 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_4+5+1.txt b/scripts/ls_layouts/itu_4+5+1.txt new file mode 100644 index 0000000000..b6704824d9 --- /dev/null +++ b/scripts/ls_layouts/itu_4+5+1.txt @@ -0,0 +1,3 @@ +30, -30, 0, 110, -110, 30, -30, 110, -110, 0 + 0, 0, 0, 0, 0, 30, 30, 30, 30, -30 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_4+7+0.txt b/scripts/ls_layouts/itu_4+7+0.txt new file mode 100644 index 0000000000..556801687c --- /dev/null +++ b/scripts/ls_layouts/itu_4+7+0.txt @@ -0,0 +1,3 @@ +30, -30, 0, 90, -90, 135, -135, 45, -45, 135, -135 + 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_4+9+0.txt b/scripts/ls_layouts/itu_4+9+0.txt new file mode 100644 index 0000000000..0ef5f3e24e --- /dev/null +++ b/scripts/ls_layouts/itu_4+9+0.txt @@ -0,0 +1,3 @@ +30, -30, 0, 90, -90, 135, -135, 45, -45, 135, -135, 15, -15 + 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 0, 0 +3 \ No newline at end of file diff --git a/scripts/ls_layouts/itu_9+10+3.txt b/scripts/ls_layouts/itu_9+10+3.txt new file mode 100644 index 0000000000..b11a6483dc --- /dev/null +++ b/scripts/ls_layouts/itu_9+10+3.txt @@ -0,0 +1,3 @@ +60, -60, 0, 135, -135, 30, -30, 180, 90, -90, 45, -45, 0, 0, 135, -135, 90, -90, 180, 0, 45, -45 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 90, 30, 30, 30, 30, 30, -30, -30, -30 +3, 9 \ No newline at end of file diff --git a/scripts/ls_layouts/t_design_1.txt b/scripts/ls_layouts/t_design_1.txt new file mode 100644 index 0000000000..ebd50d1cbd --- /dev/null +++ b/scripts/ls_layouts/t_design_1.txt @@ -0,0 +1,2 @@ +0, 180 +0, 0 \ No newline at end of file diff --git a/scripts/ls_layouts/t_design_2.txt b/scripts/ls_layouts/t_design_2.txt new file mode 100644 index 0000000000..b8b4d741ee --- /dev/null +++ b/scripts/ls_layouts/t_design_2.txt @@ -0,0 +1,2 @@ +45.0000, -45.0000, 135.0000,-135.0000 +35.2644, -35.2644, -35.2644, 35.2644 \ No newline at end of file diff --git a/scripts/ls_layouts/t_design_3.txt b/scripts/ls_layouts/t_design_3.txt new file mode 100644 index 0000000000..477adce36f --- /dev/null +++ b/scripts/ls_layouts/t_design_3.txt @@ -0,0 +1,2 @@ +0, 180, 90, -90, 0, 0 +0, 0, 0, 0, 90, -90 \ No newline at end of file diff --git a/scripts/ls_layouts/t_design_4.txt b/scripts/ls_layouts/t_design_4.txt new file mode 100644 index 0000000000..d8b3a24be1 --- /dev/null +++ b/scripts/ls_layouts/t_design_4.txt @@ -0,0 +1,2 @@ + 0, -58.2825, -90.0000, 0, -121.7175, 90.0000, 180.0000, 121.7175, 90.0000, 180.0000, 58.2825, -90.0000 +-31.7175, 0, 58.2825, 31.7175, 0, -58.2825, -31.7175, 0, 58.2825, 31.7175, 0, -58.2825 \ No newline at end of file diff --git a/scripts/ls_layouts/test_anglewrapping_dedupe.txt b/scripts/ls_layouts/test_anglewrapping_dedupe.txt new file mode 100644 index 0000000000..16bcd6b646 --- /dev/null +++ b/scripts/ls_layouts/test_anglewrapping_dedupe.txt @@ -0,0 +1,3 @@ +0, 360, 180, 540, 45, -315, 0, 0, 45, 405, +0, 0, 0, 0, 45, -315, -90, 270, 45, 405, + , \ No newline at end of file diff --git a/scripts/parse_options_h.sh b/scripts/parse_options_h.sh new file mode 100644 index 0000000000..452e87f9b8 --- /dev/null +++ b/scripts/parse_options_h.sh @@ -0,0 +1,167 @@ +#!/bin/bash + +# +# (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, +# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +# contributors to this repository. All Rights Reserved. +# +# This software is protected by copyright law and by international treaties. +# The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, +# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +# contributors to this repository retain full ownership rights in their respective contributions in +# the software. This notice grants no license of any kind, including but not limited to patent +# license, nor is any license granted by implication, estoppel or otherwise. +# +# Contributors are required to enter into the IVAS codec Public Collaboration agreement before making +# contributions. +# +# This software is provided "AS IS", without any express or implied warranties. The software is in the +# development stage. It is intended exclusively for experts who have experience with such software and +# solely for the purpose of inspection. All implied warranties of non-infringement, merchantability +# and fitness for a particular purpose are hereby disclaimed and excluded. +# +# Any dispute, controversy or claim arising under or in relation to providing this software shall be +# submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in +# accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and +# the United Nations Convention on Contracts on the International Sales of Goods. +# + +help=0 +coan=0 +opt_cnt=0 + +while getopts "hc" OPT; do + case "$OPT" in + h) help=1;; + c) coan=1;let opt_cnt++;; + *) # getopts produces error + exit 1;; + esac +done + +let max_args="1+$opt_cnt" +if [ $# -ne $max_args ] || [ $help -ne 0 ]; then + echo "Usage: $0 [-c] inputfile" + echo " -c: coan syntax at output" + exit +fi + +infile=$BASH_ARGV + +activeSwitches=( ); +inactiveSwitches=( ); + +if_lev=0 +comment_lev=0 +comment_incr_post=0 +comment_decr_post=0 + +declare -i active_code=( "1" ); + +while read line +do + + #check, whether we are in a comment block + comment_incr=`echo "$line" | grep -o "\(\/\*\|\*\/\)" | grep "\/\*" | wc -l` + comment_decr=`echo "$line" | grep -o "\(\/\*\|\*\/\)" | grep "\*\/" | wc -l` + tmp=`echo "$line" | grep -c "^\ *#"` + if [ $comment_incr -gt $comment_decr -a $tmp -gt 0 ]; then + let comment_incr-- + comment_incr_post_tmp=1 + fi + if [ $comment_decr -gt $comment_incr -a $tmp -gt 0 ]; then + let comment_decr-- + comment_decr_post_tmp=1 + fi + let incr=comment_incr+comment_incr_post + let comment_lev+=incr + let decr=comment_decr+comment_decr_post + let comment_lev-=decr + comment_incr_post=$comment_incr_post_tmp + comment_decr_post=$comment_decr_post_tmp + + if [ $comment_lev -eq 0 ]; then + + if [ `echo "$line" | grep -c "^\ *#if"` -gt 0 ]; then + is_active=${active_code[$if_lev]} + let if_lev++ + tmp=1 + if [ $is_active -eq 1 ]; then + if [ `echo "$line" | grep -c "#if\ *0"` -gt 0 ]; then + tmp=0 + fi + + if [ `echo "$line" | grep -c "#ifdef"` -gt 0 ]; then + switch=`echo "$line" | sed -e "s/\(\ *#ifdef\ *\)\([a-zA-Z0-9_]*\)\(.*\)/\2/g"` + if [[ " ${activeSwitches[@]} " =~ " ${switch} " ]]; then + tmp=1 + else + tmp=0 + fi + fi + + if [ `echo "$line" | grep -c "#ifndef"` -gt 0 ]; then + switch=`echo "$line" | sed -e "s/\(\ *#ifndef\ *\)\([a-zA-Z0-9_]*\)\(.*\)/\2/g"` + if [[ " ${activeSwitches[@]} " =~ " ${switch} " ]]; then + tmp=0 + else + tmp=1 + fi + fi + + if [ `echo "$line" | grep -c "#if\ *[!(]*defined"` -gt 0 ]; then + echo "$0: #if defined or similar expressions not supported. Aborting." 1>&2 + exit -1; + fi + + else + tmp=0 + fi + active_code=( ${active_code[@]} $tmp ) + fi + + if [ `echo "$line" | grep -c "#endif"` -gt 0 ]; then + unset active_code[$if_lev] + let if_lev-- + fi + + fi + + active=`echo "$line" | grep '^\ *#define' | sed -e "s/\(\ *#define\ *\)\([a-zA-Z0-9_]*\)\(.*\)/\2/g" | sed -e "/OPTIONS_H/d" | sed -e "/DEBUGGING/d"` + # support both, /* ... */ and // style comments + inactive=`echo "$line" | grep '^\ *\(\/\*\|\/\/\)\{1,\}\ *#define' | sed -e "s/\(.*#define\ *\)\([a-zA-Z0-9_]*\)\(.*\)/\2/g" | sed -e '/^WMOPS$/d'` + + if [ ${comment_lev} -eq 0 -a ${active_code[$if_lev]} -eq 1 ]; then + activeSwitches=( "${activeSwitches[@]}" $active ) + elif [[ ! " ${activeSwitches[@]} " =~ "${active} " ]]; then + inactiveSwitches=( "${inactiveSwitches[@]}" $active ) + fi + inactiveSwitches=( "${inactiveSwitches[@]}" $inactive ) +done < $infile + +keyActive="+" +keyInactive="" +if [ $coan -ne 0 ]; then + keyActive="-D" + keyInactive="-U" +fi + +# print active switches +index=0 +while [ "$index" -lt ${#activeSwitches[@]} ] +do # List all the elements in the array. + echo "${keyActive}${activeSwitches[index]}" + let index++ +done + +# print inactive switches +index=0 +while [ "$index" -lt ${#inactiveSwitches[@]} ] +do # List all the elements in the array. + echo "${keyInactive}${inactiveSwitches[index]}" + let index++ +done diff --git a/scripts/parse_selftest_summary.py b/scripts/parse_selftest_summary.py new file mode 100644 index 0000000000..17ac7678f4 --- /dev/null +++ b/scripts/parse_selftest_summary.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +"""Parse the output from self_test.py, self_test_summary.txt, and check for test success.""" + +import sys +import re +from pathlib import Path + +HERE = Path(__file__).parent.resolve() +SUMMARY_FILE = HERE.joinpath("self_test_summary.txt") + +if not SUMMARY_FILE.is_file(): + print(f"{SUMMARY_FILE} not found!") + sys.exit(1) + +with open(str(SUMMARY_FILE), "r") as file: + for line in file.readlines(): + print(line) + if re.match("All [0-9]* tests are bitexact", line): + print("Selftest: OK") + sys.exit(0) + +print("Selftest: Output not bit exact") +sys.exit(1) diff --git a/scripts/prepare_instrumentation.sh b/scripts/prepare_instrumentation.sh new file mode 100644 index 0000000000..8ab50080a2 --- /dev/null +++ b/scripts/prepare_instrumentation.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +# +# (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, +# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +# contributors to this repository. All Rights Reserved. +# +# This software is protected by copyright law and by international treaties. +# The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, +# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +# contributors to this repository retain full ownership rights in their respective contributions in +# the software. This notice grants no license of any kind, including but not limited to patent +# license, nor is any license granted by implication, estoppel or otherwise. +# +# Contributors are required to enter into the IVAS codec Public Collaboration agreement before making +# contributions. +# +# This software is provided "AS IS", without any express or implied warranties. The software is in the +# development stage. It is intended exclusively for experts who have experience with such software and +# solely for the purpose of inspection. All implied warranties of non-infringement, merchantability +# and fitness for a particular purpose are hereby disclaimed and excluded. +# +# Any dispute, controversy or claim arising under or in relation to providing this software shall be +# submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in +# accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and +# the United Nations Convention on Contracts on the International Sales of Goods. +# + +emulator="" +system=`uname -s` +if [[ ($system == "Linux") && (`uname -a` == *@(microsoft|Microsoft|wsl|WSL)*) ]]; then + system="WSL" +fi +if [[ ($system == "Linux") || ($system == "Darwin") ]]; then + emulator="wine" +fi + + +coan_exists () { + type coan &> /dev/null ; +} + +cppp_exists () { + type cppp/cpppnet.pl &> /dev/null ; +} + +if ! (coan_exists || cppp_exists); then + echo "Neither coan (recommended) nor cppp could be found. Requires either coan or cppp to operate properly. Exiting." + echo "Coan is available from http://coan2.sourceforge.net/; please make it available in your path" + echo "cppp is available from https://homes.cs.washington.edu/~mernst/software/#cppp; please copy to directory scripts/cppp" + exit -1 +fi + +targetdir=c-code_instrument + +currdir=`pwd` +scriptdir=`dirname $0` +ifdef_list=ifdef_instrument.list +sourcedir=$scriptdir/.. +cd $scriptdir + +rm -Rf $targetdir +mkdir $targetdir + +# copy files from source-dir +cp -R ../lib_* $targetdir +cp -R ../apps $targetdir +cp -R ../Makefile $targetdir +cp -R ../Workspace_msvc $targetdir + +# back up #ifdef-list +rm -f $ifdef_list +touch $ifdef_list + +# get switches from options.h and append it to $ifdef_list +parse_options_opt="" +if coan_exists; then + echo "-UDEBUGGING" >> $ifdef_list + parse_options_opt="-c" +else + echo "DEBUGGING" >> $ifdef_list +fi +./parse_options_h.sh $parse_options_opt $targetdir/lib_com/options.h >> $ifdef_list +if [ $? -ne 0 ]; then + exit -1 +fi + +# strip switches, to remove the macros +if coan_exists; then + coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,util,debug}/*.[hc] + coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/apps/*.[hc] +else + ./strip_defines_cpppnet.sh $targetdir $ifdef_list +fi + +# patch code before wmc_tool: replace hexadecimal unsigned long constants (0x...UL) by regular integer constant + cast to unsigned long +find $targetdir -name "*.[ch]" -exec sed -i.bak -e "s/\(0x[0-9a-fA-F]*\)UL/\(\(unsigned long\)\1\)/" \{\} \; + +# run wmc_tool using wine +${emulator} ./wmc_tool.exe $targetdir/lib_enc/*.c /ic /op > /dev/null +${emulator} ./wmc_tool.exe $targetdir/lib_com/*.c /ic /op > /dev/null +${emulator} ./wmc_tool.exe $targetdir/lib_dec/*.c /ic /op > /dev/null + +# automatically enable #define WMOPS in options.h +sed -i.bak -e "s/\/\*\s*\(#define\s*WMOPS\)\s*\*\//\1/g" $targetdir/lib_com/options.h +sed -i.bak -e "s/\/\/\s*\(#define\s*WMOPS\)/\1/g" $targetdir/lib_com/options.h + +# return to start dir +cd "$currdir" diff --git a/scripts/prerenderer/Makefile b/scripts/prerenderer/Makefile new file mode 100644 index 0000000000..dae07e0411 --- /dev/null +++ b/scripts/prerenderer/Makefile @@ -0,0 +1,175 @@ +# GNU Makefile + +# Paths +SRC_LIBCOM = ../../lib_com +SRC_LIBDEBUG = ../../lib_debug +SRC_LIBDEC = ../../lib_dec +SRC_LIBENC = ../../lib_enc +SRC_LIBUTIL = ../../lib_util +SRC_APP = . +BUILD = build +OBJDIR = obj + +SRC_DIRS = $(sort -u $(SRC_LIBCOM) $(SRC_LIBDEBUG) $(SRC_LIBDEC) $(SRC_LIBENC) $(SRC_LIBUTIL) $(SRC_APP)) + +# Name of CLI binaries +CLI_PRD ?= IVAS_prerenderer +LIB_LIBCOM ?= libivascom.a +LIB_LIBDEBUG ?= libivasdebug.a +LIB_LIBDEC ?= libivasdec.a +LIB_LIBENC ?= libivasenc.a +LIB_LIBUTIL ?= libivasutil.a + +# Default tool settings +CC ?= gcc +RM ?= rm -f +AR ?= ar + +# Detect system +UNAME_S := $(shell uname -s) + +# Switches for cross-platform builds (i.e. build 32 bit code on 64 bit platforms) +ifneq "$(TARGET_PLATFORM)" "" +ifeq ("$(TARGET_PLATFORM)", "$(findstring $(TARGET_PLATFORM), i386 i586 i686)") + CFLAGS += -m32 + LDFLAGS += -m32 +endif + +ifeq ("$(TARGET_PLATFORM)", "$(findstring $(TARGET_PLATFORM), x86_64)") + CFLAGS += -m64 + LDFLAGS += -m64 +endif +endif + +ifndef VERBOSE +QUIET_CC = @echo ' ' Compiling $<; +QUIET_LINK= @echo ' ' Linking $@; +QUIET_AR = @echo ' ' Archiving $@; +QUIET = @ +endif + +# C compiler flags +CFLAGS += -std=c99 -pedantic -Wcast-qual -Wall -W -Wextra -Wno-long-long \ + -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ + -Werror-implicit-function-declaration -Wno-unused-parameter \ + -Wno-unused-function -Wno-implicit-fallthrough + +# libs to link +LDLIBS += -lm + +# Clang sanitizer compiler options +CCCLANG = clang +ifeq "$(CLANG)" "1" +CC = $(CCCLANG) +CFLAGS += -fsanitize=memory +LDFLAGS += -fsanitize=memory +endif +ifeq "$(CLANG)" "2" +CC = $(CCCLANG) +CFLAGS += -fsanitize=address +LDFLAGS += -fsanitize=address +endif +ifeq "$(CLANG)" "3" +CC = $(CCCLANG) +CFLAGS += -fsanitize=undefined +LDFLAGS += -fsanitize=undefined +endif + +ifeq "$(RELEASE)" "1" +CFLAGS += -DRELEASE +OPTIM ?= 2 +endif + +ifneq "$(DEBUG)" "0" +CFLAGS += -g3 +LDFLAGS += -g3 +endif + +ifeq "$(GCOV)" "1" +CFLAGS += -fprofile-arcs -ftest-coverage +LDFLAGS += -fprofile-arcs -ftest-coverage +endif + +ifeq "$(STRIP)" "1" +CFLAGS += -fdata-sections -ffunction-sections +ifneq ($(UNAME_S),Darwin) +LDFLAGS += -Wl,-gc-sections -static +else +LDFLAGS += -Wl,-dead_strip +endif +endif + +OPTIM ?= 0 +CFLAGS += -O$(OPTIM) + +CFLAGS += $(foreach DIR,$(SRC_DIRS),-I$(DIR)) + +# Source file search paths +VPATH = $(SRC_DIRS) + +############################################################################### + +SRCS_LIBCOM = $(foreach DIR,$(SRC_LIBCOM),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBDEBUG = $(foreach DIR,$(SRC_LIBDEBUG),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBDEC = $(foreach DIR,$(SRC_LIBDEC),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBENC = $(foreach DIR,$(SRC_LIBENC),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBUTIL = $(foreach DIR,$(SRC_LIBUTIL),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) + +OBJS_LIBCOM = $(addprefix $(OBJDIR)/,$(SRCS_LIBCOM:.c=.o)) +OBJS_LIBDEBUG = $(addprefix $(OBJDIR)/,$(SRCS_LIBDEBUG:.c=.o)) +OBJS_LIBDEC = $(addprefix $(OBJDIR)/,$(SRCS_LIBDEC:.c=.o)) +OBJS_LIBENC = $(addprefix $(OBJDIR)/,$(SRCS_LIBENC:.c=.o)) +OBJS_LIBUTIL = $(addprefix $(OBJDIR)/,$(SRCS_LIBUTIL:.c=.o)) +OBJS_CLI_APPPRD = $(OBJDIR)/prerenderer.o + +DEPS = $(addprefix $(OBJDIR)/,$(SRCS_LIBCOM:.c=.P) $(SRCS_LIBDEBUG:.c=.P) $(SRCS_LIBDEC:.c=.P) \ + $(SRCS_LIBENC:.c=.P) $(SRCS_LIBUTIL:.c=.P)) + +############################################################################### + +.PHONY: all clean clean_all +.NOTPARALLEL: clean clean_all + +all: $(CLI_PRD) + +$(OBJDIR): + $(QUIET)mkdir -p $(OBJDIR) + +$(LIB_LIBCOM): $(OBJS_LIBCOM) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBDEBUG): $(OBJS_LIBDEBUG) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBDEC): $(OBJS_LIBDEC) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBENC): $(OBJS_LIBENC) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBUTIL): $(OBJS_LIBUTIL) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(CLI_PRD): $(LIB_LIBENC) $(LIB_LIBDEC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBUTIL) $(OBJS_CLI_APPPRD) + $(QUIET_LINK)$(CC) $(LDFLAGS) $(OBJS_CLI_APPPRD) -L. -livasutil -livasenc -livasdec -livascom -livasdebug $(LDLIBS) -o $(CLI_PRD) + +libs: $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBDEC) $(LIB_LIBUTIL) + +#.NOTPARALLEL: clean clean_all + +clean: + $(QUIET)$(RM) $(OBJS_LIBENC) $(OBJS_LIBDEC) $(OBJS_CLI_APPPRD) $(DEPS) + $(QUIET)$(RM) $(DEPS:.P=.d) + $(QUIET)test ! -d $(OBJDIR) || rm -rf $(OBJDIR) + +clean_all: clean + $(QUIET)$(RM) $(CLI_PRD) $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBDEC) $(LIB_LIBUTIL) + +$(OBJDIR)/%.o : %.c | $(OBJDIR) + $(QUIET_CC)$(CC) $(CFLAGS) -c -MD -o $@ $< + @cp $(OBJDIR)/$*.d $(OBJDIR)/$*.P; \ + sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ + -e '/^$$/ d' -e 's/$$/ :/' < $(OBJDIR)/$*.d >> $(OBJDIR)/$*.P; \ + $(RM) $(OBJDIR)/$*.d + +-include $(DEPS) diff --git a/scripts/prerenderer/Workspace_msvc/Workspace_msvc_prerenderer.sln b/scripts/prerenderer/Workspace_msvc/Workspace_msvc_prerenderer.sln new file mode 100644 index 0000000000..b36220e618 --- /dev/null +++ b/scripts/prerenderer/Workspace_msvc/Workspace_msvc_prerenderer.sln @@ -0,0 +1,48 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27428.2027 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "prerenderer", "prerenderer.vcxproj", "{12B4C8A5-1E06-4E30-B443-D1F916F52B47}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_util", "..\..\..\Workspace_msvc\lib_util.vcxproj", "{2FA8F384-0775-F3B7-F8C3-85209222FC70}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_debug", "..\..\..\Workspace_msvc\lib_debug.vcxproj", "{54509728-928B-44D9-A118-A6F92F08B34F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_com", "..\..\..\Workspace_msvc\lib_com.vcxproj", "{39EC200D-7795-4FF8-B214-B24EDA5526AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_dec", "..\..\..\Workspace_msvc\lib_dec.vcxproj", "{E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {12B4C8A5-1E06-4E30-B443-D1F916F52B47}.Debug|Win32.ActiveCfg = Debug|Win32 + {12B4C8A5-1E06-4E30-B443-D1F916F52B47}.Debug|Win32.Build.0 = Debug|Win32 + {12B4C8A5-1E06-4E30-B443-D1F916F52B47}.Release|Win32.ActiveCfg = Release|Win32 + {12B4C8A5-1E06-4E30-B443-D1F916F52B47}.Release|Win32.Build.0 = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.ActiveCfg = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.Build.0 = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.ActiveCfg = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.Build.0 = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.ActiveCfg = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.Build.0 = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.ActiveCfg = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.Build.0 = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.Build.0 = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.ActiveCfg = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.Build.0 = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.Build.0 = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.ActiveCfg = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {06AC6878-76C6-4079-956D-B3FF3DB2C9A5} + EndGlobalSection +EndGlobal diff --git a/scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj b/scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj new file mode 100644 index 0000000000..ed2ad4ff85 --- /dev/null +++ b/scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj @@ -0,0 +1,189 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + prerenderer + {12b4c8a5-1e06-4e30-b443-d1f916f52b47} + prerenderer + 10.0.17763.0 + + + + Application + v141 + false + MultiByte + + + Application + v141 + false + MultiByte + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27428.2015 + + + .. + .\Debug_$(ProjectName)\ + false + false + IVAS_prerenderer + + + .. + .\Release_$(ProjectName)\ + false + false + IVAS_prerenderer + + + + $(IntDir)$(ProjectName).tlb + + + + Disabled + ..\..\..\lib_com;..\..\..\lib_debug;..\..\..\lib_dec;..\..\..\lib_enc;..\..\..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + EnableFastChecks + MultiThreadedDebug + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + OldStyle + Default + 4100;%(DisableSpecificWarnings) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + + $(OutDir)$(TargetName).exe + true + + false + true + $(IntDir)$(ProjectName).pdb + Console + + false + + MachineX86 + + + + + $(IntDir)$(ProjectName).tlb + + + + MaxSpeed + AnySuitable + false + Neither + false + false + ..\..\..\lib_com;..\..\..\lib_debug;..\..\..\lib_dec;..\..\..\lib_enc;..\..\..\lib_util;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + + Default + MultiThreaded + true + Precise + false + + + $(IntDir)$(ProjectName).pdb + Level4 + true + + Default + 4100;%(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c0c + + + $(OutDir)$(TargetName).exe + true + + false + $(IntDir)$(ProjectName).pdb + Console + false + + MachineX86 + + + + + {54509728-928B-44D9-A118-A6F92F08B34F} + false + + + {2FA8F384-0775-F3B7-F8C3-85209222FC70} + false + + + {39ec200d-7795-4ff8-b214-b24eda5526ae} + false + + + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3} + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj.filters b/scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj.filters new file mode 100644 index 0000000000..ae26ad88ba --- /dev/null +++ b/scripts/prerenderer/Workspace_msvc/prerenderer.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + dec_ivas_c + + + enc_ivas_c + + + + + + + + {4fc737f1-c7a5-4376-a066-2a32d752a2ff} + + + {93995380-89bd-4b04-88eb-625fbe52ebfb} + + + {46364e80-1212-3600-1d53-58d3725f5bdc} + + + {67da6ab6-f800-4c08-8b7a-83bb121aad01} + + + + + + + \ No newline at end of file diff --git a/scripts/prerenderer/prerenderer.c b/scripts/prerenderer/prerenderer.c new file mode 100644 index 0000000000..0cfcd88b2e --- /dev/null +++ b/scripts/prerenderer/prerenderer.c @@ -0,0 +1,1547 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "options.h" +#include "audio_file_reader.h" +#include "audio_file_writer.h" +#include "common_api_types.h" +#include "ivas_prerenderer.h" +#include "ism_file_reader.h" +#include "ivas_stat_dec.h" +#include "prot.h" +#ifdef WMOPS +#include "wmops.h" +#endif +#ifdef RAM_COUNTING_TOOL +#include "mem_count.h" +#endif +#include +#include +#include +#include +#include +#include + +#ifndef count_malloc +#ifdef RAM_COUNTING_TOOL +#define count_malloc( n1 ) MALLOC_FCT_CALL( n1 ) +#define count_calloc( n1, n2 ) CALLOC_FCT_CALL( n1, n2 ) +#define count_free( ptr ) FREE_FCT_CALL( ptr ) +#else +#define count_malloc( n1 ) malloc( n1 ) +#define count_calloc( n1, n2 ) calloc( n1, n2 ) +#define count_free( ptr ) free( ptr ) +#endif +#endif + +#ifndef min +#define min( x, y ) ( ( x ) < ( y ) ? ( x ) : ( y ) ) +#endif + +#ifndef max +#define max( x, y ) ( ( x ) > ( y ) ? ( x ) : ( y ) ) +#endif + +#define PRERENDERER_MAX_METADATA_LENGTH 8192 +#define PRERENDERER_MAX_METADATA_LINE_LENGTH 1024 +#define PRERENDERER_MAX_CMDLN_ARG_LENGTH FILENAME_MAX + +#if !defined( DEBUGGING ) && !defined( WMOPS ) +static +#endif + int32_t frame = 0; + +#ifdef _WIN32 +#define SEP_FOLDER '\\' +#else +#define SEP_FOLDER '/' +#endif + +#ifdef WMOPS +/* void print_stack_call_tree( void ); +int Const_Data_Size_ivas_prerenderer_mai( void ); // Not a typo +int Const_Data_Size_ivas_rom_prerenderer( void ); +extern int16_t *ptr_base_stack; +extern int16_t *ptr_max_stack; +extern int32_t wc_frame; +extern char location_max_stack[256]; */ + +/* clang-format off */ +/*------------------------------------------------------------------------------------------* +* Function to print complexity & memory estimates +*------------------------------------------------------------------------------------------*/ +/* void print_mem_prerenderer(size_t SRAM_size) +{ + fprintf( stdout, "\n\n --- Prerenderer cmdln demo memory usage --- \n\n" ); + + fprintf( stdout, "PROM size (prerenderer): %d words (or instructions)\n", PROM_Size_prerenderer ); + fprintf( stdout, "Stack size: %d words in %s() in frame #%d\n", ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) / sizeof( float ), location_max_stack, wc_frame ); + fprintf( stdout, "Table ROM size(prerenderer_main): %d words\n", (Const_Data_Size_ivas_prerenderer_mai() ) / sizeof( float ) ); + fprintf( stdout, "Table ROM size(prerenderer): %d words\n", (Const_Data_Size_ivas_rom_prerenderer() ) / sizeof( float ) ); +#ifdef RAM_COUNTING_TOOL + fprintf( stdout, "Static RAM size: %d words\n\n", SRAM_size ); +#endif + print_stack_call_tree(); + + fprintf( stdout, "Note: this is an optimistic estimate of the memory consumption assuming\n" ); + fprintf( stdout, " that each variable (short, long or float) in the codec requires\n" ); + fprintf( stdout, " 32 bits of memory and may therefore be represented by 1 word.\n" ); + fprintf( stdout, " The following formula is used: sizeof('memory array')/sizeof(float)\n\n" ); +} */ +/* clang-format on */ +#endif + +static const char *optInputFile = "--inputFile"; +static const char *optInputFileShort = "-if"; +static const char *optInputAmbisonics = "--inputAmbisonics"; +static const char *optInputAmbisonicsShort = "-if-sba"; +static const char *optInputMultichannel = "--inputMultichannel"; +static const char *optInputMultichannelShort = "-if-mc"; +static const char *optOutputFile = "--outputFile"; +static const char *optOutputFileShort = "-of"; +static const char *optInputAudio = "--inputAudio"; +static const char *optInputAudioShort = "-ia"; +static const char *optFrameSize = "--frameSize"; +static const char *optFrameSizeShort = "-fr"; +static const char *optOutputConfig = "--outputConfig"; +static const char *optOutputConfigShort = "-oc"; +static const char *optSampleRate = "--sampleRate"; +static const char *optSampleRateShort = "-fs"; +static const char *optNeverDropLfe = "--neverDropLfe"; +static const char *optNeverDropLfeShort = "-ndl"; + +typedef struct Prndr_IsmPositionProvider +{ + uint32_t frameCounter; + uint32_t numObjects; + IsmFileReader *ismReaders[PRERENDERER_MAX_ISM_INPUTS]; + uint32_t numPositions[PRERENDERER_MAX_ISM_INPUTS]; + Prndr_AudioObjectPosition *positions[PRERENDERER_MAX_ISM_INPUTS]; /* size: [PRERENDERER_MAX_ISM_INPUTS][numPositions[object_index]] */ + uint16_t *positionDurations[PRERENDERER_MAX_ISM_INPUTS]; /* size: [PRERENDERER_MAX_ISM_INPUTS][numPositions[object_index]] */ + uint32_t currentPositionIdxs[PRERENDERER_MAX_ISM_INPUTS]; /* Index of current position as listed in the metadata file */ + uint16_t durationCounters[PRERENDERER_MAX_ISM_INPUTS]; /* Number of frames spent at current position */ +} Prndr_IsmPositionProvider; + +typedef enum Prndr_ForcedInputFormat +{ + prndr_forced_input_format_none = 0, + prndr_forced_input_format_sba, + prndr_forced_input_format_mc +} Prndr_ForcedInputFormat; + +typedef struct Prndr_CmdlnArgs +{ + char inputFilePath[FILENAME_MAX]; + char outputFilePath[FILENAME_MAX]; + int16_t frameSize; + int32_t sampleRate; + Prndr_OutputConfig outConfig; + Prndr_ForcedInputFormat forcedInputFormat; + char forcedAudioInputFile[FILENAME_MAX]; + int8_t neverDropLfe; /* flag */ +} Prndr_CmdlnArgs; + +static int8_t getAmbisonicsFromNumChannels( + uint32_t numChannels, + Prndr_Ambisonics *ambisonics ); + +static int8_t getSpeakerLayoutFromNumChannels( + uint32_t numChannels, + Prndr_SpeakerLayout *layout ); + +static int8_t setInConfigFromSbaNumChannels( + int16_t numChannels, + Prndr_InputConfig *inConfig ); + +static int8_t setInConfigFromMcNumChannels( + int16_t numChannels, + Prndr_InputConfig *inConfig ); + +static Prndr_Ambisonics ambisonicsOrderToEnum( + int32_t order ); + +static Prndr_SpeakerLayout speakerLayoutCicpToEnum( + int32_t cicpIndex ); + +static int8_t parseOutConfig( + char *configString, + Prndr_OutputConfig *outConfig ); + +static void printUsage( + void ); + +static void parseConfigFile( + char *path, + char *audioFilePath, + Prndr_InputConfig *inConfig, + Prndr_IsmPositionProvider *positionProvider ); + +static Prndr_CmdlnArgs parseCmdlnArgs( + int32_t argc, + char **argv ); + +static Prndr_IsmPositionProvider *Prndr_IsmPositionProvider_open( + void ); + +static void Prndr_IsmPositionProvider_getNextFrame( + Prndr_IsmPositionProvider *positionProvider, + Prndr_AudioObjectMetadataBuffer *objectMetadataBuffer ); + +static void Prndr_IsmPositionProvider_close( + Prndr_IsmPositionProvider *positionProvider ); + +static void readFromShorthandMetadata( + Prndr_IsmPositionProvider *positionProvider, + Prndr_AudioObjectMetadataBuffer *objectMetadataBuffer, + uint32_t objIdx ); + +void getMetadataFromFileReader( + IsmFileReader *ismReader, + Prndr_AudioObjectMetadataBuffer *objectMetadataBuffer, + uint32_t objIdx ); + +static void splitConfigFile( + const char *mdfFilePath, + char *metadataString, + uint32_t *metadataStringLength, + char *wavFileName, + uint32_t *wavFileNameLength ); + +static char *readNextMetadataChunk( + char *line, + const char *delimiter ); + +static void parseUint8( + char *line, + uint8_t *ret ); + +static int8_t parseUint32( + char *line, + uint32_t *ret ); + +static void parseObjectPosition( + char *line, + Prndr_AudioObjectPosition *position, + uint16_t *positionDuration ); + +static void parseIsm( + char *line, + char *inDir, + Prndr_InputConfig *inConfig, + Prndr_IsmPositionProvider *positionProvider, + int32_t idx ); + +static void parseSba( + char *line, + Prndr_InputConfig *inConfig, + int32_t idx ); + +static void parseMc( + char *line, + Prndr_InputConfig *inConfig, + int32_t idx ); + +static void parseMetadata( + char *metadataString, + char *inDir, + Prndr_InputConfig *inConfig, + Prndr_IsmPositionProvider *positionProvider ); + +static void convert_backslash( + char *str ); + +static void remove_cr( + char *str ); + + +/* ============================================================================ */ + +int32_t main( int32_t argc, char **argv ) +{ + Prndr_CmdlnArgs args; + Prndr_Prerenderer *prerenderer; + Prndr_IsmPositionProvider *positionProvider; + Prndr_InputConfig inConfig; + char audioFilePath[FILENAME_MAX]; + AudioFileReader *audioReader = NULL; + int16_t numInChannels; + AudioFileWriter *audioWriter; + int32_t inBufferSize; + int32_t outBufferSize; + int16_t *inpInt16Buffer; + float *inFloatBuffer; + int16_t *outInt16Buffer; + float *outFloatBuffer; + Prndr_AudioBuffer inPrndrBuffer; + Prndr_AudioBuffer outPrndrBuffer; + int16_t numSamplesRead; + int16_t i; + ivas_error error = IVAS_ERR_OK; +#ifdef WMOPS + size_t SRAM_size; +#endif + +#ifdef WMOPS + reset_wmops(); + reset_stack(); +#endif + +#ifdef RAM_COUNTING_TOOL + mem_count_init( 0, USE_32BITS ); +#endif + + args = parseCmdlnArgs( argc, argv ); + + /* === Open === */ + prerenderer = Prndr_Prerenderer_open(); + positionProvider = Prndr_IsmPositionProvider_open(); + + convert_backslash( args.inputFilePath ); + convert_backslash( args.outputFilePath ); + convert_backslash( args.forcedAudioInputFile ); + + /* === Parse === */ + if ( args.forcedInputFormat == prndr_forced_input_format_none ) + { + /* Only parse config file if input config is not forced at cmdln */ + parseConfigFile( args.inputFilePath, audioFilePath, &inConfig, positionProvider ); + } + else + { + /* If input config is forced, input file path is the input audio file, not config file */ + strncpy( audioFilePath, args.inputFilePath, FILENAME_MAX ); + + /* Initialize inConfig - this will be overwritten when applying forced parameters, + * but not initializing here causes a compiler warning on msvc */ + inConfig.numAmbisonicsBuses = 0; + inConfig.numMultiChannelBuses = 0; + inConfig.numAudioObjects = 0; + } + + /* === Apply forced parameters === */ + if ( strlen( args.forcedAudioInputFile ) != 0 ) + { + strncpy( audioFilePath, args.forcedAudioInputFile, FILENAME_MAX ); + } + + AudioFileReader_open( &audioReader, audioFilePath, args.sampleRate ); + if ( !audioReader ) + { + fprintf( stderr, "Error opening file: %s\n", audioFilePath ); + exit( -1 ); + } + + if ( args.forcedInputFormat != prndr_forced_input_format_none ) + { + numInChannels = AudioFileReader_getNumChannels( audioReader ); + if ( numInChannels == 0 ) + { + fprintf( stderr, "File does not contain number of channels metadata, probably a raw file: %s\n", audioFilePath ); + exit( -1 ); + } + + if ( args.forcedInputFormat == prndr_forced_input_format_sba ) + { + + if ( setInConfigFromSbaNumChannels( numInChannels, &inConfig ) != 0 ) + { + fprintf( stderr, "File cannot be used with forced sba input: %s\n", audioFilePath ); + exit( -1 ); + } + } + else if ( args.forcedInputFormat == prndr_forced_input_format_mc ) + { + if ( setInConfigFromMcNumChannels( numInChannels, &inConfig ) != 0 ) + { + fprintf( stderr, "File cannot be used with forced mc input: %s\n", audioFilePath ); + exit( -1 ); + } + } + } + + /* === Configure === */ + if ( ( error = Prndr_Prerenderer_configure( prerenderer, inConfig, args.outConfig, args.frameSize, args.sampleRate ) ) != IVAS_ERR_OK ) + { + exit( -1 ); + } + + if ( args.neverDropLfe ) + { + Prndr_Prerenderer_setNeverDropLfe( prerenderer, 1 ); + } + + if ( Prndr_Prerenderer_getInChannels( prerenderer ) != AudioFileReader_getNumChannels( audioReader ) ) + { + fprintf( stderr, "Number of channels in input file does not match that defined in the config file\n" ); + exit( -1 ); + } + + /* === Process === */ + AudioFileWriter_open( &audioWriter, args.outputFilePath, args.sampleRate, Prndr_Prerenderer_getOutChannels( prerenderer ) ); + + if ( audioWriter == NULL ) + { + exit( -1 ); + } + + inBufferSize = args.frameSize * Prndr_Prerenderer_getInChannels( prerenderer ); + outBufferSize = args.frameSize * Prndr_Prerenderer_getOutChannels( prerenderer ); + inpInt16Buffer = count_calloc( inBufferSize, sizeof( int16_t ) ); + inFloatBuffer = count_calloc( inBufferSize, sizeof( float ) ); + outInt16Buffer = count_calloc( outBufferSize, sizeof( int16_t ) ); + outFloatBuffer = count_calloc( outBufferSize, sizeof( float ) ); + + inPrndrBuffer.config.sampleRate = args.sampleRate; + inPrndrBuffer.config.bufferSize = args.frameSize; + inPrndrBuffer.config.numChannels = Prndr_Prerenderer_getInChannels( prerenderer ); + inPrndrBuffer.data = inFloatBuffer; + + outPrndrBuffer.config.sampleRate = args.sampleRate; + outPrndrBuffer.config.bufferSize = args.frameSize; + outPrndrBuffer.config.numChannels = Prndr_Prerenderer_getOutChannels( prerenderer ); + outPrndrBuffer.data = outFloatBuffer; + +#ifdef WMOPS + reset_wmops(); +#endif + + while ( 1 ) + { + int32_t chnl, smpl; + int32_t num_in_channels; + num_in_channels = inPrndrBuffer.config.numChannels; + i = 0; + + /* Read the input data */ + if ( ( error = AudioFileReader_read( audioReader, inpInt16Buffer, inBufferSize, &numSamplesRead ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError reading from file %s\n", audioFilePath ); + break; + } + + /* Convert from int to float and from interleaved to packed */ + for ( smpl = 0; smpl < args.frameSize; ++smpl ) + { + for ( chnl = 0; chnl < num_in_channels; ++chnl ) + { + if ( i < numSamplesRead ) + { + inFloatBuffer[chnl * args.frameSize + smpl] = (float) inpInt16Buffer[i] / INT16_MAX; + } + else + { + inFloatBuffer[chnl * args.frameSize + smpl] = 0.f; + } + + ++i; + } + } + + Prndr_AudioObjectMetadataBuffer mtdBuffer; + Prndr_IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer ); + + Prndr_Prerenderer_render( prerenderer, inPrndrBuffer, mtdBuffer, outPrndrBuffer ); + + int32_t num_out_channels; + num_out_channels = outPrndrBuffer.config.numChannels; + i = 0; + + /* Convert from float to int and from packed to interleaved */ + for ( smpl = 0; smpl < args.frameSize; ++smpl ) + { + for ( chnl = 0; chnl < num_out_channels; ++chnl ) + { + outInt16Buffer[i] = (int16_t)(outFloatBuffer[chnl * args.frameSize + smpl] * INT16_MAX); + + ++i; + } + } + + if ( AudioFileWriter_write( audioWriter, outInt16Buffer, outBufferSize ) != 0 ) + { + fprintf( stderr, "Error writing audio file %s\n", args.outputFilePath ); + exit( -1 ); + } + + frame++; + fprintf( stdout, "%-8d\b\b\b\b\b\b\b\b", frame ); + +#ifdef WMOPS + update_wmops(); +#endif + } + fprintf( stdout, "\n" ); + + /* === Close === */ + count_free( inpInt16Buffer ); + count_free( inFloatBuffer ); + count_free( outInt16Buffer ); + count_free( outFloatBuffer ); + AudioFileReader_close( &audioReader ); + AudioFileWriter_close( &audioWriter ); + Prndr_Prerenderer_close( prerenderer ); + Prndr_IsmPositionProvider_close( positionProvider ); + +#ifdef RAM_COUNTING_TOOL +#ifdef WMOPS + SRAM_size = +#endif + mem_count_summary( USE_DEFAULT ); +#endif +#ifdef WMOPS + print_wmops(); + /* print_mem_prerenderer( SRAM_size ); */ +#endif + + return 0; +} + +static int8_t getAmbisonicsFromNumChannels( uint32_t numChannels, + Prndr_Ambisonics *ambisonics ) +{ + switch ( numChannels ) + { + case 1: + *ambisonics = prndr_ambisonics_mono; + break; + case 4: + *ambisonics = prndr_ambisonics_foa; + break; + case 9: + *ambisonics = prndr_ambisonics_soa; + break; + case 16: + *ambisonics = prndr_ambisonics_toa; + break; + default: + fprintf( stderr, "Unable to infer ambisonics order from number of channels: %d\n", numChannels ); + return -1; + } + + return 0; +} + +static int8_t getSpeakerLayoutFromNumChannels( uint32_t numChannels, + Prndr_SpeakerLayout *layout ) +{ + switch ( numChannels ) + { + case 1: + *layout = prndr_speaker_layout_mono; + break; + case 2: + *layout = prndr_speaker_layout_stereo; + break; + case 6: + *layout = prndr_speaker_layout_5_1; + break; + case 8: + *layout = prndr_speaker_layout_7_1; + break; + case 10: + *layout = prndr_speaker_layout_5_1_4; + break; + case 12: + *layout = prndr_speaker_layout_7_1_4; + break; + default: + fprintf( stderr, "Unable to infer speaker layout from number of channels: %d\n", numChannels ); + return -1; + } + + return 0; +} + +static int8_t setInConfigFromSbaNumChannels( int16_t numChannels, Prndr_InputConfig *inConfig ) +{ + inConfig->numAmbisonicsBuses = 1; + inConfig->numAudioObjects = 0; + inConfig->numMultiChannelBuses = 0; + + inConfig->ambisonicsBuses[0].inputChannelIndex = 0; + return getAmbisonicsFromNumChannels( numChannels, &inConfig->ambisonicsBuses[0].ambisonicsConfig ); +} + +static int8_t setInConfigFromMcNumChannels( int16_t numChannels, Prndr_InputConfig *inConfig ) +{ + inConfig->numAmbisonicsBuses = 0; + inConfig->numAudioObjects = 0; + inConfig->numMultiChannelBuses = 1; + + inConfig->multiChannelBuses[0].inputChannelIndex = 0; + return getSpeakerLayoutFromNumChannels( numChannels, &inConfig->multiChannelBuses[0].speakerLayout ); +} + +static Prndr_Ambisonics ambisonicsOrderToEnum( int32_t order ) +{ + switch ( order ) + { + case 0: + return prndr_ambisonics_mono; + case 1: + return prndr_ambisonics_foa; + case 2: + return prndr_ambisonics_soa; + case 3: + return prndr_ambisonics_toa; + } + + return prndr_ambisonics_none; +} + +static Prndr_SpeakerLayout speakerLayoutCicpToEnum( int32_t cicpIndex ) +{ + switch ( cicpIndex ) + { + case 0: + return prndr_speaker_layout_custom; + case 1: + return prndr_speaker_layout_mono; + case 2: + return prndr_speaker_layout_stereo; + case 6: + return prndr_speaker_layout_5_1; + case 16: + return prndr_speaker_layout_5_1_4; + case 12: + return prndr_speaker_layout_7_1; + case 19: + return prndr_speaker_layout_7_1_4; + } + + return prndr_speaker_layout_none; +} + +static int8_t parseOutConfig( char *configString, Prndr_OutputConfig *outConfig ) +{ + char outType[5]; + int32_t num; + int8_t success; /* flag */ + + outType[4] = '\0'; + strncpy( outType, configString, 4 ); + + success = 1; + + if ( ( outType[0] == 's' || outType[0] == 'S' ) && + ( outType[1] == 'b' || outType[1] == 'B' ) && + ( outType[2] == 'a' || outType[2] == 'A' ) ) + { + num = strtol( &configString[3], NULL, 10 ); + + /* If num is 0, ensure it's because user requested it and not because of strtol error */ + if ( num == 0 && configString[3] != 0 && configString[4] != '\0' ) + { + success = 0; + } + else + { + outConfig->ambisonics = ambisonicsOrderToEnum( num ); + outConfig->outSetupCustom = NULL; + } + } + else if ( ( outType[0] == 'c' || outType[0] == 'C' ) && + ( outType[1] == 'i' || outType[1] == 'I' ) && + ( outType[2] == 'c' || outType[2] == 'C' ) && + ( outType[3] == 'p' || outType[3] == 'P' ) ) + { + num = strtol( &configString[4], NULL, 10 ); + outConfig->speakerLayout = speakerLayoutCicpToEnum( num ); + outConfig->outSetupCustom = NULL; + } + else + { + int16_t i, is_planar; + LsCustomFileReader *hLsCustomReader = NULL; + IVAS_CUSTOM_LS_DATA hLsCustomData; + + /* Default to interpreting as a custom loudspeaker layout file */ + outConfig->speakerLayout = speakerLayoutCicpToEnum( 0 ); + + CustomLsReader_open( configString, &hLsCustomReader ); + success = ( CustomLsFileReading( hLsCustomReader, &hLsCustomData ) == LS_CUSTOM_FILEREADER_NO_ERROR ); + + outConfig->outSetupCustom->num_spk = hLsCustomData.num_spk; + mvr2r( hLsCustomData.azimuth, outConfig->outSetupCustom->ls_azimuth, hLsCustomData.num_spk ); + mvr2r( hLsCustomData.elevation, outConfig->outSetupCustom->ls_elevation, hLsCustomData.num_spk ); + + /* Set planar flag */ + is_planar = 1; + for ( i = 0; i < hLsCustomData.num_spk; i++ ) + { + if ( is_planar && outConfig->outSetupCustom->ls_elevation[i] != 0.0f ) + { + is_planar = 0; + } + } + outConfig->outSetupCustom->is_planar_setup = is_planar; + + /* Loudspeaker LFE */ + outConfig->outSetupCustom->num_lfe = hLsCustomData.num_lfe; + mvs2s( hLsCustomData.lfe_idx, outConfig->outSetupCustom->lfe_idx, hLsCustomData.num_lfe ); + + CustomLsReader_close( &hLsCustomReader ); + } + + return success ? 0 : -1; +} + +static void printUsage( void ) +{ + printf( "\n" ); + printf( "Usage: ./IVAS_prerenderer [options]\n" ); + printf( "\n" ); + printf( "Valid options:\n" ); + printf( "%s %s Path to the input file (txt config file).\n", optInputFileShort, optInputFile ); + printf( "%s %s Path to the ambisonics audio file. Use this optionally instead of the config file for single-item input configurations.\n", optInputAmbisonicsShort, optInputAmbisonics ); + printf( "%s %s Path to the multichannel audio file. Use this optionally instead of the config file for single-item input configurations.\n", optInputMultichannelShort, optInputMultichannel ); + printf( "%s %s Path to the output file.\n", optOutputFileShort, optOutputFile ); + printf( "%s %s Path to the input audio (overrides audio path from txt config file or -if-sba and -if-mc options) - for debugging/testing purposes.\n", optInputAudioShort, optInputAudio ); + printf( "%s %s Size of processing frame (in ms). Default value is 20ms.\n", optFrameSizeShort, optFrameSize ); + printf( "%s %s Input sampling rate in kHz.\n", optSampleRateShort, optSampleRate ); + printf( "%s %s Output configuration. For ambisonics of order n, select SBAn (e.g. SBA1 for order 1).\n", optOutputConfigShort, optOutputConfig ); + printf( " For multichannel, select CICP followed by CICP index (e.g. CICP6, CICP19).\n" ); + printf( " Alternatively, can be a custom loudspeaker layout file.\n" ); + printf( "%s %s [flag] If set, prerenderer tries to render LFE into other channels in an optimal way when rendering to configs w/o LFE.\n", optNeverDropLfeShort, optNeverDropLfe ); +} + +static int8_t checkOpt( uint32_t argc, char **argv, uint32_t idx, uint32_t numFollowingTokens ) +{ + uint32_t i; + + if ( idx + numFollowingTokens >= argc ) + { + fprintf( stderr, "Error: option %s requires %d following tokens\n", argv[idx], numFollowingTokens ); + return 0; + } + + for ( i = 1; i < numFollowingTokens; ++i ) + { + if ( strlen( argv[idx + i] ) > PRERENDERER_MAX_CMDLN_ARG_LENGTH ) + { + fprintf( stderr, "Too many characters in token: %s\n", argv[idx + i] ); + return 0; + } + } + + return 1; +} + +static Prndr_CmdlnArgs parseCmdlnArgs( int32_t argc, char **argv ) +{ + Prndr_CmdlnArgs parsedArgs; + int8_t success; /* flag */ + int32_t i; + uint32_t numFollowingTokens; + + success = 1; + + parsedArgs.inputFilePath[0] = '\0'; + parsedArgs.outputFilePath[0] = '\0'; + parsedArgs.frameSize = -1; + parsedArgs.sampleRate = -1; + parsedArgs.outConfig.ambisonics = prndr_ambisonics_none; + parsedArgs.outConfig.speakerLayout = prndr_speaker_layout_none; + parsedArgs.forcedInputFormat = prndr_forced_input_format_none; + parsedArgs.forcedAudioInputFile[0] = '\0'; + parsedArgs.neverDropLfe = false; + + i = 1; + while ( i < argc ) + { + numFollowingTokens = 1; /* Default number of expected tokens after an option */ + + if ( strcmp( argv[i], optInputFileShort ) == 0 || strcmp( argv[i], optInputFile ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( strlen( parsedArgs.inputFilePath ) == 0 ) + { + strncpy( parsedArgs.inputFilePath, argv[i + 1], FILENAME_MAX ); + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optInputFile, optInputFileShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optInputAmbisonicsShort ) == 0 || strcmp( argv[i], optInputAmbisonics ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( strlen( parsedArgs.inputFilePath ) == 0 ) + { + strncpy( parsedArgs.inputFilePath, argv[i + 1], FILENAME_MAX ); + parsedArgs.forcedInputFormat = prndr_forced_input_format_sba; + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optInputAmbisonics, optInputAmbisonicsShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optInputMultichannelShort ) == 0 || strcmp( argv[i], optInputMultichannel ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( strlen( parsedArgs.inputFilePath ) == 0 ) + { + strncpy( parsedArgs.inputFilePath, argv[i + 1], FILENAME_MAX ); + parsedArgs.forcedInputFormat = prndr_forced_input_format_mc; + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optInputMultichannel, optInputMultichannelShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optOutputFileShort ) == 0 || strcmp( argv[i], optOutputFile ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( strlen( parsedArgs.outputFilePath ) == 0 ) + { + strncpy( parsedArgs.outputFilePath, argv[i + 1], FILENAME_MAX ); + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optOutputFile, optOutputFileShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optInputAudioShort ) == 0 || strcmp( argv[i], optInputAudio ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( strlen( parsedArgs.forcedAudioInputFile ) == 0 ) + { + strncpy( parsedArgs.forcedAudioInputFile, argv[i + 1], FILENAME_MAX ); + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optInputAudio, optInputAudioShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optFrameSizeShort ) == 0 || strcmp( argv[i], optFrameSize ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( parsedArgs.frameSize <= 0 ) + { + /* Save value in ms for now - later converted to samples once sample rate is known */ + parsedArgs.frameSize = strtol( argv[i + 1], NULL, 10 ); + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optFrameSize, optFrameSizeShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optOutputConfigShort ) == 0 || strcmp( argv[i], optOutputConfig ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( parsedArgs.outConfig.ambisonics == prndr_ambisonics_none && parsedArgs.outConfig.speakerLayout == prndr_speaker_layout_none ) + { + if ( parseOutConfig( argv[i + 1], &parsedArgs.outConfig ) != 0 ) + { + fprintf( stderr, "Unknown output or bad config: %s\n", argv[i + 1] ); + success = 0; + } + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optOutputConfig, optOutputConfigShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optSampleRateShort ) == 0 || strcmp( argv[i], optSampleRate ) == 0 ) + { + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + if ( parsedArgs.sampleRate <= 0 ) + { + parsedArgs.sampleRate = ( int32_t )( strtof( argv[i + 1], NULL ) * 1000 ); + } + else + { + fprintf( stderr, "Duplicate option: %s (%s)\n", optSampleRate, optSampleRateShort ); + success = 0; + } + } + } + else if ( strcmp( argv[i], optNeverDropLfeShort ) == 0 || strcmp( argv[i], optNeverDropLfe ) == 0 ) + { + numFollowingTokens = 0; + + if ( ( success = checkOpt( argc, argv, i, numFollowingTokens ) ) == 1 ) + { + parsedArgs.neverDropLfe = true; + } + } + else + { + fprintf( stderr, "Unknown option: %s\n", argv[i] ); + success = 0; + } + + i += 1 + numFollowingTokens; + } + + /* Check if any of required args is missing */ + if ( strlen( parsedArgs.inputFilePath ) == 0 ) + { + fprintf( stderr, "Required option missing or invalid value: %s (%s) or %s (%s) or %s (%s)\n", + optInputFile, + optInputFileShort, + optInputAmbisonics, + optInputAmbisonicsShort, + optInputMultichannel, + optInputMultichannelShort ); + success = 0; + } + if ( strlen( parsedArgs.outputFilePath ) == 0 ) + { + fprintf( stderr, "Required option missing or invalid value: %s (%s)\n", optOutputFile, optOutputFileShort ); + success = 0; + } + if ( parsedArgs.outConfig.ambisonics == prndr_ambisonics_none && parsedArgs.outConfig.speakerLayout == prndr_speaker_layout_none ) + { + fprintf( stderr, "Required option missing or invalid value: %s (%s)\n", optOutputConfig, optOutputConfigShort ); + success = 0; + } + if ( parsedArgs.sampleRate <= 0 ) + { + fprintf( stderr, "Required option missing or invalid value: %s (%s)\n", optSampleRate, optSampleRateShort ); + success = 0; + } + + /* Set default values if not specified */ + if ( parsedArgs.frameSize <= 0 ) + { + parsedArgs.frameSize = parsedArgs.sampleRate / 50; + } + else + { + /* Convert from ms to samples */ + parsedArgs.frameSize = parsedArgs.sampleRate * parsedArgs.frameSize / 1000; + } + + if ( !success ) + { + printUsage(); + exit( -1 ); + } + + return parsedArgs; +} + + +Prndr_IsmPositionProvider *Prndr_IsmPositionProvider_open( void ) +{ + Prndr_IsmPositionProvider *ipp; + uint32_t i; + + ipp = (Prndr_IsmPositionProvider *) count_malloc( sizeof( Prndr_IsmPositionProvider ) ); + ipp->frameCounter = 0; + ipp->numObjects = 0; + + for ( i = 0; i < PRERENDERER_MAX_ISM_INPUTS; ++i ) + { + ipp->ismReaders[i] = NULL; + ipp->positions[i] = NULL; + ipp->positionDurations[i] = NULL; + ipp->currentPositionIdxs[i] = 0; + ipp->durationCounters[i] = 0; + } + + return ipp; +} + +void getMetadataFromFileReader( + IsmFileReader *ismReader, + Prndr_AudioObjectMetadataBuffer *objectMetadataBuffer, + uint32_t objIdx ) +{ + IVAS_ISM_METADATA ismMetadata; + ivas_error error; + + if ( ( error = IsmFileReader_readNextFrame( ismReader, &ismMetadata ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError (%s) while reading ism metadata from: %s\n\n", ivas_error_to_string( error ), IsmFileReader_getFilePath( ismReader ) ); + exit( -1 ); + } + + objectMetadataBuffer->positions[objIdx].azimuth = ismMetadata.azimuth; + objectMetadataBuffer->positions[objIdx].elevation = ismMetadata.elevation; +} + +void readFromShorthandMetadata( Prndr_IsmPositionProvider *positionProvider, + Prndr_AudioObjectMetadataBuffer *objectMetadataBuffer, + uint32_t objIdx ) +{ + uint32_t preUpdatePositionIdx; + uint32_t postUpdatePositionIdx; + + preUpdatePositionIdx = positionProvider->currentPositionIdxs[objIdx]; + + if ( positionProvider->durationCounters[objIdx] == positionProvider->positionDurations[objIdx][preUpdatePositionIdx] ) + { + positionProvider->durationCounters[objIdx] = 0; + positionProvider->currentPositionIdxs[objIdx] = ( positionProvider->currentPositionIdxs[objIdx] + 1 ) % positionProvider->numPositions[objIdx]; + } + + ++positionProvider->durationCounters[objIdx]; + + postUpdatePositionIdx = positionProvider->currentPositionIdxs[objIdx]; + + objectMetadataBuffer->positions[objIdx] = positionProvider->positions[objIdx][postUpdatePositionIdx]; +} + +void Prndr_IsmPositionProvider_getNextFrame( + Prndr_IsmPositionProvider *positionProvider, + Prndr_AudioObjectMetadataBuffer *objectMetadataBuffer ) +{ + uint32_t objIdx; + int16_t aziShifted; + + objectMetadataBuffer->numObjects = positionProvider->numObjects; + + for ( objIdx = 0; objIdx < positionProvider->numObjects; ++objIdx ) + { + if ( positionProvider->ismReaders[objIdx] != NULL ) + { + getMetadataFromFileReader( positionProvider->ismReaders[objIdx], objectMetadataBuffer, objIdx ); + } + else + { + readFromShorthandMetadata( positionProvider, objectMetadataBuffer, objIdx ); + } + + /* Wrap azimuth to lie within (-180, 180] range */ + aziShifted = objectMetadataBuffer->positions[objIdx].azimuth + 180; + objectMetadataBuffer->positions[objIdx].azimuth = aziShifted <= 0 || aziShifted % 360 == 0 ? ( aziShifted % 360 ) + 180 : ( aziShifted % 360 ) - 180; + + /* Clamp elevation to lie within [-90, 90] range (can't be wrapped easily) */ + objectMetadataBuffer->positions[objIdx].elevation = min( max( objectMetadataBuffer->positions[objIdx].elevation, -90 ), 90 ); + } + + ++positionProvider->frameCounter; +} + +void Prndr_IsmPositionProvider_close( Prndr_IsmPositionProvider *positionProvider ) +{ + uint32_t i; + + if ( positionProvider == NULL ) + { + assert( !"Can't close Prndr_IsmPositionProvider - pointer is NULL" ); + } + + for ( i = 0; i < PRERENDERER_MAX_ISM_INPUTS; ++i ) + { + if ( positionProvider->ismReaders[i] != NULL ) + { + IsmFileReader_close( &positionProvider->ismReaders[i] ); + } + + if ( positionProvider->positions[i] != NULL ) + { + count_free( positionProvider->positions[i] ); + } + + if ( positionProvider->positionDurations[i] != NULL ) + { + count_free( positionProvider->positionDurations[i] ); + } + } + + count_free( positionProvider ); +} + +static void splitConfigFile( const char *mdfFilePath, + char *metadataString, + uint32_t *metadataStringLength, + char *wavFileName, + uint32_t *wavFileNameLength ) +{ + FILE *file; + uint32_t bufferlength; + char wavLine[FILENAME_MAX]; + uint32_t currentPositionIdxs; + uint32_t mdlength; + + memset( metadataString, 0, *metadataStringLength ); + memset( wavFileName, 0, (int16_t) *wavFileNameLength ); + + file = fopen( mdfFilePath, "rb" ); + if ( !file ) + { + fprintf( stderr, "Couldn't open metadata file %s\n", mdfFilePath ); + exit( -1 ); + } + + fseek( file, 0, SEEK_END ); + bufferlength = ftell( file ); + fseek( file, 0, SEEK_SET ); + + if ( fgets( wavLine, (int) *wavFileNameLength, file ) == NULL ) + { + fprintf( stderr, "Error reading metadata\n" ); + exit( -1 ); + } + currentPositionIdxs = ftell( file ); + if ( *wavFileNameLength < currentPositionIdxs ) + { + assert( !"Couldn't read wavFileName, string buffer too small" ); + } + if ( !sscanf( wavLine, "%s", wavFileName ) ) + { + fprintf( stderr, "Error reading metadata\n" ); + exit( -1 ); + } + *wavFileNameLength = strlen( wavFileName ); + + mdlength = bufferlength - currentPositionIdxs; + /* "+1" for null termination */ + if ( *metadataStringLength + 1 < mdlength ) + { + assert( !"Couldn't read metadata string, string buffer too small" ); + } + + fread( metadataString, 1, mdlength, file ); + metadataString[mdlength] = '\0'; + *metadataStringLength = mdlength + 1; + + fclose( file ); +} + +/* r: pointer to character following last found delimiter */ +static char *readNextMetadataChunkFrom( char *start_char, char *line, const char *delimiter ) +{ + char *token; + + /* start_char can be NULL - it's used to continue parsing with strtok */ + assert( line != NULL && delimiter != NULL && "unexpected NULL ptr given to readNextMetadataChunkFrom()" ); + + token = strtok( start_char, delimiter ); + + /* End of string reached */ + if ( token == NULL ) + { + /* Clear `line` from previous contents and return NULL */ + line[0] = '\0'; + return NULL; + } + + strcpy( line, token ); + + return token + strlen( token ) + 1; +} + +/* r: pointer to character following last found delimiter */ +static char *readNextMetadataChunk( char *line, const char *delimiter ) +{ + return readNextMetadataChunkFrom( NULL, line, delimiter ); +} + +static void parseUint8( char *line, uint8_t *ret ) +{ + char *ptr; + ptr = NULL; + + *ret = strtol( line, &ptr, 10 ); + if ( *ptr != '\0' ) + { + fprintf( stderr, "Cannot parse string \"%s\" as an integer value\n", line ); + exit( -1 ); + } +} + +static int8_t parseUint32( char *line, uint32_t *ret ) +{ + char *ptr; + ptr = " "; + + *ret = strtol( line, &ptr, 10 ); + if ( *ptr != '\0' ) + { + return -1; + } + + return 0; +} + +static void parseOptionalInputValues( + char *line, + float *gain_dB ) +{ + char *parse_pos; + char *key; + char *value; + char *endptr; + + endptr = NULL; + + /* Set default values, in case some values are not specified */ + *gain_dB = 0.f; + + /* Save parsing position - will have to be passed to strtok to resume parsing after using strtok with non-NULL value below */ + parse_pos = readNextMetadataChunk( line, "\n" ); + + /* Look for optional metadata until end of string or next input identifier is found */ + while ( parse_pos != NULL && strcmp( line, "MC" ) != 0 && strcmp( line, "SBA" ) != 0 && strcmp( line, "ISM" ) != 0 ) + { + key = strtok( line, ":" ); + value = strtok( NULL, "\n" ); + + if ( strcmp( key, "gain_dB" ) == 0 ) + { + *gain_dB = (float) strtod( value, &endptr ); + + if ( *endptr != '\0' ) + { + fprintf( stderr, "Cannot parse string string \"%s\" as a float value\n", value ); + exit( -1 ); + } + } + else + { + fprintf( stderr, "Unsupported optional key: %s\n", key ); + exit( -1 ); + } + + parse_pos = readNextMetadataChunkFrom( parse_pos, line, "\n" ); + } +} + +static void parseObjectPosition( char *line, + Prndr_AudioObjectPosition *position, + uint16_t *positionDuration ) +{ + char *endptr; + + readNextMetadataChunk( line, "," ); + *positionDuration = strtol( line, &endptr, 10 ); + + if ( *endptr != '\0' ) + { + fprintf( stderr, "Error reading metadata\n" ); + exit( -1 ); + } + + readNextMetadataChunk( line, "," ); + position->azimuth = strtol( line, &endptr, 10 ); + + if ( *endptr != '\0' ) + { + fprintf( stderr, "Error reading metadata\n" ); + exit( -1 ); + } + + readNextMetadataChunk( line, "\n" ); + position->elevation = strtol( line, &endptr, 10 ); + if ( *endptr != '\0' ) + { + fprintf( stderr, "Error reading metadata\n" ); + exit( -1 ); + } +} + +static void parseIsm( + char *line, + char *inDir, + Prndr_InputConfig *inConfig, + Prndr_IsmPositionProvider *positionProvider, + int32_t idx ) +{ + uint32_t numberOfObjectPositionsToRead; + uint32_t i; + + readNextMetadataChunk( line, "\n" ); + parseUint8( line, &inConfig->audioObjects[idx].inputChannelIndex ); + --inConfig->audioObjects[idx].inputChannelIndex; /* Convert from 1-indexing */ + + readNextMetadataChunk( line, "\n" ); + + /* Try to interpret line as number of positions to read */ + if ( parseUint32( line, &numberOfObjectPositionsToRead ) == 0 ) + { + positionProvider->numPositions[idx] = numberOfObjectPositionsToRead; + positionProvider->positions[idx] = count_calloc( numberOfObjectPositionsToRead, sizeof( Prndr_AudioObjectPosition ) ); + positionProvider->positionDurations[idx] = count_calloc( numberOfObjectPositionsToRead, sizeof( uint16_t ) ); + + for ( i = 0; i < numberOfObjectPositionsToRead; ++i ) + { + parseObjectPosition( line, &positionProvider->positions[idx][i], &positionProvider->positionDurations[idx][i] ); + } + } + else /* If not a number, it is a relative path from main metadata file to a metadata file */ + { + char fullpath[FILENAME_MAX]; + *fullpath = '\0'; + strncat( fullpath, inDir, strlen( inDir ) ); + strncat( fullpath, line, sizeof( fullpath ) - strlen( fullpath ) - 1 ); + if ( ( positionProvider->ismReaders[idx] = IsmFileReader_open( fullpath ) ) == NULL ) + { + fprintf( stderr, "Error: ISM input metadata file %s could not be opened\n", line ); + exit( -1 ); + } + } + + /* Read optional values */ + parseOptionalInputValues( line, &inConfig->audioObjects[idx].gain_dB ); +} + +static void parseSba( char *line, + Prndr_InputConfig *inConfig, + int32_t idx ) +{ + uint8_t ambiOrder; + + readNextMetadataChunk( line, "\n" ); + parseUint8( line, &inConfig->ambisonicsBuses[idx].inputChannelIndex ); + --inConfig->ambisonicsBuses[idx].inputChannelIndex; /* Convert from 1-indexing */ + + readNextMetadataChunk( line, "\n" ); + parseUint8( line, &ambiOrder ); + inConfig->ambisonicsBuses[idx].ambisonicsConfig = ambisonicsOrderToEnum( ambiOrder ); + + /* Read optional values */ + parseOptionalInputValues( line, &inConfig->ambisonicsBuses[idx].gain_dB ); +} + +static void parseMc( char *line, + Prndr_InputConfig *inConfig, + int32_t idx ) +{ + uint8_t cicpIndex; + + readNextMetadataChunk( line, "\n" ); + parseUint8( line, &inConfig->multiChannelBuses[idx].inputChannelIndex ); + --inConfig->multiChannelBuses[idx].inputChannelIndex; /* Convert from 1-indexing */ + + readNextMetadataChunk( line, "\n" ); + parseUint8( line, &cicpIndex ); + inConfig->multiChannelBuses[idx].speakerLayout = speakerLayoutCicpToEnum( cicpIndex ); + + /* Read optional values */ + parseOptionalInputValues( line, &inConfig->multiChannelBuses[idx].gain_dB ); +} + +static void parseMetadata( + char *metadataString, + char *inDir, + Prndr_InputConfig *inConfig, + Prndr_IsmPositionProvider *positionProvider ) +{ + char line[PRERENDERER_MAX_METADATA_LINE_LENGTH]; + char *delimiter; + char *token; + uint8_t totalNumberOfAudioObjects; + uint8_t counterChannelAudioObjects; + uint8_t counterAmbisonicsAudioObjects; + uint8_t counterMonoAudioObjects; + uint8_t num_parsed_inputs; + + delimiter = "\n"; + + token = strtok( metadataString, delimiter ); + if ( token == NULL ) + { + fprintf( stderr, "Unexpected metadata format\n" ); + exit( -1 ); + } + if ( !sscanf( token, "%s", line ) ) + { + fprintf( stderr, "Unexpected metadata format\n" ); + exit( -1 ); + } + + parseUint8( line, &totalNumberOfAudioObjects ); + if ( totalNumberOfAudioObjects <= 0 ) + { + fprintf( stderr, "Invalid metadata: number of inputs should be > 0\n" ); + exit( -1 ); + } + + num_parsed_inputs = 0; + counterChannelAudioObjects = 0; + counterAmbisonicsAudioObjects = 0; + counterMonoAudioObjects = 0; + + readNextMetadataChunk( line, delimiter ); + + while ( num_parsed_inputs < totalNumberOfAudioObjects ) + { + /* `line` will already contain the identifier ("MC", "SBA" or "ISM") after previous iteration */ + if ( strcmp( line, "MC" ) == 0 ) + { + ++counterChannelAudioObjects; + if ( counterChannelAudioObjects > PRERENDERER_MAX_MC_INPUTS ) + { + fprintf( stderr, "Metadata exceeds the supported number of MC inputs\n" ); + exit( -1 ); + } + parseMc( line, inConfig, counterChannelAudioObjects - 1 ); + } + else if ( strcmp( line, "SBA" ) == 0 ) + { + ++counterAmbisonicsAudioObjects; + if ( counterAmbisonicsAudioObjects > PRERENDERER_MAX_SBA_INPUTS ) + { + fprintf( stderr, "Metadata exceeds the supported number of SBA inputs\n" ); + exit( -1 ); + } + parseSba( line, inConfig, counterAmbisonicsAudioObjects - 1 ); + } + else if ( strcmp( line, "ISM" ) == 0 ) + { + ++counterMonoAudioObjects; + if ( counterMonoAudioObjects > PRERENDERER_MAX_ISM_INPUTS ) + { + fprintf( stderr, "Metadata exceeds the supported number of ISM inputs\n" ); + exit( -1 ); + } + parseIsm( line, inDir, inConfig, positionProvider, counterMonoAudioObjects - 1 ); + } + else if ( line[0] == '\0' ) + { + fprintf( stderr, "Metadata string too short - expected %d inputs, found %d.\n", totalNumberOfAudioObjects, num_parsed_inputs ); + exit( -1 ); + } + else + { + fprintf( stderr, "Unexpected metadata identifier\n" ); + exit( -1 ); + } + + ++num_parsed_inputs; + } + + inConfig->numAudioObjects = counterMonoAudioObjects; + inConfig->numAmbisonicsBuses = counterAmbisonicsAudioObjects; + inConfig->numMultiChannelBuses = counterChannelAudioObjects; + positionProvider->numObjects = counterMonoAudioObjects; + + /* check for trailing text */ + token = strtok( NULL, delimiter ); + if ( token != NULL && sscanf( token, "%s", line ) ) + { + fprintf( stderr, "Trailing text in metadata file\n" ); + exit( -1 ); + } +} + +void parseConfigFile( char *path, char *audioFilePath, Prndr_InputConfig *inConfig, Prndr_IsmPositionProvider *positionProvider ) +{ + uint32_t inAudioFilePathLen; + char inAudioFilePath[FILENAME_MAX]; + uint32_t mtdStrLen; + char mtdStr[PRERENDERER_MAX_METADATA_LENGTH]; + char inDir[FILENAME_MAX]; + char *lastSlash = NULL; + + inAudioFilePathLen = FILENAME_MAX; + mtdStrLen = PRERENDERER_MAX_METADATA_LENGTH; + splitConfigFile( path, + mtdStr, + &mtdStrLen, + inAudioFilePath, + &inAudioFilePathLen ); + + remove_cr( mtdStr ); + convert_backslash( inAudioFilePath ); + + /* Trim config file path to get path to the dir containing it */ + lastSlash = strrchr( path, SEP_FOLDER ); + *inDir = '\0'; + if ( lastSlash != NULL ) + { + strncat( inDir, path, ( lastSlash - path + 1 ) ); + } + + /* Append audio file path (relative to config file location) + * to config file location path to get full absolute path */ + strcpy( audioFilePath, inDir ); + strncat( audioFilePath, inAudioFilePath, inAudioFilePathLen ); + + parseMetadata( mtdStr, inDir, inConfig, positionProvider ); +} + +static void convert_backslash( char *str ) +{ + int i, len; + + /* check that all backslashes are correct on the given platform */ + len = strlen( str ); + + for ( i = 0; i < len; i++ ) + { +#ifdef _WIN32 + if ( str[i] == '/' ) + { + str[i] = '\\'; + } +#else + if ( str[i] == '\\' ) + { + str[i] = '/'; + } +#endif + } + + return; +} + +static void remove_cr( char *str ) +{ + char *pos; + + /* remove all \r characters from the string */ + pos = strchr( str, '\r' ); + while ( pos != NULL ) + { + strcpy( pos, pos + 1 ); + pos = strchr( pos, '\r' ); + } + + return; +} diff --git a/scripts/prerenderer_configs/IVAS_ISM_metadata_-30_0.csv b/scripts/prerenderer_configs/IVAS_ISM_metadata_-30_0.csv new file mode 100644 index 0000000000..f25d25b2f4 --- /dev/null +++ b/scripts/prerenderer_configs/IVAS_ISM_metadata_-30_0.csv @@ -0,0 +1,50 @@ +0000,-030.00,+00.00,01.00,000.00,1.00 +0001,-030.00,+00.00,01.00,000.00,1.00 +0002,-030.00,+00.00,01.00,000.00,1.00 +0003,-030.00,+00.00,01.00,000.00,1.00 +0004,-030.00,+00.00,01.00,000.00,1.00 +0005,-030.00,+00.00,01.00,000.00,1.00 +0006,-030.00,+00.00,01.00,000.00,1.00 +0007,-030.00,+00.00,01.00,000.00,1.00 +0008,-030.00,+00.00,01.00,000.00,1.00 +0009,-030.00,+00.00,01.00,000.00,1.00 +0010,-030.00,+00.00,01.00,000.00,1.00 +0011,-030.00,+00.00,01.00,000.00,1.00 +0012,-030.00,+00.00,01.00,000.00,1.00 +0013,-030.00,+00.00,01.00,000.00,1.00 +0014,-030.00,+00.00,01.00,000.00,1.00 +0015,-030.00,+00.00,01.00,000.00,1.00 +0016,-030.00,+00.00,01.00,000.00,1.00 +0017,-030.00,+00.00,01.00,000.00,1.00 +0018,-030.00,+00.00,01.00,000.00,1.00 +0019,-030.00,+00.00,01.00,000.00,1.00 +0020,-030.00,+00.00,01.00,000.00,1.00 +0021,-030.00,+00.00,01.00,000.00,1.00 +0022,-030.00,+00.00,01.00,000.00,1.00 +0023,-030.00,+00.00,01.00,000.00,1.00 +0024,-030.00,+00.00,01.00,000.00,1.00 +0025,-030.00,+00.00,01.00,000.00,1.00 +0026,-030.00,+00.00,01.00,000.00,1.00 +0027,-030.00,+00.00,01.00,000.00,1.00 +0028,-030.00,+00.00,01.00,000.00,1.00 +0029,-030.00,+00.00,01.00,000.00,1.00 +0030,-030.00,+00.00,01.00,000.00,1.00 +0031,-030.00,+00.00,01.00,000.00,1.00 +0032,-030.00,+00.00,01.00,000.00,1.00 +0033,-030.00,+00.00,01.00,000.00,1.00 +0034,-030.00,+00.00,01.00,000.00,1.00 +0035,-030.00,+00.00,01.00,000.00,1.00 +0036,-030.00,+00.00,01.00,000.00,1.00 +0037,-030.00,+00.00,01.00,000.00,1.00 +0038,-030.00,+00.00,01.00,000.00,1.00 +0039,-030.00,+00.00,01.00,000.00,1.00 +0040,-030.00,+00.00,01.00,000.00,1.00 +0041,-030.00,+00.00,01.00,000.00,1.00 +0042,-030.00,+00.00,01.00,000.00,1.00 +0043,-030.00,+00.00,01.00,000.00,1.00 +0044,-030.00,+00.00,01.00,000.00,1.00 +0045,-030.00,+00.00,01.00,000.00,1.00 +0046,-030.00,+00.00,01.00,000.00,1.00 +0047,-030.00,+00.00,01.00,000.00,1.00 +0048,-030.00,+00.00,01.00,000.00,1.00 +0049,-030.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/prerenderer_configs/IVAS_ISM_metadata_0_0.csv b/scripts/prerenderer_configs/IVAS_ISM_metadata_0_0.csv new file mode 100644 index 0000000000..613f66457f --- /dev/null +++ b/scripts/prerenderer_configs/IVAS_ISM_metadata_0_0.csv @@ -0,0 +1,50 @@ +0000,+000.00,+00.00,01.00,000.00,1.00 +0001,+000.00,+00.00,01.00,000.00,1.00 +0002,+000.00,+00.00,01.00,000.00,1.00 +0003,+000.00,+00.00,01.00,000.00,1.00 +0004,+000.00,+00.00,01.00,000.00,1.00 +0005,+000.00,+00.00,01.00,000.00,1.00 +0006,+000.00,+00.00,01.00,000.00,1.00 +0007,+000.00,+00.00,01.00,000.00,1.00 +0008,+000.00,+00.00,01.00,000.00,1.00 +0009,+000.00,+00.00,01.00,000.00,1.00 +0010,+000.00,+00.00,01.00,000.00,1.00 +0011,+000.00,+00.00,01.00,000.00,1.00 +0012,+000.00,+00.00,01.00,000.00,1.00 +0013,+000.00,+00.00,01.00,000.00,1.00 +0014,+000.00,+00.00,01.00,000.00,1.00 +0015,+000.00,+00.00,01.00,000.00,1.00 +0016,+000.00,+00.00,01.00,000.00,1.00 +0017,+000.00,+00.00,01.00,000.00,1.00 +0018,+000.00,+00.00,01.00,000.00,1.00 +0019,+000.00,+00.00,01.00,000.00,1.00 +0020,+000.00,+00.00,01.00,000.00,1.00 +0021,+000.00,+00.00,01.00,000.00,1.00 +0022,+000.00,+00.00,01.00,000.00,1.00 +0023,+000.00,+00.00,01.00,000.00,1.00 +0024,+000.00,+00.00,01.00,000.00,1.00 +0025,+000.00,+00.00,01.00,000.00,1.00 +0026,+000.00,+00.00,01.00,000.00,1.00 +0027,+000.00,+00.00,01.00,000.00,1.00 +0028,+000.00,+00.00,01.00,000.00,1.00 +0029,+000.00,+00.00,01.00,000.00,1.00 +0030,+000.00,+00.00,01.00,000.00,1.00 +0031,+000.00,+00.00,01.00,000.00,1.00 +0032,+000.00,+00.00,01.00,000.00,1.00 +0033,+000.00,+00.00,01.00,000.00,1.00 +0034,+000.00,+00.00,01.00,000.00,1.00 +0035,+000.00,+00.00,01.00,000.00,1.00 +0036,+000.00,+00.00,01.00,000.00,1.00 +0037,+000.00,+00.00,01.00,000.00,1.00 +0038,+000.00,+00.00,01.00,000.00,1.00 +0039,+000.00,+00.00,01.00,000.00,1.00 +0040,+000.00,+00.00,01.00,000.00,1.00 +0041,+000.00,+00.00,01.00,000.00,1.00 +0042,+000.00,+00.00,01.00,000.00,1.00 +0043,+000.00,+00.00,01.00,000.00,1.00 +0044,+000.00,+00.00,01.00,000.00,1.00 +0045,+000.00,+00.00,01.00,000.00,1.00 +0046,+000.00,+00.00,01.00,000.00,1.00 +0047,+000.00,+00.00,01.00,000.00,1.00 +0048,+000.00,+00.00,01.00,000.00,1.00 +0049,+000.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/prerenderer_configs/IVAS_ISM_metadata_30_0.csv b/scripts/prerenderer_configs/IVAS_ISM_metadata_30_0.csv new file mode 100644 index 0000000000..1bcd90bbcf --- /dev/null +++ b/scripts/prerenderer_configs/IVAS_ISM_metadata_30_0.csv @@ -0,0 +1,50 @@ +0000,+030.00,+00.00,01.00,000.00,1.00 +0001,+030.00,+00.00,01.00,000.00,1.00 +0002,+030.00,+00.00,01.00,000.00,1.00 +0003,+030.00,+00.00,01.00,000.00,1.00 +0004,+030.00,+00.00,01.00,000.00,1.00 +0005,+030.00,+00.00,01.00,000.00,1.00 +0006,+030.00,+00.00,01.00,000.00,1.00 +0007,+030.00,+00.00,01.00,000.00,1.00 +0008,+030.00,+00.00,01.00,000.00,1.00 +0009,+030.00,+00.00,01.00,000.00,1.00 +0010,+030.00,+00.00,01.00,000.00,1.00 +0011,+030.00,+00.00,01.00,000.00,1.00 +0012,+030.00,+00.00,01.00,000.00,1.00 +0013,+030.00,+00.00,01.00,000.00,1.00 +0014,+030.00,+00.00,01.00,000.00,1.00 +0015,+030.00,+00.00,01.00,000.00,1.00 +0016,+030.00,+00.00,01.00,000.00,1.00 +0017,+030.00,+00.00,01.00,000.00,1.00 +0018,+030.00,+00.00,01.00,000.00,1.00 +0019,+030.00,+00.00,01.00,000.00,1.00 +0020,+030.00,+00.00,01.00,000.00,1.00 +0021,+030.00,+00.00,01.00,000.00,1.00 +0022,+030.00,+00.00,01.00,000.00,1.00 +0023,+030.00,+00.00,01.00,000.00,1.00 +0024,+030.00,+00.00,01.00,000.00,1.00 +0025,+030.00,+00.00,01.00,000.00,1.00 +0026,+030.00,+00.00,01.00,000.00,1.00 +0027,+030.00,+00.00,01.00,000.00,1.00 +0028,+030.00,+00.00,01.00,000.00,1.00 +0029,+030.00,+00.00,01.00,000.00,1.00 +0030,+030.00,+00.00,01.00,000.00,1.00 +0031,+030.00,+00.00,01.00,000.00,1.00 +0032,+030.00,+00.00,01.00,000.00,1.00 +0033,+030.00,+00.00,01.00,000.00,1.00 +0034,+030.00,+00.00,01.00,000.00,1.00 +0035,+030.00,+00.00,01.00,000.00,1.00 +0036,+030.00,+00.00,01.00,000.00,1.00 +0037,+030.00,+00.00,01.00,000.00,1.00 +0038,+030.00,+00.00,01.00,000.00,1.00 +0039,+030.00,+00.00,01.00,000.00,1.00 +0040,+030.00,+00.00,01.00,000.00,1.00 +0041,+030.00,+00.00,01.00,000.00,1.00 +0042,+030.00,+00.00,01.00,000.00,1.00 +0043,+030.00,+00.00,01.00,000.00,1.00 +0044,+030.00,+00.00,01.00,000.00,1.00 +0045,+030.00,+00.00,01.00,000.00,1.00 +0046,+030.00,+00.00,01.00,000.00,1.00 +0047,+030.00,+00.00,01.00,000.00,1.00 +0048,+030.00,+00.00,01.00,000.00,1.00 +0049,+030.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/prerenderer_configs/IVAS_ISM_metadata_circle.csv b/scripts/prerenderer_configs/IVAS_ISM_metadata_circle.csv new file mode 100644 index 0000000000..f5fbf46941 --- /dev/null +++ b/scripts/prerenderer_configs/IVAS_ISM_metadata_circle.csv @@ -0,0 +1,50 @@ +0000,+000.00,+00.00,01.00,000.00,1.00 +0001,+007.00,+00.00,01.00,000.00,1.00 +0002,+014.00,+00.00,01.00,000.00,1.00 +0003,+022.00,+00.00,01.00,000.00,1.00 +0004,+029.00,+00.00,01.00,000.00,1.00 +0005,+036.00,+00.00,01.00,000.00,1.00 +0006,+043.00,+00.00,01.00,000.00,1.00 +0007,+050.00,+00.00,01.00,000.00,1.00 +0008,+058.00,+00.00,01.00,000.00,1.00 +0009,+065.00,+00.00,01.00,000.00,1.00 +0010,+072.00,+00.00,01.00,000.00,1.00 +0011,+079.00,+00.00,01.00,000.00,1.00 +0012,+086.00,+00.00,01.00,000.00,1.00 +0013,+094.00,+00.00,01.00,000.00,1.00 +0014,+101.00,+00.00,01.00,000.00,1.00 +0015,+108.00,+00.00,01.00,000.00,1.00 +0016,+115.00,+00.00,01.00,000.00,1.00 +0017,+122.00,+00.00,01.00,000.00,1.00 +0018,+130.00,+00.00,01.00,000.00,1.00 +0019,+137.00,+00.00,01.00,000.00,1.00 +0020,+144.00,+00.00,01.00,000.00,1.00 +0021,+151.00,+00.00,01.00,000.00,1.00 +0022,+158.00,+00.00,01.00,000.00,1.00 +0023,+166.00,+00.00,01.00,000.00,1.00 +0024,+173.00,+00.00,01.00,000.00,1.00 +0025,+180.00,+00.00,01.00,000.00,1.00 +0026,+187.00,+00.00,01.00,000.00,1.00 +0027,+194.00,+00.00,01.00,000.00,1.00 +0028,+202.00,+00.00,01.00,000.00,1.00 +0029,+209.00,+00.00,01.00,000.00,1.00 +0030,+216.00,+00.00,01.00,000.00,1.00 +0031,+223.00,+00.00,01.00,000.00,1.00 +0032,+230.00,+00.00,01.00,000.00,1.00 +0033,+238.00,+00.00,01.00,000.00,1.00 +0034,+245.00,+00.00,01.00,000.00,1.00 +0035,+252.00,+00.00,01.00,000.00,1.00 +0036,+259.00,+00.00,01.00,000.00,1.00 +0037,+266.00,+00.00,01.00,000.00,1.00 +0038,+274.00,+00.00,01.00,000.00,1.00 +0039,+281.00,+00.00,01.00,000.00,1.00 +0040,+288.00,+00.00,01.00,000.00,1.00 +0041,+295.00,+00.00,01.00,000.00,1.00 +0042,+302.00,+00.00,01.00,000.00,1.00 +0043,+310.00,+00.00,01.00,000.00,1.00 +0044,+317.00,+00.00,01.00,000.00,1.00 +0045,+324.00,+00.00,01.00,000.00,1.00 +0046,+331.00,+00.00,01.00,000.00,1.00 +0047,+338.00,+00.00,01.00,000.00,1.00 +0048,+346.00,+00.00,01.00,000.00,1.00 +0049,+353.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/prerenderer_configs/ism1_ivas_mtdt_config.txt b/scripts/prerenderer_configs/ism1_ivas_mtdt_config.txt new file mode 100644 index 0000000000..9032b472f6 --- /dev/null +++ b/scripts/prerenderer_configs/ism1_ivas_mtdt_config.txt @@ -0,0 +1,5 @@ +./unused.wav +1 +ISM +1 +IVAS_ISM_metadata_circle.csv \ No newline at end of file diff --git a/scripts/prerenderer_configs/ism1_shorthand_config.txt b/scripts/prerenderer_configs/ism1_shorthand_config.txt new file mode 100644 index 0000000000..4e9d400130 --- /dev/null +++ b/scripts/prerenderer_configs/ism1_shorthand_config.txt @@ -0,0 +1,55 @@ +./unused.wav +1 +ISM +1 +50 +1,0,0 +1,7,0 +1,14,0 +1,22,0 +1,29,0 +1,36,0 +1,43,0 +1,50,0 +1,58,0 +1,65,0 +1,72,0 +1,79,0 +1,86,0 +1,94,0 +1,101,0 +1,108,0 +1,115,0 +1,122,0 +1,130,0 +1,137,0 +1,144,0 +1,151,0 +1,158,0 +1,166,0 +1,173,0 +1,180,0 +1,-173,0 +1,-166,0 +1,-158,0 +1,-151,0 +1,-144,0 +1,-137,0 +1,-130,0 +1,-122,0 +1,-115,0 +1,-108,0 +1,-101,0 +1,-94,0 +1,-86,0 +1,-79,0 +1,-72,0 +1,-65,0 +1,-58,0 +1,-50,0 +1,-43,0 +1,-36,0 +1,-29,0 +1,-22,0 +1,-14,0 +1,-7,0 \ No newline at end of file diff --git a/scripts/prerenderer_configs/ism2_ivas_mtdt_config.txt b/scripts/prerenderer_configs/ism2_ivas_mtdt_config.txt new file mode 100644 index 0000000000..fbd1a3a7c3 --- /dev/null +++ b/scripts/prerenderer_configs/ism2_ivas_mtdt_config.txt @@ -0,0 +1,8 @@ +./unused.wav +2 +ISM +2 +IVAS_ISM_metadata_0_0.csv +ISM +1 +IVAS_ISM_metadata_circle.csv \ No newline at end of file diff --git a/scripts/prerenderer_configs/ism2_shorthand_config.txt b/scripts/prerenderer_configs/ism2_shorthand_config.txt new file mode 100644 index 0000000000..0ecbd144cb --- /dev/null +++ b/scripts/prerenderer_configs/ism2_shorthand_config.txt @@ -0,0 +1,59 @@ +./unused.wav +2 +ISM +2 +1 +1,0,0 +ISM +1 +50 +1,0,0 +1,7,0 +1,14,0 +1,22,0 +1,29,0 +1,36,0 +1,43,0 +1,50,0 +1,58,0 +1,65,0 +1,72,0 +1,79,0 +1,86,0 +1,94,0 +1,101,0 +1,108,0 +1,115,0 +1,122,0 +1,130,0 +1,137,0 +1,144,0 +1,151,0 +1,158,0 +1,166,0 +1,173,0 +1,180,0 +1,-173,0 +1,-166,0 +1,-158,0 +1,-151,0 +1,-144,0 +1,-137,0 +1,-130,0 +1,-122,0 +1,-115,0 +1,-108,0 +1,-101,0 +1,-94,0 +1,-86,0 +1,-79,0 +1,-72,0 +1,-65,0 +1,-58,0 +1,-50,0 +1,-43,0 +1,-36,0 +1,-29,0 +1,-22,0 +1,-14,0 +1,-7,0 \ No newline at end of file diff --git a/scripts/prerenderer_configs/ism3_ivas_mtdt_config.txt b/scripts/prerenderer_configs/ism3_ivas_mtdt_config.txt new file mode 100644 index 0000000000..373f5be7fa --- /dev/null +++ b/scripts/prerenderer_configs/ism3_ivas_mtdt_config.txt @@ -0,0 +1,16 @@ +./unused.wav +3 +ISM +2 +IVAS_ISM_metadata_0_0.csv +ISM +3 +5 +10,0,0 +10,0,90 +10,90,0 +10,0,-90 +10,-90,0 +ISM +1 +IVAS_ISM_metadata_circle.csv \ No newline at end of file diff --git a/scripts/prerenderer_configs/ism3_shorthand_config.txt b/scripts/prerenderer_configs/ism3_shorthand_config.txt new file mode 100644 index 0000000000..c02ee68f59 --- /dev/null +++ b/scripts/prerenderer_configs/ism3_shorthand_config.txt @@ -0,0 +1,67 @@ +./unused.wav +3 +ISM +2 +1 +1,0,0 +ISM +3 +5 +10,0,0 +10,0,90 +10,90,0 +10,0,-90 +10,-90,0 +ISM +1 +50 +1,0,0 +1,7,0 +1,14,0 +1,22,0 +1,29,0 +1,36,0 +1,43,0 +1,50,0 +1,58,0 +1,65,0 +1,72,0 +1,79,0 +1,86,0 +1,94,0 +1,101,0 +1,108,0 +1,115,0 +1,122,0 +1,130,0 +1,137,0 +1,144,0 +1,151,0 +1,158,0 +1,166,0 +1,173,0 +1,180,0 +1,-173,0 +1,-166,0 +1,-158,0 +1,-151,0 +1,-144,0 +1,-137,0 +1,-130,0 +1,-122,0 +1,-115,0 +1,-108,0 +1,-101,0 +1,-94,0 +1,-86,0 +1,-79,0 +1,-72,0 +1,-65,0 +1,-58,0 +1,-50,0 +1,-43,0 +1,-36,0 +1,-29,0 +1,-22,0 +1,-14,0 +1,-7,0 \ No newline at end of file diff --git a/scripts/prerenderer_configs/ism4_ivas_mtdt_config.txt b/scripts/prerenderer_configs/ism4_ivas_mtdt_config.txt new file mode 100644 index 0000000000..e37cc4d429 --- /dev/null +++ b/scripts/prerenderer_configs/ism4_ivas_mtdt_config.txt @@ -0,0 +1,20 @@ +./unused.wav +4 +ISM +2 +IVAS_ISM_metadata_0_0.csv +ISM +3 +5 +10,0,0 +10,0,90 +10,90,0 +10,0,-90 +10,-90,0 +ISM +4 +1 +1,30,0 +ISM +1 +IVAS_ISM_metadata_circle.csv \ No newline at end of file diff --git a/scripts/prerenderer_configs/ism4_shorthand_config.txt b/scripts/prerenderer_configs/ism4_shorthand_config.txt new file mode 100644 index 0000000000..c49bc6f101 --- /dev/null +++ b/scripts/prerenderer_configs/ism4_shorthand_config.txt @@ -0,0 +1,71 @@ +./unused.wav +4 +ISM +2 +1 +1,0,0 +ISM +3 +5 +10,0,0 +10,0,90 +10,90,0 +10,0,-90 +10,-90,0 +ISM +4 +1 +1,30,0 +ISM +1 +50 +1,0,0 +1,7,0 +1,14,0 +1,22,0 +1,29,0 +1,36,0 +1,43,0 +1,50,0 +1,58,0 +1,65,0 +1,72,0 +1,79,0 +1,86,0 +1,94,0 +1,101,0 +1,108,0 +1,115,0 +1,122,0 +1,130,0 +1,137,0 +1,144,0 +1,151,0 +1,158,0 +1,166,0 +1,173,0 +1,180,0 +1,-173,0 +1,-166,0 +1,-158,0 +1,-151,0 +1,-144,0 +1,-137,0 +1,-130,0 +1,-122,0 +1,-115,0 +1,-108,0 +1,-101,0 +1,-94,0 +1,-86,0 +1,-79,0 +1,-72,0 +1,-65,0 +1,-58,0 +1,-50,0 +1,-43,0 +1,-36,0 +1,-29,0 +1,-22,0 +1,-14,0 +1,-7,0 \ No newline at end of file diff --git a/scripts/prerenderer_configs/mixed_ivas_mtdt_config.txt b/scripts/prerenderer_configs/mixed_ivas_mtdt_config.txt new file mode 100644 index 0000000000..851d507f9d --- /dev/null +++ b/scripts/prerenderer_configs/mixed_ivas_mtdt_config.txt @@ -0,0 +1,14 @@ +./unused.wav +4 +ISM +1 +IVAS_ISM_metadata_-30_0.csv +ISM +2 +IVAS_ISM_metadata_30_0.csv +SBA +3 +1 +MC +7 +2 \ No newline at end of file diff --git a/scripts/prerenderer_configs/mixed_ivas_mtdt_gain_config.txt b/scripts/prerenderer_configs/mixed_ivas_mtdt_gain_config.txt new file mode 100644 index 0000000000..3d4e576fcc --- /dev/null +++ b/scripts/prerenderer_configs/mixed_ivas_mtdt_gain_config.txt @@ -0,0 +1,16 @@ +./unused.wav +4 +ISM +1 +IVAS_ISM_metadata_-30_0.csv +gain_dB:-6 +ISM +2 +IVAS_ISM_metadata_30_0.csv +SBA +3 +1 +gain_dB:0.5 +MC +7 +2 \ No newline at end of file diff --git a/scripts/prerenderer_configs/mixed_shorthand_config.txt b/scripts/prerenderer_configs/mixed_shorthand_config.txt new file mode 100644 index 0000000000..edb510e237 --- /dev/null +++ b/scripts/prerenderer_configs/mixed_shorthand_config.txt @@ -0,0 +1,16 @@ +./unused.wav +4 +ISM +1 +1 +1,-30,0 +ISM +2 +1 +1,30,0 +SBA +3 +1 +MC +7 +2 \ No newline at end of file diff --git a/scripts/prerenderer_configs/mixed_shorthand_gain_config.txt b/scripts/prerenderer_configs/mixed_shorthand_gain_config.txt new file mode 100644 index 0000000000..b0cd5770a2 --- /dev/null +++ b/scripts/prerenderer_configs/mixed_shorthand_gain_config.txt @@ -0,0 +1,18 @@ +./unused.wav +4 +ISM +1 +1 +1,-30,0 +gain_dB:-6 +ISM +2 +1 +1,30,0 +SBA +3 +1 +gain_dB:0.5 +MC +7 +2 \ No newline at end of file diff --git a/scripts/prerenderer_configs/mixed_shorthand_limiter_config.txt b/scripts/prerenderer_configs/mixed_shorthand_limiter_config.txt new file mode 100644 index 0000000000..7e39b33737 --- /dev/null +++ b/scripts/prerenderer_configs/mixed_shorthand_limiter_config.txt @@ -0,0 +1,20 @@ +./unused.wav +4 +ISM +1 +1 +1,-30,0 +gain_dB:20 +ISM +2 +1 +1,30,0 +gain_dB:20 +SBA +3 +1 +gain_dB:20 +MC +7 +2 +gain_dB:20 \ No newline at end of file diff --git a/scripts/prerenderer_configs/prerenderer_config_format_readme.txt b/scripts/prerenderer_configs/prerenderer_config_format_readme.txt new file mode 100644 index 0000000000..9f78ca4327 --- /dev/null +++ b/scripts/prerenderer_configs/prerenderer_config_format_readme.txt @@ -0,0 +1,141 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + + +######################## Pre-renderer config file format ######################## + +To run, the pre-renderer requires a config file describing the input scene. +The expected format of the config file is as follows: + +------------------------------------ Line 1: ------------------------------------ +Path to a "multitrack" audio file. This should be a single multichannel wav/pcm +file that contains all input audio. For example channels 1-4 can be an FOA scene, +channel 5 - an object and channels 6-11 - a 5.1 channel bed. + +The path given must be relative to the location of the config file. + +This path has lower priority than the one given on the command line: +* The path in the config file is ignored if the --inputAudio argument to the + pre-renderer executable is specified. +* When running together with the encoder using EVS_cod_prerenderer.sh, the path in + the config file is ignored and the one provided as script argument is used + instead. + +------------------------------------ Line 2: ------------------------------------ +Contains number of inputs. An input can either be an Ambisonics scene, an +object or a channel bed. + +This is NOT the total number of channels in the input audio file. + +The pre-renderer currently supports simultaneously: + * Up to 2 SBA inputs + * Up to 2 MC inputs + * Up to 16 ISM inputs + +These limits can be freely changed with pre-processor macros, if needed. + +------------------------------- Following lines: -------------------------------- +Define each of the inputs. Inputs can be listed in any order - they are NOT +required to be listed in the same order as in the audio file. + +****************************** Input definitions: ******************************* +First line of an input definition contains the input type: SBA, MC or ISM. + +Following lines depend on the input type: + +SBA +Index of the first channel of this input in the multitrack file (1-indexed) +Ambisonics order + +MC +Index of the first channel of this input in the multitrack file (1-indexed) +CICP index of the speaker layout + +ISM +Index of this input's audio in the multitrack file (1-indexed) +Path to ISM metadata file (must be relative to config file location) + +OR + +ISM +Index of this input's audio in the multitrack file (1-indexed) +Number N of positions defined, followed by N lines in form: +stay in position for x frames, azimuth, elevation + +(ISM position metadata defined this way is looped if there are more frames +of audio than given positions) + +************************** Optional input properties: *************************** +Each input definition can be followed by a list of optional properties in the +following format: + +: + +Each key-value pair should be placed on a separate line. + +Currently the following key-value pairs are supported: + +| key | value type | +|---------------------|--------------------------------------| +| gain_dB | float | + + +================================ Example config ================================= +The following example defines a scene with 4 inputs: + +* ISM with trajectory defined in a separate file. Channel 12 in the input file. + Gain of 0.5 dB will be applied. +* Ambisonics, order 1. Channels 1-4 in the input audio file. Apply -6 dB of gain. +* CICP6 channel bed. Channels 5-10 in the input audio file. +* ISM with 2 defined positions (-90,0) and (90,0). Channel 11 in the input file. + The object will start at position (-90,0) and stay there for 5 frames, then + move to (90,0) and stay there for 5 frames. This trajectory is looped over the + duration of the input audio file. +================================================================================= +./input_audio.wav +4 +ISM +12 +path/to/IVAS_ISM_metadata.csv +gain_dB:0.5 +SBA +1 +1 +gain_dB:-6 +MC +5 +6 +ISM +11 +2 +5,-90,0 +5,90,0 diff --git a/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_VIRTUALLS_SBA3.mat b/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_VIRTUALLS_SBA3.mat new file mode 100644 index 0000000000..5bc7464f7f --- /dev/null +++ b/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_VIRTUALLS_SBA3.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b41a527b6ba22b4c100265655ca801ee4d2dba3c3e03dc58f7cc5d99e397d2c3 +size 11795531 diff --git a/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_combined.mat b/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_combined.mat new file mode 100644 index 0000000000..61ba946617 --- /dev/null +++ b/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_combined.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:081a9053c8b04831d97e6f18d641d4737b2c23b076778a9b41c7b3a41d954c32 +size 6348446 diff --git a/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_full.mat b/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_full.mat new file mode 100644 index 0000000000..440c8aedd6 --- /dev/null +++ b/scripts/pyaudio3dtools/BRIRs_mat/IIS_BRIR_officialMPEG_222UC_full.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0544d1cf80a7cceb156760107d81b10fd787807bb0ea1e74e9aeb552474b3373 +size 13233924 diff --git a/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_SBA3.mat b/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_SBA3.mat new file mode 100644 index 0000000000..0d113a34af --- /dev/null +++ b/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_SBA3.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02c8a25178b36399054c1802f00bb5a8739f3ac950c21b0c760c046b1dba530d +size 36201 diff --git a/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_combined.mat b/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_combined.mat new file mode 100644 index 0000000000..e52e031e8c --- /dev/null +++ b/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_combined.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9660be83192f7babb4f67e19653a94bc02cee7b3071065880cf618547c19d842 +size 20138 diff --git a/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_full.mat b/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_full.mat new file mode 100644 index 0000000000..f2c22c39ec --- /dev/null +++ b/scripts/pyaudio3dtools/HRIRs_mat/ORANGE_HRIR_53_48000_full.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05ae461fc303c8498d5912ebe37cd1601c077c2505baf3da3dbe12b37e8f2cf0 +size 14097574 diff --git a/scripts/pyaudio3dtools/__init__.py b/scripts/pyaudio3dtools/__init__.py new file mode 100644 index 0000000000..553db5ff99 --- /dev/null +++ b/scripts/pyaudio3dtools/__init__.py @@ -0,0 +1,52 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +""" +pyaudio3dtools +==== + +Provides + Basic methods for handling 3D audio in different formats (channel-based, object-based, Ambisonics) + +Imports +------- +functions +class +""" +from . import ( + audioarray, + audiofile, + binauralrenderer, + hoadecoder, + prerenderer, + spatialaudioconvert, + spatialaudioformat, + spatialmetadata, +) diff --git a/scripts/pyaudio3dtools/audio3dtools.py b/scripts/pyaudio3dtools/audio3dtools.py new file mode 100644 index 0000000000..ecdc317e98 --- /dev/null +++ b/scripts/pyaudio3dtools/audio3dtools.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import argparse +import logging +import os + +from pyaudio3dtools import ( + audiofile, + binauralrenderer, + spatialaudioconvert, + spatialaudioformat, +) + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +def main(): + parser = argparse.ArgumentParser( + description="Audio3DTools: Convert/Manipulate spatial audio files." + ) + + """ Required arguments """ + parser.add_argument( + "-i", + "--infiles", + required=True, + type=str, + help="input file *.wav or *.pcm or directory", + default=None, + ) + parser.add_argument( + "-o", + "--outdir", + required=True, + type=str, + help="output file *.wav or directory", + default="out", + ) + parser.add_argument( + "-f", + "--informat", + required=True, + type=str, + metavar="INFORMAT", + help="Input format (use -l/-L for a list)", + default=None, + ) + + """ Additional arguments """ + parser.add_argument( + "-F", + "--outformat", + type=str, + metavar="OUTFORMAT", + help="Output format (default = None, same as input format)", + default=None, + ) + parser.add_argument( + "-s", + "--infs", + type=int, + help="Input sampling rate (Hz) (default = None, deduced for input file)", + default=None, + ) + parser.add_argument( + "-S", + "--outfs", + type=int, + help="Output sampling rate (Hz) (default = None, same as input)", + default=None, + ) + parser.add_argument( + "-c", + "--inchan", + type=int, + help="Input number of channels (default = None, deduced for input file)", + default=None, + ) + parser.add_argument( + "-y", + "--layoutfile", + help="File describing a custom LS layout", + type=str, + default=None, + ) + parser.add_argument( + "-fc", + "--outfc", + type=int, + help="Cut-off freq for eventual low-pass filtering (default = None)", + default=None, + ) + parser.add_argument( + "-T", + "--trajectory", + type=str, + help="Head-tracking trajectory file (default = None)", + default=None, + ) + parser.add_argument( + "-n", + "--normalize", + default=None, + type=int, + help="Normalize to given loudness with --LOUDNESS_TOOL (default = None)", + ) + + """ Miscellaneous or meta arguments """ + parser.add_argument( + "-b", + "--binaural", + help="Binauralize output in addition to converting to output format", + action="store_true", + ) + parser.add_argument( + "--binaural_dataset", + type=str, + help="Dataset to use for binaural rendering", + choices=["orange51", "orange52", "orange53", "orange54", "sadie"], + default="orange53", + ) + parser.add_argument( + "-l", + "--list", + help="list all supported spatial audio formats", + action="store_true", + ) + parser.add_argument( + "-L", + "--long", + help="list all supported spatial audio formats with long description", + action="store_true", + ) + parser.add_argument( + "-lt", + "--loudness_tool", + default="bs1770demo", + type=str, + help="Loudness tool to use: bs1770demo [default] or sv56demo (tool must be in $PATH or a path to the binary)", + ) + parser.add_argument( + "-rn", + "--dont-rename", + help="Disable default behaviour of renaming output files _.", + action="store_true", + ) + args = parser.parse_args() + + # Set up logging handlers + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + console_handler.setFormatter(logging.Formatter("%(message)s")) + + # Configure loggers + LOGGER_FORMAT = "%(asctime)s | %(name)-12s | %(levelname)-8s | %(message)s" + LOGGER_DATEFMT = "%m-%d %H:%M" + logging.basicConfig( + format=LOGGER_FORMAT, + datefmt=LOGGER_DATEFMT, + level=logging.INFO, + handlers=[console_handler], + ) + logger.info("Audio3DTools") + + if args.list is True or args.long is True: + logger.info("===Supported spatial audio formats===") + spatialaudioformat.Format.list_all(args.long) + + elif args.infiles is not None: + logger.info("===Convert spatial audio file===") + # Input folder can be a path, a file or a list of files + if os.path.isdir(args.infiles): + path = args.infiles + audio_list = [ + os.path.join(path, f) for f in os.listdir(path) if f.endswith((".wav")) + ] + else: + audio_list = [args.infiles] + + outdir = args.outdir + _, output_ext = os.path.splitext(os.path.basename(outdir)) + if (len(audio_list) == 1) and ( + (output_ext.lower() == ".wav") or (output_ext.lower() == ".pcm") + ): + outfile = outdir + else: + outfile = None + if not os.path.exists(outdir): + os.makedirs(outdir) + + for infile in audio_list: + logger.info(f" process {infile}") + + _, input_ext = os.path.splitext(os.path.basename(infile)) + + if outfile is None: + outfile = os.path.basename(infile) + if not args.dont_rename: + if args.outformat is not None: + outfile = outfile.replace(input_ext, f"_{args.outformat}.wav") + else: + outfile = outfile.replace(input_ext, ".out.wav") + outfile = os.path.join(outdir, outfile) + + out_format, out_fs = spatialaudioconvert.spatial_audio_convert( + infile, + outfile, + in_format=args.informat, + in_fs=args.infs, + in_nchans=args.inchan, + in_ls_layout_file=args.layoutfile, + out_format=args.outformat, + out_fs=args.outfs, + out_fc=args.outfc, + output_loudness=args.normalize, + loudness_tool=args.loudness_tool, + trajectory=args.trajectory, + binaural_dataset=args.binaural_dataset, + ) + + logger.info(f" Output {outfile}") + + if args.binaural: + if args.outformat.find("BINAURAL") > -1: + raise SystemExit( + "BINAURAL output format can not be binauralized again!" + ) + + out_format_config = spatialaudioformat.Format(in_format=out_format) + out_sig, out_fs = audiofile.readfile( + outfile, nchannels=out_format_config.nchannels, fs=out_fs + ) + bin_sig = binauralrenderer.binaural_rendering( + out_sig, out_format_config.name, fs=out_fs + ) + _, output_ext = os.path.splitext(os.path.basename(outfile)) + output_binaural_wav = outfile.replace(output_ext, "_BINAURAL.wav") + audiofile.writefile(output_binaural_wav, bin_sig, out_fs) + logger.info(f" Output binaural {output_binaural_wav}") + + outfile = None + else: + raise Exception( + "Input file must be provided for conversion and audio manipulation." + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/pyaudio3dtools/audioarray.py b/scripts/pyaudio3dtools/audioarray.py new file mode 100644 index 0000000000..5b26edf0f1 --- /dev/null +++ b/scripts/pyaudio3dtools/audioarray.py @@ -0,0 +1,409 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import math +from typing import Optional, Tuple + +import numpy as np +import scipy.signal as sig + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +def convert( + x: np.ndarray, + out_nchans: Optional[int] = None, + in_fs: Optional[int] = None, + out_fs: Optional[int] = None, +) -> np.ndarray: + """Convert audio array, change nchannels and sampling rate + + Parameters + ---------- + x: numpy array + Input audio array + out_nchans: Optional[int] + Number of output channels, default out_nchans = in_nchans + in_fs: Optional[int] + Input sampling rate, default 48 kHz if required + out_fs: Optional[int] + Output sampling rate, default out_fs = in_fs + + Returns + ------- + y: numpy array + Ouput converted array + + """ + # Input config + if in_fs is None: + in_fs = 48000 + in_nchans = x.shape[1] + + # Output config + y = x + if out_fs is None: + out_fs = in_fs + if out_nchans is None: + out_nchans = in_nchans + + logger.debug(f"Input audio array: {x.shape[0]} by {x.shape[1]}") + + # Process + if in_nchans == out_nchans and in_fs == out_fs: + logger.debug("Convert file: nothing to be done") + else: + # adjust number of channels + if out_nchans < in_nchans: + y = y[:, 0:out_nchans] + elif out_nchans > in_nchans: + y = np.append(y, np.zeros((y.shape[0], out_nchans - in_nchans)), axis=1) + + # adjust sampling rate + y = resample(y, in_fs, out_fs) + + logger.debug(f"Output audio array: {y.shape[0]} by {y.shape[1]}") + + return y + + +def resample(x: np.ndarray, in_freq: int, out_freq: int) -> np.ndarray: + """Resample a multi-channel audio array + + Parameters + ---------- + x: numpy array + Input array + in_fs: int + Input sampling rate + out_fs: int + Output sampling rate + + Returns + ------- + y: + Output resampled numpy array + + """ + + if in_freq == out_freq or out_freq is None: + y = x + else: + # get gcd of original and deisred frequency + gcd = math.gcd(in_freq, out_freq) + + # calculate up-sampling factor + up_factor = int(out_freq / gcd) + + # calculate downsampling factor + down_factor = int(in_freq / gcd) + + # resample data using polyphase filtering across columns/channels + if x.ndim == 2: + y = sig.resample_poly(x[:, 0], up_factor, down_factor) + y = np.reshape(y, (y.shape[0], 1)) + for k in range(1, x.shape[1]): + a = sig.resample_poly(x[:, k], up_factor, down_factor) + a = np.reshape(a, (a.shape[0], 1)) + y = np.append(y, a, axis=1) + else: + y = sig.resample_poly(x, up_factor, down_factor) + + return y + + +def lpfilter(x: np.ndarray, fc: int, fs: int) -> np.ndarray: + """Low-pass filter a multi-channel audio array + + Parameters + ---------- + x: numpy array + Input array + fc: int + Cutoff frequency in Hz + out_fs: int + Sampling rate in Hz + + Returns + ------- + y: numpy array + Output low-pass filtered array + + """ + if (fc + 500) < (fs / 2.0): + # Design a Chebychev Type II filter, band_pass-band_stop = 500 Hz + N, Wn = sig.cheb2ord(fc / (fs / 2), (fc + 500) / (fs / 2), 3, 60) + b, a = sig.cheby2(N, 60, Wn, "low") + + # Apply the Butterworth filter for each channels, across time axis + # y = sig.lfilter(b, a, axis=0) # non zero-phase filter + y = sig.filtfilt(b, a, x, axis=0) # zero-phae filer, batch processing + else: + y = x + + return y + + +def cut(x: np.ndarray, limits: Tuple[int, int]) -> np.ndarray: + """Cut an audio array + + Parameters + ---------- + x: numpy array + Input array + limits: Tuple[int, int] + first and last samples to extract + + Returns + ------- + y: numpy array + Output cut array + """ + + in_samples, in_channels = x.shape + first_sample = limits[0] + last_sample = limits[1] + + if first_sample == 0 and (last_sample == -1 or last_sample == in_samples): + y = x + else: + if last_sample == -1: + last_sample = in_samples + + signal_start = first_sample + signal_end = last_sample + insert_start = 0 + insert_end = last_sample - first_sample + total_samples = last_sample - first_sample + if first_sample < 0: + samples_to_pad_begin = -first_sample + insert_start = samples_to_pad_begin + insert_end += samples_to_pad_begin + if last_sample > in_samples: + signal_end = in_samples + insert_end = insert_end - last_sample + in_samples + y = np.zeros((total_samples, in_channels), dtype=x.dtype) + y[insert_start:insert_end, :] = x[signal_start:signal_end, :] + + return y + + +def compare(ref: np.ndarray, test: np.ndarray, fs: int) -> dict: + """Compare two audio arrays + + Parameters + ---------- + ref: numpy array + Input reference array + test: numpy array + Input test array + fs: int + Input sampling rate in Hz + + Returns + ------- + result: dict + Comparison results + """ + framesize = fs // 50 + diff = abs(test - ref) + max_diff = int(diff.max()) + result = { + "bitexact": True, + "max_abs_diff": 0, + "max_abs_diff_pos_sample": 0, + "max_abs_diff_pos_channel": 0, + "max_abs_diff_pos_frame": 0, + "nsamples_diff": 0, + "nsamples_diff_percentage": 0.0, + "nframes_diff": 0, + "nframes_diff_percentage": 0.0, + } + if max_diff != 0: + if diff.ndim == 1: + nsamples_total = diff.shape + nchannels = 1 + else: + nsamples_total, nchannels = diff.shape + max_diff_pos = np.nonzero(diff == max_diff) + max_diff_pos = [ + max_diff_pos[0][0], + max_diff_pos[0][0] // framesize, + max_diff_pos[1][0], + ] + nsamples_diff = np.nonzero(diff)[0].size + nsamples_diff_percentage = nsamples_diff / (nsamples_total * nchannels) * 100.0 + nframes = nsamples_total // framesize + nframes_diff = 0 + for fr in range(nframes): + diff_fr = diff[fr * framesize : ((fr + 1) * framesize), :] + nframes_diff += 1 if diff_fr.nonzero()[0].size > 0 else 0 + nframes_diff_percentage = nframes_diff / nframes * 100.0 + result = { + "bitexact": False, + "max_abs_diff": max_diff, + "max_abs_diff_pos_sample": max_diff_pos[0], + "max_abs_diff_pos_channel": max_diff_pos[2], + "max_abs_diff_pos_frame": max_diff_pos[1], + "nsamples_diff": nsamples_diff, + "nsamples_diff_percentage": nsamples_diff_percentage, + "nframes_diff": nframes_diff, + "nframes_diff_percentage": nframes_diff_percentage, + } + return result + + +def getdelay(x: np.ndarray, y: np.ndarray) -> int: + """Get the delay between two audios signals + + Parameters + ---------- + x: numpy array + Input reference array + y: numpy array + Input test array + + Returns + ------- + result: int + delay of y in samples with respect to x (median of individual channel delays) + """ + if x.ndim == 1: + n_samples_x = x.shape + n_chan_x = 1 + else: + n_samples_x, n_chan_x = x.shape + if y.ndim == 1: + n_samples_y = y.shape + n_chan_y = 1 + else: + n_samples_y, n_chan_y = y.shape + if n_chan_x != n_chan_y: + raise ValueError + lags = np.arange(-n_samples_x + 1, n_samples_y) + lag = np.zeros((n_chan_x, 1), dtype=int) + for chan in range(n_chan_x): + correlation = sig.correlate(y[:, chan], x[:, chan], mode="full") + lag[chan] = lags[np.argmax(correlation)] + return int(np.median(lag)) + + +def limiter(x: np.ndarray, fs: int): + """Apply limiting to an audio signal + + Parameters + ---------- + x: numpy array + Input reference array + fs: int + Input sampling frequency + + Returns + ------- + None + """ + limiter_threshold = 32729 # -0.01dB FS + limiter_attack_seconds = 0.005 + attack_constant = 0.01 ** (1.0 / (limiter_attack_seconds * fs)) + release_heuristics_mem = 0.0 + gain = 1.0 + strong_saturation_cnt = 0 + + if x.ndim == 1: + n_samples_x = x.shape + n_chan_x = 1 + else: + n_samples_x, n_chan_x = x.shape + # framing + framesize = fs // 50 + nframes = n_samples_x // framesize + for fr in range(nframes): + apply_limiting = True + fr_sig = x[fr * framesize : ((fr + 1) * framesize), :] + sig_max = np.absolute(fr_sig).max() + release_heuristic = release_heuristics_mem + if sig_max > limiter_threshold: + frame_gain = limiter_threshold / sig_max + release_heuristic = min(1.0, release_heuristic + (4.0 * framesize / fs)) + else: + release_heuristic = max(0.0, release_heuristic - (framesize / fs)) + if gain >= 1.0 - 1e-10: + apply_limiting = False + + frame_gain = 1.0 + + if sig_max > 3 * limiter_threshold and strong_saturation_cnt > 0: + apply_strong_limiting = True + elif sig_max > 10 * limiter_threshold: + strong_saturation_cnt += 20 + apply_strong_limiting = True + else: + strong_saturation_cnt -= 1 + if strong_saturation_cnt < 0: + strong_saturation_cnt = 0 + apply_strong_limiting = False + + if apply_strong_limiting is True: + if frame_gain < 0.3: + frame_gain /= 3.0 + else: + apply_strong_limiting = False + + if frame_gain < 0.1 and apply_strong_limiting is False: + frame_gain = 0.1 + + if apply_limiting is True: + if frame_gain < gain: + fac = attack_constant ** (np.arange(1, framesize + 1, dtype=np.float32)) + else: + release_constant = 0.01 ** ( + 1.0 / (0.005 * (200.0 ** release_heuristic) * fs) + ) + fac = release_constant ** ( + np.arange(1, framesize + 1, dtype=np.float32) + ) + + fr_gain = np.tile(gain * fac + frame_gain * (1.0 - fac), (n_chan_x, 1)).T + fr_sig *= fr_gain + gain = fr_gain[-1, 0] + else: + gain = 1.0 + + release_heuristics_mem = release_heuristic + # hard limiting for everything that still sticks out + idx_max = np.where(fr_sig > 32767) + fr_sig[idx_max] = 32767 + idx_min = np.where(fr_sig < -32768) + fr_sig[idx_min] = -32768 diff --git a/scripts/pyaudio3dtools/audiofile.py b/scripts/pyaudio3dtools/audiofile.py new file mode 100644 index 0000000000..cd735dfe64 --- /dev/null +++ b/scripts/pyaudio3dtools/audiofile.py @@ -0,0 +1,742 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os +import platform +import shutil +import struct +import subprocess as sp +from importlib import import_module +from tempfile import TemporaryDirectory +from typing import Optional, Tuple + +import numpy as np +import scipy.io.wavfile as wav + +from pyaudio3dtools import audioarray, spatialaudioformat + + +def readfile( + filename: str, nchannels: int = 1, fs: int = 48000, outdtype="float" +) -> Tuple[np.ndarray, int]: + """Read audio file (.pcm or .wav) + + Parameters + ---------- + filename: str + Input file path + nchannels: Optional[int] + Number of input channels, required for .pcm otherwise default = 1 + fs: Optional[int] + Input sampling rate, required for .pcm input file, otherwise default = 48000 (Hz) + outdtype: Optional[int] + Data type of output array, python builtin or np.dtype + + Returns + ------- + x: np array + audio signal array + fs: int + signal sampling frequency + + """ + _, file_extension = os.path.splitext(os.path.basename(filename)) + + if file_extension == ".wav": + fs, data = wav.read(filename) + x = np.array(data, dtype=outdtype) + file_len = x.shape[0] + if x.ndim == 1: + # force to be a mtx + x = np.reshape(x, (file_len, 1)) + elif file_extension == ".pcm" or file_extension == ".raw": + x = np.fromfile(filename, dtype=np.int16).astype(outdtype) + signal_len = len(x) // nchannels + x = x.reshape(signal_len, nchannels) + else: + raise ValueError("Wrong input format. Use wav or pcm") + + return x, fs + + +def writefile(filename: str, x: np.ndarray, fs: int = 48000) -> None: + """Write audio file (.pcm or .wav) + + Parameters + ---------- + filename: str + Output file path (.pcm or .wav) + x: np array + Numpy 2D array of dimension: number of channels x number of samples + fs: Optional[int] + Output sampling rate, required for .pcm input file, otherwise default = 48000 (Hz) + + Returns + ------- + None + + """ + _, file_extension = os.path.splitext(os.path.basename(filename)) + + if file_extension == ".wav": + x = x.astype(np.int16) + wav.write(filename, fs, x) + elif file_extension == ".pcm" or file_extension == ".raw": + x = x.astype("int16").reshape(-1, 1) + x.tofile(filename) + else: + raise ValueError("Wrong input format. Use wav or pcm") + + +def convertfile( + in_file: str, + out_file: str, + in_nchans: Optional[int] = None, + out_nchans: Optional[int] = None, + in_fs: Optional[int] = None, + out_fs: Optional[int] = None, + verbose: bool = False, +) -> None: + """Convert audio file, can convert wav from/to pcm, change nchannels and sampling rate + + Parameters + ---------- + in_file: str + Input file path + out_file: str + Output file path + in_nchans: Optional[int] + Number of input channels required for .pcm inpout file + out_nchans: Optional[int] + Number of output channels, default out_nchans = in_nchans + in_fs: Optional[int] + Input sampling rate, required for .pcm input file + out_fs: Optional[int] + Output sampling rate, default out_fs = in_fs + + Returns + ------- + None + + """ + # Read input file + if in_fs is None: + in_fs = 48000 + if in_nchans is None: + in_nchans = 1 + x, in_fs = readfile(in_file, nchannels=in_nchans, fs=in_fs) + in_nchans = x.shape[1] + + # Configure output file + y = x + if out_fs is None: + out_fs = in_fs + if out_nchans is None: + out_nchans = in_nchans + + if verbose: + print(f"Input file: {in_file}, sampling rate {str(in_fs)} size {str(x.shape)}") + + # Process + if in_file == out_file and in_nchans == out_nchans and in_fs == out_fs: + if verbose: + print("Convert file: nothing to be done") + else: + y = audioarray.convert(x, out_nchans=out_nchans, in_fs=in_fs, out_fs=out_fs) + + # write/convert wav format + writefile(out_file, y, fs=out_fs) + if verbose: + print( + f"Written output file: {out_file}, sampling rate {str(out_fs)} size {str(y.shape)}" + ) + + +def concatenatefiles( + in_filenames: list, + out_file: str, + silence_pre: int, + silence_post: int, + in_fs: Optional[int] = 48000, + out_fs: Optional[int] = None, +) -> None: + """Horizontally concatenates audio files into one long file + + Parameters + __________ + in_filenames: list + Input list of filenmames (.pcm or .wav) + out_file: str + Output multi-channel audio file name (.pcm or .wav) + in_fs: Optional[int] = 48000 + Input sampling rate, default 48000 Hz + out_fs: Optional[int] = None + Output sampling rate, default out_fs=in_fs + fs: Optional[int] + Output sampling rate, required for .pcm input file, otherwise default = 48000 (Hz) + + Returns + ------- + None + """ + y = None + + if out_fs is None: + out_fs = in_fs + + # Create silence padding arrays + pad_pre = int(silence_pre * in_fs / 1000) + pad_post = int(silence_post * in_fs / 1000) + + # Read input files + for in_file in in_filenames: + x, in_fs = readfile(in_file, fs=in_fs) + + # pad with silence + pre = np.zeros((pad_pre, x.shape[1])) + post = np.zeros((pad_post, x.shape[1])) + x = np.concatenate([pre, x, post]) + + if y is None: + y = x + else: + y = np.concatenate([y, x]) + + y = audioarray.resample(y, in_fs, out_fs) + + writefile(out_file, y, fs=out_fs) + + +def combinefiles( + in_filenames: list, + out_file: str, + out_nchans: Optional[int] = None, + in_fs: Optional[int] = 48000, + out_fs: Optional[int] = None, + verbose: bool = False, +) -> None: + """Combines audio files into one multi-channel file + + Parameters + ---------- + in_filenames: list + Input list of filenmames (.pcm or .wav) + out_file: str + Output multi-channel audio file name (.pcm or .wav) + in_fs: Optional[int] = 48000 + Input sampling rate, default 48000 Hz + out_fs: Optional[int] = None + Output sampling rate, default out_fs=in_fs + fs: Optional[int] + Output sampling rate, required for .pcm input file, otherwise default = 48000 (Hz) + + Returns + ------- + None + + """ + + y = None + + if out_fs is None: + out_fs = in_fs + + # Read input files + for in_file in in_filenames: + # assign correct channel + x, in_fs = readfile(in_file, fs=in_fs) + if y is None: + y = x + else: + if x.shape[0] > y.shape[0]: + x = x[: y.shape[0], :] + elif y.shape[0] > x.shape[0]: + y = y[: x.shape[0], :] + # x = np.append(x, np.zeros( + # (y.shape[0]-x.shape[0], x.shape[1])), axis=0) + y = np.column_stack((y, x)) + + y = audioarray.resample(y, in_fs, out_fs) + + writefile(out_file, y, fs=out_fs) + + +def splitfiles( + in_file: str, + out_filenames: list, + in_nchans: int, + in_fs: Optional[int] = 48000, + out_fs: Optional[int] = None, + verbose: bool = False, +) -> None: + """Split multi-channel audio files into individual mono files + + Parameters + ---------- + in_file: str + Input file name (.pcm or .wav) + out_filenames: list + List of output file names (.pcm or .wav) + in_fs: Optional[int] = 48000 + Input sampling rate, default 48000 Hz + out_fs: Optional[int] = None + Output sampling rate, default out_fs=in_fs + + Returns + ------- + None + + """ + # validation + if in_nchans is None: + raise ValueError("Number of channels to split must be specified!") + if in_nchans != len(out_filenames): + print( + "Split: Mismatch between number of channels and output filenames length. Truncating output filenames list." + ) + out_filenames = out_filenames[:in_nchans] + + x, in_fs = readfile(in_file, nchannels=in_nchans, fs=in_fs) + + # Write output files + for idx, out_file in enumerate(out_filenames): + # extract correct channel + y = x[:, idx] + + if out_fs is None: + out_fs = in_fs + + y = audioarray.resample(y, in_fs, out_fs) + + writefile(out_file, y, fs=out_fs) + + +def mono( + in_file: str, + out_file: str, + in_nchans: Optional[int] = 2, + in_fs: Optional[int] = 48000, + out_fs: Optional[int] = None, + verbose: bool = False, +) -> None: + """Creates a passive mono downmix for a multi-channel audio file + + Parameters + ---------- + in_file: str + Input file name (.pcm or .wav) + out_file: str + Output mono downmix audio file name (.pcm or .wav) + in_nchans: Optional[int] + Number of input channels, required for .pcm otherwise default = 2 + in_fs: Optional[int] = 48000 + Input sampling rate, required for .pcm, otherwise default = 48000 Hz + out_fs: Optional[int] = in_fs + Output sampling rate, default = in_fs + + Returns + ------- + None + + """ + + # read input + x, in_fs = readfile(in_file, nchannels=in_nchans, fs=in_fs) + + if out_fs is None: + out_fs = in_fs + + # do pasive downmix + m = np.sum(x, 1) + + if out_fs != in_fs: + m = audioarray.resample(m, in_fs, out_fs) + + # write output + writefile(out_file, m, fs=out_fs) + + +def mutefile( + in_file: str, + out_file: str, + in_fs: int = 48000, + in_nchans: Optional[int] = 1, + mute_chans: Optional[list] = None, +) -> None: + """Mute audio channels in file + + Parameters + ---------- + in_file: str + Input multi-channel audio filenmame (.pcm or .wav) + out_file: str + Output multi-channel audio file name (.pcm or .wav) + in_nchans: Optional[int])1 + Number of channels, default = 1, or in *.wav header + mute_chans: Optional[list] = None + Indices of channel to mute, default=None=all + + Returns + ------- + None + + """ + x, in_fs = readfile(in_file, fs=in_fs, nchannels=in_nchans) + + if mute_chans is not None: + mute_chans = np.array(mute_chans) + if len(x.shape) > 1: + x[:, mute_chans[mute_chans < x.shape[1]]] = 0 + else: + x[:, mute_chans[mute_chans < 1]] = 0 + else: + x = np.zeros(x.shape) + + writefile(out_file, x, fs=in_fs) + + +def delayfile( + in_file: str, + out_file: str, + in_fs: int = 48000, + in_nchans: Optional[int] = 1, + delay: float = 0, +) -> None: + """Delay an audio file by a specified duration (ms) + + Parameters + ---------- + in_file: str + Input multi-channel audio filename (.pcm or .wav) + out_file: str + Output multi-channel audio file name (.pcm or .wav) + in_nchans: Optional[int])1 + Number of channels, default = 1, or in *.wav header + delay: float = 0 + Delay in milliseconds (negative values advance file) + + Returns + ------- + None + + """ + delay = int(delay * in_fs / 1000) + delay_abs = np.abs(delay) + + x, in_fs = readfile(in_file, fs=in_fs, nchannels=in_nchans) + + # shift array + x = np.roll(x, delay, axis=0) + + # zero shifted out samples + if delay == 0: + pass + elif delay < 0: + x[-delay_abs:, :] = 0 + elif delay > 0: + x[:delay_abs, :] = 0 + + writefile(out_file, x, fs=in_fs) + + +def loudnessinfo( + in_sig: np.ndarray, + in_fs: Optional[int] = 48000, + in_format: Optional[str] = "MONO", + in_ls_layout_file: Optional[str] = None, + output_loudness: Optional[int] = -26, + loudness_tool: Optional[str] = "bs1770demo", + use_rms: Optional[bool] = False, +) -> Tuple[float, float]: + """Obtain loudness info about a signal + + Parameters + ---------- + in_sig: str + Input audio signal + in_fs: Optional[int] + Input sampling rate + in_format: Optional[str] + Input spatial audio format + output_loudness: Optional[int] + Loudness level in LKFS/dBov + loudness_tool: Optional[str] + Loudness tool to use. Must be in $PATH. + Supported tools: + ITU-R BS.1770-4 / "bs1770demo" (default) + ITU-T P.56 / "sv56demo" + + + Returns + ------- + measured_loudness, scale_factor + + """ + + if platform.system() == "Windows": + null_file = "nul" + else: + null_file = "/dev/null" + + # check for binary + loudness_tool = shutil.which(loudness_tool) + if loudness_tool is None: + raise FileNotFoundError(f"The binary {loudness_tool} was not found in path!") + + in_format_config = spatialaudioformat.Format( + in_format=in_format, ls_layout_file=in_ls_layout_file + ) + + if not ( + in_format_config.isheadphones + or in_format_config.isloudspeaker + or in_format_config.ambi_order > 1 + ): + raise NotImplementedError( + f"{in_format_config.name} is currently unsupported with {loudness_tool}." + ) + + if in_sig.shape[1] != in_format_config.nchannels: + raise ValueError( + f"Mismatch in number of channels in signal of shape {in_sig.shape} of spatial audio format {in_format}!" + ) + + with TemporaryDirectory() as tmp_dir: + tmp_file = os.path.join( + tmp_dir, "tmp.pcm" + ) # TODO might interfere with multiprocessing however each instance would probably create its own tmp dir? + + if "bs1770demo" in loudness_tool: + """ + ITU-R BS-1770 + """ + if in_fs != 48000: + raise ValueError(f"{loudness_tool} only supports 48kHz sampling rate!") + + cmd = [ + loudness_tool, + "-nchan", + str(in_format_config.nchannels), # input nchan + "-lev", + str(output_loudness), # level + "-conf", + "", # config string + tmp_file, + null_file, + ] + if in_format_config.ambi_order > 0 or in_format_config.name == "MONO": + cmd[2] = "1" # -nchan + cmd[6] = "0" # -conf + if in_format_config.isheadphones: + cmd[2] = "2" # -nchan + cmd[6] = "00" # -conf + elif in_format_config.isloudspeaker: + # if loudspeaker position fulfills the criteria, set the config string to 1 for that index + conf_str = [ + str(int(abs(e) < 30 and (abs(a) >= 60 and abs(a) <= 120))) + for a, e in zip(in_format_config.ls_azi, in_format_config.ls_ele) + ] + for lfe in in_format_config.lfe_index: + conf_str[lfe] = "L" + + cmd[6] = "".join(conf_str) + + elif "sv56demo" in loudness_tool: + """ + ITU-T P.56 + """ + if not (in_format_config.ambi_order > 0 or in_format_config.name == "MONO"): + raise ValueError( + f"{in_format} is currently unsupported with {loudness_tool}" + ) + + cmd = [ + loudness_tool, + "-lev", + str(output_loudness), + "-sf", + str(in_fs), + "-blk", + str(int(in_fs * 0.02)), + "-q", + ] + + if use_rms: + cmd.extend(["-rms"]) + + cmd.extend( + [ + tmp_file, + null_file, + ] + ) + + # write temporary file + if in_format_config.ambi_order > 0 or in_format_config.name == "MONO": + writefile(tmp_file, in_sig[:, 0], in_fs) + elif in_format_config.isheadphones: + writefile(tmp_file, in_sig[:, :2], in_fs) + elif in_format_config.isloudspeaker: + writefile(tmp_file, in_sig, in_fs) + + # run command + try: + result = sp.run(cmd, check=True, capture_output=True, text=True) + except sp.CalledProcessError as e: + raise SystemError( + f"Command returned non-zero exit status ({e.returncode}): {' '.join(e.cmd)}\n{e.stderr}\n{e.stdout}" + ) + + # parse output + if "bs1770demo" in loudness_tool: + measured_loudness = float(result.stdout.splitlines()[3].split(":")[1]) + scale_factor = float(result.stdout.splitlines()[-3].split(":")[1]) + elif "sv56demo" in loudness_tool: + measured_loudness = float( + result.stdout.splitlines()[14] + .replace("Active speech level: ..........", "") + .replace("[dBov]", "") + .strip() + ) + scale_factor = float( + result.stdout.splitlines()[6] + .replace("Norm factor desired is: .......", "") + .replace("[times]", "") + .strip() + ) + else: + raise ValueError(f"Unsupported tool {loudness_tool}") + + return measured_loudness, scale_factor + + +def print_plot_play(x: np.ndarray, fs: int, text: Optional[str] = "") -> None: + """1. Prints information about an audio signal, 2. plots the waveform, and 3. Creates player + + Parameters + ---------- + x: np array + Input signal + fs: int + Input sampling rate + text: Optional[str] = '' + text to print + Returns + ------- + None + + """ + + plt = import_module("matplotlib.pyplot") + ipd = import_module("IPython.display") + + print("%s fs = %d, x.shape = %s, x.dtype = %s" % (text, fs, x.shape, x.dtype)) + plt.figure(figsize=(8, 2)) + plt.plot(x, color="gray") + plt.xlim([0, x.shape[0]]) + plt.xlabel("Time (samples)") + plt.ylabel("Amplitude") + plt.tight_layout() + plt.show() + ipd.display(ipd.Audio(data=x, rate=fs)) + + +def get_wav_file_info(filename: str) -> dict: + + """ + Get the format information from a WAV file. + Return a dictionary with the format information + Parameters + ---------- + filename : string or open file handle + Input WAV file. + + Returns + ------- + Dictionary + + """ + + fid = open(filename, "rb") + + try: + + riff = fid.read(4) + + if riff == b"RIFF": + binary_format = "<" + elif riff == b"RIFX": + binary_format = ">" + else: + raise ValueError("No RIFF!") + + wav_size = struct.unpack(f"{binary_format}I", fid.read(4))[0] + + wav_identifier = fid.read(4) + if wav_identifier != b"WAVE": + raise ValueError("No WAVE!") + + fmt_chunk_id = fid.read(4) + + if fmt_chunk_id == b"fmt ": + fmt_size = struct.unpack(f"{binary_format}I", fid.read(4))[0] + wav_format = struct.unpack(f"{binary_format}H", fid.read(2))[0] + channels = struct.unpack(f"{binary_format}H", fid.read(2))[0] + fs = struct.unpack(f"{binary_format}I", fid.read(4))[0] + bytes_per_second = struct.unpack(f"{binary_format}I", fid.read(4))[0] + block_align = struct.unpack(f"{binary_format}H", fid.read(2))[0] + bit_depth = struct.unpack(f"{binary_format}H", fid.read(2))[0] + rem_bytes = fmt_size - 16 + ext_param_size = 0 + ext_param = None + if rem_bytes: + ext_param_size = struct.unpack(f"{binary_format}H", fid.read(2))[0] + + if ext_param_size: + ext_param = fid.read(ext_param_size) + else: + raise ValueError("No or corrupt fmt chunk!") + + finally: + fid.close() + + return { + "size": wav_size, + "format_tag": wav_format, + "channels": channels, + "fs": fs, + "bytes_per_second": bytes_per_second, + "block_align": block_align, + "bit_depth": bit_depth, + "ext_param_size": ext_param_size, + "ext_param": ext_param, + } diff --git a/scripts/pyaudio3dtools/binauralRef.py b/scripts/pyaudio3dtools/binauralRef.py new file mode 100644 index 0000000000..da5adb6785 --- /dev/null +++ b/scripts/pyaudio3dtools/binauralRef.py @@ -0,0 +1,342 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os +from typing import Tuple + +import numpy as np +import scipy.interpolate as interp +import scipy.io as sio +import scipy.signal as sig + +import timeit + + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +def binaural_fftconv_framewise( + x: np.ndarray, + IR: np.array, + SourcePosition: np.array, + azi: np.array = None, + ele: np.array = None, + frame_len: int = 240, + interp_method="linear", + verbose=True, +) -> np.ndarray: + """Binauralization using fft convolution with frame-wise processing + supports rotation on trajectories with interpolation between measured Source + positions, reimplemented roughly along the lines of ConvBinauralRenderer.m + + Parameters + ---------- + x: np.array + input multi-channel array + IR: np.array + HRIRs array + SourcePosition: np.array + positions of the source in the measurements in IR + azi: np.array + azimuth angles for all frames + ele: np.array + elevation angles for all frames + frame_len: int + frame length, optional, default = 240 + interp_method: + interpolation method, optional, default = linear + + + Returns + ------- + y: np.ndarray + output binaural signal array + + """ + + sig_len = x.shape[0] + frame_len = 240 + N_frames = np.int(sig_len / frame_len) + + N_HRIR_taps = IR.shape[2] + + if azi is None or ele is None: + azi = np.repeat([0.0], N_frames) + ele = np.repeat([0.0], N_frames) + + iGs = np.zeros([N_frames], dtype=np.int) + mGs = np.zeros([N_frames], dtype=np.int) + + # store trajectory as a sequence of indices of source positions + # on the HRTF database in a compressed format such that, for + # each new measurement point the trajectory hits, the sample index + # is stored in mGs and the index of the measurement in iG + # the number of measurement points hit by the trajectory is nsp + isp = 0 + iGs[0] = FindFilter(SourcePosition, azi[0], ele[0]) + mGs[0] = 0 + for i_frame in range(1, N_frames): + iG = FindFilter(SourcePosition, azi[i_frame], ele[i_frame]) + if iG != iGs[isp]: + isp = isp + 1 + iGs[isp] = iG + mGs[isp] = i_frame * frame_len + 1 + nsp = isp + 1 + + # set last fence post explicitly + if mGs[nsp] < sig_len: + iGs[nsp] = iG + mGs[nsp] = sig_len + nsp = nsp + 1 + + T_rev = frame_len + N_HRIR_taps - 1 + N_rev = np.int(np.ceil(T_rev / frame_len)) + print(" N_rev = ", N_rev) + + fastcode = True + if N_rev > 5: + if verbose: + print( + " __ __ ___ ___ _ _ ___ _ _ ___ " + ) + print( + " \ \ / / / \ | _ \ | \| | |_ _| | \| | / __|" + ) + print( + " \ \/\/ / | - | | / | . | | | | . | | (_ |" + ) + print( + " \_/\_/ |_|_| |_|_\ |_|\_| |___| |_|\_| \___|" + ) + print( + " " + ) + print( + " You are using very long filters! This will be slooooow and use a lot of memory!" + ) + else: + fastcode = False + + if fastcode and verbose: + print( + " __ __ ___ ___ _ _ ___ _ _ ___ " + ) + print( + " \ \ / / / \ | _ \ | \| | |_ _| | \| | / __|" + ) + print( + " \ \/\/ / | - | | / | . | | | | . | | (_ |" + ) + print( + " \_/\_/ |_|_| |_|_\ |_|\_| |___| |_|\_| \___|" + ) + print( + " " + ) + print( + " To speed up the otherwise extremely slow calculation, we only calculate the " + ) + print( + " responses of the latest frame with the latest filters instead of the full " + ) + print( + " integrals. This is much faster but much more prone to clicks. Inspect your " + ) + print( + " output signals carefully! To change this behavior, go to binauralrenderer.py " + ) + print( + " and set fastcode to False. " + ) + + y = np.zeros((sig_len + T_rev, 2)) + y0 = np.zeros((N_rev, sig_len + T_rev, 2)) + + b = np.linspace(0.0, 1.0, frame_len) + a = 1.0 - b + + for i_ear in [0, 1]: + + Gs = IR[ + iGs[0:nsp], i_ear, : + ] # Green's function along the trajectory sampled by the measurement points + interp_G = interp.interp1d( + mGs[0:nsp], Gs, kind=interp_method, axis=0 + ) # interpolator for Green's function between those points + + G = interp_G(np.array(range(0, sig_len, frame_len))) + + t0 = timeit.default_timer() + + if fastcode: + for i_frame in range(N_frames): + + i1 = i_frame * frame_len + i2 = (i_frame + 1) * frame_len + i2p = i1 + T_rev + + a = np.linspace(0.0, 1.0, T_rev) + b = 1.0 - a + + for j_frame in [0, 1]: + G_n_m = G[min(j_frame + i_frame, N_frames - 1), :] + y0[j_frame, i1:i2p, i_ear] = sig.oaconvolve(x[i1:i2], G_n_m) + + y[i1:i2p, i_ear] += a * y0[0, i1:i2p, i_ear] + b * y0[1, i1:i2p, i_ear] + + t1 = timeit.default_timer() + fps = (i_frame + 1) / (t1 - t0) + eta = (2 * N_frames - (i_frame + 1) + i_ear * N_frames) / fps + + print( + " Frame {}/{} on ear {}/2 done at {: 3.1f} fps, ETA {: 6.0f} s ".format( + i_frame + 1, N_frames, i_ear + 1, fps, eta + ), + end="\r", + ) + + else: + for i_frame in range(N_frames): + + i1 = i_frame * frame_len + i2 = (i_frame + 1) * frame_len + i2p = i1 + T_rev + + y0[:] = 0.0 + for j_frame in range( + max(0, i_frame - N_rev), min(i_frame + 1, N_frames) + ): + + j1 = j_frame * frame_len + j2 = (j_frame + 1) * frame_len + j2p = j1 + T_rev + + G0 = G[i_frame] + G1 = G[min(i_frame + 1, N_frames - 1)] + + y0[0, j1:j2p, i_ear] += sig.oaconvolve(x[j1:j2], G0) + y0[1, j1:j2p, i_ear] += sig.oaconvolve(x[j1:j2], G1) + + y[i1:i2, i_ear] = a * y0[0, i1:i2, i_ear] + b * y0[1, i1:i2, i_ear] + + t1 = timeit.default_timer() + fps = (i_frame + 1) / (t1 - t0) + eta = (2 * N_frames - (i_frame + 1) + i_ear * N_frames) / fps + + print( + " Frame {}/{} on ear {}/2 done at {: 3.1f} fps, ETA {: 6.0f} s ".format( + i_frame + 1, N_frames, i_ear + 1, fps, eta + ), + end="\r", + ) + + print("") + + return y[0:sig_len] + + +def read_hrirs_from_mat_full( + hrirs_path: str = "/HRIRs_mat/SADIE_II_D2_48K_24bit_256tap_full.mat", +) -> Tuple[np.ndarray, np.ndarray]: + """Read HRIRs from Matlab dictionary file that contains + complete databases and includes the SourcePositions + + Parameters + ---------- + hrirs_path: str + HRTFs file name (.mat) + + Returns + ------- + hrirs: np.ndarray + IRs read from file with source positions in full format + SourcePositions: np.ndarray + Source positions corresponding to the IRs + + """ + script_path = os.path.dirname(os.path.abspath(__file__)) + hrirs_filename = script_path + hrirs_path + + mat_contents = sio.loadmat(hrirs_filename) + hrirs = mat_contents["IR"] + + SourcePositions = mat_contents["SourcePosition"] + logger.debug( + f"Loaded HRIRs: {hrirs_filename}, {hrirs.shape[0]} by {hrirs.shape[1]} (full DB)" + ) + + return hrirs, SourcePositions + + +def FindFilter(SourcePosition: np.array, azi: float, ele: float) -> int: + """Find measurement closest to the selected direction, + reimplemented roughly along the lines of ConvBinauralRenderer.m + + Parameters + ---------- + SourcePositions: np.ndarray + Source IR positions + azi: float + desired response azimuth + ele: float + desired response elevation + + Returns + ------- + i_dir: int + index of nearest SourcePosition + """ + if azi < 0: + azi = azi + 360.0 + + if ele < 0: + ele = ele + 360.0 + + delta_azi = np.deg2rad(np.abs(azi - SourcePosition[:, 0])) + dist = np.arccos( + np.sin(np.deg2rad(SourcePosition[:, 2])) * np.sin(np.deg2rad(ele)) + + np.cos(np.deg2rad(SourcePosition[:, 1])) + * np.cos(np.deg2rad(ele)) + * np.cos(delta_azi) + ) + + i_dir = np.argmin(dist) + + # print('Direction closest to {}, {} is {} with angles {}, {} and distance {}\n'.format( + # azi, ele, i_dir, SourcePosition[i_dir,0], SourcePosition[i_dir,1], dist[i_dir] + # ) + # ) + + return i_dir diff --git a/scripts/pyaudio3dtools/binauralrenderer.py b/scripts/pyaudio3dtools/binauralrenderer.py new file mode 100644 index 0000000000..1040269970 --- /dev/null +++ b/scripts/pyaudio3dtools/binauralrenderer.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os +from typing import Tuple + +import numpy as np +import scipy.io as sio +import scipy.signal as sig + +from pyaudio3dtools import audioarray, spatialaudioformat +from pyaudio3dtools.binauralRef import ( + binaural_fftconv_framewise, + read_hrirs_from_mat_full, +) +from pyaudio3dtools.rotateHOA import rotateHOA +from pyaudio3dtools.rotateISM import rotateISM + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +def read_hrirs_from_mat( + hrirs_path: str = "/HRIRs_mat/SADIE_II_D2_48K_24bit_256tap_CICP19.mat", +) -> np.ndarray: + """Read HRIRs from Matlab dictionary file mat + + Parameters + ---------- + hrirs_path: str + HRTFs file name (.mat) + + Returns + ------- + hrirs: np.ndarray + array of impulse responses + + """ + script_path = os.path.dirname(os.path.abspath(__file__)) + hrirs_filename = script_path + hrirs_path + + mat_contents = sio.loadmat(hrirs_filename) + hrirs = mat_contents["IR"] + + logger.debug( + f"Loaded HRIRs: {hrirs_filename}, {hrirs.shape[0]} by {hrirs.shape[1]}" + ) + + return hrirs + + +def binaural_fftconv( + x: np.ndarray, IR: np.ndarray, nchannels: int, lfe_index: list = [] +) -> np.ndarray: + """Binauralization using fft convolution + + Parameters + ---------- + x: np array + input multi-channel array + IR: np array + HRIRs array + nchannels: int + maximum number of channels to process + lfe_index: list + list of LFE channel indices + + Returns + ------- + y: np.ndarray + output convolved signal array + + """ + y = np.zeros((x.shape[0], 2)) + for chan_idx in range(min(x.shape[1], nchannels)): + if chan_idx not in lfe_index: + y[:, 0] = np.add( + y[:, 0], + sig.fftconvolve( + x[:, chan_idx].astype(float), IR[:, 0, chan_idx] + ).astype(float)[: x.shape[0]], + ) + y[:, 1] = np.add( + y[:, 1], + sig.fftconvolve( + x[:, chan_idx].astype(float), IR[:, 1, chan_idx] + ).astype(float)[: x.shape[0]], + ) + else: + logger.debug(f" Mute LFE channel of index: {str(chan_idx)}") + + return y + + +def binaural_rendering( + x: np.ndarray, + in_format_name: str, + dataset: str = "orange53", + fs: int = 48000, + include_LFE: bool = False, + trajectory: str = None, + LFE_gain: float = 1.0, + in_ls_layout_file: str = None, +): + """Binaural rendering + + Parameters + ---------- + x: np array + input multi-channel array + in_format_name: str + name of input spatial format + dataset: str + name of the HRIRs or BRIRs dataset + fs: int + input/output sampling-rate (default 48kHz) + trajectory: str + path to trajectory file + + Returns + ------- + y: np.ndarray + output binaural signal array + + """ + + spformat = spatialaudioformat.Format( + in_format=in_format_name, ls_layout_file=in_ls_layout_file + ) + + if trajectory is not None: + logger.info( + " performing rotation along trajectory from file {}".format(trajectory) + ) + if not ( + spformat.ambi_order > 0 + or (spformat.isloudspeaker and spformat.nchannels > 2) + or spformat.name == "CUSTOM_LS" + ): + raise NotImplementedError( + "Head tracking only supported with [F|H]OA, LS, or CUSTOM_LS input!" + ) + + # get corresponding IR + IR, SourcePosition = get_IR(spformat, dataset, include_LFE, LFE_gain) + + if dataset.lower().endswith("full"): + ls_azi_all = spformat.ls_azi + ls_ele_all = spformat.ls_ele + lfe_index_all = spformat.lfe_index + + if spformat.name == "CUSTOM_LS": + logger.info(" Processing channels on custom LS layout") + logger.info("azi: {}".format(ls_azi_all)) + logger.info("ele: {}".format(ls_ele_all)) + logger.info("lfe_index: {}".format(lfe_index_all)) + + y = audioarray.resample(x, fs, 48000) + + frame_len = 240 + sig_len = y.shape[0] + N_frames = np.int(sig_len / frame_len) + + i_ls = 0 + verbose = True + y_all = np.zeros([sig_len, 2]) + for i_chan in range(y.shape[1]): + + # skip LFE + if i_chan in lfe_index_all: + continue + + # skip silent (or very low volume) channels + if np.allclose(y[:, i_chan], 0.0, atol=32.0): + continue + + ls_azi = np.repeat(ls_azi_all[i_ls], N_frames) + ls_ele = np.repeat(ls_ele_all[i_ls], N_frames) + + azi, ele = rotateISM(ls_azi, ls_ele, trajectory=trajectory) + + y_all += binaural_fftconv_framewise( + y[:, i_chan], + IR, + SourcePosition, + frame_len=frame_len, + azi=azi, + ele=ele, + verbose=verbose, + ) + i_ls += 1 + verbose = False + + y = audioarray.resample(y_all, 48000, fs) + + return y_all + + elif dataset.lower().startswith("sadie"): + if "cicp" in spformat.altname: + # TODO change LFE handling + if include_LFE: + IR_tmp = read_hrirs_from_mat( + hrirs_path="/HRIRs_mat/SADIE_II_D2_48K_24bit_256tap_MAGLS_SBA3.mat" + ) + + # copy omni response + for index in spformat.lfe_index: + IR[:, :, index] = IR_tmp[:, :, 0] + x[:, index] = LFE_gain * x[:, index] + + spformat.lfe_index = [] + + y = audioarray.resample(x, fs, 48000) + if trajectory is not None and spformat.ambi_order > 0: + y = rotateHOA(y, trajectory) + + y = binaural_fftconv(y, IR, spformat.nchannels, spformat.lfe_index) + y = audioarray.resample(y, 48000, fs) + + return y + + +def get_IR( + spformat: spatialaudioformat, dataset: str, include_LFE: bool, LFE_gain: float +) -> Tuple[np.ndarray, np.ndarray]: + """ get_IR + + Parameters + ---------- + spformat: spatialaudioformat + input spatial audio format + dataset: str + name of the HRIRs or BRIRs dataset + include_LFE: bool + flag to include LFE in binaural rendering + LFE_gain: float + gain to be applied to the LFE channel + + Returns + ------- + IR: np.ndarray + desired impulse response array + SourcePosition: np.ndarray + source positions of corresponding IRs + + """ + # dataset file prefix + if dataset.lower().startswith("sadie"): + prefix = "/HRIRs_mat/SADIE_II_D2_48K_24bit_256tap" + elif dataset.lower().startswith("orange"): + prefix = f"/HRIRs_mat/ORANGE_HRIR_{dataset.replace('_full', '')[-2:]}_48000" + elif dataset.lower().startswith("mozart"): + prefix = "/BRIRs_mat/IIS_BRIR_officialMPEG_222UC" + else: + raise ValueError(f"Unsupported dataset '{dataset}' for HRIRs") + + # dataset file suffix + if dataset.endswith("full"): + suffix = "full.mat" + elif spformat.isloudspeaker and spformat.nchannels > 1: + suffix = "combined.mat" + elif spformat.ambi_order > 0 or spformat.name.upper() == "MONO": + suffix = "SBA3.mat" + if dataset.startswith("mozart"): + suffix = "VIRTUALLS_SBA3.mat" + else: + raise ValueError( + f"Unsupported format '{spformat.name}' for dataset '{dataset}' for HRIRs" + ) + + if dataset.endswith("full"): + IR, SourcePosition = read_hrirs_from_mat_full("_".join([prefix, suffix])) + else: + IR = read_hrirs_from_mat("_".join([prefix, suffix])) + SourcePosition = None + + if spformat.name.upper() == "MONO": + IR = IR[:, :, 0] # use omni/W from SBA + elif spformat.name.upper() == "STEREO": + IR = IR[:, :, :2] # use L and R channels + elif spformat.isloudspeaker and include_LFE: + # extract positions from the combined file + tmpformat = spatialaudioformat.Format("COMBINED") + IR_tmp = IR.copy() + IR = np.zeros((IR_tmp.shape[0], IR_tmp.shape[1], spformat.nchannels)) + + ir_index = 0 + for i in range(tmpformat.nchannels): + for j in range(spformat.nchannels): + if ( + tmpformat.ls_azi[i] == spformat.ls_azi[j] + and tmpformat.ls_ele[i] == spformat.ls_ele[j] + ): + if j != spformat.lfe_index[0]: + IR[:, :, ir_index] = IR_tmp[:, :, i] + ir_index += 1 + + return IR, SourcePosition diff --git a/scripts/pyaudio3dtools/hoadecoder.py b/scripts/pyaudio3dtools/hoadecoder.py new file mode 100644 index 0000000000..9296a58f90 --- /dev/null +++ b/scripts/pyaudio3dtools/hoadecoder.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os + +import numpy as np +import scipy.io as sio +from scipy.special import lpmv +from pyaudio3dtools import spatialaudioformat +from typing import Optional + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +def read_hoa_mtx_from_mat(ambi_order: int, spkrlayout: str) -> np.ndarray: + script_path = os.path.dirname(os.path.abspath(__file__)) + mtx_filename = os.path.join( + script_path, + f"hoa_decoder_mat/mtx_hoa3_decoder_allrad_{spkrlayout}.mat", + ) + + mat_contents = sio.loadmat(mtx_filename) + mtx_hoa_dec = mat_contents["mtx_hoa_decoder"] + + logger.debug( + f"Loaded hoa dec mtx: {os.path.basename(mtx_filename)}, {mtx_hoa_dec.shape[0]} by {mtx_hoa_dec.shape[1]}" + ) + + return mtx_hoa_dec + + +def get_hoa_mtx(ambi_order: int, spkrlayout: str) -> np.ndarray: + nharm = spatialaudioformat.Format.nchannels_from_ambiorder(ambi_order) + if spkrlayout.upper() == "MONO": + mtx_hoa_dec = np.zeros((1, nharm)) + mtx_hoa_dec[0, 0] = 1 + elif spkrlayout.upper() == "STEREO": + mtx_hoa_dec = np.zeros((2, nharm)) + # Cardioids +/- 90 degrees + mtx_hoa_dec[0, 0] = 0.5 + mtx_hoa_dec[0, 1] = 0.5 + mtx_hoa_dec[1, 0] = 0.5 + mtx_hoa_dec[0, 1] = -0.5 + else: + mtx_hoa_dec = read_hoa_mtx_from_mat(ambi_order, spkrlayout.upper())[:, :nharm] + + return mtx_hoa_dec + + +def hoa_linear_decoding(signal_in: np.ndarray, mtx_hoa_dec: np.ndarray) -> np.ndarray: + if not signal_in.shape[1] == mtx_hoa_dec.shape[1]: + raise Exception( + "Input number of channels must be equal to renderer matrix second dimension" + ) + + signal_out = np.dot(signal_in, mtx_hoa_dec.transpose()) + + logger.debug(f"Signal out: {signal_out.shape[0]} by {signal_out.shape[1]}") + + return signal_out + + +def rE_weight(order: int) -> np.ndarray: + return np.array( + [ + lpmv(0, l, np.cos(np.deg2rad(137.9) / (order + 1.51))) + for l in range(order + 1) + for _ in range(-l, l + 1) + ] + ).T + + +def n2sn(order: int) -> np.ndarray: + return np.array( + [1.0 / np.sqrt(2 * l + 1) for l in range(order + 1) for _ in range(-l, l + 1)] + ) + + +def sn2n(order: int) -> np.ndarray: + return np.array( + [np.sqrt(2 * l + 1) for l in range(order + 1) for _ in range(-l, l + 1)] + ) + + +def getRSH( + azi: np.ndarray, + ele: np.ndarray, + ambi_order: int, + norm: Optional[str] = "sn3d", + degrees: Optional[bool] = True, +) -> np.ndarray: + """ + Returns real spherical harmonic response for the given position(s) + """ + if degrees: + azi = np.deg2rad(azi) + ele = np.deg2rad(ele) + + LM = np.array([(l, m) for l in range(ambi_order + 1) for m in range(-l, l + 1)]) + + response = np.zeros((LM.shape[0], azi.shape[0])) + + # trig_term * legendre * uncondon + for i, (l, m) in enumerate(LM): + # N3D norm + response[i, :] = np.sqrt( + ((2 * l + 1) * np.math.factorial(l - np.abs(m))) + / (4 * np.pi * np.math.factorial(l + np.abs(m))) + ) + + # trig term + if m < 0: + response[i, :] *= np.sqrt(2) * np.sin(azi * np.abs(m)) + elif m == 0: + pass # response[i,:] *= 1 + else: + response[i, :] *= np.sqrt(2) * np.cos(azi * m) + + # legendre polynomial + response[i, :] *= lpmv(np.abs(m), l, np.sin(ele)) * ((-1) ** np.abs(m)) + + if norm == "sn3d": + response *= np.sqrt(4 * np.pi) + response[:] = np.diag(n2sn(ambi_order)) @ response + elif norm == "n3d": + response *= np.sqrt(4 * np.pi) + else: + pass # ortho + + return response diff --git a/scripts/pyaudio3dtools/prerenderer.py b/scripts/pyaudio3dtools/prerenderer.py new file mode 100644 index 0000000000..7b85de27bb --- /dev/null +++ b/scripts/pyaudio3dtools/prerenderer.py @@ -0,0 +1,255 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os +import subprocess as sp +import sys + +import numpy as np + +from pyaudio3dtools.audiofile import readfile, writefile + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +def _abs_path(rel_path): + return os.path.abspath( + os.path.join(os.path.dirname(__file__), *(rel_path.split("/"))) + ) + + +_prerenderer_exec_path = _abs_path("../prerenderer/IVAS_prerenderer") +if sys.platform.startswith("win"): + _prerenderer_exec_path += ".exe" +elif sys.platform.startswith("linux"): + pass +elif sys.platform.startswith("darwin"): + _prerenderer_exec_path += "_darwin" + +_tmp_dir = _abs_path("tmp") + + +def render_from_file( + audio_in_path: str, + input_config: str, + output_config: str, + audio_out_path: str = None, + frame_size_ms: int = 20, + fs: int = 48000, + prerenderer_bin: str = None, +) -> np.ndarray: + """ + Renders a 3D audio scene from a wav/pcm file based on given config file/string + + Parameters + ---------- + audio_in_path : str + path to input wav file + + input_config : str + path to config file or + "sba" for single ambisonics input or + "mc" for single multichannel input + + output_config : str + for ambisonics of order N: "sbaN" + for multichannel cicp index X: "cicpX" + + frame_size_ms : int + processing frame size in milliseconds + + fs : int + input and processing sampling rate + + Returns + ------- + Numpy array + with processed samples + """ + + if not audio_out_path: + if not os.path.exists(_tmp_dir): + os.mkdir(_tmp_dir) + audio_out_path = os.path.join(_tmp_dir, "prerenderer_out.wav") + + if prerenderer_bin is None: + prerenderer_bin = _prerenderer_exec_path + + if not os.path.exists(prerenderer_bin): + raise FileNotFoundError( + f"The IVAS prerenderer binary was not found at the given path: {os.path.abspath(prerenderer_bin)}" + ) + + cmd = [ + prerenderer_bin, + "-ia", + audio_in_path, + "-fs", + str(fs // 1000), + "-fr", + str(frame_size_ms), + "-oc", + output_config, + "-of", + audio_out_path, + ] + + if os.path.exists(input_config): + cmd.extend(["-if", input_config]) + elif input_config.lower().startswith("cicp") or input_config.lower().startswith( + "mc" + ): + cmd.extend(["-if-mc", input_config]) + elif input_config.lower().startswith("sba"): + cmd.extend(["-if-sba", input_config]) + else: + raise Exception("Invalid input config for prerenderer") + + logger.debug(" ".join(cmd)) + logger.info( + f" Prerenderer {input_config.upper()} -> {output_config.upper()} : {os.path.join(os.path.basename(os.path.dirname(audio_out_path)) ,os.path.basename(audio_out_path))}" + ) + try: + result = sp.run(cmd, check=True, capture_output=True, text=True) + except sp.CalledProcessError as e: + logger.debug(f"Command returned non-zero exit status : {e.returncode}") + logger.debug(e.stderr) + logger.debug(e.stdout) + raise SystemError( + f"Command returned non-zero exit status ({e.returncode}): {' '.join(e.cmd)}\n{e.stderr}\n{e.stdout}" + ) + + logger.debug(result.stdout) + logger.debug(result.stderr) + + return readfile(audio_out_path, fs=fs)[0] + + +def render_from_array( + audio_in_array: np.ndarray, + input_config: str, + output_config: str, + audio_out_path: str = None, + frame_size_ms: int = 20, + fs: int = 48000, + prerenderer_bin: str = None, +): + """ + Renders a 3D audio scene from a NumPy array based on given config file/string + + Parameters + ---------- + audio_in_array : np.ndarray + NumPy array containing input audio + + input_config : str + path to config file or + "sba" for single ambisonics input or + "mc" for single multichannel input + + output_config : str + for ambisonics of order N: "sbaN" + for multichannel cicp index X: "cicpX" + + frame_size_ms : int + processing frame size in milliseconds + + fs : int + input and processing sampling rate + + Returns + ------- + Numpy array + with processed samples + """ + if audio_out_path is not None: + _, output_ext = os.path.splitext(os.path.basename(audio_out_path)) + in_path = audio_out_path.replace(output_ext, "_in.wav") + else: + if not os.path.exists(_tmp_dir): + os.mkdir(_tmp_dir) + in_path = os.path.join(_tmp_dir, "prerenderer_in.wav") + + writefile(in_path, audio_in_array, fs) + + return render_from_file( + in_path, + input_config, + output_config, + audio_out_path=audio_out_path, + frame_size_ms=frame_size_ms, + fs=fs, + prerenderer_bin=prerenderer_bin, + ) + + +def render_from_metadata_object( + metadata_obj, output_config, audio_out_path: str = None, frame_size_ms=20, fs=48000 +): + """ + Renders a 3D audio scene from an object of class pyaudio3dtools.spatialmetadata + + Parameters + ---------- + metadata_obj : pyaudio3dtools.spatialmetadata + metadata containing an input audio path and 3D scene description + + output_config : str + for ambisonics of order N: "sbaN", + for multichannel cicp index X: "cicpX" + + frame_size_ms : int + processing frame size + + fs : int + input and processing sampling rate + + Returns + ------- + Numpy array + with processed samples + """ + + config_path = os.path.join(_tmp_dir, "prerenderer_metadata.txt") + metadata_obj.write_metadata(metadata_path=config_path, metadata_format="iis") + + return render_from_file( + metadata_obj.audio_wav[0], + config_path, + output_config, + audio_out_path=audio_out_path, + frame_size_ms=frame_size_ms, + fs=fs, + ) diff --git a/scripts/pyaudio3dtools/quaternions/__init__.py b/scripts/pyaudio3dtools/quaternions/__init__.py new file mode 100644 index 0000000000..ccd22bb925 --- /dev/null +++ b/scripts/pyaudio3dtools/quaternions/__init__.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +""" +Quaternions +==== + +Provides + Handling of quaternions in the same conventions as in IVAS and the Matlab scripts + +Imports +------- +functions +""" +from . import functions diff --git a/scripts/pyaudio3dtools/quaternions/functions.py b/scripts/pyaudio3dtools/quaternions/functions.py new file mode 100644 index 0000000000..a58cb79427 --- /dev/null +++ b/scripts/pyaudio3dtools/quaternions/functions.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import numpy as np + + +def Quat2Euler(quat: np.array, degrees: bool = True): + "Convert Quaternion to Euler angles" + + sinr = +2.0 * (quat[..., 0] * quat[..., 1] + quat[..., 2] * quat[..., 3]) + cosr = +1.0 - 2.0 * (quat[..., 1] * quat[..., 1] + quat[..., 2] * quat[..., 2]) + roll = np.arctan2(sinr, cosr) + + sinp = +2.0 * (quat[..., 0] * quat[..., 2] - quat[..., 3] * quat[..., 1]) + pitch = np.where(np.fabs(sinp) >= 1, np.copysign(np.pi / 2, sinp), np.arcsin(sinp)) + + siny = +2.0 * (quat[..., 0] * quat[..., 3] + quat[..., 1] * quat[..., 2]) + cosy = +1.0 - 2.0 * (quat[..., 2] * quat[..., 2] + quat[..., 3] * quat[..., 3]) + yaw = np.arctan2(siny, cosy) + + ypr = np.array([yaw, pitch, roll]).T + + if degrees: + ypr = np.rad2deg(ypr) + + return ypr + + +def Euler2Quat(ypr: np.array, degrees: bool = True): + "Convert Euler angles to Quaternion" + + if degrees: + ypr = np.deg2rad(ypr) + + if len(ypr.shape) == 2: + N_quat = ypr.shape[0] + quat = np.zeros([N_quat, 4]) + yaw = ypr[:, 0] + pitch = ypr[:, 1] + roll = ypr[:, 2] + else: + quat = np.zeros([4]) + yaw = ypr[0] + pitch = ypr[1] + roll = ypr[2] + + c1 = np.cos(0.5 * yaw) + c2 = np.cos(0.5 * pitch) + c3 = np.cos(0.5 * roll) + + s1 = np.sin(0.5 * yaw) + s2 = np.sin(0.5 * pitch) + s3 = np.sin(0.5 * roll) + + quat[..., 0] = c3 * c2 * c1 + s3 * s2 * s1 + quat[..., 1] = s3 * c2 * c1 - c3 * s2 * s1 + quat[..., 2] = s3 * c2 * s1 + c3 * s2 * c1 + quat[..., 3] = c3 * c2 * s1 - s3 * s2 * c1 + + return quat + + +def Quat2RotMat(quat: np.array): + "Convert quaternion to rotation matrix" + + R = np.zeros([3, 3]) + + if quat[0] != -3: + + # Quaternions + # formula taken from ivas_rotation.c + + R[0, 0] = ( + quat[0] * quat[0] + + quat[1] * quat[1] + - quat[2] * quat[2] + - quat[3] * quat[3] + ) + R[0, 1] = 2.0 * (quat[1] * quat[2] - quat[0] * quat[3]) + R[0, 2] = 2.0 * (quat[1] * quat[3] + quat[0] * quat[2]) + + R[1, 0] = 2.0 * (quat[1] * quat[2] + quat[0] * quat[3]) + R[1, 1] = ( + quat[0] * quat[0] + - quat[1] * quat[1] + + quat[2] * quat[2] + - quat[3] * quat[3] + ) + R[1, 2] = 2.0 * (quat[2] * quat[3] - quat[0] * quat[1]) + + R[2, 0] = 2.0 * (quat[1] * quat[3] - quat[0] * quat[2]) + R[2, 1] = 2.0 * (quat[2] * quat[3] + quat[0] * quat[1]) + R[2, 2] = ( + quat[0] * quat[0] + - quat[1] * quat[1] + - quat[2] * quat[2] + + quat[3] * quat[3] + ) + + else: + + # Euler angles in R_X(roll)*R_Y(pitch)*R_Z(yaw) convention + # + # yaw: rotate scene counter-clockwise in the horizontal plane + # pitch: rotate scene in the median plane, increase elevation with positive values + # roll: rotate scene from the right ear to the top + # + # formula taken from ivas_rotation.c + + c1 = np.cos(quat[3] / 180.0 * np.pi) + c2 = np.cos(quat[2] / 180.0 * np.pi) + c3 = np.cos(quat[1] / 180.0 * np.pi) + + s1 = np.sin(quat[3] / 180.0 * np.pi) + s2 = np.sin(-quat[2] / 180.0 * np.pi) + s3 = np.sin(quat[1] / 180.0 * np.pi) + + R[0, 0] = c2 * c3 + R[0, 1] = -c2 * s3 + R[0, 2] = s2 + + R[1, 0] = c1 * s3 + c3 * s1 * s2 + R[1, 1] = c1 * c3 - s1 * s2 * s3 + R[1, 2] = -c2 * s1 + + R[2, 0] = s1 * s3 - c1 * c3 * s2 + R[2, 1] = c3 * s1 + c1 * s2 * s3 + R[2, 2] = c1 * c2 + + return R diff --git a/scripts/pyaudio3dtools/rotateHOA.py b/scripts/pyaudio3dtools/rotateHOA.py new file mode 100644 index 0000000000..e658027a04 --- /dev/null +++ b/scripts/pyaudio3dtools/rotateHOA.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import numpy as np + +from pyaudio3dtools.quaternions.functions import Quat2RotMat + +######################################################################### +# Helper functions used by Ruedenberg, +# an implementation of the algorithm in +# Ivanic, J. & Ruedenberg, K., J. Phys. Chem. 100, 6342 (1996) +# translated from ivas_rotation.c +######################################################################### + + +def SHrot_p( + i: int, l: int, a: int, b: int, SHrotmat: np.array, R_lm1: np.array +) -> float: + """Helper function to calculate the ps""" + + ri1 = SHrotmat[i + 1 + 1][1 + 1 + 1] + rim1 = SHrotmat[i + 1 + 1][-1 + 1 + 1] + ri0 = SHrotmat[i + 1 + 1][0 + 1 + 1] + + if b == -l: + R_lm1_1 = R_lm1[a + l - 1][0] + R_lm1_2 = R_lm1[a + l - 1][2 * l - 2] + p = ri1 * R_lm1_1 + rim1 * R_lm1_2 + else: + if b == l: + R_lm1_1 = R_lm1[a + l - 1][2 * l - 2] + R_lm1_2 = R_lm1[a + l - 1][0] + p = ri1 * R_lm1_1 - rim1 * R_lm1_2 + else: + R_lm1_1 = R_lm1[a + l - 1][b + l - 1] + p = ri0 * R_lm1_1 + + return p + + +def SHrot_u(l: int, m: int, n: int, SHrotmat: np.array, R_lm1: np.array) -> float: + """Helper function to calculate the us""" + return SHrot_p(0, l, m, n, SHrotmat, R_lm1) + + +def SHrot_v(l: int, m: int, n: int, SHrotmat: np.array, R_lm1: np.array) -> float: + """Helper function to calculate the vs""" + + if m == 0: + p0 = SHrot_p(1, l, 1, n, SHrotmat, R_lm1) + p1 = SHrot_p(-1, l, -1, n, SHrotmat, R_lm1) + return p0 + p1 + else: + if m > 0: + d = 1.0 if (m == 1) else 0.0 + p0 = SHrot_p(1, l, m - 1, n, SHrotmat, R_lm1) + p1 = SHrot_p(-1, l, -m + 1, n, SHrotmat, R_lm1) + return p0 * np.sqrt(1.0 + d) - p1 * (1.0 - d) + else: + d = 1.0 if (m == -1) else 0.0 + p0 = SHrot_p(1, l, m + 1, n, SHrotmat, R_lm1) + p1 = SHrot_p(-1, l, -m - 1, n, SHrotmat, R_lm1) + return p0 * (1.0 - d) + p1 * np.sqrt(1.0 + d) + + +def SHrot_w(l: int, m: int, n: int, SHrotmat: np.array, R_lm1: np.array) -> float: + """Helper function to calculate the w""" + if m == 0: + raise ValueError("ERROR should not be called\n") + else: + if m > 0: + p0 = SHrot_p(1, l, m + 1, n, SHrotmat, R_lm1) + p1 = SHrot_p(-1, l, -m - 1, n, SHrotmat, R_lm1) + return p0 + p1 + else: + p0 = SHrot_p(1, l, m - 1, n, SHrotmat, R_lm1) + p1 = SHrot_p(-1, l, -m + 1, n, SHrotmat, R_lm1) + return p0 - p1 + + +######################################## +# SHD rotation matrix calculation +# translated from ivas_rotation.c +######################################## +def SHrotmatgen(R: np.array, order: int = 3) -> np.array: + """Calculate SHD roatation matrix from that in real space + + Parameters: + ---------- + R: np.array + real-space rotation matrix + + order: Optional[int] + Ambisonics order, default = 3 + + Returns: + ---------- + SHrotmat: np.array + SHD rotation matrix + + """ + dim = (order + 1) * (order + 1) + + SHrotmat = np.zeros([dim, dim]) + R_lm1 = np.zeros([dim, dim]) + R_l = np.zeros([dim, dim]) + + SHrotmat[0][0] = 1.0 + + SHrotmat[1][1] = R[1][1] + SHrotmat[1][2] = R[1][2] + SHrotmat[1][3] = R[1][0] + + SHrotmat[2][1] = R[2][1] + SHrotmat[2][2] = R[2][2] + SHrotmat[2][3] = R[2][0] + + SHrotmat[3][1] = R[0][1] + SHrotmat[3][2] = R[0][2] + SHrotmat[3][3] = R[0][0] + + for i in range(2 * 1 + 1): + for j in range(2 * 1 + 1): + R_lm1[i][j] = SHrotmat[i + 1][j + 1] + + band_idx = 4 + for l in range(2, order + 1): + + R_l[:, :] = 0.0 + + for m in range(-l, l + 1): + + d = 1 if (m == 0) else 0 + absm = abs(m) + sql2mm2 = np.sqrt((l * l - m * m)) + sqdabsm = np.sqrt(((1 + d) * (l + absm - 1) * (l + absm))) + sqlabsm = np.sqrt(((l - absm - 1) * (l - absm))) + + for n in range(-l, l + 1): + if abs(n) == l: + sqdenom = np.sqrt((2 * l) * (2 * l - 1)) + else: + sqdenom = np.sqrt(l * l - n * n) + + u = sql2mm2 / sqdenom + v = sqdabsm / sqdenom * (1 - 2 * d) * 0.5 + w = sqlabsm / sqdenom * (1 - d) * (-0.5) + + if u != 0: + u = u * SHrot_u(l, m, n, SHrotmat, R_lm1) + if v != 0: + v = v * SHrot_v(l, m, n, SHrotmat, R_lm1) + if w != 0: + w = w * SHrot_w(l, m, n, SHrotmat, R_lm1) + R_l[m + l][n + l] = u + v + w + + for i in range(2 * l + 1): + for j in range(2 * l + 1): + SHrotmat[band_idx + i][band_idx + j] = R_l[i][j] + + for i in range(2 * l + 1): + for j in range(2 * l + 1): + R_lm1[i][j] = R_l[i][j] + + band_idx += 2 * l + 1 + + return SHrotmat + + +def rotateHOA(x: np.array, trajectory: str) -> np.array: + """Rotate HOA signal by applying a rotation matrix calculated from the current quaternion + in each subframe + + Parameters: + ---------- + x: np.array + input signal upto HOA3 + trajectory: str + path to trajectory file + + Returns: + ---------- + y: np.array + rotated HOA signal + """ + + trj_data = np.genfromtxt(trajectory, delimiter=",") + trj_frames = trj_data.shape[0] + + sig_len = x.shape[0] + sig_dim = x.shape[1] + frame_len = 240 + N_frames = np.int(sig_len / frame_len) + + if sig_dim not in [4, 9, 16]: + raise ValueError("rotateHOA can only handle FOA, HOA2 or HOA3 signals!") + + y = np.zeros([sig_len, sig_dim]) + + R1 = np.eye(sig_dim) + R2 = np.eye(sig_dim) + for i_frame in range(N_frames): + + i1 = i_frame * frame_len + i2 = (i_frame + 1) * frame_len + + q1 = trj_data[i_frame % trj_frames, 1:] + R_r = Quat2RotMat(q1) + R1[:, :] = SHrotmatgen(R_r, order=np.int(np.sqrt(sig_dim)) - 1) + + frame_in = x[i1:i2, :] + frame_out = y[i1:i2, :] + + frame_out1 = np.matmul(frame_in, R1.T) + frame_out2 = np.matmul(frame_in, R2.T) + + a = np.linspace(0, 1.0, 240) + b = 1.0 - a + + frame_out[:, :] = frame_out2 * b[:, np.newaxis] + frame_out1 * a[:, np.newaxis] + + R2[:, :] = R1[:, :] + + return y diff --git a/scripts/pyaudio3dtools/rotateISM.py b/scripts/pyaudio3dtools/rotateISM.py new file mode 100644 index 0000000000..37cbfd5eaf --- /dev/null +++ b/scripts/pyaudio3dtools/rotateISM.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import numpy as np + +from pyaudio3dtools.quaternions.functions import Quat2RotMat + + +def rotateISM( + azi: np.array, + ele: np.array, + trajectory: str = None, +) -> tuple: + + if trajectory is None: + return azi, ele + + trj_data = np.genfromtxt(trajectory, delimiter=",") + trj_frames = trj_data.shape[0] + + N_frames = azi.shape[0] + if ele.shape[0] != azi.shape[0]: + raise ValueError("Inconsistent input in azi and ele") + + azi_rot = np.zeros([N_frames]) + ele_rot = np.zeros([N_frames]) + + R_r = np.zeros([3, 3]) + for i_frame in range(N_frames): + + azi1 = azi[i_frame] + ele1 = ele[i_frame] + + r = np.array( + [-np.sin(azi1) * np.cos(ele1), np.cos(azi1) * np.cos(ele1), np.sin(ele1)] + ) + + q1 = trj_data[i_frame % trj_frames, 1:] + R_r[:, :] = Quat2RotMat(q1) + + r = np.matmul(R_r, r) + + r_xy = np.sqrt(r[0] * r[0] + r[1] * r[1]) + azi_rot1 = np.arctan2(-r[0], r[1]) / np.pi * 180.0 + ele_rot1 = np.arctan2(r[2], r_xy) / np.pi * 180.0 + + azi_rot[i_frame] = azi_rot1 + ele_rot[i_frame] = ele_rot1 + + return azi_rot, ele_rot diff --git a/scripts/pyaudio3dtools/spatialaudioconvert.py b/scripts/pyaudio3dtools/spatialaudioconvert.py new file mode 100644 index 0000000000..1e78def724 --- /dev/null +++ b/scripts/pyaudio3dtools/spatialaudioconvert.py @@ -0,0 +1,389 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os +from typing import Optional + +from pyaudio3dtools import ( + audioarray, + audiofile, + binauralrenderer, + hoadecoder, + prerenderer, + spatialaudioformat, + spatialmetadata, +) + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +def spatial_audio_convert( + in_file: str, + out_file: str, + in_format: Optional[str] = None, + in_fs: Optional[int] = None, + in_nchans: Optional[int] = None, + in_ls_layout_file: Optional[str] = None, + out_format: Optional[str] = None, + out_fs: Optional[int] = None, + out_fc: Optional[int] = None, + output_loudness: Optional[int] = None, + loudness_tool: Optional[str] = None, + limit_output: Optional[bool] = False, + prerenderer_bin: Optional[str] = None, + cut_preamble_s: Optional[int] = None, + trajectory: Optional[str] = None, + bin_rend_include_LFE: Optional[bool] = False, + bin_rend_LFE_gain: Optional[float] = 1.0, + binaural_dataset: Optional[str] = "orange53", +) -> tuple: + """ + Spatial audio conversion between various formats + + Parameters + ---------- + in_file: str + input filename + out_file: str + output filename + + in_format: Optional[str] + input spatial audio format + in_fs: Optional[int] + input sampling frequency + in_nchans: Optional[int] + input number of channels (deduced for .wav) + in_ls_layout_file: Optional[str] + input loudspeaker layout file + + out_format: Optional[str] + output spatial audio format + out_fs: Optional[int] + output sampling frequency + out_fc: Optional[int] + output cutoff frequency (low-pass filtering) + + output_loudness: Optional[int] + Loudness level in LKFS/dBov + loudness_tool: Optional[str] + Loudness tool to use. Must be in $PATH. + Supported tools: + ITU-R BS.1770-4 / "bs1770demo" (default) + ITU-T P.56 / "sv56demo" + + limit_output: Optional[bool] + flag whether to apply limiting to the output + prerenderer_bin: Optional[str] + path to prerenderer binary + cut_preamble_s: Optional[int] + preamble to cut in seconds + + trajectory: Optional[str] + head rotation trajectory file (for binaural rendering) + bin_rend_include_LFE: Optional[bool] + flag to include LFE in binaural rendering + bin_rend_LFE_gain: Optional[float] + gain to apply for LFE in binaural rendering + binaural_dataset: Optional[str] + dataset for binaural HRIR or BRIRs + + Returns + ------- + out_format_config.name: + output spatial audio format name + out_fs: + output sampling frequency + """ + # Input is either waveform file (.pcm or .wav) or iis metadata (.txt) + _, input_ext = os.path.splitext(os.path.basename(in_file)) + + """ read input file """ + if input_ext == ".pcm": + if in_fs is None: + if out_fs is not None: + in_fs = out_fs + else: + raise Exception("Input and output fs not defined.") + if in_nchans is None: + if in_format is not None: + in_format_config = spatialaudioformat.Format( + in_format=in_format, ls_layout_file=in_ls_layout_file + ) + in_nchans = in_format_config.nchannels + elif out_format is not None: + out_format_config = spatialaudioformat.Format(in_format=out_format) + in_nchans = out_format_config.nchannels + else: + raise Exception( + "Number if input channels not defined and can't be deduced." + ) + in_sig, in_fs = audiofile.readfile(in_file, fs=in_fs, nchannels=in_nchans) + elif input_ext == ".wav": + in_sig, in_fs = audiofile.readfile(in_file) + if in_format is not None: + in_format_config = spatialaudioformat.Format( + in_format=in_format, ls_layout_file=in_ls_layout_file + ) + # Adjust number of channels if case of HOA, zeroed vert channels if planar + if in_format_config.ambi_order > 0: + in_sig = audioarray.convert( + in_sig, out_nchans=in_format_config.nchannels + ) + elif input_ext == ".txt": + metadata_obj = spatialmetadata.Metadata(in_file, audio_fs=in_fs) + in_sig, in_fs = metadata_obj.get_audio_array() + in_format = "META" + else: + raise Exception(f"Not supported file {input_ext}") + _, in_nchans = in_sig.shape + + """ attempt to detect input format if not specified """ + if in_format is None: + in_format = spatialaudioformat.Format.detect_format(in_nchans) + logger.info(f" Input spatial audio format detected: {in_format}") + else: + logger.info(f" Input spatial audio format: {in_format}") + + """ convert metadata to output format """ + if in_format == "META": + if out_format is None: + raise Exception("out format must be specified for META (.txt) input") + + run_prerenderer = True + + # for other LS conversions -> pre-renderer + _, output_ext = os.path.splitext(os.path.basename(out_file)) + prerenderer_out_path = out_file.replace(output_ext, "_prerender_meta.wav") + out_format_config = spatialaudioformat.Format(in_format=out_format) + # in case of Binaural rendering output format force to HOA3 as intermediate format + if out_format_config.name == "BINAURAL" or ( + out_format_config.name == "BINAURAL_ROOM" and trajectory is not None + ): + in_format_config = spatialaudioformat.Format("HOA3") + if in_ls_layout_file() is not None: + raise NotImplementedError( + "Custom layout files only supported for BINURAL[_ROOM]_REF output" + ) + elif out_format_config.name == "BINAURAL_ROOM": + # in case of Binaural rendering output format force to 7_1_4 as intermediate format + in_format_config = spatialaudioformat.Format("7_1_4") + if in_ls_layout_file() is not None: + raise NotImplementedError( + "Custom layout files only supported for BINURAL[_ROOM]_REF output" + ) + elif out_format_config.name == "BINAURAL_REF": + run_prerenderer = False + raise NotImplementedError("BINAURAL_REF not implemented for META input") + elif out_format_config.name == "BINAURAL_ROOM_REF": + run_prerenderer = False + raise NotImplementedError( + "BINAURAL_ROOM_REF not implemented for META input" + ) + else: + in_format_config = out_format_config + + if run_prerenderer: + logger.info(f" {in_format} -> {in_format_config.name}") + in_format = in_format_config.name + in_sig = prerenderer.render_from_array( + in_sig, + in_file, + in_format_config.altname, + audio_out_path=prerenderer_out_path, + frame_size_ms=20, + fs=in_fs, + prerenderer_bin=prerenderer_bin, + ) + + """ cut preamble """ + if cut_preamble_s is not None: + samples_to_cut = int(cut_preamble_s * in_fs) + if samples_to_cut > 0: + logger.info(f" Cut preample by {samples_to_cut} samples") + in_sig = audioarray.cut(in_sig, (samples_to_cut, -1)) + + """ get spatial input and audio format configurations """ + in_format_config = spatialaudioformat.Format( + in_format=in_format, ls_layout_file=in_ls_layout_file + ) + if out_format is None: + out_format = in_format + out_format_config = spatialaudioformat.Format(in_format=out_format) + + """ zero non-planar input ambisonics channels """ + if in_format_config.ambi_order > 0 and in_format_config.isplanar: + in_sig = spatialaudioformat.Format.zero_vert_hoa_channels(in_sig) + + """ Spatial audio format conversion """ + out_sig = in_sig + if out_format != in_format: + logger.info(f" {in_format_config.name} -> {out_format_config.name}") + + # HOA -> LS + if in_format_config.ambi_order > 0 and out_format_config.isloudspeaker: + mtx_hoa_dec = hoadecoder.get_hoa_mtx( + in_format_config.ambi_order, out_format_config.name + ) + out_sig = hoadecoder.hoa_linear_decoding(in_sig, mtx_hoa_dec) + # HOA/MC -> BINAURAL + elif ( + (in_format_config.ambi_order > 0) or (in_format_config.isloudspeaker) + ) and (out_format_config.name == "BINAURAL"): + out_sig = binauralrenderer.binaural_rendering( + in_sig, + in_format_config.name, + dataset=binaural_dataset, + fs=in_fs, + trajectory=trajectory, + include_LFE=bin_rend_include_LFE, + LFE_gain=bin_rend_LFE_gain, + ) + # HOA/MC -> BINAURAL_ROOM + elif ( + (in_format_config.ambi_order > 0) or (in_format_config.isloudspeaker) + ) and (out_format_config.name == "BINAURAL_ROOM"): + out_sig = binauralrenderer.binaural_rendering( + in_sig, + in_format_config.name, + dataset="mozart_iis", + fs=in_fs, + trajectory=trajectory, + include_LFE=bin_rend_include_LFE, + LFE_gain=bin_rend_LFE_gain, + ) + # HOA -> HOA + elif (in_format_config.ambi_order > 0) and (out_format_config.ambi_order > 0): + out_sig = audioarray.convert( + in_sig, in_fs=in_fs, out_nchans=out_format_config.nchannels + ) + # for other LS conversions -> pre-renderer + elif in_format_config.isloudspeaker and ( + out_format_config.altname.startswith("sba") + or out_format_config.altname.startswith("cicp") + ): + _, output_ext = os.path.splitext(os.path.basename(out_file)) + prerenderer_out_path = out_file.replace(output_ext, "_prerender_mc.wav") + + out_sig = prerenderer.render_from_array( + in_sig, + "mc", + out_format_config.altname, + audio_out_path=prerenderer_out_path, + frame_size_ms=20, + fs=in_fs, + prerenderer_bin=prerenderer_bin, + ) + # BINAURAL passthrough, nothing to be done + elif (in_format_config.isheadphones is True) and ( + out_format_config.isheadphones is True + ): + out_sig = in_sig + # BINAURAL_REF rendering + elif out_format_config.name == "BINAURAL_REF": + if ( + in_format_config.isloudspeaker and in_format_config.nchannels > 2 + ) or in_format_config.name == "CUSTOM_LS": + out_sig = binauralrenderer.binaural_rendering( + in_sig, + in_format_config.name, + dataset="orange53_full", + fs=in_fs, + trajectory=trajectory, + in_ls_layout_file=in_ls_layout_file, + include_LFE=bin_rend_include_LFE, + LFE_gain=bin_rend_LFE_gain, + ) + else: + raise NotImplementedError( + f"{in_format_config.name} -> {out_format_config.name}: format conversion not implemented" + ) + # BINAURAL_ROOM_REF rendering + elif out_format_config.name == "BINAURAL_ROOM_REF": + if ( + in_format_config.isloudspeaker and in_format_config.nchannels > 2 + ) or in_format_config.name == "CUSTOM_LS": + out_sig = binauralrenderer.binaural_rendering( + in_sig, + in_format_config.name, + dataset="mozart_iis_full", + fs=in_fs, + trajectory=trajectory, + in_ls_layout_file=in_ls_layout_file, + include_LFE=bin_rend_include_LFE, + LFE_gain=bin_rend_LFE_gain, + ) + else: + raise NotImplementedError( + f"{in_format_config.name} -> {out_format_config.name}: format conversion not implemented" + ) + else: + raise NotImplementedError( + f"{in_format_config.name} -> {out_format_config.name}: format conversion not implemented" + ) + + """ zero non-planar output ambisonics channels """ + if out_format_config.ambi_order > 0 and out_format_config.isplanar: + out_sig = spatialaudioformat.Format.zero_vert_hoa_channels(out_sig) + + """ resampling """ + if (out_fs is not None) and (out_fs != in_fs): + out_sig = audioarray.resample(out_sig, in_fs, out_fs) + else: + out_fs = in_fs + + """ low-pass filtering """ + if out_fc is not None: + logger.info(f" Low-pass filter ({out_fc}Hz)") + out_sig = audioarray.lpfilter(out_sig, out_fc, out_fs) + + """ limiting """ + if limit_output: + logger.info(" apply limiter") + audioarray.limiter(out_sig, out_fs) + + """ loudness normalization """ + if output_loudness: + _, scale_factor = audiofile.loudnessinfo( + out_sig, + out_fs, + out_format, + output_loudness=output_loudness, + loudness_tool=loudness_tool, + ) + out_sig *= scale_factor + + audiofile.writefile(out_file, out_sig, out_fs) + + return out_format_config.name, out_fs diff --git a/scripts/pyaudio3dtools/spatialaudioformat.py b/scripts/pyaudio3dtools/spatialaudioformat.py new file mode 100644 index 0000000000..9bd832f794 --- /dev/null +++ b/scripts/pyaudio3dtools/spatialaudioformat.py @@ -0,0 +1,428 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import numpy as np + +_format_configs = { + "MONO": { + "name": "MONO", + "ambi_order": 0, + "isplanar": False, + "nchannels": 1, + "isloudspeaker": True, + "isheadphones": False, + "lfe_index": [], + "altname": "HOA0", + }, + "STEREO": { + "name": "STEREO", + "ambi_order": -1, + "isplanar": False, + "nchannels": 2, + "isloudspeaker": True, + "isheadphones": False, + "lfe_index": [], + "altname": "cicp2", + }, + # binaural formats + "BINAURAL": { + "name": "BINAURAL", + "ambi_order": -1, + "isplanar": None, + "nchannels": 2, + "isloudspeaker": False, + "isheadphones": True, + "lfe_index": [], + "altname": "binaural", + }, + "BINAURAL_ROOM": { + "name": "BINAURAL_ROOM", + "ambi_order": -1, + "isplanar": None, + "nchannels": 2, + "isloudspeaker": False, + "isheadphones": True, + "lfe_index": [], + "altname": "binaural_room", + }, + "BINAURAL_REF": { + "name": "BINAURAL_REF", + "ambi_order": -1, + "isplanar": None, + "nchannels": 2, + "isloudspeaker": False, + "isheadphones": True, + "lfe_index": [], + "altname": "binaural_ref", + }, + "BINAURAL_ROOM_REF": { + "name": "BINAURAL_ROOM_REF", + "ambi_order": -1, + "isplanar": None, + "nchannels": 2, + "isloudspeaker": False, + "isheadphones": True, + "lfe_index": [], + "altname": "binaural_room_ref", + }, + # loudspeaker formats + "5_1": { + "name": "5_1", + "ambi_order": -1, + "isplanar": True, + "nchannels": 6, + "isloudspeaker": True, + "isheadphones": False, + "ls_azi": [30, -30, 0, 0, 110, -110], + "ls_ele": [0, 0, 0, 0, 0, 0], + "lfe_index": [3], + "altname": "cicp6", + }, + "7_1": { + "name": "7_1", + "ambi_order": -1, + "isplanar": True, + "nchannels": 8, + "isloudspeaker": True, + "isheadphones": False, + "ls_azi": [30, -30, 0, 0, 110, -110, 135, -135], + "ls_ele": [0, 0, 0, 0, 0, 0, 0, 0], + "lfe_index": [3], + "altname": "cicp12", + }, + "5_1_2": { + "name": "5_1_2", + "ambi_order": -1, + "isplanar": False, + "nchannels": 8, + "isloudspeaker": True, + "isheadphones": False, + "ls_azi": [30, -30, 0, 0, 110, -110, 30, -30], + "ls_ele": [0, 0, 0, 0, 0, 0, 35, 35], + "lfe_index": [3], + "altname": "cicp14", + }, + "5_1_4": { + "name": "5_1_4", + "ambi_order": -1, + "isplanar": False, + "nchannels": 10, + "isloudspeaker": True, + "isheadphones": False, + "ls_azi": [30, -30, 0, 0, 110, -110, 30, -30, 110, -110], + "ls_ele": [0, 0, 0, 0, 0, 0, 35, 35, 35, 35], + "lfe_index": [3], + "altname": "cicp16", + }, + "7_1_4": { + "name": "7_1_4", + "ambi_order": -1, + "isplanar": False, + "nchannels": 12, + "isloudspeaker": True, + "isheadphones": False, + "ls_azi": [30, -30, 0, 0, 135, -135, 90, -90, 30, -30, 135, -135], + "ls_ele": [0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35], + "lfe_index": [3], + "altname": "cicp19", + }, + "COMBINED": { + "name": "COMBINED", + "ambi_order": -1, + "isplanar": False, + "nchannels": 15, + "isloudspeaker": True, + "isheadphones": False, + "ls_azi": [30, -30, 0, 135, -135, 110, -110, 90, -90, 30, -30, 110, -110, 135, -135], + "ls_ele": [0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35], + "lfe_index": None, + "altname": "combined", + }, + "CUSTOM_LS": { + "name": "CUSTOM_LS", + "ambi_order": -1, + "isplanar": False, + "nchannels": -1, + "isloudspeaker": True, + "isheadphones": False, + "ls_azi": None, + "ls_ele": None, + "lfe_index": None, + "altname": "custom_ls", + "config_file": "layout.txt", + }, + # ambisonics + "FOA": { + "name": "FOA", + "ambi_order": 1, + "isplanar": False, + "nchannels": 4, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "sba1", + }, + "PLANARFOA": { + "name": "PLANARFOA", + "ambi_order": 1, + "isplanar": True, + "nchannels": 4, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "sba1", + }, + "HOA2": { + "name": "HOA2", + "ambi_order": 2, + "isplanar": False, + "nchannels": 9, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "sba2", + }, + "PLANARHOA2": { + "name": "PLANARHOA2", + "ambi_order": 2, + "isplanar": True, + "nchannels": 9, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "sba2", + }, + "HOA3": { + "name": "HOA3", + "ambi_order": 3, + "isplanar": False, + "nchannels": 16, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "sba3", + }, + "PLANARHOA3": { + "name": "PLANARHOA3", + "ambi_order": 3, + "isplanar": True, + "nchannels": 16, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "sba3", + }, + # ism + "ISM": { + "name": "ISM", + "ambi_order": -1, + "isplanar": None, + "nchannels": -1, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "ism", + }, + "ISM1": { + "name": "ISM1", + "ambi_order": -1, + "isplanar": None, + "nchannels": 1, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "ism1", + }, + "ISM2": { + "name": "ISM2", + "ambi_order": -1, + "isplanar": None, + "nchannels": 2, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "ism2", + }, + "ISM3": { + "name": "ISM3", + "ambi_order": -1, + "isplanar": None, + "nchannels": 3, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "ism3", + }, + "ISM4": { + "name": "ISM4", + "ambi_order": -1, + "isplanar": None, + "nchannels": 4, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "ism4", + }, + # masa + "MASA": { + "name": "MASA", + "ambi_order": -1, + "isplanar": None, + "nchannels": -1, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "masa", + }, + "MASA1": { + "name": "MASA1", + "ambi_order": -1, + "isplanar": None, + "nchannels": 1, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "masa1", + }, + "MASA2": { + "name": "MASA2", + "ambi_order": -1, + "isplanar": None, + "nchannels": 2, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "masa2", + }, + # metadata format + "META": { + "name": "META", + "ambi_order": -1, + "isplanar": None, + "nchannels": -1, + "isloudspeaker": False, + "isheadphones": False, + "lfe_index": [], + "altname": "meta", + }, +} + +# Channel indices of planar Ambisonic components of ACN +_planar_hoa_channels = np.array([0, 1, 3, 4, 8, 9, 15]) +# Channel indices of vertical Ambisonic components of ACN +_vert_hoa_channels = np.array([2, 5, 6, 7, 10, 11, 12, 13, 14]) + + +class Format: + def __init__(self, in_format: str = "FOA", ls_layout_file: str = None): + self.name = None + self.ambi_order = -1 + self.nchannels = None + self.isloudspeaker = False + self.lfe_index = [] + + for config_name, config_dict in _format_configs.items(): + if ( + in_format.upper() == config_name + or in_format.upper() == config_dict["altname"].upper() + ): + for k, v in _format_configs[config_name].items(): + setattr(self, k, v) + + if not self.name: + raise SystemExit( + "Spatial audio format not supported. If 'EXT' is used, please change to ISM or MASA. Ensure it is same as 'in_format'" + ) + + if self.name == "CUSTOM_LS" and ls_layout_file is not None: + with open(ls_layout_file, "r") as f_ls: + self.ls_azi = [float(x) for x in f_ls.readline().split(",").strip()] + self.ls_ele = [float(x) for x in f_ls.readline().split(",").strip()] + try: + self.lfe_index = [int(x) for x in f_ls.readline().split(",").strip()] + except: + self.lfe_index = [] + + def get_nchannels(self): + return self.nchannels + + def print_info(self): + attrs = vars(self) + for item in attrs: + print(f" {item}: {attrs[item]}") + + @staticmethod + def ambiorder_from_nchannels(out_nchans: int) -> int: + return int(np.sqrt(out_nchans) - 1) + + @staticmethod + def nchannels_from_ambiorder(ambi_order: int) -> int: + return (ambi_order + 1) ** 2 + + @staticmethod + def zero_vert_hoa_channels(x: np.ndarray) -> np.ndarray: + x[:, _vert_hoa_channels[_vert_hoa_channels < x.shape[1]]] = 0.0 + return x + + @staticmethod + def get_vert_hoa_channels() -> np.ndarray: + return _vert_hoa_channels + + @staticmethod + def list_all(long_descition: bool = False): + for key, value in _format_configs.items(): + if long_descition is True: + print(key, value) + else: + print(key) + + @staticmethod + def detect_format(nchannels: int) -> str: + config_name = None + + for config_name in _format_configs: + dictionary = _format_configs[config_name] + if dictionary["nchannels"] == nchannels: + config_name = dictionary["name"] + break + + if config_name is None: + raise SystemExit("Spatial audio format not found") + + return config_name + + @staticmethod + def get_format_dict(in_format: str): + for config_name in _format_configs: + if in_format.upper() == config_name: + return _format_configs[config_name] + return None diff --git a/scripts/pyaudio3dtools/spatialmetadata.py b/scripts/pyaudio3dtools/spatialmetadata.py new file mode 100644 index 0000000000..a4d378eded --- /dev/null +++ b/scripts/pyaudio3dtools/spatialmetadata.py @@ -0,0 +1,450 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import math +import os +from typing import Optional, TextIO + +import numpy as np + +from pyaudio3dtools import audioarray, audiofile + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +class Metadata: + def __init__( + self, + metadata_path: Optional[str] = None, + metadata_format: Optional[str] = "iis", + audio_wav_path: Optional[str] = None, + audio_fs: Optional[int] = 48000, + ): + """ + initialization + + Parameters + ---------- + metadata_path: Optional[str] + path to metadata file + metadata_format: Optional[str] + format for metadata file, supported: ["iis", "ivas_ism"] + audio_wav_path: Optional[str] + path to corresponding audio files + audio_fs: Optional[int] + audio sampling frequency + + Returns + ------- + self + + """ + + self._delete_all() + if audio_fs is None: + audio_fs = 48000 + self.audio_fs = audio_fs + + # init from input file + if metadata_path is not None and os.path.isfile(metadata_path): + self.read_metadata(metadata_path, metadata_format, audio_wav_path) + + def _delete_all(self) -> None: + self.objects = [] # list of audio objects + self.nb_objects = 0 # Number of objects + self.nb_tracks = 0 # Number of tracks + self.audio_wav = [] # list of wav files + self.audio_array = np.zeros((1, 0)) + self.nb_frames = 0 # Number of frames + + def read_metadata( + self, + metadata_path: str, + metadata_format: str = "iis", + audio_wav_path: Optional[str] = None, + ) -> None: + if metadata_format == "iis": + with open(metadata_path, "r") as file_in: + dirname = os.path.dirname(metadata_path) + self.audio_wav.append(os.path.join(dirname, file_in.readline().strip())) + nb_new_objects = int(file_in.readline()) + + for _ in range(nb_new_objects): + in_type = file_in.readline().strip() + + if in_type.lower() == "ism": + self.objects.append(read_ism_input(file_in, dirname)) + elif in_type.lower() == "sba": + self.objects.append(read_sba_input(file_in)) + elif in_type.lower() == "mc": + self.objects.append(read_mc_input(file_in)) + else: + raise ValueError("Unknown input type in metadata file") + + self._append_audio_array(self.audio_wav[-1]) + self.nb_objects += 1 + + elif metadata_format == "ivas_ism": + if audio_wav_path is None: + raise FileNotFoundError("Wave file not specified!") + + self.audio_wav.append(audio_wav_path) + self.objects.append( + read_ism_ivas_data(metadata_path, object_index=self.nb_objects) + ) + self._append_audio_array(self.audio_wav[-1]) + self.nb_objects += 1 + else: + raise ValueError("Metadata: unknown metadata format") + + def write_metadata( + self, + metadata_path: str, + metadata_format: str = "iis", + audio_output_path: Optional[str] = None, + max_objects: Optional[int] = None, + ) -> list: + metadata_out_list = [] + + if metadata_format == "iis": + with open(metadata_path, "w") as file_out: + if audio_output_path is not None: + file_out.write(f"{audio_output_path}\n") + dirname = os.path.dirname(metadata_path) + self.write_audio_array(os.path.join(dirname, audio_output_path)) + + file_out.write(f"{str(self.nb_objects)}\n") + for object_index in range(self.nb_objects): + if self.objects[object_index]["input_type"] == "ism": + write_ism_input( + file_out, + self.objects[object_index], + metadata_path, + num_frames=self.nb_frames, + ) + elif self.objects[object_index]["input_type"] == "sba": + write_sba_input(file_out, self.objects[object_index]) + elif self.objects[object_index]["input_type"] == "mc": + write_mc_input(file_out, self.objects[object_index]) + else: + raise ValueError("Unknown input type in metadata file") + + metadata_out_list.append(file_out.name) + + elif metadata_format == "ivas_ism": + outfilename, output_ext = os.path.splitext(os.path.basename(metadata_path)) + x = np.zeros((1, 0)) + + for object_index in range(self.nb_objects): + if self.objects[object_index]["input_type"] == "ism": + # Prepare audio wavefrom + if audio_output_path is not None: + chan_start = self.objects[object_index]["track_index"] + chan_end = chan_start + self.objects[object_index]["nb_tracks"] + if x.shape[1] == 0: + x = self.audio_array[:, chan_start:chan_end] + else: + x = np.append( + x, self.audio_array[:, chan_start:chan_end], axis=1 + ) + + # Write positions + with open( + metadata_path.replace( + output_ext, + str(self.objects[object_index]["track_index"]) + output_ext, + ), + "w", + ) as file_out: + write_ism_ivas_data( + file_out, + self.objects[object_index], + num_frames=self.nb_frames, + ) + metadata_out_list.append(file_out.name) + + if (max_objects is not None) and ( + len(metadata_out_list) >= max_objects + ): + break + + # Write audio waveform + if audio_output_path is not None: + audiofile.writefile(audio_output_path, x, fs=self.audio_fs) + + return metadata_out_list + + def print_info(self) -> None: + print(f"Number of objects in the scene: {self.nb_objects}") + for object_index in range(self.nb_objects): + print(f" Object #{object_index} Type: {self.objects[object_index]}") + + def _append_audio_array(self, audio_wav=None, fs=48000, object_index=None): + if audio_wav is None: + audio_wav = self.audio_wav[-1] + if object_index is None: + object_index = -1 + + x, fs = audiofile.readfile(audio_wav, fs=fs) + logger.debug(f"Append {audio_wav}: {x.shape[0]} by {x.shape[1]}") + + # Select appropriate channels & resample if necessary + chan_start = self.objects[object_index]["track_index"] + chan_end = chan_start + self.objects[object_index]["nb_tracks"] + logger.debug(f" channels from {chan_start} to {chan_end}") + x = x[:, chan_start:chan_end] + x = audioarray.resample(x, fs, self.audio_fs) + + # Append array and update track index + self.objects[object_index]["track_index"] = self.audio_array.shape[1] + if self.audio_array.shape[1] == 0: + self.audio_array = x + else: + len_min = min([self.audio_array.shape[0], x.shape[0]]) + self.audio_array = np.append( + self.audio_array[:len_min][:], x[:len_min][:], axis=1 + ) + + self.nb_tracks = self.nb_tracks + x.shape[1] + self.nb_frames = math.ceil(50.0 * self.audio_array.shape[0] / self.audio_fs) + + # Get audio array with sampling rate + def get_audio_array(self): + return self.audio_array, self.audio_fs + + # Set audio array from file + def set_audio_array(self, audio_path, fs=None): + if fs is None: + fs = self.audio_fs + audiofile.readfile(audio_path, self.audio_array, fs) + self.audio_fs = fs + + # Write in file audio array + def write_audio_array(self, audio_path): + audiofile.writefile(audio_path, self.audio_array, fs=self.audio_fs) + + +################################################## +# Helper functions for IIS metadata +################################################## +def read_ism_input(file_handle: TextIO, dirname: str) -> dict: + """ + Read ISM Input (IIS metadata format) + + Parameters + ---------- + file_handle: TextIO + file pointer + dirname: str + root directory used to read csv files + + Returns + ------- + dict + ISM dictionnary with positions + """ + ism = {"input_type": "ism"} + ism["track_index"] = int(file_handle.readline()) - 1 + ism["nb_tracks"] = 1 + ism["positions"] = [] + line = file_handle.readline() + + try: + ism["num_positions"] = int(line) + for _ in range(ism["num_positions"]): + [use_for_frames, azimuth, elevation] = ( + file_handle.readline().strip().split(",") + ) + pos = {} + pos["use_for_frames"] = int(use_for_frames) + pos["azimuth"] = int(azimuth) + pos["elevation"] = int(elevation) + ism["positions"].append(pos) + except: + meta_csv = os.path.join(dirname, line.strip()) + pos_idx = 0 + with open(meta_csv) as file_handle: + for line in file_handle: + current_values = line.strip().split(",") + pos = {} + pos["use_for_frames"] = 1 + pos["azimuth"] = float(current_values[1]) + pos["elevation"] = float(current_values[2]) + ism["positions"].append(pos) + pos_idx += 1 + + ism["num_positions"] = pos_idx + + return ism + + +def write_ism_input( + file_handle: TextIO, + ism_dict: dict, + metadata_path: Optional[str] = None, + num_frames: Optional[int] = None, +) -> None: + """ + Write ISM Input (IIS metadata format) + + Parameters + ---------- + file_handle: TextIO + file pointer + ism_dict: dict + ISM dictionnary with positions + metadata_path: Optional[str] + if given positions writen cvs format + num_frame: Optional[int] + number of frames to be written + + Returns + ------- + None + """ + file_handle.write("ISM\n") + track_index = ism_dict["track_index"] + file_handle.write(f"{str(track_index + 1)}\n") + + if metadata_path is None: + num_positions = ism_dict["num_positions"] + file_handle.write(f"{str(num_positions)}\n") + + positions = ism_dict["positions"] + for pos_idx in range(ism_dict["num_positions"]): + use_for_frames = positions[pos_idx]["use_for_frames"] + azimuth = round(positions[pos_idx]["azimuth"]) + elevation = round(positions[pos_idx]["elevation"]) + + file_handle.write(f"{use_for_frames:04d},{azimuth:+03d},{elevation:+03d}\n") + else: + # Write filename + _, extname = os.path.splitext(metadata_path) + dirname = os.path.dirname(metadata_path) + basename = os.path.basename(metadata_path).replace( + extname, "." + str(track_index) + ".csv" + ) + file_handle.write(f"{basename}\n") + # Write positions + with open(os.path.join(dirname, basename), "w") as file_out: + write_ism_ivas_data(file_out, ism_dict, num_frames=num_frames) + + +def read_sba_input(file_handle: TextIO) -> dict: + sba = {"input_type": "sba"} + sba["track_index"] = int(file_handle.readline()) + sba["order"] = int(file_handle.readline()) + sba["nb_tracks"] = (sba["order"] + 1) ** 2 + return sba + + +def write_sba_input(file_handle: TextIO, sba_dict: dict) -> None: + file_handle.write("SBA\n") + track_index = sba_dict["track_index"] + file_handle.write(f"{str(track_index)}\n") + order = sba_dict["order"] + file_handle.write(f"{str(order)}\n") + + +def read_mc_input(file_handle: TextIO) -> dict: + mc = {"input_type": "mc"} + mc["track_index"] = int(file_handle.readline()) + mc["cicp_index"] = int(file_handle.readline()) + mc["nb_tracks"] = 12 + return mc + + +def write_mc_input(file_handle: TextIO, mc_dict: dict) -> None: + file_handle.write("MC\n") + track_index = mc_dict["track_index"] + file_handle.write(f"{str(track_index)}\n") + order = mc_dict["order"] + file_handle.write(f"{str(order)}\n") + + +################################################## +# Helper functions for ISM IVAS metadata +################################################## +def read_ism_ivas_data(metadata_path: str, object_index: int = 0) -> None: + ism = {"input_type": "ism"} + ism["track_index"] = 0 + ism["num_positions"] = 0 + ism["nb_tracks"] = 1 + ism["positions"] = [] + + pos_idx = 0 + with open(metadata_path) as file_handle: + for line in file_handle: + current_values = line.strip().split(",") + pos = {} + pos["use_for_frames"] = 1 + pos["azimuth"] = float(current_values[1]) + pos["elevation"] = float(current_values[2]) + ism["positions"].append(pos) + pos_idx += 1 + + ism["num_positions"] = pos_idx + return ism + + +def write_ism_ivas_data( + file_handle: TextIO, ism_dict: dict, num_frames: Optional[int] = None +) -> None: + positions = ism_dict["positions"] + + if num_frames is None: + num_frames = 0 + for pos_idx in range(len(positions)): + num_frames += positions[pos_idx]["use_for_frames"] + + # Constants for all positions + distance = 1.0 + spread = 0.0 + gain = 1.0 + pos_idx = 0 + pos_used_times = 0 + for frame_idx in range(num_frames): + azimuth = float(positions[pos_idx]["azimuth"]) + elevation = float(positions[pos_idx]["elevation"]) + + file_handle.write( + f"{frame_idx:04d},{azimuth:+07.2f},{elevation:+06.2f},{distance:05.2f},{spread:06.2f},{gain:04.2f}\n" + ) + + pos_used_times += 1 + + if pos_used_times == positions[pos_idx]["use_for_frames"]: + pos_idx = (pos_idx + 1) % len(positions) + pos_used_times = 0 diff --git a/scripts/pyivastest/IvasBaseClass.py b/scripts/pyivastest/IvasBaseClass.py new file mode 100644 index 0000000000..570e32d3fc --- /dev/null +++ b/scripts/pyivastest/IvasBaseClass.py @@ -0,0 +1,428 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import logging.handlers +import os +import sys +import filecmp +import json +import platform +from .constants import LOG_FILE_EXT, DECODER_OUTPUT_CONFIGS, LOG_FILE_DIR,SCRIPTS_CONFIGS_DIR, DEFAULT_IVAS_FORMAT_FILE +from copy import deepcopy +import re + +PROGRESS = 70 +CONSOLE = 80 +SILENT = 1000 +logging.addLevelName(CONSOLE, "CONSOLE") +logging.addLevelName(PROGRESS, "PROGRESS") +logging.addLevelName(SILENT, "SILENT") + + +class IvasConsoleFormatter(logging.Formatter): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def format(self, record): + msg = super().format(record) + if record.levelno == PROGRESS: + msg = f"\r{msg}" + else: + if record.last_level == PROGRESS: + if msg and msg[0] != "\n": + msg = f"\n{msg}" + if msg and msg[-1] != "\n": + msg = f"{msg}\n" + return msg + + +class IvasLogFileFormatter(logging.Formatter): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.regex = re.compile(r"\x1b\[[0-9]*m") + + def format(self, record): + msg = super().format(record) + # filter out any color escape sequences + msg = re.sub(self.regex, "", msg) + return msg + + +class IvasConsoleMessageRemoverFilter(logging.Filter): + def filter(self, record): + if record.levelno == PROGRESS or record.levelno == CONSOLE: + return False + else: + return True + + +class IvasLoggerConsoleHandler(logging.StreamHandler): + def __init__(self, stream=None): + if stream is None: + stream = sys.stdout + super().__init__(stream) + self.last_level = 0 + self.terminator = "" + + def filter(self, record): + + # Filter out any records that already go to the console + if "console" in record.__dict__ and record.console is True: + return False + this_level = record.levelno + record.last_level = self.last_level + self.last_level = this_level + return super().filter(record) + + +class IvasLogger(logging.Logger): + def __init__(self, name): + super(IvasLogger, self).__init__(name) + self.last_level = 0 + # make sure nothing is printed by default + self.addHandler(logging.NullHandler()) + + def console(self, msg, addtl_level=-1, *args, **kwargs): + super().log(CONSOLE, msg, *args, **kwargs) + # if we have an additional loglevel, log the message also with this level + # and indicate that we sent it also to the console + if addtl_level >= 0: + if "extra" in kwargs: + kwargs["extra"].update({"console": True}) + else: + kwargs.update({"extra": {"console": True}}) + super().log(addtl_level, msg, *args, **kwargs) + + def progress(self, msg, *args, **kwargs): + super().log(PROGRESS, msg, *args, **kwargs) + + +def getIvasLogger(name=None): + logging_class = logging.getLoggerClass() + logging._acquireLock() + try: + logging.setLoggerClass(IvasLogger) + logger = logging.getLogger(name) + logging.setLoggerClass(logging_class) + return logger + finally: + logging._releaseLock() + + +class IvasBaseClass(object): + """ + classdocs + """ + + def __init__( + self, + enable_logging=False, + console_logger_level="", + logger_name="IvasBaseClass", + log_level=logging.DEBUG, + ): + """ + Constructor + """ + self.enable_logging = enable_logging + self.logger = getIvasLogger(logger_name) + self.logger.setLevel(log_level) + self.console_log_handler = None + self.mem_log_handler = None + if self.enable_logging: + if not self.logger.handlers or not any( + [ + isinstance(h, logging.handlers.MemoryHandler) + for h in self.logger.handlers + ] + ): + self.memLogHandler = logging.handlers.MemoryHandler( + 2000, flushLevel=100, flushOnClose=True + ) + self.logger.addHandler(self.memLogHandler) + else: + for h in self.logger.handlers: + if isinstance(h, logging.handlers.MemoryHandler): + self.memLogHandler = h + break + if console_logger_level != "": + self.set_console_logger(console_logger_level) + # get system + self.uname = platform.uname() + self.system = platform.system() + + @property + def uname(self): + return self.__uname + + @uname.setter + def uname(self, value): + self.__uname = value + + @property + def enable_logging(self): + return self.__enable_logging + + @enable_logging.setter + def enable_logging(self, enable_logging): + self.__enable_logging = enable_logging + + @property + def logger(self): + return self.__logger + + @logger.setter + def logger(self, logger): + self.__logger = logger + + @property + def mem_log_handler(self): + return self.__mem_log_handler + + @mem_log_handler.setter + def mem_log_handler(self, mem_log_handler): + self.__mem_log_handler = mem_log_handler + + @property + def console_log_handler(self): + return self.__console_log_handler + + @console_log_handler.setter + def console_log_handler(self, console_log_handler): + self.__console_log_handler = console_log_handler + + def set_console_logger(self, loglevel): + if self.enable_logging and ( + not self.logger.handlers + or not any( + [isinstance(h, logging.StreamHandler) for h in self.logger.handlers] + ) + ): + console = IvasLoggerConsoleHandler() + console.setLevel(loglevel) + # set a format which is simpler for console use + formatter = IvasConsoleFormatter("%(message)s") + # tell the handler to use this format + console.setFormatter(formatter) + self.console_log_handler = console + # add the handler to the root logger + self.logger.addHandler(console) + else: + for h in self.logger.handlers: + if isinstance(h, logging.StreamHandler): + h.setLevel(loglevel) + self.console_log_handler = h + return + + def create_logging_file(self, log_dir, log_name, formatter=None): + log_file = log_name + LOG_FILE_EXT + log_file_name = os.path.join(log_dir, log_file) + if ( + self.enable_logging + and os.path.exists(log_dir) + and not any( + [ + isinstance(h, logging.FileHandler) + and os.path.realpath(h.baseFilename) + == os.path.realpath(log_file_name) + for h in self.logger.handlers + ] + ) + ): + logfilehandler = logging.FileHandler( + os.path.join(log_dir, log_file), mode="w" + ) + if formatter is None: + formatter = IvasLogFileFormatter( + " %(levelname)-8s | %(name)s - %(message)s" + ) + logfilehandler.setFormatter(formatter) + logfilefilter = IvasConsoleMessageRemoverFilter() + logfilehandler.addFilter(logfilefilter) + self.logger.addHandler(logfilehandler) + if self.mem_log_handler: + self.mem_log_handler.setTarget(logfilehandler) + self.mem_log_handler.flush() + self.logger.removeHandler(self.mem_log_handler) + self.mem_log_handler.close() + self.mem_log_handler = None + + def transform_path(self, path: str, target="windows") -> str: + if "cygwin" in self.uname.system.lower(): + if target == "windows": + # replace /cygdrive/ with :, everthing else should also with slashes... + transformed_path = re.sub( + "^/cygdrive/(?P[a-z])/(?P.*)", + "\g:/\g", + path, + ) + # transformed_path = re.sub("/","\\\\",transformed_path) + elif target == "cygwin": + transformed_path = re.sub("\\\\", "/", path) + transformed_path = re.sub( + "^(?P[a-z]):/(?P.*)", + "/cygdrive/\g/\g", + transformed_path, + ) + else: + transformed_path = path + else: + transformed_path = path + return transformed_path + + @staticmethod + def get_enc_file_name(path: str, item_base_name: str, mode: str) -> str: + return os.path.join(path, "enc", ''.join([item_base_name, "_", mode, ".192"])) + + + @staticmethod + def get_enc_log_file_name(path: str, item_base_name: str, mode: str, log_dir = LOG_FILE_DIR) -> str: + enc_log_name_tmp = ''.join([item_base_name, "_", mode, ".enc", LOG_FILE_EXT]) + enc_log_name = os.path.join(path, log_dir, enc_log_name_tmp) + return enc_log_name + + @staticmethod + def get_dec_file_name(path: str, item_base_name:str, output_config:str, out_ext=".wav") -> str: + output_config_desc = IvasBaseClass.get_oc_desc(output_config) + dec_file_name = os.path.join(path, "dec", + ''.join([item_base_name, ".dec.", output_config_desc, out_ext])) + return dec_file_name + + @staticmethod + def get_dec_log_file_name(path: str, item_base_name:str, output_config:str, log_dir = LOG_FILE_DIR): + output_config_desc = IvasBaseClass.get_oc_desc(output_config) + dec_log_name_tmp = ''.join([item_base_name, ".dec.", output_config_desc, LOG_FILE_EXT]) + dec_log_name = os.path.join(path, log_dir, dec_log_name_tmp) + return dec_log_name + + @staticmethod + def get_oc_desc(output_config:str) -> str: + if output_config.upper() not in DECODER_OUTPUT_CONFIGS: + output_config_desc = os.path.splitext(os.path.basename(output_config))[0] + else: + output_config_desc = output_config + return output_config_desc + + @staticmethod + def read_format_dict(format_file: str): + if not format_file: + format_file = os.path.join(SCRIPTS_CONFIGS_DIR, DEFAULT_IVAS_FORMAT_FILE) + + if not os.path.exists(format_file): + # add config path and try again + format_file = os.path.join(SCRIPTS_CONFIGS_DIR, format_file) + if not os.path.exists(format_file): + return None + with open(format_file, 'r') as fp: + all_formats = IvasBaseClass.generate_all_formats(json.load(fp)) + + return all_formats + + @staticmethod + def generate_all_formats(all_formats_json: dict) -> dict: + all_formats = None + if all_formats_json is not None: + if 'version' in all_formats_json: + if all_formats_json['version'] == 2: + all_formats = IvasBaseClass.generate_all_formats_v2(all_formats_json) + else: + all_formats = all_formats_json + return all_formats + + @staticmethod + def generate_all_formats_v2(all_formats_json: dict) -> dict: + all_formats = None + for ivas_format in all_formats_json: + if ivas_format != "version": + if all_formats is None: + all_formats = {} + all_formats.update({ivas_format:{}}) + for mode_group in all_formats_json[ivas_format]: + for bw in all_formats_json[ivas_format][mode_group]['bitrates']: + for br in all_formats_json[ivas_format][mode_group]['bitrates'][bw]: + new_mode_dict=deepcopy(all_formats_json[ivas_format][mode_group]) + if new_mode_dict['rs'] == True: + table_bitrate = br + bitrate = all_formats_json[ivas_format][mode_group]['bitrates'][bw][br] + mode_bitrate = br.replace("/","_") + else: + #make sure the modes have the same names as the v1 ones... + if br%1000 == 0 and (br > 10000 and not all_formats_json[ivas_format][mode_group]['amr']): + table_bitrate = br // 1000 + mode_bitrate = str(table_bitrate) + else: + table_bitrate = (br // 100)/10 + mode_bitrate = f"{table_bitrate:04.1f}".replace(".","_") + bitrate=br + new_mode_dict.pop('bitrates') + new_mode_dict['bw'] = bw + new_mode_dict['bitrate']=bitrate + new_mode_dict['table_name'] = new_mode_dict['table_name'].format(table_bitrate=table_bitrate, bandwidth=bw.upper()) + new_mode_dict['encoptions'] = [x.format(bandwidth=bw) for x in new_mode_dict['encoptions']] + + new_mode=mode_group.format(bitrate=mode_bitrate,bandwidth=bw) + all_formats[ivas_format].update({new_mode:new_mode_dict}) + + + return all_formats + +if __name__ == "__main__": + import time + + # my_class = IvasClass(console_logger_level=logging.INFO,logger_name = "top") + my_class = IvasBaseClass( + logger_name="top", enable_logging=True, console_logger_level=PROGRESS + ) + my_class2 = IvasBaseClass(logger_name="top.bottom", enable_logging=False) + my_class.set_console_logger(logging.INFO) + myformatter = logging.Formatter("%(name)s - %(levelname)-8s \n %(message)s") + my_class.create_logging_file(".", "test", formatter=myformatter) + my_class.logger.info("test_info") + my_class.logger.console( + "\x1b[31mtest_console_info\x1b[0m test_console_info", logging.INFO + ) + my_class.logger.console("test_console") + my_class2.logger.console("bottom") + for i in range(5): + my_class.logger.progress("test_progress {}".format(i)) + my_class2.logger.info("bottom_progress {}".format(i)) + # my_class.logger.console("test_prgress {}".format(i)) + time.sleep(0.3) + my_class.logger.info("test_info") + my_class.logger.console("Mitte des Filmes") + for i in range(5, 10): + my_class2.logger.progress("bottom_progress {}".format(i)) + my_class.logger.info("test_info {}".format(i)) + # my_class.logger.console("test_prgress {}".format(i)) + time.sleep(0.3) + my_class.logger.console("test_silent_end") diff --git a/scripts/pyivastest/IvasModeAnalyzer.py b/scripts/pyivastest/IvasModeAnalyzer.py new file mode 100644 index 0000000000..678af1906a --- /dev/null +++ b/scripts/pyivastest/IvasModeAnalyzer.py @@ -0,0 +1,998 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os +import re +import operator +from copy import deepcopy +import logging +import functools + +from pyivastest.IvasModeCollector import IvasModeCollector +from pyivastest.constants import LOG_FILE_EXT +from pyivastest.IvasBaseClass import IvasBaseClass + + +INSTRUMENTED_RESULTS = { + "WMOPS": { + "keyword": "total", + "number_format": "{:.5g}", + "position": 3, + "max_or_add": "add", + "keyword_suffix": False, + "strip_suffix": False, + "encdec": 2, + }, + "SRAM": { + "keyword": "Static RAM size", + "number_format": "{:.0f}", + "position": 4, + "max_or_add": "add", + "keyword_suffix": True, + "strip_suffix": True, + "encdec": 2, + }, + "DRAM": { + "keyword": "Stack size", + "number_format": "{:.0f}", + "position": 3, + "max_or_add": "max", + "keyword_suffix": True, + "strip_suffix": True, + "encdec": 2, + }, + "PROM": { + "keyword": "PROM size", + "number_format": "{:.0f}", + "position": 3, + "max_or_add": "add", + "keyword_suffix": True, + "strip_suffix": True, + "encdec": 4, + }, + "TABLES": { + "keyword": "Table ROM size", + "number_format": "{:.0f}", + "position": 4, + "max_or_add": "add", + "keyword_suffix": True, + "strip_suffix": True, + "encdec": 4, + }, +} + + +HTML_DOCTYPE = """""" + +HTML_META = ( + """""" +) + +HTML_STYLE = """ +""" + + +class IvasModeAnalyzer(IvasModeCollector): + """ """ + + def __init__( + self, + dir_name=".", + site_config="", + log_dir="logs", + formats_fname=None, + formats_dict={}, + enable_logging=False, + console_logger_level="", + logger_name="IvasModeCollector", + log_level=logging.DEBUG, + **kwargs, + ): + super().__init__( + site_config=site_config, + formats_fname=formats_fname, + formats_dict=formats_dict, + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + **kwargs, + ) + self.dir = dir_name + self.log_dir = log_dir + self.available_logs = {} + self.log_select_list = {} + self.selected_logs = {} + self.check = "" + self.analyze_encoder = True + self.analyze_decoder = True + self.html_table = None + + def ls_modes(self): + """ """ + # check for every ivas_format in all_modes if there are encoder and decoder logs + if not self.flat_mode_list: + self.collect_mode_configs() + log_dir = os.path.join(self.dir, self.log_dir) + all_log_files = os.listdir(log_dir) + for mode in self.flat_mode_list: + for f in all_log_files: + if ( + re.search("_{}".format(mode), f) + and os.path.splitext(f)[1] == LOG_FILE_EXT + ): + # this is a log file belonging to the ivas_format + if mode not in self.available_logs: + new_mode = { + mode: { + "items": {}, + "table_name": self.flat_mode_list[mode]["cmd"][ + "table_name" + ], + "bitrate": self.flat_mode_list[mode]["cmd"]["bitrate"], + "bw": self.flat_mode_list[mode]["cmd"]["bw"], + "oc_list": [], + "ivas_format": self.flat_mode_list[mode]["ivas_format"], + } + } + self.available_logs.update(new_mode) + # get encoder or decoder + f = os.path.splitext(f)[0] + if os.path.splitext(f)[1] == ".enc": + f = os.path.splitext(f)[0] + item = f.split("".join(["_", mode]))[0] + if item not in self.available_logs[mode]["items"]: + self.available_logs[mode]["items"].update( + {item: {"enc": True, "dec": []}} + ) + else: + self.available_logs[mode]["items"][item]["enc"] = True + else: + oc = os.path.splitext(f)[1][1:] + f = os.path.splitext(os.path.splitext(f)[0])[0] + item, suffices = f.split("".join(["_", mode])) + if item not in self.available_logs[mode]["items"]: + self.available_logs[mode]["items"].update( + {item: {"enc": False, "dec": [oc]}} + ) + else: + # filter out also logs for bitstream postprocessing + if ( + oc + not in self.available_logs[mode]["items"][item]["dec"] + and oc != "proc" + ): + self.available_logs[mode]["items"][item]["dec"].append( + oc + ) + if oc not in self.available_logs[mode]["oc_list"]: + self.available_logs[mode]["oc_list"].append(oc) + + @staticmethod + def get_log_value(log, keyword, position, strip_suffix=0): + """ + + Parameters + ---------- + log : + + keyword : + + position : + + strip_suffix : + (Default value = 0) + + Returns + ------- + + """ + value = -1.0 + for line in log: + line = line.rstrip("\n") + foundline = re.findall(keyword, line) + if foundline: + value = line.split()[position] + if strip_suffix == 1: + value = re.search("[0-9\.]*", value)[0] + return float(value) + return float(value) + + @staticmethod + def get_log_value_from_file( + filename: str, keyword: str, position: int, strip_suffix=0 + ): + """ + + Parameters + ---------- + filename : + + keyword : + + position : + + strip_suffix : + (Default value = 0) + + Returns + ------- + + """ + loglines = [] + if os.path.exists(filename): + fp = open(filename) + loglines = fp.readlines() + return IvasModeAnalyzer.get_log_value( + loglines, keyword, position, strip_suffix=strip_suffix + ) + + def sort_log_modes(self): + list_to_sort = [] + for mode in self.selected_logs: + bitrate = self.selected_logs[mode]["bitrate"] + if isinstance(bitrate, str): + if "{sw_files_path}" not in bitrate: + bitrate = bitrate.rjust(6, "0") + elif isinstance(bitrate, int): + bitrate = "{:06d}".format(bitrate) + # print(mode) + list_to_sort.append( + ( + mode, + self.selected_logs[mode]["ivas_format"], + self.selected_logs[mode]["bw"], + bitrate, + ) + ) + # sort by BW, descending + list_to_sort.sort(key=operator.itemgetter(3)) + list_to_sort.sort(key=operator.itemgetter(2), reverse=True) + # sort by bitrate, ascending + + # sort by ivas format + list_to_sort.sort(key=operator.itemgetter(1)) + return [mode_tuple[0] for mode_tuple in list_to_sort] + + def get_instrumented_table( + self, + keyword, + position, + number_format="{:.5g}", + strip_suffix=0, + encdec=2, + keyword_suffix=0, + max_or_add="add", + ): + """ + + Parameters + ---------- + ivas_format : + + mode_dict : + + keyword : + + position : + + number_format : + (Default value = "{:.5g}") + strip_suffix : + (Default value = 0) + encdec : + (Default value = 2) + keyword_suffix : + (Default value = 0) + max_or_add : + (Default value = 'add') + binaural : + (Default value = None) + sub_dir : + (Default value = '.') + + Returns + ------- + + """ + + if encdec == 2: + if max_or_add == "add": + result_table = [["conf", "enc", "dec", "total"]] + elif max_or_add == "max": + result_table = [["conf", "enc", "dec", "max"]] + elif encdec == 0: + result_table = [["conf", "enc"]] + elif encdec == 1: + result_table = [["conf", "dec"]] + elif encdec == 3: + result_table = [["conf", "com"]] + else: + if max_or_add == "add": + result_table = [["conf", "enc", "dec", "com", "total"]] + if max_or_add == "max": + result_table = [["conf", "enc", "dec", "com", "max"]] + + sorted_modes = self.sort_log_modes() + + for mode in sorted_modes: # sorted(self.selected_logs.keys()): + formatted_name = self.selected_logs[mode]["table_name"] + if encdec == 3 or encdec == 4: + keyword_suffix = 1 + + for item in self.selected_logs[mode]["items"]: + enc_value = -1 + com_value = -1 + if self.selected_logs[mode]["items"][item]["enc"]: + enc_log_name_tmp = "".join([item, "_", mode, ".enc", LOG_FILE_EXT]) + enc_log_name = os.path.join( + self.dir, self.log_dir, enc_log_name_tmp + ) + if encdec == 2 or encdec == 0 or encdec == 4: + # get enc + if keyword_suffix == 1: + enc_value = max( + enc_value, + self.get_log_value_from_file( + enc_log_name, + " ".join([keyword, "\(encoder\)"]), + position, + strip_suffix=strip_suffix, + ), + ) + else: + enc_value = max( + enc_value, + self.get_log_value_from_file( + enc_log_name, + keyword, + position, + strip_suffix=strip_suffix, + ), + ) + # print(enc_value) + if encdec == 3 or encdec == 4: + # common counts should be equal in enc and dec, just take the enc value + com_value = max( + com_value, + self.get_log_value_from_file( + enc_log_name, + " ".join([keyword, "\(common\)"]), + position, + strip_suffix=strip_suffix, + ), + ) + + # enc or common only, we do not collect dec values... + if encdec == 0 or encdec == 3: + if encdec == 0: + result_line = [formatted_name, number_format.format(enc_value)] + elif encdec == 3: + result_line = [formatted_name, number_format.format(com_value)] + else: + for oc in self.selected_logs[mode]["oc_list"]: + formatted_name_oc = formatted_name + " to " + oc + dec_value = -1 + for item in self.selected_logs[mode]["items"]: + if oc in self.selected_logs[mode]["items"][item]["dec"]: + dec_log_name = self.get_dec_log_file_name(item, mode, oc) + if keyword_suffix == 1: + dec_value = max( + dec_value, + self.get_log_value_from_file( + dec_log_name, + " ".join([keyword, "\(decoder\)"]), + position, + strip_suffix=strip_suffix, + ), + ) + else: + dec_value = max( + dec_value, + self.get_log_value_from_file( + dec_log_name, + keyword, + position, + strip_suffix=strip_suffix, + ), + ) + if encdec == 2: + if max_or_add == "add": + total = number_format.format( + float(enc_value) + float(dec_value) + ) + elif max_or_add == "max": + total = number_format.format( + max(float(enc_value), float(dec_value)) + ) + result_line = [ + formatted_name_oc, + number_format.format(enc_value), + number_format.format(float(dec_value)), + total, + ] + + elif encdec == 1: + result_line = [ + formatted_name_oc, + number_format.format(dec_value), + ] + + elif encdec == 4: + if max_or_add == "add": + total = number_format.format( + float(enc_value) + float(dec_value) + float(com_value) + ) + elif max_or_add == "max": + total = number_format.format( + max( + float(enc_value) + float(com_value), + float(dec_value) + float(com_value), + ) + ) + result_line = [ + formatted_name_oc, + number_format.format(enc_value), + number_format.format(float(dec_value)), + number_format.format(com_value), + total, + ] + result_table.append(result_line) + return result_table + + @staticmethod + def parse_valgrind_log(filename): + """ + + Parameters + ---------- + filename : + + + Returns + ------- + + """ + loglines = [] + if os.path.exists(filename): + fp = open(filename) + loglines = fp.readlines() + vg_errors = {"errors": 0, "contexts": 0, "heap_bytes": 0, "heap_blocks": 0} + for line in loglines: + # print(line) + if re.findall("ERROR SUMMARY", line): + split_line = line.split() + vg_errors["errors"] = int(split_line[3].replace(",", "")) + vg_errors["contexts"] = int(split_line[6].replace(",", "")) + + elif re.findall("in use at exit", line): + split_line = line.split() + vg_errors["heap_bytes"] = int(split_line[5].replace(",", "")) + vg_errors["heap_blocks"] = int(split_line[8].replace(",", "")) + return vg_errors + + @staticmethod + def parse_build_log(filename): + """ + + Parameters + ---------- + filename : + + + Returns + ------- + + """ + loglines = [] + if os.path.exists(filename): + fp = open(filename) + loglines = fp.readlines() + build_errors = 0 + for line in loglines: + # print(line) + if re.findall("ERROR[ :]", str.upper(line)): + build_errors += 1 + if re.findall("WARNING[ :]", str.upper(line)): + build_errors += 1 + return build_errors + + @staticmethod + def parse_clang_log(filename, clang_num): + """ + Parse the output from Clang sanitizers and count number of sanitizer errors + and general runtime errors + """ + + search_choices = { + 1: "MemorySanitizer:", + 2: "AddressSanitizer", + 3: "runtime error", # for UndefinedBehaviorSanitizer, name of the sanitizer is not printed out + } + search_string = search_choices[clang_num] + + if os.path.exists(filename): + with open(filename) as f: + lines = f.readlines() + else: + lines = list() + + num_sanitizer_errors = 0 + num_run_errors = 0 + for line in lines: + has_search_string = search_string in line + is_error = re.findall("ERROR[ :](?!PATTERN FILE)", str.upper(line)) + is_warn = re.findall("WARNING[ :]", str.upper(line)) + is_assert = re.findall("ASSERTION", str.upper(line)) + + if has_search_string and (is_error or is_warn): + num_sanitizer_errors += 1 + elif (not has_search_string and (is_error or is_warn)) or is_assert: + num_run_errors += 1 + + return num_sanitizer_errors, num_run_errors + + def print_valgrind_errors(self, log_name, vg_errors): + """ + + Parameters + ---------- + log_name : + + vg_errors : + + + Returns + ------- + + """ + if vg_errors["errors"] != 0 or vg_errors["heap_bytes"] != 0: + self.logger.console( + "Valgrind memcheck error for {}".format(log_name), logging.ERROR + ) + if vg_errors["errors"] != 0: + self.logger.console( + " {} errors in {} contexts".format( + str(vg_errors["errors"]), str(vg_errors["contexts"]) + ), + logging.ERROR, + ) + if vg_errors["heap_bytes"] != 0: + self.logger.console( + " Heap not empty: {} bytes in {} blocks".format( + str(vg_errors["heap_bytes"]), str(vg_errors["heap_blocks"]) + ), + logging.ERROR, + ) + + def print_clang_errors(self, log_name, num_errors, clang_num): + if num_errors != 0: + self.logger.console( + "CLANG{} reports {} error(s) for {}".format( + clang_num, num_errors, log_name + ), + logging.ERROR, + ) + + def get_dec_log_file_name(self, item, mode, oc): + suffices = None + if self.global_bitstream_processing is not None: + suffices = self.get_bs_processing_suffices(self.global_bitstream_processing) + + dec_item_base_name = "_".join([x for x in [item, mode, suffices] if x is not None]) + log_name = IvasBaseClass.get_dec_log_file_name(self.dir, dec_item_base_name, oc) + return log_name + + def get_run_errors(self, failed_modes): + + if self.check.lower().startswith("clang"): + num = int(self.check[-1]) + parse_func = functools.partial(self.parse_clang_log, clang_num=num) + print_func = functools.partial(self.print_clang_errors, clang_num=num) + elif self.check.lower().startswith("valgrind"): + parse_func = self.parse_valgrind_log + print_func = self.print_valgrind_errors + + num_total_errors = 0 + self.ls_modes() + for mode, mode_dict in self.available_logs.items(): + for item, item_dict in mode_dict["items"].items(): + if item_dict["enc"] and self.analyze_encoder: + log_name_tmp = "".join([item, "_", mode, ".enc", LOG_FILE_EXT]) + log_name = os.path.join(self.dir, self.log_dir, log_name_tmp) + if self.check == "VALGRIND": + errors = parse_func(log_name) + num_sanitizer_errors = errors["errors"] + if errors["heap_bytes"] > 0: + num_sanitizer_errors += 1 + num_run_errors = 0 # hack for now + else: + num_sanitizer_errors, num_run_errors = parse_func(log_name) + errors = num_sanitizer_errors + + is_failed_mode = mode in failed_modes["enc"] + + # add error to html report if it is an actual sanitizer error + # or if the en-/decoder crashed + if ( + num_sanitizer_errors > 0 or is_failed_mode + ) and self.html_table is not None: + self.add_error_to_html(mode, item, log_name, "Encoder") + + num_total_errors += num_sanitizer_errors + num_run_errors + print_func(log_name, errors) + if self.analyze_decoder: + for oc in item_dict["dec"]: + log_name = self.get_dec_log_file_name(item, mode, oc) + if self.check == "VALGRIND": + errors = parse_func(log_name) + num_sanitizer_errors = errors["errors"] + num_run_errors = 0 # hack for now + else: + num_sanitizer_errors, num_run_errors = parse_func(log_name) + errors = num_sanitizer_errors + + # check for failed decoder + oc_failed_at_least_once = oc in failed_modes["dec"] + if oc_failed_at_least_once: + mode_failed_for_oc = mode in failed_modes["dec"][oc] + else: + mode_failed_for_oc = False + is_failed_mode = oc_failed_at_least_once and mode_failed_for_oc + + # add error to html report if it is an actual sanitizer error + # or if the en-/decoder crashed + if ( + num_sanitizer_errors > 0 or is_failed_mode + ) and self.html_table is not None: + self.add_error_to_html(mode, item, log_name, "Decoder", oc) + + num_total_errors += num_sanitizer_errors + num_run_errors + print_func(log_name, errors) + if num_total_errors == 0: + self.logger.console("{} reports no errors".format(self.check), logging.INFO) + + def get_valgrind_errors(self): + + total_vg_errors = 0 + self.ls_modes() + for mode, mode_dict in self.available_logs.items(): + for item, item_dict in mode_dict["items"].items(): + if item_dict["enc"]: + log_name_tmp = "".join([item, "_", mode, ".enc", LOG_FILE_EXT]) + log_name = os.path.join(self.dir, self.log_dir, log_name_tmp) + vg_errors = self.parse_valgrind_log(log_name) + + # TODO: restructure to only do stuff once + if vg_errors["errors"] > 0 and self.html_table is not None: + self.add_error_to_html(mode, item, log_name, "Encoder") + + total_vg_errors += vg_errors["errors"] + self.print_valgrind_errors(log_name, vg_errors) + for oc in item_dict["dec"]: + log_name = self.get_dec_log_file_name(item, mode, oc) + vg_errors = self.parse_valgrind_log(log_name) + + if vg_errors["errors"] > 0 and self.html_table is not None: + self.add_error_to_html(mode, item, log_name, "Decoder", oc) + + total_vg_errors += vg_errors["errors"] + self.print_valgrind_errors(log_name, vg_errors) + if total_vg_errors == 0: + self.logger.console("Valgrind reports no errors", logging.INFO) + + def get_build_errors(self): + """ """ + build_log = os.path.join(self.dir, "build" + LOG_FILE_EXT) + build_errors = self.parse_build_log(build_log) + if build_errors > 0: + self.logger.console( + "Building problems, {} warnings or errors reported".format( + str(build_errors) + ), + logging.ERROR, + ) + + def get_errors(self, failed_modes): + """ """ + self.get_build_errors() + if self.check in ["CLANG1", "CLANG2", "CLANG3", "VALGRIND"]: + self.get_run_errors(failed_modes) + + def set_select_list(self, select_list): + self.log_select_list = select_list + pass + + def add_select_list(self, select_list): + for mode in select_list: + if mode not in self.log_select_list: + self.log_select_list.update({mode: select_list[mode]}) + else: + for oc in select_list[mode]: + if oc not in self.log_select_list[mode]: + self.log_select_list[mode].append(oc) + pass + + def select_logs(self): + if self.log_select_list: + self.selected_logs = {} + for mode in self.log_select_list: + if mode in self.available_logs: + self.selected_logs.update( + {mode: deepcopy(self.available_logs[mode])} + ) + new_oc_list = [] + for oc in self.log_select_list[mode]: + if oc in self.selected_logs[mode]["oc_list"]: + new_oc_list.append(oc) + self.selected_logs[mode]["oc_list"] = new_oc_list + else: + self.selected_logs = deepcopy(self.available_logs) + + def get_instrumented_value(self, value, encdec=-1): + + if value in INSTRUMENTED_RESULTS: + self.select_logs() + if encdec == -1: + encdec = INSTRUMENTED_RESULTS[value]["encdec"] + return self.get_instrumented_table( + INSTRUMENTED_RESULTS[value]["keyword"], + INSTRUMENTED_RESULTS[value]["position"], + encdec=encdec, + number_format=INSTRUMENTED_RESULTS[value]["number_format"], + max_or_add=INSTRUMENTED_RESULTS[value]["max_or_add"], + keyword_suffix=INSTRUMENTED_RESULTS[value]["keyword_suffix"], + strip_suffix=INSTRUMENTED_RESULTS[value]["strip_suffix"], + ) + + @staticmethod + def write_confluence_table(f, table): + """ + + Parameters + ---------- + f : + + table : + + + Returns + ------- + + """ + header = table.pop(0) + # write header + f.write("".join(["||", "||".join(header), "||\r\n"])) + for line in table: + f.write("".join(["|", "|".join(line), "|\r\n"])) + + @staticmethod + def write_confluence_table_chart_header(f): + """ + + Parameters + ---------- + f : + + + Returns + ------- + + """ + f.write("{table-chart:type=Stacked Column|column = conf|aggregation=enc}\r\n") + + @staticmethod + def write_confluence_table_chart_footer(f): + """ + + Parameters + ---------- + f : + + + Returns + ------- + + """ + f.write("{table-chart}\r\n") + + @staticmethod + def write_confluence_table_chart(csv_file_name, result_table): + """ + + Parameters + ---------- + csv_file_name : + + result_table : + + + Returns + ------- + + """ + with open(csv_file_name + ".confluence", "w", newline="\n") as f: + IvasModeAnalyzer.write_confluence_table_chart_header(f) + IvasModeAnalyzer.write_confluence_table(f, result_table) + IvasModeAnalyzer.write_confluence_table_chart_footer(f) + + @staticmethod + def write_csv_file(csv_file_name, result_table): + """ + + Parameters + ---------- + csv_file_name : + + result_table : + + + Returns + ------- + + """ + with open(csv_file_name + ".csv", "w", newline="\n") as f: + header = result_table.pop(0) + # write header + f.write("{}\r\n".format(";".join(header))) + for line in result_table: + f.write("{}\r\n".format(";".join(line))) + f.close() + + def instrumented_to_confluence(self, value, filename, encdec=-1): + table = self.get_instrumented_value(value, encdec=encdec) + IvasModeAnalyzer.write_confluence_table_chart(filename, table) + + def instrumented_to_csv(self, value, filename, encdec=-1): + table = self.get_instrumented_value(value, encdec=encdec) + IvasModeAnalyzer.write_csv_file(filename, table) + + def all_instrumented_to_csv(self, basefilename, encdec=-1): + for value in INSTRUMENTED_RESULTS: + table = self.get_instrumented_value(value, encdec=encdec) + IvasModeAnalyzer.write_csv_file("".join([basefilename, "_", value]), table) + + def add_error_to_html(self, mode, audiofile, logfile, enc_dec, oc=None): + tbl_cell = "{}" + tbl_row = "\n{}\n" + + upload_location = os.environ.get("UPLOAD_LOCATION", None) + if upload_location is not None: + # environment variable is given, add check subdir + upload_location_logs = upload_location + "/" + self.check + "/logs" + upload_location_fer = upload_location + else: + # use current working copy dir to make links work also on local machines + upload_location_logs = self.dir + "/logs" + upload_location_fer = None + + logfile_url = "{}/{}".format(upload_location_logs, os.path.basename(logfile)) + logfile_link = "{}".format( + logfile_url, os.path.basename(logfile) + ) + + fer_file_link = "-" + if enc_dec == "Decoder" and self.global_bitstream_processing is not None: + for processing in self.global_bitstream_processing["proc_chain"]: + if "-fer" in processing: + # fer file is the 5th argument in the processing command + fer_file = processing[4] + if upload_location_fer is not None: + fer_file_url = "{}/{}".format( + upload_location_fer, os.path.basename(fer_file) + ) + fer_file_link = "{}".format( + fer_file_url, os.path.basename(fer_file) + ) + else: + fer_file_link = os.path.basename(fer_file) + + if oc is not None: + assert enc_dec == "Decoder" + enc_dec = enc_dec + " " + oc + + row_data = [mode, enc_dec, fer_file_link, audiofile, logfile_link] + row = "\n".join([tbl_cell.format(elem) for elem in row_data]) + self.html_table.append(tbl_row.format(row)) + + def write_html_file(self, check, basefilename, revision): + + # create header for table + hdr_tmpl = "{}" + + columns = ["Mode", "Encoder/Decoder", "FER-Pattern", "Item", "Logfile"] + tbl_hdr = "\n".join([hdr_tmpl.format(elem) for elem in columns]) + self.html_table.insert(0, "\n" + tbl_hdr + "\n") + + # assemble page + page_tmpl = "{}\n\n\n{}\n{}\n{}\n\n{}\n" + table_tmpl = "\n{}\n
" + title_tmpl = "Error report for {}" + fname_tmpl = "{}_{}.html" + body_tmpl = "

{} report on revision {}

\n{}" + + table = table_tmpl.format("\n".join(self.html_table)) + title = title_tmpl.format(check) + body = body_tmpl.format(check, revision, table) + page = page_tmpl.format(HTML_DOCTYPE, HTML_META, title, HTML_STYLE, body) + fname = fname_tmpl.format(basefilename, check) + with open(fname, "w") as f: + for line in page: + f.write(line) + + @staticmethod + def get_snr_report(file_name): + SNR_report = {} + if os.path.exists(file_name): + fp = open(file_name, "r") + lines = fp.readlines() + for line in lines: + line = line.rstrip("\n") + if re.findall("SNR report", line): + continue + elif re.findall("SNR", line): + values = line.split() + SNR_report.update( + { + values[0]: { + "SNR": float(values[1]), + "SegSNR": float(values[4]), + "WSegSNR": float(values[7]), + } + } + ) + return SNR_report diff --git a/scripts/pyivastest/IvasModeCollector.py b/scripts/pyivastest/IvasModeCollector.py new file mode 100644 index 0000000000..ab466d0b9d --- /dev/null +++ b/scripts/pyivastest/IvasModeCollector.py @@ -0,0 +1,543 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import re +import json +import os +import os.path +import platform +import logging +from copy import deepcopy +from pyivastest import IvasBaseClass +from pyivastest import constants + +class IvasModeCollector(IvasBaseClass.IvasBaseClass): + """ + Basic class for handling IVAS formats, selecting subsets of formats, modes, band width, and output configurations. + Also does the handling of the input files to be coded. + :param site_config: file name of the basis configuration (without the .json file extension), + defaults to the empty string and the uses FhG_{system} depending on the operating system. + """ + + def __init__( + self, + site_config="", + in_dir_dict={}, + formats_fname="", + formats_dict={}, + enable_logging=False, + console_logger_level="", + logger_name="IvasModeCollector", + log_level=logging.DEBUG, + ): + + super().__init__( + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + ) + if formats_dict: + self.all_formats = formats_dict + else: + if not formats_fname: + formats_fname = os.path.join(constants.SCRIPTS_CONFIGS_DIR, constants.DEFAULT_IVAS_FORMAT_FILE) + self.all_formats = self.read_format_dict(formats_fname) + if self.all_formats is None: + # fall back to standard + self.logger.warning( + "IVAS Format dictonary file {} does not exist, falling back to {}!".format( + formats_fname,constants.DEFAULT_IVAS_FORMAT_FILE)) + self.all_formats = self.read_format_dict(os.path.join(constants.SCRIPTS_CONFIGS_DIR, constants.DEFAULT_IVAS_FORMAT_FILE)) + #fp.close() + self.flat_mode_list = None + + have_site_config_file = False + if site_config == "": + site_config = "FhG" + if os.path.splitext(site_config)[1] == ".json": + site_config_file = os.path.realpath(site_config) + site_config_dir, site_config_basename = os.path.split(site_config_file) + site_config = os.path.splitext(site_config_basename)[0] + have_site_config_file = True + else: + site_config_file = os.path.realpath(site_config) + site_config_dir, site_config = os.path.split(site_config_file) + + self.logger.info( + "Looking for site config file {} in {} and {}".format( + site_config, site_config_dir, constants.SCRIPTS_CONFIGS_DIR + ) + ) + site_config_file = self.test_for_config_file( + site_config_dir, "".join([site_config, ".json"]) + ) + if not site_config_file: + # maybe we need to add the platform + if not have_site_config_file: + self.logger.info( + "Site config file {} does not exist, testing for platform".format( + site_config + ) + ) + if ( + self.uname.system == "Windows" + or "cygwin" in self.uname.system.lower() + ): + site_config = "".join([site_config, "_windows"]) + elif self.uname.system == "Linux": + site_config = "".join([site_config, "_linux"]) + elif self.uname.system == "Darwin": + if self.uname.machine.endswith("64"): + site_config = "".join([site_config, "_macos_x86_64"]) + else: + site_config = "".join([site_config, "_macos"]) + self.logger.info( + "Looking for site config file with platform {}".format(site_config) + ) + + site_config_file = self.test_for_config_file( + site_config_dir, "".join([site_config, ".json"]) + ) + if not site_config_file: + self.logger.console("Site config file not found!", logging.ERROR) + else: + fp = open(site_config_file, "r") + self.config = json.load(fp) + if "cygwin" in self.uname.system.lower(): + for key in self.config: + if key == "inpaths": + for path in self.config[key]: + self.config[key][path] = self.transform_path( + self.config[key][path], target="cygwin" + ) + else: + self.config[key] = self.transform_path( + self.config[key], target="cygwin" + ) + fp.close() + self.in_dirs = self.config["inpaths"] + if in_dir_dict: + for in_conf in in_dir_dict: + if in_conf in self.in_dirs: + self.in_dirs[in_conf] = in_dir_dict[in_conf] + else: + self.in_dirs.update({in_conf: in_dir_dict[in_conf]}) + + self.mode_select_list = {} + self.format_select_list = [] + self.bw_select_list = [] + self.global_item_list = [] + self.global_metadata_file_list = [] + self.global_bitstream_processing = None + self.flat_mode_list = None + self.filter = None + + self.__audioextensions = [".wav", ".au"] + + @property + def filter(self): + return self.__filter + + @filter.setter + def filter(self, value): + self.__filter = value + + def test_for_config_file(self, test_dir, file_name): + + self.logger.debug( + "Looking for file {}".format(os.path.join(test_dir, file_name)) + ) + if os.path.exists(os.path.join(test_dir, file_name)): + self.logger.debug("Found file {}".format(os.path.join(test_dir, file_name))) + return os.path.join(test_dir, file_name) + + self.logger.debug( + "Looking for file {}".format( + os.path.join(constants.SCRIPTS_CONFIGS_DIR, file_name) + ) + ) + if os.path.exists(os.path.join(constants.SCRIPTS_CONFIGS_DIR, file_name)): + self.logger.debug( + "Found file {}".format( + os.path.join(constants.SCRIPTS_CONFIGS_DIR, file_name) + ) + ) + return os.path.join(constants.SCRIPTS_CONFIGS_DIR, file_name) + + self.logger.debug( + "File {} not found in either {} or {}".format( + file_name, test_dir, constants.SCRIPTS_CONFIGS_DIR + ) + ) + return None + + def set_config(self, config): + """ + + Parameters + ---------- + config : + + + Returns + ------- + + """ + fp = open("".join([config, ".json"]), "r") + self.config = json.load(fp) + fp.close() + self.in_dirs = self.config["inpaths"] + + def set_in_dirs(self, in_dir_dict): + """ + + Parameters + ---------- + in_dir_dict : + + + Returns + ------- + + """ + for in_conf in in_dir_dict: + if in_conf in self.in_dir_dict: + self.in_dir_dict[in_conf] = in_dir_dict[in_conf] + + def set_format_select_list(self, select_list): + """ + + Parameters + ---------- + select_list : + + + Returns + ------- + + """ + self.format_select_list = select_list + + def set_mode_select_list(self, select_list): + """ + + Parameters + ---------- + select_list : + + + Returns + ------- + + """ + self.mode_select_list = select_list + + def set_bw_select_list(self, bw_select_list): + """ + + Parameters + ---------- + bw_select_list : + + + Returns + ------- + + """ + self.bw_select_list = bw_select_list + + def add_format_select_list(self, select_list): + """ + + Parameters + ---------- + select_list : + + + Returns + ------- + + """ + for ivas_format in select_list: + if ivas_format not in self.format_select_list: + self.format_select_list.append(ivas_format) + + def add_mode_select_list(self, select_list): + """ + + Parameters + ---------- + select_list : + + + Returns + ------- + + """ + for mode in select_list: + if mode in self.mode_select_list: + for out_conf in select_list[mode]: + if out_conf not in self.mode_select_list[mode]: + self.mode_select_list[mode].extend(out_conf) + else: + self.mode_select_list.update({mode: select_list[mode]}) + + def add_bw_select_list(self, select_list): + """ + + Parameters + ---------- + select_list : + + + Returns + ------- + + """ + for bw in select_list: + if bw not in self.bw_select_list: + self.bw_select_list.append(bw.upper()) + + def collect_mode_configs(self): + """ """ + run_dict = {} + self.logger.info("Selecting formats...") + for ivas_format in self.all_formats: + if self.format_select_list: + if ivas_format not in self.format_select_list: + continue + self.logger.info("Add all modes of format {}".format(ivas_format)) + for br_conf in self.all_formats[ivas_format]: + run_dict.update( + { + br_conf: { + "cmd": self.all_formats[ivas_format][br_conf], + "item_list": [], + "ivas_format": ivas_format, + } + } + ) + + if self.mode_select_list: + self.logger.info("Selecting modes...") + tmp_dict = {} + for selected_mode in self.mode_select_list: + if selected_mode in run_dict: + mode_param = run_dict[selected_mode].copy() + output_confs = self.mode_select_list[selected_mode] + if output_confs: + if isinstance(output_confs, list): + if output_confs[0] != all: + mode_param["cmd"]["dec"] = {} + for output_conf in output_confs: + if ( + output_conf + in run_dict[selected_mode]["cmd"]["dec"] + ): + mode_param["cmd"]["dec"].update( + { + output_conf: run_dict[selected_mode][ + "cmd" + ]["dec"][output_conf] + } + ) + else: + mode_param["cmd"]["dec"].update( + {output_conf: []} + ) + elif isinstance(output_confs, dict): + mode_param["cmd"]["dec"] = output_confs + tmp_dict.update({selected_mode: mode_param}) + self.logger.info( + "Selected mode {} with output configs {}".format( + selected_mode, str(output_confs) + ) + ) + run_dict = tmp_dict + + if self.bw_select_list: + tmp_dict = {} + self.logger.info("Selecting band width...") + for selected_mode in run_dict: + if run_dict[selected_mode]["cmd"]["bw"].upper() in self.bw_select_list: + mode_param = run_dict[selected_mode].copy() + self.logger.info("Selected mode {}".format(selected_mode)) + tmp_dict.update({selected_mode: mode_param}) + run_dict = tmp_dict + + if self.filter is not None: + tmp_dict = {} + self.logger.info("Applying filter {}".format(self.filter.pattern)) + for selected_mode in run_dict: + if self.filter.search(selected_mode): + mode_param = run_dict[selected_mode].copy() + self.logger.info("Selected mode {}".format(selected_mode)) + tmp_dict.update({selected_mode: mode_param}) + run_dict = tmp_dict + + if self.global_bitstream_processing is not None: + for mode in run_dict: + if "bitstream_processing" not in run_dict[mode]["cmd"]: + run_dict[mode]["cmd"][ + "bitstream_processing" + ] = self.global_bitstream_processing + else: + self.logger.warning( + "Will not add a global bitstream processing over a already defined one!" + ) + + self.flat_mode_list = run_dict + + def mode_add_items(self): + """ """ + + for mode in self.flat_mode_list: + self.logger.info("Adding items to mode {}...".format(mode)) + in_config = self.flat_mode_list[mode]["cmd"]["in_config"] + + # hack to handle group B SBA bitrates + if in_config == "SBA" and any( + str(br) in mode for br in constants.SPAR_BITRATES + ): + # group B SBA takes FOA only + in_dir = self.in_dirs["FOA"] + else: + in_dir = self.in_dirs[in_config] + in_files = [] + + if self.global_item_list: + self.mode_add_item_list(mode, deepcopy(self.global_item_list)) + else: + if os.path.isdir(in_dir): + file_list = os.listdir(in_dir) + for fd in file_list: + if os.path.isfile(os.path.join(in_dir, fd)): + if os.path.splitext(fd)[1] in self.__audioextensions: + in_files.append(os.path.join(in_dir, fd)) + elif os.path.isfile(in_dir): # ensure compatibility with runEvsCodec.pl + in_files = [in_dir] + for in_file in in_files: + self.logger.info("Added item {} to mode {}".format(in_file, mode)) + self.flat_mode_list[mode]["item_list"] = in_files + + def mode_add_item_list(self, mode, item_list): + if mode in self.flat_mode_list: + in_config = self.flat_mode_list[mode]["cmd"]["in_config"] + in_dir = self.in_dirs[in_config] + for item in item_list: + # check if item exists, check if we have explicit metadata + if isinstance(item, list): + infile = item.pop(0) + else: + infile = item + item = [] + if not os.path.exists(infile): + infile = os.path.join(in_dir, infile) + if not os.path.exists(infile): + self.logger.console( + "Item {} does not exist!".format(infile), logging.WARNING + ) + continue + if item: + infile = [infile] + for md in item: + if not os.path.exists(md): + md = os.path.join(in_dir, md) + if not os.path.exists(md): + self.logger.console( + "Metadata file {} does not exist!".format(md), + logging.WARNING, + ) + continue + infile.extend([md]) + self.flat_mode_list[mode]["item_list"].extend([infile]) + self.logger.info("Added item {} to mode {}".format(infile, mode)) + + def set_flat_mode_list(self, flat_mode_list): + self.flat_mode_list = flat_mode_list + + def set_global_item_list(self, global_item_list): + self.global_item_list = [os.path.abspath(f) for f in global_item_list] + + def set_global_metadata_file_list(self, metadata_file_list): + self.global_metadata_file_list = metadata_file_list + + def add_format_output_config(self, ivas_format, oc_dict): + """ + + Parameters + ---------- + ivas_format : + + oc_list : + + + Returns + ------- + + """ + if ivas_format in self.all_formats: + for br in self.all_formats[ivas_format]: + for oc in oc_dict: + if oc not in self.all_formats[ivas_format][br]["dec"]: + self.all_formats[ivas_format][br]["dec"].update( + {oc: oc_dict[oc]} + ) + + def set_format_output_config(self, ivas_format, oc_dict): + """ + + Parameters + ---------- + ivas_format : + + oc_list : + + + Returns + ------- + + """ + if ivas_format in self.all_formats: + for mode in self.all_formats[ivas_format]: + self.all_formats[ivas_format][mode]["dec"] = oc_dict + + @staticmethod + def get_bs_processing_suffices(bs_processing_dict): + if bs_processing_dict: + return "_".join([x[-1] for x in bs_processing_dict["proc_chain"]]) + else: + return None + + def set_global_bitstream_processing(self, bs_processing_dict): + self.global_bitstream_processing = bs_processing_dict diff --git a/scripts/pyivastest/IvasModeRunner.py b/scripts/pyivastest/IvasModeRunner.py new file mode 100644 index 0000000000..3808eace50 --- /dev/null +++ b/scripts/pyivastest/IvasModeRunner.py @@ -0,0 +1,1787 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os +import subprocess +import threading +import concurrent.futures +import time +import logging +import logging.handlers +import platform +import traceback +from copy import deepcopy +import re +import json + +from pyivastest import IvasModeCollector +from pyivastest import constants +from pyaudio3dtools.spatialaudioformat import Format as spformat +import pyaudio3dtools.audiofile as af +BW_TO_SR = {"nb": 8, "wb": 16, "swb": 32, "fb": 48} +IN_CONFIG_TO_COPY_AUDIO = { + "SBA": [], + "HOA3": [], + "MASA": [], + "ISM": [], + "MONO": ["--chanA=A"], + "STEREO": ["--chanA=A", "--chanB=B"], + "5_1": [ + "--chanA=A", + "--chanB=B", + "--chanC=C", + "--chanD=D", + "--chanE=E", + "--chanF=F", + ], + "7_1": [ + "--chanA=A", + "--chanB=B", + "--chanC=C", + "--chanD=D", + "--chanE=E", + "--chanF=F", + "--chanG=G", + "--chanH=H", + ], + "5_1_2": [ + "--chanA=A", + "--chanB=B", + "--chanC=C", + "--chanD=D", + "--chanE=E", + "--chanF=F", + "--chanG=G", + "--chanH=H", + ], + "5_1_4": [ + "--chanA=A", + "--chanB=B", + "--chanC=C", + "--chanD=D", + "--chanE=E", + "--chanF=F", + "--chanG=G", + "--chanH=H", + "--chanI=I", + "--chanJ=J", + ], + "7_1_4": [ + "--chanA=A", + "--chanB=B", + "--chanC=C", + "--chanD=D", + "--chanE=E", + "--chanF=F", + "--chanG=G", + "--chanH=H", + "--chanI=I", + "--chanJ=J", + "--chanK=K", + "--chanL=L", + ], +} + + +class Error(Exception): + pass + + +class BinaryNotFoundError(Error): + def __init__(self, message): + self.message = message + + +class IvasModeRunner(IvasModeCollector.IvasModeCollector): + """ """ + + def __init__( + self, + dir_name=".", + bin_suffix="", + test_tool="", + silent=False, + site_config="", + sample_rate_enc_in=None, + sample_rate_dec_out=None, + formats_fname="", + in_dir_dict={}, + encoder_binary="", + decoder_binary="", + max_workers=7, + formats_dict={}, + flat_output_structure=False, + pcm_out=False, + enable_logging=False, + console_logger_level="", + logger_name="IvasBaseClass", + log_level=logging.DEBUG, + ): + + super().__init__( + site_config=site_config, + formats_fname=formats_fname, + in_dir_dict=in_dir_dict, + formats_dict=formats_dict, + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + ) + self.lock = threading.Lock() + self.dec_queue = None + self.enc_queue = None + self.bs_processing_queue = None + self.stats = None + self.results = None + self.sample_rate_enc_in = sample_rate_enc_in + self.sample_rate_dec_out = sample_rate_dec_out + self.dir_name = os.path.abspath(dir_name) + if encoder_binary != "": + self.encoder = os.path.abspath(encoder_binary) + else: + self.encoder = "" + if decoder_binary != "": + self.decoder = os.path.abspath(decoder_binary) + else: + self.decoder = "" + self.bin_suffix = bin_suffix + self.test_tool = test_tool + self.silent = silent + self.failed_threads = None + self.max_workers = max_workers + self.flat_output_structure = flat_output_structure + self.limit_duration = False + self.max_duration = 0.0 + self.encoder_cmdline_options = [] + self.decoder_cmdline_options = [] + self.run_encoder = True + self.run_decoder = True + self.multiple_res_dir = False + self.switch_paths_base_dir = constants.SW_FILES_BASE_DIR + if "swPathDir" in self.config: + self.switch_paths_base_dir = self.config["swPathDir"] + self.pcm_out = pcm_out + self.cwd = os.getcwd() + self.pcm_info = {} + self.failed_modes = {"enc": list(), "dec": dict()} + + @property + def pcm_info(self): + return self.__pcm_info + + @pcm_info.setter + def pcm_info(self, value: dict): + if isinstance(value, dict) or value is None: + self.__pcm_info = value + else: + raise TypeError("pcm_info must be a dictionary or None!") + + @property + def multiple_res_dir(self): + return self.__multiple_res_dir + + @multiple_res_dir.setter + def multiple_res_dir(self, value: bool): + if isinstance(value, bool): + self.__multiple_res_dir = value + else: + raise TypeError("multiple_res_dir must be a bool value!") + + def show_progress(self): + """ """ + if self.stats["num_enc_errors"] == 0: + enc_err_str = "{}".format(str(self.stats["num_enc_errors"])) + else: + enc_err_str = "\x1b[31m{}\x1b[0m".format(str(self.stats["num_enc_errors"])) + if self.stats["num_dec_errors"] == 0: + dec_err_str = "{}".format(str(self.stats["num_dec_errors"])) + else: + dec_err_str = "\x1b[31m{}\x1b[0m".format(str(self.stats["num_dec_errors"])) + num_errors = self.stats["num_enc_errors"] + self.stats["num_dec_errors"] + if num_errors == 0: + total_err_str = "no errors" + else: + if num_errors == 1: + total_err_str = "\x1b[31m{} Error\x1b[0m".format(str(num_errors)) + else: + total_err_str = "\x1b[31m{} Errors\x1b[0m".format(str(num_errors)) + stat_format_str = "status: {}/{} ({} running), encs: {}/{}/{} ({} running), decs: {}/{}/{} ({} running), {} " + line = stat_format_str.format( + str(self.stats["num_modes_finished"]), + str(self.stats["num_modes"]), + str(self.stats["num_modes_running"]), + str(self.stats["num_encs_finished"]), + str(self.stats["num_encs_total"]), + enc_err_str, + str(self.stats["num_encs_running"]), + str(self.stats["num_decs_finished"]), + str(self.stats["num_decs_total"]), + dec_err_str, + str(self.stats["num_decs_running"]), + total_err_str, + ) + self.logger.progress(line) + + def show_final_stats(self): + """ """ + if self.stats["num_enc_errors"] == 0: + enc_err_str = "{}".format(str(self.stats["num_enc_errors"])) + else: + enc_err_str = "\x1b[31m{}\x1b[0m".format(str(self.stats["num_enc_errors"])) + if self.stats["num_dec_errors"] == 0: + dec_err_str = "{}".format(str(self.stats["num_dec_errors"])) + else: + dec_err_str = "\x1b[31m{}\x1b[0m".format(str(self.stats["num_dec_errors"])) + num_errors = self.stats["num_enc_errors"] + self.stats["num_dec_errors"] + if num_errors == 0: + total_err_str = "no errors" + else: + if num_errors == 1: + total_err_str = "\x1b[31m{} Error\x1b[0m".format(str(num_errors)) + else: + total_err_str = "\x1b[31m{} Errors\x1b[0m".format(str(num_errors)) + line = "status: {}/{}, encs: {}/{}/{}, decs: {}/{}/{}, {}".format( + str(self.stats["num_modes_finished"]), + str(self.stats["num_modes"]), + str(self.stats["num_encs_finished"]), + str(self.stats["num_encs_total"]), + enc_err_str, + str(self.stats["num_decs_finished"]), + str(self.stats["num_decs_total"]), + dec_err_str, + total_err_str, + ) + self.logger.console("Finished running", logging.INFO) + self.logger.console(line, logging.INFO) + + def ivas_dec_thread(self, config): + """ + + Parameters + ---------- + config : + + + Returns + ------- + + """ + + self.lock.acquire() + if self.stats: + if not self.run_encoder: + if config["config"]["num_dec_remaining"] == config["config"]["num_dec"]: + self.stats["num_modes_running"] += 1 + self.stats["num_decs_running"] += 1 + config["config"]["num_dec_remaining"] -= 1 + self.show_progress() + self.lock.release() + enc_dec_cmd = config["config"]["cmd"] + item_base_name = os.path.splitext(os.path.basename(config["enc_file_name"]))[0] + output_config = config["out_config"] + out_ext = ".wav" + if self.pcm_out is True: + out_ext = ".pcm" + + dec_log_name = self.get_dec_log_file_name(self.dir_name,item_base_name,output_config) + dec_log = open(dec_log_name, "w") + if config["enc_returncode"] == 0: + dec_file_name = self.get_dec_file_name(self.dir_name, item_base_name, output_config, out_ext) + if self.sample_rate_dec_out: + out_sr = self.sample_rate_dec_out + else: + if ( + isinstance(config["dec_options"], dict) + and "fs_out" in config["dec_options"] + ): + out_sr = config["dec_options"]["fs_out"] + else: + out_sr = BW_TO_SR[config["config"]["cmd"]["bw"]] + dec_options = [] + if isinstance(config["dec_options"], dict): + if "dec_options" in config["dec_options"]: + dec_options.extend(config["dec_options"]["dec_options"]) + else: + dec_options.extend(config["dec_options"]) + dec_options.extend(self.decoder_cmdline_options) + + if self.multiple_res_dir is True: + dec_options.extend(["-info", os.path.basename(dec_file_name)]) + + # handle SOFA file passing for group B binaural renderer + try: + br_kbps = int(config["config"]["cmd"]["bitrate"]) // 1000 + except ValueError: + # this handles the case when a bitrate switching file is given + # for now do nothing here + br_kbps = -1 + except Exception as e: + self.logger.error("Exception in ivas_dec_thread(): " + str(e)) + return + + if not config["mono"]: + dec_options.extend([output_config]) + dec_options = [ + x.format(dec_file_name=dec_file_name) if "{dec_file_name}" in x else x + for x in dec_options + if x != [] + ] + enc_file_name = config["enc_file_name"] + self.logger.info("Decoding {} to {}".format(enc_file_name, dec_file_name)) + if self.test_tool != "": + dec_cmd = ( + self.test_tool + + [self.decoder] + + dec_options + + [str(out_sr)] + + [enc_file_name, dec_file_name] + ) + else: + dec_cmd = ( + [self.decoder] + + dec_options + + [str(out_sr)] + + [enc_file_name, dec_file_name] + ) + + cur_dec_result = subprocess.run(dec_cmd, capture_output=True, text=True) + dec_log.write(" ".join(dec_cmd)) + dec_log.write(cur_dec_result.stderr) + dec_log.write(cur_dec_result.stdout) + if cur_dec_result.returncode != 0: + self.logger.error( + "Decoding {} to {} failed!".format(enc_file_name, dec_file_name) + ) + self.lock.acquire() + if self.stats: + self.stats["num_dec_errors"] += 1 + self.show_progress() + self.results.append( + [ + "Decoding failed to {} for {}".format( + output_config, enc_file_name + ), + config["ivas_format"], + enc_dec_cmd["table_name"], + dec_log_name, + ] + ) + + # get mode from enc_file_name + file_base_no_ext = os.path.basename(enc_file_name)[ + :-4 + ] # NOTE: this assumes that all encoded files still end in ".192" + in_config = config["config"]["cmd"]["in_config"] + mode = file_base_no_ext[file_base_no_ext.rfind(in_config) :] + if output_config in self.failed_modes["dec"]: + self.failed_modes["dec"][output_config].append(mode) + else: + self.failed_modes["dec"][output_config] = [mode] + self.lock.release() + else: + self.logger.info( + "Decoding successful for {} to {}".format( + enc_file_name, dec_file_name + ) + ) + else: + self.logger.error( + "No decoding of {} to {}, encoding failed already".format( + config["enc_file_name"], output_config + ) + ) + dec_log.write( + "No decoding of {} to {}, encoding failed already".format( + config["enc_file_name"], output_config + ) + ) + self.lock.acquire() + + config["config"]["num_dec_done"] += 1 + if self.stats: + self.stats["num_decs_finished"] += 1 + self.stats["num_decs_running"] -= 1 + if config["enc_returncode"] != 0: + self.stats["num_dec_errors"] += 1 + if config["config"]["num_dec_done"] == config["config"]["num_dec"]: + self.stats["num_modes_running"] -= 1 + self.stats["num_modes_finished"] += 1 + self.show_progress() + + self.lock.release() + + def clean_pcm_directory(self): + """ + Remove .LOCK files and corresponding intermediate files from the pcm directory + + + """ + pcm_dir = os.path.join(self.dir_name, "pcm") + pcm_dir_files = os.listdir(pcm_dir) + lock_files = [ + os.path.splitext(x)[0] + for x in pcm_dir_files + if os.path.splitext(x)[1] == ".LOCK" + ] + for lock_file in lock_files: + files_to_clean = [ + os.path.join(pcm_dir, x) for x in pcm_dir_files if lock_file in x + ] + [os.remove(x) for x in files_to_clean] + + def ivas_enc_thread(self, mode, config): + """ + + Parameters + ---------- + mode : + + config : + + + Returns + ------- + + """ + error = 0 + enc_dec_cmd = deepcopy(config["cmd"]) + # get next item + config["lock"].acquire() + self.lock.acquire() + if self.stats: + if config["num_enc_remaining"] == config["num_enc"]: + self.stats["num_modes_running"] += 1 + self.show_progress() + if config["num_enc_remaining"]: + in_file_name = config["item_list"].pop() + config["num_enc_remaining"] -= 1 + else: + config["lock"].release() + return + self.lock.release() + + metadata_file_names = [] + if isinstance(in_file_name, list): + metadata_file_names = in_file_name[1:] + in_file_name = in_file_name[0] + elif self.global_metadata_file_list: + metadata_file_names = deepcopy(self.global_metadata_file_list) + self.logger.info("Encoding Mode {} input file {}".format(mode, in_file_name)) + config["lock"].release() + self.lock.acquire() + if self.stats: + self.stats["num_encs_running"] += 1 + self.show_progress() + self.lock.release() + pcm_name_lock = None + item_base_name = os.path.splitext(os.path.basename(in_file_name))[0] + enc_file_name = os.path.join( + self.dir_name, "enc", "".join([item_base_name, "_", mode, ".192"]) + ) + enc_log_name_tmp = "".join( + [item_base_name, "_", mode, ".enc", constants.LOG_FILE_EXT] + ) + enc_log_name = os.path.join(self.dir_name, "logs", enc_log_name_tmp) + in_format_dict = None + in_format = config["cmd"]["in_config"] + if in_format[0:4] == "MASA": + in_format = in_format[0:5] + try: + # prepare PCM # + in_dir = os.path.dirname(in_file_name) + if self.sample_rate_enc_in: + sample_rate_in = self.sample_rate_enc_in + else: + sample_rate_in = BW_TO_SR[config["cmd"]["bw"]] + if ( + os.path.splitext(os.path.basename(in_file_name))[1] + in self._IvasModeCollector__audioextensions + ): + + # use this local variable instead of self.limit_duration to be able to skip the cutting + # of files for individual files if necessary (e.g. when given length is > file length) + do_limit_duration = False + if self.limit_duration: + do_limit_duration = True + pcm_base_name = "".join( + [ + item_base_name, + "_", + str(sample_rate_in), + "_", + config["cmd"]["in_config"].upper(), + "_L{}s".format("_".join(str(self.max_duration).split("."))), + ".pcm", + ] + ) + else: + pcm_base_name = "".join( + [ + item_base_name, + "_", + str(sample_rate_in), + "_", + config["cmd"]["in_config"].upper(), + ".pcm", + ] + ) + pcm_name = os.path.join(self.dir_name, "pcm", pcm_base_name) + pcm_name_lock = "".join([pcm_name, ".LOCK"]) + pcm_info_file = f"{pcm_name}.json" + self.lock.acquire() + + if not os.path.exists(pcm_name_lock): + if not os.path.exists(pcm_name): + # create the lock + fp = open(pcm_name_lock, "w") + fp.close() + self.lock.release() + self.logger.info( + "Creating input pcm for item {} at sample rate {}: {}".format( + item_base_name, sample_rate_in, pcm_name + ) + ) + + pcm_log_name_tmp = "".join( + [pcm_base_name, constants.LOG_FILE_EXT] + ) + pcm_log_name = os.path.join( + self.dir_name, "logs", pcm_log_name_tmp + ) + pcm_log = open(pcm_log_name, "w") + + pcm_name_res_tmp = pcm_name + ".res.wav" + pcm_name_cpy_tmp = pcm_name + ".cpy.wav" + in_file_name_transformed = self.transform_path(in_file_name) + pcm_name_res_transformed = self.transform_path(pcm_name_res_tmp) + pcm_name_cpy_transformed = self.transform_path(pcm_name_cpy_tmp) + + # check if the given length with -U is longer than the file itself and avoid cutting then + if do_limit_duration: + in_file_info = af.get_wav_file_info( + in_file_name_transformed + ) + cut_len_samples = int( + float(self.max_duration) * in_file_info["fs"] + ) + + get_in_len_cmd = [ + os.path.join(self.config["afspPath"], "InfoAudio"), + in_file_name_transformed, + ] + info_audio = subprocess.check_output(get_in_len_cmd).decode( + "utf8" + ) + + # if there is a problem with parsing the length, stick with + # the old behaviour, hence the +1 + in_len = cut_len_samples + 1 + search_for = "No. frames: " + for line in info_audio.splitlines(): + if line.startswith(search_for): + try: + in_len = int( + line.strip().replace(search_for, "") + ) + except: + self.logger.console( + "Problem with parsing length from InfoAudio", + logging.ERROR, + ) + break + + do_limit_duration = cut_len_samples < in_len + + if do_limit_duration: + # TODO: is this + 8000 still needed? + out_len = int( + float(self.max_duration) + * float(int(in_file_info["fs"])) + + 8000 + ) + limit_cpy_cmd = [ + os.path.join(self.config["afspPath"], "CopyAudio"), + "-l", + "0:{}".format(out_len), + in_file_name_transformed, + pcm_name_cpy_transformed, + ] + pcm_log.write(" ".join(limit_cpy_cmd)) + limit_cpy_return_code = subprocess.run( + limit_cpy_cmd, capture_output=True, text=True + ) + if limit_cpy_return_code.returncode: + self.logger.console( + "Problem with time limiting copying {} before resampling!".format( + in_file_name + ), + logging.ERROR, + ) + pcm_log.write(limit_cpy_return_code.stderr) + pcm_log.write(limit_cpy_return_code.stdout) + resamp_cmd = [ + os.path.join(self.config["afspPath"], "ResampAudio"), + "--srate=" + str(int(sample_rate_in) * 1000), + pcm_name_cpy_transformed, + pcm_name_res_transformed, + ] + else: + resamp_cmd = [ + os.path.join(self.config["afspPath"], "ResampAudio"), + "--srate=" + str(int(sample_rate_in) * 1000), + in_file_name_transformed, + pcm_name_res_transformed, + ] + + pcm_log.write(" ".join(resamp_cmd)) + resamp_return_code = subprocess.run( + resamp_cmd, capture_output=True, text=True + ) + if resamp_return_code.returncode: + self.logger.console( + "Problem with resampling {} before encoding!".format( + in_file_name + ), + logging.ERROR, + ) + pcm_log.write(resamp_return_code.stderr) + pcm_log.write(resamp_return_code.stdout) + # get number of channels from ResampAudio output + if config["cmd"]["in_config"] == "SBA": + nchannels = 0 + for line in resamp_return_code.stdout.split("\n"): + if re.findall("Number of channels", line): + nchannels = int(line.split()[3]) + in_format = spformat.detect_format(nchannels) + break + + # save in config as json file + in_format_dict = spformat.get_format_dict(in_format) + with open(pcm_info_file, "w") as pcmifp: + json.dump(in_format_dict, pcmifp) + + self.pcm_info.update({pcm_name: in_format_dict}) + + in_config = config["cmd"]["in_config"].upper() + chn_arg = [] + if in_config in IN_CONFIG_TO_COPY_AUDIO: + chn_arg = IN_CONFIG_TO_COPY_AUDIO[ + config["cmd"]["in_config"].upper() + ] + pcm_name_transformed = self.transform_path(pcm_name) + + limit_cmd = [] + + if do_limit_duration: + # avoid padding with zeros at the end when given length is bigger than the initial file length + out_len = int( + float(self.max_duration) + * float(int(sample_rate_in) * 1000) + ) + limit_cmd = ["-l", "0:{}".format(out_len)] + + cpy_cmd = ( + [ + os.path.join(self.config["afspPath"], "CopyAudio"), + "-F", + "noheader", + "-D", + "integer16", + ] + + limit_cmd + + chn_arg + + [pcm_name_res_transformed, pcm_name_transformed] + ) + pcm_log.write(" ".join(cpy_cmd)) + cpy_return_code = subprocess.run( + list(filter(None, cpy_cmd)), capture_output=True, text=True + ) + if cpy_return_code.returncode: + self.logger.console( + "Problem with copying to PCM {} before encoding!".format( + pcm_name + ), + logging.ERROR, + ) + + pcm_log.write(cpy_return_code.stderr) + pcm_log.write(cpy_return_code.stdout) + pcm_log.flush() + pcm_log.close() + # remove file lock + self.lock.acquire() + os.remove(pcm_name_lock) + os.remove(pcm_name_res_tmp) + if do_limit_duration: + os.remove(pcm_name_cpy_tmp) + self.logger.info( + "PCM file {} successfully created!".format(pcm_name) + ) + self.lock.release() + else: + self.lock.release() + else: + # wait for pcm to be ready + self.lock.release() + not_ready = 1 + while not_ready: + time.sleep(1) + self.lock.acquire() + if not os.path.exists(pcm_name_lock): + not_ready = 0 + self.lock.release() + + else: + pcm_name = in_file_name + pcm_info_file = f"{pcm_name}.json" + + # get input format dictionary for the input file + self.lock.acquire() + if pcm_name not in self.pcm_info: + if os.path.exists(pcm_info_file): + with open(pcm_info_file, "r") as pcmifp: + in_format_dict = json.load(pcmifp) + + else: + # add in_format_dict according to the in_format of the mode... + if in_format == "SBA": + # use HOA3 as default for SBA if nothing more is known... + in_format = "HOA3" + in_format_dict = spformat.get_format_dict(in_format) + self.pcm_info.update({pcm_name: in_format_dict}) + self.lock.release() + + # build the encoder commandline + enc_options = enc_dec_cmd["encmodeoption"] + + # metadata handling + if enc_dec_cmd["nummetadata"] > 0: + + for cur_metadata_idx in range(enc_dec_cmd["nummetadata"]): + fallback = False + if len(metadata_file_names) == 1: + # try for a filename with format patterns + metadata_file_name = metadata_file_names[0] + if metadata_file_name != "NULL": + metadata_file_name = str.format( + metadata_file_name, + item=item_base_name, + mdi=cur_metadata_idx, + ) + elif len(metadata_file_names) >= (cur_metadata_idx + 1): + metadata_file_name = str.format( + metadata_file_names[cur_metadata_idx], + item=item_base_name, + mdi=cur_metadata_idx, + ) + else: + fallback = True + + if not fallback and not os.path.exists(metadata_file_name): + # maybe we need to attach the indir + mdf_for_log = metadata_file_name + metadata_file_name = os.path.join(in_dir, metadata_file_name) + if not os.path.exists(metadata_file_name): + self.logger.warning( + "Given metadata file {} for item {} does not exists, trying default pattern!".format( + mdf_for_log, enc_file_name + ) + ) + fallback = True + + if fallback: + + if len(enc_dec_cmd["metadatafilenames"]) == 1: + # try for a filename with format patterns + metadata_file_name = enc_dec_cmd["metadatafilenames"][0] + if metadata_file_name != "NULL": + metadata_file_name = str.format( + metadata_file_name, + item=item_base_name, + mdi=cur_metadata_idx + 1, + ) + elif len(enc_dec_cmd["metadatafilenames"]) >= ( + cur_metadata_idx + 1 + ): + metadata_file_name = enc_dec_cmd["metadatafilenames"][ + cur_metadata_idx + ] + if metadata_file_name != "NULL": + metadata_file_name = str.format( + metadata_file_name, + item=item_base_name, + mdi=cur_metadata_idx, + ) + else: + self.logger.warning( + "Falling back to NULL for metadata file {} of item {}!".format( + cur_metadata_idx, enc_file_name + ) + ) + + metadata_file_name = "NULL" + + if metadata_file_name != "NULL" and not os.path.exists( + metadata_file_name + ): + # maybe we need to attach the indir + metadata_file_name = os.path.join( + in_dir, metadata_file_name + ) + if not os.path.exists(metadata_file_name): + self.logger.warning( + "Falling back to NULL for metadata file {} of item {}!".format( + cur_metadata_idx, enc_file_name + ) + ) + metadata_file_name = "NULL" + + enc_options.append(metadata_file_name) + + enc_options.extend(enc_dec_cmd["encoptions"]) + enc_options.extend(self.encoder_cmdline_options) + + if self.multiple_res_dir is True: + enc_options.extend(["-info"]) + enc_options.extend([os.path.basename(enc_file_name)]) + + bitrate = enc_dec_cmd["bitrate"] + + # inject bit rate switch file path + if isinstance(bitrate, str) and "{sw_files_path}" in bitrate: + bitrate = os.path.realpath( + bitrate.format(sw_files_path=self.switch_paths_base_dir) + ) + + if self.test_tool != "": + enc_cmd = ( + self.test_tool + + [self.encoder] + + enc_options + + [str(bitrate), str(sample_rate_in), pcm_name, enc_file_name] + ) + else: + enc_cmd = ( + [self.encoder] + + enc_options + + [str(bitrate), str(sample_rate_in), pcm_name, enc_file_name] + ) + # inject the input file's ambisonic order + if pcm_name in self.pcm_info: + enc_cmd = [ + x.format(ambi_order=self.pcm_info[pcm_name]["ambi_order"]) + if "{ambi_order}" in x + else x + for x in enc_cmd + ] + + enc_log = open(enc_log_name, "w") + enc_log.write(" ".join(enc_cmd)) + enc_result = subprocess.run(enc_cmd, capture_output=True, text=True) + error = enc_result.returncode + enc_log.write(enc_result.stderr) + enc_log.write(enc_result.stdout) + + if error == 0 and "bitstream_processing" in enc_dec_cmd: + bs_in_file = enc_file_name + proc_chain = deepcopy(enc_dec_cmd["bitstream_processing"]["proc_chain"]) + for processing in proc_chain: + suffix = processing.pop() + bs_out_file = ".".join( + ["_".join([os.path.splitext(bs_in_file)[0], suffix]), "192"] + ) + # process + proc_cmd = deepcopy(processing) + proc_cmd = [ + x.format(in_file=bs_in_file) if "{in_file}" in x else x + for x in proc_cmd + ] + proc_cmd = [ + x.format(out_file=bs_out_file) if "{out_file}" in x else x + for x in proc_cmd + ] + enc_log = open(enc_log_name, "a") + enc_log.write(" ".join(proc_cmd)) + proc_result = subprocess.run( + proc_cmd, capture_output=True, text=True + ) + enc_log.write(proc_result.stderr) + enc_log.write(proc_result.stdout) + error = proc_result.returncode + if error: + self.logger.error( + "Processing step {} for {} failed!".format( + suffix, enc_file_name + ) + ) + raise RuntimeError( + "Processing step {} for {} failed!".format( + suffix, enc_file_name + ) + ) + bs_in_file = bs_out_file + enc_file_name_dec = bs_out_file + else: + enc_file_name_dec = enc_file_name + + except Exception as exc: + # make sure we do not have a deadlock... + self.lock.acquire() + if pcm_name_lock: + + if os.path.exists(pcm_name_lock): + # something went wrong with PCM creation, so make sure all waiting threads can continue... + self.logger.error( + "Something went wrong with creating the PCM file {}".format( + pcm_name + ) + ) + os.remove(pcm_name_lock) + os.remove(pcm_name) + + self.logger.console( + "Exception when encoding item {}: {}".format(enc_file_name, str(exc)), + logging.ERROR, + ) + self.logger.console( + "Traceback: {}".format(traceback.format_tb(exc.__traceback__)), + logging.ERROR, + ) + self.lock.release() + enc_file_name_dec = enc_file_name + error = 1 + + self.lock.acquire() + if self.stats: + config["num_enc_done"] += 1 + if config["num_enc_done"] == config["num_enc"]: + self.enc_queue["num_modes_enc_done"] += 1 + if not self.run_decoder: + self.stats["num_modes_running"] -= 1 + self.stats["num_modes_finished"] -= 1 + if self.enc_queue["num_modes_enc"] == self.enc_queue["num_modes_enc_done"]: + self.dec_queue["all_encoded"] = True + self.stats["num_encs_finished"] += 1 + self.stats["num_encs_running"] -= 1 + self.show_progress() + self.lock.release() + + if error != 0: + self.lock.acquire() + if self.stats: + self.stats["num_enc_errors"] += 1 + self.show_progress() + self.results.append( + [ + "Encoding failed for {}".format(enc_file_name), + mode, + enc_dec_cmd["table_name"], + enc_log_name, + ] + ) + self.failed_modes["enc"].append(mode) + self.lock.release() + self.logger.error("Encoding failed for {}".format(enc_file_name)) + else: + self.logger.info("Encoding successful for {}".format(enc_file_name)) + + self.dec_queue["condition"].acquire() + # create the entry in the decoder queue + + for oc in enc_dec_cmd["dec"]: + dec_options = deepcopy(enc_dec_cmd["dec"][oc]) + if ( + "bitstream_processing" in enc_dec_cmd + and "dec_options" in enc_dec_cmd["bitstream_processing"] + ): + addl_dec_options = deepcopy( + enc_dec_cmd["bitstream_processing"]["dec_options"] + ) + if isinstance(dec_options, dict): + if "dec_options" in dec_options: + dec_options["dec_options"].append(addl_dec_options) + else: + dec_options["dec_options"] = addl_dec_options + else: + dec_options.append(addl_dec_options) + dec_config = { + "ivas_format": mode, + "config": config, + "enc_returncode": error, + "enc_file_name": enc_file_name_dec, + "out_config": oc, + "dec_options": dec_options, + "mono": enc_dec_cmd["mono"], + } + + self.dec_queue["dec_entries"].append(dec_config) + + self.dec_queue["condition"].notifyAll() + self.dec_queue["condition"].release() + + def get_modes_initial_statistics(self): + """ """ + self.stats = { + "num_modes": 0, + "num_modes_running": 0, + "num_modes_finished": 0, + "num_encs_total": 0, + "num_encs_running": 0, + "num_enc_errors": 0, + "num_encs_finished": 0, + "num_decs_total": 0, + "num_decs_running": 0, + "num_dec_errors": 0, + "num_decs_finished": 0, + } + ne = 0 + nd = 0 + nm = 0 + for mode in self.flat_mode_list: + nm += 1 + nel = len(self.flat_mode_list[mode]["item_list"]) + nd += len(self.flat_mode_list[mode]["cmd"]["dec"]) * nel + ne += nel + self.stats["num_modes"] = nm + if self.run_encoder: + self.stats["num_encs_total"] = ne + if self.run_decoder: + self.stats["num_decs_total"] = nd + + stat_format_str = "{} modes with {} encs and {} decs" + line = stat_format_str.format( + str(self.stats["num_modes"]), + str(self.stats["num_encs_total"]), + str(self.stats["num_decs_total"]), + ) + + self.logger.console("Start running {}".format(line), logging.INFO) + + def create_enc_queue(self): + """ """ + self.enc_queue = { + "num_modes_enc": 0, + "num_modes_enc_done": 0, + "ivas_formats": deepcopy(self.flat_mode_list), + } + nm = 0 + for config in self.enc_queue["ivas_formats"]: + thread_config = self.enc_queue["ivas_formats"][config] + ne = len(self.enc_queue["ivas_formats"][config]["item_list"]) + nd = len(self.enc_queue["ivas_formats"][config]["cmd"]["dec"]) * ne + nm += 1 + thread_config.update( + { + "running": False, + "num_enc": ne, + "num_enc_remaining": ne, + "num_enc_done": 0, + "num_dec": nd, + "num_dec_remaining": nd, + "num_dec_done": 0, + "lock": threading.Lock(), + } + ) + if self.global_bitstream_processing is not None: + if ( + "bitstream_processing" + not in self.enc_queue["ivas_formats"][config]["cmd"] + ): + self.enc_queue["ivas_formats"][config]["cmd"][ + "bistream_processing" + ] = self.global_bitstream_processing + else: + self.logger.warning( + "Will not add a global bitstream processing over an already defined one!" + ) + self.enc_queue["num_modes_enc"] = nm + + def ls_enc_files(self): + encdir = os.path.join(self.dir_name, "enc") + enc_files = os.listdir(encdir) + global_item_list = [] + if self.global_item_list: + global_item_list = list( + filter( + lambda x: x[0] if isinstance(x, list) else x, self.global_item_list + ) + ) + global_item_list = list( + map( + lambda x: os.path.splitext(os.path.basename(x))[0], global_item_list + ) + ) + for mode in self.flat_mode_list: + if self.flat_mode_list[mode]["item_list"]: + mode_item_list = list( + filter( + lambda x: x[0] if isinstance(x, list) else x, + self.flat_mode_list[mode]["item_list"], + ) + ) + mode_item_list = list( + map( + lambda x: os.path.splitext(os.path.basename(x))[0], + mode_item_list, + ) + ) + mode_enc_files_list = list( + filter(lambda x: x if mode in x else None, enc_files) + ) + mode_enc_items = set( + list( + map(lambda x: x.split("".join(["_", mode]))[0], mode_enc_files_list) + ) + ) + if global_item_list: + mode_enc_items = list( + filter( + lambda x: x if x in global_item_list else None, mode_enc_items + ) + ) + elif mode_item_list: + mode_enc_items = list( + filter(lambda x: x if x in mode_item_list else None, mode_enc_items) + ) + if "bitstream_processing" in self.flat_mode_list[mode]["cmd"]: + suffices = self.get_bs_processing_suffices( + self.flat_mode_list[mode]["cmd"]["bitstream_processing"] + ) + mode_enc_files_processed = [ + ( + os.path.join( + self.dir_name, + "enc", + ".".join(["_".join([x, mode, suffices]), "192"]), + ), + os.path.join( + self.dir_name, "enc", "".join([x, "_", mode, ".192"]) + ), + ) + for x in mode_enc_items + ] + enc_files_to_process = [ + x[1] for x in mode_enc_files_processed if not os.path.exists(x[0]) + ] + if enc_files_to_process != []: + if not self.bs_processing_queue: + self.bs_processing_queue = {"queue": [], "stats": {}} + self.bs_processing_queue["queue"].append( + { + "proc_chain": self.flat_mode_list[mode]["cmd"][ + "bitstream_processing" + ]["proc_chain"], + "item_list": enc_files_to_process, + } + ) + mode_enc_files = [x[0] for x in mode_enc_files_processed] + else: + mode_enc_files = [ + os.path.join(self.dir_name, "enc", "".join([x, "_", mode, ".192"])) + for x in mode_enc_items + ] + + self.flat_mode_list[mode]["item_list"] = mode_enc_files + + def create_missing_dec_mode_list(self): + decdir = os.path.join(self.dir_name, "dec") + # dec_files = os.listdir(decdir) + global_item_list = [] + missing_mode_flat_dict = {} + if self.global_item_list: + global_item_list = list( + filter( + lambda x: x[0] if isinstance(x, list) else x, self.global_item_list + ) + ) + global_item_list = list( + map( + lambda x: os.path.splitext(os.path.basename(x))[0], global_item_list + ) + ) + for mode in self.flat_mode_list: + files_missing = False + if self.flat_mode_list[mode]["item_list"]: + mode_item_list = list( + filter( + lambda x: x[0] if isinstance(x, list) else x, + self.flat_mode_list[mode]["item_list"], + ) + ) + mode_item_list = list( + map( + lambda x: os.path.splitext(os.path.basename(x))[0], + mode_item_list, + ) + ) + suffices = None + if "bitstream_processing" in self.flat_mode_list[mode]["cmd"]: + suffices = self.get_bs_processing_suffices( + self.flat_mode_list[mode]["cmd"]["bitstream_processing"] + ) + mode_enc_files = [ + [x, "_".join([y for y in [x, mode, suffices] if y is not None])] + for x in mode_item_list + ] + for oc in self.flat_mode_list[mode]["cmd"]["dec"]: + mode_dec_files = list( + map( + lambda x: [ + x[0], + os.path.join(decdir, ".".join([x[1], "dec", oc, "wav"])), + ], + mode_enc_files, + ) + ) + missing_dec_items = list( + filter( + None, + list( + map( + lambda x: mode_dec_files[x][0] + if not os.path.exists(mode_dec_files[x][1]) + else None, + range(len(mode_dec_files)), + ) + ), + ) + ) + if missing_dec_items: + if not files_missing: + mode_dict = deepcopy(self.flat_mode_list[mode]) + mode_dict["item_list"] = missing_dec_items + mode_dict["cmd"]["dec"] = { + oc: self.flat_mode_list[mode]["cmd"]["dec"][oc] + } + missing_mode_flat_dict.update({mode: mode_dict}) + else: + files_missing = True + missing_mode_flat_dict[mode]["item_list"] = list( + set( + missing_mode_flat_dict[mode]["item_list"].append( + missing_dec_items + ) + ) + ) + missing_mode_flat_dict[mode]["cmd"]["dec"].update( + {oc: self.flat_mode_list[mode]["cmd"]["dec"][oc]} + ) + return missing_mode_flat_dict + + def bs_processing_thread(self, bs_entry): + self.lock.acquire() + self.bs_processing_queue["stats"]["num_bs_running"] += 1 + line = "Bit stream processing: {}/{} ({} running)".format( + self.bs_processing_queue["stats"]["num_bs_done"], + self.bs_processing_queue["stats"]["num_bs_total"], + self.bs_processing_queue["stats"]["num_bs_running"], + ) + self.logger.progress(line) + enc_file_name = bs_entry["item_list"].pop() + self.lock.release() + bs_in_file = enc_file_name + proc_chain = deepcopy(bs_entry["proc_chain"]) + suffices = self.get_bs_processing_suffices(bs_entry) + enc_log_name = os.path.join( + self.dir_name, + "logs", + "".join( + [ + os.path.splitext(os.path.basename(enc_file_name))[0], + "_", + suffices, + ".proc", + constants.LOG_FILE_EXT, + ] + ), + ) + enc_log = open(enc_log_name, "w") + self.logger.info("Processing bit stream {}".format(enc_file_name)) + try: + for processing in proc_chain: + suffix = processing.pop() + bs_out_file = ".".join( + ["_".join([os.path.splitext(bs_in_file)[0], suffix]), "192"] + ) + # process + proc_cmd = deepcopy(processing) + proc_cmd = [ + x.format(in_file=bs_in_file) if "{in_file}" in x else x + for x in proc_cmd + ] + proc_cmd = [ + x.format(out_file=bs_out_file) if "{out_file}" in x else x + for x in proc_cmd + ] + + enc_log.write(" ".join(proc_cmd)) + proc_result = subprocess.run(proc_cmd, capture_output=True, text=True) + enc_log.write(proc_result.stderr) + enc_log.write(proc_result.stdout) + error = proc_result.returncode + if error: + self.logger.error( + "Processing step {} for {} failed!".format( + suffix, enc_file_name + ) + ) + raise RuntimeError( + "Processing step {} for {} failed!".format( + suffix, enc_file_name + ) + ) + bs_in_file = bs_out_file + except Exception as exc: + self.logger.error( + "Exception processing bitstream {}: {}".format(enc_file_name, str(exc)) + ) + self.logger.error("failed command: {}".format(" ".join(proc_cmd))) + self.logger.error( + "Traceback: {}".format(traceback.format_tb(exc.__traceback__)) + ) + self.lock.acquire() + self.bs_processing_queue["stats"]["num_bs_running"] -= 1 + self.bs_processing_queue["stats"]["num_bs_done"] += 1 + line = "Bit stream processing: {}/{} ({} running)".format( + self.bs_processing_queue["stats"]["num_bs_done"], + self.bs_processing_queue["stats"]["num_bs_total"], + self.bs_processing_queue["stats"]["num_bs_running"], + ) + self.logger.progress(line) + self.lock.release() + + def run_bs_processing_queue(self): + self.logger.console("Postprocessing of bit streams ...", logging.INFO) + n_bs = [] + for proc_chain in self.bs_processing_queue["queue"]: + n_bs.append(len(proc_chain["item_list"])) + + self.bs_processing_queue["stats"] = { + "num_bs_total": sum(n_bs), + "num_bs_running": 0, + "num_bs_done": 0, + } + line = "Processing {} bit stream files)".format( + self.bs_processing_queue["stats"]["num_bs_total"] + ) + self.logger.console(line, logging.INFO) + line = "Bit stream processing: {}/{} ({} running)".format( + self.bs_processing_queue["stats"]["num_bs_done"], + self.bs_processing_queue["stats"]["num_bs_total"], + self.bs_processing_queue["stats"]["num_bs_running"], + ) + self.logger.progress(line) + + threads_bs = [] + if self.max_workers == 1: + for k in range(len(self.bs_processing_queue["queue"])): + for i in range(n_bs[k]): + self.bs_processing_thread(self.bs_processing_queue["queue"][k]) + else: + with concurrent.futures.ThreadPoolExecutor( + max_workers=self.max_workers + ) as executor: + for k in range(len(self.bs_processing_queue["queue"])): + for i in range(n_bs[k]): + threads_bs.append( + executor.submit( + self.bs_processing_thread, + self.bs_processing_queue["queue"][k], + ) + ) + + self.logger.console("Done processing bit streams", logging.INFO) + line = "Bit stream processing: {}/{}".format( + self.bs_processing_queue["stats"]["num_bs_done"], + self.bs_processing_queue["stats"]["num_bs_total"], + ) + self.logger.console(line, logging.INFO) + + def create_dec_queue(self): + if not self.flat_mode_list: + self.collect_mode_configs() + self.ls_enc_files() + if self.bs_processing_queue: + self.run_bs_processing_queue() + self.dec_queue = { + "condition": threading.Condition(), + "dec_entries": [], + "all_encoded": True, + } + + for mode in self.flat_mode_list: + thread_config = self.flat_mode_list[mode] + nd = len(self.flat_mode_list[mode]["item_list"]) * len( + self.flat_mode_list[mode]["cmd"]["dec"] + ) + if nd == 0: + self.logger.warning("No item to decode for mode {}!".format(mode)) + thread_config.update( + { + "running": False, + "num_enc": 0, + "num_enc_remaining": 0, + "num_enc_done": 0, + "num_dec": nd, + "num_dec_remaining": nd, + "num_dec_done": 0, + "lock": threading.Lock(), + } + ) + for enc_file_name_dec in self.flat_mode_list[mode]["item_list"]: + for oc in self.flat_mode_list[mode]["cmd"]["dec"]: + dec_options = deepcopy(self.flat_mode_list[mode]["cmd"]["dec"][oc]) + if ( + "bitstream_processing" in self.flat_mode_list[mode]["cmd"] + and "dec_options" + in self.flat_mode_list[mode]["cmd"]["bitstream_processing"] + ): + addl_dec_options = deepcopy( + self.flat_mode_list[mode]["cmd"]["bitstream_processing"][ + "dec_options" + ] + ) + if isinstance(dec_options, dict): + if "dec_options" in dec_options: + dec_options["dec_options"].extend(addl_dec_options) + else: + dec_options["dec_options"] = addl_dec_options + else: + dec_options.extend(addl_dec_options) + dec_config = { + "ivas_format": mode, + "config": thread_config, + "enc_returncode": 0, + "enc_file_name": enc_file_name_dec, + "out_config": oc, + "dec_options": dec_options, + "mono": self.flat_mode_list[mode]["cmd"]["mono"], + } + + self.dec_queue["dec_entries"].append(dec_config) + + def check_binaries(self): + missing_binary = False + if self.run_encoder: + if not self.encoder: + self.encoder = os.path.join(self.dir_name, "IVAS_cod" + self.bin_suffix) + if not os.path.exists(self.encoder): + # maybe we need to attach the run directory? + encoder_tmp = self.encoder + self.encoder = os.path.join(self.dir_name, self.encoder) + if not os.path.exists(self.encoder): + self.logger.console( + "Encoder binary {} does not exist, aborting".format( + encoder_tmp + ), + logging.CRITICAL, + ) + self.encoder = encoder_tmp + missing_binary = True + # test if DEBUG_MODE_INFO is active + if self.multiple_res_dir is True and not missing_binary: + test_cmd = [self.encoder, "-h"] + test_result = subprocess.run(test_cmd, capture_output=True, text=True) + if "-info" not in test_result.stdout: + self.logger.console( + "DEBUG_MODE_INFO is not active in the encoder, disabling multiple res directory output!", + logging.INFO, + ) + self.multiple_res_dir = False + + if self.run_decoder: + if not self.decoder: + self.decoder = os.path.join(self.dir_name, "IVAS_dec" + self.bin_suffix) + if not os.path.exists(self.decoder): + decoder_tmp = self.decoder + self.decoder = os.path.join(self.dir_name, self.decoder) + if not os.path.exists(self.decoder): + self.logger.console( + "Decoder binary {} does not exist, aborting".format( + decoder_tmp + ), + logging.CRITICAL, + ) + self.decoder = decoder_tmp + missing_binary = True + # test if DEBUG_MODE_INFO is active + if self.multiple_res_dir is True and not missing_binary: + test_cmd = [self.decoder, "-h"] + test_result = subprocess.run(test_cmd, capture_output=True, text=True) + if "-info" not in test_result.stdout: + self.logger.console( + "DEBUG_MODE_INFO is not active in the decoder, disabling multiple res directory output!", + logging.INFO, + ) + self.multiple_res_dir = False + + if missing_binary: + raise BinaryNotFoundError( + "Binaries: Encoder {}, Decoder {}".format(self.encoder, self.decoder) + ) + + # check for AFSp binaries... + bin_ext = ".exe" if platform.system() == "Windows" else "" + if self.run_encoder: + if self.config["afspPath"] != "not_needed": + if not os.path.exists(self.config["afspPath"]): + self.logger.console( + "AFSp binaries path {} does not exist!".format( + self.config["afspPath"] + ), + logging.CRITICAL, + ) + raise BinaryNotFoundError( + "AFSp binaries path {} does not exist!".format( + self.config["afspPath"] + ) + ) + else: + + afsp_bin = "".join(["CopyAudio", bin_ext]) + if not os.path.exists( + os.path.join(self.config["afspPath"], afsp_bin) + ): + self.logger.console( + "AFSp binary {} in path {} does not exist!".format( + afsp_bin, self.config["afspPath"] + ), + logging.CRITICAL, + ) + raise BinaryNotFoundError( + "AFSp binary {} in path {} does not exist!".format( + afsp_bin, self.config["afspPath"] + ) + ) + + def check_and_create_out_dirs(self): + if not os.path.exists(self.dir_name): + self.logger.console( + "new directory {} has been created".format(self.dir_name), logging.INFO + ) + os.makedirs(self.dir_name) + os.makedirs(os.path.join(self.dir_name, "enc")) + os.makedirs(os.path.join(self.dir_name, "dec")) + os.makedirs(os.path.join(self.dir_name, "logs")) + os.makedirs(os.path.join(self.dir_name, "pcm")) + os.makedirs(os.path.join(self.dir_name, "res")) + else: + if not os.path.exists(os.path.join(self.dir_name, "enc")): + os.makedirs(os.path.join(self.dir_name, "enc")) + self.logger.info( + "new directory {} has been created".format( + os.path.join(self.dir_name, "enc") + ) + ) + if not os.path.exists(os.path.join(self.dir_name, "dec")): + os.makedirs(os.path.join(self.dir_name, "dec")) + self.logger.info( + "new directory {} has been created".format( + os.path.join(self.dir_name, "dec") + ) + ) + if not os.path.exists(os.path.join(self.dir_name, "logs")): + os.makedirs(os.path.join(self.dir_name, "logs")) + self.logger.info( + "new directory {} has been created".format( + os.path.join(self.dir_name, "logs") + ) + ) + if not os.path.exists(os.path.join(self.dir_name, "pcm")): + os.makedirs(os.path.join(self.dir_name, "pcm")) + self.logger.info( + "new directory {} has been created".format( + os.path.join(self.dir_name, "pcm") + ) + ) + if not os.path.exists(os.path.join(self.dir_name, "res")): + os.makedirs(os.path.join(self.dir_name, "res")) + self.logger.info( + "new directory {} has been created".format( + os.path.join(self.dir_name, "res") + ) + ) + self.create_logging_file(self.dir_name, "run") + + def run(self): + """ """ + self.check_binaries() + self.check_and_create_out_dirs() + # change cwd to make sure res subdir can be reached by the binaries + os.chdir(self.dir_name) + if not self.flat_mode_list: + self.collect_mode_configs() + self.mode_add_items() + if not self.run_encoder: + if self.run_decoder: + self.run_dec_threads() + else: + self.clean_pcm_directory() + self.run_enc_dec_threads() + # set cwd back to initial state + os.chdir(self.cwd) + + def run_dec_threads(self): + self.create_dec_queue() + self.get_modes_initial_statistics() + self.results = [] + tasks_dec = [] + with concurrent.futures.ThreadPoolExecutor( + max_workers=self.max_workers + ) as executor: + for config in self.dec_queue["dec_entries"]: + tasks_dec.append(executor.submit(self.ivas_dec_thread, config)) + self.show_final_stats() + + def run_enc_dec_threads(self): + self.get_modes_initial_statistics() + self.create_enc_queue() + + self.dec_queue = { + "condition": threading.Condition(), + "dec_entries": [], + "all_encoded": False, + } + # run all encoders + self.results = [] + run_dec = 1 + tasks_enc = [] + tasks_dec = [] + self.failed_threads = [] + if self.max_workers == 1: + for mode in self.enc_queue["ivas_formats"]: + config = self.enc_queue["ivas_formats"][mode] + + config["lock"].acquire() + n_enc = config["num_enc_remaining"] + config["lock"].release() + if n_enc == 0: + self.logger.warning("Mode {} has no input items!".format(mode)) + for n in range(0, n_enc): + self.ivas_enc_thread(mode, config) + + self.dec_queue["condition"].acquire() + while self.dec_queue["dec_entries"] != []: + config = self.dec_queue["dec_entries"].pop(0) + self.ivas_dec_thread(config) + + self.dec_queue["condition"].notifyAll() + self.dec_queue["condition"].release() + + else: + with concurrent.futures.ThreadPoolExecutor( + max_workers=self.max_workers + ) as executor: + for mode in self.enc_queue["ivas_formats"]: + config = self.enc_queue["ivas_formats"][mode] + + config["lock"].acquire() + n_enc = config["num_enc_remaining"] + config["lock"].release() + if n_enc == 0: + self.logger.warning("Mode {} has no input items!".format(mode)) + for n in range(0, n_enc): + tasks_enc.append( + executor.submit(self.ivas_enc_thread, mode, config) + ) + while run_dec: + + self.lock.acquire() + # check if all enc tasks are done, either regularily or with exceptions + try: + finished_enc_tasks = concurrent.futures.wait( + tasks_enc, timeout=0.001 + ) + if len(finished_enc_tasks.not_done) == 0: + self.dec_queue["all_encoded"] = True + except concurrent.futures.TimeoutError: + # not all done yet, continue... + pass + + self.lock.release() + + self.dec_queue["condition"].acquire() + if not self.dec_queue["dec_entries"]: + all_encoded = self.dec_queue["all_encoded"] + if all_encoded: + break + self.dec_queue["condition"].wait(10) + + while self.dec_queue["dec_entries"] != []: + config = self.dec_queue["dec_entries"].pop(0) + tasks_dec.append(executor.submit(self.ivas_dec_thread, config)) + + self.dec_queue["condition"].notify() + self.dec_queue["condition"].release() + + self.show_final_stats() + + def get_decoded_item_list(self): + delete_flat_mode_list = False + if not self.flat_mode_list: + self.collect_mode_configs() + self.mode_add_items() + delete_flat_mode_list = True + decoded_item_list = [] + for mode in self.flat_mode_list: + for in_file_name in self.flat_mode_list[mode]["item_list"]: + if isinstance(in_file_name, list): + in_file_name = in_file_name[0] + item_base_name = os.path.splitext(os.path.basename(in_file_name))[0] + for oc in self.flat_mode_list[mode]["cmd"]["dec"]: + suffices = None + if "bitstream_processing" in self.flat_mode_list[mode]["cmd"]: + suffices = self.get_bs_processing_suffices( + self.flat_mode_list[mode]["cmd"]["bitstream_processing"] + ) + dec_file_name = "".join( + [ + "_".join( + [ + x + for x in [item_base_name, mode, suffices] + if x is not None + ] + ), + ".dec.", + oc, + ".wav", + ] + ) + decoded_item_list.append(dec_file_name) + if delete_flat_mode_list: + self.flat_mode_list = [] + return decoded_item_list + + +# if __name__ == '__main__': diff --git a/scripts/pyivastest/IvasScriptsCommon.py b/scripts/pyivastest/IvasScriptsCommon.py new file mode 100644 index 0000000000..7e84efc215 --- /dev/null +++ b/scripts/pyivastest/IvasScriptsCommon.py @@ -0,0 +1,722 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import argparse +import os +import json +import re +import multiprocessing +from pyivastest.IvasBaseClass import * +import pyivastest.constants as constants +import logging +import platform + +# make sure we have colored output using shell escapes correctly on windows +if platform.system() == "Windows": # Only if we are running on Windows + from ctypes import windll + + k = windll.kernel32 + k.SetConsoleMode(k.GetStdHandle(-11), 7) + + +class ParseOutputConfigs(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + oc_dict = {} + if values[0][0] == "{": + oc_dict = json.loads("".join(values)) + else: + for oc in values: + oc_dict.update({oc: []}) + setattr(namespace, self.dest, oc_dict) + + +class ParseEncDecOptions(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + encdec_options = [] + if values: + encdec_options = values[0].split(" ") + + setattr(namespace, self.dest, encdec_options) + + +class ParseFilterRegex(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + regexpr = None + + if values != "": + regexpr = re.compile(values) + + setattr(namespace, self.dest, regexpr) + + +class ParseItems(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + item_list = [] + saved_values = values.copy() + while values: + item = values.pop(0) + if item[0] == "[": + while item[-1] != "]": + # search for the closing bracket + if not values: + parser.error( + 'Could not parse item list"{}" '.format( + " ".join(saved_values) + ) + ) + else: + next_value = values.pop(0) + if next_value[0] == "[": + # next opening without closing bracket + parser.error( + 'Could not parse item list "{}"'.format( + " ".join(saved_values) + ) + ) + else: + item = "".join([item, next_value]) + item = [item[1:-1].split(",")] + else: + item = [item] + item_list.extend(item) + setattr(namespace, self.dest, item_list) + + +class IvasScriptArgParser(argparse.ArgumentParser): + def __init__(self, minimal=False): + super().__init__() + self.minimal = minimal + self.add_argument( + "-z", + "--loglevel", + help="Either show with minimal output (default, 'silent'), or reroute log messages with levels higher than LEVEL to the console", + nargs="?", + const="silent", + default="progress", + choices=[ + "silent", + "console", + "progress", + "debug", + "info", + "warning", + "error", + "critical", + ], + ) + self.add_argument("-g", "--logfile", help="log file") + self.add_argument( + "-t", + "--max_workers", + help="use multithreading with MAX_WORKERS threads (default: number of CPUs available at the machine)", + default=multiprocessing.cpu_count(), + type=int, + ) + if not minimal: + self.add_argument( + "-C", + "--formats", + nargs="*", + default="all", + metavar="FORMAT", + help="List of IVAS formats to run, default all (for possible choices get a list with -L", + ) + self.add_argument( + "-m", + "--modes", + nargs="*", + default="all", + metavar="MODE", + help="List of IVAS modes to run, default all (for possible choices get a list with -l", + ) + self.add_argument( + "--oc", + default="", + dest="oc_dict", + nargs="*", + action=ParseOutputConfigs, + help="List of output formats, either a space separated list or a json string in single quotes", + ) + self.add_argument( + "-E", + "--enc_options", + dest="enc_options_list", + action=ParseEncDecOptions, + metavar='"-opt1 opt2"', + nargs=1, + help='Additional command line options for the encoder (always use it in the form -E="-o -opt ...")', + ) + self.add_argument( + "-D", + "--dec_options", + dest="dec_options_list", + action=ParseEncDecOptions, + metavar='"-opt1 opt2"', + nargs=1, + help='Additional command line options for the decoder (always use it in the form -D="-o -opt ...")', + ) + self.add_argument( + "--format_file", + default="", + help="File name for the IVAS ivas_format dictionary to use (default: ivas_modes_v2.json)", + ) + self.add_argument( + "-I", + "--items", + help="List of items to be coded, allows for explicit definition of metadata files by grouping an item together with its metadata files in square brackets [ITEM,METADATAFILE,...]", + nargs="*", + default=[], + dest="item_list", + metavar="ITEM", + action=ParseItems, + ) + self.add_argument( + "--metadata_files", + metavar="MDFILE", + help="List of common metadata files", + nargs="*", + default=[], + ) + self.add_argument( + "-S", + "--srin", + type=int, + help="Input sample rate for the encoder (either in Hz or kHz)", + default=None, + ) + self.add_argument( + "-R", + "--srout", + type=int, + help="Output sample rate for the decoder (either in Hz or kHz)", + default=None, + ) + self.add_argument( + "-p", + "--config", + help="select site-related config as CONFIG.json", + default="", + ) + self.add_argument( + "-l", + "--list_modes", + help="list all supported IVAS ivas_formats", + action="store_true", + ) + self.add_argument( + "-L", + "--list_formats", + help="list all supported IVAS formats", + action="store_true", + ) + self.add_argument( + "-U", + "--limit_duration", + default=None, + help="limit dUration of input file to X seconds", + type=float, + ) + self.add_argument( + "-f", "--fer_file", default="", help="frame error pattern file" + ) + self.add_argument( + "-y", "--ber_file", default="", help="bit error pattern file" + ) + self.add_argument("-J", "--jbm_file", default="", help="jbm file") + self.add_argument( + "-i", + "--indir", + type=str, + help="Directory for items to be coded, either a single directory or a json string for different directories with the input formats as keys", + default="", + ) + self.add_argument( + "--decoder_only", help="only run the decoder", action="store_true" + ) + self.add_argument( + "-x", + "--filter", + help="Regex for filtering modes", + default="", + action=ParseFilterRegex, + dest="filter_regex", + ) + self.add_argument( + "-s", + "--sidstart", + help="Cut frames from the beginning of the encoded bit stream until the first SID frame", + action="store_true", + ) + self.add_argument( + "--info", + help="Ouput debug info in subfolders of /res (use with caution, this can generate a huge amount of data)", + action="store_true", + ) + self.add_argument( + "--sofa", + help="Directory for the group B binaural renderer to look for SOFA files", + type=str, + ) + + @staticmethod + def insert_subformats(args, keyword, format_list): + if keyword in args.formats: + for subformat in format_list: + if subformat not in args.formats: + args.formats.append(subformat) + args.formats.remove(keyword) + + def parse_args(self): + args = vars(super().parse_args()) + args["error"] = False + args["exit"] = False + + args["loglevel"] = args["loglevel"].upper() + # do some sanity checks here + + # check if config file exists + if ( + "config" in args.keys() + and args["config"] + and not os.path.isfile(args["config"]) + ): + print( + "Given config file '{}' does not exist! Checking for it in module subfolder...".format( + args["config"] + ) + ) + cfg_path = os.path.realpath( + os.path.join(constants.SCRIPTS_CONFIGS_DIR, args["config"]) + ) + if not cfg_path.endswith(".json"): + cfg_path += ".json" + print(cfg_path) + if os.path.isfile(cfg_path): + print("Found it in default configs.") + else: + print("Could not find it...") + args["error"] = 1 + args["exit"] = 1 + + if not self.minimal: + format_dict = self.get_format_dict(args["format_file"]) + if format_dict == -1: + args["error"] = 1 + args["exit"] = 1 + return args + + all_formats = format_dict.keys() + if "all" in args["formats"]: + args["formats"] = all_formats + else: + for chosen_format in args["formats"]: + if chosen_format not in all_formats: + print( + "Chosen format {} is not in the IVAS format dictionary!".format( + chosen_format + ) + ) + print("Possible formats are:") + args["error"] = True + args["list_formats"] = True + args["list_modes"] = False + args["exit"] = True + + if args["list_modes"] or args["list_formats"]: + args["exit"] = True + if args["list_formats"]: + for ivas_format in all_formats: + print(ivas_format) + if args["list_modes"]: + for ivas_format in args["formats"]: + ivas_modes = format_dict[ivas_format] + for ivas_mode in ivas_modes: + print(ivas_mode) + + if "all" not in args["modes"] and not args["error"]: + for mode in args["modes"]: + found = False + for ivas_format in args["formats"]: + if mode in format_dict[ivas_format]: + found = True + if found == False: + print( + "Mode '{}' is not part of the chosen formats {}".format( + mode, str(args["formats"]) + ) + ) + + indir = args["indir"] + indir_dict = {} + if indir: + # get all needed in formats from the format dict + needed_in_formats = [] + for ivas_format in format_dict: + needed_in_formats.extend( + list( + map( + lambda x: format_dict[ivas_format][x]["in_config"], + format_dict[ivas_format].keys(), + ) + ) + ) + # need to add this here to make -sba 1 work with giving a custom dir + needed_in_formats.append("FOA") + needed_in_formats = set(needed_in_formats) + if indir[0] == "{": + # we have a json string as dict + indir_dict = json.loads(indir) + else: + indir = os.path.abspath(indir) + indir_dict = {} + if not os.path.exists(indir): + print("Given input directory {} does not exist!".format(indir)) + args["error"] = True + args["exit"] = True + elif not os.path.isdir(indir): + print( + "Given input directory {} is not a directory. Did you mean to pass '-I' instead of '-i'?".format( + indir + ) + ) + args["error"] = True + args["exit"] = True + for in_format in needed_in_formats: + indir_dict.update({in_format: indir}) + args["indir_dict"] = indir_dict + + # check output configs + if args["oc_dict"]: + oc_dict = args["oc_dict"] + # do not iterate over dict directly to be able to change it during iteration + for oc in list(oc_dict.keys()): + # allow for ls layout files for arbitrary ls setup rendering + new_oc = oc.upper() + if new_oc not in constants.DECODER_OUTPUT_CONFIGS: + new_oc = os.path.realpath(oc) + if not os.path.exists(new_oc): + print( + f"{oc} is neither a valid standard output config nor a valid file name for a arbitrary loudspeaker setup!" + ) + args["error"] = True + args["exit"] = True + oc_dict[new_oc] = oc_dict.pop(oc) + + # change in and out sampling rates if given in Hz to kHz + if args["srin"]: + if args["srin"] % 1000 == 0: + args["srin"] = int(args["srin"] / 1000) + if args["srout"]: + if args["srout"] % 1000 == 0: + args["srout"] = int(args["srout"] / 1000) + + # test if fer, ber, jbm files exist + if args["fer_file"]: + args["fer_file"] = os.path.realpath(args["fer_file"]) + if not os.path.exists(args["fer_file"]): + print("Given fer file {} does not exist!".format(args["fer_file"])) + args["error"] = True + args["exit"] = True + + if args["ber_file"]: + args["ber_file"] = os.path.realpath(args["ber_file"]) + if not os.path.exists(args["ber_file"]): + print("Given ber file {} does not exist!".format(args["ber_file"])) + args["error"] = True + args["exit"] = True + + if args["jbm_file"]: + args["jbm_file"] = os.path.realpath(args["jbm_file"]) + if not os.path.exists(args["jbm_file"]): + print("Given jbm file {} does not exist!".format(args["jbm_file"])) + args["error"] = True + args["exit"] = True + return args + + def get_format_dict(self, format_file: str): + if not format_file: + format_file = os.path.join( + constants.SCRIPTS_CONFIGS_DIR, constants.DEFAULT_IVAS_FORMAT_FILE + ) + + # if os.path.exists(format_file): + # fp = open(format_file, 'r') + # else: + # # add config path and try again + # format_file = os.path.join(constants.SCRIPTS_CONFIGS_DIR, format_file) + # if os.path.exists(format_file): + # fp = open(format_file, 'r') + # else: + # print("format file {} does not exist!\n".format(format_file)) + # return -1 + # all_formats = json.load(fp) + all_formats = IvasBaseClass.read_format_dict(format_file) + return all_formats + + +class IvasScript(IvasBaseClass): + def __init__( + self, + ivas_parser=True, + enable_logging=False, + console_logger_level="", + logger_name="IvasScript", + log_level=logging.DEBUG, + ): + super().__init__( + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + ) + if ivas_parser: + self.parser = IvasScriptArgParser(minimal=False) + else: + self.parser = IvasScriptArgParser(minimal=True) + self.args = None + + def parse_args(self): + self.args = self.parser.parse_args() + self.set_console_logger(self.args["loglevel"].upper()) + if self.args["logfile"] is not None and self.args["logfile"] != "": + self.create_logging_file(os.getcwd(), self.args["logfile"]) + + @staticmethod + def get_n_channels_from_ls_layout(oc: str): + n_channels = 0 + if os.path.exists(oc): + with open(oc, "r") as ls_layout_file: + n_channels = len(ls_layout_file.readline().strip().split(",")) + ls_layout_file.readline() + lfe_line = ls_layout_file.readline().strip() + if lfe_line != "": + n_channels += 1 # = len(lfe_line.split(",")) # TODO needs update if multiple LFE support is enabled + return n_channels + + +def add_to_proc_chain(bs_proc_chain, proc_cmd, dec_options=[]): + if bs_proc_chain == {}: + bs_proc_chain.update({"proc_chain": [], "dec_options": []}) + + bs_proc_chain["proc_chain"].append(proc_cmd) + if dec_options != []: + bs_proc_chain["dec_options"].extend(dec_options) + + +def runner_setup(runner, args): + bs_proc_chain = {} + if args["enc_options_list"]: + runner.encoder_cmdline_options = args["enc_options_list"] + + if args["dec_options_list"]: + runner.decoder_cmdline_options = args["dec_options_list"] + + if args["limit_duration"]: + runner.limit_duration = True + runner.max_duration = args["limit_duration"] + + if args["fer_file"]: + fer_suffix = "fer_{}".format( + "_".join(os.path.basename(args["fer_file"]).split(".")) + ) + fer_cmd = [ + os.path.join(runner.config["utilPath"], "eid-xor"), + "-vbr", + "-fer", + "{in_file}", + args["fer_file"], + "{out_file}", + fer_suffix, + ] + add_to_proc_chain(bs_proc_chain, fer_cmd) + + if args["ber_file"]: + ber_suffix = "ber_{}".format( + "_".join(os.path.basename(args["ber_file"]).split(".")) + ) + ber_cmd = [ + os.path.join(runner.config["utilPath"], "eid-xor"), + "-vbr", + "-ber", + "{in_file}", + args["ber_file"], + "{out_file}", + ber_suffix, + ] + add_to_proc_chain(bs_proc_chain, ber_cmd) + + if args["jbm_file"]: + n_frames_per_packet = "1" + if "dly_error_profile_5.dat" in args["jbm_file"]: + n_frames_per_packet = "2" + jbm_suffix = "jbm_{}".format( + "_".join(os.path.basename(args["jbm_file"]).split(".")) + ) + jbm_cmd = [ + os.path.join(runner.config["utilPath"], "networkSimulator_g192"), + args["jbm_file"], + "{in_file}", + "{out_file}", + "{in_file}.tracefile_sim", + n_frames_per_packet, + "0", + jbm_suffix, + ] + dec_options = ["-Tracefile", "{dec_file_name}.tracefile_dec", "-VOIP"] + add_to_proc_chain(bs_proc_chain, jbm_cmd, dec_options) + + if args["sidstart"]: + sidstart_cmd = [ + os.path.join(constants.SCRIPTS_BASE_DIR, "tools", "cut_bs.py"), + "--sid", + "{in_file}", + "{out_file}", + "sidstart", + ] + add_to_proc_chain(bs_proc_chain, sidstart_cmd) + + if bs_proc_chain != {}: + runner.global_bitstream_processing = bs_proc_chain + + runner.set_format_select_list(args["formats"]) + + if args["oc_dict"]: + for ivas_format in args["formats"]: + runner.set_format_output_config(ivas_format, args["oc_dict"]) + if args["modes"] and "all" not in args["modes"]: + mode_select_dict = {} + for mode in args["modes"]: + mode_select_dict.update({mode: []}) + runner.set_mode_select_list(mode_select_dict) + if args["formats"]: + runner.set_format_select_list(args["formats"]) + if args["item_list"]: + runner.set_global_item_list(args["item_list"]) + if args["metadata_files"]: + runner.set_global_metadata_file_list(args["metadata_files"]) + if args["decoder_only"]: + runner.run_encoder = False + if args["info"]: + runner.multiple_res_dir = True + + if args["filter_regex"]: + runner.filter = args["filter_regex"] + + +def analyzer_setup(analyzer, args): + bs_proc_chain = {} + if args["fer_file"]: + fer_suffix = "fer_{}".format( + "_".join(os.path.basename(args["fer_file"]).split(".")) + ) + fer_cmd = [ + os.path.join(analyzer.config["utilPath"], "eid-xor"), + "-vbr", + "-fer", + "{in_file}", + args["fer_file"], + "{out_file}", + fer_suffix, + ] + add_to_proc_chain(bs_proc_chain, fer_cmd) + + if args["ber_file"]: + ber_suffix = "ber_{}".format( + "_".join(os.path.basename(args["ber_file"]).split(".")) + ) + ber_cmd = [ + os.path.join(analyzer.config["utilPath"], "eid-xor"), + "-vbr", + "-ber", + "{in_file}", + args["ber_file"], + "{out_file}", + ber_suffix, + ] + add_to_proc_chain(bs_proc_chain, ber_cmd) + + if args["jbm_file"]: + n_frames_per_packet = "1" + if "dly_error_profile_5.dat" in args["jbm_file"]: + n_frames_per_packet = "2" + jbm_suffix = "jbm_{}".format( + "_".join(os.path.basename(args["jbm_file"]).split(".")) + ) + jbm_cmd = [ + os.path.join(analyzer.config["utilPath"], "networkSimulator_g192"), + args["jbm_file"], + "{in_file}", + "{out_file}", + "{in_file}.tracefile_sim", + n_frames_per_packet, + "0", + jbm_suffix, + ] + dec_options = ["-Tracefile", "{dec_file_name}.tracefile_dec", "-VOIP"] + add_to_proc_chain(bs_proc_chain, jbm_cmd, dec_options) + + if args["sidstart"]: + sidstart_cmd = [ + os.path.join(constants.SCRIPTS_BASE_DIR, "tools", "cut_bs.py"), + "--sid", + "{in_file}", + "{out_file}", + "sidstart", + ] + add_to_proc_chain(bs_proc_chain, sidstart_cmd) + + if bs_proc_chain != {}: + analyzer.global_bitstream_processing = bs_proc_chain + analyzer.set_format_select_list(args["formats"]) + + if args["oc_dict"]: + for ivas_format in args["formats"]: + analyzer.set_format_output_config(ivas_format, args["oc_dict"]) + if args["modes"] and "all" not in args["modes"]: + mode_select_dict = {} + for mode in args["modes"]: + mode_select_dict.update({mode: []}) + analyzer.set_mode_select_list(mode_select_dict) + if args["formats"]: + analyzer.set_format_select_list(args["formats"]) + if args.get("create_html_output"): + analyzer.html_table = list() + if args["decoder_only"]: + analyzer.analyze_encoder = False + if args["filter_regex"]: + analyzer.filter = args["filter_regex"] + + +if __name__ == "__main__": + test_parser = IvasScriptArgParser() + args = test_parser.parse_args() + print(args) diff --git a/scripts/pyivastest/IvasSvnBuilder.py b/scripts/pyivastest/IvasSvnBuilder.py new file mode 100644 index 0000000000..d34b64fabe --- /dev/null +++ b/scripts/pyivastest/IvasSvnBuilder.py @@ -0,0 +1,1500 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import re +import fileinput +import os +import shutil +import subprocess +import platform +import json +import xml.etree.ElementTree +import logging +from getpass import getpass +import urllib.parse + +from pyivastest.IvasModeRunner import * +from pyivastest.IvasModeAnalyzer import * +import pyivastest.ivas_svn as svn +from pyivastest.IvasBaseClass import * +import pyivastest.constants as constants + + +class IvasBuilder(IvasBaseClass): + """ """ + + def __init__( + self, + src_dir="", + msbuild="", + enable_logging=False, + console_logger_level="", + logger_name="IvasBuilder", + log_level=logging.DEBUG + ): + super().__init__( + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + ) + self.src_dir = src_dir + self.binary_ext = "" + if self.system == "Windows": + self.binary_ext = ".exe" + if msbuild: + self.msbuild = msbuild + else: + self.msbuild = self.find_windows_ms_build() + if not os.path.exists(self.msbuild): + self.logger.console( + "MSBuild binary {} does not exist!".format(self.ms_build), + logging.ERROR, + ) + self.encoder = "" + self.decoder = "" + + def get_options_h(self): + """ """ + return os.path.join(self.src_dir, "lib_com", "options.h") + + def find_windows_ms_build(self): + my_sys = platform.system() + ms_build = "" + if my_sys == "Windows": + self.logger.info("Looking for MSBuild...") + vswhere_bin = "C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vswhere.exe" + if not os.path.exists: + self.logger.console( + "Could not determine the VS Version, vswhere.exe was not found, aborting...", + logging.CRITICAL, + ) + raise RuntimeError() + cmd = [vswhere_bin, "-latest", "-format", "json", "-utf8"] + p = subprocess.run(cmd, stdout=subprocess.PIPE) + vs_latest = json.loads(p.stdout)[0] + inst_path = vs_latest["installationPath"] + inst_version = vs_latest["installationVersion"].split(".")[0] + # path changes with ervery version of VS, thank you very much Microsoft... + if inst_version == "15": # Visual Studio 2017 + ms_build = os.path.join( + inst_path, "MSBuild", "15.0", "Bin", "MSBuild.exe" + ) + self.logger.info( + "Found VS {} with msbuild: {}".format(inst_version, ms_build) + ) + elif inst_version == "16": # Visual Studio 2019 + ms_build = os.path.join( + inst_path, "MSBuild", "current", "Bin", "MSBuild.exe" + ) + self.logger.info( + "Found VS {} with msbuild: {}".format(inst_version, ms_build) + ) + else: + self.logger.error( + "Found VS {}, sorry this version cannot be handled yet.".format( + inst_version + ) + ) + raise RuntimeError() + + if not os.path.exists(ms_build): + ms_build = "" + return ms_build + + def disable_options(self, options_h, defines_to_disable): + """ + + Parameters + ---------- + options_h : + + defines_to_disable : + + + Returns + ------- + + """ + # Read in the file + if defines_to_disable is not None: + for cur_define in defines_to_disable: + self.logger.info("Disabling define {}".format(cur_define)) + for line in fileinput.input(options_h, inplace=True): + print( + re.sub( + "".join(["^[ ]*#define[ ]*", cur_define]), + "".join(["/*#define ", cur_define, "*/"]), + line, + ), + end="", + ) + + def enable_options(self, options_h, defines_to_enable): + """ + + Parameters + ---------- + options_h : + + defines_to_enable : + + + Returns + ------- + + """ + # Read in the file + if defines_to_enable is not None: + for cur_define in defines_to_enable: + self.logger.info("Enabling define {}".format(cur_define)) + for line in fileinput.input(options_h, inplace=True): + print( + re.sub( + "".join(["^[ ]*?/\*#define[ ]+?", cur_define, "[ ]*?\*/"]), + "".join(["#define ", cur_define, " "]), + line, + ), + end="", + ) + + def check_for_binaries(self, sub_dir: str) -> bool: + out_dir = os.path.join(self.src_dir, sub_dir) + result = True + if os.path.exists( + os.path.join(out_dir, "".join(["IVAS_cod", self.binary_ext])) + ): + self.encoder = os.path.join(out_dir, "".join(["IVAS_cod", self.binary_ext])) + if os.path.exists( + os.path.join(out_dir, "".join(["IVAS_dec", self.binary_ext])) + ): + self.decoder = os.path.join( + out_dir, "".join(["IVAS_dec", self.binary_ext]) + ) + else: + result = False + elif os.path.exists( + os.path.join(out_dir, "".join(["EVS_cod", self.binary_ext])) + ): + self.encoder = os.path.join(out_dir, "".join(["EVS_cod", self.binary_ext])) + if os.path.exists( + os.path.join(out_dir, "".join(["EVS_dec", self.binary_ext])) + ): + self.decoder = os.path.join( + out_dir, "".join(["EVS_dec", self.binary_ext]) + ) + else: + result = False + else: + result = False + return result + + def build( + self, + sub_dir, + make_options=[], + defines_to_enable=[], + defines_to_disable=[], + instrumented=False, + ): + """ + + Parameters + ---------- + sub_dir : + + make_options : + (Default value = []) + defines_to_enable : + (Default value = []) + defines_to_disable : + (Default value = []) + instrumented : + (Default value = False) + + Returns + ------- + + """ + self.create_logging_file(self.src_dir, "IvasBuilder") + self.logger.info("Building...") + options_h = self.get_options_h() + options_h_bak = "".join([options_h, ".unchanged"]) + shutil.copy(options_h, options_h_bak) + success = False + # disable and enable defines + self.enable_options(options_h, defines_to_enable) + self.disable_options(options_h, defines_to_disable) + + if not os.path.exists(sub_dir): + self.logger.info("Created out dir {}".format(sub_dir)) + os.makedirs(sub_dir) + + build_log_name = os.path.join(sub_dir, "build" + constants.LOG_FILE_EXT) + build_log = open(build_log_name, "w") + # build + if instrumented: + self.logger.console("Instrumenting...", logging.INFO) + make_dir = os.path.join(self.src_dir, "scripts", "c-code_instrument") + # remove if it c-code_instrument already exists + if os.path.exists(make_dir): + shutil.rmtree(make_dir) + instrument_cmd = [ + os.path.join(self.src_dir, "scripts", "prepare_instrumentation.sh") + ] + build_log.write(" ".join(instrument_cmd)) + build_log.write("\n") + build_result = subprocess.run( + instrument_cmd, capture_output=True, text=True + ) + build_log.write(build_result.stderr) + build_log.write(build_result.stdout) + build_log.write("\n") + else: + make_dir = self.src_dir + + build_log.write("".join(["Build directory: ", make_dir])) + build_log.write("\n") + self.logger.console("Building...", logging.INFO) + + # to be safe remove existing binaries + if os.path.exists( + os.path.join(make_dir, "".join(["IVAS_cod", self.binary_ext])) + ): + os.remove(os.path.join(make_dir, "".join(["IVAS_cod", self.binary_ext]))) + if os.path.exists( + os.path.join(make_dir, "".join(["IVAS_dec", self.binary_ext])) + ): + os.remove(os.path.join(make_dir, "".join(["IVAS_dec", self.binary_ext]))) + if os.path.exists( + os.path.join(make_dir, "".join(["EVS_cod", self.binary_ext])) + ): + os.remove(os.path.join(make_dir, "".join(["EVS_cod", self.binary_ext]))) + if os.path.exists( + os.path.join(make_dir, "".join(["EVS_dec", self.binary_ext])) + ): + os.remove(os.path.join(make_dir, "".join(["EVS_dec", self.binary_ext]))) + # remove also in the target directory if it exists + if os.path.abspath(make_dir) != os.path.abspath(sub_dir): + if os.path.exists( + os.path.join(sub_dir, "".join(["IVAS_cod", self.binary_ext])) + ): + os.remove(os.path.join(sub_dir, "".join(["IVAS_cod", self.binary_ext]))) + if os.path.exists( + os.path.join(sub_dir, "".join(["IVAS_dec", self.binary_ext])) + ): + os.remove(os.path.join(sub_dir, "".join(["IVAS_dec", self.binary_ext]))) + if os.path.exists( + os.path.join(sub_dir, "".join(["EVS_cod", self.binary_ext])) + ): + os.remove(os.path.join(sub_dir, "".join(["EVS_cod", self.binary_ext]))) + if os.path.exists( + os.path.join(sub_dir, "".join(["EVS_dec", self.binary_ext])) + ): + os.remove(os.path.join(sub_dir, "".join(["EVS_dec", self.binary_ext]))) + + + build_success = -1 + if self.system == "Windows": + make_sln = os.path.join(make_dir, "Workspace_msvc", "Workspace_msvc.sln") + clean_cmd = [self.msbuild, make_sln, "/t:clean"] + build_log.write(" ".join(clean_cmd)) + build_log.write("\n") + make_cmd = [self.msbuild, make_sln] + make_options + build_result = subprocess.run( + clean_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + build_log.write(build_result.stderr.decode("cp1252")) + build_log.write(build_result.stderr.decode("cp1252")) + build_log.write(" ".join(make_cmd)) + build_log.write("\n") + build_result = subprocess.run( + list(filter(None, make_cmd)), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + build_success = build_result.returncode + build_log.write(build_result.stderr.decode("cp1252")) + build_log.write(build_result.stderr.decode("cp1252")) + else: + clean_cmd = ["make", "-C", make_dir, "clean"] + build_log.write(" ".join(clean_cmd)) + build_log.write("\n") + make_cmd = ["make", "-C", make_dir] + make_options + build_result = subprocess.run( + clean_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + build_log.write(build_result.stderr.decode()) + build_log.write(build_result.stdout.decode()) + build_log.write(" ".join(make_cmd)) + build_log.write("\n") + build_result = subprocess.run( + list(filter(None, make_cmd)), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + build_success = build_result.returncode + build_log.write(build_result.stderr.decode()) + build_log.write(build_result.stdout.decode()) + + if build_success != 0: + self.logger.console( + f"Something went wrong with building, please check {build_log_name}!", + logging.ERROR, + ) + build_log.flush() + build_log.close() + else: + success = True + + # test for EVS vs IVAS + # avoid copying if make_dir and sub_dir are identical + if os.path.abspath(make_dir) != os.path.abspath(sub_dir): + if os.path.exists( + os.path.join(make_dir, "".join(["IVAS_cod", self.binary_ext])) + ): + shutil.copy( + os.path.join(make_dir, "".join(["IVAS_cod", self.binary_ext])), + sub_dir, + ) + shutil.copy( + os.path.join(make_dir, "".join(["IVAS_dec", self.binary_ext])), + sub_dir, + ) + self.encoder = os.path.join( + sub_dir, "".join(["IVAS_cod", self.binary_ext]) + ) + self.decoder = os.path.join( + sub_dir, "".join(["IVAS_dec", self.binary_ext]) + ) + elif os.path.exists( + os.path.join(make_dir, "".join(["EVS_cod", self.binary_ext])) + ): + shutil.copy( + os.path.join(make_dir, "".join(["EVS_cod", self.binary_ext])), + sub_dir, + ) + shutil.copy( + os.path.join(make_dir, "".join(["EVS_dec", self.binary_ext])), + sub_dir, + ) + self.encoder = os.path.join( + sub_dir, "".join(["EVS_cod", self.binary_ext]) + ) + self.decoder = os.path.join( + sub_dir, "".join(["EVS_dec", self.binary_ext]) + ) + + # restore state of options.h + if os.path.exists(options_h_bak): + shutil.copy(options_h_bak, options_h) + os.remove(options_h_bak) + + return success + + # TODO: this is not used anywhere, can it go? + def copy_binaries(self, make_dir, target_dir, target_suffix=""): + if os.path.exists( + os.path.join(make_dir, "".join(["IVAS_cod", self.binary_ext])) + ): + shutil.copy( + os.path.join(make_dir, "".join(["IVAS_cod", self.binary_ext])), + os.path.join( + target_dir, "".join(["IVAS_cod", target_suffix, self.binary_ext]) + ), + ) + shutil.copy( + os.path.join(make_dir, "".join(["IVAS_dec", self.binary_ext])), + os.path.join( + target_dir, "".join(["IVAS_dec", target_suffix, self.binary_ext]) + ), + ) + elif os.path.exists( + os.path.join(make_dir, "".join(["EVS_cod", self.binary_ext])) + ): + shutil.copy( + os.path.join(make_dir, "".join(["EVS_cod", self.binary_ext])), + os.path.join( + target_dir, "".join(["EVS_cod", target_suffix, self.binary_ext]) + ), + ) + shutil.copy( + os.path.join(make_dir, "".join(["EVS_dec", self.binary_ext])), + os.path.join( + target_dir, "".join(["EVS_dec", target_suffix, self.binary_ext]) + ), + ) + + +class IvasSvnBuilder(IvasBuilder): + """ """ + + def __init__( + self, + svn_url, + svn_user="", + out_dir=".", + revision=None, + svn_pwd="", + msbuild="", + enable_logging=False, + console_logger_level="", + logger_name="IvasSvnBuilder", + log_level=logging.DEBUG, + ): + super().__init__( + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + msbuild=msbuild + ) + self.svn_url = svn_url + # check if we have a complete url or just the path part + parsed_url = urllib.parse.urlparse(self.svn_url) + if parsed_url.scheme == "": + # onyl path of the svn url, use the default root + svn_root = constants.DEFAULT_IVAS_REPO_URL + self.svn_url = "/".join([svn_root, self.svn_url]) + self.svn_user = svn_user + self.out_dir = out_dir + self.revision = revision + self.svn_pwd = svn_pwd + self.has_auth_password = False + if self.svn_user == "" or self.svn_pwd == "": + auth_info = svn.get_svn_auth_info(self.svn_url, logger=self.logger) + if svn_user == "": + if auth_info["username"] != "": + # svn can look up auth info itself... + self.svn_user = auth_info["username"] + else: + # ask for the user name + print("SVN user name needed:") + self.svn_user = input(" user>") + if svn_pwd == "": + if auth_info["has_password"] is False: + # ask for the password + print("Password for user {}".format(self.svn_user)) + self.svn_pwd = getpass(" pwd>") + else: + self.has_auth_password = True + + def get_revision_list(self): + """Allow for the most-likely kind of log listing: the complete list, + a FROM and TO timestamp, a FROM timestamp only, or a quantity limit. + """ + self.logger.info("Fetch revision list from svn") + result = svn.run_remote_svn_command( + ["log", "--xml", self.svn_url], + username=self.svn_user, + password=self.svn_pwd, + logger=self.logger, + ) + if result is not None: + root = xml.etree.ElementTree.fromstring(result) + revisions = [int(e.get("revision")) for e in root.iter("logentry")] + return revisions + else: + return None + + def get_svn_source(self): + """ """ + + # get code + if self.src_dir == "" or not os.path.exists(self.src_dir): + self.logger.console("Exporting code from remote SVN", logging.INFO) + self.logger.info( + "SVN url {}, svn user {}".format(self.svn_url, self.svn_user) + ) + try: + svninfo = svn.get_remote_svn_info( + self.svn_url, + username=self.svn_user, + password=self.svn_pwd, + logger=self.logger, + ) + except Exception as exc: + self.logger.console( + "Something went wrong when accessing the remote SVN!", + logging.CRITICAL, + ) + self.logger.console("{}".format(str(exc)), logging.CRITICAL) + raise RuntimeError( + "Could not access remote SVN {} with username{}".format( + self.svn_url, self.svn_user + ) + ) + + latest_revision = svninfo["commit_revision"] + if self.revision: + if self.revision < 1: + self.revision = 1 + if self.revision > latest_revision: + self.logger.console( + "Requested revision {} greater than latest commit revision {}".format( + str(self.revision), str(latest_revision) + ), + logging.INFO, + ) + self.logger.console( + "Getting latest commit revision {}".format( + str(latest_revision) + ), + logging.INFO, + ) + self.revision = latest_revision + else: + rl = self.get_revision_list() + if self.revision in rl: + self.logger.console( + "Requested revision {} exists, getting it...".format( + str(self.revision) + ), + logging.INFO, + ) + latest_revision = self.revision + else: + # find + latest_revision = next( + (x for x in rl if x <= self.revision), None + ) + self.logger.console( + "Requested revision {} does not exist, getting revision {} instead".format( + str(self.revision), str(latest_revision) + ), + logging.INFO, + ) + self.revision = latest_revision + else: + self.logger.console( + "Exporting latest revision {}".format(str(latest_revision)), + logging.INFO, + ) + self.revision = latest_revision + + self.src_dir = os.path.join( + self.out_dir, + svninfo["entry_path"], + "".join(["r", str(latest_revision)]), + ) + self.revision = latest_revision + if os.path.exists(self.src_dir): + self.create_logging_file(self.src_dir, "IvasBuilder") + self.logger.console( + "Revision {} already exported...".format(str(latest_revision)), + logging.INFO, + ) + else: + self.logger.console( + "Exporting to {}...".format(self.src_dir), logging.INFO + ) + svn.svn_export( + self.svn_url, + self.src_dir, + revision=self.revision, + username=self.svn_user, + password=self.svn_pwd, + logger=self.logger, + ) + self.create_logging_file(self.src_dir, "IvasBuilder") + self.logger.console("Done exporting", logging.INFO) + else: + self.logger.console( + "Revision {} already exported...".format(str(self.revision)), + logging.INFO, + ) + + def build( + self, + sub_dir, + make_options=[], + defines_to_enable=[], + defines_to_disable=[], + instrumented=False, + ): + """ + + Parameters + ---------- + sub_dir : + + make_options : + (Default value = []) + defines_to_enable : + (Default value = []) + defines_to_disable : + (Default value = []) + instrumented : + (Default value = False) + + Returns + ------- + + """ + + self.get_svn_source() + return super().build( + sub_dir=sub_dir, + make_options=make_options, + defines_to_enable=defines_to_enable, + defines_to_disable=defines_to_disable, + instrumented=instrumented, + ) + + +class IvasBuilderAndRunner(IvasBaseClass): + """ """ + + def __init__( + self, + src_dir=None, + svn_url=None, + svn_user=None, + out_dir=None, + revision=None, + svn_pwd=None, + site_config="", + msbuild="", + sample_rate_enc_in=None, + sample_rate_dec_out=None, + enable_logging=False, + console_logger_level="", + logger_name="IvasBuilderAndRunner", + log_level=logging.DEBUG, + ): + super().__init__( + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + ) + if src_dir: + self.builder = IvasBuilder( + src_dir, + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=".".join([logger_name, "builder"]), + log_level=log_level, + msbuild=msbuild + ) + elif svn_url: + self.builder = IvasSvnBuilder( + svn_url=svn_url, + svn_user=svn_user, + out_dir=out_dir, + revision=revision, + svn_pwd=svn_pwd, + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=".".join([logger_name, "svnbuilder"]), + log_level=log_level, + msbuild=msbuild + ) + self.build_and_run_dict = {} + self.site_config = site_config + self.sample_rate_enc_in = sample_rate_enc_in + self.sample_rate_dec_out = sample_rate_dec_out + self.force_build = False + + @classmethod + def fromSvn( + cls, + svn_url="", + svn_user="", + out_dir=None, + revision=None, + svn_pwd="", + site_config="", + msbuild="", + sample_rate_enc_in=None, + sample_rate_dec_out=None, + enable_logging=False, + console_logger_level="", + logger_name="IvasBuilderAndRunner", + log_level=logging.DEBUG, + ): + return cls( + svn_url=svn_url, + svn_user=svn_user, + out_dir=out_dir, + revision=revision, + svn_pwd=svn_pwd, + site_config=site_config, + sample_rate_enc_in=sample_rate_enc_in, + sample_rate_dec_out=sample_rate_dec_out, + enable_logging=enable_logging, + console_logger_level=console_logger_level, + logger_name=logger_name, + log_level=log_level, + msbuild=msbuild + ) + + def add_build_and_run_config( + self, + cfg_name, + run_tool="", + make_options=[], + defines_to_enable=[], + defines_to_disable=[], + format_select_list=None, + mode_select_list=None, + instrumented=False, + sample_rate_enc_in=None, + sample_rate_dec_out=None, + formats_dict={}, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + cfg_name : + + run_tool : + (Default value = "") + make_options : + (Default value = []) + defines_to_enable : + (Default value = []) + defines_to_disable : + (Default value = []) + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + instrumented : + (Default value = False) + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.logger.console( + "config {} already exists, altering it".format(cfg_name), logging.INFO + ) + if format_select_list: + self.build_and_run_dict[cfg_name]["runner"].add_format_select_list( + format_select_list + ) + if mode_select_list: + self.build_and_run_dict[cfg_name]["runner"].add_format_select_list( + mode_select_list + ) + + self.build_and_run_dict[cfg_name]["runner"].test_tool = run_tool + self.build_and_run_dict[cfg_name]["defines_to_enable"] = defines_to_enable + self.build_and_run_dict[cfg_name]["defines_to_disable"] = defines_to_disable + self.build_and_run_dict[cfg_name]["instrumented"] = instrumented + self.build_and_run_dict[cfg_name]["make_options"] = make_options + else: + self.logger.console("Adding config {}".format(cfg_name), logging.INFO) + run_dir = os.path.join(self.builder.src_dir, cfg_name) + if not sample_rate_enc_in: + sample_rate_enc_in = self.sample_rate_enc_in + if not sample_rate_dec_out: + sample_rate_dec_out = self.sample_rate_dec_out + newRunner = IvasModeRunner( + dir_name=run_dir, + bin_suffix=self.builder.binary_ext, + test_tool=run_tool, + site_config=self.site_config, + sample_rate_enc_in=sample_rate_enc_in, + formats_fname=formats_fname, + max_workers=max_workers, + sample_rate_dec_out=sample_rate_dec_out, + formats_dict=formats_dict, + enable_logging=True, + logger_name="{}.{}runner".format(self.logger.name, cfg_name), + log_level=self.logger.level, + ) + if format_select_list: + newRunner.set_format_select_list(format_select_list) + if mode_select_list: + newRunner.set_mode_select_list(mode_select_list) + new_analyzer = IvasModeAnalyzer( + run_dir, + site_config=self.site_config, + formats_dict=formats_dict, + formats_fname=formats_fname, + enable_logging=True, + logger_name="{}.{}analyzer".format(self.logger.name, cfg_name), + log_level=self.logger.level, + ) + cfg_dict = { + cfg_name: { + "runner": newRunner, + "defines_to_enable": defines_to_enable, + "defines_to_disable": defines_to_disable, + "instrumented": instrumented, + "make_options": make_options, + "analyzer": new_analyzer, + } + } + self.build_and_run_dict.update(cfg_dict) + + def set_format_select_list(self, cfg_name, format_select_list): + """ + + Parameters + ---------- + cfg_name : + + format_select_list : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].set_format_select_list( + format_select_list + ) + + def set_mode_select_list(self, cfg_name, mode_select_list): + """ + + Parameters + ---------- + cfg_name : + + mode_select_list : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].set_format_select_list( + mode_select_list + ) + + def add_format_select_list(self, cfg_name, format_select_list): + """ + + Parameters + ---------- + cfg_name : + + format_select_list : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].add_format_select_list( + format_select_list + ) + + def add_mode_select_list(self, cfg_name, mode_select_list): + """ + + Parameters + ---------- + cfg_name : + + mode_select_list : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].add_mode_select_list( + mode_select_list + ) + + def add_format_output_config(self, cfg_name, ivas_format, oc_list): + """ + + Parameters + ---------- + cfg_name : + + ivas_format : + + oc_list : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].add_format_output_config( + ivas_format, oc_list + ) + + def set_format_output_config(self, cfg_name, ivas_format, oc_list): + """ + + Parameters + ---------- + cfg_name : + + ivas_format : + + oc_list : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].set_format_output_config( + ivas_format, oc_list + ) + + def add_bw_select_list(self, cfg_name, bw_list): + """ + + Parameters + ---------- + cfg_name : + + bw_list : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].add_bw_select_list(bw_list) + + def set_run_tool(self, cfg_name, run_tool): + """ + + Parameters + ---------- + cfg_name : + + run_tool : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.build_and_run_dict[cfg_name]["runner"].test_tool = run_tool + + def show_config_list(self): + """ """ + for cfg_name in self.build_and_run_dict: + self.logger.console(cfg_name) + + def build(self, cfg_name): + """ + + Parameters + ---------- + cfg_name : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + out_dir = os.path.join(self.builder.src_dir, cfg_name) + cfg = self.build_and_run_dict[cfg_name] + self.builder.build( + out_dir, + make_options=cfg["make_options"], + defines_to_enable=cfg["defines_to_enable"], + defines_to_disable=cfg["defines_to_disable"], + instrumented=cfg["instrumented"], + ) + self.build_and_run_dict[cfg_name]["runner"].encoder = self.builder.encoder + self.build_and_run_dict[cfg_name]["runner"].decoder = self.builder.decoder + + def run(self, cfg_name): + """ + + Parameters + ---------- + cfg_name : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.logger.console("--------------------------------------------") + self.logger.console(cfg_name) + self.logger.console("--------------------------------------------") + self.logger.info("running configuration {}".format(cfg_name)) + # make sure we have the right directory for the runner + if self.builder.src_dir == "": + self.builder.get_svn_source() + run_dir = os.path.join(self.builder.src_dir, cfg_name) + if not os.path.exists(run_dir) or self.force_build: + # we have to build first + self.build(cfg_name) + else: + # check if binaries are in the directory + # test for EVS vs IVAS + if os.path.exists( + os.path.join( + run_dir, "".join(["IVAS_cod", self.builder.binary_ext]) + ) + ) and os.path.exists( + os.path.join( + run_dir, "".join(["IVAS_dec", self.builder.binary_ext]) + ) + ): + self.build_and_run_dict[cfg_name]["runner"].encoder = os.path.join( + run_dir, "".join(["IVAS_cod", self.builder.binary_ext]) + ) + self.build_and_run_dict[cfg_name]["runner"].decoder = os.path.join( + run_dir, "".join(["IVAS_dec", self.builder.binary_ext]) + ) + elif os.path.exists( + os.path.join(run_dir, "".join(["EVS_cod", self.builder.binary_ext])) + ) and os.path.exists( + os.path.join(run_dir, "".join(["EVS_dec", self.builder.binary_ext])) + ): + self.build_and_run_dict[cfg_name]["runner"].encoder = os.path.join( + run_dir, "".join(["EVS_cod", self.builder.binary_ext]) + ) + self.build_and_run_dict[cfg_name]["runner"].decoder = os.path.join( + run_dir, "".join(["EVS_dec", self.builder.binary_ext]) + ) + else: + # no binaries there, maybe we need to build again + self.builder.logger.info( + "Binaries for config {} do not exist, trying to rebuild them".format( + cfg_name + ) + ) + self.build(cfg_name) + self.build_and_run_dict[cfg_name]["runner"].dir_name = run_dir + self.build_and_run_dict[cfg_name]["analyzer"].dir = run_dir + self.build_and_run_dict[cfg_name]["runner"].run() + if self.build_and_run_dict[cfg_name]["analyzer"].get_errors: + failed_modes = self.build_and_run_dict[cfg_name]["runner"].failed_modes + self.build_and_run_dict[cfg_name]["analyzer"].get_errors(failed_modes) + + def get_run_errors(self, cfg_name): + """ + + Parameters + ---------- + cfg_name : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + if self.build_and_run_dict[cfg_name]["analyzer"]: + if self.build_and_run_dict[cfg_name]["analyzer"].get_run_errors: + self.build_and_run_dict[cfg_name]["analyzer"].get_run_errors() + + def build_and_run_cfg(self, cfg_name): + """ + + Parameters + ---------- + cfg_name : + + + Returns + ------- + + """ + if cfg_name in self.build_and_run_dict: + self.logger.console("--------------------------------------------") + self.logger.console(cfg_name) + self.logger.console("--------------------------------------------") + self.logger.info("Building and running configuration {}".format(cfg_name)) + self.build(cfg_name) + self.run(cfg_name) + + def build_and_run_all(self): + """ """ + for cfg_name in self.build_and_run_dict: + self.build_and_run_cfg(cfg_name) + + def build_all(self): + """ """ + for cfg_name in self.build_and_run_dict: + self.build(cfg_name) + + def run_all(self): + """ """ + for cfg_name in self.build_and_run_dict: + self.run(cfg_name) + + def add_check( + self, + check, + format_select_list=None, + mode_select_list=None, + defines_to_enable=None, + defines_to_disable=None, + formats_fname="", + max_workers=1, + ): + + make_options = list() + run_tool = "" + if defines_to_enable is None: + defines_to_enable_check = [] + else: + defines_to_enable_check = defines_to_enable.copy() + if defines_to_disable is None: + defines_to_disable_check = [] + else: + defines_to_disable_check = defines_to_disable.copy() + if check.startswith("CLANG"): + make_options.append("CLANG=" + check[-1]) + defines_to_disable_check.extend(["RAM_COUNTING_TOOL"]) + elif check == "VALGRIND": + defines_to_disable_check.extend(["RAM_COUNTING_TOOL"]) + run_tool = [ + "valgrind", + "-v", + "--tool=memcheck", + "--leak-check=yes", + "--show-reachable=yes", + "--num-callers=20", + ] + + self.add_build_and_run_config( + check, + run_tool=run_tool, + make_options=make_options, + format_select_list=format_select_list, + mode_select_list=mode_select_list, + defines_to_enable=defines_to_enable_check, + defines_to_disable=defines_to_disable_check, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.build_and_run_dict[check]["analyzer"].check = check + + def add_complexity( + self, + format_select_list=None, + mode_select_list=None, + defines_to_enable=None, + defines_to_disable=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + if defines_to_enable is None: + defines_to_enable_check = [] + else: + defines_to_enable_check = defines_to_enable.copy() + if defines_to_disable is None: + defines_to_disable_check = [] + else: + defines_to_disable_check = defines_to_disable.copy() + self.add_build_and_run_config( + "COMPLEXITY", + make_options=["DEBUG=0"], + instrumented=True, + format_select_list=format_select_list, + mode_select_list=mode_select_list, + defines_to_enable=defines_to_enable_check, + defines_to_disable=defines_to_disable_check, + formats_fname=formats_fname, + max_workers=max_workers, + ) + + # TODO: this is used nowhere, is this still needed? + def add_all_checks( + self, + format_select_list=None, + mode_select_list=None, + defines_to_enable=None, + defines_to_disable=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + checks = ["CLANG1", "CLANG2", "CLANG3", "VALGRIND"] + for check in checks: + self.add_check( + check, + format_select_list=format_select_list, + mode_select_list=mode_select_list, + defines_to_enable=defines_to_enable, + defines_to_disable=defines_to_disable, + formats_fname=formats_fname, + max_workers=max_workers, + ) + + def valgrind( + self, + format_select_list=None, + mode_select_list=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + self.add_check( + self, + "VALGRIND", + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.build_and_run_cfg("VALGRIND") + + def clang1( + self, + format_select_list=None, + mode_select_list=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + self.add_check( + self, + "CLANG1", + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.build_and_run_cfg("CLANG1") + + def clang2( + self, + format_select_list=None, + mode_select_list=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + self.add_check( + self, + "CLANG2", + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.build_and_run_cfg("CLANG2") + + def clang3( + self, + format_select_list=None, + mode_select_list=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + self.add_check( + self, + "CLANG3", + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.build_and_run_cfg("CLANG3") + + def all_tests( + self, + format_select_list=None, + mode_select_list=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + self.clang1( + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.clang2( + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.clang3( + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.valgrind( + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + + def complexity( + self, + format_select_list=None, + mode_select_list=None, + formats_fname="", + max_workers=1, + ): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + mode_select_list : + (Default value = None) + + Returns + ------- + + """ + self.add_complexity( + format_select_list=format_select_list, + mode_select_list=mode_select_list, + formats_fname=formats_fname, + max_workers=max_workers, + ) + self.build_and_run_cfg("COMPLEXITY") + + def get_analyzer(self, cfg_name): + """ + + Parameters + ---------- + format_select_list : + (Default value = None) + format_select_list : + (Default value = None) + + Returns + ------- + + """ + return self.build_and_run_dict[cfg_name]["analyzer"] diff --git a/scripts/pyivastest/__init__.py b/scripts/pyivastest/__init__.py new file mode 100644 index 0000000000..4196e89439 --- /dev/null +++ b/scripts/pyivastest/__init__.py @@ -0,0 +1,51 @@ +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + + +""" +pyivastest +==== + +Provides + Classes and methods for testing IVAS + +Imports +------- +functions +class +""" +from . import constants +from . import IvasBaseClass +from . import IvasModeAnalyzer +from . import IvasModeCollector +from . import IvasModeRunner +from . import IvasScriptsCommon +from . import IvasSvnBuilder +from . import ivas_svn diff --git a/scripts/pyivastest/constants.py b/scripts/pyivastest/constants.py new file mode 100644 index 0000000000..89ab93b727 --- /dev/null +++ b/scripts/pyivastest/constants.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os.path + +DEFAULT_IVAS_REPO_URL = "" +WC_BASE_DIR = os.path.realpath( + os.path.join(os.path.realpath(os.path.dirname(__file__)), "../../") +) +SCRIPTS_BASE_DIR = os.path.realpath( + os.path.join(os.path.realpath(os.path.dirname(__file__)), "../") +) +SCRIPTS_CONFIGS_DIR = os.path.realpath(os.path.join(SCRIPTS_BASE_DIR, "config")) +SW_FILES_BASE_DIR = os.path.realpath( + os.path.join(os.path.dirname(__file__), "../switchPaths/",) +) +OC_TO_NCHANNELS = { + "MONO": 1, + "STEREO": 2, + "BINAURAL": 2, + "BINAURAL_ROOM": 2, + "5_1": 6, + "7_1": 8, + "5_1_2": 8, + "5_1_4": 10, + "7_1_4": 12, + "FOA": 4, + "HOA2": 9, + "HOA3": 16, + "EXT": 1, + "ISM1": 1, + "ISM2": 2, + "ISM3": 3, + "ISM4": 4, + "MASA1TC": 1, + "MASA2TC": 2, +} +DECODER_OUTPUT_CONFIGS = {"MONO", "STEREO", "BINAURAL", "BINAURAL_ROOM", "5_1", "7_1", "5_1_4", "5_1_2", + "7_1_4", "FOA", "HOA2", "HOA3", "EXT"} +LOG_FILE_EXT = ".txt" +LOG_FILE_DIR ="logs" +DEFAULT_IVAS_FORMAT_FILE = "ivas_modes.json" +SPAR_BITRATES = [] diff --git a/scripts/pyivastest/ivas_svn.py b/scripts/pyivastest/ivas_svn.py new file mode 100644 index 0000000000..b5061515c4 --- /dev/null +++ b/scripts/pyivastest/ivas_svn.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import urllib +import subprocess +import xml.etree.ElementTree + + +def run_svn_command(svn_command, logger=None, err_except_list=None): + svn_base_cmd = ["svn", "--non-interactive"] + full_cmd = svn_base_cmd + svn_command + if logger is not None: + logger.info("Running svn command '{}'".format(full_cmd)) + result = subprocess.run( + list(filter(None, full_cmd)), stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + if logger is not None and result.returncode != 0: + if isinstance(err_except_list, str): + err_except_list = [err_except_list] + if not any([err in result.stderr.decode() for err in err_except_list]): + logger.info( + "svn command failed with returncode {}".format(result.returncode) + ) + logger.info(result.stderr.decode()) + logger.info(result.stdout.decode()) + + if result.returncode == 0: + return result.stdout.decode() + else: + return None + + +def run_local_svn_command(svn_command, logger=None, err_except_list=None): + return run_svn_command(svn_command, logger=logger, err_except_list=err_except_list) + + +def run_remote_svn_command( + svn_command, username="", password="", logger=None, err_except_list=None +): + # always trust server cert cert + remote_cmd = ["--trust-server-cert"] + if username != "": + remote_cmd.extend(["--username", username]) + if password != "": + remote_cmd.extend(["--password", password]) + remote_cmd.extend(svn_command) + return run_svn_command(remote_cmd, logger=logger, err_except_list=err_except_list) + + +def get_local_svn_info(local_path: str, logger=None, err_except_list=None): + # self.logger.info("Fetch svn info") + result = run_local_svn_command( + ["info", "--xml", local_path], logger=logger, err_except_list=err_except_list + ) + if result is not None: + root = xml.etree.ElementTree.fromstring(result) + svn_info = { + "entry_path": root.find("entry").attrib["path"], + "root": root.find("entry/repository/root").text, + "url": root.find("entry/url").text, + "commit_revision": int(root.find("entry/commit").attrib["revision"]), + } + return svn_info + else: + return None + + +def get_remote_svn_info(svn_url, username="", password="", logger=None): + logger.info("Fetch remote svn info for {}".format(svn_url)) + result = run_remote_svn_command( + ["info", "--xml", svn_url], username=username, password=password, logger=logger + ) + if result is not None: + root = xml.etree.ElementTree.fromstring(result) + svn_info = { + "entry_path": root.find("entry").attrib["path"], + "commit_revision": int(root.find("entry/commit").attrib["revision"]), + } + return svn_info + else: + return None + + +def get_svn_auth_info(svn_url, logger=None): + svn_lines = run_local_svn_command(["auth"], logger=logger).split("\n") + found = 0 + credential_type_simple = False + has_password = False + root_url = urllib.parse.urlsplit(svn_url) + base_url = "://".join([root_url.scheme, root_url.netloc]) + username = "" + auth_info = {} + for line in svn_lines: + # print(line) + + if "Credential kind" in line: + if "svn.simple": + credential_type_simple = True + else: + credential_type_simple = False + found = 0 + elif base_url in line and credential_type_simple is True: + # print(line) + found = 1 + elif found: + # print(line) + if "Username:" in line: + username = line.split()[1] + if "Password:" in line: + has_password = True + + auth_info.update({"username": username, "has_password": has_password}) + return auth_info + + +def svn_export( + svn_url, local_dir, revision="HEAD", username="", password="", logger=None +): + logger.info( + "Exporting revision {} of {} to {}".format(revision, svn_url, local_dir) + ) + result = run_remote_svn_command( + ["export", "-q", "-r", str(revision), svn_url, local_dir], + username=username, + password=password, + logger=logger, + ) + + return result + + +def svn_update( + svn_url, local_dir, revision="HEAD", username="", password="", logger=None +): + logger.info("Updating {} to revision {} of {}".format(local_dir, revision, svn_url)) + result = run_remote_svn_command( + ["update", "-q", "-r", str(revision), local_dir], + username=username, + password=password, + logger=logger, + ) + + return result + + +def svn_checkout( + svn_url, local_dir, revision="HEAD", username="", password="", logger=None +): + logger.info( + "Checking out revision {} of {} to {}".format(revision, svn_url, local_dir) + ) + result = run_remote_svn_command( + ["checkout", "-q", "--force", "-r", str(revision), svn_url, local_dir], + username=username, + password=password, + logger=logger, + ) + + return result diff --git a/scripts/pyprocessing/__init__.py b/scripts/pyprocessing/__init__.py new file mode 100644 index 0000000000..1db673e951 --- /dev/null +++ b/scripts/pyprocessing/__init__.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +""" +pyprocessing +==== + +Provides + Methods for processing/coding 3D audio + +Imports +------- +functions +class +""" +from . import evs, ivas, prepost_processing, processing, processing_configs, utils diff --git a/scripts/pyprocessing/evs.py b/scripts/pyprocessing/evs.py new file mode 100644 index 0000000000..f04e81e7b8 --- /dev/null +++ b/scripts/pyprocessing/evs.py @@ -0,0 +1,245 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os + +from pyaudio3dtools import audiofile, prerenderer, spatialaudioformat, spatialmetadata + +from pyprocessing import utils +from pyprocessing.processing import Processing + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +class EVS(Processing): + def __init__( + self, + in_format: str, + out_format: str, + bitrate: int, + in_fs: int = 48000, + **kwargs, + ): + super().__init__() + for k, v in kwargs.items(): + setattr(self, k, v) + self.in_format = spatialaudioformat.Format(in_format) + self.out_format = spatialaudioformat.Format(out_format) + if isinstance(bitrate, int): + self.bitrate = [bitrate] + if self.in_format.nchannels > 0: + self.bitrate = [bitrate] * self.in_format.nchannels + elif isinstance(bitrate, list): + self.bitrate = bitrate + if self.in_format.nchannels > 0: + self.bitrate.extend([0] * (self.in_format.nchannels - len(bitrate))) + self.in_fs = in_fs + self.exec_enc = utils.get_exec_path(kwargs["cod_bin"]) + self.exec_dec = utils.get_exec_path(kwargs["dec_bin"]) + + if in_format != out_format: + raise ValueError(f"EVS_: output format must be equal to input format.") + if not os.path.exists(self.exec_enc): + raise FileNotFoundError( + f"The EVS encoder binary was not found at the given path: {self.exec_enc}" + ) + if not os.path.exists(self.exec_dec): + raise FileNotFoundError( + f"The EVS decoder binary was not found at the given path: {self.exec_dec}" + ) + + def process(self, input_path: str, output_path: str, tmp_path: str) -> None: + logger.debug(f"EVS {input_path} -> {output_path}") + # Read input file + _, input_ext = os.path.splitext(os.path.basename(input_path)) + _, output_ext = os.path.splitext(os.path.basename(output_path)) + if input_ext == ".txt": + metadata_obj = spatialmetadata.Metadata(input_path, audio_fs=self.in_fs) + input_multi_channels = output_path.replace(output_ext, ".pcm") + if self.in_format.name[:3] == "ISM": + # extract IVAS ISM metadata and + input_csv = output_path.replace(output_ext, ".csv") + metadata_files = metadata_obj.write_metadata( + input_csv, "ivas_ism", input_multi_channels, max_objects=4 + ) + # change number of ISM + self.in_format.name = "ISM" + str(len(metadata_files)) + self.in_format = spatialaudioformat.Format(self.in_format.name[:4]) + if len(self.bitrate) < len(metadata_files): + self.bitrate.extend( + [self.bitrate[-1]] * (len(metadata_files) - len(self.bitrate)) + ) + else: + in_sig, fs = metadata_obj.get_audio_array() + # pre-render to desired input format + in_sig = prerenderer.render_from_array( + in_sig, + input_path, + self.in_format_config.altname, + audio_out_path=input_path.replace(".txt", "_prerenderer.wav"), + frame_size_ms=20, + fs=metadata_obj.audio_fs, + ) + audiofile.writefile(input_multi_channels, in_sig, self.in_fs) + elif input_ext == ".wav" or input_ext == ".pcm": + input_multi_channels = input_path + else: + raise ValueError(f"EVS: invalid audio input extension: {input_ext}") + + # Split the corresponding channels at enc_fs + split_chans_in = [] + for idx in range(self.in_format.nchannels): + split_chans_in.append( + output_path.replace(output_ext, "." + str(idx) + ".pcm") + ) + + audiofile.splitfiles( + input_multi_channels, + split_chans_in, + in_nchans=self.in_format.nchannels, + in_fs=self.in_fs, + out_fs=self.enc_fs, + ) + + # Zero vertical Ambi channels if planar + mute_next_chan = -1 + if self.in_format.ambi_order > 0 and self.in_format.isplanar: + mute_chans_enum = enumerate(self.in_format.get_vert_hoa_channels()) + _, mute_next_chan = next(mute_chans_enum) + + # run processing + split_chans_out = [] + for idx, split_in in enumerate(split_chans_in): + split_bs = split_in.replace(".pcm", ".bs") + split_out = split_in.replace(".pcm", ".dec.pcm") + + # Zero vertical Ambi channels if planar + if idx == mute_next_chan: + audiofile.mutefile(split_in, split_in, in_fs=self.enc_fs, in_nchans=1) + try: + _, mute_next_chan = next(mute_chans_enum) + except: + pass + + if self.bitrate[idx] > 0: + self.enc(split_in, split_bs, self.bitrate[idx]) + self.dec(split_bs, split_out) + else: + # zero channel + audiofile.convertfile( + split_in, split_out, in_fs=self.enc_fs, out_fs=self.dec_fs + ) + audiofile.mutefile(split_out, split_out, in_fs=self.dec_fs, in_nchans=1) + + split_chans_out.append(split_out) + + # Output file: combine waveform files into one output, and optinaly write iis metadata + if output_ext == ".pcm" or output_ext == ".wav": + audiofile.combinefiles( + split_chans_out, output_path, in_fs=self.dec_fs, out_fs=self.dec_fs + ) + elif output_ext == ".txt": + output_wav = output_path.replace(output_ext, ".wav") + if self.in_format.name[:3] == "ISM": + # Write new metadata + metadata_out_obj = spatialmetadata.Metadata(audio_fs=self.dec_fs) + for idx in range(self.in_format.nchannels): + logger.debug( + "EVS_mono Read metadata " + + metadata_files[idx] + + " with audio file " + + split_chans_out[idx] + ) + metadata_out_obj.read_metadata( + metadata_files[idx], + metadata_format="ivas_ism", + audio_wav_path=split_chans_out[idx], + ) + metadata_out_obj.write_metadata( + output_path, + metadata_format="iis", + audio_output_path=os.path.basename(output_wav), + ) + else: + # pass-trhough mode, rewrite only audio waveform with decoded file + audiofile.combinefiles( + split_chans_out, output_wav, in_fs=self.dec_fs, out_fs=self.dec_fs + ) + metadata_obj.write_metadata(output_path, metadata_format="iis") + else: + raise ValueError(f"EVS: invalid audio input extension: {output_ext}") + + def enc(self, input_wav: str, output_bs: str, bitrate: int) -> None: + input_pcm = output_bs.replace(".bs", ".pcm") + audiofile.convertfile(input_wav, input_pcm, out_nchans=1, out_fs=self.in_fs) + + cmd = [self.exec_enc] + if self.dtx: + cmd.append("-dtx") + + if self.cod_opt: + cmd.extend(self.cod_opt) + + cmd.extend( + [ + "-max_band", + self.max_band, + str(bitrate), + str(self.enc_fs // 1000), + input_pcm, + output_bs, + ] + ) + Processing.run(cmd) + + def dec(self, input_bs: str, output_wav: str) -> None: + cmd = [self.exec_dec] + + if self.dec_opt: + cmd.extend(self.dec_opt) + + cmd.extend([str(self.dec_fs // 1000), input_bs, output_wav]) + Processing.run(cmd) + + def get_processing_file_paths(self, template_out_file: str, input_ext: str) -> list: + if input_ext == ".wav" or input_ext == ".pcm": + return [template_out_file.replace(".wav", "_evs_mono.wav")] + elif input_ext == ".txt": + return [template_out_file.replace(".wav", "_evs_mono.txt")] + else: + raise ValueError(f"EVS: invalid audio input extension: {input_ext}") + + def get_total_bit_rate(self): + return sum(self.bitrate) diff --git a/scripts/pyprocessing/ivas.py b/scripts/pyprocessing/ivas.py new file mode 100644 index 0000000000..4ee07f3cef --- /dev/null +++ b/scripts/pyprocessing/ivas.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os +from typing import Optional + +from pyaudio3dtools import audiofile, prerenderer, spatialaudioformat, spatialmetadata + +from pyprocessing import utils +from pyprocessing.processing import Processing + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +class IVAS(Processing): + def __init__(self, in_format: str, bitrate: int, in_fs: int = 48000, **kwargs): + super().__init__() + for k, v in kwargs.items(): + setattr(self, k, v) + self.in_format = spatialaudioformat.Format(in_format) + self.bitrate = bitrate + self.in_fs = in_fs + self.out_format = spatialaudioformat.Format(kwargs["out_format"]) + self.exec_enc = utils.get_exec_path(kwargs["cod_bin"]) + self.exec_dec = utils.get_exec_path(kwargs["dec_bin"]) + self.ht_file = os.path.abspath(self.ht_file) + + if self.out_format.name == "ISM": + self.out_format.name = "EXT" + + if not os.path.exists(self.exec_enc): + raise FileNotFoundError( + f"The IVAS encoder binary was not found at the given path: {self.exec_enc}" + ) + if not os.path.exists(self.exec_dec): + raise FileNotFoundError( + f"The IVAS decoder binary was not found at the given path: {self.exec_dec}" + ) + + def process(self, input_path: str, output_path: str, tmp_path: str) -> None: + logger.debug(f"IVAS {input_path} -> {output_path}") + + _, output_ext = os.path.splitext(os.path.basename(output_path)) + if output_ext == ".wav": + output_bs = output_path.replace(".wav", ".bs") + else: + raise ValueError(f"IVAS: invalid audio input extension: {output_ext}") + + self.enc(input_path, output_bs) + self.dec(output_bs, output_path) + + def enc(self, input_path: str, output_bs: str) -> None: + logger.debug(f"IVAS encoder {input_path} -> {output_bs}") + + # Only resample and convert if wav, otherwise supposed pcm to be sampled at self.in_fs + _, input_ext = os.path.splitext(os.path.basename(input_path)) + metadata_files = [] + + # for MASA suppose that metadata file as same basename and location as input file + if self.in_format.name.lower()[:4] == "masa": + metadata_files.append(input_path.replace(input_ext, ".met")) + + # Support input file wav, pcm and txt (metadata iis) + if (input_ext == ".wav") or (input_ext == ".pcm"): + input_pcm = output_bs.replace(".bs", ".pcm") + audiofile.convertfile( + input_path, + input_pcm, + in_fs=self.in_fs, + out_fs=self.enc_fs, + in_nchans=self.in_format.nchannels, + out_nchans=self.in_format.nchannels, + ) + elif input_ext == ".txt": + metadata_obj = spatialmetadata.Metadata(input_path, audio_fs=self.enc_fs) + input_pcm = output_bs.replace(".bs", ".pcm") + input_csv = output_bs.replace(".bs", ".csv") + if self.in_format.name[:3] == "ISM": + # extract IVAS ISM metadata and + metadata_files = metadata_obj.write_metadata( + input_csv, "ivas_ism", input_pcm, max_objects=4 + ) + + # change number of ISM + self.in_format.name = "ISM" + str(len(metadata_files)) + self.in_format = spatialaudioformat.Format(self.in_format.name[:4]) + else: + in_sig, fs = metadata_obj.get_audio_array() + # pre-render to desired input format + in_sig = prerenderer.render_from_array( + in_sig, + input_path, + self.in_format_config.altname, + audio_out_path=input_path.replace(".txt", "_prerenderer.wav"), + frame_size_ms=20, + fs=metadata_obj.audio_fs, + ) + audiofile.writefile(input_pcm, in_sig, self.enc_fs) + else: + raise ValueError(f"IVAS: invalid audio input extension: {input_ext}") + + cmd = [self.exec_enc] + if self.dtx: + cmd.append("-dtx") + + if self.cod_opt: + cmd.extend(self.cod_opt) + + cmd.extend( + [ + *IVAS.parse_config(self.in_format, metadata_files), + "-max_band", + self.max_band, + str(self.bitrate), + str(self.enc_fs // 1000), + input_pcm, + output_bs, + ] + ) + Processing.run(cmd) + + def dec(self, input_bs: str, output_wav: str) -> None: + logger.debug(f"IVAS decoder {input_bs} -> {output_wav}") + + cmd = [self.exec_dec] + if self.head_tracking: + cmd.extend(["-T", self.ht_file]) + + if self.plc: + cmd.extend(["-FEC", str(self.plc_rate)]) + + if self.dec_opt: + cmd.extend(self.dec_opt) + + cmd.extend( + [ + self.out_format.name, + str(self.dec_fs // 1000), + input_bs, + output_wav, + ] + ) + Processing.run(cmd) + + @staticmethod + def parse_config(spformat: spatialaudioformat, metadata_files: Optional[list] = []): + name = spformat.name.lower() + + if name == "mono": + return [""] + elif name == "stereo": + return ["-stereo"] + elif name.startswith("ism"): + # replace any missing files with NULL + while len(metadata_files) < int(name[-1]): + metadata_files.append("NULL") + return ["-ism", name[-1]] + metadata_files[: int(name[-1])] + elif name.startswith("masa"): + return ["-masa", name[-1], metadata_files[0]] + elif spformat.ambi_order > 0: + if spformat.isplanar: + return ["-sba", f"-{spformat.ambi_order}"] + else: + return ["-sba", f"+{spformat.ambi_order}"] + elif spformat.isloudspeaker: + return ["-mc", name] + + raise ValueError(f"IVAS: Invalid input config: {spformat}") + + def get_processing_file_paths( + self, template_out_file: str, input_ext: Optional[str] = None + ) -> list: + return [template_out_file.replace(".wav", "_ivas.wav")] + + def get_total_bit_rate(self): + return self.bitrate diff --git a/scripts/pyprocessing/prepost_processing.py b/scripts/pyprocessing/prepost_processing.py new file mode 100644 index 0000000000..4834b7fba2 --- /dev/null +++ b/scripts/pyprocessing/prepost_processing.py @@ -0,0 +1,225 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import json +import logging +import os +import shutil +from typing import Optional + +from pyaudio3dtools import ( + audioarray, + audiofile, + binauralrenderer, + spatialaudioconvert, + spatialaudioformat, +) + +from pyprocessing import utils +from pyprocessing.processing import Processing + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +class PreProcessing(Processing): + def __init__( + self, + out_format: str, + out_fs: int = 48000, + out_fc: Optional[int] = None, + prerenderer_bin: str = "../IVAS_prerenderer", + output_loudness: Optional[int] = None, + loudness_tool: Optional[str] = "bs1770demo", + ): + super().__init__() + self.out_format = out_format + self.out_fs = out_fs + self.fc = out_fc + self.prerenderer_bin = utils.get_exec_path(prerenderer_bin) + self.output_loudness = output_loudness + self.loudness_tool = loudness_tool + + def process(self, input_path: str, output_path: str, tmp_path: str): + output_nickname = utils.get_nickname(output_path) + logger.info( + f" Pre Processing: convert to {self.out_format} : {output_nickname}" + ) + + try: + spatialaudioconvert.spatial_audio_convert( + input_path, + tmp_path, + out_format=self.out_format, + out_fs=self.out_fs, + prerenderer_bin=self.prerenderer_bin, + output_loudness=self.output_loudness, + loudness_tool=self.loudness_tool, + ) + except Exception as e: + logger.info( + f" Pre Processing: by-pass : {output_nickname}. Encountered exception {e}" + ) + else: + shutil.move(tmp_path, output_path) + + def get_processing_file_paths( + self, template_out_file: str, input_ext: Optional[str] = None + ) -> list: + return [template_out_file.replace(".wav", "_pre.wav")] + + +class PostProcessing(Processing): + def __init__( + self, + in_format: str, + out_format: str, + in_fs: int = 48000, + out_fs: int = 48000, + out_fc: Optional[int] = None, + binaural_rendered: bool = False, + limit_output: bool = False, + cut_preamble: float = 0.0, + split_file_path: str = "", + prerenderer_bin: str = "../IVAS_prerenderer", + bin_rend_include_LFE: bool = False, + bin_rend_LFE_gain: float = 1.0, + binaural_dataset: Optional[str] = "orange53", + output_loudness: Optional[int] = None, + loudness_tool: Optional[str] = "bs1770demo", + ): + super().__init__() + self.in_format_config = spatialaudioformat.Format(in_format=in_format) + self.out_format_config = spatialaudioformat.Format(in_format=out_format) + + self.in_fs = in_fs + self.out_fs = out_fs + self.fc = out_fc + self.binaural_rendered = binaural_rendered + self.cut_preamble = cut_preamble + self.split_file_path = split_file_path + self.prerenderer_bin = utils.get_exec_path(prerenderer_bin) + self.bin_rend_include_LFE = bin_rend_include_LFE + self.bin_rend_LFE_gain = bin_rend_LFE_gain + self.binaural_dataset = binaural_dataset + self.limit_output = limit_output + self.output_loudness = output_loudness + self.loudness_tool = loudness_tool + + def process(self, input_path: str, output_path: str, tmp_path: str): + output_nickname = utils.get_nickname(output_path) + logger.info( + f" Post Processing: {self.in_format_config.name} -> {self.out_format_config.name} : {output_nickname}" + ) + + # Spatial audio format conversion + spatialaudioconvert.spatial_audio_convert( + input_path, + tmp_path, + in_format=self.in_format_config.name, + out_format=self.out_format_config.name, + in_fs=self.in_fs, + out_fs=self.out_fs, + out_fc=self.fc, + cut_preamble_s=self.cut_preamble, + prerenderer_bin=self.prerenderer_bin, + limit_output=self.limit_output, + bin_rend_include_LFE=self.bin_rend_include_LFE, + bin_rend_LFE_gain=self.bin_rend_LFE_gain, + output_loudness=self.output_loudness, + loudness_tool=self.loudness_tool, + binaural_dataset=self.binaural_dataset, + ) + shutil.move(tmp_path, output_path) + + # Binaural rendering + if self.binaural_rendered and "BINAURAL" not in self.out_format_config.name: + out_sig, fs = audiofile.readfile(output_path) + bin_sig = binauralrenderer.binaural_rendering( + out_sig, + self.out_format_config.name, + fs=fs, + include_LFE=self.bin_rend_include_LFE, + LFE_gain=self.bin_rend_LFE_gain, + ) + output_binaural_wav = output_path.replace(".wav", "_BINAURAL.wav") + logger.info( + f" Rendering {self.out_format_config.name} -> BINAURAL : {output_nickname[:-4]}_BINAURAL.wav" + ) + if self.limit_output: + logger.info(f" limiting") + audioarray.limiter(bin_sig, self.out_fs) + audiofile.writefile(output_binaural_wav, bin_sig, self.out_fs) + + # split file + if self.split_file_path: + # check for the split info + split_file_name = os.path.join( + self.split_file_path, + "".join( + [ + os.path.basename(output_path) + .replace(".wav", "") + .replace("_post", ""), + ".split", + ] + ), + ) + if os.path.exists(split_file_name): + fp = open(split_file_name, "r") + splits = json.load(fp) + fp.close + n_splits = len(splits) - 1 + for split_idx in range(n_splits): + output_path_split = output_path.replace( + ".wav", f"_split{split_idx}.wav" + ) + start = int(splits[split_idx] * self.out_fs) + stop = int(splits[split_idx + 1] * self.out_fs) + split_sig = audioarray.cut(out_sig, (start, stop)) + audiofile.writefile(output_path_split, split_sig, self.out_fs) + if (self.binaural_rendered is True) and ( + self.out_format_config.name != "BINAURAL" + ): + output_bin_wav_split = output_binaural_wav.replace( + ".wav", f"_split{split_idx}.wav" + ) + split_sig = audioarray.cut(bin_sig, (start, stop)) + audiofile.writefile( + output_bin_wav_split, split_sig, self.out_fs + ) + + def get_processing_file_paths( + self, template_out_file: str, input_ext: Optional[str] = None + ) -> list: + return [template_out_file.replace(".wav", "_post.wav")] diff --git a/scripts/pyprocessing/processing.py b/scripts/pyprocessing/processing.py new file mode 100644 index 0000000000..ec7deb66f4 --- /dev/null +++ b/scripts/pyprocessing/processing.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os +import subprocess +from abc import ABC, abstractmethod + +global_print_cmd_only = False +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + + +class Processing(ABC): + def __init__(self): + pass + + @abstractmethod + def process(self, input_path: str, output_path: str, tmp_path: str) -> None: + pass + + @abstractmethod + def get_processing_file_paths(self, template_out_file: str) -> list: + pass + + @staticmethod + def run(cmd: list) -> None: + Processing.print_cmd(cmd) + + if not global_print_cmd_only: + try: + result = subprocess.run(cmd, check=True, capture_output=True, text=True) + except subprocess.CalledProcessError as e: + logger.debug(f"Command returned non-zero exit status : {e.returncode}") + logger.debug(e.stderr) + logger.debug(e.stdout) + raise SystemError( + f"Command returned non-zero exit status ({e.returncode}): {' '.join(e.cmd)}\n{e.stderr}\n{e.stdout}" + ) + + logger.debug(result.stderr) + logger.debug(result.stdout) + + @staticmethod + def run_python(cmd: list) -> None: + Processing.print_cmd(cmd) + + if not global_print_cmd_only: + result = subprocess.run( + ["python3"] + cmd, check=True, capture_output=True, text=True + ) + logger.debug(result.stderr) + logger.debug(str(result.stdout)) + + @staticmethod + def print_cmd(cmd: list) -> None: + cmd[:] = [i if i is not None else "MISSING" for i in cmd] + logger.debug(f"Running command: {' '.join(cmd)}") + if "MISSING" in cmd: + logger.error("Missing arg in command") + raise ValueError("Missing arg in command") + + +def process_chain( + proc_chain: list, + input_path: str, + output_wav: str, + tmp_folder_path: str = os.path.abspath("tmp"), +) -> None: + tmp_file_template_name = os.path.join(tmp_folder_path, os.path.basename(output_wav)) + + # Prepare a chain of of input/tmp/output files + processing_paths = [input_path] + for p in proc_chain: + _, input_ext = os.path.splitext(processing_paths[-1]) + processing_paths.extend( + p.get_processing_file_paths(tmp_file_template_name, input_ext=input_ext) + ) + + # Temporary files if needed + tmp_processing_paths = processing_paths[:] + tmp_path_iter = iter(tmp_processing_paths) + next(tmp_path_iter) + + # Replace last with real output + processing_paths[-1] = output_wav + in_path_iter = iter(processing_paths) + out_path_iter = iter(processing_paths) + next(out_path_iter) + + # go through processing chain + for p in proc_chain: + p.process(next(in_path_iter), next(out_path_iter), next(tmp_path_iter)) diff --git a/scripts/pyprocessing/processing_configs.py b/scripts/pyprocessing/processing_configs.py new file mode 100644 index 0000000000..a1594259b5 --- /dev/null +++ b/scripts/pyprocessing/processing_configs.py @@ -0,0 +1,375 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import json +import logging +import os + +from pyprocessing.evs import EVS +from pyprocessing.ivas import IVAS +from pyprocessing.prepost_processing import PostProcessing, PreProcessing +from pyprocessing.utils import list_audio + +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + +# Parse a JSON file into class and perform necessary validation +class test_config: + def __init__(self, filename: str): + # Open and read configuration test file + with open(filename, "r") as fp: + config_dict = json.load(fp) + + # Init lists of conditions and associated folders + self.list_of_conditions = list() + self.output_folders = list() + self.tmp_folders = list() + + # Set defaults + self._set_defaults() + + # Set/override class attributes based on JSON file and update internal dict + for key, value in config_dict.items(): + # update subdictionaries in case of ivas and evs + if key.startswith("ivas"): + setattr(self, key, self.DEFAULTS_ivas.copy()) + getattr(self, key).update(value) + self.dict[key] = self.DEFAULTS_ivas.copy() + self.dict[key].update(value) + elif key.startswith("evs"): + setattr(self, key, self.DEFAULTS_evs.copy()) + getattr(self, key).update(value) + self.dict[key] = self.DEFAULTS_evs.copy() + self.dict[key].update(value) + # avoid overwriting the whole subkey, merge instead + elif hasattr(self, key) and isinstance(getattr(self, key), dict): + for k, v in value.items(): + getattr(self, key)[k] = v + self.dict[key][k] = v + else: + setattr(self, key, value) + self.dict[key] = value + + # Check required keys + REQUIRED_KEYS = [ + "name", + "input_path", + "output_path", + "in_format", + "renderer_format", + "conditions_to_generate", + ] + REQUIRED_KEYS_IVAS = ["bitrates", "out_format"] + REQUIRED_KEYS_EVS = ["bitrates"] + MISSING_KEYS = list() + + for key in REQUIRED_KEYS: + if not hasattr(self, key): + MISSING_KEYS.append(key) + elif not getattr(self, key): + MISSING_KEYS.append(key) + + for condition in self.conditions_to_generate: + if condition.startswith("ivas"): + if not hasattr(self, condition): + raise SystemExit( + f"Definition not found for condition {condition}, but was specified in conditions to generate" + ) + else: + for key in REQUIRED_KEYS_IVAS: + if getattr(self, condition).get(key, None) is None: + MISSING_KEYS.append(f"{condition}:{key}") + elif condition.startswith("evs"): + if not hasattr(self, condition): + raise SystemExit( + f"Definition not found for condition {condition}, but was specified in conditions to generate" + ) + else: + for key in REQUIRED_KEYS_EVS: + if getattr(self, condition).get(key, None) is None: + MISSING_KEYS.append(f"{condition}:{key}") + + # Report missing keys to the user + if len(MISSING_KEYS) > 0: + raise KeyError( + f"The following key(s) must be specified in {filename} : {MISSING_KEYS}" + ) + + # Remove DEFAULTS_ keys from dict and self + for key in list(self.dict.keys()): + if key.startswith("DEFAULTS_"): + delattr(self, key) + self.dict.pop(key, None) + + # Store the updated JSON for later output + self.json_out = json.dumps(self.dict, indent=4) + + # Concatenation options + if self.concatenate_input: + if len(self.concat_silence_ms): + self.concat_silence_pre = self.concat_silence_ms[0] + self.concat_silence_post = self.concat_silence_ms[1] + else: + self.concat_silence_pre = self.concat_silence_ms + self.concat_silence_post = self.concat_silence_ms + + # Pre-processing + if self.preproc_input: + self.list_of_conditions.append(self._get_condition_definition("preproc", 0)) + + # Check input directory for items + self.items_list = list_audio( + self.input_path, absolute=True, select_list=self.input_select + ) + + if self.items_list is None or len(self.items_list) == 0: + raise SystemExit( + f"Directory {self.input_path} is either blank, does not exist or all files were filtered out." + ) + + # Check if concatenation is required + if self.concatenate_input and any( + [i.endswith(".txt") for i in self.items_list] + ): + raise SystemExit("Concatenation for text files is unsupported") + + # Go through conditions to generate + for cond in self.conditions_to_generate: + try: + bitrates = getattr(self, cond)["bitrates"] + # If single value, convert to list for convenience + if not hasattr(bitrates, "__len__") and not isinstance(bitrates, str): + bitrates = [bitrates] + for b in bitrates: + if isinstance(b, list): + self.list_of_conditions.append( + self._get_condition_definition(cond, [int(x) for x in b]) + ) + else: + self.list_of_conditions.append( + self._get_condition_definition(cond, int(b)) + ) + bitrate_label = str( + self.list_of_conditions[-1]["proc_chain"][ + 0 + ].get_total_bit_rate() + ) + self.list_of_conditions[-1]["id"] = f"{cond}_{bitrate_label}" + except: + self.list_of_conditions.append(self._get_condition_definition(cond, 0)) + + # create output and temporary folder names for the conditions + for list_cond in self.list_of_conditions: + self.output_folders.append(os.path.join(self.output_path, list_cond["id"])) + self.tmp_folders.append( + os.path.join(self.output_path, "tmp_" + list_cond["id"]) + ) + + def __repr__(self): + return str(vars(self)) + + # default values to enable a sparse JSON input file - update if adding new keys + def _set_defaults(self): + DEFAULT_CONFIG = { + # general options + "enable_multiprocessing": True, + "delete_tmp": False, + # input/preprocessing options + "preproc_input": False, + "input_select": None, + "concatenate_input": False, + "concat_silence_ms": [0, 0], + # sampling rates + "in_fs": 48000, + "out_fs": 48000, + # binaural rendering + "binaural_rendered": False, + "bin_rend_include_LFE": False, + "bin_rend_LFE_gain": 1.0, + "binaural_dataset" : "orange53", + # apply limiter in the postprocessing + "limit_output": False, + # loudness adjustments + "preproc_loudness": None, + "output_loudness": None, + "loudness_tool": "bs1770demo", + # condition-specific values + "ref": {"out_fc": 48000}, + "DEFAULTS_ivas": { + "cod_bin": "../IVAS_cod", + "dec_bin": "../IVAS_dec", + "cod_opt": None, + "dec_opt": None, + "enc_fs": 48000, + "dec_fs": 48000, + "max_band": "FB", + "dtx": False, + # head tracking + "head_tracking": False, + "ht_file": "./trajectories/full_circle_in_15s", + # BER/FER + "plc": False, + "plc_rate": 10, + }, + "DEFAULTS_evs": { + "cod_bin": "../IVAS_cod", + "dec_bin": "../IVAS_dec", + "cod_opt": None, + "dec_opt": None, + "enc_fs": 48000, + "dec_fs": 48000, + "max_band": "FB", + "dtx": False, + }, + } + + # needed to output JSON later + self.dict = DEFAULT_CONFIG + + # set defaults from above dict + for key, value in DEFAULT_CONFIG.items(): + setattr(self, key, value) + + # Definitions of processing chains (edit with care) + def _get_condition_definition(self, cond: str, bitrate: int) -> dict: + definition = dict(id=cond, proc_chain=[]) + + if cond.startswith("preproc"): + definition["proc_chain"].extend( + [ + PreProcessing( + out_format=self.in_format, + out_fs=self.in_fs, + output_loudness=self.preproc_loudness, + loudness_tool=self.loudness_tool, + ) + ] + ) + elif cond.startswith("ref"): + definition["proc_chain"].extend( + [ + PostProcessing( + in_format=self.in_format, + out_format=self.renderer_format, + in_fs=self.in_fs, + out_fs=self.out_fs, + out_fc=self.ref["out_fc"], + binaural_rendered=self.binaural_rendered, + bin_rend_include_LFE=self.bin_rend_include_LFE, + bin_rend_LFE_gain=self.bin_rend_LFE_gain, + binaural_dataset=self.binaural_dataset, + limit_output=self.limit_output, + output_loudness=self.output_loudness, + loudness_tool=self.loudness_tool, + ) + ] + ) + elif cond.startswith("lp3k5"): + definition["proc_chain"].extend( + [ + PostProcessing( + in_format=self.in_format, + out_format=self.renderer_format, + in_fs=self.in_fs, + out_fs=self.out_fs, + out_fc=3500, + binaural_rendered=self.binaural_rendered, + binaural_dataset=self.binaural_dataset, + limit_output=self.limit_output, + output_loudness=self.output_loudness, + loudness_tool=self.loudness_tool, + ) + ] + ) + elif cond.startswith("lp7k"): + definition["proc_chain"].extend( + [ + PostProcessing( + in_format=self.in_format, + out_format=self.renderer_format, + in_fs=self.in_fs, + out_fs=self.out_fs, + out_fc=7000, + binaural_rendered=self.binaural_rendered, + binaural_dataset=self.binaural_dataset, + limit_output=self.limit_output, + output_loudness=self.output_loudness, + loudness_tool=self.loudness_tool, + ) + ] + ) + elif cond.startswith("evs"): + definition["proc_chain"].extend( + [ + EVS( + in_format=self.in_format, + out_format=self.in_format, + bitrate=bitrate, + in_fs=self.in_fs, + **getattr(self, cond), + ), + PostProcessing( + in_format=self.in_format, + out_format=self.renderer_format, + in_fs=getattr(self, cond)["dec_fs"], + out_fs=self.out_fs, + binaural_rendered=self.binaural_rendered, + binaural_dataset=self.binaural_dataset, + limit_output=self.limit_output, + ), + ] + ) + elif cond.startswith("ivas"): + definition["proc_chain"].extend( + [ + IVAS( + in_format=self.in_format, + bitrate=bitrate, + in_fs=self.in_fs, + **getattr(self, cond), + ), + PostProcessing( + in_format=getattr(self, cond)["out_format"], + out_format=self.renderer_format, + in_fs=getattr(self, cond)["dec_fs"], + out_fs=self.out_fs, + binaural_rendered=self.binaural_rendered, + binaural_dataset=self.binaural_dataset, + limit_output=self.limit_output, + ), + ] + ) + else: + raise SystemExit(f"Invalid condition: {cond}") + + return definition diff --git a/scripts/pyprocessing/utils.py b/scripts/pyprocessing/utils.py new file mode 100644 index 0000000000..6132792cc0 --- /dev/null +++ b/scripts/pyprocessing/utils.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import logging +import os +import platform +import shutil +from typing import Union + +""" +Directory/path handling +""" + +ALLOWED_INPUT_EXT = (".wav", ".pcm", ".txt") +main_logger = logging.getLogger("__main__") +logger = main_logger.getChild(__name__) +logger.setLevel(logging.DEBUG) + +# Creates a directory at the given path if it does not exist already +def create_dir(path: str) -> None: + if not os.path.exists(path): + os.makedirs(path) + + +def delete_dir(path: str) -> None: + if os.path.exists(path) and os.path.isdir(path): + logger.debug(f"Deleting path {path}") + shutil.rmtree(path) + + +class DirManager: + """ + Context manager that creates directories if not already present and + automatically cleans up (i.e. deletes) all specified paths + """ + + def __init__( + self, create_paths: Union[str, list], delete_paths: Union[str, list] = list() + ): + self.create_paths = ( + create_paths if type(create_paths) == list else [create_paths] + ) + self.delete_paths = ( + delete_paths if type(delete_paths) == list else [delete_paths] + ) + + def __enter__(self): + for path in self.create_paths: + create_dir(path) + + def __exit__(self, exc_type, exc_value, exc_traceback): + for path in self.delete_paths: + if path in self.create_paths: + delete_dir(path) + else: + print( + "Attempting to delete a tmp dir that was not in create_paths. Do not delete." + ) + + +def list_audio(path: str, absolute: bool = False, select_list: list = None) -> list: + """ + Return list with all files with ALLOWED_INPUT_EXT found under the given path. + + If path is a directory, all files in it are included, if it is a file, just the file + will be in the list. If a select list is provided, files are filtered accordingly. + """ + audio_list = list() + + if os.path.exists(path): + if os.path.isdir(path): + if absolute: + audio_list = [ + os.path.join(path, f) + for f in os.listdir(path) + if f.endswith(ALLOWED_INPUT_EXT) + ] + else: + audio_list = [ + f for f in os.listdir(path) if f.endswith(ALLOWED_INPUT_EXT) + ] + else: + if not absolute: + path = os.path.basename(path) + ext = os.path.splitext(path)[-1].lower() + if ext in ALLOWED_INPUT_EXT: + audio_list.append(path) + + # Filter according to select list + if select_list is not None: + if hasattr(select_list, "__len__") and not isinstance(select_list, str): + select_set = set([os.path.splitext(i)[0] for i in select_list]) + else: + select_set = [os.path.splitext(select_list)[0]] + + audio_list_orig = audio_list + audio_list = [] + for f in audio_list_orig: + f_name = os.path.splitext(os.path.basename(f))[0] + if any(x in f_name for x in select_set): + audio_list.append(f) + + return audio_list + + +def get_exec_path(path: str) -> str: + if platform.system() == "Windows" and os.path.splitext(path)[1] != ".exe": + exe = ".exe" + else: + exe = "" + + return f"{os.path.abspath(path)}{exe}" + + +def get_nickname(path: str) -> str: + nickname = os.path.join( + os.path.basename(os.path.dirname(path)), os.path.basename(path) + ) + return nickname diff --git a/scripts/runIvasCodec.py b/scripts/runIvasCodec.py new file mode 100644 index 0000000000..4ec1da90b9 --- /dev/null +++ b/scripts/runIvasCodec.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + +import os.path +import platform +import sys +import logging + +from pyivastest import IvasScriptsCommon, IvasModeRunner +import pyivastest.constants as constants + +bin_ext = "" +if platform.system() == "Windows": + bin_ext = ".exe" + + +default_encdec_bin_path = constants.WC_BASE_DIR +default_enc = os.path.realpath( + os.path.join(default_encdec_bin_path, "IVAS_cod" + bin_ext) +) +default_dec = os.path.realpath( + os.path.join(default_encdec_bin_path, "IVAS_dec" + bin_ext) +) +default_out = os.path.join(".", "out") # change that to something else? + + +class RunIvasCodec(IvasScriptsCommon.IvasScript): + def __init__(self): + super().__init__( + ivas_parser=True, enable_logging=True, logger_name="runIvasCodec" + ) + self.parser.add_argument( + "-V", "--valgrind", help="Run with valgrind", action="store_true" + ) + self.parser.add_argument( + "-o", + "--outdir", + help="Output directory for items to be coded, (default {})".format( + default_out + ), + default=os.path.realpath(default_out), + ) + self.parser.add_argument( + "-e", + "--enc", + help="Encoder binary name (default {})".format(default_enc), + default=default_enc, + ) + self.parser.add_argument( + "-d", + "--dec", + help="Decoder binary name (default {})".format(default_dec), + default=default_dec, + ) + + def run(self): + self.parse_args() + + if self.args["error"] or self.args["exit"]: + exit() + if self.args["enc"] == "XXXX": + bin_enc = self.args["enc"] + self.args["decoder_only"] = True + else: + bin_enc = os.path.abspath(self.args["enc"]) + if not os.path.exists(bin_enc): + sys.exit("Encoder binary " + bin_enc + " does not exist, aborting...") + + bin_dec = os.path.abspath(self.args["dec"]) + if not os.path.exists(bin_dec): + sys.exit("Decoder binary " + bin_dec + " does not exist, aborting...") + + outdir = os.path.abspath((self.args["outdir"])) + if not outdir: + sys.exit("Ouput directory is a required argument!") + + valgrind = [] + if self.args["valgrind"]: + valgrind = [ + "valgrind", + "-v", + "--tool=memcheck", + "--leak-check=yes", + "--show-reachable=yes", + "--num-callers=20", + ] + + runner = IvasModeRunner.IvasModeRunner( + dir_name=outdir, + site_config=self.args["config"], + formats_fname=self.args["format_file"], + max_workers=self.args["max_workers"], + in_dir_dict=self.args["indir_dict"], + encoder_binary=bin_enc, + decoder_binary=bin_dec, + test_tool=valgrind, + sample_rate_enc_in=self.args["srin"], + sample_rate_dec_out=self.args["srout"], + enable_logging=True, + logger_name="{}.runner".format(self.logger.name), + ) + + IvasScriptsCommon.runner_setup(runner, self.args) + self.logger.console( + "Creating Items for {} in {}".format(self.args["formats"], outdir), + logging.INFO, + ) + self.logger.console(" Encoder: {}".format(bin_enc), logging.INFO) + self.logger.console(" Decoder: {}".format(bin_dec), logging.INFO) + + runner.run() + self.logger.console(" ") + for r in runner.results: + self.logger.console(r[0]) + self.logger.console(" ") + + +if __name__ == "__main__": + script = RunIvasCodec() + script.run() diff --git a/scripts/self_test.py b/scripts/self_test.py new file mode 100644 index 0000000000..0f7b8b3697 --- /dev/null +++ b/scripts/self_test.py @@ -0,0 +1,1957 @@ +#!/usr/bin/env python3 + +""" + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. +""" + + +import re +import os +import urllib +from pyivastest import IvasScriptsCommon +from pyivastest.IvasSvnBuilder import * +from pyivastest.IvasModeRunner import * +from pyivastest.IvasModeAnalyzer import * +from pyivastest.IvasModeCollector import * +import pyivastest.ivas_svn as svn +import pyivastest.constants as constants +import operator +import sys +import pyaudio3dtools +import platform +import numpy +import multiprocessing +import tempfile +import urllib.parse +import shutil + + +BW_TO_SR = {"nb": 8, "wb": 16, "swb": 32, "fb": 48} +SR_TO_BW = {"8": "nb", "16": "wb", "32": "swb", "48": "fb"} +MODES = { + "-STEREO": "STEREO", + "-MC": { + "5_1": "5_1", + "7_1": "7_1", + "5_1_2": "5_1_2", + "5_1_4": "5_1_4", + "7_1_4": "7_1_4", + }, + "-ISM": {"1": "ISM1", "2": "ISM2", "3": "ISM3", "4": "ISM4"}, + "-SBA": { + "-3": "HOA3", + "3": "HOA3", + "2": "HOA2", + "-2": "HOA2", + "1": "FOA", + "-1": "FOA", + }, + "-MASA": {"1": "MASA1TC", "2": "MASA2TC"}, +} +SNR_ID_SET = {"SNR", "SegSNR", "WSegSNR"} + +if platform.system() == "Windows": + TOOLS_DIR = os.path.realpath( + os.path.join(constants.SCRIPTS_BASE_DIR, "tools", "Win32") + ) +elif platform.system() == "Linux": + TOOLS_DIR = os.path.realpath( + os.path.join(constants.SCRIPTS_BASE_DIR, "tools", "Linux") + ) +elif platform.system() == "Darwin": + if platform.uname().machine.endswith("64"): + TOOLS_DIR = os.path.realpath( + os.path.join(constants.SCRIPTS_BASE_DIR, "tools", "Darwin") + ) + else: + TOOLS_DIR = os.path.realpath( + os.path.join(constants.SCRIPTS_BASE_DIR, "tools", "Darwin") + ) + +TESTV_DIR = os.path.realpath(os.path.join(constants.SCRIPTS_BASE_DIR, "testv")) + +bin_ext = "" +if platform.system() == "Windows": + bin_ext = ".exe" + +default_enc_ref = os.path.realpath( + os.path.join(constants.WC_BASE_DIR, "IVAS_cod_ref{}".format(bin_ext)) +) +default_dec_ref = os.path.realpath( + os.path.join(constants.WC_BASE_DIR, "IVAS_dec_ref{}".format(bin_ext)) +) + +default_enc_test = os.path.realpath( + os.path.join(constants.WC_BASE_DIR, "IVAS_cod{}".format(bin_ext)) +) +default_dec_test = os.path.realpath( + os.path.join(constants.WC_BASE_DIR, "IVAS_dec{}".format(bin_ext)) +) + + +class SelfTest(IvasScriptsCommon.IvasScript): + def __init__(self): + super().__init__( + ivas_parser=False, enable_logging=True, logger_name="self_test" + ) + self.parser.add_argument( + "test_prm", + nargs="?", + help="Test parameter file name", + type=str, + default=os.path.realpath( + os.path.join(constants.SCRIPTS_CONFIGS_DIR, "self_test.prm") + ), + ) + self.parser.add_argument( + "--create", + help="Create reference conditions with {} and {}".format( + default_enc_test, default_dec_test + ), + action="store_true", + ) + self.parser.add_argument( + "--pesq", + help="Run PESQ tool on output mono downmix", + action="store_true", + default=False, + ) + self.parser.add_argument( + "--update", + help="Automatically create/update test vectors at {} from the SVN server".format( + TESTV_DIR + ), + action="store_true", + default=False, + ) + self.parser.add_argument( + "--srcdirref", + help="Existing source file directory or desired directory for SVN export for the reference", + ) + self.parser.add_argument( + "--svnref", help="Path to SVN repository for the reference" + ) + self.parser.add_argument( + "--rref", + help="SVN revision for the reference (default HEAD)", + default=None, + type=int, + ) + self.parser.add_argument("--svnuser", help="SVN user name", default="") + self.parser.add_argument("--svnpass", help="SVN password", default="") + self.parser.add_argument( + "--filedirref", help="directory for decoded referenence waveforms", type=str + ) + self.parser.add_argument( + "--encref", + help="Reference encoder binary (default:{})".format(default_enc_ref), + ) + self.parser.add_argument( + "--decref", + help="Reference decoder binary (default:{})".format(default_dec_ref), + ) + self.parser.add_argument( + "--enctest", + help="Test encoder binary (default:{})".format(default_enc_test), + ) + self.parser.add_argument( + "--dectest", + help="Test decoder binary (default:{})".format(default_dec_test), + ) + if shutil.which("valgrind"): + self.valgrind = [ + "valgrind", + "-v", + "--tool=memcheck", + "--leak-check=yes", + "--show-reachable=yes", + "--num-callers=20", + ] + self.parser.add_argument( + "--valgrind", + help="Run valgrind on test conditions or ref conditions (together with --create)", + action="store_true", + ) + else: + self.valgrind = None + + self.stats = None + self.lock = None + self.fail_results = None + self.run_pesq = False + + def test_files( + self, mode, mode_dict, failed_ref_conditions, failed_test_conditions + ): + self.lock.acquire() + self.stat["num_tests_running"] += 1 + self.logger.progress( + "Comparing conditions: {}/{} ({} running), {} failed ".format( + self.stat["num_tests_done"], + self.stat["num_tests"], + self.stat["num_tests_running"], + self.stat["num_tests_failed"], + ) + ) + # print("\r{}\n".format(decoded_item_test)) + self.lock.release() + + # local inits + test_failed = False + test_condition_run_error = False + ref_condition_run_error = False + test_condition_enc_error = False + ref_condition_enc_error = False + test_condition_missing = False + ref_condition_missing = False + test_condition_corrupt = False + ref_condition_corrupt = False + test_sample_num_diff = False + test_be = True + mode_name = mode_dict["cmd"]["table_name"] + + # get basename of the final decoded vector + if "bitstream_processing" in mode_dict["cmd"]: + suffices = IvasModeCollector.get_bs_processing_suffices( + mode_dict["cmd"]["bitstream_processing"] + ) + else: + suffices = None + item_basename = "_".join( + [ + x + for x in [ + os.path.splitext(os.path.basename(mode_dict["item_list"][0]))[0], + mode, + suffices, + ] + if x is not None + ] + ) + + # get ref and test vector file names and set n_channels correctly + oc = list(mode_dict["cmd"]["dec"].keys())[0] + if oc.upper() not in constants.OC_TO_NCHANNELS: + oc_in_file_names = os.path.splitext(os.path.basename(oc))[0] + n_channels = self.get_n_channels_from_ls_layout(oc) + else: + oc_in_file_names = oc + n_channels = constants.OC_TO_NCHANNELS[oc.upper()] + + decoded_item_ref = os.path.realpath( + os.path.join( + constants.SCRIPTS_BASE_DIR, + "ref", + "dec", + ".".join([item_basename, "dec", oc_in_file_names, "pcm"]), + ) + ) + decoded_item_test = os.path.realpath( + os.path.join( + constants.SCRIPTS_BASE_DIR, + "test", + "dec", + ".".join([item_basename, "dec", oc_in_file_names, "pcm"]), + ) + ) + + # get output sampling rate + if ( + isinstance(mode_dict["cmd"]["dec"][oc], dict) + and "fs_out" in mode_dict["cmd"]["dec"][oc] + ): + fs = int(mode_dict["cmd"]["dec"][oc]["fs_out"]) * 1000 + else: + fs = BW_TO_SR[mode_dict["cmd"]["bw"]] * 1000 + + # get frame size + frame_size = int(fs / 50) + + # check if we have run errors + if mode in failed_ref_conditions: + ref_condition_run_error = True + if failed_ref_conditions[mode][0].split()[0] == "Encoding": + ref_condition_enc_error = True + test_failed = True + + if mode in failed_test_conditions: + test_condition_run_error = True + if failed_test_conditions[mode][0].split()[0] == "Encoding": + test_condition_enc_error = True + test_failed = True + + # check if test item exists and can be opened + if ( + not os.path.exists(decoded_item_test) + and test_condition_run_error is not True + ): + test_failed = True + test_condition_missing = True + + # check if ref item exists and can be opened + if not os.path.exists(decoded_item_ref) and ref_condition_run_error is not True: + test_failed = True + ref_condition_missing = True + + # open the test vector + if not test_condition_missing and not test_condition_run_error: + try: + sig_test = numpy.fromfile(decoded_item_test, dtype="int16") + n_samples_test = len(sig_test) + n_samples_test //= n_channels + sig_test = sig_test.reshape((n_samples_test, n_channels)) + except Exception: + test_failed = True + test_condition_corrupt = True + + # open the ref vector + if not ref_condition_missing and not ref_condition_run_error: + try: + sig_ref = numpy.fromfile(decoded_item_ref, dtype="int16") + n_samples_ref = len(sig_ref) + n_samples_ref //= n_channels + sig_ref = sig_ref.reshape((n_samples_ref, n_channels)) + except Exception: + test_failed = True + ref_condition_corrupt = True + + # check if ref and test vector have the same number of samples, if yes, test for BE + if not test_failed: + if n_samples_ref != n_samples_test: + if abs(n_samples_ref - n_samples_test) == frame_size: + # one frame diff, might be a delay change, still test for BE, but cut to the same length first + n_samples_for_test = min(n_samples_test, n_samples_ref) + if n_samples_for_test != n_samples_ref: + sig_ref = pyaudio3dtools.audioarray.cut( + sig_ref, (0, n_samples_for_test) + ) + else: + sig_test = pyaudio3dtools.audioarray.cut( + sig_test, (0, n_samples_for_test) + ) + else: + test_failed = True + test_sample_num_diff = True + if not test_failed: + try: + cmp_result = pyaudio3dtools.audioarray.compare( + sig_test, sig_ref, fs + ) + if not cmp_result["bitexact"]: + test_be = False + except Exception as exc: + print(str(exc)) + return + # free the memory + del sig_test + del sig_ref + + result_str = [] + if test_failed or not test_be: + result_str.append("") + result_str.append( + "---------------------------------------------------------------" + ) + result_str.append(mode_name) + result_str.append( + "---------------------------------------------------------------\n" + ) + + # Bit-exactness + if test_condition_run_error: + result_str.append( + "Test condition had a run error when {}!".format( + "encoding" if test_condition_enc_error else "decoding" + ) + ) + result_str.append( + " log file: {}".format(failed_test_conditions[mode][3]) + ) + if ref_condition_run_error: + result_str.append( + "Ref condition had a run error when {}!".format( + "encoding" if ref_condition_enc_error else "decoding" + ) + ) + result_str.append( + " log file: {}".format(failed_ref_conditions[mode][3]) + ) + if test_condition_missing: + result_str.append("Test condition missing!\n") + if ref_condition_missing: + result_str.append("Ref condition missing!\n") + if test_condition_corrupt: + result_str.append("Test condition corrupt!\n") + if ref_condition_corrupt: + result_str.append("Ref condition corrupt!\n") + if test_sample_num_diff: + result_str.append( + "Number of samples differ between ref and test condition ({},{})!\n".format( + n_samples_ref, n_samples_test + ) + ) + elif not test_be: + result_str.append("\n Test not BE!\n") + result_str.append( + " Max abs diff: {}, at sample position {}, in channel {}, in frame {}".format( + cmp_result["max_abs_diff"], + cmp_result["max_abs_diff_pos_sample"], + cmp_result["max_abs_diff_pos_channel"], + cmp_result["max_abs_diff_pos_frame"], + ) + ) + result_str.append( + " {0:d} samples differ ({1:0.1f}% of all), {2:d} of the frames have differences ({3:0.1f}% of all)".format( + cmp_result["nsamples_diff"], + cmp_result["nsamples_diff_percentage"], + cmp_result["nframes_diff"], + cmp_result["nframes_diff_percentage"], + ) + ) + + # SNR + result_str.append("\n --- SNR Report ---") + enc_log_file_ref = os.path.join( + constants.SCRIPTS_BASE_DIR, + "ref", + "logs", + "".join([item_basename, ".enc", constants.LOG_FILE_EXT]), + ) + enc_log_file_test = os.path.join( + constants.SCRIPTS_BASE_DIR, + "test", + "logs", + "".join([item_basename, ".enc", constants.LOG_FILE_EXT]), + ) + if not ref_condition_enc_error: + snr_report_ref = IvasModeAnalyzer.get_snr_report(enc_log_file_ref) + else: + snr_report_ref = {} + if not test_condition_enc_error: + snr_report_test = IvasModeAnalyzer.get_snr_report(enc_log_file_test) + else: + snr_report_test = {} + if snr_report_ref == {} and snr_report_test == {}: + result_str.append(" Both ref and test SNR reports missing!") + elif snr_report_test == {}: + result_str.append(" Test SNR report missing!") + for snr_chan in list(snr_report_ref.keys()): + result_str.append(" {}".format(snr_chan)) + for SNR_id in ["SNR", "SegSNR", "WSegSNR"]: + result_str.append( + " {0:s}: {1:-13.3f} {2:13s}".format( + SNR_id.ljust(7, " "), + snr_report_ref[snr_chan][SNR_id], + "test missing", + ) + ) + elif snr_report_ref == {}: + result_str.append(" Ref SNR report missing!") + for snr_chan in list(snr_report_test.keys()): + result_str.append(" {}".format(snr_chan)) + for SNR_id in ["SNR", "SegSNR", "WSegSNR"]: + result_str.append( + " {0:s}: {1:13s} {2:-13.3f}".format( + SNR_id.ljust(7, " "), + "ref missing", + snr_report_ref[snr_chan][SNR_id], + ) + ) + else: + for snr_chan in list(snr_report_ref.keys()): + result_str.append(" {}".format(snr_chan)) + for SNR_id in ["SNR", "SegSNR", "WSegSNR"]: + result_str.append( + " {0:s}: {1:-13.3f} {2:-13.3f} {3:s}".format( + SNR_id.ljust(7, " "), + snr_report_ref[snr_chan][SNR_id], + snr_report_test[snr_chan][SNR_id], + "identical" + if snr_report_ref[snr_chan][SNR_id] + == snr_report_test[snr_chan][SNR_id] + else "not identical ({0:+.3f})".format( + snr_report_test[snr_chan][SNR_id] + - snr_report_ref[snr_chan][SNR_id] + ), + ) + ) + + # PESQ + if self.run_pesq: + + pesq_success = True + pesq_fs = min([16000, mode_dict["in_fs"], mode_dict["out_fs"]]) + in_nchans = constants.OC_TO_NCHANNELS[ + mode_dict["cmd"]["in_config"].upper() + ] + orig_item = mode_dict["item_list"][0] + orig_name = os.path.basename(orig_item) + fd_mono, orig_mono = tempfile.mkstemp(".pcm") + os.close(fd_mono) + decoded_item_ref_mono = None + decoded_item_test_mono = None + if mode_dict["in_fs"] > pesq_fs or in_nchans > 1: + pyaudio3dtools.audiofile.mono( + orig_item, + orig_mono, + in_nchans=in_nchans, + in_fs=mode_dict["in_fs"], + out_fs=pesq_fs, + ) + else: + shutil.copy(orig_item, orig_mono) + orig_item_pesq = orig_mono + try: + n_samples_orig = os.path.getsize(orig_item_pesq) + except Exception as exc: + pesq_success = False + pesq_error = str(exc) + + pesq_cmd = [os.path.join(TOOLS_DIR, "wbpesq"), "+{}".format(pesq_fs)] + if pesq_fs == 16000 and mode_dict["cmd"]["bw"] != "nb": + pesq_cmd.append("+wb") + + have_ref_pesq = False + have_test_pesq = False + + if ( + pesq_success + and not ref_condition_missing + and not ref_condition_corrupt + and not ref_condition_run_error + ): + + fd_ref, decoded_item_ref_mono = tempfile.mkstemp(".pcm") + os.close(fd_ref) + if mode_dict["out_fs"] > pesq_fs or n_channels > 1: + + pyaudio3dtools.audiofile.mono( + decoded_item_ref, + decoded_item_ref_mono, + in_nchans=n_channels, + in_fs=mode_dict["out_fs"], + out_fs=pesq_fs, + ) + else: + shutil.copy(decoded_item_ref, decoded_item_ref_mono) + decoded_item_ref_pesq = decoded_item_ref_mono + + try: + n_samples_ref = os.path.getsize(decoded_item_ref_pesq) + except Exception as exc: + self.logger.console(str(exc), logging.CRITICAL) + pesq_success = False + pesq_error = str(exc) + + if pesq_success: + if n_samples_orig > n_samples_ref: + self.logger.error( + "Number of samples not equal, skipping PESQ for ref condition {}".format( + item_basename + ) + ) + else: + pesq_ref_return = subprocess.run( + pesq_cmd + [orig_item_pesq, decoded_item_ref_pesq], + capture_output=True, + text=True, + ) + pesq_ref = 0 + if pesq_ref_return.returncode: + self.logger.console( + "Problem running PESQ tool on {} and {}!".format( + orig_item_pesq, decoded_item_ref_pesq + ), + logging.ERROR, + ) + else: + pesq_ref = re.search( + "Prediction \(MOS-LQO\):\s+=\s+(\d*\.\d+)", + pesq_ref_return.stdout, + ) + if pesq_ref is None or pesq_ref.group(1) is None: + self.logger.console( + "Problem reading file pesq_results.txt!", + logging.ERROR, + ) + pesq_ref = 0 + else: + pesq_ref = float(pesq_ref.group(1)) + have_ref_pesq = True + + if ( + pesq_success + and not test_condition_missing + and not test_condition_corrupt + and not test_condition_run_error + ): + + fd_test, decoded_item_test_mono = tempfile.mkstemp((".pcm")) + os.close(fd_test) + if mode_dict["out_fs"] > pesq_fs or n_channels > 1: + pyaudio3dtools.audiofile.mono( + decoded_item_test, + decoded_item_test_mono, + in_nchans=n_channels, + in_fs=mode_dict["out_fs"], + out_fs=pesq_fs, + ) + else: + shutil.copy(decoded_item_test, decoded_item_test_mono) + decoded_item_test_pesq = decoded_item_test_mono + + try: + n_samples_test = os.path.getsize(decoded_item_test_pesq) + except Exception as exc: + self.logger.console(str(exc), logging.ERROR) + pesq_success = False + pesq_error = str(exc) + + if pesq_success: + if n_samples_orig > n_samples_test: + self.logger.error( + "Number of samples not equal, skipping PESQ for test condition {}".format( + item_basename + ) + ) + else: + pesq_test_return = subprocess.run( + pesq_cmd + [orig_item_pesq, decoded_item_test_pesq], + capture_output=True, + text=True, + ) + pesq_test = 0 + if pesq_test_return.returncode: + self.logger.console( + "Problem running PESQ tool on {} and {}!".format( + orig_item_pesq, decoded_item_test_pesq + ), + logging.ERROR, + ) + else: + pesq_test = re.search( + "Prediction \(MOS-LQO\):\s+=\s+(\d*\.\d+)", + pesq_test_return.stdout, + ) + if pesq_test is None or pesq_test.group(1) is None: + self.logger.console( + "Problem reading file pesq_results.txt!", + logging.ERROR, + ) + pesq_test = 0 + else: + pesq_test = float(pesq_test.group(1)) + have_test_pesq = True + + result_str.append("\n --- PESQ Report ---") + if not pesq_success: + result_str.append("Error in PESQ processing") + result_str.append(pesq_error) + if have_ref_pesq and have_test_pesq: + if pesq_ref == pesq_test: + pesq_result = "identical" + else: + pesq_result = "not identical ({0:+.3f})".format( + pesq_test - pesq_ref + ) + result_str.append( + " {0:s}: {1:-13.3f} {2:-13.3f} {3:s}".format( + "mono downmix", pesq_ref, pesq_test, pesq_result + ) + ) + elif have_ref_pesq: + result_str.append( + " {0:s}: {1:-13.3f} {2:13s}".format( + "mono downmix", pesq_ref, "test missing" + ) + ) + elif have_test_pesq: + result_str.append( + " {0:s}: {1:13s} {2:-13.3f}".format( + "mono downmix", "ref missing", pesq_test + ) + ) + else: + result_str.append("No PESQ results!") + # cleanup + self.lock.acquire() + if os.path.exists("pesq_results.txt"): + os.remove("pesq_results.txt") + self.lock.release() + if orig_mono is not None and os.path.exists(orig_mono): + os.remove(orig_mono) + if decoded_item_ref_mono is not None and os.path.exists( + decoded_item_ref_mono + ): + os.remove(decoded_item_ref_mono) + if decoded_item_test_mono is not None and os.path.exists( + decoded_item_test_mono + ): + os.remove(decoded_item_test_mono) + + # final gathering of all results + self.lock.acquire() + self.stat["num_tests_done"] += 1 + self.stat["num_tests_running"] -= 1 + if not test_failed and test_be: + self.stat["num_tests_be"] += 1 + self.fail_results["BE"]["testable"] += 1 + else: + # add to total results + + # missing and corrupt vectors, different number of samples + if test_condition_run_error: + self.fail_results["test_condition_run_errors"]["conditions"].append( + mode_name + ) + self.fail_results["test_condition_run_errors"]["cnt"] += 1 + if ref_condition_run_error: + self.fail_results["ref_condition_run_errors"]["conditions"].append( + mode_name + ) + self.fail_results["ref_condition_run_errors"]["cnt"] += 1 + if test_condition_missing: + self.fail_results["missing_test_conditions"]["conditions"].append( + mode_name + ) + self.fail_results["missing_test_conditions"]["cnt"] += 1 + if ref_condition_missing: + self.fail_results["missing_ref_conditions"]["conditions"].append( + mode_name + ) + self.fail_results["missing_ref_conditions"]["cnt"] += 1 + if test_condition_corrupt: + self.fail_results["corrupt_test_conditions"]["conditions"].append( + mode_name + ) + self.fail_results["corrupt_test_conditions"]["cnt"] += 1 + if ref_condition_corrupt: + self.fail_results["corrupt_ref_conditions"]["conditions"].append( + mode_name + ) + self.fail_results["corrupt_ref_conditions"]["cnt"] += 1 + if test_sample_num_diff: + self.fail_results["diff_nsamples_conditions"]["conditions"].append( + [mode, mode_name, [n_samples_ref, n_samples_test]] + ) + self.fail_results["diff_nsamples_conditions"]["cnt"] += 1 + + # not BE + if not test_failed and not test_be: + self.fail_results["BE"]["cnt"] += 1 + self.fail_results["BE"]["testable"] += 1 + self.fail_results["BE"]["conditions"].append( + [mode, mode_name, cmp_result["max_abs_diff"]] + ) + if cmp_result["max_abs_diff"] > self.fail_results["BE"]["maximumVal"]: + self.fail_results["BE"]["maximumVal"] = cmp_result["max_abs_diff"] + self.fail_results["BE"]["maximumCondition"] = mode_name + self.stat["num_tests_failed"] += 1 + + # SNR + # we have both SNR reports, compare + if snr_report_ref != {} and snr_report_test != {}: + self.fail_results["SNR"]["testable"] += 1 + # loop over all SNR channels + for snr_chan in list(snr_report_ref.keys()): + if snr_chan not in self.fail_results["SNR"]["chans"]: + self.fail_results["SNR"]["chans"].update( + { + snr_chan: { + "cnt": 0, + "maximumVal": 0, + "maximumCondition": "", + "conditions": [], + } + } + ) + # compare all SNR values for the channel + snr_equal = [ + snr_report_ref[snr_chan][SNR_id] + == snr_report_test[snr_chan][SNR_id] + for SNR_id in SNR_ID_SET + ] + if False in snr_equal: + # get first non-True comparison index + idx = snr_equal.index(False) + SNR_desc = list(SNR_ID_SET)[idx] + self.fail_results["SNR"]["chans"][snr_chan]["cnt"] += 1 + snr_diff = ( + snr_report_test[snr_chan][SNR_desc] + - snr_report_ref[snr_chan][SNR_desc] + ) + self.fail_results["SNR"]["chans"][snr_chan][ + "conditions" + ].append( + [ + mode, + mode_name, + "{0:s}: {1:+0.3f}".format(SNR_desc, snr_diff), + ] + ) + if ( + snr_diff + < self.fail_results["SNR"]["chans"][snr_chan]["maximumVal"] + ): + self.fail_results["SNR"]["chans"][snr_chan][ + "maximumVal" + ] = snr_diff + self.fail_results["SNR"]["chans"][snr_chan][ + "maximumCondition" + ] = mode_name + # missing ref SNR report + if snr_report_ref == {}: + self.fail_results["SNR"]["ref"]["cnt"] += 1 + self.fail_results["SNR"]["ref"]["conditions"].append(mode_name) + # missing test SNR report + if snr_report_test == {}: + self.fail_results["SNR"]["test"]["cnt"] += 1 + self.fail_results["SNR"]["test"]["conditions"].append(mode_name) + + # PESQ + if self.run_pesq: + if have_test_pesq and have_ref_pesq: + self.fail_results["PESQ"]["testable"] += 1 + if pesq_ref != pesq_test: + pesq_diff = pesq_test - pesq_ref + self.fail_results["PESQ"]["cnt"] += 1 + self.fail_results["PESQ"]["conditions"].append( + [mode, mode_name, pesq_diff] + ) + if pesq_diff < self.fail_results["PESQ"]["maximumVal"]: + self.fail_results["PESQ"]["maximumVal"] = pesq_diff + self.fail_results["PESQ"]["maximumCondition"] = mode_name + if not have_test_pesq: + self.fail_results["PESQ"]["test"]["cnt"] += 1 + self.fail_results["PESQ"]["test"]["conditions"].append(mode_name) + if not have_ref_pesq: + self.fail_results["PESQ"]["ref"]["cnt"] += 1 + self.fail_results["PESQ"]["ref"]["conditions"].append(mode_name) + + # add the detailed results for this condition + self.fail_results["detailedResults"].append(result_str) + self.logger.progress( + "Comparing conditions: {}/{} ({} running), {} failed ".format( + self.stat["num_tests_done"], + self.stat["num_tests"], + self.stat["num_tests_running"], + self.stat["num_tests_failed"], + ) + ) + self.lock.release() + + return + + @staticmethod + def test_for_file(arg_par): + test_f = os.path.realpath(os.path.join(constants.SCRIPTS_BASE_DIR, arg_par)) + if os.path.exists(test_f): + if os.path.isdir(test_f): + test_f += "/" + return test_f + else: + return arg_par + + def create_mode_dict_entry(self, mode_dict, mode): + # print(mode) + entry_dict = { # operating point key + "cmd": { # same as the definition for the operating points above + "in_config": "MONO", + "encmodeoption": [], + "encoptions": [], + "bitrate": 0, + "dec": {}, + "table_name": mode[0], + "bw": "", + "nummetadata": 0, + "metadatafilenames": [], + "rs": False, + "amr": False, + "mono": False, + }, + "in_fs": 48000, + "out_fs": 48000, + "item_list": [], # explicit list of the input files + "ivas_format": "SELFTEST", + } # needed for correct working of the IvasModeAnalyzer + + # get encoder and mode: + + enc_cmd = mode[1].pop(0).split() + # print(enc_cmd) + encoder_bin = enc_cmd.pop(0) + # get bitstream, infile, infs and br + bs_enc_file = enc_cmd.pop() + in_file = self.test_for_file(enc_cmd.pop()) + entry_dict["item_list"].append(in_file) + fs_in = enc_cmd.pop() + entry_dict["in_fs"] = int(fs_in) * 1000 + entry_dict["cmd"]["bw"] = SR_TO_BW[fs_in] + entry_dict["cmd"]["bitrate"] = self.test_for_file(enc_cmd.pop()) + mode_name = re.sub("[^0-9a-zA-Z]+", "_", mode[0]) + mono = False + # print(mode_name) + while enc_cmd: + next_part = enc_cmd.pop(0) + if next_part.upper() in MODES: + next_part = next_part.upper() + ic = next_part + entry_dict["cmd"]["encmodeoption"].append(next_part) + # look for parameters to the argument + if next_part == "-SBA": + ic = enc_cmd.pop(0) + entry_dict["cmd"]["encmodeoption"].append(ic) + else: + if enc_cmd and enc_cmd[0][0] != "-": + ic = enc_cmd.pop(0) + entry_dict["cmd"]["encmodeoption"].append(ic) + while enc_cmd and enc_cmd[0][0] != "-": + entry_dict["cmd"]["encmodeoption"].append( + self.test_for_file(enc_cmd.pop(0)) + ) + if isinstance(MODES[next_part], str): + entry_dict["cmd"]["in_config"] = MODES[next_part] + else: + entry_dict["cmd"]["in_config"] = MODES[next_part][ic] + else: + entry_dict["cmd"]["encoptions"].append(next_part) + # look for parameters to the argument + while enc_cmd and enc_cmd[0][0] != "-": + entry_dict["cmd"]["encoptions"].append( + self.test_for_file(enc_cmd.pop(0)) + ) + + if entry_dict["cmd"]["encmodeoption"] == []: + mono = True + entry_dict["cmd"]["mono"] = True + dec_cmd = mode[1].pop().split() + + dec_bin = dec_cmd.pop(0) + out_file = dec_cmd.pop() + bs_dec_file = dec_cmd.pop() + fs_out = dec_cmd.pop() + entry_dict["out_fs"] = int(fs_out) * 1000 + if not mono: + oc = dec_cmd.pop() + else: + oc = "MONO" + + # handle custom LS setups -> files come from the TESTV_DIR + if oc.upper() not in constants.OC_TO_NCHANNELS: + # treat as a custom setup file + oc = os.path.join(TESTV_DIR, os.path.basename(oc)) + + if fs_out != fs_in: + entry_dict["cmd"]["dec"].update( + { + oc: { + "dec_options": list(map(self.test_for_file, dec_cmd)), + "fs_out": fs_out, + } + } + ) + else: + entry_dict["cmd"]["dec"].update( + {oc: list(map(self.test_for_file, dec_cmd))} + ) + + # handle intermediate processing steps, e.g. networksimulator... + in_file = bs_enc_file + proc_cmds = [] + while mode[1]: + proc_cmd = mode[1].pop(0).split() + if proc_cmd[0] == "networkSimulator_g192": + suffix = "nws" + proc_cmd[0] = os.path.join(TOOLS_DIR, proc_cmd[0]) + proc_cmd = [ + "{in_file}" if x == in_file else self.test_for_file(x) for x in proc_cmd + ] + if mode[1]: + for cmdline_arg in proc_cmd[1:]: + if cmdline_arg in mode[1][0]: + out_file = cmdline_arg + else: + out_file = bs_dec_file + proc_cmd = [ + "{out_file}" if x == out_file else self.test_for_file(x) + for x in proc_cmd + ] + proc_cmd.append(suffix) + proc_cmds.append(proc_cmd) + if proc_cmds != []: + entry_dict["cmd"]["bitstream_processing"] = { + "proc_chain": proc_cmds, + "dec_options": [], + } + + mode_dict.update({mode_name: entry_dict}) + + def create_missing_dec_mode_list(self, flat_mode_list): + """ + Create a run dict only for the missing decoded items + """ + decdir = os.path.join(constants.SCRIPTS_BASE_DIR, "ref", "dec") + missing_mode_flat_dict = {} + for mode in flat_mode_list: + if flat_mode_list[mode]["item_list"]: + # get item names (either list element or the first element in the sublist) + mode_in_file_list = [ + x[0] if isinstance(x, list) else x + for x in flat_mode_list[mode]["item_list"] + ] + # get only the base name w/o file extension (item, in_file_name) + mode_item_list = [ + (os.path.splitext(os.path.basename(x))[0], x) + for x in mode_in_file_list + ] + # add additional suffixes if we have bitstream postprocessing + if "bitstream_processing" in flat_mode_list[mode]["cmd"]: + suffices = IvasModeCollector.get_bs_processing_suffices( + flat_mode_list[mode]["cmd"]["bitstream_processing"] + ) + else: + suffices = None + # create tuple list of (item, in_file, last bs file w/o extension) + mode_enc_files = [ + ( + x[0], + x[1], + "_".join([y for y in [x[0], mode, suffices] if y is not None]), + ) + for x in mode_item_list + ] + for oc in flat_mode_list[mode]["cmd"]["dec"]: + # create list of expected decoded files (in_file, dec_file) + mode_dec_files = [ + (x[1], os.path.join(decdir, ".".join([x[2], "dec", oc, "pcm"]))) + for x in mode_enc_files + ] + # get actually missing items + missing_items = [ + x[0] for x in mode_dec_files if not os.path.exists(x[1]) + ] + if missing_items != []: + if mode not in missing_mode_flat_dict: + mode_dict = deepcopy(flat_mode_list[mode]) + mode_dict["item_list"] = missing_items + mode_dict["cmd"]["dec"] = { + oc: flat_mode_list[mode]["cmd"]["dec"][oc] + } + missing_mode_flat_dict.update({mode: mode_dict}) + else: + missing_mode_flat_dict[mode]["item_list"] = list( + set( + missing_mode_flat_dict[mode]["item_list"].append( + missing_items + ) + ) + ) + missing_mode_flat_dict[mode]["cmd"]["dec"].update( + {oc: flat_mode_list[mode]["cmd"]["dec"][oc]} + ) + return missing_mode_flat_dict + + def parse_self_test_prm(self, fname): + """ + + Parameters + ---------- + fname : + + + Returns + ------- + dictionary containing modes to be run in pre-defined format + + """ + fname_err = fname + if not os.path.exists(fname): + fname = os.path.realpath( + os.path.join(constants.SCRIPTS_BASE_DIR, "config", fname) + ) + if not os.path.exists(fname): + sys.exit("Test Parameter file {} does not exist".format(fname_err)) + + fp = open(fname) + perl_lines = fp.readlines() + skip_header = True + found_section = False + mode_list = [] + perl_lines = [line.rstrip("\n") for line in perl_lines] # remove trailing "\n" + for line in perl_lines: + # print(line) + + # skip header (all initial lines starting with //) + if skip_header and line[0:2] == "//": + continue + else: + skip_header = False + + if not found_section and line[0:2] == "//": + # print("found new mode: " + line) + found_section = True + new_mode = [re.sub("^//[ ]*", "", line), []] + mode_list.append(new_mode) + elif found_section: + if line == "": + # print("end of mode") + found_section = False + else: + mode_list[-1][1].append(line) + + mode_dict = {} + + for mode in mode_list: + self.create_mode_dict_entry(mode_dict, mode) + + return mode_dict + + def run(self): + + self.parse_args() + + # create/update test vectors (export from SVN server if not existing) + svn_action = None + if not os.path.exists(TESTV_DIR): + self.logger.console( + "Creating test vector directory at {}".format(TESTV_DIR), logging.INFO + ) + os.makedirs(TESTV_DIR) + svn_action = "svn_checkout" + elif self.args["update"]: + svn_local_info = svn.get_local_svn_info( + TESTV_DIR, logger=self.logger, err_except_list=["W155010", "E200009"] + ) + if svn_local_info is None: + svn_action = "svn_checkout" + else: + svn_action = "svn_update" + + if svn_action: + svn_root = constants.DEFAULT_IVAS_REPO_URL + svn_url = urllib.parse.urljoin(svn_root, "data/testv") + auth_info = svn.get_svn_auth_info(svn_url, logger=self.logger) + if self.args["svnuser"]: + svn_user = self.args["svnuser"] + else: + if not auth_info["username"]: + # ask for the user name + print("SVN user name needed:") + svn_user = input(" user>") + else: + svn_user = auth_info["username"] + svn_pwd = "" + if self.args["svnpass"]: + svn_pwd = self.args["svnpass"] + else: + if auth_info["has_password"] is False: + # ask for the password + print("Password for user {}".format(svn_user)) + svn_pwd = getpass(" pwd>") + + try: + svninfo = svn.get_remote_svn_info( + svn_url, username=svn_user, password=svn_pwd, logger=self.logger + ) + except Exception as exc: + self.logger.console( + "Something went wrong when accessing the remote SVN!", + logging.CRITICAL, + ) + self.logger.console("{}".format(str(exc)), logging.CRITICAL) + raise RuntimeError( + "Could not access remote SVN {} with username {}".format( + svn_url, svn_user + ) + ) + + if not svninfo: + sys.exit("Unable to access {}!".format(svn_url)) + + if svn_action == "svn_checkout": + self.logger.console( + "Exporting test vectors from {} to {}...".format( + svn_url, TESTV_DIR + ), + logging.INFO, + ) + svn.svn_checkout( + svn_url, + TESTV_DIR, + revision="HEAD", + username=svn_user, + password=svn_pwd, + logger=self.logger, + ) + else: + self.logger.console( + "Updating test vectors at {} from {}...".format(TESTV_DIR, svn_url), + logging.INFO, + ) + svn.svn_update( + svn_url, + TESTV_DIR, + revision="HEAD", + username=svn_user, + password=svn_pwd, + logger=self.logger, + ) + + create_mode = False + valgrind_ref = [] + + if self.args["create"]: + self.logger.console( + "Create mode: ignoring all other optional commandline arguments regarding reference and test conditions" + ) + self.args["encref"] = default_enc_test + self.args["decref"] = default_dec_test + self.args["srcdirref"] = constants.WC_BASE_DIR + if self.valgrind is not None and self.args["valgrind"] is True: + valgrind_ref = self.valgrind + create_mode = True + run_ref = True + else: + if self.args["encref"] is None: + self.args["encref"] = default_enc_ref + else: + self.args["encref"] = os.path.realpath(self.args["encref"]) + if not os.path.exists(self.args["encref"]): + sys.exit( + "Reference Encoder binary " + + self.args["encref"] + + " does not exist, aborting..." + ) + + if self.args["decref"] is None: + self.args["decref"] = default_dec_ref + else: + self.args["decref"] = os.path.realpath(self.args["decref"]) + if not os.path.exists(self.args["decref"]): + sys.exit( + "Reference Decoder binary " + + self.args["decref"] + + " does not exist, aborting..." + ) + + build_test = False + if self.args["enctest"] is None: + self.args["enctest"] = default_enc_test + if not os.path.exists(self.args["enctest"]): + build_test = True + else: + self.args["enctest"] = os.path.realpath(self.args["enctest"]) + if not os.path.exists(self.args["enctest"]): + sys.exit( + "Test Encoder binary " + + self.args["enctest"] + + " does not exist, aborting..." + ) + + if self.args["dectest"] is None: + self.args["dectest"] = default_dec_test + if not os.path.exists(self.args["enctest"]): + build_test = True + else: + self.args["dectest"] = os.path.realpath(self.args["dectest"]) + if not os.path.exists(self.args["dectest"]): + sys.exit( + "Reference Decoder binary " + + self.args["dectest"] + + " does not exist, aborting..." + ) + + # parse .prm file to get flat mode dict + self.logger.info( + "Parsing self test parameter file {}".format(self.args["test_prm"]) + ) + run_dict = self.parse_self_test_prm(self.args["test_prm"]) + in_formats = set(list(map(lambda x: run_dict[x]["cmd"]["in_config"], run_dict))) + in_dir_dict = {} + for in_format in in_formats: + in_dir_dict.update({in_format: TESTV_DIR}) + + # check for existing reference files, should be in ref/ + ref_dir = os.path.join(constants.SCRIPTS_BASE_DIR, "ref") + + if not create_mode: + run_ref = False + if not os.path.exists(ref_dir): + self.logger.console( + "Reference does not exist, creating it", logging.INFO + ) + run_ref = True + ref_modes = deepcopy(run_dict) + # try to create missing ref conditions only if the ref binaries already exist + elif os.path.exists(self.args["encref"]) and os.path.exists( + self.args["decref"] + ): + ref_modes = self.create_missing_dec_mode_list(run_dict) + if ref_modes != {}: + run_ref = True + else: + run_ref = True + ref_modes = deepcopy(run_dict) + + if run_ref and ( + not os.path.exists(self.args["encref"]) + or not os.path.exists(self.args["decref"]) + ): + self.logger.console( + "Reference binaries do not exist, building them...", logging.INFO + ) + + if create_mode: + ref_build_dir = constants.WC_BASE_DIR + else: + ref_build_dir = os.path.realpath( + os.path.join(constants.SCRIPTS_BASE_DIR, "ref_src/bin") + ) + if self.args["svnref"]: + # check if we have an output directory + if not ["srcdirref"] and not ["svnuser"]: + sys.exit( + "You have to specifiy a root directory and a SVN user for the SVN export!" + ) + elif not ["srcdirref"]: + sys.exit( + "You have to specifiy a root directory for the SVN export!" + ) + + ref_builder = IvasSvnBuilder( + self.args["svnref"], + svn_user=self.args["svnuser"], + svn_pwd=self.args["svnpass"], + out_dir=os.path.join(constants.SCRIPTS_BASE_DIR, "ref_src"), + revision=self.args["rref"], + enable_logging=True, + logger_name="{}.refsvnbuilder".format(self.logger.name), + ) + + elif self.args["srcdirref"]: + # check if srcdir exists + if not os.path.exists(self.args["srcdirref"]): + sys.exit( + "Source directory {} does not exist".format( + self.args["srcdirref"] + ) + ) + else: + ref_builder = IvasBuilder( + self.args["srcdirref"], + enable_logging=True, + logger_name="{}.refbuilder".format(self.logger.name), + ) + else: + # if a specific revision is requested, check it out + # if no reference is given, try to find out the svn revision of the source + # we assume the developer has changed this revision in his local copy and likes to test those changes + svn_info = svn.get_local_svn_info( + constants.WC_BASE_DIR, logger=self.logger + ) + ref_revision = ( + self.args["rref"] + if self.args["rref"] + else svn_info["commit_revision"] + ) + ref_builder = IvasSvnBuilder( + svn_info["url"], + out_dir=os.path.join(constants.SCRIPTS_BASE_DIR, "ref_src"), + revision=ref_revision, + enable_logging=True, + logger_name="{}.refsvnbuilder".format(self.logger.name), + svn_pwd=self.args["svnpass"], + ) + # (check out) and build the reference + ref_build_success = ref_builder.build(ref_build_dir) + if ref_build_success == False: + sys.exit("Error when building the ref binaries, aborting...") + # copy ref + if not create_mode: + ref_builder.copy_binaries( + ref_build_dir, constants.WC_BASE_DIR, target_suffix="_ref" + ) + + # create reference files + if run_ref: + self.logger.console("Creating missing reference files...", logging.INFO) + ref_runner = IvasModeRunner( + dir_name=ref_dir, + site_config="self_test", + max_workers=self.args["max_workers"], + in_dir_dict=in_dir_dict, + encoder_binary=self.args["encref"], + decoder_binary=self.args["decref"], + pcm_out=True, + enable_logging=True, + test_tool=valgrind_ref, + logger_name="{}.refrunner".format(self.logger.name), + ) + ref_runner.set_flat_mode_list(ref_modes) + ref_runner.run() + self.logger.console(" ") + if create_mode and ref_runner.results: + self.logger.console( + "Run errors were encountered for the following conditions:", + logging.WARNING, + ) + for r in ref_runner.results: + self.logger.console( + " - {} ({})\n log in {}\n".format( + r[2], r[0].split()[0], r[3] + ), + logging.INFO, + ) + self.logger.console(" ") + if "valgrind" in self.args and self.args["valgrind"]: + self.logger.console("\nValgrind result", logging.INFO) + ref_valgrind_analyzer = IvasModeAnalyzer( + ref_dir, + site_config="self_test", + in_dir_dict=in_dir_dict, + enable_logging=True, + logger_name="{}.refanalyzer".format(self.logger.name), + ) + ref_valgrind_analyzer.set_flat_mode_list(run_dict) + ref_valgrind_analyzer.get_valgrind_errors() + + # check for test binaries + if not create_mode: + test_dir = os.path.join(constants.SCRIPTS_BASE_DIR, "test") + if build_test: + self.logger.console( + "Binaries to be tested do not exist, building them", logging.INFO + ) + # build test source + test_builder = IvasBuilder( + os.path.realpath(constants.WC_BASE_DIR), + enable_logging=True, + logger_name="{}.testbuilder".format(self.logger.name), + ) + test_build_success = test_builder.build(constants.WC_BASE_DIR) + if test_build_success == False: + self.logger.console( + "Error when building the test binaries, aborting...", + logging.CRITICAL, + ) + sys.exit() + + # create test items + self.logger.console("Creating test files...", logging.INFO) + valgrind = [] + if self.valgrind is not None and self.args["valgrind"] is True: + valgrind = self.valgrind + test_runner = IvasModeRunner( + dir_name=test_dir, + site_config="self_test", + max_workers=self.args["max_workers"], + in_dir_dict=in_dir_dict, + encoder_binary=self.args["enctest"], + decoder_binary=self.args["dectest"], + pcm_out=True, + test_tool=valgrind, + enable_logging=True, + logger_name="{}.testrunner".format(self.logger.name), + ) + test_runner.set_flat_mode_list(run_dict) + test_runner.run() + self.logger.console(" ") + self.stat = { + "num_tests": len(run_dict), + "num_tests_be": 0, + "num_tests_done": 0, + "num_tests_failed": 0, + "num_tests_running": 0, + } + + # setup multiprocessing + enable_multiprocessing = True if self.args["max_workers"] > 1 else False + self.lock = threading.Lock() + if enable_multiprocessing: + pool = concurrent.futures.ThreadPoolExecutor( + max_workers=self.args["max_workers"] + ) + self.logger.console("Comparison...") + self.logger.console( + "Comparing {} against reference in {}".format(test_dir, ref_dir), + logging.INFO, + ) + cmp_tasks = [] + + # dictionary for detailed results for failed tests + self.fail_results = { + "BE": { + "testable": 0, + "cnt": 0, + "maximumVal": 0, + "maximumCondition": "", + "conditions": [], + }, + "SNR": { + "testable": 0, + "ref": {"cnt": 0, "conditions": []}, + "test": {"cnt": 0, "conditions": []}, + "chans": {}, + }, + "PESQ": { + "testable": 0, + "cnt": 0, + "maximumVal": 0, + "maximumCondition": "", + "conditions": [], + "ref": {"cnt": 0, "conditions": []}, + "test": {"cnt": 0, "conditions": []}, + }, + "ref_condition_run_errors": {"cnt": 0, "conditions": []}, + "test_condition_run_errors": {"cnt": 0, "conditions": []}, + "missing_ref_conditions": {"cnt": 0, "conditions": []}, + "missing_test_conditions": {"cnt": 0, "conditions": []}, + "corrupt_ref_conditions": {"cnt": 0, "conditions": []}, + "corrupt_test_conditions": {"cnt": 0, "conditions": []}, + "diff_nsamples_conditions": {"cnt": 0, "conditions": []}, + "detailedResults": [], + } + self.run_pesq = self.args["pesq"] + failed_ref_conditions = {} + if run_ref and ref_runner.results: + for x in ref_runner.results: + failed_ref_conditions.update({x[1]: x}) + + failed_test_conditions = {} + if test_runner.results: + for x in test_runner.results: + failed_test_conditions.update({x[1]: x}) + + for mode in run_dict: + if enable_multiprocessing: + cmp_tasks.append( + pool.submit( + self.test_files, + mode, + run_dict[mode], + failed_ref_conditions, + failed_test_conditions, + ) + ) + else: + self.test_files( + mode, + run_dict[mode], + failed_ref_conditions, + failed_test_conditions, + ) + + if enable_multiprocessing: + finished_tasks = concurrent.futures.wait(cmp_tasks) + while True: + if len(finished_tasks.not_done) == 0: + break + + # create summary file + summary_file_name = os.path.join( + constants.SCRIPTS_BASE_DIR, + "".join(["self_test_summary", constants.LOG_FILE_EXT]), + ) + formatter = IvasLogFileFormatter("%(message)s") + self.create_logging_file( + constants.SCRIPTS_BASE_DIR, "self_test_summary", formatter + ) + # from here on, everything that is logged also goes to the summary file + # shell escape can safely be used for coloring the output w/o ending up in the + # summary file + self.logger.console(" ", logging.INFO) + self.logger.console( + "Comparing {} against reference in {}\n".format(test_dir, ref_dir), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + self.logger.console("----------------", logging.INFO) + self.logger.console("Summary", logging.INFO) + self.logger.console("----------------", logging.INFO) + self.logger.console(" ", logging.INFO) + + if self.stat["num_tests_be"] == self.stat["num_tests"]: + self.logger.console( + "All {} tests are bitexact".format(self.stat["num_tests"]), + logging.INFO, + ) + else: + self.logger.console( + "{} of {} tests failed!\n".format( + self.stat["num_tests"] - self.stat["num_tests_be"], + self.stat["num_tests"], + ), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + # reference condititions (run errors, missing ref conditions, corrupt ref conditions) + if ( + self.fail_results["missing_ref_conditions"]["cnt"] > 0 + or self.fail_results["corrupt_ref_conditions"]["cnt"] > 0 + or run_ref + and ref_runner.results + ): + self.logger.console("Summary of reference conditions", logging.INFO) + self.logger.console("----------------", logging.INFO) + if run_ref and ref_runner.results: + self.logger.console( + "{} reference conditions had run errors".format( + len(ref_runner.results) + ), + logging.INFO, + ) + for r in ref_runner.results: + self.logger.console( + " - {} ({})\n log in {}\n".format( + r[2], r[0].split()[0], r[3] + ), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + if self.fail_results["missing_ref_conditions"]["cnt"] > 0: + self.logger.console( + "{} reference conditions do not exist!".format( + self.fail_results["missing_ref_conditions"]["cnt"] + ), + logging.INFO, + ) + for condition in self.fail_results["missing_ref_conditions"][ + "conditions" + ]: + self.logger.console( + " - {}".format(condition), logging.INFO + ) + self.logger.console(" ", logging.INFO) + if self.fail_results["corrupt_ref_conditions"]["cnt"] > 0: + self.logger.console( + "{} reference conditions could not be opened!".format( + self.fail_results["corrupt_ref_conditions"]["cnt"] + ), + logging.INFO, + ) + for condition in self.fail_results["corrupt_ref_conditions"][ + "conditions" + ]: + self.logger.console( + " - {}".format(condition), logging.INFO + ) + self.logger.console(" ", logging.INFO) + + # test conditions (run errors, missing test conditions, corrput test conditions) + if ( + self.fail_results["missing_test_conditions"]["cnt"] > 0 + or self.fail_results["corrupt_test_conditions"]["cnt"] > 0 + or test_runner.results + ): + self.logger.console("Summary of test conditions", logging.INFO) + self.logger.console("----------------", logging.INFO) + if test_runner.results: + self.logger.console( + "{} test conditions had run errors:".format( + len(test_runner.results) + ), + logging.INFO, + ) + for r in test_runner.results: + self.logger.console( + " - {} ({})\n log in {}\n".format( + r[2], r[0].split()[0], r[3] + ), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + if "valgrind" in self.args and self.args["valgrind"]: + self.logger.console("Valgrind result:", logging.INFO) + test_valgrind_analyzer = IvasModeAnalyzer( + test_dir, + site_config="self_test", + in_dir_dict=in_dir_dict, + enable_logging=True, + logger_name="{}.testanalyzer".format(self.logger.name), + ) + test_valgrind_analyzer.set_flat_mode_list(run_dict) + test_valgrind_analyzer.get_valgrind_errors() + self.logger.console(" ", logging.INFO) + if self.fail_results["missing_test_conditions"]["cnt"] > 0: + self.logger.console( + "{} test conditions do not exist!".format( + self.fail_results["missing_test_conditions"]["cnt"] + ), + logging.INFO, + ) + for condition in self.fail_results["missing_test_conditions"][ + "conditions" + ]: + self.logger.console( + " - {}".format(condition), logging.INFO + ) + self.logger.console(" ", logging.INFO) + if self.fail_results["corrupt_test_conditions"]["cnt"] > 0: + self.logger.console( + "{} test conditions could not be opened!".format( + self.fail_results["corrupt_test_conditions"]["cnt"] + ), + logging.INFO, + ) + for condition in self.fail_results["corrupt_test_conditions"][ + "conditions" + ]: + self.logger.console( + " - {}".format(condition), logging.INFO + ) + self.logger.console(" ", logging.INFO) + + # conditions where ref and test vectors have a different number of samples + if self.fail_results["diff_nsamples_conditions"]["cnt"] > 0: + self.logger.console( + "Summary of sample number difference ", logging.INFO + ) + self.logger.console("----------------", logging.INFO) + self.logger.console( + "{} conditions have different number of samples!".format( + self.fail_results["diff_nsamples_conditions"]["cnt"] + ), + logging.INFO, + ) + for condition in self.fail_results["diff_nsamples_conditions"][ + "conditions" + ]: + self.logger.console( + " - {} ({},{})".format( + condition[1], condition[2][0], condition[2][1] + ), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + + # BE tests (only where BE could be tested) + self.logger.console("Summary of BE tests", logging.INFO) + self.logger.console("----------------", logging.INFO) + if self.fail_results["BE"]["cnt"] == 0: + self.logger.console( + "All {} testable conditions are BE with their reference vectors".format( + self.fail_results["BE"]["testable"] + ), + logging.INFO, + ) + else: + self.logger.console( + "{} conditions are not BE with their reference vectors".format( + self.fail_results["BE"]["cnt"] + ), + logging.INFO, + ) + self.logger.console( + " maximum difference of +/-{} encountered in condition:".format( + self.fail_results["BE"]["maximumVal"] + ), + logging.INFO, + ) + self.logger.console( + " {}".format(self.fail_results["BE"]["maximumCondition"]), + logging.INFO, + ) + self.logger.console( + " The following conditions are not BE:", logging.INFO + ) + for condition in self.fail_results["BE"]["conditions"]: + self.logger.console( + " - {} (+/-{})".format(condition[1], condition[2]), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + + if self.args["pesq"]: + self.logger.console("Summary of PESQ tests", logging.INFO) + self.logger.console("----------------", logging.INFO) + if self.fail_results["PESQ"]["cnt"] == 0: + self.logger.console( + "All {} testable conditions have no difference in the PESQ scores w.r.t. the reference vectors".format( + self.fail_results["PESQ"]["testable"] + ), + logging.INFO, + ) + else: + self.logger.console( + "{} conditions have changed the PESQ scores".format( + self.fail_results["PESQ"]["cnt"] + ), + logging.INFO, + ) + if self.fail_results["PESQ"]["maximumCondition"] != "": + self.logger.console( + " maximum degradation of {0:+.4f} encountered in condition:".format( + self.fail_results["PESQ"]["maximumVal"] + ), + logging.INFO, + ) + self.logger.console( + " - {}".format( + self.fail_results["PESQ"]["maximumCondition"] + ), + logging.INFO, + ) + else: + self.logger.console( + " no degradation encountered", logging.INFO + ) + self.logger.console( + " The following conditions have changed PESQ scores:", + logging.INFO, + ) + for condition in self.fail_results["PESQ"]["conditions"]: + self.logger.console( + " - {0:s} ({1:+0.4f})".format( + condition[1], condition[2] + ), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + + # SNR + self.logger.console("Summary of SNR tests", logging.INFO) + self.logger.console("----------------", logging.INFO) + # sort list of chan ids + snr_chans = list(self.fail_results["SNR"]["chans"].keys()) + snr_chans.sort() + for snr_chan in snr_chans: + if ( + self.fail_results["SNR"]["chans"][snr_chan]["cnt"] == 0 + and self.fail_results["SNR"]["ref"]["cnt"] == 0 + and self.fail_results["SNR"]["test"]["cnt"] == 0 + ): + self.logger.console( + "There is no difference in the SNR scores of {} w.r.t. the reference vectors\n".format( + snr_chan + ), + logging.INFO, + ) + else: + if self.fail_results["SNR"]["ref"]["cnt"] != 0: + self.logger.console( + "{} conditions have no reference SNR values available for {}:".format( + self.fail_results["SNR"]["ref"]["cnt"], snr_chan + ), + logging.INFO, + ) + for condition in self.fail_results["SNR"]["ref"][ + "conditions" + ]: + self.logger.console( + " - {}".format(condition), logging.INFO + ) + if self.fail_results["SNR"]["test"]["cnt"] != 0: + self.logger.console( + "{} conditions have no test SNR values available for {}:".format( + self.fail_results["SNR"]["test"]["cnt"], snr_chan + ), + logging.INFO, + ) + for condition in self.fail_results["SNR"]["test"][ + "conditions" + ]: + self.logger.console( + " - {}".format(condition), logging.INFO + ) + if self.fail_results["SNR"]["chans"][snr_chan]["cnt"] != 0: + self.logger.console( + "{} conditions have changed the SNR scores of {}".format( + self.fail_results["SNR"]["chans"][snr_chan]["cnt"], + snr_chan, + ), + logging.INFO, + ) + if ( + self.fail_results["SNR"]["chans"][snr_chan][ + "maximumCondition" + ] + != "" + ): + self.logger.console( + " maximum degradation of {0:+.3f} encountered in condition:".format( + self.fail_results["SNR"]["chans"][snr_chan][ + "maximumVal" + ] + ), + logging.INFO, + ) + self.logger.console( + " - {}".format( + self.fail_results["SNR"]["chans"][snr_chan][ + "maximumCondition" + ] + ), + logging.INFO, + ) + else: + self.logger.console( + " no degradation encountered", logging.INFO + ) + self.logger.console( + " The following conditions have changed the SNR scores of {}:".format( + snr_chan + ), + logging.INFO, + ) + for condition in self.fail_results["SNR"]["chans"][ + snr_chan + ]["conditions"]: + self.logger.console( + " - {} ({})".format(condition[1], condition[2]), + logging.INFO, + ) + self.logger.console(" ", logging.INFO) + + self.logger.console("\n") + self.logger.console( + "The detailed summary can be found in {}\n\n\n".format( + summary_file_name + ), + logging.INFO, + ) + + if self.stat["num_tests_be"] != self.stat["num_tests"]: + self.logger.info("\n\n") + self.logger.info("Detailed summary of all failed tests") + self.logger.info("------------------------------------\n") + for r in self.fail_results["detailedResults"]: + for l in r: + self.logger.info(l) + + +if __name__ == "__main__": + if sys.version_info[0] < 3 or sys.version_info[1] < 7: + print( + "Minimum requirement is Python 3.7, currently running Python {}.{}".format( + sys.version_info[0], sys.version_info[1] + ) + ) + exit() + script = SelfTest() + script.run() diff --git a/scripts/switchPaths/sw_13k2_512k.bin b/scripts/switchPaths/sw_13k2_512k.bin new file mode 100644 index 0000000000..6a3bf8d3e6 --- /dev/null +++ b/scripts/switchPaths/sw_13k2_512k.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c4f1de1f88faaf5eccdceed7afa71dadb9e6d87d61d8a5929e683528aeb129e +size 60000 diff --git a/scripts/switchPaths/sw_13k2_to_128k_10fr.bin b/scripts/switchPaths/sw_13k2_to_128k_10fr.bin new file mode 100644 index 0000000000..2727200fe0 --- /dev/null +++ b/scripts/switchPaths/sw_13k2_to_128k_10fr.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b14c666d436f8a004ea055b28eb8f0866c436f32a0b44af56579fc333ce58050 +size 4000 diff --git a/scripts/switchPaths/sw_amrwb.bin b/scripts/switchPaths/sw_amrwb.bin new file mode 100644 index 0000000000..914172ed40 --- /dev/null +++ b/scripts/switchPaths/sw_amrwb.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42508f85bbbccf03a08ad34bd21bbe1bc38928e2fcaf033a1c0ea09169d0fe4f +size 12580 diff --git a/scripts/switchPaths/sw_amrwb_evs.bin b/scripts/switchPaths/sw_amrwb_evs.bin new file mode 100644 index 0000000000..bd1622747b --- /dev/null +++ b/scripts/switchPaths/sw_amrwb_evs.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c71ba9cbb635d06c8a0cc3211c1ab819265a05e484d47a8318e6479c923aebf +size 20260 diff --git a/scripts/switchPaths/sw_amrwb_evs2.bin b/scripts/switchPaths/sw_amrwb_evs2.bin new file mode 100644 index 0000000000..cf85d98109 --- /dev/null +++ b/scripts/switchPaths/sw_amrwb_evs2.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f15558c58ed1ee433d60952c37b4593a3429a46616cd33fb5fa88966e3f5077 +size 60000 diff --git a/scripts/switchPaths/sw_highest.bin b/scripts/switchPaths/sw_highest.bin new file mode 100644 index 0000000000..e9957a0d67 --- /dev/null +++ b/scripts/switchPaths/sw_highest.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:938932630efca29c853e70d097afa74260167a5562a19b01cf8bb984f65a3c21 +size 16000 diff --git a/scripts/switchPaths/sw_nb1.bin b/scripts/switchPaths/sw_nb1.bin new file mode 100644 index 0000000000..dafbbf0dba --- /dev/null +++ b/scripts/switchPaths/sw_nb1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cfb313b3c1108c902eea7135572a03d46624ac23bc713533f84b8922814728a +size 800 diff --git a/scripts/switchPaths/sw_nb5.bin b/scripts/switchPaths/sw_nb5.bin new file mode 100644 index 0000000000..fce9caf874 --- /dev/null +++ b/scripts/switchPaths/sw_nb5.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1f5daa955bbba9c7d2751a4af537dc167946700edb9b69dffc62d557a39fad3 +size 1600 diff --git a/scripts/switchPaths/sw_swb1.bin b/scripts/switchPaths/sw_swb1.bin new file mode 100644 index 0000000000..1a8027f457 --- /dev/null +++ b/scripts/switchPaths/sw_swb1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5b1c8aef8057c25b594513b46b3ba9853a8c9556fda2f4c5dc84a10241c51fe +size 1600 diff --git a/scripts/switchPaths/sw_wb1.bin b/scripts/switchPaths/sw_wb1.bin new file mode 100644 index 0000000000..bad14593c5 --- /dev/null +++ b/scripts/switchPaths/sw_wb1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6793118e380d768c39aaa3eb6505fc54efbf2215032845ce79f0d131e3ef9b3f +size 1800 diff --git a/scripts/switchPaths/sw_wb5.bin b/scripts/switchPaths/sw_wb5.bin new file mode 100644 index 0000000000..36e5ce498c --- /dev/null +++ b/scripts/switchPaths/sw_wb5.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adbea95dc5ddd35a616fc8c27cd8d5310a31f511671b80caac4879a0ec87de00 +size 3600 diff --git a/scripts/switchPaths/swb_high1.bin b/scripts/switchPaths/swb_high1.bin new file mode 100644 index 0000000000..fe074e5a2e --- /dev/null +++ b/scripts/switchPaths/swb_high1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa29cf9e0b348dc3fa330848c4d974f96cda605129e867f522228d14c15c5f18 +size 16000 diff --git a/scripts/switchPaths/swb_low1.bin b/scripts/switchPaths/swb_low1.bin new file mode 100644 index 0000000000..aa6c137905 --- /dev/null +++ b/scripts/switchPaths/swb_low1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5861a8ad4bd66eab0014d84b1a4073a0e355d930b7a786da7577154c6f0f3da5 +size 16000 diff --git a/scripts/switchPaths/wb_high1.bin b/scripts/switchPaths/wb_high1.bin new file mode 100644 index 0000000000..db65048624 --- /dev/null +++ b/scripts/switchPaths/wb_high1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:025d6d2d84935f40a21452ec14dfc3b954401447f50843285522c1e484896087 +size 14400 diff --git a/scripts/switchPaths/wb_low1.bin b/scripts/switchPaths/wb_low1.bin new file mode 100644 index 0000000000..15f2e0f949 --- /dev/null +++ b/scripts/switchPaths/wb_low1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:887eec052b27812b950d7ed0e3a934b4a15d481de07b9ddac97ed6cdecceb47e +size 12000 diff --git a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin new file mode 100644 index 0000000000..17691616db --- /dev/null +++ b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0950686593146f4d7c7b622d2e52afdc10cc63481824d516ee88f7e2996f0de4 +size 204970 diff --git a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin new file mode 100644 index 0000000000..f6cf12bf4f --- /dev/null +++ b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1467d78861387e370ba916a93730961dd2d4abf1eff133740f9b7fafb89b32c4 +size 403802 diff --git a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin new file mode 100644 index 0000000000..8eeacfc0de --- /dev/null +++ b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1740802509d5c3076a259b113ffc832e5585da9bc0fdbe851b89d524ccba374e +size 598010 diff --git a/scripts/td_object_renderer/metadata/create_metadata_v3.m b/scripts/td_object_renderer/metadata/create_metadata_v3.m new file mode 100644 index 0000000000..a8e04c3221 --- /dev/null +++ b/scripts/td_object_renderer/metadata/create_metadata_v3.m @@ -0,0 +1,433 @@ +% +% (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, +% Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +% Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +% Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +% contributors to this repository. All Rights Reserved. +% +% This software is protected by copyright law and by international treaties. +% The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, +% Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., +% Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, +% Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other +% contributors to this repository retain full ownership rights in their respective contributions in +% the software. This notice grants no license of any kind, including but not limited to patent +% license, nor is any license granted by implication, estoppel or otherwise. +% +% Contributors are required to enter into the IVAS codec Public Collaboration agreement before making +% contributions. +% +% This software is provided "AS IS", without any express or implied warranties. The software is in the +% development stage. It is intended exclusively for experts who have experience with such software and +% solely for the purpose of inspection. All implied warranties of non-infringement, merchantability +% and fitness for a particular purpose are hereby disclaimed and excluded. +% +% Any dispute, controversy or claim arising under or in relation to providing this software shall be +% submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in +% accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and +% the United Nations Convention on Contracts on the International Sales of Goods. +% + +% Sources are at stationary positions, but their orientations rotate. Since +% a source directivity is defined, we should hear a modulated volume +% (louder when the source is pointed at the listener). +% Listener is stationary +% Source orientation cone defined (not changing). + +clear;clc;close all; +fclose('all'); + +numFrames = 1000; +reverbNumCombFilters = -1; % Disabled +reverbRoomPreset = -1; % Disabled + +%fileNamePattern = 'm1'; % azimuth moves back and forth, elev fixed=0 +%fileNamePattern = 'm2'; % azimuth moves back and forth, elev fixed=+30 +%fileNamePattern = 'm3'; % azimuth moves back and forth, elev fixed=+45 +%fileNamePattern = 'm4'; % object moves in a circle at z=-1 (in front of the listener), shifted upward to make sure that the elevation is always above the listener. Both az & el changing. +%fileNamePattern = 'm5'; % elev=0, azimuth constantly increasing, so moving in a circle in the horizontal plane, listener at the center. +%fileNamePattern = 'x1'; % A synthetic test, loudspeaker position 0 +%fileNamePattern = 'x2'; % A synthetic test, loudspeaker position 30 +%fileNamePattern = 'x3'; % A synthetic test, loudspeaker position 90 +%fileNamePattern = 'x4'; % A synthetic test, loudspeaker position 135 + + +% fileNamePatterns = ["m1"; % azimuth moves back and forth, elev fixed=0 +% "m2"; % azimuth moves back and forth, elev fixed=+30 +% "m3"; % azimuth moves back and forth, elev fixed=+45 +% "m4"; % object moves in a circle at z=-1 (in front of the listener), shifted upward to make sure that the elevation is always above the listener. Both az & el changing. +% "m5"; % elev=0, azimuth constantly increasing, so moving in a circle in the horizontal plane, listener at the center. +% "x1"; % A synthetic test, loudspeaker position 0 +% "x2"; % A synthetic test, loudspeaker position 30 +% "x3"; % A synthetic test, loudspeaker position 90 +% "x4";]; % A synthetic test, loudspeaker position 135 + +fileNamePatterns = ["t01"; % + "t02"; % + "t03"; % + "t04"; % + "t05"; % + "t06"; % + "t07"; % + "t08"; % + "t09"; % + "t10"; % + "t11"; % + %"test_drums"; + %"wmops"; + "wmops2"; + %"azminus20"; + %"azplus20"; + "spiral"; + "circle_minus_30"; + "gainchange" + ]; % + +%fileNamePatterns = ["spiral"]; % + +%fileNamePatterns = ["m5";]; + +for i = 1:length(fileNamePatterns) + + fileNamePattern = fileNamePatterns(i); + disp(fileNamePattern) + + switch fileNamePattern + case "t11" + numObjects = 2; + case "t06" + numObjects = 3; + case {"t05", "wmops", "wmops2", "spiral"} + numObjects = 4; + otherwise + numObjects = 1; + end + + switch fileNamePattern + case "t01" + xr = 11.164; + case "t02" + xr = 12.442; + case "t03" + xr = 9.089; + case "t04" + xr = 8.000; + case "t05" + xr = 17.267; + case "t06" + xr = 8.000; + case "t07" + xr = 7.192; + case "t08" + xr = 7.192; + case "t09" + xr = 7.192; + case "t10" + xr = 9.08; + case "t11" + xr = 8.000; + case "test_drums" + xr = 17.267; + case {"wmops","wmops2"} + xr = 7.192; + case "azminus20" + xr = 12.442; + case "azplus20" + xr = 12.442; + case "spiral" + xr = 7.192; + case "circle_minus_30" + xr = 9.08; + case "gainchange" + xr = 1; + end + + % File names and handles + fileIDs_txt = zeros(1,numObjects); + for iObj = 1:numObjects + fileIDs_txt(iObj) = fopen(sprintf( 'csv\\%s_ch%d.csv',fileNamePattern,iObj),'wt'); + end + + % This setup has x-y plane as horizontal, with z vertical. Angles are + % measured from the x axis, with positive angles to the right/clockwise. + radii_source = [1, 1, 1, 1]; + thetas_position_source = [0]; + delta_theta_source_position = 1; + + % To do: Probably need to impose a range on these, or at least simplify + % when a cone becomes a sphere. CAMix defaults these to 360, 360, 1.0. + cone_angle_1 = 360; + cone_angle_2 = 360; + rear_level = 1.0; + + %delta_theta = 0.020 * 30; + %theta_store = zeros([1,numFrames]); + + time = 0; + time_store = zeros([1,numFrames]); + azim_store = zeros([numObjects,numFrames]); + elev_store = zeros([numObjects,numFrames]); + + % Data for each frame + for iFrame = 1:numFrames + % Calculate for frame ------------------------------------------------- + listenerPosition = [0,0,0]; + % Front, up vectors: Looking in x direction with up in z direction + listenerOrientation = [1,0,0,0,0,1]; + + sourcePositions = zeros(3,numObjects); + sourceDirections = zeros(3,numObjects); + sourceDirectivity = zeros(3,numObjects); + + for ob = 1:numObjects + %% + gain = 1.0; % Default gain setting + switch fileNamePattern + %% Stationary objects + case 't01' % 15 degrees left, zero elevation + x = 1.0 * radii_source(ob) * cosd(-15); + y = 1.0 * radii_source(ob) * sind(-15); + z = 0; + case 't02' % 30 degrees right, zero elevation + x = 1.0 * radii_source(ob) * cosd(30); + y = 1.0 * radii_source(ob) * sind(30); + z = 0; + case 't03' % 45 degrees right, zero elevation + x = 1.0 * radii_source(ob) * cosd(45); + y = 1.0 * radii_source(ob) * sind(45); + z = 0; + case 't04' + azim = 30; elev = 20; + x = 1.0 * radii_source(ob) * cosd(elev) * cosd(-azim); + y = 1.0 * radii_source(ob) * cosd(elev) * sind(-azim); + z = 1.0 * radii_source(ob) * sind(elev); + case 't05' + switch ob + case 1 + az=-60; + case 2 + az=-20; + case 3 + az=20; + case 4 + az=60; + end + x = 1.0 * cosd(az); + y = 1.0 * sind(az); + z = 0; + case 't06' + switch ob + case 1 + az=-50; + case 2 + az=-20; + case 3 + az=30; + end + x = 1.0 * cosd(az); + y = 1.0 * sind(az); + z = 0; + %% Part 2 - Moving objects + case 't07' % Horizontal circle. + x = 1.0 * radii_source(ob) * cosd(360/xr*time); + y = 1.0 * radii_source(ob) * sind(360/xr*time); + z = 0; + case 't08' + % Azimuth = 0 (straight ahead) + % Note that this should keep the object at distance radii_source(ob). + elevmax = 30; + y = 0; + z = sind(elevmax) * radii_source(ob) * cosd(360/xr*time); + alpha = asind(z/radii_source(ob)); + x = 1 * radii_source(ob) * cosd(alpha); + case 't09' + % Vertically oriented circle at fixed x position in + % front of listener. + % Note that this should keep the object at distance radii_source(ob). + x = 1 * radii_source(ob) * cosd(-30); + y = sind(30) * radii_source(ob) * sind(360/xr*time); + z = sind(30) * radii_source(ob) * cosd(360/xr*time); + case 't10' + % Horizontal circle at 20 elevation + alphaelev=20; + x = 1.0 * radii_source(ob) * cosd(alphaelev) * cosd(360/xr*time); + y = 1.0 * radii_source(ob) * cosd(alphaelev) * sind(360/xr*time); + z = 1.0 * radii_source(ob) * sind(alphaelev); + case 't11' + % Cross talk, 1 talker stationary, one talker follows + % circular trajectory + switch ob + case 1 + az = -50; + case 2 + az = -20 + 360/xr*time; + end + x = radii_source(ob) * cosd(az); + y = radii_source(ob) * sind(az); + z = 0; + case 'test_drums' + % Test case with drum channel only from case 5. + az=-60; + x = 1.0 * cosd(az); + y = 1.0 * sind(az); + z = 0; + case 'wmops' + switch ob + case 1 + az = 0 - 360/xr*time; + case 2 + az = 90 - 360/xr*time; + case 3 + az = 180 - 360/xr*time; + case 4 + az = 270 - 360/xr*time; + end + x = 1.0 * radii_source(ob) * cosd(az); + y = 1.0 * radii_source(ob) * sind(az); + z = 0; + case 'wmops2' + switch ob + case 1 + rot = 0 - 360/xr*time; + case 2 + rot = 90 - 360/xr*time; + case 3 + rot = 180 - 360/xr*time; + case 4 + rot = 270 - 360/xr*time; + end + x = 1 * radii_source(ob) * cosd(-30); + y = sind(30) * radii_source(ob) * sind(rot); + z = sind(30) * radii_source(ob) * cosd(rot); + case 'azminus20' + x = 1.0 * radii_source(ob) * cosd(-20); + y = 1.0 * radii_source(ob) * sind(-20); + z = 0; + case 'azplus20' + x = 1.0 * radii_source(ob) * cosd(20); + y = 1.0 * radii_source(ob) * sind(20); + z = 0; + case 'spiral' + switch ob + case 1 + rot = 360/xr*time; + case 2 + rot = 360/xr*time - 90; + case 3 + rot = 360/xr*time - 180; + case 4 + rot = 360/xr*time - 270; + end + x = (0.5*rot) * radii_source(ob) * cosd(rot); + y = sind(0.5*rot) * radii_source(ob) * sind(rot); + z = radii_source(ob) * cosd(0.5*rot); + case 'circle_minus_30' + % Horizontal circle at 20 elevation + alphaelev=-30; + x = 1.0 * radii_source(ob) * cosd(alphaelev) * cosd(360/xr*time); + y = 1.0 * radii_source(ob) * cosd(alphaelev) * sind(360/xr*time); + z = 1.0 * radii_source(ob) * sind(alphaelev); + case 'gainchange' + x = 1.0 * radii_source(ob) * cosd(-15); + y = 1.0 * radii_source(ob) * sind(-15); + z = 0; + gain = abs(sind(360/xr*time)); + otherwise + error("Bad file pattern.") + end + + %% + sourcePositions(:,ob) = [x;y;z]; + + % Pointing direction of the source. Since the sources are conical, + % there is no orientation, only a central axis. + dirx = 0.0; + diry = 0.0; + dirz = 1.0; + sourceDirections(:,ob) = [dirx;diry;dirz]; + sourceDirectivity(:,ob) = [cone_angle_1, cone_angle_2, rear_level]; + end + + % Storage for final plotting ------------------------------------------ + theta_store(iFrame) = thetas_position_source(1); + + for ob = 1:numObjects + + % ----------------------------------------------------------------- + % Write data for frame, text + % Write values to file for current object + fileID_txt = fileIDs_txt(ob); + + x = sourcePositions(1,ob); + y = sourcePositions(2,ob); + z = sourcePositions(3,ob); + horiz = sqrt(x^2 + y^2); + r = sqrt(x^2 + y^2 + z^2); + azim = atan2d(y, x); % NB Azimuth is positive left + elev = atan2d(z, horiz); + + azim_store(ob,iFrame) = azim; + elev_store(ob,iFrame) = elev; + + fprintf(fileID_txt,'%04d,', iFrame-1); + fprintf(fileID_txt,'%+07.2f,', azim); + fprintf(fileID_txt,'%+06.2f,', elev); + fprintf(fileID_txt,'%05.2f,', r); + fprintf(fileID_txt,'%06.2f,', 0.0); % Spread. + fprintf(fileID_txt,'%04.2f', gain); % Gain. No comma at end of line. + + fprintf(fileID_txt,'\n'); + % ----------------------------------------------------------------- + end + time_store(iFrame) = time; + time = time + 0.02; % 20ms + end + + % Save for ambisonics + azim_store = -azim_store; + if ~exist("../ambisonics_rendering/scenes/", 'dir') + mkdir("../ambisonics_rendering/scenes/") + end + save(sprintf("../ambisonics_rendering/scenes/%s.mat",fileNamePattern),'azim_store','elev_store'); + azim_store = -azim_store; + + fig = figure; + subplot(2,1,1) + plot(time_store,azim_store) + ylim([-180,180]) + xlabel("Time, s",'fontsize',18) + ylabel("Azimuth, degrees",'fontsize',18) + xlim([0 xr]) + subplot(2,1,2) + plot(time_store,elev_store) + ylim([-90,90]) + xlabel("Time, s",'fontsize',18) + ylabel("Elevation, degrees",'fontsize',18) + xlim([0 xr]) + switch fileNamePattern + case 't05' + legend('Drums','Guitar','Bass','Vocal'); + case 't06' + legend('Female 1','Male','Female 2'); + case 't11' + legend('Female','Male'); + case 'wmops2' + legend('Object 1', 'Object 2', 'Object 3', 'Object 4'); + end + %print(sprintf("%s.pdf",fileNamePattern),'-dpdf','-bestfit') + print(sprintf("%s.png",fileNamePattern),'-dpng') + close(fig) + + for fid = fileIDs_txt + fclose(fid); + end +end +%copyfile("test_metadata_3.met","..\\..\\..\\Workspace_msvc\\test_metadata.met",'f') + +% figure; +% plot(wrapTo360(theta_store)) +% ylabel("Theta") +% xlabel("Frame no.") + +% figure; +% plot(x_store, -z_store,'x') diff --git a/scripts/td_object_renderer/metadata/csv/t01_ch1.csv b/scripts/td_object_renderer/metadata/csv/t01_ch1.csv new file mode 100644 index 0000000000..6ba66e86c6 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t01_ch1.csv @@ -0,0 +1,1000 @@ +0000,-015.00,+00.00,01.00,000.00,1.00 +0001,-015.00,+00.00,01.00,000.00,1.00 +0002,-015.00,+00.00,01.00,000.00,1.00 +0003,-015.00,+00.00,01.00,000.00,1.00 +0004,-015.00,+00.00,01.00,000.00,1.00 +0005,-015.00,+00.00,01.00,000.00,1.00 +0006,-015.00,+00.00,01.00,000.00,1.00 +0007,-015.00,+00.00,01.00,000.00,1.00 +0008,-015.00,+00.00,01.00,000.00,1.00 +0009,-015.00,+00.00,01.00,000.00,1.00 +0010,-015.00,+00.00,01.00,000.00,1.00 +0011,-015.00,+00.00,01.00,000.00,1.00 +0012,-015.00,+00.00,01.00,000.00,1.00 +0013,-015.00,+00.00,01.00,000.00,1.00 +0014,-015.00,+00.00,01.00,000.00,1.00 +0015,-015.00,+00.00,01.00,000.00,1.00 +0016,-015.00,+00.00,01.00,000.00,1.00 +0017,-015.00,+00.00,01.00,000.00,1.00 +0018,-015.00,+00.00,01.00,000.00,1.00 +0019,-015.00,+00.00,01.00,000.00,1.00 +0020,-015.00,+00.00,01.00,000.00,1.00 +0021,-015.00,+00.00,01.00,000.00,1.00 +0022,-015.00,+00.00,01.00,000.00,1.00 +0023,-015.00,+00.00,01.00,000.00,1.00 +0024,-015.00,+00.00,01.00,000.00,1.00 +0025,-015.00,+00.00,01.00,000.00,1.00 +0026,-015.00,+00.00,01.00,000.00,1.00 +0027,-015.00,+00.00,01.00,000.00,1.00 +0028,-015.00,+00.00,01.00,000.00,1.00 +0029,-015.00,+00.00,01.00,000.00,1.00 +0030,-015.00,+00.00,01.00,000.00,1.00 +0031,-015.00,+00.00,01.00,000.00,1.00 +0032,-015.00,+00.00,01.00,000.00,1.00 +0033,-015.00,+00.00,01.00,000.00,1.00 +0034,-015.00,+00.00,01.00,000.00,1.00 +0035,-015.00,+00.00,01.00,000.00,1.00 +0036,-015.00,+00.00,01.00,000.00,1.00 +0037,-015.00,+00.00,01.00,000.00,1.00 +0038,-015.00,+00.00,01.00,000.00,1.00 +0039,-015.00,+00.00,01.00,000.00,1.00 +0040,-015.00,+00.00,01.00,000.00,1.00 +0041,-015.00,+00.00,01.00,000.00,1.00 +0042,-015.00,+00.00,01.00,000.00,1.00 +0043,-015.00,+00.00,01.00,000.00,1.00 +0044,-015.00,+00.00,01.00,000.00,1.00 +0045,-015.00,+00.00,01.00,000.00,1.00 +0046,-015.00,+00.00,01.00,000.00,1.00 +0047,-015.00,+00.00,01.00,000.00,1.00 +0048,-015.00,+00.00,01.00,000.00,1.00 +0049,-015.00,+00.00,01.00,000.00,1.00 +0050,-015.00,+00.00,01.00,000.00,1.00 +0051,-015.00,+00.00,01.00,000.00,1.00 +0052,-015.00,+00.00,01.00,000.00,1.00 +0053,-015.00,+00.00,01.00,000.00,1.00 +0054,-015.00,+00.00,01.00,000.00,1.00 +0055,-015.00,+00.00,01.00,000.00,1.00 +0056,-015.00,+00.00,01.00,000.00,1.00 +0057,-015.00,+00.00,01.00,000.00,1.00 +0058,-015.00,+00.00,01.00,000.00,1.00 +0059,-015.00,+00.00,01.00,000.00,1.00 +0060,-015.00,+00.00,01.00,000.00,1.00 +0061,-015.00,+00.00,01.00,000.00,1.00 +0062,-015.00,+00.00,01.00,000.00,1.00 +0063,-015.00,+00.00,01.00,000.00,1.00 +0064,-015.00,+00.00,01.00,000.00,1.00 +0065,-015.00,+00.00,01.00,000.00,1.00 +0066,-015.00,+00.00,01.00,000.00,1.00 +0067,-015.00,+00.00,01.00,000.00,1.00 +0068,-015.00,+00.00,01.00,000.00,1.00 +0069,-015.00,+00.00,01.00,000.00,1.00 +0070,-015.00,+00.00,01.00,000.00,1.00 +0071,-015.00,+00.00,01.00,000.00,1.00 +0072,-015.00,+00.00,01.00,000.00,1.00 +0073,-015.00,+00.00,01.00,000.00,1.00 +0074,-015.00,+00.00,01.00,000.00,1.00 +0075,-015.00,+00.00,01.00,000.00,1.00 +0076,-015.00,+00.00,01.00,000.00,1.00 +0077,-015.00,+00.00,01.00,000.00,1.00 +0078,-015.00,+00.00,01.00,000.00,1.00 +0079,-015.00,+00.00,01.00,000.00,1.00 +0080,-015.00,+00.00,01.00,000.00,1.00 +0081,-015.00,+00.00,01.00,000.00,1.00 +0082,-015.00,+00.00,01.00,000.00,1.00 +0083,-015.00,+00.00,01.00,000.00,1.00 +0084,-015.00,+00.00,01.00,000.00,1.00 +0085,-015.00,+00.00,01.00,000.00,1.00 +0086,-015.00,+00.00,01.00,000.00,1.00 +0087,-015.00,+00.00,01.00,000.00,1.00 +0088,-015.00,+00.00,01.00,000.00,1.00 +0089,-015.00,+00.00,01.00,000.00,1.00 +0090,-015.00,+00.00,01.00,000.00,1.00 +0091,-015.00,+00.00,01.00,000.00,1.00 +0092,-015.00,+00.00,01.00,000.00,1.00 +0093,-015.00,+00.00,01.00,000.00,1.00 +0094,-015.00,+00.00,01.00,000.00,1.00 +0095,-015.00,+00.00,01.00,000.00,1.00 +0096,-015.00,+00.00,01.00,000.00,1.00 +0097,-015.00,+00.00,01.00,000.00,1.00 +0098,-015.00,+00.00,01.00,000.00,1.00 +0099,-015.00,+00.00,01.00,000.00,1.00 +0100,-015.00,+00.00,01.00,000.00,1.00 +0101,-015.00,+00.00,01.00,000.00,1.00 +0102,-015.00,+00.00,01.00,000.00,1.00 +0103,-015.00,+00.00,01.00,000.00,1.00 +0104,-015.00,+00.00,01.00,000.00,1.00 +0105,-015.00,+00.00,01.00,000.00,1.00 +0106,-015.00,+00.00,01.00,000.00,1.00 +0107,-015.00,+00.00,01.00,000.00,1.00 +0108,-015.00,+00.00,01.00,000.00,1.00 +0109,-015.00,+00.00,01.00,000.00,1.00 +0110,-015.00,+00.00,01.00,000.00,1.00 +0111,-015.00,+00.00,01.00,000.00,1.00 +0112,-015.00,+00.00,01.00,000.00,1.00 +0113,-015.00,+00.00,01.00,000.00,1.00 +0114,-015.00,+00.00,01.00,000.00,1.00 +0115,-015.00,+00.00,01.00,000.00,1.00 +0116,-015.00,+00.00,01.00,000.00,1.00 +0117,-015.00,+00.00,01.00,000.00,1.00 +0118,-015.00,+00.00,01.00,000.00,1.00 +0119,-015.00,+00.00,01.00,000.00,1.00 +0120,-015.00,+00.00,01.00,000.00,1.00 +0121,-015.00,+00.00,01.00,000.00,1.00 +0122,-015.00,+00.00,01.00,000.00,1.00 +0123,-015.00,+00.00,01.00,000.00,1.00 +0124,-015.00,+00.00,01.00,000.00,1.00 +0125,-015.00,+00.00,01.00,000.00,1.00 +0126,-015.00,+00.00,01.00,000.00,1.00 +0127,-015.00,+00.00,01.00,000.00,1.00 +0128,-015.00,+00.00,01.00,000.00,1.00 +0129,-015.00,+00.00,01.00,000.00,1.00 +0130,-015.00,+00.00,01.00,000.00,1.00 +0131,-015.00,+00.00,01.00,000.00,1.00 +0132,-015.00,+00.00,01.00,000.00,1.00 +0133,-015.00,+00.00,01.00,000.00,1.00 +0134,-015.00,+00.00,01.00,000.00,1.00 +0135,-015.00,+00.00,01.00,000.00,1.00 +0136,-015.00,+00.00,01.00,000.00,1.00 +0137,-015.00,+00.00,01.00,000.00,1.00 +0138,-015.00,+00.00,01.00,000.00,1.00 +0139,-015.00,+00.00,01.00,000.00,1.00 +0140,-015.00,+00.00,01.00,000.00,1.00 +0141,-015.00,+00.00,01.00,000.00,1.00 +0142,-015.00,+00.00,01.00,000.00,1.00 +0143,-015.00,+00.00,01.00,000.00,1.00 +0144,-015.00,+00.00,01.00,000.00,1.00 +0145,-015.00,+00.00,01.00,000.00,1.00 +0146,-015.00,+00.00,01.00,000.00,1.00 +0147,-015.00,+00.00,01.00,000.00,1.00 +0148,-015.00,+00.00,01.00,000.00,1.00 +0149,-015.00,+00.00,01.00,000.00,1.00 +0150,-015.00,+00.00,01.00,000.00,1.00 +0151,-015.00,+00.00,01.00,000.00,1.00 +0152,-015.00,+00.00,01.00,000.00,1.00 +0153,-015.00,+00.00,01.00,000.00,1.00 +0154,-015.00,+00.00,01.00,000.00,1.00 +0155,-015.00,+00.00,01.00,000.00,1.00 +0156,-015.00,+00.00,01.00,000.00,1.00 +0157,-015.00,+00.00,01.00,000.00,1.00 +0158,-015.00,+00.00,01.00,000.00,1.00 +0159,-015.00,+00.00,01.00,000.00,1.00 +0160,-015.00,+00.00,01.00,000.00,1.00 +0161,-015.00,+00.00,01.00,000.00,1.00 +0162,-015.00,+00.00,01.00,000.00,1.00 +0163,-015.00,+00.00,01.00,000.00,1.00 +0164,-015.00,+00.00,01.00,000.00,1.00 +0165,-015.00,+00.00,01.00,000.00,1.00 +0166,-015.00,+00.00,01.00,000.00,1.00 +0167,-015.00,+00.00,01.00,000.00,1.00 +0168,-015.00,+00.00,01.00,000.00,1.00 +0169,-015.00,+00.00,01.00,000.00,1.00 +0170,-015.00,+00.00,01.00,000.00,1.00 +0171,-015.00,+00.00,01.00,000.00,1.00 +0172,-015.00,+00.00,01.00,000.00,1.00 +0173,-015.00,+00.00,01.00,000.00,1.00 +0174,-015.00,+00.00,01.00,000.00,1.00 +0175,-015.00,+00.00,01.00,000.00,1.00 +0176,-015.00,+00.00,01.00,000.00,1.00 +0177,-015.00,+00.00,01.00,000.00,1.00 +0178,-015.00,+00.00,01.00,000.00,1.00 +0179,-015.00,+00.00,01.00,000.00,1.00 +0180,-015.00,+00.00,01.00,000.00,1.00 +0181,-015.00,+00.00,01.00,000.00,1.00 +0182,-015.00,+00.00,01.00,000.00,1.00 +0183,-015.00,+00.00,01.00,000.00,1.00 +0184,-015.00,+00.00,01.00,000.00,1.00 +0185,-015.00,+00.00,01.00,000.00,1.00 +0186,-015.00,+00.00,01.00,000.00,1.00 +0187,-015.00,+00.00,01.00,000.00,1.00 +0188,-015.00,+00.00,01.00,000.00,1.00 +0189,-015.00,+00.00,01.00,000.00,1.00 +0190,-015.00,+00.00,01.00,000.00,1.00 +0191,-015.00,+00.00,01.00,000.00,1.00 +0192,-015.00,+00.00,01.00,000.00,1.00 +0193,-015.00,+00.00,01.00,000.00,1.00 +0194,-015.00,+00.00,01.00,000.00,1.00 +0195,-015.00,+00.00,01.00,000.00,1.00 +0196,-015.00,+00.00,01.00,000.00,1.00 +0197,-015.00,+00.00,01.00,000.00,1.00 +0198,-015.00,+00.00,01.00,000.00,1.00 +0199,-015.00,+00.00,01.00,000.00,1.00 +0200,-015.00,+00.00,01.00,000.00,1.00 +0201,-015.00,+00.00,01.00,000.00,1.00 +0202,-015.00,+00.00,01.00,000.00,1.00 +0203,-015.00,+00.00,01.00,000.00,1.00 +0204,-015.00,+00.00,01.00,000.00,1.00 +0205,-015.00,+00.00,01.00,000.00,1.00 +0206,-015.00,+00.00,01.00,000.00,1.00 +0207,-015.00,+00.00,01.00,000.00,1.00 +0208,-015.00,+00.00,01.00,000.00,1.00 +0209,-015.00,+00.00,01.00,000.00,1.00 +0210,-015.00,+00.00,01.00,000.00,1.00 +0211,-015.00,+00.00,01.00,000.00,1.00 +0212,-015.00,+00.00,01.00,000.00,1.00 +0213,-015.00,+00.00,01.00,000.00,1.00 +0214,-015.00,+00.00,01.00,000.00,1.00 +0215,-015.00,+00.00,01.00,000.00,1.00 +0216,-015.00,+00.00,01.00,000.00,1.00 +0217,-015.00,+00.00,01.00,000.00,1.00 +0218,-015.00,+00.00,01.00,000.00,1.00 +0219,-015.00,+00.00,01.00,000.00,1.00 +0220,-015.00,+00.00,01.00,000.00,1.00 +0221,-015.00,+00.00,01.00,000.00,1.00 +0222,-015.00,+00.00,01.00,000.00,1.00 +0223,-015.00,+00.00,01.00,000.00,1.00 +0224,-015.00,+00.00,01.00,000.00,1.00 +0225,-015.00,+00.00,01.00,000.00,1.00 +0226,-015.00,+00.00,01.00,000.00,1.00 +0227,-015.00,+00.00,01.00,000.00,1.00 +0228,-015.00,+00.00,01.00,000.00,1.00 +0229,-015.00,+00.00,01.00,000.00,1.00 +0230,-015.00,+00.00,01.00,000.00,1.00 +0231,-015.00,+00.00,01.00,000.00,1.00 +0232,-015.00,+00.00,01.00,000.00,1.00 +0233,-015.00,+00.00,01.00,000.00,1.00 +0234,-015.00,+00.00,01.00,000.00,1.00 +0235,-015.00,+00.00,01.00,000.00,1.00 +0236,-015.00,+00.00,01.00,000.00,1.00 +0237,-015.00,+00.00,01.00,000.00,1.00 +0238,-015.00,+00.00,01.00,000.00,1.00 +0239,-015.00,+00.00,01.00,000.00,1.00 +0240,-015.00,+00.00,01.00,000.00,1.00 +0241,-015.00,+00.00,01.00,000.00,1.00 +0242,-015.00,+00.00,01.00,000.00,1.00 +0243,-015.00,+00.00,01.00,000.00,1.00 +0244,-015.00,+00.00,01.00,000.00,1.00 +0245,-015.00,+00.00,01.00,000.00,1.00 +0246,-015.00,+00.00,01.00,000.00,1.00 +0247,-015.00,+00.00,01.00,000.00,1.00 +0248,-015.00,+00.00,01.00,000.00,1.00 +0249,-015.00,+00.00,01.00,000.00,1.00 +0250,-015.00,+00.00,01.00,000.00,1.00 +0251,-015.00,+00.00,01.00,000.00,1.00 +0252,-015.00,+00.00,01.00,000.00,1.00 +0253,-015.00,+00.00,01.00,000.00,1.00 +0254,-015.00,+00.00,01.00,000.00,1.00 +0255,-015.00,+00.00,01.00,000.00,1.00 +0256,-015.00,+00.00,01.00,000.00,1.00 +0257,-015.00,+00.00,01.00,000.00,1.00 +0258,-015.00,+00.00,01.00,000.00,1.00 +0259,-015.00,+00.00,01.00,000.00,1.00 +0260,-015.00,+00.00,01.00,000.00,1.00 +0261,-015.00,+00.00,01.00,000.00,1.00 +0262,-015.00,+00.00,01.00,000.00,1.00 +0263,-015.00,+00.00,01.00,000.00,1.00 +0264,-015.00,+00.00,01.00,000.00,1.00 +0265,-015.00,+00.00,01.00,000.00,1.00 +0266,-015.00,+00.00,01.00,000.00,1.00 +0267,-015.00,+00.00,01.00,000.00,1.00 +0268,-015.00,+00.00,01.00,000.00,1.00 +0269,-015.00,+00.00,01.00,000.00,1.00 +0270,-015.00,+00.00,01.00,000.00,1.00 +0271,-015.00,+00.00,01.00,000.00,1.00 +0272,-015.00,+00.00,01.00,000.00,1.00 +0273,-015.00,+00.00,01.00,000.00,1.00 +0274,-015.00,+00.00,01.00,000.00,1.00 +0275,-015.00,+00.00,01.00,000.00,1.00 +0276,-015.00,+00.00,01.00,000.00,1.00 +0277,-015.00,+00.00,01.00,000.00,1.00 +0278,-015.00,+00.00,01.00,000.00,1.00 +0279,-015.00,+00.00,01.00,000.00,1.00 +0280,-015.00,+00.00,01.00,000.00,1.00 +0281,-015.00,+00.00,01.00,000.00,1.00 +0282,-015.00,+00.00,01.00,000.00,1.00 +0283,-015.00,+00.00,01.00,000.00,1.00 +0284,-015.00,+00.00,01.00,000.00,1.00 +0285,-015.00,+00.00,01.00,000.00,1.00 +0286,-015.00,+00.00,01.00,000.00,1.00 +0287,-015.00,+00.00,01.00,000.00,1.00 +0288,-015.00,+00.00,01.00,000.00,1.00 +0289,-015.00,+00.00,01.00,000.00,1.00 +0290,-015.00,+00.00,01.00,000.00,1.00 +0291,-015.00,+00.00,01.00,000.00,1.00 +0292,-015.00,+00.00,01.00,000.00,1.00 +0293,-015.00,+00.00,01.00,000.00,1.00 +0294,-015.00,+00.00,01.00,000.00,1.00 +0295,-015.00,+00.00,01.00,000.00,1.00 +0296,-015.00,+00.00,01.00,000.00,1.00 +0297,-015.00,+00.00,01.00,000.00,1.00 +0298,-015.00,+00.00,01.00,000.00,1.00 +0299,-015.00,+00.00,01.00,000.00,1.00 +0300,-015.00,+00.00,01.00,000.00,1.00 +0301,-015.00,+00.00,01.00,000.00,1.00 +0302,-015.00,+00.00,01.00,000.00,1.00 +0303,-015.00,+00.00,01.00,000.00,1.00 +0304,-015.00,+00.00,01.00,000.00,1.00 +0305,-015.00,+00.00,01.00,000.00,1.00 +0306,-015.00,+00.00,01.00,000.00,1.00 +0307,-015.00,+00.00,01.00,000.00,1.00 +0308,-015.00,+00.00,01.00,000.00,1.00 +0309,-015.00,+00.00,01.00,000.00,1.00 +0310,-015.00,+00.00,01.00,000.00,1.00 +0311,-015.00,+00.00,01.00,000.00,1.00 +0312,-015.00,+00.00,01.00,000.00,1.00 +0313,-015.00,+00.00,01.00,000.00,1.00 +0314,-015.00,+00.00,01.00,000.00,1.00 +0315,-015.00,+00.00,01.00,000.00,1.00 +0316,-015.00,+00.00,01.00,000.00,1.00 +0317,-015.00,+00.00,01.00,000.00,1.00 +0318,-015.00,+00.00,01.00,000.00,1.00 +0319,-015.00,+00.00,01.00,000.00,1.00 +0320,-015.00,+00.00,01.00,000.00,1.00 +0321,-015.00,+00.00,01.00,000.00,1.00 +0322,-015.00,+00.00,01.00,000.00,1.00 +0323,-015.00,+00.00,01.00,000.00,1.00 +0324,-015.00,+00.00,01.00,000.00,1.00 +0325,-015.00,+00.00,01.00,000.00,1.00 +0326,-015.00,+00.00,01.00,000.00,1.00 +0327,-015.00,+00.00,01.00,000.00,1.00 +0328,-015.00,+00.00,01.00,000.00,1.00 +0329,-015.00,+00.00,01.00,000.00,1.00 +0330,-015.00,+00.00,01.00,000.00,1.00 +0331,-015.00,+00.00,01.00,000.00,1.00 +0332,-015.00,+00.00,01.00,000.00,1.00 +0333,-015.00,+00.00,01.00,000.00,1.00 +0334,-015.00,+00.00,01.00,000.00,1.00 +0335,-015.00,+00.00,01.00,000.00,1.00 +0336,-015.00,+00.00,01.00,000.00,1.00 +0337,-015.00,+00.00,01.00,000.00,1.00 +0338,-015.00,+00.00,01.00,000.00,1.00 +0339,-015.00,+00.00,01.00,000.00,1.00 +0340,-015.00,+00.00,01.00,000.00,1.00 +0341,-015.00,+00.00,01.00,000.00,1.00 +0342,-015.00,+00.00,01.00,000.00,1.00 +0343,-015.00,+00.00,01.00,000.00,1.00 +0344,-015.00,+00.00,01.00,000.00,1.00 +0345,-015.00,+00.00,01.00,000.00,1.00 +0346,-015.00,+00.00,01.00,000.00,1.00 +0347,-015.00,+00.00,01.00,000.00,1.00 +0348,-015.00,+00.00,01.00,000.00,1.00 +0349,-015.00,+00.00,01.00,000.00,1.00 +0350,-015.00,+00.00,01.00,000.00,1.00 +0351,-015.00,+00.00,01.00,000.00,1.00 +0352,-015.00,+00.00,01.00,000.00,1.00 +0353,-015.00,+00.00,01.00,000.00,1.00 +0354,-015.00,+00.00,01.00,000.00,1.00 +0355,-015.00,+00.00,01.00,000.00,1.00 +0356,-015.00,+00.00,01.00,000.00,1.00 +0357,-015.00,+00.00,01.00,000.00,1.00 +0358,-015.00,+00.00,01.00,000.00,1.00 +0359,-015.00,+00.00,01.00,000.00,1.00 +0360,-015.00,+00.00,01.00,000.00,1.00 +0361,-015.00,+00.00,01.00,000.00,1.00 +0362,-015.00,+00.00,01.00,000.00,1.00 +0363,-015.00,+00.00,01.00,000.00,1.00 +0364,-015.00,+00.00,01.00,000.00,1.00 +0365,-015.00,+00.00,01.00,000.00,1.00 +0366,-015.00,+00.00,01.00,000.00,1.00 +0367,-015.00,+00.00,01.00,000.00,1.00 +0368,-015.00,+00.00,01.00,000.00,1.00 +0369,-015.00,+00.00,01.00,000.00,1.00 +0370,-015.00,+00.00,01.00,000.00,1.00 +0371,-015.00,+00.00,01.00,000.00,1.00 +0372,-015.00,+00.00,01.00,000.00,1.00 +0373,-015.00,+00.00,01.00,000.00,1.00 +0374,-015.00,+00.00,01.00,000.00,1.00 +0375,-015.00,+00.00,01.00,000.00,1.00 +0376,-015.00,+00.00,01.00,000.00,1.00 +0377,-015.00,+00.00,01.00,000.00,1.00 +0378,-015.00,+00.00,01.00,000.00,1.00 +0379,-015.00,+00.00,01.00,000.00,1.00 +0380,-015.00,+00.00,01.00,000.00,1.00 +0381,-015.00,+00.00,01.00,000.00,1.00 +0382,-015.00,+00.00,01.00,000.00,1.00 +0383,-015.00,+00.00,01.00,000.00,1.00 +0384,-015.00,+00.00,01.00,000.00,1.00 +0385,-015.00,+00.00,01.00,000.00,1.00 +0386,-015.00,+00.00,01.00,000.00,1.00 +0387,-015.00,+00.00,01.00,000.00,1.00 +0388,-015.00,+00.00,01.00,000.00,1.00 +0389,-015.00,+00.00,01.00,000.00,1.00 +0390,-015.00,+00.00,01.00,000.00,1.00 +0391,-015.00,+00.00,01.00,000.00,1.00 +0392,-015.00,+00.00,01.00,000.00,1.00 +0393,-015.00,+00.00,01.00,000.00,1.00 +0394,-015.00,+00.00,01.00,000.00,1.00 +0395,-015.00,+00.00,01.00,000.00,1.00 +0396,-015.00,+00.00,01.00,000.00,1.00 +0397,-015.00,+00.00,01.00,000.00,1.00 +0398,-015.00,+00.00,01.00,000.00,1.00 +0399,-015.00,+00.00,01.00,000.00,1.00 +0400,-015.00,+00.00,01.00,000.00,1.00 +0401,-015.00,+00.00,01.00,000.00,1.00 +0402,-015.00,+00.00,01.00,000.00,1.00 +0403,-015.00,+00.00,01.00,000.00,1.00 +0404,-015.00,+00.00,01.00,000.00,1.00 +0405,-015.00,+00.00,01.00,000.00,1.00 +0406,-015.00,+00.00,01.00,000.00,1.00 +0407,-015.00,+00.00,01.00,000.00,1.00 +0408,-015.00,+00.00,01.00,000.00,1.00 +0409,-015.00,+00.00,01.00,000.00,1.00 +0410,-015.00,+00.00,01.00,000.00,1.00 +0411,-015.00,+00.00,01.00,000.00,1.00 +0412,-015.00,+00.00,01.00,000.00,1.00 +0413,-015.00,+00.00,01.00,000.00,1.00 +0414,-015.00,+00.00,01.00,000.00,1.00 +0415,-015.00,+00.00,01.00,000.00,1.00 +0416,-015.00,+00.00,01.00,000.00,1.00 +0417,-015.00,+00.00,01.00,000.00,1.00 +0418,-015.00,+00.00,01.00,000.00,1.00 +0419,-015.00,+00.00,01.00,000.00,1.00 +0420,-015.00,+00.00,01.00,000.00,1.00 +0421,-015.00,+00.00,01.00,000.00,1.00 +0422,-015.00,+00.00,01.00,000.00,1.00 +0423,-015.00,+00.00,01.00,000.00,1.00 +0424,-015.00,+00.00,01.00,000.00,1.00 +0425,-015.00,+00.00,01.00,000.00,1.00 +0426,-015.00,+00.00,01.00,000.00,1.00 +0427,-015.00,+00.00,01.00,000.00,1.00 +0428,-015.00,+00.00,01.00,000.00,1.00 +0429,-015.00,+00.00,01.00,000.00,1.00 +0430,-015.00,+00.00,01.00,000.00,1.00 +0431,-015.00,+00.00,01.00,000.00,1.00 +0432,-015.00,+00.00,01.00,000.00,1.00 +0433,-015.00,+00.00,01.00,000.00,1.00 +0434,-015.00,+00.00,01.00,000.00,1.00 +0435,-015.00,+00.00,01.00,000.00,1.00 +0436,-015.00,+00.00,01.00,000.00,1.00 +0437,-015.00,+00.00,01.00,000.00,1.00 +0438,-015.00,+00.00,01.00,000.00,1.00 +0439,-015.00,+00.00,01.00,000.00,1.00 +0440,-015.00,+00.00,01.00,000.00,1.00 +0441,-015.00,+00.00,01.00,000.00,1.00 +0442,-015.00,+00.00,01.00,000.00,1.00 +0443,-015.00,+00.00,01.00,000.00,1.00 +0444,-015.00,+00.00,01.00,000.00,1.00 +0445,-015.00,+00.00,01.00,000.00,1.00 +0446,-015.00,+00.00,01.00,000.00,1.00 +0447,-015.00,+00.00,01.00,000.00,1.00 +0448,-015.00,+00.00,01.00,000.00,1.00 +0449,-015.00,+00.00,01.00,000.00,1.00 +0450,-015.00,+00.00,01.00,000.00,1.00 +0451,-015.00,+00.00,01.00,000.00,1.00 +0452,-015.00,+00.00,01.00,000.00,1.00 +0453,-015.00,+00.00,01.00,000.00,1.00 +0454,-015.00,+00.00,01.00,000.00,1.00 +0455,-015.00,+00.00,01.00,000.00,1.00 +0456,-015.00,+00.00,01.00,000.00,1.00 +0457,-015.00,+00.00,01.00,000.00,1.00 +0458,-015.00,+00.00,01.00,000.00,1.00 +0459,-015.00,+00.00,01.00,000.00,1.00 +0460,-015.00,+00.00,01.00,000.00,1.00 +0461,-015.00,+00.00,01.00,000.00,1.00 +0462,-015.00,+00.00,01.00,000.00,1.00 +0463,-015.00,+00.00,01.00,000.00,1.00 +0464,-015.00,+00.00,01.00,000.00,1.00 +0465,-015.00,+00.00,01.00,000.00,1.00 +0466,-015.00,+00.00,01.00,000.00,1.00 +0467,-015.00,+00.00,01.00,000.00,1.00 +0468,-015.00,+00.00,01.00,000.00,1.00 +0469,-015.00,+00.00,01.00,000.00,1.00 +0470,-015.00,+00.00,01.00,000.00,1.00 +0471,-015.00,+00.00,01.00,000.00,1.00 +0472,-015.00,+00.00,01.00,000.00,1.00 +0473,-015.00,+00.00,01.00,000.00,1.00 +0474,-015.00,+00.00,01.00,000.00,1.00 +0475,-015.00,+00.00,01.00,000.00,1.00 +0476,-015.00,+00.00,01.00,000.00,1.00 +0477,-015.00,+00.00,01.00,000.00,1.00 +0478,-015.00,+00.00,01.00,000.00,1.00 +0479,-015.00,+00.00,01.00,000.00,1.00 +0480,-015.00,+00.00,01.00,000.00,1.00 +0481,-015.00,+00.00,01.00,000.00,1.00 +0482,-015.00,+00.00,01.00,000.00,1.00 +0483,-015.00,+00.00,01.00,000.00,1.00 +0484,-015.00,+00.00,01.00,000.00,1.00 +0485,-015.00,+00.00,01.00,000.00,1.00 +0486,-015.00,+00.00,01.00,000.00,1.00 +0487,-015.00,+00.00,01.00,000.00,1.00 +0488,-015.00,+00.00,01.00,000.00,1.00 +0489,-015.00,+00.00,01.00,000.00,1.00 +0490,-015.00,+00.00,01.00,000.00,1.00 +0491,-015.00,+00.00,01.00,000.00,1.00 +0492,-015.00,+00.00,01.00,000.00,1.00 +0493,-015.00,+00.00,01.00,000.00,1.00 +0494,-015.00,+00.00,01.00,000.00,1.00 +0495,-015.00,+00.00,01.00,000.00,1.00 +0496,-015.00,+00.00,01.00,000.00,1.00 +0497,-015.00,+00.00,01.00,000.00,1.00 +0498,-015.00,+00.00,01.00,000.00,1.00 +0499,-015.00,+00.00,01.00,000.00,1.00 +0500,-015.00,+00.00,01.00,000.00,1.00 +0501,-015.00,+00.00,01.00,000.00,1.00 +0502,-015.00,+00.00,01.00,000.00,1.00 +0503,-015.00,+00.00,01.00,000.00,1.00 +0504,-015.00,+00.00,01.00,000.00,1.00 +0505,-015.00,+00.00,01.00,000.00,1.00 +0506,-015.00,+00.00,01.00,000.00,1.00 +0507,-015.00,+00.00,01.00,000.00,1.00 +0508,-015.00,+00.00,01.00,000.00,1.00 +0509,-015.00,+00.00,01.00,000.00,1.00 +0510,-015.00,+00.00,01.00,000.00,1.00 +0511,-015.00,+00.00,01.00,000.00,1.00 +0512,-015.00,+00.00,01.00,000.00,1.00 +0513,-015.00,+00.00,01.00,000.00,1.00 +0514,-015.00,+00.00,01.00,000.00,1.00 +0515,-015.00,+00.00,01.00,000.00,1.00 +0516,-015.00,+00.00,01.00,000.00,1.00 +0517,-015.00,+00.00,01.00,000.00,1.00 +0518,-015.00,+00.00,01.00,000.00,1.00 +0519,-015.00,+00.00,01.00,000.00,1.00 +0520,-015.00,+00.00,01.00,000.00,1.00 +0521,-015.00,+00.00,01.00,000.00,1.00 +0522,-015.00,+00.00,01.00,000.00,1.00 +0523,-015.00,+00.00,01.00,000.00,1.00 +0524,-015.00,+00.00,01.00,000.00,1.00 +0525,-015.00,+00.00,01.00,000.00,1.00 +0526,-015.00,+00.00,01.00,000.00,1.00 +0527,-015.00,+00.00,01.00,000.00,1.00 +0528,-015.00,+00.00,01.00,000.00,1.00 +0529,-015.00,+00.00,01.00,000.00,1.00 +0530,-015.00,+00.00,01.00,000.00,1.00 +0531,-015.00,+00.00,01.00,000.00,1.00 +0532,-015.00,+00.00,01.00,000.00,1.00 +0533,-015.00,+00.00,01.00,000.00,1.00 +0534,-015.00,+00.00,01.00,000.00,1.00 +0535,-015.00,+00.00,01.00,000.00,1.00 +0536,-015.00,+00.00,01.00,000.00,1.00 +0537,-015.00,+00.00,01.00,000.00,1.00 +0538,-015.00,+00.00,01.00,000.00,1.00 +0539,-015.00,+00.00,01.00,000.00,1.00 +0540,-015.00,+00.00,01.00,000.00,1.00 +0541,-015.00,+00.00,01.00,000.00,1.00 +0542,-015.00,+00.00,01.00,000.00,1.00 +0543,-015.00,+00.00,01.00,000.00,1.00 +0544,-015.00,+00.00,01.00,000.00,1.00 +0545,-015.00,+00.00,01.00,000.00,1.00 +0546,-015.00,+00.00,01.00,000.00,1.00 +0547,-015.00,+00.00,01.00,000.00,1.00 +0548,-015.00,+00.00,01.00,000.00,1.00 +0549,-015.00,+00.00,01.00,000.00,1.00 +0550,-015.00,+00.00,01.00,000.00,1.00 +0551,-015.00,+00.00,01.00,000.00,1.00 +0552,-015.00,+00.00,01.00,000.00,1.00 +0553,-015.00,+00.00,01.00,000.00,1.00 +0554,-015.00,+00.00,01.00,000.00,1.00 +0555,-015.00,+00.00,01.00,000.00,1.00 +0556,-015.00,+00.00,01.00,000.00,1.00 +0557,-015.00,+00.00,01.00,000.00,1.00 +0558,-015.00,+00.00,01.00,000.00,1.00 +0559,-015.00,+00.00,01.00,000.00,1.00 +0560,-015.00,+00.00,01.00,000.00,1.00 +0561,-015.00,+00.00,01.00,000.00,1.00 +0562,-015.00,+00.00,01.00,000.00,1.00 +0563,-015.00,+00.00,01.00,000.00,1.00 +0564,-015.00,+00.00,01.00,000.00,1.00 +0565,-015.00,+00.00,01.00,000.00,1.00 +0566,-015.00,+00.00,01.00,000.00,1.00 +0567,-015.00,+00.00,01.00,000.00,1.00 +0568,-015.00,+00.00,01.00,000.00,1.00 +0569,-015.00,+00.00,01.00,000.00,1.00 +0570,-015.00,+00.00,01.00,000.00,1.00 +0571,-015.00,+00.00,01.00,000.00,1.00 +0572,-015.00,+00.00,01.00,000.00,1.00 +0573,-015.00,+00.00,01.00,000.00,1.00 +0574,-015.00,+00.00,01.00,000.00,1.00 +0575,-015.00,+00.00,01.00,000.00,1.00 +0576,-015.00,+00.00,01.00,000.00,1.00 +0577,-015.00,+00.00,01.00,000.00,1.00 +0578,-015.00,+00.00,01.00,000.00,1.00 +0579,-015.00,+00.00,01.00,000.00,1.00 +0580,-015.00,+00.00,01.00,000.00,1.00 +0581,-015.00,+00.00,01.00,000.00,1.00 +0582,-015.00,+00.00,01.00,000.00,1.00 +0583,-015.00,+00.00,01.00,000.00,1.00 +0584,-015.00,+00.00,01.00,000.00,1.00 +0585,-015.00,+00.00,01.00,000.00,1.00 +0586,-015.00,+00.00,01.00,000.00,1.00 +0587,-015.00,+00.00,01.00,000.00,1.00 +0588,-015.00,+00.00,01.00,000.00,1.00 +0589,-015.00,+00.00,01.00,000.00,1.00 +0590,-015.00,+00.00,01.00,000.00,1.00 +0591,-015.00,+00.00,01.00,000.00,1.00 +0592,-015.00,+00.00,01.00,000.00,1.00 +0593,-015.00,+00.00,01.00,000.00,1.00 +0594,-015.00,+00.00,01.00,000.00,1.00 +0595,-015.00,+00.00,01.00,000.00,1.00 +0596,-015.00,+00.00,01.00,000.00,1.00 +0597,-015.00,+00.00,01.00,000.00,1.00 +0598,-015.00,+00.00,01.00,000.00,1.00 +0599,-015.00,+00.00,01.00,000.00,1.00 +0600,-015.00,+00.00,01.00,000.00,1.00 +0601,-015.00,+00.00,01.00,000.00,1.00 +0602,-015.00,+00.00,01.00,000.00,1.00 +0603,-015.00,+00.00,01.00,000.00,1.00 +0604,-015.00,+00.00,01.00,000.00,1.00 +0605,-015.00,+00.00,01.00,000.00,1.00 +0606,-015.00,+00.00,01.00,000.00,1.00 +0607,-015.00,+00.00,01.00,000.00,1.00 +0608,-015.00,+00.00,01.00,000.00,1.00 +0609,-015.00,+00.00,01.00,000.00,1.00 +0610,-015.00,+00.00,01.00,000.00,1.00 +0611,-015.00,+00.00,01.00,000.00,1.00 +0612,-015.00,+00.00,01.00,000.00,1.00 +0613,-015.00,+00.00,01.00,000.00,1.00 +0614,-015.00,+00.00,01.00,000.00,1.00 +0615,-015.00,+00.00,01.00,000.00,1.00 +0616,-015.00,+00.00,01.00,000.00,1.00 +0617,-015.00,+00.00,01.00,000.00,1.00 +0618,-015.00,+00.00,01.00,000.00,1.00 +0619,-015.00,+00.00,01.00,000.00,1.00 +0620,-015.00,+00.00,01.00,000.00,1.00 +0621,-015.00,+00.00,01.00,000.00,1.00 +0622,-015.00,+00.00,01.00,000.00,1.00 +0623,-015.00,+00.00,01.00,000.00,1.00 +0624,-015.00,+00.00,01.00,000.00,1.00 +0625,-015.00,+00.00,01.00,000.00,1.00 +0626,-015.00,+00.00,01.00,000.00,1.00 +0627,-015.00,+00.00,01.00,000.00,1.00 +0628,-015.00,+00.00,01.00,000.00,1.00 +0629,-015.00,+00.00,01.00,000.00,1.00 +0630,-015.00,+00.00,01.00,000.00,1.00 +0631,-015.00,+00.00,01.00,000.00,1.00 +0632,-015.00,+00.00,01.00,000.00,1.00 +0633,-015.00,+00.00,01.00,000.00,1.00 +0634,-015.00,+00.00,01.00,000.00,1.00 +0635,-015.00,+00.00,01.00,000.00,1.00 +0636,-015.00,+00.00,01.00,000.00,1.00 +0637,-015.00,+00.00,01.00,000.00,1.00 +0638,-015.00,+00.00,01.00,000.00,1.00 +0639,-015.00,+00.00,01.00,000.00,1.00 +0640,-015.00,+00.00,01.00,000.00,1.00 +0641,-015.00,+00.00,01.00,000.00,1.00 +0642,-015.00,+00.00,01.00,000.00,1.00 +0643,-015.00,+00.00,01.00,000.00,1.00 +0644,-015.00,+00.00,01.00,000.00,1.00 +0645,-015.00,+00.00,01.00,000.00,1.00 +0646,-015.00,+00.00,01.00,000.00,1.00 +0647,-015.00,+00.00,01.00,000.00,1.00 +0648,-015.00,+00.00,01.00,000.00,1.00 +0649,-015.00,+00.00,01.00,000.00,1.00 +0650,-015.00,+00.00,01.00,000.00,1.00 +0651,-015.00,+00.00,01.00,000.00,1.00 +0652,-015.00,+00.00,01.00,000.00,1.00 +0653,-015.00,+00.00,01.00,000.00,1.00 +0654,-015.00,+00.00,01.00,000.00,1.00 +0655,-015.00,+00.00,01.00,000.00,1.00 +0656,-015.00,+00.00,01.00,000.00,1.00 +0657,-015.00,+00.00,01.00,000.00,1.00 +0658,-015.00,+00.00,01.00,000.00,1.00 +0659,-015.00,+00.00,01.00,000.00,1.00 +0660,-015.00,+00.00,01.00,000.00,1.00 +0661,-015.00,+00.00,01.00,000.00,1.00 +0662,-015.00,+00.00,01.00,000.00,1.00 +0663,-015.00,+00.00,01.00,000.00,1.00 +0664,-015.00,+00.00,01.00,000.00,1.00 +0665,-015.00,+00.00,01.00,000.00,1.00 +0666,-015.00,+00.00,01.00,000.00,1.00 +0667,-015.00,+00.00,01.00,000.00,1.00 +0668,-015.00,+00.00,01.00,000.00,1.00 +0669,-015.00,+00.00,01.00,000.00,1.00 +0670,-015.00,+00.00,01.00,000.00,1.00 +0671,-015.00,+00.00,01.00,000.00,1.00 +0672,-015.00,+00.00,01.00,000.00,1.00 +0673,-015.00,+00.00,01.00,000.00,1.00 +0674,-015.00,+00.00,01.00,000.00,1.00 +0675,-015.00,+00.00,01.00,000.00,1.00 +0676,-015.00,+00.00,01.00,000.00,1.00 +0677,-015.00,+00.00,01.00,000.00,1.00 +0678,-015.00,+00.00,01.00,000.00,1.00 +0679,-015.00,+00.00,01.00,000.00,1.00 +0680,-015.00,+00.00,01.00,000.00,1.00 +0681,-015.00,+00.00,01.00,000.00,1.00 +0682,-015.00,+00.00,01.00,000.00,1.00 +0683,-015.00,+00.00,01.00,000.00,1.00 +0684,-015.00,+00.00,01.00,000.00,1.00 +0685,-015.00,+00.00,01.00,000.00,1.00 +0686,-015.00,+00.00,01.00,000.00,1.00 +0687,-015.00,+00.00,01.00,000.00,1.00 +0688,-015.00,+00.00,01.00,000.00,1.00 +0689,-015.00,+00.00,01.00,000.00,1.00 +0690,-015.00,+00.00,01.00,000.00,1.00 +0691,-015.00,+00.00,01.00,000.00,1.00 +0692,-015.00,+00.00,01.00,000.00,1.00 +0693,-015.00,+00.00,01.00,000.00,1.00 +0694,-015.00,+00.00,01.00,000.00,1.00 +0695,-015.00,+00.00,01.00,000.00,1.00 +0696,-015.00,+00.00,01.00,000.00,1.00 +0697,-015.00,+00.00,01.00,000.00,1.00 +0698,-015.00,+00.00,01.00,000.00,1.00 +0699,-015.00,+00.00,01.00,000.00,1.00 +0700,-015.00,+00.00,01.00,000.00,1.00 +0701,-015.00,+00.00,01.00,000.00,1.00 +0702,-015.00,+00.00,01.00,000.00,1.00 +0703,-015.00,+00.00,01.00,000.00,1.00 +0704,-015.00,+00.00,01.00,000.00,1.00 +0705,-015.00,+00.00,01.00,000.00,1.00 +0706,-015.00,+00.00,01.00,000.00,1.00 +0707,-015.00,+00.00,01.00,000.00,1.00 +0708,-015.00,+00.00,01.00,000.00,1.00 +0709,-015.00,+00.00,01.00,000.00,1.00 +0710,-015.00,+00.00,01.00,000.00,1.00 +0711,-015.00,+00.00,01.00,000.00,1.00 +0712,-015.00,+00.00,01.00,000.00,1.00 +0713,-015.00,+00.00,01.00,000.00,1.00 +0714,-015.00,+00.00,01.00,000.00,1.00 +0715,-015.00,+00.00,01.00,000.00,1.00 +0716,-015.00,+00.00,01.00,000.00,1.00 +0717,-015.00,+00.00,01.00,000.00,1.00 +0718,-015.00,+00.00,01.00,000.00,1.00 +0719,-015.00,+00.00,01.00,000.00,1.00 +0720,-015.00,+00.00,01.00,000.00,1.00 +0721,-015.00,+00.00,01.00,000.00,1.00 +0722,-015.00,+00.00,01.00,000.00,1.00 +0723,-015.00,+00.00,01.00,000.00,1.00 +0724,-015.00,+00.00,01.00,000.00,1.00 +0725,-015.00,+00.00,01.00,000.00,1.00 +0726,-015.00,+00.00,01.00,000.00,1.00 +0727,-015.00,+00.00,01.00,000.00,1.00 +0728,-015.00,+00.00,01.00,000.00,1.00 +0729,-015.00,+00.00,01.00,000.00,1.00 +0730,-015.00,+00.00,01.00,000.00,1.00 +0731,-015.00,+00.00,01.00,000.00,1.00 +0732,-015.00,+00.00,01.00,000.00,1.00 +0733,-015.00,+00.00,01.00,000.00,1.00 +0734,-015.00,+00.00,01.00,000.00,1.00 +0735,-015.00,+00.00,01.00,000.00,1.00 +0736,-015.00,+00.00,01.00,000.00,1.00 +0737,-015.00,+00.00,01.00,000.00,1.00 +0738,-015.00,+00.00,01.00,000.00,1.00 +0739,-015.00,+00.00,01.00,000.00,1.00 +0740,-015.00,+00.00,01.00,000.00,1.00 +0741,-015.00,+00.00,01.00,000.00,1.00 +0742,-015.00,+00.00,01.00,000.00,1.00 +0743,-015.00,+00.00,01.00,000.00,1.00 +0744,-015.00,+00.00,01.00,000.00,1.00 +0745,-015.00,+00.00,01.00,000.00,1.00 +0746,-015.00,+00.00,01.00,000.00,1.00 +0747,-015.00,+00.00,01.00,000.00,1.00 +0748,-015.00,+00.00,01.00,000.00,1.00 +0749,-015.00,+00.00,01.00,000.00,1.00 +0750,-015.00,+00.00,01.00,000.00,1.00 +0751,-015.00,+00.00,01.00,000.00,1.00 +0752,-015.00,+00.00,01.00,000.00,1.00 +0753,-015.00,+00.00,01.00,000.00,1.00 +0754,-015.00,+00.00,01.00,000.00,1.00 +0755,-015.00,+00.00,01.00,000.00,1.00 +0756,-015.00,+00.00,01.00,000.00,1.00 +0757,-015.00,+00.00,01.00,000.00,1.00 +0758,-015.00,+00.00,01.00,000.00,1.00 +0759,-015.00,+00.00,01.00,000.00,1.00 +0760,-015.00,+00.00,01.00,000.00,1.00 +0761,-015.00,+00.00,01.00,000.00,1.00 +0762,-015.00,+00.00,01.00,000.00,1.00 +0763,-015.00,+00.00,01.00,000.00,1.00 +0764,-015.00,+00.00,01.00,000.00,1.00 +0765,-015.00,+00.00,01.00,000.00,1.00 +0766,-015.00,+00.00,01.00,000.00,1.00 +0767,-015.00,+00.00,01.00,000.00,1.00 +0768,-015.00,+00.00,01.00,000.00,1.00 +0769,-015.00,+00.00,01.00,000.00,1.00 +0770,-015.00,+00.00,01.00,000.00,1.00 +0771,-015.00,+00.00,01.00,000.00,1.00 +0772,-015.00,+00.00,01.00,000.00,1.00 +0773,-015.00,+00.00,01.00,000.00,1.00 +0774,-015.00,+00.00,01.00,000.00,1.00 +0775,-015.00,+00.00,01.00,000.00,1.00 +0776,-015.00,+00.00,01.00,000.00,1.00 +0777,-015.00,+00.00,01.00,000.00,1.00 +0778,-015.00,+00.00,01.00,000.00,1.00 +0779,-015.00,+00.00,01.00,000.00,1.00 +0780,-015.00,+00.00,01.00,000.00,1.00 +0781,-015.00,+00.00,01.00,000.00,1.00 +0782,-015.00,+00.00,01.00,000.00,1.00 +0783,-015.00,+00.00,01.00,000.00,1.00 +0784,-015.00,+00.00,01.00,000.00,1.00 +0785,-015.00,+00.00,01.00,000.00,1.00 +0786,-015.00,+00.00,01.00,000.00,1.00 +0787,-015.00,+00.00,01.00,000.00,1.00 +0788,-015.00,+00.00,01.00,000.00,1.00 +0789,-015.00,+00.00,01.00,000.00,1.00 +0790,-015.00,+00.00,01.00,000.00,1.00 +0791,-015.00,+00.00,01.00,000.00,1.00 +0792,-015.00,+00.00,01.00,000.00,1.00 +0793,-015.00,+00.00,01.00,000.00,1.00 +0794,-015.00,+00.00,01.00,000.00,1.00 +0795,-015.00,+00.00,01.00,000.00,1.00 +0796,-015.00,+00.00,01.00,000.00,1.00 +0797,-015.00,+00.00,01.00,000.00,1.00 +0798,-015.00,+00.00,01.00,000.00,1.00 +0799,-015.00,+00.00,01.00,000.00,1.00 +0800,-015.00,+00.00,01.00,000.00,1.00 +0801,-015.00,+00.00,01.00,000.00,1.00 +0802,-015.00,+00.00,01.00,000.00,1.00 +0803,-015.00,+00.00,01.00,000.00,1.00 +0804,-015.00,+00.00,01.00,000.00,1.00 +0805,-015.00,+00.00,01.00,000.00,1.00 +0806,-015.00,+00.00,01.00,000.00,1.00 +0807,-015.00,+00.00,01.00,000.00,1.00 +0808,-015.00,+00.00,01.00,000.00,1.00 +0809,-015.00,+00.00,01.00,000.00,1.00 +0810,-015.00,+00.00,01.00,000.00,1.00 +0811,-015.00,+00.00,01.00,000.00,1.00 +0812,-015.00,+00.00,01.00,000.00,1.00 +0813,-015.00,+00.00,01.00,000.00,1.00 +0814,-015.00,+00.00,01.00,000.00,1.00 +0815,-015.00,+00.00,01.00,000.00,1.00 +0816,-015.00,+00.00,01.00,000.00,1.00 +0817,-015.00,+00.00,01.00,000.00,1.00 +0818,-015.00,+00.00,01.00,000.00,1.00 +0819,-015.00,+00.00,01.00,000.00,1.00 +0820,-015.00,+00.00,01.00,000.00,1.00 +0821,-015.00,+00.00,01.00,000.00,1.00 +0822,-015.00,+00.00,01.00,000.00,1.00 +0823,-015.00,+00.00,01.00,000.00,1.00 +0824,-015.00,+00.00,01.00,000.00,1.00 +0825,-015.00,+00.00,01.00,000.00,1.00 +0826,-015.00,+00.00,01.00,000.00,1.00 +0827,-015.00,+00.00,01.00,000.00,1.00 +0828,-015.00,+00.00,01.00,000.00,1.00 +0829,-015.00,+00.00,01.00,000.00,1.00 +0830,-015.00,+00.00,01.00,000.00,1.00 +0831,-015.00,+00.00,01.00,000.00,1.00 +0832,-015.00,+00.00,01.00,000.00,1.00 +0833,-015.00,+00.00,01.00,000.00,1.00 +0834,-015.00,+00.00,01.00,000.00,1.00 +0835,-015.00,+00.00,01.00,000.00,1.00 +0836,-015.00,+00.00,01.00,000.00,1.00 +0837,-015.00,+00.00,01.00,000.00,1.00 +0838,-015.00,+00.00,01.00,000.00,1.00 +0839,-015.00,+00.00,01.00,000.00,1.00 +0840,-015.00,+00.00,01.00,000.00,1.00 +0841,-015.00,+00.00,01.00,000.00,1.00 +0842,-015.00,+00.00,01.00,000.00,1.00 +0843,-015.00,+00.00,01.00,000.00,1.00 +0844,-015.00,+00.00,01.00,000.00,1.00 +0845,-015.00,+00.00,01.00,000.00,1.00 +0846,-015.00,+00.00,01.00,000.00,1.00 +0847,-015.00,+00.00,01.00,000.00,1.00 +0848,-015.00,+00.00,01.00,000.00,1.00 +0849,-015.00,+00.00,01.00,000.00,1.00 +0850,-015.00,+00.00,01.00,000.00,1.00 +0851,-015.00,+00.00,01.00,000.00,1.00 +0852,-015.00,+00.00,01.00,000.00,1.00 +0853,-015.00,+00.00,01.00,000.00,1.00 +0854,-015.00,+00.00,01.00,000.00,1.00 +0855,-015.00,+00.00,01.00,000.00,1.00 +0856,-015.00,+00.00,01.00,000.00,1.00 +0857,-015.00,+00.00,01.00,000.00,1.00 +0858,-015.00,+00.00,01.00,000.00,1.00 +0859,-015.00,+00.00,01.00,000.00,1.00 +0860,-015.00,+00.00,01.00,000.00,1.00 +0861,-015.00,+00.00,01.00,000.00,1.00 +0862,-015.00,+00.00,01.00,000.00,1.00 +0863,-015.00,+00.00,01.00,000.00,1.00 +0864,-015.00,+00.00,01.00,000.00,1.00 +0865,-015.00,+00.00,01.00,000.00,1.00 +0866,-015.00,+00.00,01.00,000.00,1.00 +0867,-015.00,+00.00,01.00,000.00,1.00 +0868,-015.00,+00.00,01.00,000.00,1.00 +0869,-015.00,+00.00,01.00,000.00,1.00 +0870,-015.00,+00.00,01.00,000.00,1.00 +0871,-015.00,+00.00,01.00,000.00,1.00 +0872,-015.00,+00.00,01.00,000.00,1.00 +0873,-015.00,+00.00,01.00,000.00,1.00 +0874,-015.00,+00.00,01.00,000.00,1.00 +0875,-015.00,+00.00,01.00,000.00,1.00 +0876,-015.00,+00.00,01.00,000.00,1.00 +0877,-015.00,+00.00,01.00,000.00,1.00 +0878,-015.00,+00.00,01.00,000.00,1.00 +0879,-015.00,+00.00,01.00,000.00,1.00 +0880,-015.00,+00.00,01.00,000.00,1.00 +0881,-015.00,+00.00,01.00,000.00,1.00 +0882,-015.00,+00.00,01.00,000.00,1.00 +0883,-015.00,+00.00,01.00,000.00,1.00 +0884,-015.00,+00.00,01.00,000.00,1.00 +0885,-015.00,+00.00,01.00,000.00,1.00 +0886,-015.00,+00.00,01.00,000.00,1.00 +0887,-015.00,+00.00,01.00,000.00,1.00 +0888,-015.00,+00.00,01.00,000.00,1.00 +0889,-015.00,+00.00,01.00,000.00,1.00 +0890,-015.00,+00.00,01.00,000.00,1.00 +0891,-015.00,+00.00,01.00,000.00,1.00 +0892,-015.00,+00.00,01.00,000.00,1.00 +0893,-015.00,+00.00,01.00,000.00,1.00 +0894,-015.00,+00.00,01.00,000.00,1.00 +0895,-015.00,+00.00,01.00,000.00,1.00 +0896,-015.00,+00.00,01.00,000.00,1.00 +0897,-015.00,+00.00,01.00,000.00,1.00 +0898,-015.00,+00.00,01.00,000.00,1.00 +0899,-015.00,+00.00,01.00,000.00,1.00 +0900,-015.00,+00.00,01.00,000.00,1.00 +0901,-015.00,+00.00,01.00,000.00,1.00 +0902,-015.00,+00.00,01.00,000.00,1.00 +0903,-015.00,+00.00,01.00,000.00,1.00 +0904,-015.00,+00.00,01.00,000.00,1.00 +0905,-015.00,+00.00,01.00,000.00,1.00 +0906,-015.00,+00.00,01.00,000.00,1.00 +0907,-015.00,+00.00,01.00,000.00,1.00 +0908,-015.00,+00.00,01.00,000.00,1.00 +0909,-015.00,+00.00,01.00,000.00,1.00 +0910,-015.00,+00.00,01.00,000.00,1.00 +0911,-015.00,+00.00,01.00,000.00,1.00 +0912,-015.00,+00.00,01.00,000.00,1.00 +0913,-015.00,+00.00,01.00,000.00,1.00 +0914,-015.00,+00.00,01.00,000.00,1.00 +0915,-015.00,+00.00,01.00,000.00,1.00 +0916,-015.00,+00.00,01.00,000.00,1.00 +0917,-015.00,+00.00,01.00,000.00,1.00 +0918,-015.00,+00.00,01.00,000.00,1.00 +0919,-015.00,+00.00,01.00,000.00,1.00 +0920,-015.00,+00.00,01.00,000.00,1.00 +0921,-015.00,+00.00,01.00,000.00,1.00 +0922,-015.00,+00.00,01.00,000.00,1.00 +0923,-015.00,+00.00,01.00,000.00,1.00 +0924,-015.00,+00.00,01.00,000.00,1.00 +0925,-015.00,+00.00,01.00,000.00,1.00 +0926,-015.00,+00.00,01.00,000.00,1.00 +0927,-015.00,+00.00,01.00,000.00,1.00 +0928,-015.00,+00.00,01.00,000.00,1.00 +0929,-015.00,+00.00,01.00,000.00,1.00 +0930,-015.00,+00.00,01.00,000.00,1.00 +0931,-015.00,+00.00,01.00,000.00,1.00 +0932,-015.00,+00.00,01.00,000.00,1.00 +0933,-015.00,+00.00,01.00,000.00,1.00 +0934,-015.00,+00.00,01.00,000.00,1.00 +0935,-015.00,+00.00,01.00,000.00,1.00 +0936,-015.00,+00.00,01.00,000.00,1.00 +0937,-015.00,+00.00,01.00,000.00,1.00 +0938,-015.00,+00.00,01.00,000.00,1.00 +0939,-015.00,+00.00,01.00,000.00,1.00 +0940,-015.00,+00.00,01.00,000.00,1.00 +0941,-015.00,+00.00,01.00,000.00,1.00 +0942,-015.00,+00.00,01.00,000.00,1.00 +0943,-015.00,+00.00,01.00,000.00,1.00 +0944,-015.00,+00.00,01.00,000.00,1.00 +0945,-015.00,+00.00,01.00,000.00,1.00 +0946,-015.00,+00.00,01.00,000.00,1.00 +0947,-015.00,+00.00,01.00,000.00,1.00 +0948,-015.00,+00.00,01.00,000.00,1.00 +0949,-015.00,+00.00,01.00,000.00,1.00 +0950,-015.00,+00.00,01.00,000.00,1.00 +0951,-015.00,+00.00,01.00,000.00,1.00 +0952,-015.00,+00.00,01.00,000.00,1.00 +0953,-015.00,+00.00,01.00,000.00,1.00 +0954,-015.00,+00.00,01.00,000.00,1.00 +0955,-015.00,+00.00,01.00,000.00,1.00 +0956,-015.00,+00.00,01.00,000.00,1.00 +0957,-015.00,+00.00,01.00,000.00,1.00 +0958,-015.00,+00.00,01.00,000.00,1.00 +0959,-015.00,+00.00,01.00,000.00,1.00 +0960,-015.00,+00.00,01.00,000.00,1.00 +0961,-015.00,+00.00,01.00,000.00,1.00 +0962,-015.00,+00.00,01.00,000.00,1.00 +0963,-015.00,+00.00,01.00,000.00,1.00 +0964,-015.00,+00.00,01.00,000.00,1.00 +0965,-015.00,+00.00,01.00,000.00,1.00 +0966,-015.00,+00.00,01.00,000.00,1.00 +0967,-015.00,+00.00,01.00,000.00,1.00 +0968,-015.00,+00.00,01.00,000.00,1.00 +0969,-015.00,+00.00,01.00,000.00,1.00 +0970,-015.00,+00.00,01.00,000.00,1.00 +0971,-015.00,+00.00,01.00,000.00,1.00 +0972,-015.00,+00.00,01.00,000.00,1.00 +0973,-015.00,+00.00,01.00,000.00,1.00 +0974,-015.00,+00.00,01.00,000.00,1.00 +0975,-015.00,+00.00,01.00,000.00,1.00 +0976,-015.00,+00.00,01.00,000.00,1.00 +0977,-015.00,+00.00,01.00,000.00,1.00 +0978,-015.00,+00.00,01.00,000.00,1.00 +0979,-015.00,+00.00,01.00,000.00,1.00 +0980,-015.00,+00.00,01.00,000.00,1.00 +0981,-015.00,+00.00,01.00,000.00,1.00 +0982,-015.00,+00.00,01.00,000.00,1.00 +0983,-015.00,+00.00,01.00,000.00,1.00 +0984,-015.00,+00.00,01.00,000.00,1.00 +0985,-015.00,+00.00,01.00,000.00,1.00 +0986,-015.00,+00.00,01.00,000.00,1.00 +0987,-015.00,+00.00,01.00,000.00,1.00 +0988,-015.00,+00.00,01.00,000.00,1.00 +0989,-015.00,+00.00,01.00,000.00,1.00 +0990,-015.00,+00.00,01.00,000.00,1.00 +0991,-015.00,+00.00,01.00,000.00,1.00 +0992,-015.00,+00.00,01.00,000.00,1.00 +0993,-015.00,+00.00,01.00,000.00,1.00 +0994,-015.00,+00.00,01.00,000.00,1.00 +0995,-015.00,+00.00,01.00,000.00,1.00 +0996,-015.00,+00.00,01.00,000.00,1.00 +0997,-015.00,+00.00,01.00,000.00,1.00 +0998,-015.00,+00.00,01.00,000.00,1.00 +0999,-015.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t02_ch1.csv b/scripts/td_object_renderer/metadata/csv/t02_ch1.csv new file mode 100644 index 0000000000..9d7f23dbd0 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t02_ch1.csv @@ -0,0 +1,1000 @@ +0000,+030.00,+00.00,01.00,000.00,1.00 +0001,+030.00,+00.00,01.00,000.00,1.00 +0002,+030.00,+00.00,01.00,000.00,1.00 +0003,+030.00,+00.00,01.00,000.00,1.00 +0004,+030.00,+00.00,01.00,000.00,1.00 +0005,+030.00,+00.00,01.00,000.00,1.00 +0006,+030.00,+00.00,01.00,000.00,1.00 +0007,+030.00,+00.00,01.00,000.00,1.00 +0008,+030.00,+00.00,01.00,000.00,1.00 +0009,+030.00,+00.00,01.00,000.00,1.00 +0010,+030.00,+00.00,01.00,000.00,1.00 +0011,+030.00,+00.00,01.00,000.00,1.00 +0012,+030.00,+00.00,01.00,000.00,1.00 +0013,+030.00,+00.00,01.00,000.00,1.00 +0014,+030.00,+00.00,01.00,000.00,1.00 +0015,+030.00,+00.00,01.00,000.00,1.00 +0016,+030.00,+00.00,01.00,000.00,1.00 +0017,+030.00,+00.00,01.00,000.00,1.00 +0018,+030.00,+00.00,01.00,000.00,1.00 +0019,+030.00,+00.00,01.00,000.00,1.00 +0020,+030.00,+00.00,01.00,000.00,1.00 +0021,+030.00,+00.00,01.00,000.00,1.00 +0022,+030.00,+00.00,01.00,000.00,1.00 +0023,+030.00,+00.00,01.00,000.00,1.00 +0024,+030.00,+00.00,01.00,000.00,1.00 +0025,+030.00,+00.00,01.00,000.00,1.00 +0026,+030.00,+00.00,01.00,000.00,1.00 +0027,+030.00,+00.00,01.00,000.00,1.00 +0028,+030.00,+00.00,01.00,000.00,1.00 +0029,+030.00,+00.00,01.00,000.00,1.00 +0030,+030.00,+00.00,01.00,000.00,1.00 +0031,+030.00,+00.00,01.00,000.00,1.00 +0032,+030.00,+00.00,01.00,000.00,1.00 +0033,+030.00,+00.00,01.00,000.00,1.00 +0034,+030.00,+00.00,01.00,000.00,1.00 +0035,+030.00,+00.00,01.00,000.00,1.00 +0036,+030.00,+00.00,01.00,000.00,1.00 +0037,+030.00,+00.00,01.00,000.00,1.00 +0038,+030.00,+00.00,01.00,000.00,1.00 +0039,+030.00,+00.00,01.00,000.00,1.00 +0040,+030.00,+00.00,01.00,000.00,1.00 +0041,+030.00,+00.00,01.00,000.00,1.00 +0042,+030.00,+00.00,01.00,000.00,1.00 +0043,+030.00,+00.00,01.00,000.00,1.00 +0044,+030.00,+00.00,01.00,000.00,1.00 +0045,+030.00,+00.00,01.00,000.00,1.00 +0046,+030.00,+00.00,01.00,000.00,1.00 +0047,+030.00,+00.00,01.00,000.00,1.00 +0048,+030.00,+00.00,01.00,000.00,1.00 +0049,+030.00,+00.00,01.00,000.00,1.00 +0050,+030.00,+00.00,01.00,000.00,1.00 +0051,+030.00,+00.00,01.00,000.00,1.00 +0052,+030.00,+00.00,01.00,000.00,1.00 +0053,+030.00,+00.00,01.00,000.00,1.00 +0054,+030.00,+00.00,01.00,000.00,1.00 +0055,+030.00,+00.00,01.00,000.00,1.00 +0056,+030.00,+00.00,01.00,000.00,1.00 +0057,+030.00,+00.00,01.00,000.00,1.00 +0058,+030.00,+00.00,01.00,000.00,1.00 +0059,+030.00,+00.00,01.00,000.00,1.00 +0060,+030.00,+00.00,01.00,000.00,1.00 +0061,+030.00,+00.00,01.00,000.00,1.00 +0062,+030.00,+00.00,01.00,000.00,1.00 +0063,+030.00,+00.00,01.00,000.00,1.00 +0064,+030.00,+00.00,01.00,000.00,1.00 +0065,+030.00,+00.00,01.00,000.00,1.00 +0066,+030.00,+00.00,01.00,000.00,1.00 +0067,+030.00,+00.00,01.00,000.00,1.00 +0068,+030.00,+00.00,01.00,000.00,1.00 +0069,+030.00,+00.00,01.00,000.00,1.00 +0070,+030.00,+00.00,01.00,000.00,1.00 +0071,+030.00,+00.00,01.00,000.00,1.00 +0072,+030.00,+00.00,01.00,000.00,1.00 +0073,+030.00,+00.00,01.00,000.00,1.00 +0074,+030.00,+00.00,01.00,000.00,1.00 +0075,+030.00,+00.00,01.00,000.00,1.00 +0076,+030.00,+00.00,01.00,000.00,1.00 +0077,+030.00,+00.00,01.00,000.00,1.00 +0078,+030.00,+00.00,01.00,000.00,1.00 +0079,+030.00,+00.00,01.00,000.00,1.00 +0080,+030.00,+00.00,01.00,000.00,1.00 +0081,+030.00,+00.00,01.00,000.00,1.00 +0082,+030.00,+00.00,01.00,000.00,1.00 +0083,+030.00,+00.00,01.00,000.00,1.00 +0084,+030.00,+00.00,01.00,000.00,1.00 +0085,+030.00,+00.00,01.00,000.00,1.00 +0086,+030.00,+00.00,01.00,000.00,1.00 +0087,+030.00,+00.00,01.00,000.00,1.00 +0088,+030.00,+00.00,01.00,000.00,1.00 +0089,+030.00,+00.00,01.00,000.00,1.00 +0090,+030.00,+00.00,01.00,000.00,1.00 +0091,+030.00,+00.00,01.00,000.00,1.00 +0092,+030.00,+00.00,01.00,000.00,1.00 +0093,+030.00,+00.00,01.00,000.00,1.00 +0094,+030.00,+00.00,01.00,000.00,1.00 +0095,+030.00,+00.00,01.00,000.00,1.00 +0096,+030.00,+00.00,01.00,000.00,1.00 +0097,+030.00,+00.00,01.00,000.00,1.00 +0098,+030.00,+00.00,01.00,000.00,1.00 +0099,+030.00,+00.00,01.00,000.00,1.00 +0100,+030.00,+00.00,01.00,000.00,1.00 +0101,+030.00,+00.00,01.00,000.00,1.00 +0102,+030.00,+00.00,01.00,000.00,1.00 +0103,+030.00,+00.00,01.00,000.00,1.00 +0104,+030.00,+00.00,01.00,000.00,1.00 +0105,+030.00,+00.00,01.00,000.00,1.00 +0106,+030.00,+00.00,01.00,000.00,1.00 +0107,+030.00,+00.00,01.00,000.00,1.00 +0108,+030.00,+00.00,01.00,000.00,1.00 +0109,+030.00,+00.00,01.00,000.00,1.00 +0110,+030.00,+00.00,01.00,000.00,1.00 +0111,+030.00,+00.00,01.00,000.00,1.00 +0112,+030.00,+00.00,01.00,000.00,1.00 +0113,+030.00,+00.00,01.00,000.00,1.00 +0114,+030.00,+00.00,01.00,000.00,1.00 +0115,+030.00,+00.00,01.00,000.00,1.00 +0116,+030.00,+00.00,01.00,000.00,1.00 +0117,+030.00,+00.00,01.00,000.00,1.00 +0118,+030.00,+00.00,01.00,000.00,1.00 +0119,+030.00,+00.00,01.00,000.00,1.00 +0120,+030.00,+00.00,01.00,000.00,1.00 +0121,+030.00,+00.00,01.00,000.00,1.00 +0122,+030.00,+00.00,01.00,000.00,1.00 +0123,+030.00,+00.00,01.00,000.00,1.00 +0124,+030.00,+00.00,01.00,000.00,1.00 +0125,+030.00,+00.00,01.00,000.00,1.00 +0126,+030.00,+00.00,01.00,000.00,1.00 +0127,+030.00,+00.00,01.00,000.00,1.00 +0128,+030.00,+00.00,01.00,000.00,1.00 +0129,+030.00,+00.00,01.00,000.00,1.00 +0130,+030.00,+00.00,01.00,000.00,1.00 +0131,+030.00,+00.00,01.00,000.00,1.00 +0132,+030.00,+00.00,01.00,000.00,1.00 +0133,+030.00,+00.00,01.00,000.00,1.00 +0134,+030.00,+00.00,01.00,000.00,1.00 +0135,+030.00,+00.00,01.00,000.00,1.00 +0136,+030.00,+00.00,01.00,000.00,1.00 +0137,+030.00,+00.00,01.00,000.00,1.00 +0138,+030.00,+00.00,01.00,000.00,1.00 +0139,+030.00,+00.00,01.00,000.00,1.00 +0140,+030.00,+00.00,01.00,000.00,1.00 +0141,+030.00,+00.00,01.00,000.00,1.00 +0142,+030.00,+00.00,01.00,000.00,1.00 +0143,+030.00,+00.00,01.00,000.00,1.00 +0144,+030.00,+00.00,01.00,000.00,1.00 +0145,+030.00,+00.00,01.00,000.00,1.00 +0146,+030.00,+00.00,01.00,000.00,1.00 +0147,+030.00,+00.00,01.00,000.00,1.00 +0148,+030.00,+00.00,01.00,000.00,1.00 +0149,+030.00,+00.00,01.00,000.00,1.00 +0150,+030.00,+00.00,01.00,000.00,1.00 +0151,+030.00,+00.00,01.00,000.00,1.00 +0152,+030.00,+00.00,01.00,000.00,1.00 +0153,+030.00,+00.00,01.00,000.00,1.00 +0154,+030.00,+00.00,01.00,000.00,1.00 +0155,+030.00,+00.00,01.00,000.00,1.00 +0156,+030.00,+00.00,01.00,000.00,1.00 +0157,+030.00,+00.00,01.00,000.00,1.00 +0158,+030.00,+00.00,01.00,000.00,1.00 +0159,+030.00,+00.00,01.00,000.00,1.00 +0160,+030.00,+00.00,01.00,000.00,1.00 +0161,+030.00,+00.00,01.00,000.00,1.00 +0162,+030.00,+00.00,01.00,000.00,1.00 +0163,+030.00,+00.00,01.00,000.00,1.00 +0164,+030.00,+00.00,01.00,000.00,1.00 +0165,+030.00,+00.00,01.00,000.00,1.00 +0166,+030.00,+00.00,01.00,000.00,1.00 +0167,+030.00,+00.00,01.00,000.00,1.00 +0168,+030.00,+00.00,01.00,000.00,1.00 +0169,+030.00,+00.00,01.00,000.00,1.00 +0170,+030.00,+00.00,01.00,000.00,1.00 +0171,+030.00,+00.00,01.00,000.00,1.00 +0172,+030.00,+00.00,01.00,000.00,1.00 +0173,+030.00,+00.00,01.00,000.00,1.00 +0174,+030.00,+00.00,01.00,000.00,1.00 +0175,+030.00,+00.00,01.00,000.00,1.00 +0176,+030.00,+00.00,01.00,000.00,1.00 +0177,+030.00,+00.00,01.00,000.00,1.00 +0178,+030.00,+00.00,01.00,000.00,1.00 +0179,+030.00,+00.00,01.00,000.00,1.00 +0180,+030.00,+00.00,01.00,000.00,1.00 +0181,+030.00,+00.00,01.00,000.00,1.00 +0182,+030.00,+00.00,01.00,000.00,1.00 +0183,+030.00,+00.00,01.00,000.00,1.00 +0184,+030.00,+00.00,01.00,000.00,1.00 +0185,+030.00,+00.00,01.00,000.00,1.00 +0186,+030.00,+00.00,01.00,000.00,1.00 +0187,+030.00,+00.00,01.00,000.00,1.00 +0188,+030.00,+00.00,01.00,000.00,1.00 +0189,+030.00,+00.00,01.00,000.00,1.00 +0190,+030.00,+00.00,01.00,000.00,1.00 +0191,+030.00,+00.00,01.00,000.00,1.00 +0192,+030.00,+00.00,01.00,000.00,1.00 +0193,+030.00,+00.00,01.00,000.00,1.00 +0194,+030.00,+00.00,01.00,000.00,1.00 +0195,+030.00,+00.00,01.00,000.00,1.00 +0196,+030.00,+00.00,01.00,000.00,1.00 +0197,+030.00,+00.00,01.00,000.00,1.00 +0198,+030.00,+00.00,01.00,000.00,1.00 +0199,+030.00,+00.00,01.00,000.00,1.00 +0200,+030.00,+00.00,01.00,000.00,1.00 +0201,+030.00,+00.00,01.00,000.00,1.00 +0202,+030.00,+00.00,01.00,000.00,1.00 +0203,+030.00,+00.00,01.00,000.00,1.00 +0204,+030.00,+00.00,01.00,000.00,1.00 +0205,+030.00,+00.00,01.00,000.00,1.00 +0206,+030.00,+00.00,01.00,000.00,1.00 +0207,+030.00,+00.00,01.00,000.00,1.00 +0208,+030.00,+00.00,01.00,000.00,1.00 +0209,+030.00,+00.00,01.00,000.00,1.00 +0210,+030.00,+00.00,01.00,000.00,1.00 +0211,+030.00,+00.00,01.00,000.00,1.00 +0212,+030.00,+00.00,01.00,000.00,1.00 +0213,+030.00,+00.00,01.00,000.00,1.00 +0214,+030.00,+00.00,01.00,000.00,1.00 +0215,+030.00,+00.00,01.00,000.00,1.00 +0216,+030.00,+00.00,01.00,000.00,1.00 +0217,+030.00,+00.00,01.00,000.00,1.00 +0218,+030.00,+00.00,01.00,000.00,1.00 +0219,+030.00,+00.00,01.00,000.00,1.00 +0220,+030.00,+00.00,01.00,000.00,1.00 +0221,+030.00,+00.00,01.00,000.00,1.00 +0222,+030.00,+00.00,01.00,000.00,1.00 +0223,+030.00,+00.00,01.00,000.00,1.00 +0224,+030.00,+00.00,01.00,000.00,1.00 +0225,+030.00,+00.00,01.00,000.00,1.00 +0226,+030.00,+00.00,01.00,000.00,1.00 +0227,+030.00,+00.00,01.00,000.00,1.00 +0228,+030.00,+00.00,01.00,000.00,1.00 +0229,+030.00,+00.00,01.00,000.00,1.00 +0230,+030.00,+00.00,01.00,000.00,1.00 +0231,+030.00,+00.00,01.00,000.00,1.00 +0232,+030.00,+00.00,01.00,000.00,1.00 +0233,+030.00,+00.00,01.00,000.00,1.00 +0234,+030.00,+00.00,01.00,000.00,1.00 +0235,+030.00,+00.00,01.00,000.00,1.00 +0236,+030.00,+00.00,01.00,000.00,1.00 +0237,+030.00,+00.00,01.00,000.00,1.00 +0238,+030.00,+00.00,01.00,000.00,1.00 +0239,+030.00,+00.00,01.00,000.00,1.00 +0240,+030.00,+00.00,01.00,000.00,1.00 +0241,+030.00,+00.00,01.00,000.00,1.00 +0242,+030.00,+00.00,01.00,000.00,1.00 +0243,+030.00,+00.00,01.00,000.00,1.00 +0244,+030.00,+00.00,01.00,000.00,1.00 +0245,+030.00,+00.00,01.00,000.00,1.00 +0246,+030.00,+00.00,01.00,000.00,1.00 +0247,+030.00,+00.00,01.00,000.00,1.00 +0248,+030.00,+00.00,01.00,000.00,1.00 +0249,+030.00,+00.00,01.00,000.00,1.00 +0250,+030.00,+00.00,01.00,000.00,1.00 +0251,+030.00,+00.00,01.00,000.00,1.00 +0252,+030.00,+00.00,01.00,000.00,1.00 +0253,+030.00,+00.00,01.00,000.00,1.00 +0254,+030.00,+00.00,01.00,000.00,1.00 +0255,+030.00,+00.00,01.00,000.00,1.00 +0256,+030.00,+00.00,01.00,000.00,1.00 +0257,+030.00,+00.00,01.00,000.00,1.00 +0258,+030.00,+00.00,01.00,000.00,1.00 +0259,+030.00,+00.00,01.00,000.00,1.00 +0260,+030.00,+00.00,01.00,000.00,1.00 +0261,+030.00,+00.00,01.00,000.00,1.00 +0262,+030.00,+00.00,01.00,000.00,1.00 +0263,+030.00,+00.00,01.00,000.00,1.00 +0264,+030.00,+00.00,01.00,000.00,1.00 +0265,+030.00,+00.00,01.00,000.00,1.00 +0266,+030.00,+00.00,01.00,000.00,1.00 +0267,+030.00,+00.00,01.00,000.00,1.00 +0268,+030.00,+00.00,01.00,000.00,1.00 +0269,+030.00,+00.00,01.00,000.00,1.00 +0270,+030.00,+00.00,01.00,000.00,1.00 +0271,+030.00,+00.00,01.00,000.00,1.00 +0272,+030.00,+00.00,01.00,000.00,1.00 +0273,+030.00,+00.00,01.00,000.00,1.00 +0274,+030.00,+00.00,01.00,000.00,1.00 +0275,+030.00,+00.00,01.00,000.00,1.00 +0276,+030.00,+00.00,01.00,000.00,1.00 +0277,+030.00,+00.00,01.00,000.00,1.00 +0278,+030.00,+00.00,01.00,000.00,1.00 +0279,+030.00,+00.00,01.00,000.00,1.00 +0280,+030.00,+00.00,01.00,000.00,1.00 +0281,+030.00,+00.00,01.00,000.00,1.00 +0282,+030.00,+00.00,01.00,000.00,1.00 +0283,+030.00,+00.00,01.00,000.00,1.00 +0284,+030.00,+00.00,01.00,000.00,1.00 +0285,+030.00,+00.00,01.00,000.00,1.00 +0286,+030.00,+00.00,01.00,000.00,1.00 +0287,+030.00,+00.00,01.00,000.00,1.00 +0288,+030.00,+00.00,01.00,000.00,1.00 +0289,+030.00,+00.00,01.00,000.00,1.00 +0290,+030.00,+00.00,01.00,000.00,1.00 +0291,+030.00,+00.00,01.00,000.00,1.00 +0292,+030.00,+00.00,01.00,000.00,1.00 +0293,+030.00,+00.00,01.00,000.00,1.00 +0294,+030.00,+00.00,01.00,000.00,1.00 +0295,+030.00,+00.00,01.00,000.00,1.00 +0296,+030.00,+00.00,01.00,000.00,1.00 +0297,+030.00,+00.00,01.00,000.00,1.00 +0298,+030.00,+00.00,01.00,000.00,1.00 +0299,+030.00,+00.00,01.00,000.00,1.00 +0300,+030.00,+00.00,01.00,000.00,1.00 +0301,+030.00,+00.00,01.00,000.00,1.00 +0302,+030.00,+00.00,01.00,000.00,1.00 +0303,+030.00,+00.00,01.00,000.00,1.00 +0304,+030.00,+00.00,01.00,000.00,1.00 +0305,+030.00,+00.00,01.00,000.00,1.00 +0306,+030.00,+00.00,01.00,000.00,1.00 +0307,+030.00,+00.00,01.00,000.00,1.00 +0308,+030.00,+00.00,01.00,000.00,1.00 +0309,+030.00,+00.00,01.00,000.00,1.00 +0310,+030.00,+00.00,01.00,000.00,1.00 +0311,+030.00,+00.00,01.00,000.00,1.00 +0312,+030.00,+00.00,01.00,000.00,1.00 +0313,+030.00,+00.00,01.00,000.00,1.00 +0314,+030.00,+00.00,01.00,000.00,1.00 +0315,+030.00,+00.00,01.00,000.00,1.00 +0316,+030.00,+00.00,01.00,000.00,1.00 +0317,+030.00,+00.00,01.00,000.00,1.00 +0318,+030.00,+00.00,01.00,000.00,1.00 +0319,+030.00,+00.00,01.00,000.00,1.00 +0320,+030.00,+00.00,01.00,000.00,1.00 +0321,+030.00,+00.00,01.00,000.00,1.00 +0322,+030.00,+00.00,01.00,000.00,1.00 +0323,+030.00,+00.00,01.00,000.00,1.00 +0324,+030.00,+00.00,01.00,000.00,1.00 +0325,+030.00,+00.00,01.00,000.00,1.00 +0326,+030.00,+00.00,01.00,000.00,1.00 +0327,+030.00,+00.00,01.00,000.00,1.00 +0328,+030.00,+00.00,01.00,000.00,1.00 +0329,+030.00,+00.00,01.00,000.00,1.00 +0330,+030.00,+00.00,01.00,000.00,1.00 +0331,+030.00,+00.00,01.00,000.00,1.00 +0332,+030.00,+00.00,01.00,000.00,1.00 +0333,+030.00,+00.00,01.00,000.00,1.00 +0334,+030.00,+00.00,01.00,000.00,1.00 +0335,+030.00,+00.00,01.00,000.00,1.00 +0336,+030.00,+00.00,01.00,000.00,1.00 +0337,+030.00,+00.00,01.00,000.00,1.00 +0338,+030.00,+00.00,01.00,000.00,1.00 +0339,+030.00,+00.00,01.00,000.00,1.00 +0340,+030.00,+00.00,01.00,000.00,1.00 +0341,+030.00,+00.00,01.00,000.00,1.00 +0342,+030.00,+00.00,01.00,000.00,1.00 +0343,+030.00,+00.00,01.00,000.00,1.00 +0344,+030.00,+00.00,01.00,000.00,1.00 +0345,+030.00,+00.00,01.00,000.00,1.00 +0346,+030.00,+00.00,01.00,000.00,1.00 +0347,+030.00,+00.00,01.00,000.00,1.00 +0348,+030.00,+00.00,01.00,000.00,1.00 +0349,+030.00,+00.00,01.00,000.00,1.00 +0350,+030.00,+00.00,01.00,000.00,1.00 +0351,+030.00,+00.00,01.00,000.00,1.00 +0352,+030.00,+00.00,01.00,000.00,1.00 +0353,+030.00,+00.00,01.00,000.00,1.00 +0354,+030.00,+00.00,01.00,000.00,1.00 +0355,+030.00,+00.00,01.00,000.00,1.00 +0356,+030.00,+00.00,01.00,000.00,1.00 +0357,+030.00,+00.00,01.00,000.00,1.00 +0358,+030.00,+00.00,01.00,000.00,1.00 +0359,+030.00,+00.00,01.00,000.00,1.00 +0360,+030.00,+00.00,01.00,000.00,1.00 +0361,+030.00,+00.00,01.00,000.00,1.00 +0362,+030.00,+00.00,01.00,000.00,1.00 +0363,+030.00,+00.00,01.00,000.00,1.00 +0364,+030.00,+00.00,01.00,000.00,1.00 +0365,+030.00,+00.00,01.00,000.00,1.00 +0366,+030.00,+00.00,01.00,000.00,1.00 +0367,+030.00,+00.00,01.00,000.00,1.00 +0368,+030.00,+00.00,01.00,000.00,1.00 +0369,+030.00,+00.00,01.00,000.00,1.00 +0370,+030.00,+00.00,01.00,000.00,1.00 +0371,+030.00,+00.00,01.00,000.00,1.00 +0372,+030.00,+00.00,01.00,000.00,1.00 +0373,+030.00,+00.00,01.00,000.00,1.00 +0374,+030.00,+00.00,01.00,000.00,1.00 +0375,+030.00,+00.00,01.00,000.00,1.00 +0376,+030.00,+00.00,01.00,000.00,1.00 +0377,+030.00,+00.00,01.00,000.00,1.00 +0378,+030.00,+00.00,01.00,000.00,1.00 +0379,+030.00,+00.00,01.00,000.00,1.00 +0380,+030.00,+00.00,01.00,000.00,1.00 +0381,+030.00,+00.00,01.00,000.00,1.00 +0382,+030.00,+00.00,01.00,000.00,1.00 +0383,+030.00,+00.00,01.00,000.00,1.00 +0384,+030.00,+00.00,01.00,000.00,1.00 +0385,+030.00,+00.00,01.00,000.00,1.00 +0386,+030.00,+00.00,01.00,000.00,1.00 +0387,+030.00,+00.00,01.00,000.00,1.00 +0388,+030.00,+00.00,01.00,000.00,1.00 +0389,+030.00,+00.00,01.00,000.00,1.00 +0390,+030.00,+00.00,01.00,000.00,1.00 +0391,+030.00,+00.00,01.00,000.00,1.00 +0392,+030.00,+00.00,01.00,000.00,1.00 +0393,+030.00,+00.00,01.00,000.00,1.00 +0394,+030.00,+00.00,01.00,000.00,1.00 +0395,+030.00,+00.00,01.00,000.00,1.00 +0396,+030.00,+00.00,01.00,000.00,1.00 +0397,+030.00,+00.00,01.00,000.00,1.00 +0398,+030.00,+00.00,01.00,000.00,1.00 +0399,+030.00,+00.00,01.00,000.00,1.00 +0400,+030.00,+00.00,01.00,000.00,1.00 +0401,+030.00,+00.00,01.00,000.00,1.00 +0402,+030.00,+00.00,01.00,000.00,1.00 +0403,+030.00,+00.00,01.00,000.00,1.00 +0404,+030.00,+00.00,01.00,000.00,1.00 +0405,+030.00,+00.00,01.00,000.00,1.00 +0406,+030.00,+00.00,01.00,000.00,1.00 +0407,+030.00,+00.00,01.00,000.00,1.00 +0408,+030.00,+00.00,01.00,000.00,1.00 +0409,+030.00,+00.00,01.00,000.00,1.00 +0410,+030.00,+00.00,01.00,000.00,1.00 +0411,+030.00,+00.00,01.00,000.00,1.00 +0412,+030.00,+00.00,01.00,000.00,1.00 +0413,+030.00,+00.00,01.00,000.00,1.00 +0414,+030.00,+00.00,01.00,000.00,1.00 +0415,+030.00,+00.00,01.00,000.00,1.00 +0416,+030.00,+00.00,01.00,000.00,1.00 +0417,+030.00,+00.00,01.00,000.00,1.00 +0418,+030.00,+00.00,01.00,000.00,1.00 +0419,+030.00,+00.00,01.00,000.00,1.00 +0420,+030.00,+00.00,01.00,000.00,1.00 +0421,+030.00,+00.00,01.00,000.00,1.00 +0422,+030.00,+00.00,01.00,000.00,1.00 +0423,+030.00,+00.00,01.00,000.00,1.00 +0424,+030.00,+00.00,01.00,000.00,1.00 +0425,+030.00,+00.00,01.00,000.00,1.00 +0426,+030.00,+00.00,01.00,000.00,1.00 +0427,+030.00,+00.00,01.00,000.00,1.00 +0428,+030.00,+00.00,01.00,000.00,1.00 +0429,+030.00,+00.00,01.00,000.00,1.00 +0430,+030.00,+00.00,01.00,000.00,1.00 +0431,+030.00,+00.00,01.00,000.00,1.00 +0432,+030.00,+00.00,01.00,000.00,1.00 +0433,+030.00,+00.00,01.00,000.00,1.00 +0434,+030.00,+00.00,01.00,000.00,1.00 +0435,+030.00,+00.00,01.00,000.00,1.00 +0436,+030.00,+00.00,01.00,000.00,1.00 +0437,+030.00,+00.00,01.00,000.00,1.00 +0438,+030.00,+00.00,01.00,000.00,1.00 +0439,+030.00,+00.00,01.00,000.00,1.00 +0440,+030.00,+00.00,01.00,000.00,1.00 +0441,+030.00,+00.00,01.00,000.00,1.00 +0442,+030.00,+00.00,01.00,000.00,1.00 +0443,+030.00,+00.00,01.00,000.00,1.00 +0444,+030.00,+00.00,01.00,000.00,1.00 +0445,+030.00,+00.00,01.00,000.00,1.00 +0446,+030.00,+00.00,01.00,000.00,1.00 +0447,+030.00,+00.00,01.00,000.00,1.00 +0448,+030.00,+00.00,01.00,000.00,1.00 +0449,+030.00,+00.00,01.00,000.00,1.00 +0450,+030.00,+00.00,01.00,000.00,1.00 +0451,+030.00,+00.00,01.00,000.00,1.00 +0452,+030.00,+00.00,01.00,000.00,1.00 +0453,+030.00,+00.00,01.00,000.00,1.00 +0454,+030.00,+00.00,01.00,000.00,1.00 +0455,+030.00,+00.00,01.00,000.00,1.00 +0456,+030.00,+00.00,01.00,000.00,1.00 +0457,+030.00,+00.00,01.00,000.00,1.00 +0458,+030.00,+00.00,01.00,000.00,1.00 +0459,+030.00,+00.00,01.00,000.00,1.00 +0460,+030.00,+00.00,01.00,000.00,1.00 +0461,+030.00,+00.00,01.00,000.00,1.00 +0462,+030.00,+00.00,01.00,000.00,1.00 +0463,+030.00,+00.00,01.00,000.00,1.00 +0464,+030.00,+00.00,01.00,000.00,1.00 +0465,+030.00,+00.00,01.00,000.00,1.00 +0466,+030.00,+00.00,01.00,000.00,1.00 +0467,+030.00,+00.00,01.00,000.00,1.00 +0468,+030.00,+00.00,01.00,000.00,1.00 +0469,+030.00,+00.00,01.00,000.00,1.00 +0470,+030.00,+00.00,01.00,000.00,1.00 +0471,+030.00,+00.00,01.00,000.00,1.00 +0472,+030.00,+00.00,01.00,000.00,1.00 +0473,+030.00,+00.00,01.00,000.00,1.00 +0474,+030.00,+00.00,01.00,000.00,1.00 +0475,+030.00,+00.00,01.00,000.00,1.00 +0476,+030.00,+00.00,01.00,000.00,1.00 +0477,+030.00,+00.00,01.00,000.00,1.00 +0478,+030.00,+00.00,01.00,000.00,1.00 +0479,+030.00,+00.00,01.00,000.00,1.00 +0480,+030.00,+00.00,01.00,000.00,1.00 +0481,+030.00,+00.00,01.00,000.00,1.00 +0482,+030.00,+00.00,01.00,000.00,1.00 +0483,+030.00,+00.00,01.00,000.00,1.00 +0484,+030.00,+00.00,01.00,000.00,1.00 +0485,+030.00,+00.00,01.00,000.00,1.00 +0486,+030.00,+00.00,01.00,000.00,1.00 +0487,+030.00,+00.00,01.00,000.00,1.00 +0488,+030.00,+00.00,01.00,000.00,1.00 +0489,+030.00,+00.00,01.00,000.00,1.00 +0490,+030.00,+00.00,01.00,000.00,1.00 +0491,+030.00,+00.00,01.00,000.00,1.00 +0492,+030.00,+00.00,01.00,000.00,1.00 +0493,+030.00,+00.00,01.00,000.00,1.00 +0494,+030.00,+00.00,01.00,000.00,1.00 +0495,+030.00,+00.00,01.00,000.00,1.00 +0496,+030.00,+00.00,01.00,000.00,1.00 +0497,+030.00,+00.00,01.00,000.00,1.00 +0498,+030.00,+00.00,01.00,000.00,1.00 +0499,+030.00,+00.00,01.00,000.00,1.00 +0500,+030.00,+00.00,01.00,000.00,1.00 +0501,+030.00,+00.00,01.00,000.00,1.00 +0502,+030.00,+00.00,01.00,000.00,1.00 +0503,+030.00,+00.00,01.00,000.00,1.00 +0504,+030.00,+00.00,01.00,000.00,1.00 +0505,+030.00,+00.00,01.00,000.00,1.00 +0506,+030.00,+00.00,01.00,000.00,1.00 +0507,+030.00,+00.00,01.00,000.00,1.00 +0508,+030.00,+00.00,01.00,000.00,1.00 +0509,+030.00,+00.00,01.00,000.00,1.00 +0510,+030.00,+00.00,01.00,000.00,1.00 +0511,+030.00,+00.00,01.00,000.00,1.00 +0512,+030.00,+00.00,01.00,000.00,1.00 +0513,+030.00,+00.00,01.00,000.00,1.00 +0514,+030.00,+00.00,01.00,000.00,1.00 +0515,+030.00,+00.00,01.00,000.00,1.00 +0516,+030.00,+00.00,01.00,000.00,1.00 +0517,+030.00,+00.00,01.00,000.00,1.00 +0518,+030.00,+00.00,01.00,000.00,1.00 +0519,+030.00,+00.00,01.00,000.00,1.00 +0520,+030.00,+00.00,01.00,000.00,1.00 +0521,+030.00,+00.00,01.00,000.00,1.00 +0522,+030.00,+00.00,01.00,000.00,1.00 +0523,+030.00,+00.00,01.00,000.00,1.00 +0524,+030.00,+00.00,01.00,000.00,1.00 +0525,+030.00,+00.00,01.00,000.00,1.00 +0526,+030.00,+00.00,01.00,000.00,1.00 +0527,+030.00,+00.00,01.00,000.00,1.00 +0528,+030.00,+00.00,01.00,000.00,1.00 +0529,+030.00,+00.00,01.00,000.00,1.00 +0530,+030.00,+00.00,01.00,000.00,1.00 +0531,+030.00,+00.00,01.00,000.00,1.00 +0532,+030.00,+00.00,01.00,000.00,1.00 +0533,+030.00,+00.00,01.00,000.00,1.00 +0534,+030.00,+00.00,01.00,000.00,1.00 +0535,+030.00,+00.00,01.00,000.00,1.00 +0536,+030.00,+00.00,01.00,000.00,1.00 +0537,+030.00,+00.00,01.00,000.00,1.00 +0538,+030.00,+00.00,01.00,000.00,1.00 +0539,+030.00,+00.00,01.00,000.00,1.00 +0540,+030.00,+00.00,01.00,000.00,1.00 +0541,+030.00,+00.00,01.00,000.00,1.00 +0542,+030.00,+00.00,01.00,000.00,1.00 +0543,+030.00,+00.00,01.00,000.00,1.00 +0544,+030.00,+00.00,01.00,000.00,1.00 +0545,+030.00,+00.00,01.00,000.00,1.00 +0546,+030.00,+00.00,01.00,000.00,1.00 +0547,+030.00,+00.00,01.00,000.00,1.00 +0548,+030.00,+00.00,01.00,000.00,1.00 +0549,+030.00,+00.00,01.00,000.00,1.00 +0550,+030.00,+00.00,01.00,000.00,1.00 +0551,+030.00,+00.00,01.00,000.00,1.00 +0552,+030.00,+00.00,01.00,000.00,1.00 +0553,+030.00,+00.00,01.00,000.00,1.00 +0554,+030.00,+00.00,01.00,000.00,1.00 +0555,+030.00,+00.00,01.00,000.00,1.00 +0556,+030.00,+00.00,01.00,000.00,1.00 +0557,+030.00,+00.00,01.00,000.00,1.00 +0558,+030.00,+00.00,01.00,000.00,1.00 +0559,+030.00,+00.00,01.00,000.00,1.00 +0560,+030.00,+00.00,01.00,000.00,1.00 +0561,+030.00,+00.00,01.00,000.00,1.00 +0562,+030.00,+00.00,01.00,000.00,1.00 +0563,+030.00,+00.00,01.00,000.00,1.00 +0564,+030.00,+00.00,01.00,000.00,1.00 +0565,+030.00,+00.00,01.00,000.00,1.00 +0566,+030.00,+00.00,01.00,000.00,1.00 +0567,+030.00,+00.00,01.00,000.00,1.00 +0568,+030.00,+00.00,01.00,000.00,1.00 +0569,+030.00,+00.00,01.00,000.00,1.00 +0570,+030.00,+00.00,01.00,000.00,1.00 +0571,+030.00,+00.00,01.00,000.00,1.00 +0572,+030.00,+00.00,01.00,000.00,1.00 +0573,+030.00,+00.00,01.00,000.00,1.00 +0574,+030.00,+00.00,01.00,000.00,1.00 +0575,+030.00,+00.00,01.00,000.00,1.00 +0576,+030.00,+00.00,01.00,000.00,1.00 +0577,+030.00,+00.00,01.00,000.00,1.00 +0578,+030.00,+00.00,01.00,000.00,1.00 +0579,+030.00,+00.00,01.00,000.00,1.00 +0580,+030.00,+00.00,01.00,000.00,1.00 +0581,+030.00,+00.00,01.00,000.00,1.00 +0582,+030.00,+00.00,01.00,000.00,1.00 +0583,+030.00,+00.00,01.00,000.00,1.00 +0584,+030.00,+00.00,01.00,000.00,1.00 +0585,+030.00,+00.00,01.00,000.00,1.00 +0586,+030.00,+00.00,01.00,000.00,1.00 +0587,+030.00,+00.00,01.00,000.00,1.00 +0588,+030.00,+00.00,01.00,000.00,1.00 +0589,+030.00,+00.00,01.00,000.00,1.00 +0590,+030.00,+00.00,01.00,000.00,1.00 +0591,+030.00,+00.00,01.00,000.00,1.00 +0592,+030.00,+00.00,01.00,000.00,1.00 +0593,+030.00,+00.00,01.00,000.00,1.00 +0594,+030.00,+00.00,01.00,000.00,1.00 +0595,+030.00,+00.00,01.00,000.00,1.00 +0596,+030.00,+00.00,01.00,000.00,1.00 +0597,+030.00,+00.00,01.00,000.00,1.00 +0598,+030.00,+00.00,01.00,000.00,1.00 +0599,+030.00,+00.00,01.00,000.00,1.00 +0600,+030.00,+00.00,01.00,000.00,1.00 +0601,+030.00,+00.00,01.00,000.00,1.00 +0602,+030.00,+00.00,01.00,000.00,1.00 +0603,+030.00,+00.00,01.00,000.00,1.00 +0604,+030.00,+00.00,01.00,000.00,1.00 +0605,+030.00,+00.00,01.00,000.00,1.00 +0606,+030.00,+00.00,01.00,000.00,1.00 +0607,+030.00,+00.00,01.00,000.00,1.00 +0608,+030.00,+00.00,01.00,000.00,1.00 +0609,+030.00,+00.00,01.00,000.00,1.00 +0610,+030.00,+00.00,01.00,000.00,1.00 +0611,+030.00,+00.00,01.00,000.00,1.00 +0612,+030.00,+00.00,01.00,000.00,1.00 +0613,+030.00,+00.00,01.00,000.00,1.00 +0614,+030.00,+00.00,01.00,000.00,1.00 +0615,+030.00,+00.00,01.00,000.00,1.00 +0616,+030.00,+00.00,01.00,000.00,1.00 +0617,+030.00,+00.00,01.00,000.00,1.00 +0618,+030.00,+00.00,01.00,000.00,1.00 +0619,+030.00,+00.00,01.00,000.00,1.00 +0620,+030.00,+00.00,01.00,000.00,1.00 +0621,+030.00,+00.00,01.00,000.00,1.00 +0622,+030.00,+00.00,01.00,000.00,1.00 +0623,+030.00,+00.00,01.00,000.00,1.00 +0624,+030.00,+00.00,01.00,000.00,1.00 +0625,+030.00,+00.00,01.00,000.00,1.00 +0626,+030.00,+00.00,01.00,000.00,1.00 +0627,+030.00,+00.00,01.00,000.00,1.00 +0628,+030.00,+00.00,01.00,000.00,1.00 +0629,+030.00,+00.00,01.00,000.00,1.00 +0630,+030.00,+00.00,01.00,000.00,1.00 +0631,+030.00,+00.00,01.00,000.00,1.00 +0632,+030.00,+00.00,01.00,000.00,1.00 +0633,+030.00,+00.00,01.00,000.00,1.00 +0634,+030.00,+00.00,01.00,000.00,1.00 +0635,+030.00,+00.00,01.00,000.00,1.00 +0636,+030.00,+00.00,01.00,000.00,1.00 +0637,+030.00,+00.00,01.00,000.00,1.00 +0638,+030.00,+00.00,01.00,000.00,1.00 +0639,+030.00,+00.00,01.00,000.00,1.00 +0640,+030.00,+00.00,01.00,000.00,1.00 +0641,+030.00,+00.00,01.00,000.00,1.00 +0642,+030.00,+00.00,01.00,000.00,1.00 +0643,+030.00,+00.00,01.00,000.00,1.00 +0644,+030.00,+00.00,01.00,000.00,1.00 +0645,+030.00,+00.00,01.00,000.00,1.00 +0646,+030.00,+00.00,01.00,000.00,1.00 +0647,+030.00,+00.00,01.00,000.00,1.00 +0648,+030.00,+00.00,01.00,000.00,1.00 +0649,+030.00,+00.00,01.00,000.00,1.00 +0650,+030.00,+00.00,01.00,000.00,1.00 +0651,+030.00,+00.00,01.00,000.00,1.00 +0652,+030.00,+00.00,01.00,000.00,1.00 +0653,+030.00,+00.00,01.00,000.00,1.00 +0654,+030.00,+00.00,01.00,000.00,1.00 +0655,+030.00,+00.00,01.00,000.00,1.00 +0656,+030.00,+00.00,01.00,000.00,1.00 +0657,+030.00,+00.00,01.00,000.00,1.00 +0658,+030.00,+00.00,01.00,000.00,1.00 +0659,+030.00,+00.00,01.00,000.00,1.00 +0660,+030.00,+00.00,01.00,000.00,1.00 +0661,+030.00,+00.00,01.00,000.00,1.00 +0662,+030.00,+00.00,01.00,000.00,1.00 +0663,+030.00,+00.00,01.00,000.00,1.00 +0664,+030.00,+00.00,01.00,000.00,1.00 +0665,+030.00,+00.00,01.00,000.00,1.00 +0666,+030.00,+00.00,01.00,000.00,1.00 +0667,+030.00,+00.00,01.00,000.00,1.00 +0668,+030.00,+00.00,01.00,000.00,1.00 +0669,+030.00,+00.00,01.00,000.00,1.00 +0670,+030.00,+00.00,01.00,000.00,1.00 +0671,+030.00,+00.00,01.00,000.00,1.00 +0672,+030.00,+00.00,01.00,000.00,1.00 +0673,+030.00,+00.00,01.00,000.00,1.00 +0674,+030.00,+00.00,01.00,000.00,1.00 +0675,+030.00,+00.00,01.00,000.00,1.00 +0676,+030.00,+00.00,01.00,000.00,1.00 +0677,+030.00,+00.00,01.00,000.00,1.00 +0678,+030.00,+00.00,01.00,000.00,1.00 +0679,+030.00,+00.00,01.00,000.00,1.00 +0680,+030.00,+00.00,01.00,000.00,1.00 +0681,+030.00,+00.00,01.00,000.00,1.00 +0682,+030.00,+00.00,01.00,000.00,1.00 +0683,+030.00,+00.00,01.00,000.00,1.00 +0684,+030.00,+00.00,01.00,000.00,1.00 +0685,+030.00,+00.00,01.00,000.00,1.00 +0686,+030.00,+00.00,01.00,000.00,1.00 +0687,+030.00,+00.00,01.00,000.00,1.00 +0688,+030.00,+00.00,01.00,000.00,1.00 +0689,+030.00,+00.00,01.00,000.00,1.00 +0690,+030.00,+00.00,01.00,000.00,1.00 +0691,+030.00,+00.00,01.00,000.00,1.00 +0692,+030.00,+00.00,01.00,000.00,1.00 +0693,+030.00,+00.00,01.00,000.00,1.00 +0694,+030.00,+00.00,01.00,000.00,1.00 +0695,+030.00,+00.00,01.00,000.00,1.00 +0696,+030.00,+00.00,01.00,000.00,1.00 +0697,+030.00,+00.00,01.00,000.00,1.00 +0698,+030.00,+00.00,01.00,000.00,1.00 +0699,+030.00,+00.00,01.00,000.00,1.00 +0700,+030.00,+00.00,01.00,000.00,1.00 +0701,+030.00,+00.00,01.00,000.00,1.00 +0702,+030.00,+00.00,01.00,000.00,1.00 +0703,+030.00,+00.00,01.00,000.00,1.00 +0704,+030.00,+00.00,01.00,000.00,1.00 +0705,+030.00,+00.00,01.00,000.00,1.00 +0706,+030.00,+00.00,01.00,000.00,1.00 +0707,+030.00,+00.00,01.00,000.00,1.00 +0708,+030.00,+00.00,01.00,000.00,1.00 +0709,+030.00,+00.00,01.00,000.00,1.00 +0710,+030.00,+00.00,01.00,000.00,1.00 +0711,+030.00,+00.00,01.00,000.00,1.00 +0712,+030.00,+00.00,01.00,000.00,1.00 +0713,+030.00,+00.00,01.00,000.00,1.00 +0714,+030.00,+00.00,01.00,000.00,1.00 +0715,+030.00,+00.00,01.00,000.00,1.00 +0716,+030.00,+00.00,01.00,000.00,1.00 +0717,+030.00,+00.00,01.00,000.00,1.00 +0718,+030.00,+00.00,01.00,000.00,1.00 +0719,+030.00,+00.00,01.00,000.00,1.00 +0720,+030.00,+00.00,01.00,000.00,1.00 +0721,+030.00,+00.00,01.00,000.00,1.00 +0722,+030.00,+00.00,01.00,000.00,1.00 +0723,+030.00,+00.00,01.00,000.00,1.00 +0724,+030.00,+00.00,01.00,000.00,1.00 +0725,+030.00,+00.00,01.00,000.00,1.00 +0726,+030.00,+00.00,01.00,000.00,1.00 +0727,+030.00,+00.00,01.00,000.00,1.00 +0728,+030.00,+00.00,01.00,000.00,1.00 +0729,+030.00,+00.00,01.00,000.00,1.00 +0730,+030.00,+00.00,01.00,000.00,1.00 +0731,+030.00,+00.00,01.00,000.00,1.00 +0732,+030.00,+00.00,01.00,000.00,1.00 +0733,+030.00,+00.00,01.00,000.00,1.00 +0734,+030.00,+00.00,01.00,000.00,1.00 +0735,+030.00,+00.00,01.00,000.00,1.00 +0736,+030.00,+00.00,01.00,000.00,1.00 +0737,+030.00,+00.00,01.00,000.00,1.00 +0738,+030.00,+00.00,01.00,000.00,1.00 +0739,+030.00,+00.00,01.00,000.00,1.00 +0740,+030.00,+00.00,01.00,000.00,1.00 +0741,+030.00,+00.00,01.00,000.00,1.00 +0742,+030.00,+00.00,01.00,000.00,1.00 +0743,+030.00,+00.00,01.00,000.00,1.00 +0744,+030.00,+00.00,01.00,000.00,1.00 +0745,+030.00,+00.00,01.00,000.00,1.00 +0746,+030.00,+00.00,01.00,000.00,1.00 +0747,+030.00,+00.00,01.00,000.00,1.00 +0748,+030.00,+00.00,01.00,000.00,1.00 +0749,+030.00,+00.00,01.00,000.00,1.00 +0750,+030.00,+00.00,01.00,000.00,1.00 +0751,+030.00,+00.00,01.00,000.00,1.00 +0752,+030.00,+00.00,01.00,000.00,1.00 +0753,+030.00,+00.00,01.00,000.00,1.00 +0754,+030.00,+00.00,01.00,000.00,1.00 +0755,+030.00,+00.00,01.00,000.00,1.00 +0756,+030.00,+00.00,01.00,000.00,1.00 +0757,+030.00,+00.00,01.00,000.00,1.00 +0758,+030.00,+00.00,01.00,000.00,1.00 +0759,+030.00,+00.00,01.00,000.00,1.00 +0760,+030.00,+00.00,01.00,000.00,1.00 +0761,+030.00,+00.00,01.00,000.00,1.00 +0762,+030.00,+00.00,01.00,000.00,1.00 +0763,+030.00,+00.00,01.00,000.00,1.00 +0764,+030.00,+00.00,01.00,000.00,1.00 +0765,+030.00,+00.00,01.00,000.00,1.00 +0766,+030.00,+00.00,01.00,000.00,1.00 +0767,+030.00,+00.00,01.00,000.00,1.00 +0768,+030.00,+00.00,01.00,000.00,1.00 +0769,+030.00,+00.00,01.00,000.00,1.00 +0770,+030.00,+00.00,01.00,000.00,1.00 +0771,+030.00,+00.00,01.00,000.00,1.00 +0772,+030.00,+00.00,01.00,000.00,1.00 +0773,+030.00,+00.00,01.00,000.00,1.00 +0774,+030.00,+00.00,01.00,000.00,1.00 +0775,+030.00,+00.00,01.00,000.00,1.00 +0776,+030.00,+00.00,01.00,000.00,1.00 +0777,+030.00,+00.00,01.00,000.00,1.00 +0778,+030.00,+00.00,01.00,000.00,1.00 +0779,+030.00,+00.00,01.00,000.00,1.00 +0780,+030.00,+00.00,01.00,000.00,1.00 +0781,+030.00,+00.00,01.00,000.00,1.00 +0782,+030.00,+00.00,01.00,000.00,1.00 +0783,+030.00,+00.00,01.00,000.00,1.00 +0784,+030.00,+00.00,01.00,000.00,1.00 +0785,+030.00,+00.00,01.00,000.00,1.00 +0786,+030.00,+00.00,01.00,000.00,1.00 +0787,+030.00,+00.00,01.00,000.00,1.00 +0788,+030.00,+00.00,01.00,000.00,1.00 +0789,+030.00,+00.00,01.00,000.00,1.00 +0790,+030.00,+00.00,01.00,000.00,1.00 +0791,+030.00,+00.00,01.00,000.00,1.00 +0792,+030.00,+00.00,01.00,000.00,1.00 +0793,+030.00,+00.00,01.00,000.00,1.00 +0794,+030.00,+00.00,01.00,000.00,1.00 +0795,+030.00,+00.00,01.00,000.00,1.00 +0796,+030.00,+00.00,01.00,000.00,1.00 +0797,+030.00,+00.00,01.00,000.00,1.00 +0798,+030.00,+00.00,01.00,000.00,1.00 +0799,+030.00,+00.00,01.00,000.00,1.00 +0800,+030.00,+00.00,01.00,000.00,1.00 +0801,+030.00,+00.00,01.00,000.00,1.00 +0802,+030.00,+00.00,01.00,000.00,1.00 +0803,+030.00,+00.00,01.00,000.00,1.00 +0804,+030.00,+00.00,01.00,000.00,1.00 +0805,+030.00,+00.00,01.00,000.00,1.00 +0806,+030.00,+00.00,01.00,000.00,1.00 +0807,+030.00,+00.00,01.00,000.00,1.00 +0808,+030.00,+00.00,01.00,000.00,1.00 +0809,+030.00,+00.00,01.00,000.00,1.00 +0810,+030.00,+00.00,01.00,000.00,1.00 +0811,+030.00,+00.00,01.00,000.00,1.00 +0812,+030.00,+00.00,01.00,000.00,1.00 +0813,+030.00,+00.00,01.00,000.00,1.00 +0814,+030.00,+00.00,01.00,000.00,1.00 +0815,+030.00,+00.00,01.00,000.00,1.00 +0816,+030.00,+00.00,01.00,000.00,1.00 +0817,+030.00,+00.00,01.00,000.00,1.00 +0818,+030.00,+00.00,01.00,000.00,1.00 +0819,+030.00,+00.00,01.00,000.00,1.00 +0820,+030.00,+00.00,01.00,000.00,1.00 +0821,+030.00,+00.00,01.00,000.00,1.00 +0822,+030.00,+00.00,01.00,000.00,1.00 +0823,+030.00,+00.00,01.00,000.00,1.00 +0824,+030.00,+00.00,01.00,000.00,1.00 +0825,+030.00,+00.00,01.00,000.00,1.00 +0826,+030.00,+00.00,01.00,000.00,1.00 +0827,+030.00,+00.00,01.00,000.00,1.00 +0828,+030.00,+00.00,01.00,000.00,1.00 +0829,+030.00,+00.00,01.00,000.00,1.00 +0830,+030.00,+00.00,01.00,000.00,1.00 +0831,+030.00,+00.00,01.00,000.00,1.00 +0832,+030.00,+00.00,01.00,000.00,1.00 +0833,+030.00,+00.00,01.00,000.00,1.00 +0834,+030.00,+00.00,01.00,000.00,1.00 +0835,+030.00,+00.00,01.00,000.00,1.00 +0836,+030.00,+00.00,01.00,000.00,1.00 +0837,+030.00,+00.00,01.00,000.00,1.00 +0838,+030.00,+00.00,01.00,000.00,1.00 +0839,+030.00,+00.00,01.00,000.00,1.00 +0840,+030.00,+00.00,01.00,000.00,1.00 +0841,+030.00,+00.00,01.00,000.00,1.00 +0842,+030.00,+00.00,01.00,000.00,1.00 +0843,+030.00,+00.00,01.00,000.00,1.00 +0844,+030.00,+00.00,01.00,000.00,1.00 +0845,+030.00,+00.00,01.00,000.00,1.00 +0846,+030.00,+00.00,01.00,000.00,1.00 +0847,+030.00,+00.00,01.00,000.00,1.00 +0848,+030.00,+00.00,01.00,000.00,1.00 +0849,+030.00,+00.00,01.00,000.00,1.00 +0850,+030.00,+00.00,01.00,000.00,1.00 +0851,+030.00,+00.00,01.00,000.00,1.00 +0852,+030.00,+00.00,01.00,000.00,1.00 +0853,+030.00,+00.00,01.00,000.00,1.00 +0854,+030.00,+00.00,01.00,000.00,1.00 +0855,+030.00,+00.00,01.00,000.00,1.00 +0856,+030.00,+00.00,01.00,000.00,1.00 +0857,+030.00,+00.00,01.00,000.00,1.00 +0858,+030.00,+00.00,01.00,000.00,1.00 +0859,+030.00,+00.00,01.00,000.00,1.00 +0860,+030.00,+00.00,01.00,000.00,1.00 +0861,+030.00,+00.00,01.00,000.00,1.00 +0862,+030.00,+00.00,01.00,000.00,1.00 +0863,+030.00,+00.00,01.00,000.00,1.00 +0864,+030.00,+00.00,01.00,000.00,1.00 +0865,+030.00,+00.00,01.00,000.00,1.00 +0866,+030.00,+00.00,01.00,000.00,1.00 +0867,+030.00,+00.00,01.00,000.00,1.00 +0868,+030.00,+00.00,01.00,000.00,1.00 +0869,+030.00,+00.00,01.00,000.00,1.00 +0870,+030.00,+00.00,01.00,000.00,1.00 +0871,+030.00,+00.00,01.00,000.00,1.00 +0872,+030.00,+00.00,01.00,000.00,1.00 +0873,+030.00,+00.00,01.00,000.00,1.00 +0874,+030.00,+00.00,01.00,000.00,1.00 +0875,+030.00,+00.00,01.00,000.00,1.00 +0876,+030.00,+00.00,01.00,000.00,1.00 +0877,+030.00,+00.00,01.00,000.00,1.00 +0878,+030.00,+00.00,01.00,000.00,1.00 +0879,+030.00,+00.00,01.00,000.00,1.00 +0880,+030.00,+00.00,01.00,000.00,1.00 +0881,+030.00,+00.00,01.00,000.00,1.00 +0882,+030.00,+00.00,01.00,000.00,1.00 +0883,+030.00,+00.00,01.00,000.00,1.00 +0884,+030.00,+00.00,01.00,000.00,1.00 +0885,+030.00,+00.00,01.00,000.00,1.00 +0886,+030.00,+00.00,01.00,000.00,1.00 +0887,+030.00,+00.00,01.00,000.00,1.00 +0888,+030.00,+00.00,01.00,000.00,1.00 +0889,+030.00,+00.00,01.00,000.00,1.00 +0890,+030.00,+00.00,01.00,000.00,1.00 +0891,+030.00,+00.00,01.00,000.00,1.00 +0892,+030.00,+00.00,01.00,000.00,1.00 +0893,+030.00,+00.00,01.00,000.00,1.00 +0894,+030.00,+00.00,01.00,000.00,1.00 +0895,+030.00,+00.00,01.00,000.00,1.00 +0896,+030.00,+00.00,01.00,000.00,1.00 +0897,+030.00,+00.00,01.00,000.00,1.00 +0898,+030.00,+00.00,01.00,000.00,1.00 +0899,+030.00,+00.00,01.00,000.00,1.00 +0900,+030.00,+00.00,01.00,000.00,1.00 +0901,+030.00,+00.00,01.00,000.00,1.00 +0902,+030.00,+00.00,01.00,000.00,1.00 +0903,+030.00,+00.00,01.00,000.00,1.00 +0904,+030.00,+00.00,01.00,000.00,1.00 +0905,+030.00,+00.00,01.00,000.00,1.00 +0906,+030.00,+00.00,01.00,000.00,1.00 +0907,+030.00,+00.00,01.00,000.00,1.00 +0908,+030.00,+00.00,01.00,000.00,1.00 +0909,+030.00,+00.00,01.00,000.00,1.00 +0910,+030.00,+00.00,01.00,000.00,1.00 +0911,+030.00,+00.00,01.00,000.00,1.00 +0912,+030.00,+00.00,01.00,000.00,1.00 +0913,+030.00,+00.00,01.00,000.00,1.00 +0914,+030.00,+00.00,01.00,000.00,1.00 +0915,+030.00,+00.00,01.00,000.00,1.00 +0916,+030.00,+00.00,01.00,000.00,1.00 +0917,+030.00,+00.00,01.00,000.00,1.00 +0918,+030.00,+00.00,01.00,000.00,1.00 +0919,+030.00,+00.00,01.00,000.00,1.00 +0920,+030.00,+00.00,01.00,000.00,1.00 +0921,+030.00,+00.00,01.00,000.00,1.00 +0922,+030.00,+00.00,01.00,000.00,1.00 +0923,+030.00,+00.00,01.00,000.00,1.00 +0924,+030.00,+00.00,01.00,000.00,1.00 +0925,+030.00,+00.00,01.00,000.00,1.00 +0926,+030.00,+00.00,01.00,000.00,1.00 +0927,+030.00,+00.00,01.00,000.00,1.00 +0928,+030.00,+00.00,01.00,000.00,1.00 +0929,+030.00,+00.00,01.00,000.00,1.00 +0930,+030.00,+00.00,01.00,000.00,1.00 +0931,+030.00,+00.00,01.00,000.00,1.00 +0932,+030.00,+00.00,01.00,000.00,1.00 +0933,+030.00,+00.00,01.00,000.00,1.00 +0934,+030.00,+00.00,01.00,000.00,1.00 +0935,+030.00,+00.00,01.00,000.00,1.00 +0936,+030.00,+00.00,01.00,000.00,1.00 +0937,+030.00,+00.00,01.00,000.00,1.00 +0938,+030.00,+00.00,01.00,000.00,1.00 +0939,+030.00,+00.00,01.00,000.00,1.00 +0940,+030.00,+00.00,01.00,000.00,1.00 +0941,+030.00,+00.00,01.00,000.00,1.00 +0942,+030.00,+00.00,01.00,000.00,1.00 +0943,+030.00,+00.00,01.00,000.00,1.00 +0944,+030.00,+00.00,01.00,000.00,1.00 +0945,+030.00,+00.00,01.00,000.00,1.00 +0946,+030.00,+00.00,01.00,000.00,1.00 +0947,+030.00,+00.00,01.00,000.00,1.00 +0948,+030.00,+00.00,01.00,000.00,1.00 +0949,+030.00,+00.00,01.00,000.00,1.00 +0950,+030.00,+00.00,01.00,000.00,1.00 +0951,+030.00,+00.00,01.00,000.00,1.00 +0952,+030.00,+00.00,01.00,000.00,1.00 +0953,+030.00,+00.00,01.00,000.00,1.00 +0954,+030.00,+00.00,01.00,000.00,1.00 +0955,+030.00,+00.00,01.00,000.00,1.00 +0956,+030.00,+00.00,01.00,000.00,1.00 +0957,+030.00,+00.00,01.00,000.00,1.00 +0958,+030.00,+00.00,01.00,000.00,1.00 +0959,+030.00,+00.00,01.00,000.00,1.00 +0960,+030.00,+00.00,01.00,000.00,1.00 +0961,+030.00,+00.00,01.00,000.00,1.00 +0962,+030.00,+00.00,01.00,000.00,1.00 +0963,+030.00,+00.00,01.00,000.00,1.00 +0964,+030.00,+00.00,01.00,000.00,1.00 +0965,+030.00,+00.00,01.00,000.00,1.00 +0966,+030.00,+00.00,01.00,000.00,1.00 +0967,+030.00,+00.00,01.00,000.00,1.00 +0968,+030.00,+00.00,01.00,000.00,1.00 +0969,+030.00,+00.00,01.00,000.00,1.00 +0970,+030.00,+00.00,01.00,000.00,1.00 +0971,+030.00,+00.00,01.00,000.00,1.00 +0972,+030.00,+00.00,01.00,000.00,1.00 +0973,+030.00,+00.00,01.00,000.00,1.00 +0974,+030.00,+00.00,01.00,000.00,1.00 +0975,+030.00,+00.00,01.00,000.00,1.00 +0976,+030.00,+00.00,01.00,000.00,1.00 +0977,+030.00,+00.00,01.00,000.00,1.00 +0978,+030.00,+00.00,01.00,000.00,1.00 +0979,+030.00,+00.00,01.00,000.00,1.00 +0980,+030.00,+00.00,01.00,000.00,1.00 +0981,+030.00,+00.00,01.00,000.00,1.00 +0982,+030.00,+00.00,01.00,000.00,1.00 +0983,+030.00,+00.00,01.00,000.00,1.00 +0984,+030.00,+00.00,01.00,000.00,1.00 +0985,+030.00,+00.00,01.00,000.00,1.00 +0986,+030.00,+00.00,01.00,000.00,1.00 +0987,+030.00,+00.00,01.00,000.00,1.00 +0988,+030.00,+00.00,01.00,000.00,1.00 +0989,+030.00,+00.00,01.00,000.00,1.00 +0990,+030.00,+00.00,01.00,000.00,1.00 +0991,+030.00,+00.00,01.00,000.00,1.00 +0992,+030.00,+00.00,01.00,000.00,1.00 +0993,+030.00,+00.00,01.00,000.00,1.00 +0994,+030.00,+00.00,01.00,000.00,1.00 +0995,+030.00,+00.00,01.00,000.00,1.00 +0996,+030.00,+00.00,01.00,000.00,1.00 +0997,+030.00,+00.00,01.00,000.00,1.00 +0998,+030.00,+00.00,01.00,000.00,1.00 +0999,+030.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t03_ch1.csv b/scripts/td_object_renderer/metadata/csv/t03_ch1.csv new file mode 100644 index 0000000000..429364decb --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t03_ch1.csv @@ -0,0 +1,1000 @@ +0000,+045.00,+00.00,01.00,000.00,1.00 +0001,+045.00,+00.00,01.00,000.00,1.00 +0002,+045.00,+00.00,01.00,000.00,1.00 +0003,+045.00,+00.00,01.00,000.00,1.00 +0004,+045.00,+00.00,01.00,000.00,1.00 +0005,+045.00,+00.00,01.00,000.00,1.00 +0006,+045.00,+00.00,01.00,000.00,1.00 +0007,+045.00,+00.00,01.00,000.00,1.00 +0008,+045.00,+00.00,01.00,000.00,1.00 +0009,+045.00,+00.00,01.00,000.00,1.00 +0010,+045.00,+00.00,01.00,000.00,1.00 +0011,+045.00,+00.00,01.00,000.00,1.00 +0012,+045.00,+00.00,01.00,000.00,1.00 +0013,+045.00,+00.00,01.00,000.00,1.00 +0014,+045.00,+00.00,01.00,000.00,1.00 +0015,+045.00,+00.00,01.00,000.00,1.00 +0016,+045.00,+00.00,01.00,000.00,1.00 +0017,+045.00,+00.00,01.00,000.00,1.00 +0018,+045.00,+00.00,01.00,000.00,1.00 +0019,+045.00,+00.00,01.00,000.00,1.00 +0020,+045.00,+00.00,01.00,000.00,1.00 +0021,+045.00,+00.00,01.00,000.00,1.00 +0022,+045.00,+00.00,01.00,000.00,1.00 +0023,+045.00,+00.00,01.00,000.00,1.00 +0024,+045.00,+00.00,01.00,000.00,1.00 +0025,+045.00,+00.00,01.00,000.00,1.00 +0026,+045.00,+00.00,01.00,000.00,1.00 +0027,+045.00,+00.00,01.00,000.00,1.00 +0028,+045.00,+00.00,01.00,000.00,1.00 +0029,+045.00,+00.00,01.00,000.00,1.00 +0030,+045.00,+00.00,01.00,000.00,1.00 +0031,+045.00,+00.00,01.00,000.00,1.00 +0032,+045.00,+00.00,01.00,000.00,1.00 +0033,+045.00,+00.00,01.00,000.00,1.00 +0034,+045.00,+00.00,01.00,000.00,1.00 +0035,+045.00,+00.00,01.00,000.00,1.00 +0036,+045.00,+00.00,01.00,000.00,1.00 +0037,+045.00,+00.00,01.00,000.00,1.00 +0038,+045.00,+00.00,01.00,000.00,1.00 +0039,+045.00,+00.00,01.00,000.00,1.00 +0040,+045.00,+00.00,01.00,000.00,1.00 +0041,+045.00,+00.00,01.00,000.00,1.00 +0042,+045.00,+00.00,01.00,000.00,1.00 +0043,+045.00,+00.00,01.00,000.00,1.00 +0044,+045.00,+00.00,01.00,000.00,1.00 +0045,+045.00,+00.00,01.00,000.00,1.00 +0046,+045.00,+00.00,01.00,000.00,1.00 +0047,+045.00,+00.00,01.00,000.00,1.00 +0048,+045.00,+00.00,01.00,000.00,1.00 +0049,+045.00,+00.00,01.00,000.00,1.00 +0050,+045.00,+00.00,01.00,000.00,1.00 +0051,+045.00,+00.00,01.00,000.00,1.00 +0052,+045.00,+00.00,01.00,000.00,1.00 +0053,+045.00,+00.00,01.00,000.00,1.00 +0054,+045.00,+00.00,01.00,000.00,1.00 +0055,+045.00,+00.00,01.00,000.00,1.00 +0056,+045.00,+00.00,01.00,000.00,1.00 +0057,+045.00,+00.00,01.00,000.00,1.00 +0058,+045.00,+00.00,01.00,000.00,1.00 +0059,+045.00,+00.00,01.00,000.00,1.00 +0060,+045.00,+00.00,01.00,000.00,1.00 +0061,+045.00,+00.00,01.00,000.00,1.00 +0062,+045.00,+00.00,01.00,000.00,1.00 +0063,+045.00,+00.00,01.00,000.00,1.00 +0064,+045.00,+00.00,01.00,000.00,1.00 +0065,+045.00,+00.00,01.00,000.00,1.00 +0066,+045.00,+00.00,01.00,000.00,1.00 +0067,+045.00,+00.00,01.00,000.00,1.00 +0068,+045.00,+00.00,01.00,000.00,1.00 +0069,+045.00,+00.00,01.00,000.00,1.00 +0070,+045.00,+00.00,01.00,000.00,1.00 +0071,+045.00,+00.00,01.00,000.00,1.00 +0072,+045.00,+00.00,01.00,000.00,1.00 +0073,+045.00,+00.00,01.00,000.00,1.00 +0074,+045.00,+00.00,01.00,000.00,1.00 +0075,+045.00,+00.00,01.00,000.00,1.00 +0076,+045.00,+00.00,01.00,000.00,1.00 +0077,+045.00,+00.00,01.00,000.00,1.00 +0078,+045.00,+00.00,01.00,000.00,1.00 +0079,+045.00,+00.00,01.00,000.00,1.00 +0080,+045.00,+00.00,01.00,000.00,1.00 +0081,+045.00,+00.00,01.00,000.00,1.00 +0082,+045.00,+00.00,01.00,000.00,1.00 +0083,+045.00,+00.00,01.00,000.00,1.00 +0084,+045.00,+00.00,01.00,000.00,1.00 +0085,+045.00,+00.00,01.00,000.00,1.00 +0086,+045.00,+00.00,01.00,000.00,1.00 +0087,+045.00,+00.00,01.00,000.00,1.00 +0088,+045.00,+00.00,01.00,000.00,1.00 +0089,+045.00,+00.00,01.00,000.00,1.00 +0090,+045.00,+00.00,01.00,000.00,1.00 +0091,+045.00,+00.00,01.00,000.00,1.00 +0092,+045.00,+00.00,01.00,000.00,1.00 +0093,+045.00,+00.00,01.00,000.00,1.00 +0094,+045.00,+00.00,01.00,000.00,1.00 +0095,+045.00,+00.00,01.00,000.00,1.00 +0096,+045.00,+00.00,01.00,000.00,1.00 +0097,+045.00,+00.00,01.00,000.00,1.00 +0098,+045.00,+00.00,01.00,000.00,1.00 +0099,+045.00,+00.00,01.00,000.00,1.00 +0100,+045.00,+00.00,01.00,000.00,1.00 +0101,+045.00,+00.00,01.00,000.00,1.00 +0102,+045.00,+00.00,01.00,000.00,1.00 +0103,+045.00,+00.00,01.00,000.00,1.00 +0104,+045.00,+00.00,01.00,000.00,1.00 +0105,+045.00,+00.00,01.00,000.00,1.00 +0106,+045.00,+00.00,01.00,000.00,1.00 +0107,+045.00,+00.00,01.00,000.00,1.00 +0108,+045.00,+00.00,01.00,000.00,1.00 +0109,+045.00,+00.00,01.00,000.00,1.00 +0110,+045.00,+00.00,01.00,000.00,1.00 +0111,+045.00,+00.00,01.00,000.00,1.00 +0112,+045.00,+00.00,01.00,000.00,1.00 +0113,+045.00,+00.00,01.00,000.00,1.00 +0114,+045.00,+00.00,01.00,000.00,1.00 +0115,+045.00,+00.00,01.00,000.00,1.00 +0116,+045.00,+00.00,01.00,000.00,1.00 +0117,+045.00,+00.00,01.00,000.00,1.00 +0118,+045.00,+00.00,01.00,000.00,1.00 +0119,+045.00,+00.00,01.00,000.00,1.00 +0120,+045.00,+00.00,01.00,000.00,1.00 +0121,+045.00,+00.00,01.00,000.00,1.00 +0122,+045.00,+00.00,01.00,000.00,1.00 +0123,+045.00,+00.00,01.00,000.00,1.00 +0124,+045.00,+00.00,01.00,000.00,1.00 +0125,+045.00,+00.00,01.00,000.00,1.00 +0126,+045.00,+00.00,01.00,000.00,1.00 +0127,+045.00,+00.00,01.00,000.00,1.00 +0128,+045.00,+00.00,01.00,000.00,1.00 +0129,+045.00,+00.00,01.00,000.00,1.00 +0130,+045.00,+00.00,01.00,000.00,1.00 +0131,+045.00,+00.00,01.00,000.00,1.00 +0132,+045.00,+00.00,01.00,000.00,1.00 +0133,+045.00,+00.00,01.00,000.00,1.00 +0134,+045.00,+00.00,01.00,000.00,1.00 +0135,+045.00,+00.00,01.00,000.00,1.00 +0136,+045.00,+00.00,01.00,000.00,1.00 +0137,+045.00,+00.00,01.00,000.00,1.00 +0138,+045.00,+00.00,01.00,000.00,1.00 +0139,+045.00,+00.00,01.00,000.00,1.00 +0140,+045.00,+00.00,01.00,000.00,1.00 +0141,+045.00,+00.00,01.00,000.00,1.00 +0142,+045.00,+00.00,01.00,000.00,1.00 +0143,+045.00,+00.00,01.00,000.00,1.00 +0144,+045.00,+00.00,01.00,000.00,1.00 +0145,+045.00,+00.00,01.00,000.00,1.00 +0146,+045.00,+00.00,01.00,000.00,1.00 +0147,+045.00,+00.00,01.00,000.00,1.00 +0148,+045.00,+00.00,01.00,000.00,1.00 +0149,+045.00,+00.00,01.00,000.00,1.00 +0150,+045.00,+00.00,01.00,000.00,1.00 +0151,+045.00,+00.00,01.00,000.00,1.00 +0152,+045.00,+00.00,01.00,000.00,1.00 +0153,+045.00,+00.00,01.00,000.00,1.00 +0154,+045.00,+00.00,01.00,000.00,1.00 +0155,+045.00,+00.00,01.00,000.00,1.00 +0156,+045.00,+00.00,01.00,000.00,1.00 +0157,+045.00,+00.00,01.00,000.00,1.00 +0158,+045.00,+00.00,01.00,000.00,1.00 +0159,+045.00,+00.00,01.00,000.00,1.00 +0160,+045.00,+00.00,01.00,000.00,1.00 +0161,+045.00,+00.00,01.00,000.00,1.00 +0162,+045.00,+00.00,01.00,000.00,1.00 +0163,+045.00,+00.00,01.00,000.00,1.00 +0164,+045.00,+00.00,01.00,000.00,1.00 +0165,+045.00,+00.00,01.00,000.00,1.00 +0166,+045.00,+00.00,01.00,000.00,1.00 +0167,+045.00,+00.00,01.00,000.00,1.00 +0168,+045.00,+00.00,01.00,000.00,1.00 +0169,+045.00,+00.00,01.00,000.00,1.00 +0170,+045.00,+00.00,01.00,000.00,1.00 +0171,+045.00,+00.00,01.00,000.00,1.00 +0172,+045.00,+00.00,01.00,000.00,1.00 +0173,+045.00,+00.00,01.00,000.00,1.00 +0174,+045.00,+00.00,01.00,000.00,1.00 +0175,+045.00,+00.00,01.00,000.00,1.00 +0176,+045.00,+00.00,01.00,000.00,1.00 +0177,+045.00,+00.00,01.00,000.00,1.00 +0178,+045.00,+00.00,01.00,000.00,1.00 +0179,+045.00,+00.00,01.00,000.00,1.00 +0180,+045.00,+00.00,01.00,000.00,1.00 +0181,+045.00,+00.00,01.00,000.00,1.00 +0182,+045.00,+00.00,01.00,000.00,1.00 +0183,+045.00,+00.00,01.00,000.00,1.00 +0184,+045.00,+00.00,01.00,000.00,1.00 +0185,+045.00,+00.00,01.00,000.00,1.00 +0186,+045.00,+00.00,01.00,000.00,1.00 +0187,+045.00,+00.00,01.00,000.00,1.00 +0188,+045.00,+00.00,01.00,000.00,1.00 +0189,+045.00,+00.00,01.00,000.00,1.00 +0190,+045.00,+00.00,01.00,000.00,1.00 +0191,+045.00,+00.00,01.00,000.00,1.00 +0192,+045.00,+00.00,01.00,000.00,1.00 +0193,+045.00,+00.00,01.00,000.00,1.00 +0194,+045.00,+00.00,01.00,000.00,1.00 +0195,+045.00,+00.00,01.00,000.00,1.00 +0196,+045.00,+00.00,01.00,000.00,1.00 +0197,+045.00,+00.00,01.00,000.00,1.00 +0198,+045.00,+00.00,01.00,000.00,1.00 +0199,+045.00,+00.00,01.00,000.00,1.00 +0200,+045.00,+00.00,01.00,000.00,1.00 +0201,+045.00,+00.00,01.00,000.00,1.00 +0202,+045.00,+00.00,01.00,000.00,1.00 +0203,+045.00,+00.00,01.00,000.00,1.00 +0204,+045.00,+00.00,01.00,000.00,1.00 +0205,+045.00,+00.00,01.00,000.00,1.00 +0206,+045.00,+00.00,01.00,000.00,1.00 +0207,+045.00,+00.00,01.00,000.00,1.00 +0208,+045.00,+00.00,01.00,000.00,1.00 +0209,+045.00,+00.00,01.00,000.00,1.00 +0210,+045.00,+00.00,01.00,000.00,1.00 +0211,+045.00,+00.00,01.00,000.00,1.00 +0212,+045.00,+00.00,01.00,000.00,1.00 +0213,+045.00,+00.00,01.00,000.00,1.00 +0214,+045.00,+00.00,01.00,000.00,1.00 +0215,+045.00,+00.00,01.00,000.00,1.00 +0216,+045.00,+00.00,01.00,000.00,1.00 +0217,+045.00,+00.00,01.00,000.00,1.00 +0218,+045.00,+00.00,01.00,000.00,1.00 +0219,+045.00,+00.00,01.00,000.00,1.00 +0220,+045.00,+00.00,01.00,000.00,1.00 +0221,+045.00,+00.00,01.00,000.00,1.00 +0222,+045.00,+00.00,01.00,000.00,1.00 +0223,+045.00,+00.00,01.00,000.00,1.00 +0224,+045.00,+00.00,01.00,000.00,1.00 +0225,+045.00,+00.00,01.00,000.00,1.00 +0226,+045.00,+00.00,01.00,000.00,1.00 +0227,+045.00,+00.00,01.00,000.00,1.00 +0228,+045.00,+00.00,01.00,000.00,1.00 +0229,+045.00,+00.00,01.00,000.00,1.00 +0230,+045.00,+00.00,01.00,000.00,1.00 +0231,+045.00,+00.00,01.00,000.00,1.00 +0232,+045.00,+00.00,01.00,000.00,1.00 +0233,+045.00,+00.00,01.00,000.00,1.00 +0234,+045.00,+00.00,01.00,000.00,1.00 +0235,+045.00,+00.00,01.00,000.00,1.00 +0236,+045.00,+00.00,01.00,000.00,1.00 +0237,+045.00,+00.00,01.00,000.00,1.00 +0238,+045.00,+00.00,01.00,000.00,1.00 +0239,+045.00,+00.00,01.00,000.00,1.00 +0240,+045.00,+00.00,01.00,000.00,1.00 +0241,+045.00,+00.00,01.00,000.00,1.00 +0242,+045.00,+00.00,01.00,000.00,1.00 +0243,+045.00,+00.00,01.00,000.00,1.00 +0244,+045.00,+00.00,01.00,000.00,1.00 +0245,+045.00,+00.00,01.00,000.00,1.00 +0246,+045.00,+00.00,01.00,000.00,1.00 +0247,+045.00,+00.00,01.00,000.00,1.00 +0248,+045.00,+00.00,01.00,000.00,1.00 +0249,+045.00,+00.00,01.00,000.00,1.00 +0250,+045.00,+00.00,01.00,000.00,1.00 +0251,+045.00,+00.00,01.00,000.00,1.00 +0252,+045.00,+00.00,01.00,000.00,1.00 +0253,+045.00,+00.00,01.00,000.00,1.00 +0254,+045.00,+00.00,01.00,000.00,1.00 +0255,+045.00,+00.00,01.00,000.00,1.00 +0256,+045.00,+00.00,01.00,000.00,1.00 +0257,+045.00,+00.00,01.00,000.00,1.00 +0258,+045.00,+00.00,01.00,000.00,1.00 +0259,+045.00,+00.00,01.00,000.00,1.00 +0260,+045.00,+00.00,01.00,000.00,1.00 +0261,+045.00,+00.00,01.00,000.00,1.00 +0262,+045.00,+00.00,01.00,000.00,1.00 +0263,+045.00,+00.00,01.00,000.00,1.00 +0264,+045.00,+00.00,01.00,000.00,1.00 +0265,+045.00,+00.00,01.00,000.00,1.00 +0266,+045.00,+00.00,01.00,000.00,1.00 +0267,+045.00,+00.00,01.00,000.00,1.00 +0268,+045.00,+00.00,01.00,000.00,1.00 +0269,+045.00,+00.00,01.00,000.00,1.00 +0270,+045.00,+00.00,01.00,000.00,1.00 +0271,+045.00,+00.00,01.00,000.00,1.00 +0272,+045.00,+00.00,01.00,000.00,1.00 +0273,+045.00,+00.00,01.00,000.00,1.00 +0274,+045.00,+00.00,01.00,000.00,1.00 +0275,+045.00,+00.00,01.00,000.00,1.00 +0276,+045.00,+00.00,01.00,000.00,1.00 +0277,+045.00,+00.00,01.00,000.00,1.00 +0278,+045.00,+00.00,01.00,000.00,1.00 +0279,+045.00,+00.00,01.00,000.00,1.00 +0280,+045.00,+00.00,01.00,000.00,1.00 +0281,+045.00,+00.00,01.00,000.00,1.00 +0282,+045.00,+00.00,01.00,000.00,1.00 +0283,+045.00,+00.00,01.00,000.00,1.00 +0284,+045.00,+00.00,01.00,000.00,1.00 +0285,+045.00,+00.00,01.00,000.00,1.00 +0286,+045.00,+00.00,01.00,000.00,1.00 +0287,+045.00,+00.00,01.00,000.00,1.00 +0288,+045.00,+00.00,01.00,000.00,1.00 +0289,+045.00,+00.00,01.00,000.00,1.00 +0290,+045.00,+00.00,01.00,000.00,1.00 +0291,+045.00,+00.00,01.00,000.00,1.00 +0292,+045.00,+00.00,01.00,000.00,1.00 +0293,+045.00,+00.00,01.00,000.00,1.00 +0294,+045.00,+00.00,01.00,000.00,1.00 +0295,+045.00,+00.00,01.00,000.00,1.00 +0296,+045.00,+00.00,01.00,000.00,1.00 +0297,+045.00,+00.00,01.00,000.00,1.00 +0298,+045.00,+00.00,01.00,000.00,1.00 +0299,+045.00,+00.00,01.00,000.00,1.00 +0300,+045.00,+00.00,01.00,000.00,1.00 +0301,+045.00,+00.00,01.00,000.00,1.00 +0302,+045.00,+00.00,01.00,000.00,1.00 +0303,+045.00,+00.00,01.00,000.00,1.00 +0304,+045.00,+00.00,01.00,000.00,1.00 +0305,+045.00,+00.00,01.00,000.00,1.00 +0306,+045.00,+00.00,01.00,000.00,1.00 +0307,+045.00,+00.00,01.00,000.00,1.00 +0308,+045.00,+00.00,01.00,000.00,1.00 +0309,+045.00,+00.00,01.00,000.00,1.00 +0310,+045.00,+00.00,01.00,000.00,1.00 +0311,+045.00,+00.00,01.00,000.00,1.00 +0312,+045.00,+00.00,01.00,000.00,1.00 +0313,+045.00,+00.00,01.00,000.00,1.00 +0314,+045.00,+00.00,01.00,000.00,1.00 +0315,+045.00,+00.00,01.00,000.00,1.00 +0316,+045.00,+00.00,01.00,000.00,1.00 +0317,+045.00,+00.00,01.00,000.00,1.00 +0318,+045.00,+00.00,01.00,000.00,1.00 +0319,+045.00,+00.00,01.00,000.00,1.00 +0320,+045.00,+00.00,01.00,000.00,1.00 +0321,+045.00,+00.00,01.00,000.00,1.00 +0322,+045.00,+00.00,01.00,000.00,1.00 +0323,+045.00,+00.00,01.00,000.00,1.00 +0324,+045.00,+00.00,01.00,000.00,1.00 +0325,+045.00,+00.00,01.00,000.00,1.00 +0326,+045.00,+00.00,01.00,000.00,1.00 +0327,+045.00,+00.00,01.00,000.00,1.00 +0328,+045.00,+00.00,01.00,000.00,1.00 +0329,+045.00,+00.00,01.00,000.00,1.00 +0330,+045.00,+00.00,01.00,000.00,1.00 +0331,+045.00,+00.00,01.00,000.00,1.00 +0332,+045.00,+00.00,01.00,000.00,1.00 +0333,+045.00,+00.00,01.00,000.00,1.00 +0334,+045.00,+00.00,01.00,000.00,1.00 +0335,+045.00,+00.00,01.00,000.00,1.00 +0336,+045.00,+00.00,01.00,000.00,1.00 +0337,+045.00,+00.00,01.00,000.00,1.00 +0338,+045.00,+00.00,01.00,000.00,1.00 +0339,+045.00,+00.00,01.00,000.00,1.00 +0340,+045.00,+00.00,01.00,000.00,1.00 +0341,+045.00,+00.00,01.00,000.00,1.00 +0342,+045.00,+00.00,01.00,000.00,1.00 +0343,+045.00,+00.00,01.00,000.00,1.00 +0344,+045.00,+00.00,01.00,000.00,1.00 +0345,+045.00,+00.00,01.00,000.00,1.00 +0346,+045.00,+00.00,01.00,000.00,1.00 +0347,+045.00,+00.00,01.00,000.00,1.00 +0348,+045.00,+00.00,01.00,000.00,1.00 +0349,+045.00,+00.00,01.00,000.00,1.00 +0350,+045.00,+00.00,01.00,000.00,1.00 +0351,+045.00,+00.00,01.00,000.00,1.00 +0352,+045.00,+00.00,01.00,000.00,1.00 +0353,+045.00,+00.00,01.00,000.00,1.00 +0354,+045.00,+00.00,01.00,000.00,1.00 +0355,+045.00,+00.00,01.00,000.00,1.00 +0356,+045.00,+00.00,01.00,000.00,1.00 +0357,+045.00,+00.00,01.00,000.00,1.00 +0358,+045.00,+00.00,01.00,000.00,1.00 +0359,+045.00,+00.00,01.00,000.00,1.00 +0360,+045.00,+00.00,01.00,000.00,1.00 +0361,+045.00,+00.00,01.00,000.00,1.00 +0362,+045.00,+00.00,01.00,000.00,1.00 +0363,+045.00,+00.00,01.00,000.00,1.00 +0364,+045.00,+00.00,01.00,000.00,1.00 +0365,+045.00,+00.00,01.00,000.00,1.00 +0366,+045.00,+00.00,01.00,000.00,1.00 +0367,+045.00,+00.00,01.00,000.00,1.00 +0368,+045.00,+00.00,01.00,000.00,1.00 +0369,+045.00,+00.00,01.00,000.00,1.00 +0370,+045.00,+00.00,01.00,000.00,1.00 +0371,+045.00,+00.00,01.00,000.00,1.00 +0372,+045.00,+00.00,01.00,000.00,1.00 +0373,+045.00,+00.00,01.00,000.00,1.00 +0374,+045.00,+00.00,01.00,000.00,1.00 +0375,+045.00,+00.00,01.00,000.00,1.00 +0376,+045.00,+00.00,01.00,000.00,1.00 +0377,+045.00,+00.00,01.00,000.00,1.00 +0378,+045.00,+00.00,01.00,000.00,1.00 +0379,+045.00,+00.00,01.00,000.00,1.00 +0380,+045.00,+00.00,01.00,000.00,1.00 +0381,+045.00,+00.00,01.00,000.00,1.00 +0382,+045.00,+00.00,01.00,000.00,1.00 +0383,+045.00,+00.00,01.00,000.00,1.00 +0384,+045.00,+00.00,01.00,000.00,1.00 +0385,+045.00,+00.00,01.00,000.00,1.00 +0386,+045.00,+00.00,01.00,000.00,1.00 +0387,+045.00,+00.00,01.00,000.00,1.00 +0388,+045.00,+00.00,01.00,000.00,1.00 +0389,+045.00,+00.00,01.00,000.00,1.00 +0390,+045.00,+00.00,01.00,000.00,1.00 +0391,+045.00,+00.00,01.00,000.00,1.00 +0392,+045.00,+00.00,01.00,000.00,1.00 +0393,+045.00,+00.00,01.00,000.00,1.00 +0394,+045.00,+00.00,01.00,000.00,1.00 +0395,+045.00,+00.00,01.00,000.00,1.00 +0396,+045.00,+00.00,01.00,000.00,1.00 +0397,+045.00,+00.00,01.00,000.00,1.00 +0398,+045.00,+00.00,01.00,000.00,1.00 +0399,+045.00,+00.00,01.00,000.00,1.00 +0400,+045.00,+00.00,01.00,000.00,1.00 +0401,+045.00,+00.00,01.00,000.00,1.00 +0402,+045.00,+00.00,01.00,000.00,1.00 +0403,+045.00,+00.00,01.00,000.00,1.00 +0404,+045.00,+00.00,01.00,000.00,1.00 +0405,+045.00,+00.00,01.00,000.00,1.00 +0406,+045.00,+00.00,01.00,000.00,1.00 +0407,+045.00,+00.00,01.00,000.00,1.00 +0408,+045.00,+00.00,01.00,000.00,1.00 +0409,+045.00,+00.00,01.00,000.00,1.00 +0410,+045.00,+00.00,01.00,000.00,1.00 +0411,+045.00,+00.00,01.00,000.00,1.00 +0412,+045.00,+00.00,01.00,000.00,1.00 +0413,+045.00,+00.00,01.00,000.00,1.00 +0414,+045.00,+00.00,01.00,000.00,1.00 +0415,+045.00,+00.00,01.00,000.00,1.00 +0416,+045.00,+00.00,01.00,000.00,1.00 +0417,+045.00,+00.00,01.00,000.00,1.00 +0418,+045.00,+00.00,01.00,000.00,1.00 +0419,+045.00,+00.00,01.00,000.00,1.00 +0420,+045.00,+00.00,01.00,000.00,1.00 +0421,+045.00,+00.00,01.00,000.00,1.00 +0422,+045.00,+00.00,01.00,000.00,1.00 +0423,+045.00,+00.00,01.00,000.00,1.00 +0424,+045.00,+00.00,01.00,000.00,1.00 +0425,+045.00,+00.00,01.00,000.00,1.00 +0426,+045.00,+00.00,01.00,000.00,1.00 +0427,+045.00,+00.00,01.00,000.00,1.00 +0428,+045.00,+00.00,01.00,000.00,1.00 +0429,+045.00,+00.00,01.00,000.00,1.00 +0430,+045.00,+00.00,01.00,000.00,1.00 +0431,+045.00,+00.00,01.00,000.00,1.00 +0432,+045.00,+00.00,01.00,000.00,1.00 +0433,+045.00,+00.00,01.00,000.00,1.00 +0434,+045.00,+00.00,01.00,000.00,1.00 +0435,+045.00,+00.00,01.00,000.00,1.00 +0436,+045.00,+00.00,01.00,000.00,1.00 +0437,+045.00,+00.00,01.00,000.00,1.00 +0438,+045.00,+00.00,01.00,000.00,1.00 +0439,+045.00,+00.00,01.00,000.00,1.00 +0440,+045.00,+00.00,01.00,000.00,1.00 +0441,+045.00,+00.00,01.00,000.00,1.00 +0442,+045.00,+00.00,01.00,000.00,1.00 +0443,+045.00,+00.00,01.00,000.00,1.00 +0444,+045.00,+00.00,01.00,000.00,1.00 +0445,+045.00,+00.00,01.00,000.00,1.00 +0446,+045.00,+00.00,01.00,000.00,1.00 +0447,+045.00,+00.00,01.00,000.00,1.00 +0448,+045.00,+00.00,01.00,000.00,1.00 +0449,+045.00,+00.00,01.00,000.00,1.00 +0450,+045.00,+00.00,01.00,000.00,1.00 +0451,+045.00,+00.00,01.00,000.00,1.00 +0452,+045.00,+00.00,01.00,000.00,1.00 +0453,+045.00,+00.00,01.00,000.00,1.00 +0454,+045.00,+00.00,01.00,000.00,1.00 +0455,+045.00,+00.00,01.00,000.00,1.00 +0456,+045.00,+00.00,01.00,000.00,1.00 +0457,+045.00,+00.00,01.00,000.00,1.00 +0458,+045.00,+00.00,01.00,000.00,1.00 +0459,+045.00,+00.00,01.00,000.00,1.00 +0460,+045.00,+00.00,01.00,000.00,1.00 +0461,+045.00,+00.00,01.00,000.00,1.00 +0462,+045.00,+00.00,01.00,000.00,1.00 +0463,+045.00,+00.00,01.00,000.00,1.00 +0464,+045.00,+00.00,01.00,000.00,1.00 +0465,+045.00,+00.00,01.00,000.00,1.00 +0466,+045.00,+00.00,01.00,000.00,1.00 +0467,+045.00,+00.00,01.00,000.00,1.00 +0468,+045.00,+00.00,01.00,000.00,1.00 +0469,+045.00,+00.00,01.00,000.00,1.00 +0470,+045.00,+00.00,01.00,000.00,1.00 +0471,+045.00,+00.00,01.00,000.00,1.00 +0472,+045.00,+00.00,01.00,000.00,1.00 +0473,+045.00,+00.00,01.00,000.00,1.00 +0474,+045.00,+00.00,01.00,000.00,1.00 +0475,+045.00,+00.00,01.00,000.00,1.00 +0476,+045.00,+00.00,01.00,000.00,1.00 +0477,+045.00,+00.00,01.00,000.00,1.00 +0478,+045.00,+00.00,01.00,000.00,1.00 +0479,+045.00,+00.00,01.00,000.00,1.00 +0480,+045.00,+00.00,01.00,000.00,1.00 +0481,+045.00,+00.00,01.00,000.00,1.00 +0482,+045.00,+00.00,01.00,000.00,1.00 +0483,+045.00,+00.00,01.00,000.00,1.00 +0484,+045.00,+00.00,01.00,000.00,1.00 +0485,+045.00,+00.00,01.00,000.00,1.00 +0486,+045.00,+00.00,01.00,000.00,1.00 +0487,+045.00,+00.00,01.00,000.00,1.00 +0488,+045.00,+00.00,01.00,000.00,1.00 +0489,+045.00,+00.00,01.00,000.00,1.00 +0490,+045.00,+00.00,01.00,000.00,1.00 +0491,+045.00,+00.00,01.00,000.00,1.00 +0492,+045.00,+00.00,01.00,000.00,1.00 +0493,+045.00,+00.00,01.00,000.00,1.00 +0494,+045.00,+00.00,01.00,000.00,1.00 +0495,+045.00,+00.00,01.00,000.00,1.00 +0496,+045.00,+00.00,01.00,000.00,1.00 +0497,+045.00,+00.00,01.00,000.00,1.00 +0498,+045.00,+00.00,01.00,000.00,1.00 +0499,+045.00,+00.00,01.00,000.00,1.00 +0500,+045.00,+00.00,01.00,000.00,1.00 +0501,+045.00,+00.00,01.00,000.00,1.00 +0502,+045.00,+00.00,01.00,000.00,1.00 +0503,+045.00,+00.00,01.00,000.00,1.00 +0504,+045.00,+00.00,01.00,000.00,1.00 +0505,+045.00,+00.00,01.00,000.00,1.00 +0506,+045.00,+00.00,01.00,000.00,1.00 +0507,+045.00,+00.00,01.00,000.00,1.00 +0508,+045.00,+00.00,01.00,000.00,1.00 +0509,+045.00,+00.00,01.00,000.00,1.00 +0510,+045.00,+00.00,01.00,000.00,1.00 +0511,+045.00,+00.00,01.00,000.00,1.00 +0512,+045.00,+00.00,01.00,000.00,1.00 +0513,+045.00,+00.00,01.00,000.00,1.00 +0514,+045.00,+00.00,01.00,000.00,1.00 +0515,+045.00,+00.00,01.00,000.00,1.00 +0516,+045.00,+00.00,01.00,000.00,1.00 +0517,+045.00,+00.00,01.00,000.00,1.00 +0518,+045.00,+00.00,01.00,000.00,1.00 +0519,+045.00,+00.00,01.00,000.00,1.00 +0520,+045.00,+00.00,01.00,000.00,1.00 +0521,+045.00,+00.00,01.00,000.00,1.00 +0522,+045.00,+00.00,01.00,000.00,1.00 +0523,+045.00,+00.00,01.00,000.00,1.00 +0524,+045.00,+00.00,01.00,000.00,1.00 +0525,+045.00,+00.00,01.00,000.00,1.00 +0526,+045.00,+00.00,01.00,000.00,1.00 +0527,+045.00,+00.00,01.00,000.00,1.00 +0528,+045.00,+00.00,01.00,000.00,1.00 +0529,+045.00,+00.00,01.00,000.00,1.00 +0530,+045.00,+00.00,01.00,000.00,1.00 +0531,+045.00,+00.00,01.00,000.00,1.00 +0532,+045.00,+00.00,01.00,000.00,1.00 +0533,+045.00,+00.00,01.00,000.00,1.00 +0534,+045.00,+00.00,01.00,000.00,1.00 +0535,+045.00,+00.00,01.00,000.00,1.00 +0536,+045.00,+00.00,01.00,000.00,1.00 +0537,+045.00,+00.00,01.00,000.00,1.00 +0538,+045.00,+00.00,01.00,000.00,1.00 +0539,+045.00,+00.00,01.00,000.00,1.00 +0540,+045.00,+00.00,01.00,000.00,1.00 +0541,+045.00,+00.00,01.00,000.00,1.00 +0542,+045.00,+00.00,01.00,000.00,1.00 +0543,+045.00,+00.00,01.00,000.00,1.00 +0544,+045.00,+00.00,01.00,000.00,1.00 +0545,+045.00,+00.00,01.00,000.00,1.00 +0546,+045.00,+00.00,01.00,000.00,1.00 +0547,+045.00,+00.00,01.00,000.00,1.00 +0548,+045.00,+00.00,01.00,000.00,1.00 +0549,+045.00,+00.00,01.00,000.00,1.00 +0550,+045.00,+00.00,01.00,000.00,1.00 +0551,+045.00,+00.00,01.00,000.00,1.00 +0552,+045.00,+00.00,01.00,000.00,1.00 +0553,+045.00,+00.00,01.00,000.00,1.00 +0554,+045.00,+00.00,01.00,000.00,1.00 +0555,+045.00,+00.00,01.00,000.00,1.00 +0556,+045.00,+00.00,01.00,000.00,1.00 +0557,+045.00,+00.00,01.00,000.00,1.00 +0558,+045.00,+00.00,01.00,000.00,1.00 +0559,+045.00,+00.00,01.00,000.00,1.00 +0560,+045.00,+00.00,01.00,000.00,1.00 +0561,+045.00,+00.00,01.00,000.00,1.00 +0562,+045.00,+00.00,01.00,000.00,1.00 +0563,+045.00,+00.00,01.00,000.00,1.00 +0564,+045.00,+00.00,01.00,000.00,1.00 +0565,+045.00,+00.00,01.00,000.00,1.00 +0566,+045.00,+00.00,01.00,000.00,1.00 +0567,+045.00,+00.00,01.00,000.00,1.00 +0568,+045.00,+00.00,01.00,000.00,1.00 +0569,+045.00,+00.00,01.00,000.00,1.00 +0570,+045.00,+00.00,01.00,000.00,1.00 +0571,+045.00,+00.00,01.00,000.00,1.00 +0572,+045.00,+00.00,01.00,000.00,1.00 +0573,+045.00,+00.00,01.00,000.00,1.00 +0574,+045.00,+00.00,01.00,000.00,1.00 +0575,+045.00,+00.00,01.00,000.00,1.00 +0576,+045.00,+00.00,01.00,000.00,1.00 +0577,+045.00,+00.00,01.00,000.00,1.00 +0578,+045.00,+00.00,01.00,000.00,1.00 +0579,+045.00,+00.00,01.00,000.00,1.00 +0580,+045.00,+00.00,01.00,000.00,1.00 +0581,+045.00,+00.00,01.00,000.00,1.00 +0582,+045.00,+00.00,01.00,000.00,1.00 +0583,+045.00,+00.00,01.00,000.00,1.00 +0584,+045.00,+00.00,01.00,000.00,1.00 +0585,+045.00,+00.00,01.00,000.00,1.00 +0586,+045.00,+00.00,01.00,000.00,1.00 +0587,+045.00,+00.00,01.00,000.00,1.00 +0588,+045.00,+00.00,01.00,000.00,1.00 +0589,+045.00,+00.00,01.00,000.00,1.00 +0590,+045.00,+00.00,01.00,000.00,1.00 +0591,+045.00,+00.00,01.00,000.00,1.00 +0592,+045.00,+00.00,01.00,000.00,1.00 +0593,+045.00,+00.00,01.00,000.00,1.00 +0594,+045.00,+00.00,01.00,000.00,1.00 +0595,+045.00,+00.00,01.00,000.00,1.00 +0596,+045.00,+00.00,01.00,000.00,1.00 +0597,+045.00,+00.00,01.00,000.00,1.00 +0598,+045.00,+00.00,01.00,000.00,1.00 +0599,+045.00,+00.00,01.00,000.00,1.00 +0600,+045.00,+00.00,01.00,000.00,1.00 +0601,+045.00,+00.00,01.00,000.00,1.00 +0602,+045.00,+00.00,01.00,000.00,1.00 +0603,+045.00,+00.00,01.00,000.00,1.00 +0604,+045.00,+00.00,01.00,000.00,1.00 +0605,+045.00,+00.00,01.00,000.00,1.00 +0606,+045.00,+00.00,01.00,000.00,1.00 +0607,+045.00,+00.00,01.00,000.00,1.00 +0608,+045.00,+00.00,01.00,000.00,1.00 +0609,+045.00,+00.00,01.00,000.00,1.00 +0610,+045.00,+00.00,01.00,000.00,1.00 +0611,+045.00,+00.00,01.00,000.00,1.00 +0612,+045.00,+00.00,01.00,000.00,1.00 +0613,+045.00,+00.00,01.00,000.00,1.00 +0614,+045.00,+00.00,01.00,000.00,1.00 +0615,+045.00,+00.00,01.00,000.00,1.00 +0616,+045.00,+00.00,01.00,000.00,1.00 +0617,+045.00,+00.00,01.00,000.00,1.00 +0618,+045.00,+00.00,01.00,000.00,1.00 +0619,+045.00,+00.00,01.00,000.00,1.00 +0620,+045.00,+00.00,01.00,000.00,1.00 +0621,+045.00,+00.00,01.00,000.00,1.00 +0622,+045.00,+00.00,01.00,000.00,1.00 +0623,+045.00,+00.00,01.00,000.00,1.00 +0624,+045.00,+00.00,01.00,000.00,1.00 +0625,+045.00,+00.00,01.00,000.00,1.00 +0626,+045.00,+00.00,01.00,000.00,1.00 +0627,+045.00,+00.00,01.00,000.00,1.00 +0628,+045.00,+00.00,01.00,000.00,1.00 +0629,+045.00,+00.00,01.00,000.00,1.00 +0630,+045.00,+00.00,01.00,000.00,1.00 +0631,+045.00,+00.00,01.00,000.00,1.00 +0632,+045.00,+00.00,01.00,000.00,1.00 +0633,+045.00,+00.00,01.00,000.00,1.00 +0634,+045.00,+00.00,01.00,000.00,1.00 +0635,+045.00,+00.00,01.00,000.00,1.00 +0636,+045.00,+00.00,01.00,000.00,1.00 +0637,+045.00,+00.00,01.00,000.00,1.00 +0638,+045.00,+00.00,01.00,000.00,1.00 +0639,+045.00,+00.00,01.00,000.00,1.00 +0640,+045.00,+00.00,01.00,000.00,1.00 +0641,+045.00,+00.00,01.00,000.00,1.00 +0642,+045.00,+00.00,01.00,000.00,1.00 +0643,+045.00,+00.00,01.00,000.00,1.00 +0644,+045.00,+00.00,01.00,000.00,1.00 +0645,+045.00,+00.00,01.00,000.00,1.00 +0646,+045.00,+00.00,01.00,000.00,1.00 +0647,+045.00,+00.00,01.00,000.00,1.00 +0648,+045.00,+00.00,01.00,000.00,1.00 +0649,+045.00,+00.00,01.00,000.00,1.00 +0650,+045.00,+00.00,01.00,000.00,1.00 +0651,+045.00,+00.00,01.00,000.00,1.00 +0652,+045.00,+00.00,01.00,000.00,1.00 +0653,+045.00,+00.00,01.00,000.00,1.00 +0654,+045.00,+00.00,01.00,000.00,1.00 +0655,+045.00,+00.00,01.00,000.00,1.00 +0656,+045.00,+00.00,01.00,000.00,1.00 +0657,+045.00,+00.00,01.00,000.00,1.00 +0658,+045.00,+00.00,01.00,000.00,1.00 +0659,+045.00,+00.00,01.00,000.00,1.00 +0660,+045.00,+00.00,01.00,000.00,1.00 +0661,+045.00,+00.00,01.00,000.00,1.00 +0662,+045.00,+00.00,01.00,000.00,1.00 +0663,+045.00,+00.00,01.00,000.00,1.00 +0664,+045.00,+00.00,01.00,000.00,1.00 +0665,+045.00,+00.00,01.00,000.00,1.00 +0666,+045.00,+00.00,01.00,000.00,1.00 +0667,+045.00,+00.00,01.00,000.00,1.00 +0668,+045.00,+00.00,01.00,000.00,1.00 +0669,+045.00,+00.00,01.00,000.00,1.00 +0670,+045.00,+00.00,01.00,000.00,1.00 +0671,+045.00,+00.00,01.00,000.00,1.00 +0672,+045.00,+00.00,01.00,000.00,1.00 +0673,+045.00,+00.00,01.00,000.00,1.00 +0674,+045.00,+00.00,01.00,000.00,1.00 +0675,+045.00,+00.00,01.00,000.00,1.00 +0676,+045.00,+00.00,01.00,000.00,1.00 +0677,+045.00,+00.00,01.00,000.00,1.00 +0678,+045.00,+00.00,01.00,000.00,1.00 +0679,+045.00,+00.00,01.00,000.00,1.00 +0680,+045.00,+00.00,01.00,000.00,1.00 +0681,+045.00,+00.00,01.00,000.00,1.00 +0682,+045.00,+00.00,01.00,000.00,1.00 +0683,+045.00,+00.00,01.00,000.00,1.00 +0684,+045.00,+00.00,01.00,000.00,1.00 +0685,+045.00,+00.00,01.00,000.00,1.00 +0686,+045.00,+00.00,01.00,000.00,1.00 +0687,+045.00,+00.00,01.00,000.00,1.00 +0688,+045.00,+00.00,01.00,000.00,1.00 +0689,+045.00,+00.00,01.00,000.00,1.00 +0690,+045.00,+00.00,01.00,000.00,1.00 +0691,+045.00,+00.00,01.00,000.00,1.00 +0692,+045.00,+00.00,01.00,000.00,1.00 +0693,+045.00,+00.00,01.00,000.00,1.00 +0694,+045.00,+00.00,01.00,000.00,1.00 +0695,+045.00,+00.00,01.00,000.00,1.00 +0696,+045.00,+00.00,01.00,000.00,1.00 +0697,+045.00,+00.00,01.00,000.00,1.00 +0698,+045.00,+00.00,01.00,000.00,1.00 +0699,+045.00,+00.00,01.00,000.00,1.00 +0700,+045.00,+00.00,01.00,000.00,1.00 +0701,+045.00,+00.00,01.00,000.00,1.00 +0702,+045.00,+00.00,01.00,000.00,1.00 +0703,+045.00,+00.00,01.00,000.00,1.00 +0704,+045.00,+00.00,01.00,000.00,1.00 +0705,+045.00,+00.00,01.00,000.00,1.00 +0706,+045.00,+00.00,01.00,000.00,1.00 +0707,+045.00,+00.00,01.00,000.00,1.00 +0708,+045.00,+00.00,01.00,000.00,1.00 +0709,+045.00,+00.00,01.00,000.00,1.00 +0710,+045.00,+00.00,01.00,000.00,1.00 +0711,+045.00,+00.00,01.00,000.00,1.00 +0712,+045.00,+00.00,01.00,000.00,1.00 +0713,+045.00,+00.00,01.00,000.00,1.00 +0714,+045.00,+00.00,01.00,000.00,1.00 +0715,+045.00,+00.00,01.00,000.00,1.00 +0716,+045.00,+00.00,01.00,000.00,1.00 +0717,+045.00,+00.00,01.00,000.00,1.00 +0718,+045.00,+00.00,01.00,000.00,1.00 +0719,+045.00,+00.00,01.00,000.00,1.00 +0720,+045.00,+00.00,01.00,000.00,1.00 +0721,+045.00,+00.00,01.00,000.00,1.00 +0722,+045.00,+00.00,01.00,000.00,1.00 +0723,+045.00,+00.00,01.00,000.00,1.00 +0724,+045.00,+00.00,01.00,000.00,1.00 +0725,+045.00,+00.00,01.00,000.00,1.00 +0726,+045.00,+00.00,01.00,000.00,1.00 +0727,+045.00,+00.00,01.00,000.00,1.00 +0728,+045.00,+00.00,01.00,000.00,1.00 +0729,+045.00,+00.00,01.00,000.00,1.00 +0730,+045.00,+00.00,01.00,000.00,1.00 +0731,+045.00,+00.00,01.00,000.00,1.00 +0732,+045.00,+00.00,01.00,000.00,1.00 +0733,+045.00,+00.00,01.00,000.00,1.00 +0734,+045.00,+00.00,01.00,000.00,1.00 +0735,+045.00,+00.00,01.00,000.00,1.00 +0736,+045.00,+00.00,01.00,000.00,1.00 +0737,+045.00,+00.00,01.00,000.00,1.00 +0738,+045.00,+00.00,01.00,000.00,1.00 +0739,+045.00,+00.00,01.00,000.00,1.00 +0740,+045.00,+00.00,01.00,000.00,1.00 +0741,+045.00,+00.00,01.00,000.00,1.00 +0742,+045.00,+00.00,01.00,000.00,1.00 +0743,+045.00,+00.00,01.00,000.00,1.00 +0744,+045.00,+00.00,01.00,000.00,1.00 +0745,+045.00,+00.00,01.00,000.00,1.00 +0746,+045.00,+00.00,01.00,000.00,1.00 +0747,+045.00,+00.00,01.00,000.00,1.00 +0748,+045.00,+00.00,01.00,000.00,1.00 +0749,+045.00,+00.00,01.00,000.00,1.00 +0750,+045.00,+00.00,01.00,000.00,1.00 +0751,+045.00,+00.00,01.00,000.00,1.00 +0752,+045.00,+00.00,01.00,000.00,1.00 +0753,+045.00,+00.00,01.00,000.00,1.00 +0754,+045.00,+00.00,01.00,000.00,1.00 +0755,+045.00,+00.00,01.00,000.00,1.00 +0756,+045.00,+00.00,01.00,000.00,1.00 +0757,+045.00,+00.00,01.00,000.00,1.00 +0758,+045.00,+00.00,01.00,000.00,1.00 +0759,+045.00,+00.00,01.00,000.00,1.00 +0760,+045.00,+00.00,01.00,000.00,1.00 +0761,+045.00,+00.00,01.00,000.00,1.00 +0762,+045.00,+00.00,01.00,000.00,1.00 +0763,+045.00,+00.00,01.00,000.00,1.00 +0764,+045.00,+00.00,01.00,000.00,1.00 +0765,+045.00,+00.00,01.00,000.00,1.00 +0766,+045.00,+00.00,01.00,000.00,1.00 +0767,+045.00,+00.00,01.00,000.00,1.00 +0768,+045.00,+00.00,01.00,000.00,1.00 +0769,+045.00,+00.00,01.00,000.00,1.00 +0770,+045.00,+00.00,01.00,000.00,1.00 +0771,+045.00,+00.00,01.00,000.00,1.00 +0772,+045.00,+00.00,01.00,000.00,1.00 +0773,+045.00,+00.00,01.00,000.00,1.00 +0774,+045.00,+00.00,01.00,000.00,1.00 +0775,+045.00,+00.00,01.00,000.00,1.00 +0776,+045.00,+00.00,01.00,000.00,1.00 +0777,+045.00,+00.00,01.00,000.00,1.00 +0778,+045.00,+00.00,01.00,000.00,1.00 +0779,+045.00,+00.00,01.00,000.00,1.00 +0780,+045.00,+00.00,01.00,000.00,1.00 +0781,+045.00,+00.00,01.00,000.00,1.00 +0782,+045.00,+00.00,01.00,000.00,1.00 +0783,+045.00,+00.00,01.00,000.00,1.00 +0784,+045.00,+00.00,01.00,000.00,1.00 +0785,+045.00,+00.00,01.00,000.00,1.00 +0786,+045.00,+00.00,01.00,000.00,1.00 +0787,+045.00,+00.00,01.00,000.00,1.00 +0788,+045.00,+00.00,01.00,000.00,1.00 +0789,+045.00,+00.00,01.00,000.00,1.00 +0790,+045.00,+00.00,01.00,000.00,1.00 +0791,+045.00,+00.00,01.00,000.00,1.00 +0792,+045.00,+00.00,01.00,000.00,1.00 +0793,+045.00,+00.00,01.00,000.00,1.00 +0794,+045.00,+00.00,01.00,000.00,1.00 +0795,+045.00,+00.00,01.00,000.00,1.00 +0796,+045.00,+00.00,01.00,000.00,1.00 +0797,+045.00,+00.00,01.00,000.00,1.00 +0798,+045.00,+00.00,01.00,000.00,1.00 +0799,+045.00,+00.00,01.00,000.00,1.00 +0800,+045.00,+00.00,01.00,000.00,1.00 +0801,+045.00,+00.00,01.00,000.00,1.00 +0802,+045.00,+00.00,01.00,000.00,1.00 +0803,+045.00,+00.00,01.00,000.00,1.00 +0804,+045.00,+00.00,01.00,000.00,1.00 +0805,+045.00,+00.00,01.00,000.00,1.00 +0806,+045.00,+00.00,01.00,000.00,1.00 +0807,+045.00,+00.00,01.00,000.00,1.00 +0808,+045.00,+00.00,01.00,000.00,1.00 +0809,+045.00,+00.00,01.00,000.00,1.00 +0810,+045.00,+00.00,01.00,000.00,1.00 +0811,+045.00,+00.00,01.00,000.00,1.00 +0812,+045.00,+00.00,01.00,000.00,1.00 +0813,+045.00,+00.00,01.00,000.00,1.00 +0814,+045.00,+00.00,01.00,000.00,1.00 +0815,+045.00,+00.00,01.00,000.00,1.00 +0816,+045.00,+00.00,01.00,000.00,1.00 +0817,+045.00,+00.00,01.00,000.00,1.00 +0818,+045.00,+00.00,01.00,000.00,1.00 +0819,+045.00,+00.00,01.00,000.00,1.00 +0820,+045.00,+00.00,01.00,000.00,1.00 +0821,+045.00,+00.00,01.00,000.00,1.00 +0822,+045.00,+00.00,01.00,000.00,1.00 +0823,+045.00,+00.00,01.00,000.00,1.00 +0824,+045.00,+00.00,01.00,000.00,1.00 +0825,+045.00,+00.00,01.00,000.00,1.00 +0826,+045.00,+00.00,01.00,000.00,1.00 +0827,+045.00,+00.00,01.00,000.00,1.00 +0828,+045.00,+00.00,01.00,000.00,1.00 +0829,+045.00,+00.00,01.00,000.00,1.00 +0830,+045.00,+00.00,01.00,000.00,1.00 +0831,+045.00,+00.00,01.00,000.00,1.00 +0832,+045.00,+00.00,01.00,000.00,1.00 +0833,+045.00,+00.00,01.00,000.00,1.00 +0834,+045.00,+00.00,01.00,000.00,1.00 +0835,+045.00,+00.00,01.00,000.00,1.00 +0836,+045.00,+00.00,01.00,000.00,1.00 +0837,+045.00,+00.00,01.00,000.00,1.00 +0838,+045.00,+00.00,01.00,000.00,1.00 +0839,+045.00,+00.00,01.00,000.00,1.00 +0840,+045.00,+00.00,01.00,000.00,1.00 +0841,+045.00,+00.00,01.00,000.00,1.00 +0842,+045.00,+00.00,01.00,000.00,1.00 +0843,+045.00,+00.00,01.00,000.00,1.00 +0844,+045.00,+00.00,01.00,000.00,1.00 +0845,+045.00,+00.00,01.00,000.00,1.00 +0846,+045.00,+00.00,01.00,000.00,1.00 +0847,+045.00,+00.00,01.00,000.00,1.00 +0848,+045.00,+00.00,01.00,000.00,1.00 +0849,+045.00,+00.00,01.00,000.00,1.00 +0850,+045.00,+00.00,01.00,000.00,1.00 +0851,+045.00,+00.00,01.00,000.00,1.00 +0852,+045.00,+00.00,01.00,000.00,1.00 +0853,+045.00,+00.00,01.00,000.00,1.00 +0854,+045.00,+00.00,01.00,000.00,1.00 +0855,+045.00,+00.00,01.00,000.00,1.00 +0856,+045.00,+00.00,01.00,000.00,1.00 +0857,+045.00,+00.00,01.00,000.00,1.00 +0858,+045.00,+00.00,01.00,000.00,1.00 +0859,+045.00,+00.00,01.00,000.00,1.00 +0860,+045.00,+00.00,01.00,000.00,1.00 +0861,+045.00,+00.00,01.00,000.00,1.00 +0862,+045.00,+00.00,01.00,000.00,1.00 +0863,+045.00,+00.00,01.00,000.00,1.00 +0864,+045.00,+00.00,01.00,000.00,1.00 +0865,+045.00,+00.00,01.00,000.00,1.00 +0866,+045.00,+00.00,01.00,000.00,1.00 +0867,+045.00,+00.00,01.00,000.00,1.00 +0868,+045.00,+00.00,01.00,000.00,1.00 +0869,+045.00,+00.00,01.00,000.00,1.00 +0870,+045.00,+00.00,01.00,000.00,1.00 +0871,+045.00,+00.00,01.00,000.00,1.00 +0872,+045.00,+00.00,01.00,000.00,1.00 +0873,+045.00,+00.00,01.00,000.00,1.00 +0874,+045.00,+00.00,01.00,000.00,1.00 +0875,+045.00,+00.00,01.00,000.00,1.00 +0876,+045.00,+00.00,01.00,000.00,1.00 +0877,+045.00,+00.00,01.00,000.00,1.00 +0878,+045.00,+00.00,01.00,000.00,1.00 +0879,+045.00,+00.00,01.00,000.00,1.00 +0880,+045.00,+00.00,01.00,000.00,1.00 +0881,+045.00,+00.00,01.00,000.00,1.00 +0882,+045.00,+00.00,01.00,000.00,1.00 +0883,+045.00,+00.00,01.00,000.00,1.00 +0884,+045.00,+00.00,01.00,000.00,1.00 +0885,+045.00,+00.00,01.00,000.00,1.00 +0886,+045.00,+00.00,01.00,000.00,1.00 +0887,+045.00,+00.00,01.00,000.00,1.00 +0888,+045.00,+00.00,01.00,000.00,1.00 +0889,+045.00,+00.00,01.00,000.00,1.00 +0890,+045.00,+00.00,01.00,000.00,1.00 +0891,+045.00,+00.00,01.00,000.00,1.00 +0892,+045.00,+00.00,01.00,000.00,1.00 +0893,+045.00,+00.00,01.00,000.00,1.00 +0894,+045.00,+00.00,01.00,000.00,1.00 +0895,+045.00,+00.00,01.00,000.00,1.00 +0896,+045.00,+00.00,01.00,000.00,1.00 +0897,+045.00,+00.00,01.00,000.00,1.00 +0898,+045.00,+00.00,01.00,000.00,1.00 +0899,+045.00,+00.00,01.00,000.00,1.00 +0900,+045.00,+00.00,01.00,000.00,1.00 +0901,+045.00,+00.00,01.00,000.00,1.00 +0902,+045.00,+00.00,01.00,000.00,1.00 +0903,+045.00,+00.00,01.00,000.00,1.00 +0904,+045.00,+00.00,01.00,000.00,1.00 +0905,+045.00,+00.00,01.00,000.00,1.00 +0906,+045.00,+00.00,01.00,000.00,1.00 +0907,+045.00,+00.00,01.00,000.00,1.00 +0908,+045.00,+00.00,01.00,000.00,1.00 +0909,+045.00,+00.00,01.00,000.00,1.00 +0910,+045.00,+00.00,01.00,000.00,1.00 +0911,+045.00,+00.00,01.00,000.00,1.00 +0912,+045.00,+00.00,01.00,000.00,1.00 +0913,+045.00,+00.00,01.00,000.00,1.00 +0914,+045.00,+00.00,01.00,000.00,1.00 +0915,+045.00,+00.00,01.00,000.00,1.00 +0916,+045.00,+00.00,01.00,000.00,1.00 +0917,+045.00,+00.00,01.00,000.00,1.00 +0918,+045.00,+00.00,01.00,000.00,1.00 +0919,+045.00,+00.00,01.00,000.00,1.00 +0920,+045.00,+00.00,01.00,000.00,1.00 +0921,+045.00,+00.00,01.00,000.00,1.00 +0922,+045.00,+00.00,01.00,000.00,1.00 +0923,+045.00,+00.00,01.00,000.00,1.00 +0924,+045.00,+00.00,01.00,000.00,1.00 +0925,+045.00,+00.00,01.00,000.00,1.00 +0926,+045.00,+00.00,01.00,000.00,1.00 +0927,+045.00,+00.00,01.00,000.00,1.00 +0928,+045.00,+00.00,01.00,000.00,1.00 +0929,+045.00,+00.00,01.00,000.00,1.00 +0930,+045.00,+00.00,01.00,000.00,1.00 +0931,+045.00,+00.00,01.00,000.00,1.00 +0932,+045.00,+00.00,01.00,000.00,1.00 +0933,+045.00,+00.00,01.00,000.00,1.00 +0934,+045.00,+00.00,01.00,000.00,1.00 +0935,+045.00,+00.00,01.00,000.00,1.00 +0936,+045.00,+00.00,01.00,000.00,1.00 +0937,+045.00,+00.00,01.00,000.00,1.00 +0938,+045.00,+00.00,01.00,000.00,1.00 +0939,+045.00,+00.00,01.00,000.00,1.00 +0940,+045.00,+00.00,01.00,000.00,1.00 +0941,+045.00,+00.00,01.00,000.00,1.00 +0942,+045.00,+00.00,01.00,000.00,1.00 +0943,+045.00,+00.00,01.00,000.00,1.00 +0944,+045.00,+00.00,01.00,000.00,1.00 +0945,+045.00,+00.00,01.00,000.00,1.00 +0946,+045.00,+00.00,01.00,000.00,1.00 +0947,+045.00,+00.00,01.00,000.00,1.00 +0948,+045.00,+00.00,01.00,000.00,1.00 +0949,+045.00,+00.00,01.00,000.00,1.00 +0950,+045.00,+00.00,01.00,000.00,1.00 +0951,+045.00,+00.00,01.00,000.00,1.00 +0952,+045.00,+00.00,01.00,000.00,1.00 +0953,+045.00,+00.00,01.00,000.00,1.00 +0954,+045.00,+00.00,01.00,000.00,1.00 +0955,+045.00,+00.00,01.00,000.00,1.00 +0956,+045.00,+00.00,01.00,000.00,1.00 +0957,+045.00,+00.00,01.00,000.00,1.00 +0958,+045.00,+00.00,01.00,000.00,1.00 +0959,+045.00,+00.00,01.00,000.00,1.00 +0960,+045.00,+00.00,01.00,000.00,1.00 +0961,+045.00,+00.00,01.00,000.00,1.00 +0962,+045.00,+00.00,01.00,000.00,1.00 +0963,+045.00,+00.00,01.00,000.00,1.00 +0964,+045.00,+00.00,01.00,000.00,1.00 +0965,+045.00,+00.00,01.00,000.00,1.00 +0966,+045.00,+00.00,01.00,000.00,1.00 +0967,+045.00,+00.00,01.00,000.00,1.00 +0968,+045.00,+00.00,01.00,000.00,1.00 +0969,+045.00,+00.00,01.00,000.00,1.00 +0970,+045.00,+00.00,01.00,000.00,1.00 +0971,+045.00,+00.00,01.00,000.00,1.00 +0972,+045.00,+00.00,01.00,000.00,1.00 +0973,+045.00,+00.00,01.00,000.00,1.00 +0974,+045.00,+00.00,01.00,000.00,1.00 +0975,+045.00,+00.00,01.00,000.00,1.00 +0976,+045.00,+00.00,01.00,000.00,1.00 +0977,+045.00,+00.00,01.00,000.00,1.00 +0978,+045.00,+00.00,01.00,000.00,1.00 +0979,+045.00,+00.00,01.00,000.00,1.00 +0980,+045.00,+00.00,01.00,000.00,1.00 +0981,+045.00,+00.00,01.00,000.00,1.00 +0982,+045.00,+00.00,01.00,000.00,1.00 +0983,+045.00,+00.00,01.00,000.00,1.00 +0984,+045.00,+00.00,01.00,000.00,1.00 +0985,+045.00,+00.00,01.00,000.00,1.00 +0986,+045.00,+00.00,01.00,000.00,1.00 +0987,+045.00,+00.00,01.00,000.00,1.00 +0988,+045.00,+00.00,01.00,000.00,1.00 +0989,+045.00,+00.00,01.00,000.00,1.00 +0990,+045.00,+00.00,01.00,000.00,1.00 +0991,+045.00,+00.00,01.00,000.00,1.00 +0992,+045.00,+00.00,01.00,000.00,1.00 +0993,+045.00,+00.00,01.00,000.00,1.00 +0994,+045.00,+00.00,01.00,000.00,1.00 +0995,+045.00,+00.00,01.00,000.00,1.00 +0996,+045.00,+00.00,01.00,000.00,1.00 +0997,+045.00,+00.00,01.00,000.00,1.00 +0998,+045.00,+00.00,01.00,000.00,1.00 +0999,+045.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t04_ch1.csv b/scripts/td_object_renderer/metadata/csv/t04_ch1.csv new file mode 100644 index 0000000000..9868c987cb --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t04_ch1.csv @@ -0,0 +1,1000 @@ +0000,-030.00,+20.00,01.00,000.00,1.00 +0001,-030.00,+20.00,01.00,000.00,1.00 +0002,-030.00,+20.00,01.00,000.00,1.00 +0003,-030.00,+20.00,01.00,000.00,1.00 +0004,-030.00,+20.00,01.00,000.00,1.00 +0005,-030.00,+20.00,01.00,000.00,1.00 +0006,-030.00,+20.00,01.00,000.00,1.00 +0007,-030.00,+20.00,01.00,000.00,1.00 +0008,-030.00,+20.00,01.00,000.00,1.00 +0009,-030.00,+20.00,01.00,000.00,1.00 +0010,-030.00,+20.00,01.00,000.00,1.00 +0011,-030.00,+20.00,01.00,000.00,1.00 +0012,-030.00,+20.00,01.00,000.00,1.00 +0013,-030.00,+20.00,01.00,000.00,1.00 +0014,-030.00,+20.00,01.00,000.00,1.00 +0015,-030.00,+20.00,01.00,000.00,1.00 +0016,-030.00,+20.00,01.00,000.00,1.00 +0017,-030.00,+20.00,01.00,000.00,1.00 +0018,-030.00,+20.00,01.00,000.00,1.00 +0019,-030.00,+20.00,01.00,000.00,1.00 +0020,-030.00,+20.00,01.00,000.00,1.00 +0021,-030.00,+20.00,01.00,000.00,1.00 +0022,-030.00,+20.00,01.00,000.00,1.00 +0023,-030.00,+20.00,01.00,000.00,1.00 +0024,-030.00,+20.00,01.00,000.00,1.00 +0025,-030.00,+20.00,01.00,000.00,1.00 +0026,-030.00,+20.00,01.00,000.00,1.00 +0027,-030.00,+20.00,01.00,000.00,1.00 +0028,-030.00,+20.00,01.00,000.00,1.00 +0029,-030.00,+20.00,01.00,000.00,1.00 +0030,-030.00,+20.00,01.00,000.00,1.00 +0031,-030.00,+20.00,01.00,000.00,1.00 +0032,-030.00,+20.00,01.00,000.00,1.00 +0033,-030.00,+20.00,01.00,000.00,1.00 +0034,-030.00,+20.00,01.00,000.00,1.00 +0035,-030.00,+20.00,01.00,000.00,1.00 +0036,-030.00,+20.00,01.00,000.00,1.00 +0037,-030.00,+20.00,01.00,000.00,1.00 +0038,-030.00,+20.00,01.00,000.00,1.00 +0039,-030.00,+20.00,01.00,000.00,1.00 +0040,-030.00,+20.00,01.00,000.00,1.00 +0041,-030.00,+20.00,01.00,000.00,1.00 +0042,-030.00,+20.00,01.00,000.00,1.00 +0043,-030.00,+20.00,01.00,000.00,1.00 +0044,-030.00,+20.00,01.00,000.00,1.00 +0045,-030.00,+20.00,01.00,000.00,1.00 +0046,-030.00,+20.00,01.00,000.00,1.00 +0047,-030.00,+20.00,01.00,000.00,1.00 +0048,-030.00,+20.00,01.00,000.00,1.00 +0049,-030.00,+20.00,01.00,000.00,1.00 +0050,-030.00,+20.00,01.00,000.00,1.00 +0051,-030.00,+20.00,01.00,000.00,1.00 +0052,-030.00,+20.00,01.00,000.00,1.00 +0053,-030.00,+20.00,01.00,000.00,1.00 +0054,-030.00,+20.00,01.00,000.00,1.00 +0055,-030.00,+20.00,01.00,000.00,1.00 +0056,-030.00,+20.00,01.00,000.00,1.00 +0057,-030.00,+20.00,01.00,000.00,1.00 +0058,-030.00,+20.00,01.00,000.00,1.00 +0059,-030.00,+20.00,01.00,000.00,1.00 +0060,-030.00,+20.00,01.00,000.00,1.00 +0061,-030.00,+20.00,01.00,000.00,1.00 +0062,-030.00,+20.00,01.00,000.00,1.00 +0063,-030.00,+20.00,01.00,000.00,1.00 +0064,-030.00,+20.00,01.00,000.00,1.00 +0065,-030.00,+20.00,01.00,000.00,1.00 +0066,-030.00,+20.00,01.00,000.00,1.00 +0067,-030.00,+20.00,01.00,000.00,1.00 +0068,-030.00,+20.00,01.00,000.00,1.00 +0069,-030.00,+20.00,01.00,000.00,1.00 +0070,-030.00,+20.00,01.00,000.00,1.00 +0071,-030.00,+20.00,01.00,000.00,1.00 +0072,-030.00,+20.00,01.00,000.00,1.00 +0073,-030.00,+20.00,01.00,000.00,1.00 +0074,-030.00,+20.00,01.00,000.00,1.00 +0075,-030.00,+20.00,01.00,000.00,1.00 +0076,-030.00,+20.00,01.00,000.00,1.00 +0077,-030.00,+20.00,01.00,000.00,1.00 +0078,-030.00,+20.00,01.00,000.00,1.00 +0079,-030.00,+20.00,01.00,000.00,1.00 +0080,-030.00,+20.00,01.00,000.00,1.00 +0081,-030.00,+20.00,01.00,000.00,1.00 +0082,-030.00,+20.00,01.00,000.00,1.00 +0083,-030.00,+20.00,01.00,000.00,1.00 +0084,-030.00,+20.00,01.00,000.00,1.00 +0085,-030.00,+20.00,01.00,000.00,1.00 +0086,-030.00,+20.00,01.00,000.00,1.00 +0087,-030.00,+20.00,01.00,000.00,1.00 +0088,-030.00,+20.00,01.00,000.00,1.00 +0089,-030.00,+20.00,01.00,000.00,1.00 +0090,-030.00,+20.00,01.00,000.00,1.00 +0091,-030.00,+20.00,01.00,000.00,1.00 +0092,-030.00,+20.00,01.00,000.00,1.00 +0093,-030.00,+20.00,01.00,000.00,1.00 +0094,-030.00,+20.00,01.00,000.00,1.00 +0095,-030.00,+20.00,01.00,000.00,1.00 +0096,-030.00,+20.00,01.00,000.00,1.00 +0097,-030.00,+20.00,01.00,000.00,1.00 +0098,-030.00,+20.00,01.00,000.00,1.00 +0099,-030.00,+20.00,01.00,000.00,1.00 +0100,-030.00,+20.00,01.00,000.00,1.00 +0101,-030.00,+20.00,01.00,000.00,1.00 +0102,-030.00,+20.00,01.00,000.00,1.00 +0103,-030.00,+20.00,01.00,000.00,1.00 +0104,-030.00,+20.00,01.00,000.00,1.00 +0105,-030.00,+20.00,01.00,000.00,1.00 +0106,-030.00,+20.00,01.00,000.00,1.00 +0107,-030.00,+20.00,01.00,000.00,1.00 +0108,-030.00,+20.00,01.00,000.00,1.00 +0109,-030.00,+20.00,01.00,000.00,1.00 +0110,-030.00,+20.00,01.00,000.00,1.00 +0111,-030.00,+20.00,01.00,000.00,1.00 +0112,-030.00,+20.00,01.00,000.00,1.00 +0113,-030.00,+20.00,01.00,000.00,1.00 +0114,-030.00,+20.00,01.00,000.00,1.00 +0115,-030.00,+20.00,01.00,000.00,1.00 +0116,-030.00,+20.00,01.00,000.00,1.00 +0117,-030.00,+20.00,01.00,000.00,1.00 +0118,-030.00,+20.00,01.00,000.00,1.00 +0119,-030.00,+20.00,01.00,000.00,1.00 +0120,-030.00,+20.00,01.00,000.00,1.00 +0121,-030.00,+20.00,01.00,000.00,1.00 +0122,-030.00,+20.00,01.00,000.00,1.00 +0123,-030.00,+20.00,01.00,000.00,1.00 +0124,-030.00,+20.00,01.00,000.00,1.00 +0125,-030.00,+20.00,01.00,000.00,1.00 +0126,-030.00,+20.00,01.00,000.00,1.00 +0127,-030.00,+20.00,01.00,000.00,1.00 +0128,-030.00,+20.00,01.00,000.00,1.00 +0129,-030.00,+20.00,01.00,000.00,1.00 +0130,-030.00,+20.00,01.00,000.00,1.00 +0131,-030.00,+20.00,01.00,000.00,1.00 +0132,-030.00,+20.00,01.00,000.00,1.00 +0133,-030.00,+20.00,01.00,000.00,1.00 +0134,-030.00,+20.00,01.00,000.00,1.00 +0135,-030.00,+20.00,01.00,000.00,1.00 +0136,-030.00,+20.00,01.00,000.00,1.00 +0137,-030.00,+20.00,01.00,000.00,1.00 +0138,-030.00,+20.00,01.00,000.00,1.00 +0139,-030.00,+20.00,01.00,000.00,1.00 +0140,-030.00,+20.00,01.00,000.00,1.00 +0141,-030.00,+20.00,01.00,000.00,1.00 +0142,-030.00,+20.00,01.00,000.00,1.00 +0143,-030.00,+20.00,01.00,000.00,1.00 +0144,-030.00,+20.00,01.00,000.00,1.00 +0145,-030.00,+20.00,01.00,000.00,1.00 +0146,-030.00,+20.00,01.00,000.00,1.00 +0147,-030.00,+20.00,01.00,000.00,1.00 +0148,-030.00,+20.00,01.00,000.00,1.00 +0149,-030.00,+20.00,01.00,000.00,1.00 +0150,-030.00,+20.00,01.00,000.00,1.00 +0151,-030.00,+20.00,01.00,000.00,1.00 +0152,-030.00,+20.00,01.00,000.00,1.00 +0153,-030.00,+20.00,01.00,000.00,1.00 +0154,-030.00,+20.00,01.00,000.00,1.00 +0155,-030.00,+20.00,01.00,000.00,1.00 +0156,-030.00,+20.00,01.00,000.00,1.00 +0157,-030.00,+20.00,01.00,000.00,1.00 +0158,-030.00,+20.00,01.00,000.00,1.00 +0159,-030.00,+20.00,01.00,000.00,1.00 +0160,-030.00,+20.00,01.00,000.00,1.00 +0161,-030.00,+20.00,01.00,000.00,1.00 +0162,-030.00,+20.00,01.00,000.00,1.00 +0163,-030.00,+20.00,01.00,000.00,1.00 +0164,-030.00,+20.00,01.00,000.00,1.00 +0165,-030.00,+20.00,01.00,000.00,1.00 +0166,-030.00,+20.00,01.00,000.00,1.00 +0167,-030.00,+20.00,01.00,000.00,1.00 +0168,-030.00,+20.00,01.00,000.00,1.00 +0169,-030.00,+20.00,01.00,000.00,1.00 +0170,-030.00,+20.00,01.00,000.00,1.00 +0171,-030.00,+20.00,01.00,000.00,1.00 +0172,-030.00,+20.00,01.00,000.00,1.00 +0173,-030.00,+20.00,01.00,000.00,1.00 +0174,-030.00,+20.00,01.00,000.00,1.00 +0175,-030.00,+20.00,01.00,000.00,1.00 +0176,-030.00,+20.00,01.00,000.00,1.00 +0177,-030.00,+20.00,01.00,000.00,1.00 +0178,-030.00,+20.00,01.00,000.00,1.00 +0179,-030.00,+20.00,01.00,000.00,1.00 +0180,-030.00,+20.00,01.00,000.00,1.00 +0181,-030.00,+20.00,01.00,000.00,1.00 +0182,-030.00,+20.00,01.00,000.00,1.00 +0183,-030.00,+20.00,01.00,000.00,1.00 +0184,-030.00,+20.00,01.00,000.00,1.00 +0185,-030.00,+20.00,01.00,000.00,1.00 +0186,-030.00,+20.00,01.00,000.00,1.00 +0187,-030.00,+20.00,01.00,000.00,1.00 +0188,-030.00,+20.00,01.00,000.00,1.00 +0189,-030.00,+20.00,01.00,000.00,1.00 +0190,-030.00,+20.00,01.00,000.00,1.00 +0191,-030.00,+20.00,01.00,000.00,1.00 +0192,-030.00,+20.00,01.00,000.00,1.00 +0193,-030.00,+20.00,01.00,000.00,1.00 +0194,-030.00,+20.00,01.00,000.00,1.00 +0195,-030.00,+20.00,01.00,000.00,1.00 +0196,-030.00,+20.00,01.00,000.00,1.00 +0197,-030.00,+20.00,01.00,000.00,1.00 +0198,-030.00,+20.00,01.00,000.00,1.00 +0199,-030.00,+20.00,01.00,000.00,1.00 +0200,-030.00,+20.00,01.00,000.00,1.00 +0201,-030.00,+20.00,01.00,000.00,1.00 +0202,-030.00,+20.00,01.00,000.00,1.00 +0203,-030.00,+20.00,01.00,000.00,1.00 +0204,-030.00,+20.00,01.00,000.00,1.00 +0205,-030.00,+20.00,01.00,000.00,1.00 +0206,-030.00,+20.00,01.00,000.00,1.00 +0207,-030.00,+20.00,01.00,000.00,1.00 +0208,-030.00,+20.00,01.00,000.00,1.00 +0209,-030.00,+20.00,01.00,000.00,1.00 +0210,-030.00,+20.00,01.00,000.00,1.00 +0211,-030.00,+20.00,01.00,000.00,1.00 +0212,-030.00,+20.00,01.00,000.00,1.00 +0213,-030.00,+20.00,01.00,000.00,1.00 +0214,-030.00,+20.00,01.00,000.00,1.00 +0215,-030.00,+20.00,01.00,000.00,1.00 +0216,-030.00,+20.00,01.00,000.00,1.00 +0217,-030.00,+20.00,01.00,000.00,1.00 +0218,-030.00,+20.00,01.00,000.00,1.00 +0219,-030.00,+20.00,01.00,000.00,1.00 +0220,-030.00,+20.00,01.00,000.00,1.00 +0221,-030.00,+20.00,01.00,000.00,1.00 +0222,-030.00,+20.00,01.00,000.00,1.00 +0223,-030.00,+20.00,01.00,000.00,1.00 +0224,-030.00,+20.00,01.00,000.00,1.00 +0225,-030.00,+20.00,01.00,000.00,1.00 +0226,-030.00,+20.00,01.00,000.00,1.00 +0227,-030.00,+20.00,01.00,000.00,1.00 +0228,-030.00,+20.00,01.00,000.00,1.00 +0229,-030.00,+20.00,01.00,000.00,1.00 +0230,-030.00,+20.00,01.00,000.00,1.00 +0231,-030.00,+20.00,01.00,000.00,1.00 +0232,-030.00,+20.00,01.00,000.00,1.00 +0233,-030.00,+20.00,01.00,000.00,1.00 +0234,-030.00,+20.00,01.00,000.00,1.00 +0235,-030.00,+20.00,01.00,000.00,1.00 +0236,-030.00,+20.00,01.00,000.00,1.00 +0237,-030.00,+20.00,01.00,000.00,1.00 +0238,-030.00,+20.00,01.00,000.00,1.00 +0239,-030.00,+20.00,01.00,000.00,1.00 +0240,-030.00,+20.00,01.00,000.00,1.00 +0241,-030.00,+20.00,01.00,000.00,1.00 +0242,-030.00,+20.00,01.00,000.00,1.00 +0243,-030.00,+20.00,01.00,000.00,1.00 +0244,-030.00,+20.00,01.00,000.00,1.00 +0245,-030.00,+20.00,01.00,000.00,1.00 +0246,-030.00,+20.00,01.00,000.00,1.00 +0247,-030.00,+20.00,01.00,000.00,1.00 +0248,-030.00,+20.00,01.00,000.00,1.00 +0249,-030.00,+20.00,01.00,000.00,1.00 +0250,-030.00,+20.00,01.00,000.00,1.00 +0251,-030.00,+20.00,01.00,000.00,1.00 +0252,-030.00,+20.00,01.00,000.00,1.00 +0253,-030.00,+20.00,01.00,000.00,1.00 +0254,-030.00,+20.00,01.00,000.00,1.00 +0255,-030.00,+20.00,01.00,000.00,1.00 +0256,-030.00,+20.00,01.00,000.00,1.00 +0257,-030.00,+20.00,01.00,000.00,1.00 +0258,-030.00,+20.00,01.00,000.00,1.00 +0259,-030.00,+20.00,01.00,000.00,1.00 +0260,-030.00,+20.00,01.00,000.00,1.00 +0261,-030.00,+20.00,01.00,000.00,1.00 +0262,-030.00,+20.00,01.00,000.00,1.00 +0263,-030.00,+20.00,01.00,000.00,1.00 +0264,-030.00,+20.00,01.00,000.00,1.00 +0265,-030.00,+20.00,01.00,000.00,1.00 +0266,-030.00,+20.00,01.00,000.00,1.00 +0267,-030.00,+20.00,01.00,000.00,1.00 +0268,-030.00,+20.00,01.00,000.00,1.00 +0269,-030.00,+20.00,01.00,000.00,1.00 +0270,-030.00,+20.00,01.00,000.00,1.00 +0271,-030.00,+20.00,01.00,000.00,1.00 +0272,-030.00,+20.00,01.00,000.00,1.00 +0273,-030.00,+20.00,01.00,000.00,1.00 +0274,-030.00,+20.00,01.00,000.00,1.00 +0275,-030.00,+20.00,01.00,000.00,1.00 +0276,-030.00,+20.00,01.00,000.00,1.00 +0277,-030.00,+20.00,01.00,000.00,1.00 +0278,-030.00,+20.00,01.00,000.00,1.00 +0279,-030.00,+20.00,01.00,000.00,1.00 +0280,-030.00,+20.00,01.00,000.00,1.00 +0281,-030.00,+20.00,01.00,000.00,1.00 +0282,-030.00,+20.00,01.00,000.00,1.00 +0283,-030.00,+20.00,01.00,000.00,1.00 +0284,-030.00,+20.00,01.00,000.00,1.00 +0285,-030.00,+20.00,01.00,000.00,1.00 +0286,-030.00,+20.00,01.00,000.00,1.00 +0287,-030.00,+20.00,01.00,000.00,1.00 +0288,-030.00,+20.00,01.00,000.00,1.00 +0289,-030.00,+20.00,01.00,000.00,1.00 +0290,-030.00,+20.00,01.00,000.00,1.00 +0291,-030.00,+20.00,01.00,000.00,1.00 +0292,-030.00,+20.00,01.00,000.00,1.00 +0293,-030.00,+20.00,01.00,000.00,1.00 +0294,-030.00,+20.00,01.00,000.00,1.00 +0295,-030.00,+20.00,01.00,000.00,1.00 +0296,-030.00,+20.00,01.00,000.00,1.00 +0297,-030.00,+20.00,01.00,000.00,1.00 +0298,-030.00,+20.00,01.00,000.00,1.00 +0299,-030.00,+20.00,01.00,000.00,1.00 +0300,-030.00,+20.00,01.00,000.00,1.00 +0301,-030.00,+20.00,01.00,000.00,1.00 +0302,-030.00,+20.00,01.00,000.00,1.00 +0303,-030.00,+20.00,01.00,000.00,1.00 +0304,-030.00,+20.00,01.00,000.00,1.00 +0305,-030.00,+20.00,01.00,000.00,1.00 +0306,-030.00,+20.00,01.00,000.00,1.00 +0307,-030.00,+20.00,01.00,000.00,1.00 +0308,-030.00,+20.00,01.00,000.00,1.00 +0309,-030.00,+20.00,01.00,000.00,1.00 +0310,-030.00,+20.00,01.00,000.00,1.00 +0311,-030.00,+20.00,01.00,000.00,1.00 +0312,-030.00,+20.00,01.00,000.00,1.00 +0313,-030.00,+20.00,01.00,000.00,1.00 +0314,-030.00,+20.00,01.00,000.00,1.00 +0315,-030.00,+20.00,01.00,000.00,1.00 +0316,-030.00,+20.00,01.00,000.00,1.00 +0317,-030.00,+20.00,01.00,000.00,1.00 +0318,-030.00,+20.00,01.00,000.00,1.00 +0319,-030.00,+20.00,01.00,000.00,1.00 +0320,-030.00,+20.00,01.00,000.00,1.00 +0321,-030.00,+20.00,01.00,000.00,1.00 +0322,-030.00,+20.00,01.00,000.00,1.00 +0323,-030.00,+20.00,01.00,000.00,1.00 +0324,-030.00,+20.00,01.00,000.00,1.00 +0325,-030.00,+20.00,01.00,000.00,1.00 +0326,-030.00,+20.00,01.00,000.00,1.00 +0327,-030.00,+20.00,01.00,000.00,1.00 +0328,-030.00,+20.00,01.00,000.00,1.00 +0329,-030.00,+20.00,01.00,000.00,1.00 +0330,-030.00,+20.00,01.00,000.00,1.00 +0331,-030.00,+20.00,01.00,000.00,1.00 +0332,-030.00,+20.00,01.00,000.00,1.00 +0333,-030.00,+20.00,01.00,000.00,1.00 +0334,-030.00,+20.00,01.00,000.00,1.00 +0335,-030.00,+20.00,01.00,000.00,1.00 +0336,-030.00,+20.00,01.00,000.00,1.00 +0337,-030.00,+20.00,01.00,000.00,1.00 +0338,-030.00,+20.00,01.00,000.00,1.00 +0339,-030.00,+20.00,01.00,000.00,1.00 +0340,-030.00,+20.00,01.00,000.00,1.00 +0341,-030.00,+20.00,01.00,000.00,1.00 +0342,-030.00,+20.00,01.00,000.00,1.00 +0343,-030.00,+20.00,01.00,000.00,1.00 +0344,-030.00,+20.00,01.00,000.00,1.00 +0345,-030.00,+20.00,01.00,000.00,1.00 +0346,-030.00,+20.00,01.00,000.00,1.00 +0347,-030.00,+20.00,01.00,000.00,1.00 +0348,-030.00,+20.00,01.00,000.00,1.00 +0349,-030.00,+20.00,01.00,000.00,1.00 +0350,-030.00,+20.00,01.00,000.00,1.00 +0351,-030.00,+20.00,01.00,000.00,1.00 +0352,-030.00,+20.00,01.00,000.00,1.00 +0353,-030.00,+20.00,01.00,000.00,1.00 +0354,-030.00,+20.00,01.00,000.00,1.00 +0355,-030.00,+20.00,01.00,000.00,1.00 +0356,-030.00,+20.00,01.00,000.00,1.00 +0357,-030.00,+20.00,01.00,000.00,1.00 +0358,-030.00,+20.00,01.00,000.00,1.00 +0359,-030.00,+20.00,01.00,000.00,1.00 +0360,-030.00,+20.00,01.00,000.00,1.00 +0361,-030.00,+20.00,01.00,000.00,1.00 +0362,-030.00,+20.00,01.00,000.00,1.00 +0363,-030.00,+20.00,01.00,000.00,1.00 +0364,-030.00,+20.00,01.00,000.00,1.00 +0365,-030.00,+20.00,01.00,000.00,1.00 +0366,-030.00,+20.00,01.00,000.00,1.00 +0367,-030.00,+20.00,01.00,000.00,1.00 +0368,-030.00,+20.00,01.00,000.00,1.00 +0369,-030.00,+20.00,01.00,000.00,1.00 +0370,-030.00,+20.00,01.00,000.00,1.00 +0371,-030.00,+20.00,01.00,000.00,1.00 +0372,-030.00,+20.00,01.00,000.00,1.00 +0373,-030.00,+20.00,01.00,000.00,1.00 +0374,-030.00,+20.00,01.00,000.00,1.00 +0375,-030.00,+20.00,01.00,000.00,1.00 +0376,-030.00,+20.00,01.00,000.00,1.00 +0377,-030.00,+20.00,01.00,000.00,1.00 +0378,-030.00,+20.00,01.00,000.00,1.00 +0379,-030.00,+20.00,01.00,000.00,1.00 +0380,-030.00,+20.00,01.00,000.00,1.00 +0381,-030.00,+20.00,01.00,000.00,1.00 +0382,-030.00,+20.00,01.00,000.00,1.00 +0383,-030.00,+20.00,01.00,000.00,1.00 +0384,-030.00,+20.00,01.00,000.00,1.00 +0385,-030.00,+20.00,01.00,000.00,1.00 +0386,-030.00,+20.00,01.00,000.00,1.00 +0387,-030.00,+20.00,01.00,000.00,1.00 +0388,-030.00,+20.00,01.00,000.00,1.00 +0389,-030.00,+20.00,01.00,000.00,1.00 +0390,-030.00,+20.00,01.00,000.00,1.00 +0391,-030.00,+20.00,01.00,000.00,1.00 +0392,-030.00,+20.00,01.00,000.00,1.00 +0393,-030.00,+20.00,01.00,000.00,1.00 +0394,-030.00,+20.00,01.00,000.00,1.00 +0395,-030.00,+20.00,01.00,000.00,1.00 +0396,-030.00,+20.00,01.00,000.00,1.00 +0397,-030.00,+20.00,01.00,000.00,1.00 +0398,-030.00,+20.00,01.00,000.00,1.00 +0399,-030.00,+20.00,01.00,000.00,1.00 +0400,-030.00,+20.00,01.00,000.00,1.00 +0401,-030.00,+20.00,01.00,000.00,1.00 +0402,-030.00,+20.00,01.00,000.00,1.00 +0403,-030.00,+20.00,01.00,000.00,1.00 +0404,-030.00,+20.00,01.00,000.00,1.00 +0405,-030.00,+20.00,01.00,000.00,1.00 +0406,-030.00,+20.00,01.00,000.00,1.00 +0407,-030.00,+20.00,01.00,000.00,1.00 +0408,-030.00,+20.00,01.00,000.00,1.00 +0409,-030.00,+20.00,01.00,000.00,1.00 +0410,-030.00,+20.00,01.00,000.00,1.00 +0411,-030.00,+20.00,01.00,000.00,1.00 +0412,-030.00,+20.00,01.00,000.00,1.00 +0413,-030.00,+20.00,01.00,000.00,1.00 +0414,-030.00,+20.00,01.00,000.00,1.00 +0415,-030.00,+20.00,01.00,000.00,1.00 +0416,-030.00,+20.00,01.00,000.00,1.00 +0417,-030.00,+20.00,01.00,000.00,1.00 +0418,-030.00,+20.00,01.00,000.00,1.00 +0419,-030.00,+20.00,01.00,000.00,1.00 +0420,-030.00,+20.00,01.00,000.00,1.00 +0421,-030.00,+20.00,01.00,000.00,1.00 +0422,-030.00,+20.00,01.00,000.00,1.00 +0423,-030.00,+20.00,01.00,000.00,1.00 +0424,-030.00,+20.00,01.00,000.00,1.00 +0425,-030.00,+20.00,01.00,000.00,1.00 +0426,-030.00,+20.00,01.00,000.00,1.00 +0427,-030.00,+20.00,01.00,000.00,1.00 +0428,-030.00,+20.00,01.00,000.00,1.00 +0429,-030.00,+20.00,01.00,000.00,1.00 +0430,-030.00,+20.00,01.00,000.00,1.00 +0431,-030.00,+20.00,01.00,000.00,1.00 +0432,-030.00,+20.00,01.00,000.00,1.00 +0433,-030.00,+20.00,01.00,000.00,1.00 +0434,-030.00,+20.00,01.00,000.00,1.00 +0435,-030.00,+20.00,01.00,000.00,1.00 +0436,-030.00,+20.00,01.00,000.00,1.00 +0437,-030.00,+20.00,01.00,000.00,1.00 +0438,-030.00,+20.00,01.00,000.00,1.00 +0439,-030.00,+20.00,01.00,000.00,1.00 +0440,-030.00,+20.00,01.00,000.00,1.00 +0441,-030.00,+20.00,01.00,000.00,1.00 +0442,-030.00,+20.00,01.00,000.00,1.00 +0443,-030.00,+20.00,01.00,000.00,1.00 +0444,-030.00,+20.00,01.00,000.00,1.00 +0445,-030.00,+20.00,01.00,000.00,1.00 +0446,-030.00,+20.00,01.00,000.00,1.00 +0447,-030.00,+20.00,01.00,000.00,1.00 +0448,-030.00,+20.00,01.00,000.00,1.00 +0449,-030.00,+20.00,01.00,000.00,1.00 +0450,-030.00,+20.00,01.00,000.00,1.00 +0451,-030.00,+20.00,01.00,000.00,1.00 +0452,-030.00,+20.00,01.00,000.00,1.00 +0453,-030.00,+20.00,01.00,000.00,1.00 +0454,-030.00,+20.00,01.00,000.00,1.00 +0455,-030.00,+20.00,01.00,000.00,1.00 +0456,-030.00,+20.00,01.00,000.00,1.00 +0457,-030.00,+20.00,01.00,000.00,1.00 +0458,-030.00,+20.00,01.00,000.00,1.00 +0459,-030.00,+20.00,01.00,000.00,1.00 +0460,-030.00,+20.00,01.00,000.00,1.00 +0461,-030.00,+20.00,01.00,000.00,1.00 +0462,-030.00,+20.00,01.00,000.00,1.00 +0463,-030.00,+20.00,01.00,000.00,1.00 +0464,-030.00,+20.00,01.00,000.00,1.00 +0465,-030.00,+20.00,01.00,000.00,1.00 +0466,-030.00,+20.00,01.00,000.00,1.00 +0467,-030.00,+20.00,01.00,000.00,1.00 +0468,-030.00,+20.00,01.00,000.00,1.00 +0469,-030.00,+20.00,01.00,000.00,1.00 +0470,-030.00,+20.00,01.00,000.00,1.00 +0471,-030.00,+20.00,01.00,000.00,1.00 +0472,-030.00,+20.00,01.00,000.00,1.00 +0473,-030.00,+20.00,01.00,000.00,1.00 +0474,-030.00,+20.00,01.00,000.00,1.00 +0475,-030.00,+20.00,01.00,000.00,1.00 +0476,-030.00,+20.00,01.00,000.00,1.00 +0477,-030.00,+20.00,01.00,000.00,1.00 +0478,-030.00,+20.00,01.00,000.00,1.00 +0479,-030.00,+20.00,01.00,000.00,1.00 +0480,-030.00,+20.00,01.00,000.00,1.00 +0481,-030.00,+20.00,01.00,000.00,1.00 +0482,-030.00,+20.00,01.00,000.00,1.00 +0483,-030.00,+20.00,01.00,000.00,1.00 +0484,-030.00,+20.00,01.00,000.00,1.00 +0485,-030.00,+20.00,01.00,000.00,1.00 +0486,-030.00,+20.00,01.00,000.00,1.00 +0487,-030.00,+20.00,01.00,000.00,1.00 +0488,-030.00,+20.00,01.00,000.00,1.00 +0489,-030.00,+20.00,01.00,000.00,1.00 +0490,-030.00,+20.00,01.00,000.00,1.00 +0491,-030.00,+20.00,01.00,000.00,1.00 +0492,-030.00,+20.00,01.00,000.00,1.00 +0493,-030.00,+20.00,01.00,000.00,1.00 +0494,-030.00,+20.00,01.00,000.00,1.00 +0495,-030.00,+20.00,01.00,000.00,1.00 +0496,-030.00,+20.00,01.00,000.00,1.00 +0497,-030.00,+20.00,01.00,000.00,1.00 +0498,-030.00,+20.00,01.00,000.00,1.00 +0499,-030.00,+20.00,01.00,000.00,1.00 +0500,-030.00,+20.00,01.00,000.00,1.00 +0501,-030.00,+20.00,01.00,000.00,1.00 +0502,-030.00,+20.00,01.00,000.00,1.00 +0503,-030.00,+20.00,01.00,000.00,1.00 +0504,-030.00,+20.00,01.00,000.00,1.00 +0505,-030.00,+20.00,01.00,000.00,1.00 +0506,-030.00,+20.00,01.00,000.00,1.00 +0507,-030.00,+20.00,01.00,000.00,1.00 +0508,-030.00,+20.00,01.00,000.00,1.00 +0509,-030.00,+20.00,01.00,000.00,1.00 +0510,-030.00,+20.00,01.00,000.00,1.00 +0511,-030.00,+20.00,01.00,000.00,1.00 +0512,-030.00,+20.00,01.00,000.00,1.00 +0513,-030.00,+20.00,01.00,000.00,1.00 +0514,-030.00,+20.00,01.00,000.00,1.00 +0515,-030.00,+20.00,01.00,000.00,1.00 +0516,-030.00,+20.00,01.00,000.00,1.00 +0517,-030.00,+20.00,01.00,000.00,1.00 +0518,-030.00,+20.00,01.00,000.00,1.00 +0519,-030.00,+20.00,01.00,000.00,1.00 +0520,-030.00,+20.00,01.00,000.00,1.00 +0521,-030.00,+20.00,01.00,000.00,1.00 +0522,-030.00,+20.00,01.00,000.00,1.00 +0523,-030.00,+20.00,01.00,000.00,1.00 +0524,-030.00,+20.00,01.00,000.00,1.00 +0525,-030.00,+20.00,01.00,000.00,1.00 +0526,-030.00,+20.00,01.00,000.00,1.00 +0527,-030.00,+20.00,01.00,000.00,1.00 +0528,-030.00,+20.00,01.00,000.00,1.00 +0529,-030.00,+20.00,01.00,000.00,1.00 +0530,-030.00,+20.00,01.00,000.00,1.00 +0531,-030.00,+20.00,01.00,000.00,1.00 +0532,-030.00,+20.00,01.00,000.00,1.00 +0533,-030.00,+20.00,01.00,000.00,1.00 +0534,-030.00,+20.00,01.00,000.00,1.00 +0535,-030.00,+20.00,01.00,000.00,1.00 +0536,-030.00,+20.00,01.00,000.00,1.00 +0537,-030.00,+20.00,01.00,000.00,1.00 +0538,-030.00,+20.00,01.00,000.00,1.00 +0539,-030.00,+20.00,01.00,000.00,1.00 +0540,-030.00,+20.00,01.00,000.00,1.00 +0541,-030.00,+20.00,01.00,000.00,1.00 +0542,-030.00,+20.00,01.00,000.00,1.00 +0543,-030.00,+20.00,01.00,000.00,1.00 +0544,-030.00,+20.00,01.00,000.00,1.00 +0545,-030.00,+20.00,01.00,000.00,1.00 +0546,-030.00,+20.00,01.00,000.00,1.00 +0547,-030.00,+20.00,01.00,000.00,1.00 +0548,-030.00,+20.00,01.00,000.00,1.00 +0549,-030.00,+20.00,01.00,000.00,1.00 +0550,-030.00,+20.00,01.00,000.00,1.00 +0551,-030.00,+20.00,01.00,000.00,1.00 +0552,-030.00,+20.00,01.00,000.00,1.00 +0553,-030.00,+20.00,01.00,000.00,1.00 +0554,-030.00,+20.00,01.00,000.00,1.00 +0555,-030.00,+20.00,01.00,000.00,1.00 +0556,-030.00,+20.00,01.00,000.00,1.00 +0557,-030.00,+20.00,01.00,000.00,1.00 +0558,-030.00,+20.00,01.00,000.00,1.00 +0559,-030.00,+20.00,01.00,000.00,1.00 +0560,-030.00,+20.00,01.00,000.00,1.00 +0561,-030.00,+20.00,01.00,000.00,1.00 +0562,-030.00,+20.00,01.00,000.00,1.00 +0563,-030.00,+20.00,01.00,000.00,1.00 +0564,-030.00,+20.00,01.00,000.00,1.00 +0565,-030.00,+20.00,01.00,000.00,1.00 +0566,-030.00,+20.00,01.00,000.00,1.00 +0567,-030.00,+20.00,01.00,000.00,1.00 +0568,-030.00,+20.00,01.00,000.00,1.00 +0569,-030.00,+20.00,01.00,000.00,1.00 +0570,-030.00,+20.00,01.00,000.00,1.00 +0571,-030.00,+20.00,01.00,000.00,1.00 +0572,-030.00,+20.00,01.00,000.00,1.00 +0573,-030.00,+20.00,01.00,000.00,1.00 +0574,-030.00,+20.00,01.00,000.00,1.00 +0575,-030.00,+20.00,01.00,000.00,1.00 +0576,-030.00,+20.00,01.00,000.00,1.00 +0577,-030.00,+20.00,01.00,000.00,1.00 +0578,-030.00,+20.00,01.00,000.00,1.00 +0579,-030.00,+20.00,01.00,000.00,1.00 +0580,-030.00,+20.00,01.00,000.00,1.00 +0581,-030.00,+20.00,01.00,000.00,1.00 +0582,-030.00,+20.00,01.00,000.00,1.00 +0583,-030.00,+20.00,01.00,000.00,1.00 +0584,-030.00,+20.00,01.00,000.00,1.00 +0585,-030.00,+20.00,01.00,000.00,1.00 +0586,-030.00,+20.00,01.00,000.00,1.00 +0587,-030.00,+20.00,01.00,000.00,1.00 +0588,-030.00,+20.00,01.00,000.00,1.00 +0589,-030.00,+20.00,01.00,000.00,1.00 +0590,-030.00,+20.00,01.00,000.00,1.00 +0591,-030.00,+20.00,01.00,000.00,1.00 +0592,-030.00,+20.00,01.00,000.00,1.00 +0593,-030.00,+20.00,01.00,000.00,1.00 +0594,-030.00,+20.00,01.00,000.00,1.00 +0595,-030.00,+20.00,01.00,000.00,1.00 +0596,-030.00,+20.00,01.00,000.00,1.00 +0597,-030.00,+20.00,01.00,000.00,1.00 +0598,-030.00,+20.00,01.00,000.00,1.00 +0599,-030.00,+20.00,01.00,000.00,1.00 +0600,-030.00,+20.00,01.00,000.00,1.00 +0601,-030.00,+20.00,01.00,000.00,1.00 +0602,-030.00,+20.00,01.00,000.00,1.00 +0603,-030.00,+20.00,01.00,000.00,1.00 +0604,-030.00,+20.00,01.00,000.00,1.00 +0605,-030.00,+20.00,01.00,000.00,1.00 +0606,-030.00,+20.00,01.00,000.00,1.00 +0607,-030.00,+20.00,01.00,000.00,1.00 +0608,-030.00,+20.00,01.00,000.00,1.00 +0609,-030.00,+20.00,01.00,000.00,1.00 +0610,-030.00,+20.00,01.00,000.00,1.00 +0611,-030.00,+20.00,01.00,000.00,1.00 +0612,-030.00,+20.00,01.00,000.00,1.00 +0613,-030.00,+20.00,01.00,000.00,1.00 +0614,-030.00,+20.00,01.00,000.00,1.00 +0615,-030.00,+20.00,01.00,000.00,1.00 +0616,-030.00,+20.00,01.00,000.00,1.00 +0617,-030.00,+20.00,01.00,000.00,1.00 +0618,-030.00,+20.00,01.00,000.00,1.00 +0619,-030.00,+20.00,01.00,000.00,1.00 +0620,-030.00,+20.00,01.00,000.00,1.00 +0621,-030.00,+20.00,01.00,000.00,1.00 +0622,-030.00,+20.00,01.00,000.00,1.00 +0623,-030.00,+20.00,01.00,000.00,1.00 +0624,-030.00,+20.00,01.00,000.00,1.00 +0625,-030.00,+20.00,01.00,000.00,1.00 +0626,-030.00,+20.00,01.00,000.00,1.00 +0627,-030.00,+20.00,01.00,000.00,1.00 +0628,-030.00,+20.00,01.00,000.00,1.00 +0629,-030.00,+20.00,01.00,000.00,1.00 +0630,-030.00,+20.00,01.00,000.00,1.00 +0631,-030.00,+20.00,01.00,000.00,1.00 +0632,-030.00,+20.00,01.00,000.00,1.00 +0633,-030.00,+20.00,01.00,000.00,1.00 +0634,-030.00,+20.00,01.00,000.00,1.00 +0635,-030.00,+20.00,01.00,000.00,1.00 +0636,-030.00,+20.00,01.00,000.00,1.00 +0637,-030.00,+20.00,01.00,000.00,1.00 +0638,-030.00,+20.00,01.00,000.00,1.00 +0639,-030.00,+20.00,01.00,000.00,1.00 +0640,-030.00,+20.00,01.00,000.00,1.00 +0641,-030.00,+20.00,01.00,000.00,1.00 +0642,-030.00,+20.00,01.00,000.00,1.00 +0643,-030.00,+20.00,01.00,000.00,1.00 +0644,-030.00,+20.00,01.00,000.00,1.00 +0645,-030.00,+20.00,01.00,000.00,1.00 +0646,-030.00,+20.00,01.00,000.00,1.00 +0647,-030.00,+20.00,01.00,000.00,1.00 +0648,-030.00,+20.00,01.00,000.00,1.00 +0649,-030.00,+20.00,01.00,000.00,1.00 +0650,-030.00,+20.00,01.00,000.00,1.00 +0651,-030.00,+20.00,01.00,000.00,1.00 +0652,-030.00,+20.00,01.00,000.00,1.00 +0653,-030.00,+20.00,01.00,000.00,1.00 +0654,-030.00,+20.00,01.00,000.00,1.00 +0655,-030.00,+20.00,01.00,000.00,1.00 +0656,-030.00,+20.00,01.00,000.00,1.00 +0657,-030.00,+20.00,01.00,000.00,1.00 +0658,-030.00,+20.00,01.00,000.00,1.00 +0659,-030.00,+20.00,01.00,000.00,1.00 +0660,-030.00,+20.00,01.00,000.00,1.00 +0661,-030.00,+20.00,01.00,000.00,1.00 +0662,-030.00,+20.00,01.00,000.00,1.00 +0663,-030.00,+20.00,01.00,000.00,1.00 +0664,-030.00,+20.00,01.00,000.00,1.00 +0665,-030.00,+20.00,01.00,000.00,1.00 +0666,-030.00,+20.00,01.00,000.00,1.00 +0667,-030.00,+20.00,01.00,000.00,1.00 +0668,-030.00,+20.00,01.00,000.00,1.00 +0669,-030.00,+20.00,01.00,000.00,1.00 +0670,-030.00,+20.00,01.00,000.00,1.00 +0671,-030.00,+20.00,01.00,000.00,1.00 +0672,-030.00,+20.00,01.00,000.00,1.00 +0673,-030.00,+20.00,01.00,000.00,1.00 +0674,-030.00,+20.00,01.00,000.00,1.00 +0675,-030.00,+20.00,01.00,000.00,1.00 +0676,-030.00,+20.00,01.00,000.00,1.00 +0677,-030.00,+20.00,01.00,000.00,1.00 +0678,-030.00,+20.00,01.00,000.00,1.00 +0679,-030.00,+20.00,01.00,000.00,1.00 +0680,-030.00,+20.00,01.00,000.00,1.00 +0681,-030.00,+20.00,01.00,000.00,1.00 +0682,-030.00,+20.00,01.00,000.00,1.00 +0683,-030.00,+20.00,01.00,000.00,1.00 +0684,-030.00,+20.00,01.00,000.00,1.00 +0685,-030.00,+20.00,01.00,000.00,1.00 +0686,-030.00,+20.00,01.00,000.00,1.00 +0687,-030.00,+20.00,01.00,000.00,1.00 +0688,-030.00,+20.00,01.00,000.00,1.00 +0689,-030.00,+20.00,01.00,000.00,1.00 +0690,-030.00,+20.00,01.00,000.00,1.00 +0691,-030.00,+20.00,01.00,000.00,1.00 +0692,-030.00,+20.00,01.00,000.00,1.00 +0693,-030.00,+20.00,01.00,000.00,1.00 +0694,-030.00,+20.00,01.00,000.00,1.00 +0695,-030.00,+20.00,01.00,000.00,1.00 +0696,-030.00,+20.00,01.00,000.00,1.00 +0697,-030.00,+20.00,01.00,000.00,1.00 +0698,-030.00,+20.00,01.00,000.00,1.00 +0699,-030.00,+20.00,01.00,000.00,1.00 +0700,-030.00,+20.00,01.00,000.00,1.00 +0701,-030.00,+20.00,01.00,000.00,1.00 +0702,-030.00,+20.00,01.00,000.00,1.00 +0703,-030.00,+20.00,01.00,000.00,1.00 +0704,-030.00,+20.00,01.00,000.00,1.00 +0705,-030.00,+20.00,01.00,000.00,1.00 +0706,-030.00,+20.00,01.00,000.00,1.00 +0707,-030.00,+20.00,01.00,000.00,1.00 +0708,-030.00,+20.00,01.00,000.00,1.00 +0709,-030.00,+20.00,01.00,000.00,1.00 +0710,-030.00,+20.00,01.00,000.00,1.00 +0711,-030.00,+20.00,01.00,000.00,1.00 +0712,-030.00,+20.00,01.00,000.00,1.00 +0713,-030.00,+20.00,01.00,000.00,1.00 +0714,-030.00,+20.00,01.00,000.00,1.00 +0715,-030.00,+20.00,01.00,000.00,1.00 +0716,-030.00,+20.00,01.00,000.00,1.00 +0717,-030.00,+20.00,01.00,000.00,1.00 +0718,-030.00,+20.00,01.00,000.00,1.00 +0719,-030.00,+20.00,01.00,000.00,1.00 +0720,-030.00,+20.00,01.00,000.00,1.00 +0721,-030.00,+20.00,01.00,000.00,1.00 +0722,-030.00,+20.00,01.00,000.00,1.00 +0723,-030.00,+20.00,01.00,000.00,1.00 +0724,-030.00,+20.00,01.00,000.00,1.00 +0725,-030.00,+20.00,01.00,000.00,1.00 +0726,-030.00,+20.00,01.00,000.00,1.00 +0727,-030.00,+20.00,01.00,000.00,1.00 +0728,-030.00,+20.00,01.00,000.00,1.00 +0729,-030.00,+20.00,01.00,000.00,1.00 +0730,-030.00,+20.00,01.00,000.00,1.00 +0731,-030.00,+20.00,01.00,000.00,1.00 +0732,-030.00,+20.00,01.00,000.00,1.00 +0733,-030.00,+20.00,01.00,000.00,1.00 +0734,-030.00,+20.00,01.00,000.00,1.00 +0735,-030.00,+20.00,01.00,000.00,1.00 +0736,-030.00,+20.00,01.00,000.00,1.00 +0737,-030.00,+20.00,01.00,000.00,1.00 +0738,-030.00,+20.00,01.00,000.00,1.00 +0739,-030.00,+20.00,01.00,000.00,1.00 +0740,-030.00,+20.00,01.00,000.00,1.00 +0741,-030.00,+20.00,01.00,000.00,1.00 +0742,-030.00,+20.00,01.00,000.00,1.00 +0743,-030.00,+20.00,01.00,000.00,1.00 +0744,-030.00,+20.00,01.00,000.00,1.00 +0745,-030.00,+20.00,01.00,000.00,1.00 +0746,-030.00,+20.00,01.00,000.00,1.00 +0747,-030.00,+20.00,01.00,000.00,1.00 +0748,-030.00,+20.00,01.00,000.00,1.00 +0749,-030.00,+20.00,01.00,000.00,1.00 +0750,-030.00,+20.00,01.00,000.00,1.00 +0751,-030.00,+20.00,01.00,000.00,1.00 +0752,-030.00,+20.00,01.00,000.00,1.00 +0753,-030.00,+20.00,01.00,000.00,1.00 +0754,-030.00,+20.00,01.00,000.00,1.00 +0755,-030.00,+20.00,01.00,000.00,1.00 +0756,-030.00,+20.00,01.00,000.00,1.00 +0757,-030.00,+20.00,01.00,000.00,1.00 +0758,-030.00,+20.00,01.00,000.00,1.00 +0759,-030.00,+20.00,01.00,000.00,1.00 +0760,-030.00,+20.00,01.00,000.00,1.00 +0761,-030.00,+20.00,01.00,000.00,1.00 +0762,-030.00,+20.00,01.00,000.00,1.00 +0763,-030.00,+20.00,01.00,000.00,1.00 +0764,-030.00,+20.00,01.00,000.00,1.00 +0765,-030.00,+20.00,01.00,000.00,1.00 +0766,-030.00,+20.00,01.00,000.00,1.00 +0767,-030.00,+20.00,01.00,000.00,1.00 +0768,-030.00,+20.00,01.00,000.00,1.00 +0769,-030.00,+20.00,01.00,000.00,1.00 +0770,-030.00,+20.00,01.00,000.00,1.00 +0771,-030.00,+20.00,01.00,000.00,1.00 +0772,-030.00,+20.00,01.00,000.00,1.00 +0773,-030.00,+20.00,01.00,000.00,1.00 +0774,-030.00,+20.00,01.00,000.00,1.00 +0775,-030.00,+20.00,01.00,000.00,1.00 +0776,-030.00,+20.00,01.00,000.00,1.00 +0777,-030.00,+20.00,01.00,000.00,1.00 +0778,-030.00,+20.00,01.00,000.00,1.00 +0779,-030.00,+20.00,01.00,000.00,1.00 +0780,-030.00,+20.00,01.00,000.00,1.00 +0781,-030.00,+20.00,01.00,000.00,1.00 +0782,-030.00,+20.00,01.00,000.00,1.00 +0783,-030.00,+20.00,01.00,000.00,1.00 +0784,-030.00,+20.00,01.00,000.00,1.00 +0785,-030.00,+20.00,01.00,000.00,1.00 +0786,-030.00,+20.00,01.00,000.00,1.00 +0787,-030.00,+20.00,01.00,000.00,1.00 +0788,-030.00,+20.00,01.00,000.00,1.00 +0789,-030.00,+20.00,01.00,000.00,1.00 +0790,-030.00,+20.00,01.00,000.00,1.00 +0791,-030.00,+20.00,01.00,000.00,1.00 +0792,-030.00,+20.00,01.00,000.00,1.00 +0793,-030.00,+20.00,01.00,000.00,1.00 +0794,-030.00,+20.00,01.00,000.00,1.00 +0795,-030.00,+20.00,01.00,000.00,1.00 +0796,-030.00,+20.00,01.00,000.00,1.00 +0797,-030.00,+20.00,01.00,000.00,1.00 +0798,-030.00,+20.00,01.00,000.00,1.00 +0799,-030.00,+20.00,01.00,000.00,1.00 +0800,-030.00,+20.00,01.00,000.00,1.00 +0801,-030.00,+20.00,01.00,000.00,1.00 +0802,-030.00,+20.00,01.00,000.00,1.00 +0803,-030.00,+20.00,01.00,000.00,1.00 +0804,-030.00,+20.00,01.00,000.00,1.00 +0805,-030.00,+20.00,01.00,000.00,1.00 +0806,-030.00,+20.00,01.00,000.00,1.00 +0807,-030.00,+20.00,01.00,000.00,1.00 +0808,-030.00,+20.00,01.00,000.00,1.00 +0809,-030.00,+20.00,01.00,000.00,1.00 +0810,-030.00,+20.00,01.00,000.00,1.00 +0811,-030.00,+20.00,01.00,000.00,1.00 +0812,-030.00,+20.00,01.00,000.00,1.00 +0813,-030.00,+20.00,01.00,000.00,1.00 +0814,-030.00,+20.00,01.00,000.00,1.00 +0815,-030.00,+20.00,01.00,000.00,1.00 +0816,-030.00,+20.00,01.00,000.00,1.00 +0817,-030.00,+20.00,01.00,000.00,1.00 +0818,-030.00,+20.00,01.00,000.00,1.00 +0819,-030.00,+20.00,01.00,000.00,1.00 +0820,-030.00,+20.00,01.00,000.00,1.00 +0821,-030.00,+20.00,01.00,000.00,1.00 +0822,-030.00,+20.00,01.00,000.00,1.00 +0823,-030.00,+20.00,01.00,000.00,1.00 +0824,-030.00,+20.00,01.00,000.00,1.00 +0825,-030.00,+20.00,01.00,000.00,1.00 +0826,-030.00,+20.00,01.00,000.00,1.00 +0827,-030.00,+20.00,01.00,000.00,1.00 +0828,-030.00,+20.00,01.00,000.00,1.00 +0829,-030.00,+20.00,01.00,000.00,1.00 +0830,-030.00,+20.00,01.00,000.00,1.00 +0831,-030.00,+20.00,01.00,000.00,1.00 +0832,-030.00,+20.00,01.00,000.00,1.00 +0833,-030.00,+20.00,01.00,000.00,1.00 +0834,-030.00,+20.00,01.00,000.00,1.00 +0835,-030.00,+20.00,01.00,000.00,1.00 +0836,-030.00,+20.00,01.00,000.00,1.00 +0837,-030.00,+20.00,01.00,000.00,1.00 +0838,-030.00,+20.00,01.00,000.00,1.00 +0839,-030.00,+20.00,01.00,000.00,1.00 +0840,-030.00,+20.00,01.00,000.00,1.00 +0841,-030.00,+20.00,01.00,000.00,1.00 +0842,-030.00,+20.00,01.00,000.00,1.00 +0843,-030.00,+20.00,01.00,000.00,1.00 +0844,-030.00,+20.00,01.00,000.00,1.00 +0845,-030.00,+20.00,01.00,000.00,1.00 +0846,-030.00,+20.00,01.00,000.00,1.00 +0847,-030.00,+20.00,01.00,000.00,1.00 +0848,-030.00,+20.00,01.00,000.00,1.00 +0849,-030.00,+20.00,01.00,000.00,1.00 +0850,-030.00,+20.00,01.00,000.00,1.00 +0851,-030.00,+20.00,01.00,000.00,1.00 +0852,-030.00,+20.00,01.00,000.00,1.00 +0853,-030.00,+20.00,01.00,000.00,1.00 +0854,-030.00,+20.00,01.00,000.00,1.00 +0855,-030.00,+20.00,01.00,000.00,1.00 +0856,-030.00,+20.00,01.00,000.00,1.00 +0857,-030.00,+20.00,01.00,000.00,1.00 +0858,-030.00,+20.00,01.00,000.00,1.00 +0859,-030.00,+20.00,01.00,000.00,1.00 +0860,-030.00,+20.00,01.00,000.00,1.00 +0861,-030.00,+20.00,01.00,000.00,1.00 +0862,-030.00,+20.00,01.00,000.00,1.00 +0863,-030.00,+20.00,01.00,000.00,1.00 +0864,-030.00,+20.00,01.00,000.00,1.00 +0865,-030.00,+20.00,01.00,000.00,1.00 +0866,-030.00,+20.00,01.00,000.00,1.00 +0867,-030.00,+20.00,01.00,000.00,1.00 +0868,-030.00,+20.00,01.00,000.00,1.00 +0869,-030.00,+20.00,01.00,000.00,1.00 +0870,-030.00,+20.00,01.00,000.00,1.00 +0871,-030.00,+20.00,01.00,000.00,1.00 +0872,-030.00,+20.00,01.00,000.00,1.00 +0873,-030.00,+20.00,01.00,000.00,1.00 +0874,-030.00,+20.00,01.00,000.00,1.00 +0875,-030.00,+20.00,01.00,000.00,1.00 +0876,-030.00,+20.00,01.00,000.00,1.00 +0877,-030.00,+20.00,01.00,000.00,1.00 +0878,-030.00,+20.00,01.00,000.00,1.00 +0879,-030.00,+20.00,01.00,000.00,1.00 +0880,-030.00,+20.00,01.00,000.00,1.00 +0881,-030.00,+20.00,01.00,000.00,1.00 +0882,-030.00,+20.00,01.00,000.00,1.00 +0883,-030.00,+20.00,01.00,000.00,1.00 +0884,-030.00,+20.00,01.00,000.00,1.00 +0885,-030.00,+20.00,01.00,000.00,1.00 +0886,-030.00,+20.00,01.00,000.00,1.00 +0887,-030.00,+20.00,01.00,000.00,1.00 +0888,-030.00,+20.00,01.00,000.00,1.00 +0889,-030.00,+20.00,01.00,000.00,1.00 +0890,-030.00,+20.00,01.00,000.00,1.00 +0891,-030.00,+20.00,01.00,000.00,1.00 +0892,-030.00,+20.00,01.00,000.00,1.00 +0893,-030.00,+20.00,01.00,000.00,1.00 +0894,-030.00,+20.00,01.00,000.00,1.00 +0895,-030.00,+20.00,01.00,000.00,1.00 +0896,-030.00,+20.00,01.00,000.00,1.00 +0897,-030.00,+20.00,01.00,000.00,1.00 +0898,-030.00,+20.00,01.00,000.00,1.00 +0899,-030.00,+20.00,01.00,000.00,1.00 +0900,-030.00,+20.00,01.00,000.00,1.00 +0901,-030.00,+20.00,01.00,000.00,1.00 +0902,-030.00,+20.00,01.00,000.00,1.00 +0903,-030.00,+20.00,01.00,000.00,1.00 +0904,-030.00,+20.00,01.00,000.00,1.00 +0905,-030.00,+20.00,01.00,000.00,1.00 +0906,-030.00,+20.00,01.00,000.00,1.00 +0907,-030.00,+20.00,01.00,000.00,1.00 +0908,-030.00,+20.00,01.00,000.00,1.00 +0909,-030.00,+20.00,01.00,000.00,1.00 +0910,-030.00,+20.00,01.00,000.00,1.00 +0911,-030.00,+20.00,01.00,000.00,1.00 +0912,-030.00,+20.00,01.00,000.00,1.00 +0913,-030.00,+20.00,01.00,000.00,1.00 +0914,-030.00,+20.00,01.00,000.00,1.00 +0915,-030.00,+20.00,01.00,000.00,1.00 +0916,-030.00,+20.00,01.00,000.00,1.00 +0917,-030.00,+20.00,01.00,000.00,1.00 +0918,-030.00,+20.00,01.00,000.00,1.00 +0919,-030.00,+20.00,01.00,000.00,1.00 +0920,-030.00,+20.00,01.00,000.00,1.00 +0921,-030.00,+20.00,01.00,000.00,1.00 +0922,-030.00,+20.00,01.00,000.00,1.00 +0923,-030.00,+20.00,01.00,000.00,1.00 +0924,-030.00,+20.00,01.00,000.00,1.00 +0925,-030.00,+20.00,01.00,000.00,1.00 +0926,-030.00,+20.00,01.00,000.00,1.00 +0927,-030.00,+20.00,01.00,000.00,1.00 +0928,-030.00,+20.00,01.00,000.00,1.00 +0929,-030.00,+20.00,01.00,000.00,1.00 +0930,-030.00,+20.00,01.00,000.00,1.00 +0931,-030.00,+20.00,01.00,000.00,1.00 +0932,-030.00,+20.00,01.00,000.00,1.00 +0933,-030.00,+20.00,01.00,000.00,1.00 +0934,-030.00,+20.00,01.00,000.00,1.00 +0935,-030.00,+20.00,01.00,000.00,1.00 +0936,-030.00,+20.00,01.00,000.00,1.00 +0937,-030.00,+20.00,01.00,000.00,1.00 +0938,-030.00,+20.00,01.00,000.00,1.00 +0939,-030.00,+20.00,01.00,000.00,1.00 +0940,-030.00,+20.00,01.00,000.00,1.00 +0941,-030.00,+20.00,01.00,000.00,1.00 +0942,-030.00,+20.00,01.00,000.00,1.00 +0943,-030.00,+20.00,01.00,000.00,1.00 +0944,-030.00,+20.00,01.00,000.00,1.00 +0945,-030.00,+20.00,01.00,000.00,1.00 +0946,-030.00,+20.00,01.00,000.00,1.00 +0947,-030.00,+20.00,01.00,000.00,1.00 +0948,-030.00,+20.00,01.00,000.00,1.00 +0949,-030.00,+20.00,01.00,000.00,1.00 +0950,-030.00,+20.00,01.00,000.00,1.00 +0951,-030.00,+20.00,01.00,000.00,1.00 +0952,-030.00,+20.00,01.00,000.00,1.00 +0953,-030.00,+20.00,01.00,000.00,1.00 +0954,-030.00,+20.00,01.00,000.00,1.00 +0955,-030.00,+20.00,01.00,000.00,1.00 +0956,-030.00,+20.00,01.00,000.00,1.00 +0957,-030.00,+20.00,01.00,000.00,1.00 +0958,-030.00,+20.00,01.00,000.00,1.00 +0959,-030.00,+20.00,01.00,000.00,1.00 +0960,-030.00,+20.00,01.00,000.00,1.00 +0961,-030.00,+20.00,01.00,000.00,1.00 +0962,-030.00,+20.00,01.00,000.00,1.00 +0963,-030.00,+20.00,01.00,000.00,1.00 +0964,-030.00,+20.00,01.00,000.00,1.00 +0965,-030.00,+20.00,01.00,000.00,1.00 +0966,-030.00,+20.00,01.00,000.00,1.00 +0967,-030.00,+20.00,01.00,000.00,1.00 +0968,-030.00,+20.00,01.00,000.00,1.00 +0969,-030.00,+20.00,01.00,000.00,1.00 +0970,-030.00,+20.00,01.00,000.00,1.00 +0971,-030.00,+20.00,01.00,000.00,1.00 +0972,-030.00,+20.00,01.00,000.00,1.00 +0973,-030.00,+20.00,01.00,000.00,1.00 +0974,-030.00,+20.00,01.00,000.00,1.00 +0975,-030.00,+20.00,01.00,000.00,1.00 +0976,-030.00,+20.00,01.00,000.00,1.00 +0977,-030.00,+20.00,01.00,000.00,1.00 +0978,-030.00,+20.00,01.00,000.00,1.00 +0979,-030.00,+20.00,01.00,000.00,1.00 +0980,-030.00,+20.00,01.00,000.00,1.00 +0981,-030.00,+20.00,01.00,000.00,1.00 +0982,-030.00,+20.00,01.00,000.00,1.00 +0983,-030.00,+20.00,01.00,000.00,1.00 +0984,-030.00,+20.00,01.00,000.00,1.00 +0985,-030.00,+20.00,01.00,000.00,1.00 +0986,-030.00,+20.00,01.00,000.00,1.00 +0987,-030.00,+20.00,01.00,000.00,1.00 +0988,-030.00,+20.00,01.00,000.00,1.00 +0989,-030.00,+20.00,01.00,000.00,1.00 +0990,-030.00,+20.00,01.00,000.00,1.00 +0991,-030.00,+20.00,01.00,000.00,1.00 +0992,-030.00,+20.00,01.00,000.00,1.00 +0993,-030.00,+20.00,01.00,000.00,1.00 +0994,-030.00,+20.00,01.00,000.00,1.00 +0995,-030.00,+20.00,01.00,000.00,1.00 +0996,-030.00,+20.00,01.00,000.00,1.00 +0997,-030.00,+20.00,01.00,000.00,1.00 +0998,-030.00,+20.00,01.00,000.00,1.00 +0999,-030.00,+20.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t05_ch1.csv b/scripts/td_object_renderer/metadata/csv/t05_ch1.csv new file mode 100644 index 0000000000..53be7317cf --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t05_ch1.csv @@ -0,0 +1,1000 @@ +0000,-060.00,+00.00,01.00,000.00,1.00 +0001,-060.00,+00.00,01.00,000.00,1.00 +0002,-060.00,+00.00,01.00,000.00,1.00 +0003,-060.00,+00.00,01.00,000.00,1.00 +0004,-060.00,+00.00,01.00,000.00,1.00 +0005,-060.00,+00.00,01.00,000.00,1.00 +0006,-060.00,+00.00,01.00,000.00,1.00 +0007,-060.00,+00.00,01.00,000.00,1.00 +0008,-060.00,+00.00,01.00,000.00,1.00 +0009,-060.00,+00.00,01.00,000.00,1.00 +0010,-060.00,+00.00,01.00,000.00,1.00 +0011,-060.00,+00.00,01.00,000.00,1.00 +0012,-060.00,+00.00,01.00,000.00,1.00 +0013,-060.00,+00.00,01.00,000.00,1.00 +0014,-060.00,+00.00,01.00,000.00,1.00 +0015,-060.00,+00.00,01.00,000.00,1.00 +0016,-060.00,+00.00,01.00,000.00,1.00 +0017,-060.00,+00.00,01.00,000.00,1.00 +0018,-060.00,+00.00,01.00,000.00,1.00 +0019,-060.00,+00.00,01.00,000.00,1.00 +0020,-060.00,+00.00,01.00,000.00,1.00 +0021,-060.00,+00.00,01.00,000.00,1.00 +0022,-060.00,+00.00,01.00,000.00,1.00 +0023,-060.00,+00.00,01.00,000.00,1.00 +0024,-060.00,+00.00,01.00,000.00,1.00 +0025,-060.00,+00.00,01.00,000.00,1.00 +0026,-060.00,+00.00,01.00,000.00,1.00 +0027,-060.00,+00.00,01.00,000.00,1.00 +0028,-060.00,+00.00,01.00,000.00,1.00 +0029,-060.00,+00.00,01.00,000.00,1.00 +0030,-060.00,+00.00,01.00,000.00,1.00 +0031,-060.00,+00.00,01.00,000.00,1.00 +0032,-060.00,+00.00,01.00,000.00,1.00 +0033,-060.00,+00.00,01.00,000.00,1.00 +0034,-060.00,+00.00,01.00,000.00,1.00 +0035,-060.00,+00.00,01.00,000.00,1.00 +0036,-060.00,+00.00,01.00,000.00,1.00 +0037,-060.00,+00.00,01.00,000.00,1.00 +0038,-060.00,+00.00,01.00,000.00,1.00 +0039,-060.00,+00.00,01.00,000.00,1.00 +0040,-060.00,+00.00,01.00,000.00,1.00 +0041,-060.00,+00.00,01.00,000.00,1.00 +0042,-060.00,+00.00,01.00,000.00,1.00 +0043,-060.00,+00.00,01.00,000.00,1.00 +0044,-060.00,+00.00,01.00,000.00,1.00 +0045,-060.00,+00.00,01.00,000.00,1.00 +0046,-060.00,+00.00,01.00,000.00,1.00 +0047,-060.00,+00.00,01.00,000.00,1.00 +0048,-060.00,+00.00,01.00,000.00,1.00 +0049,-060.00,+00.00,01.00,000.00,1.00 +0050,-060.00,+00.00,01.00,000.00,1.00 +0051,-060.00,+00.00,01.00,000.00,1.00 +0052,-060.00,+00.00,01.00,000.00,1.00 +0053,-060.00,+00.00,01.00,000.00,1.00 +0054,-060.00,+00.00,01.00,000.00,1.00 +0055,-060.00,+00.00,01.00,000.00,1.00 +0056,-060.00,+00.00,01.00,000.00,1.00 +0057,-060.00,+00.00,01.00,000.00,1.00 +0058,-060.00,+00.00,01.00,000.00,1.00 +0059,-060.00,+00.00,01.00,000.00,1.00 +0060,-060.00,+00.00,01.00,000.00,1.00 +0061,-060.00,+00.00,01.00,000.00,1.00 +0062,-060.00,+00.00,01.00,000.00,1.00 +0063,-060.00,+00.00,01.00,000.00,1.00 +0064,-060.00,+00.00,01.00,000.00,1.00 +0065,-060.00,+00.00,01.00,000.00,1.00 +0066,-060.00,+00.00,01.00,000.00,1.00 +0067,-060.00,+00.00,01.00,000.00,1.00 +0068,-060.00,+00.00,01.00,000.00,1.00 +0069,-060.00,+00.00,01.00,000.00,1.00 +0070,-060.00,+00.00,01.00,000.00,1.00 +0071,-060.00,+00.00,01.00,000.00,1.00 +0072,-060.00,+00.00,01.00,000.00,1.00 +0073,-060.00,+00.00,01.00,000.00,1.00 +0074,-060.00,+00.00,01.00,000.00,1.00 +0075,-060.00,+00.00,01.00,000.00,1.00 +0076,-060.00,+00.00,01.00,000.00,1.00 +0077,-060.00,+00.00,01.00,000.00,1.00 +0078,-060.00,+00.00,01.00,000.00,1.00 +0079,-060.00,+00.00,01.00,000.00,1.00 +0080,-060.00,+00.00,01.00,000.00,1.00 +0081,-060.00,+00.00,01.00,000.00,1.00 +0082,-060.00,+00.00,01.00,000.00,1.00 +0083,-060.00,+00.00,01.00,000.00,1.00 +0084,-060.00,+00.00,01.00,000.00,1.00 +0085,-060.00,+00.00,01.00,000.00,1.00 +0086,-060.00,+00.00,01.00,000.00,1.00 +0087,-060.00,+00.00,01.00,000.00,1.00 +0088,-060.00,+00.00,01.00,000.00,1.00 +0089,-060.00,+00.00,01.00,000.00,1.00 +0090,-060.00,+00.00,01.00,000.00,1.00 +0091,-060.00,+00.00,01.00,000.00,1.00 +0092,-060.00,+00.00,01.00,000.00,1.00 +0093,-060.00,+00.00,01.00,000.00,1.00 +0094,-060.00,+00.00,01.00,000.00,1.00 +0095,-060.00,+00.00,01.00,000.00,1.00 +0096,-060.00,+00.00,01.00,000.00,1.00 +0097,-060.00,+00.00,01.00,000.00,1.00 +0098,-060.00,+00.00,01.00,000.00,1.00 +0099,-060.00,+00.00,01.00,000.00,1.00 +0100,-060.00,+00.00,01.00,000.00,1.00 +0101,-060.00,+00.00,01.00,000.00,1.00 +0102,-060.00,+00.00,01.00,000.00,1.00 +0103,-060.00,+00.00,01.00,000.00,1.00 +0104,-060.00,+00.00,01.00,000.00,1.00 +0105,-060.00,+00.00,01.00,000.00,1.00 +0106,-060.00,+00.00,01.00,000.00,1.00 +0107,-060.00,+00.00,01.00,000.00,1.00 +0108,-060.00,+00.00,01.00,000.00,1.00 +0109,-060.00,+00.00,01.00,000.00,1.00 +0110,-060.00,+00.00,01.00,000.00,1.00 +0111,-060.00,+00.00,01.00,000.00,1.00 +0112,-060.00,+00.00,01.00,000.00,1.00 +0113,-060.00,+00.00,01.00,000.00,1.00 +0114,-060.00,+00.00,01.00,000.00,1.00 +0115,-060.00,+00.00,01.00,000.00,1.00 +0116,-060.00,+00.00,01.00,000.00,1.00 +0117,-060.00,+00.00,01.00,000.00,1.00 +0118,-060.00,+00.00,01.00,000.00,1.00 +0119,-060.00,+00.00,01.00,000.00,1.00 +0120,-060.00,+00.00,01.00,000.00,1.00 +0121,-060.00,+00.00,01.00,000.00,1.00 +0122,-060.00,+00.00,01.00,000.00,1.00 +0123,-060.00,+00.00,01.00,000.00,1.00 +0124,-060.00,+00.00,01.00,000.00,1.00 +0125,-060.00,+00.00,01.00,000.00,1.00 +0126,-060.00,+00.00,01.00,000.00,1.00 +0127,-060.00,+00.00,01.00,000.00,1.00 +0128,-060.00,+00.00,01.00,000.00,1.00 +0129,-060.00,+00.00,01.00,000.00,1.00 +0130,-060.00,+00.00,01.00,000.00,1.00 +0131,-060.00,+00.00,01.00,000.00,1.00 +0132,-060.00,+00.00,01.00,000.00,1.00 +0133,-060.00,+00.00,01.00,000.00,1.00 +0134,-060.00,+00.00,01.00,000.00,1.00 +0135,-060.00,+00.00,01.00,000.00,1.00 +0136,-060.00,+00.00,01.00,000.00,1.00 +0137,-060.00,+00.00,01.00,000.00,1.00 +0138,-060.00,+00.00,01.00,000.00,1.00 +0139,-060.00,+00.00,01.00,000.00,1.00 +0140,-060.00,+00.00,01.00,000.00,1.00 +0141,-060.00,+00.00,01.00,000.00,1.00 +0142,-060.00,+00.00,01.00,000.00,1.00 +0143,-060.00,+00.00,01.00,000.00,1.00 +0144,-060.00,+00.00,01.00,000.00,1.00 +0145,-060.00,+00.00,01.00,000.00,1.00 +0146,-060.00,+00.00,01.00,000.00,1.00 +0147,-060.00,+00.00,01.00,000.00,1.00 +0148,-060.00,+00.00,01.00,000.00,1.00 +0149,-060.00,+00.00,01.00,000.00,1.00 +0150,-060.00,+00.00,01.00,000.00,1.00 +0151,-060.00,+00.00,01.00,000.00,1.00 +0152,-060.00,+00.00,01.00,000.00,1.00 +0153,-060.00,+00.00,01.00,000.00,1.00 +0154,-060.00,+00.00,01.00,000.00,1.00 +0155,-060.00,+00.00,01.00,000.00,1.00 +0156,-060.00,+00.00,01.00,000.00,1.00 +0157,-060.00,+00.00,01.00,000.00,1.00 +0158,-060.00,+00.00,01.00,000.00,1.00 +0159,-060.00,+00.00,01.00,000.00,1.00 +0160,-060.00,+00.00,01.00,000.00,1.00 +0161,-060.00,+00.00,01.00,000.00,1.00 +0162,-060.00,+00.00,01.00,000.00,1.00 +0163,-060.00,+00.00,01.00,000.00,1.00 +0164,-060.00,+00.00,01.00,000.00,1.00 +0165,-060.00,+00.00,01.00,000.00,1.00 +0166,-060.00,+00.00,01.00,000.00,1.00 +0167,-060.00,+00.00,01.00,000.00,1.00 +0168,-060.00,+00.00,01.00,000.00,1.00 +0169,-060.00,+00.00,01.00,000.00,1.00 +0170,-060.00,+00.00,01.00,000.00,1.00 +0171,-060.00,+00.00,01.00,000.00,1.00 +0172,-060.00,+00.00,01.00,000.00,1.00 +0173,-060.00,+00.00,01.00,000.00,1.00 +0174,-060.00,+00.00,01.00,000.00,1.00 +0175,-060.00,+00.00,01.00,000.00,1.00 +0176,-060.00,+00.00,01.00,000.00,1.00 +0177,-060.00,+00.00,01.00,000.00,1.00 +0178,-060.00,+00.00,01.00,000.00,1.00 +0179,-060.00,+00.00,01.00,000.00,1.00 +0180,-060.00,+00.00,01.00,000.00,1.00 +0181,-060.00,+00.00,01.00,000.00,1.00 +0182,-060.00,+00.00,01.00,000.00,1.00 +0183,-060.00,+00.00,01.00,000.00,1.00 +0184,-060.00,+00.00,01.00,000.00,1.00 +0185,-060.00,+00.00,01.00,000.00,1.00 +0186,-060.00,+00.00,01.00,000.00,1.00 +0187,-060.00,+00.00,01.00,000.00,1.00 +0188,-060.00,+00.00,01.00,000.00,1.00 +0189,-060.00,+00.00,01.00,000.00,1.00 +0190,-060.00,+00.00,01.00,000.00,1.00 +0191,-060.00,+00.00,01.00,000.00,1.00 +0192,-060.00,+00.00,01.00,000.00,1.00 +0193,-060.00,+00.00,01.00,000.00,1.00 +0194,-060.00,+00.00,01.00,000.00,1.00 +0195,-060.00,+00.00,01.00,000.00,1.00 +0196,-060.00,+00.00,01.00,000.00,1.00 +0197,-060.00,+00.00,01.00,000.00,1.00 +0198,-060.00,+00.00,01.00,000.00,1.00 +0199,-060.00,+00.00,01.00,000.00,1.00 +0200,-060.00,+00.00,01.00,000.00,1.00 +0201,-060.00,+00.00,01.00,000.00,1.00 +0202,-060.00,+00.00,01.00,000.00,1.00 +0203,-060.00,+00.00,01.00,000.00,1.00 +0204,-060.00,+00.00,01.00,000.00,1.00 +0205,-060.00,+00.00,01.00,000.00,1.00 +0206,-060.00,+00.00,01.00,000.00,1.00 +0207,-060.00,+00.00,01.00,000.00,1.00 +0208,-060.00,+00.00,01.00,000.00,1.00 +0209,-060.00,+00.00,01.00,000.00,1.00 +0210,-060.00,+00.00,01.00,000.00,1.00 +0211,-060.00,+00.00,01.00,000.00,1.00 +0212,-060.00,+00.00,01.00,000.00,1.00 +0213,-060.00,+00.00,01.00,000.00,1.00 +0214,-060.00,+00.00,01.00,000.00,1.00 +0215,-060.00,+00.00,01.00,000.00,1.00 +0216,-060.00,+00.00,01.00,000.00,1.00 +0217,-060.00,+00.00,01.00,000.00,1.00 +0218,-060.00,+00.00,01.00,000.00,1.00 +0219,-060.00,+00.00,01.00,000.00,1.00 +0220,-060.00,+00.00,01.00,000.00,1.00 +0221,-060.00,+00.00,01.00,000.00,1.00 +0222,-060.00,+00.00,01.00,000.00,1.00 +0223,-060.00,+00.00,01.00,000.00,1.00 +0224,-060.00,+00.00,01.00,000.00,1.00 +0225,-060.00,+00.00,01.00,000.00,1.00 +0226,-060.00,+00.00,01.00,000.00,1.00 +0227,-060.00,+00.00,01.00,000.00,1.00 +0228,-060.00,+00.00,01.00,000.00,1.00 +0229,-060.00,+00.00,01.00,000.00,1.00 +0230,-060.00,+00.00,01.00,000.00,1.00 +0231,-060.00,+00.00,01.00,000.00,1.00 +0232,-060.00,+00.00,01.00,000.00,1.00 +0233,-060.00,+00.00,01.00,000.00,1.00 +0234,-060.00,+00.00,01.00,000.00,1.00 +0235,-060.00,+00.00,01.00,000.00,1.00 +0236,-060.00,+00.00,01.00,000.00,1.00 +0237,-060.00,+00.00,01.00,000.00,1.00 +0238,-060.00,+00.00,01.00,000.00,1.00 +0239,-060.00,+00.00,01.00,000.00,1.00 +0240,-060.00,+00.00,01.00,000.00,1.00 +0241,-060.00,+00.00,01.00,000.00,1.00 +0242,-060.00,+00.00,01.00,000.00,1.00 +0243,-060.00,+00.00,01.00,000.00,1.00 +0244,-060.00,+00.00,01.00,000.00,1.00 +0245,-060.00,+00.00,01.00,000.00,1.00 +0246,-060.00,+00.00,01.00,000.00,1.00 +0247,-060.00,+00.00,01.00,000.00,1.00 +0248,-060.00,+00.00,01.00,000.00,1.00 +0249,-060.00,+00.00,01.00,000.00,1.00 +0250,-060.00,+00.00,01.00,000.00,1.00 +0251,-060.00,+00.00,01.00,000.00,1.00 +0252,-060.00,+00.00,01.00,000.00,1.00 +0253,-060.00,+00.00,01.00,000.00,1.00 +0254,-060.00,+00.00,01.00,000.00,1.00 +0255,-060.00,+00.00,01.00,000.00,1.00 +0256,-060.00,+00.00,01.00,000.00,1.00 +0257,-060.00,+00.00,01.00,000.00,1.00 +0258,-060.00,+00.00,01.00,000.00,1.00 +0259,-060.00,+00.00,01.00,000.00,1.00 +0260,-060.00,+00.00,01.00,000.00,1.00 +0261,-060.00,+00.00,01.00,000.00,1.00 +0262,-060.00,+00.00,01.00,000.00,1.00 +0263,-060.00,+00.00,01.00,000.00,1.00 +0264,-060.00,+00.00,01.00,000.00,1.00 +0265,-060.00,+00.00,01.00,000.00,1.00 +0266,-060.00,+00.00,01.00,000.00,1.00 +0267,-060.00,+00.00,01.00,000.00,1.00 +0268,-060.00,+00.00,01.00,000.00,1.00 +0269,-060.00,+00.00,01.00,000.00,1.00 +0270,-060.00,+00.00,01.00,000.00,1.00 +0271,-060.00,+00.00,01.00,000.00,1.00 +0272,-060.00,+00.00,01.00,000.00,1.00 +0273,-060.00,+00.00,01.00,000.00,1.00 +0274,-060.00,+00.00,01.00,000.00,1.00 +0275,-060.00,+00.00,01.00,000.00,1.00 +0276,-060.00,+00.00,01.00,000.00,1.00 +0277,-060.00,+00.00,01.00,000.00,1.00 +0278,-060.00,+00.00,01.00,000.00,1.00 +0279,-060.00,+00.00,01.00,000.00,1.00 +0280,-060.00,+00.00,01.00,000.00,1.00 +0281,-060.00,+00.00,01.00,000.00,1.00 +0282,-060.00,+00.00,01.00,000.00,1.00 +0283,-060.00,+00.00,01.00,000.00,1.00 +0284,-060.00,+00.00,01.00,000.00,1.00 +0285,-060.00,+00.00,01.00,000.00,1.00 +0286,-060.00,+00.00,01.00,000.00,1.00 +0287,-060.00,+00.00,01.00,000.00,1.00 +0288,-060.00,+00.00,01.00,000.00,1.00 +0289,-060.00,+00.00,01.00,000.00,1.00 +0290,-060.00,+00.00,01.00,000.00,1.00 +0291,-060.00,+00.00,01.00,000.00,1.00 +0292,-060.00,+00.00,01.00,000.00,1.00 +0293,-060.00,+00.00,01.00,000.00,1.00 +0294,-060.00,+00.00,01.00,000.00,1.00 +0295,-060.00,+00.00,01.00,000.00,1.00 +0296,-060.00,+00.00,01.00,000.00,1.00 +0297,-060.00,+00.00,01.00,000.00,1.00 +0298,-060.00,+00.00,01.00,000.00,1.00 +0299,-060.00,+00.00,01.00,000.00,1.00 +0300,-060.00,+00.00,01.00,000.00,1.00 +0301,-060.00,+00.00,01.00,000.00,1.00 +0302,-060.00,+00.00,01.00,000.00,1.00 +0303,-060.00,+00.00,01.00,000.00,1.00 +0304,-060.00,+00.00,01.00,000.00,1.00 +0305,-060.00,+00.00,01.00,000.00,1.00 +0306,-060.00,+00.00,01.00,000.00,1.00 +0307,-060.00,+00.00,01.00,000.00,1.00 +0308,-060.00,+00.00,01.00,000.00,1.00 +0309,-060.00,+00.00,01.00,000.00,1.00 +0310,-060.00,+00.00,01.00,000.00,1.00 +0311,-060.00,+00.00,01.00,000.00,1.00 +0312,-060.00,+00.00,01.00,000.00,1.00 +0313,-060.00,+00.00,01.00,000.00,1.00 +0314,-060.00,+00.00,01.00,000.00,1.00 +0315,-060.00,+00.00,01.00,000.00,1.00 +0316,-060.00,+00.00,01.00,000.00,1.00 +0317,-060.00,+00.00,01.00,000.00,1.00 +0318,-060.00,+00.00,01.00,000.00,1.00 +0319,-060.00,+00.00,01.00,000.00,1.00 +0320,-060.00,+00.00,01.00,000.00,1.00 +0321,-060.00,+00.00,01.00,000.00,1.00 +0322,-060.00,+00.00,01.00,000.00,1.00 +0323,-060.00,+00.00,01.00,000.00,1.00 +0324,-060.00,+00.00,01.00,000.00,1.00 +0325,-060.00,+00.00,01.00,000.00,1.00 +0326,-060.00,+00.00,01.00,000.00,1.00 +0327,-060.00,+00.00,01.00,000.00,1.00 +0328,-060.00,+00.00,01.00,000.00,1.00 +0329,-060.00,+00.00,01.00,000.00,1.00 +0330,-060.00,+00.00,01.00,000.00,1.00 +0331,-060.00,+00.00,01.00,000.00,1.00 +0332,-060.00,+00.00,01.00,000.00,1.00 +0333,-060.00,+00.00,01.00,000.00,1.00 +0334,-060.00,+00.00,01.00,000.00,1.00 +0335,-060.00,+00.00,01.00,000.00,1.00 +0336,-060.00,+00.00,01.00,000.00,1.00 +0337,-060.00,+00.00,01.00,000.00,1.00 +0338,-060.00,+00.00,01.00,000.00,1.00 +0339,-060.00,+00.00,01.00,000.00,1.00 +0340,-060.00,+00.00,01.00,000.00,1.00 +0341,-060.00,+00.00,01.00,000.00,1.00 +0342,-060.00,+00.00,01.00,000.00,1.00 +0343,-060.00,+00.00,01.00,000.00,1.00 +0344,-060.00,+00.00,01.00,000.00,1.00 +0345,-060.00,+00.00,01.00,000.00,1.00 +0346,-060.00,+00.00,01.00,000.00,1.00 +0347,-060.00,+00.00,01.00,000.00,1.00 +0348,-060.00,+00.00,01.00,000.00,1.00 +0349,-060.00,+00.00,01.00,000.00,1.00 +0350,-060.00,+00.00,01.00,000.00,1.00 +0351,-060.00,+00.00,01.00,000.00,1.00 +0352,-060.00,+00.00,01.00,000.00,1.00 +0353,-060.00,+00.00,01.00,000.00,1.00 +0354,-060.00,+00.00,01.00,000.00,1.00 +0355,-060.00,+00.00,01.00,000.00,1.00 +0356,-060.00,+00.00,01.00,000.00,1.00 +0357,-060.00,+00.00,01.00,000.00,1.00 +0358,-060.00,+00.00,01.00,000.00,1.00 +0359,-060.00,+00.00,01.00,000.00,1.00 +0360,-060.00,+00.00,01.00,000.00,1.00 +0361,-060.00,+00.00,01.00,000.00,1.00 +0362,-060.00,+00.00,01.00,000.00,1.00 +0363,-060.00,+00.00,01.00,000.00,1.00 +0364,-060.00,+00.00,01.00,000.00,1.00 +0365,-060.00,+00.00,01.00,000.00,1.00 +0366,-060.00,+00.00,01.00,000.00,1.00 +0367,-060.00,+00.00,01.00,000.00,1.00 +0368,-060.00,+00.00,01.00,000.00,1.00 +0369,-060.00,+00.00,01.00,000.00,1.00 +0370,-060.00,+00.00,01.00,000.00,1.00 +0371,-060.00,+00.00,01.00,000.00,1.00 +0372,-060.00,+00.00,01.00,000.00,1.00 +0373,-060.00,+00.00,01.00,000.00,1.00 +0374,-060.00,+00.00,01.00,000.00,1.00 +0375,-060.00,+00.00,01.00,000.00,1.00 +0376,-060.00,+00.00,01.00,000.00,1.00 +0377,-060.00,+00.00,01.00,000.00,1.00 +0378,-060.00,+00.00,01.00,000.00,1.00 +0379,-060.00,+00.00,01.00,000.00,1.00 +0380,-060.00,+00.00,01.00,000.00,1.00 +0381,-060.00,+00.00,01.00,000.00,1.00 +0382,-060.00,+00.00,01.00,000.00,1.00 +0383,-060.00,+00.00,01.00,000.00,1.00 +0384,-060.00,+00.00,01.00,000.00,1.00 +0385,-060.00,+00.00,01.00,000.00,1.00 +0386,-060.00,+00.00,01.00,000.00,1.00 +0387,-060.00,+00.00,01.00,000.00,1.00 +0388,-060.00,+00.00,01.00,000.00,1.00 +0389,-060.00,+00.00,01.00,000.00,1.00 +0390,-060.00,+00.00,01.00,000.00,1.00 +0391,-060.00,+00.00,01.00,000.00,1.00 +0392,-060.00,+00.00,01.00,000.00,1.00 +0393,-060.00,+00.00,01.00,000.00,1.00 +0394,-060.00,+00.00,01.00,000.00,1.00 +0395,-060.00,+00.00,01.00,000.00,1.00 +0396,-060.00,+00.00,01.00,000.00,1.00 +0397,-060.00,+00.00,01.00,000.00,1.00 +0398,-060.00,+00.00,01.00,000.00,1.00 +0399,-060.00,+00.00,01.00,000.00,1.00 +0400,-060.00,+00.00,01.00,000.00,1.00 +0401,-060.00,+00.00,01.00,000.00,1.00 +0402,-060.00,+00.00,01.00,000.00,1.00 +0403,-060.00,+00.00,01.00,000.00,1.00 +0404,-060.00,+00.00,01.00,000.00,1.00 +0405,-060.00,+00.00,01.00,000.00,1.00 +0406,-060.00,+00.00,01.00,000.00,1.00 +0407,-060.00,+00.00,01.00,000.00,1.00 +0408,-060.00,+00.00,01.00,000.00,1.00 +0409,-060.00,+00.00,01.00,000.00,1.00 +0410,-060.00,+00.00,01.00,000.00,1.00 +0411,-060.00,+00.00,01.00,000.00,1.00 +0412,-060.00,+00.00,01.00,000.00,1.00 +0413,-060.00,+00.00,01.00,000.00,1.00 +0414,-060.00,+00.00,01.00,000.00,1.00 +0415,-060.00,+00.00,01.00,000.00,1.00 +0416,-060.00,+00.00,01.00,000.00,1.00 +0417,-060.00,+00.00,01.00,000.00,1.00 +0418,-060.00,+00.00,01.00,000.00,1.00 +0419,-060.00,+00.00,01.00,000.00,1.00 +0420,-060.00,+00.00,01.00,000.00,1.00 +0421,-060.00,+00.00,01.00,000.00,1.00 +0422,-060.00,+00.00,01.00,000.00,1.00 +0423,-060.00,+00.00,01.00,000.00,1.00 +0424,-060.00,+00.00,01.00,000.00,1.00 +0425,-060.00,+00.00,01.00,000.00,1.00 +0426,-060.00,+00.00,01.00,000.00,1.00 +0427,-060.00,+00.00,01.00,000.00,1.00 +0428,-060.00,+00.00,01.00,000.00,1.00 +0429,-060.00,+00.00,01.00,000.00,1.00 +0430,-060.00,+00.00,01.00,000.00,1.00 +0431,-060.00,+00.00,01.00,000.00,1.00 +0432,-060.00,+00.00,01.00,000.00,1.00 +0433,-060.00,+00.00,01.00,000.00,1.00 +0434,-060.00,+00.00,01.00,000.00,1.00 +0435,-060.00,+00.00,01.00,000.00,1.00 +0436,-060.00,+00.00,01.00,000.00,1.00 +0437,-060.00,+00.00,01.00,000.00,1.00 +0438,-060.00,+00.00,01.00,000.00,1.00 +0439,-060.00,+00.00,01.00,000.00,1.00 +0440,-060.00,+00.00,01.00,000.00,1.00 +0441,-060.00,+00.00,01.00,000.00,1.00 +0442,-060.00,+00.00,01.00,000.00,1.00 +0443,-060.00,+00.00,01.00,000.00,1.00 +0444,-060.00,+00.00,01.00,000.00,1.00 +0445,-060.00,+00.00,01.00,000.00,1.00 +0446,-060.00,+00.00,01.00,000.00,1.00 +0447,-060.00,+00.00,01.00,000.00,1.00 +0448,-060.00,+00.00,01.00,000.00,1.00 +0449,-060.00,+00.00,01.00,000.00,1.00 +0450,-060.00,+00.00,01.00,000.00,1.00 +0451,-060.00,+00.00,01.00,000.00,1.00 +0452,-060.00,+00.00,01.00,000.00,1.00 +0453,-060.00,+00.00,01.00,000.00,1.00 +0454,-060.00,+00.00,01.00,000.00,1.00 +0455,-060.00,+00.00,01.00,000.00,1.00 +0456,-060.00,+00.00,01.00,000.00,1.00 +0457,-060.00,+00.00,01.00,000.00,1.00 +0458,-060.00,+00.00,01.00,000.00,1.00 +0459,-060.00,+00.00,01.00,000.00,1.00 +0460,-060.00,+00.00,01.00,000.00,1.00 +0461,-060.00,+00.00,01.00,000.00,1.00 +0462,-060.00,+00.00,01.00,000.00,1.00 +0463,-060.00,+00.00,01.00,000.00,1.00 +0464,-060.00,+00.00,01.00,000.00,1.00 +0465,-060.00,+00.00,01.00,000.00,1.00 +0466,-060.00,+00.00,01.00,000.00,1.00 +0467,-060.00,+00.00,01.00,000.00,1.00 +0468,-060.00,+00.00,01.00,000.00,1.00 +0469,-060.00,+00.00,01.00,000.00,1.00 +0470,-060.00,+00.00,01.00,000.00,1.00 +0471,-060.00,+00.00,01.00,000.00,1.00 +0472,-060.00,+00.00,01.00,000.00,1.00 +0473,-060.00,+00.00,01.00,000.00,1.00 +0474,-060.00,+00.00,01.00,000.00,1.00 +0475,-060.00,+00.00,01.00,000.00,1.00 +0476,-060.00,+00.00,01.00,000.00,1.00 +0477,-060.00,+00.00,01.00,000.00,1.00 +0478,-060.00,+00.00,01.00,000.00,1.00 +0479,-060.00,+00.00,01.00,000.00,1.00 +0480,-060.00,+00.00,01.00,000.00,1.00 +0481,-060.00,+00.00,01.00,000.00,1.00 +0482,-060.00,+00.00,01.00,000.00,1.00 +0483,-060.00,+00.00,01.00,000.00,1.00 +0484,-060.00,+00.00,01.00,000.00,1.00 +0485,-060.00,+00.00,01.00,000.00,1.00 +0486,-060.00,+00.00,01.00,000.00,1.00 +0487,-060.00,+00.00,01.00,000.00,1.00 +0488,-060.00,+00.00,01.00,000.00,1.00 +0489,-060.00,+00.00,01.00,000.00,1.00 +0490,-060.00,+00.00,01.00,000.00,1.00 +0491,-060.00,+00.00,01.00,000.00,1.00 +0492,-060.00,+00.00,01.00,000.00,1.00 +0493,-060.00,+00.00,01.00,000.00,1.00 +0494,-060.00,+00.00,01.00,000.00,1.00 +0495,-060.00,+00.00,01.00,000.00,1.00 +0496,-060.00,+00.00,01.00,000.00,1.00 +0497,-060.00,+00.00,01.00,000.00,1.00 +0498,-060.00,+00.00,01.00,000.00,1.00 +0499,-060.00,+00.00,01.00,000.00,1.00 +0500,-060.00,+00.00,01.00,000.00,1.00 +0501,-060.00,+00.00,01.00,000.00,1.00 +0502,-060.00,+00.00,01.00,000.00,1.00 +0503,-060.00,+00.00,01.00,000.00,1.00 +0504,-060.00,+00.00,01.00,000.00,1.00 +0505,-060.00,+00.00,01.00,000.00,1.00 +0506,-060.00,+00.00,01.00,000.00,1.00 +0507,-060.00,+00.00,01.00,000.00,1.00 +0508,-060.00,+00.00,01.00,000.00,1.00 +0509,-060.00,+00.00,01.00,000.00,1.00 +0510,-060.00,+00.00,01.00,000.00,1.00 +0511,-060.00,+00.00,01.00,000.00,1.00 +0512,-060.00,+00.00,01.00,000.00,1.00 +0513,-060.00,+00.00,01.00,000.00,1.00 +0514,-060.00,+00.00,01.00,000.00,1.00 +0515,-060.00,+00.00,01.00,000.00,1.00 +0516,-060.00,+00.00,01.00,000.00,1.00 +0517,-060.00,+00.00,01.00,000.00,1.00 +0518,-060.00,+00.00,01.00,000.00,1.00 +0519,-060.00,+00.00,01.00,000.00,1.00 +0520,-060.00,+00.00,01.00,000.00,1.00 +0521,-060.00,+00.00,01.00,000.00,1.00 +0522,-060.00,+00.00,01.00,000.00,1.00 +0523,-060.00,+00.00,01.00,000.00,1.00 +0524,-060.00,+00.00,01.00,000.00,1.00 +0525,-060.00,+00.00,01.00,000.00,1.00 +0526,-060.00,+00.00,01.00,000.00,1.00 +0527,-060.00,+00.00,01.00,000.00,1.00 +0528,-060.00,+00.00,01.00,000.00,1.00 +0529,-060.00,+00.00,01.00,000.00,1.00 +0530,-060.00,+00.00,01.00,000.00,1.00 +0531,-060.00,+00.00,01.00,000.00,1.00 +0532,-060.00,+00.00,01.00,000.00,1.00 +0533,-060.00,+00.00,01.00,000.00,1.00 +0534,-060.00,+00.00,01.00,000.00,1.00 +0535,-060.00,+00.00,01.00,000.00,1.00 +0536,-060.00,+00.00,01.00,000.00,1.00 +0537,-060.00,+00.00,01.00,000.00,1.00 +0538,-060.00,+00.00,01.00,000.00,1.00 +0539,-060.00,+00.00,01.00,000.00,1.00 +0540,-060.00,+00.00,01.00,000.00,1.00 +0541,-060.00,+00.00,01.00,000.00,1.00 +0542,-060.00,+00.00,01.00,000.00,1.00 +0543,-060.00,+00.00,01.00,000.00,1.00 +0544,-060.00,+00.00,01.00,000.00,1.00 +0545,-060.00,+00.00,01.00,000.00,1.00 +0546,-060.00,+00.00,01.00,000.00,1.00 +0547,-060.00,+00.00,01.00,000.00,1.00 +0548,-060.00,+00.00,01.00,000.00,1.00 +0549,-060.00,+00.00,01.00,000.00,1.00 +0550,-060.00,+00.00,01.00,000.00,1.00 +0551,-060.00,+00.00,01.00,000.00,1.00 +0552,-060.00,+00.00,01.00,000.00,1.00 +0553,-060.00,+00.00,01.00,000.00,1.00 +0554,-060.00,+00.00,01.00,000.00,1.00 +0555,-060.00,+00.00,01.00,000.00,1.00 +0556,-060.00,+00.00,01.00,000.00,1.00 +0557,-060.00,+00.00,01.00,000.00,1.00 +0558,-060.00,+00.00,01.00,000.00,1.00 +0559,-060.00,+00.00,01.00,000.00,1.00 +0560,-060.00,+00.00,01.00,000.00,1.00 +0561,-060.00,+00.00,01.00,000.00,1.00 +0562,-060.00,+00.00,01.00,000.00,1.00 +0563,-060.00,+00.00,01.00,000.00,1.00 +0564,-060.00,+00.00,01.00,000.00,1.00 +0565,-060.00,+00.00,01.00,000.00,1.00 +0566,-060.00,+00.00,01.00,000.00,1.00 +0567,-060.00,+00.00,01.00,000.00,1.00 +0568,-060.00,+00.00,01.00,000.00,1.00 +0569,-060.00,+00.00,01.00,000.00,1.00 +0570,-060.00,+00.00,01.00,000.00,1.00 +0571,-060.00,+00.00,01.00,000.00,1.00 +0572,-060.00,+00.00,01.00,000.00,1.00 +0573,-060.00,+00.00,01.00,000.00,1.00 +0574,-060.00,+00.00,01.00,000.00,1.00 +0575,-060.00,+00.00,01.00,000.00,1.00 +0576,-060.00,+00.00,01.00,000.00,1.00 +0577,-060.00,+00.00,01.00,000.00,1.00 +0578,-060.00,+00.00,01.00,000.00,1.00 +0579,-060.00,+00.00,01.00,000.00,1.00 +0580,-060.00,+00.00,01.00,000.00,1.00 +0581,-060.00,+00.00,01.00,000.00,1.00 +0582,-060.00,+00.00,01.00,000.00,1.00 +0583,-060.00,+00.00,01.00,000.00,1.00 +0584,-060.00,+00.00,01.00,000.00,1.00 +0585,-060.00,+00.00,01.00,000.00,1.00 +0586,-060.00,+00.00,01.00,000.00,1.00 +0587,-060.00,+00.00,01.00,000.00,1.00 +0588,-060.00,+00.00,01.00,000.00,1.00 +0589,-060.00,+00.00,01.00,000.00,1.00 +0590,-060.00,+00.00,01.00,000.00,1.00 +0591,-060.00,+00.00,01.00,000.00,1.00 +0592,-060.00,+00.00,01.00,000.00,1.00 +0593,-060.00,+00.00,01.00,000.00,1.00 +0594,-060.00,+00.00,01.00,000.00,1.00 +0595,-060.00,+00.00,01.00,000.00,1.00 +0596,-060.00,+00.00,01.00,000.00,1.00 +0597,-060.00,+00.00,01.00,000.00,1.00 +0598,-060.00,+00.00,01.00,000.00,1.00 +0599,-060.00,+00.00,01.00,000.00,1.00 +0600,-060.00,+00.00,01.00,000.00,1.00 +0601,-060.00,+00.00,01.00,000.00,1.00 +0602,-060.00,+00.00,01.00,000.00,1.00 +0603,-060.00,+00.00,01.00,000.00,1.00 +0604,-060.00,+00.00,01.00,000.00,1.00 +0605,-060.00,+00.00,01.00,000.00,1.00 +0606,-060.00,+00.00,01.00,000.00,1.00 +0607,-060.00,+00.00,01.00,000.00,1.00 +0608,-060.00,+00.00,01.00,000.00,1.00 +0609,-060.00,+00.00,01.00,000.00,1.00 +0610,-060.00,+00.00,01.00,000.00,1.00 +0611,-060.00,+00.00,01.00,000.00,1.00 +0612,-060.00,+00.00,01.00,000.00,1.00 +0613,-060.00,+00.00,01.00,000.00,1.00 +0614,-060.00,+00.00,01.00,000.00,1.00 +0615,-060.00,+00.00,01.00,000.00,1.00 +0616,-060.00,+00.00,01.00,000.00,1.00 +0617,-060.00,+00.00,01.00,000.00,1.00 +0618,-060.00,+00.00,01.00,000.00,1.00 +0619,-060.00,+00.00,01.00,000.00,1.00 +0620,-060.00,+00.00,01.00,000.00,1.00 +0621,-060.00,+00.00,01.00,000.00,1.00 +0622,-060.00,+00.00,01.00,000.00,1.00 +0623,-060.00,+00.00,01.00,000.00,1.00 +0624,-060.00,+00.00,01.00,000.00,1.00 +0625,-060.00,+00.00,01.00,000.00,1.00 +0626,-060.00,+00.00,01.00,000.00,1.00 +0627,-060.00,+00.00,01.00,000.00,1.00 +0628,-060.00,+00.00,01.00,000.00,1.00 +0629,-060.00,+00.00,01.00,000.00,1.00 +0630,-060.00,+00.00,01.00,000.00,1.00 +0631,-060.00,+00.00,01.00,000.00,1.00 +0632,-060.00,+00.00,01.00,000.00,1.00 +0633,-060.00,+00.00,01.00,000.00,1.00 +0634,-060.00,+00.00,01.00,000.00,1.00 +0635,-060.00,+00.00,01.00,000.00,1.00 +0636,-060.00,+00.00,01.00,000.00,1.00 +0637,-060.00,+00.00,01.00,000.00,1.00 +0638,-060.00,+00.00,01.00,000.00,1.00 +0639,-060.00,+00.00,01.00,000.00,1.00 +0640,-060.00,+00.00,01.00,000.00,1.00 +0641,-060.00,+00.00,01.00,000.00,1.00 +0642,-060.00,+00.00,01.00,000.00,1.00 +0643,-060.00,+00.00,01.00,000.00,1.00 +0644,-060.00,+00.00,01.00,000.00,1.00 +0645,-060.00,+00.00,01.00,000.00,1.00 +0646,-060.00,+00.00,01.00,000.00,1.00 +0647,-060.00,+00.00,01.00,000.00,1.00 +0648,-060.00,+00.00,01.00,000.00,1.00 +0649,-060.00,+00.00,01.00,000.00,1.00 +0650,-060.00,+00.00,01.00,000.00,1.00 +0651,-060.00,+00.00,01.00,000.00,1.00 +0652,-060.00,+00.00,01.00,000.00,1.00 +0653,-060.00,+00.00,01.00,000.00,1.00 +0654,-060.00,+00.00,01.00,000.00,1.00 +0655,-060.00,+00.00,01.00,000.00,1.00 +0656,-060.00,+00.00,01.00,000.00,1.00 +0657,-060.00,+00.00,01.00,000.00,1.00 +0658,-060.00,+00.00,01.00,000.00,1.00 +0659,-060.00,+00.00,01.00,000.00,1.00 +0660,-060.00,+00.00,01.00,000.00,1.00 +0661,-060.00,+00.00,01.00,000.00,1.00 +0662,-060.00,+00.00,01.00,000.00,1.00 +0663,-060.00,+00.00,01.00,000.00,1.00 +0664,-060.00,+00.00,01.00,000.00,1.00 +0665,-060.00,+00.00,01.00,000.00,1.00 +0666,-060.00,+00.00,01.00,000.00,1.00 +0667,-060.00,+00.00,01.00,000.00,1.00 +0668,-060.00,+00.00,01.00,000.00,1.00 +0669,-060.00,+00.00,01.00,000.00,1.00 +0670,-060.00,+00.00,01.00,000.00,1.00 +0671,-060.00,+00.00,01.00,000.00,1.00 +0672,-060.00,+00.00,01.00,000.00,1.00 +0673,-060.00,+00.00,01.00,000.00,1.00 +0674,-060.00,+00.00,01.00,000.00,1.00 +0675,-060.00,+00.00,01.00,000.00,1.00 +0676,-060.00,+00.00,01.00,000.00,1.00 +0677,-060.00,+00.00,01.00,000.00,1.00 +0678,-060.00,+00.00,01.00,000.00,1.00 +0679,-060.00,+00.00,01.00,000.00,1.00 +0680,-060.00,+00.00,01.00,000.00,1.00 +0681,-060.00,+00.00,01.00,000.00,1.00 +0682,-060.00,+00.00,01.00,000.00,1.00 +0683,-060.00,+00.00,01.00,000.00,1.00 +0684,-060.00,+00.00,01.00,000.00,1.00 +0685,-060.00,+00.00,01.00,000.00,1.00 +0686,-060.00,+00.00,01.00,000.00,1.00 +0687,-060.00,+00.00,01.00,000.00,1.00 +0688,-060.00,+00.00,01.00,000.00,1.00 +0689,-060.00,+00.00,01.00,000.00,1.00 +0690,-060.00,+00.00,01.00,000.00,1.00 +0691,-060.00,+00.00,01.00,000.00,1.00 +0692,-060.00,+00.00,01.00,000.00,1.00 +0693,-060.00,+00.00,01.00,000.00,1.00 +0694,-060.00,+00.00,01.00,000.00,1.00 +0695,-060.00,+00.00,01.00,000.00,1.00 +0696,-060.00,+00.00,01.00,000.00,1.00 +0697,-060.00,+00.00,01.00,000.00,1.00 +0698,-060.00,+00.00,01.00,000.00,1.00 +0699,-060.00,+00.00,01.00,000.00,1.00 +0700,-060.00,+00.00,01.00,000.00,1.00 +0701,-060.00,+00.00,01.00,000.00,1.00 +0702,-060.00,+00.00,01.00,000.00,1.00 +0703,-060.00,+00.00,01.00,000.00,1.00 +0704,-060.00,+00.00,01.00,000.00,1.00 +0705,-060.00,+00.00,01.00,000.00,1.00 +0706,-060.00,+00.00,01.00,000.00,1.00 +0707,-060.00,+00.00,01.00,000.00,1.00 +0708,-060.00,+00.00,01.00,000.00,1.00 +0709,-060.00,+00.00,01.00,000.00,1.00 +0710,-060.00,+00.00,01.00,000.00,1.00 +0711,-060.00,+00.00,01.00,000.00,1.00 +0712,-060.00,+00.00,01.00,000.00,1.00 +0713,-060.00,+00.00,01.00,000.00,1.00 +0714,-060.00,+00.00,01.00,000.00,1.00 +0715,-060.00,+00.00,01.00,000.00,1.00 +0716,-060.00,+00.00,01.00,000.00,1.00 +0717,-060.00,+00.00,01.00,000.00,1.00 +0718,-060.00,+00.00,01.00,000.00,1.00 +0719,-060.00,+00.00,01.00,000.00,1.00 +0720,-060.00,+00.00,01.00,000.00,1.00 +0721,-060.00,+00.00,01.00,000.00,1.00 +0722,-060.00,+00.00,01.00,000.00,1.00 +0723,-060.00,+00.00,01.00,000.00,1.00 +0724,-060.00,+00.00,01.00,000.00,1.00 +0725,-060.00,+00.00,01.00,000.00,1.00 +0726,-060.00,+00.00,01.00,000.00,1.00 +0727,-060.00,+00.00,01.00,000.00,1.00 +0728,-060.00,+00.00,01.00,000.00,1.00 +0729,-060.00,+00.00,01.00,000.00,1.00 +0730,-060.00,+00.00,01.00,000.00,1.00 +0731,-060.00,+00.00,01.00,000.00,1.00 +0732,-060.00,+00.00,01.00,000.00,1.00 +0733,-060.00,+00.00,01.00,000.00,1.00 +0734,-060.00,+00.00,01.00,000.00,1.00 +0735,-060.00,+00.00,01.00,000.00,1.00 +0736,-060.00,+00.00,01.00,000.00,1.00 +0737,-060.00,+00.00,01.00,000.00,1.00 +0738,-060.00,+00.00,01.00,000.00,1.00 +0739,-060.00,+00.00,01.00,000.00,1.00 +0740,-060.00,+00.00,01.00,000.00,1.00 +0741,-060.00,+00.00,01.00,000.00,1.00 +0742,-060.00,+00.00,01.00,000.00,1.00 +0743,-060.00,+00.00,01.00,000.00,1.00 +0744,-060.00,+00.00,01.00,000.00,1.00 +0745,-060.00,+00.00,01.00,000.00,1.00 +0746,-060.00,+00.00,01.00,000.00,1.00 +0747,-060.00,+00.00,01.00,000.00,1.00 +0748,-060.00,+00.00,01.00,000.00,1.00 +0749,-060.00,+00.00,01.00,000.00,1.00 +0750,-060.00,+00.00,01.00,000.00,1.00 +0751,-060.00,+00.00,01.00,000.00,1.00 +0752,-060.00,+00.00,01.00,000.00,1.00 +0753,-060.00,+00.00,01.00,000.00,1.00 +0754,-060.00,+00.00,01.00,000.00,1.00 +0755,-060.00,+00.00,01.00,000.00,1.00 +0756,-060.00,+00.00,01.00,000.00,1.00 +0757,-060.00,+00.00,01.00,000.00,1.00 +0758,-060.00,+00.00,01.00,000.00,1.00 +0759,-060.00,+00.00,01.00,000.00,1.00 +0760,-060.00,+00.00,01.00,000.00,1.00 +0761,-060.00,+00.00,01.00,000.00,1.00 +0762,-060.00,+00.00,01.00,000.00,1.00 +0763,-060.00,+00.00,01.00,000.00,1.00 +0764,-060.00,+00.00,01.00,000.00,1.00 +0765,-060.00,+00.00,01.00,000.00,1.00 +0766,-060.00,+00.00,01.00,000.00,1.00 +0767,-060.00,+00.00,01.00,000.00,1.00 +0768,-060.00,+00.00,01.00,000.00,1.00 +0769,-060.00,+00.00,01.00,000.00,1.00 +0770,-060.00,+00.00,01.00,000.00,1.00 +0771,-060.00,+00.00,01.00,000.00,1.00 +0772,-060.00,+00.00,01.00,000.00,1.00 +0773,-060.00,+00.00,01.00,000.00,1.00 +0774,-060.00,+00.00,01.00,000.00,1.00 +0775,-060.00,+00.00,01.00,000.00,1.00 +0776,-060.00,+00.00,01.00,000.00,1.00 +0777,-060.00,+00.00,01.00,000.00,1.00 +0778,-060.00,+00.00,01.00,000.00,1.00 +0779,-060.00,+00.00,01.00,000.00,1.00 +0780,-060.00,+00.00,01.00,000.00,1.00 +0781,-060.00,+00.00,01.00,000.00,1.00 +0782,-060.00,+00.00,01.00,000.00,1.00 +0783,-060.00,+00.00,01.00,000.00,1.00 +0784,-060.00,+00.00,01.00,000.00,1.00 +0785,-060.00,+00.00,01.00,000.00,1.00 +0786,-060.00,+00.00,01.00,000.00,1.00 +0787,-060.00,+00.00,01.00,000.00,1.00 +0788,-060.00,+00.00,01.00,000.00,1.00 +0789,-060.00,+00.00,01.00,000.00,1.00 +0790,-060.00,+00.00,01.00,000.00,1.00 +0791,-060.00,+00.00,01.00,000.00,1.00 +0792,-060.00,+00.00,01.00,000.00,1.00 +0793,-060.00,+00.00,01.00,000.00,1.00 +0794,-060.00,+00.00,01.00,000.00,1.00 +0795,-060.00,+00.00,01.00,000.00,1.00 +0796,-060.00,+00.00,01.00,000.00,1.00 +0797,-060.00,+00.00,01.00,000.00,1.00 +0798,-060.00,+00.00,01.00,000.00,1.00 +0799,-060.00,+00.00,01.00,000.00,1.00 +0800,-060.00,+00.00,01.00,000.00,1.00 +0801,-060.00,+00.00,01.00,000.00,1.00 +0802,-060.00,+00.00,01.00,000.00,1.00 +0803,-060.00,+00.00,01.00,000.00,1.00 +0804,-060.00,+00.00,01.00,000.00,1.00 +0805,-060.00,+00.00,01.00,000.00,1.00 +0806,-060.00,+00.00,01.00,000.00,1.00 +0807,-060.00,+00.00,01.00,000.00,1.00 +0808,-060.00,+00.00,01.00,000.00,1.00 +0809,-060.00,+00.00,01.00,000.00,1.00 +0810,-060.00,+00.00,01.00,000.00,1.00 +0811,-060.00,+00.00,01.00,000.00,1.00 +0812,-060.00,+00.00,01.00,000.00,1.00 +0813,-060.00,+00.00,01.00,000.00,1.00 +0814,-060.00,+00.00,01.00,000.00,1.00 +0815,-060.00,+00.00,01.00,000.00,1.00 +0816,-060.00,+00.00,01.00,000.00,1.00 +0817,-060.00,+00.00,01.00,000.00,1.00 +0818,-060.00,+00.00,01.00,000.00,1.00 +0819,-060.00,+00.00,01.00,000.00,1.00 +0820,-060.00,+00.00,01.00,000.00,1.00 +0821,-060.00,+00.00,01.00,000.00,1.00 +0822,-060.00,+00.00,01.00,000.00,1.00 +0823,-060.00,+00.00,01.00,000.00,1.00 +0824,-060.00,+00.00,01.00,000.00,1.00 +0825,-060.00,+00.00,01.00,000.00,1.00 +0826,-060.00,+00.00,01.00,000.00,1.00 +0827,-060.00,+00.00,01.00,000.00,1.00 +0828,-060.00,+00.00,01.00,000.00,1.00 +0829,-060.00,+00.00,01.00,000.00,1.00 +0830,-060.00,+00.00,01.00,000.00,1.00 +0831,-060.00,+00.00,01.00,000.00,1.00 +0832,-060.00,+00.00,01.00,000.00,1.00 +0833,-060.00,+00.00,01.00,000.00,1.00 +0834,-060.00,+00.00,01.00,000.00,1.00 +0835,-060.00,+00.00,01.00,000.00,1.00 +0836,-060.00,+00.00,01.00,000.00,1.00 +0837,-060.00,+00.00,01.00,000.00,1.00 +0838,-060.00,+00.00,01.00,000.00,1.00 +0839,-060.00,+00.00,01.00,000.00,1.00 +0840,-060.00,+00.00,01.00,000.00,1.00 +0841,-060.00,+00.00,01.00,000.00,1.00 +0842,-060.00,+00.00,01.00,000.00,1.00 +0843,-060.00,+00.00,01.00,000.00,1.00 +0844,-060.00,+00.00,01.00,000.00,1.00 +0845,-060.00,+00.00,01.00,000.00,1.00 +0846,-060.00,+00.00,01.00,000.00,1.00 +0847,-060.00,+00.00,01.00,000.00,1.00 +0848,-060.00,+00.00,01.00,000.00,1.00 +0849,-060.00,+00.00,01.00,000.00,1.00 +0850,-060.00,+00.00,01.00,000.00,1.00 +0851,-060.00,+00.00,01.00,000.00,1.00 +0852,-060.00,+00.00,01.00,000.00,1.00 +0853,-060.00,+00.00,01.00,000.00,1.00 +0854,-060.00,+00.00,01.00,000.00,1.00 +0855,-060.00,+00.00,01.00,000.00,1.00 +0856,-060.00,+00.00,01.00,000.00,1.00 +0857,-060.00,+00.00,01.00,000.00,1.00 +0858,-060.00,+00.00,01.00,000.00,1.00 +0859,-060.00,+00.00,01.00,000.00,1.00 +0860,-060.00,+00.00,01.00,000.00,1.00 +0861,-060.00,+00.00,01.00,000.00,1.00 +0862,-060.00,+00.00,01.00,000.00,1.00 +0863,-060.00,+00.00,01.00,000.00,1.00 +0864,-060.00,+00.00,01.00,000.00,1.00 +0865,-060.00,+00.00,01.00,000.00,1.00 +0866,-060.00,+00.00,01.00,000.00,1.00 +0867,-060.00,+00.00,01.00,000.00,1.00 +0868,-060.00,+00.00,01.00,000.00,1.00 +0869,-060.00,+00.00,01.00,000.00,1.00 +0870,-060.00,+00.00,01.00,000.00,1.00 +0871,-060.00,+00.00,01.00,000.00,1.00 +0872,-060.00,+00.00,01.00,000.00,1.00 +0873,-060.00,+00.00,01.00,000.00,1.00 +0874,-060.00,+00.00,01.00,000.00,1.00 +0875,-060.00,+00.00,01.00,000.00,1.00 +0876,-060.00,+00.00,01.00,000.00,1.00 +0877,-060.00,+00.00,01.00,000.00,1.00 +0878,-060.00,+00.00,01.00,000.00,1.00 +0879,-060.00,+00.00,01.00,000.00,1.00 +0880,-060.00,+00.00,01.00,000.00,1.00 +0881,-060.00,+00.00,01.00,000.00,1.00 +0882,-060.00,+00.00,01.00,000.00,1.00 +0883,-060.00,+00.00,01.00,000.00,1.00 +0884,-060.00,+00.00,01.00,000.00,1.00 +0885,-060.00,+00.00,01.00,000.00,1.00 +0886,-060.00,+00.00,01.00,000.00,1.00 +0887,-060.00,+00.00,01.00,000.00,1.00 +0888,-060.00,+00.00,01.00,000.00,1.00 +0889,-060.00,+00.00,01.00,000.00,1.00 +0890,-060.00,+00.00,01.00,000.00,1.00 +0891,-060.00,+00.00,01.00,000.00,1.00 +0892,-060.00,+00.00,01.00,000.00,1.00 +0893,-060.00,+00.00,01.00,000.00,1.00 +0894,-060.00,+00.00,01.00,000.00,1.00 +0895,-060.00,+00.00,01.00,000.00,1.00 +0896,-060.00,+00.00,01.00,000.00,1.00 +0897,-060.00,+00.00,01.00,000.00,1.00 +0898,-060.00,+00.00,01.00,000.00,1.00 +0899,-060.00,+00.00,01.00,000.00,1.00 +0900,-060.00,+00.00,01.00,000.00,1.00 +0901,-060.00,+00.00,01.00,000.00,1.00 +0902,-060.00,+00.00,01.00,000.00,1.00 +0903,-060.00,+00.00,01.00,000.00,1.00 +0904,-060.00,+00.00,01.00,000.00,1.00 +0905,-060.00,+00.00,01.00,000.00,1.00 +0906,-060.00,+00.00,01.00,000.00,1.00 +0907,-060.00,+00.00,01.00,000.00,1.00 +0908,-060.00,+00.00,01.00,000.00,1.00 +0909,-060.00,+00.00,01.00,000.00,1.00 +0910,-060.00,+00.00,01.00,000.00,1.00 +0911,-060.00,+00.00,01.00,000.00,1.00 +0912,-060.00,+00.00,01.00,000.00,1.00 +0913,-060.00,+00.00,01.00,000.00,1.00 +0914,-060.00,+00.00,01.00,000.00,1.00 +0915,-060.00,+00.00,01.00,000.00,1.00 +0916,-060.00,+00.00,01.00,000.00,1.00 +0917,-060.00,+00.00,01.00,000.00,1.00 +0918,-060.00,+00.00,01.00,000.00,1.00 +0919,-060.00,+00.00,01.00,000.00,1.00 +0920,-060.00,+00.00,01.00,000.00,1.00 +0921,-060.00,+00.00,01.00,000.00,1.00 +0922,-060.00,+00.00,01.00,000.00,1.00 +0923,-060.00,+00.00,01.00,000.00,1.00 +0924,-060.00,+00.00,01.00,000.00,1.00 +0925,-060.00,+00.00,01.00,000.00,1.00 +0926,-060.00,+00.00,01.00,000.00,1.00 +0927,-060.00,+00.00,01.00,000.00,1.00 +0928,-060.00,+00.00,01.00,000.00,1.00 +0929,-060.00,+00.00,01.00,000.00,1.00 +0930,-060.00,+00.00,01.00,000.00,1.00 +0931,-060.00,+00.00,01.00,000.00,1.00 +0932,-060.00,+00.00,01.00,000.00,1.00 +0933,-060.00,+00.00,01.00,000.00,1.00 +0934,-060.00,+00.00,01.00,000.00,1.00 +0935,-060.00,+00.00,01.00,000.00,1.00 +0936,-060.00,+00.00,01.00,000.00,1.00 +0937,-060.00,+00.00,01.00,000.00,1.00 +0938,-060.00,+00.00,01.00,000.00,1.00 +0939,-060.00,+00.00,01.00,000.00,1.00 +0940,-060.00,+00.00,01.00,000.00,1.00 +0941,-060.00,+00.00,01.00,000.00,1.00 +0942,-060.00,+00.00,01.00,000.00,1.00 +0943,-060.00,+00.00,01.00,000.00,1.00 +0944,-060.00,+00.00,01.00,000.00,1.00 +0945,-060.00,+00.00,01.00,000.00,1.00 +0946,-060.00,+00.00,01.00,000.00,1.00 +0947,-060.00,+00.00,01.00,000.00,1.00 +0948,-060.00,+00.00,01.00,000.00,1.00 +0949,-060.00,+00.00,01.00,000.00,1.00 +0950,-060.00,+00.00,01.00,000.00,1.00 +0951,-060.00,+00.00,01.00,000.00,1.00 +0952,-060.00,+00.00,01.00,000.00,1.00 +0953,-060.00,+00.00,01.00,000.00,1.00 +0954,-060.00,+00.00,01.00,000.00,1.00 +0955,-060.00,+00.00,01.00,000.00,1.00 +0956,-060.00,+00.00,01.00,000.00,1.00 +0957,-060.00,+00.00,01.00,000.00,1.00 +0958,-060.00,+00.00,01.00,000.00,1.00 +0959,-060.00,+00.00,01.00,000.00,1.00 +0960,-060.00,+00.00,01.00,000.00,1.00 +0961,-060.00,+00.00,01.00,000.00,1.00 +0962,-060.00,+00.00,01.00,000.00,1.00 +0963,-060.00,+00.00,01.00,000.00,1.00 +0964,-060.00,+00.00,01.00,000.00,1.00 +0965,-060.00,+00.00,01.00,000.00,1.00 +0966,-060.00,+00.00,01.00,000.00,1.00 +0967,-060.00,+00.00,01.00,000.00,1.00 +0968,-060.00,+00.00,01.00,000.00,1.00 +0969,-060.00,+00.00,01.00,000.00,1.00 +0970,-060.00,+00.00,01.00,000.00,1.00 +0971,-060.00,+00.00,01.00,000.00,1.00 +0972,-060.00,+00.00,01.00,000.00,1.00 +0973,-060.00,+00.00,01.00,000.00,1.00 +0974,-060.00,+00.00,01.00,000.00,1.00 +0975,-060.00,+00.00,01.00,000.00,1.00 +0976,-060.00,+00.00,01.00,000.00,1.00 +0977,-060.00,+00.00,01.00,000.00,1.00 +0978,-060.00,+00.00,01.00,000.00,1.00 +0979,-060.00,+00.00,01.00,000.00,1.00 +0980,-060.00,+00.00,01.00,000.00,1.00 +0981,-060.00,+00.00,01.00,000.00,1.00 +0982,-060.00,+00.00,01.00,000.00,1.00 +0983,-060.00,+00.00,01.00,000.00,1.00 +0984,-060.00,+00.00,01.00,000.00,1.00 +0985,-060.00,+00.00,01.00,000.00,1.00 +0986,-060.00,+00.00,01.00,000.00,1.00 +0987,-060.00,+00.00,01.00,000.00,1.00 +0988,-060.00,+00.00,01.00,000.00,1.00 +0989,-060.00,+00.00,01.00,000.00,1.00 +0990,-060.00,+00.00,01.00,000.00,1.00 +0991,-060.00,+00.00,01.00,000.00,1.00 +0992,-060.00,+00.00,01.00,000.00,1.00 +0993,-060.00,+00.00,01.00,000.00,1.00 +0994,-060.00,+00.00,01.00,000.00,1.00 +0995,-060.00,+00.00,01.00,000.00,1.00 +0996,-060.00,+00.00,01.00,000.00,1.00 +0997,-060.00,+00.00,01.00,000.00,1.00 +0998,-060.00,+00.00,01.00,000.00,1.00 +0999,-060.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t05_ch2.csv b/scripts/td_object_renderer/metadata/csv/t05_ch2.csv new file mode 100644 index 0000000000..8a4f928c25 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t05_ch2.csv @@ -0,0 +1,1000 @@ +0000,-020.00,+00.00,01.00,000.00,1.00 +0001,-020.00,+00.00,01.00,000.00,1.00 +0002,-020.00,+00.00,01.00,000.00,1.00 +0003,-020.00,+00.00,01.00,000.00,1.00 +0004,-020.00,+00.00,01.00,000.00,1.00 +0005,-020.00,+00.00,01.00,000.00,1.00 +0006,-020.00,+00.00,01.00,000.00,1.00 +0007,-020.00,+00.00,01.00,000.00,1.00 +0008,-020.00,+00.00,01.00,000.00,1.00 +0009,-020.00,+00.00,01.00,000.00,1.00 +0010,-020.00,+00.00,01.00,000.00,1.00 +0011,-020.00,+00.00,01.00,000.00,1.00 +0012,-020.00,+00.00,01.00,000.00,1.00 +0013,-020.00,+00.00,01.00,000.00,1.00 +0014,-020.00,+00.00,01.00,000.00,1.00 +0015,-020.00,+00.00,01.00,000.00,1.00 +0016,-020.00,+00.00,01.00,000.00,1.00 +0017,-020.00,+00.00,01.00,000.00,1.00 +0018,-020.00,+00.00,01.00,000.00,1.00 +0019,-020.00,+00.00,01.00,000.00,1.00 +0020,-020.00,+00.00,01.00,000.00,1.00 +0021,-020.00,+00.00,01.00,000.00,1.00 +0022,-020.00,+00.00,01.00,000.00,1.00 +0023,-020.00,+00.00,01.00,000.00,1.00 +0024,-020.00,+00.00,01.00,000.00,1.00 +0025,-020.00,+00.00,01.00,000.00,1.00 +0026,-020.00,+00.00,01.00,000.00,1.00 +0027,-020.00,+00.00,01.00,000.00,1.00 +0028,-020.00,+00.00,01.00,000.00,1.00 +0029,-020.00,+00.00,01.00,000.00,1.00 +0030,-020.00,+00.00,01.00,000.00,1.00 +0031,-020.00,+00.00,01.00,000.00,1.00 +0032,-020.00,+00.00,01.00,000.00,1.00 +0033,-020.00,+00.00,01.00,000.00,1.00 +0034,-020.00,+00.00,01.00,000.00,1.00 +0035,-020.00,+00.00,01.00,000.00,1.00 +0036,-020.00,+00.00,01.00,000.00,1.00 +0037,-020.00,+00.00,01.00,000.00,1.00 +0038,-020.00,+00.00,01.00,000.00,1.00 +0039,-020.00,+00.00,01.00,000.00,1.00 +0040,-020.00,+00.00,01.00,000.00,1.00 +0041,-020.00,+00.00,01.00,000.00,1.00 +0042,-020.00,+00.00,01.00,000.00,1.00 +0043,-020.00,+00.00,01.00,000.00,1.00 +0044,-020.00,+00.00,01.00,000.00,1.00 +0045,-020.00,+00.00,01.00,000.00,1.00 +0046,-020.00,+00.00,01.00,000.00,1.00 +0047,-020.00,+00.00,01.00,000.00,1.00 +0048,-020.00,+00.00,01.00,000.00,1.00 +0049,-020.00,+00.00,01.00,000.00,1.00 +0050,-020.00,+00.00,01.00,000.00,1.00 +0051,-020.00,+00.00,01.00,000.00,1.00 +0052,-020.00,+00.00,01.00,000.00,1.00 +0053,-020.00,+00.00,01.00,000.00,1.00 +0054,-020.00,+00.00,01.00,000.00,1.00 +0055,-020.00,+00.00,01.00,000.00,1.00 +0056,-020.00,+00.00,01.00,000.00,1.00 +0057,-020.00,+00.00,01.00,000.00,1.00 +0058,-020.00,+00.00,01.00,000.00,1.00 +0059,-020.00,+00.00,01.00,000.00,1.00 +0060,-020.00,+00.00,01.00,000.00,1.00 +0061,-020.00,+00.00,01.00,000.00,1.00 +0062,-020.00,+00.00,01.00,000.00,1.00 +0063,-020.00,+00.00,01.00,000.00,1.00 +0064,-020.00,+00.00,01.00,000.00,1.00 +0065,-020.00,+00.00,01.00,000.00,1.00 +0066,-020.00,+00.00,01.00,000.00,1.00 +0067,-020.00,+00.00,01.00,000.00,1.00 +0068,-020.00,+00.00,01.00,000.00,1.00 +0069,-020.00,+00.00,01.00,000.00,1.00 +0070,-020.00,+00.00,01.00,000.00,1.00 +0071,-020.00,+00.00,01.00,000.00,1.00 +0072,-020.00,+00.00,01.00,000.00,1.00 +0073,-020.00,+00.00,01.00,000.00,1.00 +0074,-020.00,+00.00,01.00,000.00,1.00 +0075,-020.00,+00.00,01.00,000.00,1.00 +0076,-020.00,+00.00,01.00,000.00,1.00 +0077,-020.00,+00.00,01.00,000.00,1.00 +0078,-020.00,+00.00,01.00,000.00,1.00 +0079,-020.00,+00.00,01.00,000.00,1.00 +0080,-020.00,+00.00,01.00,000.00,1.00 +0081,-020.00,+00.00,01.00,000.00,1.00 +0082,-020.00,+00.00,01.00,000.00,1.00 +0083,-020.00,+00.00,01.00,000.00,1.00 +0084,-020.00,+00.00,01.00,000.00,1.00 +0085,-020.00,+00.00,01.00,000.00,1.00 +0086,-020.00,+00.00,01.00,000.00,1.00 +0087,-020.00,+00.00,01.00,000.00,1.00 +0088,-020.00,+00.00,01.00,000.00,1.00 +0089,-020.00,+00.00,01.00,000.00,1.00 +0090,-020.00,+00.00,01.00,000.00,1.00 +0091,-020.00,+00.00,01.00,000.00,1.00 +0092,-020.00,+00.00,01.00,000.00,1.00 +0093,-020.00,+00.00,01.00,000.00,1.00 +0094,-020.00,+00.00,01.00,000.00,1.00 +0095,-020.00,+00.00,01.00,000.00,1.00 +0096,-020.00,+00.00,01.00,000.00,1.00 +0097,-020.00,+00.00,01.00,000.00,1.00 +0098,-020.00,+00.00,01.00,000.00,1.00 +0099,-020.00,+00.00,01.00,000.00,1.00 +0100,-020.00,+00.00,01.00,000.00,1.00 +0101,-020.00,+00.00,01.00,000.00,1.00 +0102,-020.00,+00.00,01.00,000.00,1.00 +0103,-020.00,+00.00,01.00,000.00,1.00 +0104,-020.00,+00.00,01.00,000.00,1.00 +0105,-020.00,+00.00,01.00,000.00,1.00 +0106,-020.00,+00.00,01.00,000.00,1.00 +0107,-020.00,+00.00,01.00,000.00,1.00 +0108,-020.00,+00.00,01.00,000.00,1.00 +0109,-020.00,+00.00,01.00,000.00,1.00 +0110,-020.00,+00.00,01.00,000.00,1.00 +0111,-020.00,+00.00,01.00,000.00,1.00 +0112,-020.00,+00.00,01.00,000.00,1.00 +0113,-020.00,+00.00,01.00,000.00,1.00 +0114,-020.00,+00.00,01.00,000.00,1.00 +0115,-020.00,+00.00,01.00,000.00,1.00 +0116,-020.00,+00.00,01.00,000.00,1.00 +0117,-020.00,+00.00,01.00,000.00,1.00 +0118,-020.00,+00.00,01.00,000.00,1.00 +0119,-020.00,+00.00,01.00,000.00,1.00 +0120,-020.00,+00.00,01.00,000.00,1.00 +0121,-020.00,+00.00,01.00,000.00,1.00 +0122,-020.00,+00.00,01.00,000.00,1.00 +0123,-020.00,+00.00,01.00,000.00,1.00 +0124,-020.00,+00.00,01.00,000.00,1.00 +0125,-020.00,+00.00,01.00,000.00,1.00 +0126,-020.00,+00.00,01.00,000.00,1.00 +0127,-020.00,+00.00,01.00,000.00,1.00 +0128,-020.00,+00.00,01.00,000.00,1.00 +0129,-020.00,+00.00,01.00,000.00,1.00 +0130,-020.00,+00.00,01.00,000.00,1.00 +0131,-020.00,+00.00,01.00,000.00,1.00 +0132,-020.00,+00.00,01.00,000.00,1.00 +0133,-020.00,+00.00,01.00,000.00,1.00 +0134,-020.00,+00.00,01.00,000.00,1.00 +0135,-020.00,+00.00,01.00,000.00,1.00 +0136,-020.00,+00.00,01.00,000.00,1.00 +0137,-020.00,+00.00,01.00,000.00,1.00 +0138,-020.00,+00.00,01.00,000.00,1.00 +0139,-020.00,+00.00,01.00,000.00,1.00 +0140,-020.00,+00.00,01.00,000.00,1.00 +0141,-020.00,+00.00,01.00,000.00,1.00 +0142,-020.00,+00.00,01.00,000.00,1.00 +0143,-020.00,+00.00,01.00,000.00,1.00 +0144,-020.00,+00.00,01.00,000.00,1.00 +0145,-020.00,+00.00,01.00,000.00,1.00 +0146,-020.00,+00.00,01.00,000.00,1.00 +0147,-020.00,+00.00,01.00,000.00,1.00 +0148,-020.00,+00.00,01.00,000.00,1.00 +0149,-020.00,+00.00,01.00,000.00,1.00 +0150,-020.00,+00.00,01.00,000.00,1.00 +0151,-020.00,+00.00,01.00,000.00,1.00 +0152,-020.00,+00.00,01.00,000.00,1.00 +0153,-020.00,+00.00,01.00,000.00,1.00 +0154,-020.00,+00.00,01.00,000.00,1.00 +0155,-020.00,+00.00,01.00,000.00,1.00 +0156,-020.00,+00.00,01.00,000.00,1.00 +0157,-020.00,+00.00,01.00,000.00,1.00 +0158,-020.00,+00.00,01.00,000.00,1.00 +0159,-020.00,+00.00,01.00,000.00,1.00 +0160,-020.00,+00.00,01.00,000.00,1.00 +0161,-020.00,+00.00,01.00,000.00,1.00 +0162,-020.00,+00.00,01.00,000.00,1.00 +0163,-020.00,+00.00,01.00,000.00,1.00 +0164,-020.00,+00.00,01.00,000.00,1.00 +0165,-020.00,+00.00,01.00,000.00,1.00 +0166,-020.00,+00.00,01.00,000.00,1.00 +0167,-020.00,+00.00,01.00,000.00,1.00 +0168,-020.00,+00.00,01.00,000.00,1.00 +0169,-020.00,+00.00,01.00,000.00,1.00 +0170,-020.00,+00.00,01.00,000.00,1.00 +0171,-020.00,+00.00,01.00,000.00,1.00 +0172,-020.00,+00.00,01.00,000.00,1.00 +0173,-020.00,+00.00,01.00,000.00,1.00 +0174,-020.00,+00.00,01.00,000.00,1.00 +0175,-020.00,+00.00,01.00,000.00,1.00 +0176,-020.00,+00.00,01.00,000.00,1.00 +0177,-020.00,+00.00,01.00,000.00,1.00 +0178,-020.00,+00.00,01.00,000.00,1.00 +0179,-020.00,+00.00,01.00,000.00,1.00 +0180,-020.00,+00.00,01.00,000.00,1.00 +0181,-020.00,+00.00,01.00,000.00,1.00 +0182,-020.00,+00.00,01.00,000.00,1.00 +0183,-020.00,+00.00,01.00,000.00,1.00 +0184,-020.00,+00.00,01.00,000.00,1.00 +0185,-020.00,+00.00,01.00,000.00,1.00 +0186,-020.00,+00.00,01.00,000.00,1.00 +0187,-020.00,+00.00,01.00,000.00,1.00 +0188,-020.00,+00.00,01.00,000.00,1.00 +0189,-020.00,+00.00,01.00,000.00,1.00 +0190,-020.00,+00.00,01.00,000.00,1.00 +0191,-020.00,+00.00,01.00,000.00,1.00 +0192,-020.00,+00.00,01.00,000.00,1.00 +0193,-020.00,+00.00,01.00,000.00,1.00 +0194,-020.00,+00.00,01.00,000.00,1.00 +0195,-020.00,+00.00,01.00,000.00,1.00 +0196,-020.00,+00.00,01.00,000.00,1.00 +0197,-020.00,+00.00,01.00,000.00,1.00 +0198,-020.00,+00.00,01.00,000.00,1.00 +0199,-020.00,+00.00,01.00,000.00,1.00 +0200,-020.00,+00.00,01.00,000.00,1.00 +0201,-020.00,+00.00,01.00,000.00,1.00 +0202,-020.00,+00.00,01.00,000.00,1.00 +0203,-020.00,+00.00,01.00,000.00,1.00 +0204,-020.00,+00.00,01.00,000.00,1.00 +0205,-020.00,+00.00,01.00,000.00,1.00 +0206,-020.00,+00.00,01.00,000.00,1.00 +0207,-020.00,+00.00,01.00,000.00,1.00 +0208,-020.00,+00.00,01.00,000.00,1.00 +0209,-020.00,+00.00,01.00,000.00,1.00 +0210,-020.00,+00.00,01.00,000.00,1.00 +0211,-020.00,+00.00,01.00,000.00,1.00 +0212,-020.00,+00.00,01.00,000.00,1.00 +0213,-020.00,+00.00,01.00,000.00,1.00 +0214,-020.00,+00.00,01.00,000.00,1.00 +0215,-020.00,+00.00,01.00,000.00,1.00 +0216,-020.00,+00.00,01.00,000.00,1.00 +0217,-020.00,+00.00,01.00,000.00,1.00 +0218,-020.00,+00.00,01.00,000.00,1.00 +0219,-020.00,+00.00,01.00,000.00,1.00 +0220,-020.00,+00.00,01.00,000.00,1.00 +0221,-020.00,+00.00,01.00,000.00,1.00 +0222,-020.00,+00.00,01.00,000.00,1.00 +0223,-020.00,+00.00,01.00,000.00,1.00 +0224,-020.00,+00.00,01.00,000.00,1.00 +0225,-020.00,+00.00,01.00,000.00,1.00 +0226,-020.00,+00.00,01.00,000.00,1.00 +0227,-020.00,+00.00,01.00,000.00,1.00 +0228,-020.00,+00.00,01.00,000.00,1.00 +0229,-020.00,+00.00,01.00,000.00,1.00 +0230,-020.00,+00.00,01.00,000.00,1.00 +0231,-020.00,+00.00,01.00,000.00,1.00 +0232,-020.00,+00.00,01.00,000.00,1.00 +0233,-020.00,+00.00,01.00,000.00,1.00 +0234,-020.00,+00.00,01.00,000.00,1.00 +0235,-020.00,+00.00,01.00,000.00,1.00 +0236,-020.00,+00.00,01.00,000.00,1.00 +0237,-020.00,+00.00,01.00,000.00,1.00 +0238,-020.00,+00.00,01.00,000.00,1.00 +0239,-020.00,+00.00,01.00,000.00,1.00 +0240,-020.00,+00.00,01.00,000.00,1.00 +0241,-020.00,+00.00,01.00,000.00,1.00 +0242,-020.00,+00.00,01.00,000.00,1.00 +0243,-020.00,+00.00,01.00,000.00,1.00 +0244,-020.00,+00.00,01.00,000.00,1.00 +0245,-020.00,+00.00,01.00,000.00,1.00 +0246,-020.00,+00.00,01.00,000.00,1.00 +0247,-020.00,+00.00,01.00,000.00,1.00 +0248,-020.00,+00.00,01.00,000.00,1.00 +0249,-020.00,+00.00,01.00,000.00,1.00 +0250,-020.00,+00.00,01.00,000.00,1.00 +0251,-020.00,+00.00,01.00,000.00,1.00 +0252,-020.00,+00.00,01.00,000.00,1.00 +0253,-020.00,+00.00,01.00,000.00,1.00 +0254,-020.00,+00.00,01.00,000.00,1.00 +0255,-020.00,+00.00,01.00,000.00,1.00 +0256,-020.00,+00.00,01.00,000.00,1.00 +0257,-020.00,+00.00,01.00,000.00,1.00 +0258,-020.00,+00.00,01.00,000.00,1.00 +0259,-020.00,+00.00,01.00,000.00,1.00 +0260,-020.00,+00.00,01.00,000.00,1.00 +0261,-020.00,+00.00,01.00,000.00,1.00 +0262,-020.00,+00.00,01.00,000.00,1.00 +0263,-020.00,+00.00,01.00,000.00,1.00 +0264,-020.00,+00.00,01.00,000.00,1.00 +0265,-020.00,+00.00,01.00,000.00,1.00 +0266,-020.00,+00.00,01.00,000.00,1.00 +0267,-020.00,+00.00,01.00,000.00,1.00 +0268,-020.00,+00.00,01.00,000.00,1.00 +0269,-020.00,+00.00,01.00,000.00,1.00 +0270,-020.00,+00.00,01.00,000.00,1.00 +0271,-020.00,+00.00,01.00,000.00,1.00 +0272,-020.00,+00.00,01.00,000.00,1.00 +0273,-020.00,+00.00,01.00,000.00,1.00 +0274,-020.00,+00.00,01.00,000.00,1.00 +0275,-020.00,+00.00,01.00,000.00,1.00 +0276,-020.00,+00.00,01.00,000.00,1.00 +0277,-020.00,+00.00,01.00,000.00,1.00 +0278,-020.00,+00.00,01.00,000.00,1.00 +0279,-020.00,+00.00,01.00,000.00,1.00 +0280,-020.00,+00.00,01.00,000.00,1.00 +0281,-020.00,+00.00,01.00,000.00,1.00 +0282,-020.00,+00.00,01.00,000.00,1.00 +0283,-020.00,+00.00,01.00,000.00,1.00 +0284,-020.00,+00.00,01.00,000.00,1.00 +0285,-020.00,+00.00,01.00,000.00,1.00 +0286,-020.00,+00.00,01.00,000.00,1.00 +0287,-020.00,+00.00,01.00,000.00,1.00 +0288,-020.00,+00.00,01.00,000.00,1.00 +0289,-020.00,+00.00,01.00,000.00,1.00 +0290,-020.00,+00.00,01.00,000.00,1.00 +0291,-020.00,+00.00,01.00,000.00,1.00 +0292,-020.00,+00.00,01.00,000.00,1.00 +0293,-020.00,+00.00,01.00,000.00,1.00 +0294,-020.00,+00.00,01.00,000.00,1.00 +0295,-020.00,+00.00,01.00,000.00,1.00 +0296,-020.00,+00.00,01.00,000.00,1.00 +0297,-020.00,+00.00,01.00,000.00,1.00 +0298,-020.00,+00.00,01.00,000.00,1.00 +0299,-020.00,+00.00,01.00,000.00,1.00 +0300,-020.00,+00.00,01.00,000.00,1.00 +0301,-020.00,+00.00,01.00,000.00,1.00 +0302,-020.00,+00.00,01.00,000.00,1.00 +0303,-020.00,+00.00,01.00,000.00,1.00 +0304,-020.00,+00.00,01.00,000.00,1.00 +0305,-020.00,+00.00,01.00,000.00,1.00 +0306,-020.00,+00.00,01.00,000.00,1.00 +0307,-020.00,+00.00,01.00,000.00,1.00 +0308,-020.00,+00.00,01.00,000.00,1.00 +0309,-020.00,+00.00,01.00,000.00,1.00 +0310,-020.00,+00.00,01.00,000.00,1.00 +0311,-020.00,+00.00,01.00,000.00,1.00 +0312,-020.00,+00.00,01.00,000.00,1.00 +0313,-020.00,+00.00,01.00,000.00,1.00 +0314,-020.00,+00.00,01.00,000.00,1.00 +0315,-020.00,+00.00,01.00,000.00,1.00 +0316,-020.00,+00.00,01.00,000.00,1.00 +0317,-020.00,+00.00,01.00,000.00,1.00 +0318,-020.00,+00.00,01.00,000.00,1.00 +0319,-020.00,+00.00,01.00,000.00,1.00 +0320,-020.00,+00.00,01.00,000.00,1.00 +0321,-020.00,+00.00,01.00,000.00,1.00 +0322,-020.00,+00.00,01.00,000.00,1.00 +0323,-020.00,+00.00,01.00,000.00,1.00 +0324,-020.00,+00.00,01.00,000.00,1.00 +0325,-020.00,+00.00,01.00,000.00,1.00 +0326,-020.00,+00.00,01.00,000.00,1.00 +0327,-020.00,+00.00,01.00,000.00,1.00 +0328,-020.00,+00.00,01.00,000.00,1.00 +0329,-020.00,+00.00,01.00,000.00,1.00 +0330,-020.00,+00.00,01.00,000.00,1.00 +0331,-020.00,+00.00,01.00,000.00,1.00 +0332,-020.00,+00.00,01.00,000.00,1.00 +0333,-020.00,+00.00,01.00,000.00,1.00 +0334,-020.00,+00.00,01.00,000.00,1.00 +0335,-020.00,+00.00,01.00,000.00,1.00 +0336,-020.00,+00.00,01.00,000.00,1.00 +0337,-020.00,+00.00,01.00,000.00,1.00 +0338,-020.00,+00.00,01.00,000.00,1.00 +0339,-020.00,+00.00,01.00,000.00,1.00 +0340,-020.00,+00.00,01.00,000.00,1.00 +0341,-020.00,+00.00,01.00,000.00,1.00 +0342,-020.00,+00.00,01.00,000.00,1.00 +0343,-020.00,+00.00,01.00,000.00,1.00 +0344,-020.00,+00.00,01.00,000.00,1.00 +0345,-020.00,+00.00,01.00,000.00,1.00 +0346,-020.00,+00.00,01.00,000.00,1.00 +0347,-020.00,+00.00,01.00,000.00,1.00 +0348,-020.00,+00.00,01.00,000.00,1.00 +0349,-020.00,+00.00,01.00,000.00,1.00 +0350,-020.00,+00.00,01.00,000.00,1.00 +0351,-020.00,+00.00,01.00,000.00,1.00 +0352,-020.00,+00.00,01.00,000.00,1.00 +0353,-020.00,+00.00,01.00,000.00,1.00 +0354,-020.00,+00.00,01.00,000.00,1.00 +0355,-020.00,+00.00,01.00,000.00,1.00 +0356,-020.00,+00.00,01.00,000.00,1.00 +0357,-020.00,+00.00,01.00,000.00,1.00 +0358,-020.00,+00.00,01.00,000.00,1.00 +0359,-020.00,+00.00,01.00,000.00,1.00 +0360,-020.00,+00.00,01.00,000.00,1.00 +0361,-020.00,+00.00,01.00,000.00,1.00 +0362,-020.00,+00.00,01.00,000.00,1.00 +0363,-020.00,+00.00,01.00,000.00,1.00 +0364,-020.00,+00.00,01.00,000.00,1.00 +0365,-020.00,+00.00,01.00,000.00,1.00 +0366,-020.00,+00.00,01.00,000.00,1.00 +0367,-020.00,+00.00,01.00,000.00,1.00 +0368,-020.00,+00.00,01.00,000.00,1.00 +0369,-020.00,+00.00,01.00,000.00,1.00 +0370,-020.00,+00.00,01.00,000.00,1.00 +0371,-020.00,+00.00,01.00,000.00,1.00 +0372,-020.00,+00.00,01.00,000.00,1.00 +0373,-020.00,+00.00,01.00,000.00,1.00 +0374,-020.00,+00.00,01.00,000.00,1.00 +0375,-020.00,+00.00,01.00,000.00,1.00 +0376,-020.00,+00.00,01.00,000.00,1.00 +0377,-020.00,+00.00,01.00,000.00,1.00 +0378,-020.00,+00.00,01.00,000.00,1.00 +0379,-020.00,+00.00,01.00,000.00,1.00 +0380,-020.00,+00.00,01.00,000.00,1.00 +0381,-020.00,+00.00,01.00,000.00,1.00 +0382,-020.00,+00.00,01.00,000.00,1.00 +0383,-020.00,+00.00,01.00,000.00,1.00 +0384,-020.00,+00.00,01.00,000.00,1.00 +0385,-020.00,+00.00,01.00,000.00,1.00 +0386,-020.00,+00.00,01.00,000.00,1.00 +0387,-020.00,+00.00,01.00,000.00,1.00 +0388,-020.00,+00.00,01.00,000.00,1.00 +0389,-020.00,+00.00,01.00,000.00,1.00 +0390,-020.00,+00.00,01.00,000.00,1.00 +0391,-020.00,+00.00,01.00,000.00,1.00 +0392,-020.00,+00.00,01.00,000.00,1.00 +0393,-020.00,+00.00,01.00,000.00,1.00 +0394,-020.00,+00.00,01.00,000.00,1.00 +0395,-020.00,+00.00,01.00,000.00,1.00 +0396,-020.00,+00.00,01.00,000.00,1.00 +0397,-020.00,+00.00,01.00,000.00,1.00 +0398,-020.00,+00.00,01.00,000.00,1.00 +0399,-020.00,+00.00,01.00,000.00,1.00 +0400,-020.00,+00.00,01.00,000.00,1.00 +0401,-020.00,+00.00,01.00,000.00,1.00 +0402,-020.00,+00.00,01.00,000.00,1.00 +0403,-020.00,+00.00,01.00,000.00,1.00 +0404,-020.00,+00.00,01.00,000.00,1.00 +0405,-020.00,+00.00,01.00,000.00,1.00 +0406,-020.00,+00.00,01.00,000.00,1.00 +0407,-020.00,+00.00,01.00,000.00,1.00 +0408,-020.00,+00.00,01.00,000.00,1.00 +0409,-020.00,+00.00,01.00,000.00,1.00 +0410,-020.00,+00.00,01.00,000.00,1.00 +0411,-020.00,+00.00,01.00,000.00,1.00 +0412,-020.00,+00.00,01.00,000.00,1.00 +0413,-020.00,+00.00,01.00,000.00,1.00 +0414,-020.00,+00.00,01.00,000.00,1.00 +0415,-020.00,+00.00,01.00,000.00,1.00 +0416,-020.00,+00.00,01.00,000.00,1.00 +0417,-020.00,+00.00,01.00,000.00,1.00 +0418,-020.00,+00.00,01.00,000.00,1.00 +0419,-020.00,+00.00,01.00,000.00,1.00 +0420,-020.00,+00.00,01.00,000.00,1.00 +0421,-020.00,+00.00,01.00,000.00,1.00 +0422,-020.00,+00.00,01.00,000.00,1.00 +0423,-020.00,+00.00,01.00,000.00,1.00 +0424,-020.00,+00.00,01.00,000.00,1.00 +0425,-020.00,+00.00,01.00,000.00,1.00 +0426,-020.00,+00.00,01.00,000.00,1.00 +0427,-020.00,+00.00,01.00,000.00,1.00 +0428,-020.00,+00.00,01.00,000.00,1.00 +0429,-020.00,+00.00,01.00,000.00,1.00 +0430,-020.00,+00.00,01.00,000.00,1.00 +0431,-020.00,+00.00,01.00,000.00,1.00 +0432,-020.00,+00.00,01.00,000.00,1.00 +0433,-020.00,+00.00,01.00,000.00,1.00 +0434,-020.00,+00.00,01.00,000.00,1.00 +0435,-020.00,+00.00,01.00,000.00,1.00 +0436,-020.00,+00.00,01.00,000.00,1.00 +0437,-020.00,+00.00,01.00,000.00,1.00 +0438,-020.00,+00.00,01.00,000.00,1.00 +0439,-020.00,+00.00,01.00,000.00,1.00 +0440,-020.00,+00.00,01.00,000.00,1.00 +0441,-020.00,+00.00,01.00,000.00,1.00 +0442,-020.00,+00.00,01.00,000.00,1.00 +0443,-020.00,+00.00,01.00,000.00,1.00 +0444,-020.00,+00.00,01.00,000.00,1.00 +0445,-020.00,+00.00,01.00,000.00,1.00 +0446,-020.00,+00.00,01.00,000.00,1.00 +0447,-020.00,+00.00,01.00,000.00,1.00 +0448,-020.00,+00.00,01.00,000.00,1.00 +0449,-020.00,+00.00,01.00,000.00,1.00 +0450,-020.00,+00.00,01.00,000.00,1.00 +0451,-020.00,+00.00,01.00,000.00,1.00 +0452,-020.00,+00.00,01.00,000.00,1.00 +0453,-020.00,+00.00,01.00,000.00,1.00 +0454,-020.00,+00.00,01.00,000.00,1.00 +0455,-020.00,+00.00,01.00,000.00,1.00 +0456,-020.00,+00.00,01.00,000.00,1.00 +0457,-020.00,+00.00,01.00,000.00,1.00 +0458,-020.00,+00.00,01.00,000.00,1.00 +0459,-020.00,+00.00,01.00,000.00,1.00 +0460,-020.00,+00.00,01.00,000.00,1.00 +0461,-020.00,+00.00,01.00,000.00,1.00 +0462,-020.00,+00.00,01.00,000.00,1.00 +0463,-020.00,+00.00,01.00,000.00,1.00 +0464,-020.00,+00.00,01.00,000.00,1.00 +0465,-020.00,+00.00,01.00,000.00,1.00 +0466,-020.00,+00.00,01.00,000.00,1.00 +0467,-020.00,+00.00,01.00,000.00,1.00 +0468,-020.00,+00.00,01.00,000.00,1.00 +0469,-020.00,+00.00,01.00,000.00,1.00 +0470,-020.00,+00.00,01.00,000.00,1.00 +0471,-020.00,+00.00,01.00,000.00,1.00 +0472,-020.00,+00.00,01.00,000.00,1.00 +0473,-020.00,+00.00,01.00,000.00,1.00 +0474,-020.00,+00.00,01.00,000.00,1.00 +0475,-020.00,+00.00,01.00,000.00,1.00 +0476,-020.00,+00.00,01.00,000.00,1.00 +0477,-020.00,+00.00,01.00,000.00,1.00 +0478,-020.00,+00.00,01.00,000.00,1.00 +0479,-020.00,+00.00,01.00,000.00,1.00 +0480,-020.00,+00.00,01.00,000.00,1.00 +0481,-020.00,+00.00,01.00,000.00,1.00 +0482,-020.00,+00.00,01.00,000.00,1.00 +0483,-020.00,+00.00,01.00,000.00,1.00 +0484,-020.00,+00.00,01.00,000.00,1.00 +0485,-020.00,+00.00,01.00,000.00,1.00 +0486,-020.00,+00.00,01.00,000.00,1.00 +0487,-020.00,+00.00,01.00,000.00,1.00 +0488,-020.00,+00.00,01.00,000.00,1.00 +0489,-020.00,+00.00,01.00,000.00,1.00 +0490,-020.00,+00.00,01.00,000.00,1.00 +0491,-020.00,+00.00,01.00,000.00,1.00 +0492,-020.00,+00.00,01.00,000.00,1.00 +0493,-020.00,+00.00,01.00,000.00,1.00 +0494,-020.00,+00.00,01.00,000.00,1.00 +0495,-020.00,+00.00,01.00,000.00,1.00 +0496,-020.00,+00.00,01.00,000.00,1.00 +0497,-020.00,+00.00,01.00,000.00,1.00 +0498,-020.00,+00.00,01.00,000.00,1.00 +0499,-020.00,+00.00,01.00,000.00,1.00 +0500,-020.00,+00.00,01.00,000.00,1.00 +0501,-020.00,+00.00,01.00,000.00,1.00 +0502,-020.00,+00.00,01.00,000.00,1.00 +0503,-020.00,+00.00,01.00,000.00,1.00 +0504,-020.00,+00.00,01.00,000.00,1.00 +0505,-020.00,+00.00,01.00,000.00,1.00 +0506,-020.00,+00.00,01.00,000.00,1.00 +0507,-020.00,+00.00,01.00,000.00,1.00 +0508,-020.00,+00.00,01.00,000.00,1.00 +0509,-020.00,+00.00,01.00,000.00,1.00 +0510,-020.00,+00.00,01.00,000.00,1.00 +0511,-020.00,+00.00,01.00,000.00,1.00 +0512,-020.00,+00.00,01.00,000.00,1.00 +0513,-020.00,+00.00,01.00,000.00,1.00 +0514,-020.00,+00.00,01.00,000.00,1.00 +0515,-020.00,+00.00,01.00,000.00,1.00 +0516,-020.00,+00.00,01.00,000.00,1.00 +0517,-020.00,+00.00,01.00,000.00,1.00 +0518,-020.00,+00.00,01.00,000.00,1.00 +0519,-020.00,+00.00,01.00,000.00,1.00 +0520,-020.00,+00.00,01.00,000.00,1.00 +0521,-020.00,+00.00,01.00,000.00,1.00 +0522,-020.00,+00.00,01.00,000.00,1.00 +0523,-020.00,+00.00,01.00,000.00,1.00 +0524,-020.00,+00.00,01.00,000.00,1.00 +0525,-020.00,+00.00,01.00,000.00,1.00 +0526,-020.00,+00.00,01.00,000.00,1.00 +0527,-020.00,+00.00,01.00,000.00,1.00 +0528,-020.00,+00.00,01.00,000.00,1.00 +0529,-020.00,+00.00,01.00,000.00,1.00 +0530,-020.00,+00.00,01.00,000.00,1.00 +0531,-020.00,+00.00,01.00,000.00,1.00 +0532,-020.00,+00.00,01.00,000.00,1.00 +0533,-020.00,+00.00,01.00,000.00,1.00 +0534,-020.00,+00.00,01.00,000.00,1.00 +0535,-020.00,+00.00,01.00,000.00,1.00 +0536,-020.00,+00.00,01.00,000.00,1.00 +0537,-020.00,+00.00,01.00,000.00,1.00 +0538,-020.00,+00.00,01.00,000.00,1.00 +0539,-020.00,+00.00,01.00,000.00,1.00 +0540,-020.00,+00.00,01.00,000.00,1.00 +0541,-020.00,+00.00,01.00,000.00,1.00 +0542,-020.00,+00.00,01.00,000.00,1.00 +0543,-020.00,+00.00,01.00,000.00,1.00 +0544,-020.00,+00.00,01.00,000.00,1.00 +0545,-020.00,+00.00,01.00,000.00,1.00 +0546,-020.00,+00.00,01.00,000.00,1.00 +0547,-020.00,+00.00,01.00,000.00,1.00 +0548,-020.00,+00.00,01.00,000.00,1.00 +0549,-020.00,+00.00,01.00,000.00,1.00 +0550,-020.00,+00.00,01.00,000.00,1.00 +0551,-020.00,+00.00,01.00,000.00,1.00 +0552,-020.00,+00.00,01.00,000.00,1.00 +0553,-020.00,+00.00,01.00,000.00,1.00 +0554,-020.00,+00.00,01.00,000.00,1.00 +0555,-020.00,+00.00,01.00,000.00,1.00 +0556,-020.00,+00.00,01.00,000.00,1.00 +0557,-020.00,+00.00,01.00,000.00,1.00 +0558,-020.00,+00.00,01.00,000.00,1.00 +0559,-020.00,+00.00,01.00,000.00,1.00 +0560,-020.00,+00.00,01.00,000.00,1.00 +0561,-020.00,+00.00,01.00,000.00,1.00 +0562,-020.00,+00.00,01.00,000.00,1.00 +0563,-020.00,+00.00,01.00,000.00,1.00 +0564,-020.00,+00.00,01.00,000.00,1.00 +0565,-020.00,+00.00,01.00,000.00,1.00 +0566,-020.00,+00.00,01.00,000.00,1.00 +0567,-020.00,+00.00,01.00,000.00,1.00 +0568,-020.00,+00.00,01.00,000.00,1.00 +0569,-020.00,+00.00,01.00,000.00,1.00 +0570,-020.00,+00.00,01.00,000.00,1.00 +0571,-020.00,+00.00,01.00,000.00,1.00 +0572,-020.00,+00.00,01.00,000.00,1.00 +0573,-020.00,+00.00,01.00,000.00,1.00 +0574,-020.00,+00.00,01.00,000.00,1.00 +0575,-020.00,+00.00,01.00,000.00,1.00 +0576,-020.00,+00.00,01.00,000.00,1.00 +0577,-020.00,+00.00,01.00,000.00,1.00 +0578,-020.00,+00.00,01.00,000.00,1.00 +0579,-020.00,+00.00,01.00,000.00,1.00 +0580,-020.00,+00.00,01.00,000.00,1.00 +0581,-020.00,+00.00,01.00,000.00,1.00 +0582,-020.00,+00.00,01.00,000.00,1.00 +0583,-020.00,+00.00,01.00,000.00,1.00 +0584,-020.00,+00.00,01.00,000.00,1.00 +0585,-020.00,+00.00,01.00,000.00,1.00 +0586,-020.00,+00.00,01.00,000.00,1.00 +0587,-020.00,+00.00,01.00,000.00,1.00 +0588,-020.00,+00.00,01.00,000.00,1.00 +0589,-020.00,+00.00,01.00,000.00,1.00 +0590,-020.00,+00.00,01.00,000.00,1.00 +0591,-020.00,+00.00,01.00,000.00,1.00 +0592,-020.00,+00.00,01.00,000.00,1.00 +0593,-020.00,+00.00,01.00,000.00,1.00 +0594,-020.00,+00.00,01.00,000.00,1.00 +0595,-020.00,+00.00,01.00,000.00,1.00 +0596,-020.00,+00.00,01.00,000.00,1.00 +0597,-020.00,+00.00,01.00,000.00,1.00 +0598,-020.00,+00.00,01.00,000.00,1.00 +0599,-020.00,+00.00,01.00,000.00,1.00 +0600,-020.00,+00.00,01.00,000.00,1.00 +0601,-020.00,+00.00,01.00,000.00,1.00 +0602,-020.00,+00.00,01.00,000.00,1.00 +0603,-020.00,+00.00,01.00,000.00,1.00 +0604,-020.00,+00.00,01.00,000.00,1.00 +0605,-020.00,+00.00,01.00,000.00,1.00 +0606,-020.00,+00.00,01.00,000.00,1.00 +0607,-020.00,+00.00,01.00,000.00,1.00 +0608,-020.00,+00.00,01.00,000.00,1.00 +0609,-020.00,+00.00,01.00,000.00,1.00 +0610,-020.00,+00.00,01.00,000.00,1.00 +0611,-020.00,+00.00,01.00,000.00,1.00 +0612,-020.00,+00.00,01.00,000.00,1.00 +0613,-020.00,+00.00,01.00,000.00,1.00 +0614,-020.00,+00.00,01.00,000.00,1.00 +0615,-020.00,+00.00,01.00,000.00,1.00 +0616,-020.00,+00.00,01.00,000.00,1.00 +0617,-020.00,+00.00,01.00,000.00,1.00 +0618,-020.00,+00.00,01.00,000.00,1.00 +0619,-020.00,+00.00,01.00,000.00,1.00 +0620,-020.00,+00.00,01.00,000.00,1.00 +0621,-020.00,+00.00,01.00,000.00,1.00 +0622,-020.00,+00.00,01.00,000.00,1.00 +0623,-020.00,+00.00,01.00,000.00,1.00 +0624,-020.00,+00.00,01.00,000.00,1.00 +0625,-020.00,+00.00,01.00,000.00,1.00 +0626,-020.00,+00.00,01.00,000.00,1.00 +0627,-020.00,+00.00,01.00,000.00,1.00 +0628,-020.00,+00.00,01.00,000.00,1.00 +0629,-020.00,+00.00,01.00,000.00,1.00 +0630,-020.00,+00.00,01.00,000.00,1.00 +0631,-020.00,+00.00,01.00,000.00,1.00 +0632,-020.00,+00.00,01.00,000.00,1.00 +0633,-020.00,+00.00,01.00,000.00,1.00 +0634,-020.00,+00.00,01.00,000.00,1.00 +0635,-020.00,+00.00,01.00,000.00,1.00 +0636,-020.00,+00.00,01.00,000.00,1.00 +0637,-020.00,+00.00,01.00,000.00,1.00 +0638,-020.00,+00.00,01.00,000.00,1.00 +0639,-020.00,+00.00,01.00,000.00,1.00 +0640,-020.00,+00.00,01.00,000.00,1.00 +0641,-020.00,+00.00,01.00,000.00,1.00 +0642,-020.00,+00.00,01.00,000.00,1.00 +0643,-020.00,+00.00,01.00,000.00,1.00 +0644,-020.00,+00.00,01.00,000.00,1.00 +0645,-020.00,+00.00,01.00,000.00,1.00 +0646,-020.00,+00.00,01.00,000.00,1.00 +0647,-020.00,+00.00,01.00,000.00,1.00 +0648,-020.00,+00.00,01.00,000.00,1.00 +0649,-020.00,+00.00,01.00,000.00,1.00 +0650,-020.00,+00.00,01.00,000.00,1.00 +0651,-020.00,+00.00,01.00,000.00,1.00 +0652,-020.00,+00.00,01.00,000.00,1.00 +0653,-020.00,+00.00,01.00,000.00,1.00 +0654,-020.00,+00.00,01.00,000.00,1.00 +0655,-020.00,+00.00,01.00,000.00,1.00 +0656,-020.00,+00.00,01.00,000.00,1.00 +0657,-020.00,+00.00,01.00,000.00,1.00 +0658,-020.00,+00.00,01.00,000.00,1.00 +0659,-020.00,+00.00,01.00,000.00,1.00 +0660,-020.00,+00.00,01.00,000.00,1.00 +0661,-020.00,+00.00,01.00,000.00,1.00 +0662,-020.00,+00.00,01.00,000.00,1.00 +0663,-020.00,+00.00,01.00,000.00,1.00 +0664,-020.00,+00.00,01.00,000.00,1.00 +0665,-020.00,+00.00,01.00,000.00,1.00 +0666,-020.00,+00.00,01.00,000.00,1.00 +0667,-020.00,+00.00,01.00,000.00,1.00 +0668,-020.00,+00.00,01.00,000.00,1.00 +0669,-020.00,+00.00,01.00,000.00,1.00 +0670,-020.00,+00.00,01.00,000.00,1.00 +0671,-020.00,+00.00,01.00,000.00,1.00 +0672,-020.00,+00.00,01.00,000.00,1.00 +0673,-020.00,+00.00,01.00,000.00,1.00 +0674,-020.00,+00.00,01.00,000.00,1.00 +0675,-020.00,+00.00,01.00,000.00,1.00 +0676,-020.00,+00.00,01.00,000.00,1.00 +0677,-020.00,+00.00,01.00,000.00,1.00 +0678,-020.00,+00.00,01.00,000.00,1.00 +0679,-020.00,+00.00,01.00,000.00,1.00 +0680,-020.00,+00.00,01.00,000.00,1.00 +0681,-020.00,+00.00,01.00,000.00,1.00 +0682,-020.00,+00.00,01.00,000.00,1.00 +0683,-020.00,+00.00,01.00,000.00,1.00 +0684,-020.00,+00.00,01.00,000.00,1.00 +0685,-020.00,+00.00,01.00,000.00,1.00 +0686,-020.00,+00.00,01.00,000.00,1.00 +0687,-020.00,+00.00,01.00,000.00,1.00 +0688,-020.00,+00.00,01.00,000.00,1.00 +0689,-020.00,+00.00,01.00,000.00,1.00 +0690,-020.00,+00.00,01.00,000.00,1.00 +0691,-020.00,+00.00,01.00,000.00,1.00 +0692,-020.00,+00.00,01.00,000.00,1.00 +0693,-020.00,+00.00,01.00,000.00,1.00 +0694,-020.00,+00.00,01.00,000.00,1.00 +0695,-020.00,+00.00,01.00,000.00,1.00 +0696,-020.00,+00.00,01.00,000.00,1.00 +0697,-020.00,+00.00,01.00,000.00,1.00 +0698,-020.00,+00.00,01.00,000.00,1.00 +0699,-020.00,+00.00,01.00,000.00,1.00 +0700,-020.00,+00.00,01.00,000.00,1.00 +0701,-020.00,+00.00,01.00,000.00,1.00 +0702,-020.00,+00.00,01.00,000.00,1.00 +0703,-020.00,+00.00,01.00,000.00,1.00 +0704,-020.00,+00.00,01.00,000.00,1.00 +0705,-020.00,+00.00,01.00,000.00,1.00 +0706,-020.00,+00.00,01.00,000.00,1.00 +0707,-020.00,+00.00,01.00,000.00,1.00 +0708,-020.00,+00.00,01.00,000.00,1.00 +0709,-020.00,+00.00,01.00,000.00,1.00 +0710,-020.00,+00.00,01.00,000.00,1.00 +0711,-020.00,+00.00,01.00,000.00,1.00 +0712,-020.00,+00.00,01.00,000.00,1.00 +0713,-020.00,+00.00,01.00,000.00,1.00 +0714,-020.00,+00.00,01.00,000.00,1.00 +0715,-020.00,+00.00,01.00,000.00,1.00 +0716,-020.00,+00.00,01.00,000.00,1.00 +0717,-020.00,+00.00,01.00,000.00,1.00 +0718,-020.00,+00.00,01.00,000.00,1.00 +0719,-020.00,+00.00,01.00,000.00,1.00 +0720,-020.00,+00.00,01.00,000.00,1.00 +0721,-020.00,+00.00,01.00,000.00,1.00 +0722,-020.00,+00.00,01.00,000.00,1.00 +0723,-020.00,+00.00,01.00,000.00,1.00 +0724,-020.00,+00.00,01.00,000.00,1.00 +0725,-020.00,+00.00,01.00,000.00,1.00 +0726,-020.00,+00.00,01.00,000.00,1.00 +0727,-020.00,+00.00,01.00,000.00,1.00 +0728,-020.00,+00.00,01.00,000.00,1.00 +0729,-020.00,+00.00,01.00,000.00,1.00 +0730,-020.00,+00.00,01.00,000.00,1.00 +0731,-020.00,+00.00,01.00,000.00,1.00 +0732,-020.00,+00.00,01.00,000.00,1.00 +0733,-020.00,+00.00,01.00,000.00,1.00 +0734,-020.00,+00.00,01.00,000.00,1.00 +0735,-020.00,+00.00,01.00,000.00,1.00 +0736,-020.00,+00.00,01.00,000.00,1.00 +0737,-020.00,+00.00,01.00,000.00,1.00 +0738,-020.00,+00.00,01.00,000.00,1.00 +0739,-020.00,+00.00,01.00,000.00,1.00 +0740,-020.00,+00.00,01.00,000.00,1.00 +0741,-020.00,+00.00,01.00,000.00,1.00 +0742,-020.00,+00.00,01.00,000.00,1.00 +0743,-020.00,+00.00,01.00,000.00,1.00 +0744,-020.00,+00.00,01.00,000.00,1.00 +0745,-020.00,+00.00,01.00,000.00,1.00 +0746,-020.00,+00.00,01.00,000.00,1.00 +0747,-020.00,+00.00,01.00,000.00,1.00 +0748,-020.00,+00.00,01.00,000.00,1.00 +0749,-020.00,+00.00,01.00,000.00,1.00 +0750,-020.00,+00.00,01.00,000.00,1.00 +0751,-020.00,+00.00,01.00,000.00,1.00 +0752,-020.00,+00.00,01.00,000.00,1.00 +0753,-020.00,+00.00,01.00,000.00,1.00 +0754,-020.00,+00.00,01.00,000.00,1.00 +0755,-020.00,+00.00,01.00,000.00,1.00 +0756,-020.00,+00.00,01.00,000.00,1.00 +0757,-020.00,+00.00,01.00,000.00,1.00 +0758,-020.00,+00.00,01.00,000.00,1.00 +0759,-020.00,+00.00,01.00,000.00,1.00 +0760,-020.00,+00.00,01.00,000.00,1.00 +0761,-020.00,+00.00,01.00,000.00,1.00 +0762,-020.00,+00.00,01.00,000.00,1.00 +0763,-020.00,+00.00,01.00,000.00,1.00 +0764,-020.00,+00.00,01.00,000.00,1.00 +0765,-020.00,+00.00,01.00,000.00,1.00 +0766,-020.00,+00.00,01.00,000.00,1.00 +0767,-020.00,+00.00,01.00,000.00,1.00 +0768,-020.00,+00.00,01.00,000.00,1.00 +0769,-020.00,+00.00,01.00,000.00,1.00 +0770,-020.00,+00.00,01.00,000.00,1.00 +0771,-020.00,+00.00,01.00,000.00,1.00 +0772,-020.00,+00.00,01.00,000.00,1.00 +0773,-020.00,+00.00,01.00,000.00,1.00 +0774,-020.00,+00.00,01.00,000.00,1.00 +0775,-020.00,+00.00,01.00,000.00,1.00 +0776,-020.00,+00.00,01.00,000.00,1.00 +0777,-020.00,+00.00,01.00,000.00,1.00 +0778,-020.00,+00.00,01.00,000.00,1.00 +0779,-020.00,+00.00,01.00,000.00,1.00 +0780,-020.00,+00.00,01.00,000.00,1.00 +0781,-020.00,+00.00,01.00,000.00,1.00 +0782,-020.00,+00.00,01.00,000.00,1.00 +0783,-020.00,+00.00,01.00,000.00,1.00 +0784,-020.00,+00.00,01.00,000.00,1.00 +0785,-020.00,+00.00,01.00,000.00,1.00 +0786,-020.00,+00.00,01.00,000.00,1.00 +0787,-020.00,+00.00,01.00,000.00,1.00 +0788,-020.00,+00.00,01.00,000.00,1.00 +0789,-020.00,+00.00,01.00,000.00,1.00 +0790,-020.00,+00.00,01.00,000.00,1.00 +0791,-020.00,+00.00,01.00,000.00,1.00 +0792,-020.00,+00.00,01.00,000.00,1.00 +0793,-020.00,+00.00,01.00,000.00,1.00 +0794,-020.00,+00.00,01.00,000.00,1.00 +0795,-020.00,+00.00,01.00,000.00,1.00 +0796,-020.00,+00.00,01.00,000.00,1.00 +0797,-020.00,+00.00,01.00,000.00,1.00 +0798,-020.00,+00.00,01.00,000.00,1.00 +0799,-020.00,+00.00,01.00,000.00,1.00 +0800,-020.00,+00.00,01.00,000.00,1.00 +0801,-020.00,+00.00,01.00,000.00,1.00 +0802,-020.00,+00.00,01.00,000.00,1.00 +0803,-020.00,+00.00,01.00,000.00,1.00 +0804,-020.00,+00.00,01.00,000.00,1.00 +0805,-020.00,+00.00,01.00,000.00,1.00 +0806,-020.00,+00.00,01.00,000.00,1.00 +0807,-020.00,+00.00,01.00,000.00,1.00 +0808,-020.00,+00.00,01.00,000.00,1.00 +0809,-020.00,+00.00,01.00,000.00,1.00 +0810,-020.00,+00.00,01.00,000.00,1.00 +0811,-020.00,+00.00,01.00,000.00,1.00 +0812,-020.00,+00.00,01.00,000.00,1.00 +0813,-020.00,+00.00,01.00,000.00,1.00 +0814,-020.00,+00.00,01.00,000.00,1.00 +0815,-020.00,+00.00,01.00,000.00,1.00 +0816,-020.00,+00.00,01.00,000.00,1.00 +0817,-020.00,+00.00,01.00,000.00,1.00 +0818,-020.00,+00.00,01.00,000.00,1.00 +0819,-020.00,+00.00,01.00,000.00,1.00 +0820,-020.00,+00.00,01.00,000.00,1.00 +0821,-020.00,+00.00,01.00,000.00,1.00 +0822,-020.00,+00.00,01.00,000.00,1.00 +0823,-020.00,+00.00,01.00,000.00,1.00 +0824,-020.00,+00.00,01.00,000.00,1.00 +0825,-020.00,+00.00,01.00,000.00,1.00 +0826,-020.00,+00.00,01.00,000.00,1.00 +0827,-020.00,+00.00,01.00,000.00,1.00 +0828,-020.00,+00.00,01.00,000.00,1.00 +0829,-020.00,+00.00,01.00,000.00,1.00 +0830,-020.00,+00.00,01.00,000.00,1.00 +0831,-020.00,+00.00,01.00,000.00,1.00 +0832,-020.00,+00.00,01.00,000.00,1.00 +0833,-020.00,+00.00,01.00,000.00,1.00 +0834,-020.00,+00.00,01.00,000.00,1.00 +0835,-020.00,+00.00,01.00,000.00,1.00 +0836,-020.00,+00.00,01.00,000.00,1.00 +0837,-020.00,+00.00,01.00,000.00,1.00 +0838,-020.00,+00.00,01.00,000.00,1.00 +0839,-020.00,+00.00,01.00,000.00,1.00 +0840,-020.00,+00.00,01.00,000.00,1.00 +0841,-020.00,+00.00,01.00,000.00,1.00 +0842,-020.00,+00.00,01.00,000.00,1.00 +0843,-020.00,+00.00,01.00,000.00,1.00 +0844,-020.00,+00.00,01.00,000.00,1.00 +0845,-020.00,+00.00,01.00,000.00,1.00 +0846,-020.00,+00.00,01.00,000.00,1.00 +0847,-020.00,+00.00,01.00,000.00,1.00 +0848,-020.00,+00.00,01.00,000.00,1.00 +0849,-020.00,+00.00,01.00,000.00,1.00 +0850,-020.00,+00.00,01.00,000.00,1.00 +0851,-020.00,+00.00,01.00,000.00,1.00 +0852,-020.00,+00.00,01.00,000.00,1.00 +0853,-020.00,+00.00,01.00,000.00,1.00 +0854,-020.00,+00.00,01.00,000.00,1.00 +0855,-020.00,+00.00,01.00,000.00,1.00 +0856,-020.00,+00.00,01.00,000.00,1.00 +0857,-020.00,+00.00,01.00,000.00,1.00 +0858,-020.00,+00.00,01.00,000.00,1.00 +0859,-020.00,+00.00,01.00,000.00,1.00 +0860,-020.00,+00.00,01.00,000.00,1.00 +0861,-020.00,+00.00,01.00,000.00,1.00 +0862,-020.00,+00.00,01.00,000.00,1.00 +0863,-020.00,+00.00,01.00,000.00,1.00 +0864,-020.00,+00.00,01.00,000.00,1.00 +0865,-020.00,+00.00,01.00,000.00,1.00 +0866,-020.00,+00.00,01.00,000.00,1.00 +0867,-020.00,+00.00,01.00,000.00,1.00 +0868,-020.00,+00.00,01.00,000.00,1.00 +0869,-020.00,+00.00,01.00,000.00,1.00 +0870,-020.00,+00.00,01.00,000.00,1.00 +0871,-020.00,+00.00,01.00,000.00,1.00 +0872,-020.00,+00.00,01.00,000.00,1.00 +0873,-020.00,+00.00,01.00,000.00,1.00 +0874,-020.00,+00.00,01.00,000.00,1.00 +0875,-020.00,+00.00,01.00,000.00,1.00 +0876,-020.00,+00.00,01.00,000.00,1.00 +0877,-020.00,+00.00,01.00,000.00,1.00 +0878,-020.00,+00.00,01.00,000.00,1.00 +0879,-020.00,+00.00,01.00,000.00,1.00 +0880,-020.00,+00.00,01.00,000.00,1.00 +0881,-020.00,+00.00,01.00,000.00,1.00 +0882,-020.00,+00.00,01.00,000.00,1.00 +0883,-020.00,+00.00,01.00,000.00,1.00 +0884,-020.00,+00.00,01.00,000.00,1.00 +0885,-020.00,+00.00,01.00,000.00,1.00 +0886,-020.00,+00.00,01.00,000.00,1.00 +0887,-020.00,+00.00,01.00,000.00,1.00 +0888,-020.00,+00.00,01.00,000.00,1.00 +0889,-020.00,+00.00,01.00,000.00,1.00 +0890,-020.00,+00.00,01.00,000.00,1.00 +0891,-020.00,+00.00,01.00,000.00,1.00 +0892,-020.00,+00.00,01.00,000.00,1.00 +0893,-020.00,+00.00,01.00,000.00,1.00 +0894,-020.00,+00.00,01.00,000.00,1.00 +0895,-020.00,+00.00,01.00,000.00,1.00 +0896,-020.00,+00.00,01.00,000.00,1.00 +0897,-020.00,+00.00,01.00,000.00,1.00 +0898,-020.00,+00.00,01.00,000.00,1.00 +0899,-020.00,+00.00,01.00,000.00,1.00 +0900,-020.00,+00.00,01.00,000.00,1.00 +0901,-020.00,+00.00,01.00,000.00,1.00 +0902,-020.00,+00.00,01.00,000.00,1.00 +0903,-020.00,+00.00,01.00,000.00,1.00 +0904,-020.00,+00.00,01.00,000.00,1.00 +0905,-020.00,+00.00,01.00,000.00,1.00 +0906,-020.00,+00.00,01.00,000.00,1.00 +0907,-020.00,+00.00,01.00,000.00,1.00 +0908,-020.00,+00.00,01.00,000.00,1.00 +0909,-020.00,+00.00,01.00,000.00,1.00 +0910,-020.00,+00.00,01.00,000.00,1.00 +0911,-020.00,+00.00,01.00,000.00,1.00 +0912,-020.00,+00.00,01.00,000.00,1.00 +0913,-020.00,+00.00,01.00,000.00,1.00 +0914,-020.00,+00.00,01.00,000.00,1.00 +0915,-020.00,+00.00,01.00,000.00,1.00 +0916,-020.00,+00.00,01.00,000.00,1.00 +0917,-020.00,+00.00,01.00,000.00,1.00 +0918,-020.00,+00.00,01.00,000.00,1.00 +0919,-020.00,+00.00,01.00,000.00,1.00 +0920,-020.00,+00.00,01.00,000.00,1.00 +0921,-020.00,+00.00,01.00,000.00,1.00 +0922,-020.00,+00.00,01.00,000.00,1.00 +0923,-020.00,+00.00,01.00,000.00,1.00 +0924,-020.00,+00.00,01.00,000.00,1.00 +0925,-020.00,+00.00,01.00,000.00,1.00 +0926,-020.00,+00.00,01.00,000.00,1.00 +0927,-020.00,+00.00,01.00,000.00,1.00 +0928,-020.00,+00.00,01.00,000.00,1.00 +0929,-020.00,+00.00,01.00,000.00,1.00 +0930,-020.00,+00.00,01.00,000.00,1.00 +0931,-020.00,+00.00,01.00,000.00,1.00 +0932,-020.00,+00.00,01.00,000.00,1.00 +0933,-020.00,+00.00,01.00,000.00,1.00 +0934,-020.00,+00.00,01.00,000.00,1.00 +0935,-020.00,+00.00,01.00,000.00,1.00 +0936,-020.00,+00.00,01.00,000.00,1.00 +0937,-020.00,+00.00,01.00,000.00,1.00 +0938,-020.00,+00.00,01.00,000.00,1.00 +0939,-020.00,+00.00,01.00,000.00,1.00 +0940,-020.00,+00.00,01.00,000.00,1.00 +0941,-020.00,+00.00,01.00,000.00,1.00 +0942,-020.00,+00.00,01.00,000.00,1.00 +0943,-020.00,+00.00,01.00,000.00,1.00 +0944,-020.00,+00.00,01.00,000.00,1.00 +0945,-020.00,+00.00,01.00,000.00,1.00 +0946,-020.00,+00.00,01.00,000.00,1.00 +0947,-020.00,+00.00,01.00,000.00,1.00 +0948,-020.00,+00.00,01.00,000.00,1.00 +0949,-020.00,+00.00,01.00,000.00,1.00 +0950,-020.00,+00.00,01.00,000.00,1.00 +0951,-020.00,+00.00,01.00,000.00,1.00 +0952,-020.00,+00.00,01.00,000.00,1.00 +0953,-020.00,+00.00,01.00,000.00,1.00 +0954,-020.00,+00.00,01.00,000.00,1.00 +0955,-020.00,+00.00,01.00,000.00,1.00 +0956,-020.00,+00.00,01.00,000.00,1.00 +0957,-020.00,+00.00,01.00,000.00,1.00 +0958,-020.00,+00.00,01.00,000.00,1.00 +0959,-020.00,+00.00,01.00,000.00,1.00 +0960,-020.00,+00.00,01.00,000.00,1.00 +0961,-020.00,+00.00,01.00,000.00,1.00 +0962,-020.00,+00.00,01.00,000.00,1.00 +0963,-020.00,+00.00,01.00,000.00,1.00 +0964,-020.00,+00.00,01.00,000.00,1.00 +0965,-020.00,+00.00,01.00,000.00,1.00 +0966,-020.00,+00.00,01.00,000.00,1.00 +0967,-020.00,+00.00,01.00,000.00,1.00 +0968,-020.00,+00.00,01.00,000.00,1.00 +0969,-020.00,+00.00,01.00,000.00,1.00 +0970,-020.00,+00.00,01.00,000.00,1.00 +0971,-020.00,+00.00,01.00,000.00,1.00 +0972,-020.00,+00.00,01.00,000.00,1.00 +0973,-020.00,+00.00,01.00,000.00,1.00 +0974,-020.00,+00.00,01.00,000.00,1.00 +0975,-020.00,+00.00,01.00,000.00,1.00 +0976,-020.00,+00.00,01.00,000.00,1.00 +0977,-020.00,+00.00,01.00,000.00,1.00 +0978,-020.00,+00.00,01.00,000.00,1.00 +0979,-020.00,+00.00,01.00,000.00,1.00 +0980,-020.00,+00.00,01.00,000.00,1.00 +0981,-020.00,+00.00,01.00,000.00,1.00 +0982,-020.00,+00.00,01.00,000.00,1.00 +0983,-020.00,+00.00,01.00,000.00,1.00 +0984,-020.00,+00.00,01.00,000.00,1.00 +0985,-020.00,+00.00,01.00,000.00,1.00 +0986,-020.00,+00.00,01.00,000.00,1.00 +0987,-020.00,+00.00,01.00,000.00,1.00 +0988,-020.00,+00.00,01.00,000.00,1.00 +0989,-020.00,+00.00,01.00,000.00,1.00 +0990,-020.00,+00.00,01.00,000.00,1.00 +0991,-020.00,+00.00,01.00,000.00,1.00 +0992,-020.00,+00.00,01.00,000.00,1.00 +0993,-020.00,+00.00,01.00,000.00,1.00 +0994,-020.00,+00.00,01.00,000.00,1.00 +0995,-020.00,+00.00,01.00,000.00,1.00 +0996,-020.00,+00.00,01.00,000.00,1.00 +0997,-020.00,+00.00,01.00,000.00,1.00 +0998,-020.00,+00.00,01.00,000.00,1.00 +0999,-020.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t05_ch3.csv b/scripts/td_object_renderer/metadata/csv/t05_ch3.csv new file mode 100644 index 0000000000..5ac00018d4 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t05_ch3.csv @@ -0,0 +1,1000 @@ +0000,+020.00,+00.00,01.00,000.00,1.00 +0001,+020.00,+00.00,01.00,000.00,1.00 +0002,+020.00,+00.00,01.00,000.00,1.00 +0003,+020.00,+00.00,01.00,000.00,1.00 +0004,+020.00,+00.00,01.00,000.00,1.00 +0005,+020.00,+00.00,01.00,000.00,1.00 +0006,+020.00,+00.00,01.00,000.00,1.00 +0007,+020.00,+00.00,01.00,000.00,1.00 +0008,+020.00,+00.00,01.00,000.00,1.00 +0009,+020.00,+00.00,01.00,000.00,1.00 +0010,+020.00,+00.00,01.00,000.00,1.00 +0011,+020.00,+00.00,01.00,000.00,1.00 +0012,+020.00,+00.00,01.00,000.00,1.00 +0013,+020.00,+00.00,01.00,000.00,1.00 +0014,+020.00,+00.00,01.00,000.00,1.00 +0015,+020.00,+00.00,01.00,000.00,1.00 +0016,+020.00,+00.00,01.00,000.00,1.00 +0017,+020.00,+00.00,01.00,000.00,1.00 +0018,+020.00,+00.00,01.00,000.00,1.00 +0019,+020.00,+00.00,01.00,000.00,1.00 +0020,+020.00,+00.00,01.00,000.00,1.00 +0021,+020.00,+00.00,01.00,000.00,1.00 +0022,+020.00,+00.00,01.00,000.00,1.00 +0023,+020.00,+00.00,01.00,000.00,1.00 +0024,+020.00,+00.00,01.00,000.00,1.00 +0025,+020.00,+00.00,01.00,000.00,1.00 +0026,+020.00,+00.00,01.00,000.00,1.00 +0027,+020.00,+00.00,01.00,000.00,1.00 +0028,+020.00,+00.00,01.00,000.00,1.00 +0029,+020.00,+00.00,01.00,000.00,1.00 +0030,+020.00,+00.00,01.00,000.00,1.00 +0031,+020.00,+00.00,01.00,000.00,1.00 +0032,+020.00,+00.00,01.00,000.00,1.00 +0033,+020.00,+00.00,01.00,000.00,1.00 +0034,+020.00,+00.00,01.00,000.00,1.00 +0035,+020.00,+00.00,01.00,000.00,1.00 +0036,+020.00,+00.00,01.00,000.00,1.00 +0037,+020.00,+00.00,01.00,000.00,1.00 +0038,+020.00,+00.00,01.00,000.00,1.00 +0039,+020.00,+00.00,01.00,000.00,1.00 +0040,+020.00,+00.00,01.00,000.00,1.00 +0041,+020.00,+00.00,01.00,000.00,1.00 +0042,+020.00,+00.00,01.00,000.00,1.00 +0043,+020.00,+00.00,01.00,000.00,1.00 +0044,+020.00,+00.00,01.00,000.00,1.00 +0045,+020.00,+00.00,01.00,000.00,1.00 +0046,+020.00,+00.00,01.00,000.00,1.00 +0047,+020.00,+00.00,01.00,000.00,1.00 +0048,+020.00,+00.00,01.00,000.00,1.00 +0049,+020.00,+00.00,01.00,000.00,1.00 +0050,+020.00,+00.00,01.00,000.00,1.00 +0051,+020.00,+00.00,01.00,000.00,1.00 +0052,+020.00,+00.00,01.00,000.00,1.00 +0053,+020.00,+00.00,01.00,000.00,1.00 +0054,+020.00,+00.00,01.00,000.00,1.00 +0055,+020.00,+00.00,01.00,000.00,1.00 +0056,+020.00,+00.00,01.00,000.00,1.00 +0057,+020.00,+00.00,01.00,000.00,1.00 +0058,+020.00,+00.00,01.00,000.00,1.00 +0059,+020.00,+00.00,01.00,000.00,1.00 +0060,+020.00,+00.00,01.00,000.00,1.00 +0061,+020.00,+00.00,01.00,000.00,1.00 +0062,+020.00,+00.00,01.00,000.00,1.00 +0063,+020.00,+00.00,01.00,000.00,1.00 +0064,+020.00,+00.00,01.00,000.00,1.00 +0065,+020.00,+00.00,01.00,000.00,1.00 +0066,+020.00,+00.00,01.00,000.00,1.00 +0067,+020.00,+00.00,01.00,000.00,1.00 +0068,+020.00,+00.00,01.00,000.00,1.00 +0069,+020.00,+00.00,01.00,000.00,1.00 +0070,+020.00,+00.00,01.00,000.00,1.00 +0071,+020.00,+00.00,01.00,000.00,1.00 +0072,+020.00,+00.00,01.00,000.00,1.00 +0073,+020.00,+00.00,01.00,000.00,1.00 +0074,+020.00,+00.00,01.00,000.00,1.00 +0075,+020.00,+00.00,01.00,000.00,1.00 +0076,+020.00,+00.00,01.00,000.00,1.00 +0077,+020.00,+00.00,01.00,000.00,1.00 +0078,+020.00,+00.00,01.00,000.00,1.00 +0079,+020.00,+00.00,01.00,000.00,1.00 +0080,+020.00,+00.00,01.00,000.00,1.00 +0081,+020.00,+00.00,01.00,000.00,1.00 +0082,+020.00,+00.00,01.00,000.00,1.00 +0083,+020.00,+00.00,01.00,000.00,1.00 +0084,+020.00,+00.00,01.00,000.00,1.00 +0085,+020.00,+00.00,01.00,000.00,1.00 +0086,+020.00,+00.00,01.00,000.00,1.00 +0087,+020.00,+00.00,01.00,000.00,1.00 +0088,+020.00,+00.00,01.00,000.00,1.00 +0089,+020.00,+00.00,01.00,000.00,1.00 +0090,+020.00,+00.00,01.00,000.00,1.00 +0091,+020.00,+00.00,01.00,000.00,1.00 +0092,+020.00,+00.00,01.00,000.00,1.00 +0093,+020.00,+00.00,01.00,000.00,1.00 +0094,+020.00,+00.00,01.00,000.00,1.00 +0095,+020.00,+00.00,01.00,000.00,1.00 +0096,+020.00,+00.00,01.00,000.00,1.00 +0097,+020.00,+00.00,01.00,000.00,1.00 +0098,+020.00,+00.00,01.00,000.00,1.00 +0099,+020.00,+00.00,01.00,000.00,1.00 +0100,+020.00,+00.00,01.00,000.00,1.00 +0101,+020.00,+00.00,01.00,000.00,1.00 +0102,+020.00,+00.00,01.00,000.00,1.00 +0103,+020.00,+00.00,01.00,000.00,1.00 +0104,+020.00,+00.00,01.00,000.00,1.00 +0105,+020.00,+00.00,01.00,000.00,1.00 +0106,+020.00,+00.00,01.00,000.00,1.00 +0107,+020.00,+00.00,01.00,000.00,1.00 +0108,+020.00,+00.00,01.00,000.00,1.00 +0109,+020.00,+00.00,01.00,000.00,1.00 +0110,+020.00,+00.00,01.00,000.00,1.00 +0111,+020.00,+00.00,01.00,000.00,1.00 +0112,+020.00,+00.00,01.00,000.00,1.00 +0113,+020.00,+00.00,01.00,000.00,1.00 +0114,+020.00,+00.00,01.00,000.00,1.00 +0115,+020.00,+00.00,01.00,000.00,1.00 +0116,+020.00,+00.00,01.00,000.00,1.00 +0117,+020.00,+00.00,01.00,000.00,1.00 +0118,+020.00,+00.00,01.00,000.00,1.00 +0119,+020.00,+00.00,01.00,000.00,1.00 +0120,+020.00,+00.00,01.00,000.00,1.00 +0121,+020.00,+00.00,01.00,000.00,1.00 +0122,+020.00,+00.00,01.00,000.00,1.00 +0123,+020.00,+00.00,01.00,000.00,1.00 +0124,+020.00,+00.00,01.00,000.00,1.00 +0125,+020.00,+00.00,01.00,000.00,1.00 +0126,+020.00,+00.00,01.00,000.00,1.00 +0127,+020.00,+00.00,01.00,000.00,1.00 +0128,+020.00,+00.00,01.00,000.00,1.00 +0129,+020.00,+00.00,01.00,000.00,1.00 +0130,+020.00,+00.00,01.00,000.00,1.00 +0131,+020.00,+00.00,01.00,000.00,1.00 +0132,+020.00,+00.00,01.00,000.00,1.00 +0133,+020.00,+00.00,01.00,000.00,1.00 +0134,+020.00,+00.00,01.00,000.00,1.00 +0135,+020.00,+00.00,01.00,000.00,1.00 +0136,+020.00,+00.00,01.00,000.00,1.00 +0137,+020.00,+00.00,01.00,000.00,1.00 +0138,+020.00,+00.00,01.00,000.00,1.00 +0139,+020.00,+00.00,01.00,000.00,1.00 +0140,+020.00,+00.00,01.00,000.00,1.00 +0141,+020.00,+00.00,01.00,000.00,1.00 +0142,+020.00,+00.00,01.00,000.00,1.00 +0143,+020.00,+00.00,01.00,000.00,1.00 +0144,+020.00,+00.00,01.00,000.00,1.00 +0145,+020.00,+00.00,01.00,000.00,1.00 +0146,+020.00,+00.00,01.00,000.00,1.00 +0147,+020.00,+00.00,01.00,000.00,1.00 +0148,+020.00,+00.00,01.00,000.00,1.00 +0149,+020.00,+00.00,01.00,000.00,1.00 +0150,+020.00,+00.00,01.00,000.00,1.00 +0151,+020.00,+00.00,01.00,000.00,1.00 +0152,+020.00,+00.00,01.00,000.00,1.00 +0153,+020.00,+00.00,01.00,000.00,1.00 +0154,+020.00,+00.00,01.00,000.00,1.00 +0155,+020.00,+00.00,01.00,000.00,1.00 +0156,+020.00,+00.00,01.00,000.00,1.00 +0157,+020.00,+00.00,01.00,000.00,1.00 +0158,+020.00,+00.00,01.00,000.00,1.00 +0159,+020.00,+00.00,01.00,000.00,1.00 +0160,+020.00,+00.00,01.00,000.00,1.00 +0161,+020.00,+00.00,01.00,000.00,1.00 +0162,+020.00,+00.00,01.00,000.00,1.00 +0163,+020.00,+00.00,01.00,000.00,1.00 +0164,+020.00,+00.00,01.00,000.00,1.00 +0165,+020.00,+00.00,01.00,000.00,1.00 +0166,+020.00,+00.00,01.00,000.00,1.00 +0167,+020.00,+00.00,01.00,000.00,1.00 +0168,+020.00,+00.00,01.00,000.00,1.00 +0169,+020.00,+00.00,01.00,000.00,1.00 +0170,+020.00,+00.00,01.00,000.00,1.00 +0171,+020.00,+00.00,01.00,000.00,1.00 +0172,+020.00,+00.00,01.00,000.00,1.00 +0173,+020.00,+00.00,01.00,000.00,1.00 +0174,+020.00,+00.00,01.00,000.00,1.00 +0175,+020.00,+00.00,01.00,000.00,1.00 +0176,+020.00,+00.00,01.00,000.00,1.00 +0177,+020.00,+00.00,01.00,000.00,1.00 +0178,+020.00,+00.00,01.00,000.00,1.00 +0179,+020.00,+00.00,01.00,000.00,1.00 +0180,+020.00,+00.00,01.00,000.00,1.00 +0181,+020.00,+00.00,01.00,000.00,1.00 +0182,+020.00,+00.00,01.00,000.00,1.00 +0183,+020.00,+00.00,01.00,000.00,1.00 +0184,+020.00,+00.00,01.00,000.00,1.00 +0185,+020.00,+00.00,01.00,000.00,1.00 +0186,+020.00,+00.00,01.00,000.00,1.00 +0187,+020.00,+00.00,01.00,000.00,1.00 +0188,+020.00,+00.00,01.00,000.00,1.00 +0189,+020.00,+00.00,01.00,000.00,1.00 +0190,+020.00,+00.00,01.00,000.00,1.00 +0191,+020.00,+00.00,01.00,000.00,1.00 +0192,+020.00,+00.00,01.00,000.00,1.00 +0193,+020.00,+00.00,01.00,000.00,1.00 +0194,+020.00,+00.00,01.00,000.00,1.00 +0195,+020.00,+00.00,01.00,000.00,1.00 +0196,+020.00,+00.00,01.00,000.00,1.00 +0197,+020.00,+00.00,01.00,000.00,1.00 +0198,+020.00,+00.00,01.00,000.00,1.00 +0199,+020.00,+00.00,01.00,000.00,1.00 +0200,+020.00,+00.00,01.00,000.00,1.00 +0201,+020.00,+00.00,01.00,000.00,1.00 +0202,+020.00,+00.00,01.00,000.00,1.00 +0203,+020.00,+00.00,01.00,000.00,1.00 +0204,+020.00,+00.00,01.00,000.00,1.00 +0205,+020.00,+00.00,01.00,000.00,1.00 +0206,+020.00,+00.00,01.00,000.00,1.00 +0207,+020.00,+00.00,01.00,000.00,1.00 +0208,+020.00,+00.00,01.00,000.00,1.00 +0209,+020.00,+00.00,01.00,000.00,1.00 +0210,+020.00,+00.00,01.00,000.00,1.00 +0211,+020.00,+00.00,01.00,000.00,1.00 +0212,+020.00,+00.00,01.00,000.00,1.00 +0213,+020.00,+00.00,01.00,000.00,1.00 +0214,+020.00,+00.00,01.00,000.00,1.00 +0215,+020.00,+00.00,01.00,000.00,1.00 +0216,+020.00,+00.00,01.00,000.00,1.00 +0217,+020.00,+00.00,01.00,000.00,1.00 +0218,+020.00,+00.00,01.00,000.00,1.00 +0219,+020.00,+00.00,01.00,000.00,1.00 +0220,+020.00,+00.00,01.00,000.00,1.00 +0221,+020.00,+00.00,01.00,000.00,1.00 +0222,+020.00,+00.00,01.00,000.00,1.00 +0223,+020.00,+00.00,01.00,000.00,1.00 +0224,+020.00,+00.00,01.00,000.00,1.00 +0225,+020.00,+00.00,01.00,000.00,1.00 +0226,+020.00,+00.00,01.00,000.00,1.00 +0227,+020.00,+00.00,01.00,000.00,1.00 +0228,+020.00,+00.00,01.00,000.00,1.00 +0229,+020.00,+00.00,01.00,000.00,1.00 +0230,+020.00,+00.00,01.00,000.00,1.00 +0231,+020.00,+00.00,01.00,000.00,1.00 +0232,+020.00,+00.00,01.00,000.00,1.00 +0233,+020.00,+00.00,01.00,000.00,1.00 +0234,+020.00,+00.00,01.00,000.00,1.00 +0235,+020.00,+00.00,01.00,000.00,1.00 +0236,+020.00,+00.00,01.00,000.00,1.00 +0237,+020.00,+00.00,01.00,000.00,1.00 +0238,+020.00,+00.00,01.00,000.00,1.00 +0239,+020.00,+00.00,01.00,000.00,1.00 +0240,+020.00,+00.00,01.00,000.00,1.00 +0241,+020.00,+00.00,01.00,000.00,1.00 +0242,+020.00,+00.00,01.00,000.00,1.00 +0243,+020.00,+00.00,01.00,000.00,1.00 +0244,+020.00,+00.00,01.00,000.00,1.00 +0245,+020.00,+00.00,01.00,000.00,1.00 +0246,+020.00,+00.00,01.00,000.00,1.00 +0247,+020.00,+00.00,01.00,000.00,1.00 +0248,+020.00,+00.00,01.00,000.00,1.00 +0249,+020.00,+00.00,01.00,000.00,1.00 +0250,+020.00,+00.00,01.00,000.00,1.00 +0251,+020.00,+00.00,01.00,000.00,1.00 +0252,+020.00,+00.00,01.00,000.00,1.00 +0253,+020.00,+00.00,01.00,000.00,1.00 +0254,+020.00,+00.00,01.00,000.00,1.00 +0255,+020.00,+00.00,01.00,000.00,1.00 +0256,+020.00,+00.00,01.00,000.00,1.00 +0257,+020.00,+00.00,01.00,000.00,1.00 +0258,+020.00,+00.00,01.00,000.00,1.00 +0259,+020.00,+00.00,01.00,000.00,1.00 +0260,+020.00,+00.00,01.00,000.00,1.00 +0261,+020.00,+00.00,01.00,000.00,1.00 +0262,+020.00,+00.00,01.00,000.00,1.00 +0263,+020.00,+00.00,01.00,000.00,1.00 +0264,+020.00,+00.00,01.00,000.00,1.00 +0265,+020.00,+00.00,01.00,000.00,1.00 +0266,+020.00,+00.00,01.00,000.00,1.00 +0267,+020.00,+00.00,01.00,000.00,1.00 +0268,+020.00,+00.00,01.00,000.00,1.00 +0269,+020.00,+00.00,01.00,000.00,1.00 +0270,+020.00,+00.00,01.00,000.00,1.00 +0271,+020.00,+00.00,01.00,000.00,1.00 +0272,+020.00,+00.00,01.00,000.00,1.00 +0273,+020.00,+00.00,01.00,000.00,1.00 +0274,+020.00,+00.00,01.00,000.00,1.00 +0275,+020.00,+00.00,01.00,000.00,1.00 +0276,+020.00,+00.00,01.00,000.00,1.00 +0277,+020.00,+00.00,01.00,000.00,1.00 +0278,+020.00,+00.00,01.00,000.00,1.00 +0279,+020.00,+00.00,01.00,000.00,1.00 +0280,+020.00,+00.00,01.00,000.00,1.00 +0281,+020.00,+00.00,01.00,000.00,1.00 +0282,+020.00,+00.00,01.00,000.00,1.00 +0283,+020.00,+00.00,01.00,000.00,1.00 +0284,+020.00,+00.00,01.00,000.00,1.00 +0285,+020.00,+00.00,01.00,000.00,1.00 +0286,+020.00,+00.00,01.00,000.00,1.00 +0287,+020.00,+00.00,01.00,000.00,1.00 +0288,+020.00,+00.00,01.00,000.00,1.00 +0289,+020.00,+00.00,01.00,000.00,1.00 +0290,+020.00,+00.00,01.00,000.00,1.00 +0291,+020.00,+00.00,01.00,000.00,1.00 +0292,+020.00,+00.00,01.00,000.00,1.00 +0293,+020.00,+00.00,01.00,000.00,1.00 +0294,+020.00,+00.00,01.00,000.00,1.00 +0295,+020.00,+00.00,01.00,000.00,1.00 +0296,+020.00,+00.00,01.00,000.00,1.00 +0297,+020.00,+00.00,01.00,000.00,1.00 +0298,+020.00,+00.00,01.00,000.00,1.00 +0299,+020.00,+00.00,01.00,000.00,1.00 +0300,+020.00,+00.00,01.00,000.00,1.00 +0301,+020.00,+00.00,01.00,000.00,1.00 +0302,+020.00,+00.00,01.00,000.00,1.00 +0303,+020.00,+00.00,01.00,000.00,1.00 +0304,+020.00,+00.00,01.00,000.00,1.00 +0305,+020.00,+00.00,01.00,000.00,1.00 +0306,+020.00,+00.00,01.00,000.00,1.00 +0307,+020.00,+00.00,01.00,000.00,1.00 +0308,+020.00,+00.00,01.00,000.00,1.00 +0309,+020.00,+00.00,01.00,000.00,1.00 +0310,+020.00,+00.00,01.00,000.00,1.00 +0311,+020.00,+00.00,01.00,000.00,1.00 +0312,+020.00,+00.00,01.00,000.00,1.00 +0313,+020.00,+00.00,01.00,000.00,1.00 +0314,+020.00,+00.00,01.00,000.00,1.00 +0315,+020.00,+00.00,01.00,000.00,1.00 +0316,+020.00,+00.00,01.00,000.00,1.00 +0317,+020.00,+00.00,01.00,000.00,1.00 +0318,+020.00,+00.00,01.00,000.00,1.00 +0319,+020.00,+00.00,01.00,000.00,1.00 +0320,+020.00,+00.00,01.00,000.00,1.00 +0321,+020.00,+00.00,01.00,000.00,1.00 +0322,+020.00,+00.00,01.00,000.00,1.00 +0323,+020.00,+00.00,01.00,000.00,1.00 +0324,+020.00,+00.00,01.00,000.00,1.00 +0325,+020.00,+00.00,01.00,000.00,1.00 +0326,+020.00,+00.00,01.00,000.00,1.00 +0327,+020.00,+00.00,01.00,000.00,1.00 +0328,+020.00,+00.00,01.00,000.00,1.00 +0329,+020.00,+00.00,01.00,000.00,1.00 +0330,+020.00,+00.00,01.00,000.00,1.00 +0331,+020.00,+00.00,01.00,000.00,1.00 +0332,+020.00,+00.00,01.00,000.00,1.00 +0333,+020.00,+00.00,01.00,000.00,1.00 +0334,+020.00,+00.00,01.00,000.00,1.00 +0335,+020.00,+00.00,01.00,000.00,1.00 +0336,+020.00,+00.00,01.00,000.00,1.00 +0337,+020.00,+00.00,01.00,000.00,1.00 +0338,+020.00,+00.00,01.00,000.00,1.00 +0339,+020.00,+00.00,01.00,000.00,1.00 +0340,+020.00,+00.00,01.00,000.00,1.00 +0341,+020.00,+00.00,01.00,000.00,1.00 +0342,+020.00,+00.00,01.00,000.00,1.00 +0343,+020.00,+00.00,01.00,000.00,1.00 +0344,+020.00,+00.00,01.00,000.00,1.00 +0345,+020.00,+00.00,01.00,000.00,1.00 +0346,+020.00,+00.00,01.00,000.00,1.00 +0347,+020.00,+00.00,01.00,000.00,1.00 +0348,+020.00,+00.00,01.00,000.00,1.00 +0349,+020.00,+00.00,01.00,000.00,1.00 +0350,+020.00,+00.00,01.00,000.00,1.00 +0351,+020.00,+00.00,01.00,000.00,1.00 +0352,+020.00,+00.00,01.00,000.00,1.00 +0353,+020.00,+00.00,01.00,000.00,1.00 +0354,+020.00,+00.00,01.00,000.00,1.00 +0355,+020.00,+00.00,01.00,000.00,1.00 +0356,+020.00,+00.00,01.00,000.00,1.00 +0357,+020.00,+00.00,01.00,000.00,1.00 +0358,+020.00,+00.00,01.00,000.00,1.00 +0359,+020.00,+00.00,01.00,000.00,1.00 +0360,+020.00,+00.00,01.00,000.00,1.00 +0361,+020.00,+00.00,01.00,000.00,1.00 +0362,+020.00,+00.00,01.00,000.00,1.00 +0363,+020.00,+00.00,01.00,000.00,1.00 +0364,+020.00,+00.00,01.00,000.00,1.00 +0365,+020.00,+00.00,01.00,000.00,1.00 +0366,+020.00,+00.00,01.00,000.00,1.00 +0367,+020.00,+00.00,01.00,000.00,1.00 +0368,+020.00,+00.00,01.00,000.00,1.00 +0369,+020.00,+00.00,01.00,000.00,1.00 +0370,+020.00,+00.00,01.00,000.00,1.00 +0371,+020.00,+00.00,01.00,000.00,1.00 +0372,+020.00,+00.00,01.00,000.00,1.00 +0373,+020.00,+00.00,01.00,000.00,1.00 +0374,+020.00,+00.00,01.00,000.00,1.00 +0375,+020.00,+00.00,01.00,000.00,1.00 +0376,+020.00,+00.00,01.00,000.00,1.00 +0377,+020.00,+00.00,01.00,000.00,1.00 +0378,+020.00,+00.00,01.00,000.00,1.00 +0379,+020.00,+00.00,01.00,000.00,1.00 +0380,+020.00,+00.00,01.00,000.00,1.00 +0381,+020.00,+00.00,01.00,000.00,1.00 +0382,+020.00,+00.00,01.00,000.00,1.00 +0383,+020.00,+00.00,01.00,000.00,1.00 +0384,+020.00,+00.00,01.00,000.00,1.00 +0385,+020.00,+00.00,01.00,000.00,1.00 +0386,+020.00,+00.00,01.00,000.00,1.00 +0387,+020.00,+00.00,01.00,000.00,1.00 +0388,+020.00,+00.00,01.00,000.00,1.00 +0389,+020.00,+00.00,01.00,000.00,1.00 +0390,+020.00,+00.00,01.00,000.00,1.00 +0391,+020.00,+00.00,01.00,000.00,1.00 +0392,+020.00,+00.00,01.00,000.00,1.00 +0393,+020.00,+00.00,01.00,000.00,1.00 +0394,+020.00,+00.00,01.00,000.00,1.00 +0395,+020.00,+00.00,01.00,000.00,1.00 +0396,+020.00,+00.00,01.00,000.00,1.00 +0397,+020.00,+00.00,01.00,000.00,1.00 +0398,+020.00,+00.00,01.00,000.00,1.00 +0399,+020.00,+00.00,01.00,000.00,1.00 +0400,+020.00,+00.00,01.00,000.00,1.00 +0401,+020.00,+00.00,01.00,000.00,1.00 +0402,+020.00,+00.00,01.00,000.00,1.00 +0403,+020.00,+00.00,01.00,000.00,1.00 +0404,+020.00,+00.00,01.00,000.00,1.00 +0405,+020.00,+00.00,01.00,000.00,1.00 +0406,+020.00,+00.00,01.00,000.00,1.00 +0407,+020.00,+00.00,01.00,000.00,1.00 +0408,+020.00,+00.00,01.00,000.00,1.00 +0409,+020.00,+00.00,01.00,000.00,1.00 +0410,+020.00,+00.00,01.00,000.00,1.00 +0411,+020.00,+00.00,01.00,000.00,1.00 +0412,+020.00,+00.00,01.00,000.00,1.00 +0413,+020.00,+00.00,01.00,000.00,1.00 +0414,+020.00,+00.00,01.00,000.00,1.00 +0415,+020.00,+00.00,01.00,000.00,1.00 +0416,+020.00,+00.00,01.00,000.00,1.00 +0417,+020.00,+00.00,01.00,000.00,1.00 +0418,+020.00,+00.00,01.00,000.00,1.00 +0419,+020.00,+00.00,01.00,000.00,1.00 +0420,+020.00,+00.00,01.00,000.00,1.00 +0421,+020.00,+00.00,01.00,000.00,1.00 +0422,+020.00,+00.00,01.00,000.00,1.00 +0423,+020.00,+00.00,01.00,000.00,1.00 +0424,+020.00,+00.00,01.00,000.00,1.00 +0425,+020.00,+00.00,01.00,000.00,1.00 +0426,+020.00,+00.00,01.00,000.00,1.00 +0427,+020.00,+00.00,01.00,000.00,1.00 +0428,+020.00,+00.00,01.00,000.00,1.00 +0429,+020.00,+00.00,01.00,000.00,1.00 +0430,+020.00,+00.00,01.00,000.00,1.00 +0431,+020.00,+00.00,01.00,000.00,1.00 +0432,+020.00,+00.00,01.00,000.00,1.00 +0433,+020.00,+00.00,01.00,000.00,1.00 +0434,+020.00,+00.00,01.00,000.00,1.00 +0435,+020.00,+00.00,01.00,000.00,1.00 +0436,+020.00,+00.00,01.00,000.00,1.00 +0437,+020.00,+00.00,01.00,000.00,1.00 +0438,+020.00,+00.00,01.00,000.00,1.00 +0439,+020.00,+00.00,01.00,000.00,1.00 +0440,+020.00,+00.00,01.00,000.00,1.00 +0441,+020.00,+00.00,01.00,000.00,1.00 +0442,+020.00,+00.00,01.00,000.00,1.00 +0443,+020.00,+00.00,01.00,000.00,1.00 +0444,+020.00,+00.00,01.00,000.00,1.00 +0445,+020.00,+00.00,01.00,000.00,1.00 +0446,+020.00,+00.00,01.00,000.00,1.00 +0447,+020.00,+00.00,01.00,000.00,1.00 +0448,+020.00,+00.00,01.00,000.00,1.00 +0449,+020.00,+00.00,01.00,000.00,1.00 +0450,+020.00,+00.00,01.00,000.00,1.00 +0451,+020.00,+00.00,01.00,000.00,1.00 +0452,+020.00,+00.00,01.00,000.00,1.00 +0453,+020.00,+00.00,01.00,000.00,1.00 +0454,+020.00,+00.00,01.00,000.00,1.00 +0455,+020.00,+00.00,01.00,000.00,1.00 +0456,+020.00,+00.00,01.00,000.00,1.00 +0457,+020.00,+00.00,01.00,000.00,1.00 +0458,+020.00,+00.00,01.00,000.00,1.00 +0459,+020.00,+00.00,01.00,000.00,1.00 +0460,+020.00,+00.00,01.00,000.00,1.00 +0461,+020.00,+00.00,01.00,000.00,1.00 +0462,+020.00,+00.00,01.00,000.00,1.00 +0463,+020.00,+00.00,01.00,000.00,1.00 +0464,+020.00,+00.00,01.00,000.00,1.00 +0465,+020.00,+00.00,01.00,000.00,1.00 +0466,+020.00,+00.00,01.00,000.00,1.00 +0467,+020.00,+00.00,01.00,000.00,1.00 +0468,+020.00,+00.00,01.00,000.00,1.00 +0469,+020.00,+00.00,01.00,000.00,1.00 +0470,+020.00,+00.00,01.00,000.00,1.00 +0471,+020.00,+00.00,01.00,000.00,1.00 +0472,+020.00,+00.00,01.00,000.00,1.00 +0473,+020.00,+00.00,01.00,000.00,1.00 +0474,+020.00,+00.00,01.00,000.00,1.00 +0475,+020.00,+00.00,01.00,000.00,1.00 +0476,+020.00,+00.00,01.00,000.00,1.00 +0477,+020.00,+00.00,01.00,000.00,1.00 +0478,+020.00,+00.00,01.00,000.00,1.00 +0479,+020.00,+00.00,01.00,000.00,1.00 +0480,+020.00,+00.00,01.00,000.00,1.00 +0481,+020.00,+00.00,01.00,000.00,1.00 +0482,+020.00,+00.00,01.00,000.00,1.00 +0483,+020.00,+00.00,01.00,000.00,1.00 +0484,+020.00,+00.00,01.00,000.00,1.00 +0485,+020.00,+00.00,01.00,000.00,1.00 +0486,+020.00,+00.00,01.00,000.00,1.00 +0487,+020.00,+00.00,01.00,000.00,1.00 +0488,+020.00,+00.00,01.00,000.00,1.00 +0489,+020.00,+00.00,01.00,000.00,1.00 +0490,+020.00,+00.00,01.00,000.00,1.00 +0491,+020.00,+00.00,01.00,000.00,1.00 +0492,+020.00,+00.00,01.00,000.00,1.00 +0493,+020.00,+00.00,01.00,000.00,1.00 +0494,+020.00,+00.00,01.00,000.00,1.00 +0495,+020.00,+00.00,01.00,000.00,1.00 +0496,+020.00,+00.00,01.00,000.00,1.00 +0497,+020.00,+00.00,01.00,000.00,1.00 +0498,+020.00,+00.00,01.00,000.00,1.00 +0499,+020.00,+00.00,01.00,000.00,1.00 +0500,+020.00,+00.00,01.00,000.00,1.00 +0501,+020.00,+00.00,01.00,000.00,1.00 +0502,+020.00,+00.00,01.00,000.00,1.00 +0503,+020.00,+00.00,01.00,000.00,1.00 +0504,+020.00,+00.00,01.00,000.00,1.00 +0505,+020.00,+00.00,01.00,000.00,1.00 +0506,+020.00,+00.00,01.00,000.00,1.00 +0507,+020.00,+00.00,01.00,000.00,1.00 +0508,+020.00,+00.00,01.00,000.00,1.00 +0509,+020.00,+00.00,01.00,000.00,1.00 +0510,+020.00,+00.00,01.00,000.00,1.00 +0511,+020.00,+00.00,01.00,000.00,1.00 +0512,+020.00,+00.00,01.00,000.00,1.00 +0513,+020.00,+00.00,01.00,000.00,1.00 +0514,+020.00,+00.00,01.00,000.00,1.00 +0515,+020.00,+00.00,01.00,000.00,1.00 +0516,+020.00,+00.00,01.00,000.00,1.00 +0517,+020.00,+00.00,01.00,000.00,1.00 +0518,+020.00,+00.00,01.00,000.00,1.00 +0519,+020.00,+00.00,01.00,000.00,1.00 +0520,+020.00,+00.00,01.00,000.00,1.00 +0521,+020.00,+00.00,01.00,000.00,1.00 +0522,+020.00,+00.00,01.00,000.00,1.00 +0523,+020.00,+00.00,01.00,000.00,1.00 +0524,+020.00,+00.00,01.00,000.00,1.00 +0525,+020.00,+00.00,01.00,000.00,1.00 +0526,+020.00,+00.00,01.00,000.00,1.00 +0527,+020.00,+00.00,01.00,000.00,1.00 +0528,+020.00,+00.00,01.00,000.00,1.00 +0529,+020.00,+00.00,01.00,000.00,1.00 +0530,+020.00,+00.00,01.00,000.00,1.00 +0531,+020.00,+00.00,01.00,000.00,1.00 +0532,+020.00,+00.00,01.00,000.00,1.00 +0533,+020.00,+00.00,01.00,000.00,1.00 +0534,+020.00,+00.00,01.00,000.00,1.00 +0535,+020.00,+00.00,01.00,000.00,1.00 +0536,+020.00,+00.00,01.00,000.00,1.00 +0537,+020.00,+00.00,01.00,000.00,1.00 +0538,+020.00,+00.00,01.00,000.00,1.00 +0539,+020.00,+00.00,01.00,000.00,1.00 +0540,+020.00,+00.00,01.00,000.00,1.00 +0541,+020.00,+00.00,01.00,000.00,1.00 +0542,+020.00,+00.00,01.00,000.00,1.00 +0543,+020.00,+00.00,01.00,000.00,1.00 +0544,+020.00,+00.00,01.00,000.00,1.00 +0545,+020.00,+00.00,01.00,000.00,1.00 +0546,+020.00,+00.00,01.00,000.00,1.00 +0547,+020.00,+00.00,01.00,000.00,1.00 +0548,+020.00,+00.00,01.00,000.00,1.00 +0549,+020.00,+00.00,01.00,000.00,1.00 +0550,+020.00,+00.00,01.00,000.00,1.00 +0551,+020.00,+00.00,01.00,000.00,1.00 +0552,+020.00,+00.00,01.00,000.00,1.00 +0553,+020.00,+00.00,01.00,000.00,1.00 +0554,+020.00,+00.00,01.00,000.00,1.00 +0555,+020.00,+00.00,01.00,000.00,1.00 +0556,+020.00,+00.00,01.00,000.00,1.00 +0557,+020.00,+00.00,01.00,000.00,1.00 +0558,+020.00,+00.00,01.00,000.00,1.00 +0559,+020.00,+00.00,01.00,000.00,1.00 +0560,+020.00,+00.00,01.00,000.00,1.00 +0561,+020.00,+00.00,01.00,000.00,1.00 +0562,+020.00,+00.00,01.00,000.00,1.00 +0563,+020.00,+00.00,01.00,000.00,1.00 +0564,+020.00,+00.00,01.00,000.00,1.00 +0565,+020.00,+00.00,01.00,000.00,1.00 +0566,+020.00,+00.00,01.00,000.00,1.00 +0567,+020.00,+00.00,01.00,000.00,1.00 +0568,+020.00,+00.00,01.00,000.00,1.00 +0569,+020.00,+00.00,01.00,000.00,1.00 +0570,+020.00,+00.00,01.00,000.00,1.00 +0571,+020.00,+00.00,01.00,000.00,1.00 +0572,+020.00,+00.00,01.00,000.00,1.00 +0573,+020.00,+00.00,01.00,000.00,1.00 +0574,+020.00,+00.00,01.00,000.00,1.00 +0575,+020.00,+00.00,01.00,000.00,1.00 +0576,+020.00,+00.00,01.00,000.00,1.00 +0577,+020.00,+00.00,01.00,000.00,1.00 +0578,+020.00,+00.00,01.00,000.00,1.00 +0579,+020.00,+00.00,01.00,000.00,1.00 +0580,+020.00,+00.00,01.00,000.00,1.00 +0581,+020.00,+00.00,01.00,000.00,1.00 +0582,+020.00,+00.00,01.00,000.00,1.00 +0583,+020.00,+00.00,01.00,000.00,1.00 +0584,+020.00,+00.00,01.00,000.00,1.00 +0585,+020.00,+00.00,01.00,000.00,1.00 +0586,+020.00,+00.00,01.00,000.00,1.00 +0587,+020.00,+00.00,01.00,000.00,1.00 +0588,+020.00,+00.00,01.00,000.00,1.00 +0589,+020.00,+00.00,01.00,000.00,1.00 +0590,+020.00,+00.00,01.00,000.00,1.00 +0591,+020.00,+00.00,01.00,000.00,1.00 +0592,+020.00,+00.00,01.00,000.00,1.00 +0593,+020.00,+00.00,01.00,000.00,1.00 +0594,+020.00,+00.00,01.00,000.00,1.00 +0595,+020.00,+00.00,01.00,000.00,1.00 +0596,+020.00,+00.00,01.00,000.00,1.00 +0597,+020.00,+00.00,01.00,000.00,1.00 +0598,+020.00,+00.00,01.00,000.00,1.00 +0599,+020.00,+00.00,01.00,000.00,1.00 +0600,+020.00,+00.00,01.00,000.00,1.00 +0601,+020.00,+00.00,01.00,000.00,1.00 +0602,+020.00,+00.00,01.00,000.00,1.00 +0603,+020.00,+00.00,01.00,000.00,1.00 +0604,+020.00,+00.00,01.00,000.00,1.00 +0605,+020.00,+00.00,01.00,000.00,1.00 +0606,+020.00,+00.00,01.00,000.00,1.00 +0607,+020.00,+00.00,01.00,000.00,1.00 +0608,+020.00,+00.00,01.00,000.00,1.00 +0609,+020.00,+00.00,01.00,000.00,1.00 +0610,+020.00,+00.00,01.00,000.00,1.00 +0611,+020.00,+00.00,01.00,000.00,1.00 +0612,+020.00,+00.00,01.00,000.00,1.00 +0613,+020.00,+00.00,01.00,000.00,1.00 +0614,+020.00,+00.00,01.00,000.00,1.00 +0615,+020.00,+00.00,01.00,000.00,1.00 +0616,+020.00,+00.00,01.00,000.00,1.00 +0617,+020.00,+00.00,01.00,000.00,1.00 +0618,+020.00,+00.00,01.00,000.00,1.00 +0619,+020.00,+00.00,01.00,000.00,1.00 +0620,+020.00,+00.00,01.00,000.00,1.00 +0621,+020.00,+00.00,01.00,000.00,1.00 +0622,+020.00,+00.00,01.00,000.00,1.00 +0623,+020.00,+00.00,01.00,000.00,1.00 +0624,+020.00,+00.00,01.00,000.00,1.00 +0625,+020.00,+00.00,01.00,000.00,1.00 +0626,+020.00,+00.00,01.00,000.00,1.00 +0627,+020.00,+00.00,01.00,000.00,1.00 +0628,+020.00,+00.00,01.00,000.00,1.00 +0629,+020.00,+00.00,01.00,000.00,1.00 +0630,+020.00,+00.00,01.00,000.00,1.00 +0631,+020.00,+00.00,01.00,000.00,1.00 +0632,+020.00,+00.00,01.00,000.00,1.00 +0633,+020.00,+00.00,01.00,000.00,1.00 +0634,+020.00,+00.00,01.00,000.00,1.00 +0635,+020.00,+00.00,01.00,000.00,1.00 +0636,+020.00,+00.00,01.00,000.00,1.00 +0637,+020.00,+00.00,01.00,000.00,1.00 +0638,+020.00,+00.00,01.00,000.00,1.00 +0639,+020.00,+00.00,01.00,000.00,1.00 +0640,+020.00,+00.00,01.00,000.00,1.00 +0641,+020.00,+00.00,01.00,000.00,1.00 +0642,+020.00,+00.00,01.00,000.00,1.00 +0643,+020.00,+00.00,01.00,000.00,1.00 +0644,+020.00,+00.00,01.00,000.00,1.00 +0645,+020.00,+00.00,01.00,000.00,1.00 +0646,+020.00,+00.00,01.00,000.00,1.00 +0647,+020.00,+00.00,01.00,000.00,1.00 +0648,+020.00,+00.00,01.00,000.00,1.00 +0649,+020.00,+00.00,01.00,000.00,1.00 +0650,+020.00,+00.00,01.00,000.00,1.00 +0651,+020.00,+00.00,01.00,000.00,1.00 +0652,+020.00,+00.00,01.00,000.00,1.00 +0653,+020.00,+00.00,01.00,000.00,1.00 +0654,+020.00,+00.00,01.00,000.00,1.00 +0655,+020.00,+00.00,01.00,000.00,1.00 +0656,+020.00,+00.00,01.00,000.00,1.00 +0657,+020.00,+00.00,01.00,000.00,1.00 +0658,+020.00,+00.00,01.00,000.00,1.00 +0659,+020.00,+00.00,01.00,000.00,1.00 +0660,+020.00,+00.00,01.00,000.00,1.00 +0661,+020.00,+00.00,01.00,000.00,1.00 +0662,+020.00,+00.00,01.00,000.00,1.00 +0663,+020.00,+00.00,01.00,000.00,1.00 +0664,+020.00,+00.00,01.00,000.00,1.00 +0665,+020.00,+00.00,01.00,000.00,1.00 +0666,+020.00,+00.00,01.00,000.00,1.00 +0667,+020.00,+00.00,01.00,000.00,1.00 +0668,+020.00,+00.00,01.00,000.00,1.00 +0669,+020.00,+00.00,01.00,000.00,1.00 +0670,+020.00,+00.00,01.00,000.00,1.00 +0671,+020.00,+00.00,01.00,000.00,1.00 +0672,+020.00,+00.00,01.00,000.00,1.00 +0673,+020.00,+00.00,01.00,000.00,1.00 +0674,+020.00,+00.00,01.00,000.00,1.00 +0675,+020.00,+00.00,01.00,000.00,1.00 +0676,+020.00,+00.00,01.00,000.00,1.00 +0677,+020.00,+00.00,01.00,000.00,1.00 +0678,+020.00,+00.00,01.00,000.00,1.00 +0679,+020.00,+00.00,01.00,000.00,1.00 +0680,+020.00,+00.00,01.00,000.00,1.00 +0681,+020.00,+00.00,01.00,000.00,1.00 +0682,+020.00,+00.00,01.00,000.00,1.00 +0683,+020.00,+00.00,01.00,000.00,1.00 +0684,+020.00,+00.00,01.00,000.00,1.00 +0685,+020.00,+00.00,01.00,000.00,1.00 +0686,+020.00,+00.00,01.00,000.00,1.00 +0687,+020.00,+00.00,01.00,000.00,1.00 +0688,+020.00,+00.00,01.00,000.00,1.00 +0689,+020.00,+00.00,01.00,000.00,1.00 +0690,+020.00,+00.00,01.00,000.00,1.00 +0691,+020.00,+00.00,01.00,000.00,1.00 +0692,+020.00,+00.00,01.00,000.00,1.00 +0693,+020.00,+00.00,01.00,000.00,1.00 +0694,+020.00,+00.00,01.00,000.00,1.00 +0695,+020.00,+00.00,01.00,000.00,1.00 +0696,+020.00,+00.00,01.00,000.00,1.00 +0697,+020.00,+00.00,01.00,000.00,1.00 +0698,+020.00,+00.00,01.00,000.00,1.00 +0699,+020.00,+00.00,01.00,000.00,1.00 +0700,+020.00,+00.00,01.00,000.00,1.00 +0701,+020.00,+00.00,01.00,000.00,1.00 +0702,+020.00,+00.00,01.00,000.00,1.00 +0703,+020.00,+00.00,01.00,000.00,1.00 +0704,+020.00,+00.00,01.00,000.00,1.00 +0705,+020.00,+00.00,01.00,000.00,1.00 +0706,+020.00,+00.00,01.00,000.00,1.00 +0707,+020.00,+00.00,01.00,000.00,1.00 +0708,+020.00,+00.00,01.00,000.00,1.00 +0709,+020.00,+00.00,01.00,000.00,1.00 +0710,+020.00,+00.00,01.00,000.00,1.00 +0711,+020.00,+00.00,01.00,000.00,1.00 +0712,+020.00,+00.00,01.00,000.00,1.00 +0713,+020.00,+00.00,01.00,000.00,1.00 +0714,+020.00,+00.00,01.00,000.00,1.00 +0715,+020.00,+00.00,01.00,000.00,1.00 +0716,+020.00,+00.00,01.00,000.00,1.00 +0717,+020.00,+00.00,01.00,000.00,1.00 +0718,+020.00,+00.00,01.00,000.00,1.00 +0719,+020.00,+00.00,01.00,000.00,1.00 +0720,+020.00,+00.00,01.00,000.00,1.00 +0721,+020.00,+00.00,01.00,000.00,1.00 +0722,+020.00,+00.00,01.00,000.00,1.00 +0723,+020.00,+00.00,01.00,000.00,1.00 +0724,+020.00,+00.00,01.00,000.00,1.00 +0725,+020.00,+00.00,01.00,000.00,1.00 +0726,+020.00,+00.00,01.00,000.00,1.00 +0727,+020.00,+00.00,01.00,000.00,1.00 +0728,+020.00,+00.00,01.00,000.00,1.00 +0729,+020.00,+00.00,01.00,000.00,1.00 +0730,+020.00,+00.00,01.00,000.00,1.00 +0731,+020.00,+00.00,01.00,000.00,1.00 +0732,+020.00,+00.00,01.00,000.00,1.00 +0733,+020.00,+00.00,01.00,000.00,1.00 +0734,+020.00,+00.00,01.00,000.00,1.00 +0735,+020.00,+00.00,01.00,000.00,1.00 +0736,+020.00,+00.00,01.00,000.00,1.00 +0737,+020.00,+00.00,01.00,000.00,1.00 +0738,+020.00,+00.00,01.00,000.00,1.00 +0739,+020.00,+00.00,01.00,000.00,1.00 +0740,+020.00,+00.00,01.00,000.00,1.00 +0741,+020.00,+00.00,01.00,000.00,1.00 +0742,+020.00,+00.00,01.00,000.00,1.00 +0743,+020.00,+00.00,01.00,000.00,1.00 +0744,+020.00,+00.00,01.00,000.00,1.00 +0745,+020.00,+00.00,01.00,000.00,1.00 +0746,+020.00,+00.00,01.00,000.00,1.00 +0747,+020.00,+00.00,01.00,000.00,1.00 +0748,+020.00,+00.00,01.00,000.00,1.00 +0749,+020.00,+00.00,01.00,000.00,1.00 +0750,+020.00,+00.00,01.00,000.00,1.00 +0751,+020.00,+00.00,01.00,000.00,1.00 +0752,+020.00,+00.00,01.00,000.00,1.00 +0753,+020.00,+00.00,01.00,000.00,1.00 +0754,+020.00,+00.00,01.00,000.00,1.00 +0755,+020.00,+00.00,01.00,000.00,1.00 +0756,+020.00,+00.00,01.00,000.00,1.00 +0757,+020.00,+00.00,01.00,000.00,1.00 +0758,+020.00,+00.00,01.00,000.00,1.00 +0759,+020.00,+00.00,01.00,000.00,1.00 +0760,+020.00,+00.00,01.00,000.00,1.00 +0761,+020.00,+00.00,01.00,000.00,1.00 +0762,+020.00,+00.00,01.00,000.00,1.00 +0763,+020.00,+00.00,01.00,000.00,1.00 +0764,+020.00,+00.00,01.00,000.00,1.00 +0765,+020.00,+00.00,01.00,000.00,1.00 +0766,+020.00,+00.00,01.00,000.00,1.00 +0767,+020.00,+00.00,01.00,000.00,1.00 +0768,+020.00,+00.00,01.00,000.00,1.00 +0769,+020.00,+00.00,01.00,000.00,1.00 +0770,+020.00,+00.00,01.00,000.00,1.00 +0771,+020.00,+00.00,01.00,000.00,1.00 +0772,+020.00,+00.00,01.00,000.00,1.00 +0773,+020.00,+00.00,01.00,000.00,1.00 +0774,+020.00,+00.00,01.00,000.00,1.00 +0775,+020.00,+00.00,01.00,000.00,1.00 +0776,+020.00,+00.00,01.00,000.00,1.00 +0777,+020.00,+00.00,01.00,000.00,1.00 +0778,+020.00,+00.00,01.00,000.00,1.00 +0779,+020.00,+00.00,01.00,000.00,1.00 +0780,+020.00,+00.00,01.00,000.00,1.00 +0781,+020.00,+00.00,01.00,000.00,1.00 +0782,+020.00,+00.00,01.00,000.00,1.00 +0783,+020.00,+00.00,01.00,000.00,1.00 +0784,+020.00,+00.00,01.00,000.00,1.00 +0785,+020.00,+00.00,01.00,000.00,1.00 +0786,+020.00,+00.00,01.00,000.00,1.00 +0787,+020.00,+00.00,01.00,000.00,1.00 +0788,+020.00,+00.00,01.00,000.00,1.00 +0789,+020.00,+00.00,01.00,000.00,1.00 +0790,+020.00,+00.00,01.00,000.00,1.00 +0791,+020.00,+00.00,01.00,000.00,1.00 +0792,+020.00,+00.00,01.00,000.00,1.00 +0793,+020.00,+00.00,01.00,000.00,1.00 +0794,+020.00,+00.00,01.00,000.00,1.00 +0795,+020.00,+00.00,01.00,000.00,1.00 +0796,+020.00,+00.00,01.00,000.00,1.00 +0797,+020.00,+00.00,01.00,000.00,1.00 +0798,+020.00,+00.00,01.00,000.00,1.00 +0799,+020.00,+00.00,01.00,000.00,1.00 +0800,+020.00,+00.00,01.00,000.00,1.00 +0801,+020.00,+00.00,01.00,000.00,1.00 +0802,+020.00,+00.00,01.00,000.00,1.00 +0803,+020.00,+00.00,01.00,000.00,1.00 +0804,+020.00,+00.00,01.00,000.00,1.00 +0805,+020.00,+00.00,01.00,000.00,1.00 +0806,+020.00,+00.00,01.00,000.00,1.00 +0807,+020.00,+00.00,01.00,000.00,1.00 +0808,+020.00,+00.00,01.00,000.00,1.00 +0809,+020.00,+00.00,01.00,000.00,1.00 +0810,+020.00,+00.00,01.00,000.00,1.00 +0811,+020.00,+00.00,01.00,000.00,1.00 +0812,+020.00,+00.00,01.00,000.00,1.00 +0813,+020.00,+00.00,01.00,000.00,1.00 +0814,+020.00,+00.00,01.00,000.00,1.00 +0815,+020.00,+00.00,01.00,000.00,1.00 +0816,+020.00,+00.00,01.00,000.00,1.00 +0817,+020.00,+00.00,01.00,000.00,1.00 +0818,+020.00,+00.00,01.00,000.00,1.00 +0819,+020.00,+00.00,01.00,000.00,1.00 +0820,+020.00,+00.00,01.00,000.00,1.00 +0821,+020.00,+00.00,01.00,000.00,1.00 +0822,+020.00,+00.00,01.00,000.00,1.00 +0823,+020.00,+00.00,01.00,000.00,1.00 +0824,+020.00,+00.00,01.00,000.00,1.00 +0825,+020.00,+00.00,01.00,000.00,1.00 +0826,+020.00,+00.00,01.00,000.00,1.00 +0827,+020.00,+00.00,01.00,000.00,1.00 +0828,+020.00,+00.00,01.00,000.00,1.00 +0829,+020.00,+00.00,01.00,000.00,1.00 +0830,+020.00,+00.00,01.00,000.00,1.00 +0831,+020.00,+00.00,01.00,000.00,1.00 +0832,+020.00,+00.00,01.00,000.00,1.00 +0833,+020.00,+00.00,01.00,000.00,1.00 +0834,+020.00,+00.00,01.00,000.00,1.00 +0835,+020.00,+00.00,01.00,000.00,1.00 +0836,+020.00,+00.00,01.00,000.00,1.00 +0837,+020.00,+00.00,01.00,000.00,1.00 +0838,+020.00,+00.00,01.00,000.00,1.00 +0839,+020.00,+00.00,01.00,000.00,1.00 +0840,+020.00,+00.00,01.00,000.00,1.00 +0841,+020.00,+00.00,01.00,000.00,1.00 +0842,+020.00,+00.00,01.00,000.00,1.00 +0843,+020.00,+00.00,01.00,000.00,1.00 +0844,+020.00,+00.00,01.00,000.00,1.00 +0845,+020.00,+00.00,01.00,000.00,1.00 +0846,+020.00,+00.00,01.00,000.00,1.00 +0847,+020.00,+00.00,01.00,000.00,1.00 +0848,+020.00,+00.00,01.00,000.00,1.00 +0849,+020.00,+00.00,01.00,000.00,1.00 +0850,+020.00,+00.00,01.00,000.00,1.00 +0851,+020.00,+00.00,01.00,000.00,1.00 +0852,+020.00,+00.00,01.00,000.00,1.00 +0853,+020.00,+00.00,01.00,000.00,1.00 +0854,+020.00,+00.00,01.00,000.00,1.00 +0855,+020.00,+00.00,01.00,000.00,1.00 +0856,+020.00,+00.00,01.00,000.00,1.00 +0857,+020.00,+00.00,01.00,000.00,1.00 +0858,+020.00,+00.00,01.00,000.00,1.00 +0859,+020.00,+00.00,01.00,000.00,1.00 +0860,+020.00,+00.00,01.00,000.00,1.00 +0861,+020.00,+00.00,01.00,000.00,1.00 +0862,+020.00,+00.00,01.00,000.00,1.00 +0863,+020.00,+00.00,01.00,000.00,1.00 +0864,+020.00,+00.00,01.00,000.00,1.00 +0865,+020.00,+00.00,01.00,000.00,1.00 +0866,+020.00,+00.00,01.00,000.00,1.00 +0867,+020.00,+00.00,01.00,000.00,1.00 +0868,+020.00,+00.00,01.00,000.00,1.00 +0869,+020.00,+00.00,01.00,000.00,1.00 +0870,+020.00,+00.00,01.00,000.00,1.00 +0871,+020.00,+00.00,01.00,000.00,1.00 +0872,+020.00,+00.00,01.00,000.00,1.00 +0873,+020.00,+00.00,01.00,000.00,1.00 +0874,+020.00,+00.00,01.00,000.00,1.00 +0875,+020.00,+00.00,01.00,000.00,1.00 +0876,+020.00,+00.00,01.00,000.00,1.00 +0877,+020.00,+00.00,01.00,000.00,1.00 +0878,+020.00,+00.00,01.00,000.00,1.00 +0879,+020.00,+00.00,01.00,000.00,1.00 +0880,+020.00,+00.00,01.00,000.00,1.00 +0881,+020.00,+00.00,01.00,000.00,1.00 +0882,+020.00,+00.00,01.00,000.00,1.00 +0883,+020.00,+00.00,01.00,000.00,1.00 +0884,+020.00,+00.00,01.00,000.00,1.00 +0885,+020.00,+00.00,01.00,000.00,1.00 +0886,+020.00,+00.00,01.00,000.00,1.00 +0887,+020.00,+00.00,01.00,000.00,1.00 +0888,+020.00,+00.00,01.00,000.00,1.00 +0889,+020.00,+00.00,01.00,000.00,1.00 +0890,+020.00,+00.00,01.00,000.00,1.00 +0891,+020.00,+00.00,01.00,000.00,1.00 +0892,+020.00,+00.00,01.00,000.00,1.00 +0893,+020.00,+00.00,01.00,000.00,1.00 +0894,+020.00,+00.00,01.00,000.00,1.00 +0895,+020.00,+00.00,01.00,000.00,1.00 +0896,+020.00,+00.00,01.00,000.00,1.00 +0897,+020.00,+00.00,01.00,000.00,1.00 +0898,+020.00,+00.00,01.00,000.00,1.00 +0899,+020.00,+00.00,01.00,000.00,1.00 +0900,+020.00,+00.00,01.00,000.00,1.00 +0901,+020.00,+00.00,01.00,000.00,1.00 +0902,+020.00,+00.00,01.00,000.00,1.00 +0903,+020.00,+00.00,01.00,000.00,1.00 +0904,+020.00,+00.00,01.00,000.00,1.00 +0905,+020.00,+00.00,01.00,000.00,1.00 +0906,+020.00,+00.00,01.00,000.00,1.00 +0907,+020.00,+00.00,01.00,000.00,1.00 +0908,+020.00,+00.00,01.00,000.00,1.00 +0909,+020.00,+00.00,01.00,000.00,1.00 +0910,+020.00,+00.00,01.00,000.00,1.00 +0911,+020.00,+00.00,01.00,000.00,1.00 +0912,+020.00,+00.00,01.00,000.00,1.00 +0913,+020.00,+00.00,01.00,000.00,1.00 +0914,+020.00,+00.00,01.00,000.00,1.00 +0915,+020.00,+00.00,01.00,000.00,1.00 +0916,+020.00,+00.00,01.00,000.00,1.00 +0917,+020.00,+00.00,01.00,000.00,1.00 +0918,+020.00,+00.00,01.00,000.00,1.00 +0919,+020.00,+00.00,01.00,000.00,1.00 +0920,+020.00,+00.00,01.00,000.00,1.00 +0921,+020.00,+00.00,01.00,000.00,1.00 +0922,+020.00,+00.00,01.00,000.00,1.00 +0923,+020.00,+00.00,01.00,000.00,1.00 +0924,+020.00,+00.00,01.00,000.00,1.00 +0925,+020.00,+00.00,01.00,000.00,1.00 +0926,+020.00,+00.00,01.00,000.00,1.00 +0927,+020.00,+00.00,01.00,000.00,1.00 +0928,+020.00,+00.00,01.00,000.00,1.00 +0929,+020.00,+00.00,01.00,000.00,1.00 +0930,+020.00,+00.00,01.00,000.00,1.00 +0931,+020.00,+00.00,01.00,000.00,1.00 +0932,+020.00,+00.00,01.00,000.00,1.00 +0933,+020.00,+00.00,01.00,000.00,1.00 +0934,+020.00,+00.00,01.00,000.00,1.00 +0935,+020.00,+00.00,01.00,000.00,1.00 +0936,+020.00,+00.00,01.00,000.00,1.00 +0937,+020.00,+00.00,01.00,000.00,1.00 +0938,+020.00,+00.00,01.00,000.00,1.00 +0939,+020.00,+00.00,01.00,000.00,1.00 +0940,+020.00,+00.00,01.00,000.00,1.00 +0941,+020.00,+00.00,01.00,000.00,1.00 +0942,+020.00,+00.00,01.00,000.00,1.00 +0943,+020.00,+00.00,01.00,000.00,1.00 +0944,+020.00,+00.00,01.00,000.00,1.00 +0945,+020.00,+00.00,01.00,000.00,1.00 +0946,+020.00,+00.00,01.00,000.00,1.00 +0947,+020.00,+00.00,01.00,000.00,1.00 +0948,+020.00,+00.00,01.00,000.00,1.00 +0949,+020.00,+00.00,01.00,000.00,1.00 +0950,+020.00,+00.00,01.00,000.00,1.00 +0951,+020.00,+00.00,01.00,000.00,1.00 +0952,+020.00,+00.00,01.00,000.00,1.00 +0953,+020.00,+00.00,01.00,000.00,1.00 +0954,+020.00,+00.00,01.00,000.00,1.00 +0955,+020.00,+00.00,01.00,000.00,1.00 +0956,+020.00,+00.00,01.00,000.00,1.00 +0957,+020.00,+00.00,01.00,000.00,1.00 +0958,+020.00,+00.00,01.00,000.00,1.00 +0959,+020.00,+00.00,01.00,000.00,1.00 +0960,+020.00,+00.00,01.00,000.00,1.00 +0961,+020.00,+00.00,01.00,000.00,1.00 +0962,+020.00,+00.00,01.00,000.00,1.00 +0963,+020.00,+00.00,01.00,000.00,1.00 +0964,+020.00,+00.00,01.00,000.00,1.00 +0965,+020.00,+00.00,01.00,000.00,1.00 +0966,+020.00,+00.00,01.00,000.00,1.00 +0967,+020.00,+00.00,01.00,000.00,1.00 +0968,+020.00,+00.00,01.00,000.00,1.00 +0969,+020.00,+00.00,01.00,000.00,1.00 +0970,+020.00,+00.00,01.00,000.00,1.00 +0971,+020.00,+00.00,01.00,000.00,1.00 +0972,+020.00,+00.00,01.00,000.00,1.00 +0973,+020.00,+00.00,01.00,000.00,1.00 +0974,+020.00,+00.00,01.00,000.00,1.00 +0975,+020.00,+00.00,01.00,000.00,1.00 +0976,+020.00,+00.00,01.00,000.00,1.00 +0977,+020.00,+00.00,01.00,000.00,1.00 +0978,+020.00,+00.00,01.00,000.00,1.00 +0979,+020.00,+00.00,01.00,000.00,1.00 +0980,+020.00,+00.00,01.00,000.00,1.00 +0981,+020.00,+00.00,01.00,000.00,1.00 +0982,+020.00,+00.00,01.00,000.00,1.00 +0983,+020.00,+00.00,01.00,000.00,1.00 +0984,+020.00,+00.00,01.00,000.00,1.00 +0985,+020.00,+00.00,01.00,000.00,1.00 +0986,+020.00,+00.00,01.00,000.00,1.00 +0987,+020.00,+00.00,01.00,000.00,1.00 +0988,+020.00,+00.00,01.00,000.00,1.00 +0989,+020.00,+00.00,01.00,000.00,1.00 +0990,+020.00,+00.00,01.00,000.00,1.00 +0991,+020.00,+00.00,01.00,000.00,1.00 +0992,+020.00,+00.00,01.00,000.00,1.00 +0993,+020.00,+00.00,01.00,000.00,1.00 +0994,+020.00,+00.00,01.00,000.00,1.00 +0995,+020.00,+00.00,01.00,000.00,1.00 +0996,+020.00,+00.00,01.00,000.00,1.00 +0997,+020.00,+00.00,01.00,000.00,1.00 +0998,+020.00,+00.00,01.00,000.00,1.00 +0999,+020.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t05_ch4.csv b/scripts/td_object_renderer/metadata/csv/t05_ch4.csv new file mode 100644 index 0000000000..da715b0e0c --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t05_ch4.csv @@ -0,0 +1,1000 @@ +0000,+060.00,+00.00,01.00,000.00,1.00 +0001,+060.00,+00.00,01.00,000.00,1.00 +0002,+060.00,+00.00,01.00,000.00,1.00 +0003,+060.00,+00.00,01.00,000.00,1.00 +0004,+060.00,+00.00,01.00,000.00,1.00 +0005,+060.00,+00.00,01.00,000.00,1.00 +0006,+060.00,+00.00,01.00,000.00,1.00 +0007,+060.00,+00.00,01.00,000.00,1.00 +0008,+060.00,+00.00,01.00,000.00,1.00 +0009,+060.00,+00.00,01.00,000.00,1.00 +0010,+060.00,+00.00,01.00,000.00,1.00 +0011,+060.00,+00.00,01.00,000.00,1.00 +0012,+060.00,+00.00,01.00,000.00,1.00 +0013,+060.00,+00.00,01.00,000.00,1.00 +0014,+060.00,+00.00,01.00,000.00,1.00 +0015,+060.00,+00.00,01.00,000.00,1.00 +0016,+060.00,+00.00,01.00,000.00,1.00 +0017,+060.00,+00.00,01.00,000.00,1.00 +0018,+060.00,+00.00,01.00,000.00,1.00 +0019,+060.00,+00.00,01.00,000.00,1.00 +0020,+060.00,+00.00,01.00,000.00,1.00 +0021,+060.00,+00.00,01.00,000.00,1.00 +0022,+060.00,+00.00,01.00,000.00,1.00 +0023,+060.00,+00.00,01.00,000.00,1.00 +0024,+060.00,+00.00,01.00,000.00,1.00 +0025,+060.00,+00.00,01.00,000.00,1.00 +0026,+060.00,+00.00,01.00,000.00,1.00 +0027,+060.00,+00.00,01.00,000.00,1.00 +0028,+060.00,+00.00,01.00,000.00,1.00 +0029,+060.00,+00.00,01.00,000.00,1.00 +0030,+060.00,+00.00,01.00,000.00,1.00 +0031,+060.00,+00.00,01.00,000.00,1.00 +0032,+060.00,+00.00,01.00,000.00,1.00 +0033,+060.00,+00.00,01.00,000.00,1.00 +0034,+060.00,+00.00,01.00,000.00,1.00 +0035,+060.00,+00.00,01.00,000.00,1.00 +0036,+060.00,+00.00,01.00,000.00,1.00 +0037,+060.00,+00.00,01.00,000.00,1.00 +0038,+060.00,+00.00,01.00,000.00,1.00 +0039,+060.00,+00.00,01.00,000.00,1.00 +0040,+060.00,+00.00,01.00,000.00,1.00 +0041,+060.00,+00.00,01.00,000.00,1.00 +0042,+060.00,+00.00,01.00,000.00,1.00 +0043,+060.00,+00.00,01.00,000.00,1.00 +0044,+060.00,+00.00,01.00,000.00,1.00 +0045,+060.00,+00.00,01.00,000.00,1.00 +0046,+060.00,+00.00,01.00,000.00,1.00 +0047,+060.00,+00.00,01.00,000.00,1.00 +0048,+060.00,+00.00,01.00,000.00,1.00 +0049,+060.00,+00.00,01.00,000.00,1.00 +0050,+060.00,+00.00,01.00,000.00,1.00 +0051,+060.00,+00.00,01.00,000.00,1.00 +0052,+060.00,+00.00,01.00,000.00,1.00 +0053,+060.00,+00.00,01.00,000.00,1.00 +0054,+060.00,+00.00,01.00,000.00,1.00 +0055,+060.00,+00.00,01.00,000.00,1.00 +0056,+060.00,+00.00,01.00,000.00,1.00 +0057,+060.00,+00.00,01.00,000.00,1.00 +0058,+060.00,+00.00,01.00,000.00,1.00 +0059,+060.00,+00.00,01.00,000.00,1.00 +0060,+060.00,+00.00,01.00,000.00,1.00 +0061,+060.00,+00.00,01.00,000.00,1.00 +0062,+060.00,+00.00,01.00,000.00,1.00 +0063,+060.00,+00.00,01.00,000.00,1.00 +0064,+060.00,+00.00,01.00,000.00,1.00 +0065,+060.00,+00.00,01.00,000.00,1.00 +0066,+060.00,+00.00,01.00,000.00,1.00 +0067,+060.00,+00.00,01.00,000.00,1.00 +0068,+060.00,+00.00,01.00,000.00,1.00 +0069,+060.00,+00.00,01.00,000.00,1.00 +0070,+060.00,+00.00,01.00,000.00,1.00 +0071,+060.00,+00.00,01.00,000.00,1.00 +0072,+060.00,+00.00,01.00,000.00,1.00 +0073,+060.00,+00.00,01.00,000.00,1.00 +0074,+060.00,+00.00,01.00,000.00,1.00 +0075,+060.00,+00.00,01.00,000.00,1.00 +0076,+060.00,+00.00,01.00,000.00,1.00 +0077,+060.00,+00.00,01.00,000.00,1.00 +0078,+060.00,+00.00,01.00,000.00,1.00 +0079,+060.00,+00.00,01.00,000.00,1.00 +0080,+060.00,+00.00,01.00,000.00,1.00 +0081,+060.00,+00.00,01.00,000.00,1.00 +0082,+060.00,+00.00,01.00,000.00,1.00 +0083,+060.00,+00.00,01.00,000.00,1.00 +0084,+060.00,+00.00,01.00,000.00,1.00 +0085,+060.00,+00.00,01.00,000.00,1.00 +0086,+060.00,+00.00,01.00,000.00,1.00 +0087,+060.00,+00.00,01.00,000.00,1.00 +0088,+060.00,+00.00,01.00,000.00,1.00 +0089,+060.00,+00.00,01.00,000.00,1.00 +0090,+060.00,+00.00,01.00,000.00,1.00 +0091,+060.00,+00.00,01.00,000.00,1.00 +0092,+060.00,+00.00,01.00,000.00,1.00 +0093,+060.00,+00.00,01.00,000.00,1.00 +0094,+060.00,+00.00,01.00,000.00,1.00 +0095,+060.00,+00.00,01.00,000.00,1.00 +0096,+060.00,+00.00,01.00,000.00,1.00 +0097,+060.00,+00.00,01.00,000.00,1.00 +0098,+060.00,+00.00,01.00,000.00,1.00 +0099,+060.00,+00.00,01.00,000.00,1.00 +0100,+060.00,+00.00,01.00,000.00,1.00 +0101,+060.00,+00.00,01.00,000.00,1.00 +0102,+060.00,+00.00,01.00,000.00,1.00 +0103,+060.00,+00.00,01.00,000.00,1.00 +0104,+060.00,+00.00,01.00,000.00,1.00 +0105,+060.00,+00.00,01.00,000.00,1.00 +0106,+060.00,+00.00,01.00,000.00,1.00 +0107,+060.00,+00.00,01.00,000.00,1.00 +0108,+060.00,+00.00,01.00,000.00,1.00 +0109,+060.00,+00.00,01.00,000.00,1.00 +0110,+060.00,+00.00,01.00,000.00,1.00 +0111,+060.00,+00.00,01.00,000.00,1.00 +0112,+060.00,+00.00,01.00,000.00,1.00 +0113,+060.00,+00.00,01.00,000.00,1.00 +0114,+060.00,+00.00,01.00,000.00,1.00 +0115,+060.00,+00.00,01.00,000.00,1.00 +0116,+060.00,+00.00,01.00,000.00,1.00 +0117,+060.00,+00.00,01.00,000.00,1.00 +0118,+060.00,+00.00,01.00,000.00,1.00 +0119,+060.00,+00.00,01.00,000.00,1.00 +0120,+060.00,+00.00,01.00,000.00,1.00 +0121,+060.00,+00.00,01.00,000.00,1.00 +0122,+060.00,+00.00,01.00,000.00,1.00 +0123,+060.00,+00.00,01.00,000.00,1.00 +0124,+060.00,+00.00,01.00,000.00,1.00 +0125,+060.00,+00.00,01.00,000.00,1.00 +0126,+060.00,+00.00,01.00,000.00,1.00 +0127,+060.00,+00.00,01.00,000.00,1.00 +0128,+060.00,+00.00,01.00,000.00,1.00 +0129,+060.00,+00.00,01.00,000.00,1.00 +0130,+060.00,+00.00,01.00,000.00,1.00 +0131,+060.00,+00.00,01.00,000.00,1.00 +0132,+060.00,+00.00,01.00,000.00,1.00 +0133,+060.00,+00.00,01.00,000.00,1.00 +0134,+060.00,+00.00,01.00,000.00,1.00 +0135,+060.00,+00.00,01.00,000.00,1.00 +0136,+060.00,+00.00,01.00,000.00,1.00 +0137,+060.00,+00.00,01.00,000.00,1.00 +0138,+060.00,+00.00,01.00,000.00,1.00 +0139,+060.00,+00.00,01.00,000.00,1.00 +0140,+060.00,+00.00,01.00,000.00,1.00 +0141,+060.00,+00.00,01.00,000.00,1.00 +0142,+060.00,+00.00,01.00,000.00,1.00 +0143,+060.00,+00.00,01.00,000.00,1.00 +0144,+060.00,+00.00,01.00,000.00,1.00 +0145,+060.00,+00.00,01.00,000.00,1.00 +0146,+060.00,+00.00,01.00,000.00,1.00 +0147,+060.00,+00.00,01.00,000.00,1.00 +0148,+060.00,+00.00,01.00,000.00,1.00 +0149,+060.00,+00.00,01.00,000.00,1.00 +0150,+060.00,+00.00,01.00,000.00,1.00 +0151,+060.00,+00.00,01.00,000.00,1.00 +0152,+060.00,+00.00,01.00,000.00,1.00 +0153,+060.00,+00.00,01.00,000.00,1.00 +0154,+060.00,+00.00,01.00,000.00,1.00 +0155,+060.00,+00.00,01.00,000.00,1.00 +0156,+060.00,+00.00,01.00,000.00,1.00 +0157,+060.00,+00.00,01.00,000.00,1.00 +0158,+060.00,+00.00,01.00,000.00,1.00 +0159,+060.00,+00.00,01.00,000.00,1.00 +0160,+060.00,+00.00,01.00,000.00,1.00 +0161,+060.00,+00.00,01.00,000.00,1.00 +0162,+060.00,+00.00,01.00,000.00,1.00 +0163,+060.00,+00.00,01.00,000.00,1.00 +0164,+060.00,+00.00,01.00,000.00,1.00 +0165,+060.00,+00.00,01.00,000.00,1.00 +0166,+060.00,+00.00,01.00,000.00,1.00 +0167,+060.00,+00.00,01.00,000.00,1.00 +0168,+060.00,+00.00,01.00,000.00,1.00 +0169,+060.00,+00.00,01.00,000.00,1.00 +0170,+060.00,+00.00,01.00,000.00,1.00 +0171,+060.00,+00.00,01.00,000.00,1.00 +0172,+060.00,+00.00,01.00,000.00,1.00 +0173,+060.00,+00.00,01.00,000.00,1.00 +0174,+060.00,+00.00,01.00,000.00,1.00 +0175,+060.00,+00.00,01.00,000.00,1.00 +0176,+060.00,+00.00,01.00,000.00,1.00 +0177,+060.00,+00.00,01.00,000.00,1.00 +0178,+060.00,+00.00,01.00,000.00,1.00 +0179,+060.00,+00.00,01.00,000.00,1.00 +0180,+060.00,+00.00,01.00,000.00,1.00 +0181,+060.00,+00.00,01.00,000.00,1.00 +0182,+060.00,+00.00,01.00,000.00,1.00 +0183,+060.00,+00.00,01.00,000.00,1.00 +0184,+060.00,+00.00,01.00,000.00,1.00 +0185,+060.00,+00.00,01.00,000.00,1.00 +0186,+060.00,+00.00,01.00,000.00,1.00 +0187,+060.00,+00.00,01.00,000.00,1.00 +0188,+060.00,+00.00,01.00,000.00,1.00 +0189,+060.00,+00.00,01.00,000.00,1.00 +0190,+060.00,+00.00,01.00,000.00,1.00 +0191,+060.00,+00.00,01.00,000.00,1.00 +0192,+060.00,+00.00,01.00,000.00,1.00 +0193,+060.00,+00.00,01.00,000.00,1.00 +0194,+060.00,+00.00,01.00,000.00,1.00 +0195,+060.00,+00.00,01.00,000.00,1.00 +0196,+060.00,+00.00,01.00,000.00,1.00 +0197,+060.00,+00.00,01.00,000.00,1.00 +0198,+060.00,+00.00,01.00,000.00,1.00 +0199,+060.00,+00.00,01.00,000.00,1.00 +0200,+060.00,+00.00,01.00,000.00,1.00 +0201,+060.00,+00.00,01.00,000.00,1.00 +0202,+060.00,+00.00,01.00,000.00,1.00 +0203,+060.00,+00.00,01.00,000.00,1.00 +0204,+060.00,+00.00,01.00,000.00,1.00 +0205,+060.00,+00.00,01.00,000.00,1.00 +0206,+060.00,+00.00,01.00,000.00,1.00 +0207,+060.00,+00.00,01.00,000.00,1.00 +0208,+060.00,+00.00,01.00,000.00,1.00 +0209,+060.00,+00.00,01.00,000.00,1.00 +0210,+060.00,+00.00,01.00,000.00,1.00 +0211,+060.00,+00.00,01.00,000.00,1.00 +0212,+060.00,+00.00,01.00,000.00,1.00 +0213,+060.00,+00.00,01.00,000.00,1.00 +0214,+060.00,+00.00,01.00,000.00,1.00 +0215,+060.00,+00.00,01.00,000.00,1.00 +0216,+060.00,+00.00,01.00,000.00,1.00 +0217,+060.00,+00.00,01.00,000.00,1.00 +0218,+060.00,+00.00,01.00,000.00,1.00 +0219,+060.00,+00.00,01.00,000.00,1.00 +0220,+060.00,+00.00,01.00,000.00,1.00 +0221,+060.00,+00.00,01.00,000.00,1.00 +0222,+060.00,+00.00,01.00,000.00,1.00 +0223,+060.00,+00.00,01.00,000.00,1.00 +0224,+060.00,+00.00,01.00,000.00,1.00 +0225,+060.00,+00.00,01.00,000.00,1.00 +0226,+060.00,+00.00,01.00,000.00,1.00 +0227,+060.00,+00.00,01.00,000.00,1.00 +0228,+060.00,+00.00,01.00,000.00,1.00 +0229,+060.00,+00.00,01.00,000.00,1.00 +0230,+060.00,+00.00,01.00,000.00,1.00 +0231,+060.00,+00.00,01.00,000.00,1.00 +0232,+060.00,+00.00,01.00,000.00,1.00 +0233,+060.00,+00.00,01.00,000.00,1.00 +0234,+060.00,+00.00,01.00,000.00,1.00 +0235,+060.00,+00.00,01.00,000.00,1.00 +0236,+060.00,+00.00,01.00,000.00,1.00 +0237,+060.00,+00.00,01.00,000.00,1.00 +0238,+060.00,+00.00,01.00,000.00,1.00 +0239,+060.00,+00.00,01.00,000.00,1.00 +0240,+060.00,+00.00,01.00,000.00,1.00 +0241,+060.00,+00.00,01.00,000.00,1.00 +0242,+060.00,+00.00,01.00,000.00,1.00 +0243,+060.00,+00.00,01.00,000.00,1.00 +0244,+060.00,+00.00,01.00,000.00,1.00 +0245,+060.00,+00.00,01.00,000.00,1.00 +0246,+060.00,+00.00,01.00,000.00,1.00 +0247,+060.00,+00.00,01.00,000.00,1.00 +0248,+060.00,+00.00,01.00,000.00,1.00 +0249,+060.00,+00.00,01.00,000.00,1.00 +0250,+060.00,+00.00,01.00,000.00,1.00 +0251,+060.00,+00.00,01.00,000.00,1.00 +0252,+060.00,+00.00,01.00,000.00,1.00 +0253,+060.00,+00.00,01.00,000.00,1.00 +0254,+060.00,+00.00,01.00,000.00,1.00 +0255,+060.00,+00.00,01.00,000.00,1.00 +0256,+060.00,+00.00,01.00,000.00,1.00 +0257,+060.00,+00.00,01.00,000.00,1.00 +0258,+060.00,+00.00,01.00,000.00,1.00 +0259,+060.00,+00.00,01.00,000.00,1.00 +0260,+060.00,+00.00,01.00,000.00,1.00 +0261,+060.00,+00.00,01.00,000.00,1.00 +0262,+060.00,+00.00,01.00,000.00,1.00 +0263,+060.00,+00.00,01.00,000.00,1.00 +0264,+060.00,+00.00,01.00,000.00,1.00 +0265,+060.00,+00.00,01.00,000.00,1.00 +0266,+060.00,+00.00,01.00,000.00,1.00 +0267,+060.00,+00.00,01.00,000.00,1.00 +0268,+060.00,+00.00,01.00,000.00,1.00 +0269,+060.00,+00.00,01.00,000.00,1.00 +0270,+060.00,+00.00,01.00,000.00,1.00 +0271,+060.00,+00.00,01.00,000.00,1.00 +0272,+060.00,+00.00,01.00,000.00,1.00 +0273,+060.00,+00.00,01.00,000.00,1.00 +0274,+060.00,+00.00,01.00,000.00,1.00 +0275,+060.00,+00.00,01.00,000.00,1.00 +0276,+060.00,+00.00,01.00,000.00,1.00 +0277,+060.00,+00.00,01.00,000.00,1.00 +0278,+060.00,+00.00,01.00,000.00,1.00 +0279,+060.00,+00.00,01.00,000.00,1.00 +0280,+060.00,+00.00,01.00,000.00,1.00 +0281,+060.00,+00.00,01.00,000.00,1.00 +0282,+060.00,+00.00,01.00,000.00,1.00 +0283,+060.00,+00.00,01.00,000.00,1.00 +0284,+060.00,+00.00,01.00,000.00,1.00 +0285,+060.00,+00.00,01.00,000.00,1.00 +0286,+060.00,+00.00,01.00,000.00,1.00 +0287,+060.00,+00.00,01.00,000.00,1.00 +0288,+060.00,+00.00,01.00,000.00,1.00 +0289,+060.00,+00.00,01.00,000.00,1.00 +0290,+060.00,+00.00,01.00,000.00,1.00 +0291,+060.00,+00.00,01.00,000.00,1.00 +0292,+060.00,+00.00,01.00,000.00,1.00 +0293,+060.00,+00.00,01.00,000.00,1.00 +0294,+060.00,+00.00,01.00,000.00,1.00 +0295,+060.00,+00.00,01.00,000.00,1.00 +0296,+060.00,+00.00,01.00,000.00,1.00 +0297,+060.00,+00.00,01.00,000.00,1.00 +0298,+060.00,+00.00,01.00,000.00,1.00 +0299,+060.00,+00.00,01.00,000.00,1.00 +0300,+060.00,+00.00,01.00,000.00,1.00 +0301,+060.00,+00.00,01.00,000.00,1.00 +0302,+060.00,+00.00,01.00,000.00,1.00 +0303,+060.00,+00.00,01.00,000.00,1.00 +0304,+060.00,+00.00,01.00,000.00,1.00 +0305,+060.00,+00.00,01.00,000.00,1.00 +0306,+060.00,+00.00,01.00,000.00,1.00 +0307,+060.00,+00.00,01.00,000.00,1.00 +0308,+060.00,+00.00,01.00,000.00,1.00 +0309,+060.00,+00.00,01.00,000.00,1.00 +0310,+060.00,+00.00,01.00,000.00,1.00 +0311,+060.00,+00.00,01.00,000.00,1.00 +0312,+060.00,+00.00,01.00,000.00,1.00 +0313,+060.00,+00.00,01.00,000.00,1.00 +0314,+060.00,+00.00,01.00,000.00,1.00 +0315,+060.00,+00.00,01.00,000.00,1.00 +0316,+060.00,+00.00,01.00,000.00,1.00 +0317,+060.00,+00.00,01.00,000.00,1.00 +0318,+060.00,+00.00,01.00,000.00,1.00 +0319,+060.00,+00.00,01.00,000.00,1.00 +0320,+060.00,+00.00,01.00,000.00,1.00 +0321,+060.00,+00.00,01.00,000.00,1.00 +0322,+060.00,+00.00,01.00,000.00,1.00 +0323,+060.00,+00.00,01.00,000.00,1.00 +0324,+060.00,+00.00,01.00,000.00,1.00 +0325,+060.00,+00.00,01.00,000.00,1.00 +0326,+060.00,+00.00,01.00,000.00,1.00 +0327,+060.00,+00.00,01.00,000.00,1.00 +0328,+060.00,+00.00,01.00,000.00,1.00 +0329,+060.00,+00.00,01.00,000.00,1.00 +0330,+060.00,+00.00,01.00,000.00,1.00 +0331,+060.00,+00.00,01.00,000.00,1.00 +0332,+060.00,+00.00,01.00,000.00,1.00 +0333,+060.00,+00.00,01.00,000.00,1.00 +0334,+060.00,+00.00,01.00,000.00,1.00 +0335,+060.00,+00.00,01.00,000.00,1.00 +0336,+060.00,+00.00,01.00,000.00,1.00 +0337,+060.00,+00.00,01.00,000.00,1.00 +0338,+060.00,+00.00,01.00,000.00,1.00 +0339,+060.00,+00.00,01.00,000.00,1.00 +0340,+060.00,+00.00,01.00,000.00,1.00 +0341,+060.00,+00.00,01.00,000.00,1.00 +0342,+060.00,+00.00,01.00,000.00,1.00 +0343,+060.00,+00.00,01.00,000.00,1.00 +0344,+060.00,+00.00,01.00,000.00,1.00 +0345,+060.00,+00.00,01.00,000.00,1.00 +0346,+060.00,+00.00,01.00,000.00,1.00 +0347,+060.00,+00.00,01.00,000.00,1.00 +0348,+060.00,+00.00,01.00,000.00,1.00 +0349,+060.00,+00.00,01.00,000.00,1.00 +0350,+060.00,+00.00,01.00,000.00,1.00 +0351,+060.00,+00.00,01.00,000.00,1.00 +0352,+060.00,+00.00,01.00,000.00,1.00 +0353,+060.00,+00.00,01.00,000.00,1.00 +0354,+060.00,+00.00,01.00,000.00,1.00 +0355,+060.00,+00.00,01.00,000.00,1.00 +0356,+060.00,+00.00,01.00,000.00,1.00 +0357,+060.00,+00.00,01.00,000.00,1.00 +0358,+060.00,+00.00,01.00,000.00,1.00 +0359,+060.00,+00.00,01.00,000.00,1.00 +0360,+060.00,+00.00,01.00,000.00,1.00 +0361,+060.00,+00.00,01.00,000.00,1.00 +0362,+060.00,+00.00,01.00,000.00,1.00 +0363,+060.00,+00.00,01.00,000.00,1.00 +0364,+060.00,+00.00,01.00,000.00,1.00 +0365,+060.00,+00.00,01.00,000.00,1.00 +0366,+060.00,+00.00,01.00,000.00,1.00 +0367,+060.00,+00.00,01.00,000.00,1.00 +0368,+060.00,+00.00,01.00,000.00,1.00 +0369,+060.00,+00.00,01.00,000.00,1.00 +0370,+060.00,+00.00,01.00,000.00,1.00 +0371,+060.00,+00.00,01.00,000.00,1.00 +0372,+060.00,+00.00,01.00,000.00,1.00 +0373,+060.00,+00.00,01.00,000.00,1.00 +0374,+060.00,+00.00,01.00,000.00,1.00 +0375,+060.00,+00.00,01.00,000.00,1.00 +0376,+060.00,+00.00,01.00,000.00,1.00 +0377,+060.00,+00.00,01.00,000.00,1.00 +0378,+060.00,+00.00,01.00,000.00,1.00 +0379,+060.00,+00.00,01.00,000.00,1.00 +0380,+060.00,+00.00,01.00,000.00,1.00 +0381,+060.00,+00.00,01.00,000.00,1.00 +0382,+060.00,+00.00,01.00,000.00,1.00 +0383,+060.00,+00.00,01.00,000.00,1.00 +0384,+060.00,+00.00,01.00,000.00,1.00 +0385,+060.00,+00.00,01.00,000.00,1.00 +0386,+060.00,+00.00,01.00,000.00,1.00 +0387,+060.00,+00.00,01.00,000.00,1.00 +0388,+060.00,+00.00,01.00,000.00,1.00 +0389,+060.00,+00.00,01.00,000.00,1.00 +0390,+060.00,+00.00,01.00,000.00,1.00 +0391,+060.00,+00.00,01.00,000.00,1.00 +0392,+060.00,+00.00,01.00,000.00,1.00 +0393,+060.00,+00.00,01.00,000.00,1.00 +0394,+060.00,+00.00,01.00,000.00,1.00 +0395,+060.00,+00.00,01.00,000.00,1.00 +0396,+060.00,+00.00,01.00,000.00,1.00 +0397,+060.00,+00.00,01.00,000.00,1.00 +0398,+060.00,+00.00,01.00,000.00,1.00 +0399,+060.00,+00.00,01.00,000.00,1.00 +0400,+060.00,+00.00,01.00,000.00,1.00 +0401,+060.00,+00.00,01.00,000.00,1.00 +0402,+060.00,+00.00,01.00,000.00,1.00 +0403,+060.00,+00.00,01.00,000.00,1.00 +0404,+060.00,+00.00,01.00,000.00,1.00 +0405,+060.00,+00.00,01.00,000.00,1.00 +0406,+060.00,+00.00,01.00,000.00,1.00 +0407,+060.00,+00.00,01.00,000.00,1.00 +0408,+060.00,+00.00,01.00,000.00,1.00 +0409,+060.00,+00.00,01.00,000.00,1.00 +0410,+060.00,+00.00,01.00,000.00,1.00 +0411,+060.00,+00.00,01.00,000.00,1.00 +0412,+060.00,+00.00,01.00,000.00,1.00 +0413,+060.00,+00.00,01.00,000.00,1.00 +0414,+060.00,+00.00,01.00,000.00,1.00 +0415,+060.00,+00.00,01.00,000.00,1.00 +0416,+060.00,+00.00,01.00,000.00,1.00 +0417,+060.00,+00.00,01.00,000.00,1.00 +0418,+060.00,+00.00,01.00,000.00,1.00 +0419,+060.00,+00.00,01.00,000.00,1.00 +0420,+060.00,+00.00,01.00,000.00,1.00 +0421,+060.00,+00.00,01.00,000.00,1.00 +0422,+060.00,+00.00,01.00,000.00,1.00 +0423,+060.00,+00.00,01.00,000.00,1.00 +0424,+060.00,+00.00,01.00,000.00,1.00 +0425,+060.00,+00.00,01.00,000.00,1.00 +0426,+060.00,+00.00,01.00,000.00,1.00 +0427,+060.00,+00.00,01.00,000.00,1.00 +0428,+060.00,+00.00,01.00,000.00,1.00 +0429,+060.00,+00.00,01.00,000.00,1.00 +0430,+060.00,+00.00,01.00,000.00,1.00 +0431,+060.00,+00.00,01.00,000.00,1.00 +0432,+060.00,+00.00,01.00,000.00,1.00 +0433,+060.00,+00.00,01.00,000.00,1.00 +0434,+060.00,+00.00,01.00,000.00,1.00 +0435,+060.00,+00.00,01.00,000.00,1.00 +0436,+060.00,+00.00,01.00,000.00,1.00 +0437,+060.00,+00.00,01.00,000.00,1.00 +0438,+060.00,+00.00,01.00,000.00,1.00 +0439,+060.00,+00.00,01.00,000.00,1.00 +0440,+060.00,+00.00,01.00,000.00,1.00 +0441,+060.00,+00.00,01.00,000.00,1.00 +0442,+060.00,+00.00,01.00,000.00,1.00 +0443,+060.00,+00.00,01.00,000.00,1.00 +0444,+060.00,+00.00,01.00,000.00,1.00 +0445,+060.00,+00.00,01.00,000.00,1.00 +0446,+060.00,+00.00,01.00,000.00,1.00 +0447,+060.00,+00.00,01.00,000.00,1.00 +0448,+060.00,+00.00,01.00,000.00,1.00 +0449,+060.00,+00.00,01.00,000.00,1.00 +0450,+060.00,+00.00,01.00,000.00,1.00 +0451,+060.00,+00.00,01.00,000.00,1.00 +0452,+060.00,+00.00,01.00,000.00,1.00 +0453,+060.00,+00.00,01.00,000.00,1.00 +0454,+060.00,+00.00,01.00,000.00,1.00 +0455,+060.00,+00.00,01.00,000.00,1.00 +0456,+060.00,+00.00,01.00,000.00,1.00 +0457,+060.00,+00.00,01.00,000.00,1.00 +0458,+060.00,+00.00,01.00,000.00,1.00 +0459,+060.00,+00.00,01.00,000.00,1.00 +0460,+060.00,+00.00,01.00,000.00,1.00 +0461,+060.00,+00.00,01.00,000.00,1.00 +0462,+060.00,+00.00,01.00,000.00,1.00 +0463,+060.00,+00.00,01.00,000.00,1.00 +0464,+060.00,+00.00,01.00,000.00,1.00 +0465,+060.00,+00.00,01.00,000.00,1.00 +0466,+060.00,+00.00,01.00,000.00,1.00 +0467,+060.00,+00.00,01.00,000.00,1.00 +0468,+060.00,+00.00,01.00,000.00,1.00 +0469,+060.00,+00.00,01.00,000.00,1.00 +0470,+060.00,+00.00,01.00,000.00,1.00 +0471,+060.00,+00.00,01.00,000.00,1.00 +0472,+060.00,+00.00,01.00,000.00,1.00 +0473,+060.00,+00.00,01.00,000.00,1.00 +0474,+060.00,+00.00,01.00,000.00,1.00 +0475,+060.00,+00.00,01.00,000.00,1.00 +0476,+060.00,+00.00,01.00,000.00,1.00 +0477,+060.00,+00.00,01.00,000.00,1.00 +0478,+060.00,+00.00,01.00,000.00,1.00 +0479,+060.00,+00.00,01.00,000.00,1.00 +0480,+060.00,+00.00,01.00,000.00,1.00 +0481,+060.00,+00.00,01.00,000.00,1.00 +0482,+060.00,+00.00,01.00,000.00,1.00 +0483,+060.00,+00.00,01.00,000.00,1.00 +0484,+060.00,+00.00,01.00,000.00,1.00 +0485,+060.00,+00.00,01.00,000.00,1.00 +0486,+060.00,+00.00,01.00,000.00,1.00 +0487,+060.00,+00.00,01.00,000.00,1.00 +0488,+060.00,+00.00,01.00,000.00,1.00 +0489,+060.00,+00.00,01.00,000.00,1.00 +0490,+060.00,+00.00,01.00,000.00,1.00 +0491,+060.00,+00.00,01.00,000.00,1.00 +0492,+060.00,+00.00,01.00,000.00,1.00 +0493,+060.00,+00.00,01.00,000.00,1.00 +0494,+060.00,+00.00,01.00,000.00,1.00 +0495,+060.00,+00.00,01.00,000.00,1.00 +0496,+060.00,+00.00,01.00,000.00,1.00 +0497,+060.00,+00.00,01.00,000.00,1.00 +0498,+060.00,+00.00,01.00,000.00,1.00 +0499,+060.00,+00.00,01.00,000.00,1.00 +0500,+060.00,+00.00,01.00,000.00,1.00 +0501,+060.00,+00.00,01.00,000.00,1.00 +0502,+060.00,+00.00,01.00,000.00,1.00 +0503,+060.00,+00.00,01.00,000.00,1.00 +0504,+060.00,+00.00,01.00,000.00,1.00 +0505,+060.00,+00.00,01.00,000.00,1.00 +0506,+060.00,+00.00,01.00,000.00,1.00 +0507,+060.00,+00.00,01.00,000.00,1.00 +0508,+060.00,+00.00,01.00,000.00,1.00 +0509,+060.00,+00.00,01.00,000.00,1.00 +0510,+060.00,+00.00,01.00,000.00,1.00 +0511,+060.00,+00.00,01.00,000.00,1.00 +0512,+060.00,+00.00,01.00,000.00,1.00 +0513,+060.00,+00.00,01.00,000.00,1.00 +0514,+060.00,+00.00,01.00,000.00,1.00 +0515,+060.00,+00.00,01.00,000.00,1.00 +0516,+060.00,+00.00,01.00,000.00,1.00 +0517,+060.00,+00.00,01.00,000.00,1.00 +0518,+060.00,+00.00,01.00,000.00,1.00 +0519,+060.00,+00.00,01.00,000.00,1.00 +0520,+060.00,+00.00,01.00,000.00,1.00 +0521,+060.00,+00.00,01.00,000.00,1.00 +0522,+060.00,+00.00,01.00,000.00,1.00 +0523,+060.00,+00.00,01.00,000.00,1.00 +0524,+060.00,+00.00,01.00,000.00,1.00 +0525,+060.00,+00.00,01.00,000.00,1.00 +0526,+060.00,+00.00,01.00,000.00,1.00 +0527,+060.00,+00.00,01.00,000.00,1.00 +0528,+060.00,+00.00,01.00,000.00,1.00 +0529,+060.00,+00.00,01.00,000.00,1.00 +0530,+060.00,+00.00,01.00,000.00,1.00 +0531,+060.00,+00.00,01.00,000.00,1.00 +0532,+060.00,+00.00,01.00,000.00,1.00 +0533,+060.00,+00.00,01.00,000.00,1.00 +0534,+060.00,+00.00,01.00,000.00,1.00 +0535,+060.00,+00.00,01.00,000.00,1.00 +0536,+060.00,+00.00,01.00,000.00,1.00 +0537,+060.00,+00.00,01.00,000.00,1.00 +0538,+060.00,+00.00,01.00,000.00,1.00 +0539,+060.00,+00.00,01.00,000.00,1.00 +0540,+060.00,+00.00,01.00,000.00,1.00 +0541,+060.00,+00.00,01.00,000.00,1.00 +0542,+060.00,+00.00,01.00,000.00,1.00 +0543,+060.00,+00.00,01.00,000.00,1.00 +0544,+060.00,+00.00,01.00,000.00,1.00 +0545,+060.00,+00.00,01.00,000.00,1.00 +0546,+060.00,+00.00,01.00,000.00,1.00 +0547,+060.00,+00.00,01.00,000.00,1.00 +0548,+060.00,+00.00,01.00,000.00,1.00 +0549,+060.00,+00.00,01.00,000.00,1.00 +0550,+060.00,+00.00,01.00,000.00,1.00 +0551,+060.00,+00.00,01.00,000.00,1.00 +0552,+060.00,+00.00,01.00,000.00,1.00 +0553,+060.00,+00.00,01.00,000.00,1.00 +0554,+060.00,+00.00,01.00,000.00,1.00 +0555,+060.00,+00.00,01.00,000.00,1.00 +0556,+060.00,+00.00,01.00,000.00,1.00 +0557,+060.00,+00.00,01.00,000.00,1.00 +0558,+060.00,+00.00,01.00,000.00,1.00 +0559,+060.00,+00.00,01.00,000.00,1.00 +0560,+060.00,+00.00,01.00,000.00,1.00 +0561,+060.00,+00.00,01.00,000.00,1.00 +0562,+060.00,+00.00,01.00,000.00,1.00 +0563,+060.00,+00.00,01.00,000.00,1.00 +0564,+060.00,+00.00,01.00,000.00,1.00 +0565,+060.00,+00.00,01.00,000.00,1.00 +0566,+060.00,+00.00,01.00,000.00,1.00 +0567,+060.00,+00.00,01.00,000.00,1.00 +0568,+060.00,+00.00,01.00,000.00,1.00 +0569,+060.00,+00.00,01.00,000.00,1.00 +0570,+060.00,+00.00,01.00,000.00,1.00 +0571,+060.00,+00.00,01.00,000.00,1.00 +0572,+060.00,+00.00,01.00,000.00,1.00 +0573,+060.00,+00.00,01.00,000.00,1.00 +0574,+060.00,+00.00,01.00,000.00,1.00 +0575,+060.00,+00.00,01.00,000.00,1.00 +0576,+060.00,+00.00,01.00,000.00,1.00 +0577,+060.00,+00.00,01.00,000.00,1.00 +0578,+060.00,+00.00,01.00,000.00,1.00 +0579,+060.00,+00.00,01.00,000.00,1.00 +0580,+060.00,+00.00,01.00,000.00,1.00 +0581,+060.00,+00.00,01.00,000.00,1.00 +0582,+060.00,+00.00,01.00,000.00,1.00 +0583,+060.00,+00.00,01.00,000.00,1.00 +0584,+060.00,+00.00,01.00,000.00,1.00 +0585,+060.00,+00.00,01.00,000.00,1.00 +0586,+060.00,+00.00,01.00,000.00,1.00 +0587,+060.00,+00.00,01.00,000.00,1.00 +0588,+060.00,+00.00,01.00,000.00,1.00 +0589,+060.00,+00.00,01.00,000.00,1.00 +0590,+060.00,+00.00,01.00,000.00,1.00 +0591,+060.00,+00.00,01.00,000.00,1.00 +0592,+060.00,+00.00,01.00,000.00,1.00 +0593,+060.00,+00.00,01.00,000.00,1.00 +0594,+060.00,+00.00,01.00,000.00,1.00 +0595,+060.00,+00.00,01.00,000.00,1.00 +0596,+060.00,+00.00,01.00,000.00,1.00 +0597,+060.00,+00.00,01.00,000.00,1.00 +0598,+060.00,+00.00,01.00,000.00,1.00 +0599,+060.00,+00.00,01.00,000.00,1.00 +0600,+060.00,+00.00,01.00,000.00,1.00 +0601,+060.00,+00.00,01.00,000.00,1.00 +0602,+060.00,+00.00,01.00,000.00,1.00 +0603,+060.00,+00.00,01.00,000.00,1.00 +0604,+060.00,+00.00,01.00,000.00,1.00 +0605,+060.00,+00.00,01.00,000.00,1.00 +0606,+060.00,+00.00,01.00,000.00,1.00 +0607,+060.00,+00.00,01.00,000.00,1.00 +0608,+060.00,+00.00,01.00,000.00,1.00 +0609,+060.00,+00.00,01.00,000.00,1.00 +0610,+060.00,+00.00,01.00,000.00,1.00 +0611,+060.00,+00.00,01.00,000.00,1.00 +0612,+060.00,+00.00,01.00,000.00,1.00 +0613,+060.00,+00.00,01.00,000.00,1.00 +0614,+060.00,+00.00,01.00,000.00,1.00 +0615,+060.00,+00.00,01.00,000.00,1.00 +0616,+060.00,+00.00,01.00,000.00,1.00 +0617,+060.00,+00.00,01.00,000.00,1.00 +0618,+060.00,+00.00,01.00,000.00,1.00 +0619,+060.00,+00.00,01.00,000.00,1.00 +0620,+060.00,+00.00,01.00,000.00,1.00 +0621,+060.00,+00.00,01.00,000.00,1.00 +0622,+060.00,+00.00,01.00,000.00,1.00 +0623,+060.00,+00.00,01.00,000.00,1.00 +0624,+060.00,+00.00,01.00,000.00,1.00 +0625,+060.00,+00.00,01.00,000.00,1.00 +0626,+060.00,+00.00,01.00,000.00,1.00 +0627,+060.00,+00.00,01.00,000.00,1.00 +0628,+060.00,+00.00,01.00,000.00,1.00 +0629,+060.00,+00.00,01.00,000.00,1.00 +0630,+060.00,+00.00,01.00,000.00,1.00 +0631,+060.00,+00.00,01.00,000.00,1.00 +0632,+060.00,+00.00,01.00,000.00,1.00 +0633,+060.00,+00.00,01.00,000.00,1.00 +0634,+060.00,+00.00,01.00,000.00,1.00 +0635,+060.00,+00.00,01.00,000.00,1.00 +0636,+060.00,+00.00,01.00,000.00,1.00 +0637,+060.00,+00.00,01.00,000.00,1.00 +0638,+060.00,+00.00,01.00,000.00,1.00 +0639,+060.00,+00.00,01.00,000.00,1.00 +0640,+060.00,+00.00,01.00,000.00,1.00 +0641,+060.00,+00.00,01.00,000.00,1.00 +0642,+060.00,+00.00,01.00,000.00,1.00 +0643,+060.00,+00.00,01.00,000.00,1.00 +0644,+060.00,+00.00,01.00,000.00,1.00 +0645,+060.00,+00.00,01.00,000.00,1.00 +0646,+060.00,+00.00,01.00,000.00,1.00 +0647,+060.00,+00.00,01.00,000.00,1.00 +0648,+060.00,+00.00,01.00,000.00,1.00 +0649,+060.00,+00.00,01.00,000.00,1.00 +0650,+060.00,+00.00,01.00,000.00,1.00 +0651,+060.00,+00.00,01.00,000.00,1.00 +0652,+060.00,+00.00,01.00,000.00,1.00 +0653,+060.00,+00.00,01.00,000.00,1.00 +0654,+060.00,+00.00,01.00,000.00,1.00 +0655,+060.00,+00.00,01.00,000.00,1.00 +0656,+060.00,+00.00,01.00,000.00,1.00 +0657,+060.00,+00.00,01.00,000.00,1.00 +0658,+060.00,+00.00,01.00,000.00,1.00 +0659,+060.00,+00.00,01.00,000.00,1.00 +0660,+060.00,+00.00,01.00,000.00,1.00 +0661,+060.00,+00.00,01.00,000.00,1.00 +0662,+060.00,+00.00,01.00,000.00,1.00 +0663,+060.00,+00.00,01.00,000.00,1.00 +0664,+060.00,+00.00,01.00,000.00,1.00 +0665,+060.00,+00.00,01.00,000.00,1.00 +0666,+060.00,+00.00,01.00,000.00,1.00 +0667,+060.00,+00.00,01.00,000.00,1.00 +0668,+060.00,+00.00,01.00,000.00,1.00 +0669,+060.00,+00.00,01.00,000.00,1.00 +0670,+060.00,+00.00,01.00,000.00,1.00 +0671,+060.00,+00.00,01.00,000.00,1.00 +0672,+060.00,+00.00,01.00,000.00,1.00 +0673,+060.00,+00.00,01.00,000.00,1.00 +0674,+060.00,+00.00,01.00,000.00,1.00 +0675,+060.00,+00.00,01.00,000.00,1.00 +0676,+060.00,+00.00,01.00,000.00,1.00 +0677,+060.00,+00.00,01.00,000.00,1.00 +0678,+060.00,+00.00,01.00,000.00,1.00 +0679,+060.00,+00.00,01.00,000.00,1.00 +0680,+060.00,+00.00,01.00,000.00,1.00 +0681,+060.00,+00.00,01.00,000.00,1.00 +0682,+060.00,+00.00,01.00,000.00,1.00 +0683,+060.00,+00.00,01.00,000.00,1.00 +0684,+060.00,+00.00,01.00,000.00,1.00 +0685,+060.00,+00.00,01.00,000.00,1.00 +0686,+060.00,+00.00,01.00,000.00,1.00 +0687,+060.00,+00.00,01.00,000.00,1.00 +0688,+060.00,+00.00,01.00,000.00,1.00 +0689,+060.00,+00.00,01.00,000.00,1.00 +0690,+060.00,+00.00,01.00,000.00,1.00 +0691,+060.00,+00.00,01.00,000.00,1.00 +0692,+060.00,+00.00,01.00,000.00,1.00 +0693,+060.00,+00.00,01.00,000.00,1.00 +0694,+060.00,+00.00,01.00,000.00,1.00 +0695,+060.00,+00.00,01.00,000.00,1.00 +0696,+060.00,+00.00,01.00,000.00,1.00 +0697,+060.00,+00.00,01.00,000.00,1.00 +0698,+060.00,+00.00,01.00,000.00,1.00 +0699,+060.00,+00.00,01.00,000.00,1.00 +0700,+060.00,+00.00,01.00,000.00,1.00 +0701,+060.00,+00.00,01.00,000.00,1.00 +0702,+060.00,+00.00,01.00,000.00,1.00 +0703,+060.00,+00.00,01.00,000.00,1.00 +0704,+060.00,+00.00,01.00,000.00,1.00 +0705,+060.00,+00.00,01.00,000.00,1.00 +0706,+060.00,+00.00,01.00,000.00,1.00 +0707,+060.00,+00.00,01.00,000.00,1.00 +0708,+060.00,+00.00,01.00,000.00,1.00 +0709,+060.00,+00.00,01.00,000.00,1.00 +0710,+060.00,+00.00,01.00,000.00,1.00 +0711,+060.00,+00.00,01.00,000.00,1.00 +0712,+060.00,+00.00,01.00,000.00,1.00 +0713,+060.00,+00.00,01.00,000.00,1.00 +0714,+060.00,+00.00,01.00,000.00,1.00 +0715,+060.00,+00.00,01.00,000.00,1.00 +0716,+060.00,+00.00,01.00,000.00,1.00 +0717,+060.00,+00.00,01.00,000.00,1.00 +0718,+060.00,+00.00,01.00,000.00,1.00 +0719,+060.00,+00.00,01.00,000.00,1.00 +0720,+060.00,+00.00,01.00,000.00,1.00 +0721,+060.00,+00.00,01.00,000.00,1.00 +0722,+060.00,+00.00,01.00,000.00,1.00 +0723,+060.00,+00.00,01.00,000.00,1.00 +0724,+060.00,+00.00,01.00,000.00,1.00 +0725,+060.00,+00.00,01.00,000.00,1.00 +0726,+060.00,+00.00,01.00,000.00,1.00 +0727,+060.00,+00.00,01.00,000.00,1.00 +0728,+060.00,+00.00,01.00,000.00,1.00 +0729,+060.00,+00.00,01.00,000.00,1.00 +0730,+060.00,+00.00,01.00,000.00,1.00 +0731,+060.00,+00.00,01.00,000.00,1.00 +0732,+060.00,+00.00,01.00,000.00,1.00 +0733,+060.00,+00.00,01.00,000.00,1.00 +0734,+060.00,+00.00,01.00,000.00,1.00 +0735,+060.00,+00.00,01.00,000.00,1.00 +0736,+060.00,+00.00,01.00,000.00,1.00 +0737,+060.00,+00.00,01.00,000.00,1.00 +0738,+060.00,+00.00,01.00,000.00,1.00 +0739,+060.00,+00.00,01.00,000.00,1.00 +0740,+060.00,+00.00,01.00,000.00,1.00 +0741,+060.00,+00.00,01.00,000.00,1.00 +0742,+060.00,+00.00,01.00,000.00,1.00 +0743,+060.00,+00.00,01.00,000.00,1.00 +0744,+060.00,+00.00,01.00,000.00,1.00 +0745,+060.00,+00.00,01.00,000.00,1.00 +0746,+060.00,+00.00,01.00,000.00,1.00 +0747,+060.00,+00.00,01.00,000.00,1.00 +0748,+060.00,+00.00,01.00,000.00,1.00 +0749,+060.00,+00.00,01.00,000.00,1.00 +0750,+060.00,+00.00,01.00,000.00,1.00 +0751,+060.00,+00.00,01.00,000.00,1.00 +0752,+060.00,+00.00,01.00,000.00,1.00 +0753,+060.00,+00.00,01.00,000.00,1.00 +0754,+060.00,+00.00,01.00,000.00,1.00 +0755,+060.00,+00.00,01.00,000.00,1.00 +0756,+060.00,+00.00,01.00,000.00,1.00 +0757,+060.00,+00.00,01.00,000.00,1.00 +0758,+060.00,+00.00,01.00,000.00,1.00 +0759,+060.00,+00.00,01.00,000.00,1.00 +0760,+060.00,+00.00,01.00,000.00,1.00 +0761,+060.00,+00.00,01.00,000.00,1.00 +0762,+060.00,+00.00,01.00,000.00,1.00 +0763,+060.00,+00.00,01.00,000.00,1.00 +0764,+060.00,+00.00,01.00,000.00,1.00 +0765,+060.00,+00.00,01.00,000.00,1.00 +0766,+060.00,+00.00,01.00,000.00,1.00 +0767,+060.00,+00.00,01.00,000.00,1.00 +0768,+060.00,+00.00,01.00,000.00,1.00 +0769,+060.00,+00.00,01.00,000.00,1.00 +0770,+060.00,+00.00,01.00,000.00,1.00 +0771,+060.00,+00.00,01.00,000.00,1.00 +0772,+060.00,+00.00,01.00,000.00,1.00 +0773,+060.00,+00.00,01.00,000.00,1.00 +0774,+060.00,+00.00,01.00,000.00,1.00 +0775,+060.00,+00.00,01.00,000.00,1.00 +0776,+060.00,+00.00,01.00,000.00,1.00 +0777,+060.00,+00.00,01.00,000.00,1.00 +0778,+060.00,+00.00,01.00,000.00,1.00 +0779,+060.00,+00.00,01.00,000.00,1.00 +0780,+060.00,+00.00,01.00,000.00,1.00 +0781,+060.00,+00.00,01.00,000.00,1.00 +0782,+060.00,+00.00,01.00,000.00,1.00 +0783,+060.00,+00.00,01.00,000.00,1.00 +0784,+060.00,+00.00,01.00,000.00,1.00 +0785,+060.00,+00.00,01.00,000.00,1.00 +0786,+060.00,+00.00,01.00,000.00,1.00 +0787,+060.00,+00.00,01.00,000.00,1.00 +0788,+060.00,+00.00,01.00,000.00,1.00 +0789,+060.00,+00.00,01.00,000.00,1.00 +0790,+060.00,+00.00,01.00,000.00,1.00 +0791,+060.00,+00.00,01.00,000.00,1.00 +0792,+060.00,+00.00,01.00,000.00,1.00 +0793,+060.00,+00.00,01.00,000.00,1.00 +0794,+060.00,+00.00,01.00,000.00,1.00 +0795,+060.00,+00.00,01.00,000.00,1.00 +0796,+060.00,+00.00,01.00,000.00,1.00 +0797,+060.00,+00.00,01.00,000.00,1.00 +0798,+060.00,+00.00,01.00,000.00,1.00 +0799,+060.00,+00.00,01.00,000.00,1.00 +0800,+060.00,+00.00,01.00,000.00,1.00 +0801,+060.00,+00.00,01.00,000.00,1.00 +0802,+060.00,+00.00,01.00,000.00,1.00 +0803,+060.00,+00.00,01.00,000.00,1.00 +0804,+060.00,+00.00,01.00,000.00,1.00 +0805,+060.00,+00.00,01.00,000.00,1.00 +0806,+060.00,+00.00,01.00,000.00,1.00 +0807,+060.00,+00.00,01.00,000.00,1.00 +0808,+060.00,+00.00,01.00,000.00,1.00 +0809,+060.00,+00.00,01.00,000.00,1.00 +0810,+060.00,+00.00,01.00,000.00,1.00 +0811,+060.00,+00.00,01.00,000.00,1.00 +0812,+060.00,+00.00,01.00,000.00,1.00 +0813,+060.00,+00.00,01.00,000.00,1.00 +0814,+060.00,+00.00,01.00,000.00,1.00 +0815,+060.00,+00.00,01.00,000.00,1.00 +0816,+060.00,+00.00,01.00,000.00,1.00 +0817,+060.00,+00.00,01.00,000.00,1.00 +0818,+060.00,+00.00,01.00,000.00,1.00 +0819,+060.00,+00.00,01.00,000.00,1.00 +0820,+060.00,+00.00,01.00,000.00,1.00 +0821,+060.00,+00.00,01.00,000.00,1.00 +0822,+060.00,+00.00,01.00,000.00,1.00 +0823,+060.00,+00.00,01.00,000.00,1.00 +0824,+060.00,+00.00,01.00,000.00,1.00 +0825,+060.00,+00.00,01.00,000.00,1.00 +0826,+060.00,+00.00,01.00,000.00,1.00 +0827,+060.00,+00.00,01.00,000.00,1.00 +0828,+060.00,+00.00,01.00,000.00,1.00 +0829,+060.00,+00.00,01.00,000.00,1.00 +0830,+060.00,+00.00,01.00,000.00,1.00 +0831,+060.00,+00.00,01.00,000.00,1.00 +0832,+060.00,+00.00,01.00,000.00,1.00 +0833,+060.00,+00.00,01.00,000.00,1.00 +0834,+060.00,+00.00,01.00,000.00,1.00 +0835,+060.00,+00.00,01.00,000.00,1.00 +0836,+060.00,+00.00,01.00,000.00,1.00 +0837,+060.00,+00.00,01.00,000.00,1.00 +0838,+060.00,+00.00,01.00,000.00,1.00 +0839,+060.00,+00.00,01.00,000.00,1.00 +0840,+060.00,+00.00,01.00,000.00,1.00 +0841,+060.00,+00.00,01.00,000.00,1.00 +0842,+060.00,+00.00,01.00,000.00,1.00 +0843,+060.00,+00.00,01.00,000.00,1.00 +0844,+060.00,+00.00,01.00,000.00,1.00 +0845,+060.00,+00.00,01.00,000.00,1.00 +0846,+060.00,+00.00,01.00,000.00,1.00 +0847,+060.00,+00.00,01.00,000.00,1.00 +0848,+060.00,+00.00,01.00,000.00,1.00 +0849,+060.00,+00.00,01.00,000.00,1.00 +0850,+060.00,+00.00,01.00,000.00,1.00 +0851,+060.00,+00.00,01.00,000.00,1.00 +0852,+060.00,+00.00,01.00,000.00,1.00 +0853,+060.00,+00.00,01.00,000.00,1.00 +0854,+060.00,+00.00,01.00,000.00,1.00 +0855,+060.00,+00.00,01.00,000.00,1.00 +0856,+060.00,+00.00,01.00,000.00,1.00 +0857,+060.00,+00.00,01.00,000.00,1.00 +0858,+060.00,+00.00,01.00,000.00,1.00 +0859,+060.00,+00.00,01.00,000.00,1.00 +0860,+060.00,+00.00,01.00,000.00,1.00 +0861,+060.00,+00.00,01.00,000.00,1.00 +0862,+060.00,+00.00,01.00,000.00,1.00 +0863,+060.00,+00.00,01.00,000.00,1.00 +0864,+060.00,+00.00,01.00,000.00,1.00 +0865,+060.00,+00.00,01.00,000.00,1.00 +0866,+060.00,+00.00,01.00,000.00,1.00 +0867,+060.00,+00.00,01.00,000.00,1.00 +0868,+060.00,+00.00,01.00,000.00,1.00 +0869,+060.00,+00.00,01.00,000.00,1.00 +0870,+060.00,+00.00,01.00,000.00,1.00 +0871,+060.00,+00.00,01.00,000.00,1.00 +0872,+060.00,+00.00,01.00,000.00,1.00 +0873,+060.00,+00.00,01.00,000.00,1.00 +0874,+060.00,+00.00,01.00,000.00,1.00 +0875,+060.00,+00.00,01.00,000.00,1.00 +0876,+060.00,+00.00,01.00,000.00,1.00 +0877,+060.00,+00.00,01.00,000.00,1.00 +0878,+060.00,+00.00,01.00,000.00,1.00 +0879,+060.00,+00.00,01.00,000.00,1.00 +0880,+060.00,+00.00,01.00,000.00,1.00 +0881,+060.00,+00.00,01.00,000.00,1.00 +0882,+060.00,+00.00,01.00,000.00,1.00 +0883,+060.00,+00.00,01.00,000.00,1.00 +0884,+060.00,+00.00,01.00,000.00,1.00 +0885,+060.00,+00.00,01.00,000.00,1.00 +0886,+060.00,+00.00,01.00,000.00,1.00 +0887,+060.00,+00.00,01.00,000.00,1.00 +0888,+060.00,+00.00,01.00,000.00,1.00 +0889,+060.00,+00.00,01.00,000.00,1.00 +0890,+060.00,+00.00,01.00,000.00,1.00 +0891,+060.00,+00.00,01.00,000.00,1.00 +0892,+060.00,+00.00,01.00,000.00,1.00 +0893,+060.00,+00.00,01.00,000.00,1.00 +0894,+060.00,+00.00,01.00,000.00,1.00 +0895,+060.00,+00.00,01.00,000.00,1.00 +0896,+060.00,+00.00,01.00,000.00,1.00 +0897,+060.00,+00.00,01.00,000.00,1.00 +0898,+060.00,+00.00,01.00,000.00,1.00 +0899,+060.00,+00.00,01.00,000.00,1.00 +0900,+060.00,+00.00,01.00,000.00,1.00 +0901,+060.00,+00.00,01.00,000.00,1.00 +0902,+060.00,+00.00,01.00,000.00,1.00 +0903,+060.00,+00.00,01.00,000.00,1.00 +0904,+060.00,+00.00,01.00,000.00,1.00 +0905,+060.00,+00.00,01.00,000.00,1.00 +0906,+060.00,+00.00,01.00,000.00,1.00 +0907,+060.00,+00.00,01.00,000.00,1.00 +0908,+060.00,+00.00,01.00,000.00,1.00 +0909,+060.00,+00.00,01.00,000.00,1.00 +0910,+060.00,+00.00,01.00,000.00,1.00 +0911,+060.00,+00.00,01.00,000.00,1.00 +0912,+060.00,+00.00,01.00,000.00,1.00 +0913,+060.00,+00.00,01.00,000.00,1.00 +0914,+060.00,+00.00,01.00,000.00,1.00 +0915,+060.00,+00.00,01.00,000.00,1.00 +0916,+060.00,+00.00,01.00,000.00,1.00 +0917,+060.00,+00.00,01.00,000.00,1.00 +0918,+060.00,+00.00,01.00,000.00,1.00 +0919,+060.00,+00.00,01.00,000.00,1.00 +0920,+060.00,+00.00,01.00,000.00,1.00 +0921,+060.00,+00.00,01.00,000.00,1.00 +0922,+060.00,+00.00,01.00,000.00,1.00 +0923,+060.00,+00.00,01.00,000.00,1.00 +0924,+060.00,+00.00,01.00,000.00,1.00 +0925,+060.00,+00.00,01.00,000.00,1.00 +0926,+060.00,+00.00,01.00,000.00,1.00 +0927,+060.00,+00.00,01.00,000.00,1.00 +0928,+060.00,+00.00,01.00,000.00,1.00 +0929,+060.00,+00.00,01.00,000.00,1.00 +0930,+060.00,+00.00,01.00,000.00,1.00 +0931,+060.00,+00.00,01.00,000.00,1.00 +0932,+060.00,+00.00,01.00,000.00,1.00 +0933,+060.00,+00.00,01.00,000.00,1.00 +0934,+060.00,+00.00,01.00,000.00,1.00 +0935,+060.00,+00.00,01.00,000.00,1.00 +0936,+060.00,+00.00,01.00,000.00,1.00 +0937,+060.00,+00.00,01.00,000.00,1.00 +0938,+060.00,+00.00,01.00,000.00,1.00 +0939,+060.00,+00.00,01.00,000.00,1.00 +0940,+060.00,+00.00,01.00,000.00,1.00 +0941,+060.00,+00.00,01.00,000.00,1.00 +0942,+060.00,+00.00,01.00,000.00,1.00 +0943,+060.00,+00.00,01.00,000.00,1.00 +0944,+060.00,+00.00,01.00,000.00,1.00 +0945,+060.00,+00.00,01.00,000.00,1.00 +0946,+060.00,+00.00,01.00,000.00,1.00 +0947,+060.00,+00.00,01.00,000.00,1.00 +0948,+060.00,+00.00,01.00,000.00,1.00 +0949,+060.00,+00.00,01.00,000.00,1.00 +0950,+060.00,+00.00,01.00,000.00,1.00 +0951,+060.00,+00.00,01.00,000.00,1.00 +0952,+060.00,+00.00,01.00,000.00,1.00 +0953,+060.00,+00.00,01.00,000.00,1.00 +0954,+060.00,+00.00,01.00,000.00,1.00 +0955,+060.00,+00.00,01.00,000.00,1.00 +0956,+060.00,+00.00,01.00,000.00,1.00 +0957,+060.00,+00.00,01.00,000.00,1.00 +0958,+060.00,+00.00,01.00,000.00,1.00 +0959,+060.00,+00.00,01.00,000.00,1.00 +0960,+060.00,+00.00,01.00,000.00,1.00 +0961,+060.00,+00.00,01.00,000.00,1.00 +0962,+060.00,+00.00,01.00,000.00,1.00 +0963,+060.00,+00.00,01.00,000.00,1.00 +0964,+060.00,+00.00,01.00,000.00,1.00 +0965,+060.00,+00.00,01.00,000.00,1.00 +0966,+060.00,+00.00,01.00,000.00,1.00 +0967,+060.00,+00.00,01.00,000.00,1.00 +0968,+060.00,+00.00,01.00,000.00,1.00 +0969,+060.00,+00.00,01.00,000.00,1.00 +0970,+060.00,+00.00,01.00,000.00,1.00 +0971,+060.00,+00.00,01.00,000.00,1.00 +0972,+060.00,+00.00,01.00,000.00,1.00 +0973,+060.00,+00.00,01.00,000.00,1.00 +0974,+060.00,+00.00,01.00,000.00,1.00 +0975,+060.00,+00.00,01.00,000.00,1.00 +0976,+060.00,+00.00,01.00,000.00,1.00 +0977,+060.00,+00.00,01.00,000.00,1.00 +0978,+060.00,+00.00,01.00,000.00,1.00 +0979,+060.00,+00.00,01.00,000.00,1.00 +0980,+060.00,+00.00,01.00,000.00,1.00 +0981,+060.00,+00.00,01.00,000.00,1.00 +0982,+060.00,+00.00,01.00,000.00,1.00 +0983,+060.00,+00.00,01.00,000.00,1.00 +0984,+060.00,+00.00,01.00,000.00,1.00 +0985,+060.00,+00.00,01.00,000.00,1.00 +0986,+060.00,+00.00,01.00,000.00,1.00 +0987,+060.00,+00.00,01.00,000.00,1.00 +0988,+060.00,+00.00,01.00,000.00,1.00 +0989,+060.00,+00.00,01.00,000.00,1.00 +0990,+060.00,+00.00,01.00,000.00,1.00 +0991,+060.00,+00.00,01.00,000.00,1.00 +0992,+060.00,+00.00,01.00,000.00,1.00 +0993,+060.00,+00.00,01.00,000.00,1.00 +0994,+060.00,+00.00,01.00,000.00,1.00 +0995,+060.00,+00.00,01.00,000.00,1.00 +0996,+060.00,+00.00,01.00,000.00,1.00 +0997,+060.00,+00.00,01.00,000.00,1.00 +0998,+060.00,+00.00,01.00,000.00,1.00 +0999,+060.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t06_ch1.csv b/scripts/td_object_renderer/metadata/csv/t06_ch1.csv new file mode 100644 index 0000000000..779d8f654a --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t06_ch1.csv @@ -0,0 +1,1000 @@ +0000,-050.00,+00.00,01.00,000.00,1.00 +0001,-050.00,+00.00,01.00,000.00,1.00 +0002,-050.00,+00.00,01.00,000.00,1.00 +0003,-050.00,+00.00,01.00,000.00,1.00 +0004,-050.00,+00.00,01.00,000.00,1.00 +0005,-050.00,+00.00,01.00,000.00,1.00 +0006,-050.00,+00.00,01.00,000.00,1.00 +0007,-050.00,+00.00,01.00,000.00,1.00 +0008,-050.00,+00.00,01.00,000.00,1.00 +0009,-050.00,+00.00,01.00,000.00,1.00 +0010,-050.00,+00.00,01.00,000.00,1.00 +0011,-050.00,+00.00,01.00,000.00,1.00 +0012,-050.00,+00.00,01.00,000.00,1.00 +0013,-050.00,+00.00,01.00,000.00,1.00 +0014,-050.00,+00.00,01.00,000.00,1.00 +0015,-050.00,+00.00,01.00,000.00,1.00 +0016,-050.00,+00.00,01.00,000.00,1.00 +0017,-050.00,+00.00,01.00,000.00,1.00 +0018,-050.00,+00.00,01.00,000.00,1.00 +0019,-050.00,+00.00,01.00,000.00,1.00 +0020,-050.00,+00.00,01.00,000.00,1.00 +0021,-050.00,+00.00,01.00,000.00,1.00 +0022,-050.00,+00.00,01.00,000.00,1.00 +0023,-050.00,+00.00,01.00,000.00,1.00 +0024,-050.00,+00.00,01.00,000.00,1.00 +0025,-050.00,+00.00,01.00,000.00,1.00 +0026,-050.00,+00.00,01.00,000.00,1.00 +0027,-050.00,+00.00,01.00,000.00,1.00 +0028,-050.00,+00.00,01.00,000.00,1.00 +0029,-050.00,+00.00,01.00,000.00,1.00 +0030,-050.00,+00.00,01.00,000.00,1.00 +0031,-050.00,+00.00,01.00,000.00,1.00 +0032,-050.00,+00.00,01.00,000.00,1.00 +0033,-050.00,+00.00,01.00,000.00,1.00 +0034,-050.00,+00.00,01.00,000.00,1.00 +0035,-050.00,+00.00,01.00,000.00,1.00 +0036,-050.00,+00.00,01.00,000.00,1.00 +0037,-050.00,+00.00,01.00,000.00,1.00 +0038,-050.00,+00.00,01.00,000.00,1.00 +0039,-050.00,+00.00,01.00,000.00,1.00 +0040,-050.00,+00.00,01.00,000.00,1.00 +0041,-050.00,+00.00,01.00,000.00,1.00 +0042,-050.00,+00.00,01.00,000.00,1.00 +0043,-050.00,+00.00,01.00,000.00,1.00 +0044,-050.00,+00.00,01.00,000.00,1.00 +0045,-050.00,+00.00,01.00,000.00,1.00 +0046,-050.00,+00.00,01.00,000.00,1.00 +0047,-050.00,+00.00,01.00,000.00,1.00 +0048,-050.00,+00.00,01.00,000.00,1.00 +0049,-050.00,+00.00,01.00,000.00,1.00 +0050,-050.00,+00.00,01.00,000.00,1.00 +0051,-050.00,+00.00,01.00,000.00,1.00 +0052,-050.00,+00.00,01.00,000.00,1.00 +0053,-050.00,+00.00,01.00,000.00,1.00 +0054,-050.00,+00.00,01.00,000.00,1.00 +0055,-050.00,+00.00,01.00,000.00,1.00 +0056,-050.00,+00.00,01.00,000.00,1.00 +0057,-050.00,+00.00,01.00,000.00,1.00 +0058,-050.00,+00.00,01.00,000.00,1.00 +0059,-050.00,+00.00,01.00,000.00,1.00 +0060,-050.00,+00.00,01.00,000.00,1.00 +0061,-050.00,+00.00,01.00,000.00,1.00 +0062,-050.00,+00.00,01.00,000.00,1.00 +0063,-050.00,+00.00,01.00,000.00,1.00 +0064,-050.00,+00.00,01.00,000.00,1.00 +0065,-050.00,+00.00,01.00,000.00,1.00 +0066,-050.00,+00.00,01.00,000.00,1.00 +0067,-050.00,+00.00,01.00,000.00,1.00 +0068,-050.00,+00.00,01.00,000.00,1.00 +0069,-050.00,+00.00,01.00,000.00,1.00 +0070,-050.00,+00.00,01.00,000.00,1.00 +0071,-050.00,+00.00,01.00,000.00,1.00 +0072,-050.00,+00.00,01.00,000.00,1.00 +0073,-050.00,+00.00,01.00,000.00,1.00 +0074,-050.00,+00.00,01.00,000.00,1.00 +0075,-050.00,+00.00,01.00,000.00,1.00 +0076,-050.00,+00.00,01.00,000.00,1.00 +0077,-050.00,+00.00,01.00,000.00,1.00 +0078,-050.00,+00.00,01.00,000.00,1.00 +0079,-050.00,+00.00,01.00,000.00,1.00 +0080,-050.00,+00.00,01.00,000.00,1.00 +0081,-050.00,+00.00,01.00,000.00,1.00 +0082,-050.00,+00.00,01.00,000.00,1.00 +0083,-050.00,+00.00,01.00,000.00,1.00 +0084,-050.00,+00.00,01.00,000.00,1.00 +0085,-050.00,+00.00,01.00,000.00,1.00 +0086,-050.00,+00.00,01.00,000.00,1.00 +0087,-050.00,+00.00,01.00,000.00,1.00 +0088,-050.00,+00.00,01.00,000.00,1.00 +0089,-050.00,+00.00,01.00,000.00,1.00 +0090,-050.00,+00.00,01.00,000.00,1.00 +0091,-050.00,+00.00,01.00,000.00,1.00 +0092,-050.00,+00.00,01.00,000.00,1.00 +0093,-050.00,+00.00,01.00,000.00,1.00 +0094,-050.00,+00.00,01.00,000.00,1.00 +0095,-050.00,+00.00,01.00,000.00,1.00 +0096,-050.00,+00.00,01.00,000.00,1.00 +0097,-050.00,+00.00,01.00,000.00,1.00 +0098,-050.00,+00.00,01.00,000.00,1.00 +0099,-050.00,+00.00,01.00,000.00,1.00 +0100,-050.00,+00.00,01.00,000.00,1.00 +0101,-050.00,+00.00,01.00,000.00,1.00 +0102,-050.00,+00.00,01.00,000.00,1.00 +0103,-050.00,+00.00,01.00,000.00,1.00 +0104,-050.00,+00.00,01.00,000.00,1.00 +0105,-050.00,+00.00,01.00,000.00,1.00 +0106,-050.00,+00.00,01.00,000.00,1.00 +0107,-050.00,+00.00,01.00,000.00,1.00 +0108,-050.00,+00.00,01.00,000.00,1.00 +0109,-050.00,+00.00,01.00,000.00,1.00 +0110,-050.00,+00.00,01.00,000.00,1.00 +0111,-050.00,+00.00,01.00,000.00,1.00 +0112,-050.00,+00.00,01.00,000.00,1.00 +0113,-050.00,+00.00,01.00,000.00,1.00 +0114,-050.00,+00.00,01.00,000.00,1.00 +0115,-050.00,+00.00,01.00,000.00,1.00 +0116,-050.00,+00.00,01.00,000.00,1.00 +0117,-050.00,+00.00,01.00,000.00,1.00 +0118,-050.00,+00.00,01.00,000.00,1.00 +0119,-050.00,+00.00,01.00,000.00,1.00 +0120,-050.00,+00.00,01.00,000.00,1.00 +0121,-050.00,+00.00,01.00,000.00,1.00 +0122,-050.00,+00.00,01.00,000.00,1.00 +0123,-050.00,+00.00,01.00,000.00,1.00 +0124,-050.00,+00.00,01.00,000.00,1.00 +0125,-050.00,+00.00,01.00,000.00,1.00 +0126,-050.00,+00.00,01.00,000.00,1.00 +0127,-050.00,+00.00,01.00,000.00,1.00 +0128,-050.00,+00.00,01.00,000.00,1.00 +0129,-050.00,+00.00,01.00,000.00,1.00 +0130,-050.00,+00.00,01.00,000.00,1.00 +0131,-050.00,+00.00,01.00,000.00,1.00 +0132,-050.00,+00.00,01.00,000.00,1.00 +0133,-050.00,+00.00,01.00,000.00,1.00 +0134,-050.00,+00.00,01.00,000.00,1.00 +0135,-050.00,+00.00,01.00,000.00,1.00 +0136,-050.00,+00.00,01.00,000.00,1.00 +0137,-050.00,+00.00,01.00,000.00,1.00 +0138,-050.00,+00.00,01.00,000.00,1.00 +0139,-050.00,+00.00,01.00,000.00,1.00 +0140,-050.00,+00.00,01.00,000.00,1.00 +0141,-050.00,+00.00,01.00,000.00,1.00 +0142,-050.00,+00.00,01.00,000.00,1.00 +0143,-050.00,+00.00,01.00,000.00,1.00 +0144,-050.00,+00.00,01.00,000.00,1.00 +0145,-050.00,+00.00,01.00,000.00,1.00 +0146,-050.00,+00.00,01.00,000.00,1.00 +0147,-050.00,+00.00,01.00,000.00,1.00 +0148,-050.00,+00.00,01.00,000.00,1.00 +0149,-050.00,+00.00,01.00,000.00,1.00 +0150,-050.00,+00.00,01.00,000.00,1.00 +0151,-050.00,+00.00,01.00,000.00,1.00 +0152,-050.00,+00.00,01.00,000.00,1.00 +0153,-050.00,+00.00,01.00,000.00,1.00 +0154,-050.00,+00.00,01.00,000.00,1.00 +0155,-050.00,+00.00,01.00,000.00,1.00 +0156,-050.00,+00.00,01.00,000.00,1.00 +0157,-050.00,+00.00,01.00,000.00,1.00 +0158,-050.00,+00.00,01.00,000.00,1.00 +0159,-050.00,+00.00,01.00,000.00,1.00 +0160,-050.00,+00.00,01.00,000.00,1.00 +0161,-050.00,+00.00,01.00,000.00,1.00 +0162,-050.00,+00.00,01.00,000.00,1.00 +0163,-050.00,+00.00,01.00,000.00,1.00 +0164,-050.00,+00.00,01.00,000.00,1.00 +0165,-050.00,+00.00,01.00,000.00,1.00 +0166,-050.00,+00.00,01.00,000.00,1.00 +0167,-050.00,+00.00,01.00,000.00,1.00 +0168,-050.00,+00.00,01.00,000.00,1.00 +0169,-050.00,+00.00,01.00,000.00,1.00 +0170,-050.00,+00.00,01.00,000.00,1.00 +0171,-050.00,+00.00,01.00,000.00,1.00 +0172,-050.00,+00.00,01.00,000.00,1.00 +0173,-050.00,+00.00,01.00,000.00,1.00 +0174,-050.00,+00.00,01.00,000.00,1.00 +0175,-050.00,+00.00,01.00,000.00,1.00 +0176,-050.00,+00.00,01.00,000.00,1.00 +0177,-050.00,+00.00,01.00,000.00,1.00 +0178,-050.00,+00.00,01.00,000.00,1.00 +0179,-050.00,+00.00,01.00,000.00,1.00 +0180,-050.00,+00.00,01.00,000.00,1.00 +0181,-050.00,+00.00,01.00,000.00,1.00 +0182,-050.00,+00.00,01.00,000.00,1.00 +0183,-050.00,+00.00,01.00,000.00,1.00 +0184,-050.00,+00.00,01.00,000.00,1.00 +0185,-050.00,+00.00,01.00,000.00,1.00 +0186,-050.00,+00.00,01.00,000.00,1.00 +0187,-050.00,+00.00,01.00,000.00,1.00 +0188,-050.00,+00.00,01.00,000.00,1.00 +0189,-050.00,+00.00,01.00,000.00,1.00 +0190,-050.00,+00.00,01.00,000.00,1.00 +0191,-050.00,+00.00,01.00,000.00,1.00 +0192,-050.00,+00.00,01.00,000.00,1.00 +0193,-050.00,+00.00,01.00,000.00,1.00 +0194,-050.00,+00.00,01.00,000.00,1.00 +0195,-050.00,+00.00,01.00,000.00,1.00 +0196,-050.00,+00.00,01.00,000.00,1.00 +0197,-050.00,+00.00,01.00,000.00,1.00 +0198,-050.00,+00.00,01.00,000.00,1.00 +0199,-050.00,+00.00,01.00,000.00,1.00 +0200,-050.00,+00.00,01.00,000.00,1.00 +0201,-050.00,+00.00,01.00,000.00,1.00 +0202,-050.00,+00.00,01.00,000.00,1.00 +0203,-050.00,+00.00,01.00,000.00,1.00 +0204,-050.00,+00.00,01.00,000.00,1.00 +0205,-050.00,+00.00,01.00,000.00,1.00 +0206,-050.00,+00.00,01.00,000.00,1.00 +0207,-050.00,+00.00,01.00,000.00,1.00 +0208,-050.00,+00.00,01.00,000.00,1.00 +0209,-050.00,+00.00,01.00,000.00,1.00 +0210,-050.00,+00.00,01.00,000.00,1.00 +0211,-050.00,+00.00,01.00,000.00,1.00 +0212,-050.00,+00.00,01.00,000.00,1.00 +0213,-050.00,+00.00,01.00,000.00,1.00 +0214,-050.00,+00.00,01.00,000.00,1.00 +0215,-050.00,+00.00,01.00,000.00,1.00 +0216,-050.00,+00.00,01.00,000.00,1.00 +0217,-050.00,+00.00,01.00,000.00,1.00 +0218,-050.00,+00.00,01.00,000.00,1.00 +0219,-050.00,+00.00,01.00,000.00,1.00 +0220,-050.00,+00.00,01.00,000.00,1.00 +0221,-050.00,+00.00,01.00,000.00,1.00 +0222,-050.00,+00.00,01.00,000.00,1.00 +0223,-050.00,+00.00,01.00,000.00,1.00 +0224,-050.00,+00.00,01.00,000.00,1.00 +0225,-050.00,+00.00,01.00,000.00,1.00 +0226,-050.00,+00.00,01.00,000.00,1.00 +0227,-050.00,+00.00,01.00,000.00,1.00 +0228,-050.00,+00.00,01.00,000.00,1.00 +0229,-050.00,+00.00,01.00,000.00,1.00 +0230,-050.00,+00.00,01.00,000.00,1.00 +0231,-050.00,+00.00,01.00,000.00,1.00 +0232,-050.00,+00.00,01.00,000.00,1.00 +0233,-050.00,+00.00,01.00,000.00,1.00 +0234,-050.00,+00.00,01.00,000.00,1.00 +0235,-050.00,+00.00,01.00,000.00,1.00 +0236,-050.00,+00.00,01.00,000.00,1.00 +0237,-050.00,+00.00,01.00,000.00,1.00 +0238,-050.00,+00.00,01.00,000.00,1.00 +0239,-050.00,+00.00,01.00,000.00,1.00 +0240,-050.00,+00.00,01.00,000.00,1.00 +0241,-050.00,+00.00,01.00,000.00,1.00 +0242,-050.00,+00.00,01.00,000.00,1.00 +0243,-050.00,+00.00,01.00,000.00,1.00 +0244,-050.00,+00.00,01.00,000.00,1.00 +0245,-050.00,+00.00,01.00,000.00,1.00 +0246,-050.00,+00.00,01.00,000.00,1.00 +0247,-050.00,+00.00,01.00,000.00,1.00 +0248,-050.00,+00.00,01.00,000.00,1.00 +0249,-050.00,+00.00,01.00,000.00,1.00 +0250,-050.00,+00.00,01.00,000.00,1.00 +0251,-050.00,+00.00,01.00,000.00,1.00 +0252,-050.00,+00.00,01.00,000.00,1.00 +0253,-050.00,+00.00,01.00,000.00,1.00 +0254,-050.00,+00.00,01.00,000.00,1.00 +0255,-050.00,+00.00,01.00,000.00,1.00 +0256,-050.00,+00.00,01.00,000.00,1.00 +0257,-050.00,+00.00,01.00,000.00,1.00 +0258,-050.00,+00.00,01.00,000.00,1.00 +0259,-050.00,+00.00,01.00,000.00,1.00 +0260,-050.00,+00.00,01.00,000.00,1.00 +0261,-050.00,+00.00,01.00,000.00,1.00 +0262,-050.00,+00.00,01.00,000.00,1.00 +0263,-050.00,+00.00,01.00,000.00,1.00 +0264,-050.00,+00.00,01.00,000.00,1.00 +0265,-050.00,+00.00,01.00,000.00,1.00 +0266,-050.00,+00.00,01.00,000.00,1.00 +0267,-050.00,+00.00,01.00,000.00,1.00 +0268,-050.00,+00.00,01.00,000.00,1.00 +0269,-050.00,+00.00,01.00,000.00,1.00 +0270,-050.00,+00.00,01.00,000.00,1.00 +0271,-050.00,+00.00,01.00,000.00,1.00 +0272,-050.00,+00.00,01.00,000.00,1.00 +0273,-050.00,+00.00,01.00,000.00,1.00 +0274,-050.00,+00.00,01.00,000.00,1.00 +0275,-050.00,+00.00,01.00,000.00,1.00 +0276,-050.00,+00.00,01.00,000.00,1.00 +0277,-050.00,+00.00,01.00,000.00,1.00 +0278,-050.00,+00.00,01.00,000.00,1.00 +0279,-050.00,+00.00,01.00,000.00,1.00 +0280,-050.00,+00.00,01.00,000.00,1.00 +0281,-050.00,+00.00,01.00,000.00,1.00 +0282,-050.00,+00.00,01.00,000.00,1.00 +0283,-050.00,+00.00,01.00,000.00,1.00 +0284,-050.00,+00.00,01.00,000.00,1.00 +0285,-050.00,+00.00,01.00,000.00,1.00 +0286,-050.00,+00.00,01.00,000.00,1.00 +0287,-050.00,+00.00,01.00,000.00,1.00 +0288,-050.00,+00.00,01.00,000.00,1.00 +0289,-050.00,+00.00,01.00,000.00,1.00 +0290,-050.00,+00.00,01.00,000.00,1.00 +0291,-050.00,+00.00,01.00,000.00,1.00 +0292,-050.00,+00.00,01.00,000.00,1.00 +0293,-050.00,+00.00,01.00,000.00,1.00 +0294,-050.00,+00.00,01.00,000.00,1.00 +0295,-050.00,+00.00,01.00,000.00,1.00 +0296,-050.00,+00.00,01.00,000.00,1.00 +0297,-050.00,+00.00,01.00,000.00,1.00 +0298,-050.00,+00.00,01.00,000.00,1.00 +0299,-050.00,+00.00,01.00,000.00,1.00 +0300,-050.00,+00.00,01.00,000.00,1.00 +0301,-050.00,+00.00,01.00,000.00,1.00 +0302,-050.00,+00.00,01.00,000.00,1.00 +0303,-050.00,+00.00,01.00,000.00,1.00 +0304,-050.00,+00.00,01.00,000.00,1.00 +0305,-050.00,+00.00,01.00,000.00,1.00 +0306,-050.00,+00.00,01.00,000.00,1.00 +0307,-050.00,+00.00,01.00,000.00,1.00 +0308,-050.00,+00.00,01.00,000.00,1.00 +0309,-050.00,+00.00,01.00,000.00,1.00 +0310,-050.00,+00.00,01.00,000.00,1.00 +0311,-050.00,+00.00,01.00,000.00,1.00 +0312,-050.00,+00.00,01.00,000.00,1.00 +0313,-050.00,+00.00,01.00,000.00,1.00 +0314,-050.00,+00.00,01.00,000.00,1.00 +0315,-050.00,+00.00,01.00,000.00,1.00 +0316,-050.00,+00.00,01.00,000.00,1.00 +0317,-050.00,+00.00,01.00,000.00,1.00 +0318,-050.00,+00.00,01.00,000.00,1.00 +0319,-050.00,+00.00,01.00,000.00,1.00 +0320,-050.00,+00.00,01.00,000.00,1.00 +0321,-050.00,+00.00,01.00,000.00,1.00 +0322,-050.00,+00.00,01.00,000.00,1.00 +0323,-050.00,+00.00,01.00,000.00,1.00 +0324,-050.00,+00.00,01.00,000.00,1.00 +0325,-050.00,+00.00,01.00,000.00,1.00 +0326,-050.00,+00.00,01.00,000.00,1.00 +0327,-050.00,+00.00,01.00,000.00,1.00 +0328,-050.00,+00.00,01.00,000.00,1.00 +0329,-050.00,+00.00,01.00,000.00,1.00 +0330,-050.00,+00.00,01.00,000.00,1.00 +0331,-050.00,+00.00,01.00,000.00,1.00 +0332,-050.00,+00.00,01.00,000.00,1.00 +0333,-050.00,+00.00,01.00,000.00,1.00 +0334,-050.00,+00.00,01.00,000.00,1.00 +0335,-050.00,+00.00,01.00,000.00,1.00 +0336,-050.00,+00.00,01.00,000.00,1.00 +0337,-050.00,+00.00,01.00,000.00,1.00 +0338,-050.00,+00.00,01.00,000.00,1.00 +0339,-050.00,+00.00,01.00,000.00,1.00 +0340,-050.00,+00.00,01.00,000.00,1.00 +0341,-050.00,+00.00,01.00,000.00,1.00 +0342,-050.00,+00.00,01.00,000.00,1.00 +0343,-050.00,+00.00,01.00,000.00,1.00 +0344,-050.00,+00.00,01.00,000.00,1.00 +0345,-050.00,+00.00,01.00,000.00,1.00 +0346,-050.00,+00.00,01.00,000.00,1.00 +0347,-050.00,+00.00,01.00,000.00,1.00 +0348,-050.00,+00.00,01.00,000.00,1.00 +0349,-050.00,+00.00,01.00,000.00,1.00 +0350,-050.00,+00.00,01.00,000.00,1.00 +0351,-050.00,+00.00,01.00,000.00,1.00 +0352,-050.00,+00.00,01.00,000.00,1.00 +0353,-050.00,+00.00,01.00,000.00,1.00 +0354,-050.00,+00.00,01.00,000.00,1.00 +0355,-050.00,+00.00,01.00,000.00,1.00 +0356,-050.00,+00.00,01.00,000.00,1.00 +0357,-050.00,+00.00,01.00,000.00,1.00 +0358,-050.00,+00.00,01.00,000.00,1.00 +0359,-050.00,+00.00,01.00,000.00,1.00 +0360,-050.00,+00.00,01.00,000.00,1.00 +0361,-050.00,+00.00,01.00,000.00,1.00 +0362,-050.00,+00.00,01.00,000.00,1.00 +0363,-050.00,+00.00,01.00,000.00,1.00 +0364,-050.00,+00.00,01.00,000.00,1.00 +0365,-050.00,+00.00,01.00,000.00,1.00 +0366,-050.00,+00.00,01.00,000.00,1.00 +0367,-050.00,+00.00,01.00,000.00,1.00 +0368,-050.00,+00.00,01.00,000.00,1.00 +0369,-050.00,+00.00,01.00,000.00,1.00 +0370,-050.00,+00.00,01.00,000.00,1.00 +0371,-050.00,+00.00,01.00,000.00,1.00 +0372,-050.00,+00.00,01.00,000.00,1.00 +0373,-050.00,+00.00,01.00,000.00,1.00 +0374,-050.00,+00.00,01.00,000.00,1.00 +0375,-050.00,+00.00,01.00,000.00,1.00 +0376,-050.00,+00.00,01.00,000.00,1.00 +0377,-050.00,+00.00,01.00,000.00,1.00 +0378,-050.00,+00.00,01.00,000.00,1.00 +0379,-050.00,+00.00,01.00,000.00,1.00 +0380,-050.00,+00.00,01.00,000.00,1.00 +0381,-050.00,+00.00,01.00,000.00,1.00 +0382,-050.00,+00.00,01.00,000.00,1.00 +0383,-050.00,+00.00,01.00,000.00,1.00 +0384,-050.00,+00.00,01.00,000.00,1.00 +0385,-050.00,+00.00,01.00,000.00,1.00 +0386,-050.00,+00.00,01.00,000.00,1.00 +0387,-050.00,+00.00,01.00,000.00,1.00 +0388,-050.00,+00.00,01.00,000.00,1.00 +0389,-050.00,+00.00,01.00,000.00,1.00 +0390,-050.00,+00.00,01.00,000.00,1.00 +0391,-050.00,+00.00,01.00,000.00,1.00 +0392,-050.00,+00.00,01.00,000.00,1.00 +0393,-050.00,+00.00,01.00,000.00,1.00 +0394,-050.00,+00.00,01.00,000.00,1.00 +0395,-050.00,+00.00,01.00,000.00,1.00 +0396,-050.00,+00.00,01.00,000.00,1.00 +0397,-050.00,+00.00,01.00,000.00,1.00 +0398,-050.00,+00.00,01.00,000.00,1.00 +0399,-050.00,+00.00,01.00,000.00,1.00 +0400,-050.00,+00.00,01.00,000.00,1.00 +0401,-050.00,+00.00,01.00,000.00,1.00 +0402,-050.00,+00.00,01.00,000.00,1.00 +0403,-050.00,+00.00,01.00,000.00,1.00 +0404,-050.00,+00.00,01.00,000.00,1.00 +0405,-050.00,+00.00,01.00,000.00,1.00 +0406,-050.00,+00.00,01.00,000.00,1.00 +0407,-050.00,+00.00,01.00,000.00,1.00 +0408,-050.00,+00.00,01.00,000.00,1.00 +0409,-050.00,+00.00,01.00,000.00,1.00 +0410,-050.00,+00.00,01.00,000.00,1.00 +0411,-050.00,+00.00,01.00,000.00,1.00 +0412,-050.00,+00.00,01.00,000.00,1.00 +0413,-050.00,+00.00,01.00,000.00,1.00 +0414,-050.00,+00.00,01.00,000.00,1.00 +0415,-050.00,+00.00,01.00,000.00,1.00 +0416,-050.00,+00.00,01.00,000.00,1.00 +0417,-050.00,+00.00,01.00,000.00,1.00 +0418,-050.00,+00.00,01.00,000.00,1.00 +0419,-050.00,+00.00,01.00,000.00,1.00 +0420,-050.00,+00.00,01.00,000.00,1.00 +0421,-050.00,+00.00,01.00,000.00,1.00 +0422,-050.00,+00.00,01.00,000.00,1.00 +0423,-050.00,+00.00,01.00,000.00,1.00 +0424,-050.00,+00.00,01.00,000.00,1.00 +0425,-050.00,+00.00,01.00,000.00,1.00 +0426,-050.00,+00.00,01.00,000.00,1.00 +0427,-050.00,+00.00,01.00,000.00,1.00 +0428,-050.00,+00.00,01.00,000.00,1.00 +0429,-050.00,+00.00,01.00,000.00,1.00 +0430,-050.00,+00.00,01.00,000.00,1.00 +0431,-050.00,+00.00,01.00,000.00,1.00 +0432,-050.00,+00.00,01.00,000.00,1.00 +0433,-050.00,+00.00,01.00,000.00,1.00 +0434,-050.00,+00.00,01.00,000.00,1.00 +0435,-050.00,+00.00,01.00,000.00,1.00 +0436,-050.00,+00.00,01.00,000.00,1.00 +0437,-050.00,+00.00,01.00,000.00,1.00 +0438,-050.00,+00.00,01.00,000.00,1.00 +0439,-050.00,+00.00,01.00,000.00,1.00 +0440,-050.00,+00.00,01.00,000.00,1.00 +0441,-050.00,+00.00,01.00,000.00,1.00 +0442,-050.00,+00.00,01.00,000.00,1.00 +0443,-050.00,+00.00,01.00,000.00,1.00 +0444,-050.00,+00.00,01.00,000.00,1.00 +0445,-050.00,+00.00,01.00,000.00,1.00 +0446,-050.00,+00.00,01.00,000.00,1.00 +0447,-050.00,+00.00,01.00,000.00,1.00 +0448,-050.00,+00.00,01.00,000.00,1.00 +0449,-050.00,+00.00,01.00,000.00,1.00 +0450,-050.00,+00.00,01.00,000.00,1.00 +0451,-050.00,+00.00,01.00,000.00,1.00 +0452,-050.00,+00.00,01.00,000.00,1.00 +0453,-050.00,+00.00,01.00,000.00,1.00 +0454,-050.00,+00.00,01.00,000.00,1.00 +0455,-050.00,+00.00,01.00,000.00,1.00 +0456,-050.00,+00.00,01.00,000.00,1.00 +0457,-050.00,+00.00,01.00,000.00,1.00 +0458,-050.00,+00.00,01.00,000.00,1.00 +0459,-050.00,+00.00,01.00,000.00,1.00 +0460,-050.00,+00.00,01.00,000.00,1.00 +0461,-050.00,+00.00,01.00,000.00,1.00 +0462,-050.00,+00.00,01.00,000.00,1.00 +0463,-050.00,+00.00,01.00,000.00,1.00 +0464,-050.00,+00.00,01.00,000.00,1.00 +0465,-050.00,+00.00,01.00,000.00,1.00 +0466,-050.00,+00.00,01.00,000.00,1.00 +0467,-050.00,+00.00,01.00,000.00,1.00 +0468,-050.00,+00.00,01.00,000.00,1.00 +0469,-050.00,+00.00,01.00,000.00,1.00 +0470,-050.00,+00.00,01.00,000.00,1.00 +0471,-050.00,+00.00,01.00,000.00,1.00 +0472,-050.00,+00.00,01.00,000.00,1.00 +0473,-050.00,+00.00,01.00,000.00,1.00 +0474,-050.00,+00.00,01.00,000.00,1.00 +0475,-050.00,+00.00,01.00,000.00,1.00 +0476,-050.00,+00.00,01.00,000.00,1.00 +0477,-050.00,+00.00,01.00,000.00,1.00 +0478,-050.00,+00.00,01.00,000.00,1.00 +0479,-050.00,+00.00,01.00,000.00,1.00 +0480,-050.00,+00.00,01.00,000.00,1.00 +0481,-050.00,+00.00,01.00,000.00,1.00 +0482,-050.00,+00.00,01.00,000.00,1.00 +0483,-050.00,+00.00,01.00,000.00,1.00 +0484,-050.00,+00.00,01.00,000.00,1.00 +0485,-050.00,+00.00,01.00,000.00,1.00 +0486,-050.00,+00.00,01.00,000.00,1.00 +0487,-050.00,+00.00,01.00,000.00,1.00 +0488,-050.00,+00.00,01.00,000.00,1.00 +0489,-050.00,+00.00,01.00,000.00,1.00 +0490,-050.00,+00.00,01.00,000.00,1.00 +0491,-050.00,+00.00,01.00,000.00,1.00 +0492,-050.00,+00.00,01.00,000.00,1.00 +0493,-050.00,+00.00,01.00,000.00,1.00 +0494,-050.00,+00.00,01.00,000.00,1.00 +0495,-050.00,+00.00,01.00,000.00,1.00 +0496,-050.00,+00.00,01.00,000.00,1.00 +0497,-050.00,+00.00,01.00,000.00,1.00 +0498,-050.00,+00.00,01.00,000.00,1.00 +0499,-050.00,+00.00,01.00,000.00,1.00 +0500,-050.00,+00.00,01.00,000.00,1.00 +0501,-050.00,+00.00,01.00,000.00,1.00 +0502,-050.00,+00.00,01.00,000.00,1.00 +0503,-050.00,+00.00,01.00,000.00,1.00 +0504,-050.00,+00.00,01.00,000.00,1.00 +0505,-050.00,+00.00,01.00,000.00,1.00 +0506,-050.00,+00.00,01.00,000.00,1.00 +0507,-050.00,+00.00,01.00,000.00,1.00 +0508,-050.00,+00.00,01.00,000.00,1.00 +0509,-050.00,+00.00,01.00,000.00,1.00 +0510,-050.00,+00.00,01.00,000.00,1.00 +0511,-050.00,+00.00,01.00,000.00,1.00 +0512,-050.00,+00.00,01.00,000.00,1.00 +0513,-050.00,+00.00,01.00,000.00,1.00 +0514,-050.00,+00.00,01.00,000.00,1.00 +0515,-050.00,+00.00,01.00,000.00,1.00 +0516,-050.00,+00.00,01.00,000.00,1.00 +0517,-050.00,+00.00,01.00,000.00,1.00 +0518,-050.00,+00.00,01.00,000.00,1.00 +0519,-050.00,+00.00,01.00,000.00,1.00 +0520,-050.00,+00.00,01.00,000.00,1.00 +0521,-050.00,+00.00,01.00,000.00,1.00 +0522,-050.00,+00.00,01.00,000.00,1.00 +0523,-050.00,+00.00,01.00,000.00,1.00 +0524,-050.00,+00.00,01.00,000.00,1.00 +0525,-050.00,+00.00,01.00,000.00,1.00 +0526,-050.00,+00.00,01.00,000.00,1.00 +0527,-050.00,+00.00,01.00,000.00,1.00 +0528,-050.00,+00.00,01.00,000.00,1.00 +0529,-050.00,+00.00,01.00,000.00,1.00 +0530,-050.00,+00.00,01.00,000.00,1.00 +0531,-050.00,+00.00,01.00,000.00,1.00 +0532,-050.00,+00.00,01.00,000.00,1.00 +0533,-050.00,+00.00,01.00,000.00,1.00 +0534,-050.00,+00.00,01.00,000.00,1.00 +0535,-050.00,+00.00,01.00,000.00,1.00 +0536,-050.00,+00.00,01.00,000.00,1.00 +0537,-050.00,+00.00,01.00,000.00,1.00 +0538,-050.00,+00.00,01.00,000.00,1.00 +0539,-050.00,+00.00,01.00,000.00,1.00 +0540,-050.00,+00.00,01.00,000.00,1.00 +0541,-050.00,+00.00,01.00,000.00,1.00 +0542,-050.00,+00.00,01.00,000.00,1.00 +0543,-050.00,+00.00,01.00,000.00,1.00 +0544,-050.00,+00.00,01.00,000.00,1.00 +0545,-050.00,+00.00,01.00,000.00,1.00 +0546,-050.00,+00.00,01.00,000.00,1.00 +0547,-050.00,+00.00,01.00,000.00,1.00 +0548,-050.00,+00.00,01.00,000.00,1.00 +0549,-050.00,+00.00,01.00,000.00,1.00 +0550,-050.00,+00.00,01.00,000.00,1.00 +0551,-050.00,+00.00,01.00,000.00,1.00 +0552,-050.00,+00.00,01.00,000.00,1.00 +0553,-050.00,+00.00,01.00,000.00,1.00 +0554,-050.00,+00.00,01.00,000.00,1.00 +0555,-050.00,+00.00,01.00,000.00,1.00 +0556,-050.00,+00.00,01.00,000.00,1.00 +0557,-050.00,+00.00,01.00,000.00,1.00 +0558,-050.00,+00.00,01.00,000.00,1.00 +0559,-050.00,+00.00,01.00,000.00,1.00 +0560,-050.00,+00.00,01.00,000.00,1.00 +0561,-050.00,+00.00,01.00,000.00,1.00 +0562,-050.00,+00.00,01.00,000.00,1.00 +0563,-050.00,+00.00,01.00,000.00,1.00 +0564,-050.00,+00.00,01.00,000.00,1.00 +0565,-050.00,+00.00,01.00,000.00,1.00 +0566,-050.00,+00.00,01.00,000.00,1.00 +0567,-050.00,+00.00,01.00,000.00,1.00 +0568,-050.00,+00.00,01.00,000.00,1.00 +0569,-050.00,+00.00,01.00,000.00,1.00 +0570,-050.00,+00.00,01.00,000.00,1.00 +0571,-050.00,+00.00,01.00,000.00,1.00 +0572,-050.00,+00.00,01.00,000.00,1.00 +0573,-050.00,+00.00,01.00,000.00,1.00 +0574,-050.00,+00.00,01.00,000.00,1.00 +0575,-050.00,+00.00,01.00,000.00,1.00 +0576,-050.00,+00.00,01.00,000.00,1.00 +0577,-050.00,+00.00,01.00,000.00,1.00 +0578,-050.00,+00.00,01.00,000.00,1.00 +0579,-050.00,+00.00,01.00,000.00,1.00 +0580,-050.00,+00.00,01.00,000.00,1.00 +0581,-050.00,+00.00,01.00,000.00,1.00 +0582,-050.00,+00.00,01.00,000.00,1.00 +0583,-050.00,+00.00,01.00,000.00,1.00 +0584,-050.00,+00.00,01.00,000.00,1.00 +0585,-050.00,+00.00,01.00,000.00,1.00 +0586,-050.00,+00.00,01.00,000.00,1.00 +0587,-050.00,+00.00,01.00,000.00,1.00 +0588,-050.00,+00.00,01.00,000.00,1.00 +0589,-050.00,+00.00,01.00,000.00,1.00 +0590,-050.00,+00.00,01.00,000.00,1.00 +0591,-050.00,+00.00,01.00,000.00,1.00 +0592,-050.00,+00.00,01.00,000.00,1.00 +0593,-050.00,+00.00,01.00,000.00,1.00 +0594,-050.00,+00.00,01.00,000.00,1.00 +0595,-050.00,+00.00,01.00,000.00,1.00 +0596,-050.00,+00.00,01.00,000.00,1.00 +0597,-050.00,+00.00,01.00,000.00,1.00 +0598,-050.00,+00.00,01.00,000.00,1.00 +0599,-050.00,+00.00,01.00,000.00,1.00 +0600,-050.00,+00.00,01.00,000.00,1.00 +0601,-050.00,+00.00,01.00,000.00,1.00 +0602,-050.00,+00.00,01.00,000.00,1.00 +0603,-050.00,+00.00,01.00,000.00,1.00 +0604,-050.00,+00.00,01.00,000.00,1.00 +0605,-050.00,+00.00,01.00,000.00,1.00 +0606,-050.00,+00.00,01.00,000.00,1.00 +0607,-050.00,+00.00,01.00,000.00,1.00 +0608,-050.00,+00.00,01.00,000.00,1.00 +0609,-050.00,+00.00,01.00,000.00,1.00 +0610,-050.00,+00.00,01.00,000.00,1.00 +0611,-050.00,+00.00,01.00,000.00,1.00 +0612,-050.00,+00.00,01.00,000.00,1.00 +0613,-050.00,+00.00,01.00,000.00,1.00 +0614,-050.00,+00.00,01.00,000.00,1.00 +0615,-050.00,+00.00,01.00,000.00,1.00 +0616,-050.00,+00.00,01.00,000.00,1.00 +0617,-050.00,+00.00,01.00,000.00,1.00 +0618,-050.00,+00.00,01.00,000.00,1.00 +0619,-050.00,+00.00,01.00,000.00,1.00 +0620,-050.00,+00.00,01.00,000.00,1.00 +0621,-050.00,+00.00,01.00,000.00,1.00 +0622,-050.00,+00.00,01.00,000.00,1.00 +0623,-050.00,+00.00,01.00,000.00,1.00 +0624,-050.00,+00.00,01.00,000.00,1.00 +0625,-050.00,+00.00,01.00,000.00,1.00 +0626,-050.00,+00.00,01.00,000.00,1.00 +0627,-050.00,+00.00,01.00,000.00,1.00 +0628,-050.00,+00.00,01.00,000.00,1.00 +0629,-050.00,+00.00,01.00,000.00,1.00 +0630,-050.00,+00.00,01.00,000.00,1.00 +0631,-050.00,+00.00,01.00,000.00,1.00 +0632,-050.00,+00.00,01.00,000.00,1.00 +0633,-050.00,+00.00,01.00,000.00,1.00 +0634,-050.00,+00.00,01.00,000.00,1.00 +0635,-050.00,+00.00,01.00,000.00,1.00 +0636,-050.00,+00.00,01.00,000.00,1.00 +0637,-050.00,+00.00,01.00,000.00,1.00 +0638,-050.00,+00.00,01.00,000.00,1.00 +0639,-050.00,+00.00,01.00,000.00,1.00 +0640,-050.00,+00.00,01.00,000.00,1.00 +0641,-050.00,+00.00,01.00,000.00,1.00 +0642,-050.00,+00.00,01.00,000.00,1.00 +0643,-050.00,+00.00,01.00,000.00,1.00 +0644,-050.00,+00.00,01.00,000.00,1.00 +0645,-050.00,+00.00,01.00,000.00,1.00 +0646,-050.00,+00.00,01.00,000.00,1.00 +0647,-050.00,+00.00,01.00,000.00,1.00 +0648,-050.00,+00.00,01.00,000.00,1.00 +0649,-050.00,+00.00,01.00,000.00,1.00 +0650,-050.00,+00.00,01.00,000.00,1.00 +0651,-050.00,+00.00,01.00,000.00,1.00 +0652,-050.00,+00.00,01.00,000.00,1.00 +0653,-050.00,+00.00,01.00,000.00,1.00 +0654,-050.00,+00.00,01.00,000.00,1.00 +0655,-050.00,+00.00,01.00,000.00,1.00 +0656,-050.00,+00.00,01.00,000.00,1.00 +0657,-050.00,+00.00,01.00,000.00,1.00 +0658,-050.00,+00.00,01.00,000.00,1.00 +0659,-050.00,+00.00,01.00,000.00,1.00 +0660,-050.00,+00.00,01.00,000.00,1.00 +0661,-050.00,+00.00,01.00,000.00,1.00 +0662,-050.00,+00.00,01.00,000.00,1.00 +0663,-050.00,+00.00,01.00,000.00,1.00 +0664,-050.00,+00.00,01.00,000.00,1.00 +0665,-050.00,+00.00,01.00,000.00,1.00 +0666,-050.00,+00.00,01.00,000.00,1.00 +0667,-050.00,+00.00,01.00,000.00,1.00 +0668,-050.00,+00.00,01.00,000.00,1.00 +0669,-050.00,+00.00,01.00,000.00,1.00 +0670,-050.00,+00.00,01.00,000.00,1.00 +0671,-050.00,+00.00,01.00,000.00,1.00 +0672,-050.00,+00.00,01.00,000.00,1.00 +0673,-050.00,+00.00,01.00,000.00,1.00 +0674,-050.00,+00.00,01.00,000.00,1.00 +0675,-050.00,+00.00,01.00,000.00,1.00 +0676,-050.00,+00.00,01.00,000.00,1.00 +0677,-050.00,+00.00,01.00,000.00,1.00 +0678,-050.00,+00.00,01.00,000.00,1.00 +0679,-050.00,+00.00,01.00,000.00,1.00 +0680,-050.00,+00.00,01.00,000.00,1.00 +0681,-050.00,+00.00,01.00,000.00,1.00 +0682,-050.00,+00.00,01.00,000.00,1.00 +0683,-050.00,+00.00,01.00,000.00,1.00 +0684,-050.00,+00.00,01.00,000.00,1.00 +0685,-050.00,+00.00,01.00,000.00,1.00 +0686,-050.00,+00.00,01.00,000.00,1.00 +0687,-050.00,+00.00,01.00,000.00,1.00 +0688,-050.00,+00.00,01.00,000.00,1.00 +0689,-050.00,+00.00,01.00,000.00,1.00 +0690,-050.00,+00.00,01.00,000.00,1.00 +0691,-050.00,+00.00,01.00,000.00,1.00 +0692,-050.00,+00.00,01.00,000.00,1.00 +0693,-050.00,+00.00,01.00,000.00,1.00 +0694,-050.00,+00.00,01.00,000.00,1.00 +0695,-050.00,+00.00,01.00,000.00,1.00 +0696,-050.00,+00.00,01.00,000.00,1.00 +0697,-050.00,+00.00,01.00,000.00,1.00 +0698,-050.00,+00.00,01.00,000.00,1.00 +0699,-050.00,+00.00,01.00,000.00,1.00 +0700,-050.00,+00.00,01.00,000.00,1.00 +0701,-050.00,+00.00,01.00,000.00,1.00 +0702,-050.00,+00.00,01.00,000.00,1.00 +0703,-050.00,+00.00,01.00,000.00,1.00 +0704,-050.00,+00.00,01.00,000.00,1.00 +0705,-050.00,+00.00,01.00,000.00,1.00 +0706,-050.00,+00.00,01.00,000.00,1.00 +0707,-050.00,+00.00,01.00,000.00,1.00 +0708,-050.00,+00.00,01.00,000.00,1.00 +0709,-050.00,+00.00,01.00,000.00,1.00 +0710,-050.00,+00.00,01.00,000.00,1.00 +0711,-050.00,+00.00,01.00,000.00,1.00 +0712,-050.00,+00.00,01.00,000.00,1.00 +0713,-050.00,+00.00,01.00,000.00,1.00 +0714,-050.00,+00.00,01.00,000.00,1.00 +0715,-050.00,+00.00,01.00,000.00,1.00 +0716,-050.00,+00.00,01.00,000.00,1.00 +0717,-050.00,+00.00,01.00,000.00,1.00 +0718,-050.00,+00.00,01.00,000.00,1.00 +0719,-050.00,+00.00,01.00,000.00,1.00 +0720,-050.00,+00.00,01.00,000.00,1.00 +0721,-050.00,+00.00,01.00,000.00,1.00 +0722,-050.00,+00.00,01.00,000.00,1.00 +0723,-050.00,+00.00,01.00,000.00,1.00 +0724,-050.00,+00.00,01.00,000.00,1.00 +0725,-050.00,+00.00,01.00,000.00,1.00 +0726,-050.00,+00.00,01.00,000.00,1.00 +0727,-050.00,+00.00,01.00,000.00,1.00 +0728,-050.00,+00.00,01.00,000.00,1.00 +0729,-050.00,+00.00,01.00,000.00,1.00 +0730,-050.00,+00.00,01.00,000.00,1.00 +0731,-050.00,+00.00,01.00,000.00,1.00 +0732,-050.00,+00.00,01.00,000.00,1.00 +0733,-050.00,+00.00,01.00,000.00,1.00 +0734,-050.00,+00.00,01.00,000.00,1.00 +0735,-050.00,+00.00,01.00,000.00,1.00 +0736,-050.00,+00.00,01.00,000.00,1.00 +0737,-050.00,+00.00,01.00,000.00,1.00 +0738,-050.00,+00.00,01.00,000.00,1.00 +0739,-050.00,+00.00,01.00,000.00,1.00 +0740,-050.00,+00.00,01.00,000.00,1.00 +0741,-050.00,+00.00,01.00,000.00,1.00 +0742,-050.00,+00.00,01.00,000.00,1.00 +0743,-050.00,+00.00,01.00,000.00,1.00 +0744,-050.00,+00.00,01.00,000.00,1.00 +0745,-050.00,+00.00,01.00,000.00,1.00 +0746,-050.00,+00.00,01.00,000.00,1.00 +0747,-050.00,+00.00,01.00,000.00,1.00 +0748,-050.00,+00.00,01.00,000.00,1.00 +0749,-050.00,+00.00,01.00,000.00,1.00 +0750,-050.00,+00.00,01.00,000.00,1.00 +0751,-050.00,+00.00,01.00,000.00,1.00 +0752,-050.00,+00.00,01.00,000.00,1.00 +0753,-050.00,+00.00,01.00,000.00,1.00 +0754,-050.00,+00.00,01.00,000.00,1.00 +0755,-050.00,+00.00,01.00,000.00,1.00 +0756,-050.00,+00.00,01.00,000.00,1.00 +0757,-050.00,+00.00,01.00,000.00,1.00 +0758,-050.00,+00.00,01.00,000.00,1.00 +0759,-050.00,+00.00,01.00,000.00,1.00 +0760,-050.00,+00.00,01.00,000.00,1.00 +0761,-050.00,+00.00,01.00,000.00,1.00 +0762,-050.00,+00.00,01.00,000.00,1.00 +0763,-050.00,+00.00,01.00,000.00,1.00 +0764,-050.00,+00.00,01.00,000.00,1.00 +0765,-050.00,+00.00,01.00,000.00,1.00 +0766,-050.00,+00.00,01.00,000.00,1.00 +0767,-050.00,+00.00,01.00,000.00,1.00 +0768,-050.00,+00.00,01.00,000.00,1.00 +0769,-050.00,+00.00,01.00,000.00,1.00 +0770,-050.00,+00.00,01.00,000.00,1.00 +0771,-050.00,+00.00,01.00,000.00,1.00 +0772,-050.00,+00.00,01.00,000.00,1.00 +0773,-050.00,+00.00,01.00,000.00,1.00 +0774,-050.00,+00.00,01.00,000.00,1.00 +0775,-050.00,+00.00,01.00,000.00,1.00 +0776,-050.00,+00.00,01.00,000.00,1.00 +0777,-050.00,+00.00,01.00,000.00,1.00 +0778,-050.00,+00.00,01.00,000.00,1.00 +0779,-050.00,+00.00,01.00,000.00,1.00 +0780,-050.00,+00.00,01.00,000.00,1.00 +0781,-050.00,+00.00,01.00,000.00,1.00 +0782,-050.00,+00.00,01.00,000.00,1.00 +0783,-050.00,+00.00,01.00,000.00,1.00 +0784,-050.00,+00.00,01.00,000.00,1.00 +0785,-050.00,+00.00,01.00,000.00,1.00 +0786,-050.00,+00.00,01.00,000.00,1.00 +0787,-050.00,+00.00,01.00,000.00,1.00 +0788,-050.00,+00.00,01.00,000.00,1.00 +0789,-050.00,+00.00,01.00,000.00,1.00 +0790,-050.00,+00.00,01.00,000.00,1.00 +0791,-050.00,+00.00,01.00,000.00,1.00 +0792,-050.00,+00.00,01.00,000.00,1.00 +0793,-050.00,+00.00,01.00,000.00,1.00 +0794,-050.00,+00.00,01.00,000.00,1.00 +0795,-050.00,+00.00,01.00,000.00,1.00 +0796,-050.00,+00.00,01.00,000.00,1.00 +0797,-050.00,+00.00,01.00,000.00,1.00 +0798,-050.00,+00.00,01.00,000.00,1.00 +0799,-050.00,+00.00,01.00,000.00,1.00 +0800,-050.00,+00.00,01.00,000.00,1.00 +0801,-050.00,+00.00,01.00,000.00,1.00 +0802,-050.00,+00.00,01.00,000.00,1.00 +0803,-050.00,+00.00,01.00,000.00,1.00 +0804,-050.00,+00.00,01.00,000.00,1.00 +0805,-050.00,+00.00,01.00,000.00,1.00 +0806,-050.00,+00.00,01.00,000.00,1.00 +0807,-050.00,+00.00,01.00,000.00,1.00 +0808,-050.00,+00.00,01.00,000.00,1.00 +0809,-050.00,+00.00,01.00,000.00,1.00 +0810,-050.00,+00.00,01.00,000.00,1.00 +0811,-050.00,+00.00,01.00,000.00,1.00 +0812,-050.00,+00.00,01.00,000.00,1.00 +0813,-050.00,+00.00,01.00,000.00,1.00 +0814,-050.00,+00.00,01.00,000.00,1.00 +0815,-050.00,+00.00,01.00,000.00,1.00 +0816,-050.00,+00.00,01.00,000.00,1.00 +0817,-050.00,+00.00,01.00,000.00,1.00 +0818,-050.00,+00.00,01.00,000.00,1.00 +0819,-050.00,+00.00,01.00,000.00,1.00 +0820,-050.00,+00.00,01.00,000.00,1.00 +0821,-050.00,+00.00,01.00,000.00,1.00 +0822,-050.00,+00.00,01.00,000.00,1.00 +0823,-050.00,+00.00,01.00,000.00,1.00 +0824,-050.00,+00.00,01.00,000.00,1.00 +0825,-050.00,+00.00,01.00,000.00,1.00 +0826,-050.00,+00.00,01.00,000.00,1.00 +0827,-050.00,+00.00,01.00,000.00,1.00 +0828,-050.00,+00.00,01.00,000.00,1.00 +0829,-050.00,+00.00,01.00,000.00,1.00 +0830,-050.00,+00.00,01.00,000.00,1.00 +0831,-050.00,+00.00,01.00,000.00,1.00 +0832,-050.00,+00.00,01.00,000.00,1.00 +0833,-050.00,+00.00,01.00,000.00,1.00 +0834,-050.00,+00.00,01.00,000.00,1.00 +0835,-050.00,+00.00,01.00,000.00,1.00 +0836,-050.00,+00.00,01.00,000.00,1.00 +0837,-050.00,+00.00,01.00,000.00,1.00 +0838,-050.00,+00.00,01.00,000.00,1.00 +0839,-050.00,+00.00,01.00,000.00,1.00 +0840,-050.00,+00.00,01.00,000.00,1.00 +0841,-050.00,+00.00,01.00,000.00,1.00 +0842,-050.00,+00.00,01.00,000.00,1.00 +0843,-050.00,+00.00,01.00,000.00,1.00 +0844,-050.00,+00.00,01.00,000.00,1.00 +0845,-050.00,+00.00,01.00,000.00,1.00 +0846,-050.00,+00.00,01.00,000.00,1.00 +0847,-050.00,+00.00,01.00,000.00,1.00 +0848,-050.00,+00.00,01.00,000.00,1.00 +0849,-050.00,+00.00,01.00,000.00,1.00 +0850,-050.00,+00.00,01.00,000.00,1.00 +0851,-050.00,+00.00,01.00,000.00,1.00 +0852,-050.00,+00.00,01.00,000.00,1.00 +0853,-050.00,+00.00,01.00,000.00,1.00 +0854,-050.00,+00.00,01.00,000.00,1.00 +0855,-050.00,+00.00,01.00,000.00,1.00 +0856,-050.00,+00.00,01.00,000.00,1.00 +0857,-050.00,+00.00,01.00,000.00,1.00 +0858,-050.00,+00.00,01.00,000.00,1.00 +0859,-050.00,+00.00,01.00,000.00,1.00 +0860,-050.00,+00.00,01.00,000.00,1.00 +0861,-050.00,+00.00,01.00,000.00,1.00 +0862,-050.00,+00.00,01.00,000.00,1.00 +0863,-050.00,+00.00,01.00,000.00,1.00 +0864,-050.00,+00.00,01.00,000.00,1.00 +0865,-050.00,+00.00,01.00,000.00,1.00 +0866,-050.00,+00.00,01.00,000.00,1.00 +0867,-050.00,+00.00,01.00,000.00,1.00 +0868,-050.00,+00.00,01.00,000.00,1.00 +0869,-050.00,+00.00,01.00,000.00,1.00 +0870,-050.00,+00.00,01.00,000.00,1.00 +0871,-050.00,+00.00,01.00,000.00,1.00 +0872,-050.00,+00.00,01.00,000.00,1.00 +0873,-050.00,+00.00,01.00,000.00,1.00 +0874,-050.00,+00.00,01.00,000.00,1.00 +0875,-050.00,+00.00,01.00,000.00,1.00 +0876,-050.00,+00.00,01.00,000.00,1.00 +0877,-050.00,+00.00,01.00,000.00,1.00 +0878,-050.00,+00.00,01.00,000.00,1.00 +0879,-050.00,+00.00,01.00,000.00,1.00 +0880,-050.00,+00.00,01.00,000.00,1.00 +0881,-050.00,+00.00,01.00,000.00,1.00 +0882,-050.00,+00.00,01.00,000.00,1.00 +0883,-050.00,+00.00,01.00,000.00,1.00 +0884,-050.00,+00.00,01.00,000.00,1.00 +0885,-050.00,+00.00,01.00,000.00,1.00 +0886,-050.00,+00.00,01.00,000.00,1.00 +0887,-050.00,+00.00,01.00,000.00,1.00 +0888,-050.00,+00.00,01.00,000.00,1.00 +0889,-050.00,+00.00,01.00,000.00,1.00 +0890,-050.00,+00.00,01.00,000.00,1.00 +0891,-050.00,+00.00,01.00,000.00,1.00 +0892,-050.00,+00.00,01.00,000.00,1.00 +0893,-050.00,+00.00,01.00,000.00,1.00 +0894,-050.00,+00.00,01.00,000.00,1.00 +0895,-050.00,+00.00,01.00,000.00,1.00 +0896,-050.00,+00.00,01.00,000.00,1.00 +0897,-050.00,+00.00,01.00,000.00,1.00 +0898,-050.00,+00.00,01.00,000.00,1.00 +0899,-050.00,+00.00,01.00,000.00,1.00 +0900,-050.00,+00.00,01.00,000.00,1.00 +0901,-050.00,+00.00,01.00,000.00,1.00 +0902,-050.00,+00.00,01.00,000.00,1.00 +0903,-050.00,+00.00,01.00,000.00,1.00 +0904,-050.00,+00.00,01.00,000.00,1.00 +0905,-050.00,+00.00,01.00,000.00,1.00 +0906,-050.00,+00.00,01.00,000.00,1.00 +0907,-050.00,+00.00,01.00,000.00,1.00 +0908,-050.00,+00.00,01.00,000.00,1.00 +0909,-050.00,+00.00,01.00,000.00,1.00 +0910,-050.00,+00.00,01.00,000.00,1.00 +0911,-050.00,+00.00,01.00,000.00,1.00 +0912,-050.00,+00.00,01.00,000.00,1.00 +0913,-050.00,+00.00,01.00,000.00,1.00 +0914,-050.00,+00.00,01.00,000.00,1.00 +0915,-050.00,+00.00,01.00,000.00,1.00 +0916,-050.00,+00.00,01.00,000.00,1.00 +0917,-050.00,+00.00,01.00,000.00,1.00 +0918,-050.00,+00.00,01.00,000.00,1.00 +0919,-050.00,+00.00,01.00,000.00,1.00 +0920,-050.00,+00.00,01.00,000.00,1.00 +0921,-050.00,+00.00,01.00,000.00,1.00 +0922,-050.00,+00.00,01.00,000.00,1.00 +0923,-050.00,+00.00,01.00,000.00,1.00 +0924,-050.00,+00.00,01.00,000.00,1.00 +0925,-050.00,+00.00,01.00,000.00,1.00 +0926,-050.00,+00.00,01.00,000.00,1.00 +0927,-050.00,+00.00,01.00,000.00,1.00 +0928,-050.00,+00.00,01.00,000.00,1.00 +0929,-050.00,+00.00,01.00,000.00,1.00 +0930,-050.00,+00.00,01.00,000.00,1.00 +0931,-050.00,+00.00,01.00,000.00,1.00 +0932,-050.00,+00.00,01.00,000.00,1.00 +0933,-050.00,+00.00,01.00,000.00,1.00 +0934,-050.00,+00.00,01.00,000.00,1.00 +0935,-050.00,+00.00,01.00,000.00,1.00 +0936,-050.00,+00.00,01.00,000.00,1.00 +0937,-050.00,+00.00,01.00,000.00,1.00 +0938,-050.00,+00.00,01.00,000.00,1.00 +0939,-050.00,+00.00,01.00,000.00,1.00 +0940,-050.00,+00.00,01.00,000.00,1.00 +0941,-050.00,+00.00,01.00,000.00,1.00 +0942,-050.00,+00.00,01.00,000.00,1.00 +0943,-050.00,+00.00,01.00,000.00,1.00 +0944,-050.00,+00.00,01.00,000.00,1.00 +0945,-050.00,+00.00,01.00,000.00,1.00 +0946,-050.00,+00.00,01.00,000.00,1.00 +0947,-050.00,+00.00,01.00,000.00,1.00 +0948,-050.00,+00.00,01.00,000.00,1.00 +0949,-050.00,+00.00,01.00,000.00,1.00 +0950,-050.00,+00.00,01.00,000.00,1.00 +0951,-050.00,+00.00,01.00,000.00,1.00 +0952,-050.00,+00.00,01.00,000.00,1.00 +0953,-050.00,+00.00,01.00,000.00,1.00 +0954,-050.00,+00.00,01.00,000.00,1.00 +0955,-050.00,+00.00,01.00,000.00,1.00 +0956,-050.00,+00.00,01.00,000.00,1.00 +0957,-050.00,+00.00,01.00,000.00,1.00 +0958,-050.00,+00.00,01.00,000.00,1.00 +0959,-050.00,+00.00,01.00,000.00,1.00 +0960,-050.00,+00.00,01.00,000.00,1.00 +0961,-050.00,+00.00,01.00,000.00,1.00 +0962,-050.00,+00.00,01.00,000.00,1.00 +0963,-050.00,+00.00,01.00,000.00,1.00 +0964,-050.00,+00.00,01.00,000.00,1.00 +0965,-050.00,+00.00,01.00,000.00,1.00 +0966,-050.00,+00.00,01.00,000.00,1.00 +0967,-050.00,+00.00,01.00,000.00,1.00 +0968,-050.00,+00.00,01.00,000.00,1.00 +0969,-050.00,+00.00,01.00,000.00,1.00 +0970,-050.00,+00.00,01.00,000.00,1.00 +0971,-050.00,+00.00,01.00,000.00,1.00 +0972,-050.00,+00.00,01.00,000.00,1.00 +0973,-050.00,+00.00,01.00,000.00,1.00 +0974,-050.00,+00.00,01.00,000.00,1.00 +0975,-050.00,+00.00,01.00,000.00,1.00 +0976,-050.00,+00.00,01.00,000.00,1.00 +0977,-050.00,+00.00,01.00,000.00,1.00 +0978,-050.00,+00.00,01.00,000.00,1.00 +0979,-050.00,+00.00,01.00,000.00,1.00 +0980,-050.00,+00.00,01.00,000.00,1.00 +0981,-050.00,+00.00,01.00,000.00,1.00 +0982,-050.00,+00.00,01.00,000.00,1.00 +0983,-050.00,+00.00,01.00,000.00,1.00 +0984,-050.00,+00.00,01.00,000.00,1.00 +0985,-050.00,+00.00,01.00,000.00,1.00 +0986,-050.00,+00.00,01.00,000.00,1.00 +0987,-050.00,+00.00,01.00,000.00,1.00 +0988,-050.00,+00.00,01.00,000.00,1.00 +0989,-050.00,+00.00,01.00,000.00,1.00 +0990,-050.00,+00.00,01.00,000.00,1.00 +0991,-050.00,+00.00,01.00,000.00,1.00 +0992,-050.00,+00.00,01.00,000.00,1.00 +0993,-050.00,+00.00,01.00,000.00,1.00 +0994,-050.00,+00.00,01.00,000.00,1.00 +0995,-050.00,+00.00,01.00,000.00,1.00 +0996,-050.00,+00.00,01.00,000.00,1.00 +0997,-050.00,+00.00,01.00,000.00,1.00 +0998,-050.00,+00.00,01.00,000.00,1.00 +0999,-050.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t06_ch2.csv b/scripts/td_object_renderer/metadata/csv/t06_ch2.csv new file mode 100644 index 0000000000..8a4f928c25 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t06_ch2.csv @@ -0,0 +1,1000 @@ +0000,-020.00,+00.00,01.00,000.00,1.00 +0001,-020.00,+00.00,01.00,000.00,1.00 +0002,-020.00,+00.00,01.00,000.00,1.00 +0003,-020.00,+00.00,01.00,000.00,1.00 +0004,-020.00,+00.00,01.00,000.00,1.00 +0005,-020.00,+00.00,01.00,000.00,1.00 +0006,-020.00,+00.00,01.00,000.00,1.00 +0007,-020.00,+00.00,01.00,000.00,1.00 +0008,-020.00,+00.00,01.00,000.00,1.00 +0009,-020.00,+00.00,01.00,000.00,1.00 +0010,-020.00,+00.00,01.00,000.00,1.00 +0011,-020.00,+00.00,01.00,000.00,1.00 +0012,-020.00,+00.00,01.00,000.00,1.00 +0013,-020.00,+00.00,01.00,000.00,1.00 +0014,-020.00,+00.00,01.00,000.00,1.00 +0015,-020.00,+00.00,01.00,000.00,1.00 +0016,-020.00,+00.00,01.00,000.00,1.00 +0017,-020.00,+00.00,01.00,000.00,1.00 +0018,-020.00,+00.00,01.00,000.00,1.00 +0019,-020.00,+00.00,01.00,000.00,1.00 +0020,-020.00,+00.00,01.00,000.00,1.00 +0021,-020.00,+00.00,01.00,000.00,1.00 +0022,-020.00,+00.00,01.00,000.00,1.00 +0023,-020.00,+00.00,01.00,000.00,1.00 +0024,-020.00,+00.00,01.00,000.00,1.00 +0025,-020.00,+00.00,01.00,000.00,1.00 +0026,-020.00,+00.00,01.00,000.00,1.00 +0027,-020.00,+00.00,01.00,000.00,1.00 +0028,-020.00,+00.00,01.00,000.00,1.00 +0029,-020.00,+00.00,01.00,000.00,1.00 +0030,-020.00,+00.00,01.00,000.00,1.00 +0031,-020.00,+00.00,01.00,000.00,1.00 +0032,-020.00,+00.00,01.00,000.00,1.00 +0033,-020.00,+00.00,01.00,000.00,1.00 +0034,-020.00,+00.00,01.00,000.00,1.00 +0035,-020.00,+00.00,01.00,000.00,1.00 +0036,-020.00,+00.00,01.00,000.00,1.00 +0037,-020.00,+00.00,01.00,000.00,1.00 +0038,-020.00,+00.00,01.00,000.00,1.00 +0039,-020.00,+00.00,01.00,000.00,1.00 +0040,-020.00,+00.00,01.00,000.00,1.00 +0041,-020.00,+00.00,01.00,000.00,1.00 +0042,-020.00,+00.00,01.00,000.00,1.00 +0043,-020.00,+00.00,01.00,000.00,1.00 +0044,-020.00,+00.00,01.00,000.00,1.00 +0045,-020.00,+00.00,01.00,000.00,1.00 +0046,-020.00,+00.00,01.00,000.00,1.00 +0047,-020.00,+00.00,01.00,000.00,1.00 +0048,-020.00,+00.00,01.00,000.00,1.00 +0049,-020.00,+00.00,01.00,000.00,1.00 +0050,-020.00,+00.00,01.00,000.00,1.00 +0051,-020.00,+00.00,01.00,000.00,1.00 +0052,-020.00,+00.00,01.00,000.00,1.00 +0053,-020.00,+00.00,01.00,000.00,1.00 +0054,-020.00,+00.00,01.00,000.00,1.00 +0055,-020.00,+00.00,01.00,000.00,1.00 +0056,-020.00,+00.00,01.00,000.00,1.00 +0057,-020.00,+00.00,01.00,000.00,1.00 +0058,-020.00,+00.00,01.00,000.00,1.00 +0059,-020.00,+00.00,01.00,000.00,1.00 +0060,-020.00,+00.00,01.00,000.00,1.00 +0061,-020.00,+00.00,01.00,000.00,1.00 +0062,-020.00,+00.00,01.00,000.00,1.00 +0063,-020.00,+00.00,01.00,000.00,1.00 +0064,-020.00,+00.00,01.00,000.00,1.00 +0065,-020.00,+00.00,01.00,000.00,1.00 +0066,-020.00,+00.00,01.00,000.00,1.00 +0067,-020.00,+00.00,01.00,000.00,1.00 +0068,-020.00,+00.00,01.00,000.00,1.00 +0069,-020.00,+00.00,01.00,000.00,1.00 +0070,-020.00,+00.00,01.00,000.00,1.00 +0071,-020.00,+00.00,01.00,000.00,1.00 +0072,-020.00,+00.00,01.00,000.00,1.00 +0073,-020.00,+00.00,01.00,000.00,1.00 +0074,-020.00,+00.00,01.00,000.00,1.00 +0075,-020.00,+00.00,01.00,000.00,1.00 +0076,-020.00,+00.00,01.00,000.00,1.00 +0077,-020.00,+00.00,01.00,000.00,1.00 +0078,-020.00,+00.00,01.00,000.00,1.00 +0079,-020.00,+00.00,01.00,000.00,1.00 +0080,-020.00,+00.00,01.00,000.00,1.00 +0081,-020.00,+00.00,01.00,000.00,1.00 +0082,-020.00,+00.00,01.00,000.00,1.00 +0083,-020.00,+00.00,01.00,000.00,1.00 +0084,-020.00,+00.00,01.00,000.00,1.00 +0085,-020.00,+00.00,01.00,000.00,1.00 +0086,-020.00,+00.00,01.00,000.00,1.00 +0087,-020.00,+00.00,01.00,000.00,1.00 +0088,-020.00,+00.00,01.00,000.00,1.00 +0089,-020.00,+00.00,01.00,000.00,1.00 +0090,-020.00,+00.00,01.00,000.00,1.00 +0091,-020.00,+00.00,01.00,000.00,1.00 +0092,-020.00,+00.00,01.00,000.00,1.00 +0093,-020.00,+00.00,01.00,000.00,1.00 +0094,-020.00,+00.00,01.00,000.00,1.00 +0095,-020.00,+00.00,01.00,000.00,1.00 +0096,-020.00,+00.00,01.00,000.00,1.00 +0097,-020.00,+00.00,01.00,000.00,1.00 +0098,-020.00,+00.00,01.00,000.00,1.00 +0099,-020.00,+00.00,01.00,000.00,1.00 +0100,-020.00,+00.00,01.00,000.00,1.00 +0101,-020.00,+00.00,01.00,000.00,1.00 +0102,-020.00,+00.00,01.00,000.00,1.00 +0103,-020.00,+00.00,01.00,000.00,1.00 +0104,-020.00,+00.00,01.00,000.00,1.00 +0105,-020.00,+00.00,01.00,000.00,1.00 +0106,-020.00,+00.00,01.00,000.00,1.00 +0107,-020.00,+00.00,01.00,000.00,1.00 +0108,-020.00,+00.00,01.00,000.00,1.00 +0109,-020.00,+00.00,01.00,000.00,1.00 +0110,-020.00,+00.00,01.00,000.00,1.00 +0111,-020.00,+00.00,01.00,000.00,1.00 +0112,-020.00,+00.00,01.00,000.00,1.00 +0113,-020.00,+00.00,01.00,000.00,1.00 +0114,-020.00,+00.00,01.00,000.00,1.00 +0115,-020.00,+00.00,01.00,000.00,1.00 +0116,-020.00,+00.00,01.00,000.00,1.00 +0117,-020.00,+00.00,01.00,000.00,1.00 +0118,-020.00,+00.00,01.00,000.00,1.00 +0119,-020.00,+00.00,01.00,000.00,1.00 +0120,-020.00,+00.00,01.00,000.00,1.00 +0121,-020.00,+00.00,01.00,000.00,1.00 +0122,-020.00,+00.00,01.00,000.00,1.00 +0123,-020.00,+00.00,01.00,000.00,1.00 +0124,-020.00,+00.00,01.00,000.00,1.00 +0125,-020.00,+00.00,01.00,000.00,1.00 +0126,-020.00,+00.00,01.00,000.00,1.00 +0127,-020.00,+00.00,01.00,000.00,1.00 +0128,-020.00,+00.00,01.00,000.00,1.00 +0129,-020.00,+00.00,01.00,000.00,1.00 +0130,-020.00,+00.00,01.00,000.00,1.00 +0131,-020.00,+00.00,01.00,000.00,1.00 +0132,-020.00,+00.00,01.00,000.00,1.00 +0133,-020.00,+00.00,01.00,000.00,1.00 +0134,-020.00,+00.00,01.00,000.00,1.00 +0135,-020.00,+00.00,01.00,000.00,1.00 +0136,-020.00,+00.00,01.00,000.00,1.00 +0137,-020.00,+00.00,01.00,000.00,1.00 +0138,-020.00,+00.00,01.00,000.00,1.00 +0139,-020.00,+00.00,01.00,000.00,1.00 +0140,-020.00,+00.00,01.00,000.00,1.00 +0141,-020.00,+00.00,01.00,000.00,1.00 +0142,-020.00,+00.00,01.00,000.00,1.00 +0143,-020.00,+00.00,01.00,000.00,1.00 +0144,-020.00,+00.00,01.00,000.00,1.00 +0145,-020.00,+00.00,01.00,000.00,1.00 +0146,-020.00,+00.00,01.00,000.00,1.00 +0147,-020.00,+00.00,01.00,000.00,1.00 +0148,-020.00,+00.00,01.00,000.00,1.00 +0149,-020.00,+00.00,01.00,000.00,1.00 +0150,-020.00,+00.00,01.00,000.00,1.00 +0151,-020.00,+00.00,01.00,000.00,1.00 +0152,-020.00,+00.00,01.00,000.00,1.00 +0153,-020.00,+00.00,01.00,000.00,1.00 +0154,-020.00,+00.00,01.00,000.00,1.00 +0155,-020.00,+00.00,01.00,000.00,1.00 +0156,-020.00,+00.00,01.00,000.00,1.00 +0157,-020.00,+00.00,01.00,000.00,1.00 +0158,-020.00,+00.00,01.00,000.00,1.00 +0159,-020.00,+00.00,01.00,000.00,1.00 +0160,-020.00,+00.00,01.00,000.00,1.00 +0161,-020.00,+00.00,01.00,000.00,1.00 +0162,-020.00,+00.00,01.00,000.00,1.00 +0163,-020.00,+00.00,01.00,000.00,1.00 +0164,-020.00,+00.00,01.00,000.00,1.00 +0165,-020.00,+00.00,01.00,000.00,1.00 +0166,-020.00,+00.00,01.00,000.00,1.00 +0167,-020.00,+00.00,01.00,000.00,1.00 +0168,-020.00,+00.00,01.00,000.00,1.00 +0169,-020.00,+00.00,01.00,000.00,1.00 +0170,-020.00,+00.00,01.00,000.00,1.00 +0171,-020.00,+00.00,01.00,000.00,1.00 +0172,-020.00,+00.00,01.00,000.00,1.00 +0173,-020.00,+00.00,01.00,000.00,1.00 +0174,-020.00,+00.00,01.00,000.00,1.00 +0175,-020.00,+00.00,01.00,000.00,1.00 +0176,-020.00,+00.00,01.00,000.00,1.00 +0177,-020.00,+00.00,01.00,000.00,1.00 +0178,-020.00,+00.00,01.00,000.00,1.00 +0179,-020.00,+00.00,01.00,000.00,1.00 +0180,-020.00,+00.00,01.00,000.00,1.00 +0181,-020.00,+00.00,01.00,000.00,1.00 +0182,-020.00,+00.00,01.00,000.00,1.00 +0183,-020.00,+00.00,01.00,000.00,1.00 +0184,-020.00,+00.00,01.00,000.00,1.00 +0185,-020.00,+00.00,01.00,000.00,1.00 +0186,-020.00,+00.00,01.00,000.00,1.00 +0187,-020.00,+00.00,01.00,000.00,1.00 +0188,-020.00,+00.00,01.00,000.00,1.00 +0189,-020.00,+00.00,01.00,000.00,1.00 +0190,-020.00,+00.00,01.00,000.00,1.00 +0191,-020.00,+00.00,01.00,000.00,1.00 +0192,-020.00,+00.00,01.00,000.00,1.00 +0193,-020.00,+00.00,01.00,000.00,1.00 +0194,-020.00,+00.00,01.00,000.00,1.00 +0195,-020.00,+00.00,01.00,000.00,1.00 +0196,-020.00,+00.00,01.00,000.00,1.00 +0197,-020.00,+00.00,01.00,000.00,1.00 +0198,-020.00,+00.00,01.00,000.00,1.00 +0199,-020.00,+00.00,01.00,000.00,1.00 +0200,-020.00,+00.00,01.00,000.00,1.00 +0201,-020.00,+00.00,01.00,000.00,1.00 +0202,-020.00,+00.00,01.00,000.00,1.00 +0203,-020.00,+00.00,01.00,000.00,1.00 +0204,-020.00,+00.00,01.00,000.00,1.00 +0205,-020.00,+00.00,01.00,000.00,1.00 +0206,-020.00,+00.00,01.00,000.00,1.00 +0207,-020.00,+00.00,01.00,000.00,1.00 +0208,-020.00,+00.00,01.00,000.00,1.00 +0209,-020.00,+00.00,01.00,000.00,1.00 +0210,-020.00,+00.00,01.00,000.00,1.00 +0211,-020.00,+00.00,01.00,000.00,1.00 +0212,-020.00,+00.00,01.00,000.00,1.00 +0213,-020.00,+00.00,01.00,000.00,1.00 +0214,-020.00,+00.00,01.00,000.00,1.00 +0215,-020.00,+00.00,01.00,000.00,1.00 +0216,-020.00,+00.00,01.00,000.00,1.00 +0217,-020.00,+00.00,01.00,000.00,1.00 +0218,-020.00,+00.00,01.00,000.00,1.00 +0219,-020.00,+00.00,01.00,000.00,1.00 +0220,-020.00,+00.00,01.00,000.00,1.00 +0221,-020.00,+00.00,01.00,000.00,1.00 +0222,-020.00,+00.00,01.00,000.00,1.00 +0223,-020.00,+00.00,01.00,000.00,1.00 +0224,-020.00,+00.00,01.00,000.00,1.00 +0225,-020.00,+00.00,01.00,000.00,1.00 +0226,-020.00,+00.00,01.00,000.00,1.00 +0227,-020.00,+00.00,01.00,000.00,1.00 +0228,-020.00,+00.00,01.00,000.00,1.00 +0229,-020.00,+00.00,01.00,000.00,1.00 +0230,-020.00,+00.00,01.00,000.00,1.00 +0231,-020.00,+00.00,01.00,000.00,1.00 +0232,-020.00,+00.00,01.00,000.00,1.00 +0233,-020.00,+00.00,01.00,000.00,1.00 +0234,-020.00,+00.00,01.00,000.00,1.00 +0235,-020.00,+00.00,01.00,000.00,1.00 +0236,-020.00,+00.00,01.00,000.00,1.00 +0237,-020.00,+00.00,01.00,000.00,1.00 +0238,-020.00,+00.00,01.00,000.00,1.00 +0239,-020.00,+00.00,01.00,000.00,1.00 +0240,-020.00,+00.00,01.00,000.00,1.00 +0241,-020.00,+00.00,01.00,000.00,1.00 +0242,-020.00,+00.00,01.00,000.00,1.00 +0243,-020.00,+00.00,01.00,000.00,1.00 +0244,-020.00,+00.00,01.00,000.00,1.00 +0245,-020.00,+00.00,01.00,000.00,1.00 +0246,-020.00,+00.00,01.00,000.00,1.00 +0247,-020.00,+00.00,01.00,000.00,1.00 +0248,-020.00,+00.00,01.00,000.00,1.00 +0249,-020.00,+00.00,01.00,000.00,1.00 +0250,-020.00,+00.00,01.00,000.00,1.00 +0251,-020.00,+00.00,01.00,000.00,1.00 +0252,-020.00,+00.00,01.00,000.00,1.00 +0253,-020.00,+00.00,01.00,000.00,1.00 +0254,-020.00,+00.00,01.00,000.00,1.00 +0255,-020.00,+00.00,01.00,000.00,1.00 +0256,-020.00,+00.00,01.00,000.00,1.00 +0257,-020.00,+00.00,01.00,000.00,1.00 +0258,-020.00,+00.00,01.00,000.00,1.00 +0259,-020.00,+00.00,01.00,000.00,1.00 +0260,-020.00,+00.00,01.00,000.00,1.00 +0261,-020.00,+00.00,01.00,000.00,1.00 +0262,-020.00,+00.00,01.00,000.00,1.00 +0263,-020.00,+00.00,01.00,000.00,1.00 +0264,-020.00,+00.00,01.00,000.00,1.00 +0265,-020.00,+00.00,01.00,000.00,1.00 +0266,-020.00,+00.00,01.00,000.00,1.00 +0267,-020.00,+00.00,01.00,000.00,1.00 +0268,-020.00,+00.00,01.00,000.00,1.00 +0269,-020.00,+00.00,01.00,000.00,1.00 +0270,-020.00,+00.00,01.00,000.00,1.00 +0271,-020.00,+00.00,01.00,000.00,1.00 +0272,-020.00,+00.00,01.00,000.00,1.00 +0273,-020.00,+00.00,01.00,000.00,1.00 +0274,-020.00,+00.00,01.00,000.00,1.00 +0275,-020.00,+00.00,01.00,000.00,1.00 +0276,-020.00,+00.00,01.00,000.00,1.00 +0277,-020.00,+00.00,01.00,000.00,1.00 +0278,-020.00,+00.00,01.00,000.00,1.00 +0279,-020.00,+00.00,01.00,000.00,1.00 +0280,-020.00,+00.00,01.00,000.00,1.00 +0281,-020.00,+00.00,01.00,000.00,1.00 +0282,-020.00,+00.00,01.00,000.00,1.00 +0283,-020.00,+00.00,01.00,000.00,1.00 +0284,-020.00,+00.00,01.00,000.00,1.00 +0285,-020.00,+00.00,01.00,000.00,1.00 +0286,-020.00,+00.00,01.00,000.00,1.00 +0287,-020.00,+00.00,01.00,000.00,1.00 +0288,-020.00,+00.00,01.00,000.00,1.00 +0289,-020.00,+00.00,01.00,000.00,1.00 +0290,-020.00,+00.00,01.00,000.00,1.00 +0291,-020.00,+00.00,01.00,000.00,1.00 +0292,-020.00,+00.00,01.00,000.00,1.00 +0293,-020.00,+00.00,01.00,000.00,1.00 +0294,-020.00,+00.00,01.00,000.00,1.00 +0295,-020.00,+00.00,01.00,000.00,1.00 +0296,-020.00,+00.00,01.00,000.00,1.00 +0297,-020.00,+00.00,01.00,000.00,1.00 +0298,-020.00,+00.00,01.00,000.00,1.00 +0299,-020.00,+00.00,01.00,000.00,1.00 +0300,-020.00,+00.00,01.00,000.00,1.00 +0301,-020.00,+00.00,01.00,000.00,1.00 +0302,-020.00,+00.00,01.00,000.00,1.00 +0303,-020.00,+00.00,01.00,000.00,1.00 +0304,-020.00,+00.00,01.00,000.00,1.00 +0305,-020.00,+00.00,01.00,000.00,1.00 +0306,-020.00,+00.00,01.00,000.00,1.00 +0307,-020.00,+00.00,01.00,000.00,1.00 +0308,-020.00,+00.00,01.00,000.00,1.00 +0309,-020.00,+00.00,01.00,000.00,1.00 +0310,-020.00,+00.00,01.00,000.00,1.00 +0311,-020.00,+00.00,01.00,000.00,1.00 +0312,-020.00,+00.00,01.00,000.00,1.00 +0313,-020.00,+00.00,01.00,000.00,1.00 +0314,-020.00,+00.00,01.00,000.00,1.00 +0315,-020.00,+00.00,01.00,000.00,1.00 +0316,-020.00,+00.00,01.00,000.00,1.00 +0317,-020.00,+00.00,01.00,000.00,1.00 +0318,-020.00,+00.00,01.00,000.00,1.00 +0319,-020.00,+00.00,01.00,000.00,1.00 +0320,-020.00,+00.00,01.00,000.00,1.00 +0321,-020.00,+00.00,01.00,000.00,1.00 +0322,-020.00,+00.00,01.00,000.00,1.00 +0323,-020.00,+00.00,01.00,000.00,1.00 +0324,-020.00,+00.00,01.00,000.00,1.00 +0325,-020.00,+00.00,01.00,000.00,1.00 +0326,-020.00,+00.00,01.00,000.00,1.00 +0327,-020.00,+00.00,01.00,000.00,1.00 +0328,-020.00,+00.00,01.00,000.00,1.00 +0329,-020.00,+00.00,01.00,000.00,1.00 +0330,-020.00,+00.00,01.00,000.00,1.00 +0331,-020.00,+00.00,01.00,000.00,1.00 +0332,-020.00,+00.00,01.00,000.00,1.00 +0333,-020.00,+00.00,01.00,000.00,1.00 +0334,-020.00,+00.00,01.00,000.00,1.00 +0335,-020.00,+00.00,01.00,000.00,1.00 +0336,-020.00,+00.00,01.00,000.00,1.00 +0337,-020.00,+00.00,01.00,000.00,1.00 +0338,-020.00,+00.00,01.00,000.00,1.00 +0339,-020.00,+00.00,01.00,000.00,1.00 +0340,-020.00,+00.00,01.00,000.00,1.00 +0341,-020.00,+00.00,01.00,000.00,1.00 +0342,-020.00,+00.00,01.00,000.00,1.00 +0343,-020.00,+00.00,01.00,000.00,1.00 +0344,-020.00,+00.00,01.00,000.00,1.00 +0345,-020.00,+00.00,01.00,000.00,1.00 +0346,-020.00,+00.00,01.00,000.00,1.00 +0347,-020.00,+00.00,01.00,000.00,1.00 +0348,-020.00,+00.00,01.00,000.00,1.00 +0349,-020.00,+00.00,01.00,000.00,1.00 +0350,-020.00,+00.00,01.00,000.00,1.00 +0351,-020.00,+00.00,01.00,000.00,1.00 +0352,-020.00,+00.00,01.00,000.00,1.00 +0353,-020.00,+00.00,01.00,000.00,1.00 +0354,-020.00,+00.00,01.00,000.00,1.00 +0355,-020.00,+00.00,01.00,000.00,1.00 +0356,-020.00,+00.00,01.00,000.00,1.00 +0357,-020.00,+00.00,01.00,000.00,1.00 +0358,-020.00,+00.00,01.00,000.00,1.00 +0359,-020.00,+00.00,01.00,000.00,1.00 +0360,-020.00,+00.00,01.00,000.00,1.00 +0361,-020.00,+00.00,01.00,000.00,1.00 +0362,-020.00,+00.00,01.00,000.00,1.00 +0363,-020.00,+00.00,01.00,000.00,1.00 +0364,-020.00,+00.00,01.00,000.00,1.00 +0365,-020.00,+00.00,01.00,000.00,1.00 +0366,-020.00,+00.00,01.00,000.00,1.00 +0367,-020.00,+00.00,01.00,000.00,1.00 +0368,-020.00,+00.00,01.00,000.00,1.00 +0369,-020.00,+00.00,01.00,000.00,1.00 +0370,-020.00,+00.00,01.00,000.00,1.00 +0371,-020.00,+00.00,01.00,000.00,1.00 +0372,-020.00,+00.00,01.00,000.00,1.00 +0373,-020.00,+00.00,01.00,000.00,1.00 +0374,-020.00,+00.00,01.00,000.00,1.00 +0375,-020.00,+00.00,01.00,000.00,1.00 +0376,-020.00,+00.00,01.00,000.00,1.00 +0377,-020.00,+00.00,01.00,000.00,1.00 +0378,-020.00,+00.00,01.00,000.00,1.00 +0379,-020.00,+00.00,01.00,000.00,1.00 +0380,-020.00,+00.00,01.00,000.00,1.00 +0381,-020.00,+00.00,01.00,000.00,1.00 +0382,-020.00,+00.00,01.00,000.00,1.00 +0383,-020.00,+00.00,01.00,000.00,1.00 +0384,-020.00,+00.00,01.00,000.00,1.00 +0385,-020.00,+00.00,01.00,000.00,1.00 +0386,-020.00,+00.00,01.00,000.00,1.00 +0387,-020.00,+00.00,01.00,000.00,1.00 +0388,-020.00,+00.00,01.00,000.00,1.00 +0389,-020.00,+00.00,01.00,000.00,1.00 +0390,-020.00,+00.00,01.00,000.00,1.00 +0391,-020.00,+00.00,01.00,000.00,1.00 +0392,-020.00,+00.00,01.00,000.00,1.00 +0393,-020.00,+00.00,01.00,000.00,1.00 +0394,-020.00,+00.00,01.00,000.00,1.00 +0395,-020.00,+00.00,01.00,000.00,1.00 +0396,-020.00,+00.00,01.00,000.00,1.00 +0397,-020.00,+00.00,01.00,000.00,1.00 +0398,-020.00,+00.00,01.00,000.00,1.00 +0399,-020.00,+00.00,01.00,000.00,1.00 +0400,-020.00,+00.00,01.00,000.00,1.00 +0401,-020.00,+00.00,01.00,000.00,1.00 +0402,-020.00,+00.00,01.00,000.00,1.00 +0403,-020.00,+00.00,01.00,000.00,1.00 +0404,-020.00,+00.00,01.00,000.00,1.00 +0405,-020.00,+00.00,01.00,000.00,1.00 +0406,-020.00,+00.00,01.00,000.00,1.00 +0407,-020.00,+00.00,01.00,000.00,1.00 +0408,-020.00,+00.00,01.00,000.00,1.00 +0409,-020.00,+00.00,01.00,000.00,1.00 +0410,-020.00,+00.00,01.00,000.00,1.00 +0411,-020.00,+00.00,01.00,000.00,1.00 +0412,-020.00,+00.00,01.00,000.00,1.00 +0413,-020.00,+00.00,01.00,000.00,1.00 +0414,-020.00,+00.00,01.00,000.00,1.00 +0415,-020.00,+00.00,01.00,000.00,1.00 +0416,-020.00,+00.00,01.00,000.00,1.00 +0417,-020.00,+00.00,01.00,000.00,1.00 +0418,-020.00,+00.00,01.00,000.00,1.00 +0419,-020.00,+00.00,01.00,000.00,1.00 +0420,-020.00,+00.00,01.00,000.00,1.00 +0421,-020.00,+00.00,01.00,000.00,1.00 +0422,-020.00,+00.00,01.00,000.00,1.00 +0423,-020.00,+00.00,01.00,000.00,1.00 +0424,-020.00,+00.00,01.00,000.00,1.00 +0425,-020.00,+00.00,01.00,000.00,1.00 +0426,-020.00,+00.00,01.00,000.00,1.00 +0427,-020.00,+00.00,01.00,000.00,1.00 +0428,-020.00,+00.00,01.00,000.00,1.00 +0429,-020.00,+00.00,01.00,000.00,1.00 +0430,-020.00,+00.00,01.00,000.00,1.00 +0431,-020.00,+00.00,01.00,000.00,1.00 +0432,-020.00,+00.00,01.00,000.00,1.00 +0433,-020.00,+00.00,01.00,000.00,1.00 +0434,-020.00,+00.00,01.00,000.00,1.00 +0435,-020.00,+00.00,01.00,000.00,1.00 +0436,-020.00,+00.00,01.00,000.00,1.00 +0437,-020.00,+00.00,01.00,000.00,1.00 +0438,-020.00,+00.00,01.00,000.00,1.00 +0439,-020.00,+00.00,01.00,000.00,1.00 +0440,-020.00,+00.00,01.00,000.00,1.00 +0441,-020.00,+00.00,01.00,000.00,1.00 +0442,-020.00,+00.00,01.00,000.00,1.00 +0443,-020.00,+00.00,01.00,000.00,1.00 +0444,-020.00,+00.00,01.00,000.00,1.00 +0445,-020.00,+00.00,01.00,000.00,1.00 +0446,-020.00,+00.00,01.00,000.00,1.00 +0447,-020.00,+00.00,01.00,000.00,1.00 +0448,-020.00,+00.00,01.00,000.00,1.00 +0449,-020.00,+00.00,01.00,000.00,1.00 +0450,-020.00,+00.00,01.00,000.00,1.00 +0451,-020.00,+00.00,01.00,000.00,1.00 +0452,-020.00,+00.00,01.00,000.00,1.00 +0453,-020.00,+00.00,01.00,000.00,1.00 +0454,-020.00,+00.00,01.00,000.00,1.00 +0455,-020.00,+00.00,01.00,000.00,1.00 +0456,-020.00,+00.00,01.00,000.00,1.00 +0457,-020.00,+00.00,01.00,000.00,1.00 +0458,-020.00,+00.00,01.00,000.00,1.00 +0459,-020.00,+00.00,01.00,000.00,1.00 +0460,-020.00,+00.00,01.00,000.00,1.00 +0461,-020.00,+00.00,01.00,000.00,1.00 +0462,-020.00,+00.00,01.00,000.00,1.00 +0463,-020.00,+00.00,01.00,000.00,1.00 +0464,-020.00,+00.00,01.00,000.00,1.00 +0465,-020.00,+00.00,01.00,000.00,1.00 +0466,-020.00,+00.00,01.00,000.00,1.00 +0467,-020.00,+00.00,01.00,000.00,1.00 +0468,-020.00,+00.00,01.00,000.00,1.00 +0469,-020.00,+00.00,01.00,000.00,1.00 +0470,-020.00,+00.00,01.00,000.00,1.00 +0471,-020.00,+00.00,01.00,000.00,1.00 +0472,-020.00,+00.00,01.00,000.00,1.00 +0473,-020.00,+00.00,01.00,000.00,1.00 +0474,-020.00,+00.00,01.00,000.00,1.00 +0475,-020.00,+00.00,01.00,000.00,1.00 +0476,-020.00,+00.00,01.00,000.00,1.00 +0477,-020.00,+00.00,01.00,000.00,1.00 +0478,-020.00,+00.00,01.00,000.00,1.00 +0479,-020.00,+00.00,01.00,000.00,1.00 +0480,-020.00,+00.00,01.00,000.00,1.00 +0481,-020.00,+00.00,01.00,000.00,1.00 +0482,-020.00,+00.00,01.00,000.00,1.00 +0483,-020.00,+00.00,01.00,000.00,1.00 +0484,-020.00,+00.00,01.00,000.00,1.00 +0485,-020.00,+00.00,01.00,000.00,1.00 +0486,-020.00,+00.00,01.00,000.00,1.00 +0487,-020.00,+00.00,01.00,000.00,1.00 +0488,-020.00,+00.00,01.00,000.00,1.00 +0489,-020.00,+00.00,01.00,000.00,1.00 +0490,-020.00,+00.00,01.00,000.00,1.00 +0491,-020.00,+00.00,01.00,000.00,1.00 +0492,-020.00,+00.00,01.00,000.00,1.00 +0493,-020.00,+00.00,01.00,000.00,1.00 +0494,-020.00,+00.00,01.00,000.00,1.00 +0495,-020.00,+00.00,01.00,000.00,1.00 +0496,-020.00,+00.00,01.00,000.00,1.00 +0497,-020.00,+00.00,01.00,000.00,1.00 +0498,-020.00,+00.00,01.00,000.00,1.00 +0499,-020.00,+00.00,01.00,000.00,1.00 +0500,-020.00,+00.00,01.00,000.00,1.00 +0501,-020.00,+00.00,01.00,000.00,1.00 +0502,-020.00,+00.00,01.00,000.00,1.00 +0503,-020.00,+00.00,01.00,000.00,1.00 +0504,-020.00,+00.00,01.00,000.00,1.00 +0505,-020.00,+00.00,01.00,000.00,1.00 +0506,-020.00,+00.00,01.00,000.00,1.00 +0507,-020.00,+00.00,01.00,000.00,1.00 +0508,-020.00,+00.00,01.00,000.00,1.00 +0509,-020.00,+00.00,01.00,000.00,1.00 +0510,-020.00,+00.00,01.00,000.00,1.00 +0511,-020.00,+00.00,01.00,000.00,1.00 +0512,-020.00,+00.00,01.00,000.00,1.00 +0513,-020.00,+00.00,01.00,000.00,1.00 +0514,-020.00,+00.00,01.00,000.00,1.00 +0515,-020.00,+00.00,01.00,000.00,1.00 +0516,-020.00,+00.00,01.00,000.00,1.00 +0517,-020.00,+00.00,01.00,000.00,1.00 +0518,-020.00,+00.00,01.00,000.00,1.00 +0519,-020.00,+00.00,01.00,000.00,1.00 +0520,-020.00,+00.00,01.00,000.00,1.00 +0521,-020.00,+00.00,01.00,000.00,1.00 +0522,-020.00,+00.00,01.00,000.00,1.00 +0523,-020.00,+00.00,01.00,000.00,1.00 +0524,-020.00,+00.00,01.00,000.00,1.00 +0525,-020.00,+00.00,01.00,000.00,1.00 +0526,-020.00,+00.00,01.00,000.00,1.00 +0527,-020.00,+00.00,01.00,000.00,1.00 +0528,-020.00,+00.00,01.00,000.00,1.00 +0529,-020.00,+00.00,01.00,000.00,1.00 +0530,-020.00,+00.00,01.00,000.00,1.00 +0531,-020.00,+00.00,01.00,000.00,1.00 +0532,-020.00,+00.00,01.00,000.00,1.00 +0533,-020.00,+00.00,01.00,000.00,1.00 +0534,-020.00,+00.00,01.00,000.00,1.00 +0535,-020.00,+00.00,01.00,000.00,1.00 +0536,-020.00,+00.00,01.00,000.00,1.00 +0537,-020.00,+00.00,01.00,000.00,1.00 +0538,-020.00,+00.00,01.00,000.00,1.00 +0539,-020.00,+00.00,01.00,000.00,1.00 +0540,-020.00,+00.00,01.00,000.00,1.00 +0541,-020.00,+00.00,01.00,000.00,1.00 +0542,-020.00,+00.00,01.00,000.00,1.00 +0543,-020.00,+00.00,01.00,000.00,1.00 +0544,-020.00,+00.00,01.00,000.00,1.00 +0545,-020.00,+00.00,01.00,000.00,1.00 +0546,-020.00,+00.00,01.00,000.00,1.00 +0547,-020.00,+00.00,01.00,000.00,1.00 +0548,-020.00,+00.00,01.00,000.00,1.00 +0549,-020.00,+00.00,01.00,000.00,1.00 +0550,-020.00,+00.00,01.00,000.00,1.00 +0551,-020.00,+00.00,01.00,000.00,1.00 +0552,-020.00,+00.00,01.00,000.00,1.00 +0553,-020.00,+00.00,01.00,000.00,1.00 +0554,-020.00,+00.00,01.00,000.00,1.00 +0555,-020.00,+00.00,01.00,000.00,1.00 +0556,-020.00,+00.00,01.00,000.00,1.00 +0557,-020.00,+00.00,01.00,000.00,1.00 +0558,-020.00,+00.00,01.00,000.00,1.00 +0559,-020.00,+00.00,01.00,000.00,1.00 +0560,-020.00,+00.00,01.00,000.00,1.00 +0561,-020.00,+00.00,01.00,000.00,1.00 +0562,-020.00,+00.00,01.00,000.00,1.00 +0563,-020.00,+00.00,01.00,000.00,1.00 +0564,-020.00,+00.00,01.00,000.00,1.00 +0565,-020.00,+00.00,01.00,000.00,1.00 +0566,-020.00,+00.00,01.00,000.00,1.00 +0567,-020.00,+00.00,01.00,000.00,1.00 +0568,-020.00,+00.00,01.00,000.00,1.00 +0569,-020.00,+00.00,01.00,000.00,1.00 +0570,-020.00,+00.00,01.00,000.00,1.00 +0571,-020.00,+00.00,01.00,000.00,1.00 +0572,-020.00,+00.00,01.00,000.00,1.00 +0573,-020.00,+00.00,01.00,000.00,1.00 +0574,-020.00,+00.00,01.00,000.00,1.00 +0575,-020.00,+00.00,01.00,000.00,1.00 +0576,-020.00,+00.00,01.00,000.00,1.00 +0577,-020.00,+00.00,01.00,000.00,1.00 +0578,-020.00,+00.00,01.00,000.00,1.00 +0579,-020.00,+00.00,01.00,000.00,1.00 +0580,-020.00,+00.00,01.00,000.00,1.00 +0581,-020.00,+00.00,01.00,000.00,1.00 +0582,-020.00,+00.00,01.00,000.00,1.00 +0583,-020.00,+00.00,01.00,000.00,1.00 +0584,-020.00,+00.00,01.00,000.00,1.00 +0585,-020.00,+00.00,01.00,000.00,1.00 +0586,-020.00,+00.00,01.00,000.00,1.00 +0587,-020.00,+00.00,01.00,000.00,1.00 +0588,-020.00,+00.00,01.00,000.00,1.00 +0589,-020.00,+00.00,01.00,000.00,1.00 +0590,-020.00,+00.00,01.00,000.00,1.00 +0591,-020.00,+00.00,01.00,000.00,1.00 +0592,-020.00,+00.00,01.00,000.00,1.00 +0593,-020.00,+00.00,01.00,000.00,1.00 +0594,-020.00,+00.00,01.00,000.00,1.00 +0595,-020.00,+00.00,01.00,000.00,1.00 +0596,-020.00,+00.00,01.00,000.00,1.00 +0597,-020.00,+00.00,01.00,000.00,1.00 +0598,-020.00,+00.00,01.00,000.00,1.00 +0599,-020.00,+00.00,01.00,000.00,1.00 +0600,-020.00,+00.00,01.00,000.00,1.00 +0601,-020.00,+00.00,01.00,000.00,1.00 +0602,-020.00,+00.00,01.00,000.00,1.00 +0603,-020.00,+00.00,01.00,000.00,1.00 +0604,-020.00,+00.00,01.00,000.00,1.00 +0605,-020.00,+00.00,01.00,000.00,1.00 +0606,-020.00,+00.00,01.00,000.00,1.00 +0607,-020.00,+00.00,01.00,000.00,1.00 +0608,-020.00,+00.00,01.00,000.00,1.00 +0609,-020.00,+00.00,01.00,000.00,1.00 +0610,-020.00,+00.00,01.00,000.00,1.00 +0611,-020.00,+00.00,01.00,000.00,1.00 +0612,-020.00,+00.00,01.00,000.00,1.00 +0613,-020.00,+00.00,01.00,000.00,1.00 +0614,-020.00,+00.00,01.00,000.00,1.00 +0615,-020.00,+00.00,01.00,000.00,1.00 +0616,-020.00,+00.00,01.00,000.00,1.00 +0617,-020.00,+00.00,01.00,000.00,1.00 +0618,-020.00,+00.00,01.00,000.00,1.00 +0619,-020.00,+00.00,01.00,000.00,1.00 +0620,-020.00,+00.00,01.00,000.00,1.00 +0621,-020.00,+00.00,01.00,000.00,1.00 +0622,-020.00,+00.00,01.00,000.00,1.00 +0623,-020.00,+00.00,01.00,000.00,1.00 +0624,-020.00,+00.00,01.00,000.00,1.00 +0625,-020.00,+00.00,01.00,000.00,1.00 +0626,-020.00,+00.00,01.00,000.00,1.00 +0627,-020.00,+00.00,01.00,000.00,1.00 +0628,-020.00,+00.00,01.00,000.00,1.00 +0629,-020.00,+00.00,01.00,000.00,1.00 +0630,-020.00,+00.00,01.00,000.00,1.00 +0631,-020.00,+00.00,01.00,000.00,1.00 +0632,-020.00,+00.00,01.00,000.00,1.00 +0633,-020.00,+00.00,01.00,000.00,1.00 +0634,-020.00,+00.00,01.00,000.00,1.00 +0635,-020.00,+00.00,01.00,000.00,1.00 +0636,-020.00,+00.00,01.00,000.00,1.00 +0637,-020.00,+00.00,01.00,000.00,1.00 +0638,-020.00,+00.00,01.00,000.00,1.00 +0639,-020.00,+00.00,01.00,000.00,1.00 +0640,-020.00,+00.00,01.00,000.00,1.00 +0641,-020.00,+00.00,01.00,000.00,1.00 +0642,-020.00,+00.00,01.00,000.00,1.00 +0643,-020.00,+00.00,01.00,000.00,1.00 +0644,-020.00,+00.00,01.00,000.00,1.00 +0645,-020.00,+00.00,01.00,000.00,1.00 +0646,-020.00,+00.00,01.00,000.00,1.00 +0647,-020.00,+00.00,01.00,000.00,1.00 +0648,-020.00,+00.00,01.00,000.00,1.00 +0649,-020.00,+00.00,01.00,000.00,1.00 +0650,-020.00,+00.00,01.00,000.00,1.00 +0651,-020.00,+00.00,01.00,000.00,1.00 +0652,-020.00,+00.00,01.00,000.00,1.00 +0653,-020.00,+00.00,01.00,000.00,1.00 +0654,-020.00,+00.00,01.00,000.00,1.00 +0655,-020.00,+00.00,01.00,000.00,1.00 +0656,-020.00,+00.00,01.00,000.00,1.00 +0657,-020.00,+00.00,01.00,000.00,1.00 +0658,-020.00,+00.00,01.00,000.00,1.00 +0659,-020.00,+00.00,01.00,000.00,1.00 +0660,-020.00,+00.00,01.00,000.00,1.00 +0661,-020.00,+00.00,01.00,000.00,1.00 +0662,-020.00,+00.00,01.00,000.00,1.00 +0663,-020.00,+00.00,01.00,000.00,1.00 +0664,-020.00,+00.00,01.00,000.00,1.00 +0665,-020.00,+00.00,01.00,000.00,1.00 +0666,-020.00,+00.00,01.00,000.00,1.00 +0667,-020.00,+00.00,01.00,000.00,1.00 +0668,-020.00,+00.00,01.00,000.00,1.00 +0669,-020.00,+00.00,01.00,000.00,1.00 +0670,-020.00,+00.00,01.00,000.00,1.00 +0671,-020.00,+00.00,01.00,000.00,1.00 +0672,-020.00,+00.00,01.00,000.00,1.00 +0673,-020.00,+00.00,01.00,000.00,1.00 +0674,-020.00,+00.00,01.00,000.00,1.00 +0675,-020.00,+00.00,01.00,000.00,1.00 +0676,-020.00,+00.00,01.00,000.00,1.00 +0677,-020.00,+00.00,01.00,000.00,1.00 +0678,-020.00,+00.00,01.00,000.00,1.00 +0679,-020.00,+00.00,01.00,000.00,1.00 +0680,-020.00,+00.00,01.00,000.00,1.00 +0681,-020.00,+00.00,01.00,000.00,1.00 +0682,-020.00,+00.00,01.00,000.00,1.00 +0683,-020.00,+00.00,01.00,000.00,1.00 +0684,-020.00,+00.00,01.00,000.00,1.00 +0685,-020.00,+00.00,01.00,000.00,1.00 +0686,-020.00,+00.00,01.00,000.00,1.00 +0687,-020.00,+00.00,01.00,000.00,1.00 +0688,-020.00,+00.00,01.00,000.00,1.00 +0689,-020.00,+00.00,01.00,000.00,1.00 +0690,-020.00,+00.00,01.00,000.00,1.00 +0691,-020.00,+00.00,01.00,000.00,1.00 +0692,-020.00,+00.00,01.00,000.00,1.00 +0693,-020.00,+00.00,01.00,000.00,1.00 +0694,-020.00,+00.00,01.00,000.00,1.00 +0695,-020.00,+00.00,01.00,000.00,1.00 +0696,-020.00,+00.00,01.00,000.00,1.00 +0697,-020.00,+00.00,01.00,000.00,1.00 +0698,-020.00,+00.00,01.00,000.00,1.00 +0699,-020.00,+00.00,01.00,000.00,1.00 +0700,-020.00,+00.00,01.00,000.00,1.00 +0701,-020.00,+00.00,01.00,000.00,1.00 +0702,-020.00,+00.00,01.00,000.00,1.00 +0703,-020.00,+00.00,01.00,000.00,1.00 +0704,-020.00,+00.00,01.00,000.00,1.00 +0705,-020.00,+00.00,01.00,000.00,1.00 +0706,-020.00,+00.00,01.00,000.00,1.00 +0707,-020.00,+00.00,01.00,000.00,1.00 +0708,-020.00,+00.00,01.00,000.00,1.00 +0709,-020.00,+00.00,01.00,000.00,1.00 +0710,-020.00,+00.00,01.00,000.00,1.00 +0711,-020.00,+00.00,01.00,000.00,1.00 +0712,-020.00,+00.00,01.00,000.00,1.00 +0713,-020.00,+00.00,01.00,000.00,1.00 +0714,-020.00,+00.00,01.00,000.00,1.00 +0715,-020.00,+00.00,01.00,000.00,1.00 +0716,-020.00,+00.00,01.00,000.00,1.00 +0717,-020.00,+00.00,01.00,000.00,1.00 +0718,-020.00,+00.00,01.00,000.00,1.00 +0719,-020.00,+00.00,01.00,000.00,1.00 +0720,-020.00,+00.00,01.00,000.00,1.00 +0721,-020.00,+00.00,01.00,000.00,1.00 +0722,-020.00,+00.00,01.00,000.00,1.00 +0723,-020.00,+00.00,01.00,000.00,1.00 +0724,-020.00,+00.00,01.00,000.00,1.00 +0725,-020.00,+00.00,01.00,000.00,1.00 +0726,-020.00,+00.00,01.00,000.00,1.00 +0727,-020.00,+00.00,01.00,000.00,1.00 +0728,-020.00,+00.00,01.00,000.00,1.00 +0729,-020.00,+00.00,01.00,000.00,1.00 +0730,-020.00,+00.00,01.00,000.00,1.00 +0731,-020.00,+00.00,01.00,000.00,1.00 +0732,-020.00,+00.00,01.00,000.00,1.00 +0733,-020.00,+00.00,01.00,000.00,1.00 +0734,-020.00,+00.00,01.00,000.00,1.00 +0735,-020.00,+00.00,01.00,000.00,1.00 +0736,-020.00,+00.00,01.00,000.00,1.00 +0737,-020.00,+00.00,01.00,000.00,1.00 +0738,-020.00,+00.00,01.00,000.00,1.00 +0739,-020.00,+00.00,01.00,000.00,1.00 +0740,-020.00,+00.00,01.00,000.00,1.00 +0741,-020.00,+00.00,01.00,000.00,1.00 +0742,-020.00,+00.00,01.00,000.00,1.00 +0743,-020.00,+00.00,01.00,000.00,1.00 +0744,-020.00,+00.00,01.00,000.00,1.00 +0745,-020.00,+00.00,01.00,000.00,1.00 +0746,-020.00,+00.00,01.00,000.00,1.00 +0747,-020.00,+00.00,01.00,000.00,1.00 +0748,-020.00,+00.00,01.00,000.00,1.00 +0749,-020.00,+00.00,01.00,000.00,1.00 +0750,-020.00,+00.00,01.00,000.00,1.00 +0751,-020.00,+00.00,01.00,000.00,1.00 +0752,-020.00,+00.00,01.00,000.00,1.00 +0753,-020.00,+00.00,01.00,000.00,1.00 +0754,-020.00,+00.00,01.00,000.00,1.00 +0755,-020.00,+00.00,01.00,000.00,1.00 +0756,-020.00,+00.00,01.00,000.00,1.00 +0757,-020.00,+00.00,01.00,000.00,1.00 +0758,-020.00,+00.00,01.00,000.00,1.00 +0759,-020.00,+00.00,01.00,000.00,1.00 +0760,-020.00,+00.00,01.00,000.00,1.00 +0761,-020.00,+00.00,01.00,000.00,1.00 +0762,-020.00,+00.00,01.00,000.00,1.00 +0763,-020.00,+00.00,01.00,000.00,1.00 +0764,-020.00,+00.00,01.00,000.00,1.00 +0765,-020.00,+00.00,01.00,000.00,1.00 +0766,-020.00,+00.00,01.00,000.00,1.00 +0767,-020.00,+00.00,01.00,000.00,1.00 +0768,-020.00,+00.00,01.00,000.00,1.00 +0769,-020.00,+00.00,01.00,000.00,1.00 +0770,-020.00,+00.00,01.00,000.00,1.00 +0771,-020.00,+00.00,01.00,000.00,1.00 +0772,-020.00,+00.00,01.00,000.00,1.00 +0773,-020.00,+00.00,01.00,000.00,1.00 +0774,-020.00,+00.00,01.00,000.00,1.00 +0775,-020.00,+00.00,01.00,000.00,1.00 +0776,-020.00,+00.00,01.00,000.00,1.00 +0777,-020.00,+00.00,01.00,000.00,1.00 +0778,-020.00,+00.00,01.00,000.00,1.00 +0779,-020.00,+00.00,01.00,000.00,1.00 +0780,-020.00,+00.00,01.00,000.00,1.00 +0781,-020.00,+00.00,01.00,000.00,1.00 +0782,-020.00,+00.00,01.00,000.00,1.00 +0783,-020.00,+00.00,01.00,000.00,1.00 +0784,-020.00,+00.00,01.00,000.00,1.00 +0785,-020.00,+00.00,01.00,000.00,1.00 +0786,-020.00,+00.00,01.00,000.00,1.00 +0787,-020.00,+00.00,01.00,000.00,1.00 +0788,-020.00,+00.00,01.00,000.00,1.00 +0789,-020.00,+00.00,01.00,000.00,1.00 +0790,-020.00,+00.00,01.00,000.00,1.00 +0791,-020.00,+00.00,01.00,000.00,1.00 +0792,-020.00,+00.00,01.00,000.00,1.00 +0793,-020.00,+00.00,01.00,000.00,1.00 +0794,-020.00,+00.00,01.00,000.00,1.00 +0795,-020.00,+00.00,01.00,000.00,1.00 +0796,-020.00,+00.00,01.00,000.00,1.00 +0797,-020.00,+00.00,01.00,000.00,1.00 +0798,-020.00,+00.00,01.00,000.00,1.00 +0799,-020.00,+00.00,01.00,000.00,1.00 +0800,-020.00,+00.00,01.00,000.00,1.00 +0801,-020.00,+00.00,01.00,000.00,1.00 +0802,-020.00,+00.00,01.00,000.00,1.00 +0803,-020.00,+00.00,01.00,000.00,1.00 +0804,-020.00,+00.00,01.00,000.00,1.00 +0805,-020.00,+00.00,01.00,000.00,1.00 +0806,-020.00,+00.00,01.00,000.00,1.00 +0807,-020.00,+00.00,01.00,000.00,1.00 +0808,-020.00,+00.00,01.00,000.00,1.00 +0809,-020.00,+00.00,01.00,000.00,1.00 +0810,-020.00,+00.00,01.00,000.00,1.00 +0811,-020.00,+00.00,01.00,000.00,1.00 +0812,-020.00,+00.00,01.00,000.00,1.00 +0813,-020.00,+00.00,01.00,000.00,1.00 +0814,-020.00,+00.00,01.00,000.00,1.00 +0815,-020.00,+00.00,01.00,000.00,1.00 +0816,-020.00,+00.00,01.00,000.00,1.00 +0817,-020.00,+00.00,01.00,000.00,1.00 +0818,-020.00,+00.00,01.00,000.00,1.00 +0819,-020.00,+00.00,01.00,000.00,1.00 +0820,-020.00,+00.00,01.00,000.00,1.00 +0821,-020.00,+00.00,01.00,000.00,1.00 +0822,-020.00,+00.00,01.00,000.00,1.00 +0823,-020.00,+00.00,01.00,000.00,1.00 +0824,-020.00,+00.00,01.00,000.00,1.00 +0825,-020.00,+00.00,01.00,000.00,1.00 +0826,-020.00,+00.00,01.00,000.00,1.00 +0827,-020.00,+00.00,01.00,000.00,1.00 +0828,-020.00,+00.00,01.00,000.00,1.00 +0829,-020.00,+00.00,01.00,000.00,1.00 +0830,-020.00,+00.00,01.00,000.00,1.00 +0831,-020.00,+00.00,01.00,000.00,1.00 +0832,-020.00,+00.00,01.00,000.00,1.00 +0833,-020.00,+00.00,01.00,000.00,1.00 +0834,-020.00,+00.00,01.00,000.00,1.00 +0835,-020.00,+00.00,01.00,000.00,1.00 +0836,-020.00,+00.00,01.00,000.00,1.00 +0837,-020.00,+00.00,01.00,000.00,1.00 +0838,-020.00,+00.00,01.00,000.00,1.00 +0839,-020.00,+00.00,01.00,000.00,1.00 +0840,-020.00,+00.00,01.00,000.00,1.00 +0841,-020.00,+00.00,01.00,000.00,1.00 +0842,-020.00,+00.00,01.00,000.00,1.00 +0843,-020.00,+00.00,01.00,000.00,1.00 +0844,-020.00,+00.00,01.00,000.00,1.00 +0845,-020.00,+00.00,01.00,000.00,1.00 +0846,-020.00,+00.00,01.00,000.00,1.00 +0847,-020.00,+00.00,01.00,000.00,1.00 +0848,-020.00,+00.00,01.00,000.00,1.00 +0849,-020.00,+00.00,01.00,000.00,1.00 +0850,-020.00,+00.00,01.00,000.00,1.00 +0851,-020.00,+00.00,01.00,000.00,1.00 +0852,-020.00,+00.00,01.00,000.00,1.00 +0853,-020.00,+00.00,01.00,000.00,1.00 +0854,-020.00,+00.00,01.00,000.00,1.00 +0855,-020.00,+00.00,01.00,000.00,1.00 +0856,-020.00,+00.00,01.00,000.00,1.00 +0857,-020.00,+00.00,01.00,000.00,1.00 +0858,-020.00,+00.00,01.00,000.00,1.00 +0859,-020.00,+00.00,01.00,000.00,1.00 +0860,-020.00,+00.00,01.00,000.00,1.00 +0861,-020.00,+00.00,01.00,000.00,1.00 +0862,-020.00,+00.00,01.00,000.00,1.00 +0863,-020.00,+00.00,01.00,000.00,1.00 +0864,-020.00,+00.00,01.00,000.00,1.00 +0865,-020.00,+00.00,01.00,000.00,1.00 +0866,-020.00,+00.00,01.00,000.00,1.00 +0867,-020.00,+00.00,01.00,000.00,1.00 +0868,-020.00,+00.00,01.00,000.00,1.00 +0869,-020.00,+00.00,01.00,000.00,1.00 +0870,-020.00,+00.00,01.00,000.00,1.00 +0871,-020.00,+00.00,01.00,000.00,1.00 +0872,-020.00,+00.00,01.00,000.00,1.00 +0873,-020.00,+00.00,01.00,000.00,1.00 +0874,-020.00,+00.00,01.00,000.00,1.00 +0875,-020.00,+00.00,01.00,000.00,1.00 +0876,-020.00,+00.00,01.00,000.00,1.00 +0877,-020.00,+00.00,01.00,000.00,1.00 +0878,-020.00,+00.00,01.00,000.00,1.00 +0879,-020.00,+00.00,01.00,000.00,1.00 +0880,-020.00,+00.00,01.00,000.00,1.00 +0881,-020.00,+00.00,01.00,000.00,1.00 +0882,-020.00,+00.00,01.00,000.00,1.00 +0883,-020.00,+00.00,01.00,000.00,1.00 +0884,-020.00,+00.00,01.00,000.00,1.00 +0885,-020.00,+00.00,01.00,000.00,1.00 +0886,-020.00,+00.00,01.00,000.00,1.00 +0887,-020.00,+00.00,01.00,000.00,1.00 +0888,-020.00,+00.00,01.00,000.00,1.00 +0889,-020.00,+00.00,01.00,000.00,1.00 +0890,-020.00,+00.00,01.00,000.00,1.00 +0891,-020.00,+00.00,01.00,000.00,1.00 +0892,-020.00,+00.00,01.00,000.00,1.00 +0893,-020.00,+00.00,01.00,000.00,1.00 +0894,-020.00,+00.00,01.00,000.00,1.00 +0895,-020.00,+00.00,01.00,000.00,1.00 +0896,-020.00,+00.00,01.00,000.00,1.00 +0897,-020.00,+00.00,01.00,000.00,1.00 +0898,-020.00,+00.00,01.00,000.00,1.00 +0899,-020.00,+00.00,01.00,000.00,1.00 +0900,-020.00,+00.00,01.00,000.00,1.00 +0901,-020.00,+00.00,01.00,000.00,1.00 +0902,-020.00,+00.00,01.00,000.00,1.00 +0903,-020.00,+00.00,01.00,000.00,1.00 +0904,-020.00,+00.00,01.00,000.00,1.00 +0905,-020.00,+00.00,01.00,000.00,1.00 +0906,-020.00,+00.00,01.00,000.00,1.00 +0907,-020.00,+00.00,01.00,000.00,1.00 +0908,-020.00,+00.00,01.00,000.00,1.00 +0909,-020.00,+00.00,01.00,000.00,1.00 +0910,-020.00,+00.00,01.00,000.00,1.00 +0911,-020.00,+00.00,01.00,000.00,1.00 +0912,-020.00,+00.00,01.00,000.00,1.00 +0913,-020.00,+00.00,01.00,000.00,1.00 +0914,-020.00,+00.00,01.00,000.00,1.00 +0915,-020.00,+00.00,01.00,000.00,1.00 +0916,-020.00,+00.00,01.00,000.00,1.00 +0917,-020.00,+00.00,01.00,000.00,1.00 +0918,-020.00,+00.00,01.00,000.00,1.00 +0919,-020.00,+00.00,01.00,000.00,1.00 +0920,-020.00,+00.00,01.00,000.00,1.00 +0921,-020.00,+00.00,01.00,000.00,1.00 +0922,-020.00,+00.00,01.00,000.00,1.00 +0923,-020.00,+00.00,01.00,000.00,1.00 +0924,-020.00,+00.00,01.00,000.00,1.00 +0925,-020.00,+00.00,01.00,000.00,1.00 +0926,-020.00,+00.00,01.00,000.00,1.00 +0927,-020.00,+00.00,01.00,000.00,1.00 +0928,-020.00,+00.00,01.00,000.00,1.00 +0929,-020.00,+00.00,01.00,000.00,1.00 +0930,-020.00,+00.00,01.00,000.00,1.00 +0931,-020.00,+00.00,01.00,000.00,1.00 +0932,-020.00,+00.00,01.00,000.00,1.00 +0933,-020.00,+00.00,01.00,000.00,1.00 +0934,-020.00,+00.00,01.00,000.00,1.00 +0935,-020.00,+00.00,01.00,000.00,1.00 +0936,-020.00,+00.00,01.00,000.00,1.00 +0937,-020.00,+00.00,01.00,000.00,1.00 +0938,-020.00,+00.00,01.00,000.00,1.00 +0939,-020.00,+00.00,01.00,000.00,1.00 +0940,-020.00,+00.00,01.00,000.00,1.00 +0941,-020.00,+00.00,01.00,000.00,1.00 +0942,-020.00,+00.00,01.00,000.00,1.00 +0943,-020.00,+00.00,01.00,000.00,1.00 +0944,-020.00,+00.00,01.00,000.00,1.00 +0945,-020.00,+00.00,01.00,000.00,1.00 +0946,-020.00,+00.00,01.00,000.00,1.00 +0947,-020.00,+00.00,01.00,000.00,1.00 +0948,-020.00,+00.00,01.00,000.00,1.00 +0949,-020.00,+00.00,01.00,000.00,1.00 +0950,-020.00,+00.00,01.00,000.00,1.00 +0951,-020.00,+00.00,01.00,000.00,1.00 +0952,-020.00,+00.00,01.00,000.00,1.00 +0953,-020.00,+00.00,01.00,000.00,1.00 +0954,-020.00,+00.00,01.00,000.00,1.00 +0955,-020.00,+00.00,01.00,000.00,1.00 +0956,-020.00,+00.00,01.00,000.00,1.00 +0957,-020.00,+00.00,01.00,000.00,1.00 +0958,-020.00,+00.00,01.00,000.00,1.00 +0959,-020.00,+00.00,01.00,000.00,1.00 +0960,-020.00,+00.00,01.00,000.00,1.00 +0961,-020.00,+00.00,01.00,000.00,1.00 +0962,-020.00,+00.00,01.00,000.00,1.00 +0963,-020.00,+00.00,01.00,000.00,1.00 +0964,-020.00,+00.00,01.00,000.00,1.00 +0965,-020.00,+00.00,01.00,000.00,1.00 +0966,-020.00,+00.00,01.00,000.00,1.00 +0967,-020.00,+00.00,01.00,000.00,1.00 +0968,-020.00,+00.00,01.00,000.00,1.00 +0969,-020.00,+00.00,01.00,000.00,1.00 +0970,-020.00,+00.00,01.00,000.00,1.00 +0971,-020.00,+00.00,01.00,000.00,1.00 +0972,-020.00,+00.00,01.00,000.00,1.00 +0973,-020.00,+00.00,01.00,000.00,1.00 +0974,-020.00,+00.00,01.00,000.00,1.00 +0975,-020.00,+00.00,01.00,000.00,1.00 +0976,-020.00,+00.00,01.00,000.00,1.00 +0977,-020.00,+00.00,01.00,000.00,1.00 +0978,-020.00,+00.00,01.00,000.00,1.00 +0979,-020.00,+00.00,01.00,000.00,1.00 +0980,-020.00,+00.00,01.00,000.00,1.00 +0981,-020.00,+00.00,01.00,000.00,1.00 +0982,-020.00,+00.00,01.00,000.00,1.00 +0983,-020.00,+00.00,01.00,000.00,1.00 +0984,-020.00,+00.00,01.00,000.00,1.00 +0985,-020.00,+00.00,01.00,000.00,1.00 +0986,-020.00,+00.00,01.00,000.00,1.00 +0987,-020.00,+00.00,01.00,000.00,1.00 +0988,-020.00,+00.00,01.00,000.00,1.00 +0989,-020.00,+00.00,01.00,000.00,1.00 +0990,-020.00,+00.00,01.00,000.00,1.00 +0991,-020.00,+00.00,01.00,000.00,1.00 +0992,-020.00,+00.00,01.00,000.00,1.00 +0993,-020.00,+00.00,01.00,000.00,1.00 +0994,-020.00,+00.00,01.00,000.00,1.00 +0995,-020.00,+00.00,01.00,000.00,1.00 +0996,-020.00,+00.00,01.00,000.00,1.00 +0997,-020.00,+00.00,01.00,000.00,1.00 +0998,-020.00,+00.00,01.00,000.00,1.00 +0999,-020.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t06_ch3.csv b/scripts/td_object_renderer/metadata/csv/t06_ch3.csv new file mode 100644 index 0000000000..9d7f23dbd0 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t06_ch3.csv @@ -0,0 +1,1000 @@ +0000,+030.00,+00.00,01.00,000.00,1.00 +0001,+030.00,+00.00,01.00,000.00,1.00 +0002,+030.00,+00.00,01.00,000.00,1.00 +0003,+030.00,+00.00,01.00,000.00,1.00 +0004,+030.00,+00.00,01.00,000.00,1.00 +0005,+030.00,+00.00,01.00,000.00,1.00 +0006,+030.00,+00.00,01.00,000.00,1.00 +0007,+030.00,+00.00,01.00,000.00,1.00 +0008,+030.00,+00.00,01.00,000.00,1.00 +0009,+030.00,+00.00,01.00,000.00,1.00 +0010,+030.00,+00.00,01.00,000.00,1.00 +0011,+030.00,+00.00,01.00,000.00,1.00 +0012,+030.00,+00.00,01.00,000.00,1.00 +0013,+030.00,+00.00,01.00,000.00,1.00 +0014,+030.00,+00.00,01.00,000.00,1.00 +0015,+030.00,+00.00,01.00,000.00,1.00 +0016,+030.00,+00.00,01.00,000.00,1.00 +0017,+030.00,+00.00,01.00,000.00,1.00 +0018,+030.00,+00.00,01.00,000.00,1.00 +0019,+030.00,+00.00,01.00,000.00,1.00 +0020,+030.00,+00.00,01.00,000.00,1.00 +0021,+030.00,+00.00,01.00,000.00,1.00 +0022,+030.00,+00.00,01.00,000.00,1.00 +0023,+030.00,+00.00,01.00,000.00,1.00 +0024,+030.00,+00.00,01.00,000.00,1.00 +0025,+030.00,+00.00,01.00,000.00,1.00 +0026,+030.00,+00.00,01.00,000.00,1.00 +0027,+030.00,+00.00,01.00,000.00,1.00 +0028,+030.00,+00.00,01.00,000.00,1.00 +0029,+030.00,+00.00,01.00,000.00,1.00 +0030,+030.00,+00.00,01.00,000.00,1.00 +0031,+030.00,+00.00,01.00,000.00,1.00 +0032,+030.00,+00.00,01.00,000.00,1.00 +0033,+030.00,+00.00,01.00,000.00,1.00 +0034,+030.00,+00.00,01.00,000.00,1.00 +0035,+030.00,+00.00,01.00,000.00,1.00 +0036,+030.00,+00.00,01.00,000.00,1.00 +0037,+030.00,+00.00,01.00,000.00,1.00 +0038,+030.00,+00.00,01.00,000.00,1.00 +0039,+030.00,+00.00,01.00,000.00,1.00 +0040,+030.00,+00.00,01.00,000.00,1.00 +0041,+030.00,+00.00,01.00,000.00,1.00 +0042,+030.00,+00.00,01.00,000.00,1.00 +0043,+030.00,+00.00,01.00,000.00,1.00 +0044,+030.00,+00.00,01.00,000.00,1.00 +0045,+030.00,+00.00,01.00,000.00,1.00 +0046,+030.00,+00.00,01.00,000.00,1.00 +0047,+030.00,+00.00,01.00,000.00,1.00 +0048,+030.00,+00.00,01.00,000.00,1.00 +0049,+030.00,+00.00,01.00,000.00,1.00 +0050,+030.00,+00.00,01.00,000.00,1.00 +0051,+030.00,+00.00,01.00,000.00,1.00 +0052,+030.00,+00.00,01.00,000.00,1.00 +0053,+030.00,+00.00,01.00,000.00,1.00 +0054,+030.00,+00.00,01.00,000.00,1.00 +0055,+030.00,+00.00,01.00,000.00,1.00 +0056,+030.00,+00.00,01.00,000.00,1.00 +0057,+030.00,+00.00,01.00,000.00,1.00 +0058,+030.00,+00.00,01.00,000.00,1.00 +0059,+030.00,+00.00,01.00,000.00,1.00 +0060,+030.00,+00.00,01.00,000.00,1.00 +0061,+030.00,+00.00,01.00,000.00,1.00 +0062,+030.00,+00.00,01.00,000.00,1.00 +0063,+030.00,+00.00,01.00,000.00,1.00 +0064,+030.00,+00.00,01.00,000.00,1.00 +0065,+030.00,+00.00,01.00,000.00,1.00 +0066,+030.00,+00.00,01.00,000.00,1.00 +0067,+030.00,+00.00,01.00,000.00,1.00 +0068,+030.00,+00.00,01.00,000.00,1.00 +0069,+030.00,+00.00,01.00,000.00,1.00 +0070,+030.00,+00.00,01.00,000.00,1.00 +0071,+030.00,+00.00,01.00,000.00,1.00 +0072,+030.00,+00.00,01.00,000.00,1.00 +0073,+030.00,+00.00,01.00,000.00,1.00 +0074,+030.00,+00.00,01.00,000.00,1.00 +0075,+030.00,+00.00,01.00,000.00,1.00 +0076,+030.00,+00.00,01.00,000.00,1.00 +0077,+030.00,+00.00,01.00,000.00,1.00 +0078,+030.00,+00.00,01.00,000.00,1.00 +0079,+030.00,+00.00,01.00,000.00,1.00 +0080,+030.00,+00.00,01.00,000.00,1.00 +0081,+030.00,+00.00,01.00,000.00,1.00 +0082,+030.00,+00.00,01.00,000.00,1.00 +0083,+030.00,+00.00,01.00,000.00,1.00 +0084,+030.00,+00.00,01.00,000.00,1.00 +0085,+030.00,+00.00,01.00,000.00,1.00 +0086,+030.00,+00.00,01.00,000.00,1.00 +0087,+030.00,+00.00,01.00,000.00,1.00 +0088,+030.00,+00.00,01.00,000.00,1.00 +0089,+030.00,+00.00,01.00,000.00,1.00 +0090,+030.00,+00.00,01.00,000.00,1.00 +0091,+030.00,+00.00,01.00,000.00,1.00 +0092,+030.00,+00.00,01.00,000.00,1.00 +0093,+030.00,+00.00,01.00,000.00,1.00 +0094,+030.00,+00.00,01.00,000.00,1.00 +0095,+030.00,+00.00,01.00,000.00,1.00 +0096,+030.00,+00.00,01.00,000.00,1.00 +0097,+030.00,+00.00,01.00,000.00,1.00 +0098,+030.00,+00.00,01.00,000.00,1.00 +0099,+030.00,+00.00,01.00,000.00,1.00 +0100,+030.00,+00.00,01.00,000.00,1.00 +0101,+030.00,+00.00,01.00,000.00,1.00 +0102,+030.00,+00.00,01.00,000.00,1.00 +0103,+030.00,+00.00,01.00,000.00,1.00 +0104,+030.00,+00.00,01.00,000.00,1.00 +0105,+030.00,+00.00,01.00,000.00,1.00 +0106,+030.00,+00.00,01.00,000.00,1.00 +0107,+030.00,+00.00,01.00,000.00,1.00 +0108,+030.00,+00.00,01.00,000.00,1.00 +0109,+030.00,+00.00,01.00,000.00,1.00 +0110,+030.00,+00.00,01.00,000.00,1.00 +0111,+030.00,+00.00,01.00,000.00,1.00 +0112,+030.00,+00.00,01.00,000.00,1.00 +0113,+030.00,+00.00,01.00,000.00,1.00 +0114,+030.00,+00.00,01.00,000.00,1.00 +0115,+030.00,+00.00,01.00,000.00,1.00 +0116,+030.00,+00.00,01.00,000.00,1.00 +0117,+030.00,+00.00,01.00,000.00,1.00 +0118,+030.00,+00.00,01.00,000.00,1.00 +0119,+030.00,+00.00,01.00,000.00,1.00 +0120,+030.00,+00.00,01.00,000.00,1.00 +0121,+030.00,+00.00,01.00,000.00,1.00 +0122,+030.00,+00.00,01.00,000.00,1.00 +0123,+030.00,+00.00,01.00,000.00,1.00 +0124,+030.00,+00.00,01.00,000.00,1.00 +0125,+030.00,+00.00,01.00,000.00,1.00 +0126,+030.00,+00.00,01.00,000.00,1.00 +0127,+030.00,+00.00,01.00,000.00,1.00 +0128,+030.00,+00.00,01.00,000.00,1.00 +0129,+030.00,+00.00,01.00,000.00,1.00 +0130,+030.00,+00.00,01.00,000.00,1.00 +0131,+030.00,+00.00,01.00,000.00,1.00 +0132,+030.00,+00.00,01.00,000.00,1.00 +0133,+030.00,+00.00,01.00,000.00,1.00 +0134,+030.00,+00.00,01.00,000.00,1.00 +0135,+030.00,+00.00,01.00,000.00,1.00 +0136,+030.00,+00.00,01.00,000.00,1.00 +0137,+030.00,+00.00,01.00,000.00,1.00 +0138,+030.00,+00.00,01.00,000.00,1.00 +0139,+030.00,+00.00,01.00,000.00,1.00 +0140,+030.00,+00.00,01.00,000.00,1.00 +0141,+030.00,+00.00,01.00,000.00,1.00 +0142,+030.00,+00.00,01.00,000.00,1.00 +0143,+030.00,+00.00,01.00,000.00,1.00 +0144,+030.00,+00.00,01.00,000.00,1.00 +0145,+030.00,+00.00,01.00,000.00,1.00 +0146,+030.00,+00.00,01.00,000.00,1.00 +0147,+030.00,+00.00,01.00,000.00,1.00 +0148,+030.00,+00.00,01.00,000.00,1.00 +0149,+030.00,+00.00,01.00,000.00,1.00 +0150,+030.00,+00.00,01.00,000.00,1.00 +0151,+030.00,+00.00,01.00,000.00,1.00 +0152,+030.00,+00.00,01.00,000.00,1.00 +0153,+030.00,+00.00,01.00,000.00,1.00 +0154,+030.00,+00.00,01.00,000.00,1.00 +0155,+030.00,+00.00,01.00,000.00,1.00 +0156,+030.00,+00.00,01.00,000.00,1.00 +0157,+030.00,+00.00,01.00,000.00,1.00 +0158,+030.00,+00.00,01.00,000.00,1.00 +0159,+030.00,+00.00,01.00,000.00,1.00 +0160,+030.00,+00.00,01.00,000.00,1.00 +0161,+030.00,+00.00,01.00,000.00,1.00 +0162,+030.00,+00.00,01.00,000.00,1.00 +0163,+030.00,+00.00,01.00,000.00,1.00 +0164,+030.00,+00.00,01.00,000.00,1.00 +0165,+030.00,+00.00,01.00,000.00,1.00 +0166,+030.00,+00.00,01.00,000.00,1.00 +0167,+030.00,+00.00,01.00,000.00,1.00 +0168,+030.00,+00.00,01.00,000.00,1.00 +0169,+030.00,+00.00,01.00,000.00,1.00 +0170,+030.00,+00.00,01.00,000.00,1.00 +0171,+030.00,+00.00,01.00,000.00,1.00 +0172,+030.00,+00.00,01.00,000.00,1.00 +0173,+030.00,+00.00,01.00,000.00,1.00 +0174,+030.00,+00.00,01.00,000.00,1.00 +0175,+030.00,+00.00,01.00,000.00,1.00 +0176,+030.00,+00.00,01.00,000.00,1.00 +0177,+030.00,+00.00,01.00,000.00,1.00 +0178,+030.00,+00.00,01.00,000.00,1.00 +0179,+030.00,+00.00,01.00,000.00,1.00 +0180,+030.00,+00.00,01.00,000.00,1.00 +0181,+030.00,+00.00,01.00,000.00,1.00 +0182,+030.00,+00.00,01.00,000.00,1.00 +0183,+030.00,+00.00,01.00,000.00,1.00 +0184,+030.00,+00.00,01.00,000.00,1.00 +0185,+030.00,+00.00,01.00,000.00,1.00 +0186,+030.00,+00.00,01.00,000.00,1.00 +0187,+030.00,+00.00,01.00,000.00,1.00 +0188,+030.00,+00.00,01.00,000.00,1.00 +0189,+030.00,+00.00,01.00,000.00,1.00 +0190,+030.00,+00.00,01.00,000.00,1.00 +0191,+030.00,+00.00,01.00,000.00,1.00 +0192,+030.00,+00.00,01.00,000.00,1.00 +0193,+030.00,+00.00,01.00,000.00,1.00 +0194,+030.00,+00.00,01.00,000.00,1.00 +0195,+030.00,+00.00,01.00,000.00,1.00 +0196,+030.00,+00.00,01.00,000.00,1.00 +0197,+030.00,+00.00,01.00,000.00,1.00 +0198,+030.00,+00.00,01.00,000.00,1.00 +0199,+030.00,+00.00,01.00,000.00,1.00 +0200,+030.00,+00.00,01.00,000.00,1.00 +0201,+030.00,+00.00,01.00,000.00,1.00 +0202,+030.00,+00.00,01.00,000.00,1.00 +0203,+030.00,+00.00,01.00,000.00,1.00 +0204,+030.00,+00.00,01.00,000.00,1.00 +0205,+030.00,+00.00,01.00,000.00,1.00 +0206,+030.00,+00.00,01.00,000.00,1.00 +0207,+030.00,+00.00,01.00,000.00,1.00 +0208,+030.00,+00.00,01.00,000.00,1.00 +0209,+030.00,+00.00,01.00,000.00,1.00 +0210,+030.00,+00.00,01.00,000.00,1.00 +0211,+030.00,+00.00,01.00,000.00,1.00 +0212,+030.00,+00.00,01.00,000.00,1.00 +0213,+030.00,+00.00,01.00,000.00,1.00 +0214,+030.00,+00.00,01.00,000.00,1.00 +0215,+030.00,+00.00,01.00,000.00,1.00 +0216,+030.00,+00.00,01.00,000.00,1.00 +0217,+030.00,+00.00,01.00,000.00,1.00 +0218,+030.00,+00.00,01.00,000.00,1.00 +0219,+030.00,+00.00,01.00,000.00,1.00 +0220,+030.00,+00.00,01.00,000.00,1.00 +0221,+030.00,+00.00,01.00,000.00,1.00 +0222,+030.00,+00.00,01.00,000.00,1.00 +0223,+030.00,+00.00,01.00,000.00,1.00 +0224,+030.00,+00.00,01.00,000.00,1.00 +0225,+030.00,+00.00,01.00,000.00,1.00 +0226,+030.00,+00.00,01.00,000.00,1.00 +0227,+030.00,+00.00,01.00,000.00,1.00 +0228,+030.00,+00.00,01.00,000.00,1.00 +0229,+030.00,+00.00,01.00,000.00,1.00 +0230,+030.00,+00.00,01.00,000.00,1.00 +0231,+030.00,+00.00,01.00,000.00,1.00 +0232,+030.00,+00.00,01.00,000.00,1.00 +0233,+030.00,+00.00,01.00,000.00,1.00 +0234,+030.00,+00.00,01.00,000.00,1.00 +0235,+030.00,+00.00,01.00,000.00,1.00 +0236,+030.00,+00.00,01.00,000.00,1.00 +0237,+030.00,+00.00,01.00,000.00,1.00 +0238,+030.00,+00.00,01.00,000.00,1.00 +0239,+030.00,+00.00,01.00,000.00,1.00 +0240,+030.00,+00.00,01.00,000.00,1.00 +0241,+030.00,+00.00,01.00,000.00,1.00 +0242,+030.00,+00.00,01.00,000.00,1.00 +0243,+030.00,+00.00,01.00,000.00,1.00 +0244,+030.00,+00.00,01.00,000.00,1.00 +0245,+030.00,+00.00,01.00,000.00,1.00 +0246,+030.00,+00.00,01.00,000.00,1.00 +0247,+030.00,+00.00,01.00,000.00,1.00 +0248,+030.00,+00.00,01.00,000.00,1.00 +0249,+030.00,+00.00,01.00,000.00,1.00 +0250,+030.00,+00.00,01.00,000.00,1.00 +0251,+030.00,+00.00,01.00,000.00,1.00 +0252,+030.00,+00.00,01.00,000.00,1.00 +0253,+030.00,+00.00,01.00,000.00,1.00 +0254,+030.00,+00.00,01.00,000.00,1.00 +0255,+030.00,+00.00,01.00,000.00,1.00 +0256,+030.00,+00.00,01.00,000.00,1.00 +0257,+030.00,+00.00,01.00,000.00,1.00 +0258,+030.00,+00.00,01.00,000.00,1.00 +0259,+030.00,+00.00,01.00,000.00,1.00 +0260,+030.00,+00.00,01.00,000.00,1.00 +0261,+030.00,+00.00,01.00,000.00,1.00 +0262,+030.00,+00.00,01.00,000.00,1.00 +0263,+030.00,+00.00,01.00,000.00,1.00 +0264,+030.00,+00.00,01.00,000.00,1.00 +0265,+030.00,+00.00,01.00,000.00,1.00 +0266,+030.00,+00.00,01.00,000.00,1.00 +0267,+030.00,+00.00,01.00,000.00,1.00 +0268,+030.00,+00.00,01.00,000.00,1.00 +0269,+030.00,+00.00,01.00,000.00,1.00 +0270,+030.00,+00.00,01.00,000.00,1.00 +0271,+030.00,+00.00,01.00,000.00,1.00 +0272,+030.00,+00.00,01.00,000.00,1.00 +0273,+030.00,+00.00,01.00,000.00,1.00 +0274,+030.00,+00.00,01.00,000.00,1.00 +0275,+030.00,+00.00,01.00,000.00,1.00 +0276,+030.00,+00.00,01.00,000.00,1.00 +0277,+030.00,+00.00,01.00,000.00,1.00 +0278,+030.00,+00.00,01.00,000.00,1.00 +0279,+030.00,+00.00,01.00,000.00,1.00 +0280,+030.00,+00.00,01.00,000.00,1.00 +0281,+030.00,+00.00,01.00,000.00,1.00 +0282,+030.00,+00.00,01.00,000.00,1.00 +0283,+030.00,+00.00,01.00,000.00,1.00 +0284,+030.00,+00.00,01.00,000.00,1.00 +0285,+030.00,+00.00,01.00,000.00,1.00 +0286,+030.00,+00.00,01.00,000.00,1.00 +0287,+030.00,+00.00,01.00,000.00,1.00 +0288,+030.00,+00.00,01.00,000.00,1.00 +0289,+030.00,+00.00,01.00,000.00,1.00 +0290,+030.00,+00.00,01.00,000.00,1.00 +0291,+030.00,+00.00,01.00,000.00,1.00 +0292,+030.00,+00.00,01.00,000.00,1.00 +0293,+030.00,+00.00,01.00,000.00,1.00 +0294,+030.00,+00.00,01.00,000.00,1.00 +0295,+030.00,+00.00,01.00,000.00,1.00 +0296,+030.00,+00.00,01.00,000.00,1.00 +0297,+030.00,+00.00,01.00,000.00,1.00 +0298,+030.00,+00.00,01.00,000.00,1.00 +0299,+030.00,+00.00,01.00,000.00,1.00 +0300,+030.00,+00.00,01.00,000.00,1.00 +0301,+030.00,+00.00,01.00,000.00,1.00 +0302,+030.00,+00.00,01.00,000.00,1.00 +0303,+030.00,+00.00,01.00,000.00,1.00 +0304,+030.00,+00.00,01.00,000.00,1.00 +0305,+030.00,+00.00,01.00,000.00,1.00 +0306,+030.00,+00.00,01.00,000.00,1.00 +0307,+030.00,+00.00,01.00,000.00,1.00 +0308,+030.00,+00.00,01.00,000.00,1.00 +0309,+030.00,+00.00,01.00,000.00,1.00 +0310,+030.00,+00.00,01.00,000.00,1.00 +0311,+030.00,+00.00,01.00,000.00,1.00 +0312,+030.00,+00.00,01.00,000.00,1.00 +0313,+030.00,+00.00,01.00,000.00,1.00 +0314,+030.00,+00.00,01.00,000.00,1.00 +0315,+030.00,+00.00,01.00,000.00,1.00 +0316,+030.00,+00.00,01.00,000.00,1.00 +0317,+030.00,+00.00,01.00,000.00,1.00 +0318,+030.00,+00.00,01.00,000.00,1.00 +0319,+030.00,+00.00,01.00,000.00,1.00 +0320,+030.00,+00.00,01.00,000.00,1.00 +0321,+030.00,+00.00,01.00,000.00,1.00 +0322,+030.00,+00.00,01.00,000.00,1.00 +0323,+030.00,+00.00,01.00,000.00,1.00 +0324,+030.00,+00.00,01.00,000.00,1.00 +0325,+030.00,+00.00,01.00,000.00,1.00 +0326,+030.00,+00.00,01.00,000.00,1.00 +0327,+030.00,+00.00,01.00,000.00,1.00 +0328,+030.00,+00.00,01.00,000.00,1.00 +0329,+030.00,+00.00,01.00,000.00,1.00 +0330,+030.00,+00.00,01.00,000.00,1.00 +0331,+030.00,+00.00,01.00,000.00,1.00 +0332,+030.00,+00.00,01.00,000.00,1.00 +0333,+030.00,+00.00,01.00,000.00,1.00 +0334,+030.00,+00.00,01.00,000.00,1.00 +0335,+030.00,+00.00,01.00,000.00,1.00 +0336,+030.00,+00.00,01.00,000.00,1.00 +0337,+030.00,+00.00,01.00,000.00,1.00 +0338,+030.00,+00.00,01.00,000.00,1.00 +0339,+030.00,+00.00,01.00,000.00,1.00 +0340,+030.00,+00.00,01.00,000.00,1.00 +0341,+030.00,+00.00,01.00,000.00,1.00 +0342,+030.00,+00.00,01.00,000.00,1.00 +0343,+030.00,+00.00,01.00,000.00,1.00 +0344,+030.00,+00.00,01.00,000.00,1.00 +0345,+030.00,+00.00,01.00,000.00,1.00 +0346,+030.00,+00.00,01.00,000.00,1.00 +0347,+030.00,+00.00,01.00,000.00,1.00 +0348,+030.00,+00.00,01.00,000.00,1.00 +0349,+030.00,+00.00,01.00,000.00,1.00 +0350,+030.00,+00.00,01.00,000.00,1.00 +0351,+030.00,+00.00,01.00,000.00,1.00 +0352,+030.00,+00.00,01.00,000.00,1.00 +0353,+030.00,+00.00,01.00,000.00,1.00 +0354,+030.00,+00.00,01.00,000.00,1.00 +0355,+030.00,+00.00,01.00,000.00,1.00 +0356,+030.00,+00.00,01.00,000.00,1.00 +0357,+030.00,+00.00,01.00,000.00,1.00 +0358,+030.00,+00.00,01.00,000.00,1.00 +0359,+030.00,+00.00,01.00,000.00,1.00 +0360,+030.00,+00.00,01.00,000.00,1.00 +0361,+030.00,+00.00,01.00,000.00,1.00 +0362,+030.00,+00.00,01.00,000.00,1.00 +0363,+030.00,+00.00,01.00,000.00,1.00 +0364,+030.00,+00.00,01.00,000.00,1.00 +0365,+030.00,+00.00,01.00,000.00,1.00 +0366,+030.00,+00.00,01.00,000.00,1.00 +0367,+030.00,+00.00,01.00,000.00,1.00 +0368,+030.00,+00.00,01.00,000.00,1.00 +0369,+030.00,+00.00,01.00,000.00,1.00 +0370,+030.00,+00.00,01.00,000.00,1.00 +0371,+030.00,+00.00,01.00,000.00,1.00 +0372,+030.00,+00.00,01.00,000.00,1.00 +0373,+030.00,+00.00,01.00,000.00,1.00 +0374,+030.00,+00.00,01.00,000.00,1.00 +0375,+030.00,+00.00,01.00,000.00,1.00 +0376,+030.00,+00.00,01.00,000.00,1.00 +0377,+030.00,+00.00,01.00,000.00,1.00 +0378,+030.00,+00.00,01.00,000.00,1.00 +0379,+030.00,+00.00,01.00,000.00,1.00 +0380,+030.00,+00.00,01.00,000.00,1.00 +0381,+030.00,+00.00,01.00,000.00,1.00 +0382,+030.00,+00.00,01.00,000.00,1.00 +0383,+030.00,+00.00,01.00,000.00,1.00 +0384,+030.00,+00.00,01.00,000.00,1.00 +0385,+030.00,+00.00,01.00,000.00,1.00 +0386,+030.00,+00.00,01.00,000.00,1.00 +0387,+030.00,+00.00,01.00,000.00,1.00 +0388,+030.00,+00.00,01.00,000.00,1.00 +0389,+030.00,+00.00,01.00,000.00,1.00 +0390,+030.00,+00.00,01.00,000.00,1.00 +0391,+030.00,+00.00,01.00,000.00,1.00 +0392,+030.00,+00.00,01.00,000.00,1.00 +0393,+030.00,+00.00,01.00,000.00,1.00 +0394,+030.00,+00.00,01.00,000.00,1.00 +0395,+030.00,+00.00,01.00,000.00,1.00 +0396,+030.00,+00.00,01.00,000.00,1.00 +0397,+030.00,+00.00,01.00,000.00,1.00 +0398,+030.00,+00.00,01.00,000.00,1.00 +0399,+030.00,+00.00,01.00,000.00,1.00 +0400,+030.00,+00.00,01.00,000.00,1.00 +0401,+030.00,+00.00,01.00,000.00,1.00 +0402,+030.00,+00.00,01.00,000.00,1.00 +0403,+030.00,+00.00,01.00,000.00,1.00 +0404,+030.00,+00.00,01.00,000.00,1.00 +0405,+030.00,+00.00,01.00,000.00,1.00 +0406,+030.00,+00.00,01.00,000.00,1.00 +0407,+030.00,+00.00,01.00,000.00,1.00 +0408,+030.00,+00.00,01.00,000.00,1.00 +0409,+030.00,+00.00,01.00,000.00,1.00 +0410,+030.00,+00.00,01.00,000.00,1.00 +0411,+030.00,+00.00,01.00,000.00,1.00 +0412,+030.00,+00.00,01.00,000.00,1.00 +0413,+030.00,+00.00,01.00,000.00,1.00 +0414,+030.00,+00.00,01.00,000.00,1.00 +0415,+030.00,+00.00,01.00,000.00,1.00 +0416,+030.00,+00.00,01.00,000.00,1.00 +0417,+030.00,+00.00,01.00,000.00,1.00 +0418,+030.00,+00.00,01.00,000.00,1.00 +0419,+030.00,+00.00,01.00,000.00,1.00 +0420,+030.00,+00.00,01.00,000.00,1.00 +0421,+030.00,+00.00,01.00,000.00,1.00 +0422,+030.00,+00.00,01.00,000.00,1.00 +0423,+030.00,+00.00,01.00,000.00,1.00 +0424,+030.00,+00.00,01.00,000.00,1.00 +0425,+030.00,+00.00,01.00,000.00,1.00 +0426,+030.00,+00.00,01.00,000.00,1.00 +0427,+030.00,+00.00,01.00,000.00,1.00 +0428,+030.00,+00.00,01.00,000.00,1.00 +0429,+030.00,+00.00,01.00,000.00,1.00 +0430,+030.00,+00.00,01.00,000.00,1.00 +0431,+030.00,+00.00,01.00,000.00,1.00 +0432,+030.00,+00.00,01.00,000.00,1.00 +0433,+030.00,+00.00,01.00,000.00,1.00 +0434,+030.00,+00.00,01.00,000.00,1.00 +0435,+030.00,+00.00,01.00,000.00,1.00 +0436,+030.00,+00.00,01.00,000.00,1.00 +0437,+030.00,+00.00,01.00,000.00,1.00 +0438,+030.00,+00.00,01.00,000.00,1.00 +0439,+030.00,+00.00,01.00,000.00,1.00 +0440,+030.00,+00.00,01.00,000.00,1.00 +0441,+030.00,+00.00,01.00,000.00,1.00 +0442,+030.00,+00.00,01.00,000.00,1.00 +0443,+030.00,+00.00,01.00,000.00,1.00 +0444,+030.00,+00.00,01.00,000.00,1.00 +0445,+030.00,+00.00,01.00,000.00,1.00 +0446,+030.00,+00.00,01.00,000.00,1.00 +0447,+030.00,+00.00,01.00,000.00,1.00 +0448,+030.00,+00.00,01.00,000.00,1.00 +0449,+030.00,+00.00,01.00,000.00,1.00 +0450,+030.00,+00.00,01.00,000.00,1.00 +0451,+030.00,+00.00,01.00,000.00,1.00 +0452,+030.00,+00.00,01.00,000.00,1.00 +0453,+030.00,+00.00,01.00,000.00,1.00 +0454,+030.00,+00.00,01.00,000.00,1.00 +0455,+030.00,+00.00,01.00,000.00,1.00 +0456,+030.00,+00.00,01.00,000.00,1.00 +0457,+030.00,+00.00,01.00,000.00,1.00 +0458,+030.00,+00.00,01.00,000.00,1.00 +0459,+030.00,+00.00,01.00,000.00,1.00 +0460,+030.00,+00.00,01.00,000.00,1.00 +0461,+030.00,+00.00,01.00,000.00,1.00 +0462,+030.00,+00.00,01.00,000.00,1.00 +0463,+030.00,+00.00,01.00,000.00,1.00 +0464,+030.00,+00.00,01.00,000.00,1.00 +0465,+030.00,+00.00,01.00,000.00,1.00 +0466,+030.00,+00.00,01.00,000.00,1.00 +0467,+030.00,+00.00,01.00,000.00,1.00 +0468,+030.00,+00.00,01.00,000.00,1.00 +0469,+030.00,+00.00,01.00,000.00,1.00 +0470,+030.00,+00.00,01.00,000.00,1.00 +0471,+030.00,+00.00,01.00,000.00,1.00 +0472,+030.00,+00.00,01.00,000.00,1.00 +0473,+030.00,+00.00,01.00,000.00,1.00 +0474,+030.00,+00.00,01.00,000.00,1.00 +0475,+030.00,+00.00,01.00,000.00,1.00 +0476,+030.00,+00.00,01.00,000.00,1.00 +0477,+030.00,+00.00,01.00,000.00,1.00 +0478,+030.00,+00.00,01.00,000.00,1.00 +0479,+030.00,+00.00,01.00,000.00,1.00 +0480,+030.00,+00.00,01.00,000.00,1.00 +0481,+030.00,+00.00,01.00,000.00,1.00 +0482,+030.00,+00.00,01.00,000.00,1.00 +0483,+030.00,+00.00,01.00,000.00,1.00 +0484,+030.00,+00.00,01.00,000.00,1.00 +0485,+030.00,+00.00,01.00,000.00,1.00 +0486,+030.00,+00.00,01.00,000.00,1.00 +0487,+030.00,+00.00,01.00,000.00,1.00 +0488,+030.00,+00.00,01.00,000.00,1.00 +0489,+030.00,+00.00,01.00,000.00,1.00 +0490,+030.00,+00.00,01.00,000.00,1.00 +0491,+030.00,+00.00,01.00,000.00,1.00 +0492,+030.00,+00.00,01.00,000.00,1.00 +0493,+030.00,+00.00,01.00,000.00,1.00 +0494,+030.00,+00.00,01.00,000.00,1.00 +0495,+030.00,+00.00,01.00,000.00,1.00 +0496,+030.00,+00.00,01.00,000.00,1.00 +0497,+030.00,+00.00,01.00,000.00,1.00 +0498,+030.00,+00.00,01.00,000.00,1.00 +0499,+030.00,+00.00,01.00,000.00,1.00 +0500,+030.00,+00.00,01.00,000.00,1.00 +0501,+030.00,+00.00,01.00,000.00,1.00 +0502,+030.00,+00.00,01.00,000.00,1.00 +0503,+030.00,+00.00,01.00,000.00,1.00 +0504,+030.00,+00.00,01.00,000.00,1.00 +0505,+030.00,+00.00,01.00,000.00,1.00 +0506,+030.00,+00.00,01.00,000.00,1.00 +0507,+030.00,+00.00,01.00,000.00,1.00 +0508,+030.00,+00.00,01.00,000.00,1.00 +0509,+030.00,+00.00,01.00,000.00,1.00 +0510,+030.00,+00.00,01.00,000.00,1.00 +0511,+030.00,+00.00,01.00,000.00,1.00 +0512,+030.00,+00.00,01.00,000.00,1.00 +0513,+030.00,+00.00,01.00,000.00,1.00 +0514,+030.00,+00.00,01.00,000.00,1.00 +0515,+030.00,+00.00,01.00,000.00,1.00 +0516,+030.00,+00.00,01.00,000.00,1.00 +0517,+030.00,+00.00,01.00,000.00,1.00 +0518,+030.00,+00.00,01.00,000.00,1.00 +0519,+030.00,+00.00,01.00,000.00,1.00 +0520,+030.00,+00.00,01.00,000.00,1.00 +0521,+030.00,+00.00,01.00,000.00,1.00 +0522,+030.00,+00.00,01.00,000.00,1.00 +0523,+030.00,+00.00,01.00,000.00,1.00 +0524,+030.00,+00.00,01.00,000.00,1.00 +0525,+030.00,+00.00,01.00,000.00,1.00 +0526,+030.00,+00.00,01.00,000.00,1.00 +0527,+030.00,+00.00,01.00,000.00,1.00 +0528,+030.00,+00.00,01.00,000.00,1.00 +0529,+030.00,+00.00,01.00,000.00,1.00 +0530,+030.00,+00.00,01.00,000.00,1.00 +0531,+030.00,+00.00,01.00,000.00,1.00 +0532,+030.00,+00.00,01.00,000.00,1.00 +0533,+030.00,+00.00,01.00,000.00,1.00 +0534,+030.00,+00.00,01.00,000.00,1.00 +0535,+030.00,+00.00,01.00,000.00,1.00 +0536,+030.00,+00.00,01.00,000.00,1.00 +0537,+030.00,+00.00,01.00,000.00,1.00 +0538,+030.00,+00.00,01.00,000.00,1.00 +0539,+030.00,+00.00,01.00,000.00,1.00 +0540,+030.00,+00.00,01.00,000.00,1.00 +0541,+030.00,+00.00,01.00,000.00,1.00 +0542,+030.00,+00.00,01.00,000.00,1.00 +0543,+030.00,+00.00,01.00,000.00,1.00 +0544,+030.00,+00.00,01.00,000.00,1.00 +0545,+030.00,+00.00,01.00,000.00,1.00 +0546,+030.00,+00.00,01.00,000.00,1.00 +0547,+030.00,+00.00,01.00,000.00,1.00 +0548,+030.00,+00.00,01.00,000.00,1.00 +0549,+030.00,+00.00,01.00,000.00,1.00 +0550,+030.00,+00.00,01.00,000.00,1.00 +0551,+030.00,+00.00,01.00,000.00,1.00 +0552,+030.00,+00.00,01.00,000.00,1.00 +0553,+030.00,+00.00,01.00,000.00,1.00 +0554,+030.00,+00.00,01.00,000.00,1.00 +0555,+030.00,+00.00,01.00,000.00,1.00 +0556,+030.00,+00.00,01.00,000.00,1.00 +0557,+030.00,+00.00,01.00,000.00,1.00 +0558,+030.00,+00.00,01.00,000.00,1.00 +0559,+030.00,+00.00,01.00,000.00,1.00 +0560,+030.00,+00.00,01.00,000.00,1.00 +0561,+030.00,+00.00,01.00,000.00,1.00 +0562,+030.00,+00.00,01.00,000.00,1.00 +0563,+030.00,+00.00,01.00,000.00,1.00 +0564,+030.00,+00.00,01.00,000.00,1.00 +0565,+030.00,+00.00,01.00,000.00,1.00 +0566,+030.00,+00.00,01.00,000.00,1.00 +0567,+030.00,+00.00,01.00,000.00,1.00 +0568,+030.00,+00.00,01.00,000.00,1.00 +0569,+030.00,+00.00,01.00,000.00,1.00 +0570,+030.00,+00.00,01.00,000.00,1.00 +0571,+030.00,+00.00,01.00,000.00,1.00 +0572,+030.00,+00.00,01.00,000.00,1.00 +0573,+030.00,+00.00,01.00,000.00,1.00 +0574,+030.00,+00.00,01.00,000.00,1.00 +0575,+030.00,+00.00,01.00,000.00,1.00 +0576,+030.00,+00.00,01.00,000.00,1.00 +0577,+030.00,+00.00,01.00,000.00,1.00 +0578,+030.00,+00.00,01.00,000.00,1.00 +0579,+030.00,+00.00,01.00,000.00,1.00 +0580,+030.00,+00.00,01.00,000.00,1.00 +0581,+030.00,+00.00,01.00,000.00,1.00 +0582,+030.00,+00.00,01.00,000.00,1.00 +0583,+030.00,+00.00,01.00,000.00,1.00 +0584,+030.00,+00.00,01.00,000.00,1.00 +0585,+030.00,+00.00,01.00,000.00,1.00 +0586,+030.00,+00.00,01.00,000.00,1.00 +0587,+030.00,+00.00,01.00,000.00,1.00 +0588,+030.00,+00.00,01.00,000.00,1.00 +0589,+030.00,+00.00,01.00,000.00,1.00 +0590,+030.00,+00.00,01.00,000.00,1.00 +0591,+030.00,+00.00,01.00,000.00,1.00 +0592,+030.00,+00.00,01.00,000.00,1.00 +0593,+030.00,+00.00,01.00,000.00,1.00 +0594,+030.00,+00.00,01.00,000.00,1.00 +0595,+030.00,+00.00,01.00,000.00,1.00 +0596,+030.00,+00.00,01.00,000.00,1.00 +0597,+030.00,+00.00,01.00,000.00,1.00 +0598,+030.00,+00.00,01.00,000.00,1.00 +0599,+030.00,+00.00,01.00,000.00,1.00 +0600,+030.00,+00.00,01.00,000.00,1.00 +0601,+030.00,+00.00,01.00,000.00,1.00 +0602,+030.00,+00.00,01.00,000.00,1.00 +0603,+030.00,+00.00,01.00,000.00,1.00 +0604,+030.00,+00.00,01.00,000.00,1.00 +0605,+030.00,+00.00,01.00,000.00,1.00 +0606,+030.00,+00.00,01.00,000.00,1.00 +0607,+030.00,+00.00,01.00,000.00,1.00 +0608,+030.00,+00.00,01.00,000.00,1.00 +0609,+030.00,+00.00,01.00,000.00,1.00 +0610,+030.00,+00.00,01.00,000.00,1.00 +0611,+030.00,+00.00,01.00,000.00,1.00 +0612,+030.00,+00.00,01.00,000.00,1.00 +0613,+030.00,+00.00,01.00,000.00,1.00 +0614,+030.00,+00.00,01.00,000.00,1.00 +0615,+030.00,+00.00,01.00,000.00,1.00 +0616,+030.00,+00.00,01.00,000.00,1.00 +0617,+030.00,+00.00,01.00,000.00,1.00 +0618,+030.00,+00.00,01.00,000.00,1.00 +0619,+030.00,+00.00,01.00,000.00,1.00 +0620,+030.00,+00.00,01.00,000.00,1.00 +0621,+030.00,+00.00,01.00,000.00,1.00 +0622,+030.00,+00.00,01.00,000.00,1.00 +0623,+030.00,+00.00,01.00,000.00,1.00 +0624,+030.00,+00.00,01.00,000.00,1.00 +0625,+030.00,+00.00,01.00,000.00,1.00 +0626,+030.00,+00.00,01.00,000.00,1.00 +0627,+030.00,+00.00,01.00,000.00,1.00 +0628,+030.00,+00.00,01.00,000.00,1.00 +0629,+030.00,+00.00,01.00,000.00,1.00 +0630,+030.00,+00.00,01.00,000.00,1.00 +0631,+030.00,+00.00,01.00,000.00,1.00 +0632,+030.00,+00.00,01.00,000.00,1.00 +0633,+030.00,+00.00,01.00,000.00,1.00 +0634,+030.00,+00.00,01.00,000.00,1.00 +0635,+030.00,+00.00,01.00,000.00,1.00 +0636,+030.00,+00.00,01.00,000.00,1.00 +0637,+030.00,+00.00,01.00,000.00,1.00 +0638,+030.00,+00.00,01.00,000.00,1.00 +0639,+030.00,+00.00,01.00,000.00,1.00 +0640,+030.00,+00.00,01.00,000.00,1.00 +0641,+030.00,+00.00,01.00,000.00,1.00 +0642,+030.00,+00.00,01.00,000.00,1.00 +0643,+030.00,+00.00,01.00,000.00,1.00 +0644,+030.00,+00.00,01.00,000.00,1.00 +0645,+030.00,+00.00,01.00,000.00,1.00 +0646,+030.00,+00.00,01.00,000.00,1.00 +0647,+030.00,+00.00,01.00,000.00,1.00 +0648,+030.00,+00.00,01.00,000.00,1.00 +0649,+030.00,+00.00,01.00,000.00,1.00 +0650,+030.00,+00.00,01.00,000.00,1.00 +0651,+030.00,+00.00,01.00,000.00,1.00 +0652,+030.00,+00.00,01.00,000.00,1.00 +0653,+030.00,+00.00,01.00,000.00,1.00 +0654,+030.00,+00.00,01.00,000.00,1.00 +0655,+030.00,+00.00,01.00,000.00,1.00 +0656,+030.00,+00.00,01.00,000.00,1.00 +0657,+030.00,+00.00,01.00,000.00,1.00 +0658,+030.00,+00.00,01.00,000.00,1.00 +0659,+030.00,+00.00,01.00,000.00,1.00 +0660,+030.00,+00.00,01.00,000.00,1.00 +0661,+030.00,+00.00,01.00,000.00,1.00 +0662,+030.00,+00.00,01.00,000.00,1.00 +0663,+030.00,+00.00,01.00,000.00,1.00 +0664,+030.00,+00.00,01.00,000.00,1.00 +0665,+030.00,+00.00,01.00,000.00,1.00 +0666,+030.00,+00.00,01.00,000.00,1.00 +0667,+030.00,+00.00,01.00,000.00,1.00 +0668,+030.00,+00.00,01.00,000.00,1.00 +0669,+030.00,+00.00,01.00,000.00,1.00 +0670,+030.00,+00.00,01.00,000.00,1.00 +0671,+030.00,+00.00,01.00,000.00,1.00 +0672,+030.00,+00.00,01.00,000.00,1.00 +0673,+030.00,+00.00,01.00,000.00,1.00 +0674,+030.00,+00.00,01.00,000.00,1.00 +0675,+030.00,+00.00,01.00,000.00,1.00 +0676,+030.00,+00.00,01.00,000.00,1.00 +0677,+030.00,+00.00,01.00,000.00,1.00 +0678,+030.00,+00.00,01.00,000.00,1.00 +0679,+030.00,+00.00,01.00,000.00,1.00 +0680,+030.00,+00.00,01.00,000.00,1.00 +0681,+030.00,+00.00,01.00,000.00,1.00 +0682,+030.00,+00.00,01.00,000.00,1.00 +0683,+030.00,+00.00,01.00,000.00,1.00 +0684,+030.00,+00.00,01.00,000.00,1.00 +0685,+030.00,+00.00,01.00,000.00,1.00 +0686,+030.00,+00.00,01.00,000.00,1.00 +0687,+030.00,+00.00,01.00,000.00,1.00 +0688,+030.00,+00.00,01.00,000.00,1.00 +0689,+030.00,+00.00,01.00,000.00,1.00 +0690,+030.00,+00.00,01.00,000.00,1.00 +0691,+030.00,+00.00,01.00,000.00,1.00 +0692,+030.00,+00.00,01.00,000.00,1.00 +0693,+030.00,+00.00,01.00,000.00,1.00 +0694,+030.00,+00.00,01.00,000.00,1.00 +0695,+030.00,+00.00,01.00,000.00,1.00 +0696,+030.00,+00.00,01.00,000.00,1.00 +0697,+030.00,+00.00,01.00,000.00,1.00 +0698,+030.00,+00.00,01.00,000.00,1.00 +0699,+030.00,+00.00,01.00,000.00,1.00 +0700,+030.00,+00.00,01.00,000.00,1.00 +0701,+030.00,+00.00,01.00,000.00,1.00 +0702,+030.00,+00.00,01.00,000.00,1.00 +0703,+030.00,+00.00,01.00,000.00,1.00 +0704,+030.00,+00.00,01.00,000.00,1.00 +0705,+030.00,+00.00,01.00,000.00,1.00 +0706,+030.00,+00.00,01.00,000.00,1.00 +0707,+030.00,+00.00,01.00,000.00,1.00 +0708,+030.00,+00.00,01.00,000.00,1.00 +0709,+030.00,+00.00,01.00,000.00,1.00 +0710,+030.00,+00.00,01.00,000.00,1.00 +0711,+030.00,+00.00,01.00,000.00,1.00 +0712,+030.00,+00.00,01.00,000.00,1.00 +0713,+030.00,+00.00,01.00,000.00,1.00 +0714,+030.00,+00.00,01.00,000.00,1.00 +0715,+030.00,+00.00,01.00,000.00,1.00 +0716,+030.00,+00.00,01.00,000.00,1.00 +0717,+030.00,+00.00,01.00,000.00,1.00 +0718,+030.00,+00.00,01.00,000.00,1.00 +0719,+030.00,+00.00,01.00,000.00,1.00 +0720,+030.00,+00.00,01.00,000.00,1.00 +0721,+030.00,+00.00,01.00,000.00,1.00 +0722,+030.00,+00.00,01.00,000.00,1.00 +0723,+030.00,+00.00,01.00,000.00,1.00 +0724,+030.00,+00.00,01.00,000.00,1.00 +0725,+030.00,+00.00,01.00,000.00,1.00 +0726,+030.00,+00.00,01.00,000.00,1.00 +0727,+030.00,+00.00,01.00,000.00,1.00 +0728,+030.00,+00.00,01.00,000.00,1.00 +0729,+030.00,+00.00,01.00,000.00,1.00 +0730,+030.00,+00.00,01.00,000.00,1.00 +0731,+030.00,+00.00,01.00,000.00,1.00 +0732,+030.00,+00.00,01.00,000.00,1.00 +0733,+030.00,+00.00,01.00,000.00,1.00 +0734,+030.00,+00.00,01.00,000.00,1.00 +0735,+030.00,+00.00,01.00,000.00,1.00 +0736,+030.00,+00.00,01.00,000.00,1.00 +0737,+030.00,+00.00,01.00,000.00,1.00 +0738,+030.00,+00.00,01.00,000.00,1.00 +0739,+030.00,+00.00,01.00,000.00,1.00 +0740,+030.00,+00.00,01.00,000.00,1.00 +0741,+030.00,+00.00,01.00,000.00,1.00 +0742,+030.00,+00.00,01.00,000.00,1.00 +0743,+030.00,+00.00,01.00,000.00,1.00 +0744,+030.00,+00.00,01.00,000.00,1.00 +0745,+030.00,+00.00,01.00,000.00,1.00 +0746,+030.00,+00.00,01.00,000.00,1.00 +0747,+030.00,+00.00,01.00,000.00,1.00 +0748,+030.00,+00.00,01.00,000.00,1.00 +0749,+030.00,+00.00,01.00,000.00,1.00 +0750,+030.00,+00.00,01.00,000.00,1.00 +0751,+030.00,+00.00,01.00,000.00,1.00 +0752,+030.00,+00.00,01.00,000.00,1.00 +0753,+030.00,+00.00,01.00,000.00,1.00 +0754,+030.00,+00.00,01.00,000.00,1.00 +0755,+030.00,+00.00,01.00,000.00,1.00 +0756,+030.00,+00.00,01.00,000.00,1.00 +0757,+030.00,+00.00,01.00,000.00,1.00 +0758,+030.00,+00.00,01.00,000.00,1.00 +0759,+030.00,+00.00,01.00,000.00,1.00 +0760,+030.00,+00.00,01.00,000.00,1.00 +0761,+030.00,+00.00,01.00,000.00,1.00 +0762,+030.00,+00.00,01.00,000.00,1.00 +0763,+030.00,+00.00,01.00,000.00,1.00 +0764,+030.00,+00.00,01.00,000.00,1.00 +0765,+030.00,+00.00,01.00,000.00,1.00 +0766,+030.00,+00.00,01.00,000.00,1.00 +0767,+030.00,+00.00,01.00,000.00,1.00 +0768,+030.00,+00.00,01.00,000.00,1.00 +0769,+030.00,+00.00,01.00,000.00,1.00 +0770,+030.00,+00.00,01.00,000.00,1.00 +0771,+030.00,+00.00,01.00,000.00,1.00 +0772,+030.00,+00.00,01.00,000.00,1.00 +0773,+030.00,+00.00,01.00,000.00,1.00 +0774,+030.00,+00.00,01.00,000.00,1.00 +0775,+030.00,+00.00,01.00,000.00,1.00 +0776,+030.00,+00.00,01.00,000.00,1.00 +0777,+030.00,+00.00,01.00,000.00,1.00 +0778,+030.00,+00.00,01.00,000.00,1.00 +0779,+030.00,+00.00,01.00,000.00,1.00 +0780,+030.00,+00.00,01.00,000.00,1.00 +0781,+030.00,+00.00,01.00,000.00,1.00 +0782,+030.00,+00.00,01.00,000.00,1.00 +0783,+030.00,+00.00,01.00,000.00,1.00 +0784,+030.00,+00.00,01.00,000.00,1.00 +0785,+030.00,+00.00,01.00,000.00,1.00 +0786,+030.00,+00.00,01.00,000.00,1.00 +0787,+030.00,+00.00,01.00,000.00,1.00 +0788,+030.00,+00.00,01.00,000.00,1.00 +0789,+030.00,+00.00,01.00,000.00,1.00 +0790,+030.00,+00.00,01.00,000.00,1.00 +0791,+030.00,+00.00,01.00,000.00,1.00 +0792,+030.00,+00.00,01.00,000.00,1.00 +0793,+030.00,+00.00,01.00,000.00,1.00 +0794,+030.00,+00.00,01.00,000.00,1.00 +0795,+030.00,+00.00,01.00,000.00,1.00 +0796,+030.00,+00.00,01.00,000.00,1.00 +0797,+030.00,+00.00,01.00,000.00,1.00 +0798,+030.00,+00.00,01.00,000.00,1.00 +0799,+030.00,+00.00,01.00,000.00,1.00 +0800,+030.00,+00.00,01.00,000.00,1.00 +0801,+030.00,+00.00,01.00,000.00,1.00 +0802,+030.00,+00.00,01.00,000.00,1.00 +0803,+030.00,+00.00,01.00,000.00,1.00 +0804,+030.00,+00.00,01.00,000.00,1.00 +0805,+030.00,+00.00,01.00,000.00,1.00 +0806,+030.00,+00.00,01.00,000.00,1.00 +0807,+030.00,+00.00,01.00,000.00,1.00 +0808,+030.00,+00.00,01.00,000.00,1.00 +0809,+030.00,+00.00,01.00,000.00,1.00 +0810,+030.00,+00.00,01.00,000.00,1.00 +0811,+030.00,+00.00,01.00,000.00,1.00 +0812,+030.00,+00.00,01.00,000.00,1.00 +0813,+030.00,+00.00,01.00,000.00,1.00 +0814,+030.00,+00.00,01.00,000.00,1.00 +0815,+030.00,+00.00,01.00,000.00,1.00 +0816,+030.00,+00.00,01.00,000.00,1.00 +0817,+030.00,+00.00,01.00,000.00,1.00 +0818,+030.00,+00.00,01.00,000.00,1.00 +0819,+030.00,+00.00,01.00,000.00,1.00 +0820,+030.00,+00.00,01.00,000.00,1.00 +0821,+030.00,+00.00,01.00,000.00,1.00 +0822,+030.00,+00.00,01.00,000.00,1.00 +0823,+030.00,+00.00,01.00,000.00,1.00 +0824,+030.00,+00.00,01.00,000.00,1.00 +0825,+030.00,+00.00,01.00,000.00,1.00 +0826,+030.00,+00.00,01.00,000.00,1.00 +0827,+030.00,+00.00,01.00,000.00,1.00 +0828,+030.00,+00.00,01.00,000.00,1.00 +0829,+030.00,+00.00,01.00,000.00,1.00 +0830,+030.00,+00.00,01.00,000.00,1.00 +0831,+030.00,+00.00,01.00,000.00,1.00 +0832,+030.00,+00.00,01.00,000.00,1.00 +0833,+030.00,+00.00,01.00,000.00,1.00 +0834,+030.00,+00.00,01.00,000.00,1.00 +0835,+030.00,+00.00,01.00,000.00,1.00 +0836,+030.00,+00.00,01.00,000.00,1.00 +0837,+030.00,+00.00,01.00,000.00,1.00 +0838,+030.00,+00.00,01.00,000.00,1.00 +0839,+030.00,+00.00,01.00,000.00,1.00 +0840,+030.00,+00.00,01.00,000.00,1.00 +0841,+030.00,+00.00,01.00,000.00,1.00 +0842,+030.00,+00.00,01.00,000.00,1.00 +0843,+030.00,+00.00,01.00,000.00,1.00 +0844,+030.00,+00.00,01.00,000.00,1.00 +0845,+030.00,+00.00,01.00,000.00,1.00 +0846,+030.00,+00.00,01.00,000.00,1.00 +0847,+030.00,+00.00,01.00,000.00,1.00 +0848,+030.00,+00.00,01.00,000.00,1.00 +0849,+030.00,+00.00,01.00,000.00,1.00 +0850,+030.00,+00.00,01.00,000.00,1.00 +0851,+030.00,+00.00,01.00,000.00,1.00 +0852,+030.00,+00.00,01.00,000.00,1.00 +0853,+030.00,+00.00,01.00,000.00,1.00 +0854,+030.00,+00.00,01.00,000.00,1.00 +0855,+030.00,+00.00,01.00,000.00,1.00 +0856,+030.00,+00.00,01.00,000.00,1.00 +0857,+030.00,+00.00,01.00,000.00,1.00 +0858,+030.00,+00.00,01.00,000.00,1.00 +0859,+030.00,+00.00,01.00,000.00,1.00 +0860,+030.00,+00.00,01.00,000.00,1.00 +0861,+030.00,+00.00,01.00,000.00,1.00 +0862,+030.00,+00.00,01.00,000.00,1.00 +0863,+030.00,+00.00,01.00,000.00,1.00 +0864,+030.00,+00.00,01.00,000.00,1.00 +0865,+030.00,+00.00,01.00,000.00,1.00 +0866,+030.00,+00.00,01.00,000.00,1.00 +0867,+030.00,+00.00,01.00,000.00,1.00 +0868,+030.00,+00.00,01.00,000.00,1.00 +0869,+030.00,+00.00,01.00,000.00,1.00 +0870,+030.00,+00.00,01.00,000.00,1.00 +0871,+030.00,+00.00,01.00,000.00,1.00 +0872,+030.00,+00.00,01.00,000.00,1.00 +0873,+030.00,+00.00,01.00,000.00,1.00 +0874,+030.00,+00.00,01.00,000.00,1.00 +0875,+030.00,+00.00,01.00,000.00,1.00 +0876,+030.00,+00.00,01.00,000.00,1.00 +0877,+030.00,+00.00,01.00,000.00,1.00 +0878,+030.00,+00.00,01.00,000.00,1.00 +0879,+030.00,+00.00,01.00,000.00,1.00 +0880,+030.00,+00.00,01.00,000.00,1.00 +0881,+030.00,+00.00,01.00,000.00,1.00 +0882,+030.00,+00.00,01.00,000.00,1.00 +0883,+030.00,+00.00,01.00,000.00,1.00 +0884,+030.00,+00.00,01.00,000.00,1.00 +0885,+030.00,+00.00,01.00,000.00,1.00 +0886,+030.00,+00.00,01.00,000.00,1.00 +0887,+030.00,+00.00,01.00,000.00,1.00 +0888,+030.00,+00.00,01.00,000.00,1.00 +0889,+030.00,+00.00,01.00,000.00,1.00 +0890,+030.00,+00.00,01.00,000.00,1.00 +0891,+030.00,+00.00,01.00,000.00,1.00 +0892,+030.00,+00.00,01.00,000.00,1.00 +0893,+030.00,+00.00,01.00,000.00,1.00 +0894,+030.00,+00.00,01.00,000.00,1.00 +0895,+030.00,+00.00,01.00,000.00,1.00 +0896,+030.00,+00.00,01.00,000.00,1.00 +0897,+030.00,+00.00,01.00,000.00,1.00 +0898,+030.00,+00.00,01.00,000.00,1.00 +0899,+030.00,+00.00,01.00,000.00,1.00 +0900,+030.00,+00.00,01.00,000.00,1.00 +0901,+030.00,+00.00,01.00,000.00,1.00 +0902,+030.00,+00.00,01.00,000.00,1.00 +0903,+030.00,+00.00,01.00,000.00,1.00 +0904,+030.00,+00.00,01.00,000.00,1.00 +0905,+030.00,+00.00,01.00,000.00,1.00 +0906,+030.00,+00.00,01.00,000.00,1.00 +0907,+030.00,+00.00,01.00,000.00,1.00 +0908,+030.00,+00.00,01.00,000.00,1.00 +0909,+030.00,+00.00,01.00,000.00,1.00 +0910,+030.00,+00.00,01.00,000.00,1.00 +0911,+030.00,+00.00,01.00,000.00,1.00 +0912,+030.00,+00.00,01.00,000.00,1.00 +0913,+030.00,+00.00,01.00,000.00,1.00 +0914,+030.00,+00.00,01.00,000.00,1.00 +0915,+030.00,+00.00,01.00,000.00,1.00 +0916,+030.00,+00.00,01.00,000.00,1.00 +0917,+030.00,+00.00,01.00,000.00,1.00 +0918,+030.00,+00.00,01.00,000.00,1.00 +0919,+030.00,+00.00,01.00,000.00,1.00 +0920,+030.00,+00.00,01.00,000.00,1.00 +0921,+030.00,+00.00,01.00,000.00,1.00 +0922,+030.00,+00.00,01.00,000.00,1.00 +0923,+030.00,+00.00,01.00,000.00,1.00 +0924,+030.00,+00.00,01.00,000.00,1.00 +0925,+030.00,+00.00,01.00,000.00,1.00 +0926,+030.00,+00.00,01.00,000.00,1.00 +0927,+030.00,+00.00,01.00,000.00,1.00 +0928,+030.00,+00.00,01.00,000.00,1.00 +0929,+030.00,+00.00,01.00,000.00,1.00 +0930,+030.00,+00.00,01.00,000.00,1.00 +0931,+030.00,+00.00,01.00,000.00,1.00 +0932,+030.00,+00.00,01.00,000.00,1.00 +0933,+030.00,+00.00,01.00,000.00,1.00 +0934,+030.00,+00.00,01.00,000.00,1.00 +0935,+030.00,+00.00,01.00,000.00,1.00 +0936,+030.00,+00.00,01.00,000.00,1.00 +0937,+030.00,+00.00,01.00,000.00,1.00 +0938,+030.00,+00.00,01.00,000.00,1.00 +0939,+030.00,+00.00,01.00,000.00,1.00 +0940,+030.00,+00.00,01.00,000.00,1.00 +0941,+030.00,+00.00,01.00,000.00,1.00 +0942,+030.00,+00.00,01.00,000.00,1.00 +0943,+030.00,+00.00,01.00,000.00,1.00 +0944,+030.00,+00.00,01.00,000.00,1.00 +0945,+030.00,+00.00,01.00,000.00,1.00 +0946,+030.00,+00.00,01.00,000.00,1.00 +0947,+030.00,+00.00,01.00,000.00,1.00 +0948,+030.00,+00.00,01.00,000.00,1.00 +0949,+030.00,+00.00,01.00,000.00,1.00 +0950,+030.00,+00.00,01.00,000.00,1.00 +0951,+030.00,+00.00,01.00,000.00,1.00 +0952,+030.00,+00.00,01.00,000.00,1.00 +0953,+030.00,+00.00,01.00,000.00,1.00 +0954,+030.00,+00.00,01.00,000.00,1.00 +0955,+030.00,+00.00,01.00,000.00,1.00 +0956,+030.00,+00.00,01.00,000.00,1.00 +0957,+030.00,+00.00,01.00,000.00,1.00 +0958,+030.00,+00.00,01.00,000.00,1.00 +0959,+030.00,+00.00,01.00,000.00,1.00 +0960,+030.00,+00.00,01.00,000.00,1.00 +0961,+030.00,+00.00,01.00,000.00,1.00 +0962,+030.00,+00.00,01.00,000.00,1.00 +0963,+030.00,+00.00,01.00,000.00,1.00 +0964,+030.00,+00.00,01.00,000.00,1.00 +0965,+030.00,+00.00,01.00,000.00,1.00 +0966,+030.00,+00.00,01.00,000.00,1.00 +0967,+030.00,+00.00,01.00,000.00,1.00 +0968,+030.00,+00.00,01.00,000.00,1.00 +0969,+030.00,+00.00,01.00,000.00,1.00 +0970,+030.00,+00.00,01.00,000.00,1.00 +0971,+030.00,+00.00,01.00,000.00,1.00 +0972,+030.00,+00.00,01.00,000.00,1.00 +0973,+030.00,+00.00,01.00,000.00,1.00 +0974,+030.00,+00.00,01.00,000.00,1.00 +0975,+030.00,+00.00,01.00,000.00,1.00 +0976,+030.00,+00.00,01.00,000.00,1.00 +0977,+030.00,+00.00,01.00,000.00,1.00 +0978,+030.00,+00.00,01.00,000.00,1.00 +0979,+030.00,+00.00,01.00,000.00,1.00 +0980,+030.00,+00.00,01.00,000.00,1.00 +0981,+030.00,+00.00,01.00,000.00,1.00 +0982,+030.00,+00.00,01.00,000.00,1.00 +0983,+030.00,+00.00,01.00,000.00,1.00 +0984,+030.00,+00.00,01.00,000.00,1.00 +0985,+030.00,+00.00,01.00,000.00,1.00 +0986,+030.00,+00.00,01.00,000.00,1.00 +0987,+030.00,+00.00,01.00,000.00,1.00 +0988,+030.00,+00.00,01.00,000.00,1.00 +0989,+030.00,+00.00,01.00,000.00,1.00 +0990,+030.00,+00.00,01.00,000.00,1.00 +0991,+030.00,+00.00,01.00,000.00,1.00 +0992,+030.00,+00.00,01.00,000.00,1.00 +0993,+030.00,+00.00,01.00,000.00,1.00 +0994,+030.00,+00.00,01.00,000.00,1.00 +0995,+030.00,+00.00,01.00,000.00,1.00 +0996,+030.00,+00.00,01.00,000.00,1.00 +0997,+030.00,+00.00,01.00,000.00,1.00 +0998,+030.00,+00.00,01.00,000.00,1.00 +0999,+030.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t07_ch1.csv b/scripts/td_object_renderer/metadata/csv/t07_ch1.csv new file mode 100644 index 0000000000..9816a5e6f3 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t07_ch1.csv @@ -0,0 +1,1000 @@ +0000,+000.00,+00.00,01.00,000.00,1.00 +0001,+001.00,+00.00,01.00,000.00,1.00 +0002,+002.00,+00.00,01.00,000.00,1.00 +0003,+003.00,+00.00,01.00,000.00,1.00 +0004,+004.00,+00.00,01.00,000.00,1.00 +0005,+005.01,+00.00,01.00,000.00,1.00 +0006,+006.01,+00.00,01.00,000.00,1.00 +0007,+007.01,+00.00,01.00,000.00,1.00 +0008,+008.01,+00.00,01.00,000.00,1.00 +0009,+009.01,+00.00,01.00,000.00,1.00 +0010,+010.01,+00.00,01.00,000.00,1.00 +0011,+011.01,+00.00,01.00,000.00,1.00 +0012,+012.01,+00.00,01.00,000.00,1.00 +0013,+013.01,+00.00,01.00,000.00,1.00 +0014,+014.02,+00.00,01.00,000.00,1.00 +0015,+015.02,+00.00,01.00,000.00,1.00 +0016,+016.02,+00.00,01.00,000.00,1.00 +0017,+017.02,+00.00,01.00,000.00,1.00 +0018,+018.02,+00.00,01.00,000.00,1.00 +0019,+019.02,+00.00,01.00,000.00,1.00 +0020,+020.02,+00.00,01.00,000.00,1.00 +0021,+021.02,+00.00,01.00,000.00,1.00 +0022,+022.02,+00.00,01.00,000.00,1.00 +0023,+023.03,+00.00,01.00,000.00,1.00 +0024,+024.03,+00.00,01.00,000.00,1.00 +0025,+025.03,+00.00,01.00,000.00,1.00 +0026,+026.03,+00.00,01.00,000.00,1.00 +0027,+027.03,+00.00,01.00,000.00,1.00 +0028,+028.03,+00.00,01.00,000.00,1.00 +0029,+029.03,+00.00,01.00,000.00,1.00 +0030,+030.03,+00.00,01.00,000.00,1.00 +0031,+031.03,+00.00,01.00,000.00,1.00 +0032,+032.04,+00.00,01.00,000.00,1.00 +0033,+033.04,+00.00,01.00,000.00,1.00 +0034,+034.04,+00.00,01.00,000.00,1.00 +0035,+035.04,+00.00,01.00,000.00,1.00 +0036,+036.04,+00.00,01.00,000.00,1.00 +0037,+037.04,+00.00,01.00,000.00,1.00 +0038,+038.04,+00.00,01.00,000.00,1.00 +0039,+039.04,+00.00,01.00,000.00,1.00 +0040,+040.04,+00.00,01.00,000.00,1.00 +0041,+041.05,+00.00,01.00,000.00,1.00 +0042,+042.05,+00.00,01.00,000.00,1.00 +0043,+043.05,+00.00,01.00,000.00,1.00 +0044,+044.05,+00.00,01.00,000.00,1.00 +0045,+045.05,+00.00,01.00,000.00,1.00 +0046,+046.05,+00.00,01.00,000.00,1.00 +0047,+047.05,+00.00,01.00,000.00,1.00 +0048,+048.05,+00.00,01.00,000.00,1.00 +0049,+049.05,+00.00,01.00,000.00,1.00 +0050,+050.06,+00.00,01.00,000.00,1.00 +0051,+051.06,+00.00,01.00,000.00,1.00 +0052,+052.06,+00.00,01.00,000.00,1.00 +0053,+053.06,+00.00,01.00,000.00,1.00 +0054,+054.06,+00.00,01.00,000.00,1.00 +0055,+055.06,+00.00,01.00,000.00,1.00 +0056,+056.06,+00.00,01.00,000.00,1.00 +0057,+057.06,+00.00,01.00,000.00,1.00 +0058,+058.06,+00.00,01.00,000.00,1.00 +0059,+059.07,+00.00,01.00,000.00,1.00 +0060,+060.07,+00.00,01.00,000.00,1.00 +0061,+061.07,+00.00,01.00,000.00,1.00 +0062,+062.07,+00.00,01.00,000.00,1.00 +0063,+063.07,+00.00,01.00,000.00,1.00 +0064,+064.07,+00.00,01.00,000.00,1.00 +0065,+065.07,+00.00,01.00,000.00,1.00 +0066,+066.07,+00.00,01.00,000.00,1.00 +0067,+067.07,+00.00,01.00,000.00,1.00 +0068,+068.08,+00.00,01.00,000.00,1.00 +0069,+069.08,+00.00,01.00,000.00,1.00 +0070,+070.08,+00.00,01.00,000.00,1.00 +0071,+071.08,+00.00,01.00,000.00,1.00 +0072,+072.08,+00.00,01.00,000.00,1.00 +0073,+073.08,+00.00,01.00,000.00,1.00 +0074,+074.08,+00.00,01.00,000.00,1.00 +0075,+075.08,+00.00,01.00,000.00,1.00 +0076,+076.08,+00.00,01.00,000.00,1.00 +0077,+077.09,+00.00,01.00,000.00,1.00 +0078,+078.09,+00.00,01.00,000.00,1.00 +0079,+079.09,+00.00,01.00,000.00,1.00 +0080,+080.09,+00.00,01.00,000.00,1.00 +0081,+081.09,+00.00,01.00,000.00,1.00 +0082,+082.09,+00.00,01.00,000.00,1.00 +0083,+083.09,+00.00,01.00,000.00,1.00 +0084,+084.09,+00.00,01.00,000.00,1.00 +0085,+085.09,+00.00,01.00,000.00,1.00 +0086,+086.10,+00.00,01.00,000.00,1.00 +0087,+087.10,+00.00,01.00,000.00,1.00 +0088,+088.10,+00.00,01.00,000.00,1.00 +0089,+089.10,+00.00,01.00,000.00,1.00 +0090,+090.10,+00.00,01.00,000.00,1.00 +0091,+091.10,+00.00,01.00,000.00,1.00 +0092,+092.10,+00.00,01.00,000.00,1.00 +0093,+093.10,+00.00,01.00,000.00,1.00 +0094,+094.10,+00.00,01.00,000.00,1.00 +0095,+095.11,+00.00,01.00,000.00,1.00 +0096,+096.11,+00.00,01.00,000.00,1.00 +0097,+097.11,+00.00,01.00,000.00,1.00 +0098,+098.11,+00.00,01.00,000.00,1.00 +0099,+099.11,+00.00,01.00,000.00,1.00 +0100,+100.11,+00.00,01.00,000.00,1.00 +0101,+101.11,+00.00,01.00,000.00,1.00 +0102,+102.11,+00.00,01.00,000.00,1.00 +0103,+103.11,+00.00,01.00,000.00,1.00 +0104,+104.12,+00.00,01.00,000.00,1.00 +0105,+105.12,+00.00,01.00,000.00,1.00 +0106,+106.12,+00.00,01.00,000.00,1.00 +0107,+107.12,+00.00,01.00,000.00,1.00 +0108,+108.12,+00.00,01.00,000.00,1.00 +0109,+109.12,+00.00,01.00,000.00,1.00 +0110,+110.12,+00.00,01.00,000.00,1.00 +0111,+111.12,+00.00,01.00,000.00,1.00 +0112,+112.12,+00.00,01.00,000.00,1.00 +0113,+113.13,+00.00,01.00,000.00,1.00 +0114,+114.13,+00.00,01.00,000.00,1.00 +0115,+115.13,+00.00,01.00,000.00,1.00 +0116,+116.13,+00.00,01.00,000.00,1.00 +0117,+117.13,+00.00,01.00,000.00,1.00 +0118,+118.13,+00.00,01.00,000.00,1.00 +0119,+119.13,+00.00,01.00,000.00,1.00 +0120,+120.13,+00.00,01.00,000.00,1.00 +0121,+121.13,+00.00,01.00,000.00,1.00 +0122,+122.14,+00.00,01.00,000.00,1.00 +0123,+123.14,+00.00,01.00,000.00,1.00 +0124,+124.14,+00.00,01.00,000.00,1.00 +0125,+125.14,+00.00,01.00,000.00,1.00 +0126,+126.14,+00.00,01.00,000.00,1.00 +0127,+127.14,+00.00,01.00,000.00,1.00 +0128,+128.14,+00.00,01.00,000.00,1.00 +0129,+129.14,+00.00,01.00,000.00,1.00 +0130,+130.14,+00.00,01.00,000.00,1.00 +0131,+131.15,+00.00,01.00,000.00,1.00 +0132,+132.15,+00.00,01.00,000.00,1.00 +0133,+133.15,+00.00,01.00,000.00,1.00 +0134,+134.15,+00.00,01.00,000.00,1.00 +0135,+135.15,+00.00,01.00,000.00,1.00 +0136,+136.15,+00.00,01.00,000.00,1.00 +0137,+137.15,+00.00,01.00,000.00,1.00 +0138,+138.15,+00.00,01.00,000.00,1.00 +0139,+139.15,+00.00,01.00,000.00,1.00 +0140,+140.16,+00.00,01.00,000.00,1.00 +0141,+141.16,+00.00,01.00,000.00,1.00 +0142,+142.16,+00.00,01.00,000.00,1.00 +0143,+143.16,+00.00,01.00,000.00,1.00 +0144,+144.16,+00.00,01.00,000.00,1.00 +0145,+145.16,+00.00,01.00,000.00,1.00 +0146,+146.16,+00.00,01.00,000.00,1.00 +0147,+147.16,+00.00,01.00,000.00,1.00 +0148,+148.16,+00.00,01.00,000.00,1.00 +0149,+149.17,+00.00,01.00,000.00,1.00 +0150,+150.17,+00.00,01.00,000.00,1.00 +0151,+151.17,+00.00,01.00,000.00,1.00 +0152,+152.17,+00.00,01.00,000.00,1.00 +0153,+153.17,+00.00,01.00,000.00,1.00 +0154,+154.17,+00.00,01.00,000.00,1.00 +0155,+155.17,+00.00,01.00,000.00,1.00 +0156,+156.17,+00.00,01.00,000.00,1.00 +0157,+157.17,+00.00,01.00,000.00,1.00 +0158,+158.18,+00.00,01.00,000.00,1.00 +0159,+159.18,+00.00,01.00,000.00,1.00 +0160,+160.18,+00.00,01.00,000.00,1.00 +0161,+161.18,+00.00,01.00,000.00,1.00 +0162,+162.18,+00.00,01.00,000.00,1.00 +0163,+163.18,+00.00,01.00,000.00,1.00 +0164,+164.18,+00.00,01.00,000.00,1.00 +0165,+165.18,+00.00,01.00,000.00,1.00 +0166,+166.18,+00.00,01.00,000.00,1.00 +0167,+167.19,+00.00,01.00,000.00,1.00 +0168,+168.19,+00.00,01.00,000.00,1.00 +0169,+169.19,+00.00,01.00,000.00,1.00 +0170,+170.19,+00.00,01.00,000.00,1.00 +0171,+171.19,+00.00,01.00,000.00,1.00 +0172,+172.19,+00.00,01.00,000.00,1.00 +0173,+173.19,+00.00,01.00,000.00,1.00 +0174,+174.19,+00.00,01.00,000.00,1.00 +0175,+175.19,+00.00,01.00,000.00,1.00 +0176,+176.20,+00.00,01.00,000.00,1.00 +0177,+177.20,+00.00,01.00,000.00,1.00 +0178,+178.20,+00.00,01.00,000.00,1.00 +0179,+179.20,+00.00,01.00,000.00,1.00 +0180,-179.80,+00.00,01.00,000.00,1.00 +0181,-178.80,+00.00,01.00,000.00,1.00 +0182,-177.80,+00.00,01.00,000.00,1.00 +0183,-176.80,+00.00,01.00,000.00,1.00 +0184,-175.80,+00.00,01.00,000.00,1.00 +0185,-174.79,+00.00,01.00,000.00,1.00 +0186,-173.79,+00.00,01.00,000.00,1.00 +0187,-172.79,+00.00,01.00,000.00,1.00 +0188,-171.79,+00.00,01.00,000.00,1.00 +0189,-170.79,+00.00,01.00,000.00,1.00 +0190,-169.79,+00.00,01.00,000.00,1.00 +0191,-168.79,+00.00,01.00,000.00,1.00 +0192,-167.79,+00.00,01.00,000.00,1.00 +0193,-166.79,+00.00,01.00,000.00,1.00 +0194,-165.78,+00.00,01.00,000.00,1.00 +0195,-164.78,+00.00,01.00,000.00,1.00 +0196,-163.78,+00.00,01.00,000.00,1.00 +0197,-162.78,+00.00,01.00,000.00,1.00 +0198,-161.78,+00.00,01.00,000.00,1.00 +0199,-160.78,+00.00,01.00,000.00,1.00 +0200,-159.78,+00.00,01.00,000.00,1.00 +0201,-158.78,+00.00,01.00,000.00,1.00 +0202,-157.78,+00.00,01.00,000.00,1.00 +0203,-156.77,+00.00,01.00,000.00,1.00 +0204,-155.77,+00.00,01.00,000.00,1.00 +0205,-154.77,+00.00,01.00,000.00,1.00 +0206,-153.77,+00.00,01.00,000.00,1.00 +0207,-152.77,+00.00,01.00,000.00,1.00 +0208,-151.77,+00.00,01.00,000.00,1.00 +0209,-150.77,+00.00,01.00,000.00,1.00 +0210,-149.77,+00.00,01.00,000.00,1.00 +0211,-148.77,+00.00,01.00,000.00,1.00 +0212,-147.76,+00.00,01.00,000.00,1.00 +0213,-146.76,+00.00,01.00,000.00,1.00 +0214,-145.76,+00.00,01.00,000.00,1.00 +0215,-144.76,+00.00,01.00,000.00,1.00 +0216,-143.76,+00.00,01.00,000.00,1.00 +0217,-142.76,+00.00,01.00,000.00,1.00 +0218,-141.76,+00.00,01.00,000.00,1.00 +0219,-140.76,+00.00,01.00,000.00,1.00 +0220,-139.76,+00.00,01.00,000.00,1.00 +0221,-138.75,+00.00,01.00,000.00,1.00 +0222,-137.75,+00.00,01.00,000.00,1.00 +0223,-136.75,+00.00,01.00,000.00,1.00 +0224,-135.75,+00.00,01.00,000.00,1.00 +0225,-134.75,+00.00,01.00,000.00,1.00 +0226,-133.75,+00.00,01.00,000.00,1.00 +0227,-132.75,+00.00,01.00,000.00,1.00 +0228,-131.75,+00.00,01.00,000.00,1.00 +0229,-130.75,+00.00,01.00,000.00,1.00 +0230,-129.74,+00.00,01.00,000.00,1.00 +0231,-128.74,+00.00,01.00,000.00,1.00 +0232,-127.74,+00.00,01.00,000.00,1.00 +0233,-126.74,+00.00,01.00,000.00,1.00 +0234,-125.74,+00.00,01.00,000.00,1.00 +0235,-124.74,+00.00,01.00,000.00,1.00 +0236,-123.74,+00.00,01.00,000.00,1.00 +0237,-122.74,+00.00,01.00,000.00,1.00 +0238,-121.74,+00.00,01.00,000.00,1.00 +0239,-120.73,+00.00,01.00,000.00,1.00 +0240,-119.73,+00.00,01.00,000.00,1.00 +0241,-118.73,+00.00,01.00,000.00,1.00 +0242,-117.73,+00.00,01.00,000.00,1.00 +0243,-116.73,+00.00,01.00,000.00,1.00 +0244,-115.73,+00.00,01.00,000.00,1.00 +0245,-114.73,+00.00,01.00,000.00,1.00 +0246,-113.73,+00.00,01.00,000.00,1.00 +0247,-112.73,+00.00,01.00,000.00,1.00 +0248,-111.72,+00.00,01.00,000.00,1.00 +0249,-110.72,+00.00,01.00,000.00,1.00 +0250,-109.72,+00.00,01.00,000.00,1.00 +0251,-108.72,+00.00,01.00,000.00,1.00 +0252,-107.72,+00.00,01.00,000.00,1.00 +0253,-106.72,+00.00,01.00,000.00,1.00 +0254,-105.72,+00.00,01.00,000.00,1.00 +0255,-104.72,+00.00,01.00,000.00,1.00 +0256,-103.72,+00.00,01.00,000.00,1.00 +0257,-102.71,+00.00,01.00,000.00,1.00 +0258,-101.71,+00.00,01.00,000.00,1.00 +0259,-100.71,+00.00,01.00,000.00,1.00 +0260,-099.71,+00.00,01.00,000.00,1.00 +0261,-098.71,+00.00,01.00,000.00,1.00 +0262,-097.71,+00.00,01.00,000.00,1.00 +0263,-096.71,+00.00,01.00,000.00,1.00 +0264,-095.71,+00.00,01.00,000.00,1.00 +0265,-094.71,+00.00,01.00,000.00,1.00 +0266,-093.70,+00.00,01.00,000.00,1.00 +0267,-092.70,+00.00,01.00,000.00,1.00 +0268,-091.70,+00.00,01.00,000.00,1.00 +0269,-090.70,+00.00,01.00,000.00,1.00 +0270,-089.70,+00.00,01.00,000.00,1.00 +0271,-088.70,+00.00,01.00,000.00,1.00 +0272,-087.70,+00.00,01.00,000.00,1.00 +0273,-086.70,+00.00,01.00,000.00,1.00 +0274,-085.70,+00.00,01.00,000.00,1.00 +0275,-084.69,+00.00,01.00,000.00,1.00 +0276,-083.69,+00.00,01.00,000.00,1.00 +0277,-082.69,+00.00,01.00,000.00,1.00 +0278,-081.69,+00.00,01.00,000.00,1.00 +0279,-080.69,+00.00,01.00,000.00,1.00 +0280,-079.69,+00.00,01.00,000.00,1.00 +0281,-078.69,+00.00,01.00,000.00,1.00 +0282,-077.69,+00.00,01.00,000.00,1.00 +0283,-076.69,+00.00,01.00,000.00,1.00 +0284,-075.68,+00.00,01.00,000.00,1.00 +0285,-074.68,+00.00,01.00,000.00,1.00 +0286,-073.68,+00.00,01.00,000.00,1.00 +0287,-072.68,+00.00,01.00,000.00,1.00 +0288,-071.68,+00.00,01.00,000.00,1.00 +0289,-070.68,+00.00,01.00,000.00,1.00 +0290,-069.68,+00.00,01.00,000.00,1.00 +0291,-068.68,+00.00,01.00,000.00,1.00 +0292,-067.68,+00.00,01.00,000.00,1.00 +0293,-066.67,+00.00,01.00,000.00,1.00 +0294,-065.67,+00.00,01.00,000.00,1.00 +0295,-064.67,+00.00,01.00,000.00,1.00 +0296,-063.67,+00.00,01.00,000.00,1.00 +0297,-062.67,+00.00,01.00,000.00,1.00 +0298,-061.67,+00.00,01.00,000.00,1.00 +0299,-060.67,+00.00,01.00,000.00,1.00 +0300,-059.67,+00.00,01.00,000.00,1.00 +0301,-058.67,+00.00,01.00,000.00,1.00 +0302,-057.66,+00.00,01.00,000.00,1.00 +0303,-056.66,+00.00,01.00,000.00,1.00 +0304,-055.66,+00.00,01.00,000.00,1.00 +0305,-054.66,+00.00,01.00,000.00,1.00 +0306,-053.66,+00.00,01.00,000.00,1.00 +0307,-052.66,+00.00,01.00,000.00,1.00 +0308,-051.66,+00.00,01.00,000.00,1.00 +0309,-050.66,+00.00,01.00,000.00,1.00 +0310,-049.66,+00.00,01.00,000.00,1.00 +0311,-048.65,+00.00,01.00,000.00,1.00 +0312,-047.65,+00.00,01.00,000.00,1.00 +0313,-046.65,+00.00,01.00,000.00,1.00 +0314,-045.65,+00.00,01.00,000.00,1.00 +0315,-044.65,+00.00,01.00,000.00,1.00 +0316,-043.65,+00.00,01.00,000.00,1.00 +0317,-042.65,+00.00,01.00,000.00,1.00 +0318,-041.65,+00.00,01.00,000.00,1.00 +0319,-040.65,+00.00,01.00,000.00,1.00 +0320,-039.64,+00.00,01.00,000.00,1.00 +0321,-038.64,+00.00,01.00,000.00,1.00 +0322,-037.64,+00.00,01.00,000.00,1.00 +0323,-036.64,+00.00,01.00,000.00,1.00 +0324,-035.64,+00.00,01.00,000.00,1.00 +0325,-034.64,+00.00,01.00,000.00,1.00 +0326,-033.64,+00.00,01.00,000.00,1.00 +0327,-032.64,+00.00,01.00,000.00,1.00 +0328,-031.64,+00.00,01.00,000.00,1.00 +0329,-030.63,+00.00,01.00,000.00,1.00 +0330,-029.63,+00.00,01.00,000.00,1.00 +0331,-028.63,+00.00,01.00,000.00,1.00 +0332,-027.63,+00.00,01.00,000.00,1.00 +0333,-026.63,+00.00,01.00,000.00,1.00 +0334,-025.63,+00.00,01.00,000.00,1.00 +0335,-024.63,+00.00,01.00,000.00,1.00 +0336,-023.63,+00.00,01.00,000.00,1.00 +0337,-022.63,+00.00,01.00,000.00,1.00 +0338,-021.62,+00.00,01.00,000.00,1.00 +0339,-020.62,+00.00,01.00,000.00,1.00 +0340,-019.62,+00.00,01.00,000.00,1.00 +0341,-018.62,+00.00,01.00,000.00,1.00 +0342,-017.62,+00.00,01.00,000.00,1.00 +0343,-016.62,+00.00,01.00,000.00,1.00 +0344,-015.62,+00.00,01.00,000.00,1.00 +0345,-014.62,+00.00,01.00,000.00,1.00 +0346,-013.62,+00.00,01.00,000.00,1.00 +0347,-012.61,+00.00,01.00,000.00,1.00 +0348,-011.61,+00.00,01.00,000.00,1.00 +0349,-010.61,+00.00,01.00,000.00,1.00 +0350,-009.61,+00.00,01.00,000.00,1.00 +0351,-008.61,+00.00,01.00,000.00,1.00 +0352,-007.61,+00.00,01.00,000.00,1.00 +0353,-006.61,+00.00,01.00,000.00,1.00 +0354,-005.61,+00.00,01.00,000.00,1.00 +0355,-004.61,+00.00,01.00,000.00,1.00 +0356,-003.60,+00.00,01.00,000.00,1.00 +0357,-002.60,+00.00,01.00,000.00,1.00 +0358,-001.60,+00.00,01.00,000.00,1.00 +0359,-000.60,+00.00,01.00,000.00,1.00 +0360,+000.40,+00.00,01.00,000.00,1.00 +0361,+001.40,+00.00,01.00,000.00,1.00 +0362,+002.40,+00.00,01.00,000.00,1.00 +0363,+003.40,+00.00,01.00,000.00,1.00 +0364,+004.40,+00.00,01.00,000.00,1.00 +0365,+005.41,+00.00,01.00,000.00,1.00 +0366,+006.41,+00.00,01.00,000.00,1.00 +0367,+007.41,+00.00,01.00,000.00,1.00 +0368,+008.41,+00.00,01.00,000.00,1.00 +0369,+009.41,+00.00,01.00,000.00,1.00 +0370,+010.41,+00.00,01.00,000.00,1.00 +0371,+011.41,+00.00,01.00,000.00,1.00 +0372,+012.41,+00.00,01.00,000.00,1.00 +0373,+013.41,+00.00,01.00,000.00,1.00 +0374,+014.42,+00.00,01.00,000.00,1.00 +0375,+015.42,+00.00,01.00,000.00,1.00 +0376,+016.42,+00.00,01.00,000.00,1.00 +0377,+017.42,+00.00,01.00,000.00,1.00 +0378,+018.42,+00.00,01.00,000.00,1.00 +0379,+019.42,+00.00,01.00,000.00,1.00 +0380,+020.42,+00.00,01.00,000.00,1.00 +0381,+021.42,+00.00,01.00,000.00,1.00 +0382,+022.42,+00.00,01.00,000.00,1.00 +0383,+023.43,+00.00,01.00,000.00,1.00 +0384,+024.43,+00.00,01.00,000.00,1.00 +0385,+025.43,+00.00,01.00,000.00,1.00 +0386,+026.43,+00.00,01.00,000.00,1.00 +0387,+027.43,+00.00,01.00,000.00,1.00 +0388,+028.43,+00.00,01.00,000.00,1.00 +0389,+029.43,+00.00,01.00,000.00,1.00 +0390,+030.43,+00.00,01.00,000.00,1.00 +0391,+031.43,+00.00,01.00,000.00,1.00 +0392,+032.44,+00.00,01.00,000.00,1.00 +0393,+033.44,+00.00,01.00,000.00,1.00 +0394,+034.44,+00.00,01.00,000.00,1.00 +0395,+035.44,+00.00,01.00,000.00,1.00 +0396,+036.44,+00.00,01.00,000.00,1.00 +0397,+037.44,+00.00,01.00,000.00,1.00 +0398,+038.44,+00.00,01.00,000.00,1.00 +0399,+039.44,+00.00,01.00,000.00,1.00 +0400,+040.44,+00.00,01.00,000.00,1.00 +0401,+041.45,+00.00,01.00,000.00,1.00 +0402,+042.45,+00.00,01.00,000.00,1.00 +0403,+043.45,+00.00,01.00,000.00,1.00 +0404,+044.45,+00.00,01.00,000.00,1.00 +0405,+045.45,+00.00,01.00,000.00,1.00 +0406,+046.45,+00.00,01.00,000.00,1.00 +0407,+047.45,+00.00,01.00,000.00,1.00 +0408,+048.45,+00.00,01.00,000.00,1.00 +0409,+049.45,+00.00,01.00,000.00,1.00 +0410,+050.46,+00.00,01.00,000.00,1.00 +0411,+051.46,+00.00,01.00,000.00,1.00 +0412,+052.46,+00.00,01.00,000.00,1.00 +0413,+053.46,+00.00,01.00,000.00,1.00 +0414,+054.46,+00.00,01.00,000.00,1.00 +0415,+055.46,+00.00,01.00,000.00,1.00 +0416,+056.46,+00.00,01.00,000.00,1.00 +0417,+057.46,+00.00,01.00,000.00,1.00 +0418,+058.46,+00.00,01.00,000.00,1.00 +0419,+059.47,+00.00,01.00,000.00,1.00 +0420,+060.47,+00.00,01.00,000.00,1.00 +0421,+061.47,+00.00,01.00,000.00,1.00 +0422,+062.47,+00.00,01.00,000.00,1.00 +0423,+063.47,+00.00,01.00,000.00,1.00 +0424,+064.47,+00.00,01.00,000.00,1.00 +0425,+065.47,+00.00,01.00,000.00,1.00 +0426,+066.47,+00.00,01.00,000.00,1.00 +0427,+067.47,+00.00,01.00,000.00,1.00 +0428,+068.48,+00.00,01.00,000.00,1.00 +0429,+069.48,+00.00,01.00,000.00,1.00 +0430,+070.48,+00.00,01.00,000.00,1.00 +0431,+071.48,+00.00,01.00,000.00,1.00 +0432,+072.48,+00.00,01.00,000.00,1.00 +0433,+073.48,+00.00,01.00,000.00,1.00 +0434,+074.48,+00.00,01.00,000.00,1.00 +0435,+075.48,+00.00,01.00,000.00,1.00 +0436,+076.48,+00.00,01.00,000.00,1.00 +0437,+077.49,+00.00,01.00,000.00,1.00 +0438,+078.49,+00.00,01.00,000.00,1.00 +0439,+079.49,+00.00,01.00,000.00,1.00 +0440,+080.49,+00.00,01.00,000.00,1.00 +0441,+081.49,+00.00,01.00,000.00,1.00 +0442,+082.49,+00.00,01.00,000.00,1.00 +0443,+083.49,+00.00,01.00,000.00,1.00 +0444,+084.49,+00.00,01.00,000.00,1.00 +0445,+085.49,+00.00,01.00,000.00,1.00 +0446,+086.50,+00.00,01.00,000.00,1.00 +0447,+087.50,+00.00,01.00,000.00,1.00 +0448,+088.50,+00.00,01.00,000.00,1.00 +0449,+089.50,+00.00,01.00,000.00,1.00 +0450,+090.50,+00.00,01.00,000.00,1.00 +0451,+091.50,+00.00,01.00,000.00,1.00 +0452,+092.50,+00.00,01.00,000.00,1.00 +0453,+093.50,+00.00,01.00,000.00,1.00 +0454,+094.51,+00.00,01.00,000.00,1.00 +0455,+095.51,+00.00,01.00,000.00,1.00 +0456,+096.51,+00.00,01.00,000.00,1.00 +0457,+097.51,+00.00,01.00,000.00,1.00 +0458,+098.51,+00.00,01.00,000.00,1.00 +0459,+099.51,+00.00,01.00,000.00,1.00 +0460,+100.51,+00.00,01.00,000.00,1.00 +0461,+101.51,+00.00,01.00,000.00,1.00 +0462,+102.51,+00.00,01.00,000.00,1.00 +0463,+103.52,+00.00,01.00,000.00,1.00 +0464,+104.52,+00.00,01.00,000.00,1.00 +0465,+105.52,+00.00,01.00,000.00,1.00 +0466,+106.52,+00.00,01.00,000.00,1.00 +0467,+107.52,+00.00,01.00,000.00,1.00 +0468,+108.52,+00.00,01.00,000.00,1.00 +0469,+109.52,+00.00,01.00,000.00,1.00 +0470,+110.52,+00.00,01.00,000.00,1.00 +0471,+111.52,+00.00,01.00,000.00,1.00 +0472,+112.53,+00.00,01.00,000.00,1.00 +0473,+113.53,+00.00,01.00,000.00,1.00 +0474,+114.53,+00.00,01.00,000.00,1.00 +0475,+115.53,+00.00,01.00,000.00,1.00 +0476,+116.53,+00.00,01.00,000.00,1.00 +0477,+117.53,+00.00,01.00,000.00,1.00 +0478,+118.53,+00.00,01.00,000.00,1.00 +0479,+119.53,+00.00,01.00,000.00,1.00 +0480,+120.53,+00.00,01.00,000.00,1.00 +0481,+121.54,+00.00,01.00,000.00,1.00 +0482,+122.54,+00.00,01.00,000.00,1.00 +0483,+123.54,+00.00,01.00,000.00,1.00 +0484,+124.54,+00.00,01.00,000.00,1.00 +0485,+125.54,+00.00,01.00,000.00,1.00 +0486,+126.54,+00.00,01.00,000.00,1.00 +0487,+127.54,+00.00,01.00,000.00,1.00 +0488,+128.54,+00.00,01.00,000.00,1.00 +0489,+129.54,+00.00,01.00,000.00,1.00 +0490,+130.55,+00.00,01.00,000.00,1.00 +0491,+131.55,+00.00,01.00,000.00,1.00 +0492,+132.55,+00.00,01.00,000.00,1.00 +0493,+133.55,+00.00,01.00,000.00,1.00 +0494,+134.55,+00.00,01.00,000.00,1.00 +0495,+135.55,+00.00,01.00,000.00,1.00 +0496,+136.55,+00.00,01.00,000.00,1.00 +0497,+137.55,+00.00,01.00,000.00,1.00 +0498,+138.55,+00.00,01.00,000.00,1.00 +0499,+139.56,+00.00,01.00,000.00,1.00 +0500,+140.56,+00.00,01.00,000.00,1.00 +0501,+141.56,+00.00,01.00,000.00,1.00 +0502,+142.56,+00.00,01.00,000.00,1.00 +0503,+143.56,+00.00,01.00,000.00,1.00 +0504,+144.56,+00.00,01.00,000.00,1.00 +0505,+145.56,+00.00,01.00,000.00,1.00 +0506,+146.56,+00.00,01.00,000.00,1.00 +0507,+147.56,+00.00,01.00,000.00,1.00 +0508,+148.57,+00.00,01.00,000.00,1.00 +0509,+149.57,+00.00,01.00,000.00,1.00 +0510,+150.57,+00.00,01.00,000.00,1.00 +0511,+151.57,+00.00,01.00,000.00,1.00 +0512,+152.57,+00.00,01.00,000.00,1.00 +0513,+153.57,+00.00,01.00,000.00,1.00 +0514,+154.57,+00.00,01.00,000.00,1.00 +0515,+155.57,+00.00,01.00,000.00,1.00 +0516,+156.57,+00.00,01.00,000.00,1.00 +0517,+157.58,+00.00,01.00,000.00,1.00 +0518,+158.58,+00.00,01.00,000.00,1.00 +0519,+159.58,+00.00,01.00,000.00,1.00 +0520,+160.58,+00.00,01.00,000.00,1.00 +0521,+161.58,+00.00,01.00,000.00,1.00 +0522,+162.58,+00.00,01.00,000.00,1.00 +0523,+163.58,+00.00,01.00,000.00,1.00 +0524,+164.58,+00.00,01.00,000.00,1.00 +0525,+165.58,+00.00,01.00,000.00,1.00 +0526,+166.59,+00.00,01.00,000.00,1.00 +0527,+167.59,+00.00,01.00,000.00,1.00 +0528,+168.59,+00.00,01.00,000.00,1.00 +0529,+169.59,+00.00,01.00,000.00,1.00 +0530,+170.59,+00.00,01.00,000.00,1.00 +0531,+171.59,+00.00,01.00,000.00,1.00 +0532,+172.59,+00.00,01.00,000.00,1.00 +0533,+173.59,+00.00,01.00,000.00,1.00 +0534,+174.59,+00.00,01.00,000.00,1.00 +0535,+175.60,+00.00,01.00,000.00,1.00 +0536,+176.60,+00.00,01.00,000.00,1.00 +0537,+177.60,+00.00,01.00,000.00,1.00 +0538,+178.60,+00.00,01.00,000.00,1.00 +0539,+179.60,+00.00,01.00,000.00,1.00 +0540,-179.40,+00.00,01.00,000.00,1.00 +0541,-178.40,+00.00,01.00,000.00,1.00 +0542,-177.40,+00.00,01.00,000.00,1.00 +0543,-176.40,+00.00,01.00,000.00,1.00 +0544,-175.39,+00.00,01.00,000.00,1.00 +0545,-174.39,+00.00,01.00,000.00,1.00 +0546,-173.39,+00.00,01.00,000.00,1.00 +0547,-172.39,+00.00,01.00,000.00,1.00 +0548,-171.39,+00.00,01.00,000.00,1.00 +0549,-170.39,+00.00,01.00,000.00,1.00 +0550,-169.39,+00.00,01.00,000.00,1.00 +0551,-168.39,+00.00,01.00,000.00,1.00 +0552,-167.39,+00.00,01.00,000.00,1.00 +0553,-166.38,+00.00,01.00,000.00,1.00 +0554,-165.38,+00.00,01.00,000.00,1.00 +0555,-164.38,+00.00,01.00,000.00,1.00 +0556,-163.38,+00.00,01.00,000.00,1.00 +0557,-162.38,+00.00,01.00,000.00,1.00 +0558,-161.38,+00.00,01.00,000.00,1.00 +0559,-160.38,+00.00,01.00,000.00,1.00 +0560,-159.38,+00.00,01.00,000.00,1.00 +0561,-158.38,+00.00,01.00,000.00,1.00 +0562,-157.37,+00.00,01.00,000.00,1.00 +0563,-156.37,+00.00,01.00,000.00,1.00 +0564,-155.37,+00.00,01.00,000.00,1.00 +0565,-154.37,+00.00,01.00,000.00,1.00 +0566,-153.37,+00.00,01.00,000.00,1.00 +0567,-152.37,+00.00,01.00,000.00,1.00 +0568,-151.37,+00.00,01.00,000.00,1.00 +0569,-150.37,+00.00,01.00,000.00,1.00 +0570,-149.37,+00.00,01.00,000.00,1.00 +0571,-148.36,+00.00,01.00,000.00,1.00 +0572,-147.36,+00.00,01.00,000.00,1.00 +0573,-146.36,+00.00,01.00,000.00,1.00 +0574,-145.36,+00.00,01.00,000.00,1.00 +0575,-144.36,+00.00,01.00,000.00,1.00 +0576,-143.36,+00.00,01.00,000.00,1.00 +0577,-142.36,+00.00,01.00,000.00,1.00 +0578,-141.36,+00.00,01.00,000.00,1.00 +0579,-140.36,+00.00,01.00,000.00,1.00 +0580,-139.35,+00.00,01.00,000.00,1.00 +0581,-138.35,+00.00,01.00,000.00,1.00 +0582,-137.35,+00.00,01.00,000.00,1.00 +0583,-136.35,+00.00,01.00,000.00,1.00 +0584,-135.35,+00.00,01.00,000.00,1.00 +0585,-134.35,+00.00,01.00,000.00,1.00 +0586,-133.35,+00.00,01.00,000.00,1.00 +0587,-132.35,+00.00,01.00,000.00,1.00 +0588,-131.35,+00.00,01.00,000.00,1.00 +0589,-130.34,+00.00,01.00,000.00,1.00 +0590,-129.34,+00.00,01.00,000.00,1.00 +0591,-128.34,+00.00,01.00,000.00,1.00 +0592,-127.34,+00.00,01.00,000.00,1.00 +0593,-126.34,+00.00,01.00,000.00,1.00 +0594,-125.34,+00.00,01.00,000.00,1.00 +0595,-124.34,+00.00,01.00,000.00,1.00 +0596,-123.34,+00.00,01.00,000.00,1.00 +0597,-122.34,+00.00,01.00,000.00,1.00 +0598,-121.33,+00.00,01.00,000.00,1.00 +0599,-120.33,+00.00,01.00,000.00,1.00 +0600,-119.33,+00.00,01.00,000.00,1.00 +0601,-118.33,+00.00,01.00,000.00,1.00 +0602,-117.33,+00.00,01.00,000.00,1.00 +0603,-116.33,+00.00,01.00,000.00,1.00 +0604,-115.33,+00.00,01.00,000.00,1.00 +0605,-114.33,+00.00,01.00,000.00,1.00 +0606,-113.33,+00.00,01.00,000.00,1.00 +0607,-112.32,+00.00,01.00,000.00,1.00 +0608,-111.32,+00.00,01.00,000.00,1.00 +0609,-110.32,+00.00,01.00,000.00,1.00 +0610,-109.32,+00.00,01.00,000.00,1.00 +0611,-108.32,+00.00,01.00,000.00,1.00 +0612,-107.32,+00.00,01.00,000.00,1.00 +0613,-106.32,+00.00,01.00,000.00,1.00 +0614,-105.32,+00.00,01.00,000.00,1.00 +0615,-104.32,+00.00,01.00,000.00,1.00 +0616,-103.31,+00.00,01.00,000.00,1.00 +0617,-102.31,+00.00,01.00,000.00,1.00 +0618,-101.31,+00.00,01.00,000.00,1.00 +0619,-100.31,+00.00,01.00,000.00,1.00 +0620,-099.31,+00.00,01.00,000.00,1.00 +0621,-098.31,+00.00,01.00,000.00,1.00 +0622,-097.31,+00.00,01.00,000.00,1.00 +0623,-096.31,+00.00,01.00,000.00,1.00 +0624,-095.31,+00.00,01.00,000.00,1.00 +0625,-094.30,+00.00,01.00,000.00,1.00 +0626,-093.30,+00.00,01.00,000.00,1.00 +0627,-092.30,+00.00,01.00,000.00,1.00 +0628,-091.30,+00.00,01.00,000.00,1.00 +0629,-090.30,+00.00,01.00,000.00,1.00 +0630,-089.30,+00.00,01.00,000.00,1.00 +0631,-088.30,+00.00,01.00,000.00,1.00 +0632,-087.30,+00.00,01.00,000.00,1.00 +0633,-086.30,+00.00,01.00,000.00,1.00 +0634,-085.29,+00.00,01.00,000.00,1.00 +0635,-084.29,+00.00,01.00,000.00,1.00 +0636,-083.29,+00.00,01.00,000.00,1.00 +0637,-082.29,+00.00,01.00,000.00,1.00 +0638,-081.29,+00.00,01.00,000.00,1.00 +0639,-080.29,+00.00,01.00,000.00,1.00 +0640,-079.29,+00.00,01.00,000.00,1.00 +0641,-078.29,+00.00,01.00,000.00,1.00 +0642,-077.29,+00.00,01.00,000.00,1.00 +0643,-076.28,+00.00,01.00,000.00,1.00 +0644,-075.28,+00.00,01.00,000.00,1.00 +0645,-074.28,+00.00,01.00,000.00,1.00 +0646,-073.28,+00.00,01.00,000.00,1.00 +0647,-072.28,+00.00,01.00,000.00,1.00 +0648,-071.28,+00.00,01.00,000.00,1.00 +0649,-070.28,+00.00,01.00,000.00,1.00 +0650,-069.28,+00.00,01.00,000.00,1.00 +0651,-068.28,+00.00,01.00,000.00,1.00 +0652,-067.27,+00.00,01.00,000.00,1.00 +0653,-066.27,+00.00,01.00,000.00,1.00 +0654,-065.27,+00.00,01.00,000.00,1.00 +0655,-064.27,+00.00,01.00,000.00,1.00 +0656,-063.27,+00.00,01.00,000.00,1.00 +0657,-062.27,+00.00,01.00,000.00,1.00 +0658,-061.27,+00.00,01.00,000.00,1.00 +0659,-060.27,+00.00,01.00,000.00,1.00 +0660,-059.27,+00.00,01.00,000.00,1.00 +0661,-058.26,+00.00,01.00,000.00,1.00 +0662,-057.26,+00.00,01.00,000.00,1.00 +0663,-056.26,+00.00,01.00,000.00,1.00 +0664,-055.26,+00.00,01.00,000.00,1.00 +0665,-054.26,+00.00,01.00,000.00,1.00 +0666,-053.26,+00.00,01.00,000.00,1.00 +0667,-052.26,+00.00,01.00,000.00,1.00 +0668,-051.26,+00.00,01.00,000.00,1.00 +0669,-050.26,+00.00,01.00,000.00,1.00 +0670,-049.25,+00.00,01.00,000.00,1.00 +0671,-048.25,+00.00,01.00,000.00,1.00 +0672,-047.25,+00.00,01.00,000.00,1.00 +0673,-046.25,+00.00,01.00,000.00,1.00 +0674,-045.25,+00.00,01.00,000.00,1.00 +0675,-044.25,+00.00,01.00,000.00,1.00 +0676,-043.25,+00.00,01.00,000.00,1.00 +0677,-042.25,+00.00,01.00,000.00,1.00 +0678,-041.25,+00.00,01.00,000.00,1.00 +0679,-040.24,+00.00,01.00,000.00,1.00 +0680,-039.24,+00.00,01.00,000.00,1.00 +0681,-038.24,+00.00,01.00,000.00,1.00 +0682,-037.24,+00.00,01.00,000.00,1.00 +0683,-036.24,+00.00,01.00,000.00,1.00 +0684,-035.24,+00.00,01.00,000.00,1.00 +0685,-034.24,+00.00,01.00,000.00,1.00 +0686,-033.24,+00.00,01.00,000.00,1.00 +0687,-032.24,+00.00,01.00,000.00,1.00 +0688,-031.23,+00.00,01.00,000.00,1.00 +0689,-030.23,+00.00,01.00,000.00,1.00 +0690,-029.23,+00.00,01.00,000.00,1.00 +0691,-028.23,+00.00,01.00,000.00,1.00 +0692,-027.23,+00.00,01.00,000.00,1.00 +0693,-026.23,+00.00,01.00,000.00,1.00 +0694,-025.23,+00.00,01.00,000.00,1.00 +0695,-024.23,+00.00,01.00,000.00,1.00 +0696,-023.23,+00.00,01.00,000.00,1.00 +0697,-022.22,+00.00,01.00,000.00,1.00 +0698,-021.22,+00.00,01.00,000.00,1.00 +0699,-020.22,+00.00,01.00,000.00,1.00 +0700,-019.22,+00.00,01.00,000.00,1.00 +0701,-018.22,+00.00,01.00,000.00,1.00 +0702,-017.22,+00.00,01.00,000.00,1.00 +0703,-016.22,+00.00,01.00,000.00,1.00 +0704,-015.22,+00.00,01.00,000.00,1.00 +0705,-014.22,+00.00,01.00,000.00,1.00 +0706,-013.21,+00.00,01.00,000.00,1.00 +0707,-012.21,+00.00,01.00,000.00,1.00 +0708,-011.21,+00.00,01.00,000.00,1.00 +0709,-010.21,+00.00,01.00,000.00,1.00 +0710,-009.21,+00.00,01.00,000.00,1.00 +0711,-008.21,+00.00,01.00,000.00,1.00 +0712,-007.21,+00.00,01.00,000.00,1.00 +0713,-006.21,+00.00,01.00,000.00,1.00 +0714,-005.21,+00.00,01.00,000.00,1.00 +0715,-004.20,+00.00,01.00,000.00,1.00 +0716,-003.20,+00.00,01.00,000.00,1.00 +0717,-002.20,+00.00,01.00,000.00,1.00 +0718,-001.20,+00.00,01.00,000.00,1.00 +0719,-000.20,+00.00,01.00,000.00,1.00 +0720,+000.80,+00.00,01.00,000.00,1.00 +0721,+001.80,+00.00,01.00,000.00,1.00 +0722,+002.80,+00.00,01.00,000.00,1.00 +0723,+003.80,+00.00,01.00,000.00,1.00 +0724,+004.81,+00.00,01.00,000.00,1.00 +0725,+005.81,+00.00,01.00,000.00,1.00 +0726,+006.81,+00.00,01.00,000.00,1.00 +0727,+007.81,+00.00,01.00,000.00,1.00 +0728,+008.81,+00.00,01.00,000.00,1.00 +0729,+009.81,+00.00,01.00,000.00,1.00 +0730,+010.81,+00.00,01.00,000.00,1.00 +0731,+011.81,+00.00,01.00,000.00,1.00 +0732,+012.81,+00.00,01.00,000.00,1.00 +0733,+013.82,+00.00,01.00,000.00,1.00 +0734,+014.82,+00.00,01.00,000.00,1.00 +0735,+015.82,+00.00,01.00,000.00,1.00 +0736,+016.82,+00.00,01.00,000.00,1.00 +0737,+017.82,+00.00,01.00,000.00,1.00 +0738,+018.82,+00.00,01.00,000.00,1.00 +0739,+019.82,+00.00,01.00,000.00,1.00 +0740,+020.82,+00.00,01.00,000.00,1.00 +0741,+021.82,+00.00,01.00,000.00,1.00 +0742,+022.83,+00.00,01.00,000.00,1.00 +0743,+023.83,+00.00,01.00,000.00,1.00 +0744,+024.83,+00.00,01.00,000.00,1.00 +0745,+025.83,+00.00,01.00,000.00,1.00 +0746,+026.83,+00.00,01.00,000.00,1.00 +0747,+027.83,+00.00,01.00,000.00,1.00 +0748,+028.83,+00.00,01.00,000.00,1.00 +0749,+029.83,+00.00,01.00,000.00,1.00 +0750,+030.83,+00.00,01.00,000.00,1.00 +0751,+031.84,+00.00,01.00,000.00,1.00 +0752,+032.84,+00.00,01.00,000.00,1.00 +0753,+033.84,+00.00,01.00,000.00,1.00 +0754,+034.84,+00.00,01.00,000.00,1.00 +0755,+035.84,+00.00,01.00,000.00,1.00 +0756,+036.84,+00.00,01.00,000.00,1.00 +0757,+037.84,+00.00,01.00,000.00,1.00 +0758,+038.84,+00.00,01.00,000.00,1.00 +0759,+039.84,+00.00,01.00,000.00,1.00 +0760,+040.85,+00.00,01.00,000.00,1.00 +0761,+041.85,+00.00,01.00,000.00,1.00 +0762,+042.85,+00.00,01.00,000.00,1.00 +0763,+043.85,+00.00,01.00,000.00,1.00 +0764,+044.85,+00.00,01.00,000.00,1.00 +0765,+045.85,+00.00,01.00,000.00,1.00 +0766,+046.85,+00.00,01.00,000.00,1.00 +0767,+047.85,+00.00,01.00,000.00,1.00 +0768,+048.85,+00.00,01.00,000.00,1.00 +0769,+049.86,+00.00,01.00,000.00,1.00 +0770,+050.86,+00.00,01.00,000.00,1.00 +0771,+051.86,+00.00,01.00,000.00,1.00 +0772,+052.86,+00.00,01.00,000.00,1.00 +0773,+053.86,+00.00,01.00,000.00,1.00 +0774,+054.86,+00.00,01.00,000.00,1.00 +0775,+055.86,+00.00,01.00,000.00,1.00 +0776,+056.86,+00.00,01.00,000.00,1.00 +0777,+057.86,+00.00,01.00,000.00,1.00 +0778,+058.87,+00.00,01.00,000.00,1.00 +0779,+059.87,+00.00,01.00,000.00,1.00 +0780,+060.87,+00.00,01.00,000.00,1.00 +0781,+061.87,+00.00,01.00,000.00,1.00 +0782,+062.87,+00.00,01.00,000.00,1.00 +0783,+063.87,+00.00,01.00,000.00,1.00 +0784,+064.87,+00.00,01.00,000.00,1.00 +0785,+065.87,+00.00,01.00,000.00,1.00 +0786,+066.87,+00.00,01.00,000.00,1.00 +0787,+067.88,+00.00,01.00,000.00,1.00 +0788,+068.88,+00.00,01.00,000.00,1.00 +0789,+069.88,+00.00,01.00,000.00,1.00 +0790,+070.88,+00.00,01.00,000.00,1.00 +0791,+071.88,+00.00,01.00,000.00,1.00 +0792,+072.88,+00.00,01.00,000.00,1.00 +0793,+073.88,+00.00,01.00,000.00,1.00 +0794,+074.88,+00.00,01.00,000.00,1.00 +0795,+075.88,+00.00,01.00,000.00,1.00 +0796,+076.89,+00.00,01.00,000.00,1.00 +0797,+077.89,+00.00,01.00,000.00,1.00 +0798,+078.89,+00.00,01.00,000.00,1.00 +0799,+079.89,+00.00,01.00,000.00,1.00 +0800,+080.89,+00.00,01.00,000.00,1.00 +0801,+081.89,+00.00,01.00,000.00,1.00 +0802,+082.89,+00.00,01.00,000.00,1.00 +0803,+083.89,+00.00,01.00,000.00,1.00 +0804,+084.89,+00.00,01.00,000.00,1.00 +0805,+085.90,+00.00,01.00,000.00,1.00 +0806,+086.90,+00.00,01.00,000.00,1.00 +0807,+087.90,+00.00,01.00,000.00,1.00 +0808,+088.90,+00.00,01.00,000.00,1.00 +0809,+089.90,+00.00,01.00,000.00,1.00 +0810,+090.90,+00.00,01.00,000.00,1.00 +0811,+091.90,+00.00,01.00,000.00,1.00 +0812,+092.90,+00.00,01.00,000.00,1.00 +0813,+093.90,+00.00,01.00,000.00,1.00 +0814,+094.91,+00.00,01.00,000.00,1.00 +0815,+095.91,+00.00,01.00,000.00,1.00 +0816,+096.91,+00.00,01.00,000.00,1.00 +0817,+097.91,+00.00,01.00,000.00,1.00 +0818,+098.91,+00.00,01.00,000.00,1.00 +0819,+099.91,+00.00,01.00,000.00,1.00 +0820,+100.91,+00.00,01.00,000.00,1.00 +0821,+101.91,+00.00,01.00,000.00,1.00 +0822,+102.91,+00.00,01.00,000.00,1.00 +0823,+103.92,+00.00,01.00,000.00,1.00 +0824,+104.92,+00.00,01.00,000.00,1.00 +0825,+105.92,+00.00,01.00,000.00,1.00 +0826,+106.92,+00.00,01.00,000.00,1.00 +0827,+107.92,+00.00,01.00,000.00,1.00 +0828,+108.92,+00.00,01.00,000.00,1.00 +0829,+109.92,+00.00,01.00,000.00,1.00 +0830,+110.92,+00.00,01.00,000.00,1.00 +0831,+111.92,+00.00,01.00,000.00,1.00 +0832,+112.93,+00.00,01.00,000.00,1.00 +0833,+113.93,+00.00,01.00,000.00,1.00 +0834,+114.93,+00.00,01.00,000.00,1.00 +0835,+115.93,+00.00,01.00,000.00,1.00 +0836,+116.93,+00.00,01.00,000.00,1.00 +0837,+117.93,+00.00,01.00,000.00,1.00 +0838,+118.93,+00.00,01.00,000.00,1.00 +0839,+119.93,+00.00,01.00,000.00,1.00 +0840,+120.93,+00.00,01.00,000.00,1.00 +0841,+121.94,+00.00,01.00,000.00,1.00 +0842,+122.94,+00.00,01.00,000.00,1.00 +0843,+123.94,+00.00,01.00,000.00,1.00 +0844,+124.94,+00.00,01.00,000.00,1.00 +0845,+125.94,+00.00,01.00,000.00,1.00 +0846,+126.94,+00.00,01.00,000.00,1.00 +0847,+127.94,+00.00,01.00,000.00,1.00 +0848,+128.94,+00.00,01.00,000.00,1.00 +0849,+129.94,+00.00,01.00,000.00,1.00 +0850,+130.95,+00.00,01.00,000.00,1.00 +0851,+131.95,+00.00,01.00,000.00,1.00 +0852,+132.95,+00.00,01.00,000.00,1.00 +0853,+133.95,+00.00,01.00,000.00,1.00 +0854,+134.95,+00.00,01.00,000.00,1.00 +0855,+135.95,+00.00,01.00,000.00,1.00 +0856,+136.95,+00.00,01.00,000.00,1.00 +0857,+137.95,+00.00,01.00,000.00,1.00 +0858,+138.95,+00.00,01.00,000.00,1.00 +0859,+139.96,+00.00,01.00,000.00,1.00 +0860,+140.96,+00.00,01.00,000.00,1.00 +0861,+141.96,+00.00,01.00,000.00,1.00 +0862,+142.96,+00.00,01.00,000.00,1.00 +0863,+143.96,+00.00,01.00,000.00,1.00 +0864,+144.96,+00.00,01.00,000.00,1.00 +0865,+145.96,+00.00,01.00,000.00,1.00 +0866,+146.96,+00.00,01.00,000.00,1.00 +0867,+147.96,+00.00,01.00,000.00,1.00 +0868,+148.97,+00.00,01.00,000.00,1.00 +0869,+149.97,+00.00,01.00,000.00,1.00 +0870,+150.97,+00.00,01.00,000.00,1.00 +0871,+151.97,+00.00,01.00,000.00,1.00 +0872,+152.97,+00.00,01.00,000.00,1.00 +0873,+153.97,+00.00,01.00,000.00,1.00 +0874,+154.97,+00.00,01.00,000.00,1.00 +0875,+155.97,+00.00,01.00,000.00,1.00 +0876,+156.97,+00.00,01.00,000.00,1.00 +0877,+157.98,+00.00,01.00,000.00,1.00 +0878,+158.98,+00.00,01.00,000.00,1.00 +0879,+159.98,+00.00,01.00,000.00,1.00 +0880,+160.98,+00.00,01.00,000.00,1.00 +0881,+161.98,+00.00,01.00,000.00,1.00 +0882,+162.98,+00.00,01.00,000.00,1.00 +0883,+163.98,+00.00,01.00,000.00,1.00 +0884,+164.98,+00.00,01.00,000.00,1.00 +0885,+165.98,+00.00,01.00,000.00,1.00 +0886,+166.99,+00.00,01.00,000.00,1.00 +0887,+167.99,+00.00,01.00,000.00,1.00 +0888,+168.99,+00.00,01.00,000.00,1.00 +0889,+169.99,+00.00,01.00,000.00,1.00 +0890,+170.99,+00.00,01.00,000.00,1.00 +0891,+171.99,+00.00,01.00,000.00,1.00 +0892,+172.99,+00.00,01.00,000.00,1.00 +0893,+173.99,+00.00,01.00,000.00,1.00 +0894,+174.99,+00.00,01.00,000.00,1.00 +0895,+176.00,+00.00,01.00,000.00,1.00 +0896,+177.00,+00.00,01.00,000.00,1.00 +0897,+178.00,+00.00,01.00,000.00,1.00 +0898,+179.00,+00.00,01.00,000.00,1.00 +0899,+180.00,+00.00,01.00,000.00,1.00 +0900,-179.00,+00.00,01.00,000.00,1.00 +0901,-178.00,+00.00,01.00,000.00,1.00 +0902,-177.00,+00.00,01.00,000.00,1.00 +0903,-176.00,+00.00,01.00,000.00,1.00 +0904,-174.99,+00.00,01.00,000.00,1.00 +0905,-173.99,+00.00,01.00,000.00,1.00 +0906,-172.99,+00.00,01.00,000.00,1.00 +0907,-171.99,+00.00,01.00,000.00,1.00 +0908,-170.99,+00.00,01.00,000.00,1.00 +0909,-169.99,+00.00,01.00,000.00,1.00 +0910,-168.99,+00.00,01.00,000.00,1.00 +0911,-167.99,+00.00,01.00,000.00,1.00 +0912,-166.99,+00.00,01.00,000.00,1.00 +0913,-165.98,+00.00,01.00,000.00,1.00 +0914,-164.98,+00.00,01.00,000.00,1.00 +0915,-163.98,+00.00,01.00,000.00,1.00 +0916,-162.98,+00.00,01.00,000.00,1.00 +0917,-161.98,+00.00,01.00,000.00,1.00 +0918,-160.98,+00.00,01.00,000.00,1.00 +0919,-159.98,+00.00,01.00,000.00,1.00 +0920,-158.98,+00.00,01.00,000.00,1.00 +0921,-157.98,+00.00,01.00,000.00,1.00 +0922,-156.97,+00.00,01.00,000.00,1.00 +0923,-155.97,+00.00,01.00,000.00,1.00 +0924,-154.97,+00.00,01.00,000.00,1.00 +0925,-153.97,+00.00,01.00,000.00,1.00 +0926,-152.97,+00.00,01.00,000.00,1.00 +0927,-151.97,+00.00,01.00,000.00,1.00 +0928,-150.97,+00.00,01.00,000.00,1.00 +0929,-149.97,+00.00,01.00,000.00,1.00 +0930,-148.97,+00.00,01.00,000.00,1.00 +0931,-147.96,+00.00,01.00,000.00,1.00 +0932,-146.96,+00.00,01.00,000.00,1.00 +0933,-145.96,+00.00,01.00,000.00,1.00 +0934,-144.96,+00.00,01.00,000.00,1.00 +0935,-143.96,+00.00,01.00,000.00,1.00 +0936,-142.96,+00.00,01.00,000.00,1.00 +0937,-141.96,+00.00,01.00,000.00,1.00 +0938,-140.96,+00.00,01.00,000.00,1.00 +0939,-139.96,+00.00,01.00,000.00,1.00 +0940,-138.95,+00.00,01.00,000.00,1.00 +0941,-137.95,+00.00,01.00,000.00,1.00 +0942,-136.95,+00.00,01.00,000.00,1.00 +0943,-135.95,+00.00,01.00,000.00,1.00 +0944,-134.95,+00.00,01.00,000.00,1.00 +0945,-133.95,+00.00,01.00,000.00,1.00 +0946,-132.95,+00.00,01.00,000.00,1.00 +0947,-131.95,+00.00,01.00,000.00,1.00 +0948,-130.95,+00.00,01.00,000.00,1.00 +0949,-129.94,+00.00,01.00,000.00,1.00 +0950,-128.94,+00.00,01.00,000.00,1.00 +0951,-127.94,+00.00,01.00,000.00,1.00 +0952,-126.94,+00.00,01.00,000.00,1.00 +0953,-125.94,+00.00,01.00,000.00,1.00 +0954,-124.94,+00.00,01.00,000.00,1.00 +0955,-123.94,+00.00,01.00,000.00,1.00 +0956,-122.94,+00.00,01.00,000.00,1.00 +0957,-121.94,+00.00,01.00,000.00,1.00 +0958,-120.93,+00.00,01.00,000.00,1.00 +0959,-119.93,+00.00,01.00,000.00,1.00 +0960,-118.93,+00.00,01.00,000.00,1.00 +0961,-117.93,+00.00,01.00,000.00,1.00 +0962,-116.93,+00.00,01.00,000.00,1.00 +0963,-115.93,+00.00,01.00,000.00,1.00 +0964,-114.93,+00.00,01.00,000.00,1.00 +0965,-113.93,+00.00,01.00,000.00,1.00 +0966,-112.93,+00.00,01.00,000.00,1.00 +0967,-111.92,+00.00,01.00,000.00,1.00 +0968,-110.92,+00.00,01.00,000.00,1.00 +0969,-109.92,+00.00,01.00,000.00,1.00 +0970,-108.92,+00.00,01.00,000.00,1.00 +0971,-107.92,+00.00,01.00,000.00,1.00 +0972,-106.92,+00.00,01.00,000.00,1.00 +0973,-105.92,+00.00,01.00,000.00,1.00 +0974,-104.92,+00.00,01.00,000.00,1.00 +0975,-103.92,+00.00,01.00,000.00,1.00 +0976,-102.91,+00.00,01.00,000.00,1.00 +0977,-101.91,+00.00,01.00,000.00,1.00 +0978,-100.91,+00.00,01.00,000.00,1.00 +0979,-099.91,+00.00,01.00,000.00,1.00 +0980,-098.91,+00.00,01.00,000.00,1.00 +0981,-097.91,+00.00,01.00,000.00,1.00 +0982,-096.91,+00.00,01.00,000.00,1.00 +0983,-095.91,+00.00,01.00,000.00,1.00 +0984,-094.91,+00.00,01.00,000.00,1.00 +0985,-093.90,+00.00,01.00,000.00,1.00 +0986,-092.90,+00.00,01.00,000.00,1.00 +0987,-091.90,+00.00,01.00,000.00,1.00 +0988,-090.90,+00.00,01.00,000.00,1.00 +0989,-089.90,+00.00,01.00,000.00,1.00 +0990,-088.90,+00.00,01.00,000.00,1.00 +0991,-087.90,+00.00,01.00,000.00,1.00 +0992,-086.90,+00.00,01.00,000.00,1.00 +0993,-085.90,+00.00,01.00,000.00,1.00 +0994,-084.89,+00.00,01.00,000.00,1.00 +0995,-083.89,+00.00,01.00,000.00,1.00 +0996,-082.89,+00.00,01.00,000.00,1.00 +0997,-081.89,+00.00,01.00,000.00,1.00 +0998,-080.89,+00.00,01.00,000.00,1.00 +0999,-079.89,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t08_ch1.csv b/scripts/td_object_renderer/metadata/csv/t08_ch1.csv new file mode 100644 index 0000000000..ebc98c7aaf --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t08_ch1.csv @@ -0,0 +1,1000 @@ +0000,+000.00,+30.00,01.00,000.00,1.00 +0001,+000.00,+29.99,01.00,000.00,1.00 +0002,+000.00,+29.98,01.00,000.00,1.00 +0003,+000.00,+29.95,01.00,000.00,1.00 +0004,+000.00,+29.92,01.00,000.00,1.00 +0005,+000.00,+29.87,01.00,000.00,1.00 +0006,+000.00,+29.82,01.00,000.00,1.00 +0007,+000.00,+29.75,01.00,000.00,1.00 +0008,+000.00,+29.68,01.00,000.00,1.00 +0009,+000.00,+29.59,01.00,000.00,1.00 +0010,+000.00,+29.50,01.00,000.00,1.00 +0011,+000.00,+29.39,01.00,000.00,1.00 +0012,+000.00,+29.28,01.00,000.00,1.00 +0013,+000.00,+29.15,01.00,000.00,1.00 +0014,+000.00,+29.02,01.00,000.00,1.00 +0015,+000.00,+28.88,01.00,000.00,1.00 +0016,+000.00,+28.72,01.00,000.00,1.00 +0017,+000.00,+28.56,01.00,000.00,1.00 +0018,+000.00,+28.39,01.00,000.00,1.00 +0019,+000.00,+28.21,01.00,000.00,1.00 +0020,+000.00,+28.02,01.00,000.00,1.00 +0021,+000.00,+27.82,01.00,000.00,1.00 +0022,+000.00,+27.61,01.00,000.00,1.00 +0023,+000.00,+27.40,01.00,000.00,1.00 +0024,+000.00,+27.17,01.00,000.00,1.00 +0025,+000.00,+26.94,01.00,000.00,1.00 +0026,+000.00,+26.70,01.00,000.00,1.00 +0027,+000.00,+26.45,01.00,000.00,1.00 +0028,+000.00,+26.19,01.00,000.00,1.00 +0029,+000.00,+25.92,01.00,000.00,1.00 +0030,+000.00,+25.65,01.00,000.00,1.00 +0031,+000.00,+25.37,01.00,000.00,1.00 +0032,+000.00,+25.08,01.00,000.00,1.00 +0033,+000.00,+24.78,01.00,000.00,1.00 +0034,+000.00,+24.48,01.00,000.00,1.00 +0035,+000.00,+24.17,01.00,000.00,1.00 +0036,+000.00,+23.85,01.00,000.00,1.00 +0037,+000.00,+23.52,01.00,000.00,1.00 +0038,+000.00,+23.19,01.00,000.00,1.00 +0039,+000.00,+22.85,01.00,000.00,1.00 +0040,+000.00,+22.51,01.00,000.00,1.00 +0041,+000.00,+22.15,01.00,000.00,1.00 +0042,+000.00,+21.80,01.00,000.00,1.00 +0043,+000.00,+21.43,01.00,000.00,1.00 +0044,+000.00,+21.06,01.00,000.00,1.00 +0045,+000.00,+20.69,01.00,000.00,1.00 +0046,+000.00,+20.30,01.00,000.00,1.00 +0047,+000.00,+19.92,01.00,000.00,1.00 +0048,+000.00,+19.53,01.00,000.00,1.00 +0049,+000.00,+19.13,01.00,000.00,1.00 +0050,+000.00,+18.72,01.00,000.00,1.00 +0051,+000.00,+18.32,01.00,000.00,1.00 +0052,+000.00,+17.90,01.00,000.00,1.00 +0053,+000.00,+17.49,01.00,000.00,1.00 +0054,+000.00,+17.07,01.00,000.00,1.00 +0055,+000.00,+16.64,01.00,000.00,1.00 +0056,+000.00,+16.21,01.00,000.00,1.00 +0057,+000.00,+15.77,01.00,000.00,1.00 +0058,+000.00,+15.34,01.00,000.00,1.00 +0059,+000.00,+14.89,01.00,000.00,1.00 +0060,+000.00,+14.45,01.00,000.00,1.00 +0061,+000.00,+14.00,01.00,000.00,1.00 +0062,+000.00,+13.54,01.00,000.00,1.00 +0063,+000.00,+13.09,01.00,000.00,1.00 +0064,+000.00,+12.63,01.00,000.00,1.00 +0065,+000.00,+12.17,01.00,000.00,1.00 +0066,+000.00,+11.70,01.00,000.00,1.00 +0067,+000.00,+11.23,01.00,000.00,1.00 +0068,+000.00,+10.76,01.00,000.00,1.00 +0069,+000.00,+10.29,01.00,000.00,1.00 +0070,+000.00,+09.81,01.00,000.00,1.00 +0071,+000.00,+09.33,01.00,000.00,1.00 +0072,+000.00,+08.85,01.00,000.00,1.00 +0073,+000.00,+08.37,01.00,000.00,1.00 +0074,+000.00,+07.88,01.00,000.00,1.00 +0075,+000.00,+07.39,01.00,000.00,1.00 +0076,+000.00,+06.91,01.00,000.00,1.00 +0077,+000.00,+06.42,01.00,000.00,1.00 +0078,+000.00,+05.92,01.00,000.00,1.00 +0079,+000.00,+05.43,01.00,000.00,1.00 +0080,+000.00,+04.94,01.00,000.00,1.00 +0081,+000.00,+04.44,01.00,000.00,1.00 +0082,+000.00,+03.94,01.00,000.00,1.00 +0083,+000.00,+03.45,01.00,000.00,1.00 +0084,+000.00,+02.95,01.00,000.00,1.00 +0085,+000.00,+02.45,01.00,000.00,1.00 +0086,+000.00,+01.95,01.00,000.00,1.00 +0087,+000.00,+01.45,01.00,000.00,1.00 +0088,+000.00,+00.95,01.00,000.00,1.00 +0089,+000.00,+00.45,01.00,000.00,1.00 +0090,+000.00,-00.05,01.00,000.00,1.00 +0091,+000.00,-00.55,01.00,000.00,1.00 +0092,+000.00,-01.05,01.00,000.00,1.00 +0093,+000.00,-01.55,01.00,000.00,1.00 +0094,+000.00,-02.05,01.00,000.00,1.00 +0095,+000.00,-02.55,01.00,000.00,1.00 +0096,+000.00,-03.05,01.00,000.00,1.00 +0097,+000.00,-03.55,01.00,000.00,1.00 +0098,+000.00,-04.04,01.00,000.00,1.00 +0099,+000.00,-04.54,01.00,000.00,1.00 +0100,+000.00,-05.04,01.00,000.00,1.00 +0101,+000.00,-05.53,01.00,000.00,1.00 +0102,+000.00,-06.02,01.00,000.00,1.00 +0103,+000.00,-06.51,01.00,000.00,1.00 +0104,+000.00,-07.00,01.00,000.00,1.00 +0105,+000.00,-07.49,01.00,000.00,1.00 +0106,+000.00,-07.98,01.00,000.00,1.00 +0107,+000.00,-08.46,01.00,000.00,1.00 +0108,+000.00,-08.95,01.00,000.00,1.00 +0109,+000.00,-09.43,01.00,000.00,1.00 +0110,+000.00,-09.90,01.00,000.00,1.00 +0111,+000.00,-10.38,01.00,000.00,1.00 +0112,+000.00,-10.85,01.00,000.00,1.00 +0113,+000.00,-11.33,01.00,000.00,1.00 +0114,+000.00,-11.79,01.00,000.00,1.00 +0115,+000.00,-12.26,01.00,000.00,1.00 +0116,+000.00,-12.72,01.00,000.00,1.00 +0117,+000.00,-13.18,01.00,000.00,1.00 +0118,+000.00,-13.64,01.00,000.00,1.00 +0119,+000.00,-14.09,01.00,000.00,1.00 +0120,+000.00,-14.54,01.00,000.00,1.00 +0121,+000.00,-14.98,01.00,000.00,1.00 +0122,+000.00,-15.42,01.00,000.00,1.00 +0123,+000.00,-15.86,01.00,000.00,1.00 +0124,+000.00,-16.30,01.00,000.00,1.00 +0125,+000.00,-16.73,01.00,000.00,1.00 +0126,+000.00,-17.15,01.00,000.00,1.00 +0127,+000.00,-17.57,01.00,000.00,1.00 +0128,+000.00,-17.99,01.00,000.00,1.00 +0129,+000.00,-18.40,01.00,000.00,1.00 +0130,+000.00,-18.81,01.00,000.00,1.00 +0131,+000.00,-19.21,01.00,000.00,1.00 +0132,+000.00,-19.60,01.00,000.00,1.00 +0133,+000.00,-20.00,01.00,000.00,1.00 +0134,+000.00,-20.38,01.00,000.00,1.00 +0135,+000.00,-20.76,01.00,000.00,1.00 +0136,+000.00,-21.14,01.00,000.00,1.00 +0137,+000.00,-21.51,01.00,000.00,1.00 +0138,+000.00,-21.87,01.00,000.00,1.00 +0139,+000.00,-22.22,01.00,000.00,1.00 +0140,+000.00,-22.58,01.00,000.00,1.00 +0141,+000.00,-22.92,01.00,000.00,1.00 +0142,+000.00,-23.26,01.00,000.00,1.00 +0143,+000.00,-23.59,01.00,000.00,1.00 +0144,+000.00,-23.91,01.00,000.00,1.00 +0145,+000.00,-24.23,01.00,000.00,1.00 +0146,+000.00,-24.54,01.00,000.00,1.00 +0147,+000.00,-24.84,01.00,000.00,1.00 +0148,+000.00,-25.14,01.00,000.00,1.00 +0149,+000.00,-25.42,01.00,000.00,1.00 +0150,+000.00,-25.71,01.00,000.00,1.00 +0151,+000.00,-25.98,01.00,000.00,1.00 +0152,+000.00,-26.24,01.00,000.00,1.00 +0153,+000.00,-26.50,01.00,000.00,1.00 +0154,+000.00,-26.75,01.00,000.00,1.00 +0155,+000.00,-26.99,01.00,000.00,1.00 +0156,+000.00,-27.22,01.00,000.00,1.00 +0157,+000.00,-27.44,01.00,000.00,1.00 +0158,+000.00,-27.66,01.00,000.00,1.00 +0159,+000.00,-27.86,01.00,000.00,1.00 +0160,+000.00,-28.06,01.00,000.00,1.00 +0161,+000.00,-28.25,01.00,000.00,1.00 +0162,+000.00,-28.43,01.00,000.00,1.00 +0163,+000.00,-28.59,01.00,000.00,1.00 +0164,+000.00,-28.76,01.00,000.00,1.00 +0165,+000.00,-28.91,01.00,000.00,1.00 +0166,+000.00,-29.05,01.00,000.00,1.00 +0167,+000.00,-29.18,01.00,000.00,1.00 +0168,+000.00,-29.30,01.00,000.00,1.00 +0169,+000.00,-29.41,01.00,000.00,1.00 +0170,+000.00,-29.52,01.00,000.00,1.00 +0171,+000.00,-29.61,01.00,000.00,1.00 +0172,+000.00,-29.69,01.00,000.00,1.00 +0173,+000.00,-29.77,01.00,000.00,1.00 +0174,+000.00,-29.83,01.00,000.00,1.00 +0175,+000.00,-29.88,01.00,000.00,1.00 +0176,+000.00,-29.93,01.00,000.00,1.00 +0177,+000.00,-29.96,01.00,000.00,1.00 +0178,+000.00,-29.98,01.00,000.00,1.00 +0179,+000.00,-30.00,01.00,000.00,1.00 +0180,+000.00,-30.00,01.00,000.00,1.00 +0181,+000.00,-29.99,01.00,000.00,1.00 +0182,+000.00,-29.98,01.00,000.00,1.00 +0183,+000.00,-29.95,01.00,000.00,1.00 +0184,+000.00,-29.91,01.00,000.00,1.00 +0185,+000.00,-29.86,01.00,000.00,1.00 +0186,+000.00,-29.81,01.00,000.00,1.00 +0187,+000.00,-29.74,01.00,000.00,1.00 +0188,+000.00,-29.66,01.00,000.00,1.00 +0189,+000.00,-29.57,01.00,000.00,1.00 +0190,+000.00,-29.48,01.00,000.00,1.00 +0191,+000.00,-29.37,01.00,000.00,1.00 +0192,+000.00,-29.25,01.00,000.00,1.00 +0193,+000.00,-29.13,01.00,000.00,1.00 +0194,+000.00,-28.99,01.00,000.00,1.00 +0195,+000.00,-28.85,01.00,000.00,1.00 +0196,+000.00,-28.69,01.00,000.00,1.00 +0197,+000.00,-28.53,01.00,000.00,1.00 +0198,+000.00,-28.35,01.00,000.00,1.00 +0199,+000.00,-28.17,01.00,000.00,1.00 +0200,+000.00,-27.98,01.00,000.00,1.00 +0201,+000.00,-27.78,01.00,000.00,1.00 +0202,+000.00,-27.57,01.00,000.00,1.00 +0203,+000.00,-27.35,01.00,000.00,1.00 +0204,+000.00,-27.13,01.00,000.00,1.00 +0205,+000.00,-26.89,01.00,000.00,1.00 +0206,+000.00,-26.65,01.00,000.00,1.00 +0207,+000.00,-26.40,01.00,000.00,1.00 +0208,+000.00,-26.14,01.00,000.00,1.00 +0209,+000.00,-25.87,01.00,000.00,1.00 +0210,+000.00,-25.59,01.00,000.00,1.00 +0211,+000.00,-25.31,01.00,000.00,1.00 +0212,+000.00,-25.02,01.00,000.00,1.00 +0213,+000.00,-24.72,01.00,000.00,1.00 +0214,+000.00,-24.42,01.00,000.00,1.00 +0215,+000.00,-24.10,01.00,000.00,1.00 +0216,+000.00,-23.78,01.00,000.00,1.00 +0217,+000.00,-23.46,01.00,000.00,1.00 +0218,+000.00,-23.12,01.00,000.00,1.00 +0219,+000.00,-22.78,01.00,000.00,1.00 +0220,+000.00,-22.44,01.00,000.00,1.00 +0221,+000.00,-22.08,01.00,000.00,1.00 +0222,+000.00,-21.72,01.00,000.00,1.00 +0223,+000.00,-21.36,01.00,000.00,1.00 +0224,+000.00,-20.99,01.00,000.00,1.00 +0225,+000.00,-20.61,01.00,000.00,1.00 +0226,+000.00,-20.23,01.00,000.00,1.00 +0227,+000.00,-19.84,01.00,000.00,1.00 +0228,+000.00,-19.45,01.00,000.00,1.00 +0229,+000.00,-19.05,01.00,000.00,1.00 +0230,+000.00,-18.64,01.00,000.00,1.00 +0231,+000.00,-18.23,01.00,000.00,1.00 +0232,+000.00,-17.82,01.00,000.00,1.00 +0233,+000.00,-17.40,01.00,000.00,1.00 +0234,+000.00,-16.98,01.00,000.00,1.00 +0235,+000.00,-16.55,01.00,000.00,1.00 +0236,+000.00,-16.12,01.00,000.00,1.00 +0237,+000.00,-15.69,01.00,000.00,1.00 +0238,+000.00,-15.25,01.00,000.00,1.00 +0239,+000.00,-14.80,01.00,000.00,1.00 +0240,+000.00,-14.36,01.00,000.00,1.00 +0241,+000.00,-13.91,01.00,000.00,1.00 +0242,+000.00,-13.45,01.00,000.00,1.00 +0243,+000.00,-13.00,01.00,000.00,1.00 +0244,+000.00,-12.54,01.00,000.00,1.00 +0245,+000.00,-12.07,01.00,000.00,1.00 +0246,+000.00,-11.61,01.00,000.00,1.00 +0247,+000.00,-11.14,01.00,000.00,1.00 +0248,+000.00,-10.67,01.00,000.00,1.00 +0249,+000.00,-10.19,01.00,000.00,1.00 +0250,+000.00,-09.71,01.00,000.00,1.00 +0251,+000.00,-09.23,01.00,000.00,1.00 +0252,+000.00,-08.75,01.00,000.00,1.00 +0253,+000.00,-08.27,01.00,000.00,1.00 +0254,+000.00,-07.78,01.00,000.00,1.00 +0255,+000.00,-07.30,01.00,000.00,1.00 +0256,+000.00,-06.81,01.00,000.00,1.00 +0257,+000.00,-06.32,01.00,000.00,1.00 +0258,+000.00,-05.83,01.00,000.00,1.00 +0259,+000.00,-05.33,01.00,000.00,1.00 +0260,+000.00,-04.84,01.00,000.00,1.00 +0261,+000.00,-04.34,01.00,000.00,1.00 +0262,+000.00,-03.85,01.00,000.00,1.00 +0263,+000.00,-03.35,01.00,000.00,1.00 +0264,+000.00,-02.85,01.00,000.00,1.00 +0265,+000.00,-02.35,01.00,000.00,1.00 +0266,+000.00,-01.85,01.00,000.00,1.00 +0267,+000.00,-01.35,01.00,000.00,1.00 +0268,+000.00,-00.85,01.00,000.00,1.00 +0269,+000.00,-00.35,01.00,000.00,1.00 +0270,+000.00,+00.15,01.00,000.00,1.00 +0271,+000.00,+00.65,01.00,000.00,1.00 +0272,+000.00,+01.15,01.00,000.00,1.00 +0273,+000.00,+01.65,01.00,000.00,1.00 +0274,+000.00,+02.15,01.00,000.00,1.00 +0275,+000.00,+02.65,01.00,000.00,1.00 +0276,+000.00,+03.15,01.00,000.00,1.00 +0277,+000.00,+03.65,01.00,000.00,1.00 +0278,+000.00,+04.14,01.00,000.00,1.00 +0279,+000.00,+04.64,01.00,000.00,1.00 +0280,+000.00,+05.13,01.00,000.00,1.00 +0281,+000.00,+05.63,01.00,000.00,1.00 +0282,+000.00,+06.12,01.00,000.00,1.00 +0283,+000.00,+06.61,01.00,000.00,1.00 +0284,+000.00,+07.10,01.00,000.00,1.00 +0285,+000.00,+07.59,01.00,000.00,1.00 +0286,+000.00,+08.08,01.00,000.00,1.00 +0287,+000.00,+08.56,01.00,000.00,1.00 +0288,+000.00,+09.04,01.00,000.00,1.00 +0289,+000.00,+09.52,01.00,000.00,1.00 +0290,+000.00,+10.00,01.00,000.00,1.00 +0291,+000.00,+10.48,01.00,000.00,1.00 +0292,+000.00,+10.95,01.00,000.00,1.00 +0293,+000.00,+11.42,01.00,000.00,1.00 +0294,+000.00,+11.89,01.00,000.00,1.00 +0295,+000.00,+12.35,01.00,000.00,1.00 +0296,+000.00,+12.81,01.00,000.00,1.00 +0297,+000.00,+13.27,01.00,000.00,1.00 +0298,+000.00,+13.73,01.00,000.00,1.00 +0299,+000.00,+14.18,01.00,000.00,1.00 +0300,+000.00,+14.63,01.00,000.00,1.00 +0301,+000.00,+15.07,01.00,000.00,1.00 +0302,+000.00,+15.51,01.00,000.00,1.00 +0303,+000.00,+15.95,01.00,000.00,1.00 +0304,+000.00,+16.38,01.00,000.00,1.00 +0305,+000.00,+16.81,01.00,000.00,1.00 +0306,+000.00,+17.23,01.00,000.00,1.00 +0307,+000.00,+17.65,01.00,000.00,1.00 +0308,+000.00,+18.07,01.00,000.00,1.00 +0309,+000.00,+18.48,01.00,000.00,1.00 +0310,+000.00,+18.89,01.00,000.00,1.00 +0311,+000.00,+19.29,01.00,000.00,1.00 +0312,+000.00,+19.68,01.00,000.00,1.00 +0313,+000.00,+20.07,01.00,000.00,1.00 +0314,+000.00,+20.46,01.00,000.00,1.00 +0315,+000.00,+20.84,01.00,000.00,1.00 +0316,+000.00,+21.21,01.00,000.00,1.00 +0317,+000.00,+21.58,01.00,000.00,1.00 +0318,+000.00,+21.94,01.00,000.00,1.00 +0319,+000.00,+22.30,01.00,000.00,1.00 +0320,+000.00,+22.64,01.00,000.00,1.00 +0321,+000.00,+22.99,01.00,000.00,1.00 +0322,+000.00,+23.32,01.00,000.00,1.00 +0323,+000.00,+23.65,01.00,000.00,1.00 +0324,+000.00,+23.98,01.00,000.00,1.00 +0325,+000.00,+24.29,01.00,000.00,1.00 +0326,+000.00,+24.60,01.00,000.00,1.00 +0327,+000.00,+24.90,01.00,000.00,1.00 +0328,+000.00,+25.20,01.00,000.00,1.00 +0329,+000.00,+25.48,01.00,000.00,1.00 +0330,+000.00,+25.76,01.00,000.00,1.00 +0331,+000.00,+26.03,01.00,000.00,1.00 +0332,+000.00,+26.29,01.00,000.00,1.00 +0333,+000.00,+26.55,01.00,000.00,1.00 +0334,+000.00,+26.80,01.00,000.00,1.00 +0335,+000.00,+27.03,01.00,000.00,1.00 +0336,+000.00,+27.26,01.00,000.00,1.00 +0337,+000.00,+27.49,01.00,000.00,1.00 +0338,+000.00,+27.70,01.00,000.00,1.00 +0339,+000.00,+27.90,01.00,000.00,1.00 +0340,+000.00,+28.10,01.00,000.00,1.00 +0341,+000.00,+28.28,01.00,000.00,1.00 +0342,+000.00,+28.46,01.00,000.00,1.00 +0343,+000.00,+28.63,01.00,000.00,1.00 +0344,+000.00,+28.79,01.00,000.00,1.00 +0345,+000.00,+28.94,01.00,000.00,1.00 +0346,+000.00,+29.07,01.00,000.00,1.00 +0347,+000.00,+29.20,01.00,000.00,1.00 +0348,+000.00,+29.33,01.00,000.00,1.00 +0349,+000.00,+29.44,01.00,000.00,1.00 +0350,+000.00,+29.54,01.00,000.00,1.00 +0351,+000.00,+29.63,01.00,000.00,1.00 +0352,+000.00,+29.71,01.00,000.00,1.00 +0353,+000.00,+29.78,01.00,000.00,1.00 +0354,+000.00,+29.84,01.00,000.00,1.00 +0355,+000.00,+29.89,01.00,000.00,1.00 +0356,+000.00,+29.93,01.00,000.00,1.00 +0357,+000.00,+29.97,01.00,000.00,1.00 +0358,+000.00,+29.99,01.00,000.00,1.00 +0359,+000.00,+30.00,01.00,000.00,1.00 +0360,+000.00,+30.00,01.00,000.00,1.00 +0361,+000.00,+29.99,01.00,000.00,1.00 +0362,+000.00,+29.97,01.00,000.00,1.00 +0363,+000.00,+29.94,01.00,000.00,1.00 +0364,+000.00,+29.90,01.00,000.00,1.00 +0365,+000.00,+29.85,01.00,000.00,1.00 +0366,+000.00,+29.79,01.00,000.00,1.00 +0367,+000.00,+29.72,01.00,000.00,1.00 +0368,+000.00,+29.64,01.00,000.00,1.00 +0369,+000.00,+29.56,01.00,000.00,1.00 +0370,+000.00,+29.46,01.00,000.00,1.00 +0371,+000.00,+29.35,01.00,000.00,1.00 +0372,+000.00,+29.23,01.00,000.00,1.00 +0373,+000.00,+29.10,01.00,000.00,1.00 +0374,+000.00,+28.96,01.00,000.00,1.00 +0375,+000.00,+28.82,01.00,000.00,1.00 +0376,+000.00,+28.66,01.00,000.00,1.00 +0377,+000.00,+28.49,01.00,000.00,1.00 +0378,+000.00,+28.32,01.00,000.00,1.00 +0379,+000.00,+28.13,01.00,000.00,1.00 +0380,+000.00,+27.94,01.00,000.00,1.00 +0381,+000.00,+27.74,01.00,000.00,1.00 +0382,+000.00,+27.53,01.00,000.00,1.00 +0383,+000.00,+27.31,01.00,000.00,1.00 +0384,+000.00,+27.08,01.00,000.00,1.00 +0385,+000.00,+26.84,01.00,000.00,1.00 +0386,+000.00,+26.60,01.00,000.00,1.00 +0387,+000.00,+26.35,01.00,000.00,1.00 +0388,+000.00,+26.08,01.00,000.00,1.00 +0389,+000.00,+25.81,01.00,000.00,1.00 +0390,+000.00,+25.54,01.00,000.00,1.00 +0391,+000.00,+25.25,01.00,000.00,1.00 +0392,+000.00,+24.96,01.00,000.00,1.00 +0393,+000.00,+24.66,01.00,000.00,1.00 +0394,+000.00,+24.35,01.00,000.00,1.00 +0395,+000.00,+24.04,01.00,000.00,1.00 +0396,+000.00,+23.72,01.00,000.00,1.00 +0397,+000.00,+23.39,01.00,000.00,1.00 +0398,+000.00,+23.06,01.00,000.00,1.00 +0399,+000.00,+22.71,01.00,000.00,1.00 +0400,+000.00,+22.37,01.00,000.00,1.00 +0401,+000.00,+22.01,01.00,000.00,1.00 +0402,+000.00,+21.65,01.00,000.00,1.00 +0403,+000.00,+21.28,01.00,000.00,1.00 +0404,+000.00,+20.91,01.00,000.00,1.00 +0405,+000.00,+20.53,01.00,000.00,1.00 +0406,+000.00,+20.15,01.00,000.00,1.00 +0407,+000.00,+19.76,01.00,000.00,1.00 +0408,+000.00,+19.37,01.00,000.00,1.00 +0409,+000.00,+18.97,01.00,000.00,1.00 +0410,+000.00,+18.56,01.00,000.00,1.00 +0411,+000.00,+18.15,01.00,000.00,1.00 +0412,+000.00,+17.74,01.00,000.00,1.00 +0413,+000.00,+17.32,01.00,000.00,1.00 +0414,+000.00,+16.90,01.00,000.00,1.00 +0415,+000.00,+16.47,01.00,000.00,1.00 +0416,+000.00,+16.04,01.00,000.00,1.00 +0417,+000.00,+15.60,01.00,000.00,1.00 +0418,+000.00,+15.16,01.00,000.00,1.00 +0419,+000.00,+14.72,01.00,000.00,1.00 +0420,+000.00,+14.27,01.00,000.00,1.00 +0421,+000.00,+13.82,01.00,000.00,1.00 +0422,+000.00,+13.36,01.00,000.00,1.00 +0423,+000.00,+12.90,01.00,000.00,1.00 +0424,+000.00,+12.44,01.00,000.00,1.00 +0425,+000.00,+11.98,01.00,000.00,1.00 +0426,+000.00,+11.51,01.00,000.00,1.00 +0427,+000.00,+11.04,01.00,000.00,1.00 +0428,+000.00,+10.57,01.00,000.00,1.00 +0429,+000.00,+10.10,01.00,000.00,1.00 +0430,+000.00,+09.62,01.00,000.00,1.00 +0431,+000.00,+09.14,01.00,000.00,1.00 +0432,+000.00,+08.66,01.00,000.00,1.00 +0433,+000.00,+08.17,01.00,000.00,1.00 +0434,+000.00,+07.69,01.00,000.00,1.00 +0435,+000.00,+07.20,01.00,000.00,1.00 +0436,+000.00,+06.71,01.00,000.00,1.00 +0437,+000.00,+06.22,01.00,000.00,1.00 +0438,+000.00,+05.73,01.00,000.00,1.00 +0439,+000.00,+05.23,01.00,000.00,1.00 +0440,+000.00,+04.74,01.00,000.00,1.00 +0441,+000.00,+04.24,01.00,000.00,1.00 +0442,+000.00,+03.75,01.00,000.00,1.00 +0443,+000.00,+03.25,01.00,000.00,1.00 +0444,+000.00,+02.75,01.00,000.00,1.00 +0445,+000.00,+02.25,01.00,000.00,1.00 +0446,+000.00,+01.75,01.00,000.00,1.00 +0447,+000.00,+01.25,01.00,000.00,1.00 +0448,+000.00,+00.75,01.00,000.00,1.00 +0449,+000.00,+00.25,01.00,000.00,1.00 +0450,+000.00,-00.25,01.00,000.00,1.00 +0451,+000.00,-00.75,01.00,000.00,1.00 +0452,+000.00,-01.25,01.00,000.00,1.00 +0453,+000.00,-01.75,01.00,000.00,1.00 +0454,+000.00,-02.25,01.00,000.00,1.00 +0455,+000.00,-02.75,01.00,000.00,1.00 +0456,+000.00,-03.25,01.00,000.00,1.00 +0457,+000.00,-03.75,01.00,000.00,1.00 +0458,+000.00,-04.24,01.00,000.00,1.00 +0459,+000.00,-04.74,01.00,000.00,1.00 +0460,+000.00,-05.23,01.00,000.00,1.00 +0461,+000.00,-05.73,01.00,000.00,1.00 +0462,+000.00,-06.22,01.00,000.00,1.00 +0463,+000.00,-06.71,01.00,000.00,1.00 +0464,+000.00,-07.20,01.00,000.00,1.00 +0465,+000.00,-07.69,01.00,000.00,1.00 +0466,+000.00,-08.17,01.00,000.00,1.00 +0467,+000.00,-08.66,01.00,000.00,1.00 +0468,+000.00,-09.14,01.00,000.00,1.00 +0469,+000.00,-09.62,01.00,000.00,1.00 +0470,+000.00,-10.10,01.00,000.00,1.00 +0471,+000.00,-10.57,01.00,000.00,1.00 +0472,+000.00,-11.04,01.00,000.00,1.00 +0473,+000.00,-11.51,01.00,000.00,1.00 +0474,+000.00,-11.98,01.00,000.00,1.00 +0475,+000.00,-12.44,01.00,000.00,1.00 +0476,+000.00,-12.90,01.00,000.00,1.00 +0477,+000.00,-13.36,01.00,000.00,1.00 +0478,+000.00,-13.82,01.00,000.00,1.00 +0479,+000.00,-14.27,01.00,000.00,1.00 +0480,+000.00,-14.72,01.00,000.00,1.00 +0481,+000.00,-15.16,01.00,000.00,1.00 +0482,+000.00,-15.60,01.00,000.00,1.00 +0483,+000.00,-16.04,01.00,000.00,1.00 +0484,+000.00,-16.47,01.00,000.00,1.00 +0485,+000.00,-16.90,01.00,000.00,1.00 +0486,+000.00,-17.32,01.00,000.00,1.00 +0487,+000.00,-17.74,01.00,000.00,1.00 +0488,+000.00,-18.15,01.00,000.00,1.00 +0489,+000.00,-18.56,01.00,000.00,1.00 +0490,+000.00,-18.97,01.00,000.00,1.00 +0491,+000.00,-19.37,01.00,000.00,1.00 +0492,+000.00,-19.76,01.00,000.00,1.00 +0493,+000.00,-20.15,01.00,000.00,1.00 +0494,+000.00,-20.53,01.00,000.00,1.00 +0495,+000.00,-20.91,01.00,000.00,1.00 +0496,+000.00,-21.28,01.00,000.00,1.00 +0497,+000.00,-21.65,01.00,000.00,1.00 +0498,+000.00,-22.01,01.00,000.00,1.00 +0499,+000.00,-22.37,01.00,000.00,1.00 +0500,+000.00,-22.71,01.00,000.00,1.00 +0501,+000.00,-23.06,01.00,000.00,1.00 +0502,+000.00,-23.39,01.00,000.00,1.00 +0503,+000.00,-23.72,01.00,000.00,1.00 +0504,+000.00,-24.04,01.00,000.00,1.00 +0505,+000.00,-24.35,01.00,000.00,1.00 +0506,+000.00,-24.66,01.00,000.00,1.00 +0507,+000.00,-24.96,01.00,000.00,1.00 +0508,+000.00,-25.25,01.00,000.00,1.00 +0509,+000.00,-25.54,01.00,000.00,1.00 +0510,+000.00,-25.81,01.00,000.00,1.00 +0511,+000.00,-26.08,01.00,000.00,1.00 +0512,+000.00,-26.35,01.00,000.00,1.00 +0513,+000.00,-26.60,01.00,000.00,1.00 +0514,+000.00,-26.84,01.00,000.00,1.00 +0515,+000.00,-27.08,01.00,000.00,1.00 +0516,+000.00,-27.31,01.00,000.00,1.00 +0517,+000.00,-27.53,01.00,000.00,1.00 +0518,+000.00,-27.74,01.00,000.00,1.00 +0519,+000.00,-27.94,01.00,000.00,1.00 +0520,+000.00,-28.13,01.00,000.00,1.00 +0521,+000.00,-28.32,01.00,000.00,1.00 +0522,+000.00,-28.49,01.00,000.00,1.00 +0523,+000.00,-28.66,01.00,000.00,1.00 +0524,+000.00,-28.82,01.00,000.00,1.00 +0525,+000.00,-28.96,01.00,000.00,1.00 +0526,+000.00,-29.10,01.00,000.00,1.00 +0527,+000.00,-29.23,01.00,000.00,1.00 +0528,+000.00,-29.35,01.00,000.00,1.00 +0529,+000.00,-29.46,01.00,000.00,1.00 +0530,+000.00,-29.56,01.00,000.00,1.00 +0531,+000.00,-29.64,01.00,000.00,1.00 +0532,+000.00,-29.72,01.00,000.00,1.00 +0533,+000.00,-29.79,01.00,000.00,1.00 +0534,+000.00,-29.85,01.00,000.00,1.00 +0535,+000.00,-29.90,01.00,000.00,1.00 +0536,+000.00,-29.94,01.00,000.00,1.00 +0537,+000.00,-29.97,01.00,000.00,1.00 +0538,+000.00,-29.99,01.00,000.00,1.00 +0539,+000.00,-30.00,01.00,000.00,1.00 +0540,+000.00,-30.00,01.00,000.00,1.00 +0541,+000.00,-29.99,01.00,000.00,1.00 +0542,+000.00,-29.97,01.00,000.00,1.00 +0543,+000.00,-29.93,01.00,000.00,1.00 +0544,+000.00,-29.89,01.00,000.00,1.00 +0545,+000.00,-29.84,01.00,000.00,1.00 +0546,+000.00,-29.78,01.00,000.00,1.00 +0547,+000.00,-29.71,01.00,000.00,1.00 +0548,+000.00,-29.63,01.00,000.00,1.00 +0549,+000.00,-29.54,01.00,000.00,1.00 +0550,+000.00,-29.44,01.00,000.00,1.00 +0551,+000.00,-29.33,01.00,000.00,1.00 +0552,+000.00,-29.20,01.00,000.00,1.00 +0553,+000.00,-29.07,01.00,000.00,1.00 +0554,+000.00,-28.94,01.00,000.00,1.00 +0555,+000.00,-28.79,01.00,000.00,1.00 +0556,+000.00,-28.63,01.00,000.00,1.00 +0557,+000.00,-28.46,01.00,000.00,1.00 +0558,+000.00,-28.28,01.00,000.00,1.00 +0559,+000.00,-28.10,01.00,000.00,1.00 +0560,+000.00,-27.90,01.00,000.00,1.00 +0561,+000.00,-27.70,01.00,000.00,1.00 +0562,+000.00,-27.49,01.00,000.00,1.00 +0563,+000.00,-27.26,01.00,000.00,1.00 +0564,+000.00,-27.03,01.00,000.00,1.00 +0565,+000.00,-26.80,01.00,000.00,1.00 +0566,+000.00,-26.55,01.00,000.00,1.00 +0567,+000.00,-26.29,01.00,000.00,1.00 +0568,+000.00,-26.03,01.00,000.00,1.00 +0569,+000.00,-25.76,01.00,000.00,1.00 +0570,+000.00,-25.48,01.00,000.00,1.00 +0571,+000.00,-25.20,01.00,000.00,1.00 +0572,+000.00,-24.90,01.00,000.00,1.00 +0573,+000.00,-24.60,01.00,000.00,1.00 +0574,+000.00,-24.29,01.00,000.00,1.00 +0575,+000.00,-23.98,01.00,000.00,1.00 +0576,+000.00,-23.65,01.00,000.00,1.00 +0577,+000.00,-23.32,01.00,000.00,1.00 +0578,+000.00,-22.99,01.00,000.00,1.00 +0579,+000.00,-22.64,01.00,000.00,1.00 +0580,+000.00,-22.30,01.00,000.00,1.00 +0581,+000.00,-21.94,01.00,000.00,1.00 +0582,+000.00,-21.58,01.00,000.00,1.00 +0583,+000.00,-21.21,01.00,000.00,1.00 +0584,+000.00,-20.84,01.00,000.00,1.00 +0585,+000.00,-20.46,01.00,000.00,1.00 +0586,+000.00,-20.07,01.00,000.00,1.00 +0587,+000.00,-19.68,01.00,000.00,1.00 +0588,+000.00,-19.29,01.00,000.00,1.00 +0589,+000.00,-18.89,01.00,000.00,1.00 +0590,+000.00,-18.48,01.00,000.00,1.00 +0591,+000.00,-18.07,01.00,000.00,1.00 +0592,+000.00,-17.65,01.00,000.00,1.00 +0593,+000.00,-17.23,01.00,000.00,1.00 +0594,+000.00,-16.81,01.00,000.00,1.00 +0595,+000.00,-16.38,01.00,000.00,1.00 +0596,+000.00,-15.95,01.00,000.00,1.00 +0597,+000.00,-15.51,01.00,000.00,1.00 +0598,+000.00,-15.07,01.00,000.00,1.00 +0599,+000.00,-14.63,01.00,000.00,1.00 +0600,+000.00,-14.18,01.00,000.00,1.00 +0601,+000.00,-13.73,01.00,000.00,1.00 +0602,+000.00,-13.27,01.00,000.00,1.00 +0603,+000.00,-12.81,01.00,000.00,1.00 +0604,+000.00,-12.35,01.00,000.00,1.00 +0605,+000.00,-11.89,01.00,000.00,1.00 +0606,+000.00,-11.42,01.00,000.00,1.00 +0607,+000.00,-10.95,01.00,000.00,1.00 +0608,+000.00,-10.48,01.00,000.00,1.00 +0609,+000.00,-10.00,01.00,000.00,1.00 +0610,+000.00,-09.52,01.00,000.00,1.00 +0611,+000.00,-09.04,01.00,000.00,1.00 +0612,+000.00,-08.56,01.00,000.00,1.00 +0613,+000.00,-08.08,01.00,000.00,1.00 +0614,+000.00,-07.59,01.00,000.00,1.00 +0615,+000.00,-07.10,01.00,000.00,1.00 +0616,+000.00,-06.61,01.00,000.00,1.00 +0617,+000.00,-06.12,01.00,000.00,1.00 +0618,+000.00,-05.63,01.00,000.00,1.00 +0619,+000.00,-05.13,01.00,000.00,1.00 +0620,+000.00,-04.64,01.00,000.00,1.00 +0621,+000.00,-04.14,01.00,000.00,1.00 +0622,+000.00,-03.65,01.00,000.00,1.00 +0623,+000.00,-03.15,01.00,000.00,1.00 +0624,+000.00,-02.65,01.00,000.00,1.00 +0625,+000.00,-02.15,01.00,000.00,1.00 +0626,+000.00,-01.65,01.00,000.00,1.00 +0627,+000.00,-01.15,01.00,000.00,1.00 +0628,+000.00,-00.65,01.00,000.00,1.00 +0629,+000.00,-00.15,01.00,000.00,1.00 +0630,+000.00,+00.35,01.00,000.00,1.00 +0631,+000.00,+00.85,01.00,000.00,1.00 +0632,+000.00,+01.35,01.00,000.00,1.00 +0633,+000.00,+01.85,01.00,000.00,1.00 +0634,+000.00,+02.35,01.00,000.00,1.00 +0635,+000.00,+02.85,01.00,000.00,1.00 +0636,+000.00,+03.35,01.00,000.00,1.00 +0637,+000.00,+03.85,01.00,000.00,1.00 +0638,+000.00,+04.34,01.00,000.00,1.00 +0639,+000.00,+04.84,01.00,000.00,1.00 +0640,+000.00,+05.33,01.00,000.00,1.00 +0641,+000.00,+05.83,01.00,000.00,1.00 +0642,+000.00,+06.32,01.00,000.00,1.00 +0643,+000.00,+06.81,01.00,000.00,1.00 +0644,+000.00,+07.30,01.00,000.00,1.00 +0645,+000.00,+07.78,01.00,000.00,1.00 +0646,+000.00,+08.27,01.00,000.00,1.00 +0647,+000.00,+08.75,01.00,000.00,1.00 +0648,+000.00,+09.23,01.00,000.00,1.00 +0649,+000.00,+09.71,01.00,000.00,1.00 +0650,+000.00,+10.19,01.00,000.00,1.00 +0651,+000.00,+10.67,01.00,000.00,1.00 +0652,+000.00,+11.14,01.00,000.00,1.00 +0653,+000.00,+11.61,01.00,000.00,1.00 +0654,+000.00,+12.07,01.00,000.00,1.00 +0655,+000.00,+12.54,01.00,000.00,1.00 +0656,+000.00,+13.00,01.00,000.00,1.00 +0657,+000.00,+13.45,01.00,000.00,1.00 +0658,+000.00,+13.91,01.00,000.00,1.00 +0659,+000.00,+14.36,01.00,000.00,1.00 +0660,+000.00,+14.80,01.00,000.00,1.00 +0661,+000.00,+15.25,01.00,000.00,1.00 +0662,+000.00,+15.69,01.00,000.00,1.00 +0663,+000.00,+16.12,01.00,000.00,1.00 +0664,+000.00,+16.55,01.00,000.00,1.00 +0665,+000.00,+16.98,01.00,000.00,1.00 +0666,+000.00,+17.40,01.00,000.00,1.00 +0667,+000.00,+17.82,01.00,000.00,1.00 +0668,+000.00,+18.23,01.00,000.00,1.00 +0669,+000.00,+18.64,01.00,000.00,1.00 +0670,+000.00,+19.05,01.00,000.00,1.00 +0671,+000.00,+19.45,01.00,000.00,1.00 +0672,+000.00,+19.84,01.00,000.00,1.00 +0673,+000.00,+20.23,01.00,000.00,1.00 +0674,+000.00,+20.61,01.00,000.00,1.00 +0675,+000.00,+20.99,01.00,000.00,1.00 +0676,+000.00,+21.36,01.00,000.00,1.00 +0677,+000.00,+21.72,01.00,000.00,1.00 +0678,+000.00,+22.08,01.00,000.00,1.00 +0679,+000.00,+22.44,01.00,000.00,1.00 +0680,+000.00,+22.78,01.00,000.00,1.00 +0681,+000.00,+23.12,01.00,000.00,1.00 +0682,+000.00,+23.46,01.00,000.00,1.00 +0683,+000.00,+23.78,01.00,000.00,1.00 +0684,+000.00,+24.10,01.00,000.00,1.00 +0685,+000.00,+24.42,01.00,000.00,1.00 +0686,+000.00,+24.72,01.00,000.00,1.00 +0687,+000.00,+25.02,01.00,000.00,1.00 +0688,+000.00,+25.31,01.00,000.00,1.00 +0689,+000.00,+25.59,01.00,000.00,1.00 +0690,+000.00,+25.87,01.00,000.00,1.00 +0691,+000.00,+26.14,01.00,000.00,1.00 +0692,+000.00,+26.40,01.00,000.00,1.00 +0693,+000.00,+26.65,01.00,000.00,1.00 +0694,+000.00,+26.89,01.00,000.00,1.00 +0695,+000.00,+27.13,01.00,000.00,1.00 +0696,+000.00,+27.35,01.00,000.00,1.00 +0697,+000.00,+27.57,01.00,000.00,1.00 +0698,+000.00,+27.78,01.00,000.00,1.00 +0699,+000.00,+27.98,01.00,000.00,1.00 +0700,+000.00,+28.17,01.00,000.00,1.00 +0701,+000.00,+28.35,01.00,000.00,1.00 +0702,+000.00,+28.53,01.00,000.00,1.00 +0703,+000.00,+28.69,01.00,000.00,1.00 +0704,+000.00,+28.85,01.00,000.00,1.00 +0705,+000.00,+28.99,01.00,000.00,1.00 +0706,+000.00,+29.13,01.00,000.00,1.00 +0707,+000.00,+29.25,01.00,000.00,1.00 +0708,+000.00,+29.37,01.00,000.00,1.00 +0709,+000.00,+29.48,01.00,000.00,1.00 +0710,+000.00,+29.57,01.00,000.00,1.00 +0711,+000.00,+29.66,01.00,000.00,1.00 +0712,+000.00,+29.74,01.00,000.00,1.00 +0713,+000.00,+29.81,01.00,000.00,1.00 +0714,+000.00,+29.86,01.00,000.00,1.00 +0715,+000.00,+29.91,01.00,000.00,1.00 +0716,+000.00,+29.95,01.00,000.00,1.00 +0717,+000.00,+29.98,01.00,000.00,1.00 +0718,+000.00,+29.99,01.00,000.00,1.00 +0719,+000.00,+30.00,01.00,000.00,1.00 +0720,+000.00,+30.00,01.00,000.00,1.00 +0721,+000.00,+29.98,01.00,000.00,1.00 +0722,+000.00,+29.96,01.00,000.00,1.00 +0723,+000.00,+29.93,01.00,000.00,1.00 +0724,+000.00,+29.88,01.00,000.00,1.00 +0725,+000.00,+29.83,01.00,000.00,1.00 +0726,+000.00,+29.77,01.00,000.00,1.00 +0727,+000.00,+29.69,01.00,000.00,1.00 +0728,+000.00,+29.61,01.00,000.00,1.00 +0729,+000.00,+29.52,01.00,000.00,1.00 +0730,+000.00,+29.41,01.00,000.00,1.00 +0731,+000.00,+29.30,01.00,000.00,1.00 +0732,+000.00,+29.18,01.00,000.00,1.00 +0733,+000.00,+29.05,01.00,000.00,1.00 +0734,+000.00,+28.91,01.00,000.00,1.00 +0735,+000.00,+28.76,01.00,000.00,1.00 +0736,+000.00,+28.59,01.00,000.00,1.00 +0737,+000.00,+28.43,01.00,000.00,1.00 +0738,+000.00,+28.25,01.00,000.00,1.00 +0739,+000.00,+28.06,01.00,000.00,1.00 +0740,+000.00,+27.86,01.00,000.00,1.00 +0741,+000.00,+27.66,01.00,000.00,1.00 +0742,+000.00,+27.44,01.00,000.00,1.00 +0743,+000.00,+27.22,01.00,000.00,1.00 +0744,+000.00,+26.99,01.00,000.00,1.00 +0745,+000.00,+26.75,01.00,000.00,1.00 +0746,+000.00,+26.50,01.00,000.00,1.00 +0747,+000.00,+26.24,01.00,000.00,1.00 +0748,+000.00,+25.98,01.00,000.00,1.00 +0749,+000.00,+25.71,01.00,000.00,1.00 +0750,+000.00,+25.42,01.00,000.00,1.00 +0751,+000.00,+25.14,01.00,000.00,1.00 +0752,+000.00,+24.84,01.00,000.00,1.00 +0753,+000.00,+24.54,01.00,000.00,1.00 +0754,+000.00,+24.23,01.00,000.00,1.00 +0755,+000.00,+23.91,01.00,000.00,1.00 +0756,+000.00,+23.59,01.00,000.00,1.00 +0757,+000.00,+23.26,01.00,000.00,1.00 +0758,+000.00,+22.92,01.00,000.00,1.00 +0759,+000.00,+22.58,01.00,000.00,1.00 +0760,+000.00,+22.22,01.00,000.00,1.00 +0761,+000.00,+21.87,01.00,000.00,1.00 +0762,+000.00,+21.51,01.00,000.00,1.00 +0763,+000.00,+21.14,01.00,000.00,1.00 +0764,+000.00,+20.76,01.00,000.00,1.00 +0765,+000.00,+20.38,01.00,000.00,1.00 +0766,+000.00,+20.00,01.00,000.00,1.00 +0767,+000.00,+19.60,01.00,000.00,1.00 +0768,+000.00,+19.21,01.00,000.00,1.00 +0769,+000.00,+18.81,01.00,000.00,1.00 +0770,+000.00,+18.40,01.00,000.00,1.00 +0771,+000.00,+17.99,01.00,000.00,1.00 +0772,+000.00,+17.57,01.00,000.00,1.00 +0773,+000.00,+17.15,01.00,000.00,1.00 +0774,+000.00,+16.73,01.00,000.00,1.00 +0775,+000.00,+16.30,01.00,000.00,1.00 +0776,+000.00,+15.86,01.00,000.00,1.00 +0777,+000.00,+15.42,01.00,000.00,1.00 +0778,+000.00,+14.98,01.00,000.00,1.00 +0779,+000.00,+14.54,01.00,000.00,1.00 +0780,+000.00,+14.09,01.00,000.00,1.00 +0781,+000.00,+13.64,01.00,000.00,1.00 +0782,+000.00,+13.18,01.00,000.00,1.00 +0783,+000.00,+12.72,01.00,000.00,1.00 +0784,+000.00,+12.26,01.00,000.00,1.00 +0785,+000.00,+11.79,01.00,000.00,1.00 +0786,+000.00,+11.33,01.00,000.00,1.00 +0787,+000.00,+10.85,01.00,000.00,1.00 +0788,+000.00,+10.38,01.00,000.00,1.00 +0789,+000.00,+09.90,01.00,000.00,1.00 +0790,+000.00,+09.43,01.00,000.00,1.00 +0791,+000.00,+08.95,01.00,000.00,1.00 +0792,+000.00,+08.46,01.00,000.00,1.00 +0793,+000.00,+07.98,01.00,000.00,1.00 +0794,+000.00,+07.49,01.00,000.00,1.00 +0795,+000.00,+07.00,01.00,000.00,1.00 +0796,+000.00,+06.51,01.00,000.00,1.00 +0797,+000.00,+06.02,01.00,000.00,1.00 +0798,+000.00,+05.53,01.00,000.00,1.00 +0799,+000.00,+05.04,01.00,000.00,1.00 +0800,+000.00,+04.54,01.00,000.00,1.00 +0801,+000.00,+04.04,01.00,000.00,1.00 +0802,+000.00,+03.55,01.00,000.00,1.00 +0803,+000.00,+03.05,01.00,000.00,1.00 +0804,+000.00,+02.55,01.00,000.00,1.00 +0805,+000.00,+02.05,01.00,000.00,1.00 +0806,+000.00,+01.55,01.00,000.00,1.00 +0807,+000.00,+01.05,01.00,000.00,1.00 +0808,+000.00,+00.55,01.00,000.00,1.00 +0809,+000.00,+00.05,01.00,000.00,1.00 +0810,+000.00,-00.45,01.00,000.00,1.00 +0811,+000.00,-00.95,01.00,000.00,1.00 +0812,+000.00,-01.45,01.00,000.00,1.00 +0813,+000.00,-01.95,01.00,000.00,1.00 +0814,+000.00,-02.45,01.00,000.00,1.00 +0815,+000.00,-02.95,01.00,000.00,1.00 +0816,+000.00,-03.45,01.00,000.00,1.00 +0817,+000.00,-03.94,01.00,000.00,1.00 +0818,+000.00,-04.44,01.00,000.00,1.00 +0819,+000.00,-04.94,01.00,000.00,1.00 +0820,+000.00,-05.43,01.00,000.00,1.00 +0821,+000.00,-05.92,01.00,000.00,1.00 +0822,+000.00,-06.42,01.00,000.00,1.00 +0823,+000.00,-06.91,01.00,000.00,1.00 +0824,+000.00,-07.39,01.00,000.00,1.00 +0825,+000.00,-07.88,01.00,000.00,1.00 +0826,+000.00,-08.37,01.00,000.00,1.00 +0827,+000.00,-08.85,01.00,000.00,1.00 +0828,+000.00,-09.33,01.00,000.00,1.00 +0829,+000.00,-09.81,01.00,000.00,1.00 +0830,+000.00,-10.29,01.00,000.00,1.00 +0831,+000.00,-10.76,01.00,000.00,1.00 +0832,+000.00,-11.23,01.00,000.00,1.00 +0833,+000.00,-11.70,01.00,000.00,1.00 +0834,+000.00,-12.17,01.00,000.00,1.00 +0835,+000.00,-12.63,01.00,000.00,1.00 +0836,+000.00,-13.09,01.00,000.00,1.00 +0837,+000.00,-13.54,01.00,000.00,1.00 +0838,+000.00,-14.00,01.00,000.00,1.00 +0839,+000.00,-14.45,01.00,000.00,1.00 +0840,+000.00,-14.89,01.00,000.00,1.00 +0841,+000.00,-15.34,01.00,000.00,1.00 +0842,+000.00,-15.77,01.00,000.00,1.00 +0843,+000.00,-16.21,01.00,000.00,1.00 +0844,+000.00,-16.64,01.00,000.00,1.00 +0845,+000.00,-17.07,01.00,000.00,1.00 +0846,+000.00,-17.49,01.00,000.00,1.00 +0847,+000.00,-17.90,01.00,000.00,1.00 +0848,+000.00,-18.32,01.00,000.00,1.00 +0849,+000.00,-18.72,01.00,000.00,1.00 +0850,+000.00,-19.13,01.00,000.00,1.00 +0851,+000.00,-19.53,01.00,000.00,1.00 +0852,+000.00,-19.92,01.00,000.00,1.00 +0853,+000.00,-20.30,01.00,000.00,1.00 +0854,+000.00,-20.69,01.00,000.00,1.00 +0855,+000.00,-21.06,01.00,000.00,1.00 +0856,+000.00,-21.43,01.00,000.00,1.00 +0857,+000.00,-21.80,01.00,000.00,1.00 +0858,+000.00,-22.15,01.00,000.00,1.00 +0859,+000.00,-22.51,01.00,000.00,1.00 +0860,+000.00,-22.85,01.00,000.00,1.00 +0861,+000.00,-23.19,01.00,000.00,1.00 +0862,+000.00,-23.52,01.00,000.00,1.00 +0863,+000.00,-23.85,01.00,000.00,1.00 +0864,+000.00,-24.17,01.00,000.00,1.00 +0865,+000.00,-24.48,01.00,000.00,1.00 +0866,+000.00,-24.78,01.00,000.00,1.00 +0867,+000.00,-25.08,01.00,000.00,1.00 +0868,+000.00,-25.37,01.00,000.00,1.00 +0869,+000.00,-25.65,01.00,000.00,1.00 +0870,+000.00,-25.92,01.00,000.00,1.00 +0871,+000.00,-26.19,01.00,000.00,1.00 +0872,+000.00,-26.45,01.00,000.00,1.00 +0873,+000.00,-26.70,01.00,000.00,1.00 +0874,+000.00,-26.94,01.00,000.00,1.00 +0875,+000.00,-27.17,01.00,000.00,1.00 +0876,+000.00,-27.40,01.00,000.00,1.00 +0877,+000.00,-27.61,01.00,000.00,1.00 +0878,+000.00,-27.82,01.00,000.00,1.00 +0879,+000.00,-28.02,01.00,000.00,1.00 +0880,+000.00,-28.21,01.00,000.00,1.00 +0881,+000.00,-28.39,01.00,000.00,1.00 +0882,+000.00,-28.56,01.00,000.00,1.00 +0883,+000.00,-28.72,01.00,000.00,1.00 +0884,+000.00,-28.88,01.00,000.00,1.00 +0885,+000.00,-29.02,01.00,000.00,1.00 +0886,+000.00,-29.15,01.00,000.00,1.00 +0887,+000.00,-29.28,01.00,000.00,1.00 +0888,+000.00,-29.39,01.00,000.00,1.00 +0889,+000.00,-29.50,01.00,000.00,1.00 +0890,+000.00,-29.59,01.00,000.00,1.00 +0891,+000.00,-29.68,01.00,000.00,1.00 +0892,+000.00,-29.75,01.00,000.00,1.00 +0893,+000.00,-29.82,01.00,000.00,1.00 +0894,+000.00,-29.87,01.00,000.00,1.00 +0895,+000.00,-29.92,01.00,000.00,1.00 +0896,+000.00,-29.95,01.00,000.00,1.00 +0897,+000.00,-29.98,01.00,000.00,1.00 +0898,+000.00,-29.99,01.00,000.00,1.00 +0899,+000.00,-30.00,01.00,000.00,1.00 +0900,+000.00,-29.99,01.00,000.00,1.00 +0901,+000.00,-29.98,01.00,000.00,1.00 +0902,+000.00,-29.95,01.00,000.00,1.00 +0903,+000.00,-29.92,01.00,000.00,1.00 +0904,+000.00,-29.87,01.00,000.00,1.00 +0905,+000.00,-29.82,01.00,000.00,1.00 +0906,+000.00,-29.75,01.00,000.00,1.00 +0907,+000.00,-29.68,01.00,000.00,1.00 +0908,+000.00,-29.59,01.00,000.00,1.00 +0909,+000.00,-29.50,01.00,000.00,1.00 +0910,+000.00,-29.39,01.00,000.00,1.00 +0911,+000.00,-29.28,01.00,000.00,1.00 +0912,+000.00,-29.15,01.00,000.00,1.00 +0913,+000.00,-29.02,01.00,000.00,1.00 +0914,+000.00,-28.88,01.00,000.00,1.00 +0915,+000.00,-28.72,01.00,000.00,1.00 +0916,+000.00,-28.56,01.00,000.00,1.00 +0917,+000.00,-28.39,01.00,000.00,1.00 +0918,+000.00,-28.21,01.00,000.00,1.00 +0919,+000.00,-28.02,01.00,000.00,1.00 +0920,+000.00,-27.82,01.00,000.00,1.00 +0921,+000.00,-27.61,01.00,000.00,1.00 +0922,+000.00,-27.40,01.00,000.00,1.00 +0923,+000.00,-27.17,01.00,000.00,1.00 +0924,+000.00,-26.94,01.00,000.00,1.00 +0925,+000.00,-26.70,01.00,000.00,1.00 +0926,+000.00,-26.45,01.00,000.00,1.00 +0927,+000.00,-26.19,01.00,000.00,1.00 +0928,+000.00,-25.92,01.00,000.00,1.00 +0929,+000.00,-25.65,01.00,000.00,1.00 +0930,+000.00,-25.37,01.00,000.00,1.00 +0931,+000.00,-25.08,01.00,000.00,1.00 +0932,+000.00,-24.78,01.00,000.00,1.00 +0933,+000.00,-24.48,01.00,000.00,1.00 +0934,+000.00,-24.17,01.00,000.00,1.00 +0935,+000.00,-23.85,01.00,000.00,1.00 +0936,+000.00,-23.52,01.00,000.00,1.00 +0937,+000.00,-23.19,01.00,000.00,1.00 +0938,+000.00,-22.85,01.00,000.00,1.00 +0939,+000.00,-22.51,01.00,000.00,1.00 +0940,+000.00,-22.15,01.00,000.00,1.00 +0941,+000.00,-21.80,01.00,000.00,1.00 +0942,+000.00,-21.43,01.00,000.00,1.00 +0943,+000.00,-21.06,01.00,000.00,1.00 +0944,+000.00,-20.69,01.00,000.00,1.00 +0945,+000.00,-20.30,01.00,000.00,1.00 +0946,+000.00,-19.92,01.00,000.00,1.00 +0947,+000.00,-19.53,01.00,000.00,1.00 +0948,+000.00,-19.13,01.00,000.00,1.00 +0949,+000.00,-18.72,01.00,000.00,1.00 +0950,+000.00,-18.32,01.00,000.00,1.00 +0951,+000.00,-17.90,01.00,000.00,1.00 +0952,+000.00,-17.49,01.00,000.00,1.00 +0953,+000.00,-17.07,01.00,000.00,1.00 +0954,+000.00,-16.64,01.00,000.00,1.00 +0955,+000.00,-16.21,01.00,000.00,1.00 +0956,+000.00,-15.77,01.00,000.00,1.00 +0957,+000.00,-15.34,01.00,000.00,1.00 +0958,+000.00,-14.89,01.00,000.00,1.00 +0959,+000.00,-14.45,01.00,000.00,1.00 +0960,+000.00,-14.00,01.00,000.00,1.00 +0961,+000.00,-13.54,01.00,000.00,1.00 +0962,+000.00,-13.09,01.00,000.00,1.00 +0963,+000.00,-12.63,01.00,000.00,1.00 +0964,+000.00,-12.17,01.00,000.00,1.00 +0965,+000.00,-11.70,01.00,000.00,1.00 +0966,+000.00,-11.23,01.00,000.00,1.00 +0967,+000.00,-10.76,01.00,000.00,1.00 +0968,+000.00,-10.29,01.00,000.00,1.00 +0969,+000.00,-09.81,01.00,000.00,1.00 +0970,+000.00,-09.33,01.00,000.00,1.00 +0971,+000.00,-08.85,01.00,000.00,1.00 +0972,+000.00,-08.37,01.00,000.00,1.00 +0973,+000.00,-07.88,01.00,000.00,1.00 +0974,+000.00,-07.39,01.00,000.00,1.00 +0975,+000.00,-06.91,01.00,000.00,1.00 +0976,+000.00,-06.42,01.00,000.00,1.00 +0977,+000.00,-05.92,01.00,000.00,1.00 +0978,+000.00,-05.43,01.00,000.00,1.00 +0979,+000.00,-04.94,01.00,000.00,1.00 +0980,+000.00,-04.44,01.00,000.00,1.00 +0981,+000.00,-03.94,01.00,000.00,1.00 +0982,+000.00,-03.45,01.00,000.00,1.00 +0983,+000.00,-02.95,01.00,000.00,1.00 +0984,+000.00,-02.45,01.00,000.00,1.00 +0985,+000.00,-01.95,01.00,000.00,1.00 +0986,+000.00,-01.45,01.00,000.00,1.00 +0987,+000.00,-00.95,01.00,000.00,1.00 +0988,+000.00,-00.45,01.00,000.00,1.00 +0989,+000.00,+00.05,01.00,000.00,1.00 +0990,+000.00,+00.55,01.00,000.00,1.00 +0991,+000.00,+01.05,01.00,000.00,1.00 +0992,+000.00,+01.55,01.00,000.00,1.00 +0993,+000.00,+02.05,01.00,000.00,1.00 +0994,+000.00,+02.55,01.00,000.00,1.00 +0995,+000.00,+03.05,01.00,000.00,1.00 +0996,+000.00,+03.55,01.00,000.00,1.00 +0997,+000.00,+04.04,01.00,000.00,1.00 +0998,+000.00,+04.54,01.00,000.00,1.00 +0999,+000.00,+05.04,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t09_ch1.csv b/scripts/td_object_renderer/metadata/csv/t09_ch1.csv new file mode 100644 index 0000000000..03e0e49d7e --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t09_ch1.csv @@ -0,0 +1,1000 @@ +0000,+000.00,+30.00,01.00,000.00,1.00 +0001,+000.58,+29.99,01.00,000.00,1.00 +0002,+001.16,+29.98,01.00,000.00,1.00 +0003,+001.73,+29.95,01.00,000.00,1.00 +0004,+002.31,+29.92,01.00,000.00,1.00 +0005,+002.88,+29.87,01.00,000.00,1.00 +0006,+003.46,+29.82,01.00,000.00,1.00 +0007,+004.03,+29.75,01.00,000.00,1.00 +0008,+004.60,+29.68,01.00,000.00,1.00 +0009,+005.17,+29.59,01.00,000.00,1.00 +0010,+005.73,+29.50,01.00,000.00,1.00 +0011,+006.29,+29.39,01.00,000.00,1.00 +0012,+006.85,+29.28,01.00,000.00,1.00 +0013,+007.41,+29.15,01.00,000.00,1.00 +0014,+007.96,+29.02,01.00,000.00,1.00 +0015,+008.51,+28.88,01.00,000.00,1.00 +0016,+009.05,+28.72,01.00,000.00,1.00 +0017,+009.59,+28.56,01.00,000.00,1.00 +0018,+010.13,+28.39,01.00,000.00,1.00 +0019,+010.66,+28.21,01.00,000.00,1.00 +0020,+011.18,+28.02,01.00,000.00,1.00 +0021,+011.70,+27.82,01.00,000.00,1.00 +0022,+012.22,+27.61,01.00,000.00,1.00 +0023,+012.73,+27.40,01.00,000.00,1.00 +0024,+013.23,+27.17,01.00,000.00,1.00 +0025,+013.73,+26.94,01.00,000.00,1.00 +0026,+014.22,+26.70,01.00,000.00,1.00 +0027,+014.70,+26.45,01.00,000.00,1.00 +0028,+015.18,+26.19,01.00,000.00,1.00 +0029,+015.65,+25.92,01.00,000.00,1.00 +0030,+016.12,+25.65,01.00,000.00,1.00 +0031,+016.58,+25.37,01.00,000.00,1.00 +0032,+017.03,+25.08,01.00,000.00,1.00 +0033,+017.47,+24.78,01.00,000.00,1.00 +0034,+017.91,+24.48,01.00,000.00,1.00 +0035,+018.34,+24.17,01.00,000.00,1.00 +0036,+018.76,+23.85,01.00,000.00,1.00 +0037,+019.18,+23.52,01.00,000.00,1.00 +0038,+019.58,+23.19,01.00,000.00,1.00 +0039,+019.99,+22.85,01.00,000.00,1.00 +0040,+020.38,+22.51,01.00,000.00,1.00 +0041,+020.76,+22.15,01.00,000.00,1.00 +0042,+021.14,+21.80,01.00,000.00,1.00 +0043,+021.51,+21.43,01.00,000.00,1.00 +0044,+021.87,+21.06,01.00,000.00,1.00 +0045,+022.23,+20.69,01.00,000.00,1.00 +0046,+022.57,+20.30,01.00,000.00,1.00 +0047,+022.91,+19.92,01.00,000.00,1.00 +0048,+023.24,+19.53,01.00,000.00,1.00 +0049,+023.56,+19.13,01.00,000.00,1.00 +0050,+023.88,+18.72,01.00,000.00,1.00 +0051,+024.18,+18.32,01.00,000.00,1.00 +0052,+024.48,+17.90,01.00,000.00,1.00 +0053,+024.77,+17.49,01.00,000.00,1.00 +0054,+025.05,+17.07,01.00,000.00,1.00 +0055,+025.33,+16.64,01.00,000.00,1.00 +0056,+025.59,+16.21,01.00,000.00,1.00 +0057,+025.85,+15.77,01.00,000.00,1.00 +0058,+026.10,+15.34,01.00,000.00,1.00 +0059,+026.35,+14.89,01.00,000.00,1.00 +0060,+026.58,+14.45,01.00,000.00,1.00 +0061,+026.81,+14.00,01.00,000.00,1.00 +0062,+027.03,+13.54,01.00,000.00,1.00 +0063,+027.24,+13.09,01.00,000.00,1.00 +0064,+027.44,+12.63,01.00,000.00,1.00 +0065,+027.63,+12.17,01.00,000.00,1.00 +0066,+027.82,+11.70,01.00,000.00,1.00 +0067,+028.00,+11.23,01.00,000.00,1.00 +0068,+028.17,+10.76,01.00,000.00,1.00 +0069,+028.34,+10.29,01.00,000.00,1.00 +0070,+028.49,+09.81,01.00,000.00,1.00 +0071,+028.64,+09.33,01.00,000.00,1.00 +0072,+028.78,+08.85,01.00,000.00,1.00 +0073,+028.91,+08.37,01.00,000.00,1.00 +0074,+029.04,+07.88,01.00,000.00,1.00 +0075,+029.16,+07.39,01.00,000.00,1.00 +0076,+029.27,+06.91,01.00,000.00,1.00 +0077,+029.37,+06.42,01.00,000.00,1.00 +0078,+029.46,+05.92,01.00,000.00,1.00 +0079,+029.55,+05.43,01.00,000.00,1.00 +0080,+029.63,+04.94,01.00,000.00,1.00 +0081,+029.70,+04.44,01.00,000.00,1.00 +0082,+029.76,+03.94,01.00,000.00,1.00 +0083,+029.82,+03.45,01.00,000.00,1.00 +0084,+029.87,+02.95,01.00,000.00,1.00 +0085,+029.91,+02.45,01.00,000.00,1.00 +0086,+029.94,+01.95,01.00,000.00,1.00 +0087,+029.97,+01.45,01.00,000.00,1.00 +0088,+029.99,+00.95,01.00,000.00,1.00 +0089,+030.00,+00.45,01.00,000.00,1.00 +0090,+030.00,-00.05,01.00,000.00,1.00 +0091,+030.00,-00.55,01.00,000.00,1.00 +0092,+029.98,-01.05,01.00,000.00,1.00 +0093,+029.96,-01.55,01.00,000.00,1.00 +0094,+029.94,-02.05,01.00,000.00,1.00 +0095,+029.90,-02.55,01.00,000.00,1.00 +0096,+029.86,-03.05,01.00,000.00,1.00 +0097,+029.81,-03.55,01.00,000.00,1.00 +0098,+029.75,-04.04,01.00,000.00,1.00 +0099,+029.69,-04.54,01.00,000.00,1.00 +0100,+029.61,-05.04,01.00,000.00,1.00 +0101,+029.53,-05.53,01.00,000.00,1.00 +0102,+029.44,-06.02,01.00,000.00,1.00 +0103,+029.35,-06.51,01.00,000.00,1.00 +0104,+029.25,-07.00,01.00,000.00,1.00 +0105,+029.13,-07.49,01.00,000.00,1.00 +0106,+029.02,-07.98,01.00,000.00,1.00 +0107,+028.89,-08.46,01.00,000.00,1.00 +0108,+028.75,-08.95,01.00,000.00,1.00 +0109,+028.61,-09.43,01.00,000.00,1.00 +0110,+028.46,-09.90,01.00,000.00,1.00 +0111,+028.30,-10.38,01.00,000.00,1.00 +0112,+028.14,-10.85,01.00,000.00,1.00 +0113,+027.97,-11.33,01.00,000.00,1.00 +0114,+027.79,-11.79,01.00,000.00,1.00 +0115,+027.60,-12.26,01.00,000.00,1.00 +0116,+027.40,-12.72,01.00,000.00,1.00 +0117,+027.20,-13.18,01.00,000.00,1.00 +0118,+026.98,-13.64,01.00,000.00,1.00 +0119,+026.76,-14.09,01.00,000.00,1.00 +0120,+026.53,-14.54,01.00,000.00,1.00 +0121,+026.30,-14.98,01.00,000.00,1.00 +0122,+026.05,-15.42,01.00,000.00,1.00 +0123,+025.80,-15.86,01.00,000.00,1.00 +0124,+025.54,-16.30,01.00,000.00,1.00 +0125,+025.27,-16.73,01.00,000.00,1.00 +0126,+025.00,-17.15,01.00,000.00,1.00 +0127,+024.71,-17.57,01.00,000.00,1.00 +0128,+024.42,-17.99,01.00,000.00,1.00 +0129,+024.12,-18.40,01.00,000.00,1.00 +0130,+023.81,-18.81,01.00,000.00,1.00 +0131,+023.50,-19.21,01.00,000.00,1.00 +0132,+023.17,-19.60,01.00,000.00,1.00 +0133,+022.84,-20.00,01.00,000.00,1.00 +0134,+022.50,-20.38,01.00,000.00,1.00 +0135,+022.16,-20.76,01.00,000.00,1.00 +0136,+021.80,-21.14,01.00,000.00,1.00 +0137,+021.44,-21.51,01.00,000.00,1.00 +0138,+021.07,-21.87,01.00,000.00,1.00 +0139,+020.69,-22.22,01.00,000.00,1.00 +0140,+020.30,-22.58,01.00,000.00,1.00 +0141,+019.91,-22.92,01.00,000.00,1.00 +0142,+019.50,-23.26,01.00,000.00,1.00 +0143,+019.09,-23.59,01.00,000.00,1.00 +0144,+018.68,-23.91,01.00,000.00,1.00 +0145,+018.25,-24.23,01.00,000.00,1.00 +0146,+017.82,-24.54,01.00,000.00,1.00 +0147,+017.38,-24.84,01.00,000.00,1.00 +0148,+016.94,-25.14,01.00,000.00,1.00 +0149,+016.48,-25.42,01.00,000.00,1.00 +0150,+016.03,-25.71,01.00,000.00,1.00 +0151,+015.56,-25.98,01.00,000.00,1.00 +0152,+015.09,-26.24,01.00,000.00,1.00 +0153,+014.61,-26.50,01.00,000.00,1.00 +0154,+014.12,-26.75,01.00,000.00,1.00 +0155,+013.63,-26.99,01.00,000.00,1.00 +0156,+013.13,-27.22,01.00,000.00,1.00 +0157,+012.62,-27.44,01.00,000.00,1.00 +0158,+012.11,-27.66,01.00,000.00,1.00 +0159,+011.60,-27.86,01.00,000.00,1.00 +0160,+011.08,-28.06,01.00,000.00,1.00 +0161,+010.55,-28.25,01.00,000.00,1.00 +0162,+010.02,-28.43,01.00,000.00,1.00 +0163,+009.48,-28.59,01.00,000.00,1.00 +0164,+008.94,-28.76,01.00,000.00,1.00 +0165,+008.40,-28.91,01.00,000.00,1.00 +0166,+007.85,-29.05,01.00,000.00,1.00 +0167,+007.30,-29.18,01.00,000.00,1.00 +0168,+006.74,-29.30,01.00,000.00,1.00 +0169,+006.18,-29.41,01.00,000.00,1.00 +0170,+005.62,-29.52,01.00,000.00,1.00 +0171,+005.05,-29.61,01.00,000.00,1.00 +0172,+004.49,-29.69,01.00,000.00,1.00 +0173,+003.92,-29.77,01.00,000.00,1.00 +0174,+003.34,-29.83,01.00,000.00,1.00 +0175,+002.77,-29.88,01.00,000.00,1.00 +0176,+002.19,-29.93,01.00,000.00,1.00 +0177,+001.62,-29.96,01.00,000.00,1.00 +0178,+001.04,-29.98,01.00,000.00,1.00 +0179,+000.46,-30.00,01.00,000.00,1.00 +0180,-000.12,-30.00,01.00,000.00,1.00 +0181,-000.69,-29.99,01.00,000.00,1.00 +0182,-001.27,-29.98,01.00,000.00,1.00 +0183,-001.85,-29.95,01.00,000.00,1.00 +0184,-002.42,-29.91,01.00,000.00,1.00 +0185,-003.00,-29.86,01.00,000.00,1.00 +0186,-003.57,-29.81,01.00,000.00,1.00 +0187,-004.14,-29.74,01.00,000.00,1.00 +0188,-004.71,-29.66,01.00,000.00,1.00 +0189,-005.28,-29.57,01.00,000.00,1.00 +0190,-005.84,-29.48,01.00,000.00,1.00 +0191,-006.41,-29.37,01.00,000.00,1.00 +0192,-006.96,-29.25,01.00,000.00,1.00 +0193,-007.52,-29.13,01.00,000.00,1.00 +0194,-008.07,-28.99,01.00,000.00,1.00 +0195,-008.62,-28.85,01.00,000.00,1.00 +0196,-009.16,-28.69,01.00,000.00,1.00 +0197,-009.70,-28.53,01.00,000.00,1.00 +0198,-010.23,-28.35,01.00,000.00,1.00 +0199,-010.76,-28.17,01.00,000.00,1.00 +0200,-011.29,-27.98,01.00,000.00,1.00 +0201,-011.81,-27.78,01.00,000.00,1.00 +0202,-012.32,-27.57,01.00,000.00,1.00 +0203,-012.83,-27.35,01.00,000.00,1.00 +0204,-013.33,-27.13,01.00,000.00,1.00 +0205,-013.82,-26.89,01.00,000.00,1.00 +0206,-014.31,-26.65,01.00,000.00,1.00 +0207,-014.80,-26.40,01.00,000.00,1.00 +0208,-015.28,-26.14,01.00,000.00,1.00 +0209,-015.75,-25.87,01.00,000.00,1.00 +0210,-016.21,-25.59,01.00,000.00,1.00 +0211,-016.67,-25.31,01.00,000.00,1.00 +0212,-017.12,-25.02,01.00,000.00,1.00 +0213,-017.56,-24.72,01.00,000.00,1.00 +0214,-018.00,-24.42,01.00,000.00,1.00 +0215,-018.42,-24.10,01.00,000.00,1.00 +0216,-018.85,-23.78,01.00,000.00,1.00 +0217,-019.26,-23.46,01.00,000.00,1.00 +0218,-019.67,-23.12,01.00,000.00,1.00 +0219,-020.06,-22.78,01.00,000.00,1.00 +0220,-020.46,-22.44,01.00,000.00,1.00 +0221,-020.84,-22.08,01.00,000.00,1.00 +0222,-021.21,-21.72,01.00,000.00,1.00 +0223,-021.58,-21.36,01.00,000.00,1.00 +0224,-021.94,-20.99,01.00,000.00,1.00 +0225,-022.29,-20.61,01.00,000.00,1.00 +0226,-022.64,-20.23,01.00,000.00,1.00 +0227,-022.98,-19.84,01.00,000.00,1.00 +0228,-023.30,-19.45,01.00,000.00,1.00 +0229,-023.63,-19.05,01.00,000.00,1.00 +0230,-023.94,-18.64,01.00,000.00,1.00 +0231,-024.24,-18.23,01.00,000.00,1.00 +0232,-024.54,-17.82,01.00,000.00,1.00 +0233,-024.83,-17.40,01.00,000.00,1.00 +0234,-025.11,-16.98,01.00,000.00,1.00 +0235,-025.38,-16.55,01.00,000.00,1.00 +0236,-025.65,-16.12,01.00,000.00,1.00 +0237,-025.90,-15.69,01.00,000.00,1.00 +0238,-026.15,-15.25,01.00,000.00,1.00 +0239,-026.39,-14.80,01.00,000.00,1.00 +0240,-026.63,-14.36,01.00,000.00,1.00 +0241,-026.85,-13.91,01.00,000.00,1.00 +0242,-027.07,-13.45,01.00,000.00,1.00 +0243,-027.28,-13.00,01.00,000.00,1.00 +0244,-027.48,-12.54,01.00,000.00,1.00 +0245,-027.67,-12.07,01.00,000.00,1.00 +0246,-027.86,-11.61,01.00,000.00,1.00 +0247,-028.04,-11.14,01.00,000.00,1.00 +0248,-028.21,-10.67,01.00,000.00,1.00 +0249,-028.37,-10.19,01.00,000.00,1.00 +0250,-028.52,-09.71,01.00,000.00,1.00 +0251,-028.67,-09.23,01.00,000.00,1.00 +0252,-028.81,-08.75,01.00,000.00,1.00 +0253,-028.94,-08.27,01.00,000.00,1.00 +0254,-029.06,-07.78,01.00,000.00,1.00 +0255,-029.18,-07.30,01.00,000.00,1.00 +0256,-029.29,-06.81,01.00,000.00,1.00 +0257,-029.39,-06.32,01.00,000.00,1.00 +0258,-029.48,-05.83,01.00,000.00,1.00 +0259,-029.57,-05.33,01.00,000.00,1.00 +0260,-029.64,-04.84,01.00,000.00,1.00 +0261,-029.71,-04.34,01.00,000.00,1.00 +0262,-029.78,-03.85,01.00,000.00,1.00 +0263,-029.83,-03.35,01.00,000.00,1.00 +0264,-029.88,-02.85,01.00,000.00,1.00 +0265,-029.92,-02.35,01.00,000.00,1.00 +0266,-029.95,-01.85,01.00,000.00,1.00 +0267,-029.97,-01.35,01.00,000.00,1.00 +0268,-029.99,-00.85,01.00,000.00,1.00 +0269,-030.00,-00.35,01.00,000.00,1.00 +0270,-030.00,+00.15,01.00,000.00,1.00 +0271,-029.99,+00.65,01.00,000.00,1.00 +0272,-029.98,+01.15,01.00,000.00,1.00 +0273,-029.96,+01.65,01.00,000.00,1.00 +0274,-029.93,+02.15,01.00,000.00,1.00 +0275,-029.89,+02.65,01.00,000.00,1.00 +0276,-029.85,+03.15,01.00,000.00,1.00 +0277,-029.80,+03.65,01.00,000.00,1.00 +0278,-029.74,+04.14,01.00,000.00,1.00 +0279,-029.67,+04.64,01.00,000.00,1.00 +0280,-029.60,+05.13,01.00,000.00,1.00 +0281,-029.52,+05.63,01.00,000.00,1.00 +0282,-029.43,+06.12,01.00,000.00,1.00 +0283,-029.33,+06.61,01.00,000.00,1.00 +0284,-029.22,+07.10,01.00,000.00,1.00 +0285,-029.11,+07.59,01.00,000.00,1.00 +0286,-028.99,+08.08,01.00,000.00,1.00 +0287,-028.86,+08.56,01.00,000.00,1.00 +0288,-028.73,+09.04,01.00,000.00,1.00 +0289,-028.58,+09.52,01.00,000.00,1.00 +0290,-028.43,+10.00,01.00,000.00,1.00 +0291,-028.27,+10.48,01.00,000.00,1.00 +0292,-028.11,+10.95,01.00,000.00,1.00 +0293,-027.93,+11.42,01.00,000.00,1.00 +0294,-027.75,+11.89,01.00,000.00,1.00 +0295,-027.56,+12.35,01.00,000.00,1.00 +0296,-027.36,+12.81,01.00,000.00,1.00 +0297,-027.15,+13.27,01.00,000.00,1.00 +0298,-026.94,+13.73,01.00,000.00,1.00 +0299,-026.72,+14.18,01.00,000.00,1.00 +0300,-026.49,+14.63,01.00,000.00,1.00 +0301,-026.25,+15.07,01.00,000.00,1.00 +0302,-026.00,+15.51,01.00,000.00,1.00 +0303,-025.75,+15.95,01.00,000.00,1.00 +0304,-025.49,+16.38,01.00,000.00,1.00 +0305,-025.22,+16.81,01.00,000.00,1.00 +0306,-024.94,+17.23,01.00,000.00,1.00 +0307,-024.66,+17.65,01.00,000.00,1.00 +0308,-024.36,+18.07,01.00,000.00,1.00 +0309,-024.06,+18.48,01.00,000.00,1.00 +0310,-023.75,+18.89,01.00,000.00,1.00 +0311,-023.43,+19.29,01.00,000.00,1.00 +0312,-023.11,+19.68,01.00,000.00,1.00 +0313,-022.77,+20.07,01.00,000.00,1.00 +0314,-022.43,+20.46,01.00,000.00,1.00 +0315,-022.08,+20.84,01.00,000.00,1.00 +0316,-021.73,+21.21,01.00,000.00,1.00 +0317,-021.36,+21.58,01.00,000.00,1.00 +0318,-020.99,+21.94,01.00,000.00,1.00 +0319,-020.61,+22.30,01.00,000.00,1.00 +0320,-020.22,+22.64,01.00,000.00,1.00 +0321,-019.83,+22.99,01.00,000.00,1.00 +0322,-019.42,+23.32,01.00,000.00,1.00 +0323,-019.01,+23.65,01.00,000.00,1.00 +0324,-018.59,+23.98,01.00,000.00,1.00 +0325,-018.17,+24.29,01.00,000.00,1.00 +0326,-017.74,+24.60,01.00,000.00,1.00 +0327,-017.29,+24.90,01.00,000.00,1.00 +0328,-016.85,+25.20,01.00,000.00,1.00 +0329,-016.39,+25.48,01.00,000.00,1.00 +0330,-015.93,+25.76,01.00,000.00,1.00 +0331,-015.46,+26.03,01.00,000.00,1.00 +0332,-014.99,+26.29,01.00,000.00,1.00 +0333,-014.51,+26.55,01.00,000.00,1.00 +0334,-014.02,+26.80,01.00,000.00,1.00 +0335,-013.53,+27.03,01.00,000.00,1.00 +0336,-013.03,+27.26,01.00,000.00,1.00 +0337,-012.52,+27.49,01.00,000.00,1.00 +0338,-012.01,+27.70,01.00,000.00,1.00 +0339,-011.49,+27.90,01.00,000.00,1.00 +0340,-010.97,+28.10,01.00,000.00,1.00 +0341,-010.45,+28.28,01.00,000.00,1.00 +0342,-009.91,+28.46,01.00,000.00,1.00 +0343,-009.38,+28.63,01.00,000.00,1.00 +0344,-008.83,+28.79,01.00,000.00,1.00 +0345,-008.29,+28.94,01.00,000.00,1.00 +0346,-007.74,+29.07,01.00,000.00,1.00 +0347,-007.19,+29.20,01.00,000.00,1.00 +0348,-006.63,+29.33,01.00,000.00,1.00 +0349,-006.07,+29.44,01.00,000.00,1.00 +0350,-005.51,+29.54,01.00,000.00,1.00 +0351,-004.94,+29.63,01.00,000.00,1.00 +0352,-004.37,+29.71,01.00,000.00,1.00 +0353,-003.80,+29.78,01.00,000.00,1.00 +0354,-003.23,+29.84,01.00,000.00,1.00 +0355,-002.65,+29.89,01.00,000.00,1.00 +0356,-002.08,+29.93,01.00,000.00,1.00 +0357,-001.50,+29.97,01.00,000.00,1.00 +0358,-000.92,+29.99,01.00,000.00,1.00 +0359,-000.35,+30.00,01.00,000.00,1.00 +0360,+000.23,+30.00,01.00,000.00,1.00 +0361,+000.81,+29.99,01.00,000.00,1.00 +0362,+001.39,+29.97,01.00,000.00,1.00 +0363,+001.96,+29.94,01.00,000.00,1.00 +0364,+002.54,+29.90,01.00,000.00,1.00 +0365,+003.11,+29.85,01.00,000.00,1.00 +0366,+003.69,+29.79,01.00,000.00,1.00 +0367,+004.26,+29.72,01.00,000.00,1.00 +0368,+004.83,+29.64,01.00,000.00,1.00 +0369,+005.39,+29.56,01.00,000.00,1.00 +0370,+005.96,+29.46,01.00,000.00,1.00 +0371,+006.52,+29.35,01.00,000.00,1.00 +0372,+007.07,+29.23,01.00,000.00,1.00 +0373,+007.63,+29.10,01.00,000.00,1.00 +0374,+008.18,+28.96,01.00,000.00,1.00 +0375,+008.73,+28.82,01.00,000.00,1.00 +0376,+009.27,+28.66,01.00,000.00,1.00 +0377,+009.81,+28.49,01.00,000.00,1.00 +0378,+010.34,+28.32,01.00,000.00,1.00 +0379,+010.87,+28.13,01.00,000.00,1.00 +0380,+011.39,+27.94,01.00,000.00,1.00 +0381,+011.91,+27.74,01.00,000.00,1.00 +0382,+012.42,+27.53,01.00,000.00,1.00 +0383,+012.93,+27.31,01.00,000.00,1.00 +0384,+013.43,+27.08,01.00,000.00,1.00 +0385,+013.92,+26.84,01.00,000.00,1.00 +0386,+014.41,+26.60,01.00,000.00,1.00 +0387,+014.89,+26.35,01.00,000.00,1.00 +0388,+015.37,+26.08,01.00,000.00,1.00 +0389,+015.84,+25.81,01.00,000.00,1.00 +0390,+016.30,+25.54,01.00,000.00,1.00 +0391,+016.76,+25.25,01.00,000.00,1.00 +0392,+017.21,+24.96,01.00,000.00,1.00 +0393,+017.65,+24.66,01.00,000.00,1.00 +0394,+018.08,+24.35,01.00,000.00,1.00 +0395,+018.51,+24.04,01.00,000.00,1.00 +0396,+018.93,+23.72,01.00,000.00,1.00 +0397,+019.34,+23.39,01.00,000.00,1.00 +0398,+019.75,+23.06,01.00,000.00,1.00 +0399,+020.14,+22.71,01.00,000.00,1.00 +0400,+020.53,+22.37,01.00,000.00,1.00 +0401,+020.91,+22.01,01.00,000.00,1.00 +0402,+021.29,+21.65,01.00,000.00,1.00 +0403,+021.66,+21.28,01.00,000.00,1.00 +0404,+022.01,+20.91,01.00,000.00,1.00 +0405,+022.36,+20.53,01.00,000.00,1.00 +0406,+022.71,+20.15,01.00,000.00,1.00 +0407,+023.04,+19.76,01.00,000.00,1.00 +0408,+023.37,+19.37,01.00,000.00,1.00 +0409,+023.69,+18.97,01.00,000.00,1.00 +0410,+024.00,+18.56,01.00,000.00,1.00 +0411,+024.30,+18.15,01.00,000.00,1.00 +0412,+024.60,+17.74,01.00,000.00,1.00 +0413,+024.88,+17.32,01.00,000.00,1.00 +0414,+025.16,+16.90,01.00,000.00,1.00 +0415,+025.44,+16.47,01.00,000.00,1.00 +0416,+025.70,+16.04,01.00,000.00,1.00 +0417,+025.95,+15.60,01.00,000.00,1.00 +0418,+026.20,+15.16,01.00,000.00,1.00 +0419,+026.44,+14.72,01.00,000.00,1.00 +0420,+026.67,+14.27,01.00,000.00,1.00 +0421,+026.90,+13.82,01.00,000.00,1.00 +0422,+027.11,+13.36,01.00,000.00,1.00 +0423,+027.32,+12.90,01.00,000.00,1.00 +0424,+027.52,+12.44,01.00,000.00,1.00 +0425,+027.71,+11.98,01.00,000.00,1.00 +0426,+027.89,+11.51,01.00,000.00,1.00 +0427,+028.07,+11.04,01.00,000.00,1.00 +0428,+028.24,+10.57,01.00,000.00,1.00 +0429,+028.40,+10.10,01.00,000.00,1.00 +0430,+028.55,+09.62,01.00,000.00,1.00 +0431,+028.70,+09.14,01.00,000.00,1.00 +0432,+028.84,+08.66,01.00,000.00,1.00 +0433,+028.97,+08.17,01.00,000.00,1.00 +0434,+029.09,+07.69,01.00,000.00,1.00 +0435,+029.20,+07.20,01.00,000.00,1.00 +0436,+029.31,+06.71,01.00,000.00,1.00 +0437,+029.41,+06.22,01.00,000.00,1.00 +0438,+029.50,+05.73,01.00,000.00,1.00 +0439,+029.58,+05.23,01.00,000.00,1.00 +0440,+029.66,+04.74,01.00,000.00,1.00 +0441,+029.73,+04.24,01.00,000.00,1.00 +0442,+029.79,+03.75,01.00,000.00,1.00 +0443,+029.84,+03.25,01.00,000.00,1.00 +0444,+029.89,+02.75,01.00,000.00,1.00 +0445,+029.92,+02.25,01.00,000.00,1.00 +0446,+029.95,+01.75,01.00,000.00,1.00 +0447,+029.98,+01.25,01.00,000.00,1.00 +0448,+029.99,+00.75,01.00,000.00,1.00 +0449,+030.00,+00.25,01.00,000.00,1.00 +0450,+030.00,-00.25,01.00,000.00,1.00 +0451,+029.99,-00.75,01.00,000.00,1.00 +0452,+029.98,-01.25,01.00,000.00,1.00 +0453,+029.95,-01.75,01.00,000.00,1.00 +0454,+029.92,-02.25,01.00,000.00,1.00 +0455,+029.89,-02.75,01.00,000.00,1.00 +0456,+029.84,-03.25,01.00,000.00,1.00 +0457,+029.79,-03.75,01.00,000.00,1.00 +0458,+029.73,-04.24,01.00,000.00,1.00 +0459,+029.66,-04.74,01.00,000.00,1.00 +0460,+029.58,-05.23,01.00,000.00,1.00 +0461,+029.50,-05.73,01.00,000.00,1.00 +0462,+029.41,-06.22,01.00,000.00,1.00 +0463,+029.31,-06.71,01.00,000.00,1.00 +0464,+029.20,-07.20,01.00,000.00,1.00 +0465,+029.09,-07.69,01.00,000.00,1.00 +0466,+028.97,-08.17,01.00,000.00,1.00 +0467,+028.84,-08.66,01.00,000.00,1.00 +0468,+028.70,-09.14,01.00,000.00,1.00 +0469,+028.55,-09.62,01.00,000.00,1.00 +0470,+028.40,-10.10,01.00,000.00,1.00 +0471,+028.24,-10.57,01.00,000.00,1.00 +0472,+028.07,-11.04,01.00,000.00,1.00 +0473,+027.89,-11.51,01.00,000.00,1.00 +0474,+027.71,-11.98,01.00,000.00,1.00 +0475,+027.52,-12.44,01.00,000.00,1.00 +0476,+027.32,-12.90,01.00,000.00,1.00 +0477,+027.11,-13.36,01.00,000.00,1.00 +0478,+026.90,-13.82,01.00,000.00,1.00 +0479,+026.67,-14.27,01.00,000.00,1.00 +0480,+026.44,-14.72,01.00,000.00,1.00 +0481,+026.20,-15.16,01.00,000.00,1.00 +0482,+025.95,-15.60,01.00,000.00,1.00 +0483,+025.70,-16.04,01.00,000.00,1.00 +0484,+025.44,-16.47,01.00,000.00,1.00 +0485,+025.16,-16.90,01.00,000.00,1.00 +0486,+024.88,-17.32,01.00,000.00,1.00 +0487,+024.60,-17.74,01.00,000.00,1.00 +0488,+024.30,-18.15,01.00,000.00,1.00 +0489,+024.00,-18.56,01.00,000.00,1.00 +0490,+023.69,-18.97,01.00,000.00,1.00 +0491,+023.37,-19.37,01.00,000.00,1.00 +0492,+023.04,-19.76,01.00,000.00,1.00 +0493,+022.71,-20.15,01.00,000.00,1.00 +0494,+022.36,-20.53,01.00,000.00,1.00 +0495,+022.01,-20.91,01.00,000.00,1.00 +0496,+021.66,-21.28,01.00,000.00,1.00 +0497,+021.29,-21.65,01.00,000.00,1.00 +0498,+020.91,-22.01,01.00,000.00,1.00 +0499,+020.53,-22.37,01.00,000.00,1.00 +0500,+020.14,-22.71,01.00,000.00,1.00 +0501,+019.75,-23.06,01.00,000.00,1.00 +0502,+019.34,-23.39,01.00,000.00,1.00 +0503,+018.93,-23.72,01.00,000.00,1.00 +0504,+018.51,-24.04,01.00,000.00,1.00 +0505,+018.08,-24.35,01.00,000.00,1.00 +0506,+017.65,-24.66,01.00,000.00,1.00 +0507,+017.21,-24.96,01.00,000.00,1.00 +0508,+016.76,-25.25,01.00,000.00,1.00 +0509,+016.30,-25.54,01.00,000.00,1.00 +0510,+015.84,-25.81,01.00,000.00,1.00 +0511,+015.37,-26.08,01.00,000.00,1.00 +0512,+014.89,-26.35,01.00,000.00,1.00 +0513,+014.41,-26.60,01.00,000.00,1.00 +0514,+013.92,-26.84,01.00,000.00,1.00 +0515,+013.43,-27.08,01.00,000.00,1.00 +0516,+012.93,-27.31,01.00,000.00,1.00 +0517,+012.42,-27.53,01.00,000.00,1.00 +0518,+011.91,-27.74,01.00,000.00,1.00 +0519,+011.39,-27.94,01.00,000.00,1.00 +0520,+010.87,-28.13,01.00,000.00,1.00 +0521,+010.34,-28.32,01.00,000.00,1.00 +0522,+009.81,-28.49,01.00,000.00,1.00 +0523,+009.27,-28.66,01.00,000.00,1.00 +0524,+008.73,-28.82,01.00,000.00,1.00 +0525,+008.18,-28.96,01.00,000.00,1.00 +0526,+007.63,-29.10,01.00,000.00,1.00 +0527,+007.07,-29.23,01.00,000.00,1.00 +0528,+006.52,-29.35,01.00,000.00,1.00 +0529,+005.96,-29.46,01.00,000.00,1.00 +0530,+005.39,-29.56,01.00,000.00,1.00 +0531,+004.83,-29.64,01.00,000.00,1.00 +0532,+004.26,-29.72,01.00,000.00,1.00 +0533,+003.69,-29.79,01.00,000.00,1.00 +0534,+003.11,-29.85,01.00,000.00,1.00 +0535,+002.54,-29.90,01.00,000.00,1.00 +0536,+001.96,-29.94,01.00,000.00,1.00 +0537,+001.39,-29.97,01.00,000.00,1.00 +0538,+000.81,-29.99,01.00,000.00,1.00 +0539,+000.23,-30.00,01.00,000.00,1.00 +0540,-000.35,-30.00,01.00,000.00,1.00 +0541,-000.92,-29.99,01.00,000.00,1.00 +0542,-001.50,-29.97,01.00,000.00,1.00 +0543,-002.08,-29.93,01.00,000.00,1.00 +0544,-002.65,-29.89,01.00,000.00,1.00 +0545,-003.23,-29.84,01.00,000.00,1.00 +0546,-003.80,-29.78,01.00,000.00,1.00 +0547,-004.37,-29.71,01.00,000.00,1.00 +0548,-004.94,-29.63,01.00,000.00,1.00 +0549,-005.51,-29.54,01.00,000.00,1.00 +0550,-006.07,-29.44,01.00,000.00,1.00 +0551,-006.63,-29.33,01.00,000.00,1.00 +0552,-007.19,-29.20,01.00,000.00,1.00 +0553,-007.74,-29.07,01.00,000.00,1.00 +0554,-008.29,-28.94,01.00,000.00,1.00 +0555,-008.83,-28.79,01.00,000.00,1.00 +0556,-009.38,-28.63,01.00,000.00,1.00 +0557,-009.91,-28.46,01.00,000.00,1.00 +0558,-010.45,-28.28,01.00,000.00,1.00 +0559,-010.97,-28.10,01.00,000.00,1.00 +0560,-011.49,-27.90,01.00,000.00,1.00 +0561,-012.01,-27.70,01.00,000.00,1.00 +0562,-012.52,-27.49,01.00,000.00,1.00 +0563,-013.03,-27.26,01.00,000.00,1.00 +0564,-013.53,-27.03,01.00,000.00,1.00 +0565,-014.02,-26.80,01.00,000.00,1.00 +0566,-014.51,-26.55,01.00,000.00,1.00 +0567,-014.99,-26.29,01.00,000.00,1.00 +0568,-015.46,-26.03,01.00,000.00,1.00 +0569,-015.93,-25.76,01.00,000.00,1.00 +0570,-016.39,-25.48,01.00,000.00,1.00 +0571,-016.85,-25.20,01.00,000.00,1.00 +0572,-017.29,-24.90,01.00,000.00,1.00 +0573,-017.74,-24.60,01.00,000.00,1.00 +0574,-018.17,-24.29,01.00,000.00,1.00 +0575,-018.59,-23.98,01.00,000.00,1.00 +0576,-019.01,-23.65,01.00,000.00,1.00 +0577,-019.42,-23.32,01.00,000.00,1.00 +0578,-019.83,-22.99,01.00,000.00,1.00 +0579,-020.22,-22.64,01.00,000.00,1.00 +0580,-020.61,-22.30,01.00,000.00,1.00 +0581,-020.99,-21.94,01.00,000.00,1.00 +0582,-021.36,-21.58,01.00,000.00,1.00 +0583,-021.73,-21.21,01.00,000.00,1.00 +0584,-022.08,-20.84,01.00,000.00,1.00 +0585,-022.43,-20.46,01.00,000.00,1.00 +0586,-022.77,-20.07,01.00,000.00,1.00 +0587,-023.11,-19.68,01.00,000.00,1.00 +0588,-023.43,-19.29,01.00,000.00,1.00 +0589,-023.75,-18.89,01.00,000.00,1.00 +0590,-024.06,-18.48,01.00,000.00,1.00 +0591,-024.36,-18.07,01.00,000.00,1.00 +0592,-024.66,-17.65,01.00,000.00,1.00 +0593,-024.94,-17.23,01.00,000.00,1.00 +0594,-025.22,-16.81,01.00,000.00,1.00 +0595,-025.49,-16.38,01.00,000.00,1.00 +0596,-025.75,-15.95,01.00,000.00,1.00 +0597,-026.00,-15.51,01.00,000.00,1.00 +0598,-026.25,-15.07,01.00,000.00,1.00 +0599,-026.49,-14.63,01.00,000.00,1.00 +0600,-026.72,-14.18,01.00,000.00,1.00 +0601,-026.94,-13.73,01.00,000.00,1.00 +0602,-027.15,-13.27,01.00,000.00,1.00 +0603,-027.36,-12.81,01.00,000.00,1.00 +0604,-027.56,-12.35,01.00,000.00,1.00 +0605,-027.75,-11.89,01.00,000.00,1.00 +0606,-027.93,-11.42,01.00,000.00,1.00 +0607,-028.11,-10.95,01.00,000.00,1.00 +0608,-028.27,-10.48,01.00,000.00,1.00 +0609,-028.43,-10.00,01.00,000.00,1.00 +0610,-028.58,-09.52,01.00,000.00,1.00 +0611,-028.73,-09.04,01.00,000.00,1.00 +0612,-028.86,-08.56,01.00,000.00,1.00 +0613,-028.99,-08.08,01.00,000.00,1.00 +0614,-029.11,-07.59,01.00,000.00,1.00 +0615,-029.22,-07.10,01.00,000.00,1.00 +0616,-029.33,-06.61,01.00,000.00,1.00 +0617,-029.43,-06.12,01.00,000.00,1.00 +0618,-029.52,-05.63,01.00,000.00,1.00 +0619,-029.60,-05.13,01.00,000.00,1.00 +0620,-029.67,-04.64,01.00,000.00,1.00 +0621,-029.74,-04.14,01.00,000.00,1.00 +0622,-029.80,-03.65,01.00,000.00,1.00 +0623,-029.85,-03.15,01.00,000.00,1.00 +0624,-029.89,-02.65,01.00,000.00,1.00 +0625,-029.93,-02.15,01.00,000.00,1.00 +0626,-029.96,-01.65,01.00,000.00,1.00 +0627,-029.98,-01.15,01.00,000.00,1.00 +0628,-029.99,-00.65,01.00,000.00,1.00 +0629,-030.00,-00.15,01.00,000.00,1.00 +0630,-030.00,+00.35,01.00,000.00,1.00 +0631,-029.99,+00.85,01.00,000.00,1.00 +0632,-029.97,+01.35,01.00,000.00,1.00 +0633,-029.95,+01.85,01.00,000.00,1.00 +0634,-029.92,+02.35,01.00,000.00,1.00 +0635,-029.88,+02.85,01.00,000.00,1.00 +0636,-029.83,+03.35,01.00,000.00,1.00 +0637,-029.78,+03.85,01.00,000.00,1.00 +0638,-029.71,+04.34,01.00,000.00,1.00 +0639,-029.64,+04.84,01.00,000.00,1.00 +0640,-029.57,+05.33,01.00,000.00,1.00 +0641,-029.48,+05.83,01.00,000.00,1.00 +0642,-029.39,+06.32,01.00,000.00,1.00 +0643,-029.29,+06.81,01.00,000.00,1.00 +0644,-029.18,+07.30,01.00,000.00,1.00 +0645,-029.06,+07.78,01.00,000.00,1.00 +0646,-028.94,+08.27,01.00,000.00,1.00 +0647,-028.81,+08.75,01.00,000.00,1.00 +0648,-028.67,+09.23,01.00,000.00,1.00 +0649,-028.52,+09.71,01.00,000.00,1.00 +0650,-028.37,+10.19,01.00,000.00,1.00 +0651,-028.21,+10.67,01.00,000.00,1.00 +0652,-028.04,+11.14,01.00,000.00,1.00 +0653,-027.86,+11.61,01.00,000.00,1.00 +0654,-027.67,+12.07,01.00,000.00,1.00 +0655,-027.48,+12.54,01.00,000.00,1.00 +0656,-027.28,+13.00,01.00,000.00,1.00 +0657,-027.07,+13.45,01.00,000.00,1.00 +0658,-026.85,+13.91,01.00,000.00,1.00 +0659,-026.63,+14.36,01.00,000.00,1.00 +0660,-026.39,+14.80,01.00,000.00,1.00 +0661,-026.15,+15.25,01.00,000.00,1.00 +0662,-025.90,+15.69,01.00,000.00,1.00 +0663,-025.65,+16.12,01.00,000.00,1.00 +0664,-025.38,+16.55,01.00,000.00,1.00 +0665,-025.11,+16.98,01.00,000.00,1.00 +0666,-024.83,+17.40,01.00,000.00,1.00 +0667,-024.54,+17.82,01.00,000.00,1.00 +0668,-024.24,+18.23,01.00,000.00,1.00 +0669,-023.94,+18.64,01.00,000.00,1.00 +0670,-023.63,+19.05,01.00,000.00,1.00 +0671,-023.30,+19.45,01.00,000.00,1.00 +0672,-022.98,+19.84,01.00,000.00,1.00 +0673,-022.64,+20.23,01.00,000.00,1.00 +0674,-022.29,+20.61,01.00,000.00,1.00 +0675,-021.94,+20.99,01.00,000.00,1.00 +0676,-021.58,+21.36,01.00,000.00,1.00 +0677,-021.21,+21.72,01.00,000.00,1.00 +0678,-020.84,+22.08,01.00,000.00,1.00 +0679,-020.46,+22.44,01.00,000.00,1.00 +0680,-020.06,+22.78,01.00,000.00,1.00 +0681,-019.67,+23.12,01.00,000.00,1.00 +0682,-019.26,+23.46,01.00,000.00,1.00 +0683,-018.85,+23.78,01.00,000.00,1.00 +0684,-018.42,+24.10,01.00,000.00,1.00 +0685,-018.00,+24.42,01.00,000.00,1.00 +0686,-017.56,+24.72,01.00,000.00,1.00 +0687,-017.12,+25.02,01.00,000.00,1.00 +0688,-016.67,+25.31,01.00,000.00,1.00 +0689,-016.21,+25.59,01.00,000.00,1.00 +0690,-015.75,+25.87,01.00,000.00,1.00 +0691,-015.28,+26.14,01.00,000.00,1.00 +0692,-014.80,+26.40,01.00,000.00,1.00 +0693,-014.31,+26.65,01.00,000.00,1.00 +0694,-013.82,+26.89,01.00,000.00,1.00 +0695,-013.33,+27.13,01.00,000.00,1.00 +0696,-012.83,+27.35,01.00,000.00,1.00 +0697,-012.32,+27.57,01.00,000.00,1.00 +0698,-011.81,+27.78,01.00,000.00,1.00 +0699,-011.29,+27.98,01.00,000.00,1.00 +0700,-010.76,+28.17,01.00,000.00,1.00 +0701,-010.23,+28.35,01.00,000.00,1.00 +0702,-009.70,+28.53,01.00,000.00,1.00 +0703,-009.16,+28.69,01.00,000.00,1.00 +0704,-008.62,+28.85,01.00,000.00,1.00 +0705,-008.07,+28.99,01.00,000.00,1.00 +0706,-007.52,+29.13,01.00,000.00,1.00 +0707,-006.96,+29.25,01.00,000.00,1.00 +0708,-006.41,+29.37,01.00,000.00,1.00 +0709,-005.84,+29.48,01.00,000.00,1.00 +0710,-005.28,+29.57,01.00,000.00,1.00 +0711,-004.71,+29.66,01.00,000.00,1.00 +0712,-004.14,+29.74,01.00,000.00,1.00 +0713,-003.57,+29.81,01.00,000.00,1.00 +0714,-003.00,+29.86,01.00,000.00,1.00 +0715,-002.42,+29.91,01.00,000.00,1.00 +0716,-001.85,+29.95,01.00,000.00,1.00 +0717,-001.27,+29.98,01.00,000.00,1.00 +0718,-000.69,+29.99,01.00,000.00,1.00 +0719,-000.12,+30.00,01.00,000.00,1.00 +0720,+000.46,+30.00,01.00,000.00,1.00 +0721,+001.04,+29.98,01.00,000.00,1.00 +0722,+001.62,+29.96,01.00,000.00,1.00 +0723,+002.19,+29.93,01.00,000.00,1.00 +0724,+002.77,+29.88,01.00,000.00,1.00 +0725,+003.34,+29.83,01.00,000.00,1.00 +0726,+003.92,+29.77,01.00,000.00,1.00 +0727,+004.49,+29.69,01.00,000.00,1.00 +0728,+005.05,+29.61,01.00,000.00,1.00 +0729,+005.62,+29.52,01.00,000.00,1.00 +0730,+006.18,+29.41,01.00,000.00,1.00 +0731,+006.74,+29.30,01.00,000.00,1.00 +0732,+007.30,+29.18,01.00,000.00,1.00 +0733,+007.85,+29.05,01.00,000.00,1.00 +0734,+008.40,+28.91,01.00,000.00,1.00 +0735,+008.94,+28.76,01.00,000.00,1.00 +0736,+009.48,+28.59,01.00,000.00,1.00 +0737,+010.02,+28.43,01.00,000.00,1.00 +0738,+010.55,+28.25,01.00,000.00,1.00 +0739,+011.08,+28.06,01.00,000.00,1.00 +0740,+011.60,+27.86,01.00,000.00,1.00 +0741,+012.11,+27.66,01.00,000.00,1.00 +0742,+012.62,+27.44,01.00,000.00,1.00 +0743,+013.13,+27.22,01.00,000.00,1.00 +0744,+013.63,+26.99,01.00,000.00,1.00 +0745,+014.12,+26.75,01.00,000.00,1.00 +0746,+014.61,+26.50,01.00,000.00,1.00 +0747,+015.09,+26.24,01.00,000.00,1.00 +0748,+015.56,+25.98,01.00,000.00,1.00 +0749,+016.03,+25.71,01.00,000.00,1.00 +0750,+016.48,+25.42,01.00,000.00,1.00 +0751,+016.94,+25.14,01.00,000.00,1.00 +0752,+017.38,+24.84,01.00,000.00,1.00 +0753,+017.82,+24.54,01.00,000.00,1.00 +0754,+018.25,+24.23,01.00,000.00,1.00 +0755,+018.68,+23.91,01.00,000.00,1.00 +0756,+019.09,+23.59,01.00,000.00,1.00 +0757,+019.50,+23.26,01.00,000.00,1.00 +0758,+019.91,+22.92,01.00,000.00,1.00 +0759,+020.30,+22.58,01.00,000.00,1.00 +0760,+020.69,+22.22,01.00,000.00,1.00 +0761,+021.07,+21.87,01.00,000.00,1.00 +0762,+021.44,+21.51,01.00,000.00,1.00 +0763,+021.80,+21.14,01.00,000.00,1.00 +0764,+022.16,+20.76,01.00,000.00,1.00 +0765,+022.50,+20.38,01.00,000.00,1.00 +0766,+022.84,+20.00,01.00,000.00,1.00 +0767,+023.17,+19.60,01.00,000.00,1.00 +0768,+023.50,+19.21,01.00,000.00,1.00 +0769,+023.81,+18.81,01.00,000.00,1.00 +0770,+024.12,+18.40,01.00,000.00,1.00 +0771,+024.42,+17.99,01.00,000.00,1.00 +0772,+024.71,+17.57,01.00,000.00,1.00 +0773,+025.00,+17.15,01.00,000.00,1.00 +0774,+025.27,+16.73,01.00,000.00,1.00 +0775,+025.54,+16.30,01.00,000.00,1.00 +0776,+025.80,+15.86,01.00,000.00,1.00 +0777,+026.05,+15.42,01.00,000.00,1.00 +0778,+026.30,+14.98,01.00,000.00,1.00 +0779,+026.53,+14.54,01.00,000.00,1.00 +0780,+026.76,+14.09,01.00,000.00,1.00 +0781,+026.98,+13.64,01.00,000.00,1.00 +0782,+027.20,+13.18,01.00,000.00,1.00 +0783,+027.40,+12.72,01.00,000.00,1.00 +0784,+027.60,+12.26,01.00,000.00,1.00 +0785,+027.79,+11.79,01.00,000.00,1.00 +0786,+027.97,+11.33,01.00,000.00,1.00 +0787,+028.14,+10.85,01.00,000.00,1.00 +0788,+028.30,+10.38,01.00,000.00,1.00 +0789,+028.46,+09.90,01.00,000.00,1.00 +0790,+028.61,+09.43,01.00,000.00,1.00 +0791,+028.75,+08.95,01.00,000.00,1.00 +0792,+028.89,+08.46,01.00,000.00,1.00 +0793,+029.02,+07.98,01.00,000.00,1.00 +0794,+029.13,+07.49,01.00,000.00,1.00 +0795,+029.25,+07.00,01.00,000.00,1.00 +0796,+029.35,+06.51,01.00,000.00,1.00 +0797,+029.44,+06.02,01.00,000.00,1.00 +0798,+029.53,+05.53,01.00,000.00,1.00 +0799,+029.61,+05.04,01.00,000.00,1.00 +0800,+029.69,+04.54,01.00,000.00,1.00 +0801,+029.75,+04.04,01.00,000.00,1.00 +0802,+029.81,+03.55,01.00,000.00,1.00 +0803,+029.86,+03.05,01.00,000.00,1.00 +0804,+029.90,+02.55,01.00,000.00,1.00 +0805,+029.94,+02.05,01.00,000.00,1.00 +0806,+029.96,+01.55,01.00,000.00,1.00 +0807,+029.98,+01.05,01.00,000.00,1.00 +0808,+030.00,+00.55,01.00,000.00,1.00 +0809,+030.00,+00.05,01.00,000.00,1.00 +0810,+030.00,-00.45,01.00,000.00,1.00 +0811,+029.99,-00.95,01.00,000.00,1.00 +0812,+029.97,-01.45,01.00,000.00,1.00 +0813,+029.94,-01.95,01.00,000.00,1.00 +0814,+029.91,-02.45,01.00,000.00,1.00 +0815,+029.87,-02.95,01.00,000.00,1.00 +0816,+029.82,-03.45,01.00,000.00,1.00 +0817,+029.76,-03.94,01.00,000.00,1.00 +0818,+029.70,-04.44,01.00,000.00,1.00 +0819,+029.63,-04.94,01.00,000.00,1.00 +0820,+029.55,-05.43,01.00,000.00,1.00 +0821,+029.46,-05.92,01.00,000.00,1.00 +0822,+029.37,-06.42,01.00,000.00,1.00 +0823,+029.27,-06.91,01.00,000.00,1.00 +0824,+029.16,-07.39,01.00,000.00,1.00 +0825,+029.04,-07.88,01.00,000.00,1.00 +0826,+028.91,-08.37,01.00,000.00,1.00 +0827,+028.78,-08.85,01.00,000.00,1.00 +0828,+028.64,-09.33,01.00,000.00,1.00 +0829,+028.49,-09.81,01.00,000.00,1.00 +0830,+028.34,-10.29,01.00,000.00,1.00 +0831,+028.17,-10.76,01.00,000.00,1.00 +0832,+028.00,-11.23,01.00,000.00,1.00 +0833,+027.82,-11.70,01.00,000.00,1.00 +0834,+027.63,-12.17,01.00,000.00,1.00 +0835,+027.44,-12.63,01.00,000.00,1.00 +0836,+027.24,-13.09,01.00,000.00,1.00 +0837,+027.03,-13.54,01.00,000.00,1.00 +0838,+026.81,-14.00,01.00,000.00,1.00 +0839,+026.58,-14.45,01.00,000.00,1.00 +0840,+026.35,-14.89,01.00,000.00,1.00 +0841,+026.10,-15.34,01.00,000.00,1.00 +0842,+025.85,-15.77,01.00,000.00,1.00 +0843,+025.59,-16.21,01.00,000.00,1.00 +0844,+025.33,-16.64,01.00,000.00,1.00 +0845,+025.05,-17.07,01.00,000.00,1.00 +0846,+024.77,-17.49,01.00,000.00,1.00 +0847,+024.48,-17.90,01.00,000.00,1.00 +0848,+024.18,-18.32,01.00,000.00,1.00 +0849,+023.88,-18.72,01.00,000.00,1.00 +0850,+023.56,-19.13,01.00,000.00,1.00 +0851,+023.24,-19.53,01.00,000.00,1.00 +0852,+022.91,-19.92,01.00,000.00,1.00 +0853,+022.57,-20.30,01.00,000.00,1.00 +0854,+022.23,-20.69,01.00,000.00,1.00 +0855,+021.87,-21.06,01.00,000.00,1.00 +0856,+021.51,-21.43,01.00,000.00,1.00 +0857,+021.14,-21.80,01.00,000.00,1.00 +0858,+020.76,-22.15,01.00,000.00,1.00 +0859,+020.38,-22.51,01.00,000.00,1.00 +0860,+019.99,-22.85,01.00,000.00,1.00 +0861,+019.58,-23.19,01.00,000.00,1.00 +0862,+019.18,-23.52,01.00,000.00,1.00 +0863,+018.76,-23.85,01.00,000.00,1.00 +0864,+018.34,-24.17,01.00,000.00,1.00 +0865,+017.91,-24.48,01.00,000.00,1.00 +0866,+017.47,-24.78,01.00,000.00,1.00 +0867,+017.03,-25.08,01.00,000.00,1.00 +0868,+016.58,-25.37,01.00,000.00,1.00 +0869,+016.12,-25.65,01.00,000.00,1.00 +0870,+015.65,-25.92,01.00,000.00,1.00 +0871,+015.18,-26.19,01.00,000.00,1.00 +0872,+014.70,-26.45,01.00,000.00,1.00 +0873,+014.22,-26.70,01.00,000.00,1.00 +0874,+013.73,-26.94,01.00,000.00,1.00 +0875,+013.23,-27.17,01.00,000.00,1.00 +0876,+012.73,-27.40,01.00,000.00,1.00 +0877,+012.22,-27.61,01.00,000.00,1.00 +0878,+011.70,-27.82,01.00,000.00,1.00 +0879,+011.18,-28.02,01.00,000.00,1.00 +0880,+010.66,-28.21,01.00,000.00,1.00 +0881,+010.13,-28.39,01.00,000.00,1.00 +0882,+009.59,-28.56,01.00,000.00,1.00 +0883,+009.05,-28.72,01.00,000.00,1.00 +0884,+008.51,-28.88,01.00,000.00,1.00 +0885,+007.96,-29.02,01.00,000.00,1.00 +0886,+007.41,-29.15,01.00,000.00,1.00 +0887,+006.85,-29.28,01.00,000.00,1.00 +0888,+006.29,-29.39,01.00,000.00,1.00 +0889,+005.73,-29.50,01.00,000.00,1.00 +0890,+005.17,-29.59,01.00,000.00,1.00 +0891,+004.60,-29.68,01.00,000.00,1.00 +0892,+004.03,-29.75,01.00,000.00,1.00 +0893,+003.46,-29.82,01.00,000.00,1.00 +0894,+002.88,-29.87,01.00,000.00,1.00 +0895,+002.31,-29.92,01.00,000.00,1.00 +0896,+001.73,-29.95,01.00,000.00,1.00 +0897,+001.16,-29.98,01.00,000.00,1.00 +0898,+000.58,-29.99,01.00,000.00,1.00 +0899,+000.00,-30.00,01.00,000.00,1.00 +0900,-000.58,-29.99,01.00,000.00,1.00 +0901,-001.16,-29.98,01.00,000.00,1.00 +0902,-001.73,-29.95,01.00,000.00,1.00 +0903,-002.31,-29.92,01.00,000.00,1.00 +0904,-002.88,-29.87,01.00,000.00,1.00 +0905,-003.46,-29.82,01.00,000.00,1.00 +0906,-004.03,-29.75,01.00,000.00,1.00 +0907,-004.60,-29.68,01.00,000.00,1.00 +0908,-005.17,-29.59,01.00,000.00,1.00 +0909,-005.73,-29.50,01.00,000.00,1.00 +0910,-006.29,-29.39,01.00,000.00,1.00 +0911,-006.85,-29.28,01.00,000.00,1.00 +0912,-007.41,-29.15,01.00,000.00,1.00 +0913,-007.96,-29.02,01.00,000.00,1.00 +0914,-008.51,-28.88,01.00,000.00,1.00 +0915,-009.05,-28.72,01.00,000.00,1.00 +0916,-009.59,-28.56,01.00,000.00,1.00 +0917,-010.13,-28.39,01.00,000.00,1.00 +0918,-010.66,-28.21,01.00,000.00,1.00 +0919,-011.18,-28.02,01.00,000.00,1.00 +0920,-011.70,-27.82,01.00,000.00,1.00 +0921,-012.22,-27.61,01.00,000.00,1.00 +0922,-012.73,-27.40,01.00,000.00,1.00 +0923,-013.23,-27.17,01.00,000.00,1.00 +0924,-013.73,-26.94,01.00,000.00,1.00 +0925,-014.22,-26.70,01.00,000.00,1.00 +0926,-014.70,-26.45,01.00,000.00,1.00 +0927,-015.18,-26.19,01.00,000.00,1.00 +0928,-015.65,-25.92,01.00,000.00,1.00 +0929,-016.12,-25.65,01.00,000.00,1.00 +0930,-016.58,-25.37,01.00,000.00,1.00 +0931,-017.03,-25.08,01.00,000.00,1.00 +0932,-017.47,-24.78,01.00,000.00,1.00 +0933,-017.91,-24.48,01.00,000.00,1.00 +0934,-018.34,-24.17,01.00,000.00,1.00 +0935,-018.76,-23.85,01.00,000.00,1.00 +0936,-019.18,-23.52,01.00,000.00,1.00 +0937,-019.58,-23.19,01.00,000.00,1.00 +0938,-019.99,-22.85,01.00,000.00,1.00 +0939,-020.38,-22.51,01.00,000.00,1.00 +0940,-020.76,-22.15,01.00,000.00,1.00 +0941,-021.14,-21.80,01.00,000.00,1.00 +0942,-021.51,-21.43,01.00,000.00,1.00 +0943,-021.87,-21.06,01.00,000.00,1.00 +0944,-022.23,-20.69,01.00,000.00,1.00 +0945,-022.57,-20.30,01.00,000.00,1.00 +0946,-022.91,-19.92,01.00,000.00,1.00 +0947,-023.24,-19.53,01.00,000.00,1.00 +0948,-023.56,-19.13,01.00,000.00,1.00 +0949,-023.88,-18.72,01.00,000.00,1.00 +0950,-024.18,-18.32,01.00,000.00,1.00 +0951,-024.48,-17.90,01.00,000.00,1.00 +0952,-024.77,-17.49,01.00,000.00,1.00 +0953,-025.05,-17.07,01.00,000.00,1.00 +0954,-025.33,-16.64,01.00,000.00,1.00 +0955,-025.59,-16.21,01.00,000.00,1.00 +0956,-025.85,-15.77,01.00,000.00,1.00 +0957,-026.10,-15.34,01.00,000.00,1.00 +0958,-026.35,-14.89,01.00,000.00,1.00 +0959,-026.58,-14.45,01.00,000.00,1.00 +0960,-026.81,-14.00,01.00,000.00,1.00 +0961,-027.03,-13.54,01.00,000.00,1.00 +0962,-027.24,-13.09,01.00,000.00,1.00 +0963,-027.44,-12.63,01.00,000.00,1.00 +0964,-027.63,-12.17,01.00,000.00,1.00 +0965,-027.82,-11.70,01.00,000.00,1.00 +0966,-028.00,-11.23,01.00,000.00,1.00 +0967,-028.17,-10.76,01.00,000.00,1.00 +0968,-028.34,-10.29,01.00,000.00,1.00 +0969,-028.49,-09.81,01.00,000.00,1.00 +0970,-028.64,-09.33,01.00,000.00,1.00 +0971,-028.78,-08.85,01.00,000.00,1.00 +0972,-028.91,-08.37,01.00,000.00,1.00 +0973,-029.04,-07.88,01.00,000.00,1.00 +0974,-029.16,-07.39,01.00,000.00,1.00 +0975,-029.27,-06.91,01.00,000.00,1.00 +0976,-029.37,-06.42,01.00,000.00,1.00 +0977,-029.46,-05.92,01.00,000.00,1.00 +0978,-029.55,-05.43,01.00,000.00,1.00 +0979,-029.63,-04.94,01.00,000.00,1.00 +0980,-029.70,-04.44,01.00,000.00,1.00 +0981,-029.76,-03.94,01.00,000.00,1.00 +0982,-029.82,-03.45,01.00,000.00,1.00 +0983,-029.87,-02.95,01.00,000.00,1.00 +0984,-029.91,-02.45,01.00,000.00,1.00 +0985,-029.94,-01.95,01.00,000.00,1.00 +0986,-029.97,-01.45,01.00,000.00,1.00 +0987,-029.99,-00.95,01.00,000.00,1.00 +0988,-030.00,-00.45,01.00,000.00,1.00 +0989,-030.00,+00.05,01.00,000.00,1.00 +0990,-030.00,+00.55,01.00,000.00,1.00 +0991,-029.98,+01.05,01.00,000.00,1.00 +0992,-029.96,+01.55,01.00,000.00,1.00 +0993,-029.94,+02.05,01.00,000.00,1.00 +0994,-029.90,+02.55,01.00,000.00,1.00 +0995,-029.86,+03.05,01.00,000.00,1.00 +0996,-029.81,+03.55,01.00,000.00,1.00 +0997,-029.75,+04.04,01.00,000.00,1.00 +0998,-029.69,+04.54,01.00,000.00,1.00 +0999,-029.61,+05.04,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t10_ch1.csv b/scripts/td_object_renderer/metadata/csv/t10_ch1.csv new file mode 100644 index 0000000000..62928fffb6 --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t10_ch1.csv @@ -0,0 +1,1000 @@ +0000,+000.00,+20.00,01.00,000.00,1.00 +0001,+000.79,+20.00,01.00,000.00,1.00 +0002,+001.59,+20.00,01.00,000.00,1.00 +0003,+002.38,+20.00,01.00,000.00,1.00 +0004,+003.17,+20.00,01.00,000.00,1.00 +0005,+003.96,+20.00,01.00,000.00,1.00 +0006,+004.76,+20.00,01.00,000.00,1.00 +0007,+005.55,+20.00,01.00,000.00,1.00 +0008,+006.34,+20.00,01.00,000.00,1.00 +0009,+007.14,+20.00,01.00,000.00,1.00 +0010,+007.93,+20.00,01.00,000.00,1.00 +0011,+008.72,+20.00,01.00,000.00,1.00 +0012,+009.52,+20.00,01.00,000.00,1.00 +0013,+010.31,+20.00,01.00,000.00,1.00 +0014,+011.10,+20.00,01.00,000.00,1.00 +0015,+011.89,+20.00,01.00,000.00,1.00 +0016,+012.69,+20.00,01.00,000.00,1.00 +0017,+013.48,+20.00,01.00,000.00,1.00 +0018,+014.27,+20.00,01.00,000.00,1.00 +0019,+015.07,+20.00,01.00,000.00,1.00 +0020,+015.86,+20.00,01.00,000.00,1.00 +0021,+016.65,+20.00,01.00,000.00,1.00 +0022,+017.44,+20.00,01.00,000.00,1.00 +0023,+018.24,+20.00,01.00,000.00,1.00 +0024,+019.03,+20.00,01.00,000.00,1.00 +0025,+019.82,+20.00,01.00,000.00,1.00 +0026,+020.62,+20.00,01.00,000.00,1.00 +0027,+021.41,+20.00,01.00,000.00,1.00 +0028,+022.20,+20.00,01.00,000.00,1.00 +0029,+023.00,+20.00,01.00,000.00,1.00 +0030,+023.79,+20.00,01.00,000.00,1.00 +0031,+024.58,+20.00,01.00,000.00,1.00 +0032,+025.37,+20.00,01.00,000.00,1.00 +0033,+026.17,+20.00,01.00,000.00,1.00 +0034,+026.96,+20.00,01.00,000.00,1.00 +0035,+027.75,+20.00,01.00,000.00,1.00 +0036,+028.55,+20.00,01.00,000.00,1.00 +0037,+029.34,+20.00,01.00,000.00,1.00 +0038,+030.13,+20.00,01.00,000.00,1.00 +0039,+030.93,+20.00,01.00,000.00,1.00 +0040,+031.72,+20.00,01.00,000.00,1.00 +0041,+032.51,+20.00,01.00,000.00,1.00 +0042,+033.30,+20.00,01.00,000.00,1.00 +0043,+034.10,+20.00,01.00,000.00,1.00 +0044,+034.89,+20.00,01.00,000.00,1.00 +0045,+035.68,+20.00,01.00,000.00,1.00 +0046,+036.48,+20.00,01.00,000.00,1.00 +0047,+037.27,+20.00,01.00,000.00,1.00 +0048,+038.06,+20.00,01.00,000.00,1.00 +0049,+038.85,+20.00,01.00,000.00,1.00 +0050,+039.65,+20.00,01.00,000.00,1.00 +0051,+040.44,+20.00,01.00,000.00,1.00 +0052,+041.23,+20.00,01.00,000.00,1.00 +0053,+042.03,+20.00,01.00,000.00,1.00 +0054,+042.82,+20.00,01.00,000.00,1.00 +0055,+043.61,+20.00,01.00,000.00,1.00 +0056,+044.41,+20.00,01.00,000.00,1.00 +0057,+045.20,+20.00,01.00,000.00,1.00 +0058,+045.99,+20.00,01.00,000.00,1.00 +0059,+046.78,+20.00,01.00,000.00,1.00 +0060,+047.58,+20.00,01.00,000.00,1.00 +0061,+048.37,+20.00,01.00,000.00,1.00 +0062,+049.16,+20.00,01.00,000.00,1.00 +0063,+049.96,+20.00,01.00,000.00,1.00 +0064,+050.75,+20.00,01.00,000.00,1.00 +0065,+051.54,+20.00,01.00,000.00,1.00 +0066,+052.33,+20.00,01.00,000.00,1.00 +0067,+053.13,+20.00,01.00,000.00,1.00 +0068,+053.92,+20.00,01.00,000.00,1.00 +0069,+054.71,+20.00,01.00,000.00,1.00 +0070,+055.51,+20.00,01.00,000.00,1.00 +0071,+056.30,+20.00,01.00,000.00,1.00 +0072,+057.09,+20.00,01.00,000.00,1.00 +0073,+057.89,+20.00,01.00,000.00,1.00 +0074,+058.68,+20.00,01.00,000.00,1.00 +0075,+059.47,+20.00,01.00,000.00,1.00 +0076,+060.26,+20.00,01.00,000.00,1.00 +0077,+061.06,+20.00,01.00,000.00,1.00 +0078,+061.85,+20.00,01.00,000.00,1.00 +0079,+062.64,+20.00,01.00,000.00,1.00 +0080,+063.44,+20.00,01.00,000.00,1.00 +0081,+064.23,+20.00,01.00,000.00,1.00 +0082,+065.02,+20.00,01.00,000.00,1.00 +0083,+065.81,+20.00,01.00,000.00,1.00 +0084,+066.61,+20.00,01.00,000.00,1.00 +0085,+067.40,+20.00,01.00,000.00,1.00 +0086,+068.19,+20.00,01.00,000.00,1.00 +0087,+068.99,+20.00,01.00,000.00,1.00 +0088,+069.78,+20.00,01.00,000.00,1.00 +0089,+070.57,+20.00,01.00,000.00,1.00 +0090,+071.37,+20.00,01.00,000.00,1.00 +0091,+072.16,+20.00,01.00,000.00,1.00 +0092,+072.95,+20.00,01.00,000.00,1.00 +0093,+073.74,+20.00,01.00,000.00,1.00 +0094,+074.54,+20.00,01.00,000.00,1.00 +0095,+075.33,+20.00,01.00,000.00,1.00 +0096,+076.12,+20.00,01.00,000.00,1.00 +0097,+076.92,+20.00,01.00,000.00,1.00 +0098,+077.71,+20.00,01.00,000.00,1.00 +0099,+078.50,+20.00,01.00,000.00,1.00 +0100,+079.30,+20.00,01.00,000.00,1.00 +0101,+080.09,+20.00,01.00,000.00,1.00 +0102,+080.88,+20.00,01.00,000.00,1.00 +0103,+081.67,+20.00,01.00,000.00,1.00 +0104,+082.47,+20.00,01.00,000.00,1.00 +0105,+083.26,+20.00,01.00,000.00,1.00 +0106,+084.05,+20.00,01.00,000.00,1.00 +0107,+084.85,+20.00,01.00,000.00,1.00 +0108,+085.64,+20.00,01.00,000.00,1.00 +0109,+086.43,+20.00,01.00,000.00,1.00 +0110,+087.22,+20.00,01.00,000.00,1.00 +0111,+088.02,+20.00,01.00,000.00,1.00 +0112,+088.81,+20.00,01.00,000.00,1.00 +0113,+089.60,+20.00,01.00,000.00,1.00 +0114,+090.40,+20.00,01.00,000.00,1.00 +0115,+091.19,+20.00,01.00,000.00,1.00 +0116,+091.98,+20.00,01.00,000.00,1.00 +0117,+092.78,+20.00,01.00,000.00,1.00 +0118,+093.57,+20.00,01.00,000.00,1.00 +0119,+094.36,+20.00,01.00,000.00,1.00 +0120,+095.15,+20.00,01.00,000.00,1.00 +0121,+095.95,+20.00,01.00,000.00,1.00 +0122,+096.74,+20.00,01.00,000.00,1.00 +0123,+097.53,+20.00,01.00,000.00,1.00 +0124,+098.33,+20.00,01.00,000.00,1.00 +0125,+099.12,+20.00,01.00,000.00,1.00 +0126,+099.91,+20.00,01.00,000.00,1.00 +0127,+100.70,+20.00,01.00,000.00,1.00 +0128,+101.50,+20.00,01.00,000.00,1.00 +0129,+102.29,+20.00,01.00,000.00,1.00 +0130,+103.08,+20.00,01.00,000.00,1.00 +0131,+103.88,+20.00,01.00,000.00,1.00 +0132,+104.67,+20.00,01.00,000.00,1.00 +0133,+105.46,+20.00,01.00,000.00,1.00 +0134,+106.26,+20.00,01.00,000.00,1.00 +0135,+107.05,+20.00,01.00,000.00,1.00 +0136,+107.84,+20.00,01.00,000.00,1.00 +0137,+108.63,+20.00,01.00,000.00,1.00 +0138,+109.43,+20.00,01.00,000.00,1.00 +0139,+110.22,+20.00,01.00,000.00,1.00 +0140,+111.01,+20.00,01.00,000.00,1.00 +0141,+111.81,+20.00,01.00,000.00,1.00 +0142,+112.60,+20.00,01.00,000.00,1.00 +0143,+113.39,+20.00,01.00,000.00,1.00 +0144,+114.19,+20.00,01.00,000.00,1.00 +0145,+114.98,+20.00,01.00,000.00,1.00 +0146,+115.77,+20.00,01.00,000.00,1.00 +0147,+116.56,+20.00,01.00,000.00,1.00 +0148,+117.36,+20.00,01.00,000.00,1.00 +0149,+118.15,+20.00,01.00,000.00,1.00 +0150,+118.94,+20.00,01.00,000.00,1.00 +0151,+119.74,+20.00,01.00,000.00,1.00 +0152,+120.53,+20.00,01.00,000.00,1.00 +0153,+121.32,+20.00,01.00,000.00,1.00 +0154,+122.11,+20.00,01.00,000.00,1.00 +0155,+122.91,+20.00,01.00,000.00,1.00 +0156,+123.70,+20.00,01.00,000.00,1.00 +0157,+124.49,+20.00,01.00,000.00,1.00 +0158,+125.29,+20.00,01.00,000.00,1.00 +0159,+126.08,+20.00,01.00,000.00,1.00 +0160,+126.87,+20.00,01.00,000.00,1.00 +0161,+127.67,+20.00,01.00,000.00,1.00 +0162,+128.46,+20.00,01.00,000.00,1.00 +0163,+129.25,+20.00,01.00,000.00,1.00 +0164,+130.04,+20.00,01.00,000.00,1.00 +0165,+130.84,+20.00,01.00,000.00,1.00 +0166,+131.63,+20.00,01.00,000.00,1.00 +0167,+132.42,+20.00,01.00,000.00,1.00 +0168,+133.22,+20.00,01.00,000.00,1.00 +0169,+134.01,+20.00,01.00,000.00,1.00 +0170,+134.80,+20.00,01.00,000.00,1.00 +0171,+135.59,+20.00,01.00,000.00,1.00 +0172,+136.39,+20.00,01.00,000.00,1.00 +0173,+137.18,+20.00,01.00,000.00,1.00 +0174,+137.97,+20.00,01.00,000.00,1.00 +0175,+138.77,+20.00,01.00,000.00,1.00 +0176,+139.56,+20.00,01.00,000.00,1.00 +0177,+140.35,+20.00,01.00,000.00,1.00 +0178,+141.15,+20.00,01.00,000.00,1.00 +0179,+141.94,+20.00,01.00,000.00,1.00 +0180,+142.73,+20.00,01.00,000.00,1.00 +0181,+143.52,+20.00,01.00,000.00,1.00 +0182,+144.32,+20.00,01.00,000.00,1.00 +0183,+145.11,+20.00,01.00,000.00,1.00 +0184,+145.90,+20.00,01.00,000.00,1.00 +0185,+146.70,+20.00,01.00,000.00,1.00 +0186,+147.49,+20.00,01.00,000.00,1.00 +0187,+148.28,+20.00,01.00,000.00,1.00 +0188,+149.07,+20.00,01.00,000.00,1.00 +0189,+149.87,+20.00,01.00,000.00,1.00 +0190,+150.66,+20.00,01.00,000.00,1.00 +0191,+151.45,+20.00,01.00,000.00,1.00 +0192,+152.25,+20.00,01.00,000.00,1.00 +0193,+153.04,+20.00,01.00,000.00,1.00 +0194,+153.83,+20.00,01.00,000.00,1.00 +0195,+154.63,+20.00,01.00,000.00,1.00 +0196,+155.42,+20.00,01.00,000.00,1.00 +0197,+156.21,+20.00,01.00,000.00,1.00 +0198,+157.00,+20.00,01.00,000.00,1.00 +0199,+157.80,+20.00,01.00,000.00,1.00 +0200,+158.59,+20.00,01.00,000.00,1.00 +0201,+159.38,+20.00,01.00,000.00,1.00 +0202,+160.18,+20.00,01.00,000.00,1.00 +0203,+160.97,+20.00,01.00,000.00,1.00 +0204,+161.76,+20.00,01.00,000.00,1.00 +0205,+162.56,+20.00,01.00,000.00,1.00 +0206,+163.35,+20.00,01.00,000.00,1.00 +0207,+164.14,+20.00,01.00,000.00,1.00 +0208,+164.93,+20.00,01.00,000.00,1.00 +0209,+165.73,+20.00,01.00,000.00,1.00 +0210,+166.52,+20.00,01.00,000.00,1.00 +0211,+167.31,+20.00,01.00,000.00,1.00 +0212,+168.11,+20.00,01.00,000.00,1.00 +0213,+168.90,+20.00,01.00,000.00,1.00 +0214,+169.69,+20.00,01.00,000.00,1.00 +0215,+170.48,+20.00,01.00,000.00,1.00 +0216,+171.28,+20.00,01.00,000.00,1.00 +0217,+172.07,+20.00,01.00,000.00,1.00 +0218,+172.86,+20.00,01.00,000.00,1.00 +0219,+173.66,+20.00,01.00,000.00,1.00 +0220,+174.45,+20.00,01.00,000.00,1.00 +0221,+175.24,+20.00,01.00,000.00,1.00 +0222,+176.04,+20.00,01.00,000.00,1.00 +0223,+176.83,+20.00,01.00,000.00,1.00 +0224,+177.62,+20.00,01.00,000.00,1.00 +0225,+178.41,+20.00,01.00,000.00,1.00 +0226,+179.21,+20.00,01.00,000.00,1.00 +0227,+180.00,+20.00,01.00,000.00,1.00 +0228,-179.21,+20.00,01.00,000.00,1.00 +0229,-178.41,+20.00,01.00,000.00,1.00 +0230,-177.62,+20.00,01.00,000.00,1.00 +0231,-176.83,+20.00,01.00,000.00,1.00 +0232,-176.04,+20.00,01.00,000.00,1.00 +0233,-175.24,+20.00,01.00,000.00,1.00 +0234,-174.45,+20.00,01.00,000.00,1.00 +0235,-173.66,+20.00,01.00,000.00,1.00 +0236,-172.86,+20.00,01.00,000.00,1.00 +0237,-172.07,+20.00,01.00,000.00,1.00 +0238,-171.28,+20.00,01.00,000.00,1.00 +0239,-170.48,+20.00,01.00,000.00,1.00 +0240,-169.69,+20.00,01.00,000.00,1.00 +0241,-168.90,+20.00,01.00,000.00,1.00 +0242,-168.11,+20.00,01.00,000.00,1.00 +0243,-167.31,+20.00,01.00,000.00,1.00 +0244,-166.52,+20.00,01.00,000.00,1.00 +0245,-165.73,+20.00,01.00,000.00,1.00 +0246,-164.93,+20.00,01.00,000.00,1.00 +0247,-164.14,+20.00,01.00,000.00,1.00 +0248,-163.35,+20.00,01.00,000.00,1.00 +0249,-162.56,+20.00,01.00,000.00,1.00 +0250,-161.76,+20.00,01.00,000.00,1.00 +0251,-160.97,+20.00,01.00,000.00,1.00 +0252,-160.18,+20.00,01.00,000.00,1.00 +0253,-159.38,+20.00,01.00,000.00,1.00 +0254,-158.59,+20.00,01.00,000.00,1.00 +0255,-157.80,+20.00,01.00,000.00,1.00 +0256,-157.00,+20.00,01.00,000.00,1.00 +0257,-156.21,+20.00,01.00,000.00,1.00 +0258,-155.42,+20.00,01.00,000.00,1.00 +0259,-154.63,+20.00,01.00,000.00,1.00 +0260,-153.83,+20.00,01.00,000.00,1.00 +0261,-153.04,+20.00,01.00,000.00,1.00 +0262,-152.25,+20.00,01.00,000.00,1.00 +0263,-151.45,+20.00,01.00,000.00,1.00 +0264,-150.66,+20.00,01.00,000.00,1.00 +0265,-149.87,+20.00,01.00,000.00,1.00 +0266,-149.07,+20.00,01.00,000.00,1.00 +0267,-148.28,+20.00,01.00,000.00,1.00 +0268,-147.49,+20.00,01.00,000.00,1.00 +0269,-146.70,+20.00,01.00,000.00,1.00 +0270,-145.90,+20.00,01.00,000.00,1.00 +0271,-145.11,+20.00,01.00,000.00,1.00 +0272,-144.32,+20.00,01.00,000.00,1.00 +0273,-143.52,+20.00,01.00,000.00,1.00 +0274,-142.73,+20.00,01.00,000.00,1.00 +0275,-141.94,+20.00,01.00,000.00,1.00 +0276,-141.15,+20.00,01.00,000.00,1.00 +0277,-140.35,+20.00,01.00,000.00,1.00 +0278,-139.56,+20.00,01.00,000.00,1.00 +0279,-138.77,+20.00,01.00,000.00,1.00 +0280,-137.97,+20.00,01.00,000.00,1.00 +0281,-137.18,+20.00,01.00,000.00,1.00 +0282,-136.39,+20.00,01.00,000.00,1.00 +0283,-135.59,+20.00,01.00,000.00,1.00 +0284,-134.80,+20.00,01.00,000.00,1.00 +0285,-134.01,+20.00,01.00,000.00,1.00 +0286,-133.22,+20.00,01.00,000.00,1.00 +0287,-132.42,+20.00,01.00,000.00,1.00 +0288,-131.63,+20.00,01.00,000.00,1.00 +0289,-130.84,+20.00,01.00,000.00,1.00 +0290,-130.04,+20.00,01.00,000.00,1.00 +0291,-129.25,+20.00,01.00,000.00,1.00 +0292,-128.46,+20.00,01.00,000.00,1.00 +0293,-127.67,+20.00,01.00,000.00,1.00 +0294,-126.87,+20.00,01.00,000.00,1.00 +0295,-126.08,+20.00,01.00,000.00,1.00 +0296,-125.29,+20.00,01.00,000.00,1.00 +0297,-124.49,+20.00,01.00,000.00,1.00 +0298,-123.70,+20.00,01.00,000.00,1.00 +0299,-122.91,+20.00,01.00,000.00,1.00 +0300,-122.11,+20.00,01.00,000.00,1.00 +0301,-121.32,+20.00,01.00,000.00,1.00 +0302,-120.53,+20.00,01.00,000.00,1.00 +0303,-119.74,+20.00,01.00,000.00,1.00 +0304,-118.94,+20.00,01.00,000.00,1.00 +0305,-118.15,+20.00,01.00,000.00,1.00 +0306,-117.36,+20.00,01.00,000.00,1.00 +0307,-116.56,+20.00,01.00,000.00,1.00 +0308,-115.77,+20.00,01.00,000.00,1.00 +0309,-114.98,+20.00,01.00,000.00,1.00 +0310,-114.19,+20.00,01.00,000.00,1.00 +0311,-113.39,+20.00,01.00,000.00,1.00 +0312,-112.60,+20.00,01.00,000.00,1.00 +0313,-111.81,+20.00,01.00,000.00,1.00 +0314,-111.01,+20.00,01.00,000.00,1.00 +0315,-110.22,+20.00,01.00,000.00,1.00 +0316,-109.43,+20.00,01.00,000.00,1.00 +0317,-108.63,+20.00,01.00,000.00,1.00 +0318,-107.84,+20.00,01.00,000.00,1.00 +0319,-107.05,+20.00,01.00,000.00,1.00 +0320,-106.26,+20.00,01.00,000.00,1.00 +0321,-105.46,+20.00,01.00,000.00,1.00 +0322,-104.67,+20.00,01.00,000.00,1.00 +0323,-103.88,+20.00,01.00,000.00,1.00 +0324,-103.08,+20.00,01.00,000.00,1.00 +0325,-102.29,+20.00,01.00,000.00,1.00 +0326,-101.50,+20.00,01.00,000.00,1.00 +0327,-100.70,+20.00,01.00,000.00,1.00 +0328,-099.91,+20.00,01.00,000.00,1.00 +0329,-099.12,+20.00,01.00,000.00,1.00 +0330,-098.33,+20.00,01.00,000.00,1.00 +0331,-097.53,+20.00,01.00,000.00,1.00 +0332,-096.74,+20.00,01.00,000.00,1.00 +0333,-095.95,+20.00,01.00,000.00,1.00 +0334,-095.15,+20.00,01.00,000.00,1.00 +0335,-094.36,+20.00,01.00,000.00,1.00 +0336,-093.57,+20.00,01.00,000.00,1.00 +0337,-092.78,+20.00,01.00,000.00,1.00 +0338,-091.98,+20.00,01.00,000.00,1.00 +0339,-091.19,+20.00,01.00,000.00,1.00 +0340,-090.40,+20.00,01.00,000.00,1.00 +0341,-089.60,+20.00,01.00,000.00,1.00 +0342,-088.81,+20.00,01.00,000.00,1.00 +0343,-088.02,+20.00,01.00,000.00,1.00 +0344,-087.22,+20.00,01.00,000.00,1.00 +0345,-086.43,+20.00,01.00,000.00,1.00 +0346,-085.64,+20.00,01.00,000.00,1.00 +0347,-084.85,+20.00,01.00,000.00,1.00 +0348,-084.05,+20.00,01.00,000.00,1.00 +0349,-083.26,+20.00,01.00,000.00,1.00 +0350,-082.47,+20.00,01.00,000.00,1.00 +0351,-081.67,+20.00,01.00,000.00,1.00 +0352,-080.88,+20.00,01.00,000.00,1.00 +0353,-080.09,+20.00,01.00,000.00,1.00 +0354,-079.30,+20.00,01.00,000.00,1.00 +0355,-078.50,+20.00,01.00,000.00,1.00 +0356,-077.71,+20.00,01.00,000.00,1.00 +0357,-076.92,+20.00,01.00,000.00,1.00 +0358,-076.12,+20.00,01.00,000.00,1.00 +0359,-075.33,+20.00,01.00,000.00,1.00 +0360,-074.54,+20.00,01.00,000.00,1.00 +0361,-073.74,+20.00,01.00,000.00,1.00 +0362,-072.95,+20.00,01.00,000.00,1.00 +0363,-072.16,+20.00,01.00,000.00,1.00 +0364,-071.37,+20.00,01.00,000.00,1.00 +0365,-070.57,+20.00,01.00,000.00,1.00 +0366,-069.78,+20.00,01.00,000.00,1.00 +0367,-068.99,+20.00,01.00,000.00,1.00 +0368,-068.19,+20.00,01.00,000.00,1.00 +0369,-067.40,+20.00,01.00,000.00,1.00 +0370,-066.61,+20.00,01.00,000.00,1.00 +0371,-065.81,+20.00,01.00,000.00,1.00 +0372,-065.02,+20.00,01.00,000.00,1.00 +0373,-064.23,+20.00,01.00,000.00,1.00 +0374,-063.44,+20.00,01.00,000.00,1.00 +0375,-062.64,+20.00,01.00,000.00,1.00 +0376,-061.85,+20.00,01.00,000.00,1.00 +0377,-061.06,+20.00,01.00,000.00,1.00 +0378,-060.26,+20.00,01.00,000.00,1.00 +0379,-059.47,+20.00,01.00,000.00,1.00 +0380,-058.68,+20.00,01.00,000.00,1.00 +0381,-057.89,+20.00,01.00,000.00,1.00 +0382,-057.09,+20.00,01.00,000.00,1.00 +0383,-056.30,+20.00,01.00,000.00,1.00 +0384,-055.51,+20.00,01.00,000.00,1.00 +0385,-054.71,+20.00,01.00,000.00,1.00 +0386,-053.92,+20.00,01.00,000.00,1.00 +0387,-053.13,+20.00,01.00,000.00,1.00 +0388,-052.33,+20.00,01.00,000.00,1.00 +0389,-051.54,+20.00,01.00,000.00,1.00 +0390,-050.75,+20.00,01.00,000.00,1.00 +0391,-049.96,+20.00,01.00,000.00,1.00 +0392,-049.16,+20.00,01.00,000.00,1.00 +0393,-048.37,+20.00,01.00,000.00,1.00 +0394,-047.58,+20.00,01.00,000.00,1.00 +0395,-046.78,+20.00,01.00,000.00,1.00 +0396,-045.99,+20.00,01.00,000.00,1.00 +0397,-045.20,+20.00,01.00,000.00,1.00 +0398,-044.41,+20.00,01.00,000.00,1.00 +0399,-043.61,+20.00,01.00,000.00,1.00 +0400,-042.82,+20.00,01.00,000.00,1.00 +0401,-042.03,+20.00,01.00,000.00,1.00 +0402,-041.23,+20.00,01.00,000.00,1.00 +0403,-040.44,+20.00,01.00,000.00,1.00 +0404,-039.65,+20.00,01.00,000.00,1.00 +0405,-038.85,+20.00,01.00,000.00,1.00 +0406,-038.06,+20.00,01.00,000.00,1.00 +0407,-037.27,+20.00,01.00,000.00,1.00 +0408,-036.48,+20.00,01.00,000.00,1.00 +0409,-035.68,+20.00,01.00,000.00,1.00 +0410,-034.89,+20.00,01.00,000.00,1.00 +0411,-034.10,+20.00,01.00,000.00,1.00 +0412,-033.30,+20.00,01.00,000.00,1.00 +0413,-032.51,+20.00,01.00,000.00,1.00 +0414,-031.72,+20.00,01.00,000.00,1.00 +0415,-030.93,+20.00,01.00,000.00,1.00 +0416,-030.13,+20.00,01.00,000.00,1.00 +0417,-029.34,+20.00,01.00,000.00,1.00 +0418,-028.55,+20.00,01.00,000.00,1.00 +0419,-027.75,+20.00,01.00,000.00,1.00 +0420,-026.96,+20.00,01.00,000.00,1.00 +0421,-026.17,+20.00,01.00,000.00,1.00 +0422,-025.37,+20.00,01.00,000.00,1.00 +0423,-024.58,+20.00,01.00,000.00,1.00 +0424,-023.79,+20.00,01.00,000.00,1.00 +0425,-023.00,+20.00,01.00,000.00,1.00 +0426,-022.20,+20.00,01.00,000.00,1.00 +0427,-021.41,+20.00,01.00,000.00,1.00 +0428,-020.62,+20.00,01.00,000.00,1.00 +0429,-019.82,+20.00,01.00,000.00,1.00 +0430,-019.03,+20.00,01.00,000.00,1.00 +0431,-018.24,+20.00,01.00,000.00,1.00 +0432,-017.44,+20.00,01.00,000.00,1.00 +0433,-016.65,+20.00,01.00,000.00,1.00 +0434,-015.86,+20.00,01.00,000.00,1.00 +0435,-015.07,+20.00,01.00,000.00,1.00 +0436,-014.27,+20.00,01.00,000.00,1.00 +0437,-013.48,+20.00,01.00,000.00,1.00 +0438,-012.69,+20.00,01.00,000.00,1.00 +0439,-011.89,+20.00,01.00,000.00,1.00 +0440,-011.10,+20.00,01.00,000.00,1.00 +0441,-010.31,+20.00,01.00,000.00,1.00 +0442,-009.52,+20.00,01.00,000.00,1.00 +0443,-008.72,+20.00,01.00,000.00,1.00 +0444,-007.93,+20.00,01.00,000.00,1.00 +0445,-007.14,+20.00,01.00,000.00,1.00 +0446,-006.34,+20.00,01.00,000.00,1.00 +0447,-005.55,+20.00,01.00,000.00,1.00 +0448,-004.76,+20.00,01.00,000.00,1.00 +0449,-003.96,+20.00,01.00,000.00,1.00 +0450,-003.17,+20.00,01.00,000.00,1.00 +0451,-002.38,+20.00,01.00,000.00,1.00 +0452,-001.59,+20.00,01.00,000.00,1.00 +0453,-000.79,+20.00,01.00,000.00,1.00 +0454,-000.00,+20.00,01.00,000.00,1.00 +0455,+000.79,+20.00,01.00,000.00,1.00 +0456,+001.59,+20.00,01.00,000.00,1.00 +0457,+002.38,+20.00,01.00,000.00,1.00 +0458,+003.17,+20.00,01.00,000.00,1.00 +0459,+003.96,+20.00,01.00,000.00,1.00 +0460,+004.76,+20.00,01.00,000.00,1.00 +0461,+005.55,+20.00,01.00,000.00,1.00 +0462,+006.34,+20.00,01.00,000.00,1.00 +0463,+007.14,+20.00,01.00,000.00,1.00 +0464,+007.93,+20.00,01.00,000.00,1.00 +0465,+008.72,+20.00,01.00,000.00,1.00 +0466,+009.52,+20.00,01.00,000.00,1.00 +0467,+010.31,+20.00,01.00,000.00,1.00 +0468,+011.10,+20.00,01.00,000.00,1.00 +0469,+011.89,+20.00,01.00,000.00,1.00 +0470,+012.69,+20.00,01.00,000.00,1.00 +0471,+013.48,+20.00,01.00,000.00,1.00 +0472,+014.27,+20.00,01.00,000.00,1.00 +0473,+015.07,+20.00,01.00,000.00,1.00 +0474,+015.86,+20.00,01.00,000.00,1.00 +0475,+016.65,+20.00,01.00,000.00,1.00 +0476,+017.44,+20.00,01.00,000.00,1.00 +0477,+018.24,+20.00,01.00,000.00,1.00 +0478,+019.03,+20.00,01.00,000.00,1.00 +0479,+019.82,+20.00,01.00,000.00,1.00 +0480,+020.62,+20.00,01.00,000.00,1.00 +0481,+021.41,+20.00,01.00,000.00,1.00 +0482,+022.20,+20.00,01.00,000.00,1.00 +0483,+023.00,+20.00,01.00,000.00,1.00 +0484,+023.79,+20.00,01.00,000.00,1.00 +0485,+024.58,+20.00,01.00,000.00,1.00 +0486,+025.37,+20.00,01.00,000.00,1.00 +0487,+026.17,+20.00,01.00,000.00,1.00 +0488,+026.96,+20.00,01.00,000.00,1.00 +0489,+027.75,+20.00,01.00,000.00,1.00 +0490,+028.55,+20.00,01.00,000.00,1.00 +0491,+029.34,+20.00,01.00,000.00,1.00 +0492,+030.13,+20.00,01.00,000.00,1.00 +0493,+030.93,+20.00,01.00,000.00,1.00 +0494,+031.72,+20.00,01.00,000.00,1.00 +0495,+032.51,+20.00,01.00,000.00,1.00 +0496,+033.30,+20.00,01.00,000.00,1.00 +0497,+034.10,+20.00,01.00,000.00,1.00 +0498,+034.89,+20.00,01.00,000.00,1.00 +0499,+035.68,+20.00,01.00,000.00,1.00 +0500,+036.48,+20.00,01.00,000.00,1.00 +0501,+037.27,+20.00,01.00,000.00,1.00 +0502,+038.06,+20.00,01.00,000.00,1.00 +0503,+038.85,+20.00,01.00,000.00,1.00 +0504,+039.65,+20.00,01.00,000.00,1.00 +0505,+040.44,+20.00,01.00,000.00,1.00 +0506,+041.23,+20.00,01.00,000.00,1.00 +0507,+042.03,+20.00,01.00,000.00,1.00 +0508,+042.82,+20.00,01.00,000.00,1.00 +0509,+043.61,+20.00,01.00,000.00,1.00 +0510,+044.41,+20.00,01.00,000.00,1.00 +0511,+045.20,+20.00,01.00,000.00,1.00 +0512,+045.99,+20.00,01.00,000.00,1.00 +0513,+046.78,+20.00,01.00,000.00,1.00 +0514,+047.58,+20.00,01.00,000.00,1.00 +0515,+048.37,+20.00,01.00,000.00,1.00 +0516,+049.16,+20.00,01.00,000.00,1.00 +0517,+049.96,+20.00,01.00,000.00,1.00 +0518,+050.75,+20.00,01.00,000.00,1.00 +0519,+051.54,+20.00,01.00,000.00,1.00 +0520,+052.33,+20.00,01.00,000.00,1.00 +0521,+053.13,+20.00,01.00,000.00,1.00 +0522,+053.92,+20.00,01.00,000.00,1.00 +0523,+054.71,+20.00,01.00,000.00,1.00 +0524,+055.51,+20.00,01.00,000.00,1.00 +0525,+056.30,+20.00,01.00,000.00,1.00 +0526,+057.09,+20.00,01.00,000.00,1.00 +0527,+057.89,+20.00,01.00,000.00,1.00 +0528,+058.68,+20.00,01.00,000.00,1.00 +0529,+059.47,+20.00,01.00,000.00,1.00 +0530,+060.26,+20.00,01.00,000.00,1.00 +0531,+061.06,+20.00,01.00,000.00,1.00 +0532,+061.85,+20.00,01.00,000.00,1.00 +0533,+062.64,+20.00,01.00,000.00,1.00 +0534,+063.44,+20.00,01.00,000.00,1.00 +0535,+064.23,+20.00,01.00,000.00,1.00 +0536,+065.02,+20.00,01.00,000.00,1.00 +0537,+065.81,+20.00,01.00,000.00,1.00 +0538,+066.61,+20.00,01.00,000.00,1.00 +0539,+067.40,+20.00,01.00,000.00,1.00 +0540,+068.19,+20.00,01.00,000.00,1.00 +0541,+068.99,+20.00,01.00,000.00,1.00 +0542,+069.78,+20.00,01.00,000.00,1.00 +0543,+070.57,+20.00,01.00,000.00,1.00 +0544,+071.37,+20.00,01.00,000.00,1.00 +0545,+072.16,+20.00,01.00,000.00,1.00 +0546,+072.95,+20.00,01.00,000.00,1.00 +0547,+073.74,+20.00,01.00,000.00,1.00 +0548,+074.54,+20.00,01.00,000.00,1.00 +0549,+075.33,+20.00,01.00,000.00,1.00 +0550,+076.12,+20.00,01.00,000.00,1.00 +0551,+076.92,+20.00,01.00,000.00,1.00 +0552,+077.71,+20.00,01.00,000.00,1.00 +0553,+078.50,+20.00,01.00,000.00,1.00 +0554,+079.30,+20.00,01.00,000.00,1.00 +0555,+080.09,+20.00,01.00,000.00,1.00 +0556,+080.88,+20.00,01.00,000.00,1.00 +0557,+081.67,+20.00,01.00,000.00,1.00 +0558,+082.47,+20.00,01.00,000.00,1.00 +0559,+083.26,+20.00,01.00,000.00,1.00 +0560,+084.05,+20.00,01.00,000.00,1.00 +0561,+084.85,+20.00,01.00,000.00,1.00 +0562,+085.64,+20.00,01.00,000.00,1.00 +0563,+086.43,+20.00,01.00,000.00,1.00 +0564,+087.22,+20.00,01.00,000.00,1.00 +0565,+088.02,+20.00,01.00,000.00,1.00 +0566,+088.81,+20.00,01.00,000.00,1.00 +0567,+089.60,+20.00,01.00,000.00,1.00 +0568,+090.40,+20.00,01.00,000.00,1.00 +0569,+091.19,+20.00,01.00,000.00,1.00 +0570,+091.98,+20.00,01.00,000.00,1.00 +0571,+092.78,+20.00,01.00,000.00,1.00 +0572,+093.57,+20.00,01.00,000.00,1.00 +0573,+094.36,+20.00,01.00,000.00,1.00 +0574,+095.15,+20.00,01.00,000.00,1.00 +0575,+095.95,+20.00,01.00,000.00,1.00 +0576,+096.74,+20.00,01.00,000.00,1.00 +0577,+097.53,+20.00,01.00,000.00,1.00 +0578,+098.33,+20.00,01.00,000.00,1.00 +0579,+099.12,+20.00,01.00,000.00,1.00 +0580,+099.91,+20.00,01.00,000.00,1.00 +0581,+100.70,+20.00,01.00,000.00,1.00 +0582,+101.50,+20.00,01.00,000.00,1.00 +0583,+102.29,+20.00,01.00,000.00,1.00 +0584,+103.08,+20.00,01.00,000.00,1.00 +0585,+103.88,+20.00,01.00,000.00,1.00 +0586,+104.67,+20.00,01.00,000.00,1.00 +0587,+105.46,+20.00,01.00,000.00,1.00 +0588,+106.26,+20.00,01.00,000.00,1.00 +0589,+107.05,+20.00,01.00,000.00,1.00 +0590,+107.84,+20.00,01.00,000.00,1.00 +0591,+108.63,+20.00,01.00,000.00,1.00 +0592,+109.43,+20.00,01.00,000.00,1.00 +0593,+110.22,+20.00,01.00,000.00,1.00 +0594,+111.01,+20.00,01.00,000.00,1.00 +0595,+111.81,+20.00,01.00,000.00,1.00 +0596,+112.60,+20.00,01.00,000.00,1.00 +0597,+113.39,+20.00,01.00,000.00,1.00 +0598,+114.19,+20.00,01.00,000.00,1.00 +0599,+114.98,+20.00,01.00,000.00,1.00 +0600,+115.77,+20.00,01.00,000.00,1.00 +0601,+116.56,+20.00,01.00,000.00,1.00 +0602,+117.36,+20.00,01.00,000.00,1.00 +0603,+118.15,+20.00,01.00,000.00,1.00 +0604,+118.94,+20.00,01.00,000.00,1.00 +0605,+119.74,+20.00,01.00,000.00,1.00 +0606,+120.53,+20.00,01.00,000.00,1.00 +0607,+121.32,+20.00,01.00,000.00,1.00 +0608,+122.11,+20.00,01.00,000.00,1.00 +0609,+122.91,+20.00,01.00,000.00,1.00 +0610,+123.70,+20.00,01.00,000.00,1.00 +0611,+124.49,+20.00,01.00,000.00,1.00 +0612,+125.29,+20.00,01.00,000.00,1.00 +0613,+126.08,+20.00,01.00,000.00,1.00 +0614,+126.87,+20.00,01.00,000.00,1.00 +0615,+127.67,+20.00,01.00,000.00,1.00 +0616,+128.46,+20.00,01.00,000.00,1.00 +0617,+129.25,+20.00,01.00,000.00,1.00 +0618,+130.04,+20.00,01.00,000.00,1.00 +0619,+130.84,+20.00,01.00,000.00,1.00 +0620,+131.63,+20.00,01.00,000.00,1.00 +0621,+132.42,+20.00,01.00,000.00,1.00 +0622,+133.22,+20.00,01.00,000.00,1.00 +0623,+134.01,+20.00,01.00,000.00,1.00 +0624,+134.80,+20.00,01.00,000.00,1.00 +0625,+135.59,+20.00,01.00,000.00,1.00 +0626,+136.39,+20.00,01.00,000.00,1.00 +0627,+137.18,+20.00,01.00,000.00,1.00 +0628,+137.97,+20.00,01.00,000.00,1.00 +0629,+138.77,+20.00,01.00,000.00,1.00 +0630,+139.56,+20.00,01.00,000.00,1.00 +0631,+140.35,+20.00,01.00,000.00,1.00 +0632,+141.15,+20.00,01.00,000.00,1.00 +0633,+141.94,+20.00,01.00,000.00,1.00 +0634,+142.73,+20.00,01.00,000.00,1.00 +0635,+143.52,+20.00,01.00,000.00,1.00 +0636,+144.32,+20.00,01.00,000.00,1.00 +0637,+145.11,+20.00,01.00,000.00,1.00 +0638,+145.90,+20.00,01.00,000.00,1.00 +0639,+146.70,+20.00,01.00,000.00,1.00 +0640,+147.49,+20.00,01.00,000.00,1.00 +0641,+148.28,+20.00,01.00,000.00,1.00 +0642,+149.07,+20.00,01.00,000.00,1.00 +0643,+149.87,+20.00,01.00,000.00,1.00 +0644,+150.66,+20.00,01.00,000.00,1.00 +0645,+151.45,+20.00,01.00,000.00,1.00 +0646,+152.25,+20.00,01.00,000.00,1.00 +0647,+153.04,+20.00,01.00,000.00,1.00 +0648,+153.83,+20.00,01.00,000.00,1.00 +0649,+154.63,+20.00,01.00,000.00,1.00 +0650,+155.42,+20.00,01.00,000.00,1.00 +0651,+156.21,+20.00,01.00,000.00,1.00 +0652,+157.00,+20.00,01.00,000.00,1.00 +0653,+157.80,+20.00,01.00,000.00,1.00 +0654,+158.59,+20.00,01.00,000.00,1.00 +0655,+159.38,+20.00,01.00,000.00,1.00 +0656,+160.18,+20.00,01.00,000.00,1.00 +0657,+160.97,+20.00,01.00,000.00,1.00 +0658,+161.76,+20.00,01.00,000.00,1.00 +0659,+162.56,+20.00,01.00,000.00,1.00 +0660,+163.35,+20.00,01.00,000.00,1.00 +0661,+164.14,+20.00,01.00,000.00,1.00 +0662,+164.93,+20.00,01.00,000.00,1.00 +0663,+165.73,+20.00,01.00,000.00,1.00 +0664,+166.52,+20.00,01.00,000.00,1.00 +0665,+167.31,+20.00,01.00,000.00,1.00 +0666,+168.11,+20.00,01.00,000.00,1.00 +0667,+168.90,+20.00,01.00,000.00,1.00 +0668,+169.69,+20.00,01.00,000.00,1.00 +0669,+170.48,+20.00,01.00,000.00,1.00 +0670,+171.28,+20.00,01.00,000.00,1.00 +0671,+172.07,+20.00,01.00,000.00,1.00 +0672,+172.86,+20.00,01.00,000.00,1.00 +0673,+173.66,+20.00,01.00,000.00,1.00 +0674,+174.45,+20.00,01.00,000.00,1.00 +0675,+175.24,+20.00,01.00,000.00,1.00 +0676,+176.04,+20.00,01.00,000.00,1.00 +0677,+176.83,+20.00,01.00,000.00,1.00 +0678,+177.62,+20.00,01.00,000.00,1.00 +0679,+178.41,+20.00,01.00,000.00,1.00 +0680,+179.21,+20.00,01.00,000.00,1.00 +0681,+180.00,+20.00,01.00,000.00,1.00 +0682,-179.21,+20.00,01.00,000.00,1.00 +0683,-178.41,+20.00,01.00,000.00,1.00 +0684,-177.62,+20.00,01.00,000.00,1.00 +0685,-176.83,+20.00,01.00,000.00,1.00 +0686,-176.04,+20.00,01.00,000.00,1.00 +0687,-175.24,+20.00,01.00,000.00,1.00 +0688,-174.45,+20.00,01.00,000.00,1.00 +0689,-173.66,+20.00,01.00,000.00,1.00 +0690,-172.86,+20.00,01.00,000.00,1.00 +0691,-172.07,+20.00,01.00,000.00,1.00 +0692,-171.28,+20.00,01.00,000.00,1.00 +0693,-170.48,+20.00,01.00,000.00,1.00 +0694,-169.69,+20.00,01.00,000.00,1.00 +0695,-168.90,+20.00,01.00,000.00,1.00 +0696,-168.11,+20.00,01.00,000.00,1.00 +0697,-167.31,+20.00,01.00,000.00,1.00 +0698,-166.52,+20.00,01.00,000.00,1.00 +0699,-165.73,+20.00,01.00,000.00,1.00 +0700,-164.93,+20.00,01.00,000.00,1.00 +0701,-164.14,+20.00,01.00,000.00,1.00 +0702,-163.35,+20.00,01.00,000.00,1.00 +0703,-162.56,+20.00,01.00,000.00,1.00 +0704,-161.76,+20.00,01.00,000.00,1.00 +0705,-160.97,+20.00,01.00,000.00,1.00 +0706,-160.18,+20.00,01.00,000.00,1.00 +0707,-159.38,+20.00,01.00,000.00,1.00 +0708,-158.59,+20.00,01.00,000.00,1.00 +0709,-157.80,+20.00,01.00,000.00,1.00 +0710,-157.00,+20.00,01.00,000.00,1.00 +0711,-156.21,+20.00,01.00,000.00,1.00 +0712,-155.42,+20.00,01.00,000.00,1.00 +0713,-154.63,+20.00,01.00,000.00,1.00 +0714,-153.83,+20.00,01.00,000.00,1.00 +0715,-153.04,+20.00,01.00,000.00,1.00 +0716,-152.25,+20.00,01.00,000.00,1.00 +0717,-151.45,+20.00,01.00,000.00,1.00 +0718,-150.66,+20.00,01.00,000.00,1.00 +0719,-149.87,+20.00,01.00,000.00,1.00 +0720,-149.07,+20.00,01.00,000.00,1.00 +0721,-148.28,+20.00,01.00,000.00,1.00 +0722,-147.49,+20.00,01.00,000.00,1.00 +0723,-146.70,+20.00,01.00,000.00,1.00 +0724,-145.90,+20.00,01.00,000.00,1.00 +0725,-145.11,+20.00,01.00,000.00,1.00 +0726,-144.32,+20.00,01.00,000.00,1.00 +0727,-143.52,+20.00,01.00,000.00,1.00 +0728,-142.73,+20.00,01.00,000.00,1.00 +0729,-141.94,+20.00,01.00,000.00,1.00 +0730,-141.15,+20.00,01.00,000.00,1.00 +0731,-140.35,+20.00,01.00,000.00,1.00 +0732,-139.56,+20.00,01.00,000.00,1.00 +0733,-138.77,+20.00,01.00,000.00,1.00 +0734,-137.97,+20.00,01.00,000.00,1.00 +0735,-137.18,+20.00,01.00,000.00,1.00 +0736,-136.39,+20.00,01.00,000.00,1.00 +0737,-135.59,+20.00,01.00,000.00,1.00 +0738,-134.80,+20.00,01.00,000.00,1.00 +0739,-134.01,+20.00,01.00,000.00,1.00 +0740,-133.22,+20.00,01.00,000.00,1.00 +0741,-132.42,+20.00,01.00,000.00,1.00 +0742,-131.63,+20.00,01.00,000.00,1.00 +0743,-130.84,+20.00,01.00,000.00,1.00 +0744,-130.04,+20.00,01.00,000.00,1.00 +0745,-129.25,+20.00,01.00,000.00,1.00 +0746,-128.46,+20.00,01.00,000.00,1.00 +0747,-127.67,+20.00,01.00,000.00,1.00 +0748,-126.87,+20.00,01.00,000.00,1.00 +0749,-126.08,+20.00,01.00,000.00,1.00 +0750,-125.29,+20.00,01.00,000.00,1.00 +0751,-124.49,+20.00,01.00,000.00,1.00 +0752,-123.70,+20.00,01.00,000.00,1.00 +0753,-122.91,+20.00,01.00,000.00,1.00 +0754,-122.11,+20.00,01.00,000.00,1.00 +0755,-121.32,+20.00,01.00,000.00,1.00 +0756,-120.53,+20.00,01.00,000.00,1.00 +0757,-119.74,+20.00,01.00,000.00,1.00 +0758,-118.94,+20.00,01.00,000.00,1.00 +0759,-118.15,+20.00,01.00,000.00,1.00 +0760,-117.36,+20.00,01.00,000.00,1.00 +0761,-116.56,+20.00,01.00,000.00,1.00 +0762,-115.77,+20.00,01.00,000.00,1.00 +0763,-114.98,+20.00,01.00,000.00,1.00 +0764,-114.19,+20.00,01.00,000.00,1.00 +0765,-113.39,+20.00,01.00,000.00,1.00 +0766,-112.60,+20.00,01.00,000.00,1.00 +0767,-111.81,+20.00,01.00,000.00,1.00 +0768,-111.01,+20.00,01.00,000.00,1.00 +0769,-110.22,+20.00,01.00,000.00,1.00 +0770,-109.43,+20.00,01.00,000.00,1.00 +0771,-108.63,+20.00,01.00,000.00,1.00 +0772,-107.84,+20.00,01.00,000.00,1.00 +0773,-107.05,+20.00,01.00,000.00,1.00 +0774,-106.26,+20.00,01.00,000.00,1.00 +0775,-105.46,+20.00,01.00,000.00,1.00 +0776,-104.67,+20.00,01.00,000.00,1.00 +0777,-103.88,+20.00,01.00,000.00,1.00 +0778,-103.08,+20.00,01.00,000.00,1.00 +0779,-102.29,+20.00,01.00,000.00,1.00 +0780,-101.50,+20.00,01.00,000.00,1.00 +0781,-100.70,+20.00,01.00,000.00,1.00 +0782,-099.91,+20.00,01.00,000.00,1.00 +0783,-099.12,+20.00,01.00,000.00,1.00 +0784,-098.33,+20.00,01.00,000.00,1.00 +0785,-097.53,+20.00,01.00,000.00,1.00 +0786,-096.74,+20.00,01.00,000.00,1.00 +0787,-095.95,+20.00,01.00,000.00,1.00 +0788,-095.15,+20.00,01.00,000.00,1.00 +0789,-094.36,+20.00,01.00,000.00,1.00 +0790,-093.57,+20.00,01.00,000.00,1.00 +0791,-092.78,+20.00,01.00,000.00,1.00 +0792,-091.98,+20.00,01.00,000.00,1.00 +0793,-091.19,+20.00,01.00,000.00,1.00 +0794,-090.40,+20.00,01.00,000.00,1.00 +0795,-089.60,+20.00,01.00,000.00,1.00 +0796,-088.81,+20.00,01.00,000.00,1.00 +0797,-088.02,+20.00,01.00,000.00,1.00 +0798,-087.22,+20.00,01.00,000.00,1.00 +0799,-086.43,+20.00,01.00,000.00,1.00 +0800,-085.64,+20.00,01.00,000.00,1.00 +0801,-084.85,+20.00,01.00,000.00,1.00 +0802,-084.05,+20.00,01.00,000.00,1.00 +0803,-083.26,+20.00,01.00,000.00,1.00 +0804,-082.47,+20.00,01.00,000.00,1.00 +0805,-081.67,+20.00,01.00,000.00,1.00 +0806,-080.88,+20.00,01.00,000.00,1.00 +0807,-080.09,+20.00,01.00,000.00,1.00 +0808,-079.30,+20.00,01.00,000.00,1.00 +0809,-078.50,+20.00,01.00,000.00,1.00 +0810,-077.71,+20.00,01.00,000.00,1.00 +0811,-076.92,+20.00,01.00,000.00,1.00 +0812,-076.12,+20.00,01.00,000.00,1.00 +0813,-075.33,+20.00,01.00,000.00,1.00 +0814,-074.54,+20.00,01.00,000.00,1.00 +0815,-073.74,+20.00,01.00,000.00,1.00 +0816,-072.95,+20.00,01.00,000.00,1.00 +0817,-072.16,+20.00,01.00,000.00,1.00 +0818,-071.37,+20.00,01.00,000.00,1.00 +0819,-070.57,+20.00,01.00,000.00,1.00 +0820,-069.78,+20.00,01.00,000.00,1.00 +0821,-068.99,+20.00,01.00,000.00,1.00 +0822,-068.19,+20.00,01.00,000.00,1.00 +0823,-067.40,+20.00,01.00,000.00,1.00 +0824,-066.61,+20.00,01.00,000.00,1.00 +0825,-065.81,+20.00,01.00,000.00,1.00 +0826,-065.02,+20.00,01.00,000.00,1.00 +0827,-064.23,+20.00,01.00,000.00,1.00 +0828,-063.44,+20.00,01.00,000.00,1.00 +0829,-062.64,+20.00,01.00,000.00,1.00 +0830,-061.85,+20.00,01.00,000.00,1.00 +0831,-061.06,+20.00,01.00,000.00,1.00 +0832,-060.26,+20.00,01.00,000.00,1.00 +0833,-059.47,+20.00,01.00,000.00,1.00 +0834,-058.68,+20.00,01.00,000.00,1.00 +0835,-057.89,+20.00,01.00,000.00,1.00 +0836,-057.09,+20.00,01.00,000.00,1.00 +0837,-056.30,+20.00,01.00,000.00,1.00 +0838,-055.51,+20.00,01.00,000.00,1.00 +0839,-054.71,+20.00,01.00,000.00,1.00 +0840,-053.92,+20.00,01.00,000.00,1.00 +0841,-053.13,+20.00,01.00,000.00,1.00 +0842,-052.33,+20.00,01.00,000.00,1.00 +0843,-051.54,+20.00,01.00,000.00,1.00 +0844,-050.75,+20.00,01.00,000.00,1.00 +0845,-049.96,+20.00,01.00,000.00,1.00 +0846,-049.16,+20.00,01.00,000.00,1.00 +0847,-048.37,+20.00,01.00,000.00,1.00 +0848,-047.58,+20.00,01.00,000.00,1.00 +0849,-046.78,+20.00,01.00,000.00,1.00 +0850,-045.99,+20.00,01.00,000.00,1.00 +0851,-045.20,+20.00,01.00,000.00,1.00 +0852,-044.41,+20.00,01.00,000.00,1.00 +0853,-043.61,+20.00,01.00,000.00,1.00 +0854,-042.82,+20.00,01.00,000.00,1.00 +0855,-042.03,+20.00,01.00,000.00,1.00 +0856,-041.23,+20.00,01.00,000.00,1.00 +0857,-040.44,+20.00,01.00,000.00,1.00 +0858,-039.65,+20.00,01.00,000.00,1.00 +0859,-038.85,+20.00,01.00,000.00,1.00 +0860,-038.06,+20.00,01.00,000.00,1.00 +0861,-037.27,+20.00,01.00,000.00,1.00 +0862,-036.48,+20.00,01.00,000.00,1.00 +0863,-035.68,+20.00,01.00,000.00,1.00 +0864,-034.89,+20.00,01.00,000.00,1.00 +0865,-034.10,+20.00,01.00,000.00,1.00 +0866,-033.30,+20.00,01.00,000.00,1.00 +0867,-032.51,+20.00,01.00,000.00,1.00 +0868,-031.72,+20.00,01.00,000.00,1.00 +0869,-030.93,+20.00,01.00,000.00,1.00 +0870,-030.13,+20.00,01.00,000.00,1.00 +0871,-029.34,+20.00,01.00,000.00,1.00 +0872,-028.55,+20.00,01.00,000.00,1.00 +0873,-027.75,+20.00,01.00,000.00,1.00 +0874,-026.96,+20.00,01.00,000.00,1.00 +0875,-026.17,+20.00,01.00,000.00,1.00 +0876,-025.37,+20.00,01.00,000.00,1.00 +0877,-024.58,+20.00,01.00,000.00,1.00 +0878,-023.79,+20.00,01.00,000.00,1.00 +0879,-023.00,+20.00,01.00,000.00,1.00 +0880,-022.20,+20.00,01.00,000.00,1.00 +0881,-021.41,+20.00,01.00,000.00,1.00 +0882,-020.62,+20.00,01.00,000.00,1.00 +0883,-019.82,+20.00,01.00,000.00,1.00 +0884,-019.03,+20.00,01.00,000.00,1.00 +0885,-018.24,+20.00,01.00,000.00,1.00 +0886,-017.44,+20.00,01.00,000.00,1.00 +0887,-016.65,+20.00,01.00,000.00,1.00 +0888,-015.86,+20.00,01.00,000.00,1.00 +0889,-015.07,+20.00,01.00,000.00,1.00 +0890,-014.27,+20.00,01.00,000.00,1.00 +0891,-013.48,+20.00,01.00,000.00,1.00 +0892,-012.69,+20.00,01.00,000.00,1.00 +0893,-011.89,+20.00,01.00,000.00,1.00 +0894,-011.10,+20.00,01.00,000.00,1.00 +0895,-010.31,+20.00,01.00,000.00,1.00 +0896,-009.52,+20.00,01.00,000.00,1.00 +0897,-008.72,+20.00,01.00,000.00,1.00 +0898,-007.93,+20.00,01.00,000.00,1.00 +0899,-007.14,+20.00,01.00,000.00,1.00 +0900,-006.34,+20.00,01.00,000.00,1.00 +0901,-005.55,+20.00,01.00,000.00,1.00 +0902,-004.76,+20.00,01.00,000.00,1.00 +0903,-003.96,+20.00,01.00,000.00,1.00 +0904,-003.17,+20.00,01.00,000.00,1.00 +0905,-002.38,+20.00,01.00,000.00,1.00 +0906,-001.59,+20.00,01.00,000.00,1.00 +0907,-000.79,+20.00,01.00,000.00,1.00 +0908,-000.00,+20.00,01.00,000.00,1.00 +0909,+000.79,+20.00,01.00,000.00,1.00 +0910,+001.59,+20.00,01.00,000.00,1.00 +0911,+002.38,+20.00,01.00,000.00,1.00 +0912,+003.17,+20.00,01.00,000.00,1.00 +0913,+003.96,+20.00,01.00,000.00,1.00 +0914,+004.76,+20.00,01.00,000.00,1.00 +0915,+005.55,+20.00,01.00,000.00,1.00 +0916,+006.34,+20.00,01.00,000.00,1.00 +0917,+007.14,+20.00,01.00,000.00,1.00 +0918,+007.93,+20.00,01.00,000.00,1.00 +0919,+008.72,+20.00,01.00,000.00,1.00 +0920,+009.52,+20.00,01.00,000.00,1.00 +0921,+010.31,+20.00,01.00,000.00,1.00 +0922,+011.10,+20.00,01.00,000.00,1.00 +0923,+011.89,+20.00,01.00,000.00,1.00 +0924,+012.69,+20.00,01.00,000.00,1.00 +0925,+013.48,+20.00,01.00,000.00,1.00 +0926,+014.27,+20.00,01.00,000.00,1.00 +0927,+015.07,+20.00,01.00,000.00,1.00 +0928,+015.86,+20.00,01.00,000.00,1.00 +0929,+016.65,+20.00,01.00,000.00,1.00 +0930,+017.44,+20.00,01.00,000.00,1.00 +0931,+018.24,+20.00,01.00,000.00,1.00 +0932,+019.03,+20.00,01.00,000.00,1.00 +0933,+019.82,+20.00,01.00,000.00,1.00 +0934,+020.62,+20.00,01.00,000.00,1.00 +0935,+021.41,+20.00,01.00,000.00,1.00 +0936,+022.20,+20.00,01.00,000.00,1.00 +0937,+023.00,+20.00,01.00,000.00,1.00 +0938,+023.79,+20.00,01.00,000.00,1.00 +0939,+024.58,+20.00,01.00,000.00,1.00 +0940,+025.37,+20.00,01.00,000.00,1.00 +0941,+026.17,+20.00,01.00,000.00,1.00 +0942,+026.96,+20.00,01.00,000.00,1.00 +0943,+027.75,+20.00,01.00,000.00,1.00 +0944,+028.55,+20.00,01.00,000.00,1.00 +0945,+029.34,+20.00,01.00,000.00,1.00 +0946,+030.13,+20.00,01.00,000.00,1.00 +0947,+030.93,+20.00,01.00,000.00,1.00 +0948,+031.72,+20.00,01.00,000.00,1.00 +0949,+032.51,+20.00,01.00,000.00,1.00 +0950,+033.30,+20.00,01.00,000.00,1.00 +0951,+034.10,+20.00,01.00,000.00,1.00 +0952,+034.89,+20.00,01.00,000.00,1.00 +0953,+035.68,+20.00,01.00,000.00,1.00 +0954,+036.48,+20.00,01.00,000.00,1.00 +0955,+037.27,+20.00,01.00,000.00,1.00 +0956,+038.06,+20.00,01.00,000.00,1.00 +0957,+038.85,+20.00,01.00,000.00,1.00 +0958,+039.65,+20.00,01.00,000.00,1.00 +0959,+040.44,+20.00,01.00,000.00,1.00 +0960,+041.23,+20.00,01.00,000.00,1.00 +0961,+042.03,+20.00,01.00,000.00,1.00 +0962,+042.82,+20.00,01.00,000.00,1.00 +0963,+043.61,+20.00,01.00,000.00,1.00 +0964,+044.41,+20.00,01.00,000.00,1.00 +0965,+045.20,+20.00,01.00,000.00,1.00 +0966,+045.99,+20.00,01.00,000.00,1.00 +0967,+046.78,+20.00,01.00,000.00,1.00 +0968,+047.58,+20.00,01.00,000.00,1.00 +0969,+048.37,+20.00,01.00,000.00,1.00 +0970,+049.16,+20.00,01.00,000.00,1.00 +0971,+049.96,+20.00,01.00,000.00,1.00 +0972,+050.75,+20.00,01.00,000.00,1.00 +0973,+051.54,+20.00,01.00,000.00,1.00 +0974,+052.33,+20.00,01.00,000.00,1.00 +0975,+053.13,+20.00,01.00,000.00,1.00 +0976,+053.92,+20.00,01.00,000.00,1.00 +0977,+054.71,+20.00,01.00,000.00,1.00 +0978,+055.51,+20.00,01.00,000.00,1.00 +0979,+056.30,+20.00,01.00,000.00,1.00 +0980,+057.09,+20.00,01.00,000.00,1.00 +0981,+057.89,+20.00,01.00,000.00,1.00 +0982,+058.68,+20.00,01.00,000.00,1.00 +0983,+059.47,+20.00,01.00,000.00,1.00 +0984,+060.26,+20.00,01.00,000.00,1.00 +0985,+061.06,+20.00,01.00,000.00,1.00 +0986,+061.85,+20.00,01.00,000.00,1.00 +0987,+062.64,+20.00,01.00,000.00,1.00 +0988,+063.44,+20.00,01.00,000.00,1.00 +0989,+064.23,+20.00,01.00,000.00,1.00 +0990,+065.02,+20.00,01.00,000.00,1.00 +0991,+065.81,+20.00,01.00,000.00,1.00 +0992,+066.61,+20.00,01.00,000.00,1.00 +0993,+067.40,+20.00,01.00,000.00,1.00 +0994,+068.19,+20.00,01.00,000.00,1.00 +0995,+068.99,+20.00,01.00,000.00,1.00 +0996,+069.78,+20.00,01.00,000.00,1.00 +0997,+070.57,+20.00,01.00,000.00,1.00 +0998,+071.37,+20.00,01.00,000.00,1.00 +0999,+072.16,+20.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t11_ch1.csv b/scripts/td_object_renderer/metadata/csv/t11_ch1.csv new file mode 100644 index 0000000000..779d8f654a --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t11_ch1.csv @@ -0,0 +1,1000 @@ +0000,-050.00,+00.00,01.00,000.00,1.00 +0001,-050.00,+00.00,01.00,000.00,1.00 +0002,-050.00,+00.00,01.00,000.00,1.00 +0003,-050.00,+00.00,01.00,000.00,1.00 +0004,-050.00,+00.00,01.00,000.00,1.00 +0005,-050.00,+00.00,01.00,000.00,1.00 +0006,-050.00,+00.00,01.00,000.00,1.00 +0007,-050.00,+00.00,01.00,000.00,1.00 +0008,-050.00,+00.00,01.00,000.00,1.00 +0009,-050.00,+00.00,01.00,000.00,1.00 +0010,-050.00,+00.00,01.00,000.00,1.00 +0011,-050.00,+00.00,01.00,000.00,1.00 +0012,-050.00,+00.00,01.00,000.00,1.00 +0013,-050.00,+00.00,01.00,000.00,1.00 +0014,-050.00,+00.00,01.00,000.00,1.00 +0015,-050.00,+00.00,01.00,000.00,1.00 +0016,-050.00,+00.00,01.00,000.00,1.00 +0017,-050.00,+00.00,01.00,000.00,1.00 +0018,-050.00,+00.00,01.00,000.00,1.00 +0019,-050.00,+00.00,01.00,000.00,1.00 +0020,-050.00,+00.00,01.00,000.00,1.00 +0021,-050.00,+00.00,01.00,000.00,1.00 +0022,-050.00,+00.00,01.00,000.00,1.00 +0023,-050.00,+00.00,01.00,000.00,1.00 +0024,-050.00,+00.00,01.00,000.00,1.00 +0025,-050.00,+00.00,01.00,000.00,1.00 +0026,-050.00,+00.00,01.00,000.00,1.00 +0027,-050.00,+00.00,01.00,000.00,1.00 +0028,-050.00,+00.00,01.00,000.00,1.00 +0029,-050.00,+00.00,01.00,000.00,1.00 +0030,-050.00,+00.00,01.00,000.00,1.00 +0031,-050.00,+00.00,01.00,000.00,1.00 +0032,-050.00,+00.00,01.00,000.00,1.00 +0033,-050.00,+00.00,01.00,000.00,1.00 +0034,-050.00,+00.00,01.00,000.00,1.00 +0035,-050.00,+00.00,01.00,000.00,1.00 +0036,-050.00,+00.00,01.00,000.00,1.00 +0037,-050.00,+00.00,01.00,000.00,1.00 +0038,-050.00,+00.00,01.00,000.00,1.00 +0039,-050.00,+00.00,01.00,000.00,1.00 +0040,-050.00,+00.00,01.00,000.00,1.00 +0041,-050.00,+00.00,01.00,000.00,1.00 +0042,-050.00,+00.00,01.00,000.00,1.00 +0043,-050.00,+00.00,01.00,000.00,1.00 +0044,-050.00,+00.00,01.00,000.00,1.00 +0045,-050.00,+00.00,01.00,000.00,1.00 +0046,-050.00,+00.00,01.00,000.00,1.00 +0047,-050.00,+00.00,01.00,000.00,1.00 +0048,-050.00,+00.00,01.00,000.00,1.00 +0049,-050.00,+00.00,01.00,000.00,1.00 +0050,-050.00,+00.00,01.00,000.00,1.00 +0051,-050.00,+00.00,01.00,000.00,1.00 +0052,-050.00,+00.00,01.00,000.00,1.00 +0053,-050.00,+00.00,01.00,000.00,1.00 +0054,-050.00,+00.00,01.00,000.00,1.00 +0055,-050.00,+00.00,01.00,000.00,1.00 +0056,-050.00,+00.00,01.00,000.00,1.00 +0057,-050.00,+00.00,01.00,000.00,1.00 +0058,-050.00,+00.00,01.00,000.00,1.00 +0059,-050.00,+00.00,01.00,000.00,1.00 +0060,-050.00,+00.00,01.00,000.00,1.00 +0061,-050.00,+00.00,01.00,000.00,1.00 +0062,-050.00,+00.00,01.00,000.00,1.00 +0063,-050.00,+00.00,01.00,000.00,1.00 +0064,-050.00,+00.00,01.00,000.00,1.00 +0065,-050.00,+00.00,01.00,000.00,1.00 +0066,-050.00,+00.00,01.00,000.00,1.00 +0067,-050.00,+00.00,01.00,000.00,1.00 +0068,-050.00,+00.00,01.00,000.00,1.00 +0069,-050.00,+00.00,01.00,000.00,1.00 +0070,-050.00,+00.00,01.00,000.00,1.00 +0071,-050.00,+00.00,01.00,000.00,1.00 +0072,-050.00,+00.00,01.00,000.00,1.00 +0073,-050.00,+00.00,01.00,000.00,1.00 +0074,-050.00,+00.00,01.00,000.00,1.00 +0075,-050.00,+00.00,01.00,000.00,1.00 +0076,-050.00,+00.00,01.00,000.00,1.00 +0077,-050.00,+00.00,01.00,000.00,1.00 +0078,-050.00,+00.00,01.00,000.00,1.00 +0079,-050.00,+00.00,01.00,000.00,1.00 +0080,-050.00,+00.00,01.00,000.00,1.00 +0081,-050.00,+00.00,01.00,000.00,1.00 +0082,-050.00,+00.00,01.00,000.00,1.00 +0083,-050.00,+00.00,01.00,000.00,1.00 +0084,-050.00,+00.00,01.00,000.00,1.00 +0085,-050.00,+00.00,01.00,000.00,1.00 +0086,-050.00,+00.00,01.00,000.00,1.00 +0087,-050.00,+00.00,01.00,000.00,1.00 +0088,-050.00,+00.00,01.00,000.00,1.00 +0089,-050.00,+00.00,01.00,000.00,1.00 +0090,-050.00,+00.00,01.00,000.00,1.00 +0091,-050.00,+00.00,01.00,000.00,1.00 +0092,-050.00,+00.00,01.00,000.00,1.00 +0093,-050.00,+00.00,01.00,000.00,1.00 +0094,-050.00,+00.00,01.00,000.00,1.00 +0095,-050.00,+00.00,01.00,000.00,1.00 +0096,-050.00,+00.00,01.00,000.00,1.00 +0097,-050.00,+00.00,01.00,000.00,1.00 +0098,-050.00,+00.00,01.00,000.00,1.00 +0099,-050.00,+00.00,01.00,000.00,1.00 +0100,-050.00,+00.00,01.00,000.00,1.00 +0101,-050.00,+00.00,01.00,000.00,1.00 +0102,-050.00,+00.00,01.00,000.00,1.00 +0103,-050.00,+00.00,01.00,000.00,1.00 +0104,-050.00,+00.00,01.00,000.00,1.00 +0105,-050.00,+00.00,01.00,000.00,1.00 +0106,-050.00,+00.00,01.00,000.00,1.00 +0107,-050.00,+00.00,01.00,000.00,1.00 +0108,-050.00,+00.00,01.00,000.00,1.00 +0109,-050.00,+00.00,01.00,000.00,1.00 +0110,-050.00,+00.00,01.00,000.00,1.00 +0111,-050.00,+00.00,01.00,000.00,1.00 +0112,-050.00,+00.00,01.00,000.00,1.00 +0113,-050.00,+00.00,01.00,000.00,1.00 +0114,-050.00,+00.00,01.00,000.00,1.00 +0115,-050.00,+00.00,01.00,000.00,1.00 +0116,-050.00,+00.00,01.00,000.00,1.00 +0117,-050.00,+00.00,01.00,000.00,1.00 +0118,-050.00,+00.00,01.00,000.00,1.00 +0119,-050.00,+00.00,01.00,000.00,1.00 +0120,-050.00,+00.00,01.00,000.00,1.00 +0121,-050.00,+00.00,01.00,000.00,1.00 +0122,-050.00,+00.00,01.00,000.00,1.00 +0123,-050.00,+00.00,01.00,000.00,1.00 +0124,-050.00,+00.00,01.00,000.00,1.00 +0125,-050.00,+00.00,01.00,000.00,1.00 +0126,-050.00,+00.00,01.00,000.00,1.00 +0127,-050.00,+00.00,01.00,000.00,1.00 +0128,-050.00,+00.00,01.00,000.00,1.00 +0129,-050.00,+00.00,01.00,000.00,1.00 +0130,-050.00,+00.00,01.00,000.00,1.00 +0131,-050.00,+00.00,01.00,000.00,1.00 +0132,-050.00,+00.00,01.00,000.00,1.00 +0133,-050.00,+00.00,01.00,000.00,1.00 +0134,-050.00,+00.00,01.00,000.00,1.00 +0135,-050.00,+00.00,01.00,000.00,1.00 +0136,-050.00,+00.00,01.00,000.00,1.00 +0137,-050.00,+00.00,01.00,000.00,1.00 +0138,-050.00,+00.00,01.00,000.00,1.00 +0139,-050.00,+00.00,01.00,000.00,1.00 +0140,-050.00,+00.00,01.00,000.00,1.00 +0141,-050.00,+00.00,01.00,000.00,1.00 +0142,-050.00,+00.00,01.00,000.00,1.00 +0143,-050.00,+00.00,01.00,000.00,1.00 +0144,-050.00,+00.00,01.00,000.00,1.00 +0145,-050.00,+00.00,01.00,000.00,1.00 +0146,-050.00,+00.00,01.00,000.00,1.00 +0147,-050.00,+00.00,01.00,000.00,1.00 +0148,-050.00,+00.00,01.00,000.00,1.00 +0149,-050.00,+00.00,01.00,000.00,1.00 +0150,-050.00,+00.00,01.00,000.00,1.00 +0151,-050.00,+00.00,01.00,000.00,1.00 +0152,-050.00,+00.00,01.00,000.00,1.00 +0153,-050.00,+00.00,01.00,000.00,1.00 +0154,-050.00,+00.00,01.00,000.00,1.00 +0155,-050.00,+00.00,01.00,000.00,1.00 +0156,-050.00,+00.00,01.00,000.00,1.00 +0157,-050.00,+00.00,01.00,000.00,1.00 +0158,-050.00,+00.00,01.00,000.00,1.00 +0159,-050.00,+00.00,01.00,000.00,1.00 +0160,-050.00,+00.00,01.00,000.00,1.00 +0161,-050.00,+00.00,01.00,000.00,1.00 +0162,-050.00,+00.00,01.00,000.00,1.00 +0163,-050.00,+00.00,01.00,000.00,1.00 +0164,-050.00,+00.00,01.00,000.00,1.00 +0165,-050.00,+00.00,01.00,000.00,1.00 +0166,-050.00,+00.00,01.00,000.00,1.00 +0167,-050.00,+00.00,01.00,000.00,1.00 +0168,-050.00,+00.00,01.00,000.00,1.00 +0169,-050.00,+00.00,01.00,000.00,1.00 +0170,-050.00,+00.00,01.00,000.00,1.00 +0171,-050.00,+00.00,01.00,000.00,1.00 +0172,-050.00,+00.00,01.00,000.00,1.00 +0173,-050.00,+00.00,01.00,000.00,1.00 +0174,-050.00,+00.00,01.00,000.00,1.00 +0175,-050.00,+00.00,01.00,000.00,1.00 +0176,-050.00,+00.00,01.00,000.00,1.00 +0177,-050.00,+00.00,01.00,000.00,1.00 +0178,-050.00,+00.00,01.00,000.00,1.00 +0179,-050.00,+00.00,01.00,000.00,1.00 +0180,-050.00,+00.00,01.00,000.00,1.00 +0181,-050.00,+00.00,01.00,000.00,1.00 +0182,-050.00,+00.00,01.00,000.00,1.00 +0183,-050.00,+00.00,01.00,000.00,1.00 +0184,-050.00,+00.00,01.00,000.00,1.00 +0185,-050.00,+00.00,01.00,000.00,1.00 +0186,-050.00,+00.00,01.00,000.00,1.00 +0187,-050.00,+00.00,01.00,000.00,1.00 +0188,-050.00,+00.00,01.00,000.00,1.00 +0189,-050.00,+00.00,01.00,000.00,1.00 +0190,-050.00,+00.00,01.00,000.00,1.00 +0191,-050.00,+00.00,01.00,000.00,1.00 +0192,-050.00,+00.00,01.00,000.00,1.00 +0193,-050.00,+00.00,01.00,000.00,1.00 +0194,-050.00,+00.00,01.00,000.00,1.00 +0195,-050.00,+00.00,01.00,000.00,1.00 +0196,-050.00,+00.00,01.00,000.00,1.00 +0197,-050.00,+00.00,01.00,000.00,1.00 +0198,-050.00,+00.00,01.00,000.00,1.00 +0199,-050.00,+00.00,01.00,000.00,1.00 +0200,-050.00,+00.00,01.00,000.00,1.00 +0201,-050.00,+00.00,01.00,000.00,1.00 +0202,-050.00,+00.00,01.00,000.00,1.00 +0203,-050.00,+00.00,01.00,000.00,1.00 +0204,-050.00,+00.00,01.00,000.00,1.00 +0205,-050.00,+00.00,01.00,000.00,1.00 +0206,-050.00,+00.00,01.00,000.00,1.00 +0207,-050.00,+00.00,01.00,000.00,1.00 +0208,-050.00,+00.00,01.00,000.00,1.00 +0209,-050.00,+00.00,01.00,000.00,1.00 +0210,-050.00,+00.00,01.00,000.00,1.00 +0211,-050.00,+00.00,01.00,000.00,1.00 +0212,-050.00,+00.00,01.00,000.00,1.00 +0213,-050.00,+00.00,01.00,000.00,1.00 +0214,-050.00,+00.00,01.00,000.00,1.00 +0215,-050.00,+00.00,01.00,000.00,1.00 +0216,-050.00,+00.00,01.00,000.00,1.00 +0217,-050.00,+00.00,01.00,000.00,1.00 +0218,-050.00,+00.00,01.00,000.00,1.00 +0219,-050.00,+00.00,01.00,000.00,1.00 +0220,-050.00,+00.00,01.00,000.00,1.00 +0221,-050.00,+00.00,01.00,000.00,1.00 +0222,-050.00,+00.00,01.00,000.00,1.00 +0223,-050.00,+00.00,01.00,000.00,1.00 +0224,-050.00,+00.00,01.00,000.00,1.00 +0225,-050.00,+00.00,01.00,000.00,1.00 +0226,-050.00,+00.00,01.00,000.00,1.00 +0227,-050.00,+00.00,01.00,000.00,1.00 +0228,-050.00,+00.00,01.00,000.00,1.00 +0229,-050.00,+00.00,01.00,000.00,1.00 +0230,-050.00,+00.00,01.00,000.00,1.00 +0231,-050.00,+00.00,01.00,000.00,1.00 +0232,-050.00,+00.00,01.00,000.00,1.00 +0233,-050.00,+00.00,01.00,000.00,1.00 +0234,-050.00,+00.00,01.00,000.00,1.00 +0235,-050.00,+00.00,01.00,000.00,1.00 +0236,-050.00,+00.00,01.00,000.00,1.00 +0237,-050.00,+00.00,01.00,000.00,1.00 +0238,-050.00,+00.00,01.00,000.00,1.00 +0239,-050.00,+00.00,01.00,000.00,1.00 +0240,-050.00,+00.00,01.00,000.00,1.00 +0241,-050.00,+00.00,01.00,000.00,1.00 +0242,-050.00,+00.00,01.00,000.00,1.00 +0243,-050.00,+00.00,01.00,000.00,1.00 +0244,-050.00,+00.00,01.00,000.00,1.00 +0245,-050.00,+00.00,01.00,000.00,1.00 +0246,-050.00,+00.00,01.00,000.00,1.00 +0247,-050.00,+00.00,01.00,000.00,1.00 +0248,-050.00,+00.00,01.00,000.00,1.00 +0249,-050.00,+00.00,01.00,000.00,1.00 +0250,-050.00,+00.00,01.00,000.00,1.00 +0251,-050.00,+00.00,01.00,000.00,1.00 +0252,-050.00,+00.00,01.00,000.00,1.00 +0253,-050.00,+00.00,01.00,000.00,1.00 +0254,-050.00,+00.00,01.00,000.00,1.00 +0255,-050.00,+00.00,01.00,000.00,1.00 +0256,-050.00,+00.00,01.00,000.00,1.00 +0257,-050.00,+00.00,01.00,000.00,1.00 +0258,-050.00,+00.00,01.00,000.00,1.00 +0259,-050.00,+00.00,01.00,000.00,1.00 +0260,-050.00,+00.00,01.00,000.00,1.00 +0261,-050.00,+00.00,01.00,000.00,1.00 +0262,-050.00,+00.00,01.00,000.00,1.00 +0263,-050.00,+00.00,01.00,000.00,1.00 +0264,-050.00,+00.00,01.00,000.00,1.00 +0265,-050.00,+00.00,01.00,000.00,1.00 +0266,-050.00,+00.00,01.00,000.00,1.00 +0267,-050.00,+00.00,01.00,000.00,1.00 +0268,-050.00,+00.00,01.00,000.00,1.00 +0269,-050.00,+00.00,01.00,000.00,1.00 +0270,-050.00,+00.00,01.00,000.00,1.00 +0271,-050.00,+00.00,01.00,000.00,1.00 +0272,-050.00,+00.00,01.00,000.00,1.00 +0273,-050.00,+00.00,01.00,000.00,1.00 +0274,-050.00,+00.00,01.00,000.00,1.00 +0275,-050.00,+00.00,01.00,000.00,1.00 +0276,-050.00,+00.00,01.00,000.00,1.00 +0277,-050.00,+00.00,01.00,000.00,1.00 +0278,-050.00,+00.00,01.00,000.00,1.00 +0279,-050.00,+00.00,01.00,000.00,1.00 +0280,-050.00,+00.00,01.00,000.00,1.00 +0281,-050.00,+00.00,01.00,000.00,1.00 +0282,-050.00,+00.00,01.00,000.00,1.00 +0283,-050.00,+00.00,01.00,000.00,1.00 +0284,-050.00,+00.00,01.00,000.00,1.00 +0285,-050.00,+00.00,01.00,000.00,1.00 +0286,-050.00,+00.00,01.00,000.00,1.00 +0287,-050.00,+00.00,01.00,000.00,1.00 +0288,-050.00,+00.00,01.00,000.00,1.00 +0289,-050.00,+00.00,01.00,000.00,1.00 +0290,-050.00,+00.00,01.00,000.00,1.00 +0291,-050.00,+00.00,01.00,000.00,1.00 +0292,-050.00,+00.00,01.00,000.00,1.00 +0293,-050.00,+00.00,01.00,000.00,1.00 +0294,-050.00,+00.00,01.00,000.00,1.00 +0295,-050.00,+00.00,01.00,000.00,1.00 +0296,-050.00,+00.00,01.00,000.00,1.00 +0297,-050.00,+00.00,01.00,000.00,1.00 +0298,-050.00,+00.00,01.00,000.00,1.00 +0299,-050.00,+00.00,01.00,000.00,1.00 +0300,-050.00,+00.00,01.00,000.00,1.00 +0301,-050.00,+00.00,01.00,000.00,1.00 +0302,-050.00,+00.00,01.00,000.00,1.00 +0303,-050.00,+00.00,01.00,000.00,1.00 +0304,-050.00,+00.00,01.00,000.00,1.00 +0305,-050.00,+00.00,01.00,000.00,1.00 +0306,-050.00,+00.00,01.00,000.00,1.00 +0307,-050.00,+00.00,01.00,000.00,1.00 +0308,-050.00,+00.00,01.00,000.00,1.00 +0309,-050.00,+00.00,01.00,000.00,1.00 +0310,-050.00,+00.00,01.00,000.00,1.00 +0311,-050.00,+00.00,01.00,000.00,1.00 +0312,-050.00,+00.00,01.00,000.00,1.00 +0313,-050.00,+00.00,01.00,000.00,1.00 +0314,-050.00,+00.00,01.00,000.00,1.00 +0315,-050.00,+00.00,01.00,000.00,1.00 +0316,-050.00,+00.00,01.00,000.00,1.00 +0317,-050.00,+00.00,01.00,000.00,1.00 +0318,-050.00,+00.00,01.00,000.00,1.00 +0319,-050.00,+00.00,01.00,000.00,1.00 +0320,-050.00,+00.00,01.00,000.00,1.00 +0321,-050.00,+00.00,01.00,000.00,1.00 +0322,-050.00,+00.00,01.00,000.00,1.00 +0323,-050.00,+00.00,01.00,000.00,1.00 +0324,-050.00,+00.00,01.00,000.00,1.00 +0325,-050.00,+00.00,01.00,000.00,1.00 +0326,-050.00,+00.00,01.00,000.00,1.00 +0327,-050.00,+00.00,01.00,000.00,1.00 +0328,-050.00,+00.00,01.00,000.00,1.00 +0329,-050.00,+00.00,01.00,000.00,1.00 +0330,-050.00,+00.00,01.00,000.00,1.00 +0331,-050.00,+00.00,01.00,000.00,1.00 +0332,-050.00,+00.00,01.00,000.00,1.00 +0333,-050.00,+00.00,01.00,000.00,1.00 +0334,-050.00,+00.00,01.00,000.00,1.00 +0335,-050.00,+00.00,01.00,000.00,1.00 +0336,-050.00,+00.00,01.00,000.00,1.00 +0337,-050.00,+00.00,01.00,000.00,1.00 +0338,-050.00,+00.00,01.00,000.00,1.00 +0339,-050.00,+00.00,01.00,000.00,1.00 +0340,-050.00,+00.00,01.00,000.00,1.00 +0341,-050.00,+00.00,01.00,000.00,1.00 +0342,-050.00,+00.00,01.00,000.00,1.00 +0343,-050.00,+00.00,01.00,000.00,1.00 +0344,-050.00,+00.00,01.00,000.00,1.00 +0345,-050.00,+00.00,01.00,000.00,1.00 +0346,-050.00,+00.00,01.00,000.00,1.00 +0347,-050.00,+00.00,01.00,000.00,1.00 +0348,-050.00,+00.00,01.00,000.00,1.00 +0349,-050.00,+00.00,01.00,000.00,1.00 +0350,-050.00,+00.00,01.00,000.00,1.00 +0351,-050.00,+00.00,01.00,000.00,1.00 +0352,-050.00,+00.00,01.00,000.00,1.00 +0353,-050.00,+00.00,01.00,000.00,1.00 +0354,-050.00,+00.00,01.00,000.00,1.00 +0355,-050.00,+00.00,01.00,000.00,1.00 +0356,-050.00,+00.00,01.00,000.00,1.00 +0357,-050.00,+00.00,01.00,000.00,1.00 +0358,-050.00,+00.00,01.00,000.00,1.00 +0359,-050.00,+00.00,01.00,000.00,1.00 +0360,-050.00,+00.00,01.00,000.00,1.00 +0361,-050.00,+00.00,01.00,000.00,1.00 +0362,-050.00,+00.00,01.00,000.00,1.00 +0363,-050.00,+00.00,01.00,000.00,1.00 +0364,-050.00,+00.00,01.00,000.00,1.00 +0365,-050.00,+00.00,01.00,000.00,1.00 +0366,-050.00,+00.00,01.00,000.00,1.00 +0367,-050.00,+00.00,01.00,000.00,1.00 +0368,-050.00,+00.00,01.00,000.00,1.00 +0369,-050.00,+00.00,01.00,000.00,1.00 +0370,-050.00,+00.00,01.00,000.00,1.00 +0371,-050.00,+00.00,01.00,000.00,1.00 +0372,-050.00,+00.00,01.00,000.00,1.00 +0373,-050.00,+00.00,01.00,000.00,1.00 +0374,-050.00,+00.00,01.00,000.00,1.00 +0375,-050.00,+00.00,01.00,000.00,1.00 +0376,-050.00,+00.00,01.00,000.00,1.00 +0377,-050.00,+00.00,01.00,000.00,1.00 +0378,-050.00,+00.00,01.00,000.00,1.00 +0379,-050.00,+00.00,01.00,000.00,1.00 +0380,-050.00,+00.00,01.00,000.00,1.00 +0381,-050.00,+00.00,01.00,000.00,1.00 +0382,-050.00,+00.00,01.00,000.00,1.00 +0383,-050.00,+00.00,01.00,000.00,1.00 +0384,-050.00,+00.00,01.00,000.00,1.00 +0385,-050.00,+00.00,01.00,000.00,1.00 +0386,-050.00,+00.00,01.00,000.00,1.00 +0387,-050.00,+00.00,01.00,000.00,1.00 +0388,-050.00,+00.00,01.00,000.00,1.00 +0389,-050.00,+00.00,01.00,000.00,1.00 +0390,-050.00,+00.00,01.00,000.00,1.00 +0391,-050.00,+00.00,01.00,000.00,1.00 +0392,-050.00,+00.00,01.00,000.00,1.00 +0393,-050.00,+00.00,01.00,000.00,1.00 +0394,-050.00,+00.00,01.00,000.00,1.00 +0395,-050.00,+00.00,01.00,000.00,1.00 +0396,-050.00,+00.00,01.00,000.00,1.00 +0397,-050.00,+00.00,01.00,000.00,1.00 +0398,-050.00,+00.00,01.00,000.00,1.00 +0399,-050.00,+00.00,01.00,000.00,1.00 +0400,-050.00,+00.00,01.00,000.00,1.00 +0401,-050.00,+00.00,01.00,000.00,1.00 +0402,-050.00,+00.00,01.00,000.00,1.00 +0403,-050.00,+00.00,01.00,000.00,1.00 +0404,-050.00,+00.00,01.00,000.00,1.00 +0405,-050.00,+00.00,01.00,000.00,1.00 +0406,-050.00,+00.00,01.00,000.00,1.00 +0407,-050.00,+00.00,01.00,000.00,1.00 +0408,-050.00,+00.00,01.00,000.00,1.00 +0409,-050.00,+00.00,01.00,000.00,1.00 +0410,-050.00,+00.00,01.00,000.00,1.00 +0411,-050.00,+00.00,01.00,000.00,1.00 +0412,-050.00,+00.00,01.00,000.00,1.00 +0413,-050.00,+00.00,01.00,000.00,1.00 +0414,-050.00,+00.00,01.00,000.00,1.00 +0415,-050.00,+00.00,01.00,000.00,1.00 +0416,-050.00,+00.00,01.00,000.00,1.00 +0417,-050.00,+00.00,01.00,000.00,1.00 +0418,-050.00,+00.00,01.00,000.00,1.00 +0419,-050.00,+00.00,01.00,000.00,1.00 +0420,-050.00,+00.00,01.00,000.00,1.00 +0421,-050.00,+00.00,01.00,000.00,1.00 +0422,-050.00,+00.00,01.00,000.00,1.00 +0423,-050.00,+00.00,01.00,000.00,1.00 +0424,-050.00,+00.00,01.00,000.00,1.00 +0425,-050.00,+00.00,01.00,000.00,1.00 +0426,-050.00,+00.00,01.00,000.00,1.00 +0427,-050.00,+00.00,01.00,000.00,1.00 +0428,-050.00,+00.00,01.00,000.00,1.00 +0429,-050.00,+00.00,01.00,000.00,1.00 +0430,-050.00,+00.00,01.00,000.00,1.00 +0431,-050.00,+00.00,01.00,000.00,1.00 +0432,-050.00,+00.00,01.00,000.00,1.00 +0433,-050.00,+00.00,01.00,000.00,1.00 +0434,-050.00,+00.00,01.00,000.00,1.00 +0435,-050.00,+00.00,01.00,000.00,1.00 +0436,-050.00,+00.00,01.00,000.00,1.00 +0437,-050.00,+00.00,01.00,000.00,1.00 +0438,-050.00,+00.00,01.00,000.00,1.00 +0439,-050.00,+00.00,01.00,000.00,1.00 +0440,-050.00,+00.00,01.00,000.00,1.00 +0441,-050.00,+00.00,01.00,000.00,1.00 +0442,-050.00,+00.00,01.00,000.00,1.00 +0443,-050.00,+00.00,01.00,000.00,1.00 +0444,-050.00,+00.00,01.00,000.00,1.00 +0445,-050.00,+00.00,01.00,000.00,1.00 +0446,-050.00,+00.00,01.00,000.00,1.00 +0447,-050.00,+00.00,01.00,000.00,1.00 +0448,-050.00,+00.00,01.00,000.00,1.00 +0449,-050.00,+00.00,01.00,000.00,1.00 +0450,-050.00,+00.00,01.00,000.00,1.00 +0451,-050.00,+00.00,01.00,000.00,1.00 +0452,-050.00,+00.00,01.00,000.00,1.00 +0453,-050.00,+00.00,01.00,000.00,1.00 +0454,-050.00,+00.00,01.00,000.00,1.00 +0455,-050.00,+00.00,01.00,000.00,1.00 +0456,-050.00,+00.00,01.00,000.00,1.00 +0457,-050.00,+00.00,01.00,000.00,1.00 +0458,-050.00,+00.00,01.00,000.00,1.00 +0459,-050.00,+00.00,01.00,000.00,1.00 +0460,-050.00,+00.00,01.00,000.00,1.00 +0461,-050.00,+00.00,01.00,000.00,1.00 +0462,-050.00,+00.00,01.00,000.00,1.00 +0463,-050.00,+00.00,01.00,000.00,1.00 +0464,-050.00,+00.00,01.00,000.00,1.00 +0465,-050.00,+00.00,01.00,000.00,1.00 +0466,-050.00,+00.00,01.00,000.00,1.00 +0467,-050.00,+00.00,01.00,000.00,1.00 +0468,-050.00,+00.00,01.00,000.00,1.00 +0469,-050.00,+00.00,01.00,000.00,1.00 +0470,-050.00,+00.00,01.00,000.00,1.00 +0471,-050.00,+00.00,01.00,000.00,1.00 +0472,-050.00,+00.00,01.00,000.00,1.00 +0473,-050.00,+00.00,01.00,000.00,1.00 +0474,-050.00,+00.00,01.00,000.00,1.00 +0475,-050.00,+00.00,01.00,000.00,1.00 +0476,-050.00,+00.00,01.00,000.00,1.00 +0477,-050.00,+00.00,01.00,000.00,1.00 +0478,-050.00,+00.00,01.00,000.00,1.00 +0479,-050.00,+00.00,01.00,000.00,1.00 +0480,-050.00,+00.00,01.00,000.00,1.00 +0481,-050.00,+00.00,01.00,000.00,1.00 +0482,-050.00,+00.00,01.00,000.00,1.00 +0483,-050.00,+00.00,01.00,000.00,1.00 +0484,-050.00,+00.00,01.00,000.00,1.00 +0485,-050.00,+00.00,01.00,000.00,1.00 +0486,-050.00,+00.00,01.00,000.00,1.00 +0487,-050.00,+00.00,01.00,000.00,1.00 +0488,-050.00,+00.00,01.00,000.00,1.00 +0489,-050.00,+00.00,01.00,000.00,1.00 +0490,-050.00,+00.00,01.00,000.00,1.00 +0491,-050.00,+00.00,01.00,000.00,1.00 +0492,-050.00,+00.00,01.00,000.00,1.00 +0493,-050.00,+00.00,01.00,000.00,1.00 +0494,-050.00,+00.00,01.00,000.00,1.00 +0495,-050.00,+00.00,01.00,000.00,1.00 +0496,-050.00,+00.00,01.00,000.00,1.00 +0497,-050.00,+00.00,01.00,000.00,1.00 +0498,-050.00,+00.00,01.00,000.00,1.00 +0499,-050.00,+00.00,01.00,000.00,1.00 +0500,-050.00,+00.00,01.00,000.00,1.00 +0501,-050.00,+00.00,01.00,000.00,1.00 +0502,-050.00,+00.00,01.00,000.00,1.00 +0503,-050.00,+00.00,01.00,000.00,1.00 +0504,-050.00,+00.00,01.00,000.00,1.00 +0505,-050.00,+00.00,01.00,000.00,1.00 +0506,-050.00,+00.00,01.00,000.00,1.00 +0507,-050.00,+00.00,01.00,000.00,1.00 +0508,-050.00,+00.00,01.00,000.00,1.00 +0509,-050.00,+00.00,01.00,000.00,1.00 +0510,-050.00,+00.00,01.00,000.00,1.00 +0511,-050.00,+00.00,01.00,000.00,1.00 +0512,-050.00,+00.00,01.00,000.00,1.00 +0513,-050.00,+00.00,01.00,000.00,1.00 +0514,-050.00,+00.00,01.00,000.00,1.00 +0515,-050.00,+00.00,01.00,000.00,1.00 +0516,-050.00,+00.00,01.00,000.00,1.00 +0517,-050.00,+00.00,01.00,000.00,1.00 +0518,-050.00,+00.00,01.00,000.00,1.00 +0519,-050.00,+00.00,01.00,000.00,1.00 +0520,-050.00,+00.00,01.00,000.00,1.00 +0521,-050.00,+00.00,01.00,000.00,1.00 +0522,-050.00,+00.00,01.00,000.00,1.00 +0523,-050.00,+00.00,01.00,000.00,1.00 +0524,-050.00,+00.00,01.00,000.00,1.00 +0525,-050.00,+00.00,01.00,000.00,1.00 +0526,-050.00,+00.00,01.00,000.00,1.00 +0527,-050.00,+00.00,01.00,000.00,1.00 +0528,-050.00,+00.00,01.00,000.00,1.00 +0529,-050.00,+00.00,01.00,000.00,1.00 +0530,-050.00,+00.00,01.00,000.00,1.00 +0531,-050.00,+00.00,01.00,000.00,1.00 +0532,-050.00,+00.00,01.00,000.00,1.00 +0533,-050.00,+00.00,01.00,000.00,1.00 +0534,-050.00,+00.00,01.00,000.00,1.00 +0535,-050.00,+00.00,01.00,000.00,1.00 +0536,-050.00,+00.00,01.00,000.00,1.00 +0537,-050.00,+00.00,01.00,000.00,1.00 +0538,-050.00,+00.00,01.00,000.00,1.00 +0539,-050.00,+00.00,01.00,000.00,1.00 +0540,-050.00,+00.00,01.00,000.00,1.00 +0541,-050.00,+00.00,01.00,000.00,1.00 +0542,-050.00,+00.00,01.00,000.00,1.00 +0543,-050.00,+00.00,01.00,000.00,1.00 +0544,-050.00,+00.00,01.00,000.00,1.00 +0545,-050.00,+00.00,01.00,000.00,1.00 +0546,-050.00,+00.00,01.00,000.00,1.00 +0547,-050.00,+00.00,01.00,000.00,1.00 +0548,-050.00,+00.00,01.00,000.00,1.00 +0549,-050.00,+00.00,01.00,000.00,1.00 +0550,-050.00,+00.00,01.00,000.00,1.00 +0551,-050.00,+00.00,01.00,000.00,1.00 +0552,-050.00,+00.00,01.00,000.00,1.00 +0553,-050.00,+00.00,01.00,000.00,1.00 +0554,-050.00,+00.00,01.00,000.00,1.00 +0555,-050.00,+00.00,01.00,000.00,1.00 +0556,-050.00,+00.00,01.00,000.00,1.00 +0557,-050.00,+00.00,01.00,000.00,1.00 +0558,-050.00,+00.00,01.00,000.00,1.00 +0559,-050.00,+00.00,01.00,000.00,1.00 +0560,-050.00,+00.00,01.00,000.00,1.00 +0561,-050.00,+00.00,01.00,000.00,1.00 +0562,-050.00,+00.00,01.00,000.00,1.00 +0563,-050.00,+00.00,01.00,000.00,1.00 +0564,-050.00,+00.00,01.00,000.00,1.00 +0565,-050.00,+00.00,01.00,000.00,1.00 +0566,-050.00,+00.00,01.00,000.00,1.00 +0567,-050.00,+00.00,01.00,000.00,1.00 +0568,-050.00,+00.00,01.00,000.00,1.00 +0569,-050.00,+00.00,01.00,000.00,1.00 +0570,-050.00,+00.00,01.00,000.00,1.00 +0571,-050.00,+00.00,01.00,000.00,1.00 +0572,-050.00,+00.00,01.00,000.00,1.00 +0573,-050.00,+00.00,01.00,000.00,1.00 +0574,-050.00,+00.00,01.00,000.00,1.00 +0575,-050.00,+00.00,01.00,000.00,1.00 +0576,-050.00,+00.00,01.00,000.00,1.00 +0577,-050.00,+00.00,01.00,000.00,1.00 +0578,-050.00,+00.00,01.00,000.00,1.00 +0579,-050.00,+00.00,01.00,000.00,1.00 +0580,-050.00,+00.00,01.00,000.00,1.00 +0581,-050.00,+00.00,01.00,000.00,1.00 +0582,-050.00,+00.00,01.00,000.00,1.00 +0583,-050.00,+00.00,01.00,000.00,1.00 +0584,-050.00,+00.00,01.00,000.00,1.00 +0585,-050.00,+00.00,01.00,000.00,1.00 +0586,-050.00,+00.00,01.00,000.00,1.00 +0587,-050.00,+00.00,01.00,000.00,1.00 +0588,-050.00,+00.00,01.00,000.00,1.00 +0589,-050.00,+00.00,01.00,000.00,1.00 +0590,-050.00,+00.00,01.00,000.00,1.00 +0591,-050.00,+00.00,01.00,000.00,1.00 +0592,-050.00,+00.00,01.00,000.00,1.00 +0593,-050.00,+00.00,01.00,000.00,1.00 +0594,-050.00,+00.00,01.00,000.00,1.00 +0595,-050.00,+00.00,01.00,000.00,1.00 +0596,-050.00,+00.00,01.00,000.00,1.00 +0597,-050.00,+00.00,01.00,000.00,1.00 +0598,-050.00,+00.00,01.00,000.00,1.00 +0599,-050.00,+00.00,01.00,000.00,1.00 +0600,-050.00,+00.00,01.00,000.00,1.00 +0601,-050.00,+00.00,01.00,000.00,1.00 +0602,-050.00,+00.00,01.00,000.00,1.00 +0603,-050.00,+00.00,01.00,000.00,1.00 +0604,-050.00,+00.00,01.00,000.00,1.00 +0605,-050.00,+00.00,01.00,000.00,1.00 +0606,-050.00,+00.00,01.00,000.00,1.00 +0607,-050.00,+00.00,01.00,000.00,1.00 +0608,-050.00,+00.00,01.00,000.00,1.00 +0609,-050.00,+00.00,01.00,000.00,1.00 +0610,-050.00,+00.00,01.00,000.00,1.00 +0611,-050.00,+00.00,01.00,000.00,1.00 +0612,-050.00,+00.00,01.00,000.00,1.00 +0613,-050.00,+00.00,01.00,000.00,1.00 +0614,-050.00,+00.00,01.00,000.00,1.00 +0615,-050.00,+00.00,01.00,000.00,1.00 +0616,-050.00,+00.00,01.00,000.00,1.00 +0617,-050.00,+00.00,01.00,000.00,1.00 +0618,-050.00,+00.00,01.00,000.00,1.00 +0619,-050.00,+00.00,01.00,000.00,1.00 +0620,-050.00,+00.00,01.00,000.00,1.00 +0621,-050.00,+00.00,01.00,000.00,1.00 +0622,-050.00,+00.00,01.00,000.00,1.00 +0623,-050.00,+00.00,01.00,000.00,1.00 +0624,-050.00,+00.00,01.00,000.00,1.00 +0625,-050.00,+00.00,01.00,000.00,1.00 +0626,-050.00,+00.00,01.00,000.00,1.00 +0627,-050.00,+00.00,01.00,000.00,1.00 +0628,-050.00,+00.00,01.00,000.00,1.00 +0629,-050.00,+00.00,01.00,000.00,1.00 +0630,-050.00,+00.00,01.00,000.00,1.00 +0631,-050.00,+00.00,01.00,000.00,1.00 +0632,-050.00,+00.00,01.00,000.00,1.00 +0633,-050.00,+00.00,01.00,000.00,1.00 +0634,-050.00,+00.00,01.00,000.00,1.00 +0635,-050.00,+00.00,01.00,000.00,1.00 +0636,-050.00,+00.00,01.00,000.00,1.00 +0637,-050.00,+00.00,01.00,000.00,1.00 +0638,-050.00,+00.00,01.00,000.00,1.00 +0639,-050.00,+00.00,01.00,000.00,1.00 +0640,-050.00,+00.00,01.00,000.00,1.00 +0641,-050.00,+00.00,01.00,000.00,1.00 +0642,-050.00,+00.00,01.00,000.00,1.00 +0643,-050.00,+00.00,01.00,000.00,1.00 +0644,-050.00,+00.00,01.00,000.00,1.00 +0645,-050.00,+00.00,01.00,000.00,1.00 +0646,-050.00,+00.00,01.00,000.00,1.00 +0647,-050.00,+00.00,01.00,000.00,1.00 +0648,-050.00,+00.00,01.00,000.00,1.00 +0649,-050.00,+00.00,01.00,000.00,1.00 +0650,-050.00,+00.00,01.00,000.00,1.00 +0651,-050.00,+00.00,01.00,000.00,1.00 +0652,-050.00,+00.00,01.00,000.00,1.00 +0653,-050.00,+00.00,01.00,000.00,1.00 +0654,-050.00,+00.00,01.00,000.00,1.00 +0655,-050.00,+00.00,01.00,000.00,1.00 +0656,-050.00,+00.00,01.00,000.00,1.00 +0657,-050.00,+00.00,01.00,000.00,1.00 +0658,-050.00,+00.00,01.00,000.00,1.00 +0659,-050.00,+00.00,01.00,000.00,1.00 +0660,-050.00,+00.00,01.00,000.00,1.00 +0661,-050.00,+00.00,01.00,000.00,1.00 +0662,-050.00,+00.00,01.00,000.00,1.00 +0663,-050.00,+00.00,01.00,000.00,1.00 +0664,-050.00,+00.00,01.00,000.00,1.00 +0665,-050.00,+00.00,01.00,000.00,1.00 +0666,-050.00,+00.00,01.00,000.00,1.00 +0667,-050.00,+00.00,01.00,000.00,1.00 +0668,-050.00,+00.00,01.00,000.00,1.00 +0669,-050.00,+00.00,01.00,000.00,1.00 +0670,-050.00,+00.00,01.00,000.00,1.00 +0671,-050.00,+00.00,01.00,000.00,1.00 +0672,-050.00,+00.00,01.00,000.00,1.00 +0673,-050.00,+00.00,01.00,000.00,1.00 +0674,-050.00,+00.00,01.00,000.00,1.00 +0675,-050.00,+00.00,01.00,000.00,1.00 +0676,-050.00,+00.00,01.00,000.00,1.00 +0677,-050.00,+00.00,01.00,000.00,1.00 +0678,-050.00,+00.00,01.00,000.00,1.00 +0679,-050.00,+00.00,01.00,000.00,1.00 +0680,-050.00,+00.00,01.00,000.00,1.00 +0681,-050.00,+00.00,01.00,000.00,1.00 +0682,-050.00,+00.00,01.00,000.00,1.00 +0683,-050.00,+00.00,01.00,000.00,1.00 +0684,-050.00,+00.00,01.00,000.00,1.00 +0685,-050.00,+00.00,01.00,000.00,1.00 +0686,-050.00,+00.00,01.00,000.00,1.00 +0687,-050.00,+00.00,01.00,000.00,1.00 +0688,-050.00,+00.00,01.00,000.00,1.00 +0689,-050.00,+00.00,01.00,000.00,1.00 +0690,-050.00,+00.00,01.00,000.00,1.00 +0691,-050.00,+00.00,01.00,000.00,1.00 +0692,-050.00,+00.00,01.00,000.00,1.00 +0693,-050.00,+00.00,01.00,000.00,1.00 +0694,-050.00,+00.00,01.00,000.00,1.00 +0695,-050.00,+00.00,01.00,000.00,1.00 +0696,-050.00,+00.00,01.00,000.00,1.00 +0697,-050.00,+00.00,01.00,000.00,1.00 +0698,-050.00,+00.00,01.00,000.00,1.00 +0699,-050.00,+00.00,01.00,000.00,1.00 +0700,-050.00,+00.00,01.00,000.00,1.00 +0701,-050.00,+00.00,01.00,000.00,1.00 +0702,-050.00,+00.00,01.00,000.00,1.00 +0703,-050.00,+00.00,01.00,000.00,1.00 +0704,-050.00,+00.00,01.00,000.00,1.00 +0705,-050.00,+00.00,01.00,000.00,1.00 +0706,-050.00,+00.00,01.00,000.00,1.00 +0707,-050.00,+00.00,01.00,000.00,1.00 +0708,-050.00,+00.00,01.00,000.00,1.00 +0709,-050.00,+00.00,01.00,000.00,1.00 +0710,-050.00,+00.00,01.00,000.00,1.00 +0711,-050.00,+00.00,01.00,000.00,1.00 +0712,-050.00,+00.00,01.00,000.00,1.00 +0713,-050.00,+00.00,01.00,000.00,1.00 +0714,-050.00,+00.00,01.00,000.00,1.00 +0715,-050.00,+00.00,01.00,000.00,1.00 +0716,-050.00,+00.00,01.00,000.00,1.00 +0717,-050.00,+00.00,01.00,000.00,1.00 +0718,-050.00,+00.00,01.00,000.00,1.00 +0719,-050.00,+00.00,01.00,000.00,1.00 +0720,-050.00,+00.00,01.00,000.00,1.00 +0721,-050.00,+00.00,01.00,000.00,1.00 +0722,-050.00,+00.00,01.00,000.00,1.00 +0723,-050.00,+00.00,01.00,000.00,1.00 +0724,-050.00,+00.00,01.00,000.00,1.00 +0725,-050.00,+00.00,01.00,000.00,1.00 +0726,-050.00,+00.00,01.00,000.00,1.00 +0727,-050.00,+00.00,01.00,000.00,1.00 +0728,-050.00,+00.00,01.00,000.00,1.00 +0729,-050.00,+00.00,01.00,000.00,1.00 +0730,-050.00,+00.00,01.00,000.00,1.00 +0731,-050.00,+00.00,01.00,000.00,1.00 +0732,-050.00,+00.00,01.00,000.00,1.00 +0733,-050.00,+00.00,01.00,000.00,1.00 +0734,-050.00,+00.00,01.00,000.00,1.00 +0735,-050.00,+00.00,01.00,000.00,1.00 +0736,-050.00,+00.00,01.00,000.00,1.00 +0737,-050.00,+00.00,01.00,000.00,1.00 +0738,-050.00,+00.00,01.00,000.00,1.00 +0739,-050.00,+00.00,01.00,000.00,1.00 +0740,-050.00,+00.00,01.00,000.00,1.00 +0741,-050.00,+00.00,01.00,000.00,1.00 +0742,-050.00,+00.00,01.00,000.00,1.00 +0743,-050.00,+00.00,01.00,000.00,1.00 +0744,-050.00,+00.00,01.00,000.00,1.00 +0745,-050.00,+00.00,01.00,000.00,1.00 +0746,-050.00,+00.00,01.00,000.00,1.00 +0747,-050.00,+00.00,01.00,000.00,1.00 +0748,-050.00,+00.00,01.00,000.00,1.00 +0749,-050.00,+00.00,01.00,000.00,1.00 +0750,-050.00,+00.00,01.00,000.00,1.00 +0751,-050.00,+00.00,01.00,000.00,1.00 +0752,-050.00,+00.00,01.00,000.00,1.00 +0753,-050.00,+00.00,01.00,000.00,1.00 +0754,-050.00,+00.00,01.00,000.00,1.00 +0755,-050.00,+00.00,01.00,000.00,1.00 +0756,-050.00,+00.00,01.00,000.00,1.00 +0757,-050.00,+00.00,01.00,000.00,1.00 +0758,-050.00,+00.00,01.00,000.00,1.00 +0759,-050.00,+00.00,01.00,000.00,1.00 +0760,-050.00,+00.00,01.00,000.00,1.00 +0761,-050.00,+00.00,01.00,000.00,1.00 +0762,-050.00,+00.00,01.00,000.00,1.00 +0763,-050.00,+00.00,01.00,000.00,1.00 +0764,-050.00,+00.00,01.00,000.00,1.00 +0765,-050.00,+00.00,01.00,000.00,1.00 +0766,-050.00,+00.00,01.00,000.00,1.00 +0767,-050.00,+00.00,01.00,000.00,1.00 +0768,-050.00,+00.00,01.00,000.00,1.00 +0769,-050.00,+00.00,01.00,000.00,1.00 +0770,-050.00,+00.00,01.00,000.00,1.00 +0771,-050.00,+00.00,01.00,000.00,1.00 +0772,-050.00,+00.00,01.00,000.00,1.00 +0773,-050.00,+00.00,01.00,000.00,1.00 +0774,-050.00,+00.00,01.00,000.00,1.00 +0775,-050.00,+00.00,01.00,000.00,1.00 +0776,-050.00,+00.00,01.00,000.00,1.00 +0777,-050.00,+00.00,01.00,000.00,1.00 +0778,-050.00,+00.00,01.00,000.00,1.00 +0779,-050.00,+00.00,01.00,000.00,1.00 +0780,-050.00,+00.00,01.00,000.00,1.00 +0781,-050.00,+00.00,01.00,000.00,1.00 +0782,-050.00,+00.00,01.00,000.00,1.00 +0783,-050.00,+00.00,01.00,000.00,1.00 +0784,-050.00,+00.00,01.00,000.00,1.00 +0785,-050.00,+00.00,01.00,000.00,1.00 +0786,-050.00,+00.00,01.00,000.00,1.00 +0787,-050.00,+00.00,01.00,000.00,1.00 +0788,-050.00,+00.00,01.00,000.00,1.00 +0789,-050.00,+00.00,01.00,000.00,1.00 +0790,-050.00,+00.00,01.00,000.00,1.00 +0791,-050.00,+00.00,01.00,000.00,1.00 +0792,-050.00,+00.00,01.00,000.00,1.00 +0793,-050.00,+00.00,01.00,000.00,1.00 +0794,-050.00,+00.00,01.00,000.00,1.00 +0795,-050.00,+00.00,01.00,000.00,1.00 +0796,-050.00,+00.00,01.00,000.00,1.00 +0797,-050.00,+00.00,01.00,000.00,1.00 +0798,-050.00,+00.00,01.00,000.00,1.00 +0799,-050.00,+00.00,01.00,000.00,1.00 +0800,-050.00,+00.00,01.00,000.00,1.00 +0801,-050.00,+00.00,01.00,000.00,1.00 +0802,-050.00,+00.00,01.00,000.00,1.00 +0803,-050.00,+00.00,01.00,000.00,1.00 +0804,-050.00,+00.00,01.00,000.00,1.00 +0805,-050.00,+00.00,01.00,000.00,1.00 +0806,-050.00,+00.00,01.00,000.00,1.00 +0807,-050.00,+00.00,01.00,000.00,1.00 +0808,-050.00,+00.00,01.00,000.00,1.00 +0809,-050.00,+00.00,01.00,000.00,1.00 +0810,-050.00,+00.00,01.00,000.00,1.00 +0811,-050.00,+00.00,01.00,000.00,1.00 +0812,-050.00,+00.00,01.00,000.00,1.00 +0813,-050.00,+00.00,01.00,000.00,1.00 +0814,-050.00,+00.00,01.00,000.00,1.00 +0815,-050.00,+00.00,01.00,000.00,1.00 +0816,-050.00,+00.00,01.00,000.00,1.00 +0817,-050.00,+00.00,01.00,000.00,1.00 +0818,-050.00,+00.00,01.00,000.00,1.00 +0819,-050.00,+00.00,01.00,000.00,1.00 +0820,-050.00,+00.00,01.00,000.00,1.00 +0821,-050.00,+00.00,01.00,000.00,1.00 +0822,-050.00,+00.00,01.00,000.00,1.00 +0823,-050.00,+00.00,01.00,000.00,1.00 +0824,-050.00,+00.00,01.00,000.00,1.00 +0825,-050.00,+00.00,01.00,000.00,1.00 +0826,-050.00,+00.00,01.00,000.00,1.00 +0827,-050.00,+00.00,01.00,000.00,1.00 +0828,-050.00,+00.00,01.00,000.00,1.00 +0829,-050.00,+00.00,01.00,000.00,1.00 +0830,-050.00,+00.00,01.00,000.00,1.00 +0831,-050.00,+00.00,01.00,000.00,1.00 +0832,-050.00,+00.00,01.00,000.00,1.00 +0833,-050.00,+00.00,01.00,000.00,1.00 +0834,-050.00,+00.00,01.00,000.00,1.00 +0835,-050.00,+00.00,01.00,000.00,1.00 +0836,-050.00,+00.00,01.00,000.00,1.00 +0837,-050.00,+00.00,01.00,000.00,1.00 +0838,-050.00,+00.00,01.00,000.00,1.00 +0839,-050.00,+00.00,01.00,000.00,1.00 +0840,-050.00,+00.00,01.00,000.00,1.00 +0841,-050.00,+00.00,01.00,000.00,1.00 +0842,-050.00,+00.00,01.00,000.00,1.00 +0843,-050.00,+00.00,01.00,000.00,1.00 +0844,-050.00,+00.00,01.00,000.00,1.00 +0845,-050.00,+00.00,01.00,000.00,1.00 +0846,-050.00,+00.00,01.00,000.00,1.00 +0847,-050.00,+00.00,01.00,000.00,1.00 +0848,-050.00,+00.00,01.00,000.00,1.00 +0849,-050.00,+00.00,01.00,000.00,1.00 +0850,-050.00,+00.00,01.00,000.00,1.00 +0851,-050.00,+00.00,01.00,000.00,1.00 +0852,-050.00,+00.00,01.00,000.00,1.00 +0853,-050.00,+00.00,01.00,000.00,1.00 +0854,-050.00,+00.00,01.00,000.00,1.00 +0855,-050.00,+00.00,01.00,000.00,1.00 +0856,-050.00,+00.00,01.00,000.00,1.00 +0857,-050.00,+00.00,01.00,000.00,1.00 +0858,-050.00,+00.00,01.00,000.00,1.00 +0859,-050.00,+00.00,01.00,000.00,1.00 +0860,-050.00,+00.00,01.00,000.00,1.00 +0861,-050.00,+00.00,01.00,000.00,1.00 +0862,-050.00,+00.00,01.00,000.00,1.00 +0863,-050.00,+00.00,01.00,000.00,1.00 +0864,-050.00,+00.00,01.00,000.00,1.00 +0865,-050.00,+00.00,01.00,000.00,1.00 +0866,-050.00,+00.00,01.00,000.00,1.00 +0867,-050.00,+00.00,01.00,000.00,1.00 +0868,-050.00,+00.00,01.00,000.00,1.00 +0869,-050.00,+00.00,01.00,000.00,1.00 +0870,-050.00,+00.00,01.00,000.00,1.00 +0871,-050.00,+00.00,01.00,000.00,1.00 +0872,-050.00,+00.00,01.00,000.00,1.00 +0873,-050.00,+00.00,01.00,000.00,1.00 +0874,-050.00,+00.00,01.00,000.00,1.00 +0875,-050.00,+00.00,01.00,000.00,1.00 +0876,-050.00,+00.00,01.00,000.00,1.00 +0877,-050.00,+00.00,01.00,000.00,1.00 +0878,-050.00,+00.00,01.00,000.00,1.00 +0879,-050.00,+00.00,01.00,000.00,1.00 +0880,-050.00,+00.00,01.00,000.00,1.00 +0881,-050.00,+00.00,01.00,000.00,1.00 +0882,-050.00,+00.00,01.00,000.00,1.00 +0883,-050.00,+00.00,01.00,000.00,1.00 +0884,-050.00,+00.00,01.00,000.00,1.00 +0885,-050.00,+00.00,01.00,000.00,1.00 +0886,-050.00,+00.00,01.00,000.00,1.00 +0887,-050.00,+00.00,01.00,000.00,1.00 +0888,-050.00,+00.00,01.00,000.00,1.00 +0889,-050.00,+00.00,01.00,000.00,1.00 +0890,-050.00,+00.00,01.00,000.00,1.00 +0891,-050.00,+00.00,01.00,000.00,1.00 +0892,-050.00,+00.00,01.00,000.00,1.00 +0893,-050.00,+00.00,01.00,000.00,1.00 +0894,-050.00,+00.00,01.00,000.00,1.00 +0895,-050.00,+00.00,01.00,000.00,1.00 +0896,-050.00,+00.00,01.00,000.00,1.00 +0897,-050.00,+00.00,01.00,000.00,1.00 +0898,-050.00,+00.00,01.00,000.00,1.00 +0899,-050.00,+00.00,01.00,000.00,1.00 +0900,-050.00,+00.00,01.00,000.00,1.00 +0901,-050.00,+00.00,01.00,000.00,1.00 +0902,-050.00,+00.00,01.00,000.00,1.00 +0903,-050.00,+00.00,01.00,000.00,1.00 +0904,-050.00,+00.00,01.00,000.00,1.00 +0905,-050.00,+00.00,01.00,000.00,1.00 +0906,-050.00,+00.00,01.00,000.00,1.00 +0907,-050.00,+00.00,01.00,000.00,1.00 +0908,-050.00,+00.00,01.00,000.00,1.00 +0909,-050.00,+00.00,01.00,000.00,1.00 +0910,-050.00,+00.00,01.00,000.00,1.00 +0911,-050.00,+00.00,01.00,000.00,1.00 +0912,-050.00,+00.00,01.00,000.00,1.00 +0913,-050.00,+00.00,01.00,000.00,1.00 +0914,-050.00,+00.00,01.00,000.00,1.00 +0915,-050.00,+00.00,01.00,000.00,1.00 +0916,-050.00,+00.00,01.00,000.00,1.00 +0917,-050.00,+00.00,01.00,000.00,1.00 +0918,-050.00,+00.00,01.00,000.00,1.00 +0919,-050.00,+00.00,01.00,000.00,1.00 +0920,-050.00,+00.00,01.00,000.00,1.00 +0921,-050.00,+00.00,01.00,000.00,1.00 +0922,-050.00,+00.00,01.00,000.00,1.00 +0923,-050.00,+00.00,01.00,000.00,1.00 +0924,-050.00,+00.00,01.00,000.00,1.00 +0925,-050.00,+00.00,01.00,000.00,1.00 +0926,-050.00,+00.00,01.00,000.00,1.00 +0927,-050.00,+00.00,01.00,000.00,1.00 +0928,-050.00,+00.00,01.00,000.00,1.00 +0929,-050.00,+00.00,01.00,000.00,1.00 +0930,-050.00,+00.00,01.00,000.00,1.00 +0931,-050.00,+00.00,01.00,000.00,1.00 +0932,-050.00,+00.00,01.00,000.00,1.00 +0933,-050.00,+00.00,01.00,000.00,1.00 +0934,-050.00,+00.00,01.00,000.00,1.00 +0935,-050.00,+00.00,01.00,000.00,1.00 +0936,-050.00,+00.00,01.00,000.00,1.00 +0937,-050.00,+00.00,01.00,000.00,1.00 +0938,-050.00,+00.00,01.00,000.00,1.00 +0939,-050.00,+00.00,01.00,000.00,1.00 +0940,-050.00,+00.00,01.00,000.00,1.00 +0941,-050.00,+00.00,01.00,000.00,1.00 +0942,-050.00,+00.00,01.00,000.00,1.00 +0943,-050.00,+00.00,01.00,000.00,1.00 +0944,-050.00,+00.00,01.00,000.00,1.00 +0945,-050.00,+00.00,01.00,000.00,1.00 +0946,-050.00,+00.00,01.00,000.00,1.00 +0947,-050.00,+00.00,01.00,000.00,1.00 +0948,-050.00,+00.00,01.00,000.00,1.00 +0949,-050.00,+00.00,01.00,000.00,1.00 +0950,-050.00,+00.00,01.00,000.00,1.00 +0951,-050.00,+00.00,01.00,000.00,1.00 +0952,-050.00,+00.00,01.00,000.00,1.00 +0953,-050.00,+00.00,01.00,000.00,1.00 +0954,-050.00,+00.00,01.00,000.00,1.00 +0955,-050.00,+00.00,01.00,000.00,1.00 +0956,-050.00,+00.00,01.00,000.00,1.00 +0957,-050.00,+00.00,01.00,000.00,1.00 +0958,-050.00,+00.00,01.00,000.00,1.00 +0959,-050.00,+00.00,01.00,000.00,1.00 +0960,-050.00,+00.00,01.00,000.00,1.00 +0961,-050.00,+00.00,01.00,000.00,1.00 +0962,-050.00,+00.00,01.00,000.00,1.00 +0963,-050.00,+00.00,01.00,000.00,1.00 +0964,-050.00,+00.00,01.00,000.00,1.00 +0965,-050.00,+00.00,01.00,000.00,1.00 +0966,-050.00,+00.00,01.00,000.00,1.00 +0967,-050.00,+00.00,01.00,000.00,1.00 +0968,-050.00,+00.00,01.00,000.00,1.00 +0969,-050.00,+00.00,01.00,000.00,1.00 +0970,-050.00,+00.00,01.00,000.00,1.00 +0971,-050.00,+00.00,01.00,000.00,1.00 +0972,-050.00,+00.00,01.00,000.00,1.00 +0973,-050.00,+00.00,01.00,000.00,1.00 +0974,-050.00,+00.00,01.00,000.00,1.00 +0975,-050.00,+00.00,01.00,000.00,1.00 +0976,-050.00,+00.00,01.00,000.00,1.00 +0977,-050.00,+00.00,01.00,000.00,1.00 +0978,-050.00,+00.00,01.00,000.00,1.00 +0979,-050.00,+00.00,01.00,000.00,1.00 +0980,-050.00,+00.00,01.00,000.00,1.00 +0981,-050.00,+00.00,01.00,000.00,1.00 +0982,-050.00,+00.00,01.00,000.00,1.00 +0983,-050.00,+00.00,01.00,000.00,1.00 +0984,-050.00,+00.00,01.00,000.00,1.00 +0985,-050.00,+00.00,01.00,000.00,1.00 +0986,-050.00,+00.00,01.00,000.00,1.00 +0987,-050.00,+00.00,01.00,000.00,1.00 +0988,-050.00,+00.00,01.00,000.00,1.00 +0989,-050.00,+00.00,01.00,000.00,1.00 +0990,-050.00,+00.00,01.00,000.00,1.00 +0991,-050.00,+00.00,01.00,000.00,1.00 +0992,-050.00,+00.00,01.00,000.00,1.00 +0993,-050.00,+00.00,01.00,000.00,1.00 +0994,-050.00,+00.00,01.00,000.00,1.00 +0995,-050.00,+00.00,01.00,000.00,1.00 +0996,-050.00,+00.00,01.00,000.00,1.00 +0997,-050.00,+00.00,01.00,000.00,1.00 +0998,-050.00,+00.00,01.00,000.00,1.00 +0999,-050.00,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/metadata/csv/t11_ch2.csv b/scripts/td_object_renderer/metadata/csv/t11_ch2.csv new file mode 100644 index 0000000000..b5095dac1d --- /dev/null +++ b/scripts/td_object_renderer/metadata/csv/t11_ch2.csv @@ -0,0 +1,1000 @@ +0000,-020.00,+00.00,01.00,000.00,1.00 +0001,-019.10,+00.00,01.00,000.00,1.00 +0002,-018.20,+00.00,01.00,000.00,1.00 +0003,-017.30,+00.00,01.00,000.00,1.00 +0004,-016.40,+00.00,01.00,000.00,1.00 +0005,-015.50,+00.00,01.00,000.00,1.00 +0006,-014.60,+00.00,01.00,000.00,1.00 +0007,-013.70,+00.00,01.00,000.00,1.00 +0008,-012.80,+00.00,01.00,000.00,1.00 +0009,-011.90,+00.00,01.00,000.00,1.00 +0010,-011.00,+00.00,01.00,000.00,1.00 +0011,-010.10,+00.00,01.00,000.00,1.00 +0012,-009.20,+00.00,01.00,000.00,1.00 +0013,-008.30,+00.00,01.00,000.00,1.00 +0014,-007.40,+00.00,01.00,000.00,1.00 +0015,-006.50,+00.00,01.00,000.00,1.00 +0016,-005.60,+00.00,01.00,000.00,1.00 +0017,-004.70,+00.00,01.00,000.00,1.00 +0018,-003.80,+00.00,01.00,000.00,1.00 +0019,-002.90,+00.00,01.00,000.00,1.00 +0020,-002.00,+00.00,01.00,000.00,1.00 +0021,-001.10,+00.00,01.00,000.00,1.00 +0022,-000.20,+00.00,01.00,000.00,1.00 +0023,+000.70,+00.00,01.00,000.00,1.00 +0024,+001.60,+00.00,01.00,000.00,1.00 +0025,+002.50,+00.00,01.00,000.00,1.00 +0026,+003.40,+00.00,01.00,000.00,1.00 +0027,+004.30,+00.00,01.00,000.00,1.00 +0028,+005.20,+00.00,01.00,000.00,1.00 +0029,+006.10,+00.00,01.00,000.00,1.00 +0030,+007.00,+00.00,01.00,000.00,1.00 +0031,+007.90,+00.00,01.00,000.00,1.00 +0032,+008.80,+00.00,01.00,000.00,1.00 +0033,+009.70,+00.00,01.00,000.00,1.00 +0034,+010.60,+00.00,01.00,000.00,1.00 +0035,+011.50,+00.00,01.00,000.00,1.00 +0036,+012.40,+00.00,01.00,000.00,1.00 +0037,+013.30,+00.00,01.00,000.00,1.00 +0038,+014.20,+00.00,01.00,000.00,1.00 +0039,+015.10,+00.00,01.00,000.00,1.00 +0040,+016.00,+00.00,01.00,000.00,1.00 +0041,+016.90,+00.00,01.00,000.00,1.00 +0042,+017.80,+00.00,01.00,000.00,1.00 +0043,+018.70,+00.00,01.00,000.00,1.00 +0044,+019.60,+00.00,01.00,000.00,1.00 +0045,+020.50,+00.00,01.00,000.00,1.00 +0046,+021.40,+00.00,01.00,000.00,1.00 +0047,+022.30,+00.00,01.00,000.00,1.00 +0048,+023.20,+00.00,01.00,000.00,1.00 +0049,+024.10,+00.00,01.00,000.00,1.00 +0050,+025.00,+00.00,01.00,000.00,1.00 +0051,+025.90,+00.00,01.00,000.00,1.00 +0052,+026.80,+00.00,01.00,000.00,1.00 +0053,+027.70,+00.00,01.00,000.00,1.00 +0054,+028.60,+00.00,01.00,000.00,1.00 +0055,+029.50,+00.00,01.00,000.00,1.00 +0056,+030.40,+00.00,01.00,000.00,1.00 +0057,+031.30,+00.00,01.00,000.00,1.00 +0058,+032.20,+00.00,01.00,000.00,1.00 +0059,+033.10,+00.00,01.00,000.00,1.00 +0060,+034.00,+00.00,01.00,000.00,1.00 +0061,+034.90,+00.00,01.00,000.00,1.00 +0062,+035.80,+00.00,01.00,000.00,1.00 +0063,+036.70,+00.00,01.00,000.00,1.00 +0064,+037.60,+00.00,01.00,000.00,1.00 +0065,+038.50,+00.00,01.00,000.00,1.00 +0066,+039.40,+00.00,01.00,000.00,1.00 +0067,+040.30,+00.00,01.00,000.00,1.00 +0068,+041.20,+00.00,01.00,000.00,1.00 +0069,+042.10,+00.00,01.00,000.00,1.00 +0070,+043.00,+00.00,01.00,000.00,1.00 +0071,+043.90,+00.00,01.00,000.00,1.00 +0072,+044.80,+00.00,01.00,000.00,1.00 +0073,+045.70,+00.00,01.00,000.00,1.00 +0074,+046.60,+00.00,01.00,000.00,1.00 +0075,+047.50,+00.00,01.00,000.00,1.00 +0076,+048.40,+00.00,01.00,000.00,1.00 +0077,+049.30,+00.00,01.00,000.00,1.00 +0078,+050.20,+00.00,01.00,000.00,1.00 +0079,+051.10,+00.00,01.00,000.00,1.00 +0080,+052.00,+00.00,01.00,000.00,1.00 +0081,+052.90,+00.00,01.00,000.00,1.00 +0082,+053.80,+00.00,01.00,000.00,1.00 +0083,+054.70,+00.00,01.00,000.00,1.00 +0084,+055.60,+00.00,01.00,000.00,1.00 +0085,+056.50,+00.00,01.00,000.00,1.00 +0086,+057.40,+00.00,01.00,000.00,1.00 +0087,+058.30,+00.00,01.00,000.00,1.00 +0088,+059.20,+00.00,01.00,000.00,1.00 +0089,+060.10,+00.00,01.00,000.00,1.00 +0090,+061.00,+00.00,01.00,000.00,1.00 +0091,+061.90,+00.00,01.00,000.00,1.00 +0092,+062.80,+00.00,01.00,000.00,1.00 +0093,+063.70,+00.00,01.00,000.00,1.00 +0094,+064.60,+00.00,01.00,000.00,1.00 +0095,+065.50,+00.00,01.00,000.00,1.00 +0096,+066.40,+00.00,01.00,000.00,1.00 +0097,+067.30,+00.00,01.00,000.00,1.00 +0098,+068.20,+00.00,01.00,000.00,1.00 +0099,+069.10,+00.00,01.00,000.00,1.00 +0100,+070.00,+00.00,01.00,000.00,1.00 +0101,+070.90,+00.00,01.00,000.00,1.00 +0102,+071.80,+00.00,01.00,000.00,1.00 +0103,+072.70,+00.00,01.00,000.00,1.00 +0104,+073.60,+00.00,01.00,000.00,1.00 +0105,+074.50,+00.00,01.00,000.00,1.00 +0106,+075.40,+00.00,01.00,000.00,1.00 +0107,+076.30,+00.00,01.00,000.00,1.00 +0108,+077.20,+00.00,01.00,000.00,1.00 +0109,+078.10,+00.00,01.00,000.00,1.00 +0110,+079.00,+00.00,01.00,000.00,1.00 +0111,+079.90,+00.00,01.00,000.00,1.00 +0112,+080.80,+00.00,01.00,000.00,1.00 +0113,+081.70,+00.00,01.00,000.00,1.00 +0114,+082.60,+00.00,01.00,000.00,1.00 +0115,+083.50,+00.00,01.00,000.00,1.00 +0116,+084.40,+00.00,01.00,000.00,1.00 +0117,+085.30,+00.00,01.00,000.00,1.00 +0118,+086.20,+00.00,01.00,000.00,1.00 +0119,+087.10,+00.00,01.00,000.00,1.00 +0120,+088.00,+00.00,01.00,000.00,1.00 +0121,+088.90,+00.00,01.00,000.00,1.00 +0122,+089.80,+00.00,01.00,000.00,1.00 +0123,+090.70,+00.00,01.00,000.00,1.00 +0124,+091.60,+00.00,01.00,000.00,1.00 +0125,+092.50,+00.00,01.00,000.00,1.00 +0126,+093.40,+00.00,01.00,000.00,1.00 +0127,+094.30,+00.00,01.00,000.00,1.00 +0128,+095.20,+00.00,01.00,000.00,1.00 +0129,+096.10,+00.00,01.00,000.00,1.00 +0130,+097.00,+00.00,01.00,000.00,1.00 +0131,+097.90,+00.00,01.00,000.00,1.00 +0132,+098.80,+00.00,01.00,000.00,1.00 +0133,+099.70,+00.00,01.00,000.00,1.00 +0134,+100.60,+00.00,01.00,000.00,1.00 +0135,+101.50,+00.00,01.00,000.00,1.00 +0136,+102.40,+00.00,01.00,000.00,1.00 +0137,+103.30,+00.00,01.00,000.00,1.00 +0138,+104.20,+00.00,01.00,000.00,1.00 +0139,+105.10,+00.00,01.00,000.00,1.00 +0140,+106.00,+00.00,01.00,000.00,1.00 +0141,+106.90,+00.00,01.00,000.00,1.00 +0142,+107.80,+00.00,01.00,000.00,1.00 +0143,+108.70,+00.00,01.00,000.00,1.00 +0144,+109.60,+00.00,01.00,000.00,1.00 +0145,+110.50,+00.00,01.00,000.00,1.00 +0146,+111.40,+00.00,01.00,000.00,1.00 +0147,+112.30,+00.00,01.00,000.00,1.00 +0148,+113.20,+00.00,01.00,000.00,1.00 +0149,+114.10,+00.00,01.00,000.00,1.00 +0150,+115.00,+00.00,01.00,000.00,1.00 +0151,+115.90,+00.00,01.00,000.00,1.00 +0152,+116.80,+00.00,01.00,000.00,1.00 +0153,+117.70,+00.00,01.00,000.00,1.00 +0154,+118.60,+00.00,01.00,000.00,1.00 +0155,+119.50,+00.00,01.00,000.00,1.00 +0156,+120.40,+00.00,01.00,000.00,1.00 +0157,+121.30,+00.00,01.00,000.00,1.00 +0158,+122.20,+00.00,01.00,000.00,1.00 +0159,+123.10,+00.00,01.00,000.00,1.00 +0160,+124.00,+00.00,01.00,000.00,1.00 +0161,+124.90,+00.00,01.00,000.00,1.00 +0162,+125.80,+00.00,01.00,000.00,1.00 +0163,+126.70,+00.00,01.00,000.00,1.00 +0164,+127.60,+00.00,01.00,000.00,1.00 +0165,+128.50,+00.00,01.00,000.00,1.00 +0166,+129.40,+00.00,01.00,000.00,1.00 +0167,+130.30,+00.00,01.00,000.00,1.00 +0168,+131.20,+00.00,01.00,000.00,1.00 +0169,+132.10,+00.00,01.00,000.00,1.00 +0170,+133.00,+00.00,01.00,000.00,1.00 +0171,+133.90,+00.00,01.00,000.00,1.00 +0172,+134.80,+00.00,01.00,000.00,1.00 +0173,+135.70,+00.00,01.00,000.00,1.00 +0174,+136.60,+00.00,01.00,000.00,1.00 +0175,+137.50,+00.00,01.00,000.00,1.00 +0176,+138.40,+00.00,01.00,000.00,1.00 +0177,+139.30,+00.00,01.00,000.00,1.00 +0178,+140.20,+00.00,01.00,000.00,1.00 +0179,+141.10,+00.00,01.00,000.00,1.00 +0180,+142.00,+00.00,01.00,000.00,1.00 +0181,+142.90,+00.00,01.00,000.00,1.00 +0182,+143.80,+00.00,01.00,000.00,1.00 +0183,+144.70,+00.00,01.00,000.00,1.00 +0184,+145.60,+00.00,01.00,000.00,1.00 +0185,+146.50,+00.00,01.00,000.00,1.00 +0186,+147.40,+00.00,01.00,000.00,1.00 +0187,+148.30,+00.00,01.00,000.00,1.00 +0188,+149.20,+00.00,01.00,000.00,1.00 +0189,+150.10,+00.00,01.00,000.00,1.00 +0190,+151.00,+00.00,01.00,000.00,1.00 +0191,+151.90,+00.00,01.00,000.00,1.00 +0192,+152.80,+00.00,01.00,000.00,1.00 +0193,+153.70,+00.00,01.00,000.00,1.00 +0194,+154.60,+00.00,01.00,000.00,1.00 +0195,+155.50,+00.00,01.00,000.00,1.00 +0196,+156.40,+00.00,01.00,000.00,1.00 +0197,+157.30,+00.00,01.00,000.00,1.00 +0198,+158.20,+00.00,01.00,000.00,1.00 +0199,+159.10,+00.00,01.00,000.00,1.00 +0200,+160.00,+00.00,01.00,000.00,1.00 +0201,+160.90,+00.00,01.00,000.00,1.00 +0202,+161.80,+00.00,01.00,000.00,1.00 +0203,+162.70,+00.00,01.00,000.00,1.00 +0204,+163.60,+00.00,01.00,000.00,1.00 +0205,+164.50,+00.00,01.00,000.00,1.00 +0206,+165.40,+00.00,01.00,000.00,1.00 +0207,+166.30,+00.00,01.00,000.00,1.00 +0208,+167.20,+00.00,01.00,000.00,1.00 +0209,+168.10,+00.00,01.00,000.00,1.00 +0210,+169.00,+00.00,01.00,000.00,1.00 +0211,+169.90,+00.00,01.00,000.00,1.00 +0212,+170.80,+00.00,01.00,000.00,1.00 +0213,+171.70,+00.00,01.00,000.00,1.00 +0214,+172.60,+00.00,01.00,000.00,1.00 +0215,+173.50,+00.00,01.00,000.00,1.00 +0216,+174.40,+00.00,01.00,000.00,1.00 +0217,+175.30,+00.00,01.00,000.00,1.00 +0218,+176.20,+00.00,01.00,000.00,1.00 +0219,+177.10,+00.00,01.00,000.00,1.00 +0220,+178.00,+00.00,01.00,000.00,1.00 +0221,+178.90,+00.00,01.00,000.00,1.00 +0222,+179.80,+00.00,01.00,000.00,1.00 +0223,-179.30,+00.00,01.00,000.00,1.00 +0224,-178.40,+00.00,01.00,000.00,1.00 +0225,-177.50,+00.00,01.00,000.00,1.00 +0226,-176.60,+00.00,01.00,000.00,1.00 +0227,-175.70,+00.00,01.00,000.00,1.00 +0228,-174.80,+00.00,01.00,000.00,1.00 +0229,-173.90,+00.00,01.00,000.00,1.00 +0230,-173.00,+00.00,01.00,000.00,1.00 +0231,-172.10,+00.00,01.00,000.00,1.00 +0232,-171.20,+00.00,01.00,000.00,1.00 +0233,-170.30,+00.00,01.00,000.00,1.00 +0234,-169.40,+00.00,01.00,000.00,1.00 +0235,-168.50,+00.00,01.00,000.00,1.00 +0236,-167.60,+00.00,01.00,000.00,1.00 +0237,-166.70,+00.00,01.00,000.00,1.00 +0238,-165.80,+00.00,01.00,000.00,1.00 +0239,-164.90,+00.00,01.00,000.00,1.00 +0240,-164.00,+00.00,01.00,000.00,1.00 +0241,-163.10,+00.00,01.00,000.00,1.00 +0242,-162.20,+00.00,01.00,000.00,1.00 +0243,-161.30,+00.00,01.00,000.00,1.00 +0244,-160.40,+00.00,01.00,000.00,1.00 +0245,-159.50,+00.00,01.00,000.00,1.00 +0246,-158.60,+00.00,01.00,000.00,1.00 +0247,-157.70,+00.00,01.00,000.00,1.00 +0248,-156.80,+00.00,01.00,000.00,1.00 +0249,-155.90,+00.00,01.00,000.00,1.00 +0250,-155.00,+00.00,01.00,000.00,1.00 +0251,-154.10,+00.00,01.00,000.00,1.00 +0252,-153.20,+00.00,01.00,000.00,1.00 +0253,-152.30,+00.00,01.00,000.00,1.00 +0254,-151.40,+00.00,01.00,000.00,1.00 +0255,-150.50,+00.00,01.00,000.00,1.00 +0256,-149.60,+00.00,01.00,000.00,1.00 +0257,-148.70,+00.00,01.00,000.00,1.00 +0258,-147.80,+00.00,01.00,000.00,1.00 +0259,-146.90,+00.00,01.00,000.00,1.00 +0260,-146.00,+00.00,01.00,000.00,1.00 +0261,-145.10,+00.00,01.00,000.00,1.00 +0262,-144.20,+00.00,01.00,000.00,1.00 +0263,-143.30,+00.00,01.00,000.00,1.00 +0264,-142.40,+00.00,01.00,000.00,1.00 +0265,-141.50,+00.00,01.00,000.00,1.00 +0266,-140.60,+00.00,01.00,000.00,1.00 +0267,-139.70,+00.00,01.00,000.00,1.00 +0268,-138.80,+00.00,01.00,000.00,1.00 +0269,-137.90,+00.00,01.00,000.00,1.00 +0270,-137.00,+00.00,01.00,000.00,1.00 +0271,-136.10,+00.00,01.00,000.00,1.00 +0272,-135.20,+00.00,01.00,000.00,1.00 +0273,-134.30,+00.00,01.00,000.00,1.00 +0274,-133.40,+00.00,01.00,000.00,1.00 +0275,-132.50,+00.00,01.00,000.00,1.00 +0276,-131.60,+00.00,01.00,000.00,1.00 +0277,-130.70,+00.00,01.00,000.00,1.00 +0278,-129.80,+00.00,01.00,000.00,1.00 +0279,-128.90,+00.00,01.00,000.00,1.00 +0280,-128.00,+00.00,01.00,000.00,1.00 +0281,-127.10,+00.00,01.00,000.00,1.00 +0282,-126.20,+00.00,01.00,000.00,1.00 +0283,-125.30,+00.00,01.00,000.00,1.00 +0284,-124.40,+00.00,01.00,000.00,1.00 +0285,-123.50,+00.00,01.00,000.00,1.00 +0286,-122.60,+00.00,01.00,000.00,1.00 +0287,-121.70,+00.00,01.00,000.00,1.00 +0288,-120.80,+00.00,01.00,000.00,1.00 +0289,-119.90,+00.00,01.00,000.00,1.00 +0290,-119.00,+00.00,01.00,000.00,1.00 +0291,-118.10,+00.00,01.00,000.00,1.00 +0292,-117.20,+00.00,01.00,000.00,1.00 +0293,-116.30,+00.00,01.00,000.00,1.00 +0294,-115.40,+00.00,01.00,000.00,1.00 +0295,-114.50,+00.00,01.00,000.00,1.00 +0296,-113.60,+00.00,01.00,000.00,1.00 +0297,-112.70,+00.00,01.00,000.00,1.00 +0298,-111.80,+00.00,01.00,000.00,1.00 +0299,-110.90,+00.00,01.00,000.00,1.00 +0300,-110.00,+00.00,01.00,000.00,1.00 +0301,-109.10,+00.00,01.00,000.00,1.00 +0302,-108.20,+00.00,01.00,000.00,1.00 +0303,-107.30,+00.00,01.00,000.00,1.00 +0304,-106.40,+00.00,01.00,000.00,1.00 +0305,-105.50,+00.00,01.00,000.00,1.00 +0306,-104.60,+00.00,01.00,000.00,1.00 +0307,-103.70,+00.00,01.00,000.00,1.00 +0308,-102.80,+00.00,01.00,000.00,1.00 +0309,-101.90,+00.00,01.00,000.00,1.00 +0310,-101.00,+00.00,01.00,000.00,1.00 +0311,-100.10,+00.00,01.00,000.00,1.00 +0312,-099.20,+00.00,01.00,000.00,1.00 +0313,-098.30,+00.00,01.00,000.00,1.00 +0314,-097.40,+00.00,01.00,000.00,1.00 +0315,-096.50,+00.00,01.00,000.00,1.00 +0316,-095.60,+00.00,01.00,000.00,1.00 +0317,-094.70,+00.00,01.00,000.00,1.00 +0318,-093.80,+00.00,01.00,000.00,1.00 +0319,-092.90,+00.00,01.00,000.00,1.00 +0320,-092.00,+00.00,01.00,000.00,1.00 +0321,-091.10,+00.00,01.00,000.00,1.00 +0322,-090.20,+00.00,01.00,000.00,1.00 +0323,-089.30,+00.00,01.00,000.00,1.00 +0324,-088.40,+00.00,01.00,000.00,1.00 +0325,-087.50,+00.00,01.00,000.00,1.00 +0326,-086.60,+00.00,01.00,000.00,1.00 +0327,-085.70,+00.00,01.00,000.00,1.00 +0328,-084.80,+00.00,01.00,000.00,1.00 +0329,-083.90,+00.00,01.00,000.00,1.00 +0330,-083.00,+00.00,01.00,000.00,1.00 +0331,-082.10,+00.00,01.00,000.00,1.00 +0332,-081.20,+00.00,01.00,000.00,1.00 +0333,-080.30,+00.00,01.00,000.00,1.00 +0334,-079.40,+00.00,01.00,000.00,1.00 +0335,-078.50,+00.00,01.00,000.00,1.00 +0336,-077.60,+00.00,01.00,000.00,1.00 +0337,-076.70,+00.00,01.00,000.00,1.00 +0338,-075.80,+00.00,01.00,000.00,1.00 +0339,-074.90,+00.00,01.00,000.00,1.00 +0340,-074.00,+00.00,01.00,000.00,1.00 +0341,-073.10,+00.00,01.00,000.00,1.00 +0342,-072.20,+00.00,01.00,000.00,1.00 +0343,-071.30,+00.00,01.00,000.00,1.00 +0344,-070.40,+00.00,01.00,000.00,1.00 +0345,-069.50,+00.00,01.00,000.00,1.00 +0346,-068.60,+00.00,01.00,000.00,1.00 +0347,-067.70,+00.00,01.00,000.00,1.00 +0348,-066.80,+00.00,01.00,000.00,1.00 +0349,-065.90,+00.00,01.00,000.00,1.00 +0350,-065.00,+00.00,01.00,000.00,1.00 +0351,-064.10,+00.00,01.00,000.00,1.00 +0352,-063.20,+00.00,01.00,000.00,1.00 +0353,-062.30,+00.00,01.00,000.00,1.00 +0354,-061.40,+00.00,01.00,000.00,1.00 +0355,-060.50,+00.00,01.00,000.00,1.00 +0356,-059.60,+00.00,01.00,000.00,1.00 +0357,-058.70,+00.00,01.00,000.00,1.00 +0358,-057.80,+00.00,01.00,000.00,1.00 +0359,-056.90,+00.00,01.00,000.00,1.00 +0360,-056.00,+00.00,01.00,000.00,1.00 +0361,-055.10,+00.00,01.00,000.00,1.00 +0362,-054.20,+00.00,01.00,000.00,1.00 +0363,-053.30,+00.00,01.00,000.00,1.00 +0364,-052.40,+00.00,01.00,000.00,1.00 +0365,-051.50,+00.00,01.00,000.00,1.00 +0366,-050.60,+00.00,01.00,000.00,1.00 +0367,-049.70,+00.00,01.00,000.00,1.00 +0368,-048.80,+00.00,01.00,000.00,1.00 +0369,-047.90,+00.00,01.00,000.00,1.00 +0370,-047.00,+00.00,01.00,000.00,1.00 +0371,-046.10,+00.00,01.00,000.00,1.00 +0372,-045.20,+00.00,01.00,000.00,1.00 +0373,-044.30,+00.00,01.00,000.00,1.00 +0374,-043.40,+00.00,01.00,000.00,1.00 +0375,-042.50,+00.00,01.00,000.00,1.00 +0376,-041.60,+00.00,01.00,000.00,1.00 +0377,-040.70,+00.00,01.00,000.00,1.00 +0378,-039.80,+00.00,01.00,000.00,1.00 +0379,-038.90,+00.00,01.00,000.00,1.00 +0380,-038.00,+00.00,01.00,000.00,1.00 +0381,-037.10,+00.00,01.00,000.00,1.00 +0382,-036.20,+00.00,01.00,000.00,1.00 +0383,-035.30,+00.00,01.00,000.00,1.00 +0384,-034.40,+00.00,01.00,000.00,1.00 +0385,-033.50,+00.00,01.00,000.00,1.00 +0386,-032.60,+00.00,01.00,000.00,1.00 +0387,-031.70,+00.00,01.00,000.00,1.00 +0388,-030.80,+00.00,01.00,000.00,1.00 +0389,-029.90,+00.00,01.00,000.00,1.00 +0390,-029.00,+00.00,01.00,000.00,1.00 +0391,-028.10,+00.00,01.00,000.00,1.00 +0392,-027.20,+00.00,01.00,000.00,1.00 +0393,-026.30,+00.00,01.00,000.00,1.00 +0394,-025.40,+00.00,01.00,000.00,1.00 +0395,-024.50,+00.00,01.00,000.00,1.00 +0396,-023.60,+00.00,01.00,000.00,1.00 +0397,-022.70,+00.00,01.00,000.00,1.00 +0398,-021.80,+00.00,01.00,000.00,1.00 +0399,-020.90,+00.00,01.00,000.00,1.00 +0400,-020.00,+00.00,01.00,000.00,1.00 +0401,-019.10,+00.00,01.00,000.00,1.00 +0402,-018.20,+00.00,01.00,000.00,1.00 +0403,-017.30,+00.00,01.00,000.00,1.00 +0404,-016.40,+00.00,01.00,000.00,1.00 +0405,-015.50,+00.00,01.00,000.00,1.00 +0406,-014.60,+00.00,01.00,000.00,1.00 +0407,-013.70,+00.00,01.00,000.00,1.00 +0408,-012.80,+00.00,01.00,000.00,1.00 +0409,-011.90,+00.00,01.00,000.00,1.00 +0410,-011.00,+00.00,01.00,000.00,1.00 +0411,-010.10,+00.00,01.00,000.00,1.00 +0412,-009.20,+00.00,01.00,000.00,1.00 +0413,-008.30,+00.00,01.00,000.00,1.00 +0414,-007.40,+00.00,01.00,000.00,1.00 +0415,-006.50,+00.00,01.00,000.00,1.00 +0416,-005.60,+00.00,01.00,000.00,1.00 +0417,-004.70,+00.00,01.00,000.00,1.00 +0418,-003.80,+00.00,01.00,000.00,1.00 +0419,-002.90,+00.00,01.00,000.00,1.00 +0420,-002.00,+00.00,01.00,000.00,1.00 +0421,-001.10,+00.00,01.00,000.00,1.00 +0422,-000.20,+00.00,01.00,000.00,1.00 +0423,+000.70,+00.00,01.00,000.00,1.00 +0424,+001.60,+00.00,01.00,000.00,1.00 +0425,+002.50,+00.00,01.00,000.00,1.00 +0426,+003.40,+00.00,01.00,000.00,1.00 +0427,+004.30,+00.00,01.00,000.00,1.00 +0428,+005.20,+00.00,01.00,000.00,1.00 +0429,+006.10,+00.00,01.00,000.00,1.00 +0430,+007.00,+00.00,01.00,000.00,1.00 +0431,+007.90,+00.00,01.00,000.00,1.00 +0432,+008.80,+00.00,01.00,000.00,1.00 +0433,+009.70,+00.00,01.00,000.00,1.00 +0434,+010.60,+00.00,01.00,000.00,1.00 +0435,+011.50,+00.00,01.00,000.00,1.00 +0436,+012.40,+00.00,01.00,000.00,1.00 +0437,+013.30,+00.00,01.00,000.00,1.00 +0438,+014.20,+00.00,01.00,000.00,1.00 +0439,+015.10,+00.00,01.00,000.00,1.00 +0440,+016.00,+00.00,01.00,000.00,1.00 +0441,+016.90,+00.00,01.00,000.00,1.00 +0442,+017.80,+00.00,01.00,000.00,1.00 +0443,+018.70,+00.00,01.00,000.00,1.00 +0444,+019.60,+00.00,01.00,000.00,1.00 +0445,+020.50,+00.00,01.00,000.00,1.00 +0446,+021.40,+00.00,01.00,000.00,1.00 +0447,+022.30,+00.00,01.00,000.00,1.00 +0448,+023.20,+00.00,01.00,000.00,1.00 +0449,+024.10,+00.00,01.00,000.00,1.00 +0450,+025.00,+00.00,01.00,000.00,1.00 +0451,+025.90,+00.00,01.00,000.00,1.00 +0452,+026.80,+00.00,01.00,000.00,1.00 +0453,+027.70,+00.00,01.00,000.00,1.00 +0454,+028.60,+00.00,01.00,000.00,1.00 +0455,+029.50,+00.00,01.00,000.00,1.00 +0456,+030.40,+00.00,01.00,000.00,1.00 +0457,+031.30,+00.00,01.00,000.00,1.00 +0458,+032.20,+00.00,01.00,000.00,1.00 +0459,+033.10,+00.00,01.00,000.00,1.00 +0460,+034.00,+00.00,01.00,000.00,1.00 +0461,+034.90,+00.00,01.00,000.00,1.00 +0462,+035.80,+00.00,01.00,000.00,1.00 +0463,+036.70,+00.00,01.00,000.00,1.00 +0464,+037.60,+00.00,01.00,000.00,1.00 +0465,+038.50,+00.00,01.00,000.00,1.00 +0466,+039.40,+00.00,01.00,000.00,1.00 +0467,+040.30,+00.00,01.00,000.00,1.00 +0468,+041.20,+00.00,01.00,000.00,1.00 +0469,+042.10,+00.00,01.00,000.00,1.00 +0470,+043.00,+00.00,01.00,000.00,1.00 +0471,+043.90,+00.00,01.00,000.00,1.00 +0472,+044.80,+00.00,01.00,000.00,1.00 +0473,+045.70,+00.00,01.00,000.00,1.00 +0474,+046.60,+00.00,01.00,000.00,1.00 +0475,+047.50,+00.00,01.00,000.00,1.00 +0476,+048.40,+00.00,01.00,000.00,1.00 +0477,+049.30,+00.00,01.00,000.00,1.00 +0478,+050.20,+00.00,01.00,000.00,1.00 +0479,+051.10,+00.00,01.00,000.00,1.00 +0480,+052.00,+00.00,01.00,000.00,1.00 +0481,+052.90,+00.00,01.00,000.00,1.00 +0482,+053.80,+00.00,01.00,000.00,1.00 +0483,+054.70,+00.00,01.00,000.00,1.00 +0484,+055.60,+00.00,01.00,000.00,1.00 +0485,+056.50,+00.00,01.00,000.00,1.00 +0486,+057.40,+00.00,01.00,000.00,1.00 +0487,+058.30,+00.00,01.00,000.00,1.00 +0488,+059.20,+00.00,01.00,000.00,1.00 +0489,+060.10,+00.00,01.00,000.00,1.00 +0490,+061.00,+00.00,01.00,000.00,1.00 +0491,+061.90,+00.00,01.00,000.00,1.00 +0492,+062.80,+00.00,01.00,000.00,1.00 +0493,+063.70,+00.00,01.00,000.00,1.00 +0494,+064.60,+00.00,01.00,000.00,1.00 +0495,+065.50,+00.00,01.00,000.00,1.00 +0496,+066.40,+00.00,01.00,000.00,1.00 +0497,+067.30,+00.00,01.00,000.00,1.00 +0498,+068.20,+00.00,01.00,000.00,1.00 +0499,+069.10,+00.00,01.00,000.00,1.00 +0500,+070.00,+00.00,01.00,000.00,1.00 +0501,+070.90,+00.00,01.00,000.00,1.00 +0502,+071.80,+00.00,01.00,000.00,1.00 +0503,+072.70,+00.00,01.00,000.00,1.00 +0504,+073.60,+00.00,01.00,000.00,1.00 +0505,+074.50,+00.00,01.00,000.00,1.00 +0506,+075.40,+00.00,01.00,000.00,1.00 +0507,+076.30,+00.00,01.00,000.00,1.00 +0508,+077.20,+00.00,01.00,000.00,1.00 +0509,+078.10,+00.00,01.00,000.00,1.00 +0510,+079.00,+00.00,01.00,000.00,1.00 +0511,+079.90,+00.00,01.00,000.00,1.00 +0512,+080.80,+00.00,01.00,000.00,1.00 +0513,+081.70,+00.00,01.00,000.00,1.00 +0514,+082.60,+00.00,01.00,000.00,1.00 +0515,+083.50,+00.00,01.00,000.00,1.00 +0516,+084.40,+00.00,01.00,000.00,1.00 +0517,+085.30,+00.00,01.00,000.00,1.00 +0518,+086.20,+00.00,01.00,000.00,1.00 +0519,+087.10,+00.00,01.00,000.00,1.00 +0520,+088.00,+00.00,01.00,000.00,1.00 +0521,+088.90,+00.00,01.00,000.00,1.00 +0522,+089.80,+00.00,01.00,000.00,1.00 +0523,+090.70,+00.00,01.00,000.00,1.00 +0524,+091.60,+00.00,01.00,000.00,1.00 +0525,+092.50,+00.00,01.00,000.00,1.00 +0526,+093.40,+00.00,01.00,000.00,1.00 +0527,+094.30,+00.00,01.00,000.00,1.00 +0528,+095.20,+00.00,01.00,000.00,1.00 +0529,+096.10,+00.00,01.00,000.00,1.00 +0530,+097.00,+00.00,01.00,000.00,1.00 +0531,+097.90,+00.00,01.00,000.00,1.00 +0532,+098.80,+00.00,01.00,000.00,1.00 +0533,+099.70,+00.00,01.00,000.00,1.00 +0534,+100.60,+00.00,01.00,000.00,1.00 +0535,+101.50,+00.00,01.00,000.00,1.00 +0536,+102.40,+00.00,01.00,000.00,1.00 +0537,+103.30,+00.00,01.00,000.00,1.00 +0538,+104.20,+00.00,01.00,000.00,1.00 +0539,+105.10,+00.00,01.00,000.00,1.00 +0540,+106.00,+00.00,01.00,000.00,1.00 +0541,+106.90,+00.00,01.00,000.00,1.00 +0542,+107.80,+00.00,01.00,000.00,1.00 +0543,+108.70,+00.00,01.00,000.00,1.00 +0544,+109.60,+00.00,01.00,000.00,1.00 +0545,+110.50,+00.00,01.00,000.00,1.00 +0546,+111.40,+00.00,01.00,000.00,1.00 +0547,+112.30,+00.00,01.00,000.00,1.00 +0548,+113.20,+00.00,01.00,000.00,1.00 +0549,+114.10,+00.00,01.00,000.00,1.00 +0550,+115.00,+00.00,01.00,000.00,1.00 +0551,+115.90,+00.00,01.00,000.00,1.00 +0552,+116.80,+00.00,01.00,000.00,1.00 +0553,+117.70,+00.00,01.00,000.00,1.00 +0554,+118.60,+00.00,01.00,000.00,1.00 +0555,+119.50,+00.00,01.00,000.00,1.00 +0556,+120.40,+00.00,01.00,000.00,1.00 +0557,+121.30,+00.00,01.00,000.00,1.00 +0558,+122.20,+00.00,01.00,000.00,1.00 +0559,+123.10,+00.00,01.00,000.00,1.00 +0560,+124.00,+00.00,01.00,000.00,1.00 +0561,+124.90,+00.00,01.00,000.00,1.00 +0562,+125.80,+00.00,01.00,000.00,1.00 +0563,+126.70,+00.00,01.00,000.00,1.00 +0564,+127.60,+00.00,01.00,000.00,1.00 +0565,+128.50,+00.00,01.00,000.00,1.00 +0566,+129.40,+00.00,01.00,000.00,1.00 +0567,+130.30,+00.00,01.00,000.00,1.00 +0568,+131.20,+00.00,01.00,000.00,1.00 +0569,+132.10,+00.00,01.00,000.00,1.00 +0570,+133.00,+00.00,01.00,000.00,1.00 +0571,+133.90,+00.00,01.00,000.00,1.00 +0572,+134.80,+00.00,01.00,000.00,1.00 +0573,+135.70,+00.00,01.00,000.00,1.00 +0574,+136.60,+00.00,01.00,000.00,1.00 +0575,+137.50,+00.00,01.00,000.00,1.00 +0576,+138.40,+00.00,01.00,000.00,1.00 +0577,+139.30,+00.00,01.00,000.00,1.00 +0578,+140.20,+00.00,01.00,000.00,1.00 +0579,+141.10,+00.00,01.00,000.00,1.00 +0580,+142.00,+00.00,01.00,000.00,1.00 +0581,+142.90,+00.00,01.00,000.00,1.00 +0582,+143.80,+00.00,01.00,000.00,1.00 +0583,+144.70,+00.00,01.00,000.00,1.00 +0584,+145.60,+00.00,01.00,000.00,1.00 +0585,+146.50,+00.00,01.00,000.00,1.00 +0586,+147.40,+00.00,01.00,000.00,1.00 +0587,+148.30,+00.00,01.00,000.00,1.00 +0588,+149.20,+00.00,01.00,000.00,1.00 +0589,+150.10,+00.00,01.00,000.00,1.00 +0590,+151.00,+00.00,01.00,000.00,1.00 +0591,+151.90,+00.00,01.00,000.00,1.00 +0592,+152.80,+00.00,01.00,000.00,1.00 +0593,+153.70,+00.00,01.00,000.00,1.00 +0594,+154.60,+00.00,01.00,000.00,1.00 +0595,+155.50,+00.00,01.00,000.00,1.00 +0596,+156.40,+00.00,01.00,000.00,1.00 +0597,+157.30,+00.00,01.00,000.00,1.00 +0598,+158.20,+00.00,01.00,000.00,1.00 +0599,+159.10,+00.00,01.00,000.00,1.00 +0600,+160.00,+00.00,01.00,000.00,1.00 +0601,+160.90,+00.00,01.00,000.00,1.00 +0602,+161.80,+00.00,01.00,000.00,1.00 +0603,+162.70,+00.00,01.00,000.00,1.00 +0604,+163.60,+00.00,01.00,000.00,1.00 +0605,+164.50,+00.00,01.00,000.00,1.00 +0606,+165.40,+00.00,01.00,000.00,1.00 +0607,+166.30,+00.00,01.00,000.00,1.00 +0608,+167.20,+00.00,01.00,000.00,1.00 +0609,+168.10,+00.00,01.00,000.00,1.00 +0610,+169.00,+00.00,01.00,000.00,1.00 +0611,+169.90,+00.00,01.00,000.00,1.00 +0612,+170.80,+00.00,01.00,000.00,1.00 +0613,+171.70,+00.00,01.00,000.00,1.00 +0614,+172.60,+00.00,01.00,000.00,1.00 +0615,+173.50,+00.00,01.00,000.00,1.00 +0616,+174.40,+00.00,01.00,000.00,1.00 +0617,+175.30,+00.00,01.00,000.00,1.00 +0618,+176.20,+00.00,01.00,000.00,1.00 +0619,+177.10,+00.00,01.00,000.00,1.00 +0620,+178.00,+00.00,01.00,000.00,1.00 +0621,+178.90,+00.00,01.00,000.00,1.00 +0622,+179.80,+00.00,01.00,000.00,1.00 +0623,-179.30,+00.00,01.00,000.00,1.00 +0624,-178.40,+00.00,01.00,000.00,1.00 +0625,-177.50,+00.00,01.00,000.00,1.00 +0626,-176.60,+00.00,01.00,000.00,1.00 +0627,-175.70,+00.00,01.00,000.00,1.00 +0628,-174.80,+00.00,01.00,000.00,1.00 +0629,-173.90,+00.00,01.00,000.00,1.00 +0630,-173.00,+00.00,01.00,000.00,1.00 +0631,-172.10,+00.00,01.00,000.00,1.00 +0632,-171.20,+00.00,01.00,000.00,1.00 +0633,-170.30,+00.00,01.00,000.00,1.00 +0634,-169.40,+00.00,01.00,000.00,1.00 +0635,-168.50,+00.00,01.00,000.00,1.00 +0636,-167.60,+00.00,01.00,000.00,1.00 +0637,-166.70,+00.00,01.00,000.00,1.00 +0638,-165.80,+00.00,01.00,000.00,1.00 +0639,-164.90,+00.00,01.00,000.00,1.00 +0640,-164.00,+00.00,01.00,000.00,1.00 +0641,-163.10,+00.00,01.00,000.00,1.00 +0642,-162.20,+00.00,01.00,000.00,1.00 +0643,-161.30,+00.00,01.00,000.00,1.00 +0644,-160.40,+00.00,01.00,000.00,1.00 +0645,-159.50,+00.00,01.00,000.00,1.00 +0646,-158.60,+00.00,01.00,000.00,1.00 +0647,-157.70,+00.00,01.00,000.00,1.00 +0648,-156.80,+00.00,01.00,000.00,1.00 +0649,-155.90,+00.00,01.00,000.00,1.00 +0650,-155.00,+00.00,01.00,000.00,1.00 +0651,-154.10,+00.00,01.00,000.00,1.00 +0652,-153.20,+00.00,01.00,000.00,1.00 +0653,-152.30,+00.00,01.00,000.00,1.00 +0654,-151.40,+00.00,01.00,000.00,1.00 +0655,-150.50,+00.00,01.00,000.00,1.00 +0656,-149.60,+00.00,01.00,000.00,1.00 +0657,-148.70,+00.00,01.00,000.00,1.00 +0658,-147.80,+00.00,01.00,000.00,1.00 +0659,-146.90,+00.00,01.00,000.00,1.00 +0660,-146.00,+00.00,01.00,000.00,1.00 +0661,-145.10,+00.00,01.00,000.00,1.00 +0662,-144.20,+00.00,01.00,000.00,1.00 +0663,-143.30,+00.00,01.00,000.00,1.00 +0664,-142.40,+00.00,01.00,000.00,1.00 +0665,-141.50,+00.00,01.00,000.00,1.00 +0666,-140.60,+00.00,01.00,000.00,1.00 +0667,-139.70,+00.00,01.00,000.00,1.00 +0668,-138.80,+00.00,01.00,000.00,1.00 +0669,-137.90,+00.00,01.00,000.00,1.00 +0670,-137.00,+00.00,01.00,000.00,1.00 +0671,-136.10,+00.00,01.00,000.00,1.00 +0672,-135.20,+00.00,01.00,000.00,1.00 +0673,-134.30,+00.00,01.00,000.00,1.00 +0674,-133.40,+00.00,01.00,000.00,1.00 +0675,-132.50,+00.00,01.00,000.00,1.00 +0676,-131.60,+00.00,01.00,000.00,1.00 +0677,-130.70,+00.00,01.00,000.00,1.00 +0678,-129.80,+00.00,01.00,000.00,1.00 +0679,-128.90,+00.00,01.00,000.00,1.00 +0680,-128.00,+00.00,01.00,000.00,1.00 +0681,-127.10,+00.00,01.00,000.00,1.00 +0682,-126.20,+00.00,01.00,000.00,1.00 +0683,-125.30,+00.00,01.00,000.00,1.00 +0684,-124.40,+00.00,01.00,000.00,1.00 +0685,-123.50,+00.00,01.00,000.00,1.00 +0686,-122.60,+00.00,01.00,000.00,1.00 +0687,-121.70,+00.00,01.00,000.00,1.00 +0688,-120.80,+00.00,01.00,000.00,1.00 +0689,-119.90,+00.00,01.00,000.00,1.00 +0690,-119.00,+00.00,01.00,000.00,1.00 +0691,-118.10,+00.00,01.00,000.00,1.00 +0692,-117.20,+00.00,01.00,000.00,1.00 +0693,-116.30,+00.00,01.00,000.00,1.00 +0694,-115.40,+00.00,01.00,000.00,1.00 +0695,-114.50,+00.00,01.00,000.00,1.00 +0696,-113.60,+00.00,01.00,000.00,1.00 +0697,-112.70,+00.00,01.00,000.00,1.00 +0698,-111.80,+00.00,01.00,000.00,1.00 +0699,-110.90,+00.00,01.00,000.00,1.00 +0700,-110.00,+00.00,01.00,000.00,1.00 +0701,-109.10,+00.00,01.00,000.00,1.00 +0702,-108.20,+00.00,01.00,000.00,1.00 +0703,-107.30,+00.00,01.00,000.00,1.00 +0704,-106.40,+00.00,01.00,000.00,1.00 +0705,-105.50,+00.00,01.00,000.00,1.00 +0706,-104.60,+00.00,01.00,000.00,1.00 +0707,-103.70,+00.00,01.00,000.00,1.00 +0708,-102.80,+00.00,01.00,000.00,1.00 +0709,-101.90,+00.00,01.00,000.00,1.00 +0710,-101.00,+00.00,01.00,000.00,1.00 +0711,-100.10,+00.00,01.00,000.00,1.00 +0712,-099.20,+00.00,01.00,000.00,1.00 +0713,-098.30,+00.00,01.00,000.00,1.00 +0714,-097.40,+00.00,01.00,000.00,1.00 +0715,-096.50,+00.00,01.00,000.00,1.00 +0716,-095.60,+00.00,01.00,000.00,1.00 +0717,-094.70,+00.00,01.00,000.00,1.00 +0718,-093.80,+00.00,01.00,000.00,1.00 +0719,-092.90,+00.00,01.00,000.00,1.00 +0720,-092.00,+00.00,01.00,000.00,1.00 +0721,-091.10,+00.00,01.00,000.00,1.00 +0722,-090.20,+00.00,01.00,000.00,1.00 +0723,-089.30,+00.00,01.00,000.00,1.00 +0724,-088.40,+00.00,01.00,000.00,1.00 +0725,-087.50,+00.00,01.00,000.00,1.00 +0726,-086.60,+00.00,01.00,000.00,1.00 +0727,-085.70,+00.00,01.00,000.00,1.00 +0728,-084.80,+00.00,01.00,000.00,1.00 +0729,-083.90,+00.00,01.00,000.00,1.00 +0730,-083.00,+00.00,01.00,000.00,1.00 +0731,-082.10,+00.00,01.00,000.00,1.00 +0732,-081.20,+00.00,01.00,000.00,1.00 +0733,-080.30,+00.00,01.00,000.00,1.00 +0734,-079.40,+00.00,01.00,000.00,1.00 +0735,-078.50,+00.00,01.00,000.00,1.00 +0736,-077.60,+00.00,01.00,000.00,1.00 +0737,-076.70,+00.00,01.00,000.00,1.00 +0738,-075.80,+00.00,01.00,000.00,1.00 +0739,-074.90,+00.00,01.00,000.00,1.00 +0740,-074.00,+00.00,01.00,000.00,1.00 +0741,-073.10,+00.00,01.00,000.00,1.00 +0742,-072.20,+00.00,01.00,000.00,1.00 +0743,-071.30,+00.00,01.00,000.00,1.00 +0744,-070.40,+00.00,01.00,000.00,1.00 +0745,-069.50,+00.00,01.00,000.00,1.00 +0746,-068.60,+00.00,01.00,000.00,1.00 +0747,-067.70,+00.00,01.00,000.00,1.00 +0748,-066.80,+00.00,01.00,000.00,1.00 +0749,-065.90,+00.00,01.00,000.00,1.00 +0750,-065.00,+00.00,01.00,000.00,1.00 +0751,-064.10,+00.00,01.00,000.00,1.00 +0752,-063.20,+00.00,01.00,000.00,1.00 +0753,-062.30,+00.00,01.00,000.00,1.00 +0754,-061.40,+00.00,01.00,000.00,1.00 +0755,-060.50,+00.00,01.00,000.00,1.00 +0756,-059.60,+00.00,01.00,000.00,1.00 +0757,-058.70,+00.00,01.00,000.00,1.00 +0758,-057.80,+00.00,01.00,000.00,1.00 +0759,-056.90,+00.00,01.00,000.00,1.00 +0760,-056.00,+00.00,01.00,000.00,1.00 +0761,-055.10,+00.00,01.00,000.00,1.00 +0762,-054.20,+00.00,01.00,000.00,1.00 +0763,-053.30,+00.00,01.00,000.00,1.00 +0764,-052.40,+00.00,01.00,000.00,1.00 +0765,-051.50,+00.00,01.00,000.00,1.00 +0766,-050.60,+00.00,01.00,000.00,1.00 +0767,-049.70,+00.00,01.00,000.00,1.00 +0768,-048.80,+00.00,01.00,000.00,1.00 +0769,-047.90,+00.00,01.00,000.00,1.00 +0770,-047.00,+00.00,01.00,000.00,1.00 +0771,-046.10,+00.00,01.00,000.00,1.00 +0772,-045.20,+00.00,01.00,000.00,1.00 +0773,-044.30,+00.00,01.00,000.00,1.00 +0774,-043.40,+00.00,01.00,000.00,1.00 +0775,-042.50,+00.00,01.00,000.00,1.00 +0776,-041.60,+00.00,01.00,000.00,1.00 +0777,-040.70,+00.00,01.00,000.00,1.00 +0778,-039.80,+00.00,01.00,000.00,1.00 +0779,-038.90,+00.00,01.00,000.00,1.00 +0780,-038.00,+00.00,01.00,000.00,1.00 +0781,-037.10,+00.00,01.00,000.00,1.00 +0782,-036.20,+00.00,01.00,000.00,1.00 +0783,-035.30,+00.00,01.00,000.00,1.00 +0784,-034.40,+00.00,01.00,000.00,1.00 +0785,-033.50,+00.00,01.00,000.00,1.00 +0786,-032.60,+00.00,01.00,000.00,1.00 +0787,-031.70,+00.00,01.00,000.00,1.00 +0788,-030.80,+00.00,01.00,000.00,1.00 +0789,-029.90,+00.00,01.00,000.00,1.00 +0790,-029.00,+00.00,01.00,000.00,1.00 +0791,-028.10,+00.00,01.00,000.00,1.00 +0792,-027.20,+00.00,01.00,000.00,1.00 +0793,-026.30,+00.00,01.00,000.00,1.00 +0794,-025.40,+00.00,01.00,000.00,1.00 +0795,-024.50,+00.00,01.00,000.00,1.00 +0796,-023.60,+00.00,01.00,000.00,1.00 +0797,-022.70,+00.00,01.00,000.00,1.00 +0798,-021.80,+00.00,01.00,000.00,1.00 +0799,-020.90,+00.00,01.00,000.00,1.00 +0800,-020.00,+00.00,01.00,000.00,1.00 +0801,-019.10,+00.00,01.00,000.00,1.00 +0802,-018.20,+00.00,01.00,000.00,1.00 +0803,-017.30,+00.00,01.00,000.00,1.00 +0804,-016.40,+00.00,01.00,000.00,1.00 +0805,-015.50,+00.00,01.00,000.00,1.00 +0806,-014.60,+00.00,01.00,000.00,1.00 +0807,-013.70,+00.00,01.00,000.00,1.00 +0808,-012.80,+00.00,01.00,000.00,1.00 +0809,-011.90,+00.00,01.00,000.00,1.00 +0810,-011.00,+00.00,01.00,000.00,1.00 +0811,-010.10,+00.00,01.00,000.00,1.00 +0812,-009.20,+00.00,01.00,000.00,1.00 +0813,-008.30,+00.00,01.00,000.00,1.00 +0814,-007.40,+00.00,01.00,000.00,1.00 +0815,-006.50,+00.00,01.00,000.00,1.00 +0816,-005.60,+00.00,01.00,000.00,1.00 +0817,-004.70,+00.00,01.00,000.00,1.00 +0818,-003.80,+00.00,01.00,000.00,1.00 +0819,-002.90,+00.00,01.00,000.00,1.00 +0820,-002.00,+00.00,01.00,000.00,1.00 +0821,-001.10,+00.00,01.00,000.00,1.00 +0822,-000.20,+00.00,01.00,000.00,1.00 +0823,+000.70,+00.00,01.00,000.00,1.00 +0824,+001.60,+00.00,01.00,000.00,1.00 +0825,+002.50,+00.00,01.00,000.00,1.00 +0826,+003.40,+00.00,01.00,000.00,1.00 +0827,+004.30,+00.00,01.00,000.00,1.00 +0828,+005.20,+00.00,01.00,000.00,1.00 +0829,+006.10,+00.00,01.00,000.00,1.00 +0830,+007.00,+00.00,01.00,000.00,1.00 +0831,+007.90,+00.00,01.00,000.00,1.00 +0832,+008.80,+00.00,01.00,000.00,1.00 +0833,+009.70,+00.00,01.00,000.00,1.00 +0834,+010.60,+00.00,01.00,000.00,1.00 +0835,+011.50,+00.00,01.00,000.00,1.00 +0836,+012.40,+00.00,01.00,000.00,1.00 +0837,+013.30,+00.00,01.00,000.00,1.00 +0838,+014.20,+00.00,01.00,000.00,1.00 +0839,+015.10,+00.00,01.00,000.00,1.00 +0840,+016.00,+00.00,01.00,000.00,1.00 +0841,+016.90,+00.00,01.00,000.00,1.00 +0842,+017.80,+00.00,01.00,000.00,1.00 +0843,+018.70,+00.00,01.00,000.00,1.00 +0844,+019.60,+00.00,01.00,000.00,1.00 +0845,+020.50,+00.00,01.00,000.00,1.00 +0846,+021.40,+00.00,01.00,000.00,1.00 +0847,+022.30,+00.00,01.00,000.00,1.00 +0848,+023.20,+00.00,01.00,000.00,1.00 +0849,+024.10,+00.00,01.00,000.00,1.00 +0850,+025.00,+00.00,01.00,000.00,1.00 +0851,+025.90,+00.00,01.00,000.00,1.00 +0852,+026.80,+00.00,01.00,000.00,1.00 +0853,+027.70,+00.00,01.00,000.00,1.00 +0854,+028.60,+00.00,01.00,000.00,1.00 +0855,+029.50,+00.00,01.00,000.00,1.00 +0856,+030.40,+00.00,01.00,000.00,1.00 +0857,+031.30,+00.00,01.00,000.00,1.00 +0858,+032.20,+00.00,01.00,000.00,1.00 +0859,+033.10,+00.00,01.00,000.00,1.00 +0860,+034.00,+00.00,01.00,000.00,1.00 +0861,+034.90,+00.00,01.00,000.00,1.00 +0862,+035.80,+00.00,01.00,000.00,1.00 +0863,+036.70,+00.00,01.00,000.00,1.00 +0864,+037.60,+00.00,01.00,000.00,1.00 +0865,+038.50,+00.00,01.00,000.00,1.00 +0866,+039.40,+00.00,01.00,000.00,1.00 +0867,+040.30,+00.00,01.00,000.00,1.00 +0868,+041.20,+00.00,01.00,000.00,1.00 +0869,+042.10,+00.00,01.00,000.00,1.00 +0870,+043.00,+00.00,01.00,000.00,1.00 +0871,+043.90,+00.00,01.00,000.00,1.00 +0872,+044.80,+00.00,01.00,000.00,1.00 +0873,+045.70,+00.00,01.00,000.00,1.00 +0874,+046.60,+00.00,01.00,000.00,1.00 +0875,+047.50,+00.00,01.00,000.00,1.00 +0876,+048.40,+00.00,01.00,000.00,1.00 +0877,+049.30,+00.00,01.00,000.00,1.00 +0878,+050.20,+00.00,01.00,000.00,1.00 +0879,+051.10,+00.00,01.00,000.00,1.00 +0880,+052.00,+00.00,01.00,000.00,1.00 +0881,+052.90,+00.00,01.00,000.00,1.00 +0882,+053.80,+00.00,01.00,000.00,1.00 +0883,+054.70,+00.00,01.00,000.00,1.00 +0884,+055.60,+00.00,01.00,000.00,1.00 +0885,+056.50,+00.00,01.00,000.00,1.00 +0886,+057.40,+00.00,01.00,000.00,1.00 +0887,+058.30,+00.00,01.00,000.00,1.00 +0888,+059.20,+00.00,01.00,000.00,1.00 +0889,+060.10,+00.00,01.00,000.00,1.00 +0890,+061.00,+00.00,01.00,000.00,1.00 +0891,+061.90,+00.00,01.00,000.00,1.00 +0892,+062.80,+00.00,01.00,000.00,1.00 +0893,+063.70,+00.00,01.00,000.00,1.00 +0894,+064.60,+00.00,01.00,000.00,1.00 +0895,+065.50,+00.00,01.00,000.00,1.00 +0896,+066.40,+00.00,01.00,000.00,1.00 +0897,+067.30,+00.00,01.00,000.00,1.00 +0898,+068.20,+00.00,01.00,000.00,1.00 +0899,+069.10,+00.00,01.00,000.00,1.00 +0900,+070.00,+00.00,01.00,000.00,1.00 +0901,+070.90,+00.00,01.00,000.00,1.00 +0902,+071.80,+00.00,01.00,000.00,1.00 +0903,+072.70,+00.00,01.00,000.00,1.00 +0904,+073.60,+00.00,01.00,000.00,1.00 +0905,+074.50,+00.00,01.00,000.00,1.00 +0906,+075.40,+00.00,01.00,000.00,1.00 +0907,+076.30,+00.00,01.00,000.00,1.00 +0908,+077.20,+00.00,01.00,000.00,1.00 +0909,+078.10,+00.00,01.00,000.00,1.00 +0910,+079.00,+00.00,01.00,000.00,1.00 +0911,+079.90,+00.00,01.00,000.00,1.00 +0912,+080.80,+00.00,01.00,000.00,1.00 +0913,+081.70,+00.00,01.00,000.00,1.00 +0914,+082.60,+00.00,01.00,000.00,1.00 +0915,+083.50,+00.00,01.00,000.00,1.00 +0916,+084.40,+00.00,01.00,000.00,1.00 +0917,+085.30,+00.00,01.00,000.00,1.00 +0918,+086.20,+00.00,01.00,000.00,1.00 +0919,+087.10,+00.00,01.00,000.00,1.00 +0920,+088.00,+00.00,01.00,000.00,1.00 +0921,+088.90,+00.00,01.00,000.00,1.00 +0922,+089.80,+00.00,01.00,000.00,1.00 +0923,+090.70,+00.00,01.00,000.00,1.00 +0924,+091.60,+00.00,01.00,000.00,1.00 +0925,+092.50,+00.00,01.00,000.00,1.00 +0926,+093.40,+00.00,01.00,000.00,1.00 +0927,+094.30,+00.00,01.00,000.00,1.00 +0928,+095.20,+00.00,01.00,000.00,1.00 +0929,+096.10,+00.00,01.00,000.00,1.00 +0930,+097.00,+00.00,01.00,000.00,1.00 +0931,+097.90,+00.00,01.00,000.00,1.00 +0932,+098.80,+00.00,01.00,000.00,1.00 +0933,+099.70,+00.00,01.00,000.00,1.00 +0934,+100.60,+00.00,01.00,000.00,1.00 +0935,+101.50,+00.00,01.00,000.00,1.00 +0936,+102.40,+00.00,01.00,000.00,1.00 +0937,+103.30,+00.00,01.00,000.00,1.00 +0938,+104.20,+00.00,01.00,000.00,1.00 +0939,+105.10,+00.00,01.00,000.00,1.00 +0940,+106.00,+00.00,01.00,000.00,1.00 +0941,+106.90,+00.00,01.00,000.00,1.00 +0942,+107.80,+00.00,01.00,000.00,1.00 +0943,+108.70,+00.00,01.00,000.00,1.00 +0944,+109.60,+00.00,01.00,000.00,1.00 +0945,+110.50,+00.00,01.00,000.00,1.00 +0946,+111.40,+00.00,01.00,000.00,1.00 +0947,+112.30,+00.00,01.00,000.00,1.00 +0948,+113.20,+00.00,01.00,000.00,1.00 +0949,+114.10,+00.00,01.00,000.00,1.00 +0950,+115.00,+00.00,01.00,000.00,1.00 +0951,+115.90,+00.00,01.00,000.00,1.00 +0952,+116.80,+00.00,01.00,000.00,1.00 +0953,+117.70,+00.00,01.00,000.00,1.00 +0954,+118.60,+00.00,01.00,000.00,1.00 +0955,+119.50,+00.00,01.00,000.00,1.00 +0956,+120.40,+00.00,01.00,000.00,1.00 +0957,+121.30,+00.00,01.00,000.00,1.00 +0958,+122.20,+00.00,01.00,000.00,1.00 +0959,+123.10,+00.00,01.00,000.00,1.00 +0960,+124.00,+00.00,01.00,000.00,1.00 +0961,+124.90,+00.00,01.00,000.00,1.00 +0962,+125.80,+00.00,01.00,000.00,1.00 +0963,+126.70,+00.00,01.00,000.00,1.00 +0964,+127.60,+00.00,01.00,000.00,1.00 +0965,+128.50,+00.00,01.00,000.00,1.00 +0966,+129.40,+00.00,01.00,000.00,1.00 +0967,+130.30,+00.00,01.00,000.00,1.00 +0968,+131.20,+00.00,01.00,000.00,1.00 +0969,+132.10,+00.00,01.00,000.00,1.00 +0970,+133.00,+00.00,01.00,000.00,1.00 +0971,+133.90,+00.00,01.00,000.00,1.00 +0972,+134.80,+00.00,01.00,000.00,1.00 +0973,+135.70,+00.00,01.00,000.00,1.00 +0974,+136.60,+00.00,01.00,000.00,1.00 +0975,+137.50,+00.00,01.00,000.00,1.00 +0976,+138.40,+00.00,01.00,000.00,1.00 +0977,+139.30,+00.00,01.00,000.00,1.00 +0978,+140.20,+00.00,01.00,000.00,1.00 +0979,+141.10,+00.00,01.00,000.00,1.00 +0980,+142.00,+00.00,01.00,000.00,1.00 +0981,+142.90,+00.00,01.00,000.00,1.00 +0982,+143.80,+00.00,01.00,000.00,1.00 +0983,+144.70,+00.00,01.00,000.00,1.00 +0984,+145.60,+00.00,01.00,000.00,1.00 +0985,+146.50,+00.00,01.00,000.00,1.00 +0986,+147.40,+00.00,01.00,000.00,1.00 +0987,+148.30,+00.00,01.00,000.00,1.00 +0988,+149.20,+00.00,01.00,000.00,1.00 +0989,+150.10,+00.00,01.00,000.00,1.00 +0990,+151.00,+00.00,01.00,000.00,1.00 +0991,+151.90,+00.00,01.00,000.00,1.00 +0992,+152.80,+00.00,01.00,000.00,1.00 +0993,+153.70,+00.00,01.00,000.00,1.00 +0994,+154.60,+00.00,01.00,000.00,1.00 +0995,+155.50,+00.00,01.00,000.00,1.00 +0996,+156.40,+00.00,01.00,000.00,1.00 +0997,+157.30,+00.00,01.00,000.00,1.00 +0998,+158.20,+00.00,01.00,000.00,1.00 +0999,+159.10,+00.00,01.00,000.00,1.00 diff --git a/scripts/td_object_renderer/object_renderer_standalone/Makefile b/scripts/td_object_renderer/object_renderer_standalone/Makefile new file mode 100644 index 0000000000..b5d5ac8b14 --- /dev/null +++ b/scripts/td_object_renderer/object_renderer_standalone/Makefile @@ -0,0 +1,180 @@ +# GNU Makefile + +# Paths +SRC_LIBCOM = ../../../lib_com +SRC_LIBDEBUG = ../../../lib_debug +SRC_LIBDEC = ../../../lib_dec +SRC_LIBENC = ../../../lib_enc +SRC_LIBUTIL = ../../../lib_util +SRC_APP = ./object_renderer_standalone +BUILD = build +OBJDIR = obj + +SRC_DIRS = $(sort -u $(SRC_LIBCOM) $(SRC_LIBDEBUG) $(SRC_LIBDEC) $(SRC_LIBENC) $(SRC_LIBUTIL) $(SRC_APP)) + +# Name of CLI binaries +CLI_REN ?= renderer_standalone +LIB_LIBCOM ?= libivascom.a +LIB_LIBDEBUG ?= libivasdebug.a +LIB_LIBDEC ?= libivasdec.a +LIB_LIBENC ?= libivasenc.a +LIB_LIBUTIL ?= libivasutil.a + +# Default tool settings +CC ?= gcc +RM ?= rm -f +AR ?= ar + +# Detect system +UNAME_S := $(shell uname -s) + +# Switches for cross-platform builds (i.e. build 32 bit code on 64 bit platforms) +ifneq "$(TARGET_PLATFORM)" "" +ifeq ("$(TARGET_PLATFORM)", "$(findstring $(TARGET_PLATFORM), i386 i586 i686)") + CFLAGS += -m32 + LDFLAGS += -m32 +endif + +ifeq ("$(TARGET_PLATFORM)", "$(findstring $(TARGET_PLATFORM), x86_64)") + CFLAGS += -m64 + LDFLAGS += -m64 +endif +endif + +ifndef VERBOSE +QUIET_CC = @echo ' ' Compiling $<; +QUIET_LINK= @echo ' ' Linking $@; +QUIET_AR = @echo ' ' Archiving $@; +QUIET = @ +endif + +# C compiler flags +CFLAGS += -std=c99 -pedantic -Wcast-qual -Wall -W -Wextra -Wno-long-long \ + -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ + -Werror-implicit-function-declaration -Wno-unused-parameter \ + -Wno-unused-function -Wno-implicit-fallthrough + +# libs to link +LDLIBS += -lm + +# Clang sanitizer compiler options +CCCLANG = clang +ifeq "$(CLANG)" "1" +CC = $(CCCLANG) +CFLAGS += -fsanitize=memory +LDFLAGS += -fsanitize=memory +endif +ifeq "$(CLANG)" "2" +CC = $(CCCLANG) +CFLAGS += -fsanitize=address +LDFLAGS += -fsanitize=address +endif +ifeq "$(CLANG)" "3" +CC = $(CCCLANG) +CFLAGS += -fsanitize=undefined +LDFLAGS += -fsanitize=undefined +endif + + +CFLAGS += -DTDREND_HRTF_TABLE_METHODS +LDFLAGS += -DTDREND_HRTF_TABLE_METHODS + +ifeq "$(RELEASE)" "1" +CFLAGS += -DRELEASE +OPTIM ?= 2 +endif + +ifneq "$(DEBUG)" "0" +CFLAGS += -g3 +LDFLAGS += -g3 +endif + +ifeq "$(GCOV)" "1" +CFLAGS += -fprofile-arcs -ftest-coverage +LDFLAGS += -fprofile-arcs -ftest-coverage +endif + +ifeq "$(STRIP)" "1" +CFLAGS += -fdata-sections -ffunction-sections +ifneq ($(UNAME_S),Darwin) +LDFLAGS += -Wl,-gc-sections -static +else +LDFLAGS += -Wl,-dead_strip +endif +endif + +OPTIM ?= 0 +CFLAGS += -O$(OPTIM) + +CFLAGS += $(foreach DIR,$(SRC_DIRS),-I$(DIR)) + +# Source file search paths +VPATH = $(SRC_DIRS) + +############################################################################### + +SRCS_LIBCOM = $(foreach DIR,$(SRC_LIBCOM),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBDEBUG = $(foreach DIR,$(SRC_LIBDEBUG),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBDEC = $(foreach DIR,$(SRC_LIBDEC),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBENC = $(foreach DIR,$(SRC_LIBENC),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) +SRCS_LIBUTIL = $(foreach DIR,$(SRC_LIBUTIL),$(patsubst $(DIR)/%,%,$(wildcard $(DIR)/*.c))) + +OBJS_LIBCOM = $(addprefix $(OBJDIR)/,$(SRCS_LIBCOM:.c=.o)) +OBJS_LIBDEBUG = $(addprefix $(OBJDIR)/,$(SRCS_LIBDEBUG:.c=.o)) +OBJS_LIBDEC = $(addprefix $(OBJDIR)/,$(SRCS_LIBDEC:.c=.o)) +OBJS_LIBENC = $(addprefix $(OBJDIR)/,$(SRCS_LIBENC:.c=.o)) +OBJS_LIBUTIL = $(addprefix $(OBJDIR)/,$(SRCS_LIBUTIL:.c=.o)) +OBJS_REN = $(OBJDIR)/renderer_standalone.o + + +DEPS = $(addprefix $(OBJDIR)/,$(SRCS_LIBCOM:.c=.P) $(SRCS_LIBDEBUG:.c=.P) $(SRCS_LIBDEC:.c=.P) \ + $(SRCS_LIBENC:.c=.P) $(SRCS_LIBUTIL:.c=.P)) + +############################################################################### + +.PHONY: all clean clean_all +.NOTPARALLEL: clean clean_all + +all: $(CLI_REN) + +$(OBJDIR): + $(QUIET)mkdir -p $(OBJDIR) + +$(LIB_LIBCOM): $(OBJS_LIBCOM) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBDEBUG): $(OBJS_LIBDEBUG) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBDEC): $(OBJS_LIBDEC) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBENC): $(OBJS_LIBENC) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(LIB_LIBUTIL): $(OBJS_LIBUTIL) + $(QUIET_AR)$(AR) rcs $@ $^ + +$(CLI_REN): $(LIB_LIBENC) $(LIB_LIBDEC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBUTIL) $(OBJS_REN) + $(QUIET_LINK)$(CC) $(LDFLAGS) $(OBJS_REN) -L. -livasdebug -livasutil -livasenc -livasdec -livascom $(LDLIBS) -o $(CLI_REN) + +libs: $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBDEC) $(LIB_LIBUTIL) + +#.NOTPARALLEL: clean clean_all + +clean: + $(QUIET)$(RM) $(OBJS_LIBENC) $(OBJS_LIBDEC) $(OBJS_REN) $(DEPS) + $(QUIET)$(RM) $(DEPS:.P=.d) + $(QUIET)test ! -d $(OBJDIR) || rm -rf $(OBJDIR) + +clean_all: clean + $(QUIET)$(RM) $(CLI_REN) $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBDEC) $(LIB_LIBUTIL) + +$(OBJDIR)/%.o : %.c | $(OBJDIR) + $(QUIET_CC)$(CC) $(CFLAGS) -c -MD -o $@ $< + @cp $(OBJDIR)/$*.d $(OBJDIR)/$*.P; \ + sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ + -e '/^$$/ d' -e 's/$$/ :/' < $(OBJDIR)/$*.d >> $(OBJDIR)/$*.P; \ + $(RM) $(OBJDIR)/$*.d + +-include $(DEPS) diff --git a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.sln b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.sln new file mode 100644 index 0000000000..18c18b0ace --- /dev/null +++ b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.sln @@ -0,0 +1,60 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.136 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "object_renderer_standalone", "object_renderer_standalone.vcxproj", "{75AE3898-3FDF-4AE2-86A1-838D0E78545E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_util", "..\..\..\Workspace_msvc\lib_util.vcxproj", "{2FA8F384-0775-F3B7-F8C3-85209222FC70}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_dec", "..\..\..\Workspace_msvc\lib_dec.vcxproj", "{E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_com", "..\..\..\Workspace_msvc\lib_com.vcxproj", "{39EC200D-7795-4FF8-B214-B24EDA5526AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_debug", "..\..\..\Workspace_msvc\lib_debug.vcxproj", "{54509728-928B-44D9-A118-A6F92F08B34F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + Unittests|Win32 = Unittests|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {75AE3898-3FDF-4AE2-86A1-838D0E78545E}.Debug|Win32.ActiveCfg = Debug|Win32 + {75AE3898-3FDF-4AE2-86A1-838D0E78545E}.Debug|Win32.Build.0 = Debug|Win32 + {75AE3898-3FDF-4AE2-86A1-838D0E78545E}.Release|Win32.ActiveCfg = Release|Win32 + {75AE3898-3FDF-4AE2-86A1-838D0E78545E}.Release|Win32.Build.0 = Release|Win32 + {75AE3898-3FDF-4AE2-86A1-838D0E78545E}.Unittests|Win32.ActiveCfg = Release|Win32 + {75AE3898-3FDF-4AE2-86A1-838D0E78545E}.Unittests|Win32.Build.0 = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.ActiveCfg = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Debug|Win32.Build.0 = Debug|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.ActiveCfg = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Release|Win32.Build.0 = Release|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {2FA8F384-0775-F3B7-F8C3-85209222FC70}.Unittests|Win32.Build.0 = Unittests|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Debug|Win32.Build.0 = Debug|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.ActiveCfg = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Release|Win32.Build.0 = Release|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {E822DDAF-0F5F-4CD0-A694-38AE69DE74D3}.Unittests|Win32.Build.0 = Unittests|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Debug|Win32.Build.0 = Debug|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.ActiveCfg = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Release|Win32.Build.0 = Release|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {39EC200D-7795-4FF8-B214-B24EDA5526AE}.Unittests|Win32.Build.0 = Unittests|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.ActiveCfg = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Debug|Win32.Build.0 = Debug|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.ActiveCfg = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Release|Win32.Build.0 = Release|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Unittests|Win32.ActiveCfg = Unittests|Win32 + {54509728-928B-44D9-A118-A6F92F08B34F}.Unittests|Win32.Build.0 = Unittests|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {16E75611-7E35-43B5-B2CA-01E9C9B952F1} + EndGlobalSection +EndGlobal diff --git a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj new file mode 100644 index 0000000000..797b472471 --- /dev/null +++ b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj @@ -0,0 +1,118 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + 15.0 + {75AE3898-3FDF-4AE2-86A1-838D0E78545E} + objectrendererstandalone + 10.0.17763.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + .\ + .\Debug_Renderer_Standalone\ + renderer_standalone + false + + + .\ + .\Release_Renderer_Standalone\ + renderer_standalone + false + + + + Level4 + Disabled + true + false + ..\..\..\lib_enc;..\..\..\lib_dec;..\..\..\lib_com;..\..\..\lib_debug;..\..\..\lib_util;%(AdditionalIncludeDirectories) + OldStyle + false + _CRT_SECURE_NO_WARNINGS;WIN32;%(PreprocessorDefinitions);TDREND_HRTF_TABLE_METHODS + MultiThreadedDebug + .\Debug_Renderer_Standalone\renderer_standalone.pdb + + false + + + .\renderer_standalone.exe + .\Debug_Renderer_Standalone\renderer_standalone.pdb + Console + + + + + Level3 + MaxSpeed + true + true + true + true + ..\..\..\lib_enc;..\..\..\lib_dec;..\..\..\lib_com;..\..\..\lib_debug;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;%(PreprocessorDefinitions);OBJECT_RENDERER_EXTERNAL_METADATA + MultiThreaded + $(IntDir)renderer_standalone.pdb + + + true + true + .\renderer_standalone.exe + false + + + + + + + + {39ec200d-7795-4ff8-b214-b24eda5526ae} + + + {54509728-928b-44d9-a118-a6f92f08b34f} + + + {e822ddaf-0f5f-4cd0-a694-38ae69de74d3} + + + {2fa8f384-0775-f3b7-f8c3-85209222fc70} + + + + + + \ No newline at end of file diff --git a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj.filters b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj.filters new file mode 100644 index 0000000000..880c4e60a8 --- /dev/null +++ b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c new file mode 100644 index 0000000000..e1e7bc1e31 --- /dev/null +++ b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c @@ -0,0 +1,602 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ +#include +#include +#include + +#define _USE_MATH_DEFINES +#include + +#include "options.h" +#include "stdint.h" +#include "prot.h" +#include "ivas_prot.h" +#include "ivas_cnst.h" +#include "ivas_stat_dec.h" +#include "cnst.h" +#include "wmops.h" +#include "hrtf_file_reader.h" +#include "ivas_error.h" + +/*------------------------------------------------------------------------------------------* + * Constants + *------------------------------------------------------------------------------------------*/ + +#define META_LINE_LENGTH 200 /* max number of characters at one line of metadata input/output file */ +#define NUM_ISM_METADATA_PER_LINE 5 /* Number of ISM metadata per line in a metadata file */ + +/*---------------------------------------------------------------------* + * Local function prototypes + *---------------------------------------------------------------------*/ +static char *to_upper( char *str ); +static void usage_rend( void ); +static void readMetadata( FILE *file, ISM_METADATA_HANDLE hIsmMetaData ); + +static void ivas_binaural_add_LFE_local( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + int16_t output_frame, /* i : length of input frame */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int8_t render_lfe /* i : render lfe flag */ +); + +/*---------------------------------------------------------------------* + * usage_rend() + * + * Print the usage of the "renderer_standalone" program + *---------------------------------------------------------------------*/ + +static void usage_rend( void ) +{ + fprintf( stdout, "Usage: renderer_standalone.exe [Options] Channels Metadata Fs InputAudio OutputAudio\n\n" ); + + fprintf( stdout, "Mandatory parameters:\n" ); + fprintf( stdout, "---------------------\n" ); + fprintf( stdout, "Channels : Number of channels\n" ); + fprintf( stdout, "Metadata : Metadata files, number of files specified by Channels\n" ); + fprintf( stdout, "Fs : Sampling rate\n" ); + fprintf( stdout, "InputAudio : Audio to be rendered, interleaved Channels\n" ); + fprintf( stdout, "OutputAudio : Rendered output audio\n\n" ); + + fprintf( stdout, "Options:\n" ); + fprintf( stdout, "--------\n" ); + fprintf( stdout, "-T File : Head rotation specified by external trajectory File\n" ); + fprintf( stdout, "-hrtf File : HRTF filter file (if not specified: use default model from ROM)\n" ); + fprintf( stdout, "-mc Conf : Run renderer on multichannel input, where Conf is one of \n" ); + fprintf( stdout, " 5_1, 7_1, 5_1_2, 5_1_4 and 7_1_4. Note: In this mode the Channels\n" ); + fprintf( stdout, " and Metadata arguments are omitted.\n" ); + fprintf( stdout, "\n" ); + + exit( -1 ); +} + + +/*------------------------------------------------------------------------------------------* + * Global variables + *------------------------------------------------------------------------------------------*/ + +int32_t frame = 0; /* Counter of frames */ + + +/*------------------------------------------------------------------------------------------* + * Standalone Renderer program + * + * + *------------------------------------------------------------------------------------------*/ +int main( int argc, char *argv[] ) +{ + int16_t nFrameLength; + int16_t n, nS, nSamplesRead, i, j; + int16_t offset; + + float *MixFrame; + float output[MAX_CICP_CHANNELS][L_FRAME48k]; + int16_t NumLdspks = 2; + int16_t *MixFrameWav; + int16_t *input_buff; + int16_t nChannels; + FILE *f_input; + FILE *f_output; + FILE *f_quat_traj; + int32_t tmp; + float x, y, z, w; + FILE *f_metadata[MAX_NUM_OBJECTS]; + Decoder_Struct st_ivas_static; + Decoder_Struct *st_ivas = &st_ivas_static; + + MixFrame = count_malloc( 2 * L_FRAME48k * sizeof( float ) ); + MixFrameWav = count_malloc( 2 * L_FRAME48k * sizeof( int16_t ) ); + input_buff = count_malloc( MAX_CICP_CHANNELS * L_FRAME48k * sizeof( int16_t ) ); + nChannels = 0; + + for ( i = 0; i < 2 * L_FRAME48k; i++ ) + { + MixFrame[i] = 0.0; + MixFrameWav[i] = 0; + } + for ( i = 0; i < MAX_NUM_OBJECTS; ++i ) + { + f_metadata[i] = NULL; + } + + + /*------------------------------------------------------------------------------------------* + * Struct initializations + *------------------------------------------------------------------------------------------*/ + st_ivas->hHrtf = NULL; + st_ivas->hHeadTrackData = NULL; + st_ivas->ivas_format = ISM_FORMAT; + f_quat_traj = NULL; + if ( ( st_ivas->hDecoderConfig = (DECODER_CONFIG_HANDLE) count_malloc( sizeof( DECODER_CONFIG ) ) ) == NULL ) + { + return IVAS_ERR_FAILED_ALLOC; + } + + /* ISm metadata handles */ + for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) + { + st_ivas->hIsmMetaData[n] = NULL; + } + + /*------------------------------------------------------------------------------------------* + * Parse command line and initialize renderer + *------------------------------------------------------------------------------------------*/ + if ( ( argc ) < 5 ) + { + fprintf( stderr, "Not enough input arguments!\n\n" ); + usage_rend(); + } + i = 1; + /* Optional arguments */ + while ( argv[i][0] == '-' ) + { + if ( strcmp( to_upper( argv[i] ), "-HRTF" ) == 0 ) + { + i++; + ivas_HRTF_binary_open( &( st_ivas->hHrtfTD ) ); + i++; + } + else if ( strcmp( to_upper( argv[i] ), "-T" ) == 0 ) + { + i++; + f_quat_traj = fopen( argv[i], "r" ); + + if ( f_quat_traj == NULL ) + { + fprintf( stderr, "\nError: Unable to open head-rotation file %s \n\n", argv[i] ); + usage_rend(); + } + i++; + } + else if ( strcmp( to_upper( argv[i] ), "-MC" ) == 0 ) + { + st_ivas->ivas_format = MC_FORMAT; + st_ivas->mc_mode = MC_MODE_MCT; + i++; + if ( strcmp( to_upper( argv[i] ), "5_1" ) == 0 ) + { + st_ivas->transport_config = AUDIO_CONFIG_5_1; + nChannels = 6; + } + else if ( strcmp( to_upper( argv[i] ), "7_1" ) == 0 ) + { + st_ivas->transport_config = AUDIO_CONFIG_7_1; + nChannels = 8; + } + else if ( strcmp( to_upper( argv[i] ), "5_1_2" ) == 0 ) + { + st_ivas->transport_config = AUDIO_CONFIG_5_1_2; + nChannels = 8; + } + else if ( strcmp( to_upper( argv[i] ), "5_1_4" ) == 0 ) + { + st_ivas->transport_config = AUDIO_CONFIG_5_1_4; + nChannels = 10; + } + else if ( strcmp( to_upper( argv[i] ), "7_1_4" ) == 0 ) + { + st_ivas->transport_config = AUDIO_CONFIG_7_1_4; + nChannels = 12; + } + else + { + fprintf( stderr, "\nError: Unknown MC configuration %s \n\n", argv[i] ); + usage_rend(); + } + st_ivas->nchan_transport = nChannels; + st_ivas->hIntSetup.num_lfe = 1; + st_ivas->hIntSetup.nchan_out_woLFE = nChannels - 1; + st_ivas->hIntSetup.index_lfe[0] = 3; + i++; + } + else + { + fprintf( stderr, "Unknown option: %s\n\n", argv[i] ); + usage_rend(); + } + } + + if ( st_ivas->ivas_format == ISM_FORMAT ) + { + + if ( ( argc - i ) < 5 ) + { + fprintf( stderr, "Not enough input arguments!\n\n" ); + usage_rend(); + } + + /* Mandatory arguments */ + nChannels = (int16_t) atoi( argv[i] ); /* Number of channels */ + st_ivas->nSCE = nChannels; + st_ivas->nchan_transport = nChannels; + i++; + + if ( ( argc - i ) < ( 3 + nChannels ) ) + { + fprintf( stderr, "Not enough input arguments for %d channels!\n\n", nChannels ); + usage_rend(); + } + + /* Metadata files */ + for ( j = 0; j < nChannels; j++ ) + { + if ( ( f_metadata[j] = fopen( argv[i], "r" ) ) == NULL ) + { + fprintf( stderr, "\nError: Unable to open metadata file %s \n\n", argv[i] ); + exit( -1 ); + } + st_ivas->hIsmMetaData[j] = (ISM_METADATA_HANDLE) count_malloc( sizeof( ISM_METADATA_FRAME ) ); + i++; + } + } + + + /* Fs and 20ms frame length */ + st_ivas->hDecoderConfig->output_Fs = atoi( argv[i] ) * 1000; + nFrameLength = ( ( int16_t )( st_ivas->hDecoderConfig->output_Fs / 1000 ) ) * 20; /* 20 ms frame */ + i++; + + /* Input, n-channel audio */ + if ( ( f_input = fopen( argv[i], "rb" ) ) == NULL ) + { + fprintf( stderr, "Error: input file %s cannot be opened\n\n", argv[i] ); + exit( -1 ); + } + i++; + + /* Output rendered audio */ + if ( ( f_output = fopen( argv[i], "wb" ) ) == NULL ) + { + fprintf( stderr, "Error: output file %s cannot be opened\n\n", argv[i] ); + exit( -1 ); + } + i++; + + if ( i != argc ) + { + fprintf( stderr, "Too many arguments!\n\n" ); + usage_rend(); + } + + + if ( f_quat_traj != NULL ) + { + if ( ( st_ivas->hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) count_malloc( sizeof( HEAD_TRACK_DATA ) ) ) == NULL ) + { + fprintf( stderr, "Can not allocate memory for head-tracking\n" ); + exit( -1 ); + } + } + + /* Init limiter */ + st_ivas->hLimiter = ivas_limiter_open( nChannels, st_ivas->hDecoderConfig->output_Fs ); + st_ivas->hDecoderConfig->nchan_out = nChannels; + st_ivas->hLimiter->strong_saturation_count = 0; + st_ivas->hLimiter->gain = 1.f; + st_ivas->hLimiter->release_heuristic = 0.f; + + ivas_td_binaural_open( st_ivas ); + + int16_t nFrameCount = 0; + int16_t currFrameLength, currWindowLength; + + /*------------------------------------------------------------------------------------------* + * Main rendering loop + *------------------------------------------------------------------------------------------*/ + fprintf( stdout, "Rendering...\n" ); + while ( 1 ) + { + /* Read the next frame from the file */ + nSamplesRead = (int16_t) fread( input_buff, sizeof( int16_t ), nFrameLength * nChannels, f_input ); + if ( nSamplesRead <= 0 ) + { + if ( frame == 0 ) + { + fprintf( stderr, "Error: no frames processed." ); + } + break; + } + + if ( nSamplesRead % nChannels != 0 ) + { + fprintf( stderr, "Error: total number of entries in input audio was not a multiple of the number of channels.\n\n" ); + break; + } + + currWindowLength = nSamplesRead / nChannels; + if ( currWindowLength < nFrameLength ) + { + currFrameLength = currWindowLength; + } + else + { + currFrameLength = nFrameLength; + } + + + /* Renderer expects non-interleaved channels, so de-interleave here. */ + for ( nS = 0; nS < nChannels; nS++ ) + { + for ( n = 0; n < currFrameLength; n++ ) + { + output[nS][n] = input_buff[nChannels * n + nS]; + } + } + + if ( st_ivas->ivas_format == ISM_FORMAT ) + { + /* Read metadata */ + for ( j = 0; j < nChannels; j++ ) + { + readMetadata( f_metadata[j], st_ivas->hIsmMetaData[j] ); + } + } + else /* st_ivas->ivas_format == MC_FORMAT */ + { + ivas_binaural_add_LFE_local( st_ivas, currFrameLength, output, 1 ); + } + + /* Read headrotation */ + if ( f_quat_traj != NULL ) + { + for ( i = 0; i < 4; i++ ) /* MAX_PARAM_SPATIAL_SUBFRAMES = 4 */ + { + if ( 5 == fscanf( f_quat_traj, "%d,%f,%f,%f,%f", &tmp, &w, &x, &y, &z ) ) + { + st_ivas->hHeadTrackData->num_quaternions = -1; + + st_ivas->hHeadTrackData->Quaternions[i].w = w; + st_ivas->hHeadTrackData->Quaternions[i].x = x; + st_ivas->hHeadTrackData->Quaternions[i].y = y; + st_ivas->hHeadTrackData->Quaternions[i].z = z; + + st_ivas->hHeadTrackData->num_quaternions = 0; + } + else + { + if ( feof( f_quat_traj ) ) + { + rewind( f_quat_traj ); + i--; /* Rewind and re-read the value for i */ + } + else + { + fprintf( stderr, "Incorrect format in headrotation file! \n\n" ); + exit( -1 ); + } + } + } + } + + /* Renderer */ + ObjRenderIVASFrame( st_ivas, output, currFrameLength ); + + /* Write the rendered audio to file. */ + + /* Apply limiter */ + ivas_limiter_dec( st_ivas->hLimiter, output, st_ivas->hDecoderConfig->nchan_out, nFrameLength, FALSE ); + + /* Trim first frame to compensate for delay */ + if ( nFrameCount == 0 ) + { + offset = ( int16_t )( st_ivas->hDecoderConfig->output_Fs / 200 ); /* 240 samples for 48kHz etc */ + } + else + { + offset = 0; + } + + /* For Wav: Interleave, convert to int16_t */ + for ( n = 0; n < ( currFrameLength - offset ); n++ ) + { + for ( nS = 0; nS < NumLdspks; nS++ ) + { + MixFrameWav[n * NumLdspks + nS] = ( int16_t )( output[nS][n + offset] + 0.5f * sign( output[nS][n + offset] ) ); + } + } + fwrite( MixFrameWav, sizeof( int16_t ), ( currFrameLength - offset ) * NumLdspks, f_output ); + + nFrameCount++; + + frame++; + + fprintf( stdout, "." ); + } + fprintf( stdout, "\n" ); + + + /*------------------------------------------------------------------------------------------* + * Close and deallocate memory + *------------------------------------------------------------------------------------------*/ + + fclose( f_input ); + fclose( f_output ); + + count_free( MixFrame ); + count_free( MixFrameWav ); + count_free( input_buff ); + + ivas_td_binaural_close( &st_ivas->hBinRendererTd ); + count_free( st_ivas->hDecoderConfig ); + ivas_HRTF_binary_close( &st_ivas->hHrtfTD ); + + /* ISM metadata handles */ + for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) + { + if ( st_ivas->hIsmMetaData[n] != NULL ) + { + count_free( st_ivas->hIsmMetaData[n] ); + st_ivas->hIsmMetaData[n] = NULL; + } + } + + if ( st_ivas->hHeadTrackData != NULL ) + { + count_free( st_ivas->hHeadTrackData ); + fclose( f_quat_traj ); + } + + ivas_limiter_close( &st_ivas->hLimiter ); + +#ifdef RAM_COUNTING_TOOL + mem_count_summary( USE_DEFAULT ); +#endif + +#ifdef DEBUGGING + dbgclose(); +#endif + + fprintf( stdout, "Done rendering %d frames.\n", nFrameCount ); + /* system( "pause" ); */ + return 0; +} + +/*---------------------------------------------------------------------* + * to_upper() + * + * Capitalize all letters of a string. + * (normally to_upper() function would be used but it does not work in Unix) + *---------------------------------------------------------------------*/ +static char *to_upper( + char *str ) +{ + int16_t i; + char *p = str; + + i = 0; + while ( str[i] != 0 ) + { + if ( str[i] >= 'a' && str[i] <= 'z' ) + { + str[i] -= 0x20; + } + i++; + } + + return p; +} + +/*---------------------------------------------------------------------* + * readMetadata() + * + * Read one frame of metadata + *---------------------------------------------------------------------*/ +static void readMetadata( + FILE *file, + ISM_METADATA_HANDLE hIsmMetaData ) +{ + char char_buff[META_LINE_LENGTH]; + float meta_prm[NUM_ISM_METADATA_PER_LINE]; + char *char_ptr; + int16_t j; + int32_t time_stamp; + + if ( fgets( char_buff, META_LINE_LENGTH, file ) == NULL ) + { + fprintf( stderr, "\n!!!Error: Early EOF met while reading ISM metadata input file. Exiting!!!\n\n" ); + exit( -1 ); + } + + char_ptr = strtok( char_buff, "," ); + time_stamp = (int32_t) atoi( char_ptr ); + + if ( time_stamp != frame ) + { + fprintf( stderr, "\n!!!Error: Wrong time-stamp while reading ISM metadata input file. Exiting!!!\n\n" ); + exit( -1 ); + } + + j = 0; + while ( char_ptr != NULL && j < NUM_ISM_METADATA_PER_LINE ) + { + char_ptr = strtok( NULL, "," ); + meta_prm[j++] = (float) atof( char_ptr ); + } + + hIsmMetaData->azimuth = meta_prm[0]; + hIsmMetaData->elevation = meta_prm[1]; + + return; +} + +/*KLUDGE: Copied here instead of moving ivas_binaural_add_LFE to a separate file. */ +static void ivas_binaural_add_LFE_local( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + int16_t output_frame, /* i : length of input frame */ + float output_f[][L_FRAME48k], /* i/o: synthesized core-coder transport channels/DirAC output */ + const int8_t render_lfe /* i : render lfe flag */ +) +{ + + if ( render_lfe ) + { + float gain; + int16_t ch, idx_lfe; + + gain = GAIN_LFE / st_ivas->hIntSetup.nchan_out_woLFE; + + /* copy lfe to all other channels */ + for ( idx_lfe = 0; idx_lfe < st_ivas->hIntSetup.num_lfe; idx_lfe++ ) + { + v_multc( output_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], gain, output_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_frame ); + + for ( ch = 0; ch < ( st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe ); ch++ ) + { + if ( st_ivas->hIntSetup.index_lfe[idx_lfe] != ch ) + { + v_add( output_f[ch], output_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_f[ch], output_frame ); + } + } + } + } + + return; +} diff --git a/scripts/td_object_renderer/td_object_renderer_readme.txt b/scripts/td_object_renderer/td_object_renderer_readme.txt new file mode 100644 index 0000000000..92ae257b57 --- /dev/null +++ b/scripts/td_object_renderer/td_object_renderer_readme.txt @@ -0,0 +1,71 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + + +Time Domain binaural renderer, standalone program +------------------------------------------------- + +The TD binaural renderer is part of the IVAS decoder but can also be run as a standalone program to render unprocessed audio. +The renderer uses the same metadata format as the IVAS encoder and supports headtracking using a headtracking trajectory file +like the IVAS decoder. It may use the default HRTF model from table ROM or load an HRTF from file. + +To run the renderer in standalone mode, without encoding/decoding via the IVAS codec: +- build the renderer_standalone project (under scripts/td_object_renderer/object_renderer_standalone/) in Visual Studio, or +- use the Makefile (i.e. 'make' in scripts/td_object_renderer/object_renderer_standalone/). + + +Usage: renderer_standalone.exe [Options] Channels Metadata Fs InputAudio OutputAudio + +Mandatory parameters: +--------------------- +Channels : Number of channels +Metadata : Metadata files, number of files specified by Channels +Fs : Sampling rate +InputAudio : Audio to be rendered, interleaved Channels +OutputAudio : Rendered output audio + +Options: +-------- +-T File : Head rotation specified by external trajectory File +-hrtf File : HRTF filter file (if not specified: use default model from ROM) +-mc Conf : Run renderer on multichannel input, where Conf is one of + 5_1, 7_1, 5_1_2, 5_1_4 and 7_1_4. Note: In this mode the Channels + and Metadata arguments are omitted. + + + +Support for rendering using the table-format HRTFs is included by building (either the decoder or renderer_standalone) with the +switch TDREND_HRTF_TABLE_METHODS active. It is active by default in the standalone renderer. In that case HRTF files in table +format may also be provided, e.g.: + IVAS_dec.exe -hrtf hrfilter_table_48kHz.bin BINAURAL 48 encoded_1ch.ivs rendered.pcm +or + renderer_standalone.exe -hrtf hrfilter_table_48kHz.bin 1 scripts/td_object_renderer/metadata/csv/t01_ch1.csv 48 audio_1ch.pcm rendered.pcm diff --git a/scripts/testv/FEC_6pct.bin b/scripts/testv/FEC_6pct.bin new file mode 100644 index 0000000000..b84183e2be --- /dev/null +++ b/scripts/testv/FEC_6pct.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df28dad52249958661890ed1009d1c4b22ec5f4b0af965697b38599ce070e1cb +size 50000 diff --git a/scripts/testv/bwidth_cntl.txt b/scripts/testv/bwidth_cntl.txt new file mode 100644 index 0000000000..da0355b917 --- /dev/null +++ b/scripts/testv/bwidth_cntl.txt @@ -0,0 +1,6 @@ +100 NB +100 WB +100 SWB +100 FB + + diff --git a/scripts/testv/config_renderer.cfg b/scripts/testv/config_renderer.cfg new file mode 100644 index 0000000000..4a95993dc0 --- /dev/null +++ b/scripts/testv/config_renderer.cfg @@ -0,0 +1,32 @@ +[roomAcoustics] +reverb = true; # Reverb switch, in case BRIR is undefined or false, reverb flag is inherited from the room flag + +fc = [20.0, 25.0, 31.5, 40.0, + 50.0, 63.0, 80.0, 100.0, + 125.0, 160.0, 200.0, 250.0, + 315.0, 400.0, 500.0, 630.0, + 800.0, 1000.0, 1250.0, 1600.0, + 2000.0, 2500.0, 3150.0, 4000.0, + 5000.0, 6300.0, 8000.0, 10000.0, + 12500.0, 16000.0, 20000.0]; + +rt60 = [1.3622, 1.4486, 1.3168, 1.5787, + 1.4766, 1.3954, 1.2889, 1.3462, + 1.0759, 1.0401, 1.0970, 1.0850, + 1.0910, 1.0404, 1.0499, 1.0699, + 1.1028, 1.1714, 1.1027, 1.0666, + 1.0550, 1.0553, 1.0521, 1.0569, + 1.0421, 0.97822, 0.80487, 0.75944, + 0.71945, 0.61682, 0.60031]; + +dsr = [1.8811e-08, 2.1428e-08, 1.3972e-08, 1.51e-08, + 1.287e-08, 1.8747e-08, 2.413e-08, 3.9927e-08, + 8.9719e-08, 1.902e-07, 3.702e-07, 6.1341e-07, + 7.1432e-07, 6.5331e-07, 4.6094e-07, 5.4683e-07, + 7.0134e-07, 6.856e-07, 7.114e-07, 6.9604e-07, + 5.2939e-07, 5.699e-07, 6.1773e-07, 5.7488e-07, + 4.7748e-07, 2.7213e-07, 1.3681e-07, 1.0941e-07, + 6.2001e-08, 2.8483e-08, 2.6267e-08]; + +acousticPreDelay = 0.016; +inputPreDelay = 0.1; \ No newline at end of file diff --git a/scripts/testv/headrot.csv b/scripts/testv/headrot.csv new file mode 100644 index 0000000000..e3500d2d39 --- /dev/null +++ b/scripts/testv/headrot.csv @@ -0,0 +1,8100 @@ +0,0.996195,0.000000,0.000000,0.087156 +1,0.996195,0.000000,0.000000,0.087156 +2,0.996195,0.000000,0.000000,0.087156 +3,0.996195,0.000000,0.000000,0.087156 +4,0.996195,0.000000,0.000000,0.087156 +5,0.996195,0.000000,0.000000,0.087156 +6,0.996195,0.000000,0.000000,0.087156 +7,0.996195,0.000000,0.000000,0.087156 +8,0.996195,0.000000,0.000000,0.087156 +9,0.996195,0.000000,0.000000,0.087156 +10,0.996195,0.000000,0.000000,0.087156 +11,0.996195,0.000000,0.000000,0.087156 +12,0.996195,0.000000,0.000000,0.087156 +13,0.996195,0.000000,0.000000,0.087156 +14,0.996195,0.000000,0.000000,0.087156 +15,0.996195,0.000000,0.000000,0.087156 +16,0.996195,0.000000,0.000000,0.087156 +17,0.996195,0.000000,0.000000,0.087156 +18,0.996195,0.000000,0.000000,0.087156 +19,0.996195,0.000000,0.000000,0.087156 +20,0.996195,0.000000,0.000000,0.087156 +21,0.996195,0.000000,0.000000,0.087156 +22,0.996195,0.000000,0.000000,0.087156 +23,0.996195,0.000000,0.000000,0.087156 +24,0.996195,0.000000,0.000000,0.087156 +25,0.996195,0.000000,0.000000,0.087156 +26,0.996195,0.000000,0.000000,0.087156 +27,0.996195,0.000000,0.000000,0.087156 +28,0.996195,0.000000,0.000000,0.087156 +29,0.996195,0.000000,0.000000,0.087156 +30,0.996195,0.000000,0.000000,0.087156 +31,0.996195,0.000000,0.000000,0.087156 +32,0.996195,0.000000,0.000000,0.087156 +33,0.996195,0.000000,0.000000,0.087156 +34,0.996195,0.000000,0.000000,0.087156 +35,0.996195,0.000000,0.000000,0.087156 +36,0.996195,0.000000,0.000000,0.087156 +37,0.996195,0.000000,0.000000,0.087156 +38,0.996195,0.000000,0.000000,0.087156 +39,0.996195,0.000000,0.000000,0.087156 +40,0.996195,0.000000,0.000000,0.087156 +41,0.996195,0.000000,0.000000,0.087156 +42,0.996195,0.000000,0.000000,0.087156 +43,0.996195,0.000000,0.000000,0.087156 +44,0.996195,0.000000,0.000000,0.087156 +45,0.996195,0.000000,0.000000,0.087156 +46,0.996195,0.000000,0.000000,0.087156 +47,0.996195,0.000000,0.000000,0.087156 +48,0.996195,0.000000,0.000000,0.087156 +49,0.996195,0.000000,0.000000,0.087156 +50,0.996195,0.000000,0.000000,0.087156 +51,0.996195,0.000000,0.000000,0.087156 +52,0.996195,0.000000,0.000000,0.087156 +53,0.996195,0.000000,0.000000,0.087156 +54,0.996195,0.000000,0.000000,0.087156 +55,0.996195,0.000000,0.000000,0.087156 +56,0.996195,0.000000,0.000000,0.087156 +57,0.996195,0.000000,0.000000,0.087156 +58,0.996195,0.000000,0.000000,0.087156 +59,0.996195,0.000000,0.000000,0.087156 +60,0.996195,0.000000,0.000000,0.087156 +61,0.996195,0.000000,0.000000,0.087156 +62,0.996195,0.000000,0.000000,0.087156 +63,0.996195,0.000000,0.000000,0.087156 +64,0.996195,0.000000,0.000000,0.087156 +65,0.996195,0.000000,0.000000,0.087156 +66,0.996195,0.000000,0.000000,0.087156 +67,0.996195,0.000000,0.000000,0.087156 +68,0.996195,0.000000,0.000000,0.087156 +69,0.996195,0.000000,0.000000,0.087156 +70,0.996195,0.000000,0.000000,0.087156 +71,0.996195,0.000000,0.000000,0.087156 +72,0.996195,0.000000,0.000000,0.087156 +73,0.996195,0.000000,0.000000,0.087156 +74,0.996195,0.000000,0.000000,0.087156 +75,0.996195,0.000000,0.000000,0.087156 +76,0.996195,0.000000,0.000000,0.087156 +77,0.996195,0.000000,0.000000,0.087156 +78,0.996195,0.000000,0.000000,0.087156 +79,0.996195,0.000000,0.000000,0.087156 +80,0.996195,0.000000,0.000000,0.087156 +81,0.996195,0.000000,0.000000,0.087156 +82,0.996195,0.000000,0.000000,0.087156 +83,0.996195,0.000000,0.000000,0.087156 +84,0.996195,0.000000,0.000000,0.087156 +85,0.996195,0.000000,0.000000,0.087156 +86,0.996195,0.000000,0.000000,0.087156 +87,0.996195,0.000000,0.000000,0.087156 +88,0.996195,0.000000,0.000000,0.087156 +89,0.996195,0.000000,0.000000,0.087156 +90,0.996195,0.000000,0.000000,0.087156 +91,0.996195,0.000000,0.000000,0.087156 +92,0.996195,0.000000,0.000000,0.087156 +93,0.996195,0.000000,0.000000,0.087156 +94,0.996195,0.000000,0.000000,0.087156 +95,0.996195,0.000000,0.000000,0.087156 +96,0.996195,0.000000,0.000000,0.087156 +97,0.996195,0.000000,0.000000,0.087156 +98,0.996195,0.000000,0.000000,0.087156 +99,0.996195,0.000000,0.000000,0.087156 +100,0.996195,0.000000,0.000000,0.087156 +101,0.996195,0.000000,0.000000,0.087156 +102,0.996195,0.000000,0.000000,0.087156 +103,0.996195,0.000000,0.000000,0.087156 +104,0.996195,0.000000,0.000000,0.087156 +105,0.996195,0.000000,0.000000,0.087156 +106,0.996195,0.000000,0.000000,0.087156 +107,0.996195,0.000000,0.000000,0.087156 +108,0.996195,0.000000,0.000000,0.087156 +109,0.996195,0.000000,0.000000,0.087156 +110,0.996195,0.000000,0.000000,0.087156 +111,0.996195,0.000000,0.000000,0.087156 +112,0.996195,0.000000,0.000000,0.087156 +113,0.996195,0.000000,0.000000,0.087156 +114,0.996195,0.000000,0.000000,0.087156 +115,0.996195,0.000000,0.000000,0.087156 +116,0.996195,0.000000,0.000000,0.087156 +117,0.996195,0.000000,0.000000,0.087156 +118,0.996195,0.000000,0.000000,0.087156 +119,0.996195,0.000000,0.000000,0.087156 +120,0.996195,0.000000,0.000000,0.087156 +121,0.996195,0.000000,0.000000,0.087156 +122,0.996195,0.000000,0.000000,0.087156 +123,0.996195,0.000000,0.000000,0.087156 +124,0.996195,0.000000,0.000000,0.087156 +125,0.996195,0.000000,0.000000,0.087156 +126,0.996195,0.000000,0.000000,0.087156 +127,0.996195,0.000000,0.000000,0.087156 +128,0.996195,0.000000,0.000000,0.087156 +129,0.996195,0.000000,0.000000,0.087156 +130,0.996195,0.000000,0.000000,0.087156 +131,0.996195,0.000000,0.000000,0.087156 +132,0.996195,0.000000,0.000000,0.087156 +133,0.996195,0.000000,0.000000,0.087156 +134,0.996195,0.000000,0.000000,0.087156 +135,0.996195,0.000000,0.000000,0.087156 +136,0.996195,0.000000,0.000000,0.087156 +137,0.996195,0.000000,0.000000,0.087156 +138,0.996195,0.000000,0.000000,0.087156 +139,0.996195,0.000000,0.000000,0.087156 +140,0.996195,0.000000,0.000000,0.087156 +141,0.996195,0.000000,0.000000,0.087156 +142,0.996195,0.000000,0.000000,0.087156 +143,0.996195,0.000000,0.000000,0.087156 +144,0.996195,0.000000,0.000000,0.087156 +145,0.996195,0.000000,0.000000,0.087156 +146,0.996195,0.000000,0.000000,0.087156 +147,0.996195,0.000000,0.000000,0.087156 +148,0.996195,0.000000,0.000000,0.087156 +149,0.996195,0.000000,0.000000,0.087156 +150,0.996195,0.000000,0.000000,0.087156 +151,0.996195,0.000000,0.000000,0.087156 +152,0.996195,0.000000,0.000000,0.087156 +153,0.996195,0.000000,0.000000,0.087156 +154,0.996195,0.000000,0.000000,0.087156 +155,0.996195,0.000000,0.000000,0.087156 +156,0.996195,0.000000,0.000000,0.087156 +157,0.996195,0.000000,0.000000,0.087156 +158,0.996195,0.000000,0.000000,0.087156 +159,0.996195,0.000000,0.000000,0.087156 +160,0.996195,0.000000,0.000000,0.087156 +161,0.996195,0.000000,0.000000,0.087156 +162,0.996195,0.000000,0.000000,0.087156 +163,0.996195,0.000000,0.000000,0.087156 +164,0.996195,0.000000,0.000000,0.087156 +165,0.996195,0.000000,0.000000,0.087156 +166,0.996195,0.000000,0.000000,0.087156 +167,0.996195,0.000000,0.000000,0.087156 +168,0.996195,0.000000,0.000000,0.087156 +169,0.996195,0.000000,0.000000,0.087156 +170,0.996195,0.000000,0.000000,0.087156 +171,0.996195,0.000000,0.000000,0.087156 +172,0.996195,0.000000,0.000000,0.087156 +173,0.996195,0.000000,0.000000,0.087156 +174,0.996195,0.000000,0.000000,0.087156 +175,0.996195,0.000000,0.000000,0.087156 +176,0.996195,0.000000,0.000000,0.087156 +177,0.996195,0.000000,0.000000,0.087156 +178,0.996195,0.000000,0.000000,0.087156 +179,0.996195,0.000000,0.000000,0.087156 +180,0.996195,0.000000,0.000000,0.087156 +181,0.996195,0.000000,0.000000,0.087156 +182,0.996195,0.000000,0.000000,0.087156 +183,0.996195,0.000000,0.000000,0.087156 +184,0.996195,0.000000,0.000000,0.087156 +185,0.996195,0.000000,0.000000,0.087156 +186,0.996195,0.000000,0.000000,0.087156 +187,0.996195,0.000000,0.000000,0.087156 +188,0.996195,0.000000,0.000000,0.087156 +189,0.996195,0.000000,0.000000,0.087156 +190,0.996195,0.000000,0.000000,0.087156 +191,0.996195,0.000000,0.000000,0.087156 +192,0.996195,0.000000,0.000000,0.087156 +193,0.996195,0.000000,0.000000,0.087156 +194,0.996195,0.000000,0.000000,0.087156 +195,0.996195,0.000000,0.000000,0.087156 +196,0.996195,0.000000,0.000000,0.087156 +197,0.996195,0.000000,0.000000,0.087156 +198,0.996195,0.000000,0.000000,0.087156 +199,0.996195,0.000000,0.000000,0.087156 +200,0.996195,0.000000,0.000000,0.087156 +201,0.996195,0.000000,0.000000,0.087156 +202,0.996195,0.000000,0.000000,0.087156 +203,0.996195,0.000000,0.000000,0.087156 +204,0.996195,0.000000,0.000000,0.087156 +205,0.996195,0.000000,0.000000,0.087156 +206,0.996195,0.000000,0.000000,0.087156 +207,0.996195,0.000000,0.000000,0.087156 +208,0.996195,0.000000,0.000000,0.087156 +209,0.996195,0.000000,0.000000,0.087156 +210,0.996195,0.000000,0.000000,0.087156 +211,0.996195,0.000000,0.000000,0.087156 +212,0.996195,0.000000,0.000000,0.087156 +213,0.996195,0.000000,0.000000,0.087156 +214,0.996195,0.000000,0.000000,0.087156 +215,0.996195,0.000000,0.000000,0.087156 +216,0.996195,0.000000,0.000000,0.087156 +217,0.996195,0.000000,0.000000,0.087156 +218,0.996195,0.000000,0.000000,0.087156 +219,0.996195,0.000000,0.000000,0.087156 +220,0.996195,0.000000,0.000000,0.087156 +221,0.996195,0.000000,0.000000,0.087156 +222,0.996195,0.000000,0.000000,0.087156 +223,0.996195,0.000000,0.000000,0.087156 +224,0.996195,0.000000,0.000000,0.087156 +225,0.996195,0.000000,0.000000,0.087156 +226,0.996195,0.000000,0.000000,0.087156 +227,0.996195,0.000000,0.000000,0.087156 +228,0.996195,0.000000,0.000000,0.087156 +229,0.996195,0.000000,0.000000,0.087156 +230,0.996195,0.000000,0.000000,0.087156 +231,0.996195,0.000000,0.000000,0.087156 +232,0.996195,0.000000,0.000000,0.087156 +233,0.996195,0.000000,0.000000,0.087156 +234,0.996195,0.000000,0.000000,0.087156 +235,0.996195,0.000000,0.000000,0.087156 +236,0.996195,0.000000,0.000000,0.087156 +237,0.996195,0.000000,0.000000,0.087156 +238,0.996195,0.000000,0.000000,0.087156 +239,0.996195,0.000000,0.000000,0.087156 +240,0.996195,0.000000,0.000000,0.087156 +241,0.996195,0.000000,0.000000,0.087156 +242,0.996195,0.000000,0.000000,0.087156 +243,0.996195,0.000000,0.000000,0.087156 +244,0.996195,0.000000,0.000000,0.087156 +245,0.996195,0.000000,0.000000,0.087156 +246,0.996195,0.000000,0.000000,0.087156 +247,0.996195,0.000000,0.000000,0.087156 +248,0.996195,0.000000,0.000000,0.087156 +249,0.996195,0.000000,0.000000,0.087156 +250,0.996195,0.000000,0.000000,0.087156 +251,0.996195,0.000000,0.000000,0.087156 +252,0.996195,0.000000,0.000000,0.087156 +253,0.996195,0.000000,0.000000,0.087156 +254,0.996195,0.000000,0.000000,0.087156 +255,0.996195,0.000000,0.000000,0.087156 +256,0.996195,0.000000,0.000000,0.087156 +257,0.996195,0.000000,0.000000,0.087156 +258,0.996195,0.000000,0.000000,0.087156 +259,0.996195,0.000000,0.000000,0.087156 +260,0.996195,0.000000,0.000000,0.087156 +261,0.996195,0.000000,0.000000,0.087156 +262,0.996195,0.000000,0.000000,0.087156 +263,0.996195,0.000000,0.000000,0.087156 +264,0.996195,0.000000,0.000000,0.087156 +265,0.996195,0.000000,0.000000,0.087156 +266,0.996195,0.000000,0.000000,0.087156 +267,0.996195,0.000000,0.000000,0.087156 +268,0.996195,0.000000,0.000000,0.087156 +269,0.996195,0.000000,0.000000,0.087156 +270,0.996195,0.000000,0.000000,0.087156 +271,0.996195,0.000000,0.000000,0.087156 +272,0.996195,0.000000,0.000000,0.087156 +273,0.996195,0.000000,0.000000,0.087156 +274,0.996195,0.000000,0.000000,0.087156 +275,0.996195,0.000000,0.000000,0.087156 +276,0.996195,0.000000,0.000000,0.087156 +277,0.996195,0.000000,0.000000,0.087156 +278,0.996195,0.000000,0.000000,0.087156 +279,0.996195,0.000000,0.000000,0.087156 +280,0.996195,0.000000,0.000000,0.087156 +281,0.996195,0.000000,0.000000,0.087156 +282,0.996195,0.000000,0.000000,0.087156 +283,0.996195,0.000000,0.000000,0.087156 +284,0.996195,0.000000,0.000000,0.087156 +285,0.996195,0.000000,0.000000,0.087156 +286,0.996195,0.000000,0.000000,0.087156 +287,0.996195,0.000000,0.000000,0.087156 +288,0.996195,0.000000,0.000000,0.087156 +289,0.996195,0.000000,0.000000,0.087156 +290,0.996195,0.000000,0.000000,0.087156 +291,0.996195,0.000000,0.000000,0.087156 +292,0.996195,0.000000,0.000000,0.087156 +293,0.996195,0.000000,0.000000,0.087156 +294,0.996195,0.000000,0.000000,0.087156 +295,0.996195,0.000000,0.000000,0.087156 +296,0.996195,0.000000,0.000000,0.087156 +297,0.996195,0.000000,0.000000,0.087156 +298,0.996195,0.000000,0.000000,0.087156 +299,0.996195,0.000000,0.000000,0.087156 +300,0.996195,0.000000,0.000000,0.087156 +301,0.996195,0.000000,0.000000,0.087156 +302,0.996195,0.000000,0.000000,0.087156 +303,0.996195,0.000000,0.000000,0.087156 +304,0.996195,0.000000,0.000000,0.087156 +305,0.996195,0.000000,0.000000,0.087156 +306,0.996195,0.000000,0.000000,0.087156 +307,0.996195,0.000000,0.000000,0.087156 +308,0.996195,0.000000,0.000000,0.087156 +309,0.996195,0.000000,0.000000,0.087156 +310,0.996195,0.000000,0.000000,0.087156 +311,0.996195,0.000000,0.000000,0.087156 +312,0.996195,0.000000,0.000000,0.087156 +313,0.996195,0.000000,0.000000,0.087156 +314,0.996195,0.000000,0.000000,0.087156 +315,0.996195,0.000000,0.000000,0.087156 +316,0.996195,0.000000,0.000000,0.087156 +317,0.996195,0.000000,0.000000,0.087156 +318,0.996195,0.000000,0.000000,0.087156 +319,0.996195,0.000000,0.000000,0.087156 +320,0.996195,0.000000,0.000000,0.087156 +321,0.996195,0.000000,0.000000,0.087156 +322,0.996195,0.000000,0.000000,0.087156 +323,0.996195,0.000000,0.000000,0.087156 +324,0.996195,0.000000,0.000000,0.087156 +325,0.996195,0.000000,0.000000,0.087156 +326,0.996195,0.000000,0.000000,0.087156 +327,0.996195,0.000000,0.000000,0.087156 +328,0.996195,0.000000,0.000000,0.087156 +329,0.996195,0.000000,0.000000,0.087156 +330,0.996195,0.000000,0.000000,0.087156 +331,0.996195,0.000000,0.000000,0.087156 +332,0.996195,0.000000,0.000000,0.087156 +333,0.996195,0.000000,0.000000,0.087156 +334,0.996195,0.000000,0.000000,0.087156 +335,0.996195,0.000000,0.000000,0.087156 +336,0.996195,0.000000,0.000000,0.087156 +337,0.996195,0.000000,0.000000,0.087156 +338,0.996195,0.000000,0.000000,0.087156 +339,0.996195,0.000000,0.000000,0.087156 +340,0.996195,0.000000,0.000000,0.087156 +341,0.996195,0.000000,0.000000,0.087156 +342,0.996195,0.000000,0.000000,0.087156 +343,0.996195,0.000000,0.000000,0.087156 +344,0.996195,0.000000,0.000000,0.087156 +345,0.996195,0.000000,0.000000,0.087156 +346,0.996195,0.000000,0.000000,0.087156 +347,0.996195,0.000000,0.000000,0.087156 +348,0.996195,0.000000,0.000000,0.087156 +349,0.996195,0.000000,0.000000,0.087156 +350,0.996195,0.000000,0.000000,0.087156 +351,0.996195,0.000000,0.000000,0.087156 +352,0.996195,0.000000,0.000000,0.087156 +353,0.996195,0.000000,0.000000,0.087156 +354,0.996195,0.000000,0.000000,0.087156 +355,0.996195,0.000000,0.000000,0.087156 +356,0.996195,0.000000,0.000000,0.087156 +357,0.996195,0.000000,0.000000,0.087156 +358,0.996195,0.000000,0.000000,0.087156 +359,0.996195,0.000000,0.000000,0.087156 +360,0.996195,0.000000,0.000000,0.087156 +361,0.996195,0.000000,0.000000,0.087156 +362,0.996195,0.000000,0.000000,0.087156 +363,0.996195,0.000000,0.000000,0.087156 +364,0.996195,0.000000,0.000000,0.087156 +365,0.996195,0.000000,0.000000,0.087156 +366,0.996195,0.000000,0.000000,0.087156 +367,0.996195,0.000000,0.000000,0.087156 +368,0.996195,0.000000,0.000000,0.087156 +369,0.996195,0.000000,0.000000,0.087156 +370,0.996195,0.000000,0.000000,0.087156 +371,0.996195,0.000000,0.000000,0.087156 +372,0.996195,0.000000,0.000000,0.087156 +373,0.996195,0.000000,0.000000,0.087156 +374,0.996195,0.000000,0.000000,0.087156 +375,0.996195,0.000000,0.000000,0.087156 +376,0.996195,0.000000,0.000000,0.087156 +377,0.996195,0.000000,0.000000,0.087156 +378,0.996195,0.000000,0.000000,0.087156 +379,0.996195,0.000000,0.000000,0.087156 +380,0.996195,0.000000,0.000000,0.087156 +381,0.996195,0.000000,0.000000,0.087156 +382,0.996195,0.000000,0.000000,0.087156 +383,0.996195,0.000000,0.000000,0.087156 +384,0.996195,0.000000,0.000000,0.087156 +385,0.996195,0.000000,0.000000,0.087156 +386,0.996195,0.000000,0.000000,0.087156 +387,0.996195,0.000000,0.000000,0.087156 +388,0.996195,0.000000,0.000000,0.087156 +389,0.996195,0.000000,0.000000,0.087156 +390,0.996195,0.000000,0.000000,0.087156 +391,0.996195,0.000000,0.000000,0.087156 +392,0.996195,0.000000,0.000000,0.087156 +393,0.996195,0.000000,0.000000,0.087156 +394,0.996195,0.000000,0.000000,0.087156 +395,0.996195,0.000000,0.000000,0.087156 +396,0.996195,0.000000,0.000000,0.087156 +397,0.996195,0.000000,0.000000,0.087156 +398,0.996195,0.000000,0.000000,0.087156 +399,0.996195,0.000000,0.000000,0.087156 +400,0.996195,0.000000,0.000000,0.087156 +401,0.996195,0.000000,0.000000,0.087156 +402,0.996195,0.000000,0.000000,0.087156 +403,0.996195,0.000000,0.000000,0.087156 +404,0.996195,0.000000,0.000000,0.087156 +405,0.996195,0.000000,0.000000,0.087156 +406,0.996195,0.000000,0.000000,0.087156 +407,0.996195,0.000000,0.000000,0.087156 +408,0.996195,0.000000,0.000000,0.087156 +409,0.996195,0.000000,0.000000,0.087156 +410,0.996195,0.000000,0.000000,0.087156 +411,0.996195,0.000000,0.000000,0.087156 +412,0.996195,0.000000,0.000000,0.087156 +413,0.996195,0.000000,0.000000,0.087156 +414,0.996195,0.000000,0.000000,0.087156 +415,0.996195,0.000000,0.000000,0.087156 +416,0.996195,0.000000,0.000000,0.087156 +417,0.996195,0.000000,0.000000,0.087156 +418,0.996195,0.000000,0.000000,0.087156 +419,0.996195,0.000000,0.000000,0.087156 +420,0.996195,0.000000,0.000000,0.087156 +421,0.996195,0.000000,0.000000,0.087156 +422,0.996195,0.000000,0.000000,0.087156 +423,0.996195,0.000000,0.000000,0.087156 +424,0.996195,0.000000,0.000000,0.087156 +425,0.996195,0.000000,0.000000,0.087156 +426,0.996195,0.000000,0.000000,0.087156 +427,0.996195,0.000000,0.000000,0.087156 +428,0.996195,0.000000,0.000000,0.087156 +429,0.996195,0.000000,0.000000,0.087156 +430,0.996195,0.000000,0.000000,0.087156 +431,0.996195,0.000000,0.000000,0.087156 +432,0.996195,0.000000,0.000000,0.087156 +433,0.996195,0.000000,0.000000,0.087156 +434,0.996195,0.000000,0.000000,0.087156 +435,0.996195,0.000000,0.000000,0.087156 +436,0.996195,0.000000,0.000000,0.087156 +437,0.996195,0.000000,0.000000,0.087156 +438,0.996195,0.000000,0.000000,0.087156 +439,0.996195,0.000000,0.000000,0.087156 +440,0.996195,0.000000,0.000000,0.087156 +441,0.996195,0.000000,0.000000,0.087156 +442,0.996195,0.000000,0.000000,0.087156 +443,0.996195,0.000000,0.000000,0.087156 +444,0.996195,0.000000,0.000000,0.087156 +445,0.996195,0.000000,0.000000,0.087156 +446,0.996195,0.000000,0.000000,0.087156 +447,0.996195,0.000000,0.000000,0.087156 +448,0.996195,0.000000,0.000000,0.087156 +449,0.996195,0.000000,0.000000,0.087156 +450,0.996195,0.000000,0.000000,0.087156 +451,0.996195,0.000000,0.000000,0.087156 +452,0.996195,0.000000,0.000000,0.087156 +453,0.996195,0.000000,0.000000,0.087156 +454,0.996195,0.000000,0.000000,0.087156 +455,0.996195,0.000000,0.000000,0.087156 +456,0.996195,0.000000,0.000000,0.087156 +457,0.996195,0.000000,0.000000,0.087156 +458,0.996195,0.000000,0.000000,0.087156 +459,0.996195,0.000000,0.000000,0.087156 +460,0.996195,0.000000,0.000000,0.087156 +461,0.996195,0.000000,0.000000,0.087156 +462,0.996195,0.000000,0.000000,0.087156 +463,0.996195,0.000000,0.000000,0.087156 +464,0.996195,0.000000,0.000000,0.087156 +465,0.996195,0.000000,0.000000,0.087156 +466,0.996195,0.000000,0.000000,0.087156 +467,0.996195,0.000000,0.000000,0.087156 +468,0.996195,0.000000,0.000000,0.087156 +469,0.996195,0.000000,0.000000,0.087156 +470,0.996195,0.000000,0.000000,0.087156 +471,0.996195,0.000000,0.000000,0.087156 +472,0.996195,0.000000,0.000000,0.087156 +473,0.996195,0.000000,0.000000,0.087156 +474,0.996195,0.000000,0.000000,0.087156 +475,0.996195,0.000000,0.000000,0.087156 +476,0.996195,0.000000,0.000000,0.087156 +477,0.996195,0.000000,0.000000,0.087156 +478,0.996195,0.000000,0.000000,0.087156 +479,0.996195,0.000000,0.000000,0.087156 +480,0.996195,0.000000,0.000000,0.087156 +481,0.996195,0.000000,0.000000,0.087156 +482,0.996195,0.000000,0.000000,0.087156 +483,0.996195,0.000000,0.000000,0.087156 +484,0.996195,0.000000,0.000000,0.087156 +485,0.996195,0.000000,0.000000,0.087156 +486,0.996195,0.000000,0.000000,0.087156 +487,0.996195,0.000000,0.000000,0.087156 +488,0.996195,0.000000,0.000000,0.087156 +489,0.996195,0.000000,0.000000,0.087156 +490,0.996195,0.000000,0.000000,0.087156 +491,0.996195,0.000000,0.000000,0.087156 +492,0.996195,0.000000,0.000000,0.087156 +493,0.996195,0.000000,0.000000,0.087156 +494,0.996195,0.000000,0.000000,0.087156 +495,0.996195,0.000000,0.000000,0.087156 +496,0.996195,0.000000,0.000000,0.087156 +497,0.996195,0.000000,0.000000,0.087156 +498,0.996195,0.000000,0.000000,0.087156 +499,0.996195,0.000000,0.000000,0.087156 +500,0.996195,0.000000,0.000000,0.087156 +501,0.996195,0.000000,0.000000,0.087156 +502,0.996195,0.000000,0.000000,0.087156 +503,0.996195,0.000000,0.000000,0.087156 +504,0.996195,0.000000,0.000000,0.087156 +505,0.996195,0.000000,0.000000,0.087156 +506,0.996195,0.000000,0.000000,0.087156 +507,0.996195,0.000000,0.000000,0.087156 +508,0.996195,0.000000,0.000000,0.087156 +509,0.996195,0.000000,0.000000,0.087156 +510,0.996195,0.000000,0.000000,0.087156 +511,0.996195,0.000000,0.000000,0.087156 +512,0.996195,0.000000,0.000000,0.087156 +513,0.996195,0.000000,0.000000,0.087156 +514,0.996195,0.000000,0.000000,0.087156 +515,0.996195,0.000000,0.000000,0.087156 +516,0.996195,0.000000,0.000000,0.087156 +517,0.996195,0.000000,0.000000,0.087156 +518,0.996195,0.000000,0.000000,0.087156 +519,0.996195,0.000000,0.000000,0.087156 +520,0.996195,0.000000,0.000000,0.087156 +521,0.996195,0.000000,0.000000,0.087156 +522,0.996195,0.000000,0.000000,0.087156 +523,0.996195,0.000000,0.000000,0.087156 +524,0.996195,0.000000,0.000000,0.087156 +525,0.996195,0.000000,0.000000,0.087156 +526,0.996195,0.000000,0.000000,0.087156 +527,0.996195,0.000000,0.000000,0.087156 +528,0.996195,0.000000,0.000000,0.087156 +529,0.996195,0.000000,0.000000,0.087156 +530,0.996195,0.000000,0.000000,0.087156 +531,0.996195,0.000000,0.000000,0.087156 +532,0.996195,0.000000,0.000000,0.087156 +533,0.996195,0.000000,0.000000,0.087156 +534,0.996195,0.000000,0.000000,0.087156 +535,0.996195,0.000000,0.000000,0.087156 +536,0.996195,0.000000,0.000000,0.087156 +537,0.996195,0.000000,0.000000,0.087156 +538,0.996195,0.000000,0.000000,0.087156 +539,0.996195,0.000000,0.000000,0.087156 +540,0.996195,0.000000,0.000000,0.087156 +541,0.996195,0.000000,0.000000,0.087156 +542,0.996195,0.000000,0.000000,0.087156 +543,0.996195,0.000000,0.000000,0.087156 +544,0.996195,0.000000,0.000000,0.087156 +545,0.996195,0.000000,0.000000,0.087156 +546,0.996195,0.000000,0.000000,0.087156 +547,0.996195,0.000000,0.000000,0.087156 +548,0.996195,0.000000,0.000000,0.087156 +549,0.996195,0.000000,0.000000,0.087156 +550,0.996195,0.000000,0.000000,0.087156 +551,0.996195,0.000000,0.000000,0.087156 +552,0.996195,0.000000,0.000000,0.087156 +553,0.996195,0.000000,0.000000,0.087156 +554,0.996195,0.000000,0.000000,0.087156 +555,0.996195,0.000000,0.000000,0.087156 +556,0.996195,0.000000,0.000000,0.087156 +557,0.996195,0.000000,0.000000,0.087156 +558,0.996195,0.000000,0.000000,0.087156 +559,0.996195,0.000000,0.000000,0.087156 +560,0.996195,0.000000,0.000000,0.087156 +561,0.996195,0.000000,0.000000,0.087156 +562,0.996195,0.000000,0.000000,0.087156 +563,0.996195,0.000000,0.000000,0.087156 +564,0.996195,0.000000,0.000000,0.087156 +565,0.996195,0.000000,0.000000,0.087156 +566,0.996195,0.000000,0.000000,0.087156 +567,0.996195,0.000000,0.000000,0.087156 +568,0.996195,0.000000,0.000000,0.087156 +569,0.996195,0.000000,0.000000,0.087156 +570,0.996195,0.000000,0.000000,0.087156 +571,0.996195,0.000000,0.000000,0.087156 +572,0.996195,0.000000,0.000000,0.087156 +573,0.996195,0.000000,0.000000,0.087156 +574,0.996195,0.000000,0.000000,0.087156 +575,0.996195,0.000000,0.000000,0.087156 +576,0.996195,0.000000,0.000000,0.087156 +577,0.996195,0.000000,0.000000,0.087156 +578,0.996195,0.000000,0.000000,0.087156 +579,0.996195,0.000000,0.000000,0.087156 +580,0.996195,0.000000,0.000000,0.087156 +581,0.996195,0.000000,0.000000,0.087156 +582,0.996195,0.000000,0.000000,0.087156 +583,0.996195,0.000000,0.000000,0.087156 +584,0.996195,0.000000,0.000000,0.087156 +585,0.996195,0.000000,0.000000,0.087156 +586,0.996195,0.000000,0.000000,0.087156 +587,0.996195,0.000000,0.000000,0.087156 +588,0.996195,0.000000,0.000000,0.087156 +589,0.996195,0.000000,0.000000,0.087156 +590,0.996195,0.000000,0.000000,0.087156 +591,0.996195,0.000000,0.000000,0.087156 +592,0.996195,0.000000,0.000000,0.087156 +593,0.996195,0.000000,0.000000,0.087156 +594,0.996195,0.000000,0.000000,0.087156 +595,0.996195,0.000000,0.000000,0.087156 +596,0.996195,0.000000,0.000000,0.087156 +597,0.996195,0.000000,0.000000,0.087156 +598,0.996195,0.000000,0.000000,0.087156 +599,0.996195,0.000000,0.000000,0.087156 +600,0.996195,0.000000,0.000000,0.087156 +601,0.996195,0.000000,0.000000,0.087156 +602,0.996195,0.000000,0.000000,0.087156 +603,0.996195,0.000000,0.000000,0.087156 +604,0.996195,0.000000,0.000000,0.087156 +605,0.996195,0.000000,0.000000,0.087156 +606,0.996195,0.000000,0.000000,0.087156 +607,0.996195,0.000000,0.000000,0.087156 +608,0.996195,0.000000,0.000000,0.087156 +609,0.996195,0.000000,0.000000,0.087156 +610,0.996195,0.000000,0.000000,0.087156 +611,0.996195,0.000000,0.000000,0.087156 +612,0.996195,0.000000,0.000000,0.087156 +613,0.996195,0.000000,0.000000,0.087156 +614,0.996195,0.000000,0.000000,0.087156 +615,0.996195,0.000000,0.000000,0.087156 +616,0.996195,0.000000,0.000000,0.087156 +617,0.996195,0.000000,0.000000,0.087156 +618,0.996195,0.000000,0.000000,0.087156 +619,0.996195,0.000000,0.000000,0.087156 +620,0.996195,0.000000,0.000000,0.087156 +621,0.996195,0.000000,0.000000,0.087156 +622,0.996195,0.000000,0.000000,0.087156 +623,0.996195,0.000000,0.000000,0.087156 +624,0.996195,0.000000,0.000000,0.087156 +625,0.996195,0.000000,0.000000,0.087156 +626,0.996195,0.000000,0.000000,0.087156 +627,0.996195,0.000000,0.000000,0.087156 +628,0.996195,0.000000,0.000000,0.087156 +629,0.996195,0.000000,0.000000,0.087156 +630,0.996195,0.000000,0.000000,0.087156 +631,0.996195,0.000000,0.000000,0.087156 +632,0.996195,0.000000,0.000000,0.087156 +633,0.996195,0.000000,0.000000,0.087156 +634,0.996195,0.000000,0.000000,0.087156 +635,0.996195,0.000000,0.000000,0.087156 +636,0.996195,0.000000,0.000000,0.087156 +637,0.996195,0.000000,0.000000,0.087156 +638,0.996195,0.000000,0.000000,0.087156 +639,0.996195,0.000000,0.000000,0.087156 +640,0.996195,0.000000,0.000000,0.087156 +641,0.996195,0.000000,0.000000,0.087156 +642,0.996195,0.000000,0.000000,0.087156 +643,0.996195,0.000000,0.000000,0.087156 +644,0.996195,0.000000,0.000000,0.087156 +645,0.996195,0.000000,0.000000,0.087156 +646,0.996195,0.000000,0.000000,0.087156 +647,0.996195,0.000000,0.000000,0.087156 +648,0.996195,0.000000,0.000000,0.087156 +649,0.996195,0.000000,0.000000,0.087156 +650,0.996195,0.000000,0.000000,0.087156 +651,0.996195,0.000000,0.000000,0.087156 +652,0.996195,0.000000,0.000000,0.087156 +653,0.996195,0.000000,0.000000,0.087156 +654,0.996195,0.000000,0.000000,0.087156 +655,0.996195,0.000000,0.000000,0.087156 +656,0.996195,0.000000,0.000000,0.087156 +657,0.996195,0.000000,0.000000,0.087156 +658,0.996195,0.000000,0.000000,0.087156 +659,0.996195,0.000000,0.000000,0.087156 +660,0.996195,0.000000,0.000000,0.087156 +661,0.996195,0.000000,0.000000,0.087156 +662,0.996195,0.000000,0.000000,0.087156 +663,0.996195,0.000000,0.000000,0.087156 +664,0.996195,0.000000,0.000000,0.087156 +665,0.996195,0.000000,0.000000,0.087156 +666,0.996195,0.000000,0.000000,0.087156 +667,0.996195,0.000000,0.000000,0.087156 +668,0.996195,0.000000,0.000000,0.087156 +669,0.996195,0.000000,0.000000,0.087156 +670,0.996195,0.000000,0.000000,0.087156 +671,0.996195,0.000000,0.000000,0.087156 +672,0.996195,0.000000,0.000000,0.087156 +673,0.996195,0.000000,0.000000,0.087156 +674,0.996195,0.000000,0.000000,0.087156 +675,0.996195,0.000000,0.000000,0.087156 +676,0.996195,0.000000,0.000000,0.087156 +677,0.996195,0.000000,0.000000,0.087156 +678,0.996195,0.000000,0.000000,0.087156 +679,0.996195,0.000000,0.000000,0.087156 +680,0.996195,0.000000,0.000000,0.087156 +681,0.996195,0.000000,0.000000,0.087156 +682,0.996195,0.000000,0.000000,0.087156 +683,0.996195,0.000000,0.000000,0.087156 +684,0.996195,0.000000,0.000000,0.087156 +685,0.996195,0.000000,0.000000,0.087156 +686,0.996195,0.000000,0.000000,0.087156 +687,0.996195,0.000000,0.000000,0.087156 +688,0.996195,0.000000,0.000000,0.087156 +689,0.996195,0.000000,0.000000,0.087156 +690,0.996195,0.000000,0.000000,0.087156 +691,0.996195,0.000000,0.000000,0.087156 +692,0.996195,0.000000,0.000000,0.087156 +693,0.996195,0.000000,0.000000,0.087156 +694,0.996195,0.000000,0.000000,0.087156 +695,0.996195,0.000000,0.000000,0.087156 +696,0.996195,0.000000,0.000000,0.087156 +697,0.996195,0.000000,0.000000,0.087156 +698,0.996195,0.000000,0.000000,0.087156 +699,0.996195,0.000000,0.000000,0.087156 +700,0.996195,0.000000,0.000000,0.087156 +701,0.996195,0.000000,0.000000,0.087156 +702,0.996195,0.000000,0.000000,0.087156 +703,0.996195,0.000000,0.000000,0.087156 +704,0.996195,0.000000,0.000000,0.087156 +705,0.996195,0.000000,0.000000,0.087156 +706,0.996195,0.000000,0.000000,0.087156 +707,0.996195,0.000000,0.000000,0.087156 +708,0.996195,0.000000,0.000000,0.087156 +709,0.996195,0.000000,0.000000,0.087156 +710,0.996195,0.000000,0.000000,0.087156 +711,0.996195,0.000000,0.000000,0.087156 +712,0.996195,0.000000,0.000000,0.087156 +713,0.996195,0.000000,0.000000,0.087156 +714,0.996195,0.000000,0.000000,0.087156 +715,0.996195,0.000000,0.000000,0.087156 +716,0.996195,0.000000,0.000000,0.087156 +717,0.996195,0.000000,0.000000,0.087156 +718,0.996195,0.000000,0.000000,0.087156 +719,0.996195,0.000000,0.000000,0.087156 +720,0.996195,0.000000,0.000000,0.087156 +721,0.996195,0.000000,0.000000,0.087156 +722,0.996195,0.000000,0.000000,0.087156 +723,0.996195,0.000000,0.000000,0.087156 +724,0.996195,0.000000,0.000000,0.087156 +725,0.996195,0.000000,0.000000,0.087156 +726,0.996195,0.000000,0.000000,0.087156 +727,0.996195,0.000000,0.000000,0.087156 +728,0.996195,0.000000,0.000000,0.087156 +729,0.996195,0.000000,0.000000,0.087156 +730,0.996195,0.000000,0.000000,0.087156 +731,0.996195,0.000000,0.000000,0.087156 +732,0.996195,0.000000,0.000000,0.087156 +733,0.996195,0.000000,0.000000,0.087156 +734,0.996195,0.000000,0.000000,0.087156 +735,0.996195,0.000000,0.000000,0.087156 +736,0.996195,0.000000,0.000000,0.087156 +737,0.996195,0.000000,0.000000,0.087156 +738,0.996195,0.000000,0.000000,0.087156 +739,0.996195,0.000000,0.000000,0.087156 +740,0.996195,0.000000,0.000000,0.087156 +741,0.996195,0.000000,0.000000,0.087156 +742,0.996195,0.000000,0.000000,0.087156 +743,0.996195,0.000000,0.000000,0.087156 +744,0.996195,0.000000,0.000000,0.087156 +745,0.996195,0.000000,0.000000,0.087156 +746,0.996195,0.000000,0.000000,0.087156 +747,0.996195,0.000000,0.000000,0.087156 +748,0.996195,0.000000,0.000000,0.087156 +749,0.996195,0.000000,0.000000,0.087156 +750,0.996195,0.000000,0.000000,0.087156 +751,0.996195,0.000000,0.000000,0.087156 +752,0.996195,0.000000,0.000000,0.087156 +753,0.996195,0.000000,0.000000,0.087156 +754,0.996195,0.000000,0.000000,0.087156 +755,0.996195,0.000000,0.000000,0.087156 +756,0.996195,0.000000,0.000000,0.087156 +757,0.996195,0.000000,0.000000,0.087156 +758,0.996195,0.000000,0.000000,0.087156 +759,0.996195,0.000000,0.000000,0.087156 +760,0.996195,0.000000,0.000000,0.087156 +761,0.996195,0.000000,0.000000,0.087156 +762,0.996195,0.000000,0.000000,0.087156 +763,0.996195,0.000000,0.000000,0.087156 +764,0.996195,0.000000,0.000000,0.087156 +765,0.996195,0.000000,0.000000,0.087156 +766,0.996195,0.000000,0.000000,0.087156 +767,0.996195,0.000000,0.000000,0.087156 +768,0.996195,0.000000,0.000000,0.087156 +769,0.996195,0.000000,0.000000,0.087156 +770,0.996195,0.000000,0.000000,0.087156 +771,0.996195,0.000000,0.000000,0.087156 +772,0.996195,0.000000,0.000000,0.087156 +773,0.996195,0.000000,0.000000,0.087156 +774,0.996195,0.000000,0.000000,0.087156 +775,0.996195,0.000000,0.000000,0.087156 +776,0.996195,0.000000,0.000000,0.087156 +777,0.996195,0.000000,0.000000,0.087156 +778,0.996195,0.000000,0.000000,0.087156 +779,0.996195,0.000000,0.000000,0.087156 +780,0.996195,0.000000,0.000000,0.087156 +781,0.996195,0.000000,0.000000,0.087156 +782,0.996195,0.000000,0.000000,0.087156 +783,0.996195,0.000000,0.000000,0.087156 +784,0.996195,0.000000,0.000000,0.087156 +785,0.996195,0.000000,0.000000,0.087156 +786,0.996195,0.000000,0.000000,0.087156 +787,0.996195,0.000000,0.000000,0.087156 +788,0.996195,0.000000,0.000000,0.087156 +789,0.996195,0.000000,0.000000,0.087156 +790,0.996195,0.000000,0.000000,0.087156 +791,0.996195,0.000000,0.000000,0.087156 +792,0.996195,0.000000,0.000000,0.087156 +793,0.996195,0.000000,0.000000,0.087156 +794,0.996195,0.000000,0.000000,0.087156 +795,0.996195,0.000000,0.000000,0.087156 +796,0.996195,0.000000,0.000000,0.087156 +797,0.996195,0.000000,0.000000,0.087156 +798,0.996195,0.000000,0.000000,0.087156 +799,0.996195,0.000000,0.000000,0.087156 +800,0.996195,0.000000,0.000000,0.087156 +801,0.995989,0.000000,0.000000,0.089474 +802,0.995778,0.000000,0.000000,0.091791 +803,0.995562,0.000000,0.000000,0.094108 +804,0.995340,0.000000,0.000000,0.096425 +805,0.995113,0.000000,0.000000,0.098741 +806,0.994881,0.000000,0.000000,0.101056 +807,0.994643,0.000000,0.000000,0.103371 +808,0.994400,0.000000,0.000000,0.105686 +809,0.994151,0.000000,0.000000,0.107999 +810,0.993897,0.000000,0.000000,0.110313 +811,0.993638,0.000000,0.000000,0.112625 +812,0.993373,0.000000,0.000000,0.114937 +813,0.993103,0.000000,0.000000,0.117249 +814,0.992827,0.000000,0.000000,0.119559 +815,0.992546,0.000000,0.000000,0.121869 +816,0.992260,0.000000,0.000000,0.124179 +817,0.991968,0.000000,0.000000,0.126488 +818,0.991671,0.000000,0.000000,0.128796 +819,0.991369,0.000000,0.000000,0.131103 +820,0.991061,0.000000,0.000000,0.133410 +821,0.990748,0.000000,0.000000,0.135716 +822,0.990429,0.000000,0.000000,0.138021 +823,0.990105,0.000000,0.000000,0.140325 +824,0.989776,0.000000,0.000000,0.142629 +825,0.989442,0.000000,0.000000,0.144932 +826,0.989102,0.000000,0.000000,0.147234 +827,0.988756,0.000000,0.000000,0.149535 +828,0.988406,0.000000,0.000000,0.151836 +829,0.988050,0.000000,0.000000,0.154136 +830,0.987688,0.000000,0.000000,0.156434 +831,0.987322,0.000000,0.000000,0.158732 +832,0.986950,0.000000,0.000000,0.161030 +833,0.986572,0.000000,0.000000,0.163326 +834,0.986189,0.000000,0.000000,0.165621 +835,0.985801,0.000000,0.000000,0.167916 +836,0.985408,0.000000,0.000000,0.170209 +837,0.985009,0.000000,0.000000,0.172502 +838,0.984605,0.000000,0.000000,0.174794 +839,0.984196,0.000000,0.000000,0.177085 +840,0.983781,0.000000,0.000000,0.179375 +841,0.983361,0.000000,0.000000,0.181663 +842,0.982935,0.000000,0.000000,0.183951 +843,0.982505,0.000000,0.000000,0.186238 +844,0.982069,0.000000,0.000000,0.188524 +845,0.981627,0.000000,0.000000,0.190809 +846,0.981180,0.000000,0.000000,0.193093 +847,0.980728,0.000000,0.000000,0.195376 +848,0.980271,0.000000,0.000000,0.197657 +849,0.979809,0.000000,0.000000,0.199938 +850,0.979341,0.000000,0.000000,0.202218 +851,0.978867,0.000000,0.000000,0.204496 +852,0.978389,0.000000,0.000000,0.206773 +853,0.977905,0.000000,0.000000,0.209050 +854,0.977416,0.000000,0.000000,0.211325 +855,0.976921,0.000000,0.000000,0.213599 +856,0.976422,0.000000,0.000000,0.215872 +857,0.975917,0.000000,0.000000,0.218143 +858,0.975406,0.000000,0.000000,0.220414 +859,0.974891,0.000000,0.000000,0.222683 +860,0.974370,0.000000,0.000000,0.224951 +861,0.973844,0.000000,0.000000,0.227218 +862,0.973313,0.000000,0.000000,0.229484 +863,0.972776,0.000000,0.000000,0.231748 +864,0.972234,0.000000,0.000000,0.234011 +865,0.971687,0.000000,0.000000,0.236273 +866,0.971134,0.000000,0.000000,0.238533 +867,0.970577,0.000000,0.000000,0.240793 +868,0.970014,0.000000,0.000000,0.243051 +869,0.969445,0.000000,0.000000,0.245307 +870,0.968872,0.000000,0.000000,0.247563 +871,0.968293,0.000000,0.000000,0.249817 +872,0.967709,0.000000,0.000000,0.252069 +873,0.967120,0.000000,0.000000,0.254321 +874,0.966526,0.000000,0.000000,0.256571 +875,0.965926,0.000000,0.000000,0.258819 +876,0.965321,0.000000,0.000000,0.261066 +877,0.964711,0.000000,0.000000,0.263312 +878,0.964095,0.000000,0.000000,0.265556 +879,0.963475,0.000000,0.000000,0.267799 +880,0.962849,0.000000,0.000000,0.270040 +881,0.962218,0.000000,0.000000,0.272280 +882,0.961582,0.000000,0.000000,0.274519 +883,0.960940,0.000000,0.000000,0.276756 +884,0.960294,0.000000,0.000000,0.278991 +885,0.959642,0.000000,0.000000,0.281225 +886,0.958985,0.000000,0.000000,0.283457 +887,0.958323,0.000000,0.000000,0.285688 +888,0.957655,0.000000,0.000000,0.287918 +889,0.956983,0.000000,0.000000,0.290145 +890,0.956305,0.000000,0.000000,0.292372 +891,0.955622,0.000000,0.000000,0.294596 +892,0.954934,0.000000,0.000000,0.296819 +893,0.954240,0.000000,0.000000,0.299041 +894,0.953542,0.000000,0.000000,0.301261 +895,0.952838,0.000000,0.000000,0.303479 +896,0.952129,0.000000,0.000000,0.305695 +897,0.951415,0.000000,0.000000,0.307910 +898,0.950696,0.000000,0.000000,0.310123 +899,0.949972,0.000000,0.000000,0.312335 +900,0.949243,0.000000,0.000000,0.314545 +901,0.948508,0.000000,0.000000,0.316753 +902,0.947768,0.000000,0.000000,0.318959 +903,0.947024,0.000000,0.000000,0.321164 +904,0.946274,0.000000,0.000000,0.323367 +905,0.945519,0.000000,0.000000,0.325568 +906,0.944758,0.000000,0.000000,0.327768 +907,0.943993,0.000000,0.000000,0.329965 +908,0.943223,0.000000,0.000000,0.332161 +909,0.942447,0.000000,0.000000,0.334355 +910,0.941667,0.000000,0.000000,0.336547 +911,0.940881,0.000000,0.000000,0.338738 +912,0.940090,0.000000,0.000000,0.340927 +913,0.939294,0.000000,0.000000,0.343113 +914,0.938493,0.000000,0.000000,0.345298 +915,0.937687,0.000000,0.000000,0.347481 +916,0.936876,0.000000,0.000000,0.349662 +917,0.936060,0.000000,0.000000,0.351842 +918,0.935238,0.000000,0.000000,0.354019 +919,0.934412,0.000000,0.000000,0.356194 +920,0.933580,0.000000,0.000000,0.358368 +921,0.932744,0.000000,0.000000,0.360540 +922,0.931902,0.000000,0.000000,0.362709 +923,0.931056,0.000000,0.000000,0.364877 +924,0.930204,0.000000,0.000000,0.367042 +925,0.929348,0.000000,0.000000,0.369206 +926,0.928486,0.000000,0.000000,0.371368 +927,0.927619,0.000000,0.000000,0.373528 +928,0.926747,0.000000,0.000000,0.375685 +929,0.925871,0.000000,0.000000,0.377841 +930,0.924989,0.000000,0.000000,0.379994 +931,0.924102,0.000000,0.000000,0.382146 +932,0.923210,0.000000,0.000000,0.384295 +933,0.922313,0.000000,0.000000,0.386443 +934,0.921412,0.000000,0.000000,0.388588 +935,0.920505,0.000000,0.000000,0.390731 +936,0.919593,0.000000,0.000000,0.392872 +937,0.918676,0.000000,0.000000,0.395011 +938,0.917755,0.000000,0.000000,0.397148 +939,0.916828,0.000000,0.000000,0.399283 +940,0.915896,0.000000,0.000000,0.401415 +941,0.914960,0.000000,0.000000,0.403545 +942,0.914018,0.000000,0.000000,0.405673 +943,0.913072,0.000000,0.000000,0.407799 +944,0.912120,0.000000,0.000000,0.409923 +945,0.911164,0.000000,0.000000,0.412045 +946,0.910202,0.000000,0.000000,0.414164 +947,0.909236,0.000000,0.000000,0.416281 +948,0.908265,0.000000,0.000000,0.418396 +949,0.907289,0.000000,0.000000,0.420508 +950,0.906308,0.000000,0.000000,0.422618 +951,0.905322,0.000000,0.000000,0.424726 +952,0.904331,0.000000,0.000000,0.426832 +953,0.903335,0.000000,0.000000,0.428935 +954,0.902335,0.000000,0.000000,0.431036 +955,0.901329,0.000000,0.000000,0.433135 +956,0.900319,0.000000,0.000000,0.435231 +957,0.899304,0.000000,0.000000,0.437325 +958,0.898283,0.000000,0.000000,0.439417 +959,0.897258,0.000000,0.000000,0.441506 +960,0.896229,0.000000,0.000000,0.443593 +961,0.895194,0.000000,0.000000,0.445677 +962,0.894154,0.000000,0.000000,0.447759 +963,0.893110,0.000000,0.000000,0.449839 +964,0.892061,0.000000,0.000000,0.451916 +965,0.891007,0.000000,0.000000,0.453990 +966,0.889948,0.000000,0.000000,0.456063 +967,0.888884,0.000000,0.000000,0.458132 +968,0.887815,0.000000,0.000000,0.460200 +969,0.886742,0.000000,0.000000,0.462265 +970,0.885664,0.000000,0.000000,0.464327 +971,0.884581,0.000000,0.000000,0.466387 +972,0.883493,0.000000,0.000000,0.468444 +973,0.882401,0.000000,0.000000,0.470499 +974,0.881303,0.000000,0.000000,0.472551 +975,0.880201,0.000000,0.000000,0.474600 +976,0.879095,0.000000,0.000000,0.476647 +977,0.877983,0.000000,0.000000,0.478692 +978,0.876867,0.000000,0.000000,0.480734 +979,0.875746,0.000000,0.000000,0.482773 +980,0.874620,0.000000,0.000000,0.484810 +981,0.873489,0.000000,0.000000,0.486844 +982,0.872354,0.000000,0.000000,0.488875 +983,0.871214,0.000000,0.000000,0.490904 +984,0.870069,0.000000,0.000000,0.492930 +985,0.868920,0.000000,0.000000,0.494953 +986,0.867765,0.000000,0.000000,0.496974 +987,0.866607,0.000000,0.000000,0.498992 +988,0.865443,0.000000,0.000000,0.501007 +989,0.864275,0.000000,0.000000,0.503020 +990,0.863102,0.000000,0.000000,0.505030 +991,0.861924,0.000000,0.000000,0.507037 +992,0.860742,0.000000,0.000000,0.509041 +993,0.859555,0.000000,0.000000,0.511043 +994,0.858364,0.000000,0.000000,0.513042 +995,0.857167,0.000000,0.000000,0.515038 +996,0.855966,0.000000,0.000000,0.517031 +997,0.854761,0.000000,0.000000,0.519022 +998,0.853551,0.000000,0.000000,0.521010 +999,0.852336,0.000000,0.000000,0.522995 +1000,0.851117,0.000000,0.000000,0.524977 +1001,0.849893,0.000000,0.000000,0.526956 +1002,0.848664,0.000000,0.000000,0.528932 +1003,0.847431,0.000000,0.000000,0.530906 +1004,0.846193,0.000000,0.000000,0.532876 +1005,0.844951,0.000000,0.000000,0.534844 +1006,0.843704,0.000000,0.000000,0.536809 +1007,0.842452,0.000000,0.000000,0.538771 +1008,0.841196,0.000000,0.000000,0.540730 +1009,0.839936,0.000000,0.000000,0.542686 +1010,0.838671,0.000000,0.000000,0.544639 +1011,0.837401,0.000000,0.000000,0.546589 +1012,0.836127,0.000000,0.000000,0.548536 +1013,0.834848,0.000000,0.000000,0.550481 +1014,0.833565,0.000000,0.000000,0.552422 +1015,0.832277,0.000000,0.000000,0.554360 +1016,0.830984,0.000000,0.000000,0.556296 +1017,0.829688,0.000000,0.000000,0.558228 +1018,0.828386,0.000000,0.000000,0.560157 +1019,0.827081,0.000000,0.000000,0.562083 +1020,0.825770,0.000000,0.000000,0.564007 +1021,0.824456,0.000000,0.000000,0.565927 +1022,0.823136,0.000000,0.000000,0.567844 +1023,0.821813,0.000000,0.000000,0.569758 +1024,0.820485,0.000000,0.000000,0.571669 +1025,0.819152,0.000000,0.000000,0.573576 +1026,0.817815,0.000000,0.000000,0.575481 +1027,0.816474,0.000000,0.000000,0.577383 +1028,0.815128,0.000000,0.000000,0.579281 +1029,0.813778,0.000000,0.000000,0.581176 +1030,0.812423,0.000000,0.000000,0.583069 +1031,0.811064,0.000000,0.000000,0.584958 +1032,0.809700,0.000000,0.000000,0.586844 +1033,0.808333,0.000000,0.000000,0.588726 +1034,0.806960,0.000000,0.000000,0.590606 +1035,0.805584,0.000000,0.000000,0.592482 +1036,0.804203,0.000000,0.000000,0.594355 +1037,0.802817,0.000000,0.000000,0.596225 +1038,0.801428,0.000000,0.000000,0.598092 +1039,0.800034,0.000000,0.000000,0.599955 +1040,0.798636,0.000000,0.000000,0.601815 +1041,0.797233,0.000000,0.000000,0.603672 +1042,0.795826,0.000000,0.000000,0.605526 +1043,0.794415,0.000000,0.000000,0.607376 +1044,0.792999,0.000000,0.000000,0.609223 +1045,0.791579,0.000000,0.000000,0.611067 +1046,0.790155,0.000000,0.000000,0.612907 +1047,0.788727,0.000000,0.000000,0.614744 +1048,0.787294,0.000000,0.000000,0.616578 +1049,0.785857,0.000000,0.000000,0.618408 +1050,0.784416,0.000000,0.000000,0.620235 +1051,0.782970,0.000000,0.000000,0.622059 +1052,0.781520,0.000000,0.000000,0.623880 +1053,0.780067,0.000000,0.000000,0.625697 +1054,0.778608,0.000000,0.000000,0.627510 +1055,0.777146,0.000000,0.000000,0.629320 +1056,0.775679,0.000000,0.000000,0.631127 +1057,0.774209,0.000000,0.000000,0.632931 +1058,0.772734,0.000000,0.000000,0.634731 +1059,0.771254,0.000000,0.000000,0.636527 +1060,0.769771,0.000000,0.000000,0.638320 +1061,0.768284,0.000000,0.000000,0.640110 +1062,0.766792,0.000000,0.000000,0.641896 +1063,0.765296,0.000000,0.000000,0.643679 +1064,0.763796,0.000000,0.000000,0.645458 +1065,0.762292,0.000000,0.000000,0.647233 +1066,0.760784,0.000000,0.000000,0.649006 +1067,0.759271,0.000000,0.000000,0.650774 +1068,0.757755,0.000000,0.000000,0.652539 +1069,0.756234,0.000000,0.000000,0.654301 +1070,0.754710,0.000000,0.000000,0.656059 +1071,0.753181,0.000000,0.000000,0.657814 +1072,0.751648,0.000000,0.000000,0.659564 +1073,0.750111,0.000000,0.000000,0.661312 +1074,0.748570,0.000000,0.000000,0.663056 +1075,0.747025,0.000000,0.000000,0.664796 +1076,0.745476,0.000000,0.000000,0.666532 +1077,0.743923,0.000000,0.000000,0.668265 +1078,0.742366,0.000000,0.000000,0.669995 +1079,0.740805,0.000000,0.000000,0.671721 +1080,0.739239,0.000000,0.000000,0.673443 +1081,0.737670,0.000000,0.000000,0.675161 +1082,0.736097,0.000000,0.000000,0.676876 +1083,0.734520,0.000000,0.000000,0.678587 +1084,0.732939,0.000000,0.000000,0.680295 +1085,0.731354,0.000000,0.000000,0.681998 +1086,0.729765,0.000000,0.000000,0.683698 +1087,0.728172,0.000000,0.000000,0.685395 +1088,0.726575,0.000000,0.000000,0.687088 +1089,0.724974,0.000000,0.000000,0.688776 +1090,0.723369,0.000000,0.000000,0.690462 +1091,0.721760,0.000000,0.000000,0.692143 +1092,0.720148,0.000000,0.000000,0.693821 +1093,0.718531,0.000000,0.000000,0.695495 +1094,0.716911,0.000000,0.000000,0.697165 +1095,0.715286,0.000000,0.000000,0.698832 +1096,0.713658,0.000000,0.000000,0.700494 +1097,0.712026,0.000000,0.000000,0.702153 +1098,0.710390,0.000000,0.000000,0.703808 +1099,0.708750,0.000000,0.000000,0.705459 +1100,0.707107,0.000000,0.000000,0.707107 +1101,0.707107,0.000000,0.000000,0.707107 +1102,0.707107,0.000000,0.000000,0.707107 +1103,0.707107,0.000000,0.000000,0.707107 +1104,0.707107,0.000000,0.000000,0.707107 +1105,0.707107,0.000000,0.000000,0.707107 +1106,0.707107,0.000000,0.000000,0.707107 +1107,0.707107,0.000000,0.000000,0.707107 +1108,0.707107,0.000000,0.000000,0.707107 +1109,0.707107,0.000000,0.000000,0.707107 +1110,0.707107,0.000000,0.000000,0.707107 +1111,0.707107,0.000000,0.000000,0.707107 +1112,0.707107,0.000000,0.000000,0.707107 +1113,0.707107,0.000000,0.000000,0.707107 +1114,0.707107,0.000000,0.000000,0.707107 +1115,0.707107,0.000000,0.000000,0.707107 +1116,0.707107,0.000000,0.000000,0.707107 +1117,0.707107,0.000000,0.000000,0.707107 +1118,0.707107,0.000000,0.000000,0.707107 +1119,0.707107,0.000000,0.000000,0.707107 +1120,0.707107,0.000000,0.000000,0.707107 +1121,0.707107,0.000000,0.000000,0.707107 +1122,0.707107,0.000000,0.000000,0.707107 +1123,0.707107,0.000000,0.000000,0.707107 +1124,0.707107,0.000000,0.000000,0.707107 +1125,0.707107,0.000000,0.000000,0.707107 +1126,0.707107,0.000000,0.000000,0.707107 +1127,0.707107,0.000000,0.000000,0.707107 +1128,0.707107,0.000000,0.000000,0.707107 +1129,0.707107,0.000000,0.000000,0.707107 +1130,0.707107,0.000000,0.000000,0.707107 +1131,0.707107,0.000000,0.000000,0.707107 +1132,0.707107,0.000000,0.000000,0.707107 +1133,0.707107,0.000000,0.000000,0.707107 +1134,0.707107,0.000000,0.000000,0.707107 +1135,0.707107,0.000000,0.000000,0.707107 +1136,0.707107,0.000000,0.000000,0.707107 +1137,0.707107,0.000000,0.000000,0.707107 +1138,0.707107,0.000000,0.000000,0.707107 +1139,0.707107,0.000000,0.000000,0.707107 +1140,0.707107,0.000000,0.000000,0.707107 +1141,0.707107,0.000000,0.000000,0.707107 +1142,0.707107,0.000000,0.000000,0.707107 +1143,0.707107,0.000000,0.000000,0.707107 +1144,0.707107,0.000000,0.000000,0.707107 +1145,0.707107,0.000000,0.000000,0.707107 +1146,0.707107,0.000000,0.000000,0.707107 +1147,0.707107,0.000000,0.000000,0.707107 +1148,0.707107,0.000000,0.000000,0.707107 +1149,0.707107,0.000000,0.000000,0.707107 +1150,0.707107,0.000000,0.000000,0.707107 +1151,0.707107,0.000000,0.000000,0.707107 +1152,0.707107,0.000000,0.000000,0.707107 +1153,0.707107,0.000000,0.000000,0.707107 +1154,0.707107,0.000000,0.000000,0.707107 +1155,0.707107,0.000000,0.000000,0.707107 +1156,0.707107,0.000000,0.000000,0.707107 +1157,0.707107,0.000000,0.000000,0.707107 +1158,0.707107,0.000000,0.000000,0.707107 +1159,0.707107,0.000000,0.000000,0.707107 +1160,0.707107,0.000000,0.000000,0.707107 +1161,0.707107,0.000000,0.000000,0.707107 +1162,0.707107,0.000000,0.000000,0.707107 +1163,0.707107,0.000000,0.000000,0.707107 +1164,0.707107,0.000000,0.000000,0.707107 +1165,0.707107,0.000000,0.000000,0.707107 +1166,0.707107,0.000000,0.000000,0.707107 +1167,0.707107,0.000000,0.000000,0.707107 +1168,0.707107,0.000000,0.000000,0.707107 +1169,0.707107,0.000000,0.000000,0.707107 +1170,0.707107,0.000000,0.000000,0.707107 +1171,0.707107,0.000000,0.000000,0.707107 +1172,0.707107,0.000000,0.000000,0.707107 +1173,0.707107,0.000000,0.000000,0.707107 +1174,0.707107,0.000000,0.000000,0.707107 +1175,0.707107,0.000000,0.000000,0.707107 +1176,0.707107,0.000000,0.000000,0.707107 +1177,0.707107,0.000000,0.000000,0.707107 +1178,0.707107,0.000000,0.000000,0.707107 +1179,0.707107,0.000000,0.000000,0.707107 +1180,0.707107,0.000000,0.000000,0.707107 +1181,0.707107,0.000000,0.000000,0.707107 +1182,0.707107,0.000000,0.000000,0.707107 +1183,0.707107,0.000000,0.000000,0.707107 +1184,0.707107,0.000000,0.000000,0.707107 +1185,0.707107,0.000000,0.000000,0.707107 +1186,0.707107,0.000000,0.000000,0.707107 +1187,0.707107,0.000000,0.000000,0.707107 +1188,0.707107,0.000000,0.000000,0.707107 +1189,0.707107,0.000000,0.000000,0.707107 +1190,0.707107,0.000000,0.000000,0.707107 +1191,0.707107,0.000000,0.000000,0.707107 +1192,0.707107,0.000000,0.000000,0.707107 +1193,0.707107,0.000000,0.000000,0.707107 +1194,0.707107,0.000000,0.000000,0.707107 +1195,0.707107,0.000000,0.000000,0.707107 +1196,0.707107,0.000000,0.000000,0.707107 +1197,0.707107,0.000000,0.000000,0.707107 +1198,0.707107,0.000000,0.000000,0.707107 +1199,0.707107,0.000000,0.000000,0.707107 +1200,0.707107,0.000000,0.000000,0.707107 +1201,0.707107,0.000000,0.000000,0.707107 +1202,0.707107,0.000000,0.000000,0.707107 +1203,0.707107,0.000000,0.000000,0.707107 +1204,0.707107,0.000000,0.000000,0.707107 +1205,0.707107,0.000000,0.000000,0.707107 +1206,0.707107,0.000000,0.000000,0.707107 +1207,0.707107,0.000000,0.000000,0.707107 +1208,0.707107,0.000000,0.000000,0.707107 +1209,0.707107,0.000000,0.000000,0.707107 +1210,0.707107,0.000000,0.000000,0.707107 +1211,0.707107,0.000000,0.000000,0.707107 +1212,0.707107,0.000000,0.000000,0.707107 +1213,0.707107,0.000000,0.000000,0.707107 +1214,0.707107,0.000000,0.000000,0.707107 +1215,0.707107,0.000000,0.000000,0.707107 +1216,0.707107,0.000000,0.000000,0.707107 +1217,0.707107,0.000000,0.000000,0.707107 +1218,0.707107,0.000000,0.000000,0.707107 +1219,0.707107,0.000000,0.000000,0.707107 +1220,0.707107,0.000000,0.000000,0.707107 +1221,0.707107,0.000000,0.000000,0.707107 +1222,0.707107,0.000000,0.000000,0.707107 +1223,0.707107,0.000000,0.000000,0.707107 +1224,0.707107,0.000000,0.000000,0.707107 +1225,0.707107,0.000000,0.000000,0.707107 +1226,0.707107,0.000000,0.000000,0.707107 +1227,0.707107,0.000000,0.000000,0.707107 +1228,0.707107,0.000000,0.000000,0.707107 +1229,0.707107,0.000000,0.000000,0.707107 +1230,0.707107,0.000000,0.000000,0.707107 +1231,0.707107,0.000000,0.000000,0.707107 +1232,0.707107,0.000000,0.000000,0.707107 +1233,0.707107,0.000000,0.000000,0.707107 +1234,0.707107,0.000000,0.000000,0.707107 +1235,0.707107,0.000000,0.000000,0.707107 +1236,0.707107,0.000000,0.000000,0.707107 +1237,0.707107,0.000000,0.000000,0.707107 +1238,0.707107,0.000000,0.000000,0.707107 +1239,0.707107,0.000000,0.000000,0.707107 +1240,0.707107,0.000000,0.000000,0.707107 +1241,0.707107,0.000000,0.000000,0.707107 +1242,0.707107,0.000000,0.000000,0.707107 +1243,0.707107,0.000000,0.000000,0.707107 +1244,0.707107,0.000000,0.000000,0.707107 +1245,0.707107,0.000000,0.000000,0.707107 +1246,0.707107,0.000000,0.000000,0.707107 +1247,0.707107,0.000000,0.000000,0.707107 +1248,0.707107,0.000000,0.000000,0.707107 +1249,0.707107,0.000000,0.000000,0.707107 +1250,0.707107,0.000000,0.000000,0.707107 +1251,0.707107,0.000000,0.000000,0.707107 +1252,0.707107,0.000000,0.000000,0.707107 +1253,0.707107,0.000000,0.000000,0.707107 +1254,0.707107,0.000000,0.000000,0.707107 +1255,0.707107,0.000000,0.000000,0.707107 +1256,0.707107,0.000000,0.000000,0.707107 +1257,0.707107,0.000000,0.000000,0.707107 +1258,0.707107,0.000000,0.000000,0.707107 +1259,0.707107,0.000000,0.000000,0.707107 +1260,0.707107,0.000000,0.000000,0.707107 +1261,0.707107,0.000000,0.000000,0.707107 +1262,0.707107,0.000000,0.000000,0.707107 +1263,0.707107,0.000000,0.000000,0.707107 +1264,0.707107,0.000000,0.000000,0.707107 +1265,0.707107,0.000000,0.000000,0.707107 +1266,0.707107,0.000000,0.000000,0.707107 +1267,0.707107,0.000000,0.000000,0.707107 +1268,0.707107,0.000000,0.000000,0.707107 +1269,0.707107,0.000000,0.000000,0.707107 +1270,0.707107,0.000000,0.000000,0.707107 +1271,0.707107,0.000000,0.000000,0.707107 +1272,0.707107,0.000000,0.000000,0.707107 +1273,0.707107,0.000000,0.000000,0.707107 +1274,0.707107,0.000000,0.000000,0.707107 +1275,0.707107,0.000000,0.000000,0.707107 +1276,0.707107,0.000000,0.000000,0.707107 +1277,0.707107,0.000000,0.000000,0.707107 +1278,0.707107,0.000000,0.000000,0.707107 +1279,0.707107,0.000000,0.000000,0.707107 +1280,0.707107,0.000000,0.000000,0.707107 +1281,0.707107,0.000000,0.000000,0.707107 +1282,0.707107,0.000000,0.000000,0.707107 +1283,0.707107,0.000000,0.000000,0.707107 +1284,0.707107,0.000000,0.000000,0.707107 +1285,0.707107,0.000000,0.000000,0.707107 +1286,0.707107,0.000000,0.000000,0.707107 +1287,0.707107,0.000000,0.000000,0.707107 +1288,0.707107,0.000000,0.000000,0.707107 +1289,0.707107,0.000000,0.000000,0.707107 +1290,0.707107,0.000000,0.000000,0.707107 +1291,0.707107,0.000000,0.000000,0.707107 +1292,0.707107,0.000000,0.000000,0.707107 +1293,0.707107,0.000000,0.000000,0.707107 +1294,0.707107,0.000000,0.000000,0.707107 +1295,0.707107,0.000000,0.000000,0.707107 +1296,0.707107,0.000000,0.000000,0.707107 +1297,0.707107,0.000000,0.000000,0.707107 +1298,0.707107,0.000000,0.000000,0.707107 +1299,0.707107,0.000000,0.000000,0.707107 +1300,0.707107,0.000000,0.000000,0.707107 +1301,0.707107,0.000000,0.000000,0.707107 +1302,0.707107,0.000000,0.000000,0.707107 +1303,0.707107,0.000000,0.000000,0.707107 +1304,0.707107,0.000000,0.000000,0.707107 +1305,0.707107,0.000000,0.000000,0.707107 +1306,0.707107,0.000000,0.000000,0.707107 +1307,0.707107,0.000000,0.000000,0.707107 +1308,0.707107,0.000000,0.000000,0.707107 +1309,0.707107,0.000000,0.000000,0.707107 +1310,0.707107,0.000000,0.000000,0.707107 +1311,0.707107,0.000000,0.000000,0.707107 +1312,0.707107,0.000000,0.000000,0.707107 +1313,0.707107,0.000000,0.000000,0.707107 +1314,0.707107,0.000000,0.000000,0.707107 +1315,0.707107,0.000000,0.000000,0.707107 +1316,0.707107,0.000000,0.000000,0.707107 +1317,0.707107,0.000000,0.000000,0.707107 +1318,0.707107,0.000000,0.000000,0.707107 +1319,0.707107,0.000000,0.000000,0.707107 +1320,0.707107,0.000000,0.000000,0.707107 +1321,0.707107,0.000000,0.000000,0.707107 +1322,0.707107,0.000000,0.000000,0.707107 +1323,0.707107,0.000000,0.000000,0.707107 +1324,0.707107,0.000000,0.000000,0.707107 +1325,0.707107,0.000000,0.000000,0.707107 +1326,0.707107,0.000000,0.000000,0.707107 +1327,0.707107,0.000000,0.000000,0.707107 +1328,0.707107,0.000000,0.000000,0.707107 +1329,0.707107,0.000000,0.000000,0.707107 +1330,0.707107,0.000000,0.000000,0.707107 +1331,0.707107,0.000000,0.000000,0.707107 +1332,0.707107,0.000000,0.000000,0.707107 +1333,0.707107,0.000000,0.000000,0.707107 +1334,0.707107,0.000000,0.000000,0.707107 +1335,0.707107,0.000000,0.000000,0.707107 +1336,0.707107,0.000000,0.000000,0.707107 +1337,0.707107,0.000000,0.000000,0.707107 +1338,0.707107,0.000000,0.000000,0.707107 +1339,0.707107,0.000000,0.000000,0.707107 +1340,0.707107,0.000000,0.000000,0.707107 +1341,0.707107,0.000000,0.000000,0.707107 +1342,0.707107,0.000000,0.000000,0.707107 +1343,0.707107,0.000000,0.000000,0.707107 +1344,0.707107,0.000000,0.000000,0.707107 +1345,0.707107,0.000000,0.000000,0.707107 +1346,0.707107,0.000000,0.000000,0.707107 +1347,0.707107,0.000000,0.000000,0.707107 +1348,0.707107,0.000000,0.000000,0.707107 +1349,0.707107,0.000000,0.000000,0.707107 +1350,0.707107,0.000000,0.000000,0.707107 +1351,0.707107,0.000000,0.000000,0.707107 +1352,0.707107,0.000000,0.000000,0.707107 +1353,0.707107,0.000000,0.000000,0.707107 +1354,0.707107,0.000000,0.000000,0.707107 +1355,0.707107,0.000000,0.000000,0.707107 +1356,0.707107,0.000000,0.000000,0.707107 +1357,0.707107,0.000000,0.000000,0.707107 +1358,0.707107,0.000000,0.000000,0.707107 +1359,0.707107,0.000000,0.000000,0.707107 +1360,0.707107,0.000000,0.000000,0.707107 +1361,0.707107,0.000000,0.000000,0.707107 +1362,0.707107,0.000000,0.000000,0.707107 +1363,0.707107,0.000000,0.000000,0.707107 +1364,0.707107,0.000000,0.000000,0.707107 +1365,0.707107,0.000000,0.000000,0.707107 +1366,0.707107,0.000000,0.000000,0.707107 +1367,0.707107,0.000000,0.000000,0.707107 +1368,0.707107,0.000000,0.000000,0.707107 +1369,0.707107,0.000000,0.000000,0.707107 +1370,0.707107,0.000000,0.000000,0.707107 +1371,0.707107,0.000000,0.000000,0.707107 +1372,0.707107,0.000000,0.000000,0.707107 +1373,0.707107,0.000000,0.000000,0.707107 +1374,0.707107,0.000000,0.000000,0.707107 +1375,0.707107,0.000000,0.000000,0.707107 +1376,0.707107,0.000000,0.000000,0.707107 +1377,0.707107,0.000000,0.000000,0.707107 +1378,0.707107,0.000000,0.000000,0.707107 +1379,0.707107,0.000000,0.000000,0.707107 +1380,0.707107,0.000000,0.000000,0.707107 +1381,0.707107,0.000000,0.000000,0.707107 +1382,0.707107,0.000000,0.000000,0.707107 +1383,0.707107,0.000000,0.000000,0.707107 +1384,0.707107,0.000000,0.000000,0.707107 +1385,0.707107,0.000000,0.000000,0.707107 +1386,0.707107,0.000000,0.000000,0.707107 +1387,0.707107,0.000000,0.000000,0.707107 +1388,0.707107,0.000000,0.000000,0.707107 +1389,0.707107,0.000000,0.000000,0.707107 +1390,0.707107,0.000000,0.000000,0.707107 +1391,0.707107,0.000000,0.000000,0.707107 +1392,0.707107,0.000000,0.000000,0.707107 +1393,0.707107,0.000000,0.000000,0.707107 +1394,0.707107,0.000000,0.000000,0.707107 +1395,0.707107,0.000000,0.000000,0.707107 +1396,0.707107,0.000000,0.000000,0.707107 +1397,0.707107,0.000000,0.000000,0.707107 +1398,0.707107,0.000000,0.000000,0.707107 +1399,0.707107,0.000000,0.000000,0.707107 +1400,0.707107,0.000000,0.000000,0.707107 +1401,0.707107,0.000000,0.000000,0.707107 +1402,0.707107,0.000000,0.000000,0.707107 +1403,0.707107,0.000000,0.000000,0.707107 +1404,0.707107,0.000000,0.000000,0.707107 +1405,0.707107,0.000000,0.000000,0.707107 +1406,0.707107,0.000000,0.000000,0.707107 +1407,0.707107,0.000000,0.000000,0.707107 +1408,0.707107,0.000000,0.000000,0.707107 +1409,0.707107,0.000000,0.000000,0.707107 +1410,0.707107,0.000000,0.000000,0.707107 +1411,0.707107,0.000000,0.000000,0.707107 +1412,0.707107,0.000000,0.000000,0.707107 +1413,0.707107,0.000000,0.000000,0.707107 +1414,0.707107,0.000000,0.000000,0.707107 +1415,0.707107,0.000000,0.000000,0.707107 +1416,0.707107,0.000000,0.000000,0.707107 +1417,0.707107,0.000000,0.000000,0.707107 +1418,0.707107,0.000000,0.000000,0.707107 +1419,0.707107,0.000000,0.000000,0.707107 +1420,0.707107,0.000000,0.000000,0.707107 +1421,0.707107,0.000000,0.000000,0.707107 +1422,0.707107,0.000000,0.000000,0.707107 +1423,0.707107,0.000000,0.000000,0.707107 +1424,0.707107,0.000000,0.000000,0.707107 +1425,0.707107,0.000000,0.000000,0.707107 +1426,0.707107,0.000000,0.000000,0.707107 +1427,0.707107,0.000000,0.000000,0.707107 +1428,0.707107,0.000000,0.000000,0.707107 +1429,0.707107,0.000000,0.000000,0.707107 +1430,0.707107,0.000000,0.000000,0.707107 +1431,0.707107,0.000000,0.000000,0.707107 +1432,0.707107,0.000000,0.000000,0.707107 +1433,0.707107,0.000000,0.000000,0.707107 +1434,0.707107,0.000000,0.000000,0.707107 +1435,0.707107,0.000000,0.000000,0.707107 +1436,0.707107,0.000000,0.000000,0.707107 +1437,0.707107,0.000000,0.000000,0.707107 +1438,0.707107,0.000000,0.000000,0.707107 +1439,0.707107,0.000000,0.000000,0.707107 +1440,0.707107,0.000000,0.000000,0.707107 +1441,0.707107,0.000000,0.000000,0.707107 +1442,0.707107,0.000000,0.000000,0.707107 +1443,0.707107,0.000000,0.000000,0.707107 +1444,0.707107,0.000000,0.000000,0.707107 +1445,0.707107,0.000000,0.000000,0.707107 +1446,0.707107,0.000000,0.000000,0.707107 +1447,0.707107,0.000000,0.000000,0.707107 +1448,0.707107,0.000000,0.000000,0.707107 +1449,0.707107,0.000000,0.000000,0.707107 +1450,0.707107,0.000000,0.000000,0.707107 +1451,0.707107,0.000000,0.000000,0.707107 +1452,0.707107,0.000000,0.000000,0.707107 +1453,0.707107,0.000000,0.000000,0.707107 +1454,0.707107,0.000000,0.000000,0.707107 +1455,0.707107,0.000000,0.000000,0.707107 +1456,0.707107,0.000000,0.000000,0.707107 +1457,0.707107,0.000000,0.000000,0.707107 +1458,0.707107,0.000000,0.000000,0.707107 +1459,0.707107,0.000000,0.000000,0.707107 +1460,0.707107,0.000000,0.000000,0.707107 +1461,0.707107,0.000000,0.000000,0.707107 +1462,0.707107,0.000000,0.000000,0.707107 +1463,0.707107,0.000000,0.000000,0.707107 +1464,0.707107,0.000000,0.000000,0.707107 +1465,0.707107,0.000000,0.000000,0.707107 +1466,0.707107,0.000000,0.000000,0.707107 +1467,0.707107,0.000000,0.000000,0.707107 +1468,0.707107,0.000000,0.000000,0.707107 +1469,0.707107,0.000000,0.000000,0.707107 +1470,0.707107,0.000000,0.000000,0.707107 +1471,0.707107,0.000000,0.000000,0.707107 +1472,0.707107,0.000000,0.000000,0.707107 +1473,0.707107,0.000000,0.000000,0.707107 +1474,0.707107,0.000000,0.000000,0.707107 +1475,0.707107,0.000000,0.000000,0.707107 +1476,0.707107,0.000000,0.000000,0.707107 +1477,0.707107,0.000000,0.000000,0.707107 +1478,0.707107,0.000000,0.000000,0.707107 +1479,0.707107,0.000000,0.000000,0.707107 +1480,0.707107,0.000000,0.000000,0.707107 +1481,0.707107,0.000000,0.000000,0.707107 +1482,0.707107,0.000000,0.000000,0.707107 +1483,0.707107,0.000000,0.000000,0.707107 +1484,0.707107,0.000000,0.000000,0.707107 +1485,0.707107,0.000000,0.000000,0.707107 +1486,0.707107,0.000000,0.000000,0.707107 +1487,0.707107,0.000000,0.000000,0.707107 +1488,0.707107,0.000000,0.000000,0.707107 +1489,0.707107,0.000000,0.000000,0.707107 +1490,0.707107,0.000000,0.000000,0.707107 +1491,0.707107,0.000000,0.000000,0.707107 +1492,0.707107,0.000000,0.000000,0.707107 +1493,0.707107,0.000000,0.000000,0.707107 +1494,0.707107,0.000000,0.000000,0.707107 +1495,0.707107,0.000000,0.000000,0.707107 +1496,0.707107,0.000000,0.000000,0.707107 +1497,0.707107,0.000000,0.000000,0.707107 +1498,0.707107,0.000000,0.000000,0.707107 +1499,0.707107,0.000000,0.000000,0.707107 +1500,0.707107,0.000000,0.000000,0.707107 +1501,0.707107,0.000000,0.000000,0.707107 +1502,0.707107,0.000000,0.000000,0.707107 +1503,0.707107,0.000000,0.000000,0.707107 +1504,0.707107,0.000000,0.000000,0.707107 +1505,0.707107,0.000000,0.000000,0.707107 +1506,0.707107,0.000000,0.000000,0.707107 +1507,0.707107,0.000000,0.000000,0.707107 +1508,0.707107,0.000000,0.000000,0.707107 +1509,0.707107,0.000000,0.000000,0.707107 +1510,0.707107,0.000000,0.000000,0.707107 +1511,0.707107,0.000000,0.000000,0.707107 +1512,0.707107,0.000000,0.000000,0.707107 +1513,0.707107,0.000000,0.000000,0.707107 +1514,0.707107,0.000000,0.000000,0.707107 +1515,0.707107,0.000000,0.000000,0.707107 +1516,0.707107,0.000000,0.000000,0.707107 +1517,0.707107,0.000000,0.000000,0.707107 +1518,0.707107,0.000000,0.000000,0.707107 +1519,0.707107,0.000000,0.000000,0.707107 +1520,0.707107,0.000000,0.000000,0.707107 +1521,0.707107,0.000000,0.000000,0.707107 +1522,0.707107,0.000000,0.000000,0.707107 +1523,0.707107,0.000000,0.000000,0.707107 +1524,0.707107,0.000000,0.000000,0.707107 +1525,0.707107,0.000000,0.000000,0.707107 +1526,0.707107,0.000000,0.000000,0.707107 +1527,0.707107,0.000000,0.000000,0.707107 +1528,0.707107,0.000000,0.000000,0.707107 +1529,0.707107,0.000000,0.000000,0.707107 +1530,0.707107,0.000000,0.000000,0.707107 +1531,0.707107,0.000000,0.000000,0.707107 +1532,0.707107,0.000000,0.000000,0.707107 +1533,0.707107,0.000000,0.000000,0.707107 +1534,0.707107,0.000000,0.000000,0.707107 +1535,0.707107,0.000000,0.000000,0.707107 +1536,0.707107,0.000000,0.000000,0.707107 +1537,0.707107,0.000000,0.000000,0.707107 +1538,0.707107,0.000000,0.000000,0.707107 +1539,0.707107,0.000000,0.000000,0.707107 +1540,0.707107,0.000000,0.000000,0.707107 +1541,0.707107,0.000000,0.000000,0.707107 +1542,0.707107,0.000000,0.000000,0.707107 +1543,0.707107,0.000000,0.000000,0.707107 +1544,0.707107,0.000000,0.000000,0.707107 +1545,0.707107,0.000000,0.000000,0.707107 +1546,0.707107,0.000000,0.000000,0.707107 +1547,0.707107,0.000000,0.000000,0.707107 +1548,0.707107,0.000000,0.000000,0.707107 +1549,0.707107,0.000000,0.000000,0.707107 +1550,0.707107,0.000000,0.000000,0.707107 +1551,0.707107,0.000000,0.000000,0.707107 +1552,0.707107,0.000000,0.000000,0.707107 +1553,0.707107,0.000000,0.000000,0.707107 +1554,0.707107,0.000000,0.000000,0.707107 +1555,0.707107,0.000000,0.000000,0.707107 +1556,0.707107,0.000000,0.000000,0.707107 +1557,0.707107,0.000000,0.000000,0.707107 +1558,0.707107,0.000000,0.000000,0.707107 +1559,0.707107,0.000000,0.000000,0.707107 +1560,0.707107,0.000000,0.000000,0.707107 +1561,0.707107,0.000000,0.000000,0.707107 +1562,0.707107,0.000000,0.000000,0.707107 +1563,0.707107,0.000000,0.000000,0.707107 +1564,0.707107,0.000000,0.000000,0.707107 +1565,0.707107,0.000000,0.000000,0.707107 +1566,0.707107,0.000000,0.000000,0.707107 +1567,0.707107,0.000000,0.000000,0.707107 +1568,0.707107,0.000000,0.000000,0.707107 +1569,0.707107,0.000000,0.000000,0.707107 +1570,0.707107,0.000000,0.000000,0.707107 +1571,0.707107,0.000000,0.000000,0.707107 +1572,0.707107,0.000000,0.000000,0.707107 +1573,0.707107,0.000000,0.000000,0.707107 +1574,0.707107,0.000000,0.000000,0.707107 +1575,0.707107,0.000000,0.000000,0.707107 +1576,0.707107,0.000000,0.000000,0.707107 +1577,0.707107,0.000000,0.000000,0.707107 +1578,0.707107,0.000000,0.000000,0.707107 +1579,0.707107,0.000000,0.000000,0.707107 +1580,0.707107,0.000000,0.000000,0.707107 +1581,0.707107,0.000000,0.000000,0.707107 +1582,0.707107,0.000000,0.000000,0.707107 +1583,0.707107,0.000000,0.000000,0.707107 +1584,0.707107,0.000000,0.000000,0.707107 +1585,0.707107,0.000000,0.000000,0.707107 +1586,0.707107,0.000000,0.000000,0.707107 +1587,0.707107,0.000000,0.000000,0.707107 +1588,0.707107,0.000000,0.000000,0.707107 +1589,0.707107,0.000000,0.000000,0.707107 +1590,0.707107,0.000000,0.000000,0.707107 +1591,0.707107,0.000000,0.000000,0.707107 +1592,0.707107,0.000000,0.000000,0.707107 +1593,0.707107,0.000000,0.000000,0.707107 +1594,0.707107,0.000000,0.000000,0.707107 +1595,0.707107,0.000000,0.000000,0.707107 +1596,0.707107,0.000000,0.000000,0.707107 +1597,0.707107,0.000000,0.000000,0.707107 +1598,0.707107,0.000000,0.000000,0.707107 +1599,0.707107,0.000000,0.000000,0.707107 +1600,0.707107,0.000000,0.000000,0.707107 +1601,0.707107,0.000000,0.000000,0.707107 +1602,0.707107,0.000000,0.000000,0.707107 +1603,0.707107,0.000000,0.000000,0.707107 +1604,0.707107,0.000000,0.000000,0.707107 +1605,0.707107,0.000000,0.000000,0.707107 +1606,0.707107,0.000000,0.000000,0.707107 +1607,0.707107,0.000000,0.000000,0.707107 +1608,0.707107,0.000000,0.000000,0.707107 +1609,0.707107,0.000000,0.000000,0.707107 +1610,0.707107,0.000000,0.000000,0.707107 +1611,0.707107,0.000000,0.000000,0.707107 +1612,0.707107,0.000000,0.000000,0.707107 +1613,0.707107,0.000000,0.000000,0.707107 +1614,0.707107,0.000000,0.000000,0.707107 +1615,0.707107,0.000000,0.000000,0.707107 +1616,0.707107,0.000000,0.000000,0.707107 +1617,0.707107,0.000000,0.000000,0.707107 +1618,0.707107,0.000000,0.000000,0.707107 +1619,0.707107,0.000000,0.000000,0.707107 +1620,0.707107,0.000000,0.000000,0.707107 +1621,0.707107,0.000000,0.000000,0.707107 +1622,0.707107,0.000000,0.000000,0.707107 +1623,0.707107,0.000000,0.000000,0.707107 +1624,0.707107,0.000000,0.000000,0.707107 +1625,0.707107,0.000000,0.000000,0.707107 +1626,0.707107,0.000000,0.000000,0.707107 +1627,0.707107,0.000000,0.000000,0.707107 +1628,0.707107,0.000000,0.000000,0.707107 +1629,0.707107,0.000000,0.000000,0.707107 +1630,0.707107,0.000000,0.000000,0.707107 +1631,0.707107,0.000000,0.000000,0.707107 +1632,0.707107,0.000000,0.000000,0.707107 +1633,0.707107,0.000000,0.000000,0.707107 +1634,0.707107,0.000000,0.000000,0.707107 +1635,0.707107,0.000000,0.000000,0.707107 +1636,0.707107,0.000000,0.000000,0.707107 +1637,0.707107,0.000000,0.000000,0.707107 +1638,0.707107,0.000000,0.000000,0.707107 +1639,0.707107,0.000000,0.000000,0.707107 +1640,0.707107,0.000000,0.000000,0.707107 +1641,0.707107,0.000000,0.000000,0.707107 +1642,0.707107,0.000000,0.000000,0.707107 +1643,0.707107,0.000000,0.000000,0.707107 +1644,0.707107,0.000000,0.000000,0.707107 +1645,0.707107,0.000000,0.000000,0.707107 +1646,0.707107,0.000000,0.000000,0.707107 +1647,0.707107,0.000000,0.000000,0.707107 +1648,0.707107,0.000000,0.000000,0.707107 +1649,0.707107,0.000000,0.000000,0.707107 +1650,0.707107,0.000000,0.000000,0.707107 +1651,0.707107,0.000000,0.000000,0.707107 +1652,0.707107,0.000000,0.000000,0.707107 +1653,0.707107,0.000000,0.000000,0.707107 +1654,0.707107,0.000000,0.000000,0.707107 +1655,0.707107,0.000000,0.000000,0.707107 +1656,0.707107,0.000000,0.000000,0.707107 +1657,0.707107,0.000000,0.000000,0.707107 +1658,0.707107,0.000000,0.000000,0.707107 +1659,0.707107,0.000000,0.000000,0.707107 +1660,0.707107,0.000000,0.000000,0.707107 +1661,0.707107,0.000000,0.000000,0.707107 +1662,0.707107,0.000000,0.000000,0.707107 +1663,0.707107,0.000000,0.000000,0.707107 +1664,0.707107,0.000000,0.000000,0.707107 +1665,0.707107,0.000000,0.000000,0.707107 +1666,0.707107,0.000000,0.000000,0.707107 +1667,0.707107,0.000000,0.000000,0.707107 +1668,0.707107,0.000000,0.000000,0.707107 +1669,0.707107,0.000000,0.000000,0.707107 +1670,0.707107,0.000000,0.000000,0.707107 +1671,0.707107,0.000000,0.000000,0.707107 +1672,0.707107,0.000000,0.000000,0.707107 +1673,0.707107,0.000000,0.000000,0.707107 +1674,0.707107,0.000000,0.000000,0.707107 +1675,0.707107,0.000000,0.000000,0.707107 +1676,0.707107,0.000000,0.000000,0.707107 +1677,0.707107,0.000000,0.000000,0.707107 +1678,0.707107,0.000000,0.000000,0.707107 +1679,0.707107,0.000000,0.000000,0.707107 +1680,0.707107,0.000000,0.000000,0.707107 +1681,0.707107,0.000000,0.000000,0.707107 +1682,0.707107,0.000000,0.000000,0.707107 +1683,0.707107,0.000000,0.000000,0.707107 +1684,0.707107,0.000000,0.000000,0.707107 +1685,0.707107,0.000000,0.000000,0.707107 +1686,0.707107,0.000000,0.000000,0.707107 +1687,0.707107,0.000000,0.000000,0.707107 +1688,0.707107,0.000000,0.000000,0.707107 +1689,0.707107,0.000000,0.000000,0.707107 +1690,0.707107,0.000000,0.000000,0.707107 +1691,0.707107,0.000000,0.000000,0.707107 +1692,0.707107,0.000000,0.000000,0.707107 +1693,0.707107,0.000000,0.000000,0.707107 +1694,0.707107,0.000000,0.000000,0.707107 +1695,0.707107,0.000000,0.000000,0.707107 +1696,0.707107,0.000000,0.000000,0.707107 +1697,0.707107,0.000000,0.000000,0.707107 +1698,0.707107,0.000000,0.000000,0.707107 +1699,0.707107,0.000000,0.000000,0.707107 +1700,0.707107,0.000000,0.000000,0.707107 +1701,0.707107,0.000000,0.000000,0.707107 +1702,0.707107,0.000000,0.000000,0.707107 +1703,0.707107,0.000000,0.000000,0.707107 +1704,0.707107,0.000000,0.000000,0.707107 +1705,0.707107,0.000000,0.000000,0.707107 +1706,0.707107,0.000000,0.000000,0.707107 +1707,0.707107,0.000000,0.000000,0.707107 +1708,0.707107,0.000000,0.000000,0.707107 +1709,0.707107,0.000000,0.000000,0.707107 +1710,0.707107,0.000000,0.000000,0.707107 +1711,0.707107,0.000000,0.000000,0.707107 +1712,0.707107,0.000000,0.000000,0.707107 +1713,0.707107,0.000000,0.000000,0.707107 +1714,0.707107,0.000000,0.000000,0.707107 +1715,0.707107,0.000000,0.000000,0.707107 +1716,0.707107,0.000000,0.000000,0.707107 +1717,0.707107,0.000000,0.000000,0.707107 +1718,0.707107,0.000000,0.000000,0.707107 +1719,0.707107,0.000000,0.000000,0.707107 +1720,0.707107,0.000000,0.000000,0.707107 +1721,0.707107,0.000000,0.000000,0.707107 +1722,0.707107,0.000000,0.000000,0.707107 +1723,0.707107,0.000000,0.000000,0.707107 +1724,0.707107,0.000000,0.000000,0.707107 +1725,0.707107,0.000000,0.000000,0.707107 +1726,0.707107,0.000000,0.000000,0.707107 +1727,0.707107,0.000000,0.000000,0.707107 +1728,0.707107,0.000000,0.000000,0.707107 +1729,0.707107,0.000000,0.000000,0.707107 +1730,0.707107,0.000000,0.000000,0.707107 +1731,0.707107,0.000000,0.000000,0.707107 +1732,0.707107,0.000000,0.000000,0.707107 +1733,0.707107,0.000000,0.000000,0.707107 +1734,0.707107,0.000000,0.000000,0.707107 +1735,0.707107,0.000000,0.000000,0.707107 +1736,0.707107,0.000000,0.000000,0.707107 +1737,0.707107,0.000000,0.000000,0.707107 +1738,0.707107,0.000000,0.000000,0.707107 +1739,0.707107,0.000000,0.000000,0.707107 +1740,0.707107,0.000000,0.000000,0.707107 +1741,0.707107,0.000000,0.000000,0.707107 +1742,0.707107,0.000000,0.000000,0.707107 +1743,0.707107,0.000000,0.000000,0.707107 +1744,0.707107,0.000000,0.000000,0.707107 +1745,0.707107,0.000000,0.000000,0.707107 +1746,0.707107,0.000000,0.000000,0.707107 +1747,0.707107,0.000000,0.000000,0.707107 +1748,0.707107,0.000000,0.000000,0.707107 +1749,0.707107,0.000000,0.000000,0.707107 +1750,0.707107,0.000000,0.000000,0.707107 +1751,0.707107,0.000000,0.000000,0.707107 +1752,0.707107,0.000000,0.000000,0.707107 +1753,0.707107,0.000000,0.000000,0.707107 +1754,0.707107,0.000000,0.000000,0.707107 +1755,0.707107,0.000000,0.000000,0.707107 +1756,0.707107,0.000000,0.000000,0.707107 +1757,0.707107,0.000000,0.000000,0.707107 +1758,0.707107,0.000000,0.000000,0.707107 +1759,0.707107,0.000000,0.000000,0.707107 +1760,0.707107,0.000000,0.000000,0.707107 +1761,0.707107,0.000000,0.000000,0.707107 +1762,0.707107,0.000000,0.000000,0.707107 +1763,0.707107,0.000000,0.000000,0.707107 +1764,0.707107,0.000000,0.000000,0.707107 +1765,0.707107,0.000000,0.000000,0.707107 +1766,0.707107,0.000000,0.000000,0.707107 +1767,0.707107,0.000000,0.000000,0.707107 +1768,0.707107,0.000000,0.000000,0.707107 +1769,0.707107,0.000000,0.000000,0.707107 +1770,0.707107,0.000000,0.000000,0.707107 +1771,0.707107,0.000000,0.000000,0.707107 +1772,0.707107,0.000000,0.000000,0.707107 +1773,0.707107,0.000000,0.000000,0.707107 +1774,0.707107,0.000000,0.000000,0.707107 +1775,0.707107,0.000000,0.000000,0.707107 +1776,0.707107,0.000000,0.000000,0.707107 +1777,0.707107,0.000000,0.000000,0.707107 +1778,0.707107,0.000000,0.000000,0.707107 +1779,0.707107,0.000000,0.000000,0.707107 +1780,0.707107,0.000000,0.000000,0.707107 +1781,0.707107,0.000000,0.000000,0.707107 +1782,0.707107,0.000000,0.000000,0.707107 +1783,0.707107,0.000000,0.000000,0.707107 +1784,0.707107,0.000000,0.000000,0.707107 +1785,0.707107,0.000000,0.000000,0.707107 +1786,0.707107,0.000000,0.000000,0.707107 +1787,0.707107,0.000000,0.000000,0.707107 +1788,0.707107,0.000000,0.000000,0.707107 +1789,0.707107,0.000000,0.000000,0.707107 +1790,0.707107,0.000000,0.000000,0.707107 +1791,0.707107,0.000000,0.000000,0.707107 +1792,0.707107,0.000000,0.000000,0.707107 +1793,0.707107,0.000000,0.000000,0.707107 +1794,0.707107,0.000000,0.000000,0.707107 +1795,0.707107,0.000000,0.000000,0.707107 +1796,0.707107,0.000000,0.000000,0.707107 +1797,0.707107,0.000000,0.000000,0.707107 +1798,0.707107,0.000000,0.000000,0.707107 +1799,0.707107,0.000000,0.000000,0.707107 +1800,0.707107,0.000000,0.000000,0.707107 +1801,0.707107,0.000000,0.000000,0.707107 +1802,0.707107,0.000000,0.000000,0.707107 +1803,0.707107,0.000000,0.000000,0.707107 +1804,0.707107,0.000000,0.000000,0.707107 +1805,0.707107,0.000000,0.000000,0.707107 +1806,0.707107,0.000000,0.000000,0.707107 +1807,0.707107,0.000000,0.000000,0.707107 +1808,0.707107,0.000000,0.000000,0.707107 +1809,0.707107,0.000000,0.000000,0.707107 +1810,0.707107,0.000000,0.000000,0.707107 +1811,0.707107,0.000000,0.000000,0.707107 +1812,0.707107,0.000000,0.000000,0.707107 +1813,0.707107,0.000000,0.000000,0.707107 +1814,0.707107,0.000000,0.000000,0.707107 +1815,0.707107,0.000000,0.000000,0.707107 +1816,0.707107,0.000000,0.000000,0.707107 +1817,0.707107,0.000000,0.000000,0.707107 +1818,0.707107,0.000000,0.000000,0.707107 +1819,0.707107,0.000000,0.000000,0.707107 +1820,0.707107,0.000000,0.000000,0.707107 +1821,0.707107,0.000000,0.000000,0.707107 +1822,0.707107,0.000000,0.000000,0.707107 +1823,0.707107,0.000000,0.000000,0.707107 +1824,0.707107,0.000000,0.000000,0.707107 +1825,0.707107,0.000000,0.000000,0.707107 +1826,0.707107,0.000000,0.000000,0.707107 +1827,0.707107,0.000000,0.000000,0.707107 +1828,0.707107,0.000000,0.000000,0.707107 +1829,0.707107,0.000000,0.000000,0.707107 +1830,0.707107,0.000000,0.000000,0.707107 +1831,0.707107,0.000000,0.000000,0.707107 +1832,0.707107,0.000000,0.000000,0.707107 +1833,0.707107,0.000000,0.000000,0.707107 +1834,0.707107,0.000000,0.000000,0.707107 +1835,0.707107,0.000000,0.000000,0.707107 +1836,0.707107,0.000000,0.000000,0.707107 +1837,0.707107,0.000000,0.000000,0.707107 +1838,0.707107,0.000000,0.000000,0.707107 +1839,0.707107,0.000000,0.000000,0.707107 +1840,0.707107,0.000000,0.000000,0.707107 +1841,0.707107,0.000000,0.000000,0.707107 +1842,0.707107,0.000000,0.000000,0.707107 +1843,0.707107,0.000000,0.000000,0.707107 +1844,0.707107,0.000000,0.000000,0.707107 +1845,0.707107,0.000000,0.000000,0.707107 +1846,0.707107,0.000000,0.000000,0.707107 +1847,0.707107,0.000000,0.000000,0.707107 +1848,0.707107,0.000000,0.000000,0.707107 +1849,0.707107,0.000000,0.000000,0.707107 +1850,0.707107,0.000000,0.000000,0.707107 +1851,0.707107,0.000000,0.000000,0.707107 +1852,0.707107,0.000000,0.000000,0.707107 +1853,0.707107,0.000000,0.000000,0.707107 +1854,0.707107,0.000000,0.000000,0.707107 +1855,0.707107,0.000000,0.000000,0.707107 +1856,0.707107,0.000000,0.000000,0.707107 +1857,0.707107,0.000000,0.000000,0.707107 +1858,0.707107,0.000000,0.000000,0.707107 +1859,0.707107,0.000000,0.000000,0.707107 +1860,0.707107,0.000000,0.000000,0.707107 +1861,0.707107,0.000000,0.000000,0.707107 +1862,0.707107,0.000000,0.000000,0.707107 +1863,0.707107,0.000000,0.000000,0.707107 +1864,0.707107,0.000000,0.000000,0.707107 +1865,0.707107,0.000000,0.000000,0.707107 +1866,0.707107,0.000000,0.000000,0.707107 +1867,0.707107,0.000000,0.000000,0.707107 +1868,0.707107,0.000000,0.000000,0.707107 +1869,0.707107,0.000000,0.000000,0.707107 +1870,0.707107,0.000000,0.000000,0.707107 +1871,0.707107,0.000000,0.000000,0.707107 +1872,0.707107,0.000000,0.000000,0.707107 +1873,0.707107,0.000000,0.000000,0.707107 +1874,0.707107,0.000000,0.000000,0.707107 +1875,0.707107,0.000000,0.000000,0.707107 +1876,0.707107,0.000000,0.000000,0.707107 +1877,0.707107,0.000000,0.000000,0.707107 +1878,0.707107,0.000000,0.000000,0.707107 +1879,0.707107,0.000000,0.000000,0.707107 +1880,0.707107,0.000000,0.000000,0.707107 +1881,0.707107,0.000000,0.000000,0.707107 +1882,0.707107,0.000000,0.000000,0.707107 +1883,0.707107,0.000000,0.000000,0.707107 +1884,0.707107,0.000000,0.000000,0.707107 +1885,0.707107,0.000000,0.000000,0.707107 +1886,0.707107,0.000000,0.000000,0.707107 +1887,0.707107,0.000000,0.000000,0.707107 +1888,0.707107,0.000000,0.000000,0.707107 +1889,0.707107,0.000000,0.000000,0.707107 +1890,0.707107,0.000000,0.000000,0.707107 +1891,0.707107,0.000000,0.000000,0.707107 +1892,0.707107,0.000000,0.000000,0.707107 +1893,0.707107,0.000000,0.000000,0.707107 +1894,0.707107,0.000000,0.000000,0.707107 +1895,0.707107,0.000000,0.000000,0.707107 +1896,0.707107,0.000000,0.000000,0.707107 +1897,0.707107,0.000000,0.000000,0.707107 +1898,0.707107,0.000000,0.000000,0.707107 +1899,0.707107,0.000000,0.000000,0.707107 +1900,0.707107,0.000000,0.000000,0.707107 +1901,0.707107,0.000000,0.000000,0.707107 +1902,0.707107,0.000000,0.000000,0.707107 +1903,0.707107,0.000000,0.000000,0.707107 +1904,0.707107,0.000000,0.000000,0.707107 +1905,0.707107,0.000000,0.000000,0.707107 +1906,0.707107,0.000000,0.000000,0.707107 +1907,0.707107,0.000000,0.000000,0.707107 +1908,0.707107,0.000000,0.000000,0.707107 +1909,0.707107,0.000000,0.000000,0.707107 +1910,0.707107,0.000000,0.000000,0.707107 +1911,0.707107,0.000000,0.000000,0.707107 +1912,0.707107,0.000000,0.000000,0.707107 +1913,0.707107,0.000000,0.000000,0.707107 +1914,0.707107,0.000000,0.000000,0.707107 +1915,0.707107,0.000000,0.000000,0.707107 +1916,0.707107,0.000000,0.000000,0.707107 +1917,0.707107,0.000000,0.000000,0.707107 +1918,0.707107,0.000000,0.000000,0.707107 +1919,0.707107,0.000000,0.000000,0.707107 +1920,0.707107,0.000000,0.000000,0.707107 +1921,0.707107,0.000000,0.000000,0.707107 +1922,0.707107,0.000000,0.000000,0.707107 +1923,0.707107,0.000000,0.000000,0.707107 +1924,0.707107,0.000000,0.000000,0.707107 +1925,0.707107,0.000000,0.000000,0.707107 +1926,0.707107,0.000000,0.000000,0.707107 +1927,0.707107,0.000000,0.000000,0.707107 +1928,0.707107,0.000000,0.000000,0.707107 +1929,0.707107,0.000000,0.000000,0.707107 +1930,0.707107,0.000000,0.000000,0.707107 +1931,0.707107,0.000000,0.000000,0.707107 +1932,0.707107,0.000000,0.000000,0.707107 +1933,0.707107,0.000000,0.000000,0.707107 +1934,0.707107,0.000000,0.000000,0.707107 +1935,0.707107,0.000000,0.000000,0.707107 +1936,0.707107,0.000000,0.000000,0.707107 +1937,0.707107,0.000000,0.000000,0.707107 +1938,0.707107,0.000000,0.000000,0.707107 +1939,0.707107,0.000000,0.000000,0.707107 +1940,0.707107,0.000000,0.000000,0.707107 +1941,0.707107,0.000000,0.000000,0.707107 +1942,0.707107,0.000000,0.000000,0.707107 +1943,0.707107,0.000000,0.000000,0.707107 +1944,0.707107,0.000000,0.000000,0.707107 +1945,0.707107,0.000000,0.000000,0.707107 +1946,0.707107,0.000000,0.000000,0.707107 +1947,0.707107,0.000000,0.000000,0.707107 +1948,0.707107,0.000000,0.000000,0.707107 +1949,0.707107,0.000000,0.000000,0.707107 +1950,0.707107,0.000000,0.000000,0.707107 +1951,0.707107,0.000000,0.000000,0.707107 +1952,0.707107,0.000000,0.000000,0.707107 +1953,0.707107,0.000000,0.000000,0.707107 +1954,0.707107,0.000000,0.000000,0.707107 +1955,0.707107,0.000000,0.000000,0.707107 +1956,0.707107,0.000000,0.000000,0.707107 +1957,0.707107,0.000000,0.000000,0.707107 +1958,0.707107,0.000000,0.000000,0.707107 +1959,0.707107,0.000000,0.000000,0.707107 +1960,0.707107,0.000000,0.000000,0.707107 +1961,0.707107,0.000000,0.000000,0.707107 +1962,0.707107,0.000000,0.000000,0.707107 +1963,0.707107,0.000000,0.000000,0.707107 +1964,0.707107,0.000000,0.000000,0.707107 +1965,0.707107,0.000000,0.000000,0.707107 +1966,0.707107,0.000000,0.000000,0.707107 +1967,0.707107,0.000000,0.000000,0.707107 +1968,0.707107,0.000000,0.000000,0.707107 +1969,0.707107,0.000000,0.000000,0.707107 +1970,0.707107,0.000000,0.000000,0.707107 +1971,0.707107,0.000000,0.000000,0.707107 +1972,0.707107,0.000000,0.000000,0.707107 +1973,0.707107,0.000000,0.000000,0.707107 +1974,0.707107,0.000000,0.000000,0.707107 +1975,0.707107,0.000000,0.000000,0.707107 +1976,0.707107,0.000000,0.000000,0.707107 +1977,0.707107,0.000000,0.000000,0.707107 +1978,0.707107,0.000000,0.000000,0.707107 +1979,0.707107,0.000000,0.000000,0.707107 +1980,0.707107,0.000000,0.000000,0.707107 +1981,0.707107,0.000000,0.000000,0.707107 +1982,0.707107,0.000000,0.000000,0.707107 +1983,0.707107,0.000000,0.000000,0.707107 +1984,0.707107,0.000000,0.000000,0.707107 +1985,0.707107,0.000000,0.000000,0.707107 +1986,0.707107,0.000000,0.000000,0.707107 +1987,0.707107,0.000000,0.000000,0.707107 +1988,0.707107,0.000000,0.000000,0.707107 +1989,0.707107,0.000000,0.000000,0.707107 +1990,0.707107,0.000000,0.000000,0.707107 +1991,0.707107,0.000000,0.000000,0.707107 +1992,0.707107,0.000000,0.000000,0.707107 +1993,0.707107,0.000000,0.000000,0.707107 +1994,0.707107,0.000000,0.000000,0.707107 +1995,0.707107,0.000000,0.000000,0.707107 +1996,0.707107,0.000000,0.000000,0.707107 +1997,0.707107,0.000000,0.000000,0.707107 +1998,0.707107,0.000000,0.000000,0.707107 +1999,0.707107,0.000000,0.000000,0.707107 +2000,0.707107,0.000000,0.000000,0.707107 +2001,0.707107,0.000000,0.000000,0.707107 +2002,0.707107,0.000000,0.000000,0.707107 +2003,0.707107,0.000000,0.000000,0.707107 +2004,0.707107,0.000000,0.000000,0.707107 +2005,0.707107,0.000000,0.000000,0.707107 +2006,0.707107,0.000000,0.000000,0.707107 +2007,0.707107,0.000000,0.000000,0.707107 +2008,0.707107,0.000000,0.000000,0.707107 +2009,0.707107,0.000000,0.000000,0.707107 +2010,0.707107,0.000000,0.000000,0.707107 +2011,0.707107,0.000000,0.000000,0.707107 +2012,0.707107,0.000000,0.000000,0.707107 +2013,0.707107,0.000000,0.000000,0.707107 +2014,0.707107,0.000000,0.000000,0.707107 +2015,0.707107,0.000000,0.000000,0.707107 +2016,0.707107,0.000000,0.000000,0.707107 +2017,0.707107,0.000000,0.000000,0.707107 +2018,0.707107,0.000000,0.000000,0.707107 +2019,0.707107,0.000000,0.000000,0.707107 +2020,0.707107,0.000000,0.000000,0.707107 +2021,0.707107,0.000000,0.000000,0.707107 +2022,0.707107,0.000000,0.000000,0.707107 +2023,0.707107,0.000000,0.000000,0.707107 +2024,0.707107,0.000000,0.000000,0.707107 +2025,0.707107,0.000000,0.000000,0.707107 +2026,0.707107,0.000000,0.000000,0.707107 +2027,0.707107,0.000000,0.000000,0.707107 +2028,0.707107,0.000000,0.000000,0.707107 +2029,0.707107,0.000000,0.000000,0.707107 +2030,0.707107,0.000000,0.000000,0.707107 +2031,0.707107,0.000000,0.000000,0.707107 +2032,0.707107,0.000000,0.000000,0.707107 +2033,0.707107,0.000000,0.000000,0.707107 +2034,0.707107,0.000000,0.000000,0.707107 +2035,0.707107,0.000000,0.000000,0.707107 +2036,0.707107,0.000000,0.000000,0.707107 +2037,0.707107,0.000000,0.000000,0.707107 +2038,0.707107,0.000000,0.000000,0.707107 +2039,0.707107,0.000000,0.000000,0.707107 +2040,0.707107,0.000000,0.000000,0.707107 +2041,0.707107,0.000000,0.000000,0.707107 +2042,0.707107,0.000000,0.000000,0.707107 +2043,0.707107,0.000000,0.000000,0.707107 +2044,0.707107,0.000000,0.000000,0.707107 +2045,0.707107,0.000000,0.000000,0.707107 +2046,0.707107,0.000000,0.000000,0.707107 +2047,0.707107,0.000000,0.000000,0.707107 +2048,0.707107,0.000000,0.000000,0.707107 +2049,0.707107,0.000000,0.000000,0.707107 +2050,0.707107,0.000000,0.000000,0.707107 +2051,0.707107,0.000000,0.000000,0.707107 +2052,0.707107,0.000000,0.000000,0.707107 +2053,0.707107,0.000000,0.000000,0.707107 +2054,0.707107,0.000000,0.000000,0.707107 +2055,0.707107,0.000000,0.000000,0.707107 +2056,0.707107,0.000000,0.000000,0.707107 +2057,0.707107,0.000000,0.000000,0.707107 +2058,0.707107,0.000000,0.000000,0.707107 +2059,0.707107,0.000000,0.000000,0.707107 +2060,0.707107,0.000000,0.000000,0.707107 +2061,0.707107,0.000000,0.000000,0.707107 +2062,0.707107,0.000000,0.000000,0.707107 +2063,0.707107,0.000000,0.000000,0.707107 +2064,0.707107,0.000000,0.000000,0.707107 +2065,0.707107,0.000000,0.000000,0.707107 +2066,0.707107,0.000000,0.000000,0.707107 +2067,0.707107,0.000000,0.000000,0.707107 +2068,0.707107,0.000000,0.000000,0.707107 +2069,0.707107,0.000000,0.000000,0.707107 +2070,0.707107,0.000000,0.000000,0.707107 +2071,0.707107,0.000000,0.000000,0.707107 +2072,0.707107,0.000000,0.000000,0.707107 +2073,0.707107,0.000000,0.000000,0.707107 +2074,0.707107,0.000000,0.000000,0.707107 +2075,0.707107,0.000000,0.000000,0.707107 +2076,0.707107,0.000000,0.000000,0.707107 +2077,0.707107,0.000000,0.000000,0.707107 +2078,0.707107,0.000000,0.000000,0.707107 +2079,0.707107,0.000000,0.000000,0.707107 +2080,0.707107,0.000000,0.000000,0.707107 +2081,0.707107,0.000000,0.000000,0.707107 +2082,0.707107,0.000000,0.000000,0.707107 +2083,0.707107,0.000000,0.000000,0.707107 +2084,0.707107,0.000000,0.000000,0.707107 +2085,0.707107,0.000000,0.000000,0.707107 +2086,0.707107,0.000000,0.000000,0.707107 +2087,0.707107,0.000000,0.000000,0.707107 +2088,0.707107,0.000000,0.000000,0.707107 +2089,0.707107,0.000000,0.000000,0.707107 +2090,0.707107,0.000000,0.000000,0.707107 +2091,0.707107,0.000000,0.000000,0.707107 +2092,0.707107,0.000000,0.000000,0.707107 +2093,0.707107,0.000000,0.000000,0.707107 +2094,0.707107,0.000000,0.000000,0.707107 +2095,0.707107,0.000000,0.000000,0.707107 +2096,0.707107,0.000000,0.000000,0.707107 +2097,0.707107,0.000000,0.000000,0.707107 +2098,0.707107,0.000000,0.000000,0.707107 +2099,0.707107,0.000000,0.000000,0.707107 +2100,0.707107,0.000000,0.000000,0.707107 +2101,0.707107,0.000000,0.000000,0.707107 +2102,0.707107,0.000000,0.000000,0.707107 +2103,0.707107,0.000000,0.000000,0.707107 +2104,0.707107,0.000000,0.000000,0.707107 +2105,0.707107,0.000000,0.000000,0.707107 +2106,0.707107,0.000000,0.000000,0.707107 +2107,0.707107,0.000000,0.000000,0.707107 +2108,0.707107,0.000000,0.000000,0.707107 +2109,0.707107,0.000000,0.000000,0.707107 +2110,0.707107,0.000000,0.000000,0.707107 +2111,0.707107,0.000000,0.000000,0.707107 +2112,0.707107,0.000000,0.000000,0.707107 +2113,0.707107,0.000000,0.000000,0.707107 +2114,0.707107,0.000000,0.000000,0.707107 +2115,0.707107,0.000000,0.000000,0.707107 +2116,0.707107,0.000000,0.000000,0.707107 +2117,0.707107,0.000000,0.000000,0.707107 +2118,0.707107,0.000000,0.000000,0.707107 +2119,0.707107,0.000000,0.000000,0.707107 +2120,0.707107,0.000000,0.000000,0.707107 +2121,0.707107,0.000000,0.000000,0.707107 +2122,0.707107,0.000000,0.000000,0.707107 +2123,0.707107,0.000000,0.000000,0.707107 +2124,0.707107,0.000000,0.000000,0.707107 +2125,0.707107,0.000000,0.000000,0.707107 +2126,0.707107,0.000000,0.000000,0.707107 +2127,0.707107,0.000000,0.000000,0.707107 +2128,0.707107,0.000000,0.000000,0.707107 +2129,0.707107,0.000000,0.000000,0.707107 +2130,0.707107,0.000000,0.000000,0.707107 +2131,0.707107,0.000000,0.000000,0.707107 +2132,0.707107,0.000000,0.000000,0.707107 +2133,0.707107,0.000000,0.000000,0.707107 +2134,0.707107,0.000000,0.000000,0.707107 +2135,0.707107,0.000000,0.000000,0.707107 +2136,0.707107,0.000000,0.000000,0.707107 +2137,0.707107,0.000000,0.000000,0.707107 +2138,0.707107,0.000000,0.000000,0.707107 +2139,0.707107,0.000000,0.000000,0.707107 +2140,0.707107,0.000000,0.000000,0.707107 +2141,0.707107,0.000000,0.000000,0.707107 +2142,0.707107,0.000000,0.000000,0.707107 +2143,0.707107,0.000000,0.000000,0.707107 +2144,0.707107,0.000000,0.000000,0.707107 +2145,0.707107,0.000000,0.000000,0.707107 +2146,0.707107,0.000000,0.000000,0.707107 +2147,0.707107,0.000000,0.000000,0.707107 +2148,0.707107,0.000000,0.000000,0.707107 +2149,0.707107,0.000000,0.000000,0.707107 +2150,0.707107,0.000000,0.000000,0.707107 +2151,0.707107,0.000000,0.000000,0.707107 +2152,0.707107,0.000000,0.000000,0.707107 +2153,0.707107,0.000000,0.000000,0.707107 +2154,0.707107,0.000000,0.000000,0.707107 +2155,0.707107,0.000000,0.000000,0.707107 +2156,0.707107,0.000000,0.000000,0.707107 +2157,0.707107,0.000000,0.000000,0.707107 +2158,0.707107,0.000000,0.000000,0.707107 +2159,0.707107,0.000000,0.000000,0.707107 +2160,0.707107,0.000000,0.000000,0.707107 +2161,0.707107,0.000000,0.000000,0.707107 +2162,0.707107,0.000000,0.000000,0.707107 +2163,0.707107,0.000000,0.000000,0.707107 +2164,0.707107,0.000000,0.000000,0.707107 +2165,0.707107,0.000000,0.000000,0.707107 +2166,0.707107,0.000000,0.000000,0.707107 +2167,0.707107,0.000000,0.000000,0.707107 +2168,0.707107,0.000000,0.000000,0.707107 +2169,0.707107,0.000000,0.000000,0.707107 +2170,0.707107,0.000000,0.000000,0.707107 +2171,0.707107,0.000000,0.000000,0.707107 +2172,0.707107,0.000000,0.000000,0.707107 +2173,0.707107,0.000000,0.000000,0.707107 +2174,0.707107,0.000000,0.000000,0.707107 +2175,0.707107,0.000000,0.000000,0.707107 +2176,0.707107,0.000000,0.000000,0.707107 +2177,0.707107,0.000000,0.000000,0.707107 +2178,0.707107,0.000000,0.000000,0.707107 +2179,0.707107,0.000000,0.000000,0.707107 +2180,0.707107,0.000000,0.000000,0.707107 +2181,0.707107,0.000000,0.000000,0.707107 +2182,0.707107,0.000000,0.000000,0.707107 +2183,0.707107,0.000000,0.000000,0.707107 +2184,0.707107,0.000000,0.000000,0.707107 +2185,0.707107,0.000000,0.000000,0.707107 +2186,0.707107,0.000000,0.000000,0.707107 +2187,0.707107,0.000000,0.000000,0.707107 +2188,0.707107,0.000000,0.000000,0.707107 +2189,0.707107,0.000000,0.000000,0.707107 +2190,0.707107,0.000000,0.000000,0.707107 +2191,0.707107,0.000000,0.000000,0.707107 +2192,0.707107,0.000000,0.000000,0.707107 +2193,0.707107,0.000000,0.000000,0.707107 +2194,0.707107,0.000000,0.000000,0.707107 +2195,0.707107,0.000000,0.000000,0.707107 +2196,0.707107,0.000000,0.000000,0.707107 +2197,0.707107,0.000000,0.000000,0.707107 +2198,0.707107,0.000000,0.000000,0.707107 +2199,0.707107,0.000000,0.000000,0.707107 +2200,0.707107,0.000000,0.000000,0.707107 +2201,0.707107,0.000000,0.000000,0.707107 +2202,0.707107,0.000000,0.000000,0.707107 +2203,0.707107,0.000000,0.000000,0.707107 +2204,0.707107,0.000000,0.000000,0.707107 +2205,0.707107,0.000000,0.000000,0.707107 +2206,0.707107,0.000000,0.000000,0.707107 +2207,0.707107,0.000000,0.000000,0.707107 +2208,0.707107,0.000000,0.000000,0.707107 +2209,0.707107,0.000000,0.000000,0.707107 +2210,0.707107,0.000000,0.000000,0.707107 +2211,0.707107,0.000000,0.000000,0.707107 +2212,0.707107,0.000000,0.000000,0.707107 +2213,0.707107,0.000000,0.000000,0.707107 +2214,0.707107,0.000000,0.000000,0.707107 +2215,0.707107,0.000000,0.000000,0.707107 +2216,0.707107,0.000000,0.000000,0.707107 +2217,0.707107,0.000000,0.000000,0.707107 +2218,0.707107,0.000000,0.000000,0.707107 +2219,0.707107,0.000000,0.000000,0.707107 +2220,0.707107,0.000000,0.000000,0.707107 +2221,0.707107,0.000000,0.000000,0.707107 +2222,0.707107,0.000000,0.000000,0.707107 +2223,0.707107,0.000000,0.000000,0.707107 +2224,0.707107,0.000000,0.000000,0.707107 +2225,0.707107,0.000000,0.000000,0.707107 +2226,0.707107,0.000000,0.000000,0.707107 +2227,0.707107,0.000000,0.000000,0.707107 +2228,0.707107,0.000000,0.000000,0.707107 +2229,0.707107,0.000000,0.000000,0.707107 +2230,0.707107,0.000000,0.000000,0.707107 +2231,0.707107,0.000000,0.000000,0.707107 +2232,0.707107,0.000000,0.000000,0.707107 +2233,0.707107,0.000000,0.000000,0.707107 +2234,0.707107,0.000000,0.000000,0.707107 +2235,0.707107,0.000000,0.000000,0.707107 +2236,0.707107,0.000000,0.000000,0.707107 +2237,0.707107,0.000000,0.000000,0.707107 +2238,0.707107,0.000000,0.000000,0.707107 +2239,0.707107,0.000000,0.000000,0.707107 +2240,0.707107,0.000000,0.000000,0.707107 +2241,0.707107,0.000000,0.000000,0.707107 +2242,0.707107,0.000000,0.000000,0.707107 +2243,0.707107,0.000000,0.000000,0.707107 +2244,0.707107,0.000000,0.000000,0.707107 +2245,0.707107,0.000000,0.000000,0.707107 +2246,0.707107,0.000000,0.000000,0.707107 +2247,0.707107,0.000000,0.000000,0.707107 +2248,0.707107,0.000000,0.000000,0.707107 +2249,0.707107,0.000000,0.000000,0.707107 +2250,0.707107,0.000000,0.000000,0.707107 +2251,0.707107,0.000000,0.000000,0.707107 +2252,0.707107,0.000000,0.000000,0.707107 +2253,0.707107,0.000000,0.000000,0.707107 +2254,0.707107,0.000000,0.000000,0.707107 +2255,0.707107,0.000000,0.000000,0.707107 +2256,0.707107,0.000000,0.000000,0.707107 +2257,0.707107,0.000000,0.000000,0.707107 +2258,0.707107,0.000000,0.000000,0.707107 +2259,0.707107,0.000000,0.000000,0.707107 +2260,0.707107,0.000000,0.000000,0.707107 +2261,0.707107,0.000000,0.000000,0.707107 +2262,0.707107,0.000000,0.000000,0.707107 +2263,0.707107,0.000000,0.000000,0.707107 +2264,0.707107,0.000000,0.000000,0.707107 +2265,0.707107,0.000000,0.000000,0.707107 +2266,0.707107,0.000000,0.000000,0.707107 +2267,0.707107,0.000000,0.000000,0.707107 +2268,0.707107,0.000000,0.000000,0.707107 +2269,0.707107,0.000000,0.000000,0.707107 +2270,0.707107,0.000000,0.000000,0.707107 +2271,0.707107,0.000000,0.000000,0.707107 +2272,0.707107,0.000000,0.000000,0.707107 +2273,0.707107,0.000000,0.000000,0.707107 +2274,0.707107,0.000000,0.000000,0.707107 +2275,0.707107,0.000000,0.000000,0.707107 +2276,0.707107,0.000000,0.000000,0.707107 +2277,0.707107,0.000000,0.000000,0.707107 +2278,0.707107,0.000000,0.000000,0.707107 +2279,0.707107,0.000000,0.000000,0.707107 +2280,0.707107,0.000000,0.000000,0.707107 +2281,0.707107,0.000000,0.000000,0.707107 +2282,0.707107,0.000000,0.000000,0.707107 +2283,0.707107,0.000000,0.000000,0.707107 +2284,0.707107,0.000000,0.000000,0.707107 +2285,0.707107,0.000000,0.000000,0.707107 +2286,0.707107,0.000000,0.000000,0.707107 +2287,0.707107,0.000000,0.000000,0.707107 +2288,0.707107,0.000000,0.000000,0.707107 +2289,0.707107,0.000000,0.000000,0.707107 +2290,0.707107,0.000000,0.000000,0.707107 +2291,0.707107,0.000000,0.000000,0.707107 +2292,0.707107,0.000000,0.000000,0.707107 +2293,0.707107,0.000000,0.000000,0.707107 +2294,0.707107,0.000000,0.000000,0.707107 +2295,0.707107,0.000000,0.000000,0.707107 +2296,0.707107,0.000000,0.000000,0.707107 +2297,0.707107,0.000000,0.000000,0.707107 +2298,0.707107,0.000000,0.000000,0.707107 +2299,0.707107,0.000000,0.000000,0.707107 +2300,0.707107,0.000000,0.000000,0.707107 +2301,0.707107,0.000000,0.000000,0.707107 +2302,0.707107,0.000000,0.000000,0.707107 +2303,0.707107,0.000000,0.000000,0.707107 +2304,0.707107,0.000000,0.000000,0.707107 +2305,0.707107,0.000000,0.000000,0.707107 +2306,0.707107,0.000000,0.000000,0.707107 +2307,0.707107,0.000000,0.000000,0.707107 +2308,0.707107,0.000000,0.000000,0.707107 +2309,0.707107,0.000000,0.000000,0.707107 +2310,0.707107,0.000000,0.000000,0.707107 +2311,0.707107,0.000000,0.000000,0.707107 +2312,0.707107,0.000000,0.000000,0.707107 +2313,0.707107,0.000000,0.000000,0.707107 +2314,0.707107,0.000000,0.000000,0.707107 +2315,0.707107,0.000000,0.000000,0.707107 +2316,0.707107,0.000000,0.000000,0.707107 +2317,0.707107,0.000000,0.000000,0.707107 +2318,0.707107,0.000000,0.000000,0.707107 +2319,0.707107,0.000000,0.000000,0.707107 +2320,0.707107,0.000000,0.000000,0.707107 +2321,0.707107,0.000000,0.000000,0.707107 +2322,0.707107,0.000000,0.000000,0.707107 +2323,0.707107,0.000000,0.000000,0.707107 +2324,0.707107,0.000000,0.000000,0.707107 +2325,0.707107,0.000000,0.000000,0.707107 +2326,0.707107,0.000000,0.000000,0.707107 +2327,0.707107,0.000000,0.000000,0.707107 +2328,0.707107,0.000000,0.000000,0.707107 +2329,0.707107,0.000000,0.000000,0.707107 +2330,0.707107,0.000000,0.000000,0.707107 +2331,0.707107,0.000000,0.000000,0.707107 +2332,0.707107,0.000000,0.000000,0.707107 +2333,0.707107,0.000000,0.000000,0.707107 +2334,0.707107,0.000000,0.000000,0.707107 +2335,0.707107,0.000000,0.000000,0.707107 +2336,0.707107,0.000000,0.000000,0.707107 +2337,0.707107,0.000000,0.000000,0.707107 +2338,0.707107,0.000000,0.000000,0.707107 +2339,0.707107,0.000000,0.000000,0.707107 +2340,0.707107,0.000000,0.000000,0.707107 +2341,0.707107,0.000000,0.000000,0.707107 +2342,0.707107,0.000000,0.000000,0.707107 +2343,0.707107,0.000000,0.000000,0.707107 +2344,0.707107,0.000000,0.000000,0.707107 +2345,0.707107,0.000000,0.000000,0.707107 +2346,0.707107,0.000000,0.000000,0.707107 +2347,0.707107,0.000000,0.000000,0.707107 +2348,0.707107,0.000000,0.000000,0.707107 +2349,0.707107,0.000000,0.000000,0.707107 +2350,0.707107,0.000000,0.000000,0.707107 +2351,0.707107,0.000000,0.000000,0.707107 +2352,0.707107,0.000000,0.000000,0.707107 +2353,0.707107,0.000000,0.000000,0.707107 +2354,0.707107,0.000000,0.000000,0.707107 +2355,0.707107,0.000000,0.000000,0.707107 +2356,0.707107,0.000000,0.000000,0.707107 +2357,0.707107,0.000000,0.000000,0.707107 +2358,0.707107,0.000000,0.000000,0.707107 +2359,0.707107,0.000000,0.000000,0.707107 +2360,0.707107,0.000000,0.000000,0.707107 +2361,0.707107,0.000000,0.000000,0.707107 +2362,0.707107,0.000000,0.000000,0.707107 +2363,0.707107,0.000000,0.000000,0.707107 +2364,0.707107,0.000000,0.000000,0.707107 +2365,0.707107,0.000000,0.000000,0.707107 +2366,0.707107,0.000000,0.000000,0.707107 +2367,0.707107,0.000000,0.000000,0.707107 +2368,0.707107,0.000000,0.000000,0.707107 +2369,0.707107,0.000000,0.000000,0.707107 +2370,0.707107,0.000000,0.000000,0.707107 +2371,0.707107,0.000000,0.000000,0.707107 +2372,0.707107,0.000000,0.000000,0.707107 +2373,0.707107,0.000000,0.000000,0.707107 +2374,0.707107,0.000000,0.000000,0.707107 +2375,0.707107,0.000000,0.000000,0.707107 +2376,0.707107,0.000000,0.000000,0.707107 +2377,0.707107,0.000000,0.000000,0.707107 +2378,0.707107,0.000000,0.000000,0.707107 +2379,0.707107,0.000000,0.000000,0.707107 +2380,0.707107,0.000000,0.000000,0.707107 +2381,0.707107,0.000000,0.000000,0.707107 +2382,0.707107,0.000000,0.000000,0.707107 +2383,0.707107,0.000000,0.000000,0.707107 +2384,0.707107,0.000000,0.000000,0.707107 +2385,0.707107,0.000000,0.000000,0.707107 +2386,0.707107,0.000000,0.000000,0.707107 +2387,0.707107,0.000000,0.000000,0.707107 +2388,0.707107,0.000000,0.000000,0.707107 +2389,0.707107,0.000000,0.000000,0.707107 +2390,0.707107,0.000000,0.000000,0.707107 +2391,0.707107,0.000000,0.000000,0.707107 +2392,0.707107,0.000000,0.000000,0.707107 +2393,0.707107,0.000000,0.000000,0.707107 +2394,0.707107,0.000000,0.000000,0.707107 +2395,0.707107,0.000000,0.000000,0.707107 +2396,0.707107,0.000000,0.000000,0.707107 +2397,0.707107,0.000000,0.000000,0.707107 +2398,0.707107,0.000000,0.000000,0.707107 +2399,0.707107,0.000000,0.000000,0.707107 +2400,0.707107,0.000000,0.000000,0.707107 +2401,0.707107,0.000000,0.000000,0.707107 +2402,0.707107,0.000000,0.000000,0.707107 +2403,0.707107,0.000000,0.000000,0.707107 +2404,0.707107,0.000000,0.000000,0.707107 +2405,0.707107,0.000000,0.000000,0.707107 +2406,0.707107,0.000000,0.000000,0.707107 +2407,0.707107,0.000000,0.000000,0.707107 +2408,0.707107,0.000000,0.000000,0.707107 +2409,0.707107,0.000000,0.000000,0.707107 +2410,0.707107,0.000000,0.000000,0.707107 +2411,0.707107,0.000000,0.000000,0.707107 +2412,0.707107,0.000000,0.000000,0.707107 +2413,0.707107,0.000000,0.000000,0.707107 +2414,0.707107,0.000000,0.000000,0.707107 +2415,0.707107,0.000000,0.000000,0.707107 +2416,0.707107,0.000000,0.000000,0.707107 +2417,0.707107,0.000000,0.000000,0.707107 +2418,0.707107,0.000000,0.000000,0.707107 +2419,0.707107,0.000000,0.000000,0.707107 +2420,0.707107,0.000000,0.000000,0.707107 +2421,0.707107,0.000000,0.000000,0.707107 +2422,0.707107,0.000000,0.000000,0.707107 +2423,0.707107,0.000000,0.000000,0.707107 +2424,0.707107,0.000000,0.000000,0.707107 +2425,0.707107,0.000000,0.000000,0.707107 +2426,0.707107,0.000000,0.000000,0.707107 +2427,0.707107,0.000000,0.000000,0.707107 +2428,0.707107,0.000000,0.000000,0.707107 +2429,0.707107,0.000000,0.000000,0.707107 +2430,0.707107,0.000000,0.000000,0.707107 +2431,0.707107,0.000000,0.000000,0.707107 +2432,0.707107,0.000000,0.000000,0.707107 +2433,0.707107,0.000000,0.000000,0.707107 +2434,0.707107,0.000000,0.000000,0.707107 +2435,0.707107,0.000000,0.000000,0.707107 +2436,0.707107,0.000000,0.000000,0.707107 +2437,0.707107,0.000000,0.000000,0.707107 +2438,0.707107,0.000000,0.000000,0.707107 +2439,0.707107,0.000000,0.000000,0.707107 +2440,0.707107,0.000000,0.000000,0.707107 +2441,0.707107,0.000000,0.000000,0.707107 +2442,0.707107,0.000000,0.000000,0.707107 +2443,0.707107,0.000000,0.000000,0.707107 +2444,0.707107,0.000000,0.000000,0.707107 +2445,0.707107,0.000000,0.000000,0.707107 +2446,0.707107,0.000000,0.000000,0.707107 +2447,0.707107,0.000000,0.000000,0.707107 +2448,0.707107,0.000000,0.000000,0.707107 +2449,0.707107,0.000000,0.000000,0.707107 +2450,0.707107,0.000000,0.000000,0.707107 +2451,0.707107,0.000000,0.000000,0.707107 +2452,0.707107,0.000000,0.000000,0.707107 +2453,0.707107,0.000000,0.000000,0.707107 +2454,0.707107,0.000000,0.000000,0.707107 +2455,0.707107,0.000000,0.000000,0.707107 +2456,0.707107,0.000000,0.000000,0.707107 +2457,0.707107,0.000000,0.000000,0.707107 +2458,0.707107,0.000000,0.000000,0.707107 +2459,0.707107,0.000000,0.000000,0.707107 +2460,0.707107,0.000000,0.000000,0.707107 +2461,0.707107,0.000000,0.000000,0.707107 +2462,0.707107,0.000000,0.000000,0.707107 +2463,0.707107,0.000000,0.000000,0.707107 +2464,0.707107,0.000000,0.000000,0.707107 +2465,0.707107,0.000000,0.000000,0.707107 +2466,0.707107,0.000000,0.000000,0.707107 +2467,0.707107,0.000000,0.000000,0.707107 +2468,0.707107,0.000000,0.000000,0.707107 +2469,0.707107,0.000000,0.000000,0.707107 +2470,0.707107,0.000000,0.000000,0.707107 +2471,0.707107,0.000000,0.000000,0.707107 +2472,0.707107,0.000000,0.000000,0.707107 +2473,0.707107,0.000000,0.000000,0.707107 +2474,0.707107,0.000000,0.000000,0.707107 +2475,0.707107,0.000000,0.000000,0.707107 +2476,0.707107,0.000000,0.000000,0.707107 +2477,0.707107,0.000000,0.000000,0.707107 +2478,0.707107,0.000000,0.000000,0.707107 +2479,0.707107,0.000000,0.000000,0.707107 +2480,0.707107,0.000000,0.000000,0.707107 +2481,0.707107,0.000000,0.000000,0.707107 +2482,0.707107,0.000000,0.000000,0.707107 +2483,0.707107,0.000000,0.000000,0.707107 +2484,0.707107,0.000000,0.000000,0.707107 +2485,0.707107,0.000000,0.000000,0.707107 +2486,0.707107,0.000000,0.000000,0.707107 +2487,0.707107,0.000000,0.000000,0.707107 +2488,0.707107,0.000000,0.000000,0.707107 +2489,0.707107,0.000000,0.000000,0.707107 +2490,0.707107,0.000000,0.000000,0.707107 +2491,0.707107,0.000000,0.000000,0.707107 +2492,0.707107,0.000000,0.000000,0.707107 +2493,0.707107,0.000000,0.000000,0.707107 +2494,0.707107,0.000000,0.000000,0.707107 +2495,0.707107,0.000000,0.000000,0.707107 +2496,0.707107,0.000000,0.000000,0.707107 +2497,0.707107,0.000000,0.000000,0.707107 +2498,0.707107,0.000000,0.000000,0.707107 +2499,0.707107,0.000000,0.000000,0.707107 +2500,0.707107,0.000000,0.000000,0.707107 +2501,0.707107,0.000000,0.000000,0.707107 +2502,0.707107,0.000000,0.000000,0.707107 +2503,0.707107,0.000000,0.000000,0.707107 +2504,0.707107,0.000000,0.000000,0.707107 +2505,0.707107,0.000000,0.000000,0.707107 +2506,0.707107,0.000000,0.000000,0.707107 +2507,0.707107,0.000000,0.000000,0.707107 +2508,0.707107,0.000000,0.000000,0.707107 +2509,0.707107,0.000000,0.000000,0.707107 +2510,0.707107,0.000000,0.000000,0.707107 +2511,0.707107,0.000000,0.000000,0.707107 +2512,0.707107,0.000000,0.000000,0.707107 +2513,0.707107,0.000000,0.000000,0.707107 +2514,0.707107,0.000000,0.000000,0.707107 +2515,0.707107,0.000000,0.000000,0.707107 +2516,0.707107,0.000000,0.000000,0.707107 +2517,0.707107,0.000000,0.000000,0.707107 +2518,0.707107,0.000000,0.000000,0.707107 +2519,0.707107,0.000000,0.000000,0.707107 +2520,0.707107,0.000000,0.000000,0.707107 +2521,0.707107,0.000000,0.000000,0.707107 +2522,0.707107,0.000000,0.000000,0.707107 +2523,0.707107,0.000000,0.000000,0.707107 +2524,0.707107,0.000000,0.000000,0.707107 +2525,0.707107,0.000000,0.000000,0.707107 +2526,0.707107,0.000000,0.000000,0.707107 +2527,0.707107,0.000000,0.000000,0.707107 +2528,0.707107,0.000000,0.000000,0.707107 +2529,0.707107,0.000000,0.000000,0.707107 +2530,0.707107,0.000000,0.000000,0.707107 +2531,0.707107,0.000000,0.000000,0.707107 +2532,0.707107,0.000000,0.000000,0.707107 +2533,0.707107,0.000000,0.000000,0.707107 +2534,0.707107,0.000000,0.000000,0.707107 +2535,0.707107,0.000000,0.000000,0.707107 +2536,0.707107,0.000000,0.000000,0.707107 +2537,0.707107,0.000000,0.000000,0.707107 +2538,0.707107,0.000000,0.000000,0.707107 +2539,0.707107,0.000000,0.000000,0.707107 +2540,0.707107,0.000000,0.000000,0.707107 +2541,0.707107,0.000000,0.000000,0.707107 +2542,0.707107,0.000000,0.000000,0.707107 +2543,0.707107,0.000000,0.000000,0.707107 +2544,0.707107,0.000000,0.000000,0.707107 +2545,0.707107,0.000000,0.000000,0.707107 +2546,0.707107,0.000000,0.000000,0.707107 +2547,0.707107,0.000000,0.000000,0.707107 +2548,0.707107,0.000000,0.000000,0.707107 +2549,0.707107,0.000000,0.000000,0.707107 +2550,0.707107,0.000000,0.000000,0.707107 +2551,0.707107,0.000000,0.000000,0.707107 +2552,0.707107,0.000000,0.000000,0.707107 +2553,0.707107,0.000000,0.000000,0.707107 +2554,0.707107,0.000000,0.000000,0.707107 +2555,0.707107,0.000000,0.000000,0.707107 +2556,0.707107,0.000000,0.000000,0.707107 +2557,0.707107,0.000000,0.000000,0.707107 +2558,0.707107,0.000000,0.000000,0.707107 +2559,0.707107,0.000000,0.000000,0.707107 +2560,0.707107,0.000000,0.000000,0.707107 +2561,0.707107,0.000000,0.000000,0.707107 +2562,0.707107,0.000000,0.000000,0.707107 +2563,0.707107,0.000000,0.000000,0.707107 +2564,0.707107,0.000000,0.000000,0.707107 +2565,0.707107,0.000000,0.000000,0.707107 +2566,0.707107,0.000000,0.000000,0.707107 +2567,0.707107,0.000000,0.000000,0.707107 +2568,0.707107,0.000000,0.000000,0.707107 +2569,0.707107,0.000000,0.000000,0.707107 +2570,0.707107,0.000000,0.000000,0.707107 +2571,0.707107,0.000000,0.000000,0.707107 +2572,0.707107,0.000000,0.000000,0.707107 +2573,0.707107,0.000000,0.000000,0.707107 +2574,0.707107,0.000000,0.000000,0.707107 +2575,0.707107,0.000000,0.000000,0.707107 +2576,0.707107,0.000000,0.000000,0.707107 +2577,0.707107,0.000000,0.000000,0.707107 +2578,0.707107,0.000000,0.000000,0.707107 +2579,0.707107,0.000000,0.000000,0.707107 +2580,0.707107,0.000000,0.000000,0.707107 +2581,0.707107,0.000000,0.000000,0.707107 +2582,0.707107,0.000000,0.000000,0.707107 +2583,0.707107,0.000000,0.000000,0.707107 +2584,0.707107,0.000000,0.000000,0.707107 +2585,0.707107,0.000000,0.000000,0.707107 +2586,0.707107,0.000000,0.000000,0.707107 +2587,0.707107,0.000000,0.000000,0.707107 +2588,0.707107,0.000000,0.000000,0.707107 +2589,0.707107,0.000000,0.000000,0.707107 +2590,0.707107,0.000000,0.000000,0.707107 +2591,0.707107,0.000000,0.000000,0.707107 +2592,0.707107,0.000000,0.000000,0.707107 +2593,0.707107,0.000000,0.000000,0.707107 +2594,0.707107,0.000000,0.000000,0.707107 +2595,0.707107,0.000000,0.000000,0.707107 +2596,0.707107,0.000000,0.000000,0.707107 +2597,0.707107,0.000000,0.000000,0.707107 +2598,0.707107,0.000000,0.000000,0.707107 +2599,0.707107,0.000000,0.000000,0.707107 +2600,0.707107,0.000000,0.000000,0.707107 +2601,0.707107,0.000000,0.000000,0.707107 +2602,0.707107,0.000000,0.000000,0.707107 +2603,0.707107,0.000000,0.000000,0.707107 +2604,0.707107,0.000000,0.000000,0.707107 +2605,0.707107,0.000000,0.000000,0.707107 +2606,0.707107,0.000000,0.000000,0.707107 +2607,0.707107,0.000000,0.000000,0.707107 +2608,0.707107,0.000000,0.000000,0.707107 +2609,0.707107,0.000000,0.000000,0.707107 +2610,0.707107,0.000000,0.000000,0.707107 +2611,0.707107,0.000000,0.000000,0.707107 +2612,0.707107,0.000000,0.000000,0.707107 +2613,0.707107,0.000000,0.000000,0.707107 +2614,0.707107,0.000000,0.000000,0.707107 +2615,0.707107,0.000000,0.000000,0.707107 +2616,0.707107,0.000000,0.000000,0.707107 +2617,0.707107,0.000000,0.000000,0.707107 +2618,0.707107,0.000000,0.000000,0.707107 +2619,0.707107,0.000000,0.000000,0.707107 +2620,0.707107,0.000000,0.000000,0.707107 +2621,0.707107,0.000000,0.000000,0.707107 +2622,0.707107,0.000000,0.000000,0.707107 +2623,0.707107,0.000000,0.000000,0.707107 +2624,0.707107,0.000000,0.000000,0.707107 +2625,0.707107,0.000000,0.000000,0.707107 +2626,0.707107,0.000000,0.000000,0.707107 +2627,0.707107,0.000000,0.000000,0.707107 +2628,0.707107,0.000000,0.000000,0.707107 +2629,0.707107,0.000000,0.000000,0.707107 +2630,0.707107,0.000000,0.000000,0.707107 +2631,0.707107,0.000000,0.000000,0.707107 +2632,0.707107,0.000000,0.000000,0.707107 +2633,0.707107,0.000000,0.000000,0.707107 +2634,0.707107,0.000000,0.000000,0.707107 +2635,0.707107,0.000000,0.000000,0.707107 +2636,0.707107,0.000000,0.000000,0.707107 +2637,0.707107,0.000000,0.000000,0.707107 +2638,0.707107,0.000000,0.000000,0.707107 +2639,0.707107,0.000000,0.000000,0.707107 +2640,0.707107,0.000000,0.000000,0.707107 +2641,0.707107,0.000000,0.000000,0.707107 +2642,0.707107,0.000000,0.000000,0.707107 +2643,0.707107,0.000000,0.000000,0.707107 +2644,0.707107,0.000000,0.000000,0.707107 +2645,0.707107,0.000000,0.000000,0.707107 +2646,0.707107,0.000000,0.000000,0.707107 +2647,0.707107,0.000000,0.000000,0.707107 +2648,0.707107,0.000000,0.000000,0.707107 +2649,0.707107,0.000000,0.000000,0.707107 +2650,0.707107,0.000000,0.000000,0.707107 +2651,0.707107,0.000000,0.000000,0.707107 +2652,0.707107,0.000000,0.000000,0.707107 +2653,0.707107,0.000000,0.000000,0.707107 +2654,0.707107,0.000000,0.000000,0.707107 +2655,0.707107,0.000000,0.000000,0.707107 +2656,0.707107,0.000000,0.000000,0.707107 +2657,0.707107,0.000000,0.000000,0.707107 +2658,0.707107,0.000000,0.000000,0.707107 +2659,0.707107,0.000000,0.000000,0.707107 +2660,0.707107,0.000000,0.000000,0.707107 +2661,0.707107,0.000000,0.000000,0.707107 +2662,0.707107,0.000000,0.000000,0.707107 +2663,0.707107,0.000000,0.000000,0.707107 +2664,0.707107,0.000000,0.000000,0.707107 +2665,0.707107,0.000000,0.000000,0.707107 +2666,0.707107,0.000000,0.000000,0.707107 +2667,0.707107,0.000000,0.000000,0.707107 +2668,0.707107,0.000000,0.000000,0.707107 +2669,0.707107,0.000000,0.000000,0.707107 +2670,0.707107,0.000000,0.000000,0.707107 +2671,0.707107,0.000000,0.000000,0.707107 +2672,0.707107,0.000000,0.000000,0.707107 +2673,0.707107,0.000000,0.000000,0.707107 +2674,0.707107,0.000000,0.000000,0.707107 +2675,0.707107,0.000000,0.000000,0.707107 +2676,0.707107,0.000000,0.000000,0.707107 +2677,0.707107,0.000000,0.000000,0.707107 +2678,0.707107,0.000000,0.000000,0.707107 +2679,0.707107,0.000000,0.000000,0.707107 +2680,0.707107,0.000000,0.000000,0.707107 +2681,0.707107,0.000000,0.000000,0.707107 +2682,0.707107,0.000000,0.000000,0.707107 +2683,0.707107,0.000000,0.000000,0.707107 +2684,0.707107,0.000000,0.000000,0.707107 +2685,0.707107,0.000000,0.000000,0.707107 +2686,0.707107,0.000000,0.000000,0.707107 +2687,0.707107,0.000000,0.000000,0.707107 +2688,0.707107,0.000000,0.000000,0.707107 +2689,0.707107,0.000000,0.000000,0.707107 +2690,0.707107,0.000000,0.000000,0.707107 +2691,0.707107,0.000000,0.000000,0.707107 +2692,0.707107,0.000000,0.000000,0.707107 +2693,0.707107,0.000000,0.000000,0.707107 +2694,0.707107,0.000000,0.000000,0.707107 +2695,0.707107,0.000000,0.000000,0.707107 +2696,0.707107,0.000000,0.000000,0.707107 +2697,0.707107,0.000000,0.000000,0.707107 +2698,0.707107,0.000000,0.000000,0.707107 +2699,0.707107,0.000000,0.000000,0.707107 +2700,0.707107,0.000000,0.000000,0.707107 +2701,0.707107,0.000000,0.000000,0.707107 +2702,0.707107,0.000000,0.000000,0.707107 +2703,0.707107,0.000000,0.000000,0.707107 +2704,0.707107,0.000000,0.000000,0.707107 +2705,0.707107,0.000000,0.000000,0.707107 +2706,0.707107,0.000000,0.000000,0.707107 +2707,0.707107,0.000000,0.000000,0.707107 +2708,0.707107,0.000000,0.000000,0.707107 +2709,0.707107,0.000000,0.000000,0.707107 +2710,0.707107,0.000000,0.000000,0.707107 +2711,0.707107,0.000000,0.000000,0.707107 +2712,0.707107,0.000000,0.000000,0.707107 +2713,0.707107,0.000000,0.000000,0.707107 +2714,0.707107,0.000000,0.000000,0.707107 +2715,0.707107,0.000000,0.000000,0.707107 +2716,0.707107,0.000000,0.000000,0.707107 +2717,0.707107,0.000000,0.000000,0.707107 +2718,0.707107,0.000000,0.000000,0.707107 +2719,0.707107,0.000000,0.000000,0.707107 +2720,0.707107,0.000000,0.000000,0.707107 +2721,0.707107,0.000000,0.000000,0.707107 +2722,0.707107,0.000000,0.000000,0.707107 +2723,0.707107,0.000000,0.000000,0.707107 +2724,0.707107,0.000000,0.000000,0.707107 +2725,0.707107,0.000000,0.000000,0.707107 +2726,0.707107,0.000000,0.000000,0.707107 +2727,0.707107,0.000000,0.000000,0.707107 +2728,0.707107,0.000000,0.000000,0.707107 +2729,0.707107,0.000000,0.000000,0.707107 +2730,0.707107,0.000000,0.000000,0.707107 +2731,0.707107,0.000000,0.000000,0.707107 +2732,0.707107,0.000000,0.000000,0.707107 +2733,0.707107,0.000000,0.000000,0.707107 +2734,0.707107,0.000000,0.000000,0.707107 +2735,0.707107,0.000000,0.000000,0.707107 +2736,0.707107,0.000000,0.000000,0.707107 +2737,0.707107,0.000000,0.000000,0.707107 +2738,0.707107,0.000000,0.000000,0.707107 +2739,0.707107,0.000000,0.000000,0.707107 +2740,0.707107,0.000000,0.000000,0.707107 +2741,0.707107,0.000000,0.000000,0.707107 +2742,0.707107,0.000000,0.000000,0.707107 +2743,0.707107,0.000000,0.000000,0.707107 +2744,0.707107,0.000000,0.000000,0.707107 +2745,0.707107,0.000000,0.000000,0.707107 +2746,0.707107,0.000000,0.000000,0.707107 +2747,0.707107,0.000000,0.000000,0.707107 +2748,0.707107,0.000000,0.000000,0.707107 +2749,0.707107,0.000000,0.000000,0.707107 +2750,0.707107,0.000000,0.000000,0.707107 +2751,0.707107,0.000000,0.000000,0.707107 +2752,0.707107,0.000000,0.000000,0.707107 +2753,0.707107,0.000000,0.000000,0.707107 +2754,0.707107,0.000000,0.000000,0.707107 +2755,0.707107,0.000000,0.000000,0.707107 +2756,0.707107,0.000000,0.000000,0.707107 +2757,0.707107,0.000000,0.000000,0.707107 +2758,0.707107,0.000000,0.000000,0.707107 +2759,0.707107,0.000000,0.000000,0.707107 +2760,0.707107,0.000000,0.000000,0.707107 +2761,0.707107,0.000000,0.000000,0.707107 +2762,0.707107,0.000000,0.000000,0.707107 +2763,0.707107,0.000000,0.000000,0.707107 +2764,0.707107,0.000000,0.000000,0.707107 +2765,0.707107,0.000000,0.000000,0.707107 +2766,0.707107,0.000000,0.000000,0.707107 +2767,0.707107,0.000000,0.000000,0.707107 +2768,0.707107,0.000000,0.000000,0.707107 +2769,0.707107,0.000000,0.000000,0.707107 +2770,0.707107,0.000000,0.000000,0.707107 +2771,0.707107,0.000000,0.000000,0.707107 +2772,0.707107,0.000000,0.000000,0.707107 +2773,0.707107,0.000000,0.000000,0.707107 +2774,0.707107,0.000000,0.000000,0.707107 +2775,0.707107,0.000000,0.000000,0.707107 +2776,0.707107,0.000000,0.000000,0.707107 +2777,0.707107,0.000000,0.000000,0.707107 +2778,0.707107,0.000000,0.000000,0.707107 +2779,0.707107,0.000000,0.000000,0.707107 +2780,0.707107,0.000000,0.000000,0.707107 +2781,0.707107,0.000000,0.000000,0.707107 +2782,0.707107,0.000000,0.000000,0.707107 +2783,0.707107,0.000000,0.000000,0.707107 +2784,0.707107,0.000000,0.000000,0.707107 +2785,0.707107,0.000000,0.000000,0.707107 +2786,0.707107,0.000000,0.000000,0.707107 +2787,0.707107,0.000000,0.000000,0.707107 +2788,0.707107,0.000000,0.000000,0.707107 +2789,0.707107,0.000000,0.000000,0.707107 +2790,0.707107,0.000000,0.000000,0.707107 +2791,0.707107,0.000000,0.000000,0.707107 +2792,0.707107,0.000000,0.000000,0.707107 +2793,0.707107,0.000000,0.000000,0.707107 +2794,0.707107,0.000000,0.000000,0.707107 +2795,0.707107,0.000000,0.000000,0.707107 +2796,0.707107,0.000000,0.000000,0.707107 +2797,0.707107,0.000000,0.000000,0.707107 +2798,0.707107,0.000000,0.000000,0.707107 +2799,0.707107,0.000000,0.000000,0.707107 +2800,0.707107,0.000000,0.000000,0.707107 +2801,0.707107,0.000000,0.000000,0.707107 +2802,0.707107,0.000000,0.000000,0.707107 +2803,0.707107,0.000000,0.000000,0.707107 +2804,0.707107,0.000000,0.000000,0.707107 +2805,0.707107,0.000000,0.000000,0.707107 +2806,0.707107,0.000000,0.000000,0.707107 +2807,0.707107,0.000000,0.000000,0.707107 +2808,0.707107,0.000000,0.000000,0.707107 +2809,0.707107,0.000000,0.000000,0.707107 +2810,0.707107,0.000000,0.000000,0.707107 +2811,0.707107,0.000000,0.000000,0.707107 +2812,0.707107,0.000000,0.000000,0.707107 +2813,0.707107,0.000000,0.000000,0.707107 +2814,0.707107,0.000000,0.000000,0.707107 +2815,0.707107,0.000000,0.000000,0.707107 +2816,0.707107,0.000000,0.000000,0.707107 +2817,0.707107,0.000000,0.000000,0.707107 +2818,0.707107,0.000000,0.000000,0.707107 +2819,0.707107,0.000000,0.000000,0.707107 +2820,0.707107,0.000000,0.000000,0.707107 +2821,0.707107,0.000000,0.000000,0.707107 +2822,0.707107,0.000000,0.000000,0.707107 +2823,0.707107,0.000000,0.000000,0.707107 +2824,0.707107,0.000000,0.000000,0.707107 +2825,0.707107,0.000000,0.000000,0.707107 +2826,0.707107,0.000000,0.000000,0.707107 +2827,0.707107,0.000000,0.000000,0.707107 +2828,0.707107,0.000000,0.000000,0.707107 +2829,0.707107,0.000000,0.000000,0.707107 +2830,0.707107,0.000000,0.000000,0.707107 +2831,0.707107,0.000000,0.000000,0.707107 +2832,0.707107,0.000000,0.000000,0.707107 +2833,0.707107,0.000000,0.000000,0.707107 +2834,0.707107,0.000000,0.000000,0.707107 +2835,0.707107,0.000000,0.000000,0.707107 +2836,0.707107,0.000000,0.000000,0.707107 +2837,0.707107,0.000000,0.000000,0.707107 +2838,0.707107,0.000000,0.000000,0.707107 +2839,0.707107,0.000000,0.000000,0.707107 +2840,0.707107,0.000000,0.000000,0.707107 +2841,0.707107,0.000000,0.000000,0.707107 +2842,0.707107,0.000000,0.000000,0.707107 +2843,0.707107,0.000000,0.000000,0.707107 +2844,0.707107,0.000000,0.000000,0.707107 +2845,0.707107,0.000000,0.000000,0.707107 +2846,0.707107,0.000000,0.000000,0.707107 +2847,0.707107,0.000000,0.000000,0.707107 +2848,0.707107,0.000000,0.000000,0.707107 +2849,0.707107,0.000000,0.000000,0.707107 +2850,0.707107,0.000000,0.000000,0.707107 +2851,0.707107,0.000000,0.000000,0.707107 +2852,0.707107,0.000000,0.000000,0.707107 +2853,0.707107,0.000000,0.000000,0.707107 +2854,0.707107,0.000000,0.000000,0.707107 +2855,0.707107,0.000000,0.000000,0.707107 +2856,0.707107,0.000000,0.000000,0.707107 +2857,0.707107,0.000000,0.000000,0.707107 +2858,0.707107,0.000000,0.000000,0.707107 +2859,0.707107,0.000000,0.000000,0.707107 +2860,0.707107,0.000000,0.000000,0.707107 +2861,0.707107,0.000000,0.000000,0.707107 +2862,0.707107,0.000000,0.000000,0.707107 +2863,0.707107,0.000000,0.000000,0.707107 +2864,0.707107,0.000000,0.000000,0.707107 +2865,0.707107,0.000000,0.000000,0.707107 +2866,0.707107,0.000000,0.000000,0.707107 +2867,0.707107,0.000000,0.000000,0.707107 +2868,0.707107,0.000000,0.000000,0.707107 +2869,0.707107,0.000000,0.000000,0.707107 +2870,0.707107,0.000000,0.000000,0.707107 +2871,0.707107,0.000000,0.000000,0.707107 +2872,0.707107,0.000000,0.000000,0.707107 +2873,0.707107,0.000000,0.000000,0.707107 +2874,0.707107,0.000000,0.000000,0.707107 +2875,0.707107,0.000000,0.000000,0.707107 +2876,0.707107,0.000000,0.000000,0.707107 +2877,0.707107,0.000000,0.000000,0.707107 +2878,0.707107,0.000000,0.000000,0.707107 +2879,0.707107,0.000000,0.000000,0.707107 +2880,0.707107,0.000000,0.000000,0.707107 +2881,0.707107,0.000000,0.000000,0.707107 +2882,0.707107,0.000000,0.000000,0.707107 +2883,0.707107,0.000000,0.000000,0.707107 +2884,0.707107,0.000000,0.000000,0.707107 +2885,0.707107,0.000000,0.000000,0.707107 +2886,0.707107,0.000000,0.000000,0.707107 +2887,0.707107,0.000000,0.000000,0.707107 +2888,0.707107,0.000000,0.000000,0.707107 +2889,0.707107,0.000000,0.000000,0.707107 +2890,0.707107,0.000000,0.000000,0.707107 +2891,0.707107,0.000000,0.000000,0.707107 +2892,0.707107,0.000000,0.000000,0.707107 +2893,0.707107,0.000000,0.000000,0.707107 +2894,0.707107,0.000000,0.000000,0.707107 +2895,0.707107,0.000000,0.000000,0.707107 +2896,0.707107,0.000000,0.000000,0.707107 +2897,0.707107,0.000000,0.000000,0.707107 +2898,0.707107,0.000000,0.000000,0.707107 +2899,0.707107,0.000000,0.000000,0.707107 +2900,0.707107,0.000000,0.000000,0.707107 +2901,0.707107,0.000000,0.000000,0.707107 +2902,0.707107,0.000000,0.000000,0.707107 +2903,0.707107,0.000000,0.000000,0.707107 +2904,0.707107,0.000000,0.000000,0.707107 +2905,0.707107,0.000000,0.000000,0.707107 +2906,0.707107,0.000000,0.000000,0.707107 +2907,0.707107,0.000000,0.000000,0.707107 +2908,0.707107,0.000000,0.000000,0.707107 +2909,0.707107,0.000000,0.000000,0.707107 +2910,0.707107,0.000000,0.000000,0.707107 +2911,0.707107,0.000000,0.000000,0.707107 +2912,0.707107,0.000000,0.000000,0.707107 +2913,0.707107,0.000000,0.000000,0.707107 +2914,0.707107,0.000000,0.000000,0.707107 +2915,0.707107,0.000000,0.000000,0.707107 +2916,0.707107,0.000000,0.000000,0.707107 +2917,0.707107,0.000000,0.000000,0.707107 +2918,0.707107,0.000000,0.000000,0.707107 +2919,0.707107,0.000000,0.000000,0.707107 +2920,0.707107,0.000000,0.000000,0.707107 +2921,0.707107,0.000000,0.000000,0.707107 +2922,0.707107,0.000000,0.000000,0.707107 +2923,0.707107,0.000000,0.000000,0.707107 +2924,0.707107,0.000000,0.000000,0.707107 +2925,0.707107,0.000000,0.000000,0.707107 +2926,0.707107,0.000000,0.000000,0.707107 +2927,0.707107,0.000000,0.000000,0.707107 +2928,0.707107,0.000000,0.000000,0.707107 +2929,0.707107,0.000000,0.000000,0.707107 +2930,0.707107,0.000000,0.000000,0.707107 +2931,0.707107,0.000000,0.000000,0.707107 +2932,0.707107,0.000000,0.000000,0.707107 +2933,0.707107,0.000000,0.000000,0.707107 +2934,0.707107,0.000000,0.000000,0.707107 +2935,0.707107,0.000000,0.000000,0.707107 +2936,0.707107,0.000000,0.000000,0.707107 +2937,0.707107,0.000000,0.000000,0.707107 +2938,0.707107,0.000000,0.000000,0.707107 +2939,0.707107,0.000000,0.000000,0.707107 +2940,0.707107,0.000000,0.000000,0.707107 +2941,0.707107,0.000000,0.000000,0.707107 +2942,0.707107,0.000000,0.000000,0.707107 +2943,0.707107,0.000000,0.000000,0.707107 +2944,0.707107,0.000000,0.000000,0.707107 +2945,0.707107,0.000000,0.000000,0.707107 +2946,0.707107,0.000000,0.000000,0.707107 +2947,0.707107,0.000000,0.000000,0.707107 +2948,0.707107,0.000000,0.000000,0.707107 +2949,0.707107,0.000000,0.000000,0.707107 +2950,0.707107,0.000000,0.000000,0.707107 +2951,0.707107,0.000000,0.000000,0.707107 +2952,0.707107,0.000000,0.000000,0.707107 +2953,0.707107,0.000000,0.000000,0.707107 +2954,0.707107,0.000000,0.000000,0.707107 +2955,0.707107,0.000000,0.000000,0.707107 +2956,0.707107,0.000000,0.000000,0.707107 +2957,0.707107,0.000000,0.000000,0.707107 +2958,0.707107,0.000000,0.000000,0.707107 +2959,0.707107,0.000000,0.000000,0.707107 +2960,0.707107,0.000000,0.000000,0.707107 +2961,0.707107,0.000000,0.000000,0.707107 +2962,0.707107,0.000000,0.000000,0.707107 +2963,0.707107,0.000000,0.000000,0.707107 +2964,0.707107,0.000000,0.000000,0.707107 +2965,0.707107,0.000000,0.000000,0.707107 +2966,0.707107,0.000000,0.000000,0.707107 +2967,0.707107,0.000000,0.000000,0.707107 +2968,0.707107,0.000000,0.000000,0.707107 +2969,0.707107,0.000000,0.000000,0.707107 +2970,0.707107,0.000000,0.000000,0.707107 +2971,0.707107,0.000000,0.000000,0.707107 +2972,0.707107,0.000000,0.000000,0.707107 +2973,0.707107,0.000000,0.000000,0.707107 +2974,0.707107,0.000000,0.000000,0.707107 +2975,0.707107,0.000000,0.000000,0.707107 +2976,0.707107,0.000000,0.000000,0.707107 +2977,0.707107,0.000000,0.000000,0.707107 +2978,0.707107,0.000000,0.000000,0.707107 +2979,0.707107,0.000000,0.000000,0.707107 +2980,0.707107,0.000000,0.000000,0.707107 +2981,0.707107,0.000000,0.000000,0.707107 +2982,0.707107,0.000000,0.000000,0.707107 +2983,0.707107,0.000000,0.000000,0.707107 +2984,0.707107,0.000000,0.000000,0.707107 +2985,0.707107,0.000000,0.000000,0.707107 +2986,0.707107,0.000000,0.000000,0.707107 +2987,0.707107,0.000000,0.000000,0.707107 +2988,0.707107,0.000000,0.000000,0.707107 +2989,0.707107,0.000000,0.000000,0.707107 +2990,0.707107,0.000000,0.000000,0.707107 +2991,0.707107,0.000000,0.000000,0.707107 +2992,0.707107,0.000000,0.000000,0.707107 +2993,0.707107,0.000000,0.000000,0.707107 +2994,0.707107,0.000000,0.000000,0.707107 +2995,0.707107,0.000000,0.000000,0.707107 +2996,0.707107,0.000000,0.000000,0.707107 +2997,0.707107,0.000000,0.000000,0.707107 +2998,0.707107,0.000000,0.000000,0.707107 +2999,0.707107,0.000000,0.000000,0.707107 +3000,0.707107,0.000000,0.000000,0.707107 +3001,0.707107,0.000000,0.000000,0.707107 +3002,0.707107,0.000000,0.000000,0.707107 +3003,0.707107,0.000000,0.000000,0.707107 +3004,0.707107,0.000000,0.000000,0.707107 +3005,0.707107,0.000000,0.000000,0.707107 +3006,0.707107,0.000000,0.000000,0.707107 +3007,0.707107,0.000000,0.000000,0.707107 +3008,0.707107,0.000000,0.000000,0.707107 +3009,0.707107,0.000000,0.000000,0.707107 +3010,0.707107,0.000000,0.000000,0.707107 +3011,0.707107,0.000000,0.000000,0.707107 +3012,0.707107,0.000000,0.000000,0.707107 +3013,0.707107,0.000000,0.000000,0.707107 +3014,0.707107,0.000000,0.000000,0.707107 +3015,0.707107,0.000000,0.000000,0.707107 +3016,0.707107,0.000000,0.000000,0.707107 +3017,0.707107,0.000000,0.000000,0.707107 +3018,0.707107,0.000000,0.000000,0.707107 +3019,0.707107,0.000000,0.000000,0.707107 +3020,0.707107,0.000000,0.000000,0.707107 +3021,0.707107,0.000000,0.000000,0.707107 +3022,0.707107,0.000000,0.000000,0.707107 +3023,0.707107,0.000000,0.000000,0.707107 +3024,0.707107,0.000000,0.000000,0.707107 +3025,0.707107,0.000000,0.000000,0.707107 +3026,0.707107,0.000000,0.000000,0.707107 +3027,0.707107,0.000000,0.000000,0.707107 +3028,0.707107,0.000000,0.000000,0.707107 +3029,0.707107,0.000000,0.000000,0.707107 +3030,0.707107,0.000000,0.000000,0.707107 +3031,0.707107,0.000000,0.000000,0.707107 +3032,0.707107,0.000000,0.000000,0.707107 +3033,0.707107,0.000000,0.000000,0.707107 +3034,0.707107,0.000000,0.000000,0.707107 +3035,0.707107,0.000000,0.000000,0.707107 +3036,0.707107,0.000000,0.000000,0.707107 +3037,0.707107,0.000000,0.000000,0.707107 +3038,0.707107,0.000000,0.000000,0.707107 +3039,0.707107,0.000000,0.000000,0.707107 +3040,0.707107,0.000000,0.000000,0.707107 +3041,0.707107,0.000000,0.000000,0.707107 +3042,0.707107,0.000000,0.000000,0.707107 +3043,0.707107,0.000000,0.000000,0.707107 +3044,0.707107,0.000000,0.000000,0.707107 +3045,0.707107,0.000000,0.000000,0.707107 +3046,0.707107,0.000000,0.000000,0.707107 +3047,0.707107,0.000000,0.000000,0.707107 +3048,0.707107,0.000000,0.000000,0.707107 +3049,0.707107,0.000000,0.000000,0.707107 +3050,0.707107,0.000000,0.000000,0.707107 +3051,0.707107,0.000000,0.000000,0.707107 +3052,0.707107,0.000000,0.000000,0.707107 +3053,0.707107,0.000000,0.000000,0.707107 +3054,0.707107,0.000000,0.000000,0.707107 +3055,0.707107,0.000000,0.000000,0.707107 +3056,0.707107,0.000000,0.000000,0.707107 +3057,0.707107,0.000000,0.000000,0.707107 +3058,0.707107,0.000000,0.000000,0.707107 +3059,0.707107,0.000000,0.000000,0.707107 +3060,0.707107,0.000000,0.000000,0.707107 +3061,0.707107,0.000000,0.000000,0.707107 +3062,0.707107,0.000000,0.000000,0.707107 +3063,0.707107,0.000000,0.000000,0.707107 +3064,0.707107,0.000000,0.000000,0.707107 +3065,0.707107,0.000000,0.000000,0.707107 +3066,0.707107,0.000000,0.000000,0.707107 +3067,0.707107,0.000000,0.000000,0.707107 +3068,0.707107,0.000000,0.000000,0.707107 +3069,0.707107,0.000000,0.000000,0.707107 +3070,0.707107,0.000000,0.000000,0.707107 +3071,0.707107,0.000000,0.000000,0.707107 +3072,0.707107,0.000000,0.000000,0.707107 +3073,0.707107,0.000000,0.000000,0.707107 +3074,0.707107,0.000000,0.000000,0.707107 +3075,0.707107,0.000000,0.000000,0.707107 +3076,0.707107,0.000000,0.000000,0.707107 +3077,0.707107,0.000000,0.000000,0.707107 +3078,0.707107,0.000000,0.000000,0.707107 +3079,0.707107,0.000000,0.000000,0.707107 +3080,0.707107,0.000000,0.000000,0.707107 +3081,0.707107,0.000000,0.000000,0.707107 +3082,0.707107,0.000000,0.000000,0.707107 +3083,0.707107,0.000000,0.000000,0.707107 +3084,0.707107,0.000000,0.000000,0.707107 +3085,0.707107,0.000000,0.000000,0.707107 +3086,0.707107,0.000000,0.000000,0.707107 +3087,0.707107,0.000000,0.000000,0.707107 +3088,0.707107,0.000000,0.000000,0.707107 +3089,0.707107,0.000000,0.000000,0.707107 +3090,0.707107,0.000000,0.000000,0.707107 +3091,0.707107,0.000000,0.000000,0.707107 +3092,0.707107,0.000000,0.000000,0.707107 +3093,0.707107,0.000000,0.000000,0.707107 +3094,0.707107,0.000000,0.000000,0.707107 +3095,0.707107,0.000000,0.000000,0.707107 +3096,0.707107,0.000000,0.000000,0.707107 +3097,0.707107,0.000000,0.000000,0.707107 +3098,0.707107,0.000000,0.000000,0.707107 +3099,0.707107,0.000000,0.000000,0.707107 +3100,0.707107,0.000000,0.000000,0.707107 +3101,0.707107,0.000000,0.000000,0.707107 +3102,0.707107,0.000000,0.000000,0.707107 +3103,0.707107,0.000000,0.000000,0.707107 +3104,0.707107,0.000000,0.000000,0.707107 +3105,0.707107,0.000000,0.000000,0.707107 +3106,0.707107,0.000000,0.000000,0.707107 +3107,0.707107,0.000000,0.000000,0.707107 +3108,0.707107,0.000000,0.000000,0.707107 +3109,0.707107,0.000000,0.000000,0.707107 +3110,0.707107,0.000000,0.000000,0.707107 +3111,0.707107,0.000000,0.000000,0.707107 +3112,0.707107,0.000000,0.000000,0.707107 +3113,0.707107,0.000000,0.000000,0.707107 +3114,0.707107,0.000000,0.000000,0.707107 +3115,0.707107,0.000000,0.000000,0.707107 +3116,0.707107,0.000000,0.000000,0.707107 +3117,0.707107,0.000000,0.000000,0.707107 +3118,0.707107,0.000000,0.000000,0.707107 +3119,0.707107,0.000000,0.000000,0.707107 +3120,0.707107,0.000000,0.000000,0.707107 +3121,0.707107,0.000000,0.000000,0.707107 +3122,0.707107,0.000000,0.000000,0.707107 +3123,0.707107,0.000000,0.000000,0.707107 +3124,0.707107,0.000000,0.000000,0.707107 +3125,0.707107,0.000000,0.000000,0.707107 +3126,0.707107,0.000000,0.000000,0.707107 +3127,0.707107,0.000000,0.000000,0.707107 +3128,0.707107,0.000000,0.000000,0.707107 +3129,0.707107,0.000000,0.000000,0.707107 +3130,0.707107,0.000000,0.000000,0.707107 +3131,0.707107,0.000000,0.000000,0.707107 +3132,0.707107,0.000000,0.000000,0.707107 +3133,0.707107,0.000000,0.000000,0.707107 +3134,0.707107,0.000000,0.000000,0.707107 +3135,0.707107,0.000000,0.000000,0.707107 +3136,0.707107,0.000000,0.000000,0.707107 +3137,0.707107,0.000000,0.000000,0.707107 +3138,0.707107,0.000000,0.000000,0.707107 +3139,0.707107,0.000000,0.000000,0.707107 +3140,0.707107,0.000000,0.000000,0.707107 +3141,0.707107,0.000000,0.000000,0.707107 +3142,0.707107,0.000000,0.000000,0.707107 +3143,0.707107,0.000000,0.000000,0.707107 +3144,0.707107,0.000000,0.000000,0.707107 +3145,0.707107,0.000000,0.000000,0.707107 +3146,0.707107,0.000000,0.000000,0.707107 +3147,0.707107,0.000000,0.000000,0.707107 +3148,0.707107,0.000000,0.000000,0.707107 +3149,0.707107,0.000000,0.000000,0.707107 +3150,0.707107,0.000000,0.000000,0.707107 +3151,0.707107,0.000000,0.000000,0.707107 +3152,0.707107,0.000000,0.000000,0.707107 +3153,0.707107,0.000000,0.000000,0.707107 +3154,0.707107,0.000000,0.000000,0.707107 +3155,0.707107,0.000000,0.000000,0.707107 +3156,0.707107,0.000000,0.000000,0.707107 +3157,0.707107,0.000000,0.000000,0.707107 +3158,0.707107,0.000000,0.000000,0.707107 +3159,0.707107,0.000000,0.000000,0.707107 +3160,0.707107,0.000000,0.000000,0.707107 +3161,0.707107,0.000000,0.000000,0.707107 +3162,0.707107,0.000000,0.000000,0.707107 +3163,0.707107,0.000000,0.000000,0.707107 +3164,0.707107,0.000000,0.000000,0.707107 +3165,0.707107,0.000000,0.000000,0.707107 +3166,0.707107,0.000000,0.000000,0.707107 +3167,0.707107,0.000000,0.000000,0.707107 +3168,0.707107,0.000000,0.000000,0.707107 +3169,0.707107,0.000000,0.000000,0.707107 +3170,0.707107,0.000000,0.000000,0.707107 +3171,0.707107,0.000000,0.000000,0.707107 +3172,0.707107,0.000000,0.000000,0.707107 +3173,0.707107,0.000000,0.000000,0.707107 +3174,0.707107,0.000000,0.000000,0.707107 +3175,0.707107,0.000000,0.000000,0.707107 +3176,0.707107,0.000000,0.000000,0.707107 +3177,0.707107,0.000000,0.000000,0.707107 +3178,0.707107,0.000000,0.000000,0.707107 +3179,0.707107,0.000000,0.000000,0.707107 +3180,0.707107,0.000000,0.000000,0.707107 +3181,0.707107,0.000000,0.000000,0.707107 +3182,0.707107,0.000000,0.000000,0.707107 +3183,0.707107,0.000000,0.000000,0.707107 +3184,0.707107,0.000000,0.000000,0.707107 +3185,0.707107,0.000000,0.000000,0.707107 +3186,0.707107,0.000000,0.000000,0.707107 +3187,0.707107,0.000000,0.000000,0.707107 +3188,0.707107,0.000000,0.000000,0.707107 +3189,0.707107,0.000000,0.000000,0.707107 +3190,0.707107,0.000000,0.000000,0.707107 +3191,0.707107,0.000000,0.000000,0.707107 +3192,0.707107,0.000000,0.000000,0.707107 +3193,0.707107,0.000000,0.000000,0.707107 +3194,0.707107,0.000000,0.000000,0.707107 +3195,0.707107,0.000000,0.000000,0.707107 +3196,0.707107,0.000000,0.000000,0.707107 +3197,0.707107,0.000000,0.000000,0.707107 +3198,0.707107,0.000000,0.000000,0.707107 +3199,0.707107,0.000000,0.000000,0.707107 +3200,0.707107,0.000000,0.000000,0.707107 +3201,0.707107,0.000000,0.000000,0.707107 +3202,0.707107,0.000000,0.000000,0.707107 +3203,0.707107,0.000000,0.000000,0.707107 +3204,0.707107,0.000000,0.000000,0.707107 +3205,0.707107,0.000000,0.000000,0.707107 +3206,0.707107,0.000000,0.000000,0.707107 +3207,0.707107,0.000000,0.000000,0.707107 +3208,0.707107,0.000000,0.000000,0.707107 +3209,0.707107,0.000000,0.000000,0.707107 +3210,0.707107,0.000000,0.000000,0.707107 +3211,0.707107,0.000000,0.000000,0.707107 +3212,0.707107,0.000000,0.000000,0.707107 +3213,0.707107,0.000000,0.000000,0.707107 +3214,0.707107,0.000000,0.000000,0.707107 +3215,0.707107,0.000000,0.000000,0.707107 +3216,0.707107,0.000000,0.000000,0.707107 +3217,0.707107,0.000000,0.000000,0.707107 +3218,0.707107,0.000000,0.000000,0.707107 +3219,0.707107,0.000000,0.000000,0.707107 +3220,0.707107,0.000000,0.000000,0.707107 +3221,0.707107,0.000000,0.000000,0.707107 +3222,0.707107,0.000000,0.000000,0.707107 +3223,0.707107,0.000000,0.000000,0.707107 +3224,0.707107,0.000000,0.000000,0.707107 +3225,0.707107,0.000000,0.000000,0.707107 +3226,0.707107,0.000000,0.000000,0.707107 +3227,0.707107,0.000000,0.000000,0.707107 +3228,0.707107,0.000000,0.000000,0.707107 +3229,0.707107,0.000000,0.000000,0.707107 +3230,0.707107,0.000000,0.000000,0.707107 +3231,0.707107,0.000000,0.000000,0.707107 +3232,0.707107,0.000000,0.000000,0.707107 +3233,0.707107,0.000000,0.000000,0.707107 +3234,0.707107,0.000000,0.000000,0.707107 +3235,0.707107,0.000000,0.000000,0.707107 +3236,0.707107,0.000000,0.000000,0.707107 +3237,0.707107,0.000000,0.000000,0.707107 +3238,0.707107,0.000000,0.000000,0.707107 +3239,0.707107,0.000000,0.000000,0.707107 +3240,0.707107,0.000000,0.000000,0.707107 +3241,0.707107,0.000000,0.000000,0.707107 +3242,0.707107,0.000000,0.000000,0.707107 +3243,0.707107,0.000000,0.000000,0.707107 +3244,0.707107,0.000000,0.000000,0.707107 +3245,0.707107,0.000000,0.000000,0.707107 +3246,0.707107,0.000000,0.000000,0.707107 +3247,0.707107,0.000000,0.000000,0.707107 +3248,0.707107,0.000000,0.000000,0.707107 +3249,0.707107,0.000000,0.000000,0.707107 +3250,0.707107,0.000000,0.000000,0.707107 +3251,0.707107,0.000000,0.000000,0.707107 +3252,0.707107,0.000000,0.000000,0.707107 +3253,0.707107,0.000000,0.000000,0.707107 +3254,0.707107,0.000000,0.000000,0.707107 +3255,0.707107,0.000000,0.000000,0.707107 +3256,0.707107,0.000000,0.000000,0.707107 +3257,0.707107,0.000000,0.000000,0.707107 +3258,0.707107,0.000000,0.000000,0.707107 +3259,0.707107,0.000000,0.000000,0.707107 +3260,0.707107,0.000000,0.000000,0.707107 +3261,0.707107,0.000000,0.000000,0.707107 +3262,0.707107,0.000000,0.000000,0.707107 +3263,0.707107,0.000000,0.000000,0.707107 +3264,0.707107,0.000000,0.000000,0.707107 +3265,0.707107,0.000000,0.000000,0.707107 +3266,0.707107,0.000000,0.000000,0.707107 +3267,0.707107,0.000000,0.000000,0.707107 +3268,0.707107,0.000000,0.000000,0.707107 +3269,0.707107,0.000000,0.000000,0.707107 +3270,0.707107,0.000000,0.000000,0.707107 +3271,0.707107,0.000000,0.000000,0.707107 +3272,0.707107,0.000000,0.000000,0.707107 +3273,0.707107,0.000000,0.000000,0.707107 +3274,0.707107,0.000000,0.000000,0.707107 +3275,0.707107,0.000000,0.000000,0.707107 +3276,0.707107,0.000000,0.000000,0.707107 +3277,0.707107,0.000000,0.000000,0.707107 +3278,0.707107,0.000000,0.000000,0.707107 +3279,0.707107,0.000000,0.000000,0.707107 +3280,0.707107,0.000000,0.000000,0.707107 +3281,0.707107,0.000000,0.000000,0.707107 +3282,0.707107,0.000000,0.000000,0.707107 +3283,0.707107,0.000000,0.000000,0.707107 +3284,0.707107,0.000000,0.000000,0.707107 +3285,0.707107,0.000000,0.000000,0.707107 +3286,0.707107,0.000000,0.000000,0.707107 +3287,0.707107,0.000000,0.000000,0.707107 +3288,0.707107,0.000000,0.000000,0.707107 +3289,0.707107,0.000000,0.000000,0.707107 +3290,0.707107,0.000000,0.000000,0.707107 +3291,0.707107,0.000000,0.000000,0.707107 +3292,0.707107,0.000000,0.000000,0.707107 +3293,0.707107,0.000000,0.000000,0.707107 +3294,0.707107,0.000000,0.000000,0.707107 +3295,0.707107,0.000000,0.000000,0.707107 +3296,0.707107,0.000000,0.000000,0.707107 +3297,0.707107,0.000000,0.000000,0.707107 +3298,0.707107,0.000000,0.000000,0.707107 +3299,0.707107,0.000000,0.000000,0.707107 +3300,0.707107,0.000000,0.000000,0.707107 +3301,0.707107,0.000000,0.000000,0.707107 +3302,0.707107,0.000000,0.000000,0.707107 +3303,0.707107,0.000000,0.000000,0.707107 +3304,0.707107,0.000000,0.000000,0.707107 +3305,0.707107,0.000000,0.000000,0.707107 +3306,0.707107,0.000000,0.000000,0.707107 +3307,0.707107,0.000000,0.000000,0.707107 +3308,0.707107,0.000000,0.000000,0.707107 +3309,0.707107,0.000000,0.000000,0.707107 +3310,0.707107,0.000000,0.000000,0.707107 +3311,0.707107,0.000000,0.000000,0.707107 +3312,0.707107,0.000000,0.000000,0.707107 +3313,0.707107,0.000000,0.000000,0.707107 +3314,0.707107,0.000000,0.000000,0.707107 +3315,0.707107,0.000000,0.000000,0.707107 +3316,0.707107,0.000000,0.000000,0.707107 +3317,0.707107,0.000000,0.000000,0.707107 +3318,0.707107,0.000000,0.000000,0.707107 +3319,0.707107,0.000000,0.000000,0.707107 +3320,0.707107,0.000000,0.000000,0.707107 +3321,0.707107,0.000000,0.000000,0.707107 +3322,0.707107,0.000000,0.000000,0.707107 +3323,0.707107,0.000000,0.000000,0.707107 +3324,0.707107,0.000000,0.000000,0.707107 +3325,0.707107,0.000000,0.000000,0.707107 +3326,0.707107,0.000000,0.000000,0.707107 +3327,0.707107,0.000000,0.000000,0.707107 +3328,0.707107,0.000000,0.000000,0.707107 +3329,0.707107,0.000000,0.000000,0.707107 +3330,0.707107,0.000000,0.000000,0.707107 +3331,0.707107,0.000000,0.000000,0.707107 +3332,0.707107,0.000000,0.000000,0.707107 +3333,0.707107,0.000000,0.000000,0.707107 +3334,0.707107,0.000000,0.000000,0.707107 +3335,0.707107,0.000000,0.000000,0.707107 +3336,0.707107,0.000000,0.000000,0.707107 +3337,0.707107,0.000000,0.000000,0.707107 +3338,0.707107,0.000000,0.000000,0.707107 +3339,0.707107,0.000000,0.000000,0.707107 +3340,0.707107,0.000000,0.000000,0.707107 +3341,0.707107,0.000000,0.000000,0.707107 +3342,0.707107,0.000000,0.000000,0.707107 +3343,0.707107,0.000000,0.000000,0.707107 +3344,0.707107,0.000000,0.000000,0.707107 +3345,0.707107,0.000000,0.000000,0.707107 +3346,0.707107,0.000000,0.000000,0.707107 +3347,0.707107,0.000000,0.000000,0.707107 +3348,0.707107,0.000000,0.000000,0.707107 +3349,0.707107,0.000000,0.000000,0.707107 +3350,0.707107,0.000000,0.000000,0.707107 +3351,0.707107,0.000000,0.000000,0.707107 +3352,0.707107,0.000000,0.000000,0.707107 +3353,0.707107,0.000000,0.000000,0.707107 +3354,0.707107,0.000000,0.000000,0.707107 +3355,0.707107,0.000000,0.000000,0.707107 +3356,0.707107,0.000000,0.000000,0.707107 +3357,0.707107,0.000000,0.000000,0.707107 +3358,0.707107,0.000000,0.000000,0.707107 +3359,0.707107,0.000000,0.000000,0.707107 +3360,0.707107,0.000000,0.000000,0.707107 +3361,0.707107,0.000000,0.000000,0.707107 +3362,0.707107,0.000000,0.000000,0.707107 +3363,0.707107,0.000000,0.000000,0.707107 +3364,0.707107,0.000000,0.000000,0.707107 +3365,0.707107,0.000000,0.000000,0.707107 +3366,0.707107,0.000000,0.000000,0.707107 +3367,0.707107,0.000000,0.000000,0.707107 +3368,0.707107,0.000000,0.000000,0.707107 +3369,0.707107,0.000000,0.000000,0.707107 +3370,0.707107,0.000000,0.000000,0.707107 +3371,0.707107,0.000000,0.000000,0.707107 +3372,0.707107,0.000000,0.000000,0.707107 +3373,0.707107,0.000000,0.000000,0.707107 +3374,0.707107,0.000000,0.000000,0.707107 +3375,0.707107,0.000000,0.000000,0.707107 +3376,0.707107,0.000000,0.000000,0.707107 +3377,0.707107,0.000000,0.000000,0.707107 +3378,0.707107,0.000000,0.000000,0.707107 +3379,0.707107,0.000000,0.000000,0.707107 +3380,0.707107,0.000000,0.000000,0.707107 +3381,0.707107,0.000000,0.000000,0.707107 +3382,0.707107,0.000000,0.000000,0.707107 +3383,0.707107,0.000000,0.000000,0.707107 +3384,0.707107,0.000000,0.000000,0.707107 +3385,0.707107,0.000000,0.000000,0.707107 +3386,0.707107,0.000000,0.000000,0.707107 +3387,0.707107,0.000000,0.000000,0.707107 +3388,0.707107,0.000000,0.000000,0.707107 +3389,0.707107,0.000000,0.000000,0.707107 +3390,0.707107,0.000000,0.000000,0.707107 +3391,0.707107,0.000000,0.000000,0.707107 +3392,0.707107,0.000000,0.000000,0.707107 +3393,0.707107,0.000000,0.000000,0.707107 +3394,0.707107,0.000000,0.000000,0.707107 +3395,0.707107,0.000000,0.000000,0.707107 +3396,0.707107,0.000000,0.000000,0.707107 +3397,0.707107,0.000000,0.000000,0.707107 +3398,0.707107,0.000000,0.000000,0.707107 +3399,0.707107,0.000000,0.000000,0.707107 +3400,0.707107,0.000000,0.000000,0.707107 +3401,0.707107,0.000000,0.000000,0.707107 +3402,0.707107,0.000000,0.000000,0.707107 +3403,0.707107,0.000000,0.000000,0.707107 +3404,0.707107,0.000000,0.000000,0.707107 +3405,0.707107,0.000000,0.000000,0.707107 +3406,0.707107,0.000000,0.000000,0.707107 +3407,0.707107,0.000000,0.000000,0.707107 +3408,0.707107,0.000000,0.000000,0.707107 +3409,0.707107,0.000000,0.000000,0.707107 +3410,0.707107,0.000000,0.000000,0.707107 +3411,0.707107,0.000000,0.000000,0.707107 +3412,0.707107,0.000000,0.000000,0.707107 +3413,0.707107,0.000000,0.000000,0.707107 +3414,0.707107,0.000000,0.000000,0.707107 +3415,0.707107,0.000000,0.000000,0.707107 +3416,0.707107,0.000000,0.000000,0.707107 +3417,0.707107,0.000000,0.000000,0.707107 +3418,0.707107,0.000000,0.000000,0.707107 +3419,0.707107,0.000000,0.000000,0.707107 +3420,0.707107,0.000000,0.000000,0.707107 +3421,0.707107,0.000000,0.000000,0.707107 +3422,0.707107,0.000000,0.000000,0.707107 +3423,0.707107,0.000000,0.000000,0.707107 +3424,0.707107,0.000000,0.000000,0.707107 +3425,0.707107,0.000000,0.000000,0.707107 +3426,0.707107,0.000000,0.000000,0.707107 +3427,0.707107,0.000000,0.000000,0.707107 +3428,0.707107,0.000000,0.000000,0.707107 +3429,0.707107,0.000000,0.000000,0.707107 +3430,0.707107,0.000000,0.000000,0.707107 +3431,0.707107,0.000000,0.000000,0.707107 +3432,0.707107,0.000000,0.000000,0.707107 +3433,0.707107,0.000000,0.000000,0.707107 +3434,0.707107,0.000000,0.000000,0.707107 +3435,0.707107,0.000000,0.000000,0.707107 +3436,0.707107,0.000000,0.000000,0.707107 +3437,0.707107,0.000000,0.000000,0.707107 +3438,0.707107,0.000000,0.000000,0.707107 +3439,0.707107,0.000000,0.000000,0.707107 +3440,0.707107,0.000000,0.000000,0.707107 +3441,0.707107,0.000000,0.000000,0.707107 +3442,0.707107,0.000000,0.000000,0.707107 +3443,0.707107,0.000000,0.000000,0.707107 +3444,0.707107,0.000000,0.000000,0.707107 +3445,0.707107,0.000000,0.000000,0.707107 +3446,0.707107,0.000000,0.000000,0.707107 +3447,0.707107,0.000000,0.000000,0.707107 +3448,0.707107,0.000000,0.000000,0.707107 +3449,0.707107,0.000000,0.000000,0.707107 +3450,0.707107,0.000000,0.000000,0.707107 +3451,0.707107,0.000000,0.000000,0.707107 +3452,0.707107,0.000000,0.000000,0.707107 +3453,0.707107,0.000000,0.000000,0.707107 +3454,0.707107,0.000000,0.000000,0.707107 +3455,0.707107,0.000000,0.000000,0.707107 +3456,0.707107,0.000000,0.000000,0.707107 +3457,0.707107,0.000000,0.000000,0.707107 +3458,0.707107,0.000000,0.000000,0.707107 +3459,0.707107,0.000000,0.000000,0.707107 +3460,0.707107,0.000000,0.000000,0.707107 +3461,0.707107,0.000000,0.000000,0.707107 +3462,0.707107,0.000000,0.000000,0.707107 +3463,0.707107,0.000000,0.000000,0.707107 +3464,0.707107,0.000000,0.000000,0.707107 +3465,0.707107,0.000000,0.000000,0.707107 +3466,0.707107,0.000000,0.000000,0.707107 +3467,0.707107,0.000000,0.000000,0.707107 +3468,0.707107,0.000000,0.000000,0.707107 +3469,0.707107,0.000000,0.000000,0.707107 +3470,0.707107,0.000000,0.000000,0.707107 +3471,0.707107,0.000000,0.000000,0.707107 +3472,0.707107,0.000000,0.000000,0.707107 +3473,0.707107,0.000000,0.000000,0.707107 +3474,0.707107,0.000000,0.000000,0.707107 +3475,0.707107,0.000000,0.000000,0.707107 +3476,0.707107,0.000000,0.000000,0.707107 +3477,0.707107,0.000000,0.000000,0.707107 +3478,0.707107,0.000000,0.000000,0.707107 +3479,0.707107,0.000000,0.000000,0.707107 +3480,0.707107,0.000000,0.000000,0.707107 +3481,0.707107,0.000000,0.000000,0.707107 +3482,0.707107,0.000000,0.000000,0.707107 +3483,0.707107,0.000000,0.000000,0.707107 +3484,0.707107,0.000000,0.000000,0.707107 +3485,0.707107,0.000000,0.000000,0.707107 +3486,0.707107,0.000000,0.000000,0.707107 +3487,0.707107,0.000000,0.000000,0.707107 +3488,0.707107,0.000000,0.000000,0.707107 +3489,0.707107,0.000000,0.000000,0.707107 +3490,0.707107,0.000000,0.000000,0.707107 +3491,0.707107,0.000000,0.000000,0.707107 +3492,0.707107,0.000000,0.000000,0.707107 +3493,0.707107,0.000000,0.000000,0.707107 +3494,0.707107,0.000000,0.000000,0.707107 +3495,0.707107,0.000000,0.000000,0.707107 +3496,0.707107,0.000000,0.000000,0.707107 +3497,0.707107,0.000000,0.000000,0.707107 +3498,0.707107,0.000000,0.000000,0.707107 +3499,0.707107,0.000000,0.000000,0.707107 +3500,0.707107,0.000000,0.000000,0.707107 +3501,0.707107,0.000000,0.000000,0.707107 +3502,0.707107,0.000000,0.000000,0.707107 +3503,0.707107,0.000000,0.000000,0.707107 +3504,0.707107,0.000000,0.000000,0.707107 +3505,0.707107,0.000000,0.000000,0.707107 +3506,0.707107,0.000000,0.000000,0.707107 +3507,0.707107,0.000000,0.000000,0.707107 +3508,0.707107,0.000000,0.000000,0.707107 +3509,0.707107,0.000000,0.000000,0.707107 +3510,0.707107,0.000000,0.000000,0.707107 +3511,0.707107,0.000000,0.000000,0.707107 +3512,0.707107,0.000000,0.000000,0.707107 +3513,0.707107,0.000000,0.000000,0.707107 +3514,0.707107,0.000000,0.000000,0.707107 +3515,0.707107,0.000000,0.000000,0.707107 +3516,0.707107,0.000000,0.000000,0.707107 +3517,0.707107,0.000000,0.000000,0.707107 +3518,0.707107,0.000000,0.000000,0.707107 +3519,0.707107,0.000000,0.000000,0.707107 +3520,0.707107,0.000000,0.000000,0.707107 +3521,0.707107,0.000000,0.000000,0.707107 +3522,0.707107,0.000000,0.000000,0.707107 +3523,0.707107,0.000000,0.000000,0.707107 +3524,0.707107,0.000000,0.000000,0.707107 +3525,0.707107,0.000000,0.000000,0.707107 +3526,0.707107,0.000000,0.000000,0.707107 +3527,0.707107,0.000000,0.000000,0.707107 +3528,0.707107,0.000000,0.000000,0.707107 +3529,0.707107,0.000000,0.000000,0.707107 +3530,0.707107,0.000000,0.000000,0.707107 +3531,0.707107,0.000000,0.000000,0.707107 +3532,0.707107,0.000000,0.000000,0.707107 +3533,0.707107,0.000000,0.000000,0.707107 +3534,0.707107,0.000000,0.000000,0.707107 +3535,0.707107,0.000000,0.000000,0.707107 +3536,0.707107,0.000000,0.000000,0.707107 +3537,0.707107,0.000000,0.000000,0.707107 +3538,0.707107,0.000000,0.000000,0.707107 +3539,0.707107,0.000000,0.000000,0.707107 +3540,0.707107,0.000000,0.000000,0.707107 +3541,0.707107,0.000000,0.000000,0.707107 +3542,0.707107,0.000000,0.000000,0.707107 +3543,0.707107,0.000000,0.000000,0.707107 +3544,0.707107,0.000000,0.000000,0.707107 +3545,0.707107,0.000000,0.000000,0.707107 +3546,0.707107,0.000000,0.000000,0.707107 +3547,0.707107,0.000000,0.000000,0.707107 +3548,0.707107,0.000000,0.000000,0.707107 +3549,0.707107,0.000000,0.000000,0.707107 +3550,0.707107,0.000000,0.000000,0.707107 +3551,0.707107,0.000000,0.000000,0.707107 +3552,0.707107,0.000000,0.000000,0.707107 +3553,0.707107,0.000000,0.000000,0.707107 +3554,0.707107,0.000000,0.000000,0.707107 +3555,0.707107,0.000000,0.000000,0.707107 +3556,0.707107,0.000000,0.000000,0.707107 +3557,0.707107,0.000000,0.000000,0.707107 +3558,0.707107,0.000000,0.000000,0.707107 +3559,0.707107,0.000000,0.000000,0.707107 +3560,0.707107,0.000000,0.000000,0.707107 +3561,0.707107,0.000000,0.000000,0.707107 +3562,0.707107,0.000000,0.000000,0.707107 +3563,0.707107,0.000000,0.000000,0.707107 +3564,0.707107,0.000000,0.000000,0.707107 +3565,0.707107,0.000000,0.000000,0.707107 +3566,0.707107,0.000000,0.000000,0.707107 +3567,0.707107,0.000000,0.000000,0.707107 +3568,0.707107,0.000000,0.000000,0.707107 +3569,0.707107,0.000000,0.000000,0.707107 +3570,0.707107,0.000000,0.000000,0.707107 +3571,0.707107,0.000000,0.000000,0.707107 +3572,0.707107,0.000000,0.000000,0.707107 +3573,0.707107,0.000000,0.000000,0.707107 +3574,0.707107,0.000000,0.000000,0.707107 +3575,0.707107,0.000000,0.000000,0.707107 +3576,0.707107,0.000000,0.000000,0.707107 +3577,0.707107,0.000000,0.000000,0.707107 +3578,0.707107,0.000000,0.000000,0.707107 +3579,0.707107,0.000000,0.000000,0.707107 +3580,0.707107,0.000000,0.000000,0.707107 +3581,0.707107,0.000000,0.000000,0.707107 +3582,0.707107,0.000000,0.000000,0.707107 +3583,0.707107,0.000000,0.000000,0.707107 +3584,0.707107,0.000000,0.000000,0.707107 +3585,0.707107,0.000000,0.000000,0.707107 +3586,0.707107,0.000000,0.000000,0.707107 +3587,0.707107,0.000000,0.000000,0.707107 +3588,0.707107,0.000000,0.000000,0.707107 +3589,0.707107,0.000000,0.000000,0.707107 +3590,0.707107,0.000000,0.000000,0.707107 +3591,0.707107,0.000000,0.000000,0.707107 +3592,0.707107,0.000000,0.000000,0.707107 +3593,0.707107,0.000000,0.000000,0.707107 +3594,0.707107,0.000000,0.000000,0.707107 +3595,0.707107,0.000000,0.000000,0.707107 +3596,0.707107,0.000000,0.000000,0.707107 +3597,0.707107,0.000000,0.000000,0.707107 +3598,0.707107,0.000000,0.000000,0.707107 +3599,0.707107,0.000000,0.000000,0.707107 +3600,0.707107,0.000000,0.000000,0.707107 +3601,0.707107,0.000000,0.000000,0.707107 +3602,0.707107,0.000000,0.000000,0.707107 +3603,0.707107,0.000000,0.000000,0.707107 +3604,0.707107,0.000000,0.000000,0.707107 +3605,0.707107,0.000000,0.000000,0.707107 +3606,0.707107,0.000000,0.000000,0.707107 +3607,0.707107,0.000000,0.000000,0.707107 +3608,0.707107,0.000000,0.000000,0.707107 +3609,0.707107,0.000000,0.000000,0.707107 +3610,0.707107,0.000000,0.000000,0.707107 +3611,0.707107,0.000000,0.000000,0.707107 +3612,0.707107,0.000000,0.000000,0.707107 +3613,0.707107,0.000000,0.000000,0.707107 +3614,0.707107,0.000000,0.000000,0.707107 +3615,0.707107,0.000000,0.000000,0.707107 +3616,0.707107,0.000000,0.000000,0.707107 +3617,0.707107,0.000000,0.000000,0.707107 +3618,0.707107,0.000000,0.000000,0.707107 +3619,0.707107,0.000000,0.000000,0.707107 +3620,0.707107,0.000000,0.000000,0.707107 +3621,0.707107,0.000000,0.000000,0.707107 +3622,0.707107,0.000000,0.000000,0.707107 +3623,0.707107,0.000000,0.000000,0.707107 +3624,0.707107,0.000000,0.000000,0.707107 +3625,0.707107,0.000000,0.000000,0.707107 +3626,0.707107,0.000000,0.000000,0.707107 +3627,0.707107,0.000000,0.000000,0.707107 +3628,0.707107,0.000000,0.000000,0.707107 +3629,0.707107,0.000000,0.000000,0.707107 +3630,0.707107,0.000000,0.000000,0.707107 +3631,0.707107,0.000000,0.000000,0.707107 +3632,0.707107,0.000000,0.000000,0.707107 +3633,0.707107,0.000000,0.000000,0.707107 +3634,0.707107,0.000000,0.000000,0.707107 +3635,0.707107,0.000000,0.000000,0.707107 +3636,0.707107,0.000000,0.000000,0.707107 +3637,0.707107,0.000000,0.000000,0.707107 +3638,0.707107,0.000000,0.000000,0.707107 +3639,0.707107,0.000000,0.000000,0.707107 +3640,0.707107,0.000000,0.000000,0.707107 +3641,0.707107,0.000000,0.000000,0.707107 +3642,0.707107,0.000000,0.000000,0.707107 +3643,0.707107,0.000000,0.000000,0.707107 +3644,0.707107,0.000000,0.000000,0.707107 +3645,0.707107,0.000000,0.000000,0.707107 +3646,0.707107,0.000000,0.000000,0.707107 +3647,0.707107,0.000000,0.000000,0.707107 +3648,0.707107,0.000000,0.000000,0.707107 +3649,0.707107,0.000000,0.000000,0.707107 +3650,0.707107,0.000000,0.000000,0.707107 +3651,0.707107,0.000000,0.000000,0.707107 +3652,0.707107,0.000000,0.000000,0.707107 +3653,0.707107,0.000000,0.000000,0.707107 +3654,0.707107,0.000000,0.000000,0.707107 +3655,0.707107,0.000000,0.000000,0.707107 +3656,0.707107,0.000000,0.000000,0.707107 +3657,0.707107,0.000000,0.000000,0.707107 +3658,0.707107,0.000000,0.000000,0.707107 +3659,0.707107,0.000000,0.000000,0.707107 +3660,0.707107,0.000000,0.000000,0.707107 +3661,0.707107,0.000000,0.000000,0.707107 +3662,0.707107,0.000000,0.000000,0.707107 +3663,0.707107,0.000000,0.000000,0.707107 +3664,0.707107,0.000000,0.000000,0.707107 +3665,0.707107,0.000000,0.000000,0.707107 +3666,0.707107,0.000000,0.000000,0.707107 +3667,0.707107,0.000000,0.000000,0.707107 +3668,0.707107,0.000000,0.000000,0.707107 +3669,0.707107,0.000000,0.000000,0.707107 +3670,0.707107,0.000000,0.000000,0.707107 +3671,0.707107,0.000000,0.000000,0.707107 +3672,0.707107,0.000000,0.000000,0.707107 +3673,0.707107,0.000000,0.000000,0.707107 +3674,0.707107,0.000000,0.000000,0.707107 +3675,0.707107,0.000000,0.000000,0.707107 +3676,0.707107,0.000000,0.000000,0.707107 +3677,0.707107,0.000000,0.000000,0.707107 +3678,0.707107,0.000000,0.000000,0.707107 +3679,0.707107,0.000000,0.000000,0.707107 +3680,0.707107,0.000000,0.000000,0.707107 +3681,0.707107,0.000000,0.000000,0.707107 +3682,0.707107,0.000000,0.000000,0.707107 +3683,0.707107,0.000000,0.000000,0.707107 +3684,0.707107,0.000000,0.000000,0.707107 +3685,0.707107,0.000000,0.000000,0.707107 +3686,0.707107,0.000000,0.000000,0.707107 +3687,0.707107,0.000000,0.000000,0.707107 +3688,0.707107,0.000000,0.000000,0.707107 +3689,0.707107,0.000000,0.000000,0.707107 +3690,0.707107,0.000000,0.000000,0.707107 +3691,0.707107,0.000000,0.000000,0.707107 +3692,0.707107,0.000000,0.000000,0.707107 +3693,0.707107,0.000000,0.000000,0.707107 +3694,0.707107,0.000000,0.000000,0.707107 +3695,0.707107,0.000000,0.000000,0.707107 +3696,0.707107,0.000000,0.000000,0.707107 +3697,0.707107,0.000000,0.000000,0.707107 +3698,0.707107,0.000000,0.000000,0.707107 +3699,0.707107,0.000000,0.000000,0.707107 +3700,0.707107,0.000000,0.000000,0.707107 +3701,0.707107,0.000000,0.000000,0.707107 +3702,0.707107,0.000000,0.000000,0.707107 +3703,0.707107,0.000000,0.000000,0.707107 +3704,0.707107,0.000000,0.000000,0.707107 +3705,0.707107,0.000000,0.000000,0.707107 +3706,0.707107,0.000000,0.000000,0.707107 +3707,0.707107,0.000000,0.000000,0.707107 +3708,0.707107,0.000000,0.000000,0.707107 +3709,0.707107,0.000000,0.000000,0.707107 +3710,0.707107,0.000000,0.000000,0.707107 +3711,0.707107,0.000000,0.000000,0.707107 +3712,0.707107,0.000000,0.000000,0.707107 +3713,0.707107,0.000000,0.000000,0.707107 +3714,0.707107,0.000000,0.000000,0.707107 +3715,0.707107,0.000000,0.000000,0.707107 +3716,0.707107,0.000000,0.000000,0.707107 +3717,0.707107,0.000000,0.000000,0.707107 +3718,0.707107,0.000000,0.000000,0.707107 +3719,0.707107,0.000000,0.000000,0.707107 +3720,0.707107,0.000000,0.000000,0.707107 +3721,0.707107,0.000000,0.000000,0.707107 +3722,0.707107,0.000000,0.000000,0.707107 +3723,0.707107,0.000000,0.000000,0.707107 +3724,0.707107,0.000000,0.000000,0.707107 +3725,0.707107,0.000000,0.000000,0.707107 +3726,0.707107,0.000000,0.000000,0.707107 +3727,0.707107,0.000000,0.000000,0.707107 +3728,0.707107,0.000000,0.000000,0.707107 +3729,0.707107,0.000000,0.000000,0.707107 +3730,0.707107,0.000000,0.000000,0.707107 +3731,0.707107,0.000000,0.000000,0.707107 +3732,0.707107,0.000000,0.000000,0.707107 +3733,0.707107,0.000000,0.000000,0.707107 +3734,0.707107,0.000000,0.000000,0.707107 +3735,0.707107,0.000000,0.000000,0.707107 +3736,0.707107,0.000000,0.000000,0.707107 +3737,0.707107,0.000000,0.000000,0.707107 +3738,0.707107,0.000000,0.000000,0.707107 +3739,0.707107,0.000000,0.000000,0.707107 +3740,0.707107,0.000000,0.000000,0.707107 +3741,0.707107,0.000000,0.000000,0.707107 +3742,0.707107,0.000000,0.000000,0.707107 +3743,0.707107,0.000000,0.000000,0.707107 +3744,0.707107,0.000000,0.000000,0.707107 +3745,0.707107,0.000000,0.000000,0.707107 +3746,0.707107,0.000000,0.000000,0.707107 +3747,0.707107,0.000000,0.000000,0.707107 +3748,0.707107,0.000000,0.000000,0.707107 +3749,0.707107,0.000000,0.000000,0.707107 +3750,0.707107,0.000000,0.000000,0.707107 +3751,0.707107,0.000000,0.000000,0.707107 +3752,0.707107,0.000000,0.000000,0.707107 +3753,0.707107,0.000000,0.000000,0.707107 +3754,0.707107,0.000000,0.000000,0.707107 +3755,0.707107,0.000000,0.000000,0.707107 +3756,0.707107,0.000000,0.000000,0.707107 +3757,0.707107,0.000000,0.000000,0.707107 +3758,0.707107,0.000000,0.000000,0.707107 +3759,0.707107,0.000000,0.000000,0.707107 +3760,0.707107,0.000000,0.000000,0.707107 +3761,0.707107,0.000000,0.000000,0.707107 +3762,0.707107,0.000000,0.000000,0.707107 +3763,0.707107,0.000000,0.000000,0.707107 +3764,0.707107,0.000000,0.000000,0.707107 +3765,0.707107,0.000000,0.000000,0.707107 +3766,0.707107,0.000000,0.000000,0.707107 +3767,0.707107,0.000000,0.000000,0.707107 +3768,0.707107,0.000000,0.000000,0.707107 +3769,0.707107,0.000000,0.000000,0.707107 +3770,0.707107,0.000000,0.000000,0.707107 +3771,0.707107,0.000000,0.000000,0.707107 +3772,0.707107,0.000000,0.000000,0.707107 +3773,0.707107,0.000000,0.000000,0.707107 +3774,0.707107,0.000000,0.000000,0.707107 +3775,0.707107,0.000000,0.000000,0.707107 +3776,0.707107,0.000000,0.000000,0.707107 +3777,0.707107,0.000000,0.000000,0.707107 +3778,0.707107,0.000000,0.000000,0.707107 +3779,0.707107,0.000000,0.000000,0.707107 +3780,0.707107,0.000000,0.000000,0.707107 +3781,0.707107,0.000000,0.000000,0.707107 +3782,0.707107,0.000000,0.000000,0.707107 +3783,0.707107,0.000000,0.000000,0.707107 +3784,0.707107,0.000000,0.000000,0.707107 +3785,0.707107,0.000000,0.000000,0.707107 +3786,0.707107,0.000000,0.000000,0.707107 +3787,0.707107,0.000000,0.000000,0.707107 +3788,0.707107,0.000000,0.000000,0.707107 +3789,0.707107,0.000000,0.000000,0.707107 +3790,0.707107,0.000000,0.000000,0.707107 +3791,0.707107,0.000000,0.000000,0.707107 +3792,0.707107,0.000000,0.000000,0.707107 +3793,0.707107,0.000000,0.000000,0.707107 +3794,0.707107,0.000000,0.000000,0.707107 +3795,0.707107,0.000000,0.000000,0.707107 +3796,0.707107,0.000000,0.000000,0.707107 +3797,0.707107,0.000000,0.000000,0.707107 +3798,0.707107,0.000000,0.000000,0.707107 +3799,0.707107,0.000000,0.000000,0.707107 +3800,0.707107,0.000000,0.000000,0.707107 +3801,0.707107,0.000000,0.000000,0.707107 +3802,0.707107,0.000000,0.000000,0.707107 +3803,0.707107,0.000000,0.000000,0.707107 +3804,0.707107,0.000000,0.000000,0.707107 +3805,0.707107,0.000000,0.000000,0.707107 +3806,0.707107,0.000000,0.000000,0.707107 +3807,0.707107,0.000000,0.000000,0.707107 +3808,0.707107,0.000000,0.000000,0.707107 +3809,0.707107,0.000000,0.000000,0.707107 +3810,0.707107,0.000000,0.000000,0.707107 +3811,0.707107,0.000000,0.000000,0.707107 +3812,0.707107,0.000000,0.000000,0.707107 +3813,0.707107,0.000000,0.000000,0.707107 +3814,0.707107,0.000000,0.000000,0.707107 +3815,0.707107,0.000000,0.000000,0.707107 +3816,0.707107,0.000000,0.000000,0.707107 +3817,0.707107,0.000000,0.000000,0.707107 +3818,0.707107,0.000000,0.000000,0.707107 +3819,0.707107,0.000000,0.000000,0.707107 +3820,0.707107,0.000000,0.000000,0.707107 +3821,0.707107,0.000000,0.000000,0.707107 +3822,0.707107,0.000000,0.000000,0.707107 +3823,0.707107,0.000000,0.000000,0.707107 +3824,0.707107,0.000000,0.000000,0.707107 +3825,0.707107,0.000000,0.000000,0.707107 +3826,0.707107,0.000000,0.000000,0.707107 +3827,0.707107,0.000000,0.000000,0.707107 +3828,0.707107,0.000000,0.000000,0.707107 +3829,0.707107,0.000000,0.000000,0.707107 +3830,0.707107,0.000000,0.000000,0.707107 +3831,0.707107,0.000000,0.000000,0.707107 +3832,0.707107,0.000000,0.000000,0.707107 +3833,0.707107,0.000000,0.000000,0.707107 +3834,0.707107,0.000000,0.000000,0.707107 +3835,0.707107,0.000000,0.000000,0.707107 +3836,0.707107,0.000000,0.000000,0.707107 +3837,0.707107,0.000000,0.000000,0.707107 +3838,0.707107,0.000000,0.000000,0.707107 +3839,0.707107,0.000000,0.000000,0.707107 +3840,0.707107,0.000000,0.000000,0.707107 +3841,0.707107,0.000000,0.000000,0.707107 +3842,0.707107,0.000000,0.000000,0.707107 +3843,0.707107,0.000000,0.000000,0.707107 +3844,0.707107,0.000000,0.000000,0.707107 +3845,0.707107,0.000000,0.000000,0.707107 +3846,0.707107,0.000000,0.000000,0.707107 +3847,0.707107,0.000000,0.000000,0.707107 +3848,0.707107,0.000000,0.000000,0.707107 +3849,0.707107,0.000000,0.000000,0.707107 +3850,0.707107,0.000000,0.000000,0.707107 +3851,0.707107,0.000000,0.000000,0.707107 +3852,0.707107,0.000000,0.000000,0.707107 +3853,0.707107,0.000000,0.000000,0.707107 +3854,0.707107,0.000000,0.000000,0.707107 +3855,0.707107,0.000000,0.000000,0.707107 +3856,0.707107,0.000000,0.000000,0.707107 +3857,0.707107,0.000000,0.000000,0.707107 +3858,0.707107,0.000000,0.000000,0.707107 +3859,0.707107,0.000000,0.000000,0.707107 +3860,0.707107,0.000000,0.000000,0.707107 +3861,0.707107,0.000000,0.000000,0.707107 +3862,0.707107,0.000000,0.000000,0.707107 +3863,0.707107,0.000000,0.000000,0.707107 +3864,0.707107,0.000000,0.000000,0.707107 +3865,0.707107,0.000000,0.000000,0.707107 +3866,0.707107,0.000000,0.000000,0.707107 +3867,0.707107,0.000000,0.000000,0.707107 +3868,0.707107,0.000000,0.000000,0.707107 +3869,0.707107,0.000000,0.000000,0.707107 +3870,0.707107,0.000000,0.000000,0.707107 +3871,0.707107,0.000000,0.000000,0.707107 +3872,0.707107,0.000000,0.000000,0.707107 +3873,0.707107,0.000000,0.000000,0.707107 +3874,0.707107,0.000000,0.000000,0.707107 +3875,0.707107,0.000000,0.000000,0.707107 +3876,0.707107,0.000000,0.000000,0.707107 +3877,0.707107,0.000000,0.000000,0.707107 +3878,0.707107,0.000000,0.000000,0.707107 +3879,0.707107,0.000000,0.000000,0.707107 +3880,0.707107,0.000000,0.000000,0.707107 +3881,0.707107,0.000000,0.000000,0.707107 +3882,0.707107,0.000000,0.000000,0.707107 +3883,0.707107,0.000000,0.000000,0.707107 +3884,0.707107,0.000000,0.000000,0.707107 +3885,0.707107,0.000000,0.000000,0.707107 +3886,0.707107,0.000000,0.000000,0.707107 +3887,0.707107,0.000000,0.000000,0.707107 +3888,0.707107,0.000000,0.000000,0.707107 +3889,0.707107,0.000000,0.000000,0.707107 +3890,0.707107,0.000000,0.000000,0.707107 +3891,0.707107,0.000000,0.000000,0.707107 +3892,0.707107,0.000000,0.000000,0.707107 +3893,0.707107,0.000000,0.000000,0.707107 +3894,0.707107,0.000000,0.000000,0.707107 +3895,0.707107,0.000000,0.000000,0.707107 +3896,0.707107,0.000000,0.000000,0.707107 +3897,0.707107,0.000000,0.000000,0.707107 +3898,0.707107,0.000000,0.000000,0.707107 +3899,0.707107,0.000000,0.000000,0.707107 +3900,0.707107,0.000000,0.000000,0.707107 +3901,0.707107,0.000000,0.000000,0.707107 +3902,0.707107,0.000000,0.000000,0.707107 +3903,0.707107,0.000000,0.000000,0.707107 +3904,0.707107,0.000000,0.000000,0.707107 +3905,0.707107,0.000000,0.000000,0.707107 +3906,0.707107,0.000000,0.000000,0.707107 +3907,0.707107,0.000000,0.000000,0.707107 +3908,0.707107,0.000000,0.000000,0.707107 +3909,0.707107,0.000000,0.000000,0.707107 +3910,0.707107,0.000000,0.000000,0.707107 +3911,0.707107,0.000000,0.000000,0.707107 +3912,0.707107,0.000000,0.000000,0.707107 +3913,0.707107,0.000000,0.000000,0.707107 +3914,0.707107,0.000000,0.000000,0.707107 +3915,0.707107,0.000000,0.000000,0.707107 +3916,0.707107,0.000000,0.000000,0.707107 +3917,0.707107,0.000000,0.000000,0.707107 +3918,0.707107,0.000000,0.000000,0.707107 +3919,0.707107,0.000000,0.000000,0.707107 +3920,0.707107,0.000000,0.000000,0.707107 +3921,0.707107,0.000000,0.000000,0.707107 +3922,0.707107,0.000000,0.000000,0.707107 +3923,0.707107,0.000000,0.000000,0.707107 +3924,0.707107,0.000000,0.000000,0.707107 +3925,0.707107,0.000000,0.000000,0.707107 +3926,0.707107,0.000000,0.000000,0.707107 +3927,0.707107,0.000000,0.000000,0.707107 +3928,0.707107,0.000000,0.000000,0.707107 +3929,0.707107,0.000000,0.000000,0.707107 +3930,0.707107,0.000000,0.000000,0.707107 +3931,0.707107,0.000000,0.000000,0.707107 +3932,0.707107,0.000000,0.000000,0.707107 +3933,0.707107,0.000000,0.000000,0.707107 +3934,0.707107,0.000000,0.000000,0.707107 +3935,0.707107,0.000000,0.000000,0.707107 +3936,0.707107,0.000000,0.000000,0.707107 +3937,0.707107,0.000000,0.000000,0.707107 +3938,0.707107,0.000000,0.000000,0.707107 +3939,0.707107,0.000000,0.000000,0.707107 +3940,0.707107,0.000000,0.000000,0.707107 +3941,0.707107,0.000000,0.000000,0.707107 +3942,0.707107,0.000000,0.000000,0.707107 +3943,0.707107,0.000000,0.000000,0.707107 +3944,0.707107,0.000000,0.000000,0.707107 +3945,0.707107,0.000000,0.000000,0.707107 +3946,0.707107,0.000000,0.000000,0.707107 +3947,0.707107,0.000000,0.000000,0.707107 +3948,0.707107,0.000000,0.000000,0.707107 +3949,0.707107,0.000000,0.000000,0.707107 +3950,0.707107,0.000000,0.000000,0.707107 +3951,0.707107,0.000000,0.000000,0.707107 +3952,0.707107,0.000000,0.000000,0.707107 +3953,0.707107,0.000000,0.000000,0.707107 +3954,0.707107,0.000000,0.000000,0.707107 +3955,0.707107,0.000000,0.000000,0.707107 +3956,0.707107,0.000000,0.000000,0.707107 +3957,0.707107,0.000000,0.000000,0.707107 +3958,0.707107,0.000000,0.000000,0.707107 +3959,0.707107,0.000000,0.000000,0.707107 +3960,0.707107,0.000000,0.000000,0.707107 +3961,0.707107,0.000000,0.000000,0.707107 +3962,0.707107,0.000000,0.000000,0.707107 +3963,0.707107,0.000000,0.000000,0.707107 +3964,0.707107,0.000000,0.000000,0.707107 +3965,0.707107,0.000000,0.000000,0.707107 +3966,0.707107,0.000000,0.000000,0.707107 +3967,0.707107,0.000000,0.000000,0.707107 +3968,0.707107,0.000000,0.000000,0.707107 +3969,0.707107,0.000000,0.000000,0.707107 +3970,0.707107,0.000000,0.000000,0.707107 +3971,0.707107,0.000000,0.000000,0.707107 +3972,0.707107,0.000000,0.000000,0.707107 +3973,0.707107,0.000000,0.000000,0.707107 +3974,0.707107,0.000000,0.000000,0.707107 +3975,0.707107,0.000000,0.000000,0.707107 +3976,0.707107,0.000000,0.000000,0.707107 +3977,0.707107,0.000000,0.000000,0.707107 +3978,0.707107,0.000000,0.000000,0.707107 +3979,0.707107,0.000000,0.000000,0.707107 +3980,0.707107,0.000000,0.000000,0.707107 +3981,0.707107,0.000000,0.000000,0.707107 +3982,0.707107,0.000000,0.000000,0.707107 +3983,0.707107,0.000000,0.000000,0.707107 +3984,0.707107,0.000000,0.000000,0.707107 +3985,0.707107,0.000000,0.000000,0.707107 +3986,0.707107,0.000000,0.000000,0.707107 +3987,0.707107,0.000000,0.000000,0.707107 +3988,0.707107,0.000000,0.000000,0.707107 +3989,0.707107,0.000000,0.000000,0.707107 +3990,0.707107,0.000000,0.000000,0.707107 +3991,0.707107,0.000000,0.000000,0.707107 +3992,0.707107,0.000000,0.000000,0.707107 +3993,0.707107,0.000000,0.000000,0.707107 +3994,0.707107,0.000000,0.000000,0.707107 +3995,0.707107,0.000000,0.000000,0.707107 +3996,0.707107,0.000000,0.000000,0.707107 +3997,0.707107,0.000000,0.000000,0.707107 +3998,0.707107,0.000000,0.000000,0.707107 +3999,0.707107,0.000000,0.000000,0.707107 +4000,0.707107,0.000000,0.000000,0.707107 +4001,0.707107,0.000000,0.000000,0.707107 +4002,0.707107,0.000000,0.000000,0.707107 +4003,0.707107,0.000000,0.000000,0.707107 +4004,0.707107,0.000000,0.000000,0.707107 +4005,0.707107,0.000000,0.000000,0.707107 +4006,0.707107,0.000000,0.000000,0.707107 +4007,0.707107,0.000000,0.000000,0.707107 +4008,0.707107,0.000000,0.000000,0.707107 +4009,0.707107,0.000000,0.000000,0.707107 +4010,0.707107,0.000000,0.000000,0.707107 +4011,0.707107,0.000000,0.000000,0.707107 +4012,0.707107,0.000000,0.000000,0.707107 +4013,0.707107,0.000000,0.000000,0.707107 +4014,0.707107,0.000000,0.000000,0.707107 +4015,0.707107,0.000000,0.000000,0.707107 +4016,0.707107,0.000000,0.000000,0.707107 +4017,0.707107,0.000000,0.000000,0.707107 +4018,0.707107,0.000000,0.000000,0.707107 +4019,0.707107,0.000000,0.000000,0.707107 +4020,0.707107,0.000000,0.000000,0.707107 +4021,0.707107,0.000000,0.000000,0.707107 +4022,0.707107,0.000000,0.000000,0.707107 +4023,0.707107,0.000000,0.000000,0.707107 +4024,0.707107,0.000000,0.000000,0.707107 +4025,0.707107,0.000000,0.000000,0.707107 +4026,0.707107,0.000000,0.000000,0.707107 +4027,0.707107,0.000000,0.000000,0.707107 +4028,0.707107,0.000000,0.000000,0.707107 +4029,0.707107,0.000000,0.000000,0.707107 +4030,0.707107,0.000000,0.000000,0.707107 +4031,0.707107,0.000000,0.000000,0.707107 +4032,0.707107,0.000000,0.000000,0.707107 +4033,0.707107,0.000000,0.000000,0.707107 +4034,0.707107,0.000000,0.000000,0.707107 +4035,0.707107,0.000000,0.000000,0.707107 +4036,0.707107,0.000000,0.000000,0.707107 +4037,0.707107,0.000000,0.000000,0.707107 +4038,0.707107,0.000000,0.000000,0.707107 +4039,0.707107,0.000000,0.000000,0.707107 +4040,0.707107,0.000000,0.000000,0.707107 +4041,0.707107,0.000000,0.000000,0.707107 +4042,0.707107,0.000000,0.000000,0.707107 +4043,0.707107,0.000000,0.000000,0.707107 +4044,0.707107,0.000000,0.000000,0.707107 +4045,0.707107,0.000000,0.000000,0.707107 +4046,0.707107,0.000000,0.000000,0.707107 +4047,0.707107,0.000000,0.000000,0.707107 +4048,0.707107,0.000000,0.000000,0.707107 +4049,0.707107,0.000000,0.000000,0.707107 +4050,0.707107,0.000000,0.000000,0.707107 +4051,0.707107,0.000000,0.000000,0.707107 +4052,0.707107,0.000000,0.000000,0.707107 +4053,0.707107,0.000000,0.000000,0.707107 +4054,0.707107,0.000000,0.000000,0.707107 +4055,0.707107,0.000000,0.000000,0.707107 +4056,0.707107,0.000000,0.000000,0.707107 +4057,0.707107,0.000000,0.000000,0.707107 +4058,0.707107,0.000000,0.000000,0.707107 +4059,0.707107,0.000000,0.000000,0.707107 +4060,0.707107,0.000000,0.000000,0.707107 +4061,0.707107,0.000000,0.000000,0.707107 +4062,0.707107,0.000000,0.000000,0.707107 +4063,0.707107,0.000000,0.000000,0.707107 +4064,0.707107,0.000000,0.000000,0.707107 +4065,0.707107,0.000000,0.000000,0.707107 +4066,0.707107,0.000000,0.000000,0.707107 +4067,0.707107,0.000000,0.000000,0.707107 +4068,0.707107,0.000000,0.000000,0.707107 +4069,0.707107,0.000000,0.000000,0.707107 +4070,0.707107,0.000000,0.000000,0.707107 +4071,0.707107,0.000000,0.000000,0.707107 +4072,0.707107,0.000000,0.000000,0.707107 +4073,0.707107,0.000000,0.000000,0.707107 +4074,0.707107,0.000000,0.000000,0.707107 +4075,0.707107,0.000000,0.000000,0.707107 +4076,0.707107,0.000000,0.000000,0.707107 +4077,0.707107,0.000000,0.000000,0.707107 +4078,0.707107,0.000000,0.000000,0.707107 +4079,0.707107,0.000000,0.000000,0.707107 +4080,0.707107,0.000000,0.000000,0.707107 +4081,0.707107,0.000000,0.000000,0.707107 +4082,0.707107,0.000000,0.000000,0.707107 +4083,0.707107,0.000000,0.000000,0.707107 +4084,0.707107,0.000000,0.000000,0.707107 +4085,0.707107,0.000000,0.000000,0.707107 +4086,0.707107,0.000000,0.000000,0.707107 +4087,0.707107,0.000000,0.000000,0.707107 +4088,0.707107,0.000000,0.000000,0.707107 +4089,0.707107,0.000000,0.000000,0.707107 +4090,0.707107,0.000000,0.000000,0.707107 +4091,0.707107,0.000000,0.000000,0.707107 +4092,0.707107,0.000000,0.000000,0.707107 +4093,0.707107,0.000000,0.000000,0.707107 +4094,0.707107,0.000000,0.000000,0.707107 +4095,0.707107,0.000000,0.000000,0.707107 +4096,0.707107,0.000000,0.000000,0.707107 +4097,0.707107,0.000000,0.000000,0.707107 +4098,0.707107,0.000000,0.000000,0.707107 +4099,0.707107,0.000000,0.000000,0.707107 +4100,0.707107,0.000000,0.000000,0.707107 +4101,0.707107,0.000000,0.000000,0.707107 +4102,0.707107,0.000000,0.000000,0.707107 +4103,0.707107,0.000000,0.000000,0.707107 +4104,0.707107,0.000000,0.000000,0.707107 +4105,0.707107,0.000000,0.000000,0.707107 +4106,0.707107,0.000000,0.000000,0.707107 +4107,0.707107,0.000000,0.000000,0.707107 +4108,0.707107,0.000000,0.000000,0.707107 +4109,0.707107,0.000000,0.000000,0.707107 +4110,0.707107,0.000000,0.000000,0.707107 +4111,0.707107,0.000000,0.000000,0.707107 +4112,0.707107,0.000000,0.000000,0.707107 +4113,0.707107,0.000000,0.000000,0.707107 +4114,0.707107,0.000000,0.000000,0.707107 +4115,0.707107,0.000000,0.000000,0.707107 +4116,0.707107,0.000000,0.000000,0.707107 +4117,0.707107,0.000000,0.000000,0.707107 +4118,0.707107,0.000000,0.000000,0.707107 +4119,0.707107,0.000000,0.000000,0.707107 +4120,0.707107,0.000000,0.000000,0.707107 +4121,0.707107,0.000000,0.000000,0.707107 +4122,0.707107,0.000000,0.000000,0.707107 +4123,0.707107,0.000000,0.000000,0.707107 +4124,0.707107,0.000000,0.000000,0.707107 +4125,0.707107,0.000000,0.000000,0.707107 +4126,0.707107,0.000000,0.000000,0.707107 +4127,0.707107,0.000000,0.000000,0.707107 +4128,0.707107,0.000000,0.000000,0.707107 +4129,0.707107,0.000000,0.000000,0.707107 +4130,0.707107,0.000000,0.000000,0.707107 +4131,0.707107,0.000000,0.000000,0.707107 +4132,0.707107,0.000000,0.000000,0.707107 +4133,0.707107,0.000000,0.000000,0.707107 +4134,0.707107,0.000000,0.000000,0.707107 +4135,0.707107,0.000000,0.000000,0.707107 +4136,0.707107,0.000000,0.000000,0.707107 +4137,0.707107,0.000000,0.000000,0.707107 +4138,0.707107,0.000000,0.000000,0.707107 +4139,0.707107,0.000000,0.000000,0.707107 +4140,0.707107,0.000000,0.000000,0.707107 +4141,0.707107,0.000000,0.000000,0.707107 +4142,0.707107,0.000000,0.000000,0.707107 +4143,0.707107,0.000000,0.000000,0.707107 +4144,0.707107,0.000000,0.000000,0.707107 +4145,0.707107,0.000000,0.000000,0.707107 +4146,0.707107,0.000000,0.000000,0.707107 +4147,0.707107,0.000000,0.000000,0.707107 +4148,0.707107,0.000000,0.000000,0.707107 +4149,0.707107,0.000000,0.000000,0.707107 +4150,0.707107,0.000000,0.000000,0.707107 +4151,0.707107,0.000000,0.000000,0.707107 +4152,0.707107,0.000000,0.000000,0.707107 +4153,0.707107,0.000000,0.000000,0.707107 +4154,0.707107,0.000000,0.000000,0.707107 +4155,0.707107,0.000000,0.000000,0.707107 +4156,0.707107,0.000000,0.000000,0.707107 +4157,0.707107,0.000000,0.000000,0.707107 +4158,0.707107,0.000000,0.000000,0.707107 +4159,0.707107,0.000000,0.000000,0.707107 +4160,0.707107,0.000000,0.000000,0.707107 +4161,0.707107,0.000000,0.000000,0.707107 +4162,0.707107,0.000000,0.000000,0.707107 +4163,0.707107,0.000000,0.000000,0.707107 +4164,0.707107,0.000000,0.000000,0.707107 +4165,0.707107,0.000000,0.000000,0.707107 +4166,0.707107,0.000000,0.000000,0.707107 +4167,0.707107,0.000000,0.000000,0.707107 +4168,0.707107,0.000000,0.000000,0.707107 +4169,0.707107,0.000000,0.000000,0.707107 +4170,0.707107,0.000000,0.000000,0.707107 +4171,0.707107,0.000000,0.000000,0.707107 +4172,0.707107,0.000000,0.000000,0.707107 +4173,0.707107,0.000000,0.000000,0.707107 +4174,0.707107,0.000000,0.000000,0.707107 +4175,0.707107,0.000000,0.000000,0.707107 +4176,0.707107,0.000000,0.000000,0.707107 +4177,0.707107,0.000000,0.000000,0.707107 +4178,0.707107,0.000000,0.000000,0.707107 +4179,0.707107,0.000000,0.000000,0.707107 +4180,0.707107,0.000000,0.000000,0.707107 +4181,0.707107,0.000000,0.000000,0.707107 +4182,0.707107,0.000000,0.000000,0.707107 +4183,0.707107,0.000000,0.000000,0.707107 +4184,0.707107,0.000000,0.000000,0.707107 +4185,0.707107,0.000000,0.000000,0.707107 +4186,0.707107,0.000000,0.000000,0.707107 +4187,0.707107,0.000000,0.000000,0.707107 +4188,0.707107,0.000000,0.000000,0.707107 +4189,0.707107,0.000000,0.000000,0.707107 +4190,0.707107,0.000000,0.000000,0.707107 +4191,0.707107,0.000000,0.000000,0.707107 +4192,0.707107,0.000000,0.000000,0.707107 +4193,0.707107,0.000000,0.000000,0.707107 +4194,0.707107,0.000000,0.000000,0.707107 +4195,0.707107,0.000000,0.000000,0.707107 +4196,0.707107,0.000000,0.000000,0.707107 +4197,0.707107,0.000000,0.000000,0.707107 +4198,0.707107,0.000000,0.000000,0.707107 +4199,0.707107,0.000000,0.000000,0.707107 +4200,0.707107,0.000000,0.000000,0.707107 +4201,0.707107,0.000000,0.000000,0.707107 +4202,0.707107,0.000000,0.000000,0.707107 +4203,0.707107,0.000000,0.000000,0.707107 +4204,0.707107,0.000000,0.000000,0.707107 +4205,0.707107,0.000000,0.000000,0.707107 +4206,0.707107,0.000000,0.000000,0.707107 +4207,0.707107,0.000000,0.000000,0.707107 +4208,0.707107,0.000000,0.000000,0.707107 +4209,0.707107,0.000000,0.000000,0.707107 +4210,0.707107,0.000000,0.000000,0.707107 +4211,0.707107,0.000000,0.000000,0.707107 +4212,0.707107,0.000000,0.000000,0.707107 +4213,0.707107,0.000000,0.000000,0.707107 +4214,0.707107,0.000000,0.000000,0.707107 +4215,0.707107,0.000000,0.000000,0.707107 +4216,0.707107,0.000000,0.000000,0.707107 +4217,0.707107,0.000000,0.000000,0.707107 +4218,0.707107,0.000000,0.000000,0.707107 +4219,0.707107,0.000000,0.000000,0.707107 +4220,0.707107,0.000000,0.000000,0.707107 +4221,0.707107,0.000000,0.000000,0.707107 +4222,0.707107,0.000000,0.000000,0.707107 +4223,0.707107,0.000000,0.000000,0.707107 +4224,0.707107,0.000000,0.000000,0.707107 +4225,0.707107,0.000000,0.000000,0.707107 +4226,0.707107,0.000000,0.000000,0.707107 +4227,0.707107,0.000000,0.000000,0.707107 +4228,0.707107,0.000000,0.000000,0.707107 +4229,0.707107,0.000000,0.000000,0.707107 +4230,0.707107,0.000000,0.000000,0.707107 +4231,0.707107,0.000000,0.000000,0.707107 +4232,0.707107,0.000000,0.000000,0.707107 +4233,0.707107,0.000000,0.000000,0.707107 +4234,0.707107,0.000000,0.000000,0.707107 +4235,0.707107,0.000000,0.000000,0.707107 +4236,0.707107,0.000000,0.000000,0.707107 +4237,0.707107,0.000000,0.000000,0.707107 +4238,0.707107,0.000000,0.000000,0.707107 +4239,0.707107,0.000000,0.000000,0.707107 +4240,0.707107,0.000000,0.000000,0.707107 +4241,0.707107,0.000000,0.000000,0.707107 +4242,0.707107,0.000000,0.000000,0.707107 +4243,0.707107,0.000000,0.000000,0.707107 +4244,0.707107,0.000000,0.000000,0.707107 +4245,0.707107,0.000000,0.000000,0.707107 +4246,0.707107,0.000000,0.000000,0.707107 +4247,0.707107,0.000000,0.000000,0.707107 +4248,0.707107,0.000000,0.000000,0.707107 +4249,0.707107,0.000000,0.000000,0.707107 +4250,0.707107,0.000000,0.000000,0.707107 +4251,0.707107,0.000000,0.000000,0.707107 +4252,0.707107,0.000000,0.000000,0.707107 +4253,0.707107,0.000000,0.000000,0.707107 +4254,0.707107,0.000000,0.000000,0.707107 +4255,0.707107,0.000000,0.000000,0.707107 +4256,0.707107,0.000000,0.000000,0.707107 +4257,0.707107,0.000000,0.000000,0.707107 +4258,0.707107,0.000000,0.000000,0.707107 +4259,0.707107,0.000000,0.000000,0.707107 +4260,0.707107,0.000000,0.000000,0.707107 +4261,0.707107,0.000000,0.000000,0.707107 +4262,0.707107,0.000000,0.000000,0.707107 +4263,0.707107,0.000000,0.000000,0.707107 +4264,0.707107,0.000000,0.000000,0.707107 +4265,0.707107,0.000000,0.000000,0.707107 +4266,0.707107,0.000000,0.000000,0.707107 +4267,0.707107,0.000000,0.000000,0.707107 +4268,0.707107,0.000000,0.000000,0.707107 +4269,0.707107,0.000000,0.000000,0.707107 +4270,0.707107,0.000000,0.000000,0.707107 +4271,0.707107,0.000000,0.000000,0.707107 +4272,0.707107,0.000000,0.000000,0.707107 +4273,0.707107,0.000000,0.000000,0.707107 +4274,0.707107,0.000000,0.000000,0.707107 +4275,0.707107,0.000000,0.000000,0.707107 +4276,0.707107,0.000000,0.000000,0.707107 +4277,0.707107,0.000000,0.000000,0.707107 +4278,0.707107,0.000000,0.000000,0.707107 +4279,0.707107,0.000000,0.000000,0.707107 +4280,0.707107,0.000000,0.000000,0.707107 +4281,0.707107,0.000000,0.000000,0.707107 +4282,0.707107,0.000000,0.000000,0.707107 +4283,0.707107,0.000000,0.000000,0.707107 +4284,0.707107,0.000000,0.000000,0.707107 +4285,0.707107,0.000000,0.000000,0.707107 +4286,0.707107,0.000000,0.000000,0.707107 +4287,0.707107,0.000000,0.000000,0.707107 +4288,0.707107,0.000000,0.000000,0.707107 +4289,0.707107,0.000000,0.000000,0.707107 +4290,0.707107,0.000000,0.000000,0.707107 +4291,0.707107,0.000000,0.000000,0.707107 +4292,0.707107,0.000000,0.000000,0.707107 +4293,0.707107,0.000000,0.000000,0.707107 +4294,0.707107,0.000000,0.000000,0.707107 +4295,0.707107,0.000000,0.000000,0.707107 +4296,0.707107,0.000000,0.000000,0.707107 +4297,0.707107,0.000000,0.000000,0.707107 +4298,0.707107,0.000000,0.000000,0.707107 +4299,0.707107,0.000000,0.000000,0.707107 +4300,0.707107,0.000000,0.000000,0.707107 +4301,0.707107,0.000000,0.000000,0.707107 +4302,0.707107,0.000000,0.000000,0.707107 +4303,0.707107,0.000000,0.000000,0.707107 +4304,0.707107,0.000000,0.000000,0.707107 +4305,0.707107,0.000000,0.000000,0.707107 +4306,0.707107,0.000000,0.000000,0.707107 +4307,0.707107,0.000000,0.000000,0.707107 +4308,0.707107,0.000000,0.000000,0.707107 +4309,0.707107,0.000000,0.000000,0.707107 +4310,0.707107,0.000000,0.000000,0.707107 +4311,0.707107,0.000000,0.000000,0.707107 +4312,0.707107,0.000000,0.000000,0.707107 +4313,0.707107,0.000000,0.000000,0.707107 +4314,0.707107,0.000000,0.000000,0.707107 +4315,0.707107,0.000000,0.000000,0.707107 +4316,0.707107,0.000000,0.000000,0.707107 +4317,0.707107,0.000000,0.000000,0.707107 +4318,0.707107,0.000000,0.000000,0.707107 +4319,0.707107,0.000000,0.000000,0.707107 +4320,0.707107,0.000000,0.000000,0.707107 +4321,0.707107,0.000000,0.000000,0.707107 +4322,0.707107,0.000000,0.000000,0.707107 +4323,0.707107,0.000000,0.000000,0.707107 +4324,0.707107,0.000000,0.000000,0.707107 +4325,0.707107,0.000000,0.000000,0.707107 +4326,0.707107,0.000000,0.000000,0.707107 +4327,0.707107,0.000000,0.000000,0.707107 +4328,0.707107,0.000000,0.000000,0.707107 +4329,0.707107,0.000000,0.000000,0.707107 +4330,0.707107,0.000000,0.000000,0.707107 +4331,0.707107,0.000000,0.000000,0.707107 +4332,0.707107,0.000000,0.000000,0.707107 +4333,0.707107,0.000000,0.000000,0.707107 +4334,0.707107,0.000000,0.000000,0.707107 +4335,0.707107,0.000000,0.000000,0.707107 +4336,0.707107,0.000000,0.000000,0.707107 +4337,0.707107,0.000000,0.000000,0.707107 +4338,0.707107,0.000000,0.000000,0.707107 +4339,0.707107,0.000000,0.000000,0.707107 +4340,0.707107,0.000000,0.000000,0.707107 +4341,0.707107,0.000000,0.000000,0.707107 +4342,0.707107,0.000000,0.000000,0.707107 +4343,0.707107,0.000000,0.000000,0.707107 +4344,0.707107,0.000000,0.000000,0.707107 +4345,0.707107,0.000000,0.000000,0.707107 +4346,0.707107,0.000000,0.000000,0.707107 +4347,0.707107,0.000000,0.000000,0.707107 +4348,0.707107,0.000000,0.000000,0.707107 +4349,0.707107,0.000000,0.000000,0.707107 +4350,0.707107,0.000000,0.000000,0.707107 +4351,0.707107,0.000000,0.000000,0.707107 +4352,0.707107,0.000000,0.000000,0.707107 +4353,0.707107,0.000000,0.000000,0.707107 +4354,0.707107,0.000000,0.000000,0.707107 +4355,0.707107,0.000000,0.000000,0.707107 +4356,0.707107,0.000000,0.000000,0.707107 +4357,0.707107,0.000000,0.000000,0.707107 +4358,0.707107,0.000000,0.000000,0.707107 +4359,0.707107,0.000000,0.000000,0.707107 +4360,0.707107,0.000000,0.000000,0.707107 +4361,0.707107,0.000000,0.000000,0.707107 +4362,0.707107,0.000000,0.000000,0.707107 +4363,0.707107,0.000000,0.000000,0.707107 +4364,0.707107,0.000000,0.000000,0.707107 +4365,0.707107,0.000000,0.000000,0.707107 +4366,0.707107,0.000000,0.000000,0.707107 +4367,0.707107,0.000000,0.000000,0.707107 +4368,0.707107,0.000000,0.000000,0.707107 +4369,0.707107,0.000000,0.000000,0.707107 +4370,0.707107,0.000000,0.000000,0.707107 +4371,0.707107,0.000000,0.000000,0.707107 +4372,0.707107,0.000000,0.000000,0.707107 +4373,0.707107,0.000000,0.000000,0.707107 +4374,0.707107,0.000000,0.000000,0.707107 +4375,0.707107,0.000000,0.000000,0.707107 +4376,0.707107,0.000000,0.000000,0.707107 +4377,0.707107,0.000000,0.000000,0.707107 +4378,0.707107,0.000000,0.000000,0.707107 +4379,0.707107,0.000000,0.000000,0.707107 +4380,0.707107,0.000000,0.000000,0.707107 +4381,0.707107,0.000000,0.000000,0.707107 +4382,0.707107,0.000000,0.000000,0.707107 +4383,0.707107,0.000000,0.000000,0.707107 +4384,0.707107,0.000000,0.000000,0.707107 +4385,0.707107,0.000000,0.000000,0.707107 +4386,0.707107,0.000000,0.000000,0.707107 +4387,0.707107,0.000000,0.000000,0.707107 +4388,0.707107,0.000000,0.000000,0.707107 +4389,0.707107,0.000000,0.000000,0.707107 +4390,0.707107,0.000000,0.000000,0.707107 +4391,0.707107,0.000000,0.000000,0.707107 +4392,0.707107,0.000000,0.000000,0.707107 +4393,0.707107,0.000000,0.000000,0.707107 +4394,0.707107,0.000000,0.000000,0.707107 +4395,0.707107,0.000000,0.000000,0.707107 +4396,0.707107,0.000000,0.000000,0.707107 +4397,0.707107,0.000000,0.000000,0.707107 +4398,0.707107,0.000000,0.000000,0.707107 +4399,0.707107,0.000000,0.000000,0.707107 +4400,0.707107,0.000000,0.000000,0.707107 +4401,0.707107,0.000000,0.000000,0.707107 +4402,0.707107,0.000000,0.000000,0.707107 +4403,0.707107,0.000000,0.000000,0.707107 +4404,0.707107,0.000000,0.000000,0.707107 +4405,0.707107,0.000000,0.000000,0.707107 +4406,0.707107,0.000000,0.000000,0.707107 +4407,0.707107,0.000000,0.000000,0.707107 +4408,0.707107,0.000000,0.000000,0.707107 +4409,0.707107,0.000000,0.000000,0.707107 +4410,0.707107,0.000000,0.000000,0.707107 +4411,0.707107,0.000000,0.000000,0.707107 +4412,0.707107,0.000000,0.000000,0.707107 +4413,0.707107,0.000000,0.000000,0.707107 +4414,0.707107,0.000000,0.000000,0.707107 +4415,0.707107,0.000000,0.000000,0.707107 +4416,0.707107,0.000000,0.000000,0.707107 +4417,0.707107,0.000000,0.000000,0.707107 +4418,0.707107,0.000000,0.000000,0.707107 +4419,0.707107,0.000000,0.000000,0.707107 +4420,0.707107,0.000000,0.000000,0.707107 +4421,0.707107,0.000000,0.000000,0.707107 +4422,0.707107,0.000000,0.000000,0.707107 +4423,0.707107,0.000000,0.000000,0.707107 +4424,0.707107,0.000000,0.000000,0.707107 +4425,0.707107,0.000000,0.000000,0.707107 +4426,0.707107,0.000000,0.000000,0.707107 +4427,0.707107,0.000000,0.000000,0.707107 +4428,0.707107,0.000000,0.000000,0.707107 +4429,0.707107,0.000000,0.000000,0.707107 +4430,0.707107,0.000000,0.000000,0.707107 +4431,0.707107,0.000000,0.000000,0.707107 +4432,0.707107,0.000000,0.000000,0.707107 +4433,0.707107,0.000000,0.000000,0.707107 +4434,0.707107,0.000000,0.000000,0.707107 +4435,0.707107,0.000000,0.000000,0.707107 +4436,0.707107,0.000000,0.000000,0.707107 +4437,0.707107,0.000000,0.000000,0.707107 +4438,0.707107,0.000000,0.000000,0.707107 +4439,0.707107,0.000000,0.000000,0.707107 +4440,0.707107,0.000000,0.000000,0.707107 +4441,0.707107,0.000000,0.000000,0.707107 +4442,0.707107,0.000000,0.000000,0.707107 +4443,0.707107,0.000000,0.000000,0.707107 +4444,0.707107,0.000000,0.000000,0.707107 +4445,0.707107,0.000000,0.000000,0.707107 +4446,0.707107,0.000000,0.000000,0.707107 +4447,0.707107,0.000000,0.000000,0.707107 +4448,0.707107,0.000000,0.000000,0.707107 +4449,0.707107,0.000000,0.000000,0.707107 +4450,0.707107,0.000000,0.000000,0.707107 +4451,0.707107,0.000000,0.000000,0.707107 +4452,0.707107,0.000000,0.000000,0.707107 +4453,0.707107,0.000000,0.000000,0.707107 +4454,0.707107,0.000000,0.000000,0.707107 +4455,0.707107,0.000000,0.000000,0.707107 +4456,0.707107,0.000000,0.000000,0.707107 +4457,0.707107,0.000000,0.000000,0.707107 +4458,0.707107,0.000000,0.000000,0.707107 +4459,0.707107,0.000000,0.000000,0.707107 +4460,0.707107,0.000000,0.000000,0.707107 +4461,0.707107,0.000000,0.000000,0.707107 +4462,0.707107,0.000000,0.000000,0.707107 +4463,0.707107,0.000000,0.000000,0.707107 +4464,0.707107,0.000000,0.000000,0.707107 +4465,0.707107,0.000000,0.000000,0.707107 +4466,0.707107,0.000000,0.000000,0.707107 +4467,0.707107,0.000000,0.000000,0.707107 +4468,0.707107,0.000000,0.000000,0.707107 +4469,0.707107,0.000000,0.000000,0.707107 +4470,0.707107,0.000000,0.000000,0.707107 +4471,0.707107,0.000000,0.000000,0.707107 +4472,0.707107,0.000000,0.000000,0.707107 +4473,0.707107,0.000000,0.000000,0.707107 +4474,0.707107,0.000000,0.000000,0.707107 +4475,0.707107,0.000000,0.000000,0.707107 +4476,0.707107,0.000000,0.000000,0.707107 +4477,0.707107,0.000000,0.000000,0.707107 +4478,0.707107,0.000000,0.000000,0.707107 +4479,0.707107,0.000000,0.000000,0.707107 +4480,0.707107,0.000000,0.000000,0.707107 +4481,0.707107,0.000000,0.000000,0.707107 +4482,0.707107,0.000000,0.000000,0.707107 +4483,0.707107,0.000000,0.000000,0.707107 +4484,0.707107,0.000000,0.000000,0.707107 +4485,0.707107,0.000000,0.000000,0.707107 +4486,0.707107,0.000000,0.000000,0.707107 +4487,0.707107,0.000000,0.000000,0.707107 +4488,0.707107,0.000000,0.000000,0.707107 +4489,0.707107,0.000000,0.000000,0.707107 +4490,0.707107,0.000000,0.000000,0.707107 +4491,0.707107,0.000000,0.000000,0.707107 +4492,0.707107,0.000000,0.000000,0.707107 +4493,0.707107,0.000000,0.000000,0.707107 +4494,0.707107,0.000000,0.000000,0.707107 +4495,0.707107,0.000000,0.000000,0.707107 +4496,0.707107,0.000000,0.000000,0.707107 +4497,0.707107,0.000000,0.000000,0.707107 +4498,0.707107,0.000000,0.000000,0.707107 +4499,0.707107,0.000000,0.000000,0.707107 +4500,0.707107,0.000000,0.000000,0.707107 +4501,0.707107,0.000000,0.000000,0.707107 +4502,0.707107,0.000000,0.000000,0.707107 +4503,0.707107,0.000000,0.000000,0.707107 +4504,0.707107,0.000000,0.000000,0.707107 +4505,0.707107,0.000000,0.000000,0.707107 +4506,0.707107,0.000000,0.000000,0.707107 +4507,0.707107,0.000000,0.000000,0.707107 +4508,0.707107,0.000000,0.000000,0.707107 +4509,0.707107,0.000000,0.000000,0.707107 +4510,0.707107,0.000000,0.000000,0.707107 +4511,0.707107,0.000000,0.000000,0.707107 +4512,0.707107,0.000000,0.000000,0.707107 +4513,0.707107,0.000000,0.000000,0.707107 +4514,0.707107,0.000000,0.000000,0.707107 +4515,0.707107,0.000000,0.000000,0.707107 +4516,0.707107,0.000000,0.000000,0.707107 +4517,0.707107,0.000000,0.000000,0.707107 +4518,0.707107,0.000000,0.000000,0.707107 +4519,0.707107,0.000000,0.000000,0.707107 +4520,0.707107,0.000000,0.000000,0.707107 +4521,0.707107,0.000000,0.000000,0.707107 +4522,0.707107,0.000000,0.000000,0.707107 +4523,0.707107,0.000000,0.000000,0.707107 +4524,0.707107,0.000000,0.000000,0.707107 +4525,0.707107,0.000000,0.000000,0.707107 +4526,0.707107,0.000000,0.000000,0.707107 +4527,0.707107,0.000000,0.000000,0.707107 +4528,0.707107,0.000000,0.000000,0.707107 +4529,0.707107,0.000000,0.000000,0.707107 +4530,0.707107,0.000000,0.000000,0.707107 +4531,0.707107,0.000000,0.000000,0.707107 +4532,0.707107,0.000000,0.000000,0.707107 +4533,0.707107,0.000000,0.000000,0.707107 +4534,0.707107,0.000000,0.000000,0.707107 +4535,0.707107,0.000000,0.000000,0.707107 +4536,0.707107,0.000000,0.000000,0.707107 +4537,0.707107,0.000000,0.000000,0.707107 +4538,0.707107,0.000000,0.000000,0.707107 +4539,0.707107,0.000000,0.000000,0.707107 +4540,0.707107,0.000000,0.000000,0.707107 +4541,0.707107,0.000000,0.000000,0.707107 +4542,0.707107,0.000000,0.000000,0.707107 +4543,0.707107,0.000000,0.000000,0.707107 +4544,0.707107,0.000000,0.000000,0.707107 +4545,0.707107,0.000000,0.000000,0.707107 +4546,0.707107,0.000000,0.000000,0.707107 +4547,0.707107,0.000000,0.000000,0.707107 +4548,0.707107,0.000000,0.000000,0.707107 +4549,0.707107,0.000000,0.000000,0.707107 +4550,0.707107,0.000000,0.000000,0.707107 +4551,0.707107,0.000000,0.000000,0.707107 +4552,0.707107,0.000000,0.000000,0.707107 +4553,0.707107,0.000000,0.000000,0.707107 +4554,0.707107,0.000000,0.000000,0.707107 +4555,0.707107,0.000000,0.000000,0.707107 +4556,0.707107,0.000000,0.000000,0.707107 +4557,0.707107,0.000000,0.000000,0.707107 +4558,0.707107,0.000000,0.000000,0.707107 +4559,0.707107,0.000000,0.000000,0.707107 +4560,0.707107,0.000000,0.000000,0.707107 +4561,0.707107,0.000000,0.000000,0.707107 +4562,0.707107,0.000000,0.000000,0.707107 +4563,0.707107,0.000000,0.000000,0.707107 +4564,0.707107,0.000000,0.000000,0.707107 +4565,0.707107,0.000000,0.000000,0.707107 +4566,0.707107,0.000000,0.000000,0.707107 +4567,0.707107,0.000000,0.000000,0.707107 +4568,0.707107,0.000000,0.000000,0.707107 +4569,0.707107,0.000000,0.000000,0.707107 +4570,0.707107,0.000000,0.000000,0.707107 +4571,0.707107,0.000000,0.000000,0.707107 +4572,0.707107,0.000000,0.000000,0.707107 +4573,0.707107,0.000000,0.000000,0.707107 +4574,0.707107,0.000000,0.000000,0.707107 +4575,0.707107,0.000000,0.000000,0.707107 +4576,0.707107,0.000000,0.000000,0.707107 +4577,0.707107,0.000000,0.000000,0.707107 +4578,0.707107,0.000000,0.000000,0.707107 +4579,0.707107,0.000000,0.000000,0.707107 +4580,0.707107,0.000000,0.000000,0.707107 +4581,0.707107,0.000000,0.000000,0.707107 +4582,0.707107,0.000000,0.000000,0.707107 +4583,0.707107,0.000000,0.000000,0.707107 +4584,0.707107,0.000000,0.000000,0.707107 +4585,0.707107,0.000000,0.000000,0.707107 +4586,0.707107,0.000000,0.000000,0.707107 +4587,0.707107,0.000000,0.000000,0.707107 +4588,0.707107,0.000000,0.000000,0.707107 +4589,0.707107,0.000000,0.000000,0.707107 +4590,0.707107,0.000000,0.000000,0.707107 +4591,0.707107,0.000000,0.000000,0.707107 +4592,0.707107,0.000000,0.000000,0.707107 +4593,0.707107,0.000000,0.000000,0.707107 +4594,0.707107,0.000000,0.000000,0.707107 +4595,0.707107,0.000000,0.000000,0.707107 +4596,0.707107,0.000000,0.000000,0.707107 +4597,0.707107,0.000000,0.000000,0.707107 +4598,0.707107,0.000000,0.000000,0.707107 +4599,0.707107,0.000000,0.000000,0.707107 +4600,0.707107,0.000000,0.000000,0.707107 +4601,0.707107,0.000000,0.000000,0.707107 +4602,0.707107,0.000000,0.000000,0.707107 +4603,0.707107,0.000000,0.000000,0.707107 +4604,0.707107,0.000000,0.000000,0.707107 +4605,0.707107,0.000000,0.000000,0.707107 +4606,0.707107,0.000000,0.000000,0.707107 +4607,0.707107,0.000000,0.000000,0.707107 +4608,0.707107,0.000000,0.000000,0.707107 +4609,0.707107,0.000000,0.000000,0.707107 +4610,0.707107,0.000000,0.000000,0.707107 +4611,0.707107,0.000000,0.000000,0.707107 +4612,0.707107,0.000000,0.000000,0.707107 +4613,0.707107,0.000000,0.000000,0.707107 +4614,0.707107,0.000000,0.000000,0.707107 +4615,0.707107,0.000000,0.000000,0.707107 +4616,0.707107,0.000000,0.000000,0.707107 +4617,0.707107,0.000000,0.000000,0.707107 +4618,0.707107,0.000000,0.000000,0.707107 +4619,0.707107,0.000000,0.000000,0.707107 +4620,0.707107,0.000000,0.000000,0.707107 +4621,0.707107,0.000000,0.000000,0.707107 +4622,0.707107,0.000000,0.000000,0.707107 +4623,0.707107,0.000000,0.000000,0.707107 +4624,0.707107,0.000000,0.000000,0.707107 +4625,0.707107,0.000000,0.000000,0.707107 +4626,0.707107,0.000000,0.000000,0.707107 +4627,0.707107,0.000000,0.000000,0.707107 +4628,0.707107,0.000000,0.000000,0.707107 +4629,0.707107,0.000000,0.000000,0.707107 +4630,0.707107,0.000000,0.000000,0.707107 +4631,0.707107,0.000000,0.000000,0.707107 +4632,0.707107,0.000000,0.000000,0.707107 +4633,0.707107,0.000000,0.000000,0.707107 +4634,0.707107,0.000000,0.000000,0.707107 +4635,0.707107,0.000000,0.000000,0.707107 +4636,0.707107,0.000000,0.000000,0.707107 +4637,0.707107,0.000000,0.000000,0.707107 +4638,0.707107,0.000000,0.000000,0.707107 +4639,0.707107,0.000000,0.000000,0.707107 +4640,0.707107,0.000000,0.000000,0.707107 +4641,0.707107,0.000000,0.000000,0.707107 +4642,0.707107,0.000000,0.000000,0.707107 +4643,0.707107,0.000000,0.000000,0.707107 +4644,0.707107,0.000000,0.000000,0.707107 +4645,0.707107,0.000000,0.000000,0.707107 +4646,0.707107,0.000000,0.000000,0.707107 +4647,0.707107,0.000000,0.000000,0.707107 +4648,0.707107,0.000000,0.000000,0.707107 +4649,0.707107,0.000000,0.000000,0.707107 +4650,0.707107,0.000000,0.000000,0.707107 +4651,0.707107,0.000000,0.000000,0.707107 +4652,0.707107,0.000000,0.000000,0.707107 +4653,0.707107,0.000000,0.000000,0.707107 +4654,0.707107,0.000000,0.000000,0.707107 +4655,0.707107,0.000000,0.000000,0.707107 +4656,0.707107,0.000000,0.000000,0.707107 +4657,0.707107,0.000000,0.000000,0.707107 +4658,0.707107,0.000000,0.000000,0.707107 +4659,0.707107,0.000000,0.000000,0.707107 +4660,0.707107,0.000000,0.000000,0.707107 +4661,0.707107,0.000000,0.000000,0.707107 +4662,0.707107,0.000000,0.000000,0.707107 +4663,0.707107,0.000000,0.000000,0.707107 +4664,0.707107,0.000000,0.000000,0.707107 +4665,0.707107,0.000000,0.000000,0.707107 +4666,0.707107,0.000000,0.000000,0.707107 +4667,0.707107,0.000000,0.000000,0.707107 +4668,0.707107,0.000000,0.000000,0.707107 +4669,0.707107,0.000000,0.000000,0.707107 +4670,0.707107,0.000000,0.000000,0.707107 +4671,0.707107,0.000000,0.000000,0.707107 +4672,0.707107,0.000000,0.000000,0.707107 +4673,0.707107,0.000000,0.000000,0.707107 +4674,0.707107,0.000000,0.000000,0.707107 +4675,0.707107,0.000000,0.000000,0.707107 +4676,0.707107,0.000000,0.000000,0.707107 +4677,0.707107,0.000000,0.000000,0.707107 +4678,0.707107,0.000000,0.000000,0.707107 +4679,0.707107,0.000000,0.000000,0.707107 +4680,0.707107,0.000000,0.000000,0.707107 +4681,0.707107,0.000000,0.000000,0.707107 +4682,0.707107,0.000000,0.000000,0.707107 +4683,0.707107,0.000000,0.000000,0.707107 +4684,0.707107,0.000000,0.000000,0.707107 +4685,0.707107,0.000000,0.000000,0.707107 +4686,0.707107,0.000000,0.000000,0.707107 +4687,0.707107,0.000000,0.000000,0.707107 +4688,0.707107,0.000000,0.000000,0.707107 +4689,0.707107,0.000000,0.000000,0.707107 +4690,0.707107,0.000000,0.000000,0.707107 +4691,0.707107,0.000000,0.000000,0.707107 +4692,0.707107,0.000000,0.000000,0.707107 +4693,0.707107,0.000000,0.000000,0.707107 +4694,0.707107,0.000000,0.000000,0.707107 +4695,0.707107,0.000000,0.000000,0.707107 +4696,0.707107,0.000000,0.000000,0.707107 +4697,0.707107,0.000000,0.000000,0.707107 +4698,0.707107,0.000000,0.000000,0.707107 +4699,0.707107,0.000000,0.000000,0.707107 +4700,0.707107,0.000000,0.000000,0.707107 +4701,0.707107,0.000000,0.000000,0.707107 +4702,0.707107,0.000000,0.000000,0.707107 +4703,0.707107,0.000000,0.000000,0.707107 +4704,0.707107,0.000000,0.000000,0.707107 +4705,0.707107,0.000000,0.000000,0.707107 +4706,0.707107,0.000000,0.000000,0.707107 +4707,0.707107,0.000000,0.000000,0.707107 +4708,0.707107,0.000000,0.000000,0.707107 +4709,0.707107,0.000000,0.000000,0.707107 +4710,0.707107,0.000000,0.000000,0.707107 +4711,0.707107,0.000000,0.000000,0.707107 +4712,0.707107,0.000000,0.000000,0.707107 +4713,0.707107,0.000000,0.000000,0.707107 +4714,0.707107,0.000000,0.000000,0.707107 +4715,0.707107,0.000000,0.000000,0.707107 +4716,0.707107,0.000000,0.000000,0.707107 +4717,0.707107,0.000000,0.000000,0.707107 +4718,0.707107,0.000000,0.000000,0.707107 +4719,0.707107,0.000000,0.000000,0.707107 +4720,0.707107,0.000000,0.000000,0.707107 +4721,0.707107,0.000000,0.000000,0.707107 +4722,0.707107,0.000000,0.000000,0.707107 +4723,0.707107,0.000000,0.000000,0.707107 +4724,0.707107,0.000000,0.000000,0.707107 +4725,0.707107,0.000000,0.000000,0.707107 +4726,0.707107,0.000000,0.000000,0.707107 +4727,0.707107,0.000000,0.000000,0.707107 +4728,0.707107,0.000000,0.000000,0.707107 +4729,0.707107,0.000000,0.000000,0.707107 +4730,0.707107,0.000000,0.000000,0.707107 +4731,0.707107,0.000000,0.000000,0.707107 +4732,0.707107,0.000000,0.000000,0.707107 +4733,0.707107,0.000000,0.000000,0.707107 +4734,0.707107,0.000000,0.000000,0.707107 +4735,0.707107,0.000000,0.000000,0.707107 +4736,0.707107,0.000000,0.000000,0.707107 +4737,0.707107,0.000000,0.000000,0.707107 +4738,0.707107,0.000000,0.000000,0.707107 +4739,0.707107,0.000000,0.000000,0.707107 +4740,0.707107,0.000000,0.000000,0.707107 +4741,0.707107,0.000000,0.000000,0.707107 +4742,0.707107,0.000000,0.000000,0.707107 +4743,0.707107,0.000000,0.000000,0.707107 +4744,0.707107,0.000000,0.000000,0.707107 +4745,0.707107,0.000000,0.000000,0.707107 +4746,0.707107,0.000000,0.000000,0.707107 +4747,0.707107,0.000000,0.000000,0.707107 +4748,0.707107,0.000000,0.000000,0.707107 +4749,0.707107,0.000000,0.000000,0.707107 +4750,0.707107,0.000000,0.000000,0.707107 +4751,0.707107,0.000000,0.000000,0.707107 +4752,0.707107,0.000000,0.000000,0.707107 +4753,0.707107,0.000000,0.000000,0.707107 +4754,0.707107,0.000000,0.000000,0.707107 +4755,0.707107,0.000000,0.000000,0.707107 +4756,0.707107,0.000000,0.000000,0.707107 +4757,0.707107,0.000000,0.000000,0.707107 +4758,0.707107,0.000000,0.000000,0.707107 +4759,0.707107,0.000000,0.000000,0.707107 +4760,0.707107,0.000000,0.000000,0.707107 +4761,0.707107,0.000000,0.000000,0.707107 +4762,0.707107,0.000000,0.000000,0.707107 +4763,0.707107,0.000000,0.000000,0.707107 +4764,0.707107,0.000000,0.000000,0.707107 +4765,0.707107,0.000000,0.000000,0.707107 +4766,0.707107,0.000000,0.000000,0.707107 +4767,0.707107,0.000000,0.000000,0.707107 +4768,0.707107,0.000000,0.000000,0.707107 +4769,0.707107,0.000000,0.000000,0.707107 +4770,0.707107,0.000000,0.000000,0.707107 +4771,0.707107,0.000000,0.000000,0.707107 +4772,0.707107,0.000000,0.000000,0.707107 +4773,0.707107,0.000000,0.000000,0.707107 +4774,0.707107,0.000000,0.000000,0.707107 +4775,0.707107,0.000000,0.000000,0.707107 +4776,0.707107,0.000000,0.000000,0.707107 +4777,0.707107,0.000000,0.000000,0.707107 +4778,0.707107,0.000000,0.000000,0.707107 +4779,0.707107,0.000000,0.000000,0.707107 +4780,0.707107,0.000000,0.000000,0.707107 +4781,0.707107,0.000000,0.000000,0.707107 +4782,0.707107,0.000000,0.000000,0.707107 +4783,0.707107,0.000000,0.000000,0.707107 +4784,0.707107,0.000000,0.000000,0.707107 +4785,0.707107,0.000000,0.000000,0.707107 +4786,0.707107,0.000000,0.000000,0.707107 +4787,0.707107,0.000000,0.000000,0.707107 +4788,0.707107,0.000000,0.000000,0.707107 +4789,0.707107,0.000000,0.000000,0.707107 +4790,0.707107,0.000000,0.000000,0.707107 +4791,0.707107,0.000000,0.000000,0.707107 +4792,0.707107,0.000000,0.000000,0.707107 +4793,0.707107,0.000000,0.000000,0.707107 +4794,0.707107,0.000000,0.000000,0.707107 +4795,0.707107,0.000000,0.000000,0.707107 +4796,0.707107,0.000000,0.000000,0.707107 +4797,0.707107,0.000000,0.000000,0.707107 +4798,0.707107,0.000000,0.000000,0.707107 +4799,0.707107,0.000000,0.000000,0.707107 +4800,0.707107,0.000000,0.000000,0.707107 +4801,0.707107,0.000000,0.000000,0.707107 +4802,0.707107,0.000000,0.000000,0.707107 +4803,0.707107,0.000000,0.000000,0.707107 +4804,0.707107,0.000000,0.000000,0.707107 +4805,0.707107,0.000000,0.000000,0.707107 +4806,0.707107,0.000000,0.000000,0.707107 +4807,0.707107,0.000000,0.000000,0.707107 +4808,0.707107,0.000000,0.000000,0.707107 +4809,0.707107,0.000000,0.000000,0.707107 +4810,0.707107,0.000000,0.000000,0.707107 +4811,0.707107,0.000000,0.000000,0.707107 +4812,0.707107,0.000000,0.000000,0.707107 +4813,0.707107,0.000000,0.000000,0.707107 +4814,0.707107,0.000000,0.000000,0.707107 +4815,0.707107,0.000000,0.000000,0.707107 +4816,0.707107,0.000000,0.000000,0.707107 +4817,0.707107,0.000000,0.000000,0.707107 +4818,0.707107,0.000000,0.000000,0.707107 +4819,0.707107,0.000000,0.000000,0.707107 +4820,0.707107,0.000000,0.000000,0.707107 +4821,0.707107,0.000000,0.000000,0.707107 +4822,0.707107,0.000000,0.000000,0.707107 +4823,0.707107,0.000000,0.000000,0.707107 +4824,0.707107,0.000000,0.000000,0.707107 +4825,0.707107,0.000000,0.000000,0.707107 +4826,0.707107,0.000000,0.000000,0.707107 +4827,0.707107,0.000000,0.000000,0.707107 +4828,0.707107,0.000000,0.000000,0.707107 +4829,0.707107,0.000000,0.000000,0.707107 +4830,0.707107,0.000000,0.000000,0.707107 +4831,0.707107,0.000000,0.000000,0.707107 +4832,0.707107,0.000000,0.000000,0.707107 +4833,0.707107,0.000000,0.000000,0.707107 +4834,0.707107,0.000000,0.000000,0.707107 +4835,0.707107,0.000000,0.000000,0.707107 +4836,0.707107,0.000000,0.000000,0.707107 +4837,0.707107,0.000000,0.000000,0.707107 +4838,0.707107,0.000000,0.000000,0.707107 +4839,0.707107,0.000000,0.000000,0.707107 +4840,0.707107,0.000000,0.000000,0.707107 +4841,0.707107,0.000000,0.000000,0.707107 +4842,0.707107,0.000000,0.000000,0.707107 +4843,0.707107,0.000000,0.000000,0.707107 +4844,0.707107,0.000000,0.000000,0.707107 +4845,0.707107,0.000000,0.000000,0.707107 +4846,0.707107,0.000000,0.000000,0.707107 +4847,0.707107,0.000000,0.000000,0.707107 +4848,0.707107,0.000000,0.000000,0.707107 +4849,0.707107,0.000000,0.000000,0.707107 +4850,0.707107,0.000000,0.000000,0.707107 +4851,0.707107,0.000000,0.000000,0.707107 +4852,0.707107,0.000000,0.000000,0.707107 +4853,0.707107,0.000000,0.000000,0.707107 +4854,0.707107,0.000000,0.000000,0.707107 +4855,0.707107,0.000000,0.000000,0.707107 +4856,0.707107,0.000000,0.000000,0.707107 +4857,0.707107,0.000000,0.000000,0.707107 +4858,0.707107,0.000000,0.000000,0.707107 +4859,0.707107,0.000000,0.000000,0.707107 +4860,0.707107,0.000000,0.000000,0.707107 +4861,0.707107,0.000000,0.000000,0.707107 +4862,0.707107,0.000000,0.000000,0.707107 +4863,0.707107,0.000000,0.000000,0.707107 +4864,0.707107,0.000000,0.000000,0.707107 +4865,0.707107,0.000000,0.000000,0.707107 +4866,0.707107,0.000000,0.000000,0.707107 +4867,0.707107,0.000000,0.000000,0.707107 +4868,0.707107,0.000000,0.000000,0.707107 +4869,0.707107,0.000000,0.000000,0.707107 +4870,0.707107,0.000000,0.000000,0.707107 +4871,0.707107,0.000000,0.000000,0.707107 +4872,0.707107,0.000000,0.000000,0.707107 +4873,0.707107,0.000000,0.000000,0.707107 +4874,0.707107,0.000000,0.000000,0.707107 +4875,0.707107,0.000000,0.000000,0.707107 +4876,0.707107,0.000000,0.000000,0.707107 +4877,0.707107,0.000000,0.000000,0.707107 +4878,0.707107,0.000000,0.000000,0.707107 +4879,0.707107,0.000000,0.000000,0.707107 +4880,0.707107,0.000000,0.000000,0.707107 +4881,0.707107,0.000000,0.000000,0.707107 +4882,0.707107,0.000000,0.000000,0.707107 +4883,0.707107,0.000000,0.000000,0.707107 +4884,0.707107,0.000000,0.000000,0.707107 +4885,0.707107,0.000000,0.000000,0.707107 +4886,0.707107,0.000000,0.000000,0.707107 +4887,0.707107,0.000000,0.000000,0.707107 +4888,0.707107,0.000000,0.000000,0.707107 +4889,0.707107,0.000000,0.000000,0.707107 +4890,0.707107,0.000000,0.000000,0.707107 +4891,0.707107,0.000000,0.000000,0.707107 +4892,0.707107,0.000000,0.000000,0.707107 +4893,0.707107,0.000000,0.000000,0.707107 +4894,0.707107,0.000000,0.000000,0.707107 +4895,0.707107,0.000000,0.000000,0.707107 +4896,0.707107,0.000000,0.000000,0.707107 +4897,0.707107,0.000000,0.000000,0.707107 +4898,0.707107,0.000000,0.000000,0.707107 +4899,0.707107,0.000000,0.000000,0.707107 +4900,0.707107,0.000000,0.000000,0.707107 +4901,0.707107,0.000000,0.000000,0.707107 +4902,0.707107,0.000000,0.000000,0.707107 +4903,0.707107,0.000000,0.000000,0.707107 +4904,0.707107,0.000000,0.000000,0.707107 +4905,0.707107,0.000000,0.000000,0.707107 +4906,0.707107,0.000000,0.000000,0.707107 +4907,0.707107,0.000000,0.000000,0.707107 +4908,0.707107,0.000000,0.000000,0.707107 +4909,0.707107,0.000000,0.000000,0.707107 +4910,0.707107,0.000000,0.000000,0.707107 +4911,0.707107,0.000000,0.000000,0.707107 +4912,0.707107,0.000000,0.000000,0.707107 +4913,0.707107,0.000000,0.000000,0.707107 +4914,0.707107,0.000000,0.000000,0.707107 +4915,0.707107,0.000000,0.000000,0.707107 +4916,0.707107,0.000000,0.000000,0.707107 +4917,0.707107,0.000000,0.000000,0.707107 +4918,0.707107,0.000000,0.000000,0.707107 +4919,0.707107,0.000000,0.000000,0.707107 +4920,0.707107,0.000000,0.000000,0.707107 +4921,0.707107,0.000000,0.000000,0.707107 +4922,0.707107,0.000000,0.000000,0.707107 +4923,0.707107,0.000000,0.000000,0.707107 +4924,0.707107,0.000000,0.000000,0.707107 +4925,0.707107,0.000000,0.000000,0.707107 +4926,0.707107,0.000000,0.000000,0.707107 +4927,0.707107,0.000000,0.000000,0.707107 +4928,0.707107,0.000000,0.000000,0.707107 +4929,0.707107,0.000000,0.000000,0.707107 +4930,0.707107,0.000000,0.000000,0.707107 +4931,0.707107,0.000000,0.000000,0.707107 +4932,0.707107,0.000000,0.000000,0.707107 +4933,0.707107,0.000000,0.000000,0.707107 +4934,0.707107,0.000000,0.000000,0.707107 +4935,0.707107,0.000000,0.000000,0.707107 +4936,0.707107,0.000000,0.000000,0.707107 +4937,0.707107,0.000000,0.000000,0.707107 +4938,0.707107,0.000000,0.000000,0.707107 +4939,0.707107,0.000000,0.000000,0.707107 +4940,0.707107,0.000000,0.000000,0.707107 +4941,0.707107,0.000000,0.000000,0.707107 +4942,0.707107,0.000000,0.000000,0.707107 +4943,0.707107,0.000000,0.000000,0.707107 +4944,0.707107,0.000000,0.000000,0.707107 +4945,0.707107,0.000000,0.000000,0.707107 +4946,0.707107,0.000000,0.000000,0.707107 +4947,0.707107,0.000000,0.000000,0.707107 +4948,0.707107,0.000000,0.000000,0.707107 +4949,0.707107,0.000000,0.000000,0.707107 +4950,0.707107,0.000000,0.000000,0.707107 +4951,0.707107,0.000000,0.000000,0.707107 +4952,0.707107,0.000000,0.000000,0.707107 +4953,0.707107,0.000000,0.000000,0.707107 +4954,0.707107,0.000000,0.000000,0.707107 +4955,0.707107,0.000000,0.000000,0.707107 +4956,0.707107,0.000000,0.000000,0.707107 +4957,0.707107,0.000000,0.000000,0.707107 +4958,0.707107,0.000000,0.000000,0.707107 +4959,0.707107,0.000000,0.000000,0.707107 +4960,0.707107,0.000000,0.000000,0.707107 +4961,0.707107,0.000000,0.000000,0.707107 +4962,0.707107,0.000000,0.000000,0.707107 +4963,0.707107,0.000000,0.000000,0.707107 +4964,0.707107,0.000000,0.000000,0.707107 +4965,0.707107,0.000000,0.000000,0.707107 +4966,0.707107,0.000000,0.000000,0.707107 +4967,0.707107,0.000000,0.000000,0.707107 +4968,0.707107,0.000000,0.000000,0.707107 +4969,0.707107,0.000000,0.000000,0.707107 +4970,0.707107,0.000000,0.000000,0.707107 +4971,0.707107,0.000000,0.000000,0.707107 +4972,0.707107,0.000000,0.000000,0.707107 +4973,0.707107,0.000000,0.000000,0.707107 +4974,0.707107,0.000000,0.000000,0.707107 +4975,0.707107,0.000000,0.000000,0.707107 +4976,0.707107,0.000000,0.000000,0.707107 +4977,0.707107,0.000000,0.000000,0.707107 +4978,0.707107,0.000000,0.000000,0.707107 +4979,0.707107,0.000000,0.000000,0.707107 +4980,0.707107,0.000000,0.000000,0.707107 +4981,0.707107,0.000000,0.000000,0.707107 +4982,0.707107,0.000000,0.000000,0.707107 +4983,0.707107,0.000000,0.000000,0.707107 +4984,0.707107,0.000000,0.000000,0.707107 +4985,0.707107,0.000000,0.000000,0.707107 +4986,0.707107,0.000000,0.000000,0.707107 +4987,0.707107,0.000000,0.000000,0.707107 +4988,0.707107,0.000000,0.000000,0.707107 +4989,0.707107,0.000000,0.000000,0.707107 +4990,0.707107,0.000000,0.000000,0.707107 +4991,0.707107,0.000000,0.000000,0.707107 +4992,0.707107,0.000000,0.000000,0.707107 +4993,0.707107,0.000000,0.000000,0.707107 +4994,0.707107,0.000000,0.000000,0.707107 +4995,0.707107,0.000000,0.000000,0.707107 +4996,0.707107,0.000000,0.000000,0.707107 +4997,0.707107,0.000000,0.000000,0.707107 +4998,0.707107,0.000000,0.000000,0.707107 +4999,0.707107,0.000000,0.000000,0.707107 +5000,0.707107,0.000000,0.000000,0.707107 +5001,0.707107,0.000000,0.000000,0.707107 +5002,0.707107,0.000000,0.000000,0.707107 +5003,0.707107,0.000000,0.000000,0.707107 +5004,0.707107,0.000000,0.000000,0.707107 +5005,0.707107,0.000000,0.000000,0.707107 +5006,0.707107,0.000000,0.000000,0.707107 +5007,0.707107,0.000000,0.000000,0.707107 +5008,0.707107,0.000000,0.000000,0.707107 +5009,0.707107,0.000000,0.000000,0.707107 +5010,0.707107,0.000000,0.000000,0.707107 +5011,0.707107,0.000000,0.000000,0.707107 +5012,0.707107,0.000000,0.000000,0.707107 +5013,0.707107,0.000000,0.000000,0.707107 +5014,0.707107,0.000000,0.000000,0.707107 +5015,0.707107,0.000000,0.000000,0.707107 +5016,0.707107,0.000000,0.000000,0.707107 +5017,0.707107,0.000000,0.000000,0.707107 +5018,0.707107,0.000000,0.000000,0.707107 +5019,0.707107,0.000000,0.000000,0.707107 +5020,0.707107,0.000000,0.000000,0.707107 +5021,0.707107,0.000000,0.000000,0.707107 +5022,0.707107,0.000000,0.000000,0.707107 +5023,0.707107,0.000000,0.000000,0.707107 +5024,0.707107,0.000000,0.000000,0.707107 +5025,0.707107,0.000000,0.000000,0.707107 +5026,0.707107,0.000000,0.000000,0.707107 +5027,0.707107,0.000000,0.000000,0.707107 +5028,0.707107,0.000000,0.000000,0.707107 +5029,0.707107,0.000000,0.000000,0.707107 +5030,0.707107,0.000000,0.000000,0.707107 +5031,0.707107,0.000000,0.000000,0.707107 +5032,0.707107,0.000000,0.000000,0.707107 +5033,0.707107,0.000000,0.000000,0.707107 +5034,0.707107,0.000000,0.000000,0.707107 +5035,0.707107,0.000000,0.000000,0.707107 +5036,0.707107,0.000000,0.000000,0.707107 +5037,0.707107,0.000000,0.000000,0.707107 +5038,0.707107,0.000000,0.000000,0.707107 +5039,0.707107,0.000000,0.000000,0.707107 +5040,0.707107,0.000000,0.000000,0.707107 +5041,0.707107,0.000000,0.000000,0.707107 +5042,0.707107,0.000000,0.000000,0.707107 +5043,0.707107,0.000000,0.000000,0.707107 +5044,0.707107,0.000000,0.000000,0.707107 +5045,0.707107,0.000000,0.000000,0.707107 +5046,0.707107,0.000000,0.000000,0.707107 +5047,0.707107,0.000000,0.000000,0.707107 +5048,0.707107,0.000000,0.000000,0.707107 +5049,0.707107,0.000000,0.000000,0.707107 +5050,0.707107,0.000000,0.000000,0.707107 +5051,0.707107,0.000000,0.000000,0.707107 +5052,0.707107,0.000000,0.000000,0.707107 +5053,0.707107,0.000000,0.000000,0.707107 +5054,0.707107,0.000000,0.000000,0.707107 +5055,0.707107,0.000000,0.000000,0.707107 +5056,0.707107,0.000000,0.000000,0.707107 +5057,0.707107,0.000000,0.000000,0.707107 +5058,0.707107,0.000000,0.000000,0.707107 +5059,0.707107,0.000000,0.000000,0.707107 +5060,0.707107,0.000000,0.000000,0.707107 +5061,0.707107,0.000000,0.000000,0.707107 +5062,0.707107,0.000000,0.000000,0.707107 +5063,0.707107,0.000000,0.000000,0.707107 +5064,0.707107,0.000000,0.000000,0.707107 +5065,0.707107,0.000000,0.000000,0.707107 +5066,0.707107,0.000000,0.000000,0.707107 +5067,0.707107,0.000000,0.000000,0.707107 +5068,0.707107,0.000000,0.000000,0.707107 +5069,0.707107,0.000000,0.000000,0.707107 +5070,0.707107,0.000000,0.000000,0.707107 +5071,0.707107,0.000000,0.000000,0.707107 +5072,0.707107,0.000000,0.000000,0.707107 +5073,0.707107,0.000000,0.000000,0.707107 +5074,0.707107,0.000000,0.000000,0.707107 +5075,0.707107,0.000000,0.000000,0.707107 +5076,0.707107,0.000000,0.000000,0.707107 +5077,0.707107,0.000000,0.000000,0.707107 +5078,0.707107,0.000000,0.000000,0.707107 +5079,0.707107,0.000000,0.000000,0.707107 +5080,0.707107,0.000000,0.000000,0.707107 +5081,0.707107,0.000000,0.000000,0.707107 +5082,0.707107,0.000000,0.000000,0.707107 +5083,0.707107,0.000000,0.000000,0.707107 +5084,0.707107,0.000000,0.000000,0.707107 +5085,0.707107,0.000000,0.000000,0.707107 +5086,0.707107,0.000000,0.000000,0.707107 +5087,0.707107,0.000000,0.000000,0.707107 +5088,0.707107,0.000000,0.000000,0.707107 +5089,0.707107,0.000000,0.000000,0.707107 +5090,0.707107,0.000000,0.000000,0.707107 +5091,0.707107,0.000000,0.000000,0.707107 +5092,0.707107,0.000000,0.000000,0.707107 +5093,0.707107,0.000000,0.000000,0.707107 +5094,0.707107,0.000000,0.000000,0.707107 +5095,0.707107,0.000000,0.000000,0.707107 +5096,0.707107,0.000000,0.000000,0.707107 +5097,0.707107,0.000000,0.000000,0.707107 +5098,0.707107,0.000000,0.000000,0.707107 +5099,0.707107,0.000000,0.000000,0.707107 +5100,0.707107,0.000000,0.000000,0.707107 +5101,0.707107,0.000000,0.000000,0.707107 +5102,0.707107,0.000000,0.000000,0.707107 +5103,0.707107,0.000000,0.000000,0.707107 +5104,0.707107,0.000000,0.000000,0.707107 +5105,0.707107,0.000000,0.000000,0.707107 +5106,0.707107,0.000000,0.000000,0.707107 +5107,0.707107,0.000000,0.000000,0.707107 +5108,0.707107,0.000000,0.000000,0.707107 +5109,0.707107,0.000000,0.000000,0.707107 +5110,0.707107,0.000000,0.000000,0.707107 +5111,0.707107,0.000000,0.000000,0.707107 +5112,0.707107,0.000000,0.000000,0.707107 +5113,0.707107,0.000000,0.000000,0.707107 +5114,0.707107,0.000000,0.000000,0.707107 +5115,0.707107,0.000000,0.000000,0.707107 +5116,0.707107,0.000000,0.000000,0.707107 +5117,0.707107,0.000000,0.000000,0.707107 +5118,0.707107,0.000000,0.000000,0.707107 +5119,0.707107,0.000000,0.000000,0.707107 +5120,0.707107,0.000000,0.000000,0.707107 +5121,0.707107,0.000000,0.000000,0.707107 +5122,0.707107,0.000000,0.000000,0.707107 +5123,0.707107,0.000000,0.000000,0.707107 +5124,0.707107,0.000000,0.000000,0.707107 +5125,0.707107,0.000000,0.000000,0.707107 +5126,0.707107,0.000000,0.000000,0.707107 +5127,0.707107,0.000000,0.000000,0.707107 +5128,0.707107,0.000000,0.000000,0.707107 +5129,0.707107,0.000000,0.000000,0.707107 +5130,0.707107,0.000000,0.000000,0.707107 +5131,0.707107,0.000000,0.000000,0.707107 +5132,0.707107,0.000000,0.000000,0.707107 +5133,0.707107,0.000000,0.000000,0.707107 +5134,0.707107,0.000000,0.000000,0.707107 +5135,0.707107,0.000000,0.000000,0.707107 +5136,0.707107,0.000000,0.000000,0.707107 +5137,0.707107,0.000000,0.000000,0.707107 +5138,0.707107,0.000000,0.000000,0.707107 +5139,0.707107,0.000000,0.000000,0.707107 +5140,0.707107,0.000000,0.000000,0.707107 +5141,0.707107,0.000000,0.000000,0.707107 +5142,0.707107,0.000000,0.000000,0.707107 +5143,0.707107,0.000000,0.000000,0.707107 +5144,0.707107,0.000000,0.000000,0.707107 +5145,0.707107,0.000000,0.000000,0.707107 +5146,0.707107,0.000000,0.000000,0.707107 +5147,0.707107,0.000000,0.000000,0.707107 +5148,0.707107,0.000000,0.000000,0.707107 +5149,0.707107,0.000000,0.000000,0.707107 +5150,0.707107,0.000000,0.000000,0.707107 +5151,0.707107,0.000000,0.000000,0.707107 +5152,0.707107,0.000000,0.000000,0.707107 +5153,0.707107,0.000000,0.000000,0.707107 +5154,0.707107,0.000000,0.000000,0.707107 +5155,0.707107,0.000000,0.000000,0.707107 +5156,0.707107,0.000000,0.000000,0.707107 +5157,0.707107,0.000000,0.000000,0.707107 +5158,0.707107,0.000000,0.000000,0.707107 +5159,0.707107,0.000000,0.000000,0.707107 +5160,0.707107,0.000000,0.000000,0.707107 +5161,0.707107,0.000000,0.000000,0.707107 +5162,0.707107,0.000000,0.000000,0.707107 +5163,0.707107,0.000000,0.000000,0.707107 +5164,0.707107,0.000000,0.000000,0.707107 +5165,0.707107,0.000000,0.000000,0.707107 +5166,0.707107,0.000000,0.000000,0.707107 +5167,0.707107,0.000000,0.000000,0.707107 +5168,0.707107,0.000000,0.000000,0.707107 +5169,0.707107,0.000000,0.000000,0.707107 +5170,0.707107,0.000000,0.000000,0.707107 +5171,0.707107,0.000000,0.000000,0.707107 +5172,0.707107,0.000000,0.000000,0.707107 +5173,0.707107,0.000000,0.000000,0.707107 +5174,0.707107,0.000000,0.000000,0.707107 +5175,0.707107,0.000000,0.000000,0.707107 +5176,0.707107,0.000000,0.000000,0.707107 +5177,0.707107,0.000000,0.000000,0.707107 +5178,0.707107,0.000000,0.000000,0.707107 +5179,0.707107,0.000000,0.000000,0.707107 +5180,0.707107,0.000000,0.000000,0.707107 +5181,0.707107,0.000000,0.000000,0.707107 +5182,0.707107,0.000000,0.000000,0.707107 +5183,0.707107,0.000000,0.000000,0.707107 +5184,0.707107,0.000000,0.000000,0.707107 +5185,0.707107,0.000000,0.000000,0.707107 +5186,0.707107,0.000000,0.000000,0.707107 +5187,0.707107,0.000000,0.000000,0.707107 +5188,0.707107,0.000000,0.000000,0.707107 +5189,0.707107,0.000000,0.000000,0.707107 +5190,0.707107,0.000000,0.000000,0.707107 +5191,0.707107,0.000000,0.000000,0.707107 +5192,0.707107,0.000000,0.000000,0.707107 +5193,0.707107,0.000000,0.000000,0.707107 +5194,0.707107,0.000000,0.000000,0.707107 +5195,0.707107,0.000000,0.000000,0.707107 +5196,0.707107,0.000000,0.000000,0.707107 +5197,0.707107,0.000000,0.000000,0.707107 +5198,0.707107,0.000000,0.000000,0.707107 +5199,0.707107,0.000000,0.000000,0.707107 +5200,0.707107,0.000000,0.000000,0.707107 +5201,0.707107,0.000000,0.000000,0.707107 +5202,0.707107,0.000000,0.000000,0.707107 +5203,0.707107,0.000000,0.000000,0.707107 +5204,0.707107,0.000000,0.000000,0.707107 +5205,0.707107,0.000000,0.000000,0.707107 +5206,0.707107,0.000000,0.000000,0.707107 +5207,0.707107,0.000000,0.000000,0.707107 +5208,0.707107,0.000000,0.000000,0.707107 +5209,0.707107,0.000000,0.000000,0.707107 +5210,0.707107,0.000000,0.000000,0.707107 +5211,0.707107,0.000000,0.000000,0.707107 +5212,0.707107,0.000000,0.000000,0.707107 +5213,0.707107,0.000000,0.000000,0.707107 +5214,0.707107,0.000000,0.000000,0.707107 +5215,0.707107,0.000000,0.000000,0.707107 +5216,0.707107,0.000000,0.000000,0.707107 +5217,0.707107,0.000000,0.000000,0.707107 +5218,0.707107,0.000000,0.000000,0.707107 +5219,0.707107,0.000000,0.000000,0.707107 +5220,0.707107,0.000000,0.000000,0.707107 +5221,0.707107,0.000000,0.000000,0.707107 +5222,0.707107,0.000000,0.000000,0.707107 +5223,0.707107,0.000000,0.000000,0.707107 +5224,0.707107,0.000000,0.000000,0.707107 +5225,0.707107,0.000000,0.000000,0.707107 +5226,0.707107,0.000000,0.000000,0.707107 +5227,0.707107,0.000000,0.000000,0.707107 +5228,0.707107,0.000000,0.000000,0.707107 +5229,0.707107,0.000000,0.000000,0.707107 +5230,0.707107,0.000000,0.000000,0.707107 +5231,0.707107,0.000000,0.000000,0.707107 +5232,0.707107,0.000000,0.000000,0.707107 +5233,0.707107,0.000000,0.000000,0.707107 +5234,0.707107,0.000000,0.000000,0.707107 +5235,0.707107,0.000000,0.000000,0.707107 +5236,0.707107,0.000000,0.000000,0.707107 +5237,0.707107,0.000000,0.000000,0.707107 +5238,0.707107,0.000000,0.000000,0.707107 +5239,0.707107,0.000000,0.000000,0.707107 +5240,0.707107,0.000000,0.000000,0.707107 +5241,0.707107,0.000000,0.000000,0.707107 +5242,0.707107,0.000000,0.000000,0.707107 +5243,0.707107,0.000000,0.000000,0.707107 +5244,0.707107,0.000000,0.000000,0.707107 +5245,0.707107,0.000000,0.000000,0.707107 +5246,0.707107,0.000000,0.000000,0.707107 +5247,0.707107,0.000000,0.000000,0.707107 +5248,0.707107,0.000000,0.000000,0.707107 +5249,0.707107,0.000000,0.000000,0.707107 +5250,0.707107,0.000000,0.000000,0.707107 +5251,0.707107,0.000000,0.000000,0.707107 +5252,0.707107,0.000000,0.000000,0.707107 +5253,0.707107,0.000000,0.000000,0.707107 +5254,0.707107,0.000000,0.000000,0.707107 +5255,0.707107,0.000000,0.000000,0.707107 +5256,0.707107,0.000000,0.000000,0.707107 +5257,0.707107,0.000000,0.000000,0.707107 +5258,0.707107,0.000000,0.000000,0.707107 +5259,0.707107,0.000000,0.000000,0.707107 +5260,0.707107,0.000000,0.000000,0.707107 +5261,0.707107,0.000000,0.000000,0.707107 +5262,0.707107,0.000000,0.000000,0.707107 +5263,0.707107,0.000000,0.000000,0.707107 +5264,0.707107,0.000000,0.000000,0.707107 +5265,0.707107,0.000000,0.000000,0.707107 +5266,0.707107,0.000000,0.000000,0.707107 +5267,0.707107,0.000000,0.000000,0.707107 +5268,0.707107,0.000000,0.000000,0.707107 +5269,0.707107,0.000000,0.000000,0.707107 +5270,0.707107,0.000000,0.000000,0.707107 +5271,0.707107,0.000000,0.000000,0.707107 +5272,0.707107,0.000000,0.000000,0.707107 +5273,0.707107,0.000000,0.000000,0.707107 +5274,0.707107,0.000000,0.000000,0.707107 +5275,0.707107,0.000000,0.000000,0.707107 +5276,0.707107,0.000000,0.000000,0.707107 +5277,0.707107,0.000000,0.000000,0.707107 +5278,0.707107,0.000000,0.000000,0.707107 +5279,0.707107,0.000000,0.000000,0.707107 +5280,0.707107,0.000000,0.000000,0.707107 +5281,0.707107,0.000000,0.000000,0.707107 +5282,0.707107,0.000000,0.000000,0.707107 +5283,0.707107,0.000000,0.000000,0.707107 +5284,0.707107,0.000000,0.000000,0.707107 +5285,0.707107,0.000000,0.000000,0.707107 +5286,0.707107,0.000000,0.000000,0.707107 +5287,0.707107,0.000000,0.000000,0.707107 +5288,0.707107,0.000000,0.000000,0.707107 +5289,0.707107,0.000000,0.000000,0.707107 +5290,0.707107,0.000000,0.000000,0.707107 +5291,0.707107,0.000000,0.000000,0.707107 +5292,0.707107,0.000000,0.000000,0.707107 +5293,0.707107,0.000000,0.000000,0.707107 +5294,0.707107,0.000000,0.000000,0.707107 +5295,0.707107,0.000000,0.000000,0.707107 +5296,0.707107,0.000000,0.000000,0.707107 +5297,0.707107,0.000000,0.000000,0.707107 +5298,0.707107,0.000000,0.000000,0.707107 +5299,0.707107,0.000000,0.000000,0.707107 +5300,0.707107,0.000000,0.000000,0.707107 +5301,0.707107,0.000000,0.000000,0.707107 +5302,0.707107,0.000000,0.000000,0.707107 +5303,0.707107,0.000000,0.000000,0.707107 +5304,0.707107,0.000000,0.000000,0.707107 +5305,0.707107,0.000000,0.000000,0.707107 +5306,0.707107,0.000000,0.000000,0.707107 +5307,0.707107,0.000000,0.000000,0.707107 +5308,0.707107,0.000000,0.000000,0.707107 +5309,0.707107,0.000000,0.000000,0.707107 +5310,0.707107,0.000000,0.000000,0.707107 +5311,0.707107,0.000000,0.000000,0.707107 +5312,0.707107,0.000000,0.000000,0.707107 +5313,0.707107,0.000000,0.000000,0.707107 +5314,0.707107,0.000000,0.000000,0.707107 +5315,0.707107,0.000000,0.000000,0.707107 +5316,0.707107,0.000000,0.000000,0.707107 +5317,0.707107,0.000000,0.000000,0.707107 +5318,0.707107,0.000000,0.000000,0.707107 +5319,0.707107,0.000000,0.000000,0.707107 +5320,0.707107,0.000000,0.000000,0.707107 +5321,0.707107,0.000000,0.000000,0.707107 +5322,0.707107,0.000000,0.000000,0.707107 +5323,0.707107,0.000000,0.000000,0.707107 +5324,0.707107,0.000000,0.000000,0.707107 +5325,0.707107,0.000000,0.000000,0.707107 +5326,0.707107,0.000000,0.000000,0.707107 +5327,0.707107,0.000000,0.000000,0.707107 +5328,0.707107,0.000000,0.000000,0.707107 +5329,0.707107,0.000000,0.000000,0.707107 +5330,0.707107,0.000000,0.000000,0.707107 +5331,0.707107,0.000000,0.000000,0.707107 +5332,0.707107,0.000000,0.000000,0.707107 +5333,0.707107,0.000000,0.000000,0.707107 +5334,0.707107,0.000000,0.000000,0.707107 +5335,0.707107,0.000000,0.000000,0.707107 +5336,0.707107,0.000000,0.000000,0.707107 +5337,0.707107,0.000000,0.000000,0.707107 +5338,0.707107,0.000000,0.000000,0.707107 +5339,0.707107,0.000000,0.000000,0.707107 +5340,0.707107,0.000000,0.000000,0.707107 +5341,0.707107,0.000000,0.000000,0.707107 +5342,0.707107,0.000000,0.000000,0.707107 +5343,0.707107,0.000000,0.000000,0.707107 +5344,0.707107,0.000000,0.000000,0.707107 +5345,0.707107,0.000000,0.000000,0.707107 +5346,0.707107,0.000000,0.000000,0.707107 +5347,0.707107,0.000000,0.000000,0.707107 +5348,0.707107,0.000000,0.000000,0.707107 +5349,0.707107,0.000000,0.000000,0.707107 +5350,0.707107,0.000000,0.000000,0.707107 +5351,0.707107,0.000000,0.000000,0.707107 +5352,0.707107,0.000000,0.000000,0.707107 +5353,0.707107,0.000000,0.000000,0.707107 +5354,0.707107,0.000000,0.000000,0.707107 +5355,0.707107,0.000000,0.000000,0.707107 +5356,0.707107,0.000000,0.000000,0.707107 +5357,0.707107,0.000000,0.000000,0.707107 +5358,0.707107,0.000000,0.000000,0.707107 +5359,0.707107,0.000000,0.000000,0.707107 +5360,0.707107,0.000000,0.000000,0.707107 +5361,0.707107,0.000000,0.000000,0.707107 +5362,0.707107,0.000000,0.000000,0.707107 +5363,0.707107,0.000000,0.000000,0.707107 +5364,0.707107,0.000000,0.000000,0.707107 +5365,0.707107,0.000000,0.000000,0.707107 +5366,0.707107,0.000000,0.000000,0.707107 +5367,0.707107,0.000000,0.000000,0.707107 +5368,0.707107,0.000000,0.000000,0.707107 +5369,0.707107,0.000000,0.000000,0.707107 +5370,0.707107,0.000000,0.000000,0.707107 +5371,0.707107,0.000000,0.000000,0.707107 +5372,0.707107,0.000000,0.000000,0.707107 +5373,0.707107,0.000000,0.000000,0.707107 +5374,0.707107,0.000000,0.000000,0.707107 +5375,0.707107,0.000000,0.000000,0.707107 +5376,0.707107,0.000000,0.000000,0.707107 +5377,0.707107,0.000000,0.000000,0.707107 +5378,0.707107,0.000000,0.000000,0.707107 +5379,0.707107,0.000000,0.000000,0.707107 +5380,0.707107,0.000000,0.000000,0.707107 +5381,0.707107,0.000000,0.000000,0.707107 +5382,0.707107,0.000000,0.000000,0.707107 +5383,0.707107,0.000000,0.000000,0.707107 +5384,0.707107,0.000000,0.000000,0.707107 +5385,0.707107,0.000000,0.000000,0.707107 +5386,0.707107,0.000000,0.000000,0.707107 +5387,0.707107,0.000000,0.000000,0.707107 +5388,0.707107,0.000000,0.000000,0.707107 +5389,0.707107,0.000000,0.000000,0.707107 +5390,0.707107,0.000000,0.000000,0.707107 +5391,0.707107,0.000000,0.000000,0.707107 +5392,0.707107,0.000000,0.000000,0.707107 +5393,0.707107,0.000000,0.000000,0.707107 +5394,0.707107,0.000000,0.000000,0.707107 +5395,0.707107,0.000000,0.000000,0.707107 +5396,0.707107,0.000000,0.000000,0.707107 +5397,0.707107,0.000000,0.000000,0.707107 +5398,0.707107,0.000000,0.000000,0.707107 +5399,0.707107,0.000000,0.000000,0.707107 +5400,0.707107,0.000000,0.000000,0.707107 +5401,0.707107,0.000000,0.000000,0.707107 +5402,0.707107,0.000000,0.000000,0.707107 +5403,0.707107,0.000000,0.000000,0.707107 +5404,0.707107,0.000000,0.000000,0.707107 +5405,0.707107,0.000000,0.000000,0.707107 +5406,0.707107,0.000000,0.000000,0.707107 +5407,0.707107,0.000000,0.000000,0.707107 +5408,0.707107,0.000000,0.000000,0.707107 +5409,0.707107,0.000000,0.000000,0.707107 +5410,0.707107,0.000000,0.000000,0.707107 +5411,0.707107,0.000000,0.000000,0.707107 +5412,0.707107,0.000000,0.000000,0.707107 +5413,0.707107,0.000000,0.000000,0.707107 +5414,0.707107,0.000000,0.000000,0.707107 +5415,0.707107,0.000000,0.000000,0.707107 +5416,0.707107,0.000000,0.000000,0.707107 +5417,0.707107,0.000000,0.000000,0.707107 +5418,0.707107,0.000000,0.000000,0.707107 +5419,0.707107,0.000000,0.000000,0.707107 +5420,0.707107,0.000000,0.000000,0.707107 +5421,0.707107,0.000000,0.000000,0.707107 +5422,0.707107,0.000000,0.000000,0.707107 +5423,0.707107,0.000000,0.000000,0.707107 +5424,0.707107,0.000000,0.000000,0.707107 +5425,0.707107,0.000000,0.000000,0.707107 +5426,0.707107,0.000000,0.000000,0.707107 +5427,0.707107,0.000000,0.000000,0.707107 +5428,0.707107,0.000000,0.000000,0.707107 +5429,0.707107,0.000000,0.000000,0.707107 +5430,0.707107,0.000000,0.000000,0.707107 +5431,0.707107,0.000000,0.000000,0.707107 +5432,0.707107,0.000000,0.000000,0.707107 +5433,0.707107,0.000000,0.000000,0.707107 +5434,0.707107,0.000000,0.000000,0.707107 +5435,0.707107,0.000000,0.000000,0.707107 +5436,0.707107,0.000000,0.000000,0.707107 +5437,0.707107,0.000000,0.000000,0.707107 +5438,0.707107,0.000000,0.000000,0.707107 +5439,0.707107,0.000000,0.000000,0.707107 +5440,0.707107,0.000000,0.000000,0.707107 +5441,0.707107,0.000000,0.000000,0.707107 +5442,0.707107,0.000000,0.000000,0.707107 +5443,0.707107,0.000000,0.000000,0.707107 +5444,0.707107,0.000000,0.000000,0.707107 +5445,0.707107,0.000000,0.000000,0.707107 +5446,0.707107,0.000000,0.000000,0.707107 +5447,0.707107,0.000000,0.000000,0.707107 +5448,0.707107,0.000000,0.000000,0.707107 +5449,0.707107,0.000000,0.000000,0.707107 +5450,0.707107,0.000000,0.000000,0.707107 +5451,0.707107,0.000000,0.000000,0.707107 +5452,0.707107,0.000000,0.000000,0.707107 +5453,0.707107,0.000000,0.000000,0.707107 +5454,0.707107,0.000000,0.000000,0.707107 +5455,0.707107,0.000000,0.000000,0.707107 +5456,0.707107,0.000000,0.000000,0.707107 +5457,0.707107,0.000000,0.000000,0.707107 +5458,0.707107,0.000000,0.000000,0.707107 +5459,0.707107,0.000000,0.000000,0.707107 +5460,0.707107,0.000000,0.000000,0.707107 +5461,0.707107,0.000000,0.000000,0.707107 +5462,0.707107,0.000000,0.000000,0.707107 +5463,0.707107,0.000000,0.000000,0.707107 +5464,0.707107,0.000000,0.000000,0.707107 +5465,0.707107,0.000000,0.000000,0.707107 +5466,0.707107,0.000000,0.000000,0.707107 +5467,0.707107,0.000000,0.000000,0.707107 +5468,0.707107,0.000000,0.000000,0.707107 +5469,0.707107,0.000000,0.000000,0.707107 +5470,0.707107,0.000000,0.000000,0.707107 +5471,0.707107,0.000000,0.000000,0.707107 +5472,0.707107,0.000000,0.000000,0.707107 +5473,0.707107,0.000000,0.000000,0.707107 +5474,0.707107,0.000000,0.000000,0.707107 +5475,0.707107,0.000000,0.000000,0.707107 +5476,0.707107,0.000000,0.000000,0.707107 +5477,0.707107,0.000000,0.000000,0.707107 +5478,0.707107,0.000000,0.000000,0.707107 +5479,0.707107,0.000000,0.000000,0.707107 +5480,0.707107,0.000000,0.000000,0.707107 +5481,0.707107,0.000000,0.000000,0.707107 +5482,0.707107,0.000000,0.000000,0.707107 +5483,0.707107,0.000000,0.000000,0.707107 +5484,0.707107,0.000000,0.000000,0.707107 +5485,0.707107,0.000000,0.000000,0.707107 +5486,0.707107,0.000000,0.000000,0.707107 +5487,0.707107,0.000000,0.000000,0.707107 +5488,0.707107,0.000000,0.000000,0.707107 +5489,0.707107,0.000000,0.000000,0.707107 +5490,0.707107,0.000000,0.000000,0.707107 +5491,0.707107,0.000000,0.000000,0.707107 +5492,0.707107,0.000000,0.000000,0.707107 +5493,0.707107,0.000000,0.000000,0.707107 +5494,0.707107,0.000000,0.000000,0.707107 +5495,0.707107,0.000000,0.000000,0.707107 +5496,0.707107,0.000000,0.000000,0.707107 +5497,0.707107,0.000000,0.000000,0.707107 +5498,0.707107,0.000000,0.000000,0.707107 +5499,0.707107,0.000000,0.000000,0.707107 +5500,0.707107,0.000000,0.000000,0.707107 +5501,0.707107,0.000000,0.000000,0.707107 +5502,0.707107,0.000000,0.000000,0.707107 +5503,0.707107,0.000000,0.000000,0.707107 +5504,0.707107,0.000000,0.000000,0.707107 +5505,0.707107,0.000000,0.000000,0.707107 +5506,0.707107,0.000000,0.000000,0.707107 +5507,0.707107,0.000000,0.000000,0.707107 +5508,0.707107,0.000000,0.000000,0.707107 +5509,0.707107,0.000000,0.000000,0.707107 +5510,0.707107,0.000000,0.000000,0.707107 +5511,0.707107,0.000000,0.000000,0.707107 +5512,0.707107,0.000000,0.000000,0.707107 +5513,0.707107,0.000000,0.000000,0.707107 +5514,0.707107,0.000000,0.000000,0.707107 +5515,0.707107,0.000000,0.000000,0.707107 +5516,0.707107,0.000000,0.000000,0.707107 +5517,0.707107,0.000000,0.000000,0.707107 +5518,0.707107,0.000000,0.000000,0.707107 +5519,0.707107,0.000000,0.000000,0.707107 +5520,0.707107,0.000000,0.000000,0.707107 +5521,0.707107,0.000000,0.000000,0.707107 +5522,0.707107,0.000000,0.000000,0.707107 +5523,0.707107,0.000000,0.000000,0.707107 +5524,0.707107,0.000000,0.000000,0.707107 +5525,0.707107,0.000000,0.000000,0.707107 +5526,0.707107,0.000000,0.000000,0.707107 +5527,0.707107,0.000000,0.000000,0.707107 +5528,0.707107,0.000000,0.000000,0.707107 +5529,0.707107,0.000000,0.000000,0.707107 +5530,0.707107,0.000000,0.000000,0.707107 +5531,0.707107,0.000000,0.000000,0.707107 +5532,0.707107,0.000000,0.000000,0.707107 +5533,0.707107,0.000000,0.000000,0.707107 +5534,0.707107,0.000000,0.000000,0.707107 +5535,0.707107,0.000000,0.000000,0.707107 +5536,0.707107,0.000000,0.000000,0.707107 +5537,0.707107,0.000000,0.000000,0.707107 +5538,0.707107,0.000000,0.000000,0.707107 +5539,0.707107,0.000000,0.000000,0.707107 +5540,0.707107,0.000000,0.000000,0.707107 +5541,0.707107,0.000000,0.000000,0.707107 +5542,0.707107,0.000000,0.000000,0.707107 +5543,0.707107,0.000000,0.000000,0.707107 +5544,0.707107,0.000000,0.000000,0.707107 +5545,0.707107,0.000000,0.000000,0.707107 +5546,0.707107,0.000000,0.000000,0.707107 +5547,0.707107,0.000000,0.000000,0.707107 +5548,0.707107,0.000000,0.000000,0.707107 +5549,0.707107,0.000000,0.000000,0.707107 +5550,0.707107,0.000000,0.000000,0.707107 +5551,0.707107,0.000000,0.000000,0.707107 +5552,0.707107,0.000000,0.000000,0.707107 +5553,0.707107,0.000000,0.000000,0.707107 +5554,0.707107,0.000000,0.000000,0.707107 +5555,0.707107,0.000000,0.000000,0.707107 +5556,0.707107,0.000000,0.000000,0.707107 +5557,0.707107,0.000000,0.000000,0.707107 +5558,0.707107,0.000000,0.000000,0.707107 +5559,0.707107,0.000000,0.000000,0.707107 +5560,0.707107,0.000000,0.000000,0.707107 +5561,0.707107,0.000000,0.000000,0.707107 +5562,0.707107,0.000000,0.000000,0.707107 +5563,0.707107,0.000000,0.000000,0.707107 +5564,0.707107,0.000000,0.000000,0.707107 +5565,0.707107,0.000000,0.000000,0.707107 +5566,0.707107,0.000000,0.000000,0.707107 +5567,0.707107,0.000000,0.000000,0.707107 +5568,0.707107,0.000000,0.000000,0.707107 +5569,0.707107,0.000000,0.000000,0.707107 +5570,0.707107,0.000000,0.000000,0.707107 +5571,0.707107,0.000000,0.000000,0.707107 +5572,0.707107,0.000000,0.000000,0.707107 +5573,0.707107,0.000000,0.000000,0.707107 +5574,0.707107,0.000000,0.000000,0.707107 +5575,0.707107,0.000000,0.000000,0.707107 +5576,0.707107,0.000000,0.000000,0.707107 +5577,0.707107,0.000000,0.000000,0.707107 +5578,0.707107,0.000000,0.000000,0.707107 +5579,0.707107,0.000000,0.000000,0.707107 +5580,0.707107,0.000000,0.000000,0.707107 +5581,0.707107,0.000000,0.000000,0.707107 +5582,0.707107,0.000000,0.000000,0.707107 +5583,0.707107,0.000000,0.000000,0.707107 +5584,0.707107,0.000000,0.000000,0.707107 +5585,0.707107,0.000000,0.000000,0.707107 +5586,0.707107,0.000000,0.000000,0.707107 +5587,0.707107,0.000000,0.000000,0.707107 +5588,0.707107,0.000000,0.000000,0.707107 +5589,0.707107,0.000000,0.000000,0.707107 +5590,0.707107,0.000000,0.000000,0.707107 +5591,0.707107,0.000000,0.000000,0.707107 +5592,0.707107,0.000000,0.000000,0.707107 +5593,0.707107,0.000000,0.000000,0.707107 +5594,0.707107,0.000000,0.000000,0.707107 +5595,0.707107,0.000000,0.000000,0.707107 +5596,0.707107,0.000000,0.000000,0.707107 +5597,0.707107,0.000000,0.000000,0.707107 +5598,0.707107,0.000000,0.000000,0.707107 +5599,0.707107,0.000000,0.000000,0.707107 +5600,0.707107,0.000000,0.000000,0.707107 +5601,0.707107,0.000000,0.000000,0.707107 +5602,0.707107,0.000000,0.000000,0.707107 +5603,0.707107,0.000000,0.000000,0.707107 +5604,0.707107,0.000000,0.000000,0.707107 +5605,0.707107,0.000000,0.000000,0.707107 +5606,0.707107,0.000000,0.000000,0.707107 +5607,0.707107,0.000000,0.000000,0.707107 +5608,0.707107,0.000000,0.000000,0.707107 +5609,0.707107,0.000000,0.000000,0.707107 +5610,0.707107,0.000000,0.000000,0.707107 +5611,0.707107,0.000000,0.000000,0.707107 +5612,0.707107,0.000000,0.000000,0.707107 +5613,0.707107,0.000000,0.000000,0.707107 +5614,0.707107,0.000000,0.000000,0.707107 +5615,0.707107,0.000000,0.000000,0.707107 +5616,0.707107,0.000000,0.000000,0.707107 +5617,0.707107,0.000000,0.000000,0.707107 +5618,0.707107,0.000000,0.000000,0.707107 +5619,0.707107,0.000000,0.000000,0.707107 +5620,0.707107,0.000000,0.000000,0.707107 +5621,0.707107,0.000000,0.000000,0.707107 +5622,0.707107,0.000000,0.000000,0.707107 +5623,0.707107,0.000000,0.000000,0.707107 +5624,0.707107,0.000000,0.000000,0.707107 +5625,0.707107,0.000000,0.000000,0.707107 +5626,0.707107,0.000000,0.000000,0.707107 +5627,0.707107,0.000000,0.000000,0.707107 +5628,0.707107,0.000000,0.000000,0.707107 +5629,0.707107,0.000000,0.000000,0.707107 +5630,0.707107,0.000000,0.000000,0.707107 +5631,0.707107,0.000000,0.000000,0.707107 +5632,0.707107,0.000000,0.000000,0.707107 +5633,0.707107,0.000000,0.000000,0.707107 +5634,0.707107,0.000000,0.000000,0.707107 +5635,0.707107,0.000000,0.000000,0.707107 +5636,0.707107,0.000000,0.000000,0.707107 +5637,0.707107,0.000000,0.000000,0.707107 +5638,0.707107,0.000000,0.000000,0.707107 +5639,0.707107,0.000000,0.000000,0.707107 +5640,0.707107,0.000000,0.000000,0.707107 +5641,0.707107,0.000000,0.000000,0.707107 +5642,0.707107,0.000000,0.000000,0.707107 +5643,0.707107,0.000000,0.000000,0.707107 +5644,0.707107,0.000000,0.000000,0.707107 +5645,0.707107,0.000000,0.000000,0.707107 +5646,0.707107,0.000000,0.000000,0.707107 +5647,0.707107,0.000000,0.000000,0.707107 +5648,0.707107,0.000000,0.000000,0.707107 +5649,0.707107,0.000000,0.000000,0.707107 +5650,0.707107,0.000000,0.000000,0.707107 +5651,0.707107,0.000000,0.000000,0.707107 +5652,0.707107,0.000000,0.000000,0.707107 +5653,0.707107,0.000000,0.000000,0.707107 +5654,0.707107,0.000000,0.000000,0.707107 +5655,0.707107,0.000000,0.000000,0.707107 +5656,0.707107,0.000000,0.000000,0.707107 +5657,0.707107,0.000000,0.000000,0.707107 +5658,0.707107,0.000000,0.000000,0.707107 +5659,0.707107,0.000000,0.000000,0.707107 +5660,0.707107,0.000000,0.000000,0.707107 +5661,0.707107,0.000000,0.000000,0.707107 +5662,0.707107,0.000000,0.000000,0.707107 +5663,0.707107,0.000000,0.000000,0.707107 +5664,0.707107,0.000000,0.000000,0.707107 +5665,0.707107,0.000000,0.000000,0.707107 +5666,0.707107,0.000000,0.000000,0.707107 +5667,0.707107,0.000000,0.000000,0.707107 +5668,0.707107,0.000000,0.000000,0.707107 +5669,0.707107,0.000000,0.000000,0.707107 +5670,0.707107,0.000000,0.000000,0.707107 +5671,0.707107,0.000000,0.000000,0.707107 +5672,0.707107,0.000000,0.000000,0.707107 +5673,0.707107,0.000000,0.000000,0.707107 +5674,0.707107,0.000000,0.000000,0.707107 +5675,0.707107,0.000000,0.000000,0.707107 +5676,0.707107,0.000000,0.000000,0.707107 +5677,0.707107,0.000000,0.000000,0.707107 +5678,0.707107,0.000000,0.000000,0.707107 +5679,0.707107,0.000000,0.000000,0.707107 +5680,0.707107,0.000000,0.000000,0.707107 +5681,0.707107,0.000000,0.000000,0.707107 +5682,0.707107,0.000000,0.000000,0.707107 +5683,0.707107,0.000000,0.000000,0.707107 +5684,0.707107,0.000000,0.000000,0.707107 +5685,0.707107,0.000000,0.000000,0.707107 +5686,0.707107,0.000000,0.000000,0.707107 +5687,0.707107,0.000000,0.000000,0.707107 +5688,0.707107,0.000000,0.000000,0.707107 +5689,0.707107,0.000000,0.000000,0.707107 +5690,0.707107,0.000000,0.000000,0.707107 +5691,0.707107,0.000000,0.000000,0.707107 +5692,0.707107,0.000000,0.000000,0.707107 +5693,0.707107,0.000000,0.000000,0.707107 +5694,0.707107,0.000000,0.000000,0.707107 +5695,0.707107,0.000000,0.000000,0.707107 +5696,0.707107,0.000000,0.000000,0.707107 +5697,0.707107,0.000000,0.000000,0.707107 +5698,0.707107,0.000000,0.000000,0.707107 +5699,0.707107,0.000000,0.000000,0.707107 +5700,0.707107,0.000000,0.000000,0.707107 +5701,0.707107,0.000000,0.000000,0.707107 +5702,0.707107,0.000000,0.000000,0.707107 +5703,0.707107,0.000000,0.000000,0.707107 +5704,0.707107,0.000000,0.000000,0.707107 +5705,0.707107,0.000000,0.000000,0.707107 +5706,0.707107,0.000000,0.000000,0.707107 +5707,0.707107,0.000000,0.000000,0.707107 +5708,0.707107,0.000000,0.000000,0.707107 +5709,0.707107,0.000000,0.000000,0.707107 +5710,0.707107,0.000000,0.000000,0.707107 +5711,0.707107,0.000000,0.000000,0.707107 +5712,0.707107,0.000000,0.000000,0.707107 +5713,0.707107,0.000000,0.000000,0.707107 +5714,0.707107,0.000000,0.000000,0.707107 +5715,0.707107,0.000000,0.000000,0.707107 +5716,0.707107,0.000000,0.000000,0.707107 +5717,0.707107,0.000000,0.000000,0.707107 +5718,0.707107,0.000000,0.000000,0.707107 +5719,0.707107,0.000000,0.000000,0.707107 +5720,0.707107,0.000000,0.000000,0.707107 +5721,0.707107,0.000000,0.000000,0.707107 +5722,0.707107,0.000000,0.000000,0.707107 +5723,0.707107,0.000000,0.000000,0.707107 +5724,0.707107,0.000000,0.000000,0.707107 +5725,0.707107,0.000000,0.000000,0.707107 +5726,0.707107,0.000000,0.000000,0.707107 +5727,0.707107,0.000000,0.000000,0.707107 +5728,0.707107,0.000000,0.000000,0.707107 +5729,0.707107,0.000000,0.000000,0.707107 +5730,0.707107,0.000000,0.000000,0.707107 +5731,0.707107,0.000000,0.000000,0.707107 +5732,0.707107,0.000000,0.000000,0.707107 +5733,0.707107,0.000000,0.000000,0.707107 +5734,0.707107,0.000000,0.000000,0.707107 +5735,0.707107,0.000000,0.000000,0.707107 +5736,0.707107,0.000000,0.000000,0.707107 +5737,0.707107,0.000000,0.000000,0.707107 +5738,0.707107,0.000000,0.000000,0.707107 +5739,0.707107,0.000000,0.000000,0.707107 +5740,0.707107,0.000000,0.000000,0.707107 +5741,0.707107,0.000000,0.000000,0.707107 +5742,0.707107,0.000000,0.000000,0.707107 +5743,0.707107,0.000000,0.000000,0.707107 +5744,0.707107,0.000000,0.000000,0.707107 +5745,0.707107,0.000000,0.000000,0.707107 +5746,0.707107,0.000000,0.000000,0.707107 +5747,0.707107,0.000000,0.000000,0.707107 +5748,0.707107,0.000000,0.000000,0.707107 +5749,0.707107,0.000000,0.000000,0.707107 +5750,0.707107,0.000000,0.000000,0.707107 +5751,0.707107,0.000000,0.000000,0.707107 +5752,0.707107,0.000000,0.000000,0.707107 +5753,0.707107,0.000000,0.000000,0.707107 +5754,0.707107,0.000000,0.000000,0.707107 +5755,0.707107,0.000000,0.000000,0.707107 +5756,0.707107,0.000000,0.000000,0.707107 +5757,0.707107,0.000000,0.000000,0.707107 +5758,0.707107,0.000000,0.000000,0.707107 +5759,0.707107,0.000000,0.000000,0.707107 +5760,0.707107,0.000000,0.000000,0.707107 +5761,0.707107,0.000000,0.000000,0.707107 +5762,0.707107,0.000000,0.000000,0.707107 +5763,0.707107,0.000000,0.000000,0.707107 +5764,0.707107,0.000000,0.000000,0.707107 +5765,0.707107,0.000000,0.000000,0.707107 +5766,0.707107,0.000000,0.000000,0.707107 +5767,0.707107,0.000000,0.000000,0.707107 +5768,0.707107,0.000000,0.000000,0.707107 +5769,0.707107,0.000000,0.000000,0.707107 +5770,0.707107,0.000000,0.000000,0.707107 +5771,0.707107,0.000000,0.000000,0.707107 +5772,0.707107,0.000000,0.000000,0.707107 +5773,0.707107,0.000000,0.000000,0.707107 +5774,0.707107,0.000000,0.000000,0.707107 +5775,0.707107,0.000000,0.000000,0.707107 +5776,0.707107,0.000000,0.000000,0.707107 +5777,0.707107,0.000000,0.000000,0.707107 +5778,0.707107,0.000000,0.000000,0.707107 +5779,0.707107,0.000000,0.000000,0.707107 +5780,0.707107,0.000000,0.000000,0.707107 +5781,0.707107,0.000000,0.000000,0.707107 +5782,0.707107,0.000000,0.000000,0.707107 +5783,0.707107,0.000000,0.000000,0.707107 +5784,0.707107,0.000000,0.000000,0.707107 +5785,0.707107,0.000000,0.000000,0.707107 +5786,0.707107,0.000000,0.000000,0.707107 +5787,0.707107,0.000000,0.000000,0.707107 +5788,0.707107,0.000000,0.000000,0.707107 +5789,0.707107,0.000000,0.000000,0.707107 +5790,0.707107,0.000000,0.000000,0.707107 +5791,0.707107,0.000000,0.000000,0.707107 +5792,0.707107,0.000000,0.000000,0.707107 +5793,0.707107,0.000000,0.000000,0.707107 +5794,0.707107,0.000000,0.000000,0.707107 +5795,0.707107,0.000000,0.000000,0.707107 +5796,0.707107,0.000000,0.000000,0.707107 +5797,0.707107,0.000000,0.000000,0.707107 +5798,0.707107,0.000000,0.000000,0.707107 +5799,0.707107,0.000000,0.000000,0.707107 +5800,0.707107,0.000000,0.000000,0.707107 +5801,0.707107,0.000000,0.000000,0.707107 +5802,0.707107,0.000000,0.000000,0.707107 +5803,0.707107,0.000000,0.000000,0.707107 +5804,0.707107,0.000000,0.000000,0.707107 +5805,0.707107,0.000000,0.000000,0.707107 +5806,0.707107,0.000000,0.000000,0.707107 +5807,0.707107,0.000000,0.000000,0.707107 +5808,0.707107,0.000000,0.000000,0.707107 +5809,0.707107,0.000000,0.000000,0.707107 +5810,0.707107,0.000000,0.000000,0.707107 +5811,0.707107,0.000000,0.000000,0.707107 +5812,0.707107,0.000000,0.000000,0.707107 +5813,0.707107,0.000000,0.000000,0.707107 +5814,0.707107,0.000000,0.000000,0.707107 +5815,0.707107,0.000000,0.000000,0.707107 +5816,0.707107,0.000000,0.000000,0.707107 +5817,0.707107,0.000000,0.000000,0.707107 +5818,0.707107,0.000000,0.000000,0.707107 +5819,0.707107,0.000000,0.000000,0.707107 +5820,0.707107,0.000000,0.000000,0.707107 +5821,0.707107,0.000000,0.000000,0.707107 +5822,0.707107,0.000000,0.000000,0.707107 +5823,0.707107,0.000000,0.000000,0.707107 +5824,0.707107,0.000000,0.000000,0.707107 +5825,0.707107,0.000000,0.000000,0.707107 +5826,0.707107,0.000000,0.000000,0.707107 +5827,0.707107,0.000000,0.000000,0.707107 +5828,0.707107,0.000000,0.000000,0.707107 +5829,0.707107,0.000000,0.000000,0.707107 +5830,0.707107,0.000000,0.000000,0.707107 +5831,0.707107,0.000000,0.000000,0.707107 +5832,0.707107,0.000000,0.000000,0.707107 +5833,0.707107,0.000000,0.000000,0.707107 +5834,0.707107,0.000000,0.000000,0.707107 +5835,0.707107,0.000000,0.000000,0.707107 +5836,0.707107,0.000000,0.000000,0.707107 +5837,0.707107,0.000000,0.000000,0.707107 +5838,0.707107,0.000000,0.000000,0.707107 +5839,0.707107,0.000000,0.000000,0.707107 +5840,0.707107,0.000000,0.000000,0.707107 +5841,0.707107,0.000000,0.000000,0.707107 +5842,0.707107,0.000000,0.000000,0.707107 +5843,0.707107,0.000000,0.000000,0.707107 +5844,0.707107,0.000000,0.000000,0.707107 +5845,0.707107,0.000000,0.000000,0.707107 +5846,0.707107,0.000000,0.000000,0.707107 +5847,0.707107,0.000000,0.000000,0.707107 +5848,0.707107,0.000000,0.000000,0.707107 +5849,0.707107,0.000000,0.000000,0.707107 +5850,0.707107,0.000000,0.000000,0.707107 +5851,0.707107,0.000000,0.000000,0.707107 +5852,0.707107,0.000000,0.000000,0.707107 +5853,0.707107,0.000000,0.000000,0.707107 +5854,0.707107,0.000000,0.000000,0.707107 +5855,0.707107,0.000000,0.000000,0.707107 +5856,0.707107,0.000000,0.000000,0.707107 +5857,0.707107,0.000000,0.000000,0.707107 +5858,0.707107,0.000000,0.000000,0.707107 +5859,0.707107,0.000000,0.000000,0.707107 +5860,0.707107,0.000000,0.000000,0.707107 +5861,0.707107,0.000000,0.000000,0.707107 +5862,0.707107,0.000000,0.000000,0.707107 +5863,0.707107,0.000000,0.000000,0.707107 +5864,0.707107,0.000000,0.000000,0.707107 +5865,0.707107,0.000000,0.000000,0.707107 +5866,0.707107,0.000000,0.000000,0.707107 +5867,0.707107,0.000000,0.000000,0.707107 +5868,0.707107,0.000000,0.000000,0.707107 +5869,0.707107,0.000000,0.000000,0.707107 +5870,0.707107,0.000000,0.000000,0.707107 +5871,0.707107,0.000000,0.000000,0.707107 +5872,0.707107,0.000000,0.000000,0.707107 +5873,0.707107,0.000000,0.000000,0.707107 +5874,0.707107,0.000000,0.000000,0.707107 +5875,0.707107,0.000000,0.000000,0.707107 +5876,0.707107,0.000000,0.000000,0.707107 +5877,0.707107,0.000000,0.000000,0.707107 +5878,0.707107,0.000000,0.000000,0.707107 +5879,0.707107,0.000000,0.000000,0.707107 +5880,0.707107,0.000000,0.000000,0.707107 +5881,0.707107,0.000000,0.000000,0.707107 +5882,0.707107,0.000000,0.000000,0.707107 +5883,0.707107,0.000000,0.000000,0.707107 +5884,0.707107,0.000000,0.000000,0.707107 +5885,0.707107,0.000000,0.000000,0.707107 +5886,0.707107,0.000000,0.000000,0.707107 +5887,0.707107,0.000000,0.000000,0.707107 +5888,0.707107,0.000000,0.000000,0.707107 +5889,0.707107,0.000000,0.000000,0.707107 +5890,0.707107,0.000000,0.000000,0.707107 +5891,0.707107,0.000000,0.000000,0.707107 +5892,0.707107,0.000000,0.000000,0.707107 +5893,0.707107,0.000000,0.000000,0.707107 +5894,0.707107,0.000000,0.000000,0.707107 +5895,0.707107,0.000000,0.000000,0.707107 +5896,0.707107,0.000000,0.000000,0.707107 +5897,0.707107,0.000000,0.000000,0.707107 +5898,0.707107,0.000000,0.000000,0.707107 +5899,0.707107,0.000000,0.000000,0.707107 +5900,0.707107,0.000000,0.000000,0.707107 +5901,0.707107,0.000000,0.000000,0.707107 +5902,0.707107,0.000000,0.000000,0.707107 +5903,0.707107,0.000000,0.000000,0.707107 +5904,0.707107,0.000000,0.000000,0.707107 +5905,0.707107,0.000000,0.000000,0.707107 +5906,0.707107,0.000000,0.000000,0.707107 +5907,0.707107,0.000000,0.000000,0.707107 +5908,0.707107,0.000000,0.000000,0.707107 +5909,0.707107,0.000000,0.000000,0.707107 +5910,0.707107,0.000000,0.000000,0.707107 +5911,0.707107,0.000000,0.000000,0.707107 +5912,0.707107,0.000000,0.000000,0.707107 +5913,0.707107,0.000000,0.000000,0.707107 +5914,0.707107,0.000000,0.000000,0.707107 +5915,0.707107,0.000000,0.000000,0.707107 +5916,0.707107,0.000000,0.000000,0.707107 +5917,0.707107,0.000000,0.000000,0.707107 +5918,0.707107,0.000000,0.000000,0.707107 +5919,0.707107,0.000000,0.000000,0.707107 +5920,0.707107,0.000000,0.000000,0.707107 +5921,0.707107,0.000000,0.000000,0.707107 +5922,0.707107,0.000000,0.000000,0.707107 +5923,0.707107,0.000000,0.000000,0.707107 +5924,0.707107,0.000000,0.000000,0.707107 +5925,0.707107,0.000000,0.000000,0.707107 +5926,0.707107,0.000000,0.000000,0.707107 +5927,0.707107,0.000000,0.000000,0.707107 +5928,0.707107,0.000000,0.000000,0.707107 +5929,0.707107,0.000000,0.000000,0.707107 +5930,0.707107,0.000000,0.000000,0.707107 +5931,0.707107,0.000000,0.000000,0.707107 +5932,0.707107,0.000000,0.000000,0.707107 +5933,0.707107,0.000000,0.000000,0.707107 +5934,0.707107,0.000000,0.000000,0.707107 +5935,0.707107,0.000000,0.000000,0.707107 +5936,0.707107,0.000000,0.000000,0.707107 +5937,0.707107,0.000000,0.000000,0.707107 +5938,0.707107,0.000000,0.000000,0.707107 +5939,0.707107,0.000000,0.000000,0.707107 +5940,0.707107,0.000000,0.000000,0.707107 +5941,0.707107,0.000000,0.000000,0.707107 +5942,0.707107,0.000000,0.000000,0.707107 +5943,0.707107,0.000000,0.000000,0.707107 +5944,0.707107,0.000000,0.000000,0.707107 +5945,0.707107,0.000000,0.000000,0.707107 +5946,0.707107,0.000000,0.000000,0.707107 +5947,0.707107,0.000000,0.000000,0.707107 +5948,0.707107,0.000000,0.000000,0.707107 +5949,0.707107,0.000000,0.000000,0.707107 +5950,0.707107,0.000000,0.000000,0.707107 +5951,0.707107,0.000000,0.000000,0.707107 +5952,0.707107,0.000000,0.000000,0.707107 +5953,0.707107,0.000000,0.000000,0.707107 +5954,0.707107,0.000000,0.000000,0.707107 +5955,0.707107,0.000000,0.000000,0.707107 +5956,0.707107,0.000000,0.000000,0.707107 +5957,0.707107,0.000000,0.000000,0.707107 +5958,0.707107,0.000000,0.000000,0.707107 +5959,0.707107,0.000000,0.000000,0.707107 +5960,0.707107,0.000000,0.000000,0.707107 +5961,0.707107,0.000000,0.000000,0.707107 +5962,0.707107,0.000000,0.000000,0.707107 +5963,0.707107,0.000000,0.000000,0.707107 +5964,0.707107,0.000000,0.000000,0.707107 +5965,0.707107,0.000000,0.000000,0.707107 +5966,0.707107,0.000000,0.000000,0.707107 +5967,0.707107,0.000000,0.000000,0.707107 +5968,0.707107,0.000000,0.000000,0.707107 +5969,0.707107,0.000000,0.000000,0.707107 +5970,0.707107,0.000000,0.000000,0.707107 +5971,0.707107,0.000000,0.000000,0.707107 +5972,0.707107,0.000000,0.000000,0.707107 +5973,0.707107,0.000000,0.000000,0.707107 +5974,0.707107,0.000000,0.000000,0.707107 +5975,0.707107,0.000000,0.000000,0.707107 +5976,0.707107,0.000000,0.000000,0.707107 +5977,0.707107,0.000000,0.000000,0.707107 +5978,0.707107,0.000000,0.000000,0.707107 +5979,0.707107,0.000000,0.000000,0.707107 +5980,0.707107,0.000000,0.000000,0.707107 +5981,0.707107,0.000000,0.000000,0.707107 +5982,0.707107,0.000000,0.000000,0.707107 +5983,0.707107,0.000000,0.000000,0.707107 +5984,0.707107,0.000000,0.000000,0.707107 +5985,0.707107,0.000000,0.000000,0.707107 +5986,0.707107,0.000000,0.000000,0.707107 +5987,0.707107,0.000000,0.000000,0.707107 +5988,0.707107,0.000000,0.000000,0.707107 +5989,0.707107,0.000000,0.000000,0.707107 +5990,0.707107,0.000000,0.000000,0.707107 +5991,0.707107,0.000000,0.000000,0.707107 +5992,0.707107,0.000000,0.000000,0.707107 +5993,0.707107,0.000000,0.000000,0.707107 +5994,0.707107,0.000000,0.000000,0.707107 +5995,0.707107,0.000000,0.000000,0.707107 +5996,0.707107,0.000000,0.000000,0.707107 +5997,0.707107,0.000000,0.000000,0.707107 +5998,0.707107,0.000000,0.000000,0.707107 +5999,0.707107,0.000000,0.000000,0.707107 +6000,0.707107,0.000000,0.000000,0.707107 +6001,0.707107,0.000000,0.000000,0.707107 +6002,0.707107,0.000000,0.000000,0.707107 +6003,0.707107,0.000000,0.000000,0.707107 +6004,0.707107,0.000000,0.000000,0.707107 +6005,0.707107,0.000000,0.000000,0.707107 +6006,0.707107,0.000000,0.000000,0.707107 +6007,0.707107,0.000000,0.000000,0.707107 +6008,0.707107,0.000000,0.000000,0.707107 +6009,0.707107,0.000000,0.000000,0.707107 +6010,0.707107,0.000000,0.000000,0.707107 +6011,0.707107,0.000000,0.000000,0.707107 +6012,0.707107,0.000000,0.000000,0.707107 +6013,0.707107,0.000000,0.000000,0.707107 +6014,0.707107,0.000000,0.000000,0.707107 +6015,0.707107,0.000000,0.000000,0.707107 +6016,0.707107,0.000000,0.000000,0.707107 +6017,0.707107,0.000000,0.000000,0.707107 +6018,0.707107,0.000000,0.000000,0.707107 +6019,0.707107,0.000000,0.000000,0.707107 +6020,0.707107,0.000000,0.000000,0.707107 +6021,0.707107,0.000000,0.000000,0.707107 +6022,0.707107,0.000000,0.000000,0.707107 +6023,0.707107,0.000000,0.000000,0.707107 +6024,0.707107,0.000000,0.000000,0.707107 +6025,0.707107,0.000000,0.000000,0.707107 +6026,0.707107,0.000000,0.000000,0.707107 +6027,0.707107,0.000000,0.000000,0.707107 +6028,0.707107,0.000000,0.000000,0.707107 +6029,0.707107,0.000000,0.000000,0.707107 +6030,0.707107,0.000000,0.000000,0.707107 +6031,0.707107,0.000000,0.000000,0.707107 +6032,0.707107,0.000000,0.000000,0.707107 +6033,0.707107,0.000000,0.000000,0.707107 +6034,0.707107,0.000000,0.000000,0.707107 +6035,0.707107,0.000000,0.000000,0.707107 +6036,0.707107,0.000000,0.000000,0.707107 +6037,0.707107,0.000000,0.000000,0.707107 +6038,0.707107,0.000000,0.000000,0.707107 +6039,0.707107,0.000000,0.000000,0.707107 +6040,0.707107,0.000000,0.000000,0.707107 +6041,0.707107,0.000000,0.000000,0.707107 +6042,0.707107,0.000000,0.000000,0.707107 +6043,0.707107,0.000000,0.000000,0.707107 +6044,0.707107,0.000000,0.000000,0.707107 +6045,0.707107,0.000000,0.000000,0.707107 +6046,0.707107,0.000000,0.000000,0.707107 +6047,0.707107,0.000000,0.000000,0.707107 +6048,0.707107,0.000000,0.000000,0.707107 +6049,0.707107,0.000000,0.000000,0.707107 +6050,0.707107,0.000000,0.000000,0.707107 +6051,0.707107,0.000000,0.000000,0.707107 +6052,0.707107,0.000000,0.000000,0.707107 +6053,0.707107,0.000000,0.000000,0.707107 +6054,0.707107,0.000000,0.000000,0.707107 +6055,0.707107,0.000000,0.000000,0.707107 +6056,0.707107,0.000000,0.000000,0.707107 +6057,0.707107,0.000000,0.000000,0.707107 +6058,0.707107,0.000000,0.000000,0.707107 +6059,0.707107,0.000000,0.000000,0.707107 +6060,0.707107,0.000000,0.000000,0.707107 +6061,0.707107,0.000000,0.000000,0.707107 +6062,0.707107,0.000000,0.000000,0.707107 +6063,0.707107,0.000000,0.000000,0.707107 +6064,0.707107,0.000000,0.000000,0.707107 +6065,0.707107,0.000000,0.000000,0.707107 +6066,0.707107,0.000000,0.000000,0.707107 +6067,0.707107,0.000000,0.000000,0.707107 +6068,0.707107,0.000000,0.000000,0.707107 +6069,0.707107,0.000000,0.000000,0.707107 +6070,0.707107,0.000000,0.000000,0.707107 +6071,0.707107,0.000000,0.000000,0.707107 +6072,0.707107,0.000000,0.000000,0.707107 +6073,0.707107,0.000000,0.000000,0.707107 +6074,0.707107,0.000000,0.000000,0.707107 +6075,0.707107,0.000000,0.000000,0.707107 +6076,0.707107,0.000000,0.000000,0.707107 +6077,0.707107,0.000000,0.000000,0.707107 +6078,0.707107,0.000000,0.000000,0.707107 +6079,0.707107,0.000000,0.000000,0.707107 +6080,0.707107,0.000000,0.000000,0.707107 +6081,0.707107,0.000000,0.000000,0.707107 +6082,0.707107,0.000000,0.000000,0.707107 +6083,0.707107,0.000000,0.000000,0.707107 +6084,0.707107,0.000000,0.000000,0.707107 +6085,0.707107,0.000000,0.000000,0.707107 +6086,0.707107,0.000000,0.000000,0.707107 +6087,0.707107,0.000000,0.000000,0.707107 +6088,0.707107,0.000000,0.000000,0.707107 +6089,0.707107,0.000000,0.000000,0.707107 +6090,0.707107,0.000000,0.000000,0.707107 +6091,0.707107,0.000000,0.000000,0.707107 +6092,0.707107,0.000000,0.000000,0.707107 +6093,0.707107,0.000000,0.000000,0.707107 +6094,0.707107,0.000000,0.000000,0.707107 +6095,0.707107,0.000000,0.000000,0.707107 +6096,0.707107,0.000000,0.000000,0.707107 +6097,0.707107,0.000000,0.000000,0.707107 +6098,0.707107,0.000000,0.000000,0.707107 +6099,0.707107,0.000000,0.000000,0.707107 +6100,0.707107,0.000000,0.000000,0.707107 +6101,0.707107,0.000000,0.000000,0.707107 +6102,0.707107,0.000000,0.000000,0.707107 +6103,0.707107,0.000000,0.000000,0.707107 +6104,0.707107,0.000000,0.000000,0.707107 +6105,0.707107,0.000000,0.000000,0.707107 +6106,0.707107,0.000000,0.000000,0.707107 +6107,0.707107,0.000000,0.000000,0.707107 +6108,0.707107,0.000000,0.000000,0.707107 +6109,0.707107,0.000000,0.000000,0.707107 +6110,0.707107,0.000000,0.000000,0.707107 +6111,0.707107,0.000000,0.000000,0.707107 +6112,0.707107,0.000000,0.000000,0.707107 +6113,0.707107,0.000000,0.000000,0.707107 +6114,0.707107,0.000000,0.000000,0.707107 +6115,0.707107,0.000000,0.000000,0.707107 +6116,0.707107,0.000000,0.000000,0.707107 +6117,0.707107,0.000000,0.000000,0.707107 +6118,0.707107,0.000000,0.000000,0.707107 +6119,0.707107,0.000000,0.000000,0.707107 +6120,0.707107,0.000000,0.000000,0.707107 +6121,0.707107,0.000000,0.000000,0.707107 +6122,0.707107,0.000000,0.000000,0.707107 +6123,0.707107,0.000000,0.000000,0.707107 +6124,0.707107,0.000000,0.000000,0.707107 +6125,0.707107,0.000000,0.000000,0.707107 +6126,0.707107,0.000000,0.000000,0.707107 +6127,0.707107,0.000000,0.000000,0.707107 +6128,0.707107,0.000000,0.000000,0.707107 +6129,0.707107,0.000000,0.000000,0.707107 +6130,0.707107,0.000000,0.000000,0.707107 +6131,0.707107,0.000000,0.000000,0.707107 +6132,0.707107,0.000000,0.000000,0.707107 +6133,0.707107,0.000000,0.000000,0.707107 +6134,0.707107,0.000000,0.000000,0.707107 +6135,0.707107,0.000000,0.000000,0.707107 +6136,0.707107,0.000000,0.000000,0.707107 +6137,0.707107,0.000000,0.000000,0.707107 +6138,0.707107,0.000000,0.000000,0.707107 +6139,0.707107,0.000000,0.000000,0.707107 +6140,0.707107,0.000000,0.000000,0.707107 +6141,0.707107,0.000000,0.000000,0.707107 +6142,0.707107,0.000000,0.000000,0.707107 +6143,0.707107,0.000000,0.000000,0.707107 +6144,0.707107,0.000000,0.000000,0.707107 +6145,0.707107,0.000000,0.000000,0.707107 +6146,0.707107,0.000000,0.000000,0.707107 +6147,0.707107,0.000000,0.000000,0.707107 +6148,0.707107,0.000000,0.000000,0.707107 +6149,0.707107,0.000000,0.000000,0.707107 +6150,0.707107,0.000000,0.000000,0.707107 +6151,0.707107,0.000000,0.000000,0.707107 +6152,0.707107,0.000000,0.000000,0.707107 +6153,0.707107,0.000000,0.000000,0.707107 +6154,0.707107,0.000000,0.000000,0.707107 +6155,0.707107,0.000000,0.000000,0.707107 +6156,0.707107,0.000000,0.000000,0.707107 +6157,0.707107,0.000000,0.000000,0.707107 +6158,0.707107,0.000000,0.000000,0.707107 +6159,0.707107,0.000000,0.000000,0.707107 +6160,0.707107,0.000000,0.000000,0.707107 +6161,0.707107,0.000000,0.000000,0.707107 +6162,0.707107,0.000000,0.000000,0.707107 +6163,0.707107,0.000000,0.000000,0.707107 +6164,0.707107,0.000000,0.000000,0.707107 +6165,0.707107,0.000000,0.000000,0.707107 +6166,0.707107,0.000000,0.000000,0.707107 +6167,0.707107,0.000000,0.000000,0.707107 +6168,0.707107,0.000000,0.000000,0.707107 +6169,0.707107,0.000000,0.000000,0.707107 +6170,0.707107,0.000000,0.000000,0.707107 +6171,0.707107,0.000000,0.000000,0.707107 +6172,0.707107,0.000000,0.000000,0.707107 +6173,0.707107,0.000000,0.000000,0.707107 +6174,0.707107,0.000000,0.000000,0.707107 +6175,0.707107,0.000000,0.000000,0.707107 +6176,0.707107,0.000000,0.000000,0.707107 +6177,0.707107,0.000000,0.000000,0.707107 +6178,0.707107,0.000000,0.000000,0.707107 +6179,0.707107,0.000000,0.000000,0.707107 +6180,0.707107,0.000000,0.000000,0.707107 +6181,0.707107,0.000000,0.000000,0.707107 +6182,0.707107,0.000000,0.000000,0.707107 +6183,0.707107,0.000000,0.000000,0.707107 +6184,0.707107,0.000000,0.000000,0.707107 +6185,0.707107,0.000000,0.000000,0.707107 +6186,0.707107,0.000000,0.000000,0.707107 +6187,0.707107,0.000000,0.000000,0.707107 +6188,0.707107,0.000000,0.000000,0.707107 +6189,0.707107,0.000000,0.000000,0.707107 +6190,0.707107,0.000000,0.000000,0.707107 +6191,0.707107,0.000000,0.000000,0.707107 +6192,0.707107,0.000000,0.000000,0.707107 +6193,0.707107,0.000000,0.000000,0.707107 +6194,0.707107,0.000000,0.000000,0.707107 +6195,0.707107,0.000000,0.000000,0.707107 +6196,0.707107,0.000000,0.000000,0.707107 +6197,0.707107,0.000000,0.000000,0.707107 +6198,0.707107,0.000000,0.000000,0.707107 +6199,0.707107,0.000000,0.000000,0.707107 +6200,0.707107,0.000000,0.000000,0.707107 +6201,0.707107,0.000000,0.000000,0.707107 +6202,0.707107,0.000000,0.000000,0.707107 +6203,0.707107,0.000000,0.000000,0.707107 +6204,0.707107,0.000000,0.000000,0.707107 +6205,0.707107,0.000000,0.000000,0.707107 +6206,0.707107,0.000000,0.000000,0.707107 +6207,0.707107,0.000000,0.000000,0.707107 +6208,0.707107,0.000000,0.000000,0.707107 +6209,0.707107,0.000000,0.000000,0.707107 +6210,0.707107,0.000000,0.000000,0.707107 +6211,0.707107,0.000000,0.000000,0.707107 +6212,0.707107,0.000000,0.000000,0.707107 +6213,0.707107,0.000000,0.000000,0.707107 +6214,0.707107,0.000000,0.000000,0.707107 +6215,0.707107,0.000000,0.000000,0.707107 +6216,0.707107,0.000000,0.000000,0.707107 +6217,0.707107,0.000000,0.000000,0.707107 +6218,0.707107,0.000000,0.000000,0.707107 +6219,0.707107,0.000000,0.000000,0.707107 +6220,0.707107,0.000000,0.000000,0.707107 +6221,0.707107,0.000000,0.000000,0.707107 +6222,0.707107,0.000000,0.000000,0.707107 +6223,0.707107,0.000000,0.000000,0.707107 +6224,0.707107,0.000000,0.000000,0.707107 +6225,0.707107,0.000000,0.000000,0.707107 +6226,0.707107,0.000000,0.000000,0.707107 +6227,0.707107,0.000000,0.000000,0.707107 +6228,0.707107,0.000000,0.000000,0.707107 +6229,0.707107,0.000000,0.000000,0.707107 +6230,0.707107,0.000000,0.000000,0.707107 +6231,0.707107,0.000000,0.000000,0.707107 +6232,0.707107,0.000000,0.000000,0.707107 +6233,0.707107,0.000000,0.000000,0.707107 +6234,0.707107,0.000000,0.000000,0.707107 +6235,0.707107,0.000000,0.000000,0.707107 +6236,0.707107,0.000000,0.000000,0.707107 +6237,0.707107,0.000000,0.000000,0.707107 +6238,0.707107,0.000000,0.000000,0.707107 +6239,0.707107,0.000000,0.000000,0.707107 +6240,0.707107,0.000000,0.000000,0.707107 +6241,0.707107,0.000000,0.000000,0.707107 +6242,0.707107,0.000000,0.000000,0.707107 +6243,0.707107,0.000000,0.000000,0.707107 +6244,0.707107,0.000000,0.000000,0.707107 +6245,0.707107,0.000000,0.000000,0.707107 +6246,0.707107,0.000000,0.000000,0.707107 +6247,0.707107,0.000000,0.000000,0.707107 +6248,0.707107,0.000000,0.000000,0.707107 +6249,0.707107,0.000000,0.000000,0.707107 +6250,0.707107,0.000000,0.000000,0.707107 +6251,0.707107,0.000000,0.000000,0.707107 +6252,0.707107,0.000000,0.000000,0.707107 +6253,0.707107,0.000000,0.000000,0.707107 +6254,0.707107,0.000000,0.000000,0.707107 +6255,0.707107,0.000000,0.000000,0.707107 +6256,0.707107,0.000000,0.000000,0.707107 +6257,0.707107,0.000000,0.000000,0.707107 +6258,0.707107,0.000000,0.000000,0.707107 +6259,0.707107,0.000000,0.000000,0.707107 +6260,0.707107,0.000000,0.000000,0.707107 +6261,0.707107,0.000000,0.000000,0.707107 +6262,0.707107,0.000000,0.000000,0.707107 +6263,0.707107,0.000000,0.000000,0.707107 +6264,0.707107,0.000000,0.000000,0.707107 +6265,0.707107,0.000000,0.000000,0.707107 +6266,0.707107,0.000000,0.000000,0.707107 +6267,0.707107,0.000000,0.000000,0.707107 +6268,0.707107,0.000000,0.000000,0.707107 +6269,0.707107,0.000000,0.000000,0.707107 +6270,0.707107,0.000000,0.000000,0.707107 +6271,0.707107,0.000000,0.000000,0.707107 +6272,0.707107,0.000000,0.000000,0.707107 +6273,0.707107,0.000000,0.000000,0.707107 +6274,0.707107,0.000000,0.000000,0.707107 +6275,0.707107,0.000000,0.000000,0.707107 +6276,0.707107,0.000000,0.000000,0.707107 +6277,0.707107,0.000000,0.000000,0.707107 +6278,0.707107,0.000000,0.000000,0.707107 +6279,0.707107,0.000000,0.000000,0.707107 +6280,0.707107,0.000000,0.000000,0.707107 +6281,0.707107,0.000000,0.000000,0.707107 +6282,0.707107,0.000000,0.000000,0.707107 +6283,0.707107,0.000000,0.000000,0.707107 +6284,0.707107,0.000000,0.000000,0.707107 +6285,0.707107,0.000000,0.000000,0.707107 +6286,0.707107,0.000000,0.000000,0.707107 +6287,0.707107,0.000000,0.000000,0.707107 +6288,0.707107,0.000000,0.000000,0.707107 +6289,0.707107,0.000000,0.000000,0.707107 +6290,0.707107,0.000000,0.000000,0.707107 +6291,0.707107,0.000000,0.000000,0.707107 +6292,0.707107,0.000000,0.000000,0.707107 +6293,0.707107,0.000000,0.000000,0.707107 +6294,0.707107,0.000000,0.000000,0.707107 +6295,0.707107,0.000000,0.000000,0.707107 +6296,0.707107,0.000000,0.000000,0.707107 +6297,0.707107,0.000000,0.000000,0.707107 +6298,0.707107,0.000000,0.000000,0.707107 +6299,0.707107,0.000000,0.000000,0.707107 +6300,0.707107,0.000000,0.000000,0.707107 +6301,0.707107,0.000000,0.000000,0.707107 +6302,0.707107,0.000000,0.000000,0.707107 +6303,0.707107,0.000000,0.000000,0.707107 +6304,0.707107,0.000000,0.000000,0.707107 +6305,0.707107,0.000000,0.000000,0.707107 +6306,0.707107,0.000000,0.000000,0.707107 +6307,0.707107,0.000000,0.000000,0.707107 +6308,0.707107,0.000000,0.000000,0.707107 +6309,0.707107,0.000000,0.000000,0.707107 +6310,0.707107,0.000000,0.000000,0.707107 +6311,0.707107,0.000000,0.000000,0.707107 +6312,0.707107,0.000000,0.000000,0.707107 +6313,0.707107,0.000000,0.000000,0.707107 +6314,0.707107,0.000000,0.000000,0.707107 +6315,0.707107,0.000000,0.000000,0.707107 +6316,0.707107,0.000000,0.000000,0.707107 +6317,0.707107,0.000000,0.000000,0.707107 +6318,0.707107,0.000000,0.000000,0.707107 +6319,0.707107,0.000000,0.000000,0.707107 +6320,0.707107,0.000000,0.000000,0.707107 +6321,0.707107,0.000000,0.000000,0.707107 +6322,0.707107,0.000000,0.000000,0.707107 +6323,0.707107,0.000000,0.000000,0.707107 +6324,0.707107,0.000000,0.000000,0.707107 +6325,0.707107,0.000000,0.000000,0.707107 +6326,0.707107,0.000000,0.000000,0.707107 +6327,0.707107,0.000000,0.000000,0.707107 +6328,0.707107,0.000000,0.000000,0.707107 +6329,0.707107,0.000000,0.000000,0.707107 +6330,0.707107,0.000000,0.000000,0.707107 +6331,0.707107,0.000000,0.000000,0.707107 +6332,0.707107,0.000000,0.000000,0.707107 +6333,0.707107,0.000000,0.000000,0.707107 +6334,0.707107,0.000000,0.000000,0.707107 +6335,0.707107,0.000000,0.000000,0.707107 +6336,0.707107,0.000000,0.000000,0.707107 +6337,0.707107,0.000000,0.000000,0.707107 +6338,0.707107,0.000000,0.000000,0.707107 +6339,0.707107,0.000000,0.000000,0.707107 +6340,0.707107,0.000000,0.000000,0.707107 +6341,0.707107,0.000000,0.000000,0.707107 +6342,0.707107,0.000000,0.000000,0.707107 +6343,0.707107,0.000000,0.000000,0.707107 +6344,0.707107,0.000000,0.000000,0.707107 +6345,0.707107,0.000000,0.000000,0.707107 +6346,0.707107,0.000000,0.000000,0.707107 +6347,0.707107,0.000000,0.000000,0.707107 +6348,0.707107,0.000000,0.000000,0.707107 +6349,0.707107,0.000000,0.000000,0.707107 +6350,0.707107,0.000000,0.000000,0.707107 +6351,0.707107,0.000000,0.000000,0.707107 +6352,0.707107,0.000000,0.000000,0.707107 +6353,0.707107,0.000000,0.000000,0.707107 +6354,0.707107,0.000000,0.000000,0.707107 +6355,0.707107,0.000000,0.000000,0.707107 +6356,0.707107,0.000000,0.000000,0.707107 +6357,0.707107,0.000000,0.000000,0.707107 +6358,0.707107,0.000000,0.000000,0.707107 +6359,0.707107,0.000000,0.000000,0.707107 +6360,0.707107,0.000000,0.000000,0.707107 +6361,0.707107,0.000000,0.000000,0.707107 +6362,0.707107,0.000000,0.000000,0.707107 +6363,0.707107,0.000000,0.000000,0.707107 +6364,0.707107,0.000000,0.000000,0.707107 +6365,0.707107,0.000000,0.000000,0.707107 +6366,0.707107,0.000000,0.000000,0.707107 +6367,0.707107,0.000000,0.000000,0.707107 +6368,0.707107,0.000000,0.000000,0.707107 +6369,0.707107,0.000000,0.000000,0.707107 +6370,0.707107,0.000000,0.000000,0.707107 +6371,0.707107,0.000000,0.000000,0.707107 +6372,0.707107,0.000000,0.000000,0.707107 +6373,0.707107,0.000000,0.000000,0.707107 +6374,0.707107,0.000000,0.000000,0.707107 +6375,0.707107,0.000000,0.000000,0.707107 +6376,0.707107,0.000000,0.000000,0.707107 +6377,0.707107,0.000000,0.000000,0.707107 +6378,0.707107,0.000000,0.000000,0.707107 +6379,0.707107,0.000000,0.000000,0.707107 +6380,0.707107,0.000000,0.000000,0.707107 +6381,0.707107,0.000000,0.000000,0.707107 +6382,0.707107,0.000000,0.000000,0.707107 +6383,0.707107,0.000000,0.000000,0.707107 +6384,0.707107,0.000000,0.000000,0.707107 +6385,0.707107,0.000000,0.000000,0.707107 +6386,0.707107,0.000000,0.000000,0.707107 +6387,0.707107,0.000000,0.000000,0.707107 +6388,0.707107,0.000000,0.000000,0.707107 +6389,0.707107,0.000000,0.000000,0.707107 +6390,0.707107,0.000000,0.000000,0.707107 +6391,0.707107,0.000000,0.000000,0.707107 +6392,0.707107,0.000000,0.000000,0.707107 +6393,0.707107,0.000000,0.000000,0.707107 +6394,0.707107,0.000000,0.000000,0.707107 +6395,0.707107,0.000000,0.000000,0.707107 +6396,0.707107,0.000000,0.000000,0.707107 +6397,0.707107,0.000000,0.000000,0.707107 +6398,0.707107,0.000000,0.000000,0.707107 +6399,0.707107,0.000000,0.000000,0.707107 +6400,0.707107,0.000000,0.000000,0.707107 +6401,0.707107,0.000000,0.000000,0.707107 +6402,0.707107,0.000000,0.000000,0.707107 +6403,0.707107,0.000000,0.000000,0.707107 +6404,0.707107,0.000000,0.000000,0.707107 +6405,0.707107,0.000000,0.000000,0.707107 +6406,0.707107,0.000000,0.000000,0.707107 +6407,0.707107,0.000000,0.000000,0.707107 +6408,0.707107,0.000000,0.000000,0.707107 +6409,0.707107,0.000000,0.000000,0.707107 +6410,0.707107,0.000000,0.000000,0.707107 +6411,0.707107,0.000000,0.000000,0.707107 +6412,0.707107,0.000000,0.000000,0.707107 +6413,0.707107,0.000000,0.000000,0.707107 +6414,0.707107,0.000000,0.000000,0.707107 +6415,0.707107,0.000000,0.000000,0.707107 +6416,0.707107,0.000000,0.000000,0.707107 +6417,0.707107,0.000000,0.000000,0.707107 +6418,0.707107,0.000000,0.000000,0.707107 +6419,0.707107,0.000000,0.000000,0.707107 +6420,0.707107,0.000000,0.000000,0.707107 +6421,0.707107,0.000000,0.000000,0.707107 +6422,0.707107,0.000000,0.000000,0.707107 +6423,0.707107,0.000000,0.000000,0.707107 +6424,0.707107,0.000000,0.000000,0.707107 +6425,0.707107,0.000000,0.000000,0.707107 +6426,0.707107,0.000000,0.000000,0.707107 +6427,0.707107,0.000000,0.000000,0.707107 +6428,0.707107,0.000000,0.000000,0.707107 +6429,0.707107,0.000000,0.000000,0.707107 +6430,0.707107,0.000000,0.000000,0.707107 +6431,0.707107,0.000000,0.000000,0.707107 +6432,0.707107,0.000000,0.000000,0.707107 +6433,0.707107,0.000000,0.000000,0.707107 +6434,0.707107,0.000000,0.000000,0.707107 +6435,0.707107,0.000000,0.000000,0.707107 +6436,0.707107,0.000000,0.000000,0.707107 +6437,0.707107,0.000000,0.000000,0.707107 +6438,0.707107,0.000000,0.000000,0.707107 +6439,0.707107,0.000000,0.000000,0.707107 +6440,0.707107,0.000000,0.000000,0.707107 +6441,0.707107,0.000000,0.000000,0.707107 +6442,0.707107,0.000000,0.000000,0.707107 +6443,0.707107,0.000000,0.000000,0.707107 +6444,0.707107,0.000000,0.000000,0.707107 +6445,0.707107,0.000000,0.000000,0.707107 +6446,0.707107,0.000000,0.000000,0.707107 +6447,0.707107,0.000000,0.000000,0.707107 +6448,0.707107,0.000000,0.000000,0.707107 +6449,0.707107,0.000000,0.000000,0.707107 +6450,0.707107,0.000000,0.000000,0.707107 +6451,0.707107,0.000000,0.000000,0.707107 +6452,0.707107,0.000000,0.000000,0.707107 +6453,0.707107,0.000000,0.000000,0.707107 +6454,0.707107,0.000000,0.000000,0.707107 +6455,0.707107,0.000000,0.000000,0.707107 +6456,0.707107,0.000000,0.000000,0.707107 +6457,0.707107,0.000000,0.000000,0.707107 +6458,0.707107,0.000000,0.000000,0.707107 +6459,0.707107,0.000000,0.000000,0.707107 +6460,0.707107,0.000000,0.000000,0.707107 +6461,0.707107,0.000000,0.000000,0.707107 +6462,0.707107,0.000000,0.000000,0.707107 +6463,0.707107,0.000000,0.000000,0.707107 +6464,0.707107,0.000000,0.000000,0.707107 +6465,0.707107,0.000000,0.000000,0.707107 +6466,0.707107,0.000000,0.000000,0.707107 +6467,0.707107,0.000000,0.000000,0.707107 +6468,0.707107,0.000000,0.000000,0.707107 +6469,0.707107,0.000000,0.000000,0.707107 +6470,0.707107,0.000000,0.000000,0.707107 +6471,0.707107,0.000000,0.000000,0.707107 +6472,0.707107,0.000000,0.000000,0.707107 +6473,0.707107,0.000000,0.000000,0.707107 +6474,0.707107,0.000000,0.000000,0.707107 +6475,0.707107,0.000000,0.000000,0.707107 +6476,0.707107,0.000000,0.000000,0.707107 +6477,0.707107,0.000000,0.000000,0.707107 +6478,0.707107,0.000000,0.000000,0.707107 +6479,0.707107,0.000000,0.000000,0.707107 +6480,0.707107,0.000000,0.000000,0.707107 +6481,0.707107,0.000000,0.000000,0.707107 +6482,0.707107,0.000000,0.000000,0.707107 +6483,0.707107,0.000000,0.000000,0.707107 +6484,0.707107,0.000000,0.000000,0.707107 +6485,0.707107,0.000000,0.000000,0.707107 +6486,0.707107,0.000000,0.000000,0.707107 +6487,0.707107,0.000000,0.000000,0.707107 +6488,0.707107,0.000000,0.000000,0.707107 +6489,0.707107,0.000000,0.000000,0.707107 +6490,0.707107,0.000000,0.000000,0.707107 +6491,0.707107,0.000000,0.000000,0.707107 +6492,0.707107,0.000000,0.000000,0.707107 +6493,0.707107,0.000000,0.000000,0.707107 +6494,0.707107,0.000000,0.000000,0.707107 +6495,0.707107,0.000000,0.000000,0.707107 +6496,0.707107,0.000000,0.000000,0.707107 +6497,0.707107,0.000000,0.000000,0.707107 +6498,0.707107,0.000000,0.000000,0.707107 +6499,0.707107,0.000000,0.000000,0.707107 +6500,0.707107,0.000000,0.000000,0.707107 +6501,0.707107,0.000000,0.000000,0.707107 +6502,0.707107,0.000000,0.000000,0.707107 +6503,0.707107,0.000000,0.000000,0.707107 +6504,0.707107,0.000000,0.000000,0.707107 +6505,0.707107,0.000000,0.000000,0.707107 +6506,0.707107,0.000000,0.000000,0.707107 +6507,0.707107,0.000000,0.000000,0.707107 +6508,0.707107,0.000000,0.000000,0.707107 +6509,0.707107,0.000000,0.000000,0.707107 +6510,0.707107,0.000000,0.000000,0.707107 +6511,0.707107,0.000000,0.000000,0.707107 +6512,0.707107,0.000000,0.000000,0.707107 +6513,0.707107,0.000000,0.000000,0.707107 +6514,0.707107,0.000000,0.000000,0.707107 +6515,0.707107,0.000000,0.000000,0.707107 +6516,0.707107,0.000000,0.000000,0.707107 +6517,0.707107,0.000000,0.000000,0.707107 +6518,0.707107,0.000000,0.000000,0.707107 +6519,0.707107,0.000000,0.000000,0.707107 +6520,0.707107,0.000000,0.000000,0.707107 +6521,0.707107,0.000000,0.000000,0.707107 +6522,0.707107,0.000000,0.000000,0.707107 +6523,0.707107,0.000000,0.000000,0.707107 +6524,0.707107,0.000000,0.000000,0.707107 +6525,0.707107,0.000000,0.000000,0.707107 +6526,0.707107,0.000000,0.000000,0.707107 +6527,0.707107,0.000000,0.000000,0.707107 +6528,0.707107,0.000000,0.000000,0.707107 +6529,0.707107,0.000000,0.000000,0.707107 +6530,0.707107,0.000000,0.000000,0.707107 +6531,0.707107,0.000000,0.000000,0.707107 +6532,0.707107,0.000000,0.000000,0.707107 +6533,0.707107,0.000000,0.000000,0.707107 +6534,0.707107,0.000000,0.000000,0.707107 +6535,0.707107,0.000000,0.000000,0.707107 +6536,0.707107,0.000000,0.000000,0.707107 +6537,0.707107,0.000000,0.000000,0.707107 +6538,0.707107,0.000000,0.000000,0.707107 +6539,0.707107,0.000000,0.000000,0.707107 +6540,0.707107,0.000000,0.000000,0.707107 +6541,0.707107,0.000000,0.000000,0.707107 +6542,0.707107,0.000000,0.000000,0.707107 +6543,0.707107,0.000000,0.000000,0.707107 +6544,0.707107,0.000000,0.000000,0.707107 +6545,0.707107,0.000000,0.000000,0.707107 +6546,0.707107,0.000000,0.000000,0.707107 +6547,0.707107,0.000000,0.000000,0.707107 +6548,0.707107,0.000000,0.000000,0.707107 +6549,0.707107,0.000000,0.000000,0.707107 +6550,0.707107,0.000000,0.000000,0.707107 +6551,0.707107,0.000000,0.000000,0.707107 +6552,0.707107,0.000000,0.000000,0.707107 +6553,0.707107,0.000000,0.000000,0.707107 +6554,0.707107,0.000000,0.000000,0.707107 +6555,0.707107,0.000000,0.000000,0.707107 +6556,0.707107,0.000000,0.000000,0.707107 +6557,0.707107,0.000000,0.000000,0.707107 +6558,0.707107,0.000000,0.000000,0.707107 +6559,0.707107,0.000000,0.000000,0.707107 +6560,0.707107,0.000000,0.000000,0.707107 +6561,0.707107,0.000000,0.000000,0.707107 +6562,0.707107,0.000000,0.000000,0.707107 +6563,0.707107,0.000000,0.000000,0.707107 +6564,0.707107,0.000000,0.000000,0.707107 +6565,0.707107,0.000000,0.000000,0.707107 +6566,0.707107,0.000000,0.000000,0.707107 +6567,0.707107,0.000000,0.000000,0.707107 +6568,0.707107,0.000000,0.000000,0.707107 +6569,0.707107,0.000000,0.000000,0.707107 +6570,0.707107,0.000000,0.000000,0.707107 +6571,0.707107,0.000000,0.000000,0.707107 +6572,0.707107,0.000000,0.000000,0.707107 +6573,0.707107,0.000000,0.000000,0.707107 +6574,0.707107,0.000000,0.000000,0.707107 +6575,0.707107,0.000000,0.000000,0.707107 +6576,0.707107,0.000000,0.000000,0.707107 +6577,0.707107,0.000000,0.000000,0.707107 +6578,0.707107,0.000000,0.000000,0.707107 +6579,0.707107,0.000000,0.000000,0.707107 +6580,0.707107,0.000000,0.000000,0.707107 +6581,0.707107,0.000000,0.000000,0.707107 +6582,0.707107,0.000000,0.000000,0.707107 +6583,0.707107,0.000000,0.000000,0.707107 +6584,0.707107,0.000000,0.000000,0.707107 +6585,0.707107,0.000000,0.000000,0.707107 +6586,0.707107,0.000000,0.000000,0.707107 +6587,0.707107,0.000000,0.000000,0.707107 +6588,0.707107,0.000000,0.000000,0.707107 +6589,0.707107,0.000000,0.000000,0.707107 +6590,0.707107,0.000000,0.000000,0.707107 +6591,0.707107,0.000000,0.000000,0.707107 +6592,0.707107,0.000000,0.000000,0.707107 +6593,0.707107,0.000000,0.000000,0.707107 +6594,0.707107,0.000000,0.000000,0.707107 +6595,0.707107,0.000000,0.000000,0.707107 +6596,0.707107,0.000000,0.000000,0.707107 +6597,0.707107,0.000000,0.000000,0.707107 +6598,0.707107,0.000000,0.000000,0.707107 +6599,0.707107,0.000000,0.000000,0.707107 +6600,0.707107,0.000000,0.000000,0.707107 +6601,0.707107,0.000000,0.000000,0.707107 +6602,0.707107,0.000000,0.000000,0.707107 +6603,0.707107,0.000000,0.000000,0.707107 +6604,0.707107,0.000000,0.000000,0.707107 +6605,0.707107,0.000000,0.000000,0.707107 +6606,0.707107,0.000000,0.000000,0.707107 +6607,0.707107,0.000000,0.000000,0.707107 +6608,0.707107,0.000000,0.000000,0.707107 +6609,0.707107,0.000000,0.000000,0.707107 +6610,0.707107,0.000000,0.000000,0.707107 +6611,0.707107,0.000000,0.000000,0.707107 +6612,0.707107,0.000000,0.000000,0.707107 +6613,0.707107,0.000000,0.000000,0.707107 +6614,0.707107,0.000000,0.000000,0.707107 +6615,0.707107,0.000000,0.000000,0.707107 +6616,0.707107,0.000000,0.000000,0.707107 +6617,0.707107,0.000000,0.000000,0.707107 +6618,0.707107,0.000000,0.000000,0.707107 +6619,0.707107,0.000000,0.000000,0.707107 +6620,0.707107,0.000000,0.000000,0.707107 +6621,0.707107,0.000000,0.000000,0.707107 +6622,0.707107,0.000000,0.000000,0.707107 +6623,0.707107,0.000000,0.000000,0.707107 +6624,0.707107,0.000000,0.000000,0.707107 +6625,0.707107,0.000000,0.000000,0.707107 +6626,0.707107,0.000000,0.000000,0.707107 +6627,0.707107,0.000000,0.000000,0.707107 +6628,0.707107,0.000000,0.000000,0.707107 +6629,0.707107,0.000000,0.000000,0.707107 +6630,0.707107,0.000000,0.000000,0.707107 +6631,0.707107,0.000000,0.000000,0.707107 +6632,0.707107,0.000000,0.000000,0.707107 +6633,0.707107,0.000000,0.000000,0.707107 +6634,0.707107,0.000000,0.000000,0.707107 +6635,0.707107,0.000000,0.000000,0.707107 +6636,0.707107,0.000000,0.000000,0.707107 +6637,0.707107,0.000000,0.000000,0.707107 +6638,0.707107,0.000000,0.000000,0.707107 +6639,0.707107,0.000000,0.000000,0.707107 +6640,0.707107,0.000000,0.000000,0.707107 +6641,0.707107,0.000000,0.000000,0.707107 +6642,0.707107,0.000000,0.000000,0.707107 +6643,0.707107,0.000000,0.000000,0.707107 +6644,0.707107,0.000000,0.000000,0.707107 +6645,0.707107,0.000000,0.000000,0.707107 +6646,0.707107,0.000000,0.000000,0.707107 +6647,0.707107,0.000000,0.000000,0.707107 +6648,0.707107,0.000000,0.000000,0.707107 +6649,0.707107,0.000000,0.000000,0.707107 +6650,0.707107,0.000000,0.000000,0.707107 +6651,0.707107,0.000000,0.000000,0.707107 +6652,0.707107,0.000000,0.000000,0.707107 +6653,0.707107,0.000000,0.000000,0.707107 +6654,0.707107,0.000000,0.000000,0.707107 +6655,0.707107,0.000000,0.000000,0.707107 +6656,0.707107,0.000000,0.000000,0.707107 +6657,0.707107,0.000000,0.000000,0.707107 +6658,0.707107,0.000000,0.000000,0.707107 +6659,0.707107,0.000000,0.000000,0.707107 +6660,0.707107,0.000000,0.000000,0.707107 +6661,0.707107,0.000000,0.000000,0.707107 +6662,0.707107,0.000000,0.000000,0.707107 +6663,0.707107,0.000000,0.000000,0.707107 +6664,0.707107,0.000000,0.000000,0.707107 +6665,0.707107,0.000000,0.000000,0.707107 +6666,0.707107,0.000000,0.000000,0.707107 +6667,0.707107,0.000000,0.000000,0.707107 +6668,0.707107,0.000000,0.000000,0.707107 +6669,0.707107,0.000000,0.000000,0.707107 +6670,0.707107,0.000000,0.000000,0.707107 +6671,0.707107,0.000000,0.000000,0.707107 +6672,0.707107,0.000000,0.000000,0.707107 +6673,0.707107,0.000000,0.000000,0.707107 +6674,0.707107,0.000000,0.000000,0.707107 +6675,0.707107,0.000000,0.000000,0.707107 +6676,0.707107,0.000000,0.000000,0.707107 +6677,0.707107,0.000000,0.000000,0.707107 +6678,0.707107,0.000000,0.000000,0.707107 +6679,0.707107,0.000000,0.000000,0.707107 +6680,0.707107,0.000000,0.000000,0.707107 +6681,0.707107,0.000000,0.000000,0.707107 +6682,0.707107,0.000000,0.000000,0.707107 +6683,0.707107,0.000000,0.000000,0.707107 +6684,0.707107,0.000000,0.000000,0.707107 +6685,0.707107,0.000000,0.000000,0.707107 +6686,0.707107,0.000000,0.000000,0.707107 +6687,0.707107,0.000000,0.000000,0.707107 +6688,0.707107,0.000000,0.000000,0.707107 +6689,0.707107,0.000000,0.000000,0.707107 +6690,0.707107,0.000000,0.000000,0.707107 +6691,0.707107,0.000000,0.000000,0.707107 +6692,0.707107,0.000000,0.000000,0.707107 +6693,0.707107,0.000000,0.000000,0.707107 +6694,0.707107,0.000000,0.000000,0.707107 +6695,0.707107,0.000000,0.000000,0.707107 +6696,0.707107,0.000000,0.000000,0.707107 +6697,0.707107,0.000000,0.000000,0.707107 +6698,0.707107,0.000000,0.000000,0.707107 +6699,0.707107,0.000000,0.000000,0.707107 +6700,0.707107,0.000000,0.000000,0.707107 +6701,0.707107,0.000000,0.000000,0.707107 +6702,0.707107,0.000000,0.000000,0.707107 +6703,0.707107,0.000000,0.000000,0.707107 +6704,0.707107,0.000000,0.000000,0.707107 +6705,0.707107,0.000000,0.000000,0.707107 +6706,0.707107,0.000000,0.000000,0.707107 +6707,0.707107,0.000000,0.000000,0.707107 +6708,0.707107,0.000000,0.000000,0.707107 +6709,0.707107,0.000000,0.000000,0.707107 +6710,0.707107,0.000000,0.000000,0.707107 +6711,0.707107,0.000000,0.000000,0.707107 +6712,0.707107,0.000000,0.000000,0.707107 +6713,0.707107,0.000000,0.000000,0.707107 +6714,0.707107,0.000000,0.000000,0.707107 +6715,0.707107,0.000000,0.000000,0.707107 +6716,0.707107,0.000000,0.000000,0.707107 +6717,0.707107,0.000000,0.000000,0.707107 +6718,0.707107,0.000000,0.000000,0.707107 +6719,0.707107,0.000000,0.000000,0.707107 +6720,0.707107,0.000000,0.000000,0.707107 +6721,0.707107,0.000000,0.000000,0.707107 +6722,0.707107,0.000000,0.000000,0.707107 +6723,0.707107,0.000000,0.000000,0.707107 +6724,0.707107,0.000000,0.000000,0.707107 +6725,0.707107,0.000000,0.000000,0.707107 +6726,0.707107,0.000000,0.000000,0.707107 +6727,0.707107,0.000000,0.000000,0.707107 +6728,0.707107,0.000000,0.000000,0.707107 +6729,0.707107,0.000000,0.000000,0.707107 +6730,0.707107,0.000000,0.000000,0.707107 +6731,0.707107,0.000000,0.000000,0.707107 +6732,0.707107,0.000000,0.000000,0.707107 +6733,0.707107,0.000000,0.000000,0.707107 +6734,0.707107,0.000000,0.000000,0.707107 +6735,0.707107,0.000000,0.000000,0.707107 +6736,0.707107,0.000000,0.000000,0.707107 +6737,0.707107,0.000000,0.000000,0.707107 +6738,0.707107,0.000000,0.000000,0.707107 +6739,0.707107,0.000000,0.000000,0.707107 +6740,0.707107,0.000000,0.000000,0.707107 +6741,0.707107,0.000000,0.000000,0.707107 +6742,0.707107,0.000000,0.000000,0.707107 +6743,0.707107,0.000000,0.000000,0.707107 +6744,0.707107,0.000000,0.000000,0.707107 +6745,0.707107,0.000000,0.000000,0.707107 +6746,0.707107,0.000000,0.000000,0.707107 +6747,0.707107,0.000000,0.000000,0.707107 +6748,0.707107,0.000000,0.000000,0.707107 +6749,0.707107,0.000000,0.000000,0.707107 +6750,0.707107,0.000000,0.000000,0.707107 +6751,0.707107,0.000000,0.000000,0.707107 +6752,0.707107,0.000000,0.000000,0.707107 +6753,0.707107,0.000000,0.000000,0.707107 +6754,0.707107,0.000000,0.000000,0.707107 +6755,0.707107,0.000000,0.000000,0.707107 +6756,0.707107,0.000000,0.000000,0.707107 +6757,0.707107,0.000000,0.000000,0.707107 +6758,0.707107,0.000000,0.000000,0.707107 +6759,0.707107,0.000000,0.000000,0.707107 +6760,0.707107,0.000000,0.000000,0.707107 +6761,0.707107,0.000000,0.000000,0.707107 +6762,0.707107,0.000000,0.000000,0.707107 +6763,0.707107,0.000000,0.000000,0.707107 +6764,0.707107,0.000000,0.000000,0.707107 +6765,0.707107,0.000000,0.000000,0.707107 +6766,0.707107,0.000000,0.000000,0.707107 +6767,0.707107,0.000000,0.000000,0.707107 +6768,0.707107,0.000000,0.000000,0.707107 +6769,0.707107,0.000000,0.000000,0.707107 +6770,0.707107,0.000000,0.000000,0.707107 +6771,0.707107,0.000000,0.000000,0.707107 +6772,0.707107,0.000000,0.000000,0.707107 +6773,0.707107,0.000000,0.000000,0.707107 +6774,0.707107,0.000000,0.000000,0.707107 +6775,0.707107,0.000000,0.000000,0.707107 +6776,0.707107,0.000000,0.000000,0.707107 +6777,0.707107,0.000000,0.000000,0.707107 +6778,0.707107,0.000000,0.000000,0.707107 +6779,0.707107,0.000000,0.000000,0.707107 +6780,0.707107,0.000000,0.000000,0.707107 +6781,0.707107,0.000000,0.000000,0.707107 +6782,0.707107,0.000000,0.000000,0.707107 +6783,0.707107,0.000000,0.000000,0.707107 +6784,0.707107,0.000000,0.000000,0.707107 +6785,0.707107,0.000000,0.000000,0.707107 +6786,0.707107,0.000000,0.000000,0.707107 +6787,0.707107,0.000000,0.000000,0.707107 +6788,0.707107,0.000000,0.000000,0.707107 +6789,0.707107,0.000000,0.000000,0.707107 +6790,0.707107,0.000000,0.000000,0.707107 +6791,0.707107,0.000000,0.000000,0.707107 +6792,0.707107,0.000000,0.000000,0.707107 +6793,0.707107,0.000000,0.000000,0.707107 +6794,0.707107,0.000000,0.000000,0.707107 +6795,0.707107,0.000000,0.000000,0.707107 +6796,0.707107,0.000000,0.000000,0.707107 +6797,0.707107,0.000000,0.000000,0.707107 +6798,0.707107,0.000000,0.000000,0.707107 +6799,0.707107,0.000000,0.000000,0.707107 +6800,0.707107,0.000000,0.000000,0.707107 +6801,0.707107,0.000000,0.000000,0.707107 +6802,0.707107,0.000000,0.000000,0.707107 +6803,0.707107,0.000000,0.000000,0.707107 +6804,0.707107,0.000000,0.000000,0.707107 +6805,0.707107,0.000000,0.000000,0.707107 +6806,0.707107,0.000000,0.000000,0.707107 +6807,0.707107,0.000000,0.000000,0.707107 +6808,0.707107,0.000000,0.000000,0.707107 +6809,0.707107,0.000000,0.000000,0.707107 +6810,0.707107,0.000000,0.000000,0.707107 +6811,0.707107,0.000000,0.000000,0.707107 +6812,0.707107,0.000000,0.000000,0.707107 +6813,0.707107,0.000000,0.000000,0.707107 +6814,0.707107,0.000000,0.000000,0.707107 +6815,0.707107,0.000000,0.000000,0.707107 +6816,0.707107,0.000000,0.000000,0.707107 +6817,0.707107,0.000000,0.000000,0.707107 +6818,0.707107,0.000000,0.000000,0.707107 +6819,0.707107,0.000000,0.000000,0.707107 +6820,0.707107,0.000000,0.000000,0.707107 +6821,0.707107,0.000000,0.000000,0.707107 +6822,0.707107,0.000000,0.000000,0.707107 +6823,0.707107,0.000000,0.000000,0.707107 +6824,0.707107,0.000000,0.000000,0.707107 +6825,0.707107,0.000000,0.000000,0.707107 +6826,0.707107,0.000000,0.000000,0.707107 +6827,0.707107,0.000000,0.000000,0.707107 +6828,0.707107,0.000000,0.000000,0.707107 +6829,0.707107,0.000000,0.000000,0.707107 +6830,0.707107,0.000000,0.000000,0.707107 +6831,0.707107,0.000000,0.000000,0.707107 +6832,0.707107,0.000000,0.000000,0.707107 +6833,0.707107,0.000000,0.000000,0.707107 +6834,0.707107,0.000000,0.000000,0.707107 +6835,0.707107,0.000000,0.000000,0.707107 +6836,0.707107,0.000000,0.000000,0.707107 +6837,0.707107,0.000000,0.000000,0.707107 +6838,0.707107,0.000000,0.000000,0.707107 +6839,0.707107,0.000000,0.000000,0.707107 +6840,0.707107,0.000000,0.000000,0.707107 +6841,0.707107,0.000000,0.000000,0.707107 +6842,0.707107,0.000000,0.000000,0.707107 +6843,0.707107,0.000000,0.000000,0.707107 +6844,0.707107,0.000000,0.000000,0.707107 +6845,0.707107,0.000000,0.000000,0.707107 +6846,0.707107,0.000000,0.000000,0.707107 +6847,0.707107,0.000000,0.000000,0.707107 +6848,0.707107,0.000000,0.000000,0.707107 +6849,0.707107,0.000000,0.000000,0.707107 +6850,0.707107,0.000000,0.000000,0.707107 +6851,0.707107,0.000000,0.000000,0.707107 +6852,0.707107,0.000000,0.000000,0.707107 +6853,0.707107,0.000000,0.000000,0.707107 +6854,0.707107,0.000000,0.000000,0.707107 +6855,0.707107,0.000000,0.000000,0.707107 +6856,0.707107,0.000000,0.000000,0.707107 +6857,0.707107,0.000000,0.000000,0.707107 +6858,0.707107,0.000000,0.000000,0.707107 +6859,0.707107,0.000000,0.000000,0.707107 +6860,0.707107,0.000000,0.000000,0.707107 +6861,0.707107,0.000000,0.000000,0.707107 +6862,0.707107,0.000000,0.000000,0.707107 +6863,0.707107,0.000000,0.000000,0.707107 +6864,0.707107,0.000000,0.000000,0.707107 +6865,0.707107,0.000000,0.000000,0.707107 +6866,0.707107,0.000000,0.000000,0.707107 +6867,0.707107,0.000000,0.000000,0.707107 +6868,0.707107,0.000000,0.000000,0.707107 +6869,0.707107,0.000000,0.000000,0.707107 +6870,0.707107,0.000000,0.000000,0.707107 +6871,0.707107,0.000000,0.000000,0.707107 +6872,0.707107,0.000000,0.000000,0.707107 +6873,0.707107,0.000000,0.000000,0.707107 +6874,0.707107,0.000000,0.000000,0.707107 +6875,0.707107,0.000000,0.000000,0.707107 +6876,0.707107,0.000000,0.000000,0.707107 +6877,0.707107,0.000000,0.000000,0.707107 +6878,0.707107,0.000000,0.000000,0.707107 +6879,0.707107,0.000000,0.000000,0.707107 +6880,0.707107,0.000000,0.000000,0.707107 +6881,0.707107,0.000000,0.000000,0.707107 +6882,0.707107,0.000000,0.000000,0.707107 +6883,0.707107,0.000000,0.000000,0.707107 +6884,0.707107,0.000000,0.000000,0.707107 +6885,0.707107,0.000000,0.000000,0.707107 +6886,0.707107,0.000000,0.000000,0.707107 +6887,0.707107,0.000000,0.000000,0.707107 +6888,0.707107,0.000000,0.000000,0.707107 +6889,0.707107,0.000000,0.000000,0.707107 +6890,0.707107,0.000000,0.000000,0.707107 +6891,0.707107,0.000000,0.000000,0.707107 +6892,0.707107,0.000000,0.000000,0.707107 +6893,0.707107,0.000000,0.000000,0.707107 +6894,0.707107,0.000000,0.000000,0.707107 +6895,0.707107,0.000000,0.000000,0.707107 +6896,0.707107,0.000000,0.000000,0.707107 +6897,0.707107,0.000000,0.000000,0.707107 +6898,0.707107,0.000000,0.000000,0.707107 +6899,0.707107,0.000000,0.000000,0.707107 +6900,0.707107,0.000000,0.000000,0.707107 +6901,0.707107,0.000000,0.000000,0.707107 +6902,0.707107,0.000000,0.000000,0.707107 +6903,0.707107,0.000000,0.000000,0.707107 +6904,0.707107,0.000000,0.000000,0.707107 +6905,0.707107,0.000000,0.000000,0.707107 +6906,0.707107,0.000000,0.000000,0.707107 +6907,0.707107,0.000000,0.000000,0.707107 +6908,0.707107,0.000000,0.000000,0.707107 +6909,0.707107,0.000000,0.000000,0.707107 +6910,0.707107,0.000000,0.000000,0.707107 +6911,0.707107,0.000000,0.000000,0.707107 +6912,0.707107,0.000000,0.000000,0.707107 +6913,0.707107,0.000000,0.000000,0.707107 +6914,0.707107,0.000000,0.000000,0.707107 +6915,0.707107,0.000000,0.000000,0.707107 +6916,0.707107,0.000000,0.000000,0.707107 +6917,0.707107,0.000000,0.000000,0.707107 +6918,0.707107,0.000000,0.000000,0.707107 +6919,0.707107,0.000000,0.000000,0.707107 +6920,0.707107,0.000000,0.000000,0.707107 +6921,0.707107,0.000000,0.000000,0.707107 +6922,0.707107,0.000000,0.000000,0.707107 +6923,0.707107,0.000000,0.000000,0.707107 +6924,0.707107,0.000000,0.000000,0.707107 +6925,0.707107,0.000000,0.000000,0.707107 +6926,0.707107,0.000000,0.000000,0.707107 +6927,0.707107,0.000000,0.000000,0.707107 +6928,0.707107,0.000000,0.000000,0.707107 +6929,0.707107,0.000000,0.000000,0.707107 +6930,0.707107,0.000000,0.000000,0.707107 +6931,0.707107,0.000000,0.000000,0.707107 +6932,0.707107,0.000000,0.000000,0.707107 +6933,0.707107,0.000000,0.000000,0.707107 +6934,0.707107,0.000000,0.000000,0.707107 +6935,0.707107,0.000000,0.000000,0.707107 +6936,0.707107,0.000000,0.000000,0.707107 +6937,0.707107,0.000000,0.000000,0.707107 +6938,0.707107,0.000000,0.000000,0.707107 +6939,0.707107,0.000000,0.000000,0.707107 +6940,0.707107,0.000000,0.000000,0.707107 +6941,0.707107,0.000000,0.000000,0.707107 +6942,0.707107,0.000000,0.000000,0.707107 +6943,0.707107,0.000000,0.000000,0.707107 +6944,0.707107,0.000000,0.000000,0.707107 +6945,0.707107,0.000000,0.000000,0.707107 +6946,0.707107,0.000000,0.000000,0.707107 +6947,0.707107,0.000000,0.000000,0.707107 +6948,0.707107,0.000000,0.000000,0.707107 +6949,0.707107,0.000000,0.000000,0.707107 +6950,0.707107,0.000000,0.000000,0.707107 +6951,0.707107,0.000000,0.000000,0.707107 +6952,0.707107,0.000000,0.000000,0.707107 +6953,0.707107,0.000000,0.000000,0.707107 +6954,0.707107,0.000000,0.000000,0.707107 +6955,0.707107,0.000000,0.000000,0.707107 +6956,0.707107,0.000000,0.000000,0.707107 +6957,0.707107,0.000000,0.000000,0.707107 +6958,0.707107,0.000000,0.000000,0.707107 +6959,0.707107,0.000000,0.000000,0.707107 +6960,0.707107,0.000000,0.000000,0.707107 +6961,0.707107,0.000000,0.000000,0.707107 +6962,0.707107,0.000000,0.000000,0.707107 +6963,0.707107,0.000000,0.000000,0.707107 +6964,0.707107,0.000000,0.000000,0.707107 +6965,0.707107,0.000000,0.000000,0.707107 +6966,0.707107,0.000000,0.000000,0.707107 +6967,0.707107,0.000000,0.000000,0.707107 +6968,0.707107,0.000000,0.000000,0.707107 +6969,0.707107,0.000000,0.000000,0.707107 +6970,0.707107,0.000000,0.000000,0.707107 +6971,0.707107,0.000000,0.000000,0.707107 +6972,0.707107,0.000000,0.000000,0.707107 +6973,0.707107,0.000000,0.000000,0.707107 +6974,0.707107,0.000000,0.000000,0.707107 +6975,0.707107,0.000000,0.000000,0.707107 +6976,0.707107,0.000000,0.000000,0.707107 +6977,0.707107,0.000000,0.000000,0.707107 +6978,0.707107,0.000000,0.000000,0.707107 +6979,0.707107,0.000000,0.000000,0.707107 +6980,0.707107,0.000000,0.000000,0.707107 +6981,0.707107,0.000000,0.000000,0.707107 +6982,0.707107,0.000000,0.000000,0.707107 +6983,0.707107,0.000000,0.000000,0.707107 +6984,0.707107,0.000000,0.000000,0.707107 +6985,0.707107,0.000000,0.000000,0.707107 +6986,0.707107,0.000000,0.000000,0.707107 +6987,0.707107,0.000000,0.000000,0.707107 +6988,0.707107,0.000000,0.000000,0.707107 +6989,0.707107,0.000000,0.000000,0.707107 +6990,0.707107,0.000000,0.000000,0.707107 +6991,0.707107,0.000000,0.000000,0.707107 +6992,0.707107,0.000000,0.000000,0.707107 +6993,0.707107,0.000000,0.000000,0.707107 +6994,0.707107,0.000000,0.000000,0.707107 +6995,0.707107,0.000000,0.000000,0.707107 +6996,0.707107,0.000000,0.000000,0.707107 +6997,0.707107,0.000000,0.000000,0.707107 +6998,0.707107,0.000000,0.000000,0.707107 +6999,0.707107,0.000000,0.000000,0.707107 +7000,0.707107,0.000000,0.000000,0.707107 +7001,0.707107,0.000000,0.000000,0.707107 +7002,0.707107,0.000000,0.000000,0.707107 +7003,0.707107,0.000000,0.000000,0.707107 +7004,0.707107,0.000000,0.000000,0.707107 +7005,0.707107,0.000000,0.000000,0.707107 +7006,0.707107,0.000000,0.000000,0.707107 +7007,0.707107,0.000000,0.000000,0.707107 +7008,0.707107,0.000000,0.000000,0.707107 +7009,0.707107,0.000000,0.000000,0.707107 +7010,0.707107,0.000000,0.000000,0.707107 +7011,0.707107,0.000000,0.000000,0.707107 +7012,0.707107,0.000000,0.000000,0.707107 +7013,0.707107,0.000000,0.000000,0.707107 +7014,0.707107,0.000000,0.000000,0.707107 +7015,0.707107,0.000000,0.000000,0.707107 +7016,0.707107,0.000000,0.000000,0.707107 +7017,0.707107,0.000000,0.000000,0.707107 +7018,0.707107,0.000000,0.000000,0.707107 +7019,0.707107,0.000000,0.000000,0.707107 +7020,0.707107,0.000000,0.000000,0.707107 +7021,0.707107,0.000000,0.000000,0.707107 +7022,0.707107,0.000000,0.000000,0.707107 +7023,0.707107,0.000000,0.000000,0.707107 +7024,0.707107,0.000000,0.000000,0.707107 +7025,0.707107,0.000000,0.000000,0.707107 +7026,0.707107,0.000000,0.000000,0.707107 +7027,0.707107,0.000000,0.000000,0.707107 +7028,0.707107,0.000000,0.000000,0.707107 +7029,0.707107,0.000000,0.000000,0.707107 +7030,0.707107,0.000000,0.000000,0.707107 +7031,0.707107,0.000000,0.000000,0.707107 +7032,0.707107,0.000000,0.000000,0.707107 +7033,0.707107,0.000000,0.000000,0.707107 +7034,0.707107,0.000000,0.000000,0.707107 +7035,0.707107,0.000000,0.000000,0.707107 +7036,0.707107,0.000000,0.000000,0.707107 +7037,0.707107,0.000000,0.000000,0.707107 +7038,0.707107,0.000000,0.000000,0.707107 +7039,0.707107,0.000000,0.000000,0.707107 +7040,0.707107,0.000000,0.000000,0.707107 +7041,0.707107,0.000000,0.000000,0.707107 +7042,0.707107,0.000000,0.000000,0.707107 +7043,0.707107,0.000000,0.000000,0.707107 +7044,0.707107,0.000000,0.000000,0.707107 +7045,0.707107,0.000000,0.000000,0.707107 +7046,0.707107,0.000000,0.000000,0.707107 +7047,0.707107,0.000000,0.000000,0.707107 +7048,0.707107,0.000000,0.000000,0.707107 +7049,0.707107,0.000000,0.000000,0.707107 +7050,0.707107,0.000000,0.000000,0.707107 +7051,0.707107,0.000000,0.000000,0.707107 +7052,0.707107,0.000000,0.000000,0.707107 +7053,0.707107,0.000000,0.000000,0.707107 +7054,0.707107,0.000000,0.000000,0.707107 +7055,0.707107,0.000000,0.000000,0.707107 +7056,0.707107,0.000000,0.000000,0.707107 +7057,0.707107,0.000000,0.000000,0.707107 +7058,0.707107,0.000000,0.000000,0.707107 +7059,0.707107,0.000000,0.000000,0.707107 +7060,0.707107,0.000000,0.000000,0.707107 +7061,0.707107,0.000000,0.000000,0.707107 +7062,0.707107,0.000000,0.000000,0.707107 +7063,0.707107,0.000000,0.000000,0.707107 +7064,0.707107,0.000000,0.000000,0.707107 +7065,0.707107,0.000000,0.000000,0.707107 +7066,0.707107,0.000000,0.000000,0.707107 +7067,0.707107,0.000000,0.000000,0.707107 +7068,0.707107,0.000000,0.000000,0.707107 +7069,0.707107,0.000000,0.000000,0.707107 +7070,0.707107,0.000000,0.000000,0.707107 +7071,0.707107,0.000000,0.000000,0.707107 +7072,0.707107,0.000000,0.000000,0.707107 +7073,0.707107,0.000000,0.000000,0.707107 +7074,0.707107,0.000000,0.000000,0.707107 +7075,0.707107,0.000000,0.000000,0.707107 +7076,0.707107,0.000000,0.000000,0.707107 +7077,0.707107,0.000000,0.000000,0.707107 +7078,0.707107,0.000000,0.000000,0.707107 +7079,0.707107,0.000000,0.000000,0.707107 +7080,0.707107,0.000000,0.000000,0.707107 +7081,0.707107,0.000000,0.000000,0.707107 +7082,0.707107,0.000000,0.000000,0.707107 +7083,0.707107,0.000000,0.000000,0.707107 +7084,0.707107,0.000000,0.000000,0.707107 +7085,0.707107,0.000000,0.000000,0.707107 +7086,0.707107,0.000000,0.000000,0.707107 +7087,0.707107,0.000000,0.000000,0.707107 +7088,0.707107,0.000000,0.000000,0.707107 +7089,0.707107,0.000000,0.000000,0.707107 +7090,0.707107,0.000000,0.000000,0.707107 +7091,0.707107,0.000000,0.000000,0.707107 +7092,0.707107,0.000000,0.000000,0.707107 +7093,0.707107,0.000000,0.000000,0.707107 +7094,0.707107,0.000000,0.000000,0.707107 +7095,0.707107,0.000000,0.000000,0.707107 +7096,0.707107,0.000000,0.000000,0.707107 +7097,0.707107,0.000000,0.000000,0.707107 +7098,0.707107,0.000000,0.000000,0.707107 +7099,0.707107,0.000000,0.000000,0.707107 +7100,0.707107,0.000000,0.000000,0.707107 +7101,0.707107,0.000000,0.000000,0.707107 +7102,0.707107,0.000000,0.000000,0.707107 +7103,0.707107,0.000000,0.000000,0.707107 +7104,0.707107,0.000000,0.000000,0.707107 +7105,0.707107,0.000000,0.000000,0.707107 +7106,0.707107,0.000000,0.000000,0.707107 +7107,0.707107,0.000000,0.000000,0.707107 +7108,0.707107,0.000000,0.000000,0.707107 +7109,0.707107,0.000000,0.000000,0.707107 +7110,0.707107,0.000000,0.000000,0.707107 +7111,0.707107,0.000000,0.000000,0.707107 +7112,0.707107,0.000000,0.000000,0.707107 +7113,0.707107,0.000000,0.000000,0.707107 +7114,0.707107,0.000000,0.000000,0.707107 +7115,0.707107,0.000000,0.000000,0.707107 +7116,0.707107,0.000000,0.000000,0.707107 +7117,0.707107,0.000000,0.000000,0.707107 +7118,0.707107,0.000000,0.000000,0.707107 +7119,0.707107,0.000000,0.000000,0.707107 +7120,0.707107,0.000000,0.000000,0.707107 +7121,0.707107,0.000000,0.000000,0.707107 +7122,0.707107,0.000000,0.000000,0.707107 +7123,0.707107,0.000000,0.000000,0.707107 +7124,0.707107,0.000000,0.000000,0.707107 +7125,0.707107,0.000000,0.000000,0.707107 +7126,0.707107,0.000000,0.000000,0.707107 +7127,0.707107,0.000000,0.000000,0.707107 +7128,0.707107,0.000000,0.000000,0.707107 +7129,0.707107,0.000000,0.000000,0.707107 +7130,0.707107,0.000000,0.000000,0.707107 +7131,0.707107,0.000000,0.000000,0.707107 +7132,0.707107,0.000000,0.000000,0.707107 +7133,0.707107,0.000000,0.000000,0.707107 +7134,0.707107,0.000000,0.000000,0.707107 +7135,0.707107,0.000000,0.000000,0.707107 +7136,0.707107,0.000000,0.000000,0.707107 +7137,0.707107,0.000000,0.000000,0.707107 +7138,0.707107,0.000000,0.000000,0.707107 +7139,0.707107,0.000000,0.000000,0.707107 +7140,0.707107,0.000000,0.000000,0.707107 +7141,0.707107,0.000000,0.000000,0.707107 +7142,0.707107,0.000000,0.000000,0.707107 +7143,0.707107,0.000000,0.000000,0.707107 +7144,0.707107,0.000000,0.000000,0.707107 +7145,0.707107,0.000000,0.000000,0.707107 +7146,0.707107,0.000000,0.000000,0.707107 +7147,0.707107,0.000000,0.000000,0.707107 +7148,0.707107,0.000000,0.000000,0.707107 +7149,0.707107,0.000000,0.000000,0.707107 +7150,0.707107,0.000000,0.000000,0.707107 +7151,0.707107,0.000000,0.000000,0.707107 +7152,0.707107,0.000000,0.000000,0.707107 +7153,0.707107,0.000000,0.000000,0.707107 +7154,0.707107,0.000000,0.000000,0.707107 +7155,0.707107,0.000000,0.000000,0.707107 +7156,0.707107,0.000000,0.000000,0.707107 +7157,0.707107,0.000000,0.000000,0.707107 +7158,0.707107,0.000000,0.000000,0.707107 +7159,0.707107,0.000000,0.000000,0.707107 +7160,0.707107,0.000000,0.000000,0.707107 +7161,0.707107,0.000000,0.000000,0.707107 +7162,0.707107,0.000000,0.000000,0.707107 +7163,0.707107,0.000000,0.000000,0.707107 +7164,0.707107,0.000000,0.000000,0.707107 +7165,0.707107,0.000000,0.000000,0.707107 +7166,0.707107,0.000000,0.000000,0.707107 +7167,0.707107,0.000000,0.000000,0.707107 +7168,0.707107,0.000000,0.000000,0.707107 +7169,0.707107,0.000000,0.000000,0.707107 +7170,0.707107,0.000000,0.000000,0.707107 +7171,0.707107,0.000000,0.000000,0.707107 +7172,0.707107,0.000000,0.000000,0.707107 +7173,0.707107,0.000000,0.000000,0.707107 +7174,0.707107,0.000000,0.000000,0.707107 +7175,0.707107,0.000000,0.000000,0.707107 +7176,0.707107,0.000000,0.000000,0.707107 +7177,0.707107,0.000000,0.000000,0.707107 +7178,0.707107,0.000000,0.000000,0.707107 +7179,0.707107,0.000000,0.000000,0.707107 +7180,0.707107,0.000000,0.000000,0.707107 +7181,0.707107,0.000000,0.000000,0.707107 +7182,0.707107,0.000000,0.000000,0.707107 +7183,0.707107,0.000000,0.000000,0.707107 +7184,0.707107,0.000000,0.000000,0.707107 +7185,0.707107,0.000000,0.000000,0.707107 +7186,0.707107,0.000000,0.000000,0.707107 +7187,0.707107,0.000000,0.000000,0.707107 +7188,0.707107,0.000000,0.000000,0.707107 +7189,0.707107,0.000000,0.000000,0.707107 +7190,0.707107,0.000000,0.000000,0.707107 +7191,0.707107,0.000000,0.000000,0.707107 +7192,0.707107,0.000000,0.000000,0.707107 +7193,0.707107,0.000000,0.000000,0.707107 +7194,0.707107,0.000000,0.000000,0.707107 +7195,0.707107,0.000000,0.000000,0.707107 +7196,0.707107,0.000000,0.000000,0.707107 +7197,0.707107,0.000000,0.000000,0.707107 +7198,0.707107,0.000000,0.000000,0.707107 +7199,0.707107,0.000000,0.000000,0.707107 +7200,0.707107,0.000000,0.000000,0.707107 +7201,0.707107,0.000000,0.000000,0.707107 +7202,0.707107,0.000000,0.000000,0.707107 +7203,0.707107,0.000000,0.000000,0.707107 +7204,0.707107,0.000000,0.000000,0.707107 +7205,0.707107,0.000000,0.000000,0.707107 +7206,0.707107,0.000000,0.000000,0.707107 +7207,0.707107,0.000000,0.000000,0.707107 +7208,0.707107,0.000000,0.000000,0.707107 +7209,0.707107,0.000000,0.000000,0.707107 +7210,0.707107,0.000000,0.000000,0.707107 +7211,0.707107,0.000000,0.000000,0.707107 +7212,0.707107,0.000000,0.000000,0.707107 +7213,0.707107,0.000000,0.000000,0.707107 +7214,0.707107,0.000000,0.000000,0.707107 +7215,0.707107,0.000000,0.000000,0.707107 +7216,0.707107,0.000000,0.000000,0.707107 +7217,0.707107,0.000000,0.000000,0.707107 +7218,0.707107,0.000000,0.000000,0.707107 +7219,0.707107,0.000000,0.000000,0.707107 +7220,0.707107,0.000000,0.000000,0.707107 +7221,0.707107,0.000000,0.000000,0.707107 +7222,0.707107,0.000000,0.000000,0.707107 +7223,0.707107,0.000000,0.000000,0.707107 +7224,0.707107,0.000000,0.000000,0.707107 +7225,0.707107,0.000000,0.000000,0.707107 +7226,0.707107,0.000000,0.000000,0.707107 +7227,0.707107,0.000000,0.000000,0.707107 +7228,0.707107,0.000000,0.000000,0.707107 +7229,0.707107,0.000000,0.000000,0.707107 +7230,0.707107,0.000000,0.000000,0.707107 +7231,0.707107,0.000000,0.000000,0.707107 +7232,0.707107,0.000000,0.000000,0.707107 +7233,0.707107,0.000000,0.000000,0.707107 +7234,0.707107,0.000000,0.000000,0.707107 +7235,0.707107,0.000000,0.000000,0.707107 +7236,0.707107,0.000000,0.000000,0.707107 +7237,0.707107,0.000000,0.000000,0.707107 +7238,0.707107,0.000000,0.000000,0.707107 +7239,0.707107,0.000000,0.000000,0.707107 +7240,0.707107,0.000000,0.000000,0.707107 +7241,0.707107,0.000000,0.000000,0.707107 +7242,0.707107,0.000000,0.000000,0.707107 +7243,0.707107,0.000000,0.000000,0.707107 +7244,0.707107,0.000000,0.000000,0.707107 +7245,0.707107,0.000000,0.000000,0.707107 +7246,0.707107,0.000000,0.000000,0.707107 +7247,0.707107,0.000000,0.000000,0.707107 +7248,0.707107,0.000000,0.000000,0.707107 +7249,0.707107,0.000000,0.000000,0.707107 +7250,0.707107,0.000000,0.000000,0.707107 +7251,0.707107,0.000000,0.000000,0.707107 +7252,0.707107,0.000000,0.000000,0.707107 +7253,0.707107,0.000000,0.000000,0.707107 +7254,0.707107,0.000000,0.000000,0.707107 +7255,0.707107,0.000000,0.000000,0.707107 +7256,0.707107,0.000000,0.000000,0.707107 +7257,0.707107,0.000000,0.000000,0.707107 +7258,0.707107,0.000000,0.000000,0.707107 +7259,0.707107,0.000000,0.000000,0.707107 +7260,0.707107,0.000000,0.000000,0.707107 +7261,0.707107,0.000000,0.000000,0.707107 +7262,0.707107,0.000000,0.000000,0.707107 +7263,0.707107,0.000000,0.000000,0.707107 +7264,0.707107,0.000000,0.000000,0.707107 +7265,0.707107,0.000000,0.000000,0.707107 +7266,0.707107,0.000000,0.000000,0.707107 +7267,0.707107,0.000000,0.000000,0.707107 +7268,0.707107,0.000000,0.000000,0.707107 +7269,0.707107,0.000000,0.000000,0.707107 +7270,0.707107,0.000000,0.000000,0.707107 +7271,0.707107,0.000000,0.000000,0.707107 +7272,0.707107,0.000000,0.000000,0.707107 +7273,0.707107,0.000000,0.000000,0.707107 +7274,0.707107,0.000000,0.000000,0.707107 +7275,0.707107,0.000000,0.000000,0.707107 +7276,0.707107,0.000000,0.000000,0.707107 +7277,0.707107,0.000000,0.000000,0.707107 +7278,0.707107,0.000000,0.000000,0.707107 +7279,0.707107,0.000000,0.000000,0.707107 +7280,0.707107,0.000000,0.000000,0.707107 +7281,0.707107,0.000000,0.000000,0.707107 +7282,0.707107,0.000000,0.000000,0.707107 +7283,0.707107,0.000000,0.000000,0.707107 +7284,0.707107,0.000000,0.000000,0.707107 +7285,0.707107,0.000000,0.000000,0.707107 +7286,0.707107,0.000000,0.000000,0.707107 +7287,0.707107,0.000000,0.000000,0.707107 +7288,0.707107,0.000000,0.000000,0.707107 +7289,0.707107,0.000000,0.000000,0.707107 +7290,0.707107,0.000000,0.000000,0.707107 +7291,0.707107,0.000000,0.000000,0.707107 +7292,0.707107,0.000000,0.000000,0.707107 +7293,0.707107,0.000000,0.000000,0.707107 +7294,0.707107,0.000000,0.000000,0.707107 +7295,0.707107,0.000000,0.000000,0.707107 +7296,0.707107,0.000000,0.000000,0.707107 +7297,0.707107,0.000000,0.000000,0.707107 +7298,0.707107,0.000000,0.000000,0.707107 +7299,0.707107,0.000000,0.000000,0.707107 +7300,0.707107,0.000000,0.000000,0.707107 +7301,0.707107,0.000000,0.000000,0.707107 +7302,0.707107,0.000000,0.000000,0.707107 +7303,0.707107,0.000000,0.000000,0.707107 +7304,0.707107,0.000000,0.000000,0.707107 +7305,0.707107,0.000000,0.000000,0.707107 +7306,0.707107,0.000000,0.000000,0.707107 +7307,0.707107,0.000000,0.000000,0.707107 +7308,0.707107,0.000000,0.000000,0.707107 +7309,0.707107,0.000000,0.000000,0.707107 +7310,0.707107,0.000000,0.000000,0.707107 +7311,0.707107,0.000000,0.000000,0.707107 +7312,0.707107,0.000000,0.000000,0.707107 +7313,0.707107,0.000000,0.000000,0.707107 +7314,0.707107,0.000000,0.000000,0.707107 +7315,0.707107,0.000000,0.000000,0.707107 +7316,0.707107,0.000000,0.000000,0.707107 +7317,0.707107,0.000000,0.000000,0.707107 +7318,0.707107,0.000000,0.000000,0.707107 +7319,0.707107,0.000000,0.000000,0.707107 +7320,0.707107,0.000000,0.000000,0.707107 +7321,0.707107,0.000000,0.000000,0.707107 +7322,0.707107,0.000000,0.000000,0.707107 +7323,0.707107,0.000000,0.000000,0.707107 +7324,0.707107,0.000000,0.000000,0.707107 +7325,0.707107,0.000000,0.000000,0.707107 +7326,0.707107,0.000000,0.000000,0.707107 +7327,0.707107,0.000000,0.000000,0.707107 +7328,0.707107,0.000000,0.000000,0.707107 +7329,0.707107,0.000000,0.000000,0.707107 +7330,0.707107,0.000000,0.000000,0.707107 +7331,0.707107,0.000000,0.000000,0.707107 +7332,0.707107,0.000000,0.000000,0.707107 +7333,0.707107,0.000000,0.000000,0.707107 +7334,0.707107,0.000000,0.000000,0.707107 +7335,0.707107,0.000000,0.000000,0.707107 +7336,0.707107,0.000000,0.000000,0.707107 +7337,0.707107,0.000000,0.000000,0.707107 +7338,0.707107,0.000000,0.000000,0.707107 +7339,0.707107,0.000000,0.000000,0.707107 +7340,0.707107,0.000000,0.000000,0.707107 +7341,0.707107,0.000000,0.000000,0.707107 +7342,0.707107,0.000000,0.000000,0.707107 +7343,0.707107,0.000000,0.000000,0.707107 +7344,0.707107,0.000000,0.000000,0.707107 +7345,0.707107,0.000000,0.000000,0.707107 +7346,0.707107,0.000000,0.000000,0.707107 +7347,0.707107,0.000000,0.000000,0.707107 +7348,0.707107,0.000000,0.000000,0.707107 +7349,0.707107,0.000000,0.000000,0.707107 +7350,0.707107,0.000000,0.000000,0.707107 +7351,0.707107,0.000000,0.000000,0.707107 +7352,0.707107,0.000000,0.000000,0.707107 +7353,0.707107,0.000000,0.000000,0.707107 +7354,0.707107,0.000000,0.000000,0.707107 +7355,0.707107,0.000000,0.000000,0.707107 +7356,0.707107,0.000000,0.000000,0.707107 +7357,0.707107,0.000000,0.000000,0.707107 +7358,0.707107,0.000000,0.000000,0.707107 +7359,0.707107,0.000000,0.000000,0.707107 +7360,0.707107,0.000000,0.000000,0.707107 +7361,0.707107,0.000000,0.000000,0.707107 +7362,0.707107,0.000000,0.000000,0.707107 +7363,0.707107,0.000000,0.000000,0.707107 +7364,0.707107,0.000000,0.000000,0.707107 +7365,0.707107,0.000000,0.000000,0.707107 +7366,0.707107,0.000000,0.000000,0.707107 +7367,0.707107,0.000000,0.000000,0.707107 +7368,0.707107,0.000000,0.000000,0.707107 +7369,0.707107,0.000000,0.000000,0.707107 +7370,0.707107,0.000000,0.000000,0.707107 +7371,0.707107,0.000000,0.000000,0.707107 +7372,0.707107,0.000000,0.000000,0.707107 +7373,0.707107,0.000000,0.000000,0.707107 +7374,0.707107,0.000000,0.000000,0.707107 +7375,0.707107,0.000000,0.000000,0.707107 +7376,0.707107,0.000000,0.000000,0.707107 +7377,0.707107,0.000000,0.000000,0.707107 +7378,0.707107,0.000000,0.000000,0.707107 +7379,0.707107,0.000000,0.000000,0.707107 +7380,0.707107,0.000000,0.000000,0.707107 +7381,0.707107,0.000000,0.000000,0.707107 +7382,0.707107,0.000000,0.000000,0.707107 +7383,0.707107,0.000000,0.000000,0.707107 +7384,0.707107,0.000000,0.000000,0.707107 +7385,0.707107,0.000000,0.000000,0.707107 +7386,0.707107,0.000000,0.000000,0.707107 +7387,0.707107,0.000000,0.000000,0.707107 +7388,0.707107,0.000000,0.000000,0.707107 +7389,0.707107,0.000000,0.000000,0.707107 +7390,0.707107,0.000000,0.000000,0.707107 +7391,0.707107,0.000000,0.000000,0.707107 +7392,0.707107,0.000000,0.000000,0.707107 +7393,0.707107,0.000000,0.000000,0.707107 +7394,0.707107,0.000000,0.000000,0.707107 +7395,0.707107,0.000000,0.000000,0.707107 +7396,0.707107,0.000000,0.000000,0.707107 +7397,0.707107,0.000000,0.000000,0.707107 +7398,0.707107,0.000000,0.000000,0.707107 +7399,0.707107,0.000000,0.000000,0.707107 +7400,0.707107,0.000000,0.000000,0.707107 +7401,0.707107,0.000000,0.000000,0.707107 +7402,0.707107,0.000000,0.000000,0.707107 +7403,0.707107,0.000000,0.000000,0.707107 +7404,0.707107,0.000000,0.000000,0.707107 +7405,0.707107,0.000000,0.000000,0.707107 +7406,0.707107,0.000000,0.000000,0.707107 +7407,0.707107,0.000000,0.000000,0.707107 +7408,0.707107,0.000000,0.000000,0.707107 +7409,0.707107,0.000000,0.000000,0.707107 +7410,0.707107,0.000000,0.000000,0.707107 +7411,0.707107,0.000000,0.000000,0.707107 +7412,0.707107,0.000000,0.000000,0.707107 +7413,0.707107,0.000000,0.000000,0.707107 +7414,0.707107,0.000000,0.000000,0.707107 +7415,0.707107,0.000000,0.000000,0.707107 +7416,0.707107,0.000000,0.000000,0.707107 +7417,0.707107,0.000000,0.000000,0.707107 +7418,0.707107,0.000000,0.000000,0.707107 +7419,0.707107,0.000000,0.000000,0.707107 +7420,0.707107,0.000000,0.000000,0.707107 +7421,0.707107,0.000000,0.000000,0.707107 +7422,0.707107,0.000000,0.000000,0.707107 +7423,0.707107,0.000000,0.000000,0.707107 +7424,0.707107,0.000000,0.000000,0.707107 +7425,0.707107,0.000000,0.000000,0.707107 +7426,0.707107,0.000000,0.000000,0.707107 +7427,0.707107,0.000000,0.000000,0.707107 +7428,0.707107,0.000000,0.000000,0.707107 +7429,0.707107,0.000000,0.000000,0.707107 +7430,0.707107,0.000000,0.000000,0.707107 +7431,0.707107,0.000000,0.000000,0.707107 +7432,0.707107,0.000000,0.000000,0.707107 +7433,0.707107,0.000000,0.000000,0.707107 +7434,0.707107,0.000000,0.000000,0.707107 +7435,0.707107,0.000000,0.000000,0.707107 +7436,0.707107,0.000000,0.000000,0.707107 +7437,0.707107,0.000000,0.000000,0.707107 +7438,0.707107,0.000000,0.000000,0.707107 +7439,0.707107,0.000000,0.000000,0.707107 +7440,0.707107,0.000000,0.000000,0.707107 +7441,0.707107,0.000000,0.000000,0.707107 +7442,0.707107,0.000000,0.000000,0.707107 +7443,0.707107,0.000000,0.000000,0.707107 +7444,0.707107,0.000000,0.000000,0.707107 +7445,0.707107,0.000000,0.000000,0.707107 +7446,0.707107,0.000000,0.000000,0.707107 +7447,0.707107,0.000000,0.000000,0.707107 +7448,0.707107,0.000000,0.000000,0.707107 +7449,0.707107,0.000000,0.000000,0.707107 +7450,0.707107,0.000000,0.000000,0.707107 +7451,0.707107,0.000000,0.000000,0.707107 +7452,0.707107,0.000000,0.000000,0.707107 +7453,0.707107,0.000000,0.000000,0.707107 +7454,0.707107,0.000000,0.000000,0.707107 +7455,0.707107,0.000000,0.000000,0.707107 +7456,0.707107,0.000000,0.000000,0.707107 +7457,0.707107,0.000000,0.000000,0.707107 +7458,0.707107,0.000000,0.000000,0.707107 +7459,0.707107,0.000000,0.000000,0.707107 +7460,0.707107,0.000000,0.000000,0.707107 +7461,0.707107,0.000000,0.000000,0.707107 +7462,0.707107,0.000000,0.000000,0.707107 +7463,0.707107,0.000000,0.000000,0.707107 +7464,0.707107,0.000000,0.000000,0.707107 +7465,0.707107,0.000000,0.000000,0.707107 +7466,0.707107,0.000000,0.000000,0.707107 +7467,0.707107,0.000000,0.000000,0.707107 +7468,0.707107,0.000000,0.000000,0.707107 +7469,0.707107,0.000000,0.000000,0.707107 +7470,0.707107,0.000000,0.000000,0.707107 +7471,0.707107,0.000000,0.000000,0.707107 +7472,0.707107,0.000000,0.000000,0.707107 +7473,0.707107,0.000000,0.000000,0.707107 +7474,0.707107,0.000000,0.000000,0.707107 +7475,0.707107,0.000000,0.000000,0.707107 +7476,0.707107,0.000000,0.000000,0.707107 +7477,0.707107,0.000000,0.000000,0.707107 +7478,0.707107,0.000000,0.000000,0.707107 +7479,0.707107,0.000000,0.000000,0.707107 +7480,0.707107,0.000000,0.000000,0.707107 +7481,0.707107,0.000000,0.000000,0.707107 +7482,0.707107,0.000000,0.000000,0.707107 +7483,0.707107,0.000000,0.000000,0.707107 +7484,0.707107,0.000000,0.000000,0.707107 +7485,0.707107,0.000000,0.000000,0.707107 +7486,0.707107,0.000000,0.000000,0.707107 +7487,0.707107,0.000000,0.000000,0.707107 +7488,0.707107,0.000000,0.000000,0.707107 +7489,0.707107,0.000000,0.000000,0.707107 +7490,0.707107,0.000000,0.000000,0.707107 +7491,0.707107,0.000000,0.000000,0.707107 +7492,0.707107,0.000000,0.000000,0.707107 +7493,0.707107,0.000000,0.000000,0.707107 +7494,0.707107,0.000000,0.000000,0.707107 +7495,0.707107,0.000000,0.000000,0.707107 +7496,0.707107,0.000000,0.000000,0.707107 +7497,0.707107,0.000000,0.000000,0.707107 +7498,0.707107,0.000000,0.000000,0.707107 +7499,0.707107,0.000000,0.000000,0.707107 +7500,0.707107,0.000000,0.000000,0.707107 +7501,0.707107,0.000000,0.000000,0.707107 +7502,0.707107,0.000000,0.000000,0.707107 +7503,0.707107,0.000000,0.000000,0.707107 +7504,0.707107,0.000000,0.000000,0.707107 +7505,0.707107,0.000000,0.000000,0.707107 +7506,0.707107,0.000000,0.000000,0.707107 +7507,0.707107,0.000000,0.000000,0.707107 +7508,0.707107,0.000000,0.000000,0.707107 +7509,0.707107,0.000000,0.000000,0.707107 +7510,0.707107,0.000000,0.000000,0.707107 +7511,0.707107,0.000000,0.000000,0.707107 +7512,0.707107,0.000000,0.000000,0.707107 +7513,0.707107,0.000000,0.000000,0.707107 +7514,0.707107,0.000000,0.000000,0.707107 +7515,0.707107,0.000000,0.000000,0.707107 +7516,0.707107,0.000000,0.000000,0.707107 +7517,0.707107,0.000000,0.000000,0.707107 +7518,0.707107,0.000000,0.000000,0.707107 +7519,0.707107,0.000000,0.000000,0.707107 +7520,0.707107,0.000000,0.000000,0.707107 +7521,0.707107,0.000000,0.000000,0.707107 +7522,0.707107,0.000000,0.000000,0.707107 +7523,0.707107,0.000000,0.000000,0.707107 +7524,0.707107,0.000000,0.000000,0.707107 +7525,0.707107,0.000000,0.000000,0.707107 +7526,0.707107,0.000000,0.000000,0.707107 +7527,0.707107,0.000000,0.000000,0.707107 +7528,0.707107,0.000000,0.000000,0.707107 +7529,0.707107,0.000000,0.000000,0.707107 +7530,0.707107,0.000000,0.000000,0.707107 +7531,0.707107,0.000000,0.000000,0.707107 +7532,0.707107,0.000000,0.000000,0.707107 +7533,0.707107,0.000000,0.000000,0.707107 +7534,0.707107,0.000000,0.000000,0.707107 +7535,0.707107,0.000000,0.000000,0.707107 +7536,0.707107,0.000000,0.000000,0.707107 +7537,0.707107,0.000000,0.000000,0.707107 +7538,0.707107,0.000000,0.000000,0.707107 +7539,0.707107,0.000000,0.000000,0.707107 +7540,0.707107,0.000000,0.000000,0.707107 +7541,0.707107,0.000000,0.000000,0.707107 +7542,0.707107,0.000000,0.000000,0.707107 +7543,0.707107,0.000000,0.000000,0.707107 +7544,0.707107,0.000000,0.000000,0.707107 +7545,0.707107,0.000000,0.000000,0.707107 +7546,0.707107,0.000000,0.000000,0.707107 +7547,0.707107,0.000000,0.000000,0.707107 +7548,0.707107,0.000000,0.000000,0.707107 +7549,0.707107,0.000000,0.000000,0.707107 +7550,0.707107,0.000000,0.000000,0.707107 +7551,0.707107,0.000000,0.000000,0.707107 +7552,0.707107,0.000000,0.000000,0.707107 +7553,0.707107,0.000000,0.000000,0.707107 +7554,0.707107,0.000000,0.000000,0.707107 +7555,0.707107,0.000000,0.000000,0.707107 +7556,0.707107,0.000000,0.000000,0.707107 +7557,0.707107,0.000000,0.000000,0.707107 +7558,0.707107,0.000000,0.000000,0.707107 +7559,0.707107,0.000000,0.000000,0.707107 +7560,0.707107,0.000000,0.000000,0.707107 +7561,0.707107,0.000000,0.000000,0.707107 +7562,0.707107,0.000000,0.000000,0.707107 +7563,0.707107,0.000000,0.000000,0.707107 +7564,0.707107,0.000000,0.000000,0.707107 +7565,0.707107,0.000000,0.000000,0.707107 +7566,0.707107,0.000000,0.000000,0.707107 +7567,0.707107,0.000000,0.000000,0.707107 +7568,0.707107,0.000000,0.000000,0.707107 +7569,0.707107,0.000000,0.000000,0.707107 +7570,0.707107,0.000000,0.000000,0.707107 +7571,0.707107,0.000000,0.000000,0.707107 +7572,0.707107,0.000000,0.000000,0.707107 +7573,0.707107,0.000000,0.000000,0.707107 +7574,0.707107,0.000000,0.000000,0.707107 +7575,0.707107,0.000000,0.000000,0.707107 +7576,0.707107,0.000000,0.000000,0.707107 +7577,0.707107,0.000000,0.000000,0.707107 +7578,0.707107,0.000000,0.000000,0.707107 +7579,0.707107,0.000000,0.000000,0.707107 +7580,0.707107,0.000000,0.000000,0.707107 +7581,0.707107,0.000000,0.000000,0.707107 +7582,0.707107,0.000000,0.000000,0.707107 +7583,0.707107,0.000000,0.000000,0.707107 +7584,0.707107,0.000000,0.000000,0.707107 +7585,0.707107,0.000000,0.000000,0.707107 +7586,0.707107,0.000000,0.000000,0.707107 +7587,0.707107,0.000000,0.000000,0.707107 +7588,0.707107,0.000000,0.000000,0.707107 +7589,0.707107,0.000000,0.000000,0.707107 +7590,0.707107,0.000000,0.000000,0.707107 +7591,0.707107,0.000000,0.000000,0.707107 +7592,0.707107,0.000000,0.000000,0.707107 +7593,0.707107,0.000000,0.000000,0.707107 +7594,0.707107,0.000000,0.000000,0.707107 +7595,0.707107,0.000000,0.000000,0.707107 +7596,0.707107,0.000000,0.000000,0.707107 +7597,0.707107,0.000000,0.000000,0.707107 +7598,0.707107,0.000000,0.000000,0.707107 +7599,0.707107,0.000000,0.000000,0.707107 +7600,0.707107,0.000000,0.000000,0.707107 +7601,0.707107,0.000000,0.000000,0.707107 +7602,0.707107,0.000000,0.000000,0.707107 +7603,0.707107,0.000000,0.000000,0.707107 +7604,0.707107,0.000000,0.000000,0.707107 +7605,0.707107,0.000000,0.000000,0.707107 +7606,0.707107,0.000000,0.000000,0.707107 +7607,0.707107,0.000000,0.000000,0.707107 +7608,0.707107,0.000000,0.000000,0.707107 +7609,0.707107,0.000000,0.000000,0.707107 +7610,0.707107,0.000000,0.000000,0.707107 +7611,0.707107,0.000000,0.000000,0.707107 +7612,0.707107,0.000000,0.000000,0.707107 +7613,0.707107,0.000000,0.000000,0.707107 +7614,0.707107,0.000000,0.000000,0.707107 +7615,0.707107,0.000000,0.000000,0.707107 +7616,0.707107,0.000000,0.000000,0.707107 +7617,0.707107,0.000000,0.000000,0.707107 +7618,0.707107,0.000000,0.000000,0.707107 +7619,0.707107,0.000000,0.000000,0.707107 +7620,0.707107,0.000000,0.000000,0.707107 +7621,0.707107,0.000000,0.000000,0.707107 +7622,0.707107,0.000000,0.000000,0.707107 +7623,0.707107,0.000000,0.000000,0.707107 +7624,0.707107,0.000000,0.000000,0.707107 +7625,0.707107,0.000000,0.000000,0.707107 +7626,0.707107,0.000000,0.000000,0.707107 +7627,0.707107,0.000000,0.000000,0.707107 +7628,0.707107,0.000000,0.000000,0.707107 +7629,0.707107,0.000000,0.000000,0.707107 +7630,0.707107,0.000000,0.000000,0.707107 +7631,0.707107,0.000000,0.000000,0.707107 +7632,0.707107,0.000000,0.000000,0.707107 +7633,0.707107,0.000000,0.000000,0.707107 +7634,0.707107,0.000000,0.000000,0.707107 +7635,0.707107,0.000000,0.000000,0.707107 +7636,0.707107,0.000000,0.000000,0.707107 +7637,0.707107,0.000000,0.000000,0.707107 +7638,0.707107,0.000000,0.000000,0.707107 +7639,0.707107,0.000000,0.000000,0.707107 +7640,0.707107,0.000000,0.000000,0.707107 +7641,0.707107,0.000000,0.000000,0.707107 +7642,0.707107,0.000000,0.000000,0.707107 +7643,0.707107,0.000000,0.000000,0.707107 +7644,0.707107,0.000000,0.000000,0.707107 +7645,0.707107,0.000000,0.000000,0.707107 +7646,0.707107,0.000000,0.000000,0.707107 +7647,0.707107,0.000000,0.000000,0.707107 +7648,0.707107,0.000000,0.000000,0.707107 +7649,0.707107,0.000000,0.000000,0.707107 +7650,0.707107,0.000000,0.000000,0.707107 +7651,0.707107,0.000000,0.000000,0.707107 +7652,0.707107,0.000000,0.000000,0.707107 +7653,0.707107,0.000000,0.000000,0.707107 +7654,0.707107,0.000000,0.000000,0.707107 +7655,0.707107,0.000000,0.000000,0.707107 +7656,0.707107,0.000000,0.000000,0.707107 +7657,0.707107,0.000000,0.000000,0.707107 +7658,0.707107,0.000000,0.000000,0.707107 +7659,0.707107,0.000000,0.000000,0.707107 +7660,0.707107,0.000000,0.000000,0.707107 +7661,0.707107,0.000000,0.000000,0.707107 +7662,0.707107,0.000000,0.000000,0.707107 +7663,0.707107,0.000000,0.000000,0.707107 +7664,0.707107,0.000000,0.000000,0.707107 +7665,0.707107,0.000000,0.000000,0.707107 +7666,0.707107,0.000000,0.000000,0.707107 +7667,0.707107,0.000000,0.000000,0.707107 +7668,0.707107,0.000000,0.000000,0.707107 +7669,0.707107,0.000000,0.000000,0.707107 +7670,0.707107,0.000000,0.000000,0.707107 +7671,0.707107,0.000000,0.000000,0.707107 +7672,0.707107,0.000000,0.000000,0.707107 +7673,0.707107,0.000000,0.000000,0.707107 +7674,0.707107,0.000000,0.000000,0.707107 +7675,0.707107,0.000000,0.000000,0.707107 +7676,0.707107,0.000000,0.000000,0.707107 +7677,0.707107,0.000000,0.000000,0.707107 +7678,0.707107,0.000000,0.000000,0.707107 +7679,0.707107,0.000000,0.000000,0.707107 +7680,0.707107,0.000000,0.000000,0.707107 +7681,0.707107,0.000000,0.000000,0.707107 +7682,0.707107,0.000000,0.000000,0.707107 +7683,0.707107,0.000000,0.000000,0.707107 +7684,0.707107,0.000000,0.000000,0.707107 +7685,0.707107,0.000000,0.000000,0.707107 +7686,0.707107,0.000000,0.000000,0.707107 +7687,0.707107,0.000000,0.000000,0.707107 +7688,0.707107,0.000000,0.000000,0.707107 +7689,0.707107,0.000000,0.000000,0.707107 +7690,0.707107,0.000000,0.000000,0.707107 +7691,0.707107,0.000000,0.000000,0.707107 +7692,0.707107,0.000000,0.000000,0.707107 +7693,0.707107,0.000000,0.000000,0.707107 +7694,0.707107,0.000000,0.000000,0.707107 +7695,0.707107,0.000000,0.000000,0.707107 +7696,0.707107,0.000000,0.000000,0.707107 +7697,0.707107,0.000000,0.000000,0.707107 +7698,0.707107,0.000000,0.000000,0.707107 +7699,0.707107,0.000000,0.000000,0.707107 +7700,0.707107,0.000000,0.000000,0.707107 +7701,0.707107,0.000000,0.000000,0.707107 +7702,0.707107,0.000000,0.000000,0.707107 +7703,0.707107,0.000000,0.000000,0.707107 +7704,0.707107,0.000000,0.000000,0.707107 +7705,0.707107,0.000000,0.000000,0.707107 +7706,0.707107,0.000000,0.000000,0.707107 +7707,0.707107,0.000000,0.000000,0.707107 +7708,0.707107,0.000000,0.000000,0.707107 +7709,0.707107,0.000000,0.000000,0.707107 +7710,0.707107,0.000000,0.000000,0.707107 +7711,0.707107,0.000000,0.000000,0.707107 +7712,0.707107,0.000000,0.000000,0.707107 +7713,0.707107,0.000000,0.000000,0.707107 +7714,0.707107,0.000000,0.000000,0.707107 +7715,0.707107,0.000000,0.000000,0.707107 +7716,0.707107,0.000000,0.000000,0.707107 +7717,0.707107,0.000000,0.000000,0.707107 +7718,0.707107,0.000000,0.000000,0.707107 +7719,0.707107,0.000000,0.000000,0.707107 +7720,0.707107,0.000000,0.000000,0.707107 +7721,0.707107,0.000000,0.000000,0.707107 +7722,0.707107,0.000000,0.000000,0.707107 +7723,0.707107,0.000000,0.000000,0.707107 +7724,0.707107,0.000000,0.000000,0.707107 +7725,0.707107,0.000000,0.000000,0.707107 +7726,0.707107,0.000000,0.000000,0.707107 +7727,0.707107,0.000000,0.000000,0.707107 +7728,0.707107,0.000000,0.000000,0.707107 +7729,0.707107,0.000000,0.000000,0.707107 +7730,0.707107,0.000000,0.000000,0.707107 +7731,0.707107,0.000000,0.000000,0.707107 +7732,0.707107,0.000000,0.000000,0.707107 +7733,0.707107,0.000000,0.000000,0.707107 +7734,0.707107,0.000000,0.000000,0.707107 +7735,0.707107,0.000000,0.000000,0.707107 +7736,0.707107,0.000000,0.000000,0.707107 +7737,0.707107,0.000000,0.000000,0.707107 +7738,0.707107,0.000000,0.000000,0.707107 +7739,0.707107,0.000000,0.000000,0.707107 +7740,0.707107,0.000000,0.000000,0.707107 +7741,0.707107,0.000000,0.000000,0.707107 +7742,0.707107,0.000000,0.000000,0.707107 +7743,0.707107,0.000000,0.000000,0.707107 +7744,0.707107,0.000000,0.000000,0.707107 +7745,0.707107,0.000000,0.000000,0.707107 +7746,0.707107,0.000000,0.000000,0.707107 +7747,0.707107,0.000000,0.000000,0.707107 +7748,0.707107,0.000000,0.000000,0.707107 +7749,0.707107,0.000000,0.000000,0.707107 +7750,0.707107,0.000000,0.000000,0.707107 +7751,0.707107,0.000000,0.000000,0.707107 +7752,0.707107,0.000000,0.000000,0.707107 +7753,0.707107,0.000000,0.000000,0.707107 +7754,0.707107,0.000000,0.000000,0.707107 +7755,0.707107,0.000000,0.000000,0.707107 +7756,0.707107,0.000000,0.000000,0.707107 +7757,0.707107,0.000000,0.000000,0.707107 +7758,0.707107,0.000000,0.000000,0.707107 +7759,0.707107,0.000000,0.000000,0.707107 +7760,0.707107,0.000000,0.000000,0.707107 +7761,0.707107,0.000000,0.000000,0.707107 +7762,0.707107,0.000000,0.000000,0.707107 +7763,0.707107,0.000000,0.000000,0.707107 +7764,0.707107,0.000000,0.000000,0.707107 +7765,0.707107,0.000000,0.000000,0.707107 +7766,0.707107,0.000000,0.000000,0.707107 +7767,0.707107,0.000000,0.000000,0.707107 +7768,0.707107,0.000000,0.000000,0.707107 +7769,0.707107,0.000000,0.000000,0.707107 +7770,0.707107,0.000000,0.000000,0.707107 +7771,0.707107,0.000000,0.000000,0.707107 +7772,0.707107,0.000000,0.000000,0.707107 +7773,0.707107,0.000000,0.000000,0.707107 +7774,0.707107,0.000000,0.000000,0.707107 +7775,0.707107,0.000000,0.000000,0.707107 +7776,0.707107,0.000000,0.000000,0.707107 +7777,0.707107,0.000000,0.000000,0.707107 +7778,0.707107,0.000000,0.000000,0.707107 +7779,0.707107,0.000000,0.000000,0.707107 +7780,0.707107,0.000000,0.000000,0.707107 +7781,0.707107,0.000000,0.000000,0.707107 +7782,0.707107,0.000000,0.000000,0.707107 +7783,0.707107,0.000000,0.000000,0.707107 +7784,0.707107,0.000000,0.000000,0.707107 +7785,0.707107,0.000000,0.000000,0.707107 +7786,0.707107,0.000000,0.000000,0.707107 +7787,0.707107,0.000000,0.000000,0.707107 +7788,0.707107,0.000000,0.000000,0.707107 +7789,0.707107,0.000000,0.000000,0.707107 +7790,0.707107,0.000000,0.000000,0.707107 +7791,0.707107,0.000000,0.000000,0.707107 +7792,0.707107,0.000000,0.000000,0.707107 +7793,0.707107,0.000000,0.000000,0.707107 +7794,0.707107,0.000000,0.000000,0.707107 +7795,0.707107,0.000000,0.000000,0.707107 +7796,0.707107,0.000000,0.000000,0.707107 +7797,0.707107,0.000000,0.000000,0.707107 +7798,0.707107,0.000000,0.000000,0.707107 +7799,0.707107,0.000000,0.000000,0.707107 +7800,0.707107,0.000000,0.000000,0.707107 +7801,0.707107,0.000000,0.000000,0.707107 +7802,0.707107,0.000000,0.000000,0.707107 +7803,0.707107,0.000000,0.000000,0.707107 +7804,0.707107,0.000000,0.000000,0.707107 +7805,0.707107,0.000000,0.000000,0.707107 +7806,0.707107,0.000000,0.000000,0.707107 +7807,0.707107,0.000000,0.000000,0.707107 +7808,0.707107,0.000000,0.000000,0.707107 +7809,0.707107,0.000000,0.000000,0.707107 +7810,0.707107,0.000000,0.000000,0.707107 +7811,0.707107,0.000000,0.000000,0.707107 +7812,0.707107,0.000000,0.000000,0.707107 +7813,0.707107,0.000000,0.000000,0.707107 +7814,0.707107,0.000000,0.000000,0.707107 +7815,0.707107,0.000000,0.000000,0.707107 +7816,0.707107,0.000000,0.000000,0.707107 +7817,0.707107,0.000000,0.000000,0.707107 +7818,0.707107,0.000000,0.000000,0.707107 +7819,0.707107,0.000000,0.000000,0.707107 +7820,0.707107,0.000000,0.000000,0.707107 +7821,0.707107,0.000000,0.000000,0.707107 +7822,0.707107,0.000000,0.000000,0.707107 +7823,0.707107,0.000000,0.000000,0.707107 +7824,0.707107,0.000000,0.000000,0.707107 +7825,0.707107,0.000000,0.000000,0.707107 +7826,0.707107,0.000000,0.000000,0.707107 +7827,0.707107,0.000000,0.000000,0.707107 +7828,0.707107,0.000000,0.000000,0.707107 +7829,0.707107,0.000000,0.000000,0.707107 +7830,0.707107,0.000000,0.000000,0.707107 +7831,0.707107,0.000000,0.000000,0.707107 +7832,0.707107,0.000000,0.000000,0.707107 +7833,0.707107,0.000000,0.000000,0.707107 +7834,0.707107,0.000000,0.000000,0.707107 +7835,0.707107,0.000000,0.000000,0.707107 +7836,0.707107,0.000000,0.000000,0.707107 +7837,0.707107,0.000000,0.000000,0.707107 +7838,0.707107,0.000000,0.000000,0.707107 +7839,0.707107,0.000000,0.000000,0.707107 +7840,0.707107,0.000000,0.000000,0.707107 +7841,0.707107,0.000000,0.000000,0.707107 +7842,0.707107,0.000000,0.000000,0.707107 +7843,0.707107,0.000000,0.000000,0.707107 +7844,0.707107,0.000000,0.000000,0.707107 +7845,0.707107,0.000000,0.000000,0.707107 +7846,0.707107,0.000000,0.000000,0.707107 +7847,0.707107,0.000000,0.000000,0.707107 +7848,0.707107,0.000000,0.000000,0.707107 +7849,0.707107,0.000000,0.000000,0.707107 +7850,0.707107,0.000000,0.000000,0.707107 +7851,0.707107,0.000000,0.000000,0.707107 +7852,0.707107,0.000000,0.000000,0.707107 +7853,0.707107,0.000000,0.000000,0.707107 +7854,0.707107,0.000000,0.000000,0.707107 +7855,0.707107,0.000000,0.000000,0.707107 +7856,0.707107,0.000000,0.000000,0.707107 +7857,0.707107,0.000000,0.000000,0.707107 +7858,0.707107,0.000000,0.000000,0.707107 +7859,0.707107,0.000000,0.000000,0.707107 +7860,0.707107,0.000000,0.000000,0.707107 +7861,0.707107,0.000000,0.000000,0.707107 +7862,0.707107,0.000000,0.000000,0.707107 +7863,0.707107,0.000000,0.000000,0.707107 +7864,0.707107,0.000000,0.000000,0.707107 +7865,0.707107,0.000000,0.000000,0.707107 +7866,0.707107,0.000000,0.000000,0.707107 +7867,0.707107,0.000000,0.000000,0.707107 +7868,0.707107,0.000000,0.000000,0.707107 +7869,0.707107,0.000000,0.000000,0.707107 +7870,0.707107,0.000000,0.000000,0.707107 +7871,0.707107,0.000000,0.000000,0.707107 +7872,0.707107,0.000000,0.000000,0.707107 +7873,0.707107,0.000000,0.000000,0.707107 +7874,0.707107,0.000000,0.000000,0.707107 +7875,0.707107,0.000000,0.000000,0.707107 +7876,0.707107,0.000000,0.000000,0.707107 +7877,0.707107,0.000000,0.000000,0.707107 +7878,0.707107,0.000000,0.000000,0.707107 +7879,0.707107,0.000000,0.000000,0.707107 +7880,0.707107,0.000000,0.000000,0.707107 +7881,0.707107,0.000000,0.000000,0.707107 +7882,0.707107,0.000000,0.000000,0.707107 +7883,0.707107,0.000000,0.000000,0.707107 +7884,0.707107,0.000000,0.000000,0.707107 +7885,0.707107,0.000000,0.000000,0.707107 +7886,0.707107,0.000000,0.000000,0.707107 +7887,0.707107,0.000000,0.000000,0.707107 +7888,0.707107,0.000000,0.000000,0.707107 +7889,0.707107,0.000000,0.000000,0.707107 +7890,0.707107,0.000000,0.000000,0.707107 +7891,0.707107,0.000000,0.000000,0.707107 +7892,0.707107,0.000000,0.000000,0.707107 +7893,0.707107,0.000000,0.000000,0.707107 +7894,0.707107,0.000000,0.000000,0.707107 +7895,0.707107,0.000000,0.000000,0.707107 +7896,0.707107,0.000000,0.000000,0.707107 +7897,0.707107,0.000000,0.000000,0.707107 +7898,0.707107,0.000000,0.000000,0.707107 +7899,0.707107,0.000000,0.000000,0.707107 +7900,0.707107,0.000000,0.000000,0.707107 +7901,0.707107,0.000000,0.000000,0.707107 +7902,0.707107,0.000000,0.000000,0.707107 +7903,0.707107,0.000000,0.000000,0.707107 +7904,0.707107,0.000000,0.000000,0.707107 +7905,0.707107,0.000000,0.000000,0.707107 +7906,0.707107,0.000000,0.000000,0.707107 +7907,0.707107,0.000000,0.000000,0.707107 +7908,0.707107,0.000000,0.000000,0.707107 +7909,0.707107,0.000000,0.000000,0.707107 +7910,0.707107,0.000000,0.000000,0.707107 +7911,0.707107,0.000000,0.000000,0.707107 +7912,0.707107,0.000000,0.000000,0.707107 +7913,0.707107,0.000000,0.000000,0.707107 +7914,0.707107,0.000000,0.000000,0.707107 +7915,0.707107,0.000000,0.000000,0.707107 +7916,0.707107,0.000000,0.000000,0.707107 +7917,0.707107,0.000000,0.000000,0.707107 +7918,0.707107,0.000000,0.000000,0.707107 +7919,0.707107,0.000000,0.000000,0.707107 +7920,0.707107,0.000000,0.000000,0.707107 +7921,0.707107,0.000000,0.000000,0.707107 +7922,0.707107,0.000000,0.000000,0.707107 +7923,0.707107,0.000000,0.000000,0.707107 +7924,0.707107,0.000000,0.000000,0.707107 +7925,0.707107,0.000000,0.000000,0.707107 +7926,0.707107,0.000000,0.000000,0.707107 +7927,0.707107,0.000000,0.000000,0.707107 +7928,0.707107,0.000000,0.000000,0.707107 +7929,0.707107,0.000000,0.000000,0.707107 +7930,0.707107,0.000000,0.000000,0.707107 +7931,0.707107,0.000000,0.000000,0.707107 +7932,0.707107,0.000000,0.000000,0.707107 +7933,0.707107,0.000000,0.000000,0.707107 +7934,0.707107,0.000000,0.000000,0.707107 +7935,0.707107,0.000000,0.000000,0.707107 +7936,0.707107,0.000000,0.000000,0.707107 +7937,0.707107,0.000000,0.000000,0.707107 +7938,0.707107,0.000000,0.000000,0.707107 +7939,0.707107,0.000000,0.000000,0.707107 +7940,0.707107,0.000000,0.000000,0.707107 +7941,0.707107,0.000000,0.000000,0.707107 +7942,0.707107,0.000000,0.000000,0.707107 +7943,0.707107,0.000000,0.000000,0.707107 +7944,0.707107,0.000000,0.000000,0.707107 +7945,0.707107,0.000000,0.000000,0.707107 +7946,0.707107,0.000000,0.000000,0.707107 +7947,0.707107,0.000000,0.000000,0.707107 +7948,0.707107,0.000000,0.000000,0.707107 +7949,0.707107,0.000000,0.000000,0.707107 +7950,0.707107,0.000000,0.000000,0.707107 +7951,0.707107,0.000000,0.000000,0.707107 +7952,0.707107,0.000000,0.000000,0.707107 +7953,0.707107,0.000000,0.000000,0.707107 +7954,0.707107,0.000000,0.000000,0.707107 +7955,0.707107,0.000000,0.000000,0.707107 +7956,0.707107,0.000000,0.000000,0.707107 +7957,0.707107,0.000000,0.000000,0.707107 +7958,0.707107,0.000000,0.000000,0.707107 +7959,0.707107,0.000000,0.000000,0.707107 +7960,0.707107,0.000000,0.000000,0.707107 +7961,0.707107,0.000000,0.000000,0.707107 +7962,0.707107,0.000000,0.000000,0.707107 +7963,0.707107,0.000000,0.000000,0.707107 +7964,0.707107,0.000000,0.000000,0.707107 +7965,0.707107,0.000000,0.000000,0.707107 +7966,0.707107,0.000000,0.000000,0.707107 +7967,0.707107,0.000000,0.000000,0.707107 +7968,0.707107,0.000000,0.000000,0.707107 +7969,0.707107,0.000000,0.000000,0.707107 +7970,0.707107,0.000000,0.000000,0.707107 +7971,0.707107,0.000000,0.000000,0.707107 +7972,0.707107,0.000000,0.000000,0.707107 +7973,0.707107,0.000000,0.000000,0.707107 +7974,0.707107,0.000000,0.000000,0.707107 +7975,0.707107,0.000000,0.000000,0.707107 +7976,0.707107,0.000000,0.000000,0.707107 +7977,0.707107,0.000000,0.000000,0.707107 +7978,0.707107,0.000000,0.000000,0.707107 +7979,0.707107,0.000000,0.000000,0.707107 +7980,0.707107,0.000000,0.000000,0.707107 +7981,0.707107,0.000000,0.000000,0.707107 +7982,0.707107,0.000000,0.000000,0.707107 +7983,0.707107,0.000000,0.000000,0.707107 +7984,0.707107,0.000000,0.000000,0.707107 +7985,0.707107,0.000000,0.000000,0.707107 +7986,0.707107,0.000000,0.000000,0.707107 +7987,0.707107,0.000000,0.000000,0.707107 +7988,0.707107,0.000000,0.000000,0.707107 +7989,0.707107,0.000000,0.000000,0.707107 +7990,0.707107,0.000000,0.000000,0.707107 +7991,0.707107,0.000000,0.000000,0.707107 +7992,0.707107,0.000000,0.000000,0.707107 +7993,0.707107,0.000000,0.000000,0.707107 +7994,0.707107,0.000000,0.000000,0.707107 +7995,0.707107,0.000000,0.000000,0.707107 +7996,0.707107,0.000000,0.000000,0.707107 +7997,0.707107,0.000000,0.000000,0.707107 +7998,0.707107,0.000000,0.000000,0.707107 +7999,0.707107,0.000000,0.000000,0.707107 +8000,0.707107,0.000000,0.000000,0.707107 +8001,0.707107,0.000000,0.000000,0.707107 +8002,0.707107,0.000000,0.000000,0.707107 +8003,0.707107,0.000000,0.000000,0.707107 +8004,0.707107,0.000000,0.000000,0.707107 +8005,0.707107,0.000000,0.000000,0.707107 +8006,0.707107,0.000000,0.000000,0.707107 +8007,0.707107,0.000000,0.000000,0.707107 +8008,0.707107,0.000000,0.000000,0.707107 +8009,0.707107,0.000000,0.000000,0.707107 +8010,0.707107,0.000000,0.000000,0.707107 +8011,0.707107,0.000000,0.000000,0.707107 +8012,0.707107,0.000000,0.000000,0.707107 +8013,0.707107,0.000000,0.000000,0.707107 +8014,0.707107,0.000000,0.000000,0.707107 +8015,0.707107,0.000000,0.000000,0.707107 +8016,0.707107,0.000000,0.000000,0.707107 +8017,0.707107,0.000000,0.000000,0.707107 +8018,0.707107,0.000000,0.000000,0.707107 +8019,0.707107,0.000000,0.000000,0.707107 +8020,0.707107,0.000000,0.000000,0.707107 +8021,0.707107,0.000000,0.000000,0.707107 +8022,0.707107,0.000000,0.000000,0.707107 +8023,0.707107,0.000000,0.000000,0.707107 +8024,0.707107,0.000000,0.000000,0.707107 +8025,0.707107,0.000000,0.000000,0.707107 +8026,0.707107,0.000000,0.000000,0.707107 +8027,0.707107,0.000000,0.000000,0.707107 +8028,0.707107,0.000000,0.000000,0.707107 +8029,0.707107,0.000000,0.000000,0.707107 +8030,0.707107,0.000000,0.000000,0.707107 +8031,0.707107,0.000000,0.000000,0.707107 +8032,0.707107,0.000000,0.000000,0.707107 +8033,0.707107,0.000000,0.000000,0.707107 +8034,0.707107,0.000000,0.000000,0.707107 +8035,0.707107,0.000000,0.000000,0.707107 +8036,0.707107,0.000000,0.000000,0.707107 +8037,0.707107,0.000000,0.000000,0.707107 +8038,0.707107,0.000000,0.000000,0.707107 +8039,0.707107,0.000000,0.000000,0.707107 +8040,0.707107,0.000000,0.000000,0.707107 +8041,0.707107,0.000000,0.000000,0.707107 +8042,0.707107,0.000000,0.000000,0.707107 +8043,0.707107,0.000000,0.000000,0.707107 +8044,0.707107,0.000000,0.000000,0.707107 +8045,0.707107,0.000000,0.000000,0.707107 +8046,0.707107,0.000000,0.000000,0.707107 +8047,0.707107,0.000000,0.000000,0.707107 +8048,0.707107,0.000000,0.000000,0.707107 +8049,0.707107,0.000000,0.000000,0.707107 +8050,0.707107,0.000000,0.000000,0.707107 +8051,0.707107,0.000000,0.000000,0.707107 +8052,0.707107,0.000000,0.000000,0.707107 +8053,0.707107,0.000000,0.000000,0.707107 +8054,0.707107,0.000000,0.000000,0.707107 +8055,0.707107,0.000000,0.000000,0.707107 +8056,0.707107,0.000000,0.000000,0.707107 +8057,0.707107,0.000000,0.000000,0.707107 +8058,0.707107,0.000000,0.000000,0.707107 +8059,0.707107,0.000000,0.000000,0.707107 +8060,0.707107,0.000000,0.000000,0.707107 +8061,0.707107,0.000000,0.000000,0.707107 +8062,0.707107,0.000000,0.000000,0.707107 +8063,0.707107,0.000000,0.000000,0.707107 +8064,0.707107,0.000000,0.000000,0.707107 +8065,0.707107,0.000000,0.000000,0.707107 +8066,0.707107,0.000000,0.000000,0.707107 +8067,0.707107,0.000000,0.000000,0.707107 +8068,0.707107,0.000000,0.000000,0.707107 +8069,0.707107,0.000000,0.000000,0.707107 +8070,0.707107,0.000000,0.000000,0.707107 +8071,0.707107,0.000000,0.000000,0.707107 +8072,0.707107,0.000000,0.000000,0.707107 +8073,0.707107,0.000000,0.000000,0.707107 +8074,0.707107,0.000000,0.000000,0.707107 +8075,0.707107,0.000000,0.000000,0.707107 +8076,0.707107,0.000000,0.000000,0.707107 +8077,0.707107,0.000000,0.000000,0.707107 +8078,0.707107,0.000000,0.000000,0.707107 +8079,0.707107,0.000000,0.000000,0.707107 +8080,0.707107,0.000000,0.000000,0.707107 +8081,0.707107,0.000000,0.000000,0.707107 +8082,0.707107,0.000000,0.000000,0.707107 +8083,0.707107,0.000000,0.000000,0.707107 +8084,0.707107,0.000000,0.000000,0.707107 +8085,0.707107,0.000000,0.000000,0.707107 +8086,0.707107,0.000000,0.000000,0.707107 +8087,0.707107,0.000000,0.000000,0.707107 +8088,0.707107,0.000000,0.000000,0.707107 +8089,0.707107,0.000000,0.000000,0.707107 +8090,0.707107,0.000000,0.000000,0.707107 +8091,0.707107,0.000000,0.000000,0.707107 +8092,0.707107,0.000000,0.000000,0.707107 +8093,0.707107,0.000000,0.000000,0.707107 +8094,0.707107,0.000000,0.000000,0.707107 +8095,0.707107,0.000000,0.000000,0.707107 +8096,0.707107,0.000000,0.000000,0.707107 +8097,0.707107,0.000000,0.000000,0.707107 +8098,0.707107,0.000000,0.000000,0.707107 +8099,0.707107,0.000000,0.000000,0.707107 diff --git a/scripts/testv/headrot_case00_3000_q.csv b/scripts/testv/headrot_case00_3000_q.csv new file mode 100644 index 0000000000..ad09f93413 --- /dev/null +++ b/scripts/testv/headrot_case00_3000_q.csv @@ -0,0 +1,3000 @@ +0,1.000000,0.000000,0.000000,0.000000 +1,0.999999,0.000000,0.000000,0.001047 +2,0.999998,0.000000,0.000000,0.002094 +3,0.999995,0.000000,0.000000,0.003142 +4,0.999991,0.000000,0.000000,0.004189 +5,0.999986,0.000000,0.000000,0.005236 +6,0.999980,0.000000,0.000000,0.006283 +7,0.999973,0.000000,0.000000,0.007330 +8,0.999965,0.000000,0.000000,0.008377 +9,0.999956,0.000000,0.000000,0.009425 +10,0.999945,0.000000,0.000000,0.010472 +11,0.999934,0.000000,0.000000,0.011519 +12,0.999921,0.000000,0.000000,0.012566 +13,0.999907,0.000000,0.000000,0.013613 +14,0.999893,0.000000,0.000000,0.014660 +15,0.999877,0.000000,0.000000,0.015707 +16,0.999860,0.000000,0.000000,0.016754 +17,0.999842,0.000000,0.000000,0.017801 +18,0.999822,0.000000,0.000000,0.018848 +19,0.999802,0.000000,0.000000,0.019895 +20,0.999781,0.000000,0.000000,0.020942 +21,0.999758,0.000000,0.000000,0.021989 +22,0.999735,0.000000,0.000000,0.023036 +23,0.999710,0.000000,0.000000,0.024083 +24,0.999684,0.000000,0.000000,0.025130 +25,0.999657,0.000000,0.000000,0.026177 +26,0.999629,0.000000,0.000000,0.027224 +27,0.999600,0.000000,0.000000,0.028271 +28,0.999570,0.000000,0.000000,0.029317 +29,0.999539,0.000000,0.000000,0.030364 +30,0.999507,0.000000,0.000000,0.031411 +31,0.999473,0.000000,0.000000,0.032457 +32,0.999439,0.000000,0.000000,0.033504 +33,0.999403,0.000000,0.000000,0.034551 +34,0.999366,0.000000,0.000000,0.035597 +35,0.999328,0.000000,0.000000,0.036644 +36,0.999289,0.000000,0.000000,0.037690 +37,0.999249,0.000000,0.000000,0.038737 +38,0.999208,0.000000,0.000000,0.039783 +39,0.999166,0.000000,0.000000,0.040829 +40,0.999123,0.000000,0.000000,0.041876 +41,0.999078,0.000000,0.000000,0.042922 +42,0.999033,0.000000,0.000000,0.043968 +43,0.998986,0.000000,0.000000,0.045014 +44,0.998939,0.000000,0.000000,0.046060 +45,0.998890,0.000000,0.000000,0.047106 +46,0.998840,0.000000,0.000000,0.048152 +47,0.998789,0.000000,0.000000,0.049198 +48,0.998737,0.000000,0.000000,0.050244 +49,0.998684,0.000000,0.000000,0.051290 +50,0.998630,0.000000,0.000000,0.052336 +51,0.998574,0.000000,0.000000,0.053382 +52,0.998518,0.000000,0.000000,0.054427 +53,0.998460,0.000000,0.000000,0.055473 +54,0.998402,0.000000,0.000000,0.056519 +55,0.998342,0.000000,0.000000,0.057564 +56,0.998281,0.000000,0.000000,0.058609 +57,0.998219,0.000000,0.000000,0.059655 +58,0.998156,0.000000,0.000000,0.060700 +59,0.998092,0.000000,0.000000,0.061745 +60,0.998027,0.000000,0.000000,0.062791 +61,0.997960,0.000000,0.000000,0.063836 +62,0.997893,0.000000,0.000000,0.064881 +63,0.997825,0.000000,0.000000,0.065926 +64,0.997755,0.000000,0.000000,0.066970 +65,0.997684,0.000000,0.000000,0.068015 +66,0.997613,0.000000,0.000000,0.069060 +67,0.997540,0.000000,0.000000,0.070105 +68,0.997466,0.000000,0.000000,0.071149 +69,0.997391,0.000000,0.000000,0.072194 +70,0.997314,0.000000,0.000000,0.073238 +71,0.997237,0.000000,0.000000,0.074283 +72,0.997159,0.000000,0.000000,0.075327 +73,0.997079,0.000000,0.000000,0.076371 +74,0.996999,0.000000,0.000000,0.077415 +75,0.996917,0.000000,0.000000,0.078459 +76,0.996835,0.000000,0.000000,0.079503 +77,0.996751,0.000000,0.000000,0.080547 +78,0.996666,0.000000,0.000000,0.081591 +79,0.996580,0.000000,0.000000,0.082634 +80,0.996493,0.000000,0.000000,0.083678 +81,0.996405,0.000000,0.000000,0.084721 +82,0.996315,0.000000,0.000000,0.085765 +83,0.996225,0.000000,0.000000,0.086808 +84,0.996134,0.000000,0.000000,0.087851 +85,0.996041,0.000000,0.000000,0.088894 +86,0.995947,0.000000,0.000000,0.089937 +87,0.995853,0.000000,0.000000,0.090980 +88,0.995757,0.000000,0.000000,0.092023 +89,0.995660,0.000000,0.000000,0.093066 +90,0.995562,0.000000,0.000000,0.094108 +91,0.995463,0.000000,0.000000,0.095151 +92,0.995363,0.000000,0.000000,0.096193 +93,0.995261,0.000000,0.000000,0.097235 +94,0.995159,0.000000,0.000000,0.098278 +95,0.995056,0.000000,0.000000,0.099320 +96,0.994951,0.000000,0.000000,0.100362 +97,0.994845,0.000000,0.000000,0.101404 +98,0.994739,0.000000,0.000000,0.102445 +99,0.994631,0.000000,0.000000,0.103487 +100,0.994522,0.000000,0.000000,0.104528 +101,0.994412,0.000000,0.000000,0.105570 +102,0.994301,0.000000,0.000000,0.106611 +103,0.994189,0.000000,0.000000,0.107652 +104,0.994075,0.000000,0.000000,0.108693 +105,0.993961,0.000000,0.000000,0.109734 +106,0.993845,0.000000,0.000000,0.110775 +107,0.993729,0.000000,0.000000,0.111816 +108,0.993611,0.000000,0.000000,0.112856 +109,0.993493,0.000000,0.000000,0.113897 +110,0.993373,0.000000,0.000000,0.114937 +111,0.993252,0.000000,0.000000,0.115977 +112,0.993130,0.000000,0.000000,0.117017 +113,0.993007,0.000000,0.000000,0.118057 +114,0.992883,0.000000,0.000000,0.119097 +115,0.992757,0.000000,0.000000,0.120137 +116,0.992631,0.000000,0.000000,0.121176 +117,0.992504,0.000000,0.000000,0.122216 +118,0.992375,0.000000,0.000000,0.123255 +119,0.992245,0.000000,0.000000,0.124294 +120,0.992115,0.000000,0.000000,0.125333 +121,0.991983,0.000000,0.000000,0.126372 +122,0.991850,0.000000,0.000000,0.127411 +123,0.991716,0.000000,0.000000,0.128449 +124,0.991581,0.000000,0.000000,0.129488 +125,0.991445,0.000000,0.000000,0.130526 +126,0.991308,0.000000,0.000000,0.131564 +127,0.991169,0.000000,0.000000,0.132602 +128,0.991030,0.000000,0.000000,0.133640 +129,0.990889,0.000000,0.000000,0.134678 +130,0.990748,0.000000,0.000000,0.135716 +131,0.990605,0.000000,0.000000,0.136753 +132,0.990461,0.000000,0.000000,0.137790 +133,0.990317,0.000000,0.000000,0.138827 +134,0.990171,0.000000,0.000000,0.139864 +135,0.990024,0.000000,0.000000,0.140901 +136,0.989876,0.000000,0.000000,0.141938 +137,0.989726,0.000000,0.000000,0.142974 +138,0.989576,0.000000,0.000000,0.144011 +139,0.989425,0.000000,0.000000,0.145047 +140,0.989272,0.000000,0.000000,0.146083 +141,0.989119,0.000000,0.000000,0.147119 +142,0.988964,0.000000,0.000000,0.148155 +143,0.988809,0.000000,0.000000,0.149190 +144,0.988652,0.000000,0.000000,0.150226 +145,0.988494,0.000000,0.000000,0.151261 +146,0.988335,0.000000,0.000000,0.152296 +147,0.988175,0.000000,0.000000,0.153331 +148,0.988014,0.000000,0.000000,0.154366 +149,0.987852,0.000000,0.000000,0.155400 +150,0.987688,0.000000,0.000000,0.156434 +151,0.987524,0.000000,0.000000,0.157469 +152,0.987359,0.000000,0.000000,0.158503 +153,0.987192,0.000000,0.000000,0.159537 +154,0.987024,0.000000,0.000000,0.160570 +155,0.986856,0.000000,0.000000,0.161604 +156,0.986686,0.000000,0.000000,0.162637 +157,0.986515,0.000000,0.000000,0.163670 +158,0.986343,0.000000,0.000000,0.164703 +159,0.986170,0.000000,0.000000,0.165736 +160,0.985996,0.000000,0.000000,0.166769 +161,0.985821,0.000000,0.000000,0.167801 +162,0.985645,0.000000,0.000000,0.168833 +163,0.985467,0.000000,0.000000,0.169866 +164,0.985289,0.000000,0.000000,0.170897 +165,0.985109,0.000000,0.000000,0.171929 +166,0.984929,0.000000,0.000000,0.172961 +167,0.984747,0.000000,0.000000,0.173992 +168,0.984564,0.000000,0.000000,0.175023 +169,0.984381,0.000000,0.000000,0.176054 +170,0.984196,0.000000,0.000000,0.177085 +171,0.984010,0.000000,0.000000,0.178115 +172,0.983823,0.000000,0.000000,0.179146 +173,0.983634,0.000000,0.000000,0.180176 +174,0.983445,0.000000,0.000000,0.181206 +175,0.983255,0.000000,0.000000,0.182236 +176,0.983064,0.000000,0.000000,0.183265 +177,0.982871,0.000000,0.000000,0.184294 +178,0.982678,0.000000,0.000000,0.185324 +179,0.982483,0.000000,0.000000,0.186353 +180,0.982287,0.000000,0.000000,0.187381 +181,0.982090,0.000000,0.000000,0.188410 +182,0.981893,0.000000,0.000000,0.189438 +183,0.981694,0.000000,0.000000,0.190466 +184,0.981494,0.000000,0.000000,0.191494 +185,0.981293,0.000000,0.000000,0.192522 +186,0.981091,0.000000,0.000000,0.193549 +187,0.980887,0.000000,0.000000,0.194577 +188,0.980683,0.000000,0.000000,0.195604 +189,0.980478,0.000000,0.000000,0.196631 +190,0.980271,0.000000,0.000000,0.197657 +191,0.980064,0.000000,0.000000,0.198684 +192,0.979855,0.000000,0.000000,0.199710 +193,0.979645,0.000000,0.000000,0.200736 +194,0.979435,0.000000,0.000000,0.201762 +195,0.979223,0.000000,0.000000,0.202787 +196,0.979010,0.000000,0.000000,0.203813 +197,0.978796,0.000000,0.000000,0.204838 +198,0.978581,0.000000,0.000000,0.205863 +199,0.978365,0.000000,0.000000,0.206887 +200,0.978148,0.000000,0.000000,0.207912 +201,0.977929,0.000000,0.000000,0.208936 +202,0.977710,0.000000,0.000000,0.209960 +203,0.977490,0.000000,0.000000,0.210984 +204,0.977268,0.000000,0.000000,0.212007 +205,0.977046,0.000000,0.000000,0.213030 +206,0.976822,0.000000,0.000000,0.214053 +207,0.976597,0.000000,0.000000,0.215076 +208,0.976371,0.000000,0.000000,0.216099 +209,0.976145,0.000000,0.000000,0.217121 +210,0.975917,0.000000,0.000000,0.218143 +211,0.975688,0.000000,0.000000,0.219165 +212,0.975458,0.000000,0.000000,0.220187 +213,0.975227,0.000000,0.000000,0.221208 +214,0.974994,0.000000,0.000000,0.222229 +215,0.974761,0.000000,0.000000,0.223250 +216,0.974527,0.000000,0.000000,0.224271 +217,0.974291,0.000000,0.000000,0.225291 +218,0.974055,0.000000,0.000000,0.226311 +219,0.973817,0.000000,0.000000,0.227331 +220,0.973579,0.000000,0.000000,0.228351 +221,0.973339,0.000000,0.000000,0.229370 +222,0.973099,0.000000,0.000000,0.230389 +223,0.972857,0.000000,0.000000,0.231408 +224,0.972614,0.000000,0.000000,0.232427 +225,0.972370,0.000000,0.000000,0.233445 +226,0.972125,0.000000,0.000000,0.234463 +227,0.971879,0.000000,0.000000,0.235481 +228,0.971632,0.000000,0.000000,0.236499 +229,0.971384,0.000000,0.000000,0.237516 +230,0.971134,0.000000,0.000000,0.238533 +231,0.970884,0.000000,0.000000,0.239550 +232,0.970633,0.000000,0.000000,0.240567 +233,0.970380,0.000000,0.000000,0.241583 +234,0.970127,0.000000,0.000000,0.242599 +235,0.969872,0.000000,0.000000,0.243615 +236,0.969616,0.000000,0.000000,0.244631 +237,0.969360,0.000000,0.000000,0.245646 +238,0.969102,0.000000,0.000000,0.246661 +239,0.968843,0.000000,0.000000,0.247675 +240,0.968583,0.000000,0.000000,0.248690 +241,0.968322,0.000000,0.000000,0.249704 +242,0.968060,0.000000,0.000000,0.250718 +243,0.967797,0.000000,0.000000,0.251732 +244,0.967533,0.000000,0.000000,0.252745 +245,0.967268,0.000000,0.000000,0.253758 +246,0.967001,0.000000,0.000000,0.254771 +247,0.966734,0.000000,0.000000,0.255783 +248,0.966466,0.000000,0.000000,0.256795 +249,0.966196,0.000000,0.000000,0.257807 +250,0.965926,0.000000,0.000000,0.258819 +251,0.965654,0.000000,0.000000,0.259830 +252,0.965382,0.000000,0.000000,0.260842 +253,0.965108,0.000000,0.000000,0.261852 +254,0.964833,0.000000,0.000000,0.262863 +255,0.964557,0.000000,0.000000,0.263873 +256,0.964281,0.000000,0.000000,0.264883 +257,0.964003,0.000000,0.000000,0.265893 +258,0.963724,0.000000,0.000000,0.266902 +259,0.963444,0.000000,0.000000,0.267911 +260,0.963163,0.000000,0.000000,0.268920 +261,0.962880,0.000000,0.000000,0.269928 +262,0.962597,0.000000,0.000000,0.270936 +263,0.962313,0.000000,0.000000,0.271944 +264,0.962028,0.000000,0.000000,0.272952 +265,0.961741,0.000000,0.000000,0.273959 +266,0.961454,0.000000,0.000000,0.274966 +267,0.961165,0.000000,0.000000,0.275973 +268,0.960876,0.000000,0.000000,0.276979 +269,0.960585,0.000000,0.000000,0.277985 +270,0.960294,0.000000,0.000000,0.278991 +271,0.960001,0.000000,0.000000,0.279997 +272,0.959707,0.000000,0.000000,0.281002 +273,0.959412,0.000000,0.000000,0.282007 +274,0.959117,0.000000,0.000000,0.283011 +275,0.958820,0.000000,0.000000,0.284015 +276,0.958522,0.000000,0.000000,0.285019 +277,0.958223,0.000000,0.000000,0.286023 +278,0.957923,0.000000,0.000000,0.287026 +279,0.957622,0.000000,0.000000,0.288029 +280,0.957319,0.000000,0.000000,0.289032 +281,0.957016,0.000000,0.000000,0.290034 +282,0.956712,0.000000,0.000000,0.291036 +283,0.956407,0.000000,0.000000,0.292038 +284,0.956100,0.000000,0.000000,0.293039 +285,0.955793,0.000000,0.000000,0.294040 +286,0.955485,0.000000,0.000000,0.295041 +287,0.955175,0.000000,0.000000,0.296041 +288,0.954865,0.000000,0.000000,0.297042 +289,0.954553,0.000000,0.000000,0.298041 +290,0.954240,0.000000,0.000000,0.299041 +291,0.953927,0.000000,0.000000,0.300040 +292,0.953612,0.000000,0.000000,0.301039 +293,0.953296,0.000000,0.000000,0.302037 +294,0.952979,0.000000,0.000000,0.303035 +295,0.952661,0.000000,0.000000,0.304033 +296,0.952343,0.000000,0.000000,0.305031 +297,0.952023,0.000000,0.000000,0.306028 +298,0.951702,0.000000,0.000000,0.307024 +299,0.951380,0.000000,0.000000,0.308021 +300,0.951057,0.000000,0.000000,0.309017 +301,0.950732,0.000000,0.000000,0.310013 +302,0.950407,0.000000,0.000000,0.311008 +303,0.950081,0.000000,0.000000,0.312003 +304,0.949754,0.000000,0.000000,0.312998 +305,0.949425,0.000000,0.000000,0.313992 +306,0.949096,0.000000,0.000000,0.314987 +307,0.948766,0.000000,0.000000,0.315980 +308,0.948434,0.000000,0.000000,0.316974 +309,0.948102,0.000000,0.000000,0.317967 +310,0.947768,0.000000,0.000000,0.318959 +311,0.947434,0.000000,0.000000,0.319952 +312,0.947098,0.000000,0.000000,0.320944 +313,0.946762,0.000000,0.000000,0.321935 +314,0.946424,0.000000,0.000000,0.322927 +315,0.946085,0.000000,0.000000,0.323917 +316,0.945746,0.000000,0.000000,0.324908 +317,0.945405,0.000000,0.000000,0.325898 +318,0.945063,0.000000,0.000000,0.326888 +319,0.944720,0.000000,0.000000,0.327878 +320,0.944376,0.000000,0.000000,0.328867 +321,0.944031,0.000000,0.000000,0.329855 +322,0.943686,0.000000,0.000000,0.330844 +323,0.943339,0.000000,0.000000,0.331832 +324,0.942991,0.000000,0.000000,0.332820 +325,0.942641,0.000000,0.000000,0.333807 +326,0.942291,0.000000,0.000000,0.334794 +327,0.941940,0.000000,0.000000,0.335780 +328,0.941588,0.000000,0.000000,0.336767 +329,0.941235,0.000000,0.000000,0.337752 +330,0.940881,0.000000,0.000000,0.338738 +331,0.940526,0.000000,0.000000,0.339723 +332,0.940169,0.000000,0.000000,0.340708 +333,0.939812,0.000000,0.000000,0.341692 +334,0.939454,0.000000,0.000000,0.342676 +335,0.939094,0.000000,0.000000,0.343660 +336,0.938734,0.000000,0.000000,0.344643 +337,0.938372,0.000000,0.000000,0.345626 +338,0.938010,0.000000,0.000000,0.346608 +339,0.937646,0.000000,0.000000,0.347590 +340,0.937282,0.000000,0.000000,0.348572 +341,0.936916,0.000000,0.000000,0.349553 +342,0.936550,0.000000,0.000000,0.350534 +343,0.936182,0.000000,0.000000,0.351515 +344,0.935814,0.000000,0.000000,0.352495 +345,0.935444,0.000000,0.000000,0.353475 +346,0.935073,0.000000,0.000000,0.354454 +347,0.934702,0.000000,0.000000,0.355433 +348,0.934329,0.000000,0.000000,0.356412 +349,0.933955,0.000000,0.000000,0.357390 +350,0.933580,0.000000,0.000000,0.358368 +351,0.933205,0.000000,0.000000,0.359345 +352,0.932828,0.000000,0.000000,0.360322 +353,0.932450,0.000000,0.000000,0.361299 +354,0.932071,0.000000,0.000000,0.362275 +355,0.931691,0.000000,0.000000,0.363251 +356,0.931310,0.000000,0.000000,0.364227 +357,0.930928,0.000000,0.000000,0.365202 +358,0.930545,0.000000,0.000000,0.366176 +359,0.930161,0.000000,0.000000,0.367151 +360,0.929776,0.000000,0.000000,0.368125 +361,0.929390,0.000000,0.000000,0.369098 +362,0.929003,0.000000,0.000000,0.370071 +363,0.928615,0.000000,0.000000,0.371044 +364,0.928226,0.000000,0.000000,0.372016 +365,0.927836,0.000000,0.000000,0.372988 +366,0.927445,0.000000,0.000000,0.373959 +367,0.927053,0.000000,0.000000,0.374930 +368,0.926660,0.000000,0.000000,0.375901 +369,0.926266,0.000000,0.000000,0.376871 +370,0.925871,0.000000,0.000000,0.377841 +371,0.925474,0.000000,0.000000,0.378810 +372,0.925077,0.000000,0.000000,0.379779 +373,0.924679,0.000000,0.000000,0.380748 +374,0.924280,0.000000,0.000000,0.381716 +375,0.923880,0.000000,0.000000,0.382683 +376,0.923478,0.000000,0.000000,0.383651 +377,0.923076,0.000000,0.000000,0.384618 +378,0.922673,0.000000,0.000000,0.385584 +379,0.922268,0.000000,0.000000,0.386550 +380,0.921863,0.000000,0.000000,0.387516 +381,0.921457,0.000000,0.000000,0.388481 +382,0.921050,0.000000,0.000000,0.389445 +383,0.920641,0.000000,0.000000,0.390410 +384,0.920232,0.000000,0.000000,0.391374 +385,0.919821,0.000000,0.000000,0.392337 +386,0.919410,0.000000,0.000000,0.393300 +387,0.918998,0.000000,0.000000,0.394263 +388,0.918584,0.000000,0.000000,0.395225 +389,0.918170,0.000000,0.000000,0.396187 +390,0.917755,0.000000,0.000000,0.397148 +391,0.917338,0.000000,0.000000,0.398109 +392,0.916921,0.000000,0.000000,0.399069 +393,0.916502,0.000000,0.000000,0.400029 +394,0.916083,0.000000,0.000000,0.400989 +395,0.915663,0.000000,0.000000,0.401948 +396,0.915241,0.000000,0.000000,0.402906 +397,0.914819,0.000000,0.000000,0.403865 +398,0.914395,0.000000,0.000000,0.404822 +399,0.913971,0.000000,0.000000,0.405780 +400,0.913545,0.000000,0.000000,0.406737 +401,0.913119,0.000000,0.000000,0.407693 +402,0.912692,0.000000,0.000000,0.408649 +403,0.912263,0.000000,0.000000,0.409605 +404,0.911834,0.000000,0.000000,0.410560 +405,0.911403,0.000000,0.000000,0.411514 +406,0.910972,0.000000,0.000000,0.412469 +407,0.910539,0.000000,0.000000,0.413422 +408,0.910106,0.000000,0.000000,0.414376 +409,0.909672,0.000000,0.000000,0.415328 +410,0.909236,0.000000,0.000000,0.416281 +411,0.908800,0.000000,0.000000,0.417233 +412,0.908362,0.000000,0.000000,0.418184 +413,0.907924,0.000000,0.000000,0.419135 +414,0.907484,0.000000,0.000000,0.420086 +415,0.907044,0.000000,0.000000,0.421036 +416,0.906603,0.000000,0.000000,0.421985 +417,0.906160,0.000000,0.000000,0.422935 +418,0.905717,0.000000,0.000000,0.423883 +419,0.905272,0.000000,0.000000,0.424832 +420,0.904827,0.000000,0.000000,0.425779 +421,0.904381,0.000000,0.000000,0.426727 +422,0.903933,0.000000,0.000000,0.427673 +423,0.903485,0.000000,0.000000,0.428620 +424,0.903036,0.000000,0.000000,0.429566 +425,0.902585,0.000000,0.000000,0.430511 +426,0.902134,0.000000,0.000000,0.431456 +427,0.901682,0.000000,0.000000,0.432401 +428,0.901228,0.000000,0.000000,0.433345 +429,0.900774,0.000000,0.000000,0.434288 +430,0.900319,0.000000,0.000000,0.435231 +431,0.899863,0.000000,0.000000,0.436174 +432,0.899405,0.000000,0.000000,0.437116 +433,0.898947,0.000000,0.000000,0.438057 +434,0.898488,0.000000,0.000000,0.438999 +435,0.898028,0.000000,0.000000,0.439939 +436,0.897566,0.000000,0.000000,0.440879 +437,0.897104,0.000000,0.000000,0.441819 +438,0.896641,0.000000,0.000000,0.442758 +439,0.896177,0.000000,0.000000,0.443697 +440,0.895712,0.000000,0.000000,0.444635 +441,0.895246,0.000000,0.000000,0.445573 +442,0.894779,0.000000,0.000000,0.446510 +443,0.894310,0.000000,0.000000,0.447447 +444,0.893841,0.000000,0.000000,0.448383 +445,0.893371,0.000000,0.000000,0.449319 +446,0.892900,0.000000,0.000000,0.450254 +447,0.892428,0.000000,0.000000,0.451189 +448,0.891955,0.000000,0.000000,0.452123 +449,0.891481,0.000000,0.000000,0.453057 +450,0.891007,0.000000,0.000000,0.453990 +451,0.890531,0.000000,0.000000,0.454923 +452,0.890054,0.000000,0.000000,0.455856 +453,0.889576,0.000000,0.000000,0.456787 +454,0.889097,0.000000,0.000000,0.457719 +455,0.888617,0.000000,0.000000,0.458650 +456,0.888136,0.000000,0.000000,0.459580 +457,0.887655,0.000000,0.000000,0.460510 +458,0.887172,0.000000,0.000000,0.461439 +459,0.886688,0.000000,0.000000,0.462368 +460,0.886204,0.000000,0.000000,0.463296 +461,0.885718,0.000000,0.000000,0.464224 +462,0.885231,0.000000,0.000000,0.465151 +463,0.884744,0.000000,0.000000,0.466078 +464,0.884255,0.000000,0.000000,0.467004 +465,0.883766,0.000000,0.000000,0.467930 +466,0.883275,0.000000,0.000000,0.468855 +467,0.882784,0.000000,0.000000,0.469780 +468,0.882291,0.000000,0.000000,0.470704 +469,0.881798,0.000000,0.000000,0.471628 +470,0.881303,0.000000,0.000000,0.472551 +471,0.880808,0.000000,0.000000,0.473473 +472,0.880312,0.000000,0.000000,0.474396 +473,0.879815,0.000000,0.000000,0.475317 +474,0.879316,0.000000,0.000000,0.476238 +475,0.878817,0.000000,0.000000,0.477159 +476,0.878317,0.000000,0.000000,0.478079 +477,0.877816,0.000000,0.000000,0.478998 +478,0.877314,0.000000,0.000000,0.479917 +479,0.876811,0.000000,0.000000,0.480836 +480,0.876307,0.000000,0.000000,0.481754 +481,0.875802,0.000000,0.000000,0.482671 +482,0.875296,0.000000,0.000000,0.483588 +483,0.874789,0.000000,0.000000,0.484504 +484,0.874281,0.000000,0.000000,0.485420 +485,0.873772,0.000000,0.000000,0.486335 +486,0.873262,0.000000,0.000000,0.487250 +487,0.872752,0.000000,0.000000,0.488164 +488,0.872240,0.000000,0.000000,0.489078 +489,0.871727,0.000000,0.000000,0.489991 +490,0.871214,0.000000,0.000000,0.490904 +491,0.870699,0.000000,0.000000,0.491816 +492,0.870184,0.000000,0.000000,0.492727 +493,0.869667,0.000000,0.000000,0.493638 +494,0.869150,0.000000,0.000000,0.494549 +495,0.868632,0.000000,0.000000,0.495459 +496,0.868112,0.000000,0.000000,0.496368 +497,0.867592,0.000000,0.000000,0.497277 +498,0.867071,0.000000,0.000000,0.498185 +499,0.866549,0.000000,0.000000,0.499093 +500,0.866025,0.000000,0.000000,0.500000 +501,0.865501,0.000000,0.000000,0.500907 +502,0.864976,0.000000,0.000000,0.501813 +503,0.864450,0.000000,0.000000,0.502718 +504,0.863923,0.000000,0.000000,0.503623 +505,0.863396,0.000000,0.000000,0.504528 +506,0.862867,0.000000,0.000000,0.505431 +507,0.862337,0.000000,0.000000,0.506335 +508,0.861806,0.000000,0.000000,0.507238 +509,0.861275,0.000000,0.000000,0.508140 +510,0.860742,0.000000,0.000000,0.509041 +511,0.860208,0.000000,0.000000,0.509943 +512,0.859674,0.000000,0.000000,0.510843 +513,0.859139,0.000000,0.000000,0.511743 +514,0.858602,0.000000,0.000000,0.512642 +515,0.858065,0.000000,0.000000,0.513541 +516,0.857527,0.000000,0.000000,0.514440 +517,0.856987,0.000000,0.000000,0.515337 +518,0.856447,0.000000,0.000000,0.516234 +519,0.855906,0.000000,0.000000,0.517131 +520,0.855364,0.000000,0.000000,0.518027 +521,0.854821,0.000000,0.000000,0.518922 +522,0.854277,0.000000,0.000000,0.519817 +523,0.853733,0.000000,0.000000,0.520712 +524,0.853187,0.000000,0.000000,0.521605 +525,0.852640,0.000000,0.000000,0.522499 +526,0.852093,0.000000,0.000000,0.523391 +527,0.851544,0.000000,0.000000,0.524283 +528,0.850994,0.000000,0.000000,0.525175 +529,0.850444,0.000000,0.000000,0.526066 +530,0.849893,0.000000,0.000000,0.526956 +531,0.849340,0.000000,0.000000,0.527846 +532,0.848787,0.000000,0.000000,0.528735 +533,0.848233,0.000000,0.000000,0.529623 +534,0.847678,0.000000,0.000000,0.530511 +535,0.847122,0.000000,0.000000,0.531399 +536,0.846565,0.000000,0.000000,0.532285 +537,0.846007,0.000000,0.000000,0.533172 +538,0.845448,0.000000,0.000000,0.534057 +539,0.844889,0.000000,0.000000,0.534942 +540,0.844328,0.000000,0.000000,0.535827 +541,0.843766,0.000000,0.000000,0.536711 +542,0.843204,0.000000,0.000000,0.537594 +543,0.842640,0.000000,0.000000,0.538477 +544,0.842076,0.000000,0.000000,0.539359 +545,0.841511,0.000000,0.000000,0.540240 +546,0.840945,0.000000,0.000000,0.541121 +547,0.840377,0.000000,0.000000,0.542002 +548,0.839809,0.000000,0.000000,0.542881 +549,0.839240,0.000000,0.000000,0.543760 +550,0.838671,0.000000,0.000000,0.544639 +551,0.838100,0.000000,0.000000,0.545517 +552,0.837528,0.000000,0.000000,0.546394 +553,0.836955,0.000000,0.000000,0.547271 +554,0.836382,0.000000,0.000000,0.548147 +555,0.835807,0.000000,0.000000,0.549023 +556,0.835232,0.000000,0.000000,0.549898 +557,0.834656,0.000000,0.000000,0.550772 +558,0.834078,0.000000,0.000000,0.551646 +559,0.833500,0.000000,0.000000,0.552519 +560,0.832921,0.000000,0.000000,0.553392 +561,0.832341,0.000000,0.000000,0.554263 +562,0.831760,0.000000,0.000000,0.555135 +563,0.831179,0.000000,0.000000,0.556006 +564,0.830596,0.000000,0.000000,0.556876 +565,0.830012,0.000000,0.000000,0.557745 +566,0.829428,0.000000,0.000000,0.558614 +567,0.828842,0.000000,0.000000,0.559482 +568,0.828256,0.000000,0.000000,0.560350 +569,0.827669,0.000000,0.000000,0.561217 +570,0.827081,0.000000,0.000000,0.562083 +571,0.826492,0.000000,0.000000,0.562949 +572,0.825902,0.000000,0.000000,0.563814 +573,0.825311,0.000000,0.000000,0.564679 +574,0.824719,0.000000,0.000000,0.565543 +575,0.824126,0.000000,0.000000,0.566406 +576,0.823533,0.000000,0.000000,0.567269 +577,0.822938,0.000000,0.000000,0.568131 +578,0.822343,0.000000,0.000000,0.568993 +579,0.821746,0.000000,0.000000,0.569853 +580,0.821149,0.000000,0.000000,0.570714 +581,0.820551,0.000000,0.000000,0.571573 +582,0.819952,0.000000,0.000000,0.572432 +583,0.819352,0.000000,0.000000,0.573290 +584,0.818751,0.000000,0.000000,0.574148 +585,0.818150,0.000000,0.000000,0.575005 +586,0.817547,0.000000,0.000000,0.575862 +587,0.816944,0.000000,0.000000,0.576718 +588,0.816339,0.000000,0.000000,0.577573 +589,0.815734,0.000000,0.000000,0.578427 +590,0.815128,0.000000,0.000000,0.579281 +591,0.814521,0.000000,0.000000,0.580134 +592,0.813913,0.000000,0.000000,0.580987 +593,0.813304,0.000000,0.000000,0.581839 +594,0.812694,0.000000,0.000000,0.582690 +595,0.812084,0.000000,0.000000,0.583541 +596,0.811472,0.000000,0.000000,0.584391 +597,0.810860,0.000000,0.000000,0.585241 +598,0.810246,0.000000,0.000000,0.586090 +599,0.809632,0.000000,0.000000,0.586938 +600,0.809017,0.000000,0.000000,0.587785 +601,0.808401,0.000000,0.000000,0.588632 +602,0.807784,0.000000,0.000000,0.589478 +603,0.807166,0.000000,0.000000,0.590324 +604,0.806548,0.000000,0.000000,0.591169 +605,0.805928,0.000000,0.000000,0.592013 +606,0.805308,0.000000,0.000000,0.592857 +607,0.804687,0.000000,0.000000,0.593700 +608,0.804064,0.000000,0.000000,0.594542 +609,0.803441,0.000000,0.000000,0.595384 +610,0.802817,0.000000,0.000000,0.596225 +611,0.802193,0.000000,0.000000,0.597065 +612,0.801567,0.000000,0.000000,0.597905 +613,0.800940,0.000000,0.000000,0.598744 +614,0.800313,0.000000,0.000000,0.599582 +615,0.799685,0.000000,0.000000,0.600420 +616,0.799055,0.000000,0.000000,0.601257 +617,0.798425,0.000000,0.000000,0.602094 +618,0.797794,0.000000,0.000000,0.602930 +619,0.797163,0.000000,0.000000,0.603765 +620,0.796530,0.000000,0.000000,0.604599 +621,0.795896,0.000000,0.000000,0.605433 +622,0.795262,0.000000,0.000000,0.606266 +623,0.794627,0.000000,0.000000,0.607098 +624,0.793990,0.000000,0.000000,0.607930 +625,0.793353,0.000000,0.000000,0.608761 +626,0.792715,0.000000,0.000000,0.609592 +627,0.792077,0.000000,0.000000,0.610422 +628,0.791437,0.000000,0.000000,0.611251 +629,0.790796,0.000000,0.000000,0.612079 +630,0.790155,0.000000,0.000000,0.612907 +631,0.789513,0.000000,0.000000,0.613734 +632,0.788870,0.000000,0.000000,0.614561 +633,0.788226,0.000000,0.000000,0.615386 +634,0.787581,0.000000,0.000000,0.616211 +635,0.786935,0.000000,0.000000,0.617036 +636,0.786288,0.000000,0.000000,0.617860 +637,0.785641,0.000000,0.000000,0.618683 +638,0.784993,0.000000,0.000000,0.619505 +639,0.784343,0.000000,0.000000,0.620327 +640,0.783693,0.000000,0.000000,0.621148 +641,0.783043,0.000000,0.000000,0.621968 +642,0.782391,0.000000,0.000000,0.622788 +643,0.781738,0.000000,0.000000,0.623607 +644,0.781085,0.000000,0.000000,0.624425 +645,0.780430,0.000000,0.000000,0.625243 +646,0.779775,0.000000,0.000000,0.626060 +647,0.779119,0.000000,0.000000,0.626876 +648,0.778462,0.000000,0.000000,0.627691 +649,0.777805,0.000000,0.000000,0.628506 +650,0.777146,0.000000,0.000000,0.629320 +651,0.776487,0.000000,0.000000,0.630134 +652,0.775826,0.000000,0.000000,0.630947 +653,0.775165,0.000000,0.000000,0.631759 +654,0.774503,0.000000,0.000000,0.632570 +655,0.773840,0.000000,0.000000,0.633381 +656,0.773177,0.000000,0.000000,0.634191 +657,0.772512,0.000000,0.000000,0.635000 +658,0.771847,0.000000,0.000000,0.635809 +659,0.771180,0.000000,0.000000,0.636617 +660,0.770513,0.000000,0.000000,0.637424 +661,0.769845,0.000000,0.000000,0.638231 +662,0.769177,0.000000,0.000000,0.639036 +663,0.768507,0.000000,0.000000,0.639841 +664,0.767836,0.000000,0.000000,0.640646 +665,0.767165,0.000000,0.000000,0.641450 +666,0.766493,0.000000,0.000000,0.642253 +667,0.765820,0.000000,0.000000,0.643055 +668,0.765146,0.000000,0.000000,0.643857 +669,0.764472,0.000000,0.000000,0.644657 +670,0.763796,0.000000,0.000000,0.645458 +671,0.763120,0.000000,0.000000,0.646257 +672,0.762443,0.000000,0.000000,0.647056 +673,0.761764,0.000000,0.000000,0.647854 +674,0.761086,0.000000,0.000000,0.648651 +675,0.760406,0.000000,0.000000,0.649448 +676,0.759725,0.000000,0.000000,0.650244 +677,0.759044,0.000000,0.000000,0.651039 +678,0.758362,0.000000,0.000000,0.651834 +679,0.757679,0.000000,0.000000,0.652628 +680,0.756995,0.000000,0.000000,0.653421 +681,0.756310,0.000000,0.000000,0.654213 +682,0.755625,0.000000,0.000000,0.655005 +683,0.754939,0.000000,0.000000,0.655796 +684,0.754251,0.000000,0.000000,0.656586 +685,0.753563,0.000000,0.000000,0.657375 +686,0.752875,0.000000,0.000000,0.658164 +687,0.752185,0.000000,0.000000,0.658952 +688,0.751494,0.000000,0.000000,0.659739 +689,0.750803,0.000000,0.000000,0.660526 +690,0.750111,0.000000,0.000000,0.661312 +691,0.749418,0.000000,0.000000,0.662097 +692,0.748724,0.000000,0.000000,0.662881 +693,0.748030,0.000000,0.000000,0.663665 +694,0.747334,0.000000,0.000000,0.664448 +695,0.746638,0.000000,0.000000,0.665230 +696,0.745941,0.000000,0.000000,0.666012 +697,0.745243,0.000000,0.000000,0.666793 +698,0.744545,0.000000,0.000000,0.667573 +699,0.743845,0.000000,0.000000,0.668352 +700,0.743145,0.000000,0.000000,0.669131 +701,0.742444,0.000000,0.000000,0.669908 +702,0.741742,0.000000,0.000000,0.670686 +703,0.741039,0.000000,0.000000,0.671462 +704,0.740335,0.000000,0.000000,0.672238 +705,0.739631,0.000000,0.000000,0.673013 +706,0.738926,0.000000,0.000000,0.673787 +707,0.738220,0.000000,0.000000,0.674560 +708,0.737513,0.000000,0.000000,0.675333 +709,0.736806,0.000000,0.000000,0.676105 +710,0.736097,0.000000,0.000000,0.676876 +711,0.735388,0.000000,0.000000,0.677646 +712,0.734678,0.000000,0.000000,0.678416 +713,0.733967,0.000000,0.000000,0.679185 +714,0.733255,0.000000,0.000000,0.679953 +715,0.732543,0.000000,0.000000,0.680721 +716,0.731830,0.000000,0.000000,0.681488 +717,0.731116,0.000000,0.000000,0.682254 +718,0.730401,0.000000,0.000000,0.683019 +719,0.729685,0.000000,0.000000,0.683783 +720,0.728969,0.000000,0.000000,0.684547 +721,0.728251,0.000000,0.000000,0.685310 +722,0.727533,0.000000,0.000000,0.686072 +723,0.726814,0.000000,0.000000,0.686834 +724,0.726095,0.000000,0.000000,0.687595 +725,0.725374,0.000000,0.000000,0.688355 +726,0.724653,0.000000,0.000000,0.689114 +727,0.723931,0.000000,0.000000,0.689872 +728,0.723208,0.000000,0.000000,0.690630 +729,0.722485,0.000000,0.000000,0.691387 +730,0.721760,0.000000,0.000000,0.692143 +731,0.721035,0.000000,0.000000,0.692899 +732,0.720309,0.000000,0.000000,0.693653 +733,0.719582,0.000000,0.000000,0.694407 +734,0.718855,0.000000,0.000000,0.695160 +735,0.718126,0.000000,0.000000,0.695913 +736,0.717397,0.000000,0.000000,0.696664 +737,0.716667,0.000000,0.000000,0.697415 +738,0.715936,0.000000,0.000000,0.698165 +739,0.715205,0.000000,0.000000,0.698915 +740,0.714473,0.000000,0.000000,0.699663 +741,0.713740,0.000000,0.000000,0.700411 +742,0.713006,0.000000,0.000000,0.701158 +743,0.712271,0.000000,0.000000,0.701904 +744,0.711536,0.000000,0.000000,0.702650 +745,0.710799,0.000000,0.000000,0.703395 +746,0.710062,0.000000,0.000000,0.704139 +747,0.709325,0.000000,0.000000,0.704882 +748,0.708586,0.000000,0.000000,0.705624 +749,0.707847,0.000000,0.000000,0.706366 +750,0.707107,0.000000,0.000000,0.707107 +751,0.706366,0.000000,0.000000,0.707847 +752,0.705624,0.000000,0.000000,0.708586 +753,0.704882,0.000000,0.000000,0.709325 +754,0.704139,0.000000,0.000000,0.710062 +755,0.703395,0.000000,0.000000,0.710799 +756,0.702650,0.000000,0.000000,0.711536 +757,0.701904,0.000000,0.000000,0.712271 +758,0.701158,0.000000,0.000000,0.713006 +759,0.700411,0.000000,0.000000,0.713740 +760,0.699663,0.000000,0.000000,0.714473 +761,0.698915,0.000000,0.000000,0.715205 +762,0.698165,0.000000,0.000000,0.715936 +763,0.697415,0.000000,0.000000,0.716667 +764,0.696664,0.000000,0.000000,0.717397 +765,0.695913,0.000000,0.000000,0.718126 +766,0.695160,0.000000,0.000000,0.718855 +767,0.694407,0.000000,0.000000,0.719582 +768,0.693653,0.000000,0.000000,0.720309 +769,0.692899,0.000000,0.000000,0.721035 +770,0.692143,0.000000,0.000000,0.721760 +771,0.691387,0.000000,0.000000,0.722485 +772,0.690630,0.000000,0.000000,0.723208 +773,0.689872,0.000000,0.000000,0.723931 +774,0.689114,0.000000,0.000000,0.724653 +775,0.688355,0.000000,0.000000,0.725374 +776,0.687595,0.000000,0.000000,0.726095 +777,0.686834,0.000000,0.000000,0.726814 +778,0.686072,0.000000,0.000000,0.727533 +779,0.685310,0.000000,0.000000,0.728251 +780,0.684547,0.000000,0.000000,0.728969 +781,0.683783,0.000000,0.000000,0.729685 +782,0.683019,0.000000,0.000000,0.730401 +783,0.682254,0.000000,0.000000,0.731116 +784,0.681488,0.000000,0.000000,0.731830 +785,0.680721,0.000000,0.000000,0.732543 +786,0.679953,0.000000,0.000000,0.733255 +787,0.679185,0.000000,0.000000,0.733967 +788,0.678416,0.000000,0.000000,0.734678 +789,0.677646,0.000000,0.000000,0.735388 +790,0.676876,0.000000,0.000000,0.736097 +791,0.676105,0.000000,0.000000,0.736806 +792,0.675333,0.000000,0.000000,0.737513 +793,0.674560,0.000000,0.000000,0.738220 +794,0.673787,0.000000,0.000000,0.738926 +795,0.673013,0.000000,0.000000,0.739631 +796,0.672238,0.000000,0.000000,0.740335 +797,0.671462,0.000000,0.000000,0.741039 +798,0.670686,0.000000,0.000000,0.741742 +799,0.669908,0.000000,0.000000,0.742444 +800,0.669131,0.000000,0.000000,0.743145 +801,0.668352,0.000000,0.000000,0.743845 +802,0.667573,0.000000,0.000000,0.744545 +803,0.666793,0.000000,0.000000,0.745243 +804,0.666012,0.000000,0.000000,0.745941 +805,0.665230,0.000000,0.000000,0.746638 +806,0.664448,0.000000,0.000000,0.747334 +807,0.663665,0.000000,0.000000,0.748030 +808,0.662881,0.000000,0.000000,0.748724 +809,0.662097,0.000000,0.000000,0.749418 +810,0.661312,0.000000,0.000000,0.750111 +811,0.660526,0.000000,0.000000,0.750803 +812,0.659739,0.000000,0.000000,0.751494 +813,0.658952,0.000000,0.000000,0.752185 +814,0.658164,0.000000,0.000000,0.752875 +815,0.657375,0.000000,0.000000,0.753563 +816,0.656586,0.000000,0.000000,0.754251 +817,0.655796,0.000000,0.000000,0.754939 +818,0.655005,0.000000,0.000000,0.755625 +819,0.654213,0.000000,0.000000,0.756310 +820,0.653421,0.000000,0.000000,0.756995 +821,0.652628,0.000000,0.000000,0.757679 +822,0.651834,0.000000,0.000000,0.758362 +823,0.651039,0.000000,0.000000,0.759044 +824,0.650244,0.000000,0.000000,0.759725 +825,0.649448,0.000000,0.000000,0.760406 +826,0.648651,0.000000,0.000000,0.761086 +827,0.647854,0.000000,0.000000,0.761764 +828,0.647056,0.000000,0.000000,0.762443 +829,0.646257,0.000000,0.000000,0.763120 +830,0.645458,0.000000,0.000000,0.763796 +831,0.644657,0.000000,0.000000,0.764472 +832,0.643857,0.000000,0.000000,0.765146 +833,0.643055,0.000000,0.000000,0.765820 +834,0.642253,0.000000,0.000000,0.766493 +835,0.641450,0.000000,0.000000,0.767165 +836,0.640646,0.000000,0.000000,0.767836 +837,0.639841,0.000000,0.000000,0.768507 +838,0.639036,0.000000,0.000000,0.769177 +839,0.638231,0.000000,0.000000,0.769845 +840,0.637424,0.000000,0.000000,0.770513 +841,0.636617,0.000000,0.000000,0.771180 +842,0.635809,0.000000,0.000000,0.771847 +843,0.635000,0.000000,0.000000,0.772512 +844,0.634191,0.000000,0.000000,0.773177 +845,0.633381,0.000000,0.000000,0.773840 +846,0.632570,0.000000,0.000000,0.774503 +847,0.631759,0.000000,0.000000,0.775165 +848,0.630947,0.000000,0.000000,0.775826 +849,0.630134,0.000000,0.000000,0.776487 +850,0.629320,0.000000,0.000000,0.777146 +851,0.628506,0.000000,0.000000,0.777805 +852,0.627691,0.000000,0.000000,0.778462 +853,0.626876,0.000000,0.000000,0.779119 +854,0.626060,0.000000,0.000000,0.779775 +855,0.625243,0.000000,0.000000,0.780430 +856,0.624425,0.000000,0.000000,0.781085 +857,0.623607,0.000000,0.000000,0.781738 +858,0.622788,0.000000,0.000000,0.782391 +859,0.621968,0.000000,0.000000,0.783043 +860,0.621148,0.000000,0.000000,0.783693 +861,0.620327,0.000000,0.000000,0.784343 +862,0.619505,0.000000,0.000000,0.784993 +863,0.618683,0.000000,0.000000,0.785641 +864,0.617860,0.000000,0.000000,0.786288 +865,0.617036,0.000000,0.000000,0.786935 +866,0.616211,0.000000,0.000000,0.787581 +867,0.615386,0.000000,0.000000,0.788226 +868,0.614561,0.000000,0.000000,0.788870 +869,0.613734,0.000000,0.000000,0.789513 +870,0.612907,0.000000,0.000000,0.790155 +871,0.612079,0.000000,0.000000,0.790796 +872,0.611251,0.000000,0.000000,0.791437 +873,0.610422,0.000000,0.000000,0.792077 +874,0.609592,0.000000,0.000000,0.792715 +875,0.608761,0.000000,0.000000,0.793353 +876,0.607930,0.000000,0.000000,0.793990 +877,0.607098,0.000000,0.000000,0.794627 +878,0.606266,0.000000,0.000000,0.795262 +879,0.605433,0.000000,0.000000,0.795896 +880,0.604599,0.000000,0.000000,0.796530 +881,0.603765,0.000000,0.000000,0.797163 +882,0.602930,0.000000,0.000000,0.797794 +883,0.602094,0.000000,0.000000,0.798425 +884,0.601257,0.000000,0.000000,0.799055 +885,0.600420,0.000000,0.000000,0.799685 +886,0.599582,0.000000,0.000000,0.800313 +887,0.598744,0.000000,0.000000,0.800940 +888,0.597905,0.000000,0.000000,0.801567 +889,0.597065,0.000000,0.000000,0.802193 +890,0.596225,0.000000,0.000000,0.802817 +891,0.595384,0.000000,0.000000,0.803441 +892,0.594542,0.000000,0.000000,0.804064 +893,0.593700,0.000000,0.000000,0.804687 +894,0.592857,0.000000,0.000000,0.805308 +895,0.592013,0.000000,0.000000,0.805928 +896,0.591169,0.000000,0.000000,0.806548 +897,0.590324,0.000000,0.000000,0.807166 +898,0.589478,0.000000,0.000000,0.807784 +899,0.588632,0.000000,0.000000,0.808401 +900,0.587785,0.000000,0.000000,0.809017 +901,0.586938,0.000000,0.000000,0.809632 +902,0.586090,0.000000,0.000000,0.810246 +903,0.585241,0.000000,0.000000,0.810860 +904,0.584391,0.000000,0.000000,0.811472 +905,0.583541,0.000000,0.000000,0.812084 +906,0.582690,0.000000,0.000000,0.812694 +907,0.581839,0.000000,0.000000,0.813304 +908,0.580987,0.000000,0.000000,0.813913 +909,0.580134,0.000000,0.000000,0.814521 +910,0.579281,0.000000,0.000000,0.815128 +911,0.578427,0.000000,0.000000,0.815734 +912,0.577573,0.000000,0.000000,0.816339 +913,0.576718,0.000000,0.000000,0.816944 +914,0.575862,0.000000,0.000000,0.817547 +915,0.575005,0.000000,0.000000,0.818150 +916,0.574148,0.000000,0.000000,0.818751 +917,0.573290,0.000000,0.000000,0.819352 +918,0.572432,0.000000,0.000000,0.819952 +919,0.571573,0.000000,0.000000,0.820551 +920,0.570714,0.000000,0.000000,0.821149 +921,0.569853,0.000000,0.000000,0.821746 +922,0.568993,0.000000,0.000000,0.822343 +923,0.568131,0.000000,0.000000,0.822938 +924,0.567269,0.000000,0.000000,0.823533 +925,0.566406,0.000000,0.000000,0.824126 +926,0.565543,0.000000,0.000000,0.824719 +927,0.564679,0.000000,0.000000,0.825311 +928,0.563814,0.000000,0.000000,0.825902 +929,0.562949,0.000000,0.000000,0.826492 +930,0.562083,0.000000,0.000000,0.827081 +931,0.561217,0.000000,0.000000,0.827669 +932,0.560350,0.000000,0.000000,0.828256 +933,0.559482,0.000000,0.000000,0.828842 +934,0.558614,0.000000,0.000000,0.829428 +935,0.557745,0.000000,0.000000,0.830012 +936,0.556876,0.000000,0.000000,0.830596 +937,0.556006,0.000000,0.000000,0.831179 +938,0.555135,0.000000,0.000000,0.831760 +939,0.554263,0.000000,0.000000,0.832341 +940,0.553392,0.000000,0.000000,0.832921 +941,0.552519,0.000000,0.000000,0.833500 +942,0.551646,0.000000,0.000000,0.834078 +943,0.550772,0.000000,0.000000,0.834656 +944,0.549898,0.000000,0.000000,0.835232 +945,0.549023,0.000000,0.000000,0.835807 +946,0.548147,0.000000,0.000000,0.836382 +947,0.547271,0.000000,0.000000,0.836955 +948,0.546394,0.000000,0.000000,0.837528 +949,0.545517,0.000000,0.000000,0.838100 +950,0.544639,0.000000,0.000000,0.838671 +951,0.543760,0.000000,0.000000,0.839240 +952,0.542881,0.000000,0.000000,0.839809 +953,0.542002,0.000000,0.000000,0.840377 +954,0.541121,0.000000,0.000000,0.840945 +955,0.540240,0.000000,0.000000,0.841511 +956,0.539359,0.000000,0.000000,0.842076 +957,0.538477,0.000000,0.000000,0.842640 +958,0.537594,0.000000,0.000000,0.843204 +959,0.536711,0.000000,0.000000,0.843766 +960,0.535827,0.000000,0.000000,0.844328 +961,0.534942,0.000000,0.000000,0.844889 +962,0.534057,0.000000,0.000000,0.845448 +963,0.533172,0.000000,0.000000,0.846007 +964,0.532285,0.000000,0.000000,0.846565 +965,0.531399,0.000000,0.000000,0.847122 +966,0.530511,0.000000,0.000000,0.847678 +967,0.529623,0.000000,0.000000,0.848233 +968,0.528735,0.000000,0.000000,0.848787 +969,0.527846,0.000000,0.000000,0.849340 +970,0.526956,0.000000,0.000000,0.849893 +971,0.526066,0.000000,0.000000,0.850444 +972,0.525175,0.000000,0.000000,0.850994 +973,0.524283,0.000000,0.000000,0.851544 +974,0.523391,0.000000,0.000000,0.852093 +975,0.522499,0.000000,0.000000,0.852640 +976,0.521605,0.000000,0.000000,0.853187 +977,0.520712,0.000000,0.000000,0.853733 +978,0.519817,0.000000,0.000000,0.854277 +979,0.518922,0.000000,0.000000,0.854821 +980,0.518027,0.000000,0.000000,0.855364 +981,0.517131,0.000000,0.000000,0.855906 +982,0.516234,0.000000,0.000000,0.856447 +983,0.515337,0.000000,0.000000,0.856987 +984,0.514440,0.000000,0.000000,0.857527 +985,0.513541,0.000000,0.000000,0.858065 +986,0.512642,0.000000,0.000000,0.858602 +987,0.511743,0.000000,0.000000,0.859139 +988,0.510843,0.000000,0.000000,0.859674 +989,0.509943,0.000000,0.000000,0.860208 +990,0.509041,0.000000,0.000000,0.860742 +991,0.508140,0.000000,0.000000,0.861275 +992,0.507238,0.000000,0.000000,0.861806 +993,0.506335,0.000000,0.000000,0.862337 +994,0.505431,0.000000,0.000000,0.862867 +995,0.504528,0.000000,0.000000,0.863396 +996,0.503623,0.000000,0.000000,0.863923 +997,0.502718,0.000000,0.000000,0.864450 +998,0.501813,0.000000,0.000000,0.864976 +999,0.500907,0.000000,0.000000,0.865501 +1000,0.500000,0.000000,0.000000,0.866025 +1001,0.499093,0.000000,0.000000,0.866549 +1002,0.498185,0.000000,0.000000,0.867071 +1003,0.497277,0.000000,0.000000,0.867592 +1004,0.496368,0.000000,0.000000,0.868112 +1005,0.495459,0.000000,0.000000,0.868632 +1006,0.494549,0.000000,0.000000,0.869150 +1007,0.493638,0.000000,0.000000,0.869667 +1008,0.492727,0.000000,0.000000,0.870184 +1009,0.491816,0.000000,0.000000,0.870699 +1010,0.490904,0.000000,0.000000,0.871214 +1011,0.489991,0.000000,0.000000,0.871727 +1012,0.489078,0.000000,0.000000,0.872240 +1013,0.488164,0.000000,0.000000,0.872752 +1014,0.487250,0.000000,0.000000,0.873262 +1015,0.486335,0.000000,0.000000,0.873772 +1016,0.485420,0.000000,0.000000,0.874281 +1017,0.484504,0.000000,0.000000,0.874789 +1018,0.483588,0.000000,0.000000,0.875296 +1019,0.482671,0.000000,0.000000,0.875802 +1020,0.481754,0.000000,0.000000,0.876307 +1021,0.480836,0.000000,0.000000,0.876811 +1022,0.479917,0.000000,0.000000,0.877314 +1023,0.478998,0.000000,0.000000,0.877816 +1024,0.478079,0.000000,0.000000,0.878317 +1025,0.477159,0.000000,0.000000,0.878817 +1026,0.476238,0.000000,0.000000,0.879316 +1027,0.475317,0.000000,0.000000,0.879815 +1028,0.474396,0.000000,0.000000,0.880312 +1029,0.473473,0.000000,0.000000,0.880808 +1030,0.472551,0.000000,0.000000,0.881303 +1031,0.471628,0.000000,0.000000,0.881798 +1032,0.470704,0.000000,0.000000,0.882291 +1033,0.469780,0.000000,0.000000,0.882784 +1034,0.468855,0.000000,0.000000,0.883275 +1035,0.467930,0.000000,0.000000,0.883766 +1036,0.467004,0.000000,0.000000,0.884255 +1037,0.466078,0.000000,0.000000,0.884744 +1038,0.465151,0.000000,0.000000,0.885231 +1039,0.464224,0.000000,0.000000,0.885718 +1040,0.463296,0.000000,0.000000,0.886204 +1041,0.462368,0.000000,0.000000,0.886688 +1042,0.461439,0.000000,0.000000,0.887172 +1043,0.460510,0.000000,0.000000,0.887655 +1044,0.459580,0.000000,0.000000,0.888136 +1045,0.458650,0.000000,0.000000,0.888617 +1046,0.457719,0.000000,0.000000,0.889097 +1047,0.456787,0.000000,0.000000,0.889576 +1048,0.455856,0.000000,0.000000,0.890054 +1049,0.454923,0.000000,0.000000,0.890531 +1050,0.453990,0.000000,0.000000,0.891007 +1051,0.453057,0.000000,0.000000,0.891481 +1052,0.452123,0.000000,0.000000,0.891955 +1053,0.451189,0.000000,0.000000,0.892428 +1054,0.450254,0.000000,0.000000,0.892900 +1055,0.449319,0.000000,0.000000,0.893371 +1056,0.448383,0.000000,0.000000,0.893841 +1057,0.447447,0.000000,0.000000,0.894310 +1058,0.446510,0.000000,0.000000,0.894779 +1059,0.445573,0.000000,0.000000,0.895246 +1060,0.444635,0.000000,0.000000,0.895712 +1061,0.443697,0.000000,0.000000,0.896177 +1062,0.442758,0.000000,0.000000,0.896641 +1063,0.441819,0.000000,0.000000,0.897104 +1064,0.440879,0.000000,0.000000,0.897566 +1065,0.439939,0.000000,0.000000,0.898028 +1066,0.438999,0.000000,0.000000,0.898488 +1067,0.438057,0.000000,0.000000,0.898947 +1068,0.437116,0.000000,0.000000,0.899405 +1069,0.436174,0.000000,0.000000,0.899863 +1070,0.435231,0.000000,0.000000,0.900319 +1071,0.434288,0.000000,0.000000,0.900774 +1072,0.433345,0.000000,0.000000,0.901228 +1073,0.432401,0.000000,0.000000,0.901682 +1074,0.431456,0.000000,0.000000,0.902134 +1075,0.430511,0.000000,0.000000,0.902585 +1076,0.429566,0.000000,0.000000,0.903036 +1077,0.428620,0.000000,0.000000,0.903485 +1078,0.427673,0.000000,0.000000,0.903933 +1079,0.426727,0.000000,0.000000,0.904381 +1080,0.425779,0.000000,0.000000,0.904827 +1081,0.424832,0.000000,0.000000,0.905272 +1082,0.423883,0.000000,0.000000,0.905717 +1083,0.422935,0.000000,0.000000,0.906160 +1084,0.421985,0.000000,0.000000,0.906603 +1085,0.421036,0.000000,0.000000,0.907044 +1086,0.420086,0.000000,0.000000,0.907484 +1087,0.419135,0.000000,0.000000,0.907924 +1088,0.418184,0.000000,0.000000,0.908362 +1089,0.417233,0.000000,0.000000,0.908800 +1090,0.416281,0.000000,0.000000,0.909236 +1091,0.415328,0.000000,0.000000,0.909672 +1092,0.414376,0.000000,0.000000,0.910106 +1093,0.413422,0.000000,0.000000,0.910539 +1094,0.412469,0.000000,0.000000,0.910972 +1095,0.411514,0.000000,0.000000,0.911403 +1096,0.410560,0.000000,0.000000,0.911834 +1097,0.409605,0.000000,0.000000,0.912263 +1098,0.408649,0.000000,0.000000,0.912692 +1099,0.407693,0.000000,0.000000,0.913119 +1100,0.406737,0.000000,0.000000,0.913545 +1101,0.405780,0.000000,0.000000,0.913971 +1102,0.404822,0.000000,0.000000,0.914395 +1103,0.403865,0.000000,0.000000,0.914819 +1104,0.402906,0.000000,0.000000,0.915241 +1105,0.401948,0.000000,0.000000,0.915663 +1106,0.400989,0.000000,0.000000,0.916083 +1107,0.400029,0.000000,0.000000,0.916502 +1108,0.399069,0.000000,0.000000,0.916921 +1109,0.398109,0.000000,0.000000,0.917338 +1110,0.397148,0.000000,0.000000,0.917755 +1111,0.396187,0.000000,0.000000,0.918170 +1112,0.395225,0.000000,0.000000,0.918584 +1113,0.394263,0.000000,0.000000,0.918998 +1114,0.393300,0.000000,0.000000,0.919410 +1115,0.392337,0.000000,0.000000,0.919821 +1116,0.391374,0.000000,0.000000,0.920232 +1117,0.390410,0.000000,0.000000,0.920641 +1118,0.389445,0.000000,0.000000,0.921050 +1119,0.388481,0.000000,0.000000,0.921457 +1120,0.387516,0.000000,0.000000,0.921863 +1121,0.386550,0.000000,0.000000,0.922268 +1122,0.385584,0.000000,0.000000,0.922673 +1123,0.384618,0.000000,0.000000,0.923076 +1124,0.383651,0.000000,0.000000,0.923478 +1125,0.382683,0.000000,0.000000,0.923880 +1126,0.381716,0.000000,0.000000,0.924280 +1127,0.380748,0.000000,0.000000,0.924679 +1128,0.379779,0.000000,0.000000,0.925077 +1129,0.378810,0.000000,0.000000,0.925474 +1130,0.377841,0.000000,0.000000,0.925871 +1131,0.376871,0.000000,0.000000,0.926266 +1132,0.375901,0.000000,0.000000,0.926660 +1133,0.374930,0.000000,0.000000,0.927053 +1134,0.373959,0.000000,0.000000,0.927445 +1135,0.372988,0.000000,0.000000,0.927836 +1136,0.372016,0.000000,0.000000,0.928226 +1137,0.371044,0.000000,0.000000,0.928615 +1138,0.370071,0.000000,0.000000,0.929003 +1139,0.369098,0.000000,0.000000,0.929390 +1140,0.368125,0.000000,0.000000,0.929776 +1141,0.367151,0.000000,0.000000,0.930161 +1142,0.366176,0.000000,0.000000,0.930545 +1143,0.365202,0.000000,0.000000,0.930928 +1144,0.364227,0.000000,0.000000,0.931310 +1145,0.363251,0.000000,0.000000,0.931691 +1146,0.362275,0.000000,0.000000,0.932071 +1147,0.361299,0.000000,0.000000,0.932450 +1148,0.360322,0.000000,0.000000,0.932828 +1149,0.359345,0.000000,0.000000,0.933205 +1150,0.358368,0.000000,0.000000,0.933580 +1151,0.357390,0.000000,0.000000,0.933955 +1152,0.356412,0.000000,0.000000,0.934329 +1153,0.355433,0.000000,0.000000,0.934702 +1154,0.354454,0.000000,0.000000,0.935073 +1155,0.353475,0.000000,0.000000,0.935444 +1156,0.352495,0.000000,0.000000,0.935814 +1157,0.351515,0.000000,0.000000,0.936182 +1158,0.350534,0.000000,0.000000,0.936550 +1159,0.349553,0.000000,0.000000,0.936916 +1160,0.348572,0.000000,0.000000,0.937282 +1161,0.347590,0.000000,0.000000,0.937646 +1162,0.346608,0.000000,0.000000,0.938010 +1163,0.345626,0.000000,0.000000,0.938372 +1164,0.344643,0.000000,0.000000,0.938734 +1165,0.343660,0.000000,0.000000,0.939094 +1166,0.342676,0.000000,0.000000,0.939454 +1167,0.341692,0.000000,0.000000,0.939812 +1168,0.340708,0.000000,0.000000,0.940169 +1169,0.339723,0.000000,0.000000,0.940526 +1170,0.338738,0.000000,0.000000,0.940881 +1171,0.337752,0.000000,0.000000,0.941235 +1172,0.336767,0.000000,0.000000,0.941588 +1173,0.335780,0.000000,0.000000,0.941940 +1174,0.334794,0.000000,0.000000,0.942291 +1175,0.333807,0.000000,0.000000,0.942641 +1176,0.332820,0.000000,0.000000,0.942991 +1177,0.331832,0.000000,0.000000,0.943339 +1178,0.330844,0.000000,0.000000,0.943686 +1179,0.329855,0.000000,0.000000,0.944031 +1180,0.328867,0.000000,0.000000,0.944376 +1181,0.327878,0.000000,0.000000,0.944720 +1182,0.326888,0.000000,0.000000,0.945063 +1183,0.325898,0.000000,0.000000,0.945405 +1184,0.324908,0.000000,0.000000,0.945746 +1185,0.323917,0.000000,0.000000,0.946085 +1186,0.322927,0.000000,0.000000,0.946424 +1187,0.321935,0.000000,0.000000,0.946762 +1188,0.320944,0.000000,0.000000,0.947098 +1189,0.319952,0.000000,0.000000,0.947434 +1190,0.318959,0.000000,0.000000,0.947768 +1191,0.317967,0.000000,0.000000,0.948102 +1192,0.316974,0.000000,0.000000,0.948434 +1193,0.315980,0.000000,0.000000,0.948766 +1194,0.314987,0.000000,0.000000,0.949096 +1195,0.313992,0.000000,0.000000,0.949425 +1196,0.312998,0.000000,0.000000,0.949754 +1197,0.312003,0.000000,0.000000,0.950081 +1198,0.311008,0.000000,0.000000,0.950407 +1199,0.310013,0.000000,0.000000,0.950732 +1200,0.309017,0.000000,0.000000,0.951057 +1201,0.308021,0.000000,0.000000,0.951380 +1202,0.307024,0.000000,0.000000,0.951702 +1203,0.306028,0.000000,0.000000,0.952023 +1204,0.305031,0.000000,0.000000,0.952343 +1205,0.304033,0.000000,0.000000,0.952661 +1206,0.303035,0.000000,0.000000,0.952979 +1207,0.302037,0.000000,0.000000,0.953296 +1208,0.301039,0.000000,0.000000,0.953612 +1209,0.300040,0.000000,0.000000,0.953927 +1210,0.299041,0.000000,0.000000,0.954240 +1211,0.298041,0.000000,0.000000,0.954553 +1212,0.297042,0.000000,0.000000,0.954865 +1213,0.296041,0.000000,0.000000,0.955175 +1214,0.295041,0.000000,0.000000,0.955485 +1215,0.294040,0.000000,0.000000,0.955793 +1216,0.293039,0.000000,0.000000,0.956100 +1217,0.292038,0.000000,0.000000,0.956407 +1218,0.291036,0.000000,0.000000,0.956712 +1219,0.290034,0.000000,0.000000,0.957016 +1220,0.289032,0.000000,0.000000,0.957319 +1221,0.288029,0.000000,0.000000,0.957622 +1222,0.287026,0.000000,0.000000,0.957923 +1223,0.286023,0.000000,0.000000,0.958223 +1224,0.285019,0.000000,0.000000,0.958522 +1225,0.284015,0.000000,0.000000,0.958820 +1226,0.283011,0.000000,0.000000,0.959117 +1227,0.282007,0.000000,0.000000,0.959412 +1228,0.281002,0.000000,0.000000,0.959707 +1229,0.279997,0.000000,0.000000,0.960001 +1230,0.278991,0.000000,0.000000,0.960294 +1231,0.277985,0.000000,0.000000,0.960585 +1232,0.276979,0.000000,0.000000,0.960876 +1233,0.275973,0.000000,0.000000,0.961165 +1234,0.274966,0.000000,0.000000,0.961454 +1235,0.273959,0.000000,0.000000,0.961741 +1236,0.272952,0.000000,0.000000,0.962028 +1237,0.271944,0.000000,0.000000,0.962313 +1238,0.270936,0.000000,0.000000,0.962597 +1239,0.269928,0.000000,0.000000,0.962880 +1240,0.268920,0.000000,0.000000,0.963163 +1241,0.267911,0.000000,0.000000,0.963444 +1242,0.266902,0.000000,0.000000,0.963724 +1243,0.265893,0.000000,0.000000,0.964003 +1244,0.264883,0.000000,0.000000,0.964281 +1245,0.263873,0.000000,0.000000,0.964557 +1246,0.262863,0.000000,0.000000,0.964833 +1247,0.261852,0.000000,0.000000,0.965108 +1248,0.260842,0.000000,0.000000,0.965382 +1249,0.259830,0.000000,0.000000,0.965654 +1250,0.258819,0.000000,0.000000,0.965926 +1251,0.257807,0.000000,0.000000,0.966196 +1252,0.256795,0.000000,0.000000,0.966466 +1253,0.255783,0.000000,0.000000,0.966734 +1254,0.254771,0.000000,0.000000,0.967001 +1255,0.253758,0.000000,0.000000,0.967268 +1256,0.252745,0.000000,0.000000,0.967533 +1257,0.251732,0.000000,0.000000,0.967797 +1258,0.250718,0.000000,0.000000,0.968060 +1259,0.249704,0.000000,0.000000,0.968322 +1260,0.248690,0.000000,0.000000,0.968583 +1261,0.247675,0.000000,0.000000,0.968843 +1262,0.246661,0.000000,0.000000,0.969102 +1263,0.245646,0.000000,0.000000,0.969360 +1264,0.244631,0.000000,0.000000,0.969616 +1265,0.243615,0.000000,0.000000,0.969872 +1266,0.242599,0.000000,0.000000,0.970127 +1267,0.241583,0.000000,0.000000,0.970380 +1268,0.240567,0.000000,0.000000,0.970633 +1269,0.239550,0.000000,0.000000,0.970884 +1270,0.238533,0.000000,0.000000,0.971134 +1271,0.237516,0.000000,0.000000,0.971384 +1272,0.236499,0.000000,0.000000,0.971632 +1273,0.235481,0.000000,0.000000,0.971879 +1274,0.234463,0.000000,0.000000,0.972125 +1275,0.233445,0.000000,0.000000,0.972370 +1276,0.232427,0.000000,0.000000,0.972614 +1277,0.231408,0.000000,0.000000,0.972857 +1278,0.230389,0.000000,0.000000,0.973099 +1279,0.229370,0.000000,0.000000,0.973339 +1280,0.228351,0.000000,0.000000,0.973579 +1281,0.227331,0.000000,0.000000,0.973817 +1282,0.226311,0.000000,0.000000,0.974055 +1283,0.225291,0.000000,0.000000,0.974291 +1284,0.224271,0.000000,0.000000,0.974527 +1285,0.223250,0.000000,0.000000,0.974761 +1286,0.222229,0.000000,0.000000,0.974994 +1287,0.221208,0.000000,0.000000,0.975227 +1288,0.220187,0.000000,0.000000,0.975458 +1289,0.219165,0.000000,0.000000,0.975688 +1290,0.218143,0.000000,0.000000,0.975917 +1291,0.217121,0.000000,0.000000,0.976145 +1292,0.216099,0.000000,0.000000,0.976371 +1293,0.215076,0.000000,0.000000,0.976597 +1294,0.214053,0.000000,0.000000,0.976822 +1295,0.213030,0.000000,0.000000,0.977046 +1296,0.212007,0.000000,0.000000,0.977268 +1297,0.210984,0.000000,0.000000,0.977490 +1298,0.209960,0.000000,0.000000,0.977710 +1299,0.208936,0.000000,0.000000,0.977929 +1300,0.207912,0.000000,0.000000,0.978148 +1301,0.206887,0.000000,0.000000,0.978365 +1302,0.205863,0.000000,0.000000,0.978581 +1303,0.204838,0.000000,0.000000,0.978796 +1304,0.203813,0.000000,0.000000,0.979010 +1305,0.202787,0.000000,0.000000,0.979223 +1306,0.201762,0.000000,0.000000,0.979435 +1307,0.200736,0.000000,0.000000,0.979645 +1308,0.199710,0.000000,0.000000,0.979855 +1309,0.198684,0.000000,0.000000,0.980064 +1310,0.197657,0.000000,0.000000,0.980271 +1311,0.196631,0.000000,0.000000,0.980478 +1312,0.195604,0.000000,0.000000,0.980683 +1313,0.194577,0.000000,0.000000,0.980887 +1314,0.193549,0.000000,0.000000,0.981091 +1315,0.192522,0.000000,0.000000,0.981293 +1316,0.191494,0.000000,0.000000,0.981494 +1317,0.190466,0.000000,0.000000,0.981694 +1318,0.189438,0.000000,0.000000,0.981893 +1319,0.188410,0.000000,0.000000,0.982090 +1320,0.187381,0.000000,0.000000,0.982287 +1321,0.186353,0.000000,0.000000,0.982483 +1322,0.185324,0.000000,0.000000,0.982678 +1323,0.184294,0.000000,0.000000,0.982871 +1324,0.183265,0.000000,0.000000,0.983064 +1325,0.182236,0.000000,0.000000,0.983255 +1326,0.181206,0.000000,0.000000,0.983445 +1327,0.180176,0.000000,0.000000,0.983634 +1328,0.179146,0.000000,0.000000,0.983823 +1329,0.178115,0.000000,0.000000,0.984010 +1330,0.177085,0.000000,0.000000,0.984196 +1331,0.176054,0.000000,0.000000,0.984381 +1332,0.175023,0.000000,0.000000,0.984564 +1333,0.173992,0.000000,0.000000,0.984747 +1334,0.172961,0.000000,0.000000,0.984929 +1335,0.171929,0.000000,0.000000,0.985109 +1336,0.170897,0.000000,0.000000,0.985289 +1337,0.169866,0.000000,0.000000,0.985467 +1338,0.168833,0.000000,0.000000,0.985645 +1339,0.167801,0.000000,0.000000,0.985821 +1340,0.166769,0.000000,0.000000,0.985996 +1341,0.165736,0.000000,0.000000,0.986170 +1342,0.164703,0.000000,0.000000,0.986343 +1343,0.163670,0.000000,0.000000,0.986515 +1344,0.162637,0.000000,0.000000,0.986686 +1345,0.161604,0.000000,0.000000,0.986856 +1346,0.160570,0.000000,0.000000,0.987024 +1347,0.159537,0.000000,0.000000,0.987192 +1348,0.158503,0.000000,0.000000,0.987359 +1349,0.157469,0.000000,0.000000,0.987524 +1350,0.156434,0.000000,0.000000,0.987688 +1351,0.155400,0.000000,0.000000,0.987852 +1352,0.154366,0.000000,0.000000,0.988014 +1353,0.153331,0.000000,0.000000,0.988175 +1354,0.152296,0.000000,0.000000,0.988335 +1355,0.151261,0.000000,0.000000,0.988494 +1356,0.150226,0.000000,0.000000,0.988652 +1357,0.149190,0.000000,0.000000,0.988809 +1358,0.148155,0.000000,0.000000,0.988964 +1359,0.147119,0.000000,0.000000,0.989119 +1360,0.146083,0.000000,0.000000,0.989272 +1361,0.145047,0.000000,0.000000,0.989425 +1362,0.144011,0.000000,0.000000,0.989576 +1363,0.142974,0.000000,0.000000,0.989726 +1364,0.141938,0.000000,0.000000,0.989876 +1365,0.140901,0.000000,0.000000,0.990024 +1366,0.139864,0.000000,0.000000,0.990171 +1367,0.138827,0.000000,0.000000,0.990317 +1368,0.137790,0.000000,0.000000,0.990461 +1369,0.136753,0.000000,0.000000,0.990605 +1370,0.135716,0.000000,0.000000,0.990748 +1371,0.134678,0.000000,0.000000,0.990889 +1372,0.133640,0.000000,0.000000,0.991030 +1373,0.132602,0.000000,0.000000,0.991169 +1374,0.131564,0.000000,0.000000,0.991308 +1375,0.130526,0.000000,0.000000,0.991445 +1376,0.129488,0.000000,0.000000,0.991581 +1377,0.128449,0.000000,0.000000,0.991716 +1378,0.127411,0.000000,0.000000,0.991850 +1379,0.126372,0.000000,0.000000,0.991983 +1380,0.125333,0.000000,0.000000,0.992115 +1381,0.124294,0.000000,0.000000,0.992245 +1382,0.123255,0.000000,0.000000,0.992375 +1383,0.122216,0.000000,0.000000,0.992504 +1384,0.121176,0.000000,0.000000,0.992631 +1385,0.120137,0.000000,0.000000,0.992757 +1386,0.119097,0.000000,0.000000,0.992883 +1387,0.118057,0.000000,0.000000,0.993007 +1388,0.117017,0.000000,0.000000,0.993130 +1389,0.115977,0.000000,0.000000,0.993252 +1390,0.114937,0.000000,0.000000,0.993373 +1391,0.113897,0.000000,0.000000,0.993493 +1392,0.112856,0.000000,0.000000,0.993611 +1393,0.111816,0.000000,0.000000,0.993729 +1394,0.110775,0.000000,0.000000,0.993845 +1395,0.109734,0.000000,0.000000,0.993961 +1396,0.108693,0.000000,0.000000,0.994075 +1397,0.107652,0.000000,0.000000,0.994189 +1398,0.106611,0.000000,0.000000,0.994301 +1399,0.105570,0.000000,0.000000,0.994412 +1400,0.104528,0.000000,0.000000,0.994522 +1401,0.103487,0.000000,0.000000,0.994631 +1402,0.102445,0.000000,0.000000,0.994739 +1403,0.101404,0.000000,0.000000,0.994845 +1404,0.100362,0.000000,0.000000,0.994951 +1405,0.099320,0.000000,0.000000,0.995056 +1406,0.098278,0.000000,0.000000,0.995159 +1407,0.097235,0.000000,0.000000,0.995261 +1408,0.096193,0.000000,0.000000,0.995363 +1409,0.095151,0.000000,0.000000,0.995463 +1410,0.094108,0.000000,0.000000,0.995562 +1411,0.093066,0.000000,0.000000,0.995660 +1412,0.092023,0.000000,0.000000,0.995757 +1413,0.090980,0.000000,0.000000,0.995853 +1414,0.089937,0.000000,0.000000,0.995947 +1415,0.088894,0.000000,0.000000,0.996041 +1416,0.087851,0.000000,0.000000,0.996134 +1417,0.086808,0.000000,0.000000,0.996225 +1418,0.085765,0.000000,0.000000,0.996315 +1419,0.084721,0.000000,0.000000,0.996405 +1420,0.083678,0.000000,0.000000,0.996493 +1421,0.082634,0.000000,0.000000,0.996580 +1422,0.081591,0.000000,0.000000,0.996666 +1423,0.080547,0.000000,0.000000,0.996751 +1424,0.079503,0.000000,0.000000,0.996835 +1425,0.078459,0.000000,0.000000,0.996917 +1426,0.077415,0.000000,0.000000,0.996999 +1427,0.076371,0.000000,0.000000,0.997079 +1428,0.075327,0.000000,0.000000,0.997159 +1429,0.074283,0.000000,0.000000,0.997237 +1430,0.073238,0.000000,0.000000,0.997314 +1431,0.072194,0.000000,0.000000,0.997391 +1432,0.071149,0.000000,0.000000,0.997466 +1433,0.070105,0.000000,0.000000,0.997540 +1434,0.069060,0.000000,0.000000,0.997613 +1435,0.068015,0.000000,0.000000,0.997684 +1436,0.066970,0.000000,0.000000,0.997755 +1437,0.065926,0.000000,0.000000,0.997825 +1438,0.064881,0.000000,0.000000,0.997893 +1439,0.063836,0.000000,0.000000,0.997960 +1440,0.062791,0.000000,0.000000,0.998027 +1441,0.061745,0.000000,0.000000,0.998092 +1442,0.060700,0.000000,0.000000,0.998156 +1443,0.059655,0.000000,0.000000,0.998219 +1444,0.058609,0.000000,0.000000,0.998281 +1445,0.057564,0.000000,0.000000,0.998342 +1446,0.056519,0.000000,0.000000,0.998402 +1447,0.055473,0.000000,0.000000,0.998460 +1448,0.054427,0.000000,0.000000,0.998518 +1449,0.053382,0.000000,0.000000,0.998574 +1450,0.052336,0.000000,0.000000,0.998630 +1451,0.051290,0.000000,0.000000,0.998684 +1452,0.050244,0.000000,0.000000,0.998737 +1453,0.049198,0.000000,0.000000,0.998789 +1454,0.048152,0.000000,0.000000,0.998840 +1455,0.047106,0.000000,0.000000,0.998890 +1456,0.046060,0.000000,0.000000,0.998939 +1457,0.045014,0.000000,0.000000,0.998986 +1458,0.043968,0.000000,0.000000,0.999033 +1459,0.042922,0.000000,0.000000,0.999078 +1460,0.041876,0.000000,0.000000,0.999123 +1461,0.040829,0.000000,0.000000,0.999166 +1462,0.039783,0.000000,0.000000,0.999208 +1463,0.038737,0.000000,0.000000,0.999249 +1464,0.037690,0.000000,0.000000,0.999289 +1465,0.036644,0.000000,0.000000,0.999328 +1466,0.035597,0.000000,0.000000,0.999366 +1467,0.034551,0.000000,0.000000,0.999403 +1468,0.033504,0.000000,0.000000,0.999439 +1469,0.032457,0.000000,0.000000,0.999473 +1470,0.031411,0.000000,0.000000,0.999507 +1471,0.030364,0.000000,0.000000,0.999539 +1472,0.029317,0.000000,0.000000,0.999570 +1473,0.028271,0.000000,0.000000,0.999600 +1474,0.027224,0.000000,0.000000,0.999629 +1475,0.026177,0.000000,0.000000,0.999657 +1476,0.025130,0.000000,0.000000,0.999684 +1477,0.024083,0.000000,0.000000,0.999710 +1478,0.023036,0.000000,0.000000,0.999735 +1479,0.021989,0.000000,0.000000,0.999758 +1480,0.020942,0.000000,0.000000,0.999781 +1481,0.019895,0.000000,0.000000,0.999802 +1482,0.018848,0.000000,0.000000,0.999822 +1483,0.017801,0.000000,0.000000,0.999842 +1484,0.016754,0.000000,0.000000,0.999860 +1485,0.015707,0.000000,0.000000,0.999877 +1486,0.014660,0.000000,0.000000,0.999893 +1487,0.013613,0.000000,0.000000,0.999907 +1488,0.012566,0.000000,0.000000,0.999921 +1489,0.011519,0.000000,0.000000,0.999934 +1490,0.010472,0.000000,0.000000,0.999945 +1491,0.009425,0.000000,0.000000,0.999956 +1492,0.008377,0.000000,0.000000,0.999965 +1493,0.007330,0.000000,0.000000,0.999973 +1494,0.006283,0.000000,0.000000,0.999980 +1495,0.005236,0.000000,0.000000,0.999986 +1496,0.004189,0.000000,0.000000,0.999991 +1497,0.003142,0.000000,0.000000,0.999995 +1498,0.002094,0.000000,0.000000,0.999998 +1499,0.001047,0.000000,0.000000,0.999999 +1500,0.000000,0.000000,0.000000,1.000000 +1501,-0.001047,-0.000000,0.000000,0.999999 +1502,-0.002094,-0.000000,0.000000,0.999998 +1503,-0.003142,-0.000000,0.000000,0.999995 +1504,-0.004189,-0.000000,0.000000,0.999991 +1505,-0.005236,-0.000000,0.000000,0.999986 +1506,-0.006283,-0.000000,0.000000,0.999980 +1507,-0.007330,-0.000000,0.000000,0.999973 +1508,-0.008377,-0.000000,0.000000,0.999965 +1509,-0.009425,-0.000000,0.000000,0.999956 +1510,-0.010472,-0.000000,0.000000,0.999945 +1511,-0.011519,-0.000000,0.000000,0.999934 +1512,-0.012566,-0.000000,0.000000,0.999921 +1513,-0.013613,-0.000000,0.000000,0.999907 +1514,-0.014660,-0.000000,0.000000,0.999893 +1515,-0.015707,-0.000000,0.000000,0.999877 +1516,-0.016754,-0.000000,0.000000,0.999860 +1517,-0.017801,-0.000000,0.000000,0.999842 +1518,-0.018848,-0.000000,0.000000,0.999822 +1519,-0.019895,-0.000000,0.000000,0.999802 +1520,-0.020942,-0.000000,0.000000,0.999781 +1521,-0.021989,-0.000000,0.000000,0.999758 +1522,-0.023036,-0.000000,0.000000,0.999735 +1523,-0.024083,-0.000000,0.000000,0.999710 +1524,-0.025130,-0.000000,0.000000,0.999684 +1525,-0.026177,-0.000000,0.000000,0.999657 +1526,-0.027224,-0.000000,0.000000,0.999629 +1527,-0.028271,-0.000000,0.000000,0.999600 +1528,-0.029317,-0.000000,0.000000,0.999570 +1529,-0.030364,-0.000000,0.000000,0.999539 +1530,-0.031411,-0.000000,0.000000,0.999507 +1531,-0.032457,-0.000000,0.000000,0.999473 +1532,-0.033504,-0.000000,0.000000,0.999439 +1533,-0.034551,-0.000000,0.000000,0.999403 +1534,-0.035597,-0.000000,0.000000,0.999366 +1535,-0.036644,-0.000000,0.000000,0.999328 +1536,-0.037690,-0.000000,0.000000,0.999289 +1537,-0.038737,-0.000000,0.000000,0.999249 +1538,-0.039783,-0.000000,0.000000,0.999208 +1539,-0.040829,-0.000000,0.000000,0.999166 +1540,-0.041876,-0.000000,0.000000,0.999123 +1541,-0.042922,-0.000000,0.000000,0.999078 +1542,-0.043968,-0.000000,0.000000,0.999033 +1543,-0.045014,-0.000000,0.000000,0.998986 +1544,-0.046060,-0.000000,0.000000,0.998939 +1545,-0.047106,-0.000000,0.000000,0.998890 +1546,-0.048152,-0.000000,0.000000,0.998840 +1547,-0.049198,-0.000000,0.000000,0.998789 +1548,-0.050244,-0.000000,0.000000,0.998737 +1549,-0.051290,-0.000000,0.000000,0.998684 +1550,-0.052336,-0.000000,0.000000,0.998630 +1551,-0.053382,-0.000000,0.000000,0.998574 +1552,-0.054427,-0.000000,0.000000,0.998518 +1553,-0.055473,-0.000000,0.000000,0.998460 +1554,-0.056519,-0.000000,0.000000,0.998402 +1555,-0.057564,-0.000000,0.000000,0.998342 +1556,-0.058609,-0.000000,0.000000,0.998281 +1557,-0.059655,-0.000000,0.000000,0.998219 +1558,-0.060700,-0.000000,0.000000,0.998156 +1559,-0.061745,-0.000000,0.000000,0.998092 +1560,-0.062791,-0.000000,0.000000,0.998027 +1561,-0.063836,-0.000000,0.000000,0.997960 +1562,-0.064881,-0.000000,0.000000,0.997893 +1563,-0.065926,-0.000000,0.000000,0.997825 +1564,-0.066970,-0.000000,0.000000,0.997755 +1565,-0.068015,-0.000000,0.000000,0.997684 +1566,-0.069060,-0.000000,0.000000,0.997613 +1567,-0.070105,-0.000000,0.000000,0.997540 +1568,-0.071149,-0.000000,0.000000,0.997466 +1569,-0.072194,-0.000000,0.000000,0.997391 +1570,-0.073238,-0.000000,0.000000,0.997314 +1571,-0.074283,-0.000000,0.000000,0.997237 +1572,-0.075327,-0.000000,0.000000,0.997159 +1573,-0.076371,-0.000000,0.000000,0.997079 +1574,-0.077415,-0.000000,0.000000,0.996999 +1575,-0.078459,-0.000000,0.000000,0.996917 +1576,-0.079503,-0.000000,0.000000,0.996835 +1577,-0.080547,-0.000000,0.000000,0.996751 +1578,-0.081591,-0.000000,0.000000,0.996666 +1579,-0.082634,-0.000000,0.000000,0.996580 +1580,-0.083678,-0.000000,0.000000,0.996493 +1581,-0.084721,-0.000000,0.000000,0.996405 +1582,-0.085765,-0.000000,0.000000,0.996315 +1583,-0.086808,-0.000000,0.000000,0.996225 +1584,-0.087851,-0.000000,0.000000,0.996134 +1585,-0.088894,-0.000000,0.000000,0.996041 +1586,-0.089937,-0.000000,0.000000,0.995947 +1587,-0.090980,-0.000000,0.000000,0.995853 +1588,-0.092023,-0.000000,0.000000,0.995757 +1589,-0.093066,-0.000000,0.000000,0.995660 +1590,-0.094108,-0.000000,0.000000,0.995562 +1591,-0.095151,-0.000000,0.000000,0.995463 +1592,-0.096193,-0.000000,0.000000,0.995363 +1593,-0.097235,-0.000000,0.000000,0.995261 +1594,-0.098278,-0.000000,0.000000,0.995159 +1595,-0.099320,-0.000000,0.000000,0.995056 +1596,-0.100362,-0.000000,0.000000,0.994951 +1597,-0.101404,-0.000000,0.000000,0.994845 +1598,-0.102445,-0.000000,0.000000,0.994739 +1599,-0.103487,-0.000000,0.000000,0.994631 +1600,-0.104528,-0.000000,0.000000,0.994522 +1601,-0.105570,-0.000000,0.000000,0.994412 +1602,-0.106611,-0.000000,0.000000,0.994301 +1603,-0.107652,-0.000000,0.000000,0.994189 +1604,-0.108693,-0.000000,0.000000,0.994075 +1605,-0.109734,-0.000000,0.000000,0.993961 +1606,-0.110775,-0.000000,0.000000,0.993845 +1607,-0.111816,-0.000000,0.000000,0.993729 +1608,-0.112856,-0.000000,0.000000,0.993611 +1609,-0.113897,-0.000000,0.000000,0.993493 +1610,-0.114937,-0.000000,0.000000,0.993373 +1611,-0.115977,-0.000000,0.000000,0.993252 +1612,-0.117017,-0.000000,0.000000,0.993130 +1613,-0.118057,-0.000000,0.000000,0.993007 +1614,-0.119097,-0.000000,0.000000,0.992883 +1615,-0.120137,-0.000000,0.000000,0.992757 +1616,-0.121176,-0.000000,0.000000,0.992631 +1617,-0.122216,-0.000000,0.000000,0.992504 +1618,-0.123255,-0.000000,0.000000,0.992375 +1619,-0.124294,-0.000000,0.000000,0.992245 +1620,-0.125333,-0.000000,0.000000,0.992115 +1621,-0.126372,-0.000000,0.000000,0.991983 +1622,-0.127411,-0.000000,0.000000,0.991850 +1623,-0.128449,-0.000000,0.000000,0.991716 +1624,-0.129488,-0.000000,0.000000,0.991581 +1625,-0.130526,-0.000000,0.000000,0.991445 +1626,-0.131564,-0.000000,0.000000,0.991308 +1627,-0.132602,-0.000000,0.000000,0.991169 +1628,-0.133640,-0.000000,0.000000,0.991030 +1629,-0.134678,-0.000000,0.000000,0.990889 +1630,-0.135716,-0.000000,0.000000,0.990748 +1631,-0.136753,-0.000000,0.000000,0.990605 +1632,-0.137790,-0.000000,0.000000,0.990461 +1633,-0.138827,-0.000000,0.000000,0.990317 +1634,-0.139864,-0.000000,0.000000,0.990171 +1635,-0.140901,-0.000000,0.000000,0.990024 +1636,-0.141938,-0.000000,0.000000,0.989876 +1637,-0.142974,-0.000000,0.000000,0.989726 +1638,-0.144011,-0.000000,0.000000,0.989576 +1639,-0.145047,-0.000000,0.000000,0.989425 +1640,-0.146083,-0.000000,0.000000,0.989272 +1641,-0.147119,-0.000000,0.000000,0.989119 +1642,-0.148155,-0.000000,0.000000,0.988964 +1643,-0.149190,-0.000000,0.000000,0.988809 +1644,-0.150226,-0.000000,0.000000,0.988652 +1645,-0.151261,-0.000000,0.000000,0.988494 +1646,-0.152296,-0.000000,0.000000,0.988335 +1647,-0.153331,-0.000000,0.000000,0.988175 +1648,-0.154366,-0.000000,0.000000,0.988014 +1649,-0.155400,-0.000000,0.000000,0.987852 +1650,-0.156434,-0.000000,0.000000,0.987688 +1651,-0.157469,-0.000000,0.000000,0.987524 +1652,-0.158503,-0.000000,0.000000,0.987359 +1653,-0.159537,-0.000000,0.000000,0.987192 +1654,-0.160570,-0.000000,0.000000,0.987024 +1655,-0.161604,-0.000000,0.000000,0.986856 +1656,-0.162637,-0.000000,0.000000,0.986686 +1657,-0.163670,-0.000000,0.000000,0.986515 +1658,-0.164703,-0.000000,0.000000,0.986343 +1659,-0.165736,-0.000000,0.000000,0.986170 +1660,-0.166769,-0.000000,0.000000,0.985996 +1661,-0.167801,-0.000000,0.000000,0.985821 +1662,-0.168833,-0.000000,0.000000,0.985645 +1663,-0.169866,-0.000000,0.000000,0.985467 +1664,-0.170897,-0.000000,0.000000,0.985289 +1665,-0.171929,-0.000000,0.000000,0.985109 +1666,-0.172961,-0.000000,0.000000,0.984929 +1667,-0.173992,-0.000000,0.000000,0.984747 +1668,-0.175023,-0.000000,0.000000,0.984564 +1669,-0.176054,-0.000000,0.000000,0.984381 +1670,-0.177085,-0.000000,0.000000,0.984196 +1671,-0.178115,-0.000000,0.000000,0.984010 +1672,-0.179146,-0.000000,0.000000,0.983823 +1673,-0.180176,-0.000000,0.000000,0.983634 +1674,-0.181206,-0.000000,0.000000,0.983445 +1675,-0.182236,-0.000000,0.000000,0.983255 +1676,-0.183265,-0.000000,0.000000,0.983064 +1677,-0.184294,-0.000000,0.000000,0.982871 +1678,-0.185324,-0.000000,0.000000,0.982678 +1679,-0.186353,-0.000000,0.000000,0.982483 +1680,-0.187381,-0.000000,0.000000,0.982287 +1681,-0.188410,-0.000000,0.000000,0.982090 +1682,-0.189438,-0.000000,0.000000,0.981893 +1683,-0.190466,-0.000000,0.000000,0.981694 +1684,-0.191494,-0.000000,0.000000,0.981494 +1685,-0.192522,-0.000000,0.000000,0.981293 +1686,-0.193549,-0.000000,0.000000,0.981091 +1687,-0.194577,-0.000000,0.000000,0.980887 +1688,-0.195604,-0.000000,0.000000,0.980683 +1689,-0.196631,-0.000000,0.000000,0.980478 +1690,-0.197657,-0.000000,0.000000,0.980271 +1691,-0.198684,-0.000000,0.000000,0.980064 +1692,-0.199710,-0.000000,0.000000,0.979855 +1693,-0.200736,-0.000000,0.000000,0.979645 +1694,-0.201762,-0.000000,0.000000,0.979435 +1695,-0.202787,-0.000000,0.000000,0.979223 +1696,-0.203813,-0.000000,0.000000,0.979010 +1697,-0.204838,-0.000000,0.000000,0.978796 +1698,-0.205863,-0.000000,0.000000,0.978581 +1699,-0.206887,-0.000000,0.000000,0.978365 +1700,-0.207912,-0.000000,0.000000,0.978148 +1701,-0.208936,-0.000000,0.000000,0.977929 +1702,-0.209960,-0.000000,0.000000,0.977710 +1703,-0.210984,-0.000000,0.000000,0.977490 +1704,-0.212007,-0.000000,0.000000,0.977268 +1705,-0.213030,-0.000000,0.000000,0.977046 +1706,-0.214053,-0.000000,0.000000,0.976822 +1707,-0.215076,-0.000000,0.000000,0.976597 +1708,-0.216099,-0.000000,0.000000,0.976371 +1709,-0.217121,-0.000000,0.000000,0.976145 +1710,-0.218143,-0.000000,0.000000,0.975917 +1711,-0.219165,-0.000000,0.000000,0.975688 +1712,-0.220187,-0.000000,0.000000,0.975458 +1713,-0.221208,-0.000000,0.000000,0.975227 +1714,-0.222229,-0.000000,0.000000,0.974994 +1715,-0.223250,-0.000000,0.000000,0.974761 +1716,-0.224271,-0.000000,0.000000,0.974527 +1717,-0.225291,-0.000000,0.000000,0.974291 +1718,-0.226311,-0.000000,0.000000,0.974055 +1719,-0.227331,-0.000000,0.000000,0.973817 +1720,-0.228351,-0.000000,0.000000,0.973579 +1721,-0.229370,-0.000000,0.000000,0.973339 +1722,-0.230389,-0.000000,0.000000,0.973099 +1723,-0.231408,-0.000000,0.000000,0.972857 +1724,-0.232427,-0.000000,0.000000,0.972614 +1725,-0.233445,-0.000000,0.000000,0.972370 +1726,-0.234463,-0.000000,0.000000,0.972125 +1727,-0.235481,-0.000000,0.000000,0.971879 +1728,-0.236499,-0.000000,0.000000,0.971632 +1729,-0.237516,-0.000000,0.000000,0.971384 +1730,-0.238533,-0.000000,0.000000,0.971134 +1731,-0.239550,-0.000000,0.000000,0.970884 +1732,-0.240567,-0.000000,0.000000,0.970633 +1733,-0.241583,-0.000000,0.000000,0.970380 +1734,-0.242599,-0.000000,0.000000,0.970127 +1735,-0.243615,-0.000000,0.000000,0.969872 +1736,-0.244631,-0.000000,0.000000,0.969616 +1737,-0.245646,-0.000000,0.000000,0.969360 +1738,-0.246661,-0.000000,0.000000,0.969102 +1739,-0.247675,-0.000000,0.000000,0.968843 +1740,-0.248690,-0.000000,0.000000,0.968583 +1741,-0.249704,-0.000000,0.000000,0.968322 +1742,-0.250718,-0.000000,0.000000,0.968060 +1743,-0.251732,-0.000000,0.000000,0.967797 +1744,-0.252745,-0.000000,0.000000,0.967533 +1745,-0.253758,-0.000000,0.000000,0.967268 +1746,-0.254771,-0.000000,0.000000,0.967001 +1747,-0.255783,-0.000000,0.000000,0.966734 +1748,-0.256795,-0.000000,0.000000,0.966466 +1749,-0.257807,-0.000000,0.000000,0.966196 +1750,-0.258819,-0.000000,0.000000,0.965926 +1751,-0.259830,-0.000000,0.000000,0.965654 +1752,-0.260842,-0.000000,0.000000,0.965382 +1753,-0.261852,-0.000000,0.000000,0.965108 +1754,-0.262863,-0.000000,0.000000,0.964833 +1755,-0.263873,-0.000000,0.000000,0.964557 +1756,-0.264883,-0.000000,0.000000,0.964281 +1757,-0.265893,-0.000000,0.000000,0.964003 +1758,-0.266902,-0.000000,0.000000,0.963724 +1759,-0.267911,-0.000000,0.000000,0.963444 +1760,-0.268920,-0.000000,0.000000,0.963163 +1761,-0.269928,-0.000000,0.000000,0.962880 +1762,-0.270936,-0.000000,0.000000,0.962597 +1763,-0.271944,-0.000000,0.000000,0.962313 +1764,-0.272952,-0.000000,0.000000,0.962028 +1765,-0.273959,-0.000000,0.000000,0.961741 +1766,-0.274966,-0.000000,0.000000,0.961454 +1767,-0.275973,-0.000000,0.000000,0.961165 +1768,-0.276979,-0.000000,0.000000,0.960876 +1769,-0.277985,-0.000000,0.000000,0.960585 +1770,-0.278991,-0.000000,0.000000,0.960294 +1771,-0.279997,-0.000000,0.000000,0.960001 +1772,-0.281002,-0.000000,0.000000,0.959707 +1773,-0.282007,-0.000000,0.000000,0.959412 +1774,-0.283011,-0.000000,0.000000,0.959117 +1775,-0.284015,-0.000000,0.000000,0.958820 +1776,-0.285019,-0.000000,0.000000,0.958522 +1777,-0.286023,-0.000000,0.000000,0.958223 +1778,-0.287026,-0.000000,0.000000,0.957923 +1779,-0.288029,-0.000000,0.000000,0.957622 +1780,-0.289032,-0.000000,0.000000,0.957319 +1781,-0.290034,-0.000000,0.000000,0.957016 +1782,-0.291036,-0.000000,0.000000,0.956712 +1783,-0.292038,-0.000000,0.000000,0.956407 +1784,-0.293039,-0.000000,0.000000,0.956100 +1785,-0.294040,-0.000000,0.000000,0.955793 +1786,-0.295041,-0.000000,0.000000,0.955485 +1787,-0.296041,-0.000000,0.000000,0.955175 +1788,-0.297042,-0.000000,0.000000,0.954865 +1789,-0.298041,-0.000000,0.000000,0.954553 +1790,-0.299041,-0.000000,0.000000,0.954240 +1791,-0.300040,-0.000000,0.000000,0.953927 +1792,-0.301039,-0.000000,0.000000,0.953612 +1793,-0.302037,-0.000000,0.000000,0.953296 +1794,-0.303035,-0.000000,0.000000,0.952979 +1795,-0.304033,-0.000000,0.000000,0.952661 +1796,-0.305031,-0.000000,0.000000,0.952343 +1797,-0.306028,-0.000000,0.000000,0.952023 +1798,-0.307024,-0.000000,0.000000,0.951702 +1799,-0.308021,-0.000000,0.000000,0.951380 +1800,-0.309017,-0.000000,0.000000,0.951057 +1801,-0.310013,-0.000000,0.000000,0.950732 +1802,-0.311008,-0.000000,0.000000,0.950407 +1803,-0.312003,-0.000000,0.000000,0.950081 +1804,-0.312998,-0.000000,0.000000,0.949754 +1805,-0.313992,-0.000000,0.000000,0.949425 +1806,-0.314987,-0.000000,0.000000,0.949096 +1807,-0.315980,-0.000000,0.000000,0.948766 +1808,-0.316974,-0.000000,0.000000,0.948434 +1809,-0.317967,-0.000000,0.000000,0.948102 +1810,-0.318959,-0.000000,0.000000,0.947768 +1811,-0.319952,-0.000000,0.000000,0.947434 +1812,-0.320944,-0.000000,0.000000,0.947098 +1813,-0.321935,-0.000000,0.000000,0.946762 +1814,-0.322927,-0.000000,0.000000,0.946424 +1815,-0.323917,-0.000000,0.000000,0.946085 +1816,-0.324908,-0.000000,0.000000,0.945746 +1817,-0.325898,-0.000000,0.000000,0.945405 +1818,-0.326888,-0.000000,0.000000,0.945063 +1819,-0.327878,-0.000000,0.000000,0.944720 +1820,-0.328867,-0.000000,0.000000,0.944376 +1821,-0.329855,-0.000000,0.000000,0.944031 +1822,-0.330844,-0.000000,0.000000,0.943686 +1823,-0.331832,-0.000000,0.000000,0.943339 +1824,-0.332820,-0.000000,0.000000,0.942991 +1825,-0.333807,-0.000000,0.000000,0.942641 +1826,-0.334794,-0.000000,0.000000,0.942291 +1827,-0.335780,-0.000000,0.000000,0.941940 +1828,-0.336767,-0.000000,0.000000,0.941588 +1829,-0.337752,-0.000000,0.000000,0.941235 +1830,-0.338738,-0.000000,0.000000,0.940881 +1831,-0.339723,-0.000000,0.000000,0.940526 +1832,-0.340708,-0.000000,0.000000,0.940169 +1833,-0.341692,-0.000000,0.000000,0.939812 +1834,-0.342676,-0.000000,0.000000,0.939454 +1835,-0.343660,-0.000000,0.000000,0.939094 +1836,-0.344643,-0.000000,0.000000,0.938734 +1837,-0.345626,-0.000000,0.000000,0.938372 +1838,-0.346608,-0.000000,0.000000,0.938010 +1839,-0.347590,-0.000000,0.000000,0.937646 +1840,-0.348572,-0.000000,0.000000,0.937282 +1841,-0.349553,-0.000000,0.000000,0.936916 +1842,-0.350534,-0.000000,0.000000,0.936550 +1843,-0.351515,-0.000000,0.000000,0.936182 +1844,-0.352495,-0.000000,0.000000,0.935814 +1845,-0.353475,-0.000000,0.000000,0.935444 +1846,-0.354454,-0.000000,0.000000,0.935073 +1847,-0.355433,-0.000000,0.000000,0.934702 +1848,-0.356412,-0.000000,0.000000,0.934329 +1849,-0.357390,-0.000000,0.000000,0.933955 +1850,-0.358368,-0.000000,0.000000,0.933580 +1851,-0.359345,-0.000000,0.000000,0.933205 +1852,-0.360322,-0.000000,0.000000,0.932828 +1853,-0.361299,-0.000000,0.000000,0.932450 +1854,-0.362275,-0.000000,0.000000,0.932071 +1855,-0.363251,-0.000000,0.000000,0.931691 +1856,-0.364227,-0.000000,0.000000,0.931310 +1857,-0.365202,-0.000000,0.000000,0.930928 +1858,-0.366176,-0.000000,0.000000,0.930545 +1859,-0.367151,-0.000000,0.000000,0.930161 +1860,-0.368125,-0.000000,0.000000,0.929776 +1861,-0.369098,-0.000000,0.000000,0.929390 +1862,-0.370071,-0.000000,0.000000,0.929003 +1863,-0.371044,-0.000000,0.000000,0.928615 +1864,-0.372016,-0.000000,0.000000,0.928226 +1865,-0.372988,-0.000000,0.000000,0.927836 +1866,-0.373959,-0.000000,0.000000,0.927445 +1867,-0.374930,-0.000000,0.000000,0.927053 +1868,-0.375901,-0.000000,0.000000,0.926660 +1869,-0.376871,-0.000000,0.000000,0.926266 +1870,-0.377841,-0.000000,0.000000,0.925871 +1871,-0.378810,-0.000000,0.000000,0.925474 +1872,-0.379779,-0.000000,0.000000,0.925077 +1873,-0.380748,-0.000000,0.000000,0.924679 +1874,-0.381716,-0.000000,0.000000,0.924280 +1875,-0.382683,-0.000000,0.000000,0.923880 +1876,-0.383651,-0.000000,0.000000,0.923478 +1877,-0.384618,-0.000000,0.000000,0.923076 +1878,-0.385584,-0.000000,0.000000,0.922673 +1879,-0.386550,-0.000000,0.000000,0.922268 +1880,-0.387516,-0.000000,0.000000,0.921863 +1881,-0.388481,-0.000000,0.000000,0.921457 +1882,-0.389445,-0.000000,0.000000,0.921050 +1883,-0.390410,-0.000000,0.000000,0.920641 +1884,-0.391374,-0.000000,0.000000,0.920232 +1885,-0.392337,-0.000000,0.000000,0.919821 +1886,-0.393300,-0.000000,0.000000,0.919410 +1887,-0.394263,-0.000000,0.000000,0.918998 +1888,-0.395225,-0.000000,0.000000,0.918584 +1889,-0.396187,-0.000000,0.000000,0.918170 +1890,-0.397148,-0.000000,0.000000,0.917755 +1891,-0.398109,-0.000000,0.000000,0.917338 +1892,-0.399069,-0.000000,0.000000,0.916921 +1893,-0.400029,-0.000000,0.000000,0.916502 +1894,-0.400989,-0.000000,0.000000,0.916083 +1895,-0.401948,-0.000000,0.000000,0.915663 +1896,-0.402906,-0.000000,0.000000,0.915241 +1897,-0.403865,-0.000000,0.000000,0.914819 +1898,-0.404822,-0.000000,0.000000,0.914395 +1899,-0.405780,-0.000000,0.000000,0.913971 +1900,-0.406737,-0.000000,0.000000,0.913545 +1901,-0.407693,-0.000000,0.000000,0.913119 +1902,-0.408649,-0.000000,0.000000,0.912692 +1903,-0.409605,-0.000000,0.000000,0.912263 +1904,-0.410560,-0.000000,0.000000,0.911834 +1905,-0.411514,-0.000000,0.000000,0.911403 +1906,-0.412469,-0.000000,0.000000,0.910972 +1907,-0.413422,-0.000000,0.000000,0.910539 +1908,-0.414376,-0.000000,0.000000,0.910106 +1909,-0.415328,-0.000000,0.000000,0.909672 +1910,-0.416281,-0.000000,0.000000,0.909236 +1911,-0.417233,-0.000000,0.000000,0.908800 +1912,-0.418184,-0.000000,0.000000,0.908362 +1913,-0.419135,-0.000000,0.000000,0.907924 +1914,-0.420086,-0.000000,0.000000,0.907484 +1915,-0.421036,-0.000000,0.000000,0.907044 +1916,-0.421985,-0.000000,0.000000,0.906603 +1917,-0.422935,-0.000000,0.000000,0.906160 +1918,-0.423883,-0.000000,0.000000,0.905717 +1919,-0.424832,-0.000000,0.000000,0.905272 +1920,-0.425779,-0.000000,0.000000,0.904827 +1921,-0.426727,-0.000000,0.000000,0.904381 +1922,-0.427673,-0.000000,0.000000,0.903933 +1923,-0.428620,-0.000000,0.000000,0.903485 +1924,-0.429566,-0.000000,0.000000,0.903036 +1925,-0.430511,-0.000000,0.000000,0.902585 +1926,-0.431456,-0.000000,0.000000,0.902134 +1927,-0.432401,-0.000000,0.000000,0.901682 +1928,-0.433345,-0.000000,0.000000,0.901228 +1929,-0.434288,-0.000000,0.000000,0.900774 +1930,-0.435231,-0.000000,0.000000,0.900319 +1931,-0.436174,-0.000000,0.000000,0.899863 +1932,-0.437116,-0.000000,0.000000,0.899405 +1933,-0.438057,-0.000000,0.000000,0.898947 +1934,-0.438999,-0.000000,0.000000,0.898488 +1935,-0.439939,-0.000000,0.000000,0.898028 +1936,-0.440879,-0.000000,0.000000,0.897566 +1937,-0.441819,-0.000000,0.000000,0.897104 +1938,-0.442758,-0.000000,0.000000,0.896641 +1939,-0.443697,-0.000000,0.000000,0.896177 +1940,-0.444635,-0.000000,0.000000,0.895712 +1941,-0.445573,-0.000000,0.000000,0.895246 +1942,-0.446510,-0.000000,0.000000,0.894779 +1943,-0.447447,-0.000000,0.000000,0.894310 +1944,-0.448383,-0.000000,0.000000,0.893841 +1945,-0.449319,-0.000000,0.000000,0.893371 +1946,-0.450254,-0.000000,0.000000,0.892900 +1947,-0.451189,-0.000000,0.000000,0.892428 +1948,-0.452123,-0.000000,0.000000,0.891955 +1949,-0.453057,-0.000000,0.000000,0.891481 +1950,-0.453990,-0.000000,0.000000,0.891007 +1951,-0.454923,-0.000000,0.000000,0.890531 +1952,-0.455856,-0.000000,0.000000,0.890054 +1953,-0.456787,-0.000000,0.000000,0.889576 +1954,-0.457719,-0.000000,0.000000,0.889097 +1955,-0.458650,-0.000000,0.000000,0.888617 +1956,-0.459580,-0.000000,0.000000,0.888136 +1957,-0.460510,-0.000000,0.000000,0.887655 +1958,-0.461439,-0.000000,0.000000,0.887172 +1959,-0.462368,-0.000000,0.000000,0.886688 +1960,-0.463296,-0.000000,0.000000,0.886204 +1961,-0.464224,-0.000000,0.000000,0.885718 +1962,-0.465151,-0.000000,0.000000,0.885231 +1963,-0.466078,-0.000000,0.000000,0.884744 +1964,-0.467004,-0.000000,0.000000,0.884255 +1965,-0.467930,-0.000000,0.000000,0.883766 +1966,-0.468855,-0.000000,0.000000,0.883275 +1967,-0.469780,-0.000000,0.000000,0.882784 +1968,-0.470704,-0.000000,0.000000,0.882291 +1969,-0.471628,-0.000000,0.000000,0.881798 +1970,-0.472551,-0.000000,0.000000,0.881303 +1971,-0.473473,-0.000000,0.000000,0.880808 +1972,-0.474396,-0.000000,0.000000,0.880312 +1973,-0.475317,-0.000000,0.000000,0.879815 +1974,-0.476238,-0.000000,0.000000,0.879316 +1975,-0.477159,-0.000000,0.000000,0.878817 +1976,-0.478079,-0.000000,0.000000,0.878317 +1977,-0.478998,-0.000000,0.000000,0.877816 +1978,-0.479917,-0.000000,0.000000,0.877314 +1979,-0.480836,-0.000000,0.000000,0.876811 +1980,-0.481754,-0.000000,0.000000,0.876307 +1981,-0.482671,-0.000000,0.000000,0.875802 +1982,-0.483588,-0.000000,0.000000,0.875296 +1983,-0.484504,-0.000000,0.000000,0.874789 +1984,-0.485420,-0.000000,0.000000,0.874281 +1985,-0.486335,-0.000000,0.000000,0.873772 +1986,-0.487250,-0.000000,0.000000,0.873262 +1987,-0.488164,-0.000000,0.000000,0.872752 +1988,-0.489078,-0.000000,0.000000,0.872240 +1989,-0.489991,-0.000000,0.000000,0.871727 +1990,-0.490904,-0.000000,0.000000,0.871214 +1991,-0.491816,-0.000000,0.000000,0.870699 +1992,-0.492727,-0.000000,0.000000,0.870184 +1993,-0.493638,-0.000000,0.000000,0.869667 +1994,-0.494549,-0.000000,0.000000,0.869150 +1995,-0.495459,-0.000000,0.000000,0.868632 +1996,-0.496368,-0.000000,0.000000,0.868112 +1997,-0.497277,-0.000000,0.000000,0.867592 +1998,-0.498185,-0.000000,0.000000,0.867071 +1999,-0.499093,-0.000000,0.000000,0.866549 +2000,-0.500000,-0.000000,0.000000,0.866025 +2001,-0.500907,-0.000000,0.000000,0.865501 +2002,-0.501813,-0.000000,0.000000,0.864976 +2003,-0.502718,-0.000000,0.000000,0.864450 +2004,-0.503623,-0.000000,0.000000,0.863923 +2005,-0.504528,-0.000000,0.000000,0.863396 +2006,-0.505431,-0.000000,0.000000,0.862867 +2007,-0.506335,-0.000000,0.000000,0.862337 +2008,-0.507238,-0.000000,0.000000,0.861806 +2009,-0.508140,-0.000000,0.000000,0.861275 +2010,-0.509041,-0.000000,0.000000,0.860742 +2011,-0.509943,-0.000000,0.000000,0.860208 +2012,-0.510843,-0.000000,0.000000,0.859674 +2013,-0.511743,-0.000000,0.000000,0.859139 +2014,-0.512642,-0.000000,0.000000,0.858602 +2015,-0.513541,-0.000000,0.000000,0.858065 +2016,-0.514440,-0.000000,0.000000,0.857527 +2017,-0.515337,-0.000000,0.000000,0.856987 +2018,-0.516234,-0.000000,0.000000,0.856447 +2019,-0.517131,-0.000000,0.000000,0.855906 +2020,-0.518027,-0.000000,0.000000,0.855364 +2021,-0.518922,-0.000000,0.000000,0.854821 +2022,-0.519817,-0.000000,0.000000,0.854277 +2023,-0.520712,-0.000000,0.000000,0.853733 +2024,-0.521605,-0.000000,0.000000,0.853187 +2025,-0.522499,-0.000000,0.000000,0.852640 +2026,-0.523391,-0.000000,0.000000,0.852093 +2027,-0.524283,-0.000000,0.000000,0.851544 +2028,-0.525175,-0.000000,0.000000,0.850994 +2029,-0.526066,-0.000000,0.000000,0.850444 +2030,-0.526956,-0.000000,0.000000,0.849893 +2031,-0.527846,-0.000000,0.000000,0.849340 +2032,-0.528735,-0.000000,0.000000,0.848787 +2033,-0.529623,-0.000000,0.000000,0.848233 +2034,-0.530511,-0.000000,0.000000,0.847678 +2035,-0.531399,-0.000000,0.000000,0.847122 +2036,-0.532285,-0.000000,0.000000,0.846565 +2037,-0.533172,-0.000000,0.000000,0.846007 +2038,-0.534057,-0.000000,0.000000,0.845448 +2039,-0.534942,-0.000000,0.000000,0.844889 +2040,-0.535827,-0.000000,0.000000,0.844328 +2041,-0.536711,-0.000000,0.000000,0.843766 +2042,-0.537594,-0.000000,0.000000,0.843204 +2043,-0.538477,-0.000000,0.000000,0.842640 +2044,-0.539359,-0.000000,0.000000,0.842076 +2045,-0.540240,-0.000000,0.000000,0.841511 +2046,-0.541121,-0.000000,0.000000,0.840945 +2047,-0.542002,-0.000000,0.000000,0.840377 +2048,-0.542881,-0.000000,0.000000,0.839809 +2049,-0.543760,-0.000000,0.000000,0.839240 +2050,-0.544639,-0.000000,0.000000,0.838671 +2051,-0.545517,-0.000000,0.000000,0.838100 +2052,-0.546394,-0.000000,0.000000,0.837528 +2053,-0.547271,-0.000000,0.000000,0.836955 +2054,-0.548147,-0.000000,0.000000,0.836382 +2055,-0.549023,-0.000000,0.000000,0.835807 +2056,-0.549898,-0.000000,0.000000,0.835232 +2057,-0.550772,-0.000000,0.000000,0.834656 +2058,-0.551646,-0.000000,0.000000,0.834078 +2059,-0.552519,-0.000000,0.000000,0.833500 +2060,-0.553392,-0.000000,0.000000,0.832921 +2061,-0.554263,-0.000000,0.000000,0.832341 +2062,-0.555135,-0.000000,0.000000,0.831760 +2063,-0.556006,-0.000000,0.000000,0.831179 +2064,-0.556876,-0.000000,0.000000,0.830596 +2065,-0.557745,-0.000000,0.000000,0.830012 +2066,-0.558614,-0.000000,0.000000,0.829428 +2067,-0.559482,-0.000000,0.000000,0.828842 +2068,-0.560350,-0.000000,0.000000,0.828256 +2069,-0.561217,-0.000000,0.000000,0.827669 +2070,-0.562083,-0.000000,0.000000,0.827081 +2071,-0.562949,-0.000000,0.000000,0.826492 +2072,-0.563814,-0.000000,0.000000,0.825902 +2073,-0.564679,-0.000000,0.000000,0.825311 +2074,-0.565543,-0.000000,0.000000,0.824719 +2075,-0.566406,-0.000000,0.000000,0.824126 +2076,-0.567269,-0.000000,0.000000,0.823533 +2077,-0.568131,-0.000000,0.000000,0.822938 +2078,-0.568993,-0.000000,0.000000,0.822343 +2079,-0.569853,-0.000000,0.000000,0.821746 +2080,-0.570714,-0.000000,0.000000,0.821149 +2081,-0.571573,-0.000000,0.000000,0.820551 +2082,-0.572432,-0.000000,0.000000,0.819952 +2083,-0.573290,-0.000000,0.000000,0.819352 +2084,-0.574148,-0.000000,0.000000,0.818751 +2085,-0.575005,-0.000000,0.000000,0.818150 +2086,-0.575862,-0.000000,0.000000,0.817547 +2087,-0.576718,-0.000000,0.000000,0.816944 +2088,-0.577573,-0.000000,0.000000,0.816339 +2089,-0.578427,-0.000000,0.000000,0.815734 +2090,-0.579281,-0.000000,0.000000,0.815128 +2091,-0.580134,-0.000000,0.000000,0.814521 +2092,-0.580987,-0.000000,0.000000,0.813913 +2093,-0.581839,-0.000000,0.000000,0.813304 +2094,-0.582690,-0.000000,0.000000,0.812694 +2095,-0.583541,-0.000000,0.000000,0.812084 +2096,-0.584391,-0.000000,0.000000,0.811472 +2097,-0.585241,-0.000000,0.000000,0.810860 +2098,-0.586090,-0.000000,0.000000,0.810246 +2099,-0.586938,-0.000000,0.000000,0.809632 +2100,-0.587785,-0.000000,0.000000,0.809017 +2101,-0.588632,-0.000000,0.000000,0.808401 +2102,-0.589478,-0.000000,0.000000,0.807784 +2103,-0.590324,-0.000000,0.000000,0.807166 +2104,-0.591169,-0.000000,0.000000,0.806548 +2105,-0.592013,-0.000000,0.000000,0.805928 +2106,-0.592857,-0.000000,0.000000,0.805308 +2107,-0.593700,-0.000000,0.000000,0.804687 +2108,-0.594542,-0.000000,0.000000,0.804064 +2109,-0.595384,-0.000000,0.000000,0.803441 +2110,-0.596225,-0.000000,0.000000,0.802817 +2111,-0.597065,-0.000000,0.000000,0.802193 +2112,-0.597905,-0.000000,0.000000,0.801567 +2113,-0.598744,-0.000000,0.000000,0.800940 +2114,-0.599582,-0.000000,0.000000,0.800313 +2115,-0.600420,-0.000000,0.000000,0.799685 +2116,-0.601257,-0.000000,0.000000,0.799055 +2117,-0.602094,-0.000000,0.000000,0.798425 +2118,-0.602930,-0.000000,0.000000,0.797794 +2119,-0.603765,-0.000000,0.000000,0.797163 +2120,-0.604599,-0.000000,0.000000,0.796530 +2121,-0.605433,-0.000000,0.000000,0.795896 +2122,-0.606266,-0.000000,0.000000,0.795262 +2123,-0.607098,-0.000000,0.000000,0.794627 +2124,-0.607930,-0.000000,0.000000,0.793990 +2125,-0.608761,-0.000000,0.000000,0.793353 +2126,-0.609592,-0.000000,0.000000,0.792715 +2127,-0.610422,-0.000000,0.000000,0.792077 +2128,-0.611251,-0.000000,0.000000,0.791437 +2129,-0.612079,-0.000000,0.000000,0.790796 +2130,-0.612907,-0.000000,0.000000,0.790155 +2131,-0.613734,-0.000000,0.000000,0.789513 +2132,-0.614561,-0.000000,0.000000,0.788870 +2133,-0.615386,-0.000000,0.000000,0.788226 +2134,-0.616211,-0.000000,0.000000,0.787581 +2135,-0.617036,-0.000000,0.000000,0.786935 +2136,-0.617860,-0.000000,0.000000,0.786288 +2137,-0.618683,-0.000000,0.000000,0.785641 +2138,-0.619505,-0.000000,0.000000,0.784993 +2139,-0.620327,-0.000000,0.000000,0.784343 +2140,-0.621148,-0.000000,0.000000,0.783693 +2141,-0.621968,-0.000000,0.000000,0.783043 +2142,-0.622788,-0.000000,0.000000,0.782391 +2143,-0.623607,-0.000000,0.000000,0.781738 +2144,-0.624425,-0.000000,0.000000,0.781085 +2145,-0.625243,-0.000000,0.000000,0.780430 +2146,-0.626060,-0.000000,0.000000,0.779775 +2147,-0.626876,-0.000000,0.000000,0.779119 +2148,-0.627691,-0.000000,0.000000,0.778462 +2149,-0.628506,-0.000000,0.000000,0.777805 +2150,-0.629320,-0.000000,0.000000,0.777146 +2151,-0.630134,-0.000000,0.000000,0.776487 +2152,-0.630947,-0.000000,0.000000,0.775826 +2153,-0.631759,-0.000000,0.000000,0.775165 +2154,-0.632570,-0.000000,0.000000,0.774503 +2155,-0.633381,-0.000000,0.000000,0.773840 +2156,-0.634191,-0.000000,0.000000,0.773177 +2157,-0.635000,-0.000000,0.000000,0.772512 +2158,-0.635809,-0.000000,0.000000,0.771847 +2159,-0.636617,-0.000000,0.000000,0.771180 +2160,-0.637424,-0.000000,0.000000,0.770513 +2161,-0.638231,-0.000000,0.000000,0.769845 +2162,-0.639036,-0.000000,0.000000,0.769177 +2163,-0.639841,-0.000000,0.000000,0.768507 +2164,-0.640646,-0.000000,0.000000,0.767836 +2165,-0.641450,-0.000000,0.000000,0.767165 +2166,-0.642253,-0.000000,0.000000,0.766493 +2167,-0.643055,-0.000000,0.000000,0.765820 +2168,-0.643857,-0.000000,0.000000,0.765146 +2169,-0.644657,-0.000000,0.000000,0.764472 +2170,-0.645458,-0.000000,0.000000,0.763796 +2171,-0.646257,-0.000000,0.000000,0.763120 +2172,-0.647056,-0.000000,0.000000,0.762443 +2173,-0.647854,-0.000000,0.000000,0.761764 +2174,-0.648651,-0.000000,0.000000,0.761086 +2175,-0.649448,-0.000000,0.000000,0.760406 +2176,-0.650244,-0.000000,0.000000,0.759725 +2177,-0.651039,-0.000000,0.000000,0.759044 +2178,-0.651834,-0.000000,0.000000,0.758362 +2179,-0.652628,-0.000000,0.000000,0.757679 +2180,-0.653421,-0.000000,0.000000,0.756995 +2181,-0.654213,-0.000000,0.000000,0.756310 +2182,-0.655005,-0.000000,0.000000,0.755625 +2183,-0.655796,-0.000000,0.000000,0.754939 +2184,-0.656586,-0.000000,0.000000,0.754251 +2185,-0.657375,-0.000000,0.000000,0.753563 +2186,-0.658164,-0.000000,0.000000,0.752875 +2187,-0.658952,-0.000000,0.000000,0.752185 +2188,-0.659739,-0.000000,0.000000,0.751494 +2189,-0.660526,-0.000000,0.000000,0.750803 +2190,-0.661312,-0.000000,0.000000,0.750111 +2191,-0.662097,-0.000000,0.000000,0.749418 +2192,-0.662881,-0.000000,0.000000,0.748724 +2193,-0.663665,-0.000000,0.000000,0.748030 +2194,-0.664448,-0.000000,0.000000,0.747334 +2195,-0.665230,-0.000000,0.000000,0.746638 +2196,-0.666012,-0.000000,0.000000,0.745941 +2197,-0.666793,-0.000000,0.000000,0.745243 +2198,-0.667573,-0.000000,0.000000,0.744545 +2199,-0.668352,-0.000000,0.000000,0.743845 +2200,-0.669131,-0.000000,0.000000,0.743145 +2201,-0.669908,-0.000000,0.000000,0.742444 +2202,-0.670686,-0.000000,0.000000,0.741742 +2203,-0.671462,-0.000000,0.000000,0.741039 +2204,-0.672238,-0.000000,0.000000,0.740335 +2205,-0.673013,-0.000000,0.000000,0.739631 +2206,-0.673787,-0.000000,0.000000,0.738926 +2207,-0.674560,-0.000000,0.000000,0.738220 +2208,-0.675333,-0.000000,0.000000,0.737513 +2209,-0.676105,-0.000000,0.000000,0.736806 +2210,-0.676876,-0.000000,0.000000,0.736097 +2211,-0.677646,-0.000000,0.000000,0.735388 +2212,-0.678416,-0.000000,0.000000,0.734678 +2213,-0.679185,-0.000000,0.000000,0.733967 +2214,-0.679953,-0.000000,0.000000,0.733255 +2215,-0.680721,-0.000000,0.000000,0.732543 +2216,-0.681488,-0.000000,0.000000,0.731830 +2217,-0.682254,-0.000000,0.000000,0.731116 +2218,-0.683019,-0.000000,0.000000,0.730401 +2219,-0.683783,-0.000000,0.000000,0.729685 +2220,-0.684547,-0.000000,0.000000,0.728969 +2221,-0.685310,-0.000000,0.000000,0.728251 +2222,-0.686072,-0.000000,0.000000,0.727533 +2223,-0.686834,-0.000000,0.000000,0.726814 +2224,-0.687595,-0.000000,0.000000,0.726095 +2225,-0.688355,-0.000000,0.000000,0.725374 +2226,-0.689114,-0.000000,0.000000,0.724653 +2227,-0.689872,-0.000000,0.000000,0.723931 +2228,-0.690630,-0.000000,0.000000,0.723208 +2229,-0.691387,-0.000000,0.000000,0.722485 +2230,-0.692143,-0.000000,0.000000,0.721760 +2231,-0.692899,-0.000000,0.000000,0.721035 +2232,-0.693653,-0.000000,0.000000,0.720309 +2233,-0.694407,-0.000000,0.000000,0.719582 +2234,-0.695160,-0.000000,0.000000,0.718855 +2235,-0.695913,-0.000000,0.000000,0.718126 +2236,-0.696664,-0.000000,0.000000,0.717397 +2237,-0.697415,-0.000000,0.000000,0.716667 +2238,-0.698165,-0.000000,0.000000,0.715936 +2239,-0.698915,-0.000000,0.000000,0.715205 +2240,-0.699663,-0.000000,0.000000,0.714473 +2241,-0.700411,-0.000000,0.000000,0.713740 +2242,-0.701158,-0.000000,0.000000,0.713006 +2243,-0.701904,-0.000000,0.000000,0.712271 +2244,-0.702650,-0.000000,0.000000,0.711536 +2245,-0.703395,-0.000000,0.000000,0.710799 +2246,-0.704139,-0.000000,0.000000,0.710062 +2247,-0.704882,-0.000000,0.000000,0.709325 +2248,-0.705624,-0.000000,0.000000,0.708586 +2249,-0.706366,-0.000000,0.000000,0.707847 +2250,-0.707107,-0.000000,0.000000,0.707107 +2251,-0.707847,-0.000000,0.000000,0.706366 +2252,-0.708586,-0.000000,0.000000,0.705624 +2253,-0.709325,-0.000000,0.000000,0.704882 +2254,-0.710062,-0.000000,0.000000,0.704139 +2255,-0.710799,-0.000000,0.000000,0.703395 +2256,-0.711536,-0.000000,0.000000,0.702650 +2257,-0.712271,-0.000000,0.000000,0.701904 +2258,-0.713006,-0.000000,0.000000,0.701158 +2259,-0.713740,-0.000000,0.000000,0.700411 +2260,-0.714473,-0.000000,0.000000,0.699663 +2261,-0.715205,-0.000000,0.000000,0.698915 +2262,-0.715936,-0.000000,0.000000,0.698165 +2263,-0.716667,-0.000000,0.000000,0.697415 +2264,-0.717397,-0.000000,0.000000,0.696664 +2265,-0.718126,-0.000000,0.000000,0.695913 +2266,-0.718855,-0.000000,0.000000,0.695160 +2267,-0.719582,-0.000000,0.000000,0.694407 +2268,-0.720309,-0.000000,0.000000,0.693653 +2269,-0.721035,-0.000000,0.000000,0.692899 +2270,-0.721760,-0.000000,0.000000,0.692143 +2271,-0.722485,-0.000000,0.000000,0.691387 +2272,-0.723208,-0.000000,0.000000,0.690630 +2273,-0.723931,-0.000000,0.000000,0.689872 +2274,-0.724653,-0.000000,0.000000,0.689114 +2275,-0.725374,-0.000000,0.000000,0.688355 +2276,-0.726095,-0.000000,0.000000,0.687595 +2277,-0.726814,-0.000000,0.000000,0.686834 +2278,-0.727533,-0.000000,0.000000,0.686072 +2279,-0.728251,-0.000000,0.000000,0.685310 +2280,-0.728969,-0.000000,0.000000,0.684547 +2281,-0.729685,-0.000000,0.000000,0.683783 +2282,-0.730401,-0.000000,0.000000,0.683019 +2283,-0.731116,-0.000000,0.000000,0.682254 +2284,-0.731830,-0.000000,0.000000,0.681488 +2285,-0.732543,-0.000000,0.000000,0.680721 +2286,-0.733255,-0.000000,0.000000,0.679953 +2287,-0.733967,-0.000000,0.000000,0.679185 +2288,-0.734678,-0.000000,0.000000,0.678416 +2289,-0.735388,-0.000000,0.000000,0.677646 +2290,-0.736097,-0.000000,0.000000,0.676876 +2291,-0.736806,-0.000000,0.000000,0.676105 +2292,-0.737513,-0.000000,0.000000,0.675333 +2293,-0.738220,-0.000000,0.000000,0.674560 +2294,-0.738926,-0.000000,0.000000,0.673787 +2295,-0.739631,-0.000000,0.000000,0.673013 +2296,-0.740335,-0.000000,0.000000,0.672238 +2297,-0.741039,-0.000000,0.000000,0.671462 +2298,-0.741742,-0.000000,0.000000,0.670686 +2299,-0.742444,-0.000000,0.000000,0.669908 +2300,-0.743145,-0.000000,0.000000,0.669131 +2301,-0.743845,-0.000000,0.000000,0.668352 +2302,-0.744545,-0.000000,0.000000,0.667573 +2303,-0.745243,-0.000000,0.000000,0.666793 +2304,-0.745941,-0.000000,0.000000,0.666012 +2305,-0.746638,-0.000000,0.000000,0.665230 +2306,-0.747334,-0.000000,0.000000,0.664448 +2307,-0.748030,-0.000000,0.000000,0.663665 +2308,-0.748724,-0.000000,0.000000,0.662881 +2309,-0.749418,-0.000000,0.000000,0.662097 +2310,-0.750111,-0.000000,0.000000,0.661312 +2311,-0.750803,-0.000000,0.000000,0.660526 +2312,-0.751494,-0.000000,0.000000,0.659739 +2313,-0.752185,-0.000000,0.000000,0.658952 +2314,-0.752875,-0.000000,0.000000,0.658164 +2315,-0.753563,-0.000000,0.000000,0.657375 +2316,-0.754251,-0.000000,0.000000,0.656586 +2317,-0.754939,-0.000000,0.000000,0.655796 +2318,-0.755625,-0.000000,0.000000,0.655005 +2319,-0.756310,-0.000000,0.000000,0.654213 +2320,-0.756995,-0.000000,0.000000,0.653421 +2321,-0.757679,-0.000000,0.000000,0.652628 +2322,-0.758362,-0.000000,0.000000,0.651834 +2323,-0.759044,-0.000000,0.000000,0.651039 +2324,-0.759725,-0.000000,0.000000,0.650244 +2325,-0.760406,-0.000000,0.000000,0.649448 +2326,-0.761086,-0.000000,0.000000,0.648651 +2327,-0.761764,-0.000000,0.000000,0.647854 +2328,-0.762443,-0.000000,0.000000,0.647056 +2329,-0.763120,-0.000000,0.000000,0.646257 +2330,-0.763796,-0.000000,0.000000,0.645458 +2331,-0.764472,-0.000000,0.000000,0.644657 +2332,-0.765146,-0.000000,0.000000,0.643857 +2333,-0.765820,-0.000000,0.000000,0.643055 +2334,-0.766493,-0.000000,0.000000,0.642253 +2335,-0.767165,-0.000000,0.000000,0.641450 +2336,-0.767836,-0.000000,0.000000,0.640646 +2337,-0.768507,-0.000000,0.000000,0.639841 +2338,-0.769177,-0.000000,0.000000,0.639036 +2339,-0.769845,-0.000000,0.000000,0.638231 +2340,-0.770513,-0.000000,0.000000,0.637424 +2341,-0.771180,-0.000000,0.000000,0.636617 +2342,-0.771847,-0.000000,0.000000,0.635809 +2343,-0.772512,-0.000000,0.000000,0.635000 +2344,-0.773177,-0.000000,0.000000,0.634191 +2345,-0.773840,-0.000000,0.000000,0.633381 +2346,-0.774503,-0.000000,0.000000,0.632570 +2347,-0.775165,-0.000000,0.000000,0.631759 +2348,-0.775826,-0.000000,0.000000,0.630947 +2349,-0.776487,-0.000000,0.000000,0.630134 +2350,-0.777146,-0.000000,0.000000,0.629320 +2351,-0.777805,-0.000000,0.000000,0.628506 +2352,-0.778462,-0.000000,0.000000,0.627691 +2353,-0.779119,-0.000000,0.000000,0.626876 +2354,-0.779775,-0.000000,0.000000,0.626060 +2355,-0.780430,-0.000000,0.000000,0.625243 +2356,-0.781085,-0.000000,0.000000,0.624425 +2357,-0.781738,-0.000000,0.000000,0.623607 +2358,-0.782391,-0.000000,0.000000,0.622788 +2359,-0.783043,-0.000000,0.000000,0.621968 +2360,-0.783693,-0.000000,0.000000,0.621148 +2361,-0.784343,-0.000000,0.000000,0.620327 +2362,-0.784993,-0.000000,0.000000,0.619505 +2363,-0.785641,-0.000000,0.000000,0.618683 +2364,-0.786288,-0.000000,0.000000,0.617860 +2365,-0.786935,-0.000000,0.000000,0.617036 +2366,-0.787581,-0.000000,0.000000,0.616211 +2367,-0.788226,-0.000000,0.000000,0.615386 +2368,-0.788870,-0.000000,0.000000,0.614561 +2369,-0.789513,-0.000000,0.000000,0.613734 +2370,-0.790155,-0.000000,0.000000,0.612907 +2371,-0.790796,-0.000000,0.000000,0.612079 +2372,-0.791437,-0.000000,0.000000,0.611251 +2373,-0.792077,-0.000000,0.000000,0.610422 +2374,-0.792715,-0.000000,0.000000,0.609592 +2375,-0.793353,-0.000000,0.000000,0.608761 +2376,-0.793990,-0.000000,0.000000,0.607930 +2377,-0.794627,-0.000000,0.000000,0.607098 +2378,-0.795262,-0.000000,0.000000,0.606266 +2379,-0.795896,-0.000000,0.000000,0.605433 +2380,-0.796530,-0.000000,0.000000,0.604599 +2381,-0.797163,-0.000000,0.000000,0.603765 +2382,-0.797794,-0.000000,0.000000,0.602930 +2383,-0.798425,-0.000000,0.000000,0.602094 +2384,-0.799055,-0.000000,0.000000,0.601257 +2385,-0.799685,-0.000000,0.000000,0.600420 +2386,-0.800313,-0.000000,0.000000,0.599582 +2387,-0.800940,-0.000000,0.000000,0.598744 +2388,-0.801567,-0.000000,0.000000,0.597905 +2389,-0.802193,-0.000000,0.000000,0.597065 +2390,-0.802817,-0.000000,0.000000,0.596225 +2391,-0.803441,-0.000000,0.000000,0.595384 +2392,-0.804064,-0.000000,0.000000,0.594542 +2393,-0.804687,-0.000000,0.000000,0.593700 +2394,-0.805308,-0.000000,0.000000,0.592857 +2395,-0.805928,-0.000000,0.000000,0.592013 +2396,-0.806548,-0.000000,0.000000,0.591169 +2397,-0.807166,-0.000000,0.000000,0.590324 +2398,-0.807784,-0.000000,0.000000,0.589478 +2399,-0.808401,-0.000000,0.000000,0.588632 +2400,-0.809017,-0.000000,0.000000,0.587785 +2401,-0.809632,-0.000000,0.000000,0.586938 +2402,-0.810246,-0.000000,0.000000,0.586090 +2403,-0.810860,-0.000000,0.000000,0.585241 +2404,-0.811472,-0.000000,0.000000,0.584391 +2405,-0.812084,-0.000000,0.000000,0.583541 +2406,-0.812694,-0.000000,0.000000,0.582690 +2407,-0.813304,-0.000000,0.000000,0.581839 +2408,-0.813913,-0.000000,0.000000,0.580987 +2409,-0.814521,-0.000000,0.000000,0.580134 +2410,-0.815128,-0.000000,0.000000,0.579281 +2411,-0.815734,-0.000000,0.000000,0.578427 +2412,-0.816339,-0.000000,0.000000,0.577573 +2413,-0.816944,-0.000000,0.000000,0.576718 +2414,-0.817547,-0.000000,0.000000,0.575862 +2415,-0.818150,-0.000000,0.000000,0.575005 +2416,-0.818751,-0.000000,0.000000,0.574148 +2417,-0.819352,-0.000000,0.000000,0.573290 +2418,-0.819952,-0.000000,0.000000,0.572432 +2419,-0.820551,-0.000000,0.000000,0.571573 +2420,-0.821149,-0.000000,0.000000,0.570714 +2421,-0.821746,-0.000000,0.000000,0.569853 +2422,-0.822343,-0.000000,0.000000,0.568993 +2423,-0.822938,-0.000000,0.000000,0.568131 +2424,-0.823533,-0.000000,0.000000,0.567269 +2425,-0.824126,-0.000000,0.000000,0.566406 +2426,-0.824719,-0.000000,0.000000,0.565543 +2427,-0.825311,-0.000000,0.000000,0.564679 +2428,-0.825902,-0.000000,0.000000,0.563814 +2429,-0.826492,-0.000000,0.000000,0.562949 +2430,-0.827081,-0.000000,0.000000,0.562083 +2431,-0.827669,-0.000000,0.000000,0.561217 +2432,-0.828256,-0.000000,0.000000,0.560350 +2433,-0.828842,-0.000000,0.000000,0.559482 +2434,-0.829428,-0.000000,0.000000,0.558614 +2435,-0.830012,-0.000000,0.000000,0.557745 +2436,-0.830596,-0.000000,0.000000,0.556876 +2437,-0.831179,-0.000000,0.000000,0.556006 +2438,-0.831760,-0.000000,0.000000,0.555135 +2439,-0.832341,-0.000000,0.000000,0.554263 +2440,-0.832921,-0.000000,0.000000,0.553392 +2441,-0.833500,-0.000000,0.000000,0.552519 +2442,-0.834078,-0.000000,0.000000,0.551646 +2443,-0.834656,-0.000000,0.000000,0.550772 +2444,-0.835232,-0.000000,0.000000,0.549898 +2445,-0.835807,-0.000000,0.000000,0.549023 +2446,-0.836382,-0.000000,0.000000,0.548147 +2447,-0.836955,-0.000000,0.000000,0.547271 +2448,-0.837528,-0.000000,0.000000,0.546394 +2449,-0.838100,-0.000000,0.000000,0.545517 +2450,-0.838671,-0.000000,0.000000,0.544639 +2451,-0.839240,-0.000000,0.000000,0.543760 +2452,-0.839809,-0.000000,0.000000,0.542881 +2453,-0.840377,-0.000000,0.000000,0.542002 +2454,-0.840945,-0.000000,0.000000,0.541121 +2455,-0.841511,-0.000000,0.000000,0.540240 +2456,-0.842076,-0.000000,0.000000,0.539359 +2457,-0.842640,-0.000000,0.000000,0.538477 +2458,-0.843204,-0.000000,0.000000,0.537594 +2459,-0.843766,-0.000000,0.000000,0.536711 +2460,-0.844328,-0.000000,0.000000,0.535827 +2461,-0.844889,-0.000000,0.000000,0.534942 +2462,-0.845448,-0.000000,0.000000,0.534057 +2463,-0.846007,-0.000000,0.000000,0.533172 +2464,-0.846565,-0.000000,0.000000,0.532285 +2465,-0.847122,-0.000000,0.000000,0.531399 +2466,-0.847678,-0.000000,0.000000,0.530511 +2467,-0.848233,-0.000000,0.000000,0.529623 +2468,-0.848787,-0.000000,0.000000,0.528735 +2469,-0.849340,-0.000000,0.000000,0.527846 +2470,-0.849893,-0.000000,0.000000,0.526956 +2471,-0.850444,-0.000000,0.000000,0.526066 +2472,-0.850994,-0.000000,0.000000,0.525175 +2473,-0.851544,-0.000000,0.000000,0.524283 +2474,-0.852093,-0.000000,0.000000,0.523391 +2475,-0.852640,-0.000000,0.000000,0.522499 +2476,-0.853187,-0.000000,0.000000,0.521605 +2477,-0.853733,-0.000000,0.000000,0.520712 +2478,-0.854277,-0.000000,0.000000,0.519817 +2479,-0.854821,-0.000000,0.000000,0.518922 +2480,-0.855364,-0.000000,0.000000,0.518027 +2481,-0.855906,-0.000000,0.000000,0.517131 +2482,-0.856447,-0.000000,0.000000,0.516234 +2483,-0.856987,-0.000000,0.000000,0.515337 +2484,-0.857527,-0.000000,0.000000,0.514440 +2485,-0.858065,-0.000000,0.000000,0.513541 +2486,-0.858602,-0.000000,0.000000,0.512642 +2487,-0.859139,-0.000000,0.000000,0.511743 +2488,-0.859674,-0.000000,0.000000,0.510843 +2489,-0.860208,-0.000000,0.000000,0.509943 +2490,-0.860742,-0.000000,0.000000,0.509041 +2491,-0.861275,-0.000000,0.000000,0.508140 +2492,-0.861806,-0.000000,0.000000,0.507238 +2493,-0.862337,-0.000000,0.000000,0.506335 +2494,-0.862867,-0.000000,0.000000,0.505431 +2495,-0.863396,-0.000000,0.000000,0.504528 +2496,-0.863923,-0.000000,0.000000,0.503623 +2497,-0.864450,-0.000000,0.000000,0.502718 +2498,-0.864976,-0.000000,0.000000,0.501813 +2499,-0.865501,-0.000000,0.000000,0.500907 +2500,-0.866025,-0.000000,0.000000,0.500000 +2501,-0.866549,-0.000000,0.000000,0.499093 +2502,-0.867071,-0.000000,0.000000,0.498185 +2503,-0.867592,-0.000000,0.000000,0.497277 +2504,-0.868112,-0.000000,0.000000,0.496368 +2505,-0.868632,-0.000000,0.000000,0.495459 +2506,-0.869150,-0.000000,0.000000,0.494549 +2507,-0.869667,-0.000000,0.000000,0.493638 +2508,-0.870184,-0.000000,0.000000,0.492727 +2509,-0.870699,-0.000000,0.000000,0.491816 +2510,-0.871214,-0.000000,0.000000,0.490904 +2511,-0.871727,-0.000000,0.000000,0.489991 +2512,-0.872240,-0.000000,0.000000,0.489078 +2513,-0.872752,-0.000000,0.000000,0.488164 +2514,-0.873262,-0.000000,0.000000,0.487250 +2515,-0.873772,-0.000000,0.000000,0.486335 +2516,-0.874281,-0.000000,0.000000,0.485420 +2517,-0.874789,-0.000000,0.000000,0.484504 +2518,-0.875296,-0.000000,0.000000,0.483588 +2519,-0.875802,-0.000000,0.000000,0.482671 +2520,-0.876307,-0.000000,0.000000,0.481754 +2521,-0.876811,-0.000000,0.000000,0.480836 +2522,-0.877314,-0.000000,0.000000,0.479917 +2523,-0.877816,-0.000000,0.000000,0.478998 +2524,-0.878317,-0.000000,0.000000,0.478079 +2525,-0.878817,-0.000000,0.000000,0.477159 +2526,-0.879316,-0.000000,0.000000,0.476238 +2527,-0.879815,-0.000000,0.000000,0.475317 +2528,-0.880312,-0.000000,0.000000,0.474396 +2529,-0.880808,-0.000000,0.000000,0.473473 +2530,-0.881303,-0.000000,0.000000,0.472551 +2531,-0.881798,-0.000000,0.000000,0.471628 +2532,-0.882291,-0.000000,0.000000,0.470704 +2533,-0.882784,-0.000000,0.000000,0.469780 +2534,-0.883275,-0.000000,0.000000,0.468855 +2535,-0.883766,-0.000000,0.000000,0.467930 +2536,-0.884255,-0.000000,0.000000,0.467004 +2537,-0.884744,-0.000000,0.000000,0.466078 +2538,-0.885231,-0.000000,0.000000,0.465151 +2539,-0.885718,-0.000000,0.000000,0.464224 +2540,-0.886204,-0.000000,0.000000,0.463296 +2541,-0.886688,-0.000000,0.000000,0.462368 +2542,-0.887172,-0.000000,0.000000,0.461439 +2543,-0.887655,-0.000000,0.000000,0.460510 +2544,-0.888136,-0.000000,0.000000,0.459580 +2545,-0.888617,-0.000000,0.000000,0.458650 +2546,-0.889097,-0.000000,0.000000,0.457719 +2547,-0.889576,-0.000000,0.000000,0.456787 +2548,-0.890054,-0.000000,0.000000,0.455856 +2549,-0.890531,-0.000000,0.000000,0.454923 +2550,-0.891007,-0.000000,0.000000,0.453990 +2551,-0.891481,-0.000000,0.000000,0.453057 +2552,-0.891955,-0.000000,0.000000,0.452123 +2553,-0.892428,-0.000000,0.000000,0.451189 +2554,-0.892900,-0.000000,0.000000,0.450254 +2555,-0.893371,-0.000000,0.000000,0.449319 +2556,-0.893841,-0.000000,0.000000,0.448383 +2557,-0.894310,-0.000000,0.000000,0.447447 +2558,-0.894779,-0.000000,0.000000,0.446510 +2559,-0.895246,-0.000000,0.000000,0.445573 +2560,-0.895712,-0.000000,0.000000,0.444635 +2561,-0.896177,-0.000000,0.000000,0.443697 +2562,-0.896641,-0.000000,0.000000,0.442758 +2563,-0.897104,-0.000000,0.000000,0.441819 +2564,-0.897566,-0.000000,0.000000,0.440879 +2565,-0.898028,-0.000000,0.000000,0.439939 +2566,-0.898488,-0.000000,0.000000,0.438999 +2567,-0.898947,-0.000000,0.000000,0.438057 +2568,-0.899405,-0.000000,0.000000,0.437116 +2569,-0.899863,-0.000000,0.000000,0.436174 +2570,-0.900319,-0.000000,0.000000,0.435231 +2571,-0.900774,-0.000000,0.000000,0.434288 +2572,-0.901228,-0.000000,0.000000,0.433345 +2573,-0.901682,-0.000000,0.000000,0.432401 +2574,-0.902134,-0.000000,0.000000,0.431456 +2575,-0.902585,-0.000000,0.000000,0.430511 +2576,-0.903036,-0.000000,0.000000,0.429566 +2577,-0.903485,-0.000000,0.000000,0.428620 +2578,-0.903933,-0.000000,0.000000,0.427673 +2579,-0.904381,-0.000000,0.000000,0.426727 +2580,-0.904827,-0.000000,0.000000,0.425779 +2581,-0.905272,-0.000000,0.000000,0.424832 +2582,-0.905717,-0.000000,0.000000,0.423883 +2583,-0.906160,-0.000000,0.000000,0.422935 +2584,-0.906603,-0.000000,0.000000,0.421985 +2585,-0.907044,-0.000000,0.000000,0.421036 +2586,-0.907484,-0.000000,0.000000,0.420086 +2587,-0.907924,-0.000000,0.000000,0.419135 +2588,-0.908362,-0.000000,0.000000,0.418184 +2589,-0.908800,-0.000000,0.000000,0.417233 +2590,-0.909236,-0.000000,0.000000,0.416281 +2591,-0.909672,-0.000000,0.000000,0.415328 +2592,-0.910106,-0.000000,0.000000,0.414376 +2593,-0.910539,-0.000000,0.000000,0.413422 +2594,-0.910972,-0.000000,0.000000,0.412469 +2595,-0.911403,-0.000000,0.000000,0.411514 +2596,-0.911834,-0.000000,0.000000,0.410560 +2597,-0.912263,-0.000000,0.000000,0.409605 +2598,-0.912692,-0.000000,0.000000,0.408649 +2599,-0.913119,-0.000000,0.000000,0.407693 +2600,-0.913545,-0.000000,0.000000,0.406737 +2601,-0.913971,-0.000000,0.000000,0.405780 +2602,-0.914395,-0.000000,0.000000,0.404822 +2603,-0.914819,-0.000000,0.000000,0.403865 +2604,-0.915241,-0.000000,0.000000,0.402906 +2605,-0.915663,-0.000000,0.000000,0.401948 +2606,-0.916083,-0.000000,0.000000,0.400989 +2607,-0.916502,-0.000000,0.000000,0.400029 +2608,-0.916921,-0.000000,0.000000,0.399069 +2609,-0.917338,-0.000000,0.000000,0.398109 +2610,-0.917755,-0.000000,0.000000,0.397148 +2611,-0.918170,-0.000000,0.000000,0.396187 +2612,-0.918584,-0.000000,0.000000,0.395225 +2613,-0.918998,-0.000000,0.000000,0.394263 +2614,-0.919410,-0.000000,0.000000,0.393300 +2615,-0.919821,-0.000000,0.000000,0.392337 +2616,-0.920232,-0.000000,0.000000,0.391374 +2617,-0.920641,-0.000000,0.000000,0.390410 +2618,-0.921050,-0.000000,0.000000,0.389445 +2619,-0.921457,-0.000000,0.000000,0.388481 +2620,-0.921863,-0.000000,0.000000,0.387516 +2621,-0.922268,-0.000000,0.000000,0.386550 +2622,-0.922673,-0.000000,0.000000,0.385584 +2623,-0.923076,-0.000000,0.000000,0.384618 +2624,-0.923478,-0.000000,0.000000,0.383651 +2625,-0.923880,-0.000000,0.000000,0.382683 +2626,-0.924280,-0.000000,0.000000,0.381716 +2627,-0.924679,-0.000000,0.000000,0.380748 +2628,-0.925077,-0.000000,0.000000,0.379779 +2629,-0.925474,-0.000000,0.000000,0.378810 +2630,-0.925871,-0.000000,0.000000,0.377841 +2631,-0.926266,-0.000000,0.000000,0.376871 +2632,-0.926660,-0.000000,0.000000,0.375901 +2633,-0.927053,-0.000000,0.000000,0.374930 +2634,-0.927445,-0.000000,0.000000,0.373959 +2635,-0.927836,-0.000000,0.000000,0.372988 +2636,-0.928226,-0.000000,0.000000,0.372016 +2637,-0.928615,-0.000000,0.000000,0.371044 +2638,-0.929003,-0.000000,0.000000,0.370071 +2639,-0.929390,-0.000000,0.000000,0.369098 +2640,-0.929776,-0.000000,0.000000,0.368125 +2641,-0.930161,-0.000000,0.000000,0.367151 +2642,-0.930545,-0.000000,0.000000,0.366176 +2643,-0.930928,-0.000000,0.000000,0.365202 +2644,-0.931310,-0.000000,0.000000,0.364227 +2645,-0.931691,-0.000000,0.000000,0.363251 +2646,-0.932071,-0.000000,0.000000,0.362275 +2647,-0.932450,-0.000000,0.000000,0.361299 +2648,-0.932828,-0.000000,0.000000,0.360322 +2649,-0.933205,-0.000000,0.000000,0.359345 +2650,-0.933580,-0.000000,0.000000,0.358368 +2651,-0.933955,-0.000000,0.000000,0.357390 +2652,-0.934329,-0.000000,0.000000,0.356412 +2653,-0.934702,-0.000000,0.000000,0.355433 +2654,-0.935073,-0.000000,0.000000,0.354454 +2655,-0.935444,-0.000000,0.000000,0.353475 +2656,-0.935814,-0.000000,0.000000,0.352495 +2657,-0.936182,-0.000000,0.000000,0.351515 +2658,-0.936550,-0.000000,0.000000,0.350534 +2659,-0.936916,-0.000000,0.000000,0.349553 +2660,-0.937282,-0.000000,0.000000,0.348572 +2661,-0.937646,-0.000000,0.000000,0.347590 +2662,-0.938010,-0.000000,0.000000,0.346608 +2663,-0.938372,-0.000000,0.000000,0.345626 +2664,-0.938734,-0.000000,0.000000,0.344643 +2665,-0.939094,-0.000000,0.000000,0.343660 +2666,-0.939454,-0.000000,0.000000,0.342676 +2667,-0.939812,-0.000000,0.000000,0.341692 +2668,-0.940169,-0.000000,0.000000,0.340708 +2669,-0.940526,-0.000000,0.000000,0.339723 +2670,-0.940881,-0.000000,0.000000,0.338738 +2671,-0.941235,-0.000000,0.000000,0.337752 +2672,-0.941588,-0.000000,0.000000,0.336767 +2673,-0.941940,-0.000000,0.000000,0.335780 +2674,-0.942291,-0.000000,0.000000,0.334794 +2675,-0.942641,-0.000000,0.000000,0.333807 +2676,-0.942991,-0.000000,0.000000,0.332820 +2677,-0.943339,-0.000000,0.000000,0.331832 +2678,-0.943686,-0.000000,0.000000,0.330844 +2679,-0.944031,-0.000000,0.000000,0.329855 +2680,-0.944376,-0.000000,0.000000,0.328867 +2681,-0.944720,-0.000000,0.000000,0.327878 +2682,-0.945063,-0.000000,0.000000,0.326888 +2683,-0.945405,-0.000000,0.000000,0.325898 +2684,-0.945746,-0.000000,0.000000,0.324908 +2685,-0.946085,-0.000000,0.000000,0.323917 +2686,-0.946424,-0.000000,0.000000,0.322927 +2687,-0.946762,-0.000000,0.000000,0.321935 +2688,-0.947098,-0.000000,0.000000,0.320944 +2689,-0.947434,-0.000000,0.000000,0.319952 +2690,-0.947768,-0.000000,0.000000,0.318959 +2691,-0.948102,-0.000000,0.000000,0.317967 +2692,-0.948434,-0.000000,0.000000,0.316974 +2693,-0.948766,-0.000000,0.000000,0.315980 +2694,-0.949096,-0.000000,0.000000,0.314987 +2695,-0.949425,-0.000000,0.000000,0.313992 +2696,-0.949754,-0.000000,0.000000,0.312998 +2697,-0.950081,-0.000000,0.000000,0.312003 +2698,-0.950407,-0.000000,0.000000,0.311008 +2699,-0.950732,-0.000000,0.000000,0.310013 +2700,-0.951057,-0.000000,0.000000,0.309017 +2701,-0.951380,-0.000000,0.000000,0.308021 +2702,-0.951702,-0.000000,0.000000,0.307024 +2703,-0.952023,-0.000000,0.000000,0.306028 +2704,-0.952343,-0.000000,0.000000,0.305031 +2705,-0.952661,-0.000000,0.000000,0.304033 +2706,-0.952979,-0.000000,0.000000,0.303035 +2707,-0.953296,-0.000000,0.000000,0.302037 +2708,-0.953612,-0.000000,0.000000,0.301039 +2709,-0.953927,-0.000000,0.000000,0.300040 +2710,-0.954240,-0.000000,0.000000,0.299041 +2711,-0.954553,-0.000000,0.000000,0.298041 +2712,-0.954865,-0.000000,0.000000,0.297042 +2713,-0.955175,-0.000000,0.000000,0.296041 +2714,-0.955485,-0.000000,0.000000,0.295041 +2715,-0.955793,-0.000000,0.000000,0.294040 +2716,-0.956100,-0.000000,0.000000,0.293039 +2717,-0.956407,-0.000000,0.000000,0.292038 +2718,-0.956712,-0.000000,0.000000,0.291036 +2719,-0.957016,-0.000000,0.000000,0.290034 +2720,-0.957319,-0.000000,0.000000,0.289032 +2721,-0.957622,-0.000000,0.000000,0.288029 +2722,-0.957923,-0.000000,0.000000,0.287026 +2723,-0.958223,-0.000000,0.000000,0.286023 +2724,-0.958522,-0.000000,0.000000,0.285019 +2725,-0.958820,-0.000000,0.000000,0.284015 +2726,-0.959117,-0.000000,0.000000,0.283011 +2727,-0.959412,-0.000000,0.000000,0.282007 +2728,-0.959707,-0.000000,0.000000,0.281002 +2729,-0.960001,-0.000000,0.000000,0.279997 +2730,-0.960294,-0.000000,0.000000,0.278991 +2731,-0.960585,-0.000000,0.000000,0.277985 +2732,-0.960876,-0.000000,0.000000,0.276979 +2733,-0.961165,-0.000000,0.000000,0.275973 +2734,-0.961454,-0.000000,0.000000,0.274966 +2735,-0.961741,-0.000000,0.000000,0.273959 +2736,-0.962028,-0.000000,0.000000,0.272952 +2737,-0.962313,-0.000000,0.000000,0.271944 +2738,-0.962597,-0.000000,0.000000,0.270936 +2739,-0.962880,-0.000000,0.000000,0.269928 +2740,-0.963163,-0.000000,0.000000,0.268920 +2741,-0.963444,-0.000000,0.000000,0.267911 +2742,-0.963724,-0.000000,0.000000,0.266902 +2743,-0.964003,-0.000000,0.000000,0.265893 +2744,-0.964281,-0.000000,0.000000,0.264883 +2745,-0.964557,-0.000000,0.000000,0.263873 +2746,-0.964833,-0.000000,0.000000,0.262863 +2747,-0.965108,-0.000000,0.000000,0.261852 +2748,-0.965382,-0.000000,0.000000,0.260842 +2749,-0.965654,-0.000000,0.000000,0.259830 +2750,-0.965926,-0.000000,0.000000,0.258819 +2751,-0.966196,-0.000000,0.000000,0.257807 +2752,-0.966466,-0.000000,0.000000,0.256795 +2753,-0.966734,-0.000000,0.000000,0.255783 +2754,-0.967001,-0.000000,0.000000,0.254771 +2755,-0.967268,-0.000000,0.000000,0.253758 +2756,-0.967533,-0.000000,0.000000,0.252745 +2757,-0.967797,-0.000000,0.000000,0.251732 +2758,-0.968060,-0.000000,0.000000,0.250718 +2759,-0.968322,-0.000000,0.000000,0.249704 +2760,-0.968583,-0.000000,0.000000,0.248690 +2761,-0.968843,-0.000000,0.000000,0.247675 +2762,-0.969102,-0.000000,0.000000,0.246661 +2763,-0.969360,-0.000000,0.000000,0.245646 +2764,-0.969616,-0.000000,0.000000,0.244631 +2765,-0.969872,-0.000000,0.000000,0.243615 +2766,-0.970127,-0.000000,0.000000,0.242599 +2767,-0.970380,-0.000000,0.000000,0.241583 +2768,-0.970633,-0.000000,0.000000,0.240567 +2769,-0.970884,-0.000000,0.000000,0.239550 +2770,-0.971134,-0.000000,0.000000,0.238533 +2771,-0.971384,-0.000000,0.000000,0.237516 +2772,-0.971632,-0.000000,0.000000,0.236499 +2773,-0.971879,-0.000000,0.000000,0.235481 +2774,-0.972125,-0.000000,0.000000,0.234463 +2775,-0.972370,-0.000000,0.000000,0.233445 +2776,-0.972614,-0.000000,0.000000,0.232427 +2777,-0.972857,-0.000000,0.000000,0.231408 +2778,-0.973099,-0.000000,0.000000,0.230389 +2779,-0.973339,-0.000000,0.000000,0.229370 +2780,-0.973579,-0.000000,0.000000,0.228351 +2781,-0.973817,-0.000000,0.000000,0.227331 +2782,-0.974055,-0.000000,0.000000,0.226311 +2783,-0.974291,-0.000000,0.000000,0.225291 +2784,-0.974527,-0.000000,0.000000,0.224271 +2785,-0.974761,-0.000000,0.000000,0.223250 +2786,-0.974994,-0.000000,0.000000,0.222229 +2787,-0.975227,-0.000000,0.000000,0.221208 +2788,-0.975458,-0.000000,0.000000,0.220187 +2789,-0.975688,-0.000000,0.000000,0.219165 +2790,-0.975917,-0.000000,0.000000,0.218143 +2791,-0.976145,-0.000000,0.000000,0.217121 +2792,-0.976371,-0.000000,0.000000,0.216099 +2793,-0.976597,-0.000000,0.000000,0.215076 +2794,-0.976822,-0.000000,0.000000,0.214053 +2795,-0.977046,-0.000000,0.000000,0.213030 +2796,-0.977268,-0.000000,0.000000,0.212007 +2797,-0.977490,-0.000000,0.000000,0.210984 +2798,-0.977710,-0.000000,0.000000,0.209960 +2799,-0.977929,-0.000000,0.000000,0.208936 +2800,-0.978148,-0.000000,0.000000,0.207912 +2801,-0.978365,-0.000000,0.000000,0.206887 +2802,-0.978581,-0.000000,0.000000,0.205863 +2803,-0.978796,-0.000000,0.000000,0.204838 +2804,-0.979010,-0.000000,0.000000,0.203813 +2805,-0.979223,-0.000000,0.000000,0.202787 +2806,-0.979435,-0.000000,0.000000,0.201762 +2807,-0.979645,-0.000000,0.000000,0.200736 +2808,-0.979855,-0.000000,0.000000,0.199710 +2809,-0.980064,-0.000000,0.000000,0.198684 +2810,-0.980271,-0.000000,0.000000,0.197657 +2811,-0.980478,-0.000000,0.000000,0.196631 +2812,-0.980683,-0.000000,0.000000,0.195604 +2813,-0.980887,-0.000000,0.000000,0.194577 +2814,-0.981091,-0.000000,0.000000,0.193549 +2815,-0.981293,-0.000000,0.000000,0.192522 +2816,-0.981494,-0.000000,0.000000,0.191494 +2817,-0.981694,-0.000000,0.000000,0.190466 +2818,-0.981893,-0.000000,0.000000,0.189438 +2819,-0.982090,-0.000000,0.000000,0.188410 +2820,-0.982287,-0.000000,0.000000,0.187381 +2821,-0.982483,-0.000000,0.000000,0.186353 +2822,-0.982678,-0.000000,0.000000,0.185324 +2823,-0.982871,-0.000000,0.000000,0.184294 +2824,-0.983064,-0.000000,0.000000,0.183265 +2825,-0.983255,-0.000000,0.000000,0.182236 +2826,-0.983445,-0.000000,0.000000,0.181206 +2827,-0.983634,-0.000000,0.000000,0.180176 +2828,-0.983823,-0.000000,0.000000,0.179146 +2829,-0.984010,-0.000000,0.000000,0.178115 +2830,-0.984196,-0.000000,0.000000,0.177085 +2831,-0.984381,-0.000000,0.000000,0.176054 +2832,-0.984564,-0.000000,0.000000,0.175023 +2833,-0.984747,-0.000000,0.000000,0.173992 +2834,-0.984929,-0.000000,0.000000,0.172961 +2835,-0.985109,-0.000000,0.000000,0.171929 +2836,-0.985289,-0.000000,0.000000,0.170897 +2837,-0.985467,-0.000000,0.000000,0.169866 +2838,-0.985645,-0.000000,0.000000,0.168833 +2839,-0.985821,-0.000000,0.000000,0.167801 +2840,-0.985996,-0.000000,0.000000,0.166769 +2841,-0.986170,-0.000000,0.000000,0.165736 +2842,-0.986343,-0.000000,0.000000,0.164703 +2843,-0.986515,-0.000000,0.000000,0.163670 +2844,-0.986686,-0.000000,0.000000,0.162637 +2845,-0.986856,-0.000000,0.000000,0.161604 +2846,-0.987024,-0.000000,0.000000,0.160570 +2847,-0.987192,-0.000000,0.000000,0.159537 +2848,-0.987359,-0.000000,0.000000,0.158503 +2849,-0.987524,-0.000000,0.000000,0.157469 +2850,-0.987688,-0.000000,0.000000,0.156434 +2851,-0.987852,-0.000000,0.000000,0.155400 +2852,-0.988014,-0.000000,0.000000,0.154366 +2853,-0.988175,-0.000000,0.000000,0.153331 +2854,-0.988335,-0.000000,0.000000,0.152296 +2855,-0.988494,-0.000000,0.000000,0.151261 +2856,-0.988652,-0.000000,0.000000,0.150226 +2857,-0.988809,-0.000000,0.000000,0.149190 +2858,-0.988964,-0.000000,0.000000,0.148155 +2859,-0.989119,-0.000000,0.000000,0.147119 +2860,-0.989272,-0.000000,0.000000,0.146083 +2861,-0.989425,-0.000000,0.000000,0.145047 +2862,-0.989576,-0.000000,0.000000,0.144011 +2863,-0.989726,-0.000000,0.000000,0.142974 +2864,-0.989876,-0.000000,0.000000,0.141938 +2865,-0.990024,-0.000000,0.000000,0.140901 +2866,-0.990171,-0.000000,0.000000,0.139864 +2867,-0.990317,-0.000000,0.000000,0.138827 +2868,-0.990461,-0.000000,0.000000,0.137790 +2869,-0.990605,-0.000000,0.000000,0.136753 +2870,-0.990748,-0.000000,0.000000,0.135716 +2871,-0.990889,-0.000000,0.000000,0.134678 +2872,-0.991030,-0.000000,0.000000,0.133640 +2873,-0.991169,-0.000000,0.000000,0.132602 +2874,-0.991308,-0.000000,0.000000,0.131564 +2875,-0.991445,-0.000000,0.000000,0.130526 +2876,-0.991581,-0.000000,0.000000,0.129488 +2877,-0.991716,-0.000000,0.000000,0.128449 +2878,-0.991850,-0.000000,0.000000,0.127411 +2879,-0.991983,-0.000000,0.000000,0.126372 +2880,-0.992115,-0.000000,0.000000,0.125333 +2881,-0.992245,-0.000000,0.000000,0.124294 +2882,-0.992375,-0.000000,0.000000,0.123255 +2883,-0.992504,-0.000000,0.000000,0.122216 +2884,-0.992631,-0.000000,0.000000,0.121176 +2885,-0.992757,-0.000000,0.000000,0.120137 +2886,-0.992883,-0.000000,0.000000,0.119097 +2887,-0.993007,-0.000000,0.000000,0.118057 +2888,-0.993130,-0.000000,0.000000,0.117017 +2889,-0.993252,-0.000000,0.000000,0.115977 +2890,-0.993373,-0.000000,0.000000,0.114937 +2891,-0.993493,-0.000000,0.000000,0.113897 +2892,-0.993611,-0.000000,0.000000,0.112856 +2893,-0.993729,-0.000000,0.000000,0.111816 +2894,-0.993845,-0.000000,0.000000,0.110775 +2895,-0.993961,-0.000000,0.000000,0.109734 +2896,-0.994075,-0.000000,0.000000,0.108693 +2897,-0.994189,-0.000000,0.000000,0.107652 +2898,-0.994301,-0.000000,0.000000,0.106611 +2899,-0.994412,-0.000000,0.000000,0.105570 +2900,-0.994522,-0.000000,0.000000,0.104528 +2901,-0.994631,-0.000000,0.000000,0.103487 +2902,-0.994739,-0.000000,0.000000,0.102445 +2903,-0.994845,-0.000000,0.000000,0.101404 +2904,-0.994951,-0.000000,0.000000,0.100362 +2905,-0.995056,-0.000000,0.000000,0.099320 +2906,-0.995159,-0.000000,0.000000,0.098278 +2907,-0.995261,-0.000000,0.000000,0.097235 +2908,-0.995363,-0.000000,0.000000,0.096193 +2909,-0.995463,-0.000000,0.000000,0.095151 +2910,-0.995562,-0.000000,0.000000,0.094108 +2911,-0.995660,-0.000000,0.000000,0.093066 +2912,-0.995757,-0.000000,0.000000,0.092023 +2913,-0.995853,-0.000000,0.000000,0.090980 +2914,-0.995947,-0.000000,0.000000,0.089937 +2915,-0.996041,-0.000000,0.000000,0.088894 +2916,-0.996134,-0.000000,0.000000,0.087851 +2917,-0.996225,-0.000000,0.000000,0.086808 +2918,-0.996315,-0.000000,0.000000,0.085765 +2919,-0.996405,-0.000000,0.000000,0.084721 +2920,-0.996493,-0.000000,0.000000,0.083678 +2921,-0.996580,-0.000000,0.000000,0.082634 +2922,-0.996666,-0.000000,0.000000,0.081591 +2923,-0.996751,-0.000000,0.000000,0.080547 +2924,-0.996835,-0.000000,0.000000,0.079503 +2925,-0.996917,-0.000000,0.000000,0.078459 +2926,-0.996999,-0.000000,0.000000,0.077415 +2927,-0.997079,-0.000000,0.000000,0.076371 +2928,-0.997159,-0.000000,0.000000,0.075327 +2929,-0.997237,-0.000000,0.000000,0.074283 +2930,-0.997314,-0.000000,0.000000,0.073238 +2931,-0.997391,-0.000000,0.000000,0.072194 +2932,-0.997466,-0.000000,0.000000,0.071149 +2933,-0.997540,-0.000000,0.000000,0.070105 +2934,-0.997613,-0.000000,0.000000,0.069060 +2935,-0.997684,-0.000000,0.000000,0.068015 +2936,-0.997755,-0.000000,0.000000,0.066970 +2937,-0.997825,-0.000000,0.000000,0.065926 +2938,-0.997893,-0.000000,0.000000,0.064881 +2939,-0.997960,-0.000000,0.000000,0.063836 +2940,-0.998027,-0.000000,0.000000,0.062791 +2941,-0.998092,-0.000000,0.000000,0.061745 +2942,-0.998156,-0.000000,0.000000,0.060700 +2943,-0.998219,-0.000000,0.000000,0.059655 +2944,-0.998281,-0.000000,0.000000,0.058609 +2945,-0.998342,-0.000000,0.000000,0.057564 +2946,-0.998402,-0.000000,0.000000,0.056519 +2947,-0.998460,-0.000000,0.000000,0.055473 +2948,-0.998518,-0.000000,0.000000,0.054427 +2949,-0.998574,-0.000000,0.000000,0.053382 +2950,-0.998630,-0.000000,0.000000,0.052336 +2951,-0.998684,-0.000000,0.000000,0.051290 +2952,-0.998737,-0.000000,0.000000,0.050244 +2953,-0.998789,-0.000000,0.000000,0.049198 +2954,-0.998840,-0.000000,0.000000,0.048152 +2955,-0.998890,-0.000000,0.000000,0.047106 +2956,-0.998939,-0.000000,0.000000,0.046060 +2957,-0.998986,-0.000000,0.000000,0.045014 +2958,-0.999033,-0.000000,0.000000,0.043968 +2959,-0.999078,-0.000000,0.000000,0.042922 +2960,-0.999123,-0.000000,0.000000,0.041876 +2961,-0.999166,-0.000000,0.000000,0.040829 +2962,-0.999208,-0.000000,0.000000,0.039783 +2963,-0.999249,-0.000000,0.000000,0.038737 +2964,-0.999289,-0.000000,0.000000,0.037690 +2965,-0.999328,-0.000000,0.000000,0.036644 +2966,-0.999366,-0.000000,0.000000,0.035597 +2967,-0.999403,-0.000000,0.000000,0.034551 +2968,-0.999439,-0.000000,0.000000,0.033504 +2969,-0.999473,-0.000000,0.000000,0.032457 +2970,-0.999507,-0.000000,0.000000,0.031411 +2971,-0.999539,-0.000000,0.000000,0.030364 +2972,-0.999570,-0.000000,0.000000,0.029317 +2973,-0.999600,-0.000000,0.000000,0.028271 +2974,-0.999629,-0.000000,0.000000,0.027224 +2975,-0.999657,-0.000000,0.000000,0.026177 +2976,-0.999684,-0.000000,0.000000,0.025130 +2977,-0.999710,-0.000000,0.000000,0.024083 +2978,-0.999735,-0.000000,0.000000,0.023036 +2979,-0.999758,-0.000000,0.000000,0.021989 +2980,-0.999781,-0.000000,0.000000,0.020942 +2981,-0.999802,-0.000000,0.000000,0.019895 +2982,-0.999822,-0.000000,0.000000,0.018848 +2983,-0.999842,-0.000000,0.000000,0.017801 +2984,-0.999860,-0.000000,0.000000,0.016754 +2985,-0.999877,-0.000000,0.000000,0.015707 +2986,-0.999893,-0.000000,0.000000,0.014660 +2987,-0.999907,-0.000000,0.000000,0.013613 +2988,-0.999921,-0.000000,0.000000,0.012566 +2989,-0.999934,-0.000000,0.000000,0.011519 +2990,-0.999945,-0.000000,0.000000,0.010472 +2991,-0.999956,-0.000000,0.000000,0.009425 +2992,-0.999965,-0.000000,0.000000,0.008377 +2993,-0.999973,-0.000000,0.000000,0.007330 +2994,-0.999980,-0.000000,0.000000,0.006283 +2995,-0.999986,-0.000000,0.000000,0.005236 +2996,-0.999991,-0.000000,0.000000,0.004189 +2997,-0.999995,-0.000000,0.000000,0.003142 +2998,-0.999998,-0.000000,0.000000,0.002094 +2999,-0.999999,-0.000000,0.000000,0.001047 diff --git a/scripts/testv/headrot_case01_3000_q.csv b/scripts/testv/headrot_case01_3000_q.csv new file mode 100644 index 0000000000..526ff57a19 --- /dev/null +++ b/scripts/testv/headrot_case01_3000_q.csv @@ -0,0 +1,3000 @@ +0,1.000000,0.000000,0.000000,0.000000 +1,0.999999,0.000000,0.001047,0.000000 +2,0.999998,0.000000,0.002094,0.000000 +3,0.999995,0.000000,0.003142,0.000000 +4,0.999991,0.000000,0.004189,0.000000 +5,0.999986,0.000000,0.005236,0.000000 +6,0.999980,0.000000,0.006283,0.000000 +7,0.999973,0.000000,0.007330,0.000000 +8,0.999965,0.000000,0.008377,0.000000 +9,0.999956,0.000000,0.009425,0.000000 +10,0.999945,0.000000,0.010472,0.000000 +11,0.999934,0.000000,0.011519,0.000000 +12,0.999921,0.000000,0.012566,0.000000 +13,0.999907,0.000000,0.013613,0.000000 +14,0.999893,0.000000,0.014660,0.000000 +15,0.999877,0.000000,0.015707,0.000000 +16,0.999860,0.000000,0.016754,0.000000 +17,0.999842,0.000000,0.017801,0.000000 +18,0.999822,0.000000,0.018848,0.000000 +19,0.999802,0.000000,0.019895,0.000000 +20,0.999781,0.000000,0.020942,0.000000 +21,0.999758,0.000000,0.021989,0.000000 +22,0.999735,0.000000,0.023036,0.000000 +23,0.999710,0.000000,0.024083,0.000000 +24,0.999684,0.000000,0.025130,0.000000 +25,0.999657,0.000000,0.026177,0.000000 +26,0.999629,0.000000,0.027224,0.000000 +27,0.999600,0.000000,0.028271,0.000000 +28,0.999570,0.000000,0.029317,0.000000 +29,0.999539,0.000000,0.030364,0.000000 +30,0.999507,0.000000,0.031411,0.000000 +31,0.999473,0.000000,0.032457,0.000000 +32,0.999439,0.000000,0.033504,0.000000 +33,0.999403,0.000000,0.034551,0.000000 +34,0.999366,0.000000,0.035597,0.000000 +35,0.999328,0.000000,0.036644,0.000000 +36,0.999289,0.000000,0.037690,0.000000 +37,0.999249,0.000000,0.038737,0.000000 +38,0.999208,0.000000,0.039783,0.000000 +39,0.999166,0.000000,0.040829,0.000000 +40,0.999123,0.000000,0.041876,0.000000 +41,0.999078,0.000000,0.042922,0.000000 +42,0.999033,0.000000,0.043968,0.000000 +43,0.998986,0.000000,0.045014,0.000000 +44,0.998939,0.000000,0.046060,0.000000 +45,0.998890,0.000000,0.047106,0.000000 +46,0.998840,0.000000,0.048152,0.000000 +47,0.998789,0.000000,0.049198,0.000000 +48,0.998737,0.000000,0.050244,0.000000 +49,0.998684,0.000000,0.051290,0.000000 +50,0.998630,0.000000,0.052336,0.000000 +51,0.998574,0.000000,0.053382,0.000000 +52,0.998518,0.000000,0.054427,0.000000 +53,0.998460,0.000000,0.055473,0.000000 +54,0.998402,0.000000,0.056519,0.000000 +55,0.998342,0.000000,0.057564,0.000000 +56,0.998281,0.000000,0.058609,0.000000 +57,0.998219,0.000000,0.059655,0.000000 +58,0.998156,0.000000,0.060700,0.000000 +59,0.998092,0.000000,0.061745,0.000000 +60,0.998027,0.000000,0.062791,0.000000 +61,0.997960,0.000000,0.063836,0.000000 +62,0.997893,0.000000,0.064881,0.000000 +63,0.997825,0.000000,0.065926,0.000000 +64,0.997755,0.000000,0.066970,0.000000 +65,0.997684,0.000000,0.068015,0.000000 +66,0.997613,0.000000,0.069060,0.000000 +67,0.997540,0.000000,0.070105,0.000000 +68,0.997466,0.000000,0.071149,0.000000 +69,0.997391,0.000000,0.072194,0.000000 +70,0.997314,0.000000,0.073238,0.000000 +71,0.997237,0.000000,0.074283,0.000000 +72,0.997159,0.000000,0.075327,0.000000 +73,0.997079,0.000000,0.076371,0.000000 +74,0.996999,0.000000,0.077415,0.000000 +75,0.996917,0.000000,0.078459,0.000000 +76,0.996835,0.000000,0.079503,0.000000 +77,0.996751,0.000000,0.080547,0.000000 +78,0.996666,0.000000,0.081591,0.000000 +79,0.996580,0.000000,0.082634,0.000000 +80,0.996493,0.000000,0.083678,0.000000 +81,0.996405,0.000000,0.084721,0.000000 +82,0.996315,0.000000,0.085765,0.000000 +83,0.996225,0.000000,0.086808,0.000000 +84,0.996134,0.000000,0.087851,0.000000 +85,0.996041,0.000000,0.088894,0.000000 +86,0.995947,0.000000,0.089937,0.000000 +87,0.995853,0.000000,0.090980,0.000000 +88,0.995757,0.000000,0.092023,0.000000 +89,0.995660,0.000000,0.093066,0.000000 +90,0.995562,0.000000,0.094108,0.000000 +91,0.995463,0.000000,0.095151,0.000000 +92,0.995363,0.000000,0.096193,0.000000 +93,0.995261,0.000000,0.097235,0.000000 +94,0.995159,0.000000,0.098278,0.000000 +95,0.995056,0.000000,0.099320,0.000000 +96,0.994951,0.000000,0.100362,0.000000 +97,0.994845,0.000000,0.101404,0.000000 +98,0.994739,0.000000,0.102445,0.000000 +99,0.994631,0.000000,0.103487,0.000000 +100,0.994522,0.000000,0.104528,0.000000 +101,0.994412,0.000000,0.105570,0.000000 +102,0.994301,0.000000,0.106611,0.000000 +103,0.994189,0.000000,0.107652,0.000000 +104,0.994075,0.000000,0.108693,0.000000 +105,0.993961,0.000000,0.109734,0.000000 +106,0.993845,0.000000,0.110775,0.000000 +107,0.993729,0.000000,0.111816,0.000000 +108,0.993611,0.000000,0.112856,0.000000 +109,0.993493,0.000000,0.113897,0.000000 +110,0.993373,0.000000,0.114937,0.000000 +111,0.993252,0.000000,0.115977,0.000000 +112,0.993130,0.000000,0.117017,0.000000 +113,0.993007,0.000000,0.118057,0.000000 +114,0.992883,0.000000,0.119097,0.000000 +115,0.992757,0.000000,0.120137,0.000000 +116,0.992631,0.000000,0.121176,0.000000 +117,0.992504,0.000000,0.122216,0.000000 +118,0.992375,0.000000,0.123255,0.000000 +119,0.992245,0.000000,0.124294,0.000000 +120,0.992115,0.000000,0.125333,0.000000 +121,0.991983,0.000000,0.126372,0.000000 +122,0.991850,0.000000,0.127411,0.000000 +123,0.991716,0.000000,0.128449,0.000000 +124,0.991581,0.000000,0.129488,0.000000 +125,0.991445,0.000000,0.130526,0.000000 +126,0.991308,0.000000,0.131564,0.000000 +127,0.991169,0.000000,0.132602,0.000000 +128,0.991030,0.000000,0.133640,0.000000 +129,0.990889,0.000000,0.134678,0.000000 +130,0.990748,0.000000,0.135716,0.000000 +131,0.990605,0.000000,0.136753,0.000000 +132,0.990461,0.000000,0.137790,0.000000 +133,0.990317,0.000000,0.138827,0.000000 +134,0.990171,0.000000,0.139864,0.000000 +135,0.990024,0.000000,0.140901,0.000000 +136,0.989876,0.000000,0.141938,0.000000 +137,0.989726,0.000000,0.142974,0.000000 +138,0.989576,0.000000,0.144011,0.000000 +139,0.989425,0.000000,0.145047,0.000000 +140,0.989272,0.000000,0.146083,0.000000 +141,0.989119,0.000000,0.147119,0.000000 +142,0.988964,0.000000,0.148155,0.000000 +143,0.988809,0.000000,0.149190,0.000000 +144,0.988652,0.000000,0.150226,0.000000 +145,0.988494,0.000000,0.151261,0.000000 +146,0.988335,0.000000,0.152296,0.000000 +147,0.988175,0.000000,0.153331,0.000000 +148,0.988014,0.000000,0.154366,0.000000 +149,0.987852,0.000000,0.155400,0.000000 +150,0.987688,0.000000,0.156434,0.000000 +151,0.987524,0.000000,0.157469,0.000000 +152,0.987359,0.000000,0.158503,0.000000 +153,0.987192,0.000000,0.159537,0.000000 +154,0.987024,0.000000,0.160570,0.000000 +155,0.986856,0.000000,0.161604,0.000000 +156,0.986686,0.000000,0.162637,0.000000 +157,0.986515,0.000000,0.163670,0.000000 +158,0.986343,0.000000,0.164703,0.000000 +159,0.986170,0.000000,0.165736,0.000000 +160,0.985996,0.000000,0.166769,0.000000 +161,0.985821,0.000000,0.167801,0.000000 +162,0.985645,0.000000,0.168833,0.000000 +163,0.985467,0.000000,0.169866,0.000000 +164,0.985289,0.000000,0.170897,0.000000 +165,0.985109,0.000000,0.171929,0.000000 +166,0.984929,0.000000,0.172961,0.000000 +167,0.984747,0.000000,0.173992,0.000000 +168,0.984564,0.000000,0.175023,0.000000 +169,0.984381,0.000000,0.176054,0.000000 +170,0.984196,0.000000,0.177085,0.000000 +171,0.984010,0.000000,0.178115,0.000000 +172,0.983823,0.000000,0.179146,0.000000 +173,0.983634,0.000000,0.180176,0.000000 +174,0.983445,0.000000,0.181206,0.000000 +175,0.983255,0.000000,0.182236,0.000000 +176,0.983064,0.000000,0.183265,0.000000 +177,0.982871,0.000000,0.184294,0.000000 +178,0.982678,0.000000,0.185324,0.000000 +179,0.982483,0.000000,0.186353,0.000000 +180,0.982287,0.000000,0.187381,0.000000 +181,0.982090,0.000000,0.188410,0.000000 +182,0.981893,0.000000,0.189438,0.000000 +183,0.981694,0.000000,0.190466,0.000000 +184,0.981494,0.000000,0.191494,0.000000 +185,0.981293,0.000000,0.192522,0.000000 +186,0.981091,0.000000,0.193549,0.000000 +187,0.980887,0.000000,0.194577,0.000000 +188,0.980683,0.000000,0.195604,0.000000 +189,0.980478,0.000000,0.196631,0.000000 +190,0.980271,0.000000,0.197657,0.000000 +191,0.980064,0.000000,0.198684,0.000000 +192,0.979855,0.000000,0.199710,0.000000 +193,0.979645,0.000000,0.200736,0.000000 +194,0.979435,0.000000,0.201762,0.000000 +195,0.979223,0.000000,0.202787,0.000000 +196,0.979010,0.000000,0.203813,0.000000 +197,0.978796,0.000000,0.204838,0.000000 +198,0.978581,0.000000,0.205863,0.000000 +199,0.978365,0.000000,0.206887,0.000000 +200,0.978148,0.000000,0.207912,0.000000 +201,0.977929,0.000000,0.208936,0.000000 +202,0.977710,0.000000,0.209960,0.000000 +203,0.977490,0.000000,0.210984,0.000000 +204,0.977268,0.000000,0.212007,0.000000 +205,0.977046,0.000000,0.213030,0.000000 +206,0.976822,0.000000,0.214053,0.000000 +207,0.976597,0.000000,0.215076,0.000000 +208,0.976371,0.000000,0.216099,0.000000 +209,0.976145,0.000000,0.217121,0.000000 +210,0.975917,0.000000,0.218143,0.000000 +211,0.975688,0.000000,0.219165,0.000000 +212,0.975458,0.000000,0.220187,0.000000 +213,0.975227,0.000000,0.221208,0.000000 +214,0.974994,0.000000,0.222229,0.000000 +215,0.974761,0.000000,0.223250,0.000000 +216,0.974527,0.000000,0.224271,0.000000 +217,0.974291,0.000000,0.225291,0.000000 +218,0.974055,0.000000,0.226311,0.000000 +219,0.973817,0.000000,0.227331,0.000000 +220,0.973579,0.000000,0.228351,0.000000 +221,0.973339,0.000000,0.229370,0.000000 +222,0.973099,0.000000,0.230389,0.000000 +223,0.972857,0.000000,0.231408,0.000000 +224,0.972614,0.000000,0.232427,0.000000 +225,0.972370,0.000000,0.233445,0.000000 +226,0.972125,0.000000,0.234463,0.000000 +227,0.971879,0.000000,0.235481,0.000000 +228,0.971632,0.000000,0.236499,0.000000 +229,0.971384,0.000000,0.237516,0.000000 +230,0.971134,0.000000,0.238533,0.000000 +231,0.970884,0.000000,0.239550,0.000000 +232,0.970633,0.000000,0.240567,0.000000 +233,0.970380,0.000000,0.241583,0.000000 +234,0.970127,0.000000,0.242599,0.000000 +235,0.969872,0.000000,0.243615,0.000000 +236,0.969616,0.000000,0.244631,0.000000 +237,0.969360,0.000000,0.245646,0.000000 +238,0.969102,0.000000,0.246661,0.000000 +239,0.968843,0.000000,0.247675,0.000000 +240,0.968583,0.000000,0.248690,0.000000 +241,0.968322,0.000000,0.249704,0.000000 +242,0.968060,0.000000,0.250718,0.000000 +243,0.967797,0.000000,0.251732,0.000000 +244,0.967533,0.000000,0.252745,0.000000 +245,0.967268,0.000000,0.253758,0.000000 +246,0.967001,0.000000,0.254771,0.000000 +247,0.966734,0.000000,0.255783,0.000000 +248,0.966466,0.000000,0.256795,0.000000 +249,0.966196,0.000000,0.257807,0.000000 +250,0.965926,0.000000,0.258819,0.000000 +251,0.965654,0.000000,0.259830,0.000000 +252,0.965382,0.000000,0.260842,0.000000 +253,0.965108,0.000000,0.261852,0.000000 +254,0.964833,0.000000,0.262863,0.000000 +255,0.964557,0.000000,0.263873,0.000000 +256,0.964281,0.000000,0.264883,0.000000 +257,0.964003,0.000000,0.265893,0.000000 +258,0.963724,0.000000,0.266902,0.000000 +259,0.963444,0.000000,0.267911,0.000000 +260,0.963163,0.000000,0.268920,0.000000 +261,0.962880,0.000000,0.269928,0.000000 +262,0.962597,0.000000,0.270936,0.000000 +263,0.962313,0.000000,0.271944,0.000000 +264,0.962028,0.000000,0.272952,0.000000 +265,0.961741,0.000000,0.273959,0.000000 +266,0.961454,0.000000,0.274966,0.000000 +267,0.961165,0.000000,0.275973,0.000000 +268,0.960876,0.000000,0.276979,0.000000 +269,0.960585,0.000000,0.277985,0.000000 +270,0.960294,0.000000,0.278991,0.000000 +271,0.960001,0.000000,0.279997,0.000000 +272,0.959707,0.000000,0.281002,0.000000 +273,0.959412,0.000000,0.282007,0.000000 +274,0.959117,0.000000,0.283011,0.000000 +275,0.958820,0.000000,0.284015,0.000000 +276,0.958522,0.000000,0.285019,0.000000 +277,0.958223,0.000000,0.286023,0.000000 +278,0.957923,0.000000,0.287026,0.000000 +279,0.957622,0.000000,0.288029,0.000000 +280,0.957319,0.000000,0.289032,0.000000 +281,0.957016,0.000000,0.290034,0.000000 +282,0.956712,0.000000,0.291036,0.000000 +283,0.956407,0.000000,0.292038,0.000000 +284,0.956100,0.000000,0.293039,0.000000 +285,0.955793,0.000000,0.294040,0.000000 +286,0.955485,0.000000,0.295041,0.000000 +287,0.955175,0.000000,0.296041,0.000000 +288,0.954865,0.000000,0.297042,0.000000 +289,0.954553,0.000000,0.298041,0.000000 +290,0.954240,0.000000,0.299041,0.000000 +291,0.953927,0.000000,0.300040,0.000000 +292,0.953612,0.000000,0.301039,0.000000 +293,0.953296,0.000000,0.302037,0.000000 +294,0.952979,0.000000,0.303035,0.000000 +295,0.952661,0.000000,0.304033,0.000000 +296,0.952343,0.000000,0.305031,0.000000 +297,0.952023,0.000000,0.306028,0.000000 +298,0.951702,0.000000,0.307024,0.000000 +299,0.951380,0.000000,0.308021,0.000000 +300,0.951057,0.000000,0.309017,0.000000 +301,0.950732,0.000000,0.310013,0.000000 +302,0.950407,0.000000,0.311008,0.000000 +303,0.950081,0.000000,0.312003,0.000000 +304,0.949754,0.000000,0.312998,0.000000 +305,0.949425,0.000000,0.313992,0.000000 +306,0.949096,0.000000,0.314987,0.000000 +307,0.948766,0.000000,0.315980,0.000000 +308,0.948434,0.000000,0.316974,0.000000 +309,0.948102,0.000000,0.317967,0.000000 +310,0.947768,0.000000,0.318959,0.000000 +311,0.947434,0.000000,0.319952,0.000000 +312,0.947098,0.000000,0.320944,0.000000 +313,0.946762,0.000000,0.321935,0.000000 +314,0.946424,0.000000,0.322927,0.000000 +315,0.946085,0.000000,0.323917,0.000000 +316,0.945746,0.000000,0.324908,0.000000 +317,0.945405,0.000000,0.325898,0.000000 +318,0.945063,0.000000,0.326888,0.000000 +319,0.944720,0.000000,0.327878,0.000000 +320,0.944376,0.000000,0.328867,0.000000 +321,0.944031,0.000000,0.329855,0.000000 +322,0.943686,0.000000,0.330844,0.000000 +323,0.943339,0.000000,0.331832,0.000000 +324,0.942991,0.000000,0.332820,0.000000 +325,0.942641,0.000000,0.333807,0.000000 +326,0.942291,0.000000,0.334794,0.000000 +327,0.941940,0.000000,0.335780,0.000000 +328,0.941588,0.000000,0.336767,0.000000 +329,0.941235,0.000000,0.337752,0.000000 +330,0.940881,0.000000,0.338738,0.000000 +331,0.940526,0.000000,0.339723,0.000000 +332,0.940169,0.000000,0.340708,0.000000 +333,0.939812,0.000000,0.341692,0.000000 +334,0.939454,0.000000,0.342676,0.000000 +335,0.939094,0.000000,0.343660,0.000000 +336,0.938734,0.000000,0.344643,0.000000 +337,0.938372,0.000000,0.345626,0.000000 +338,0.938010,0.000000,0.346608,0.000000 +339,0.937646,0.000000,0.347590,0.000000 +340,0.937282,0.000000,0.348572,0.000000 +341,0.936916,0.000000,0.349553,0.000000 +342,0.936550,0.000000,0.350534,0.000000 +343,0.936182,0.000000,0.351515,0.000000 +344,0.935814,0.000000,0.352495,0.000000 +345,0.935444,0.000000,0.353475,0.000000 +346,0.935073,0.000000,0.354454,0.000000 +347,0.934702,0.000000,0.355433,0.000000 +348,0.934329,0.000000,0.356412,0.000000 +349,0.933955,0.000000,0.357390,0.000000 +350,0.933580,0.000000,0.358368,0.000000 +351,0.933205,0.000000,0.359345,0.000000 +352,0.932828,0.000000,0.360322,0.000000 +353,0.932450,0.000000,0.361299,0.000000 +354,0.932071,0.000000,0.362275,0.000000 +355,0.931691,0.000000,0.363251,0.000000 +356,0.931310,0.000000,0.364227,0.000000 +357,0.930928,0.000000,0.365202,0.000000 +358,0.930545,0.000000,0.366176,0.000000 +359,0.930161,0.000000,0.367151,0.000000 +360,0.929776,0.000000,0.368125,0.000000 +361,0.929390,0.000000,0.369098,0.000000 +362,0.929003,0.000000,0.370071,0.000000 +363,0.928615,0.000000,0.371044,0.000000 +364,0.928226,0.000000,0.372016,0.000000 +365,0.927836,0.000000,0.372988,0.000000 +366,0.927445,0.000000,0.373959,0.000000 +367,0.927053,0.000000,0.374930,0.000000 +368,0.926660,0.000000,0.375901,0.000000 +369,0.926266,0.000000,0.376871,0.000000 +370,0.925871,0.000000,0.377841,0.000000 +371,0.925474,0.000000,0.378810,0.000000 +372,0.925077,0.000000,0.379779,0.000000 +373,0.924679,0.000000,0.380748,0.000000 +374,0.924280,0.000000,0.381716,0.000000 +375,0.923880,0.000000,0.382683,0.000000 +376,0.923478,0.000000,0.383651,0.000000 +377,0.923076,0.000000,0.384618,0.000000 +378,0.922673,0.000000,0.385584,0.000000 +379,0.922268,0.000000,0.386550,0.000000 +380,0.921863,0.000000,0.387516,0.000000 +381,0.921457,0.000000,0.388481,0.000000 +382,0.921050,0.000000,0.389445,0.000000 +383,0.920641,0.000000,0.390410,0.000000 +384,0.920232,0.000000,0.391374,0.000000 +385,0.919821,0.000000,0.392337,0.000000 +386,0.919410,0.000000,0.393300,0.000000 +387,0.918998,0.000000,0.394263,0.000000 +388,0.918584,0.000000,0.395225,0.000000 +389,0.918170,0.000000,0.396187,0.000000 +390,0.917755,0.000000,0.397148,0.000000 +391,0.917338,0.000000,0.398109,0.000000 +392,0.916921,0.000000,0.399069,0.000000 +393,0.916502,0.000000,0.400029,0.000000 +394,0.916083,0.000000,0.400989,0.000000 +395,0.915663,0.000000,0.401948,0.000000 +396,0.915241,0.000000,0.402906,0.000000 +397,0.914819,0.000000,0.403865,0.000000 +398,0.914395,0.000000,0.404822,0.000000 +399,0.913971,0.000000,0.405780,0.000000 +400,0.913545,0.000000,0.406737,0.000000 +401,0.913119,0.000000,0.407693,0.000000 +402,0.912692,0.000000,0.408649,0.000000 +403,0.912263,0.000000,0.409605,0.000000 +404,0.911834,0.000000,0.410560,0.000000 +405,0.911403,0.000000,0.411514,0.000000 +406,0.910972,0.000000,0.412469,0.000000 +407,0.910539,0.000000,0.413422,0.000000 +408,0.910106,0.000000,0.414376,0.000000 +409,0.909672,0.000000,0.415328,0.000000 +410,0.909236,0.000000,0.416281,0.000000 +411,0.908800,0.000000,0.417233,0.000000 +412,0.908362,0.000000,0.418184,0.000000 +413,0.907924,0.000000,0.419135,0.000000 +414,0.907484,0.000000,0.420086,0.000000 +415,0.907044,0.000000,0.421036,0.000000 +416,0.906603,0.000000,0.421985,0.000000 +417,0.906160,0.000000,0.422935,0.000000 +418,0.905717,0.000000,0.423883,0.000000 +419,0.905272,0.000000,0.424832,0.000000 +420,0.904827,0.000000,0.425779,0.000000 +421,0.904381,0.000000,0.426727,0.000000 +422,0.903933,0.000000,0.427673,0.000000 +423,0.903485,0.000000,0.428620,0.000000 +424,0.903036,0.000000,0.429566,0.000000 +425,0.902585,0.000000,0.430511,0.000000 +426,0.902134,0.000000,0.431456,0.000000 +427,0.901682,0.000000,0.432401,0.000000 +428,0.901228,0.000000,0.433345,0.000000 +429,0.900774,0.000000,0.434288,0.000000 +430,0.900319,0.000000,0.435231,0.000000 +431,0.899863,0.000000,0.436174,0.000000 +432,0.899405,0.000000,0.437116,0.000000 +433,0.898947,0.000000,0.438057,0.000000 +434,0.898488,0.000000,0.438999,0.000000 +435,0.898028,0.000000,0.439939,0.000000 +436,0.897566,0.000000,0.440879,0.000000 +437,0.897104,0.000000,0.441819,0.000000 +438,0.896641,0.000000,0.442758,0.000000 +439,0.896177,0.000000,0.443697,0.000000 +440,0.895712,0.000000,0.444635,0.000000 +441,0.895246,0.000000,0.445573,0.000000 +442,0.894779,0.000000,0.446510,0.000000 +443,0.894310,0.000000,0.447447,0.000000 +444,0.893841,0.000000,0.448383,0.000000 +445,0.893371,0.000000,0.449319,0.000000 +446,0.892900,0.000000,0.450254,0.000000 +447,0.892428,0.000000,0.451189,0.000000 +448,0.891955,0.000000,0.452123,0.000000 +449,0.891481,0.000000,0.453057,0.000000 +450,0.891007,0.000000,0.453990,0.000000 +451,0.890531,0.000000,0.454923,0.000000 +452,0.890054,0.000000,0.455856,0.000000 +453,0.889576,0.000000,0.456787,0.000000 +454,0.889097,0.000000,0.457719,0.000000 +455,0.888617,0.000000,0.458650,0.000000 +456,0.888136,0.000000,0.459580,0.000000 +457,0.887655,0.000000,0.460510,0.000000 +458,0.887172,0.000000,0.461439,0.000000 +459,0.886688,0.000000,0.462368,0.000000 +460,0.886204,0.000000,0.463296,0.000000 +461,0.885718,0.000000,0.464224,0.000000 +462,0.885231,0.000000,0.465151,0.000000 +463,0.884744,0.000000,0.466078,0.000000 +464,0.884255,0.000000,0.467004,0.000000 +465,0.883766,0.000000,0.467930,0.000000 +466,0.883275,0.000000,0.468855,0.000000 +467,0.882784,0.000000,0.469780,0.000000 +468,0.882291,0.000000,0.470704,0.000000 +469,0.881798,0.000000,0.471628,0.000000 +470,0.881303,0.000000,0.472551,0.000000 +471,0.880808,0.000000,0.473473,0.000000 +472,0.880312,0.000000,0.474396,0.000000 +473,0.879815,0.000000,0.475317,0.000000 +474,0.879316,0.000000,0.476238,0.000000 +475,0.878817,0.000000,0.477159,0.000000 +476,0.878317,0.000000,0.478079,0.000000 +477,0.877816,0.000000,0.478998,0.000000 +478,0.877314,0.000000,0.479917,0.000000 +479,0.876811,0.000000,0.480836,0.000000 +480,0.876307,0.000000,0.481754,0.000000 +481,0.875802,0.000000,0.482671,0.000000 +482,0.875296,0.000000,0.483588,0.000000 +483,0.874789,0.000000,0.484504,0.000000 +484,0.874281,0.000000,0.485420,0.000000 +485,0.873772,0.000000,0.486335,0.000000 +486,0.873262,0.000000,0.487250,0.000000 +487,0.872752,0.000000,0.488164,0.000000 +488,0.872240,0.000000,0.489078,0.000000 +489,0.871727,0.000000,0.489991,0.000000 +490,0.871214,0.000000,0.490904,0.000000 +491,0.870699,0.000000,0.491816,0.000000 +492,0.870184,0.000000,0.492727,0.000000 +493,0.869667,0.000000,0.493638,0.000000 +494,0.869150,0.000000,0.494549,0.000000 +495,0.868632,0.000000,0.495459,0.000000 +496,0.868112,0.000000,0.496368,0.000000 +497,0.867592,0.000000,0.497277,0.000000 +498,0.867071,0.000000,0.498185,0.000000 +499,0.866549,0.000000,0.499093,0.000000 +500,0.866025,0.000000,0.500000,0.000000 +501,0.865501,0.000000,0.500907,0.000000 +502,0.864976,0.000000,0.501813,0.000000 +503,0.864450,0.000000,0.502718,0.000000 +504,0.863923,0.000000,0.503623,0.000000 +505,0.863396,0.000000,0.504528,0.000000 +506,0.862867,0.000000,0.505431,0.000000 +507,0.862337,0.000000,0.506335,0.000000 +508,0.861806,0.000000,0.507238,0.000000 +509,0.861275,0.000000,0.508140,0.000000 +510,0.860742,0.000000,0.509041,0.000000 +511,0.860208,0.000000,0.509943,0.000000 +512,0.859674,0.000000,0.510843,0.000000 +513,0.859139,0.000000,0.511743,0.000000 +514,0.858602,0.000000,0.512642,0.000000 +515,0.858065,0.000000,0.513541,0.000000 +516,0.857527,0.000000,0.514440,0.000000 +517,0.856987,0.000000,0.515337,0.000000 +518,0.856447,0.000000,0.516234,0.000000 +519,0.855906,0.000000,0.517131,0.000000 +520,0.855364,0.000000,0.518027,0.000000 +521,0.854821,0.000000,0.518922,0.000000 +522,0.854277,0.000000,0.519817,0.000000 +523,0.853733,0.000000,0.520712,0.000000 +524,0.853187,0.000000,0.521605,0.000000 +525,0.852640,0.000000,0.522499,0.000000 +526,0.852093,0.000000,0.523391,0.000000 +527,0.851544,0.000000,0.524283,0.000000 +528,0.850994,0.000000,0.525175,0.000000 +529,0.850444,0.000000,0.526066,0.000000 +530,0.849893,0.000000,0.526956,0.000000 +531,0.849340,0.000000,0.527846,0.000000 +532,0.848787,0.000000,0.528735,0.000000 +533,0.848233,0.000000,0.529623,0.000000 +534,0.847678,0.000000,0.530511,0.000000 +535,0.847122,0.000000,0.531399,0.000000 +536,0.846565,0.000000,0.532285,0.000000 +537,0.846007,0.000000,0.533172,0.000000 +538,0.845448,0.000000,0.534057,0.000000 +539,0.844889,0.000000,0.534942,0.000000 +540,0.844328,0.000000,0.535827,0.000000 +541,0.843766,0.000000,0.536711,0.000000 +542,0.843204,0.000000,0.537594,0.000000 +543,0.842640,0.000000,0.538477,0.000000 +544,0.842076,0.000000,0.539359,0.000000 +545,0.841511,0.000000,0.540240,0.000000 +546,0.840945,0.000000,0.541121,0.000000 +547,0.840377,0.000000,0.542002,0.000000 +548,0.839809,0.000000,0.542881,0.000000 +549,0.839240,0.000000,0.543760,0.000000 +550,0.838671,0.000000,0.544639,0.000000 +551,0.838100,0.000000,0.545517,0.000000 +552,0.837528,0.000000,0.546394,0.000000 +553,0.836955,0.000000,0.547271,0.000000 +554,0.836382,0.000000,0.548147,0.000000 +555,0.835807,0.000000,0.549023,0.000000 +556,0.835232,0.000000,0.549898,0.000000 +557,0.834656,0.000000,0.550772,0.000000 +558,0.834078,0.000000,0.551646,0.000000 +559,0.833500,0.000000,0.552519,0.000000 +560,0.832921,0.000000,0.553392,0.000000 +561,0.832341,0.000000,0.554263,0.000000 +562,0.831760,0.000000,0.555135,0.000000 +563,0.831179,0.000000,0.556006,0.000000 +564,0.830596,0.000000,0.556876,0.000000 +565,0.830012,0.000000,0.557745,0.000000 +566,0.829428,0.000000,0.558614,0.000000 +567,0.828842,0.000000,0.559482,0.000000 +568,0.828256,0.000000,0.560350,0.000000 +569,0.827669,0.000000,0.561217,0.000000 +570,0.827081,0.000000,0.562083,0.000000 +571,0.826492,0.000000,0.562949,0.000000 +572,0.825902,0.000000,0.563814,0.000000 +573,0.825311,0.000000,0.564679,0.000000 +574,0.824719,0.000000,0.565543,0.000000 +575,0.824126,0.000000,0.566406,0.000000 +576,0.823533,0.000000,0.567269,0.000000 +577,0.822938,0.000000,0.568131,0.000000 +578,0.822343,0.000000,0.568993,0.000000 +579,0.821746,0.000000,0.569853,0.000000 +580,0.821149,0.000000,0.570714,0.000000 +581,0.820551,0.000000,0.571573,0.000000 +582,0.819952,0.000000,0.572432,0.000000 +583,0.819352,0.000000,0.573290,0.000000 +584,0.818751,0.000000,0.574148,0.000000 +585,0.818150,0.000000,0.575005,0.000000 +586,0.817547,0.000000,0.575862,0.000000 +587,0.816944,0.000000,0.576718,0.000000 +588,0.816339,0.000000,0.577573,0.000000 +589,0.815734,0.000000,0.578427,0.000000 +590,0.815128,0.000000,0.579281,0.000000 +591,0.814521,0.000000,0.580134,0.000000 +592,0.813913,0.000000,0.580987,0.000000 +593,0.813304,0.000000,0.581839,0.000000 +594,0.812694,0.000000,0.582690,0.000000 +595,0.812084,0.000000,0.583541,0.000000 +596,0.811472,0.000000,0.584391,0.000000 +597,0.810860,0.000000,0.585241,0.000000 +598,0.810246,0.000000,0.586090,0.000000 +599,0.809632,0.000000,0.586938,0.000000 +600,0.809017,0.000000,0.587785,0.000000 +601,0.808401,0.000000,0.588632,0.000000 +602,0.807784,0.000000,0.589478,0.000000 +603,0.807166,0.000000,0.590324,0.000000 +604,0.806548,0.000000,0.591169,0.000000 +605,0.805928,0.000000,0.592013,0.000000 +606,0.805308,0.000000,0.592857,0.000000 +607,0.804687,0.000000,0.593700,0.000000 +608,0.804064,0.000000,0.594542,0.000000 +609,0.803441,0.000000,0.595384,0.000000 +610,0.802817,0.000000,0.596225,0.000000 +611,0.802193,0.000000,0.597065,0.000000 +612,0.801567,0.000000,0.597905,0.000000 +613,0.800940,0.000000,0.598744,0.000000 +614,0.800313,0.000000,0.599582,0.000000 +615,0.799685,0.000000,0.600420,0.000000 +616,0.799055,0.000000,0.601257,0.000000 +617,0.798425,0.000000,0.602094,0.000000 +618,0.797794,0.000000,0.602930,0.000000 +619,0.797163,0.000000,0.603765,0.000000 +620,0.796530,0.000000,0.604599,0.000000 +621,0.795896,0.000000,0.605433,0.000000 +622,0.795262,0.000000,0.606266,0.000000 +623,0.794627,0.000000,0.607098,0.000000 +624,0.793990,0.000000,0.607930,0.000000 +625,0.793353,0.000000,0.608761,0.000000 +626,0.792715,0.000000,0.609592,0.000000 +627,0.792077,0.000000,0.610422,0.000000 +628,0.791437,0.000000,0.611251,0.000000 +629,0.790796,0.000000,0.612079,0.000000 +630,0.790155,0.000000,0.612907,0.000000 +631,0.789513,0.000000,0.613734,0.000000 +632,0.788870,0.000000,0.614561,0.000000 +633,0.788226,0.000000,0.615386,0.000000 +634,0.787581,0.000000,0.616211,0.000000 +635,0.786935,0.000000,0.617036,0.000000 +636,0.786288,0.000000,0.617860,0.000000 +637,0.785641,0.000000,0.618683,0.000000 +638,0.784993,0.000000,0.619505,0.000000 +639,0.784343,0.000000,0.620327,0.000000 +640,0.783693,0.000000,0.621148,0.000000 +641,0.783043,0.000000,0.621968,0.000000 +642,0.782391,0.000000,0.622788,0.000000 +643,0.781738,0.000000,0.623607,0.000000 +644,0.781085,0.000000,0.624425,0.000000 +645,0.780430,0.000000,0.625243,0.000000 +646,0.779775,0.000000,0.626060,0.000000 +647,0.779119,0.000000,0.626876,0.000000 +648,0.778462,0.000000,0.627691,0.000000 +649,0.777805,0.000000,0.628506,0.000000 +650,0.777146,0.000000,0.629320,0.000000 +651,0.776487,0.000000,0.630134,0.000000 +652,0.775826,0.000000,0.630947,0.000000 +653,0.775165,0.000000,0.631759,0.000000 +654,0.774503,0.000000,0.632570,0.000000 +655,0.773840,0.000000,0.633381,0.000000 +656,0.773177,0.000000,0.634191,0.000000 +657,0.772512,0.000000,0.635000,0.000000 +658,0.771847,0.000000,0.635809,0.000000 +659,0.771180,0.000000,0.636617,0.000000 +660,0.770513,0.000000,0.637424,0.000000 +661,0.769845,0.000000,0.638231,0.000000 +662,0.769177,0.000000,0.639036,0.000000 +663,0.768507,0.000000,0.639841,0.000000 +664,0.767836,0.000000,0.640646,0.000000 +665,0.767165,0.000000,0.641450,0.000000 +666,0.766493,0.000000,0.642253,0.000000 +667,0.765820,0.000000,0.643055,0.000000 +668,0.765146,0.000000,0.643857,0.000000 +669,0.764472,0.000000,0.644657,0.000000 +670,0.763796,0.000000,0.645458,0.000000 +671,0.763120,0.000000,0.646257,0.000000 +672,0.762443,0.000000,0.647056,0.000000 +673,0.761764,0.000000,0.647854,0.000000 +674,0.761086,0.000000,0.648651,0.000000 +675,0.760406,0.000000,0.649448,0.000000 +676,0.759725,0.000000,0.650244,0.000000 +677,0.759044,0.000000,0.651039,0.000000 +678,0.758362,0.000000,0.651834,0.000000 +679,0.757679,0.000000,0.652628,0.000000 +680,0.756995,0.000000,0.653421,0.000000 +681,0.756310,0.000000,0.654213,0.000000 +682,0.755625,0.000000,0.655005,0.000000 +683,0.754939,0.000000,0.655796,0.000000 +684,0.754251,0.000000,0.656586,0.000000 +685,0.753563,0.000000,0.657375,0.000000 +686,0.752875,0.000000,0.658164,0.000000 +687,0.752185,0.000000,0.658952,0.000000 +688,0.751494,0.000000,0.659739,0.000000 +689,0.750803,0.000000,0.660526,0.000000 +690,0.750111,0.000000,0.661312,0.000000 +691,0.749418,0.000000,0.662097,0.000000 +692,0.748724,0.000000,0.662881,0.000000 +693,0.748030,0.000000,0.663665,0.000000 +694,0.747334,0.000000,0.664448,0.000000 +695,0.746638,0.000000,0.665230,0.000000 +696,0.745941,0.000000,0.666012,0.000000 +697,0.745243,0.000000,0.666793,0.000000 +698,0.744545,0.000000,0.667573,0.000000 +699,0.743845,0.000000,0.668352,0.000000 +700,0.743145,0.000000,0.669131,0.000000 +701,0.742444,0.000000,0.669908,0.000000 +702,0.741742,0.000000,0.670686,0.000000 +703,0.741039,0.000000,0.671462,0.000000 +704,0.740335,0.000000,0.672238,0.000000 +705,0.739631,0.000000,0.673013,0.000000 +706,0.738926,0.000000,0.673787,0.000000 +707,0.738220,0.000000,0.674560,0.000000 +708,0.737513,0.000000,0.675333,0.000000 +709,0.736806,0.000000,0.676105,0.000000 +710,0.736097,0.000000,0.676876,0.000000 +711,0.735388,0.000000,0.677646,0.000000 +712,0.734678,0.000000,0.678416,0.000000 +713,0.733967,0.000000,0.679185,0.000000 +714,0.733255,0.000000,0.679953,0.000000 +715,0.732543,0.000000,0.680721,0.000000 +716,0.731830,0.000000,0.681488,0.000000 +717,0.731116,0.000000,0.682254,0.000000 +718,0.730401,0.000000,0.683019,0.000000 +719,0.729685,0.000000,0.683783,0.000000 +720,0.728969,0.000000,0.684547,0.000000 +721,0.728251,0.000000,0.685310,0.000000 +722,0.727533,0.000000,0.686072,0.000000 +723,0.726814,0.000000,0.686834,0.000000 +724,0.726095,0.000000,0.687595,0.000000 +725,0.725374,0.000000,0.688355,0.000000 +726,0.724653,0.000000,0.689114,0.000000 +727,0.723931,0.000000,0.689872,0.000000 +728,0.723208,0.000000,0.690630,0.000000 +729,0.722485,0.000000,0.691387,0.000000 +730,0.721760,0.000000,0.692143,0.000000 +731,0.721035,0.000000,0.692899,0.000000 +732,0.720309,0.000000,0.693653,0.000000 +733,0.719582,0.000000,0.694407,0.000000 +734,0.718855,0.000000,0.695160,0.000000 +735,0.718126,0.000000,0.695913,0.000000 +736,0.717397,0.000000,0.696664,0.000000 +737,0.716667,0.000000,0.697415,0.000000 +738,0.715936,0.000000,0.698165,0.000000 +739,0.715205,0.000000,0.698915,0.000000 +740,0.714473,0.000000,0.699663,0.000000 +741,0.713740,0.000000,0.700411,0.000000 +742,0.713006,0.000000,0.701158,0.000000 +743,0.712271,0.000000,0.701904,0.000000 +744,0.711536,0.000000,0.702650,0.000000 +745,0.710799,0.000000,0.703395,0.000000 +746,0.710062,0.000000,0.704139,0.000000 +747,0.709325,0.000000,0.704882,0.000000 +748,0.708586,0.000000,0.705624,0.000000 +749,0.707847,0.000000,0.706366,0.000000 +750,0.707107,0.000000,0.707107,0.000000 +751,0.706366,0.000000,0.707847,0.000000 +752,0.705624,0.000000,0.708586,0.000000 +753,0.704882,0.000000,0.709325,0.000000 +754,0.704139,0.000000,0.710062,0.000000 +755,0.703395,0.000000,0.710799,0.000000 +756,0.702650,0.000000,0.711536,0.000000 +757,0.701904,0.000000,0.712271,0.000000 +758,0.701158,0.000000,0.713006,0.000000 +759,0.700411,0.000000,0.713740,0.000000 +760,0.699663,0.000000,0.714473,0.000000 +761,0.698915,0.000000,0.715205,0.000000 +762,0.698165,0.000000,0.715936,0.000000 +763,0.697415,0.000000,0.716667,0.000000 +764,0.696664,0.000000,0.717397,0.000000 +765,0.695913,0.000000,0.718126,0.000000 +766,0.695160,0.000000,0.718855,0.000000 +767,0.694407,0.000000,0.719582,0.000000 +768,0.693653,0.000000,0.720309,0.000000 +769,0.692899,0.000000,0.721035,0.000000 +770,0.692143,0.000000,0.721760,0.000000 +771,0.691387,0.000000,0.722485,0.000000 +772,0.690630,0.000000,0.723208,0.000000 +773,0.689872,0.000000,0.723931,0.000000 +774,0.689114,0.000000,0.724653,0.000000 +775,0.688355,0.000000,0.725374,0.000000 +776,0.687595,0.000000,0.726095,0.000000 +777,0.686834,0.000000,0.726814,0.000000 +778,0.686072,0.000000,0.727533,0.000000 +779,0.685310,0.000000,0.728251,0.000000 +780,0.684547,0.000000,0.728969,0.000000 +781,0.683783,0.000000,0.729685,0.000000 +782,0.683019,0.000000,0.730401,0.000000 +783,0.682254,0.000000,0.731116,0.000000 +784,0.681488,0.000000,0.731830,0.000000 +785,0.680721,0.000000,0.732543,0.000000 +786,0.679953,0.000000,0.733255,0.000000 +787,0.679185,0.000000,0.733967,0.000000 +788,0.678416,0.000000,0.734678,0.000000 +789,0.677646,0.000000,0.735388,0.000000 +790,0.676876,0.000000,0.736097,0.000000 +791,0.676105,0.000000,0.736806,0.000000 +792,0.675333,0.000000,0.737513,0.000000 +793,0.674560,0.000000,0.738220,0.000000 +794,0.673787,0.000000,0.738926,0.000000 +795,0.673013,0.000000,0.739631,0.000000 +796,0.672238,0.000000,0.740335,0.000000 +797,0.671462,0.000000,0.741039,0.000000 +798,0.670686,0.000000,0.741742,0.000000 +799,0.669908,0.000000,0.742444,0.000000 +800,0.669131,0.000000,0.743145,0.000000 +801,0.668352,0.000000,0.743845,0.000000 +802,0.667573,0.000000,0.744545,0.000000 +803,0.666793,0.000000,0.745243,0.000000 +804,0.666012,0.000000,0.745941,0.000000 +805,0.665230,0.000000,0.746638,0.000000 +806,0.664448,0.000000,0.747334,0.000000 +807,0.663665,0.000000,0.748030,0.000000 +808,0.662881,0.000000,0.748724,0.000000 +809,0.662097,0.000000,0.749418,0.000000 +810,0.661312,0.000000,0.750111,0.000000 +811,0.660526,0.000000,0.750803,0.000000 +812,0.659739,0.000000,0.751494,0.000000 +813,0.658952,0.000000,0.752185,0.000000 +814,0.658164,0.000000,0.752875,0.000000 +815,0.657375,0.000000,0.753563,0.000000 +816,0.656586,0.000000,0.754251,0.000000 +817,0.655796,0.000000,0.754939,0.000000 +818,0.655005,0.000000,0.755625,0.000000 +819,0.654213,0.000000,0.756310,0.000000 +820,0.653421,0.000000,0.756995,0.000000 +821,0.652628,0.000000,0.757679,0.000000 +822,0.651834,0.000000,0.758362,0.000000 +823,0.651039,0.000000,0.759044,0.000000 +824,0.650244,0.000000,0.759725,0.000000 +825,0.649448,0.000000,0.760406,0.000000 +826,0.648651,0.000000,0.761086,0.000000 +827,0.647854,0.000000,0.761764,0.000000 +828,0.647056,0.000000,0.762443,0.000000 +829,0.646257,0.000000,0.763120,0.000000 +830,0.645458,0.000000,0.763796,0.000000 +831,0.644657,0.000000,0.764472,0.000000 +832,0.643857,0.000000,0.765146,0.000000 +833,0.643055,0.000000,0.765820,0.000000 +834,0.642253,0.000000,0.766493,0.000000 +835,0.641450,0.000000,0.767165,0.000000 +836,0.640646,0.000000,0.767836,0.000000 +837,0.639841,0.000000,0.768507,0.000000 +838,0.639036,0.000000,0.769177,0.000000 +839,0.638231,0.000000,0.769845,0.000000 +840,0.637424,0.000000,0.770513,0.000000 +841,0.636617,0.000000,0.771180,0.000000 +842,0.635809,0.000000,0.771847,0.000000 +843,0.635000,0.000000,0.772512,0.000000 +844,0.634191,0.000000,0.773177,0.000000 +845,0.633381,0.000000,0.773840,0.000000 +846,0.632570,0.000000,0.774503,0.000000 +847,0.631759,0.000000,0.775165,0.000000 +848,0.630947,0.000000,0.775826,0.000000 +849,0.630134,0.000000,0.776487,0.000000 +850,0.629320,0.000000,0.777146,0.000000 +851,0.628506,0.000000,0.777805,0.000000 +852,0.627691,0.000000,0.778462,0.000000 +853,0.626876,0.000000,0.779119,0.000000 +854,0.626060,0.000000,0.779775,0.000000 +855,0.625243,0.000000,0.780430,0.000000 +856,0.624425,0.000000,0.781085,0.000000 +857,0.623607,0.000000,0.781738,0.000000 +858,0.622788,0.000000,0.782391,0.000000 +859,0.621968,0.000000,0.783043,0.000000 +860,0.621148,0.000000,0.783693,0.000000 +861,0.620327,0.000000,0.784343,0.000000 +862,0.619505,0.000000,0.784993,0.000000 +863,0.618683,0.000000,0.785641,0.000000 +864,0.617860,0.000000,0.786288,0.000000 +865,0.617036,0.000000,0.786935,0.000000 +866,0.616211,0.000000,0.787581,0.000000 +867,0.615386,0.000000,0.788226,0.000000 +868,0.614561,0.000000,0.788870,0.000000 +869,0.613734,0.000000,0.789513,0.000000 +870,0.612907,0.000000,0.790155,0.000000 +871,0.612079,0.000000,0.790796,0.000000 +872,0.611251,0.000000,0.791437,0.000000 +873,0.610422,0.000000,0.792077,0.000000 +874,0.609592,0.000000,0.792715,0.000000 +875,0.608761,0.000000,0.793353,0.000000 +876,0.607930,0.000000,0.793990,0.000000 +877,0.607098,0.000000,0.794627,0.000000 +878,0.606266,0.000000,0.795262,0.000000 +879,0.605433,0.000000,0.795896,0.000000 +880,0.604599,0.000000,0.796530,0.000000 +881,0.603765,0.000000,0.797163,0.000000 +882,0.602930,0.000000,0.797794,0.000000 +883,0.602094,0.000000,0.798425,0.000000 +884,0.601257,0.000000,0.799055,0.000000 +885,0.600420,0.000000,0.799685,0.000000 +886,0.599582,0.000000,0.800313,0.000000 +887,0.598744,0.000000,0.800940,0.000000 +888,0.597905,0.000000,0.801567,0.000000 +889,0.597065,0.000000,0.802193,0.000000 +890,0.596225,0.000000,0.802817,0.000000 +891,0.595384,0.000000,0.803441,0.000000 +892,0.594542,0.000000,0.804064,0.000000 +893,0.593700,0.000000,0.804687,0.000000 +894,0.592857,0.000000,0.805308,0.000000 +895,0.592013,0.000000,0.805928,0.000000 +896,0.591169,0.000000,0.806548,0.000000 +897,0.590324,0.000000,0.807166,0.000000 +898,0.589478,0.000000,0.807784,0.000000 +899,0.588632,0.000000,0.808401,0.000000 +900,0.587785,0.000000,0.809017,0.000000 +901,0.586938,0.000000,0.809632,0.000000 +902,0.586090,0.000000,0.810246,0.000000 +903,0.585241,0.000000,0.810860,0.000000 +904,0.584391,0.000000,0.811472,0.000000 +905,0.583541,0.000000,0.812084,0.000000 +906,0.582690,0.000000,0.812694,0.000000 +907,0.581839,0.000000,0.813304,0.000000 +908,0.580987,0.000000,0.813913,0.000000 +909,0.580134,0.000000,0.814521,0.000000 +910,0.579281,0.000000,0.815128,0.000000 +911,0.578427,0.000000,0.815734,0.000000 +912,0.577573,0.000000,0.816339,0.000000 +913,0.576718,0.000000,0.816944,0.000000 +914,0.575862,0.000000,0.817547,0.000000 +915,0.575005,0.000000,0.818150,0.000000 +916,0.574148,0.000000,0.818751,0.000000 +917,0.573290,0.000000,0.819352,0.000000 +918,0.572432,0.000000,0.819952,0.000000 +919,0.571573,0.000000,0.820551,0.000000 +920,0.570714,0.000000,0.821149,0.000000 +921,0.569853,0.000000,0.821746,0.000000 +922,0.568993,0.000000,0.822343,0.000000 +923,0.568131,0.000000,0.822938,0.000000 +924,0.567269,0.000000,0.823533,0.000000 +925,0.566406,0.000000,0.824126,0.000000 +926,0.565543,0.000000,0.824719,0.000000 +927,0.564679,0.000000,0.825311,0.000000 +928,0.563814,0.000000,0.825902,0.000000 +929,0.562949,0.000000,0.826492,0.000000 +930,0.562083,0.000000,0.827081,0.000000 +931,0.561217,0.000000,0.827669,0.000000 +932,0.560350,0.000000,0.828256,0.000000 +933,0.559482,0.000000,0.828842,0.000000 +934,0.558614,0.000000,0.829428,0.000000 +935,0.557745,0.000000,0.830012,0.000000 +936,0.556876,0.000000,0.830596,0.000000 +937,0.556006,0.000000,0.831179,0.000000 +938,0.555135,0.000000,0.831760,0.000000 +939,0.554263,0.000000,0.832341,0.000000 +940,0.553392,0.000000,0.832921,0.000000 +941,0.552519,0.000000,0.833500,0.000000 +942,0.551646,0.000000,0.834078,0.000000 +943,0.550772,0.000000,0.834656,0.000000 +944,0.549898,0.000000,0.835232,0.000000 +945,0.549023,0.000000,0.835807,0.000000 +946,0.548147,0.000000,0.836382,0.000000 +947,0.547271,0.000000,0.836955,0.000000 +948,0.546394,0.000000,0.837528,0.000000 +949,0.545517,0.000000,0.838100,0.000000 +950,0.544639,0.000000,0.838671,0.000000 +951,0.543760,0.000000,0.839240,0.000000 +952,0.542881,0.000000,0.839809,0.000000 +953,0.542002,0.000000,0.840377,0.000000 +954,0.541121,0.000000,0.840945,0.000000 +955,0.540240,0.000000,0.841511,0.000000 +956,0.539359,0.000000,0.842076,0.000000 +957,0.538477,0.000000,0.842640,0.000000 +958,0.537594,0.000000,0.843204,0.000000 +959,0.536711,0.000000,0.843766,0.000000 +960,0.535827,0.000000,0.844328,0.000000 +961,0.534942,0.000000,0.844889,0.000000 +962,0.534057,0.000000,0.845448,0.000000 +963,0.533172,0.000000,0.846007,0.000000 +964,0.532285,0.000000,0.846565,0.000000 +965,0.531399,0.000000,0.847122,0.000000 +966,0.530511,0.000000,0.847678,0.000000 +967,0.529623,0.000000,0.848233,0.000000 +968,0.528735,0.000000,0.848787,0.000000 +969,0.527846,0.000000,0.849340,0.000000 +970,0.526956,0.000000,0.849893,0.000000 +971,0.526066,0.000000,0.850444,0.000000 +972,0.525175,0.000000,0.850994,0.000000 +973,0.524283,0.000000,0.851544,0.000000 +974,0.523391,0.000000,0.852093,0.000000 +975,0.522499,0.000000,0.852640,0.000000 +976,0.521605,0.000000,0.853187,0.000000 +977,0.520712,0.000000,0.853733,0.000000 +978,0.519817,0.000000,0.854277,0.000000 +979,0.518922,0.000000,0.854821,0.000000 +980,0.518027,0.000000,0.855364,0.000000 +981,0.517131,0.000000,0.855906,0.000000 +982,0.516234,0.000000,0.856447,0.000000 +983,0.515337,0.000000,0.856987,0.000000 +984,0.514440,0.000000,0.857527,0.000000 +985,0.513541,0.000000,0.858065,0.000000 +986,0.512642,0.000000,0.858602,0.000000 +987,0.511743,0.000000,0.859139,0.000000 +988,0.510843,0.000000,0.859674,0.000000 +989,0.509943,0.000000,0.860208,0.000000 +990,0.509041,0.000000,0.860742,0.000000 +991,0.508140,0.000000,0.861275,0.000000 +992,0.507238,0.000000,0.861806,0.000000 +993,0.506335,0.000000,0.862337,0.000000 +994,0.505431,0.000000,0.862867,0.000000 +995,0.504528,0.000000,0.863396,0.000000 +996,0.503623,0.000000,0.863923,0.000000 +997,0.502718,0.000000,0.864450,0.000000 +998,0.501813,0.000000,0.864976,0.000000 +999,0.500907,0.000000,0.865501,0.000000 +1000,0.500000,0.000000,0.866025,0.000000 +1001,0.499093,0.000000,0.866549,0.000000 +1002,0.498185,0.000000,0.867071,0.000000 +1003,0.497277,0.000000,0.867592,0.000000 +1004,0.496368,0.000000,0.868112,0.000000 +1005,0.495459,0.000000,0.868632,0.000000 +1006,0.494549,0.000000,0.869150,0.000000 +1007,0.493638,0.000000,0.869667,0.000000 +1008,0.492727,0.000000,0.870184,0.000000 +1009,0.491816,0.000000,0.870699,0.000000 +1010,0.490904,0.000000,0.871214,0.000000 +1011,0.489991,0.000000,0.871727,0.000000 +1012,0.489078,0.000000,0.872240,0.000000 +1013,0.488164,0.000000,0.872752,0.000000 +1014,0.487250,0.000000,0.873262,0.000000 +1015,0.486335,0.000000,0.873772,0.000000 +1016,0.485420,0.000000,0.874281,0.000000 +1017,0.484504,0.000000,0.874789,0.000000 +1018,0.483588,0.000000,0.875296,0.000000 +1019,0.482671,0.000000,0.875802,0.000000 +1020,0.481754,0.000000,0.876307,0.000000 +1021,0.480836,0.000000,0.876811,0.000000 +1022,0.479917,0.000000,0.877314,0.000000 +1023,0.478998,0.000000,0.877816,0.000000 +1024,0.478079,0.000000,0.878317,0.000000 +1025,0.477159,0.000000,0.878817,0.000000 +1026,0.476238,0.000000,0.879316,0.000000 +1027,0.475317,0.000000,0.879815,0.000000 +1028,0.474396,0.000000,0.880312,0.000000 +1029,0.473473,0.000000,0.880808,0.000000 +1030,0.472551,0.000000,0.881303,0.000000 +1031,0.471628,0.000000,0.881798,0.000000 +1032,0.470704,0.000000,0.882291,0.000000 +1033,0.469780,0.000000,0.882784,0.000000 +1034,0.468855,0.000000,0.883275,0.000000 +1035,0.467930,0.000000,0.883766,0.000000 +1036,0.467004,0.000000,0.884255,0.000000 +1037,0.466078,0.000000,0.884744,0.000000 +1038,0.465151,0.000000,0.885231,0.000000 +1039,0.464224,0.000000,0.885718,0.000000 +1040,0.463296,0.000000,0.886204,0.000000 +1041,0.462368,0.000000,0.886688,0.000000 +1042,0.461439,0.000000,0.887172,0.000000 +1043,0.460510,0.000000,0.887655,0.000000 +1044,0.459580,0.000000,0.888136,0.000000 +1045,0.458650,0.000000,0.888617,0.000000 +1046,0.457719,0.000000,0.889097,0.000000 +1047,0.456787,0.000000,0.889576,0.000000 +1048,0.455856,0.000000,0.890054,0.000000 +1049,0.454923,0.000000,0.890531,0.000000 +1050,0.453990,0.000000,0.891007,0.000000 +1051,0.453057,0.000000,0.891481,0.000000 +1052,0.452123,0.000000,0.891955,0.000000 +1053,0.451189,0.000000,0.892428,0.000000 +1054,0.450254,0.000000,0.892900,0.000000 +1055,0.449319,0.000000,0.893371,0.000000 +1056,0.448383,0.000000,0.893841,0.000000 +1057,0.447447,0.000000,0.894310,0.000000 +1058,0.446510,0.000000,0.894779,0.000000 +1059,0.445573,0.000000,0.895246,0.000000 +1060,0.444635,0.000000,0.895712,0.000000 +1061,0.443697,0.000000,0.896177,0.000000 +1062,0.442758,0.000000,0.896641,0.000000 +1063,0.441819,0.000000,0.897104,0.000000 +1064,0.440879,0.000000,0.897566,0.000000 +1065,0.439939,0.000000,0.898028,0.000000 +1066,0.438999,0.000000,0.898488,0.000000 +1067,0.438057,0.000000,0.898947,0.000000 +1068,0.437116,0.000000,0.899405,0.000000 +1069,0.436174,0.000000,0.899863,0.000000 +1070,0.435231,0.000000,0.900319,0.000000 +1071,0.434288,0.000000,0.900774,0.000000 +1072,0.433345,0.000000,0.901228,0.000000 +1073,0.432401,0.000000,0.901682,0.000000 +1074,0.431456,0.000000,0.902134,0.000000 +1075,0.430511,0.000000,0.902585,0.000000 +1076,0.429566,0.000000,0.903036,0.000000 +1077,0.428620,0.000000,0.903485,0.000000 +1078,0.427673,0.000000,0.903933,0.000000 +1079,0.426727,0.000000,0.904381,0.000000 +1080,0.425779,0.000000,0.904827,0.000000 +1081,0.424832,0.000000,0.905272,0.000000 +1082,0.423883,0.000000,0.905717,0.000000 +1083,0.422935,0.000000,0.906160,0.000000 +1084,0.421985,0.000000,0.906603,0.000000 +1085,0.421036,0.000000,0.907044,0.000000 +1086,0.420086,0.000000,0.907484,0.000000 +1087,0.419135,0.000000,0.907924,0.000000 +1088,0.418184,0.000000,0.908362,0.000000 +1089,0.417233,0.000000,0.908800,0.000000 +1090,0.416281,0.000000,0.909236,0.000000 +1091,0.415328,0.000000,0.909672,0.000000 +1092,0.414376,0.000000,0.910106,0.000000 +1093,0.413422,0.000000,0.910539,0.000000 +1094,0.412469,0.000000,0.910972,0.000000 +1095,0.411514,0.000000,0.911403,0.000000 +1096,0.410560,0.000000,0.911834,0.000000 +1097,0.409605,0.000000,0.912263,0.000000 +1098,0.408649,0.000000,0.912692,0.000000 +1099,0.407693,0.000000,0.913119,0.000000 +1100,0.406737,0.000000,0.913545,0.000000 +1101,0.405780,0.000000,0.913971,0.000000 +1102,0.404822,0.000000,0.914395,0.000000 +1103,0.403865,0.000000,0.914819,0.000000 +1104,0.402906,0.000000,0.915241,0.000000 +1105,0.401948,0.000000,0.915663,0.000000 +1106,0.400989,0.000000,0.916083,0.000000 +1107,0.400029,0.000000,0.916502,0.000000 +1108,0.399069,0.000000,0.916921,0.000000 +1109,0.398109,0.000000,0.917338,0.000000 +1110,0.397148,0.000000,0.917755,0.000000 +1111,0.396187,0.000000,0.918170,0.000000 +1112,0.395225,0.000000,0.918584,0.000000 +1113,0.394263,0.000000,0.918998,0.000000 +1114,0.393300,0.000000,0.919410,0.000000 +1115,0.392337,0.000000,0.919821,0.000000 +1116,0.391374,0.000000,0.920232,0.000000 +1117,0.390410,0.000000,0.920641,0.000000 +1118,0.389445,0.000000,0.921050,0.000000 +1119,0.388481,0.000000,0.921457,0.000000 +1120,0.387516,0.000000,0.921863,0.000000 +1121,0.386550,0.000000,0.922268,0.000000 +1122,0.385584,0.000000,0.922673,0.000000 +1123,0.384618,0.000000,0.923076,0.000000 +1124,0.383651,0.000000,0.923478,0.000000 +1125,0.382683,0.000000,0.923880,0.000000 +1126,0.381716,0.000000,0.924280,0.000000 +1127,0.380748,0.000000,0.924679,0.000000 +1128,0.379779,0.000000,0.925077,0.000000 +1129,0.378810,0.000000,0.925474,0.000000 +1130,0.377841,0.000000,0.925871,0.000000 +1131,0.376871,0.000000,0.926266,0.000000 +1132,0.375901,0.000000,0.926660,0.000000 +1133,0.374930,0.000000,0.927053,0.000000 +1134,0.373959,0.000000,0.927445,0.000000 +1135,0.372988,0.000000,0.927836,0.000000 +1136,0.372016,0.000000,0.928226,0.000000 +1137,0.371044,0.000000,0.928615,0.000000 +1138,0.370071,0.000000,0.929003,0.000000 +1139,0.369098,0.000000,0.929390,0.000000 +1140,0.368125,0.000000,0.929776,0.000000 +1141,0.367151,0.000000,0.930161,0.000000 +1142,0.366176,0.000000,0.930545,0.000000 +1143,0.365202,0.000000,0.930928,0.000000 +1144,0.364227,0.000000,0.931310,0.000000 +1145,0.363251,0.000000,0.931691,0.000000 +1146,0.362275,0.000000,0.932071,0.000000 +1147,0.361299,0.000000,0.932450,0.000000 +1148,0.360322,0.000000,0.932828,0.000000 +1149,0.359345,0.000000,0.933205,0.000000 +1150,0.358368,0.000000,0.933580,0.000000 +1151,0.357390,0.000000,0.933955,0.000000 +1152,0.356412,0.000000,0.934329,0.000000 +1153,0.355433,0.000000,0.934702,0.000000 +1154,0.354454,0.000000,0.935073,0.000000 +1155,0.353475,0.000000,0.935444,0.000000 +1156,0.352495,0.000000,0.935814,0.000000 +1157,0.351515,0.000000,0.936182,0.000000 +1158,0.350534,0.000000,0.936550,0.000000 +1159,0.349553,0.000000,0.936916,0.000000 +1160,0.348572,0.000000,0.937282,0.000000 +1161,0.347590,0.000000,0.937646,0.000000 +1162,0.346608,0.000000,0.938010,0.000000 +1163,0.345626,0.000000,0.938372,0.000000 +1164,0.344643,0.000000,0.938734,0.000000 +1165,0.343660,0.000000,0.939094,0.000000 +1166,0.342676,0.000000,0.939454,0.000000 +1167,0.341692,0.000000,0.939812,0.000000 +1168,0.340708,0.000000,0.940169,0.000000 +1169,0.339723,0.000000,0.940526,0.000000 +1170,0.338738,0.000000,0.940881,0.000000 +1171,0.337752,0.000000,0.941235,0.000000 +1172,0.336767,0.000000,0.941588,0.000000 +1173,0.335780,0.000000,0.941940,0.000000 +1174,0.334794,0.000000,0.942291,0.000000 +1175,0.333807,0.000000,0.942641,0.000000 +1176,0.332820,0.000000,0.942991,0.000000 +1177,0.331832,0.000000,0.943339,0.000000 +1178,0.330844,0.000000,0.943686,0.000000 +1179,0.329855,0.000000,0.944031,0.000000 +1180,0.328867,0.000000,0.944376,0.000000 +1181,0.327878,0.000000,0.944720,0.000000 +1182,0.326888,0.000000,0.945063,0.000000 +1183,0.325898,0.000000,0.945405,0.000000 +1184,0.324908,0.000000,0.945746,0.000000 +1185,0.323917,0.000000,0.946085,0.000000 +1186,0.322927,0.000000,0.946424,0.000000 +1187,0.321935,0.000000,0.946762,0.000000 +1188,0.320944,0.000000,0.947098,0.000000 +1189,0.319952,0.000000,0.947434,0.000000 +1190,0.318959,0.000000,0.947768,0.000000 +1191,0.317967,0.000000,0.948102,0.000000 +1192,0.316974,0.000000,0.948434,0.000000 +1193,0.315980,0.000000,0.948766,0.000000 +1194,0.314987,0.000000,0.949096,0.000000 +1195,0.313992,0.000000,0.949425,0.000000 +1196,0.312998,0.000000,0.949754,0.000000 +1197,0.312003,0.000000,0.950081,0.000000 +1198,0.311008,0.000000,0.950407,0.000000 +1199,0.310013,0.000000,0.950732,0.000000 +1200,0.309017,0.000000,0.951057,0.000000 +1201,0.308021,0.000000,0.951380,0.000000 +1202,0.307024,0.000000,0.951702,0.000000 +1203,0.306028,0.000000,0.952023,0.000000 +1204,0.305031,0.000000,0.952343,0.000000 +1205,0.304033,0.000000,0.952661,0.000000 +1206,0.303035,0.000000,0.952979,0.000000 +1207,0.302037,0.000000,0.953296,0.000000 +1208,0.301039,0.000000,0.953612,0.000000 +1209,0.300040,0.000000,0.953927,0.000000 +1210,0.299041,0.000000,0.954240,0.000000 +1211,0.298041,0.000000,0.954553,0.000000 +1212,0.297042,0.000000,0.954865,0.000000 +1213,0.296041,0.000000,0.955175,0.000000 +1214,0.295041,0.000000,0.955485,0.000000 +1215,0.294040,0.000000,0.955793,0.000000 +1216,0.293039,0.000000,0.956100,0.000000 +1217,0.292038,0.000000,0.956407,0.000000 +1218,0.291036,0.000000,0.956712,0.000000 +1219,0.290034,0.000000,0.957016,0.000000 +1220,0.289032,0.000000,0.957319,0.000000 +1221,0.288029,0.000000,0.957622,0.000000 +1222,0.287026,0.000000,0.957923,0.000000 +1223,0.286023,0.000000,0.958223,0.000000 +1224,0.285019,0.000000,0.958522,0.000000 +1225,0.284015,0.000000,0.958820,0.000000 +1226,0.283011,0.000000,0.959117,0.000000 +1227,0.282007,0.000000,0.959412,0.000000 +1228,0.281002,0.000000,0.959707,0.000000 +1229,0.279997,0.000000,0.960001,0.000000 +1230,0.278991,0.000000,0.960294,0.000000 +1231,0.277985,0.000000,0.960585,0.000000 +1232,0.276979,0.000000,0.960876,0.000000 +1233,0.275973,0.000000,0.961165,0.000000 +1234,0.274966,0.000000,0.961454,0.000000 +1235,0.273959,0.000000,0.961741,0.000000 +1236,0.272952,0.000000,0.962028,0.000000 +1237,0.271944,0.000000,0.962313,0.000000 +1238,0.270936,0.000000,0.962597,0.000000 +1239,0.269928,0.000000,0.962880,0.000000 +1240,0.268920,0.000000,0.963163,0.000000 +1241,0.267911,0.000000,0.963444,0.000000 +1242,0.266902,0.000000,0.963724,0.000000 +1243,0.265893,0.000000,0.964003,0.000000 +1244,0.264883,0.000000,0.964281,0.000000 +1245,0.263873,0.000000,0.964557,0.000000 +1246,0.262863,0.000000,0.964833,0.000000 +1247,0.261852,0.000000,0.965108,0.000000 +1248,0.260842,0.000000,0.965382,0.000000 +1249,0.259830,0.000000,0.965654,0.000000 +1250,0.258819,0.000000,0.965926,0.000000 +1251,0.257807,0.000000,0.966196,0.000000 +1252,0.256795,0.000000,0.966466,0.000000 +1253,0.255783,0.000000,0.966734,0.000000 +1254,0.254771,0.000000,0.967001,0.000000 +1255,0.253758,0.000000,0.967268,0.000000 +1256,0.252745,0.000000,0.967533,0.000000 +1257,0.251732,0.000000,0.967797,0.000000 +1258,0.250718,0.000000,0.968060,0.000000 +1259,0.249704,0.000000,0.968322,0.000000 +1260,0.248690,0.000000,0.968583,0.000000 +1261,0.247675,0.000000,0.968843,0.000000 +1262,0.246661,0.000000,0.969102,0.000000 +1263,0.245646,0.000000,0.969360,0.000000 +1264,0.244631,0.000000,0.969616,0.000000 +1265,0.243615,0.000000,0.969872,0.000000 +1266,0.242599,0.000000,0.970127,0.000000 +1267,0.241583,0.000000,0.970380,0.000000 +1268,0.240567,0.000000,0.970633,0.000000 +1269,0.239550,0.000000,0.970884,0.000000 +1270,0.238533,0.000000,0.971134,0.000000 +1271,0.237516,0.000000,0.971384,0.000000 +1272,0.236499,0.000000,0.971632,0.000000 +1273,0.235481,0.000000,0.971879,0.000000 +1274,0.234463,0.000000,0.972125,0.000000 +1275,0.233445,0.000000,0.972370,0.000000 +1276,0.232427,0.000000,0.972614,0.000000 +1277,0.231408,0.000000,0.972857,0.000000 +1278,0.230389,0.000000,0.973099,0.000000 +1279,0.229370,0.000000,0.973339,0.000000 +1280,0.228351,0.000000,0.973579,0.000000 +1281,0.227331,0.000000,0.973817,0.000000 +1282,0.226311,0.000000,0.974055,0.000000 +1283,0.225291,0.000000,0.974291,0.000000 +1284,0.224271,0.000000,0.974527,0.000000 +1285,0.223250,0.000000,0.974761,0.000000 +1286,0.222229,0.000000,0.974994,0.000000 +1287,0.221208,0.000000,0.975227,0.000000 +1288,0.220187,0.000000,0.975458,0.000000 +1289,0.219165,0.000000,0.975688,0.000000 +1290,0.218143,0.000000,0.975917,0.000000 +1291,0.217121,0.000000,0.976145,0.000000 +1292,0.216099,0.000000,0.976371,0.000000 +1293,0.215076,0.000000,0.976597,0.000000 +1294,0.214053,0.000000,0.976822,0.000000 +1295,0.213030,0.000000,0.977046,0.000000 +1296,0.212007,0.000000,0.977268,0.000000 +1297,0.210984,0.000000,0.977490,0.000000 +1298,0.209960,0.000000,0.977710,0.000000 +1299,0.208936,0.000000,0.977929,0.000000 +1300,0.207912,0.000000,0.978148,0.000000 +1301,0.206887,0.000000,0.978365,0.000000 +1302,0.205863,0.000000,0.978581,0.000000 +1303,0.204838,0.000000,0.978796,0.000000 +1304,0.203813,0.000000,0.979010,0.000000 +1305,0.202787,0.000000,0.979223,0.000000 +1306,0.201762,0.000000,0.979435,0.000000 +1307,0.200736,0.000000,0.979645,0.000000 +1308,0.199710,0.000000,0.979855,0.000000 +1309,0.198684,0.000000,0.980064,0.000000 +1310,0.197657,0.000000,0.980271,0.000000 +1311,0.196631,0.000000,0.980478,0.000000 +1312,0.195604,0.000000,0.980683,0.000000 +1313,0.194577,0.000000,0.980887,0.000000 +1314,0.193549,0.000000,0.981091,0.000000 +1315,0.192522,0.000000,0.981293,0.000000 +1316,0.191494,0.000000,0.981494,0.000000 +1317,0.190466,0.000000,0.981694,0.000000 +1318,0.189438,0.000000,0.981893,0.000000 +1319,0.188410,0.000000,0.982090,0.000000 +1320,0.187381,0.000000,0.982287,0.000000 +1321,0.186353,0.000000,0.982483,0.000000 +1322,0.185324,0.000000,0.982678,0.000000 +1323,0.184294,0.000000,0.982871,0.000000 +1324,0.183265,0.000000,0.983064,0.000000 +1325,0.182236,0.000000,0.983255,0.000000 +1326,0.181206,0.000000,0.983445,0.000000 +1327,0.180176,0.000000,0.983634,0.000000 +1328,0.179146,0.000000,0.983823,0.000000 +1329,0.178115,0.000000,0.984010,0.000000 +1330,0.177085,0.000000,0.984196,0.000000 +1331,0.176054,0.000000,0.984381,0.000000 +1332,0.175023,0.000000,0.984564,0.000000 +1333,0.173992,0.000000,0.984747,0.000000 +1334,0.172961,0.000000,0.984929,0.000000 +1335,0.171929,0.000000,0.985109,0.000000 +1336,0.170897,0.000000,0.985289,0.000000 +1337,0.169866,0.000000,0.985467,0.000000 +1338,0.168833,0.000000,0.985645,0.000000 +1339,0.167801,0.000000,0.985821,0.000000 +1340,0.166769,0.000000,0.985996,0.000000 +1341,0.165736,0.000000,0.986170,0.000000 +1342,0.164703,0.000000,0.986343,0.000000 +1343,0.163670,0.000000,0.986515,0.000000 +1344,0.162637,0.000000,0.986686,0.000000 +1345,0.161604,0.000000,0.986856,0.000000 +1346,0.160570,0.000000,0.987024,0.000000 +1347,0.159537,0.000000,0.987192,0.000000 +1348,0.158503,0.000000,0.987359,0.000000 +1349,0.157469,0.000000,0.987524,0.000000 +1350,0.156434,0.000000,0.987688,0.000000 +1351,0.155400,0.000000,0.987852,0.000000 +1352,0.154366,0.000000,0.988014,0.000000 +1353,0.153331,0.000000,0.988175,0.000000 +1354,0.152296,0.000000,0.988335,0.000000 +1355,0.151261,0.000000,0.988494,0.000000 +1356,0.150226,0.000000,0.988652,0.000000 +1357,0.149190,0.000000,0.988809,0.000000 +1358,0.148155,0.000000,0.988964,0.000000 +1359,0.147119,0.000000,0.989119,0.000000 +1360,0.146083,0.000000,0.989272,0.000000 +1361,0.145047,0.000000,0.989425,0.000000 +1362,0.144011,0.000000,0.989576,0.000000 +1363,0.142974,0.000000,0.989726,0.000000 +1364,0.141938,0.000000,0.989876,0.000000 +1365,0.140901,0.000000,0.990024,0.000000 +1366,0.139864,0.000000,0.990171,0.000000 +1367,0.138827,0.000000,0.990317,0.000000 +1368,0.137790,0.000000,0.990461,0.000000 +1369,0.136753,0.000000,0.990605,0.000000 +1370,0.135716,0.000000,0.990748,0.000000 +1371,0.134678,0.000000,0.990889,0.000000 +1372,0.133640,0.000000,0.991030,0.000000 +1373,0.132602,0.000000,0.991169,0.000000 +1374,0.131564,0.000000,0.991308,0.000000 +1375,0.130526,0.000000,0.991445,0.000000 +1376,0.129488,0.000000,0.991581,0.000000 +1377,0.128449,0.000000,0.991716,0.000000 +1378,0.127411,0.000000,0.991850,0.000000 +1379,0.126372,0.000000,0.991983,0.000000 +1380,0.125333,0.000000,0.992115,0.000000 +1381,0.124294,0.000000,0.992245,0.000000 +1382,0.123255,0.000000,0.992375,0.000000 +1383,0.122216,0.000000,0.992504,0.000000 +1384,0.121176,0.000000,0.992631,0.000000 +1385,0.120137,0.000000,0.992757,0.000000 +1386,0.119097,0.000000,0.992883,0.000000 +1387,0.118057,0.000000,0.993007,0.000000 +1388,0.117017,0.000000,0.993130,0.000000 +1389,0.115977,0.000000,0.993252,0.000000 +1390,0.114937,0.000000,0.993373,0.000000 +1391,0.113897,0.000000,0.993493,0.000000 +1392,0.112856,0.000000,0.993611,0.000000 +1393,0.111816,0.000000,0.993729,0.000000 +1394,0.110775,0.000000,0.993845,0.000000 +1395,0.109734,0.000000,0.993961,0.000000 +1396,0.108693,0.000000,0.994075,0.000000 +1397,0.107652,0.000000,0.994189,0.000000 +1398,0.106611,0.000000,0.994301,0.000000 +1399,0.105570,0.000000,0.994412,0.000000 +1400,0.104528,0.000000,0.994522,0.000000 +1401,0.103487,0.000000,0.994631,0.000000 +1402,0.102445,0.000000,0.994739,0.000000 +1403,0.101404,0.000000,0.994845,0.000000 +1404,0.100362,0.000000,0.994951,0.000000 +1405,0.099320,0.000000,0.995056,0.000000 +1406,0.098278,0.000000,0.995159,0.000000 +1407,0.097235,0.000000,0.995261,0.000000 +1408,0.096193,0.000000,0.995363,0.000000 +1409,0.095151,0.000000,0.995463,0.000000 +1410,0.094108,0.000000,0.995562,0.000000 +1411,0.093066,0.000000,0.995660,0.000000 +1412,0.092023,0.000000,0.995757,0.000000 +1413,0.090980,0.000000,0.995853,0.000000 +1414,0.089937,0.000000,0.995947,0.000000 +1415,0.088894,0.000000,0.996041,0.000000 +1416,0.087851,0.000000,0.996134,0.000000 +1417,0.086808,0.000000,0.996225,0.000000 +1418,0.085765,0.000000,0.996315,0.000000 +1419,0.084721,0.000000,0.996405,0.000000 +1420,0.083678,0.000000,0.996493,0.000000 +1421,0.082634,0.000000,0.996580,0.000000 +1422,0.081591,0.000000,0.996666,0.000000 +1423,0.080547,0.000000,0.996751,0.000000 +1424,0.079503,0.000000,0.996835,0.000000 +1425,0.078459,0.000000,0.996917,0.000000 +1426,0.077415,0.000000,0.996999,0.000000 +1427,0.076371,0.000000,0.997079,0.000000 +1428,0.075327,0.000000,0.997159,0.000000 +1429,0.074283,0.000000,0.997237,0.000000 +1430,0.073238,0.000000,0.997314,0.000000 +1431,0.072194,0.000000,0.997391,0.000000 +1432,0.071149,0.000000,0.997466,0.000000 +1433,0.070105,0.000000,0.997540,0.000000 +1434,0.069060,0.000000,0.997613,0.000000 +1435,0.068015,0.000000,0.997684,0.000000 +1436,0.066970,0.000000,0.997755,0.000000 +1437,0.065926,0.000000,0.997825,0.000000 +1438,0.064881,0.000000,0.997893,0.000000 +1439,0.063836,0.000000,0.997960,0.000000 +1440,0.062791,0.000000,0.998027,0.000000 +1441,0.061745,0.000000,0.998092,0.000000 +1442,0.060700,0.000000,0.998156,0.000000 +1443,0.059655,0.000000,0.998219,0.000000 +1444,0.058609,0.000000,0.998281,0.000000 +1445,0.057564,0.000000,0.998342,0.000000 +1446,0.056519,0.000000,0.998402,0.000000 +1447,0.055473,0.000000,0.998460,0.000000 +1448,0.054427,0.000000,0.998518,0.000000 +1449,0.053382,0.000000,0.998574,0.000000 +1450,0.052336,0.000000,0.998630,0.000000 +1451,0.051290,0.000000,0.998684,0.000000 +1452,0.050244,0.000000,0.998737,0.000000 +1453,0.049198,0.000000,0.998789,0.000000 +1454,0.048152,0.000000,0.998840,0.000000 +1455,0.047106,0.000000,0.998890,0.000000 +1456,0.046060,0.000000,0.998939,0.000000 +1457,0.045014,0.000000,0.998986,0.000000 +1458,0.043968,0.000000,0.999033,0.000000 +1459,0.042922,0.000000,0.999078,0.000000 +1460,0.041876,0.000000,0.999123,0.000000 +1461,0.040829,0.000000,0.999166,0.000000 +1462,0.039783,0.000000,0.999208,0.000000 +1463,0.038737,0.000000,0.999249,0.000000 +1464,0.037690,0.000000,0.999289,0.000000 +1465,0.036644,0.000000,0.999328,0.000000 +1466,0.035597,0.000000,0.999366,0.000000 +1467,0.034551,0.000000,0.999403,0.000000 +1468,0.033504,0.000000,0.999439,0.000000 +1469,0.032457,0.000000,0.999473,0.000000 +1470,0.031411,0.000000,0.999507,0.000000 +1471,0.030364,0.000000,0.999539,0.000000 +1472,0.029317,0.000000,0.999570,0.000000 +1473,0.028271,0.000000,0.999600,0.000000 +1474,0.027224,0.000000,0.999629,0.000000 +1475,0.026177,0.000000,0.999657,0.000000 +1476,0.025130,0.000000,0.999684,0.000000 +1477,0.024083,0.000000,0.999710,0.000000 +1478,0.023036,0.000000,0.999735,0.000000 +1479,0.021989,0.000000,0.999758,0.000000 +1480,0.020942,0.000000,0.999781,0.000000 +1481,0.019895,0.000000,0.999802,0.000000 +1482,0.018848,0.000000,0.999822,0.000000 +1483,0.017801,0.000000,0.999842,0.000000 +1484,0.016754,0.000000,0.999860,0.000000 +1485,0.015707,0.000000,0.999877,0.000000 +1486,0.014660,0.000000,0.999893,0.000000 +1487,0.013613,0.000000,0.999907,0.000000 +1488,0.012566,0.000000,0.999921,0.000000 +1489,0.011519,0.000000,0.999934,0.000000 +1490,0.010472,0.000000,0.999945,0.000000 +1491,0.009425,0.000000,0.999956,0.000000 +1492,0.008377,0.000000,0.999965,0.000000 +1493,0.007330,0.000000,0.999973,0.000000 +1494,0.006283,0.000000,0.999980,0.000000 +1495,0.005236,0.000000,0.999986,0.000000 +1496,0.004189,0.000000,0.999991,0.000000 +1497,0.003142,0.000000,0.999995,0.000000 +1498,0.002094,0.000000,0.999998,0.000000 +1499,0.001047,0.000000,0.999999,0.000000 +1500,0.000000,0.000000,1.000000,0.000000 +1501,-0.001047,-0.000000,0.999999,-0.000000 +1502,-0.002094,-0.000000,0.999998,-0.000000 +1503,-0.003142,-0.000000,0.999995,-0.000000 +1504,-0.004189,-0.000000,0.999991,-0.000000 +1505,-0.005236,-0.000000,0.999986,-0.000000 +1506,-0.006283,-0.000000,0.999980,-0.000000 +1507,-0.007330,-0.000000,0.999973,-0.000000 +1508,-0.008377,-0.000000,0.999965,-0.000000 +1509,-0.009425,-0.000000,0.999956,-0.000000 +1510,-0.010472,-0.000000,0.999945,-0.000000 +1511,-0.011519,-0.000000,0.999934,-0.000000 +1512,-0.012566,-0.000000,0.999921,-0.000000 +1513,-0.013613,-0.000000,0.999907,-0.000000 +1514,-0.014660,-0.000000,0.999893,-0.000000 +1515,-0.015707,-0.000000,0.999877,-0.000000 +1516,-0.016754,-0.000000,0.999860,-0.000000 +1517,-0.017801,-0.000000,0.999842,-0.000000 +1518,-0.018848,-0.000000,0.999822,-0.000000 +1519,-0.019895,-0.000000,0.999802,-0.000000 +1520,-0.020942,-0.000000,0.999781,-0.000000 +1521,-0.021989,-0.000000,0.999758,-0.000000 +1522,-0.023036,-0.000000,0.999735,-0.000000 +1523,-0.024083,-0.000000,0.999710,-0.000000 +1524,-0.025130,-0.000000,0.999684,-0.000000 +1525,-0.026177,-0.000000,0.999657,-0.000000 +1526,-0.027224,-0.000000,0.999629,-0.000000 +1527,-0.028271,-0.000000,0.999600,-0.000000 +1528,-0.029317,-0.000000,0.999570,-0.000000 +1529,-0.030364,-0.000000,0.999539,-0.000000 +1530,-0.031411,-0.000000,0.999507,-0.000000 +1531,-0.032457,-0.000000,0.999473,-0.000000 +1532,-0.033504,-0.000000,0.999439,-0.000000 +1533,-0.034551,-0.000000,0.999403,-0.000000 +1534,-0.035597,-0.000000,0.999366,-0.000000 +1535,-0.036644,-0.000000,0.999328,-0.000000 +1536,-0.037690,-0.000000,0.999289,-0.000000 +1537,-0.038737,-0.000000,0.999249,-0.000000 +1538,-0.039783,-0.000000,0.999208,-0.000000 +1539,-0.040829,-0.000000,0.999166,-0.000000 +1540,-0.041876,-0.000000,0.999123,-0.000000 +1541,-0.042922,-0.000000,0.999078,-0.000000 +1542,-0.043968,-0.000000,0.999033,-0.000000 +1543,-0.045014,-0.000000,0.998986,-0.000000 +1544,-0.046060,-0.000000,0.998939,-0.000000 +1545,-0.047106,-0.000000,0.998890,-0.000000 +1546,-0.048152,-0.000000,0.998840,-0.000000 +1547,-0.049198,-0.000000,0.998789,-0.000000 +1548,-0.050244,-0.000000,0.998737,-0.000000 +1549,-0.051290,-0.000000,0.998684,-0.000000 +1550,-0.052336,-0.000000,0.998630,-0.000000 +1551,-0.053382,-0.000000,0.998574,-0.000000 +1552,-0.054427,-0.000000,0.998518,-0.000000 +1553,-0.055473,-0.000000,0.998460,-0.000000 +1554,-0.056519,-0.000000,0.998402,-0.000000 +1555,-0.057564,-0.000000,0.998342,-0.000000 +1556,-0.058609,-0.000000,0.998281,-0.000000 +1557,-0.059655,-0.000000,0.998219,-0.000000 +1558,-0.060700,-0.000000,0.998156,-0.000000 +1559,-0.061745,-0.000000,0.998092,-0.000000 +1560,-0.062791,-0.000000,0.998027,-0.000000 +1561,-0.063836,-0.000000,0.997960,-0.000000 +1562,-0.064881,-0.000000,0.997893,-0.000000 +1563,-0.065926,-0.000000,0.997825,-0.000000 +1564,-0.066970,-0.000000,0.997755,-0.000000 +1565,-0.068015,-0.000000,0.997684,-0.000000 +1566,-0.069060,-0.000000,0.997613,-0.000000 +1567,-0.070105,-0.000000,0.997540,-0.000000 +1568,-0.071149,-0.000000,0.997466,-0.000000 +1569,-0.072194,-0.000000,0.997391,-0.000000 +1570,-0.073238,-0.000000,0.997314,-0.000000 +1571,-0.074283,-0.000000,0.997237,-0.000000 +1572,-0.075327,-0.000000,0.997159,-0.000000 +1573,-0.076371,-0.000000,0.997079,-0.000000 +1574,-0.077415,-0.000000,0.996999,-0.000000 +1575,-0.078459,-0.000000,0.996917,-0.000000 +1576,-0.079503,-0.000000,0.996835,-0.000000 +1577,-0.080547,-0.000000,0.996751,-0.000000 +1578,-0.081591,-0.000000,0.996666,-0.000000 +1579,-0.082634,-0.000000,0.996580,-0.000000 +1580,-0.083678,-0.000000,0.996493,-0.000000 +1581,-0.084721,-0.000000,0.996405,-0.000000 +1582,-0.085765,-0.000000,0.996315,-0.000000 +1583,-0.086808,-0.000000,0.996225,-0.000000 +1584,-0.087851,-0.000000,0.996134,-0.000000 +1585,-0.088894,-0.000000,0.996041,-0.000000 +1586,-0.089937,-0.000000,0.995947,-0.000000 +1587,-0.090980,-0.000000,0.995853,-0.000000 +1588,-0.092023,-0.000000,0.995757,-0.000000 +1589,-0.093066,-0.000000,0.995660,-0.000000 +1590,-0.094108,-0.000000,0.995562,-0.000000 +1591,-0.095151,-0.000000,0.995463,-0.000000 +1592,-0.096193,-0.000000,0.995363,-0.000000 +1593,-0.097235,-0.000000,0.995261,-0.000000 +1594,-0.098278,-0.000000,0.995159,-0.000000 +1595,-0.099320,-0.000000,0.995056,-0.000000 +1596,-0.100362,-0.000000,0.994951,-0.000000 +1597,-0.101404,-0.000000,0.994845,-0.000000 +1598,-0.102445,-0.000000,0.994739,-0.000000 +1599,-0.103487,-0.000000,0.994631,-0.000000 +1600,-0.104528,-0.000000,0.994522,-0.000000 +1601,-0.105570,-0.000000,0.994412,-0.000000 +1602,-0.106611,-0.000000,0.994301,-0.000000 +1603,-0.107652,-0.000000,0.994189,-0.000000 +1604,-0.108693,-0.000000,0.994075,-0.000000 +1605,-0.109734,-0.000000,0.993961,-0.000000 +1606,-0.110775,-0.000000,0.993845,-0.000000 +1607,-0.111816,-0.000000,0.993729,-0.000000 +1608,-0.112856,-0.000000,0.993611,-0.000000 +1609,-0.113897,-0.000000,0.993493,-0.000000 +1610,-0.114937,-0.000000,0.993373,-0.000000 +1611,-0.115977,-0.000000,0.993252,-0.000000 +1612,-0.117017,-0.000000,0.993130,-0.000000 +1613,-0.118057,-0.000000,0.993007,-0.000000 +1614,-0.119097,-0.000000,0.992883,-0.000000 +1615,-0.120137,-0.000000,0.992757,-0.000000 +1616,-0.121176,-0.000000,0.992631,-0.000000 +1617,-0.122216,-0.000000,0.992504,-0.000000 +1618,-0.123255,-0.000000,0.992375,-0.000000 +1619,-0.124294,-0.000000,0.992245,-0.000000 +1620,-0.125333,-0.000000,0.992115,-0.000000 +1621,-0.126372,-0.000000,0.991983,-0.000000 +1622,-0.127411,-0.000000,0.991850,-0.000000 +1623,-0.128449,-0.000000,0.991716,-0.000000 +1624,-0.129488,-0.000000,0.991581,-0.000000 +1625,-0.130526,-0.000000,0.991445,-0.000000 +1626,-0.131564,-0.000000,0.991308,-0.000000 +1627,-0.132602,-0.000000,0.991169,-0.000000 +1628,-0.133640,-0.000000,0.991030,-0.000000 +1629,-0.134678,-0.000000,0.990889,-0.000000 +1630,-0.135716,-0.000000,0.990748,-0.000000 +1631,-0.136753,-0.000000,0.990605,-0.000000 +1632,-0.137790,-0.000000,0.990461,-0.000000 +1633,-0.138827,-0.000000,0.990317,-0.000000 +1634,-0.139864,-0.000000,0.990171,-0.000000 +1635,-0.140901,-0.000000,0.990024,-0.000000 +1636,-0.141938,-0.000000,0.989876,-0.000000 +1637,-0.142974,-0.000000,0.989726,-0.000000 +1638,-0.144011,-0.000000,0.989576,-0.000000 +1639,-0.145047,-0.000000,0.989425,-0.000000 +1640,-0.146083,-0.000000,0.989272,-0.000000 +1641,-0.147119,-0.000000,0.989119,-0.000000 +1642,-0.148155,-0.000000,0.988964,-0.000000 +1643,-0.149190,-0.000000,0.988809,-0.000000 +1644,-0.150226,-0.000000,0.988652,-0.000000 +1645,-0.151261,-0.000000,0.988494,-0.000000 +1646,-0.152296,-0.000000,0.988335,-0.000000 +1647,-0.153331,-0.000000,0.988175,-0.000000 +1648,-0.154366,-0.000000,0.988014,-0.000000 +1649,-0.155400,-0.000000,0.987852,-0.000000 +1650,-0.156434,-0.000000,0.987688,-0.000000 +1651,-0.157469,-0.000000,0.987524,-0.000000 +1652,-0.158503,-0.000000,0.987359,-0.000000 +1653,-0.159537,-0.000000,0.987192,-0.000000 +1654,-0.160570,-0.000000,0.987024,-0.000000 +1655,-0.161604,-0.000000,0.986856,-0.000000 +1656,-0.162637,-0.000000,0.986686,-0.000000 +1657,-0.163670,-0.000000,0.986515,-0.000000 +1658,-0.164703,-0.000000,0.986343,-0.000000 +1659,-0.165736,-0.000000,0.986170,-0.000000 +1660,-0.166769,-0.000000,0.985996,-0.000000 +1661,-0.167801,-0.000000,0.985821,-0.000000 +1662,-0.168833,-0.000000,0.985645,-0.000000 +1663,-0.169866,-0.000000,0.985467,-0.000000 +1664,-0.170897,-0.000000,0.985289,-0.000000 +1665,-0.171929,-0.000000,0.985109,-0.000000 +1666,-0.172961,-0.000000,0.984929,-0.000000 +1667,-0.173992,-0.000000,0.984747,-0.000000 +1668,-0.175023,-0.000000,0.984564,-0.000000 +1669,-0.176054,-0.000000,0.984381,-0.000000 +1670,-0.177085,-0.000000,0.984196,-0.000000 +1671,-0.178115,-0.000000,0.984010,-0.000000 +1672,-0.179146,-0.000000,0.983823,-0.000000 +1673,-0.180176,-0.000000,0.983634,-0.000000 +1674,-0.181206,-0.000000,0.983445,-0.000000 +1675,-0.182236,-0.000000,0.983255,-0.000000 +1676,-0.183265,-0.000000,0.983064,-0.000000 +1677,-0.184294,-0.000000,0.982871,-0.000000 +1678,-0.185324,-0.000000,0.982678,-0.000000 +1679,-0.186353,-0.000000,0.982483,-0.000000 +1680,-0.187381,-0.000000,0.982287,-0.000000 +1681,-0.188410,-0.000000,0.982090,-0.000000 +1682,-0.189438,-0.000000,0.981893,-0.000000 +1683,-0.190466,-0.000000,0.981694,-0.000000 +1684,-0.191494,-0.000000,0.981494,-0.000000 +1685,-0.192522,-0.000000,0.981293,-0.000000 +1686,-0.193549,-0.000000,0.981091,-0.000000 +1687,-0.194577,-0.000000,0.980887,-0.000000 +1688,-0.195604,-0.000000,0.980683,-0.000000 +1689,-0.196631,-0.000000,0.980478,-0.000000 +1690,-0.197657,-0.000000,0.980271,-0.000000 +1691,-0.198684,-0.000000,0.980064,-0.000000 +1692,-0.199710,-0.000000,0.979855,-0.000000 +1693,-0.200736,-0.000000,0.979645,-0.000000 +1694,-0.201762,-0.000000,0.979435,-0.000000 +1695,-0.202787,-0.000000,0.979223,-0.000000 +1696,-0.203813,-0.000000,0.979010,-0.000000 +1697,-0.204838,-0.000000,0.978796,-0.000000 +1698,-0.205863,-0.000000,0.978581,-0.000000 +1699,-0.206887,-0.000000,0.978365,-0.000000 +1700,-0.207912,-0.000000,0.978148,-0.000000 +1701,-0.208936,-0.000000,0.977929,-0.000000 +1702,-0.209960,-0.000000,0.977710,-0.000000 +1703,-0.210984,-0.000000,0.977490,-0.000000 +1704,-0.212007,-0.000000,0.977268,-0.000000 +1705,-0.213030,-0.000000,0.977046,-0.000000 +1706,-0.214053,-0.000000,0.976822,-0.000000 +1707,-0.215076,-0.000000,0.976597,-0.000000 +1708,-0.216099,-0.000000,0.976371,-0.000000 +1709,-0.217121,-0.000000,0.976145,-0.000000 +1710,-0.218143,-0.000000,0.975917,-0.000000 +1711,-0.219165,-0.000000,0.975688,-0.000000 +1712,-0.220187,-0.000000,0.975458,-0.000000 +1713,-0.221208,-0.000000,0.975227,-0.000000 +1714,-0.222229,-0.000000,0.974994,-0.000000 +1715,-0.223250,-0.000000,0.974761,-0.000000 +1716,-0.224271,-0.000000,0.974527,-0.000000 +1717,-0.225291,-0.000000,0.974291,-0.000000 +1718,-0.226311,-0.000000,0.974055,-0.000000 +1719,-0.227331,-0.000000,0.973817,-0.000000 +1720,-0.228351,-0.000000,0.973579,-0.000000 +1721,-0.229370,-0.000000,0.973339,-0.000000 +1722,-0.230389,-0.000000,0.973099,-0.000000 +1723,-0.231408,-0.000000,0.972857,-0.000000 +1724,-0.232427,-0.000000,0.972614,-0.000000 +1725,-0.233445,-0.000000,0.972370,-0.000000 +1726,-0.234463,-0.000000,0.972125,-0.000000 +1727,-0.235481,-0.000000,0.971879,-0.000000 +1728,-0.236499,-0.000000,0.971632,-0.000000 +1729,-0.237516,-0.000000,0.971384,-0.000000 +1730,-0.238533,-0.000000,0.971134,-0.000000 +1731,-0.239550,-0.000000,0.970884,-0.000000 +1732,-0.240567,-0.000000,0.970633,-0.000000 +1733,-0.241583,-0.000000,0.970380,-0.000000 +1734,-0.242599,-0.000000,0.970127,-0.000000 +1735,-0.243615,-0.000000,0.969872,-0.000000 +1736,-0.244631,-0.000000,0.969616,-0.000000 +1737,-0.245646,-0.000000,0.969360,-0.000000 +1738,-0.246661,-0.000000,0.969102,-0.000000 +1739,-0.247675,-0.000000,0.968843,-0.000000 +1740,-0.248690,-0.000000,0.968583,-0.000000 +1741,-0.249704,-0.000000,0.968322,-0.000000 +1742,-0.250718,-0.000000,0.968060,-0.000000 +1743,-0.251732,-0.000000,0.967797,-0.000000 +1744,-0.252745,-0.000000,0.967533,-0.000000 +1745,-0.253758,-0.000000,0.967268,-0.000000 +1746,-0.254771,-0.000000,0.967001,-0.000000 +1747,-0.255783,-0.000000,0.966734,-0.000000 +1748,-0.256795,-0.000000,0.966466,-0.000000 +1749,-0.257807,-0.000000,0.966196,-0.000000 +1750,-0.258819,-0.000000,0.965926,-0.000000 +1751,-0.259830,-0.000000,0.965654,-0.000000 +1752,-0.260842,-0.000000,0.965382,-0.000000 +1753,-0.261852,-0.000000,0.965108,-0.000000 +1754,-0.262863,-0.000000,0.964833,-0.000000 +1755,-0.263873,-0.000000,0.964557,-0.000000 +1756,-0.264883,-0.000000,0.964281,-0.000000 +1757,-0.265893,-0.000000,0.964003,-0.000000 +1758,-0.266902,-0.000000,0.963724,-0.000000 +1759,-0.267911,-0.000000,0.963444,-0.000000 +1760,-0.268920,-0.000000,0.963163,-0.000000 +1761,-0.269928,-0.000000,0.962880,-0.000000 +1762,-0.270936,-0.000000,0.962597,-0.000000 +1763,-0.271944,-0.000000,0.962313,-0.000000 +1764,-0.272952,-0.000000,0.962028,-0.000000 +1765,-0.273959,-0.000000,0.961741,-0.000000 +1766,-0.274966,-0.000000,0.961454,-0.000000 +1767,-0.275973,-0.000000,0.961165,-0.000000 +1768,-0.276979,-0.000000,0.960876,-0.000000 +1769,-0.277985,-0.000000,0.960585,-0.000000 +1770,-0.278991,-0.000000,0.960294,-0.000000 +1771,-0.279997,-0.000000,0.960001,-0.000000 +1772,-0.281002,-0.000000,0.959707,-0.000000 +1773,-0.282007,-0.000000,0.959412,-0.000000 +1774,-0.283011,-0.000000,0.959117,-0.000000 +1775,-0.284015,-0.000000,0.958820,-0.000000 +1776,-0.285019,-0.000000,0.958522,-0.000000 +1777,-0.286023,-0.000000,0.958223,-0.000000 +1778,-0.287026,-0.000000,0.957923,-0.000000 +1779,-0.288029,-0.000000,0.957622,-0.000000 +1780,-0.289032,-0.000000,0.957319,-0.000000 +1781,-0.290034,-0.000000,0.957016,-0.000000 +1782,-0.291036,-0.000000,0.956712,-0.000000 +1783,-0.292038,-0.000000,0.956407,-0.000000 +1784,-0.293039,-0.000000,0.956100,-0.000000 +1785,-0.294040,-0.000000,0.955793,-0.000000 +1786,-0.295041,-0.000000,0.955485,-0.000000 +1787,-0.296041,-0.000000,0.955175,-0.000000 +1788,-0.297042,-0.000000,0.954865,-0.000000 +1789,-0.298041,-0.000000,0.954553,-0.000000 +1790,-0.299041,-0.000000,0.954240,-0.000000 +1791,-0.300040,-0.000000,0.953927,-0.000000 +1792,-0.301039,-0.000000,0.953612,-0.000000 +1793,-0.302037,-0.000000,0.953296,-0.000000 +1794,-0.303035,-0.000000,0.952979,-0.000000 +1795,-0.304033,-0.000000,0.952661,-0.000000 +1796,-0.305031,-0.000000,0.952343,-0.000000 +1797,-0.306028,-0.000000,0.952023,-0.000000 +1798,-0.307024,-0.000000,0.951702,-0.000000 +1799,-0.308021,-0.000000,0.951380,-0.000000 +1800,-0.309017,-0.000000,0.951057,-0.000000 +1801,-0.310013,-0.000000,0.950732,-0.000000 +1802,-0.311008,-0.000000,0.950407,-0.000000 +1803,-0.312003,-0.000000,0.950081,-0.000000 +1804,-0.312998,-0.000000,0.949754,-0.000000 +1805,-0.313992,-0.000000,0.949425,-0.000000 +1806,-0.314987,-0.000000,0.949096,-0.000000 +1807,-0.315980,-0.000000,0.948766,-0.000000 +1808,-0.316974,-0.000000,0.948434,-0.000000 +1809,-0.317967,-0.000000,0.948102,-0.000000 +1810,-0.318959,-0.000000,0.947768,-0.000000 +1811,-0.319952,-0.000000,0.947434,-0.000000 +1812,-0.320944,-0.000000,0.947098,-0.000000 +1813,-0.321935,-0.000000,0.946762,-0.000000 +1814,-0.322927,-0.000000,0.946424,-0.000000 +1815,-0.323917,-0.000000,0.946085,-0.000000 +1816,-0.324908,-0.000000,0.945746,-0.000000 +1817,-0.325898,-0.000000,0.945405,-0.000000 +1818,-0.326888,-0.000000,0.945063,-0.000000 +1819,-0.327878,-0.000000,0.944720,-0.000000 +1820,-0.328867,-0.000000,0.944376,-0.000000 +1821,-0.329855,-0.000000,0.944031,-0.000000 +1822,-0.330844,-0.000000,0.943686,-0.000000 +1823,-0.331832,-0.000000,0.943339,-0.000000 +1824,-0.332820,-0.000000,0.942991,-0.000000 +1825,-0.333807,-0.000000,0.942641,-0.000000 +1826,-0.334794,-0.000000,0.942291,-0.000000 +1827,-0.335780,-0.000000,0.941940,-0.000000 +1828,-0.336767,-0.000000,0.941588,-0.000000 +1829,-0.337752,-0.000000,0.941235,-0.000000 +1830,-0.338738,-0.000000,0.940881,-0.000000 +1831,-0.339723,-0.000000,0.940526,-0.000000 +1832,-0.340708,-0.000000,0.940169,-0.000000 +1833,-0.341692,-0.000000,0.939812,-0.000000 +1834,-0.342676,-0.000000,0.939454,-0.000000 +1835,-0.343660,-0.000000,0.939094,-0.000000 +1836,-0.344643,-0.000000,0.938734,-0.000000 +1837,-0.345626,-0.000000,0.938372,-0.000000 +1838,-0.346608,-0.000000,0.938010,-0.000000 +1839,-0.347590,-0.000000,0.937646,-0.000000 +1840,-0.348572,-0.000000,0.937282,-0.000000 +1841,-0.349553,-0.000000,0.936916,-0.000000 +1842,-0.350534,-0.000000,0.936550,-0.000000 +1843,-0.351515,-0.000000,0.936182,-0.000000 +1844,-0.352495,-0.000000,0.935814,-0.000000 +1845,-0.353475,-0.000000,0.935444,-0.000000 +1846,-0.354454,-0.000000,0.935073,-0.000000 +1847,-0.355433,-0.000000,0.934702,-0.000000 +1848,-0.356412,-0.000000,0.934329,-0.000000 +1849,-0.357390,-0.000000,0.933955,-0.000000 +1850,-0.358368,-0.000000,0.933580,-0.000000 +1851,-0.359345,-0.000000,0.933205,-0.000000 +1852,-0.360322,-0.000000,0.932828,-0.000000 +1853,-0.361299,-0.000000,0.932450,-0.000000 +1854,-0.362275,-0.000000,0.932071,-0.000000 +1855,-0.363251,-0.000000,0.931691,-0.000000 +1856,-0.364227,-0.000000,0.931310,-0.000000 +1857,-0.365202,-0.000000,0.930928,-0.000000 +1858,-0.366176,-0.000000,0.930545,-0.000000 +1859,-0.367151,-0.000000,0.930161,-0.000000 +1860,-0.368125,-0.000000,0.929776,-0.000000 +1861,-0.369098,-0.000000,0.929390,-0.000000 +1862,-0.370071,-0.000000,0.929003,-0.000000 +1863,-0.371044,-0.000000,0.928615,-0.000000 +1864,-0.372016,-0.000000,0.928226,-0.000000 +1865,-0.372988,-0.000000,0.927836,-0.000000 +1866,-0.373959,-0.000000,0.927445,-0.000000 +1867,-0.374930,-0.000000,0.927053,-0.000000 +1868,-0.375901,-0.000000,0.926660,-0.000000 +1869,-0.376871,-0.000000,0.926266,-0.000000 +1870,-0.377841,-0.000000,0.925871,-0.000000 +1871,-0.378810,-0.000000,0.925474,-0.000000 +1872,-0.379779,-0.000000,0.925077,-0.000000 +1873,-0.380748,-0.000000,0.924679,-0.000000 +1874,-0.381716,-0.000000,0.924280,-0.000000 +1875,-0.382683,-0.000000,0.923880,-0.000000 +1876,-0.383651,-0.000000,0.923478,-0.000000 +1877,-0.384618,-0.000000,0.923076,-0.000000 +1878,-0.385584,-0.000000,0.922673,-0.000000 +1879,-0.386550,-0.000000,0.922268,-0.000000 +1880,-0.387516,-0.000000,0.921863,-0.000000 +1881,-0.388481,-0.000000,0.921457,-0.000000 +1882,-0.389445,-0.000000,0.921050,-0.000000 +1883,-0.390410,-0.000000,0.920641,-0.000000 +1884,-0.391374,-0.000000,0.920232,-0.000000 +1885,-0.392337,-0.000000,0.919821,-0.000000 +1886,-0.393300,-0.000000,0.919410,-0.000000 +1887,-0.394263,-0.000000,0.918998,-0.000000 +1888,-0.395225,-0.000000,0.918584,-0.000000 +1889,-0.396187,-0.000000,0.918170,-0.000000 +1890,-0.397148,-0.000000,0.917755,-0.000000 +1891,-0.398109,-0.000000,0.917338,-0.000000 +1892,-0.399069,-0.000000,0.916921,-0.000000 +1893,-0.400029,-0.000000,0.916502,-0.000000 +1894,-0.400989,-0.000000,0.916083,-0.000000 +1895,-0.401948,-0.000000,0.915663,-0.000000 +1896,-0.402906,-0.000000,0.915241,-0.000000 +1897,-0.403865,-0.000000,0.914819,-0.000000 +1898,-0.404822,-0.000000,0.914395,-0.000000 +1899,-0.405780,-0.000000,0.913971,-0.000000 +1900,-0.406737,-0.000000,0.913545,-0.000000 +1901,-0.407693,-0.000000,0.913119,-0.000000 +1902,-0.408649,-0.000000,0.912692,-0.000000 +1903,-0.409605,-0.000000,0.912263,-0.000000 +1904,-0.410560,-0.000000,0.911834,-0.000000 +1905,-0.411514,-0.000000,0.911403,-0.000000 +1906,-0.412469,-0.000000,0.910972,-0.000000 +1907,-0.413422,-0.000000,0.910539,-0.000000 +1908,-0.414376,-0.000000,0.910106,-0.000000 +1909,-0.415328,-0.000000,0.909672,-0.000000 +1910,-0.416281,-0.000000,0.909236,-0.000000 +1911,-0.417233,-0.000000,0.908800,-0.000000 +1912,-0.418184,-0.000000,0.908362,-0.000000 +1913,-0.419135,-0.000000,0.907924,-0.000000 +1914,-0.420086,-0.000000,0.907484,-0.000000 +1915,-0.421036,-0.000000,0.907044,-0.000000 +1916,-0.421985,-0.000000,0.906603,-0.000000 +1917,-0.422935,-0.000000,0.906160,-0.000000 +1918,-0.423883,-0.000000,0.905717,-0.000000 +1919,-0.424832,-0.000000,0.905272,-0.000000 +1920,-0.425779,-0.000000,0.904827,-0.000000 +1921,-0.426727,-0.000000,0.904381,-0.000000 +1922,-0.427673,-0.000000,0.903933,-0.000000 +1923,-0.428620,-0.000000,0.903485,-0.000000 +1924,-0.429566,-0.000000,0.903036,-0.000000 +1925,-0.430511,-0.000000,0.902585,-0.000000 +1926,-0.431456,-0.000000,0.902134,-0.000000 +1927,-0.432401,-0.000000,0.901682,-0.000000 +1928,-0.433345,-0.000000,0.901228,-0.000000 +1929,-0.434288,-0.000000,0.900774,-0.000000 +1930,-0.435231,-0.000000,0.900319,-0.000000 +1931,-0.436174,-0.000000,0.899863,-0.000000 +1932,-0.437116,-0.000000,0.899405,-0.000000 +1933,-0.438057,-0.000000,0.898947,-0.000000 +1934,-0.438999,-0.000000,0.898488,-0.000000 +1935,-0.439939,-0.000000,0.898028,-0.000000 +1936,-0.440879,-0.000000,0.897566,-0.000000 +1937,-0.441819,-0.000000,0.897104,-0.000000 +1938,-0.442758,-0.000000,0.896641,-0.000000 +1939,-0.443697,-0.000000,0.896177,-0.000000 +1940,-0.444635,-0.000000,0.895712,-0.000000 +1941,-0.445573,-0.000000,0.895246,-0.000000 +1942,-0.446510,-0.000000,0.894779,-0.000000 +1943,-0.447447,-0.000000,0.894310,-0.000000 +1944,-0.448383,-0.000000,0.893841,-0.000000 +1945,-0.449319,-0.000000,0.893371,-0.000000 +1946,-0.450254,-0.000000,0.892900,-0.000000 +1947,-0.451189,-0.000000,0.892428,-0.000000 +1948,-0.452123,-0.000000,0.891955,-0.000000 +1949,-0.453057,-0.000000,0.891481,-0.000000 +1950,-0.453990,-0.000000,0.891007,-0.000000 +1951,-0.454923,-0.000000,0.890531,-0.000000 +1952,-0.455856,-0.000000,0.890054,-0.000000 +1953,-0.456787,-0.000000,0.889576,-0.000000 +1954,-0.457719,-0.000000,0.889097,-0.000000 +1955,-0.458650,-0.000000,0.888617,-0.000000 +1956,-0.459580,-0.000000,0.888136,-0.000000 +1957,-0.460510,-0.000000,0.887655,-0.000000 +1958,-0.461439,-0.000000,0.887172,-0.000000 +1959,-0.462368,-0.000000,0.886688,-0.000000 +1960,-0.463296,-0.000000,0.886204,-0.000000 +1961,-0.464224,-0.000000,0.885718,-0.000000 +1962,-0.465151,-0.000000,0.885231,-0.000000 +1963,-0.466078,-0.000000,0.884744,-0.000000 +1964,-0.467004,-0.000000,0.884255,-0.000000 +1965,-0.467930,-0.000000,0.883766,-0.000000 +1966,-0.468855,-0.000000,0.883275,-0.000000 +1967,-0.469780,-0.000000,0.882784,-0.000000 +1968,-0.470704,-0.000000,0.882291,-0.000000 +1969,-0.471628,-0.000000,0.881798,-0.000000 +1970,-0.472551,-0.000000,0.881303,-0.000000 +1971,-0.473473,-0.000000,0.880808,-0.000000 +1972,-0.474396,-0.000000,0.880312,-0.000000 +1973,-0.475317,-0.000000,0.879815,-0.000000 +1974,-0.476238,-0.000000,0.879316,-0.000000 +1975,-0.477159,-0.000000,0.878817,-0.000000 +1976,-0.478079,-0.000000,0.878317,-0.000000 +1977,-0.478998,-0.000000,0.877816,-0.000000 +1978,-0.479917,-0.000000,0.877314,-0.000000 +1979,-0.480836,-0.000000,0.876811,-0.000000 +1980,-0.481754,-0.000000,0.876307,-0.000000 +1981,-0.482671,-0.000000,0.875802,-0.000000 +1982,-0.483588,-0.000000,0.875296,-0.000000 +1983,-0.484504,-0.000000,0.874789,-0.000000 +1984,-0.485420,-0.000000,0.874281,-0.000000 +1985,-0.486335,-0.000000,0.873772,-0.000000 +1986,-0.487250,-0.000000,0.873262,-0.000000 +1987,-0.488164,-0.000000,0.872752,-0.000000 +1988,-0.489078,-0.000000,0.872240,-0.000000 +1989,-0.489991,-0.000000,0.871727,-0.000000 +1990,-0.490904,-0.000000,0.871214,-0.000000 +1991,-0.491816,-0.000000,0.870699,-0.000000 +1992,-0.492727,-0.000000,0.870184,-0.000000 +1993,-0.493638,-0.000000,0.869667,-0.000000 +1994,-0.494549,-0.000000,0.869150,-0.000000 +1995,-0.495459,-0.000000,0.868632,-0.000000 +1996,-0.496368,-0.000000,0.868112,-0.000000 +1997,-0.497277,-0.000000,0.867592,-0.000000 +1998,-0.498185,-0.000000,0.867071,-0.000000 +1999,-0.499093,-0.000000,0.866549,-0.000000 +2000,-0.500000,-0.000000,0.866025,-0.000000 +2001,-0.500907,-0.000000,0.865501,-0.000000 +2002,-0.501813,-0.000000,0.864976,-0.000000 +2003,-0.502718,-0.000000,0.864450,-0.000000 +2004,-0.503623,-0.000000,0.863923,-0.000000 +2005,-0.504528,-0.000000,0.863396,-0.000000 +2006,-0.505431,-0.000000,0.862867,-0.000000 +2007,-0.506335,-0.000000,0.862337,-0.000000 +2008,-0.507238,-0.000000,0.861806,-0.000000 +2009,-0.508140,-0.000000,0.861275,-0.000000 +2010,-0.509041,-0.000000,0.860742,-0.000000 +2011,-0.509943,-0.000000,0.860208,-0.000000 +2012,-0.510843,-0.000000,0.859674,-0.000000 +2013,-0.511743,-0.000000,0.859139,-0.000000 +2014,-0.512642,-0.000000,0.858602,-0.000000 +2015,-0.513541,-0.000000,0.858065,-0.000000 +2016,-0.514440,-0.000000,0.857527,-0.000000 +2017,-0.515337,-0.000000,0.856987,-0.000000 +2018,-0.516234,-0.000000,0.856447,-0.000000 +2019,-0.517131,-0.000000,0.855906,-0.000000 +2020,-0.518027,-0.000000,0.855364,-0.000000 +2021,-0.518922,-0.000000,0.854821,-0.000000 +2022,-0.519817,-0.000000,0.854277,-0.000000 +2023,-0.520712,-0.000000,0.853733,-0.000000 +2024,-0.521605,-0.000000,0.853187,-0.000000 +2025,-0.522499,-0.000000,0.852640,-0.000000 +2026,-0.523391,-0.000000,0.852093,-0.000000 +2027,-0.524283,-0.000000,0.851544,-0.000000 +2028,-0.525175,-0.000000,0.850994,-0.000000 +2029,-0.526066,-0.000000,0.850444,-0.000000 +2030,-0.526956,-0.000000,0.849893,-0.000000 +2031,-0.527846,-0.000000,0.849340,-0.000000 +2032,-0.528735,-0.000000,0.848787,-0.000000 +2033,-0.529623,-0.000000,0.848233,-0.000000 +2034,-0.530511,-0.000000,0.847678,-0.000000 +2035,-0.531399,-0.000000,0.847122,-0.000000 +2036,-0.532285,-0.000000,0.846565,-0.000000 +2037,-0.533172,-0.000000,0.846007,-0.000000 +2038,-0.534057,-0.000000,0.845448,-0.000000 +2039,-0.534942,-0.000000,0.844889,-0.000000 +2040,-0.535827,-0.000000,0.844328,-0.000000 +2041,-0.536711,-0.000000,0.843766,-0.000000 +2042,-0.537594,-0.000000,0.843204,-0.000000 +2043,-0.538477,-0.000000,0.842640,-0.000000 +2044,-0.539359,-0.000000,0.842076,-0.000000 +2045,-0.540240,-0.000000,0.841511,-0.000000 +2046,-0.541121,-0.000000,0.840945,-0.000000 +2047,-0.542002,-0.000000,0.840377,-0.000000 +2048,-0.542881,-0.000000,0.839809,-0.000000 +2049,-0.543760,-0.000000,0.839240,-0.000000 +2050,-0.544639,-0.000000,0.838671,-0.000000 +2051,-0.545517,-0.000000,0.838100,-0.000000 +2052,-0.546394,-0.000000,0.837528,-0.000000 +2053,-0.547271,-0.000000,0.836955,-0.000000 +2054,-0.548147,-0.000000,0.836382,-0.000000 +2055,-0.549023,-0.000000,0.835807,-0.000000 +2056,-0.549898,-0.000000,0.835232,-0.000000 +2057,-0.550772,-0.000000,0.834656,-0.000000 +2058,-0.551646,-0.000000,0.834078,-0.000000 +2059,-0.552519,-0.000000,0.833500,-0.000000 +2060,-0.553392,-0.000000,0.832921,-0.000000 +2061,-0.554263,-0.000000,0.832341,-0.000000 +2062,-0.555135,-0.000000,0.831760,-0.000000 +2063,-0.556006,-0.000000,0.831179,-0.000000 +2064,-0.556876,-0.000000,0.830596,-0.000000 +2065,-0.557745,-0.000000,0.830012,-0.000000 +2066,-0.558614,-0.000000,0.829428,-0.000000 +2067,-0.559482,-0.000000,0.828842,-0.000000 +2068,-0.560350,-0.000000,0.828256,-0.000000 +2069,-0.561217,-0.000000,0.827669,-0.000000 +2070,-0.562083,-0.000000,0.827081,-0.000000 +2071,-0.562949,-0.000000,0.826492,-0.000000 +2072,-0.563814,-0.000000,0.825902,-0.000000 +2073,-0.564679,-0.000000,0.825311,-0.000000 +2074,-0.565543,-0.000000,0.824719,-0.000000 +2075,-0.566406,-0.000000,0.824126,-0.000000 +2076,-0.567269,-0.000000,0.823533,-0.000000 +2077,-0.568131,-0.000000,0.822938,-0.000000 +2078,-0.568993,-0.000000,0.822343,-0.000000 +2079,-0.569853,-0.000000,0.821746,-0.000000 +2080,-0.570714,-0.000000,0.821149,-0.000000 +2081,-0.571573,-0.000000,0.820551,-0.000000 +2082,-0.572432,-0.000000,0.819952,-0.000000 +2083,-0.573290,-0.000000,0.819352,-0.000000 +2084,-0.574148,-0.000000,0.818751,-0.000000 +2085,-0.575005,-0.000000,0.818150,-0.000000 +2086,-0.575862,-0.000000,0.817547,-0.000000 +2087,-0.576718,-0.000000,0.816944,-0.000000 +2088,-0.577573,-0.000000,0.816339,-0.000000 +2089,-0.578427,-0.000000,0.815734,-0.000000 +2090,-0.579281,-0.000000,0.815128,-0.000000 +2091,-0.580134,-0.000000,0.814521,-0.000000 +2092,-0.580987,-0.000000,0.813913,-0.000000 +2093,-0.581839,-0.000000,0.813304,-0.000000 +2094,-0.582690,-0.000000,0.812694,-0.000000 +2095,-0.583541,-0.000000,0.812084,-0.000000 +2096,-0.584391,-0.000000,0.811472,-0.000000 +2097,-0.585241,-0.000000,0.810860,-0.000000 +2098,-0.586090,-0.000000,0.810246,-0.000000 +2099,-0.586938,-0.000000,0.809632,-0.000000 +2100,-0.587785,-0.000000,0.809017,-0.000000 +2101,-0.588632,-0.000000,0.808401,-0.000000 +2102,-0.589478,-0.000000,0.807784,-0.000000 +2103,-0.590324,-0.000000,0.807166,-0.000000 +2104,-0.591169,-0.000000,0.806548,-0.000000 +2105,-0.592013,-0.000000,0.805928,-0.000000 +2106,-0.592857,-0.000000,0.805308,-0.000000 +2107,-0.593700,-0.000000,0.804687,-0.000000 +2108,-0.594542,-0.000000,0.804064,-0.000000 +2109,-0.595384,-0.000000,0.803441,-0.000000 +2110,-0.596225,-0.000000,0.802817,-0.000000 +2111,-0.597065,-0.000000,0.802193,-0.000000 +2112,-0.597905,-0.000000,0.801567,-0.000000 +2113,-0.598744,-0.000000,0.800940,-0.000000 +2114,-0.599582,-0.000000,0.800313,-0.000000 +2115,-0.600420,-0.000000,0.799685,-0.000000 +2116,-0.601257,-0.000000,0.799055,-0.000000 +2117,-0.602094,-0.000000,0.798425,-0.000000 +2118,-0.602930,-0.000000,0.797794,-0.000000 +2119,-0.603765,-0.000000,0.797163,-0.000000 +2120,-0.604599,-0.000000,0.796530,-0.000000 +2121,-0.605433,-0.000000,0.795896,-0.000000 +2122,-0.606266,-0.000000,0.795262,-0.000000 +2123,-0.607098,-0.000000,0.794627,-0.000000 +2124,-0.607930,-0.000000,0.793990,-0.000000 +2125,-0.608761,-0.000000,0.793353,-0.000000 +2126,-0.609592,-0.000000,0.792715,-0.000000 +2127,-0.610422,-0.000000,0.792077,-0.000000 +2128,-0.611251,-0.000000,0.791437,-0.000000 +2129,-0.612079,-0.000000,0.790796,-0.000000 +2130,-0.612907,-0.000000,0.790155,-0.000000 +2131,-0.613734,-0.000000,0.789513,-0.000000 +2132,-0.614561,-0.000000,0.788870,-0.000000 +2133,-0.615386,-0.000000,0.788226,-0.000000 +2134,-0.616211,-0.000000,0.787581,-0.000000 +2135,-0.617036,-0.000000,0.786935,-0.000000 +2136,-0.617860,-0.000000,0.786288,-0.000000 +2137,-0.618683,-0.000000,0.785641,-0.000000 +2138,-0.619505,-0.000000,0.784993,-0.000000 +2139,-0.620327,-0.000000,0.784343,-0.000000 +2140,-0.621148,-0.000000,0.783693,-0.000000 +2141,-0.621968,-0.000000,0.783043,-0.000000 +2142,-0.622788,-0.000000,0.782391,-0.000000 +2143,-0.623607,-0.000000,0.781738,-0.000000 +2144,-0.624425,-0.000000,0.781085,-0.000000 +2145,-0.625243,-0.000000,0.780430,-0.000000 +2146,-0.626060,-0.000000,0.779775,-0.000000 +2147,-0.626876,-0.000000,0.779119,-0.000000 +2148,-0.627691,-0.000000,0.778462,-0.000000 +2149,-0.628506,-0.000000,0.777805,-0.000000 +2150,-0.629320,-0.000000,0.777146,-0.000000 +2151,-0.630134,-0.000000,0.776487,-0.000000 +2152,-0.630947,-0.000000,0.775826,-0.000000 +2153,-0.631759,-0.000000,0.775165,-0.000000 +2154,-0.632570,-0.000000,0.774503,-0.000000 +2155,-0.633381,-0.000000,0.773840,-0.000000 +2156,-0.634191,-0.000000,0.773177,-0.000000 +2157,-0.635000,-0.000000,0.772512,-0.000000 +2158,-0.635809,-0.000000,0.771847,-0.000000 +2159,-0.636617,-0.000000,0.771180,-0.000000 +2160,-0.637424,-0.000000,0.770513,-0.000000 +2161,-0.638231,-0.000000,0.769845,-0.000000 +2162,-0.639036,-0.000000,0.769177,-0.000000 +2163,-0.639841,-0.000000,0.768507,-0.000000 +2164,-0.640646,-0.000000,0.767836,-0.000000 +2165,-0.641450,-0.000000,0.767165,-0.000000 +2166,-0.642253,-0.000000,0.766493,-0.000000 +2167,-0.643055,-0.000000,0.765820,-0.000000 +2168,-0.643857,-0.000000,0.765146,-0.000000 +2169,-0.644657,-0.000000,0.764472,-0.000000 +2170,-0.645458,-0.000000,0.763796,-0.000000 +2171,-0.646257,-0.000000,0.763120,-0.000000 +2172,-0.647056,-0.000000,0.762443,-0.000000 +2173,-0.647854,-0.000000,0.761764,-0.000000 +2174,-0.648651,-0.000000,0.761086,-0.000000 +2175,-0.649448,-0.000000,0.760406,-0.000000 +2176,-0.650244,-0.000000,0.759725,-0.000000 +2177,-0.651039,-0.000000,0.759044,-0.000000 +2178,-0.651834,-0.000000,0.758362,-0.000000 +2179,-0.652628,-0.000000,0.757679,-0.000000 +2180,-0.653421,-0.000000,0.756995,-0.000000 +2181,-0.654213,-0.000000,0.756310,-0.000000 +2182,-0.655005,-0.000000,0.755625,-0.000000 +2183,-0.655796,-0.000000,0.754939,-0.000000 +2184,-0.656586,-0.000000,0.754251,-0.000000 +2185,-0.657375,-0.000000,0.753563,-0.000000 +2186,-0.658164,-0.000000,0.752875,-0.000000 +2187,-0.658952,-0.000000,0.752185,-0.000000 +2188,-0.659739,-0.000000,0.751494,-0.000000 +2189,-0.660526,-0.000000,0.750803,-0.000000 +2190,-0.661312,-0.000000,0.750111,-0.000000 +2191,-0.662097,-0.000000,0.749418,-0.000000 +2192,-0.662881,-0.000000,0.748724,-0.000000 +2193,-0.663665,-0.000000,0.748030,-0.000000 +2194,-0.664448,-0.000000,0.747334,-0.000000 +2195,-0.665230,-0.000000,0.746638,-0.000000 +2196,-0.666012,-0.000000,0.745941,-0.000000 +2197,-0.666793,-0.000000,0.745243,-0.000000 +2198,-0.667573,-0.000000,0.744545,-0.000000 +2199,-0.668352,-0.000000,0.743845,-0.000000 +2200,-0.669131,-0.000000,0.743145,-0.000000 +2201,-0.669908,-0.000000,0.742444,-0.000000 +2202,-0.670686,-0.000000,0.741742,-0.000000 +2203,-0.671462,-0.000000,0.741039,-0.000000 +2204,-0.672238,-0.000000,0.740335,-0.000000 +2205,-0.673013,-0.000000,0.739631,-0.000000 +2206,-0.673787,-0.000000,0.738926,-0.000000 +2207,-0.674560,-0.000000,0.738220,-0.000000 +2208,-0.675333,-0.000000,0.737513,-0.000000 +2209,-0.676105,-0.000000,0.736806,-0.000000 +2210,-0.676876,-0.000000,0.736097,-0.000000 +2211,-0.677646,-0.000000,0.735388,-0.000000 +2212,-0.678416,-0.000000,0.734678,-0.000000 +2213,-0.679185,-0.000000,0.733967,-0.000000 +2214,-0.679953,-0.000000,0.733255,-0.000000 +2215,-0.680721,-0.000000,0.732543,-0.000000 +2216,-0.681488,-0.000000,0.731830,-0.000000 +2217,-0.682254,-0.000000,0.731116,-0.000000 +2218,-0.683019,-0.000000,0.730401,-0.000000 +2219,-0.683783,-0.000000,0.729685,-0.000000 +2220,-0.684547,-0.000000,0.728969,-0.000000 +2221,-0.685310,-0.000000,0.728251,-0.000000 +2222,-0.686072,-0.000000,0.727533,-0.000000 +2223,-0.686834,-0.000000,0.726814,-0.000000 +2224,-0.687595,-0.000000,0.726095,-0.000000 +2225,-0.688355,-0.000000,0.725374,-0.000000 +2226,-0.689114,-0.000000,0.724653,-0.000000 +2227,-0.689872,-0.000000,0.723931,-0.000000 +2228,-0.690630,-0.000000,0.723208,-0.000000 +2229,-0.691387,-0.000000,0.722485,-0.000000 +2230,-0.692143,-0.000000,0.721760,-0.000000 +2231,-0.692899,-0.000000,0.721035,-0.000000 +2232,-0.693653,-0.000000,0.720309,-0.000000 +2233,-0.694407,-0.000000,0.719582,-0.000000 +2234,-0.695160,-0.000000,0.718855,-0.000000 +2235,-0.695913,-0.000000,0.718126,-0.000000 +2236,-0.696664,-0.000000,0.717397,-0.000000 +2237,-0.697415,-0.000000,0.716667,-0.000000 +2238,-0.698165,-0.000000,0.715936,-0.000000 +2239,-0.698915,-0.000000,0.715205,-0.000000 +2240,-0.699663,-0.000000,0.714473,-0.000000 +2241,-0.700411,-0.000000,0.713740,-0.000000 +2242,-0.701158,-0.000000,0.713006,-0.000000 +2243,-0.701904,-0.000000,0.712271,-0.000000 +2244,-0.702650,-0.000000,0.711536,-0.000000 +2245,-0.703395,-0.000000,0.710799,-0.000000 +2246,-0.704139,-0.000000,0.710062,-0.000000 +2247,-0.704882,-0.000000,0.709325,-0.000000 +2248,-0.705624,-0.000000,0.708586,-0.000000 +2249,-0.706366,-0.000000,0.707847,-0.000000 +2250,-0.707107,-0.000000,0.707107,-0.000000 +2251,-0.707847,-0.000000,0.706366,-0.000000 +2252,-0.708586,-0.000000,0.705624,-0.000000 +2253,-0.709325,-0.000000,0.704882,-0.000000 +2254,-0.710062,-0.000000,0.704139,-0.000000 +2255,-0.710799,-0.000000,0.703395,-0.000000 +2256,-0.711536,-0.000000,0.702650,-0.000000 +2257,-0.712271,-0.000000,0.701904,-0.000000 +2258,-0.713006,-0.000000,0.701158,-0.000000 +2259,-0.713740,-0.000000,0.700411,-0.000000 +2260,-0.714473,-0.000000,0.699663,-0.000000 +2261,-0.715205,-0.000000,0.698915,-0.000000 +2262,-0.715936,-0.000000,0.698165,-0.000000 +2263,-0.716667,-0.000000,0.697415,-0.000000 +2264,-0.717397,-0.000000,0.696664,-0.000000 +2265,-0.718126,-0.000000,0.695913,-0.000000 +2266,-0.718855,-0.000000,0.695160,-0.000000 +2267,-0.719582,-0.000000,0.694407,-0.000000 +2268,-0.720309,-0.000000,0.693653,-0.000000 +2269,-0.721035,-0.000000,0.692899,-0.000000 +2270,-0.721760,-0.000000,0.692143,-0.000000 +2271,-0.722485,-0.000000,0.691387,-0.000000 +2272,-0.723208,-0.000000,0.690630,-0.000000 +2273,-0.723931,-0.000000,0.689872,-0.000000 +2274,-0.724653,-0.000000,0.689114,-0.000000 +2275,-0.725374,-0.000000,0.688355,-0.000000 +2276,-0.726095,-0.000000,0.687595,-0.000000 +2277,-0.726814,-0.000000,0.686834,-0.000000 +2278,-0.727533,-0.000000,0.686072,-0.000000 +2279,-0.728251,-0.000000,0.685310,-0.000000 +2280,-0.728969,-0.000000,0.684547,-0.000000 +2281,-0.729685,-0.000000,0.683783,-0.000000 +2282,-0.730401,-0.000000,0.683019,-0.000000 +2283,-0.731116,-0.000000,0.682254,-0.000000 +2284,-0.731830,-0.000000,0.681488,-0.000000 +2285,-0.732543,-0.000000,0.680721,-0.000000 +2286,-0.733255,-0.000000,0.679953,-0.000000 +2287,-0.733967,-0.000000,0.679185,-0.000000 +2288,-0.734678,-0.000000,0.678416,-0.000000 +2289,-0.735388,-0.000000,0.677646,-0.000000 +2290,-0.736097,-0.000000,0.676876,-0.000000 +2291,-0.736806,-0.000000,0.676105,-0.000000 +2292,-0.737513,-0.000000,0.675333,-0.000000 +2293,-0.738220,-0.000000,0.674560,-0.000000 +2294,-0.738926,-0.000000,0.673787,-0.000000 +2295,-0.739631,-0.000000,0.673013,-0.000000 +2296,-0.740335,-0.000000,0.672238,-0.000000 +2297,-0.741039,-0.000000,0.671462,-0.000000 +2298,-0.741742,-0.000000,0.670686,-0.000000 +2299,-0.742444,-0.000000,0.669908,-0.000000 +2300,-0.743145,-0.000000,0.669131,-0.000000 +2301,-0.743845,-0.000000,0.668352,-0.000000 +2302,-0.744545,-0.000000,0.667573,-0.000000 +2303,-0.745243,-0.000000,0.666793,-0.000000 +2304,-0.745941,-0.000000,0.666012,-0.000000 +2305,-0.746638,-0.000000,0.665230,-0.000000 +2306,-0.747334,-0.000000,0.664448,-0.000000 +2307,-0.748030,-0.000000,0.663665,-0.000000 +2308,-0.748724,-0.000000,0.662881,-0.000000 +2309,-0.749418,-0.000000,0.662097,-0.000000 +2310,-0.750111,-0.000000,0.661312,-0.000000 +2311,-0.750803,-0.000000,0.660526,-0.000000 +2312,-0.751494,-0.000000,0.659739,-0.000000 +2313,-0.752185,-0.000000,0.658952,-0.000000 +2314,-0.752875,-0.000000,0.658164,-0.000000 +2315,-0.753563,-0.000000,0.657375,-0.000000 +2316,-0.754251,-0.000000,0.656586,-0.000000 +2317,-0.754939,-0.000000,0.655796,-0.000000 +2318,-0.755625,-0.000000,0.655005,-0.000000 +2319,-0.756310,-0.000000,0.654213,-0.000000 +2320,-0.756995,-0.000000,0.653421,-0.000000 +2321,-0.757679,-0.000000,0.652628,-0.000000 +2322,-0.758362,-0.000000,0.651834,-0.000000 +2323,-0.759044,-0.000000,0.651039,-0.000000 +2324,-0.759725,-0.000000,0.650244,-0.000000 +2325,-0.760406,-0.000000,0.649448,-0.000000 +2326,-0.761086,-0.000000,0.648651,-0.000000 +2327,-0.761764,-0.000000,0.647854,-0.000000 +2328,-0.762443,-0.000000,0.647056,-0.000000 +2329,-0.763120,-0.000000,0.646257,-0.000000 +2330,-0.763796,-0.000000,0.645458,-0.000000 +2331,-0.764472,-0.000000,0.644657,-0.000000 +2332,-0.765146,-0.000000,0.643857,-0.000000 +2333,-0.765820,-0.000000,0.643055,-0.000000 +2334,-0.766493,-0.000000,0.642253,-0.000000 +2335,-0.767165,-0.000000,0.641450,-0.000000 +2336,-0.767836,-0.000000,0.640646,-0.000000 +2337,-0.768507,-0.000000,0.639841,-0.000000 +2338,-0.769177,-0.000000,0.639036,-0.000000 +2339,-0.769845,-0.000000,0.638231,-0.000000 +2340,-0.770513,-0.000000,0.637424,-0.000000 +2341,-0.771180,-0.000000,0.636617,-0.000000 +2342,-0.771847,-0.000000,0.635809,-0.000000 +2343,-0.772512,-0.000000,0.635000,-0.000000 +2344,-0.773177,-0.000000,0.634191,-0.000000 +2345,-0.773840,-0.000000,0.633381,-0.000000 +2346,-0.774503,-0.000000,0.632570,-0.000000 +2347,-0.775165,-0.000000,0.631759,-0.000000 +2348,-0.775826,-0.000000,0.630947,-0.000000 +2349,-0.776487,-0.000000,0.630134,-0.000000 +2350,-0.777146,-0.000000,0.629320,-0.000000 +2351,-0.777805,-0.000000,0.628506,-0.000000 +2352,-0.778462,-0.000000,0.627691,-0.000000 +2353,-0.779119,-0.000000,0.626876,-0.000000 +2354,-0.779775,-0.000000,0.626060,-0.000000 +2355,-0.780430,-0.000000,0.625243,-0.000000 +2356,-0.781085,-0.000000,0.624425,-0.000000 +2357,-0.781738,-0.000000,0.623607,-0.000000 +2358,-0.782391,-0.000000,0.622788,-0.000000 +2359,-0.783043,-0.000000,0.621968,-0.000000 +2360,-0.783693,-0.000000,0.621148,-0.000000 +2361,-0.784343,-0.000000,0.620327,-0.000000 +2362,-0.784993,-0.000000,0.619505,-0.000000 +2363,-0.785641,-0.000000,0.618683,-0.000000 +2364,-0.786288,-0.000000,0.617860,-0.000000 +2365,-0.786935,-0.000000,0.617036,-0.000000 +2366,-0.787581,-0.000000,0.616211,-0.000000 +2367,-0.788226,-0.000000,0.615386,-0.000000 +2368,-0.788870,-0.000000,0.614561,-0.000000 +2369,-0.789513,-0.000000,0.613734,-0.000000 +2370,-0.790155,-0.000000,0.612907,-0.000000 +2371,-0.790796,-0.000000,0.612079,-0.000000 +2372,-0.791437,-0.000000,0.611251,-0.000000 +2373,-0.792077,-0.000000,0.610422,-0.000000 +2374,-0.792715,-0.000000,0.609592,-0.000000 +2375,-0.793353,-0.000000,0.608761,-0.000000 +2376,-0.793990,-0.000000,0.607930,-0.000000 +2377,-0.794627,-0.000000,0.607098,-0.000000 +2378,-0.795262,-0.000000,0.606266,-0.000000 +2379,-0.795896,-0.000000,0.605433,-0.000000 +2380,-0.796530,-0.000000,0.604599,-0.000000 +2381,-0.797163,-0.000000,0.603765,-0.000000 +2382,-0.797794,-0.000000,0.602930,-0.000000 +2383,-0.798425,-0.000000,0.602094,-0.000000 +2384,-0.799055,-0.000000,0.601257,-0.000000 +2385,-0.799685,-0.000000,0.600420,-0.000000 +2386,-0.800313,-0.000000,0.599582,-0.000000 +2387,-0.800940,-0.000000,0.598744,-0.000000 +2388,-0.801567,-0.000000,0.597905,-0.000000 +2389,-0.802193,-0.000000,0.597065,-0.000000 +2390,-0.802817,-0.000000,0.596225,-0.000000 +2391,-0.803441,-0.000000,0.595384,-0.000000 +2392,-0.804064,-0.000000,0.594542,-0.000000 +2393,-0.804687,-0.000000,0.593700,-0.000000 +2394,-0.805308,-0.000000,0.592857,-0.000000 +2395,-0.805928,-0.000000,0.592013,-0.000000 +2396,-0.806548,-0.000000,0.591169,-0.000000 +2397,-0.807166,-0.000000,0.590324,-0.000000 +2398,-0.807784,-0.000000,0.589478,-0.000000 +2399,-0.808401,-0.000000,0.588632,-0.000000 +2400,-0.809017,-0.000000,0.587785,-0.000000 +2401,-0.809632,-0.000000,0.586938,-0.000000 +2402,-0.810246,-0.000000,0.586090,-0.000000 +2403,-0.810860,-0.000000,0.585241,-0.000000 +2404,-0.811472,-0.000000,0.584391,-0.000000 +2405,-0.812084,-0.000000,0.583541,-0.000000 +2406,-0.812694,-0.000000,0.582690,-0.000000 +2407,-0.813304,-0.000000,0.581839,-0.000000 +2408,-0.813913,-0.000000,0.580987,-0.000000 +2409,-0.814521,-0.000000,0.580134,-0.000000 +2410,-0.815128,-0.000000,0.579281,-0.000000 +2411,-0.815734,-0.000000,0.578427,-0.000000 +2412,-0.816339,-0.000000,0.577573,-0.000000 +2413,-0.816944,-0.000000,0.576718,-0.000000 +2414,-0.817547,-0.000000,0.575862,-0.000000 +2415,-0.818150,-0.000000,0.575005,-0.000000 +2416,-0.818751,-0.000000,0.574148,-0.000000 +2417,-0.819352,-0.000000,0.573290,-0.000000 +2418,-0.819952,-0.000000,0.572432,-0.000000 +2419,-0.820551,-0.000000,0.571573,-0.000000 +2420,-0.821149,-0.000000,0.570714,-0.000000 +2421,-0.821746,-0.000000,0.569853,-0.000000 +2422,-0.822343,-0.000000,0.568993,-0.000000 +2423,-0.822938,-0.000000,0.568131,-0.000000 +2424,-0.823533,-0.000000,0.567269,-0.000000 +2425,-0.824126,-0.000000,0.566406,-0.000000 +2426,-0.824719,-0.000000,0.565543,-0.000000 +2427,-0.825311,-0.000000,0.564679,-0.000000 +2428,-0.825902,-0.000000,0.563814,-0.000000 +2429,-0.826492,-0.000000,0.562949,-0.000000 +2430,-0.827081,-0.000000,0.562083,-0.000000 +2431,-0.827669,-0.000000,0.561217,-0.000000 +2432,-0.828256,-0.000000,0.560350,-0.000000 +2433,-0.828842,-0.000000,0.559482,-0.000000 +2434,-0.829428,-0.000000,0.558614,-0.000000 +2435,-0.830012,-0.000000,0.557745,-0.000000 +2436,-0.830596,-0.000000,0.556876,-0.000000 +2437,-0.831179,-0.000000,0.556006,-0.000000 +2438,-0.831760,-0.000000,0.555135,-0.000000 +2439,-0.832341,-0.000000,0.554263,-0.000000 +2440,-0.832921,-0.000000,0.553392,-0.000000 +2441,-0.833500,-0.000000,0.552519,-0.000000 +2442,-0.834078,-0.000000,0.551646,-0.000000 +2443,-0.834656,-0.000000,0.550772,-0.000000 +2444,-0.835232,-0.000000,0.549898,-0.000000 +2445,-0.835807,-0.000000,0.549023,-0.000000 +2446,-0.836382,-0.000000,0.548147,-0.000000 +2447,-0.836955,-0.000000,0.547271,-0.000000 +2448,-0.837528,-0.000000,0.546394,-0.000000 +2449,-0.838100,-0.000000,0.545517,-0.000000 +2450,-0.838671,-0.000000,0.544639,-0.000000 +2451,-0.839240,-0.000000,0.543760,-0.000000 +2452,-0.839809,-0.000000,0.542881,-0.000000 +2453,-0.840377,-0.000000,0.542002,-0.000000 +2454,-0.840945,-0.000000,0.541121,-0.000000 +2455,-0.841511,-0.000000,0.540240,-0.000000 +2456,-0.842076,-0.000000,0.539359,-0.000000 +2457,-0.842640,-0.000000,0.538477,-0.000000 +2458,-0.843204,-0.000000,0.537594,-0.000000 +2459,-0.843766,-0.000000,0.536711,-0.000000 +2460,-0.844328,-0.000000,0.535827,-0.000000 +2461,-0.844889,-0.000000,0.534942,-0.000000 +2462,-0.845448,-0.000000,0.534057,-0.000000 +2463,-0.846007,-0.000000,0.533172,-0.000000 +2464,-0.846565,-0.000000,0.532285,-0.000000 +2465,-0.847122,-0.000000,0.531399,-0.000000 +2466,-0.847678,-0.000000,0.530511,-0.000000 +2467,-0.848233,-0.000000,0.529623,-0.000000 +2468,-0.848787,-0.000000,0.528735,-0.000000 +2469,-0.849340,-0.000000,0.527846,-0.000000 +2470,-0.849893,-0.000000,0.526956,-0.000000 +2471,-0.850444,-0.000000,0.526066,-0.000000 +2472,-0.850994,-0.000000,0.525175,-0.000000 +2473,-0.851544,-0.000000,0.524283,-0.000000 +2474,-0.852093,-0.000000,0.523391,-0.000000 +2475,-0.852640,-0.000000,0.522499,-0.000000 +2476,-0.853187,-0.000000,0.521605,-0.000000 +2477,-0.853733,-0.000000,0.520712,-0.000000 +2478,-0.854277,-0.000000,0.519817,-0.000000 +2479,-0.854821,-0.000000,0.518922,-0.000000 +2480,-0.855364,-0.000000,0.518027,-0.000000 +2481,-0.855906,-0.000000,0.517131,-0.000000 +2482,-0.856447,-0.000000,0.516234,-0.000000 +2483,-0.856987,-0.000000,0.515337,-0.000000 +2484,-0.857527,-0.000000,0.514440,-0.000000 +2485,-0.858065,-0.000000,0.513541,-0.000000 +2486,-0.858602,-0.000000,0.512642,-0.000000 +2487,-0.859139,-0.000000,0.511743,-0.000000 +2488,-0.859674,-0.000000,0.510843,-0.000000 +2489,-0.860208,-0.000000,0.509943,-0.000000 +2490,-0.860742,-0.000000,0.509041,-0.000000 +2491,-0.861275,-0.000000,0.508140,-0.000000 +2492,-0.861806,-0.000000,0.507238,-0.000000 +2493,-0.862337,-0.000000,0.506335,-0.000000 +2494,-0.862867,-0.000000,0.505431,-0.000000 +2495,-0.863396,-0.000000,0.504528,-0.000000 +2496,-0.863923,-0.000000,0.503623,-0.000000 +2497,-0.864450,-0.000000,0.502718,-0.000000 +2498,-0.864976,-0.000000,0.501813,-0.000000 +2499,-0.865501,-0.000000,0.500907,-0.000000 +2500,-0.866025,-0.000000,0.500000,-0.000000 +2501,-0.866549,-0.000000,0.499093,-0.000000 +2502,-0.867071,-0.000000,0.498185,-0.000000 +2503,-0.867592,-0.000000,0.497277,-0.000000 +2504,-0.868112,-0.000000,0.496368,-0.000000 +2505,-0.868632,-0.000000,0.495459,-0.000000 +2506,-0.869150,-0.000000,0.494549,-0.000000 +2507,-0.869667,-0.000000,0.493638,-0.000000 +2508,-0.870184,-0.000000,0.492727,-0.000000 +2509,-0.870699,-0.000000,0.491816,-0.000000 +2510,-0.871214,-0.000000,0.490904,-0.000000 +2511,-0.871727,-0.000000,0.489991,-0.000000 +2512,-0.872240,-0.000000,0.489078,-0.000000 +2513,-0.872752,-0.000000,0.488164,-0.000000 +2514,-0.873262,-0.000000,0.487250,-0.000000 +2515,-0.873772,-0.000000,0.486335,-0.000000 +2516,-0.874281,-0.000000,0.485420,-0.000000 +2517,-0.874789,-0.000000,0.484504,-0.000000 +2518,-0.875296,-0.000000,0.483588,-0.000000 +2519,-0.875802,-0.000000,0.482671,-0.000000 +2520,-0.876307,-0.000000,0.481754,-0.000000 +2521,-0.876811,-0.000000,0.480836,-0.000000 +2522,-0.877314,-0.000000,0.479917,-0.000000 +2523,-0.877816,-0.000000,0.478998,-0.000000 +2524,-0.878317,-0.000000,0.478079,-0.000000 +2525,-0.878817,-0.000000,0.477159,-0.000000 +2526,-0.879316,-0.000000,0.476238,-0.000000 +2527,-0.879815,-0.000000,0.475317,-0.000000 +2528,-0.880312,-0.000000,0.474396,-0.000000 +2529,-0.880808,-0.000000,0.473473,-0.000000 +2530,-0.881303,-0.000000,0.472551,-0.000000 +2531,-0.881798,-0.000000,0.471628,-0.000000 +2532,-0.882291,-0.000000,0.470704,-0.000000 +2533,-0.882784,-0.000000,0.469780,-0.000000 +2534,-0.883275,-0.000000,0.468855,-0.000000 +2535,-0.883766,-0.000000,0.467930,-0.000000 +2536,-0.884255,-0.000000,0.467004,-0.000000 +2537,-0.884744,-0.000000,0.466078,-0.000000 +2538,-0.885231,-0.000000,0.465151,-0.000000 +2539,-0.885718,-0.000000,0.464224,-0.000000 +2540,-0.886204,-0.000000,0.463296,-0.000000 +2541,-0.886688,-0.000000,0.462368,-0.000000 +2542,-0.887172,-0.000000,0.461439,-0.000000 +2543,-0.887655,-0.000000,0.460510,-0.000000 +2544,-0.888136,-0.000000,0.459580,-0.000000 +2545,-0.888617,-0.000000,0.458650,-0.000000 +2546,-0.889097,-0.000000,0.457719,-0.000000 +2547,-0.889576,-0.000000,0.456787,-0.000000 +2548,-0.890054,-0.000000,0.455856,-0.000000 +2549,-0.890531,-0.000000,0.454923,-0.000000 +2550,-0.891007,-0.000000,0.453990,-0.000000 +2551,-0.891481,-0.000000,0.453057,-0.000000 +2552,-0.891955,-0.000000,0.452123,-0.000000 +2553,-0.892428,-0.000000,0.451189,-0.000000 +2554,-0.892900,-0.000000,0.450254,-0.000000 +2555,-0.893371,-0.000000,0.449319,-0.000000 +2556,-0.893841,-0.000000,0.448383,-0.000000 +2557,-0.894310,-0.000000,0.447447,-0.000000 +2558,-0.894779,-0.000000,0.446510,-0.000000 +2559,-0.895246,-0.000000,0.445573,-0.000000 +2560,-0.895712,-0.000000,0.444635,-0.000000 +2561,-0.896177,-0.000000,0.443697,-0.000000 +2562,-0.896641,-0.000000,0.442758,-0.000000 +2563,-0.897104,-0.000000,0.441819,-0.000000 +2564,-0.897566,-0.000000,0.440879,-0.000000 +2565,-0.898028,-0.000000,0.439939,-0.000000 +2566,-0.898488,-0.000000,0.438999,-0.000000 +2567,-0.898947,-0.000000,0.438057,-0.000000 +2568,-0.899405,-0.000000,0.437116,-0.000000 +2569,-0.899863,-0.000000,0.436174,-0.000000 +2570,-0.900319,-0.000000,0.435231,-0.000000 +2571,-0.900774,-0.000000,0.434288,-0.000000 +2572,-0.901228,-0.000000,0.433345,-0.000000 +2573,-0.901682,-0.000000,0.432401,-0.000000 +2574,-0.902134,-0.000000,0.431456,-0.000000 +2575,-0.902585,-0.000000,0.430511,-0.000000 +2576,-0.903036,-0.000000,0.429566,-0.000000 +2577,-0.903485,-0.000000,0.428620,-0.000000 +2578,-0.903933,-0.000000,0.427673,-0.000000 +2579,-0.904381,-0.000000,0.426727,-0.000000 +2580,-0.904827,-0.000000,0.425779,-0.000000 +2581,-0.905272,-0.000000,0.424832,-0.000000 +2582,-0.905717,-0.000000,0.423883,-0.000000 +2583,-0.906160,-0.000000,0.422935,-0.000000 +2584,-0.906603,-0.000000,0.421985,-0.000000 +2585,-0.907044,-0.000000,0.421036,-0.000000 +2586,-0.907484,-0.000000,0.420086,-0.000000 +2587,-0.907924,-0.000000,0.419135,-0.000000 +2588,-0.908362,-0.000000,0.418184,-0.000000 +2589,-0.908800,-0.000000,0.417233,-0.000000 +2590,-0.909236,-0.000000,0.416281,-0.000000 +2591,-0.909672,-0.000000,0.415328,-0.000000 +2592,-0.910106,-0.000000,0.414376,-0.000000 +2593,-0.910539,-0.000000,0.413422,-0.000000 +2594,-0.910972,-0.000000,0.412469,-0.000000 +2595,-0.911403,-0.000000,0.411514,-0.000000 +2596,-0.911834,-0.000000,0.410560,-0.000000 +2597,-0.912263,-0.000000,0.409605,-0.000000 +2598,-0.912692,-0.000000,0.408649,-0.000000 +2599,-0.913119,-0.000000,0.407693,-0.000000 +2600,-0.913545,-0.000000,0.406737,-0.000000 +2601,-0.913971,-0.000000,0.405780,-0.000000 +2602,-0.914395,-0.000000,0.404822,-0.000000 +2603,-0.914819,-0.000000,0.403865,-0.000000 +2604,-0.915241,-0.000000,0.402906,-0.000000 +2605,-0.915663,-0.000000,0.401948,-0.000000 +2606,-0.916083,-0.000000,0.400989,-0.000000 +2607,-0.916502,-0.000000,0.400029,-0.000000 +2608,-0.916921,-0.000000,0.399069,-0.000000 +2609,-0.917338,-0.000000,0.398109,-0.000000 +2610,-0.917755,-0.000000,0.397148,-0.000000 +2611,-0.918170,-0.000000,0.396187,-0.000000 +2612,-0.918584,-0.000000,0.395225,-0.000000 +2613,-0.918998,-0.000000,0.394263,-0.000000 +2614,-0.919410,-0.000000,0.393300,-0.000000 +2615,-0.919821,-0.000000,0.392337,-0.000000 +2616,-0.920232,-0.000000,0.391374,-0.000000 +2617,-0.920641,-0.000000,0.390410,-0.000000 +2618,-0.921050,-0.000000,0.389445,-0.000000 +2619,-0.921457,-0.000000,0.388481,-0.000000 +2620,-0.921863,-0.000000,0.387516,-0.000000 +2621,-0.922268,-0.000000,0.386550,-0.000000 +2622,-0.922673,-0.000000,0.385584,-0.000000 +2623,-0.923076,-0.000000,0.384618,-0.000000 +2624,-0.923478,-0.000000,0.383651,-0.000000 +2625,-0.923880,-0.000000,0.382683,-0.000000 +2626,-0.924280,-0.000000,0.381716,-0.000000 +2627,-0.924679,-0.000000,0.380748,-0.000000 +2628,-0.925077,-0.000000,0.379779,-0.000000 +2629,-0.925474,-0.000000,0.378810,-0.000000 +2630,-0.925871,-0.000000,0.377841,-0.000000 +2631,-0.926266,-0.000000,0.376871,-0.000000 +2632,-0.926660,-0.000000,0.375901,-0.000000 +2633,-0.927053,-0.000000,0.374930,-0.000000 +2634,-0.927445,-0.000000,0.373959,-0.000000 +2635,-0.927836,-0.000000,0.372988,-0.000000 +2636,-0.928226,-0.000000,0.372016,-0.000000 +2637,-0.928615,-0.000000,0.371044,-0.000000 +2638,-0.929003,-0.000000,0.370071,-0.000000 +2639,-0.929390,-0.000000,0.369098,-0.000000 +2640,-0.929776,-0.000000,0.368125,-0.000000 +2641,-0.930161,-0.000000,0.367151,-0.000000 +2642,-0.930545,-0.000000,0.366176,-0.000000 +2643,-0.930928,-0.000000,0.365202,-0.000000 +2644,-0.931310,-0.000000,0.364227,-0.000000 +2645,-0.931691,-0.000000,0.363251,-0.000000 +2646,-0.932071,-0.000000,0.362275,-0.000000 +2647,-0.932450,-0.000000,0.361299,-0.000000 +2648,-0.932828,-0.000000,0.360322,-0.000000 +2649,-0.933205,-0.000000,0.359345,-0.000000 +2650,-0.933580,-0.000000,0.358368,-0.000000 +2651,-0.933955,-0.000000,0.357390,-0.000000 +2652,-0.934329,-0.000000,0.356412,-0.000000 +2653,-0.934702,-0.000000,0.355433,-0.000000 +2654,-0.935073,-0.000000,0.354454,-0.000000 +2655,-0.935444,-0.000000,0.353475,-0.000000 +2656,-0.935814,-0.000000,0.352495,-0.000000 +2657,-0.936182,-0.000000,0.351515,-0.000000 +2658,-0.936550,-0.000000,0.350534,-0.000000 +2659,-0.936916,-0.000000,0.349553,-0.000000 +2660,-0.937282,-0.000000,0.348572,-0.000000 +2661,-0.937646,-0.000000,0.347590,-0.000000 +2662,-0.938010,-0.000000,0.346608,-0.000000 +2663,-0.938372,-0.000000,0.345626,-0.000000 +2664,-0.938734,-0.000000,0.344643,-0.000000 +2665,-0.939094,-0.000000,0.343660,-0.000000 +2666,-0.939454,-0.000000,0.342676,-0.000000 +2667,-0.939812,-0.000000,0.341692,-0.000000 +2668,-0.940169,-0.000000,0.340708,-0.000000 +2669,-0.940526,-0.000000,0.339723,-0.000000 +2670,-0.940881,-0.000000,0.338738,-0.000000 +2671,-0.941235,-0.000000,0.337752,-0.000000 +2672,-0.941588,-0.000000,0.336767,-0.000000 +2673,-0.941940,-0.000000,0.335780,-0.000000 +2674,-0.942291,-0.000000,0.334794,-0.000000 +2675,-0.942641,-0.000000,0.333807,-0.000000 +2676,-0.942991,-0.000000,0.332820,-0.000000 +2677,-0.943339,-0.000000,0.331832,-0.000000 +2678,-0.943686,-0.000000,0.330844,-0.000000 +2679,-0.944031,-0.000000,0.329855,-0.000000 +2680,-0.944376,-0.000000,0.328867,-0.000000 +2681,-0.944720,-0.000000,0.327878,-0.000000 +2682,-0.945063,-0.000000,0.326888,-0.000000 +2683,-0.945405,-0.000000,0.325898,-0.000000 +2684,-0.945746,-0.000000,0.324908,-0.000000 +2685,-0.946085,-0.000000,0.323917,-0.000000 +2686,-0.946424,-0.000000,0.322927,-0.000000 +2687,-0.946762,-0.000000,0.321935,-0.000000 +2688,-0.947098,-0.000000,0.320944,-0.000000 +2689,-0.947434,-0.000000,0.319952,-0.000000 +2690,-0.947768,-0.000000,0.318959,-0.000000 +2691,-0.948102,-0.000000,0.317967,-0.000000 +2692,-0.948434,-0.000000,0.316974,-0.000000 +2693,-0.948766,-0.000000,0.315980,-0.000000 +2694,-0.949096,-0.000000,0.314987,-0.000000 +2695,-0.949425,-0.000000,0.313992,-0.000000 +2696,-0.949754,-0.000000,0.312998,-0.000000 +2697,-0.950081,-0.000000,0.312003,-0.000000 +2698,-0.950407,-0.000000,0.311008,-0.000000 +2699,-0.950732,-0.000000,0.310013,-0.000000 +2700,-0.951057,-0.000000,0.309017,-0.000000 +2701,-0.951380,-0.000000,0.308021,-0.000000 +2702,-0.951702,-0.000000,0.307024,-0.000000 +2703,-0.952023,-0.000000,0.306028,-0.000000 +2704,-0.952343,-0.000000,0.305031,-0.000000 +2705,-0.952661,-0.000000,0.304033,-0.000000 +2706,-0.952979,-0.000000,0.303035,-0.000000 +2707,-0.953296,-0.000000,0.302037,-0.000000 +2708,-0.953612,-0.000000,0.301039,-0.000000 +2709,-0.953927,-0.000000,0.300040,-0.000000 +2710,-0.954240,-0.000000,0.299041,-0.000000 +2711,-0.954553,-0.000000,0.298041,-0.000000 +2712,-0.954865,-0.000000,0.297042,-0.000000 +2713,-0.955175,-0.000000,0.296041,-0.000000 +2714,-0.955485,-0.000000,0.295041,-0.000000 +2715,-0.955793,-0.000000,0.294040,-0.000000 +2716,-0.956100,-0.000000,0.293039,-0.000000 +2717,-0.956407,-0.000000,0.292038,-0.000000 +2718,-0.956712,-0.000000,0.291036,-0.000000 +2719,-0.957016,-0.000000,0.290034,-0.000000 +2720,-0.957319,-0.000000,0.289032,-0.000000 +2721,-0.957622,-0.000000,0.288029,-0.000000 +2722,-0.957923,-0.000000,0.287026,-0.000000 +2723,-0.958223,-0.000000,0.286023,-0.000000 +2724,-0.958522,-0.000000,0.285019,-0.000000 +2725,-0.958820,-0.000000,0.284015,-0.000000 +2726,-0.959117,-0.000000,0.283011,-0.000000 +2727,-0.959412,-0.000000,0.282007,-0.000000 +2728,-0.959707,-0.000000,0.281002,-0.000000 +2729,-0.960001,-0.000000,0.279997,-0.000000 +2730,-0.960294,-0.000000,0.278991,-0.000000 +2731,-0.960585,-0.000000,0.277985,-0.000000 +2732,-0.960876,-0.000000,0.276979,-0.000000 +2733,-0.961165,-0.000000,0.275973,-0.000000 +2734,-0.961454,-0.000000,0.274966,-0.000000 +2735,-0.961741,-0.000000,0.273959,-0.000000 +2736,-0.962028,-0.000000,0.272952,-0.000000 +2737,-0.962313,-0.000000,0.271944,-0.000000 +2738,-0.962597,-0.000000,0.270936,-0.000000 +2739,-0.962880,-0.000000,0.269928,-0.000000 +2740,-0.963163,-0.000000,0.268920,-0.000000 +2741,-0.963444,-0.000000,0.267911,-0.000000 +2742,-0.963724,-0.000000,0.266902,-0.000000 +2743,-0.964003,-0.000000,0.265893,-0.000000 +2744,-0.964281,-0.000000,0.264883,-0.000000 +2745,-0.964557,-0.000000,0.263873,-0.000000 +2746,-0.964833,-0.000000,0.262863,-0.000000 +2747,-0.965108,-0.000000,0.261852,-0.000000 +2748,-0.965382,-0.000000,0.260842,-0.000000 +2749,-0.965654,-0.000000,0.259830,-0.000000 +2750,-0.965926,-0.000000,0.258819,-0.000000 +2751,-0.966196,-0.000000,0.257807,-0.000000 +2752,-0.966466,-0.000000,0.256795,-0.000000 +2753,-0.966734,-0.000000,0.255783,-0.000000 +2754,-0.967001,-0.000000,0.254771,-0.000000 +2755,-0.967268,-0.000000,0.253758,-0.000000 +2756,-0.967533,-0.000000,0.252745,-0.000000 +2757,-0.967797,-0.000000,0.251732,-0.000000 +2758,-0.968060,-0.000000,0.250718,-0.000000 +2759,-0.968322,-0.000000,0.249704,-0.000000 +2760,-0.968583,-0.000000,0.248690,-0.000000 +2761,-0.968843,-0.000000,0.247675,-0.000000 +2762,-0.969102,-0.000000,0.246661,-0.000000 +2763,-0.969360,-0.000000,0.245646,-0.000000 +2764,-0.969616,-0.000000,0.244631,-0.000000 +2765,-0.969872,-0.000000,0.243615,-0.000000 +2766,-0.970127,-0.000000,0.242599,-0.000000 +2767,-0.970380,-0.000000,0.241583,-0.000000 +2768,-0.970633,-0.000000,0.240567,-0.000000 +2769,-0.970884,-0.000000,0.239550,-0.000000 +2770,-0.971134,-0.000000,0.238533,-0.000000 +2771,-0.971384,-0.000000,0.237516,-0.000000 +2772,-0.971632,-0.000000,0.236499,-0.000000 +2773,-0.971879,-0.000000,0.235481,-0.000000 +2774,-0.972125,-0.000000,0.234463,-0.000000 +2775,-0.972370,-0.000000,0.233445,-0.000000 +2776,-0.972614,-0.000000,0.232427,-0.000000 +2777,-0.972857,-0.000000,0.231408,-0.000000 +2778,-0.973099,-0.000000,0.230389,-0.000000 +2779,-0.973339,-0.000000,0.229370,-0.000000 +2780,-0.973579,-0.000000,0.228351,-0.000000 +2781,-0.973817,-0.000000,0.227331,-0.000000 +2782,-0.974055,-0.000000,0.226311,-0.000000 +2783,-0.974291,-0.000000,0.225291,-0.000000 +2784,-0.974527,-0.000000,0.224271,-0.000000 +2785,-0.974761,-0.000000,0.223250,-0.000000 +2786,-0.974994,-0.000000,0.222229,-0.000000 +2787,-0.975227,-0.000000,0.221208,-0.000000 +2788,-0.975458,-0.000000,0.220187,-0.000000 +2789,-0.975688,-0.000000,0.219165,-0.000000 +2790,-0.975917,-0.000000,0.218143,-0.000000 +2791,-0.976145,-0.000000,0.217121,-0.000000 +2792,-0.976371,-0.000000,0.216099,-0.000000 +2793,-0.976597,-0.000000,0.215076,-0.000000 +2794,-0.976822,-0.000000,0.214053,-0.000000 +2795,-0.977046,-0.000000,0.213030,-0.000000 +2796,-0.977268,-0.000000,0.212007,-0.000000 +2797,-0.977490,-0.000000,0.210984,-0.000000 +2798,-0.977710,-0.000000,0.209960,-0.000000 +2799,-0.977929,-0.000000,0.208936,-0.000000 +2800,-0.978148,-0.000000,0.207912,-0.000000 +2801,-0.978365,-0.000000,0.206887,-0.000000 +2802,-0.978581,-0.000000,0.205863,-0.000000 +2803,-0.978796,-0.000000,0.204838,-0.000000 +2804,-0.979010,-0.000000,0.203813,-0.000000 +2805,-0.979223,-0.000000,0.202787,-0.000000 +2806,-0.979435,-0.000000,0.201762,-0.000000 +2807,-0.979645,-0.000000,0.200736,-0.000000 +2808,-0.979855,-0.000000,0.199710,-0.000000 +2809,-0.980064,-0.000000,0.198684,-0.000000 +2810,-0.980271,-0.000000,0.197657,-0.000000 +2811,-0.980478,-0.000000,0.196631,-0.000000 +2812,-0.980683,-0.000000,0.195604,-0.000000 +2813,-0.980887,-0.000000,0.194577,-0.000000 +2814,-0.981091,-0.000000,0.193549,-0.000000 +2815,-0.981293,-0.000000,0.192522,-0.000000 +2816,-0.981494,-0.000000,0.191494,-0.000000 +2817,-0.981694,-0.000000,0.190466,-0.000000 +2818,-0.981893,-0.000000,0.189438,-0.000000 +2819,-0.982090,-0.000000,0.188410,-0.000000 +2820,-0.982287,-0.000000,0.187381,-0.000000 +2821,-0.982483,-0.000000,0.186353,-0.000000 +2822,-0.982678,-0.000000,0.185324,-0.000000 +2823,-0.982871,-0.000000,0.184294,-0.000000 +2824,-0.983064,-0.000000,0.183265,-0.000000 +2825,-0.983255,-0.000000,0.182236,-0.000000 +2826,-0.983445,-0.000000,0.181206,-0.000000 +2827,-0.983634,-0.000000,0.180176,-0.000000 +2828,-0.983823,-0.000000,0.179146,-0.000000 +2829,-0.984010,-0.000000,0.178115,-0.000000 +2830,-0.984196,-0.000000,0.177085,-0.000000 +2831,-0.984381,-0.000000,0.176054,-0.000000 +2832,-0.984564,-0.000000,0.175023,-0.000000 +2833,-0.984747,-0.000000,0.173992,-0.000000 +2834,-0.984929,-0.000000,0.172961,-0.000000 +2835,-0.985109,-0.000000,0.171929,-0.000000 +2836,-0.985289,-0.000000,0.170897,-0.000000 +2837,-0.985467,-0.000000,0.169866,-0.000000 +2838,-0.985645,-0.000000,0.168833,-0.000000 +2839,-0.985821,-0.000000,0.167801,-0.000000 +2840,-0.985996,-0.000000,0.166769,-0.000000 +2841,-0.986170,-0.000000,0.165736,-0.000000 +2842,-0.986343,-0.000000,0.164703,-0.000000 +2843,-0.986515,-0.000000,0.163670,-0.000000 +2844,-0.986686,-0.000000,0.162637,-0.000000 +2845,-0.986856,-0.000000,0.161604,-0.000000 +2846,-0.987024,-0.000000,0.160570,-0.000000 +2847,-0.987192,-0.000000,0.159537,-0.000000 +2848,-0.987359,-0.000000,0.158503,-0.000000 +2849,-0.987524,-0.000000,0.157469,-0.000000 +2850,-0.987688,-0.000000,0.156434,-0.000000 +2851,-0.987852,-0.000000,0.155400,-0.000000 +2852,-0.988014,-0.000000,0.154366,-0.000000 +2853,-0.988175,-0.000000,0.153331,-0.000000 +2854,-0.988335,-0.000000,0.152296,-0.000000 +2855,-0.988494,-0.000000,0.151261,-0.000000 +2856,-0.988652,-0.000000,0.150226,-0.000000 +2857,-0.988809,-0.000000,0.149190,-0.000000 +2858,-0.988964,-0.000000,0.148155,-0.000000 +2859,-0.989119,-0.000000,0.147119,-0.000000 +2860,-0.989272,-0.000000,0.146083,-0.000000 +2861,-0.989425,-0.000000,0.145047,-0.000000 +2862,-0.989576,-0.000000,0.144011,-0.000000 +2863,-0.989726,-0.000000,0.142974,-0.000000 +2864,-0.989876,-0.000000,0.141938,-0.000000 +2865,-0.990024,-0.000000,0.140901,-0.000000 +2866,-0.990171,-0.000000,0.139864,-0.000000 +2867,-0.990317,-0.000000,0.138827,-0.000000 +2868,-0.990461,-0.000000,0.137790,-0.000000 +2869,-0.990605,-0.000000,0.136753,-0.000000 +2870,-0.990748,-0.000000,0.135716,-0.000000 +2871,-0.990889,-0.000000,0.134678,-0.000000 +2872,-0.991030,-0.000000,0.133640,-0.000000 +2873,-0.991169,-0.000000,0.132602,-0.000000 +2874,-0.991308,-0.000000,0.131564,-0.000000 +2875,-0.991445,-0.000000,0.130526,-0.000000 +2876,-0.991581,-0.000000,0.129488,-0.000000 +2877,-0.991716,-0.000000,0.128449,-0.000000 +2878,-0.991850,-0.000000,0.127411,-0.000000 +2879,-0.991983,-0.000000,0.126372,-0.000000 +2880,-0.992115,-0.000000,0.125333,-0.000000 +2881,-0.992245,-0.000000,0.124294,-0.000000 +2882,-0.992375,-0.000000,0.123255,-0.000000 +2883,-0.992504,-0.000000,0.122216,-0.000000 +2884,-0.992631,-0.000000,0.121176,-0.000000 +2885,-0.992757,-0.000000,0.120137,-0.000000 +2886,-0.992883,-0.000000,0.119097,-0.000000 +2887,-0.993007,-0.000000,0.118057,-0.000000 +2888,-0.993130,-0.000000,0.117017,-0.000000 +2889,-0.993252,-0.000000,0.115977,-0.000000 +2890,-0.993373,-0.000000,0.114937,-0.000000 +2891,-0.993493,-0.000000,0.113897,-0.000000 +2892,-0.993611,-0.000000,0.112856,-0.000000 +2893,-0.993729,-0.000000,0.111816,-0.000000 +2894,-0.993845,-0.000000,0.110775,-0.000000 +2895,-0.993961,-0.000000,0.109734,-0.000000 +2896,-0.994075,-0.000000,0.108693,-0.000000 +2897,-0.994189,-0.000000,0.107652,-0.000000 +2898,-0.994301,-0.000000,0.106611,-0.000000 +2899,-0.994412,-0.000000,0.105570,-0.000000 +2900,-0.994522,-0.000000,0.104528,-0.000000 +2901,-0.994631,-0.000000,0.103487,-0.000000 +2902,-0.994739,-0.000000,0.102445,-0.000000 +2903,-0.994845,-0.000000,0.101404,-0.000000 +2904,-0.994951,-0.000000,0.100362,-0.000000 +2905,-0.995056,-0.000000,0.099320,-0.000000 +2906,-0.995159,-0.000000,0.098278,-0.000000 +2907,-0.995261,-0.000000,0.097235,-0.000000 +2908,-0.995363,-0.000000,0.096193,-0.000000 +2909,-0.995463,-0.000000,0.095151,-0.000000 +2910,-0.995562,-0.000000,0.094108,-0.000000 +2911,-0.995660,-0.000000,0.093066,-0.000000 +2912,-0.995757,-0.000000,0.092023,-0.000000 +2913,-0.995853,-0.000000,0.090980,-0.000000 +2914,-0.995947,-0.000000,0.089937,-0.000000 +2915,-0.996041,-0.000000,0.088894,-0.000000 +2916,-0.996134,-0.000000,0.087851,-0.000000 +2917,-0.996225,-0.000000,0.086808,-0.000000 +2918,-0.996315,-0.000000,0.085765,-0.000000 +2919,-0.996405,-0.000000,0.084721,-0.000000 +2920,-0.996493,-0.000000,0.083678,-0.000000 +2921,-0.996580,-0.000000,0.082634,-0.000000 +2922,-0.996666,-0.000000,0.081591,-0.000000 +2923,-0.996751,-0.000000,0.080547,-0.000000 +2924,-0.996835,-0.000000,0.079503,-0.000000 +2925,-0.996917,-0.000000,0.078459,-0.000000 +2926,-0.996999,-0.000000,0.077415,-0.000000 +2927,-0.997079,-0.000000,0.076371,-0.000000 +2928,-0.997159,-0.000000,0.075327,-0.000000 +2929,-0.997237,-0.000000,0.074283,-0.000000 +2930,-0.997314,-0.000000,0.073238,-0.000000 +2931,-0.997391,-0.000000,0.072194,-0.000000 +2932,-0.997466,-0.000000,0.071149,-0.000000 +2933,-0.997540,-0.000000,0.070105,-0.000000 +2934,-0.997613,-0.000000,0.069060,-0.000000 +2935,-0.997684,-0.000000,0.068015,-0.000000 +2936,-0.997755,-0.000000,0.066970,-0.000000 +2937,-0.997825,-0.000000,0.065926,-0.000000 +2938,-0.997893,-0.000000,0.064881,-0.000000 +2939,-0.997960,-0.000000,0.063836,-0.000000 +2940,-0.998027,-0.000000,0.062791,-0.000000 +2941,-0.998092,-0.000000,0.061745,-0.000000 +2942,-0.998156,-0.000000,0.060700,-0.000000 +2943,-0.998219,-0.000000,0.059655,-0.000000 +2944,-0.998281,-0.000000,0.058609,-0.000000 +2945,-0.998342,-0.000000,0.057564,-0.000000 +2946,-0.998402,-0.000000,0.056519,-0.000000 +2947,-0.998460,-0.000000,0.055473,-0.000000 +2948,-0.998518,-0.000000,0.054427,-0.000000 +2949,-0.998574,-0.000000,0.053382,-0.000000 +2950,-0.998630,-0.000000,0.052336,-0.000000 +2951,-0.998684,-0.000000,0.051290,-0.000000 +2952,-0.998737,-0.000000,0.050244,-0.000000 +2953,-0.998789,-0.000000,0.049198,-0.000000 +2954,-0.998840,-0.000000,0.048152,-0.000000 +2955,-0.998890,-0.000000,0.047106,-0.000000 +2956,-0.998939,-0.000000,0.046060,-0.000000 +2957,-0.998986,-0.000000,0.045014,-0.000000 +2958,-0.999033,-0.000000,0.043968,-0.000000 +2959,-0.999078,-0.000000,0.042922,-0.000000 +2960,-0.999123,-0.000000,0.041876,-0.000000 +2961,-0.999166,-0.000000,0.040829,-0.000000 +2962,-0.999208,-0.000000,0.039783,-0.000000 +2963,-0.999249,-0.000000,0.038737,-0.000000 +2964,-0.999289,-0.000000,0.037690,-0.000000 +2965,-0.999328,-0.000000,0.036644,-0.000000 +2966,-0.999366,-0.000000,0.035597,-0.000000 +2967,-0.999403,-0.000000,0.034551,-0.000000 +2968,-0.999439,-0.000000,0.033504,-0.000000 +2969,-0.999473,-0.000000,0.032457,-0.000000 +2970,-0.999507,-0.000000,0.031411,-0.000000 +2971,-0.999539,-0.000000,0.030364,-0.000000 +2972,-0.999570,-0.000000,0.029317,-0.000000 +2973,-0.999600,-0.000000,0.028271,-0.000000 +2974,-0.999629,-0.000000,0.027224,-0.000000 +2975,-0.999657,-0.000000,0.026177,-0.000000 +2976,-0.999684,-0.000000,0.025130,-0.000000 +2977,-0.999710,-0.000000,0.024083,-0.000000 +2978,-0.999735,-0.000000,0.023036,-0.000000 +2979,-0.999758,-0.000000,0.021989,-0.000000 +2980,-0.999781,-0.000000,0.020942,-0.000000 +2981,-0.999802,-0.000000,0.019895,-0.000000 +2982,-0.999822,-0.000000,0.018848,-0.000000 +2983,-0.999842,-0.000000,0.017801,-0.000000 +2984,-0.999860,-0.000000,0.016754,-0.000000 +2985,-0.999877,-0.000000,0.015707,-0.000000 +2986,-0.999893,-0.000000,0.014660,-0.000000 +2987,-0.999907,-0.000000,0.013613,-0.000000 +2988,-0.999921,-0.000000,0.012566,-0.000000 +2989,-0.999934,-0.000000,0.011519,-0.000000 +2990,-0.999945,-0.000000,0.010472,-0.000000 +2991,-0.999956,-0.000000,0.009425,-0.000000 +2992,-0.999965,-0.000000,0.008377,-0.000000 +2993,-0.999973,-0.000000,0.007330,-0.000000 +2994,-0.999980,-0.000000,0.006283,-0.000000 +2995,-0.999986,-0.000000,0.005236,-0.000000 +2996,-0.999991,-0.000000,0.004189,-0.000000 +2997,-0.999995,-0.000000,0.003142,-0.000000 +2998,-0.999998,-0.000000,0.002094,-0.000000 +2999,-0.999999,-0.000000,0.001047,-0.000000 diff --git a/scripts/testv/headrot_case02_3000_q.csv b/scripts/testv/headrot_case02_3000_q.csv new file mode 100644 index 0000000000..7fd73e8c76 --- /dev/null +++ b/scripts/testv/headrot_case02_3000_q.csv @@ -0,0 +1,3000 @@ +0,1.000000,0.000000,0.000000,0.000000 +1,1.000000,-0.000000,0.000349,0.000916 +2,0.999998,-0.000001,0.000698,0.001833 +3,0.999996,-0.000003,0.001047,0.002749 +4,0.999992,-0.000005,0.001396,0.003665 +5,0.999988,-0.000008,0.001745,0.004581 +6,0.999983,-0.000012,0.002094,0.005498 +7,0.999976,-0.000016,0.002443,0.006414 +8,0.999969,-0.000020,0.002792,0.007330 +9,0.999961,-0.000026,0.003141,0.008247 +10,0.999952,-0.000032,0.003491,0.009163 +11,0.999942,-0.000039,0.003840,0.010079 +12,0.999931,-0.000046,0.004189,0.010995 +13,0.999919,-0.000054,0.004538,0.011911 +14,0.999906,-0.000063,0.004887,0.012828 +15,0.999892,-0.000072,0.005235,0.013744 +16,0.999877,-0.000082,0.005584,0.014660 +17,0.999861,-0.000092,0.005933,0.015576 +18,0.999844,-0.000104,0.006282,0.016492 +19,0.999826,-0.000115,0.006631,0.017408 +20,0.999808,-0.000128,0.006980,0.018324 +21,0.999788,-0.000141,0.007329,0.019241 +22,0.999767,-0.000155,0.007678,0.020157 +23,0.999746,-0.000169,0.008027,0.021073 +24,0.999723,-0.000184,0.008375,0.021989 +25,0.999700,-0.000200,0.008724,0.022905 +26,0.999675,-0.000216,0.009073,0.023821 +27,0.999650,-0.000233,0.009422,0.024736 +28,0.999623,-0.000251,0.009770,0.025652 +29,0.999596,-0.000269,0.010119,0.026568 +30,0.999567,-0.000288,0.010468,0.027484 +31,0.999538,-0.000307,0.010816,0.028400 +32,0.999508,-0.000327,0.011165,0.029316 +33,0.999477,-0.000348,0.011514,0.030231 +34,0.999444,-0.000370,0.011862,0.031147 +35,0.999411,-0.000392,0.012211,0.032063 +36,0.999377,-0.000414,0.012559,0.032978 +37,0.999342,-0.000438,0.012908,0.033894 +38,0.999306,-0.000462,0.013256,0.034809 +39,0.999269,-0.000486,0.013604,0.035725 +40,0.999231,-0.000512,0.013953,0.036640 +41,0.999192,-0.000538,0.014301,0.037556 +42,0.999152,-0.000564,0.014649,0.038471 +43,0.999111,-0.000591,0.014998,0.039386 +44,0.999070,-0.000619,0.015346,0.040301 +45,0.999027,-0.000647,0.015694,0.041217 +46,0.998983,-0.000677,0.016042,0.042132 +47,0.998938,-0.000706,0.016390,0.043047 +48,0.998893,-0.000737,0.016738,0.043962 +49,0.998846,-0.000768,0.017086,0.044877 +50,0.998799,-0.000799,0.017434,0.045792 +51,0.998750,-0.000832,0.017782,0.046707 +52,0.998701,-0.000864,0.018130,0.047622 +53,0.998650,-0.000898,0.018478,0.048536 +54,0.998599,-0.000932,0.018825,0.049451 +55,0.998546,-0.000967,0.019173,0.050366 +56,0.998493,-0.001003,0.019521,0.051280 +57,0.998439,-0.001039,0.019868,0.052195 +58,0.998383,-0.001075,0.020216,0.053109 +59,0.998327,-0.001113,0.020563,0.054024 +60,0.998270,-0.001151,0.020911,0.054938 +61,0.998212,-0.001189,0.021258,0.055852 +62,0.998153,-0.001229,0.021605,0.056767 +63,0.998093,-0.001269,0.021953,0.057681 +64,0.998032,-0.001309,0.022300,0.058595 +65,0.997970,-0.001350,0.022647,0.059509 +66,0.997907,-0.001392,0.022994,0.060423 +67,0.997843,-0.001435,0.023341,0.061337 +68,0.997778,-0.001478,0.023688,0.062250 +69,0.997713,-0.001522,0.024035,0.063164 +70,0.997646,-0.001566,0.024382,0.064078 +71,0.997578,-0.001611,0.024729,0.064991 +72,0.997509,-0.001657,0.025075,0.065905 +73,0.997440,-0.001703,0.025422,0.066818 +74,0.997369,-0.001750,0.025769,0.067731 +75,0.997298,-0.001798,0.026115,0.068645 +76,0.997225,-0.001846,0.026462,0.069558 +77,0.997152,-0.001895,0.026808,0.070471 +78,0.997077,-0.001944,0.027154,0.071384 +79,0.997002,-0.001994,0.027500,0.072297 +80,0.996926,-0.002045,0.027847,0.073210 +81,0.996848,-0.002096,0.028193,0.074122 +82,0.996770,-0.002148,0.028539,0.075035 +83,0.996691,-0.002201,0.028885,0.075948 +84,0.996611,-0.002254,0.029231,0.076860 +85,0.996530,-0.002308,0.029576,0.077772 +86,0.996448,-0.002363,0.029922,0.078685 +87,0.996365,-0.002418,0.030268,0.079597 +88,0.996281,-0.002474,0.030613,0.080509 +89,0.996196,-0.002530,0.030959,0.081421 +90,0.996110,-0.002587,0.031304,0.082333 +91,0.996023,-0.002645,0.031649,0.083244 +92,0.995935,-0.002704,0.031995,0.084156 +93,0.995846,-0.002763,0.032340,0.085068 +94,0.995757,-0.002822,0.032685,0.085979 +95,0.995666,-0.002882,0.033030,0.086891 +96,0.995574,-0.002943,0.033375,0.087802 +97,0.995482,-0.003005,0.033719,0.088713 +98,0.995388,-0.003067,0.034064,0.089624 +99,0.995294,-0.003130,0.034409,0.090535 +100,0.995198,-0.003193,0.034753,0.091446 +101,0.995102,-0.003257,0.035098,0.092357 +102,0.995005,-0.003322,0.035442,0.093267 +103,0.994906,-0.003388,0.035786,0.094178 +104,0.994807,-0.003453,0.036130,0.095088 +105,0.994707,-0.003520,0.036474,0.095998 +106,0.994606,-0.003587,0.036818,0.096909 +107,0.994503,-0.003655,0.037162,0.097819 +108,0.994400,-0.003724,0.037506,0.098729 +109,0.994296,-0.003793,0.037849,0.099638 +110,0.994191,-0.003863,0.038193,0.100548 +111,0.994085,-0.003933,0.038536,0.101458 +112,0.993979,-0.004004,0.038880,0.102367 +113,0.993871,-0.004076,0.039223,0.103276 +114,0.993762,-0.004148,0.039566,0.104186 +115,0.993652,-0.004221,0.039909,0.105095 +116,0.993541,-0.004295,0.040252,0.106004 +117,0.993430,-0.004369,0.040595,0.106912 +118,0.993317,-0.004444,0.040938,0.107821 +119,0.993204,-0.004519,0.041280,0.108730 +120,0.993089,-0.004595,0.041623,0.109638 +121,0.992974,-0.004672,0.041965,0.110546 +122,0.992857,-0.004749,0.042307,0.111455 +123,0.992740,-0.004827,0.042650,0.112363 +124,0.992622,-0.004906,0.042992,0.113270 +125,0.992502,-0.004985,0.043334,0.114178 +126,0.992382,-0.005065,0.043675,0.115086 +127,0.992261,-0.005146,0.044017,0.115993 +128,0.992139,-0.005227,0.044359,0.116901 +129,0.992016,-0.005308,0.044700,0.117808 +130,0.991892,-0.005391,0.045042,0.118715 +131,0.991767,-0.005474,0.045383,0.119622 +132,0.991641,-0.005557,0.045724,0.120529 +133,0.991514,-0.005642,0.046065,0.121435 +134,0.991386,-0.005727,0.046406,0.122342 +135,0.991257,-0.005812,0.046747,0.123248 +136,0.991128,-0.005898,0.047087,0.124154 +137,0.990997,-0.005985,0.047428,0.125060 +138,0.990865,-0.006073,0.047768,0.125966 +139,0.990733,-0.006161,0.048108,0.126872 +140,0.990599,-0.006249,0.048448,0.127777 +141,0.990465,-0.006339,0.048788,0.128683 +142,0.990329,-0.006429,0.049128,0.129588 +143,0.990193,-0.006519,0.049468,0.130493 +144,0.990056,-0.006610,0.049808,0.131398 +145,0.989917,-0.006702,0.050147,0.132303 +146,0.989778,-0.006795,0.050486,0.133208 +147,0.989638,-0.006888,0.050826,0.134112 +148,0.989497,-0.006981,0.051165,0.135016 +149,0.989355,-0.007076,0.051504,0.135921 +150,0.989212,-0.007171,0.051842,0.136825 +151,0.989068,-0.007266,0.052181,0.137728 +152,0.988923,-0.007362,0.052520,0.138632 +153,0.988777,-0.007459,0.052858,0.139536 +154,0.988630,-0.007557,0.053196,0.140439 +155,0.988483,-0.007655,0.053534,0.141342 +156,0.988334,-0.007754,0.053872,0.142245 +157,0.988184,-0.007853,0.054210,0.143148 +158,0.988034,-0.007953,0.054548,0.144050 +159,0.987882,-0.008053,0.054885,0.144953 +160,0.987730,-0.008155,0.055223,0.145855 +161,0.987576,-0.008256,0.055560,0.146757 +162,0.987422,-0.008359,0.055897,0.147659 +163,0.987267,-0.008462,0.056234,0.148561 +164,0.987111,-0.008566,0.056571,0.149463 +165,0.986953,-0.008670,0.056907,0.150364 +166,0.986795,-0.008775,0.057244,0.151265 +167,0.986636,-0.008880,0.057580,0.152166 +168,0.986476,-0.008987,0.057916,0.153067 +169,0.986315,-0.009093,0.058252,0.153968 +170,0.986153,-0.009201,0.058588,0.154868 +171,0.985991,-0.009309,0.058924,0.155769 +172,0.985827,-0.009418,0.059260,0.156669 +173,0.985662,-0.009527,0.059595,0.157569 +174,0.985496,-0.009637,0.059930,0.158468 +175,0.985330,-0.009747,0.060265,0.159368 +176,0.985162,-0.009859,0.060600,0.160267 +177,0.984994,-0.009970,0.060935,0.161167 +178,0.984824,-0.010083,0.061270,0.162066 +179,0.984654,-0.010196,0.061604,0.162964 +180,0.984483,-0.010309,0.061938,0.163863 +181,0.984311,-0.010424,0.062273,0.164761 +182,0.984137,-0.010539,0.062606,0.165659 +183,0.983963,-0.010654,0.062940,0.166557 +184,0.983788,-0.010770,0.063274,0.167455 +185,0.983612,-0.010887,0.063607,0.168353 +186,0.983435,-0.011004,0.063941,0.169250 +187,0.983257,-0.011122,0.064274,0.170147 +188,0.983079,-0.011241,0.064607,0.171044 +189,0.982899,-0.011360,0.064939,0.171941 +190,0.982718,-0.011480,0.065272,0.172838 +191,0.982537,-0.011600,0.065604,0.173734 +192,0.982354,-0.011721,0.065937,0.174630 +193,0.982170,-0.011843,0.066269,0.175526 +194,0.981986,-0.011965,0.066601,0.176422 +195,0.981801,-0.012088,0.066932,0.177317 +196,0.981614,-0.012212,0.067264,0.178213 +197,0.981427,-0.012336,0.067595,0.179108 +198,0.981239,-0.012461,0.067927,0.180003 +199,0.981050,-0.012586,0.068258,0.180897 +200,0.980860,-0.012712,0.068588,0.181792 +201,0.980669,-0.012839,0.068919,0.182686 +202,0.980477,-0.012966,0.069250,0.183580 +203,0.980284,-0.013094,0.069580,0.184474 +204,0.980090,-0.013222,0.069910,0.185367 +205,0.979895,-0.013351,0.070240,0.186260 +206,0.979700,-0.013481,0.070570,0.187154 +207,0.979503,-0.013611,0.070899,0.188046 +208,0.979306,-0.013742,0.071228,0.188939 +209,0.979107,-0.013874,0.071558,0.189832 +210,0.978908,-0.014006,0.071887,0.190724 +211,0.978708,-0.014139,0.072215,0.191616 +212,0.978506,-0.014272,0.072544,0.192507 +213,0.978304,-0.014406,0.072872,0.193399 +214,0.978101,-0.014541,0.073200,0.194290 +215,0.977897,-0.014676,0.073528,0.195181 +216,0.977692,-0.014812,0.073856,0.196072 +217,0.977486,-0.014948,0.074184,0.196963 +218,0.977279,-0.015085,0.074511,0.197853 +219,0.977071,-0.015223,0.074838,0.198743 +220,0.976863,-0.015361,0.075165,0.199633 +221,0.976653,-0.015500,0.075492,0.200523 +222,0.976443,-0.015639,0.075819,0.201412 +223,0.976231,-0.015779,0.076145,0.202301 +224,0.976019,-0.015920,0.076472,0.203190 +225,0.975805,-0.016061,0.076798,0.204079 +226,0.975591,-0.016203,0.077123,0.204967 +227,0.975376,-0.016346,0.077449,0.205855 +228,0.975160,-0.016489,0.077774,0.206743 +229,0.974943,-0.016633,0.078100,0.207631 +230,0.974725,-0.016777,0.078424,0.208518 +231,0.974506,-0.016922,0.078749,0.209405 +232,0.974286,-0.017067,0.079074,0.210292 +233,0.974065,-0.017214,0.079398,0.211179 +234,0.973844,-0.017360,0.079722,0.212065 +235,0.973621,-0.017508,0.080046,0.212951 +236,0.973397,-0.017656,0.080370,0.213837 +237,0.973173,-0.017804,0.080693,0.214723 +238,0.972948,-0.017954,0.081017,0.215608 +239,0.972721,-0.018103,0.081340,0.216493 +240,0.972494,-0.018254,0.081663,0.217378 +241,0.972266,-0.018405,0.081985,0.218263 +242,0.972037,-0.018556,0.082308,0.219147 +243,0.971807,-0.018709,0.082630,0.220031 +244,0.971576,-0.018861,0.082952,0.220915 +245,0.971344,-0.019015,0.083274,0.221799 +246,0.971111,-0.019169,0.083595,0.222682 +247,0.970878,-0.019323,0.083916,0.223565 +248,0.970643,-0.019479,0.084237,0.224448 +249,0.970408,-0.019635,0.084558,0.225330 +250,0.970171,-0.019791,0.084879,0.226212 +251,0.969934,-0.019948,0.085199,0.227094 +252,0.969695,-0.020106,0.085520,0.227976 +253,0.969456,-0.020264,0.085840,0.228857 +254,0.969216,-0.020423,0.086159,0.229738 +255,0.968975,-0.020582,0.086479,0.230619 +256,0.968733,-0.020742,0.086798,0.231500 +257,0.968490,-0.020903,0.087117,0.232380 +258,0.968246,-0.021064,0.087436,0.233260 +259,0.968002,-0.021226,0.087754,0.234140 +260,0.967756,-0.021388,0.088073,0.235019 +261,0.967510,-0.021551,0.088391,0.235898 +262,0.967262,-0.021715,0.088709,0.236777 +263,0.967014,-0.021879,0.089026,0.237656 +264,0.966764,-0.022044,0.089344,0.238534 +265,0.966514,-0.022210,0.089661,0.239412 +266,0.966263,-0.022376,0.089978,0.240290 +267,0.966011,-0.022542,0.090294,0.241167 +268,0.965758,-0.022709,0.090611,0.242044 +269,0.965504,-0.022877,0.090927,0.242921 +270,0.965249,-0.023046,0.091243,0.243798 +271,0.964994,-0.023215,0.091559,0.244674 +272,0.964737,-0.023384,0.091874,0.245550 +273,0.964480,-0.023554,0.092189,0.246425 +274,0.964221,-0.023725,0.092504,0.247301 +275,0.963962,-0.023897,0.092819,0.248176 +276,0.963702,-0.024069,0.093133,0.249051 +277,0.963440,-0.024241,0.093448,0.249925 +278,0.963178,-0.024414,0.093762,0.250799 +279,0.962915,-0.024588,0.094075,0.251673 +280,0.962651,-0.024762,0.094389,0.252547 +281,0.962387,-0.024937,0.094702,0.253420 +282,0.962121,-0.025113,0.095015,0.254293 +283,0.961854,-0.025289,0.095328,0.255166 +284,0.961587,-0.025466,0.095640,0.256038 +285,0.961318,-0.025643,0.095952,0.256910 +286,0.961049,-0.025821,0.096264,0.257782 +287,0.960779,-0.025999,0.096576,0.258653 +288,0.960507,-0.026179,0.096887,0.259525 +289,0.960235,-0.026358,0.097199,0.260395 +290,0.959962,-0.026538,0.097509,0.261266 +291,0.959688,-0.026719,0.097820,0.262136 +292,0.959414,-0.026901,0.098130,0.263006 +293,0.959138,-0.027083,0.098441,0.263875 +294,0.958861,-0.027265,0.098750,0.264745 +295,0.958584,-0.027448,0.099060,0.265614 +296,0.958305,-0.027632,0.099369,0.266482 +297,0.958026,-0.027817,0.099678,0.267351 +298,0.957746,-0.028002,0.099987,0.268219 +299,0.957465,-0.028187,0.100296,0.269086 +300,0.957183,-0.028373,0.100604,0.269953 +301,0.956900,-0.028560,0.100912,0.270820 +302,0.956616,-0.028747,0.101220,0.271687 +303,0.956331,-0.028935,0.101527,0.272553 +304,0.956046,-0.029124,0.101834,0.273420 +305,0.955759,-0.029313,0.102141,0.274285 +306,0.955472,-0.029502,0.102448,0.275151 +307,0.955183,-0.029692,0.102754,0.276016 +308,0.954894,-0.029883,0.103060,0.276880 +309,0.954604,-0.030075,0.103366,0.277745 +310,0.954313,-0.030267,0.103672,0.278609 +311,0.954021,-0.030459,0.103977,0.279472 +312,0.953728,-0.030652,0.104282,0.280336 +313,0.953435,-0.030846,0.104586,0.281199 +314,0.953140,-0.031040,0.104891,0.282062 +315,0.952844,-0.031235,0.105195,0.282924 +316,0.952548,-0.031431,0.105499,0.283786 +317,0.952251,-0.031627,0.105802,0.284648 +318,0.951952,-0.031823,0.106106,0.285509 +319,0.951653,-0.032020,0.106409,0.286370 +320,0.951353,-0.032218,0.106711,0.287231 +321,0.951053,-0.032416,0.107014,0.288091 +322,0.950751,-0.032615,0.107316,0.288951 +323,0.950448,-0.032815,0.107618,0.289810 +324,0.950145,-0.033015,0.107919,0.290670 +325,0.949840,-0.033215,0.108221,0.291529 +326,0.949535,-0.033417,0.108522,0.292387 +327,0.949228,-0.033618,0.108822,0.293245 +328,0.948921,-0.033821,0.109123,0.294103 +329,0.948613,-0.034024,0.109423,0.294961 +330,0.948304,-0.034227,0.109723,0.295818 +331,0.947995,-0.034431,0.110022,0.296675 +332,0.947684,-0.034636,0.110321,0.297531 +333,0.947372,-0.034841,0.110620,0.298387 +334,0.947060,-0.035047,0.110919,0.299243 +335,0.946746,-0.035253,0.111217,0.300098 +336,0.946432,-0.035460,0.111515,0.300953 +337,0.946117,-0.035668,0.111813,0.301808 +338,0.945801,-0.035876,0.112110,0.302662 +339,0.945484,-0.036085,0.112407,0.303516 +340,0.945166,-0.036294,0.112704,0.304370 +341,0.944848,-0.036504,0.113001,0.305223 +342,0.944528,-0.036714,0.113297,0.306076 +343,0.944208,-0.036925,0.113593,0.306928 +344,0.943886,-0.037137,0.113889,0.307780 +345,0.943564,-0.037349,0.114184,0.308632 +346,0.943241,-0.037561,0.114479,0.309484 +347,0.942917,-0.037774,0.114773,0.310335 +348,0.942592,-0.037988,0.115068,0.311185 +349,0.942266,-0.038203,0.115362,0.312035 +350,0.941940,-0.038417,0.115656,0.312885 +351,0.941612,-0.038633,0.115949,0.313735 +352,0.941284,-0.038849,0.116242,0.314584 +353,0.940955,-0.039066,0.116535,0.315433 +354,0.940625,-0.039283,0.116828,0.316281 +355,0.940294,-0.039501,0.117120,0.317129 +356,0.939962,-0.039719,0.117412,0.317977 +357,0.939629,-0.039938,0.117703,0.318824 +358,0.939295,-0.040157,0.117994,0.319671 +359,0.938961,-0.040377,0.118285,0.320517 +360,0.938625,-0.040598,0.118576,0.321363 +361,0.938289,-0.040819,0.118866,0.322209 +362,0.937952,-0.041040,0.119156,0.323054 +363,0.937614,-0.041263,0.119446,0.323899 +364,0.937275,-0.041485,0.119735,0.324744 +365,0.936935,-0.041709,0.120024,0.325588 +366,0.936594,-0.041933,0.120313,0.326432 +367,0.936253,-0.042157,0.120601,0.327275 +368,0.935910,-0.042382,0.120889,0.328118 +369,0.935567,-0.042608,0.121177,0.328961 +370,0.935223,-0.042834,0.121464,0.329803 +371,0.934878,-0.043061,0.121751,0.330645 +372,0.934532,-0.043288,0.122038,0.331486 +373,0.934185,-0.043516,0.122324,0.332327 +374,0.933838,-0.043744,0.122610,0.333168 +375,0.933489,-0.043973,0.122896,0.334008 +376,0.933140,-0.044202,0.123182,0.334848 +377,0.932789,-0.044432,0.123467,0.335687 +378,0.932438,-0.044663,0.123751,0.336526 +379,0.932086,-0.044894,0.124036,0.337365 +380,0.931733,-0.045126,0.124320,0.338203 +381,0.931380,-0.045358,0.124604,0.339041 +382,0.931025,-0.045591,0.124887,0.339878 +383,0.930670,-0.045824,0.125170,0.340715 +384,0.930313,-0.046058,0.125453,0.341551 +385,0.929956,-0.046293,0.125735,0.342388 +386,0.929598,-0.046528,0.126017,0.343223 +387,0.929239,-0.046763,0.126299,0.344059 +388,0.928879,-0.046999,0.126580,0.344894 +389,0.928519,-0.047236,0.126861,0.345728 +390,0.928157,-0.047473,0.127142,0.346562 +391,0.927795,-0.047711,0.127422,0.347396 +392,0.927432,-0.047949,0.127702,0.348229 +393,0.927068,-0.048188,0.127982,0.349062 +394,0.926703,-0.048427,0.128261,0.349895 +395,0.926337,-0.048667,0.128540,0.350727 +396,0.925970,-0.048908,0.128818,0.351558 +397,0.925603,-0.049149,0.129097,0.352389 +398,0.925234,-0.049390,0.129375,0.353220 +399,0.924865,-0.049633,0.129652,0.354050 +400,0.924495,-0.049875,0.129929,0.354880 +401,0.924124,-0.050118,0.130206,0.355710 +402,0.923752,-0.050362,0.130483,0.356539 +403,0.923379,-0.050606,0.130759,0.357368 +404,0.923006,-0.050851,0.131034,0.358196 +405,0.922632,-0.051097,0.131310,0.359024 +406,0.922256,-0.051343,0.131585,0.359851 +407,0.921880,-0.051589,0.131860,0.360678 +408,0.921503,-0.051836,0.132134,0.361504 +409,0.921125,-0.052084,0.132408,0.362330 +410,0.920747,-0.052332,0.132682,0.363156 +411,0.920367,-0.052580,0.132955,0.363981 +412,0.919987,-0.052829,0.133228,0.364806 +413,0.919606,-0.053079,0.133500,0.365630 +414,0.919224,-0.053329,0.133773,0.366454 +415,0.918841,-0.053580,0.134044,0.367278 +416,0.918457,-0.053831,0.134316,0.368101 +417,0.918072,-0.054083,0.134587,0.368923 +418,0.917687,-0.054336,0.134858,0.369745 +419,0.917301,-0.054588,0.135128,0.370567 +420,0.916914,-0.054842,0.135398,0.371388 +421,0.916526,-0.055096,0.135668,0.372209 +422,0.916137,-0.055350,0.135937,0.373029 +423,0.915747,-0.055605,0.136206,0.373849 +424,0.915357,-0.055861,0.136474,0.374669 +425,0.914965,-0.056117,0.136742,0.375488 +426,0.914573,-0.056374,0.137010,0.376306 +427,0.914180,-0.056631,0.137278,0.377124 +428,0.913786,-0.056889,0.137545,0.377942 +429,0.913391,-0.057147,0.137811,0.378759 +430,0.912996,-0.057405,0.138078,0.379576 +431,0.912599,-0.057665,0.138344,0.380392 +432,0.912202,-0.057925,0.138609,0.381208 +433,0.911804,-0.058185,0.138874,0.382024 +434,0.911405,-0.058446,0.139139,0.382839 +435,0.911005,-0.058707,0.139403,0.383653 +436,0.910605,-0.058969,0.139667,0.384467 +437,0.910203,-0.059232,0.139931,0.385281 +438,0.909801,-0.059495,0.140194,0.386094 +439,0.909398,-0.059758,0.140457,0.386906 +440,0.908994,-0.060022,0.140720,0.387719 +441,0.908589,-0.060287,0.140982,0.388530 +442,0.908183,-0.060552,0.141243,0.389342 +443,0.907777,-0.060817,0.141505,0.390152 +444,0.907369,-0.061083,0.141766,0.390963 +445,0.906961,-0.061350,0.142026,0.391773 +446,0.906552,-0.061617,0.142287,0.392582 +447,0.906143,-0.061885,0.142546,0.393391 +448,0.905732,-0.062153,0.142806,0.394199 +449,0.905320,-0.062422,0.143065,0.395007 +450,0.904908,-0.062691,0.143323,0.395815 +451,0.904495,-0.062961,0.143582,0.396622 +452,0.904081,-0.063231,0.143839,0.397429 +453,0.903666,-0.063502,0.144097,0.398235 +454,0.903251,-0.063773,0.144354,0.399040 +455,0.902834,-0.064045,0.144611,0.399845 +456,0.902417,-0.064317,0.144867,0.400650 +457,0.901999,-0.064590,0.145123,0.401454 +458,0.901580,-0.064863,0.145378,0.402258 +459,0.901160,-0.065137,0.145633,0.403061 +460,0.900740,-0.065412,0.145888,0.403864 +461,0.900318,-0.065687,0.146142,0.404666 +462,0.899896,-0.065962,0.146396,0.405468 +463,0.899473,-0.066238,0.146650,0.406269 +464,0.899049,-0.066514,0.146903,0.407070 +465,0.898624,-0.066791,0.147155,0.407871 +466,0.898199,-0.067069,0.147408,0.408670 +467,0.897773,-0.067347,0.147660,0.409470 +468,0.897345,-0.067625,0.147911,0.410269 +469,0.896917,-0.067904,0.148162,0.411067 +470,0.896489,-0.068184,0.148413,0.411865 +471,0.896059,-0.068464,0.148663,0.412662 +472,0.895629,-0.068744,0.148913,0.413459 +473,0.895197,-0.069025,0.149162,0.414256 +474,0.894765,-0.069307,0.149411,0.415052 +475,0.894332,-0.069589,0.149660,0.415847 +476,0.893899,-0.069871,0.149908,0.416642 +477,0.893464,-0.070155,0.150156,0.417436 +478,0.893029,-0.070438,0.150403,0.418230 +479,0.892593,-0.070722,0.150650,0.419024 +480,0.892156,-0.071007,0.150897,0.419817 +481,0.891718,-0.071292,0.151143,0.420609 +482,0.891280,-0.071577,0.151389,0.421401 +483,0.890840,-0.071863,0.151634,0.422193 +484,0.890400,-0.072150,0.151879,0.422983 +485,0.889959,-0.072437,0.152123,0.423774 +486,0.889517,-0.072725,0.152368,0.424564 +487,0.889075,-0.073013,0.152611,0.425353 +488,0.888631,-0.073301,0.152854,0.426142 +489,0.888187,-0.073590,0.153097,0.426931 +490,0.887742,-0.073880,0.153340,0.427718 +491,0.887296,-0.074170,0.153582,0.428506 +492,0.886849,-0.074460,0.153823,0.429293 +493,0.886402,-0.074751,0.154064,0.430079 +494,0.885954,-0.075043,0.154305,0.430865 +495,0.885505,-0.075335,0.154545,0.431650 +496,0.885055,-0.075628,0.154785,0.432435 +497,0.884604,-0.075921,0.155025,0.433219 +498,0.884153,-0.076214,0.155264,0.434003 +499,0.883700,-0.076508,0.155502,0.434787 +500,0.883247,-0.076803,0.155740,0.435569 +501,0.882793,-0.077098,0.155978,0.436352 +502,0.882339,-0.077393,0.156215,0.437133 +503,0.881883,-0.077689,0.156452,0.437915 +504,0.881427,-0.077986,0.156689,0.438695 +505,0.880970,-0.078282,0.156925,0.439475 +506,0.880512,-0.078580,0.157160,0.440255 +507,0.880053,-0.078878,0.157395,0.441034 +508,0.879594,-0.079176,0.157630,0.441813 +509,0.879134,-0.079475,0.157864,0.442591 +510,0.878673,-0.079775,0.158098,0.443368 +511,0.878211,-0.080074,0.158332,0.444145 +512,0.877748,-0.080375,0.158565,0.444922 +513,0.877285,-0.080676,0.158797,0.445698 +514,0.876820,-0.080977,0.159029,0.446473 +515,0.876355,-0.081279,0.159261,0.447248 +516,0.875890,-0.081581,0.159492,0.448022 +517,0.875423,-0.081884,0.159723,0.448796 +518,0.874956,-0.082187,0.159953,0.449570 +519,0.874488,-0.082491,0.160183,0.450342 +520,0.874019,-0.082795,0.160412,0.451115 +521,0.873549,-0.083100,0.160641,0.451886 +522,0.873078,-0.083405,0.160870,0.452657 +523,0.872607,-0.083711,0.161098,0.453428 +524,0.872135,-0.084017,0.161326,0.454198 +525,0.871662,-0.084323,0.161553,0.454968 +526,0.871188,-0.084630,0.161780,0.455737 +527,0.870714,-0.084938,0.162006,0.456505 +528,0.870239,-0.085246,0.162232,0.457273 +529,0.869763,-0.085554,0.162457,0.458040 +530,0.869286,-0.085863,0.162682,0.458807 +531,0.868808,-0.086173,0.162907,0.459574 +532,0.868330,-0.086483,0.163131,0.460339 +533,0.867851,-0.086793,0.163355,0.461104 +534,0.867371,-0.087104,0.163578,0.461869 +535,0.866890,-0.087415,0.163801,0.462633 +536,0.866409,-0.087727,0.164023,0.463397 +537,0.865926,-0.088040,0.164245,0.464160 +538,0.865443,-0.088352,0.164466,0.464922 +539,0.864960,-0.088666,0.164687,0.465684 +540,0.864475,-0.088979,0.164907,0.466445 +541,0.863990,-0.089293,0.165127,0.467206 +542,0.863503,-0.089608,0.165347,0.467966 +543,0.863017,-0.089923,0.165566,0.468726 +544,0.862529,-0.090239,0.165785,0.469485 +545,0.862040,-0.090555,0.166003,0.470244 +546,0.861551,-0.090871,0.166221,0.471002 +547,0.861061,-0.091188,0.166438,0.471759 +548,0.860571,-0.091506,0.166655,0.472516 +549,0.860079,-0.091823,0.166871,0.473272 +550,0.859587,-0.092142,0.167087,0.474028 +551,0.859094,-0.092461,0.167302,0.474783 +552,0.858600,-0.092780,0.167517,0.475538 +553,0.858105,-0.093100,0.167732,0.476292 +554,0.857610,-0.093420,0.167946,0.477045 +555,0.857114,-0.093740,0.168159,0.477798 +556,0.856617,-0.094061,0.168372,0.478551 +557,0.856119,-0.094383,0.168585,0.479303 +558,0.855621,-0.094705,0.168797,0.480054 +559,0.855122,-0.095027,0.169008,0.480804 +560,0.854622,-0.095350,0.169220,0.481555 +561,0.854121,-0.095674,0.169430,0.482304 +562,0.853620,-0.095998,0.169641,0.483053 +563,0.853117,-0.096322,0.169850,0.483801 +564,0.852614,-0.096647,0.170060,0.484549 +565,0.852111,-0.096972,0.170269,0.485296 +566,0.851606,-0.097297,0.170477,0.486043 +567,0.851101,-0.097624,0.170685,0.486789 +568,0.850595,-0.097950,0.170892,0.487535 +569,0.850088,-0.098277,0.171099,0.488280 +570,0.849581,-0.098605,0.171305,0.489024 +571,0.849072,-0.098932,0.171511,0.489768 +572,0.848563,-0.099261,0.171717,0.490511 +573,0.848054,-0.099590,0.171922,0.491253 +574,0.847543,-0.099919,0.172127,0.491995 +575,0.847032,-0.100248,0.172331,0.492737 +576,0.846520,-0.100579,0.172534,0.493478 +577,0.846007,-0.100909,0.172737,0.494218 +578,0.845493,-0.101240,0.172940,0.494958 +579,0.844979,-0.101572,0.173142,0.495697 +580,0.844464,-0.101904,0.173344,0.496435 +581,0.843948,-0.102236,0.173545,0.497173 +582,0.843432,-0.102569,0.173745,0.497911 +583,0.842915,-0.102902,0.173946,0.498647 +584,0.842397,-0.103236,0.174145,0.499383 +585,0.841878,-0.103570,0.174345,0.500119 +586,0.841358,-0.103904,0.174543,0.500854 +587,0.840838,-0.104239,0.174741,0.501588 +588,0.840317,-0.104575,0.174939,0.502322 +589,0.839795,-0.104910,0.175136,0.503055 +590,0.839273,-0.105247,0.175333,0.503788 +591,0.838750,-0.105583,0.175530,0.504520 +592,0.838226,-0.105921,0.175725,0.505251 +593,0.837701,-0.106258,0.175921,0.505982 +594,0.837176,-0.106596,0.176115,0.506712 +595,0.836650,-0.106935,0.176310,0.507442 +596,0.836123,-0.107274,0.176504,0.508171 +597,0.835595,-0.107613,0.176697,0.508899 +598,0.835067,-0.107953,0.176890,0.509627 +599,0.834538,-0.108293,0.177082,0.510354 +600,0.834008,-0.108634,0.177274,0.511081 +601,0.833477,-0.108975,0.177465,0.511807 +602,0.832946,-0.109316,0.177656,0.512532 +603,0.832414,-0.109658,0.177846,0.513257 +604,0.831881,-0.110000,0.178036,0.513981 +605,0.831348,-0.110343,0.178226,0.514705 +606,0.830814,-0.110686,0.178414,0.515427 +607,0.830279,-0.111030,0.178603,0.516150 +608,0.829743,-0.111374,0.178791,0.516872 +609,0.829207,-0.111718,0.178978,0.517593 +610,0.828670,-0.112063,0.179165,0.518313 +611,0.828132,-0.112409,0.179351,0.519033 +612,0.827593,-0.112754,0.179537,0.519752 +613,0.827054,-0.113100,0.179722,0.520471 +614,0.826514,-0.113447,0.179907,0.521189 +615,0.825973,-0.113794,0.180091,0.521906 +616,0.825432,-0.114141,0.180275,0.522623 +617,0.824890,-0.114489,0.180458,0.523339 +618,0.824347,-0.114837,0.180641,0.524055 +619,0.823803,-0.115186,0.180823,0.524770 +620,0.823259,-0.115535,0.181005,0.525484 +621,0.822714,-0.115885,0.181186,0.526198 +622,0.822168,-0.116235,0.181367,0.526911 +623,0.821622,-0.116585,0.181547,0.527624 +624,0.821074,-0.116936,0.181727,0.528335 +625,0.820526,-0.117287,0.181906,0.529047 +626,0.819978,-0.117638,0.182085,0.529757 +627,0.819428,-0.117990,0.182263,0.530467 +628,0.818878,-0.118343,0.182441,0.531176 +629,0.818328,-0.118696,0.182618,0.531885 +630,0.817776,-0.119049,0.182795,0.532593 +631,0.817224,-0.119402,0.182971,0.533301 +632,0.816671,-0.119756,0.183146,0.534008 +633,0.816118,-0.120111,0.183321,0.534714 +634,0.815563,-0.120466,0.183496,0.535419 +635,0.815008,-0.120821,0.183670,0.536124 +636,0.814453,-0.121176,0.183844,0.536829 +637,0.813896,-0.121533,0.184017,0.537532 +638,0.813339,-0.121889,0.184189,0.538235 +639,0.812781,-0.122246,0.184361,0.538938 +640,0.812223,-0.122603,0.184532,0.539639 +641,0.811663,-0.122961,0.184703,0.540341 +642,0.811103,-0.123319,0.184874,0.541041 +643,0.810543,-0.123677,0.185044,0.541741 +644,0.809981,-0.124036,0.185213,0.542440 +645,0.809419,-0.124395,0.185382,0.543139 +646,0.808857,-0.124755,0.185550,0.543837 +647,0.808293,-0.125115,0.185718,0.544534 +648,0.807729,-0.125476,0.185885,0.545230 +649,0.807164,-0.125836,0.186052,0.545926 +650,0.806599,-0.126198,0.186218,0.546622 +651,0.806033,-0.126559,0.186384,0.547317 +652,0.805466,-0.126921,0.186549,0.548011 +653,0.804898,-0.127284,0.186713,0.548704 +654,0.804330,-0.127647,0.186877,0.549397 +655,0.803761,-0.128010,0.187041,0.550089 +656,0.803191,-0.128373,0.187204,0.550780 +657,0.802621,-0.128737,0.187366,0.551471 +658,0.802050,-0.129102,0.187528,0.552161 +659,0.801478,-0.129466,0.187690,0.552851 +660,0.800905,-0.129832,0.187851,0.553540 +661,0.800332,-0.130197,0.188011,0.554228 +662,0.799759,-0.130563,0.188171,0.554916 +663,0.799184,-0.130929,0.188330,0.555603 +664,0.798609,-0.131296,0.188489,0.556289 +665,0.798033,-0.131663,0.188647,0.556974 +666,0.797456,-0.132031,0.188805,0.557659 +667,0.796879,-0.132398,0.188962,0.558344 +668,0.796301,-0.132767,0.189118,0.559027 +669,0.795723,-0.133135,0.189274,0.559710 +670,0.795143,-0.133504,0.189430,0.560393 +671,0.794563,-0.133874,0.189585,0.561074 +672,0.793983,-0.134243,0.189739,0.561755 +673,0.793402,-0.134614,0.189893,0.562436 +674,0.792820,-0.134984,0.190046,0.563115 +675,0.792237,-0.135355,0.190199,0.563794 +676,0.791654,-0.135726,0.190352,0.564473 +677,0.791070,-0.136098,0.190503,0.565150 +678,0.790485,-0.136470,0.190654,0.565827 +679,0.789900,-0.136842,0.190805,0.566504 +680,0.789314,-0.137215,0.190955,0.567179 +681,0.788727,-0.137588,0.191105,0.567854 +682,0.788139,-0.137962,0.191254,0.568529 +683,0.787551,-0.138336,0.191402,0.569202 +684,0.786963,-0.138710,0.191550,0.569875 +685,0.786373,-0.139085,0.191697,0.570548 +686,0.785783,-0.139460,0.191844,0.571219 +687,0.785193,-0.139835,0.191990,0.571890 +688,0.784601,-0.140211,0.192136,0.572561 +689,0.784009,-0.140587,0.192281,0.573230 +690,0.783416,-0.140963,0.192426,0.573899 +691,0.782823,-0.141340,0.192570,0.574568 +692,0.782229,-0.141717,0.192713,0.575235 +693,0.781634,-0.142095,0.192856,0.575902 +694,0.781039,-0.142473,0.192998,0.576568 +695,0.780443,-0.142851,0.193140,0.577234 +696,0.779846,-0.143230,0.193281,0.577899 +697,0.779249,-0.143609,0.193422,0.578563 +698,0.778651,-0.143988,0.193562,0.579227 +699,0.778052,-0.144368,0.193702,0.579890 +700,0.777453,-0.144748,0.193841,0.580552 +701,0.776853,-0.145128,0.193979,0.581213 +702,0.776253,-0.145509,0.194117,0.581874 +703,0.775651,-0.145890,0.194255,0.582534 +704,0.775049,-0.146272,0.194391,0.583194 +705,0.774447,-0.146654,0.194528,0.583853 +706,0.773844,-0.147036,0.194663,0.584511 +707,0.773240,-0.147418,0.194798,0.585168 +708,0.772635,-0.147801,0.194933,0.585825 +709,0.772030,-0.148185,0.195067,0.586481 +710,0.771424,-0.148568,0.195200,0.587136 +711,0.770818,-0.148952,0.195333,0.587791 +712,0.770211,-0.149337,0.195466,0.588445 +713,0.769603,-0.149721,0.195597,0.589098 +714,0.768995,-0.150106,0.195728,0.589751 +715,0.768386,-0.150492,0.195859,0.590402 +716,0.767776,-0.150877,0.195989,0.591054 +717,0.767166,-0.151263,0.196119,0.591704 +718,0.766555,-0.151650,0.196247,0.592354 +719,0.765943,-0.152037,0.196376,0.593003 +720,0.765331,-0.152424,0.196504,0.593651 +721,0.764718,-0.152811,0.196631,0.594299 +722,0.764104,-0.153199,0.196757,0.594946 +723,0.763490,-0.153587,0.196883,0.595593 +724,0.762876,-0.153976,0.197009,0.596238 +725,0.762260,-0.154364,0.197134,0.596883 +726,0.761644,-0.154754,0.197258,0.597527 +727,0.761027,-0.155143,0.197382,0.598171 +728,0.760410,-0.155533,0.197505,0.598814 +729,0.759792,-0.155923,0.197628,0.599456 +730,0.759174,-0.156314,0.197750,0.600097 +731,0.758554,-0.156704,0.197871,0.600738 +732,0.757934,-0.157096,0.197992,0.601378 +733,0.757314,-0.157487,0.198113,0.602017 +734,0.756693,-0.157879,0.198232,0.602656 +735,0.756071,-0.158271,0.198352,0.603294 +736,0.755449,-0.158664,0.198470,0.603931 +737,0.754826,-0.159056,0.198588,0.604567 +738,0.754202,-0.159450,0.198706,0.605203 +739,0.753578,-0.159843,0.198823,0.605838 +740,0.752953,-0.160237,0.198939,0.606473 +741,0.752328,-0.160631,0.199055,0.607106 +742,0.751702,-0.161026,0.199170,0.607739 +743,0.751075,-0.161420,0.199284,0.608371 +744,0.750448,-0.161816,0.199398,0.609003 +745,0.749820,-0.162211,0.199512,0.609634 +746,0.749191,-0.162607,0.199624,0.610264 +747,0.748562,-0.163003,0.199737,0.610893 +748,0.747932,-0.163399,0.199848,0.611522 +749,0.747302,-0.163796,0.199959,0.612150 +750,0.746671,-0.164193,0.200070,0.612777 +751,0.746039,-0.164590,0.200180,0.613403 +752,0.745407,-0.164988,0.200289,0.614029 +753,0.744774,-0.165386,0.200398,0.614654 +754,0.744141,-0.165785,0.200506,0.615279 +755,0.743506,-0.166183,0.200613,0.615902 +756,0.742872,-0.166582,0.200720,0.616525 +757,0.742237,-0.166981,0.200827,0.617147 +758,0.741601,-0.167381,0.200933,0.617769 +759,0.740964,-0.167781,0.201038,0.618389 +760,0.740327,-0.168181,0.201142,0.619009 +761,0.739689,-0.168582,0.201246,0.619629 +762,0.739051,-0.168983,0.201350,0.620247 +763,0.738412,-0.169384,0.201453,0.620865 +764,0.737773,-0.169785,0.201555,0.621482 +765,0.737132,-0.170187,0.201657,0.622099 +766,0.736492,-0.170589,0.201758,0.622714 +767,0.735850,-0.170991,0.201858,0.623329 +768,0.735208,-0.171394,0.201958,0.623943 +769,0.734566,-0.171797,0.202057,0.624557 +770,0.733923,-0.172200,0.202156,0.625170 +771,0.733279,-0.172604,0.202254,0.625782 +772,0.732635,-0.173008,0.202352,0.626393 +773,0.731990,-0.173412,0.202449,0.627004 +774,0.731344,-0.173817,0.202545,0.627613 +775,0.730698,-0.174222,0.202641,0.628222 +776,0.730052,-0.174627,0.202736,0.628831 +777,0.729404,-0.175032,0.202830,0.629438 +778,0.728757,-0.175438,0.202924,0.630045 +779,0.728108,-0.175844,0.203018,0.630651 +780,0.727459,-0.176250,0.203110,0.631257 +781,0.726810,-0.176657,0.203202,0.631862 +782,0.726159,-0.177064,0.203294,0.632466 +783,0.725509,-0.177471,0.203385,0.633069 +784,0.724857,-0.177878,0.203475,0.633671 +785,0.724205,-0.178286,0.203565,0.634273 +786,0.723553,-0.178694,0.203654,0.634874 +787,0.722900,-0.179103,0.203743,0.635474 +788,0.722246,-0.179511,0.203831,0.636074 +789,0.721592,-0.179920,0.203918,0.636672 +790,0.720937,-0.180329,0.204005,0.637270 +791,0.720281,-0.180739,0.204091,0.637868 +792,0.719625,-0.181149,0.204176,0.638464 +793,0.718969,-0.181559,0.204261,0.639060 +794,0.718312,-0.181969,0.204345,0.639655 +795,0.717654,-0.182380,0.204429,0.640249 +796,0.716996,-0.182791,0.204512,0.640843 +797,0.716337,-0.183202,0.204595,0.641436 +798,0.715677,-0.183614,0.204677,0.642028 +799,0.715017,-0.184025,0.204758,0.642619 +800,0.714357,-0.184437,0.204838,0.643210 +801,0.713695,-0.184850,0.204919,0.643799 +802,0.713034,-0.185262,0.204998,0.644388 +803,0.712371,-0.185675,0.205077,0.644977 +804,0.711709,-0.186088,0.205155,0.645564 +805,0.711045,-0.186502,0.205233,0.646151 +806,0.710381,-0.186916,0.205310,0.646737 +807,0.709717,-0.187330,0.205386,0.647323 +808,0.709052,-0.187744,0.205462,0.647907 +809,0.708386,-0.188159,0.205537,0.648491 +810,0.707720,-0.188573,0.205612,0.649074 +811,0.707053,-0.188988,0.205686,0.649656 +812,0.706385,-0.189404,0.205759,0.650238 +813,0.705718,-0.189820,0.205832,0.650818 +814,0.705049,-0.190235,0.205904,0.651398 +815,0.704380,-0.190652,0.205975,0.651978 +816,0.703710,-0.191068,0.206046,0.652556 +817,0.703040,-0.191485,0.206116,0.653134 +818,0.702370,-0.191902,0.206186,0.653711 +819,0.701698,-0.192319,0.206255,0.654287 +820,0.701027,-0.192737,0.206323,0.654863 +821,0.700354,-0.193154,0.206391,0.655437 +822,0.699681,-0.193572,0.206458,0.656011 +823,0.699008,-0.193991,0.206525,0.656584 +824,0.698334,-0.194409,0.206591,0.657157 +825,0.697659,-0.194828,0.206656,0.657728 +826,0.696984,-0.195247,0.206721,0.658299 +827,0.696309,-0.195666,0.206785,0.658869 +828,0.695633,-0.196086,0.206848,0.659439 +829,0.694956,-0.196506,0.206911,0.660007 +830,0.694279,-0.196926,0.206973,0.660575 +831,0.693601,-0.197346,0.207035,0.661142 +832,0.692922,-0.197767,0.207096,0.661708 +833,0.692244,-0.198188,0.207156,0.662274 +834,0.691564,-0.198609,0.207216,0.662839 +835,0.690884,-0.199030,0.207275,0.663403 +836,0.690204,-0.199452,0.207334,0.663966 +837,0.689523,-0.199874,0.207392,0.664528 +838,0.688841,-0.200296,0.207449,0.665090 +839,0.688159,-0.200718,0.207505,0.665651 +840,0.687476,-0.201141,0.207561,0.666211 +841,0.686793,-0.201564,0.207617,0.666770 +842,0.686109,-0.201987,0.207671,0.667329 +843,0.685425,-0.202410,0.207726,0.667887 +844,0.684740,-0.202834,0.207779,0.668444 +845,0.684055,-0.203258,0.207832,0.669000 +846,0.683369,-0.203682,0.207884,0.669555 +847,0.682683,-0.204106,0.207936,0.670110 +848,0.681996,-0.204531,0.207987,0.670664 +849,0.681309,-0.204955,0.208037,0.671217 +850,0.680621,-0.205380,0.208087,0.671769 +851,0.679932,-0.205806,0.208136,0.672321 +852,0.679243,-0.206231,0.208184,0.672872 +853,0.678554,-0.206657,0.208232,0.673422 +854,0.677864,-0.207083,0.208279,0.673971 +855,0.677173,-0.207509,0.208326,0.674519 +856,0.676482,-0.207936,0.208372,0.675067 +857,0.675791,-0.208362,0.208417,0.675614 +858,0.675099,-0.208789,0.208462,0.676160 +859,0.674406,-0.209216,0.208506,0.676705 +860,0.673713,-0.209644,0.208549,0.677250 +861,0.673019,-0.210071,0.208592,0.677794 +862,0.672325,-0.210499,0.208634,0.678337 +863,0.671631,-0.210927,0.208675,0.678879 +864,0.670936,-0.211356,0.208716,0.679420 +865,0.670240,-0.211784,0.208756,0.679961 +866,0.669544,-0.212213,0.208796,0.680501 +867,0.668847,-0.212642,0.208835,0.681040 +868,0.668150,-0.213071,0.208873,0.681578 +869,0.667452,-0.213501,0.208911,0.682115 +870,0.666754,-0.213930,0.208948,0.682652 +871,0.666055,-0.214360,0.208984,0.683188 +872,0.665356,-0.214790,0.209020,0.683723 +873,0.664656,-0.215220,0.209055,0.684257 +874,0.663956,-0.215651,0.209090,0.684791 +875,0.663255,-0.216082,0.209124,0.685323 +876,0.662554,-0.216513,0.209157,0.685855 +877,0.661853,-0.216944,0.209189,0.686387 +878,0.661150,-0.217375,0.209221,0.686917 +879,0.660448,-0.217807,0.209253,0.687446 +880,0.659744,-0.218239,0.209283,0.687975 +881,0.659041,-0.218671,0.209313,0.688503 +882,0.658337,-0.219103,0.209343,0.689030 +883,0.657632,-0.219535,0.209371,0.689557 +884,0.656927,-0.219968,0.209399,0.690082 +885,0.656221,-0.220401,0.209427,0.690607 +886,0.655515,-0.220834,0.209454,0.691131 +887,0.654808,-0.221267,0.209480,0.691654 +888,0.654101,-0.221701,0.209505,0.692176 +889,0.653394,-0.222134,0.209530,0.692698 +890,0.652685,-0.222568,0.209554,0.693219 +891,0.651977,-0.223002,0.209578,0.693739 +892,0.651268,-0.223437,0.209601,0.694258 +893,0.650558,-0.223871,0.209623,0.694776 +894,0.649848,-0.224306,0.209645,0.695294 +895,0.649138,-0.224741,0.209666,0.695810 +896,0.648427,-0.225176,0.209686,0.696326 +897,0.647715,-0.225611,0.209706,0.696842 +898,0.647003,-0.226047,0.209725,0.697356 +899,0.646291,-0.226482,0.209743,0.697869 +900,0.645578,-0.226918,0.209761,0.698382 +901,0.644864,-0.227354,0.209778,0.698894 +902,0.644151,-0.227790,0.209795,0.699405 +903,0.643436,-0.228227,0.209810,0.699916 +904,0.642721,-0.228664,0.209825,0.700425 +905,0.642006,-0.229100,0.209840,0.700934 +906,0.641290,-0.229538,0.209854,0.701442 +907,0.640574,-0.229975,0.209867,0.701949 +908,0.639858,-0.230412,0.209880,0.702455 +909,0.639140,-0.230850,0.209891,0.702961 +910,0.638423,-0.231288,0.209903,0.703465 +911,0.637705,-0.231726,0.209913,0.703969 +912,0.636986,-0.232164,0.209923,0.704472 +913,0.636267,-0.232602,0.209933,0.704974 +914,0.635548,-0.233041,0.209941,0.705476 +915,0.634828,-0.233479,0.209949,0.705976 +916,0.634107,-0.233918,0.209957,0.706476 +917,0.633386,-0.234357,0.209963,0.706975 +918,0.632665,-0.234797,0.209969,0.707473 +919,0.631943,-0.235236,0.209975,0.707971 +920,0.631221,-0.235676,0.209979,0.708467 +921,0.630498,-0.236115,0.209983,0.708963 +922,0.629775,-0.236555,0.209987,0.709458 +923,0.629052,-0.236996,0.209990,0.709952 +924,0.628328,-0.237436,0.209992,0.710445 +925,0.627603,-0.237876,0.209993,0.710937 +926,0.626878,-0.238317,0.209994,0.711429 +927,0.626153,-0.238758,0.209994,0.711920 +928,0.625427,-0.239199,0.209993,0.712410 +929,0.624701,-0.239640,0.209992,0.712899 +930,0.623974,-0.240081,0.209990,0.713387 +931,0.623247,-0.240523,0.209988,0.713875 +932,0.622519,-0.240965,0.209985,0.714362 +933,0.621791,-0.241406,0.209981,0.714848 +934,0.621062,-0.241848,0.209976,0.715333 +935,0.620333,-0.242291,0.209971,0.715817 +936,0.619604,-0.242733,0.209965,0.716300 +937,0.618874,-0.243175,0.209959,0.716783 +938,0.618144,-0.243618,0.209952,0.717265 +939,0.617413,-0.244061,0.209944,0.717746 +940,0.616682,-0.244504,0.209936,0.718226 +941,0.615950,-0.244947,0.209927,0.718705 +942,0.615218,-0.245390,0.209917,0.719184 +943,0.614486,-0.245834,0.209906,0.719661 +944,0.613753,-0.246278,0.209895,0.720138 +945,0.613020,-0.246721,0.209884,0.720614 +946,0.612286,-0.247165,0.209871,0.721089 +947,0.611552,-0.247609,0.209858,0.721564 +948,0.610817,-0.248054,0.209844,0.722037 +949,0.610082,-0.248498,0.209830,0.722510 +950,0.609346,-0.248943,0.209815,0.722982 +951,0.608610,-0.249387,0.209799,0.723453 +952,0.607874,-0.249832,0.209783,0.723923 +953,0.607137,-0.250277,0.209766,0.724392 +954,0.606400,-0.250722,0.209748,0.724861 +955,0.605663,-0.251167,0.209729,0.725328 +956,0.604924,-0.251613,0.209710,0.725795 +957,0.604186,-0.252059,0.209691,0.726261 +958,0.603447,-0.252504,0.209670,0.726727 +959,0.602708,-0.252950,0.209649,0.727191 +960,0.601968,-0.253396,0.209627,0.727654 +961,0.601228,-0.253842,0.209605,0.728117 +962,0.600487,-0.254289,0.209582,0.728579 +963,0.599747,-0.254735,0.209558,0.729040 +964,0.599005,-0.255182,0.209534,0.729500 +965,0.598263,-0.255628,0.209509,0.729960 +966,0.597521,-0.256075,0.209483,0.730418 +967,0.596779,-0.256522,0.209457,0.730876 +968,0.596036,-0.256969,0.209430,0.731333 +969,0.595292,-0.257416,0.209402,0.731789 +970,0.594548,-0.257864,0.209373,0.732244 +971,0.593804,-0.258311,0.209344,0.732698 +972,0.593059,-0.258759,0.209315,0.733152 +973,0.592314,-0.259207,0.209284,0.733605 +974,0.591569,-0.259655,0.209253,0.734056 +975,0.590823,-0.260103,0.209221,0.734507 +976,0.590077,-0.260551,0.209189,0.734958 +977,0.589330,-0.260999,0.209156,0.735407 +978,0.588583,-0.261448,0.209122,0.735855 +979,0.587836,-0.261896,0.209088,0.736303 +980,0.587088,-0.262345,0.209053,0.736750 +981,0.586339,-0.262794,0.209017,0.737196 +982,0.585591,-0.263243,0.208980,0.737641 +983,0.584842,-0.263692,0.208943,0.738085 +984,0.584092,-0.264141,0.208905,0.738529 +985,0.583342,-0.264590,0.208867,0.738971 +986,0.582592,-0.265039,0.208828,0.739413 +987,0.581842,-0.265489,0.208788,0.739854 +988,0.581091,-0.265938,0.208747,0.740294 +989,0.580339,-0.266388,0.208706,0.740733 +990,0.579587,-0.266838,0.208664,0.741171 +991,0.578835,-0.267288,0.208622,0.741609 +992,0.578083,-0.267738,0.208579,0.742046 +993,0.577330,-0.268188,0.208535,0.742481 +994,0.576577,-0.268639,0.208490,0.742916 +995,0.575823,-0.269089,0.208445,0.743350 +996,0.575069,-0.269540,0.208399,0.743784 +997,0.574314,-0.269990,0.208352,0.744216 +998,0.573559,-0.270441,0.208305,0.744648 +999,0.572804,-0.270892,0.208257,0.745078 +1000,0.572049,-0.271343,0.208209,0.745508 +1001,0.571293,-0.271794,0.208159,0.745937 +1002,0.570536,-0.272245,0.208109,0.746365 +1003,0.569780,-0.272696,0.208059,0.746793 +1004,0.569022,-0.273148,0.208007,0.747219 +1005,0.568265,-0.273599,0.207955,0.747645 +1006,0.567507,-0.274051,0.207903,0.748070 +1007,0.566749,-0.274502,0.207849,0.748494 +1008,0.565990,-0.274954,0.207795,0.748917 +1009,0.565231,-0.275406,0.207741,0.749339 +1010,0.564472,-0.275858,0.207685,0.749760 +1011,0.563712,-0.276310,0.207629,0.750181 +1012,0.562952,-0.276762,0.207572,0.750600 +1013,0.562192,-0.277215,0.207515,0.751019 +1014,0.561431,-0.277667,0.207457,0.751437 +1015,0.560670,-0.278119,0.207398,0.751854 +1016,0.559909,-0.278572,0.207339,0.752270 +1017,0.559147,-0.279024,0.207279,0.752686 +1018,0.558384,-0.279477,0.207218,0.753100 +1019,0.557622,-0.279930,0.207156,0.753514 +1020,0.556859,-0.280383,0.207094,0.753927 +1021,0.556096,-0.280836,0.207031,0.754339 +1022,0.555332,-0.281289,0.206968,0.754750 +1023,0.554568,-0.281742,0.206903,0.755160 +1024,0.553804,-0.282195,0.206838,0.755569 +1025,0.553039,-0.282649,0.206773,0.755978 +1026,0.552274,-0.283102,0.206707,0.756386 +1027,0.551509,-0.283555,0.206640,0.756792 +1028,0.550743,-0.284009,0.206572,0.757198 +1029,0.549977,-0.284463,0.206504,0.757603 +1030,0.549210,-0.284916,0.206435,0.758008 +1031,0.548443,-0.285370,0.206365,0.758411 +1032,0.547676,-0.285824,0.206294,0.758813 +1033,0.546909,-0.286278,0.206223,0.759215 +1034,0.546141,-0.286732,0.206152,0.759616 +1035,0.545373,-0.287186,0.206079,0.760016 +1036,0.544604,-0.287640,0.206006,0.760415 +1037,0.543835,-0.288094,0.205932,0.760813 +1038,0.543066,-0.288549,0.205858,0.761210 +1039,0.542297,-0.289003,0.205783,0.761607 +1040,0.541527,-0.289458,0.205707,0.762002 +1041,0.540757,-0.289912,0.205630,0.762397 +1042,0.539986,-0.290367,0.205553,0.762791 +1043,0.539215,-0.290821,0.205475,0.763184 +1044,0.538444,-0.291276,0.205396,0.763576 +1045,0.537673,-0.291731,0.205317,0.763967 +1046,0.536901,-0.292186,0.205237,0.764358 +1047,0.536129,-0.292641,0.205157,0.764747 +1048,0.535356,-0.293095,0.205075,0.765136 +1049,0.534583,-0.293551,0.204993,0.765524 +1050,0.533810,-0.294006,0.204910,0.765911 +1051,0.533037,-0.294461,0.204827,0.766297 +1052,0.532263,-0.294916,0.204743,0.766682 +1053,0.531489,-0.295371,0.204658,0.767066 +1054,0.530714,-0.295826,0.204573,0.767450 +1055,0.529939,-0.296282,0.204487,0.767832 +1056,0.529164,-0.296737,0.204400,0.768214 +1057,0.528389,-0.297193,0.204312,0.768595 +1058,0.527613,-0.297648,0.204224,0.768975 +1059,0.526837,-0.298104,0.204135,0.769354 +1060,0.526061,-0.298559,0.204045,0.769732 +1061,0.525284,-0.299015,0.203955,0.770110 +1062,0.524507,-0.299471,0.203864,0.770486 +1063,0.523730,-0.299927,0.203773,0.770862 +1064,0.522952,-0.300382,0.203680,0.771237 +1065,0.522174,-0.300838,0.203587,0.771610 +1066,0.521396,-0.301294,0.203493,0.771984 +1067,0.520617,-0.301750,0.203399,0.772356 +1068,0.519838,-0.302206,0.203304,0.772727 +1069,0.519059,-0.302662,0.203208,0.773097 +1070,0.518280,-0.303118,0.203112,0.773467 +1071,0.517500,-0.303574,0.203014,0.773836 +1072,0.516720,-0.304031,0.202917,0.774203 +1073,0.515940,-0.304487,0.202818,0.774570 +1074,0.515159,-0.304943,0.202719,0.774936 +1075,0.514378,-0.305399,0.202619,0.775301 +1076,0.513597,-0.305856,0.202518,0.775666 +1077,0.512815,-0.306312,0.202417,0.776029 +1078,0.512033,-0.306768,0.202315,0.776392 +1079,0.511251,-0.307225,0.202212,0.776753 +1080,0.510469,-0.307681,0.202109,0.777114 +1081,0.509686,-0.308138,0.202005,0.777474 +1082,0.508903,-0.308594,0.201900,0.777833 +1083,0.508119,-0.309051,0.201794,0.778191 +1084,0.507336,-0.309507,0.201688,0.778548 +1085,0.506552,-0.309964,0.201581,0.778905 +1086,0.505768,-0.310420,0.201474,0.779260 +1087,0.504983,-0.310877,0.201366,0.779615 +1088,0.504198,-0.311334,0.201257,0.779969 +1089,0.503413,-0.311790,0.201147,0.780322 +1090,0.502628,-0.312247,0.201037,0.780674 +1091,0.501842,-0.312704,0.200926,0.781025 +1092,0.501056,-0.313161,0.200814,0.781375 +1093,0.500270,-0.313617,0.200702,0.781724 +1094,0.499484,-0.314074,0.200589,0.782073 +1095,0.498697,-0.314531,0.200475,0.782420 +1096,0.497910,-0.314988,0.200360,0.782767 +1097,0.497122,-0.315445,0.200245,0.783113 +1098,0.496335,-0.315901,0.200129,0.783458 +1099,0.495547,-0.316358,0.200013,0.783802 +1100,0.494759,-0.316815,0.199896,0.784145 +1101,0.493970,-0.317272,0.199778,0.784487 +1102,0.493182,-0.317729,0.199659,0.784829 +1103,0.492393,-0.318186,0.199540,0.785169 +1104,0.491603,-0.318643,0.199420,0.785509 +1105,0.490814,-0.319100,0.199299,0.785848 +1106,0.490024,-0.319557,0.199177,0.786186 +1107,0.489234,-0.320014,0.199055,0.786523 +1108,0.488444,-0.320471,0.198933,0.786859 +1109,0.487653,-0.320928,0.198809,0.787194 +1110,0.486862,-0.321384,0.198685,0.787529 +1111,0.486071,-0.321841,0.198560,0.787862 +1112,0.485280,-0.322298,0.198434,0.788195 +1113,0.484488,-0.322755,0.198308,0.788526 +1114,0.483696,-0.323212,0.198181,0.788857 +1115,0.482904,-0.323669,0.198054,0.789187 +1116,0.482112,-0.324126,0.197925,0.789516 +1117,0.481319,-0.324583,0.197796,0.789844 +1118,0.480526,-0.325040,0.197666,0.790172 +1119,0.479733,-0.325497,0.197536,0.790498 +1120,0.478940,-0.325954,0.197405,0.790824 +1121,0.478146,-0.326411,0.197273,0.791148 +1122,0.477352,-0.326868,0.197140,0.791472 +1123,0.476558,-0.327325,0.197007,0.791795 +1124,0.475764,-0.327782,0.196873,0.792117 +1125,0.474969,-0.328239,0.196739,0.792438 +1126,0.474174,-0.328695,0.196603,0.792758 +1127,0.473379,-0.329152,0.196467,0.793077 +1128,0.472584,-0.329609,0.196331,0.793396 +1129,0.471788,-0.330066,0.196193,0.793713 +1130,0.470992,-0.330523,0.196055,0.794030 +1131,0.470196,-0.330980,0.195916,0.794346 +1132,0.469400,-0.331436,0.195777,0.794661 +1133,0.468603,-0.331893,0.195637,0.794975 +1134,0.467806,-0.332350,0.195496,0.795288 +1135,0.467009,-0.332807,0.195354,0.795600 +1136,0.466212,-0.333263,0.195212,0.795911 +1137,0.465414,-0.333720,0.195069,0.796222 +1138,0.464616,-0.334177,0.194925,0.796531 +1139,0.463818,-0.334633,0.194781,0.796840 +1140,0.463020,-0.335090,0.194636,0.797147 +1141,0.462222,-0.335547,0.194490,0.797454 +1142,0.461423,-0.336003,0.194343,0.797760 +1143,0.460624,-0.336460,0.194196,0.798065 +1144,0.459825,-0.336916,0.194048,0.798370 +1145,0.459025,-0.337373,0.193900,0.798673 +1146,0.458226,-0.337829,0.193751,0.798975 +1147,0.457426,-0.338285,0.193601,0.799277 +1148,0.456626,-0.338742,0.193450,0.799577 +1149,0.455826,-0.339198,0.193299,0.799877 +1150,0.455025,-0.339654,0.193147,0.800176 +1151,0.454224,-0.340111,0.192994,0.800474 +1152,0.453423,-0.340567,0.192841,0.800771 +1153,0.452622,-0.341023,0.192686,0.801067 +1154,0.451821,-0.341479,0.192532,0.801362 +1155,0.451019,-0.341935,0.192376,0.801657 +1156,0.450217,-0.342392,0.192220,0.801950 +1157,0.449415,-0.342848,0.192063,0.802243 +1158,0.448613,-0.343304,0.191905,0.802534 +1159,0.447811,-0.343760,0.191747,0.802825 +1160,0.447008,-0.344215,0.191588,0.803115 +1161,0.446205,-0.344671,0.191428,0.803404 +1162,0.445402,-0.345127,0.191268,0.803692 +1163,0.444599,-0.345583,0.191107,0.803979 +1164,0.443795,-0.346039,0.190945,0.804266 +1165,0.442992,-0.346494,0.190782,0.804551 +1166,0.442188,-0.346950,0.190619,0.804835 +1167,0.441384,-0.347406,0.190455,0.805119 +1168,0.440579,-0.347861,0.190291,0.805402 +1169,0.439775,-0.348317,0.190125,0.805684 +1170,0.438970,-0.348772,0.189959,0.805965 +1171,0.438165,-0.349227,0.189793,0.806245 +1172,0.437360,-0.349683,0.189625,0.806524 +1173,0.436555,-0.350138,0.189457,0.806802 +1174,0.435749,-0.350593,0.189288,0.807079 +1175,0.434944,-0.351048,0.189119,0.807356 +1176,0.434138,-0.351503,0.188949,0.807631 +1177,0.433332,-0.351958,0.188778,0.807906 +1178,0.432525,-0.352413,0.188606,0.808180 +1179,0.431719,-0.352868,0.188434,0.808453 +1180,0.430912,-0.353323,0.188261,0.808725 +1181,0.430105,-0.353778,0.188087,0.808996 +1182,0.429298,-0.354233,0.187913,0.809266 +1183,0.428491,-0.354687,0.187738,0.809535 +1184,0.427684,-0.355142,0.187562,0.809803 +1185,0.426876,-0.355596,0.187385,0.810071 +1186,0.426068,-0.356051,0.187208,0.810337 +1187,0.425260,-0.356505,0.187030,0.810603 +1188,0.424452,-0.356959,0.186852,0.810868 +1189,0.423644,-0.357414,0.186673,0.811132 +1190,0.422835,-0.357868,0.186493,0.811395 +1191,0.422027,-0.358322,0.186312,0.811657 +1192,0.421218,-0.358776,0.186131,0.811918 +1193,0.420409,-0.359230,0.185949,0.812178 +1194,0.419600,-0.359684,0.185766,0.812438 +1195,0.418790,-0.360137,0.185582,0.812696 +1196,0.417981,-0.360591,0.185398,0.812954 +1197,0.417171,-0.361045,0.185213,0.813210 +1198,0.416361,-0.361498,0.185028,0.813466 +1199,0.415551,-0.361952,0.184842,0.813721 +1200,0.414741,-0.362405,0.184655,0.813975 +1201,0.413931,-0.362858,0.184467,0.814228 +1202,0.413120,-0.363311,0.184279,0.814480 +1203,0.412309,-0.363765,0.184090,0.814731 +1204,0.411498,-0.364218,0.183900,0.814982 +1205,0.410687,-0.364671,0.183709,0.815231 +1206,0.409876,-0.365123,0.183518,0.815480 +1207,0.409065,-0.365576,0.183326,0.815728 +1208,0.408253,-0.366029,0.183134,0.815974 +1209,0.407442,-0.366481,0.182941,0.816220 +1210,0.406630,-0.366934,0.182747,0.816465 +1211,0.405818,-0.367386,0.182552,0.816709 +1212,0.405006,-0.367839,0.182357,0.816952 +1213,0.404193,-0.368291,0.182161,0.817195 +1214,0.403381,-0.368743,0.181964,0.817436 +1215,0.402568,-0.369195,0.181767,0.817676 +1216,0.401756,-0.369647,0.181568,0.817916 +1217,0.400943,-0.370099,0.181370,0.818155 +1218,0.400130,-0.370551,0.181170,0.818392 +1219,0.399316,-0.371002,0.180970,0.818629 +1220,0.398503,-0.371454,0.180769,0.818865 +1221,0.397690,-0.371905,0.180567,0.819100 +1222,0.396876,-0.372356,0.180365,0.819334 +1223,0.396062,-0.372808,0.180162,0.819568 +1224,0.395248,-0.373259,0.179958,0.819800 +1225,0.394434,-0.373710,0.179754,0.820031 +1226,0.393620,-0.374161,0.179549,0.820262 +1227,0.392806,-0.374611,0.179343,0.820491 +1228,0.391991,-0.375062,0.179137,0.820720 +1229,0.391176,-0.375513,0.178929,0.820948 +1230,0.390362,-0.375963,0.178722,0.821175 +1231,0.389547,-0.376414,0.178513,0.821401 +1232,0.388732,-0.376864,0.178304,0.821626 +1233,0.387917,-0.377314,0.178094,0.821850 +1234,0.387101,-0.377764,0.177883,0.822073 +1235,0.386286,-0.378214,0.177672,0.822296 +1236,0.385470,-0.378664,0.177460,0.822517 +1237,0.384655,-0.379113,0.177247,0.822738 +1238,0.383839,-0.379563,0.177033,0.822958 +1239,0.383023,-0.380012,0.176819,0.823176 +1240,0.382207,-0.380462,0.176604,0.823394 +1241,0.381391,-0.380911,0.176389,0.823611 +1242,0.380574,-0.381360,0.176173,0.823827 +1243,0.379758,-0.381809,0.175956,0.824042 +1244,0.378941,-0.382257,0.175738,0.824257 +1245,0.378125,-0.382706,0.175520,0.824470 +1246,0.377308,-0.383155,0.175301,0.824682 +1247,0.376491,-0.383603,0.175081,0.824894 +1248,0.375674,-0.384051,0.174860,0.825104 +1249,0.374857,-0.384500,0.174639,0.825314 +1250,0.374040,-0.384948,0.174418,0.825523 +1251,0.373222,-0.385396,0.174195,0.825731 +1252,0.372405,-0.385843,0.173972,0.825938 +1253,0.371587,-0.386291,0.173748,0.826144 +1254,0.370769,-0.386739,0.173523,0.826349 +1255,0.369952,-0.387186,0.173298,0.826553 +1256,0.369134,-0.387633,0.173072,0.826757 +1257,0.368316,-0.388080,0.172845,0.826959 +1258,0.367498,-0.388527,0.172618,0.827161 +1259,0.366679,-0.388974,0.172390,0.827362 +1260,0.365861,-0.389421,0.172161,0.827561 +1261,0.365043,-0.389867,0.171932,0.827760 +1262,0.364224,-0.390314,0.171702,0.827958 +1263,0.363405,-0.390760,0.171471,0.828155 +1264,0.362587,-0.391206,0.171239,0.828351 +1265,0.361768,-0.391652,0.171007,0.828546 +1266,0.360949,-0.392098,0.170774,0.828741 +1267,0.360130,-0.392544,0.170540,0.828934 +1268,0.359311,-0.392989,0.170306,0.829127 +1269,0.358492,-0.393435,0.170071,0.829318 +1270,0.357672,-0.393880,0.169835,0.829509 +1271,0.356853,-0.394325,0.169599,0.829699 +1272,0.356033,-0.394770,0.169362,0.829888 +1273,0.355214,-0.395215,0.169124,0.830076 +1274,0.354394,-0.395659,0.168885,0.830263 +1275,0.353574,-0.396104,0.168646,0.830449 +1276,0.352754,-0.396548,0.168406,0.830634 +1277,0.351934,-0.396992,0.168166,0.830819 +1278,0.351114,-0.397436,0.167925,0.831002 +1279,0.350294,-0.397880,0.167683,0.831185 +1280,0.349474,-0.398324,0.167440,0.831366 +1281,0.348654,-0.398767,0.167197,0.831547 +1282,0.347834,-0.399211,0.166953,0.831727 +1283,0.347013,-0.399654,0.166708,0.831906 +1284,0.346193,-0.400097,0.166462,0.832084 +1285,0.345372,-0.400540,0.166216,0.832261 +1286,0.344551,-0.400983,0.165970,0.832437 +1287,0.343731,-0.401425,0.165722,0.832612 +1288,0.342910,-0.401868,0.165474,0.832787 +1289,0.342089,-0.402310,0.165225,0.832960 +1290,0.341268,-0.402752,0.164975,0.833133 +1291,0.340447,-0.403194,0.164725,0.833304 +1292,0.339626,-0.403636,0.164474,0.833475 +1293,0.338805,-0.404077,0.164223,0.833645 +1294,0.337984,-0.404519,0.163970,0.833814 +1295,0.337162,-0.404960,0.163717,0.833982 +1296,0.336341,-0.405401,0.163463,0.834149 +1297,0.335519,-0.405842,0.163209,0.834315 +1298,0.334698,-0.406282,0.162954,0.834481 +1299,0.333876,-0.406723,0.162698,0.834645 +1300,0.333055,-0.407163,0.162442,0.834808 +1301,0.332233,-0.407603,0.162185,0.834971 +1302,0.331411,-0.408043,0.161927,0.835133 +1303,0.330590,-0.408483,0.161668,0.835294 +1304,0.329768,-0.408923,0.161409,0.835453 +1305,0.328946,-0.409362,0.161149,0.835612 +1306,0.328124,-0.409802,0.160888,0.835770 +1307,0.327302,-0.410241,0.160627,0.835928 +1308,0.326480,-0.410680,0.160365,0.836084 +1309,0.325658,-0.411118,0.160102,0.836239 +1310,0.324836,-0.411557,0.159839,0.836394 +1311,0.324013,-0.411995,0.159575,0.836547 +1312,0.323191,-0.412433,0.159310,0.836700 +1313,0.322369,-0.412871,0.159045,0.836852 +1314,0.321547,-0.413309,0.158779,0.837002 +1315,0.320724,-0.413746,0.158512,0.837152 +1316,0.319902,-0.414184,0.158244,0.837301 +1317,0.319079,-0.414621,0.157976,0.837449 +1318,0.318257,-0.415058,0.157707,0.837597 +1319,0.317434,-0.415495,0.157438,0.837743 +1320,0.316612,-0.415931,0.157167,0.837888 +1321,0.315789,-0.416368,0.156896,0.838033 +1322,0.314966,-0.416804,0.156625,0.838176 +1323,0.314144,-0.417240,0.156352,0.838319 +1324,0.313321,-0.417676,0.156079,0.838461 +1325,0.312498,-0.418111,0.155806,0.838602 +1326,0.311675,-0.418547,0.155531,0.838741 +1327,0.310852,-0.418982,0.155256,0.838880 +1328,0.310030,-0.419417,0.154981,0.839019 +1329,0.309207,-0.419852,0.154704,0.839156 +1330,0.308384,-0.420286,0.154427,0.839292 +1331,0.307561,-0.420721,0.154149,0.839428 +1332,0.306738,-0.421155,0.153871,0.839562 +1333,0.305915,-0.421589,0.153592,0.839696 +1334,0.305092,-0.422022,0.153312,0.839828 +1335,0.304269,-0.422456,0.153031,0.839960 +1336,0.303446,-0.422889,0.152750,0.840091 +1337,0.302622,-0.423322,0.152468,0.840221 +1338,0.301799,-0.423755,0.152185,0.840350 +1339,0.300976,-0.424188,0.151902,0.840478 +1340,0.300153,-0.424620,0.151618,0.840606 +1341,0.299330,-0.425053,0.151334,0.840732 +1342,0.298507,-0.425485,0.151048,0.840857 +1343,0.297683,-0.425916,0.150762,0.840982 +1344,0.296860,-0.426348,0.150475,0.841106 +1345,0.296037,-0.426779,0.150188,0.841228 +1346,0.295214,-0.427211,0.149900,0.841350 +1347,0.294390,-0.427642,0.149611,0.841471 +1348,0.293567,-0.428072,0.149322,0.841591 +1349,0.292744,-0.428503,0.149032,0.841710 +1350,0.291921,-0.428933,0.148741,0.841828 +1351,0.291097,-0.429363,0.148450,0.841946 +1352,0.290274,-0.429793,0.148157,0.842062 +1353,0.289451,-0.430222,0.147865,0.842178 +1354,0.288627,-0.430652,0.147571,0.842292 +1355,0.287804,-0.431081,0.147277,0.842406 +1356,0.286981,-0.431510,0.146982,0.842519 +1357,0.286158,-0.431938,0.146686,0.842631 +1358,0.285334,-0.432367,0.146390,0.842741 +1359,0.284511,-0.432795,0.146093,0.842852 +1360,0.283688,-0.433223,0.145796,0.842961 +1361,0.282864,-0.433651,0.145497,0.843069 +1362,0.282041,-0.434078,0.145198,0.843176 +1363,0.281218,-0.434505,0.144899,0.843283 +1364,0.280394,-0.434932,0.144598,0.843388 +1365,0.279571,-0.435359,0.144297,0.843493 +1366,0.278748,-0.435786,0.143996,0.843597 +1367,0.277925,-0.436212,0.143693,0.843700 +1368,0.277101,-0.436638,0.143390,0.843802 +1369,0.276278,-0.437064,0.143087,0.843903 +1370,0.275455,-0.437489,0.142782,0.844003 +1371,0.274632,-0.437915,0.142477,0.844102 +1372,0.273809,-0.438340,0.142172,0.844200 +1373,0.272986,-0.438765,0.141865,0.844298 +1374,0.272162,-0.439189,0.141558,0.844394 +1375,0.271339,-0.439614,0.141250,0.844490 +1376,0.270516,-0.440038,0.140942,0.844585 +1377,0.269693,-0.440462,0.140633,0.844678 +1378,0.268870,-0.440885,0.140323,0.844771 +1379,0.268047,-0.441308,0.140012,0.844863 +1380,0.267224,-0.441732,0.139701,0.844955 +1381,0.266401,-0.442154,0.139390,0.845045 +1382,0.265578,-0.442577,0.139077,0.845134 +1383,0.264755,-0.442999,0.138764,0.845222 +1384,0.263932,-0.443421,0.138450,0.845310 +1385,0.263109,-0.443843,0.138136,0.845397 +1386,0.262287,-0.444265,0.137820,0.845482 +1387,0.261464,-0.444686,0.137504,0.845567 +1388,0.260641,-0.445107,0.137188,0.845651 +1389,0.259818,-0.445528,0.136871,0.845734 +1390,0.258996,-0.445948,0.136553,0.845816 +1391,0.258173,-0.446368,0.136234,0.845897 +1392,0.257350,-0.446788,0.135915,0.845978 +1393,0.256528,-0.447208,0.135595,0.846057 +1394,0.255705,-0.447628,0.135275,0.846135 +1395,0.254883,-0.448047,0.134953,0.846213 +1396,0.254060,-0.448466,0.134631,0.846290 +1397,0.253238,-0.448884,0.134309,0.846366 +1398,0.252415,-0.449303,0.133986,0.846440 +1399,0.251593,-0.449721,0.133662,0.846514 +1400,0.250771,-0.450139,0.133337,0.846588 +1401,0.249948,-0.450556,0.133012,0.846660 +1402,0.249126,-0.450973,0.132686,0.846731 +1403,0.248304,-0.451390,0.132359,0.846801 +1404,0.247482,-0.451807,0.132032,0.846871 +1405,0.246660,-0.452224,0.131704,0.846940 +1406,0.245838,-0.452640,0.131376,0.847007 +1407,0.245016,-0.453056,0.131046,0.847074 +1408,0.244194,-0.453471,0.130716,0.847140 +1409,0.243372,-0.453887,0.130386,0.847205 +1410,0.242550,-0.454302,0.130054,0.847269 +1411,0.241729,-0.454717,0.129722,0.847332 +1412,0.240907,-0.455131,0.129390,0.847395 +1413,0.240086,-0.455545,0.129057,0.847456 +1414,0.239264,-0.455959,0.128723,0.847517 +1415,0.238442,-0.456373,0.128388,0.847576 +1416,0.237621,-0.456786,0.128053,0.847635 +1417,0.236800,-0.457199,0.127717,0.847693 +1418,0.235978,-0.457612,0.127380,0.847750 +1419,0.235157,-0.458025,0.127043,0.847806 +1420,0.234336,-0.458437,0.126705,0.847861 +1421,0.233515,-0.458849,0.126366,0.847915 +1422,0.232694,-0.459260,0.126027,0.847969 +1423,0.231873,-0.459672,0.125687,0.848021 +1424,0.231052,-0.460083,0.125347,0.848073 +1425,0.230231,-0.460493,0.125005,0.848123 +1426,0.229411,-0.460904,0.124663,0.848173 +1427,0.228590,-0.461314,0.124321,0.848222 +1428,0.227769,-0.461724,0.123978,0.848270 +1429,0.226949,-0.462133,0.123634,0.848317 +1430,0.226128,-0.462543,0.123289,0.848363 +1431,0.225308,-0.462952,0.122944,0.848408 +1432,0.224488,-0.463360,0.122598,0.848453 +1433,0.223668,-0.463769,0.122252,0.848496 +1434,0.222847,-0.464177,0.121904,0.848539 +1435,0.222027,-0.464584,0.121556,0.848581 +1436,0.221208,-0.464992,0.121208,0.848622 +1437,0.220388,-0.465399,0.120859,0.848661 +1438,0.219568,-0.465806,0.120509,0.848700 +1439,0.218748,-0.466212,0.120158,0.848739 +1440,0.217929,-0.466618,0.119807,0.848776 +1441,0.217109,-0.467024,0.119455,0.848812 +1442,0.216290,-0.467430,0.119103,0.848848 +1443,0.215470,-0.467835,0.118750,0.848882 +1444,0.214651,-0.468240,0.118396,0.848916 +1445,0.213832,-0.468645,0.118042,0.848949 +1446,0.213013,-0.469049,0.117686,0.848981 +1447,0.212194,-0.469453,0.117331,0.849012 +1448,0.211375,-0.469857,0.116974,0.849042 +1449,0.210556,-0.470260,0.116617,0.849071 +1450,0.209738,-0.470663,0.116260,0.849099 +1451,0.208919,-0.471066,0.115901,0.849127 +1452,0.208101,-0.471469,0.115542,0.849153 +1453,0.207282,-0.471871,0.115182,0.849179 +1454,0.206464,-0.472273,0.114822,0.849204 +1455,0.205646,-0.472674,0.114461,0.849228 +1456,0.204828,-0.473075,0.114099,0.849251 +1457,0.204010,-0.473476,0.113737,0.849273 +1458,0.203192,-0.473877,0.113374,0.849294 +1459,0.202374,-0.474277,0.113011,0.849314 +1460,0.201557,-0.474677,0.112646,0.849334 +1461,0.200739,-0.475076,0.112281,0.849352 +1462,0.199922,-0.475475,0.111916,0.849370 +1463,0.199105,-0.475874,0.111550,0.849387 +1464,0.198287,-0.476273,0.111183,0.849403 +1465,0.197470,-0.476671,0.110815,0.849418 +1466,0.196653,-0.477069,0.110447,0.849432 +1467,0.195837,-0.477466,0.110078,0.849445 +1468,0.195020,-0.477864,0.109709,0.849457 +1469,0.194203,-0.478260,0.109339,0.849469 +1470,0.193387,-0.478657,0.108968,0.849479 +1471,0.192570,-0.479053,0.108596,0.849489 +1472,0.191754,-0.479449,0.108224,0.849498 +1473,0.190938,-0.479845,0.107852,0.849506 +1474,0.190122,-0.480240,0.107478,0.849513 +1475,0.189306,-0.480635,0.107104,0.849519 +1476,0.188491,-0.481029,0.106730,0.849524 +1477,0.187675,-0.481423,0.106354,0.849528 +1478,0.186859,-0.481817,0.105978,0.849532 +1479,0.186044,-0.482211,0.105602,0.849534 +1480,0.185229,-0.482604,0.105225,0.849536 +1481,0.184414,-0.482997,0.104847,0.849537 +1482,0.183599,-0.483389,0.104468,0.849537 +1483,0.182784,-0.483781,0.104089,0.849536 +1484,0.181969,-0.484173,0.103709,0.849534 +1485,0.181155,-0.484564,0.103329,0.849531 +1486,0.180340,-0.484955,0.102948,0.849528 +1487,0.179526,-0.485346,0.102566,0.849523 +1488,0.178712,-0.485736,0.102184,0.849518 +1489,0.177898,-0.486126,0.101801,0.849512 +1490,0.177084,-0.486516,0.101417,0.849505 +1491,0.176270,-0.486905,0.101033,0.849497 +1492,0.175457,-0.487294,0.100648,0.849488 +1493,0.174643,-0.487683,0.100262,0.849478 +1494,0.173830,-0.488071,0.099876,0.849467 +1495,0.173017,-0.488459,0.099489,0.849456 +1496,0.172204,-0.488846,0.099102,0.849443 +1497,0.171391,-0.489233,0.098713,0.849430 +1498,0.170578,-0.489620,0.098325,0.849416 +1499,0.169766,-0.490007,0.097935,0.849401 +1500,0.168953,-0.490393,0.097545,0.849385 +1501,0.168141,-0.490778,0.097154,0.849368 +1502,0.167329,-0.491164,0.096763,0.849350 +1503,0.166517,-0.491549,0.096371,0.849332 +1504,0.165705,-0.491933,0.095979,0.849312 +1505,0.164893,-0.492317,0.095585,0.849292 +1506,0.164082,-0.492701,0.095191,0.849271 +1507,0.163271,-0.493085,0.094797,0.849249 +1508,0.162459,-0.493468,0.094402,0.849226 +1509,0.161648,-0.493851,0.094006,0.849202 +1510,0.160838,-0.494233,0.093610,0.849177 +1511,0.160027,-0.494615,0.093213,0.849152 +1512,0.159216,-0.494997,0.092815,0.849125 +1513,0.158406,-0.495378,0.092417,0.849098 +1514,0.157596,-0.495759,0.092018,0.849070 +1515,0.156786,-0.496139,0.091618,0.849041 +1516,0.155976,-0.496519,0.091218,0.849011 +1517,0.155166,-0.496899,0.090817,0.848980 +1518,0.154357,-0.497279,0.090416,0.848948 +1519,0.153547,-0.497658,0.090014,0.848916 +1520,0.152738,-0.498036,0.089611,0.848882 +1521,0.151929,-0.498414,0.089208,0.848848 +1522,0.151120,-0.498792,0.088804,0.848813 +1523,0.150311,-0.499170,0.088399,0.848777 +1524,0.149503,-0.499547,0.087994,0.848740 +1525,0.148695,-0.499924,0.087588,0.848702 +1526,0.147886,-0.500300,0.087181,0.848663 +1527,0.147079,-0.500676,0.086774,0.848624 +1528,0.146271,-0.501051,0.086366,0.848583 +1529,0.145463,-0.501426,0.085958,0.848542 +1530,0.144656,-0.501801,0.085549,0.848500 +1531,0.143848,-0.502176,0.085140,0.848457 +1532,0.143041,-0.502550,0.084729,0.848413 +1533,0.142234,-0.502923,0.084318,0.848368 +1534,0.141428,-0.503296,0.083907,0.848322 +1535,0.140621,-0.503669,0.083495,0.848276 +1536,0.139815,-0.504042,0.083082,0.848228 +1537,0.139009,-0.504414,0.082669,0.848180 +1538,0.138203,-0.504785,0.082255,0.848131 +1539,0.137397,-0.505157,0.081840,0.848081 +1540,0.136592,-0.505527,0.081425,0.848030 +1541,0.135786,-0.505898,0.081009,0.847978 +1542,0.134981,-0.506268,0.080593,0.847926 +1543,0.134176,-0.506637,0.080176,0.847872 +1544,0.133371,-0.507007,0.079758,0.847818 +1545,0.132567,-0.507375,0.079339,0.847763 +1546,0.131762,-0.507744,0.078921,0.847707 +1547,0.130958,-0.508112,0.078501,0.847650 +1548,0.130154,-0.508480,0.078081,0.847592 +1549,0.129350,-0.508847,0.077660,0.847533 +1550,0.128547,-0.509214,0.077239,0.847474 +1551,0.127743,-0.509580,0.076817,0.847413 +1552,0.126940,-0.509946,0.076394,0.847352 +1553,0.126137,-0.510311,0.075971,0.847290 +1554,0.125334,-0.510677,0.075547,0.847227 +1555,0.124532,-0.511041,0.075122,0.847163 +1556,0.123729,-0.511406,0.074697,0.847098 +1557,0.122927,-0.511770,0.074271,0.847033 +1558,0.122125,-0.512133,0.073845,0.846966 +1559,0.121323,-0.512496,0.073418,0.846899 +1560,0.120522,-0.512859,0.072991,0.846831 +1561,0.119721,-0.513221,0.072562,0.846762 +1562,0.118919,-0.513583,0.072134,0.846692 +1563,0.118119,-0.513945,0.071704,0.846621 +1564,0.117318,-0.514306,0.071274,0.846550 +1565,0.116517,-0.514666,0.070844,0.846477 +1566,0.115717,-0.515026,0.070412,0.846404 +1567,0.114917,-0.515386,0.069981,0.846330 +1568,0.114117,-0.515745,0.069548,0.846255 +1569,0.113318,-0.516104,0.069115,0.846179 +1570,0.112518,-0.516463,0.068682,0.846102 +1571,0.111719,-0.516821,0.068247,0.846024 +1572,0.110920,-0.517179,0.067812,0.845946 +1573,0.110122,-0.517536,0.067377,0.845867 +1574,0.109323,-0.517893,0.066941,0.845786 +1575,0.108525,-0.518249,0.066504,0.845705 +1576,0.107727,-0.518605,0.066067,0.845623 +1577,0.106929,-0.518960,0.065629,0.845541 +1578,0.106132,-0.519315,0.065190,0.845457 +1579,0.105334,-0.519670,0.064751,0.845373 +1580,0.104537,-0.520024,0.064312,0.845287 +1581,0.103740,-0.520378,0.063871,0.845201 +1582,0.102944,-0.520731,0.063430,0.845114 +1583,0.102147,-0.521084,0.062989,0.845026 +1584,0.101351,-0.521437,0.062547,0.844938 +1585,0.100555,-0.521789,0.062104,0.844848 +1586,0.099759,-0.522140,0.061661,0.844758 +1587,0.098964,-0.522492,0.061217,0.844666 +1588,0.098169,-0.522842,0.060772,0.844574 +1589,0.097374,-0.523193,0.060327,0.844481 +1590,0.096579,-0.523542,0.059882,0.844387 +1591,0.095785,-0.523892,0.059435,0.844293 +1592,0.094990,-0.524241,0.058988,0.844197 +1593,0.094196,-0.524589,0.058541,0.844101 +1594,0.093403,-0.524937,0.058093,0.844004 +1595,0.092609,-0.525285,0.057644,0.843906 +1596,0.091816,-0.525632,0.057195,0.843807 +1597,0.091023,-0.525979,0.056745,0.843707 +1598,0.090230,-0.526325,0.056294,0.843606 +1599,0.089437,-0.526671,0.055843,0.843505 +1600,0.088645,-0.527016,0.055392,0.843402 +1601,0.087853,-0.527361,0.054939,0.843299 +1602,0.087061,-0.527706,0.054487,0.843195 +1603,0.086270,-0.528050,0.054033,0.843090 +1604,0.085479,-0.528393,0.053579,0.842985 +1605,0.084688,-0.528736,0.053124,0.842878 +1606,0.083897,-0.529079,0.052669,0.842771 +1607,0.083106,-0.529421,0.052213,0.842663 +1608,0.082316,-0.529763,0.051757,0.842553 +1609,0.081526,-0.530104,0.051300,0.842444 +1610,0.080736,-0.530445,0.050842,0.842333 +1611,0.079947,-0.530786,0.050384,0.842221 +1612,0.079158,-0.531126,0.049926,0.842109 +1613,0.078369,-0.531465,0.049466,0.841995 +1614,0.077580,-0.531804,0.049006,0.841881 +1615,0.076792,-0.532143,0.048546,0.841766 +1616,0.076004,-0.532481,0.048085,0.841651 +1617,0.075216,-0.532818,0.047623,0.841534 +1618,0.074428,-0.533155,0.047161,0.841416 +1619,0.073641,-0.533492,0.046698,0.841298 +1620,0.072854,-0.533828,0.046235,0.841179 +1621,0.072067,-0.534164,0.045771,0.841059 +1622,0.071281,-0.534499,0.045306,0.840938 +1623,0.070494,-0.534834,0.044841,0.840816 +1624,0.069709,-0.535169,0.044375,0.840694 +1625,0.068923,-0.535502,0.043909,0.840571 +1626,0.068137,-0.535836,0.043442,0.840446 +1627,0.067352,-0.536169,0.042974,0.840321 +1628,0.066567,-0.536501,0.042506,0.840195 +1629,0.065783,-0.536833,0.042038,0.840069 +1630,0.064999,-0.537165,0.041568,0.839941 +1631,0.064215,-0.537496,0.041099,0.839813 +1632,0.063431,-0.537826,0.040628,0.839684 +1633,0.062647,-0.538157,0.040157,0.839554 +1634,0.061864,-0.538486,0.039686,0.839423 +1635,0.061081,-0.538815,0.039214,0.839291 +1636,0.060299,-0.539144,0.038741,0.839159 +1637,0.059517,-0.539472,0.038268,0.839025 +1638,0.058735,-0.539800,0.037794,0.838891 +1639,0.057953,-0.540127,0.037319,0.838756 +1640,0.057171,-0.540454,0.036844,0.838620 +1641,0.056390,-0.540780,0.036369,0.838483 +1642,0.055609,-0.541106,0.035893,0.838346 +1643,0.054829,-0.541431,0.035416,0.838208 +1644,0.054049,-0.541756,0.034939,0.838068 +1645,0.053269,-0.542080,0.034461,0.837928 +1646,0.052489,-0.542404,0.033983,0.837788 +1647,0.051710,-0.542727,0.033504,0.837646 +1648,0.050930,-0.543050,0.033024,0.837503 +1649,0.050152,-0.543373,0.032544,0.837360 +1650,0.049373,-0.543694,0.032063,0.837216 +1651,0.048595,-0.544016,0.031582,0.837071 +1652,0.047817,-0.544337,0.031100,0.836925 +1653,0.047040,-0.544657,0.030618,0.836779 +1654,0.046262,-0.544977,0.030135,0.836631 +1655,0.045485,-0.545296,0.029652,0.836483 +1656,0.044709,-0.545615,0.029167,0.836334 +1657,0.043932,-0.545934,0.028683,0.836184 +1658,0.043156,-0.546252,0.028198,0.836033 +1659,0.042381,-0.546569,0.027712,0.835882 +1660,0.041605,-0.546886,0.027226,0.835729 +1661,0.040830,-0.547202,0.026739,0.835576 +1662,0.040055,-0.547518,0.026251,0.835422 +1663,0.039281,-0.547834,0.025763,0.835267 +1664,0.038506,-0.548149,0.025275,0.835112 +1665,0.037733,-0.548463,0.024786,0.834955 +1666,0.036959,-0.548777,0.024296,0.834798 +1667,0.036186,-0.549090,0.023806,0.834640 +1668,0.035413,-0.549403,0.023315,0.834481 +1669,0.034640,-0.549716,0.022824,0.834321 +1670,0.033868,-0.550028,0.022332,0.834161 +1671,0.033096,-0.550339,0.021839,0.833999 +1672,0.032324,-0.550650,0.021346,0.833837 +1673,0.031553,-0.550960,0.020853,0.833674 +1674,0.030782,-0.551270,0.020359,0.833510 +1675,0.030011,-0.551579,0.019864,0.833346 +1676,0.029241,-0.551888,0.019369,0.833180 +1677,0.028471,-0.552197,0.018873,0.833014 +1678,0.027701,-0.552504,0.018377,0.832847 +1679,0.026932,-0.552812,0.017880,0.832679 +1680,0.026163,-0.553118,0.017382,0.832510 +1681,0.025394,-0.553425,0.016884,0.832341 +1682,0.024626,-0.553731,0.016386,0.832170 +1683,0.023857,-0.554036,0.015887,0.831999 +1684,0.023090,-0.554340,0.015387,0.831827 +1685,0.022322,-0.554645,0.014887,0.831655 +1686,0.021555,-0.554948,0.014386,0.831481 +1687,0.020789,-0.555252,0.013885,0.831307 +1688,0.020022,-0.555554,0.013383,0.831132 +1689,0.019256,-0.555856,0.012881,0.830956 +1690,0.018490,-0.556158,0.012378,0.830779 +1691,0.017725,-0.556459,0.011875,0.830601 +1692,0.016960,-0.556760,0.011371,0.830423 +1693,0.016195,-0.557060,0.010866,0.830244 +1694,0.015431,-0.557359,0.010361,0.830064 +1695,0.014667,-0.557658,0.009856,0.829883 +1696,0.013903,-0.557956,0.009350,0.829701 +1697,0.013140,-0.558254,0.008843,0.829519 +1698,0.012377,-0.558552,0.008336,0.829335 +1699,0.011614,-0.558849,0.007828,0.829151 +1700,0.010852,-0.559145,0.007320,0.828967 +1701,0.010090,-0.559441,0.006811,0.828781 +1702,0.009328,-0.559736,0.006301,0.828594 +1703,0.008567,-0.560031,0.005792,0.828407 +1704,0.007806,-0.560325,0.005281,0.828219 +1705,0.007045,-0.560619,0.004770,0.828030 +1706,0.006285,-0.560912,0.004259,0.827841 +1707,0.005525,-0.561204,0.003747,0.827650 +1708,0.004766,-0.561497,0.003234,0.827459 +1709,0.004007,-0.561788,0.002721,0.827267 +1710,0.003248,-0.562079,0.002207,0.827074 +1711,0.002489,-0.562370,0.001693,0.826881 +1712,0.001731,-0.562659,0.001178,0.826686 +1713,0.000974,-0.562949,0.000663,0.826491 +1714,0.000216,-0.563238,0.000147,0.826295 +1715,-0.000541,-0.563526,-0.000369,0.826098 +1716,-0.001297,-0.563814,-0.000886,0.825901 +1717,-0.002054,-0.564101,-0.001403,0.825702 +1718,-0.002810,-0.564388,-0.001921,0.825503 +1719,-0.003565,-0.564674,-0.002439,0.825303 +1720,-0.004320,-0.564959,-0.002958,0.825102 +1721,-0.005075,-0.565244,-0.003478,0.824901 +1722,-0.005830,-0.565529,-0.003998,0.824698 +1723,-0.006584,-0.565813,-0.004518,0.824495 +1724,-0.007337,-0.566096,-0.005039,0.824291 +1725,-0.008091,-0.566379,-0.005561,0.824086 +1726,-0.008844,-0.566661,-0.006083,0.823881 +1727,-0.009596,-0.566943,-0.006605,0.823675 +1728,-0.010349,-0.567224,-0.007128,0.823468 +1729,-0.011100,-0.567505,-0.007652,0.823260 +1730,-0.011852,-0.567785,-0.008176,0.823051 +1731,-0.012603,-0.568064,-0.008701,0.822842 +1732,-0.013354,-0.568343,-0.009226,0.822631 +1733,-0.014104,-0.568622,-0.009752,0.822420 +1734,-0.014854,-0.568900,-0.010278,0.822209 +1735,-0.015604,-0.569177,-0.010805,0.821996 +1736,-0.016353,-0.569454,-0.011332,0.821783 +1737,-0.017102,-0.569730,-0.011860,0.821568 +1738,-0.017850,-0.570006,-0.012388,0.821353 +1739,-0.018598,-0.570281,-0.012917,0.821138 +1740,-0.019346,-0.570555,-0.013446,0.820921 +1741,-0.020093,-0.570829,-0.013976,0.820704 +1742,-0.020840,-0.571103,-0.014506,0.820486 +1743,-0.021587,-0.571375,-0.015037,0.820267 +1744,-0.022333,-0.571648,-0.015568,0.820047 +1745,-0.023079,-0.571919,-0.016100,0.819827 +1746,-0.023824,-0.572190,-0.016632,0.819606 +1747,-0.024569,-0.572461,-0.017165,0.819384 +1748,-0.025314,-0.572731,-0.017699,0.819161 +1749,-0.026058,-0.573000,-0.018233,0.818938 +1750,-0.026802,-0.573269,-0.018767,0.818713 +1751,-0.027545,-0.573538,-0.019302,0.818488 +1752,-0.028288,-0.573805,-0.019837,0.818263 +1753,-0.029031,-0.574073,-0.020373,0.818036 +1754,-0.029773,-0.574339,-0.020909,0.817809 +1755,-0.030515,-0.574605,-0.021446,0.817580 +1756,-0.031257,-0.574871,-0.021984,0.817352 +1757,-0.031998,-0.575135,-0.022522,0.817122 +1758,-0.032738,-0.575400,-0.023060,0.816891 +1759,-0.033479,-0.575664,-0.023599,0.816660 +1760,-0.034218,-0.575927,-0.024138,0.816428 +1761,-0.034958,-0.576189,-0.024678,0.816195 +1762,-0.035697,-0.576451,-0.025219,0.815962 +1763,-0.036436,-0.576713,-0.025760,0.815727 +1764,-0.037174,-0.576974,-0.026301,0.815492 +1765,-0.037912,-0.577234,-0.026843,0.815257 +1766,-0.038649,-0.577494,-0.027385,0.815020 +1767,-0.039386,-0.577753,-0.027928,0.814783 +1768,-0.040123,-0.578011,-0.028472,0.814544 +1769,-0.040859,-0.578269,-0.029016,0.814306 +1770,-0.041595,-0.578526,-0.029560,0.814066 +1771,-0.042330,-0.578783,-0.030105,0.813825 +1772,-0.043065,-0.579039,-0.030650,0.813584 +1773,-0.043800,-0.579295,-0.031196,0.813342 +1774,-0.044534,-0.579550,-0.031742,0.813100 +1775,-0.045268,-0.579805,-0.032289,0.812856 +1776,-0.046001,-0.580058,-0.032837,0.812612 +1777,-0.046734,-0.580312,-0.033384,0.812367 +1778,-0.047467,-0.580564,-0.033933,0.812121 +1779,-0.048199,-0.580816,-0.034481,0.811874 +1780,-0.048930,-0.581068,-0.035031,0.811627 +1781,-0.049662,-0.581319,-0.035580,0.811379 +1782,-0.050392,-0.581569,-0.036131,0.811130 +1783,-0.051123,-0.581819,-0.036681,0.810881 +1784,-0.051853,-0.582068,-0.037233,0.810630 +1785,-0.052582,-0.582317,-0.037784,0.810379 +1786,-0.053312,-0.582565,-0.038336,0.810128 +1787,-0.054040,-0.582812,-0.038889,0.809875 +1788,-0.054769,-0.583059,-0.039442,0.809622 +1789,-0.055496,-0.583305,-0.039996,0.809368 +1790,-0.056224,-0.583550,-0.040550,0.809113 +1791,-0.056951,-0.583795,-0.041105,0.808857 +1792,-0.057678,-0.584040,-0.041660,0.808601 +1793,-0.058404,-0.584284,-0.042215,0.808344 +1794,-0.059129,-0.584527,-0.042771,0.808086 +1795,-0.059855,-0.584769,-0.043328,0.807827 +1796,-0.060580,-0.585011,-0.043885,0.807568 +1797,-0.061304,-0.585253,-0.044442,0.807308 +1798,-0.062028,-0.585494,-0.045000,0.807047 +1799,-0.062752,-0.585734,-0.045558,0.806785 +1800,-0.063475,-0.585973,-0.046117,0.806523 +1801,-0.064197,-0.586212,-0.046676,0.806260 +1802,-0.064920,-0.586451,-0.047236,0.805996 +1803,-0.065642,-0.586688,-0.047796,0.805732 +1804,-0.066363,-0.586926,-0.048357,0.805466 +1805,-0.067084,-0.587162,-0.048918,0.805200 +1806,-0.067804,-0.587398,-0.049480,0.804933 +1807,-0.068524,-0.587633,-0.050042,0.804666 +1808,-0.069244,-0.587868,-0.050605,0.804398 +1809,-0.069963,-0.588102,-0.051168,0.804129 +1810,-0.070682,-0.588336,-0.051731,0.803859 +1811,-0.071400,-0.588569,-0.052295,0.803588 +1812,-0.072118,-0.588801,-0.052860,0.803317 +1813,-0.072836,-0.589033,-0.053425,0.803045 +1814,-0.073552,-0.589264,-0.053990,0.802772 +1815,-0.074269,-0.589494,-0.054556,0.802499 +1816,-0.074985,-0.589724,-0.055122,0.802225 +1817,-0.075701,-0.589953,-0.055689,0.801950 +1818,-0.076416,-0.590182,-0.056256,0.801674 +1819,-0.077131,-0.590410,-0.056824,0.801398 +1820,-0.077845,-0.590637,-0.057392,0.801121 +1821,-0.078559,-0.590864,-0.057961,0.800843 +1822,-0.079272,-0.591090,-0.058530,0.800564 +1823,-0.079985,-0.591315,-0.059099,0.800285 +1824,-0.080697,-0.591540,-0.059669,0.800005 +1825,-0.081409,-0.591765,-0.060240,0.799724 +1826,-0.082121,-0.591988,-0.060811,0.799442 +1827,-0.082832,-0.592211,-0.061382,0.799160 +1828,-0.083542,-0.592434,-0.061954,0.798877 +1829,-0.084253,-0.592655,-0.062526,0.798593 +1830,-0.084962,-0.592877,-0.063099,0.798309 +1831,-0.085672,-0.593097,-0.063672,0.798024 +1832,-0.086380,-0.593317,-0.064245,0.797738 +1833,-0.087089,-0.593536,-0.064819,0.797451 +1834,-0.087796,-0.593755,-0.065394,0.797164 +1835,-0.088504,-0.593973,-0.065969,0.796876 +1836,-0.089211,-0.594190,-0.066544,0.796587 +1837,-0.089917,-0.594407,-0.067120,0.796298 +1838,-0.090623,-0.594623,-0.067696,0.796007 +1839,-0.091329,-0.594839,-0.068273,0.795716 +1840,-0.092034,-0.595054,-0.068850,0.795425 +1841,-0.092738,-0.595268,-0.069428,0.795132 +1842,-0.093442,-0.595482,-0.070006,0.794839 +1843,-0.094146,-0.595695,-0.070584,0.794545 +1844,-0.094849,-0.595907,-0.071163,0.794251 +1845,-0.095552,-0.596119,-0.071742,0.793956 +1846,-0.096254,-0.596330,-0.072322,0.793660 +1847,-0.096956,-0.596540,-0.072902,0.793363 +1848,-0.097657,-0.596750,-0.073483,0.793065 +1849,-0.098358,-0.596959,-0.074064,0.792767 +1850,-0.099058,-0.597168,-0.074646,0.792468 +1851,-0.099758,-0.597376,-0.075228,0.792169 +1852,-0.100458,-0.597583,-0.075810,0.791869 +1853,-0.101156,-0.597790,-0.076393,0.791568 +1854,-0.101855,-0.597996,-0.076976,0.791266 +1855,-0.102553,-0.598201,-0.077560,0.790963 +1856,-0.103250,-0.598406,-0.078144,0.790660 +1857,-0.103947,-0.598610,-0.078729,0.790356 +1858,-0.104644,-0.598813,-0.079314,0.790052 +1859,-0.105340,-0.599016,-0.079899,0.789747 +1860,-0.106035,-0.599218,-0.080485,0.789441 +1861,-0.106730,-0.599420,-0.081071,0.789134 +1862,-0.107425,-0.599620,-0.081658,0.788827 +1863,-0.108119,-0.599821,-0.082245,0.788518 +1864,-0.108812,-0.600020,-0.082833,0.788210 +1865,-0.109505,-0.600219,-0.083421,0.787900 +1866,-0.110198,-0.600417,-0.084009,0.787590 +1867,-0.110890,-0.600615,-0.084598,0.787279 +1868,-0.111582,-0.600812,-0.085187,0.786967 +1869,-0.112273,-0.601008,-0.085777,0.786655 +1870,-0.112963,-0.601204,-0.086367,0.786342 +1871,-0.113654,-0.601399,-0.086958,0.786028 +1872,-0.114343,-0.601593,-0.087549,0.785714 +1873,-0.115032,-0.601787,-0.088140,0.785399 +1874,-0.115721,-0.601980,-0.088732,0.785083 +1875,-0.116409,-0.602173,-0.089324,0.784766 +1876,-0.117097,-0.602364,-0.089916,0.784449 +1877,-0.117784,-0.602555,-0.090509,0.784131 +1878,-0.118471,-0.602746,-0.091103,0.783813 +1879,-0.119157,-0.602936,-0.091697,0.783493 +1880,-0.119842,-0.603125,-0.092291,0.783173 +1881,-0.120528,-0.603313,-0.092886,0.782853 +1882,-0.121212,-0.603501,-0.093481,0.782531 +1883,-0.121896,-0.603688,-0.094076,0.782209 +1884,-0.122580,-0.603875,-0.094672,0.781887 +1885,-0.123263,-0.604061,-0.095269,0.781563 +1886,-0.123946,-0.604246,-0.095865,0.781239 +1887,-0.124628,-0.604430,-0.096462,0.780914 +1888,-0.125310,-0.604614,-0.097060,0.780589 +1889,-0.125991,-0.604797,-0.097658,0.780262 +1890,-0.126671,-0.604980,-0.098256,0.779935 +1891,-0.127351,-0.605162,-0.098855,0.779608 +1892,-0.128031,-0.605343,-0.099454,0.779280 +1893,-0.128710,-0.605524,-0.100054,0.778951 +1894,-0.129389,-0.605704,-0.100654,0.778621 +1895,-0.130067,-0.605883,-0.101254,0.778291 +1896,-0.130744,-0.606061,-0.101855,0.777960 +1897,-0.131421,-0.606239,-0.102456,0.777628 +1898,-0.132098,-0.606416,-0.103058,0.777296 +1899,-0.132774,-0.606593,-0.103660,0.776963 +1900,-0.133449,-0.606769,-0.104262,0.776629 +1901,-0.134124,-0.606944,-0.104865,0.776294 +1902,-0.134799,-0.607119,-0.105468,0.775959 +1903,-0.135473,-0.607293,-0.106071,0.775623 +1904,-0.136146,-0.607466,-0.106675,0.775287 +1905,-0.136819,-0.607638,-0.107280,0.774950 +1906,-0.137491,-0.607810,-0.107884,0.774612 +1907,-0.138163,-0.607981,-0.108490,0.774274 +1908,-0.138834,-0.608152,-0.109095,0.773934 +1909,-0.139505,-0.608322,-0.109701,0.773595 +1910,-0.140176,-0.608491,-0.110307,0.773254 +1911,-0.140845,-0.608659,-0.110914,0.772913 +1912,-0.141515,-0.608827,-0.111521,0.772571 +1913,-0.142183,-0.608994,-0.112129,0.772229 +1914,-0.142851,-0.609161,-0.112736,0.771885 +1915,-0.143519,-0.609327,-0.113345,0.771541 +1916,-0.144186,-0.609492,-0.113953,0.771197 +1917,-0.144853,-0.609656,-0.114562,0.770852 +1918,-0.145519,-0.609820,-0.115172,0.770506 +1919,-0.146184,-0.609983,-0.115781,0.770159 +1920,-0.146850,-0.610146,-0.116391,0.769812 +1921,-0.147514,-0.610307,-0.117002,0.769464 +1922,-0.148178,-0.610468,-0.117613,0.769116 +1923,-0.148841,-0.610629,-0.118224,0.768766 +1924,-0.149504,-0.610788,-0.118836,0.768417 +1925,-0.150167,-0.610947,-0.119448,0.768066 +1926,-0.150828,-0.611106,-0.120060,0.767715 +1927,-0.151490,-0.611263,-0.120673,0.767363 +1928,-0.152150,-0.611420,-0.121286,0.767011 +1929,-0.152811,-0.611577,-0.121900,0.766657 +1930,-0.153470,-0.611732,-0.122514,0.766304 +1931,-0.154129,-0.611887,-0.123128,0.765949 +1932,-0.154788,-0.612041,-0.123743,0.765594 +1933,-0.155446,-0.612195,-0.124358,0.765238 +1934,-0.156104,-0.612348,-0.124973,0.764882 +1935,-0.156761,-0.612500,-0.125589,0.764525 +1936,-0.157417,-0.612651,-0.126205,0.764167 +1937,-0.158073,-0.612802,-0.126822,0.763808 +1938,-0.158728,-0.612952,-0.127438,0.763449 +1939,-0.159383,-0.613101,-0.128056,0.763090 +1940,-0.160037,-0.613250,-0.128673,0.762729 +1941,-0.160691,-0.613398,-0.129291,0.762368 +1942,-0.161344,-0.613545,-0.129910,0.762006 +1943,-0.161997,-0.613692,-0.130528,0.761644 +1944,-0.162649,-0.613838,-0.131147,0.761281 +1945,-0.163300,-0.613983,-0.131767,0.760917 +1946,-0.163951,-0.614128,-0.132386,0.760553 +1947,-0.164602,-0.614271,-0.133007,0.760188 +1948,-0.165251,-0.614415,-0.133627,0.759823 +1949,-0.165901,-0.614557,-0.134248,0.759457 +1950,-0.166549,-0.614699,-0.134869,0.759090 +1951,-0.167198,-0.614840,-0.135491,0.758722 +1952,-0.167845,-0.614980,-0.136113,0.758354 +1953,-0.168492,-0.615120,-0.136735,0.757985 +1954,-0.169139,-0.615259,-0.137357,0.757616 +1955,-0.169785,-0.615397,-0.137980,0.757246 +1956,-0.170430,-0.615534,-0.138604,0.756875 +1957,-0.171075,-0.615671,-0.139227,0.756504 +1958,-0.171720,-0.615807,-0.139852,0.756132 +1959,-0.172363,-0.615943,-0.140476,0.755759 +1960,-0.173006,-0.616078,-0.141101,0.755386 +1961,-0.173649,-0.616212,-0.141726,0.755012 +1962,-0.174291,-0.616345,-0.142351,0.754637 +1963,-0.174933,-0.616478,-0.142977,0.754262 +1964,-0.175574,-0.616610,-0.143603,0.753886 +1965,-0.176214,-0.616741,-0.144229,0.753510 +1966,-0.176854,-0.616871,-0.144856,0.753133 +1967,-0.177493,-0.617001,-0.145483,0.752755 +1968,-0.178132,-0.617130,-0.146111,0.752377 +1969,-0.178770,-0.617259,-0.146739,0.751998 +1970,-0.179407,-0.617386,-0.147367,0.751618 +1971,-0.180044,-0.617513,-0.147995,0.751238 +1972,-0.180681,-0.617640,-0.148624,0.750857 +1973,-0.181317,-0.617765,-0.149253,0.750476 +1974,-0.181952,-0.617890,-0.149883,0.750094 +1975,-0.182587,-0.618014,-0.150513,0.749711 +1976,-0.183221,-0.618138,-0.151143,0.749328 +1977,-0.183854,-0.618260,-0.151773,0.748944 +1978,-0.184487,-0.618382,-0.152404,0.748559 +1979,-0.185120,-0.618504,-0.153036,0.748174 +1980,-0.185752,-0.618624,-0.153667,0.747788 +1981,-0.186383,-0.618744,-0.154299,0.747402 +1982,-0.187013,-0.618863,-0.154931,0.747015 +1983,-0.187644,-0.618982,-0.155564,0.746627 +1984,-0.188273,-0.619099,-0.156196,0.746239 +1985,-0.188902,-0.619216,-0.156830,0.745850 +1986,-0.189531,-0.619333,-0.157463,0.745460 +1987,-0.190158,-0.619448,-0.158097,0.745070 +1988,-0.190786,-0.619563,-0.158731,0.744679 +1989,-0.191412,-0.619677,-0.159365,0.744288 +1990,-0.192038,-0.619791,-0.160000,0.743896 +1991,-0.192664,-0.619903,-0.160635,0.743503 +1992,-0.193289,-0.620015,-0.161271,0.743110 +1993,-0.193913,-0.620127,-0.161907,0.742716 +1994,-0.194537,-0.620237,-0.162543,0.742322 +1995,-0.195160,-0.620347,-0.163179,0.741927 +1996,-0.195782,-0.620456,-0.163816,0.741531 +1997,-0.196404,-0.620564,-0.164453,0.741135 +1998,-0.197026,-0.620672,-0.165090,0.740738 +1999,-0.197647,-0.620779,-0.165728,0.740340 +2000,-0.198267,-0.620885,-0.166366,0.739942 +2001,-0.198887,-0.620991,-0.167004,0.739543 +2002,-0.199506,-0.621095,-0.167643,0.739144 +2003,-0.200124,-0.621199,-0.168281,0.738744 +2004,-0.200742,-0.621303,-0.168921,0.738344 +2005,-0.201359,-0.621405,-0.169560,0.737943 +2006,-0.201976,-0.621507,-0.170200,0.737541 +2007,-0.202592,-0.621608,-0.170840,0.737139 +2008,-0.203208,-0.621709,-0.171481,0.736736 +2009,-0.203822,-0.621808,-0.172121,0.736332 +2010,-0.204437,-0.621907,-0.172762,0.735928 +2011,-0.205050,-0.622006,-0.173404,0.735523 +2012,-0.205664,-0.622103,-0.174045,0.735118 +2013,-0.206276,-0.622200,-0.174687,0.734712 +2014,-0.206888,-0.622296,-0.175330,0.734306 +2015,-0.207499,-0.622391,-0.175972,0.733898 +2016,-0.208110,-0.622486,-0.176615,0.733491 +2017,-0.208720,-0.622580,-0.177258,0.733083 +2018,-0.209330,-0.622673,-0.177902,0.732674 +2019,-0.209939,-0.622765,-0.178546,0.732264 +2020,-0.210547,-0.622857,-0.179190,0.731854 +2021,-0.211155,-0.622948,-0.179834,0.731444 +2022,-0.211762,-0.623038,-0.180479,0.731032 +2023,-0.212369,-0.623127,-0.181124,0.730620 +2024,-0.212975,-0.623216,-0.181769,0.730208 +2025,-0.213580,-0.623304,-0.182414,0.729795 +2026,-0.214185,-0.623391,-0.183060,0.729382 +2027,-0.214789,-0.623478,-0.183706,0.728967 +2028,-0.215392,-0.623563,-0.184353,0.728553 +2029,-0.215995,-0.623648,-0.184999,0.728137 +2030,-0.216597,-0.623733,-0.185646,0.727721 +2031,-0.217199,-0.623816,-0.186294,0.727305 +2032,-0.217800,-0.623899,-0.186941,0.726888 +2033,-0.218401,-0.623981,-0.187589,0.726470 +2034,-0.219001,-0.624062,-0.188237,0.726052 +2035,-0.219600,-0.624143,-0.188886,0.725633 +2036,-0.220199,-0.624223,-0.189534,0.725214 +2037,-0.220797,-0.624302,-0.190183,0.724794 +2038,-0.221394,-0.624380,-0.190833,0.724373 +2039,-0.221991,-0.624458,-0.191482,0.723952 +2040,-0.222587,-0.624535,-0.192132,0.723531 +2041,-0.223183,-0.624611,-0.192782,0.723108 +2042,-0.223778,-0.624686,-0.193432,0.722686 +2043,-0.224372,-0.624761,-0.194083,0.722262 +2044,-0.224966,-0.624835,-0.194734,0.721838 +2045,-0.225559,-0.624908,-0.195385,0.721414 +2046,-0.226151,-0.624981,-0.196037,0.720989 +2047,-0.226743,-0.625052,-0.196688,0.720563 +2048,-0.227335,-0.625123,-0.197340,0.720137 +2049,-0.227925,-0.625193,-0.197993,0.719710 +2050,-0.228515,-0.625263,-0.198645,0.719282 +2051,-0.229105,-0.625331,-0.199298,0.718855 +2052,-0.229694,-0.625399,-0.199951,0.718426 +2053,-0.230282,-0.625467,-0.200605,0.717997 +2054,-0.230869,-0.625533,-0.201258,0.717567 +2055,-0.231456,-0.625599,-0.201912,0.717137 +2056,-0.232043,-0.625664,-0.202566,0.716706 +2057,-0.232628,-0.625728,-0.203221,0.716275 +2058,-0.233213,-0.625791,-0.203875,0.715843 +2059,-0.233798,-0.625854,-0.204530,0.715411 +2060,-0.234382,-0.625916,-0.205186,0.714978 +2061,-0.234965,-0.625977,-0.205841,0.714544 +2062,-0.235547,-0.626037,-0.206497,0.714110 +2063,-0.236129,-0.626097,-0.207153,0.713676 +2064,-0.236711,-0.626156,-0.207809,0.713241 +2065,-0.237291,-0.626214,-0.208466,0.712805 +2066,-0.237871,-0.626272,-0.209122,0.712368 +2067,-0.238451,-0.626328,-0.209779,0.711932 +2068,-0.239030,-0.626384,-0.210437,0.711494 +2069,-0.239608,-0.626439,-0.211094,0.711056 +2070,-0.240185,-0.626494,-0.211752,0.710618 +2071,-0.240762,-0.626547,-0.212410,0.710179 +2072,-0.241338,-0.626600,-0.213068,0.709739 +2073,-0.241914,-0.626653,-0.213727,0.709299 +2074,-0.242489,-0.626704,-0.214385,0.708858 +2075,-0.243064,-0.626755,-0.215044,0.708417 +2076,-0.243637,-0.626804,-0.215704,0.707975 +2077,-0.244210,-0.626853,-0.216363,0.707533 +2078,-0.244783,-0.626902,-0.217023,0.707090 +2079,-0.245355,-0.626949,-0.217683,0.706647 +2080,-0.245926,-0.626996,-0.218343,0.706203 +2081,-0.246496,-0.627042,-0.219004,0.705758 +2082,-0.247066,-0.627088,-0.219664,0.705313 +2083,-0.247636,-0.627132,-0.220325,0.704868 +2084,-0.248204,-0.627176,-0.220987,0.704422 +2085,-0.248772,-0.627219,-0.221648,0.703975 +2086,-0.249340,-0.627261,-0.222310,0.703528 +2087,-0.249906,-0.627303,-0.222972,0.703080 +2088,-0.250472,-0.627343,-0.223634,0.702632 +2089,-0.251038,-0.627383,-0.224296,0.702183 +2090,-0.251603,-0.627423,-0.224959,0.701734 +2091,-0.252167,-0.627461,-0.225622,0.701284 +2092,-0.252730,-0.627499,-0.226285,0.700834 +2093,-0.253293,-0.627536,-0.226948,0.700383 +2094,-0.253855,-0.627572,-0.227611,0.699932 +2095,-0.254417,-0.627607,-0.228275,0.699480 +2096,-0.254978,-0.627642,-0.228939,0.699027 +2097,-0.255538,-0.627676,-0.229603,0.698574 +2098,-0.256098,-0.627709,-0.230268,0.698121 +2099,-0.256657,-0.627741,-0.230933,0.697667 +2100,-0.257215,-0.627773,-0.231598,0.697212 +2101,-0.257773,-0.627803,-0.232263,0.696757 +2102,-0.258330,-0.627833,-0.232928,0.696301 +2103,-0.258886,-0.627863,-0.233594,0.695845 +2104,-0.259442,-0.627891,-0.234259,0.695389 +2105,-0.259997,-0.627919,-0.234925,0.694931 +2106,-0.260551,-0.627946,-0.235592,0.694474 +2107,-0.261105,-0.627972,-0.236258,0.694016 +2108,-0.261658,-0.627997,-0.236925,0.693557 +2109,-0.262211,-0.628022,-0.237592,0.693098 +2110,-0.262763,-0.628046,-0.238259,0.692638 +2111,-0.263314,-0.628069,-0.238926,0.692178 +2112,-0.263864,-0.628091,-0.239593,0.691717 +2113,-0.264414,-0.628113,-0.240261,0.691256 +2114,-0.264963,-0.628133,-0.240929,0.690794 +2115,-0.265512,-0.628153,-0.241597,0.690331 +2116,-0.266060,-0.628173,-0.242266,0.689869 +2117,-0.266607,-0.628191,-0.242934,0.689405 +2118,-0.267154,-0.628209,-0.243603,0.688942 +2119,-0.267700,-0.628226,-0.244272,0.688477 +2120,-0.268245,-0.628242,-0.244941,0.688012 +2121,-0.268789,-0.628257,-0.245611,0.687547 +2122,-0.269333,-0.628272,-0.246280,0.687081 +2123,-0.269877,-0.628285,-0.246950,0.686615 +2124,-0.270419,-0.628298,-0.247620,0.686148 +2125,-0.270961,-0.628311,-0.248290,0.685681 +2126,-0.271502,-0.628322,-0.248961,0.685213 +2127,-0.272043,-0.628333,-0.249631,0.684744 +2128,-0.272583,-0.628343,-0.250302,0.684276 +2129,-0.273122,-0.628352,-0.250973,0.683806 +2130,-0.273661,-0.628360,-0.251644,0.683336 +2131,-0.274199,-0.628368,-0.252316,0.682866 +2132,-0.274736,-0.628374,-0.252987,0.682395 +2133,-0.275273,-0.628380,-0.253659,0.681924 +2134,-0.275809,-0.628386,-0.254331,0.681452 +2135,-0.276344,-0.628390,-0.255003,0.680980 +2136,-0.276879,-0.628394,-0.255675,0.680507 +2137,-0.277413,-0.628397,-0.256348,0.680034 +2138,-0.277946,-0.628399,-0.257021,0.679560 +2139,-0.278479,-0.628400,-0.257694,0.679086 +2140,-0.279011,-0.628400,-0.258367,0.678611 +2141,-0.279542,-0.628400,-0.259040,0.678136 +2142,-0.280073,-0.628399,-0.259713,0.677660 +2143,-0.280602,-0.628397,-0.260387,0.677184 +2144,-0.281132,-0.628395,-0.261061,0.676707 +2145,-0.281660,-0.628391,-0.261735,0.676230 +2146,-0.282188,-0.628387,-0.262409,0.675752 +2147,-0.282716,-0.628382,-0.263084,0.675274 +2148,-0.283242,-0.628377,-0.263758,0.674795 +2149,-0.283768,-0.628370,-0.264433,0.674316 +2150,-0.284293,-0.628363,-0.265108,0.673836 +2151,-0.284818,-0.628355,-0.265783,0.673356 +2152,-0.285342,-0.628346,-0.266458,0.672876 +2153,-0.285865,-0.628336,-0.267134,0.672395 +2154,-0.286387,-0.628326,-0.267809,0.671913 +2155,-0.286909,-0.628314,-0.268485,0.671431 +2156,-0.287430,-0.628302,-0.269161,0.670949 +2157,-0.287951,-0.628289,-0.269837,0.670466 +2158,-0.288471,-0.628276,-0.270513,0.669983 +2159,-0.288990,-0.628261,-0.271190,0.669499 +2160,-0.289508,-0.628246,-0.271866,0.669014 +2161,-0.290026,-0.628230,-0.272543,0.668530 +2162,-0.290543,-0.628214,-0.273220,0.668044 +2163,-0.291060,-0.628196,-0.273897,0.667558 +2164,-0.291575,-0.628178,-0.274575,0.667072 +2165,-0.292090,-0.628158,-0.275252,0.666586 +2166,-0.292605,-0.628139,-0.275930,0.666098 +2167,-0.293118,-0.628118,-0.276607,0.665611 +2168,-0.293631,-0.628096,-0.277285,0.665123 +2169,-0.294144,-0.628074,-0.277964,0.664634 +2170,-0.294655,-0.628051,-0.278642,0.664145 +2171,-0.295166,-0.628027,-0.279320,0.663656 +2172,-0.295677,-0.628002,-0.279999,0.663166 +2173,-0.296186,-0.627977,-0.280677,0.662676 +2174,-0.296695,-0.627951,-0.281356,0.662185 +2175,-0.297203,-0.627924,-0.282035,0.661693 +2176,-0.297711,-0.627896,-0.282715,0.661202 +2177,-0.298218,-0.627867,-0.283394,0.660709 +2178,-0.298724,-0.627838,-0.284073,0.660217 +2179,-0.299229,-0.627807,-0.284753,0.659724 +2180,-0.299734,-0.627776,-0.285433,0.659230 +2181,-0.300238,-0.627745,-0.286113,0.658736 +2182,-0.300741,-0.627712,-0.286793,0.658242 +2183,-0.301244,-0.627679,-0.287473,0.657747 +2184,-0.301746,-0.627644,-0.288153,0.657251 +2185,-0.302247,-0.627609,-0.288834,0.656756 +2186,-0.302748,-0.627574,-0.289515,0.656259 +2187,-0.303248,-0.627537,-0.290195,0.655763 +2188,-0.303747,-0.627500,-0.290876,0.655266 +2189,-0.304246,-0.627461,-0.291557,0.654768 +2190,-0.304744,-0.627422,-0.292239,0.654270 +2191,-0.305241,-0.627383,-0.292920,0.653771 +2192,-0.305737,-0.627342,-0.293601,0.653273 +2193,-0.306233,-0.627301,-0.294283,0.652773 +2194,-0.306728,-0.627258,-0.294965,0.652273 +2195,-0.307222,-0.627215,-0.295647,0.651773 +2196,-0.307716,-0.627172,-0.296329,0.651273 +2197,-0.308209,-0.627127,-0.297011,0.650771 +2198,-0.308701,-0.627082,-0.297693,0.650270 +2199,-0.309193,-0.627035,-0.298376,0.649768 +2200,-0.309684,-0.626988,-0.299058,0.649266 +2201,-0.310174,-0.626941,-0.299741,0.648763 +2202,-0.310663,-0.626892,-0.300424,0.648259 +2203,-0.311152,-0.626843,-0.301107,0.647756 +2204,-0.311640,-0.626792,-0.301790,0.647252 +2205,-0.312128,-0.626741,-0.302473,0.646747 +2206,-0.312614,-0.626690,-0.303156,0.646242 +2207,-0.313100,-0.626637,-0.303839,0.645737 +2208,-0.313586,-0.626584,-0.304523,0.645231 +2209,-0.314070,-0.626529,-0.305207,0.644724 +2210,-0.314554,-0.626474,-0.305890,0.644218 +2211,-0.315037,-0.626419,-0.306574,0.643711 +2212,-0.315520,-0.626362,-0.307258,0.643203 +2213,-0.316001,-0.626305,-0.307942,0.642695 +2214,-0.316482,-0.626246,-0.308627,0.642187 +2215,-0.316963,-0.626187,-0.309311,0.641678 +2216,-0.317442,-0.626127,-0.309996,0.641169 +2217,-0.317921,-0.626067,-0.310680,0.640659 +2218,-0.318400,-0.626005,-0.311365,0.640149 +2219,-0.318877,-0.625943,-0.312050,0.639639 +2220,-0.319354,-0.625880,-0.312735,0.639128 +2221,-0.319830,-0.625816,-0.313420,0.638616 +2222,-0.320306,-0.625752,-0.314105,0.638105 +2223,-0.320780,-0.625686,-0.314790,0.637593 +2224,-0.321254,-0.625620,-0.315475,0.637080 +2225,-0.321727,-0.625553,-0.316161,0.636567 +2226,-0.322200,-0.625485,-0.316846,0.636054 +2227,-0.322672,-0.625416,-0.317532,0.635540 +2228,-0.323143,-0.625347,-0.318218,0.635026 +2229,-0.323614,-0.625276,-0.318904,0.634511 +2230,-0.324083,-0.625205,-0.319589,0.633996 +2231,-0.324552,-0.625133,-0.320276,0.633481 +2232,-0.325021,-0.625060,-0.320962,0.632965 +2233,-0.325488,-0.624987,-0.321648,0.632449 +2234,-0.325955,-0.624913,-0.322334,0.631932 +2235,-0.326421,-0.624837,-0.323021,0.631415 +2236,-0.326887,-0.624761,-0.323707,0.630898 +2237,-0.327351,-0.624685,-0.324394,0.630380 +2238,-0.327815,-0.624607,-0.325081,0.629862 +2239,-0.328279,-0.624529,-0.325767,0.629343 +2240,-0.328741,-0.624449,-0.326454,0.628824 +2241,-0.329203,-0.624369,-0.327141,0.628305 +2242,-0.329664,-0.624288,-0.327828,0.627785 +2243,-0.330125,-0.624207,-0.328515,0.627265 +2244,-0.330585,-0.624124,-0.329203,0.626744 +2245,-0.331044,-0.624041,-0.329890,0.626223 +2246,-0.331502,-0.623957,-0.330577,0.625702 +2247,-0.331959,-0.623872,-0.331265,0.625180 +2248,-0.332416,-0.623786,-0.331952,0.624658 +2249,-0.332872,-0.623700,-0.332640,0.624135 +2250,-0.333328,-0.623613,-0.333328,0.623613 +2251,-0.333783,-0.623524,-0.334016,0.623089 +2252,-0.334237,-0.623435,-0.334704,0.622566 +2253,-0.334690,-0.623346,-0.335391,0.622041 +2254,-0.335142,-0.623255,-0.336080,0.621517 +2255,-0.335594,-0.623164,-0.336768,0.620992 +2256,-0.336045,-0.623071,-0.337456,0.620467 +2257,-0.336496,-0.622978,-0.338144,0.619941 +2258,-0.336945,-0.622885,-0.338832,0.619415 +2259,-0.337394,-0.622790,-0.339521,0.618889 +2260,-0.337842,-0.622694,-0.340209,0.618362 +2261,-0.338290,-0.622598,-0.340898,0.617835 +2262,-0.338737,-0.622501,-0.341586,0.617308 +2263,-0.339183,-0.622403,-0.342275,0.616780 +2264,-0.339628,-0.622304,-0.342964,0.616252 +2265,-0.340073,-0.622205,-0.343653,0.615723 +2266,-0.340516,-0.622104,-0.344341,0.615194 +2267,-0.340960,-0.622003,-0.345030,0.614665 +2268,-0.341402,-0.621901,-0.345719,0.614135 +2269,-0.341844,-0.621798,-0.346408,0.613605 +2270,-0.342285,-0.621695,-0.347098,0.613074 +2271,-0.342725,-0.621590,-0.347787,0.612543 +2272,-0.343164,-0.621485,-0.348476,0.612012 +2273,-0.343603,-0.621379,-0.349165,0.611481 +2274,-0.344041,-0.621272,-0.349855,0.610949 +2275,-0.344479,-0.621164,-0.350544,0.610417 +2276,-0.344915,-0.621056,-0.351233,0.609884 +2277,-0.345351,-0.620946,-0.351923,0.609351 +2278,-0.345786,-0.620836,-0.352612,0.608817 +2279,-0.346221,-0.620725,-0.353302,0.608284 +2280,-0.346654,-0.620613,-0.353992,0.607750 +2281,-0.347087,-0.620501,-0.354681,0.607215 +2282,-0.347519,-0.620387,-0.355371,0.606680 +2283,-0.347951,-0.620273,-0.356061,0.606145 +2284,-0.348382,-0.620158,-0.356751,0.605610 +2285,-0.348812,-0.620042,-0.357441,0.605074 +2286,-0.349241,-0.619925,-0.358131,0.604538 +2287,-0.349670,-0.619808,-0.358821,0.604001 +2288,-0.350097,-0.619690,-0.359511,0.603464 +2289,-0.350524,-0.619570,-0.360201,0.602927 +2290,-0.350951,-0.619450,-0.360891,0.602389 +2291,-0.351376,-0.619330,-0.361581,0.601851 +2292,-0.351801,-0.619208,-0.362271,0.601313 +2293,-0.352226,-0.619085,-0.362961,0.600774 +2294,-0.352649,-0.618962,-0.363651,0.600235 +2295,-0.353072,-0.618838,-0.364342,0.599696 +2296,-0.353494,-0.618713,-0.365032,0.599156 +2297,-0.353915,-0.618587,-0.365722,0.598616 +2298,-0.354335,-0.618461,-0.366413,0.598076 +2299,-0.354755,-0.618333,-0.367103,0.597535 +2300,-0.355174,-0.618205,-0.367793,0.596994 +2301,-0.355592,-0.618076,-0.368484,0.596452 +2302,-0.356010,-0.617946,-0.369174,0.595911 +2303,-0.356427,-0.617816,-0.369865,0.595369 +2304,-0.356843,-0.617684,-0.370555,0.594826 +2305,-0.357258,-0.617552,-0.371246,0.594283 +2306,-0.357673,-0.617419,-0.371937,0.593740 +2307,-0.358086,-0.617285,-0.372627,0.593197 +2308,-0.358500,-0.617150,-0.373318,0.592653 +2309,-0.358912,-0.617014,-0.374008,0.592109 +2310,-0.359324,-0.616878,-0.374699,0.591565 +2311,-0.359734,-0.616741,-0.375390,0.591020 +2312,-0.360145,-0.616603,-0.376080,0.590475 +2313,-0.360554,-0.616464,-0.376771,0.589929 +2314,-0.360963,-0.616324,-0.377462,0.589384 +2315,-0.361371,-0.616183,-0.378153,0.588838 +2316,-0.361778,-0.616042,-0.378843,0.588291 +2317,-0.362184,-0.615900,-0.379534,0.587745 +2318,-0.362590,-0.615757,-0.380225,0.587198 +2319,-0.362995,-0.615613,-0.380916,0.586650 +2320,-0.363399,-0.615468,-0.381607,0.586103 +2321,-0.363802,-0.615323,-0.382297,0.585555 +2322,-0.364205,-0.615177,-0.382988,0.585006 +2323,-0.364607,-0.615029,-0.383679,0.584458 +2324,-0.365008,-0.614881,-0.384370,0.583909 +2325,-0.365409,-0.614733,-0.385061,0.583360 +2326,-0.365809,-0.614583,-0.385751,0.582810 +2327,-0.366208,-0.614433,-0.386442,0.582260 +2328,-0.366606,-0.614281,-0.387133,0.581710 +2329,-0.367003,-0.614129,-0.387824,0.581159 +2330,-0.367400,-0.613976,-0.388515,0.580609 +2331,-0.367796,-0.613823,-0.389206,0.580057 +2332,-0.368191,-0.613668,-0.389896,0.579506 +2333,-0.368586,-0.613513,-0.390587,0.578954 +2334,-0.368980,-0.613356,-0.391278,0.578402 +2335,-0.369373,-0.613199,-0.391969,0.577850 +2336,-0.369765,-0.613042,-0.392660,0.577297 +2337,-0.370157,-0.612883,-0.393351,0.576744 +2338,-0.370547,-0.612723,-0.394041,0.576191 +2339,-0.370937,-0.612563,-0.394732,0.575637 +2340,-0.371327,-0.612402,-0.395423,0.575084 +2341,-0.371715,-0.612240,-0.396114,0.574529 +2342,-0.372103,-0.612077,-0.396804,0.573975 +2343,-0.372490,-0.611913,-0.397495,0.573420 +2344,-0.372876,-0.611749,-0.398186,0.572865 +2345,-0.373262,-0.611584,-0.398876,0.572310 +2346,-0.373647,-0.611417,-0.399567,0.571754 +2347,-0.374031,-0.611251,-0.400258,0.571198 +2348,-0.374414,-0.611083,-0.400948,0.570642 +2349,-0.374797,-0.610914,-0.401639,0.570085 +2350,-0.375178,-0.610745,-0.402330,0.569529 +2351,-0.375560,-0.610574,-0.403020,0.568972 +2352,-0.375940,-0.610403,-0.403711,0.568414 +2353,-0.376319,-0.610231,-0.404401,0.567856 +2354,-0.376698,-0.610059,-0.405092,0.567298 +2355,-0.377076,-0.609885,-0.405782,0.566740 +2356,-0.377453,-0.609711,-0.406473,0.566182 +2357,-0.377830,-0.609535,-0.407163,0.565623 +2358,-0.378206,-0.609359,-0.407854,0.565064 +2359,-0.378581,-0.609183,-0.408544,0.564504 +2360,-0.378955,-0.609005,-0.409234,0.563945 +2361,-0.379329,-0.608826,-0.409925,0.563385 +2362,-0.379701,-0.608647,-0.410615,0.562824 +2363,-0.380073,-0.608467,-0.411305,0.562264 +2364,-0.380445,-0.608286,-0.411995,0.561703 +2365,-0.380815,-0.608104,-0.412685,0.561142 +2366,-0.381185,-0.607921,-0.413375,0.560581 +2367,-0.381554,-0.607738,-0.414066,0.560019 +2368,-0.381922,-0.607553,-0.414756,0.559457 +2369,-0.382290,-0.607368,-0.415446,0.558895 +2370,-0.382656,-0.607182,-0.416136,0.558333 +2371,-0.383022,-0.606995,-0.416825,0.557770 +2372,-0.383387,-0.606808,-0.417515,0.557207 +2373,-0.383752,-0.606619,-0.418205,0.556644 +2374,-0.384116,-0.606430,-0.418895,0.556080 +2375,-0.384478,-0.606240,-0.419585,0.555516 +2376,-0.384841,-0.606049,-0.420274,0.554952 +2377,-0.385202,-0.605857,-0.420964,0.554388 +2378,-0.385563,-0.605664,-0.421654,0.553823 +2379,-0.385923,-0.605471,-0.422343,0.553259 +2380,-0.386282,-0.605277,-0.423033,0.552693 +2381,-0.386640,-0.605081,-0.423722,0.552128 +2382,-0.386998,-0.604886,-0.424411,0.551563 +2383,-0.387355,-0.604689,-0.425101,0.550997 +2384,-0.387711,-0.604491,-0.425790,0.550430 +2385,-0.388066,-0.604293,-0.426479,0.549864 +2386,-0.388421,-0.604093,-0.427168,0.549297 +2387,-0.388775,-0.603893,-0.427857,0.548731 +2388,-0.389128,-0.603692,-0.428546,0.548163 +2389,-0.389480,-0.603491,-0.429235,0.547596 +2390,-0.389831,-0.603288,-0.429924,0.547028 +2391,-0.390182,-0.603085,-0.430613,0.546460 +2392,-0.390532,-0.602881,-0.431302,0.545892 +2393,-0.390882,-0.602675,-0.431991,0.545324 +2394,-0.391230,-0.602470,-0.432679,0.544755 +2395,-0.391578,-0.602263,-0.433368,0.544186 +2396,-0.391925,-0.602055,-0.434056,0.543617 +2397,-0.392271,-0.601847,-0.434745,0.543048 +2398,-0.392616,-0.601638,-0.435433,0.542478 +2399,-0.392961,-0.601428,-0.436121,0.541908 +2400,-0.393305,-0.601217,-0.436810,0.541338 +2401,-0.393648,-0.601005,-0.437498,0.540768 +2402,-0.393991,-0.600793,-0.438186,0.540197 +2403,-0.394332,-0.600579,-0.438874,0.539626 +2404,-0.394673,-0.600365,-0.439562,0.539055 +2405,-0.395013,-0.600150,-0.440250,0.538484 +2406,-0.395353,-0.599934,-0.440937,0.537912 +2407,-0.395691,-0.599717,-0.441625,0.537340 +2408,-0.396029,-0.599500,-0.442313,0.536768 +2409,-0.396366,-0.599282,-0.443000,0.536196 +2410,-0.396702,-0.599062,-0.443688,0.535624 +2411,-0.397038,-0.598842,-0.444375,0.535051 +2412,-0.397373,-0.598622,-0.445062,0.534478 +2413,-0.397707,-0.598400,-0.445749,0.533905 +2414,-0.398040,-0.598177,-0.446436,0.533331 +2415,-0.398372,-0.597954,-0.447123,0.532758 +2416,-0.398704,-0.597730,-0.447810,0.532184 +2417,-0.399035,-0.597505,-0.448497,0.531610 +2418,-0.399365,-0.597279,-0.449184,0.531035 +2419,-0.399695,-0.597053,-0.449871,0.530461 +2420,-0.400023,-0.596825,-0.450557,0.529886 +2421,-0.400351,-0.596597,-0.451244,0.529311 +2422,-0.400678,-0.596368,-0.451930,0.528736 +2423,-0.401005,-0.596138,-0.452616,0.528161 +2424,-0.401330,-0.595907,-0.453302,0.527585 +2425,-0.401655,-0.595675,-0.453988,0.527009 +2426,-0.401979,-0.595443,-0.454674,0.526433 +2427,-0.402302,-0.595210,-0.455360,0.525857 +2428,-0.402625,-0.594976,-0.456046,0.525280 +2429,-0.402947,-0.594741,-0.456732,0.524703 +2430,-0.403268,-0.594505,-0.457417,0.524127 +2431,-0.403588,-0.594268,-0.458103,0.523549 +2432,-0.403907,-0.594031,-0.458788,0.522972 +2433,-0.404226,-0.593793,-0.459473,0.522395 +2434,-0.404544,-0.593554,-0.460158,0.521817 +2435,-0.404861,-0.593314,-0.460844,0.521239 +2436,-0.405177,-0.593073,-0.461528,0.520661 +2437,-0.405493,-0.592831,-0.462213,0.520082 +2438,-0.405808,-0.592589,-0.462898,0.519504 +2439,-0.406122,-0.592346,-0.463583,0.518925 +2440,-0.406435,-0.592102,-0.464267,0.518346 +2441,-0.406748,-0.591857,-0.464951,0.517767 +2442,-0.407059,-0.591611,-0.465636,0.517187 +2443,-0.407370,-0.591365,-0.466320,0.516608 +2444,-0.407680,-0.591117,-0.467004,0.516028 +2445,-0.407990,-0.590869,-0.467688,0.515448 +2446,-0.408299,-0.590620,-0.468371,0.514868 +2447,-0.408606,-0.590370,-0.469055,0.514287 +2448,-0.408914,-0.590119,-0.469739,0.513707 +2449,-0.409220,-0.589868,-0.470422,0.513126 +2450,-0.409526,-0.589615,-0.471105,0.512545 +2451,-0.409830,-0.589362,-0.471788,0.511964 +2452,-0.410134,-0.589108,-0.472471,0.511382 +2453,-0.410438,-0.588853,-0.473154,0.510801 +2454,-0.410740,-0.588598,-0.473837,0.510219 +2455,-0.411042,-0.588341,-0.474520,0.509637 +2456,-0.411343,-0.588084,-0.475202,0.509055 +2457,-0.411643,-0.587826,-0.475885,0.508473 +2458,-0.411942,-0.587567,-0.476567,0.507890 +2459,-0.412241,-0.587307,-0.477249,0.507308 +2460,-0.412539,-0.587046,-0.477931,0.506725 +2461,-0.412836,-0.586785,-0.478613,0.506142 +2462,-0.413132,-0.586523,-0.479294,0.505559 +2463,-0.413428,-0.586260,-0.479976,0.504975 +2464,-0.413723,-0.585996,-0.480658,0.504392 +2465,-0.414017,-0.585731,-0.481339,0.503808 +2466,-0.414310,-0.585465,-0.482020,0.503224 +2467,-0.414602,-0.585199,-0.482701,0.502640 +2468,-0.414894,-0.584932,-0.483382,0.502056 +2469,-0.415185,-0.584663,-0.484063,0.501471 +2470,-0.415475,-0.584395,-0.484743,0.500887 +2471,-0.415764,-0.584125,-0.485424,0.500302 +2472,-0.416053,-0.583854,-0.486104,0.499717 +2473,-0.416341,-0.583583,-0.486784,0.499132 +2474,-0.416628,-0.583311,-0.487464,0.498547 +2475,-0.416914,-0.583038,-0.488144,0.497961 +2476,-0.417200,-0.582764,-0.488824,0.497376 +2477,-0.417484,-0.582489,-0.489503,0.496790 +2478,-0.417768,-0.582213,-0.490182,0.496204 +2479,-0.418052,-0.581937,-0.490862,0.495618 +2480,-0.418334,-0.581660,-0.491541,0.495031 +2481,-0.418616,-0.581382,-0.492220,0.494445 +2482,-0.418896,-0.581103,-0.492898,0.493858 +2483,-0.419177,-0.580823,-0.493577,0.493272 +2484,-0.419456,-0.580543,-0.494255,0.492685 +2485,-0.419734,-0.580262,-0.494934,0.492098 +2486,-0.420012,-0.579979,-0.495612,0.491510 +2487,-0.420289,-0.579696,-0.496290,0.490923 +2488,-0.420565,-0.579413,-0.496968,0.490335 +2489,-0.420841,-0.579128,-0.497645,0.489748 +2490,-0.421115,-0.578843,-0.498323,0.489160 +2491,-0.421389,-0.578556,-0.499000,0.488572 +2492,-0.421662,-0.578269,-0.499677,0.487984 +2493,-0.421935,-0.577981,-0.500354,0.487395 +2494,-0.422206,-0.577693,-0.501031,0.486807 +2495,-0.422477,-0.577403,-0.501708,0.486218 +2496,-0.422747,-0.577113,-0.502384,0.485630 +2497,-0.423016,-0.576821,-0.503060,0.485041 +2498,-0.423285,-0.576529,-0.503736,0.484452 +2499,-0.423552,-0.576236,-0.504412,0.483863 +2500,-0.423819,-0.575943,-0.505088,0.483273 +2501,-0.424085,-0.575648,-0.505764,0.482684 +2502,-0.424351,-0.575353,-0.506439,0.482094 +2503,-0.424615,-0.575057,-0.507114,0.481505 +2504,-0.424879,-0.574760,-0.507789,0.480915 +2505,-0.425142,-0.574462,-0.508464,0.480325 +2506,-0.425404,-0.574163,-0.509139,0.479734 +2507,-0.425666,-0.573864,-0.509814,0.479144 +2508,-0.425927,-0.573563,-0.510488,0.478554 +2509,-0.426187,-0.573262,-0.511162,0.477963 +2510,-0.426446,-0.572960,-0.511836,0.477373 +2511,-0.426704,-0.572658,-0.512510,0.476782 +2512,-0.426962,-0.572354,-0.513183,0.476191 +2513,-0.427218,-0.572050,-0.513857,0.475600 +2514,-0.427474,-0.571744,-0.514530,0.475008 +2515,-0.427730,-0.571438,-0.515203,0.474417 +2516,-0.427984,-0.571131,-0.515876,0.473826 +2517,-0.428238,-0.570824,-0.516548,0.473234 +2518,-0.428491,-0.570515,-0.517221,0.472642 +2519,-0.428743,-0.570206,-0.517893,0.472051 +2520,-0.428994,-0.569896,-0.518565,0.471459 +2521,-0.429245,-0.569585,-0.519237,0.470867 +2522,-0.429495,-0.569273,-0.519909,0.470274 +2523,-0.429744,-0.568960,-0.520580,0.469682 +2524,-0.429992,-0.568647,-0.521251,0.469090 +2525,-0.430240,-0.568332,-0.521922,0.468497 +2526,-0.430486,-0.568017,-0.522593,0.467904 +2527,-0.430732,-0.567701,-0.523264,0.467312 +2528,-0.430977,-0.567385,-0.523934,0.466719 +2529,-0.431222,-0.567067,-0.524604,0.466126 +2530,-0.431465,-0.566749,-0.525274,0.465533 +2531,-0.431708,-0.566429,-0.525944,0.464939 +2532,-0.431950,-0.566109,-0.526614,0.464346 +2533,-0.432191,-0.565788,-0.527283,0.463752 +2534,-0.432432,-0.565467,-0.527952,0.463159 +2535,-0.432672,-0.565144,-0.528621,0.462565 +2536,-0.432911,-0.564821,-0.529290,0.461971 +2537,-0.433149,-0.564497,-0.529959,0.461378 +2538,-0.433386,-0.564172,-0.530627,0.460784 +2539,-0.433623,-0.563846,-0.531295,0.460189 +2540,-0.433859,-0.563519,-0.531963,0.459595 +2541,-0.434094,-0.563192,-0.532631,0.459001 +2542,-0.434328,-0.562864,-0.533298,0.458407 +2543,-0.434561,-0.562535,-0.533966,0.457812 +2544,-0.434794,-0.562205,-0.534633,0.457217 +2545,-0.435026,-0.561874,-0.535299,0.456623 +2546,-0.435257,-0.561543,-0.535966,0.456028 +2547,-0.435488,-0.561210,-0.536632,0.455433 +2548,-0.435717,-0.560877,-0.537298,0.454838 +2549,-0.435946,-0.560543,-0.537964,0.454243 +2550,-0.436174,-0.560208,-0.538630,0.453648 +2551,-0.436401,-0.559873,-0.539296,0.453053 +2552,-0.436628,-0.559536,-0.539961,0.452457 +2553,-0.436853,-0.559199,-0.540626,0.451862 +2554,-0.437078,-0.558861,-0.541290,0.451266 +2555,-0.437303,-0.558522,-0.541955,0.450671 +2556,-0.437526,-0.558183,-0.542619,0.450075 +2557,-0.437749,-0.557842,-0.543283,0.449479 +2558,-0.437970,-0.557501,-0.543947,0.448883 +2559,-0.438191,-0.557159,-0.544611,0.448287 +2560,-0.438412,-0.556816,-0.545274,0.447691 +2561,-0.438631,-0.556472,-0.545937,0.447095 +2562,-0.438850,-0.556127,-0.546600,0.446499 +2563,-0.439068,-0.555782,-0.547263,0.445903 +2564,-0.439285,-0.555436,-0.547925,0.445306 +2565,-0.439501,-0.555089,-0.548587,0.444710 +2566,-0.439717,-0.554741,-0.549249,0.444113 +2567,-0.439932,-0.554392,-0.549911,0.443517 +2568,-0.440146,-0.554043,-0.550572,0.442920 +2569,-0.440359,-0.553692,-0.551234,0.442323 +2570,-0.440572,-0.553341,-0.551895,0.441727 +2571,-0.440783,-0.552989,-0.552555,0.441130 +2572,-0.440994,-0.552637,-0.553216,0.440533 +2573,-0.441204,-0.552283,-0.553876,0.439936 +2574,-0.441414,-0.551929,-0.554536,0.439339 +2575,-0.441622,-0.551574,-0.555196,0.438741 +2576,-0.441830,-0.551218,-0.555855,0.438144 +2577,-0.442037,-0.550861,-0.556514,0.437547 +2578,-0.442244,-0.550503,-0.557173,0.436950 +2579,-0.442449,-0.550145,-0.557832,0.436352 +2580,-0.442654,-0.549786,-0.558490,0.435755 +2581,-0.442858,-0.549426,-0.559148,0.435157 +2582,-0.443061,-0.549065,-0.559806,0.434560 +2583,-0.443263,-0.548703,-0.560464,0.433962 +2584,-0.443465,-0.548341,-0.561121,0.433364 +2585,-0.443666,-0.547977,-0.561778,0.432766 +2586,-0.443866,-0.547613,-0.562435,0.432169 +2587,-0.444065,-0.547248,-0.563092,0.431571 +2588,-0.444264,-0.546883,-0.563748,0.430973 +2589,-0.444461,-0.546516,-0.564404,0.430375 +2590,-0.444658,-0.546149,-0.565060,0.429777 +2591,-0.444854,-0.545781,-0.565715,0.429179 +2592,-0.445050,-0.545412,-0.566371,0.428580 +2593,-0.445244,-0.545042,-0.567026,0.427982 +2594,-0.445438,-0.544671,-0.567680,0.427384 +2595,-0.445631,-0.544300,-0.568335,0.426786 +2596,-0.445824,-0.543928,-0.568989,0.426187 +2597,-0.446015,-0.543555,-0.569643,0.425589 +2598,-0.446206,-0.543181,-0.570296,0.424990 +2599,-0.446396,-0.542806,-0.570950,0.424392 +2600,-0.446585,-0.542431,-0.571603,0.423793 +2601,-0.446773,-0.542055,-0.572256,0.423195 +2602,-0.446961,-0.541678,-0.572908,0.422596 +2603,-0.447148,-0.541300,-0.573560,0.421998 +2604,-0.447334,-0.540921,-0.574212,0.421399 +2605,-0.447519,-0.540542,-0.574864,0.420800 +2606,-0.447704,-0.540161,-0.575515,0.420201 +2607,-0.447888,-0.539780,-0.576166,0.419603 +2608,-0.448071,-0.539398,-0.576817,0.419004 +2609,-0.448253,-0.539016,-0.577468,0.418405 +2610,-0.448434,-0.538632,-0.578118,0.417806 +2611,-0.448615,-0.538248,-0.578768,0.417207 +2612,-0.448795,-0.537863,-0.579417,0.416608 +2613,-0.448974,-0.537477,-0.580067,0.416009 +2614,-0.449152,-0.537090,-0.580716,0.415410 +2615,-0.449330,-0.536703,-0.581365,0.414811 +2616,-0.449506,-0.536314,-0.582013,0.414212 +2617,-0.449682,-0.535925,-0.582661,0.413613 +2618,-0.449858,-0.535535,-0.583309,0.413014 +2619,-0.450032,-0.535145,-0.583957,0.412415 +2620,-0.450206,-0.534753,-0.584604,0.411815 +2621,-0.450379,-0.534361,-0.585251,0.411216 +2622,-0.450551,-0.533968,-0.585898,0.410617 +2623,-0.450722,-0.533574,-0.586544,0.410018 +2624,-0.450893,-0.533179,-0.587190,0.409418 +2625,-0.451062,-0.532784,-0.587836,0.408819 +2626,-0.451231,-0.532387,-0.588482,0.408220 +2627,-0.451400,-0.531990,-0.589127,0.407621 +2628,-0.451567,-0.531592,-0.589772,0.407021 +2629,-0.451734,-0.531193,-0.590416,0.406422 +2630,-0.451900,-0.530794,-0.591060,0.405823 +2631,-0.452065,-0.530394,-0.591704,0.405223 +2632,-0.452229,-0.529992,-0.592348,0.404624 +2633,-0.452393,-0.529591,-0.592991,0.404024 +2634,-0.452556,-0.529188,-0.593634,0.403425 +2635,-0.452718,-0.528784,-0.594277,0.402826 +2636,-0.452879,-0.528380,-0.594919,0.402226 +2637,-0.453040,-0.527975,-0.595562,0.401627 +2638,-0.453199,-0.527569,-0.596203,0.401027 +2639,-0.453358,-0.527162,-0.596845,0.400428 +2640,-0.453516,-0.526755,-0.597486,0.399829 +2641,-0.453674,-0.526346,-0.598127,0.399229 +2642,-0.453831,-0.525937,-0.598767,0.398630 +2643,-0.453986,-0.525527,-0.599407,0.398030 +2644,-0.454142,-0.525117,-0.600047,0.397431 +2645,-0.454296,-0.524705,-0.600687,0.396831 +2646,-0.454449,-0.524293,-0.601326,0.396232 +2647,-0.454602,-0.523880,-0.601965,0.395633 +2648,-0.454754,-0.523466,-0.602603,0.395033 +2649,-0.454905,-0.523051,-0.603242,0.394434 +2650,-0.455056,-0.522636,-0.603880,0.393834 +2651,-0.455206,-0.522220,-0.604517,0.393235 +2652,-0.455354,-0.521803,-0.605154,0.392636 +2653,-0.455503,-0.521385,-0.605791,0.392036 +2654,-0.455650,-0.520966,-0.606428,0.391437 +2655,-0.455797,-0.520547,-0.607064,0.390837 +2656,-0.455942,-0.520126,-0.607700,0.390238 +2657,-0.456087,-0.519705,-0.608336,0.389639 +2658,-0.456232,-0.519284,-0.608971,0.389039 +2659,-0.456375,-0.518861,-0.609606,0.388440 +2660,-0.456518,-0.518438,-0.610240,0.387841 +2661,-0.456660,-0.518013,-0.610874,0.387242 +2662,-0.456801,-0.517588,-0.611508,0.386642 +2663,-0.456942,-0.517163,-0.612142,0.386043 +2664,-0.457081,-0.516736,-0.612775,0.385444 +2665,-0.457220,-0.516309,-0.613408,0.384845 +2666,-0.457358,-0.515881,-0.614041,0.384246 +2667,-0.457496,-0.515452,-0.614673,0.383646 +2668,-0.457632,-0.515022,-0.615305,0.383047 +2669,-0.457768,-0.514592,-0.615936,0.382448 +2670,-0.457903,-0.514160,-0.616567,0.381849 +2671,-0.458037,-0.513728,-0.617198,0.381250 +2672,-0.458171,-0.513295,-0.617828,0.380651 +2673,-0.458304,-0.512862,-0.618458,0.380052 +2674,-0.458436,-0.512427,-0.619088,0.379453 +2675,-0.458567,-0.511992,-0.619718,0.378854 +2676,-0.458697,-0.511556,-0.620347,0.378255 +2677,-0.458827,-0.511119,-0.620975,0.377657 +2678,-0.458956,-0.510682,-0.621604,0.377058 +2679,-0.459084,-0.510243,-0.622232,0.376459 +2680,-0.459211,-0.509804,-0.622859,0.375860 +2681,-0.459338,-0.509364,-0.623486,0.375261 +2682,-0.459464,-0.508924,-0.624113,0.374663 +2683,-0.459589,-0.508482,-0.624740,0.374064 +2684,-0.459713,-0.508040,-0.625366,0.373466 +2685,-0.459837,-0.507597,-0.625992,0.372867 +2686,-0.459959,-0.507153,-0.626617,0.372268 +2687,-0.460081,-0.506708,-0.627242,0.371670 +2688,-0.460203,-0.506263,-0.627867,0.371072 +2689,-0.460323,-0.505817,-0.628491,0.370473 +2690,-0.460443,-0.505370,-0.629115,0.369875 +2691,-0.460562,-0.504922,-0.629739,0.369277 +2692,-0.460680,-0.504474,-0.630362,0.368678 +2693,-0.460797,-0.504024,-0.630985,0.368080 +2694,-0.460914,-0.503574,-0.631608,0.367482 +2695,-0.461030,-0.503123,-0.632230,0.366884 +2696,-0.461145,-0.502672,-0.632851,0.366286 +2697,-0.461259,-0.502219,-0.633473,0.365688 +2698,-0.461373,-0.501766,-0.634094,0.365090 +2699,-0.461486,-0.501312,-0.634714,0.364492 +2700,-0.461598,-0.500858,-0.635335,0.363894 +2701,-0.461709,-0.500402,-0.635955,0.363297 +2702,-0.461820,-0.499946,-0.636574,0.362699 +2703,-0.461929,-0.499489,-0.637193,0.362101 +2704,-0.462038,-0.499031,-0.637812,0.361504 +2705,-0.462146,-0.498572,-0.638430,0.360906 +2706,-0.462254,-0.498113,-0.639048,0.360309 +2707,-0.462361,-0.497653,-0.639666,0.359711 +2708,-0.462467,-0.497192,-0.640283,0.359114 +2709,-0.462572,-0.496730,-0.640900,0.358517 +2710,-0.462676,-0.496267,-0.641516,0.357919 +2711,-0.462780,-0.495804,-0.642132,0.357322 +2712,-0.462883,-0.495340,-0.642748,0.356725 +2713,-0.462985,-0.494875,-0.643363,0.356128 +2714,-0.463086,-0.494410,-0.643978,0.355531 +2715,-0.463187,-0.493943,-0.644593,0.354934 +2716,-0.463287,-0.493476,-0.645207,0.354338 +2717,-0.463386,-0.493008,-0.645820,0.353741 +2718,-0.463484,-0.492540,-0.646434,0.353144 +2719,-0.463582,-0.492070,-0.647047,0.352548 +2720,-0.463678,-0.491600,-0.647659,0.351951 +2721,-0.463774,-0.491129,-0.648271,0.351355 +2722,-0.463870,-0.490657,-0.648883,0.350758 +2723,-0.463964,-0.490185,-0.649494,0.350162 +2724,-0.464058,-0.489711,-0.650105,0.349566 +2725,-0.464151,-0.489237,-0.650716,0.348970 +2726,-0.464243,-0.488763,-0.651326,0.348374 +2727,-0.464335,-0.488287,-0.651935,0.347778 +2728,-0.464425,-0.487811,-0.652545,0.347182 +2729,-0.464515,-0.487334,-0.653154,0.346586 +2730,-0.464605,-0.486856,-0.653762,0.345990 +2731,-0.464693,-0.486377,-0.654370,0.345395 +2732,-0.464781,-0.485898,-0.654978,0.344799 +2733,-0.464868,-0.485417,-0.655585,0.344204 +2734,-0.464954,-0.484936,-0.656192,0.343608 +2735,-0.465039,-0.484455,-0.656798,0.343013 +2736,-0.465124,-0.483972,-0.657404,0.342418 +2737,-0.465208,-0.483489,-0.658010,0.341823 +2738,-0.465291,-0.483005,-0.658615,0.341228 +2739,-0.465373,-0.482520,-0.659220,0.340633 +2740,-0.465455,-0.482035,-0.659824,0.340038 +2741,-0.465536,-0.481549,-0.660428,0.339443 +2742,-0.465616,-0.481061,-0.661032,0.338849 +2743,-0.465695,-0.480574,-0.661635,0.338254 +2744,-0.465774,-0.480085,-0.662238,0.337660 +2745,-0.465852,-0.479596,-0.662840,0.337066 +2746,-0.465929,-0.479106,-0.663442,0.336471 +2747,-0.466005,-0.478615,-0.664043,0.335877 +2748,-0.466081,-0.478123,-0.664644,0.335283 +2749,-0.466156,-0.477631,-0.665245,0.334689 +2750,-0.466230,-0.477138,-0.665845,0.334095 +2751,-0.466303,-0.476644,-0.666445,0.333502 +2752,-0.466376,-0.476149,-0.667044,0.332908 +2753,-0.466447,-0.475654,-0.667643,0.332315 +2754,-0.466519,-0.475158,-0.668241,0.331721 +2755,-0.466589,-0.474661,-0.668839,0.331128 +2756,-0.466658,-0.474163,-0.669437,0.330535 +2757,-0.466727,-0.473665,-0.670034,0.329942 +2758,-0.466795,-0.473166,-0.670631,0.329349 +2759,-0.466863,-0.472666,-0.671227,0.328756 +2760,-0.466929,-0.472165,-0.671823,0.328163 +2761,-0.466995,-0.471664,-0.672418,0.327571 +2762,-0.467060,-0.471162,-0.673013,0.326978 +2763,-0.467124,-0.470659,-0.673608,0.326386 +2764,-0.467188,-0.470155,-0.674202,0.325794 +2765,-0.467251,-0.469651,-0.674796,0.325201 +2766,-0.467313,-0.469145,-0.675389,0.324609 +2767,-0.467374,-0.468639,-0.675982,0.324018 +2768,-0.467435,-0.468133,-0.676574,0.323426 +2769,-0.467494,-0.467625,-0.677166,0.322834 +2770,-0.467553,-0.467117,-0.677757,0.322243 +2771,-0.467612,-0.466608,-0.678348,0.321651 +2772,-0.467669,-0.466099,-0.678939,0.321060 +2773,-0.467726,-0.465588,-0.679529,0.320469 +2774,-0.467782,-0.465077,-0.680119,0.319878 +2775,-0.467838,-0.464565,-0.680708,0.319287 +2776,-0.467892,-0.464052,-0.681297,0.318696 +2777,-0.467946,-0.463539,-0.681885,0.318105 +2778,-0.467999,-0.463025,-0.682473,0.317515 +2779,-0.468051,-0.462510,-0.683060,0.316924 +2780,-0.468103,-0.461994,-0.683647,0.316334 +2781,-0.468154,-0.461478,-0.684234,0.315744 +2782,-0.468204,-0.460961,-0.684820,0.315154 +2783,-0.468253,-0.460443,-0.685405,0.314564 +2784,-0.468302,-0.459924,-0.685990,0.313974 +2785,-0.468350,-0.459405,-0.686575,0.313385 +2786,-0.468397,-0.458885,-0.687159,0.312795 +2787,-0.468443,-0.458364,-0.687743,0.312206 +2788,-0.468489,-0.457843,-0.688326,0.311617 +2789,-0.468534,-0.457320,-0.688909,0.311028 +2790,-0.468578,-0.456797,-0.689492,0.310439 +2791,-0.468621,-0.456273,-0.690073,0.309850 +2792,-0.468664,-0.455749,-0.690655,0.309262 +2793,-0.468706,-0.455224,-0.691236,0.308673 +2794,-0.468747,-0.454698,-0.691816,0.308085 +2795,-0.468788,-0.454171,-0.692396,0.307497 +2796,-0.468827,-0.453643,-0.692976,0.306909 +2797,-0.468866,-0.453115,-0.693555,0.306321 +2798,-0.468904,-0.452586,-0.694134,0.305733 +2799,-0.468942,-0.452057,-0.694712,0.305146 +2800,-0.468979,-0.451526,-0.695289,0.304558 +2801,-0.469015,-0.450995,-0.695867,0.303971 +2802,-0.469050,-0.450463,-0.696443,0.303384 +2803,-0.469084,-0.449931,-0.697020,0.302797 +2804,-0.469118,-0.449397,-0.697595,0.302210 +2805,-0.469151,-0.448863,-0.698171,0.301624 +2806,-0.469184,-0.448328,-0.698745,0.301037 +2807,-0.469215,-0.447793,-0.699320,0.300451 +2808,-0.469246,-0.447257,-0.699894,0.299865 +2809,-0.469276,-0.446720,-0.700467,0.299279 +2810,-0.469305,-0.446182,-0.701040,0.298693 +2811,-0.469334,-0.445643,-0.701612,0.298107 +2812,-0.469362,-0.445104,-0.702184,0.297521 +2813,-0.469389,-0.444564,-0.702756,0.296936 +2814,-0.469415,-0.444024,-0.703327,0.296351 +2815,-0.469441,-0.443482,-0.703897,0.295766 +2816,-0.469466,-0.442940,-0.704467,0.295181 +2817,-0.469490,-0.442397,-0.705037,0.294596 +2818,-0.469514,-0.441854,-0.705606,0.294012 +2819,-0.469536,-0.441309,-0.706174,0.293427 +2820,-0.469558,-0.440764,-0.706742,0.292843 +2821,-0.469580,-0.440219,-0.707310,0.292259 +2822,-0.469600,-0.439672,-0.707877,0.291675 +2823,-0.469620,-0.439125,-0.708443,0.291092 +2824,-0.469639,-0.438577,-0.709009,0.290508 +2825,-0.469657,-0.438029,-0.709575,0.289925 +2826,-0.469675,-0.437479,-0.710140,0.289342 +2827,-0.469692,-0.436929,-0.710705,0.288759 +2828,-0.469708,-0.436378,-0.711269,0.288176 +2829,-0.469723,-0.435827,-0.711832,0.287593 +2830,-0.469738,-0.435275,-0.712395,0.287011 +2831,-0.469752,-0.434722,-0.712958,0.286428 +2832,-0.469765,-0.434168,-0.713520,0.285846 +2833,-0.469778,-0.433614,-0.714081,0.285264 +2834,-0.469790,-0.433059,-0.714642,0.284683 +2835,-0.469801,-0.432503,-0.715203,0.284101 +2836,-0.469811,-0.431946,-0.715763,0.283520 +2837,-0.469820,-0.431389,-0.716323,0.282939 +2838,-0.469829,-0.430831,-0.716882,0.282358 +2839,-0.469837,-0.430272,-0.717440,0.281777 +2840,-0.469845,-0.429713,-0.717998,0.281196 +2841,-0.469851,-0.429153,-0.718556,0.280616 +2842,-0.469857,-0.428592,-0.719113,0.280036 +2843,-0.469863,-0.428031,-0.719669,0.279456 +2844,-0.469867,-0.427468,-0.720225,0.278876 +2845,-0.469871,-0.426905,-0.720780,0.278296 +2846,-0.469874,-0.426342,-0.721335,0.277717 +2847,-0.469876,-0.425777,-0.721890,0.277137 +2848,-0.469878,-0.425212,-0.722444,0.276558 +2849,-0.469879,-0.424646,-0.722997,0.275979 +2850,-0.469879,-0.424080,-0.723550,0.275401 +2851,-0.469878,-0.423513,-0.724102,0.274822 +2852,-0.469877,-0.422945,-0.724654,0.274244 +2853,-0.469875,-0.422376,-0.725205,0.273666 +2854,-0.469872,-0.421807,-0.725756,0.273088 +2855,-0.469869,-0.421237,-0.726306,0.272510 +2856,-0.469865,-0.420666,-0.726856,0.271933 +2857,-0.469860,-0.420095,-0.727405,0.271356 +2858,-0.469854,-0.419523,-0.727954,0.270779 +2859,-0.469848,-0.418950,-0.728502,0.270202 +2860,-0.469841,-0.418376,-0.729050,0.269625 +2861,-0.469833,-0.417802,-0.729597,0.269049 +2862,-0.469824,-0.417227,-0.730144,0.268472 +2863,-0.469815,-0.416651,-0.730690,0.267896 +2864,-0.469805,-0.416075,-0.731235,0.267320 +2865,-0.469794,-0.415498,-0.731780,0.266745 +2866,-0.469783,-0.414920,-0.732324,0.266169 +2867,-0.469771,-0.414342,-0.732868,0.265594 +2868,-0.469758,-0.413762,-0.733412,0.265019 +2869,-0.469745,-0.413183,-0.733955,0.264444 +2870,-0.469730,-0.412602,-0.734497,0.263870 +2871,-0.469715,-0.412021,-0.735039,0.263296 +2872,-0.469700,-0.411439,-0.735580,0.262722 +2873,-0.469683,-0.410856,-0.736121,0.262148 +2874,-0.469666,-0.410273,-0.736661,0.261574 +2875,-0.469648,-0.409689,-0.737200,0.261000 +2876,-0.469630,-0.409104,-0.737739,0.260427 +2877,-0.469611,-0.408519,-0.738278,0.259854 +2878,-0.469591,-0.407932,-0.738816,0.259281 +2879,-0.469570,-0.407346,-0.739353,0.258709 +2880,-0.469549,-0.406758,-0.739890,0.258137 +2881,-0.469527,-0.406170,-0.740427,0.257564 +2882,-0.469504,-0.405581,-0.740962,0.256993 +2883,-0.469480,-0.404991,-0.741498,0.256421 +2884,-0.469456,-0.404401,-0.742032,0.255849 +2885,-0.469431,-0.403810,-0.742566,0.255278 +2886,-0.469405,-0.403219,-0.743100,0.254707 +2887,-0.469379,-0.402626,-0.743633,0.254136 +2888,-0.469352,-0.402033,-0.744166,0.253566 +2889,-0.469324,-0.401439,-0.744698,0.252996 +2890,-0.469296,-0.400845,-0.745229,0.252426 +2891,-0.469266,-0.400250,-0.745760,0.251856 +2892,-0.469237,-0.399654,-0.746290,0.251286 +2893,-0.469206,-0.399058,-0.746820,0.250717 +2894,-0.469175,-0.398461,-0.747349,0.250148 +2895,-0.469143,-0.397863,-0.747877,0.249579 +2896,-0.469110,-0.397264,-0.748406,0.249010 +2897,-0.469077,-0.396665,-0.748933,0.248442 +2898,-0.469042,-0.396065,-0.749460,0.247874 +2899,-0.469008,-0.395465,-0.749986,0.247306 +2900,-0.468972,-0.394864,-0.750512,0.246738 +2901,-0.468936,-0.394262,-0.751037,0.246171 +2902,-0.468899,-0.393659,-0.751562,0.245603 +2903,-0.468861,-0.393056,-0.752086,0.245037 +2904,-0.468823,-0.392452,-0.752610,0.244470 +2905,-0.468784,-0.391847,-0.753133,0.243903 +2906,-0.468744,-0.391242,-0.753655,0.243337 +2907,-0.468704,-0.390636,-0.754177,0.242771 +2908,-0.468662,-0.390029,-0.754698,0.242206 +2909,-0.468621,-0.389422,-0.755219,0.241640 +2910,-0.468578,-0.388814,-0.755739,0.241075 +2911,-0.468535,-0.388205,-0.756258,0.240510 +2912,-0.468491,-0.387596,-0.756777,0.239945 +2913,-0.468446,-0.386986,-0.757296,0.239381 +2914,-0.468401,-0.386375,-0.757814,0.238817 +2915,-0.468355,-0.385764,-0.758331,0.238253 +2916,-0.468308,-0.385152,-0.758848,0.237689 +2917,-0.468261,-0.384539,-0.759364,0.237126 +2918,-0.468212,-0.383926,-0.759879,0.236562 +2919,-0.468164,-0.383312,-0.760394,0.235999 +2920,-0.468114,-0.382697,-0.760908,0.235437 +2921,-0.468064,-0.382082,-0.761422,0.234874 +2922,-0.468013,-0.381466,-0.761935,0.234312 +2923,-0.467961,-0.380849,-0.762448,0.233750 +2924,-0.467909,-0.380232,-0.762960,0.233189 +2925,-0.467856,-0.379614,-0.763472,0.232628 +2926,-0.467802,-0.378995,-0.763982,0.232066 +2927,-0.467748,-0.378376,-0.764493,0.231506 +2928,-0.467693,-0.377756,-0.765002,0.230945 +2929,-0.467637,-0.377135,-0.765511,0.230385 +2930,-0.467581,-0.376513,-0.766020,0.229825 +2931,-0.467523,-0.375891,-0.766528,0.229265 +2932,-0.467466,-0.375269,-0.767035,0.228706 +2933,-0.467407,-0.374645,-0.767542,0.228146 +2934,-0.467348,-0.374021,-0.768048,0.227587 +2935,-0.467288,-0.373397,-0.768554,0.227029 +2936,-0.467227,-0.372772,-0.769059,0.226470 +2937,-0.467166,-0.372146,-0.769563,0.225912 +2938,-0.467104,-0.371519,-0.770067,0.225355 +2939,-0.467041,-0.370892,-0.770570,0.224797 +2940,-0.466978,-0.370264,-0.771072,0.224240 +2941,-0.466914,-0.369635,-0.771574,0.223683 +2942,-0.466849,-0.369006,-0.772076,0.223126 +2943,-0.466784,-0.368376,-0.772577,0.222570 +2944,-0.466718,-0.367745,-0.773077,0.222013 +2945,-0.466651,-0.367114,-0.773576,0.221457 +2946,-0.466584,-0.366482,-0.774075,0.220902 +2947,-0.466516,-0.365850,-0.774574,0.220347 +2948,-0.466447,-0.365217,-0.775072,0.219792 +2949,-0.466377,-0.364583,-0.775569,0.219237 +2950,-0.466307,-0.363949,-0.776065,0.218682 +2951,-0.466236,-0.363313,-0.776561,0.218128 +2952,-0.466165,-0.362678,-0.777057,0.217574 +2953,-0.466092,-0.362041,-0.777551,0.217021 +2954,-0.466020,-0.361404,-0.778045,0.216467 +2955,-0.465946,-0.360767,-0.778539,0.215914 +2956,-0.465872,-0.360128,-0.779032,0.215362 +2957,-0.465797,-0.359489,-0.779524,0.214809 +2958,-0.465721,-0.358850,-0.780016,0.214257 +2959,-0.465645,-0.358209,-0.780507,0.213705 +2960,-0.465568,-0.357569,-0.780997,0.213154 +2961,-0.465490,-0.356927,-0.781487,0.212602 +2962,-0.465412,-0.356285,-0.781976,0.212051 +2963,-0.465333,-0.355642,-0.782465,0.211501 +2964,-0.465253,-0.354998,-0.782953,0.210950 +2965,-0.465173,-0.354354,-0.783440,0.210400 +2966,-0.465092,-0.353710,-0.783927,0.209850 +2967,-0.465010,-0.353064,-0.784413,0.209301 +2968,-0.464928,-0.352418,-0.784899,0.208752 +2969,-0.464845,-0.351772,-0.785384,0.208203 +2970,-0.464761,-0.351124,-0.785868,0.207654 +2971,-0.464677,-0.350476,-0.786352,0.207106 +2972,-0.464592,-0.349828,-0.786835,0.206558 +2973,-0.464506,-0.349179,-0.787317,0.206010 +2974,-0.464420,-0.348529,-0.787799,0.205463 +2975,-0.464332,-0.347878,-0.788280,0.204916 +2976,-0.464245,-0.347227,-0.788761,0.204369 +2977,-0.464156,-0.346576,-0.789240,0.203823 +2978,-0.464067,-0.345923,-0.789720,0.203277 +2979,-0.463978,-0.345270,-0.790198,0.202731 +2980,-0.463887,-0.344617,-0.790676,0.202185 +2981,-0.463796,-0.343962,-0.791154,0.201640 +2982,-0.463704,-0.343308,-0.791631,0.201095 +2983,-0.463612,-0.342652,-0.792107,0.200551 +2984,-0.463519,-0.341996,-0.792582,0.200006 +2985,-0.463425,-0.341339,-0.793057,0.199463 +2986,-0.463331,-0.340682,-0.793531,0.198919 +2987,-0.463236,-0.340024,-0.794005,0.198376 +2988,-0.463140,-0.339365,-0.794478,0.197833 +2989,-0.463044,-0.338706,-0.794950,0.197290 +2990,-0.462946,-0.338046,-0.795422,0.196748 +2991,-0.462849,-0.337386,-0.795893,0.196206 +2992,-0.462750,-0.336725,-0.796363,0.195664 +2993,-0.462651,-0.336063,-0.796833,0.195122 +2994,-0.462552,-0.335401,-0.797302,0.194581 +2995,-0.462451,-0.334738,-0.797770,0.194041 +2996,-0.462350,-0.334074,-0.798238,0.193500 +2997,-0.462249,-0.333410,-0.798705,0.192960 +2998,-0.462146,-0.332745,-0.799172,0.192420 +2999,-0.462043,-0.332080,-0.799638,0.191881 diff --git a/scripts/testv/headrot_case03_3000_q.csv b/scripts/testv/headrot_case03_3000_q.csv new file mode 100644 index 0000000000..81f966dec3 --- /dev/null +++ b/scripts/testv/headrot_case03_3000_q.csv @@ -0,0 +1,3000 @@ +0,0.965926,0.000000,0.000000,0.258819 +1,0.965499,0.000000,0.000000,0.260408 +2,0.965069,0.000000,0.000000,0.261995 +3,0.964637,0.000000,0.000000,0.263582 +4,0.964202,0.000000,0.000000,0.265169 +5,0.963765,0.000000,0.000000,0.266754 +6,0.963324,0.000000,0.000000,0.268339 +7,0.962882,0.000000,0.000000,0.269923 +8,0.962437,0.000000,0.000000,0.271507 +9,0.961989,0.000000,0.000000,0.273089 +10,0.961538,0.000000,0.000000,0.274671 +11,0.961085,0.000000,0.000000,0.276252 +12,0.960630,0.000000,0.000000,0.277832 +13,0.960172,0.000000,0.000000,0.279411 +14,0.959711,0.000000,0.000000,0.280990 +15,0.959248,0.000000,0.000000,0.282567 +16,0.958782,0.000000,0.000000,0.284144 +17,0.958313,0.000000,0.000000,0.285720 +18,0.957842,0.000000,0.000000,0.287295 +19,0.957369,0.000000,0.000000,0.288869 +20,0.956893,0.000000,0.000000,0.290442 +21,0.956414,0.000000,0.000000,0.292014 +22,0.955933,0.000000,0.000000,0.293585 +23,0.955449,0.000000,0.000000,0.295155 +24,0.954963,0.000000,0.000000,0.296725 +25,0.954474,0.000000,0.000000,0.298293 +26,0.953983,0.000000,0.000000,0.299861 +27,0.953489,0.000000,0.000000,0.301427 +28,0.952993,0.000000,0.000000,0.302992 +29,0.952494,0.000000,0.000000,0.304557 +30,0.951993,0.000000,0.000000,0.306120 +31,0.951489,0.000000,0.000000,0.307683 +32,0.950983,0.000000,0.000000,0.309244 +33,0.950474,0.000000,0.000000,0.310804 +34,0.949963,0.000000,0.000000,0.312363 +35,0.949449,0.000000,0.000000,0.313922 +36,0.948933,0.000000,0.000000,0.315479 +37,0.948414,0.000000,0.000000,0.317035 +38,0.947893,0.000000,0.000000,0.318589 +39,0.947369,0.000000,0.000000,0.320143 +40,0.946843,0.000000,0.000000,0.321696 +41,0.946315,0.000000,0.000000,0.323247 +42,0.945784,0.000000,0.000000,0.324797 +43,0.945250,0.000000,0.000000,0.326347 +44,0.944714,0.000000,0.000000,0.327895 +45,0.944176,0.000000,0.000000,0.329441 +46,0.943635,0.000000,0.000000,0.330987 +47,0.943092,0.000000,0.000000,0.332531 +48,0.942547,0.000000,0.000000,0.334075 +49,0.941999,0.000000,0.000000,0.335617 +50,0.941448,0.000000,0.000000,0.337157 +51,0.940896,0.000000,0.000000,0.338697 +52,0.940340,0.000000,0.000000,0.340235 +53,0.939783,0.000000,0.000000,0.341772 +54,0.939223,0.000000,0.000000,0.343308 +55,0.938661,0.000000,0.000000,0.344842 +56,0.938096,0.000000,0.000000,0.346375 +57,0.937529,0.000000,0.000000,0.347907 +58,0.936960,0.000000,0.000000,0.349438 +59,0.936388,0.000000,0.000000,0.350967 +60,0.935814,0.000000,0.000000,0.352495 +61,0.935237,0.000000,0.000000,0.354022 +62,0.934659,0.000000,0.000000,0.355547 +63,0.934077,0.000000,0.000000,0.357071 +64,0.933494,0.000000,0.000000,0.358593 +65,0.932908,0.000000,0.000000,0.360114 +66,0.932320,0.000000,0.000000,0.361634 +67,0.931730,0.000000,0.000000,0.363152 +68,0.931137,0.000000,0.000000,0.364669 +69,0.930542,0.000000,0.000000,0.366184 +70,0.929945,0.000000,0.000000,0.367698 +71,0.929346,0.000000,0.000000,0.369211 +72,0.928744,0.000000,0.000000,0.370722 +73,0.928140,0.000000,0.000000,0.372232 +74,0.927534,0.000000,0.000000,0.373740 +75,0.926925,0.000000,0.000000,0.375247 +76,0.926314,0.000000,0.000000,0.376752 +77,0.925701,0.000000,0.000000,0.378255 +78,0.925086,0.000000,0.000000,0.379758 +79,0.924469,0.000000,0.000000,0.381258 +80,0.923849,0.000000,0.000000,0.382758 +81,0.923227,0.000000,0.000000,0.384255 +82,0.922603,0.000000,0.000000,0.385751 +83,0.921977,0.000000,0.000000,0.387246 +84,0.921348,0.000000,0.000000,0.388739 +85,0.920717,0.000000,0.000000,0.390230 +86,0.920085,0.000000,0.000000,0.391720 +87,0.919450,0.000000,0.000000,0.393208 +88,0.918812,0.000000,0.000000,0.394695 +89,0.918173,0.000000,0.000000,0.396180 +90,0.917532,0.000000,0.000000,0.397663 +91,0.916888,0.000000,0.000000,0.399145 +92,0.916242,0.000000,0.000000,0.400625 +93,0.915594,0.000000,0.000000,0.402103 +94,0.914944,0.000000,0.000000,0.403580 +95,0.914292,0.000000,0.000000,0.405055 +96,0.913638,0.000000,0.000000,0.406529 +97,0.912982,0.000000,0.000000,0.408000 +98,0.912323,0.000000,0.000000,0.409470 +99,0.911663,0.000000,0.000000,0.410939 +100,0.911000,0.000000,0.000000,0.412405 +101,0.910336,0.000000,0.000000,0.413870 +102,0.909669,0.000000,0.000000,0.415333 +103,0.909001,0.000000,0.000000,0.416795 +104,0.908330,0.000000,0.000000,0.418255 +105,0.907657,0.000000,0.000000,0.419713 +106,0.906982,0.000000,0.000000,0.421169 +107,0.906305,0.000000,0.000000,0.422623 +108,0.905627,0.000000,0.000000,0.424076 +109,0.904946,0.000000,0.000000,0.425527 +110,0.904263,0.000000,0.000000,0.426976 +111,0.903578,0.000000,0.000000,0.428423 +112,0.902892,0.000000,0.000000,0.429868 +113,0.902203,0.000000,0.000000,0.431312 +114,0.901512,0.000000,0.000000,0.432754 +115,0.900819,0.000000,0.000000,0.434194 +116,0.900125,0.000000,0.000000,0.435632 +117,0.899428,0.000000,0.000000,0.437068 +118,0.898730,0.000000,0.000000,0.438502 +119,0.898030,0.000000,0.000000,0.439935 +120,0.897327,0.000000,0.000000,0.441366 +121,0.896623,0.000000,0.000000,0.442794 +122,0.895917,0.000000,0.000000,0.444221 +123,0.895209,0.000000,0.000000,0.445646 +124,0.894499,0.000000,0.000000,0.447069 +125,0.893788,0.000000,0.000000,0.448490 +126,0.893074,0.000000,0.000000,0.449909 +127,0.892359,0.000000,0.000000,0.451327 +128,0.891642,0.000000,0.000000,0.452742 +129,0.890923,0.000000,0.000000,0.454155 +130,0.890202,0.000000,0.000000,0.455567 +131,0.889479,0.000000,0.000000,0.456976 +132,0.888755,0.000000,0.000000,0.458383 +133,0.888028,0.000000,0.000000,0.459789 +134,0.887300,0.000000,0.000000,0.461192 +135,0.886570,0.000000,0.000000,0.462594 +136,0.885839,0.000000,0.000000,0.463993 +137,0.885105,0.000000,0.000000,0.465391 +138,0.884370,0.000000,0.000000,0.466786 +139,0.883633,0.000000,0.000000,0.468179 +140,0.882895,0.000000,0.000000,0.469571 +141,0.882155,0.000000,0.000000,0.470960 +142,0.881413,0.000000,0.000000,0.472347 +143,0.880669,0.000000,0.000000,0.473732 +144,0.879923,0.000000,0.000000,0.475116 +145,0.879176,0.000000,0.000000,0.476497 +146,0.878428,0.000000,0.000000,0.477876 +147,0.877677,0.000000,0.000000,0.479252 +148,0.876925,0.000000,0.000000,0.480627 +149,0.876171,0.000000,0.000000,0.482000 +150,0.875416,0.000000,0.000000,0.483370 +151,0.874659,0.000000,0.000000,0.484739 +152,0.873900,0.000000,0.000000,0.486105 +153,0.873140,0.000000,0.000000,0.487469 +154,0.872378,0.000000,0.000000,0.488832 +155,0.871615,0.000000,0.000000,0.490191 +156,0.870850,0.000000,0.000000,0.491549 +157,0.870083,0.000000,0.000000,0.492905 +158,0.869315,0.000000,0.000000,0.494258 +159,0.868545,0.000000,0.000000,0.495610 +160,0.867774,0.000000,0.000000,0.496959 +161,0.867001,0.000000,0.000000,0.498306 +162,0.866227,0.000000,0.000000,0.499650 +163,0.865451,0.000000,0.000000,0.500993 +164,0.864674,0.000000,0.000000,0.502333 +165,0.863895,0.000000,0.000000,0.503672 +166,0.863115,0.000000,0.000000,0.505007 +167,0.862333,0.000000,0.000000,0.506341 +168,0.861550,0.000000,0.000000,0.507673 +169,0.860765,0.000000,0.000000,0.509002 +170,0.859979,0.000000,0.000000,0.510329 +171,0.859192,0.000000,0.000000,0.511654 +172,0.858403,0.000000,0.000000,0.512976 +173,0.857612,0.000000,0.000000,0.514296 +174,0.856821,0.000000,0.000000,0.515614 +175,0.856028,0.000000,0.000000,0.516930 +176,0.855233,0.000000,0.000000,0.518244 +177,0.854437,0.000000,0.000000,0.519555 +178,0.853640,0.000000,0.000000,0.520864 +179,0.852841,0.000000,0.000000,0.522170 +180,0.852041,0.000000,0.000000,0.523475 +181,0.851240,0.000000,0.000000,0.524776 +182,0.850437,0.000000,0.000000,0.526076 +183,0.849634,0.000000,0.000000,0.527374 +184,0.848828,0.000000,0.000000,0.528669 +185,0.848022,0.000000,0.000000,0.529961 +186,0.847214,0.000000,0.000000,0.531252 +187,0.846405,0.000000,0.000000,0.532540 +188,0.845595,0.000000,0.000000,0.533825 +189,0.844783,0.000000,0.000000,0.535109 +190,0.843970,0.000000,0.000000,0.536390 +191,0.843156,0.000000,0.000000,0.537668 +192,0.842341,0.000000,0.000000,0.538944 +193,0.841525,0.000000,0.000000,0.540218 +194,0.840707,0.000000,0.000000,0.541490 +195,0.839888,0.000000,0.000000,0.542759 +196,0.839069,0.000000,0.000000,0.544026 +197,0.838247,0.000000,0.000000,0.545290 +198,0.837425,0.000000,0.000000,0.546552 +199,0.836602,0.000000,0.000000,0.547812 +200,0.835777,0.000000,0.000000,0.549069 +201,0.834952,0.000000,0.000000,0.550323 +202,0.834125,0.000000,0.000000,0.551576 +203,0.833297,0.000000,0.000000,0.552826 +204,0.832468,0.000000,0.000000,0.554073 +205,0.831638,0.000000,0.000000,0.555318 +206,0.830807,0.000000,0.000000,0.556561 +207,0.829975,0.000000,0.000000,0.557801 +208,0.829142,0.000000,0.000000,0.559039 +209,0.828307,0.000000,0.000000,0.560274 +210,0.827472,0.000000,0.000000,0.561507 +211,0.826636,0.000000,0.000000,0.562737 +212,0.825799,0.000000,0.000000,0.563965 +213,0.824960,0.000000,0.000000,0.565191 +214,0.824121,0.000000,0.000000,0.566413 +215,0.823281,0.000000,0.000000,0.567634 +216,0.822440,0.000000,0.000000,0.568852 +217,0.821598,0.000000,0.000000,0.570068 +218,0.820755,0.000000,0.000000,0.571281 +219,0.819911,0.000000,0.000000,0.572491 +220,0.819066,0.000000,0.000000,0.573699 +221,0.818220,0.000000,0.000000,0.574905 +222,0.817374,0.000000,0.000000,0.576108 +223,0.816526,0.000000,0.000000,0.577308 +224,0.815678,0.000000,0.000000,0.578506 +225,0.814829,0.000000,0.000000,0.579702 +226,0.813979,0.000000,0.000000,0.580895 +227,0.813128,0.000000,0.000000,0.582085 +228,0.812276,0.000000,0.000000,0.583273 +229,0.811424,0.000000,0.000000,0.584459 +230,0.810570,0.000000,0.000000,0.585641 +231,0.809716,0.000000,0.000000,0.586822 +232,0.808861,0.000000,0.000000,0.588000 +233,0.808006,0.000000,0.000000,0.589175 +234,0.807149,0.000000,0.000000,0.590348 +235,0.806292,0.000000,0.000000,0.591518 +236,0.805434,0.000000,0.000000,0.592685 +237,0.804576,0.000000,0.000000,0.593850 +238,0.803716,0.000000,0.000000,0.595013 +239,0.802856,0.000000,0.000000,0.596173 +240,0.801996,0.000000,0.000000,0.597330 +241,0.801134,0.000000,0.000000,0.598485 +242,0.800272,0.000000,0.000000,0.599637 +243,0.799409,0.000000,0.000000,0.600787 +244,0.798546,0.000000,0.000000,0.601934 +245,0.797682,0.000000,0.000000,0.603078 +246,0.796818,0.000000,0.000000,0.604220 +247,0.795952,0.000000,0.000000,0.605359 +248,0.795087,0.000000,0.000000,0.606496 +249,0.794220,0.000000,0.000000,0.607630 +250,0.793353,0.000000,0.000000,0.608761 +251,0.792486,0.000000,0.000000,0.609890 +252,0.791618,0.000000,0.000000,0.611017 +253,0.790749,0.000000,0.000000,0.612140 +254,0.789880,0.000000,0.000000,0.613261 +255,0.789010,0.000000,0.000000,0.614380 +256,0.788140,0.000000,0.000000,0.615496 +257,0.787270,0.000000,0.000000,0.616609 +258,0.786399,0.000000,0.000000,0.617719 +259,0.785527,0.000000,0.000000,0.618827 +260,0.784655,0.000000,0.000000,0.619933 +261,0.783783,0.000000,0.000000,0.621035 +262,0.782910,0.000000,0.000000,0.622135 +263,0.782036,0.000000,0.000000,0.623233 +264,0.781163,0.000000,0.000000,0.624328 +265,0.780288,0.000000,0.000000,0.625420 +266,0.779414,0.000000,0.000000,0.626509 +267,0.778539,0.000000,0.000000,0.627596 +268,0.777664,0.000000,0.000000,0.628681 +269,0.776788,0.000000,0.000000,0.629762 +270,0.775912,0.000000,0.000000,0.630841 +271,0.775036,0.000000,0.000000,0.631917 +272,0.774159,0.000000,0.000000,0.632991 +273,0.773282,0.000000,0.000000,0.634062 +274,0.772405,0.000000,0.000000,0.635130 +275,0.771527,0.000000,0.000000,0.636196 +276,0.770650,0.000000,0.000000,0.637259 +277,0.769771,0.000000,0.000000,0.638320 +278,0.768893,0.000000,0.000000,0.639377 +279,0.768015,0.000000,0.000000,0.640432 +280,0.767136,0.000000,0.000000,0.641485 +281,0.766257,0.000000,0.000000,0.642534 +282,0.765378,0.000000,0.000000,0.643581 +283,0.764498,0.000000,0.000000,0.644626 +284,0.763619,0.000000,0.000000,0.645668 +285,0.762739,0.000000,0.000000,0.646707 +286,0.761859,0.000000,0.000000,0.647743 +287,0.760979,0.000000,0.000000,0.648777 +288,0.760099,0.000000,0.000000,0.649808 +289,0.759218,0.000000,0.000000,0.650836 +290,0.758338,0.000000,0.000000,0.651862 +291,0.757457,0.000000,0.000000,0.652885 +292,0.756577,0.000000,0.000000,0.653905 +293,0.755696,0.000000,0.000000,0.654923 +294,0.754815,0.000000,0.000000,0.655937 +295,0.753934,0.000000,0.000000,0.656950 +296,0.753054,0.000000,0.000000,0.657959 +297,0.752173,0.000000,0.000000,0.658966 +298,0.751292,0.000000,0.000000,0.659970 +299,0.750411,0.000000,0.000000,0.660972 +300,0.749530,0.000000,0.000000,0.661971 +301,0.748649,0.000000,0.000000,0.662967 +302,0.747768,0.000000,0.000000,0.663960 +303,0.746887,0.000000,0.000000,0.664951 +304,0.746006,0.000000,0.000000,0.665939 +305,0.745126,0.000000,0.000000,0.666924 +306,0.744245,0.000000,0.000000,0.667907 +307,0.743364,0.000000,0.000000,0.668887 +308,0.742484,0.000000,0.000000,0.669864 +309,0.741603,0.000000,0.000000,0.670839 +310,0.740723,0.000000,0.000000,0.671811 +311,0.739843,0.000000,0.000000,0.672780 +312,0.738963,0.000000,0.000000,0.673746 +313,0.738083,0.000000,0.000000,0.674710 +314,0.737203,0.000000,0.000000,0.675671 +315,0.736324,0.000000,0.000000,0.676629 +316,0.735444,0.000000,0.000000,0.677585 +317,0.734565,0.000000,0.000000,0.678538 +318,0.733686,0.000000,0.000000,0.679488 +319,0.732807,0.000000,0.000000,0.680436 +320,0.731929,0.000000,0.000000,0.681381 +321,0.731051,0.000000,0.000000,0.682323 +322,0.730173,0.000000,0.000000,0.683263 +323,0.729295,0.000000,0.000000,0.684199 +324,0.728417,0.000000,0.000000,0.685134 +325,0.727540,0.000000,0.000000,0.686065 +326,0.726663,0.000000,0.000000,0.686994 +327,0.725787,0.000000,0.000000,0.687920 +328,0.724911,0.000000,0.000000,0.688843 +329,0.724035,0.000000,0.000000,0.689764 +330,0.723159,0.000000,0.000000,0.690681 +331,0.722284,0.000000,0.000000,0.691597 +332,0.721409,0.000000,0.000000,0.692509 +333,0.720535,0.000000,0.000000,0.693419 +334,0.719660,0.000000,0.000000,0.694326 +335,0.718787,0.000000,0.000000,0.695231 +336,0.717913,0.000000,0.000000,0.696132 +337,0.717041,0.000000,0.000000,0.697031 +338,0.716168,0.000000,0.000000,0.697928 +339,0.715296,0.000000,0.000000,0.698821 +340,0.714425,0.000000,0.000000,0.699712 +341,0.713554,0.000000,0.000000,0.700601 +342,0.712683,0.000000,0.000000,0.701486 +343,0.711813,0.000000,0.000000,0.702369 +344,0.710943,0.000000,0.000000,0.703249 +345,0.710074,0.000000,0.000000,0.704127 +346,0.709206,0.000000,0.000000,0.705001 +347,0.708338,0.000000,0.000000,0.705874 +348,0.707470,0.000000,0.000000,0.706743 +349,0.706603,0.000000,0.000000,0.707610 +350,0.705737,0.000000,0.000000,0.708474 +351,0.704871,0.000000,0.000000,0.709335 +352,0.704006,0.000000,0.000000,0.710194 +353,0.703142,0.000000,0.000000,0.711050 +354,0.702278,0.000000,0.000000,0.711903 +355,0.701414,0.000000,0.000000,0.712754 +356,0.700552,0.000000,0.000000,0.713602 +357,0.699690,0.000000,0.000000,0.714447 +358,0.698828,0.000000,0.000000,0.715290 +359,0.697967,0.000000,0.000000,0.716130 +360,0.697107,0.000000,0.000000,0.716967 +361,0.696248,0.000000,0.000000,0.717801 +362,0.695389,0.000000,0.000000,0.718633 +363,0.694531,0.000000,0.000000,0.719463 +364,0.693674,0.000000,0.000000,0.720289 +365,0.692818,0.000000,0.000000,0.721113 +366,0.691962,0.000000,0.000000,0.721934 +367,0.691107,0.000000,0.000000,0.722753 +368,0.690253,0.000000,0.000000,0.723569 +369,0.689399,0.000000,0.000000,0.724382 +370,0.688546,0.000000,0.000000,0.725192 +371,0.687694,0.000000,0.000000,0.726000 +372,0.686843,0.000000,0.000000,0.726805 +373,0.685993,0.000000,0.000000,0.727608 +374,0.685144,0.000000,0.000000,0.728408 +375,0.684295,0.000000,0.000000,0.729205 +376,0.683447,0.000000,0.000000,0.730000 +377,0.682600,0.000000,0.000000,0.730792 +378,0.681754,0.000000,0.000000,0.731581 +379,0.680909,0.000000,0.000000,0.732368 +380,0.680065,0.000000,0.000000,0.733152 +381,0.679222,0.000000,0.000000,0.733933 +382,0.678379,0.000000,0.000000,0.734712 +383,0.677538,0.000000,0.000000,0.735488 +384,0.676697,0.000000,0.000000,0.736261 +385,0.675858,0.000000,0.000000,0.737032 +386,0.675019,0.000000,0.000000,0.737800 +387,0.674181,0.000000,0.000000,0.738566 +388,0.673345,0.000000,0.000000,0.739329 +389,0.672509,0.000000,0.000000,0.740089 +390,0.671674,0.000000,0.000000,0.740847 +391,0.670840,0.000000,0.000000,0.741602 +392,0.670008,0.000000,0.000000,0.742354 +393,0.669176,0.000000,0.000000,0.743104 +394,0.668345,0.000000,0.000000,0.743851 +395,0.667516,0.000000,0.000000,0.744596 +396,0.666687,0.000000,0.000000,0.745337 +397,0.665860,0.000000,0.000000,0.746077 +398,0.665034,0.000000,0.000000,0.746813 +399,0.664208,0.000000,0.000000,0.747548 +400,0.663384,0.000000,0.000000,0.748279 +401,0.662561,0.000000,0.000000,0.749008 +402,0.661739,0.000000,0.000000,0.749734 +403,0.660918,0.000000,0.000000,0.750458 +404,0.660099,0.000000,0.000000,0.751179 +405,0.659280,0.000000,0.000000,0.751897 +406,0.658463,0.000000,0.000000,0.752613 +407,0.657647,0.000000,0.000000,0.753326 +408,0.656832,0.000000,0.000000,0.754037 +409,0.656018,0.000000,0.000000,0.754745 +410,0.655205,0.000000,0.000000,0.755451 +411,0.654394,0.000000,0.000000,0.756154 +412,0.653584,0.000000,0.000000,0.756854 +413,0.652775,0.000000,0.000000,0.757552 +414,0.651967,0.000000,0.000000,0.758247 +415,0.651161,0.000000,0.000000,0.758940 +416,0.650356,0.000000,0.000000,0.759630 +417,0.649552,0.000000,0.000000,0.760317 +418,0.648749,0.000000,0.000000,0.761002 +419,0.647948,0.000000,0.000000,0.761685 +420,0.647148,0.000000,0.000000,0.762365 +421,0.646349,0.000000,0.000000,0.763042 +422,0.645552,0.000000,0.000000,0.763717 +423,0.644756,0.000000,0.000000,0.764389 +424,0.643961,0.000000,0.000000,0.765058 +425,0.643168,0.000000,0.000000,0.765725 +426,0.642376,0.000000,0.000000,0.766390 +427,0.641585,0.000000,0.000000,0.767052 +428,0.640796,0.000000,0.000000,0.767711 +429,0.640008,0.000000,0.000000,0.768368 +430,0.639222,0.000000,0.000000,0.769023 +431,0.638436,0.000000,0.000000,0.769675 +432,0.637653,0.000000,0.000000,0.770324 +433,0.636871,0.000000,0.000000,0.770971 +434,0.636090,0.000000,0.000000,0.771615 +435,0.635311,0.000000,0.000000,0.772257 +436,0.634533,0.000000,0.000000,0.772896 +437,0.633756,0.000000,0.000000,0.773533 +438,0.632981,0.000000,0.000000,0.774167 +439,0.632208,0.000000,0.000000,0.774799 +440,0.631436,0.000000,0.000000,0.775428 +441,0.630666,0.000000,0.000000,0.776055 +442,0.629897,0.000000,0.000000,0.776679 +443,0.629129,0.000000,0.000000,0.777301 +444,0.628363,0.000000,0.000000,0.777920 +445,0.627599,0.000000,0.000000,0.778537 +446,0.626836,0.000000,0.000000,0.779151 +447,0.626075,0.000000,0.000000,0.779763 +448,0.625316,0.000000,0.000000,0.780372 +449,0.624557,0.000000,0.000000,0.780979 +450,0.623801,0.000000,0.000000,0.781583 +451,0.623046,0.000000,0.000000,0.782185 +452,0.622293,0.000000,0.000000,0.782785 +453,0.621541,0.000000,0.000000,0.783382 +454,0.620791,0.000000,0.000000,0.783976 +455,0.620043,0.000000,0.000000,0.784568 +456,0.619296,0.000000,0.000000,0.785158 +457,0.618551,0.000000,0.000000,0.785745 +458,0.617807,0.000000,0.000000,0.786330 +459,0.617065,0.000000,0.000000,0.786912 +460,0.616325,0.000000,0.000000,0.787492 +461,0.615587,0.000000,0.000000,0.788069 +462,0.614850,0.000000,0.000000,0.788644 +463,0.614115,0.000000,0.000000,0.789216 +464,0.613382,0.000000,0.000000,0.789787 +465,0.612650,0.000000,0.000000,0.790354 +466,0.611920,0.000000,0.000000,0.790919 +467,0.611192,0.000000,0.000000,0.791482 +468,0.610466,0.000000,0.000000,0.792043 +469,0.609741,0.000000,0.000000,0.792601 +470,0.609018,0.000000,0.000000,0.793156 +471,0.608297,0.000000,0.000000,0.793709 +472,0.607578,0.000000,0.000000,0.794260 +473,0.606860,0.000000,0.000000,0.794809 +474,0.606144,0.000000,0.000000,0.795355 +475,0.605430,0.000000,0.000000,0.795898 +476,0.604718,0.000000,0.000000,0.796439 +477,0.604008,0.000000,0.000000,0.796978 +478,0.603300,0.000000,0.000000,0.797515 +479,0.602593,0.000000,0.000000,0.798049 +480,0.601888,0.000000,0.000000,0.798580 +481,0.601185,0.000000,0.000000,0.799110 +482,0.600484,0.000000,0.000000,0.799637 +483,0.599785,0.000000,0.000000,0.800161 +484,0.599088,0.000000,0.000000,0.800684 +485,0.598392,0.000000,0.000000,0.801203 +486,0.597699,0.000000,0.000000,0.801721 +487,0.597007,0.000000,0.000000,0.802236 +488,0.596317,0.000000,0.000000,0.802749 +489,0.595629,0.000000,0.000000,0.803259 +490,0.594944,0.000000,0.000000,0.803767 +491,0.594260,0.000000,0.000000,0.804273 +492,0.593578,0.000000,0.000000,0.804777 +493,0.592898,0.000000,0.000000,0.805278 +494,0.592220,0.000000,0.000000,0.805777 +495,0.591543,0.000000,0.000000,0.806273 +496,0.590869,0.000000,0.000000,0.806767 +497,0.590197,0.000000,0.000000,0.807259 +498,0.589527,0.000000,0.000000,0.807749 +499,0.588859,0.000000,0.000000,0.808236 +500,0.588193,0.000000,0.000000,0.808721 +501,0.587528,0.000000,0.000000,0.809203 +502,0.586866,0.000000,0.000000,0.809684 +503,0.586206,0.000000,0.000000,0.810162 +504,0.585548,0.000000,0.000000,0.810638 +505,0.584892,0.000000,0.000000,0.811111 +506,0.584238,0.000000,0.000000,0.811582 +507,0.583586,0.000000,0.000000,0.812051 +508,0.582937,0.000000,0.000000,0.812518 +509,0.582289,0.000000,0.000000,0.812982 +510,0.581643,0.000000,0.000000,0.813444 +511,0.581000,0.000000,0.000000,0.813904 +512,0.580358,0.000000,0.000000,0.814361 +513,0.579719,0.000000,0.000000,0.814817 +514,0.579082,0.000000,0.000000,0.815270 +515,0.578446,0.000000,0.000000,0.815720 +516,0.577813,0.000000,0.000000,0.816169 +517,0.577183,0.000000,0.000000,0.816615 +518,0.576554,0.000000,0.000000,0.817059 +519,0.575927,0.000000,0.000000,0.817501 +520,0.575303,0.000000,0.000000,0.817941 +521,0.574681,0.000000,0.000000,0.818378 +522,0.574060,0.000000,0.000000,0.818813 +523,0.573443,0.000000,0.000000,0.819246 +524,0.572827,0.000000,0.000000,0.819676 +525,0.572213,0.000000,0.000000,0.820105 +526,0.571602,0.000000,0.000000,0.820531 +527,0.570993,0.000000,0.000000,0.820955 +528,0.570386,0.000000,0.000000,0.821377 +529,0.569781,0.000000,0.000000,0.821796 +530,0.569179,0.000000,0.000000,0.822214 +531,0.568578,0.000000,0.000000,0.822629 +532,0.567980,0.000000,0.000000,0.823042 +533,0.567385,0.000000,0.000000,0.823453 +534,0.566791,0.000000,0.000000,0.823862 +535,0.566200,0.000000,0.000000,0.824268 +536,0.565611,0.000000,0.000000,0.824672 +537,0.565024,0.000000,0.000000,0.825074 +538,0.564440,0.000000,0.000000,0.825474 +539,0.563858,0.000000,0.000000,0.825872 +540,0.563278,0.000000,0.000000,0.826268 +541,0.562700,0.000000,0.000000,0.826661 +542,0.562125,0.000000,0.000000,0.827052 +543,0.561552,0.000000,0.000000,0.827441 +544,0.560981,0.000000,0.000000,0.827828 +545,0.560413,0.000000,0.000000,0.828213 +546,0.559847,0.000000,0.000000,0.828596 +547,0.559284,0.000000,0.000000,0.828976 +548,0.558722,0.000000,0.000000,0.829355 +549,0.558163,0.000000,0.000000,0.829731 +550,0.557607,0.000000,0.000000,0.830105 +551,0.557053,0.000000,0.000000,0.830477 +552,0.556501,0.000000,0.000000,0.830847 +553,0.555951,0.000000,0.000000,0.831215 +554,0.555404,0.000000,0.000000,0.831580 +555,0.554860,0.000000,0.000000,0.831944 +556,0.554317,0.000000,0.000000,0.832305 +557,0.553777,0.000000,0.000000,0.832665 +558,0.553240,0.000000,0.000000,0.833022 +559,0.552705,0.000000,0.000000,0.833377 +560,0.552172,0.000000,0.000000,0.833730 +561,0.551642,0.000000,0.000000,0.834081 +562,0.551114,0.000000,0.000000,0.834430 +563,0.550589,0.000000,0.000000,0.834777 +564,0.550066,0.000000,0.000000,0.835121 +565,0.549545,0.000000,0.000000,0.835464 +566,0.549027,0.000000,0.000000,0.835804 +567,0.548512,0.000000,0.000000,0.836143 +568,0.547999,0.000000,0.000000,0.836479 +569,0.547488,0.000000,0.000000,0.836814 +570,0.546980,0.000000,0.000000,0.837146 +571,0.546474,0.000000,0.000000,0.837476 +572,0.545971,0.000000,0.000000,0.837804 +573,0.545470,0.000000,0.000000,0.838130 +574,0.544972,0.000000,0.000000,0.838454 +575,0.544476,0.000000,0.000000,0.838776 +576,0.543983,0.000000,0.000000,0.839096 +577,0.543492,0.000000,0.000000,0.839414 +578,0.543004,0.000000,0.000000,0.839730 +579,0.542519,0.000000,0.000000,0.840044 +580,0.542035,0.000000,0.000000,0.840356 +581,0.541555,0.000000,0.000000,0.840665 +582,0.541077,0.000000,0.000000,0.840973 +583,0.540601,0.000000,0.000000,0.841279 +584,0.540128,0.000000,0.000000,0.841583 +585,0.539658,0.000000,0.000000,0.841884 +586,0.539190,0.000000,0.000000,0.842184 +587,0.538725,0.000000,0.000000,0.842482 +588,0.538262,0.000000,0.000000,0.842777 +589,0.537802,0.000000,0.000000,0.843071 +590,0.537345,0.000000,0.000000,0.843363 +591,0.536890,0.000000,0.000000,0.843652 +592,0.536437,0.000000,0.000000,0.843940 +593,0.535988,0.000000,0.000000,0.844226 +594,0.535541,0.000000,0.000000,0.844510 +595,0.535096,0.000000,0.000000,0.844791 +596,0.534654,0.000000,0.000000,0.845071 +597,0.534215,0.000000,0.000000,0.845349 +598,0.533778,0.000000,0.000000,0.845625 +599,0.533344,0.000000,0.000000,0.845898 +600,0.532913,0.000000,0.000000,0.846170 +601,0.532484,0.000000,0.000000,0.846440 +602,0.532058,0.000000,0.000000,0.846708 +603,0.531634,0.000000,0.000000,0.846974 +604,0.531213,0.000000,0.000000,0.847238 +605,0.530795,0.000000,0.000000,0.847500 +606,0.530379,0.000000,0.000000,0.847760 +607,0.529967,0.000000,0.000000,0.848019 +608,0.529556,0.000000,0.000000,0.848275 +609,0.529149,0.000000,0.000000,0.848529 +610,0.528744,0.000000,0.000000,0.848781 +611,0.528342,0.000000,0.000000,0.849032 +612,0.527942,0.000000,0.000000,0.849280 +613,0.527545,0.000000,0.000000,0.849527 +614,0.527151,0.000000,0.000000,0.849772 +615,0.526760,0.000000,0.000000,0.850014 +616,0.526371,0.000000,0.000000,0.850255 +617,0.525985,0.000000,0.000000,0.850494 +618,0.525602,0.000000,0.000000,0.850731 +619,0.525221,0.000000,0.000000,0.850966 +620,0.524843,0.000000,0.000000,0.851199 +621,0.524468,0.000000,0.000000,0.851430 +622,0.524096,0.000000,0.000000,0.851659 +623,0.523726,0.000000,0.000000,0.851887 +624,0.523359,0.000000,0.000000,0.852112 +625,0.522995,0.000000,0.000000,0.852336 +626,0.522633,0.000000,0.000000,0.852558 +627,0.522274,0.000000,0.000000,0.852778 +628,0.521918,0.000000,0.000000,0.852995 +629,0.521565,0.000000,0.000000,0.853212 +630,0.521215,0.000000,0.000000,0.853426 +631,0.520867,0.000000,0.000000,0.853638 +632,0.520522,0.000000,0.000000,0.853848 +633,0.520180,0.000000,0.000000,0.854057 +634,0.519840,0.000000,0.000000,0.854264 +635,0.519504,0.000000,0.000000,0.854468 +636,0.519170,0.000000,0.000000,0.854671 +637,0.518839,0.000000,0.000000,0.854872 +638,0.518510,0.000000,0.000000,0.855071 +639,0.518185,0.000000,0.000000,0.855269 +640,0.517862,0.000000,0.000000,0.855464 +641,0.517542,0.000000,0.000000,0.855658 +642,0.517225,0.000000,0.000000,0.855849 +643,0.516911,0.000000,0.000000,0.856039 +644,0.516599,0.000000,0.000000,0.856227 +645,0.516290,0.000000,0.000000,0.856414 +646,0.515984,0.000000,0.000000,0.856598 +647,0.515681,0.000000,0.000000,0.856780 +648,0.515381,0.000000,0.000000,0.856961 +649,0.515084,0.000000,0.000000,0.857140 +650,0.514789,0.000000,0.000000,0.857317 +651,0.514497,0.000000,0.000000,0.857492 +652,0.514208,0.000000,0.000000,0.857665 +653,0.513922,0.000000,0.000000,0.857837 +654,0.513639,0.000000,0.000000,0.858006 +655,0.513358,0.000000,0.000000,0.858174 +656,0.513081,0.000000,0.000000,0.858340 +657,0.512806,0.000000,0.000000,0.858504 +658,0.512534,0.000000,0.000000,0.858667 +659,0.512265,0.000000,0.000000,0.858827 +660,0.511999,0.000000,0.000000,0.858986 +661,0.511736,0.000000,0.000000,0.859143 +662,0.511475,0.000000,0.000000,0.859298 +663,0.511218,0.000000,0.000000,0.859451 +664,0.510963,0.000000,0.000000,0.859603 +665,0.510711,0.000000,0.000000,0.859752 +666,0.510462,0.000000,0.000000,0.859900 +667,0.510216,0.000000,0.000000,0.860046 +668,0.509973,0.000000,0.000000,0.860191 +669,0.509732,0.000000,0.000000,0.860333 +670,0.509495,0.000000,0.000000,0.860474 +671,0.509260,0.000000,0.000000,0.860613 +672,0.509028,0.000000,0.000000,0.860750 +673,0.508800,0.000000,0.000000,0.860885 +674,0.508574,0.000000,0.000000,0.861019 +675,0.508351,0.000000,0.000000,0.861150 +676,0.508130,0.000000,0.000000,0.861280 +677,0.507913,0.000000,0.000000,0.861408 +678,0.507699,0.000000,0.000000,0.861535 +679,0.507487,0.000000,0.000000,0.861659 +680,0.507279,0.000000,0.000000,0.861782 +681,0.507073,0.000000,0.000000,0.861903 +682,0.506871,0.000000,0.000000,0.862022 +683,0.506671,0.000000,0.000000,0.862140 +684,0.506474,0.000000,0.000000,0.862255 +685,0.506280,0.000000,0.000000,0.862369 +686,0.506089,0.000000,0.000000,0.862481 +687,0.505901,0.000000,0.000000,0.862592 +688,0.505715,0.000000,0.000000,0.862700 +689,0.505533,0.000000,0.000000,0.862807 +690,0.505354,0.000000,0.000000,0.862912 +691,0.505177,0.000000,0.000000,0.863016 +692,0.505004,0.000000,0.000000,0.863117 +693,0.504833,0.000000,0.000000,0.863217 +694,0.504666,0.000000,0.000000,0.863315 +695,0.504501,0.000000,0.000000,0.863411 +696,0.504339,0.000000,0.000000,0.863506 +697,0.504180,0.000000,0.000000,0.863598 +698,0.504024,0.000000,0.000000,0.863689 +699,0.503871,0.000000,0.000000,0.863779 +700,0.503721,0.000000,0.000000,0.863866 +701,0.503574,0.000000,0.000000,0.863952 +702,0.503430,0.000000,0.000000,0.864036 +703,0.503289,0.000000,0.000000,0.864118 +704,0.503151,0.000000,0.000000,0.864199 +705,0.503016,0.000000,0.000000,0.864277 +706,0.502883,0.000000,0.000000,0.864354 +707,0.502754,0.000000,0.000000,0.864430 +708,0.502628,0.000000,0.000000,0.864503 +709,0.502504,0.000000,0.000000,0.864575 +710,0.502384,0.000000,0.000000,0.864645 +711,0.502266,0.000000,0.000000,0.864713 +712,0.502151,0.000000,0.000000,0.864780 +713,0.502040,0.000000,0.000000,0.864844 +714,0.501931,0.000000,0.000000,0.864908 +715,0.501826,0.000000,0.000000,0.864969 +716,0.501723,0.000000,0.000000,0.865028 +717,0.501623,0.000000,0.000000,0.865086 +718,0.501526,0.000000,0.000000,0.865142 +719,0.501432,0.000000,0.000000,0.865197 +720,0.501342,0.000000,0.000000,0.865249 +721,0.501254,0.000000,0.000000,0.865300 +722,0.501169,0.000000,0.000000,0.865350 +723,0.501087,0.000000,0.000000,0.865397 +724,0.501008,0.000000,0.000000,0.865443 +725,0.500932,0.000000,0.000000,0.865487 +726,0.500859,0.000000,0.000000,0.865529 +727,0.500789,0.000000,0.000000,0.865570 +728,0.500722,0.000000,0.000000,0.865608 +729,0.500658,0.000000,0.000000,0.865645 +730,0.500597,0.000000,0.000000,0.865681 +731,0.500538,0.000000,0.000000,0.865714 +732,0.500483,0.000000,0.000000,0.865746 +733,0.500431,0.000000,0.000000,0.865776 +734,0.500382,0.000000,0.000000,0.865805 +735,0.500336,0.000000,0.000000,0.865832 +736,0.500292,0.000000,0.000000,0.865857 +737,0.500252,0.000000,0.000000,0.865880 +738,0.500215,0.000000,0.000000,0.865901 +739,0.500180,0.000000,0.000000,0.865921 +740,0.500149,0.000000,0.000000,0.865939 +741,0.500121,0.000000,0.000000,0.865956 +742,0.500095,0.000000,0.000000,0.865970 +743,0.500073,0.000000,0.000000,0.865983 +744,0.500054,0.000000,0.000000,0.865994 +745,0.500037,0.000000,0.000000,0.866004 +746,0.500024,0.000000,0.000000,0.866012 +747,0.500013,0.000000,0.000000,0.866018 +748,0.500006,0.000000,0.000000,0.866022 +749,0.500001,0.000000,0.000000,0.866025 +750,0.500000,0.000000,0.000000,0.866025 +751,0.500001,0.000000,0.000000,0.866025 +752,0.500006,0.000000,0.000000,0.866022 +753,0.500013,0.000000,0.000000,0.866018 +754,0.500024,0.000000,0.000000,0.866012 +755,0.500037,0.000000,0.000000,0.866004 +756,0.500054,0.000000,0.000000,0.865994 +757,0.500073,0.000000,0.000000,0.865983 +758,0.500095,0.000000,0.000000,0.865970 +759,0.500121,0.000000,0.000000,0.865956 +760,0.500149,0.000000,0.000000,0.865939 +761,0.500180,0.000000,0.000000,0.865921 +762,0.500215,0.000000,0.000000,0.865901 +763,0.500252,0.000000,0.000000,0.865880 +764,0.500292,0.000000,0.000000,0.865857 +765,0.500336,0.000000,0.000000,0.865832 +766,0.500382,0.000000,0.000000,0.865805 +767,0.500431,0.000000,0.000000,0.865776 +768,0.500483,0.000000,0.000000,0.865746 +769,0.500538,0.000000,0.000000,0.865714 +770,0.500597,0.000000,0.000000,0.865681 +771,0.500658,0.000000,0.000000,0.865645 +772,0.500722,0.000000,0.000000,0.865608 +773,0.500789,0.000000,0.000000,0.865570 +774,0.500859,0.000000,0.000000,0.865529 +775,0.500932,0.000000,0.000000,0.865487 +776,0.501008,0.000000,0.000000,0.865443 +777,0.501087,0.000000,0.000000,0.865397 +778,0.501169,0.000000,0.000000,0.865350 +779,0.501254,0.000000,0.000000,0.865300 +780,0.501342,0.000000,0.000000,0.865249 +781,0.501432,0.000000,0.000000,0.865197 +782,0.501526,0.000000,0.000000,0.865142 +783,0.501623,0.000000,0.000000,0.865086 +784,0.501723,0.000000,0.000000,0.865028 +785,0.501826,0.000000,0.000000,0.864969 +786,0.501931,0.000000,0.000000,0.864908 +787,0.502040,0.000000,0.000000,0.864844 +788,0.502151,0.000000,0.000000,0.864780 +789,0.502266,0.000000,0.000000,0.864713 +790,0.502384,0.000000,0.000000,0.864645 +791,0.502504,0.000000,0.000000,0.864575 +792,0.502628,0.000000,0.000000,0.864503 +793,0.502754,0.000000,0.000000,0.864430 +794,0.502883,0.000000,0.000000,0.864354 +795,0.503016,0.000000,0.000000,0.864277 +796,0.503151,0.000000,0.000000,0.864199 +797,0.503289,0.000000,0.000000,0.864118 +798,0.503430,0.000000,0.000000,0.864036 +799,0.503574,0.000000,0.000000,0.863952 +800,0.503721,0.000000,0.000000,0.863866 +801,0.503871,0.000000,0.000000,0.863779 +802,0.504024,0.000000,0.000000,0.863689 +803,0.504180,0.000000,0.000000,0.863598 +804,0.504339,0.000000,0.000000,0.863506 +805,0.504501,0.000000,0.000000,0.863411 +806,0.504666,0.000000,0.000000,0.863315 +807,0.504833,0.000000,0.000000,0.863217 +808,0.505004,0.000000,0.000000,0.863117 +809,0.505177,0.000000,0.000000,0.863016 +810,0.505354,0.000000,0.000000,0.862912 +811,0.505533,0.000000,0.000000,0.862807 +812,0.505715,0.000000,0.000000,0.862700 +813,0.505901,0.000000,0.000000,0.862592 +814,0.506089,0.000000,0.000000,0.862481 +815,0.506280,0.000000,0.000000,0.862369 +816,0.506474,0.000000,0.000000,0.862255 +817,0.506671,0.000000,0.000000,0.862140 +818,0.506871,0.000000,0.000000,0.862022 +819,0.507073,0.000000,0.000000,0.861903 +820,0.507279,0.000000,0.000000,0.861782 +821,0.507487,0.000000,0.000000,0.861659 +822,0.507699,0.000000,0.000000,0.861535 +823,0.507913,0.000000,0.000000,0.861408 +824,0.508130,0.000000,0.000000,0.861280 +825,0.508351,0.000000,0.000000,0.861150 +826,0.508574,0.000000,0.000000,0.861019 +827,0.508800,0.000000,0.000000,0.860885 +828,0.509028,0.000000,0.000000,0.860750 +829,0.509260,0.000000,0.000000,0.860613 +830,0.509495,0.000000,0.000000,0.860474 +831,0.509732,0.000000,0.000000,0.860333 +832,0.509973,0.000000,0.000000,0.860191 +833,0.510216,0.000000,0.000000,0.860046 +834,0.510462,0.000000,0.000000,0.859900 +835,0.510711,0.000000,0.000000,0.859752 +836,0.510963,0.000000,0.000000,0.859603 +837,0.511218,0.000000,0.000000,0.859451 +838,0.511475,0.000000,0.000000,0.859298 +839,0.511736,0.000000,0.000000,0.859143 +840,0.511999,0.000000,0.000000,0.858986 +841,0.512265,0.000000,0.000000,0.858827 +842,0.512534,0.000000,0.000000,0.858667 +843,0.512806,0.000000,0.000000,0.858504 +844,0.513081,0.000000,0.000000,0.858340 +845,0.513358,0.000000,0.000000,0.858174 +846,0.513639,0.000000,0.000000,0.858006 +847,0.513922,0.000000,0.000000,0.857837 +848,0.514208,0.000000,0.000000,0.857665 +849,0.514497,0.000000,0.000000,0.857492 +850,0.514789,0.000000,0.000000,0.857317 +851,0.515084,0.000000,0.000000,0.857140 +852,0.515381,0.000000,0.000000,0.856961 +853,0.515681,0.000000,0.000000,0.856780 +854,0.515984,0.000000,0.000000,0.856598 +855,0.516290,0.000000,0.000000,0.856414 +856,0.516599,0.000000,0.000000,0.856227 +857,0.516911,0.000000,0.000000,0.856039 +858,0.517225,0.000000,0.000000,0.855849 +859,0.517542,0.000000,0.000000,0.855658 +860,0.517862,0.000000,0.000000,0.855464 +861,0.518185,0.000000,0.000000,0.855269 +862,0.518510,0.000000,0.000000,0.855071 +863,0.518839,0.000000,0.000000,0.854872 +864,0.519170,0.000000,0.000000,0.854671 +865,0.519504,0.000000,0.000000,0.854468 +866,0.519840,0.000000,0.000000,0.854264 +867,0.520180,0.000000,0.000000,0.854057 +868,0.520522,0.000000,0.000000,0.853848 +869,0.520867,0.000000,0.000000,0.853638 +870,0.521215,0.000000,0.000000,0.853426 +871,0.521565,0.000000,0.000000,0.853212 +872,0.521918,0.000000,0.000000,0.852995 +873,0.522274,0.000000,0.000000,0.852778 +874,0.522633,0.000000,0.000000,0.852558 +875,0.522995,0.000000,0.000000,0.852336 +876,0.523359,0.000000,0.000000,0.852112 +877,0.523726,0.000000,0.000000,0.851887 +878,0.524096,0.000000,0.000000,0.851659 +879,0.524468,0.000000,0.000000,0.851430 +880,0.524843,0.000000,0.000000,0.851199 +881,0.525221,0.000000,0.000000,0.850966 +882,0.525602,0.000000,0.000000,0.850731 +883,0.525985,0.000000,0.000000,0.850494 +884,0.526371,0.000000,0.000000,0.850255 +885,0.526760,0.000000,0.000000,0.850014 +886,0.527151,0.000000,0.000000,0.849772 +887,0.527545,0.000000,0.000000,0.849527 +888,0.527942,0.000000,0.000000,0.849280 +889,0.528342,0.000000,0.000000,0.849032 +890,0.528744,0.000000,0.000000,0.848781 +891,0.529149,0.000000,0.000000,0.848529 +892,0.529556,0.000000,0.000000,0.848275 +893,0.529967,0.000000,0.000000,0.848019 +894,0.530379,0.000000,0.000000,0.847760 +895,0.530795,0.000000,0.000000,0.847500 +896,0.531213,0.000000,0.000000,0.847238 +897,0.531634,0.000000,0.000000,0.846974 +898,0.532058,0.000000,0.000000,0.846708 +899,0.532484,0.000000,0.000000,0.846440 +900,0.532913,0.000000,0.000000,0.846170 +901,0.533344,0.000000,0.000000,0.845898 +902,0.533778,0.000000,0.000000,0.845625 +903,0.534215,0.000000,0.000000,0.845349 +904,0.534654,0.000000,0.000000,0.845071 +905,0.535096,0.000000,0.000000,0.844791 +906,0.535541,0.000000,0.000000,0.844510 +907,0.535988,0.000000,0.000000,0.844226 +908,0.536437,0.000000,0.000000,0.843940 +909,0.536890,0.000000,0.000000,0.843652 +910,0.537345,0.000000,0.000000,0.843363 +911,0.537802,0.000000,0.000000,0.843071 +912,0.538262,0.000000,0.000000,0.842777 +913,0.538725,0.000000,0.000000,0.842482 +914,0.539190,0.000000,0.000000,0.842184 +915,0.539658,0.000000,0.000000,0.841884 +916,0.540128,0.000000,0.000000,0.841583 +917,0.540601,0.000000,0.000000,0.841279 +918,0.541077,0.000000,0.000000,0.840973 +919,0.541555,0.000000,0.000000,0.840665 +920,0.542035,0.000000,0.000000,0.840356 +921,0.542519,0.000000,0.000000,0.840044 +922,0.543004,0.000000,0.000000,0.839730 +923,0.543492,0.000000,0.000000,0.839414 +924,0.543983,0.000000,0.000000,0.839096 +925,0.544476,0.000000,0.000000,0.838776 +926,0.544972,0.000000,0.000000,0.838454 +927,0.545470,0.000000,0.000000,0.838130 +928,0.545971,0.000000,0.000000,0.837804 +929,0.546474,0.000000,0.000000,0.837476 +930,0.546980,0.000000,0.000000,0.837146 +931,0.547488,0.000000,0.000000,0.836814 +932,0.547999,0.000000,0.000000,0.836479 +933,0.548512,0.000000,0.000000,0.836143 +934,0.549027,0.000000,0.000000,0.835804 +935,0.549545,0.000000,0.000000,0.835464 +936,0.550066,0.000000,0.000000,0.835121 +937,0.550589,0.000000,0.000000,0.834777 +938,0.551114,0.000000,0.000000,0.834430 +939,0.551642,0.000000,0.000000,0.834081 +940,0.552172,0.000000,0.000000,0.833730 +941,0.552705,0.000000,0.000000,0.833377 +942,0.553240,0.000000,0.000000,0.833022 +943,0.553777,0.000000,0.000000,0.832665 +944,0.554317,0.000000,0.000000,0.832305 +945,0.554860,0.000000,0.000000,0.831944 +946,0.555404,0.000000,0.000000,0.831580 +947,0.555951,0.000000,0.000000,0.831215 +948,0.556501,0.000000,0.000000,0.830847 +949,0.557053,0.000000,0.000000,0.830477 +950,0.557607,0.000000,0.000000,0.830105 +951,0.558163,0.000000,0.000000,0.829731 +952,0.558722,0.000000,0.000000,0.829355 +953,0.559284,0.000000,0.000000,0.828976 +954,0.559847,0.000000,0.000000,0.828596 +955,0.560413,0.000000,0.000000,0.828213 +956,0.560981,0.000000,0.000000,0.827828 +957,0.561552,0.000000,0.000000,0.827441 +958,0.562125,0.000000,0.000000,0.827052 +959,0.562700,0.000000,0.000000,0.826661 +960,0.563278,0.000000,0.000000,0.826268 +961,0.563858,0.000000,0.000000,0.825872 +962,0.564440,0.000000,0.000000,0.825474 +963,0.565024,0.000000,0.000000,0.825074 +964,0.565611,0.000000,0.000000,0.824672 +965,0.566200,0.000000,0.000000,0.824268 +966,0.566791,0.000000,0.000000,0.823862 +967,0.567385,0.000000,0.000000,0.823453 +968,0.567980,0.000000,0.000000,0.823042 +969,0.568578,0.000000,0.000000,0.822629 +970,0.569179,0.000000,0.000000,0.822214 +971,0.569781,0.000000,0.000000,0.821796 +972,0.570386,0.000000,0.000000,0.821377 +973,0.570993,0.000000,0.000000,0.820955 +974,0.571602,0.000000,0.000000,0.820531 +975,0.572213,0.000000,0.000000,0.820105 +976,0.572827,0.000000,0.000000,0.819676 +977,0.573443,0.000000,0.000000,0.819246 +978,0.574060,0.000000,0.000000,0.818813 +979,0.574681,0.000000,0.000000,0.818378 +980,0.575303,0.000000,0.000000,0.817941 +981,0.575927,0.000000,0.000000,0.817501 +982,0.576554,0.000000,0.000000,0.817059 +983,0.577183,0.000000,0.000000,0.816615 +984,0.577813,0.000000,0.000000,0.816169 +985,0.578446,0.000000,0.000000,0.815720 +986,0.579082,0.000000,0.000000,0.815270 +987,0.579719,0.000000,0.000000,0.814817 +988,0.580358,0.000000,0.000000,0.814361 +989,0.581000,0.000000,0.000000,0.813904 +990,0.581643,0.000000,0.000000,0.813444 +991,0.582289,0.000000,0.000000,0.812982 +992,0.582937,0.000000,0.000000,0.812518 +993,0.583586,0.000000,0.000000,0.812051 +994,0.584238,0.000000,0.000000,0.811582 +995,0.584892,0.000000,0.000000,0.811111 +996,0.585548,0.000000,0.000000,0.810638 +997,0.586206,0.000000,0.000000,0.810162 +998,0.586866,0.000000,0.000000,0.809684 +999,0.587528,0.000000,0.000000,0.809203 +1000,0.588193,0.000000,0.000000,0.808721 +1001,0.588859,0.000000,0.000000,0.808236 +1002,0.589527,0.000000,0.000000,0.807749 +1003,0.590197,0.000000,0.000000,0.807259 +1004,0.590869,0.000000,0.000000,0.806767 +1005,0.591543,0.000000,0.000000,0.806273 +1006,0.592220,0.000000,0.000000,0.805777 +1007,0.592898,0.000000,0.000000,0.805278 +1008,0.593578,0.000000,0.000000,0.804777 +1009,0.594260,0.000000,0.000000,0.804273 +1010,0.594944,0.000000,0.000000,0.803767 +1011,0.595629,0.000000,0.000000,0.803259 +1012,0.596317,0.000000,0.000000,0.802749 +1013,0.597007,0.000000,0.000000,0.802236 +1014,0.597699,0.000000,0.000000,0.801721 +1015,0.598392,0.000000,0.000000,0.801203 +1016,0.599088,0.000000,0.000000,0.800684 +1017,0.599785,0.000000,0.000000,0.800161 +1018,0.600484,0.000000,0.000000,0.799637 +1019,0.601185,0.000000,0.000000,0.799110 +1020,0.601888,0.000000,0.000000,0.798580 +1021,0.602593,0.000000,0.000000,0.798049 +1022,0.603300,0.000000,0.000000,0.797515 +1023,0.604008,0.000000,0.000000,0.796978 +1024,0.604718,0.000000,0.000000,0.796439 +1025,0.605430,0.000000,0.000000,0.795898 +1026,0.606144,0.000000,0.000000,0.795355 +1027,0.606860,0.000000,0.000000,0.794809 +1028,0.607578,0.000000,0.000000,0.794260 +1029,0.608297,0.000000,0.000000,0.793709 +1030,0.609018,0.000000,0.000000,0.793156 +1031,0.609741,0.000000,0.000000,0.792601 +1032,0.610466,0.000000,0.000000,0.792043 +1033,0.611192,0.000000,0.000000,0.791482 +1034,0.611920,0.000000,0.000000,0.790919 +1035,0.612650,0.000000,0.000000,0.790354 +1036,0.613382,0.000000,0.000000,0.789787 +1037,0.614115,0.000000,0.000000,0.789216 +1038,0.614850,0.000000,0.000000,0.788644 +1039,0.615587,0.000000,0.000000,0.788069 +1040,0.616325,0.000000,0.000000,0.787492 +1041,0.617065,0.000000,0.000000,0.786912 +1042,0.617807,0.000000,0.000000,0.786330 +1043,0.618551,0.000000,0.000000,0.785745 +1044,0.619296,0.000000,0.000000,0.785158 +1045,0.620043,0.000000,0.000000,0.784568 +1046,0.620791,0.000000,0.000000,0.783976 +1047,0.621541,0.000000,0.000000,0.783382 +1048,0.622293,0.000000,0.000000,0.782785 +1049,0.623046,0.000000,0.000000,0.782185 +1050,0.623801,0.000000,0.000000,0.781583 +1051,0.624557,0.000000,0.000000,0.780979 +1052,0.625316,0.000000,0.000000,0.780372 +1053,0.626075,0.000000,0.000000,0.779763 +1054,0.626836,0.000000,0.000000,0.779151 +1055,0.627599,0.000000,0.000000,0.778537 +1056,0.628363,0.000000,0.000000,0.777920 +1057,0.629129,0.000000,0.000000,0.777301 +1058,0.629897,0.000000,0.000000,0.776679 +1059,0.630666,0.000000,0.000000,0.776055 +1060,0.631436,0.000000,0.000000,0.775428 +1061,0.632208,0.000000,0.000000,0.774799 +1062,0.632981,0.000000,0.000000,0.774167 +1063,0.633756,0.000000,0.000000,0.773533 +1064,0.634533,0.000000,0.000000,0.772896 +1065,0.635311,0.000000,0.000000,0.772257 +1066,0.636090,0.000000,0.000000,0.771615 +1067,0.636871,0.000000,0.000000,0.770971 +1068,0.637653,0.000000,0.000000,0.770324 +1069,0.638436,0.000000,0.000000,0.769675 +1070,0.639222,0.000000,0.000000,0.769023 +1071,0.640008,0.000000,0.000000,0.768368 +1072,0.640796,0.000000,0.000000,0.767711 +1073,0.641585,0.000000,0.000000,0.767052 +1074,0.642376,0.000000,0.000000,0.766390 +1075,0.643168,0.000000,0.000000,0.765725 +1076,0.643961,0.000000,0.000000,0.765058 +1077,0.644756,0.000000,0.000000,0.764389 +1078,0.645552,0.000000,0.000000,0.763717 +1079,0.646349,0.000000,0.000000,0.763042 +1080,0.647148,0.000000,0.000000,0.762365 +1081,0.647948,0.000000,0.000000,0.761685 +1082,0.648749,0.000000,0.000000,0.761002 +1083,0.649552,0.000000,0.000000,0.760317 +1084,0.650356,0.000000,0.000000,0.759630 +1085,0.651161,0.000000,0.000000,0.758940 +1086,0.651967,0.000000,0.000000,0.758247 +1087,0.652775,0.000000,0.000000,0.757552 +1088,0.653584,0.000000,0.000000,0.756854 +1089,0.654394,0.000000,0.000000,0.756154 +1090,0.655205,0.000000,0.000000,0.755451 +1091,0.656018,0.000000,0.000000,0.754745 +1092,0.656832,0.000000,0.000000,0.754037 +1093,0.657647,0.000000,0.000000,0.753326 +1094,0.658463,0.000000,0.000000,0.752613 +1095,0.659280,0.000000,0.000000,0.751897 +1096,0.660099,0.000000,0.000000,0.751179 +1097,0.660918,0.000000,0.000000,0.750458 +1098,0.661739,0.000000,0.000000,0.749734 +1099,0.662561,0.000000,0.000000,0.749008 +1100,0.663384,0.000000,0.000000,0.748279 +1101,0.664208,0.000000,0.000000,0.747548 +1102,0.665034,0.000000,0.000000,0.746813 +1103,0.665860,0.000000,0.000000,0.746077 +1104,0.666687,0.000000,0.000000,0.745337 +1105,0.667516,0.000000,0.000000,0.744596 +1106,0.668345,0.000000,0.000000,0.743851 +1107,0.669176,0.000000,0.000000,0.743104 +1108,0.670008,0.000000,0.000000,0.742354 +1109,0.670840,0.000000,0.000000,0.741602 +1110,0.671674,0.000000,0.000000,0.740847 +1111,0.672509,0.000000,0.000000,0.740089 +1112,0.673345,0.000000,0.000000,0.739329 +1113,0.674181,0.000000,0.000000,0.738566 +1114,0.675019,0.000000,0.000000,0.737800 +1115,0.675858,0.000000,0.000000,0.737032 +1116,0.676697,0.000000,0.000000,0.736261 +1117,0.677538,0.000000,0.000000,0.735488 +1118,0.678379,0.000000,0.000000,0.734712 +1119,0.679222,0.000000,0.000000,0.733933 +1120,0.680065,0.000000,0.000000,0.733152 +1121,0.680909,0.000000,0.000000,0.732368 +1122,0.681754,0.000000,0.000000,0.731581 +1123,0.682600,0.000000,0.000000,0.730792 +1124,0.683447,0.000000,0.000000,0.730000 +1125,0.684295,0.000000,0.000000,0.729205 +1126,0.685144,0.000000,0.000000,0.728408 +1127,0.685993,0.000000,0.000000,0.727608 +1128,0.686843,0.000000,0.000000,0.726805 +1129,0.687694,0.000000,0.000000,0.726000 +1130,0.688546,0.000000,0.000000,0.725192 +1131,0.689399,0.000000,0.000000,0.724382 +1132,0.690253,0.000000,0.000000,0.723569 +1133,0.691107,0.000000,0.000000,0.722753 +1134,0.691962,0.000000,0.000000,0.721934 +1135,0.692818,0.000000,0.000000,0.721113 +1136,0.693674,0.000000,0.000000,0.720289 +1137,0.694531,0.000000,0.000000,0.719463 +1138,0.695389,0.000000,0.000000,0.718633 +1139,0.696248,0.000000,0.000000,0.717801 +1140,0.697107,0.000000,0.000000,0.716967 +1141,0.697967,0.000000,0.000000,0.716130 +1142,0.698828,0.000000,0.000000,0.715290 +1143,0.699690,0.000000,0.000000,0.714447 +1144,0.700552,0.000000,0.000000,0.713602 +1145,0.701414,0.000000,0.000000,0.712754 +1146,0.702278,0.000000,0.000000,0.711903 +1147,0.703142,0.000000,0.000000,0.711050 +1148,0.704006,0.000000,0.000000,0.710194 +1149,0.704871,0.000000,0.000000,0.709335 +1150,0.705737,0.000000,0.000000,0.708474 +1151,0.706603,0.000000,0.000000,0.707610 +1152,0.707470,0.000000,0.000000,0.706743 +1153,0.708338,0.000000,0.000000,0.705874 +1154,0.709206,0.000000,0.000000,0.705001 +1155,0.710074,0.000000,0.000000,0.704127 +1156,0.710943,0.000000,0.000000,0.703249 +1157,0.711813,0.000000,0.000000,0.702369 +1158,0.712683,0.000000,0.000000,0.701486 +1159,0.713554,0.000000,0.000000,0.700601 +1160,0.714425,0.000000,0.000000,0.699712 +1161,0.715296,0.000000,0.000000,0.698821 +1162,0.716168,0.000000,0.000000,0.697928 +1163,0.717041,0.000000,0.000000,0.697031 +1164,0.717913,0.000000,0.000000,0.696132 +1165,0.718787,0.000000,0.000000,0.695231 +1166,0.719660,0.000000,0.000000,0.694326 +1167,0.720535,0.000000,0.000000,0.693419 +1168,0.721409,0.000000,0.000000,0.692509 +1169,0.722284,0.000000,0.000000,0.691597 +1170,0.723159,0.000000,0.000000,0.690681 +1171,0.724035,0.000000,0.000000,0.689764 +1172,0.724911,0.000000,0.000000,0.688843 +1173,0.725787,0.000000,0.000000,0.687920 +1174,0.726663,0.000000,0.000000,0.686994 +1175,0.727540,0.000000,0.000000,0.686065 +1176,0.728417,0.000000,0.000000,0.685134 +1177,0.729295,0.000000,0.000000,0.684199 +1178,0.730173,0.000000,0.000000,0.683263 +1179,0.731051,0.000000,0.000000,0.682323 +1180,0.731929,0.000000,0.000000,0.681381 +1181,0.732807,0.000000,0.000000,0.680436 +1182,0.733686,0.000000,0.000000,0.679488 +1183,0.734565,0.000000,0.000000,0.678538 +1184,0.735444,0.000000,0.000000,0.677585 +1185,0.736324,0.000000,0.000000,0.676629 +1186,0.737203,0.000000,0.000000,0.675671 +1187,0.738083,0.000000,0.000000,0.674710 +1188,0.738963,0.000000,0.000000,0.673746 +1189,0.739843,0.000000,0.000000,0.672780 +1190,0.740723,0.000000,0.000000,0.671811 +1191,0.741603,0.000000,0.000000,0.670839 +1192,0.742484,0.000000,0.000000,0.669864 +1193,0.743364,0.000000,0.000000,0.668887 +1194,0.744245,0.000000,0.000000,0.667907 +1195,0.745126,0.000000,0.000000,0.666924 +1196,0.746006,0.000000,0.000000,0.665939 +1197,0.746887,0.000000,0.000000,0.664951 +1198,0.747768,0.000000,0.000000,0.663960 +1199,0.748649,0.000000,0.000000,0.662967 +1200,0.749530,0.000000,0.000000,0.661971 +1201,0.750411,0.000000,0.000000,0.660972 +1202,0.751292,0.000000,0.000000,0.659970 +1203,0.752173,0.000000,0.000000,0.658966 +1204,0.753054,0.000000,0.000000,0.657959 +1205,0.753934,0.000000,0.000000,0.656950 +1206,0.754815,0.000000,0.000000,0.655937 +1207,0.755696,0.000000,0.000000,0.654923 +1208,0.756577,0.000000,0.000000,0.653905 +1209,0.757457,0.000000,0.000000,0.652885 +1210,0.758338,0.000000,0.000000,0.651862 +1211,0.759218,0.000000,0.000000,0.650836 +1212,0.760099,0.000000,0.000000,0.649808 +1213,0.760979,0.000000,0.000000,0.648777 +1214,0.761859,0.000000,0.000000,0.647743 +1215,0.762739,0.000000,0.000000,0.646707 +1216,0.763619,0.000000,0.000000,0.645668 +1217,0.764498,0.000000,0.000000,0.644626 +1218,0.765378,0.000000,0.000000,0.643581 +1219,0.766257,0.000000,0.000000,0.642534 +1220,0.767136,0.000000,0.000000,0.641485 +1221,0.768015,0.000000,0.000000,0.640432 +1222,0.768893,0.000000,0.000000,0.639377 +1223,0.769771,0.000000,0.000000,0.638320 +1224,0.770650,0.000000,0.000000,0.637259 +1225,0.771527,0.000000,0.000000,0.636196 +1226,0.772405,0.000000,0.000000,0.635130 +1227,0.773282,0.000000,0.000000,0.634062 +1228,0.774159,0.000000,0.000000,0.632991 +1229,0.775036,0.000000,0.000000,0.631917 +1230,0.775912,0.000000,0.000000,0.630841 +1231,0.776788,0.000000,0.000000,0.629762 +1232,0.777664,0.000000,0.000000,0.628681 +1233,0.778539,0.000000,0.000000,0.627596 +1234,0.779414,0.000000,0.000000,0.626509 +1235,0.780288,0.000000,0.000000,0.625420 +1236,0.781163,0.000000,0.000000,0.624328 +1237,0.782036,0.000000,0.000000,0.623233 +1238,0.782910,0.000000,0.000000,0.622135 +1239,0.783783,0.000000,0.000000,0.621035 +1240,0.784655,0.000000,0.000000,0.619933 +1241,0.785527,0.000000,0.000000,0.618827 +1242,0.786399,0.000000,0.000000,0.617719 +1243,0.787270,0.000000,0.000000,0.616609 +1244,0.788140,0.000000,0.000000,0.615496 +1245,0.789010,0.000000,0.000000,0.614380 +1246,0.789880,0.000000,0.000000,0.613261 +1247,0.790749,0.000000,0.000000,0.612140 +1248,0.791618,0.000000,0.000000,0.611017 +1249,0.792486,0.000000,0.000000,0.609890 +1250,0.793353,0.000000,0.000000,0.608761 +1251,0.794220,0.000000,0.000000,0.607630 +1252,0.795087,0.000000,0.000000,0.606496 +1253,0.795952,0.000000,0.000000,0.605359 +1254,0.796818,0.000000,0.000000,0.604220 +1255,0.797682,0.000000,0.000000,0.603078 +1256,0.798546,0.000000,0.000000,0.601934 +1257,0.799409,0.000000,0.000000,0.600787 +1258,0.800272,0.000000,0.000000,0.599637 +1259,0.801134,0.000000,0.000000,0.598485 +1260,0.801996,0.000000,0.000000,0.597330 +1261,0.802856,0.000000,0.000000,0.596173 +1262,0.803716,0.000000,0.000000,0.595013 +1263,0.804576,0.000000,0.000000,0.593850 +1264,0.805434,0.000000,0.000000,0.592685 +1265,0.806292,0.000000,0.000000,0.591518 +1266,0.807149,0.000000,0.000000,0.590348 +1267,0.808006,0.000000,0.000000,0.589175 +1268,0.808861,0.000000,0.000000,0.588000 +1269,0.809716,0.000000,0.000000,0.586822 +1270,0.810570,0.000000,0.000000,0.585641 +1271,0.811424,0.000000,0.000000,0.584459 +1272,0.812276,0.000000,0.000000,0.583273 +1273,0.813128,0.000000,0.000000,0.582085 +1274,0.813979,0.000000,0.000000,0.580895 +1275,0.814829,0.000000,0.000000,0.579702 +1276,0.815678,0.000000,0.000000,0.578506 +1277,0.816526,0.000000,0.000000,0.577308 +1278,0.817374,0.000000,0.000000,0.576108 +1279,0.818220,0.000000,0.000000,0.574905 +1280,0.819066,0.000000,0.000000,0.573699 +1281,0.819911,0.000000,0.000000,0.572491 +1282,0.820755,0.000000,0.000000,0.571281 +1283,0.821598,0.000000,0.000000,0.570068 +1284,0.822440,0.000000,0.000000,0.568852 +1285,0.823281,0.000000,0.000000,0.567634 +1286,0.824121,0.000000,0.000000,0.566413 +1287,0.824960,0.000000,0.000000,0.565191 +1288,0.825799,0.000000,0.000000,0.563965 +1289,0.826636,0.000000,0.000000,0.562737 +1290,0.827472,0.000000,0.000000,0.561507 +1291,0.828307,0.000000,0.000000,0.560274 +1292,0.829142,0.000000,0.000000,0.559039 +1293,0.829975,0.000000,0.000000,0.557801 +1294,0.830807,0.000000,0.000000,0.556561 +1295,0.831638,0.000000,0.000000,0.555318 +1296,0.832468,0.000000,0.000000,0.554073 +1297,0.833297,0.000000,0.000000,0.552826 +1298,0.834125,0.000000,0.000000,0.551576 +1299,0.834952,0.000000,0.000000,0.550323 +1300,0.835777,0.000000,0.000000,0.549069 +1301,0.836602,0.000000,0.000000,0.547812 +1302,0.837425,0.000000,0.000000,0.546552 +1303,0.838247,0.000000,0.000000,0.545290 +1304,0.839069,0.000000,0.000000,0.544026 +1305,0.839888,0.000000,0.000000,0.542759 +1306,0.840707,0.000000,0.000000,0.541490 +1307,0.841525,0.000000,0.000000,0.540218 +1308,0.842341,0.000000,0.000000,0.538944 +1309,0.843156,0.000000,0.000000,0.537668 +1310,0.843970,0.000000,0.000000,0.536390 +1311,0.844783,0.000000,0.000000,0.535109 +1312,0.845595,0.000000,0.000000,0.533825 +1313,0.846405,0.000000,0.000000,0.532540 +1314,0.847214,0.000000,0.000000,0.531252 +1315,0.848022,0.000000,0.000000,0.529961 +1316,0.848828,0.000000,0.000000,0.528669 +1317,0.849634,0.000000,0.000000,0.527374 +1318,0.850437,0.000000,0.000000,0.526076 +1319,0.851240,0.000000,0.000000,0.524776 +1320,0.852041,0.000000,0.000000,0.523475 +1321,0.852841,0.000000,0.000000,0.522170 +1322,0.853640,0.000000,0.000000,0.520864 +1323,0.854437,0.000000,0.000000,0.519555 +1324,0.855233,0.000000,0.000000,0.518244 +1325,0.856028,0.000000,0.000000,0.516930 +1326,0.856821,0.000000,0.000000,0.515614 +1327,0.857612,0.000000,0.000000,0.514296 +1328,0.858403,0.000000,0.000000,0.512976 +1329,0.859192,0.000000,0.000000,0.511654 +1330,0.859979,0.000000,0.000000,0.510329 +1331,0.860765,0.000000,0.000000,0.509002 +1332,0.861550,0.000000,0.000000,0.507673 +1333,0.862333,0.000000,0.000000,0.506341 +1334,0.863115,0.000000,0.000000,0.505007 +1335,0.863895,0.000000,0.000000,0.503672 +1336,0.864674,0.000000,0.000000,0.502333 +1337,0.865451,0.000000,0.000000,0.500993 +1338,0.866227,0.000000,0.000000,0.499650 +1339,0.867001,0.000000,0.000000,0.498306 +1340,0.867774,0.000000,0.000000,0.496959 +1341,0.868545,0.000000,0.000000,0.495610 +1342,0.869315,0.000000,0.000000,0.494258 +1343,0.870083,0.000000,0.000000,0.492905 +1344,0.870850,0.000000,0.000000,0.491549 +1345,0.871615,0.000000,0.000000,0.490191 +1346,0.872378,0.000000,0.000000,0.488832 +1347,0.873140,0.000000,0.000000,0.487469 +1348,0.873900,0.000000,0.000000,0.486105 +1349,0.874659,0.000000,0.000000,0.484739 +1350,0.875416,0.000000,0.000000,0.483370 +1351,0.876171,0.000000,0.000000,0.482000 +1352,0.876925,0.000000,0.000000,0.480627 +1353,0.877677,0.000000,0.000000,0.479252 +1354,0.878428,0.000000,0.000000,0.477876 +1355,0.879176,0.000000,0.000000,0.476497 +1356,0.879923,0.000000,0.000000,0.475116 +1357,0.880669,0.000000,0.000000,0.473732 +1358,0.881413,0.000000,0.000000,0.472347 +1359,0.882155,0.000000,0.000000,0.470960 +1360,0.882895,0.000000,0.000000,0.469571 +1361,0.883633,0.000000,0.000000,0.468179 +1362,0.884370,0.000000,0.000000,0.466786 +1363,0.885105,0.000000,0.000000,0.465391 +1364,0.885839,0.000000,0.000000,0.463993 +1365,0.886570,0.000000,0.000000,0.462594 +1366,0.887300,0.000000,0.000000,0.461192 +1367,0.888028,0.000000,0.000000,0.459789 +1368,0.888755,0.000000,0.000000,0.458383 +1369,0.889479,0.000000,0.000000,0.456976 +1370,0.890202,0.000000,0.000000,0.455567 +1371,0.890923,0.000000,0.000000,0.454155 +1372,0.891642,0.000000,0.000000,0.452742 +1373,0.892359,0.000000,0.000000,0.451327 +1374,0.893074,0.000000,0.000000,0.449909 +1375,0.893788,0.000000,0.000000,0.448490 +1376,0.894499,0.000000,0.000000,0.447069 +1377,0.895209,0.000000,0.000000,0.445646 +1378,0.895917,0.000000,0.000000,0.444221 +1379,0.896623,0.000000,0.000000,0.442794 +1380,0.897327,0.000000,0.000000,0.441366 +1381,0.898030,0.000000,0.000000,0.439935 +1382,0.898730,0.000000,0.000000,0.438502 +1383,0.899428,0.000000,0.000000,0.437068 +1384,0.900125,0.000000,0.000000,0.435632 +1385,0.900819,0.000000,0.000000,0.434194 +1386,0.901512,0.000000,0.000000,0.432754 +1387,0.902203,0.000000,0.000000,0.431312 +1388,0.902892,0.000000,0.000000,0.429868 +1389,0.903578,0.000000,0.000000,0.428423 +1390,0.904263,0.000000,0.000000,0.426976 +1391,0.904946,0.000000,0.000000,0.425527 +1392,0.905627,0.000000,0.000000,0.424076 +1393,0.906305,0.000000,0.000000,0.422623 +1394,0.906982,0.000000,0.000000,0.421169 +1395,0.907657,0.000000,0.000000,0.419713 +1396,0.908330,0.000000,0.000000,0.418255 +1397,0.909001,0.000000,0.000000,0.416795 +1398,0.909669,0.000000,0.000000,0.415333 +1399,0.910336,0.000000,0.000000,0.413870 +1400,0.911000,0.000000,0.000000,0.412405 +1401,0.911663,0.000000,0.000000,0.410939 +1402,0.912323,0.000000,0.000000,0.409470 +1403,0.912982,0.000000,0.000000,0.408000 +1404,0.913638,0.000000,0.000000,0.406529 +1405,0.914292,0.000000,0.000000,0.405055 +1406,0.914944,0.000000,0.000000,0.403580 +1407,0.915594,0.000000,0.000000,0.402103 +1408,0.916242,0.000000,0.000000,0.400625 +1409,0.916888,0.000000,0.000000,0.399145 +1410,0.917532,0.000000,0.000000,0.397663 +1411,0.918173,0.000000,0.000000,0.396180 +1412,0.918812,0.000000,0.000000,0.394695 +1413,0.919450,0.000000,0.000000,0.393208 +1414,0.920085,0.000000,0.000000,0.391720 +1415,0.920717,0.000000,0.000000,0.390230 +1416,0.921348,0.000000,0.000000,0.388739 +1417,0.921977,0.000000,0.000000,0.387246 +1418,0.922603,0.000000,0.000000,0.385751 +1419,0.923227,0.000000,0.000000,0.384255 +1420,0.923849,0.000000,0.000000,0.382758 +1421,0.924469,0.000000,0.000000,0.381258 +1422,0.925086,0.000000,0.000000,0.379758 +1423,0.925701,0.000000,0.000000,0.378255 +1424,0.926314,0.000000,0.000000,0.376752 +1425,0.926925,0.000000,0.000000,0.375247 +1426,0.927534,0.000000,0.000000,0.373740 +1427,0.928140,0.000000,0.000000,0.372232 +1428,0.928744,0.000000,0.000000,0.370722 +1429,0.929346,0.000000,0.000000,0.369211 +1430,0.929945,0.000000,0.000000,0.367698 +1431,0.930542,0.000000,0.000000,0.366184 +1432,0.931137,0.000000,0.000000,0.364669 +1433,0.931730,0.000000,0.000000,0.363152 +1434,0.932320,0.000000,0.000000,0.361634 +1435,0.932908,0.000000,0.000000,0.360114 +1436,0.933494,0.000000,0.000000,0.358593 +1437,0.934077,0.000000,0.000000,0.357071 +1438,0.934659,0.000000,0.000000,0.355547 +1439,0.935237,0.000000,0.000000,0.354022 +1440,0.935814,0.000000,0.000000,0.352495 +1441,0.936388,0.000000,0.000000,0.350967 +1442,0.936960,0.000000,0.000000,0.349438 +1443,0.937529,0.000000,0.000000,0.347907 +1444,0.938096,0.000000,0.000000,0.346375 +1445,0.938661,0.000000,0.000000,0.344842 +1446,0.939223,0.000000,0.000000,0.343308 +1447,0.939783,0.000000,0.000000,0.341772 +1448,0.940340,0.000000,0.000000,0.340235 +1449,0.940896,0.000000,0.000000,0.338697 +1450,0.941448,0.000000,0.000000,0.337157 +1451,0.941999,0.000000,0.000000,0.335617 +1452,0.942547,0.000000,0.000000,0.334075 +1453,0.943092,0.000000,0.000000,0.332531 +1454,0.943635,0.000000,0.000000,0.330987 +1455,0.944176,0.000000,0.000000,0.329441 +1456,0.944714,0.000000,0.000000,0.327895 +1457,0.945250,0.000000,0.000000,0.326347 +1458,0.945784,0.000000,0.000000,0.324797 +1459,0.946315,0.000000,0.000000,0.323247 +1460,0.946843,0.000000,0.000000,0.321696 +1461,0.947369,0.000000,0.000000,0.320143 +1462,0.947893,0.000000,0.000000,0.318589 +1463,0.948414,0.000000,0.000000,0.317035 +1464,0.948933,0.000000,0.000000,0.315479 +1465,0.949449,0.000000,0.000000,0.313922 +1466,0.949963,0.000000,0.000000,0.312363 +1467,0.950474,0.000000,0.000000,0.310804 +1468,0.950983,0.000000,0.000000,0.309244 +1469,0.951489,0.000000,0.000000,0.307683 +1470,0.951993,0.000000,0.000000,0.306120 +1471,0.952494,0.000000,0.000000,0.304557 +1472,0.952993,0.000000,0.000000,0.302992 +1473,0.953489,0.000000,0.000000,0.301427 +1474,0.953983,0.000000,0.000000,0.299861 +1475,0.954474,0.000000,0.000000,0.298293 +1476,0.954963,0.000000,0.000000,0.296725 +1477,0.955449,0.000000,0.000000,0.295155 +1478,0.955933,0.000000,0.000000,0.293585 +1479,0.956414,0.000000,0.000000,0.292014 +1480,0.956893,0.000000,0.000000,0.290442 +1481,0.957369,0.000000,0.000000,0.288869 +1482,0.957842,0.000000,0.000000,0.287295 +1483,0.958313,0.000000,0.000000,0.285720 +1484,0.958782,0.000000,0.000000,0.284144 +1485,0.959248,0.000000,0.000000,0.282567 +1486,0.959711,0.000000,0.000000,0.280990 +1487,0.960172,0.000000,0.000000,0.279411 +1488,0.960630,0.000000,0.000000,0.277832 +1489,0.961085,0.000000,0.000000,0.276252 +1490,0.961538,0.000000,0.000000,0.274671 +1491,0.961989,0.000000,0.000000,0.273089 +1492,0.962437,0.000000,0.000000,0.271507 +1493,0.962882,0.000000,0.000000,0.269923 +1494,0.963324,0.000000,0.000000,0.268339 +1495,0.963765,0.000000,0.000000,0.266754 +1496,0.964202,0.000000,0.000000,0.265169 +1497,0.964637,0.000000,0.000000,0.263582 +1498,0.965069,0.000000,0.000000,0.261995 +1499,0.965499,0.000000,0.000000,0.260408 +1500,0.965926,0.000000,0.000000,0.258819 +1501,0.966350,0.000000,0.000000,0.257230 +1502,0.966772,0.000000,0.000000,0.255640 +1503,0.967191,0.000000,0.000000,0.254049 +1504,0.967608,0.000000,0.000000,0.252458 +1505,0.968022,0.000000,0.000000,0.250866 +1506,0.968433,0.000000,0.000000,0.249274 +1507,0.968842,0.000000,0.000000,0.247680 +1508,0.969248,0.000000,0.000000,0.246087 +1509,0.969651,0.000000,0.000000,0.244492 +1510,0.970052,0.000000,0.000000,0.242897 +1511,0.970450,0.000000,0.000000,0.241301 +1512,0.970846,0.000000,0.000000,0.239705 +1513,0.971239,0.000000,0.000000,0.238109 +1514,0.971629,0.000000,0.000000,0.236511 +1515,0.972016,0.000000,0.000000,0.234913 +1516,0.972401,0.000000,0.000000,0.233315 +1517,0.972783,0.000000,0.000000,0.231716 +1518,0.973163,0.000000,0.000000,0.230117 +1519,0.973540,0.000000,0.000000,0.228517 +1520,0.973914,0.000000,0.000000,0.226916 +1521,0.974286,0.000000,0.000000,0.225316 +1522,0.974655,0.000000,0.000000,0.223714 +1523,0.975021,0.000000,0.000000,0.222112 +1524,0.975385,0.000000,0.000000,0.220510 +1525,0.975746,0.000000,0.000000,0.218908 +1526,0.976104,0.000000,0.000000,0.217305 +1527,0.976459,0.000000,0.000000,0.215701 +1528,0.976812,0.000000,0.000000,0.214097 +1529,0.977163,0.000000,0.000000,0.212493 +1530,0.977510,0.000000,0.000000,0.210889 +1531,0.977855,0.000000,0.000000,0.209284 +1532,0.978197,0.000000,0.000000,0.207678 +1533,0.978537,0.000000,0.000000,0.206073 +1534,0.978874,0.000000,0.000000,0.204467 +1535,0.979208,0.000000,0.000000,0.202860 +1536,0.979539,0.000000,0.000000,0.201254 +1537,0.979868,0.000000,0.000000,0.199647 +1538,0.980194,0.000000,0.000000,0.198040 +1539,0.980517,0.000000,0.000000,0.196433 +1540,0.980838,0.000000,0.000000,0.194825 +1541,0.981156,0.000000,0.000000,0.193217 +1542,0.981471,0.000000,0.000000,0.191609 +1543,0.981784,0.000000,0.000000,0.190001 +1544,0.982094,0.000000,0.000000,0.188392 +1545,0.982401,0.000000,0.000000,0.186783 +1546,0.982706,0.000000,0.000000,0.185174 +1547,0.983007,0.000000,0.000000,0.183565 +1548,0.983307,0.000000,0.000000,0.181956 +1549,0.983603,0.000000,0.000000,0.180347 +1550,0.983897,0.000000,0.000000,0.178737 +1551,0.984188,0.000000,0.000000,0.177128 +1552,0.984476,0.000000,0.000000,0.175518 +1553,0.984762,0.000000,0.000000,0.173908 +1554,0.985045,0.000000,0.000000,0.172298 +1555,0.985325,0.000000,0.000000,0.170688 +1556,0.985603,0.000000,0.000000,0.169078 +1557,0.985878,0.000000,0.000000,0.167468 +1558,0.986150,0.000000,0.000000,0.165858 +1559,0.986419,0.000000,0.000000,0.164247 +1560,0.986686,0.000000,0.000000,0.162637 +1561,0.986950,0.000000,0.000000,0.161027 +1562,0.987211,0.000000,0.000000,0.159417 +1563,0.987470,0.000000,0.000000,0.157807 +1564,0.987726,0.000000,0.000000,0.156196 +1565,0.987979,0.000000,0.000000,0.154586 +1566,0.988230,0.000000,0.000000,0.152976 +1567,0.988478,0.000000,0.000000,0.151366 +1568,0.988723,0.000000,0.000000,0.149756 +1569,0.988965,0.000000,0.000000,0.148146 +1570,0.989205,0.000000,0.000000,0.146536 +1571,0.989442,0.000000,0.000000,0.144927 +1572,0.989677,0.000000,0.000000,0.143317 +1573,0.989909,0.000000,0.000000,0.141708 +1574,0.990138,0.000000,0.000000,0.140099 +1575,0.990364,0.000000,0.000000,0.138489 +1576,0.990588,0.000000,0.000000,0.136881 +1577,0.990809,0.000000,0.000000,0.135272 +1578,0.991027,0.000000,0.000000,0.133663 +1579,0.991242,0.000000,0.000000,0.132055 +1580,0.991455,0.000000,0.000000,0.130447 +1581,0.991666,0.000000,0.000000,0.128839 +1582,0.991873,0.000000,0.000000,0.127231 +1583,0.992078,0.000000,0.000000,0.125624 +1584,0.992280,0.000000,0.000000,0.124016 +1585,0.992480,0.000000,0.000000,0.122410 +1586,0.992677,0.000000,0.000000,0.120803 +1587,0.992871,0.000000,0.000000,0.119197 +1588,0.993062,0.000000,0.000000,0.117591 +1589,0.993251,0.000000,0.000000,0.115985 +1590,0.993437,0.000000,0.000000,0.114380 +1591,0.993621,0.000000,0.000000,0.112775 +1592,0.993801,0.000000,0.000000,0.111170 +1593,0.993980,0.000000,0.000000,0.109566 +1594,0.994155,0.000000,0.000000,0.107962 +1595,0.994328,0.000000,0.000000,0.106358 +1596,0.994498,0.000000,0.000000,0.104755 +1597,0.994666,0.000000,0.000000,0.103152 +1598,0.994830,0.000000,0.000000,0.101550 +1599,0.994993,0.000000,0.000000,0.099948 +1600,0.995152,0.000000,0.000000,0.098347 +1601,0.995309,0.000000,0.000000,0.096746 +1602,0.995463,0.000000,0.000000,0.095145 +1603,0.995615,0.000000,0.000000,0.093545 +1604,0.995764,0.000000,0.000000,0.091946 +1605,0.995910,0.000000,0.000000,0.090347 +1606,0.996054,0.000000,0.000000,0.088748 +1607,0.996195,0.000000,0.000000,0.087150 +1608,0.996334,0.000000,0.000000,0.085553 +1609,0.996469,0.000000,0.000000,0.083956 +1610,0.996603,0.000000,0.000000,0.082360 +1611,0.996733,0.000000,0.000000,0.080764 +1612,0.996861,0.000000,0.000000,0.079169 +1613,0.996987,0.000000,0.000000,0.077574 +1614,0.997109,0.000000,0.000000,0.075980 +1615,0.997229,0.000000,0.000000,0.074387 +1616,0.997347,0.000000,0.000000,0.072794 +1617,0.997462,0.000000,0.000000,0.071202 +1618,0.997574,0.000000,0.000000,0.069611 +1619,0.997684,0.000000,0.000000,0.068020 +1620,0.997791,0.000000,0.000000,0.066430 +1621,0.997896,0.000000,0.000000,0.064840 +1622,0.997998,0.000000,0.000000,0.063252 +1623,0.998097,0.000000,0.000000,0.061664 +1624,0.998194,0.000000,0.000000,0.060077 +1625,0.998288,0.000000,0.000000,0.058490 +1626,0.998380,0.000000,0.000000,0.056904 +1627,0.998469,0.000000,0.000000,0.055319 +1628,0.998555,0.000000,0.000000,0.053735 +1629,0.998639,0.000000,0.000000,0.052151 +1630,0.998721,0.000000,0.000000,0.050569 +1631,0.998799,0.000000,0.000000,0.048987 +1632,0.998876,0.000000,0.000000,0.047406 +1633,0.998949,0.000000,0.000000,0.045825 +1634,0.999021,0.000000,0.000000,0.044246 +1635,0.999089,0.000000,0.000000,0.042667 +1636,0.999155,0.000000,0.000000,0.041090 +1637,0.999219,0.000000,0.000000,0.039513 +1638,0.999280,0.000000,0.000000,0.037937 +1639,0.999339,0.000000,0.000000,0.036362 +1640,0.999395,0.000000,0.000000,0.034787 +1641,0.999448,0.000000,0.000000,0.033214 +1642,0.999499,0.000000,0.000000,0.031642 +1643,0.999548,0.000000,0.000000,0.030070 +1644,0.999594,0.000000,0.000000,0.028500 +1645,0.999637,0.000000,0.000000,0.026930 +1646,0.999678,0.000000,0.000000,0.025361 +1647,0.999717,0.000000,0.000000,0.023794 +1648,0.999753,0.000000,0.000000,0.022227 +1649,0.999787,0.000000,0.000000,0.020661 +1650,0.999818,0.000000,0.000000,0.019097 +1651,0.999846,0.000000,0.000000,0.017533 +1652,0.999872,0.000000,0.000000,0.015971 +1653,0.999896,0.000000,0.000000,0.014409 +1654,0.999917,0.000000,0.000000,0.012849 +1655,0.999936,0.000000,0.000000,0.011289 +1656,0.999953,0.000000,0.000000,0.009731 +1657,0.999967,0.000000,0.000000,0.008173 +1658,0.999978,0.000000,0.000000,0.006617 +1659,0.999987,0.000000,0.000000,0.005062 +1660,0.999994,0.000000,0.000000,0.003508 +1661,0.999998,0.000000,0.000000,0.001955 +1662,1.000000,0.000000,0.000000,0.000404 +1663,0.999999,0.000000,0.000000,-0.001147 +1664,0.999996,0.000000,0.000000,-0.002696 +1665,0.999991,0.000000,0.000000,-0.004245 +1666,0.999983,0.000000,0.000000,-0.005792 +1667,0.999973,0.000000,0.000000,-0.007338 +1668,0.999961,0.000000,0.000000,-0.008882 +1669,0.999946,0.000000,0.000000,-0.010426 +1670,0.999928,0.000000,0.000000,-0.011968 +1671,0.999909,0.000000,0.000000,-0.013509 +1672,0.999887,0.000000,0.000000,-0.015049 +1673,0.999862,0.000000,0.000000,-0.016588 +1674,0.999836,0.000000,0.000000,-0.018125 +1675,0.999807,0.000000,0.000000,-0.019661 +1676,0.999775,0.000000,0.000000,-0.021196 +1677,0.999742,0.000000,0.000000,-0.022729 +1678,0.999706,0.000000,0.000000,-0.024261 +1679,0.999667,0.000000,0.000000,-0.025792 +1680,0.999627,0.000000,0.000000,-0.027322 +1681,0.999584,0.000000,0.000000,-0.028850 +1682,0.999539,0.000000,0.000000,-0.030377 +1683,0.999491,0.000000,0.000000,-0.031902 +1684,0.999441,0.000000,0.000000,-0.033426 +1685,0.999389,0.000000,0.000000,-0.034949 +1686,0.999335,0.000000,0.000000,-0.036470 +1687,0.999278,0.000000,0.000000,-0.037990 +1688,0.999219,0.000000,0.000000,-0.039509 +1689,0.999158,0.000000,0.000000,-0.041026 +1690,0.999095,0.000000,0.000000,-0.042542 +1691,0.999029,0.000000,0.000000,-0.044056 +1692,0.998961,0.000000,0.000000,-0.045569 +1693,0.998891,0.000000,0.000000,-0.047080 +1694,0.998819,0.000000,0.000000,-0.048590 +1695,0.998744,0.000000,0.000000,-0.050099 +1696,0.998668,0.000000,0.000000,-0.051606 +1697,0.998589,0.000000,0.000000,-0.053111 +1698,0.998507,0.000000,0.000000,-0.054615 +1699,0.998424,0.000000,0.000000,-0.056118 +1700,0.998339,0.000000,0.000000,-0.057619 +1701,0.998251,0.000000,0.000000,-0.059118 +1702,0.998161,0.000000,0.000000,-0.060616 +1703,0.998069,0.000000,0.000000,-0.062113 +1704,0.997975,0.000000,0.000000,-0.063607 +1705,0.997879,0.000000,0.000000,-0.065101 +1706,0.997780,0.000000,0.000000,-0.066592 +1707,0.997680,0.000000,0.000000,-0.068082 +1708,0.997577,0.000000,0.000000,-0.069571 +1709,0.997472,0.000000,0.000000,-0.071058 +1710,0.997365,0.000000,0.000000,-0.072543 +1711,0.997256,0.000000,0.000000,-0.074027 +1712,0.997145,0.000000,0.000000,-0.075509 +1713,0.997032,0.000000,0.000000,-0.076989 +1714,0.996917,0.000000,0.000000,-0.078468 +1715,0.996799,0.000000,0.000000,-0.079945 +1716,0.996680,0.000000,0.000000,-0.081420 +1717,0.996558,0.000000,0.000000,-0.082894 +1718,0.996435,0.000000,0.000000,-0.084366 +1719,0.996309,0.000000,0.000000,-0.085836 +1720,0.996182,0.000000,0.000000,-0.087305 +1721,0.996052,0.000000,0.000000,-0.088772 +1722,0.995920,0.000000,0.000000,-0.090237 +1723,0.995787,0.000000,0.000000,-0.091700 +1724,0.995651,0.000000,0.000000,-0.093162 +1725,0.995513,0.000000,0.000000,-0.094622 +1726,0.995374,0.000000,0.000000,-0.096080 +1727,0.995232,0.000000,0.000000,-0.097537 +1728,0.995088,0.000000,0.000000,-0.098991 +1729,0.994943,0.000000,0.000000,-0.100444 +1730,0.994795,0.000000,0.000000,-0.101895 +1731,0.994646,0.000000,0.000000,-0.103345 +1732,0.994494,0.000000,0.000000,-0.104792 +1733,0.994341,0.000000,0.000000,-0.106238 +1734,0.994185,0.000000,0.000000,-0.107681 +1735,0.994028,0.000000,0.000000,-0.109123 +1736,0.993869,0.000000,0.000000,-0.110563 +1737,0.993708,0.000000,0.000000,-0.112002 +1738,0.993545,0.000000,0.000000,-0.113438 +1739,0.993380,0.000000,0.000000,-0.114873 +1740,0.993214,0.000000,0.000000,-0.116305 +1741,0.993045,0.000000,0.000000,-0.117736 +1742,0.992874,0.000000,0.000000,-0.119165 +1743,0.992702,0.000000,0.000000,-0.120592 +1744,0.992528,0.000000,0.000000,-0.122017 +1745,0.992352,0.000000,0.000000,-0.123440 +1746,0.992174,0.000000,0.000000,-0.124861 +1747,0.991995,0.000000,0.000000,-0.126280 +1748,0.991813,0.000000,0.000000,-0.127698 +1749,0.991630,0.000000,0.000000,-0.129113 +1750,0.991445,0.000000,0.000000,-0.130526 +1751,0.991258,0.000000,0.000000,-0.131938 +1752,0.991069,0.000000,0.000000,-0.133347 +1753,0.990879,0.000000,0.000000,-0.134754 +1754,0.990687,0.000000,0.000000,-0.136160 +1755,0.990493,0.000000,0.000000,-0.137563 +1756,0.990297,0.000000,0.000000,-0.138965 +1757,0.990100,0.000000,0.000000,-0.140364 +1758,0.989901,0.000000,0.000000,-0.141761 +1759,0.989700,0.000000,0.000000,-0.143157 +1760,0.989498,0.000000,0.000000,-0.144550 +1761,0.989293,0.000000,0.000000,-0.145941 +1762,0.989087,0.000000,0.000000,-0.147330 +1763,0.988880,0.000000,0.000000,-0.148717 +1764,0.988670,0.000000,0.000000,-0.150102 +1765,0.988460,0.000000,0.000000,-0.151485 +1766,0.988247,0.000000,0.000000,-0.152866 +1767,0.988033,0.000000,0.000000,-0.154245 +1768,0.987817,0.000000,0.000000,-0.155621 +1769,0.987599,0.000000,0.000000,-0.156996 +1770,0.987380,0.000000,0.000000,-0.158368 +1771,0.987159,0.000000,0.000000,-0.159739 +1772,0.986937,0.000000,0.000000,-0.161107 +1773,0.986713,0.000000,0.000000,-0.162473 +1774,0.986487,0.000000,0.000000,-0.163837 +1775,0.986260,0.000000,0.000000,-0.165198 +1776,0.986032,0.000000,0.000000,-0.166558 +1777,0.985801,0.000000,0.000000,-0.167915 +1778,0.985570,0.000000,0.000000,-0.169270 +1779,0.985336,0.000000,0.000000,-0.170623 +1780,0.985101,0.000000,0.000000,-0.171974 +1781,0.984865,0.000000,0.000000,-0.173323 +1782,0.984627,0.000000,0.000000,-0.174669 +1783,0.984388,0.000000,0.000000,-0.176013 +1784,0.984147,0.000000,0.000000,-0.177355 +1785,0.983905,0.000000,0.000000,-0.178695 +1786,0.983661,0.000000,0.000000,-0.180032 +1787,0.983415,0.000000,0.000000,-0.181368 +1788,0.983169,0.000000,0.000000,-0.182701 +1789,0.982920,0.000000,0.000000,-0.184031 +1790,0.982671,0.000000,0.000000,-0.185360 +1791,0.982420,0.000000,0.000000,-0.186686 +1792,0.982167,0.000000,0.000000,-0.188010 +1793,0.981913,0.000000,0.000000,-0.189332 +1794,0.981658,0.000000,0.000000,-0.190651 +1795,0.981401,0.000000,0.000000,-0.191968 +1796,0.981143,0.000000,0.000000,-0.193283 +1797,0.980884,0.000000,0.000000,-0.194595 +1798,0.980623,0.000000,0.000000,-0.195905 +1799,0.980361,0.000000,0.000000,-0.197213 +1800,0.980097,0.000000,0.000000,-0.198518 +1801,0.979832,0.000000,0.000000,-0.199822 +1802,0.979566,0.000000,0.000000,-0.201122 +1803,0.979299,0.000000,0.000000,-0.202421 +1804,0.979030,0.000000,0.000000,-0.203717 +1805,0.978760,0.000000,0.000000,-0.205011 +1806,0.978488,0.000000,0.000000,-0.206302 +1807,0.978216,0.000000,0.000000,-0.207591 +1808,0.977942,0.000000,0.000000,-0.208878 +1809,0.977667,0.000000,0.000000,-0.210162 +1810,0.977390,0.000000,0.000000,-0.211444 +1811,0.977113,0.000000,0.000000,-0.212723 +1812,0.976834,0.000000,0.000000,-0.214000 +1813,0.976554,0.000000,0.000000,-0.215275 +1814,0.976272,0.000000,0.000000,-0.216547 +1815,0.975990,0.000000,0.000000,-0.217816 +1816,0.975706,0.000000,0.000000,-0.219084 +1817,0.975421,0.000000,0.000000,-0.220349 +1818,0.975135,0.000000,0.000000,-0.221611 +1819,0.974848,0.000000,0.000000,-0.222871 +1820,0.974560,0.000000,0.000000,-0.224129 +1821,0.974270,0.000000,0.000000,-0.225384 +1822,0.973979,0.000000,0.000000,-0.226636 +1823,0.973688,0.000000,0.000000,-0.227887 +1824,0.973395,0.000000,0.000000,-0.229134 +1825,0.973101,0.000000,0.000000,-0.230380 +1826,0.972806,0.000000,0.000000,-0.231622 +1827,0.972510,0.000000,0.000000,-0.232862 +1828,0.972212,0.000000,0.000000,-0.234100 +1829,0.971914,0.000000,0.000000,-0.235335 +1830,0.971615,0.000000,0.000000,-0.236568 +1831,0.971315,0.000000,0.000000,-0.237798 +1832,0.971013,0.000000,0.000000,-0.239026 +1833,0.970711,0.000000,0.000000,-0.240251 +1834,0.970407,0.000000,0.000000,-0.241474 +1835,0.970103,0.000000,0.000000,-0.242694 +1836,0.969797,0.000000,0.000000,-0.243912 +1837,0.969491,0.000000,0.000000,-0.245127 +1838,0.969184,0.000000,0.000000,-0.246339 +1839,0.968875,0.000000,0.000000,-0.247549 +1840,0.968566,0.000000,0.000000,-0.248756 +1841,0.968256,0.000000,0.000000,-0.249961 +1842,0.967945,0.000000,0.000000,-0.251163 +1843,0.967633,0.000000,0.000000,-0.252363 +1844,0.967320,0.000000,0.000000,-0.253560 +1845,0.967006,0.000000,0.000000,-0.254754 +1846,0.966691,0.000000,0.000000,-0.255946 +1847,0.966375,0.000000,0.000000,-0.257136 +1848,0.966059,0.000000,0.000000,-0.258322 +1849,0.965741,0.000000,0.000000,-0.259506 +1850,0.965423,0.000000,0.000000,-0.260688 +1851,0.965104,0.000000,0.000000,-0.261867 +1852,0.964784,0.000000,0.000000,-0.263043 +1853,0.964463,0.000000,0.000000,-0.264216 +1854,0.964142,0.000000,0.000000,-0.265387 +1855,0.963819,0.000000,0.000000,-0.266556 +1856,0.963496,0.000000,0.000000,-0.267721 +1857,0.963172,0.000000,0.000000,-0.268885 +1858,0.962848,0.000000,0.000000,-0.270045 +1859,0.962522,0.000000,0.000000,-0.271203 +1860,0.962196,0.000000,0.000000,-0.272358 +1861,0.961869,0.000000,0.000000,-0.273510 +1862,0.961541,0.000000,0.000000,-0.274660 +1863,0.961213,0.000000,0.000000,-0.275807 +1864,0.960884,0.000000,0.000000,-0.276952 +1865,0.960554,0.000000,0.000000,-0.278093 +1866,0.960224,0.000000,0.000000,-0.279232 +1867,0.959892,0.000000,0.000000,-0.280369 +1868,0.959560,0.000000,0.000000,-0.281503 +1869,0.959228,0.000000,0.000000,-0.282634 +1870,0.958895,0.000000,0.000000,-0.283762 +1871,0.958561,0.000000,0.000000,-0.284887 +1872,0.958227,0.000000,0.000000,-0.286010 +1873,0.957891,0.000000,0.000000,-0.287130 +1874,0.957556,0.000000,0.000000,-0.288248 +1875,0.957220,0.000000,0.000000,-0.289363 +1876,0.956883,0.000000,0.000000,-0.290475 +1877,0.956545,0.000000,0.000000,-0.291584 +1878,0.956207,0.000000,0.000000,-0.292691 +1879,0.955869,0.000000,0.000000,-0.293794 +1880,0.955530,0.000000,0.000000,-0.294895 +1881,0.955190,0.000000,0.000000,-0.295994 +1882,0.954850,0.000000,0.000000,-0.297089 +1883,0.954509,0.000000,0.000000,-0.298182 +1884,0.954168,0.000000,0.000000,-0.299272 +1885,0.953826,0.000000,0.000000,-0.300360 +1886,0.953484,0.000000,0.000000,-0.301444 +1887,0.953141,0.000000,0.000000,-0.302526 +1888,0.952798,0.000000,0.000000,-0.303605 +1889,0.952454,0.000000,0.000000,-0.304681 +1890,0.952110,0.000000,0.000000,-0.305755 +1891,0.951766,0.000000,0.000000,-0.306826 +1892,0.951421,0.000000,0.000000,-0.307894 +1893,0.951075,0.000000,0.000000,-0.308959 +1894,0.950730,0.000000,0.000000,-0.310021 +1895,0.950384,0.000000,0.000000,-0.311081 +1896,0.950037,0.000000,0.000000,-0.312137 +1897,0.949690,0.000000,0.000000,-0.313191 +1898,0.949343,0.000000,0.000000,-0.314243 +1899,0.948995,0.000000,0.000000,-0.315291 +1900,0.948647,0.000000,0.000000,-0.316337 +1901,0.948299,0.000000,0.000000,-0.317379 +1902,0.947950,0.000000,0.000000,-0.318419 +1903,0.947601,0.000000,0.000000,-0.319456 +1904,0.947252,0.000000,0.000000,-0.320491 +1905,0.946902,0.000000,0.000000,-0.321522 +1906,0.946552,0.000000,0.000000,-0.322551 +1907,0.946202,0.000000,0.000000,-0.323577 +1908,0.945852,0.000000,0.000000,-0.324599 +1909,0.945501,0.000000,0.000000,-0.325620 +1910,0.945150,0.000000,0.000000,-0.326637 +1911,0.944799,0.000000,0.000000,-0.327651 +1912,0.944447,0.000000,0.000000,-0.328663 +1913,0.944096,0.000000,0.000000,-0.329672 +1914,0.943744,0.000000,0.000000,-0.330678 +1915,0.943392,0.000000,0.000000,-0.331681 +1916,0.943039,0.000000,0.000000,-0.332681 +1917,0.942687,0.000000,0.000000,-0.333678 +1918,0.942334,0.000000,0.000000,-0.334673 +1919,0.941982,0.000000,0.000000,-0.335664 +1920,0.941629,0.000000,0.000000,-0.336653 +1921,0.941276,0.000000,0.000000,-0.337639 +1922,0.940922,0.000000,0.000000,-0.338622 +1923,0.940569,0.000000,0.000000,-0.339602 +1924,0.940216,0.000000,0.000000,-0.340579 +1925,0.939862,0.000000,0.000000,-0.341554 +1926,0.939509,0.000000,0.000000,-0.342525 +1927,0.939155,0.000000,0.000000,-0.343494 +1928,0.938801,0.000000,0.000000,-0.344460 +1929,0.938447,0.000000,0.000000,-0.345422 +1930,0.938093,0.000000,0.000000,-0.346382 +1931,0.937739,0.000000,0.000000,-0.347339 +1932,0.937385,0.000000,0.000000,-0.348294 +1933,0.937032,0.000000,0.000000,-0.349245 +1934,0.936677,0.000000,0.000000,-0.350193 +1935,0.936323,0.000000,0.000000,-0.351139 +1936,0.935969,0.000000,0.000000,-0.352081 +1937,0.935615,0.000000,0.000000,-0.353021 +1938,0.935261,0.000000,0.000000,-0.353958 +1939,0.934908,0.000000,0.000000,-0.354891 +1940,0.934554,0.000000,0.000000,-0.355822 +1941,0.934200,0.000000,0.000000,-0.356750 +1942,0.933846,0.000000,0.000000,-0.357675 +1943,0.933492,0.000000,0.000000,-0.358597 +1944,0.933139,0.000000,0.000000,-0.359517 +1945,0.932785,0.000000,0.000000,-0.360433 +1946,0.932432,0.000000,0.000000,-0.361346 +1947,0.932078,0.000000,0.000000,-0.362257 +1948,0.931725,0.000000,0.000000,-0.363164 +1949,0.931372,0.000000,0.000000,-0.364069 +1950,0.931019,0.000000,0.000000,-0.364970 +1951,0.930666,0.000000,0.000000,-0.365869 +1952,0.930314,0.000000,0.000000,-0.366765 +1953,0.929961,0.000000,0.000000,-0.367658 +1954,0.929609,0.000000,0.000000,-0.368548 +1955,0.929257,0.000000,0.000000,-0.369435 +1956,0.928905,0.000000,0.000000,-0.370319 +1957,0.928553,0.000000,0.000000,-0.371200 +1958,0.928202,0.000000,0.000000,-0.372078 +1959,0.927850,0.000000,0.000000,-0.372953 +1960,0.927499,0.000000,0.000000,-0.373825 +1961,0.927148,0.000000,0.000000,-0.374694 +1962,0.926798,0.000000,0.000000,-0.375561 +1963,0.926448,0.000000,0.000000,-0.376424 +1964,0.926097,0.000000,0.000000,-0.377284 +1965,0.925748,0.000000,0.000000,-0.378142 +1966,0.925398,0.000000,0.000000,-0.378996 +1967,0.925049,0.000000,0.000000,-0.379848 +1968,0.924700,0.000000,0.000000,-0.380696 +1969,0.924352,0.000000,0.000000,-0.381542 +1970,0.924003,0.000000,0.000000,-0.382384 +1971,0.923655,0.000000,0.000000,-0.383224 +1972,0.923308,0.000000,0.000000,-0.384061 +1973,0.922961,0.000000,0.000000,-0.384894 +1974,0.922614,0.000000,0.000000,-0.385725 +1975,0.922267,0.000000,0.000000,-0.386553 +1976,0.921921,0.000000,0.000000,-0.387378 +1977,0.921575,0.000000,0.000000,-0.388199 +1978,0.921230,0.000000,0.000000,-0.389018 +1979,0.920885,0.000000,0.000000,-0.389834 +1980,0.920541,0.000000,0.000000,-0.390647 +1981,0.920197,0.000000,0.000000,-0.391457 +1982,0.919853,0.000000,0.000000,-0.392264 +1983,0.919510,0.000000,0.000000,-0.393068 +1984,0.919167,0.000000,0.000000,-0.393868 +1985,0.918824,0.000000,0.000000,-0.394666 +1986,0.918483,0.000000,0.000000,-0.395461 +1987,0.918141,0.000000,0.000000,-0.396253 +1988,0.917800,0.000000,0.000000,-0.397042 +1989,0.917460,0.000000,0.000000,-0.397828 +1990,0.917120,0.000000,0.000000,-0.398611 +1991,0.916781,0.000000,0.000000,-0.399391 +1992,0.916442,0.000000,0.000000,-0.400168 +1993,0.916103,0.000000,0.000000,-0.400942 +1994,0.915765,0.000000,0.000000,-0.401713 +1995,0.915428,0.000000,0.000000,-0.402481 +1996,0.915091,0.000000,0.000000,-0.403246 +1997,0.914755,0.000000,0.000000,-0.404008 +1998,0.914420,0.000000,0.000000,-0.404767 +1999,0.914085,0.000000,0.000000,-0.405523 +2000,0.913750,0.000000,0.000000,-0.406276 +2001,0.913416,0.000000,0.000000,-0.407027 +2002,0.913083,0.000000,0.000000,-0.407774 +2003,0.912750,0.000000,0.000000,-0.408518 +2004,0.912418,0.000000,0.000000,-0.409259 +2005,0.912087,0.000000,0.000000,-0.409997 +2006,0.911756,0.000000,0.000000,-0.410732 +2007,0.911426,0.000000,0.000000,-0.411464 +2008,0.911097,0.000000,0.000000,-0.412193 +2009,0.910768,0.000000,0.000000,-0.412919 +2010,0.910440,0.000000,0.000000,-0.413642 +2011,0.910112,0.000000,0.000000,-0.414362 +2012,0.909786,0.000000,0.000000,-0.415079 +2013,0.909460,0.000000,0.000000,-0.415793 +2014,0.909134,0.000000,0.000000,-0.416503 +2015,0.908809,0.000000,0.000000,-0.417211 +2016,0.908486,0.000000,0.000000,-0.417916 +2017,0.908162,0.000000,0.000000,-0.418618 +2018,0.907840,0.000000,0.000000,-0.419317 +2019,0.907518,0.000000,0.000000,-0.420013 +2020,0.907197,0.000000,0.000000,-0.420706 +2021,0.906877,0.000000,0.000000,-0.421396 +2022,0.906557,0.000000,0.000000,-0.422083 +2023,0.906239,0.000000,0.000000,-0.422766 +2024,0.905921,0.000000,0.000000,-0.423447 +2025,0.905604,0.000000,0.000000,-0.424125 +2026,0.905287,0.000000,0.000000,-0.424800 +2027,0.904972,0.000000,0.000000,-0.425472 +2028,0.904657,0.000000,0.000000,-0.426140 +2029,0.904343,0.000000,0.000000,-0.426806 +2030,0.904030,0.000000,0.000000,-0.427469 +2031,0.903718,0.000000,0.000000,-0.428128 +2032,0.903406,0.000000,0.000000,-0.428785 +2033,0.903096,0.000000,0.000000,-0.429439 +2034,0.902786,0.000000,0.000000,-0.430089 +2035,0.902477,0.000000,0.000000,-0.430737 +2036,0.902170,0.000000,0.000000,-0.431382 +2037,0.901862,0.000000,0.000000,-0.432023 +2038,0.901556,0.000000,0.000000,-0.432662 +2039,0.901251,0.000000,0.000000,-0.433297 +2040,0.900947,0.000000,0.000000,-0.433930 +2041,0.900643,0.000000,0.000000,-0.434559 +2042,0.900341,0.000000,0.000000,-0.435186 +2043,0.900039,0.000000,0.000000,-0.435809 +2044,0.899738,0.000000,0.000000,-0.436430 +2045,0.899439,0.000000,0.000000,-0.437047 +2046,0.899140,0.000000,0.000000,-0.437661 +2047,0.898842,0.000000,0.000000,-0.438273 +2048,0.898545,0.000000,0.000000,-0.438881 +2049,0.898249,0.000000,0.000000,-0.439486 +2050,0.897954,0.000000,0.000000,-0.440089 +2051,0.897660,0.000000,0.000000,-0.440688 +2052,0.897367,0.000000,0.000000,-0.441284 +2053,0.897075,0.000000,0.000000,-0.441878 +2054,0.896784,0.000000,0.000000,-0.442468 +2055,0.896494,0.000000,0.000000,-0.443055 +2056,0.896206,0.000000,0.000000,-0.443639 +2057,0.895918,0.000000,0.000000,-0.444220 +2058,0.895631,0.000000,0.000000,-0.444798 +2059,0.895345,0.000000,0.000000,-0.445373 +2060,0.895060,0.000000,0.000000,-0.445945 +2061,0.894776,0.000000,0.000000,-0.446514 +2062,0.894494,0.000000,0.000000,-0.447080 +2063,0.894212,0.000000,0.000000,-0.447643 +2064,0.893932,0.000000,0.000000,-0.448203 +2065,0.893652,0.000000,0.000000,-0.448760 +2066,0.893374,0.000000,0.000000,-0.449314 +2067,0.893096,0.000000,0.000000,-0.449865 +2068,0.892820,0.000000,0.000000,-0.450413 +2069,0.892545,0.000000,0.000000,-0.450958 +2070,0.892271,0.000000,0.000000,-0.451500 +2071,0.891998,0.000000,0.000000,-0.452038 +2072,0.891727,0.000000,0.000000,-0.452574 +2073,0.891456,0.000000,0.000000,-0.453107 +2074,0.891187,0.000000,0.000000,-0.453637 +2075,0.890918,0.000000,0.000000,-0.454163 +2076,0.890651,0.000000,0.000000,-0.454687 +2077,0.890385,0.000000,0.000000,-0.455208 +2078,0.890120,0.000000,0.000000,-0.455725 +2079,0.889857,0.000000,0.000000,-0.456240 +2080,0.889594,0.000000,0.000000,-0.456752 +2081,0.889333,0.000000,0.000000,-0.457260 +2082,0.889073,0.000000,0.000000,-0.457766 +2083,0.888814,0.000000,0.000000,-0.458268 +2084,0.888556,0.000000,0.000000,-0.458768 +2085,0.888300,0.000000,0.000000,-0.459264 +2086,0.888044,0.000000,0.000000,-0.459758 +2087,0.887790,0.000000,0.000000,-0.460248 +2088,0.887538,0.000000,0.000000,-0.460735 +2089,0.887286,0.000000,0.000000,-0.461220 +2090,0.887036,0.000000,0.000000,-0.461701 +2091,0.886786,0.000000,0.000000,-0.462180 +2092,0.886538,0.000000,0.000000,-0.462655 +2093,0.886292,0.000000,0.000000,-0.463127 +2094,0.886046,0.000000,0.000000,-0.463596 +2095,0.885802,0.000000,0.000000,-0.464063 +2096,0.885560,0.000000,0.000000,-0.464526 +2097,0.885318,0.000000,0.000000,-0.464986 +2098,0.885078,0.000000,0.000000,-0.465443 +2099,0.884839,0.000000,0.000000,-0.465898 +2100,0.884601,0.000000,0.000000,-0.466349 +2101,0.884365,0.000000,0.000000,-0.466797 +2102,0.884129,0.000000,0.000000,-0.467242 +2103,0.883896,0.000000,0.000000,-0.467684 +2104,0.883663,0.000000,0.000000,-0.468123 +2105,0.883432,0.000000,0.000000,-0.468559 +2106,0.883202,0.000000,0.000000,-0.468992 +2107,0.882974,0.000000,0.000000,-0.469422 +2108,0.882747,0.000000,0.000000,-0.469849 +2109,0.882521,0.000000,0.000000,-0.470273 +2110,0.882296,0.000000,0.000000,-0.470694 +2111,0.882073,0.000000,0.000000,-0.471112 +2112,0.881851,0.000000,0.000000,-0.471527 +2113,0.881631,0.000000,0.000000,-0.471939 +2114,0.881412,0.000000,0.000000,-0.472348 +2115,0.881194,0.000000,0.000000,-0.472754 +2116,0.880978,0.000000,0.000000,-0.473157 +2117,0.880763,0.000000,0.000000,-0.473557 +2118,0.880550,0.000000,0.000000,-0.473954 +2119,0.880338,0.000000,0.000000,-0.474348 +2120,0.880127,0.000000,0.000000,-0.474738 +2121,0.879918,0.000000,0.000000,-0.475126 +2122,0.879710,0.000000,0.000000,-0.475511 +2123,0.879503,0.000000,0.000000,-0.475893 +2124,0.879298,0.000000,0.000000,-0.476272 +2125,0.879095,0.000000,0.000000,-0.476647 +2126,0.878892,0.000000,0.000000,-0.477020 +2127,0.878692,0.000000,0.000000,-0.477390 +2128,0.878492,0.000000,0.000000,-0.477757 +2129,0.878294,0.000000,0.000000,-0.478120 +2130,0.878098,0.000000,0.000000,-0.478481 +2131,0.877903,0.000000,0.000000,-0.478839 +2132,0.877709,0.000000,0.000000,-0.479193 +2133,0.877517,0.000000,0.000000,-0.479545 +2134,0.877327,0.000000,0.000000,-0.479894 +2135,0.877137,0.000000,0.000000,-0.480239 +2136,0.876950,0.000000,0.000000,-0.480582 +2137,0.876764,0.000000,0.000000,-0.480922 +2138,0.876579,0.000000,0.000000,-0.481258 +2139,0.876396,0.000000,0.000000,-0.481592 +2140,0.876214,0.000000,0.000000,-0.481923 +2141,0.876033,0.000000,0.000000,-0.482250 +2142,0.875855,0.000000,0.000000,-0.482575 +2143,0.875677,0.000000,0.000000,-0.482897 +2144,0.875502,0.000000,0.000000,-0.483215 +2145,0.875327,0.000000,0.000000,-0.483531 +2146,0.875155,0.000000,0.000000,-0.483843 +2147,0.874983,0.000000,0.000000,-0.484153 +2148,0.874814,0.000000,0.000000,-0.484459 +2149,0.874646,0.000000,0.000000,-0.484763 +2150,0.874479,0.000000,0.000000,-0.485064 +2151,0.874314,0.000000,0.000000,-0.485361 +2152,0.874150,0.000000,0.000000,-0.485656 +2153,0.873988,0.000000,0.000000,-0.485947 +2154,0.873828,0.000000,0.000000,-0.486236 +2155,0.873669,0.000000,0.000000,-0.486521 +2156,0.873511,0.000000,0.000000,-0.486804 +2157,0.873355,0.000000,0.000000,-0.487084 +2158,0.873201,0.000000,0.000000,-0.487360 +2159,0.873048,0.000000,0.000000,-0.487634 +2160,0.872897,0.000000,0.000000,-0.487904 +2161,0.872748,0.000000,0.000000,-0.488172 +2162,0.872600,0.000000,0.000000,-0.488436 +2163,0.872453,0.000000,0.000000,-0.488698 +2164,0.872308,0.000000,0.000000,-0.488956 +2165,0.872165,0.000000,0.000000,-0.489212 +2166,0.872023,0.000000,0.000000,-0.489465 +2167,0.871883,0.000000,0.000000,-0.489714 +2168,0.871745,0.000000,0.000000,-0.489961 +2169,0.871608,0.000000,0.000000,-0.490204 +2170,0.871472,0.000000,0.000000,-0.490445 +2171,0.871339,0.000000,0.000000,-0.490682 +2172,0.871206,0.000000,0.000000,-0.490917 +2173,0.871076,0.000000,0.000000,-0.491149 +2174,0.870947,0.000000,0.000000,-0.491377 +2175,0.870820,0.000000,0.000000,-0.491603 +2176,0.870694,0.000000,0.000000,-0.491825 +2177,0.870570,0.000000,0.000000,-0.492045 +2178,0.870447,0.000000,0.000000,-0.492261 +2179,0.870327,0.000000,0.000000,-0.492475 +2180,0.870207,0.000000,0.000000,-0.492686 +2181,0.870090,0.000000,0.000000,-0.492893 +2182,0.869974,0.000000,0.000000,-0.493098 +2183,0.869860,0.000000,0.000000,-0.493300 +2184,0.869747,0.000000,0.000000,-0.493498 +2185,0.869636,0.000000,0.000000,-0.493694 +2186,0.869526,0.000000,0.000000,-0.493886 +2187,0.869419,0.000000,0.000000,-0.494076 +2188,0.869313,0.000000,0.000000,-0.494263 +2189,0.869208,0.000000,0.000000,-0.494446 +2190,0.869105,0.000000,0.000000,-0.494627 +2191,0.869004,0.000000,0.000000,-0.494805 +2192,0.868905,0.000000,0.000000,-0.494979 +2193,0.868807,0.000000,0.000000,-0.495151 +2194,0.868711,0.000000,0.000000,-0.495320 +2195,0.868616,0.000000,0.000000,-0.495486 +2196,0.868523,0.000000,0.000000,-0.495648 +2197,0.868432,0.000000,0.000000,-0.495808 +2198,0.868343,0.000000,0.000000,-0.495965 +2199,0.868255,0.000000,0.000000,-0.496119 +2200,0.868169,0.000000,0.000000,-0.496269 +2201,0.868084,0.000000,0.000000,-0.496417 +2202,0.868001,0.000000,0.000000,-0.496562 +2203,0.867920,0.000000,0.000000,-0.496704 +2204,0.867841,0.000000,0.000000,-0.496843 +2205,0.867763,0.000000,0.000000,-0.496978 +2206,0.867687,0.000000,0.000000,-0.497111 +2207,0.867612,0.000000,0.000000,-0.497241 +2208,0.867540,0.000000,0.000000,-0.497368 +2209,0.867469,0.000000,0.000000,-0.497492 +2210,0.867399,0.000000,0.000000,-0.497613 +2211,0.867332,0.000000,0.000000,-0.497731 +2212,0.867266,0.000000,0.000000,-0.497845 +2213,0.867202,0.000000,0.000000,-0.497957 +2214,0.867139,0.000000,0.000000,-0.498066 +2215,0.867078,0.000000,0.000000,-0.498172 +2216,0.867019,0.000000,0.000000,-0.498275 +2217,0.866961,0.000000,0.000000,-0.498375 +2218,0.866906,0.000000,0.000000,-0.498472 +2219,0.866852,0.000000,0.000000,-0.498566 +2220,0.866799,0.000000,0.000000,-0.498657 +2221,0.866749,0.000000,0.000000,-0.498745 +2222,0.866700,0.000000,0.000000,-0.498830 +2223,0.866652,0.000000,0.000000,-0.498912 +2224,0.866607,0.000000,0.000000,-0.498991 +2225,0.866563,0.000000,0.000000,-0.499068 +2226,0.866521,0.000000,0.000000,-0.499141 +2227,0.866481,0.000000,0.000000,-0.499211 +2228,0.866442,0.000000,0.000000,-0.499278 +2229,0.866405,0.000000,0.000000,-0.499342 +2230,0.866370,0.000000,0.000000,-0.499403 +2231,0.866336,0.000000,0.000000,-0.499461 +2232,0.866304,0.000000,0.000000,-0.499517 +2233,0.866274,0.000000,0.000000,-0.499569 +2234,0.866246,0.000000,0.000000,-0.499618 +2235,0.866219,0.000000,0.000000,-0.499664 +2236,0.866194,0.000000,0.000000,-0.499708 +2237,0.866171,0.000000,0.000000,-0.499748 +2238,0.866149,0.000000,0.000000,-0.499785 +2239,0.866130,0.000000,0.000000,-0.499819 +2240,0.866112,0.000000,0.000000,-0.499851 +2241,0.866095,0.000000,0.000000,-0.499879 +2242,0.866081,0.000000,0.000000,-0.499905 +2243,0.866068,0.000000,0.000000,-0.499927 +2244,0.866056,0.000000,0.000000,-0.499946 +2245,0.866047,0.000000,0.000000,-0.499963 +2246,0.866039,0.000000,0.000000,-0.499976 +2247,0.866033,0.000000,0.000000,-0.499987 +2248,0.866029,0.000000,0.000000,-0.499994 +2249,0.866026,0.000000,0.000000,-0.499999 +2250,0.866025,0.000000,0.000000,-0.500000 +2251,0.866026,0.000000,0.000000,-0.499999 +2252,0.866029,0.000000,0.000000,-0.499994 +2253,0.866033,0.000000,0.000000,-0.499987 +2254,0.866039,0.000000,0.000000,-0.499976 +2255,0.866047,0.000000,0.000000,-0.499963 +2256,0.866056,0.000000,0.000000,-0.499946 +2257,0.866068,0.000000,0.000000,-0.499927 +2258,0.866081,0.000000,0.000000,-0.499905 +2259,0.866095,0.000000,0.000000,-0.499879 +2260,0.866112,0.000000,0.000000,-0.499851 +2261,0.866130,0.000000,0.000000,-0.499819 +2262,0.866149,0.000000,0.000000,-0.499785 +2263,0.866171,0.000000,0.000000,-0.499748 +2264,0.866194,0.000000,0.000000,-0.499708 +2265,0.866219,0.000000,0.000000,-0.499664 +2266,0.866246,0.000000,0.000000,-0.499618 +2267,0.866274,0.000000,0.000000,-0.499569 +2268,0.866304,0.000000,0.000000,-0.499517 +2269,0.866336,0.000000,0.000000,-0.499461 +2270,0.866370,0.000000,0.000000,-0.499403 +2271,0.866405,0.000000,0.000000,-0.499342 +2272,0.866442,0.000000,0.000000,-0.499278 +2273,0.866481,0.000000,0.000000,-0.499211 +2274,0.866521,0.000000,0.000000,-0.499141 +2275,0.866563,0.000000,0.000000,-0.499068 +2276,0.866607,0.000000,0.000000,-0.498991 +2277,0.866652,0.000000,0.000000,-0.498912 +2278,0.866700,0.000000,0.000000,-0.498830 +2279,0.866749,0.000000,0.000000,-0.498745 +2280,0.866799,0.000000,0.000000,-0.498657 +2281,0.866852,0.000000,0.000000,-0.498566 +2282,0.866906,0.000000,0.000000,-0.498472 +2283,0.866961,0.000000,0.000000,-0.498375 +2284,0.867019,0.000000,0.000000,-0.498275 +2285,0.867078,0.000000,0.000000,-0.498172 +2286,0.867139,0.000000,0.000000,-0.498066 +2287,0.867202,0.000000,0.000000,-0.497957 +2288,0.867266,0.000000,0.000000,-0.497845 +2289,0.867332,0.000000,0.000000,-0.497731 +2290,0.867399,0.000000,0.000000,-0.497613 +2291,0.867469,0.000000,0.000000,-0.497492 +2292,0.867540,0.000000,0.000000,-0.497368 +2293,0.867612,0.000000,0.000000,-0.497241 +2294,0.867687,0.000000,0.000000,-0.497111 +2295,0.867763,0.000000,0.000000,-0.496978 +2296,0.867841,0.000000,0.000000,-0.496843 +2297,0.867920,0.000000,0.000000,-0.496704 +2298,0.868001,0.000000,0.000000,-0.496562 +2299,0.868084,0.000000,0.000000,-0.496417 +2300,0.868169,0.000000,0.000000,-0.496269 +2301,0.868255,0.000000,0.000000,-0.496119 +2302,0.868343,0.000000,0.000000,-0.495965 +2303,0.868432,0.000000,0.000000,-0.495808 +2304,0.868523,0.000000,0.000000,-0.495648 +2305,0.868616,0.000000,0.000000,-0.495486 +2306,0.868711,0.000000,0.000000,-0.495320 +2307,0.868807,0.000000,0.000000,-0.495151 +2308,0.868905,0.000000,0.000000,-0.494979 +2309,0.869004,0.000000,0.000000,-0.494805 +2310,0.869105,0.000000,0.000000,-0.494627 +2311,0.869208,0.000000,0.000000,-0.494446 +2312,0.869313,0.000000,0.000000,-0.494263 +2313,0.869419,0.000000,0.000000,-0.494076 +2314,0.869526,0.000000,0.000000,-0.493886 +2315,0.869636,0.000000,0.000000,-0.493694 +2316,0.869747,0.000000,0.000000,-0.493498 +2317,0.869860,0.000000,0.000000,-0.493300 +2318,0.869974,0.000000,0.000000,-0.493098 +2319,0.870090,0.000000,0.000000,-0.492893 +2320,0.870207,0.000000,0.000000,-0.492686 +2321,0.870327,0.000000,0.000000,-0.492475 +2322,0.870447,0.000000,0.000000,-0.492261 +2323,0.870570,0.000000,0.000000,-0.492045 +2324,0.870694,0.000000,0.000000,-0.491825 +2325,0.870820,0.000000,0.000000,-0.491603 +2326,0.870947,0.000000,0.000000,-0.491377 +2327,0.871076,0.000000,0.000000,-0.491149 +2328,0.871206,0.000000,0.000000,-0.490917 +2329,0.871339,0.000000,0.000000,-0.490682 +2330,0.871472,0.000000,0.000000,-0.490445 +2331,0.871608,0.000000,0.000000,-0.490204 +2332,0.871745,0.000000,0.000000,-0.489961 +2333,0.871883,0.000000,0.000000,-0.489714 +2334,0.872023,0.000000,0.000000,-0.489465 +2335,0.872165,0.000000,0.000000,-0.489212 +2336,0.872308,0.000000,0.000000,-0.488956 +2337,0.872453,0.000000,0.000000,-0.488698 +2338,0.872600,0.000000,0.000000,-0.488436 +2339,0.872748,0.000000,0.000000,-0.488172 +2340,0.872897,0.000000,0.000000,-0.487904 +2341,0.873048,0.000000,0.000000,-0.487634 +2342,0.873201,0.000000,0.000000,-0.487360 +2343,0.873355,0.000000,0.000000,-0.487084 +2344,0.873511,0.000000,0.000000,-0.486804 +2345,0.873669,0.000000,0.000000,-0.486521 +2346,0.873828,0.000000,0.000000,-0.486236 +2347,0.873988,0.000000,0.000000,-0.485947 +2348,0.874150,0.000000,0.000000,-0.485656 +2349,0.874314,0.000000,0.000000,-0.485361 +2350,0.874479,0.000000,0.000000,-0.485064 +2351,0.874646,0.000000,0.000000,-0.484763 +2352,0.874814,0.000000,0.000000,-0.484459 +2353,0.874983,0.000000,0.000000,-0.484153 +2354,0.875155,0.000000,0.000000,-0.483843 +2355,0.875327,0.000000,0.000000,-0.483531 +2356,0.875502,0.000000,0.000000,-0.483215 +2357,0.875677,0.000000,0.000000,-0.482897 +2358,0.875855,0.000000,0.000000,-0.482575 +2359,0.876033,0.000000,0.000000,-0.482250 +2360,0.876214,0.000000,0.000000,-0.481923 +2361,0.876396,0.000000,0.000000,-0.481592 +2362,0.876579,0.000000,0.000000,-0.481258 +2363,0.876764,0.000000,0.000000,-0.480922 +2364,0.876950,0.000000,0.000000,-0.480582 +2365,0.877137,0.000000,0.000000,-0.480239 +2366,0.877327,0.000000,0.000000,-0.479894 +2367,0.877517,0.000000,0.000000,-0.479545 +2368,0.877709,0.000000,0.000000,-0.479193 +2369,0.877903,0.000000,0.000000,-0.478839 +2370,0.878098,0.000000,0.000000,-0.478481 +2371,0.878294,0.000000,0.000000,-0.478120 +2372,0.878492,0.000000,0.000000,-0.477757 +2373,0.878692,0.000000,0.000000,-0.477390 +2374,0.878892,0.000000,0.000000,-0.477020 +2375,0.879095,0.000000,0.000000,-0.476647 +2376,0.879298,0.000000,0.000000,-0.476272 +2377,0.879503,0.000000,0.000000,-0.475893 +2378,0.879710,0.000000,0.000000,-0.475511 +2379,0.879918,0.000000,0.000000,-0.475126 +2380,0.880127,0.000000,0.000000,-0.474738 +2381,0.880338,0.000000,0.000000,-0.474348 +2382,0.880550,0.000000,0.000000,-0.473954 +2383,0.880763,0.000000,0.000000,-0.473557 +2384,0.880978,0.000000,0.000000,-0.473157 +2385,0.881194,0.000000,0.000000,-0.472754 +2386,0.881412,0.000000,0.000000,-0.472348 +2387,0.881631,0.000000,0.000000,-0.471939 +2388,0.881851,0.000000,0.000000,-0.471527 +2389,0.882073,0.000000,0.000000,-0.471112 +2390,0.882296,0.000000,0.000000,-0.470694 +2391,0.882521,0.000000,0.000000,-0.470273 +2392,0.882747,0.000000,0.000000,-0.469849 +2393,0.882974,0.000000,0.000000,-0.469422 +2394,0.883202,0.000000,0.000000,-0.468992 +2395,0.883432,0.000000,0.000000,-0.468559 +2396,0.883663,0.000000,0.000000,-0.468123 +2397,0.883896,0.000000,0.000000,-0.467684 +2398,0.884129,0.000000,0.000000,-0.467242 +2399,0.884365,0.000000,0.000000,-0.466797 +2400,0.884601,0.000000,0.000000,-0.466349 +2401,0.884839,0.000000,0.000000,-0.465898 +2402,0.885078,0.000000,0.000000,-0.465443 +2403,0.885318,0.000000,0.000000,-0.464986 +2404,0.885560,0.000000,0.000000,-0.464526 +2405,0.885802,0.000000,0.000000,-0.464063 +2406,0.886046,0.000000,0.000000,-0.463596 +2407,0.886292,0.000000,0.000000,-0.463127 +2408,0.886538,0.000000,0.000000,-0.462655 +2409,0.886786,0.000000,0.000000,-0.462180 +2410,0.887036,0.000000,0.000000,-0.461701 +2411,0.887286,0.000000,0.000000,-0.461220 +2412,0.887538,0.000000,0.000000,-0.460735 +2413,0.887790,0.000000,0.000000,-0.460248 +2414,0.888044,0.000000,0.000000,-0.459758 +2415,0.888300,0.000000,0.000000,-0.459264 +2416,0.888556,0.000000,0.000000,-0.458768 +2417,0.888814,0.000000,0.000000,-0.458268 +2418,0.889073,0.000000,0.000000,-0.457766 +2419,0.889333,0.000000,0.000000,-0.457260 +2420,0.889594,0.000000,0.000000,-0.456752 +2421,0.889857,0.000000,0.000000,-0.456240 +2422,0.890120,0.000000,0.000000,-0.455725 +2423,0.890385,0.000000,0.000000,-0.455208 +2424,0.890651,0.000000,0.000000,-0.454687 +2425,0.890918,0.000000,0.000000,-0.454163 +2426,0.891187,0.000000,0.000000,-0.453637 +2427,0.891456,0.000000,0.000000,-0.453107 +2428,0.891727,0.000000,0.000000,-0.452574 +2429,0.891998,0.000000,0.000000,-0.452038 +2430,0.892271,0.000000,0.000000,-0.451500 +2431,0.892545,0.000000,0.000000,-0.450958 +2432,0.892820,0.000000,0.000000,-0.450413 +2433,0.893096,0.000000,0.000000,-0.449865 +2434,0.893374,0.000000,0.000000,-0.449314 +2435,0.893652,0.000000,0.000000,-0.448760 +2436,0.893932,0.000000,0.000000,-0.448203 +2437,0.894212,0.000000,0.000000,-0.447643 +2438,0.894494,0.000000,0.000000,-0.447080 +2439,0.894776,0.000000,0.000000,-0.446514 +2440,0.895060,0.000000,0.000000,-0.445945 +2441,0.895345,0.000000,0.000000,-0.445373 +2442,0.895631,0.000000,0.000000,-0.444798 +2443,0.895918,0.000000,0.000000,-0.444220 +2444,0.896206,0.000000,0.000000,-0.443639 +2445,0.896494,0.000000,0.000000,-0.443055 +2446,0.896784,0.000000,0.000000,-0.442468 +2447,0.897075,0.000000,0.000000,-0.441878 +2448,0.897367,0.000000,0.000000,-0.441284 +2449,0.897660,0.000000,0.000000,-0.440688 +2450,0.897954,0.000000,0.000000,-0.440089 +2451,0.898249,0.000000,0.000000,-0.439486 +2452,0.898545,0.000000,0.000000,-0.438881 +2453,0.898842,0.000000,0.000000,-0.438273 +2454,0.899140,0.000000,0.000000,-0.437661 +2455,0.899439,0.000000,0.000000,-0.437047 +2456,0.899738,0.000000,0.000000,-0.436430 +2457,0.900039,0.000000,0.000000,-0.435809 +2458,0.900341,0.000000,0.000000,-0.435186 +2459,0.900643,0.000000,0.000000,-0.434559 +2460,0.900947,0.000000,0.000000,-0.433930 +2461,0.901251,0.000000,0.000000,-0.433297 +2462,0.901556,0.000000,0.000000,-0.432662 +2463,0.901862,0.000000,0.000000,-0.432023 +2464,0.902170,0.000000,0.000000,-0.431382 +2465,0.902477,0.000000,0.000000,-0.430737 +2466,0.902786,0.000000,0.000000,-0.430089 +2467,0.903096,0.000000,0.000000,-0.429439 +2468,0.903406,0.000000,0.000000,-0.428785 +2469,0.903718,0.000000,0.000000,-0.428128 +2470,0.904030,0.000000,0.000000,-0.427469 +2471,0.904343,0.000000,0.000000,-0.426806 +2472,0.904657,0.000000,0.000000,-0.426140 +2473,0.904972,0.000000,0.000000,-0.425472 +2474,0.905287,0.000000,0.000000,-0.424800 +2475,0.905604,0.000000,0.000000,-0.424125 +2476,0.905921,0.000000,0.000000,-0.423447 +2477,0.906239,0.000000,0.000000,-0.422766 +2478,0.906557,0.000000,0.000000,-0.422083 +2479,0.906877,0.000000,0.000000,-0.421396 +2480,0.907197,0.000000,0.000000,-0.420706 +2481,0.907518,0.000000,0.000000,-0.420013 +2482,0.907840,0.000000,0.000000,-0.419317 +2483,0.908162,0.000000,0.000000,-0.418618 +2484,0.908486,0.000000,0.000000,-0.417916 +2485,0.908809,0.000000,0.000000,-0.417211 +2486,0.909134,0.000000,0.000000,-0.416503 +2487,0.909460,0.000000,0.000000,-0.415793 +2488,0.909786,0.000000,0.000000,-0.415079 +2489,0.910112,0.000000,0.000000,-0.414362 +2490,0.910440,0.000000,0.000000,-0.413642 +2491,0.910768,0.000000,0.000000,-0.412919 +2492,0.911097,0.000000,0.000000,-0.412193 +2493,0.911426,0.000000,0.000000,-0.411464 +2494,0.911756,0.000000,0.000000,-0.410732 +2495,0.912087,0.000000,0.000000,-0.409997 +2496,0.912418,0.000000,0.000000,-0.409259 +2497,0.912750,0.000000,0.000000,-0.408518 +2498,0.913083,0.000000,0.000000,-0.407774 +2499,0.913416,0.000000,0.000000,-0.407027 +2500,0.913750,0.000000,0.000000,-0.406276 +2501,0.914085,0.000000,0.000000,-0.405523 +2502,0.914420,0.000000,0.000000,-0.404767 +2503,0.914755,0.000000,0.000000,-0.404008 +2504,0.915091,0.000000,0.000000,-0.403246 +2505,0.915428,0.000000,0.000000,-0.402481 +2506,0.915765,0.000000,0.000000,-0.401713 +2507,0.916103,0.000000,0.000000,-0.400942 +2508,0.916442,0.000000,0.000000,-0.400168 +2509,0.916781,0.000000,0.000000,-0.399391 +2510,0.917120,0.000000,0.000000,-0.398611 +2511,0.917460,0.000000,0.000000,-0.397828 +2512,0.917800,0.000000,0.000000,-0.397042 +2513,0.918141,0.000000,0.000000,-0.396253 +2514,0.918483,0.000000,0.000000,-0.395461 +2515,0.918824,0.000000,0.000000,-0.394666 +2516,0.919167,0.000000,0.000000,-0.393868 +2517,0.919510,0.000000,0.000000,-0.393068 +2518,0.919853,0.000000,0.000000,-0.392264 +2519,0.920197,0.000000,0.000000,-0.391457 +2520,0.920541,0.000000,0.000000,-0.390647 +2521,0.920885,0.000000,0.000000,-0.389834 +2522,0.921230,0.000000,0.000000,-0.389018 +2523,0.921575,0.000000,0.000000,-0.388199 +2524,0.921921,0.000000,0.000000,-0.387378 +2525,0.922267,0.000000,0.000000,-0.386553 +2526,0.922614,0.000000,0.000000,-0.385725 +2527,0.922961,0.000000,0.000000,-0.384894 +2528,0.923308,0.000000,0.000000,-0.384061 +2529,0.923655,0.000000,0.000000,-0.383224 +2530,0.924003,0.000000,0.000000,-0.382384 +2531,0.924352,0.000000,0.000000,-0.381542 +2532,0.924700,0.000000,0.000000,-0.380696 +2533,0.925049,0.000000,0.000000,-0.379848 +2534,0.925398,0.000000,0.000000,-0.378996 +2535,0.925748,0.000000,0.000000,-0.378142 +2536,0.926097,0.000000,0.000000,-0.377284 +2537,0.926448,0.000000,0.000000,-0.376424 +2538,0.926798,0.000000,0.000000,-0.375561 +2539,0.927148,0.000000,0.000000,-0.374694 +2540,0.927499,0.000000,0.000000,-0.373825 +2541,0.927850,0.000000,0.000000,-0.372953 +2542,0.928202,0.000000,0.000000,-0.372078 +2543,0.928553,0.000000,0.000000,-0.371200 +2544,0.928905,0.000000,0.000000,-0.370319 +2545,0.929257,0.000000,0.000000,-0.369435 +2546,0.929609,0.000000,0.000000,-0.368548 +2547,0.929961,0.000000,0.000000,-0.367658 +2548,0.930314,0.000000,0.000000,-0.366765 +2549,0.930666,0.000000,0.000000,-0.365869 +2550,0.931019,0.000000,0.000000,-0.364970 +2551,0.931372,0.000000,0.000000,-0.364069 +2552,0.931725,0.000000,0.000000,-0.363164 +2553,0.932078,0.000000,0.000000,-0.362257 +2554,0.932432,0.000000,0.000000,-0.361346 +2555,0.932785,0.000000,0.000000,-0.360433 +2556,0.933139,0.000000,0.000000,-0.359517 +2557,0.933492,0.000000,0.000000,-0.358597 +2558,0.933846,0.000000,0.000000,-0.357675 +2559,0.934200,0.000000,0.000000,-0.356750 +2560,0.934554,0.000000,0.000000,-0.355822 +2561,0.934908,0.000000,0.000000,-0.354891 +2562,0.935261,0.000000,0.000000,-0.353958 +2563,0.935615,0.000000,0.000000,-0.353021 +2564,0.935969,0.000000,0.000000,-0.352081 +2565,0.936323,0.000000,0.000000,-0.351139 +2566,0.936677,0.000000,0.000000,-0.350193 +2567,0.937032,0.000000,0.000000,-0.349245 +2568,0.937385,0.000000,0.000000,-0.348294 +2569,0.937739,0.000000,0.000000,-0.347339 +2570,0.938093,0.000000,0.000000,-0.346382 +2571,0.938447,0.000000,0.000000,-0.345422 +2572,0.938801,0.000000,0.000000,-0.344460 +2573,0.939155,0.000000,0.000000,-0.343494 +2574,0.939509,0.000000,0.000000,-0.342525 +2575,0.939862,0.000000,0.000000,-0.341554 +2576,0.940216,0.000000,0.000000,-0.340579 +2577,0.940569,0.000000,0.000000,-0.339602 +2578,0.940922,0.000000,0.000000,-0.338622 +2579,0.941276,0.000000,0.000000,-0.337639 +2580,0.941629,0.000000,0.000000,-0.336653 +2581,0.941982,0.000000,0.000000,-0.335664 +2582,0.942334,0.000000,0.000000,-0.334673 +2583,0.942687,0.000000,0.000000,-0.333678 +2584,0.943039,0.000000,0.000000,-0.332681 +2585,0.943392,0.000000,0.000000,-0.331681 +2586,0.943744,0.000000,0.000000,-0.330678 +2587,0.944096,0.000000,0.000000,-0.329672 +2588,0.944447,0.000000,0.000000,-0.328663 +2589,0.944799,0.000000,0.000000,-0.327651 +2590,0.945150,0.000000,0.000000,-0.326637 +2591,0.945501,0.000000,0.000000,-0.325620 +2592,0.945852,0.000000,0.000000,-0.324599 +2593,0.946202,0.000000,0.000000,-0.323577 +2594,0.946552,0.000000,0.000000,-0.322551 +2595,0.946902,0.000000,0.000000,-0.321522 +2596,0.947252,0.000000,0.000000,-0.320491 +2597,0.947601,0.000000,0.000000,-0.319456 +2598,0.947950,0.000000,0.000000,-0.318419 +2599,0.948299,0.000000,0.000000,-0.317379 +2600,0.948647,0.000000,0.000000,-0.316337 +2601,0.948995,0.000000,0.000000,-0.315291 +2602,0.949343,0.000000,0.000000,-0.314243 +2603,0.949690,0.000000,0.000000,-0.313191 +2604,0.950037,0.000000,0.000000,-0.312137 +2605,0.950384,0.000000,0.000000,-0.311081 +2606,0.950730,0.000000,0.000000,-0.310021 +2607,0.951075,0.000000,0.000000,-0.308959 +2608,0.951421,0.000000,0.000000,-0.307894 +2609,0.951766,0.000000,0.000000,-0.306826 +2610,0.952110,0.000000,0.000000,-0.305755 +2611,0.952454,0.000000,0.000000,-0.304681 +2612,0.952798,0.000000,0.000000,-0.303605 +2613,0.953141,0.000000,0.000000,-0.302526 +2614,0.953484,0.000000,0.000000,-0.301444 +2615,0.953826,0.000000,0.000000,-0.300360 +2616,0.954168,0.000000,0.000000,-0.299272 +2617,0.954509,0.000000,0.000000,-0.298182 +2618,0.954850,0.000000,0.000000,-0.297089 +2619,0.955190,0.000000,0.000000,-0.295994 +2620,0.955530,0.000000,0.000000,-0.294895 +2621,0.955869,0.000000,0.000000,-0.293794 +2622,0.956207,0.000000,0.000000,-0.292691 +2623,0.956545,0.000000,0.000000,-0.291584 +2624,0.956883,0.000000,0.000000,-0.290475 +2625,0.957220,0.000000,0.000000,-0.289363 +2626,0.957556,0.000000,0.000000,-0.288248 +2627,0.957891,0.000000,0.000000,-0.287130 +2628,0.958227,0.000000,0.000000,-0.286010 +2629,0.958561,0.000000,0.000000,-0.284887 +2630,0.958895,0.000000,0.000000,-0.283762 +2631,0.959228,0.000000,0.000000,-0.282634 +2632,0.959560,0.000000,0.000000,-0.281503 +2633,0.959892,0.000000,0.000000,-0.280369 +2634,0.960224,0.000000,0.000000,-0.279232 +2635,0.960554,0.000000,0.000000,-0.278093 +2636,0.960884,0.000000,0.000000,-0.276952 +2637,0.961213,0.000000,0.000000,-0.275807 +2638,0.961541,0.000000,0.000000,-0.274660 +2639,0.961869,0.000000,0.000000,-0.273510 +2640,0.962196,0.000000,0.000000,-0.272358 +2641,0.962522,0.000000,0.000000,-0.271203 +2642,0.962848,0.000000,0.000000,-0.270045 +2643,0.963172,0.000000,0.000000,-0.268885 +2644,0.963496,0.000000,0.000000,-0.267721 +2645,0.963819,0.000000,0.000000,-0.266556 +2646,0.964142,0.000000,0.000000,-0.265387 +2647,0.964463,0.000000,0.000000,-0.264216 +2648,0.964784,0.000000,0.000000,-0.263043 +2649,0.965104,0.000000,0.000000,-0.261867 +2650,0.965423,0.000000,0.000000,-0.260688 +2651,0.965741,0.000000,0.000000,-0.259506 +2652,0.966059,0.000000,0.000000,-0.258322 +2653,0.966375,0.000000,0.000000,-0.257136 +2654,0.966691,0.000000,0.000000,-0.255946 +2655,0.967006,0.000000,0.000000,-0.254754 +2656,0.967320,0.000000,0.000000,-0.253560 +2657,0.967633,0.000000,0.000000,-0.252363 +2658,0.967945,0.000000,0.000000,-0.251163 +2659,0.968256,0.000000,0.000000,-0.249961 +2660,0.968566,0.000000,0.000000,-0.248756 +2661,0.968875,0.000000,0.000000,-0.247549 +2662,0.969184,0.000000,0.000000,-0.246339 +2663,0.969491,0.000000,0.000000,-0.245127 +2664,0.969797,0.000000,0.000000,-0.243912 +2665,0.970103,0.000000,0.000000,-0.242694 +2666,0.970407,0.000000,0.000000,-0.241474 +2667,0.970711,0.000000,0.000000,-0.240251 +2668,0.971013,0.000000,0.000000,-0.239026 +2669,0.971315,0.000000,0.000000,-0.237798 +2670,0.971615,0.000000,0.000000,-0.236568 +2671,0.971914,0.000000,0.000000,-0.235335 +2672,0.972212,0.000000,0.000000,-0.234100 +2673,0.972510,0.000000,0.000000,-0.232862 +2674,0.972806,0.000000,0.000000,-0.231622 +2675,0.973101,0.000000,0.000000,-0.230380 +2676,0.973395,0.000000,0.000000,-0.229134 +2677,0.973688,0.000000,0.000000,-0.227887 +2678,0.973979,0.000000,0.000000,-0.226636 +2679,0.974270,0.000000,0.000000,-0.225384 +2680,0.974560,0.000000,0.000000,-0.224129 +2681,0.974848,0.000000,0.000000,-0.222871 +2682,0.975135,0.000000,0.000000,-0.221611 +2683,0.975421,0.000000,0.000000,-0.220349 +2684,0.975706,0.000000,0.000000,-0.219084 +2685,0.975990,0.000000,0.000000,-0.217816 +2686,0.976272,0.000000,0.000000,-0.216547 +2687,0.976554,0.000000,0.000000,-0.215275 +2688,0.976834,0.000000,0.000000,-0.214000 +2689,0.977113,0.000000,0.000000,-0.212723 +2690,0.977390,0.000000,0.000000,-0.211444 +2691,0.977667,0.000000,0.000000,-0.210162 +2692,0.977942,0.000000,0.000000,-0.208878 +2693,0.978216,0.000000,0.000000,-0.207591 +2694,0.978488,0.000000,0.000000,-0.206302 +2695,0.978760,0.000000,0.000000,-0.205011 +2696,0.979030,0.000000,0.000000,-0.203717 +2697,0.979299,0.000000,0.000000,-0.202421 +2698,0.979566,0.000000,0.000000,-0.201122 +2699,0.979832,0.000000,0.000000,-0.199822 +2700,0.980097,0.000000,0.000000,-0.198518 +2701,0.980361,0.000000,0.000000,-0.197213 +2702,0.980623,0.000000,0.000000,-0.195905 +2703,0.980884,0.000000,0.000000,-0.194595 +2704,0.981143,0.000000,0.000000,-0.193283 +2705,0.981401,0.000000,0.000000,-0.191968 +2706,0.981658,0.000000,0.000000,-0.190651 +2707,0.981913,0.000000,0.000000,-0.189332 +2708,0.982167,0.000000,0.000000,-0.188010 +2709,0.982420,0.000000,0.000000,-0.186686 +2710,0.982671,0.000000,0.000000,-0.185360 +2711,0.982920,0.000000,0.000000,-0.184031 +2712,0.983169,0.000000,0.000000,-0.182701 +2713,0.983415,0.000000,0.000000,-0.181368 +2714,0.983661,0.000000,0.000000,-0.180032 +2715,0.983905,0.000000,0.000000,-0.178695 +2716,0.984147,0.000000,0.000000,-0.177355 +2717,0.984388,0.000000,0.000000,-0.176013 +2718,0.984627,0.000000,0.000000,-0.174669 +2719,0.984865,0.000000,0.000000,-0.173323 +2720,0.985101,0.000000,0.000000,-0.171974 +2721,0.985336,0.000000,0.000000,-0.170623 +2722,0.985570,0.000000,0.000000,-0.169270 +2723,0.985801,0.000000,0.000000,-0.167915 +2724,0.986032,0.000000,0.000000,-0.166558 +2725,0.986260,0.000000,0.000000,-0.165198 +2726,0.986487,0.000000,0.000000,-0.163837 +2727,0.986713,0.000000,0.000000,-0.162473 +2728,0.986937,0.000000,0.000000,-0.161107 +2729,0.987159,0.000000,0.000000,-0.159739 +2730,0.987380,0.000000,0.000000,-0.158368 +2731,0.987599,0.000000,0.000000,-0.156996 +2732,0.987817,0.000000,0.000000,-0.155621 +2733,0.988033,0.000000,0.000000,-0.154245 +2734,0.988247,0.000000,0.000000,-0.152866 +2735,0.988460,0.000000,0.000000,-0.151485 +2736,0.988670,0.000000,0.000000,-0.150102 +2737,0.988880,0.000000,0.000000,-0.148717 +2738,0.989087,0.000000,0.000000,-0.147330 +2739,0.989293,0.000000,0.000000,-0.145941 +2740,0.989498,0.000000,0.000000,-0.144550 +2741,0.989700,0.000000,0.000000,-0.143157 +2742,0.989901,0.000000,0.000000,-0.141761 +2743,0.990100,0.000000,0.000000,-0.140364 +2744,0.990297,0.000000,0.000000,-0.138965 +2745,0.990493,0.000000,0.000000,-0.137563 +2746,0.990687,0.000000,0.000000,-0.136160 +2747,0.990879,0.000000,0.000000,-0.134754 +2748,0.991069,0.000000,0.000000,-0.133347 +2749,0.991258,0.000000,0.000000,-0.131938 +2750,0.991445,0.000000,0.000000,-0.130526 +2751,0.991630,0.000000,0.000000,-0.129113 +2752,0.991813,0.000000,0.000000,-0.127698 +2753,0.991995,0.000000,0.000000,-0.126280 +2754,0.992174,0.000000,0.000000,-0.124861 +2755,0.992352,0.000000,0.000000,-0.123440 +2756,0.992528,0.000000,0.000000,-0.122017 +2757,0.992702,0.000000,0.000000,-0.120592 +2758,0.992874,0.000000,0.000000,-0.119165 +2759,0.993045,0.000000,0.000000,-0.117736 +2760,0.993214,0.000000,0.000000,-0.116305 +2761,0.993380,0.000000,0.000000,-0.114873 +2762,0.993545,0.000000,0.000000,-0.113438 +2763,0.993708,0.000000,0.000000,-0.112002 +2764,0.993869,0.000000,0.000000,-0.110563 +2765,0.994028,0.000000,0.000000,-0.109123 +2766,0.994185,0.000000,0.000000,-0.107681 +2767,0.994341,0.000000,0.000000,-0.106238 +2768,0.994494,0.000000,0.000000,-0.104792 +2769,0.994646,0.000000,0.000000,-0.103345 +2770,0.994795,0.000000,0.000000,-0.101895 +2771,0.994943,0.000000,0.000000,-0.100444 +2772,0.995088,0.000000,0.000000,-0.098991 +2773,0.995232,0.000000,0.000000,-0.097537 +2774,0.995374,0.000000,0.000000,-0.096080 +2775,0.995513,0.000000,0.000000,-0.094622 +2776,0.995651,0.000000,0.000000,-0.093162 +2777,0.995787,0.000000,0.000000,-0.091700 +2778,0.995920,0.000000,0.000000,-0.090237 +2779,0.996052,0.000000,0.000000,-0.088772 +2780,0.996182,0.000000,0.000000,-0.087305 +2781,0.996309,0.000000,0.000000,-0.085836 +2782,0.996435,0.000000,0.000000,-0.084366 +2783,0.996558,0.000000,0.000000,-0.082894 +2784,0.996680,0.000000,0.000000,-0.081420 +2785,0.996799,0.000000,0.000000,-0.079945 +2786,0.996917,0.000000,0.000000,-0.078468 +2787,0.997032,0.000000,0.000000,-0.076989 +2788,0.997145,0.000000,0.000000,-0.075509 +2789,0.997256,0.000000,0.000000,-0.074027 +2790,0.997365,0.000000,0.000000,-0.072543 +2791,0.997472,0.000000,0.000000,-0.071058 +2792,0.997577,0.000000,0.000000,-0.069571 +2793,0.997680,0.000000,0.000000,-0.068082 +2794,0.997780,0.000000,0.000000,-0.066592 +2795,0.997879,0.000000,0.000000,-0.065101 +2796,0.997975,0.000000,0.000000,-0.063607 +2797,0.998069,0.000000,0.000000,-0.062113 +2798,0.998161,0.000000,0.000000,-0.060616 +2799,0.998251,0.000000,0.000000,-0.059118 +2800,0.998339,0.000000,0.000000,-0.057619 +2801,0.998424,0.000000,0.000000,-0.056118 +2802,0.998507,0.000000,0.000000,-0.054615 +2803,0.998589,0.000000,0.000000,-0.053111 +2804,0.998668,0.000000,0.000000,-0.051606 +2805,0.998744,0.000000,0.000000,-0.050099 +2806,0.998819,0.000000,0.000000,-0.048590 +2807,0.998891,0.000000,0.000000,-0.047080 +2808,0.998961,0.000000,0.000000,-0.045569 +2809,0.999029,0.000000,0.000000,-0.044056 +2810,0.999095,0.000000,0.000000,-0.042542 +2811,0.999158,0.000000,0.000000,-0.041026 +2812,0.999219,0.000000,0.000000,-0.039509 +2813,0.999278,0.000000,0.000000,-0.037990 +2814,0.999335,0.000000,0.000000,-0.036470 +2815,0.999389,0.000000,0.000000,-0.034949 +2816,0.999441,0.000000,0.000000,-0.033426 +2817,0.999491,0.000000,0.000000,-0.031902 +2818,0.999539,0.000000,0.000000,-0.030377 +2819,0.999584,0.000000,0.000000,-0.028850 +2820,0.999627,0.000000,0.000000,-0.027322 +2821,0.999667,0.000000,0.000000,-0.025792 +2822,0.999706,0.000000,0.000000,-0.024261 +2823,0.999742,0.000000,0.000000,-0.022729 +2824,0.999775,0.000000,0.000000,-0.021196 +2825,0.999807,0.000000,0.000000,-0.019661 +2826,0.999836,0.000000,0.000000,-0.018125 +2827,0.999862,0.000000,0.000000,-0.016588 +2828,0.999887,0.000000,0.000000,-0.015049 +2829,0.999909,0.000000,0.000000,-0.013509 +2830,0.999928,0.000000,0.000000,-0.011968 +2831,0.999946,0.000000,0.000000,-0.010426 +2832,0.999961,0.000000,0.000000,-0.008882 +2833,0.999973,0.000000,0.000000,-0.007338 +2834,0.999983,0.000000,0.000000,-0.005792 +2835,0.999991,0.000000,0.000000,-0.004245 +2836,0.999996,0.000000,0.000000,-0.002696 +2837,0.999999,0.000000,0.000000,-0.001147 +2838,1.000000,0.000000,0.000000,0.000404 +2839,0.999998,0.000000,0.000000,0.001955 +2840,0.999994,0.000000,0.000000,0.003508 +2841,0.999987,0.000000,0.000000,0.005062 +2842,0.999978,0.000000,0.000000,0.006617 +2843,0.999967,0.000000,0.000000,0.008173 +2844,0.999953,0.000000,0.000000,0.009731 +2845,0.999936,0.000000,0.000000,0.011289 +2846,0.999917,0.000000,0.000000,0.012849 +2847,0.999896,0.000000,0.000000,0.014409 +2848,0.999872,0.000000,0.000000,0.015971 +2849,0.999846,0.000000,0.000000,0.017533 +2850,0.999818,0.000000,0.000000,0.019097 +2851,0.999787,0.000000,0.000000,0.020661 +2852,0.999753,0.000000,0.000000,0.022227 +2853,0.999717,0.000000,0.000000,0.023794 +2854,0.999678,0.000000,0.000000,0.025361 +2855,0.999637,0.000000,0.000000,0.026930 +2856,0.999594,0.000000,0.000000,0.028500 +2857,0.999548,0.000000,0.000000,0.030070 +2858,0.999499,0.000000,0.000000,0.031642 +2859,0.999448,0.000000,0.000000,0.033214 +2860,0.999395,0.000000,0.000000,0.034787 +2861,0.999339,0.000000,0.000000,0.036362 +2862,0.999280,0.000000,0.000000,0.037937 +2863,0.999219,0.000000,0.000000,0.039513 +2864,0.999155,0.000000,0.000000,0.041090 +2865,0.999089,0.000000,0.000000,0.042667 +2866,0.999021,0.000000,0.000000,0.044246 +2867,0.998949,0.000000,0.000000,0.045825 +2868,0.998876,0.000000,0.000000,0.047406 +2869,0.998799,0.000000,0.000000,0.048987 +2870,0.998721,0.000000,0.000000,0.050569 +2871,0.998639,0.000000,0.000000,0.052151 +2872,0.998555,0.000000,0.000000,0.053735 +2873,0.998469,0.000000,0.000000,0.055319 +2874,0.998380,0.000000,0.000000,0.056904 +2875,0.998288,0.000000,0.000000,0.058490 +2876,0.998194,0.000000,0.000000,0.060077 +2877,0.998097,0.000000,0.000000,0.061664 +2878,0.997998,0.000000,0.000000,0.063252 +2879,0.997896,0.000000,0.000000,0.064840 +2880,0.997791,0.000000,0.000000,0.066430 +2881,0.997684,0.000000,0.000000,0.068020 +2882,0.997574,0.000000,0.000000,0.069611 +2883,0.997462,0.000000,0.000000,0.071202 +2884,0.997347,0.000000,0.000000,0.072794 +2885,0.997229,0.000000,0.000000,0.074387 +2886,0.997109,0.000000,0.000000,0.075980 +2887,0.996987,0.000000,0.000000,0.077574 +2888,0.996861,0.000000,0.000000,0.079169 +2889,0.996733,0.000000,0.000000,0.080764 +2890,0.996603,0.000000,0.000000,0.082360 +2891,0.996469,0.000000,0.000000,0.083956 +2892,0.996334,0.000000,0.000000,0.085553 +2893,0.996195,0.000000,0.000000,0.087150 +2894,0.996054,0.000000,0.000000,0.088748 +2895,0.995910,0.000000,0.000000,0.090347 +2896,0.995764,0.000000,0.000000,0.091946 +2897,0.995615,0.000000,0.000000,0.093545 +2898,0.995463,0.000000,0.000000,0.095145 +2899,0.995309,0.000000,0.000000,0.096746 +2900,0.995152,0.000000,0.000000,0.098347 +2901,0.994993,0.000000,0.000000,0.099948 +2902,0.994830,0.000000,0.000000,0.101550 +2903,0.994666,0.000000,0.000000,0.103152 +2904,0.994498,0.000000,0.000000,0.104755 +2905,0.994328,0.000000,0.000000,0.106358 +2906,0.994155,0.000000,0.000000,0.107962 +2907,0.993980,0.000000,0.000000,0.109566 +2908,0.993801,0.000000,0.000000,0.111170 +2909,0.993621,0.000000,0.000000,0.112775 +2910,0.993437,0.000000,0.000000,0.114380 +2911,0.993251,0.000000,0.000000,0.115985 +2912,0.993062,0.000000,0.000000,0.117591 +2913,0.992871,0.000000,0.000000,0.119197 +2914,0.992677,0.000000,0.000000,0.120803 +2915,0.992480,0.000000,0.000000,0.122410 +2916,0.992280,0.000000,0.000000,0.124016 +2917,0.992078,0.000000,0.000000,0.125624 +2918,0.991873,0.000000,0.000000,0.127231 +2919,0.991666,0.000000,0.000000,0.128839 +2920,0.991455,0.000000,0.000000,0.130447 +2921,0.991242,0.000000,0.000000,0.132055 +2922,0.991027,0.000000,0.000000,0.133663 +2923,0.990809,0.000000,0.000000,0.135272 +2924,0.990588,0.000000,0.000000,0.136881 +2925,0.990364,0.000000,0.000000,0.138489 +2926,0.990138,0.000000,0.000000,0.140099 +2927,0.989909,0.000000,0.000000,0.141708 +2928,0.989677,0.000000,0.000000,0.143317 +2929,0.989442,0.000000,0.000000,0.144927 +2930,0.989205,0.000000,0.000000,0.146536 +2931,0.988965,0.000000,0.000000,0.148146 +2932,0.988723,0.000000,0.000000,0.149756 +2933,0.988478,0.000000,0.000000,0.151366 +2934,0.988230,0.000000,0.000000,0.152976 +2935,0.987979,0.000000,0.000000,0.154586 +2936,0.987726,0.000000,0.000000,0.156196 +2937,0.987470,0.000000,0.000000,0.157807 +2938,0.987211,0.000000,0.000000,0.159417 +2939,0.986950,0.000000,0.000000,0.161027 +2940,0.986686,0.000000,0.000000,0.162637 +2941,0.986419,0.000000,0.000000,0.164247 +2942,0.986150,0.000000,0.000000,0.165858 +2943,0.985878,0.000000,0.000000,0.167468 +2944,0.985603,0.000000,0.000000,0.169078 +2945,0.985325,0.000000,0.000000,0.170688 +2946,0.985045,0.000000,0.000000,0.172298 +2947,0.984762,0.000000,0.000000,0.173908 +2948,0.984476,0.000000,0.000000,0.175518 +2949,0.984188,0.000000,0.000000,0.177128 +2950,0.983897,0.000000,0.000000,0.178737 +2951,0.983603,0.000000,0.000000,0.180347 +2952,0.983307,0.000000,0.000000,0.181956 +2953,0.983007,0.000000,0.000000,0.183565 +2954,0.982706,0.000000,0.000000,0.185174 +2955,0.982401,0.000000,0.000000,0.186783 +2956,0.982094,0.000000,0.000000,0.188392 +2957,0.981784,0.000000,0.000000,0.190001 +2958,0.981471,0.000000,0.000000,0.191609 +2959,0.981156,0.000000,0.000000,0.193217 +2960,0.980838,0.000000,0.000000,0.194825 +2961,0.980517,0.000000,0.000000,0.196433 +2962,0.980194,0.000000,0.000000,0.198040 +2963,0.979868,0.000000,0.000000,0.199647 +2964,0.979539,0.000000,0.000000,0.201254 +2965,0.979208,0.000000,0.000000,0.202860 +2966,0.978874,0.000000,0.000000,0.204467 +2967,0.978537,0.000000,0.000000,0.206073 +2968,0.978197,0.000000,0.000000,0.207678 +2969,0.977855,0.000000,0.000000,0.209284 +2970,0.977510,0.000000,0.000000,0.210889 +2971,0.977163,0.000000,0.000000,0.212493 +2972,0.976812,0.000000,0.000000,0.214097 +2973,0.976459,0.000000,0.000000,0.215701 +2974,0.976104,0.000000,0.000000,0.217305 +2975,0.975746,0.000000,0.000000,0.218908 +2976,0.975385,0.000000,0.000000,0.220510 +2977,0.975021,0.000000,0.000000,0.222112 +2978,0.974655,0.000000,0.000000,0.223714 +2979,0.974286,0.000000,0.000000,0.225316 +2980,0.973914,0.000000,0.000000,0.226916 +2981,0.973540,0.000000,0.000000,0.228517 +2982,0.973163,0.000000,0.000000,0.230117 +2983,0.972783,0.000000,0.000000,0.231716 +2984,0.972401,0.000000,0.000000,0.233315 +2985,0.972016,0.000000,0.000000,0.234913 +2986,0.971629,0.000000,0.000000,0.236511 +2987,0.971239,0.000000,0.000000,0.238109 +2988,0.970846,0.000000,0.000000,0.239705 +2989,0.970450,0.000000,0.000000,0.241301 +2990,0.970052,0.000000,0.000000,0.242897 +2991,0.969651,0.000000,0.000000,0.244492 +2992,0.969248,0.000000,0.000000,0.246087 +2993,0.968842,0.000000,0.000000,0.247680 +2994,0.968433,0.000000,0.000000,0.249274 +2995,0.968022,0.000000,0.000000,0.250866 +2996,0.967608,0.000000,0.000000,0.252458 +2997,0.967191,0.000000,0.000000,0.254049 +2998,0.966772,0.000000,0.000000,0.255640 +2999,0.966350,0.000000,0.000000,0.257230 diff --git a/scripts/testv/just_reverb.cfg b/scripts/testv/just_reverb.cfg new file mode 100644 index 0000000000..28acb76dc6 --- /dev/null +++ b/scripts/testv/just_reverb.cfg @@ -0,0 +1,2 @@ +[roomAcoustics] +reverb = true; # Reverb switch, in case BRIR is undefined or false, reverb flag is inherited from the room flag diff --git a/scripts/testv/ls_setup_16ch_8+4+4.txt b/scripts/testv/ls_setup_16ch_8+4+4.txt new file mode 100644 index 0000000000..b69c10a735 --- /dev/null +++ b/scripts/testv/ls_setup_16ch_8+4+4.txt @@ -0,0 +1,3 @@ +30.0, -30.0, 0.0, 150.0, -150.0, 100.0, -100.0, -180, 45.0, -45.0, 115.0, -115.0, 50.0, -50.0, 125.0, -125.0 + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 30.0, 30.0, 30.0, 30.0, -30.0, -30.0, -30.0, -30.0 + diff --git a/scripts/testv/stv16c.pcm b/scripts/testv/stv16c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv16n.pcm b/scripts/testv/stv16n.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv1ISM48s.pcm b/scripts/testv/stv1ISM48s.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv2ISM48s.pcm b/scripts/testv/stv2ISM48s.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv2OA32c.pcm b/scripts/testv/stv2OA32c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv2OA48c.pcm b/scripts/testv/stv2OA48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv32c.pcm b/scripts/testv/stv32c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv32n.pcm b/scripts/testv/stv32n.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv3ISM48s.pcm b/scripts/testv/stv3ISM48s.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv3OA32c.pcm b/scripts/testv/stv3OA32c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv3OA48c.pcm b/scripts/testv/stv3OA48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv48c.pcm b/scripts/testv/stv48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv4ISM48s.pcm b/scripts/testv/stv4ISM48s.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv512MC48c.pcm b/scripts/testv/stv512MC48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv51MC48c.pcm b/scripts/testv/stv51MC48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv714MC48c.pcm b/scripts/testv/stv714MC48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv8c.pcm b/scripts/testv/stv8c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv8n.pcm b/scripts/testv/stv8n.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvFOA16c.pcm b/scripts/testv/stvFOA16c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvFOA32c.pcm b/scripts/testv/stvFOA32c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvFOA48c.pcm b/scripts/testv/stvFOA48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvISM1.csv b/scripts/testv/stvISM1.csv new file mode 100644 index 0000000000..574c537028 --- /dev/null +++ b/scripts/testv/stvISM1.csv @@ -0,0 +1,1500 @@ +0,0.00,0.00,1.00,0.00,1.00 +1,4.80,0.00,1.00,0.00,1.00 +2,9.60,0.00,1.00,0.00,1.00 +3,14.40,0.00,1.00,0.00,1.00 +4,19.20,0.00,1.00,0.00,1.00 +5,24.00,0.00,1.00,0.00,1.00 +6,28.80,0.00,1.00,0.00,1.00 +7,33.60,0.00,1.00,0.00,1.00 +8,38.40,0.00,1.00,0.00,1.00 +9,43.20,0.00,1.00,0.00,1.00 +10,48.00,0.00,1.00,0.00,1.00 +11,52.80,0.00,1.00,0.00,1.00 +12,57.60,0.00,1.00,0.00,1.00 +13,62.40,0.00,1.00,0.00,1.00 +14,67.20,0.00,1.00,0.00,1.00 +15,72.00,0.00,1.00,0.00,1.00 +16,76.80,0.00,1.00,0.00,1.00 +17,81.60,0.00,1.00,0.00,1.00 +18,86.40,0.00,1.00,0.00,1.00 +19,91.20,0.00,1.00,0.00,1.00 +20,96.00,0.00,1.00,0.00,1.00 +21,100.80,0.00,1.00,0.00,1.00 +22,105.60,0.00,1.00,0.00,1.00 +23,110.40,0.00,1.00,0.00,1.00 +24,115.20,0.00,1.00,0.00,1.00 +25,120.00,0.00,1.00,0.00,1.00 +26,124.80,0.00,1.00,0.00,1.00 +27,129.60,0.00,1.00,0.00,1.00 +28,134.40,0.00,1.00,0.00,1.00 +29,139.20,0.00,1.00,0.00,1.00 +30,144.00,0.00,1.00,0.00,1.00 +31,148.80,0.00,1.00,0.00,1.00 +32,153.60,0.00,1.00,0.00,1.00 +33,158.40,0.00,1.00,0.00,1.00 +34,163.20,0.00,1.00,0.00,1.00 +35,168.00,0.00,1.00,0.00,1.00 +36,172.80,0.00,1.00,0.00,1.00 +37,177.60,0.00,1.00,0.00,1.00 +38,-177.60,0.00,1.00,0.00,1.00 +39,-172.80,0.00,1.00,0.00,1.00 +40,-168.00,0.00,1.00,0.00,1.00 +41,-163.20,0.00,1.00,0.00,1.00 +42,-158.40,0.00,1.00,0.00,1.00 +43,-153.60,0.00,1.00,0.00,1.00 +44,-148.80,0.00,1.00,0.00,1.00 +45,-144.00,0.00,1.00,0.00,1.00 +46,-139.20,0.00,1.00,0.00,1.00 +47,-134.40,0.00,1.00,0.00,1.00 +48,-129.60,0.00,1.00,0.00,1.00 +49,-124.80,0.00,1.00,0.00,1.00 +50,-120.00,0.00,1.00,0.00,1.00 +51,-115.20,0.00,1.00,0.00,1.00 +52,-110.40,0.00,1.00,0.00,1.00 +53,-105.60,0.00,1.00,0.00,1.00 +54,-100.80,0.00,1.00,0.00,1.00 +55,-96.00,0.00,1.00,0.00,1.00 +56,-91.20,0.00,1.00,0.00,1.00 +57,-86.40,0.00,1.00,0.00,1.00 +58,-81.60,0.00,1.00,0.00,1.00 +59,-76.80,0.00,1.00,0.00,1.00 +60,-72.00,0.00,1.00,0.00,1.00 +61,-67.20,0.00,1.00,0.00,1.00 +62,-62.40,0.00,1.00,0.00,1.00 +63,-57.60,0.00,1.00,0.00,1.00 +64,-52.80,0.00,1.00,0.00,1.00 +65,-48.00,0.00,1.00,0.00,1.00 +66,-43.20,0.00,1.00,0.00,1.00 +67,-38.40,0.00,1.00,0.00,1.00 +68,-33.60,0.00,1.00,0.00,1.00 +69,-28.80,0.00,1.00,0.00,1.00 +70,-24.00,0.00,1.00,0.00,1.00 +71,-19.20,0.00,1.00,0.00,1.00 +72,-14.40,0.00,1.00,0.00,1.00 +73,-9.60,0.00,1.00,0.00,1.00 +74,-4.80,0.00,1.00,0.00,1.00 +75,0.00,0.00,1.00,0.00,1.00 +76,4.80,-0.00,1.00,0.00,1.00 +77,9.60,-0.00,1.00,0.00,1.00 +78,14.40,-0.00,1.00,0.00,1.00 +79,19.20,-0.00,1.00,0.00,1.00 +80,24.00,-0.00,1.00,0.00,1.00 +81,28.80,-0.00,1.00,0.00,1.00 +82,33.60,-4.80,1.00,0.00,1.00 +83,38.40,-4.80,1.00,0.00,1.00 +84,43.20,-4.80,1.00,0.00,1.00 +85,48.00,-4.80,1.00,0.00,1.00 +86,52.80,-4.80,1.00,0.00,1.00 +87,57.60,-4.80,1.00,0.00,1.00 +88,62.40,-4.80,1.00,0.00,1.00 +89,67.20,-4.80,1.00,0.00,1.00 +90,72.00,-4.80,1.00,0.00,1.00 +91,76.80,-4.80,1.00,0.00,1.00 +92,81.60,-4.80,1.00,0.00,1.00 +93,86.40,-4.80,1.00,0.00,1.00 +94,91.20,-4.80,1.00,0.00,1.00 +95,96.00,-4.80,1.00,0.00,1.00 +96,100.80,-4.80,1.00,0.00,1.00 +97,105.60,-4.80,1.00,0.00,1.00 +98,110.40,-4.80,1.00,0.00,1.00 +99,115.20,-4.80,1.00,0.00,1.00 +100,120.00,-4.80,1.00,0.00,1.00 +101,124.80,-4.80,1.00,0.00,1.00 +102,129.60,-4.80,1.00,0.00,1.00 +103,134.40,-4.80,1.00,0.00,1.00 +104,139.20,-4.80,1.00,0.00,1.00 +105,144.00,-4.80,1.00,0.00,1.00 +106,148.80,-4.80,1.00,0.00,1.00 +107,153.60,-0.00,1.00,0.00,1.00 +108,158.40,-0.00,1.00,0.00,1.00 +109,163.20,-0.00,1.00,0.00,1.00 +110,168.00,-0.00,1.00,0.00,1.00 +111,172.80,-0.00,1.00,0.00,1.00 +112,177.60,-0.00,1.00,0.00,1.00 +113,-177.60,0.00,1.00,0.00,1.00 +114,-172.80,0.00,1.00,0.00,1.00 +115,-168.00,0.00,1.00,0.00,1.00 +116,-163.20,0.00,1.00,0.00,1.00 +117,-158.40,0.00,1.00,0.00,1.00 +118,-153.60,0.00,1.00,0.00,1.00 +119,-148.80,4.80,1.00,0.00,1.00 +120,-144.00,4.80,1.00,0.00,1.00 +121,-139.20,4.80,1.00,0.00,1.00 +122,-134.40,4.80,1.00,0.00,1.00 +123,-129.60,4.80,1.00,0.00,1.00 +124,-124.80,4.80,1.00,0.00,1.00 +125,-120.00,4.80,1.00,0.00,1.00 +126,-115.20,4.80,1.00,0.00,1.00 +127,-110.40,4.80,1.00,0.00,1.00 +128,-105.60,4.80,1.00,0.00,1.00 +129,-100.80,4.80,1.00,0.00,1.00 +130,-96.00,4.80,1.00,0.00,1.00 +131,-91.20,4.80,1.00,0.00,1.00 +132,-86.40,4.80,1.00,0.00,1.00 +133,-81.60,4.80,1.00,0.00,1.00 +134,-76.80,4.80,1.00,0.00,1.00 +135,-72.00,4.80,1.00,0.00,1.00 +136,-67.20,4.80,1.00,0.00,1.00 +137,-62.40,4.80,1.00,0.00,1.00 +138,-57.60,4.80,1.00,0.00,1.00 +139,-52.80,4.80,1.00,0.00,1.00 +140,-48.00,4.80,1.00,0.00,1.00 +141,-43.20,4.80,1.00,0.00,1.00 +142,-38.40,4.80,1.00,0.00,1.00 +143,-33.60,4.80,1.00,0.00,1.00 +144,-28.80,0.00,1.00,0.00,1.00 +145,-24.00,0.00,1.00,0.00,1.00 +146,-19.20,0.00,1.00,0.00,1.00 +147,-14.40,0.00,1.00,0.00,1.00 +148,-9.60,0.00,1.00,0.00,1.00 +149,-4.80,0.00,1.00,0.00,1.00 +150,0.00,0.00,1.00,0.00,1.00 +151,4.80,-0.00,1.00,0.00,1.00 +152,9.60,-0.00,1.00,0.00,1.00 +153,14.40,-0.00,1.00,0.00,1.00 +154,19.20,-4.80,1.00,0.00,1.00 +155,24.00,-4.80,1.00,0.00,1.00 +156,28.80,-4.80,1.00,0.00,1.00 +157,33.60,-4.80,1.00,0.00,1.00 +158,38.40,-4.80,1.00,0.00,1.00 +159,43.20,-4.80,1.00,0.00,1.00 +160,48.00,-4.80,1.00,0.00,1.00 +161,52.80,-9.60,1.00,0.00,1.00 +162,57.60,-9.60,1.00,0.00,1.00 +163,62.40,-9.60,1.00,0.00,1.00 +164,67.20,-9.60,1.00,0.00,1.00 +165,72.00,-9.60,1.00,0.00,1.00 +166,76.80,-9.60,1.00,0.00,1.00 +167,81.60,-9.60,1.00,0.00,1.00 +168,86.40,-9.60,1.00,0.00,1.00 +169,91.20,-9.60,1.00,0.00,1.00 +170,96.00,-9.60,1.00,0.00,1.00 +171,100.80,-9.60,1.00,0.00,1.00 +172,105.60,-9.60,1.00,0.00,1.00 +173,110.40,-9.60,1.00,0.00,1.00 +174,115.20,-9.60,1.00,0.00,1.00 +175,120.00,-9.60,1.00,0.00,1.00 +176,124.80,-9.60,1.00,0.00,1.00 +177,129.60,-9.60,1.00,0.00,1.00 +178,134.40,-4.80,1.00,0.00,1.00 +179,139.20,-4.80,1.00,0.00,1.00 +180,144.00,-4.80,1.00,0.00,1.00 +181,148.80,-4.80,1.00,0.00,1.00 +182,153.60,-4.80,1.00,0.00,1.00 +183,158.40,-4.80,1.00,0.00,1.00 +184,163.20,-4.80,1.00,0.00,1.00 +185,168.00,-0.00,1.00,0.00,1.00 +186,172.80,-0.00,1.00,0.00,1.00 +187,177.60,-0.00,1.00,0.00,1.00 +188,-177.60,0.00,1.00,0.00,1.00 +189,-172.80,0.00,1.00,0.00,1.00 +190,-168.00,0.00,1.00,0.00,1.00 +191,-163.20,4.80,1.00,0.00,1.00 +192,-158.40,4.80,1.00,0.00,1.00 +193,-153.60,4.80,1.00,0.00,1.00 +194,-148.80,4.80,1.00,0.00,1.00 +195,-144.00,4.80,1.00,0.00,1.00 +196,-139.20,4.80,1.00,0.00,1.00 +197,-134.40,4.80,1.00,0.00,1.00 +198,-129.60,9.60,1.00,0.00,1.00 +199,-124.80,9.60,1.00,0.00,1.00 +200,-120.00,9.60,1.00,0.00,1.00 +201,-115.20,9.60,1.00,0.00,1.00 +202,-110.40,9.60,1.00,0.00,1.00 +203,-105.60,9.60,1.00,0.00,1.00 +204,-100.80,9.60,1.00,0.00,1.00 +205,-96.00,9.60,1.00,0.00,1.00 +206,-91.20,9.60,1.00,0.00,1.00 +207,-86.40,9.60,1.00,0.00,1.00 +208,-81.60,9.60,1.00,0.00,1.00 +209,-76.80,9.60,1.00,0.00,1.00 +210,-72.00,9.60,1.00,0.00,1.00 +211,-67.20,9.60,1.00,0.00,1.00 +212,-62.40,9.60,1.00,0.00,1.00 +213,-57.60,9.60,1.00,0.00,1.00 +214,-52.80,9.60,1.00,0.00,1.00 +215,-48.00,4.80,1.00,0.00,1.00 +216,-43.20,4.80,1.00,0.00,1.00 +217,-38.40,4.80,1.00,0.00,1.00 +218,-33.60,4.80,1.00,0.00,1.00 +219,-28.80,4.80,1.00,0.00,1.00 +220,-24.00,4.80,1.00,0.00,1.00 +221,-19.20,4.80,1.00,0.00,1.00 +222,-14.40,0.00,1.00,0.00,1.00 +223,-9.60,0.00,1.00,0.00,1.00 +224,-4.80,0.00,1.00,0.00,1.00 +225,0.00,0.00,1.00,0.00,1.00 +226,4.80,-0.00,1.00,0.00,1.00 +227,9.60,-0.00,1.00,0.00,1.00 +228,14.40,-4.80,1.00,0.00,1.00 +229,19.20,-4.80,1.00,0.00,1.00 +230,24.00,-4.80,1.00,0.00,1.00 +231,28.80,-4.80,1.00,0.00,1.00 +232,33.60,-9.60,1.00,0.00,1.00 +233,38.40,-9.60,1.00,0.00,1.00 +234,43.20,-9.60,1.00,0.00,1.00 +235,48.00,-9.60,1.00,0.00,1.00 +236,52.80,-9.60,1.00,0.00,1.00 +237,57.60,-14.40,1.00,0.00,1.00 +238,62.40,-14.40,1.00,0.00,1.00 +239,67.20,-14.40,1.00,0.00,1.00 +240,72.00,-14.40,1.00,0.00,1.00 +241,76.80,-14.40,1.00,0.00,1.00 +242,81.60,-14.40,1.00,0.00,1.00 +243,86.40,-14.40,1.00,0.00,1.00 +244,91.20,-14.40,1.00,0.00,1.00 +245,96.00,-14.40,1.00,0.00,1.00 +246,100.80,-14.40,1.00,0.00,1.00 +247,105.60,-14.40,1.00,0.00,1.00 +248,110.40,-14.40,1.00,0.00,1.00 +249,115.20,-14.40,1.00,0.00,1.00 +250,120.00,-14.40,1.00,0.00,1.00 +251,124.80,-9.60,1.00,0.00,1.00 +252,129.60,-9.60,1.00,0.00,1.00 +253,134.40,-9.60,1.00,0.00,1.00 +254,139.20,-9.60,1.00,0.00,1.00 +255,144.00,-9.60,1.00,0.00,1.00 +256,148.80,-9.60,1.00,0.00,1.00 +257,153.60,-4.80,1.00,0.00,1.00 +258,158.40,-4.80,1.00,0.00,1.00 +259,163.20,-4.80,1.00,0.00,1.00 +260,168.00,-4.80,1.00,0.00,1.00 +261,172.80,-0.00,1.00,0.00,1.00 +262,177.60,-0.00,1.00,0.00,1.00 +263,-177.60,0.00,1.00,0.00,1.00 +264,-172.80,0.00,1.00,0.00,1.00 +265,-168.00,4.80,1.00,0.00,1.00 +266,-163.20,4.80,1.00,0.00,1.00 +267,-158.40,4.80,1.00,0.00,1.00 +268,-153.60,4.80,1.00,0.00,1.00 +269,-148.80,9.60,1.00,0.00,1.00 +270,-144.00,9.60,1.00,0.00,1.00 +271,-139.20,9.60,1.00,0.00,1.00 +272,-134.40,9.60,1.00,0.00,1.00 +273,-129.60,9.60,1.00,0.00,1.00 +274,-124.80,9.60,1.00,0.00,1.00 +275,-120.00,14.40,1.00,0.00,1.00 +276,-115.20,14.40,1.00,0.00,1.00 +277,-110.40,14.40,1.00,0.00,1.00 +278,-105.60,14.40,1.00,0.00,1.00 +279,-100.80,14.40,1.00,0.00,1.00 +280,-96.00,14.40,1.00,0.00,1.00 +281,-91.20,14.40,1.00,0.00,1.00 +282,-86.40,14.40,1.00,0.00,1.00 +283,-81.60,14.40,1.00,0.00,1.00 +284,-76.80,14.40,1.00,0.00,1.00 +285,-72.00,14.40,1.00,0.00,1.00 +286,-67.20,14.40,1.00,0.00,1.00 +287,-62.40,14.40,1.00,0.00,1.00 +288,-57.60,14.40,1.00,0.00,1.00 +289,-52.80,9.60,1.00,0.00,1.00 +290,-48.00,9.60,1.00,0.00,1.00 +291,-43.20,9.60,1.00,0.00,1.00 +292,-38.40,9.60,1.00,0.00,1.00 +293,-33.60,9.60,1.00,0.00,1.00 +294,-28.80,4.80,1.00,0.00,1.00 +295,-24.00,4.80,1.00,0.00,1.00 +296,-19.20,4.80,1.00,0.00,1.00 +297,-14.40,4.80,1.00,0.00,1.00 +298,-9.60,0.00,1.00,0.00,1.00 +299,-4.80,0.00,1.00,0.00,1.00 +300,0.00,0.00,1.00,0.00,1.00 +301,4.80,-0.00,1.00,0.00,1.00 +302,9.60,-4.80,1.00,0.00,1.00 +303,14.40,-4.80,1.00,0.00,1.00 +304,19.20,-4.80,1.00,0.00,1.00 +305,24.00,-9.60,1.00,0.00,1.00 +306,28.80,-9.60,1.00,0.00,1.00 +307,33.60,-9.60,1.00,0.00,1.00 +308,38.40,-9.60,1.00,0.00,1.00 +309,43.20,-14.40,1.00,0.00,1.00 +310,48.00,-14.40,1.00,0.00,1.00 +311,52.80,-14.40,1.00,0.00,1.00 +312,57.60,-14.40,1.00,0.00,1.00 +313,62.40,-19.20,1.00,0.00,1.00 +314,67.20,-19.20,1.00,0.00,1.00 +315,72.00,-19.20,1.00,0.00,1.00 +316,76.80,-19.20,1.00,0.00,1.00 +317,81.60,-19.20,1.00,0.00,1.00 +318,86.40,-19.20,1.00,0.00,1.00 +319,91.20,-19.20,1.00,0.00,1.00 +320,96.00,-19.20,1.00,0.00,1.00 +321,100.80,-19.20,1.00,0.00,1.00 +322,105.60,-19.20,1.00,0.00,1.00 +323,110.40,-19.20,1.00,0.00,1.00 +324,115.20,-19.20,1.00,0.00,1.00 +325,120.00,-14.40,1.00,0.00,1.00 +326,124.80,-14.40,1.00,0.00,1.00 +327,129.60,-14.40,1.00,0.00,1.00 +328,134.40,-14.40,1.00,0.00,1.00 +329,139.20,-14.40,1.00,0.00,1.00 +330,144.00,-9.60,1.00,0.00,1.00 +331,148.80,-9.60,1.00,0.00,1.00 +332,153.60,-9.60,1.00,0.00,1.00 +333,158.40,-4.80,1.00,0.00,1.00 +334,163.20,-4.80,1.00,0.00,1.00 +335,168.00,-4.80,1.00,0.00,1.00 +336,172.80,-0.00,1.00,0.00,1.00 +337,177.60,-0.00,1.00,0.00,1.00 +338,-177.60,0.00,1.00,0.00,1.00 +339,-172.80,0.00,1.00,0.00,1.00 +340,-168.00,4.80,1.00,0.00,1.00 +341,-163.20,4.80,1.00,0.00,1.00 +342,-158.40,4.80,1.00,0.00,1.00 +343,-153.60,9.60,1.00,0.00,1.00 +344,-148.80,9.60,1.00,0.00,1.00 +345,-144.00,9.60,1.00,0.00,1.00 +346,-139.20,14.40,1.00,0.00,1.00 +347,-134.40,14.40,1.00,0.00,1.00 +348,-129.60,14.40,1.00,0.00,1.00 +349,-124.80,14.40,1.00,0.00,1.00 +350,-120.00,14.40,1.00,0.00,1.00 +351,-115.20,19.20,1.00,0.00,1.00 +352,-110.40,19.20,1.00,0.00,1.00 +353,-105.60,19.20,1.00,0.00,1.00 +354,-100.80,19.20,1.00,0.00,1.00 +355,-96.00,19.20,1.00,0.00,1.00 +356,-91.20,19.20,1.00,0.00,1.00 +357,-86.40,19.20,1.00,0.00,1.00 +358,-81.60,19.20,1.00,0.00,1.00 +359,-76.80,19.20,1.00,0.00,1.00 +360,-72.00,19.20,1.00,0.00,1.00 +361,-67.20,19.20,1.00,0.00,1.00 +362,-62.40,19.20,1.00,0.00,1.00 +363,-57.60,14.40,1.00,0.00,1.00 +364,-52.80,14.40,1.00,0.00,1.00 +365,-48.00,14.40,1.00,0.00,1.00 +366,-43.20,14.40,1.00,0.00,1.00 +367,-38.40,9.60,1.00,0.00,1.00 +368,-33.60,9.60,1.00,0.00,1.00 +369,-28.80,9.60,1.00,0.00,1.00 +370,-24.00,9.60,1.00,0.00,1.00 +371,-19.20,4.80,1.00,0.00,1.00 +372,-14.40,4.80,1.00,0.00,1.00 +373,-9.60,4.80,1.00,0.00,1.00 +374,-4.80,0.00,1.00,0.00,1.00 +375,0.00,0.00,1.00,0.00,1.00 +376,4.80,-0.00,1.00,0.00,1.00 +377,9.60,-4.80,1.00,0.00,1.00 +378,14.40,-4.80,1.00,0.00,1.00 +379,19.20,-9.60,1.00,0.00,1.00 +380,24.00,-9.60,1.00,0.00,1.00 +381,28.80,-9.60,1.00,0.00,1.00 +382,33.60,-14.40,1.00,0.00,1.00 +383,33.60,-14.40,1.00,0.00,1.00 +384,38.40,-14.40,1.00,0.00,1.00 +385,43.20,-19.20,1.00,0.00,1.00 +386,48.00,-19.20,1.00,0.00,1.00 +387,57.60,-19.20,1.00,0.00,1.00 +388,62.40,-19.20,1.00,0.00,1.00 +389,67.20,-24.00,1.00,0.00,1.00 +390,72.00,-24.00,1.00,0.00,1.00 +391,76.80,-24.00,1.00,0.00,1.00 +392,81.60,-24.00,1.00,0.00,1.00 +393,86.40,-24.00,1.00,0.00,1.00 +394,91.20,-24.00,1.00,0.00,1.00 +395,96.00,-24.00,1.00,0.00,1.00 +396,100.80,-24.00,1.00,0.00,1.00 +397,105.60,-24.00,1.00,0.00,1.00 +398,110.40,-24.00,1.00,0.00,1.00 +399,115.20,-19.20,1.00,0.00,1.00 +400,120.00,-19.20,1.00,0.00,1.00 +401,129.60,-19.20,1.00,0.00,1.00 +402,134.40,-19.20,1.00,0.00,1.00 +403,139.20,-19.20,1.00,0.00,1.00 +404,144.00,-14.40,1.00,0.00,1.00 +405,148.80,-14.40,1.00,0.00,1.00 +406,148.80,-14.40,1.00,0.00,1.00 +407,153.60,-9.60,1.00,0.00,1.00 +408,158.40,-9.60,1.00,0.00,1.00 +409,163.20,-4.80,1.00,0.00,1.00 +410,168.00,-4.80,1.00,0.00,1.00 +411,172.80,-4.80,1.00,0.00,1.00 +412,177.60,-0.00,1.00,0.00,1.00 +413,-177.60,0.00,1.00,0.00,1.00 +414,-172.80,4.80,1.00,0.00,1.00 +415,-168.00,4.80,1.00,0.00,1.00 +416,-163.20,4.80,1.00,0.00,1.00 +417,-158.40,9.60,1.00,0.00,1.00 +418,-153.60,9.60,1.00,0.00,1.00 +419,-148.80,14.40,1.00,0.00,1.00 +420,-148.80,14.40,1.00,0.00,1.00 +421,-144.00,14.40,1.00,0.00,1.00 +422,-139.20,19.20,1.00,0.00,1.00 +423,-134.40,19.20,1.00,0.00,1.00 +424,-129.60,19.20,1.00,0.00,1.00 +425,-120.00,19.20,1.00,0.00,1.00 +426,-115.20,19.20,1.00,0.00,1.00 +427,-110.40,24.00,1.00,0.00,1.00 +428,-105.60,24.00,1.00,0.00,1.00 +429,-100.80,24.00,1.00,0.00,1.00 +430,-96.00,24.00,1.00,0.00,1.00 +431,-91.20,24.00,1.00,0.00,1.00 +432,-86.40,24.00,1.00,0.00,1.00 +433,-81.60,24.00,1.00,0.00,1.00 +434,-76.80,24.00,1.00,0.00,1.00 +435,-72.00,24.00,1.00,0.00,1.00 +436,-67.20,24.00,1.00,0.00,1.00 +437,-62.40,19.20,1.00,0.00,1.00 +438,-57.60,19.20,1.00,0.00,1.00 +439,-48.00,19.20,1.00,0.00,1.00 +440,-43.20,19.20,1.00,0.00,1.00 +441,-38.40,14.40,1.00,0.00,1.00 +442,-33.60,14.40,1.00,0.00,1.00 +443,-33.60,14.40,1.00,0.00,1.00 +444,-28.80,9.60,1.00,0.00,1.00 +445,-24.00,9.60,1.00,0.00,1.00 +446,-19.20,9.60,1.00,0.00,1.00 +447,-14.40,4.80,1.00,0.00,1.00 +448,-9.60,4.80,1.00,0.00,1.00 +449,-4.80,0.00,1.00,0.00,1.00 +450,0.00,0.00,1.00,0.00,1.00 +451,4.80,-0.00,1.00,0.00,1.00 +452,9.60,-4.80,1.00,0.00,1.00 +453,14.40,-4.80,1.00,0.00,1.00 +454,19.20,-9.60,1.00,0.00,1.00 +455,19.20,-9.60,1.00,0.00,1.00 +456,24.00,-14.40,1.00,0.00,1.00 +457,28.80,-14.40,1.00,0.00,1.00 +458,33.60,-19.20,1.00,0.00,1.00 +459,38.40,-19.20,1.00,0.00,1.00 +460,43.20,-19.20,1.00,0.00,1.00 +461,48.00,-24.00,1.00,0.00,1.00 +462,52.80,-24.00,1.00,0.00,1.00 +463,57.60,-24.00,1.00,0.00,1.00 +464,62.40,-24.00,1.00,0.00,1.00 +465,72.00,-28.80,1.00,0.00,1.00 +466,76.80,-28.80,1.00,0.00,1.00 +467,81.60,-28.80,1.00,0.00,1.00 +468,86.40,-28.80,1.00,0.00,1.00 +469,91.20,-28.80,1.00,0.00,1.00 +470,96.00,-28.80,1.00,0.00,1.00 +471,100.80,-28.80,1.00,0.00,1.00 +472,105.60,-28.80,1.00,0.00,1.00 +473,115.20,-28.80,1.00,0.00,1.00 +474,120.00,-24.00,1.00,0.00,1.00 +475,124.80,-24.00,1.00,0.00,1.00 +476,129.60,-24.00,1.00,0.00,1.00 +477,134.40,-24.00,1.00,0.00,1.00 +478,139.20,-19.20,1.00,0.00,1.00 +479,144.00,-19.20,1.00,0.00,1.00 +480,148.80,-14.40,1.00,0.00,1.00 +481,153.60,-14.40,1.00,0.00,1.00 +482,158.40,-14.40,1.00,0.00,1.00 +483,163.20,-9.60,1.00,0.00,1.00 +484,163.20,-9.60,1.00,0.00,1.00 +485,168.00,-4.80,1.00,0.00,1.00 +486,172.80,-4.80,1.00,0.00,1.00 +487,177.60,-0.00,1.00,0.00,1.00 +488,-177.60,0.00,1.00,0.00,1.00 +489,-172.80,4.80,1.00,0.00,1.00 +490,-168.00,4.80,1.00,0.00,1.00 +491,-163.20,9.60,1.00,0.00,1.00 +492,-163.20,9.60,1.00,0.00,1.00 +493,-158.40,14.40,1.00,0.00,1.00 +494,-153.60,14.40,1.00,0.00,1.00 +495,-148.80,14.40,1.00,0.00,1.00 +496,-144.00,19.20,1.00,0.00,1.00 +497,-139.20,19.20,1.00,0.00,1.00 +498,-134.40,24.00,1.00,0.00,1.00 +499,-129.60,24.00,1.00,0.00,1.00 +500,-124.80,24.00,1.00,0.00,1.00 +501,-120.00,24.00,1.00,0.00,1.00 +502,-115.20,28.80,1.00,0.00,1.00 +503,-105.60,28.80,1.00,0.00,1.00 +504,-100.80,28.80,1.00,0.00,1.00 +505,-96.00,28.80,1.00,0.00,1.00 +506,-91.20,28.80,1.00,0.00,1.00 +507,-86.40,28.80,1.00,0.00,1.00 +508,-81.60,28.80,1.00,0.00,1.00 +509,-76.80,28.80,1.00,0.00,1.00 +510,-72.00,28.80,1.00,0.00,1.00 +511,-62.40,24.00,1.00,0.00,1.00 +512,-57.60,24.00,1.00,0.00,1.00 +513,-52.80,24.00,1.00,0.00,1.00 +514,-48.00,24.00,1.00,0.00,1.00 +515,-43.20,19.20,1.00,0.00,1.00 +516,-38.40,19.20,1.00,0.00,1.00 +517,-33.60,19.20,1.00,0.00,1.00 +518,-28.80,14.40,1.00,0.00,1.00 +519,-24.00,14.40,1.00,0.00,1.00 +520,-19.20,9.60,1.00,0.00,1.00 +521,-19.20,9.60,1.00,0.00,1.00 +522,-14.40,4.80,1.00,0.00,1.00 +523,-9.60,4.80,1.00,0.00,1.00 +524,-4.80,0.00,1.00,0.00,1.00 +525,0.00,0.00,1.00,0.00,1.00 +526,4.80,-4.80,1.00,0.00,1.00 +527,9.60,-4.80,1.00,0.00,1.00 +528,14.40,-9.60,1.00,0.00,1.00 +529,14.40,-9.60,1.00,0.00,1.00 +530,19.20,-14.40,1.00,0.00,1.00 +531,24.00,-14.40,1.00,0.00,1.00 +532,28.80,-19.20,1.00,0.00,1.00 +533,33.60,-19.20,1.00,0.00,1.00 +534,38.40,-24.00,1.00,0.00,1.00 +535,43.20,-24.00,1.00,0.00,1.00 +536,48.00,-24.00,1.00,0.00,1.00 +537,52.80,-28.80,1.00,0.00,1.00 +538,57.60,-28.80,1.00,0.00,1.00 +539,62.40,-28.80,1.00,0.00,1.00 +540,67.20,-33.60,1.00,0.00,1.00 +541,72.00,-33.60,1.00,0.00,1.00 +542,81.60,-33.60,1.00,0.00,1.00 +543,86.40,-33.60,1.00,0.00,1.00 +544,91.20,-33.60,1.00,0.00,1.00 +545,96.00,-33.60,1.00,0.00,1.00 +546,100.80,-33.60,1.00,0.00,1.00 +547,110.40,-33.60,1.00,0.00,1.00 +548,115.20,-33.60,1.00,0.00,1.00 +549,120.00,-28.80,1.00,0.00,1.00 +550,124.80,-28.80,1.00,0.00,1.00 +551,129.60,-28.80,1.00,0.00,1.00 +552,134.40,-24.00,1.00,0.00,1.00 +553,139.20,-24.00,1.00,0.00,1.00 +554,144.00,-19.20,1.00,0.00,1.00 +555,148.80,-19.20,1.00,0.00,1.00 +556,153.60,-14.40,1.00,0.00,1.00 +557,158.40,-14.40,1.00,0.00,1.00 +558,163.20,-9.60,1.00,0.00,1.00 +559,168.00,-9.60,1.00,0.00,1.00 +560,168.00,-4.80,1.00,0.00,1.00 +561,172.80,-4.80,1.00,0.00,1.00 +562,177.60,-0.00,1.00,0.00,1.00 +563,-177.60,0.00,1.00,0.00,1.00 +564,-172.80,4.80,1.00,0.00,1.00 +565,-168.00,4.80,1.00,0.00,1.00 +566,-168.00,9.60,1.00,0.00,1.00 +567,-163.20,9.60,1.00,0.00,1.00 +568,-158.40,14.40,1.00,0.00,1.00 +569,-153.60,14.40,1.00,0.00,1.00 +570,-148.80,19.20,1.00,0.00,1.00 +571,-144.00,19.20,1.00,0.00,1.00 +572,-139.20,24.00,1.00,0.00,1.00 +573,-134.40,24.00,1.00,0.00,1.00 +574,-129.60,28.80,1.00,0.00,1.00 +575,-124.80,28.80,1.00,0.00,1.00 +576,-120.00,28.80,1.00,0.00,1.00 +577,-115.20,33.60,1.00,0.00,1.00 +578,-110.40,33.60,1.00,0.00,1.00 +579,-100.80,33.60,1.00,0.00,1.00 +580,-96.00,33.60,1.00,0.00,1.00 +581,-91.20,33.60,1.00,0.00,1.00 +582,-86.40,33.60,1.00,0.00,1.00 +583,-81.60,33.60,1.00,0.00,1.00 +584,-72.00,33.60,1.00,0.00,1.00 +585,-67.20,33.60,1.00,0.00,1.00 +586,-62.40,28.80,1.00,0.00,1.00 +587,-57.60,28.80,1.00,0.00,1.00 +588,-52.80,28.80,1.00,0.00,1.00 +589,-48.00,24.00,1.00,0.00,1.00 +590,-43.20,24.00,1.00,0.00,1.00 +591,-38.40,24.00,1.00,0.00,1.00 +592,-33.60,19.20,1.00,0.00,1.00 +593,-28.80,19.20,1.00,0.00,1.00 +594,-24.00,14.40,1.00,0.00,1.00 +595,-19.20,14.40,1.00,0.00,1.00 +596,-14.40,9.60,1.00,0.00,1.00 +597,-14.40,9.60,1.00,0.00,1.00 +598,-9.60,4.80,1.00,0.00,1.00 +599,-4.80,4.80,1.00,0.00,1.00 +600,0.00,0.00,1.00,0.00,1.00 +601,4.80,-4.80,1.00,0.00,1.00 +602,9.60,-4.80,1.00,0.00,1.00 +603,9.60,-9.60,1.00,0.00,1.00 +604,14.40,-9.60,1.00,0.00,1.00 +605,19.20,-14.40,1.00,0.00,1.00 +606,24.00,-19.20,1.00,0.00,1.00 +607,28.80,-19.20,1.00,0.00,1.00 +608,33.60,-24.00,1.00,0.00,1.00 +609,38.40,-24.00,1.00,0.00,1.00 +610,43.20,-28.80,1.00,0.00,1.00 +611,48.00,-28.80,1.00,0.00,1.00 +612,52.80,-33.60,1.00,0.00,1.00 +613,57.60,-33.60,1.00,0.00,1.00 +614,62.40,-33.60,1.00,0.00,1.00 +615,67.20,-38.40,1.00,0.00,1.00 +616,72.00,-38.40,1.00,0.00,1.00 +617,81.60,-38.40,1.00,0.00,1.00 +618,86.40,-38.40,1.00,0.00,1.00 +619,91.20,-38.40,1.00,0.00,1.00 +620,96.00,-38.40,1.00,0.00,1.00 +621,105.60,-38.40,1.00,0.00,1.00 +622,110.40,-38.40,1.00,0.00,1.00 +623,115.20,-33.60,1.00,0.00,1.00 +624,120.00,-33.60,1.00,0.00,1.00 +625,124.80,-33.60,1.00,0.00,1.00 +626,129.60,-28.80,1.00,0.00,1.00 +627,134.40,-28.80,1.00,0.00,1.00 +628,139.20,-24.00,1.00,0.00,1.00 +629,144.00,-24.00,1.00,0.00,1.00 +630,148.80,-19.20,1.00,0.00,1.00 +631,153.60,-19.20,1.00,0.00,1.00 +632,158.40,-14.40,1.00,0.00,1.00 +633,163.20,-14.40,1.00,0.00,1.00 +634,168.00,-9.60,1.00,0.00,1.00 +635,172.80,-9.60,1.00,0.00,1.00 +636,172.80,-4.80,1.00,0.00,1.00 +637,177.60,-0.00,1.00,0.00,1.00 +638,-177.60,0.00,1.00,0.00,1.00 +639,-172.80,4.80,1.00,0.00,1.00 +640,-172.80,9.60,1.00,0.00,1.00 +641,-168.00,9.60,1.00,0.00,1.00 +642,-163.20,14.40,1.00,0.00,1.00 +643,-158.40,14.40,1.00,0.00,1.00 +644,-153.60,19.20,1.00,0.00,1.00 +645,-148.80,19.20,1.00,0.00,1.00 +646,-144.00,24.00,1.00,0.00,1.00 +647,-139.20,24.00,1.00,0.00,1.00 +648,-134.40,28.80,1.00,0.00,1.00 +649,-129.60,28.80,1.00,0.00,1.00 +650,-124.80,33.60,1.00,0.00,1.00 +651,-120.00,33.60,1.00,0.00,1.00 +652,-115.20,33.60,1.00,0.00,1.00 +653,-110.40,38.40,1.00,0.00,1.00 +654,-105.60,38.40,1.00,0.00,1.00 +655,-96.00,38.40,1.00,0.00,1.00 +656,-91.20,38.40,1.00,0.00,1.00 +657,-86.40,38.40,1.00,0.00,1.00 +658,-81.60,38.40,1.00,0.00,1.00 +659,-72.00,38.40,1.00,0.00,1.00 +660,-67.20,38.40,1.00,0.00,1.00 +661,-62.40,33.60,1.00,0.00,1.00 +662,-57.60,33.60,1.00,0.00,1.00 +663,-52.80,33.60,1.00,0.00,1.00 +664,-48.00,28.80,1.00,0.00,1.00 +665,-43.20,28.80,1.00,0.00,1.00 +666,-38.40,24.00,1.00,0.00,1.00 +667,-33.60,24.00,1.00,0.00,1.00 +668,-28.80,19.20,1.00,0.00,1.00 +669,-24.00,19.20,1.00,0.00,1.00 +670,-19.20,14.40,1.00,0.00,1.00 +671,-14.40,9.60,1.00,0.00,1.00 +672,-9.60,9.60,1.00,0.00,1.00 +673,-9.60,4.80,1.00,0.00,1.00 +674,-4.80,4.80,1.00,0.00,1.00 +675,0.00,0.00,1.00,0.00,1.00 +676,4.80,-4.80,1.00,0.00,1.00 +677,4.80,-4.80,1.00,0.00,1.00 +678,9.60,-9.60,1.00,0.00,1.00 +679,14.40,-14.40,1.00,0.00,1.00 +680,19.20,-14.40,1.00,0.00,1.00 +681,24.00,-19.20,1.00,0.00,1.00 +682,24.00,-24.00,1.00,0.00,1.00 +683,28.80,-24.00,1.00,0.00,1.00 +684,33.60,-28.80,1.00,0.00,1.00 +685,38.40,-28.80,1.00,0.00,1.00 +686,43.20,-33.60,1.00,0.00,1.00 +687,48.00,-33.60,1.00,0.00,1.00 +688,52.80,-38.40,1.00,0.00,1.00 +689,62.40,-38.40,1.00,0.00,1.00 +690,67.20,-38.40,1.00,0.00,1.00 +691,72.00,-43.20,1.00,0.00,1.00 +692,76.80,-43.20,1.00,0.00,1.00 +693,86.40,-43.20,1.00,0.00,1.00 +694,91.20,-43.20,1.00,0.00,1.00 +695,96.00,-43.20,1.00,0.00,1.00 +696,105.60,-43.20,1.00,0.00,1.00 +697,110.40,-43.20,1.00,0.00,1.00 +698,115.20,-38.40,1.00,0.00,1.00 +699,124.80,-38.40,1.00,0.00,1.00 +700,129.60,-38.40,1.00,0.00,1.00 +701,134.40,-33.60,1.00,0.00,1.00 +702,139.20,-33.60,1.00,0.00,1.00 +703,144.00,-28.80,1.00,0.00,1.00 +704,148.80,-28.80,1.00,0.00,1.00 +705,153.60,-24.00,1.00,0.00,1.00 +706,158.40,-19.20,1.00,0.00,1.00 +707,158.40,-19.20,1.00,0.00,1.00 +708,163.20,-14.40,1.00,0.00,1.00 +709,168.00,-9.60,1.00,0.00,1.00 +710,172.80,-9.60,1.00,0.00,1.00 +711,172.80,-4.80,1.00,0.00,1.00 +712,177.60,-0.00,1.00,0.00,1.00 +713,-177.60,0.00,1.00,0.00,1.00 +714,-172.80,4.80,1.00,0.00,1.00 +715,-172.80,9.60,1.00,0.00,1.00 +716,-168.00,9.60,1.00,0.00,1.00 +717,-163.20,14.40,1.00,0.00,1.00 +718,-158.40,19.20,1.00,0.00,1.00 +719,-158.40,19.20,1.00,0.00,1.00 +720,-153.60,24.00,1.00,0.00,1.00 +721,-148.80,28.80,1.00,0.00,1.00 +722,-144.00,28.80,1.00,0.00,1.00 +723,-139.20,33.60,1.00,0.00,1.00 +724,-134.40,33.60,1.00,0.00,1.00 +725,-129.60,38.40,1.00,0.00,1.00 +726,-124.80,38.40,1.00,0.00,1.00 +727,-115.20,38.40,1.00,0.00,1.00 +728,-110.40,43.20,1.00,0.00,1.00 +729,-105.60,43.20,1.00,0.00,1.00 +730,-96.00,43.20,1.00,0.00,1.00 +731,-91.20,43.20,1.00,0.00,1.00 +732,-86.40,43.20,1.00,0.00,1.00 +733,-76.80,43.20,1.00,0.00,1.00 +734,-72.00,43.20,1.00,0.00,1.00 +735,-67.20,38.40,1.00,0.00,1.00 +736,-62.40,38.40,1.00,0.00,1.00 +737,-52.80,38.40,1.00,0.00,1.00 +738,-48.00,33.60,1.00,0.00,1.00 +739,-43.20,33.60,1.00,0.00,1.00 +740,-38.40,28.80,1.00,0.00,1.00 +741,-33.60,28.80,1.00,0.00,1.00 +742,-28.80,24.00,1.00,0.00,1.00 +743,-24.00,24.00,1.00,0.00,1.00 +744,-24.00,19.20,1.00,0.00,1.00 +745,-19.20,14.40,1.00,0.00,1.00 +746,-14.40,14.40,1.00,0.00,1.00 +747,-9.60,9.60,1.00,0.00,1.00 +748,-4.80,4.80,1.00,0.00,1.00 +749,-4.80,4.80,1.00,0.00,1.00 +750,0.00,0.00,1.00,0.00,1.00 +751,4.80,-4.80,1.00,0.00,1.00 +752,4.80,-4.80,1.00,0.00,1.00 +753,9.60,-9.60,1.00,0.00,1.00 +754,14.40,-14.40,1.00,0.00,1.00 +755,14.40,-19.20,1.00,0.00,1.00 +756,19.20,-19.20,1.00,0.00,1.00 +757,24.00,-24.00,1.00,0.00,1.00 +758,28.80,-28.80,1.00,0.00,1.00 +759,33.60,-28.80,1.00,0.00,1.00 +760,38.40,-33.60,1.00,0.00,1.00 +761,43.20,-38.40,1.00,0.00,1.00 +762,48.00,-38.40,1.00,0.00,1.00 +763,52.80,-43.20,1.00,0.00,1.00 +764,57.60,-43.20,1.00,0.00,1.00 +765,62.40,-43.20,1.00,0.00,1.00 +766,72.00,-48.00,1.00,0.00,1.00 +767,76.80,-48.00,1.00,0.00,1.00 +768,86.40,-48.00,1.00,0.00,1.00 +769,91.20,-48.00,1.00,0.00,1.00 +770,100.80,-48.00,1.00,0.00,1.00 +771,105.60,-48.00,1.00,0.00,1.00 +772,110.40,-48.00,1.00,0.00,1.00 +773,120.00,-43.20,1.00,0.00,1.00 +774,124.80,-43.20,1.00,0.00,1.00 +775,129.60,-38.40,1.00,0.00,1.00 +776,134.40,-38.40,1.00,0.00,1.00 +777,139.20,-33.60,1.00,0.00,1.00 +778,144.00,-33.60,1.00,0.00,1.00 +779,148.80,-28.80,1.00,0.00,1.00 +780,153.60,-24.00,1.00,0.00,1.00 +781,158.40,-24.00,1.00,0.00,1.00 +782,163.20,-19.20,1.00,0.00,1.00 +783,163.20,-14.40,1.00,0.00,1.00 +784,168.00,-14.40,1.00,0.00,1.00 +785,172.80,-9.60,1.00,0.00,1.00 +786,172.80,-4.80,1.00,0.00,1.00 +787,177.60,-0.00,1.00,0.00,1.00 +788,-177.60,0.00,1.00,0.00,1.00 +789,-172.80,4.80,1.00,0.00,1.00 +790,-172.80,9.60,1.00,0.00,1.00 +791,-168.00,14.40,1.00,0.00,1.00 +792,-163.20,14.40,1.00,0.00,1.00 +793,-163.20,19.20,1.00,0.00,1.00 +794,-158.40,24.00,1.00,0.00,1.00 +795,-153.60,24.00,1.00,0.00,1.00 +796,-148.80,28.80,1.00,0.00,1.00 +797,-144.00,33.60,1.00,0.00,1.00 +798,-139.20,33.60,1.00,0.00,1.00 +799,-134.40,38.40,1.00,0.00,1.00 +800,-129.60,38.40,1.00,0.00,1.00 +801,-124.80,43.20,1.00,0.00,1.00 +802,-120.00,43.20,1.00,0.00,1.00 +803,-110.40,48.00,1.00,0.00,1.00 +804,-105.60,48.00,1.00,0.00,1.00 +805,-100.80,48.00,1.00,0.00,1.00 +806,-91.20,48.00,1.00,0.00,1.00 +807,-86.40,48.00,1.00,0.00,1.00 +808,-76.80,48.00,1.00,0.00,1.00 +809,-72.00,48.00,1.00,0.00,1.00 +810,-62.40,43.20,1.00,0.00,1.00 +811,-57.60,43.20,1.00,0.00,1.00 +812,-52.80,43.20,1.00,0.00,1.00 +813,-48.00,38.40,1.00,0.00,1.00 +814,-43.20,38.40,1.00,0.00,1.00 +815,-38.40,33.60,1.00,0.00,1.00 +816,-33.60,28.80,1.00,0.00,1.00 +817,-28.80,28.80,1.00,0.00,1.00 +818,-24.00,24.00,1.00,0.00,1.00 +819,-19.20,19.20,1.00,0.00,1.00 +820,-14.40,19.20,1.00,0.00,1.00 +821,-14.40,14.40,1.00,0.00,1.00 +822,-9.60,9.60,1.00,0.00,1.00 +823,-4.80,4.80,1.00,0.00,1.00 +824,-4.80,4.80,1.00,0.00,1.00 +825,0.00,0.00,1.00,0.00,1.00 +826,4.80,-4.80,1.00,0.00,1.00 +827,4.80,-9.60,1.00,0.00,1.00 +828,9.60,-9.60,1.00,0.00,1.00 +829,9.60,-14.40,1.00,0.00,1.00 +830,14.40,-19.20,1.00,0.00,1.00 +831,19.20,-24.00,1.00,0.00,1.00 +832,24.00,-24.00,1.00,0.00,1.00 +833,24.00,-28.80,1.00,0.00,1.00 +834,28.80,-33.60,1.00,0.00,1.00 +835,33.60,-38.40,1.00,0.00,1.00 +836,38.40,-38.40,1.00,0.00,1.00 +837,43.20,-43.20,1.00,0.00,1.00 +838,48.00,-43.20,1.00,0.00,1.00 +839,52.80,-48.00,1.00,0.00,1.00 +840,62.40,-48.00,1.00,0.00,1.00 +841,67.20,-52.80,1.00,0.00,1.00 +842,76.80,-52.80,1.00,0.00,1.00 +843,86.40,-52.80,1.00,0.00,1.00 +844,91.20,-52.80,1.00,0.00,1.00 +845,100.80,-52.80,1.00,0.00,1.00 +846,105.60,-52.80,1.00,0.00,1.00 +847,115.20,-48.00,1.00,0.00,1.00 +848,120.00,-48.00,1.00,0.00,1.00 +849,129.60,-48.00,1.00,0.00,1.00 +850,134.40,-43.20,1.00,0.00,1.00 +851,139.20,-43.20,1.00,0.00,1.00 +852,144.00,-38.40,1.00,0.00,1.00 +853,148.80,-33.60,1.00,0.00,1.00 +854,153.60,-33.60,1.00,0.00,1.00 +855,158.40,-28.80,1.00,0.00,1.00 +856,158.40,-24.00,1.00,0.00,1.00 +857,163.20,-19.20,1.00,0.00,1.00 +858,168.00,-19.20,1.00,0.00,1.00 +859,168.00,-14.40,1.00,0.00,1.00 +860,172.80,-9.60,1.00,0.00,1.00 +861,177.60,-4.80,1.00,0.00,1.00 +862,177.60,-0.00,1.00,0.00,1.00 +863,-177.60,0.00,1.00,0.00,1.00 +864,-177.60,4.80,1.00,0.00,1.00 +865,-172.80,9.60,1.00,0.00,1.00 +866,-168.00,14.40,1.00,0.00,1.00 +867,-168.00,19.20,1.00,0.00,1.00 +868,-163.20,19.20,1.00,0.00,1.00 +869,-158.40,24.00,1.00,0.00,1.00 +870,-158.40,28.80,1.00,0.00,1.00 +871,-153.60,33.60,1.00,0.00,1.00 +872,-148.80,33.60,1.00,0.00,1.00 +873,-144.00,38.40,1.00,0.00,1.00 +874,-139.20,43.20,1.00,0.00,1.00 +875,-134.40,43.20,1.00,0.00,1.00 +876,-129.60,48.00,1.00,0.00,1.00 +877,-120.00,48.00,1.00,0.00,1.00 +878,-115.20,48.00,1.00,0.00,1.00 +879,-105.60,52.80,1.00,0.00,1.00 +880,-100.80,52.80,1.00,0.00,1.00 +881,-91.20,52.80,1.00,0.00,1.00 +882,-86.40,52.80,1.00,0.00,1.00 +883,-76.80,52.80,1.00,0.00,1.00 +884,-67.20,52.80,1.00,0.00,1.00 +885,-62.40,48.00,1.00,0.00,1.00 +886,-52.80,48.00,1.00,0.00,1.00 +887,-48.00,43.20,1.00,0.00,1.00 +888,-43.20,43.20,1.00,0.00,1.00 +889,-38.40,38.40,1.00,0.00,1.00 +890,-33.60,38.40,1.00,0.00,1.00 +891,-28.80,33.60,1.00,0.00,1.00 +892,-24.00,28.80,1.00,0.00,1.00 +893,-24.00,24.00,1.00,0.00,1.00 +894,-19.20,24.00,1.00,0.00,1.00 +895,-14.40,19.20,1.00,0.00,1.00 +896,-9.60,14.40,1.00,0.00,1.00 +897,-9.60,9.60,1.00,0.00,1.00 +898,-4.80,9.60,1.00,0.00,1.00 +899,-4.80,4.80,1.00,0.00,1.00 +900,0.00,0.00,1.00,0.00,1.00 +901,4.80,-4.80,1.00,0.00,1.00 +902,4.80,-9.60,1.00,0.00,1.00 +903,9.60,-14.40,1.00,0.00,1.00 +904,9.60,-14.40,1.00,0.00,1.00 +905,14.40,-19.20,1.00,0.00,1.00 +906,14.40,-24.00,1.00,0.00,1.00 +907,19.20,-28.80,1.00,0.00,1.00 +908,24.00,-33.60,1.00,0.00,1.00 +909,28.80,-33.60,1.00,0.00,1.00 +910,28.80,-38.40,1.00,0.00,1.00 +911,33.60,-43.20,1.00,0.00,1.00 +912,38.40,-43.20,1.00,0.00,1.00 +913,48.00,-48.00,1.00,0.00,1.00 +914,52.80,-52.80,1.00,0.00,1.00 +915,57.60,-52.80,1.00,0.00,1.00 +916,67.20,-57.60,1.00,0.00,1.00 +917,76.80,-57.60,1.00,0.00,1.00 +918,81.60,-57.60,1.00,0.00,1.00 +919,91.20,-57.60,1.00,0.00,1.00 +920,100.80,-57.60,1.00,0.00,1.00 +921,110.40,-57.60,1.00,0.00,1.00 +922,115.20,-52.80,1.00,0.00,1.00 +923,124.80,-52.80,1.00,0.00,1.00 +924,129.60,-48.00,1.00,0.00,1.00 +925,139.20,-48.00,1.00,0.00,1.00 +926,144.00,-43.20,1.00,0.00,1.00 +927,148.80,-38.40,1.00,0.00,1.00 +928,153.60,-38.40,1.00,0.00,1.00 +929,153.60,-33.60,1.00,0.00,1.00 +930,158.40,-28.80,1.00,0.00,1.00 +931,163.20,-24.00,1.00,0.00,1.00 +932,163.20,-24.00,1.00,0.00,1.00 +933,168.00,-19.20,1.00,0.00,1.00 +934,172.80,-14.40,1.00,0.00,1.00 +935,172.80,-9.60,1.00,0.00,1.00 +936,177.60,-4.80,1.00,0.00,1.00 +937,177.60,-0.00,1.00,0.00,1.00 +938,-177.60,0.00,1.00,0.00,1.00 +939,-177.60,4.80,1.00,0.00,1.00 +940,-172.80,9.60,1.00,0.00,1.00 +941,-172.80,14.40,1.00,0.00,1.00 +942,-168.00,19.20,1.00,0.00,1.00 +943,-163.20,24.00,1.00,0.00,1.00 +944,-163.20,24.00,1.00,0.00,1.00 +945,-158.40,28.80,1.00,0.00,1.00 +946,-153.60,33.60,1.00,0.00,1.00 +947,-153.60,38.40,1.00,0.00,1.00 +948,-148.80,38.40,1.00,0.00,1.00 +949,-144.00,43.20,1.00,0.00,1.00 +950,-139.20,48.00,1.00,0.00,1.00 +951,-129.60,48.00,1.00,0.00,1.00 +952,-124.80,52.80,1.00,0.00,1.00 +953,-115.20,52.80,1.00,0.00,1.00 +954,-110.40,57.60,1.00,0.00,1.00 +955,-100.80,57.60,1.00,0.00,1.00 +956,-91.20,57.60,1.00,0.00,1.00 +957,-81.60,57.60,1.00,0.00,1.00 +958,-76.80,57.60,1.00,0.00,1.00 +959,-67.20,57.60,1.00,0.00,1.00 +960,-57.60,52.80,1.00,0.00,1.00 +961,-52.80,52.80,1.00,0.00,1.00 +962,-48.00,48.00,1.00,0.00,1.00 +963,-38.40,43.20,1.00,0.00,1.00 +964,-33.60,43.20,1.00,0.00,1.00 +965,-28.80,38.40,1.00,0.00,1.00 +966,-28.80,33.60,1.00,0.00,1.00 +967,-24.00,33.60,1.00,0.00,1.00 +968,-19.20,28.80,1.00,0.00,1.00 +969,-14.40,24.00,1.00,0.00,1.00 +970,-14.40,19.20,1.00,0.00,1.00 +971,-9.60,14.40,1.00,0.00,1.00 +972,-9.60,14.40,1.00,0.00,1.00 +973,-4.80,9.60,1.00,0.00,1.00 +974,-4.80,4.80,1.00,0.00,1.00 +975,0.00,0.00,1.00,0.00,1.00 +976,0.00,-4.80,1.00,0.00,1.00 +977,4.80,-9.60,1.00,0.00,1.00 +978,4.80,-14.40,1.00,0.00,1.00 +979,9.60,-19.20,1.00,0.00,1.00 +980,9.60,-19.20,1.00,0.00,1.00 +981,14.40,-24.00,1.00,0.00,1.00 +982,19.20,-28.80,1.00,0.00,1.00 +983,19.20,-33.60,1.00,0.00,1.00 +984,24.00,-38.40,1.00,0.00,1.00 +985,28.80,-43.20,1.00,0.00,1.00 +986,33.60,-43.20,1.00,0.00,1.00 +987,38.40,-48.00,1.00,0.00,1.00 +988,43.20,-52.80,1.00,0.00,1.00 +989,48.00,-52.80,1.00,0.00,1.00 +990,52.80,-57.60,1.00,0.00,1.00 +991,62.40,-57.60,1.00,0.00,1.00 +992,72.00,-62.40,1.00,0.00,1.00 +993,81.60,-62.40,1.00,0.00,1.00 +994,91.20,-62.40,1.00,0.00,1.00 +995,100.80,-62.40,1.00,0.00,1.00 +996,110.40,-62.40,1.00,0.00,1.00 +997,120.00,-57.60,1.00,0.00,1.00 +998,129.60,-57.60,1.00,0.00,1.00 +999,134.40,-52.80,1.00,0.00,1.00 +1000,139.20,-48.00,1.00,0.00,1.00 +1001,144.00,-48.00,1.00,0.00,1.00 +1002,148.80,-43.20,1.00,0.00,1.00 +1003,153.60,-38.40,1.00,0.00,1.00 +1004,158.40,-33.60,1.00,0.00,1.00 +1005,163.20,-33.60,1.00,0.00,1.00 +1006,163.20,-28.80,1.00,0.00,1.00 +1007,168.00,-24.00,1.00,0.00,1.00 +1008,168.00,-19.20,1.00,0.00,1.00 +1009,172.80,-14.40,1.00,0.00,1.00 +1010,172.80,-9.60,1.00,0.00,1.00 +1011,177.60,-4.80,1.00,0.00,1.00 +1012,177.60,-0.00,1.00,0.00,1.00 +1013,-177.60,0.00,1.00,0.00,1.00 +1014,-177.60,4.80,1.00,0.00,1.00 +1015,-172.80,9.60,1.00,0.00,1.00 +1016,-172.80,14.40,1.00,0.00,1.00 +1017,-168.00,19.20,1.00,0.00,1.00 +1018,-168.00,24.00,1.00,0.00,1.00 +1019,-163.20,28.80,1.00,0.00,1.00 +1020,-163.20,33.60,1.00,0.00,1.00 +1021,-158.40,33.60,1.00,0.00,1.00 +1022,-153.60,38.40,1.00,0.00,1.00 +1023,-148.80,43.20,1.00,0.00,1.00 +1024,-144.00,48.00,1.00,0.00,1.00 +1025,-139.20,48.00,1.00,0.00,1.00 +1026,-134.40,52.80,1.00,0.00,1.00 +1027,-129.60,57.60,1.00,0.00,1.00 +1028,-120.00,57.60,1.00,0.00,1.00 +1029,-110.40,62.40,1.00,0.00,1.00 +1030,-100.80,62.40,1.00,0.00,1.00 +1031,-91.20,62.40,1.00,0.00,1.00 +1032,-81.60,62.40,1.00,0.00,1.00 +1033,-72.00,62.40,1.00,0.00,1.00 +1034,-62.40,57.60,1.00,0.00,1.00 +1035,-52.80,57.60,1.00,0.00,1.00 +1036,-48.00,52.80,1.00,0.00,1.00 +1037,-43.20,52.80,1.00,0.00,1.00 +1038,-38.40,48.00,1.00,0.00,1.00 +1039,-33.60,43.20,1.00,0.00,1.00 +1040,-28.80,43.20,1.00,0.00,1.00 +1041,-24.00,38.40,1.00,0.00,1.00 +1042,-19.20,33.60,1.00,0.00,1.00 +1043,-19.20,28.80,1.00,0.00,1.00 +1044,-14.40,24.00,1.00,0.00,1.00 +1045,-9.60,19.20,1.00,0.00,1.00 +1046,-9.60,19.20,1.00,0.00,1.00 +1047,-4.80,14.40,1.00,0.00,1.00 +1048,-4.80,9.60,1.00,0.00,1.00 +1049,-0.00,4.80,1.00,0.00,1.00 +1050,0.00,0.00,1.00,0.00,1.00 +1051,0.00,-4.80,1.00,0.00,1.00 +1052,4.80,-9.60,1.00,0.00,1.00 +1053,4.80,-14.40,1.00,0.00,1.00 +1054,9.60,-19.20,1.00,0.00,1.00 +1055,9.60,-24.00,1.00,0.00,1.00 +1056,14.40,-24.00,1.00,0.00,1.00 +1057,14.40,-28.80,1.00,0.00,1.00 +1058,19.20,-33.60,1.00,0.00,1.00 +1059,19.20,-38.40,1.00,0.00,1.00 +1060,24.00,-43.20,1.00,0.00,1.00 +1061,28.80,-48.00,1.00,0.00,1.00 +1062,33.60,-52.80,1.00,0.00,1.00 +1063,38.40,-52.80,1.00,0.00,1.00 +1064,43.20,-57.60,1.00,0.00,1.00 +1065,48.00,-62.40,1.00,0.00,1.00 +1066,57.60,-62.40,1.00,0.00,1.00 +1067,67.20,-67.20,1.00,0.00,1.00 +1068,81.60,-67.20,1.00,0.00,1.00 +1069,91.20,-67.20,1.00,0.00,1.00 +1070,105.60,-67.20,1.00,0.00,1.00 +1071,115.20,-67.20,1.00,0.00,1.00 +1072,124.80,-62.40,1.00,0.00,1.00 +1073,134.40,-57.60,1.00,0.00,1.00 +1074,139.20,-57.60,1.00,0.00,1.00 +1075,144.00,-52.80,1.00,0.00,1.00 +1076,148.80,-48.00,1.00,0.00,1.00 +1077,153.60,-43.20,1.00,0.00,1.00 +1078,158.40,-43.20,1.00,0.00,1.00 +1079,163.20,-38.40,1.00,0.00,1.00 +1080,163.20,-33.60,1.00,0.00,1.00 +1081,168.00,-28.80,1.00,0.00,1.00 +1082,168.00,-24.00,1.00,0.00,1.00 +1083,172.80,-19.20,1.00,0.00,1.00 +1084,172.80,-14.40,1.00,0.00,1.00 +1085,177.60,-9.60,1.00,0.00,1.00 +1086,177.60,-4.80,1.00,0.00,1.00 +1087,177.60,-0.00,1.00,0.00,1.00 +1088,-177.60,0.00,1.00,0.00,1.00 +1089,-177.60,4.80,1.00,0.00,1.00 +1090,-177.60,9.60,1.00,0.00,1.00 +1091,-172.80,14.40,1.00,0.00,1.00 +1092,-172.80,19.20,1.00,0.00,1.00 +1093,-168.00,24.00,1.00,0.00,1.00 +1094,-168.00,28.80,1.00,0.00,1.00 +1095,-163.20,33.60,1.00,0.00,1.00 +1096,-163.20,38.40,1.00,0.00,1.00 +1097,-158.40,43.20,1.00,0.00,1.00 +1098,-153.60,43.20,1.00,0.00,1.00 +1099,-148.80,48.00,1.00,0.00,1.00 +1100,-144.00,52.80,1.00,0.00,1.00 +1101,-139.20,57.60,1.00,0.00,1.00 +1102,-134.40,57.60,1.00,0.00,1.00 +1103,-124.80,62.40,1.00,0.00,1.00 +1104,-115.20,67.20,1.00,0.00,1.00 +1105,-105.60,67.20,1.00,0.00,1.00 +1106,-91.20,67.20,1.00,0.00,1.00 +1107,-81.60,67.20,1.00,0.00,1.00 +1108,-67.20,67.20,1.00,0.00,1.00 +1109,-57.60,62.40,1.00,0.00,1.00 +1110,-48.00,62.40,1.00,0.00,1.00 +1111,-43.20,57.60,1.00,0.00,1.00 +1112,-38.40,52.80,1.00,0.00,1.00 +1113,-33.60,52.80,1.00,0.00,1.00 +1114,-28.80,48.00,1.00,0.00,1.00 +1115,-24.00,43.20,1.00,0.00,1.00 +1116,-19.20,38.40,1.00,0.00,1.00 +1117,-19.20,33.60,1.00,0.00,1.00 +1118,-14.40,28.80,1.00,0.00,1.00 +1119,-14.40,24.00,1.00,0.00,1.00 +1120,-9.60,24.00,1.00,0.00,1.00 +1121,-9.60,19.20,1.00,0.00,1.00 +1122,-4.80,14.40,1.00,0.00,1.00 +1123,-4.80,9.60,1.00,0.00,1.00 +1124,-0.00,4.80,1.00,0.00,1.00 +1125,0.00,0.00,1.00,0.00,1.00 +1126,0.00,-4.80,1.00,0.00,1.00 +1127,4.80,-9.60,1.00,0.00,1.00 +1128,4.80,-14.40,1.00,0.00,1.00 +1129,4.80,-19.20,1.00,0.00,1.00 +1130,9.60,-24.00,1.00,0.00,1.00 +1131,9.60,-28.80,1.00,0.00,1.00 +1132,9.60,-33.60,1.00,0.00,1.00 +1133,14.40,-38.40,1.00,0.00,1.00 +1134,14.40,-38.40,1.00,0.00,1.00 +1135,19.20,-43.20,1.00,0.00,1.00 +1136,24.00,-48.00,1.00,0.00,1.00 +1137,24.00,-52.80,1.00,0.00,1.00 +1138,28.80,-57.60,1.00,0.00,1.00 +1139,38.40,-62.40,1.00,0.00,1.00 +1140,43.20,-62.40,1.00,0.00,1.00 +1141,52.80,-67.20,1.00,0.00,1.00 +1142,62.40,-72.00,1.00,0.00,1.00 +1143,76.80,-72.00,1.00,0.00,1.00 +1144,96.00,-72.00,1.00,0.00,1.00 +1145,110.40,-72.00,1.00,0.00,1.00 +1146,120.00,-67.20,1.00,0.00,1.00 +1147,134.40,-67.20,1.00,0.00,1.00 +1148,139.20,-62.40,1.00,0.00,1.00 +1149,148.80,-57.60,1.00,0.00,1.00 +1150,153.60,-57.60,1.00,0.00,1.00 +1151,158.40,-52.80,1.00,0.00,1.00 +1152,158.40,-48.00,1.00,0.00,1.00 +1153,163.20,-43.20,1.00,0.00,1.00 +1154,163.20,-38.40,1.00,0.00,1.00 +1155,168.00,-33.60,1.00,0.00,1.00 +1156,168.00,-28.80,1.00,0.00,1.00 +1157,172.80,-24.00,1.00,0.00,1.00 +1158,172.80,-19.20,1.00,0.00,1.00 +1159,172.80,-14.40,1.00,0.00,1.00 +1160,177.60,-9.60,1.00,0.00,1.00 +1161,177.60,-4.80,1.00,0.00,1.00 +1162,177.60,-0.00,1.00,0.00,1.00 +1163,-177.60,0.00,1.00,0.00,1.00 +1164,-177.60,4.80,1.00,0.00,1.00 +1165,-177.60,9.60,1.00,0.00,1.00 +1166,-172.80,14.40,1.00,0.00,1.00 +1167,-172.80,19.20,1.00,0.00,1.00 +1168,-172.80,24.00,1.00,0.00,1.00 +1169,-168.00,28.80,1.00,0.00,1.00 +1170,-168.00,33.60,1.00,0.00,1.00 +1171,-163.20,38.40,1.00,0.00,1.00 +1172,-163.20,43.20,1.00,0.00,1.00 +1173,-158.40,48.00,1.00,0.00,1.00 +1174,-158.40,52.80,1.00,0.00,1.00 +1175,-153.60,57.60,1.00,0.00,1.00 +1176,-148.80,57.60,1.00,0.00,1.00 +1177,-139.20,62.40,1.00,0.00,1.00 +1178,-134.40,67.20,1.00,0.00,1.00 +1179,-120.00,67.20,1.00,0.00,1.00 +1180,-110.40,72.00,1.00,0.00,1.00 +1181,-96.00,72.00,1.00,0.00,1.00 +1182,-76.80,72.00,1.00,0.00,1.00 +1183,-62.40,72.00,1.00,0.00,1.00 +1184,-52.80,67.20,1.00,0.00,1.00 +1185,-43.20,62.40,1.00,0.00,1.00 +1186,-38.40,62.40,1.00,0.00,1.00 +1187,-28.80,57.60,1.00,0.00,1.00 +1188,-24.00,52.80,1.00,0.00,1.00 +1189,-24.00,48.00,1.00,0.00,1.00 +1190,-19.20,43.20,1.00,0.00,1.00 +1191,-14.40,38.40,1.00,0.00,1.00 +1192,-14.40,38.40,1.00,0.00,1.00 +1193,-9.60,33.60,1.00,0.00,1.00 +1194,-9.60,28.80,1.00,0.00,1.00 +1195,-9.60,24.00,1.00,0.00,1.00 +1196,-4.80,19.20,1.00,0.00,1.00 +1197,-4.80,14.40,1.00,0.00,1.00 +1198,-4.80,9.60,1.00,0.00,1.00 +1199,-0.00,4.80,1.00,0.00,1.00 +1200,0.00,0.00,1.00,0.00,1.00 +1201,0.00,-4.80,1.00,0.00,1.00 +1202,0.00,-9.60,1.00,0.00,1.00 +1203,4.80,-14.40,1.00,0.00,1.00 +1204,4.80,-19.20,1.00,0.00,1.00 +1205,4.80,-24.00,1.00,0.00,1.00 +1206,4.80,-28.80,1.00,0.00,1.00 +1207,9.60,-33.60,1.00,0.00,1.00 +1208,9.60,-38.40,1.00,0.00,1.00 +1209,14.40,-43.20,1.00,0.00,1.00 +1210,14.40,-48.00,1.00,0.00,1.00 +1211,14.40,-52.80,1.00,0.00,1.00 +1212,19.20,-57.60,1.00,0.00,1.00 +1213,24.00,-57.60,1.00,0.00,1.00 +1214,28.80,-62.40,1.00,0.00,1.00 +1215,33.60,-67.20,1.00,0.00,1.00 +1216,43.20,-72.00,1.00,0.00,1.00 +1217,57.60,-72.00,1.00,0.00,1.00 +1218,76.80,-76.80,1.00,0.00,1.00 +1219,96.00,-76.80,1.00,0.00,1.00 +1220,115.20,-76.80,1.00,0.00,1.00 +1221,129.60,-72.00,1.00,0.00,1.00 +1222,139.20,-72.00,1.00,0.00,1.00 +1223,148.80,-67.20,1.00,0.00,1.00 +1224,153.60,-62.40,1.00,0.00,1.00 +1225,158.40,-57.60,1.00,0.00,1.00 +1226,163.20,-52.80,1.00,0.00,1.00 +1227,163.20,-48.00,1.00,0.00,1.00 +1228,168.00,-43.20,1.00,0.00,1.00 +1229,168.00,-38.40,1.00,0.00,1.00 +1230,172.80,-33.60,1.00,0.00,1.00 +1231,172.80,-28.80,1.00,0.00,1.00 +1232,172.80,-24.00,1.00,0.00,1.00 +1233,172.80,-19.20,1.00,0.00,1.00 +1234,177.60,-14.40,1.00,0.00,1.00 +1235,177.60,-9.60,1.00,0.00,1.00 +1236,177.60,-4.80,1.00,0.00,1.00 +1237,177.60,-0.00,1.00,0.00,1.00 +1238,-177.60,0.00,1.00,0.00,1.00 +1239,-177.60,4.80,1.00,0.00,1.00 +1240,-177.60,9.60,1.00,0.00,1.00 +1241,-177.60,14.40,1.00,0.00,1.00 +1242,-172.80,19.20,1.00,0.00,1.00 +1243,-172.80,24.00,1.00,0.00,1.00 +1244,-172.80,28.80,1.00,0.00,1.00 +1245,-172.80,33.60,1.00,0.00,1.00 +1246,-168.00,38.40,1.00,0.00,1.00 +1247,-168.00,43.20,1.00,0.00,1.00 +1248,-163.20,48.00,1.00,0.00,1.00 +1249,-163.20,52.80,1.00,0.00,1.00 +1250,-158.40,57.60,1.00,0.00,1.00 +1251,-153.60,62.40,1.00,0.00,1.00 +1252,-148.80,67.20,1.00,0.00,1.00 +1253,-139.20,72.00,1.00,0.00,1.00 +1254,-129.60,72.00,1.00,0.00,1.00 +1255,-115.20,76.80,1.00,0.00,1.00 +1256,-96.00,76.80,1.00,0.00,1.00 +1257,-76.80,76.80,1.00,0.00,1.00 +1258,-57.60,72.00,1.00,0.00,1.00 +1259,-43.20,72.00,1.00,0.00,1.00 +1260,-33.60,67.20,1.00,0.00,1.00 +1261,-28.80,62.40,1.00,0.00,1.00 +1262,-24.00,57.60,1.00,0.00,1.00 +1263,-19.20,57.60,1.00,0.00,1.00 +1264,-14.40,52.80,1.00,0.00,1.00 +1265,-14.40,48.00,1.00,0.00,1.00 +1266,-14.40,43.20,1.00,0.00,1.00 +1267,-9.60,38.40,1.00,0.00,1.00 +1268,-9.60,33.60,1.00,0.00,1.00 +1269,-4.80,28.80,1.00,0.00,1.00 +1270,-4.80,24.00,1.00,0.00,1.00 +1271,-4.80,19.20,1.00,0.00,1.00 +1272,-4.80,14.40,1.00,0.00,1.00 +1273,-0.00,9.60,1.00,0.00,1.00 +1274,-0.00,4.80,1.00,0.00,1.00 +1275,0.00,0.00,1.00,0.00,1.00 +1276,0.00,-4.80,1.00,0.00,1.00 +1277,0.00,-9.60,1.00,0.00,1.00 +1278,0.00,-14.40,1.00,0.00,1.00 +1279,4.80,-19.20,1.00,0.00,1.00 +1280,4.80,-24.00,1.00,0.00,1.00 +1281,4.80,-28.80,1.00,0.00,1.00 +1282,4.80,-33.60,1.00,0.00,1.00 +1283,4.80,-38.40,1.00,0.00,1.00 +1284,9.60,-43.20,1.00,0.00,1.00 +1285,9.60,-48.00,1.00,0.00,1.00 +1286,9.60,-52.80,1.00,0.00,1.00 +1287,14.40,-57.60,1.00,0.00,1.00 +1288,14.40,-62.40,1.00,0.00,1.00 +1289,19.20,-67.20,1.00,0.00,1.00 +1290,24.00,-72.00,1.00,0.00,1.00 +1291,33.60,-72.00,1.00,0.00,1.00 +1292,43.20,-76.80,1.00,0.00,1.00 +1293,67.20,-81.60,1.00,0.00,1.00 +1294,96.00,-81.60,1.00,0.00,1.00 +1295,124.80,-81.60,1.00,0.00,1.00 +1296,144.00,-76.80,1.00,0.00,1.00 +1297,153.60,-72.00,1.00,0.00,1.00 +1298,158.40,-67.20,1.00,0.00,1.00 +1299,163.20,-62.40,1.00,0.00,1.00 +1300,168.00,-57.60,1.00,0.00,1.00 +1301,168.00,-52.80,1.00,0.00,1.00 +1302,168.00,-48.00,1.00,0.00,1.00 +1303,172.80,-43.20,1.00,0.00,1.00 +1304,172.80,-38.40,1.00,0.00,1.00 +1305,172.80,-33.60,1.00,0.00,1.00 +1306,172.80,-28.80,1.00,0.00,1.00 +1307,177.60,-24.00,1.00,0.00,1.00 +1308,177.60,-19.20,1.00,0.00,1.00 +1309,177.60,-14.40,1.00,0.00,1.00 +1310,177.60,-9.60,1.00,0.00,1.00 +1311,177.60,-4.80,1.00,0.00,1.00 +1312,177.60,-0.00,1.00,0.00,1.00 +1313,-177.60,0.00,1.00,0.00,1.00 +1314,-177.60,4.80,1.00,0.00,1.00 +1315,-177.60,9.60,1.00,0.00,1.00 +1316,-177.60,14.40,1.00,0.00,1.00 +1317,-177.60,19.20,1.00,0.00,1.00 +1318,-177.60,24.00,1.00,0.00,1.00 +1319,-172.80,28.80,1.00,0.00,1.00 +1320,-172.80,33.60,1.00,0.00,1.00 +1321,-172.80,38.40,1.00,0.00,1.00 +1322,-172.80,43.20,1.00,0.00,1.00 +1323,-168.00,48.00,1.00,0.00,1.00 +1324,-168.00,52.80,1.00,0.00,1.00 +1325,-168.00,57.60,1.00,0.00,1.00 +1326,-163.20,62.40,1.00,0.00,1.00 +1327,-158.40,67.20,1.00,0.00,1.00 +1328,-153.60,72.00,1.00,0.00,1.00 +1329,-144.00,76.80,1.00,0.00,1.00 +1330,-124.80,81.60,1.00,0.00,1.00 +1331,-96.00,81.60,1.00,0.00,1.00 +1332,-67.20,81.60,1.00,0.00,1.00 +1333,-43.20,76.80,1.00,0.00,1.00 +1334,-33.60,72.00,1.00,0.00,1.00 +1335,-24.00,72.00,1.00,0.00,1.00 +1336,-19.20,67.20,1.00,0.00,1.00 +1337,-14.40,62.40,1.00,0.00,1.00 +1338,-14.40,57.60,1.00,0.00,1.00 +1339,-9.60,52.80,1.00,0.00,1.00 +1340,-9.60,48.00,1.00,0.00,1.00 +1341,-9.60,43.20,1.00,0.00,1.00 +1342,-4.80,38.40,1.00,0.00,1.00 +1343,-4.80,33.60,1.00,0.00,1.00 +1344,-4.80,28.80,1.00,0.00,1.00 +1345,-4.80,24.00,1.00,0.00,1.00 +1346,-4.80,19.20,1.00,0.00,1.00 +1347,-0.00,14.40,1.00,0.00,1.00 +1348,-0.00,9.60,1.00,0.00,1.00 +1349,-0.00,4.80,1.00,0.00,1.00 +1350,0.00,0.00,1.00,0.00,1.00 +1351,0.00,-4.80,1.00,0.00,1.00 +1352,0.00,-9.60,1.00,0.00,1.00 +1353,0.00,-14.40,1.00,0.00,1.00 +1354,0.00,-19.20,1.00,0.00,1.00 +1355,0.00,-24.00,1.00,0.00,1.00 +1356,0.00,-28.80,1.00,0.00,1.00 +1357,0.00,-33.60,1.00,0.00,1.00 +1358,4.80,-38.40,1.00,0.00,1.00 +1359,4.80,-43.20,1.00,0.00,1.00 +1360,4.80,-48.00,1.00,0.00,1.00 +1361,4.80,-52.80,1.00,0.00,1.00 +1362,4.80,-57.60,1.00,0.00,1.00 +1363,4.80,-62.40,1.00,0.00,1.00 +1364,9.60,-67.20,1.00,0.00,1.00 +1365,9.60,-72.00,1.00,0.00,1.00 +1366,14.40,-76.80,1.00,0.00,1.00 +1367,24.00,-81.60,1.00,0.00,1.00 +1368,43.20,-86.40,1.00,0.00,1.00 +1369,110.40,-86.40,1.00,0.00,1.00 +1370,148.80,-81.60,1.00,0.00,1.00 +1371,163.20,-76.80,1.00,0.00,1.00 +1372,168.00,-72.00,1.00,0.00,1.00 +1373,172.80,-67.20,1.00,0.00,1.00 +1374,172.80,-62.40,1.00,0.00,1.00 +1375,172.80,-57.60,1.00,0.00,1.00 +1376,172.80,-52.80,1.00,0.00,1.00 +1377,177.60,-48.00,1.00,0.00,1.00 +1378,177.60,-43.20,1.00,0.00,1.00 +1379,177.60,-38.40,1.00,0.00,1.00 +1380,177.60,-33.60,1.00,0.00,1.00 +1381,177.60,-28.80,1.00,0.00,1.00 +1382,177.60,-24.00,1.00,0.00,1.00 +1383,177.60,-19.20,1.00,0.00,1.00 +1384,177.60,-14.40,1.00,0.00,1.00 +1385,177.60,-9.60,1.00,0.00,1.00 +1386,177.60,-4.80,1.00,0.00,1.00 +1387,177.60,-0.00,1.00,0.00,1.00 +1388,-177.60,0.00,1.00,0.00,1.00 +1389,-177.60,4.80,1.00,0.00,1.00 +1390,-177.60,9.60,1.00,0.00,1.00 +1391,-177.60,14.40,1.00,0.00,1.00 +1392,-177.60,19.20,1.00,0.00,1.00 +1393,-177.60,24.00,1.00,0.00,1.00 +1394,-177.60,28.80,1.00,0.00,1.00 +1395,-177.60,33.60,1.00,0.00,1.00 +1396,-177.60,38.40,1.00,0.00,1.00 +1397,-177.60,43.20,1.00,0.00,1.00 +1398,-177.60,48.00,1.00,0.00,1.00 +1399,-172.80,52.80,1.00,0.00,1.00 +1400,-172.80,57.60,1.00,0.00,1.00 +1401,-172.80,62.40,1.00,0.00,1.00 +1402,-172.80,67.20,1.00,0.00,1.00 +1403,-168.00,72.00,1.00,0.00,1.00 +1404,-163.20,76.80,1.00,0.00,1.00 +1405,-148.80,81.60,1.00,0.00,1.00 +1406,-110.40,86.40,1.00,0.00,1.00 +1407,-43.20,86.40,1.00,0.00,1.00 +1408,-24.00,81.60,1.00,0.00,1.00 +1409,-14.40,76.80,1.00,0.00,1.00 +1410,-9.60,72.00,1.00,0.00,1.00 +1411,-9.60,67.20,1.00,0.00,1.00 +1412,-4.80,62.40,1.00,0.00,1.00 +1413,-4.80,57.60,1.00,0.00,1.00 +1414,-4.80,52.80,1.00,0.00,1.00 +1415,-4.80,48.00,1.00,0.00,1.00 +1416,-4.80,43.20,1.00,0.00,1.00 +1417,-4.80,38.40,1.00,0.00,1.00 +1418,-0.00,33.60,1.00,0.00,1.00 +1419,-0.00,28.80,1.00,0.00,1.00 +1420,-0.00,24.00,1.00,0.00,1.00 +1421,-0.00,19.20,1.00,0.00,1.00 +1422,-0.00,14.40,1.00,0.00,1.00 +1423,-0.00,9.60,1.00,0.00,1.00 +1424,-0.00,4.80,1.00,0.00,1.00 +1425,-0.00,0.00,1.00,0.00,1.00 +1426,-0.00,-4.80,1.00,0.00,1.00 +1427,-0.00,-9.60,1.00,0.00,1.00 +1428,-0.00,-14.40,1.00,0.00,1.00 +1429,-0.00,-19.20,1.00,0.00,1.00 +1430,-0.00,-24.00,1.00,0.00,1.00 +1431,-0.00,-28.80,1.00,0.00,1.00 +1432,-0.00,-33.60,1.00,0.00,1.00 +1433,-0.00,-38.40,1.00,0.00,1.00 +1434,-0.00,-43.20,1.00,0.00,1.00 +1435,-0.00,-48.00,1.00,0.00,1.00 +1436,-0.00,-52.80,1.00,0.00,1.00 +1437,-0.00,-57.60,1.00,0.00,1.00 +1438,-0.00,-62.40,1.00,0.00,1.00 +1439,-4.80,-67.20,1.00,0.00,1.00 +1440,-4.80,-72.00,1.00,0.00,1.00 +1441,-4.80,-76.80,1.00,0.00,1.00 +1442,-9.60,-81.60,1.00,0.00,1.00 +1443,-19.20,-86.40,1.00,0.00,1.00 +1444,-134.40,-86.40,1.00,0.00,1.00 +1445,-168.00,-81.60,1.00,0.00,1.00 +1446,-172.80,-76.80,1.00,0.00,1.00 +1447,-177.60,-72.00,1.00,0.00,1.00 +1448,-177.60,-67.20,1.00,0.00,1.00 +1449,-177.60,-62.40,1.00,0.00,1.00 +1450,-177.60,-57.60,1.00,0.00,1.00 +1451,-177.60,-52.80,1.00,0.00,1.00 +1452,-177.60,-48.00,1.00,0.00,1.00 +1453,-177.60,-43.20,1.00,0.00,1.00 +1454,-177.60,-38.40,1.00,0.00,1.00 +1455,-177.60,-33.60,1.00,0.00,1.00 +1456,-177.60,-28.80,1.00,0.00,1.00 +1457,-177.60,-24.00,1.00,0.00,1.00 +1458,-177.60,-19.20,1.00,0.00,1.00 +1459,-177.60,-14.40,1.00,0.00,1.00 +1460,-177.60,-9.60,1.00,0.00,1.00 +1461,-177.60,-4.80,1.00,0.00,1.00 +1462,-177.60,-0.00,1.00,0.00,1.00 +1463,177.60,0.00,1.00,0.00,1.00 +1464,177.60,4.80,1.00,0.00,1.00 +1465,177.60,9.60,1.00,0.00,1.00 +1466,177.60,14.40,1.00,0.00,1.00 +1467,177.60,19.20,1.00,0.00,1.00 +1468,177.60,24.00,1.00,0.00,1.00 +1469,177.60,28.80,1.00,0.00,1.00 +1470,177.60,33.60,1.00,0.00,1.00 +1471,177.60,38.40,1.00,0.00,1.00 +1472,177.60,43.20,1.00,0.00,1.00 +1473,177.60,48.00,1.00,0.00,1.00 +1474,177.60,52.80,1.00,0.00,1.00 +1475,177.60,57.60,1.00,0.00,1.00 +1476,177.60,62.40,1.00,0.00,1.00 +1477,177.60,67.20,1.00,0.00,1.00 +1478,177.60,72.00,1.00,0.00,1.00 +1479,172.80,76.80,1.00,0.00,1.00 +1480,168.00,81.60,1.00,0.00,1.00 +1481,134.40,86.40,1.00,0.00,1.00 +1482,19.20,86.40,1.00,0.00,1.00 +1483,9.60,81.60,1.00,0.00,1.00 +1484,4.80,76.80,1.00,0.00,1.00 +1485,4.80,72.00,1.00,0.00,1.00 +1486,4.80,67.20,1.00,0.00,1.00 +1487,0.00,62.40,1.00,0.00,1.00 +1488,0.00,57.60,1.00,0.00,1.00 +1489,0.00,52.80,1.00,0.00,1.00 +1490,0.00,48.00,1.00,0.00,1.00 +1491,0.00,43.20,1.00,0.00,1.00 +1492,0.00,38.40,1.00,0.00,1.00 +1493,0.00,33.60,1.00,0.00,1.00 +1494,0.00,28.80,1.00,0.00,1.00 +1495,0.00,24.00,1.00,0.00,1.00 +1496,0.00,19.20,1.00,0.00,1.00 +1497,0.00,14.40,1.00,0.00,1.00 +1498,0.00,9.60,1.00,0.00,1.00 +1499,0.00,4.80,1.00,0.00,1.00 diff --git a/scripts/testv/stvISM2.csv b/scripts/testv/stvISM2.csv new file mode 100644 index 0000000000..9fd14fdf63 --- /dev/null +++ b/scripts/testv/stvISM2.csv @@ -0,0 +1,1500 @@ +0,0.00,4.80,1.00,0.00,1.00 +1,0.00,9.60,1.00,0.00,1.00 +2,0.00,14.40,1.00,0.00,1.00 +3,0.00,19.20,1.00,0.00,1.00 +4,0.00,24.00,1.00,0.00,1.00 +5,0.00,28.80,1.00,0.00,1.00 +6,0.00,33.60,1.00,0.00,1.00 +7,0.00,38.40,1.00,0.00,1.00 +8,0.00,43.20,1.00,0.00,1.00 +9,0.00,48.00,1.00,0.00,1.00 +10,0.00,52.80,1.00,0.00,1.00 +11,0.00,57.60,1.00,0.00,1.00 +12,0.00,62.40,1.00,0.00,1.00 +13,4.80,67.20,1.00,0.00,1.00 +14,4.80,72.00,1.00,0.00,1.00 +15,4.80,76.80,1.00,0.00,1.00 +16,9.60,81.60,1.00,0.00,1.00 +17,19.20,86.40,1.00,0.00,1.00 +18,134.40,86.40,1.00,0.00,1.00 +19,168.00,81.60,1.00,0.00,1.00 +20,172.80,76.80,1.00,0.00,1.00 +21,177.60,72.00,1.00,0.00,1.00 +22,177.60,67.20,1.00,0.00,1.00 +23,177.60,62.40,1.00,0.00,1.00 +24,177.60,57.60,1.00,0.00,1.00 +25,177.60,52.80,1.00,0.00,1.00 +26,177.60,48.00,1.00,0.00,1.00 +27,177.60,43.20,1.00,0.00,1.00 +28,177.60,38.40,1.00,0.00,1.00 +29,177.60,33.60,1.00,0.00,1.00 +30,177.60,28.80,1.00,0.00,1.00 +31,177.60,24.00,1.00,0.00,1.00 +32,177.60,19.20,1.00,0.00,1.00 +33,177.60,14.40,1.00,0.00,1.00 +34,177.60,9.60,1.00,0.00,1.00 +35,177.60,4.80,1.00,0.00,1.00 +36,177.60,0.00,1.00,0.00,1.00 +37,-177.60,-0.00,1.00,0.00,1.00 +38,-177.60,-4.80,1.00,0.00,1.00 +39,-177.60,-9.60,1.00,0.00,1.00 +40,-177.60,-14.40,1.00,0.00,1.00 +41,-177.60,-19.20,1.00,0.00,1.00 +42,-177.60,-24.00,1.00,0.00,1.00 +43,-177.60,-28.80,1.00,0.00,1.00 +44,-177.60,-33.60,1.00,0.00,1.00 +45,-177.60,-38.40,1.00,0.00,1.00 +46,-177.60,-43.20,1.00,0.00,1.00 +47,-177.60,-48.00,1.00,0.00,1.00 +48,-177.60,-52.80,1.00,0.00,1.00 +49,-177.60,-57.60,1.00,0.00,1.00 +50,-177.60,-62.40,1.00,0.00,1.00 +51,-177.60,-67.20,1.00,0.00,1.00 +52,-177.60,-72.00,1.00,0.00,1.00 +53,-172.80,-76.80,1.00,0.00,1.00 +54,-168.00,-81.60,1.00,0.00,1.00 +55,-134.40,-86.40,1.00,0.00,1.00 +56,-19.20,-86.40,1.00,0.00,1.00 +57,-9.60,-81.60,1.00,0.00,1.00 +58,-4.80,-76.80,1.00,0.00,1.00 +59,-4.80,-72.00,1.00,0.00,1.00 +60,-4.80,-67.20,1.00,0.00,1.00 +61,-0.00,-62.40,1.00,0.00,1.00 +62,-0.00,-57.60,1.00,0.00,1.00 +63,-0.00,-52.80,1.00,0.00,1.00 +64,-0.00,-48.00,1.00,0.00,1.00 +65,-0.00,-43.20,1.00,0.00,1.00 +66,-0.00,-38.40,1.00,0.00,1.00 +67,-0.00,-33.60,1.00,0.00,1.00 +68,-0.00,-28.80,1.00,0.00,1.00 +69,-0.00,-24.00,1.00,0.00,1.00 +70,-0.00,-19.20,1.00,0.00,1.00 +71,-0.00,-14.40,1.00,0.00,1.00 +72,-0.00,-9.60,1.00,0.00,1.00 +73,-0.00,-4.80,1.00,0.00,1.00 +74,-0.00,0.00,1.00,0.00,1.00 +75,-0.00,4.80,1.00,0.00,1.00 +76,-0.00,9.60,1.00,0.00,1.00 +77,-0.00,14.40,1.00,0.00,1.00 +78,-0.00,19.20,1.00,0.00,1.00 +79,-0.00,24.00,1.00,0.00,1.00 +80,-0.00,28.80,1.00,0.00,1.00 +81,-0.00,33.60,1.00,0.00,1.00 +82,-4.80,38.40,1.00,0.00,1.00 +83,-4.80,43.20,1.00,0.00,1.00 +84,-4.80,48.00,1.00,0.00,1.00 +85,-4.80,52.80,1.00,0.00,1.00 +86,-4.80,57.60,1.00,0.00,1.00 +87,-4.80,62.40,1.00,0.00,1.00 +88,-9.60,67.20,1.00,0.00,1.00 +89,-9.60,72.00,1.00,0.00,1.00 +90,-14.40,76.80,1.00,0.00,1.00 +91,-24.00,81.60,1.00,0.00,1.00 +92,-43.20,86.40,1.00,0.00,1.00 +93,-110.40,86.40,1.00,0.00,1.00 +94,-148.80,81.60,1.00,0.00,1.00 +95,-163.20,76.80,1.00,0.00,1.00 +96,-168.00,72.00,1.00,0.00,1.00 +97,-172.80,67.20,1.00,0.00,1.00 +98,-172.80,62.40,1.00,0.00,1.00 +99,-172.80,57.60,1.00,0.00,1.00 +100,-172.80,52.80,1.00,0.00,1.00 +101,-177.60,48.00,1.00,0.00,1.00 +102,-177.60,43.20,1.00,0.00,1.00 +103,-177.60,38.40,1.00,0.00,1.00 +104,-177.60,33.60,1.00,0.00,1.00 +105,-177.60,28.80,1.00,0.00,1.00 +106,-177.60,24.00,1.00,0.00,1.00 +107,-177.60,19.20,1.00,0.00,1.00 +108,-177.60,14.40,1.00,0.00,1.00 +109,-177.60,9.60,1.00,0.00,1.00 +110,-177.60,4.80,1.00,0.00,1.00 +111,-177.60,0.00,1.00,0.00,1.00 +112,177.60,-0.00,1.00,0.00,1.00 +113,177.60,-4.80,1.00,0.00,1.00 +114,177.60,-9.60,1.00,0.00,1.00 +115,177.60,-14.40,1.00,0.00,1.00 +116,177.60,-19.20,1.00,0.00,1.00 +117,177.60,-24.00,1.00,0.00,1.00 +118,177.60,-28.80,1.00,0.00,1.00 +119,177.60,-33.60,1.00,0.00,1.00 +120,177.60,-38.40,1.00,0.00,1.00 +121,177.60,-43.20,1.00,0.00,1.00 +122,177.60,-48.00,1.00,0.00,1.00 +123,172.80,-52.80,1.00,0.00,1.00 +124,172.80,-57.60,1.00,0.00,1.00 +125,172.80,-62.40,1.00,0.00,1.00 +126,172.80,-67.20,1.00,0.00,1.00 +127,168.00,-72.00,1.00,0.00,1.00 +128,163.20,-76.80,1.00,0.00,1.00 +129,148.80,-81.60,1.00,0.00,1.00 +130,110.40,-86.40,1.00,0.00,1.00 +131,43.20,-86.40,1.00,0.00,1.00 +132,24.00,-81.60,1.00,0.00,1.00 +133,14.40,-76.80,1.00,0.00,1.00 +134,9.60,-72.00,1.00,0.00,1.00 +135,9.60,-67.20,1.00,0.00,1.00 +136,4.80,-62.40,1.00,0.00,1.00 +137,4.80,-57.60,1.00,0.00,1.00 +138,4.80,-52.80,1.00,0.00,1.00 +139,4.80,-48.00,1.00,0.00,1.00 +140,4.80,-43.20,1.00,0.00,1.00 +141,4.80,-38.40,1.00,0.00,1.00 +142,0.00,-33.60,1.00,0.00,1.00 +143,0.00,-28.80,1.00,0.00,1.00 +144,0.00,-24.00,1.00,0.00,1.00 +145,0.00,-19.20,1.00,0.00,1.00 +146,0.00,-14.40,1.00,0.00,1.00 +147,0.00,-9.60,1.00,0.00,1.00 +148,0.00,-4.80,1.00,0.00,1.00 +149,0.00,0.00,1.00,0.00,1.00 +150,-0.00,4.80,1.00,0.00,1.00 +151,-0.00,9.60,1.00,0.00,1.00 +152,-0.00,14.40,1.00,0.00,1.00 +153,-4.80,19.20,1.00,0.00,1.00 +154,-4.80,24.00,1.00,0.00,1.00 +155,-4.80,28.80,1.00,0.00,1.00 +156,-4.80,33.60,1.00,0.00,1.00 +157,-4.80,38.40,1.00,0.00,1.00 +158,-9.60,43.20,1.00,0.00,1.00 +159,-9.60,48.00,1.00,0.00,1.00 +160,-9.60,52.80,1.00,0.00,1.00 +161,-14.40,57.60,1.00,0.00,1.00 +162,-14.40,62.40,1.00,0.00,1.00 +163,-19.20,67.20,1.00,0.00,1.00 +164,-24.00,72.00,1.00,0.00,1.00 +165,-33.60,72.00,1.00,0.00,1.00 +166,-43.20,76.80,1.00,0.00,1.00 +167,-67.20,81.60,1.00,0.00,1.00 +168,-96.00,81.60,1.00,0.00,1.00 +169,-124.80,81.60,1.00,0.00,1.00 +170,-144.00,76.80,1.00,0.00,1.00 +171,-153.60,72.00,1.00,0.00,1.00 +172,-158.40,67.20,1.00,0.00,1.00 +173,-163.20,62.40,1.00,0.00,1.00 +174,-168.00,57.60,1.00,0.00,1.00 +175,-168.00,52.80,1.00,0.00,1.00 +176,-168.00,48.00,1.00,0.00,1.00 +177,-172.80,43.20,1.00,0.00,1.00 +178,-172.80,38.40,1.00,0.00,1.00 +179,-172.80,33.60,1.00,0.00,1.00 +180,-172.80,28.80,1.00,0.00,1.00 +181,-177.60,24.00,1.00,0.00,1.00 +182,-177.60,19.20,1.00,0.00,1.00 +183,-177.60,14.40,1.00,0.00,1.00 +184,-177.60,9.60,1.00,0.00,1.00 +185,-177.60,4.80,1.00,0.00,1.00 +186,-177.60,0.00,1.00,0.00,1.00 +187,177.60,-0.00,1.00,0.00,1.00 +188,177.60,-4.80,1.00,0.00,1.00 +189,177.60,-9.60,1.00,0.00,1.00 +190,177.60,-14.40,1.00,0.00,1.00 +191,177.60,-19.20,1.00,0.00,1.00 +192,177.60,-24.00,1.00,0.00,1.00 +193,172.80,-28.80,1.00,0.00,1.00 +194,172.80,-33.60,1.00,0.00,1.00 +195,172.80,-38.40,1.00,0.00,1.00 +196,172.80,-43.20,1.00,0.00,1.00 +197,168.00,-48.00,1.00,0.00,1.00 +198,168.00,-52.80,1.00,0.00,1.00 +199,168.00,-57.60,1.00,0.00,1.00 +200,163.20,-62.40,1.00,0.00,1.00 +201,158.40,-67.20,1.00,0.00,1.00 +202,153.60,-72.00,1.00,0.00,1.00 +203,144.00,-76.80,1.00,0.00,1.00 +204,124.80,-81.60,1.00,0.00,1.00 +205,96.00,-81.60,1.00,0.00,1.00 +206,67.20,-81.60,1.00,0.00,1.00 +207,43.20,-76.80,1.00,0.00,1.00 +208,33.60,-72.00,1.00,0.00,1.00 +209,24.00,-72.00,1.00,0.00,1.00 +210,19.20,-67.20,1.00,0.00,1.00 +211,14.40,-62.40,1.00,0.00,1.00 +212,14.40,-57.60,1.00,0.00,1.00 +213,9.60,-52.80,1.00,0.00,1.00 +214,9.60,-48.00,1.00,0.00,1.00 +215,9.60,-43.20,1.00,0.00,1.00 +216,4.80,-38.40,1.00,0.00,1.00 +217,4.80,-33.60,1.00,0.00,1.00 +218,4.80,-28.80,1.00,0.00,1.00 +219,4.80,-24.00,1.00,0.00,1.00 +220,4.80,-19.20,1.00,0.00,1.00 +221,0.00,-14.40,1.00,0.00,1.00 +222,0.00,-9.60,1.00,0.00,1.00 +223,0.00,-4.80,1.00,0.00,1.00 +224,0.00,0.00,1.00,0.00,1.00 +225,-0.00,4.80,1.00,0.00,1.00 +226,-0.00,9.60,1.00,0.00,1.00 +227,-4.80,14.40,1.00,0.00,1.00 +228,-4.80,19.20,1.00,0.00,1.00 +229,-4.80,24.00,1.00,0.00,1.00 +230,-4.80,28.80,1.00,0.00,1.00 +231,-9.60,33.60,1.00,0.00,1.00 +232,-9.60,38.40,1.00,0.00,1.00 +233,-14.40,43.20,1.00,0.00,1.00 +234,-14.40,48.00,1.00,0.00,1.00 +235,-14.40,52.80,1.00,0.00,1.00 +236,-19.20,57.60,1.00,0.00,1.00 +237,-24.00,57.60,1.00,0.00,1.00 +238,-28.80,62.40,1.00,0.00,1.00 +239,-33.60,67.20,1.00,0.00,1.00 +240,-43.20,72.00,1.00,0.00,1.00 +241,-57.60,72.00,1.00,0.00,1.00 +242,-76.80,76.80,1.00,0.00,1.00 +243,-96.00,76.80,1.00,0.00,1.00 +244,-115.20,76.80,1.00,0.00,1.00 +245,-129.60,72.00,1.00,0.00,1.00 +246,-139.20,72.00,1.00,0.00,1.00 +247,-148.80,67.20,1.00,0.00,1.00 +248,-153.60,62.40,1.00,0.00,1.00 +249,-158.40,57.60,1.00,0.00,1.00 +250,-163.20,52.80,1.00,0.00,1.00 +251,-163.20,48.00,1.00,0.00,1.00 +252,-168.00,43.20,1.00,0.00,1.00 +253,-168.00,38.40,1.00,0.00,1.00 +254,-172.80,33.60,1.00,0.00,1.00 +255,-172.80,28.80,1.00,0.00,1.00 +256,-172.80,24.00,1.00,0.00,1.00 +257,-172.80,19.20,1.00,0.00,1.00 +258,-177.60,14.40,1.00,0.00,1.00 +259,-177.60,9.60,1.00,0.00,1.00 +260,-177.60,4.80,1.00,0.00,1.00 +261,-177.60,0.00,1.00,0.00,1.00 +262,177.60,-0.00,1.00,0.00,1.00 +263,177.60,-4.80,1.00,0.00,1.00 +264,177.60,-9.60,1.00,0.00,1.00 +265,177.60,-14.40,1.00,0.00,1.00 +266,172.80,-19.20,1.00,0.00,1.00 +267,172.80,-24.00,1.00,0.00,1.00 +268,172.80,-28.80,1.00,0.00,1.00 +269,172.80,-33.60,1.00,0.00,1.00 +270,168.00,-38.40,1.00,0.00,1.00 +271,168.00,-43.20,1.00,0.00,1.00 +272,163.20,-48.00,1.00,0.00,1.00 +273,163.20,-52.80,1.00,0.00,1.00 +274,158.40,-57.60,1.00,0.00,1.00 +275,153.60,-62.40,1.00,0.00,1.00 +276,148.80,-67.20,1.00,0.00,1.00 +277,139.20,-72.00,1.00,0.00,1.00 +278,129.60,-72.00,1.00,0.00,1.00 +279,115.20,-76.80,1.00,0.00,1.00 +280,96.00,-76.80,1.00,0.00,1.00 +281,76.80,-76.80,1.00,0.00,1.00 +282,57.60,-72.00,1.00,0.00,1.00 +283,43.20,-72.00,1.00,0.00,1.00 +284,33.60,-67.20,1.00,0.00,1.00 +285,28.80,-62.40,1.00,0.00,1.00 +286,24.00,-57.60,1.00,0.00,1.00 +287,19.20,-57.60,1.00,0.00,1.00 +288,14.40,-52.80,1.00,0.00,1.00 +289,14.40,-48.00,1.00,0.00,1.00 +290,14.40,-43.20,1.00,0.00,1.00 +291,9.60,-38.40,1.00,0.00,1.00 +292,9.60,-33.60,1.00,0.00,1.00 +293,4.80,-28.80,1.00,0.00,1.00 +294,4.80,-24.00,1.00,0.00,1.00 +295,4.80,-19.20,1.00,0.00,1.00 +296,4.80,-14.40,1.00,0.00,1.00 +297,0.00,-9.60,1.00,0.00,1.00 +298,0.00,-4.80,1.00,0.00,1.00 +299,0.00,0.00,1.00,0.00,1.00 +300,-0.00,4.80,1.00,0.00,1.00 +301,-4.80,9.60,1.00,0.00,1.00 +302,-4.80,14.40,1.00,0.00,1.00 +303,-4.80,19.20,1.00,0.00,1.00 +304,-9.60,24.00,1.00,0.00,1.00 +305,-9.60,28.80,1.00,0.00,1.00 +306,-9.60,33.60,1.00,0.00,1.00 +307,-14.40,38.40,1.00,0.00,1.00 +308,-14.40,38.40,1.00,0.00,1.00 +309,-19.20,43.20,1.00,0.00,1.00 +310,-24.00,48.00,1.00,0.00,1.00 +311,-24.00,52.80,1.00,0.00,1.00 +312,-28.80,57.60,1.00,0.00,1.00 +313,-38.40,62.40,1.00,0.00,1.00 +314,-43.20,62.40,1.00,0.00,1.00 +315,-52.80,67.20,1.00,0.00,1.00 +316,-62.40,72.00,1.00,0.00,1.00 +317,-76.80,72.00,1.00,0.00,1.00 +318,-96.00,72.00,1.00,0.00,1.00 +319,-110.40,72.00,1.00,0.00,1.00 +320,-120.00,67.20,1.00,0.00,1.00 +321,-134.40,67.20,1.00,0.00,1.00 +322,-139.20,62.40,1.00,0.00,1.00 +323,-148.80,57.60,1.00,0.00,1.00 +324,-153.60,57.60,1.00,0.00,1.00 +325,-158.40,52.80,1.00,0.00,1.00 +326,-158.40,48.00,1.00,0.00,1.00 +327,-163.20,43.20,1.00,0.00,1.00 +328,-163.20,38.40,1.00,0.00,1.00 +329,-168.00,33.60,1.00,0.00,1.00 +330,-168.00,28.80,1.00,0.00,1.00 +331,-172.80,24.00,1.00,0.00,1.00 +332,-172.80,19.20,1.00,0.00,1.00 +333,-172.80,14.40,1.00,0.00,1.00 +334,-177.60,9.60,1.00,0.00,1.00 +335,-177.60,4.80,1.00,0.00,1.00 +336,-177.60,0.00,1.00,0.00,1.00 +337,177.60,-0.00,1.00,0.00,1.00 +338,177.60,-4.80,1.00,0.00,1.00 +339,177.60,-9.60,1.00,0.00,1.00 +340,172.80,-14.40,1.00,0.00,1.00 +341,172.80,-19.20,1.00,0.00,1.00 +342,172.80,-24.00,1.00,0.00,1.00 +343,168.00,-28.80,1.00,0.00,1.00 +344,168.00,-33.60,1.00,0.00,1.00 +345,163.20,-38.40,1.00,0.00,1.00 +346,163.20,-43.20,1.00,0.00,1.00 +347,158.40,-48.00,1.00,0.00,1.00 +348,158.40,-52.80,1.00,0.00,1.00 +349,153.60,-57.60,1.00,0.00,1.00 +350,148.80,-57.60,1.00,0.00,1.00 +351,139.20,-62.40,1.00,0.00,1.00 +352,134.40,-67.20,1.00,0.00,1.00 +353,120.00,-67.20,1.00,0.00,1.00 +354,110.40,-72.00,1.00,0.00,1.00 +355,96.00,-72.00,1.00,0.00,1.00 +356,76.80,-72.00,1.00,0.00,1.00 +357,62.40,-72.00,1.00,0.00,1.00 +358,52.80,-67.20,1.00,0.00,1.00 +359,43.20,-62.40,1.00,0.00,1.00 +360,38.40,-62.40,1.00,0.00,1.00 +361,28.80,-57.60,1.00,0.00,1.00 +362,24.00,-52.80,1.00,0.00,1.00 +363,24.00,-48.00,1.00,0.00,1.00 +364,19.20,-43.20,1.00,0.00,1.00 +365,14.40,-38.40,1.00,0.00,1.00 +366,14.40,-38.40,1.00,0.00,1.00 +367,9.60,-33.60,1.00,0.00,1.00 +368,9.60,-28.80,1.00,0.00,1.00 +369,9.60,-24.00,1.00,0.00,1.00 +370,4.80,-19.20,1.00,0.00,1.00 +371,4.80,-14.40,1.00,0.00,1.00 +372,4.80,-9.60,1.00,0.00,1.00 +373,0.00,-4.80,1.00,0.00,1.00 +374,0.00,0.00,1.00,0.00,1.00 +375,-0.00,4.80,1.00,0.00,1.00 +376,-4.80,9.60,1.00,0.00,1.00 +377,-4.80,14.40,1.00,0.00,1.00 +378,-9.60,19.20,1.00,0.00,1.00 +379,-9.60,24.00,1.00,0.00,1.00 +380,-14.40,24.00,1.00,0.00,1.00 +381,-14.40,28.80,1.00,0.00,1.00 +382,-19.20,33.60,1.00,0.00,1.00 +383,-19.20,38.40,1.00,0.00,1.00 +384,-24.00,43.20,1.00,0.00,1.00 +385,-28.80,48.00,1.00,0.00,1.00 +386,-33.60,52.80,1.00,0.00,1.00 +387,-38.40,52.80,1.00,0.00,1.00 +388,-43.20,57.60,1.00,0.00,1.00 +389,-48.00,62.40,1.00,0.00,1.00 +390,-57.60,62.40,1.00,0.00,1.00 +391,-67.20,67.20,1.00,0.00,1.00 +392,-81.60,67.20,1.00,0.00,1.00 +393,-91.20,67.20,1.00,0.00,1.00 +394,-105.60,67.20,1.00,0.00,1.00 +395,-115.20,67.20,1.00,0.00,1.00 +396,-124.80,62.40,1.00,0.00,1.00 +397,-134.40,57.60,1.00,0.00,1.00 +398,-139.20,57.60,1.00,0.00,1.00 +399,-144.00,52.80,1.00,0.00,1.00 +400,-148.80,48.00,1.00,0.00,1.00 +401,-153.60,43.20,1.00,0.00,1.00 +402,-158.40,43.20,1.00,0.00,1.00 +403,-163.20,38.40,1.00,0.00,1.00 +404,-163.20,33.60,1.00,0.00,1.00 +405,-168.00,28.80,1.00,0.00,1.00 +406,-168.00,24.00,1.00,0.00,1.00 +407,-172.80,19.20,1.00,0.00,1.00 +408,-172.80,14.40,1.00,0.00,1.00 +409,-177.60,9.60,1.00,0.00,1.00 +410,-177.60,4.80,1.00,0.00,1.00 +411,-177.60,0.00,1.00,0.00,1.00 +412,177.60,-0.00,1.00,0.00,1.00 +413,177.60,-4.80,1.00,0.00,1.00 +414,177.60,-9.60,1.00,0.00,1.00 +415,172.80,-14.40,1.00,0.00,1.00 +416,172.80,-19.20,1.00,0.00,1.00 +417,168.00,-24.00,1.00,0.00,1.00 +418,168.00,-28.80,1.00,0.00,1.00 +419,163.20,-33.60,1.00,0.00,1.00 +420,163.20,-38.40,1.00,0.00,1.00 +421,158.40,-43.20,1.00,0.00,1.00 +422,153.60,-43.20,1.00,0.00,1.00 +423,148.80,-48.00,1.00,0.00,1.00 +424,144.00,-52.80,1.00,0.00,1.00 +425,139.20,-57.60,1.00,0.00,1.00 +426,134.40,-57.60,1.00,0.00,1.00 +427,124.80,-62.40,1.00,0.00,1.00 +428,115.20,-67.20,1.00,0.00,1.00 +429,105.60,-67.20,1.00,0.00,1.00 +430,91.20,-67.20,1.00,0.00,1.00 +431,81.60,-67.20,1.00,0.00,1.00 +432,67.20,-67.20,1.00,0.00,1.00 +433,57.60,-62.40,1.00,0.00,1.00 +434,48.00,-62.40,1.00,0.00,1.00 +435,43.20,-57.60,1.00,0.00,1.00 +436,38.40,-52.80,1.00,0.00,1.00 +437,33.60,-52.80,1.00,0.00,1.00 +438,28.80,-48.00,1.00,0.00,1.00 +439,24.00,-43.20,1.00,0.00,1.00 +440,19.20,-38.40,1.00,0.00,1.00 +441,19.20,-33.60,1.00,0.00,1.00 +442,14.40,-28.80,1.00,0.00,1.00 +443,14.40,-24.00,1.00,0.00,1.00 +444,9.60,-24.00,1.00,0.00,1.00 +445,9.60,-19.20,1.00,0.00,1.00 +446,4.80,-14.40,1.00,0.00,1.00 +447,4.80,-9.60,1.00,0.00,1.00 +448,0.00,-4.80,1.00,0.00,1.00 +449,0.00,0.00,1.00,0.00,1.00 +450,-0.00,4.80,1.00,0.00,1.00 +451,-4.80,9.60,1.00,0.00,1.00 +452,-4.80,14.40,1.00,0.00,1.00 +453,-9.60,19.20,1.00,0.00,1.00 +454,-9.60,19.20,1.00,0.00,1.00 +455,-14.40,24.00,1.00,0.00,1.00 +456,-19.20,28.80,1.00,0.00,1.00 +457,-19.20,33.60,1.00,0.00,1.00 +458,-24.00,38.40,1.00,0.00,1.00 +459,-28.80,43.20,1.00,0.00,1.00 +460,-33.60,43.20,1.00,0.00,1.00 +461,-38.40,48.00,1.00,0.00,1.00 +462,-43.20,52.80,1.00,0.00,1.00 +463,-48.00,52.80,1.00,0.00,1.00 +464,-52.80,57.60,1.00,0.00,1.00 +465,-62.40,57.60,1.00,0.00,1.00 +466,-72.00,62.40,1.00,0.00,1.00 +467,-81.60,62.40,1.00,0.00,1.00 +468,-91.20,62.40,1.00,0.00,1.00 +469,-100.80,62.40,1.00,0.00,1.00 +470,-110.40,62.40,1.00,0.00,1.00 +471,-120.00,57.60,1.00,0.00,1.00 +472,-129.60,57.60,1.00,0.00,1.00 +473,-134.40,52.80,1.00,0.00,1.00 +474,-139.20,48.00,1.00,0.00,1.00 +475,-144.00,48.00,1.00,0.00,1.00 +476,-148.80,43.20,1.00,0.00,1.00 +477,-153.60,38.40,1.00,0.00,1.00 +478,-158.40,33.60,1.00,0.00,1.00 +479,-163.20,33.60,1.00,0.00,1.00 +480,-163.20,28.80,1.00,0.00,1.00 +481,-168.00,24.00,1.00,0.00,1.00 +482,-168.00,19.20,1.00,0.00,1.00 +483,-172.80,14.40,1.00,0.00,1.00 +484,-172.80,9.60,1.00,0.00,1.00 +485,-177.60,4.80,1.00,0.00,1.00 +486,-177.60,0.00,1.00,0.00,1.00 +487,177.60,-0.00,1.00,0.00,1.00 +488,177.60,-4.80,1.00,0.00,1.00 +489,172.80,-9.60,1.00,0.00,1.00 +490,172.80,-14.40,1.00,0.00,1.00 +491,168.00,-19.20,1.00,0.00,1.00 +492,168.00,-24.00,1.00,0.00,1.00 +493,163.20,-28.80,1.00,0.00,1.00 +494,163.20,-33.60,1.00,0.00,1.00 +495,158.40,-33.60,1.00,0.00,1.00 +496,153.60,-38.40,1.00,0.00,1.00 +497,148.80,-43.20,1.00,0.00,1.00 +498,144.00,-48.00,1.00,0.00,1.00 +499,139.20,-48.00,1.00,0.00,1.00 +500,134.40,-52.80,1.00,0.00,1.00 +501,129.60,-57.60,1.00,0.00,1.00 +502,120.00,-57.60,1.00,0.00,1.00 +503,110.40,-62.40,1.00,0.00,1.00 +504,100.80,-62.40,1.00,0.00,1.00 +505,91.20,-62.40,1.00,0.00,1.00 +506,81.60,-62.40,1.00,0.00,1.00 +507,72.00,-62.40,1.00,0.00,1.00 +508,62.40,-57.60,1.00,0.00,1.00 +509,52.80,-57.60,1.00,0.00,1.00 +510,48.00,-52.80,1.00,0.00,1.00 +511,43.20,-52.80,1.00,0.00,1.00 +512,38.40,-48.00,1.00,0.00,1.00 +513,33.60,-43.20,1.00,0.00,1.00 +514,28.80,-43.20,1.00,0.00,1.00 +515,24.00,-38.40,1.00,0.00,1.00 +516,19.20,-33.60,1.00,0.00,1.00 +517,19.20,-28.80,1.00,0.00,1.00 +518,14.40,-24.00,1.00,0.00,1.00 +519,9.60,-19.20,1.00,0.00,1.00 +520,9.60,-19.20,1.00,0.00,1.00 +521,4.80,-14.40,1.00,0.00,1.00 +522,4.80,-9.60,1.00,0.00,1.00 +523,0.00,-4.80,1.00,0.00,1.00 +524,0.00,0.00,1.00,0.00,1.00 +525,-4.80,4.80,1.00,0.00,1.00 +526,-4.80,9.60,1.00,0.00,1.00 +527,-9.60,14.40,1.00,0.00,1.00 +528,-9.60,14.40,1.00,0.00,1.00 +529,-14.40,19.20,1.00,0.00,1.00 +530,-14.40,24.00,1.00,0.00,1.00 +531,-19.20,28.80,1.00,0.00,1.00 +532,-24.00,33.60,1.00,0.00,1.00 +533,-28.80,33.60,1.00,0.00,1.00 +534,-28.80,38.40,1.00,0.00,1.00 +535,-33.60,43.20,1.00,0.00,1.00 +536,-38.40,43.20,1.00,0.00,1.00 +537,-48.00,48.00,1.00,0.00,1.00 +538,-52.80,52.80,1.00,0.00,1.00 +539,-57.60,52.80,1.00,0.00,1.00 +540,-67.20,57.60,1.00,0.00,1.00 +541,-76.80,57.60,1.00,0.00,1.00 +542,-81.60,57.60,1.00,0.00,1.00 +543,-91.20,57.60,1.00,0.00,1.00 +544,-100.80,57.60,1.00,0.00,1.00 +545,-110.40,57.60,1.00,0.00,1.00 +546,-115.20,52.80,1.00,0.00,1.00 +547,-124.80,52.80,1.00,0.00,1.00 +548,-129.60,48.00,1.00,0.00,1.00 +549,-139.20,48.00,1.00,0.00,1.00 +550,-144.00,43.20,1.00,0.00,1.00 +551,-148.80,38.40,1.00,0.00,1.00 +552,-153.60,38.40,1.00,0.00,1.00 +553,-153.60,33.60,1.00,0.00,1.00 +554,-158.40,28.80,1.00,0.00,1.00 +555,-163.20,24.00,1.00,0.00,1.00 +556,-163.20,24.00,1.00,0.00,1.00 +557,-168.00,19.20,1.00,0.00,1.00 +558,-172.80,14.40,1.00,0.00,1.00 +559,-172.80,9.60,1.00,0.00,1.00 +560,-177.60,4.80,1.00,0.00,1.00 +561,-177.60,0.00,1.00,0.00,1.00 +562,177.60,-0.00,1.00,0.00,1.00 +563,177.60,-4.80,1.00,0.00,1.00 +564,172.80,-9.60,1.00,0.00,1.00 +565,172.80,-14.40,1.00,0.00,1.00 +566,168.00,-19.20,1.00,0.00,1.00 +567,163.20,-24.00,1.00,0.00,1.00 +568,163.20,-24.00,1.00,0.00,1.00 +569,158.40,-28.80,1.00,0.00,1.00 +570,153.60,-33.60,1.00,0.00,1.00 +571,153.60,-38.40,1.00,0.00,1.00 +572,148.80,-38.40,1.00,0.00,1.00 +573,144.00,-43.20,1.00,0.00,1.00 +574,139.20,-48.00,1.00,0.00,1.00 +575,129.60,-48.00,1.00,0.00,1.00 +576,124.80,-52.80,1.00,0.00,1.00 +577,115.20,-52.80,1.00,0.00,1.00 +578,110.40,-57.60,1.00,0.00,1.00 +579,100.80,-57.60,1.00,0.00,1.00 +580,91.20,-57.60,1.00,0.00,1.00 +581,81.60,-57.60,1.00,0.00,1.00 +582,76.80,-57.60,1.00,0.00,1.00 +583,67.20,-57.60,1.00,0.00,1.00 +584,57.60,-52.80,1.00,0.00,1.00 +585,52.80,-52.80,1.00,0.00,1.00 +586,48.00,-48.00,1.00,0.00,1.00 +587,38.40,-43.20,1.00,0.00,1.00 +588,33.60,-43.20,1.00,0.00,1.00 +589,28.80,-38.40,1.00,0.00,1.00 +590,28.80,-33.60,1.00,0.00,1.00 +591,24.00,-33.60,1.00,0.00,1.00 +592,19.20,-28.80,1.00,0.00,1.00 +593,14.40,-24.00,1.00,0.00,1.00 +594,14.40,-19.20,1.00,0.00,1.00 +595,9.60,-14.40,1.00,0.00,1.00 +596,9.60,-14.40,1.00,0.00,1.00 +597,4.80,-9.60,1.00,0.00,1.00 +598,4.80,-4.80,1.00,0.00,1.00 +599,0.00,0.00,1.00,0.00,1.00 +600,-4.80,4.80,1.00,0.00,1.00 +601,-4.80,9.60,1.00,0.00,1.00 +602,-9.60,9.60,1.00,0.00,1.00 +603,-9.60,14.40,1.00,0.00,1.00 +604,-14.40,19.20,1.00,0.00,1.00 +605,-19.20,24.00,1.00,0.00,1.00 +606,-24.00,24.00,1.00,0.00,1.00 +607,-24.00,28.80,1.00,0.00,1.00 +608,-28.80,33.60,1.00,0.00,1.00 +609,-33.60,38.40,1.00,0.00,1.00 +610,-38.40,38.40,1.00,0.00,1.00 +611,-43.20,43.20,1.00,0.00,1.00 +612,-48.00,43.20,1.00,0.00,1.00 +613,-52.80,48.00,1.00,0.00,1.00 +614,-62.40,48.00,1.00,0.00,1.00 +615,-67.20,52.80,1.00,0.00,1.00 +616,-76.80,52.80,1.00,0.00,1.00 +617,-86.40,52.80,1.00,0.00,1.00 +618,-91.20,52.80,1.00,0.00,1.00 +619,-100.80,52.80,1.00,0.00,1.00 +620,-105.60,52.80,1.00,0.00,1.00 +621,-115.20,48.00,1.00,0.00,1.00 +622,-120.00,48.00,1.00,0.00,1.00 +623,-129.60,48.00,1.00,0.00,1.00 +624,-134.40,43.20,1.00,0.00,1.00 +625,-139.20,43.20,1.00,0.00,1.00 +626,-144.00,38.40,1.00,0.00,1.00 +627,-148.80,33.60,1.00,0.00,1.00 +628,-153.60,33.60,1.00,0.00,1.00 +629,-158.40,28.80,1.00,0.00,1.00 +630,-158.40,24.00,1.00,0.00,1.00 +631,-163.20,19.20,1.00,0.00,1.00 +632,-168.00,19.20,1.00,0.00,1.00 +633,-168.00,14.40,1.00,0.00,1.00 +634,-172.80,9.60,1.00,0.00,1.00 +635,-177.60,4.80,1.00,0.00,1.00 +636,-177.60,0.00,1.00,0.00,1.00 +637,177.60,-0.00,1.00,0.00,1.00 +638,177.60,-4.80,1.00,0.00,1.00 +639,172.80,-9.60,1.00,0.00,1.00 +640,168.00,-14.40,1.00,0.00,1.00 +641,168.00,-19.20,1.00,0.00,1.00 +642,163.20,-19.20,1.00,0.00,1.00 +643,158.40,-24.00,1.00,0.00,1.00 +644,158.40,-28.80,1.00,0.00,1.00 +645,153.60,-33.60,1.00,0.00,1.00 +646,148.80,-33.60,1.00,0.00,1.00 +647,144.00,-38.40,1.00,0.00,1.00 +648,139.20,-43.20,1.00,0.00,1.00 +649,134.40,-43.20,1.00,0.00,1.00 +650,129.60,-48.00,1.00,0.00,1.00 +651,120.00,-48.00,1.00,0.00,1.00 +652,115.20,-48.00,1.00,0.00,1.00 +653,105.60,-52.80,1.00,0.00,1.00 +654,100.80,-52.80,1.00,0.00,1.00 +655,91.20,-52.80,1.00,0.00,1.00 +656,86.40,-52.80,1.00,0.00,1.00 +657,76.80,-52.80,1.00,0.00,1.00 +658,67.20,-52.80,1.00,0.00,1.00 +659,62.40,-48.00,1.00,0.00,1.00 +660,52.80,-48.00,1.00,0.00,1.00 +661,48.00,-43.20,1.00,0.00,1.00 +662,43.20,-43.20,1.00,0.00,1.00 +663,38.40,-38.40,1.00,0.00,1.00 +664,33.60,-38.40,1.00,0.00,1.00 +665,28.80,-33.60,1.00,0.00,1.00 +666,24.00,-28.80,1.00,0.00,1.00 +667,24.00,-24.00,1.00,0.00,1.00 +668,19.20,-24.00,1.00,0.00,1.00 +669,14.40,-19.20,1.00,0.00,1.00 +670,9.60,-14.40,1.00,0.00,1.00 +671,9.60,-9.60,1.00,0.00,1.00 +672,4.80,-9.60,1.00,0.00,1.00 +673,4.80,-4.80,1.00,0.00,1.00 +674,0.00,0.00,1.00,0.00,1.00 +675,-4.80,4.80,1.00,0.00,1.00 +676,-4.80,4.80,1.00,0.00,1.00 +677,-9.60,9.60,1.00,0.00,1.00 +678,-14.40,14.40,1.00,0.00,1.00 +679,-14.40,19.20,1.00,0.00,1.00 +680,-19.20,19.20,1.00,0.00,1.00 +681,-24.00,24.00,1.00,0.00,1.00 +682,-28.80,28.80,1.00,0.00,1.00 +683,-33.60,28.80,1.00,0.00,1.00 +684,-38.40,33.60,1.00,0.00,1.00 +685,-43.20,38.40,1.00,0.00,1.00 +686,-48.00,38.40,1.00,0.00,1.00 +687,-52.80,43.20,1.00,0.00,1.00 +688,-57.60,43.20,1.00,0.00,1.00 +689,-62.40,43.20,1.00,0.00,1.00 +690,-72.00,48.00,1.00,0.00,1.00 +691,-76.80,48.00,1.00,0.00,1.00 +692,-86.40,48.00,1.00,0.00,1.00 +693,-91.20,48.00,1.00,0.00,1.00 +694,-100.80,48.00,1.00,0.00,1.00 +695,-105.60,48.00,1.00,0.00,1.00 +696,-110.40,48.00,1.00,0.00,1.00 +697,-120.00,43.20,1.00,0.00,1.00 +698,-124.80,43.20,1.00,0.00,1.00 +699,-129.60,38.40,1.00,0.00,1.00 +700,-134.40,38.40,1.00,0.00,1.00 +701,-139.20,33.60,1.00,0.00,1.00 +702,-144.00,33.60,1.00,0.00,1.00 +703,-148.80,28.80,1.00,0.00,1.00 +704,-153.60,24.00,1.00,0.00,1.00 +705,-158.40,24.00,1.00,0.00,1.00 +706,-163.20,19.20,1.00,0.00,1.00 +707,-163.20,14.40,1.00,0.00,1.00 +708,-168.00,14.40,1.00,0.00,1.00 +709,-172.80,9.60,1.00,0.00,1.00 +710,-172.80,4.80,1.00,0.00,1.00 +711,-177.60,0.00,1.00,0.00,1.00 +712,177.60,-0.00,1.00,0.00,1.00 +713,172.80,-4.80,1.00,0.00,1.00 +714,172.80,-9.60,1.00,0.00,1.00 +715,168.00,-14.40,1.00,0.00,1.00 +716,163.20,-14.40,1.00,0.00,1.00 +717,163.20,-19.20,1.00,0.00,1.00 +718,158.40,-24.00,1.00,0.00,1.00 +719,153.60,-24.00,1.00,0.00,1.00 +720,148.80,-28.80,1.00,0.00,1.00 +721,144.00,-33.60,1.00,0.00,1.00 +722,139.20,-33.60,1.00,0.00,1.00 +723,134.40,-38.40,1.00,0.00,1.00 +724,129.60,-38.40,1.00,0.00,1.00 +725,124.80,-43.20,1.00,0.00,1.00 +726,120.00,-43.20,1.00,0.00,1.00 +727,110.40,-48.00,1.00,0.00,1.00 +728,105.60,-48.00,1.00,0.00,1.00 +729,100.80,-48.00,1.00,0.00,1.00 +730,91.20,-48.00,1.00,0.00,1.00 +731,86.40,-48.00,1.00,0.00,1.00 +732,76.80,-48.00,1.00,0.00,1.00 +733,72.00,-48.00,1.00,0.00,1.00 +734,62.40,-43.20,1.00,0.00,1.00 +735,57.60,-43.20,1.00,0.00,1.00 +736,52.80,-43.20,1.00,0.00,1.00 +737,48.00,-38.40,1.00,0.00,1.00 +738,43.20,-38.40,1.00,0.00,1.00 +739,38.40,-33.60,1.00,0.00,1.00 +740,33.60,-28.80,1.00,0.00,1.00 +741,28.80,-28.80,1.00,0.00,1.00 +742,24.00,-24.00,1.00,0.00,1.00 +743,19.20,-19.20,1.00,0.00,1.00 +744,14.40,-19.20,1.00,0.00,1.00 +745,14.40,-14.40,1.00,0.00,1.00 +746,9.60,-9.60,1.00,0.00,1.00 +747,4.80,-4.80,1.00,0.00,1.00 +748,4.80,-4.80,1.00,0.00,1.00 +749,0.00,0.00,1.00,0.00,1.00 +750,-4.80,4.80,1.00,0.00,1.00 +751,-4.80,4.80,1.00,0.00,1.00 +752,-9.60,9.60,1.00,0.00,1.00 +753,-14.40,14.40,1.00,0.00,1.00 +754,-19.20,14.40,1.00,0.00,1.00 +755,-24.00,19.20,1.00,0.00,1.00 +756,-24.00,24.00,1.00,0.00,1.00 +757,-28.80,24.00,1.00,0.00,1.00 +758,-33.60,28.80,1.00,0.00,1.00 +759,-38.40,28.80,1.00,0.00,1.00 +760,-43.20,33.60,1.00,0.00,1.00 +761,-48.00,33.60,1.00,0.00,1.00 +762,-52.80,38.40,1.00,0.00,1.00 +763,-62.40,38.40,1.00,0.00,1.00 +764,-67.20,38.40,1.00,0.00,1.00 +765,-72.00,43.20,1.00,0.00,1.00 +766,-76.80,43.20,1.00,0.00,1.00 +767,-86.40,43.20,1.00,0.00,1.00 +768,-91.20,43.20,1.00,0.00,1.00 +769,-96.00,43.20,1.00,0.00,1.00 +770,-105.60,43.20,1.00,0.00,1.00 +771,-110.40,43.20,1.00,0.00,1.00 +772,-115.20,38.40,1.00,0.00,1.00 +773,-124.80,38.40,1.00,0.00,1.00 +774,-129.60,38.40,1.00,0.00,1.00 +775,-134.40,33.60,1.00,0.00,1.00 +776,-139.20,33.60,1.00,0.00,1.00 +777,-144.00,28.80,1.00,0.00,1.00 +778,-148.80,28.80,1.00,0.00,1.00 +779,-153.60,24.00,1.00,0.00,1.00 +780,-158.40,19.20,1.00,0.00,1.00 +781,-158.40,19.20,1.00,0.00,1.00 +782,-163.20,14.40,1.00,0.00,1.00 +783,-168.00,9.60,1.00,0.00,1.00 +784,-172.80,9.60,1.00,0.00,1.00 +785,-172.80,4.80,1.00,0.00,1.00 +786,-177.60,0.00,1.00,0.00,1.00 +787,177.60,-0.00,1.00,0.00,1.00 +788,172.80,-4.80,1.00,0.00,1.00 +789,172.80,-9.60,1.00,0.00,1.00 +790,168.00,-9.60,1.00,0.00,1.00 +791,163.20,-14.40,1.00,0.00,1.00 +792,158.40,-19.20,1.00,0.00,1.00 +793,158.40,-19.20,1.00,0.00,1.00 +794,153.60,-24.00,1.00,0.00,1.00 +795,148.80,-28.80,1.00,0.00,1.00 +796,144.00,-28.80,1.00,0.00,1.00 +797,139.20,-33.60,1.00,0.00,1.00 +798,134.40,-33.60,1.00,0.00,1.00 +799,129.60,-38.40,1.00,0.00,1.00 +800,124.80,-38.40,1.00,0.00,1.00 +801,115.20,-38.40,1.00,0.00,1.00 +802,110.40,-43.20,1.00,0.00,1.00 +803,105.60,-43.20,1.00,0.00,1.00 +804,96.00,-43.20,1.00,0.00,1.00 +805,91.20,-43.20,1.00,0.00,1.00 +806,86.40,-43.20,1.00,0.00,1.00 +807,76.80,-43.20,1.00,0.00,1.00 +808,72.00,-43.20,1.00,0.00,1.00 +809,67.20,-38.40,1.00,0.00,1.00 +810,62.40,-38.40,1.00,0.00,1.00 +811,52.80,-38.40,1.00,0.00,1.00 +812,48.00,-33.60,1.00,0.00,1.00 +813,43.20,-33.60,1.00,0.00,1.00 +814,38.40,-28.80,1.00,0.00,1.00 +815,33.60,-28.80,1.00,0.00,1.00 +816,28.80,-24.00,1.00,0.00,1.00 +817,24.00,-24.00,1.00,0.00,1.00 +818,24.00,-19.20,1.00,0.00,1.00 +819,19.20,-14.40,1.00,0.00,1.00 +820,14.40,-14.40,1.00,0.00,1.00 +821,9.60,-9.60,1.00,0.00,1.00 +822,4.80,-4.80,1.00,0.00,1.00 +823,4.80,-4.80,1.00,0.00,1.00 +824,0.00,0.00,1.00,0.00,1.00 +825,-4.80,4.80,1.00,0.00,1.00 +826,-9.60,4.80,1.00,0.00,1.00 +827,-9.60,9.60,1.00,0.00,1.00 +828,-14.40,9.60,1.00,0.00,1.00 +829,-19.20,14.40,1.00,0.00,1.00 +830,-24.00,19.20,1.00,0.00,1.00 +831,-28.80,19.20,1.00,0.00,1.00 +832,-33.60,24.00,1.00,0.00,1.00 +833,-38.40,24.00,1.00,0.00,1.00 +834,-43.20,28.80,1.00,0.00,1.00 +835,-48.00,28.80,1.00,0.00,1.00 +836,-52.80,33.60,1.00,0.00,1.00 +837,-57.60,33.60,1.00,0.00,1.00 +838,-62.40,33.60,1.00,0.00,1.00 +839,-67.20,38.40,1.00,0.00,1.00 +840,-72.00,38.40,1.00,0.00,1.00 +841,-81.60,38.40,1.00,0.00,1.00 +842,-86.40,38.40,1.00,0.00,1.00 +843,-91.20,38.40,1.00,0.00,1.00 +844,-96.00,38.40,1.00,0.00,1.00 +845,-105.60,38.40,1.00,0.00,1.00 +846,-110.40,38.40,1.00,0.00,1.00 +847,-115.20,33.60,1.00,0.00,1.00 +848,-120.00,33.60,1.00,0.00,1.00 +849,-124.80,33.60,1.00,0.00,1.00 +850,-129.60,28.80,1.00,0.00,1.00 +851,-134.40,28.80,1.00,0.00,1.00 +852,-139.20,24.00,1.00,0.00,1.00 +853,-144.00,24.00,1.00,0.00,1.00 +854,-148.80,19.20,1.00,0.00,1.00 +855,-153.60,19.20,1.00,0.00,1.00 +856,-158.40,14.40,1.00,0.00,1.00 +857,-163.20,14.40,1.00,0.00,1.00 +858,-168.00,9.60,1.00,0.00,1.00 +859,-172.80,9.60,1.00,0.00,1.00 +860,-172.80,4.80,1.00,0.00,1.00 +861,-177.60,0.00,1.00,0.00,1.00 +862,177.60,-0.00,1.00,0.00,1.00 +863,172.80,-4.80,1.00,0.00,1.00 +864,172.80,-9.60,1.00,0.00,1.00 +865,168.00,-9.60,1.00,0.00,1.00 +866,163.20,-14.40,1.00,0.00,1.00 +867,158.40,-14.40,1.00,0.00,1.00 +868,153.60,-19.20,1.00,0.00,1.00 +869,148.80,-19.20,1.00,0.00,1.00 +870,144.00,-24.00,1.00,0.00,1.00 +871,139.20,-24.00,1.00,0.00,1.00 +872,134.40,-28.80,1.00,0.00,1.00 +873,129.60,-28.80,1.00,0.00,1.00 +874,124.80,-33.60,1.00,0.00,1.00 +875,120.00,-33.60,1.00,0.00,1.00 +876,115.20,-33.60,1.00,0.00,1.00 +877,110.40,-38.40,1.00,0.00,1.00 +878,105.60,-38.40,1.00,0.00,1.00 +879,96.00,-38.40,1.00,0.00,1.00 +880,91.20,-38.40,1.00,0.00,1.00 +881,86.40,-38.40,1.00,0.00,1.00 +882,81.60,-38.40,1.00,0.00,1.00 +883,72.00,-38.40,1.00,0.00,1.00 +884,67.20,-38.40,1.00,0.00,1.00 +885,62.40,-33.60,1.00,0.00,1.00 +886,57.60,-33.60,1.00,0.00,1.00 +887,52.80,-33.60,1.00,0.00,1.00 +888,48.00,-28.80,1.00,0.00,1.00 +889,43.20,-28.80,1.00,0.00,1.00 +890,38.40,-24.00,1.00,0.00,1.00 +891,33.60,-24.00,1.00,0.00,1.00 +892,28.80,-19.20,1.00,0.00,1.00 +893,24.00,-19.20,1.00,0.00,1.00 +894,19.20,-14.40,1.00,0.00,1.00 +895,14.40,-9.60,1.00,0.00,1.00 +896,9.60,-9.60,1.00,0.00,1.00 +897,9.60,-4.80,1.00,0.00,1.00 +898,4.80,-4.80,1.00,0.00,1.00 +899,0.00,0.00,1.00,0.00,1.00 +900,-4.80,4.80,1.00,0.00,1.00 +901,-9.60,4.80,1.00,0.00,1.00 +902,-14.40,9.60,1.00,0.00,1.00 +903,-14.40,9.60,1.00,0.00,1.00 +904,-19.20,14.40,1.00,0.00,1.00 +905,-24.00,14.40,1.00,0.00,1.00 +906,-28.80,19.20,1.00,0.00,1.00 +907,-33.60,19.20,1.00,0.00,1.00 +908,-38.40,24.00,1.00,0.00,1.00 +909,-43.20,24.00,1.00,0.00,1.00 +910,-48.00,24.00,1.00,0.00,1.00 +911,-52.80,28.80,1.00,0.00,1.00 +912,-57.60,28.80,1.00,0.00,1.00 +913,-62.40,28.80,1.00,0.00,1.00 +914,-67.20,33.60,1.00,0.00,1.00 +915,-72.00,33.60,1.00,0.00,1.00 +916,-81.60,33.60,1.00,0.00,1.00 +917,-86.40,33.60,1.00,0.00,1.00 +918,-91.20,33.60,1.00,0.00,1.00 +919,-96.00,33.60,1.00,0.00,1.00 +920,-100.80,33.60,1.00,0.00,1.00 +921,-110.40,33.60,1.00,0.00,1.00 +922,-115.20,33.60,1.00,0.00,1.00 +923,-120.00,28.80,1.00,0.00,1.00 +924,-124.80,28.80,1.00,0.00,1.00 +925,-129.60,28.80,1.00,0.00,1.00 +926,-134.40,24.00,1.00,0.00,1.00 +927,-139.20,24.00,1.00,0.00,1.00 +928,-144.00,19.20,1.00,0.00,1.00 +929,-148.80,19.20,1.00,0.00,1.00 +930,-153.60,14.40,1.00,0.00,1.00 +931,-158.40,14.40,1.00,0.00,1.00 +932,-163.20,9.60,1.00,0.00,1.00 +933,-168.00,9.60,1.00,0.00,1.00 +934,-168.00,4.80,1.00,0.00,1.00 +935,-172.80,4.80,1.00,0.00,1.00 +936,-177.60,0.00,1.00,0.00,1.00 +937,177.60,-0.00,1.00,0.00,1.00 +938,172.80,-4.80,1.00,0.00,1.00 +939,168.00,-4.80,1.00,0.00,1.00 +940,168.00,-9.60,1.00,0.00,1.00 +941,163.20,-9.60,1.00,0.00,1.00 +942,158.40,-14.40,1.00,0.00,1.00 +943,153.60,-14.40,1.00,0.00,1.00 +944,148.80,-19.20,1.00,0.00,1.00 +945,144.00,-19.20,1.00,0.00,1.00 +946,139.20,-24.00,1.00,0.00,1.00 +947,134.40,-24.00,1.00,0.00,1.00 +948,129.60,-28.80,1.00,0.00,1.00 +949,124.80,-28.80,1.00,0.00,1.00 +950,120.00,-28.80,1.00,0.00,1.00 +951,115.20,-33.60,1.00,0.00,1.00 +952,110.40,-33.60,1.00,0.00,1.00 +953,100.80,-33.60,1.00,0.00,1.00 +954,96.00,-33.60,1.00,0.00,1.00 +955,91.20,-33.60,1.00,0.00,1.00 +956,86.40,-33.60,1.00,0.00,1.00 +957,81.60,-33.60,1.00,0.00,1.00 +958,72.00,-33.60,1.00,0.00,1.00 +959,67.20,-33.60,1.00,0.00,1.00 +960,62.40,-28.80,1.00,0.00,1.00 +961,57.60,-28.80,1.00,0.00,1.00 +962,52.80,-28.80,1.00,0.00,1.00 +963,48.00,-24.00,1.00,0.00,1.00 +964,43.20,-24.00,1.00,0.00,1.00 +965,38.40,-24.00,1.00,0.00,1.00 +966,33.60,-19.20,1.00,0.00,1.00 +967,28.80,-19.20,1.00,0.00,1.00 +968,24.00,-14.40,1.00,0.00,1.00 +969,19.20,-14.40,1.00,0.00,1.00 +970,14.40,-9.60,1.00,0.00,1.00 +971,14.40,-9.60,1.00,0.00,1.00 +972,9.60,-4.80,1.00,0.00,1.00 +973,4.80,-4.80,1.00,0.00,1.00 +974,0.00,0.00,1.00,0.00,1.00 +975,-4.80,0.00,1.00,0.00,1.00 +976,-9.60,4.80,1.00,0.00,1.00 +977,-14.40,4.80,1.00,0.00,1.00 +978,-19.20,9.60,1.00,0.00,1.00 +979,-19.20,9.60,1.00,0.00,1.00 +980,-24.00,14.40,1.00,0.00,1.00 +981,-28.80,14.40,1.00,0.00,1.00 +982,-33.60,19.20,1.00,0.00,1.00 +983,-38.40,19.20,1.00,0.00,1.00 +984,-43.20,19.20,1.00,0.00,1.00 +985,-48.00,24.00,1.00,0.00,1.00 +986,-52.80,24.00,1.00,0.00,1.00 +987,-57.60,24.00,1.00,0.00,1.00 +988,-62.40,24.00,1.00,0.00,1.00 +989,-72.00,28.80,1.00,0.00,1.00 +990,-76.80,28.80,1.00,0.00,1.00 +991,-81.60,28.80,1.00,0.00,1.00 +992,-86.40,28.80,1.00,0.00,1.00 +993,-91.20,28.80,1.00,0.00,1.00 +994,-96.00,28.80,1.00,0.00,1.00 +995,-100.80,28.80,1.00,0.00,1.00 +996,-105.60,28.80,1.00,0.00,1.00 +997,-115.20,28.80,1.00,0.00,1.00 +998,-120.00,24.00,1.00,0.00,1.00 +999,-124.80,24.00,1.00,0.00,1.00 +1000,-129.60,24.00,1.00,0.00,1.00 +1001,-134.40,24.00,1.00,0.00,1.00 +1002,-139.20,19.20,1.00,0.00,1.00 +1003,-144.00,19.20,1.00,0.00,1.00 +1004,-148.80,14.40,1.00,0.00,1.00 +1005,-153.60,14.40,1.00,0.00,1.00 +1006,-158.40,14.40,1.00,0.00,1.00 +1007,-163.20,9.60,1.00,0.00,1.00 +1008,-163.20,9.60,1.00,0.00,1.00 +1009,-168.00,4.80,1.00,0.00,1.00 +1010,-172.80,4.80,1.00,0.00,1.00 +1011,-177.60,0.00,1.00,0.00,1.00 +1012,177.60,-0.00,1.00,0.00,1.00 +1013,172.80,-4.80,1.00,0.00,1.00 +1014,168.00,-4.80,1.00,0.00,1.00 +1015,163.20,-9.60,1.00,0.00,1.00 +1016,163.20,-9.60,1.00,0.00,1.00 +1017,158.40,-14.40,1.00,0.00,1.00 +1018,153.60,-14.40,1.00,0.00,1.00 +1019,148.80,-14.40,1.00,0.00,1.00 +1020,144.00,-19.20,1.00,0.00,1.00 +1021,139.20,-19.20,1.00,0.00,1.00 +1022,134.40,-24.00,1.00,0.00,1.00 +1023,129.60,-24.00,1.00,0.00,1.00 +1024,124.80,-24.00,1.00,0.00,1.00 +1025,120.00,-24.00,1.00,0.00,1.00 +1026,115.20,-28.80,1.00,0.00,1.00 +1027,105.60,-28.80,1.00,0.00,1.00 +1028,100.80,-28.80,1.00,0.00,1.00 +1029,96.00,-28.80,1.00,0.00,1.00 +1030,91.20,-28.80,1.00,0.00,1.00 +1031,86.40,-28.80,1.00,0.00,1.00 +1032,81.60,-28.80,1.00,0.00,1.00 +1033,76.80,-28.80,1.00,0.00,1.00 +1034,72.00,-28.80,1.00,0.00,1.00 +1035,62.40,-24.00,1.00,0.00,1.00 +1036,57.60,-24.00,1.00,0.00,1.00 +1037,52.80,-24.00,1.00,0.00,1.00 +1038,48.00,-24.00,1.00,0.00,1.00 +1039,43.20,-19.20,1.00,0.00,1.00 +1040,38.40,-19.20,1.00,0.00,1.00 +1041,33.60,-19.20,1.00,0.00,1.00 +1042,28.80,-14.40,1.00,0.00,1.00 +1043,24.00,-14.40,1.00,0.00,1.00 +1044,19.20,-9.60,1.00,0.00,1.00 +1045,19.20,-9.60,1.00,0.00,1.00 +1046,14.40,-4.80,1.00,0.00,1.00 +1047,9.60,-4.80,1.00,0.00,1.00 +1048,4.80,-0.00,1.00,0.00,1.00 +1049,0.00,0.00,1.00,0.00,1.00 +1050,-4.80,0.00,1.00,0.00,1.00 +1051,-9.60,4.80,1.00,0.00,1.00 +1052,-14.40,4.80,1.00,0.00,1.00 +1053,-19.20,9.60,1.00,0.00,1.00 +1054,-24.00,9.60,1.00,0.00,1.00 +1055,-28.80,9.60,1.00,0.00,1.00 +1056,-33.60,14.40,1.00,0.00,1.00 +1057,-33.60,14.40,1.00,0.00,1.00 +1058,-38.40,14.40,1.00,0.00,1.00 +1059,-43.20,19.20,1.00,0.00,1.00 +1060,-48.00,19.20,1.00,0.00,1.00 +1061,-57.60,19.20,1.00,0.00,1.00 +1062,-62.40,19.20,1.00,0.00,1.00 +1063,-67.20,24.00,1.00,0.00,1.00 +1064,-72.00,24.00,1.00,0.00,1.00 +1065,-76.80,24.00,1.00,0.00,1.00 +1066,-81.60,24.00,1.00,0.00,1.00 +1067,-86.40,24.00,1.00,0.00,1.00 +1068,-91.20,24.00,1.00,0.00,1.00 +1069,-96.00,24.00,1.00,0.00,1.00 +1070,-100.80,24.00,1.00,0.00,1.00 +1071,-105.60,24.00,1.00,0.00,1.00 +1072,-110.40,24.00,1.00,0.00,1.00 +1073,-115.20,19.20,1.00,0.00,1.00 +1074,-120.00,19.20,1.00,0.00,1.00 +1075,-129.60,19.20,1.00,0.00,1.00 +1076,-134.40,19.20,1.00,0.00,1.00 +1077,-139.20,19.20,1.00,0.00,1.00 +1078,-144.00,14.40,1.00,0.00,1.00 +1079,-148.80,14.40,1.00,0.00,1.00 +1080,-148.80,14.40,1.00,0.00,1.00 +1081,-153.60,9.60,1.00,0.00,1.00 +1082,-158.40,9.60,1.00,0.00,1.00 +1083,-163.20,4.80,1.00,0.00,1.00 +1084,-168.00,4.80,1.00,0.00,1.00 +1085,-172.80,4.80,1.00,0.00,1.00 +1086,-177.60,0.00,1.00,0.00,1.00 +1087,177.60,-0.00,1.00,0.00,1.00 +1088,172.80,-4.80,1.00,0.00,1.00 +1089,168.00,-4.80,1.00,0.00,1.00 +1090,163.20,-4.80,1.00,0.00,1.00 +1091,158.40,-9.60,1.00,0.00,1.00 +1092,153.60,-9.60,1.00,0.00,1.00 +1093,148.80,-14.40,1.00,0.00,1.00 +1094,148.80,-14.40,1.00,0.00,1.00 +1095,144.00,-14.40,1.00,0.00,1.00 +1096,139.20,-19.20,1.00,0.00,1.00 +1097,134.40,-19.20,1.00,0.00,1.00 +1098,129.60,-19.20,1.00,0.00,1.00 +1099,120.00,-19.20,1.00,0.00,1.00 +1100,115.20,-19.20,1.00,0.00,1.00 +1101,110.40,-24.00,1.00,0.00,1.00 +1102,105.60,-24.00,1.00,0.00,1.00 +1103,100.80,-24.00,1.00,0.00,1.00 +1104,96.00,-24.00,1.00,0.00,1.00 +1105,91.20,-24.00,1.00,0.00,1.00 +1106,86.40,-24.00,1.00,0.00,1.00 +1107,81.60,-24.00,1.00,0.00,1.00 +1108,76.80,-24.00,1.00,0.00,1.00 +1109,72.00,-24.00,1.00,0.00,1.00 +1110,67.20,-24.00,1.00,0.00,1.00 +1111,62.40,-19.20,1.00,0.00,1.00 +1112,57.60,-19.20,1.00,0.00,1.00 +1113,48.00,-19.20,1.00,0.00,1.00 +1114,43.20,-19.20,1.00,0.00,1.00 +1115,38.40,-14.40,1.00,0.00,1.00 +1116,33.60,-14.40,1.00,0.00,1.00 +1117,33.60,-14.40,1.00,0.00,1.00 +1118,28.80,-9.60,1.00,0.00,1.00 +1119,24.00,-9.60,1.00,0.00,1.00 +1120,19.20,-9.60,1.00,0.00,1.00 +1121,14.40,-4.80,1.00,0.00,1.00 +1122,9.60,-4.80,1.00,0.00,1.00 +1123,4.80,-0.00,1.00,0.00,1.00 +1124,0.00,0.00,1.00,0.00,1.00 +1125,-4.80,0.00,1.00,0.00,1.00 +1126,-9.60,4.80,1.00,0.00,1.00 +1127,-14.40,4.80,1.00,0.00,1.00 +1128,-19.20,4.80,1.00,0.00,1.00 +1129,-24.00,9.60,1.00,0.00,1.00 +1130,-28.80,9.60,1.00,0.00,1.00 +1131,-33.60,9.60,1.00,0.00,1.00 +1132,-38.40,9.60,1.00,0.00,1.00 +1133,-43.20,14.40,1.00,0.00,1.00 +1134,-48.00,14.40,1.00,0.00,1.00 +1135,-52.80,14.40,1.00,0.00,1.00 +1136,-57.60,14.40,1.00,0.00,1.00 +1137,-62.40,19.20,1.00,0.00,1.00 +1138,-67.20,19.20,1.00,0.00,1.00 +1139,-72.00,19.20,1.00,0.00,1.00 +1140,-76.80,19.20,1.00,0.00,1.00 +1141,-81.60,19.20,1.00,0.00,1.00 +1142,-86.40,19.20,1.00,0.00,1.00 +1143,-91.20,19.20,1.00,0.00,1.00 +1144,-96.00,19.20,1.00,0.00,1.00 +1145,-100.80,19.20,1.00,0.00,1.00 +1146,-105.60,19.20,1.00,0.00,1.00 +1147,-110.40,19.20,1.00,0.00,1.00 +1148,-115.20,19.20,1.00,0.00,1.00 +1149,-120.00,14.40,1.00,0.00,1.00 +1150,-124.80,14.40,1.00,0.00,1.00 +1151,-129.60,14.40,1.00,0.00,1.00 +1152,-134.40,14.40,1.00,0.00,1.00 +1153,-139.20,14.40,1.00,0.00,1.00 +1154,-144.00,9.60,1.00,0.00,1.00 +1155,-148.80,9.60,1.00,0.00,1.00 +1156,-153.60,9.60,1.00,0.00,1.00 +1157,-158.40,4.80,1.00,0.00,1.00 +1158,-163.20,4.80,1.00,0.00,1.00 +1159,-168.00,4.80,1.00,0.00,1.00 +1160,-172.80,0.00,1.00,0.00,1.00 +1161,-177.60,0.00,1.00,0.00,1.00 +1162,177.60,-0.00,1.00,0.00,1.00 +1163,172.80,-0.00,1.00,0.00,1.00 +1164,168.00,-4.80,1.00,0.00,1.00 +1165,163.20,-4.80,1.00,0.00,1.00 +1166,158.40,-4.80,1.00,0.00,1.00 +1167,153.60,-9.60,1.00,0.00,1.00 +1168,148.80,-9.60,1.00,0.00,1.00 +1169,144.00,-9.60,1.00,0.00,1.00 +1170,139.20,-14.40,1.00,0.00,1.00 +1171,134.40,-14.40,1.00,0.00,1.00 +1172,129.60,-14.40,1.00,0.00,1.00 +1173,124.80,-14.40,1.00,0.00,1.00 +1174,120.00,-14.40,1.00,0.00,1.00 +1175,115.20,-19.20,1.00,0.00,1.00 +1176,110.40,-19.20,1.00,0.00,1.00 +1177,105.60,-19.20,1.00,0.00,1.00 +1178,100.80,-19.20,1.00,0.00,1.00 +1179,96.00,-19.20,1.00,0.00,1.00 +1180,91.20,-19.20,1.00,0.00,1.00 +1181,86.40,-19.20,1.00,0.00,1.00 +1182,81.60,-19.20,1.00,0.00,1.00 +1183,76.80,-19.20,1.00,0.00,1.00 +1184,72.00,-19.20,1.00,0.00,1.00 +1185,67.20,-19.20,1.00,0.00,1.00 +1186,62.40,-19.20,1.00,0.00,1.00 +1187,57.60,-14.40,1.00,0.00,1.00 +1188,52.80,-14.40,1.00,0.00,1.00 +1189,48.00,-14.40,1.00,0.00,1.00 +1190,43.20,-14.40,1.00,0.00,1.00 +1191,38.40,-9.60,1.00,0.00,1.00 +1192,33.60,-9.60,1.00,0.00,1.00 +1193,28.80,-9.60,1.00,0.00,1.00 +1194,24.00,-9.60,1.00,0.00,1.00 +1195,19.20,-4.80,1.00,0.00,1.00 +1196,14.40,-4.80,1.00,0.00,1.00 +1197,9.60,-4.80,1.00,0.00,1.00 +1198,4.80,-0.00,1.00,0.00,1.00 +1199,0.00,0.00,1.00,0.00,1.00 +1200,-4.80,0.00,1.00,0.00,1.00 +1201,-9.60,0.00,1.00,0.00,1.00 +1202,-14.40,4.80,1.00,0.00,1.00 +1203,-19.20,4.80,1.00,0.00,1.00 +1204,-24.00,4.80,1.00,0.00,1.00 +1205,-28.80,4.80,1.00,0.00,1.00 +1206,-33.60,9.60,1.00,0.00,1.00 +1207,-38.40,9.60,1.00,0.00,1.00 +1208,-43.20,9.60,1.00,0.00,1.00 +1209,-48.00,9.60,1.00,0.00,1.00 +1210,-52.80,9.60,1.00,0.00,1.00 +1211,-57.60,14.40,1.00,0.00,1.00 +1212,-62.40,14.40,1.00,0.00,1.00 +1213,-67.20,14.40,1.00,0.00,1.00 +1214,-72.00,14.40,1.00,0.00,1.00 +1215,-76.80,14.40,1.00,0.00,1.00 +1216,-81.60,14.40,1.00,0.00,1.00 +1217,-86.40,14.40,1.00,0.00,1.00 +1218,-91.20,14.40,1.00,0.00,1.00 +1219,-96.00,14.40,1.00,0.00,1.00 +1220,-100.80,14.40,1.00,0.00,1.00 +1221,-105.60,14.40,1.00,0.00,1.00 +1222,-110.40,14.40,1.00,0.00,1.00 +1223,-115.20,14.40,1.00,0.00,1.00 +1224,-120.00,14.40,1.00,0.00,1.00 +1225,-124.80,9.60,1.00,0.00,1.00 +1226,-129.60,9.60,1.00,0.00,1.00 +1227,-134.40,9.60,1.00,0.00,1.00 +1228,-139.20,9.60,1.00,0.00,1.00 +1229,-144.00,9.60,1.00,0.00,1.00 +1230,-148.80,9.60,1.00,0.00,1.00 +1231,-153.60,4.80,1.00,0.00,1.00 +1232,-158.40,4.80,1.00,0.00,1.00 +1233,-163.20,4.80,1.00,0.00,1.00 +1234,-168.00,4.80,1.00,0.00,1.00 +1235,-172.80,0.00,1.00,0.00,1.00 +1236,-177.60,0.00,1.00,0.00,1.00 +1237,177.60,-0.00,1.00,0.00,1.00 +1238,172.80,-0.00,1.00,0.00,1.00 +1239,168.00,-4.80,1.00,0.00,1.00 +1240,163.20,-4.80,1.00,0.00,1.00 +1241,158.40,-4.80,1.00,0.00,1.00 +1242,153.60,-4.80,1.00,0.00,1.00 +1243,148.80,-9.60,1.00,0.00,1.00 +1244,144.00,-9.60,1.00,0.00,1.00 +1245,139.20,-9.60,1.00,0.00,1.00 +1246,134.40,-9.60,1.00,0.00,1.00 +1247,129.60,-9.60,1.00,0.00,1.00 +1248,124.80,-9.60,1.00,0.00,1.00 +1249,120.00,-14.40,1.00,0.00,1.00 +1250,115.20,-14.40,1.00,0.00,1.00 +1251,110.40,-14.40,1.00,0.00,1.00 +1252,105.60,-14.40,1.00,0.00,1.00 +1253,100.80,-14.40,1.00,0.00,1.00 +1254,96.00,-14.40,1.00,0.00,1.00 +1255,91.20,-14.40,1.00,0.00,1.00 +1256,86.40,-14.40,1.00,0.00,1.00 +1257,81.60,-14.40,1.00,0.00,1.00 +1258,76.80,-14.40,1.00,0.00,1.00 +1259,72.00,-14.40,1.00,0.00,1.00 +1260,67.20,-14.40,1.00,0.00,1.00 +1261,62.40,-14.40,1.00,0.00,1.00 +1262,57.60,-14.40,1.00,0.00,1.00 +1263,52.80,-9.60,1.00,0.00,1.00 +1264,48.00,-9.60,1.00,0.00,1.00 +1265,43.20,-9.60,1.00,0.00,1.00 +1266,38.40,-9.60,1.00,0.00,1.00 +1267,33.60,-9.60,1.00,0.00,1.00 +1268,28.80,-4.80,1.00,0.00,1.00 +1269,24.00,-4.80,1.00,0.00,1.00 +1270,19.20,-4.80,1.00,0.00,1.00 +1271,14.40,-4.80,1.00,0.00,1.00 +1272,9.60,-0.00,1.00,0.00,1.00 +1273,4.80,-0.00,1.00,0.00,1.00 +1274,0.00,0.00,1.00,0.00,1.00 +1275,-4.80,0.00,1.00,0.00,1.00 +1276,-9.60,0.00,1.00,0.00,1.00 +1277,-14.40,0.00,1.00,0.00,1.00 +1278,-19.20,4.80,1.00,0.00,1.00 +1279,-24.00,4.80,1.00,0.00,1.00 +1280,-28.80,4.80,1.00,0.00,1.00 +1281,-33.60,4.80,1.00,0.00,1.00 +1282,-38.40,4.80,1.00,0.00,1.00 +1283,-43.20,4.80,1.00,0.00,1.00 +1284,-48.00,4.80,1.00,0.00,1.00 +1285,-52.80,9.60,1.00,0.00,1.00 +1286,-57.60,9.60,1.00,0.00,1.00 +1287,-62.40,9.60,1.00,0.00,1.00 +1288,-67.20,9.60,1.00,0.00,1.00 +1289,-72.00,9.60,1.00,0.00,1.00 +1290,-76.80,9.60,1.00,0.00,1.00 +1291,-81.60,9.60,1.00,0.00,1.00 +1292,-86.40,9.60,1.00,0.00,1.00 +1293,-91.20,9.60,1.00,0.00,1.00 +1294,-96.00,9.60,1.00,0.00,1.00 +1295,-100.80,9.60,1.00,0.00,1.00 +1296,-105.60,9.60,1.00,0.00,1.00 +1297,-110.40,9.60,1.00,0.00,1.00 +1298,-115.20,9.60,1.00,0.00,1.00 +1299,-120.00,9.60,1.00,0.00,1.00 +1300,-124.80,9.60,1.00,0.00,1.00 +1301,-129.60,9.60,1.00,0.00,1.00 +1302,-134.40,4.80,1.00,0.00,1.00 +1303,-139.20,4.80,1.00,0.00,1.00 +1304,-144.00,4.80,1.00,0.00,1.00 +1305,-148.80,4.80,1.00,0.00,1.00 +1306,-153.60,4.80,1.00,0.00,1.00 +1307,-158.40,4.80,1.00,0.00,1.00 +1308,-163.20,4.80,1.00,0.00,1.00 +1309,-168.00,0.00,1.00,0.00,1.00 +1310,-172.80,0.00,1.00,0.00,1.00 +1311,-177.60,0.00,1.00,0.00,1.00 +1312,177.60,-0.00,1.00,0.00,1.00 +1313,172.80,-0.00,1.00,0.00,1.00 +1314,168.00,-0.00,1.00,0.00,1.00 +1315,163.20,-4.80,1.00,0.00,1.00 +1316,158.40,-4.80,1.00,0.00,1.00 +1317,153.60,-4.80,1.00,0.00,1.00 +1318,148.80,-4.80,1.00,0.00,1.00 +1319,144.00,-4.80,1.00,0.00,1.00 +1320,139.20,-4.80,1.00,0.00,1.00 +1321,134.40,-4.80,1.00,0.00,1.00 +1322,129.60,-9.60,1.00,0.00,1.00 +1323,124.80,-9.60,1.00,0.00,1.00 +1324,120.00,-9.60,1.00,0.00,1.00 +1325,115.20,-9.60,1.00,0.00,1.00 +1326,110.40,-9.60,1.00,0.00,1.00 +1327,105.60,-9.60,1.00,0.00,1.00 +1328,100.80,-9.60,1.00,0.00,1.00 +1329,96.00,-9.60,1.00,0.00,1.00 +1330,91.20,-9.60,1.00,0.00,1.00 +1331,86.40,-9.60,1.00,0.00,1.00 +1332,81.60,-9.60,1.00,0.00,1.00 +1333,76.80,-9.60,1.00,0.00,1.00 +1334,72.00,-9.60,1.00,0.00,1.00 +1335,67.20,-9.60,1.00,0.00,1.00 +1336,62.40,-9.60,1.00,0.00,1.00 +1337,57.60,-9.60,1.00,0.00,1.00 +1338,52.80,-9.60,1.00,0.00,1.00 +1339,48.00,-4.80,1.00,0.00,1.00 +1340,43.20,-4.80,1.00,0.00,1.00 +1341,38.40,-4.80,1.00,0.00,1.00 +1342,33.60,-4.80,1.00,0.00,1.00 +1343,28.80,-4.80,1.00,0.00,1.00 +1344,24.00,-4.80,1.00,0.00,1.00 +1345,19.20,-4.80,1.00,0.00,1.00 +1346,14.40,-0.00,1.00,0.00,1.00 +1347,9.60,-0.00,1.00,0.00,1.00 +1348,4.80,-0.00,1.00,0.00,1.00 +1349,0.00,0.00,1.00,0.00,1.00 +1350,-4.80,0.00,1.00,0.00,1.00 +1351,-9.60,0.00,1.00,0.00,1.00 +1352,-14.40,0.00,1.00,0.00,1.00 +1353,-19.20,0.00,1.00,0.00,1.00 +1354,-24.00,0.00,1.00,0.00,1.00 +1355,-28.80,0.00,1.00,0.00,1.00 +1356,-33.60,4.80,1.00,0.00,1.00 +1357,-38.40,4.80,1.00,0.00,1.00 +1358,-43.20,4.80,1.00,0.00,1.00 +1359,-48.00,4.80,1.00,0.00,1.00 +1360,-52.80,4.80,1.00,0.00,1.00 +1361,-57.60,4.80,1.00,0.00,1.00 +1362,-62.40,4.80,1.00,0.00,1.00 +1363,-67.20,4.80,1.00,0.00,1.00 +1364,-72.00,4.80,1.00,0.00,1.00 +1365,-76.80,4.80,1.00,0.00,1.00 +1366,-81.60,4.80,1.00,0.00,1.00 +1367,-86.40,4.80,1.00,0.00,1.00 +1368,-91.20,4.80,1.00,0.00,1.00 +1369,-96.00,4.80,1.00,0.00,1.00 +1370,-100.80,4.80,1.00,0.00,1.00 +1371,-105.60,4.80,1.00,0.00,1.00 +1372,-110.40,4.80,1.00,0.00,1.00 +1373,-115.20,4.80,1.00,0.00,1.00 +1374,-120.00,4.80,1.00,0.00,1.00 +1375,-124.80,4.80,1.00,0.00,1.00 +1376,-129.60,4.80,1.00,0.00,1.00 +1377,-134.40,4.80,1.00,0.00,1.00 +1378,-139.20,4.80,1.00,0.00,1.00 +1379,-144.00,4.80,1.00,0.00,1.00 +1380,-148.80,4.80,1.00,0.00,1.00 +1381,-153.60,0.00,1.00,0.00,1.00 +1382,-158.40,0.00,1.00,0.00,1.00 +1383,-163.20,0.00,1.00,0.00,1.00 +1384,-168.00,0.00,1.00,0.00,1.00 +1385,-172.80,0.00,1.00,0.00,1.00 +1386,-177.60,0.00,1.00,0.00,1.00 +1387,177.60,-0.00,1.00,0.00,1.00 +1388,172.80,-0.00,1.00,0.00,1.00 +1389,168.00,-0.00,1.00,0.00,1.00 +1390,163.20,-0.00,1.00,0.00,1.00 +1391,158.40,-0.00,1.00,0.00,1.00 +1392,153.60,-0.00,1.00,0.00,1.00 +1393,148.80,-4.80,1.00,0.00,1.00 +1394,144.00,-4.80,1.00,0.00,1.00 +1395,139.20,-4.80,1.00,0.00,1.00 +1396,134.40,-4.80,1.00,0.00,1.00 +1397,129.60,-4.80,1.00,0.00,1.00 +1398,124.80,-4.80,1.00,0.00,1.00 +1399,120.00,-4.80,1.00,0.00,1.00 +1400,115.20,-4.80,1.00,0.00,1.00 +1401,110.40,-4.80,1.00,0.00,1.00 +1402,105.60,-4.80,1.00,0.00,1.00 +1403,100.80,-4.80,1.00,0.00,1.00 +1404,96.00,-4.80,1.00,0.00,1.00 +1405,91.20,-4.80,1.00,0.00,1.00 +1406,86.40,-4.80,1.00,0.00,1.00 +1407,81.60,-4.80,1.00,0.00,1.00 +1408,76.80,-4.80,1.00,0.00,1.00 +1409,72.00,-4.80,1.00,0.00,1.00 +1410,67.20,-4.80,1.00,0.00,1.00 +1411,62.40,-4.80,1.00,0.00,1.00 +1412,57.60,-4.80,1.00,0.00,1.00 +1413,52.80,-4.80,1.00,0.00,1.00 +1414,48.00,-4.80,1.00,0.00,1.00 +1415,43.20,-4.80,1.00,0.00,1.00 +1416,38.40,-4.80,1.00,0.00,1.00 +1417,33.60,-4.80,1.00,0.00,1.00 +1418,28.80,-0.00,1.00,0.00,1.00 +1419,24.00,-0.00,1.00,0.00,1.00 +1420,19.20,-0.00,1.00,0.00,1.00 +1421,14.40,-0.00,1.00,0.00,1.00 +1422,9.60,-0.00,1.00,0.00,1.00 +1423,4.80,-0.00,1.00,0.00,1.00 +1424,0.00,0.00,1.00,0.00,1.00 +1425,-4.80,0.00,1.00,0.00,1.00 +1426,-9.60,0.00,1.00,0.00,1.00 +1427,-14.40,0.00,1.00,0.00,1.00 +1428,-19.20,0.00,1.00,0.00,1.00 +1429,-24.00,0.00,1.00,0.00,1.00 +1430,-28.80,0.00,1.00,0.00,1.00 +1431,-33.60,0.00,1.00,0.00,1.00 +1432,-38.40,0.00,1.00,0.00,1.00 +1433,-43.20,0.00,1.00,0.00,1.00 +1434,-48.00,0.00,1.00,0.00,1.00 +1435,-52.80,0.00,1.00,0.00,1.00 +1436,-57.60,0.00,1.00,0.00,1.00 +1437,-62.40,0.00,1.00,0.00,1.00 +1438,-67.20,0.00,1.00,0.00,1.00 +1439,-72.00,0.00,1.00,0.00,1.00 +1440,-76.80,0.00,1.00,0.00,1.00 +1441,-81.60,0.00,1.00,0.00,1.00 +1442,-86.40,0.00,1.00,0.00,1.00 +1443,-91.20,0.00,1.00,0.00,1.00 +1444,-96.00,0.00,1.00,0.00,1.00 +1445,-100.80,0.00,1.00,0.00,1.00 +1446,-105.60,0.00,1.00,0.00,1.00 +1447,-110.40,0.00,1.00,0.00,1.00 +1448,-115.20,0.00,1.00,0.00,1.00 +1449,-120.00,0.00,1.00,0.00,1.00 +1450,-124.80,0.00,1.00,0.00,1.00 +1451,-129.60,0.00,1.00,0.00,1.00 +1452,-134.40,0.00,1.00,0.00,1.00 +1453,-139.20,0.00,1.00,0.00,1.00 +1454,-144.00,0.00,1.00,0.00,1.00 +1455,-148.80,0.00,1.00,0.00,1.00 +1456,-153.60,0.00,1.00,0.00,1.00 +1457,-158.40,0.00,1.00,0.00,1.00 +1458,-163.20,0.00,1.00,0.00,1.00 +1459,-168.00,0.00,1.00,0.00,1.00 +1460,-172.80,0.00,1.00,0.00,1.00 +1461,-177.60,0.00,1.00,0.00,1.00 +1462,177.60,0.00,1.00,0.00,1.00 +1463,172.80,0.00,1.00,0.00,1.00 +1464,168.00,0.00,1.00,0.00,1.00 +1465,163.20,0.00,1.00,0.00,1.00 +1466,158.40,0.00,1.00,0.00,1.00 +1467,153.60,0.00,1.00,0.00,1.00 +1468,148.80,0.00,1.00,0.00,1.00 +1469,144.00,0.00,1.00,0.00,1.00 +1470,139.20,0.00,1.00,0.00,1.00 +1471,134.40,0.00,1.00,0.00,1.00 +1472,129.60,0.00,1.00,0.00,1.00 +1473,124.80,0.00,1.00,0.00,1.00 +1474,120.00,0.00,1.00,0.00,1.00 +1475,115.20,0.00,1.00,0.00,1.00 +1476,110.40,0.00,1.00,0.00,1.00 +1477,105.60,0.00,1.00,0.00,1.00 +1478,100.80,0.00,1.00,0.00,1.00 +1479,96.00,0.00,1.00,0.00,1.00 +1480,91.20,0.00,1.00,0.00,1.00 +1481,86.40,0.00,1.00,0.00,1.00 +1482,81.60,0.00,1.00,0.00,1.00 +1483,76.80,0.00,1.00,0.00,1.00 +1484,72.00,0.00,1.00,0.00,1.00 +1485,67.20,0.00,1.00,0.00,1.00 +1486,62.40,0.00,1.00,0.00,1.00 +1487,57.60,0.00,1.00,0.00,1.00 +1488,52.80,0.00,1.00,0.00,1.00 +1489,48.00,0.00,1.00,0.00,1.00 +1490,43.20,0.00,1.00,0.00,1.00 +1491,38.40,0.00,1.00,0.00,1.00 +1492,33.60,0.00,1.00,0.00,1.00 +1493,28.80,0.00,1.00,0.00,1.00 +1494,24.00,0.00,1.00,0.00,1.00 +1495,19.20,0.00,1.00,0.00,1.00 +1496,14.40,0.00,1.00,0.00,1.00 +1497,9.60,0.00,1.00,0.00,1.00 +1498,4.80,0.00,1.00,0.00,1.00 +1499,0.00,0.00,1.00,0.00,1.00 diff --git a/scripts/testv/stvISM3.csv b/scripts/testv/stvISM3.csv new file mode 100644 index 0000000000..6b57caab12 --- /dev/null +++ b/scripts/testv/stvISM3.csv @@ -0,0 +1,1500 @@ +0,0.00,0.00,1.00,0.00,1.00 +1,-177.60,-4.80,1.00,0.00,1.00 +2,4.80,4.80,1.00,0.00,1.00 +3,-168.00,-9.60,1.00,0.00,1.00 +4,14.40,14.40,1.00,0.00,1.00 +5,-163.20,-14.40,1.00,0.00,1.00 +6,19.20,19.20,1.00,0.00,1.00 +7,-153.60,-24.00,1.00,0.00,1.00 +8,28.80,24.00,1.00,0.00,1.00 +9,-148.80,-28.80,1.00,0.00,1.00 +10,38.40,33.60,1.00,0.00,1.00 +11,-139.20,-33.60,1.00,0.00,1.00 +12,48.00,38.40,1.00,0.00,1.00 +13,-124.80,-38.40,1.00,0.00,1.00 +14,57.60,38.40,1.00,0.00,1.00 +15,-115.20,-43.20,1.00,0.00,1.00 +16,72.00,43.20,1.00,0.00,1.00 +17,-100.80,-43.20,1.00,0.00,1.00 +18,86.40,43.20,1.00,0.00,1.00 +19,-86.40,-43.20,1.00,0.00,1.00 +20,100.80,43.20,1.00,0.00,1.00 +21,-76.80,-43.20,1.00,0.00,1.00 +22,110.40,43.20,1.00,0.00,1.00 +23,-62.40,-43.20,1.00,0.00,1.00 +24,124.80,38.40,1.00,0.00,1.00 +25,-52.80,-38.40,1.00,0.00,1.00 +26,134.40,33.60,1.00,0.00,1.00 +27,-38.40,-33.60,1.00,0.00,1.00 +28,144.00,28.80,1.00,0.00,1.00 +29,-33.60,-28.80,1.00,0.00,1.00 +30,153.60,24.00,1.00,0.00,1.00 +31,-24.00,-19.20,1.00,0.00,1.00 +32,158.40,19.20,1.00,0.00,1.00 +33,-14.40,-14.40,1.00,0.00,1.00 +34,168.00,9.60,1.00,0.00,1.00 +35,-9.60,-9.60,1.00,0.00,1.00 +36,172.80,4.80,1.00,0.00,1.00 +37,-0.00,-0.00,1.00,0.00,1.00 +38,-177.60,-0.00,1.00,0.00,1.00 +39,4.80,4.80,1.00,0.00,1.00 +40,-172.80,-9.60,1.00,0.00,1.00 +41,14.40,9.60,1.00,0.00,1.00 +42,-163.20,-14.40,1.00,0.00,1.00 +43,19.20,19.20,1.00,0.00,1.00 +44,-158.40,-19.20,1.00,0.00,1.00 +45,28.80,24.00,1.00,0.00,1.00 +46,-148.80,-28.80,1.00,0.00,1.00 +47,33.60,28.80,1.00,0.00,1.00 +48,-139.20,-33.60,1.00,0.00,1.00 +49,43.20,33.60,1.00,0.00,1.00 +50,-129.60,-38.40,1.00,0.00,1.00 +51,57.60,38.40,1.00,0.00,1.00 +52,-120.00,-43.20,1.00,0.00,1.00 +53,67.20,43.20,1.00,0.00,1.00 +54,-105.60,-43.20,1.00,0.00,1.00 +55,81.60,43.20,1.00,0.00,1.00 +56,-91.20,-43.20,1.00,0.00,1.00 +57,96.00,43.20,1.00,0.00,1.00 +58,-76.80,-43.20,1.00,0.00,1.00 +59,110.40,43.20,1.00,0.00,1.00 +60,-67.20,-43.20,1.00,0.00,1.00 +61,120.00,38.40,1.00,0.00,1.00 +62,-52.80,-38.40,1.00,0.00,1.00 +63,129.60,38.40,1.00,0.00,1.00 +64,-43.20,-33.60,1.00,0.00,1.00 +65,144.00,33.60,1.00,0.00,1.00 +66,-33.60,-28.80,1.00,0.00,1.00 +67,148.80,24.00,1.00,0.00,1.00 +68,-24.00,-24.00,1.00,0.00,1.00 +69,158.40,19.20,1.00,0.00,1.00 +70,-19.20,-14.40,1.00,0.00,1.00 +71,168.00,14.40,1.00,0.00,1.00 +72,-9.60,-9.60,1.00,0.00,1.00 +73,172.80,4.80,1.00,0.00,1.00 +74,-4.80,-4.80,1.00,0.00,1.00 +75,0.00,0.00,1.00,0.00,1.00 +76,-177.60,-4.80,1.00,0.00,1.00 +77,9.60,4.80,1.00,0.00,1.00 +78,-168.00,-9.60,1.00,0.00,1.00 +79,14.40,14.40,1.00,0.00,1.00 +80,-163.20,-14.40,1.00,0.00,1.00 +81,24.00,19.20,1.00,0.00,1.00 +82,-153.60,-19.20,1.00,0.00,1.00 +83,28.80,24.00,1.00,0.00,1.00 +84,-144.00,-24.00,1.00,0.00,1.00 +85,38.40,28.80,1.00,0.00,1.00 +86,-134.40,-28.80,1.00,0.00,1.00 +87,48.00,33.60,1.00,0.00,1.00 +88,-124.80,-33.60,1.00,0.00,1.00 +89,62.40,38.40,1.00,0.00,1.00 +90,-115.20,-38.40,1.00,0.00,1.00 +91,72.00,38.40,1.00,0.00,1.00 +92,-100.80,-38.40,1.00,0.00,1.00 +93,86.40,38.40,1.00,0.00,1.00 +94,-86.40,-38.40,1.00,0.00,1.00 +95,96.00,38.40,1.00,0.00,1.00 +96,-76.80,-38.40,1.00,0.00,1.00 +97,110.40,38.40,1.00,0.00,1.00 +98,-62.40,-38.40,1.00,0.00,1.00 +99,120.00,33.60,1.00,0.00,1.00 +100,-52.80,-33.60,1.00,0.00,1.00 +101,134.40,33.60,1.00,0.00,1.00 +102,-43.20,-28.80,1.00,0.00,1.00 +103,144.00,28.80,1.00,0.00,1.00 +104,-33.60,-24.00,1.00,0.00,1.00 +105,148.80,24.00,1.00,0.00,1.00 +106,-24.00,-19.20,1.00,0.00,1.00 +107,158.40,14.40,1.00,0.00,1.00 +108,-19.20,-14.40,1.00,0.00,1.00 +109,168.00,9.60,1.00,0.00,1.00 +110,-9.60,-9.60,1.00,0.00,1.00 +111,172.80,4.80,1.00,0.00,1.00 +112,-0.00,-0.00,1.00,0.00,1.00 +113,-177.60,-0.00,1.00,0.00,1.00 +114,4.80,4.80,1.00,0.00,1.00 +115,-172.80,-9.60,1.00,0.00,1.00 +116,14.40,9.60,1.00,0.00,1.00 +117,-163.20,-14.40,1.00,0.00,1.00 +118,19.20,14.40,1.00,0.00,1.00 +119,-153.60,-19.20,1.00,0.00,1.00 +120,28.80,24.00,1.00,0.00,1.00 +121,-148.80,-24.00,1.00,0.00,1.00 +122,38.40,28.80,1.00,0.00,1.00 +123,-139.20,-28.80,1.00,0.00,1.00 +124,48.00,33.60,1.00,0.00,1.00 +125,-124.80,-33.60,1.00,0.00,1.00 +126,57.60,33.60,1.00,0.00,1.00 +127,-115.20,-38.40,1.00,0.00,1.00 +128,72.00,38.40,1.00,0.00,1.00 +129,-105.60,-38.40,1.00,0.00,1.00 +130,81.60,38.40,1.00,0.00,1.00 +131,-91.20,-38.40,1.00,0.00,1.00 +132,96.00,38.40,1.00,0.00,1.00 +133,-76.80,-38.40,1.00,0.00,1.00 +134,105.60,38.40,1.00,0.00,1.00 +135,-67.20,-38.40,1.00,0.00,1.00 +136,120.00,38.40,1.00,0.00,1.00 +137,-57.60,-33.60,1.00,0.00,1.00 +138,129.60,33.60,1.00,0.00,1.00 +139,-43.20,-28.80,1.00,0.00,1.00 +140,139.20,28.80,1.00,0.00,1.00 +141,-33.60,-24.00,1.00,0.00,1.00 +142,148.80,24.00,1.00,0.00,1.00 +143,-28.80,-19.20,1.00,0.00,1.00 +144,158.40,19.20,1.00,0.00,1.00 +145,-19.20,-14.40,1.00,0.00,1.00 +146,163.20,14.40,1.00,0.00,1.00 +147,-9.60,-9.60,1.00,0.00,1.00 +148,172.80,4.80,1.00,0.00,1.00 +149,-4.80,-4.80,1.00,0.00,1.00 +150,0.00,0.00,1.00,0.00,1.00 +151,-177.60,-4.80,1.00,0.00,1.00 +152,9.60,4.80,1.00,0.00,1.00 +153,-168.00,-9.60,1.00,0.00,1.00 +154,14.40,9.60,1.00,0.00,1.00 +155,-158.40,-14.40,1.00,0.00,1.00 +156,24.00,14.40,1.00,0.00,1.00 +157,-153.60,-19.20,1.00,0.00,1.00 +158,33.60,19.20,1.00,0.00,1.00 +159,-144.00,-24.00,1.00,0.00,1.00 +160,43.20,24.00,1.00,0.00,1.00 +161,-134.40,-28.80,1.00,0.00,1.00 +162,52.80,28.80,1.00,0.00,1.00 +163,-124.80,-28.80,1.00,0.00,1.00 +164,62.40,33.60,1.00,0.00,1.00 +165,-110.40,-33.60,1.00,0.00,1.00 +166,72.00,33.60,1.00,0.00,1.00 +167,-100.80,-33.60,1.00,0.00,1.00 +168,86.40,33.60,1.00,0.00,1.00 +169,-86.40,-33.60,1.00,0.00,1.00 +170,96.00,33.60,1.00,0.00,1.00 +171,-76.80,-33.60,1.00,0.00,1.00 +172,110.40,33.60,1.00,0.00,1.00 +173,-67.20,-33.60,1.00,0.00,1.00 +174,120.00,33.60,1.00,0.00,1.00 +175,-52.80,-28.80,1.00,0.00,1.00 +176,129.60,28.80,1.00,0.00,1.00 +177,-43.20,-28.80,1.00,0.00,1.00 +178,139.20,24.00,1.00,0.00,1.00 +179,-33.60,-24.00,1.00,0.00,1.00 +180,148.80,19.20,1.00,0.00,1.00 +181,-24.00,-19.20,1.00,0.00,1.00 +182,158.40,14.40,1.00,0.00,1.00 +183,-19.20,-14.40,1.00,0.00,1.00 +184,168.00,9.60,1.00,0.00,1.00 +185,-9.60,-4.80,1.00,0.00,1.00 +186,172.80,4.80,1.00,0.00,1.00 +187,-0.00,-0.00,1.00,0.00,1.00 +188,-177.60,-0.00,1.00,0.00,1.00 +189,4.80,4.80,1.00,0.00,1.00 +190,-168.00,-4.80,1.00,0.00,1.00 +191,14.40,9.60,1.00,0.00,1.00 +192,-163.20,-14.40,1.00,0.00,1.00 +193,24.00,14.40,1.00,0.00,1.00 +194,-153.60,-19.20,1.00,0.00,1.00 +195,28.80,19.20,1.00,0.00,1.00 +196,-144.00,-24.00,1.00,0.00,1.00 +197,38.40,24.00,1.00,0.00,1.00 +198,-134.40,-28.80,1.00,0.00,1.00 +199,48.00,28.80,1.00,0.00,1.00 +200,-124.80,-28.80,1.00,0.00,1.00 +201,62.40,33.60,1.00,0.00,1.00 +202,-115.20,-33.60,1.00,0.00,1.00 +203,72.00,33.60,1.00,0.00,1.00 +204,-100.80,-33.60,1.00,0.00,1.00 +205,81.60,33.60,1.00,0.00,1.00 +206,-91.20,-33.60,1.00,0.00,1.00 +207,96.00,33.60,1.00,0.00,1.00 +208,-81.60,-33.60,1.00,0.00,1.00 +209,105.60,33.60,1.00,0.00,1.00 +210,-67.20,-33.60,1.00,0.00,1.00 +211,115.20,33.60,1.00,0.00,1.00 +212,-57.60,-28.80,1.00,0.00,1.00 +213,129.60,28.80,1.00,0.00,1.00 +214,-48.00,-28.80,1.00,0.00,1.00 +215,139.20,24.00,1.00,0.00,1.00 +216,-38.40,-24.00,1.00,0.00,1.00 +217,148.80,19.20,1.00,0.00,1.00 +218,-28.80,-19.20,1.00,0.00,1.00 +219,153.60,14.40,1.00,0.00,1.00 +220,-19.20,-14.40,1.00,0.00,1.00 +221,163.20,9.60,1.00,0.00,1.00 +222,-9.60,-9.60,1.00,0.00,1.00 +223,172.80,4.80,1.00,0.00,1.00 +224,-4.80,-4.80,1.00,0.00,1.00 +225,0.00,0.00,1.00,0.00,1.00 +226,-177.60,-4.80,1.00,0.00,1.00 +227,9.60,4.80,1.00,0.00,1.00 +228,-168.00,-9.60,1.00,0.00,1.00 +229,14.40,9.60,1.00,0.00,1.00 +230,-158.40,-9.60,1.00,0.00,1.00 +231,24.00,14.40,1.00,0.00,1.00 +232,-148.80,-14.40,1.00,0.00,1.00 +233,33.60,19.20,1.00,0.00,1.00 +234,-139.20,-19.20,1.00,0.00,1.00 +235,43.20,24.00,1.00,0.00,1.00 +236,-129.60,-24.00,1.00,0.00,1.00 +237,52.80,24.00,1.00,0.00,1.00 +238,-120.00,-28.80,1.00,0.00,1.00 +239,62.40,28.80,1.00,0.00,1.00 +240,-110.40,-28.80,1.00,0.00,1.00 +241,76.80,28.80,1.00,0.00,1.00 +242,-100.80,-28.80,1.00,0.00,1.00 +243,86.40,28.80,1.00,0.00,1.00 +244,-86.40,-28.80,1.00,0.00,1.00 +245,96.00,28.80,1.00,0.00,1.00 +246,-76.80,-28.80,1.00,0.00,1.00 +247,105.60,28.80,1.00,0.00,1.00 +248,-67.20,-28.80,1.00,0.00,1.00 +249,120.00,28.80,1.00,0.00,1.00 +250,-57.60,-24.00,1.00,0.00,1.00 +251,129.60,24.00,1.00,0.00,1.00 +252,-48.00,-24.00,1.00,0.00,1.00 +253,139.20,19.20,1.00,0.00,1.00 +254,-38.40,-19.20,1.00,0.00,1.00 +255,148.80,19.20,1.00,0.00,1.00 +256,-28.80,-14.40,1.00,0.00,1.00 +257,158.40,14.40,1.00,0.00,1.00 +258,-19.20,-9.60,1.00,0.00,1.00 +259,163.20,9.60,1.00,0.00,1.00 +260,-9.60,-4.80,1.00,0.00,1.00 +261,172.80,4.80,1.00,0.00,1.00 +262,-0.00,-0.00,1.00,0.00,1.00 +263,-177.60,-0.00,1.00,0.00,1.00 +264,4.80,4.80,1.00,0.00,1.00 +265,-168.00,-4.80,1.00,0.00,1.00 +266,14.40,9.60,1.00,0.00,1.00 +267,-163.20,-9.60,1.00,0.00,1.00 +268,24.00,14.40,1.00,0.00,1.00 +269,-153.60,-14.40,1.00,0.00,1.00 +270,33.60,19.20,1.00,0.00,1.00 +271,-144.00,-19.20,1.00,0.00,1.00 +272,43.20,19.20,1.00,0.00,1.00 +273,-134.40,-24.00,1.00,0.00,1.00 +274,52.80,24.00,1.00,0.00,1.00 +275,-124.80,-24.00,1.00,0.00,1.00 +276,62.40,28.80,1.00,0.00,1.00 +277,-115.20,-28.80,1.00,0.00,1.00 +278,72.00,28.80,1.00,0.00,1.00 +279,-100.80,-28.80,1.00,0.00,1.00 +280,81.60,28.80,1.00,0.00,1.00 +281,-91.20,-28.80,1.00,0.00,1.00 +282,96.00,28.80,1.00,0.00,1.00 +283,-81.60,-28.80,1.00,0.00,1.00 +284,105.60,28.80,1.00,0.00,1.00 +285,-67.20,-28.80,1.00,0.00,1.00 +286,115.20,28.80,1.00,0.00,1.00 +287,-57.60,-28.80,1.00,0.00,1.00 +288,124.80,24.00,1.00,0.00,1.00 +289,-48.00,-24.00,1.00,0.00,1.00 +290,134.40,24.00,1.00,0.00,1.00 +291,-38.40,-19.20,1.00,0.00,1.00 +292,144.00,19.20,1.00,0.00,1.00 +293,-28.80,-14.40,1.00,0.00,1.00 +294,153.60,14.40,1.00,0.00,1.00 +295,-19.20,-9.60,1.00,0.00,1.00 +296,163.20,9.60,1.00,0.00,1.00 +297,-14.40,-9.60,1.00,0.00,1.00 +298,172.80,4.80,1.00,0.00,1.00 +299,-4.80,-4.80,1.00,0.00,1.00 +300,0.00,0.00,1.00,0.00,1.00 +301,-177.60,-0.00,1.00,0.00,1.00 +302,9.60,4.80,1.00,0.00,1.00 +303,-168.00,-4.80,1.00,0.00,1.00 +304,19.20,9.60,1.00,0.00,1.00 +305,-158.40,-9.60,1.00,0.00,1.00 +306,24.00,14.40,1.00,0.00,1.00 +307,-148.80,-14.40,1.00,0.00,1.00 +308,33.60,14.40,1.00,0.00,1.00 +309,-139.20,-19.20,1.00,0.00,1.00 +310,43.20,19.20,1.00,0.00,1.00 +311,-129.60,-19.20,1.00,0.00,1.00 +312,52.80,19.20,1.00,0.00,1.00 +313,-120.00,-24.00,1.00,0.00,1.00 +314,67.20,24.00,1.00,0.00,1.00 +315,-110.40,-24.00,1.00,0.00,1.00 +316,76.80,24.00,1.00,0.00,1.00 +317,-100.80,-24.00,1.00,0.00,1.00 +318,86.40,24.00,1.00,0.00,1.00 +319,-86.40,-24.00,1.00,0.00,1.00 +320,96.00,24.00,1.00,0.00,1.00 +321,-76.80,-24.00,1.00,0.00,1.00 +322,105.60,24.00,1.00,0.00,1.00 +323,-67.20,-24.00,1.00,0.00,1.00 +324,115.20,24.00,1.00,0.00,1.00 +325,-57.60,-24.00,1.00,0.00,1.00 +326,129.60,19.20,1.00,0.00,1.00 +327,-48.00,-19.20,1.00,0.00,1.00 +328,139.20,19.20,1.00,0.00,1.00 +329,-38.40,-14.40,1.00,0.00,1.00 +330,148.80,14.40,1.00,0.00,1.00 +331,-28.80,-14.40,1.00,0.00,1.00 +332,153.60,9.60,1.00,0.00,1.00 +333,-19.20,-9.60,1.00,0.00,1.00 +334,163.20,9.60,1.00,0.00,1.00 +335,-9.60,-4.80,1.00,0.00,1.00 +336,172.80,4.80,1.00,0.00,1.00 +337,-0.00,-0.00,1.00,0.00,1.00 +338,-177.60,-0.00,1.00,0.00,1.00 +339,4.80,4.80,1.00,0.00,1.00 +340,-168.00,-4.80,1.00,0.00,1.00 +341,14.40,9.60,1.00,0.00,1.00 +342,-158.40,-9.60,1.00,0.00,1.00 +343,24.00,9.60,1.00,0.00,1.00 +344,-153.60,-14.40,1.00,0.00,1.00 +345,33.60,14.40,1.00,0.00,1.00 +346,-144.00,-14.40,1.00,0.00,1.00 +347,43.20,19.20,1.00,0.00,1.00 +348,-134.40,-19.20,1.00,0.00,1.00 +349,52.80,19.20,1.00,0.00,1.00 +350,-124.80,-24.00,1.00,0.00,1.00 +351,62.40,24.00,1.00,0.00,1.00 +352,-110.40,-24.00,1.00,0.00,1.00 +353,72.00,24.00,1.00,0.00,1.00 +354,-100.80,-24.00,1.00,0.00,1.00 +355,81.60,24.00,1.00,0.00,1.00 +356,-91.20,-24.00,1.00,0.00,1.00 +357,96.00,24.00,1.00,0.00,1.00 +358,-81.60,-24.00,1.00,0.00,1.00 +359,105.60,24.00,1.00,0.00,1.00 +360,-72.00,-24.00,1.00,0.00,1.00 +361,115.20,24.00,1.00,0.00,1.00 +362,-57.60,-24.00,1.00,0.00,1.00 +363,124.80,19.20,1.00,0.00,1.00 +364,-48.00,-19.20,1.00,0.00,1.00 +365,134.40,19.20,1.00,0.00,1.00 +366,-38.40,-19.20,1.00,0.00,1.00 +367,144.00,14.40,1.00,0.00,1.00 +368,-28.80,-14.40,1.00,0.00,1.00 +369,153.60,14.40,1.00,0.00,1.00 +370,-24.00,-9.60,1.00,0.00,1.00 +371,163.20,9.60,1.00,0.00,1.00 +372,-14.40,-4.80,1.00,0.00,1.00 +373,172.80,4.80,1.00,0.00,1.00 +374,-4.80,-0.00,1.00,0.00,1.00 +375,0.00,0.00,1.00,0.00,1.00 +376,-177.60,-0.00,1.00,0.00,1.00 +377,9.60,4.80,1.00,0.00,1.00 +378,-168.00,-4.80,1.00,0.00,1.00 +379,19.20,4.80,1.00,0.00,1.00 +380,-158.40,-9.60,1.00,0.00,1.00 +381,28.80,9.60,1.00,0.00,1.00 +382,-148.80,-9.60,1.00,0.00,1.00 +383,38.40,14.40,1.00,0.00,1.00 +384,-139.20,-14.40,1.00,0.00,1.00 +385,48.00,14.40,1.00,0.00,1.00 +386,-129.60,-14.40,1.00,0.00,1.00 +387,57.60,19.20,1.00,0.00,1.00 +388,-120.00,-19.20,1.00,0.00,1.00 +389,67.20,19.20,1.00,0.00,1.00 +390,-110.40,-19.20,1.00,0.00,1.00 +391,76.80,19.20,1.00,0.00,1.00 +392,-100.80,-19.20,1.00,0.00,1.00 +393,86.40,19.20,1.00,0.00,1.00 +394,-86.40,-19.20,1.00,0.00,1.00 +395,96.00,19.20,1.00,0.00,1.00 +396,-76.80,-19.20,1.00,0.00,1.00 +397,105.60,19.20,1.00,0.00,1.00 +398,-67.20,-19.20,1.00,0.00,1.00 +399,115.20,19.20,1.00,0.00,1.00 +400,-57.60,-19.20,1.00,0.00,1.00 +401,124.80,19.20,1.00,0.00,1.00 +402,-48.00,-14.40,1.00,0.00,1.00 +403,134.40,14.40,1.00,0.00,1.00 +404,-38.40,-14.40,1.00,0.00,1.00 +405,144.00,14.40,1.00,0.00,1.00 +406,-28.80,-9.60,1.00,0.00,1.00 +407,153.60,9.60,1.00,0.00,1.00 +408,-19.20,-9.60,1.00,0.00,1.00 +409,163.20,4.80,1.00,0.00,1.00 +410,-9.60,-4.80,1.00,0.00,1.00 +411,172.80,4.80,1.00,0.00,1.00 +412,-0.00,-0.00,1.00,0.00,1.00 +413,-177.60,-0.00,1.00,0.00,1.00 +414,4.80,4.80,1.00,0.00,1.00 +415,-168.00,-4.80,1.00,0.00,1.00 +416,14.40,4.80,1.00,0.00,1.00 +417,-158.40,-9.60,1.00,0.00,1.00 +418,24.00,9.60,1.00,0.00,1.00 +419,-148.80,-9.60,1.00,0.00,1.00 +420,33.60,14.40,1.00,0.00,1.00 +421,-139.20,-14.40,1.00,0.00,1.00 +422,43.20,14.40,1.00,0.00,1.00 +423,-129.60,-14.40,1.00,0.00,1.00 +424,52.80,19.20,1.00,0.00,1.00 +425,-120.00,-19.20,1.00,0.00,1.00 +426,62.40,19.20,1.00,0.00,1.00 +427,-110.40,-19.20,1.00,0.00,1.00 +428,72.00,19.20,1.00,0.00,1.00 +429,-100.80,-19.20,1.00,0.00,1.00 +430,81.60,19.20,1.00,0.00,1.00 +431,-91.20,-19.20,1.00,0.00,1.00 +432,96.00,19.20,1.00,0.00,1.00 +433,-81.60,-19.20,1.00,0.00,1.00 +434,105.60,19.20,1.00,0.00,1.00 +435,-72.00,-19.20,1.00,0.00,1.00 +436,115.20,19.20,1.00,0.00,1.00 +437,-62.40,-19.20,1.00,0.00,1.00 +438,124.80,19.20,1.00,0.00,1.00 +439,-52.80,-14.40,1.00,0.00,1.00 +440,134.40,14.40,1.00,0.00,1.00 +441,-43.20,-14.40,1.00,0.00,1.00 +442,144.00,14.40,1.00,0.00,1.00 +443,-33.60,-9.60,1.00,0.00,1.00 +444,153.60,9.60,1.00,0.00,1.00 +445,-24.00,-9.60,1.00,0.00,1.00 +446,163.20,4.80,1.00,0.00,1.00 +447,-14.40,-4.80,1.00,0.00,1.00 +448,172.80,4.80,1.00,0.00,1.00 +449,-4.80,-0.00,1.00,0.00,1.00 +450,0.00,0.00,1.00,0.00,1.00 +451,-177.60,-0.00,1.00,0.00,1.00 +452,9.60,4.80,1.00,0.00,1.00 +453,-168.00,-4.80,1.00,0.00,1.00 +454,19.20,4.80,1.00,0.00,1.00 +455,-158.40,-4.80,1.00,0.00,1.00 +456,28.80,9.60,1.00,0.00,1.00 +457,-148.80,-9.60,1.00,0.00,1.00 +458,38.40,9.60,1.00,0.00,1.00 +459,-139.20,-9.60,1.00,0.00,1.00 +460,48.00,9.60,1.00,0.00,1.00 +461,-129.60,-14.40,1.00,0.00,1.00 +462,57.60,14.40,1.00,0.00,1.00 +463,-120.00,-14.40,1.00,0.00,1.00 +464,67.20,14.40,1.00,0.00,1.00 +465,-110.40,-14.40,1.00,0.00,1.00 +466,76.80,14.40,1.00,0.00,1.00 +467,-100.80,-14.40,1.00,0.00,1.00 +468,86.40,14.40,1.00,0.00,1.00 +469,-86.40,-14.40,1.00,0.00,1.00 +470,96.00,14.40,1.00,0.00,1.00 +471,-76.80,-14.40,1.00,0.00,1.00 +472,105.60,14.40,1.00,0.00,1.00 +473,-67.20,-14.40,1.00,0.00,1.00 +474,115.20,14.40,1.00,0.00,1.00 +475,-57.60,-14.40,1.00,0.00,1.00 +476,124.80,14.40,1.00,0.00,1.00 +477,-48.00,-14.40,1.00,0.00,1.00 +478,134.40,9.60,1.00,0.00,1.00 +479,-38.40,-9.60,1.00,0.00,1.00 +480,144.00,9.60,1.00,0.00,1.00 +481,-28.80,-9.60,1.00,0.00,1.00 +482,153.60,4.80,1.00,0.00,1.00 +483,-19.20,-4.80,1.00,0.00,1.00 +484,163.20,4.80,1.00,0.00,1.00 +485,-9.60,-4.80,1.00,0.00,1.00 +486,172.80,0.00,1.00,0.00,1.00 +487,-0.00,-0.00,1.00,0.00,1.00 +488,-177.60,-0.00,1.00,0.00,1.00 +489,4.80,0.00,1.00,0.00,1.00 +490,-168.00,-4.80,1.00,0.00,1.00 +491,14.40,4.80,1.00,0.00,1.00 +492,-158.40,-4.80,1.00,0.00,1.00 +493,24.00,4.80,1.00,0.00,1.00 +494,-148.80,-9.60,1.00,0.00,1.00 +495,33.60,9.60,1.00,0.00,1.00 +496,-139.20,-9.60,1.00,0.00,1.00 +497,43.20,9.60,1.00,0.00,1.00 +498,-129.60,-14.40,1.00,0.00,1.00 +499,52.80,14.40,1.00,0.00,1.00 +500,-120.00,-14.40,1.00,0.00,1.00 +501,62.40,14.40,1.00,0.00,1.00 +502,-110.40,-14.40,1.00,0.00,1.00 +503,72.00,14.40,1.00,0.00,1.00 +504,-100.80,-14.40,1.00,0.00,1.00 +505,81.60,14.40,1.00,0.00,1.00 +506,-91.20,-14.40,1.00,0.00,1.00 +507,96.00,14.40,1.00,0.00,1.00 +508,-81.60,-14.40,1.00,0.00,1.00 +509,105.60,14.40,1.00,0.00,1.00 +510,-72.00,-14.40,1.00,0.00,1.00 +511,115.20,14.40,1.00,0.00,1.00 +512,-62.40,-14.40,1.00,0.00,1.00 +513,124.80,14.40,1.00,0.00,1.00 +514,-52.80,-14.40,1.00,0.00,1.00 +515,134.40,9.60,1.00,0.00,1.00 +516,-43.20,-9.60,1.00,0.00,1.00 +517,144.00,9.60,1.00,0.00,1.00 +518,-33.60,-9.60,1.00,0.00,1.00 +519,153.60,9.60,1.00,0.00,1.00 +520,-24.00,-4.80,1.00,0.00,1.00 +521,163.20,4.80,1.00,0.00,1.00 +522,-14.40,-4.80,1.00,0.00,1.00 +523,172.80,4.80,1.00,0.00,1.00 +524,-4.80,-0.00,1.00,0.00,1.00 +525,0.00,0.00,1.00,0.00,1.00 +526,-177.60,-0.00,1.00,0.00,1.00 +527,9.60,0.00,1.00,0.00,1.00 +528,-168.00,-4.80,1.00,0.00,1.00 +529,19.20,4.80,1.00,0.00,1.00 +530,-158.40,-4.80,1.00,0.00,1.00 +531,28.80,4.80,1.00,0.00,1.00 +532,-148.80,-4.80,1.00,0.00,1.00 +533,38.40,4.80,1.00,0.00,1.00 +534,-139.20,-9.60,1.00,0.00,1.00 +535,48.00,9.60,1.00,0.00,1.00 +536,-129.60,-9.60,1.00,0.00,1.00 +537,57.60,9.60,1.00,0.00,1.00 +538,-120.00,-9.60,1.00,0.00,1.00 +539,67.20,9.60,1.00,0.00,1.00 +540,-110.40,-9.60,1.00,0.00,1.00 +541,76.80,9.60,1.00,0.00,1.00 +542,-100.80,-9.60,1.00,0.00,1.00 +543,86.40,9.60,1.00,0.00,1.00 +544,-86.40,-9.60,1.00,0.00,1.00 +545,96.00,9.60,1.00,0.00,1.00 +546,-76.80,-9.60,1.00,0.00,1.00 +547,105.60,9.60,1.00,0.00,1.00 +548,-67.20,-9.60,1.00,0.00,1.00 +549,115.20,9.60,1.00,0.00,1.00 +550,-57.60,-9.60,1.00,0.00,1.00 +551,124.80,9.60,1.00,0.00,1.00 +552,-48.00,-9.60,1.00,0.00,1.00 +553,134.40,9.60,1.00,0.00,1.00 +554,-38.40,-9.60,1.00,0.00,1.00 +555,144.00,4.80,1.00,0.00,1.00 +556,-28.80,-4.80,1.00,0.00,1.00 +557,153.60,4.80,1.00,0.00,1.00 +558,-19.20,-4.80,1.00,0.00,1.00 +559,163.20,4.80,1.00,0.00,1.00 +560,-9.60,-0.00,1.00,0.00,1.00 +561,172.80,0.00,1.00,0.00,1.00 +562,-0.00,-0.00,1.00,0.00,1.00 +563,-177.60,-0.00,1.00,0.00,1.00 +564,4.80,0.00,1.00,0.00,1.00 +565,-168.00,-0.00,1.00,0.00,1.00 +566,14.40,4.80,1.00,0.00,1.00 +567,-158.40,-4.80,1.00,0.00,1.00 +568,24.00,4.80,1.00,0.00,1.00 +569,-148.80,-4.80,1.00,0.00,1.00 +570,33.60,4.80,1.00,0.00,1.00 +571,-139.20,-9.60,1.00,0.00,1.00 +572,43.20,9.60,1.00,0.00,1.00 +573,-129.60,-9.60,1.00,0.00,1.00 +574,52.80,9.60,1.00,0.00,1.00 +575,-120.00,-9.60,1.00,0.00,1.00 +576,62.40,9.60,1.00,0.00,1.00 +577,-110.40,-9.60,1.00,0.00,1.00 +578,72.00,9.60,1.00,0.00,1.00 +579,-100.80,-9.60,1.00,0.00,1.00 +580,81.60,9.60,1.00,0.00,1.00 +581,-91.20,-9.60,1.00,0.00,1.00 +582,96.00,9.60,1.00,0.00,1.00 +583,-81.60,-9.60,1.00,0.00,1.00 +584,105.60,9.60,1.00,0.00,1.00 +585,-72.00,-9.60,1.00,0.00,1.00 +586,115.20,9.60,1.00,0.00,1.00 +587,-62.40,-9.60,1.00,0.00,1.00 +588,124.80,9.60,1.00,0.00,1.00 +589,-52.80,-9.60,1.00,0.00,1.00 +590,134.40,9.60,1.00,0.00,1.00 +591,-43.20,-9.60,1.00,0.00,1.00 +592,144.00,4.80,1.00,0.00,1.00 +593,-33.60,-4.80,1.00,0.00,1.00 +594,153.60,4.80,1.00,0.00,1.00 +595,-24.00,-4.80,1.00,0.00,1.00 +596,163.20,4.80,1.00,0.00,1.00 +597,-14.40,-4.80,1.00,0.00,1.00 +598,172.80,0.00,1.00,0.00,1.00 +599,-4.80,-0.00,1.00,0.00,1.00 +600,0.00,0.00,1.00,0.00,1.00 +601,-177.60,-0.00,1.00,0.00,1.00 +602,9.60,0.00,1.00,0.00,1.00 +603,-168.00,-0.00,1.00,0.00,1.00 +604,19.20,0.00,1.00,0.00,1.00 +605,-158.40,-4.80,1.00,0.00,1.00 +606,28.80,4.80,1.00,0.00,1.00 +607,-148.80,-4.80,1.00,0.00,1.00 +608,38.40,4.80,1.00,0.00,1.00 +609,-139.20,-4.80,1.00,0.00,1.00 +610,48.00,4.80,1.00,0.00,1.00 +611,-129.60,-4.80,1.00,0.00,1.00 +612,57.60,4.80,1.00,0.00,1.00 +613,-120.00,-4.80,1.00,0.00,1.00 +614,67.20,4.80,1.00,0.00,1.00 +615,-110.40,-4.80,1.00,0.00,1.00 +616,76.80,4.80,1.00,0.00,1.00 +617,-100.80,-4.80,1.00,0.00,1.00 +618,86.40,4.80,1.00,0.00,1.00 +619,-86.40,-4.80,1.00,0.00,1.00 +620,96.00,4.80,1.00,0.00,1.00 +621,-76.80,-4.80,1.00,0.00,1.00 +622,105.60,4.80,1.00,0.00,1.00 +623,-67.20,-4.80,1.00,0.00,1.00 +624,115.20,4.80,1.00,0.00,1.00 +625,-57.60,-4.80,1.00,0.00,1.00 +626,124.80,4.80,1.00,0.00,1.00 +627,-48.00,-4.80,1.00,0.00,1.00 +628,134.40,4.80,1.00,0.00,1.00 +629,-38.40,-4.80,1.00,0.00,1.00 +630,144.00,4.80,1.00,0.00,1.00 +631,-28.80,-4.80,1.00,0.00,1.00 +632,153.60,4.80,1.00,0.00,1.00 +633,-19.20,-4.80,1.00,0.00,1.00 +634,163.20,0.00,1.00,0.00,1.00 +635,-9.60,-0.00,1.00,0.00,1.00 +636,172.80,0.00,1.00,0.00,1.00 +637,-0.00,-0.00,1.00,0.00,1.00 +638,-177.60,-0.00,1.00,0.00,1.00 +639,4.80,0.00,1.00,0.00,1.00 +640,-168.00,-0.00,1.00,0.00,1.00 +641,14.40,0.00,1.00,0.00,1.00 +642,-158.40,-4.80,1.00,0.00,1.00 +643,24.00,4.80,1.00,0.00,1.00 +644,-148.80,-4.80,1.00,0.00,1.00 +645,33.60,4.80,1.00,0.00,1.00 +646,-139.20,-4.80,1.00,0.00,1.00 +647,43.20,4.80,1.00,0.00,1.00 +648,-129.60,-4.80,1.00,0.00,1.00 +649,52.80,4.80,1.00,0.00,1.00 +650,-120.00,-4.80,1.00,0.00,1.00 +651,62.40,4.80,1.00,0.00,1.00 +652,-110.40,-4.80,1.00,0.00,1.00 +653,72.00,4.80,1.00,0.00,1.00 +654,-100.80,-4.80,1.00,0.00,1.00 +655,81.60,4.80,1.00,0.00,1.00 +656,-91.20,-4.80,1.00,0.00,1.00 +657,96.00,4.80,1.00,0.00,1.00 +658,-81.60,-4.80,1.00,0.00,1.00 +659,105.60,4.80,1.00,0.00,1.00 +660,-72.00,-4.80,1.00,0.00,1.00 +661,115.20,4.80,1.00,0.00,1.00 +662,-62.40,-4.80,1.00,0.00,1.00 +663,124.80,4.80,1.00,0.00,1.00 +664,-52.80,-4.80,1.00,0.00,1.00 +665,134.40,4.80,1.00,0.00,1.00 +666,-43.20,-4.80,1.00,0.00,1.00 +667,144.00,4.80,1.00,0.00,1.00 +668,-33.60,-4.80,1.00,0.00,1.00 +669,153.60,4.80,1.00,0.00,1.00 +670,-24.00,-4.80,1.00,0.00,1.00 +671,163.20,0.00,1.00,0.00,1.00 +672,-14.40,-0.00,1.00,0.00,1.00 +673,172.80,0.00,1.00,0.00,1.00 +674,-4.80,-0.00,1.00,0.00,1.00 +675,0.00,0.00,1.00,0.00,1.00 +676,-177.60,-0.00,1.00,0.00,1.00 +677,9.60,0.00,1.00,0.00,1.00 +678,-168.00,-0.00,1.00,0.00,1.00 +679,19.20,0.00,1.00,0.00,1.00 +680,-158.40,-0.00,1.00,0.00,1.00 +681,28.80,0.00,1.00,0.00,1.00 +682,-148.80,-0.00,1.00,0.00,1.00 +683,38.40,0.00,1.00,0.00,1.00 +684,-139.20,-0.00,1.00,0.00,1.00 +685,48.00,0.00,1.00,0.00,1.00 +686,-129.60,-0.00,1.00,0.00,1.00 +687,57.60,0.00,1.00,0.00,1.00 +688,-120.00,-0.00,1.00,0.00,1.00 +689,67.20,0.00,1.00,0.00,1.00 +690,-110.40,-0.00,1.00,0.00,1.00 +691,76.80,0.00,1.00,0.00,1.00 +692,-100.80,-0.00,1.00,0.00,1.00 +693,86.40,0.00,1.00,0.00,1.00 +694,-86.40,-0.00,1.00,0.00,1.00 +695,96.00,0.00,1.00,0.00,1.00 +696,-76.80,-0.00,1.00,0.00,1.00 +697,105.60,0.00,1.00,0.00,1.00 +698,-67.20,-0.00,1.00,0.00,1.00 +699,115.20,0.00,1.00,0.00,1.00 +700,-57.60,-0.00,1.00,0.00,1.00 +701,124.80,0.00,1.00,0.00,1.00 +702,-48.00,-0.00,1.00,0.00,1.00 +703,134.40,0.00,1.00,0.00,1.00 +704,-38.40,-0.00,1.00,0.00,1.00 +705,144.00,0.00,1.00,0.00,1.00 +706,-28.80,-0.00,1.00,0.00,1.00 +707,153.60,0.00,1.00,0.00,1.00 +708,-19.20,-0.00,1.00,0.00,1.00 +709,163.20,0.00,1.00,0.00,1.00 +710,-9.60,-0.00,1.00,0.00,1.00 +711,172.80,0.00,1.00,0.00,1.00 +712,-0.00,-0.00,1.00,0.00,1.00 +713,-177.60,-0.00,1.00,0.00,1.00 +714,4.80,0.00,1.00,0.00,1.00 +715,-168.00,-0.00,1.00,0.00,1.00 +716,14.40,0.00,1.00,0.00,1.00 +717,-158.40,-0.00,1.00,0.00,1.00 +718,24.00,0.00,1.00,0.00,1.00 +719,-148.80,-0.00,1.00,0.00,1.00 +720,33.60,0.00,1.00,0.00,1.00 +721,-139.20,-0.00,1.00,0.00,1.00 +722,43.20,0.00,1.00,0.00,1.00 +723,-129.60,-0.00,1.00,0.00,1.00 +724,52.80,0.00,1.00,0.00,1.00 +725,-120.00,-0.00,1.00,0.00,1.00 +726,62.40,0.00,1.00,0.00,1.00 +727,-110.40,-0.00,1.00,0.00,1.00 +728,72.00,0.00,1.00,0.00,1.00 +729,-100.80,-0.00,1.00,0.00,1.00 +730,81.60,0.00,1.00,0.00,1.00 +731,-91.20,-0.00,1.00,0.00,1.00 +732,96.00,0.00,1.00,0.00,1.00 +733,-81.60,-0.00,1.00,0.00,1.00 +734,105.60,0.00,1.00,0.00,1.00 +735,-72.00,-0.00,1.00,0.00,1.00 +736,115.20,0.00,1.00,0.00,1.00 +737,-62.40,-0.00,1.00,0.00,1.00 +738,124.80,0.00,1.00,0.00,1.00 +739,-52.80,-0.00,1.00,0.00,1.00 +740,134.40,0.00,1.00,0.00,1.00 +741,-43.20,-0.00,1.00,0.00,1.00 +742,144.00,0.00,1.00,0.00,1.00 +743,-33.60,-0.00,1.00,0.00,1.00 +744,153.60,0.00,1.00,0.00,1.00 +745,-24.00,-0.00,1.00,0.00,1.00 +746,163.20,0.00,1.00,0.00,1.00 +747,-14.40,-0.00,1.00,0.00,1.00 +748,172.80,0.00,1.00,0.00,1.00 +749,-4.80,-0.00,1.00,0.00,1.00 +750,0.00,0.00,1.00,0.00,1.00 +751,-177.60,0.00,1.00,0.00,1.00 +752,9.60,-0.00,1.00,0.00,1.00 +753,-168.00,0.00,1.00,0.00,1.00 +754,19.20,-0.00,1.00,0.00,1.00 +755,-158.40,0.00,1.00,0.00,1.00 +756,28.80,-0.00,1.00,0.00,1.00 +757,-148.80,0.00,1.00,0.00,1.00 +758,38.40,-0.00,1.00,0.00,1.00 +759,-139.20,0.00,1.00,0.00,1.00 +760,48.00,-0.00,1.00,0.00,1.00 +761,-129.60,0.00,1.00,0.00,1.00 +762,57.60,-4.80,1.00,0.00,1.00 +763,-120.00,4.80,1.00,0.00,1.00 +764,67.20,-4.80,1.00,0.00,1.00 +765,-110.40,4.80,1.00,0.00,1.00 +766,76.80,-4.80,1.00,0.00,1.00 +767,-100.80,4.80,1.00,0.00,1.00 +768,86.40,-4.80,1.00,0.00,1.00 +769,-86.40,4.80,1.00,0.00,1.00 +770,96.00,-4.80,1.00,0.00,1.00 +771,-76.80,4.80,1.00,0.00,1.00 +772,105.60,-4.80,1.00,0.00,1.00 +773,-67.20,4.80,1.00,0.00,1.00 +774,115.20,-4.80,1.00,0.00,1.00 +775,-57.60,4.80,1.00,0.00,1.00 +776,124.80,-4.80,1.00,0.00,1.00 +777,-48.00,0.00,1.00,0.00,1.00 +778,134.40,-0.00,1.00,0.00,1.00 +779,-38.40,0.00,1.00,0.00,1.00 +780,144.00,-0.00,1.00,0.00,1.00 +781,-28.80,0.00,1.00,0.00,1.00 +782,153.60,-0.00,1.00,0.00,1.00 +783,-19.20,0.00,1.00,0.00,1.00 +784,163.20,-0.00,1.00,0.00,1.00 +785,-9.60,0.00,1.00,0.00,1.00 +786,172.80,-0.00,1.00,0.00,1.00 +787,-0.00,0.00,1.00,0.00,1.00 +788,-177.60,0.00,1.00,0.00,1.00 +789,4.80,-0.00,1.00,0.00,1.00 +790,-168.00,0.00,1.00,0.00,1.00 +791,14.40,-0.00,1.00,0.00,1.00 +792,-158.40,0.00,1.00,0.00,1.00 +793,24.00,-0.00,1.00,0.00,1.00 +794,-148.80,0.00,1.00,0.00,1.00 +795,33.60,-0.00,1.00,0.00,1.00 +796,-139.20,0.00,1.00,0.00,1.00 +797,43.20,-0.00,1.00,0.00,1.00 +798,-129.60,0.00,1.00,0.00,1.00 +799,52.80,-4.80,1.00,0.00,1.00 +800,-120.00,4.80,1.00,0.00,1.00 +801,62.40,-4.80,1.00,0.00,1.00 +802,-110.40,4.80,1.00,0.00,1.00 +803,72.00,-4.80,1.00,0.00,1.00 +804,-100.80,4.80,1.00,0.00,1.00 +805,81.60,-4.80,1.00,0.00,1.00 +806,-91.20,4.80,1.00,0.00,1.00 +807,96.00,-4.80,1.00,0.00,1.00 +808,-81.60,4.80,1.00,0.00,1.00 +809,105.60,-4.80,1.00,0.00,1.00 +810,-72.00,4.80,1.00,0.00,1.00 +811,115.20,-4.80,1.00,0.00,1.00 +812,-62.40,4.80,1.00,0.00,1.00 +813,124.80,-4.80,1.00,0.00,1.00 +814,-52.80,0.00,1.00,0.00,1.00 +815,134.40,-0.00,1.00,0.00,1.00 +816,-43.20,0.00,1.00,0.00,1.00 +817,144.00,-0.00,1.00,0.00,1.00 +818,-33.60,0.00,1.00,0.00,1.00 +819,153.60,-0.00,1.00,0.00,1.00 +820,-24.00,0.00,1.00,0.00,1.00 +821,163.20,-0.00,1.00,0.00,1.00 +822,-14.40,0.00,1.00,0.00,1.00 +823,172.80,-0.00,1.00,0.00,1.00 +824,-4.80,0.00,1.00,0.00,1.00 +825,0.00,0.00,1.00,0.00,1.00 +826,-177.60,0.00,1.00,0.00,1.00 +827,9.60,-0.00,1.00,0.00,1.00 +828,-168.00,0.00,1.00,0.00,1.00 +829,19.20,-4.80,1.00,0.00,1.00 +830,-158.40,4.80,1.00,0.00,1.00 +831,28.80,-4.80,1.00,0.00,1.00 +832,-148.80,4.80,1.00,0.00,1.00 +833,38.40,-4.80,1.00,0.00,1.00 +834,-139.20,4.80,1.00,0.00,1.00 +835,48.00,-4.80,1.00,0.00,1.00 +836,-129.60,4.80,1.00,0.00,1.00 +837,57.60,-4.80,1.00,0.00,1.00 +838,-120.00,4.80,1.00,0.00,1.00 +839,67.20,-4.80,1.00,0.00,1.00 +840,-110.40,9.60,1.00,0.00,1.00 +841,76.80,-9.60,1.00,0.00,1.00 +842,-100.80,9.60,1.00,0.00,1.00 +843,86.40,-9.60,1.00,0.00,1.00 +844,-86.40,9.60,1.00,0.00,1.00 +845,96.00,-9.60,1.00,0.00,1.00 +846,-76.80,9.60,1.00,0.00,1.00 +847,105.60,-9.60,1.00,0.00,1.00 +848,-67.20,9.60,1.00,0.00,1.00 +849,115.20,-4.80,1.00,0.00,1.00 +850,-57.60,4.80,1.00,0.00,1.00 +851,124.80,-4.80,1.00,0.00,1.00 +852,-48.00,4.80,1.00,0.00,1.00 +853,134.40,-4.80,1.00,0.00,1.00 +854,-38.40,4.80,1.00,0.00,1.00 +855,144.00,-4.80,1.00,0.00,1.00 +856,-28.80,4.80,1.00,0.00,1.00 +857,153.60,-4.80,1.00,0.00,1.00 +858,-19.20,4.80,1.00,0.00,1.00 +859,163.20,-0.00,1.00,0.00,1.00 +860,-9.60,0.00,1.00,0.00,1.00 +861,172.80,-0.00,1.00,0.00,1.00 +862,-0.00,0.00,1.00,0.00,1.00 +863,-177.60,0.00,1.00,0.00,1.00 +864,4.80,-0.00,1.00,0.00,1.00 +865,-168.00,0.00,1.00,0.00,1.00 +866,14.40,-0.00,1.00,0.00,1.00 +867,-158.40,4.80,1.00,0.00,1.00 +868,24.00,-4.80,1.00,0.00,1.00 +869,-148.80,4.80,1.00,0.00,1.00 +870,33.60,-4.80,1.00,0.00,1.00 +871,-139.20,4.80,1.00,0.00,1.00 +872,43.20,-4.80,1.00,0.00,1.00 +873,-129.60,4.80,1.00,0.00,1.00 +874,52.80,-4.80,1.00,0.00,1.00 +875,-120.00,4.80,1.00,0.00,1.00 +876,62.40,-4.80,1.00,0.00,1.00 +877,-110.40,9.60,1.00,0.00,1.00 +878,72.00,-9.60,1.00,0.00,1.00 +879,-100.80,9.60,1.00,0.00,1.00 +880,81.60,-9.60,1.00,0.00,1.00 +881,-91.20,9.60,1.00,0.00,1.00 +882,96.00,-9.60,1.00,0.00,1.00 +883,-81.60,9.60,1.00,0.00,1.00 +884,105.60,-9.60,1.00,0.00,1.00 +885,-72.00,9.60,1.00,0.00,1.00 +886,115.20,-4.80,1.00,0.00,1.00 +887,-62.40,4.80,1.00,0.00,1.00 +888,124.80,-4.80,1.00,0.00,1.00 +889,-52.80,4.80,1.00,0.00,1.00 +890,134.40,-4.80,1.00,0.00,1.00 +891,-43.20,4.80,1.00,0.00,1.00 +892,144.00,-4.80,1.00,0.00,1.00 +893,-33.60,4.80,1.00,0.00,1.00 +894,153.60,-4.80,1.00,0.00,1.00 +895,-24.00,4.80,1.00,0.00,1.00 +896,163.20,-4.80,1.00,0.00,1.00 +897,-14.40,0.00,1.00,0.00,1.00 +898,172.80,-0.00,1.00,0.00,1.00 +899,-4.80,0.00,1.00,0.00,1.00 +900,0.00,0.00,1.00,0.00,1.00 +901,-177.60,0.00,1.00,0.00,1.00 +902,9.60,-0.00,1.00,0.00,1.00 +903,-168.00,4.80,1.00,0.00,1.00 +904,19.20,-4.80,1.00,0.00,1.00 +905,-158.40,4.80,1.00,0.00,1.00 +906,28.80,-4.80,1.00,0.00,1.00 +907,-148.80,4.80,1.00,0.00,1.00 +908,38.40,-9.60,1.00,0.00,1.00 +909,-139.20,9.60,1.00,0.00,1.00 +910,48.00,-9.60,1.00,0.00,1.00 +911,-129.60,9.60,1.00,0.00,1.00 +912,57.60,-9.60,1.00,0.00,1.00 +913,-120.00,9.60,1.00,0.00,1.00 +914,67.20,-9.60,1.00,0.00,1.00 +915,-110.40,9.60,1.00,0.00,1.00 +916,76.80,-14.40,1.00,0.00,1.00 +917,-100.80,14.40,1.00,0.00,1.00 +918,86.40,-14.40,1.00,0.00,1.00 +919,-86.40,14.40,1.00,0.00,1.00 +920,96.00,-14.40,1.00,0.00,1.00 +921,-76.80,14.40,1.00,0.00,1.00 +922,105.60,-14.40,1.00,0.00,1.00 +923,-67.20,9.60,1.00,0.00,1.00 +924,115.20,-9.60,1.00,0.00,1.00 +925,-57.60,9.60,1.00,0.00,1.00 +926,124.80,-9.60,1.00,0.00,1.00 +927,-48.00,9.60,1.00,0.00,1.00 +928,134.40,-9.60,1.00,0.00,1.00 +929,-38.40,9.60,1.00,0.00,1.00 +930,144.00,-9.60,1.00,0.00,1.00 +931,-28.80,4.80,1.00,0.00,1.00 +932,153.60,-4.80,1.00,0.00,1.00 +933,-19.20,4.80,1.00,0.00,1.00 +934,163.20,-4.80,1.00,0.00,1.00 +935,-9.60,4.80,1.00,0.00,1.00 +936,172.80,-0.00,1.00,0.00,1.00 +937,-0.00,0.00,1.00,0.00,1.00 +938,-177.60,0.00,1.00,0.00,1.00 +939,4.80,-0.00,1.00,0.00,1.00 +940,-168.00,4.80,1.00,0.00,1.00 +941,14.40,-4.80,1.00,0.00,1.00 +942,-158.40,4.80,1.00,0.00,1.00 +943,24.00,-4.80,1.00,0.00,1.00 +944,-148.80,4.80,1.00,0.00,1.00 +945,33.60,-9.60,1.00,0.00,1.00 +946,-139.20,9.60,1.00,0.00,1.00 +947,43.20,-9.60,1.00,0.00,1.00 +948,-129.60,9.60,1.00,0.00,1.00 +949,52.80,-9.60,1.00,0.00,1.00 +950,-120.00,9.60,1.00,0.00,1.00 +951,62.40,-9.60,1.00,0.00,1.00 +952,-110.40,9.60,1.00,0.00,1.00 +953,72.00,-14.40,1.00,0.00,1.00 +954,-100.80,14.40,1.00,0.00,1.00 +955,81.60,-14.40,1.00,0.00,1.00 +956,-91.20,14.40,1.00,0.00,1.00 +957,96.00,-14.40,1.00,0.00,1.00 +958,-81.60,14.40,1.00,0.00,1.00 +959,105.60,-14.40,1.00,0.00,1.00 +960,-72.00,9.60,1.00,0.00,1.00 +961,115.20,-9.60,1.00,0.00,1.00 +962,-62.40,9.60,1.00,0.00,1.00 +963,124.80,-9.60,1.00,0.00,1.00 +964,-52.80,9.60,1.00,0.00,1.00 +965,134.40,-9.60,1.00,0.00,1.00 +966,-43.20,9.60,1.00,0.00,1.00 +967,144.00,-9.60,1.00,0.00,1.00 +968,-33.60,4.80,1.00,0.00,1.00 +969,153.60,-4.80,1.00,0.00,1.00 +970,-24.00,4.80,1.00,0.00,1.00 +971,163.20,-4.80,1.00,0.00,1.00 +972,-14.40,4.80,1.00,0.00,1.00 +973,172.80,-0.00,1.00,0.00,1.00 +974,-4.80,0.00,1.00,0.00,1.00 +975,0.00,0.00,1.00,0.00,1.00 +976,-177.60,0.00,1.00,0.00,1.00 +977,9.60,-4.80,1.00,0.00,1.00 +978,-168.00,4.80,1.00,0.00,1.00 +979,19.20,-4.80,1.00,0.00,1.00 +980,-158.40,4.80,1.00,0.00,1.00 +981,28.80,-9.60,1.00,0.00,1.00 +982,-148.80,9.60,1.00,0.00,1.00 +983,38.40,-9.60,1.00,0.00,1.00 +984,-139.20,9.60,1.00,0.00,1.00 +985,48.00,-14.40,1.00,0.00,1.00 +986,-129.60,14.40,1.00,0.00,1.00 +987,57.60,-14.40,1.00,0.00,1.00 +988,-120.00,14.40,1.00,0.00,1.00 +989,67.20,-14.40,1.00,0.00,1.00 +990,-110.40,14.40,1.00,0.00,1.00 +991,76.80,-19.20,1.00,0.00,1.00 +992,-100.80,19.20,1.00,0.00,1.00 +993,86.40,-19.20,1.00,0.00,1.00 +994,-86.40,19.20,1.00,0.00,1.00 +995,96.00,-19.20,1.00,0.00,1.00 +996,-76.80,19.20,1.00,0.00,1.00 +997,105.60,-14.40,1.00,0.00,1.00 +998,-67.20,14.40,1.00,0.00,1.00 +999,115.20,-14.40,1.00,0.00,1.00 +1000,-57.60,14.40,1.00,0.00,1.00 +1001,124.80,-14.40,1.00,0.00,1.00 +1002,-48.00,14.40,1.00,0.00,1.00 +1003,134.40,-14.40,1.00,0.00,1.00 +1004,-38.40,9.60,1.00,0.00,1.00 +1005,144.00,-9.60,1.00,0.00,1.00 +1006,-28.80,9.60,1.00,0.00,1.00 +1007,153.60,-9.60,1.00,0.00,1.00 +1008,-19.20,4.80,1.00,0.00,1.00 +1009,163.20,-4.80,1.00,0.00,1.00 +1010,-9.60,4.80,1.00,0.00,1.00 +1011,172.80,-0.00,1.00,0.00,1.00 +1012,-0.00,0.00,1.00,0.00,1.00 +1013,-177.60,0.00,1.00,0.00,1.00 +1014,4.80,-0.00,1.00,0.00,1.00 +1015,-168.00,4.80,1.00,0.00,1.00 +1016,14.40,-4.80,1.00,0.00,1.00 +1017,-158.40,4.80,1.00,0.00,1.00 +1018,24.00,-9.60,1.00,0.00,1.00 +1019,-148.80,9.60,1.00,0.00,1.00 +1020,33.60,-9.60,1.00,0.00,1.00 +1021,-139.20,9.60,1.00,0.00,1.00 +1022,43.20,-14.40,1.00,0.00,1.00 +1023,-129.60,14.40,1.00,0.00,1.00 +1024,52.80,-14.40,1.00,0.00,1.00 +1025,-120.00,14.40,1.00,0.00,1.00 +1026,62.40,-14.40,1.00,0.00,1.00 +1027,-110.40,14.40,1.00,0.00,1.00 +1028,72.00,-14.40,1.00,0.00,1.00 +1029,-100.80,19.20,1.00,0.00,1.00 +1030,81.60,-19.20,1.00,0.00,1.00 +1031,-91.20,19.20,1.00,0.00,1.00 +1032,96.00,-19.20,1.00,0.00,1.00 +1033,-81.60,19.20,1.00,0.00,1.00 +1034,105.60,-19.20,1.00,0.00,1.00 +1035,-72.00,14.40,1.00,0.00,1.00 +1036,115.20,-14.40,1.00,0.00,1.00 +1037,-62.40,14.40,1.00,0.00,1.00 +1038,124.80,-14.40,1.00,0.00,1.00 +1039,-52.80,14.40,1.00,0.00,1.00 +1040,134.40,-14.40,1.00,0.00,1.00 +1041,-43.20,9.60,1.00,0.00,1.00 +1042,144.00,-9.60,1.00,0.00,1.00 +1043,-33.60,9.60,1.00,0.00,1.00 +1044,153.60,-9.60,1.00,0.00,1.00 +1045,-24.00,4.80,1.00,0.00,1.00 +1046,163.20,-4.80,1.00,0.00,1.00 +1047,-14.40,4.80,1.00,0.00,1.00 +1048,172.80,-4.80,1.00,0.00,1.00 +1049,-4.80,0.00,1.00,0.00,1.00 +1050,0.00,0.00,1.00,0.00,1.00 +1051,-177.60,0.00,1.00,0.00,1.00 +1052,9.60,-4.80,1.00,0.00,1.00 +1053,-168.00,4.80,1.00,0.00,1.00 +1054,19.20,-4.80,1.00,0.00,1.00 +1055,-158.40,9.60,1.00,0.00,1.00 +1056,28.80,-9.60,1.00,0.00,1.00 +1057,-148.80,14.40,1.00,0.00,1.00 +1058,38.40,-14.40,1.00,0.00,1.00 +1059,-139.20,14.40,1.00,0.00,1.00 +1060,48.00,-14.40,1.00,0.00,1.00 +1061,-129.60,19.20,1.00,0.00,1.00 +1062,57.60,-19.20,1.00,0.00,1.00 +1063,-120.00,19.20,1.00,0.00,1.00 +1064,67.20,-19.20,1.00,0.00,1.00 +1065,-110.40,19.20,1.00,0.00,1.00 +1066,76.80,-19.20,1.00,0.00,1.00 +1067,-100.80,24.00,1.00,0.00,1.00 +1068,86.40,-24.00,1.00,0.00,1.00 +1069,-86.40,24.00,1.00,0.00,1.00 +1070,96.00,-24.00,1.00,0.00,1.00 +1071,-76.80,24.00,1.00,0.00,1.00 +1072,105.60,-19.20,1.00,0.00,1.00 +1073,-67.20,19.20,1.00,0.00,1.00 +1074,115.20,-19.20,1.00,0.00,1.00 +1075,-57.60,19.20,1.00,0.00,1.00 +1076,124.80,-19.20,1.00,0.00,1.00 +1077,-48.00,19.20,1.00,0.00,1.00 +1078,134.40,-14.40,1.00,0.00,1.00 +1079,-38.40,14.40,1.00,0.00,1.00 +1080,144.00,-14.40,1.00,0.00,1.00 +1081,-28.80,9.60,1.00,0.00,1.00 +1082,153.60,-9.60,1.00,0.00,1.00 +1083,-19.20,9.60,1.00,0.00,1.00 +1084,163.20,-4.80,1.00,0.00,1.00 +1085,-9.60,4.80,1.00,0.00,1.00 +1086,172.80,-4.80,1.00,0.00,1.00 +1087,-0.00,0.00,1.00,0.00,1.00 +1088,-177.60,0.00,1.00,0.00,1.00 +1089,4.80,-4.80,1.00,0.00,1.00 +1090,-168.00,4.80,1.00,0.00,1.00 +1091,14.40,-4.80,1.00,0.00,1.00 +1092,-158.40,9.60,1.00,0.00,1.00 +1093,24.00,-9.60,1.00,0.00,1.00 +1094,-148.80,9.60,1.00,0.00,1.00 +1095,33.60,-14.40,1.00,0.00,1.00 +1096,-139.20,14.40,1.00,0.00,1.00 +1097,43.20,-14.40,1.00,0.00,1.00 +1098,-129.60,19.20,1.00,0.00,1.00 +1099,52.80,-19.20,1.00,0.00,1.00 +1100,-120.00,19.20,1.00,0.00,1.00 +1101,62.40,-19.20,1.00,0.00,1.00 +1102,-110.40,19.20,1.00,0.00,1.00 +1103,72.00,-19.20,1.00,0.00,1.00 +1104,-100.80,24.00,1.00,0.00,1.00 +1105,81.60,-24.00,1.00,0.00,1.00 +1106,-91.20,24.00,1.00,0.00,1.00 +1107,96.00,-24.00,1.00,0.00,1.00 +1108,-81.60,24.00,1.00,0.00,1.00 +1109,105.60,-19.20,1.00,0.00,1.00 +1110,-72.00,19.20,1.00,0.00,1.00 +1111,115.20,-19.20,1.00,0.00,1.00 +1112,-62.40,19.20,1.00,0.00,1.00 +1113,124.80,-19.20,1.00,0.00,1.00 +1114,-52.80,19.20,1.00,0.00,1.00 +1115,134.40,-14.40,1.00,0.00,1.00 +1116,-43.20,14.40,1.00,0.00,1.00 +1117,144.00,-14.40,1.00,0.00,1.00 +1118,-33.60,14.40,1.00,0.00,1.00 +1119,153.60,-9.60,1.00,0.00,1.00 +1120,-24.00,9.60,1.00,0.00,1.00 +1121,163.20,-4.80,1.00,0.00,1.00 +1122,-14.40,4.80,1.00,0.00,1.00 +1123,172.80,-4.80,1.00,0.00,1.00 +1124,-4.80,0.00,1.00,0.00,1.00 +1125,0.00,0.00,1.00,0.00,1.00 +1126,-177.60,0.00,1.00,0.00,1.00 +1127,9.60,-4.80,1.00,0.00,1.00 +1128,-168.00,4.80,1.00,0.00,1.00 +1129,19.20,-9.60,1.00,0.00,1.00 +1130,-158.40,9.60,1.00,0.00,1.00 +1131,24.00,-14.40,1.00,0.00,1.00 +1132,-148.80,14.40,1.00,0.00,1.00 +1133,33.60,-14.40,1.00,0.00,1.00 +1134,-139.20,19.20,1.00,0.00,1.00 +1135,43.20,-19.20,1.00,0.00,1.00 +1136,-129.60,19.20,1.00,0.00,1.00 +1137,52.80,-24.00,1.00,0.00,1.00 +1138,-120.00,24.00,1.00,0.00,1.00 +1139,62.40,-24.00,1.00,0.00,1.00 +1140,-110.40,24.00,1.00,0.00,1.00 +1141,76.80,-24.00,1.00,0.00,1.00 +1142,-100.80,28.80,1.00,0.00,1.00 +1143,86.40,-28.80,1.00,0.00,1.00 +1144,-86.40,28.80,1.00,0.00,1.00 +1145,96.00,-28.80,1.00,0.00,1.00 +1146,-76.80,28.80,1.00,0.00,1.00 +1147,105.60,-24.00,1.00,0.00,1.00 +1148,-67.20,24.00,1.00,0.00,1.00 +1149,120.00,-24.00,1.00,0.00,1.00 +1150,-57.60,24.00,1.00,0.00,1.00 +1151,129.60,-24.00,1.00,0.00,1.00 +1152,-48.00,19.20,1.00,0.00,1.00 +1153,139.20,-19.20,1.00,0.00,1.00 +1154,-38.40,19.20,1.00,0.00,1.00 +1155,148.80,-14.40,1.00,0.00,1.00 +1156,-28.80,14.40,1.00,0.00,1.00 +1157,158.40,-9.60,1.00,0.00,1.00 +1158,-19.20,9.60,1.00,0.00,1.00 +1159,163.20,-9.60,1.00,0.00,1.00 +1160,-9.60,4.80,1.00,0.00,1.00 +1161,172.80,-4.80,1.00,0.00,1.00 +1162,-0.00,0.00,1.00,0.00,1.00 +1163,-177.60,0.00,1.00,0.00,1.00 +1164,4.80,-4.80,1.00,0.00,1.00 +1165,-168.00,4.80,1.00,0.00,1.00 +1166,14.40,-9.60,1.00,0.00,1.00 +1167,-158.40,9.60,1.00,0.00,1.00 +1168,24.00,-9.60,1.00,0.00,1.00 +1169,-153.60,14.40,1.00,0.00,1.00 +1170,33.60,-14.40,1.00,0.00,1.00 +1171,-144.00,19.20,1.00,0.00,1.00 +1172,43.20,-19.20,1.00,0.00,1.00 +1173,-134.40,19.20,1.00,0.00,1.00 +1174,52.80,-24.00,1.00,0.00,1.00 +1175,-124.80,24.00,1.00,0.00,1.00 +1176,62.40,-24.00,1.00,0.00,1.00 +1177,-110.40,24.00,1.00,0.00,1.00 +1178,72.00,-24.00,1.00,0.00,1.00 +1179,-100.80,28.80,1.00,0.00,1.00 +1180,81.60,-28.80,1.00,0.00,1.00 +1181,-91.20,28.80,1.00,0.00,1.00 +1182,96.00,-28.80,1.00,0.00,1.00 +1183,-81.60,28.80,1.00,0.00,1.00 +1184,105.60,-24.00,1.00,0.00,1.00 +1185,-72.00,24.00,1.00,0.00,1.00 +1186,115.20,-24.00,1.00,0.00,1.00 +1187,-57.60,24.00,1.00,0.00,1.00 +1188,124.80,-24.00,1.00,0.00,1.00 +1189,-48.00,19.20,1.00,0.00,1.00 +1190,134.40,-19.20,1.00,0.00,1.00 +1191,-38.40,19.20,1.00,0.00,1.00 +1192,144.00,-14.40,1.00,0.00,1.00 +1193,-28.80,14.40,1.00,0.00,1.00 +1194,153.60,-14.40,1.00,0.00,1.00 +1195,-24.00,9.60,1.00,0.00,1.00 +1196,163.20,-9.60,1.00,0.00,1.00 +1197,-14.40,4.80,1.00,0.00,1.00 +1198,172.80,-4.80,1.00,0.00,1.00 +1199,-4.80,0.00,1.00,0.00,1.00 +1200,0.00,0.00,1.00,0.00,1.00 +1201,-177.60,4.80,1.00,0.00,1.00 +1202,9.60,-4.80,1.00,0.00,1.00 +1203,-168.00,9.60,1.00,0.00,1.00 +1204,14.40,-9.60,1.00,0.00,1.00 +1205,-158.40,14.40,1.00,0.00,1.00 +1206,24.00,-14.40,1.00,0.00,1.00 +1207,-148.80,19.20,1.00,0.00,1.00 +1208,33.60,-19.20,1.00,0.00,1.00 +1209,-139.20,19.20,1.00,0.00,1.00 +1210,43.20,-24.00,1.00,0.00,1.00 +1211,-129.60,24.00,1.00,0.00,1.00 +1212,52.80,-28.80,1.00,0.00,1.00 +1213,-120.00,28.80,1.00,0.00,1.00 +1214,62.40,-28.80,1.00,0.00,1.00 +1215,-110.40,28.80,1.00,0.00,1.00 +1216,76.80,-28.80,1.00,0.00,1.00 +1217,-100.80,33.60,1.00,0.00,1.00 +1218,86.40,-33.60,1.00,0.00,1.00 +1219,-86.40,33.60,1.00,0.00,1.00 +1220,96.00,-33.60,1.00,0.00,1.00 +1221,-76.80,28.80,1.00,0.00,1.00 +1222,110.40,-28.80,1.00,0.00,1.00 +1223,-67.20,28.80,1.00,0.00,1.00 +1224,120.00,-28.80,1.00,0.00,1.00 +1225,-57.60,28.80,1.00,0.00,1.00 +1226,129.60,-24.00,1.00,0.00,1.00 +1227,-48.00,24.00,1.00,0.00,1.00 +1228,139.20,-24.00,1.00,0.00,1.00 +1229,-38.40,19.20,1.00,0.00,1.00 +1230,148.80,-19.20,1.00,0.00,1.00 +1231,-28.80,14.40,1.00,0.00,1.00 +1232,158.40,-14.40,1.00,0.00,1.00 +1233,-19.20,9.60,1.00,0.00,1.00 +1234,168.00,-9.60,1.00,0.00,1.00 +1235,-9.60,4.80,1.00,0.00,1.00 +1236,172.80,-4.80,1.00,0.00,1.00 +1237,-0.00,0.00,1.00,0.00,1.00 +1238,-177.60,0.00,1.00,0.00,1.00 +1239,4.80,-4.80,1.00,0.00,1.00 +1240,-168.00,4.80,1.00,0.00,1.00 +1241,14.40,-9.60,1.00,0.00,1.00 +1242,-163.20,9.60,1.00,0.00,1.00 +1243,24.00,-14.40,1.00,0.00,1.00 +1244,-153.60,14.40,1.00,0.00,1.00 +1245,33.60,-19.20,1.00,0.00,1.00 +1246,-144.00,19.20,1.00,0.00,1.00 +1247,43.20,-24.00,1.00,0.00,1.00 +1248,-134.40,24.00,1.00,0.00,1.00 +1249,52.80,-24.00,1.00,0.00,1.00 +1250,-124.80,28.80,1.00,0.00,1.00 +1251,62.40,-28.80,1.00,0.00,1.00 +1252,-115.20,28.80,1.00,0.00,1.00 +1253,72.00,-28.80,1.00,0.00,1.00 +1254,-100.80,28.80,1.00,0.00,1.00 +1255,81.60,-33.60,1.00,0.00,1.00 +1256,-91.20,33.60,1.00,0.00,1.00 +1257,96.00,-33.60,1.00,0.00,1.00 +1258,-81.60,33.60,1.00,0.00,1.00 +1259,105.60,-28.80,1.00,0.00,1.00 +1260,-67.20,28.80,1.00,0.00,1.00 +1261,115.20,-28.80,1.00,0.00,1.00 +1262,-57.60,28.80,1.00,0.00,1.00 +1263,124.80,-28.80,1.00,0.00,1.00 +1264,-48.00,24.00,1.00,0.00,1.00 +1265,134.40,-24.00,1.00,0.00,1.00 +1266,-38.40,19.20,1.00,0.00,1.00 +1267,144.00,-19.20,1.00,0.00,1.00 +1268,-28.80,19.20,1.00,0.00,1.00 +1269,153.60,-14.40,1.00,0.00,1.00 +1270,-19.20,14.40,1.00,0.00,1.00 +1271,163.20,-9.60,1.00,0.00,1.00 +1272,-14.40,9.60,1.00,0.00,1.00 +1273,172.80,-4.80,1.00,0.00,1.00 +1274,-4.80,4.80,1.00,0.00,1.00 +1275,0.00,0.00,1.00,0.00,1.00 +1276,-177.60,4.80,1.00,0.00,1.00 +1277,9.60,-4.80,1.00,0.00,1.00 +1278,-168.00,9.60,1.00,0.00,1.00 +1279,14.40,-9.60,1.00,0.00,1.00 +1280,-158.40,14.40,1.00,0.00,1.00 +1281,24.00,-14.40,1.00,0.00,1.00 +1282,-153.60,19.20,1.00,0.00,1.00 +1283,33.60,-24.00,1.00,0.00,1.00 +1284,-144.00,24.00,1.00,0.00,1.00 +1285,43.20,-24.00,1.00,0.00,1.00 +1286,-134.40,28.80,1.00,0.00,1.00 +1287,52.80,-28.80,1.00,0.00,1.00 +1288,-124.80,33.60,1.00,0.00,1.00 +1289,62.40,-33.60,1.00,0.00,1.00 +1290,-110.40,33.60,1.00,0.00,1.00 +1291,72.00,-33.60,1.00,0.00,1.00 +1292,-100.80,38.40,1.00,0.00,1.00 +1293,86.40,-38.40,1.00,0.00,1.00 +1294,-86.40,38.40,1.00,0.00,1.00 +1295,96.00,-38.40,1.00,0.00,1.00 +1296,-76.80,33.60,1.00,0.00,1.00 +1297,110.40,-33.60,1.00,0.00,1.00 +1298,-67.20,33.60,1.00,0.00,1.00 +1299,120.00,-33.60,1.00,0.00,1.00 +1300,-52.80,28.80,1.00,0.00,1.00 +1301,129.60,-28.80,1.00,0.00,1.00 +1302,-43.20,28.80,1.00,0.00,1.00 +1303,139.20,-24.00,1.00,0.00,1.00 +1304,-33.60,24.00,1.00,0.00,1.00 +1305,148.80,-19.20,1.00,0.00,1.00 +1306,-24.00,19.20,1.00,0.00,1.00 +1307,158.40,-14.40,1.00,0.00,1.00 +1308,-19.20,14.40,1.00,0.00,1.00 +1309,168.00,-9.60,1.00,0.00,1.00 +1310,-9.60,4.80,1.00,0.00,1.00 +1311,172.80,-4.80,1.00,0.00,1.00 +1312,-0.00,0.00,1.00,0.00,1.00 +1313,-177.60,0.00,1.00,0.00,1.00 +1314,4.80,-4.80,1.00,0.00,1.00 +1315,-168.00,4.80,1.00,0.00,1.00 +1316,14.40,-9.60,1.00,0.00,1.00 +1317,-163.20,14.40,1.00,0.00,1.00 +1318,24.00,-14.40,1.00,0.00,1.00 +1319,-153.60,19.20,1.00,0.00,1.00 +1320,28.80,-19.20,1.00,0.00,1.00 +1321,-144.00,24.00,1.00,0.00,1.00 +1322,38.40,-24.00,1.00,0.00,1.00 +1323,-134.40,28.80,1.00,0.00,1.00 +1324,48.00,-28.80,1.00,0.00,1.00 +1325,-124.80,28.80,1.00,0.00,1.00 +1326,57.60,-33.60,1.00,0.00,1.00 +1327,-115.20,33.60,1.00,0.00,1.00 +1328,72.00,-33.60,1.00,0.00,1.00 +1329,-105.60,33.60,1.00,0.00,1.00 +1330,81.60,-38.40,1.00,0.00,1.00 +1331,-91.20,38.40,1.00,0.00,1.00 +1332,96.00,-38.40,1.00,0.00,1.00 +1333,-81.60,38.40,1.00,0.00,1.00 +1334,105.60,-33.60,1.00,0.00,1.00 +1335,-67.20,33.60,1.00,0.00,1.00 +1336,120.00,-33.60,1.00,0.00,1.00 +1337,-57.60,33.60,1.00,0.00,1.00 +1338,129.60,-28.80,1.00,0.00,1.00 +1339,-48.00,28.80,1.00,0.00,1.00 +1340,139.20,-24.00,1.00,0.00,1.00 +1341,-38.40,24.00,1.00,0.00,1.00 +1342,148.80,-24.00,1.00,0.00,1.00 +1343,-28.80,19.20,1.00,0.00,1.00 +1344,158.40,-14.40,1.00,0.00,1.00 +1345,-19.20,14.40,1.00,0.00,1.00 +1346,163.20,-9.60,1.00,0.00,1.00 +1347,-9.60,9.60,1.00,0.00,1.00 +1348,172.80,-4.80,1.00,0.00,1.00 +1349,-4.80,4.80,1.00,0.00,1.00 +1350,0.00,0.00,1.00,0.00,1.00 +1351,-177.60,4.80,1.00,0.00,1.00 +1352,9.60,-4.80,1.00,0.00,1.00 +1353,-168.00,9.60,1.00,0.00,1.00 +1354,14.40,-14.40,1.00,0.00,1.00 +1355,-163.20,14.40,1.00,0.00,1.00 +1356,24.00,-19.20,1.00,0.00,1.00 +1357,-153.60,19.20,1.00,0.00,1.00 +1358,28.80,-24.00,1.00,0.00,1.00 +1359,-144.00,28.80,1.00,0.00,1.00 +1360,38.40,-28.80,1.00,0.00,1.00 +1361,-134.40,33.60,1.00,0.00,1.00 +1362,48.00,-33.60,1.00,0.00,1.00 +1363,-124.80,33.60,1.00,0.00,1.00 +1364,62.40,-38.40,1.00,0.00,1.00 +1365,-115.20,38.40,1.00,0.00,1.00 +1366,72.00,-38.40,1.00,0.00,1.00 +1367,-100.80,43.20,1.00,0.00,1.00 +1368,86.40,-43.20,1.00,0.00,1.00 +1369,-86.40,43.20,1.00,0.00,1.00 +1370,96.00,-43.20,1.00,0.00,1.00 +1371,-76.80,38.40,1.00,0.00,1.00 +1372,110.40,-38.40,1.00,0.00,1.00 +1373,-62.40,38.40,1.00,0.00,1.00 +1374,120.00,-38.40,1.00,0.00,1.00 +1375,-52.80,33.60,1.00,0.00,1.00 +1376,134.40,-33.60,1.00,0.00,1.00 +1377,-43.20,28.80,1.00,0.00,1.00 +1378,144.00,-28.80,1.00,0.00,1.00 +1379,-33.60,24.00,1.00,0.00,1.00 +1380,153.60,-24.00,1.00,0.00,1.00 +1381,-24.00,19.20,1.00,0.00,1.00 +1382,158.40,-19.20,1.00,0.00,1.00 +1383,-14.40,14.40,1.00,0.00,1.00 +1384,168.00,-9.60,1.00,0.00,1.00 +1385,-9.60,9.60,1.00,0.00,1.00 +1386,172.80,-4.80,1.00,0.00,1.00 +1387,-0.00,0.00,1.00,0.00,1.00 +1388,-177.60,0.00,1.00,0.00,1.00 +1389,4.80,-4.80,1.00,0.00,1.00 +1390,-172.80,9.60,1.00,0.00,1.00 +1391,14.40,-9.60,1.00,0.00,1.00 +1392,-163.20,14.40,1.00,0.00,1.00 +1393,19.20,-19.20,1.00,0.00,1.00 +1394,-153.60,19.20,1.00,0.00,1.00 +1395,28.80,-24.00,1.00,0.00,1.00 +1396,-148.80,24.00,1.00,0.00,1.00 +1397,38.40,-28.80,1.00,0.00,1.00 +1398,-139.20,28.80,1.00,0.00,1.00 +1399,48.00,-33.60,1.00,0.00,1.00 +1400,-129.60,33.60,1.00,0.00,1.00 +1401,57.60,-38.40,1.00,0.00,1.00 +1402,-115.20,38.40,1.00,0.00,1.00 +1403,67.20,-38.40,1.00,0.00,1.00 +1404,-105.60,38.40,1.00,0.00,1.00 +1405,81.60,-43.20,1.00,0.00,1.00 +1406,-91.20,43.20,1.00,0.00,1.00 +1407,96.00,-43.20,1.00,0.00,1.00 +1408,-76.80,43.20,1.00,0.00,1.00 +1409,105.60,-38.40,1.00,0.00,1.00 +1410,-67.20,38.40,1.00,0.00,1.00 +1411,120.00,-38.40,1.00,0.00,1.00 +1412,-52.80,33.60,1.00,0.00,1.00 +1413,129.60,-33.60,1.00,0.00,1.00 +1414,-43.20,33.60,1.00,0.00,1.00 +1415,139.20,-28.80,1.00,0.00,1.00 +1416,-33.60,28.80,1.00,0.00,1.00 +1417,148.80,-24.00,1.00,0.00,1.00 +1418,-28.80,19.20,1.00,0.00,1.00 +1419,158.40,-19.20,1.00,0.00,1.00 +1420,-19.20,14.40,1.00,0.00,1.00 +1421,163.20,-14.40,1.00,0.00,1.00 +1422,-9.60,9.60,1.00,0.00,1.00 +1423,172.80,-4.80,1.00,0.00,1.00 +1424,-4.80,4.80,1.00,0.00,1.00 +1425,0.00,0.00,1.00,0.00,1.00 +1426,-177.60,4.80,1.00,0.00,1.00 +1427,4.80,-4.80,1.00,0.00,1.00 +1428,-168.00,9.60,1.00,0.00,1.00 +1429,14.40,-14.40,1.00,0.00,1.00 +1430,-163.20,19.20,1.00,0.00,1.00 +1431,19.20,-19.20,1.00,0.00,1.00 +1432,-153.60,24.00,1.00,0.00,1.00 +1433,28.80,-28.80,1.00,0.00,1.00 +1434,-148.80,28.80,1.00,0.00,1.00 +1435,38.40,-33.60,1.00,0.00,1.00 +1436,-139.20,33.60,1.00,0.00,1.00 +1437,48.00,-38.40,1.00,0.00,1.00 +1438,-124.80,38.40,1.00,0.00,1.00 +1439,57.60,-43.20,1.00,0.00,1.00 +1440,-115.20,43.20,1.00,0.00,1.00 +1441,72.00,-43.20,1.00,0.00,1.00 +1442,-100.80,43.20,1.00,0.00,1.00 +1443,86.40,-48.00,1.00,0.00,1.00 +1444,-86.40,48.00,1.00,0.00,1.00 +1445,100.80,-48.00,1.00,0.00,1.00 +1446,-76.80,43.20,1.00,0.00,1.00 +1447,110.40,-43.20,1.00,0.00,1.00 +1448,-62.40,43.20,1.00,0.00,1.00 +1449,124.80,-38.40,1.00,0.00,1.00 +1450,-48.00,38.40,1.00,0.00,1.00 +1451,134.40,-38.40,1.00,0.00,1.00 +1452,-38.40,33.60,1.00,0.00,1.00 +1453,144.00,-28.80,1.00,0.00,1.00 +1454,-28.80,28.80,1.00,0.00,1.00 +1455,153.60,-24.00,1.00,0.00,1.00 +1456,-24.00,24.00,1.00,0.00,1.00 +1457,163.20,-19.20,1.00,0.00,1.00 +1458,-14.40,14.40,1.00,0.00,1.00 +1459,168.00,-14.40,1.00,0.00,1.00 +1460,-9.60,9.60,1.00,0.00,1.00 +1461,172.80,-4.80,1.00,0.00,1.00 +1462,-0.00,0.00,1.00,0.00,1.00 +1463,-177.60,0.00,1.00,0.00,1.00 +1464,4.80,-4.80,1.00,0.00,1.00 +1465,-172.80,9.60,1.00,0.00,1.00 +1466,9.60,-14.40,1.00,0.00,1.00 +1467,-163.20,14.40,1.00,0.00,1.00 +1468,19.20,-19.20,1.00,0.00,1.00 +1469,-158.40,24.00,1.00,0.00,1.00 +1470,28.80,-24.00,1.00,0.00,1.00 +1471,-148.80,28.80,1.00,0.00,1.00 +1472,33.60,-28.80,1.00,0.00,1.00 +1473,-139.20,33.60,1.00,0.00,1.00 +1474,43.20,-38.40,1.00,0.00,1.00 +1475,-129.60,38.40,1.00,0.00,1.00 +1476,57.60,-38.40,1.00,0.00,1.00 +1477,-120.00,43.20,1.00,0.00,1.00 +1478,67.20,-43.20,1.00,0.00,1.00 +1479,-105.60,43.20,1.00,0.00,1.00 +1480,81.60,-48.00,1.00,0.00,1.00 +1481,-91.20,48.00,1.00,0.00,1.00 +1482,96.00,-48.00,1.00,0.00,1.00 +1483,-76.80,43.20,1.00,0.00,1.00 +1484,110.40,-43.20,1.00,0.00,1.00 +1485,-67.20,43.20,1.00,0.00,1.00 +1486,120.00,-43.20,1.00,0.00,1.00 +1487,-52.80,38.40,1.00,0.00,1.00 +1488,134.40,-38.40,1.00,0.00,1.00 +1489,-43.20,33.60,1.00,0.00,1.00 +1490,144.00,-33.60,1.00,0.00,1.00 +1491,-33.60,28.80,1.00,0.00,1.00 +1492,153.60,-28.80,1.00,0.00,1.00 +1493,-24.00,24.00,1.00,0.00,1.00 +1494,158.40,-19.20,1.00,0.00,1.00 +1495,-19.20,19.20,1.00,0.00,1.00 +1496,168.00,-14.40,1.00,0.00,1.00 +1497,-9.60,9.60,1.00,0.00,1.00 +1498,172.80,-4.80,1.00,0.00,1.00 +1499,-4.80,4.80,1.00,0.00,1.00 diff --git a/scripts/testv/stvISM4.csv b/scripts/testv/stvISM4.csv new file mode 100644 index 0000000000..f3a2884ff0 --- /dev/null +++ b/scripts/testv/stvISM4.csv @@ -0,0 +1,1500 @@ +0,-0.00,0.00,1.00,0.00,1.00 +1,-0.00,4.80,1.00,0.00,1.00 +2,-0.00,9.60,1.00,0.00,1.00 +3,-0.00,14.40,1.00,0.00,1.00 +4,-0.00,19.20,1.00,0.00,1.00 +5,-0.00,24.00,1.00,0.00,1.00 +6,-0.00,28.80,1.00,0.00,1.00 +7,-0.00,33.60,1.00,0.00,1.00 +8,-0.00,38.40,1.00,0.00,1.00 +9,-0.00,43.20,1.00,0.00,1.00 +10,-0.00,48.00,1.00,0.00,1.00 +11,-0.00,52.80,1.00,0.00,1.00 +12,-0.00,57.60,1.00,0.00,1.00 +13,-0.00,62.40,1.00,0.00,1.00 +14,-0.00,67.20,1.00,0.00,1.00 +15,-0.00,72.00,1.00,0.00,1.00 +16,-0.00,76.80,1.00,0.00,1.00 +17,-0.00,81.60,1.00,0.00,1.00 +18,-0.00,86.40,1.00,0.00,1.00 +19,-177.60,91.20,1.00,0.00,1.00 +20,-177.60,86.40,1.00,0.00,1.00 +21,-177.60,81.60,1.00,0.00,1.00 +22,-177.60,76.80,1.00,0.00,1.00 +23,-177.60,72.00,1.00,0.00,1.00 +24,-177.60,67.20,1.00,0.00,1.00 +25,177.60,62.40,1.00,0.00,1.00 +26,177.60,57.60,1.00,0.00,1.00 +27,177.60,52.80,1.00,0.00,1.00 +28,177.60,48.00,1.00,0.00,1.00 +29,177.60,43.20,1.00,0.00,1.00 +30,177.60,38.40,1.00,0.00,1.00 +31,177.60,33.60,1.00,0.00,1.00 +32,177.60,28.80,1.00,0.00,1.00 +33,177.60,24.00,1.00,0.00,1.00 +34,177.60,19.20,1.00,0.00,1.00 +35,177.60,14.40,1.00,0.00,1.00 +36,177.60,9.60,1.00,0.00,1.00 +37,177.60,4.80,1.00,0.00,1.00 +38,-177.60,-0.00,1.00,0.00,1.00 +39,-177.60,-4.80,1.00,0.00,1.00 +40,-177.60,-9.60,1.00,0.00,1.00 +41,-177.60,-14.40,1.00,0.00,1.00 +42,-177.60,-19.20,1.00,0.00,1.00 +43,-177.60,-24.00,1.00,0.00,1.00 +44,-177.60,-28.80,1.00,0.00,1.00 +45,-177.60,-33.60,1.00,0.00,1.00 +46,-177.60,-38.40,1.00,0.00,1.00 +47,-177.60,-48.00,1.00,0.00,1.00 +48,-177.60,-48.00,1.00,0.00,1.00 +49,-177.60,-52.80,1.00,0.00,1.00 +50,-177.60,-57.60,1.00,0.00,1.00 +51,177.60,-62.40,1.00,0.00,1.00 +52,177.60,-67.20,1.00,0.00,1.00 +53,177.60,-76.80,1.00,0.00,1.00 +54,177.60,-76.80,1.00,0.00,1.00 +55,177.60,-86.40,1.00,0.00,1.00 +56,177.60,-91.20,1.00,0.00,1.00 +57,0.00,-86.40,1.00,0.00,1.00 +58,0.00,-81.60,1.00,0.00,1.00 +59,0.00,-76.80,1.00,0.00,1.00 +60,0.00,-72.00,1.00,0.00,1.00 +61,0.00,-67.20,1.00,0.00,1.00 +62,0.00,-62.40,1.00,0.00,1.00 +63,0.00,-57.60,1.00,0.00,1.00 +64,0.00,-52.80,1.00,0.00,1.00 +65,0.00,-48.00,1.00,0.00,1.00 +66,0.00,-43.20,1.00,0.00,1.00 +67,0.00,-38.40,1.00,0.00,1.00 +68,0.00,-33.60,1.00,0.00,1.00 +69,0.00,-28.80,1.00,0.00,1.00 +70,0.00,-24.00,1.00,0.00,1.00 +71,0.00,-19.20,1.00,0.00,1.00 +72,0.00,-14.40,1.00,0.00,1.00 +73,0.00,-9.60,1.00,0.00,1.00 +74,0.00,-4.80,1.00,0.00,1.00 +75,0.00,0.00,1.00,0.00,1.00 +76,0.00,4.80,1.00,0.00,1.00 +77,0.00,9.60,1.00,0.00,1.00 +78,0.00,14.40,1.00,0.00,1.00 +79,0.00,19.20,1.00,0.00,1.00 +80,0.00,24.00,1.00,0.00,1.00 +81,4.80,28.80,1.00,0.00,1.00 +82,4.80,33.60,1.00,0.00,1.00 +83,4.80,38.40,1.00,0.00,1.00 +84,4.80,43.20,1.00,0.00,1.00 +85,4.80,48.00,1.00,0.00,1.00 +86,4.80,52.80,1.00,0.00,1.00 +87,9.60,57.60,1.00,0.00,1.00 +88,9.60,62.40,1.00,0.00,1.00 +89,9.60,67.20,1.00,0.00,1.00 +90,14.40,72.00,1.00,0.00,1.00 +91,19.20,76.80,1.00,0.00,1.00 +92,28.80,81.60,1.00,0.00,1.00 +93,52.80,86.40,1.00,0.00,1.00 +94,105.60,86.40,1.00,0.00,1.00 +95,139.20,81.60,1.00,0.00,1.00 +96,158.40,76.80,1.00,0.00,1.00 +97,163.20,72.00,1.00,0.00,1.00 +98,168.00,67.20,1.00,0.00,1.00 +99,168.00,62.40,1.00,0.00,1.00 +100,172.80,57.60,1.00,0.00,1.00 +101,172.80,52.80,1.00,0.00,1.00 +102,172.80,48.00,1.00,0.00,1.00 +103,172.80,43.20,1.00,0.00,1.00 +104,177.60,38.40,1.00,0.00,1.00 +105,177.60,33.60,1.00,0.00,1.00 +106,177.60,28.80,1.00,0.00,1.00 +107,177.60,24.00,1.00,0.00,1.00 +108,177.60,19.20,1.00,0.00,1.00 +109,177.60,14.40,1.00,0.00,1.00 +110,177.60,9.60,1.00,0.00,1.00 +111,177.60,4.80,1.00,0.00,1.00 +112,177.60,0.00,1.00,0.00,1.00 +113,-177.60,-0.00,1.00,0.00,1.00 +114,-177.60,-4.80,1.00,0.00,1.00 +115,-177.60,-9.60,1.00,0.00,1.00 +116,-177.60,-14.40,1.00,0.00,1.00 +117,-177.60,-19.20,1.00,0.00,1.00 +118,-177.60,-24.00,1.00,0.00,1.00 +119,-177.60,-28.80,1.00,0.00,1.00 +120,-177.60,-33.60,1.00,0.00,1.00 +121,-177.60,-38.40,1.00,0.00,1.00 +122,-172.80,-43.20,1.00,0.00,1.00 +123,-172.80,-48.00,1.00,0.00,1.00 +124,-172.80,-52.80,1.00,0.00,1.00 +125,-172.80,-57.60,1.00,0.00,1.00 +126,-168.00,-62.40,1.00,0.00,1.00 +127,-168.00,-67.20,1.00,0.00,1.00 +128,-163.20,-72.00,1.00,0.00,1.00 +129,-158.40,-76.80,1.00,0.00,1.00 +130,-139.20,-81.60,1.00,0.00,1.00 +131,-105.60,-86.40,1.00,0.00,1.00 +132,-52.80,-86.40,1.00,0.00,1.00 +133,-28.80,-81.60,1.00,0.00,1.00 +134,-19.20,-76.80,1.00,0.00,1.00 +135,-14.40,-72.00,1.00,0.00,1.00 +136,-9.60,-67.20,1.00,0.00,1.00 +137,-9.60,-62.40,1.00,0.00,1.00 +138,-9.60,-57.60,1.00,0.00,1.00 +139,-4.80,-52.80,1.00,0.00,1.00 +140,-4.80,-48.00,1.00,0.00,1.00 +141,-4.80,-43.20,1.00,0.00,1.00 +142,-4.80,-38.40,1.00,0.00,1.00 +143,-4.80,-33.60,1.00,0.00,1.00 +144,-4.80,-28.80,1.00,0.00,1.00 +145,-0.00,-24.00,1.00,0.00,1.00 +146,-0.00,-19.20,1.00,0.00,1.00 +147,-0.00,-14.40,1.00,0.00,1.00 +148,-0.00,-9.60,1.00,0.00,1.00 +149,-0.00,-4.80,1.00,0.00,1.00 +150,0.00,0.00,1.00,0.00,1.00 +151,0.00,4.80,1.00,0.00,1.00 +152,0.00,9.60,1.00,0.00,1.00 +153,4.80,14.40,1.00,0.00,1.00 +154,4.80,19.20,1.00,0.00,1.00 +155,4.80,24.00,1.00,0.00,1.00 +156,4.80,28.80,1.00,0.00,1.00 +157,4.80,33.60,1.00,0.00,1.00 +158,9.60,38.40,1.00,0.00,1.00 +159,9.60,43.20,1.00,0.00,1.00 +160,9.60,48.00,1.00,0.00,1.00 +161,14.40,52.80,1.00,0.00,1.00 +162,14.40,57.60,1.00,0.00,1.00 +163,19.20,62.40,1.00,0.00,1.00 +164,24.00,67.20,1.00,0.00,1.00 +165,28.80,72.00,1.00,0.00,1.00 +166,33.60,72.00,1.00,0.00,1.00 +167,48.00,76.80,1.00,0.00,1.00 +168,67.20,81.60,1.00,0.00,1.00 +169,96.00,81.60,1.00,0.00,1.00 +170,120.00,76.80,1.00,0.00,1.00 +171,139.20,76.80,1.00,0.00,1.00 +172,148.80,72.00,1.00,0.00,1.00 +173,153.60,67.20,1.00,0.00,1.00 +174,158.40,62.40,1.00,0.00,1.00 +175,163.20,57.60,1.00,0.00,1.00 +176,168.00,52.80,1.00,0.00,1.00 +177,168.00,48.00,1.00,0.00,1.00 +178,168.00,43.20,1.00,0.00,1.00 +179,172.80,38.40,1.00,0.00,1.00 +180,172.80,33.60,1.00,0.00,1.00 +181,172.80,28.80,1.00,0.00,1.00 +182,177.60,24.00,1.00,0.00,1.00 +183,177.60,19.20,1.00,0.00,1.00 +184,177.60,14.40,1.00,0.00,1.00 +185,177.60,9.60,1.00,0.00,1.00 +186,177.60,4.80,1.00,0.00,1.00 +187,177.60,0.00,1.00,0.00,1.00 +188,-177.60,-0.00,1.00,0.00,1.00 +189,-177.60,-4.80,1.00,0.00,1.00 +190,-177.60,-9.60,1.00,0.00,1.00 +191,-177.60,-14.40,1.00,0.00,1.00 +192,-177.60,-19.20,1.00,0.00,1.00 +193,-177.60,-24.00,1.00,0.00,1.00 +194,-172.80,-28.80,1.00,0.00,1.00 +195,-172.80,-33.60,1.00,0.00,1.00 +196,-172.80,-38.40,1.00,0.00,1.00 +197,-168.00,-43.20,1.00,0.00,1.00 +198,-168.00,-48.00,1.00,0.00,1.00 +199,-168.00,-52.80,1.00,0.00,1.00 +200,-163.20,-57.60,1.00,0.00,1.00 +201,-158.40,-62.40,1.00,0.00,1.00 +202,-153.60,-67.20,1.00,0.00,1.00 +203,-148.80,-72.00,1.00,0.00,1.00 +204,-139.20,-76.80,1.00,0.00,1.00 +205,-120.00,-76.80,1.00,0.00,1.00 +206,-96.00,-81.60,1.00,0.00,1.00 +207,-67.20,-81.60,1.00,0.00,1.00 +208,-48.00,-76.80,1.00,0.00,1.00 +209,-33.60,-72.00,1.00,0.00,1.00 +210,-28.80,-72.00,1.00,0.00,1.00 +211,-24.00,-67.20,1.00,0.00,1.00 +212,-19.20,-62.40,1.00,0.00,1.00 +213,-14.40,-57.60,1.00,0.00,1.00 +214,-14.40,-52.80,1.00,0.00,1.00 +215,-9.60,-48.00,1.00,0.00,1.00 +216,-9.60,-43.20,1.00,0.00,1.00 +217,-9.60,-38.40,1.00,0.00,1.00 +218,-4.80,-33.60,1.00,0.00,1.00 +219,-4.80,-28.80,1.00,0.00,1.00 +220,-4.80,-24.00,1.00,0.00,1.00 +221,-4.80,-19.20,1.00,0.00,1.00 +222,-4.80,-14.40,1.00,0.00,1.00 +223,-0.00,-9.60,1.00,0.00,1.00 +224,-0.00,-4.80,1.00,0.00,1.00 +225,0.00,0.00,1.00,0.00,1.00 +226,0.00,4.80,1.00,0.00,1.00 +227,4.80,9.60,1.00,0.00,1.00 +228,4.80,14.40,1.00,0.00,1.00 +229,4.80,19.20,1.00,0.00,1.00 +230,4.80,24.00,1.00,0.00,1.00 +231,9.60,28.80,1.00,0.00,1.00 +232,9.60,33.60,1.00,0.00,1.00 +233,9.60,38.40,1.00,0.00,1.00 +234,14.40,43.20,1.00,0.00,1.00 +235,14.40,48.00,1.00,0.00,1.00 +236,19.20,52.80,1.00,0.00,1.00 +237,19.20,52.80,1.00,0.00,1.00 +238,24.00,57.60,1.00,0.00,1.00 +239,28.80,62.40,1.00,0.00,1.00 +240,38.40,67.20,1.00,0.00,1.00 +241,48.00,72.00,1.00,0.00,1.00 +242,57.60,72.00,1.00,0.00,1.00 +243,76.80,76.80,1.00,0.00,1.00 +244,96.00,76.80,1.00,0.00,1.00 +245,115.20,76.80,1.00,0.00,1.00 +246,129.60,72.00,1.00,0.00,1.00 +247,139.20,67.20,1.00,0.00,1.00 +248,144.00,67.20,1.00,0.00,1.00 +249,153.60,62.40,1.00,0.00,1.00 +250,158.40,57.60,1.00,0.00,1.00 +251,158.40,52.80,1.00,0.00,1.00 +252,163.20,48.00,1.00,0.00,1.00 +253,168.00,43.20,1.00,0.00,1.00 +254,168.00,38.40,1.00,0.00,1.00 +255,168.00,33.60,1.00,0.00,1.00 +256,172.80,28.80,1.00,0.00,1.00 +257,172.80,24.00,1.00,0.00,1.00 +258,172.80,19.20,1.00,0.00,1.00 +259,177.60,14.40,1.00,0.00,1.00 +260,177.60,9.60,1.00,0.00,1.00 +261,177.60,4.80,1.00,0.00,1.00 +262,177.60,0.00,1.00,0.00,1.00 +263,-177.60,-0.00,1.00,0.00,1.00 +264,-177.60,-4.80,1.00,0.00,1.00 +265,-177.60,-9.60,1.00,0.00,1.00 +266,-177.60,-14.40,1.00,0.00,1.00 +267,-172.80,-19.20,1.00,0.00,1.00 +268,-172.80,-24.00,1.00,0.00,1.00 +269,-172.80,-28.80,1.00,0.00,1.00 +270,-168.00,-33.60,1.00,0.00,1.00 +271,-168.00,-38.40,1.00,0.00,1.00 +272,-168.00,-43.20,1.00,0.00,1.00 +273,-163.20,-48.00,1.00,0.00,1.00 +274,-158.40,-52.80,1.00,0.00,1.00 +275,-158.40,-57.60,1.00,0.00,1.00 +276,-153.60,-62.40,1.00,0.00,1.00 +277,-144.00,-67.20,1.00,0.00,1.00 +278,-139.20,-67.20,1.00,0.00,1.00 +279,-129.60,-72.00,1.00,0.00,1.00 +280,-115.20,-76.80,1.00,0.00,1.00 +281,-96.00,-76.80,1.00,0.00,1.00 +282,-76.80,-76.80,1.00,0.00,1.00 +283,-57.60,-72.00,1.00,0.00,1.00 +284,-48.00,-72.00,1.00,0.00,1.00 +285,-38.40,-67.20,1.00,0.00,1.00 +286,-28.80,-62.40,1.00,0.00,1.00 +287,-24.00,-57.60,1.00,0.00,1.00 +288,-19.20,-52.80,1.00,0.00,1.00 +289,-19.20,-52.80,1.00,0.00,1.00 +290,-14.40,-48.00,1.00,0.00,1.00 +291,-14.40,-43.20,1.00,0.00,1.00 +292,-9.60,-38.40,1.00,0.00,1.00 +293,-9.60,-33.60,1.00,0.00,1.00 +294,-9.60,-28.80,1.00,0.00,1.00 +295,-4.80,-24.00,1.00,0.00,1.00 +296,-4.80,-19.20,1.00,0.00,1.00 +297,-4.80,-14.40,1.00,0.00,1.00 +298,-4.80,-9.60,1.00,0.00,1.00 +299,-0.00,-4.80,1.00,0.00,1.00 +300,0.00,0.00,1.00,0.00,1.00 +301,0.00,4.80,1.00,0.00,1.00 +302,4.80,9.60,1.00,0.00,1.00 +303,4.80,14.40,1.00,0.00,1.00 +304,4.80,19.20,1.00,0.00,1.00 +305,9.60,24.00,1.00,0.00,1.00 +306,9.60,28.80,1.00,0.00,1.00 +307,14.40,33.60,1.00,0.00,1.00 +308,14.40,33.60,1.00,0.00,1.00 +309,19.20,38.40,1.00,0.00,1.00 +310,19.20,43.20,1.00,0.00,1.00 +311,24.00,48.00,1.00,0.00,1.00 +312,28.80,52.80,1.00,0.00,1.00 +313,33.60,57.60,1.00,0.00,1.00 +314,38.40,62.40,1.00,0.00,1.00 +315,43.20,62.40,1.00,0.00,1.00 +316,52.80,67.20,1.00,0.00,1.00 +317,67.20,67.20,1.00,0.00,1.00 +318,76.80,72.00,1.00,0.00,1.00 +319,96.00,72.00,1.00,0.00,1.00 +320,105.60,72.00,1.00,0.00,1.00 +321,120.00,67.20,1.00,0.00,1.00 +322,129.60,67.20,1.00,0.00,1.00 +323,139.20,62.40,1.00,0.00,1.00 +324,144.00,57.60,1.00,0.00,1.00 +325,148.80,52.80,1.00,0.00,1.00 +326,153.60,52.80,1.00,0.00,1.00 +327,158.40,48.00,1.00,0.00,1.00 +328,163.20,43.20,1.00,0.00,1.00 +329,163.20,38.40,1.00,0.00,1.00 +330,168.00,33.60,1.00,0.00,1.00 +331,168.00,28.80,1.00,0.00,1.00 +332,172.80,24.00,1.00,0.00,1.00 +333,172.80,19.20,1.00,0.00,1.00 +334,172.80,14.40,1.00,0.00,1.00 +335,177.60,9.60,1.00,0.00,1.00 +336,177.60,4.80,1.00,0.00,1.00 +337,177.60,0.00,1.00,0.00,1.00 +338,-177.60,-0.00,1.00,0.00,1.00 +339,-177.60,-4.80,1.00,0.00,1.00 +340,-177.60,-9.60,1.00,0.00,1.00 +341,-172.80,-14.40,1.00,0.00,1.00 +342,-172.80,-19.20,1.00,0.00,1.00 +343,-172.80,-24.00,1.00,0.00,1.00 +344,-168.00,-28.80,1.00,0.00,1.00 +345,-168.00,-33.60,1.00,0.00,1.00 +346,-163.20,-38.40,1.00,0.00,1.00 +347,-163.20,-43.20,1.00,0.00,1.00 +348,-158.40,-48.00,1.00,0.00,1.00 +349,-153.60,-52.80,1.00,0.00,1.00 +350,-148.80,-52.80,1.00,0.00,1.00 +351,-144.00,-57.60,1.00,0.00,1.00 +352,-139.20,-62.40,1.00,0.00,1.00 +353,-129.60,-67.20,1.00,0.00,1.00 +354,-120.00,-67.20,1.00,0.00,1.00 +355,-105.60,-72.00,1.00,0.00,1.00 +356,-96.00,-72.00,1.00,0.00,1.00 +357,-76.80,-72.00,1.00,0.00,1.00 +358,-67.20,-67.20,1.00,0.00,1.00 +359,-52.80,-67.20,1.00,0.00,1.00 +360,-43.20,-62.40,1.00,0.00,1.00 +361,-38.40,-62.40,1.00,0.00,1.00 +362,-33.60,-57.60,1.00,0.00,1.00 +363,-28.80,-52.80,1.00,0.00,1.00 +364,-24.00,-48.00,1.00,0.00,1.00 +365,-19.20,-43.20,1.00,0.00,1.00 +366,-19.20,-38.40,1.00,0.00,1.00 +367,-14.40,-33.60,1.00,0.00,1.00 +368,-14.40,-33.60,1.00,0.00,1.00 +369,-9.60,-28.80,1.00,0.00,1.00 +370,-9.60,-24.00,1.00,0.00,1.00 +371,-4.80,-19.20,1.00,0.00,1.00 +372,-4.80,-14.40,1.00,0.00,1.00 +373,-4.80,-9.60,1.00,0.00,1.00 +374,-0.00,-4.80,1.00,0.00,1.00 +375,0.00,0.00,1.00,0.00,1.00 +376,0.00,4.80,1.00,0.00,1.00 +377,4.80,9.60,1.00,0.00,1.00 +378,4.80,14.40,1.00,0.00,1.00 +379,9.60,19.20,1.00,0.00,1.00 +380,9.60,24.00,1.00,0.00,1.00 +381,14.40,24.00,1.00,0.00,1.00 +382,14.40,28.80,1.00,0.00,1.00 +383,19.20,33.60,1.00,0.00,1.00 +384,19.20,38.40,1.00,0.00,1.00 +385,24.00,43.20,1.00,0.00,1.00 +386,28.80,48.00,1.00,0.00,1.00 +387,33.60,52.80,1.00,0.00,1.00 +388,38.40,52.80,1.00,0.00,1.00 +389,43.20,57.60,1.00,0.00,1.00 +390,52.80,62.40,1.00,0.00,1.00 +391,62.40,62.40,1.00,0.00,1.00 +392,72.00,62.40,1.00,0.00,1.00 +393,81.60,67.20,1.00,0.00,1.00 +394,91.20,67.20,1.00,0.00,1.00 +395,105.60,67.20,1.00,0.00,1.00 +396,115.20,62.40,1.00,0.00,1.00 +397,124.80,62.40,1.00,0.00,1.00 +398,134.40,57.60,1.00,0.00,1.00 +399,139.20,57.60,1.00,0.00,1.00 +400,144.00,52.80,1.00,0.00,1.00 +401,148.80,48.00,1.00,0.00,1.00 +402,153.60,43.20,1.00,0.00,1.00 +403,158.40,38.40,1.00,0.00,1.00 +404,158.40,38.40,1.00,0.00,1.00 +405,163.20,33.60,1.00,0.00,1.00 +406,168.00,28.80,1.00,0.00,1.00 +407,168.00,24.00,1.00,0.00,1.00 +408,172.80,19.20,1.00,0.00,1.00 +409,172.80,14.40,1.00,0.00,1.00 +410,172.80,9.60,1.00,0.00,1.00 +411,177.60,4.80,1.00,0.00,1.00 +412,177.60,0.00,1.00,0.00,1.00 +413,-177.60,-0.00,1.00,0.00,1.00 +414,-177.60,-4.80,1.00,0.00,1.00 +415,-172.80,-9.60,1.00,0.00,1.00 +416,-172.80,-14.40,1.00,0.00,1.00 +417,-172.80,-19.20,1.00,0.00,1.00 +418,-168.00,-24.00,1.00,0.00,1.00 +419,-168.00,-28.80,1.00,0.00,1.00 +420,-163.20,-33.60,1.00,0.00,1.00 +421,-158.40,-38.40,1.00,0.00,1.00 +422,-158.40,-38.40,1.00,0.00,1.00 +423,-153.60,-43.20,1.00,0.00,1.00 +424,-148.80,-48.00,1.00,0.00,1.00 +425,-144.00,-52.80,1.00,0.00,1.00 +426,-139.20,-57.60,1.00,0.00,1.00 +427,-134.40,-57.60,1.00,0.00,1.00 +428,-124.80,-62.40,1.00,0.00,1.00 +429,-115.20,-62.40,1.00,0.00,1.00 +430,-105.60,-67.20,1.00,0.00,1.00 +431,-91.20,-67.20,1.00,0.00,1.00 +432,-81.60,-67.20,1.00,0.00,1.00 +433,-72.00,-62.40,1.00,0.00,1.00 +434,-62.40,-62.40,1.00,0.00,1.00 +435,-52.80,-62.40,1.00,0.00,1.00 +436,-43.20,-57.60,1.00,0.00,1.00 +437,-38.40,-52.80,1.00,0.00,1.00 +438,-33.60,-52.80,1.00,0.00,1.00 +439,-28.80,-48.00,1.00,0.00,1.00 +440,-24.00,-43.20,1.00,0.00,1.00 +441,-19.20,-38.40,1.00,0.00,1.00 +442,-19.20,-33.60,1.00,0.00,1.00 +443,-14.40,-28.80,1.00,0.00,1.00 +444,-14.40,-24.00,1.00,0.00,1.00 +445,-9.60,-24.00,1.00,0.00,1.00 +446,-9.60,-19.20,1.00,0.00,1.00 +447,-4.80,-14.40,1.00,0.00,1.00 +448,-4.80,-9.60,1.00,0.00,1.00 +449,-0.00,-4.80,1.00,0.00,1.00 +450,0.00,0.00,1.00,0.00,1.00 +451,0.00,4.80,1.00,0.00,1.00 +452,4.80,9.60,1.00,0.00,1.00 +453,4.80,14.40,1.00,0.00,1.00 +454,9.60,14.40,1.00,0.00,1.00 +455,14.40,19.20,1.00,0.00,1.00 +456,14.40,24.00,1.00,0.00,1.00 +457,19.20,28.80,1.00,0.00,1.00 +458,19.20,33.60,1.00,0.00,1.00 +459,24.00,38.40,1.00,0.00,1.00 +460,28.80,38.40,1.00,0.00,1.00 +461,33.60,43.20,1.00,0.00,1.00 +462,38.40,48.00,1.00,0.00,1.00 +463,43.20,52.80,1.00,0.00,1.00 +464,48.00,52.80,1.00,0.00,1.00 +465,57.60,57.60,1.00,0.00,1.00 +466,62.40,57.60,1.00,0.00,1.00 +467,72.00,62.40,1.00,0.00,1.00 +468,81.60,62.40,1.00,0.00,1.00 +469,91.20,62.40,1.00,0.00,1.00 +470,100.80,62.40,1.00,0.00,1.00 +471,110.40,57.60,1.00,0.00,1.00 +472,120.00,57.60,1.00,0.00,1.00 +473,129.60,57.60,1.00,0.00,1.00 +474,134.40,52.80,1.00,0.00,1.00 +475,139.20,48.00,1.00,0.00,1.00 +476,144.00,48.00,1.00,0.00,1.00 +477,148.80,43.20,1.00,0.00,1.00 +478,153.60,38.40,1.00,0.00,1.00 +479,158.40,33.60,1.00,0.00,1.00 +480,158.40,28.80,1.00,0.00,1.00 +481,163.20,28.80,1.00,0.00,1.00 +482,168.00,24.00,1.00,0.00,1.00 +483,168.00,19.20,1.00,0.00,1.00 +484,172.80,14.40,1.00,0.00,1.00 +485,172.80,9.60,1.00,0.00,1.00 +486,177.60,4.80,1.00,0.00,1.00 +487,177.60,0.00,1.00,0.00,1.00 +488,-177.60,-0.00,1.00,0.00,1.00 +489,-177.60,-4.80,1.00,0.00,1.00 +490,-172.80,-9.60,1.00,0.00,1.00 +491,-172.80,-14.40,1.00,0.00,1.00 +492,-168.00,-19.20,1.00,0.00,1.00 +493,-168.00,-24.00,1.00,0.00,1.00 +494,-163.20,-28.80,1.00,0.00,1.00 +495,-158.40,-28.80,1.00,0.00,1.00 +496,-158.40,-33.60,1.00,0.00,1.00 +497,-153.60,-38.40,1.00,0.00,1.00 +498,-148.80,-43.20,1.00,0.00,1.00 +499,-144.00,-48.00,1.00,0.00,1.00 +500,-139.20,-48.00,1.00,0.00,1.00 +501,-134.40,-52.80,1.00,0.00,1.00 +502,-129.60,-57.60,1.00,0.00,1.00 +503,-120.00,-57.60,1.00,0.00,1.00 +504,-110.40,-57.60,1.00,0.00,1.00 +505,-100.80,-62.40,1.00,0.00,1.00 +506,-91.20,-62.40,1.00,0.00,1.00 +507,-81.60,-62.40,1.00,0.00,1.00 +508,-72.00,-62.40,1.00,0.00,1.00 +509,-62.40,-57.60,1.00,0.00,1.00 +510,-57.60,-57.60,1.00,0.00,1.00 +511,-48.00,-52.80,1.00,0.00,1.00 +512,-43.20,-52.80,1.00,0.00,1.00 +513,-38.40,-48.00,1.00,0.00,1.00 +514,-33.60,-43.20,1.00,0.00,1.00 +515,-28.80,-38.40,1.00,0.00,1.00 +516,-24.00,-38.40,1.00,0.00,1.00 +517,-19.20,-33.60,1.00,0.00,1.00 +518,-19.20,-28.80,1.00,0.00,1.00 +519,-14.40,-24.00,1.00,0.00,1.00 +520,-14.40,-19.20,1.00,0.00,1.00 +521,-9.60,-14.40,1.00,0.00,1.00 +522,-4.80,-14.40,1.00,0.00,1.00 +523,-4.80,-9.60,1.00,0.00,1.00 +524,-0.00,-4.80,1.00,0.00,1.00 +525,0.00,0.00,1.00,0.00,1.00 +526,4.80,4.80,1.00,0.00,1.00 +527,4.80,9.60,1.00,0.00,1.00 +528,9.60,9.60,1.00,0.00,1.00 +529,9.60,14.40,1.00,0.00,1.00 +530,14.40,19.20,1.00,0.00,1.00 +531,19.20,24.00,1.00,0.00,1.00 +532,19.20,28.80,1.00,0.00,1.00 +533,24.00,28.80,1.00,0.00,1.00 +534,28.80,33.60,1.00,0.00,1.00 +535,33.60,38.40,1.00,0.00,1.00 +536,38.40,43.20,1.00,0.00,1.00 +537,43.20,43.20,1.00,0.00,1.00 +538,48.00,48.00,1.00,0.00,1.00 +539,52.80,48.00,1.00,0.00,1.00 +540,57.60,52.80,1.00,0.00,1.00 +541,67.20,52.80,1.00,0.00,1.00 +542,76.80,57.60,1.00,0.00,1.00 +543,81.60,57.60,1.00,0.00,1.00 +544,91.20,57.60,1.00,0.00,1.00 +545,100.80,57.60,1.00,0.00,1.00 +546,110.40,52.80,1.00,0.00,1.00 +547,115.20,52.80,1.00,0.00,1.00 +548,124.80,52.80,1.00,0.00,1.00 +549,129.60,48.00,1.00,0.00,1.00 +550,134.40,48.00,1.00,0.00,1.00 +551,139.20,43.20,1.00,0.00,1.00 +552,144.00,38.40,1.00,0.00,1.00 +553,148.80,38.40,1.00,0.00,1.00 +554,153.60,33.60,1.00,0.00,1.00 +555,158.40,28.80,1.00,0.00,1.00 +556,163.20,24.00,1.00,0.00,1.00 +557,163.20,24.00,1.00,0.00,1.00 +558,168.00,19.20,1.00,0.00,1.00 +559,172.80,14.40,1.00,0.00,1.00 +560,172.80,9.60,1.00,0.00,1.00 +561,177.60,4.80,1.00,0.00,1.00 +562,177.60,0.00,1.00,0.00,1.00 +563,-177.60,-0.00,1.00,0.00,1.00 +564,-177.60,-4.80,1.00,0.00,1.00 +565,-172.80,-9.60,1.00,0.00,1.00 +566,-172.80,-14.40,1.00,0.00,1.00 +567,-168.00,-19.20,1.00,0.00,1.00 +568,-163.20,-24.00,1.00,0.00,1.00 +569,-163.20,-24.00,1.00,0.00,1.00 +570,-158.40,-28.80,1.00,0.00,1.00 +571,-153.60,-33.60,1.00,0.00,1.00 +572,-148.80,-38.40,1.00,0.00,1.00 +573,-144.00,-38.40,1.00,0.00,1.00 +574,-139.20,-43.20,1.00,0.00,1.00 +575,-134.40,-48.00,1.00,0.00,1.00 +576,-129.60,-48.00,1.00,0.00,1.00 +577,-124.80,-52.80,1.00,0.00,1.00 +578,-115.20,-52.80,1.00,0.00,1.00 +579,-110.40,-52.80,1.00,0.00,1.00 +580,-100.80,-57.60,1.00,0.00,1.00 +581,-91.20,-57.60,1.00,0.00,1.00 +582,-81.60,-57.60,1.00,0.00,1.00 +583,-76.80,-57.60,1.00,0.00,1.00 +584,-67.20,-52.80,1.00,0.00,1.00 +585,-57.60,-52.80,1.00,0.00,1.00 +586,-52.80,-48.00,1.00,0.00,1.00 +587,-48.00,-48.00,1.00,0.00,1.00 +588,-43.20,-43.20,1.00,0.00,1.00 +589,-38.40,-43.20,1.00,0.00,1.00 +590,-33.60,-38.40,1.00,0.00,1.00 +591,-28.80,-33.60,1.00,0.00,1.00 +592,-24.00,-28.80,1.00,0.00,1.00 +593,-19.20,-28.80,1.00,0.00,1.00 +594,-19.20,-24.00,1.00,0.00,1.00 +595,-14.40,-19.20,1.00,0.00,1.00 +596,-9.60,-14.40,1.00,0.00,1.00 +597,-9.60,-9.60,1.00,0.00,1.00 +598,-4.80,-9.60,1.00,0.00,1.00 +599,-4.80,-4.80,1.00,0.00,1.00 +600,0.00,0.00,1.00,0.00,1.00 +601,4.80,4.80,1.00,0.00,1.00 +602,4.80,9.60,1.00,0.00,1.00 +603,9.60,9.60,1.00,0.00,1.00 +604,14.40,14.40,1.00,0.00,1.00 +605,14.40,19.20,1.00,0.00,1.00 +606,19.20,24.00,1.00,0.00,1.00 +607,24.00,24.00,1.00,0.00,1.00 +608,24.00,28.80,1.00,0.00,1.00 +609,28.80,33.60,1.00,0.00,1.00 +610,33.60,33.60,1.00,0.00,1.00 +611,38.40,38.40,1.00,0.00,1.00 +612,43.20,43.20,1.00,0.00,1.00 +613,48.00,43.20,1.00,0.00,1.00 +614,57.60,48.00,1.00,0.00,1.00 +615,62.40,48.00,1.00,0.00,1.00 +616,67.20,48.00,1.00,0.00,1.00 +617,76.80,52.80,1.00,0.00,1.00 +618,86.40,52.80,1.00,0.00,1.00 +619,91.20,52.80,1.00,0.00,1.00 +620,100.80,52.80,1.00,0.00,1.00 +621,105.60,48.00,1.00,0.00,1.00 +622,115.20,48.00,1.00,0.00,1.00 +623,120.00,48.00,1.00,0.00,1.00 +624,124.80,43.20,1.00,0.00,1.00 +625,134.40,43.20,1.00,0.00,1.00 +626,139.20,38.40,1.00,0.00,1.00 +627,144.00,38.40,1.00,0.00,1.00 +628,148.80,33.60,1.00,0.00,1.00 +629,153.60,28.80,1.00,0.00,1.00 +630,153.60,28.80,1.00,0.00,1.00 +631,158.40,24.00,1.00,0.00,1.00 +632,163.20,19.20,1.00,0.00,1.00 +633,168.00,14.40,1.00,0.00,1.00 +634,168.00,14.40,1.00,0.00,1.00 +635,172.80,9.60,1.00,0.00,1.00 +636,177.60,4.80,1.00,0.00,1.00 +637,177.60,0.00,1.00,0.00,1.00 +638,-177.60,-0.00,1.00,0.00,1.00 +639,-177.60,-4.80,1.00,0.00,1.00 +640,-172.80,-9.60,1.00,0.00,1.00 +641,-168.00,-14.40,1.00,0.00,1.00 +642,-168.00,-14.40,1.00,0.00,1.00 +643,-163.20,-19.20,1.00,0.00,1.00 +644,-158.40,-24.00,1.00,0.00,1.00 +645,-153.60,-28.80,1.00,0.00,1.00 +646,-153.60,-28.80,1.00,0.00,1.00 +647,-148.80,-33.60,1.00,0.00,1.00 +648,-144.00,-38.40,1.00,0.00,1.00 +649,-139.20,-38.40,1.00,0.00,1.00 +650,-134.40,-43.20,1.00,0.00,1.00 +651,-124.80,-43.20,1.00,0.00,1.00 +652,-120.00,-48.00,1.00,0.00,1.00 +653,-115.20,-48.00,1.00,0.00,1.00 +654,-105.60,-48.00,1.00,0.00,1.00 +655,-100.80,-52.80,1.00,0.00,1.00 +656,-91.20,-52.80,1.00,0.00,1.00 +657,-86.40,-52.80,1.00,0.00,1.00 +658,-76.80,-52.80,1.00,0.00,1.00 +659,-67.20,-48.00,1.00,0.00,1.00 +660,-62.40,-48.00,1.00,0.00,1.00 +661,-57.60,-48.00,1.00,0.00,1.00 +662,-48.00,-43.20,1.00,0.00,1.00 +663,-43.20,-43.20,1.00,0.00,1.00 +664,-38.40,-38.40,1.00,0.00,1.00 +665,-33.60,-33.60,1.00,0.00,1.00 +666,-28.80,-33.60,1.00,0.00,1.00 +667,-24.00,-28.80,1.00,0.00,1.00 +668,-24.00,-24.00,1.00,0.00,1.00 +669,-19.20,-24.00,1.00,0.00,1.00 +670,-14.40,-19.20,1.00,0.00,1.00 +671,-14.40,-14.40,1.00,0.00,1.00 +672,-9.60,-9.60,1.00,0.00,1.00 +673,-4.80,-9.60,1.00,0.00,1.00 +674,-4.80,-4.80,1.00,0.00,1.00 +675,0.00,0.00,1.00,0.00,1.00 +676,4.80,4.80,1.00,0.00,1.00 +677,4.80,4.80,1.00,0.00,1.00 +678,9.60,9.60,1.00,0.00,1.00 +679,14.40,14.40,1.00,0.00,1.00 +680,19.20,19.20,1.00,0.00,1.00 +681,19.20,19.20,1.00,0.00,1.00 +682,24.00,24.00,1.00,0.00,1.00 +683,28.80,28.80,1.00,0.00,1.00 +684,33.60,28.80,1.00,0.00,1.00 +685,38.40,33.60,1.00,0.00,1.00 +686,43.20,33.60,1.00,0.00,1.00 +687,48.00,38.40,1.00,0.00,1.00 +688,52.80,38.40,1.00,0.00,1.00 +689,57.60,43.20,1.00,0.00,1.00 +690,62.40,43.20,1.00,0.00,1.00 +691,72.00,43.20,1.00,0.00,1.00 +692,76.80,48.00,1.00,0.00,1.00 +693,86.40,48.00,1.00,0.00,1.00 +694,91.20,48.00,1.00,0.00,1.00 +695,100.80,48.00,1.00,0.00,1.00 +696,105.60,48.00,1.00,0.00,1.00 +697,110.40,43.20,1.00,0.00,1.00 +698,120.00,43.20,1.00,0.00,1.00 +699,124.80,43.20,1.00,0.00,1.00 +700,129.60,38.40,1.00,0.00,1.00 +701,134.40,38.40,1.00,0.00,1.00 +702,139.20,33.60,1.00,0.00,1.00 +703,144.00,33.60,1.00,0.00,1.00 +704,148.80,28.80,1.00,0.00,1.00 +705,153.60,24.00,1.00,0.00,1.00 +706,158.40,24.00,1.00,0.00,1.00 +707,163.20,19.20,1.00,0.00,1.00 +708,163.20,14.40,1.00,0.00,1.00 +709,168.00,14.40,1.00,0.00,1.00 +710,172.80,9.60,1.00,0.00,1.00 +711,172.80,4.80,1.00,0.00,1.00 +712,177.60,0.00,1.00,0.00,1.00 +713,-177.60,-0.00,1.00,0.00,1.00 +714,-172.80,-4.80,1.00,0.00,1.00 +715,-172.80,-9.60,1.00,0.00,1.00 +716,-168.00,-14.40,1.00,0.00,1.00 +717,-163.20,-14.40,1.00,0.00,1.00 +718,-163.20,-19.20,1.00,0.00,1.00 +719,-158.40,-24.00,1.00,0.00,1.00 +720,-153.60,-24.00,1.00,0.00,1.00 +721,-148.80,-28.80,1.00,0.00,1.00 +722,-144.00,-33.60,1.00,0.00,1.00 +723,-139.20,-33.60,1.00,0.00,1.00 +724,-134.40,-38.40,1.00,0.00,1.00 +725,-129.60,-38.40,1.00,0.00,1.00 +726,-124.80,-43.20,1.00,0.00,1.00 +727,-120.00,-43.20,1.00,0.00,1.00 +728,-110.40,-43.20,1.00,0.00,1.00 +729,-105.60,-48.00,1.00,0.00,1.00 +730,-100.80,-48.00,1.00,0.00,1.00 +731,-91.20,-48.00,1.00,0.00,1.00 +732,-86.40,-48.00,1.00,0.00,1.00 +733,-76.80,-48.00,1.00,0.00,1.00 +734,-72.00,-43.20,1.00,0.00,1.00 +735,-62.40,-43.20,1.00,0.00,1.00 +736,-57.60,-43.20,1.00,0.00,1.00 +737,-52.80,-38.40,1.00,0.00,1.00 +738,-48.00,-38.40,1.00,0.00,1.00 +739,-43.20,-33.60,1.00,0.00,1.00 +740,-38.40,-33.60,1.00,0.00,1.00 +741,-33.60,-28.80,1.00,0.00,1.00 +742,-28.80,-28.80,1.00,0.00,1.00 +743,-24.00,-24.00,1.00,0.00,1.00 +744,-19.20,-19.20,1.00,0.00,1.00 +745,-19.20,-19.20,1.00,0.00,1.00 +746,-14.40,-14.40,1.00,0.00,1.00 +747,-9.60,-9.60,1.00,0.00,1.00 +748,-4.80,-4.80,1.00,0.00,1.00 +749,-4.80,-4.80,1.00,0.00,1.00 +750,0.00,0.00,1.00,0.00,1.00 +751,4.80,4.80,1.00,0.00,1.00 +752,4.80,4.80,1.00,0.00,1.00 +753,9.60,9.60,1.00,0.00,1.00 +754,14.40,14.40,1.00,0.00,1.00 +755,19.20,14.40,1.00,0.00,1.00 +756,24.00,19.20,1.00,0.00,1.00 +757,24.00,24.00,1.00,0.00,1.00 +758,28.80,24.00,1.00,0.00,1.00 +759,33.60,28.80,1.00,0.00,1.00 +760,38.40,28.80,1.00,0.00,1.00 +761,43.20,33.60,1.00,0.00,1.00 +762,48.00,33.60,1.00,0.00,1.00 +763,52.80,38.40,1.00,0.00,1.00 +764,62.40,38.40,1.00,0.00,1.00 +765,67.20,38.40,1.00,0.00,1.00 +766,72.00,38.40,1.00,0.00,1.00 +767,76.80,43.20,1.00,0.00,1.00 +768,86.40,43.20,1.00,0.00,1.00 +769,91.20,43.20,1.00,0.00,1.00 +770,96.00,43.20,1.00,0.00,1.00 +771,105.60,43.20,1.00,0.00,1.00 +772,110.40,38.40,1.00,0.00,1.00 +773,115.20,38.40,1.00,0.00,1.00 +774,120.00,38.40,1.00,0.00,1.00 +775,129.60,33.60,1.00,0.00,1.00 +776,134.40,33.60,1.00,0.00,1.00 +777,139.20,28.80,1.00,0.00,1.00 +778,144.00,28.80,1.00,0.00,1.00 +779,148.80,24.00,1.00,0.00,1.00 +780,153.60,24.00,1.00,0.00,1.00 +781,153.60,19.20,1.00,0.00,1.00 +782,158.40,19.20,1.00,0.00,1.00 +783,163.20,14.40,1.00,0.00,1.00 +784,168.00,9.60,1.00,0.00,1.00 +785,172.80,9.60,1.00,0.00,1.00 +786,172.80,4.80,1.00,0.00,1.00 +787,177.60,0.00,1.00,0.00,1.00 +788,-177.60,-0.00,1.00,0.00,1.00 +789,-172.80,-4.80,1.00,0.00,1.00 +790,-172.80,-9.60,1.00,0.00,1.00 +791,-168.00,-9.60,1.00,0.00,1.00 +792,-163.20,-14.40,1.00,0.00,1.00 +793,-158.40,-19.20,1.00,0.00,1.00 +794,-153.60,-19.20,1.00,0.00,1.00 +795,-153.60,-24.00,1.00,0.00,1.00 +796,-148.80,-24.00,1.00,0.00,1.00 +797,-144.00,-28.80,1.00,0.00,1.00 +798,-139.20,-28.80,1.00,0.00,1.00 +799,-134.40,-33.60,1.00,0.00,1.00 +800,-129.60,-33.60,1.00,0.00,1.00 +801,-120.00,-38.40,1.00,0.00,1.00 +802,-115.20,-38.40,1.00,0.00,1.00 +803,-110.40,-38.40,1.00,0.00,1.00 +804,-105.60,-43.20,1.00,0.00,1.00 +805,-96.00,-43.20,1.00,0.00,1.00 +806,-91.20,-43.20,1.00,0.00,1.00 +807,-86.40,-43.20,1.00,0.00,1.00 +808,-76.80,-43.20,1.00,0.00,1.00 +809,-72.00,-38.40,1.00,0.00,1.00 +810,-67.20,-38.40,1.00,0.00,1.00 +811,-62.40,-38.40,1.00,0.00,1.00 +812,-52.80,-38.40,1.00,0.00,1.00 +813,-48.00,-33.60,1.00,0.00,1.00 +814,-43.20,-33.60,1.00,0.00,1.00 +815,-38.40,-28.80,1.00,0.00,1.00 +816,-33.60,-28.80,1.00,0.00,1.00 +817,-28.80,-24.00,1.00,0.00,1.00 +818,-24.00,-24.00,1.00,0.00,1.00 +819,-24.00,-19.20,1.00,0.00,1.00 +820,-19.20,-14.40,1.00,0.00,1.00 +821,-14.40,-14.40,1.00,0.00,1.00 +822,-9.60,-9.60,1.00,0.00,1.00 +823,-4.80,-4.80,1.00,0.00,1.00 +824,-4.80,-4.80,1.00,0.00,1.00 +825,0.00,0.00,1.00,0.00,1.00 +826,4.80,4.80,1.00,0.00,1.00 +827,9.60,4.80,1.00,0.00,1.00 +828,9.60,9.60,1.00,0.00,1.00 +829,14.40,9.60,1.00,0.00,1.00 +830,19.20,14.40,1.00,0.00,1.00 +831,24.00,19.20,1.00,0.00,1.00 +832,28.80,19.20,1.00,0.00,1.00 +833,33.60,24.00,1.00,0.00,1.00 +834,38.40,24.00,1.00,0.00,1.00 +835,43.20,28.80,1.00,0.00,1.00 +836,48.00,28.80,1.00,0.00,1.00 +837,52.80,28.80,1.00,0.00,1.00 +838,57.60,33.60,1.00,0.00,1.00 +839,62.40,33.60,1.00,0.00,1.00 +840,67.20,33.60,1.00,0.00,1.00 +841,72.00,38.40,1.00,0.00,1.00 +842,81.60,38.40,1.00,0.00,1.00 +843,86.40,38.40,1.00,0.00,1.00 +844,91.20,38.40,1.00,0.00,1.00 +845,96.00,38.40,1.00,0.00,1.00 +846,105.60,38.40,1.00,0.00,1.00 +847,110.40,33.60,1.00,0.00,1.00 +848,115.20,33.60,1.00,0.00,1.00 +849,120.00,33.60,1.00,0.00,1.00 +850,124.80,33.60,1.00,0.00,1.00 +851,129.60,28.80,1.00,0.00,1.00 +852,134.40,28.80,1.00,0.00,1.00 +853,139.20,24.00,1.00,0.00,1.00 +854,144.00,24.00,1.00,0.00,1.00 +855,148.80,19.20,1.00,0.00,1.00 +856,153.60,19.20,1.00,0.00,1.00 +857,158.40,14.40,1.00,0.00,1.00 +858,163.20,14.40,1.00,0.00,1.00 +859,168.00,9.60,1.00,0.00,1.00 +860,168.00,9.60,1.00,0.00,1.00 +861,172.80,4.80,1.00,0.00,1.00 +862,177.60,0.00,1.00,0.00,1.00 +863,-177.60,-0.00,1.00,0.00,1.00 +864,-172.80,-4.80,1.00,0.00,1.00 +865,-168.00,-9.60,1.00,0.00,1.00 +866,-168.00,-9.60,1.00,0.00,1.00 +867,-163.20,-14.40,1.00,0.00,1.00 +868,-158.40,-14.40,1.00,0.00,1.00 +869,-153.60,-19.20,1.00,0.00,1.00 +870,-148.80,-19.20,1.00,0.00,1.00 +871,-144.00,-24.00,1.00,0.00,1.00 +872,-139.20,-24.00,1.00,0.00,1.00 +873,-134.40,-28.80,1.00,0.00,1.00 +874,-129.60,-28.80,1.00,0.00,1.00 +875,-124.80,-33.60,1.00,0.00,1.00 +876,-120.00,-33.60,1.00,0.00,1.00 +877,-115.20,-33.60,1.00,0.00,1.00 +878,-110.40,-33.60,1.00,0.00,1.00 +879,-105.60,-38.40,1.00,0.00,1.00 +880,-96.00,-38.40,1.00,0.00,1.00 +881,-91.20,-38.40,1.00,0.00,1.00 +882,-86.40,-38.40,1.00,0.00,1.00 +883,-81.60,-38.40,1.00,0.00,1.00 +884,-72.00,-38.40,1.00,0.00,1.00 +885,-67.20,-33.60,1.00,0.00,1.00 +886,-62.40,-33.60,1.00,0.00,1.00 +887,-57.60,-33.60,1.00,0.00,1.00 +888,-52.80,-28.80,1.00,0.00,1.00 +889,-48.00,-28.80,1.00,0.00,1.00 +890,-43.20,-28.80,1.00,0.00,1.00 +891,-38.40,-24.00,1.00,0.00,1.00 +892,-33.60,-24.00,1.00,0.00,1.00 +893,-28.80,-19.20,1.00,0.00,1.00 +894,-24.00,-19.20,1.00,0.00,1.00 +895,-19.20,-14.40,1.00,0.00,1.00 +896,-14.40,-9.60,1.00,0.00,1.00 +897,-9.60,-9.60,1.00,0.00,1.00 +898,-9.60,-4.80,1.00,0.00,1.00 +899,-4.80,-4.80,1.00,0.00,1.00 +900,0.00,0.00,1.00,0.00,1.00 +901,4.80,4.80,1.00,0.00,1.00 +902,9.60,4.80,1.00,0.00,1.00 +903,14.40,9.60,1.00,0.00,1.00 +904,14.40,9.60,1.00,0.00,1.00 +905,19.20,14.40,1.00,0.00,1.00 +906,24.00,14.40,1.00,0.00,1.00 +907,28.80,19.20,1.00,0.00,1.00 +908,33.60,19.20,1.00,0.00,1.00 +909,38.40,19.20,1.00,0.00,1.00 +910,43.20,24.00,1.00,0.00,1.00 +911,48.00,24.00,1.00,0.00,1.00 +912,52.80,28.80,1.00,0.00,1.00 +913,57.60,28.80,1.00,0.00,1.00 +914,62.40,28.80,1.00,0.00,1.00 +915,67.20,28.80,1.00,0.00,1.00 +916,76.80,33.60,1.00,0.00,1.00 +917,81.60,33.60,1.00,0.00,1.00 +918,86.40,33.60,1.00,0.00,1.00 +919,91.20,33.60,1.00,0.00,1.00 +920,96.00,33.60,1.00,0.00,1.00 +921,100.80,33.60,1.00,0.00,1.00 +922,110.40,28.80,1.00,0.00,1.00 +923,115.20,28.80,1.00,0.00,1.00 +924,120.00,28.80,1.00,0.00,1.00 +925,124.80,28.80,1.00,0.00,1.00 +926,129.60,24.00,1.00,0.00,1.00 +927,134.40,24.00,1.00,0.00,1.00 +928,139.20,24.00,1.00,0.00,1.00 +929,144.00,19.20,1.00,0.00,1.00 +930,148.80,19.20,1.00,0.00,1.00 +931,153.60,14.40,1.00,0.00,1.00 +932,158.40,14.40,1.00,0.00,1.00 +933,163.20,9.60,1.00,0.00,1.00 +934,168.00,9.60,1.00,0.00,1.00 +935,168.00,4.80,1.00,0.00,1.00 +936,172.80,4.80,1.00,0.00,1.00 +937,177.60,0.00,1.00,0.00,1.00 +938,-177.60,-0.00,1.00,0.00,1.00 +939,-172.80,-4.80,1.00,0.00,1.00 +940,-168.00,-4.80,1.00,0.00,1.00 +941,-168.00,-9.60,1.00,0.00,1.00 +942,-163.20,-9.60,1.00,0.00,1.00 +943,-158.40,-14.40,1.00,0.00,1.00 +944,-153.60,-14.40,1.00,0.00,1.00 +945,-148.80,-19.20,1.00,0.00,1.00 +946,-144.00,-19.20,1.00,0.00,1.00 +947,-139.20,-24.00,1.00,0.00,1.00 +948,-134.40,-24.00,1.00,0.00,1.00 +949,-129.60,-24.00,1.00,0.00,1.00 +950,-124.80,-28.80,1.00,0.00,1.00 +951,-120.00,-28.80,1.00,0.00,1.00 +952,-115.20,-28.80,1.00,0.00,1.00 +953,-110.40,-28.80,1.00,0.00,1.00 +954,-100.80,-33.60,1.00,0.00,1.00 +955,-96.00,-33.60,1.00,0.00,1.00 +956,-91.20,-33.60,1.00,0.00,1.00 +957,-86.40,-33.60,1.00,0.00,1.00 +958,-81.60,-33.60,1.00,0.00,1.00 +959,-76.80,-33.60,1.00,0.00,1.00 +960,-67.20,-28.80,1.00,0.00,1.00 +961,-62.40,-28.80,1.00,0.00,1.00 +962,-57.60,-28.80,1.00,0.00,1.00 +963,-52.80,-28.80,1.00,0.00,1.00 +964,-48.00,-24.00,1.00,0.00,1.00 +965,-43.20,-24.00,1.00,0.00,1.00 +966,-38.40,-19.20,1.00,0.00,1.00 +967,-33.60,-19.20,1.00,0.00,1.00 +968,-28.80,-19.20,1.00,0.00,1.00 +969,-24.00,-14.40,1.00,0.00,1.00 +970,-19.20,-14.40,1.00,0.00,1.00 +971,-14.40,-9.60,1.00,0.00,1.00 +972,-14.40,-9.60,1.00,0.00,1.00 +973,-9.60,-4.80,1.00,0.00,1.00 +974,-4.80,-4.80,1.00,0.00,1.00 +975,0.00,0.00,1.00,0.00,1.00 +976,4.80,0.00,1.00,0.00,1.00 +977,9.60,4.80,1.00,0.00,1.00 +978,14.40,4.80,1.00,0.00,1.00 +979,19.20,9.60,1.00,0.00,1.00 +980,19.20,9.60,1.00,0.00,1.00 +981,24.00,14.40,1.00,0.00,1.00 +982,28.80,14.40,1.00,0.00,1.00 +983,33.60,14.40,1.00,0.00,1.00 +984,38.40,19.20,1.00,0.00,1.00 +985,43.20,19.20,1.00,0.00,1.00 +986,48.00,24.00,1.00,0.00,1.00 +987,52.80,24.00,1.00,0.00,1.00 +988,57.60,24.00,1.00,0.00,1.00 +989,62.40,24.00,1.00,0.00,1.00 +990,72.00,24.00,1.00,0.00,1.00 +991,76.80,28.80,1.00,0.00,1.00 +992,81.60,28.80,1.00,0.00,1.00 +993,86.40,28.80,1.00,0.00,1.00 +994,91.20,28.80,1.00,0.00,1.00 +995,96.00,28.80,1.00,0.00,1.00 +996,100.80,28.80,1.00,0.00,1.00 +997,105.60,28.80,1.00,0.00,1.00 +998,110.40,24.00,1.00,0.00,1.00 +999,120.00,24.00,1.00,0.00,1.00 +1000,124.80,24.00,1.00,0.00,1.00 +1001,129.60,24.00,1.00,0.00,1.00 +1002,134.40,19.20,1.00,0.00,1.00 +1003,139.20,19.20,1.00,0.00,1.00 +1004,144.00,19.20,1.00,0.00,1.00 +1005,148.80,14.40,1.00,0.00,1.00 +1006,153.60,14.40,1.00,0.00,1.00 +1007,158.40,9.60,1.00,0.00,1.00 +1008,158.40,9.60,1.00,0.00,1.00 +1009,163.20,9.60,1.00,0.00,1.00 +1010,168.00,4.80,1.00,0.00,1.00 +1011,172.80,4.80,1.00,0.00,1.00 +1012,177.60,0.00,1.00,0.00,1.00 +1013,-177.60,-0.00,1.00,0.00,1.00 +1014,-172.80,-4.80,1.00,0.00,1.00 +1015,-168.00,-4.80,1.00,0.00,1.00 +1016,-163.20,-9.60,1.00,0.00,1.00 +1017,-158.40,-9.60,1.00,0.00,1.00 +1018,-158.40,-9.60,1.00,0.00,1.00 +1019,-153.60,-14.40,1.00,0.00,1.00 +1020,-148.80,-14.40,1.00,0.00,1.00 +1021,-144.00,-19.20,1.00,0.00,1.00 +1022,-139.20,-19.20,1.00,0.00,1.00 +1023,-134.40,-19.20,1.00,0.00,1.00 +1024,-129.60,-24.00,1.00,0.00,1.00 +1025,-124.80,-24.00,1.00,0.00,1.00 +1026,-120.00,-24.00,1.00,0.00,1.00 +1027,-110.40,-24.00,1.00,0.00,1.00 +1028,-105.60,-28.80,1.00,0.00,1.00 +1029,-100.80,-28.80,1.00,0.00,1.00 +1030,-96.00,-28.80,1.00,0.00,1.00 +1031,-91.20,-28.80,1.00,0.00,1.00 +1032,-86.40,-28.80,1.00,0.00,1.00 +1033,-81.60,-28.80,1.00,0.00,1.00 +1034,-76.80,-28.80,1.00,0.00,1.00 +1035,-72.00,-24.00,1.00,0.00,1.00 +1036,-62.40,-24.00,1.00,0.00,1.00 +1037,-57.60,-24.00,1.00,0.00,1.00 +1038,-52.80,-24.00,1.00,0.00,1.00 +1039,-48.00,-24.00,1.00,0.00,1.00 +1040,-43.20,-19.20,1.00,0.00,1.00 +1041,-38.40,-19.20,1.00,0.00,1.00 +1042,-33.60,-14.40,1.00,0.00,1.00 +1043,-28.80,-14.40,1.00,0.00,1.00 +1044,-24.00,-14.40,1.00,0.00,1.00 +1045,-19.20,-9.60,1.00,0.00,1.00 +1046,-19.20,-9.60,1.00,0.00,1.00 +1047,-14.40,-4.80,1.00,0.00,1.00 +1048,-9.60,-4.80,1.00,0.00,1.00 +1049,-4.80,-0.00,1.00,0.00,1.00 +1050,0.00,0.00,1.00,0.00,1.00 +1051,4.80,0.00,1.00,0.00,1.00 +1052,9.60,4.80,1.00,0.00,1.00 +1053,14.40,4.80,1.00,0.00,1.00 +1054,19.20,9.60,1.00,0.00,1.00 +1055,24.00,9.60,1.00,0.00,1.00 +1056,28.80,9.60,1.00,0.00,1.00 +1057,33.60,14.40,1.00,0.00,1.00 +1058,38.40,14.40,1.00,0.00,1.00 +1059,43.20,14.40,1.00,0.00,1.00 +1060,48.00,14.40,1.00,0.00,1.00 +1061,52.80,19.20,1.00,0.00,1.00 +1062,57.60,19.20,1.00,0.00,1.00 +1063,62.40,19.20,1.00,0.00,1.00 +1064,67.20,19.20,1.00,0.00,1.00 +1065,72.00,24.00,1.00,0.00,1.00 +1066,76.80,24.00,1.00,0.00,1.00 +1067,81.60,24.00,1.00,0.00,1.00 +1068,86.40,24.00,1.00,0.00,1.00 +1069,91.20,24.00,1.00,0.00,1.00 +1070,96.00,24.00,1.00,0.00,1.00 +1071,100.80,24.00,1.00,0.00,1.00 +1072,105.60,24.00,1.00,0.00,1.00 +1073,110.40,19.20,1.00,0.00,1.00 +1074,115.20,19.20,1.00,0.00,1.00 +1075,120.00,19.20,1.00,0.00,1.00 +1076,124.80,19.20,1.00,0.00,1.00 +1077,129.60,19.20,1.00,0.00,1.00 +1078,134.40,14.40,1.00,0.00,1.00 +1079,139.20,14.40,1.00,0.00,1.00 +1080,144.00,14.40,1.00,0.00,1.00 +1081,148.80,9.60,1.00,0.00,1.00 +1082,153.60,9.60,1.00,0.00,1.00 +1083,158.40,9.60,1.00,0.00,1.00 +1084,163.20,4.80,1.00,0.00,1.00 +1085,168.00,4.80,1.00,0.00,1.00 +1086,172.80,4.80,1.00,0.00,1.00 +1087,177.60,0.00,1.00,0.00,1.00 +1088,-177.60,-0.00,1.00,0.00,1.00 +1089,-172.80,-4.80,1.00,0.00,1.00 +1090,-168.00,-4.80,1.00,0.00,1.00 +1091,-163.20,-4.80,1.00,0.00,1.00 +1092,-158.40,-9.60,1.00,0.00,1.00 +1093,-153.60,-9.60,1.00,0.00,1.00 +1094,-148.80,-9.60,1.00,0.00,1.00 +1095,-144.00,-14.40,1.00,0.00,1.00 +1096,-139.20,-14.40,1.00,0.00,1.00 +1097,-134.40,-14.40,1.00,0.00,1.00 +1098,-129.60,-19.20,1.00,0.00,1.00 +1099,-124.80,-19.20,1.00,0.00,1.00 +1100,-120.00,-19.20,1.00,0.00,1.00 +1101,-115.20,-19.20,1.00,0.00,1.00 +1102,-110.40,-19.20,1.00,0.00,1.00 +1103,-105.60,-24.00,1.00,0.00,1.00 +1104,-100.80,-24.00,1.00,0.00,1.00 +1105,-96.00,-24.00,1.00,0.00,1.00 +1106,-91.20,-24.00,1.00,0.00,1.00 +1107,-86.40,-24.00,1.00,0.00,1.00 +1108,-81.60,-24.00,1.00,0.00,1.00 +1109,-76.80,-24.00,1.00,0.00,1.00 +1110,-72.00,-24.00,1.00,0.00,1.00 +1111,-67.20,-19.20,1.00,0.00,1.00 +1112,-62.40,-19.20,1.00,0.00,1.00 +1113,-57.60,-19.20,1.00,0.00,1.00 +1114,-52.80,-19.20,1.00,0.00,1.00 +1115,-48.00,-14.40,1.00,0.00,1.00 +1116,-43.20,-14.40,1.00,0.00,1.00 +1117,-38.40,-14.40,1.00,0.00,1.00 +1118,-33.60,-14.40,1.00,0.00,1.00 +1119,-28.80,-9.60,1.00,0.00,1.00 +1120,-24.00,-9.60,1.00,0.00,1.00 +1121,-19.20,-9.60,1.00,0.00,1.00 +1122,-14.40,-4.80,1.00,0.00,1.00 +1123,-9.60,-4.80,1.00,0.00,1.00 +1124,-4.80,-0.00,1.00,0.00,1.00 +1125,0.00,0.00,1.00,0.00,1.00 +1126,4.80,0.00,1.00,0.00,1.00 +1127,9.60,4.80,1.00,0.00,1.00 +1128,14.40,4.80,1.00,0.00,1.00 +1129,19.20,4.80,1.00,0.00,1.00 +1130,24.00,9.60,1.00,0.00,1.00 +1131,28.80,9.60,1.00,0.00,1.00 +1132,33.60,9.60,1.00,0.00,1.00 +1133,38.40,9.60,1.00,0.00,1.00 +1134,43.20,14.40,1.00,0.00,1.00 +1135,48.00,14.40,1.00,0.00,1.00 +1136,52.80,14.40,1.00,0.00,1.00 +1137,57.60,14.40,1.00,0.00,1.00 +1138,62.40,14.40,1.00,0.00,1.00 +1139,67.20,14.40,1.00,0.00,1.00 +1140,72.00,19.20,1.00,0.00,1.00 +1141,76.80,19.20,1.00,0.00,1.00 +1142,81.60,19.20,1.00,0.00,1.00 +1143,86.40,19.20,1.00,0.00,1.00 +1144,91.20,19.20,1.00,0.00,1.00 +1145,96.00,19.20,1.00,0.00,1.00 +1146,100.80,19.20,1.00,0.00,1.00 +1147,105.60,19.20,1.00,0.00,1.00 +1148,110.40,19.20,1.00,0.00,1.00 +1149,115.20,14.40,1.00,0.00,1.00 +1150,120.00,14.40,1.00,0.00,1.00 +1151,124.80,14.40,1.00,0.00,1.00 +1152,129.60,14.40,1.00,0.00,1.00 +1153,134.40,14.40,1.00,0.00,1.00 +1154,139.20,9.60,1.00,0.00,1.00 +1155,144.00,9.60,1.00,0.00,1.00 +1156,148.80,9.60,1.00,0.00,1.00 +1157,153.60,9.60,1.00,0.00,1.00 +1158,158.40,4.80,1.00,0.00,1.00 +1159,163.20,4.80,1.00,0.00,1.00 +1160,168.00,4.80,1.00,0.00,1.00 +1161,172.80,0.00,1.00,0.00,1.00 +1162,177.60,0.00,1.00,0.00,1.00 +1163,-177.60,-0.00,1.00,0.00,1.00 +1164,-172.80,-0.00,1.00,0.00,1.00 +1165,-168.00,-4.80,1.00,0.00,1.00 +1166,-163.20,-4.80,1.00,0.00,1.00 +1167,-158.40,-4.80,1.00,0.00,1.00 +1168,-153.60,-9.60,1.00,0.00,1.00 +1169,-148.80,-9.60,1.00,0.00,1.00 +1170,-144.00,-9.60,1.00,0.00,1.00 +1171,-139.20,-9.60,1.00,0.00,1.00 +1172,-134.40,-14.40,1.00,0.00,1.00 +1173,-129.60,-14.40,1.00,0.00,1.00 +1174,-124.80,-14.40,1.00,0.00,1.00 +1175,-120.00,-14.40,1.00,0.00,1.00 +1176,-115.20,-14.40,1.00,0.00,1.00 +1177,-110.40,-19.20,1.00,0.00,1.00 +1178,-105.60,-19.20,1.00,0.00,1.00 +1179,-100.80,-19.20,1.00,0.00,1.00 +1180,-96.00,-19.20,1.00,0.00,1.00 +1181,-91.20,-19.20,1.00,0.00,1.00 +1182,-86.40,-19.20,1.00,0.00,1.00 +1183,-81.60,-19.20,1.00,0.00,1.00 +1184,-76.80,-19.20,1.00,0.00,1.00 +1185,-72.00,-19.20,1.00,0.00,1.00 +1186,-67.20,-14.40,1.00,0.00,1.00 +1187,-62.40,-14.40,1.00,0.00,1.00 +1188,-57.60,-14.40,1.00,0.00,1.00 +1189,-52.80,-14.40,1.00,0.00,1.00 +1190,-48.00,-14.40,1.00,0.00,1.00 +1191,-43.20,-14.40,1.00,0.00,1.00 +1192,-38.40,-9.60,1.00,0.00,1.00 +1193,-33.60,-9.60,1.00,0.00,1.00 +1194,-28.80,-9.60,1.00,0.00,1.00 +1195,-24.00,-9.60,1.00,0.00,1.00 +1196,-19.20,-4.80,1.00,0.00,1.00 +1197,-14.40,-4.80,1.00,0.00,1.00 +1198,-9.60,-4.80,1.00,0.00,1.00 +1199,-4.80,-0.00,1.00,0.00,1.00 +1200,0.00,0.00,1.00,0.00,1.00 +1201,4.80,0.00,1.00,0.00,1.00 +1202,9.60,0.00,1.00,0.00,1.00 +1203,14.40,4.80,1.00,0.00,1.00 +1204,19.20,4.80,1.00,0.00,1.00 +1205,24.00,4.80,1.00,0.00,1.00 +1206,28.80,4.80,1.00,0.00,1.00 +1207,33.60,9.60,1.00,0.00,1.00 +1208,38.40,9.60,1.00,0.00,1.00 +1209,43.20,9.60,1.00,0.00,1.00 +1210,48.00,9.60,1.00,0.00,1.00 +1211,52.80,9.60,1.00,0.00,1.00 +1212,57.60,9.60,1.00,0.00,1.00 +1213,62.40,9.60,1.00,0.00,1.00 +1214,67.20,14.40,1.00,0.00,1.00 +1215,72.00,14.40,1.00,0.00,1.00 +1216,76.80,14.40,1.00,0.00,1.00 +1217,81.60,14.40,1.00,0.00,1.00 +1218,86.40,14.40,1.00,0.00,1.00 +1219,91.20,14.40,1.00,0.00,1.00 +1220,96.00,14.40,1.00,0.00,1.00 +1221,100.80,14.40,1.00,0.00,1.00 +1222,105.60,14.40,1.00,0.00,1.00 +1223,110.40,14.40,1.00,0.00,1.00 +1224,115.20,9.60,1.00,0.00,1.00 +1225,120.00,9.60,1.00,0.00,1.00 +1226,124.80,9.60,1.00,0.00,1.00 +1227,129.60,9.60,1.00,0.00,1.00 +1228,134.40,9.60,1.00,0.00,1.00 +1229,139.20,9.60,1.00,0.00,1.00 +1230,144.00,9.60,1.00,0.00,1.00 +1231,148.80,4.80,1.00,0.00,1.00 +1232,153.60,4.80,1.00,0.00,1.00 +1233,158.40,4.80,1.00,0.00,1.00 +1234,163.20,4.80,1.00,0.00,1.00 +1235,168.00,4.80,1.00,0.00,1.00 +1236,172.80,0.00,1.00,0.00,1.00 +1237,177.60,0.00,1.00,0.00,1.00 +1238,-177.60,-0.00,1.00,0.00,1.00 +1239,-172.80,-0.00,1.00,0.00,1.00 +1240,-168.00,-4.80,1.00,0.00,1.00 +1241,-163.20,-4.80,1.00,0.00,1.00 +1242,-158.40,-4.80,1.00,0.00,1.00 +1243,-153.60,-4.80,1.00,0.00,1.00 +1244,-148.80,-4.80,1.00,0.00,1.00 +1245,-144.00,-9.60,1.00,0.00,1.00 +1246,-139.20,-9.60,1.00,0.00,1.00 +1247,-134.40,-9.60,1.00,0.00,1.00 +1248,-129.60,-9.60,1.00,0.00,1.00 +1249,-124.80,-9.60,1.00,0.00,1.00 +1250,-120.00,-9.60,1.00,0.00,1.00 +1251,-115.20,-9.60,1.00,0.00,1.00 +1252,-110.40,-14.40,1.00,0.00,1.00 +1253,-105.60,-14.40,1.00,0.00,1.00 +1254,-100.80,-14.40,1.00,0.00,1.00 +1255,-96.00,-14.40,1.00,0.00,1.00 +1256,-91.20,-14.40,1.00,0.00,1.00 +1257,-86.40,-14.40,1.00,0.00,1.00 +1258,-81.60,-14.40,1.00,0.00,1.00 +1259,-76.80,-14.40,1.00,0.00,1.00 +1260,-72.00,-14.40,1.00,0.00,1.00 +1261,-67.20,-14.40,1.00,0.00,1.00 +1262,-62.40,-9.60,1.00,0.00,1.00 +1263,-57.60,-9.60,1.00,0.00,1.00 +1264,-52.80,-9.60,1.00,0.00,1.00 +1265,-48.00,-9.60,1.00,0.00,1.00 +1266,-43.20,-9.60,1.00,0.00,1.00 +1267,-38.40,-9.60,1.00,0.00,1.00 +1268,-33.60,-9.60,1.00,0.00,1.00 +1269,-28.80,-4.80,1.00,0.00,1.00 +1270,-24.00,-4.80,1.00,0.00,1.00 +1271,-19.20,-4.80,1.00,0.00,1.00 +1272,-14.40,-4.80,1.00,0.00,1.00 +1273,-9.60,-0.00,1.00,0.00,1.00 +1274,-4.80,-0.00,1.00,0.00,1.00 +1275,0.00,0.00,1.00,0.00,1.00 +1276,4.80,0.00,1.00,0.00,1.00 +1277,9.60,0.00,1.00,0.00,1.00 +1278,14.40,0.00,1.00,0.00,1.00 +1279,19.20,4.80,1.00,0.00,1.00 +1280,24.00,4.80,1.00,0.00,1.00 +1281,28.80,4.80,1.00,0.00,1.00 +1282,33.60,4.80,1.00,0.00,1.00 +1283,38.40,4.80,1.00,0.00,1.00 +1284,43.20,4.80,1.00,0.00,1.00 +1285,48.00,4.80,1.00,0.00,1.00 +1286,52.80,4.80,1.00,0.00,1.00 +1287,57.60,4.80,1.00,0.00,1.00 +1288,62.40,9.60,1.00,0.00,1.00 +1289,67.20,9.60,1.00,0.00,1.00 +1290,72.00,9.60,1.00,0.00,1.00 +1291,76.80,9.60,1.00,0.00,1.00 +1292,81.60,9.60,1.00,0.00,1.00 +1293,86.40,9.60,1.00,0.00,1.00 +1294,91.20,9.60,1.00,0.00,1.00 +1295,96.00,9.60,1.00,0.00,1.00 +1296,100.80,9.60,1.00,0.00,1.00 +1297,105.60,9.60,1.00,0.00,1.00 +1298,110.40,9.60,1.00,0.00,1.00 +1299,115.20,9.60,1.00,0.00,1.00 +1300,120.00,9.60,1.00,0.00,1.00 +1301,124.80,4.80,1.00,0.00,1.00 +1302,129.60,4.80,1.00,0.00,1.00 +1303,134.40,4.80,1.00,0.00,1.00 +1304,139.20,4.80,1.00,0.00,1.00 +1305,144.00,4.80,1.00,0.00,1.00 +1306,148.80,4.80,1.00,0.00,1.00 +1307,153.60,4.80,1.00,0.00,1.00 +1308,158.40,4.80,1.00,0.00,1.00 +1309,163.20,4.80,1.00,0.00,1.00 +1310,168.00,0.00,1.00,0.00,1.00 +1311,172.80,0.00,1.00,0.00,1.00 +1312,177.60,0.00,1.00,0.00,1.00 +1313,-177.60,-0.00,1.00,0.00,1.00 +1314,-172.80,-0.00,1.00,0.00,1.00 +1315,-168.00,-0.00,1.00,0.00,1.00 +1316,-163.20,-4.80,1.00,0.00,1.00 +1317,-158.40,-4.80,1.00,0.00,1.00 +1318,-153.60,-4.80,1.00,0.00,1.00 +1319,-148.80,-4.80,1.00,0.00,1.00 +1320,-144.00,-4.80,1.00,0.00,1.00 +1321,-139.20,-4.80,1.00,0.00,1.00 +1322,-134.40,-4.80,1.00,0.00,1.00 +1323,-129.60,-4.80,1.00,0.00,1.00 +1324,-124.80,-4.80,1.00,0.00,1.00 +1325,-120.00,-9.60,1.00,0.00,1.00 +1326,-115.20,-9.60,1.00,0.00,1.00 +1327,-110.40,-9.60,1.00,0.00,1.00 +1328,-105.60,-9.60,1.00,0.00,1.00 +1329,-100.80,-9.60,1.00,0.00,1.00 +1330,-96.00,-9.60,1.00,0.00,1.00 +1331,-91.20,-9.60,1.00,0.00,1.00 +1332,-86.40,-9.60,1.00,0.00,1.00 +1333,-81.60,-9.60,1.00,0.00,1.00 +1334,-76.80,-9.60,1.00,0.00,1.00 +1335,-72.00,-9.60,1.00,0.00,1.00 +1336,-67.20,-9.60,1.00,0.00,1.00 +1337,-62.40,-9.60,1.00,0.00,1.00 +1338,-57.60,-4.80,1.00,0.00,1.00 +1339,-52.80,-4.80,1.00,0.00,1.00 +1340,-48.00,-4.80,1.00,0.00,1.00 +1341,-43.20,-4.80,1.00,0.00,1.00 +1342,-38.40,-4.80,1.00,0.00,1.00 +1343,-33.60,-4.80,1.00,0.00,1.00 +1344,-28.80,-4.80,1.00,0.00,1.00 +1345,-24.00,-4.80,1.00,0.00,1.00 +1346,-19.20,-4.80,1.00,0.00,1.00 +1347,-14.40,-0.00,1.00,0.00,1.00 +1348,-9.60,-0.00,1.00,0.00,1.00 +1349,-4.80,-0.00,1.00,0.00,1.00 +1350,0.00,0.00,1.00,0.00,1.00 +1351,4.80,0.00,1.00,0.00,1.00 +1352,9.60,0.00,1.00,0.00,1.00 +1353,14.40,0.00,1.00,0.00,1.00 +1354,19.20,0.00,1.00,0.00,1.00 +1355,24.00,0.00,1.00,0.00,1.00 +1356,28.80,0.00,1.00,0.00,1.00 +1357,33.60,0.00,1.00,0.00,1.00 +1358,38.40,0.00,1.00,0.00,1.00 +1359,43.20,4.80,1.00,0.00,1.00 +1360,48.00,4.80,1.00,0.00,1.00 +1361,52.80,4.80,1.00,0.00,1.00 +1362,57.60,4.80,1.00,0.00,1.00 +1363,62.40,4.80,1.00,0.00,1.00 +1364,67.20,4.80,1.00,0.00,1.00 +1365,72.00,4.80,1.00,0.00,1.00 +1366,76.80,4.80,1.00,0.00,1.00 +1367,81.60,4.80,1.00,0.00,1.00 +1368,86.40,4.80,1.00,0.00,1.00 +1369,91.20,4.80,1.00,0.00,1.00 +1370,96.00,4.80,1.00,0.00,1.00 +1371,100.80,4.80,1.00,0.00,1.00 +1372,105.60,4.80,1.00,0.00,1.00 +1373,110.40,4.80,1.00,0.00,1.00 +1374,115.20,4.80,1.00,0.00,1.00 +1375,120.00,4.80,1.00,0.00,1.00 +1376,124.80,4.80,1.00,0.00,1.00 +1377,129.60,4.80,1.00,0.00,1.00 +1378,134.40,4.80,1.00,0.00,1.00 +1379,139.20,0.00,1.00,0.00,1.00 +1380,144.00,0.00,1.00,0.00,1.00 +1381,148.80,0.00,1.00,0.00,1.00 +1382,153.60,0.00,1.00,0.00,1.00 +1383,158.40,0.00,1.00,0.00,1.00 +1384,163.20,0.00,1.00,0.00,1.00 +1385,168.00,0.00,1.00,0.00,1.00 +1386,172.80,0.00,1.00,0.00,1.00 +1387,177.60,0.00,1.00,0.00,1.00 +1388,-177.60,-0.00,1.00,0.00,1.00 +1389,-172.80,-0.00,1.00,0.00,1.00 +1390,-168.00,-0.00,1.00,0.00,1.00 +1391,-163.20,-0.00,1.00,0.00,1.00 +1392,-158.40,-0.00,1.00,0.00,1.00 +1393,-153.60,-0.00,1.00,0.00,1.00 +1394,-148.80,-0.00,1.00,0.00,1.00 +1395,-144.00,-0.00,1.00,0.00,1.00 +1396,-139.20,-0.00,1.00,0.00,1.00 +1397,-134.40,-4.80,1.00,0.00,1.00 +1398,-129.60,-4.80,1.00,0.00,1.00 +1399,-124.80,-4.80,1.00,0.00,1.00 +1400,-120.00,-4.80,1.00,0.00,1.00 +1401,-115.20,-4.80,1.00,0.00,1.00 +1402,-110.40,-4.80,1.00,0.00,1.00 +1403,-105.60,-4.80,1.00,0.00,1.00 +1404,-100.80,-4.80,1.00,0.00,1.00 +1405,-96.00,-4.80,1.00,0.00,1.00 +1406,-91.20,-4.80,1.00,0.00,1.00 +1407,-86.40,-4.80,1.00,0.00,1.00 +1408,-81.60,-4.80,1.00,0.00,1.00 +1409,-76.80,-4.80,1.00,0.00,1.00 +1410,-72.00,-4.80,1.00,0.00,1.00 +1411,-67.20,-4.80,1.00,0.00,1.00 +1412,-62.40,-4.80,1.00,0.00,1.00 +1413,-57.60,-4.80,1.00,0.00,1.00 +1414,-52.80,-4.80,1.00,0.00,1.00 +1415,-48.00,-4.80,1.00,0.00,1.00 +1416,-43.20,-4.80,1.00,0.00,1.00 +1417,-38.40,-0.00,1.00,0.00,1.00 +1418,-33.60,-0.00,1.00,0.00,1.00 +1419,-28.80,-0.00,1.00,0.00,1.00 +1420,-24.00,-0.00,1.00,0.00,1.00 +1421,-19.20,-0.00,1.00,0.00,1.00 +1422,-14.40,-0.00,1.00,0.00,1.00 +1423,-9.60,-0.00,1.00,0.00,1.00 +1424,-4.80,-0.00,1.00,0.00,1.00 +1425,0.00,0.00,1.00,0.00,1.00 +1426,4.80,-0.00,1.00,0.00,1.00 +1427,9.60,-0.00,1.00,0.00,1.00 +1428,14.40,-0.00,1.00,0.00,1.00 +1429,19.20,-0.00,1.00,0.00,1.00 +1430,24.00,-0.00,1.00,0.00,1.00 +1431,28.80,-0.00,1.00,0.00,1.00 +1432,33.60,-0.00,1.00,0.00,1.00 +1433,38.40,-0.00,1.00,0.00,1.00 +1434,43.20,-0.00,1.00,0.00,1.00 +1435,48.00,-0.00,1.00,0.00,1.00 +1436,52.80,-0.00,1.00,0.00,1.00 +1437,57.60,-0.00,1.00,0.00,1.00 +1438,62.40,-0.00,1.00,0.00,1.00 +1439,67.20,-0.00,1.00,0.00,1.00 +1440,72.00,-0.00,1.00,0.00,1.00 +1441,76.80,-0.00,1.00,0.00,1.00 +1442,81.60,-0.00,1.00,0.00,1.00 +1443,86.40,-0.00,1.00,0.00,1.00 +1444,91.20,-0.00,1.00,0.00,1.00 +1445,96.00,-0.00,1.00,0.00,1.00 +1446,100.80,-0.00,1.00,0.00,1.00 +1447,105.60,-0.00,1.00,0.00,1.00 +1448,110.40,-0.00,1.00,0.00,1.00 +1449,115.20,-0.00,1.00,0.00,1.00 +1450,120.00,-0.00,1.00,0.00,1.00 +1451,124.80,-0.00,1.00,0.00,1.00 +1452,129.60,-0.00,1.00,0.00,1.00 +1453,134.40,-0.00,1.00,0.00,1.00 +1454,139.20,-0.00,1.00,0.00,1.00 +1455,144.00,-0.00,1.00,0.00,1.00 +1456,148.80,-0.00,1.00,0.00,1.00 +1457,153.60,-0.00,1.00,0.00,1.00 +1458,158.40,-0.00,1.00,0.00,1.00 +1459,163.20,-0.00,1.00,0.00,1.00 +1460,168.00,-0.00,1.00,0.00,1.00 +1461,172.80,-0.00,1.00,0.00,1.00 +1462,177.60,-0.00,1.00,0.00,1.00 +1463,-177.60,0.00,1.00,0.00,1.00 +1464,-172.80,0.00,1.00,0.00,1.00 +1465,-168.00,0.00,1.00,0.00,1.00 +1466,-163.20,0.00,1.00,0.00,1.00 +1467,-158.40,0.00,1.00,0.00,1.00 +1468,-153.60,0.00,1.00,0.00,1.00 +1469,-148.80,0.00,1.00,0.00,1.00 +1470,-144.00,0.00,1.00,0.00,1.00 +1471,-139.20,0.00,1.00,0.00,1.00 +1472,-134.40,0.00,1.00,0.00,1.00 +1473,-129.60,0.00,1.00,0.00,1.00 +1474,-124.80,0.00,1.00,0.00,1.00 +1475,-120.00,0.00,1.00,0.00,1.00 +1476,-115.20,0.00,1.00,0.00,1.00 +1477,-110.40,0.00,1.00,0.00,1.00 +1478,-105.60,0.00,1.00,0.00,1.00 +1479,-100.80,0.00,1.00,0.00,1.00 +1480,-96.00,0.00,1.00,0.00,1.00 +1481,-91.20,0.00,1.00,0.00,1.00 +1482,-86.40,0.00,1.00,0.00,1.00 +1483,-81.60,0.00,1.00,0.00,1.00 +1484,-76.80,0.00,1.00,0.00,1.00 +1485,-72.00,0.00,1.00,0.00,1.00 +1486,-67.20,0.00,1.00,0.00,1.00 +1487,-62.40,0.00,1.00,0.00,1.00 +1488,-57.60,0.00,1.00,0.00,1.00 +1489,-52.80,0.00,1.00,0.00,1.00 +1490,-48.00,0.00,1.00,0.00,1.00 +1491,-43.20,0.00,1.00,0.00,1.00 +1492,-38.40,0.00,1.00,0.00,1.00 +1493,-33.60,0.00,1.00,0.00,1.00 +1494,-28.80,0.00,1.00,0.00,1.00 +1495,-24.00,0.00,1.00,0.00,1.00 +1496,-19.20,0.00,1.00,0.00,1.00 +1497,-14.40,0.00,1.00,0.00,1.00 +1498,-9.60,0.00,1.00,0.00,1.00 +1499,-4.80,0.00,1.00,0.00,1.00 diff --git a/scripts/testv/stvST16c.pcm b/scripts/testv/stvST16c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvST16n.pcm b/scripts/testv/stvST16n.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvST32c.pcm b/scripts/testv/stvST32c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvST32n.pcm b/scripts/testv/stvST32n.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvST48c.pcm b/scripts/testv/stvST48c.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stvST48n.pcm b/scripts/testv/stvST48n.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv_IVASMASA_1dir1TC.met b/scripts/testv/stv_IVASMASA_1dir1TC.met new file mode 100644 index 0000000000..f2ce23bd20 --- /dev/null +++ b/scripts/testv/stv_IVASMASA_1dir1TC.met @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6349efe3448d28979b80744bcdc29d57f1c025704939b42d7b913d7fc3f23ccc +size 102300 diff --git a/scripts/testv/stv_IVASMASA_1dir1TC.pcm b/scripts/testv/stv_IVASMASA_1dir1TC.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv_IVASMASA_1dir1TC_DTX.met b/scripts/testv/stv_IVASMASA_1dir1TC_DTX.met new file mode 100644 index 0000000000..945a81f0b4 --- /dev/null +++ b/scripts/testv/stv_IVASMASA_1dir1TC_DTX.met @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64b974b376ef0ca29da837d33173c621499d753800ebf5e5587019ee5db481bd +size 684728 diff --git a/scripts/testv/stv_IVASMASA_1dir1TC_DTX.pcm b/scripts/testv/stv_IVASMASA_1dir1TC_DTX.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv_IVASMASA_1dir2TC.met b/scripts/testv/stv_IVASMASA_1dir2TC.met new file mode 100644 index 0000000000..00acdae539 --- /dev/null +++ b/scripts/testv/stv_IVASMASA_1dir2TC.met @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a1f87bfe360dbd221a94583aa68a58ef050e968a63351730d643f2dc2cac4e1 +size 204600 diff --git a/scripts/testv/stv_IVASMASA_1dir2TC.pcm b/scripts/testv/stv_IVASMASA_1dir2TC.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv_IVASMASA_1dir2TC_DTX.met b/scripts/testv/stv_IVASMASA_1dir2TC_DTX.met new file mode 100644 index 0000000000..f6e0e439a0 --- /dev/null +++ b/scripts/testv/stv_IVASMASA_1dir2TC_DTX.met @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ec41c82c305f075c67b51e1f0a6e97dfc272bafcfca64e38c902c9f0d2c4500 +size 684728 diff --git a/scripts/testv/stv_IVASMASA_1dir2TC_DTX.pcm b/scripts/testv/stv_IVASMASA_1dir2TC_DTX.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv_IVASMASA_2dir1TC.met b/scripts/testv/stv_IVASMASA_2dir1TC.met new file mode 100644 index 0000000000..6468877408 --- /dev/null +++ b/scripts/testv/stv_IVASMASA_2dir1TC.met @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d125a4c4e3989ac55f9c2617f464431feae4ede9b2e15d087d3271c0a4a56303 +size 319800 diff --git a/scripts/testv/stv_IVASMASA_2dir1TC.pcm b/scripts/testv/stv_IVASMASA_2dir1TC.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/testv/stv_IVASMASA_2dir2TC.met b/scripts/testv/stv_IVASMASA_2dir2TC.met new file mode 100644 index 0000000000..1b62022af5 --- /dev/null +++ b/scripts/testv/stv_IVASMASA_2dir2TC.met @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2eb412d646d7a32c77413dea54dc44cf45dc49e6d8c2de19abe4f4b93a91fa4a +size 159900 diff --git a/scripts/testv/stv_IVASMASA_2dir2TC.pcm b/scripts/testv/stv_IVASMASA_2dir2TC.pcm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/trajectories/azi+2-ele+2-every-100-frames-Euler.csv b/scripts/trajectories/azi+2-ele+2-every-100-frames-Euler.csv new file mode 100644 index 0000000000..0c483aa368 --- /dev/null +++ b/scripts/trajectories/azi+2-ele+2-every-100-frames-Euler.csv @@ -0,0 +1,12000 @@ +0, -3.000000, 90.000000, 45.000000, 0.000000 +1, -3.000000, 90.000000, 45.000000, 0.000000 +2, -3.000000, 90.000000, 45.000000, 0.000000 +3, -3.000000, 90.000000, 45.000000, 0.000000 +4, -3.000000, 90.000000, 45.000000, 0.000000 +5, -3.000000, 90.000000, 45.000000, 0.000000 +6, -3.000000, 90.000000, 45.000000, 0.000000 +7, -3.000000, 90.000000, 45.000000, 0.000000 +8, -3.000000, 90.000000, 45.000000, 0.000000 +9, -3.000000, 90.000000, 45.000000, 0.000000 +10, -3.000000, 90.000000, 45.000000, 0.000000 +11, -3.000000, 90.000000, 45.000000, 0.000000 +12, -3.000000, 90.000000, 45.000000, 0.000000 +13, -3.000000, 90.000000, 45.000000, 0.000000 +14, -3.000000, 90.000000, 45.000000, 0.000000 +15, -3.000000, 90.000000, 45.000000, 0.000000 +16, -3.000000, 90.000000, 45.000000, 0.000000 +17, -3.000000, 90.000000, 45.000000, 0.000000 +18, -3.000000, 90.000000, 45.000000, 0.000000 +19, -3.000000, 90.000000, 45.000000, 0.000000 +20, -3.000000, 90.000000, 45.000000, 0.000000 +21, -3.000000, 90.000000, 45.000000, 0.000000 +22, -3.000000, 90.000000, 45.000000, 0.000000 +23, -3.000000, 90.000000, 45.000000, 0.000000 +24, -3.000000, 90.000000, 45.000000, 0.000000 +25, -3.000000, 90.000000, 45.000000, 0.000000 +26, -3.000000, 90.000000, 45.000000, 0.000000 +27, -3.000000, 90.000000, 45.000000, 0.000000 +28, -3.000000, 90.000000, 45.000000, 0.000000 +29, -3.000000, 90.000000, 45.000000, 0.000000 +30, -3.000000, 90.000000, 45.000000, 0.000000 +31, -3.000000, 90.000000, 45.000000, 0.000000 +32, -3.000000, 90.000000, 45.000000, 0.000000 +33, -3.000000, 90.000000, 45.000000, 0.000000 +34, -3.000000, 90.000000, 45.000000, 0.000000 +35, -3.000000, 90.000000, 45.000000, 0.000000 +36, -3.000000, 90.000000, 45.000000, 0.000000 +37, -3.000000, 90.000000, 45.000000, 0.000000 +38, -3.000000, 90.000000, 45.000000, 0.000000 +39, -3.000000, 90.000000, 45.000000, 0.000000 +40, -3.000000, 90.000000, 45.000000, 0.000000 +41, -3.000000, 90.000000, 45.000000, 0.000000 +42, -3.000000, 90.000000, 45.000000, 0.000000 +43, -3.000000, 90.000000, 45.000000, 0.000000 +44, -3.000000, 90.000000, 45.000000, 0.000000 +45, -3.000000, 90.000000, 45.000000, 0.000000 +46, -3.000000, 90.000000, 45.000000, 0.000000 +47, -3.000000, 90.000000, 45.000000, 0.000000 +48, -3.000000, 90.000000, 45.000000, 0.000000 +49, -3.000000, 90.000000, 45.000000, 0.000000 +50, -3.000000, 90.000000, 45.000000, 0.000000 +51, -3.000000, 90.000000, 45.000000, 0.000000 +52, -3.000000, 90.000000, 45.000000, 0.000000 +53, -3.000000, 90.000000, 45.000000, 0.000000 +54, -3.000000, 90.000000, 45.000000, 0.000000 +55, -3.000000, 90.000000, 45.000000, 0.000000 +56, -3.000000, 90.000000, 45.000000, 0.000000 +57, -3.000000, 90.000000, 45.000000, 0.000000 +58, -3.000000, 90.000000, 45.000000, 0.000000 +59, -3.000000, 90.000000, 45.000000, 0.000000 +60, -3.000000, 90.000000, 45.000000, 0.000000 +61, -3.000000, 90.000000, 45.000000, 0.000000 +62, -3.000000, 90.000000, 45.000000, 0.000000 +63, -3.000000, 90.000000, 45.000000, 0.000000 +64, -3.000000, 90.000000, 45.000000, 0.000000 +65, -3.000000, 90.000000, 45.000000, 0.000000 +66, -3.000000, 90.000000, 45.000000, 0.000000 +67, -3.000000, 90.000000, 45.000000, 0.000000 +68, -3.000000, 90.000000, 45.000000, 0.000000 +69, -3.000000, 90.000000, 45.000000, 0.000000 +70, -3.000000, 90.000000, 45.000000, 0.000000 +71, -3.000000, 90.000000, 45.000000, 0.000000 +72, -3.000000, 90.000000, 45.000000, 0.000000 +73, -3.000000, 90.000000, 45.000000, 0.000000 +74, -3.000000, 90.000000, 45.000000, 0.000000 +75, -3.000000, 90.000000, 45.000000, 0.000000 +76, -3.000000, 90.000000, 45.000000, 0.000000 +77, -3.000000, 90.000000, 45.000000, 0.000000 +78, -3.000000, 90.000000, 45.000000, 0.000000 +79, -3.000000, 90.000000, 45.000000, 0.000000 +80, -3.000000, 90.000000, 45.000000, 0.000000 +81, -3.000000, 90.000000, 45.000000, 0.000000 +82, -3.000000, 90.000000, 45.000000, 0.000000 +83, -3.000000, 90.000000, 45.000000, 0.000000 +84, -3.000000, 90.000000, 45.000000, 0.000000 +85, -3.000000, 90.000000, 45.000000, 0.000000 +86, -3.000000, 90.000000, 45.000000, 0.000000 +87, -3.000000, 90.000000, 45.000000, 0.000000 +88, -3.000000, 90.000000, 45.000000, 0.000000 +89, -3.000000, 90.000000, 45.000000, 0.000000 +90, -3.000000, 90.000000, 45.000000, 0.000000 +91, -3.000000, 90.000000, 45.000000, 0.000000 +92, -3.000000, 90.000000, 45.000000, 0.000000 +93, -3.000000, 90.000000, 45.000000, 0.000000 +94, -3.000000, 90.000000, 45.000000, 0.000000 +95, -3.000000, 90.000000, 45.000000, 0.000000 +96, -3.000000, 90.000000, 45.000000, 0.000000 +97, -3.000000, 90.000000, 45.000000, 0.000000 +98, -3.000000, 90.000000, 45.000000, 0.000000 +99, -3.000000, 90.000000, 45.000000, 0.000000 +100, -3.000000, 92.000000, 48.000000, 0.000000 +101, -3.000000, 92.000000, 48.000000, 0.000000 +102, -3.000000, 92.000000, 48.000000, 0.000000 +103, -3.000000, 92.000000, 48.000000, 0.000000 +104, -3.000000, 92.000000, 48.000000, 0.000000 +105, -3.000000, 92.000000, 48.000000, 0.000000 +106, -3.000000, 92.000000, 48.000000, 0.000000 +107, -3.000000, 92.000000, 48.000000, 0.000000 +108, -3.000000, 92.000000, 48.000000, 0.000000 +109, -3.000000, 92.000000, 48.000000, 0.000000 +110, -3.000000, 92.000000, 48.000000, 0.000000 +111, -3.000000, 92.000000, 48.000000, 0.000000 +112, -3.000000, 92.000000, 48.000000, 0.000000 +113, -3.000000, 92.000000, 48.000000, 0.000000 +114, -3.000000, 92.000000, 48.000000, 0.000000 +115, -3.000000, 92.000000, 48.000000, 0.000000 +116, -3.000000, 92.000000, 48.000000, 0.000000 +117, -3.000000, 92.000000, 48.000000, 0.000000 +118, -3.000000, 92.000000, 48.000000, 0.000000 +119, -3.000000, 92.000000, 48.000000, 0.000000 +120, -3.000000, 92.000000, 48.000000, 0.000000 +121, -3.000000, 92.000000, 48.000000, 0.000000 +122, -3.000000, 92.000000, 48.000000, 0.000000 +123, -3.000000, 92.000000, 48.000000, 0.000000 +124, -3.000000, 92.000000, 48.000000, 0.000000 +125, -3.000000, 92.000000, 48.000000, 0.000000 +126, -3.000000, 92.000000, 48.000000, 0.000000 +127, -3.000000, 92.000000, 48.000000, 0.000000 +128, -3.000000, 92.000000, 48.000000, 0.000000 +129, -3.000000, 92.000000, 48.000000, 0.000000 +130, -3.000000, 92.000000, 48.000000, 0.000000 +131, -3.000000, 92.000000, 48.000000, 0.000000 +132, -3.000000, 92.000000, 48.000000, 0.000000 +133, -3.000000, 92.000000, 48.000000, 0.000000 +134, -3.000000, 92.000000, 48.000000, 0.000000 +135, -3.000000, 92.000000, 48.000000, 0.000000 +136, -3.000000, 92.000000, 48.000000, 0.000000 +137, -3.000000, 92.000000, 48.000000, 0.000000 +138, -3.000000, 92.000000, 48.000000, 0.000000 +139, -3.000000, 92.000000, 48.000000, 0.000000 +140, -3.000000, 92.000000, 48.000000, 0.000000 +141, -3.000000, 92.000000, 48.000000, 0.000000 +142, -3.000000, 92.000000, 48.000000, 0.000000 +143, -3.000000, 92.000000, 48.000000, 0.000000 +144, -3.000000, 92.000000, 48.000000, 0.000000 +145, -3.000000, 92.000000, 48.000000, 0.000000 +146, -3.000000, 92.000000, 48.000000, 0.000000 +147, -3.000000, 92.000000, 48.000000, 0.000000 +148, -3.000000, 92.000000, 48.000000, 0.000000 +149, -3.000000, 92.000000, 48.000000, 0.000000 +150, -3.000000, 92.000000, 48.000000, 0.000000 +151, -3.000000, 92.000000, 48.000000, 0.000000 +152, -3.000000, 92.000000, 48.000000, 0.000000 +153, -3.000000, 92.000000, 48.000000, 0.000000 +154, -3.000000, 92.000000, 48.000000, 0.000000 +155, -3.000000, 92.000000, 48.000000, 0.000000 +156, -3.000000, 92.000000, 48.000000, 0.000000 +157, -3.000000, 92.000000, 48.000000, 0.000000 +158, -3.000000, 92.000000, 48.000000, 0.000000 +159, -3.000000, 92.000000, 48.000000, 0.000000 +160, -3.000000, 92.000000, 48.000000, 0.000000 +161, -3.000000, 92.000000, 48.000000, 0.000000 +162, -3.000000, 92.000000, 48.000000, 0.000000 +163, -3.000000, 92.000000, 48.000000, 0.000000 +164, -3.000000, 92.000000, 48.000000, 0.000000 +165, -3.000000, 92.000000, 48.000000, 0.000000 +166, -3.000000, 92.000000, 48.000000, 0.000000 +167, -3.000000, 92.000000, 48.000000, 0.000000 +168, -3.000000, 92.000000, 48.000000, 0.000000 +169, -3.000000, 92.000000, 48.000000, 0.000000 +170, -3.000000, 92.000000, 48.000000, 0.000000 +171, -3.000000, 92.000000, 48.000000, 0.000000 +172, -3.000000, 92.000000, 48.000000, 0.000000 +173, -3.000000, 92.000000, 48.000000, 0.000000 +174, -3.000000, 92.000000, 48.000000, 0.000000 +175, -3.000000, 92.000000, 48.000000, 0.000000 +176, -3.000000, 92.000000, 48.000000, 0.000000 +177, -3.000000, 92.000000, 48.000000, 0.000000 +178, -3.000000, 92.000000, 48.000000, 0.000000 +179, -3.000000, 92.000000, 48.000000, 0.000000 +180, -3.000000, 92.000000, 48.000000, 0.000000 +181, -3.000000, 92.000000, 48.000000, 0.000000 +182, -3.000000, 92.000000, 48.000000, 0.000000 +183, -3.000000, 92.000000, 48.000000, 0.000000 +184, -3.000000, 92.000000, 48.000000, 0.000000 +185, -3.000000, 92.000000, 48.000000, 0.000000 +186, -3.000000, 92.000000, 48.000000, 0.000000 +187, -3.000000, 92.000000, 48.000000, 0.000000 +188, -3.000000, 92.000000, 48.000000, 0.000000 +189, -3.000000, 92.000000, 48.000000, 0.000000 +190, -3.000000, 92.000000, 48.000000, 0.000000 +191, -3.000000, 92.000000, 48.000000, 0.000000 +192, -3.000000, 92.000000, 48.000000, 0.000000 +193, -3.000000, 92.000000, 48.000000, 0.000000 +194, -3.000000, 92.000000, 48.000000, 0.000000 +195, -3.000000, 92.000000, 48.000000, 0.000000 +196, -3.000000, 92.000000, 48.000000, 0.000000 +197, -3.000000, 92.000000, 48.000000, 0.000000 +198, -3.000000, 92.000000, 48.000000, 0.000000 +199, -3.000000, 92.000000, 48.000000, 0.000000 +200, -3.000000, 94.000000, 51.000000, 0.000000 +201, -3.000000, 94.000000, 51.000000, 0.000000 +202, -3.000000, 94.000000, 51.000000, 0.000000 +203, -3.000000, 94.000000, 51.000000, 0.000000 +204, -3.000000, 94.000000, 51.000000, 0.000000 +205, -3.000000, 94.000000, 51.000000, 0.000000 +206, -3.000000, 94.000000, 51.000000, 0.000000 +207, -3.000000, 94.000000, 51.000000, 0.000000 +208, -3.000000, 94.000000, 51.000000, 0.000000 +209, -3.000000, 94.000000, 51.000000, 0.000000 +210, -3.000000, 94.000000, 51.000000, 0.000000 +211, -3.000000, 94.000000, 51.000000, 0.000000 +212, -3.000000, 94.000000, 51.000000, 0.000000 +213, -3.000000, 94.000000, 51.000000, 0.000000 +214, -3.000000, 94.000000, 51.000000, 0.000000 +215, -3.000000, 94.000000, 51.000000, 0.000000 +216, -3.000000, 94.000000, 51.000000, 0.000000 +217, -3.000000, 94.000000, 51.000000, 0.000000 +218, -3.000000, 94.000000, 51.000000, 0.000000 +219, -3.000000, 94.000000, 51.000000, 0.000000 +220, -3.000000, 94.000000, 51.000000, 0.000000 +221, -3.000000, 94.000000, 51.000000, 0.000000 +222, -3.000000, 94.000000, 51.000000, 0.000000 +223, -3.000000, 94.000000, 51.000000, 0.000000 +224, -3.000000, 94.000000, 51.000000, 0.000000 +225, -3.000000, 94.000000, 51.000000, 0.000000 +226, -3.000000, 94.000000, 51.000000, 0.000000 +227, -3.000000, 94.000000, 51.000000, 0.000000 +228, -3.000000, 94.000000, 51.000000, 0.000000 +229, -3.000000, 94.000000, 51.000000, 0.000000 +230, -3.000000, 94.000000, 51.000000, 0.000000 +231, -3.000000, 94.000000, 51.000000, 0.000000 +232, -3.000000, 94.000000, 51.000000, 0.000000 +233, -3.000000, 94.000000, 51.000000, 0.000000 +234, -3.000000, 94.000000, 51.000000, 0.000000 +235, -3.000000, 94.000000, 51.000000, 0.000000 +236, -3.000000, 94.000000, 51.000000, 0.000000 +237, -3.000000, 94.000000, 51.000000, 0.000000 +238, -3.000000, 94.000000, 51.000000, 0.000000 +239, -3.000000, 94.000000, 51.000000, 0.000000 +240, -3.000000, 94.000000, 51.000000, 0.000000 +241, -3.000000, 94.000000, 51.000000, 0.000000 +242, -3.000000, 94.000000, 51.000000, 0.000000 +243, -3.000000, 94.000000, 51.000000, 0.000000 +244, -3.000000, 94.000000, 51.000000, 0.000000 +245, -3.000000, 94.000000, 51.000000, 0.000000 +246, -3.000000, 94.000000, 51.000000, 0.000000 +247, -3.000000, 94.000000, 51.000000, 0.000000 +248, -3.000000, 94.000000, 51.000000, 0.000000 +249, -3.000000, 94.000000, 51.000000, 0.000000 +250, -3.000000, 94.000000, 51.000000, 0.000000 +251, -3.000000, 94.000000, 51.000000, 0.000000 +252, -3.000000, 94.000000, 51.000000, 0.000000 +253, -3.000000, 94.000000, 51.000000, 0.000000 +254, -3.000000, 94.000000, 51.000000, 0.000000 +255, -3.000000, 94.000000, 51.000000, 0.000000 +256, -3.000000, 94.000000, 51.000000, 0.000000 +257, -3.000000, 94.000000, 51.000000, 0.000000 +258, -3.000000, 94.000000, 51.000000, 0.000000 +259, -3.000000, 94.000000, 51.000000, 0.000000 +260, -3.000000, 94.000000, 51.000000, 0.000000 +261, -3.000000, 94.000000, 51.000000, 0.000000 +262, -3.000000, 94.000000, 51.000000, 0.000000 +263, -3.000000, 94.000000, 51.000000, 0.000000 +264, -3.000000, 94.000000, 51.000000, 0.000000 +265, -3.000000, 94.000000, 51.000000, 0.000000 +266, -3.000000, 94.000000, 51.000000, 0.000000 +267, -3.000000, 94.000000, 51.000000, 0.000000 +268, -3.000000, 94.000000, 51.000000, 0.000000 +269, -3.000000, 94.000000, 51.000000, 0.000000 +270, -3.000000, 94.000000, 51.000000, 0.000000 +271, -3.000000, 94.000000, 51.000000, 0.000000 +272, -3.000000, 94.000000, 51.000000, 0.000000 +273, -3.000000, 94.000000, 51.000000, 0.000000 +274, -3.000000, 94.000000, 51.000000, 0.000000 +275, -3.000000, 94.000000, 51.000000, 0.000000 +276, -3.000000, 94.000000, 51.000000, 0.000000 +277, -3.000000, 94.000000, 51.000000, 0.000000 +278, -3.000000, 94.000000, 51.000000, 0.000000 +279, -3.000000, 94.000000, 51.000000, 0.000000 +280, -3.000000, 94.000000, 51.000000, 0.000000 +281, -3.000000, 94.000000, 51.000000, 0.000000 +282, -3.000000, 94.000000, 51.000000, 0.000000 +283, -3.000000, 94.000000, 51.000000, 0.000000 +284, -3.000000, 94.000000, 51.000000, 0.000000 +285, -3.000000, 94.000000, 51.000000, 0.000000 +286, -3.000000, 94.000000, 51.000000, 0.000000 +287, -3.000000, 94.000000, 51.000000, 0.000000 +288, -3.000000, 94.000000, 51.000000, 0.000000 +289, -3.000000, 94.000000, 51.000000, 0.000000 +290, -3.000000, 94.000000, 51.000000, 0.000000 +291, -3.000000, 94.000000, 51.000000, 0.000000 +292, -3.000000, 94.000000, 51.000000, 0.000000 +293, -3.000000, 94.000000, 51.000000, 0.000000 +294, -3.000000, 94.000000, 51.000000, 0.000000 +295, -3.000000, 94.000000, 51.000000, 0.000000 +296, -3.000000, 94.000000, 51.000000, 0.000000 +297, -3.000000, 94.000000, 51.000000, 0.000000 +298, -3.000000, 94.000000, 51.000000, 0.000000 +299, -3.000000, 94.000000, 51.000000, 0.000000 +300, -3.000000, 96.000000, 54.000000, 0.000000 +301, -3.000000, 96.000000, 54.000000, 0.000000 +302, -3.000000, 96.000000, 54.000000, 0.000000 +303, -3.000000, 96.000000, 54.000000, 0.000000 +304, -3.000000, 96.000000, 54.000000, 0.000000 +305, -3.000000, 96.000000, 54.000000, 0.000000 +306, -3.000000, 96.000000, 54.000000, 0.000000 +307, -3.000000, 96.000000, 54.000000, 0.000000 +308, -3.000000, 96.000000, 54.000000, 0.000000 +309, -3.000000, 96.000000, 54.000000, 0.000000 +310, -3.000000, 96.000000, 54.000000, 0.000000 +311, -3.000000, 96.000000, 54.000000, 0.000000 +312, -3.000000, 96.000000, 54.000000, 0.000000 +313, -3.000000, 96.000000, 54.000000, 0.000000 +314, -3.000000, 96.000000, 54.000000, 0.000000 +315, -3.000000, 96.000000, 54.000000, 0.000000 +316, -3.000000, 96.000000, 54.000000, 0.000000 +317, -3.000000, 96.000000, 54.000000, 0.000000 +318, -3.000000, 96.000000, 54.000000, 0.000000 +319, -3.000000, 96.000000, 54.000000, 0.000000 +320, -3.000000, 96.000000, 54.000000, 0.000000 +321, -3.000000, 96.000000, 54.000000, 0.000000 +322, -3.000000, 96.000000, 54.000000, 0.000000 +323, -3.000000, 96.000000, 54.000000, 0.000000 +324, -3.000000, 96.000000, 54.000000, 0.000000 +325, -3.000000, 96.000000, 54.000000, 0.000000 +326, -3.000000, 96.000000, 54.000000, 0.000000 +327, -3.000000, 96.000000, 54.000000, 0.000000 +328, -3.000000, 96.000000, 54.000000, 0.000000 +329, -3.000000, 96.000000, 54.000000, 0.000000 +330, -3.000000, 96.000000, 54.000000, 0.000000 +331, -3.000000, 96.000000, 54.000000, 0.000000 +332, -3.000000, 96.000000, 54.000000, 0.000000 +333, -3.000000, 96.000000, 54.000000, 0.000000 +334, -3.000000, 96.000000, 54.000000, 0.000000 +335, -3.000000, 96.000000, 54.000000, 0.000000 +336, -3.000000, 96.000000, 54.000000, 0.000000 +337, -3.000000, 96.000000, 54.000000, 0.000000 +338, -3.000000, 96.000000, 54.000000, 0.000000 +339, -3.000000, 96.000000, 54.000000, 0.000000 +340, -3.000000, 96.000000, 54.000000, 0.000000 +341, -3.000000, 96.000000, 54.000000, 0.000000 +342, -3.000000, 96.000000, 54.000000, 0.000000 +343, -3.000000, 96.000000, 54.000000, 0.000000 +344, -3.000000, 96.000000, 54.000000, 0.000000 +345, -3.000000, 96.000000, 54.000000, 0.000000 +346, -3.000000, 96.000000, 54.000000, 0.000000 +347, -3.000000, 96.000000, 54.000000, 0.000000 +348, -3.000000, 96.000000, 54.000000, 0.000000 +349, -3.000000, 96.000000, 54.000000, 0.000000 +350, -3.000000, 96.000000, 54.000000, 0.000000 +351, -3.000000, 96.000000, 54.000000, 0.000000 +352, -3.000000, 96.000000, 54.000000, 0.000000 +353, -3.000000, 96.000000, 54.000000, 0.000000 +354, -3.000000, 96.000000, 54.000000, 0.000000 +355, -3.000000, 96.000000, 54.000000, 0.000000 +356, -3.000000, 96.000000, 54.000000, 0.000000 +357, -3.000000, 96.000000, 54.000000, 0.000000 +358, -3.000000, 96.000000, 54.000000, 0.000000 +359, -3.000000, 96.000000, 54.000000, 0.000000 +360, -3.000000, 96.000000, 54.000000, 0.000000 +361, -3.000000, 96.000000, 54.000000, 0.000000 +362, -3.000000, 96.000000, 54.000000, 0.000000 +363, -3.000000, 96.000000, 54.000000, 0.000000 +364, -3.000000, 96.000000, 54.000000, 0.000000 +365, -3.000000, 96.000000, 54.000000, 0.000000 +366, -3.000000, 96.000000, 54.000000, 0.000000 +367, -3.000000, 96.000000, 54.000000, 0.000000 +368, -3.000000, 96.000000, 54.000000, 0.000000 +369, -3.000000, 96.000000, 54.000000, 0.000000 +370, -3.000000, 96.000000, 54.000000, 0.000000 +371, -3.000000, 96.000000, 54.000000, 0.000000 +372, -3.000000, 96.000000, 54.000000, 0.000000 +373, -3.000000, 96.000000, 54.000000, 0.000000 +374, -3.000000, 96.000000, 54.000000, 0.000000 +375, -3.000000, 96.000000, 54.000000, 0.000000 +376, -3.000000, 96.000000, 54.000000, 0.000000 +377, -3.000000, 96.000000, 54.000000, 0.000000 +378, -3.000000, 96.000000, 54.000000, 0.000000 +379, -3.000000, 96.000000, 54.000000, 0.000000 +380, -3.000000, 96.000000, 54.000000, 0.000000 +381, -3.000000, 96.000000, 54.000000, 0.000000 +382, -3.000000, 96.000000, 54.000000, 0.000000 +383, -3.000000, 96.000000, 54.000000, 0.000000 +384, -3.000000, 96.000000, 54.000000, 0.000000 +385, -3.000000, 96.000000, 54.000000, 0.000000 +386, -3.000000, 96.000000, 54.000000, 0.000000 +387, -3.000000, 96.000000, 54.000000, 0.000000 +388, -3.000000, 96.000000, 54.000000, 0.000000 +389, -3.000000, 96.000000, 54.000000, 0.000000 +390, -3.000000, 96.000000, 54.000000, 0.000000 +391, -3.000000, 96.000000, 54.000000, 0.000000 +392, -3.000000, 96.000000, 54.000000, 0.000000 +393, -3.000000, 96.000000, 54.000000, 0.000000 +394, -3.000000, 96.000000, 54.000000, 0.000000 +395, -3.000000, 96.000000, 54.000000, 0.000000 +396, -3.000000, 96.000000, 54.000000, 0.000000 +397, -3.000000, 96.000000, 54.000000, 0.000000 +398, -3.000000, 96.000000, 54.000000, 0.000000 +399, -3.000000, 96.000000, 54.000000, 0.000000 +400, -3.000000, 98.000000, 57.000000, 0.000000 +401, -3.000000, 98.000000, 57.000000, 0.000000 +402, -3.000000, 98.000000, 57.000000, 0.000000 +403, -3.000000, 98.000000, 57.000000, 0.000000 +404, -3.000000, 98.000000, 57.000000, 0.000000 +405, -3.000000, 98.000000, 57.000000, 0.000000 +406, -3.000000, 98.000000, 57.000000, 0.000000 +407, -3.000000, 98.000000, 57.000000, 0.000000 +408, -3.000000, 98.000000, 57.000000, 0.000000 +409, -3.000000, 98.000000, 57.000000, 0.000000 +410, -3.000000, 98.000000, 57.000000, 0.000000 +411, -3.000000, 98.000000, 57.000000, 0.000000 +412, -3.000000, 98.000000, 57.000000, 0.000000 +413, -3.000000, 98.000000, 57.000000, 0.000000 +414, -3.000000, 98.000000, 57.000000, 0.000000 +415, -3.000000, 98.000000, 57.000000, 0.000000 +416, -3.000000, 98.000000, 57.000000, 0.000000 +417, -3.000000, 98.000000, 57.000000, 0.000000 +418, -3.000000, 98.000000, 57.000000, 0.000000 +419, -3.000000, 98.000000, 57.000000, 0.000000 +420, -3.000000, 98.000000, 57.000000, 0.000000 +421, -3.000000, 98.000000, 57.000000, 0.000000 +422, -3.000000, 98.000000, 57.000000, 0.000000 +423, -3.000000, 98.000000, 57.000000, 0.000000 +424, -3.000000, 98.000000, 57.000000, 0.000000 +425, -3.000000, 98.000000, 57.000000, 0.000000 +426, -3.000000, 98.000000, 57.000000, 0.000000 +427, -3.000000, 98.000000, 57.000000, 0.000000 +428, -3.000000, 98.000000, 57.000000, 0.000000 +429, -3.000000, 98.000000, 57.000000, 0.000000 +430, -3.000000, 98.000000, 57.000000, 0.000000 +431, -3.000000, 98.000000, 57.000000, 0.000000 +432, -3.000000, 98.000000, 57.000000, 0.000000 +433, -3.000000, 98.000000, 57.000000, 0.000000 +434, -3.000000, 98.000000, 57.000000, 0.000000 +435, -3.000000, 98.000000, 57.000000, 0.000000 +436, -3.000000, 98.000000, 57.000000, 0.000000 +437, -3.000000, 98.000000, 57.000000, 0.000000 +438, -3.000000, 98.000000, 57.000000, 0.000000 +439, -3.000000, 98.000000, 57.000000, 0.000000 +440, -3.000000, 98.000000, 57.000000, 0.000000 +441, -3.000000, 98.000000, 57.000000, 0.000000 +442, -3.000000, 98.000000, 57.000000, 0.000000 +443, -3.000000, 98.000000, 57.000000, 0.000000 +444, -3.000000, 98.000000, 57.000000, 0.000000 +445, -3.000000, 98.000000, 57.000000, 0.000000 +446, -3.000000, 98.000000, 57.000000, 0.000000 +447, -3.000000, 98.000000, 57.000000, 0.000000 +448, -3.000000, 98.000000, 57.000000, 0.000000 +449, -3.000000, 98.000000, 57.000000, 0.000000 +450, -3.000000, 98.000000, 57.000000, 0.000000 +451, -3.000000, 98.000000, 57.000000, 0.000000 +452, -3.000000, 98.000000, 57.000000, 0.000000 +453, -3.000000, 98.000000, 57.000000, 0.000000 +454, -3.000000, 98.000000, 57.000000, 0.000000 +455, -3.000000, 98.000000, 57.000000, 0.000000 +456, -3.000000, 98.000000, 57.000000, 0.000000 +457, -3.000000, 98.000000, 57.000000, 0.000000 +458, -3.000000, 98.000000, 57.000000, 0.000000 +459, -3.000000, 98.000000, 57.000000, 0.000000 +460, -3.000000, 98.000000, 57.000000, 0.000000 +461, -3.000000, 98.000000, 57.000000, 0.000000 +462, -3.000000, 98.000000, 57.000000, 0.000000 +463, -3.000000, 98.000000, 57.000000, 0.000000 +464, -3.000000, 98.000000, 57.000000, 0.000000 +465, -3.000000, 98.000000, 57.000000, 0.000000 +466, -3.000000, 98.000000, 57.000000, 0.000000 +467, -3.000000, 98.000000, 57.000000, 0.000000 +468, -3.000000, 98.000000, 57.000000, 0.000000 +469, -3.000000, 98.000000, 57.000000, 0.000000 +470, -3.000000, 98.000000, 57.000000, 0.000000 +471, -3.000000, 98.000000, 57.000000, 0.000000 +472, -3.000000, 98.000000, 57.000000, 0.000000 +473, -3.000000, 98.000000, 57.000000, 0.000000 +474, -3.000000, 98.000000, 57.000000, 0.000000 +475, -3.000000, 98.000000, 57.000000, 0.000000 +476, -3.000000, 98.000000, 57.000000, 0.000000 +477, -3.000000, 98.000000, 57.000000, 0.000000 +478, -3.000000, 98.000000, 57.000000, 0.000000 +479, -3.000000, 98.000000, 57.000000, 0.000000 +480, -3.000000, 98.000000, 57.000000, 0.000000 +481, -3.000000, 98.000000, 57.000000, 0.000000 +482, -3.000000, 98.000000, 57.000000, 0.000000 +483, -3.000000, 98.000000, 57.000000, 0.000000 +484, -3.000000, 98.000000, 57.000000, 0.000000 +485, -3.000000, 98.000000, 57.000000, 0.000000 +486, -3.000000, 98.000000, 57.000000, 0.000000 +487, -3.000000, 98.000000, 57.000000, 0.000000 +488, -3.000000, 98.000000, 57.000000, 0.000000 +489, -3.000000, 98.000000, 57.000000, 0.000000 +490, -3.000000, 98.000000, 57.000000, 0.000000 +491, -3.000000, 98.000000, 57.000000, 0.000000 +492, -3.000000, 98.000000, 57.000000, 0.000000 +493, -3.000000, 98.000000, 57.000000, 0.000000 +494, -3.000000, 98.000000, 57.000000, 0.000000 +495, -3.000000, 98.000000, 57.000000, 0.000000 +496, -3.000000, 98.000000, 57.000000, 0.000000 +497, -3.000000, 98.000000, 57.000000, 0.000000 +498, -3.000000, 98.000000, 57.000000, 0.000000 +499, -3.000000, 98.000000, 57.000000, 0.000000 +500, -3.000000, 100.000000, 60.000000, 0.000000 +501, -3.000000, 100.000000, 60.000000, 0.000000 +502, -3.000000, 100.000000, 60.000000, 0.000000 +503, -3.000000, 100.000000, 60.000000, 0.000000 +504, -3.000000, 100.000000, 60.000000, 0.000000 +505, -3.000000, 100.000000, 60.000000, 0.000000 +506, -3.000000, 100.000000, 60.000000, 0.000000 +507, -3.000000, 100.000000, 60.000000, 0.000000 +508, -3.000000, 100.000000, 60.000000, 0.000000 +509, -3.000000, 100.000000, 60.000000, 0.000000 +510, -3.000000, 100.000000, 60.000000, 0.000000 +511, -3.000000, 100.000000, 60.000000, 0.000000 +512, -3.000000, 100.000000, 60.000000, 0.000000 +513, -3.000000, 100.000000, 60.000000, 0.000000 +514, -3.000000, 100.000000, 60.000000, 0.000000 +515, -3.000000, 100.000000, 60.000000, 0.000000 +516, -3.000000, 100.000000, 60.000000, 0.000000 +517, -3.000000, 100.000000, 60.000000, 0.000000 +518, -3.000000, 100.000000, 60.000000, 0.000000 +519, -3.000000, 100.000000, 60.000000, 0.000000 +520, -3.000000, 100.000000, 60.000000, 0.000000 +521, -3.000000, 100.000000, 60.000000, 0.000000 +522, -3.000000, 100.000000, 60.000000, 0.000000 +523, -3.000000, 100.000000, 60.000000, 0.000000 +524, -3.000000, 100.000000, 60.000000, 0.000000 +525, -3.000000, 100.000000, 60.000000, 0.000000 +526, -3.000000, 100.000000, 60.000000, 0.000000 +527, -3.000000, 100.000000, 60.000000, 0.000000 +528, -3.000000, 100.000000, 60.000000, 0.000000 +529, -3.000000, 100.000000, 60.000000, 0.000000 +530, -3.000000, 100.000000, 60.000000, 0.000000 +531, -3.000000, 100.000000, 60.000000, 0.000000 +532, -3.000000, 100.000000, 60.000000, 0.000000 +533, -3.000000, 100.000000, 60.000000, 0.000000 +534, -3.000000, 100.000000, 60.000000, 0.000000 +535, -3.000000, 100.000000, 60.000000, 0.000000 +536, -3.000000, 100.000000, 60.000000, 0.000000 +537, -3.000000, 100.000000, 60.000000, 0.000000 +538, -3.000000, 100.000000, 60.000000, 0.000000 +539, -3.000000, 100.000000, 60.000000, 0.000000 +540, -3.000000, 100.000000, 60.000000, 0.000000 +541, -3.000000, 100.000000, 60.000000, 0.000000 +542, -3.000000, 100.000000, 60.000000, 0.000000 +543, -3.000000, 100.000000, 60.000000, 0.000000 +544, -3.000000, 100.000000, 60.000000, 0.000000 +545, -3.000000, 100.000000, 60.000000, 0.000000 +546, -3.000000, 100.000000, 60.000000, 0.000000 +547, -3.000000, 100.000000, 60.000000, 0.000000 +548, -3.000000, 100.000000, 60.000000, 0.000000 +549, -3.000000, 100.000000, 60.000000, 0.000000 +550, -3.000000, 100.000000, 60.000000, 0.000000 +551, -3.000000, 100.000000, 60.000000, 0.000000 +552, -3.000000, 100.000000, 60.000000, 0.000000 +553, -3.000000, 100.000000, 60.000000, 0.000000 +554, -3.000000, 100.000000, 60.000000, 0.000000 +555, -3.000000, 100.000000, 60.000000, 0.000000 +556, -3.000000, 100.000000, 60.000000, 0.000000 +557, -3.000000, 100.000000, 60.000000, 0.000000 +558, -3.000000, 100.000000, 60.000000, 0.000000 +559, -3.000000, 100.000000, 60.000000, 0.000000 +560, -3.000000, 100.000000, 60.000000, 0.000000 +561, -3.000000, 100.000000, 60.000000, 0.000000 +562, -3.000000, 100.000000, 60.000000, 0.000000 +563, -3.000000, 100.000000, 60.000000, 0.000000 +564, -3.000000, 100.000000, 60.000000, 0.000000 +565, -3.000000, 100.000000, 60.000000, 0.000000 +566, -3.000000, 100.000000, 60.000000, 0.000000 +567, -3.000000, 100.000000, 60.000000, 0.000000 +568, -3.000000, 100.000000, 60.000000, 0.000000 +569, -3.000000, 100.000000, 60.000000, 0.000000 +570, -3.000000, 100.000000, 60.000000, 0.000000 +571, -3.000000, 100.000000, 60.000000, 0.000000 +572, -3.000000, 100.000000, 60.000000, 0.000000 +573, -3.000000, 100.000000, 60.000000, 0.000000 +574, -3.000000, 100.000000, 60.000000, 0.000000 +575, -3.000000, 100.000000, 60.000000, 0.000000 +576, -3.000000, 100.000000, 60.000000, 0.000000 +577, -3.000000, 100.000000, 60.000000, 0.000000 +578, -3.000000, 100.000000, 60.000000, 0.000000 +579, -3.000000, 100.000000, 60.000000, 0.000000 +580, -3.000000, 100.000000, 60.000000, 0.000000 +581, -3.000000, 100.000000, 60.000000, 0.000000 +582, -3.000000, 100.000000, 60.000000, 0.000000 +583, -3.000000, 100.000000, 60.000000, 0.000000 +584, -3.000000, 100.000000, 60.000000, 0.000000 +585, -3.000000, 100.000000, 60.000000, 0.000000 +586, -3.000000, 100.000000, 60.000000, 0.000000 +587, -3.000000, 100.000000, 60.000000, 0.000000 +588, -3.000000, 100.000000, 60.000000, 0.000000 +589, -3.000000, 100.000000, 60.000000, 0.000000 +590, -3.000000, 100.000000, 60.000000, 0.000000 +591, -3.000000, 100.000000, 60.000000, 0.000000 +592, -3.000000, 100.000000, 60.000000, 0.000000 +593, -3.000000, 100.000000, 60.000000, 0.000000 +594, -3.000000, 100.000000, 60.000000, 0.000000 +595, -3.000000, 100.000000, 60.000000, 0.000000 +596, -3.000000, 100.000000, 60.000000, 0.000000 +597, -3.000000, 100.000000, 60.000000, 0.000000 +598, -3.000000, 100.000000, 60.000000, 0.000000 +599, -3.000000, 100.000000, 60.000000, 0.000000 +600, -3.000000, 102.000000, 63.000000, 0.000000 +601, -3.000000, 102.000000, 63.000000, 0.000000 +602, -3.000000, 102.000000, 63.000000, 0.000000 +603, -3.000000, 102.000000, 63.000000, 0.000000 +604, -3.000000, 102.000000, 63.000000, 0.000000 +605, -3.000000, 102.000000, 63.000000, 0.000000 +606, -3.000000, 102.000000, 63.000000, 0.000000 +607, -3.000000, 102.000000, 63.000000, 0.000000 +608, -3.000000, 102.000000, 63.000000, 0.000000 +609, -3.000000, 102.000000, 63.000000, 0.000000 +610, -3.000000, 102.000000, 63.000000, 0.000000 +611, -3.000000, 102.000000, 63.000000, 0.000000 +612, -3.000000, 102.000000, 63.000000, 0.000000 +613, -3.000000, 102.000000, 63.000000, 0.000000 +614, -3.000000, 102.000000, 63.000000, 0.000000 +615, -3.000000, 102.000000, 63.000000, 0.000000 +616, -3.000000, 102.000000, 63.000000, 0.000000 +617, -3.000000, 102.000000, 63.000000, 0.000000 +618, -3.000000, 102.000000, 63.000000, 0.000000 +619, -3.000000, 102.000000, 63.000000, 0.000000 +620, -3.000000, 102.000000, 63.000000, 0.000000 +621, -3.000000, 102.000000, 63.000000, 0.000000 +622, -3.000000, 102.000000, 63.000000, 0.000000 +623, -3.000000, 102.000000, 63.000000, 0.000000 +624, -3.000000, 102.000000, 63.000000, 0.000000 +625, -3.000000, 102.000000, 63.000000, 0.000000 +626, -3.000000, 102.000000, 63.000000, 0.000000 +627, -3.000000, 102.000000, 63.000000, 0.000000 +628, -3.000000, 102.000000, 63.000000, 0.000000 +629, -3.000000, 102.000000, 63.000000, 0.000000 +630, -3.000000, 102.000000, 63.000000, 0.000000 +631, -3.000000, 102.000000, 63.000000, 0.000000 +632, -3.000000, 102.000000, 63.000000, 0.000000 +633, -3.000000, 102.000000, 63.000000, 0.000000 +634, -3.000000, 102.000000, 63.000000, 0.000000 +635, -3.000000, 102.000000, 63.000000, 0.000000 +636, -3.000000, 102.000000, 63.000000, 0.000000 +637, -3.000000, 102.000000, 63.000000, 0.000000 +638, -3.000000, 102.000000, 63.000000, 0.000000 +639, -3.000000, 102.000000, 63.000000, 0.000000 +640, -3.000000, 102.000000, 63.000000, 0.000000 +641, -3.000000, 102.000000, 63.000000, 0.000000 +642, -3.000000, 102.000000, 63.000000, 0.000000 +643, -3.000000, 102.000000, 63.000000, 0.000000 +644, -3.000000, 102.000000, 63.000000, 0.000000 +645, -3.000000, 102.000000, 63.000000, 0.000000 +646, -3.000000, 102.000000, 63.000000, 0.000000 +647, -3.000000, 102.000000, 63.000000, 0.000000 +648, -3.000000, 102.000000, 63.000000, 0.000000 +649, -3.000000, 102.000000, 63.000000, 0.000000 +650, -3.000000, 102.000000, 63.000000, 0.000000 +651, -3.000000, 102.000000, 63.000000, 0.000000 +652, -3.000000, 102.000000, 63.000000, 0.000000 +653, -3.000000, 102.000000, 63.000000, 0.000000 +654, -3.000000, 102.000000, 63.000000, 0.000000 +655, -3.000000, 102.000000, 63.000000, 0.000000 +656, -3.000000, 102.000000, 63.000000, 0.000000 +657, -3.000000, 102.000000, 63.000000, 0.000000 +658, -3.000000, 102.000000, 63.000000, 0.000000 +659, -3.000000, 102.000000, 63.000000, 0.000000 +660, -3.000000, 102.000000, 63.000000, 0.000000 +661, -3.000000, 102.000000, 63.000000, 0.000000 +662, -3.000000, 102.000000, 63.000000, 0.000000 +663, -3.000000, 102.000000, 63.000000, 0.000000 +664, -3.000000, 102.000000, 63.000000, 0.000000 +665, -3.000000, 102.000000, 63.000000, 0.000000 +666, -3.000000, 102.000000, 63.000000, 0.000000 +667, -3.000000, 102.000000, 63.000000, 0.000000 +668, -3.000000, 102.000000, 63.000000, 0.000000 +669, -3.000000, 102.000000, 63.000000, 0.000000 +670, -3.000000, 102.000000, 63.000000, 0.000000 +671, -3.000000, 102.000000, 63.000000, 0.000000 +672, -3.000000, 102.000000, 63.000000, 0.000000 +673, -3.000000, 102.000000, 63.000000, 0.000000 +674, -3.000000, 102.000000, 63.000000, 0.000000 +675, -3.000000, 102.000000, 63.000000, 0.000000 +676, -3.000000, 102.000000, 63.000000, 0.000000 +677, -3.000000, 102.000000, 63.000000, 0.000000 +678, -3.000000, 102.000000, 63.000000, 0.000000 +679, -3.000000, 102.000000, 63.000000, 0.000000 +680, -3.000000, 102.000000, 63.000000, 0.000000 +681, -3.000000, 102.000000, 63.000000, 0.000000 +682, -3.000000, 102.000000, 63.000000, 0.000000 +683, -3.000000, 102.000000, 63.000000, 0.000000 +684, -3.000000, 102.000000, 63.000000, 0.000000 +685, -3.000000, 102.000000, 63.000000, 0.000000 +686, -3.000000, 102.000000, 63.000000, 0.000000 +687, -3.000000, 102.000000, 63.000000, 0.000000 +688, -3.000000, 102.000000, 63.000000, 0.000000 +689, -3.000000, 102.000000, 63.000000, 0.000000 +690, -3.000000, 102.000000, 63.000000, 0.000000 +691, -3.000000, 102.000000, 63.000000, 0.000000 +692, -3.000000, 102.000000, 63.000000, 0.000000 +693, -3.000000, 102.000000, 63.000000, 0.000000 +694, -3.000000, 102.000000, 63.000000, 0.000000 +695, -3.000000, 102.000000, 63.000000, 0.000000 +696, -3.000000, 102.000000, 63.000000, 0.000000 +697, -3.000000, 102.000000, 63.000000, 0.000000 +698, -3.000000, 102.000000, 63.000000, 0.000000 +699, -3.000000, 102.000000, 63.000000, 0.000000 +700, -3.000000, 104.000000, 66.000000, 0.000000 +701, -3.000000, 104.000000, 66.000000, 0.000000 +702, -3.000000, 104.000000, 66.000000, 0.000000 +703, -3.000000, 104.000000, 66.000000, 0.000000 +704, -3.000000, 104.000000, 66.000000, 0.000000 +705, -3.000000, 104.000000, 66.000000, 0.000000 +706, -3.000000, 104.000000, 66.000000, 0.000000 +707, -3.000000, 104.000000, 66.000000, 0.000000 +708, -3.000000, 104.000000, 66.000000, 0.000000 +709, -3.000000, 104.000000, 66.000000, 0.000000 +710, -3.000000, 104.000000, 66.000000, 0.000000 +711, -3.000000, 104.000000, 66.000000, 0.000000 +712, -3.000000, 104.000000, 66.000000, 0.000000 +713, -3.000000, 104.000000, 66.000000, 0.000000 +714, -3.000000, 104.000000, 66.000000, 0.000000 +715, -3.000000, 104.000000, 66.000000, 0.000000 +716, -3.000000, 104.000000, 66.000000, 0.000000 +717, -3.000000, 104.000000, 66.000000, 0.000000 +718, -3.000000, 104.000000, 66.000000, 0.000000 +719, -3.000000, 104.000000, 66.000000, 0.000000 +720, -3.000000, 104.000000, 66.000000, 0.000000 +721, -3.000000, 104.000000, 66.000000, 0.000000 +722, -3.000000, 104.000000, 66.000000, 0.000000 +723, -3.000000, 104.000000, 66.000000, 0.000000 +724, -3.000000, 104.000000, 66.000000, 0.000000 +725, -3.000000, 104.000000, 66.000000, 0.000000 +726, -3.000000, 104.000000, 66.000000, 0.000000 +727, -3.000000, 104.000000, 66.000000, 0.000000 +728, -3.000000, 104.000000, 66.000000, 0.000000 +729, -3.000000, 104.000000, 66.000000, 0.000000 +730, -3.000000, 104.000000, 66.000000, 0.000000 +731, -3.000000, 104.000000, 66.000000, 0.000000 +732, -3.000000, 104.000000, 66.000000, 0.000000 +733, -3.000000, 104.000000, 66.000000, 0.000000 +734, -3.000000, 104.000000, 66.000000, 0.000000 +735, -3.000000, 104.000000, 66.000000, 0.000000 +736, -3.000000, 104.000000, 66.000000, 0.000000 +737, -3.000000, 104.000000, 66.000000, 0.000000 +738, -3.000000, 104.000000, 66.000000, 0.000000 +739, -3.000000, 104.000000, 66.000000, 0.000000 +740, -3.000000, 104.000000, 66.000000, 0.000000 +741, -3.000000, 104.000000, 66.000000, 0.000000 +742, -3.000000, 104.000000, 66.000000, 0.000000 +743, -3.000000, 104.000000, 66.000000, 0.000000 +744, -3.000000, 104.000000, 66.000000, 0.000000 +745, -3.000000, 104.000000, 66.000000, 0.000000 +746, -3.000000, 104.000000, 66.000000, 0.000000 +747, -3.000000, 104.000000, 66.000000, 0.000000 +748, -3.000000, 104.000000, 66.000000, 0.000000 +749, -3.000000, 104.000000, 66.000000, 0.000000 +750, -3.000000, 104.000000, 66.000000, 0.000000 +751, -3.000000, 104.000000, 66.000000, 0.000000 +752, -3.000000, 104.000000, 66.000000, 0.000000 +753, -3.000000, 104.000000, 66.000000, 0.000000 +754, -3.000000, 104.000000, 66.000000, 0.000000 +755, -3.000000, 104.000000, 66.000000, 0.000000 +756, -3.000000, 104.000000, 66.000000, 0.000000 +757, -3.000000, 104.000000, 66.000000, 0.000000 +758, -3.000000, 104.000000, 66.000000, 0.000000 +759, -3.000000, 104.000000, 66.000000, 0.000000 +760, -3.000000, 104.000000, 66.000000, 0.000000 +761, -3.000000, 104.000000, 66.000000, 0.000000 +762, -3.000000, 104.000000, 66.000000, 0.000000 +763, -3.000000, 104.000000, 66.000000, 0.000000 +764, -3.000000, 104.000000, 66.000000, 0.000000 +765, -3.000000, 104.000000, 66.000000, 0.000000 +766, -3.000000, 104.000000, 66.000000, 0.000000 +767, -3.000000, 104.000000, 66.000000, 0.000000 +768, -3.000000, 104.000000, 66.000000, 0.000000 +769, -3.000000, 104.000000, 66.000000, 0.000000 +770, -3.000000, 104.000000, 66.000000, 0.000000 +771, -3.000000, 104.000000, 66.000000, 0.000000 +772, -3.000000, 104.000000, 66.000000, 0.000000 +773, -3.000000, 104.000000, 66.000000, 0.000000 +774, -3.000000, 104.000000, 66.000000, 0.000000 +775, -3.000000, 104.000000, 66.000000, 0.000000 +776, -3.000000, 104.000000, 66.000000, 0.000000 +777, -3.000000, 104.000000, 66.000000, 0.000000 +778, -3.000000, 104.000000, 66.000000, 0.000000 +779, -3.000000, 104.000000, 66.000000, 0.000000 +780, -3.000000, 104.000000, 66.000000, 0.000000 +781, -3.000000, 104.000000, 66.000000, 0.000000 +782, -3.000000, 104.000000, 66.000000, 0.000000 +783, -3.000000, 104.000000, 66.000000, 0.000000 +784, -3.000000, 104.000000, 66.000000, 0.000000 +785, -3.000000, 104.000000, 66.000000, 0.000000 +786, -3.000000, 104.000000, 66.000000, 0.000000 +787, -3.000000, 104.000000, 66.000000, 0.000000 +788, -3.000000, 104.000000, 66.000000, 0.000000 +789, -3.000000, 104.000000, 66.000000, 0.000000 +790, -3.000000, 104.000000, 66.000000, 0.000000 +791, -3.000000, 104.000000, 66.000000, 0.000000 +792, -3.000000, 104.000000, 66.000000, 0.000000 +793, -3.000000, 104.000000, 66.000000, 0.000000 +794, -3.000000, 104.000000, 66.000000, 0.000000 +795, -3.000000, 104.000000, 66.000000, 0.000000 +796, -3.000000, 104.000000, 66.000000, 0.000000 +797, -3.000000, 104.000000, 66.000000, 0.000000 +798, -3.000000, 104.000000, 66.000000, 0.000000 +799, -3.000000, 104.000000, 66.000000, 0.000000 +800, -3.000000, 106.000000, 69.000000, 0.000000 +801, -3.000000, 106.000000, 69.000000, 0.000000 +802, -3.000000, 106.000000, 69.000000, 0.000000 +803, -3.000000, 106.000000, 69.000000, 0.000000 +804, -3.000000, 106.000000, 69.000000, 0.000000 +805, -3.000000, 106.000000, 69.000000, 0.000000 +806, -3.000000, 106.000000, 69.000000, 0.000000 +807, -3.000000, 106.000000, 69.000000, 0.000000 +808, -3.000000, 106.000000, 69.000000, 0.000000 +809, -3.000000, 106.000000, 69.000000, 0.000000 +810, -3.000000, 106.000000, 69.000000, 0.000000 +811, -3.000000, 106.000000, 69.000000, 0.000000 +812, -3.000000, 106.000000, 69.000000, 0.000000 +813, -3.000000, 106.000000, 69.000000, 0.000000 +814, -3.000000, 106.000000, 69.000000, 0.000000 +815, -3.000000, 106.000000, 69.000000, 0.000000 +816, -3.000000, 106.000000, 69.000000, 0.000000 +817, -3.000000, 106.000000, 69.000000, 0.000000 +818, -3.000000, 106.000000, 69.000000, 0.000000 +819, -3.000000, 106.000000, 69.000000, 0.000000 +820, -3.000000, 106.000000, 69.000000, 0.000000 +821, -3.000000, 106.000000, 69.000000, 0.000000 +822, -3.000000, 106.000000, 69.000000, 0.000000 +823, -3.000000, 106.000000, 69.000000, 0.000000 +824, -3.000000, 106.000000, 69.000000, 0.000000 +825, -3.000000, 106.000000, 69.000000, 0.000000 +826, -3.000000, 106.000000, 69.000000, 0.000000 +827, -3.000000, 106.000000, 69.000000, 0.000000 +828, -3.000000, 106.000000, 69.000000, 0.000000 +829, -3.000000, 106.000000, 69.000000, 0.000000 +830, -3.000000, 106.000000, 69.000000, 0.000000 +831, -3.000000, 106.000000, 69.000000, 0.000000 +832, -3.000000, 106.000000, 69.000000, 0.000000 +833, -3.000000, 106.000000, 69.000000, 0.000000 +834, -3.000000, 106.000000, 69.000000, 0.000000 +835, -3.000000, 106.000000, 69.000000, 0.000000 +836, -3.000000, 106.000000, 69.000000, 0.000000 +837, -3.000000, 106.000000, 69.000000, 0.000000 +838, -3.000000, 106.000000, 69.000000, 0.000000 +839, -3.000000, 106.000000, 69.000000, 0.000000 +840, -3.000000, 106.000000, 69.000000, 0.000000 +841, -3.000000, 106.000000, 69.000000, 0.000000 +842, -3.000000, 106.000000, 69.000000, 0.000000 +843, -3.000000, 106.000000, 69.000000, 0.000000 +844, -3.000000, 106.000000, 69.000000, 0.000000 +845, -3.000000, 106.000000, 69.000000, 0.000000 +846, -3.000000, 106.000000, 69.000000, 0.000000 +847, -3.000000, 106.000000, 69.000000, 0.000000 +848, -3.000000, 106.000000, 69.000000, 0.000000 +849, -3.000000, 106.000000, 69.000000, 0.000000 +850, -3.000000, 106.000000, 69.000000, 0.000000 +851, -3.000000, 106.000000, 69.000000, 0.000000 +852, -3.000000, 106.000000, 69.000000, 0.000000 +853, -3.000000, 106.000000, 69.000000, 0.000000 +854, -3.000000, 106.000000, 69.000000, 0.000000 +855, -3.000000, 106.000000, 69.000000, 0.000000 +856, -3.000000, 106.000000, 69.000000, 0.000000 +857, -3.000000, 106.000000, 69.000000, 0.000000 +858, -3.000000, 106.000000, 69.000000, 0.000000 +859, -3.000000, 106.000000, 69.000000, 0.000000 +860, -3.000000, 106.000000, 69.000000, 0.000000 +861, -3.000000, 106.000000, 69.000000, 0.000000 +862, -3.000000, 106.000000, 69.000000, 0.000000 +863, -3.000000, 106.000000, 69.000000, 0.000000 +864, -3.000000, 106.000000, 69.000000, 0.000000 +865, -3.000000, 106.000000, 69.000000, 0.000000 +866, -3.000000, 106.000000, 69.000000, 0.000000 +867, -3.000000, 106.000000, 69.000000, 0.000000 +868, -3.000000, 106.000000, 69.000000, 0.000000 +869, -3.000000, 106.000000, 69.000000, 0.000000 +870, -3.000000, 106.000000, 69.000000, 0.000000 +871, -3.000000, 106.000000, 69.000000, 0.000000 +872, -3.000000, 106.000000, 69.000000, 0.000000 +873, -3.000000, 106.000000, 69.000000, 0.000000 +874, -3.000000, 106.000000, 69.000000, 0.000000 +875, -3.000000, 106.000000, 69.000000, 0.000000 +876, -3.000000, 106.000000, 69.000000, 0.000000 +877, -3.000000, 106.000000, 69.000000, 0.000000 +878, -3.000000, 106.000000, 69.000000, 0.000000 +879, -3.000000, 106.000000, 69.000000, 0.000000 +880, -3.000000, 106.000000, 69.000000, 0.000000 +881, -3.000000, 106.000000, 69.000000, 0.000000 +882, -3.000000, 106.000000, 69.000000, 0.000000 +883, -3.000000, 106.000000, 69.000000, 0.000000 +884, -3.000000, 106.000000, 69.000000, 0.000000 +885, -3.000000, 106.000000, 69.000000, 0.000000 +886, -3.000000, 106.000000, 69.000000, 0.000000 +887, -3.000000, 106.000000, 69.000000, 0.000000 +888, -3.000000, 106.000000, 69.000000, 0.000000 +889, -3.000000, 106.000000, 69.000000, 0.000000 +890, -3.000000, 106.000000, 69.000000, 0.000000 +891, -3.000000, 106.000000, 69.000000, 0.000000 +892, -3.000000, 106.000000, 69.000000, 0.000000 +893, -3.000000, 106.000000, 69.000000, 0.000000 +894, -3.000000, 106.000000, 69.000000, 0.000000 +895, -3.000000, 106.000000, 69.000000, 0.000000 +896, -3.000000, 106.000000, 69.000000, 0.000000 +897, -3.000000, 106.000000, 69.000000, 0.000000 +898, -3.000000, 106.000000, 69.000000, 0.000000 +899, -3.000000, 106.000000, 69.000000, 0.000000 +900, -3.000000, 108.000000, 72.000000, 0.000000 +901, -3.000000, 108.000000, 72.000000, 0.000000 +902, -3.000000, 108.000000, 72.000000, 0.000000 +903, -3.000000, 108.000000, 72.000000, 0.000000 +904, -3.000000, 108.000000, 72.000000, 0.000000 +905, -3.000000, 108.000000, 72.000000, 0.000000 +906, -3.000000, 108.000000, 72.000000, 0.000000 +907, -3.000000, 108.000000, 72.000000, 0.000000 +908, -3.000000, 108.000000, 72.000000, 0.000000 +909, -3.000000, 108.000000, 72.000000, 0.000000 +910, -3.000000, 108.000000, 72.000000, 0.000000 +911, -3.000000, 108.000000, 72.000000, 0.000000 +912, -3.000000, 108.000000, 72.000000, 0.000000 +913, -3.000000, 108.000000, 72.000000, 0.000000 +914, -3.000000, 108.000000, 72.000000, 0.000000 +915, -3.000000, 108.000000, 72.000000, 0.000000 +916, -3.000000, 108.000000, 72.000000, 0.000000 +917, -3.000000, 108.000000, 72.000000, 0.000000 +918, -3.000000, 108.000000, 72.000000, 0.000000 +919, -3.000000, 108.000000, 72.000000, 0.000000 +920, -3.000000, 108.000000, 72.000000, 0.000000 +921, -3.000000, 108.000000, 72.000000, 0.000000 +922, -3.000000, 108.000000, 72.000000, 0.000000 +923, -3.000000, 108.000000, 72.000000, 0.000000 +924, -3.000000, 108.000000, 72.000000, 0.000000 +925, -3.000000, 108.000000, 72.000000, 0.000000 +926, -3.000000, 108.000000, 72.000000, 0.000000 +927, -3.000000, 108.000000, 72.000000, 0.000000 +928, -3.000000, 108.000000, 72.000000, 0.000000 +929, -3.000000, 108.000000, 72.000000, 0.000000 +930, -3.000000, 108.000000, 72.000000, 0.000000 +931, -3.000000, 108.000000, 72.000000, 0.000000 +932, -3.000000, 108.000000, 72.000000, 0.000000 +933, -3.000000, 108.000000, 72.000000, 0.000000 +934, -3.000000, 108.000000, 72.000000, 0.000000 +935, -3.000000, 108.000000, 72.000000, 0.000000 +936, -3.000000, 108.000000, 72.000000, 0.000000 +937, -3.000000, 108.000000, 72.000000, 0.000000 +938, -3.000000, 108.000000, 72.000000, 0.000000 +939, -3.000000, 108.000000, 72.000000, 0.000000 +940, -3.000000, 108.000000, 72.000000, 0.000000 +941, -3.000000, 108.000000, 72.000000, 0.000000 +942, -3.000000, 108.000000, 72.000000, 0.000000 +943, -3.000000, 108.000000, 72.000000, 0.000000 +944, -3.000000, 108.000000, 72.000000, 0.000000 +945, -3.000000, 108.000000, 72.000000, 0.000000 +946, -3.000000, 108.000000, 72.000000, 0.000000 +947, -3.000000, 108.000000, 72.000000, 0.000000 +948, -3.000000, 108.000000, 72.000000, 0.000000 +949, -3.000000, 108.000000, 72.000000, 0.000000 +950, -3.000000, 108.000000, 72.000000, 0.000000 +951, -3.000000, 108.000000, 72.000000, 0.000000 +952, -3.000000, 108.000000, 72.000000, 0.000000 +953, -3.000000, 108.000000, 72.000000, 0.000000 +954, -3.000000, 108.000000, 72.000000, 0.000000 +955, -3.000000, 108.000000, 72.000000, 0.000000 +956, -3.000000, 108.000000, 72.000000, 0.000000 +957, -3.000000, 108.000000, 72.000000, 0.000000 +958, -3.000000, 108.000000, 72.000000, 0.000000 +959, -3.000000, 108.000000, 72.000000, 0.000000 +960, -3.000000, 108.000000, 72.000000, 0.000000 +961, -3.000000, 108.000000, 72.000000, 0.000000 +962, -3.000000, 108.000000, 72.000000, 0.000000 +963, -3.000000, 108.000000, 72.000000, 0.000000 +964, -3.000000, 108.000000, 72.000000, 0.000000 +965, -3.000000, 108.000000, 72.000000, 0.000000 +966, -3.000000, 108.000000, 72.000000, 0.000000 +967, -3.000000, 108.000000, 72.000000, 0.000000 +968, -3.000000, 108.000000, 72.000000, 0.000000 +969, -3.000000, 108.000000, 72.000000, 0.000000 +970, -3.000000, 108.000000, 72.000000, 0.000000 +971, -3.000000, 108.000000, 72.000000, 0.000000 +972, -3.000000, 108.000000, 72.000000, 0.000000 +973, -3.000000, 108.000000, 72.000000, 0.000000 +974, -3.000000, 108.000000, 72.000000, 0.000000 +975, -3.000000, 108.000000, 72.000000, 0.000000 +976, -3.000000, 108.000000, 72.000000, 0.000000 +977, -3.000000, 108.000000, 72.000000, 0.000000 +978, -3.000000, 108.000000, 72.000000, 0.000000 +979, -3.000000, 108.000000, 72.000000, 0.000000 +980, -3.000000, 108.000000, 72.000000, 0.000000 +981, -3.000000, 108.000000, 72.000000, 0.000000 +982, -3.000000, 108.000000, 72.000000, 0.000000 +983, -3.000000, 108.000000, 72.000000, 0.000000 +984, -3.000000, 108.000000, 72.000000, 0.000000 +985, -3.000000, 108.000000, 72.000000, 0.000000 +986, -3.000000, 108.000000, 72.000000, 0.000000 +987, -3.000000, 108.000000, 72.000000, 0.000000 +988, -3.000000, 108.000000, 72.000000, 0.000000 +989, -3.000000, 108.000000, 72.000000, 0.000000 +990, -3.000000, 108.000000, 72.000000, 0.000000 +991, -3.000000, 108.000000, 72.000000, 0.000000 +992, -3.000000, 108.000000, 72.000000, 0.000000 +993, -3.000000, 108.000000, 72.000000, 0.000000 +994, -3.000000, 108.000000, 72.000000, 0.000000 +995, -3.000000, 108.000000, 72.000000, 0.000000 +996, -3.000000, 108.000000, 72.000000, 0.000000 +997, -3.000000, 108.000000, 72.000000, 0.000000 +998, -3.000000, 108.000000, 72.000000, 0.000000 +999, -3.000000, 108.000000, 72.000000, 0.000000 +1000, -3.000000, 110.000000, 75.000000, 0.000000 +1001, -3.000000, 110.000000, 75.000000, 0.000000 +1002, -3.000000, 110.000000, 75.000000, 0.000000 +1003, -3.000000, 110.000000, 75.000000, 0.000000 +1004, -3.000000, 110.000000, 75.000000, 0.000000 +1005, -3.000000, 110.000000, 75.000000, 0.000000 +1006, -3.000000, 110.000000, 75.000000, 0.000000 +1007, -3.000000, 110.000000, 75.000000, 0.000000 +1008, -3.000000, 110.000000, 75.000000, 0.000000 +1009, -3.000000, 110.000000, 75.000000, 0.000000 +1010, -3.000000, 110.000000, 75.000000, 0.000000 +1011, -3.000000, 110.000000, 75.000000, 0.000000 +1012, -3.000000, 110.000000, 75.000000, 0.000000 +1013, -3.000000, 110.000000, 75.000000, 0.000000 +1014, -3.000000, 110.000000, 75.000000, 0.000000 +1015, -3.000000, 110.000000, 75.000000, 0.000000 +1016, -3.000000, 110.000000, 75.000000, 0.000000 +1017, -3.000000, 110.000000, 75.000000, 0.000000 +1018, -3.000000, 110.000000, 75.000000, 0.000000 +1019, -3.000000, 110.000000, 75.000000, 0.000000 +1020, -3.000000, 110.000000, 75.000000, 0.000000 +1021, -3.000000, 110.000000, 75.000000, 0.000000 +1022, -3.000000, 110.000000, 75.000000, 0.000000 +1023, -3.000000, 110.000000, 75.000000, 0.000000 +1024, -3.000000, 110.000000, 75.000000, 0.000000 +1025, -3.000000, 110.000000, 75.000000, 0.000000 +1026, -3.000000, 110.000000, 75.000000, 0.000000 +1027, -3.000000, 110.000000, 75.000000, 0.000000 +1028, -3.000000, 110.000000, 75.000000, 0.000000 +1029, -3.000000, 110.000000, 75.000000, 0.000000 +1030, -3.000000, 110.000000, 75.000000, 0.000000 +1031, -3.000000, 110.000000, 75.000000, 0.000000 +1032, -3.000000, 110.000000, 75.000000, 0.000000 +1033, -3.000000, 110.000000, 75.000000, 0.000000 +1034, -3.000000, 110.000000, 75.000000, 0.000000 +1035, -3.000000, 110.000000, 75.000000, 0.000000 +1036, -3.000000, 110.000000, 75.000000, 0.000000 +1037, -3.000000, 110.000000, 75.000000, 0.000000 +1038, -3.000000, 110.000000, 75.000000, 0.000000 +1039, -3.000000, 110.000000, 75.000000, 0.000000 +1040, -3.000000, 110.000000, 75.000000, 0.000000 +1041, -3.000000, 110.000000, 75.000000, 0.000000 +1042, -3.000000, 110.000000, 75.000000, 0.000000 +1043, -3.000000, 110.000000, 75.000000, 0.000000 +1044, -3.000000, 110.000000, 75.000000, 0.000000 +1045, -3.000000, 110.000000, 75.000000, 0.000000 +1046, -3.000000, 110.000000, 75.000000, 0.000000 +1047, -3.000000, 110.000000, 75.000000, 0.000000 +1048, -3.000000, 110.000000, 75.000000, 0.000000 +1049, -3.000000, 110.000000, 75.000000, 0.000000 +1050, -3.000000, 110.000000, 75.000000, 0.000000 +1051, -3.000000, 110.000000, 75.000000, 0.000000 +1052, -3.000000, 110.000000, 75.000000, 0.000000 +1053, -3.000000, 110.000000, 75.000000, 0.000000 +1054, -3.000000, 110.000000, 75.000000, 0.000000 +1055, -3.000000, 110.000000, 75.000000, 0.000000 +1056, -3.000000, 110.000000, 75.000000, 0.000000 +1057, -3.000000, 110.000000, 75.000000, 0.000000 +1058, -3.000000, 110.000000, 75.000000, 0.000000 +1059, -3.000000, 110.000000, 75.000000, 0.000000 +1060, -3.000000, 110.000000, 75.000000, 0.000000 +1061, -3.000000, 110.000000, 75.000000, 0.000000 +1062, -3.000000, 110.000000, 75.000000, 0.000000 +1063, -3.000000, 110.000000, 75.000000, 0.000000 +1064, -3.000000, 110.000000, 75.000000, 0.000000 +1065, -3.000000, 110.000000, 75.000000, 0.000000 +1066, -3.000000, 110.000000, 75.000000, 0.000000 +1067, -3.000000, 110.000000, 75.000000, 0.000000 +1068, -3.000000, 110.000000, 75.000000, 0.000000 +1069, -3.000000, 110.000000, 75.000000, 0.000000 +1070, -3.000000, 110.000000, 75.000000, 0.000000 +1071, -3.000000, 110.000000, 75.000000, 0.000000 +1072, -3.000000, 110.000000, 75.000000, 0.000000 +1073, -3.000000, 110.000000, 75.000000, 0.000000 +1074, -3.000000, 110.000000, 75.000000, 0.000000 +1075, -3.000000, 110.000000, 75.000000, 0.000000 +1076, -3.000000, 110.000000, 75.000000, 0.000000 +1077, -3.000000, 110.000000, 75.000000, 0.000000 +1078, -3.000000, 110.000000, 75.000000, 0.000000 +1079, -3.000000, 110.000000, 75.000000, 0.000000 +1080, -3.000000, 110.000000, 75.000000, 0.000000 +1081, -3.000000, 110.000000, 75.000000, 0.000000 +1082, -3.000000, 110.000000, 75.000000, 0.000000 +1083, -3.000000, 110.000000, 75.000000, 0.000000 +1084, -3.000000, 110.000000, 75.000000, 0.000000 +1085, -3.000000, 110.000000, 75.000000, 0.000000 +1086, -3.000000, 110.000000, 75.000000, 0.000000 +1087, -3.000000, 110.000000, 75.000000, 0.000000 +1088, -3.000000, 110.000000, 75.000000, 0.000000 +1089, -3.000000, 110.000000, 75.000000, 0.000000 +1090, -3.000000, 110.000000, 75.000000, 0.000000 +1091, -3.000000, 110.000000, 75.000000, 0.000000 +1092, -3.000000, 110.000000, 75.000000, 0.000000 +1093, -3.000000, 110.000000, 75.000000, 0.000000 +1094, -3.000000, 110.000000, 75.000000, 0.000000 +1095, -3.000000, 110.000000, 75.000000, 0.000000 +1096, -3.000000, 110.000000, 75.000000, 0.000000 +1097, -3.000000, 110.000000, 75.000000, 0.000000 +1098, -3.000000, 110.000000, 75.000000, 0.000000 +1099, -3.000000, 110.000000, 75.000000, 0.000000 +1100, -3.000000, 112.000000, 78.000000, 0.000000 +1101, -3.000000, 112.000000, 78.000000, 0.000000 +1102, -3.000000, 112.000000, 78.000000, 0.000000 +1103, -3.000000, 112.000000, 78.000000, 0.000000 +1104, -3.000000, 112.000000, 78.000000, 0.000000 +1105, -3.000000, 112.000000, 78.000000, 0.000000 +1106, -3.000000, 112.000000, 78.000000, 0.000000 +1107, -3.000000, 112.000000, 78.000000, 0.000000 +1108, -3.000000, 112.000000, 78.000000, 0.000000 +1109, -3.000000, 112.000000, 78.000000, 0.000000 +1110, -3.000000, 112.000000, 78.000000, 0.000000 +1111, -3.000000, 112.000000, 78.000000, 0.000000 +1112, -3.000000, 112.000000, 78.000000, 0.000000 +1113, -3.000000, 112.000000, 78.000000, 0.000000 +1114, -3.000000, 112.000000, 78.000000, 0.000000 +1115, -3.000000, 112.000000, 78.000000, 0.000000 +1116, -3.000000, 112.000000, 78.000000, 0.000000 +1117, -3.000000, 112.000000, 78.000000, 0.000000 +1118, -3.000000, 112.000000, 78.000000, 0.000000 +1119, -3.000000, 112.000000, 78.000000, 0.000000 +1120, -3.000000, 112.000000, 78.000000, 0.000000 +1121, -3.000000, 112.000000, 78.000000, 0.000000 +1122, -3.000000, 112.000000, 78.000000, 0.000000 +1123, -3.000000, 112.000000, 78.000000, 0.000000 +1124, -3.000000, 112.000000, 78.000000, 0.000000 +1125, -3.000000, 112.000000, 78.000000, 0.000000 +1126, -3.000000, 112.000000, 78.000000, 0.000000 +1127, -3.000000, 112.000000, 78.000000, 0.000000 +1128, -3.000000, 112.000000, 78.000000, 0.000000 +1129, -3.000000, 112.000000, 78.000000, 0.000000 +1130, -3.000000, 112.000000, 78.000000, 0.000000 +1131, -3.000000, 112.000000, 78.000000, 0.000000 +1132, -3.000000, 112.000000, 78.000000, 0.000000 +1133, -3.000000, 112.000000, 78.000000, 0.000000 +1134, -3.000000, 112.000000, 78.000000, 0.000000 +1135, -3.000000, 112.000000, 78.000000, 0.000000 +1136, -3.000000, 112.000000, 78.000000, 0.000000 +1137, -3.000000, 112.000000, 78.000000, 0.000000 +1138, -3.000000, 112.000000, 78.000000, 0.000000 +1139, -3.000000, 112.000000, 78.000000, 0.000000 +1140, -3.000000, 112.000000, 78.000000, 0.000000 +1141, -3.000000, 112.000000, 78.000000, 0.000000 +1142, -3.000000, 112.000000, 78.000000, 0.000000 +1143, -3.000000, 112.000000, 78.000000, 0.000000 +1144, -3.000000, 112.000000, 78.000000, 0.000000 +1145, -3.000000, 112.000000, 78.000000, 0.000000 +1146, -3.000000, 112.000000, 78.000000, 0.000000 +1147, -3.000000, 112.000000, 78.000000, 0.000000 +1148, -3.000000, 112.000000, 78.000000, 0.000000 +1149, -3.000000, 112.000000, 78.000000, 0.000000 +1150, -3.000000, 112.000000, 78.000000, 0.000000 +1151, -3.000000, 112.000000, 78.000000, 0.000000 +1152, -3.000000, 112.000000, 78.000000, 0.000000 +1153, -3.000000, 112.000000, 78.000000, 0.000000 +1154, -3.000000, 112.000000, 78.000000, 0.000000 +1155, -3.000000, 112.000000, 78.000000, 0.000000 +1156, -3.000000, 112.000000, 78.000000, 0.000000 +1157, -3.000000, 112.000000, 78.000000, 0.000000 +1158, -3.000000, 112.000000, 78.000000, 0.000000 +1159, -3.000000, 112.000000, 78.000000, 0.000000 +1160, -3.000000, 112.000000, 78.000000, 0.000000 +1161, -3.000000, 112.000000, 78.000000, 0.000000 +1162, -3.000000, 112.000000, 78.000000, 0.000000 +1163, -3.000000, 112.000000, 78.000000, 0.000000 +1164, -3.000000, 112.000000, 78.000000, 0.000000 +1165, -3.000000, 112.000000, 78.000000, 0.000000 +1166, -3.000000, 112.000000, 78.000000, 0.000000 +1167, -3.000000, 112.000000, 78.000000, 0.000000 +1168, -3.000000, 112.000000, 78.000000, 0.000000 +1169, -3.000000, 112.000000, 78.000000, 0.000000 +1170, -3.000000, 112.000000, 78.000000, 0.000000 +1171, -3.000000, 112.000000, 78.000000, 0.000000 +1172, -3.000000, 112.000000, 78.000000, 0.000000 +1173, -3.000000, 112.000000, 78.000000, 0.000000 +1174, -3.000000, 112.000000, 78.000000, 0.000000 +1175, -3.000000, 112.000000, 78.000000, 0.000000 +1176, -3.000000, 112.000000, 78.000000, 0.000000 +1177, -3.000000, 112.000000, 78.000000, 0.000000 +1178, -3.000000, 112.000000, 78.000000, 0.000000 +1179, -3.000000, 112.000000, 78.000000, 0.000000 +1180, -3.000000, 112.000000, 78.000000, 0.000000 +1181, -3.000000, 112.000000, 78.000000, 0.000000 +1182, -3.000000, 112.000000, 78.000000, 0.000000 +1183, -3.000000, 112.000000, 78.000000, 0.000000 +1184, -3.000000, 112.000000, 78.000000, 0.000000 +1185, -3.000000, 112.000000, 78.000000, 0.000000 +1186, -3.000000, 112.000000, 78.000000, 0.000000 +1187, -3.000000, 112.000000, 78.000000, 0.000000 +1188, -3.000000, 112.000000, 78.000000, 0.000000 +1189, -3.000000, 112.000000, 78.000000, 0.000000 +1190, -3.000000, 112.000000, 78.000000, 0.000000 +1191, -3.000000, 112.000000, 78.000000, 0.000000 +1192, -3.000000, 112.000000, 78.000000, 0.000000 +1193, -3.000000, 112.000000, 78.000000, 0.000000 +1194, -3.000000, 112.000000, 78.000000, 0.000000 +1195, -3.000000, 112.000000, 78.000000, 0.000000 +1196, -3.000000, 112.000000, 78.000000, 0.000000 +1197, -3.000000, 112.000000, 78.000000, 0.000000 +1198, -3.000000, 112.000000, 78.000000, 0.000000 +1199, -3.000000, 112.000000, 78.000000, 0.000000 +1200, -3.000000, 114.000000, 81.000000, 0.000000 +1201, -3.000000, 114.000000, 81.000000, 0.000000 +1202, -3.000000, 114.000000, 81.000000, 0.000000 +1203, -3.000000, 114.000000, 81.000000, 0.000000 +1204, -3.000000, 114.000000, 81.000000, 0.000000 +1205, -3.000000, 114.000000, 81.000000, 0.000000 +1206, -3.000000, 114.000000, 81.000000, 0.000000 +1207, -3.000000, 114.000000, 81.000000, 0.000000 +1208, -3.000000, 114.000000, 81.000000, 0.000000 +1209, -3.000000, 114.000000, 81.000000, 0.000000 +1210, -3.000000, 114.000000, 81.000000, 0.000000 +1211, -3.000000, 114.000000, 81.000000, 0.000000 +1212, -3.000000, 114.000000, 81.000000, 0.000000 +1213, -3.000000, 114.000000, 81.000000, 0.000000 +1214, -3.000000, 114.000000, 81.000000, 0.000000 +1215, -3.000000, 114.000000, 81.000000, 0.000000 +1216, -3.000000, 114.000000, 81.000000, 0.000000 +1217, -3.000000, 114.000000, 81.000000, 0.000000 +1218, -3.000000, 114.000000, 81.000000, 0.000000 +1219, -3.000000, 114.000000, 81.000000, 0.000000 +1220, -3.000000, 114.000000, 81.000000, 0.000000 +1221, -3.000000, 114.000000, 81.000000, 0.000000 +1222, -3.000000, 114.000000, 81.000000, 0.000000 +1223, -3.000000, 114.000000, 81.000000, 0.000000 +1224, -3.000000, 114.000000, 81.000000, 0.000000 +1225, -3.000000, 114.000000, 81.000000, 0.000000 +1226, -3.000000, 114.000000, 81.000000, 0.000000 +1227, -3.000000, 114.000000, 81.000000, 0.000000 +1228, -3.000000, 114.000000, 81.000000, 0.000000 +1229, -3.000000, 114.000000, 81.000000, 0.000000 +1230, -3.000000, 114.000000, 81.000000, 0.000000 +1231, -3.000000, 114.000000, 81.000000, 0.000000 +1232, -3.000000, 114.000000, 81.000000, 0.000000 +1233, -3.000000, 114.000000, 81.000000, 0.000000 +1234, -3.000000, 114.000000, 81.000000, 0.000000 +1235, -3.000000, 114.000000, 81.000000, 0.000000 +1236, -3.000000, 114.000000, 81.000000, 0.000000 +1237, -3.000000, 114.000000, 81.000000, 0.000000 +1238, -3.000000, 114.000000, 81.000000, 0.000000 +1239, -3.000000, 114.000000, 81.000000, 0.000000 +1240, -3.000000, 114.000000, 81.000000, 0.000000 +1241, -3.000000, 114.000000, 81.000000, 0.000000 +1242, -3.000000, 114.000000, 81.000000, 0.000000 +1243, -3.000000, 114.000000, 81.000000, 0.000000 +1244, -3.000000, 114.000000, 81.000000, 0.000000 +1245, -3.000000, 114.000000, 81.000000, 0.000000 +1246, -3.000000, 114.000000, 81.000000, 0.000000 +1247, -3.000000, 114.000000, 81.000000, 0.000000 +1248, -3.000000, 114.000000, 81.000000, 0.000000 +1249, -3.000000, 114.000000, 81.000000, 0.000000 +1250, -3.000000, 114.000000, 81.000000, 0.000000 +1251, -3.000000, 114.000000, 81.000000, 0.000000 +1252, -3.000000, 114.000000, 81.000000, 0.000000 +1253, -3.000000, 114.000000, 81.000000, 0.000000 +1254, -3.000000, 114.000000, 81.000000, 0.000000 +1255, -3.000000, 114.000000, 81.000000, 0.000000 +1256, -3.000000, 114.000000, 81.000000, 0.000000 +1257, -3.000000, 114.000000, 81.000000, 0.000000 +1258, -3.000000, 114.000000, 81.000000, 0.000000 +1259, -3.000000, 114.000000, 81.000000, 0.000000 +1260, -3.000000, 114.000000, 81.000000, 0.000000 +1261, -3.000000, 114.000000, 81.000000, 0.000000 +1262, -3.000000, 114.000000, 81.000000, 0.000000 +1263, -3.000000, 114.000000, 81.000000, 0.000000 +1264, -3.000000, 114.000000, 81.000000, 0.000000 +1265, -3.000000, 114.000000, 81.000000, 0.000000 +1266, -3.000000, 114.000000, 81.000000, 0.000000 +1267, -3.000000, 114.000000, 81.000000, 0.000000 +1268, -3.000000, 114.000000, 81.000000, 0.000000 +1269, -3.000000, 114.000000, 81.000000, 0.000000 +1270, -3.000000, 114.000000, 81.000000, 0.000000 +1271, -3.000000, 114.000000, 81.000000, 0.000000 +1272, -3.000000, 114.000000, 81.000000, 0.000000 +1273, -3.000000, 114.000000, 81.000000, 0.000000 +1274, -3.000000, 114.000000, 81.000000, 0.000000 +1275, -3.000000, 114.000000, 81.000000, 0.000000 +1276, -3.000000, 114.000000, 81.000000, 0.000000 +1277, -3.000000, 114.000000, 81.000000, 0.000000 +1278, -3.000000, 114.000000, 81.000000, 0.000000 +1279, -3.000000, 114.000000, 81.000000, 0.000000 +1280, -3.000000, 114.000000, 81.000000, 0.000000 +1281, -3.000000, 114.000000, 81.000000, 0.000000 +1282, -3.000000, 114.000000, 81.000000, 0.000000 +1283, -3.000000, 114.000000, 81.000000, 0.000000 +1284, -3.000000, 114.000000, 81.000000, 0.000000 +1285, -3.000000, 114.000000, 81.000000, 0.000000 +1286, -3.000000, 114.000000, 81.000000, 0.000000 +1287, -3.000000, 114.000000, 81.000000, 0.000000 +1288, -3.000000, 114.000000, 81.000000, 0.000000 +1289, -3.000000, 114.000000, 81.000000, 0.000000 +1290, -3.000000, 114.000000, 81.000000, 0.000000 +1291, -3.000000, 114.000000, 81.000000, 0.000000 +1292, -3.000000, 114.000000, 81.000000, 0.000000 +1293, -3.000000, 114.000000, 81.000000, 0.000000 +1294, -3.000000, 114.000000, 81.000000, 0.000000 +1295, -3.000000, 114.000000, 81.000000, 0.000000 +1296, -3.000000, 114.000000, 81.000000, 0.000000 +1297, -3.000000, 114.000000, 81.000000, 0.000000 +1298, -3.000000, 114.000000, 81.000000, 0.000000 +1299, -3.000000, 114.000000, 81.000000, 0.000000 +1300, -3.000000, 116.000000, 84.000000, 0.000000 +1301, -3.000000, 116.000000, 84.000000, 0.000000 +1302, -3.000000, 116.000000, 84.000000, 0.000000 +1303, -3.000000, 116.000000, 84.000000, 0.000000 +1304, -3.000000, 116.000000, 84.000000, 0.000000 +1305, -3.000000, 116.000000, 84.000000, 0.000000 +1306, -3.000000, 116.000000, 84.000000, 0.000000 +1307, -3.000000, 116.000000, 84.000000, 0.000000 +1308, -3.000000, 116.000000, 84.000000, 0.000000 +1309, -3.000000, 116.000000, 84.000000, 0.000000 +1310, -3.000000, 116.000000, 84.000000, 0.000000 +1311, -3.000000, 116.000000, 84.000000, 0.000000 +1312, -3.000000, 116.000000, 84.000000, 0.000000 +1313, -3.000000, 116.000000, 84.000000, 0.000000 +1314, -3.000000, 116.000000, 84.000000, 0.000000 +1315, -3.000000, 116.000000, 84.000000, 0.000000 +1316, -3.000000, 116.000000, 84.000000, 0.000000 +1317, -3.000000, 116.000000, 84.000000, 0.000000 +1318, -3.000000, 116.000000, 84.000000, 0.000000 +1319, -3.000000, 116.000000, 84.000000, 0.000000 +1320, -3.000000, 116.000000, 84.000000, 0.000000 +1321, -3.000000, 116.000000, 84.000000, 0.000000 +1322, -3.000000, 116.000000, 84.000000, 0.000000 +1323, -3.000000, 116.000000, 84.000000, 0.000000 +1324, -3.000000, 116.000000, 84.000000, 0.000000 +1325, -3.000000, 116.000000, 84.000000, 0.000000 +1326, -3.000000, 116.000000, 84.000000, 0.000000 +1327, -3.000000, 116.000000, 84.000000, 0.000000 +1328, -3.000000, 116.000000, 84.000000, 0.000000 +1329, -3.000000, 116.000000, 84.000000, 0.000000 +1330, -3.000000, 116.000000, 84.000000, 0.000000 +1331, -3.000000, 116.000000, 84.000000, 0.000000 +1332, -3.000000, 116.000000, 84.000000, 0.000000 +1333, -3.000000, 116.000000, 84.000000, 0.000000 +1334, -3.000000, 116.000000, 84.000000, 0.000000 +1335, -3.000000, 116.000000, 84.000000, 0.000000 +1336, -3.000000, 116.000000, 84.000000, 0.000000 +1337, -3.000000, 116.000000, 84.000000, 0.000000 +1338, -3.000000, 116.000000, 84.000000, 0.000000 +1339, -3.000000, 116.000000, 84.000000, 0.000000 +1340, -3.000000, 116.000000, 84.000000, 0.000000 +1341, -3.000000, 116.000000, 84.000000, 0.000000 +1342, -3.000000, 116.000000, 84.000000, 0.000000 +1343, -3.000000, 116.000000, 84.000000, 0.000000 +1344, -3.000000, 116.000000, 84.000000, 0.000000 +1345, -3.000000, 116.000000, 84.000000, 0.000000 +1346, -3.000000, 116.000000, 84.000000, 0.000000 +1347, -3.000000, 116.000000, 84.000000, 0.000000 +1348, -3.000000, 116.000000, 84.000000, 0.000000 +1349, -3.000000, 116.000000, 84.000000, 0.000000 +1350, -3.000000, 116.000000, 84.000000, 0.000000 +1351, -3.000000, 116.000000, 84.000000, 0.000000 +1352, -3.000000, 116.000000, 84.000000, 0.000000 +1353, -3.000000, 116.000000, 84.000000, 0.000000 +1354, -3.000000, 116.000000, 84.000000, 0.000000 +1355, -3.000000, 116.000000, 84.000000, 0.000000 +1356, -3.000000, 116.000000, 84.000000, 0.000000 +1357, -3.000000, 116.000000, 84.000000, 0.000000 +1358, -3.000000, 116.000000, 84.000000, 0.000000 +1359, -3.000000, 116.000000, 84.000000, 0.000000 +1360, -3.000000, 116.000000, 84.000000, 0.000000 +1361, -3.000000, 116.000000, 84.000000, 0.000000 +1362, -3.000000, 116.000000, 84.000000, 0.000000 +1363, -3.000000, 116.000000, 84.000000, 0.000000 +1364, -3.000000, 116.000000, 84.000000, 0.000000 +1365, -3.000000, 116.000000, 84.000000, 0.000000 +1366, -3.000000, 116.000000, 84.000000, 0.000000 +1367, -3.000000, 116.000000, 84.000000, 0.000000 +1368, -3.000000, 116.000000, 84.000000, 0.000000 +1369, -3.000000, 116.000000, 84.000000, 0.000000 +1370, -3.000000, 116.000000, 84.000000, 0.000000 +1371, -3.000000, 116.000000, 84.000000, 0.000000 +1372, -3.000000, 116.000000, 84.000000, 0.000000 +1373, -3.000000, 116.000000, 84.000000, 0.000000 +1374, -3.000000, 116.000000, 84.000000, 0.000000 +1375, -3.000000, 116.000000, 84.000000, 0.000000 +1376, -3.000000, 116.000000, 84.000000, 0.000000 +1377, -3.000000, 116.000000, 84.000000, 0.000000 +1378, -3.000000, 116.000000, 84.000000, 0.000000 +1379, -3.000000, 116.000000, 84.000000, 0.000000 +1380, -3.000000, 116.000000, 84.000000, 0.000000 +1381, -3.000000, 116.000000, 84.000000, 0.000000 +1382, -3.000000, 116.000000, 84.000000, 0.000000 +1383, -3.000000, 116.000000, 84.000000, 0.000000 +1384, -3.000000, 116.000000, 84.000000, 0.000000 +1385, -3.000000, 116.000000, 84.000000, 0.000000 +1386, -3.000000, 116.000000, 84.000000, 0.000000 +1387, -3.000000, 116.000000, 84.000000, 0.000000 +1388, -3.000000, 116.000000, 84.000000, 0.000000 +1389, -3.000000, 116.000000, 84.000000, 0.000000 +1390, -3.000000, 116.000000, 84.000000, 0.000000 +1391, -3.000000, 116.000000, 84.000000, 0.000000 +1392, -3.000000, 116.000000, 84.000000, 0.000000 +1393, -3.000000, 116.000000, 84.000000, 0.000000 +1394, -3.000000, 116.000000, 84.000000, 0.000000 +1395, -3.000000, 116.000000, 84.000000, 0.000000 +1396, -3.000000, 116.000000, 84.000000, 0.000000 +1397, -3.000000, 116.000000, 84.000000, 0.000000 +1398, -3.000000, 116.000000, 84.000000, 0.000000 +1399, -3.000000, 116.000000, 84.000000, 0.000000 +1400, -3.000000, 118.000000, 87.000000, 0.000000 +1401, -3.000000, 118.000000, 87.000000, 0.000000 +1402, -3.000000, 118.000000, 87.000000, 0.000000 +1403, -3.000000, 118.000000, 87.000000, 0.000000 +1404, -3.000000, 118.000000, 87.000000, 0.000000 +1405, -3.000000, 118.000000, 87.000000, 0.000000 +1406, -3.000000, 118.000000, 87.000000, 0.000000 +1407, -3.000000, 118.000000, 87.000000, 0.000000 +1408, -3.000000, 118.000000, 87.000000, 0.000000 +1409, -3.000000, 118.000000, 87.000000, 0.000000 +1410, -3.000000, 118.000000, 87.000000, 0.000000 +1411, -3.000000, 118.000000, 87.000000, 0.000000 +1412, -3.000000, 118.000000, 87.000000, 0.000000 +1413, -3.000000, 118.000000, 87.000000, 0.000000 +1414, -3.000000, 118.000000, 87.000000, 0.000000 +1415, -3.000000, 118.000000, 87.000000, 0.000000 +1416, -3.000000, 118.000000, 87.000000, 0.000000 +1417, -3.000000, 118.000000, 87.000000, 0.000000 +1418, -3.000000, 118.000000, 87.000000, 0.000000 +1419, -3.000000, 118.000000, 87.000000, 0.000000 +1420, -3.000000, 118.000000, 87.000000, 0.000000 +1421, -3.000000, 118.000000, 87.000000, 0.000000 +1422, -3.000000, 118.000000, 87.000000, 0.000000 +1423, -3.000000, 118.000000, 87.000000, 0.000000 +1424, -3.000000, 118.000000, 87.000000, 0.000000 +1425, -3.000000, 118.000000, 87.000000, 0.000000 +1426, -3.000000, 118.000000, 87.000000, 0.000000 +1427, -3.000000, 118.000000, 87.000000, 0.000000 +1428, -3.000000, 118.000000, 87.000000, 0.000000 +1429, -3.000000, 118.000000, 87.000000, 0.000000 +1430, -3.000000, 118.000000, 87.000000, 0.000000 +1431, -3.000000, 118.000000, 87.000000, 0.000000 +1432, -3.000000, 118.000000, 87.000000, 0.000000 +1433, -3.000000, 118.000000, 87.000000, 0.000000 +1434, -3.000000, 118.000000, 87.000000, 0.000000 +1435, -3.000000, 118.000000, 87.000000, 0.000000 +1436, -3.000000, 118.000000, 87.000000, 0.000000 +1437, -3.000000, 118.000000, 87.000000, 0.000000 +1438, -3.000000, 118.000000, 87.000000, 0.000000 +1439, -3.000000, 118.000000, 87.000000, 0.000000 +1440, -3.000000, 118.000000, 87.000000, 0.000000 +1441, -3.000000, 118.000000, 87.000000, 0.000000 +1442, -3.000000, 118.000000, 87.000000, 0.000000 +1443, -3.000000, 118.000000, 87.000000, 0.000000 +1444, -3.000000, 118.000000, 87.000000, 0.000000 +1445, -3.000000, 118.000000, 87.000000, 0.000000 +1446, -3.000000, 118.000000, 87.000000, 0.000000 +1447, -3.000000, 118.000000, 87.000000, 0.000000 +1448, -3.000000, 118.000000, 87.000000, 0.000000 +1449, -3.000000, 118.000000, 87.000000, 0.000000 +1450, -3.000000, 118.000000, 87.000000, 0.000000 +1451, -3.000000, 118.000000, 87.000000, 0.000000 +1452, -3.000000, 118.000000, 87.000000, 0.000000 +1453, -3.000000, 118.000000, 87.000000, 0.000000 +1454, -3.000000, 118.000000, 87.000000, 0.000000 +1455, -3.000000, 118.000000, 87.000000, 0.000000 +1456, -3.000000, 118.000000, 87.000000, 0.000000 +1457, -3.000000, 118.000000, 87.000000, 0.000000 +1458, -3.000000, 118.000000, 87.000000, 0.000000 +1459, -3.000000, 118.000000, 87.000000, 0.000000 +1460, -3.000000, 118.000000, 87.000000, 0.000000 +1461, -3.000000, 118.000000, 87.000000, 0.000000 +1462, -3.000000, 118.000000, 87.000000, 0.000000 +1463, -3.000000, 118.000000, 87.000000, 0.000000 +1464, -3.000000, 118.000000, 87.000000, 0.000000 +1465, -3.000000, 118.000000, 87.000000, 0.000000 +1466, -3.000000, 118.000000, 87.000000, 0.000000 +1467, -3.000000, 118.000000, 87.000000, 0.000000 +1468, -3.000000, 118.000000, 87.000000, 0.000000 +1469, -3.000000, 118.000000, 87.000000, 0.000000 +1470, -3.000000, 118.000000, 87.000000, 0.000000 +1471, -3.000000, 118.000000, 87.000000, 0.000000 +1472, -3.000000, 118.000000, 87.000000, 0.000000 +1473, -3.000000, 118.000000, 87.000000, 0.000000 +1474, -3.000000, 118.000000, 87.000000, 0.000000 +1475, -3.000000, 118.000000, 87.000000, 0.000000 +1476, -3.000000, 118.000000, 87.000000, 0.000000 +1477, -3.000000, 118.000000, 87.000000, 0.000000 +1478, -3.000000, 118.000000, 87.000000, 0.000000 +1479, -3.000000, 118.000000, 87.000000, 0.000000 +1480, -3.000000, 118.000000, 87.000000, 0.000000 +1481, -3.000000, 118.000000, 87.000000, 0.000000 +1482, -3.000000, 118.000000, 87.000000, 0.000000 +1483, -3.000000, 118.000000, 87.000000, 0.000000 +1484, -3.000000, 118.000000, 87.000000, 0.000000 +1485, -3.000000, 118.000000, 87.000000, 0.000000 +1486, -3.000000, 118.000000, 87.000000, 0.000000 +1487, -3.000000, 118.000000, 87.000000, 0.000000 +1488, -3.000000, 118.000000, 87.000000, 0.000000 +1489, -3.000000, 118.000000, 87.000000, 0.000000 +1490, -3.000000, 118.000000, 87.000000, 0.000000 +1491, -3.000000, 118.000000, 87.000000, 0.000000 +1492, -3.000000, 118.000000, 87.000000, 0.000000 +1493, -3.000000, 118.000000, 87.000000, 0.000000 +1494, -3.000000, 118.000000, 87.000000, 0.000000 +1495, -3.000000, 118.000000, 87.000000, 0.000000 +1496, -3.000000, 118.000000, 87.000000, 0.000000 +1497, -3.000000, 118.000000, 87.000000, 0.000000 +1498, -3.000000, 118.000000, 87.000000, 0.000000 +1499, -3.000000, 118.000000, 87.000000, 0.000000 +1500, -3.000000, 120.000000, 90.000000, 0.000000 +1501, -3.000000, 120.000000, 90.000000, 0.000000 +1502, -3.000000, 120.000000, 90.000000, 0.000000 +1503, -3.000000, 120.000000, 90.000000, 0.000000 +1504, -3.000000, 120.000000, 90.000000, 0.000000 +1505, -3.000000, 120.000000, 90.000000, 0.000000 +1506, -3.000000, 120.000000, 90.000000, 0.000000 +1507, -3.000000, 120.000000, 90.000000, 0.000000 +1508, -3.000000, 120.000000, 90.000000, 0.000000 +1509, -3.000000, 120.000000, 90.000000, 0.000000 +1510, -3.000000, 120.000000, 90.000000, 0.000000 +1511, -3.000000, 120.000000, 90.000000, 0.000000 +1512, -3.000000, 120.000000, 90.000000, 0.000000 +1513, -3.000000, 120.000000, 90.000000, 0.000000 +1514, -3.000000, 120.000000, 90.000000, 0.000000 +1515, -3.000000, 120.000000, 90.000000, 0.000000 +1516, -3.000000, 120.000000, 90.000000, 0.000000 +1517, -3.000000, 120.000000, 90.000000, 0.000000 +1518, -3.000000, 120.000000, 90.000000, 0.000000 +1519, -3.000000, 120.000000, 90.000000, 0.000000 +1520, -3.000000, 120.000000, 90.000000, 0.000000 +1521, -3.000000, 120.000000, 90.000000, 0.000000 +1522, -3.000000, 120.000000, 90.000000, 0.000000 +1523, -3.000000, 120.000000, 90.000000, 0.000000 +1524, -3.000000, 120.000000, 90.000000, 0.000000 +1525, -3.000000, 120.000000, 90.000000, 0.000000 +1526, -3.000000, 120.000000, 90.000000, 0.000000 +1527, -3.000000, 120.000000, 90.000000, 0.000000 +1528, -3.000000, 120.000000, 90.000000, 0.000000 +1529, -3.000000, 120.000000, 90.000000, 0.000000 +1530, -3.000000, 120.000000, 90.000000, 0.000000 +1531, -3.000000, 120.000000, 90.000000, 0.000000 +1532, -3.000000, 120.000000, 90.000000, 0.000000 +1533, -3.000000, 120.000000, 90.000000, 0.000000 +1534, -3.000000, 120.000000, 90.000000, 0.000000 +1535, -3.000000, 120.000000, 90.000000, 0.000000 +1536, -3.000000, 120.000000, 90.000000, 0.000000 +1537, -3.000000, 120.000000, 90.000000, 0.000000 +1538, -3.000000, 120.000000, 90.000000, 0.000000 +1539, -3.000000, 120.000000, 90.000000, 0.000000 +1540, -3.000000, 120.000000, 90.000000, 0.000000 +1541, -3.000000, 120.000000, 90.000000, 0.000000 +1542, -3.000000, 120.000000, 90.000000, 0.000000 +1543, -3.000000, 120.000000, 90.000000, 0.000000 +1544, -3.000000, 120.000000, 90.000000, 0.000000 +1545, -3.000000, 120.000000, 90.000000, 0.000000 +1546, -3.000000, 120.000000, 90.000000, 0.000000 +1547, -3.000000, 120.000000, 90.000000, 0.000000 +1548, -3.000000, 120.000000, 90.000000, 0.000000 +1549, -3.000000, 120.000000, 90.000000, 0.000000 +1550, -3.000000, 120.000000, 90.000000, 0.000000 +1551, -3.000000, 120.000000, 90.000000, 0.000000 +1552, -3.000000, 120.000000, 90.000000, 0.000000 +1553, -3.000000, 120.000000, 90.000000, 0.000000 +1554, -3.000000, 120.000000, 90.000000, 0.000000 +1555, -3.000000, 120.000000, 90.000000, 0.000000 +1556, -3.000000, 120.000000, 90.000000, 0.000000 +1557, -3.000000, 120.000000, 90.000000, 0.000000 +1558, -3.000000, 120.000000, 90.000000, 0.000000 +1559, -3.000000, 120.000000, 90.000000, 0.000000 +1560, -3.000000, 120.000000, 90.000000, 0.000000 +1561, -3.000000, 120.000000, 90.000000, 0.000000 +1562, -3.000000, 120.000000, 90.000000, 0.000000 +1563, -3.000000, 120.000000, 90.000000, 0.000000 +1564, -3.000000, 120.000000, 90.000000, 0.000000 +1565, -3.000000, 120.000000, 90.000000, 0.000000 +1566, -3.000000, 120.000000, 90.000000, 0.000000 +1567, -3.000000, 120.000000, 90.000000, 0.000000 +1568, -3.000000, 120.000000, 90.000000, 0.000000 +1569, -3.000000, 120.000000, 90.000000, 0.000000 +1570, -3.000000, 120.000000, 90.000000, 0.000000 +1571, -3.000000, 120.000000, 90.000000, 0.000000 +1572, -3.000000, 120.000000, 90.000000, 0.000000 +1573, -3.000000, 120.000000, 90.000000, 0.000000 +1574, -3.000000, 120.000000, 90.000000, 0.000000 +1575, -3.000000, 120.000000, 90.000000, 0.000000 +1576, -3.000000, 120.000000, 90.000000, 0.000000 +1577, -3.000000, 120.000000, 90.000000, 0.000000 +1578, -3.000000, 120.000000, 90.000000, 0.000000 +1579, -3.000000, 120.000000, 90.000000, 0.000000 +1580, -3.000000, 120.000000, 90.000000, 0.000000 +1581, -3.000000, 120.000000, 90.000000, 0.000000 +1582, -3.000000, 120.000000, 90.000000, 0.000000 +1583, -3.000000, 120.000000, 90.000000, 0.000000 +1584, -3.000000, 120.000000, 90.000000, 0.000000 +1585, -3.000000, 120.000000, 90.000000, 0.000000 +1586, -3.000000, 120.000000, 90.000000, 0.000000 +1587, -3.000000, 120.000000, 90.000000, 0.000000 +1588, -3.000000, 120.000000, 90.000000, 0.000000 +1589, -3.000000, 120.000000, 90.000000, 0.000000 +1590, -3.000000, 120.000000, 90.000000, 0.000000 +1591, -3.000000, 120.000000, 90.000000, 0.000000 +1592, -3.000000, 120.000000, 90.000000, 0.000000 +1593, -3.000000, 120.000000, 90.000000, 0.000000 +1594, -3.000000, 120.000000, 90.000000, 0.000000 +1595, -3.000000, 120.000000, 90.000000, 0.000000 +1596, -3.000000, 120.000000, 90.000000, 0.000000 +1597, -3.000000, 120.000000, 90.000000, 0.000000 +1598, -3.000000, 120.000000, 90.000000, 0.000000 +1599, -3.000000, 120.000000, 90.000000, 0.000000 +1600, -3.000000, 122.000000, 93.000000, 0.000000 +1601, -3.000000, 122.000000, 93.000000, 0.000000 +1602, -3.000000, 122.000000, 93.000000, 0.000000 +1603, -3.000000, 122.000000, 93.000000, 0.000000 +1604, -3.000000, 122.000000, 93.000000, 0.000000 +1605, -3.000000, 122.000000, 93.000000, 0.000000 +1606, -3.000000, 122.000000, 93.000000, 0.000000 +1607, -3.000000, 122.000000, 93.000000, 0.000000 +1608, -3.000000, 122.000000, 93.000000, 0.000000 +1609, -3.000000, 122.000000, 93.000000, 0.000000 +1610, -3.000000, 122.000000, 93.000000, 0.000000 +1611, -3.000000, 122.000000, 93.000000, 0.000000 +1612, -3.000000, 122.000000, 93.000000, 0.000000 +1613, -3.000000, 122.000000, 93.000000, 0.000000 +1614, -3.000000, 122.000000, 93.000000, 0.000000 +1615, -3.000000, 122.000000, 93.000000, 0.000000 +1616, -3.000000, 122.000000, 93.000000, 0.000000 +1617, -3.000000, 122.000000, 93.000000, 0.000000 +1618, -3.000000, 122.000000, 93.000000, 0.000000 +1619, -3.000000, 122.000000, 93.000000, 0.000000 +1620, -3.000000, 122.000000, 93.000000, 0.000000 +1621, -3.000000, 122.000000, 93.000000, 0.000000 +1622, -3.000000, 122.000000, 93.000000, 0.000000 +1623, -3.000000, 122.000000, 93.000000, 0.000000 +1624, -3.000000, 122.000000, 93.000000, 0.000000 +1625, -3.000000, 122.000000, 93.000000, 0.000000 +1626, -3.000000, 122.000000, 93.000000, 0.000000 +1627, -3.000000, 122.000000, 93.000000, 0.000000 +1628, -3.000000, 122.000000, 93.000000, 0.000000 +1629, -3.000000, 122.000000, 93.000000, 0.000000 +1630, -3.000000, 122.000000, 93.000000, 0.000000 +1631, -3.000000, 122.000000, 93.000000, 0.000000 +1632, -3.000000, 122.000000, 93.000000, 0.000000 +1633, -3.000000, 122.000000, 93.000000, 0.000000 +1634, -3.000000, 122.000000, 93.000000, 0.000000 +1635, -3.000000, 122.000000, 93.000000, 0.000000 +1636, -3.000000, 122.000000, 93.000000, 0.000000 +1637, -3.000000, 122.000000, 93.000000, 0.000000 +1638, -3.000000, 122.000000, 93.000000, 0.000000 +1639, -3.000000, 122.000000, 93.000000, 0.000000 +1640, -3.000000, 122.000000, 93.000000, 0.000000 +1641, -3.000000, 122.000000, 93.000000, 0.000000 +1642, -3.000000, 122.000000, 93.000000, 0.000000 +1643, -3.000000, 122.000000, 93.000000, 0.000000 +1644, -3.000000, 122.000000, 93.000000, 0.000000 +1645, -3.000000, 122.000000, 93.000000, 0.000000 +1646, -3.000000, 122.000000, 93.000000, 0.000000 +1647, -3.000000, 122.000000, 93.000000, 0.000000 +1648, -3.000000, 122.000000, 93.000000, 0.000000 +1649, -3.000000, 122.000000, 93.000000, 0.000000 +1650, -3.000000, 122.000000, 93.000000, 0.000000 +1651, -3.000000, 122.000000, 93.000000, 0.000000 +1652, -3.000000, 122.000000, 93.000000, 0.000000 +1653, -3.000000, 122.000000, 93.000000, 0.000000 +1654, -3.000000, 122.000000, 93.000000, 0.000000 +1655, -3.000000, 122.000000, 93.000000, 0.000000 +1656, -3.000000, 122.000000, 93.000000, 0.000000 +1657, -3.000000, 122.000000, 93.000000, 0.000000 +1658, -3.000000, 122.000000, 93.000000, 0.000000 +1659, -3.000000, 122.000000, 93.000000, 0.000000 +1660, -3.000000, 122.000000, 93.000000, 0.000000 +1661, -3.000000, 122.000000, 93.000000, 0.000000 +1662, -3.000000, 122.000000, 93.000000, 0.000000 +1663, -3.000000, 122.000000, 93.000000, 0.000000 +1664, -3.000000, 122.000000, 93.000000, 0.000000 +1665, -3.000000, 122.000000, 93.000000, 0.000000 +1666, -3.000000, 122.000000, 93.000000, 0.000000 +1667, -3.000000, 122.000000, 93.000000, 0.000000 +1668, -3.000000, 122.000000, 93.000000, 0.000000 +1669, -3.000000, 122.000000, 93.000000, 0.000000 +1670, -3.000000, 122.000000, 93.000000, 0.000000 +1671, -3.000000, 122.000000, 93.000000, 0.000000 +1672, -3.000000, 122.000000, 93.000000, 0.000000 +1673, -3.000000, 122.000000, 93.000000, 0.000000 +1674, -3.000000, 122.000000, 93.000000, 0.000000 +1675, -3.000000, 122.000000, 93.000000, 0.000000 +1676, -3.000000, 122.000000, 93.000000, 0.000000 +1677, -3.000000, 122.000000, 93.000000, 0.000000 +1678, -3.000000, 122.000000, 93.000000, 0.000000 +1679, -3.000000, 122.000000, 93.000000, 0.000000 +1680, -3.000000, 122.000000, 93.000000, 0.000000 +1681, -3.000000, 122.000000, 93.000000, 0.000000 +1682, -3.000000, 122.000000, 93.000000, 0.000000 +1683, -3.000000, 122.000000, 93.000000, 0.000000 +1684, -3.000000, 122.000000, 93.000000, 0.000000 +1685, -3.000000, 122.000000, 93.000000, 0.000000 +1686, -3.000000, 122.000000, 93.000000, 0.000000 +1687, -3.000000, 122.000000, 93.000000, 0.000000 +1688, -3.000000, 122.000000, 93.000000, 0.000000 +1689, -3.000000, 122.000000, 93.000000, 0.000000 +1690, -3.000000, 122.000000, 93.000000, 0.000000 +1691, -3.000000, 122.000000, 93.000000, 0.000000 +1692, -3.000000, 122.000000, 93.000000, 0.000000 +1693, -3.000000, 122.000000, 93.000000, 0.000000 +1694, -3.000000, 122.000000, 93.000000, 0.000000 +1695, -3.000000, 122.000000, 93.000000, 0.000000 +1696, -3.000000, 122.000000, 93.000000, 0.000000 +1697, -3.000000, 122.000000, 93.000000, 0.000000 +1698, -3.000000, 122.000000, 93.000000, 0.000000 +1699, -3.000000, 122.000000, 93.000000, 0.000000 +1700, -3.000000, 124.000000, 96.000000, 0.000000 +1701, -3.000000, 124.000000, 96.000000, 0.000000 +1702, -3.000000, 124.000000, 96.000000, 0.000000 +1703, -3.000000, 124.000000, 96.000000, 0.000000 +1704, -3.000000, 124.000000, 96.000000, 0.000000 +1705, -3.000000, 124.000000, 96.000000, 0.000000 +1706, -3.000000, 124.000000, 96.000000, 0.000000 +1707, -3.000000, 124.000000, 96.000000, 0.000000 +1708, -3.000000, 124.000000, 96.000000, 0.000000 +1709, -3.000000, 124.000000, 96.000000, 0.000000 +1710, -3.000000, 124.000000, 96.000000, 0.000000 +1711, -3.000000, 124.000000, 96.000000, 0.000000 +1712, -3.000000, 124.000000, 96.000000, 0.000000 +1713, -3.000000, 124.000000, 96.000000, 0.000000 +1714, -3.000000, 124.000000, 96.000000, 0.000000 +1715, -3.000000, 124.000000, 96.000000, 0.000000 +1716, -3.000000, 124.000000, 96.000000, 0.000000 +1717, -3.000000, 124.000000, 96.000000, 0.000000 +1718, -3.000000, 124.000000, 96.000000, 0.000000 +1719, -3.000000, 124.000000, 96.000000, 0.000000 +1720, -3.000000, 124.000000, 96.000000, 0.000000 +1721, -3.000000, 124.000000, 96.000000, 0.000000 +1722, -3.000000, 124.000000, 96.000000, 0.000000 +1723, -3.000000, 124.000000, 96.000000, 0.000000 +1724, -3.000000, 124.000000, 96.000000, 0.000000 +1725, -3.000000, 124.000000, 96.000000, 0.000000 +1726, -3.000000, 124.000000, 96.000000, 0.000000 +1727, -3.000000, 124.000000, 96.000000, 0.000000 +1728, -3.000000, 124.000000, 96.000000, 0.000000 +1729, -3.000000, 124.000000, 96.000000, 0.000000 +1730, -3.000000, 124.000000, 96.000000, 0.000000 +1731, -3.000000, 124.000000, 96.000000, 0.000000 +1732, -3.000000, 124.000000, 96.000000, 0.000000 +1733, -3.000000, 124.000000, 96.000000, 0.000000 +1734, -3.000000, 124.000000, 96.000000, 0.000000 +1735, -3.000000, 124.000000, 96.000000, 0.000000 +1736, -3.000000, 124.000000, 96.000000, 0.000000 +1737, -3.000000, 124.000000, 96.000000, 0.000000 +1738, -3.000000, 124.000000, 96.000000, 0.000000 +1739, -3.000000, 124.000000, 96.000000, 0.000000 +1740, -3.000000, 124.000000, 96.000000, 0.000000 +1741, -3.000000, 124.000000, 96.000000, 0.000000 +1742, -3.000000, 124.000000, 96.000000, 0.000000 +1743, -3.000000, 124.000000, 96.000000, 0.000000 +1744, -3.000000, 124.000000, 96.000000, 0.000000 +1745, -3.000000, 124.000000, 96.000000, 0.000000 +1746, -3.000000, 124.000000, 96.000000, 0.000000 +1747, -3.000000, 124.000000, 96.000000, 0.000000 +1748, -3.000000, 124.000000, 96.000000, 0.000000 +1749, -3.000000, 124.000000, 96.000000, 0.000000 +1750, -3.000000, 124.000000, 96.000000, 0.000000 +1751, -3.000000, 124.000000, 96.000000, 0.000000 +1752, -3.000000, 124.000000, 96.000000, 0.000000 +1753, -3.000000, 124.000000, 96.000000, 0.000000 +1754, -3.000000, 124.000000, 96.000000, 0.000000 +1755, -3.000000, 124.000000, 96.000000, 0.000000 +1756, -3.000000, 124.000000, 96.000000, 0.000000 +1757, -3.000000, 124.000000, 96.000000, 0.000000 +1758, -3.000000, 124.000000, 96.000000, 0.000000 +1759, -3.000000, 124.000000, 96.000000, 0.000000 +1760, -3.000000, 124.000000, 96.000000, 0.000000 +1761, -3.000000, 124.000000, 96.000000, 0.000000 +1762, -3.000000, 124.000000, 96.000000, 0.000000 +1763, -3.000000, 124.000000, 96.000000, 0.000000 +1764, -3.000000, 124.000000, 96.000000, 0.000000 +1765, -3.000000, 124.000000, 96.000000, 0.000000 +1766, -3.000000, 124.000000, 96.000000, 0.000000 +1767, -3.000000, 124.000000, 96.000000, 0.000000 +1768, -3.000000, 124.000000, 96.000000, 0.000000 +1769, -3.000000, 124.000000, 96.000000, 0.000000 +1770, -3.000000, 124.000000, 96.000000, 0.000000 +1771, -3.000000, 124.000000, 96.000000, 0.000000 +1772, -3.000000, 124.000000, 96.000000, 0.000000 +1773, -3.000000, 124.000000, 96.000000, 0.000000 +1774, -3.000000, 124.000000, 96.000000, 0.000000 +1775, -3.000000, 124.000000, 96.000000, 0.000000 +1776, -3.000000, 124.000000, 96.000000, 0.000000 +1777, -3.000000, 124.000000, 96.000000, 0.000000 +1778, -3.000000, 124.000000, 96.000000, 0.000000 +1779, -3.000000, 124.000000, 96.000000, 0.000000 +1780, -3.000000, 124.000000, 96.000000, 0.000000 +1781, -3.000000, 124.000000, 96.000000, 0.000000 +1782, -3.000000, 124.000000, 96.000000, 0.000000 +1783, -3.000000, 124.000000, 96.000000, 0.000000 +1784, -3.000000, 124.000000, 96.000000, 0.000000 +1785, -3.000000, 124.000000, 96.000000, 0.000000 +1786, -3.000000, 124.000000, 96.000000, 0.000000 +1787, -3.000000, 124.000000, 96.000000, 0.000000 +1788, -3.000000, 124.000000, 96.000000, 0.000000 +1789, -3.000000, 124.000000, 96.000000, 0.000000 +1790, -3.000000, 124.000000, 96.000000, 0.000000 +1791, -3.000000, 124.000000, 96.000000, 0.000000 +1792, -3.000000, 124.000000, 96.000000, 0.000000 +1793, -3.000000, 124.000000, 96.000000, 0.000000 +1794, -3.000000, 124.000000, 96.000000, 0.000000 +1795, -3.000000, 124.000000, 96.000000, 0.000000 +1796, -3.000000, 124.000000, 96.000000, 0.000000 +1797, -3.000000, 124.000000, 96.000000, 0.000000 +1798, -3.000000, 124.000000, 96.000000, 0.000000 +1799, -3.000000, 124.000000, 96.000000, 0.000000 +1800, -3.000000, 126.000000, 99.000000, 0.000000 +1801, -3.000000, 126.000000, 99.000000, 0.000000 +1802, -3.000000, 126.000000, 99.000000, 0.000000 +1803, -3.000000, 126.000000, 99.000000, 0.000000 +1804, -3.000000, 126.000000, 99.000000, 0.000000 +1805, -3.000000, 126.000000, 99.000000, 0.000000 +1806, -3.000000, 126.000000, 99.000000, 0.000000 +1807, -3.000000, 126.000000, 99.000000, 0.000000 +1808, -3.000000, 126.000000, 99.000000, 0.000000 +1809, -3.000000, 126.000000, 99.000000, 0.000000 +1810, -3.000000, 126.000000, 99.000000, 0.000000 +1811, -3.000000, 126.000000, 99.000000, 0.000000 +1812, -3.000000, 126.000000, 99.000000, 0.000000 +1813, -3.000000, 126.000000, 99.000000, 0.000000 +1814, -3.000000, 126.000000, 99.000000, 0.000000 +1815, -3.000000, 126.000000, 99.000000, 0.000000 +1816, -3.000000, 126.000000, 99.000000, 0.000000 +1817, -3.000000, 126.000000, 99.000000, 0.000000 +1818, -3.000000, 126.000000, 99.000000, 0.000000 +1819, -3.000000, 126.000000, 99.000000, 0.000000 +1820, -3.000000, 126.000000, 99.000000, 0.000000 +1821, -3.000000, 126.000000, 99.000000, 0.000000 +1822, -3.000000, 126.000000, 99.000000, 0.000000 +1823, -3.000000, 126.000000, 99.000000, 0.000000 +1824, -3.000000, 126.000000, 99.000000, 0.000000 +1825, -3.000000, 126.000000, 99.000000, 0.000000 +1826, -3.000000, 126.000000, 99.000000, 0.000000 +1827, -3.000000, 126.000000, 99.000000, 0.000000 +1828, -3.000000, 126.000000, 99.000000, 0.000000 +1829, -3.000000, 126.000000, 99.000000, 0.000000 +1830, -3.000000, 126.000000, 99.000000, 0.000000 +1831, -3.000000, 126.000000, 99.000000, 0.000000 +1832, -3.000000, 126.000000, 99.000000, 0.000000 +1833, -3.000000, 126.000000, 99.000000, 0.000000 +1834, -3.000000, 126.000000, 99.000000, 0.000000 +1835, -3.000000, 126.000000, 99.000000, 0.000000 +1836, -3.000000, 126.000000, 99.000000, 0.000000 +1837, -3.000000, 126.000000, 99.000000, 0.000000 +1838, -3.000000, 126.000000, 99.000000, 0.000000 +1839, -3.000000, 126.000000, 99.000000, 0.000000 +1840, -3.000000, 126.000000, 99.000000, 0.000000 +1841, -3.000000, 126.000000, 99.000000, 0.000000 +1842, -3.000000, 126.000000, 99.000000, 0.000000 +1843, -3.000000, 126.000000, 99.000000, 0.000000 +1844, -3.000000, 126.000000, 99.000000, 0.000000 +1845, -3.000000, 126.000000, 99.000000, 0.000000 +1846, -3.000000, 126.000000, 99.000000, 0.000000 +1847, -3.000000, 126.000000, 99.000000, 0.000000 +1848, -3.000000, 126.000000, 99.000000, 0.000000 +1849, -3.000000, 126.000000, 99.000000, 0.000000 +1850, -3.000000, 126.000000, 99.000000, 0.000000 +1851, -3.000000, 126.000000, 99.000000, 0.000000 +1852, -3.000000, 126.000000, 99.000000, 0.000000 +1853, -3.000000, 126.000000, 99.000000, 0.000000 +1854, -3.000000, 126.000000, 99.000000, 0.000000 +1855, -3.000000, 126.000000, 99.000000, 0.000000 +1856, -3.000000, 126.000000, 99.000000, 0.000000 +1857, -3.000000, 126.000000, 99.000000, 0.000000 +1858, -3.000000, 126.000000, 99.000000, 0.000000 +1859, -3.000000, 126.000000, 99.000000, 0.000000 +1860, -3.000000, 126.000000, 99.000000, 0.000000 +1861, -3.000000, 126.000000, 99.000000, 0.000000 +1862, -3.000000, 126.000000, 99.000000, 0.000000 +1863, -3.000000, 126.000000, 99.000000, 0.000000 +1864, -3.000000, 126.000000, 99.000000, 0.000000 +1865, -3.000000, 126.000000, 99.000000, 0.000000 +1866, -3.000000, 126.000000, 99.000000, 0.000000 +1867, -3.000000, 126.000000, 99.000000, 0.000000 +1868, -3.000000, 126.000000, 99.000000, 0.000000 +1869, -3.000000, 126.000000, 99.000000, 0.000000 +1870, -3.000000, 126.000000, 99.000000, 0.000000 +1871, -3.000000, 126.000000, 99.000000, 0.000000 +1872, -3.000000, 126.000000, 99.000000, 0.000000 +1873, -3.000000, 126.000000, 99.000000, 0.000000 +1874, -3.000000, 126.000000, 99.000000, 0.000000 +1875, -3.000000, 126.000000, 99.000000, 0.000000 +1876, -3.000000, 126.000000, 99.000000, 0.000000 +1877, -3.000000, 126.000000, 99.000000, 0.000000 +1878, -3.000000, 126.000000, 99.000000, 0.000000 +1879, -3.000000, 126.000000, 99.000000, 0.000000 +1880, -3.000000, 126.000000, 99.000000, 0.000000 +1881, -3.000000, 126.000000, 99.000000, 0.000000 +1882, -3.000000, 126.000000, 99.000000, 0.000000 +1883, -3.000000, 126.000000, 99.000000, 0.000000 +1884, -3.000000, 126.000000, 99.000000, 0.000000 +1885, -3.000000, 126.000000, 99.000000, 0.000000 +1886, -3.000000, 126.000000, 99.000000, 0.000000 +1887, -3.000000, 126.000000, 99.000000, 0.000000 +1888, -3.000000, 126.000000, 99.000000, 0.000000 +1889, -3.000000, 126.000000, 99.000000, 0.000000 +1890, -3.000000, 126.000000, 99.000000, 0.000000 +1891, -3.000000, 126.000000, 99.000000, 0.000000 +1892, -3.000000, 126.000000, 99.000000, 0.000000 +1893, -3.000000, 126.000000, 99.000000, 0.000000 +1894, -3.000000, 126.000000, 99.000000, 0.000000 +1895, -3.000000, 126.000000, 99.000000, 0.000000 +1896, -3.000000, 126.000000, 99.000000, 0.000000 +1897, -3.000000, 126.000000, 99.000000, 0.000000 +1898, -3.000000, 126.000000, 99.000000, 0.000000 +1899, -3.000000, 126.000000, 99.000000, 0.000000 +1900, -3.000000, 128.000000, 102.000000, 0.000000 +1901, -3.000000, 128.000000, 102.000000, 0.000000 +1902, -3.000000, 128.000000, 102.000000, 0.000000 +1903, -3.000000, 128.000000, 102.000000, 0.000000 +1904, -3.000000, 128.000000, 102.000000, 0.000000 +1905, -3.000000, 128.000000, 102.000000, 0.000000 +1906, -3.000000, 128.000000, 102.000000, 0.000000 +1907, -3.000000, 128.000000, 102.000000, 0.000000 +1908, -3.000000, 128.000000, 102.000000, 0.000000 +1909, -3.000000, 128.000000, 102.000000, 0.000000 +1910, -3.000000, 128.000000, 102.000000, 0.000000 +1911, -3.000000, 128.000000, 102.000000, 0.000000 +1912, -3.000000, 128.000000, 102.000000, 0.000000 +1913, -3.000000, 128.000000, 102.000000, 0.000000 +1914, -3.000000, 128.000000, 102.000000, 0.000000 +1915, -3.000000, 128.000000, 102.000000, 0.000000 +1916, -3.000000, 128.000000, 102.000000, 0.000000 +1917, -3.000000, 128.000000, 102.000000, 0.000000 +1918, -3.000000, 128.000000, 102.000000, 0.000000 +1919, -3.000000, 128.000000, 102.000000, 0.000000 +1920, -3.000000, 128.000000, 102.000000, 0.000000 +1921, -3.000000, 128.000000, 102.000000, 0.000000 +1922, -3.000000, 128.000000, 102.000000, 0.000000 +1923, -3.000000, 128.000000, 102.000000, 0.000000 +1924, -3.000000, 128.000000, 102.000000, 0.000000 +1925, -3.000000, 128.000000, 102.000000, 0.000000 +1926, -3.000000, 128.000000, 102.000000, 0.000000 +1927, -3.000000, 128.000000, 102.000000, 0.000000 +1928, -3.000000, 128.000000, 102.000000, 0.000000 +1929, -3.000000, 128.000000, 102.000000, 0.000000 +1930, -3.000000, 128.000000, 102.000000, 0.000000 +1931, -3.000000, 128.000000, 102.000000, 0.000000 +1932, -3.000000, 128.000000, 102.000000, 0.000000 +1933, -3.000000, 128.000000, 102.000000, 0.000000 +1934, -3.000000, 128.000000, 102.000000, 0.000000 +1935, -3.000000, 128.000000, 102.000000, 0.000000 +1936, -3.000000, 128.000000, 102.000000, 0.000000 +1937, -3.000000, 128.000000, 102.000000, 0.000000 +1938, -3.000000, 128.000000, 102.000000, 0.000000 +1939, -3.000000, 128.000000, 102.000000, 0.000000 +1940, -3.000000, 128.000000, 102.000000, 0.000000 +1941, -3.000000, 128.000000, 102.000000, 0.000000 +1942, -3.000000, 128.000000, 102.000000, 0.000000 +1943, -3.000000, 128.000000, 102.000000, 0.000000 +1944, -3.000000, 128.000000, 102.000000, 0.000000 +1945, -3.000000, 128.000000, 102.000000, 0.000000 +1946, -3.000000, 128.000000, 102.000000, 0.000000 +1947, -3.000000, 128.000000, 102.000000, 0.000000 +1948, -3.000000, 128.000000, 102.000000, 0.000000 +1949, -3.000000, 128.000000, 102.000000, 0.000000 +1950, -3.000000, 128.000000, 102.000000, 0.000000 +1951, -3.000000, 128.000000, 102.000000, 0.000000 +1952, -3.000000, 128.000000, 102.000000, 0.000000 +1953, -3.000000, 128.000000, 102.000000, 0.000000 +1954, -3.000000, 128.000000, 102.000000, 0.000000 +1955, -3.000000, 128.000000, 102.000000, 0.000000 +1956, -3.000000, 128.000000, 102.000000, 0.000000 +1957, -3.000000, 128.000000, 102.000000, 0.000000 +1958, -3.000000, 128.000000, 102.000000, 0.000000 +1959, -3.000000, 128.000000, 102.000000, 0.000000 +1960, -3.000000, 128.000000, 102.000000, 0.000000 +1961, -3.000000, 128.000000, 102.000000, 0.000000 +1962, -3.000000, 128.000000, 102.000000, 0.000000 +1963, -3.000000, 128.000000, 102.000000, 0.000000 +1964, -3.000000, 128.000000, 102.000000, 0.000000 +1965, -3.000000, 128.000000, 102.000000, 0.000000 +1966, -3.000000, 128.000000, 102.000000, 0.000000 +1967, -3.000000, 128.000000, 102.000000, 0.000000 +1968, -3.000000, 128.000000, 102.000000, 0.000000 +1969, -3.000000, 128.000000, 102.000000, 0.000000 +1970, -3.000000, 128.000000, 102.000000, 0.000000 +1971, -3.000000, 128.000000, 102.000000, 0.000000 +1972, -3.000000, 128.000000, 102.000000, 0.000000 +1973, -3.000000, 128.000000, 102.000000, 0.000000 +1974, -3.000000, 128.000000, 102.000000, 0.000000 +1975, -3.000000, 128.000000, 102.000000, 0.000000 +1976, -3.000000, 128.000000, 102.000000, 0.000000 +1977, -3.000000, 128.000000, 102.000000, 0.000000 +1978, -3.000000, 128.000000, 102.000000, 0.000000 +1979, -3.000000, 128.000000, 102.000000, 0.000000 +1980, -3.000000, 128.000000, 102.000000, 0.000000 +1981, -3.000000, 128.000000, 102.000000, 0.000000 +1982, -3.000000, 128.000000, 102.000000, 0.000000 +1983, -3.000000, 128.000000, 102.000000, 0.000000 +1984, -3.000000, 128.000000, 102.000000, 0.000000 +1985, -3.000000, 128.000000, 102.000000, 0.000000 +1986, -3.000000, 128.000000, 102.000000, 0.000000 +1987, -3.000000, 128.000000, 102.000000, 0.000000 +1988, -3.000000, 128.000000, 102.000000, 0.000000 +1989, -3.000000, 128.000000, 102.000000, 0.000000 +1990, -3.000000, 128.000000, 102.000000, 0.000000 +1991, -3.000000, 128.000000, 102.000000, 0.000000 +1992, -3.000000, 128.000000, 102.000000, 0.000000 +1993, -3.000000, 128.000000, 102.000000, 0.000000 +1994, -3.000000, 128.000000, 102.000000, 0.000000 +1995, -3.000000, 128.000000, 102.000000, 0.000000 +1996, -3.000000, 128.000000, 102.000000, 0.000000 +1997, -3.000000, 128.000000, 102.000000, 0.000000 +1998, -3.000000, 128.000000, 102.000000, 0.000000 +1999, -3.000000, 128.000000, 102.000000, 0.000000 +2000, -3.000000, 130.000000, 105.000000, 0.000000 +2001, -3.000000, 130.000000, 105.000000, 0.000000 +2002, -3.000000, 130.000000, 105.000000, 0.000000 +2003, -3.000000, 130.000000, 105.000000, 0.000000 +2004, -3.000000, 130.000000, 105.000000, 0.000000 +2005, -3.000000, 130.000000, 105.000000, 0.000000 +2006, -3.000000, 130.000000, 105.000000, 0.000000 +2007, -3.000000, 130.000000, 105.000000, 0.000000 +2008, -3.000000, 130.000000, 105.000000, 0.000000 +2009, -3.000000, 130.000000, 105.000000, 0.000000 +2010, -3.000000, 130.000000, 105.000000, 0.000000 +2011, -3.000000, 130.000000, 105.000000, 0.000000 +2012, -3.000000, 130.000000, 105.000000, 0.000000 +2013, -3.000000, 130.000000, 105.000000, 0.000000 +2014, -3.000000, 130.000000, 105.000000, 0.000000 +2015, -3.000000, 130.000000, 105.000000, 0.000000 +2016, -3.000000, 130.000000, 105.000000, 0.000000 +2017, -3.000000, 130.000000, 105.000000, 0.000000 +2018, -3.000000, 130.000000, 105.000000, 0.000000 +2019, -3.000000, 130.000000, 105.000000, 0.000000 +2020, -3.000000, 130.000000, 105.000000, 0.000000 +2021, -3.000000, 130.000000, 105.000000, 0.000000 +2022, -3.000000, 130.000000, 105.000000, 0.000000 +2023, -3.000000, 130.000000, 105.000000, 0.000000 +2024, -3.000000, 130.000000, 105.000000, 0.000000 +2025, -3.000000, 130.000000, 105.000000, 0.000000 +2026, -3.000000, 130.000000, 105.000000, 0.000000 +2027, -3.000000, 130.000000, 105.000000, 0.000000 +2028, -3.000000, 130.000000, 105.000000, 0.000000 +2029, -3.000000, 130.000000, 105.000000, 0.000000 +2030, -3.000000, 130.000000, 105.000000, 0.000000 +2031, -3.000000, 130.000000, 105.000000, 0.000000 +2032, -3.000000, 130.000000, 105.000000, 0.000000 +2033, -3.000000, 130.000000, 105.000000, 0.000000 +2034, -3.000000, 130.000000, 105.000000, 0.000000 +2035, -3.000000, 130.000000, 105.000000, 0.000000 +2036, -3.000000, 130.000000, 105.000000, 0.000000 +2037, -3.000000, 130.000000, 105.000000, 0.000000 +2038, -3.000000, 130.000000, 105.000000, 0.000000 +2039, -3.000000, 130.000000, 105.000000, 0.000000 +2040, -3.000000, 130.000000, 105.000000, 0.000000 +2041, -3.000000, 130.000000, 105.000000, 0.000000 +2042, -3.000000, 130.000000, 105.000000, 0.000000 +2043, -3.000000, 130.000000, 105.000000, 0.000000 +2044, -3.000000, 130.000000, 105.000000, 0.000000 +2045, -3.000000, 130.000000, 105.000000, 0.000000 +2046, -3.000000, 130.000000, 105.000000, 0.000000 +2047, -3.000000, 130.000000, 105.000000, 0.000000 +2048, -3.000000, 130.000000, 105.000000, 0.000000 +2049, -3.000000, 130.000000, 105.000000, 0.000000 +2050, -3.000000, 130.000000, 105.000000, 0.000000 +2051, -3.000000, 130.000000, 105.000000, 0.000000 +2052, -3.000000, 130.000000, 105.000000, 0.000000 +2053, -3.000000, 130.000000, 105.000000, 0.000000 +2054, -3.000000, 130.000000, 105.000000, 0.000000 +2055, -3.000000, 130.000000, 105.000000, 0.000000 +2056, -3.000000, 130.000000, 105.000000, 0.000000 +2057, -3.000000, 130.000000, 105.000000, 0.000000 +2058, -3.000000, 130.000000, 105.000000, 0.000000 +2059, -3.000000, 130.000000, 105.000000, 0.000000 +2060, -3.000000, 130.000000, 105.000000, 0.000000 +2061, -3.000000, 130.000000, 105.000000, 0.000000 +2062, -3.000000, 130.000000, 105.000000, 0.000000 +2063, -3.000000, 130.000000, 105.000000, 0.000000 +2064, -3.000000, 130.000000, 105.000000, 0.000000 +2065, -3.000000, 130.000000, 105.000000, 0.000000 +2066, -3.000000, 130.000000, 105.000000, 0.000000 +2067, -3.000000, 130.000000, 105.000000, 0.000000 +2068, -3.000000, 130.000000, 105.000000, 0.000000 +2069, -3.000000, 130.000000, 105.000000, 0.000000 +2070, -3.000000, 130.000000, 105.000000, 0.000000 +2071, -3.000000, 130.000000, 105.000000, 0.000000 +2072, -3.000000, 130.000000, 105.000000, 0.000000 +2073, -3.000000, 130.000000, 105.000000, 0.000000 +2074, -3.000000, 130.000000, 105.000000, 0.000000 +2075, -3.000000, 130.000000, 105.000000, 0.000000 +2076, -3.000000, 130.000000, 105.000000, 0.000000 +2077, -3.000000, 130.000000, 105.000000, 0.000000 +2078, -3.000000, 130.000000, 105.000000, 0.000000 +2079, -3.000000, 130.000000, 105.000000, 0.000000 +2080, -3.000000, 130.000000, 105.000000, 0.000000 +2081, -3.000000, 130.000000, 105.000000, 0.000000 +2082, -3.000000, 130.000000, 105.000000, 0.000000 +2083, -3.000000, 130.000000, 105.000000, 0.000000 +2084, -3.000000, 130.000000, 105.000000, 0.000000 +2085, -3.000000, 130.000000, 105.000000, 0.000000 +2086, -3.000000, 130.000000, 105.000000, 0.000000 +2087, -3.000000, 130.000000, 105.000000, 0.000000 +2088, -3.000000, 130.000000, 105.000000, 0.000000 +2089, -3.000000, 130.000000, 105.000000, 0.000000 +2090, -3.000000, 130.000000, 105.000000, 0.000000 +2091, -3.000000, 130.000000, 105.000000, 0.000000 +2092, -3.000000, 130.000000, 105.000000, 0.000000 +2093, -3.000000, 130.000000, 105.000000, 0.000000 +2094, -3.000000, 130.000000, 105.000000, 0.000000 +2095, -3.000000, 130.000000, 105.000000, 0.000000 +2096, -3.000000, 130.000000, 105.000000, 0.000000 +2097, -3.000000, 130.000000, 105.000000, 0.000000 +2098, -3.000000, 130.000000, 105.000000, 0.000000 +2099, -3.000000, 130.000000, 105.000000, 0.000000 +2100, -3.000000, 132.000000, 108.000000, 0.000000 +2101, -3.000000, 132.000000, 108.000000, 0.000000 +2102, -3.000000, 132.000000, 108.000000, 0.000000 +2103, -3.000000, 132.000000, 108.000000, 0.000000 +2104, -3.000000, 132.000000, 108.000000, 0.000000 +2105, -3.000000, 132.000000, 108.000000, 0.000000 +2106, -3.000000, 132.000000, 108.000000, 0.000000 +2107, -3.000000, 132.000000, 108.000000, 0.000000 +2108, -3.000000, 132.000000, 108.000000, 0.000000 +2109, -3.000000, 132.000000, 108.000000, 0.000000 +2110, -3.000000, 132.000000, 108.000000, 0.000000 +2111, -3.000000, 132.000000, 108.000000, 0.000000 +2112, -3.000000, 132.000000, 108.000000, 0.000000 +2113, -3.000000, 132.000000, 108.000000, 0.000000 +2114, -3.000000, 132.000000, 108.000000, 0.000000 +2115, -3.000000, 132.000000, 108.000000, 0.000000 +2116, -3.000000, 132.000000, 108.000000, 0.000000 +2117, -3.000000, 132.000000, 108.000000, 0.000000 +2118, -3.000000, 132.000000, 108.000000, 0.000000 +2119, -3.000000, 132.000000, 108.000000, 0.000000 +2120, -3.000000, 132.000000, 108.000000, 0.000000 +2121, -3.000000, 132.000000, 108.000000, 0.000000 +2122, -3.000000, 132.000000, 108.000000, 0.000000 +2123, -3.000000, 132.000000, 108.000000, 0.000000 +2124, -3.000000, 132.000000, 108.000000, 0.000000 +2125, -3.000000, 132.000000, 108.000000, 0.000000 +2126, -3.000000, 132.000000, 108.000000, 0.000000 +2127, -3.000000, 132.000000, 108.000000, 0.000000 +2128, -3.000000, 132.000000, 108.000000, 0.000000 +2129, -3.000000, 132.000000, 108.000000, 0.000000 +2130, -3.000000, 132.000000, 108.000000, 0.000000 +2131, -3.000000, 132.000000, 108.000000, 0.000000 +2132, -3.000000, 132.000000, 108.000000, 0.000000 +2133, -3.000000, 132.000000, 108.000000, 0.000000 +2134, -3.000000, 132.000000, 108.000000, 0.000000 +2135, -3.000000, 132.000000, 108.000000, 0.000000 +2136, -3.000000, 132.000000, 108.000000, 0.000000 +2137, -3.000000, 132.000000, 108.000000, 0.000000 +2138, -3.000000, 132.000000, 108.000000, 0.000000 +2139, -3.000000, 132.000000, 108.000000, 0.000000 +2140, -3.000000, 132.000000, 108.000000, 0.000000 +2141, -3.000000, 132.000000, 108.000000, 0.000000 +2142, -3.000000, 132.000000, 108.000000, 0.000000 +2143, -3.000000, 132.000000, 108.000000, 0.000000 +2144, -3.000000, 132.000000, 108.000000, 0.000000 +2145, -3.000000, 132.000000, 108.000000, 0.000000 +2146, -3.000000, 132.000000, 108.000000, 0.000000 +2147, -3.000000, 132.000000, 108.000000, 0.000000 +2148, -3.000000, 132.000000, 108.000000, 0.000000 +2149, -3.000000, 132.000000, 108.000000, 0.000000 +2150, -3.000000, 132.000000, 108.000000, 0.000000 +2151, -3.000000, 132.000000, 108.000000, 0.000000 +2152, -3.000000, 132.000000, 108.000000, 0.000000 +2153, -3.000000, 132.000000, 108.000000, 0.000000 +2154, -3.000000, 132.000000, 108.000000, 0.000000 +2155, -3.000000, 132.000000, 108.000000, 0.000000 +2156, -3.000000, 132.000000, 108.000000, 0.000000 +2157, -3.000000, 132.000000, 108.000000, 0.000000 +2158, -3.000000, 132.000000, 108.000000, 0.000000 +2159, -3.000000, 132.000000, 108.000000, 0.000000 +2160, -3.000000, 132.000000, 108.000000, 0.000000 +2161, -3.000000, 132.000000, 108.000000, 0.000000 +2162, -3.000000, 132.000000, 108.000000, 0.000000 +2163, -3.000000, 132.000000, 108.000000, 0.000000 +2164, -3.000000, 132.000000, 108.000000, 0.000000 +2165, -3.000000, 132.000000, 108.000000, 0.000000 +2166, -3.000000, 132.000000, 108.000000, 0.000000 +2167, -3.000000, 132.000000, 108.000000, 0.000000 +2168, -3.000000, 132.000000, 108.000000, 0.000000 +2169, -3.000000, 132.000000, 108.000000, 0.000000 +2170, -3.000000, 132.000000, 108.000000, 0.000000 +2171, -3.000000, 132.000000, 108.000000, 0.000000 +2172, -3.000000, 132.000000, 108.000000, 0.000000 +2173, -3.000000, 132.000000, 108.000000, 0.000000 +2174, -3.000000, 132.000000, 108.000000, 0.000000 +2175, -3.000000, 132.000000, 108.000000, 0.000000 +2176, -3.000000, 132.000000, 108.000000, 0.000000 +2177, -3.000000, 132.000000, 108.000000, 0.000000 +2178, -3.000000, 132.000000, 108.000000, 0.000000 +2179, -3.000000, 132.000000, 108.000000, 0.000000 +2180, -3.000000, 132.000000, 108.000000, 0.000000 +2181, -3.000000, 132.000000, 108.000000, 0.000000 +2182, -3.000000, 132.000000, 108.000000, 0.000000 +2183, -3.000000, 132.000000, 108.000000, 0.000000 +2184, -3.000000, 132.000000, 108.000000, 0.000000 +2185, -3.000000, 132.000000, 108.000000, 0.000000 +2186, -3.000000, 132.000000, 108.000000, 0.000000 +2187, -3.000000, 132.000000, 108.000000, 0.000000 +2188, -3.000000, 132.000000, 108.000000, 0.000000 +2189, -3.000000, 132.000000, 108.000000, 0.000000 +2190, -3.000000, 132.000000, 108.000000, 0.000000 +2191, -3.000000, 132.000000, 108.000000, 0.000000 +2192, -3.000000, 132.000000, 108.000000, 0.000000 +2193, -3.000000, 132.000000, 108.000000, 0.000000 +2194, -3.000000, 132.000000, 108.000000, 0.000000 +2195, -3.000000, 132.000000, 108.000000, 0.000000 +2196, -3.000000, 132.000000, 108.000000, 0.000000 +2197, -3.000000, 132.000000, 108.000000, 0.000000 +2198, -3.000000, 132.000000, 108.000000, 0.000000 +2199, -3.000000, 132.000000, 108.000000, 0.000000 +2200, -3.000000, 134.000000, 111.000000, 0.000000 +2201, -3.000000, 134.000000, 111.000000, 0.000000 +2202, -3.000000, 134.000000, 111.000000, 0.000000 +2203, -3.000000, 134.000000, 111.000000, 0.000000 +2204, -3.000000, 134.000000, 111.000000, 0.000000 +2205, -3.000000, 134.000000, 111.000000, 0.000000 +2206, -3.000000, 134.000000, 111.000000, 0.000000 +2207, -3.000000, 134.000000, 111.000000, 0.000000 +2208, -3.000000, 134.000000, 111.000000, 0.000000 +2209, -3.000000, 134.000000, 111.000000, 0.000000 +2210, -3.000000, 134.000000, 111.000000, 0.000000 +2211, -3.000000, 134.000000, 111.000000, 0.000000 +2212, -3.000000, 134.000000, 111.000000, 0.000000 +2213, -3.000000, 134.000000, 111.000000, 0.000000 +2214, -3.000000, 134.000000, 111.000000, 0.000000 +2215, -3.000000, 134.000000, 111.000000, 0.000000 +2216, -3.000000, 134.000000, 111.000000, 0.000000 +2217, -3.000000, 134.000000, 111.000000, 0.000000 +2218, -3.000000, 134.000000, 111.000000, 0.000000 +2219, -3.000000, 134.000000, 111.000000, 0.000000 +2220, -3.000000, 134.000000, 111.000000, 0.000000 +2221, -3.000000, 134.000000, 111.000000, 0.000000 +2222, -3.000000, 134.000000, 111.000000, 0.000000 +2223, -3.000000, 134.000000, 111.000000, 0.000000 +2224, -3.000000, 134.000000, 111.000000, 0.000000 +2225, -3.000000, 134.000000, 111.000000, 0.000000 +2226, -3.000000, 134.000000, 111.000000, 0.000000 +2227, -3.000000, 134.000000, 111.000000, 0.000000 +2228, -3.000000, 134.000000, 111.000000, 0.000000 +2229, -3.000000, 134.000000, 111.000000, 0.000000 +2230, -3.000000, 134.000000, 111.000000, 0.000000 +2231, -3.000000, 134.000000, 111.000000, 0.000000 +2232, -3.000000, 134.000000, 111.000000, 0.000000 +2233, -3.000000, 134.000000, 111.000000, 0.000000 +2234, -3.000000, 134.000000, 111.000000, 0.000000 +2235, -3.000000, 134.000000, 111.000000, 0.000000 +2236, -3.000000, 134.000000, 111.000000, 0.000000 +2237, -3.000000, 134.000000, 111.000000, 0.000000 +2238, -3.000000, 134.000000, 111.000000, 0.000000 +2239, -3.000000, 134.000000, 111.000000, 0.000000 +2240, -3.000000, 134.000000, 111.000000, 0.000000 +2241, -3.000000, 134.000000, 111.000000, 0.000000 +2242, -3.000000, 134.000000, 111.000000, 0.000000 +2243, -3.000000, 134.000000, 111.000000, 0.000000 +2244, -3.000000, 134.000000, 111.000000, 0.000000 +2245, -3.000000, 134.000000, 111.000000, 0.000000 +2246, -3.000000, 134.000000, 111.000000, 0.000000 +2247, -3.000000, 134.000000, 111.000000, 0.000000 +2248, -3.000000, 134.000000, 111.000000, 0.000000 +2249, -3.000000, 134.000000, 111.000000, 0.000000 +2250, -3.000000, 134.000000, 111.000000, 0.000000 +2251, -3.000000, 134.000000, 111.000000, 0.000000 +2252, -3.000000, 134.000000, 111.000000, 0.000000 +2253, -3.000000, 134.000000, 111.000000, 0.000000 +2254, -3.000000, 134.000000, 111.000000, 0.000000 +2255, -3.000000, 134.000000, 111.000000, 0.000000 +2256, -3.000000, 134.000000, 111.000000, 0.000000 +2257, -3.000000, 134.000000, 111.000000, 0.000000 +2258, -3.000000, 134.000000, 111.000000, 0.000000 +2259, -3.000000, 134.000000, 111.000000, 0.000000 +2260, -3.000000, 134.000000, 111.000000, 0.000000 +2261, -3.000000, 134.000000, 111.000000, 0.000000 +2262, -3.000000, 134.000000, 111.000000, 0.000000 +2263, -3.000000, 134.000000, 111.000000, 0.000000 +2264, -3.000000, 134.000000, 111.000000, 0.000000 +2265, -3.000000, 134.000000, 111.000000, 0.000000 +2266, -3.000000, 134.000000, 111.000000, 0.000000 +2267, -3.000000, 134.000000, 111.000000, 0.000000 +2268, -3.000000, 134.000000, 111.000000, 0.000000 +2269, -3.000000, 134.000000, 111.000000, 0.000000 +2270, -3.000000, 134.000000, 111.000000, 0.000000 +2271, -3.000000, 134.000000, 111.000000, 0.000000 +2272, -3.000000, 134.000000, 111.000000, 0.000000 +2273, -3.000000, 134.000000, 111.000000, 0.000000 +2274, -3.000000, 134.000000, 111.000000, 0.000000 +2275, -3.000000, 134.000000, 111.000000, 0.000000 +2276, -3.000000, 134.000000, 111.000000, 0.000000 +2277, -3.000000, 134.000000, 111.000000, 0.000000 +2278, -3.000000, 134.000000, 111.000000, 0.000000 +2279, -3.000000, 134.000000, 111.000000, 0.000000 +2280, -3.000000, 134.000000, 111.000000, 0.000000 +2281, -3.000000, 134.000000, 111.000000, 0.000000 +2282, -3.000000, 134.000000, 111.000000, 0.000000 +2283, -3.000000, 134.000000, 111.000000, 0.000000 +2284, -3.000000, 134.000000, 111.000000, 0.000000 +2285, -3.000000, 134.000000, 111.000000, 0.000000 +2286, -3.000000, 134.000000, 111.000000, 0.000000 +2287, -3.000000, 134.000000, 111.000000, 0.000000 +2288, -3.000000, 134.000000, 111.000000, 0.000000 +2289, -3.000000, 134.000000, 111.000000, 0.000000 +2290, -3.000000, 134.000000, 111.000000, 0.000000 +2291, -3.000000, 134.000000, 111.000000, 0.000000 +2292, -3.000000, 134.000000, 111.000000, 0.000000 +2293, -3.000000, 134.000000, 111.000000, 0.000000 +2294, -3.000000, 134.000000, 111.000000, 0.000000 +2295, -3.000000, 134.000000, 111.000000, 0.000000 +2296, -3.000000, 134.000000, 111.000000, 0.000000 +2297, -3.000000, 134.000000, 111.000000, 0.000000 +2298, -3.000000, 134.000000, 111.000000, 0.000000 +2299, -3.000000, 134.000000, 111.000000, 0.000000 +2300, -3.000000, 136.000000, 114.000000, 0.000000 +2301, -3.000000, 136.000000, 114.000000, 0.000000 +2302, -3.000000, 136.000000, 114.000000, 0.000000 +2303, -3.000000, 136.000000, 114.000000, 0.000000 +2304, -3.000000, 136.000000, 114.000000, 0.000000 +2305, -3.000000, 136.000000, 114.000000, 0.000000 +2306, -3.000000, 136.000000, 114.000000, 0.000000 +2307, -3.000000, 136.000000, 114.000000, 0.000000 +2308, -3.000000, 136.000000, 114.000000, 0.000000 +2309, -3.000000, 136.000000, 114.000000, 0.000000 +2310, -3.000000, 136.000000, 114.000000, 0.000000 +2311, -3.000000, 136.000000, 114.000000, 0.000000 +2312, -3.000000, 136.000000, 114.000000, 0.000000 +2313, -3.000000, 136.000000, 114.000000, 0.000000 +2314, -3.000000, 136.000000, 114.000000, 0.000000 +2315, -3.000000, 136.000000, 114.000000, 0.000000 +2316, -3.000000, 136.000000, 114.000000, 0.000000 +2317, -3.000000, 136.000000, 114.000000, 0.000000 +2318, -3.000000, 136.000000, 114.000000, 0.000000 +2319, -3.000000, 136.000000, 114.000000, 0.000000 +2320, -3.000000, 136.000000, 114.000000, 0.000000 +2321, -3.000000, 136.000000, 114.000000, 0.000000 +2322, -3.000000, 136.000000, 114.000000, 0.000000 +2323, -3.000000, 136.000000, 114.000000, 0.000000 +2324, -3.000000, 136.000000, 114.000000, 0.000000 +2325, -3.000000, 136.000000, 114.000000, 0.000000 +2326, -3.000000, 136.000000, 114.000000, 0.000000 +2327, -3.000000, 136.000000, 114.000000, 0.000000 +2328, -3.000000, 136.000000, 114.000000, 0.000000 +2329, -3.000000, 136.000000, 114.000000, 0.000000 +2330, -3.000000, 136.000000, 114.000000, 0.000000 +2331, -3.000000, 136.000000, 114.000000, 0.000000 +2332, -3.000000, 136.000000, 114.000000, 0.000000 +2333, -3.000000, 136.000000, 114.000000, 0.000000 +2334, -3.000000, 136.000000, 114.000000, 0.000000 +2335, -3.000000, 136.000000, 114.000000, 0.000000 +2336, -3.000000, 136.000000, 114.000000, 0.000000 +2337, -3.000000, 136.000000, 114.000000, 0.000000 +2338, -3.000000, 136.000000, 114.000000, 0.000000 +2339, -3.000000, 136.000000, 114.000000, 0.000000 +2340, -3.000000, 136.000000, 114.000000, 0.000000 +2341, -3.000000, 136.000000, 114.000000, 0.000000 +2342, -3.000000, 136.000000, 114.000000, 0.000000 +2343, -3.000000, 136.000000, 114.000000, 0.000000 +2344, -3.000000, 136.000000, 114.000000, 0.000000 +2345, -3.000000, 136.000000, 114.000000, 0.000000 +2346, -3.000000, 136.000000, 114.000000, 0.000000 +2347, -3.000000, 136.000000, 114.000000, 0.000000 +2348, -3.000000, 136.000000, 114.000000, 0.000000 +2349, -3.000000, 136.000000, 114.000000, 0.000000 +2350, -3.000000, 136.000000, 114.000000, 0.000000 +2351, -3.000000, 136.000000, 114.000000, 0.000000 +2352, -3.000000, 136.000000, 114.000000, 0.000000 +2353, -3.000000, 136.000000, 114.000000, 0.000000 +2354, -3.000000, 136.000000, 114.000000, 0.000000 +2355, -3.000000, 136.000000, 114.000000, 0.000000 +2356, -3.000000, 136.000000, 114.000000, 0.000000 +2357, -3.000000, 136.000000, 114.000000, 0.000000 +2358, -3.000000, 136.000000, 114.000000, 0.000000 +2359, -3.000000, 136.000000, 114.000000, 0.000000 +2360, -3.000000, 136.000000, 114.000000, 0.000000 +2361, -3.000000, 136.000000, 114.000000, 0.000000 +2362, -3.000000, 136.000000, 114.000000, 0.000000 +2363, -3.000000, 136.000000, 114.000000, 0.000000 +2364, -3.000000, 136.000000, 114.000000, 0.000000 +2365, -3.000000, 136.000000, 114.000000, 0.000000 +2366, -3.000000, 136.000000, 114.000000, 0.000000 +2367, -3.000000, 136.000000, 114.000000, 0.000000 +2368, -3.000000, 136.000000, 114.000000, 0.000000 +2369, -3.000000, 136.000000, 114.000000, 0.000000 +2370, -3.000000, 136.000000, 114.000000, 0.000000 +2371, -3.000000, 136.000000, 114.000000, 0.000000 +2372, -3.000000, 136.000000, 114.000000, 0.000000 +2373, -3.000000, 136.000000, 114.000000, 0.000000 +2374, -3.000000, 136.000000, 114.000000, 0.000000 +2375, -3.000000, 136.000000, 114.000000, 0.000000 +2376, -3.000000, 136.000000, 114.000000, 0.000000 +2377, -3.000000, 136.000000, 114.000000, 0.000000 +2378, -3.000000, 136.000000, 114.000000, 0.000000 +2379, -3.000000, 136.000000, 114.000000, 0.000000 +2380, -3.000000, 136.000000, 114.000000, 0.000000 +2381, -3.000000, 136.000000, 114.000000, 0.000000 +2382, -3.000000, 136.000000, 114.000000, 0.000000 +2383, -3.000000, 136.000000, 114.000000, 0.000000 +2384, -3.000000, 136.000000, 114.000000, 0.000000 +2385, -3.000000, 136.000000, 114.000000, 0.000000 +2386, -3.000000, 136.000000, 114.000000, 0.000000 +2387, -3.000000, 136.000000, 114.000000, 0.000000 +2388, -3.000000, 136.000000, 114.000000, 0.000000 +2389, -3.000000, 136.000000, 114.000000, 0.000000 +2390, -3.000000, 136.000000, 114.000000, 0.000000 +2391, -3.000000, 136.000000, 114.000000, 0.000000 +2392, -3.000000, 136.000000, 114.000000, 0.000000 +2393, -3.000000, 136.000000, 114.000000, 0.000000 +2394, -3.000000, 136.000000, 114.000000, 0.000000 +2395, -3.000000, 136.000000, 114.000000, 0.000000 +2396, -3.000000, 136.000000, 114.000000, 0.000000 +2397, -3.000000, 136.000000, 114.000000, 0.000000 +2398, -3.000000, 136.000000, 114.000000, 0.000000 +2399, -3.000000, 136.000000, 114.000000, 0.000000 +2400, -3.000000, 138.000000, 117.000000, 0.000000 +2401, -3.000000, 138.000000, 117.000000, 0.000000 +2402, -3.000000, 138.000000, 117.000000, 0.000000 +2403, -3.000000, 138.000000, 117.000000, 0.000000 +2404, -3.000000, 138.000000, 117.000000, 0.000000 +2405, -3.000000, 138.000000, 117.000000, 0.000000 +2406, -3.000000, 138.000000, 117.000000, 0.000000 +2407, -3.000000, 138.000000, 117.000000, 0.000000 +2408, -3.000000, 138.000000, 117.000000, 0.000000 +2409, -3.000000, 138.000000, 117.000000, 0.000000 +2410, -3.000000, 138.000000, 117.000000, 0.000000 +2411, -3.000000, 138.000000, 117.000000, 0.000000 +2412, -3.000000, 138.000000, 117.000000, 0.000000 +2413, -3.000000, 138.000000, 117.000000, 0.000000 +2414, -3.000000, 138.000000, 117.000000, 0.000000 +2415, -3.000000, 138.000000, 117.000000, 0.000000 +2416, -3.000000, 138.000000, 117.000000, 0.000000 +2417, -3.000000, 138.000000, 117.000000, 0.000000 +2418, -3.000000, 138.000000, 117.000000, 0.000000 +2419, -3.000000, 138.000000, 117.000000, 0.000000 +2420, -3.000000, 138.000000, 117.000000, 0.000000 +2421, -3.000000, 138.000000, 117.000000, 0.000000 +2422, -3.000000, 138.000000, 117.000000, 0.000000 +2423, -3.000000, 138.000000, 117.000000, 0.000000 +2424, -3.000000, 138.000000, 117.000000, 0.000000 +2425, -3.000000, 138.000000, 117.000000, 0.000000 +2426, -3.000000, 138.000000, 117.000000, 0.000000 +2427, -3.000000, 138.000000, 117.000000, 0.000000 +2428, -3.000000, 138.000000, 117.000000, 0.000000 +2429, -3.000000, 138.000000, 117.000000, 0.000000 +2430, -3.000000, 138.000000, 117.000000, 0.000000 +2431, -3.000000, 138.000000, 117.000000, 0.000000 +2432, -3.000000, 138.000000, 117.000000, 0.000000 +2433, -3.000000, 138.000000, 117.000000, 0.000000 +2434, -3.000000, 138.000000, 117.000000, 0.000000 +2435, -3.000000, 138.000000, 117.000000, 0.000000 +2436, -3.000000, 138.000000, 117.000000, 0.000000 +2437, -3.000000, 138.000000, 117.000000, 0.000000 +2438, -3.000000, 138.000000, 117.000000, 0.000000 +2439, -3.000000, 138.000000, 117.000000, 0.000000 +2440, -3.000000, 138.000000, 117.000000, 0.000000 +2441, -3.000000, 138.000000, 117.000000, 0.000000 +2442, -3.000000, 138.000000, 117.000000, 0.000000 +2443, -3.000000, 138.000000, 117.000000, 0.000000 +2444, -3.000000, 138.000000, 117.000000, 0.000000 +2445, -3.000000, 138.000000, 117.000000, 0.000000 +2446, -3.000000, 138.000000, 117.000000, 0.000000 +2447, -3.000000, 138.000000, 117.000000, 0.000000 +2448, -3.000000, 138.000000, 117.000000, 0.000000 +2449, -3.000000, 138.000000, 117.000000, 0.000000 +2450, -3.000000, 138.000000, 117.000000, 0.000000 +2451, -3.000000, 138.000000, 117.000000, 0.000000 +2452, -3.000000, 138.000000, 117.000000, 0.000000 +2453, -3.000000, 138.000000, 117.000000, 0.000000 +2454, -3.000000, 138.000000, 117.000000, 0.000000 +2455, -3.000000, 138.000000, 117.000000, 0.000000 +2456, -3.000000, 138.000000, 117.000000, 0.000000 +2457, -3.000000, 138.000000, 117.000000, 0.000000 +2458, -3.000000, 138.000000, 117.000000, 0.000000 +2459, -3.000000, 138.000000, 117.000000, 0.000000 +2460, -3.000000, 138.000000, 117.000000, 0.000000 +2461, -3.000000, 138.000000, 117.000000, 0.000000 +2462, -3.000000, 138.000000, 117.000000, 0.000000 +2463, -3.000000, 138.000000, 117.000000, 0.000000 +2464, -3.000000, 138.000000, 117.000000, 0.000000 +2465, -3.000000, 138.000000, 117.000000, 0.000000 +2466, -3.000000, 138.000000, 117.000000, 0.000000 +2467, -3.000000, 138.000000, 117.000000, 0.000000 +2468, -3.000000, 138.000000, 117.000000, 0.000000 +2469, -3.000000, 138.000000, 117.000000, 0.000000 +2470, -3.000000, 138.000000, 117.000000, 0.000000 +2471, -3.000000, 138.000000, 117.000000, 0.000000 +2472, -3.000000, 138.000000, 117.000000, 0.000000 +2473, -3.000000, 138.000000, 117.000000, 0.000000 +2474, -3.000000, 138.000000, 117.000000, 0.000000 +2475, -3.000000, 138.000000, 117.000000, 0.000000 +2476, -3.000000, 138.000000, 117.000000, 0.000000 +2477, -3.000000, 138.000000, 117.000000, 0.000000 +2478, -3.000000, 138.000000, 117.000000, 0.000000 +2479, -3.000000, 138.000000, 117.000000, 0.000000 +2480, -3.000000, 138.000000, 117.000000, 0.000000 +2481, -3.000000, 138.000000, 117.000000, 0.000000 +2482, -3.000000, 138.000000, 117.000000, 0.000000 +2483, -3.000000, 138.000000, 117.000000, 0.000000 +2484, -3.000000, 138.000000, 117.000000, 0.000000 +2485, -3.000000, 138.000000, 117.000000, 0.000000 +2486, -3.000000, 138.000000, 117.000000, 0.000000 +2487, -3.000000, 138.000000, 117.000000, 0.000000 +2488, -3.000000, 138.000000, 117.000000, 0.000000 +2489, -3.000000, 138.000000, 117.000000, 0.000000 +2490, -3.000000, 138.000000, 117.000000, 0.000000 +2491, -3.000000, 138.000000, 117.000000, 0.000000 +2492, -3.000000, 138.000000, 117.000000, 0.000000 +2493, -3.000000, 138.000000, 117.000000, 0.000000 +2494, -3.000000, 138.000000, 117.000000, 0.000000 +2495, -3.000000, 138.000000, 117.000000, 0.000000 +2496, -3.000000, 138.000000, 117.000000, 0.000000 +2497, -3.000000, 138.000000, 117.000000, 0.000000 +2498, -3.000000, 138.000000, 117.000000, 0.000000 +2499, -3.000000, 138.000000, 117.000000, 0.000000 +2500, -3.000000, 140.000000, 120.000000, 0.000000 +2501, -3.000000, 140.000000, 120.000000, 0.000000 +2502, -3.000000, 140.000000, 120.000000, 0.000000 +2503, -3.000000, 140.000000, 120.000000, 0.000000 +2504, -3.000000, 140.000000, 120.000000, 0.000000 +2505, -3.000000, 140.000000, 120.000000, 0.000000 +2506, -3.000000, 140.000000, 120.000000, 0.000000 +2507, -3.000000, 140.000000, 120.000000, 0.000000 +2508, -3.000000, 140.000000, 120.000000, 0.000000 +2509, -3.000000, 140.000000, 120.000000, 0.000000 +2510, -3.000000, 140.000000, 120.000000, 0.000000 +2511, -3.000000, 140.000000, 120.000000, 0.000000 +2512, -3.000000, 140.000000, 120.000000, 0.000000 +2513, -3.000000, 140.000000, 120.000000, 0.000000 +2514, -3.000000, 140.000000, 120.000000, 0.000000 +2515, -3.000000, 140.000000, 120.000000, 0.000000 +2516, -3.000000, 140.000000, 120.000000, 0.000000 +2517, -3.000000, 140.000000, 120.000000, 0.000000 +2518, -3.000000, 140.000000, 120.000000, 0.000000 +2519, -3.000000, 140.000000, 120.000000, 0.000000 +2520, -3.000000, 140.000000, 120.000000, 0.000000 +2521, -3.000000, 140.000000, 120.000000, 0.000000 +2522, -3.000000, 140.000000, 120.000000, 0.000000 +2523, -3.000000, 140.000000, 120.000000, 0.000000 +2524, -3.000000, 140.000000, 120.000000, 0.000000 +2525, -3.000000, 140.000000, 120.000000, 0.000000 +2526, -3.000000, 140.000000, 120.000000, 0.000000 +2527, -3.000000, 140.000000, 120.000000, 0.000000 +2528, -3.000000, 140.000000, 120.000000, 0.000000 +2529, -3.000000, 140.000000, 120.000000, 0.000000 +2530, -3.000000, 140.000000, 120.000000, 0.000000 +2531, -3.000000, 140.000000, 120.000000, 0.000000 +2532, -3.000000, 140.000000, 120.000000, 0.000000 +2533, -3.000000, 140.000000, 120.000000, 0.000000 +2534, -3.000000, 140.000000, 120.000000, 0.000000 +2535, -3.000000, 140.000000, 120.000000, 0.000000 +2536, -3.000000, 140.000000, 120.000000, 0.000000 +2537, -3.000000, 140.000000, 120.000000, 0.000000 +2538, -3.000000, 140.000000, 120.000000, 0.000000 +2539, -3.000000, 140.000000, 120.000000, 0.000000 +2540, -3.000000, 140.000000, 120.000000, 0.000000 +2541, -3.000000, 140.000000, 120.000000, 0.000000 +2542, -3.000000, 140.000000, 120.000000, 0.000000 +2543, -3.000000, 140.000000, 120.000000, 0.000000 +2544, -3.000000, 140.000000, 120.000000, 0.000000 +2545, -3.000000, 140.000000, 120.000000, 0.000000 +2546, -3.000000, 140.000000, 120.000000, 0.000000 +2547, -3.000000, 140.000000, 120.000000, 0.000000 +2548, -3.000000, 140.000000, 120.000000, 0.000000 +2549, -3.000000, 140.000000, 120.000000, 0.000000 +2550, -3.000000, 140.000000, 120.000000, 0.000000 +2551, -3.000000, 140.000000, 120.000000, 0.000000 +2552, -3.000000, 140.000000, 120.000000, 0.000000 +2553, -3.000000, 140.000000, 120.000000, 0.000000 +2554, -3.000000, 140.000000, 120.000000, 0.000000 +2555, -3.000000, 140.000000, 120.000000, 0.000000 +2556, -3.000000, 140.000000, 120.000000, 0.000000 +2557, -3.000000, 140.000000, 120.000000, 0.000000 +2558, -3.000000, 140.000000, 120.000000, 0.000000 +2559, -3.000000, 140.000000, 120.000000, 0.000000 +2560, -3.000000, 140.000000, 120.000000, 0.000000 +2561, -3.000000, 140.000000, 120.000000, 0.000000 +2562, -3.000000, 140.000000, 120.000000, 0.000000 +2563, -3.000000, 140.000000, 120.000000, 0.000000 +2564, -3.000000, 140.000000, 120.000000, 0.000000 +2565, -3.000000, 140.000000, 120.000000, 0.000000 +2566, -3.000000, 140.000000, 120.000000, 0.000000 +2567, -3.000000, 140.000000, 120.000000, 0.000000 +2568, -3.000000, 140.000000, 120.000000, 0.000000 +2569, -3.000000, 140.000000, 120.000000, 0.000000 +2570, -3.000000, 140.000000, 120.000000, 0.000000 +2571, -3.000000, 140.000000, 120.000000, 0.000000 +2572, -3.000000, 140.000000, 120.000000, 0.000000 +2573, -3.000000, 140.000000, 120.000000, 0.000000 +2574, -3.000000, 140.000000, 120.000000, 0.000000 +2575, -3.000000, 140.000000, 120.000000, 0.000000 +2576, -3.000000, 140.000000, 120.000000, 0.000000 +2577, -3.000000, 140.000000, 120.000000, 0.000000 +2578, -3.000000, 140.000000, 120.000000, 0.000000 +2579, -3.000000, 140.000000, 120.000000, 0.000000 +2580, -3.000000, 140.000000, 120.000000, 0.000000 +2581, -3.000000, 140.000000, 120.000000, 0.000000 +2582, -3.000000, 140.000000, 120.000000, 0.000000 +2583, -3.000000, 140.000000, 120.000000, 0.000000 +2584, -3.000000, 140.000000, 120.000000, 0.000000 +2585, -3.000000, 140.000000, 120.000000, 0.000000 +2586, -3.000000, 140.000000, 120.000000, 0.000000 +2587, -3.000000, 140.000000, 120.000000, 0.000000 +2588, -3.000000, 140.000000, 120.000000, 0.000000 +2589, -3.000000, 140.000000, 120.000000, 0.000000 +2590, -3.000000, 140.000000, 120.000000, 0.000000 +2591, -3.000000, 140.000000, 120.000000, 0.000000 +2592, -3.000000, 140.000000, 120.000000, 0.000000 +2593, -3.000000, 140.000000, 120.000000, 0.000000 +2594, -3.000000, 140.000000, 120.000000, 0.000000 +2595, -3.000000, 140.000000, 120.000000, 0.000000 +2596, -3.000000, 140.000000, 120.000000, 0.000000 +2597, -3.000000, 140.000000, 120.000000, 0.000000 +2598, -3.000000, 140.000000, 120.000000, 0.000000 +2599, -3.000000, 140.000000, 120.000000, 0.000000 +2600, -3.000000, 142.000000, 123.000000, 0.000000 +2601, -3.000000, 142.000000, 123.000000, 0.000000 +2602, -3.000000, 142.000000, 123.000000, 0.000000 +2603, -3.000000, 142.000000, 123.000000, 0.000000 +2604, -3.000000, 142.000000, 123.000000, 0.000000 +2605, -3.000000, 142.000000, 123.000000, 0.000000 +2606, -3.000000, 142.000000, 123.000000, 0.000000 +2607, -3.000000, 142.000000, 123.000000, 0.000000 +2608, -3.000000, 142.000000, 123.000000, 0.000000 +2609, -3.000000, 142.000000, 123.000000, 0.000000 +2610, -3.000000, 142.000000, 123.000000, 0.000000 +2611, -3.000000, 142.000000, 123.000000, 0.000000 +2612, -3.000000, 142.000000, 123.000000, 0.000000 +2613, -3.000000, 142.000000, 123.000000, 0.000000 +2614, -3.000000, 142.000000, 123.000000, 0.000000 +2615, -3.000000, 142.000000, 123.000000, 0.000000 +2616, -3.000000, 142.000000, 123.000000, 0.000000 +2617, -3.000000, 142.000000, 123.000000, 0.000000 +2618, -3.000000, 142.000000, 123.000000, 0.000000 +2619, -3.000000, 142.000000, 123.000000, 0.000000 +2620, -3.000000, 142.000000, 123.000000, 0.000000 +2621, -3.000000, 142.000000, 123.000000, 0.000000 +2622, -3.000000, 142.000000, 123.000000, 0.000000 +2623, -3.000000, 142.000000, 123.000000, 0.000000 +2624, -3.000000, 142.000000, 123.000000, 0.000000 +2625, -3.000000, 142.000000, 123.000000, 0.000000 +2626, -3.000000, 142.000000, 123.000000, 0.000000 +2627, -3.000000, 142.000000, 123.000000, 0.000000 +2628, -3.000000, 142.000000, 123.000000, 0.000000 +2629, -3.000000, 142.000000, 123.000000, 0.000000 +2630, -3.000000, 142.000000, 123.000000, 0.000000 +2631, -3.000000, 142.000000, 123.000000, 0.000000 +2632, -3.000000, 142.000000, 123.000000, 0.000000 +2633, -3.000000, 142.000000, 123.000000, 0.000000 +2634, -3.000000, 142.000000, 123.000000, 0.000000 +2635, -3.000000, 142.000000, 123.000000, 0.000000 +2636, -3.000000, 142.000000, 123.000000, 0.000000 +2637, -3.000000, 142.000000, 123.000000, 0.000000 +2638, -3.000000, 142.000000, 123.000000, 0.000000 +2639, -3.000000, 142.000000, 123.000000, 0.000000 +2640, -3.000000, 142.000000, 123.000000, 0.000000 +2641, -3.000000, 142.000000, 123.000000, 0.000000 +2642, -3.000000, 142.000000, 123.000000, 0.000000 +2643, -3.000000, 142.000000, 123.000000, 0.000000 +2644, -3.000000, 142.000000, 123.000000, 0.000000 +2645, -3.000000, 142.000000, 123.000000, 0.000000 +2646, -3.000000, 142.000000, 123.000000, 0.000000 +2647, -3.000000, 142.000000, 123.000000, 0.000000 +2648, -3.000000, 142.000000, 123.000000, 0.000000 +2649, -3.000000, 142.000000, 123.000000, 0.000000 +2650, -3.000000, 142.000000, 123.000000, 0.000000 +2651, -3.000000, 142.000000, 123.000000, 0.000000 +2652, -3.000000, 142.000000, 123.000000, 0.000000 +2653, -3.000000, 142.000000, 123.000000, 0.000000 +2654, -3.000000, 142.000000, 123.000000, 0.000000 +2655, -3.000000, 142.000000, 123.000000, 0.000000 +2656, -3.000000, 142.000000, 123.000000, 0.000000 +2657, -3.000000, 142.000000, 123.000000, 0.000000 +2658, -3.000000, 142.000000, 123.000000, 0.000000 +2659, -3.000000, 142.000000, 123.000000, 0.000000 +2660, -3.000000, 142.000000, 123.000000, 0.000000 +2661, -3.000000, 142.000000, 123.000000, 0.000000 +2662, -3.000000, 142.000000, 123.000000, 0.000000 +2663, -3.000000, 142.000000, 123.000000, 0.000000 +2664, -3.000000, 142.000000, 123.000000, 0.000000 +2665, -3.000000, 142.000000, 123.000000, 0.000000 +2666, -3.000000, 142.000000, 123.000000, 0.000000 +2667, -3.000000, 142.000000, 123.000000, 0.000000 +2668, -3.000000, 142.000000, 123.000000, 0.000000 +2669, -3.000000, 142.000000, 123.000000, 0.000000 +2670, -3.000000, 142.000000, 123.000000, 0.000000 +2671, -3.000000, 142.000000, 123.000000, 0.000000 +2672, -3.000000, 142.000000, 123.000000, 0.000000 +2673, -3.000000, 142.000000, 123.000000, 0.000000 +2674, -3.000000, 142.000000, 123.000000, 0.000000 +2675, -3.000000, 142.000000, 123.000000, 0.000000 +2676, -3.000000, 142.000000, 123.000000, 0.000000 +2677, -3.000000, 142.000000, 123.000000, 0.000000 +2678, -3.000000, 142.000000, 123.000000, 0.000000 +2679, -3.000000, 142.000000, 123.000000, 0.000000 +2680, -3.000000, 142.000000, 123.000000, 0.000000 +2681, -3.000000, 142.000000, 123.000000, 0.000000 +2682, -3.000000, 142.000000, 123.000000, 0.000000 +2683, -3.000000, 142.000000, 123.000000, 0.000000 +2684, -3.000000, 142.000000, 123.000000, 0.000000 +2685, -3.000000, 142.000000, 123.000000, 0.000000 +2686, -3.000000, 142.000000, 123.000000, 0.000000 +2687, -3.000000, 142.000000, 123.000000, 0.000000 +2688, -3.000000, 142.000000, 123.000000, 0.000000 +2689, -3.000000, 142.000000, 123.000000, 0.000000 +2690, -3.000000, 142.000000, 123.000000, 0.000000 +2691, -3.000000, 142.000000, 123.000000, 0.000000 +2692, -3.000000, 142.000000, 123.000000, 0.000000 +2693, -3.000000, 142.000000, 123.000000, 0.000000 +2694, -3.000000, 142.000000, 123.000000, 0.000000 +2695, -3.000000, 142.000000, 123.000000, 0.000000 +2696, -3.000000, 142.000000, 123.000000, 0.000000 +2697, -3.000000, 142.000000, 123.000000, 0.000000 +2698, -3.000000, 142.000000, 123.000000, 0.000000 +2699, -3.000000, 142.000000, 123.000000, 0.000000 +2700, -3.000000, 144.000000, 126.000000, 0.000000 +2701, -3.000000, 144.000000, 126.000000, 0.000000 +2702, -3.000000, 144.000000, 126.000000, 0.000000 +2703, -3.000000, 144.000000, 126.000000, 0.000000 +2704, -3.000000, 144.000000, 126.000000, 0.000000 +2705, -3.000000, 144.000000, 126.000000, 0.000000 +2706, -3.000000, 144.000000, 126.000000, 0.000000 +2707, -3.000000, 144.000000, 126.000000, 0.000000 +2708, -3.000000, 144.000000, 126.000000, 0.000000 +2709, -3.000000, 144.000000, 126.000000, 0.000000 +2710, -3.000000, 144.000000, 126.000000, 0.000000 +2711, -3.000000, 144.000000, 126.000000, 0.000000 +2712, -3.000000, 144.000000, 126.000000, 0.000000 +2713, -3.000000, 144.000000, 126.000000, 0.000000 +2714, -3.000000, 144.000000, 126.000000, 0.000000 +2715, -3.000000, 144.000000, 126.000000, 0.000000 +2716, -3.000000, 144.000000, 126.000000, 0.000000 +2717, -3.000000, 144.000000, 126.000000, 0.000000 +2718, -3.000000, 144.000000, 126.000000, 0.000000 +2719, -3.000000, 144.000000, 126.000000, 0.000000 +2720, -3.000000, 144.000000, 126.000000, 0.000000 +2721, -3.000000, 144.000000, 126.000000, 0.000000 +2722, -3.000000, 144.000000, 126.000000, 0.000000 +2723, -3.000000, 144.000000, 126.000000, 0.000000 +2724, -3.000000, 144.000000, 126.000000, 0.000000 +2725, -3.000000, 144.000000, 126.000000, 0.000000 +2726, -3.000000, 144.000000, 126.000000, 0.000000 +2727, -3.000000, 144.000000, 126.000000, 0.000000 +2728, -3.000000, 144.000000, 126.000000, 0.000000 +2729, -3.000000, 144.000000, 126.000000, 0.000000 +2730, -3.000000, 144.000000, 126.000000, 0.000000 +2731, -3.000000, 144.000000, 126.000000, 0.000000 +2732, -3.000000, 144.000000, 126.000000, 0.000000 +2733, -3.000000, 144.000000, 126.000000, 0.000000 +2734, -3.000000, 144.000000, 126.000000, 0.000000 +2735, -3.000000, 144.000000, 126.000000, 0.000000 +2736, -3.000000, 144.000000, 126.000000, 0.000000 +2737, -3.000000, 144.000000, 126.000000, 0.000000 +2738, -3.000000, 144.000000, 126.000000, 0.000000 +2739, -3.000000, 144.000000, 126.000000, 0.000000 +2740, -3.000000, 144.000000, 126.000000, 0.000000 +2741, -3.000000, 144.000000, 126.000000, 0.000000 +2742, -3.000000, 144.000000, 126.000000, 0.000000 +2743, -3.000000, 144.000000, 126.000000, 0.000000 +2744, -3.000000, 144.000000, 126.000000, 0.000000 +2745, -3.000000, 144.000000, 126.000000, 0.000000 +2746, -3.000000, 144.000000, 126.000000, 0.000000 +2747, -3.000000, 144.000000, 126.000000, 0.000000 +2748, -3.000000, 144.000000, 126.000000, 0.000000 +2749, -3.000000, 144.000000, 126.000000, 0.000000 +2750, -3.000000, 144.000000, 126.000000, 0.000000 +2751, -3.000000, 144.000000, 126.000000, 0.000000 +2752, -3.000000, 144.000000, 126.000000, 0.000000 +2753, -3.000000, 144.000000, 126.000000, 0.000000 +2754, -3.000000, 144.000000, 126.000000, 0.000000 +2755, -3.000000, 144.000000, 126.000000, 0.000000 +2756, -3.000000, 144.000000, 126.000000, 0.000000 +2757, -3.000000, 144.000000, 126.000000, 0.000000 +2758, -3.000000, 144.000000, 126.000000, 0.000000 +2759, -3.000000, 144.000000, 126.000000, 0.000000 +2760, -3.000000, 144.000000, 126.000000, 0.000000 +2761, -3.000000, 144.000000, 126.000000, 0.000000 +2762, -3.000000, 144.000000, 126.000000, 0.000000 +2763, -3.000000, 144.000000, 126.000000, 0.000000 +2764, -3.000000, 144.000000, 126.000000, 0.000000 +2765, -3.000000, 144.000000, 126.000000, 0.000000 +2766, -3.000000, 144.000000, 126.000000, 0.000000 +2767, -3.000000, 144.000000, 126.000000, 0.000000 +2768, -3.000000, 144.000000, 126.000000, 0.000000 +2769, -3.000000, 144.000000, 126.000000, 0.000000 +2770, -3.000000, 144.000000, 126.000000, 0.000000 +2771, -3.000000, 144.000000, 126.000000, 0.000000 +2772, -3.000000, 144.000000, 126.000000, 0.000000 +2773, -3.000000, 144.000000, 126.000000, 0.000000 +2774, -3.000000, 144.000000, 126.000000, 0.000000 +2775, -3.000000, 144.000000, 126.000000, 0.000000 +2776, -3.000000, 144.000000, 126.000000, 0.000000 +2777, -3.000000, 144.000000, 126.000000, 0.000000 +2778, -3.000000, 144.000000, 126.000000, 0.000000 +2779, -3.000000, 144.000000, 126.000000, 0.000000 +2780, -3.000000, 144.000000, 126.000000, 0.000000 +2781, -3.000000, 144.000000, 126.000000, 0.000000 +2782, -3.000000, 144.000000, 126.000000, 0.000000 +2783, -3.000000, 144.000000, 126.000000, 0.000000 +2784, -3.000000, 144.000000, 126.000000, 0.000000 +2785, -3.000000, 144.000000, 126.000000, 0.000000 +2786, -3.000000, 144.000000, 126.000000, 0.000000 +2787, -3.000000, 144.000000, 126.000000, 0.000000 +2788, -3.000000, 144.000000, 126.000000, 0.000000 +2789, -3.000000, 144.000000, 126.000000, 0.000000 +2790, -3.000000, 144.000000, 126.000000, 0.000000 +2791, -3.000000, 144.000000, 126.000000, 0.000000 +2792, -3.000000, 144.000000, 126.000000, 0.000000 +2793, -3.000000, 144.000000, 126.000000, 0.000000 +2794, -3.000000, 144.000000, 126.000000, 0.000000 +2795, -3.000000, 144.000000, 126.000000, 0.000000 +2796, -3.000000, 144.000000, 126.000000, 0.000000 +2797, -3.000000, 144.000000, 126.000000, 0.000000 +2798, -3.000000, 144.000000, 126.000000, 0.000000 +2799, -3.000000, 144.000000, 126.000000, 0.000000 +2800, -3.000000, 146.000000, 129.000000, 0.000000 +2801, -3.000000, 146.000000, 129.000000, 0.000000 +2802, -3.000000, 146.000000, 129.000000, 0.000000 +2803, -3.000000, 146.000000, 129.000000, 0.000000 +2804, -3.000000, 146.000000, 129.000000, 0.000000 +2805, -3.000000, 146.000000, 129.000000, 0.000000 +2806, -3.000000, 146.000000, 129.000000, 0.000000 +2807, -3.000000, 146.000000, 129.000000, 0.000000 +2808, -3.000000, 146.000000, 129.000000, 0.000000 +2809, -3.000000, 146.000000, 129.000000, 0.000000 +2810, -3.000000, 146.000000, 129.000000, 0.000000 +2811, -3.000000, 146.000000, 129.000000, 0.000000 +2812, -3.000000, 146.000000, 129.000000, 0.000000 +2813, -3.000000, 146.000000, 129.000000, 0.000000 +2814, -3.000000, 146.000000, 129.000000, 0.000000 +2815, -3.000000, 146.000000, 129.000000, 0.000000 +2816, -3.000000, 146.000000, 129.000000, 0.000000 +2817, -3.000000, 146.000000, 129.000000, 0.000000 +2818, -3.000000, 146.000000, 129.000000, 0.000000 +2819, -3.000000, 146.000000, 129.000000, 0.000000 +2820, -3.000000, 146.000000, 129.000000, 0.000000 +2821, -3.000000, 146.000000, 129.000000, 0.000000 +2822, -3.000000, 146.000000, 129.000000, 0.000000 +2823, -3.000000, 146.000000, 129.000000, 0.000000 +2824, -3.000000, 146.000000, 129.000000, 0.000000 +2825, -3.000000, 146.000000, 129.000000, 0.000000 +2826, -3.000000, 146.000000, 129.000000, 0.000000 +2827, -3.000000, 146.000000, 129.000000, 0.000000 +2828, -3.000000, 146.000000, 129.000000, 0.000000 +2829, -3.000000, 146.000000, 129.000000, 0.000000 +2830, -3.000000, 146.000000, 129.000000, 0.000000 +2831, -3.000000, 146.000000, 129.000000, 0.000000 +2832, -3.000000, 146.000000, 129.000000, 0.000000 +2833, -3.000000, 146.000000, 129.000000, 0.000000 +2834, -3.000000, 146.000000, 129.000000, 0.000000 +2835, -3.000000, 146.000000, 129.000000, 0.000000 +2836, -3.000000, 146.000000, 129.000000, 0.000000 +2837, -3.000000, 146.000000, 129.000000, 0.000000 +2838, -3.000000, 146.000000, 129.000000, 0.000000 +2839, -3.000000, 146.000000, 129.000000, 0.000000 +2840, -3.000000, 146.000000, 129.000000, 0.000000 +2841, -3.000000, 146.000000, 129.000000, 0.000000 +2842, -3.000000, 146.000000, 129.000000, 0.000000 +2843, -3.000000, 146.000000, 129.000000, 0.000000 +2844, -3.000000, 146.000000, 129.000000, 0.000000 +2845, -3.000000, 146.000000, 129.000000, 0.000000 +2846, -3.000000, 146.000000, 129.000000, 0.000000 +2847, -3.000000, 146.000000, 129.000000, 0.000000 +2848, -3.000000, 146.000000, 129.000000, 0.000000 +2849, -3.000000, 146.000000, 129.000000, 0.000000 +2850, -3.000000, 146.000000, 129.000000, 0.000000 +2851, -3.000000, 146.000000, 129.000000, 0.000000 +2852, -3.000000, 146.000000, 129.000000, 0.000000 +2853, -3.000000, 146.000000, 129.000000, 0.000000 +2854, -3.000000, 146.000000, 129.000000, 0.000000 +2855, -3.000000, 146.000000, 129.000000, 0.000000 +2856, -3.000000, 146.000000, 129.000000, 0.000000 +2857, -3.000000, 146.000000, 129.000000, 0.000000 +2858, -3.000000, 146.000000, 129.000000, 0.000000 +2859, -3.000000, 146.000000, 129.000000, 0.000000 +2860, -3.000000, 146.000000, 129.000000, 0.000000 +2861, -3.000000, 146.000000, 129.000000, 0.000000 +2862, -3.000000, 146.000000, 129.000000, 0.000000 +2863, -3.000000, 146.000000, 129.000000, 0.000000 +2864, -3.000000, 146.000000, 129.000000, 0.000000 +2865, -3.000000, 146.000000, 129.000000, 0.000000 +2866, -3.000000, 146.000000, 129.000000, 0.000000 +2867, -3.000000, 146.000000, 129.000000, 0.000000 +2868, -3.000000, 146.000000, 129.000000, 0.000000 +2869, -3.000000, 146.000000, 129.000000, 0.000000 +2870, -3.000000, 146.000000, 129.000000, 0.000000 +2871, -3.000000, 146.000000, 129.000000, 0.000000 +2872, -3.000000, 146.000000, 129.000000, 0.000000 +2873, -3.000000, 146.000000, 129.000000, 0.000000 +2874, -3.000000, 146.000000, 129.000000, 0.000000 +2875, -3.000000, 146.000000, 129.000000, 0.000000 +2876, -3.000000, 146.000000, 129.000000, 0.000000 +2877, -3.000000, 146.000000, 129.000000, 0.000000 +2878, -3.000000, 146.000000, 129.000000, 0.000000 +2879, -3.000000, 146.000000, 129.000000, 0.000000 +2880, -3.000000, 146.000000, 129.000000, 0.000000 +2881, -3.000000, 146.000000, 129.000000, 0.000000 +2882, -3.000000, 146.000000, 129.000000, 0.000000 +2883, -3.000000, 146.000000, 129.000000, 0.000000 +2884, -3.000000, 146.000000, 129.000000, 0.000000 +2885, -3.000000, 146.000000, 129.000000, 0.000000 +2886, -3.000000, 146.000000, 129.000000, 0.000000 +2887, -3.000000, 146.000000, 129.000000, 0.000000 +2888, -3.000000, 146.000000, 129.000000, 0.000000 +2889, -3.000000, 146.000000, 129.000000, 0.000000 +2890, -3.000000, 146.000000, 129.000000, 0.000000 +2891, -3.000000, 146.000000, 129.000000, 0.000000 +2892, -3.000000, 146.000000, 129.000000, 0.000000 +2893, -3.000000, 146.000000, 129.000000, 0.000000 +2894, -3.000000, 146.000000, 129.000000, 0.000000 +2895, -3.000000, 146.000000, 129.000000, 0.000000 +2896, -3.000000, 146.000000, 129.000000, 0.000000 +2897, -3.000000, 146.000000, 129.000000, 0.000000 +2898, -3.000000, 146.000000, 129.000000, 0.000000 +2899, -3.000000, 146.000000, 129.000000, 0.000000 +2900, -3.000000, 148.000000, 132.000000, 0.000000 +2901, -3.000000, 148.000000, 132.000000, 0.000000 +2902, -3.000000, 148.000000, 132.000000, 0.000000 +2903, -3.000000, 148.000000, 132.000000, 0.000000 +2904, -3.000000, 148.000000, 132.000000, 0.000000 +2905, -3.000000, 148.000000, 132.000000, 0.000000 +2906, -3.000000, 148.000000, 132.000000, 0.000000 +2907, -3.000000, 148.000000, 132.000000, 0.000000 +2908, -3.000000, 148.000000, 132.000000, 0.000000 +2909, -3.000000, 148.000000, 132.000000, 0.000000 +2910, -3.000000, 148.000000, 132.000000, 0.000000 +2911, -3.000000, 148.000000, 132.000000, 0.000000 +2912, -3.000000, 148.000000, 132.000000, 0.000000 +2913, -3.000000, 148.000000, 132.000000, 0.000000 +2914, -3.000000, 148.000000, 132.000000, 0.000000 +2915, -3.000000, 148.000000, 132.000000, 0.000000 +2916, -3.000000, 148.000000, 132.000000, 0.000000 +2917, -3.000000, 148.000000, 132.000000, 0.000000 +2918, -3.000000, 148.000000, 132.000000, 0.000000 +2919, -3.000000, 148.000000, 132.000000, 0.000000 +2920, -3.000000, 148.000000, 132.000000, 0.000000 +2921, -3.000000, 148.000000, 132.000000, 0.000000 +2922, -3.000000, 148.000000, 132.000000, 0.000000 +2923, -3.000000, 148.000000, 132.000000, 0.000000 +2924, -3.000000, 148.000000, 132.000000, 0.000000 +2925, -3.000000, 148.000000, 132.000000, 0.000000 +2926, -3.000000, 148.000000, 132.000000, 0.000000 +2927, -3.000000, 148.000000, 132.000000, 0.000000 +2928, -3.000000, 148.000000, 132.000000, 0.000000 +2929, -3.000000, 148.000000, 132.000000, 0.000000 +2930, -3.000000, 148.000000, 132.000000, 0.000000 +2931, -3.000000, 148.000000, 132.000000, 0.000000 +2932, -3.000000, 148.000000, 132.000000, 0.000000 +2933, -3.000000, 148.000000, 132.000000, 0.000000 +2934, -3.000000, 148.000000, 132.000000, 0.000000 +2935, -3.000000, 148.000000, 132.000000, 0.000000 +2936, -3.000000, 148.000000, 132.000000, 0.000000 +2937, -3.000000, 148.000000, 132.000000, 0.000000 +2938, -3.000000, 148.000000, 132.000000, 0.000000 +2939, -3.000000, 148.000000, 132.000000, 0.000000 +2940, -3.000000, 148.000000, 132.000000, 0.000000 +2941, -3.000000, 148.000000, 132.000000, 0.000000 +2942, -3.000000, 148.000000, 132.000000, 0.000000 +2943, -3.000000, 148.000000, 132.000000, 0.000000 +2944, -3.000000, 148.000000, 132.000000, 0.000000 +2945, -3.000000, 148.000000, 132.000000, 0.000000 +2946, -3.000000, 148.000000, 132.000000, 0.000000 +2947, -3.000000, 148.000000, 132.000000, 0.000000 +2948, -3.000000, 148.000000, 132.000000, 0.000000 +2949, -3.000000, 148.000000, 132.000000, 0.000000 +2950, -3.000000, 148.000000, 132.000000, 0.000000 +2951, -3.000000, 148.000000, 132.000000, 0.000000 +2952, -3.000000, 148.000000, 132.000000, 0.000000 +2953, -3.000000, 148.000000, 132.000000, 0.000000 +2954, -3.000000, 148.000000, 132.000000, 0.000000 +2955, -3.000000, 148.000000, 132.000000, 0.000000 +2956, -3.000000, 148.000000, 132.000000, 0.000000 +2957, -3.000000, 148.000000, 132.000000, 0.000000 +2958, -3.000000, 148.000000, 132.000000, 0.000000 +2959, -3.000000, 148.000000, 132.000000, 0.000000 +2960, -3.000000, 148.000000, 132.000000, 0.000000 +2961, -3.000000, 148.000000, 132.000000, 0.000000 +2962, -3.000000, 148.000000, 132.000000, 0.000000 +2963, -3.000000, 148.000000, 132.000000, 0.000000 +2964, -3.000000, 148.000000, 132.000000, 0.000000 +2965, -3.000000, 148.000000, 132.000000, 0.000000 +2966, -3.000000, 148.000000, 132.000000, 0.000000 +2967, -3.000000, 148.000000, 132.000000, 0.000000 +2968, -3.000000, 148.000000, 132.000000, 0.000000 +2969, -3.000000, 148.000000, 132.000000, 0.000000 +2970, -3.000000, 148.000000, 132.000000, 0.000000 +2971, -3.000000, 148.000000, 132.000000, 0.000000 +2972, -3.000000, 148.000000, 132.000000, 0.000000 +2973, -3.000000, 148.000000, 132.000000, 0.000000 +2974, -3.000000, 148.000000, 132.000000, 0.000000 +2975, -3.000000, 148.000000, 132.000000, 0.000000 +2976, -3.000000, 148.000000, 132.000000, 0.000000 +2977, -3.000000, 148.000000, 132.000000, 0.000000 +2978, -3.000000, 148.000000, 132.000000, 0.000000 +2979, -3.000000, 148.000000, 132.000000, 0.000000 +2980, -3.000000, 148.000000, 132.000000, 0.000000 +2981, -3.000000, 148.000000, 132.000000, 0.000000 +2982, -3.000000, 148.000000, 132.000000, 0.000000 +2983, -3.000000, 148.000000, 132.000000, 0.000000 +2984, -3.000000, 148.000000, 132.000000, 0.000000 +2985, -3.000000, 148.000000, 132.000000, 0.000000 +2986, -3.000000, 148.000000, 132.000000, 0.000000 +2987, -3.000000, 148.000000, 132.000000, 0.000000 +2988, -3.000000, 148.000000, 132.000000, 0.000000 +2989, -3.000000, 148.000000, 132.000000, 0.000000 +2990, -3.000000, 148.000000, 132.000000, 0.000000 +2991, -3.000000, 148.000000, 132.000000, 0.000000 +2992, -3.000000, 148.000000, 132.000000, 0.000000 +2993, -3.000000, 148.000000, 132.000000, 0.000000 +2994, -3.000000, 148.000000, 132.000000, 0.000000 +2995, -3.000000, 148.000000, 132.000000, 0.000000 +2996, -3.000000, 148.000000, 132.000000, 0.000000 +2997, -3.000000, 148.000000, 132.000000, 0.000000 +2998, -3.000000, 148.000000, 132.000000, 0.000000 +2999, -3.000000, 148.000000, 132.000000, 0.000000 +3000, -3.000000, 150.000000, 135.000000, 0.000000 +3001, -3.000000, 150.000000, 135.000000, 0.000000 +3002, -3.000000, 150.000000, 135.000000, 0.000000 +3003, -3.000000, 150.000000, 135.000000, 0.000000 +3004, -3.000000, 150.000000, 135.000000, 0.000000 +3005, -3.000000, 150.000000, 135.000000, 0.000000 +3006, -3.000000, 150.000000, 135.000000, 0.000000 +3007, -3.000000, 150.000000, 135.000000, 0.000000 +3008, -3.000000, 150.000000, 135.000000, 0.000000 +3009, -3.000000, 150.000000, 135.000000, 0.000000 +3010, -3.000000, 150.000000, 135.000000, 0.000000 +3011, -3.000000, 150.000000, 135.000000, 0.000000 +3012, -3.000000, 150.000000, 135.000000, 0.000000 +3013, -3.000000, 150.000000, 135.000000, 0.000000 +3014, -3.000000, 150.000000, 135.000000, 0.000000 +3015, -3.000000, 150.000000, 135.000000, 0.000000 +3016, -3.000000, 150.000000, 135.000000, 0.000000 +3017, -3.000000, 150.000000, 135.000000, 0.000000 +3018, -3.000000, 150.000000, 135.000000, 0.000000 +3019, -3.000000, 150.000000, 135.000000, 0.000000 +3020, -3.000000, 150.000000, 135.000000, 0.000000 +3021, -3.000000, 150.000000, 135.000000, 0.000000 +3022, -3.000000, 150.000000, 135.000000, 0.000000 +3023, -3.000000, 150.000000, 135.000000, 0.000000 +3024, -3.000000, 150.000000, 135.000000, 0.000000 +3025, -3.000000, 150.000000, 135.000000, 0.000000 +3026, -3.000000, 150.000000, 135.000000, 0.000000 +3027, -3.000000, 150.000000, 135.000000, 0.000000 +3028, -3.000000, 150.000000, 135.000000, 0.000000 +3029, -3.000000, 150.000000, 135.000000, 0.000000 +3030, -3.000000, 150.000000, 135.000000, 0.000000 +3031, -3.000000, 150.000000, 135.000000, 0.000000 +3032, -3.000000, 150.000000, 135.000000, 0.000000 +3033, -3.000000, 150.000000, 135.000000, 0.000000 +3034, -3.000000, 150.000000, 135.000000, 0.000000 +3035, -3.000000, 150.000000, 135.000000, 0.000000 +3036, -3.000000, 150.000000, 135.000000, 0.000000 +3037, -3.000000, 150.000000, 135.000000, 0.000000 +3038, -3.000000, 150.000000, 135.000000, 0.000000 +3039, -3.000000, 150.000000, 135.000000, 0.000000 +3040, -3.000000, 150.000000, 135.000000, 0.000000 +3041, -3.000000, 150.000000, 135.000000, 0.000000 +3042, -3.000000, 150.000000, 135.000000, 0.000000 +3043, -3.000000, 150.000000, 135.000000, 0.000000 +3044, -3.000000, 150.000000, 135.000000, 0.000000 +3045, -3.000000, 150.000000, 135.000000, 0.000000 +3046, -3.000000, 150.000000, 135.000000, 0.000000 +3047, -3.000000, 150.000000, 135.000000, 0.000000 +3048, -3.000000, 150.000000, 135.000000, 0.000000 +3049, -3.000000, 150.000000, 135.000000, 0.000000 +3050, -3.000000, 150.000000, 135.000000, 0.000000 +3051, -3.000000, 150.000000, 135.000000, 0.000000 +3052, -3.000000, 150.000000, 135.000000, 0.000000 +3053, -3.000000, 150.000000, 135.000000, 0.000000 +3054, -3.000000, 150.000000, 135.000000, 0.000000 +3055, -3.000000, 150.000000, 135.000000, 0.000000 +3056, -3.000000, 150.000000, 135.000000, 0.000000 +3057, -3.000000, 150.000000, 135.000000, 0.000000 +3058, -3.000000, 150.000000, 135.000000, 0.000000 +3059, -3.000000, 150.000000, 135.000000, 0.000000 +3060, -3.000000, 150.000000, 135.000000, 0.000000 +3061, -3.000000, 150.000000, 135.000000, 0.000000 +3062, -3.000000, 150.000000, 135.000000, 0.000000 +3063, -3.000000, 150.000000, 135.000000, 0.000000 +3064, -3.000000, 150.000000, 135.000000, 0.000000 +3065, -3.000000, 150.000000, 135.000000, 0.000000 +3066, -3.000000, 150.000000, 135.000000, 0.000000 +3067, -3.000000, 150.000000, 135.000000, 0.000000 +3068, -3.000000, 150.000000, 135.000000, 0.000000 +3069, -3.000000, 150.000000, 135.000000, 0.000000 +3070, -3.000000, 150.000000, 135.000000, 0.000000 +3071, -3.000000, 150.000000, 135.000000, 0.000000 +3072, -3.000000, 150.000000, 135.000000, 0.000000 +3073, -3.000000, 150.000000, 135.000000, 0.000000 +3074, -3.000000, 150.000000, 135.000000, 0.000000 +3075, -3.000000, 150.000000, 135.000000, 0.000000 +3076, -3.000000, 150.000000, 135.000000, 0.000000 +3077, -3.000000, 150.000000, 135.000000, 0.000000 +3078, -3.000000, 150.000000, 135.000000, 0.000000 +3079, -3.000000, 150.000000, 135.000000, 0.000000 +3080, -3.000000, 150.000000, 135.000000, 0.000000 +3081, -3.000000, 150.000000, 135.000000, 0.000000 +3082, -3.000000, 150.000000, 135.000000, 0.000000 +3083, -3.000000, 150.000000, 135.000000, 0.000000 +3084, -3.000000, 150.000000, 135.000000, 0.000000 +3085, -3.000000, 150.000000, 135.000000, 0.000000 +3086, -3.000000, 150.000000, 135.000000, 0.000000 +3087, -3.000000, 150.000000, 135.000000, 0.000000 +3088, -3.000000, 150.000000, 135.000000, 0.000000 +3089, -3.000000, 150.000000, 135.000000, 0.000000 +3090, -3.000000, 150.000000, 135.000000, 0.000000 +3091, -3.000000, 150.000000, 135.000000, 0.000000 +3092, -3.000000, 150.000000, 135.000000, 0.000000 +3093, -3.000000, 150.000000, 135.000000, 0.000000 +3094, -3.000000, 150.000000, 135.000000, 0.000000 +3095, -3.000000, 150.000000, 135.000000, 0.000000 +3096, -3.000000, 150.000000, 135.000000, 0.000000 +3097, -3.000000, 150.000000, 135.000000, 0.000000 +3098, -3.000000, 150.000000, 135.000000, 0.000000 +3099, -3.000000, 150.000000, 135.000000, 0.000000 +3100, -3.000000, 152.000000, 138.000000, 0.000000 +3101, -3.000000, 152.000000, 138.000000, 0.000000 +3102, -3.000000, 152.000000, 138.000000, 0.000000 +3103, -3.000000, 152.000000, 138.000000, 0.000000 +3104, -3.000000, 152.000000, 138.000000, 0.000000 +3105, -3.000000, 152.000000, 138.000000, 0.000000 +3106, -3.000000, 152.000000, 138.000000, 0.000000 +3107, -3.000000, 152.000000, 138.000000, 0.000000 +3108, -3.000000, 152.000000, 138.000000, 0.000000 +3109, -3.000000, 152.000000, 138.000000, 0.000000 +3110, -3.000000, 152.000000, 138.000000, 0.000000 +3111, -3.000000, 152.000000, 138.000000, 0.000000 +3112, -3.000000, 152.000000, 138.000000, 0.000000 +3113, -3.000000, 152.000000, 138.000000, 0.000000 +3114, -3.000000, 152.000000, 138.000000, 0.000000 +3115, -3.000000, 152.000000, 138.000000, 0.000000 +3116, -3.000000, 152.000000, 138.000000, 0.000000 +3117, -3.000000, 152.000000, 138.000000, 0.000000 +3118, -3.000000, 152.000000, 138.000000, 0.000000 +3119, -3.000000, 152.000000, 138.000000, 0.000000 +3120, -3.000000, 152.000000, 138.000000, 0.000000 +3121, -3.000000, 152.000000, 138.000000, 0.000000 +3122, -3.000000, 152.000000, 138.000000, 0.000000 +3123, -3.000000, 152.000000, 138.000000, 0.000000 +3124, -3.000000, 152.000000, 138.000000, 0.000000 +3125, -3.000000, 152.000000, 138.000000, 0.000000 +3126, -3.000000, 152.000000, 138.000000, 0.000000 +3127, -3.000000, 152.000000, 138.000000, 0.000000 +3128, -3.000000, 152.000000, 138.000000, 0.000000 +3129, -3.000000, 152.000000, 138.000000, 0.000000 +3130, -3.000000, 152.000000, 138.000000, 0.000000 +3131, -3.000000, 152.000000, 138.000000, 0.000000 +3132, -3.000000, 152.000000, 138.000000, 0.000000 +3133, -3.000000, 152.000000, 138.000000, 0.000000 +3134, -3.000000, 152.000000, 138.000000, 0.000000 +3135, -3.000000, 152.000000, 138.000000, 0.000000 +3136, -3.000000, 152.000000, 138.000000, 0.000000 +3137, -3.000000, 152.000000, 138.000000, 0.000000 +3138, -3.000000, 152.000000, 138.000000, 0.000000 +3139, -3.000000, 152.000000, 138.000000, 0.000000 +3140, -3.000000, 152.000000, 138.000000, 0.000000 +3141, -3.000000, 152.000000, 138.000000, 0.000000 +3142, -3.000000, 152.000000, 138.000000, 0.000000 +3143, -3.000000, 152.000000, 138.000000, 0.000000 +3144, -3.000000, 152.000000, 138.000000, 0.000000 +3145, -3.000000, 152.000000, 138.000000, 0.000000 +3146, -3.000000, 152.000000, 138.000000, 0.000000 +3147, -3.000000, 152.000000, 138.000000, 0.000000 +3148, -3.000000, 152.000000, 138.000000, 0.000000 +3149, -3.000000, 152.000000, 138.000000, 0.000000 +3150, -3.000000, 152.000000, 138.000000, 0.000000 +3151, -3.000000, 152.000000, 138.000000, 0.000000 +3152, -3.000000, 152.000000, 138.000000, 0.000000 +3153, -3.000000, 152.000000, 138.000000, 0.000000 +3154, -3.000000, 152.000000, 138.000000, 0.000000 +3155, -3.000000, 152.000000, 138.000000, 0.000000 +3156, -3.000000, 152.000000, 138.000000, 0.000000 +3157, -3.000000, 152.000000, 138.000000, 0.000000 +3158, -3.000000, 152.000000, 138.000000, 0.000000 +3159, -3.000000, 152.000000, 138.000000, 0.000000 +3160, -3.000000, 152.000000, 138.000000, 0.000000 +3161, -3.000000, 152.000000, 138.000000, 0.000000 +3162, -3.000000, 152.000000, 138.000000, 0.000000 +3163, -3.000000, 152.000000, 138.000000, 0.000000 +3164, -3.000000, 152.000000, 138.000000, 0.000000 +3165, -3.000000, 152.000000, 138.000000, 0.000000 +3166, -3.000000, 152.000000, 138.000000, 0.000000 +3167, -3.000000, 152.000000, 138.000000, 0.000000 +3168, -3.000000, 152.000000, 138.000000, 0.000000 +3169, -3.000000, 152.000000, 138.000000, 0.000000 +3170, -3.000000, 152.000000, 138.000000, 0.000000 +3171, -3.000000, 152.000000, 138.000000, 0.000000 +3172, -3.000000, 152.000000, 138.000000, 0.000000 +3173, -3.000000, 152.000000, 138.000000, 0.000000 +3174, -3.000000, 152.000000, 138.000000, 0.000000 +3175, -3.000000, 152.000000, 138.000000, 0.000000 +3176, -3.000000, 152.000000, 138.000000, 0.000000 +3177, -3.000000, 152.000000, 138.000000, 0.000000 +3178, -3.000000, 152.000000, 138.000000, 0.000000 +3179, -3.000000, 152.000000, 138.000000, 0.000000 +3180, -3.000000, 152.000000, 138.000000, 0.000000 +3181, -3.000000, 152.000000, 138.000000, 0.000000 +3182, -3.000000, 152.000000, 138.000000, 0.000000 +3183, -3.000000, 152.000000, 138.000000, 0.000000 +3184, -3.000000, 152.000000, 138.000000, 0.000000 +3185, -3.000000, 152.000000, 138.000000, 0.000000 +3186, -3.000000, 152.000000, 138.000000, 0.000000 +3187, -3.000000, 152.000000, 138.000000, 0.000000 +3188, -3.000000, 152.000000, 138.000000, 0.000000 +3189, -3.000000, 152.000000, 138.000000, 0.000000 +3190, -3.000000, 152.000000, 138.000000, 0.000000 +3191, -3.000000, 152.000000, 138.000000, 0.000000 +3192, -3.000000, 152.000000, 138.000000, 0.000000 +3193, -3.000000, 152.000000, 138.000000, 0.000000 +3194, -3.000000, 152.000000, 138.000000, 0.000000 +3195, -3.000000, 152.000000, 138.000000, 0.000000 +3196, -3.000000, 152.000000, 138.000000, 0.000000 +3197, -3.000000, 152.000000, 138.000000, 0.000000 +3198, -3.000000, 152.000000, 138.000000, 0.000000 +3199, -3.000000, 152.000000, 138.000000, 0.000000 +3200, -3.000000, 154.000000, 141.000000, 0.000000 +3201, -3.000000, 154.000000, 141.000000, 0.000000 +3202, -3.000000, 154.000000, 141.000000, 0.000000 +3203, -3.000000, 154.000000, 141.000000, 0.000000 +3204, -3.000000, 154.000000, 141.000000, 0.000000 +3205, -3.000000, 154.000000, 141.000000, 0.000000 +3206, -3.000000, 154.000000, 141.000000, 0.000000 +3207, -3.000000, 154.000000, 141.000000, 0.000000 +3208, -3.000000, 154.000000, 141.000000, 0.000000 +3209, -3.000000, 154.000000, 141.000000, 0.000000 +3210, -3.000000, 154.000000, 141.000000, 0.000000 +3211, -3.000000, 154.000000, 141.000000, 0.000000 +3212, -3.000000, 154.000000, 141.000000, 0.000000 +3213, -3.000000, 154.000000, 141.000000, 0.000000 +3214, -3.000000, 154.000000, 141.000000, 0.000000 +3215, -3.000000, 154.000000, 141.000000, 0.000000 +3216, -3.000000, 154.000000, 141.000000, 0.000000 +3217, -3.000000, 154.000000, 141.000000, 0.000000 +3218, -3.000000, 154.000000, 141.000000, 0.000000 +3219, -3.000000, 154.000000, 141.000000, 0.000000 +3220, -3.000000, 154.000000, 141.000000, 0.000000 +3221, -3.000000, 154.000000, 141.000000, 0.000000 +3222, -3.000000, 154.000000, 141.000000, 0.000000 +3223, -3.000000, 154.000000, 141.000000, 0.000000 +3224, -3.000000, 154.000000, 141.000000, 0.000000 +3225, -3.000000, 154.000000, 141.000000, 0.000000 +3226, -3.000000, 154.000000, 141.000000, 0.000000 +3227, -3.000000, 154.000000, 141.000000, 0.000000 +3228, -3.000000, 154.000000, 141.000000, 0.000000 +3229, -3.000000, 154.000000, 141.000000, 0.000000 +3230, -3.000000, 154.000000, 141.000000, 0.000000 +3231, -3.000000, 154.000000, 141.000000, 0.000000 +3232, -3.000000, 154.000000, 141.000000, 0.000000 +3233, -3.000000, 154.000000, 141.000000, 0.000000 +3234, -3.000000, 154.000000, 141.000000, 0.000000 +3235, -3.000000, 154.000000, 141.000000, 0.000000 +3236, -3.000000, 154.000000, 141.000000, 0.000000 +3237, -3.000000, 154.000000, 141.000000, 0.000000 +3238, -3.000000, 154.000000, 141.000000, 0.000000 +3239, -3.000000, 154.000000, 141.000000, 0.000000 +3240, -3.000000, 154.000000, 141.000000, 0.000000 +3241, -3.000000, 154.000000, 141.000000, 0.000000 +3242, -3.000000, 154.000000, 141.000000, 0.000000 +3243, -3.000000, 154.000000, 141.000000, 0.000000 +3244, -3.000000, 154.000000, 141.000000, 0.000000 +3245, -3.000000, 154.000000, 141.000000, 0.000000 +3246, -3.000000, 154.000000, 141.000000, 0.000000 +3247, -3.000000, 154.000000, 141.000000, 0.000000 +3248, -3.000000, 154.000000, 141.000000, 0.000000 +3249, -3.000000, 154.000000, 141.000000, 0.000000 +3250, -3.000000, 154.000000, 141.000000, 0.000000 +3251, -3.000000, 154.000000, 141.000000, 0.000000 +3252, -3.000000, 154.000000, 141.000000, 0.000000 +3253, -3.000000, 154.000000, 141.000000, 0.000000 +3254, -3.000000, 154.000000, 141.000000, 0.000000 +3255, -3.000000, 154.000000, 141.000000, 0.000000 +3256, -3.000000, 154.000000, 141.000000, 0.000000 +3257, -3.000000, 154.000000, 141.000000, 0.000000 +3258, -3.000000, 154.000000, 141.000000, 0.000000 +3259, -3.000000, 154.000000, 141.000000, 0.000000 +3260, -3.000000, 154.000000, 141.000000, 0.000000 +3261, -3.000000, 154.000000, 141.000000, 0.000000 +3262, -3.000000, 154.000000, 141.000000, 0.000000 +3263, -3.000000, 154.000000, 141.000000, 0.000000 +3264, -3.000000, 154.000000, 141.000000, 0.000000 +3265, -3.000000, 154.000000, 141.000000, 0.000000 +3266, -3.000000, 154.000000, 141.000000, 0.000000 +3267, -3.000000, 154.000000, 141.000000, 0.000000 +3268, -3.000000, 154.000000, 141.000000, 0.000000 +3269, -3.000000, 154.000000, 141.000000, 0.000000 +3270, -3.000000, 154.000000, 141.000000, 0.000000 +3271, -3.000000, 154.000000, 141.000000, 0.000000 +3272, -3.000000, 154.000000, 141.000000, 0.000000 +3273, -3.000000, 154.000000, 141.000000, 0.000000 +3274, -3.000000, 154.000000, 141.000000, 0.000000 +3275, -3.000000, 154.000000, 141.000000, 0.000000 +3276, -3.000000, 154.000000, 141.000000, 0.000000 +3277, -3.000000, 154.000000, 141.000000, 0.000000 +3278, -3.000000, 154.000000, 141.000000, 0.000000 +3279, -3.000000, 154.000000, 141.000000, 0.000000 +3280, -3.000000, 154.000000, 141.000000, 0.000000 +3281, -3.000000, 154.000000, 141.000000, 0.000000 +3282, -3.000000, 154.000000, 141.000000, 0.000000 +3283, -3.000000, 154.000000, 141.000000, 0.000000 +3284, -3.000000, 154.000000, 141.000000, 0.000000 +3285, -3.000000, 154.000000, 141.000000, 0.000000 +3286, -3.000000, 154.000000, 141.000000, 0.000000 +3287, -3.000000, 154.000000, 141.000000, 0.000000 +3288, -3.000000, 154.000000, 141.000000, 0.000000 +3289, -3.000000, 154.000000, 141.000000, 0.000000 +3290, -3.000000, 154.000000, 141.000000, 0.000000 +3291, -3.000000, 154.000000, 141.000000, 0.000000 +3292, -3.000000, 154.000000, 141.000000, 0.000000 +3293, -3.000000, 154.000000, 141.000000, 0.000000 +3294, -3.000000, 154.000000, 141.000000, 0.000000 +3295, -3.000000, 154.000000, 141.000000, 0.000000 +3296, -3.000000, 154.000000, 141.000000, 0.000000 +3297, -3.000000, 154.000000, 141.000000, 0.000000 +3298, -3.000000, 154.000000, 141.000000, 0.000000 +3299, -3.000000, 154.000000, 141.000000, 0.000000 +3300, -3.000000, 156.000000, 144.000000, 0.000000 +3301, -3.000000, 156.000000, 144.000000, 0.000000 +3302, -3.000000, 156.000000, 144.000000, 0.000000 +3303, -3.000000, 156.000000, 144.000000, 0.000000 +3304, -3.000000, 156.000000, 144.000000, 0.000000 +3305, -3.000000, 156.000000, 144.000000, 0.000000 +3306, -3.000000, 156.000000, 144.000000, 0.000000 +3307, -3.000000, 156.000000, 144.000000, 0.000000 +3308, -3.000000, 156.000000, 144.000000, 0.000000 +3309, -3.000000, 156.000000, 144.000000, 0.000000 +3310, -3.000000, 156.000000, 144.000000, 0.000000 +3311, -3.000000, 156.000000, 144.000000, 0.000000 +3312, -3.000000, 156.000000, 144.000000, 0.000000 +3313, -3.000000, 156.000000, 144.000000, 0.000000 +3314, -3.000000, 156.000000, 144.000000, 0.000000 +3315, -3.000000, 156.000000, 144.000000, 0.000000 +3316, -3.000000, 156.000000, 144.000000, 0.000000 +3317, -3.000000, 156.000000, 144.000000, 0.000000 +3318, -3.000000, 156.000000, 144.000000, 0.000000 +3319, -3.000000, 156.000000, 144.000000, 0.000000 +3320, -3.000000, 156.000000, 144.000000, 0.000000 +3321, -3.000000, 156.000000, 144.000000, 0.000000 +3322, -3.000000, 156.000000, 144.000000, 0.000000 +3323, -3.000000, 156.000000, 144.000000, 0.000000 +3324, -3.000000, 156.000000, 144.000000, 0.000000 +3325, -3.000000, 156.000000, 144.000000, 0.000000 +3326, -3.000000, 156.000000, 144.000000, 0.000000 +3327, -3.000000, 156.000000, 144.000000, 0.000000 +3328, -3.000000, 156.000000, 144.000000, 0.000000 +3329, -3.000000, 156.000000, 144.000000, 0.000000 +3330, -3.000000, 156.000000, 144.000000, 0.000000 +3331, -3.000000, 156.000000, 144.000000, 0.000000 +3332, -3.000000, 156.000000, 144.000000, 0.000000 +3333, -3.000000, 156.000000, 144.000000, 0.000000 +3334, -3.000000, 156.000000, 144.000000, 0.000000 +3335, -3.000000, 156.000000, 144.000000, 0.000000 +3336, -3.000000, 156.000000, 144.000000, 0.000000 +3337, -3.000000, 156.000000, 144.000000, 0.000000 +3338, -3.000000, 156.000000, 144.000000, 0.000000 +3339, -3.000000, 156.000000, 144.000000, 0.000000 +3340, -3.000000, 156.000000, 144.000000, 0.000000 +3341, -3.000000, 156.000000, 144.000000, 0.000000 +3342, -3.000000, 156.000000, 144.000000, 0.000000 +3343, -3.000000, 156.000000, 144.000000, 0.000000 +3344, -3.000000, 156.000000, 144.000000, 0.000000 +3345, -3.000000, 156.000000, 144.000000, 0.000000 +3346, -3.000000, 156.000000, 144.000000, 0.000000 +3347, -3.000000, 156.000000, 144.000000, 0.000000 +3348, -3.000000, 156.000000, 144.000000, 0.000000 +3349, -3.000000, 156.000000, 144.000000, 0.000000 +3350, -3.000000, 156.000000, 144.000000, 0.000000 +3351, -3.000000, 156.000000, 144.000000, 0.000000 +3352, -3.000000, 156.000000, 144.000000, 0.000000 +3353, -3.000000, 156.000000, 144.000000, 0.000000 +3354, -3.000000, 156.000000, 144.000000, 0.000000 +3355, -3.000000, 156.000000, 144.000000, 0.000000 +3356, -3.000000, 156.000000, 144.000000, 0.000000 +3357, -3.000000, 156.000000, 144.000000, 0.000000 +3358, -3.000000, 156.000000, 144.000000, 0.000000 +3359, -3.000000, 156.000000, 144.000000, 0.000000 +3360, -3.000000, 156.000000, 144.000000, 0.000000 +3361, -3.000000, 156.000000, 144.000000, 0.000000 +3362, -3.000000, 156.000000, 144.000000, 0.000000 +3363, -3.000000, 156.000000, 144.000000, 0.000000 +3364, -3.000000, 156.000000, 144.000000, 0.000000 +3365, -3.000000, 156.000000, 144.000000, 0.000000 +3366, -3.000000, 156.000000, 144.000000, 0.000000 +3367, -3.000000, 156.000000, 144.000000, 0.000000 +3368, -3.000000, 156.000000, 144.000000, 0.000000 +3369, -3.000000, 156.000000, 144.000000, 0.000000 +3370, -3.000000, 156.000000, 144.000000, 0.000000 +3371, -3.000000, 156.000000, 144.000000, 0.000000 +3372, -3.000000, 156.000000, 144.000000, 0.000000 +3373, -3.000000, 156.000000, 144.000000, 0.000000 +3374, -3.000000, 156.000000, 144.000000, 0.000000 +3375, -3.000000, 156.000000, 144.000000, 0.000000 +3376, -3.000000, 156.000000, 144.000000, 0.000000 +3377, -3.000000, 156.000000, 144.000000, 0.000000 +3378, -3.000000, 156.000000, 144.000000, 0.000000 +3379, -3.000000, 156.000000, 144.000000, 0.000000 +3380, -3.000000, 156.000000, 144.000000, 0.000000 +3381, -3.000000, 156.000000, 144.000000, 0.000000 +3382, -3.000000, 156.000000, 144.000000, 0.000000 +3383, -3.000000, 156.000000, 144.000000, 0.000000 +3384, -3.000000, 156.000000, 144.000000, 0.000000 +3385, -3.000000, 156.000000, 144.000000, 0.000000 +3386, -3.000000, 156.000000, 144.000000, 0.000000 +3387, -3.000000, 156.000000, 144.000000, 0.000000 +3388, -3.000000, 156.000000, 144.000000, 0.000000 +3389, -3.000000, 156.000000, 144.000000, 0.000000 +3390, -3.000000, 156.000000, 144.000000, 0.000000 +3391, -3.000000, 156.000000, 144.000000, 0.000000 +3392, -3.000000, 156.000000, 144.000000, 0.000000 +3393, -3.000000, 156.000000, 144.000000, 0.000000 +3394, -3.000000, 156.000000, 144.000000, 0.000000 +3395, -3.000000, 156.000000, 144.000000, 0.000000 +3396, -3.000000, 156.000000, 144.000000, 0.000000 +3397, -3.000000, 156.000000, 144.000000, 0.000000 +3398, -3.000000, 156.000000, 144.000000, 0.000000 +3399, -3.000000, 156.000000, 144.000000, 0.000000 +3400, -3.000000, 158.000000, 147.000000, 0.000000 +3401, -3.000000, 158.000000, 147.000000, 0.000000 +3402, -3.000000, 158.000000, 147.000000, 0.000000 +3403, -3.000000, 158.000000, 147.000000, 0.000000 +3404, -3.000000, 158.000000, 147.000000, 0.000000 +3405, -3.000000, 158.000000, 147.000000, 0.000000 +3406, -3.000000, 158.000000, 147.000000, 0.000000 +3407, -3.000000, 158.000000, 147.000000, 0.000000 +3408, -3.000000, 158.000000, 147.000000, 0.000000 +3409, -3.000000, 158.000000, 147.000000, 0.000000 +3410, -3.000000, 158.000000, 147.000000, 0.000000 +3411, -3.000000, 158.000000, 147.000000, 0.000000 +3412, -3.000000, 158.000000, 147.000000, 0.000000 +3413, -3.000000, 158.000000, 147.000000, 0.000000 +3414, -3.000000, 158.000000, 147.000000, 0.000000 +3415, -3.000000, 158.000000, 147.000000, 0.000000 +3416, -3.000000, 158.000000, 147.000000, 0.000000 +3417, -3.000000, 158.000000, 147.000000, 0.000000 +3418, -3.000000, 158.000000, 147.000000, 0.000000 +3419, -3.000000, 158.000000, 147.000000, 0.000000 +3420, -3.000000, 158.000000, 147.000000, 0.000000 +3421, -3.000000, 158.000000, 147.000000, 0.000000 +3422, -3.000000, 158.000000, 147.000000, 0.000000 +3423, -3.000000, 158.000000, 147.000000, 0.000000 +3424, -3.000000, 158.000000, 147.000000, 0.000000 +3425, -3.000000, 158.000000, 147.000000, 0.000000 +3426, -3.000000, 158.000000, 147.000000, 0.000000 +3427, -3.000000, 158.000000, 147.000000, 0.000000 +3428, -3.000000, 158.000000, 147.000000, 0.000000 +3429, -3.000000, 158.000000, 147.000000, 0.000000 +3430, -3.000000, 158.000000, 147.000000, 0.000000 +3431, -3.000000, 158.000000, 147.000000, 0.000000 +3432, -3.000000, 158.000000, 147.000000, 0.000000 +3433, -3.000000, 158.000000, 147.000000, 0.000000 +3434, -3.000000, 158.000000, 147.000000, 0.000000 +3435, -3.000000, 158.000000, 147.000000, 0.000000 +3436, -3.000000, 158.000000, 147.000000, 0.000000 +3437, -3.000000, 158.000000, 147.000000, 0.000000 +3438, -3.000000, 158.000000, 147.000000, 0.000000 +3439, -3.000000, 158.000000, 147.000000, 0.000000 +3440, -3.000000, 158.000000, 147.000000, 0.000000 +3441, -3.000000, 158.000000, 147.000000, 0.000000 +3442, -3.000000, 158.000000, 147.000000, 0.000000 +3443, -3.000000, 158.000000, 147.000000, 0.000000 +3444, -3.000000, 158.000000, 147.000000, 0.000000 +3445, -3.000000, 158.000000, 147.000000, 0.000000 +3446, -3.000000, 158.000000, 147.000000, 0.000000 +3447, -3.000000, 158.000000, 147.000000, 0.000000 +3448, -3.000000, 158.000000, 147.000000, 0.000000 +3449, -3.000000, 158.000000, 147.000000, 0.000000 +3450, -3.000000, 158.000000, 147.000000, 0.000000 +3451, -3.000000, 158.000000, 147.000000, 0.000000 +3452, -3.000000, 158.000000, 147.000000, 0.000000 +3453, -3.000000, 158.000000, 147.000000, 0.000000 +3454, -3.000000, 158.000000, 147.000000, 0.000000 +3455, -3.000000, 158.000000, 147.000000, 0.000000 +3456, -3.000000, 158.000000, 147.000000, 0.000000 +3457, -3.000000, 158.000000, 147.000000, 0.000000 +3458, -3.000000, 158.000000, 147.000000, 0.000000 +3459, -3.000000, 158.000000, 147.000000, 0.000000 +3460, -3.000000, 158.000000, 147.000000, 0.000000 +3461, -3.000000, 158.000000, 147.000000, 0.000000 +3462, -3.000000, 158.000000, 147.000000, 0.000000 +3463, -3.000000, 158.000000, 147.000000, 0.000000 +3464, -3.000000, 158.000000, 147.000000, 0.000000 +3465, -3.000000, 158.000000, 147.000000, 0.000000 +3466, -3.000000, 158.000000, 147.000000, 0.000000 +3467, -3.000000, 158.000000, 147.000000, 0.000000 +3468, -3.000000, 158.000000, 147.000000, 0.000000 +3469, -3.000000, 158.000000, 147.000000, 0.000000 +3470, -3.000000, 158.000000, 147.000000, 0.000000 +3471, -3.000000, 158.000000, 147.000000, 0.000000 +3472, -3.000000, 158.000000, 147.000000, 0.000000 +3473, -3.000000, 158.000000, 147.000000, 0.000000 +3474, -3.000000, 158.000000, 147.000000, 0.000000 +3475, -3.000000, 158.000000, 147.000000, 0.000000 +3476, -3.000000, 158.000000, 147.000000, 0.000000 +3477, -3.000000, 158.000000, 147.000000, 0.000000 +3478, -3.000000, 158.000000, 147.000000, 0.000000 +3479, -3.000000, 158.000000, 147.000000, 0.000000 +3480, -3.000000, 158.000000, 147.000000, 0.000000 +3481, -3.000000, 158.000000, 147.000000, 0.000000 +3482, -3.000000, 158.000000, 147.000000, 0.000000 +3483, -3.000000, 158.000000, 147.000000, 0.000000 +3484, -3.000000, 158.000000, 147.000000, 0.000000 +3485, -3.000000, 158.000000, 147.000000, 0.000000 +3486, -3.000000, 158.000000, 147.000000, 0.000000 +3487, -3.000000, 158.000000, 147.000000, 0.000000 +3488, -3.000000, 158.000000, 147.000000, 0.000000 +3489, -3.000000, 158.000000, 147.000000, 0.000000 +3490, -3.000000, 158.000000, 147.000000, 0.000000 +3491, -3.000000, 158.000000, 147.000000, 0.000000 +3492, -3.000000, 158.000000, 147.000000, 0.000000 +3493, -3.000000, 158.000000, 147.000000, 0.000000 +3494, -3.000000, 158.000000, 147.000000, 0.000000 +3495, -3.000000, 158.000000, 147.000000, 0.000000 +3496, -3.000000, 158.000000, 147.000000, 0.000000 +3497, -3.000000, 158.000000, 147.000000, 0.000000 +3498, -3.000000, 158.000000, 147.000000, 0.000000 +3499, -3.000000, 158.000000, 147.000000, 0.000000 +3500, -3.000000, 160.000000, 150.000000, 0.000000 +3501, -3.000000, 160.000000, 150.000000, 0.000000 +3502, -3.000000, 160.000000, 150.000000, 0.000000 +3503, -3.000000, 160.000000, 150.000000, 0.000000 +3504, -3.000000, 160.000000, 150.000000, 0.000000 +3505, -3.000000, 160.000000, 150.000000, 0.000000 +3506, -3.000000, 160.000000, 150.000000, 0.000000 +3507, -3.000000, 160.000000, 150.000000, 0.000000 +3508, -3.000000, 160.000000, 150.000000, 0.000000 +3509, -3.000000, 160.000000, 150.000000, 0.000000 +3510, -3.000000, 160.000000, 150.000000, 0.000000 +3511, -3.000000, 160.000000, 150.000000, 0.000000 +3512, -3.000000, 160.000000, 150.000000, 0.000000 +3513, -3.000000, 160.000000, 150.000000, 0.000000 +3514, -3.000000, 160.000000, 150.000000, 0.000000 +3515, -3.000000, 160.000000, 150.000000, 0.000000 +3516, -3.000000, 160.000000, 150.000000, 0.000000 +3517, -3.000000, 160.000000, 150.000000, 0.000000 +3518, -3.000000, 160.000000, 150.000000, 0.000000 +3519, -3.000000, 160.000000, 150.000000, 0.000000 +3520, -3.000000, 160.000000, 150.000000, 0.000000 +3521, -3.000000, 160.000000, 150.000000, 0.000000 +3522, -3.000000, 160.000000, 150.000000, 0.000000 +3523, -3.000000, 160.000000, 150.000000, 0.000000 +3524, -3.000000, 160.000000, 150.000000, 0.000000 +3525, -3.000000, 160.000000, 150.000000, 0.000000 +3526, -3.000000, 160.000000, 150.000000, 0.000000 +3527, -3.000000, 160.000000, 150.000000, 0.000000 +3528, -3.000000, 160.000000, 150.000000, 0.000000 +3529, -3.000000, 160.000000, 150.000000, 0.000000 +3530, -3.000000, 160.000000, 150.000000, 0.000000 +3531, -3.000000, 160.000000, 150.000000, 0.000000 +3532, -3.000000, 160.000000, 150.000000, 0.000000 +3533, -3.000000, 160.000000, 150.000000, 0.000000 +3534, -3.000000, 160.000000, 150.000000, 0.000000 +3535, -3.000000, 160.000000, 150.000000, 0.000000 +3536, -3.000000, 160.000000, 150.000000, 0.000000 +3537, -3.000000, 160.000000, 150.000000, 0.000000 +3538, -3.000000, 160.000000, 150.000000, 0.000000 +3539, -3.000000, 160.000000, 150.000000, 0.000000 +3540, -3.000000, 160.000000, 150.000000, 0.000000 +3541, -3.000000, 160.000000, 150.000000, 0.000000 +3542, -3.000000, 160.000000, 150.000000, 0.000000 +3543, -3.000000, 160.000000, 150.000000, 0.000000 +3544, -3.000000, 160.000000, 150.000000, 0.000000 +3545, -3.000000, 160.000000, 150.000000, 0.000000 +3546, -3.000000, 160.000000, 150.000000, 0.000000 +3547, -3.000000, 160.000000, 150.000000, 0.000000 +3548, -3.000000, 160.000000, 150.000000, 0.000000 +3549, -3.000000, 160.000000, 150.000000, 0.000000 +3550, -3.000000, 160.000000, 150.000000, 0.000000 +3551, -3.000000, 160.000000, 150.000000, 0.000000 +3552, -3.000000, 160.000000, 150.000000, 0.000000 +3553, -3.000000, 160.000000, 150.000000, 0.000000 +3554, -3.000000, 160.000000, 150.000000, 0.000000 +3555, -3.000000, 160.000000, 150.000000, 0.000000 +3556, -3.000000, 160.000000, 150.000000, 0.000000 +3557, -3.000000, 160.000000, 150.000000, 0.000000 +3558, -3.000000, 160.000000, 150.000000, 0.000000 +3559, -3.000000, 160.000000, 150.000000, 0.000000 +3560, -3.000000, 160.000000, 150.000000, 0.000000 +3561, -3.000000, 160.000000, 150.000000, 0.000000 +3562, -3.000000, 160.000000, 150.000000, 0.000000 +3563, -3.000000, 160.000000, 150.000000, 0.000000 +3564, -3.000000, 160.000000, 150.000000, 0.000000 +3565, -3.000000, 160.000000, 150.000000, 0.000000 +3566, -3.000000, 160.000000, 150.000000, 0.000000 +3567, -3.000000, 160.000000, 150.000000, 0.000000 +3568, -3.000000, 160.000000, 150.000000, 0.000000 +3569, -3.000000, 160.000000, 150.000000, 0.000000 +3570, -3.000000, 160.000000, 150.000000, 0.000000 +3571, -3.000000, 160.000000, 150.000000, 0.000000 +3572, -3.000000, 160.000000, 150.000000, 0.000000 +3573, -3.000000, 160.000000, 150.000000, 0.000000 +3574, -3.000000, 160.000000, 150.000000, 0.000000 +3575, -3.000000, 160.000000, 150.000000, 0.000000 +3576, -3.000000, 160.000000, 150.000000, 0.000000 +3577, -3.000000, 160.000000, 150.000000, 0.000000 +3578, -3.000000, 160.000000, 150.000000, 0.000000 +3579, -3.000000, 160.000000, 150.000000, 0.000000 +3580, -3.000000, 160.000000, 150.000000, 0.000000 +3581, -3.000000, 160.000000, 150.000000, 0.000000 +3582, -3.000000, 160.000000, 150.000000, 0.000000 +3583, -3.000000, 160.000000, 150.000000, 0.000000 +3584, -3.000000, 160.000000, 150.000000, 0.000000 +3585, -3.000000, 160.000000, 150.000000, 0.000000 +3586, -3.000000, 160.000000, 150.000000, 0.000000 +3587, -3.000000, 160.000000, 150.000000, 0.000000 +3588, -3.000000, 160.000000, 150.000000, 0.000000 +3589, -3.000000, 160.000000, 150.000000, 0.000000 +3590, -3.000000, 160.000000, 150.000000, 0.000000 +3591, -3.000000, 160.000000, 150.000000, 0.000000 +3592, -3.000000, 160.000000, 150.000000, 0.000000 +3593, -3.000000, 160.000000, 150.000000, 0.000000 +3594, -3.000000, 160.000000, 150.000000, 0.000000 +3595, -3.000000, 160.000000, 150.000000, 0.000000 +3596, -3.000000, 160.000000, 150.000000, 0.000000 +3597, -3.000000, 160.000000, 150.000000, 0.000000 +3598, -3.000000, 160.000000, 150.000000, 0.000000 +3599, -3.000000, 160.000000, 150.000000, 0.000000 +3600, -3.000000, 162.000000, 153.000000, 0.000000 +3601, -3.000000, 162.000000, 153.000000, 0.000000 +3602, -3.000000, 162.000000, 153.000000, 0.000000 +3603, -3.000000, 162.000000, 153.000000, 0.000000 +3604, -3.000000, 162.000000, 153.000000, 0.000000 +3605, -3.000000, 162.000000, 153.000000, 0.000000 +3606, -3.000000, 162.000000, 153.000000, 0.000000 +3607, -3.000000, 162.000000, 153.000000, 0.000000 +3608, -3.000000, 162.000000, 153.000000, 0.000000 +3609, -3.000000, 162.000000, 153.000000, 0.000000 +3610, -3.000000, 162.000000, 153.000000, 0.000000 +3611, -3.000000, 162.000000, 153.000000, 0.000000 +3612, -3.000000, 162.000000, 153.000000, 0.000000 +3613, -3.000000, 162.000000, 153.000000, 0.000000 +3614, -3.000000, 162.000000, 153.000000, 0.000000 +3615, -3.000000, 162.000000, 153.000000, 0.000000 +3616, -3.000000, 162.000000, 153.000000, 0.000000 +3617, -3.000000, 162.000000, 153.000000, 0.000000 +3618, -3.000000, 162.000000, 153.000000, 0.000000 +3619, -3.000000, 162.000000, 153.000000, 0.000000 +3620, -3.000000, 162.000000, 153.000000, 0.000000 +3621, -3.000000, 162.000000, 153.000000, 0.000000 +3622, -3.000000, 162.000000, 153.000000, 0.000000 +3623, -3.000000, 162.000000, 153.000000, 0.000000 +3624, -3.000000, 162.000000, 153.000000, 0.000000 +3625, -3.000000, 162.000000, 153.000000, 0.000000 +3626, -3.000000, 162.000000, 153.000000, 0.000000 +3627, -3.000000, 162.000000, 153.000000, 0.000000 +3628, -3.000000, 162.000000, 153.000000, 0.000000 +3629, -3.000000, 162.000000, 153.000000, 0.000000 +3630, -3.000000, 162.000000, 153.000000, 0.000000 +3631, -3.000000, 162.000000, 153.000000, 0.000000 +3632, -3.000000, 162.000000, 153.000000, 0.000000 +3633, -3.000000, 162.000000, 153.000000, 0.000000 +3634, -3.000000, 162.000000, 153.000000, 0.000000 +3635, -3.000000, 162.000000, 153.000000, 0.000000 +3636, -3.000000, 162.000000, 153.000000, 0.000000 +3637, -3.000000, 162.000000, 153.000000, 0.000000 +3638, -3.000000, 162.000000, 153.000000, 0.000000 +3639, -3.000000, 162.000000, 153.000000, 0.000000 +3640, -3.000000, 162.000000, 153.000000, 0.000000 +3641, -3.000000, 162.000000, 153.000000, 0.000000 +3642, -3.000000, 162.000000, 153.000000, 0.000000 +3643, -3.000000, 162.000000, 153.000000, 0.000000 +3644, -3.000000, 162.000000, 153.000000, 0.000000 +3645, -3.000000, 162.000000, 153.000000, 0.000000 +3646, -3.000000, 162.000000, 153.000000, 0.000000 +3647, -3.000000, 162.000000, 153.000000, 0.000000 +3648, -3.000000, 162.000000, 153.000000, 0.000000 +3649, -3.000000, 162.000000, 153.000000, 0.000000 +3650, -3.000000, 162.000000, 153.000000, 0.000000 +3651, -3.000000, 162.000000, 153.000000, 0.000000 +3652, -3.000000, 162.000000, 153.000000, 0.000000 +3653, -3.000000, 162.000000, 153.000000, 0.000000 +3654, -3.000000, 162.000000, 153.000000, 0.000000 +3655, -3.000000, 162.000000, 153.000000, 0.000000 +3656, -3.000000, 162.000000, 153.000000, 0.000000 +3657, -3.000000, 162.000000, 153.000000, 0.000000 +3658, -3.000000, 162.000000, 153.000000, 0.000000 +3659, -3.000000, 162.000000, 153.000000, 0.000000 +3660, -3.000000, 162.000000, 153.000000, 0.000000 +3661, -3.000000, 162.000000, 153.000000, 0.000000 +3662, -3.000000, 162.000000, 153.000000, 0.000000 +3663, -3.000000, 162.000000, 153.000000, 0.000000 +3664, -3.000000, 162.000000, 153.000000, 0.000000 +3665, -3.000000, 162.000000, 153.000000, 0.000000 +3666, -3.000000, 162.000000, 153.000000, 0.000000 +3667, -3.000000, 162.000000, 153.000000, 0.000000 +3668, -3.000000, 162.000000, 153.000000, 0.000000 +3669, -3.000000, 162.000000, 153.000000, 0.000000 +3670, -3.000000, 162.000000, 153.000000, 0.000000 +3671, -3.000000, 162.000000, 153.000000, 0.000000 +3672, -3.000000, 162.000000, 153.000000, 0.000000 +3673, -3.000000, 162.000000, 153.000000, 0.000000 +3674, -3.000000, 162.000000, 153.000000, 0.000000 +3675, -3.000000, 162.000000, 153.000000, 0.000000 +3676, -3.000000, 162.000000, 153.000000, 0.000000 +3677, -3.000000, 162.000000, 153.000000, 0.000000 +3678, -3.000000, 162.000000, 153.000000, 0.000000 +3679, -3.000000, 162.000000, 153.000000, 0.000000 +3680, -3.000000, 162.000000, 153.000000, 0.000000 +3681, -3.000000, 162.000000, 153.000000, 0.000000 +3682, -3.000000, 162.000000, 153.000000, 0.000000 +3683, -3.000000, 162.000000, 153.000000, 0.000000 +3684, -3.000000, 162.000000, 153.000000, 0.000000 +3685, -3.000000, 162.000000, 153.000000, 0.000000 +3686, -3.000000, 162.000000, 153.000000, 0.000000 +3687, -3.000000, 162.000000, 153.000000, 0.000000 +3688, -3.000000, 162.000000, 153.000000, 0.000000 +3689, -3.000000, 162.000000, 153.000000, 0.000000 +3690, -3.000000, 162.000000, 153.000000, 0.000000 +3691, -3.000000, 162.000000, 153.000000, 0.000000 +3692, -3.000000, 162.000000, 153.000000, 0.000000 +3693, -3.000000, 162.000000, 153.000000, 0.000000 +3694, -3.000000, 162.000000, 153.000000, 0.000000 +3695, -3.000000, 162.000000, 153.000000, 0.000000 +3696, -3.000000, 162.000000, 153.000000, 0.000000 +3697, -3.000000, 162.000000, 153.000000, 0.000000 +3698, -3.000000, 162.000000, 153.000000, 0.000000 +3699, -3.000000, 162.000000, 153.000000, 0.000000 +3700, -3.000000, 164.000000, 156.000000, 0.000000 +3701, -3.000000, 164.000000, 156.000000, 0.000000 +3702, -3.000000, 164.000000, 156.000000, 0.000000 +3703, -3.000000, 164.000000, 156.000000, 0.000000 +3704, -3.000000, 164.000000, 156.000000, 0.000000 +3705, -3.000000, 164.000000, 156.000000, 0.000000 +3706, -3.000000, 164.000000, 156.000000, 0.000000 +3707, -3.000000, 164.000000, 156.000000, 0.000000 +3708, -3.000000, 164.000000, 156.000000, 0.000000 +3709, -3.000000, 164.000000, 156.000000, 0.000000 +3710, -3.000000, 164.000000, 156.000000, 0.000000 +3711, -3.000000, 164.000000, 156.000000, 0.000000 +3712, -3.000000, 164.000000, 156.000000, 0.000000 +3713, -3.000000, 164.000000, 156.000000, 0.000000 +3714, -3.000000, 164.000000, 156.000000, 0.000000 +3715, -3.000000, 164.000000, 156.000000, 0.000000 +3716, -3.000000, 164.000000, 156.000000, 0.000000 +3717, -3.000000, 164.000000, 156.000000, 0.000000 +3718, -3.000000, 164.000000, 156.000000, 0.000000 +3719, -3.000000, 164.000000, 156.000000, 0.000000 +3720, -3.000000, 164.000000, 156.000000, 0.000000 +3721, -3.000000, 164.000000, 156.000000, 0.000000 +3722, -3.000000, 164.000000, 156.000000, 0.000000 +3723, -3.000000, 164.000000, 156.000000, 0.000000 +3724, -3.000000, 164.000000, 156.000000, 0.000000 +3725, -3.000000, 164.000000, 156.000000, 0.000000 +3726, -3.000000, 164.000000, 156.000000, 0.000000 +3727, -3.000000, 164.000000, 156.000000, 0.000000 +3728, -3.000000, 164.000000, 156.000000, 0.000000 +3729, -3.000000, 164.000000, 156.000000, 0.000000 +3730, -3.000000, 164.000000, 156.000000, 0.000000 +3731, -3.000000, 164.000000, 156.000000, 0.000000 +3732, -3.000000, 164.000000, 156.000000, 0.000000 +3733, -3.000000, 164.000000, 156.000000, 0.000000 +3734, -3.000000, 164.000000, 156.000000, 0.000000 +3735, -3.000000, 164.000000, 156.000000, 0.000000 +3736, -3.000000, 164.000000, 156.000000, 0.000000 +3737, -3.000000, 164.000000, 156.000000, 0.000000 +3738, -3.000000, 164.000000, 156.000000, 0.000000 +3739, -3.000000, 164.000000, 156.000000, 0.000000 +3740, -3.000000, 164.000000, 156.000000, 0.000000 +3741, -3.000000, 164.000000, 156.000000, 0.000000 +3742, -3.000000, 164.000000, 156.000000, 0.000000 +3743, -3.000000, 164.000000, 156.000000, 0.000000 +3744, -3.000000, 164.000000, 156.000000, 0.000000 +3745, -3.000000, 164.000000, 156.000000, 0.000000 +3746, -3.000000, 164.000000, 156.000000, 0.000000 +3747, -3.000000, 164.000000, 156.000000, 0.000000 +3748, -3.000000, 164.000000, 156.000000, 0.000000 +3749, -3.000000, 164.000000, 156.000000, 0.000000 +3750, -3.000000, 164.000000, 156.000000, 0.000000 +3751, -3.000000, 164.000000, 156.000000, 0.000000 +3752, -3.000000, 164.000000, 156.000000, 0.000000 +3753, -3.000000, 164.000000, 156.000000, 0.000000 +3754, -3.000000, 164.000000, 156.000000, 0.000000 +3755, -3.000000, 164.000000, 156.000000, 0.000000 +3756, -3.000000, 164.000000, 156.000000, 0.000000 +3757, -3.000000, 164.000000, 156.000000, 0.000000 +3758, -3.000000, 164.000000, 156.000000, 0.000000 +3759, -3.000000, 164.000000, 156.000000, 0.000000 +3760, -3.000000, 164.000000, 156.000000, 0.000000 +3761, -3.000000, 164.000000, 156.000000, 0.000000 +3762, -3.000000, 164.000000, 156.000000, 0.000000 +3763, -3.000000, 164.000000, 156.000000, 0.000000 +3764, -3.000000, 164.000000, 156.000000, 0.000000 +3765, -3.000000, 164.000000, 156.000000, 0.000000 +3766, -3.000000, 164.000000, 156.000000, 0.000000 +3767, -3.000000, 164.000000, 156.000000, 0.000000 +3768, -3.000000, 164.000000, 156.000000, 0.000000 +3769, -3.000000, 164.000000, 156.000000, 0.000000 +3770, -3.000000, 164.000000, 156.000000, 0.000000 +3771, -3.000000, 164.000000, 156.000000, 0.000000 +3772, -3.000000, 164.000000, 156.000000, 0.000000 +3773, -3.000000, 164.000000, 156.000000, 0.000000 +3774, -3.000000, 164.000000, 156.000000, 0.000000 +3775, -3.000000, 164.000000, 156.000000, 0.000000 +3776, -3.000000, 164.000000, 156.000000, 0.000000 +3777, -3.000000, 164.000000, 156.000000, 0.000000 +3778, -3.000000, 164.000000, 156.000000, 0.000000 +3779, -3.000000, 164.000000, 156.000000, 0.000000 +3780, -3.000000, 164.000000, 156.000000, 0.000000 +3781, -3.000000, 164.000000, 156.000000, 0.000000 +3782, -3.000000, 164.000000, 156.000000, 0.000000 +3783, -3.000000, 164.000000, 156.000000, 0.000000 +3784, -3.000000, 164.000000, 156.000000, 0.000000 +3785, -3.000000, 164.000000, 156.000000, 0.000000 +3786, -3.000000, 164.000000, 156.000000, 0.000000 +3787, -3.000000, 164.000000, 156.000000, 0.000000 +3788, -3.000000, 164.000000, 156.000000, 0.000000 +3789, -3.000000, 164.000000, 156.000000, 0.000000 +3790, -3.000000, 164.000000, 156.000000, 0.000000 +3791, -3.000000, 164.000000, 156.000000, 0.000000 +3792, -3.000000, 164.000000, 156.000000, 0.000000 +3793, -3.000000, 164.000000, 156.000000, 0.000000 +3794, -3.000000, 164.000000, 156.000000, 0.000000 +3795, -3.000000, 164.000000, 156.000000, 0.000000 +3796, -3.000000, 164.000000, 156.000000, 0.000000 +3797, -3.000000, 164.000000, 156.000000, 0.000000 +3798, -3.000000, 164.000000, 156.000000, 0.000000 +3799, -3.000000, 164.000000, 156.000000, 0.000000 +3800, -3.000000, 166.000000, 159.000000, 0.000000 +3801, -3.000000, 166.000000, 159.000000, 0.000000 +3802, -3.000000, 166.000000, 159.000000, 0.000000 +3803, -3.000000, 166.000000, 159.000000, 0.000000 +3804, -3.000000, 166.000000, 159.000000, 0.000000 +3805, -3.000000, 166.000000, 159.000000, 0.000000 +3806, -3.000000, 166.000000, 159.000000, 0.000000 +3807, -3.000000, 166.000000, 159.000000, 0.000000 +3808, -3.000000, 166.000000, 159.000000, 0.000000 +3809, -3.000000, 166.000000, 159.000000, 0.000000 +3810, -3.000000, 166.000000, 159.000000, 0.000000 +3811, -3.000000, 166.000000, 159.000000, 0.000000 +3812, -3.000000, 166.000000, 159.000000, 0.000000 +3813, -3.000000, 166.000000, 159.000000, 0.000000 +3814, -3.000000, 166.000000, 159.000000, 0.000000 +3815, -3.000000, 166.000000, 159.000000, 0.000000 +3816, -3.000000, 166.000000, 159.000000, 0.000000 +3817, -3.000000, 166.000000, 159.000000, 0.000000 +3818, -3.000000, 166.000000, 159.000000, 0.000000 +3819, -3.000000, 166.000000, 159.000000, 0.000000 +3820, -3.000000, 166.000000, 159.000000, 0.000000 +3821, -3.000000, 166.000000, 159.000000, 0.000000 +3822, -3.000000, 166.000000, 159.000000, 0.000000 +3823, -3.000000, 166.000000, 159.000000, 0.000000 +3824, -3.000000, 166.000000, 159.000000, 0.000000 +3825, -3.000000, 166.000000, 159.000000, 0.000000 +3826, -3.000000, 166.000000, 159.000000, 0.000000 +3827, -3.000000, 166.000000, 159.000000, 0.000000 +3828, -3.000000, 166.000000, 159.000000, 0.000000 +3829, -3.000000, 166.000000, 159.000000, 0.000000 +3830, -3.000000, 166.000000, 159.000000, 0.000000 +3831, -3.000000, 166.000000, 159.000000, 0.000000 +3832, -3.000000, 166.000000, 159.000000, 0.000000 +3833, -3.000000, 166.000000, 159.000000, 0.000000 +3834, -3.000000, 166.000000, 159.000000, 0.000000 +3835, -3.000000, 166.000000, 159.000000, 0.000000 +3836, -3.000000, 166.000000, 159.000000, 0.000000 +3837, -3.000000, 166.000000, 159.000000, 0.000000 +3838, -3.000000, 166.000000, 159.000000, 0.000000 +3839, -3.000000, 166.000000, 159.000000, 0.000000 +3840, -3.000000, 166.000000, 159.000000, 0.000000 +3841, -3.000000, 166.000000, 159.000000, 0.000000 +3842, -3.000000, 166.000000, 159.000000, 0.000000 +3843, -3.000000, 166.000000, 159.000000, 0.000000 +3844, -3.000000, 166.000000, 159.000000, 0.000000 +3845, -3.000000, 166.000000, 159.000000, 0.000000 +3846, -3.000000, 166.000000, 159.000000, 0.000000 +3847, -3.000000, 166.000000, 159.000000, 0.000000 +3848, -3.000000, 166.000000, 159.000000, 0.000000 +3849, -3.000000, 166.000000, 159.000000, 0.000000 +3850, -3.000000, 166.000000, 159.000000, 0.000000 +3851, -3.000000, 166.000000, 159.000000, 0.000000 +3852, -3.000000, 166.000000, 159.000000, 0.000000 +3853, -3.000000, 166.000000, 159.000000, 0.000000 +3854, -3.000000, 166.000000, 159.000000, 0.000000 +3855, -3.000000, 166.000000, 159.000000, 0.000000 +3856, -3.000000, 166.000000, 159.000000, 0.000000 +3857, -3.000000, 166.000000, 159.000000, 0.000000 +3858, -3.000000, 166.000000, 159.000000, 0.000000 +3859, -3.000000, 166.000000, 159.000000, 0.000000 +3860, -3.000000, 166.000000, 159.000000, 0.000000 +3861, -3.000000, 166.000000, 159.000000, 0.000000 +3862, -3.000000, 166.000000, 159.000000, 0.000000 +3863, -3.000000, 166.000000, 159.000000, 0.000000 +3864, -3.000000, 166.000000, 159.000000, 0.000000 +3865, -3.000000, 166.000000, 159.000000, 0.000000 +3866, -3.000000, 166.000000, 159.000000, 0.000000 +3867, -3.000000, 166.000000, 159.000000, 0.000000 +3868, -3.000000, 166.000000, 159.000000, 0.000000 +3869, -3.000000, 166.000000, 159.000000, 0.000000 +3870, -3.000000, 166.000000, 159.000000, 0.000000 +3871, -3.000000, 166.000000, 159.000000, 0.000000 +3872, -3.000000, 166.000000, 159.000000, 0.000000 +3873, -3.000000, 166.000000, 159.000000, 0.000000 +3874, -3.000000, 166.000000, 159.000000, 0.000000 +3875, -3.000000, 166.000000, 159.000000, 0.000000 +3876, -3.000000, 166.000000, 159.000000, 0.000000 +3877, -3.000000, 166.000000, 159.000000, 0.000000 +3878, -3.000000, 166.000000, 159.000000, 0.000000 +3879, -3.000000, 166.000000, 159.000000, 0.000000 +3880, -3.000000, 166.000000, 159.000000, 0.000000 +3881, -3.000000, 166.000000, 159.000000, 0.000000 +3882, -3.000000, 166.000000, 159.000000, 0.000000 +3883, -3.000000, 166.000000, 159.000000, 0.000000 +3884, -3.000000, 166.000000, 159.000000, 0.000000 +3885, -3.000000, 166.000000, 159.000000, 0.000000 +3886, -3.000000, 166.000000, 159.000000, 0.000000 +3887, -3.000000, 166.000000, 159.000000, 0.000000 +3888, -3.000000, 166.000000, 159.000000, 0.000000 +3889, -3.000000, 166.000000, 159.000000, 0.000000 +3890, -3.000000, 166.000000, 159.000000, 0.000000 +3891, -3.000000, 166.000000, 159.000000, 0.000000 +3892, -3.000000, 166.000000, 159.000000, 0.000000 +3893, -3.000000, 166.000000, 159.000000, 0.000000 +3894, -3.000000, 166.000000, 159.000000, 0.000000 +3895, -3.000000, 166.000000, 159.000000, 0.000000 +3896, -3.000000, 166.000000, 159.000000, 0.000000 +3897, -3.000000, 166.000000, 159.000000, 0.000000 +3898, -3.000000, 166.000000, 159.000000, 0.000000 +3899, -3.000000, 166.000000, 159.000000, 0.000000 +3900, -3.000000, 168.000000, 162.000000, 0.000000 +3901, -3.000000, 168.000000, 162.000000, 0.000000 +3902, -3.000000, 168.000000, 162.000000, 0.000000 +3903, -3.000000, 168.000000, 162.000000, 0.000000 +3904, -3.000000, 168.000000, 162.000000, 0.000000 +3905, -3.000000, 168.000000, 162.000000, 0.000000 +3906, -3.000000, 168.000000, 162.000000, 0.000000 +3907, -3.000000, 168.000000, 162.000000, 0.000000 +3908, -3.000000, 168.000000, 162.000000, 0.000000 +3909, -3.000000, 168.000000, 162.000000, 0.000000 +3910, -3.000000, 168.000000, 162.000000, 0.000000 +3911, -3.000000, 168.000000, 162.000000, 0.000000 +3912, -3.000000, 168.000000, 162.000000, 0.000000 +3913, -3.000000, 168.000000, 162.000000, 0.000000 +3914, -3.000000, 168.000000, 162.000000, 0.000000 +3915, -3.000000, 168.000000, 162.000000, 0.000000 +3916, -3.000000, 168.000000, 162.000000, 0.000000 +3917, -3.000000, 168.000000, 162.000000, 0.000000 +3918, -3.000000, 168.000000, 162.000000, 0.000000 +3919, -3.000000, 168.000000, 162.000000, 0.000000 +3920, -3.000000, 168.000000, 162.000000, 0.000000 +3921, -3.000000, 168.000000, 162.000000, 0.000000 +3922, -3.000000, 168.000000, 162.000000, 0.000000 +3923, -3.000000, 168.000000, 162.000000, 0.000000 +3924, -3.000000, 168.000000, 162.000000, 0.000000 +3925, -3.000000, 168.000000, 162.000000, 0.000000 +3926, -3.000000, 168.000000, 162.000000, 0.000000 +3927, -3.000000, 168.000000, 162.000000, 0.000000 +3928, -3.000000, 168.000000, 162.000000, 0.000000 +3929, -3.000000, 168.000000, 162.000000, 0.000000 +3930, -3.000000, 168.000000, 162.000000, 0.000000 +3931, -3.000000, 168.000000, 162.000000, 0.000000 +3932, -3.000000, 168.000000, 162.000000, 0.000000 +3933, -3.000000, 168.000000, 162.000000, 0.000000 +3934, -3.000000, 168.000000, 162.000000, 0.000000 +3935, -3.000000, 168.000000, 162.000000, 0.000000 +3936, -3.000000, 168.000000, 162.000000, 0.000000 +3937, -3.000000, 168.000000, 162.000000, 0.000000 +3938, -3.000000, 168.000000, 162.000000, 0.000000 +3939, -3.000000, 168.000000, 162.000000, 0.000000 +3940, -3.000000, 168.000000, 162.000000, 0.000000 +3941, -3.000000, 168.000000, 162.000000, 0.000000 +3942, -3.000000, 168.000000, 162.000000, 0.000000 +3943, -3.000000, 168.000000, 162.000000, 0.000000 +3944, -3.000000, 168.000000, 162.000000, 0.000000 +3945, -3.000000, 168.000000, 162.000000, 0.000000 +3946, -3.000000, 168.000000, 162.000000, 0.000000 +3947, -3.000000, 168.000000, 162.000000, 0.000000 +3948, -3.000000, 168.000000, 162.000000, 0.000000 +3949, -3.000000, 168.000000, 162.000000, 0.000000 +3950, -3.000000, 168.000000, 162.000000, 0.000000 +3951, -3.000000, 168.000000, 162.000000, 0.000000 +3952, -3.000000, 168.000000, 162.000000, 0.000000 +3953, -3.000000, 168.000000, 162.000000, 0.000000 +3954, -3.000000, 168.000000, 162.000000, 0.000000 +3955, -3.000000, 168.000000, 162.000000, 0.000000 +3956, -3.000000, 168.000000, 162.000000, 0.000000 +3957, -3.000000, 168.000000, 162.000000, 0.000000 +3958, -3.000000, 168.000000, 162.000000, 0.000000 +3959, -3.000000, 168.000000, 162.000000, 0.000000 +3960, -3.000000, 168.000000, 162.000000, 0.000000 +3961, -3.000000, 168.000000, 162.000000, 0.000000 +3962, -3.000000, 168.000000, 162.000000, 0.000000 +3963, -3.000000, 168.000000, 162.000000, 0.000000 +3964, -3.000000, 168.000000, 162.000000, 0.000000 +3965, -3.000000, 168.000000, 162.000000, 0.000000 +3966, -3.000000, 168.000000, 162.000000, 0.000000 +3967, -3.000000, 168.000000, 162.000000, 0.000000 +3968, -3.000000, 168.000000, 162.000000, 0.000000 +3969, -3.000000, 168.000000, 162.000000, 0.000000 +3970, -3.000000, 168.000000, 162.000000, 0.000000 +3971, -3.000000, 168.000000, 162.000000, 0.000000 +3972, -3.000000, 168.000000, 162.000000, 0.000000 +3973, -3.000000, 168.000000, 162.000000, 0.000000 +3974, -3.000000, 168.000000, 162.000000, 0.000000 +3975, -3.000000, 168.000000, 162.000000, 0.000000 +3976, -3.000000, 168.000000, 162.000000, 0.000000 +3977, -3.000000, 168.000000, 162.000000, 0.000000 +3978, -3.000000, 168.000000, 162.000000, 0.000000 +3979, -3.000000, 168.000000, 162.000000, 0.000000 +3980, -3.000000, 168.000000, 162.000000, 0.000000 +3981, -3.000000, 168.000000, 162.000000, 0.000000 +3982, -3.000000, 168.000000, 162.000000, 0.000000 +3983, -3.000000, 168.000000, 162.000000, 0.000000 +3984, -3.000000, 168.000000, 162.000000, 0.000000 +3985, -3.000000, 168.000000, 162.000000, 0.000000 +3986, -3.000000, 168.000000, 162.000000, 0.000000 +3987, -3.000000, 168.000000, 162.000000, 0.000000 +3988, -3.000000, 168.000000, 162.000000, 0.000000 +3989, -3.000000, 168.000000, 162.000000, 0.000000 +3990, -3.000000, 168.000000, 162.000000, 0.000000 +3991, -3.000000, 168.000000, 162.000000, 0.000000 +3992, -3.000000, 168.000000, 162.000000, 0.000000 +3993, -3.000000, 168.000000, 162.000000, 0.000000 +3994, -3.000000, 168.000000, 162.000000, 0.000000 +3995, -3.000000, 168.000000, 162.000000, 0.000000 +3996, -3.000000, 168.000000, 162.000000, 0.000000 +3997, -3.000000, 168.000000, 162.000000, 0.000000 +3998, -3.000000, 168.000000, 162.000000, 0.000000 +3999, -3.000000, 168.000000, 162.000000, 0.000000 +4000, -3.000000, 170.000000, 165.000000, 0.000000 +4001, -3.000000, 170.000000, 165.000000, 0.000000 +4002, -3.000000, 170.000000, 165.000000, 0.000000 +4003, -3.000000, 170.000000, 165.000000, 0.000000 +4004, -3.000000, 170.000000, 165.000000, 0.000000 +4005, -3.000000, 170.000000, 165.000000, 0.000000 +4006, -3.000000, 170.000000, 165.000000, 0.000000 +4007, -3.000000, 170.000000, 165.000000, 0.000000 +4008, -3.000000, 170.000000, 165.000000, 0.000000 +4009, -3.000000, 170.000000, 165.000000, 0.000000 +4010, -3.000000, 170.000000, 165.000000, 0.000000 +4011, -3.000000, 170.000000, 165.000000, 0.000000 +4012, -3.000000, 170.000000, 165.000000, 0.000000 +4013, -3.000000, 170.000000, 165.000000, 0.000000 +4014, -3.000000, 170.000000, 165.000000, 0.000000 +4015, -3.000000, 170.000000, 165.000000, 0.000000 +4016, -3.000000, 170.000000, 165.000000, 0.000000 +4017, -3.000000, 170.000000, 165.000000, 0.000000 +4018, -3.000000, 170.000000, 165.000000, 0.000000 +4019, -3.000000, 170.000000, 165.000000, 0.000000 +4020, -3.000000, 170.000000, 165.000000, 0.000000 +4021, -3.000000, 170.000000, 165.000000, 0.000000 +4022, -3.000000, 170.000000, 165.000000, 0.000000 +4023, -3.000000, 170.000000, 165.000000, 0.000000 +4024, -3.000000, 170.000000, 165.000000, 0.000000 +4025, -3.000000, 170.000000, 165.000000, 0.000000 +4026, -3.000000, 170.000000, 165.000000, 0.000000 +4027, -3.000000, 170.000000, 165.000000, 0.000000 +4028, -3.000000, 170.000000, 165.000000, 0.000000 +4029, -3.000000, 170.000000, 165.000000, 0.000000 +4030, -3.000000, 170.000000, 165.000000, 0.000000 +4031, -3.000000, 170.000000, 165.000000, 0.000000 +4032, -3.000000, 170.000000, 165.000000, 0.000000 +4033, -3.000000, 170.000000, 165.000000, 0.000000 +4034, -3.000000, 170.000000, 165.000000, 0.000000 +4035, -3.000000, 170.000000, 165.000000, 0.000000 +4036, -3.000000, 170.000000, 165.000000, 0.000000 +4037, -3.000000, 170.000000, 165.000000, 0.000000 +4038, -3.000000, 170.000000, 165.000000, 0.000000 +4039, -3.000000, 170.000000, 165.000000, 0.000000 +4040, -3.000000, 170.000000, 165.000000, 0.000000 +4041, -3.000000, 170.000000, 165.000000, 0.000000 +4042, -3.000000, 170.000000, 165.000000, 0.000000 +4043, -3.000000, 170.000000, 165.000000, 0.000000 +4044, -3.000000, 170.000000, 165.000000, 0.000000 +4045, -3.000000, 170.000000, 165.000000, 0.000000 +4046, -3.000000, 170.000000, 165.000000, 0.000000 +4047, -3.000000, 170.000000, 165.000000, 0.000000 +4048, -3.000000, 170.000000, 165.000000, 0.000000 +4049, -3.000000, 170.000000, 165.000000, 0.000000 +4050, -3.000000, 170.000000, 165.000000, 0.000000 +4051, -3.000000, 170.000000, 165.000000, 0.000000 +4052, -3.000000, 170.000000, 165.000000, 0.000000 +4053, -3.000000, 170.000000, 165.000000, 0.000000 +4054, -3.000000, 170.000000, 165.000000, 0.000000 +4055, -3.000000, 170.000000, 165.000000, 0.000000 +4056, -3.000000, 170.000000, 165.000000, 0.000000 +4057, -3.000000, 170.000000, 165.000000, 0.000000 +4058, -3.000000, 170.000000, 165.000000, 0.000000 +4059, -3.000000, 170.000000, 165.000000, 0.000000 +4060, -3.000000, 170.000000, 165.000000, 0.000000 +4061, -3.000000, 170.000000, 165.000000, 0.000000 +4062, -3.000000, 170.000000, 165.000000, 0.000000 +4063, -3.000000, 170.000000, 165.000000, 0.000000 +4064, -3.000000, 170.000000, 165.000000, 0.000000 +4065, -3.000000, 170.000000, 165.000000, 0.000000 +4066, -3.000000, 170.000000, 165.000000, 0.000000 +4067, -3.000000, 170.000000, 165.000000, 0.000000 +4068, -3.000000, 170.000000, 165.000000, 0.000000 +4069, -3.000000, 170.000000, 165.000000, 0.000000 +4070, -3.000000, 170.000000, 165.000000, 0.000000 +4071, -3.000000, 170.000000, 165.000000, 0.000000 +4072, -3.000000, 170.000000, 165.000000, 0.000000 +4073, -3.000000, 170.000000, 165.000000, 0.000000 +4074, -3.000000, 170.000000, 165.000000, 0.000000 +4075, -3.000000, 170.000000, 165.000000, 0.000000 +4076, -3.000000, 170.000000, 165.000000, 0.000000 +4077, -3.000000, 170.000000, 165.000000, 0.000000 +4078, -3.000000, 170.000000, 165.000000, 0.000000 +4079, -3.000000, 170.000000, 165.000000, 0.000000 +4080, -3.000000, 170.000000, 165.000000, 0.000000 +4081, -3.000000, 170.000000, 165.000000, 0.000000 +4082, -3.000000, 170.000000, 165.000000, 0.000000 +4083, -3.000000, 170.000000, 165.000000, 0.000000 +4084, -3.000000, 170.000000, 165.000000, 0.000000 +4085, -3.000000, 170.000000, 165.000000, 0.000000 +4086, -3.000000, 170.000000, 165.000000, 0.000000 +4087, -3.000000, 170.000000, 165.000000, 0.000000 +4088, -3.000000, 170.000000, 165.000000, 0.000000 +4089, -3.000000, 170.000000, 165.000000, 0.000000 +4090, -3.000000, 170.000000, 165.000000, 0.000000 +4091, -3.000000, 170.000000, 165.000000, 0.000000 +4092, -3.000000, 170.000000, 165.000000, 0.000000 +4093, -3.000000, 170.000000, 165.000000, 0.000000 +4094, -3.000000, 170.000000, 165.000000, 0.000000 +4095, -3.000000, 170.000000, 165.000000, 0.000000 +4096, -3.000000, 170.000000, 165.000000, 0.000000 +4097, -3.000000, 170.000000, 165.000000, 0.000000 +4098, -3.000000, 170.000000, 165.000000, 0.000000 +4099, -3.000000, 170.000000, 165.000000, 0.000000 +4100, -3.000000, 172.000000, 168.000000, 0.000000 +4101, -3.000000, 172.000000, 168.000000, 0.000000 +4102, -3.000000, 172.000000, 168.000000, 0.000000 +4103, -3.000000, 172.000000, 168.000000, 0.000000 +4104, -3.000000, 172.000000, 168.000000, 0.000000 +4105, -3.000000, 172.000000, 168.000000, 0.000000 +4106, -3.000000, 172.000000, 168.000000, 0.000000 +4107, -3.000000, 172.000000, 168.000000, 0.000000 +4108, -3.000000, 172.000000, 168.000000, 0.000000 +4109, -3.000000, 172.000000, 168.000000, 0.000000 +4110, -3.000000, 172.000000, 168.000000, 0.000000 +4111, -3.000000, 172.000000, 168.000000, 0.000000 +4112, -3.000000, 172.000000, 168.000000, 0.000000 +4113, -3.000000, 172.000000, 168.000000, 0.000000 +4114, -3.000000, 172.000000, 168.000000, 0.000000 +4115, -3.000000, 172.000000, 168.000000, 0.000000 +4116, -3.000000, 172.000000, 168.000000, 0.000000 +4117, -3.000000, 172.000000, 168.000000, 0.000000 +4118, -3.000000, 172.000000, 168.000000, 0.000000 +4119, -3.000000, 172.000000, 168.000000, 0.000000 +4120, -3.000000, 172.000000, 168.000000, 0.000000 +4121, -3.000000, 172.000000, 168.000000, 0.000000 +4122, -3.000000, 172.000000, 168.000000, 0.000000 +4123, -3.000000, 172.000000, 168.000000, 0.000000 +4124, -3.000000, 172.000000, 168.000000, 0.000000 +4125, -3.000000, 172.000000, 168.000000, 0.000000 +4126, -3.000000, 172.000000, 168.000000, 0.000000 +4127, -3.000000, 172.000000, 168.000000, 0.000000 +4128, -3.000000, 172.000000, 168.000000, 0.000000 +4129, -3.000000, 172.000000, 168.000000, 0.000000 +4130, -3.000000, 172.000000, 168.000000, 0.000000 +4131, -3.000000, 172.000000, 168.000000, 0.000000 +4132, -3.000000, 172.000000, 168.000000, 0.000000 +4133, -3.000000, 172.000000, 168.000000, 0.000000 +4134, -3.000000, 172.000000, 168.000000, 0.000000 +4135, -3.000000, 172.000000, 168.000000, 0.000000 +4136, -3.000000, 172.000000, 168.000000, 0.000000 +4137, -3.000000, 172.000000, 168.000000, 0.000000 +4138, -3.000000, 172.000000, 168.000000, 0.000000 +4139, -3.000000, 172.000000, 168.000000, 0.000000 +4140, -3.000000, 172.000000, 168.000000, 0.000000 +4141, -3.000000, 172.000000, 168.000000, 0.000000 +4142, -3.000000, 172.000000, 168.000000, 0.000000 +4143, -3.000000, 172.000000, 168.000000, 0.000000 +4144, -3.000000, 172.000000, 168.000000, 0.000000 +4145, -3.000000, 172.000000, 168.000000, 0.000000 +4146, -3.000000, 172.000000, 168.000000, 0.000000 +4147, -3.000000, 172.000000, 168.000000, 0.000000 +4148, -3.000000, 172.000000, 168.000000, 0.000000 +4149, -3.000000, 172.000000, 168.000000, 0.000000 +4150, -3.000000, 172.000000, 168.000000, 0.000000 +4151, -3.000000, 172.000000, 168.000000, 0.000000 +4152, -3.000000, 172.000000, 168.000000, 0.000000 +4153, -3.000000, 172.000000, 168.000000, 0.000000 +4154, -3.000000, 172.000000, 168.000000, 0.000000 +4155, -3.000000, 172.000000, 168.000000, 0.000000 +4156, -3.000000, 172.000000, 168.000000, 0.000000 +4157, -3.000000, 172.000000, 168.000000, 0.000000 +4158, -3.000000, 172.000000, 168.000000, 0.000000 +4159, -3.000000, 172.000000, 168.000000, 0.000000 +4160, -3.000000, 172.000000, 168.000000, 0.000000 +4161, -3.000000, 172.000000, 168.000000, 0.000000 +4162, -3.000000, 172.000000, 168.000000, 0.000000 +4163, -3.000000, 172.000000, 168.000000, 0.000000 +4164, -3.000000, 172.000000, 168.000000, 0.000000 +4165, -3.000000, 172.000000, 168.000000, 0.000000 +4166, -3.000000, 172.000000, 168.000000, 0.000000 +4167, -3.000000, 172.000000, 168.000000, 0.000000 +4168, -3.000000, 172.000000, 168.000000, 0.000000 +4169, -3.000000, 172.000000, 168.000000, 0.000000 +4170, -3.000000, 172.000000, 168.000000, 0.000000 +4171, -3.000000, 172.000000, 168.000000, 0.000000 +4172, -3.000000, 172.000000, 168.000000, 0.000000 +4173, -3.000000, 172.000000, 168.000000, 0.000000 +4174, -3.000000, 172.000000, 168.000000, 0.000000 +4175, -3.000000, 172.000000, 168.000000, 0.000000 +4176, -3.000000, 172.000000, 168.000000, 0.000000 +4177, -3.000000, 172.000000, 168.000000, 0.000000 +4178, -3.000000, 172.000000, 168.000000, 0.000000 +4179, -3.000000, 172.000000, 168.000000, 0.000000 +4180, -3.000000, 172.000000, 168.000000, 0.000000 +4181, -3.000000, 172.000000, 168.000000, 0.000000 +4182, -3.000000, 172.000000, 168.000000, 0.000000 +4183, -3.000000, 172.000000, 168.000000, 0.000000 +4184, -3.000000, 172.000000, 168.000000, 0.000000 +4185, -3.000000, 172.000000, 168.000000, 0.000000 +4186, -3.000000, 172.000000, 168.000000, 0.000000 +4187, -3.000000, 172.000000, 168.000000, 0.000000 +4188, -3.000000, 172.000000, 168.000000, 0.000000 +4189, -3.000000, 172.000000, 168.000000, 0.000000 +4190, -3.000000, 172.000000, 168.000000, 0.000000 +4191, -3.000000, 172.000000, 168.000000, 0.000000 +4192, -3.000000, 172.000000, 168.000000, 0.000000 +4193, -3.000000, 172.000000, 168.000000, 0.000000 +4194, -3.000000, 172.000000, 168.000000, 0.000000 +4195, -3.000000, 172.000000, 168.000000, 0.000000 +4196, -3.000000, 172.000000, 168.000000, 0.000000 +4197, -3.000000, 172.000000, 168.000000, 0.000000 +4198, -3.000000, 172.000000, 168.000000, 0.000000 +4199, -3.000000, 172.000000, 168.000000, 0.000000 +4200, -3.000000, 174.000000, 171.000000, 0.000000 +4201, -3.000000, 174.000000, 171.000000, 0.000000 +4202, -3.000000, 174.000000, 171.000000, 0.000000 +4203, -3.000000, 174.000000, 171.000000, 0.000000 +4204, -3.000000, 174.000000, 171.000000, 0.000000 +4205, -3.000000, 174.000000, 171.000000, 0.000000 +4206, -3.000000, 174.000000, 171.000000, 0.000000 +4207, -3.000000, 174.000000, 171.000000, 0.000000 +4208, -3.000000, 174.000000, 171.000000, 0.000000 +4209, -3.000000, 174.000000, 171.000000, 0.000000 +4210, -3.000000, 174.000000, 171.000000, 0.000000 +4211, -3.000000, 174.000000, 171.000000, 0.000000 +4212, -3.000000, 174.000000, 171.000000, 0.000000 +4213, -3.000000, 174.000000, 171.000000, 0.000000 +4214, -3.000000, 174.000000, 171.000000, 0.000000 +4215, -3.000000, 174.000000, 171.000000, 0.000000 +4216, -3.000000, 174.000000, 171.000000, 0.000000 +4217, -3.000000, 174.000000, 171.000000, 0.000000 +4218, -3.000000, 174.000000, 171.000000, 0.000000 +4219, -3.000000, 174.000000, 171.000000, 0.000000 +4220, -3.000000, 174.000000, 171.000000, 0.000000 +4221, -3.000000, 174.000000, 171.000000, 0.000000 +4222, -3.000000, 174.000000, 171.000000, 0.000000 +4223, -3.000000, 174.000000, 171.000000, 0.000000 +4224, -3.000000, 174.000000, 171.000000, 0.000000 +4225, -3.000000, 174.000000, 171.000000, 0.000000 +4226, -3.000000, 174.000000, 171.000000, 0.000000 +4227, -3.000000, 174.000000, 171.000000, 0.000000 +4228, -3.000000, 174.000000, 171.000000, 0.000000 +4229, -3.000000, 174.000000, 171.000000, 0.000000 +4230, -3.000000, 174.000000, 171.000000, 0.000000 +4231, -3.000000, 174.000000, 171.000000, 0.000000 +4232, -3.000000, 174.000000, 171.000000, 0.000000 +4233, -3.000000, 174.000000, 171.000000, 0.000000 +4234, -3.000000, 174.000000, 171.000000, 0.000000 +4235, -3.000000, 174.000000, 171.000000, 0.000000 +4236, -3.000000, 174.000000, 171.000000, 0.000000 +4237, -3.000000, 174.000000, 171.000000, 0.000000 +4238, -3.000000, 174.000000, 171.000000, 0.000000 +4239, -3.000000, 174.000000, 171.000000, 0.000000 +4240, -3.000000, 174.000000, 171.000000, 0.000000 +4241, -3.000000, 174.000000, 171.000000, 0.000000 +4242, -3.000000, 174.000000, 171.000000, 0.000000 +4243, -3.000000, 174.000000, 171.000000, 0.000000 +4244, -3.000000, 174.000000, 171.000000, 0.000000 +4245, -3.000000, 174.000000, 171.000000, 0.000000 +4246, -3.000000, 174.000000, 171.000000, 0.000000 +4247, -3.000000, 174.000000, 171.000000, 0.000000 +4248, -3.000000, 174.000000, 171.000000, 0.000000 +4249, -3.000000, 174.000000, 171.000000, 0.000000 +4250, -3.000000, 174.000000, 171.000000, 0.000000 +4251, -3.000000, 174.000000, 171.000000, 0.000000 +4252, -3.000000, 174.000000, 171.000000, 0.000000 +4253, -3.000000, 174.000000, 171.000000, 0.000000 +4254, -3.000000, 174.000000, 171.000000, 0.000000 +4255, -3.000000, 174.000000, 171.000000, 0.000000 +4256, -3.000000, 174.000000, 171.000000, 0.000000 +4257, -3.000000, 174.000000, 171.000000, 0.000000 +4258, -3.000000, 174.000000, 171.000000, 0.000000 +4259, -3.000000, 174.000000, 171.000000, 0.000000 +4260, -3.000000, 174.000000, 171.000000, 0.000000 +4261, -3.000000, 174.000000, 171.000000, 0.000000 +4262, -3.000000, 174.000000, 171.000000, 0.000000 +4263, -3.000000, 174.000000, 171.000000, 0.000000 +4264, -3.000000, 174.000000, 171.000000, 0.000000 +4265, -3.000000, 174.000000, 171.000000, 0.000000 +4266, -3.000000, 174.000000, 171.000000, 0.000000 +4267, -3.000000, 174.000000, 171.000000, 0.000000 +4268, -3.000000, 174.000000, 171.000000, 0.000000 +4269, -3.000000, 174.000000, 171.000000, 0.000000 +4270, -3.000000, 174.000000, 171.000000, 0.000000 +4271, -3.000000, 174.000000, 171.000000, 0.000000 +4272, -3.000000, 174.000000, 171.000000, 0.000000 +4273, -3.000000, 174.000000, 171.000000, 0.000000 +4274, -3.000000, 174.000000, 171.000000, 0.000000 +4275, -3.000000, 174.000000, 171.000000, 0.000000 +4276, -3.000000, 174.000000, 171.000000, 0.000000 +4277, -3.000000, 174.000000, 171.000000, 0.000000 +4278, -3.000000, 174.000000, 171.000000, 0.000000 +4279, -3.000000, 174.000000, 171.000000, 0.000000 +4280, -3.000000, 174.000000, 171.000000, 0.000000 +4281, -3.000000, 174.000000, 171.000000, 0.000000 +4282, -3.000000, 174.000000, 171.000000, 0.000000 +4283, -3.000000, 174.000000, 171.000000, 0.000000 +4284, -3.000000, 174.000000, 171.000000, 0.000000 +4285, -3.000000, 174.000000, 171.000000, 0.000000 +4286, -3.000000, 174.000000, 171.000000, 0.000000 +4287, -3.000000, 174.000000, 171.000000, 0.000000 +4288, -3.000000, 174.000000, 171.000000, 0.000000 +4289, -3.000000, 174.000000, 171.000000, 0.000000 +4290, -3.000000, 174.000000, 171.000000, 0.000000 +4291, -3.000000, 174.000000, 171.000000, 0.000000 +4292, -3.000000, 174.000000, 171.000000, 0.000000 +4293, -3.000000, 174.000000, 171.000000, 0.000000 +4294, -3.000000, 174.000000, 171.000000, 0.000000 +4295, -3.000000, 174.000000, 171.000000, 0.000000 +4296, -3.000000, 174.000000, 171.000000, 0.000000 +4297, -3.000000, 174.000000, 171.000000, 0.000000 +4298, -3.000000, 174.000000, 171.000000, 0.000000 +4299, -3.000000, 174.000000, 171.000000, 0.000000 +4300, -3.000000, 176.000000, 174.000000, 0.000000 +4301, -3.000000, 176.000000, 174.000000, 0.000000 +4302, -3.000000, 176.000000, 174.000000, 0.000000 +4303, -3.000000, 176.000000, 174.000000, 0.000000 +4304, -3.000000, 176.000000, 174.000000, 0.000000 +4305, -3.000000, 176.000000, 174.000000, 0.000000 +4306, -3.000000, 176.000000, 174.000000, 0.000000 +4307, -3.000000, 176.000000, 174.000000, 0.000000 +4308, -3.000000, 176.000000, 174.000000, 0.000000 +4309, -3.000000, 176.000000, 174.000000, 0.000000 +4310, -3.000000, 176.000000, 174.000000, 0.000000 +4311, -3.000000, 176.000000, 174.000000, 0.000000 +4312, -3.000000, 176.000000, 174.000000, 0.000000 +4313, -3.000000, 176.000000, 174.000000, 0.000000 +4314, -3.000000, 176.000000, 174.000000, 0.000000 +4315, -3.000000, 176.000000, 174.000000, 0.000000 +4316, -3.000000, 176.000000, 174.000000, 0.000000 +4317, -3.000000, 176.000000, 174.000000, 0.000000 +4318, -3.000000, 176.000000, 174.000000, 0.000000 +4319, -3.000000, 176.000000, 174.000000, 0.000000 +4320, -3.000000, 176.000000, 174.000000, 0.000000 +4321, -3.000000, 176.000000, 174.000000, 0.000000 +4322, -3.000000, 176.000000, 174.000000, 0.000000 +4323, -3.000000, 176.000000, 174.000000, 0.000000 +4324, -3.000000, 176.000000, 174.000000, 0.000000 +4325, -3.000000, 176.000000, 174.000000, 0.000000 +4326, -3.000000, 176.000000, 174.000000, 0.000000 +4327, -3.000000, 176.000000, 174.000000, 0.000000 +4328, -3.000000, 176.000000, 174.000000, 0.000000 +4329, -3.000000, 176.000000, 174.000000, 0.000000 +4330, -3.000000, 176.000000, 174.000000, 0.000000 +4331, -3.000000, 176.000000, 174.000000, 0.000000 +4332, -3.000000, 176.000000, 174.000000, 0.000000 +4333, -3.000000, 176.000000, 174.000000, 0.000000 +4334, -3.000000, 176.000000, 174.000000, 0.000000 +4335, -3.000000, 176.000000, 174.000000, 0.000000 +4336, -3.000000, 176.000000, 174.000000, 0.000000 +4337, -3.000000, 176.000000, 174.000000, 0.000000 +4338, -3.000000, 176.000000, 174.000000, 0.000000 +4339, -3.000000, 176.000000, 174.000000, 0.000000 +4340, -3.000000, 176.000000, 174.000000, 0.000000 +4341, -3.000000, 176.000000, 174.000000, 0.000000 +4342, -3.000000, 176.000000, 174.000000, 0.000000 +4343, -3.000000, 176.000000, 174.000000, 0.000000 +4344, -3.000000, 176.000000, 174.000000, 0.000000 +4345, -3.000000, 176.000000, 174.000000, 0.000000 +4346, -3.000000, 176.000000, 174.000000, 0.000000 +4347, -3.000000, 176.000000, 174.000000, 0.000000 +4348, -3.000000, 176.000000, 174.000000, 0.000000 +4349, -3.000000, 176.000000, 174.000000, 0.000000 +4350, -3.000000, 176.000000, 174.000000, 0.000000 +4351, -3.000000, 176.000000, 174.000000, 0.000000 +4352, -3.000000, 176.000000, 174.000000, 0.000000 +4353, -3.000000, 176.000000, 174.000000, 0.000000 +4354, -3.000000, 176.000000, 174.000000, 0.000000 +4355, -3.000000, 176.000000, 174.000000, 0.000000 +4356, -3.000000, 176.000000, 174.000000, 0.000000 +4357, -3.000000, 176.000000, 174.000000, 0.000000 +4358, -3.000000, 176.000000, 174.000000, 0.000000 +4359, -3.000000, 176.000000, 174.000000, 0.000000 +4360, -3.000000, 176.000000, 174.000000, 0.000000 +4361, -3.000000, 176.000000, 174.000000, 0.000000 +4362, -3.000000, 176.000000, 174.000000, 0.000000 +4363, -3.000000, 176.000000, 174.000000, 0.000000 +4364, -3.000000, 176.000000, 174.000000, 0.000000 +4365, -3.000000, 176.000000, 174.000000, 0.000000 +4366, -3.000000, 176.000000, 174.000000, 0.000000 +4367, -3.000000, 176.000000, 174.000000, 0.000000 +4368, -3.000000, 176.000000, 174.000000, 0.000000 +4369, -3.000000, 176.000000, 174.000000, 0.000000 +4370, -3.000000, 176.000000, 174.000000, 0.000000 +4371, -3.000000, 176.000000, 174.000000, 0.000000 +4372, -3.000000, 176.000000, 174.000000, 0.000000 +4373, -3.000000, 176.000000, 174.000000, 0.000000 +4374, -3.000000, 176.000000, 174.000000, 0.000000 +4375, -3.000000, 176.000000, 174.000000, 0.000000 +4376, -3.000000, 176.000000, 174.000000, 0.000000 +4377, -3.000000, 176.000000, 174.000000, 0.000000 +4378, -3.000000, 176.000000, 174.000000, 0.000000 +4379, -3.000000, 176.000000, 174.000000, 0.000000 +4380, -3.000000, 176.000000, 174.000000, 0.000000 +4381, -3.000000, 176.000000, 174.000000, 0.000000 +4382, -3.000000, 176.000000, 174.000000, 0.000000 +4383, -3.000000, 176.000000, 174.000000, 0.000000 +4384, -3.000000, 176.000000, 174.000000, 0.000000 +4385, -3.000000, 176.000000, 174.000000, 0.000000 +4386, -3.000000, 176.000000, 174.000000, 0.000000 +4387, -3.000000, 176.000000, 174.000000, 0.000000 +4388, -3.000000, 176.000000, 174.000000, 0.000000 +4389, -3.000000, 176.000000, 174.000000, 0.000000 +4390, -3.000000, 176.000000, 174.000000, 0.000000 +4391, -3.000000, 176.000000, 174.000000, 0.000000 +4392, -3.000000, 176.000000, 174.000000, 0.000000 +4393, -3.000000, 176.000000, 174.000000, 0.000000 +4394, -3.000000, 176.000000, 174.000000, 0.000000 +4395, -3.000000, 176.000000, 174.000000, 0.000000 +4396, -3.000000, 176.000000, 174.000000, 0.000000 +4397, -3.000000, 176.000000, 174.000000, 0.000000 +4398, -3.000000, 176.000000, 174.000000, 0.000000 +4399, -3.000000, 176.000000, 174.000000, 0.000000 +4400, -3.000000, 178.000000, 177.000000, 0.000000 +4401, -3.000000, 178.000000, 177.000000, 0.000000 +4402, -3.000000, 178.000000, 177.000000, 0.000000 +4403, -3.000000, 178.000000, 177.000000, 0.000000 +4404, -3.000000, 178.000000, 177.000000, 0.000000 +4405, -3.000000, 178.000000, 177.000000, 0.000000 +4406, -3.000000, 178.000000, 177.000000, 0.000000 +4407, -3.000000, 178.000000, 177.000000, 0.000000 +4408, -3.000000, 178.000000, 177.000000, 0.000000 +4409, -3.000000, 178.000000, 177.000000, 0.000000 +4410, -3.000000, 178.000000, 177.000000, 0.000000 +4411, -3.000000, 178.000000, 177.000000, 0.000000 +4412, -3.000000, 178.000000, 177.000000, 0.000000 +4413, -3.000000, 178.000000, 177.000000, 0.000000 +4414, -3.000000, 178.000000, 177.000000, 0.000000 +4415, -3.000000, 178.000000, 177.000000, 0.000000 +4416, -3.000000, 178.000000, 177.000000, 0.000000 +4417, -3.000000, 178.000000, 177.000000, 0.000000 +4418, -3.000000, 178.000000, 177.000000, 0.000000 +4419, -3.000000, 178.000000, 177.000000, 0.000000 +4420, -3.000000, 178.000000, 177.000000, 0.000000 +4421, -3.000000, 178.000000, 177.000000, 0.000000 +4422, -3.000000, 178.000000, 177.000000, 0.000000 +4423, -3.000000, 178.000000, 177.000000, 0.000000 +4424, -3.000000, 178.000000, 177.000000, 0.000000 +4425, -3.000000, 178.000000, 177.000000, 0.000000 +4426, -3.000000, 178.000000, 177.000000, 0.000000 +4427, -3.000000, 178.000000, 177.000000, 0.000000 +4428, -3.000000, 178.000000, 177.000000, 0.000000 +4429, -3.000000, 178.000000, 177.000000, 0.000000 +4430, -3.000000, 178.000000, 177.000000, 0.000000 +4431, -3.000000, 178.000000, 177.000000, 0.000000 +4432, -3.000000, 178.000000, 177.000000, 0.000000 +4433, -3.000000, 178.000000, 177.000000, 0.000000 +4434, -3.000000, 178.000000, 177.000000, 0.000000 +4435, -3.000000, 178.000000, 177.000000, 0.000000 +4436, -3.000000, 178.000000, 177.000000, 0.000000 +4437, -3.000000, 178.000000, 177.000000, 0.000000 +4438, -3.000000, 178.000000, 177.000000, 0.000000 +4439, -3.000000, 178.000000, 177.000000, 0.000000 +4440, -3.000000, 178.000000, 177.000000, 0.000000 +4441, -3.000000, 178.000000, 177.000000, 0.000000 +4442, -3.000000, 178.000000, 177.000000, 0.000000 +4443, -3.000000, 178.000000, 177.000000, 0.000000 +4444, -3.000000, 178.000000, 177.000000, 0.000000 +4445, -3.000000, 178.000000, 177.000000, 0.000000 +4446, -3.000000, 178.000000, 177.000000, 0.000000 +4447, -3.000000, 178.000000, 177.000000, 0.000000 +4448, -3.000000, 178.000000, 177.000000, 0.000000 +4449, -3.000000, 178.000000, 177.000000, 0.000000 +4450, -3.000000, 178.000000, 177.000000, 0.000000 +4451, -3.000000, 178.000000, 177.000000, 0.000000 +4452, -3.000000, 178.000000, 177.000000, 0.000000 +4453, -3.000000, 178.000000, 177.000000, 0.000000 +4454, -3.000000, 178.000000, 177.000000, 0.000000 +4455, -3.000000, 178.000000, 177.000000, 0.000000 +4456, -3.000000, 178.000000, 177.000000, 0.000000 +4457, -3.000000, 178.000000, 177.000000, 0.000000 +4458, -3.000000, 178.000000, 177.000000, 0.000000 +4459, -3.000000, 178.000000, 177.000000, 0.000000 +4460, -3.000000, 178.000000, 177.000000, 0.000000 +4461, -3.000000, 178.000000, 177.000000, 0.000000 +4462, -3.000000, 178.000000, 177.000000, 0.000000 +4463, -3.000000, 178.000000, 177.000000, 0.000000 +4464, -3.000000, 178.000000, 177.000000, 0.000000 +4465, -3.000000, 178.000000, 177.000000, 0.000000 +4466, -3.000000, 178.000000, 177.000000, 0.000000 +4467, -3.000000, 178.000000, 177.000000, 0.000000 +4468, -3.000000, 178.000000, 177.000000, 0.000000 +4469, -3.000000, 178.000000, 177.000000, 0.000000 +4470, -3.000000, 178.000000, 177.000000, 0.000000 +4471, -3.000000, 178.000000, 177.000000, 0.000000 +4472, -3.000000, 178.000000, 177.000000, 0.000000 +4473, -3.000000, 178.000000, 177.000000, 0.000000 +4474, -3.000000, 178.000000, 177.000000, 0.000000 +4475, -3.000000, 178.000000, 177.000000, 0.000000 +4476, -3.000000, 178.000000, 177.000000, 0.000000 +4477, -3.000000, 178.000000, 177.000000, 0.000000 +4478, -3.000000, 178.000000, 177.000000, 0.000000 +4479, -3.000000, 178.000000, 177.000000, 0.000000 +4480, -3.000000, 178.000000, 177.000000, 0.000000 +4481, -3.000000, 178.000000, 177.000000, 0.000000 +4482, -3.000000, 178.000000, 177.000000, 0.000000 +4483, -3.000000, 178.000000, 177.000000, 0.000000 +4484, -3.000000, 178.000000, 177.000000, 0.000000 +4485, -3.000000, 178.000000, 177.000000, 0.000000 +4486, -3.000000, 178.000000, 177.000000, 0.000000 +4487, -3.000000, 178.000000, 177.000000, 0.000000 +4488, -3.000000, 178.000000, 177.000000, 0.000000 +4489, -3.000000, 178.000000, 177.000000, 0.000000 +4490, -3.000000, 178.000000, 177.000000, 0.000000 +4491, -3.000000, 178.000000, 177.000000, 0.000000 +4492, -3.000000, 178.000000, 177.000000, 0.000000 +4493, -3.000000, 178.000000, 177.000000, 0.000000 +4494, -3.000000, 178.000000, 177.000000, 0.000000 +4495, -3.000000, 178.000000, 177.000000, 0.000000 +4496, -3.000000, 178.000000, 177.000000, 0.000000 +4497, -3.000000, 178.000000, 177.000000, 0.000000 +4498, -3.000000, 178.000000, 177.000000, 0.000000 +4499, -3.000000, 178.000000, 177.000000, 0.000000 +4500, -3.000000, 180.000000, 180.000000, 0.000000 +4501, -3.000000, 180.000000, 180.000000, 0.000000 +4502, -3.000000, 180.000000, 180.000000, 0.000000 +4503, -3.000000, 180.000000, 180.000000, 0.000000 +4504, -3.000000, 180.000000, 180.000000, 0.000000 +4505, -3.000000, 180.000000, 180.000000, 0.000000 +4506, -3.000000, 180.000000, 180.000000, 0.000000 +4507, -3.000000, 180.000000, 180.000000, 0.000000 +4508, -3.000000, 180.000000, 180.000000, 0.000000 +4509, -3.000000, 180.000000, 180.000000, 0.000000 +4510, -3.000000, 180.000000, 180.000000, 0.000000 +4511, -3.000000, 180.000000, 180.000000, 0.000000 +4512, -3.000000, 180.000000, 180.000000, 0.000000 +4513, -3.000000, 180.000000, 180.000000, 0.000000 +4514, -3.000000, 180.000000, 180.000000, 0.000000 +4515, -3.000000, 180.000000, 180.000000, 0.000000 +4516, -3.000000, 180.000000, 180.000000, 0.000000 +4517, -3.000000, 180.000000, 180.000000, 0.000000 +4518, -3.000000, 180.000000, 180.000000, 0.000000 +4519, -3.000000, 180.000000, 180.000000, 0.000000 +4520, -3.000000, 180.000000, 180.000000, 0.000000 +4521, -3.000000, 180.000000, 180.000000, 0.000000 +4522, -3.000000, 180.000000, 180.000000, 0.000000 +4523, -3.000000, 180.000000, 180.000000, 0.000000 +4524, -3.000000, 180.000000, 180.000000, 0.000000 +4525, -3.000000, 180.000000, 180.000000, 0.000000 +4526, -3.000000, 180.000000, 180.000000, 0.000000 +4527, -3.000000, 180.000000, 180.000000, 0.000000 +4528, -3.000000, 180.000000, 180.000000, 0.000000 +4529, -3.000000, 180.000000, 180.000000, 0.000000 +4530, -3.000000, 180.000000, 180.000000, 0.000000 +4531, -3.000000, 180.000000, 180.000000, 0.000000 +4532, -3.000000, 180.000000, 180.000000, 0.000000 +4533, -3.000000, 180.000000, 180.000000, 0.000000 +4534, -3.000000, 180.000000, 180.000000, 0.000000 +4535, -3.000000, 180.000000, 180.000000, 0.000000 +4536, -3.000000, 180.000000, 180.000000, 0.000000 +4537, -3.000000, 180.000000, 180.000000, 0.000000 +4538, -3.000000, 180.000000, 180.000000, 0.000000 +4539, -3.000000, 180.000000, 180.000000, 0.000000 +4540, -3.000000, 180.000000, 180.000000, 0.000000 +4541, -3.000000, 180.000000, 180.000000, 0.000000 +4542, -3.000000, 180.000000, 180.000000, 0.000000 +4543, -3.000000, 180.000000, 180.000000, 0.000000 +4544, -3.000000, 180.000000, 180.000000, 0.000000 +4545, -3.000000, 180.000000, 180.000000, 0.000000 +4546, -3.000000, 180.000000, 180.000000, 0.000000 +4547, -3.000000, 180.000000, 180.000000, 0.000000 +4548, -3.000000, 180.000000, 180.000000, 0.000000 +4549, -3.000000, 180.000000, 180.000000, 0.000000 +4550, -3.000000, 180.000000, 180.000000, 0.000000 +4551, -3.000000, 180.000000, 180.000000, 0.000000 +4552, -3.000000, 180.000000, 180.000000, 0.000000 +4553, -3.000000, 180.000000, 180.000000, 0.000000 +4554, -3.000000, 180.000000, 180.000000, 0.000000 +4555, -3.000000, 180.000000, 180.000000, 0.000000 +4556, -3.000000, 180.000000, 180.000000, 0.000000 +4557, -3.000000, 180.000000, 180.000000, 0.000000 +4558, -3.000000, 180.000000, 180.000000, 0.000000 +4559, -3.000000, 180.000000, 180.000000, 0.000000 +4560, -3.000000, 180.000000, 180.000000, 0.000000 +4561, -3.000000, 180.000000, 180.000000, 0.000000 +4562, -3.000000, 180.000000, 180.000000, 0.000000 +4563, -3.000000, 180.000000, 180.000000, 0.000000 +4564, -3.000000, 180.000000, 180.000000, 0.000000 +4565, -3.000000, 180.000000, 180.000000, 0.000000 +4566, -3.000000, 180.000000, 180.000000, 0.000000 +4567, -3.000000, 180.000000, 180.000000, 0.000000 +4568, -3.000000, 180.000000, 180.000000, 0.000000 +4569, -3.000000, 180.000000, 180.000000, 0.000000 +4570, -3.000000, 180.000000, 180.000000, 0.000000 +4571, -3.000000, 180.000000, 180.000000, 0.000000 +4572, -3.000000, 180.000000, 180.000000, 0.000000 +4573, -3.000000, 180.000000, 180.000000, 0.000000 +4574, -3.000000, 180.000000, 180.000000, 0.000000 +4575, -3.000000, 180.000000, 180.000000, 0.000000 +4576, -3.000000, 180.000000, 180.000000, 0.000000 +4577, -3.000000, 180.000000, 180.000000, 0.000000 +4578, -3.000000, 180.000000, 180.000000, 0.000000 +4579, -3.000000, 180.000000, 180.000000, 0.000000 +4580, -3.000000, 180.000000, 180.000000, 0.000000 +4581, -3.000000, 180.000000, 180.000000, 0.000000 +4582, -3.000000, 180.000000, 180.000000, 0.000000 +4583, -3.000000, 180.000000, 180.000000, 0.000000 +4584, -3.000000, 180.000000, 180.000000, 0.000000 +4585, -3.000000, 180.000000, 180.000000, 0.000000 +4586, -3.000000, 180.000000, 180.000000, 0.000000 +4587, -3.000000, 180.000000, 180.000000, 0.000000 +4588, -3.000000, 180.000000, 180.000000, 0.000000 +4589, -3.000000, 180.000000, 180.000000, 0.000000 +4590, -3.000000, 180.000000, 180.000000, 0.000000 +4591, -3.000000, 180.000000, 180.000000, 0.000000 +4592, -3.000000, 180.000000, 180.000000, 0.000000 +4593, -3.000000, 180.000000, 180.000000, 0.000000 +4594, -3.000000, 180.000000, 180.000000, 0.000000 +4595, -3.000000, 180.000000, 180.000000, 0.000000 +4596, -3.000000, 180.000000, 180.000000, 0.000000 +4597, -3.000000, 180.000000, 180.000000, 0.000000 +4598, -3.000000, 180.000000, 180.000000, 0.000000 +4599, -3.000000, 180.000000, 180.000000, 0.000000 +4600, -3.000000, 182.000000, 183.000000, 0.000000 +4601, -3.000000, 182.000000, 183.000000, 0.000000 +4602, -3.000000, 182.000000, 183.000000, 0.000000 +4603, -3.000000, 182.000000, 183.000000, 0.000000 +4604, -3.000000, 182.000000, 183.000000, 0.000000 +4605, -3.000000, 182.000000, 183.000000, 0.000000 +4606, -3.000000, 182.000000, 183.000000, 0.000000 +4607, -3.000000, 182.000000, 183.000000, 0.000000 +4608, -3.000000, 182.000000, 183.000000, 0.000000 +4609, -3.000000, 182.000000, 183.000000, 0.000000 +4610, -3.000000, 182.000000, 183.000000, 0.000000 +4611, -3.000000, 182.000000, 183.000000, 0.000000 +4612, -3.000000, 182.000000, 183.000000, 0.000000 +4613, -3.000000, 182.000000, 183.000000, 0.000000 +4614, -3.000000, 182.000000, 183.000000, 0.000000 +4615, -3.000000, 182.000000, 183.000000, 0.000000 +4616, -3.000000, 182.000000, 183.000000, 0.000000 +4617, -3.000000, 182.000000, 183.000000, 0.000000 +4618, -3.000000, 182.000000, 183.000000, 0.000000 +4619, -3.000000, 182.000000, 183.000000, 0.000000 +4620, -3.000000, 182.000000, 183.000000, 0.000000 +4621, -3.000000, 182.000000, 183.000000, 0.000000 +4622, -3.000000, 182.000000, 183.000000, 0.000000 +4623, -3.000000, 182.000000, 183.000000, 0.000000 +4624, -3.000000, 182.000000, 183.000000, 0.000000 +4625, -3.000000, 182.000000, 183.000000, 0.000000 +4626, -3.000000, 182.000000, 183.000000, 0.000000 +4627, -3.000000, 182.000000, 183.000000, 0.000000 +4628, -3.000000, 182.000000, 183.000000, 0.000000 +4629, -3.000000, 182.000000, 183.000000, 0.000000 +4630, -3.000000, 182.000000, 183.000000, 0.000000 +4631, -3.000000, 182.000000, 183.000000, 0.000000 +4632, -3.000000, 182.000000, 183.000000, 0.000000 +4633, -3.000000, 182.000000, 183.000000, 0.000000 +4634, -3.000000, 182.000000, 183.000000, 0.000000 +4635, -3.000000, 182.000000, 183.000000, 0.000000 +4636, -3.000000, 182.000000, 183.000000, 0.000000 +4637, -3.000000, 182.000000, 183.000000, 0.000000 +4638, -3.000000, 182.000000, 183.000000, 0.000000 +4639, -3.000000, 182.000000, 183.000000, 0.000000 +4640, -3.000000, 182.000000, 183.000000, 0.000000 +4641, -3.000000, 182.000000, 183.000000, 0.000000 +4642, -3.000000, 182.000000, 183.000000, 0.000000 +4643, -3.000000, 182.000000, 183.000000, 0.000000 +4644, -3.000000, 182.000000, 183.000000, 0.000000 +4645, -3.000000, 182.000000, 183.000000, 0.000000 +4646, -3.000000, 182.000000, 183.000000, 0.000000 +4647, -3.000000, 182.000000, 183.000000, 0.000000 +4648, -3.000000, 182.000000, 183.000000, 0.000000 +4649, -3.000000, 182.000000, 183.000000, 0.000000 +4650, -3.000000, 182.000000, 183.000000, 0.000000 +4651, -3.000000, 182.000000, 183.000000, 0.000000 +4652, -3.000000, 182.000000, 183.000000, 0.000000 +4653, -3.000000, 182.000000, 183.000000, 0.000000 +4654, -3.000000, 182.000000, 183.000000, 0.000000 +4655, -3.000000, 182.000000, 183.000000, 0.000000 +4656, -3.000000, 182.000000, 183.000000, 0.000000 +4657, -3.000000, 182.000000, 183.000000, 0.000000 +4658, -3.000000, 182.000000, 183.000000, 0.000000 +4659, -3.000000, 182.000000, 183.000000, 0.000000 +4660, -3.000000, 182.000000, 183.000000, 0.000000 +4661, -3.000000, 182.000000, 183.000000, 0.000000 +4662, -3.000000, 182.000000, 183.000000, 0.000000 +4663, -3.000000, 182.000000, 183.000000, 0.000000 +4664, -3.000000, 182.000000, 183.000000, 0.000000 +4665, -3.000000, 182.000000, 183.000000, 0.000000 +4666, -3.000000, 182.000000, 183.000000, 0.000000 +4667, -3.000000, 182.000000, 183.000000, 0.000000 +4668, -3.000000, 182.000000, 183.000000, 0.000000 +4669, -3.000000, 182.000000, 183.000000, 0.000000 +4670, -3.000000, 182.000000, 183.000000, 0.000000 +4671, -3.000000, 182.000000, 183.000000, 0.000000 +4672, -3.000000, 182.000000, 183.000000, 0.000000 +4673, -3.000000, 182.000000, 183.000000, 0.000000 +4674, -3.000000, 182.000000, 183.000000, 0.000000 +4675, -3.000000, 182.000000, 183.000000, 0.000000 +4676, -3.000000, 182.000000, 183.000000, 0.000000 +4677, -3.000000, 182.000000, 183.000000, 0.000000 +4678, -3.000000, 182.000000, 183.000000, 0.000000 +4679, -3.000000, 182.000000, 183.000000, 0.000000 +4680, -3.000000, 182.000000, 183.000000, 0.000000 +4681, -3.000000, 182.000000, 183.000000, 0.000000 +4682, -3.000000, 182.000000, 183.000000, 0.000000 +4683, -3.000000, 182.000000, 183.000000, 0.000000 +4684, -3.000000, 182.000000, 183.000000, 0.000000 +4685, -3.000000, 182.000000, 183.000000, 0.000000 +4686, -3.000000, 182.000000, 183.000000, 0.000000 +4687, -3.000000, 182.000000, 183.000000, 0.000000 +4688, -3.000000, 182.000000, 183.000000, 0.000000 +4689, -3.000000, 182.000000, 183.000000, 0.000000 +4690, -3.000000, 182.000000, 183.000000, 0.000000 +4691, -3.000000, 182.000000, 183.000000, 0.000000 +4692, -3.000000, 182.000000, 183.000000, 0.000000 +4693, -3.000000, 182.000000, 183.000000, 0.000000 +4694, -3.000000, 182.000000, 183.000000, 0.000000 +4695, -3.000000, 182.000000, 183.000000, 0.000000 +4696, -3.000000, 182.000000, 183.000000, 0.000000 +4697, -3.000000, 182.000000, 183.000000, 0.000000 +4698, -3.000000, 182.000000, 183.000000, 0.000000 +4699, -3.000000, 182.000000, 183.000000, 0.000000 +4700, -3.000000, 184.000000, 186.000000, 0.000000 +4701, -3.000000, 184.000000, 186.000000, 0.000000 +4702, -3.000000, 184.000000, 186.000000, 0.000000 +4703, -3.000000, 184.000000, 186.000000, 0.000000 +4704, -3.000000, 184.000000, 186.000000, 0.000000 +4705, -3.000000, 184.000000, 186.000000, 0.000000 +4706, -3.000000, 184.000000, 186.000000, 0.000000 +4707, -3.000000, 184.000000, 186.000000, 0.000000 +4708, -3.000000, 184.000000, 186.000000, 0.000000 +4709, -3.000000, 184.000000, 186.000000, 0.000000 +4710, -3.000000, 184.000000, 186.000000, 0.000000 +4711, -3.000000, 184.000000, 186.000000, 0.000000 +4712, -3.000000, 184.000000, 186.000000, 0.000000 +4713, -3.000000, 184.000000, 186.000000, 0.000000 +4714, -3.000000, 184.000000, 186.000000, 0.000000 +4715, -3.000000, 184.000000, 186.000000, 0.000000 +4716, -3.000000, 184.000000, 186.000000, 0.000000 +4717, -3.000000, 184.000000, 186.000000, 0.000000 +4718, -3.000000, 184.000000, 186.000000, 0.000000 +4719, -3.000000, 184.000000, 186.000000, 0.000000 +4720, -3.000000, 184.000000, 186.000000, 0.000000 +4721, -3.000000, 184.000000, 186.000000, 0.000000 +4722, -3.000000, 184.000000, 186.000000, 0.000000 +4723, -3.000000, 184.000000, 186.000000, 0.000000 +4724, -3.000000, 184.000000, 186.000000, 0.000000 +4725, -3.000000, 184.000000, 186.000000, 0.000000 +4726, -3.000000, 184.000000, 186.000000, 0.000000 +4727, -3.000000, 184.000000, 186.000000, 0.000000 +4728, -3.000000, 184.000000, 186.000000, 0.000000 +4729, -3.000000, 184.000000, 186.000000, 0.000000 +4730, -3.000000, 184.000000, 186.000000, 0.000000 +4731, -3.000000, 184.000000, 186.000000, 0.000000 +4732, -3.000000, 184.000000, 186.000000, 0.000000 +4733, -3.000000, 184.000000, 186.000000, 0.000000 +4734, -3.000000, 184.000000, 186.000000, 0.000000 +4735, -3.000000, 184.000000, 186.000000, 0.000000 +4736, -3.000000, 184.000000, 186.000000, 0.000000 +4737, -3.000000, 184.000000, 186.000000, 0.000000 +4738, -3.000000, 184.000000, 186.000000, 0.000000 +4739, -3.000000, 184.000000, 186.000000, 0.000000 +4740, -3.000000, 184.000000, 186.000000, 0.000000 +4741, -3.000000, 184.000000, 186.000000, 0.000000 +4742, -3.000000, 184.000000, 186.000000, 0.000000 +4743, -3.000000, 184.000000, 186.000000, 0.000000 +4744, -3.000000, 184.000000, 186.000000, 0.000000 +4745, -3.000000, 184.000000, 186.000000, 0.000000 +4746, -3.000000, 184.000000, 186.000000, 0.000000 +4747, -3.000000, 184.000000, 186.000000, 0.000000 +4748, -3.000000, 184.000000, 186.000000, 0.000000 +4749, -3.000000, 184.000000, 186.000000, 0.000000 +4750, -3.000000, 184.000000, 186.000000, 0.000000 +4751, -3.000000, 184.000000, 186.000000, 0.000000 +4752, -3.000000, 184.000000, 186.000000, 0.000000 +4753, -3.000000, 184.000000, 186.000000, 0.000000 +4754, -3.000000, 184.000000, 186.000000, 0.000000 +4755, -3.000000, 184.000000, 186.000000, 0.000000 +4756, -3.000000, 184.000000, 186.000000, 0.000000 +4757, -3.000000, 184.000000, 186.000000, 0.000000 +4758, -3.000000, 184.000000, 186.000000, 0.000000 +4759, -3.000000, 184.000000, 186.000000, 0.000000 +4760, -3.000000, 184.000000, 186.000000, 0.000000 +4761, -3.000000, 184.000000, 186.000000, 0.000000 +4762, -3.000000, 184.000000, 186.000000, 0.000000 +4763, -3.000000, 184.000000, 186.000000, 0.000000 +4764, -3.000000, 184.000000, 186.000000, 0.000000 +4765, -3.000000, 184.000000, 186.000000, 0.000000 +4766, -3.000000, 184.000000, 186.000000, 0.000000 +4767, -3.000000, 184.000000, 186.000000, 0.000000 +4768, -3.000000, 184.000000, 186.000000, 0.000000 +4769, -3.000000, 184.000000, 186.000000, 0.000000 +4770, -3.000000, 184.000000, 186.000000, 0.000000 +4771, -3.000000, 184.000000, 186.000000, 0.000000 +4772, -3.000000, 184.000000, 186.000000, 0.000000 +4773, -3.000000, 184.000000, 186.000000, 0.000000 +4774, -3.000000, 184.000000, 186.000000, 0.000000 +4775, -3.000000, 184.000000, 186.000000, 0.000000 +4776, -3.000000, 184.000000, 186.000000, 0.000000 +4777, -3.000000, 184.000000, 186.000000, 0.000000 +4778, -3.000000, 184.000000, 186.000000, 0.000000 +4779, -3.000000, 184.000000, 186.000000, 0.000000 +4780, -3.000000, 184.000000, 186.000000, 0.000000 +4781, -3.000000, 184.000000, 186.000000, 0.000000 +4782, -3.000000, 184.000000, 186.000000, 0.000000 +4783, -3.000000, 184.000000, 186.000000, 0.000000 +4784, -3.000000, 184.000000, 186.000000, 0.000000 +4785, -3.000000, 184.000000, 186.000000, 0.000000 +4786, -3.000000, 184.000000, 186.000000, 0.000000 +4787, -3.000000, 184.000000, 186.000000, 0.000000 +4788, -3.000000, 184.000000, 186.000000, 0.000000 +4789, -3.000000, 184.000000, 186.000000, 0.000000 +4790, -3.000000, 184.000000, 186.000000, 0.000000 +4791, -3.000000, 184.000000, 186.000000, 0.000000 +4792, -3.000000, 184.000000, 186.000000, 0.000000 +4793, -3.000000, 184.000000, 186.000000, 0.000000 +4794, -3.000000, 184.000000, 186.000000, 0.000000 +4795, -3.000000, 184.000000, 186.000000, 0.000000 +4796, -3.000000, 184.000000, 186.000000, 0.000000 +4797, -3.000000, 184.000000, 186.000000, 0.000000 +4798, -3.000000, 184.000000, 186.000000, 0.000000 +4799, -3.000000, 184.000000, 186.000000, 0.000000 +4800, -3.000000, 186.000000, 189.000000, 0.000000 +4801, -3.000000, 186.000000, 189.000000, 0.000000 +4802, -3.000000, 186.000000, 189.000000, 0.000000 +4803, -3.000000, 186.000000, 189.000000, 0.000000 +4804, -3.000000, 186.000000, 189.000000, 0.000000 +4805, -3.000000, 186.000000, 189.000000, 0.000000 +4806, -3.000000, 186.000000, 189.000000, 0.000000 +4807, -3.000000, 186.000000, 189.000000, 0.000000 +4808, -3.000000, 186.000000, 189.000000, 0.000000 +4809, -3.000000, 186.000000, 189.000000, 0.000000 +4810, -3.000000, 186.000000, 189.000000, 0.000000 +4811, -3.000000, 186.000000, 189.000000, 0.000000 +4812, -3.000000, 186.000000, 189.000000, 0.000000 +4813, -3.000000, 186.000000, 189.000000, 0.000000 +4814, -3.000000, 186.000000, 189.000000, 0.000000 +4815, -3.000000, 186.000000, 189.000000, 0.000000 +4816, -3.000000, 186.000000, 189.000000, 0.000000 +4817, -3.000000, 186.000000, 189.000000, 0.000000 +4818, -3.000000, 186.000000, 189.000000, 0.000000 +4819, -3.000000, 186.000000, 189.000000, 0.000000 +4820, -3.000000, 186.000000, 189.000000, 0.000000 +4821, -3.000000, 186.000000, 189.000000, 0.000000 +4822, -3.000000, 186.000000, 189.000000, 0.000000 +4823, -3.000000, 186.000000, 189.000000, 0.000000 +4824, -3.000000, 186.000000, 189.000000, 0.000000 +4825, -3.000000, 186.000000, 189.000000, 0.000000 +4826, -3.000000, 186.000000, 189.000000, 0.000000 +4827, -3.000000, 186.000000, 189.000000, 0.000000 +4828, -3.000000, 186.000000, 189.000000, 0.000000 +4829, -3.000000, 186.000000, 189.000000, 0.000000 +4830, -3.000000, 186.000000, 189.000000, 0.000000 +4831, -3.000000, 186.000000, 189.000000, 0.000000 +4832, -3.000000, 186.000000, 189.000000, 0.000000 +4833, -3.000000, 186.000000, 189.000000, 0.000000 +4834, -3.000000, 186.000000, 189.000000, 0.000000 +4835, -3.000000, 186.000000, 189.000000, 0.000000 +4836, -3.000000, 186.000000, 189.000000, 0.000000 +4837, -3.000000, 186.000000, 189.000000, 0.000000 +4838, -3.000000, 186.000000, 189.000000, 0.000000 +4839, -3.000000, 186.000000, 189.000000, 0.000000 +4840, -3.000000, 186.000000, 189.000000, 0.000000 +4841, -3.000000, 186.000000, 189.000000, 0.000000 +4842, -3.000000, 186.000000, 189.000000, 0.000000 +4843, -3.000000, 186.000000, 189.000000, 0.000000 +4844, -3.000000, 186.000000, 189.000000, 0.000000 +4845, -3.000000, 186.000000, 189.000000, 0.000000 +4846, -3.000000, 186.000000, 189.000000, 0.000000 +4847, -3.000000, 186.000000, 189.000000, 0.000000 +4848, -3.000000, 186.000000, 189.000000, 0.000000 +4849, -3.000000, 186.000000, 189.000000, 0.000000 +4850, -3.000000, 186.000000, 189.000000, 0.000000 +4851, -3.000000, 186.000000, 189.000000, 0.000000 +4852, -3.000000, 186.000000, 189.000000, 0.000000 +4853, -3.000000, 186.000000, 189.000000, 0.000000 +4854, -3.000000, 186.000000, 189.000000, 0.000000 +4855, -3.000000, 186.000000, 189.000000, 0.000000 +4856, -3.000000, 186.000000, 189.000000, 0.000000 +4857, -3.000000, 186.000000, 189.000000, 0.000000 +4858, -3.000000, 186.000000, 189.000000, 0.000000 +4859, -3.000000, 186.000000, 189.000000, 0.000000 +4860, -3.000000, 186.000000, 189.000000, 0.000000 +4861, -3.000000, 186.000000, 189.000000, 0.000000 +4862, -3.000000, 186.000000, 189.000000, 0.000000 +4863, -3.000000, 186.000000, 189.000000, 0.000000 +4864, -3.000000, 186.000000, 189.000000, 0.000000 +4865, -3.000000, 186.000000, 189.000000, 0.000000 +4866, -3.000000, 186.000000, 189.000000, 0.000000 +4867, -3.000000, 186.000000, 189.000000, 0.000000 +4868, -3.000000, 186.000000, 189.000000, 0.000000 +4869, -3.000000, 186.000000, 189.000000, 0.000000 +4870, -3.000000, 186.000000, 189.000000, 0.000000 +4871, -3.000000, 186.000000, 189.000000, 0.000000 +4872, -3.000000, 186.000000, 189.000000, 0.000000 +4873, -3.000000, 186.000000, 189.000000, 0.000000 +4874, -3.000000, 186.000000, 189.000000, 0.000000 +4875, -3.000000, 186.000000, 189.000000, 0.000000 +4876, -3.000000, 186.000000, 189.000000, 0.000000 +4877, -3.000000, 186.000000, 189.000000, 0.000000 +4878, -3.000000, 186.000000, 189.000000, 0.000000 +4879, -3.000000, 186.000000, 189.000000, 0.000000 +4880, -3.000000, 186.000000, 189.000000, 0.000000 +4881, -3.000000, 186.000000, 189.000000, 0.000000 +4882, -3.000000, 186.000000, 189.000000, 0.000000 +4883, -3.000000, 186.000000, 189.000000, 0.000000 +4884, -3.000000, 186.000000, 189.000000, 0.000000 +4885, -3.000000, 186.000000, 189.000000, 0.000000 +4886, -3.000000, 186.000000, 189.000000, 0.000000 +4887, -3.000000, 186.000000, 189.000000, 0.000000 +4888, -3.000000, 186.000000, 189.000000, 0.000000 +4889, -3.000000, 186.000000, 189.000000, 0.000000 +4890, -3.000000, 186.000000, 189.000000, 0.000000 +4891, -3.000000, 186.000000, 189.000000, 0.000000 +4892, -3.000000, 186.000000, 189.000000, 0.000000 +4893, -3.000000, 186.000000, 189.000000, 0.000000 +4894, -3.000000, 186.000000, 189.000000, 0.000000 +4895, -3.000000, 186.000000, 189.000000, 0.000000 +4896, -3.000000, 186.000000, 189.000000, 0.000000 +4897, -3.000000, 186.000000, 189.000000, 0.000000 +4898, -3.000000, 186.000000, 189.000000, 0.000000 +4899, -3.000000, 186.000000, 189.000000, 0.000000 +4900, -3.000000, 188.000000, 192.000000, 0.000000 +4901, -3.000000, 188.000000, 192.000000, 0.000000 +4902, -3.000000, 188.000000, 192.000000, 0.000000 +4903, -3.000000, 188.000000, 192.000000, 0.000000 +4904, -3.000000, 188.000000, 192.000000, 0.000000 +4905, -3.000000, 188.000000, 192.000000, 0.000000 +4906, -3.000000, 188.000000, 192.000000, 0.000000 +4907, -3.000000, 188.000000, 192.000000, 0.000000 +4908, -3.000000, 188.000000, 192.000000, 0.000000 +4909, -3.000000, 188.000000, 192.000000, 0.000000 +4910, -3.000000, 188.000000, 192.000000, 0.000000 +4911, -3.000000, 188.000000, 192.000000, 0.000000 +4912, -3.000000, 188.000000, 192.000000, 0.000000 +4913, -3.000000, 188.000000, 192.000000, 0.000000 +4914, -3.000000, 188.000000, 192.000000, 0.000000 +4915, -3.000000, 188.000000, 192.000000, 0.000000 +4916, -3.000000, 188.000000, 192.000000, 0.000000 +4917, -3.000000, 188.000000, 192.000000, 0.000000 +4918, -3.000000, 188.000000, 192.000000, 0.000000 +4919, -3.000000, 188.000000, 192.000000, 0.000000 +4920, -3.000000, 188.000000, 192.000000, 0.000000 +4921, -3.000000, 188.000000, 192.000000, 0.000000 +4922, -3.000000, 188.000000, 192.000000, 0.000000 +4923, -3.000000, 188.000000, 192.000000, 0.000000 +4924, -3.000000, 188.000000, 192.000000, 0.000000 +4925, -3.000000, 188.000000, 192.000000, 0.000000 +4926, -3.000000, 188.000000, 192.000000, 0.000000 +4927, -3.000000, 188.000000, 192.000000, 0.000000 +4928, -3.000000, 188.000000, 192.000000, 0.000000 +4929, -3.000000, 188.000000, 192.000000, 0.000000 +4930, -3.000000, 188.000000, 192.000000, 0.000000 +4931, -3.000000, 188.000000, 192.000000, 0.000000 +4932, -3.000000, 188.000000, 192.000000, 0.000000 +4933, -3.000000, 188.000000, 192.000000, 0.000000 +4934, -3.000000, 188.000000, 192.000000, 0.000000 +4935, -3.000000, 188.000000, 192.000000, 0.000000 +4936, -3.000000, 188.000000, 192.000000, 0.000000 +4937, -3.000000, 188.000000, 192.000000, 0.000000 +4938, -3.000000, 188.000000, 192.000000, 0.000000 +4939, -3.000000, 188.000000, 192.000000, 0.000000 +4940, -3.000000, 188.000000, 192.000000, 0.000000 +4941, -3.000000, 188.000000, 192.000000, 0.000000 +4942, -3.000000, 188.000000, 192.000000, 0.000000 +4943, -3.000000, 188.000000, 192.000000, 0.000000 +4944, -3.000000, 188.000000, 192.000000, 0.000000 +4945, -3.000000, 188.000000, 192.000000, 0.000000 +4946, -3.000000, 188.000000, 192.000000, 0.000000 +4947, -3.000000, 188.000000, 192.000000, 0.000000 +4948, -3.000000, 188.000000, 192.000000, 0.000000 +4949, -3.000000, 188.000000, 192.000000, 0.000000 +4950, -3.000000, 188.000000, 192.000000, 0.000000 +4951, -3.000000, 188.000000, 192.000000, 0.000000 +4952, -3.000000, 188.000000, 192.000000, 0.000000 +4953, -3.000000, 188.000000, 192.000000, 0.000000 +4954, -3.000000, 188.000000, 192.000000, 0.000000 +4955, -3.000000, 188.000000, 192.000000, 0.000000 +4956, -3.000000, 188.000000, 192.000000, 0.000000 +4957, -3.000000, 188.000000, 192.000000, 0.000000 +4958, -3.000000, 188.000000, 192.000000, 0.000000 +4959, -3.000000, 188.000000, 192.000000, 0.000000 +4960, -3.000000, 188.000000, 192.000000, 0.000000 +4961, -3.000000, 188.000000, 192.000000, 0.000000 +4962, -3.000000, 188.000000, 192.000000, 0.000000 +4963, -3.000000, 188.000000, 192.000000, 0.000000 +4964, -3.000000, 188.000000, 192.000000, 0.000000 +4965, -3.000000, 188.000000, 192.000000, 0.000000 +4966, -3.000000, 188.000000, 192.000000, 0.000000 +4967, -3.000000, 188.000000, 192.000000, 0.000000 +4968, -3.000000, 188.000000, 192.000000, 0.000000 +4969, -3.000000, 188.000000, 192.000000, 0.000000 +4970, -3.000000, 188.000000, 192.000000, 0.000000 +4971, -3.000000, 188.000000, 192.000000, 0.000000 +4972, -3.000000, 188.000000, 192.000000, 0.000000 +4973, -3.000000, 188.000000, 192.000000, 0.000000 +4974, -3.000000, 188.000000, 192.000000, 0.000000 +4975, -3.000000, 188.000000, 192.000000, 0.000000 +4976, -3.000000, 188.000000, 192.000000, 0.000000 +4977, -3.000000, 188.000000, 192.000000, 0.000000 +4978, -3.000000, 188.000000, 192.000000, 0.000000 +4979, -3.000000, 188.000000, 192.000000, 0.000000 +4980, -3.000000, 188.000000, 192.000000, 0.000000 +4981, -3.000000, 188.000000, 192.000000, 0.000000 +4982, -3.000000, 188.000000, 192.000000, 0.000000 +4983, -3.000000, 188.000000, 192.000000, 0.000000 +4984, -3.000000, 188.000000, 192.000000, 0.000000 +4985, -3.000000, 188.000000, 192.000000, 0.000000 +4986, -3.000000, 188.000000, 192.000000, 0.000000 +4987, -3.000000, 188.000000, 192.000000, 0.000000 +4988, -3.000000, 188.000000, 192.000000, 0.000000 +4989, -3.000000, 188.000000, 192.000000, 0.000000 +4990, -3.000000, 188.000000, 192.000000, 0.000000 +4991, -3.000000, 188.000000, 192.000000, 0.000000 +4992, -3.000000, 188.000000, 192.000000, 0.000000 +4993, -3.000000, 188.000000, 192.000000, 0.000000 +4994, -3.000000, 188.000000, 192.000000, 0.000000 +4995, -3.000000, 188.000000, 192.000000, 0.000000 +4996, -3.000000, 188.000000, 192.000000, 0.000000 +4997, -3.000000, 188.000000, 192.000000, 0.000000 +4998, -3.000000, 188.000000, 192.000000, 0.000000 +4999, -3.000000, 188.000000, 192.000000, 0.000000 +5000, -3.000000, 190.000000, 195.000000, 0.000000 +5001, -3.000000, 190.000000, 195.000000, 0.000000 +5002, -3.000000, 190.000000, 195.000000, 0.000000 +5003, -3.000000, 190.000000, 195.000000, 0.000000 +5004, -3.000000, 190.000000, 195.000000, 0.000000 +5005, -3.000000, 190.000000, 195.000000, 0.000000 +5006, -3.000000, 190.000000, 195.000000, 0.000000 +5007, -3.000000, 190.000000, 195.000000, 0.000000 +5008, -3.000000, 190.000000, 195.000000, 0.000000 +5009, -3.000000, 190.000000, 195.000000, 0.000000 +5010, -3.000000, 190.000000, 195.000000, 0.000000 +5011, -3.000000, 190.000000, 195.000000, 0.000000 +5012, -3.000000, 190.000000, 195.000000, 0.000000 +5013, -3.000000, 190.000000, 195.000000, 0.000000 +5014, -3.000000, 190.000000, 195.000000, 0.000000 +5015, -3.000000, 190.000000, 195.000000, 0.000000 +5016, -3.000000, 190.000000, 195.000000, 0.000000 +5017, -3.000000, 190.000000, 195.000000, 0.000000 +5018, -3.000000, 190.000000, 195.000000, 0.000000 +5019, -3.000000, 190.000000, 195.000000, 0.000000 +5020, -3.000000, 190.000000, 195.000000, 0.000000 +5021, -3.000000, 190.000000, 195.000000, 0.000000 +5022, -3.000000, 190.000000, 195.000000, 0.000000 +5023, -3.000000, 190.000000, 195.000000, 0.000000 +5024, -3.000000, 190.000000, 195.000000, 0.000000 +5025, -3.000000, 190.000000, 195.000000, 0.000000 +5026, -3.000000, 190.000000, 195.000000, 0.000000 +5027, -3.000000, 190.000000, 195.000000, 0.000000 +5028, -3.000000, 190.000000, 195.000000, 0.000000 +5029, -3.000000, 190.000000, 195.000000, 0.000000 +5030, -3.000000, 190.000000, 195.000000, 0.000000 +5031, -3.000000, 190.000000, 195.000000, 0.000000 +5032, -3.000000, 190.000000, 195.000000, 0.000000 +5033, -3.000000, 190.000000, 195.000000, 0.000000 +5034, -3.000000, 190.000000, 195.000000, 0.000000 +5035, -3.000000, 190.000000, 195.000000, 0.000000 +5036, -3.000000, 190.000000, 195.000000, 0.000000 +5037, -3.000000, 190.000000, 195.000000, 0.000000 +5038, -3.000000, 190.000000, 195.000000, 0.000000 +5039, -3.000000, 190.000000, 195.000000, 0.000000 +5040, -3.000000, 190.000000, 195.000000, 0.000000 +5041, -3.000000, 190.000000, 195.000000, 0.000000 +5042, -3.000000, 190.000000, 195.000000, 0.000000 +5043, -3.000000, 190.000000, 195.000000, 0.000000 +5044, -3.000000, 190.000000, 195.000000, 0.000000 +5045, -3.000000, 190.000000, 195.000000, 0.000000 +5046, -3.000000, 190.000000, 195.000000, 0.000000 +5047, -3.000000, 190.000000, 195.000000, 0.000000 +5048, -3.000000, 190.000000, 195.000000, 0.000000 +5049, -3.000000, 190.000000, 195.000000, 0.000000 +5050, -3.000000, 190.000000, 195.000000, 0.000000 +5051, -3.000000, 190.000000, 195.000000, 0.000000 +5052, -3.000000, 190.000000, 195.000000, 0.000000 +5053, -3.000000, 190.000000, 195.000000, 0.000000 +5054, -3.000000, 190.000000, 195.000000, 0.000000 +5055, -3.000000, 190.000000, 195.000000, 0.000000 +5056, -3.000000, 190.000000, 195.000000, 0.000000 +5057, -3.000000, 190.000000, 195.000000, 0.000000 +5058, -3.000000, 190.000000, 195.000000, 0.000000 +5059, -3.000000, 190.000000, 195.000000, 0.000000 +5060, -3.000000, 190.000000, 195.000000, 0.000000 +5061, -3.000000, 190.000000, 195.000000, 0.000000 +5062, -3.000000, 190.000000, 195.000000, 0.000000 +5063, -3.000000, 190.000000, 195.000000, 0.000000 +5064, -3.000000, 190.000000, 195.000000, 0.000000 +5065, -3.000000, 190.000000, 195.000000, 0.000000 +5066, -3.000000, 190.000000, 195.000000, 0.000000 +5067, -3.000000, 190.000000, 195.000000, 0.000000 +5068, -3.000000, 190.000000, 195.000000, 0.000000 +5069, -3.000000, 190.000000, 195.000000, 0.000000 +5070, -3.000000, 190.000000, 195.000000, 0.000000 +5071, -3.000000, 190.000000, 195.000000, 0.000000 +5072, -3.000000, 190.000000, 195.000000, 0.000000 +5073, -3.000000, 190.000000, 195.000000, 0.000000 +5074, -3.000000, 190.000000, 195.000000, 0.000000 +5075, -3.000000, 190.000000, 195.000000, 0.000000 +5076, -3.000000, 190.000000, 195.000000, 0.000000 +5077, -3.000000, 190.000000, 195.000000, 0.000000 +5078, -3.000000, 190.000000, 195.000000, 0.000000 +5079, -3.000000, 190.000000, 195.000000, 0.000000 +5080, -3.000000, 190.000000, 195.000000, 0.000000 +5081, -3.000000, 190.000000, 195.000000, 0.000000 +5082, -3.000000, 190.000000, 195.000000, 0.000000 +5083, -3.000000, 190.000000, 195.000000, 0.000000 +5084, -3.000000, 190.000000, 195.000000, 0.000000 +5085, -3.000000, 190.000000, 195.000000, 0.000000 +5086, -3.000000, 190.000000, 195.000000, 0.000000 +5087, -3.000000, 190.000000, 195.000000, 0.000000 +5088, -3.000000, 190.000000, 195.000000, 0.000000 +5089, -3.000000, 190.000000, 195.000000, 0.000000 +5090, -3.000000, 190.000000, 195.000000, 0.000000 +5091, -3.000000, 190.000000, 195.000000, 0.000000 +5092, -3.000000, 190.000000, 195.000000, 0.000000 +5093, -3.000000, 190.000000, 195.000000, 0.000000 +5094, -3.000000, 190.000000, 195.000000, 0.000000 +5095, -3.000000, 190.000000, 195.000000, 0.000000 +5096, -3.000000, 190.000000, 195.000000, 0.000000 +5097, -3.000000, 190.000000, 195.000000, 0.000000 +5098, -3.000000, 190.000000, 195.000000, 0.000000 +5099, -3.000000, 190.000000, 195.000000, 0.000000 +5100, -3.000000, 192.000000, 198.000000, 0.000000 +5101, -3.000000, 192.000000, 198.000000, 0.000000 +5102, -3.000000, 192.000000, 198.000000, 0.000000 +5103, -3.000000, 192.000000, 198.000000, 0.000000 +5104, -3.000000, 192.000000, 198.000000, 0.000000 +5105, -3.000000, 192.000000, 198.000000, 0.000000 +5106, -3.000000, 192.000000, 198.000000, 0.000000 +5107, -3.000000, 192.000000, 198.000000, 0.000000 +5108, -3.000000, 192.000000, 198.000000, 0.000000 +5109, -3.000000, 192.000000, 198.000000, 0.000000 +5110, -3.000000, 192.000000, 198.000000, 0.000000 +5111, -3.000000, 192.000000, 198.000000, 0.000000 +5112, -3.000000, 192.000000, 198.000000, 0.000000 +5113, -3.000000, 192.000000, 198.000000, 0.000000 +5114, -3.000000, 192.000000, 198.000000, 0.000000 +5115, -3.000000, 192.000000, 198.000000, 0.000000 +5116, -3.000000, 192.000000, 198.000000, 0.000000 +5117, -3.000000, 192.000000, 198.000000, 0.000000 +5118, -3.000000, 192.000000, 198.000000, 0.000000 +5119, -3.000000, 192.000000, 198.000000, 0.000000 +5120, -3.000000, 192.000000, 198.000000, 0.000000 +5121, -3.000000, 192.000000, 198.000000, 0.000000 +5122, -3.000000, 192.000000, 198.000000, 0.000000 +5123, -3.000000, 192.000000, 198.000000, 0.000000 +5124, -3.000000, 192.000000, 198.000000, 0.000000 +5125, -3.000000, 192.000000, 198.000000, 0.000000 +5126, -3.000000, 192.000000, 198.000000, 0.000000 +5127, -3.000000, 192.000000, 198.000000, 0.000000 +5128, -3.000000, 192.000000, 198.000000, 0.000000 +5129, -3.000000, 192.000000, 198.000000, 0.000000 +5130, -3.000000, 192.000000, 198.000000, 0.000000 +5131, -3.000000, 192.000000, 198.000000, 0.000000 +5132, -3.000000, 192.000000, 198.000000, 0.000000 +5133, -3.000000, 192.000000, 198.000000, 0.000000 +5134, -3.000000, 192.000000, 198.000000, 0.000000 +5135, -3.000000, 192.000000, 198.000000, 0.000000 +5136, -3.000000, 192.000000, 198.000000, 0.000000 +5137, -3.000000, 192.000000, 198.000000, 0.000000 +5138, -3.000000, 192.000000, 198.000000, 0.000000 +5139, -3.000000, 192.000000, 198.000000, 0.000000 +5140, -3.000000, 192.000000, 198.000000, 0.000000 +5141, -3.000000, 192.000000, 198.000000, 0.000000 +5142, -3.000000, 192.000000, 198.000000, 0.000000 +5143, -3.000000, 192.000000, 198.000000, 0.000000 +5144, -3.000000, 192.000000, 198.000000, 0.000000 +5145, -3.000000, 192.000000, 198.000000, 0.000000 +5146, -3.000000, 192.000000, 198.000000, 0.000000 +5147, -3.000000, 192.000000, 198.000000, 0.000000 +5148, -3.000000, 192.000000, 198.000000, 0.000000 +5149, -3.000000, 192.000000, 198.000000, 0.000000 +5150, -3.000000, 192.000000, 198.000000, 0.000000 +5151, -3.000000, 192.000000, 198.000000, 0.000000 +5152, -3.000000, 192.000000, 198.000000, 0.000000 +5153, -3.000000, 192.000000, 198.000000, 0.000000 +5154, -3.000000, 192.000000, 198.000000, 0.000000 +5155, -3.000000, 192.000000, 198.000000, 0.000000 +5156, -3.000000, 192.000000, 198.000000, 0.000000 +5157, -3.000000, 192.000000, 198.000000, 0.000000 +5158, -3.000000, 192.000000, 198.000000, 0.000000 +5159, -3.000000, 192.000000, 198.000000, 0.000000 +5160, -3.000000, 192.000000, 198.000000, 0.000000 +5161, -3.000000, 192.000000, 198.000000, 0.000000 +5162, -3.000000, 192.000000, 198.000000, 0.000000 +5163, -3.000000, 192.000000, 198.000000, 0.000000 +5164, -3.000000, 192.000000, 198.000000, 0.000000 +5165, -3.000000, 192.000000, 198.000000, 0.000000 +5166, -3.000000, 192.000000, 198.000000, 0.000000 +5167, -3.000000, 192.000000, 198.000000, 0.000000 +5168, -3.000000, 192.000000, 198.000000, 0.000000 +5169, -3.000000, 192.000000, 198.000000, 0.000000 +5170, -3.000000, 192.000000, 198.000000, 0.000000 +5171, -3.000000, 192.000000, 198.000000, 0.000000 +5172, -3.000000, 192.000000, 198.000000, 0.000000 +5173, -3.000000, 192.000000, 198.000000, 0.000000 +5174, -3.000000, 192.000000, 198.000000, 0.000000 +5175, -3.000000, 192.000000, 198.000000, 0.000000 +5176, -3.000000, 192.000000, 198.000000, 0.000000 +5177, -3.000000, 192.000000, 198.000000, 0.000000 +5178, -3.000000, 192.000000, 198.000000, 0.000000 +5179, -3.000000, 192.000000, 198.000000, 0.000000 +5180, -3.000000, 192.000000, 198.000000, 0.000000 +5181, -3.000000, 192.000000, 198.000000, 0.000000 +5182, -3.000000, 192.000000, 198.000000, 0.000000 +5183, -3.000000, 192.000000, 198.000000, 0.000000 +5184, -3.000000, 192.000000, 198.000000, 0.000000 +5185, -3.000000, 192.000000, 198.000000, 0.000000 +5186, -3.000000, 192.000000, 198.000000, 0.000000 +5187, -3.000000, 192.000000, 198.000000, 0.000000 +5188, -3.000000, 192.000000, 198.000000, 0.000000 +5189, -3.000000, 192.000000, 198.000000, 0.000000 +5190, -3.000000, 192.000000, 198.000000, 0.000000 +5191, -3.000000, 192.000000, 198.000000, 0.000000 +5192, -3.000000, 192.000000, 198.000000, 0.000000 +5193, -3.000000, 192.000000, 198.000000, 0.000000 +5194, -3.000000, 192.000000, 198.000000, 0.000000 +5195, -3.000000, 192.000000, 198.000000, 0.000000 +5196, -3.000000, 192.000000, 198.000000, 0.000000 +5197, -3.000000, 192.000000, 198.000000, 0.000000 +5198, -3.000000, 192.000000, 198.000000, 0.000000 +5199, -3.000000, 192.000000, 198.000000, 0.000000 +5200, -3.000000, 194.000000, 201.000000, 0.000000 +5201, -3.000000, 194.000000, 201.000000, 0.000000 +5202, -3.000000, 194.000000, 201.000000, 0.000000 +5203, -3.000000, 194.000000, 201.000000, 0.000000 +5204, -3.000000, 194.000000, 201.000000, 0.000000 +5205, -3.000000, 194.000000, 201.000000, 0.000000 +5206, -3.000000, 194.000000, 201.000000, 0.000000 +5207, -3.000000, 194.000000, 201.000000, 0.000000 +5208, -3.000000, 194.000000, 201.000000, 0.000000 +5209, -3.000000, 194.000000, 201.000000, 0.000000 +5210, -3.000000, 194.000000, 201.000000, 0.000000 +5211, -3.000000, 194.000000, 201.000000, 0.000000 +5212, -3.000000, 194.000000, 201.000000, 0.000000 +5213, -3.000000, 194.000000, 201.000000, 0.000000 +5214, -3.000000, 194.000000, 201.000000, 0.000000 +5215, -3.000000, 194.000000, 201.000000, 0.000000 +5216, -3.000000, 194.000000, 201.000000, 0.000000 +5217, -3.000000, 194.000000, 201.000000, 0.000000 +5218, -3.000000, 194.000000, 201.000000, 0.000000 +5219, -3.000000, 194.000000, 201.000000, 0.000000 +5220, -3.000000, 194.000000, 201.000000, 0.000000 +5221, -3.000000, 194.000000, 201.000000, 0.000000 +5222, -3.000000, 194.000000, 201.000000, 0.000000 +5223, -3.000000, 194.000000, 201.000000, 0.000000 +5224, -3.000000, 194.000000, 201.000000, 0.000000 +5225, -3.000000, 194.000000, 201.000000, 0.000000 +5226, -3.000000, 194.000000, 201.000000, 0.000000 +5227, -3.000000, 194.000000, 201.000000, 0.000000 +5228, -3.000000, 194.000000, 201.000000, 0.000000 +5229, -3.000000, 194.000000, 201.000000, 0.000000 +5230, -3.000000, 194.000000, 201.000000, 0.000000 +5231, -3.000000, 194.000000, 201.000000, 0.000000 +5232, -3.000000, 194.000000, 201.000000, 0.000000 +5233, -3.000000, 194.000000, 201.000000, 0.000000 +5234, -3.000000, 194.000000, 201.000000, 0.000000 +5235, -3.000000, 194.000000, 201.000000, 0.000000 +5236, -3.000000, 194.000000, 201.000000, 0.000000 +5237, -3.000000, 194.000000, 201.000000, 0.000000 +5238, -3.000000, 194.000000, 201.000000, 0.000000 +5239, -3.000000, 194.000000, 201.000000, 0.000000 +5240, -3.000000, 194.000000, 201.000000, 0.000000 +5241, -3.000000, 194.000000, 201.000000, 0.000000 +5242, -3.000000, 194.000000, 201.000000, 0.000000 +5243, -3.000000, 194.000000, 201.000000, 0.000000 +5244, -3.000000, 194.000000, 201.000000, 0.000000 +5245, -3.000000, 194.000000, 201.000000, 0.000000 +5246, -3.000000, 194.000000, 201.000000, 0.000000 +5247, -3.000000, 194.000000, 201.000000, 0.000000 +5248, -3.000000, 194.000000, 201.000000, 0.000000 +5249, -3.000000, 194.000000, 201.000000, 0.000000 +5250, -3.000000, 194.000000, 201.000000, 0.000000 +5251, -3.000000, 194.000000, 201.000000, 0.000000 +5252, -3.000000, 194.000000, 201.000000, 0.000000 +5253, -3.000000, 194.000000, 201.000000, 0.000000 +5254, -3.000000, 194.000000, 201.000000, 0.000000 +5255, -3.000000, 194.000000, 201.000000, 0.000000 +5256, -3.000000, 194.000000, 201.000000, 0.000000 +5257, -3.000000, 194.000000, 201.000000, 0.000000 +5258, -3.000000, 194.000000, 201.000000, 0.000000 +5259, -3.000000, 194.000000, 201.000000, 0.000000 +5260, -3.000000, 194.000000, 201.000000, 0.000000 +5261, -3.000000, 194.000000, 201.000000, 0.000000 +5262, -3.000000, 194.000000, 201.000000, 0.000000 +5263, -3.000000, 194.000000, 201.000000, 0.000000 +5264, -3.000000, 194.000000, 201.000000, 0.000000 +5265, -3.000000, 194.000000, 201.000000, 0.000000 +5266, -3.000000, 194.000000, 201.000000, 0.000000 +5267, -3.000000, 194.000000, 201.000000, 0.000000 +5268, -3.000000, 194.000000, 201.000000, 0.000000 +5269, -3.000000, 194.000000, 201.000000, 0.000000 +5270, -3.000000, 194.000000, 201.000000, 0.000000 +5271, -3.000000, 194.000000, 201.000000, 0.000000 +5272, -3.000000, 194.000000, 201.000000, 0.000000 +5273, -3.000000, 194.000000, 201.000000, 0.000000 +5274, -3.000000, 194.000000, 201.000000, 0.000000 +5275, -3.000000, 194.000000, 201.000000, 0.000000 +5276, -3.000000, 194.000000, 201.000000, 0.000000 +5277, -3.000000, 194.000000, 201.000000, 0.000000 +5278, -3.000000, 194.000000, 201.000000, 0.000000 +5279, -3.000000, 194.000000, 201.000000, 0.000000 +5280, -3.000000, 194.000000, 201.000000, 0.000000 +5281, -3.000000, 194.000000, 201.000000, 0.000000 +5282, -3.000000, 194.000000, 201.000000, 0.000000 +5283, -3.000000, 194.000000, 201.000000, 0.000000 +5284, -3.000000, 194.000000, 201.000000, 0.000000 +5285, -3.000000, 194.000000, 201.000000, 0.000000 +5286, -3.000000, 194.000000, 201.000000, 0.000000 +5287, -3.000000, 194.000000, 201.000000, 0.000000 +5288, -3.000000, 194.000000, 201.000000, 0.000000 +5289, -3.000000, 194.000000, 201.000000, 0.000000 +5290, -3.000000, 194.000000, 201.000000, 0.000000 +5291, -3.000000, 194.000000, 201.000000, 0.000000 +5292, -3.000000, 194.000000, 201.000000, 0.000000 +5293, -3.000000, 194.000000, 201.000000, 0.000000 +5294, -3.000000, 194.000000, 201.000000, 0.000000 +5295, -3.000000, 194.000000, 201.000000, 0.000000 +5296, -3.000000, 194.000000, 201.000000, 0.000000 +5297, -3.000000, 194.000000, 201.000000, 0.000000 +5298, -3.000000, 194.000000, 201.000000, 0.000000 +5299, -3.000000, 194.000000, 201.000000, 0.000000 +5300, -3.000000, 196.000000, 204.000000, 0.000000 +5301, -3.000000, 196.000000, 204.000000, 0.000000 +5302, -3.000000, 196.000000, 204.000000, 0.000000 +5303, -3.000000, 196.000000, 204.000000, 0.000000 +5304, -3.000000, 196.000000, 204.000000, 0.000000 +5305, -3.000000, 196.000000, 204.000000, 0.000000 +5306, -3.000000, 196.000000, 204.000000, 0.000000 +5307, -3.000000, 196.000000, 204.000000, 0.000000 +5308, -3.000000, 196.000000, 204.000000, 0.000000 +5309, -3.000000, 196.000000, 204.000000, 0.000000 +5310, -3.000000, 196.000000, 204.000000, 0.000000 +5311, -3.000000, 196.000000, 204.000000, 0.000000 +5312, -3.000000, 196.000000, 204.000000, 0.000000 +5313, -3.000000, 196.000000, 204.000000, 0.000000 +5314, -3.000000, 196.000000, 204.000000, 0.000000 +5315, -3.000000, 196.000000, 204.000000, 0.000000 +5316, -3.000000, 196.000000, 204.000000, 0.000000 +5317, -3.000000, 196.000000, 204.000000, 0.000000 +5318, -3.000000, 196.000000, 204.000000, 0.000000 +5319, -3.000000, 196.000000, 204.000000, 0.000000 +5320, -3.000000, 196.000000, 204.000000, 0.000000 +5321, -3.000000, 196.000000, 204.000000, 0.000000 +5322, -3.000000, 196.000000, 204.000000, 0.000000 +5323, -3.000000, 196.000000, 204.000000, 0.000000 +5324, -3.000000, 196.000000, 204.000000, 0.000000 +5325, -3.000000, 196.000000, 204.000000, 0.000000 +5326, -3.000000, 196.000000, 204.000000, 0.000000 +5327, -3.000000, 196.000000, 204.000000, 0.000000 +5328, -3.000000, 196.000000, 204.000000, 0.000000 +5329, -3.000000, 196.000000, 204.000000, 0.000000 +5330, -3.000000, 196.000000, 204.000000, 0.000000 +5331, -3.000000, 196.000000, 204.000000, 0.000000 +5332, -3.000000, 196.000000, 204.000000, 0.000000 +5333, -3.000000, 196.000000, 204.000000, 0.000000 +5334, -3.000000, 196.000000, 204.000000, 0.000000 +5335, -3.000000, 196.000000, 204.000000, 0.000000 +5336, -3.000000, 196.000000, 204.000000, 0.000000 +5337, -3.000000, 196.000000, 204.000000, 0.000000 +5338, -3.000000, 196.000000, 204.000000, 0.000000 +5339, -3.000000, 196.000000, 204.000000, 0.000000 +5340, -3.000000, 196.000000, 204.000000, 0.000000 +5341, -3.000000, 196.000000, 204.000000, 0.000000 +5342, -3.000000, 196.000000, 204.000000, 0.000000 +5343, -3.000000, 196.000000, 204.000000, 0.000000 +5344, -3.000000, 196.000000, 204.000000, 0.000000 +5345, -3.000000, 196.000000, 204.000000, 0.000000 +5346, -3.000000, 196.000000, 204.000000, 0.000000 +5347, -3.000000, 196.000000, 204.000000, 0.000000 +5348, -3.000000, 196.000000, 204.000000, 0.000000 +5349, -3.000000, 196.000000, 204.000000, 0.000000 +5350, -3.000000, 196.000000, 204.000000, 0.000000 +5351, -3.000000, 196.000000, 204.000000, 0.000000 +5352, -3.000000, 196.000000, 204.000000, 0.000000 +5353, -3.000000, 196.000000, 204.000000, 0.000000 +5354, -3.000000, 196.000000, 204.000000, 0.000000 +5355, -3.000000, 196.000000, 204.000000, 0.000000 +5356, -3.000000, 196.000000, 204.000000, 0.000000 +5357, -3.000000, 196.000000, 204.000000, 0.000000 +5358, -3.000000, 196.000000, 204.000000, 0.000000 +5359, -3.000000, 196.000000, 204.000000, 0.000000 +5360, -3.000000, 196.000000, 204.000000, 0.000000 +5361, -3.000000, 196.000000, 204.000000, 0.000000 +5362, -3.000000, 196.000000, 204.000000, 0.000000 +5363, -3.000000, 196.000000, 204.000000, 0.000000 +5364, -3.000000, 196.000000, 204.000000, 0.000000 +5365, -3.000000, 196.000000, 204.000000, 0.000000 +5366, -3.000000, 196.000000, 204.000000, 0.000000 +5367, -3.000000, 196.000000, 204.000000, 0.000000 +5368, -3.000000, 196.000000, 204.000000, 0.000000 +5369, -3.000000, 196.000000, 204.000000, 0.000000 +5370, -3.000000, 196.000000, 204.000000, 0.000000 +5371, -3.000000, 196.000000, 204.000000, 0.000000 +5372, -3.000000, 196.000000, 204.000000, 0.000000 +5373, -3.000000, 196.000000, 204.000000, 0.000000 +5374, -3.000000, 196.000000, 204.000000, 0.000000 +5375, -3.000000, 196.000000, 204.000000, 0.000000 +5376, -3.000000, 196.000000, 204.000000, 0.000000 +5377, -3.000000, 196.000000, 204.000000, 0.000000 +5378, -3.000000, 196.000000, 204.000000, 0.000000 +5379, -3.000000, 196.000000, 204.000000, 0.000000 +5380, -3.000000, 196.000000, 204.000000, 0.000000 +5381, -3.000000, 196.000000, 204.000000, 0.000000 +5382, -3.000000, 196.000000, 204.000000, 0.000000 +5383, -3.000000, 196.000000, 204.000000, 0.000000 +5384, -3.000000, 196.000000, 204.000000, 0.000000 +5385, -3.000000, 196.000000, 204.000000, 0.000000 +5386, -3.000000, 196.000000, 204.000000, 0.000000 +5387, -3.000000, 196.000000, 204.000000, 0.000000 +5388, -3.000000, 196.000000, 204.000000, 0.000000 +5389, -3.000000, 196.000000, 204.000000, 0.000000 +5390, -3.000000, 196.000000, 204.000000, 0.000000 +5391, -3.000000, 196.000000, 204.000000, 0.000000 +5392, -3.000000, 196.000000, 204.000000, 0.000000 +5393, -3.000000, 196.000000, 204.000000, 0.000000 +5394, -3.000000, 196.000000, 204.000000, 0.000000 +5395, -3.000000, 196.000000, 204.000000, 0.000000 +5396, -3.000000, 196.000000, 204.000000, 0.000000 +5397, -3.000000, 196.000000, 204.000000, 0.000000 +5398, -3.000000, 196.000000, 204.000000, 0.000000 +5399, -3.000000, 196.000000, 204.000000, 0.000000 +5400, -3.000000, 198.000000, 207.000000, 0.000000 +5401, -3.000000, 198.000000, 207.000000, 0.000000 +5402, -3.000000, 198.000000, 207.000000, 0.000000 +5403, -3.000000, 198.000000, 207.000000, 0.000000 +5404, -3.000000, 198.000000, 207.000000, 0.000000 +5405, -3.000000, 198.000000, 207.000000, 0.000000 +5406, -3.000000, 198.000000, 207.000000, 0.000000 +5407, -3.000000, 198.000000, 207.000000, 0.000000 +5408, -3.000000, 198.000000, 207.000000, 0.000000 +5409, -3.000000, 198.000000, 207.000000, 0.000000 +5410, -3.000000, 198.000000, 207.000000, 0.000000 +5411, -3.000000, 198.000000, 207.000000, 0.000000 +5412, -3.000000, 198.000000, 207.000000, 0.000000 +5413, -3.000000, 198.000000, 207.000000, 0.000000 +5414, -3.000000, 198.000000, 207.000000, 0.000000 +5415, -3.000000, 198.000000, 207.000000, 0.000000 +5416, -3.000000, 198.000000, 207.000000, 0.000000 +5417, -3.000000, 198.000000, 207.000000, 0.000000 +5418, -3.000000, 198.000000, 207.000000, 0.000000 +5419, -3.000000, 198.000000, 207.000000, 0.000000 +5420, -3.000000, 198.000000, 207.000000, 0.000000 +5421, -3.000000, 198.000000, 207.000000, 0.000000 +5422, -3.000000, 198.000000, 207.000000, 0.000000 +5423, -3.000000, 198.000000, 207.000000, 0.000000 +5424, -3.000000, 198.000000, 207.000000, 0.000000 +5425, -3.000000, 198.000000, 207.000000, 0.000000 +5426, -3.000000, 198.000000, 207.000000, 0.000000 +5427, -3.000000, 198.000000, 207.000000, 0.000000 +5428, -3.000000, 198.000000, 207.000000, 0.000000 +5429, -3.000000, 198.000000, 207.000000, 0.000000 +5430, -3.000000, 198.000000, 207.000000, 0.000000 +5431, -3.000000, 198.000000, 207.000000, 0.000000 +5432, -3.000000, 198.000000, 207.000000, 0.000000 +5433, -3.000000, 198.000000, 207.000000, 0.000000 +5434, -3.000000, 198.000000, 207.000000, 0.000000 +5435, -3.000000, 198.000000, 207.000000, 0.000000 +5436, -3.000000, 198.000000, 207.000000, 0.000000 +5437, -3.000000, 198.000000, 207.000000, 0.000000 +5438, -3.000000, 198.000000, 207.000000, 0.000000 +5439, -3.000000, 198.000000, 207.000000, 0.000000 +5440, -3.000000, 198.000000, 207.000000, 0.000000 +5441, -3.000000, 198.000000, 207.000000, 0.000000 +5442, -3.000000, 198.000000, 207.000000, 0.000000 +5443, -3.000000, 198.000000, 207.000000, 0.000000 +5444, -3.000000, 198.000000, 207.000000, 0.000000 +5445, -3.000000, 198.000000, 207.000000, 0.000000 +5446, -3.000000, 198.000000, 207.000000, 0.000000 +5447, -3.000000, 198.000000, 207.000000, 0.000000 +5448, -3.000000, 198.000000, 207.000000, 0.000000 +5449, -3.000000, 198.000000, 207.000000, 0.000000 +5450, -3.000000, 198.000000, 207.000000, 0.000000 +5451, -3.000000, 198.000000, 207.000000, 0.000000 +5452, -3.000000, 198.000000, 207.000000, 0.000000 +5453, -3.000000, 198.000000, 207.000000, 0.000000 +5454, -3.000000, 198.000000, 207.000000, 0.000000 +5455, -3.000000, 198.000000, 207.000000, 0.000000 +5456, -3.000000, 198.000000, 207.000000, 0.000000 +5457, -3.000000, 198.000000, 207.000000, 0.000000 +5458, -3.000000, 198.000000, 207.000000, 0.000000 +5459, -3.000000, 198.000000, 207.000000, 0.000000 +5460, -3.000000, 198.000000, 207.000000, 0.000000 +5461, -3.000000, 198.000000, 207.000000, 0.000000 +5462, -3.000000, 198.000000, 207.000000, 0.000000 +5463, -3.000000, 198.000000, 207.000000, 0.000000 +5464, -3.000000, 198.000000, 207.000000, 0.000000 +5465, -3.000000, 198.000000, 207.000000, 0.000000 +5466, -3.000000, 198.000000, 207.000000, 0.000000 +5467, -3.000000, 198.000000, 207.000000, 0.000000 +5468, -3.000000, 198.000000, 207.000000, 0.000000 +5469, -3.000000, 198.000000, 207.000000, 0.000000 +5470, -3.000000, 198.000000, 207.000000, 0.000000 +5471, -3.000000, 198.000000, 207.000000, 0.000000 +5472, -3.000000, 198.000000, 207.000000, 0.000000 +5473, -3.000000, 198.000000, 207.000000, 0.000000 +5474, -3.000000, 198.000000, 207.000000, 0.000000 +5475, -3.000000, 198.000000, 207.000000, 0.000000 +5476, -3.000000, 198.000000, 207.000000, 0.000000 +5477, -3.000000, 198.000000, 207.000000, 0.000000 +5478, -3.000000, 198.000000, 207.000000, 0.000000 +5479, -3.000000, 198.000000, 207.000000, 0.000000 +5480, -3.000000, 198.000000, 207.000000, 0.000000 +5481, -3.000000, 198.000000, 207.000000, 0.000000 +5482, -3.000000, 198.000000, 207.000000, 0.000000 +5483, -3.000000, 198.000000, 207.000000, 0.000000 +5484, -3.000000, 198.000000, 207.000000, 0.000000 +5485, -3.000000, 198.000000, 207.000000, 0.000000 +5486, -3.000000, 198.000000, 207.000000, 0.000000 +5487, -3.000000, 198.000000, 207.000000, 0.000000 +5488, -3.000000, 198.000000, 207.000000, 0.000000 +5489, -3.000000, 198.000000, 207.000000, 0.000000 +5490, -3.000000, 198.000000, 207.000000, 0.000000 +5491, -3.000000, 198.000000, 207.000000, 0.000000 +5492, -3.000000, 198.000000, 207.000000, 0.000000 +5493, -3.000000, 198.000000, 207.000000, 0.000000 +5494, -3.000000, 198.000000, 207.000000, 0.000000 +5495, -3.000000, 198.000000, 207.000000, 0.000000 +5496, -3.000000, 198.000000, 207.000000, 0.000000 +5497, -3.000000, 198.000000, 207.000000, 0.000000 +5498, -3.000000, 198.000000, 207.000000, 0.000000 +5499, -3.000000, 198.000000, 207.000000, 0.000000 +5500, -3.000000, 200.000000, 210.000000, 0.000000 +5501, -3.000000, 200.000000, 210.000000, 0.000000 +5502, -3.000000, 200.000000, 210.000000, 0.000000 +5503, -3.000000, 200.000000, 210.000000, 0.000000 +5504, -3.000000, 200.000000, 210.000000, 0.000000 +5505, -3.000000, 200.000000, 210.000000, 0.000000 +5506, -3.000000, 200.000000, 210.000000, 0.000000 +5507, -3.000000, 200.000000, 210.000000, 0.000000 +5508, -3.000000, 200.000000, 210.000000, 0.000000 +5509, -3.000000, 200.000000, 210.000000, 0.000000 +5510, -3.000000, 200.000000, 210.000000, 0.000000 +5511, -3.000000, 200.000000, 210.000000, 0.000000 +5512, -3.000000, 200.000000, 210.000000, 0.000000 +5513, -3.000000, 200.000000, 210.000000, 0.000000 +5514, -3.000000, 200.000000, 210.000000, 0.000000 +5515, -3.000000, 200.000000, 210.000000, 0.000000 +5516, -3.000000, 200.000000, 210.000000, 0.000000 +5517, -3.000000, 200.000000, 210.000000, 0.000000 +5518, -3.000000, 200.000000, 210.000000, 0.000000 +5519, -3.000000, 200.000000, 210.000000, 0.000000 +5520, -3.000000, 200.000000, 210.000000, 0.000000 +5521, -3.000000, 200.000000, 210.000000, 0.000000 +5522, -3.000000, 200.000000, 210.000000, 0.000000 +5523, -3.000000, 200.000000, 210.000000, 0.000000 +5524, -3.000000, 200.000000, 210.000000, 0.000000 +5525, -3.000000, 200.000000, 210.000000, 0.000000 +5526, -3.000000, 200.000000, 210.000000, 0.000000 +5527, -3.000000, 200.000000, 210.000000, 0.000000 +5528, -3.000000, 200.000000, 210.000000, 0.000000 +5529, -3.000000, 200.000000, 210.000000, 0.000000 +5530, -3.000000, 200.000000, 210.000000, 0.000000 +5531, -3.000000, 200.000000, 210.000000, 0.000000 +5532, -3.000000, 200.000000, 210.000000, 0.000000 +5533, -3.000000, 200.000000, 210.000000, 0.000000 +5534, -3.000000, 200.000000, 210.000000, 0.000000 +5535, -3.000000, 200.000000, 210.000000, 0.000000 +5536, -3.000000, 200.000000, 210.000000, 0.000000 +5537, -3.000000, 200.000000, 210.000000, 0.000000 +5538, -3.000000, 200.000000, 210.000000, 0.000000 +5539, -3.000000, 200.000000, 210.000000, 0.000000 +5540, -3.000000, 200.000000, 210.000000, 0.000000 +5541, -3.000000, 200.000000, 210.000000, 0.000000 +5542, -3.000000, 200.000000, 210.000000, 0.000000 +5543, -3.000000, 200.000000, 210.000000, 0.000000 +5544, -3.000000, 200.000000, 210.000000, 0.000000 +5545, -3.000000, 200.000000, 210.000000, 0.000000 +5546, -3.000000, 200.000000, 210.000000, 0.000000 +5547, -3.000000, 200.000000, 210.000000, 0.000000 +5548, -3.000000, 200.000000, 210.000000, 0.000000 +5549, -3.000000, 200.000000, 210.000000, 0.000000 +5550, -3.000000, 200.000000, 210.000000, 0.000000 +5551, -3.000000, 200.000000, 210.000000, 0.000000 +5552, -3.000000, 200.000000, 210.000000, 0.000000 +5553, -3.000000, 200.000000, 210.000000, 0.000000 +5554, -3.000000, 200.000000, 210.000000, 0.000000 +5555, -3.000000, 200.000000, 210.000000, 0.000000 +5556, -3.000000, 200.000000, 210.000000, 0.000000 +5557, -3.000000, 200.000000, 210.000000, 0.000000 +5558, -3.000000, 200.000000, 210.000000, 0.000000 +5559, -3.000000, 200.000000, 210.000000, 0.000000 +5560, -3.000000, 200.000000, 210.000000, 0.000000 +5561, -3.000000, 200.000000, 210.000000, 0.000000 +5562, -3.000000, 200.000000, 210.000000, 0.000000 +5563, -3.000000, 200.000000, 210.000000, 0.000000 +5564, -3.000000, 200.000000, 210.000000, 0.000000 +5565, -3.000000, 200.000000, 210.000000, 0.000000 +5566, -3.000000, 200.000000, 210.000000, 0.000000 +5567, -3.000000, 200.000000, 210.000000, 0.000000 +5568, -3.000000, 200.000000, 210.000000, 0.000000 +5569, -3.000000, 200.000000, 210.000000, 0.000000 +5570, -3.000000, 200.000000, 210.000000, 0.000000 +5571, -3.000000, 200.000000, 210.000000, 0.000000 +5572, -3.000000, 200.000000, 210.000000, 0.000000 +5573, -3.000000, 200.000000, 210.000000, 0.000000 +5574, -3.000000, 200.000000, 210.000000, 0.000000 +5575, -3.000000, 200.000000, 210.000000, 0.000000 +5576, -3.000000, 200.000000, 210.000000, 0.000000 +5577, -3.000000, 200.000000, 210.000000, 0.000000 +5578, -3.000000, 200.000000, 210.000000, 0.000000 +5579, -3.000000, 200.000000, 210.000000, 0.000000 +5580, -3.000000, 200.000000, 210.000000, 0.000000 +5581, -3.000000, 200.000000, 210.000000, 0.000000 +5582, -3.000000, 200.000000, 210.000000, 0.000000 +5583, -3.000000, 200.000000, 210.000000, 0.000000 +5584, -3.000000, 200.000000, 210.000000, 0.000000 +5585, -3.000000, 200.000000, 210.000000, 0.000000 +5586, -3.000000, 200.000000, 210.000000, 0.000000 +5587, -3.000000, 200.000000, 210.000000, 0.000000 +5588, -3.000000, 200.000000, 210.000000, 0.000000 +5589, -3.000000, 200.000000, 210.000000, 0.000000 +5590, -3.000000, 200.000000, 210.000000, 0.000000 +5591, -3.000000, 200.000000, 210.000000, 0.000000 +5592, -3.000000, 200.000000, 210.000000, 0.000000 +5593, -3.000000, 200.000000, 210.000000, 0.000000 +5594, -3.000000, 200.000000, 210.000000, 0.000000 +5595, -3.000000, 200.000000, 210.000000, 0.000000 +5596, -3.000000, 200.000000, 210.000000, 0.000000 +5597, -3.000000, 200.000000, 210.000000, 0.000000 +5598, -3.000000, 200.000000, 210.000000, 0.000000 +5599, -3.000000, 200.000000, 210.000000, 0.000000 +5600, -3.000000, 202.000000, 213.000000, 0.000000 +5601, -3.000000, 202.000000, 213.000000, 0.000000 +5602, -3.000000, 202.000000, 213.000000, 0.000000 +5603, -3.000000, 202.000000, 213.000000, 0.000000 +5604, -3.000000, 202.000000, 213.000000, 0.000000 +5605, -3.000000, 202.000000, 213.000000, 0.000000 +5606, -3.000000, 202.000000, 213.000000, 0.000000 +5607, -3.000000, 202.000000, 213.000000, 0.000000 +5608, -3.000000, 202.000000, 213.000000, 0.000000 +5609, -3.000000, 202.000000, 213.000000, 0.000000 +5610, -3.000000, 202.000000, 213.000000, 0.000000 +5611, -3.000000, 202.000000, 213.000000, 0.000000 +5612, -3.000000, 202.000000, 213.000000, 0.000000 +5613, -3.000000, 202.000000, 213.000000, 0.000000 +5614, -3.000000, 202.000000, 213.000000, 0.000000 +5615, -3.000000, 202.000000, 213.000000, 0.000000 +5616, -3.000000, 202.000000, 213.000000, 0.000000 +5617, -3.000000, 202.000000, 213.000000, 0.000000 +5618, -3.000000, 202.000000, 213.000000, 0.000000 +5619, -3.000000, 202.000000, 213.000000, 0.000000 +5620, -3.000000, 202.000000, 213.000000, 0.000000 +5621, -3.000000, 202.000000, 213.000000, 0.000000 +5622, -3.000000, 202.000000, 213.000000, 0.000000 +5623, -3.000000, 202.000000, 213.000000, 0.000000 +5624, -3.000000, 202.000000, 213.000000, 0.000000 +5625, -3.000000, 202.000000, 213.000000, 0.000000 +5626, -3.000000, 202.000000, 213.000000, 0.000000 +5627, -3.000000, 202.000000, 213.000000, 0.000000 +5628, -3.000000, 202.000000, 213.000000, 0.000000 +5629, -3.000000, 202.000000, 213.000000, 0.000000 +5630, -3.000000, 202.000000, 213.000000, 0.000000 +5631, -3.000000, 202.000000, 213.000000, 0.000000 +5632, -3.000000, 202.000000, 213.000000, 0.000000 +5633, -3.000000, 202.000000, 213.000000, 0.000000 +5634, -3.000000, 202.000000, 213.000000, 0.000000 +5635, -3.000000, 202.000000, 213.000000, 0.000000 +5636, -3.000000, 202.000000, 213.000000, 0.000000 +5637, -3.000000, 202.000000, 213.000000, 0.000000 +5638, -3.000000, 202.000000, 213.000000, 0.000000 +5639, -3.000000, 202.000000, 213.000000, 0.000000 +5640, -3.000000, 202.000000, 213.000000, 0.000000 +5641, -3.000000, 202.000000, 213.000000, 0.000000 +5642, -3.000000, 202.000000, 213.000000, 0.000000 +5643, -3.000000, 202.000000, 213.000000, 0.000000 +5644, -3.000000, 202.000000, 213.000000, 0.000000 +5645, -3.000000, 202.000000, 213.000000, 0.000000 +5646, -3.000000, 202.000000, 213.000000, 0.000000 +5647, -3.000000, 202.000000, 213.000000, 0.000000 +5648, -3.000000, 202.000000, 213.000000, 0.000000 +5649, -3.000000, 202.000000, 213.000000, 0.000000 +5650, -3.000000, 202.000000, 213.000000, 0.000000 +5651, -3.000000, 202.000000, 213.000000, 0.000000 +5652, -3.000000, 202.000000, 213.000000, 0.000000 +5653, -3.000000, 202.000000, 213.000000, 0.000000 +5654, -3.000000, 202.000000, 213.000000, 0.000000 +5655, -3.000000, 202.000000, 213.000000, 0.000000 +5656, -3.000000, 202.000000, 213.000000, 0.000000 +5657, -3.000000, 202.000000, 213.000000, 0.000000 +5658, -3.000000, 202.000000, 213.000000, 0.000000 +5659, -3.000000, 202.000000, 213.000000, 0.000000 +5660, -3.000000, 202.000000, 213.000000, 0.000000 +5661, -3.000000, 202.000000, 213.000000, 0.000000 +5662, -3.000000, 202.000000, 213.000000, 0.000000 +5663, -3.000000, 202.000000, 213.000000, 0.000000 +5664, -3.000000, 202.000000, 213.000000, 0.000000 +5665, -3.000000, 202.000000, 213.000000, 0.000000 +5666, -3.000000, 202.000000, 213.000000, 0.000000 +5667, -3.000000, 202.000000, 213.000000, 0.000000 +5668, -3.000000, 202.000000, 213.000000, 0.000000 +5669, -3.000000, 202.000000, 213.000000, 0.000000 +5670, -3.000000, 202.000000, 213.000000, 0.000000 +5671, -3.000000, 202.000000, 213.000000, 0.000000 +5672, -3.000000, 202.000000, 213.000000, 0.000000 +5673, -3.000000, 202.000000, 213.000000, 0.000000 +5674, -3.000000, 202.000000, 213.000000, 0.000000 +5675, -3.000000, 202.000000, 213.000000, 0.000000 +5676, -3.000000, 202.000000, 213.000000, 0.000000 +5677, -3.000000, 202.000000, 213.000000, 0.000000 +5678, -3.000000, 202.000000, 213.000000, 0.000000 +5679, -3.000000, 202.000000, 213.000000, 0.000000 +5680, -3.000000, 202.000000, 213.000000, 0.000000 +5681, -3.000000, 202.000000, 213.000000, 0.000000 +5682, -3.000000, 202.000000, 213.000000, 0.000000 +5683, -3.000000, 202.000000, 213.000000, 0.000000 +5684, -3.000000, 202.000000, 213.000000, 0.000000 +5685, -3.000000, 202.000000, 213.000000, 0.000000 +5686, -3.000000, 202.000000, 213.000000, 0.000000 +5687, -3.000000, 202.000000, 213.000000, 0.000000 +5688, -3.000000, 202.000000, 213.000000, 0.000000 +5689, -3.000000, 202.000000, 213.000000, 0.000000 +5690, -3.000000, 202.000000, 213.000000, 0.000000 +5691, -3.000000, 202.000000, 213.000000, 0.000000 +5692, -3.000000, 202.000000, 213.000000, 0.000000 +5693, -3.000000, 202.000000, 213.000000, 0.000000 +5694, -3.000000, 202.000000, 213.000000, 0.000000 +5695, -3.000000, 202.000000, 213.000000, 0.000000 +5696, -3.000000, 202.000000, 213.000000, 0.000000 +5697, -3.000000, 202.000000, 213.000000, 0.000000 +5698, -3.000000, 202.000000, 213.000000, 0.000000 +5699, -3.000000, 202.000000, 213.000000, 0.000000 +5700, -3.000000, 204.000000, 216.000000, 0.000000 +5701, -3.000000, 204.000000, 216.000000, 0.000000 +5702, -3.000000, 204.000000, 216.000000, 0.000000 +5703, -3.000000, 204.000000, 216.000000, 0.000000 +5704, -3.000000, 204.000000, 216.000000, 0.000000 +5705, -3.000000, 204.000000, 216.000000, 0.000000 +5706, -3.000000, 204.000000, 216.000000, 0.000000 +5707, -3.000000, 204.000000, 216.000000, 0.000000 +5708, -3.000000, 204.000000, 216.000000, 0.000000 +5709, -3.000000, 204.000000, 216.000000, 0.000000 +5710, -3.000000, 204.000000, 216.000000, 0.000000 +5711, -3.000000, 204.000000, 216.000000, 0.000000 +5712, -3.000000, 204.000000, 216.000000, 0.000000 +5713, -3.000000, 204.000000, 216.000000, 0.000000 +5714, -3.000000, 204.000000, 216.000000, 0.000000 +5715, -3.000000, 204.000000, 216.000000, 0.000000 +5716, -3.000000, 204.000000, 216.000000, 0.000000 +5717, -3.000000, 204.000000, 216.000000, 0.000000 +5718, -3.000000, 204.000000, 216.000000, 0.000000 +5719, -3.000000, 204.000000, 216.000000, 0.000000 +5720, -3.000000, 204.000000, 216.000000, 0.000000 +5721, -3.000000, 204.000000, 216.000000, 0.000000 +5722, -3.000000, 204.000000, 216.000000, 0.000000 +5723, -3.000000, 204.000000, 216.000000, 0.000000 +5724, -3.000000, 204.000000, 216.000000, 0.000000 +5725, -3.000000, 204.000000, 216.000000, 0.000000 +5726, -3.000000, 204.000000, 216.000000, 0.000000 +5727, -3.000000, 204.000000, 216.000000, 0.000000 +5728, -3.000000, 204.000000, 216.000000, 0.000000 +5729, -3.000000, 204.000000, 216.000000, 0.000000 +5730, -3.000000, 204.000000, 216.000000, 0.000000 +5731, -3.000000, 204.000000, 216.000000, 0.000000 +5732, -3.000000, 204.000000, 216.000000, 0.000000 +5733, -3.000000, 204.000000, 216.000000, 0.000000 +5734, -3.000000, 204.000000, 216.000000, 0.000000 +5735, -3.000000, 204.000000, 216.000000, 0.000000 +5736, -3.000000, 204.000000, 216.000000, 0.000000 +5737, -3.000000, 204.000000, 216.000000, 0.000000 +5738, -3.000000, 204.000000, 216.000000, 0.000000 +5739, -3.000000, 204.000000, 216.000000, 0.000000 +5740, -3.000000, 204.000000, 216.000000, 0.000000 +5741, -3.000000, 204.000000, 216.000000, 0.000000 +5742, -3.000000, 204.000000, 216.000000, 0.000000 +5743, -3.000000, 204.000000, 216.000000, 0.000000 +5744, -3.000000, 204.000000, 216.000000, 0.000000 +5745, -3.000000, 204.000000, 216.000000, 0.000000 +5746, -3.000000, 204.000000, 216.000000, 0.000000 +5747, -3.000000, 204.000000, 216.000000, 0.000000 +5748, -3.000000, 204.000000, 216.000000, 0.000000 +5749, -3.000000, 204.000000, 216.000000, 0.000000 +5750, -3.000000, 204.000000, 216.000000, 0.000000 +5751, -3.000000, 204.000000, 216.000000, 0.000000 +5752, -3.000000, 204.000000, 216.000000, 0.000000 +5753, -3.000000, 204.000000, 216.000000, 0.000000 +5754, -3.000000, 204.000000, 216.000000, 0.000000 +5755, -3.000000, 204.000000, 216.000000, 0.000000 +5756, -3.000000, 204.000000, 216.000000, 0.000000 +5757, -3.000000, 204.000000, 216.000000, 0.000000 +5758, -3.000000, 204.000000, 216.000000, 0.000000 +5759, -3.000000, 204.000000, 216.000000, 0.000000 +5760, -3.000000, 204.000000, 216.000000, 0.000000 +5761, -3.000000, 204.000000, 216.000000, 0.000000 +5762, -3.000000, 204.000000, 216.000000, 0.000000 +5763, -3.000000, 204.000000, 216.000000, 0.000000 +5764, -3.000000, 204.000000, 216.000000, 0.000000 +5765, -3.000000, 204.000000, 216.000000, 0.000000 +5766, -3.000000, 204.000000, 216.000000, 0.000000 +5767, -3.000000, 204.000000, 216.000000, 0.000000 +5768, -3.000000, 204.000000, 216.000000, 0.000000 +5769, -3.000000, 204.000000, 216.000000, 0.000000 +5770, -3.000000, 204.000000, 216.000000, 0.000000 +5771, -3.000000, 204.000000, 216.000000, 0.000000 +5772, -3.000000, 204.000000, 216.000000, 0.000000 +5773, -3.000000, 204.000000, 216.000000, 0.000000 +5774, -3.000000, 204.000000, 216.000000, 0.000000 +5775, -3.000000, 204.000000, 216.000000, 0.000000 +5776, -3.000000, 204.000000, 216.000000, 0.000000 +5777, -3.000000, 204.000000, 216.000000, 0.000000 +5778, -3.000000, 204.000000, 216.000000, 0.000000 +5779, -3.000000, 204.000000, 216.000000, 0.000000 +5780, -3.000000, 204.000000, 216.000000, 0.000000 +5781, -3.000000, 204.000000, 216.000000, 0.000000 +5782, -3.000000, 204.000000, 216.000000, 0.000000 +5783, -3.000000, 204.000000, 216.000000, 0.000000 +5784, -3.000000, 204.000000, 216.000000, 0.000000 +5785, -3.000000, 204.000000, 216.000000, 0.000000 +5786, -3.000000, 204.000000, 216.000000, 0.000000 +5787, -3.000000, 204.000000, 216.000000, 0.000000 +5788, -3.000000, 204.000000, 216.000000, 0.000000 +5789, -3.000000, 204.000000, 216.000000, 0.000000 +5790, -3.000000, 204.000000, 216.000000, 0.000000 +5791, -3.000000, 204.000000, 216.000000, 0.000000 +5792, -3.000000, 204.000000, 216.000000, 0.000000 +5793, -3.000000, 204.000000, 216.000000, 0.000000 +5794, -3.000000, 204.000000, 216.000000, 0.000000 +5795, -3.000000, 204.000000, 216.000000, 0.000000 +5796, -3.000000, 204.000000, 216.000000, 0.000000 +5797, -3.000000, 204.000000, 216.000000, 0.000000 +5798, -3.000000, 204.000000, 216.000000, 0.000000 +5799, -3.000000, 204.000000, 216.000000, 0.000000 +5800, -3.000000, 206.000000, 219.000000, 0.000000 +5801, -3.000000, 206.000000, 219.000000, 0.000000 +5802, -3.000000, 206.000000, 219.000000, 0.000000 +5803, -3.000000, 206.000000, 219.000000, 0.000000 +5804, -3.000000, 206.000000, 219.000000, 0.000000 +5805, -3.000000, 206.000000, 219.000000, 0.000000 +5806, -3.000000, 206.000000, 219.000000, 0.000000 +5807, -3.000000, 206.000000, 219.000000, 0.000000 +5808, -3.000000, 206.000000, 219.000000, 0.000000 +5809, -3.000000, 206.000000, 219.000000, 0.000000 +5810, -3.000000, 206.000000, 219.000000, 0.000000 +5811, -3.000000, 206.000000, 219.000000, 0.000000 +5812, -3.000000, 206.000000, 219.000000, 0.000000 +5813, -3.000000, 206.000000, 219.000000, 0.000000 +5814, -3.000000, 206.000000, 219.000000, 0.000000 +5815, -3.000000, 206.000000, 219.000000, 0.000000 +5816, -3.000000, 206.000000, 219.000000, 0.000000 +5817, -3.000000, 206.000000, 219.000000, 0.000000 +5818, -3.000000, 206.000000, 219.000000, 0.000000 +5819, -3.000000, 206.000000, 219.000000, 0.000000 +5820, -3.000000, 206.000000, 219.000000, 0.000000 +5821, -3.000000, 206.000000, 219.000000, 0.000000 +5822, -3.000000, 206.000000, 219.000000, 0.000000 +5823, -3.000000, 206.000000, 219.000000, 0.000000 +5824, -3.000000, 206.000000, 219.000000, 0.000000 +5825, -3.000000, 206.000000, 219.000000, 0.000000 +5826, -3.000000, 206.000000, 219.000000, 0.000000 +5827, -3.000000, 206.000000, 219.000000, 0.000000 +5828, -3.000000, 206.000000, 219.000000, 0.000000 +5829, -3.000000, 206.000000, 219.000000, 0.000000 +5830, -3.000000, 206.000000, 219.000000, 0.000000 +5831, -3.000000, 206.000000, 219.000000, 0.000000 +5832, -3.000000, 206.000000, 219.000000, 0.000000 +5833, -3.000000, 206.000000, 219.000000, 0.000000 +5834, -3.000000, 206.000000, 219.000000, 0.000000 +5835, -3.000000, 206.000000, 219.000000, 0.000000 +5836, -3.000000, 206.000000, 219.000000, 0.000000 +5837, -3.000000, 206.000000, 219.000000, 0.000000 +5838, -3.000000, 206.000000, 219.000000, 0.000000 +5839, -3.000000, 206.000000, 219.000000, 0.000000 +5840, -3.000000, 206.000000, 219.000000, 0.000000 +5841, -3.000000, 206.000000, 219.000000, 0.000000 +5842, -3.000000, 206.000000, 219.000000, 0.000000 +5843, -3.000000, 206.000000, 219.000000, 0.000000 +5844, -3.000000, 206.000000, 219.000000, 0.000000 +5845, -3.000000, 206.000000, 219.000000, 0.000000 +5846, -3.000000, 206.000000, 219.000000, 0.000000 +5847, -3.000000, 206.000000, 219.000000, 0.000000 +5848, -3.000000, 206.000000, 219.000000, 0.000000 +5849, -3.000000, 206.000000, 219.000000, 0.000000 +5850, -3.000000, 206.000000, 219.000000, 0.000000 +5851, -3.000000, 206.000000, 219.000000, 0.000000 +5852, -3.000000, 206.000000, 219.000000, 0.000000 +5853, -3.000000, 206.000000, 219.000000, 0.000000 +5854, -3.000000, 206.000000, 219.000000, 0.000000 +5855, -3.000000, 206.000000, 219.000000, 0.000000 +5856, -3.000000, 206.000000, 219.000000, 0.000000 +5857, -3.000000, 206.000000, 219.000000, 0.000000 +5858, -3.000000, 206.000000, 219.000000, 0.000000 +5859, -3.000000, 206.000000, 219.000000, 0.000000 +5860, -3.000000, 206.000000, 219.000000, 0.000000 +5861, -3.000000, 206.000000, 219.000000, 0.000000 +5862, -3.000000, 206.000000, 219.000000, 0.000000 +5863, -3.000000, 206.000000, 219.000000, 0.000000 +5864, -3.000000, 206.000000, 219.000000, 0.000000 +5865, -3.000000, 206.000000, 219.000000, 0.000000 +5866, -3.000000, 206.000000, 219.000000, 0.000000 +5867, -3.000000, 206.000000, 219.000000, 0.000000 +5868, -3.000000, 206.000000, 219.000000, 0.000000 +5869, -3.000000, 206.000000, 219.000000, 0.000000 +5870, -3.000000, 206.000000, 219.000000, 0.000000 +5871, -3.000000, 206.000000, 219.000000, 0.000000 +5872, -3.000000, 206.000000, 219.000000, 0.000000 +5873, -3.000000, 206.000000, 219.000000, 0.000000 +5874, -3.000000, 206.000000, 219.000000, 0.000000 +5875, -3.000000, 206.000000, 219.000000, 0.000000 +5876, -3.000000, 206.000000, 219.000000, 0.000000 +5877, -3.000000, 206.000000, 219.000000, 0.000000 +5878, -3.000000, 206.000000, 219.000000, 0.000000 +5879, -3.000000, 206.000000, 219.000000, 0.000000 +5880, -3.000000, 206.000000, 219.000000, 0.000000 +5881, -3.000000, 206.000000, 219.000000, 0.000000 +5882, -3.000000, 206.000000, 219.000000, 0.000000 +5883, -3.000000, 206.000000, 219.000000, 0.000000 +5884, -3.000000, 206.000000, 219.000000, 0.000000 +5885, -3.000000, 206.000000, 219.000000, 0.000000 +5886, -3.000000, 206.000000, 219.000000, 0.000000 +5887, -3.000000, 206.000000, 219.000000, 0.000000 +5888, -3.000000, 206.000000, 219.000000, 0.000000 +5889, -3.000000, 206.000000, 219.000000, 0.000000 +5890, -3.000000, 206.000000, 219.000000, 0.000000 +5891, -3.000000, 206.000000, 219.000000, 0.000000 +5892, -3.000000, 206.000000, 219.000000, 0.000000 +5893, -3.000000, 206.000000, 219.000000, 0.000000 +5894, -3.000000, 206.000000, 219.000000, 0.000000 +5895, -3.000000, 206.000000, 219.000000, 0.000000 +5896, -3.000000, 206.000000, 219.000000, 0.000000 +5897, -3.000000, 206.000000, 219.000000, 0.000000 +5898, -3.000000, 206.000000, 219.000000, 0.000000 +5899, -3.000000, 206.000000, 219.000000, 0.000000 +5900, -3.000000, 208.000000, 222.000000, 0.000000 +5901, -3.000000, 208.000000, 222.000000, 0.000000 +5902, -3.000000, 208.000000, 222.000000, 0.000000 +5903, -3.000000, 208.000000, 222.000000, 0.000000 +5904, -3.000000, 208.000000, 222.000000, 0.000000 +5905, -3.000000, 208.000000, 222.000000, 0.000000 +5906, -3.000000, 208.000000, 222.000000, 0.000000 +5907, -3.000000, 208.000000, 222.000000, 0.000000 +5908, -3.000000, 208.000000, 222.000000, 0.000000 +5909, -3.000000, 208.000000, 222.000000, 0.000000 +5910, -3.000000, 208.000000, 222.000000, 0.000000 +5911, -3.000000, 208.000000, 222.000000, 0.000000 +5912, -3.000000, 208.000000, 222.000000, 0.000000 +5913, -3.000000, 208.000000, 222.000000, 0.000000 +5914, -3.000000, 208.000000, 222.000000, 0.000000 +5915, -3.000000, 208.000000, 222.000000, 0.000000 +5916, -3.000000, 208.000000, 222.000000, 0.000000 +5917, -3.000000, 208.000000, 222.000000, 0.000000 +5918, -3.000000, 208.000000, 222.000000, 0.000000 +5919, -3.000000, 208.000000, 222.000000, 0.000000 +5920, -3.000000, 208.000000, 222.000000, 0.000000 +5921, -3.000000, 208.000000, 222.000000, 0.000000 +5922, -3.000000, 208.000000, 222.000000, 0.000000 +5923, -3.000000, 208.000000, 222.000000, 0.000000 +5924, -3.000000, 208.000000, 222.000000, 0.000000 +5925, -3.000000, 208.000000, 222.000000, 0.000000 +5926, -3.000000, 208.000000, 222.000000, 0.000000 +5927, -3.000000, 208.000000, 222.000000, 0.000000 +5928, -3.000000, 208.000000, 222.000000, 0.000000 +5929, -3.000000, 208.000000, 222.000000, 0.000000 +5930, -3.000000, 208.000000, 222.000000, 0.000000 +5931, -3.000000, 208.000000, 222.000000, 0.000000 +5932, -3.000000, 208.000000, 222.000000, 0.000000 +5933, -3.000000, 208.000000, 222.000000, 0.000000 +5934, -3.000000, 208.000000, 222.000000, 0.000000 +5935, -3.000000, 208.000000, 222.000000, 0.000000 +5936, -3.000000, 208.000000, 222.000000, 0.000000 +5937, -3.000000, 208.000000, 222.000000, 0.000000 +5938, -3.000000, 208.000000, 222.000000, 0.000000 +5939, -3.000000, 208.000000, 222.000000, 0.000000 +5940, -3.000000, 208.000000, 222.000000, 0.000000 +5941, -3.000000, 208.000000, 222.000000, 0.000000 +5942, -3.000000, 208.000000, 222.000000, 0.000000 +5943, -3.000000, 208.000000, 222.000000, 0.000000 +5944, -3.000000, 208.000000, 222.000000, 0.000000 +5945, -3.000000, 208.000000, 222.000000, 0.000000 +5946, -3.000000, 208.000000, 222.000000, 0.000000 +5947, -3.000000, 208.000000, 222.000000, 0.000000 +5948, -3.000000, 208.000000, 222.000000, 0.000000 +5949, -3.000000, 208.000000, 222.000000, 0.000000 +5950, -3.000000, 208.000000, 222.000000, 0.000000 +5951, -3.000000, 208.000000, 222.000000, 0.000000 +5952, -3.000000, 208.000000, 222.000000, 0.000000 +5953, -3.000000, 208.000000, 222.000000, 0.000000 +5954, -3.000000, 208.000000, 222.000000, 0.000000 +5955, -3.000000, 208.000000, 222.000000, 0.000000 +5956, -3.000000, 208.000000, 222.000000, 0.000000 +5957, -3.000000, 208.000000, 222.000000, 0.000000 +5958, -3.000000, 208.000000, 222.000000, 0.000000 +5959, -3.000000, 208.000000, 222.000000, 0.000000 +5960, -3.000000, 208.000000, 222.000000, 0.000000 +5961, -3.000000, 208.000000, 222.000000, 0.000000 +5962, -3.000000, 208.000000, 222.000000, 0.000000 +5963, -3.000000, 208.000000, 222.000000, 0.000000 +5964, -3.000000, 208.000000, 222.000000, 0.000000 +5965, -3.000000, 208.000000, 222.000000, 0.000000 +5966, -3.000000, 208.000000, 222.000000, 0.000000 +5967, -3.000000, 208.000000, 222.000000, 0.000000 +5968, -3.000000, 208.000000, 222.000000, 0.000000 +5969, -3.000000, 208.000000, 222.000000, 0.000000 +5970, -3.000000, 208.000000, 222.000000, 0.000000 +5971, -3.000000, 208.000000, 222.000000, 0.000000 +5972, -3.000000, 208.000000, 222.000000, 0.000000 +5973, -3.000000, 208.000000, 222.000000, 0.000000 +5974, -3.000000, 208.000000, 222.000000, 0.000000 +5975, -3.000000, 208.000000, 222.000000, 0.000000 +5976, -3.000000, 208.000000, 222.000000, 0.000000 +5977, -3.000000, 208.000000, 222.000000, 0.000000 +5978, -3.000000, 208.000000, 222.000000, 0.000000 +5979, -3.000000, 208.000000, 222.000000, 0.000000 +5980, -3.000000, 208.000000, 222.000000, 0.000000 +5981, -3.000000, 208.000000, 222.000000, 0.000000 +5982, -3.000000, 208.000000, 222.000000, 0.000000 +5983, -3.000000, 208.000000, 222.000000, 0.000000 +5984, -3.000000, 208.000000, 222.000000, 0.000000 +5985, -3.000000, 208.000000, 222.000000, 0.000000 +5986, -3.000000, 208.000000, 222.000000, 0.000000 +5987, -3.000000, 208.000000, 222.000000, 0.000000 +5988, -3.000000, 208.000000, 222.000000, 0.000000 +5989, -3.000000, 208.000000, 222.000000, 0.000000 +5990, -3.000000, 208.000000, 222.000000, 0.000000 +5991, -3.000000, 208.000000, 222.000000, 0.000000 +5992, -3.000000, 208.000000, 222.000000, 0.000000 +5993, -3.000000, 208.000000, 222.000000, 0.000000 +5994, -3.000000, 208.000000, 222.000000, 0.000000 +5995, -3.000000, 208.000000, 222.000000, 0.000000 +5996, -3.000000, 208.000000, 222.000000, 0.000000 +5997, -3.000000, 208.000000, 222.000000, 0.000000 +5998, -3.000000, 208.000000, 222.000000, 0.000000 +5999, -3.000000, 208.000000, 222.000000, 0.000000 +6000, -3.000000, 210.000000, 225.000000, 0.000000 +6001, -3.000000, 210.000000, 225.000000, 0.000000 +6002, -3.000000, 210.000000, 225.000000, 0.000000 +6003, -3.000000, 210.000000, 225.000000, 0.000000 +6004, -3.000000, 210.000000, 225.000000, 0.000000 +6005, -3.000000, 210.000000, 225.000000, 0.000000 +6006, -3.000000, 210.000000, 225.000000, 0.000000 +6007, -3.000000, 210.000000, 225.000000, 0.000000 +6008, -3.000000, 210.000000, 225.000000, 0.000000 +6009, -3.000000, 210.000000, 225.000000, 0.000000 +6010, -3.000000, 210.000000, 225.000000, 0.000000 +6011, -3.000000, 210.000000, 225.000000, 0.000000 +6012, -3.000000, 210.000000, 225.000000, 0.000000 +6013, -3.000000, 210.000000, 225.000000, 0.000000 +6014, -3.000000, 210.000000, 225.000000, 0.000000 +6015, -3.000000, 210.000000, 225.000000, 0.000000 +6016, -3.000000, 210.000000, 225.000000, 0.000000 +6017, -3.000000, 210.000000, 225.000000, 0.000000 +6018, -3.000000, 210.000000, 225.000000, 0.000000 +6019, -3.000000, 210.000000, 225.000000, 0.000000 +6020, -3.000000, 210.000000, 225.000000, 0.000000 +6021, -3.000000, 210.000000, 225.000000, 0.000000 +6022, -3.000000, 210.000000, 225.000000, 0.000000 +6023, -3.000000, 210.000000, 225.000000, 0.000000 +6024, -3.000000, 210.000000, 225.000000, 0.000000 +6025, -3.000000, 210.000000, 225.000000, 0.000000 +6026, -3.000000, 210.000000, 225.000000, 0.000000 +6027, -3.000000, 210.000000, 225.000000, 0.000000 +6028, -3.000000, 210.000000, 225.000000, 0.000000 +6029, -3.000000, 210.000000, 225.000000, 0.000000 +6030, -3.000000, 210.000000, 225.000000, 0.000000 +6031, -3.000000, 210.000000, 225.000000, 0.000000 +6032, -3.000000, 210.000000, 225.000000, 0.000000 +6033, -3.000000, 210.000000, 225.000000, 0.000000 +6034, -3.000000, 210.000000, 225.000000, 0.000000 +6035, -3.000000, 210.000000, 225.000000, 0.000000 +6036, -3.000000, 210.000000, 225.000000, 0.000000 +6037, -3.000000, 210.000000, 225.000000, 0.000000 +6038, -3.000000, 210.000000, 225.000000, 0.000000 +6039, -3.000000, 210.000000, 225.000000, 0.000000 +6040, -3.000000, 210.000000, 225.000000, 0.000000 +6041, -3.000000, 210.000000, 225.000000, 0.000000 +6042, -3.000000, 210.000000, 225.000000, 0.000000 +6043, -3.000000, 210.000000, 225.000000, 0.000000 +6044, -3.000000, 210.000000, 225.000000, 0.000000 +6045, -3.000000, 210.000000, 225.000000, 0.000000 +6046, -3.000000, 210.000000, 225.000000, 0.000000 +6047, -3.000000, 210.000000, 225.000000, 0.000000 +6048, -3.000000, 210.000000, 225.000000, 0.000000 +6049, -3.000000, 210.000000, 225.000000, 0.000000 +6050, -3.000000, 210.000000, 225.000000, 0.000000 +6051, -3.000000, 210.000000, 225.000000, 0.000000 +6052, -3.000000, 210.000000, 225.000000, 0.000000 +6053, -3.000000, 210.000000, 225.000000, 0.000000 +6054, -3.000000, 210.000000, 225.000000, 0.000000 +6055, -3.000000, 210.000000, 225.000000, 0.000000 +6056, -3.000000, 210.000000, 225.000000, 0.000000 +6057, -3.000000, 210.000000, 225.000000, 0.000000 +6058, -3.000000, 210.000000, 225.000000, 0.000000 +6059, -3.000000, 210.000000, 225.000000, 0.000000 +6060, -3.000000, 210.000000, 225.000000, 0.000000 +6061, -3.000000, 210.000000, 225.000000, 0.000000 +6062, -3.000000, 210.000000, 225.000000, 0.000000 +6063, -3.000000, 210.000000, 225.000000, 0.000000 +6064, -3.000000, 210.000000, 225.000000, 0.000000 +6065, -3.000000, 210.000000, 225.000000, 0.000000 +6066, -3.000000, 210.000000, 225.000000, 0.000000 +6067, -3.000000, 210.000000, 225.000000, 0.000000 +6068, -3.000000, 210.000000, 225.000000, 0.000000 +6069, -3.000000, 210.000000, 225.000000, 0.000000 +6070, -3.000000, 210.000000, 225.000000, 0.000000 +6071, -3.000000, 210.000000, 225.000000, 0.000000 +6072, -3.000000, 210.000000, 225.000000, 0.000000 +6073, -3.000000, 210.000000, 225.000000, 0.000000 +6074, -3.000000, 210.000000, 225.000000, 0.000000 +6075, -3.000000, 210.000000, 225.000000, 0.000000 +6076, -3.000000, 210.000000, 225.000000, 0.000000 +6077, -3.000000, 210.000000, 225.000000, 0.000000 +6078, -3.000000, 210.000000, 225.000000, 0.000000 +6079, -3.000000, 210.000000, 225.000000, 0.000000 +6080, -3.000000, 210.000000, 225.000000, 0.000000 +6081, -3.000000, 210.000000, 225.000000, 0.000000 +6082, -3.000000, 210.000000, 225.000000, 0.000000 +6083, -3.000000, 210.000000, 225.000000, 0.000000 +6084, -3.000000, 210.000000, 225.000000, 0.000000 +6085, -3.000000, 210.000000, 225.000000, 0.000000 +6086, -3.000000, 210.000000, 225.000000, 0.000000 +6087, -3.000000, 210.000000, 225.000000, 0.000000 +6088, -3.000000, 210.000000, 225.000000, 0.000000 +6089, -3.000000, 210.000000, 225.000000, 0.000000 +6090, -3.000000, 210.000000, 225.000000, 0.000000 +6091, -3.000000, 210.000000, 225.000000, 0.000000 +6092, -3.000000, 210.000000, 225.000000, 0.000000 +6093, -3.000000, 210.000000, 225.000000, 0.000000 +6094, -3.000000, 210.000000, 225.000000, 0.000000 +6095, -3.000000, 210.000000, 225.000000, 0.000000 +6096, -3.000000, 210.000000, 225.000000, 0.000000 +6097, -3.000000, 210.000000, 225.000000, 0.000000 +6098, -3.000000, 210.000000, 225.000000, 0.000000 +6099, -3.000000, 210.000000, 225.000000, 0.000000 +6100, -3.000000, 212.000000, 228.000000, 0.000000 +6101, -3.000000, 212.000000, 228.000000, 0.000000 +6102, -3.000000, 212.000000, 228.000000, 0.000000 +6103, -3.000000, 212.000000, 228.000000, 0.000000 +6104, -3.000000, 212.000000, 228.000000, 0.000000 +6105, -3.000000, 212.000000, 228.000000, 0.000000 +6106, -3.000000, 212.000000, 228.000000, 0.000000 +6107, -3.000000, 212.000000, 228.000000, 0.000000 +6108, -3.000000, 212.000000, 228.000000, 0.000000 +6109, -3.000000, 212.000000, 228.000000, 0.000000 +6110, -3.000000, 212.000000, 228.000000, 0.000000 +6111, -3.000000, 212.000000, 228.000000, 0.000000 +6112, -3.000000, 212.000000, 228.000000, 0.000000 +6113, -3.000000, 212.000000, 228.000000, 0.000000 +6114, -3.000000, 212.000000, 228.000000, 0.000000 +6115, -3.000000, 212.000000, 228.000000, 0.000000 +6116, -3.000000, 212.000000, 228.000000, 0.000000 +6117, -3.000000, 212.000000, 228.000000, 0.000000 +6118, -3.000000, 212.000000, 228.000000, 0.000000 +6119, -3.000000, 212.000000, 228.000000, 0.000000 +6120, -3.000000, 212.000000, 228.000000, 0.000000 +6121, -3.000000, 212.000000, 228.000000, 0.000000 +6122, -3.000000, 212.000000, 228.000000, 0.000000 +6123, -3.000000, 212.000000, 228.000000, 0.000000 +6124, -3.000000, 212.000000, 228.000000, 0.000000 +6125, -3.000000, 212.000000, 228.000000, 0.000000 +6126, -3.000000, 212.000000, 228.000000, 0.000000 +6127, -3.000000, 212.000000, 228.000000, 0.000000 +6128, -3.000000, 212.000000, 228.000000, 0.000000 +6129, -3.000000, 212.000000, 228.000000, 0.000000 +6130, -3.000000, 212.000000, 228.000000, 0.000000 +6131, -3.000000, 212.000000, 228.000000, 0.000000 +6132, -3.000000, 212.000000, 228.000000, 0.000000 +6133, -3.000000, 212.000000, 228.000000, 0.000000 +6134, -3.000000, 212.000000, 228.000000, 0.000000 +6135, -3.000000, 212.000000, 228.000000, 0.000000 +6136, -3.000000, 212.000000, 228.000000, 0.000000 +6137, -3.000000, 212.000000, 228.000000, 0.000000 +6138, -3.000000, 212.000000, 228.000000, 0.000000 +6139, -3.000000, 212.000000, 228.000000, 0.000000 +6140, -3.000000, 212.000000, 228.000000, 0.000000 +6141, -3.000000, 212.000000, 228.000000, 0.000000 +6142, -3.000000, 212.000000, 228.000000, 0.000000 +6143, -3.000000, 212.000000, 228.000000, 0.000000 +6144, -3.000000, 212.000000, 228.000000, 0.000000 +6145, -3.000000, 212.000000, 228.000000, 0.000000 +6146, -3.000000, 212.000000, 228.000000, 0.000000 +6147, -3.000000, 212.000000, 228.000000, 0.000000 +6148, -3.000000, 212.000000, 228.000000, 0.000000 +6149, -3.000000, 212.000000, 228.000000, 0.000000 +6150, -3.000000, 212.000000, 228.000000, 0.000000 +6151, -3.000000, 212.000000, 228.000000, 0.000000 +6152, -3.000000, 212.000000, 228.000000, 0.000000 +6153, -3.000000, 212.000000, 228.000000, 0.000000 +6154, -3.000000, 212.000000, 228.000000, 0.000000 +6155, -3.000000, 212.000000, 228.000000, 0.000000 +6156, -3.000000, 212.000000, 228.000000, 0.000000 +6157, -3.000000, 212.000000, 228.000000, 0.000000 +6158, -3.000000, 212.000000, 228.000000, 0.000000 +6159, -3.000000, 212.000000, 228.000000, 0.000000 +6160, -3.000000, 212.000000, 228.000000, 0.000000 +6161, -3.000000, 212.000000, 228.000000, 0.000000 +6162, -3.000000, 212.000000, 228.000000, 0.000000 +6163, -3.000000, 212.000000, 228.000000, 0.000000 +6164, -3.000000, 212.000000, 228.000000, 0.000000 +6165, -3.000000, 212.000000, 228.000000, 0.000000 +6166, -3.000000, 212.000000, 228.000000, 0.000000 +6167, -3.000000, 212.000000, 228.000000, 0.000000 +6168, -3.000000, 212.000000, 228.000000, 0.000000 +6169, -3.000000, 212.000000, 228.000000, 0.000000 +6170, -3.000000, 212.000000, 228.000000, 0.000000 +6171, -3.000000, 212.000000, 228.000000, 0.000000 +6172, -3.000000, 212.000000, 228.000000, 0.000000 +6173, -3.000000, 212.000000, 228.000000, 0.000000 +6174, -3.000000, 212.000000, 228.000000, 0.000000 +6175, -3.000000, 212.000000, 228.000000, 0.000000 +6176, -3.000000, 212.000000, 228.000000, 0.000000 +6177, -3.000000, 212.000000, 228.000000, 0.000000 +6178, -3.000000, 212.000000, 228.000000, 0.000000 +6179, -3.000000, 212.000000, 228.000000, 0.000000 +6180, -3.000000, 212.000000, 228.000000, 0.000000 +6181, -3.000000, 212.000000, 228.000000, 0.000000 +6182, -3.000000, 212.000000, 228.000000, 0.000000 +6183, -3.000000, 212.000000, 228.000000, 0.000000 +6184, -3.000000, 212.000000, 228.000000, 0.000000 +6185, -3.000000, 212.000000, 228.000000, 0.000000 +6186, -3.000000, 212.000000, 228.000000, 0.000000 +6187, -3.000000, 212.000000, 228.000000, 0.000000 +6188, -3.000000, 212.000000, 228.000000, 0.000000 +6189, -3.000000, 212.000000, 228.000000, 0.000000 +6190, -3.000000, 212.000000, 228.000000, 0.000000 +6191, -3.000000, 212.000000, 228.000000, 0.000000 +6192, -3.000000, 212.000000, 228.000000, 0.000000 +6193, -3.000000, 212.000000, 228.000000, 0.000000 +6194, -3.000000, 212.000000, 228.000000, 0.000000 +6195, -3.000000, 212.000000, 228.000000, 0.000000 +6196, -3.000000, 212.000000, 228.000000, 0.000000 +6197, -3.000000, 212.000000, 228.000000, 0.000000 +6198, -3.000000, 212.000000, 228.000000, 0.000000 +6199, -3.000000, 212.000000, 228.000000, 0.000000 +6200, -3.000000, 214.000000, 231.000000, 0.000000 +6201, -3.000000, 214.000000, 231.000000, 0.000000 +6202, -3.000000, 214.000000, 231.000000, 0.000000 +6203, -3.000000, 214.000000, 231.000000, 0.000000 +6204, -3.000000, 214.000000, 231.000000, 0.000000 +6205, -3.000000, 214.000000, 231.000000, 0.000000 +6206, -3.000000, 214.000000, 231.000000, 0.000000 +6207, -3.000000, 214.000000, 231.000000, 0.000000 +6208, -3.000000, 214.000000, 231.000000, 0.000000 +6209, -3.000000, 214.000000, 231.000000, 0.000000 +6210, -3.000000, 214.000000, 231.000000, 0.000000 +6211, -3.000000, 214.000000, 231.000000, 0.000000 +6212, -3.000000, 214.000000, 231.000000, 0.000000 +6213, -3.000000, 214.000000, 231.000000, 0.000000 +6214, -3.000000, 214.000000, 231.000000, 0.000000 +6215, -3.000000, 214.000000, 231.000000, 0.000000 +6216, -3.000000, 214.000000, 231.000000, 0.000000 +6217, -3.000000, 214.000000, 231.000000, 0.000000 +6218, -3.000000, 214.000000, 231.000000, 0.000000 +6219, -3.000000, 214.000000, 231.000000, 0.000000 +6220, -3.000000, 214.000000, 231.000000, 0.000000 +6221, -3.000000, 214.000000, 231.000000, 0.000000 +6222, -3.000000, 214.000000, 231.000000, 0.000000 +6223, -3.000000, 214.000000, 231.000000, 0.000000 +6224, -3.000000, 214.000000, 231.000000, 0.000000 +6225, -3.000000, 214.000000, 231.000000, 0.000000 +6226, -3.000000, 214.000000, 231.000000, 0.000000 +6227, -3.000000, 214.000000, 231.000000, 0.000000 +6228, -3.000000, 214.000000, 231.000000, 0.000000 +6229, -3.000000, 214.000000, 231.000000, 0.000000 +6230, -3.000000, 214.000000, 231.000000, 0.000000 +6231, -3.000000, 214.000000, 231.000000, 0.000000 +6232, -3.000000, 214.000000, 231.000000, 0.000000 +6233, -3.000000, 214.000000, 231.000000, 0.000000 +6234, -3.000000, 214.000000, 231.000000, 0.000000 +6235, -3.000000, 214.000000, 231.000000, 0.000000 +6236, -3.000000, 214.000000, 231.000000, 0.000000 +6237, -3.000000, 214.000000, 231.000000, 0.000000 +6238, -3.000000, 214.000000, 231.000000, 0.000000 +6239, -3.000000, 214.000000, 231.000000, 0.000000 +6240, -3.000000, 214.000000, 231.000000, 0.000000 +6241, -3.000000, 214.000000, 231.000000, 0.000000 +6242, -3.000000, 214.000000, 231.000000, 0.000000 +6243, -3.000000, 214.000000, 231.000000, 0.000000 +6244, -3.000000, 214.000000, 231.000000, 0.000000 +6245, -3.000000, 214.000000, 231.000000, 0.000000 +6246, -3.000000, 214.000000, 231.000000, 0.000000 +6247, -3.000000, 214.000000, 231.000000, 0.000000 +6248, -3.000000, 214.000000, 231.000000, 0.000000 +6249, -3.000000, 214.000000, 231.000000, 0.000000 +6250, -3.000000, 214.000000, 231.000000, 0.000000 +6251, -3.000000, 214.000000, 231.000000, 0.000000 +6252, -3.000000, 214.000000, 231.000000, 0.000000 +6253, -3.000000, 214.000000, 231.000000, 0.000000 +6254, -3.000000, 214.000000, 231.000000, 0.000000 +6255, -3.000000, 214.000000, 231.000000, 0.000000 +6256, -3.000000, 214.000000, 231.000000, 0.000000 +6257, -3.000000, 214.000000, 231.000000, 0.000000 +6258, -3.000000, 214.000000, 231.000000, 0.000000 +6259, -3.000000, 214.000000, 231.000000, 0.000000 +6260, -3.000000, 214.000000, 231.000000, 0.000000 +6261, -3.000000, 214.000000, 231.000000, 0.000000 +6262, -3.000000, 214.000000, 231.000000, 0.000000 +6263, -3.000000, 214.000000, 231.000000, 0.000000 +6264, -3.000000, 214.000000, 231.000000, 0.000000 +6265, -3.000000, 214.000000, 231.000000, 0.000000 +6266, -3.000000, 214.000000, 231.000000, 0.000000 +6267, -3.000000, 214.000000, 231.000000, 0.000000 +6268, -3.000000, 214.000000, 231.000000, 0.000000 +6269, -3.000000, 214.000000, 231.000000, 0.000000 +6270, -3.000000, 214.000000, 231.000000, 0.000000 +6271, -3.000000, 214.000000, 231.000000, 0.000000 +6272, -3.000000, 214.000000, 231.000000, 0.000000 +6273, -3.000000, 214.000000, 231.000000, 0.000000 +6274, -3.000000, 214.000000, 231.000000, 0.000000 +6275, -3.000000, 214.000000, 231.000000, 0.000000 +6276, -3.000000, 214.000000, 231.000000, 0.000000 +6277, -3.000000, 214.000000, 231.000000, 0.000000 +6278, -3.000000, 214.000000, 231.000000, 0.000000 +6279, -3.000000, 214.000000, 231.000000, 0.000000 +6280, -3.000000, 214.000000, 231.000000, 0.000000 +6281, -3.000000, 214.000000, 231.000000, 0.000000 +6282, -3.000000, 214.000000, 231.000000, 0.000000 +6283, -3.000000, 214.000000, 231.000000, 0.000000 +6284, -3.000000, 214.000000, 231.000000, 0.000000 +6285, -3.000000, 214.000000, 231.000000, 0.000000 +6286, -3.000000, 214.000000, 231.000000, 0.000000 +6287, -3.000000, 214.000000, 231.000000, 0.000000 +6288, -3.000000, 214.000000, 231.000000, 0.000000 +6289, -3.000000, 214.000000, 231.000000, 0.000000 +6290, -3.000000, 214.000000, 231.000000, 0.000000 +6291, -3.000000, 214.000000, 231.000000, 0.000000 +6292, -3.000000, 214.000000, 231.000000, 0.000000 +6293, -3.000000, 214.000000, 231.000000, 0.000000 +6294, -3.000000, 214.000000, 231.000000, 0.000000 +6295, -3.000000, 214.000000, 231.000000, 0.000000 +6296, -3.000000, 214.000000, 231.000000, 0.000000 +6297, -3.000000, 214.000000, 231.000000, 0.000000 +6298, -3.000000, 214.000000, 231.000000, 0.000000 +6299, -3.000000, 214.000000, 231.000000, 0.000000 +6300, -3.000000, 216.000000, 234.000000, 0.000000 +6301, -3.000000, 216.000000, 234.000000, 0.000000 +6302, -3.000000, 216.000000, 234.000000, 0.000000 +6303, -3.000000, 216.000000, 234.000000, 0.000000 +6304, -3.000000, 216.000000, 234.000000, 0.000000 +6305, -3.000000, 216.000000, 234.000000, 0.000000 +6306, -3.000000, 216.000000, 234.000000, 0.000000 +6307, -3.000000, 216.000000, 234.000000, 0.000000 +6308, -3.000000, 216.000000, 234.000000, 0.000000 +6309, -3.000000, 216.000000, 234.000000, 0.000000 +6310, -3.000000, 216.000000, 234.000000, 0.000000 +6311, -3.000000, 216.000000, 234.000000, 0.000000 +6312, -3.000000, 216.000000, 234.000000, 0.000000 +6313, -3.000000, 216.000000, 234.000000, 0.000000 +6314, -3.000000, 216.000000, 234.000000, 0.000000 +6315, -3.000000, 216.000000, 234.000000, 0.000000 +6316, -3.000000, 216.000000, 234.000000, 0.000000 +6317, -3.000000, 216.000000, 234.000000, 0.000000 +6318, -3.000000, 216.000000, 234.000000, 0.000000 +6319, -3.000000, 216.000000, 234.000000, 0.000000 +6320, -3.000000, 216.000000, 234.000000, 0.000000 +6321, -3.000000, 216.000000, 234.000000, 0.000000 +6322, -3.000000, 216.000000, 234.000000, 0.000000 +6323, -3.000000, 216.000000, 234.000000, 0.000000 +6324, -3.000000, 216.000000, 234.000000, 0.000000 +6325, -3.000000, 216.000000, 234.000000, 0.000000 +6326, -3.000000, 216.000000, 234.000000, 0.000000 +6327, -3.000000, 216.000000, 234.000000, 0.000000 +6328, -3.000000, 216.000000, 234.000000, 0.000000 +6329, -3.000000, 216.000000, 234.000000, 0.000000 +6330, -3.000000, 216.000000, 234.000000, 0.000000 +6331, -3.000000, 216.000000, 234.000000, 0.000000 +6332, -3.000000, 216.000000, 234.000000, 0.000000 +6333, -3.000000, 216.000000, 234.000000, 0.000000 +6334, -3.000000, 216.000000, 234.000000, 0.000000 +6335, -3.000000, 216.000000, 234.000000, 0.000000 +6336, -3.000000, 216.000000, 234.000000, 0.000000 +6337, -3.000000, 216.000000, 234.000000, 0.000000 +6338, -3.000000, 216.000000, 234.000000, 0.000000 +6339, -3.000000, 216.000000, 234.000000, 0.000000 +6340, -3.000000, 216.000000, 234.000000, 0.000000 +6341, -3.000000, 216.000000, 234.000000, 0.000000 +6342, -3.000000, 216.000000, 234.000000, 0.000000 +6343, -3.000000, 216.000000, 234.000000, 0.000000 +6344, -3.000000, 216.000000, 234.000000, 0.000000 +6345, -3.000000, 216.000000, 234.000000, 0.000000 +6346, -3.000000, 216.000000, 234.000000, 0.000000 +6347, -3.000000, 216.000000, 234.000000, 0.000000 +6348, -3.000000, 216.000000, 234.000000, 0.000000 +6349, -3.000000, 216.000000, 234.000000, 0.000000 +6350, -3.000000, 216.000000, 234.000000, 0.000000 +6351, -3.000000, 216.000000, 234.000000, 0.000000 +6352, -3.000000, 216.000000, 234.000000, 0.000000 +6353, -3.000000, 216.000000, 234.000000, 0.000000 +6354, -3.000000, 216.000000, 234.000000, 0.000000 +6355, -3.000000, 216.000000, 234.000000, 0.000000 +6356, -3.000000, 216.000000, 234.000000, 0.000000 +6357, -3.000000, 216.000000, 234.000000, 0.000000 +6358, -3.000000, 216.000000, 234.000000, 0.000000 +6359, -3.000000, 216.000000, 234.000000, 0.000000 +6360, -3.000000, 216.000000, 234.000000, 0.000000 +6361, -3.000000, 216.000000, 234.000000, 0.000000 +6362, -3.000000, 216.000000, 234.000000, 0.000000 +6363, -3.000000, 216.000000, 234.000000, 0.000000 +6364, -3.000000, 216.000000, 234.000000, 0.000000 +6365, -3.000000, 216.000000, 234.000000, 0.000000 +6366, -3.000000, 216.000000, 234.000000, 0.000000 +6367, -3.000000, 216.000000, 234.000000, 0.000000 +6368, -3.000000, 216.000000, 234.000000, 0.000000 +6369, -3.000000, 216.000000, 234.000000, 0.000000 +6370, -3.000000, 216.000000, 234.000000, 0.000000 +6371, -3.000000, 216.000000, 234.000000, 0.000000 +6372, -3.000000, 216.000000, 234.000000, 0.000000 +6373, -3.000000, 216.000000, 234.000000, 0.000000 +6374, -3.000000, 216.000000, 234.000000, 0.000000 +6375, -3.000000, 216.000000, 234.000000, 0.000000 +6376, -3.000000, 216.000000, 234.000000, 0.000000 +6377, -3.000000, 216.000000, 234.000000, 0.000000 +6378, -3.000000, 216.000000, 234.000000, 0.000000 +6379, -3.000000, 216.000000, 234.000000, 0.000000 +6380, -3.000000, 216.000000, 234.000000, 0.000000 +6381, -3.000000, 216.000000, 234.000000, 0.000000 +6382, -3.000000, 216.000000, 234.000000, 0.000000 +6383, -3.000000, 216.000000, 234.000000, 0.000000 +6384, -3.000000, 216.000000, 234.000000, 0.000000 +6385, -3.000000, 216.000000, 234.000000, 0.000000 +6386, -3.000000, 216.000000, 234.000000, 0.000000 +6387, -3.000000, 216.000000, 234.000000, 0.000000 +6388, -3.000000, 216.000000, 234.000000, 0.000000 +6389, -3.000000, 216.000000, 234.000000, 0.000000 +6390, -3.000000, 216.000000, 234.000000, 0.000000 +6391, -3.000000, 216.000000, 234.000000, 0.000000 +6392, -3.000000, 216.000000, 234.000000, 0.000000 +6393, -3.000000, 216.000000, 234.000000, 0.000000 +6394, -3.000000, 216.000000, 234.000000, 0.000000 +6395, -3.000000, 216.000000, 234.000000, 0.000000 +6396, -3.000000, 216.000000, 234.000000, 0.000000 +6397, -3.000000, 216.000000, 234.000000, 0.000000 +6398, -3.000000, 216.000000, 234.000000, 0.000000 +6399, -3.000000, 216.000000, 234.000000, 0.000000 +6400, -3.000000, 218.000000, 237.000000, 0.000000 +6401, -3.000000, 218.000000, 237.000000, 0.000000 +6402, -3.000000, 218.000000, 237.000000, 0.000000 +6403, -3.000000, 218.000000, 237.000000, 0.000000 +6404, -3.000000, 218.000000, 237.000000, 0.000000 +6405, -3.000000, 218.000000, 237.000000, 0.000000 +6406, -3.000000, 218.000000, 237.000000, 0.000000 +6407, -3.000000, 218.000000, 237.000000, 0.000000 +6408, -3.000000, 218.000000, 237.000000, 0.000000 +6409, -3.000000, 218.000000, 237.000000, 0.000000 +6410, -3.000000, 218.000000, 237.000000, 0.000000 +6411, -3.000000, 218.000000, 237.000000, 0.000000 +6412, -3.000000, 218.000000, 237.000000, 0.000000 +6413, -3.000000, 218.000000, 237.000000, 0.000000 +6414, -3.000000, 218.000000, 237.000000, 0.000000 +6415, -3.000000, 218.000000, 237.000000, 0.000000 +6416, -3.000000, 218.000000, 237.000000, 0.000000 +6417, -3.000000, 218.000000, 237.000000, 0.000000 +6418, -3.000000, 218.000000, 237.000000, 0.000000 +6419, -3.000000, 218.000000, 237.000000, 0.000000 +6420, -3.000000, 218.000000, 237.000000, 0.000000 +6421, -3.000000, 218.000000, 237.000000, 0.000000 +6422, -3.000000, 218.000000, 237.000000, 0.000000 +6423, -3.000000, 218.000000, 237.000000, 0.000000 +6424, -3.000000, 218.000000, 237.000000, 0.000000 +6425, -3.000000, 218.000000, 237.000000, 0.000000 +6426, -3.000000, 218.000000, 237.000000, 0.000000 +6427, -3.000000, 218.000000, 237.000000, 0.000000 +6428, -3.000000, 218.000000, 237.000000, 0.000000 +6429, -3.000000, 218.000000, 237.000000, 0.000000 +6430, -3.000000, 218.000000, 237.000000, 0.000000 +6431, -3.000000, 218.000000, 237.000000, 0.000000 +6432, -3.000000, 218.000000, 237.000000, 0.000000 +6433, -3.000000, 218.000000, 237.000000, 0.000000 +6434, -3.000000, 218.000000, 237.000000, 0.000000 +6435, -3.000000, 218.000000, 237.000000, 0.000000 +6436, -3.000000, 218.000000, 237.000000, 0.000000 +6437, -3.000000, 218.000000, 237.000000, 0.000000 +6438, -3.000000, 218.000000, 237.000000, 0.000000 +6439, -3.000000, 218.000000, 237.000000, 0.000000 +6440, -3.000000, 218.000000, 237.000000, 0.000000 +6441, -3.000000, 218.000000, 237.000000, 0.000000 +6442, -3.000000, 218.000000, 237.000000, 0.000000 +6443, -3.000000, 218.000000, 237.000000, 0.000000 +6444, -3.000000, 218.000000, 237.000000, 0.000000 +6445, -3.000000, 218.000000, 237.000000, 0.000000 +6446, -3.000000, 218.000000, 237.000000, 0.000000 +6447, -3.000000, 218.000000, 237.000000, 0.000000 +6448, -3.000000, 218.000000, 237.000000, 0.000000 +6449, -3.000000, 218.000000, 237.000000, 0.000000 +6450, -3.000000, 218.000000, 237.000000, 0.000000 +6451, -3.000000, 218.000000, 237.000000, 0.000000 +6452, -3.000000, 218.000000, 237.000000, 0.000000 +6453, -3.000000, 218.000000, 237.000000, 0.000000 +6454, -3.000000, 218.000000, 237.000000, 0.000000 +6455, -3.000000, 218.000000, 237.000000, 0.000000 +6456, -3.000000, 218.000000, 237.000000, 0.000000 +6457, -3.000000, 218.000000, 237.000000, 0.000000 +6458, -3.000000, 218.000000, 237.000000, 0.000000 +6459, -3.000000, 218.000000, 237.000000, 0.000000 +6460, -3.000000, 218.000000, 237.000000, 0.000000 +6461, -3.000000, 218.000000, 237.000000, 0.000000 +6462, -3.000000, 218.000000, 237.000000, 0.000000 +6463, -3.000000, 218.000000, 237.000000, 0.000000 +6464, -3.000000, 218.000000, 237.000000, 0.000000 +6465, -3.000000, 218.000000, 237.000000, 0.000000 +6466, -3.000000, 218.000000, 237.000000, 0.000000 +6467, -3.000000, 218.000000, 237.000000, 0.000000 +6468, -3.000000, 218.000000, 237.000000, 0.000000 +6469, -3.000000, 218.000000, 237.000000, 0.000000 +6470, -3.000000, 218.000000, 237.000000, 0.000000 +6471, -3.000000, 218.000000, 237.000000, 0.000000 +6472, -3.000000, 218.000000, 237.000000, 0.000000 +6473, -3.000000, 218.000000, 237.000000, 0.000000 +6474, -3.000000, 218.000000, 237.000000, 0.000000 +6475, -3.000000, 218.000000, 237.000000, 0.000000 +6476, -3.000000, 218.000000, 237.000000, 0.000000 +6477, -3.000000, 218.000000, 237.000000, 0.000000 +6478, -3.000000, 218.000000, 237.000000, 0.000000 +6479, -3.000000, 218.000000, 237.000000, 0.000000 +6480, -3.000000, 218.000000, 237.000000, 0.000000 +6481, -3.000000, 218.000000, 237.000000, 0.000000 +6482, -3.000000, 218.000000, 237.000000, 0.000000 +6483, -3.000000, 218.000000, 237.000000, 0.000000 +6484, -3.000000, 218.000000, 237.000000, 0.000000 +6485, -3.000000, 218.000000, 237.000000, 0.000000 +6486, -3.000000, 218.000000, 237.000000, 0.000000 +6487, -3.000000, 218.000000, 237.000000, 0.000000 +6488, -3.000000, 218.000000, 237.000000, 0.000000 +6489, -3.000000, 218.000000, 237.000000, 0.000000 +6490, -3.000000, 218.000000, 237.000000, 0.000000 +6491, -3.000000, 218.000000, 237.000000, 0.000000 +6492, -3.000000, 218.000000, 237.000000, 0.000000 +6493, -3.000000, 218.000000, 237.000000, 0.000000 +6494, -3.000000, 218.000000, 237.000000, 0.000000 +6495, -3.000000, 218.000000, 237.000000, 0.000000 +6496, -3.000000, 218.000000, 237.000000, 0.000000 +6497, -3.000000, 218.000000, 237.000000, 0.000000 +6498, -3.000000, 218.000000, 237.000000, 0.000000 +6499, -3.000000, 218.000000, 237.000000, 0.000000 +6500, -3.000000, 220.000000, 240.000000, 0.000000 +6501, -3.000000, 220.000000, 240.000000, 0.000000 +6502, -3.000000, 220.000000, 240.000000, 0.000000 +6503, -3.000000, 220.000000, 240.000000, 0.000000 +6504, -3.000000, 220.000000, 240.000000, 0.000000 +6505, -3.000000, 220.000000, 240.000000, 0.000000 +6506, -3.000000, 220.000000, 240.000000, 0.000000 +6507, -3.000000, 220.000000, 240.000000, 0.000000 +6508, -3.000000, 220.000000, 240.000000, 0.000000 +6509, -3.000000, 220.000000, 240.000000, 0.000000 +6510, -3.000000, 220.000000, 240.000000, 0.000000 +6511, -3.000000, 220.000000, 240.000000, 0.000000 +6512, -3.000000, 220.000000, 240.000000, 0.000000 +6513, -3.000000, 220.000000, 240.000000, 0.000000 +6514, -3.000000, 220.000000, 240.000000, 0.000000 +6515, -3.000000, 220.000000, 240.000000, 0.000000 +6516, -3.000000, 220.000000, 240.000000, 0.000000 +6517, -3.000000, 220.000000, 240.000000, 0.000000 +6518, -3.000000, 220.000000, 240.000000, 0.000000 +6519, -3.000000, 220.000000, 240.000000, 0.000000 +6520, -3.000000, 220.000000, 240.000000, 0.000000 +6521, -3.000000, 220.000000, 240.000000, 0.000000 +6522, -3.000000, 220.000000, 240.000000, 0.000000 +6523, -3.000000, 220.000000, 240.000000, 0.000000 +6524, -3.000000, 220.000000, 240.000000, 0.000000 +6525, -3.000000, 220.000000, 240.000000, 0.000000 +6526, -3.000000, 220.000000, 240.000000, 0.000000 +6527, -3.000000, 220.000000, 240.000000, 0.000000 +6528, -3.000000, 220.000000, 240.000000, 0.000000 +6529, -3.000000, 220.000000, 240.000000, 0.000000 +6530, -3.000000, 220.000000, 240.000000, 0.000000 +6531, -3.000000, 220.000000, 240.000000, 0.000000 +6532, -3.000000, 220.000000, 240.000000, 0.000000 +6533, -3.000000, 220.000000, 240.000000, 0.000000 +6534, -3.000000, 220.000000, 240.000000, 0.000000 +6535, -3.000000, 220.000000, 240.000000, 0.000000 +6536, -3.000000, 220.000000, 240.000000, 0.000000 +6537, -3.000000, 220.000000, 240.000000, 0.000000 +6538, -3.000000, 220.000000, 240.000000, 0.000000 +6539, -3.000000, 220.000000, 240.000000, 0.000000 +6540, -3.000000, 220.000000, 240.000000, 0.000000 +6541, -3.000000, 220.000000, 240.000000, 0.000000 +6542, -3.000000, 220.000000, 240.000000, 0.000000 +6543, -3.000000, 220.000000, 240.000000, 0.000000 +6544, -3.000000, 220.000000, 240.000000, 0.000000 +6545, -3.000000, 220.000000, 240.000000, 0.000000 +6546, -3.000000, 220.000000, 240.000000, 0.000000 +6547, -3.000000, 220.000000, 240.000000, 0.000000 +6548, -3.000000, 220.000000, 240.000000, 0.000000 +6549, -3.000000, 220.000000, 240.000000, 0.000000 +6550, -3.000000, 220.000000, 240.000000, 0.000000 +6551, -3.000000, 220.000000, 240.000000, 0.000000 +6552, -3.000000, 220.000000, 240.000000, 0.000000 +6553, -3.000000, 220.000000, 240.000000, 0.000000 +6554, -3.000000, 220.000000, 240.000000, 0.000000 +6555, -3.000000, 220.000000, 240.000000, 0.000000 +6556, -3.000000, 220.000000, 240.000000, 0.000000 +6557, -3.000000, 220.000000, 240.000000, 0.000000 +6558, -3.000000, 220.000000, 240.000000, 0.000000 +6559, -3.000000, 220.000000, 240.000000, 0.000000 +6560, -3.000000, 220.000000, 240.000000, 0.000000 +6561, -3.000000, 220.000000, 240.000000, 0.000000 +6562, -3.000000, 220.000000, 240.000000, 0.000000 +6563, -3.000000, 220.000000, 240.000000, 0.000000 +6564, -3.000000, 220.000000, 240.000000, 0.000000 +6565, -3.000000, 220.000000, 240.000000, 0.000000 +6566, -3.000000, 220.000000, 240.000000, 0.000000 +6567, -3.000000, 220.000000, 240.000000, 0.000000 +6568, -3.000000, 220.000000, 240.000000, 0.000000 +6569, -3.000000, 220.000000, 240.000000, 0.000000 +6570, -3.000000, 220.000000, 240.000000, 0.000000 +6571, -3.000000, 220.000000, 240.000000, 0.000000 +6572, -3.000000, 220.000000, 240.000000, 0.000000 +6573, -3.000000, 220.000000, 240.000000, 0.000000 +6574, -3.000000, 220.000000, 240.000000, 0.000000 +6575, -3.000000, 220.000000, 240.000000, 0.000000 +6576, -3.000000, 220.000000, 240.000000, 0.000000 +6577, -3.000000, 220.000000, 240.000000, 0.000000 +6578, -3.000000, 220.000000, 240.000000, 0.000000 +6579, -3.000000, 220.000000, 240.000000, 0.000000 +6580, -3.000000, 220.000000, 240.000000, 0.000000 +6581, -3.000000, 220.000000, 240.000000, 0.000000 +6582, -3.000000, 220.000000, 240.000000, 0.000000 +6583, -3.000000, 220.000000, 240.000000, 0.000000 +6584, -3.000000, 220.000000, 240.000000, 0.000000 +6585, -3.000000, 220.000000, 240.000000, 0.000000 +6586, -3.000000, 220.000000, 240.000000, 0.000000 +6587, -3.000000, 220.000000, 240.000000, 0.000000 +6588, -3.000000, 220.000000, 240.000000, 0.000000 +6589, -3.000000, 220.000000, 240.000000, 0.000000 +6590, -3.000000, 220.000000, 240.000000, 0.000000 +6591, -3.000000, 220.000000, 240.000000, 0.000000 +6592, -3.000000, 220.000000, 240.000000, 0.000000 +6593, -3.000000, 220.000000, 240.000000, 0.000000 +6594, -3.000000, 220.000000, 240.000000, 0.000000 +6595, -3.000000, 220.000000, 240.000000, 0.000000 +6596, -3.000000, 220.000000, 240.000000, 0.000000 +6597, -3.000000, 220.000000, 240.000000, 0.000000 +6598, -3.000000, 220.000000, 240.000000, 0.000000 +6599, -3.000000, 220.000000, 240.000000, 0.000000 +6600, -3.000000, 222.000000, 243.000000, 0.000000 +6601, -3.000000, 222.000000, 243.000000, 0.000000 +6602, -3.000000, 222.000000, 243.000000, 0.000000 +6603, -3.000000, 222.000000, 243.000000, 0.000000 +6604, -3.000000, 222.000000, 243.000000, 0.000000 +6605, -3.000000, 222.000000, 243.000000, 0.000000 +6606, -3.000000, 222.000000, 243.000000, 0.000000 +6607, -3.000000, 222.000000, 243.000000, 0.000000 +6608, -3.000000, 222.000000, 243.000000, 0.000000 +6609, -3.000000, 222.000000, 243.000000, 0.000000 +6610, -3.000000, 222.000000, 243.000000, 0.000000 +6611, -3.000000, 222.000000, 243.000000, 0.000000 +6612, -3.000000, 222.000000, 243.000000, 0.000000 +6613, -3.000000, 222.000000, 243.000000, 0.000000 +6614, -3.000000, 222.000000, 243.000000, 0.000000 +6615, -3.000000, 222.000000, 243.000000, 0.000000 +6616, -3.000000, 222.000000, 243.000000, 0.000000 +6617, -3.000000, 222.000000, 243.000000, 0.000000 +6618, -3.000000, 222.000000, 243.000000, 0.000000 +6619, -3.000000, 222.000000, 243.000000, 0.000000 +6620, -3.000000, 222.000000, 243.000000, 0.000000 +6621, -3.000000, 222.000000, 243.000000, 0.000000 +6622, -3.000000, 222.000000, 243.000000, 0.000000 +6623, -3.000000, 222.000000, 243.000000, 0.000000 +6624, -3.000000, 222.000000, 243.000000, 0.000000 +6625, -3.000000, 222.000000, 243.000000, 0.000000 +6626, -3.000000, 222.000000, 243.000000, 0.000000 +6627, -3.000000, 222.000000, 243.000000, 0.000000 +6628, -3.000000, 222.000000, 243.000000, 0.000000 +6629, -3.000000, 222.000000, 243.000000, 0.000000 +6630, -3.000000, 222.000000, 243.000000, 0.000000 +6631, -3.000000, 222.000000, 243.000000, 0.000000 +6632, -3.000000, 222.000000, 243.000000, 0.000000 +6633, -3.000000, 222.000000, 243.000000, 0.000000 +6634, -3.000000, 222.000000, 243.000000, 0.000000 +6635, -3.000000, 222.000000, 243.000000, 0.000000 +6636, -3.000000, 222.000000, 243.000000, 0.000000 +6637, -3.000000, 222.000000, 243.000000, 0.000000 +6638, -3.000000, 222.000000, 243.000000, 0.000000 +6639, -3.000000, 222.000000, 243.000000, 0.000000 +6640, -3.000000, 222.000000, 243.000000, 0.000000 +6641, -3.000000, 222.000000, 243.000000, 0.000000 +6642, -3.000000, 222.000000, 243.000000, 0.000000 +6643, -3.000000, 222.000000, 243.000000, 0.000000 +6644, -3.000000, 222.000000, 243.000000, 0.000000 +6645, -3.000000, 222.000000, 243.000000, 0.000000 +6646, -3.000000, 222.000000, 243.000000, 0.000000 +6647, -3.000000, 222.000000, 243.000000, 0.000000 +6648, -3.000000, 222.000000, 243.000000, 0.000000 +6649, -3.000000, 222.000000, 243.000000, 0.000000 +6650, -3.000000, 222.000000, 243.000000, 0.000000 +6651, -3.000000, 222.000000, 243.000000, 0.000000 +6652, -3.000000, 222.000000, 243.000000, 0.000000 +6653, -3.000000, 222.000000, 243.000000, 0.000000 +6654, -3.000000, 222.000000, 243.000000, 0.000000 +6655, -3.000000, 222.000000, 243.000000, 0.000000 +6656, -3.000000, 222.000000, 243.000000, 0.000000 +6657, -3.000000, 222.000000, 243.000000, 0.000000 +6658, -3.000000, 222.000000, 243.000000, 0.000000 +6659, -3.000000, 222.000000, 243.000000, 0.000000 +6660, -3.000000, 222.000000, 243.000000, 0.000000 +6661, -3.000000, 222.000000, 243.000000, 0.000000 +6662, -3.000000, 222.000000, 243.000000, 0.000000 +6663, -3.000000, 222.000000, 243.000000, 0.000000 +6664, -3.000000, 222.000000, 243.000000, 0.000000 +6665, -3.000000, 222.000000, 243.000000, 0.000000 +6666, -3.000000, 222.000000, 243.000000, 0.000000 +6667, -3.000000, 222.000000, 243.000000, 0.000000 +6668, -3.000000, 222.000000, 243.000000, 0.000000 +6669, -3.000000, 222.000000, 243.000000, 0.000000 +6670, -3.000000, 222.000000, 243.000000, 0.000000 +6671, -3.000000, 222.000000, 243.000000, 0.000000 +6672, -3.000000, 222.000000, 243.000000, 0.000000 +6673, -3.000000, 222.000000, 243.000000, 0.000000 +6674, -3.000000, 222.000000, 243.000000, 0.000000 +6675, -3.000000, 222.000000, 243.000000, 0.000000 +6676, -3.000000, 222.000000, 243.000000, 0.000000 +6677, -3.000000, 222.000000, 243.000000, 0.000000 +6678, -3.000000, 222.000000, 243.000000, 0.000000 +6679, -3.000000, 222.000000, 243.000000, 0.000000 +6680, -3.000000, 222.000000, 243.000000, 0.000000 +6681, -3.000000, 222.000000, 243.000000, 0.000000 +6682, -3.000000, 222.000000, 243.000000, 0.000000 +6683, -3.000000, 222.000000, 243.000000, 0.000000 +6684, -3.000000, 222.000000, 243.000000, 0.000000 +6685, -3.000000, 222.000000, 243.000000, 0.000000 +6686, -3.000000, 222.000000, 243.000000, 0.000000 +6687, -3.000000, 222.000000, 243.000000, 0.000000 +6688, -3.000000, 222.000000, 243.000000, 0.000000 +6689, -3.000000, 222.000000, 243.000000, 0.000000 +6690, -3.000000, 222.000000, 243.000000, 0.000000 +6691, -3.000000, 222.000000, 243.000000, 0.000000 +6692, -3.000000, 222.000000, 243.000000, 0.000000 +6693, -3.000000, 222.000000, 243.000000, 0.000000 +6694, -3.000000, 222.000000, 243.000000, 0.000000 +6695, -3.000000, 222.000000, 243.000000, 0.000000 +6696, -3.000000, 222.000000, 243.000000, 0.000000 +6697, -3.000000, 222.000000, 243.000000, 0.000000 +6698, -3.000000, 222.000000, 243.000000, 0.000000 +6699, -3.000000, 222.000000, 243.000000, 0.000000 +6700, -3.000000, 224.000000, 246.000000, 0.000000 +6701, -3.000000, 224.000000, 246.000000, 0.000000 +6702, -3.000000, 224.000000, 246.000000, 0.000000 +6703, -3.000000, 224.000000, 246.000000, 0.000000 +6704, -3.000000, 224.000000, 246.000000, 0.000000 +6705, -3.000000, 224.000000, 246.000000, 0.000000 +6706, -3.000000, 224.000000, 246.000000, 0.000000 +6707, -3.000000, 224.000000, 246.000000, 0.000000 +6708, -3.000000, 224.000000, 246.000000, 0.000000 +6709, -3.000000, 224.000000, 246.000000, 0.000000 +6710, -3.000000, 224.000000, 246.000000, 0.000000 +6711, -3.000000, 224.000000, 246.000000, 0.000000 +6712, -3.000000, 224.000000, 246.000000, 0.000000 +6713, -3.000000, 224.000000, 246.000000, 0.000000 +6714, -3.000000, 224.000000, 246.000000, 0.000000 +6715, -3.000000, 224.000000, 246.000000, 0.000000 +6716, -3.000000, 224.000000, 246.000000, 0.000000 +6717, -3.000000, 224.000000, 246.000000, 0.000000 +6718, -3.000000, 224.000000, 246.000000, 0.000000 +6719, -3.000000, 224.000000, 246.000000, 0.000000 +6720, -3.000000, 224.000000, 246.000000, 0.000000 +6721, -3.000000, 224.000000, 246.000000, 0.000000 +6722, -3.000000, 224.000000, 246.000000, 0.000000 +6723, -3.000000, 224.000000, 246.000000, 0.000000 +6724, -3.000000, 224.000000, 246.000000, 0.000000 +6725, -3.000000, 224.000000, 246.000000, 0.000000 +6726, -3.000000, 224.000000, 246.000000, 0.000000 +6727, -3.000000, 224.000000, 246.000000, 0.000000 +6728, -3.000000, 224.000000, 246.000000, 0.000000 +6729, -3.000000, 224.000000, 246.000000, 0.000000 +6730, -3.000000, 224.000000, 246.000000, 0.000000 +6731, -3.000000, 224.000000, 246.000000, 0.000000 +6732, -3.000000, 224.000000, 246.000000, 0.000000 +6733, -3.000000, 224.000000, 246.000000, 0.000000 +6734, -3.000000, 224.000000, 246.000000, 0.000000 +6735, -3.000000, 224.000000, 246.000000, 0.000000 +6736, -3.000000, 224.000000, 246.000000, 0.000000 +6737, -3.000000, 224.000000, 246.000000, 0.000000 +6738, -3.000000, 224.000000, 246.000000, 0.000000 +6739, -3.000000, 224.000000, 246.000000, 0.000000 +6740, -3.000000, 224.000000, 246.000000, 0.000000 +6741, -3.000000, 224.000000, 246.000000, 0.000000 +6742, -3.000000, 224.000000, 246.000000, 0.000000 +6743, -3.000000, 224.000000, 246.000000, 0.000000 +6744, -3.000000, 224.000000, 246.000000, 0.000000 +6745, -3.000000, 224.000000, 246.000000, 0.000000 +6746, -3.000000, 224.000000, 246.000000, 0.000000 +6747, -3.000000, 224.000000, 246.000000, 0.000000 +6748, -3.000000, 224.000000, 246.000000, 0.000000 +6749, -3.000000, 224.000000, 246.000000, 0.000000 +6750, -3.000000, 224.000000, 246.000000, 0.000000 +6751, -3.000000, 224.000000, 246.000000, 0.000000 +6752, -3.000000, 224.000000, 246.000000, 0.000000 +6753, -3.000000, 224.000000, 246.000000, 0.000000 +6754, -3.000000, 224.000000, 246.000000, 0.000000 +6755, -3.000000, 224.000000, 246.000000, 0.000000 +6756, -3.000000, 224.000000, 246.000000, 0.000000 +6757, -3.000000, 224.000000, 246.000000, 0.000000 +6758, -3.000000, 224.000000, 246.000000, 0.000000 +6759, -3.000000, 224.000000, 246.000000, 0.000000 +6760, -3.000000, 224.000000, 246.000000, 0.000000 +6761, -3.000000, 224.000000, 246.000000, 0.000000 +6762, -3.000000, 224.000000, 246.000000, 0.000000 +6763, -3.000000, 224.000000, 246.000000, 0.000000 +6764, -3.000000, 224.000000, 246.000000, 0.000000 +6765, -3.000000, 224.000000, 246.000000, 0.000000 +6766, -3.000000, 224.000000, 246.000000, 0.000000 +6767, -3.000000, 224.000000, 246.000000, 0.000000 +6768, -3.000000, 224.000000, 246.000000, 0.000000 +6769, -3.000000, 224.000000, 246.000000, 0.000000 +6770, -3.000000, 224.000000, 246.000000, 0.000000 +6771, -3.000000, 224.000000, 246.000000, 0.000000 +6772, -3.000000, 224.000000, 246.000000, 0.000000 +6773, -3.000000, 224.000000, 246.000000, 0.000000 +6774, -3.000000, 224.000000, 246.000000, 0.000000 +6775, -3.000000, 224.000000, 246.000000, 0.000000 +6776, -3.000000, 224.000000, 246.000000, 0.000000 +6777, -3.000000, 224.000000, 246.000000, 0.000000 +6778, -3.000000, 224.000000, 246.000000, 0.000000 +6779, -3.000000, 224.000000, 246.000000, 0.000000 +6780, -3.000000, 224.000000, 246.000000, 0.000000 +6781, -3.000000, 224.000000, 246.000000, 0.000000 +6782, -3.000000, 224.000000, 246.000000, 0.000000 +6783, -3.000000, 224.000000, 246.000000, 0.000000 +6784, -3.000000, 224.000000, 246.000000, 0.000000 +6785, -3.000000, 224.000000, 246.000000, 0.000000 +6786, -3.000000, 224.000000, 246.000000, 0.000000 +6787, -3.000000, 224.000000, 246.000000, 0.000000 +6788, -3.000000, 224.000000, 246.000000, 0.000000 +6789, -3.000000, 224.000000, 246.000000, 0.000000 +6790, -3.000000, 224.000000, 246.000000, 0.000000 +6791, -3.000000, 224.000000, 246.000000, 0.000000 +6792, -3.000000, 224.000000, 246.000000, 0.000000 +6793, -3.000000, 224.000000, 246.000000, 0.000000 +6794, -3.000000, 224.000000, 246.000000, 0.000000 +6795, -3.000000, 224.000000, 246.000000, 0.000000 +6796, -3.000000, 224.000000, 246.000000, 0.000000 +6797, -3.000000, 224.000000, 246.000000, 0.000000 +6798, -3.000000, 224.000000, 246.000000, 0.000000 +6799, -3.000000, 224.000000, 246.000000, 0.000000 +6800, -3.000000, 226.000000, 249.000000, 0.000000 +6801, -3.000000, 226.000000, 249.000000, 0.000000 +6802, -3.000000, 226.000000, 249.000000, 0.000000 +6803, -3.000000, 226.000000, 249.000000, 0.000000 +6804, -3.000000, 226.000000, 249.000000, 0.000000 +6805, -3.000000, 226.000000, 249.000000, 0.000000 +6806, -3.000000, 226.000000, 249.000000, 0.000000 +6807, -3.000000, 226.000000, 249.000000, 0.000000 +6808, -3.000000, 226.000000, 249.000000, 0.000000 +6809, -3.000000, 226.000000, 249.000000, 0.000000 +6810, -3.000000, 226.000000, 249.000000, 0.000000 +6811, -3.000000, 226.000000, 249.000000, 0.000000 +6812, -3.000000, 226.000000, 249.000000, 0.000000 +6813, -3.000000, 226.000000, 249.000000, 0.000000 +6814, -3.000000, 226.000000, 249.000000, 0.000000 +6815, -3.000000, 226.000000, 249.000000, 0.000000 +6816, -3.000000, 226.000000, 249.000000, 0.000000 +6817, -3.000000, 226.000000, 249.000000, 0.000000 +6818, -3.000000, 226.000000, 249.000000, 0.000000 +6819, -3.000000, 226.000000, 249.000000, 0.000000 +6820, -3.000000, 226.000000, 249.000000, 0.000000 +6821, -3.000000, 226.000000, 249.000000, 0.000000 +6822, -3.000000, 226.000000, 249.000000, 0.000000 +6823, -3.000000, 226.000000, 249.000000, 0.000000 +6824, -3.000000, 226.000000, 249.000000, 0.000000 +6825, -3.000000, 226.000000, 249.000000, 0.000000 +6826, -3.000000, 226.000000, 249.000000, 0.000000 +6827, -3.000000, 226.000000, 249.000000, 0.000000 +6828, -3.000000, 226.000000, 249.000000, 0.000000 +6829, -3.000000, 226.000000, 249.000000, 0.000000 +6830, -3.000000, 226.000000, 249.000000, 0.000000 +6831, -3.000000, 226.000000, 249.000000, 0.000000 +6832, -3.000000, 226.000000, 249.000000, 0.000000 +6833, -3.000000, 226.000000, 249.000000, 0.000000 +6834, -3.000000, 226.000000, 249.000000, 0.000000 +6835, -3.000000, 226.000000, 249.000000, 0.000000 +6836, -3.000000, 226.000000, 249.000000, 0.000000 +6837, -3.000000, 226.000000, 249.000000, 0.000000 +6838, -3.000000, 226.000000, 249.000000, 0.000000 +6839, -3.000000, 226.000000, 249.000000, 0.000000 +6840, -3.000000, 226.000000, 249.000000, 0.000000 +6841, -3.000000, 226.000000, 249.000000, 0.000000 +6842, -3.000000, 226.000000, 249.000000, 0.000000 +6843, -3.000000, 226.000000, 249.000000, 0.000000 +6844, -3.000000, 226.000000, 249.000000, 0.000000 +6845, -3.000000, 226.000000, 249.000000, 0.000000 +6846, -3.000000, 226.000000, 249.000000, 0.000000 +6847, -3.000000, 226.000000, 249.000000, 0.000000 +6848, -3.000000, 226.000000, 249.000000, 0.000000 +6849, -3.000000, 226.000000, 249.000000, 0.000000 +6850, -3.000000, 226.000000, 249.000000, 0.000000 +6851, -3.000000, 226.000000, 249.000000, 0.000000 +6852, -3.000000, 226.000000, 249.000000, 0.000000 +6853, -3.000000, 226.000000, 249.000000, 0.000000 +6854, -3.000000, 226.000000, 249.000000, 0.000000 +6855, -3.000000, 226.000000, 249.000000, 0.000000 +6856, -3.000000, 226.000000, 249.000000, 0.000000 +6857, -3.000000, 226.000000, 249.000000, 0.000000 +6858, -3.000000, 226.000000, 249.000000, 0.000000 +6859, -3.000000, 226.000000, 249.000000, 0.000000 +6860, -3.000000, 226.000000, 249.000000, 0.000000 +6861, -3.000000, 226.000000, 249.000000, 0.000000 +6862, -3.000000, 226.000000, 249.000000, 0.000000 +6863, -3.000000, 226.000000, 249.000000, 0.000000 +6864, -3.000000, 226.000000, 249.000000, 0.000000 +6865, -3.000000, 226.000000, 249.000000, 0.000000 +6866, -3.000000, 226.000000, 249.000000, 0.000000 +6867, -3.000000, 226.000000, 249.000000, 0.000000 +6868, -3.000000, 226.000000, 249.000000, 0.000000 +6869, -3.000000, 226.000000, 249.000000, 0.000000 +6870, -3.000000, 226.000000, 249.000000, 0.000000 +6871, -3.000000, 226.000000, 249.000000, 0.000000 +6872, -3.000000, 226.000000, 249.000000, 0.000000 +6873, -3.000000, 226.000000, 249.000000, 0.000000 +6874, -3.000000, 226.000000, 249.000000, 0.000000 +6875, -3.000000, 226.000000, 249.000000, 0.000000 +6876, -3.000000, 226.000000, 249.000000, 0.000000 +6877, -3.000000, 226.000000, 249.000000, 0.000000 +6878, -3.000000, 226.000000, 249.000000, 0.000000 +6879, -3.000000, 226.000000, 249.000000, 0.000000 +6880, -3.000000, 226.000000, 249.000000, 0.000000 +6881, -3.000000, 226.000000, 249.000000, 0.000000 +6882, -3.000000, 226.000000, 249.000000, 0.000000 +6883, -3.000000, 226.000000, 249.000000, 0.000000 +6884, -3.000000, 226.000000, 249.000000, 0.000000 +6885, -3.000000, 226.000000, 249.000000, 0.000000 +6886, -3.000000, 226.000000, 249.000000, 0.000000 +6887, -3.000000, 226.000000, 249.000000, 0.000000 +6888, -3.000000, 226.000000, 249.000000, 0.000000 +6889, -3.000000, 226.000000, 249.000000, 0.000000 +6890, -3.000000, 226.000000, 249.000000, 0.000000 +6891, -3.000000, 226.000000, 249.000000, 0.000000 +6892, -3.000000, 226.000000, 249.000000, 0.000000 +6893, -3.000000, 226.000000, 249.000000, 0.000000 +6894, -3.000000, 226.000000, 249.000000, 0.000000 +6895, -3.000000, 226.000000, 249.000000, 0.000000 +6896, -3.000000, 226.000000, 249.000000, 0.000000 +6897, -3.000000, 226.000000, 249.000000, 0.000000 +6898, -3.000000, 226.000000, 249.000000, 0.000000 +6899, -3.000000, 226.000000, 249.000000, 0.000000 +6900, -3.000000, 228.000000, 252.000000, 0.000000 +6901, -3.000000, 228.000000, 252.000000, 0.000000 +6902, -3.000000, 228.000000, 252.000000, 0.000000 +6903, -3.000000, 228.000000, 252.000000, 0.000000 +6904, -3.000000, 228.000000, 252.000000, 0.000000 +6905, -3.000000, 228.000000, 252.000000, 0.000000 +6906, -3.000000, 228.000000, 252.000000, 0.000000 +6907, -3.000000, 228.000000, 252.000000, 0.000000 +6908, -3.000000, 228.000000, 252.000000, 0.000000 +6909, -3.000000, 228.000000, 252.000000, 0.000000 +6910, -3.000000, 228.000000, 252.000000, 0.000000 +6911, -3.000000, 228.000000, 252.000000, 0.000000 +6912, -3.000000, 228.000000, 252.000000, 0.000000 +6913, -3.000000, 228.000000, 252.000000, 0.000000 +6914, -3.000000, 228.000000, 252.000000, 0.000000 +6915, -3.000000, 228.000000, 252.000000, 0.000000 +6916, -3.000000, 228.000000, 252.000000, 0.000000 +6917, -3.000000, 228.000000, 252.000000, 0.000000 +6918, -3.000000, 228.000000, 252.000000, 0.000000 +6919, -3.000000, 228.000000, 252.000000, 0.000000 +6920, -3.000000, 228.000000, 252.000000, 0.000000 +6921, -3.000000, 228.000000, 252.000000, 0.000000 +6922, -3.000000, 228.000000, 252.000000, 0.000000 +6923, -3.000000, 228.000000, 252.000000, 0.000000 +6924, -3.000000, 228.000000, 252.000000, 0.000000 +6925, -3.000000, 228.000000, 252.000000, 0.000000 +6926, -3.000000, 228.000000, 252.000000, 0.000000 +6927, -3.000000, 228.000000, 252.000000, 0.000000 +6928, -3.000000, 228.000000, 252.000000, 0.000000 +6929, -3.000000, 228.000000, 252.000000, 0.000000 +6930, -3.000000, 228.000000, 252.000000, 0.000000 +6931, -3.000000, 228.000000, 252.000000, 0.000000 +6932, -3.000000, 228.000000, 252.000000, 0.000000 +6933, -3.000000, 228.000000, 252.000000, 0.000000 +6934, -3.000000, 228.000000, 252.000000, 0.000000 +6935, -3.000000, 228.000000, 252.000000, 0.000000 +6936, -3.000000, 228.000000, 252.000000, 0.000000 +6937, -3.000000, 228.000000, 252.000000, 0.000000 +6938, -3.000000, 228.000000, 252.000000, 0.000000 +6939, -3.000000, 228.000000, 252.000000, 0.000000 +6940, -3.000000, 228.000000, 252.000000, 0.000000 +6941, -3.000000, 228.000000, 252.000000, 0.000000 +6942, -3.000000, 228.000000, 252.000000, 0.000000 +6943, -3.000000, 228.000000, 252.000000, 0.000000 +6944, -3.000000, 228.000000, 252.000000, 0.000000 +6945, -3.000000, 228.000000, 252.000000, 0.000000 +6946, -3.000000, 228.000000, 252.000000, 0.000000 +6947, -3.000000, 228.000000, 252.000000, 0.000000 +6948, -3.000000, 228.000000, 252.000000, 0.000000 +6949, -3.000000, 228.000000, 252.000000, 0.000000 +6950, -3.000000, 228.000000, 252.000000, 0.000000 +6951, -3.000000, 228.000000, 252.000000, 0.000000 +6952, -3.000000, 228.000000, 252.000000, 0.000000 +6953, -3.000000, 228.000000, 252.000000, 0.000000 +6954, -3.000000, 228.000000, 252.000000, 0.000000 +6955, -3.000000, 228.000000, 252.000000, 0.000000 +6956, -3.000000, 228.000000, 252.000000, 0.000000 +6957, -3.000000, 228.000000, 252.000000, 0.000000 +6958, -3.000000, 228.000000, 252.000000, 0.000000 +6959, -3.000000, 228.000000, 252.000000, 0.000000 +6960, -3.000000, 228.000000, 252.000000, 0.000000 +6961, -3.000000, 228.000000, 252.000000, 0.000000 +6962, -3.000000, 228.000000, 252.000000, 0.000000 +6963, -3.000000, 228.000000, 252.000000, 0.000000 +6964, -3.000000, 228.000000, 252.000000, 0.000000 +6965, -3.000000, 228.000000, 252.000000, 0.000000 +6966, -3.000000, 228.000000, 252.000000, 0.000000 +6967, -3.000000, 228.000000, 252.000000, 0.000000 +6968, -3.000000, 228.000000, 252.000000, 0.000000 +6969, -3.000000, 228.000000, 252.000000, 0.000000 +6970, -3.000000, 228.000000, 252.000000, 0.000000 +6971, -3.000000, 228.000000, 252.000000, 0.000000 +6972, -3.000000, 228.000000, 252.000000, 0.000000 +6973, -3.000000, 228.000000, 252.000000, 0.000000 +6974, -3.000000, 228.000000, 252.000000, 0.000000 +6975, -3.000000, 228.000000, 252.000000, 0.000000 +6976, -3.000000, 228.000000, 252.000000, 0.000000 +6977, -3.000000, 228.000000, 252.000000, 0.000000 +6978, -3.000000, 228.000000, 252.000000, 0.000000 +6979, -3.000000, 228.000000, 252.000000, 0.000000 +6980, -3.000000, 228.000000, 252.000000, 0.000000 +6981, -3.000000, 228.000000, 252.000000, 0.000000 +6982, -3.000000, 228.000000, 252.000000, 0.000000 +6983, -3.000000, 228.000000, 252.000000, 0.000000 +6984, -3.000000, 228.000000, 252.000000, 0.000000 +6985, -3.000000, 228.000000, 252.000000, 0.000000 +6986, -3.000000, 228.000000, 252.000000, 0.000000 +6987, -3.000000, 228.000000, 252.000000, 0.000000 +6988, -3.000000, 228.000000, 252.000000, 0.000000 +6989, -3.000000, 228.000000, 252.000000, 0.000000 +6990, -3.000000, 228.000000, 252.000000, 0.000000 +6991, -3.000000, 228.000000, 252.000000, 0.000000 +6992, -3.000000, 228.000000, 252.000000, 0.000000 +6993, -3.000000, 228.000000, 252.000000, 0.000000 +6994, -3.000000, 228.000000, 252.000000, 0.000000 +6995, -3.000000, 228.000000, 252.000000, 0.000000 +6996, -3.000000, 228.000000, 252.000000, 0.000000 +6997, -3.000000, 228.000000, 252.000000, 0.000000 +6998, -3.000000, 228.000000, 252.000000, 0.000000 +6999, -3.000000, 228.000000, 252.000000, 0.000000 +7000, -3.000000, 230.000000, 255.000000, 0.000000 +7001, -3.000000, 230.000000, 255.000000, 0.000000 +7002, -3.000000, 230.000000, 255.000000, 0.000000 +7003, -3.000000, 230.000000, 255.000000, 0.000000 +7004, -3.000000, 230.000000, 255.000000, 0.000000 +7005, -3.000000, 230.000000, 255.000000, 0.000000 +7006, -3.000000, 230.000000, 255.000000, 0.000000 +7007, -3.000000, 230.000000, 255.000000, 0.000000 +7008, -3.000000, 230.000000, 255.000000, 0.000000 +7009, -3.000000, 230.000000, 255.000000, 0.000000 +7010, -3.000000, 230.000000, 255.000000, 0.000000 +7011, -3.000000, 230.000000, 255.000000, 0.000000 +7012, -3.000000, 230.000000, 255.000000, 0.000000 +7013, -3.000000, 230.000000, 255.000000, 0.000000 +7014, -3.000000, 230.000000, 255.000000, 0.000000 +7015, -3.000000, 230.000000, 255.000000, 0.000000 +7016, -3.000000, 230.000000, 255.000000, 0.000000 +7017, -3.000000, 230.000000, 255.000000, 0.000000 +7018, -3.000000, 230.000000, 255.000000, 0.000000 +7019, -3.000000, 230.000000, 255.000000, 0.000000 +7020, -3.000000, 230.000000, 255.000000, 0.000000 +7021, -3.000000, 230.000000, 255.000000, 0.000000 +7022, -3.000000, 230.000000, 255.000000, 0.000000 +7023, -3.000000, 230.000000, 255.000000, 0.000000 +7024, -3.000000, 230.000000, 255.000000, 0.000000 +7025, -3.000000, 230.000000, 255.000000, 0.000000 +7026, -3.000000, 230.000000, 255.000000, 0.000000 +7027, -3.000000, 230.000000, 255.000000, 0.000000 +7028, -3.000000, 230.000000, 255.000000, 0.000000 +7029, -3.000000, 230.000000, 255.000000, 0.000000 +7030, -3.000000, 230.000000, 255.000000, 0.000000 +7031, -3.000000, 230.000000, 255.000000, 0.000000 +7032, -3.000000, 230.000000, 255.000000, 0.000000 +7033, -3.000000, 230.000000, 255.000000, 0.000000 +7034, -3.000000, 230.000000, 255.000000, 0.000000 +7035, -3.000000, 230.000000, 255.000000, 0.000000 +7036, -3.000000, 230.000000, 255.000000, 0.000000 +7037, -3.000000, 230.000000, 255.000000, 0.000000 +7038, -3.000000, 230.000000, 255.000000, 0.000000 +7039, -3.000000, 230.000000, 255.000000, 0.000000 +7040, -3.000000, 230.000000, 255.000000, 0.000000 +7041, -3.000000, 230.000000, 255.000000, 0.000000 +7042, -3.000000, 230.000000, 255.000000, 0.000000 +7043, -3.000000, 230.000000, 255.000000, 0.000000 +7044, -3.000000, 230.000000, 255.000000, 0.000000 +7045, -3.000000, 230.000000, 255.000000, 0.000000 +7046, -3.000000, 230.000000, 255.000000, 0.000000 +7047, -3.000000, 230.000000, 255.000000, 0.000000 +7048, -3.000000, 230.000000, 255.000000, 0.000000 +7049, -3.000000, 230.000000, 255.000000, 0.000000 +7050, -3.000000, 230.000000, 255.000000, 0.000000 +7051, -3.000000, 230.000000, 255.000000, 0.000000 +7052, -3.000000, 230.000000, 255.000000, 0.000000 +7053, -3.000000, 230.000000, 255.000000, 0.000000 +7054, -3.000000, 230.000000, 255.000000, 0.000000 +7055, -3.000000, 230.000000, 255.000000, 0.000000 +7056, -3.000000, 230.000000, 255.000000, 0.000000 +7057, -3.000000, 230.000000, 255.000000, 0.000000 +7058, -3.000000, 230.000000, 255.000000, 0.000000 +7059, -3.000000, 230.000000, 255.000000, 0.000000 +7060, -3.000000, 230.000000, 255.000000, 0.000000 +7061, -3.000000, 230.000000, 255.000000, 0.000000 +7062, -3.000000, 230.000000, 255.000000, 0.000000 +7063, -3.000000, 230.000000, 255.000000, 0.000000 +7064, -3.000000, 230.000000, 255.000000, 0.000000 +7065, -3.000000, 230.000000, 255.000000, 0.000000 +7066, -3.000000, 230.000000, 255.000000, 0.000000 +7067, -3.000000, 230.000000, 255.000000, 0.000000 +7068, -3.000000, 230.000000, 255.000000, 0.000000 +7069, -3.000000, 230.000000, 255.000000, 0.000000 +7070, -3.000000, 230.000000, 255.000000, 0.000000 +7071, -3.000000, 230.000000, 255.000000, 0.000000 +7072, -3.000000, 230.000000, 255.000000, 0.000000 +7073, -3.000000, 230.000000, 255.000000, 0.000000 +7074, -3.000000, 230.000000, 255.000000, 0.000000 +7075, -3.000000, 230.000000, 255.000000, 0.000000 +7076, -3.000000, 230.000000, 255.000000, 0.000000 +7077, -3.000000, 230.000000, 255.000000, 0.000000 +7078, -3.000000, 230.000000, 255.000000, 0.000000 +7079, -3.000000, 230.000000, 255.000000, 0.000000 +7080, -3.000000, 230.000000, 255.000000, 0.000000 +7081, -3.000000, 230.000000, 255.000000, 0.000000 +7082, -3.000000, 230.000000, 255.000000, 0.000000 +7083, -3.000000, 230.000000, 255.000000, 0.000000 +7084, -3.000000, 230.000000, 255.000000, 0.000000 +7085, -3.000000, 230.000000, 255.000000, 0.000000 +7086, -3.000000, 230.000000, 255.000000, 0.000000 +7087, -3.000000, 230.000000, 255.000000, 0.000000 +7088, -3.000000, 230.000000, 255.000000, 0.000000 +7089, -3.000000, 230.000000, 255.000000, 0.000000 +7090, -3.000000, 230.000000, 255.000000, 0.000000 +7091, -3.000000, 230.000000, 255.000000, 0.000000 +7092, -3.000000, 230.000000, 255.000000, 0.000000 +7093, -3.000000, 230.000000, 255.000000, 0.000000 +7094, -3.000000, 230.000000, 255.000000, 0.000000 +7095, -3.000000, 230.000000, 255.000000, 0.000000 +7096, -3.000000, 230.000000, 255.000000, 0.000000 +7097, -3.000000, 230.000000, 255.000000, 0.000000 +7098, -3.000000, 230.000000, 255.000000, 0.000000 +7099, -3.000000, 230.000000, 255.000000, 0.000000 +7100, -3.000000, 232.000000, 258.000000, 0.000000 +7101, -3.000000, 232.000000, 258.000000, 0.000000 +7102, -3.000000, 232.000000, 258.000000, 0.000000 +7103, -3.000000, 232.000000, 258.000000, 0.000000 +7104, -3.000000, 232.000000, 258.000000, 0.000000 +7105, -3.000000, 232.000000, 258.000000, 0.000000 +7106, -3.000000, 232.000000, 258.000000, 0.000000 +7107, -3.000000, 232.000000, 258.000000, 0.000000 +7108, -3.000000, 232.000000, 258.000000, 0.000000 +7109, -3.000000, 232.000000, 258.000000, 0.000000 +7110, -3.000000, 232.000000, 258.000000, 0.000000 +7111, -3.000000, 232.000000, 258.000000, 0.000000 +7112, -3.000000, 232.000000, 258.000000, 0.000000 +7113, -3.000000, 232.000000, 258.000000, 0.000000 +7114, -3.000000, 232.000000, 258.000000, 0.000000 +7115, -3.000000, 232.000000, 258.000000, 0.000000 +7116, -3.000000, 232.000000, 258.000000, 0.000000 +7117, -3.000000, 232.000000, 258.000000, 0.000000 +7118, -3.000000, 232.000000, 258.000000, 0.000000 +7119, -3.000000, 232.000000, 258.000000, 0.000000 +7120, -3.000000, 232.000000, 258.000000, 0.000000 +7121, -3.000000, 232.000000, 258.000000, 0.000000 +7122, -3.000000, 232.000000, 258.000000, 0.000000 +7123, -3.000000, 232.000000, 258.000000, 0.000000 +7124, -3.000000, 232.000000, 258.000000, 0.000000 +7125, -3.000000, 232.000000, 258.000000, 0.000000 +7126, -3.000000, 232.000000, 258.000000, 0.000000 +7127, -3.000000, 232.000000, 258.000000, 0.000000 +7128, -3.000000, 232.000000, 258.000000, 0.000000 +7129, -3.000000, 232.000000, 258.000000, 0.000000 +7130, -3.000000, 232.000000, 258.000000, 0.000000 +7131, -3.000000, 232.000000, 258.000000, 0.000000 +7132, -3.000000, 232.000000, 258.000000, 0.000000 +7133, -3.000000, 232.000000, 258.000000, 0.000000 +7134, -3.000000, 232.000000, 258.000000, 0.000000 +7135, -3.000000, 232.000000, 258.000000, 0.000000 +7136, -3.000000, 232.000000, 258.000000, 0.000000 +7137, -3.000000, 232.000000, 258.000000, 0.000000 +7138, -3.000000, 232.000000, 258.000000, 0.000000 +7139, -3.000000, 232.000000, 258.000000, 0.000000 +7140, -3.000000, 232.000000, 258.000000, 0.000000 +7141, -3.000000, 232.000000, 258.000000, 0.000000 +7142, -3.000000, 232.000000, 258.000000, 0.000000 +7143, -3.000000, 232.000000, 258.000000, 0.000000 +7144, -3.000000, 232.000000, 258.000000, 0.000000 +7145, -3.000000, 232.000000, 258.000000, 0.000000 +7146, -3.000000, 232.000000, 258.000000, 0.000000 +7147, -3.000000, 232.000000, 258.000000, 0.000000 +7148, -3.000000, 232.000000, 258.000000, 0.000000 +7149, -3.000000, 232.000000, 258.000000, 0.000000 +7150, -3.000000, 232.000000, 258.000000, 0.000000 +7151, -3.000000, 232.000000, 258.000000, 0.000000 +7152, -3.000000, 232.000000, 258.000000, 0.000000 +7153, -3.000000, 232.000000, 258.000000, 0.000000 +7154, -3.000000, 232.000000, 258.000000, 0.000000 +7155, -3.000000, 232.000000, 258.000000, 0.000000 +7156, -3.000000, 232.000000, 258.000000, 0.000000 +7157, -3.000000, 232.000000, 258.000000, 0.000000 +7158, -3.000000, 232.000000, 258.000000, 0.000000 +7159, -3.000000, 232.000000, 258.000000, 0.000000 +7160, -3.000000, 232.000000, 258.000000, 0.000000 +7161, -3.000000, 232.000000, 258.000000, 0.000000 +7162, -3.000000, 232.000000, 258.000000, 0.000000 +7163, -3.000000, 232.000000, 258.000000, 0.000000 +7164, -3.000000, 232.000000, 258.000000, 0.000000 +7165, -3.000000, 232.000000, 258.000000, 0.000000 +7166, -3.000000, 232.000000, 258.000000, 0.000000 +7167, -3.000000, 232.000000, 258.000000, 0.000000 +7168, -3.000000, 232.000000, 258.000000, 0.000000 +7169, -3.000000, 232.000000, 258.000000, 0.000000 +7170, -3.000000, 232.000000, 258.000000, 0.000000 +7171, -3.000000, 232.000000, 258.000000, 0.000000 +7172, -3.000000, 232.000000, 258.000000, 0.000000 +7173, -3.000000, 232.000000, 258.000000, 0.000000 +7174, -3.000000, 232.000000, 258.000000, 0.000000 +7175, -3.000000, 232.000000, 258.000000, 0.000000 +7176, -3.000000, 232.000000, 258.000000, 0.000000 +7177, -3.000000, 232.000000, 258.000000, 0.000000 +7178, -3.000000, 232.000000, 258.000000, 0.000000 +7179, -3.000000, 232.000000, 258.000000, 0.000000 +7180, -3.000000, 232.000000, 258.000000, 0.000000 +7181, -3.000000, 232.000000, 258.000000, 0.000000 +7182, -3.000000, 232.000000, 258.000000, 0.000000 +7183, -3.000000, 232.000000, 258.000000, 0.000000 +7184, -3.000000, 232.000000, 258.000000, 0.000000 +7185, -3.000000, 232.000000, 258.000000, 0.000000 +7186, -3.000000, 232.000000, 258.000000, 0.000000 +7187, -3.000000, 232.000000, 258.000000, 0.000000 +7188, -3.000000, 232.000000, 258.000000, 0.000000 +7189, -3.000000, 232.000000, 258.000000, 0.000000 +7190, -3.000000, 232.000000, 258.000000, 0.000000 +7191, -3.000000, 232.000000, 258.000000, 0.000000 +7192, -3.000000, 232.000000, 258.000000, 0.000000 +7193, -3.000000, 232.000000, 258.000000, 0.000000 +7194, -3.000000, 232.000000, 258.000000, 0.000000 +7195, -3.000000, 232.000000, 258.000000, 0.000000 +7196, -3.000000, 232.000000, 258.000000, 0.000000 +7197, -3.000000, 232.000000, 258.000000, 0.000000 +7198, -3.000000, 232.000000, 258.000000, 0.000000 +7199, -3.000000, 232.000000, 258.000000, 0.000000 +7200, -3.000000, 234.000000, 261.000000, 0.000000 +7201, -3.000000, 234.000000, 261.000000, 0.000000 +7202, -3.000000, 234.000000, 261.000000, 0.000000 +7203, -3.000000, 234.000000, 261.000000, 0.000000 +7204, -3.000000, 234.000000, 261.000000, 0.000000 +7205, -3.000000, 234.000000, 261.000000, 0.000000 +7206, -3.000000, 234.000000, 261.000000, 0.000000 +7207, -3.000000, 234.000000, 261.000000, 0.000000 +7208, -3.000000, 234.000000, 261.000000, 0.000000 +7209, -3.000000, 234.000000, 261.000000, 0.000000 +7210, -3.000000, 234.000000, 261.000000, 0.000000 +7211, -3.000000, 234.000000, 261.000000, 0.000000 +7212, -3.000000, 234.000000, 261.000000, 0.000000 +7213, -3.000000, 234.000000, 261.000000, 0.000000 +7214, -3.000000, 234.000000, 261.000000, 0.000000 +7215, -3.000000, 234.000000, 261.000000, 0.000000 +7216, -3.000000, 234.000000, 261.000000, 0.000000 +7217, -3.000000, 234.000000, 261.000000, 0.000000 +7218, -3.000000, 234.000000, 261.000000, 0.000000 +7219, -3.000000, 234.000000, 261.000000, 0.000000 +7220, -3.000000, 234.000000, 261.000000, 0.000000 +7221, -3.000000, 234.000000, 261.000000, 0.000000 +7222, -3.000000, 234.000000, 261.000000, 0.000000 +7223, -3.000000, 234.000000, 261.000000, 0.000000 +7224, -3.000000, 234.000000, 261.000000, 0.000000 +7225, -3.000000, 234.000000, 261.000000, 0.000000 +7226, -3.000000, 234.000000, 261.000000, 0.000000 +7227, -3.000000, 234.000000, 261.000000, 0.000000 +7228, -3.000000, 234.000000, 261.000000, 0.000000 +7229, -3.000000, 234.000000, 261.000000, 0.000000 +7230, -3.000000, 234.000000, 261.000000, 0.000000 +7231, -3.000000, 234.000000, 261.000000, 0.000000 +7232, -3.000000, 234.000000, 261.000000, 0.000000 +7233, -3.000000, 234.000000, 261.000000, 0.000000 +7234, -3.000000, 234.000000, 261.000000, 0.000000 +7235, -3.000000, 234.000000, 261.000000, 0.000000 +7236, -3.000000, 234.000000, 261.000000, 0.000000 +7237, -3.000000, 234.000000, 261.000000, 0.000000 +7238, -3.000000, 234.000000, 261.000000, 0.000000 +7239, -3.000000, 234.000000, 261.000000, 0.000000 +7240, -3.000000, 234.000000, 261.000000, 0.000000 +7241, -3.000000, 234.000000, 261.000000, 0.000000 +7242, -3.000000, 234.000000, 261.000000, 0.000000 +7243, -3.000000, 234.000000, 261.000000, 0.000000 +7244, -3.000000, 234.000000, 261.000000, 0.000000 +7245, -3.000000, 234.000000, 261.000000, 0.000000 +7246, -3.000000, 234.000000, 261.000000, 0.000000 +7247, -3.000000, 234.000000, 261.000000, 0.000000 +7248, -3.000000, 234.000000, 261.000000, 0.000000 +7249, -3.000000, 234.000000, 261.000000, 0.000000 +7250, -3.000000, 234.000000, 261.000000, 0.000000 +7251, -3.000000, 234.000000, 261.000000, 0.000000 +7252, -3.000000, 234.000000, 261.000000, 0.000000 +7253, -3.000000, 234.000000, 261.000000, 0.000000 +7254, -3.000000, 234.000000, 261.000000, 0.000000 +7255, -3.000000, 234.000000, 261.000000, 0.000000 +7256, -3.000000, 234.000000, 261.000000, 0.000000 +7257, -3.000000, 234.000000, 261.000000, 0.000000 +7258, -3.000000, 234.000000, 261.000000, 0.000000 +7259, -3.000000, 234.000000, 261.000000, 0.000000 +7260, -3.000000, 234.000000, 261.000000, 0.000000 +7261, -3.000000, 234.000000, 261.000000, 0.000000 +7262, -3.000000, 234.000000, 261.000000, 0.000000 +7263, -3.000000, 234.000000, 261.000000, 0.000000 +7264, -3.000000, 234.000000, 261.000000, 0.000000 +7265, -3.000000, 234.000000, 261.000000, 0.000000 +7266, -3.000000, 234.000000, 261.000000, 0.000000 +7267, -3.000000, 234.000000, 261.000000, 0.000000 +7268, -3.000000, 234.000000, 261.000000, 0.000000 +7269, -3.000000, 234.000000, 261.000000, 0.000000 +7270, -3.000000, 234.000000, 261.000000, 0.000000 +7271, -3.000000, 234.000000, 261.000000, 0.000000 +7272, -3.000000, 234.000000, 261.000000, 0.000000 +7273, -3.000000, 234.000000, 261.000000, 0.000000 +7274, -3.000000, 234.000000, 261.000000, 0.000000 +7275, -3.000000, 234.000000, 261.000000, 0.000000 +7276, -3.000000, 234.000000, 261.000000, 0.000000 +7277, -3.000000, 234.000000, 261.000000, 0.000000 +7278, -3.000000, 234.000000, 261.000000, 0.000000 +7279, -3.000000, 234.000000, 261.000000, 0.000000 +7280, -3.000000, 234.000000, 261.000000, 0.000000 +7281, -3.000000, 234.000000, 261.000000, 0.000000 +7282, -3.000000, 234.000000, 261.000000, 0.000000 +7283, -3.000000, 234.000000, 261.000000, 0.000000 +7284, -3.000000, 234.000000, 261.000000, 0.000000 +7285, -3.000000, 234.000000, 261.000000, 0.000000 +7286, -3.000000, 234.000000, 261.000000, 0.000000 +7287, -3.000000, 234.000000, 261.000000, 0.000000 +7288, -3.000000, 234.000000, 261.000000, 0.000000 +7289, -3.000000, 234.000000, 261.000000, 0.000000 +7290, -3.000000, 234.000000, 261.000000, 0.000000 +7291, -3.000000, 234.000000, 261.000000, 0.000000 +7292, -3.000000, 234.000000, 261.000000, 0.000000 +7293, -3.000000, 234.000000, 261.000000, 0.000000 +7294, -3.000000, 234.000000, 261.000000, 0.000000 +7295, -3.000000, 234.000000, 261.000000, 0.000000 +7296, -3.000000, 234.000000, 261.000000, 0.000000 +7297, -3.000000, 234.000000, 261.000000, 0.000000 +7298, -3.000000, 234.000000, 261.000000, 0.000000 +7299, -3.000000, 234.000000, 261.000000, 0.000000 +7300, -3.000000, 236.000000, 264.000000, 0.000000 +7301, -3.000000, 236.000000, 264.000000, 0.000000 +7302, -3.000000, 236.000000, 264.000000, 0.000000 +7303, -3.000000, 236.000000, 264.000000, 0.000000 +7304, -3.000000, 236.000000, 264.000000, 0.000000 +7305, -3.000000, 236.000000, 264.000000, 0.000000 +7306, -3.000000, 236.000000, 264.000000, 0.000000 +7307, -3.000000, 236.000000, 264.000000, 0.000000 +7308, -3.000000, 236.000000, 264.000000, 0.000000 +7309, -3.000000, 236.000000, 264.000000, 0.000000 +7310, -3.000000, 236.000000, 264.000000, 0.000000 +7311, -3.000000, 236.000000, 264.000000, 0.000000 +7312, -3.000000, 236.000000, 264.000000, 0.000000 +7313, -3.000000, 236.000000, 264.000000, 0.000000 +7314, -3.000000, 236.000000, 264.000000, 0.000000 +7315, -3.000000, 236.000000, 264.000000, 0.000000 +7316, -3.000000, 236.000000, 264.000000, 0.000000 +7317, -3.000000, 236.000000, 264.000000, 0.000000 +7318, -3.000000, 236.000000, 264.000000, 0.000000 +7319, -3.000000, 236.000000, 264.000000, 0.000000 +7320, -3.000000, 236.000000, 264.000000, 0.000000 +7321, -3.000000, 236.000000, 264.000000, 0.000000 +7322, -3.000000, 236.000000, 264.000000, 0.000000 +7323, -3.000000, 236.000000, 264.000000, 0.000000 +7324, -3.000000, 236.000000, 264.000000, 0.000000 +7325, -3.000000, 236.000000, 264.000000, 0.000000 +7326, -3.000000, 236.000000, 264.000000, 0.000000 +7327, -3.000000, 236.000000, 264.000000, 0.000000 +7328, -3.000000, 236.000000, 264.000000, 0.000000 +7329, -3.000000, 236.000000, 264.000000, 0.000000 +7330, -3.000000, 236.000000, 264.000000, 0.000000 +7331, -3.000000, 236.000000, 264.000000, 0.000000 +7332, -3.000000, 236.000000, 264.000000, 0.000000 +7333, -3.000000, 236.000000, 264.000000, 0.000000 +7334, -3.000000, 236.000000, 264.000000, 0.000000 +7335, -3.000000, 236.000000, 264.000000, 0.000000 +7336, -3.000000, 236.000000, 264.000000, 0.000000 +7337, -3.000000, 236.000000, 264.000000, 0.000000 +7338, -3.000000, 236.000000, 264.000000, 0.000000 +7339, -3.000000, 236.000000, 264.000000, 0.000000 +7340, -3.000000, 236.000000, 264.000000, 0.000000 +7341, -3.000000, 236.000000, 264.000000, 0.000000 +7342, -3.000000, 236.000000, 264.000000, 0.000000 +7343, -3.000000, 236.000000, 264.000000, 0.000000 +7344, -3.000000, 236.000000, 264.000000, 0.000000 +7345, -3.000000, 236.000000, 264.000000, 0.000000 +7346, -3.000000, 236.000000, 264.000000, 0.000000 +7347, -3.000000, 236.000000, 264.000000, 0.000000 +7348, -3.000000, 236.000000, 264.000000, 0.000000 +7349, -3.000000, 236.000000, 264.000000, 0.000000 +7350, -3.000000, 236.000000, 264.000000, 0.000000 +7351, -3.000000, 236.000000, 264.000000, 0.000000 +7352, -3.000000, 236.000000, 264.000000, 0.000000 +7353, -3.000000, 236.000000, 264.000000, 0.000000 +7354, -3.000000, 236.000000, 264.000000, 0.000000 +7355, -3.000000, 236.000000, 264.000000, 0.000000 +7356, -3.000000, 236.000000, 264.000000, 0.000000 +7357, -3.000000, 236.000000, 264.000000, 0.000000 +7358, -3.000000, 236.000000, 264.000000, 0.000000 +7359, -3.000000, 236.000000, 264.000000, 0.000000 +7360, -3.000000, 236.000000, 264.000000, 0.000000 +7361, -3.000000, 236.000000, 264.000000, 0.000000 +7362, -3.000000, 236.000000, 264.000000, 0.000000 +7363, -3.000000, 236.000000, 264.000000, 0.000000 +7364, -3.000000, 236.000000, 264.000000, 0.000000 +7365, -3.000000, 236.000000, 264.000000, 0.000000 +7366, -3.000000, 236.000000, 264.000000, 0.000000 +7367, -3.000000, 236.000000, 264.000000, 0.000000 +7368, -3.000000, 236.000000, 264.000000, 0.000000 +7369, -3.000000, 236.000000, 264.000000, 0.000000 +7370, -3.000000, 236.000000, 264.000000, 0.000000 +7371, -3.000000, 236.000000, 264.000000, 0.000000 +7372, -3.000000, 236.000000, 264.000000, 0.000000 +7373, -3.000000, 236.000000, 264.000000, 0.000000 +7374, -3.000000, 236.000000, 264.000000, 0.000000 +7375, -3.000000, 236.000000, 264.000000, 0.000000 +7376, -3.000000, 236.000000, 264.000000, 0.000000 +7377, -3.000000, 236.000000, 264.000000, 0.000000 +7378, -3.000000, 236.000000, 264.000000, 0.000000 +7379, -3.000000, 236.000000, 264.000000, 0.000000 +7380, -3.000000, 236.000000, 264.000000, 0.000000 +7381, -3.000000, 236.000000, 264.000000, 0.000000 +7382, -3.000000, 236.000000, 264.000000, 0.000000 +7383, -3.000000, 236.000000, 264.000000, 0.000000 +7384, -3.000000, 236.000000, 264.000000, 0.000000 +7385, -3.000000, 236.000000, 264.000000, 0.000000 +7386, -3.000000, 236.000000, 264.000000, 0.000000 +7387, -3.000000, 236.000000, 264.000000, 0.000000 +7388, -3.000000, 236.000000, 264.000000, 0.000000 +7389, -3.000000, 236.000000, 264.000000, 0.000000 +7390, -3.000000, 236.000000, 264.000000, 0.000000 +7391, -3.000000, 236.000000, 264.000000, 0.000000 +7392, -3.000000, 236.000000, 264.000000, 0.000000 +7393, -3.000000, 236.000000, 264.000000, 0.000000 +7394, -3.000000, 236.000000, 264.000000, 0.000000 +7395, -3.000000, 236.000000, 264.000000, 0.000000 +7396, -3.000000, 236.000000, 264.000000, 0.000000 +7397, -3.000000, 236.000000, 264.000000, 0.000000 +7398, -3.000000, 236.000000, 264.000000, 0.000000 +7399, -3.000000, 236.000000, 264.000000, 0.000000 +7400, -3.000000, 238.000000, 267.000000, 0.000000 +7401, -3.000000, 238.000000, 267.000000, 0.000000 +7402, -3.000000, 238.000000, 267.000000, 0.000000 +7403, -3.000000, 238.000000, 267.000000, 0.000000 +7404, -3.000000, 238.000000, 267.000000, 0.000000 +7405, -3.000000, 238.000000, 267.000000, 0.000000 +7406, -3.000000, 238.000000, 267.000000, 0.000000 +7407, -3.000000, 238.000000, 267.000000, 0.000000 +7408, -3.000000, 238.000000, 267.000000, 0.000000 +7409, -3.000000, 238.000000, 267.000000, 0.000000 +7410, -3.000000, 238.000000, 267.000000, 0.000000 +7411, -3.000000, 238.000000, 267.000000, 0.000000 +7412, -3.000000, 238.000000, 267.000000, 0.000000 +7413, -3.000000, 238.000000, 267.000000, 0.000000 +7414, -3.000000, 238.000000, 267.000000, 0.000000 +7415, -3.000000, 238.000000, 267.000000, 0.000000 +7416, -3.000000, 238.000000, 267.000000, 0.000000 +7417, -3.000000, 238.000000, 267.000000, 0.000000 +7418, -3.000000, 238.000000, 267.000000, 0.000000 +7419, -3.000000, 238.000000, 267.000000, 0.000000 +7420, -3.000000, 238.000000, 267.000000, 0.000000 +7421, -3.000000, 238.000000, 267.000000, 0.000000 +7422, -3.000000, 238.000000, 267.000000, 0.000000 +7423, -3.000000, 238.000000, 267.000000, 0.000000 +7424, -3.000000, 238.000000, 267.000000, 0.000000 +7425, -3.000000, 238.000000, 267.000000, 0.000000 +7426, -3.000000, 238.000000, 267.000000, 0.000000 +7427, -3.000000, 238.000000, 267.000000, 0.000000 +7428, -3.000000, 238.000000, 267.000000, 0.000000 +7429, -3.000000, 238.000000, 267.000000, 0.000000 +7430, -3.000000, 238.000000, 267.000000, 0.000000 +7431, -3.000000, 238.000000, 267.000000, 0.000000 +7432, -3.000000, 238.000000, 267.000000, 0.000000 +7433, -3.000000, 238.000000, 267.000000, 0.000000 +7434, -3.000000, 238.000000, 267.000000, 0.000000 +7435, -3.000000, 238.000000, 267.000000, 0.000000 +7436, -3.000000, 238.000000, 267.000000, 0.000000 +7437, -3.000000, 238.000000, 267.000000, 0.000000 +7438, -3.000000, 238.000000, 267.000000, 0.000000 +7439, -3.000000, 238.000000, 267.000000, 0.000000 +7440, -3.000000, 238.000000, 267.000000, 0.000000 +7441, -3.000000, 238.000000, 267.000000, 0.000000 +7442, -3.000000, 238.000000, 267.000000, 0.000000 +7443, -3.000000, 238.000000, 267.000000, 0.000000 +7444, -3.000000, 238.000000, 267.000000, 0.000000 +7445, -3.000000, 238.000000, 267.000000, 0.000000 +7446, -3.000000, 238.000000, 267.000000, 0.000000 +7447, -3.000000, 238.000000, 267.000000, 0.000000 +7448, -3.000000, 238.000000, 267.000000, 0.000000 +7449, -3.000000, 238.000000, 267.000000, 0.000000 +7450, -3.000000, 238.000000, 267.000000, 0.000000 +7451, -3.000000, 238.000000, 267.000000, 0.000000 +7452, -3.000000, 238.000000, 267.000000, 0.000000 +7453, -3.000000, 238.000000, 267.000000, 0.000000 +7454, -3.000000, 238.000000, 267.000000, 0.000000 +7455, -3.000000, 238.000000, 267.000000, 0.000000 +7456, -3.000000, 238.000000, 267.000000, 0.000000 +7457, -3.000000, 238.000000, 267.000000, 0.000000 +7458, -3.000000, 238.000000, 267.000000, 0.000000 +7459, -3.000000, 238.000000, 267.000000, 0.000000 +7460, -3.000000, 238.000000, 267.000000, 0.000000 +7461, -3.000000, 238.000000, 267.000000, 0.000000 +7462, -3.000000, 238.000000, 267.000000, 0.000000 +7463, -3.000000, 238.000000, 267.000000, 0.000000 +7464, -3.000000, 238.000000, 267.000000, 0.000000 +7465, -3.000000, 238.000000, 267.000000, 0.000000 +7466, -3.000000, 238.000000, 267.000000, 0.000000 +7467, -3.000000, 238.000000, 267.000000, 0.000000 +7468, -3.000000, 238.000000, 267.000000, 0.000000 +7469, -3.000000, 238.000000, 267.000000, 0.000000 +7470, -3.000000, 238.000000, 267.000000, 0.000000 +7471, -3.000000, 238.000000, 267.000000, 0.000000 +7472, -3.000000, 238.000000, 267.000000, 0.000000 +7473, -3.000000, 238.000000, 267.000000, 0.000000 +7474, -3.000000, 238.000000, 267.000000, 0.000000 +7475, -3.000000, 238.000000, 267.000000, 0.000000 +7476, -3.000000, 238.000000, 267.000000, 0.000000 +7477, -3.000000, 238.000000, 267.000000, 0.000000 +7478, -3.000000, 238.000000, 267.000000, 0.000000 +7479, -3.000000, 238.000000, 267.000000, 0.000000 +7480, -3.000000, 238.000000, 267.000000, 0.000000 +7481, -3.000000, 238.000000, 267.000000, 0.000000 +7482, -3.000000, 238.000000, 267.000000, 0.000000 +7483, -3.000000, 238.000000, 267.000000, 0.000000 +7484, -3.000000, 238.000000, 267.000000, 0.000000 +7485, -3.000000, 238.000000, 267.000000, 0.000000 +7486, -3.000000, 238.000000, 267.000000, 0.000000 +7487, -3.000000, 238.000000, 267.000000, 0.000000 +7488, -3.000000, 238.000000, 267.000000, 0.000000 +7489, -3.000000, 238.000000, 267.000000, 0.000000 +7490, -3.000000, 238.000000, 267.000000, 0.000000 +7491, -3.000000, 238.000000, 267.000000, 0.000000 +7492, -3.000000, 238.000000, 267.000000, 0.000000 +7493, -3.000000, 238.000000, 267.000000, 0.000000 +7494, -3.000000, 238.000000, 267.000000, 0.000000 +7495, -3.000000, 238.000000, 267.000000, 0.000000 +7496, -3.000000, 238.000000, 267.000000, 0.000000 +7497, -3.000000, 238.000000, 267.000000, 0.000000 +7498, -3.000000, 238.000000, 267.000000, 0.000000 +7499, -3.000000, 238.000000, 267.000000, 0.000000 +7500, -3.000000, 240.000000, 270.000000, 0.000000 +7501, -3.000000, 240.000000, 270.000000, 0.000000 +7502, -3.000000, 240.000000, 270.000000, 0.000000 +7503, -3.000000, 240.000000, 270.000000, 0.000000 +7504, -3.000000, 240.000000, 270.000000, 0.000000 +7505, -3.000000, 240.000000, 270.000000, 0.000000 +7506, -3.000000, 240.000000, 270.000000, 0.000000 +7507, -3.000000, 240.000000, 270.000000, 0.000000 +7508, -3.000000, 240.000000, 270.000000, 0.000000 +7509, -3.000000, 240.000000, 270.000000, 0.000000 +7510, -3.000000, 240.000000, 270.000000, 0.000000 +7511, -3.000000, 240.000000, 270.000000, 0.000000 +7512, -3.000000, 240.000000, 270.000000, 0.000000 +7513, -3.000000, 240.000000, 270.000000, 0.000000 +7514, -3.000000, 240.000000, 270.000000, 0.000000 +7515, -3.000000, 240.000000, 270.000000, 0.000000 +7516, -3.000000, 240.000000, 270.000000, 0.000000 +7517, -3.000000, 240.000000, 270.000000, 0.000000 +7518, -3.000000, 240.000000, 270.000000, 0.000000 +7519, -3.000000, 240.000000, 270.000000, 0.000000 +7520, -3.000000, 240.000000, 270.000000, 0.000000 +7521, -3.000000, 240.000000, 270.000000, 0.000000 +7522, -3.000000, 240.000000, 270.000000, 0.000000 +7523, -3.000000, 240.000000, 270.000000, 0.000000 +7524, -3.000000, 240.000000, 270.000000, 0.000000 +7525, -3.000000, 240.000000, 270.000000, 0.000000 +7526, -3.000000, 240.000000, 270.000000, 0.000000 +7527, -3.000000, 240.000000, 270.000000, 0.000000 +7528, -3.000000, 240.000000, 270.000000, 0.000000 +7529, -3.000000, 240.000000, 270.000000, 0.000000 +7530, -3.000000, 240.000000, 270.000000, 0.000000 +7531, -3.000000, 240.000000, 270.000000, 0.000000 +7532, -3.000000, 240.000000, 270.000000, 0.000000 +7533, -3.000000, 240.000000, 270.000000, 0.000000 +7534, -3.000000, 240.000000, 270.000000, 0.000000 +7535, -3.000000, 240.000000, 270.000000, 0.000000 +7536, -3.000000, 240.000000, 270.000000, 0.000000 +7537, -3.000000, 240.000000, 270.000000, 0.000000 +7538, -3.000000, 240.000000, 270.000000, 0.000000 +7539, -3.000000, 240.000000, 270.000000, 0.000000 +7540, -3.000000, 240.000000, 270.000000, 0.000000 +7541, -3.000000, 240.000000, 270.000000, 0.000000 +7542, -3.000000, 240.000000, 270.000000, 0.000000 +7543, -3.000000, 240.000000, 270.000000, 0.000000 +7544, -3.000000, 240.000000, 270.000000, 0.000000 +7545, -3.000000, 240.000000, 270.000000, 0.000000 +7546, -3.000000, 240.000000, 270.000000, 0.000000 +7547, -3.000000, 240.000000, 270.000000, 0.000000 +7548, -3.000000, 240.000000, 270.000000, 0.000000 +7549, -3.000000, 240.000000, 270.000000, 0.000000 +7550, -3.000000, 240.000000, 270.000000, 0.000000 +7551, -3.000000, 240.000000, 270.000000, 0.000000 +7552, -3.000000, 240.000000, 270.000000, 0.000000 +7553, -3.000000, 240.000000, 270.000000, 0.000000 +7554, -3.000000, 240.000000, 270.000000, 0.000000 +7555, -3.000000, 240.000000, 270.000000, 0.000000 +7556, -3.000000, 240.000000, 270.000000, 0.000000 +7557, -3.000000, 240.000000, 270.000000, 0.000000 +7558, -3.000000, 240.000000, 270.000000, 0.000000 +7559, -3.000000, 240.000000, 270.000000, 0.000000 +7560, -3.000000, 240.000000, 270.000000, 0.000000 +7561, -3.000000, 240.000000, 270.000000, 0.000000 +7562, -3.000000, 240.000000, 270.000000, 0.000000 +7563, -3.000000, 240.000000, 270.000000, 0.000000 +7564, -3.000000, 240.000000, 270.000000, 0.000000 +7565, -3.000000, 240.000000, 270.000000, 0.000000 +7566, -3.000000, 240.000000, 270.000000, 0.000000 +7567, -3.000000, 240.000000, 270.000000, 0.000000 +7568, -3.000000, 240.000000, 270.000000, 0.000000 +7569, -3.000000, 240.000000, 270.000000, 0.000000 +7570, -3.000000, 240.000000, 270.000000, 0.000000 +7571, -3.000000, 240.000000, 270.000000, 0.000000 +7572, -3.000000, 240.000000, 270.000000, 0.000000 +7573, -3.000000, 240.000000, 270.000000, 0.000000 +7574, -3.000000, 240.000000, 270.000000, 0.000000 +7575, -3.000000, 240.000000, 270.000000, 0.000000 +7576, -3.000000, 240.000000, 270.000000, 0.000000 +7577, -3.000000, 240.000000, 270.000000, 0.000000 +7578, -3.000000, 240.000000, 270.000000, 0.000000 +7579, -3.000000, 240.000000, 270.000000, 0.000000 +7580, -3.000000, 240.000000, 270.000000, 0.000000 +7581, -3.000000, 240.000000, 270.000000, 0.000000 +7582, -3.000000, 240.000000, 270.000000, 0.000000 +7583, -3.000000, 240.000000, 270.000000, 0.000000 +7584, -3.000000, 240.000000, 270.000000, 0.000000 +7585, -3.000000, 240.000000, 270.000000, 0.000000 +7586, -3.000000, 240.000000, 270.000000, 0.000000 +7587, -3.000000, 240.000000, 270.000000, 0.000000 +7588, -3.000000, 240.000000, 270.000000, 0.000000 +7589, -3.000000, 240.000000, 270.000000, 0.000000 +7590, -3.000000, 240.000000, 270.000000, 0.000000 +7591, -3.000000, 240.000000, 270.000000, 0.000000 +7592, -3.000000, 240.000000, 270.000000, 0.000000 +7593, -3.000000, 240.000000, 270.000000, 0.000000 +7594, -3.000000, 240.000000, 270.000000, 0.000000 +7595, -3.000000, 240.000000, 270.000000, 0.000000 +7596, -3.000000, 240.000000, 270.000000, 0.000000 +7597, -3.000000, 240.000000, 270.000000, 0.000000 +7598, -3.000000, 240.000000, 270.000000, 0.000000 +7599, -3.000000, 240.000000, 270.000000, 0.000000 +7600, -3.000000, 242.000000, 273.000000, 0.000000 +7601, -3.000000, 242.000000, 273.000000, 0.000000 +7602, -3.000000, 242.000000, 273.000000, 0.000000 +7603, -3.000000, 242.000000, 273.000000, 0.000000 +7604, -3.000000, 242.000000, 273.000000, 0.000000 +7605, -3.000000, 242.000000, 273.000000, 0.000000 +7606, -3.000000, 242.000000, 273.000000, 0.000000 +7607, -3.000000, 242.000000, 273.000000, 0.000000 +7608, -3.000000, 242.000000, 273.000000, 0.000000 +7609, -3.000000, 242.000000, 273.000000, 0.000000 +7610, -3.000000, 242.000000, 273.000000, 0.000000 +7611, -3.000000, 242.000000, 273.000000, 0.000000 +7612, -3.000000, 242.000000, 273.000000, 0.000000 +7613, -3.000000, 242.000000, 273.000000, 0.000000 +7614, -3.000000, 242.000000, 273.000000, 0.000000 +7615, -3.000000, 242.000000, 273.000000, 0.000000 +7616, -3.000000, 242.000000, 273.000000, 0.000000 +7617, -3.000000, 242.000000, 273.000000, 0.000000 +7618, -3.000000, 242.000000, 273.000000, 0.000000 +7619, -3.000000, 242.000000, 273.000000, 0.000000 +7620, -3.000000, 242.000000, 273.000000, 0.000000 +7621, -3.000000, 242.000000, 273.000000, 0.000000 +7622, -3.000000, 242.000000, 273.000000, 0.000000 +7623, -3.000000, 242.000000, 273.000000, 0.000000 +7624, -3.000000, 242.000000, 273.000000, 0.000000 +7625, -3.000000, 242.000000, 273.000000, 0.000000 +7626, -3.000000, 242.000000, 273.000000, 0.000000 +7627, -3.000000, 242.000000, 273.000000, 0.000000 +7628, -3.000000, 242.000000, 273.000000, 0.000000 +7629, -3.000000, 242.000000, 273.000000, 0.000000 +7630, -3.000000, 242.000000, 273.000000, 0.000000 +7631, -3.000000, 242.000000, 273.000000, 0.000000 +7632, -3.000000, 242.000000, 273.000000, 0.000000 +7633, -3.000000, 242.000000, 273.000000, 0.000000 +7634, -3.000000, 242.000000, 273.000000, 0.000000 +7635, -3.000000, 242.000000, 273.000000, 0.000000 +7636, -3.000000, 242.000000, 273.000000, 0.000000 +7637, -3.000000, 242.000000, 273.000000, 0.000000 +7638, -3.000000, 242.000000, 273.000000, 0.000000 +7639, -3.000000, 242.000000, 273.000000, 0.000000 +7640, -3.000000, 242.000000, 273.000000, 0.000000 +7641, -3.000000, 242.000000, 273.000000, 0.000000 +7642, -3.000000, 242.000000, 273.000000, 0.000000 +7643, -3.000000, 242.000000, 273.000000, 0.000000 +7644, -3.000000, 242.000000, 273.000000, 0.000000 +7645, -3.000000, 242.000000, 273.000000, 0.000000 +7646, -3.000000, 242.000000, 273.000000, 0.000000 +7647, -3.000000, 242.000000, 273.000000, 0.000000 +7648, -3.000000, 242.000000, 273.000000, 0.000000 +7649, -3.000000, 242.000000, 273.000000, 0.000000 +7650, -3.000000, 242.000000, 273.000000, 0.000000 +7651, -3.000000, 242.000000, 273.000000, 0.000000 +7652, -3.000000, 242.000000, 273.000000, 0.000000 +7653, -3.000000, 242.000000, 273.000000, 0.000000 +7654, -3.000000, 242.000000, 273.000000, 0.000000 +7655, -3.000000, 242.000000, 273.000000, 0.000000 +7656, -3.000000, 242.000000, 273.000000, 0.000000 +7657, -3.000000, 242.000000, 273.000000, 0.000000 +7658, -3.000000, 242.000000, 273.000000, 0.000000 +7659, -3.000000, 242.000000, 273.000000, 0.000000 +7660, -3.000000, 242.000000, 273.000000, 0.000000 +7661, -3.000000, 242.000000, 273.000000, 0.000000 +7662, -3.000000, 242.000000, 273.000000, 0.000000 +7663, -3.000000, 242.000000, 273.000000, 0.000000 +7664, -3.000000, 242.000000, 273.000000, 0.000000 +7665, -3.000000, 242.000000, 273.000000, 0.000000 +7666, -3.000000, 242.000000, 273.000000, 0.000000 +7667, -3.000000, 242.000000, 273.000000, 0.000000 +7668, -3.000000, 242.000000, 273.000000, 0.000000 +7669, -3.000000, 242.000000, 273.000000, 0.000000 +7670, -3.000000, 242.000000, 273.000000, 0.000000 +7671, -3.000000, 242.000000, 273.000000, 0.000000 +7672, -3.000000, 242.000000, 273.000000, 0.000000 +7673, -3.000000, 242.000000, 273.000000, 0.000000 +7674, -3.000000, 242.000000, 273.000000, 0.000000 +7675, -3.000000, 242.000000, 273.000000, 0.000000 +7676, -3.000000, 242.000000, 273.000000, 0.000000 +7677, -3.000000, 242.000000, 273.000000, 0.000000 +7678, -3.000000, 242.000000, 273.000000, 0.000000 +7679, -3.000000, 242.000000, 273.000000, 0.000000 +7680, -3.000000, 242.000000, 273.000000, 0.000000 +7681, -3.000000, 242.000000, 273.000000, 0.000000 +7682, -3.000000, 242.000000, 273.000000, 0.000000 +7683, -3.000000, 242.000000, 273.000000, 0.000000 +7684, -3.000000, 242.000000, 273.000000, 0.000000 +7685, -3.000000, 242.000000, 273.000000, 0.000000 +7686, -3.000000, 242.000000, 273.000000, 0.000000 +7687, -3.000000, 242.000000, 273.000000, 0.000000 +7688, -3.000000, 242.000000, 273.000000, 0.000000 +7689, -3.000000, 242.000000, 273.000000, 0.000000 +7690, -3.000000, 242.000000, 273.000000, 0.000000 +7691, -3.000000, 242.000000, 273.000000, 0.000000 +7692, -3.000000, 242.000000, 273.000000, 0.000000 +7693, -3.000000, 242.000000, 273.000000, 0.000000 +7694, -3.000000, 242.000000, 273.000000, 0.000000 +7695, -3.000000, 242.000000, 273.000000, 0.000000 +7696, -3.000000, 242.000000, 273.000000, 0.000000 +7697, -3.000000, 242.000000, 273.000000, 0.000000 +7698, -3.000000, 242.000000, 273.000000, 0.000000 +7699, -3.000000, 242.000000, 273.000000, 0.000000 +7700, -3.000000, 244.000000, 276.000000, 0.000000 +7701, -3.000000, 244.000000, 276.000000, 0.000000 +7702, -3.000000, 244.000000, 276.000000, 0.000000 +7703, -3.000000, 244.000000, 276.000000, 0.000000 +7704, -3.000000, 244.000000, 276.000000, 0.000000 +7705, -3.000000, 244.000000, 276.000000, 0.000000 +7706, -3.000000, 244.000000, 276.000000, 0.000000 +7707, -3.000000, 244.000000, 276.000000, 0.000000 +7708, -3.000000, 244.000000, 276.000000, 0.000000 +7709, -3.000000, 244.000000, 276.000000, 0.000000 +7710, -3.000000, 244.000000, 276.000000, 0.000000 +7711, -3.000000, 244.000000, 276.000000, 0.000000 +7712, -3.000000, 244.000000, 276.000000, 0.000000 +7713, -3.000000, 244.000000, 276.000000, 0.000000 +7714, -3.000000, 244.000000, 276.000000, 0.000000 +7715, -3.000000, 244.000000, 276.000000, 0.000000 +7716, -3.000000, 244.000000, 276.000000, 0.000000 +7717, -3.000000, 244.000000, 276.000000, 0.000000 +7718, -3.000000, 244.000000, 276.000000, 0.000000 +7719, -3.000000, 244.000000, 276.000000, 0.000000 +7720, -3.000000, 244.000000, 276.000000, 0.000000 +7721, -3.000000, 244.000000, 276.000000, 0.000000 +7722, -3.000000, 244.000000, 276.000000, 0.000000 +7723, -3.000000, 244.000000, 276.000000, 0.000000 +7724, -3.000000, 244.000000, 276.000000, 0.000000 +7725, -3.000000, 244.000000, 276.000000, 0.000000 +7726, -3.000000, 244.000000, 276.000000, 0.000000 +7727, -3.000000, 244.000000, 276.000000, 0.000000 +7728, -3.000000, 244.000000, 276.000000, 0.000000 +7729, -3.000000, 244.000000, 276.000000, 0.000000 +7730, -3.000000, 244.000000, 276.000000, 0.000000 +7731, -3.000000, 244.000000, 276.000000, 0.000000 +7732, -3.000000, 244.000000, 276.000000, 0.000000 +7733, -3.000000, 244.000000, 276.000000, 0.000000 +7734, -3.000000, 244.000000, 276.000000, 0.000000 +7735, -3.000000, 244.000000, 276.000000, 0.000000 +7736, -3.000000, 244.000000, 276.000000, 0.000000 +7737, -3.000000, 244.000000, 276.000000, 0.000000 +7738, -3.000000, 244.000000, 276.000000, 0.000000 +7739, -3.000000, 244.000000, 276.000000, 0.000000 +7740, -3.000000, 244.000000, 276.000000, 0.000000 +7741, -3.000000, 244.000000, 276.000000, 0.000000 +7742, -3.000000, 244.000000, 276.000000, 0.000000 +7743, -3.000000, 244.000000, 276.000000, 0.000000 +7744, -3.000000, 244.000000, 276.000000, 0.000000 +7745, -3.000000, 244.000000, 276.000000, 0.000000 +7746, -3.000000, 244.000000, 276.000000, 0.000000 +7747, -3.000000, 244.000000, 276.000000, 0.000000 +7748, -3.000000, 244.000000, 276.000000, 0.000000 +7749, -3.000000, 244.000000, 276.000000, 0.000000 +7750, -3.000000, 244.000000, 276.000000, 0.000000 +7751, -3.000000, 244.000000, 276.000000, 0.000000 +7752, -3.000000, 244.000000, 276.000000, 0.000000 +7753, -3.000000, 244.000000, 276.000000, 0.000000 +7754, -3.000000, 244.000000, 276.000000, 0.000000 +7755, -3.000000, 244.000000, 276.000000, 0.000000 +7756, -3.000000, 244.000000, 276.000000, 0.000000 +7757, -3.000000, 244.000000, 276.000000, 0.000000 +7758, -3.000000, 244.000000, 276.000000, 0.000000 +7759, -3.000000, 244.000000, 276.000000, 0.000000 +7760, -3.000000, 244.000000, 276.000000, 0.000000 +7761, -3.000000, 244.000000, 276.000000, 0.000000 +7762, -3.000000, 244.000000, 276.000000, 0.000000 +7763, -3.000000, 244.000000, 276.000000, 0.000000 +7764, -3.000000, 244.000000, 276.000000, 0.000000 +7765, -3.000000, 244.000000, 276.000000, 0.000000 +7766, -3.000000, 244.000000, 276.000000, 0.000000 +7767, -3.000000, 244.000000, 276.000000, 0.000000 +7768, -3.000000, 244.000000, 276.000000, 0.000000 +7769, -3.000000, 244.000000, 276.000000, 0.000000 +7770, -3.000000, 244.000000, 276.000000, 0.000000 +7771, -3.000000, 244.000000, 276.000000, 0.000000 +7772, -3.000000, 244.000000, 276.000000, 0.000000 +7773, -3.000000, 244.000000, 276.000000, 0.000000 +7774, -3.000000, 244.000000, 276.000000, 0.000000 +7775, -3.000000, 244.000000, 276.000000, 0.000000 +7776, -3.000000, 244.000000, 276.000000, 0.000000 +7777, -3.000000, 244.000000, 276.000000, 0.000000 +7778, -3.000000, 244.000000, 276.000000, 0.000000 +7779, -3.000000, 244.000000, 276.000000, 0.000000 +7780, -3.000000, 244.000000, 276.000000, 0.000000 +7781, -3.000000, 244.000000, 276.000000, 0.000000 +7782, -3.000000, 244.000000, 276.000000, 0.000000 +7783, -3.000000, 244.000000, 276.000000, 0.000000 +7784, -3.000000, 244.000000, 276.000000, 0.000000 +7785, -3.000000, 244.000000, 276.000000, 0.000000 +7786, -3.000000, 244.000000, 276.000000, 0.000000 +7787, -3.000000, 244.000000, 276.000000, 0.000000 +7788, -3.000000, 244.000000, 276.000000, 0.000000 +7789, -3.000000, 244.000000, 276.000000, 0.000000 +7790, -3.000000, 244.000000, 276.000000, 0.000000 +7791, -3.000000, 244.000000, 276.000000, 0.000000 +7792, -3.000000, 244.000000, 276.000000, 0.000000 +7793, -3.000000, 244.000000, 276.000000, 0.000000 +7794, -3.000000, 244.000000, 276.000000, 0.000000 +7795, -3.000000, 244.000000, 276.000000, 0.000000 +7796, -3.000000, 244.000000, 276.000000, 0.000000 +7797, -3.000000, 244.000000, 276.000000, 0.000000 +7798, -3.000000, 244.000000, 276.000000, 0.000000 +7799, -3.000000, 244.000000, 276.000000, 0.000000 +7800, -3.000000, 246.000000, 279.000000, 0.000000 +7801, -3.000000, 246.000000, 279.000000, 0.000000 +7802, -3.000000, 246.000000, 279.000000, 0.000000 +7803, -3.000000, 246.000000, 279.000000, 0.000000 +7804, -3.000000, 246.000000, 279.000000, 0.000000 +7805, -3.000000, 246.000000, 279.000000, 0.000000 +7806, -3.000000, 246.000000, 279.000000, 0.000000 +7807, -3.000000, 246.000000, 279.000000, 0.000000 +7808, -3.000000, 246.000000, 279.000000, 0.000000 +7809, -3.000000, 246.000000, 279.000000, 0.000000 +7810, -3.000000, 246.000000, 279.000000, 0.000000 +7811, -3.000000, 246.000000, 279.000000, 0.000000 +7812, -3.000000, 246.000000, 279.000000, 0.000000 +7813, -3.000000, 246.000000, 279.000000, 0.000000 +7814, -3.000000, 246.000000, 279.000000, 0.000000 +7815, -3.000000, 246.000000, 279.000000, 0.000000 +7816, -3.000000, 246.000000, 279.000000, 0.000000 +7817, -3.000000, 246.000000, 279.000000, 0.000000 +7818, -3.000000, 246.000000, 279.000000, 0.000000 +7819, -3.000000, 246.000000, 279.000000, 0.000000 +7820, -3.000000, 246.000000, 279.000000, 0.000000 +7821, -3.000000, 246.000000, 279.000000, 0.000000 +7822, -3.000000, 246.000000, 279.000000, 0.000000 +7823, -3.000000, 246.000000, 279.000000, 0.000000 +7824, -3.000000, 246.000000, 279.000000, 0.000000 +7825, -3.000000, 246.000000, 279.000000, 0.000000 +7826, -3.000000, 246.000000, 279.000000, 0.000000 +7827, -3.000000, 246.000000, 279.000000, 0.000000 +7828, -3.000000, 246.000000, 279.000000, 0.000000 +7829, -3.000000, 246.000000, 279.000000, 0.000000 +7830, -3.000000, 246.000000, 279.000000, 0.000000 +7831, -3.000000, 246.000000, 279.000000, 0.000000 +7832, -3.000000, 246.000000, 279.000000, 0.000000 +7833, -3.000000, 246.000000, 279.000000, 0.000000 +7834, -3.000000, 246.000000, 279.000000, 0.000000 +7835, -3.000000, 246.000000, 279.000000, 0.000000 +7836, -3.000000, 246.000000, 279.000000, 0.000000 +7837, -3.000000, 246.000000, 279.000000, 0.000000 +7838, -3.000000, 246.000000, 279.000000, 0.000000 +7839, -3.000000, 246.000000, 279.000000, 0.000000 +7840, -3.000000, 246.000000, 279.000000, 0.000000 +7841, -3.000000, 246.000000, 279.000000, 0.000000 +7842, -3.000000, 246.000000, 279.000000, 0.000000 +7843, -3.000000, 246.000000, 279.000000, 0.000000 +7844, -3.000000, 246.000000, 279.000000, 0.000000 +7845, -3.000000, 246.000000, 279.000000, 0.000000 +7846, -3.000000, 246.000000, 279.000000, 0.000000 +7847, -3.000000, 246.000000, 279.000000, 0.000000 +7848, -3.000000, 246.000000, 279.000000, 0.000000 +7849, -3.000000, 246.000000, 279.000000, 0.000000 +7850, -3.000000, 246.000000, 279.000000, 0.000000 +7851, -3.000000, 246.000000, 279.000000, 0.000000 +7852, -3.000000, 246.000000, 279.000000, 0.000000 +7853, -3.000000, 246.000000, 279.000000, 0.000000 +7854, -3.000000, 246.000000, 279.000000, 0.000000 +7855, -3.000000, 246.000000, 279.000000, 0.000000 +7856, -3.000000, 246.000000, 279.000000, 0.000000 +7857, -3.000000, 246.000000, 279.000000, 0.000000 +7858, -3.000000, 246.000000, 279.000000, 0.000000 +7859, -3.000000, 246.000000, 279.000000, 0.000000 +7860, -3.000000, 246.000000, 279.000000, 0.000000 +7861, -3.000000, 246.000000, 279.000000, 0.000000 +7862, -3.000000, 246.000000, 279.000000, 0.000000 +7863, -3.000000, 246.000000, 279.000000, 0.000000 +7864, -3.000000, 246.000000, 279.000000, 0.000000 +7865, -3.000000, 246.000000, 279.000000, 0.000000 +7866, -3.000000, 246.000000, 279.000000, 0.000000 +7867, -3.000000, 246.000000, 279.000000, 0.000000 +7868, -3.000000, 246.000000, 279.000000, 0.000000 +7869, -3.000000, 246.000000, 279.000000, 0.000000 +7870, -3.000000, 246.000000, 279.000000, 0.000000 +7871, -3.000000, 246.000000, 279.000000, 0.000000 +7872, -3.000000, 246.000000, 279.000000, 0.000000 +7873, -3.000000, 246.000000, 279.000000, 0.000000 +7874, -3.000000, 246.000000, 279.000000, 0.000000 +7875, -3.000000, 246.000000, 279.000000, 0.000000 +7876, -3.000000, 246.000000, 279.000000, 0.000000 +7877, -3.000000, 246.000000, 279.000000, 0.000000 +7878, -3.000000, 246.000000, 279.000000, 0.000000 +7879, -3.000000, 246.000000, 279.000000, 0.000000 +7880, -3.000000, 246.000000, 279.000000, 0.000000 +7881, -3.000000, 246.000000, 279.000000, 0.000000 +7882, -3.000000, 246.000000, 279.000000, 0.000000 +7883, -3.000000, 246.000000, 279.000000, 0.000000 +7884, -3.000000, 246.000000, 279.000000, 0.000000 +7885, -3.000000, 246.000000, 279.000000, 0.000000 +7886, -3.000000, 246.000000, 279.000000, 0.000000 +7887, -3.000000, 246.000000, 279.000000, 0.000000 +7888, -3.000000, 246.000000, 279.000000, 0.000000 +7889, -3.000000, 246.000000, 279.000000, 0.000000 +7890, -3.000000, 246.000000, 279.000000, 0.000000 +7891, -3.000000, 246.000000, 279.000000, 0.000000 +7892, -3.000000, 246.000000, 279.000000, 0.000000 +7893, -3.000000, 246.000000, 279.000000, 0.000000 +7894, -3.000000, 246.000000, 279.000000, 0.000000 +7895, -3.000000, 246.000000, 279.000000, 0.000000 +7896, -3.000000, 246.000000, 279.000000, 0.000000 +7897, -3.000000, 246.000000, 279.000000, 0.000000 +7898, -3.000000, 246.000000, 279.000000, 0.000000 +7899, -3.000000, 246.000000, 279.000000, 0.000000 +7900, -3.000000, 248.000000, 282.000000, 0.000000 +7901, -3.000000, 248.000000, 282.000000, 0.000000 +7902, -3.000000, 248.000000, 282.000000, 0.000000 +7903, -3.000000, 248.000000, 282.000000, 0.000000 +7904, -3.000000, 248.000000, 282.000000, 0.000000 +7905, -3.000000, 248.000000, 282.000000, 0.000000 +7906, -3.000000, 248.000000, 282.000000, 0.000000 +7907, -3.000000, 248.000000, 282.000000, 0.000000 +7908, -3.000000, 248.000000, 282.000000, 0.000000 +7909, -3.000000, 248.000000, 282.000000, 0.000000 +7910, -3.000000, 248.000000, 282.000000, 0.000000 +7911, -3.000000, 248.000000, 282.000000, 0.000000 +7912, -3.000000, 248.000000, 282.000000, 0.000000 +7913, -3.000000, 248.000000, 282.000000, 0.000000 +7914, -3.000000, 248.000000, 282.000000, 0.000000 +7915, -3.000000, 248.000000, 282.000000, 0.000000 +7916, -3.000000, 248.000000, 282.000000, 0.000000 +7917, -3.000000, 248.000000, 282.000000, 0.000000 +7918, -3.000000, 248.000000, 282.000000, 0.000000 +7919, -3.000000, 248.000000, 282.000000, 0.000000 +7920, -3.000000, 248.000000, 282.000000, 0.000000 +7921, -3.000000, 248.000000, 282.000000, 0.000000 +7922, -3.000000, 248.000000, 282.000000, 0.000000 +7923, -3.000000, 248.000000, 282.000000, 0.000000 +7924, -3.000000, 248.000000, 282.000000, 0.000000 +7925, -3.000000, 248.000000, 282.000000, 0.000000 +7926, -3.000000, 248.000000, 282.000000, 0.000000 +7927, -3.000000, 248.000000, 282.000000, 0.000000 +7928, -3.000000, 248.000000, 282.000000, 0.000000 +7929, -3.000000, 248.000000, 282.000000, 0.000000 +7930, -3.000000, 248.000000, 282.000000, 0.000000 +7931, -3.000000, 248.000000, 282.000000, 0.000000 +7932, -3.000000, 248.000000, 282.000000, 0.000000 +7933, -3.000000, 248.000000, 282.000000, 0.000000 +7934, -3.000000, 248.000000, 282.000000, 0.000000 +7935, -3.000000, 248.000000, 282.000000, 0.000000 +7936, -3.000000, 248.000000, 282.000000, 0.000000 +7937, -3.000000, 248.000000, 282.000000, 0.000000 +7938, -3.000000, 248.000000, 282.000000, 0.000000 +7939, -3.000000, 248.000000, 282.000000, 0.000000 +7940, -3.000000, 248.000000, 282.000000, 0.000000 +7941, -3.000000, 248.000000, 282.000000, 0.000000 +7942, -3.000000, 248.000000, 282.000000, 0.000000 +7943, -3.000000, 248.000000, 282.000000, 0.000000 +7944, -3.000000, 248.000000, 282.000000, 0.000000 +7945, -3.000000, 248.000000, 282.000000, 0.000000 +7946, -3.000000, 248.000000, 282.000000, 0.000000 +7947, -3.000000, 248.000000, 282.000000, 0.000000 +7948, -3.000000, 248.000000, 282.000000, 0.000000 +7949, -3.000000, 248.000000, 282.000000, 0.000000 +7950, -3.000000, 248.000000, 282.000000, 0.000000 +7951, -3.000000, 248.000000, 282.000000, 0.000000 +7952, -3.000000, 248.000000, 282.000000, 0.000000 +7953, -3.000000, 248.000000, 282.000000, 0.000000 +7954, -3.000000, 248.000000, 282.000000, 0.000000 +7955, -3.000000, 248.000000, 282.000000, 0.000000 +7956, -3.000000, 248.000000, 282.000000, 0.000000 +7957, -3.000000, 248.000000, 282.000000, 0.000000 +7958, -3.000000, 248.000000, 282.000000, 0.000000 +7959, -3.000000, 248.000000, 282.000000, 0.000000 +7960, -3.000000, 248.000000, 282.000000, 0.000000 +7961, -3.000000, 248.000000, 282.000000, 0.000000 +7962, -3.000000, 248.000000, 282.000000, 0.000000 +7963, -3.000000, 248.000000, 282.000000, 0.000000 +7964, -3.000000, 248.000000, 282.000000, 0.000000 +7965, -3.000000, 248.000000, 282.000000, 0.000000 +7966, -3.000000, 248.000000, 282.000000, 0.000000 +7967, -3.000000, 248.000000, 282.000000, 0.000000 +7968, -3.000000, 248.000000, 282.000000, 0.000000 +7969, -3.000000, 248.000000, 282.000000, 0.000000 +7970, -3.000000, 248.000000, 282.000000, 0.000000 +7971, -3.000000, 248.000000, 282.000000, 0.000000 +7972, -3.000000, 248.000000, 282.000000, 0.000000 +7973, -3.000000, 248.000000, 282.000000, 0.000000 +7974, -3.000000, 248.000000, 282.000000, 0.000000 +7975, -3.000000, 248.000000, 282.000000, 0.000000 +7976, -3.000000, 248.000000, 282.000000, 0.000000 +7977, -3.000000, 248.000000, 282.000000, 0.000000 +7978, -3.000000, 248.000000, 282.000000, 0.000000 +7979, -3.000000, 248.000000, 282.000000, 0.000000 +7980, -3.000000, 248.000000, 282.000000, 0.000000 +7981, -3.000000, 248.000000, 282.000000, 0.000000 +7982, -3.000000, 248.000000, 282.000000, 0.000000 +7983, -3.000000, 248.000000, 282.000000, 0.000000 +7984, -3.000000, 248.000000, 282.000000, 0.000000 +7985, -3.000000, 248.000000, 282.000000, 0.000000 +7986, -3.000000, 248.000000, 282.000000, 0.000000 +7987, -3.000000, 248.000000, 282.000000, 0.000000 +7988, -3.000000, 248.000000, 282.000000, 0.000000 +7989, -3.000000, 248.000000, 282.000000, 0.000000 +7990, -3.000000, 248.000000, 282.000000, 0.000000 +7991, -3.000000, 248.000000, 282.000000, 0.000000 +7992, -3.000000, 248.000000, 282.000000, 0.000000 +7993, -3.000000, 248.000000, 282.000000, 0.000000 +7994, -3.000000, 248.000000, 282.000000, 0.000000 +7995, -3.000000, 248.000000, 282.000000, 0.000000 +7996, -3.000000, 248.000000, 282.000000, 0.000000 +7997, -3.000000, 248.000000, 282.000000, 0.000000 +7998, -3.000000, 248.000000, 282.000000, 0.000000 +7999, -3.000000, 248.000000, 282.000000, 0.000000 +8000, -3.000000, 250.000000, 285.000000, 0.000000 +8001, -3.000000, 250.000000, 285.000000, 0.000000 +8002, -3.000000, 250.000000, 285.000000, 0.000000 +8003, -3.000000, 250.000000, 285.000000, 0.000000 +8004, -3.000000, 250.000000, 285.000000, 0.000000 +8005, -3.000000, 250.000000, 285.000000, 0.000000 +8006, -3.000000, 250.000000, 285.000000, 0.000000 +8007, -3.000000, 250.000000, 285.000000, 0.000000 +8008, -3.000000, 250.000000, 285.000000, 0.000000 +8009, -3.000000, 250.000000, 285.000000, 0.000000 +8010, -3.000000, 250.000000, 285.000000, 0.000000 +8011, -3.000000, 250.000000, 285.000000, 0.000000 +8012, -3.000000, 250.000000, 285.000000, 0.000000 +8013, -3.000000, 250.000000, 285.000000, 0.000000 +8014, -3.000000, 250.000000, 285.000000, 0.000000 +8015, -3.000000, 250.000000, 285.000000, 0.000000 +8016, -3.000000, 250.000000, 285.000000, 0.000000 +8017, -3.000000, 250.000000, 285.000000, 0.000000 +8018, -3.000000, 250.000000, 285.000000, 0.000000 +8019, -3.000000, 250.000000, 285.000000, 0.000000 +8020, -3.000000, 250.000000, 285.000000, 0.000000 +8021, -3.000000, 250.000000, 285.000000, 0.000000 +8022, -3.000000, 250.000000, 285.000000, 0.000000 +8023, -3.000000, 250.000000, 285.000000, 0.000000 +8024, -3.000000, 250.000000, 285.000000, 0.000000 +8025, -3.000000, 250.000000, 285.000000, 0.000000 +8026, -3.000000, 250.000000, 285.000000, 0.000000 +8027, -3.000000, 250.000000, 285.000000, 0.000000 +8028, -3.000000, 250.000000, 285.000000, 0.000000 +8029, -3.000000, 250.000000, 285.000000, 0.000000 +8030, -3.000000, 250.000000, 285.000000, 0.000000 +8031, -3.000000, 250.000000, 285.000000, 0.000000 +8032, -3.000000, 250.000000, 285.000000, 0.000000 +8033, -3.000000, 250.000000, 285.000000, 0.000000 +8034, -3.000000, 250.000000, 285.000000, 0.000000 +8035, -3.000000, 250.000000, 285.000000, 0.000000 +8036, -3.000000, 250.000000, 285.000000, 0.000000 +8037, -3.000000, 250.000000, 285.000000, 0.000000 +8038, -3.000000, 250.000000, 285.000000, 0.000000 +8039, -3.000000, 250.000000, 285.000000, 0.000000 +8040, -3.000000, 250.000000, 285.000000, 0.000000 +8041, -3.000000, 250.000000, 285.000000, 0.000000 +8042, -3.000000, 250.000000, 285.000000, 0.000000 +8043, -3.000000, 250.000000, 285.000000, 0.000000 +8044, -3.000000, 250.000000, 285.000000, 0.000000 +8045, -3.000000, 250.000000, 285.000000, 0.000000 +8046, -3.000000, 250.000000, 285.000000, 0.000000 +8047, -3.000000, 250.000000, 285.000000, 0.000000 +8048, -3.000000, 250.000000, 285.000000, 0.000000 +8049, -3.000000, 250.000000, 285.000000, 0.000000 +8050, -3.000000, 250.000000, 285.000000, 0.000000 +8051, -3.000000, 250.000000, 285.000000, 0.000000 +8052, -3.000000, 250.000000, 285.000000, 0.000000 +8053, -3.000000, 250.000000, 285.000000, 0.000000 +8054, -3.000000, 250.000000, 285.000000, 0.000000 +8055, -3.000000, 250.000000, 285.000000, 0.000000 +8056, -3.000000, 250.000000, 285.000000, 0.000000 +8057, -3.000000, 250.000000, 285.000000, 0.000000 +8058, -3.000000, 250.000000, 285.000000, 0.000000 +8059, -3.000000, 250.000000, 285.000000, 0.000000 +8060, -3.000000, 250.000000, 285.000000, 0.000000 +8061, -3.000000, 250.000000, 285.000000, 0.000000 +8062, -3.000000, 250.000000, 285.000000, 0.000000 +8063, -3.000000, 250.000000, 285.000000, 0.000000 +8064, -3.000000, 250.000000, 285.000000, 0.000000 +8065, -3.000000, 250.000000, 285.000000, 0.000000 +8066, -3.000000, 250.000000, 285.000000, 0.000000 +8067, -3.000000, 250.000000, 285.000000, 0.000000 +8068, -3.000000, 250.000000, 285.000000, 0.000000 +8069, -3.000000, 250.000000, 285.000000, 0.000000 +8070, -3.000000, 250.000000, 285.000000, 0.000000 +8071, -3.000000, 250.000000, 285.000000, 0.000000 +8072, -3.000000, 250.000000, 285.000000, 0.000000 +8073, -3.000000, 250.000000, 285.000000, 0.000000 +8074, -3.000000, 250.000000, 285.000000, 0.000000 +8075, -3.000000, 250.000000, 285.000000, 0.000000 +8076, -3.000000, 250.000000, 285.000000, 0.000000 +8077, -3.000000, 250.000000, 285.000000, 0.000000 +8078, -3.000000, 250.000000, 285.000000, 0.000000 +8079, -3.000000, 250.000000, 285.000000, 0.000000 +8080, -3.000000, 250.000000, 285.000000, 0.000000 +8081, -3.000000, 250.000000, 285.000000, 0.000000 +8082, -3.000000, 250.000000, 285.000000, 0.000000 +8083, -3.000000, 250.000000, 285.000000, 0.000000 +8084, -3.000000, 250.000000, 285.000000, 0.000000 +8085, -3.000000, 250.000000, 285.000000, 0.000000 +8086, -3.000000, 250.000000, 285.000000, 0.000000 +8087, -3.000000, 250.000000, 285.000000, 0.000000 +8088, -3.000000, 250.000000, 285.000000, 0.000000 +8089, -3.000000, 250.000000, 285.000000, 0.000000 +8090, -3.000000, 250.000000, 285.000000, 0.000000 +8091, -3.000000, 250.000000, 285.000000, 0.000000 +8092, -3.000000, 250.000000, 285.000000, 0.000000 +8093, -3.000000, 250.000000, 285.000000, 0.000000 +8094, -3.000000, 250.000000, 285.000000, 0.000000 +8095, -3.000000, 250.000000, 285.000000, 0.000000 +8096, -3.000000, 250.000000, 285.000000, 0.000000 +8097, -3.000000, 250.000000, 285.000000, 0.000000 +8098, -3.000000, 250.000000, 285.000000, 0.000000 +8099, -3.000000, 250.000000, 285.000000, 0.000000 +8100, -3.000000, 252.000000, 288.000000, 0.000000 +8101, -3.000000, 252.000000, 288.000000, 0.000000 +8102, -3.000000, 252.000000, 288.000000, 0.000000 +8103, -3.000000, 252.000000, 288.000000, 0.000000 +8104, -3.000000, 252.000000, 288.000000, 0.000000 +8105, -3.000000, 252.000000, 288.000000, 0.000000 +8106, -3.000000, 252.000000, 288.000000, 0.000000 +8107, -3.000000, 252.000000, 288.000000, 0.000000 +8108, -3.000000, 252.000000, 288.000000, 0.000000 +8109, -3.000000, 252.000000, 288.000000, 0.000000 +8110, -3.000000, 252.000000, 288.000000, 0.000000 +8111, -3.000000, 252.000000, 288.000000, 0.000000 +8112, -3.000000, 252.000000, 288.000000, 0.000000 +8113, -3.000000, 252.000000, 288.000000, 0.000000 +8114, -3.000000, 252.000000, 288.000000, 0.000000 +8115, -3.000000, 252.000000, 288.000000, 0.000000 +8116, -3.000000, 252.000000, 288.000000, 0.000000 +8117, -3.000000, 252.000000, 288.000000, 0.000000 +8118, -3.000000, 252.000000, 288.000000, 0.000000 +8119, -3.000000, 252.000000, 288.000000, 0.000000 +8120, -3.000000, 252.000000, 288.000000, 0.000000 +8121, -3.000000, 252.000000, 288.000000, 0.000000 +8122, -3.000000, 252.000000, 288.000000, 0.000000 +8123, -3.000000, 252.000000, 288.000000, 0.000000 +8124, -3.000000, 252.000000, 288.000000, 0.000000 +8125, -3.000000, 252.000000, 288.000000, 0.000000 +8126, -3.000000, 252.000000, 288.000000, 0.000000 +8127, -3.000000, 252.000000, 288.000000, 0.000000 +8128, -3.000000, 252.000000, 288.000000, 0.000000 +8129, -3.000000, 252.000000, 288.000000, 0.000000 +8130, -3.000000, 252.000000, 288.000000, 0.000000 +8131, -3.000000, 252.000000, 288.000000, 0.000000 +8132, -3.000000, 252.000000, 288.000000, 0.000000 +8133, -3.000000, 252.000000, 288.000000, 0.000000 +8134, -3.000000, 252.000000, 288.000000, 0.000000 +8135, -3.000000, 252.000000, 288.000000, 0.000000 +8136, -3.000000, 252.000000, 288.000000, 0.000000 +8137, -3.000000, 252.000000, 288.000000, 0.000000 +8138, -3.000000, 252.000000, 288.000000, 0.000000 +8139, -3.000000, 252.000000, 288.000000, 0.000000 +8140, -3.000000, 252.000000, 288.000000, 0.000000 +8141, -3.000000, 252.000000, 288.000000, 0.000000 +8142, -3.000000, 252.000000, 288.000000, 0.000000 +8143, -3.000000, 252.000000, 288.000000, 0.000000 +8144, -3.000000, 252.000000, 288.000000, 0.000000 +8145, -3.000000, 252.000000, 288.000000, 0.000000 +8146, -3.000000, 252.000000, 288.000000, 0.000000 +8147, -3.000000, 252.000000, 288.000000, 0.000000 +8148, -3.000000, 252.000000, 288.000000, 0.000000 +8149, -3.000000, 252.000000, 288.000000, 0.000000 +8150, -3.000000, 252.000000, 288.000000, 0.000000 +8151, -3.000000, 252.000000, 288.000000, 0.000000 +8152, -3.000000, 252.000000, 288.000000, 0.000000 +8153, -3.000000, 252.000000, 288.000000, 0.000000 +8154, -3.000000, 252.000000, 288.000000, 0.000000 +8155, -3.000000, 252.000000, 288.000000, 0.000000 +8156, -3.000000, 252.000000, 288.000000, 0.000000 +8157, -3.000000, 252.000000, 288.000000, 0.000000 +8158, -3.000000, 252.000000, 288.000000, 0.000000 +8159, -3.000000, 252.000000, 288.000000, 0.000000 +8160, -3.000000, 252.000000, 288.000000, 0.000000 +8161, -3.000000, 252.000000, 288.000000, 0.000000 +8162, -3.000000, 252.000000, 288.000000, 0.000000 +8163, -3.000000, 252.000000, 288.000000, 0.000000 +8164, -3.000000, 252.000000, 288.000000, 0.000000 +8165, -3.000000, 252.000000, 288.000000, 0.000000 +8166, -3.000000, 252.000000, 288.000000, 0.000000 +8167, -3.000000, 252.000000, 288.000000, 0.000000 +8168, -3.000000, 252.000000, 288.000000, 0.000000 +8169, -3.000000, 252.000000, 288.000000, 0.000000 +8170, -3.000000, 252.000000, 288.000000, 0.000000 +8171, -3.000000, 252.000000, 288.000000, 0.000000 +8172, -3.000000, 252.000000, 288.000000, 0.000000 +8173, -3.000000, 252.000000, 288.000000, 0.000000 +8174, -3.000000, 252.000000, 288.000000, 0.000000 +8175, -3.000000, 252.000000, 288.000000, 0.000000 +8176, -3.000000, 252.000000, 288.000000, 0.000000 +8177, -3.000000, 252.000000, 288.000000, 0.000000 +8178, -3.000000, 252.000000, 288.000000, 0.000000 +8179, -3.000000, 252.000000, 288.000000, 0.000000 +8180, -3.000000, 252.000000, 288.000000, 0.000000 +8181, -3.000000, 252.000000, 288.000000, 0.000000 +8182, -3.000000, 252.000000, 288.000000, 0.000000 +8183, -3.000000, 252.000000, 288.000000, 0.000000 +8184, -3.000000, 252.000000, 288.000000, 0.000000 +8185, -3.000000, 252.000000, 288.000000, 0.000000 +8186, -3.000000, 252.000000, 288.000000, 0.000000 +8187, -3.000000, 252.000000, 288.000000, 0.000000 +8188, -3.000000, 252.000000, 288.000000, 0.000000 +8189, -3.000000, 252.000000, 288.000000, 0.000000 +8190, -3.000000, 252.000000, 288.000000, 0.000000 +8191, -3.000000, 252.000000, 288.000000, 0.000000 +8192, -3.000000, 252.000000, 288.000000, 0.000000 +8193, -3.000000, 252.000000, 288.000000, 0.000000 +8194, -3.000000, 252.000000, 288.000000, 0.000000 +8195, -3.000000, 252.000000, 288.000000, 0.000000 +8196, -3.000000, 252.000000, 288.000000, 0.000000 +8197, -3.000000, 252.000000, 288.000000, 0.000000 +8198, -3.000000, 252.000000, 288.000000, 0.000000 +8199, -3.000000, 252.000000, 288.000000, 0.000000 +8200, -3.000000, 254.000000, 291.000000, 0.000000 +8201, -3.000000, 254.000000, 291.000000, 0.000000 +8202, -3.000000, 254.000000, 291.000000, 0.000000 +8203, -3.000000, 254.000000, 291.000000, 0.000000 +8204, -3.000000, 254.000000, 291.000000, 0.000000 +8205, -3.000000, 254.000000, 291.000000, 0.000000 +8206, -3.000000, 254.000000, 291.000000, 0.000000 +8207, -3.000000, 254.000000, 291.000000, 0.000000 +8208, -3.000000, 254.000000, 291.000000, 0.000000 +8209, -3.000000, 254.000000, 291.000000, 0.000000 +8210, -3.000000, 254.000000, 291.000000, 0.000000 +8211, -3.000000, 254.000000, 291.000000, 0.000000 +8212, -3.000000, 254.000000, 291.000000, 0.000000 +8213, -3.000000, 254.000000, 291.000000, 0.000000 +8214, -3.000000, 254.000000, 291.000000, 0.000000 +8215, -3.000000, 254.000000, 291.000000, 0.000000 +8216, -3.000000, 254.000000, 291.000000, 0.000000 +8217, -3.000000, 254.000000, 291.000000, 0.000000 +8218, -3.000000, 254.000000, 291.000000, 0.000000 +8219, -3.000000, 254.000000, 291.000000, 0.000000 +8220, -3.000000, 254.000000, 291.000000, 0.000000 +8221, -3.000000, 254.000000, 291.000000, 0.000000 +8222, -3.000000, 254.000000, 291.000000, 0.000000 +8223, -3.000000, 254.000000, 291.000000, 0.000000 +8224, -3.000000, 254.000000, 291.000000, 0.000000 +8225, -3.000000, 254.000000, 291.000000, 0.000000 +8226, -3.000000, 254.000000, 291.000000, 0.000000 +8227, -3.000000, 254.000000, 291.000000, 0.000000 +8228, -3.000000, 254.000000, 291.000000, 0.000000 +8229, -3.000000, 254.000000, 291.000000, 0.000000 +8230, -3.000000, 254.000000, 291.000000, 0.000000 +8231, -3.000000, 254.000000, 291.000000, 0.000000 +8232, -3.000000, 254.000000, 291.000000, 0.000000 +8233, -3.000000, 254.000000, 291.000000, 0.000000 +8234, -3.000000, 254.000000, 291.000000, 0.000000 +8235, -3.000000, 254.000000, 291.000000, 0.000000 +8236, -3.000000, 254.000000, 291.000000, 0.000000 +8237, -3.000000, 254.000000, 291.000000, 0.000000 +8238, -3.000000, 254.000000, 291.000000, 0.000000 +8239, -3.000000, 254.000000, 291.000000, 0.000000 +8240, -3.000000, 254.000000, 291.000000, 0.000000 +8241, -3.000000, 254.000000, 291.000000, 0.000000 +8242, -3.000000, 254.000000, 291.000000, 0.000000 +8243, -3.000000, 254.000000, 291.000000, 0.000000 +8244, -3.000000, 254.000000, 291.000000, 0.000000 +8245, -3.000000, 254.000000, 291.000000, 0.000000 +8246, -3.000000, 254.000000, 291.000000, 0.000000 +8247, -3.000000, 254.000000, 291.000000, 0.000000 +8248, -3.000000, 254.000000, 291.000000, 0.000000 +8249, -3.000000, 254.000000, 291.000000, 0.000000 +8250, -3.000000, 254.000000, 291.000000, 0.000000 +8251, -3.000000, 254.000000, 291.000000, 0.000000 +8252, -3.000000, 254.000000, 291.000000, 0.000000 +8253, -3.000000, 254.000000, 291.000000, 0.000000 +8254, -3.000000, 254.000000, 291.000000, 0.000000 +8255, -3.000000, 254.000000, 291.000000, 0.000000 +8256, -3.000000, 254.000000, 291.000000, 0.000000 +8257, -3.000000, 254.000000, 291.000000, 0.000000 +8258, -3.000000, 254.000000, 291.000000, 0.000000 +8259, -3.000000, 254.000000, 291.000000, 0.000000 +8260, -3.000000, 254.000000, 291.000000, 0.000000 +8261, -3.000000, 254.000000, 291.000000, 0.000000 +8262, -3.000000, 254.000000, 291.000000, 0.000000 +8263, -3.000000, 254.000000, 291.000000, 0.000000 +8264, -3.000000, 254.000000, 291.000000, 0.000000 +8265, -3.000000, 254.000000, 291.000000, 0.000000 +8266, -3.000000, 254.000000, 291.000000, 0.000000 +8267, -3.000000, 254.000000, 291.000000, 0.000000 +8268, -3.000000, 254.000000, 291.000000, 0.000000 +8269, -3.000000, 254.000000, 291.000000, 0.000000 +8270, -3.000000, 254.000000, 291.000000, 0.000000 +8271, -3.000000, 254.000000, 291.000000, 0.000000 +8272, -3.000000, 254.000000, 291.000000, 0.000000 +8273, -3.000000, 254.000000, 291.000000, 0.000000 +8274, -3.000000, 254.000000, 291.000000, 0.000000 +8275, -3.000000, 254.000000, 291.000000, 0.000000 +8276, -3.000000, 254.000000, 291.000000, 0.000000 +8277, -3.000000, 254.000000, 291.000000, 0.000000 +8278, -3.000000, 254.000000, 291.000000, 0.000000 +8279, -3.000000, 254.000000, 291.000000, 0.000000 +8280, -3.000000, 254.000000, 291.000000, 0.000000 +8281, -3.000000, 254.000000, 291.000000, 0.000000 +8282, -3.000000, 254.000000, 291.000000, 0.000000 +8283, -3.000000, 254.000000, 291.000000, 0.000000 +8284, -3.000000, 254.000000, 291.000000, 0.000000 +8285, -3.000000, 254.000000, 291.000000, 0.000000 +8286, -3.000000, 254.000000, 291.000000, 0.000000 +8287, -3.000000, 254.000000, 291.000000, 0.000000 +8288, -3.000000, 254.000000, 291.000000, 0.000000 +8289, -3.000000, 254.000000, 291.000000, 0.000000 +8290, -3.000000, 254.000000, 291.000000, 0.000000 +8291, -3.000000, 254.000000, 291.000000, 0.000000 +8292, -3.000000, 254.000000, 291.000000, 0.000000 +8293, -3.000000, 254.000000, 291.000000, 0.000000 +8294, -3.000000, 254.000000, 291.000000, 0.000000 +8295, -3.000000, 254.000000, 291.000000, 0.000000 +8296, -3.000000, 254.000000, 291.000000, 0.000000 +8297, -3.000000, 254.000000, 291.000000, 0.000000 +8298, -3.000000, 254.000000, 291.000000, 0.000000 +8299, -3.000000, 254.000000, 291.000000, 0.000000 +8300, -3.000000, 256.000000, 294.000000, 0.000000 +8301, -3.000000, 256.000000, 294.000000, 0.000000 +8302, -3.000000, 256.000000, 294.000000, 0.000000 +8303, -3.000000, 256.000000, 294.000000, 0.000000 +8304, -3.000000, 256.000000, 294.000000, 0.000000 +8305, -3.000000, 256.000000, 294.000000, 0.000000 +8306, -3.000000, 256.000000, 294.000000, 0.000000 +8307, -3.000000, 256.000000, 294.000000, 0.000000 +8308, -3.000000, 256.000000, 294.000000, 0.000000 +8309, -3.000000, 256.000000, 294.000000, 0.000000 +8310, -3.000000, 256.000000, 294.000000, 0.000000 +8311, -3.000000, 256.000000, 294.000000, 0.000000 +8312, -3.000000, 256.000000, 294.000000, 0.000000 +8313, -3.000000, 256.000000, 294.000000, 0.000000 +8314, -3.000000, 256.000000, 294.000000, 0.000000 +8315, -3.000000, 256.000000, 294.000000, 0.000000 +8316, -3.000000, 256.000000, 294.000000, 0.000000 +8317, -3.000000, 256.000000, 294.000000, 0.000000 +8318, -3.000000, 256.000000, 294.000000, 0.000000 +8319, -3.000000, 256.000000, 294.000000, 0.000000 +8320, -3.000000, 256.000000, 294.000000, 0.000000 +8321, -3.000000, 256.000000, 294.000000, 0.000000 +8322, -3.000000, 256.000000, 294.000000, 0.000000 +8323, -3.000000, 256.000000, 294.000000, 0.000000 +8324, -3.000000, 256.000000, 294.000000, 0.000000 +8325, -3.000000, 256.000000, 294.000000, 0.000000 +8326, -3.000000, 256.000000, 294.000000, 0.000000 +8327, -3.000000, 256.000000, 294.000000, 0.000000 +8328, -3.000000, 256.000000, 294.000000, 0.000000 +8329, -3.000000, 256.000000, 294.000000, 0.000000 +8330, -3.000000, 256.000000, 294.000000, 0.000000 +8331, -3.000000, 256.000000, 294.000000, 0.000000 +8332, -3.000000, 256.000000, 294.000000, 0.000000 +8333, -3.000000, 256.000000, 294.000000, 0.000000 +8334, -3.000000, 256.000000, 294.000000, 0.000000 +8335, -3.000000, 256.000000, 294.000000, 0.000000 +8336, -3.000000, 256.000000, 294.000000, 0.000000 +8337, -3.000000, 256.000000, 294.000000, 0.000000 +8338, -3.000000, 256.000000, 294.000000, 0.000000 +8339, -3.000000, 256.000000, 294.000000, 0.000000 +8340, -3.000000, 256.000000, 294.000000, 0.000000 +8341, -3.000000, 256.000000, 294.000000, 0.000000 +8342, -3.000000, 256.000000, 294.000000, 0.000000 +8343, -3.000000, 256.000000, 294.000000, 0.000000 +8344, -3.000000, 256.000000, 294.000000, 0.000000 +8345, -3.000000, 256.000000, 294.000000, 0.000000 +8346, -3.000000, 256.000000, 294.000000, 0.000000 +8347, -3.000000, 256.000000, 294.000000, 0.000000 +8348, -3.000000, 256.000000, 294.000000, 0.000000 +8349, -3.000000, 256.000000, 294.000000, 0.000000 +8350, -3.000000, 256.000000, 294.000000, 0.000000 +8351, -3.000000, 256.000000, 294.000000, 0.000000 +8352, -3.000000, 256.000000, 294.000000, 0.000000 +8353, -3.000000, 256.000000, 294.000000, 0.000000 +8354, -3.000000, 256.000000, 294.000000, 0.000000 +8355, -3.000000, 256.000000, 294.000000, 0.000000 +8356, -3.000000, 256.000000, 294.000000, 0.000000 +8357, -3.000000, 256.000000, 294.000000, 0.000000 +8358, -3.000000, 256.000000, 294.000000, 0.000000 +8359, -3.000000, 256.000000, 294.000000, 0.000000 +8360, -3.000000, 256.000000, 294.000000, 0.000000 +8361, -3.000000, 256.000000, 294.000000, 0.000000 +8362, -3.000000, 256.000000, 294.000000, 0.000000 +8363, -3.000000, 256.000000, 294.000000, 0.000000 +8364, -3.000000, 256.000000, 294.000000, 0.000000 +8365, -3.000000, 256.000000, 294.000000, 0.000000 +8366, -3.000000, 256.000000, 294.000000, 0.000000 +8367, -3.000000, 256.000000, 294.000000, 0.000000 +8368, -3.000000, 256.000000, 294.000000, 0.000000 +8369, -3.000000, 256.000000, 294.000000, 0.000000 +8370, -3.000000, 256.000000, 294.000000, 0.000000 +8371, -3.000000, 256.000000, 294.000000, 0.000000 +8372, -3.000000, 256.000000, 294.000000, 0.000000 +8373, -3.000000, 256.000000, 294.000000, 0.000000 +8374, -3.000000, 256.000000, 294.000000, 0.000000 +8375, -3.000000, 256.000000, 294.000000, 0.000000 +8376, -3.000000, 256.000000, 294.000000, 0.000000 +8377, -3.000000, 256.000000, 294.000000, 0.000000 +8378, -3.000000, 256.000000, 294.000000, 0.000000 +8379, -3.000000, 256.000000, 294.000000, 0.000000 +8380, -3.000000, 256.000000, 294.000000, 0.000000 +8381, -3.000000, 256.000000, 294.000000, 0.000000 +8382, -3.000000, 256.000000, 294.000000, 0.000000 +8383, -3.000000, 256.000000, 294.000000, 0.000000 +8384, -3.000000, 256.000000, 294.000000, 0.000000 +8385, -3.000000, 256.000000, 294.000000, 0.000000 +8386, -3.000000, 256.000000, 294.000000, 0.000000 +8387, -3.000000, 256.000000, 294.000000, 0.000000 +8388, -3.000000, 256.000000, 294.000000, 0.000000 +8389, -3.000000, 256.000000, 294.000000, 0.000000 +8390, -3.000000, 256.000000, 294.000000, 0.000000 +8391, -3.000000, 256.000000, 294.000000, 0.000000 +8392, -3.000000, 256.000000, 294.000000, 0.000000 +8393, -3.000000, 256.000000, 294.000000, 0.000000 +8394, -3.000000, 256.000000, 294.000000, 0.000000 +8395, -3.000000, 256.000000, 294.000000, 0.000000 +8396, -3.000000, 256.000000, 294.000000, 0.000000 +8397, -3.000000, 256.000000, 294.000000, 0.000000 +8398, -3.000000, 256.000000, 294.000000, 0.000000 +8399, -3.000000, 256.000000, 294.000000, 0.000000 +8400, -3.000000, 258.000000, 297.000000, 0.000000 +8401, -3.000000, 258.000000, 297.000000, 0.000000 +8402, -3.000000, 258.000000, 297.000000, 0.000000 +8403, -3.000000, 258.000000, 297.000000, 0.000000 +8404, -3.000000, 258.000000, 297.000000, 0.000000 +8405, -3.000000, 258.000000, 297.000000, 0.000000 +8406, -3.000000, 258.000000, 297.000000, 0.000000 +8407, -3.000000, 258.000000, 297.000000, 0.000000 +8408, -3.000000, 258.000000, 297.000000, 0.000000 +8409, -3.000000, 258.000000, 297.000000, 0.000000 +8410, -3.000000, 258.000000, 297.000000, 0.000000 +8411, -3.000000, 258.000000, 297.000000, 0.000000 +8412, -3.000000, 258.000000, 297.000000, 0.000000 +8413, -3.000000, 258.000000, 297.000000, 0.000000 +8414, -3.000000, 258.000000, 297.000000, 0.000000 +8415, -3.000000, 258.000000, 297.000000, 0.000000 +8416, -3.000000, 258.000000, 297.000000, 0.000000 +8417, -3.000000, 258.000000, 297.000000, 0.000000 +8418, -3.000000, 258.000000, 297.000000, 0.000000 +8419, -3.000000, 258.000000, 297.000000, 0.000000 +8420, -3.000000, 258.000000, 297.000000, 0.000000 +8421, -3.000000, 258.000000, 297.000000, 0.000000 +8422, -3.000000, 258.000000, 297.000000, 0.000000 +8423, -3.000000, 258.000000, 297.000000, 0.000000 +8424, -3.000000, 258.000000, 297.000000, 0.000000 +8425, -3.000000, 258.000000, 297.000000, 0.000000 +8426, -3.000000, 258.000000, 297.000000, 0.000000 +8427, -3.000000, 258.000000, 297.000000, 0.000000 +8428, -3.000000, 258.000000, 297.000000, 0.000000 +8429, -3.000000, 258.000000, 297.000000, 0.000000 +8430, -3.000000, 258.000000, 297.000000, 0.000000 +8431, -3.000000, 258.000000, 297.000000, 0.000000 +8432, -3.000000, 258.000000, 297.000000, 0.000000 +8433, -3.000000, 258.000000, 297.000000, 0.000000 +8434, -3.000000, 258.000000, 297.000000, 0.000000 +8435, -3.000000, 258.000000, 297.000000, 0.000000 +8436, -3.000000, 258.000000, 297.000000, 0.000000 +8437, -3.000000, 258.000000, 297.000000, 0.000000 +8438, -3.000000, 258.000000, 297.000000, 0.000000 +8439, -3.000000, 258.000000, 297.000000, 0.000000 +8440, -3.000000, 258.000000, 297.000000, 0.000000 +8441, -3.000000, 258.000000, 297.000000, 0.000000 +8442, -3.000000, 258.000000, 297.000000, 0.000000 +8443, -3.000000, 258.000000, 297.000000, 0.000000 +8444, -3.000000, 258.000000, 297.000000, 0.000000 +8445, -3.000000, 258.000000, 297.000000, 0.000000 +8446, -3.000000, 258.000000, 297.000000, 0.000000 +8447, -3.000000, 258.000000, 297.000000, 0.000000 +8448, -3.000000, 258.000000, 297.000000, 0.000000 +8449, -3.000000, 258.000000, 297.000000, 0.000000 +8450, -3.000000, 258.000000, 297.000000, 0.000000 +8451, -3.000000, 258.000000, 297.000000, 0.000000 +8452, -3.000000, 258.000000, 297.000000, 0.000000 +8453, -3.000000, 258.000000, 297.000000, 0.000000 +8454, -3.000000, 258.000000, 297.000000, 0.000000 +8455, -3.000000, 258.000000, 297.000000, 0.000000 +8456, -3.000000, 258.000000, 297.000000, 0.000000 +8457, -3.000000, 258.000000, 297.000000, 0.000000 +8458, -3.000000, 258.000000, 297.000000, 0.000000 +8459, -3.000000, 258.000000, 297.000000, 0.000000 +8460, -3.000000, 258.000000, 297.000000, 0.000000 +8461, -3.000000, 258.000000, 297.000000, 0.000000 +8462, -3.000000, 258.000000, 297.000000, 0.000000 +8463, -3.000000, 258.000000, 297.000000, 0.000000 +8464, -3.000000, 258.000000, 297.000000, 0.000000 +8465, -3.000000, 258.000000, 297.000000, 0.000000 +8466, -3.000000, 258.000000, 297.000000, 0.000000 +8467, -3.000000, 258.000000, 297.000000, 0.000000 +8468, -3.000000, 258.000000, 297.000000, 0.000000 +8469, -3.000000, 258.000000, 297.000000, 0.000000 +8470, -3.000000, 258.000000, 297.000000, 0.000000 +8471, -3.000000, 258.000000, 297.000000, 0.000000 +8472, -3.000000, 258.000000, 297.000000, 0.000000 +8473, -3.000000, 258.000000, 297.000000, 0.000000 +8474, -3.000000, 258.000000, 297.000000, 0.000000 +8475, -3.000000, 258.000000, 297.000000, 0.000000 +8476, -3.000000, 258.000000, 297.000000, 0.000000 +8477, -3.000000, 258.000000, 297.000000, 0.000000 +8478, -3.000000, 258.000000, 297.000000, 0.000000 +8479, -3.000000, 258.000000, 297.000000, 0.000000 +8480, -3.000000, 258.000000, 297.000000, 0.000000 +8481, -3.000000, 258.000000, 297.000000, 0.000000 +8482, -3.000000, 258.000000, 297.000000, 0.000000 +8483, -3.000000, 258.000000, 297.000000, 0.000000 +8484, -3.000000, 258.000000, 297.000000, 0.000000 +8485, -3.000000, 258.000000, 297.000000, 0.000000 +8486, -3.000000, 258.000000, 297.000000, 0.000000 +8487, -3.000000, 258.000000, 297.000000, 0.000000 +8488, -3.000000, 258.000000, 297.000000, 0.000000 +8489, -3.000000, 258.000000, 297.000000, 0.000000 +8490, -3.000000, 258.000000, 297.000000, 0.000000 +8491, -3.000000, 258.000000, 297.000000, 0.000000 +8492, -3.000000, 258.000000, 297.000000, 0.000000 +8493, -3.000000, 258.000000, 297.000000, 0.000000 +8494, -3.000000, 258.000000, 297.000000, 0.000000 +8495, -3.000000, 258.000000, 297.000000, 0.000000 +8496, -3.000000, 258.000000, 297.000000, 0.000000 +8497, -3.000000, 258.000000, 297.000000, 0.000000 +8498, -3.000000, 258.000000, 297.000000, 0.000000 +8499, -3.000000, 258.000000, 297.000000, 0.000000 +8500, -3.000000, 260.000000, 300.000000, 0.000000 +8501, -3.000000, 260.000000, 300.000000, 0.000000 +8502, -3.000000, 260.000000, 300.000000, 0.000000 +8503, -3.000000, 260.000000, 300.000000, 0.000000 +8504, -3.000000, 260.000000, 300.000000, 0.000000 +8505, -3.000000, 260.000000, 300.000000, 0.000000 +8506, -3.000000, 260.000000, 300.000000, 0.000000 +8507, -3.000000, 260.000000, 300.000000, 0.000000 +8508, -3.000000, 260.000000, 300.000000, 0.000000 +8509, -3.000000, 260.000000, 300.000000, 0.000000 +8510, -3.000000, 260.000000, 300.000000, 0.000000 +8511, -3.000000, 260.000000, 300.000000, 0.000000 +8512, -3.000000, 260.000000, 300.000000, 0.000000 +8513, -3.000000, 260.000000, 300.000000, 0.000000 +8514, -3.000000, 260.000000, 300.000000, 0.000000 +8515, -3.000000, 260.000000, 300.000000, 0.000000 +8516, -3.000000, 260.000000, 300.000000, 0.000000 +8517, -3.000000, 260.000000, 300.000000, 0.000000 +8518, -3.000000, 260.000000, 300.000000, 0.000000 +8519, -3.000000, 260.000000, 300.000000, 0.000000 +8520, -3.000000, 260.000000, 300.000000, 0.000000 +8521, -3.000000, 260.000000, 300.000000, 0.000000 +8522, -3.000000, 260.000000, 300.000000, 0.000000 +8523, -3.000000, 260.000000, 300.000000, 0.000000 +8524, -3.000000, 260.000000, 300.000000, 0.000000 +8525, -3.000000, 260.000000, 300.000000, 0.000000 +8526, -3.000000, 260.000000, 300.000000, 0.000000 +8527, -3.000000, 260.000000, 300.000000, 0.000000 +8528, -3.000000, 260.000000, 300.000000, 0.000000 +8529, -3.000000, 260.000000, 300.000000, 0.000000 +8530, -3.000000, 260.000000, 300.000000, 0.000000 +8531, -3.000000, 260.000000, 300.000000, 0.000000 +8532, -3.000000, 260.000000, 300.000000, 0.000000 +8533, -3.000000, 260.000000, 300.000000, 0.000000 +8534, -3.000000, 260.000000, 300.000000, 0.000000 +8535, -3.000000, 260.000000, 300.000000, 0.000000 +8536, -3.000000, 260.000000, 300.000000, 0.000000 +8537, -3.000000, 260.000000, 300.000000, 0.000000 +8538, -3.000000, 260.000000, 300.000000, 0.000000 +8539, -3.000000, 260.000000, 300.000000, 0.000000 +8540, -3.000000, 260.000000, 300.000000, 0.000000 +8541, -3.000000, 260.000000, 300.000000, 0.000000 +8542, -3.000000, 260.000000, 300.000000, 0.000000 +8543, -3.000000, 260.000000, 300.000000, 0.000000 +8544, -3.000000, 260.000000, 300.000000, 0.000000 +8545, -3.000000, 260.000000, 300.000000, 0.000000 +8546, -3.000000, 260.000000, 300.000000, 0.000000 +8547, -3.000000, 260.000000, 300.000000, 0.000000 +8548, -3.000000, 260.000000, 300.000000, 0.000000 +8549, -3.000000, 260.000000, 300.000000, 0.000000 +8550, -3.000000, 260.000000, 300.000000, 0.000000 +8551, -3.000000, 260.000000, 300.000000, 0.000000 +8552, -3.000000, 260.000000, 300.000000, 0.000000 +8553, -3.000000, 260.000000, 300.000000, 0.000000 +8554, -3.000000, 260.000000, 300.000000, 0.000000 +8555, -3.000000, 260.000000, 300.000000, 0.000000 +8556, -3.000000, 260.000000, 300.000000, 0.000000 +8557, -3.000000, 260.000000, 300.000000, 0.000000 +8558, -3.000000, 260.000000, 300.000000, 0.000000 +8559, -3.000000, 260.000000, 300.000000, 0.000000 +8560, -3.000000, 260.000000, 300.000000, 0.000000 +8561, -3.000000, 260.000000, 300.000000, 0.000000 +8562, -3.000000, 260.000000, 300.000000, 0.000000 +8563, -3.000000, 260.000000, 300.000000, 0.000000 +8564, -3.000000, 260.000000, 300.000000, 0.000000 +8565, -3.000000, 260.000000, 300.000000, 0.000000 +8566, -3.000000, 260.000000, 300.000000, 0.000000 +8567, -3.000000, 260.000000, 300.000000, 0.000000 +8568, -3.000000, 260.000000, 300.000000, 0.000000 +8569, -3.000000, 260.000000, 300.000000, 0.000000 +8570, -3.000000, 260.000000, 300.000000, 0.000000 +8571, -3.000000, 260.000000, 300.000000, 0.000000 +8572, -3.000000, 260.000000, 300.000000, 0.000000 +8573, -3.000000, 260.000000, 300.000000, 0.000000 +8574, -3.000000, 260.000000, 300.000000, 0.000000 +8575, -3.000000, 260.000000, 300.000000, 0.000000 +8576, -3.000000, 260.000000, 300.000000, 0.000000 +8577, -3.000000, 260.000000, 300.000000, 0.000000 +8578, -3.000000, 260.000000, 300.000000, 0.000000 +8579, -3.000000, 260.000000, 300.000000, 0.000000 +8580, -3.000000, 260.000000, 300.000000, 0.000000 +8581, -3.000000, 260.000000, 300.000000, 0.000000 +8582, -3.000000, 260.000000, 300.000000, 0.000000 +8583, -3.000000, 260.000000, 300.000000, 0.000000 +8584, -3.000000, 260.000000, 300.000000, 0.000000 +8585, -3.000000, 260.000000, 300.000000, 0.000000 +8586, -3.000000, 260.000000, 300.000000, 0.000000 +8587, -3.000000, 260.000000, 300.000000, 0.000000 +8588, -3.000000, 260.000000, 300.000000, 0.000000 +8589, -3.000000, 260.000000, 300.000000, 0.000000 +8590, -3.000000, 260.000000, 300.000000, 0.000000 +8591, -3.000000, 260.000000, 300.000000, 0.000000 +8592, -3.000000, 260.000000, 300.000000, 0.000000 +8593, -3.000000, 260.000000, 300.000000, 0.000000 +8594, -3.000000, 260.000000, 300.000000, 0.000000 +8595, -3.000000, 260.000000, 300.000000, 0.000000 +8596, -3.000000, 260.000000, 300.000000, 0.000000 +8597, -3.000000, 260.000000, 300.000000, 0.000000 +8598, -3.000000, 260.000000, 300.000000, 0.000000 +8599, -3.000000, 260.000000, 300.000000, 0.000000 +8600, -3.000000, 262.000000, 303.000000, 0.000000 +8601, -3.000000, 262.000000, 303.000000, 0.000000 +8602, -3.000000, 262.000000, 303.000000, 0.000000 +8603, -3.000000, 262.000000, 303.000000, 0.000000 +8604, -3.000000, 262.000000, 303.000000, 0.000000 +8605, -3.000000, 262.000000, 303.000000, 0.000000 +8606, -3.000000, 262.000000, 303.000000, 0.000000 +8607, -3.000000, 262.000000, 303.000000, 0.000000 +8608, -3.000000, 262.000000, 303.000000, 0.000000 +8609, -3.000000, 262.000000, 303.000000, 0.000000 +8610, -3.000000, 262.000000, 303.000000, 0.000000 +8611, -3.000000, 262.000000, 303.000000, 0.000000 +8612, -3.000000, 262.000000, 303.000000, 0.000000 +8613, -3.000000, 262.000000, 303.000000, 0.000000 +8614, -3.000000, 262.000000, 303.000000, 0.000000 +8615, -3.000000, 262.000000, 303.000000, 0.000000 +8616, -3.000000, 262.000000, 303.000000, 0.000000 +8617, -3.000000, 262.000000, 303.000000, 0.000000 +8618, -3.000000, 262.000000, 303.000000, 0.000000 +8619, -3.000000, 262.000000, 303.000000, 0.000000 +8620, -3.000000, 262.000000, 303.000000, 0.000000 +8621, -3.000000, 262.000000, 303.000000, 0.000000 +8622, -3.000000, 262.000000, 303.000000, 0.000000 +8623, -3.000000, 262.000000, 303.000000, 0.000000 +8624, -3.000000, 262.000000, 303.000000, 0.000000 +8625, -3.000000, 262.000000, 303.000000, 0.000000 +8626, -3.000000, 262.000000, 303.000000, 0.000000 +8627, -3.000000, 262.000000, 303.000000, 0.000000 +8628, -3.000000, 262.000000, 303.000000, 0.000000 +8629, -3.000000, 262.000000, 303.000000, 0.000000 +8630, -3.000000, 262.000000, 303.000000, 0.000000 +8631, -3.000000, 262.000000, 303.000000, 0.000000 +8632, -3.000000, 262.000000, 303.000000, 0.000000 +8633, -3.000000, 262.000000, 303.000000, 0.000000 +8634, -3.000000, 262.000000, 303.000000, 0.000000 +8635, -3.000000, 262.000000, 303.000000, 0.000000 +8636, -3.000000, 262.000000, 303.000000, 0.000000 +8637, -3.000000, 262.000000, 303.000000, 0.000000 +8638, -3.000000, 262.000000, 303.000000, 0.000000 +8639, -3.000000, 262.000000, 303.000000, 0.000000 +8640, -3.000000, 262.000000, 303.000000, 0.000000 +8641, -3.000000, 262.000000, 303.000000, 0.000000 +8642, -3.000000, 262.000000, 303.000000, 0.000000 +8643, -3.000000, 262.000000, 303.000000, 0.000000 +8644, -3.000000, 262.000000, 303.000000, 0.000000 +8645, -3.000000, 262.000000, 303.000000, 0.000000 +8646, -3.000000, 262.000000, 303.000000, 0.000000 +8647, -3.000000, 262.000000, 303.000000, 0.000000 +8648, -3.000000, 262.000000, 303.000000, 0.000000 +8649, -3.000000, 262.000000, 303.000000, 0.000000 +8650, -3.000000, 262.000000, 303.000000, 0.000000 +8651, -3.000000, 262.000000, 303.000000, 0.000000 +8652, -3.000000, 262.000000, 303.000000, 0.000000 +8653, -3.000000, 262.000000, 303.000000, 0.000000 +8654, -3.000000, 262.000000, 303.000000, 0.000000 +8655, -3.000000, 262.000000, 303.000000, 0.000000 +8656, -3.000000, 262.000000, 303.000000, 0.000000 +8657, -3.000000, 262.000000, 303.000000, 0.000000 +8658, -3.000000, 262.000000, 303.000000, 0.000000 +8659, -3.000000, 262.000000, 303.000000, 0.000000 +8660, -3.000000, 262.000000, 303.000000, 0.000000 +8661, -3.000000, 262.000000, 303.000000, 0.000000 +8662, -3.000000, 262.000000, 303.000000, 0.000000 +8663, -3.000000, 262.000000, 303.000000, 0.000000 +8664, -3.000000, 262.000000, 303.000000, 0.000000 +8665, -3.000000, 262.000000, 303.000000, 0.000000 +8666, -3.000000, 262.000000, 303.000000, 0.000000 +8667, -3.000000, 262.000000, 303.000000, 0.000000 +8668, -3.000000, 262.000000, 303.000000, 0.000000 +8669, -3.000000, 262.000000, 303.000000, 0.000000 +8670, -3.000000, 262.000000, 303.000000, 0.000000 +8671, -3.000000, 262.000000, 303.000000, 0.000000 +8672, -3.000000, 262.000000, 303.000000, 0.000000 +8673, -3.000000, 262.000000, 303.000000, 0.000000 +8674, -3.000000, 262.000000, 303.000000, 0.000000 +8675, -3.000000, 262.000000, 303.000000, 0.000000 +8676, -3.000000, 262.000000, 303.000000, 0.000000 +8677, -3.000000, 262.000000, 303.000000, 0.000000 +8678, -3.000000, 262.000000, 303.000000, 0.000000 +8679, -3.000000, 262.000000, 303.000000, 0.000000 +8680, -3.000000, 262.000000, 303.000000, 0.000000 +8681, -3.000000, 262.000000, 303.000000, 0.000000 +8682, -3.000000, 262.000000, 303.000000, 0.000000 +8683, -3.000000, 262.000000, 303.000000, 0.000000 +8684, -3.000000, 262.000000, 303.000000, 0.000000 +8685, -3.000000, 262.000000, 303.000000, 0.000000 +8686, -3.000000, 262.000000, 303.000000, 0.000000 +8687, -3.000000, 262.000000, 303.000000, 0.000000 +8688, -3.000000, 262.000000, 303.000000, 0.000000 +8689, -3.000000, 262.000000, 303.000000, 0.000000 +8690, -3.000000, 262.000000, 303.000000, 0.000000 +8691, -3.000000, 262.000000, 303.000000, 0.000000 +8692, -3.000000, 262.000000, 303.000000, 0.000000 +8693, -3.000000, 262.000000, 303.000000, 0.000000 +8694, -3.000000, 262.000000, 303.000000, 0.000000 +8695, -3.000000, 262.000000, 303.000000, 0.000000 +8696, -3.000000, 262.000000, 303.000000, 0.000000 +8697, -3.000000, 262.000000, 303.000000, 0.000000 +8698, -3.000000, 262.000000, 303.000000, 0.000000 +8699, -3.000000, 262.000000, 303.000000, 0.000000 +8700, -3.000000, 264.000000, 306.000000, 0.000000 +8701, -3.000000, 264.000000, 306.000000, 0.000000 +8702, -3.000000, 264.000000, 306.000000, 0.000000 +8703, -3.000000, 264.000000, 306.000000, 0.000000 +8704, -3.000000, 264.000000, 306.000000, 0.000000 +8705, -3.000000, 264.000000, 306.000000, 0.000000 +8706, -3.000000, 264.000000, 306.000000, 0.000000 +8707, -3.000000, 264.000000, 306.000000, 0.000000 +8708, -3.000000, 264.000000, 306.000000, 0.000000 +8709, -3.000000, 264.000000, 306.000000, 0.000000 +8710, -3.000000, 264.000000, 306.000000, 0.000000 +8711, -3.000000, 264.000000, 306.000000, 0.000000 +8712, -3.000000, 264.000000, 306.000000, 0.000000 +8713, -3.000000, 264.000000, 306.000000, 0.000000 +8714, -3.000000, 264.000000, 306.000000, 0.000000 +8715, -3.000000, 264.000000, 306.000000, 0.000000 +8716, -3.000000, 264.000000, 306.000000, 0.000000 +8717, -3.000000, 264.000000, 306.000000, 0.000000 +8718, -3.000000, 264.000000, 306.000000, 0.000000 +8719, -3.000000, 264.000000, 306.000000, 0.000000 +8720, -3.000000, 264.000000, 306.000000, 0.000000 +8721, -3.000000, 264.000000, 306.000000, 0.000000 +8722, -3.000000, 264.000000, 306.000000, 0.000000 +8723, -3.000000, 264.000000, 306.000000, 0.000000 +8724, -3.000000, 264.000000, 306.000000, 0.000000 +8725, -3.000000, 264.000000, 306.000000, 0.000000 +8726, -3.000000, 264.000000, 306.000000, 0.000000 +8727, -3.000000, 264.000000, 306.000000, 0.000000 +8728, -3.000000, 264.000000, 306.000000, 0.000000 +8729, -3.000000, 264.000000, 306.000000, 0.000000 +8730, -3.000000, 264.000000, 306.000000, 0.000000 +8731, -3.000000, 264.000000, 306.000000, 0.000000 +8732, -3.000000, 264.000000, 306.000000, 0.000000 +8733, -3.000000, 264.000000, 306.000000, 0.000000 +8734, -3.000000, 264.000000, 306.000000, 0.000000 +8735, -3.000000, 264.000000, 306.000000, 0.000000 +8736, -3.000000, 264.000000, 306.000000, 0.000000 +8737, -3.000000, 264.000000, 306.000000, 0.000000 +8738, -3.000000, 264.000000, 306.000000, 0.000000 +8739, -3.000000, 264.000000, 306.000000, 0.000000 +8740, -3.000000, 264.000000, 306.000000, 0.000000 +8741, -3.000000, 264.000000, 306.000000, 0.000000 +8742, -3.000000, 264.000000, 306.000000, 0.000000 +8743, -3.000000, 264.000000, 306.000000, 0.000000 +8744, -3.000000, 264.000000, 306.000000, 0.000000 +8745, -3.000000, 264.000000, 306.000000, 0.000000 +8746, -3.000000, 264.000000, 306.000000, 0.000000 +8747, -3.000000, 264.000000, 306.000000, 0.000000 +8748, -3.000000, 264.000000, 306.000000, 0.000000 +8749, -3.000000, 264.000000, 306.000000, 0.000000 +8750, -3.000000, 264.000000, 306.000000, 0.000000 +8751, -3.000000, 264.000000, 306.000000, 0.000000 +8752, -3.000000, 264.000000, 306.000000, 0.000000 +8753, -3.000000, 264.000000, 306.000000, 0.000000 +8754, -3.000000, 264.000000, 306.000000, 0.000000 +8755, -3.000000, 264.000000, 306.000000, 0.000000 +8756, -3.000000, 264.000000, 306.000000, 0.000000 +8757, -3.000000, 264.000000, 306.000000, 0.000000 +8758, -3.000000, 264.000000, 306.000000, 0.000000 +8759, -3.000000, 264.000000, 306.000000, 0.000000 +8760, -3.000000, 264.000000, 306.000000, 0.000000 +8761, -3.000000, 264.000000, 306.000000, 0.000000 +8762, -3.000000, 264.000000, 306.000000, 0.000000 +8763, -3.000000, 264.000000, 306.000000, 0.000000 +8764, -3.000000, 264.000000, 306.000000, 0.000000 +8765, -3.000000, 264.000000, 306.000000, 0.000000 +8766, -3.000000, 264.000000, 306.000000, 0.000000 +8767, -3.000000, 264.000000, 306.000000, 0.000000 +8768, -3.000000, 264.000000, 306.000000, 0.000000 +8769, -3.000000, 264.000000, 306.000000, 0.000000 +8770, -3.000000, 264.000000, 306.000000, 0.000000 +8771, -3.000000, 264.000000, 306.000000, 0.000000 +8772, -3.000000, 264.000000, 306.000000, 0.000000 +8773, -3.000000, 264.000000, 306.000000, 0.000000 +8774, -3.000000, 264.000000, 306.000000, 0.000000 +8775, -3.000000, 264.000000, 306.000000, 0.000000 +8776, -3.000000, 264.000000, 306.000000, 0.000000 +8777, -3.000000, 264.000000, 306.000000, 0.000000 +8778, -3.000000, 264.000000, 306.000000, 0.000000 +8779, -3.000000, 264.000000, 306.000000, 0.000000 +8780, -3.000000, 264.000000, 306.000000, 0.000000 +8781, -3.000000, 264.000000, 306.000000, 0.000000 +8782, -3.000000, 264.000000, 306.000000, 0.000000 +8783, -3.000000, 264.000000, 306.000000, 0.000000 +8784, -3.000000, 264.000000, 306.000000, 0.000000 +8785, -3.000000, 264.000000, 306.000000, 0.000000 +8786, -3.000000, 264.000000, 306.000000, 0.000000 +8787, -3.000000, 264.000000, 306.000000, 0.000000 +8788, -3.000000, 264.000000, 306.000000, 0.000000 +8789, -3.000000, 264.000000, 306.000000, 0.000000 +8790, -3.000000, 264.000000, 306.000000, 0.000000 +8791, -3.000000, 264.000000, 306.000000, 0.000000 +8792, -3.000000, 264.000000, 306.000000, 0.000000 +8793, -3.000000, 264.000000, 306.000000, 0.000000 +8794, -3.000000, 264.000000, 306.000000, 0.000000 +8795, -3.000000, 264.000000, 306.000000, 0.000000 +8796, -3.000000, 264.000000, 306.000000, 0.000000 +8797, -3.000000, 264.000000, 306.000000, 0.000000 +8798, -3.000000, 264.000000, 306.000000, 0.000000 +8799, -3.000000, 264.000000, 306.000000, 0.000000 +8800, -3.000000, 266.000000, 309.000000, 0.000000 +8801, -3.000000, 266.000000, 309.000000, 0.000000 +8802, -3.000000, 266.000000, 309.000000, 0.000000 +8803, -3.000000, 266.000000, 309.000000, 0.000000 +8804, -3.000000, 266.000000, 309.000000, 0.000000 +8805, -3.000000, 266.000000, 309.000000, 0.000000 +8806, -3.000000, 266.000000, 309.000000, 0.000000 +8807, -3.000000, 266.000000, 309.000000, 0.000000 +8808, -3.000000, 266.000000, 309.000000, 0.000000 +8809, -3.000000, 266.000000, 309.000000, 0.000000 +8810, -3.000000, 266.000000, 309.000000, 0.000000 +8811, -3.000000, 266.000000, 309.000000, 0.000000 +8812, -3.000000, 266.000000, 309.000000, 0.000000 +8813, -3.000000, 266.000000, 309.000000, 0.000000 +8814, -3.000000, 266.000000, 309.000000, 0.000000 +8815, -3.000000, 266.000000, 309.000000, 0.000000 +8816, -3.000000, 266.000000, 309.000000, 0.000000 +8817, -3.000000, 266.000000, 309.000000, 0.000000 +8818, -3.000000, 266.000000, 309.000000, 0.000000 +8819, -3.000000, 266.000000, 309.000000, 0.000000 +8820, -3.000000, 266.000000, 309.000000, 0.000000 +8821, -3.000000, 266.000000, 309.000000, 0.000000 +8822, -3.000000, 266.000000, 309.000000, 0.000000 +8823, -3.000000, 266.000000, 309.000000, 0.000000 +8824, -3.000000, 266.000000, 309.000000, 0.000000 +8825, -3.000000, 266.000000, 309.000000, 0.000000 +8826, -3.000000, 266.000000, 309.000000, 0.000000 +8827, -3.000000, 266.000000, 309.000000, 0.000000 +8828, -3.000000, 266.000000, 309.000000, 0.000000 +8829, -3.000000, 266.000000, 309.000000, 0.000000 +8830, -3.000000, 266.000000, 309.000000, 0.000000 +8831, -3.000000, 266.000000, 309.000000, 0.000000 +8832, -3.000000, 266.000000, 309.000000, 0.000000 +8833, -3.000000, 266.000000, 309.000000, 0.000000 +8834, -3.000000, 266.000000, 309.000000, 0.000000 +8835, -3.000000, 266.000000, 309.000000, 0.000000 +8836, -3.000000, 266.000000, 309.000000, 0.000000 +8837, -3.000000, 266.000000, 309.000000, 0.000000 +8838, -3.000000, 266.000000, 309.000000, 0.000000 +8839, -3.000000, 266.000000, 309.000000, 0.000000 +8840, -3.000000, 266.000000, 309.000000, 0.000000 +8841, -3.000000, 266.000000, 309.000000, 0.000000 +8842, -3.000000, 266.000000, 309.000000, 0.000000 +8843, -3.000000, 266.000000, 309.000000, 0.000000 +8844, -3.000000, 266.000000, 309.000000, 0.000000 +8845, -3.000000, 266.000000, 309.000000, 0.000000 +8846, -3.000000, 266.000000, 309.000000, 0.000000 +8847, -3.000000, 266.000000, 309.000000, 0.000000 +8848, -3.000000, 266.000000, 309.000000, 0.000000 +8849, -3.000000, 266.000000, 309.000000, 0.000000 +8850, -3.000000, 266.000000, 309.000000, 0.000000 +8851, -3.000000, 266.000000, 309.000000, 0.000000 +8852, -3.000000, 266.000000, 309.000000, 0.000000 +8853, -3.000000, 266.000000, 309.000000, 0.000000 +8854, -3.000000, 266.000000, 309.000000, 0.000000 +8855, -3.000000, 266.000000, 309.000000, 0.000000 +8856, -3.000000, 266.000000, 309.000000, 0.000000 +8857, -3.000000, 266.000000, 309.000000, 0.000000 +8858, -3.000000, 266.000000, 309.000000, 0.000000 +8859, -3.000000, 266.000000, 309.000000, 0.000000 +8860, -3.000000, 266.000000, 309.000000, 0.000000 +8861, -3.000000, 266.000000, 309.000000, 0.000000 +8862, -3.000000, 266.000000, 309.000000, 0.000000 +8863, -3.000000, 266.000000, 309.000000, 0.000000 +8864, -3.000000, 266.000000, 309.000000, 0.000000 +8865, -3.000000, 266.000000, 309.000000, 0.000000 +8866, -3.000000, 266.000000, 309.000000, 0.000000 +8867, -3.000000, 266.000000, 309.000000, 0.000000 +8868, -3.000000, 266.000000, 309.000000, 0.000000 +8869, -3.000000, 266.000000, 309.000000, 0.000000 +8870, -3.000000, 266.000000, 309.000000, 0.000000 +8871, -3.000000, 266.000000, 309.000000, 0.000000 +8872, -3.000000, 266.000000, 309.000000, 0.000000 +8873, -3.000000, 266.000000, 309.000000, 0.000000 +8874, -3.000000, 266.000000, 309.000000, 0.000000 +8875, -3.000000, 266.000000, 309.000000, 0.000000 +8876, -3.000000, 266.000000, 309.000000, 0.000000 +8877, -3.000000, 266.000000, 309.000000, 0.000000 +8878, -3.000000, 266.000000, 309.000000, 0.000000 +8879, -3.000000, 266.000000, 309.000000, 0.000000 +8880, -3.000000, 266.000000, 309.000000, 0.000000 +8881, -3.000000, 266.000000, 309.000000, 0.000000 +8882, -3.000000, 266.000000, 309.000000, 0.000000 +8883, -3.000000, 266.000000, 309.000000, 0.000000 +8884, -3.000000, 266.000000, 309.000000, 0.000000 +8885, -3.000000, 266.000000, 309.000000, 0.000000 +8886, -3.000000, 266.000000, 309.000000, 0.000000 +8887, -3.000000, 266.000000, 309.000000, 0.000000 +8888, -3.000000, 266.000000, 309.000000, 0.000000 +8889, -3.000000, 266.000000, 309.000000, 0.000000 +8890, -3.000000, 266.000000, 309.000000, 0.000000 +8891, -3.000000, 266.000000, 309.000000, 0.000000 +8892, -3.000000, 266.000000, 309.000000, 0.000000 +8893, -3.000000, 266.000000, 309.000000, 0.000000 +8894, -3.000000, 266.000000, 309.000000, 0.000000 +8895, -3.000000, 266.000000, 309.000000, 0.000000 +8896, -3.000000, 266.000000, 309.000000, 0.000000 +8897, -3.000000, 266.000000, 309.000000, 0.000000 +8898, -3.000000, 266.000000, 309.000000, 0.000000 +8899, -3.000000, 266.000000, 309.000000, 0.000000 +8900, -3.000000, 268.000000, 312.000000, 0.000000 +8901, -3.000000, 268.000000, 312.000000, 0.000000 +8902, -3.000000, 268.000000, 312.000000, 0.000000 +8903, -3.000000, 268.000000, 312.000000, 0.000000 +8904, -3.000000, 268.000000, 312.000000, 0.000000 +8905, -3.000000, 268.000000, 312.000000, 0.000000 +8906, -3.000000, 268.000000, 312.000000, 0.000000 +8907, -3.000000, 268.000000, 312.000000, 0.000000 +8908, -3.000000, 268.000000, 312.000000, 0.000000 +8909, -3.000000, 268.000000, 312.000000, 0.000000 +8910, -3.000000, 268.000000, 312.000000, 0.000000 +8911, -3.000000, 268.000000, 312.000000, 0.000000 +8912, -3.000000, 268.000000, 312.000000, 0.000000 +8913, -3.000000, 268.000000, 312.000000, 0.000000 +8914, -3.000000, 268.000000, 312.000000, 0.000000 +8915, -3.000000, 268.000000, 312.000000, 0.000000 +8916, -3.000000, 268.000000, 312.000000, 0.000000 +8917, -3.000000, 268.000000, 312.000000, 0.000000 +8918, -3.000000, 268.000000, 312.000000, 0.000000 +8919, -3.000000, 268.000000, 312.000000, 0.000000 +8920, -3.000000, 268.000000, 312.000000, 0.000000 +8921, -3.000000, 268.000000, 312.000000, 0.000000 +8922, -3.000000, 268.000000, 312.000000, 0.000000 +8923, -3.000000, 268.000000, 312.000000, 0.000000 +8924, -3.000000, 268.000000, 312.000000, 0.000000 +8925, -3.000000, 268.000000, 312.000000, 0.000000 +8926, -3.000000, 268.000000, 312.000000, 0.000000 +8927, -3.000000, 268.000000, 312.000000, 0.000000 +8928, -3.000000, 268.000000, 312.000000, 0.000000 +8929, -3.000000, 268.000000, 312.000000, 0.000000 +8930, -3.000000, 268.000000, 312.000000, 0.000000 +8931, -3.000000, 268.000000, 312.000000, 0.000000 +8932, -3.000000, 268.000000, 312.000000, 0.000000 +8933, -3.000000, 268.000000, 312.000000, 0.000000 +8934, -3.000000, 268.000000, 312.000000, 0.000000 +8935, -3.000000, 268.000000, 312.000000, 0.000000 +8936, -3.000000, 268.000000, 312.000000, 0.000000 +8937, -3.000000, 268.000000, 312.000000, 0.000000 +8938, -3.000000, 268.000000, 312.000000, 0.000000 +8939, -3.000000, 268.000000, 312.000000, 0.000000 +8940, -3.000000, 268.000000, 312.000000, 0.000000 +8941, -3.000000, 268.000000, 312.000000, 0.000000 +8942, -3.000000, 268.000000, 312.000000, 0.000000 +8943, -3.000000, 268.000000, 312.000000, 0.000000 +8944, -3.000000, 268.000000, 312.000000, 0.000000 +8945, -3.000000, 268.000000, 312.000000, 0.000000 +8946, -3.000000, 268.000000, 312.000000, 0.000000 +8947, -3.000000, 268.000000, 312.000000, 0.000000 +8948, -3.000000, 268.000000, 312.000000, 0.000000 +8949, -3.000000, 268.000000, 312.000000, 0.000000 +8950, -3.000000, 268.000000, 312.000000, 0.000000 +8951, -3.000000, 268.000000, 312.000000, 0.000000 +8952, -3.000000, 268.000000, 312.000000, 0.000000 +8953, -3.000000, 268.000000, 312.000000, 0.000000 +8954, -3.000000, 268.000000, 312.000000, 0.000000 +8955, -3.000000, 268.000000, 312.000000, 0.000000 +8956, -3.000000, 268.000000, 312.000000, 0.000000 +8957, -3.000000, 268.000000, 312.000000, 0.000000 +8958, -3.000000, 268.000000, 312.000000, 0.000000 +8959, -3.000000, 268.000000, 312.000000, 0.000000 +8960, -3.000000, 268.000000, 312.000000, 0.000000 +8961, -3.000000, 268.000000, 312.000000, 0.000000 +8962, -3.000000, 268.000000, 312.000000, 0.000000 +8963, -3.000000, 268.000000, 312.000000, 0.000000 +8964, -3.000000, 268.000000, 312.000000, 0.000000 +8965, -3.000000, 268.000000, 312.000000, 0.000000 +8966, -3.000000, 268.000000, 312.000000, 0.000000 +8967, -3.000000, 268.000000, 312.000000, 0.000000 +8968, -3.000000, 268.000000, 312.000000, 0.000000 +8969, -3.000000, 268.000000, 312.000000, 0.000000 +8970, -3.000000, 268.000000, 312.000000, 0.000000 +8971, -3.000000, 268.000000, 312.000000, 0.000000 +8972, -3.000000, 268.000000, 312.000000, 0.000000 +8973, -3.000000, 268.000000, 312.000000, 0.000000 +8974, -3.000000, 268.000000, 312.000000, 0.000000 +8975, -3.000000, 268.000000, 312.000000, 0.000000 +8976, -3.000000, 268.000000, 312.000000, 0.000000 +8977, -3.000000, 268.000000, 312.000000, 0.000000 +8978, -3.000000, 268.000000, 312.000000, 0.000000 +8979, -3.000000, 268.000000, 312.000000, 0.000000 +8980, -3.000000, 268.000000, 312.000000, 0.000000 +8981, -3.000000, 268.000000, 312.000000, 0.000000 +8982, -3.000000, 268.000000, 312.000000, 0.000000 +8983, -3.000000, 268.000000, 312.000000, 0.000000 +8984, -3.000000, 268.000000, 312.000000, 0.000000 +8985, -3.000000, 268.000000, 312.000000, 0.000000 +8986, -3.000000, 268.000000, 312.000000, 0.000000 +8987, -3.000000, 268.000000, 312.000000, 0.000000 +8988, -3.000000, 268.000000, 312.000000, 0.000000 +8989, -3.000000, 268.000000, 312.000000, 0.000000 +8990, -3.000000, 268.000000, 312.000000, 0.000000 +8991, -3.000000, 268.000000, 312.000000, 0.000000 +8992, -3.000000, 268.000000, 312.000000, 0.000000 +8993, -3.000000, 268.000000, 312.000000, 0.000000 +8994, -3.000000, 268.000000, 312.000000, 0.000000 +8995, -3.000000, 268.000000, 312.000000, 0.000000 +8996, -3.000000, 268.000000, 312.000000, 0.000000 +8997, -3.000000, 268.000000, 312.000000, 0.000000 +8998, -3.000000, 268.000000, 312.000000, 0.000000 +8999, -3.000000, 268.000000, 312.000000, 0.000000 +9000, -3.000000, 270.000000, 315.000000, 0.000000 +9001, -3.000000, 270.000000, 315.000000, 0.000000 +9002, -3.000000, 270.000000, 315.000000, 0.000000 +9003, -3.000000, 270.000000, 315.000000, 0.000000 +9004, -3.000000, 270.000000, 315.000000, 0.000000 +9005, -3.000000, 270.000000, 315.000000, 0.000000 +9006, -3.000000, 270.000000, 315.000000, 0.000000 +9007, -3.000000, 270.000000, 315.000000, 0.000000 +9008, -3.000000, 270.000000, 315.000000, 0.000000 +9009, -3.000000, 270.000000, 315.000000, 0.000000 +9010, -3.000000, 270.000000, 315.000000, 0.000000 +9011, -3.000000, 270.000000, 315.000000, 0.000000 +9012, -3.000000, 270.000000, 315.000000, 0.000000 +9013, -3.000000, 270.000000, 315.000000, 0.000000 +9014, -3.000000, 270.000000, 315.000000, 0.000000 +9015, -3.000000, 270.000000, 315.000000, 0.000000 +9016, -3.000000, 270.000000, 315.000000, 0.000000 +9017, -3.000000, 270.000000, 315.000000, 0.000000 +9018, -3.000000, 270.000000, 315.000000, 0.000000 +9019, -3.000000, 270.000000, 315.000000, 0.000000 +9020, -3.000000, 270.000000, 315.000000, 0.000000 +9021, -3.000000, 270.000000, 315.000000, 0.000000 +9022, -3.000000, 270.000000, 315.000000, 0.000000 +9023, -3.000000, 270.000000, 315.000000, 0.000000 +9024, -3.000000, 270.000000, 315.000000, 0.000000 +9025, -3.000000, 270.000000, 315.000000, 0.000000 +9026, -3.000000, 270.000000, 315.000000, 0.000000 +9027, -3.000000, 270.000000, 315.000000, 0.000000 +9028, -3.000000, 270.000000, 315.000000, 0.000000 +9029, -3.000000, 270.000000, 315.000000, 0.000000 +9030, -3.000000, 270.000000, 315.000000, 0.000000 +9031, -3.000000, 270.000000, 315.000000, 0.000000 +9032, -3.000000, 270.000000, 315.000000, 0.000000 +9033, -3.000000, 270.000000, 315.000000, 0.000000 +9034, -3.000000, 270.000000, 315.000000, 0.000000 +9035, -3.000000, 270.000000, 315.000000, 0.000000 +9036, -3.000000, 270.000000, 315.000000, 0.000000 +9037, -3.000000, 270.000000, 315.000000, 0.000000 +9038, -3.000000, 270.000000, 315.000000, 0.000000 +9039, -3.000000, 270.000000, 315.000000, 0.000000 +9040, -3.000000, 270.000000, 315.000000, 0.000000 +9041, -3.000000, 270.000000, 315.000000, 0.000000 +9042, -3.000000, 270.000000, 315.000000, 0.000000 +9043, -3.000000, 270.000000, 315.000000, 0.000000 +9044, -3.000000, 270.000000, 315.000000, 0.000000 +9045, -3.000000, 270.000000, 315.000000, 0.000000 +9046, -3.000000, 270.000000, 315.000000, 0.000000 +9047, -3.000000, 270.000000, 315.000000, 0.000000 +9048, -3.000000, 270.000000, 315.000000, 0.000000 +9049, -3.000000, 270.000000, 315.000000, 0.000000 +9050, -3.000000, 270.000000, 315.000000, 0.000000 +9051, -3.000000, 270.000000, 315.000000, 0.000000 +9052, -3.000000, 270.000000, 315.000000, 0.000000 +9053, -3.000000, 270.000000, 315.000000, 0.000000 +9054, -3.000000, 270.000000, 315.000000, 0.000000 +9055, -3.000000, 270.000000, 315.000000, 0.000000 +9056, -3.000000, 270.000000, 315.000000, 0.000000 +9057, -3.000000, 270.000000, 315.000000, 0.000000 +9058, -3.000000, 270.000000, 315.000000, 0.000000 +9059, -3.000000, 270.000000, 315.000000, 0.000000 +9060, -3.000000, 270.000000, 315.000000, 0.000000 +9061, -3.000000, 270.000000, 315.000000, 0.000000 +9062, -3.000000, 270.000000, 315.000000, 0.000000 +9063, -3.000000, 270.000000, 315.000000, 0.000000 +9064, -3.000000, 270.000000, 315.000000, 0.000000 +9065, -3.000000, 270.000000, 315.000000, 0.000000 +9066, -3.000000, 270.000000, 315.000000, 0.000000 +9067, -3.000000, 270.000000, 315.000000, 0.000000 +9068, -3.000000, 270.000000, 315.000000, 0.000000 +9069, -3.000000, 270.000000, 315.000000, 0.000000 +9070, -3.000000, 270.000000, 315.000000, 0.000000 +9071, -3.000000, 270.000000, 315.000000, 0.000000 +9072, -3.000000, 270.000000, 315.000000, 0.000000 +9073, -3.000000, 270.000000, 315.000000, 0.000000 +9074, -3.000000, 270.000000, 315.000000, 0.000000 +9075, -3.000000, 270.000000, 315.000000, 0.000000 +9076, -3.000000, 270.000000, 315.000000, 0.000000 +9077, -3.000000, 270.000000, 315.000000, 0.000000 +9078, -3.000000, 270.000000, 315.000000, 0.000000 +9079, -3.000000, 270.000000, 315.000000, 0.000000 +9080, -3.000000, 270.000000, 315.000000, 0.000000 +9081, -3.000000, 270.000000, 315.000000, 0.000000 +9082, -3.000000, 270.000000, 315.000000, 0.000000 +9083, -3.000000, 270.000000, 315.000000, 0.000000 +9084, -3.000000, 270.000000, 315.000000, 0.000000 +9085, -3.000000, 270.000000, 315.000000, 0.000000 +9086, -3.000000, 270.000000, 315.000000, 0.000000 +9087, -3.000000, 270.000000, 315.000000, 0.000000 +9088, -3.000000, 270.000000, 315.000000, 0.000000 +9089, -3.000000, 270.000000, 315.000000, 0.000000 +9090, -3.000000, 270.000000, 315.000000, 0.000000 +9091, -3.000000, 270.000000, 315.000000, 0.000000 +9092, -3.000000, 270.000000, 315.000000, 0.000000 +9093, -3.000000, 270.000000, 315.000000, 0.000000 +9094, -3.000000, 270.000000, 315.000000, 0.000000 +9095, -3.000000, 270.000000, 315.000000, 0.000000 +9096, -3.000000, 270.000000, 315.000000, 0.000000 +9097, -3.000000, 270.000000, 315.000000, 0.000000 +9098, -3.000000, 270.000000, 315.000000, 0.000000 +9099, -3.000000, 270.000000, 315.000000, 0.000000 +9100, -3.000000, 272.000000, 318.000000, 0.000000 +9101, -3.000000, 272.000000, 318.000000, 0.000000 +9102, -3.000000, 272.000000, 318.000000, 0.000000 +9103, -3.000000, 272.000000, 318.000000, 0.000000 +9104, -3.000000, 272.000000, 318.000000, 0.000000 +9105, -3.000000, 272.000000, 318.000000, 0.000000 +9106, -3.000000, 272.000000, 318.000000, 0.000000 +9107, -3.000000, 272.000000, 318.000000, 0.000000 +9108, -3.000000, 272.000000, 318.000000, 0.000000 +9109, -3.000000, 272.000000, 318.000000, 0.000000 +9110, -3.000000, 272.000000, 318.000000, 0.000000 +9111, -3.000000, 272.000000, 318.000000, 0.000000 +9112, -3.000000, 272.000000, 318.000000, 0.000000 +9113, -3.000000, 272.000000, 318.000000, 0.000000 +9114, -3.000000, 272.000000, 318.000000, 0.000000 +9115, -3.000000, 272.000000, 318.000000, 0.000000 +9116, -3.000000, 272.000000, 318.000000, 0.000000 +9117, -3.000000, 272.000000, 318.000000, 0.000000 +9118, -3.000000, 272.000000, 318.000000, 0.000000 +9119, -3.000000, 272.000000, 318.000000, 0.000000 +9120, -3.000000, 272.000000, 318.000000, 0.000000 +9121, -3.000000, 272.000000, 318.000000, 0.000000 +9122, -3.000000, 272.000000, 318.000000, 0.000000 +9123, -3.000000, 272.000000, 318.000000, 0.000000 +9124, -3.000000, 272.000000, 318.000000, 0.000000 +9125, -3.000000, 272.000000, 318.000000, 0.000000 +9126, -3.000000, 272.000000, 318.000000, 0.000000 +9127, -3.000000, 272.000000, 318.000000, 0.000000 +9128, -3.000000, 272.000000, 318.000000, 0.000000 +9129, -3.000000, 272.000000, 318.000000, 0.000000 +9130, -3.000000, 272.000000, 318.000000, 0.000000 +9131, -3.000000, 272.000000, 318.000000, 0.000000 +9132, -3.000000, 272.000000, 318.000000, 0.000000 +9133, -3.000000, 272.000000, 318.000000, 0.000000 +9134, -3.000000, 272.000000, 318.000000, 0.000000 +9135, -3.000000, 272.000000, 318.000000, 0.000000 +9136, -3.000000, 272.000000, 318.000000, 0.000000 +9137, -3.000000, 272.000000, 318.000000, 0.000000 +9138, -3.000000, 272.000000, 318.000000, 0.000000 +9139, -3.000000, 272.000000, 318.000000, 0.000000 +9140, -3.000000, 272.000000, 318.000000, 0.000000 +9141, -3.000000, 272.000000, 318.000000, 0.000000 +9142, -3.000000, 272.000000, 318.000000, 0.000000 +9143, -3.000000, 272.000000, 318.000000, 0.000000 +9144, -3.000000, 272.000000, 318.000000, 0.000000 +9145, -3.000000, 272.000000, 318.000000, 0.000000 +9146, -3.000000, 272.000000, 318.000000, 0.000000 +9147, -3.000000, 272.000000, 318.000000, 0.000000 +9148, -3.000000, 272.000000, 318.000000, 0.000000 +9149, -3.000000, 272.000000, 318.000000, 0.000000 +9150, -3.000000, 272.000000, 318.000000, 0.000000 +9151, -3.000000, 272.000000, 318.000000, 0.000000 +9152, -3.000000, 272.000000, 318.000000, 0.000000 +9153, -3.000000, 272.000000, 318.000000, 0.000000 +9154, -3.000000, 272.000000, 318.000000, 0.000000 +9155, -3.000000, 272.000000, 318.000000, 0.000000 +9156, -3.000000, 272.000000, 318.000000, 0.000000 +9157, -3.000000, 272.000000, 318.000000, 0.000000 +9158, -3.000000, 272.000000, 318.000000, 0.000000 +9159, -3.000000, 272.000000, 318.000000, 0.000000 +9160, -3.000000, 272.000000, 318.000000, 0.000000 +9161, -3.000000, 272.000000, 318.000000, 0.000000 +9162, -3.000000, 272.000000, 318.000000, 0.000000 +9163, -3.000000, 272.000000, 318.000000, 0.000000 +9164, -3.000000, 272.000000, 318.000000, 0.000000 +9165, -3.000000, 272.000000, 318.000000, 0.000000 +9166, -3.000000, 272.000000, 318.000000, 0.000000 +9167, -3.000000, 272.000000, 318.000000, 0.000000 +9168, -3.000000, 272.000000, 318.000000, 0.000000 +9169, -3.000000, 272.000000, 318.000000, 0.000000 +9170, -3.000000, 272.000000, 318.000000, 0.000000 +9171, -3.000000, 272.000000, 318.000000, 0.000000 +9172, -3.000000, 272.000000, 318.000000, 0.000000 +9173, -3.000000, 272.000000, 318.000000, 0.000000 +9174, -3.000000, 272.000000, 318.000000, 0.000000 +9175, -3.000000, 272.000000, 318.000000, 0.000000 +9176, -3.000000, 272.000000, 318.000000, 0.000000 +9177, -3.000000, 272.000000, 318.000000, 0.000000 +9178, -3.000000, 272.000000, 318.000000, 0.000000 +9179, -3.000000, 272.000000, 318.000000, 0.000000 +9180, -3.000000, 272.000000, 318.000000, 0.000000 +9181, -3.000000, 272.000000, 318.000000, 0.000000 +9182, -3.000000, 272.000000, 318.000000, 0.000000 +9183, -3.000000, 272.000000, 318.000000, 0.000000 +9184, -3.000000, 272.000000, 318.000000, 0.000000 +9185, -3.000000, 272.000000, 318.000000, 0.000000 +9186, -3.000000, 272.000000, 318.000000, 0.000000 +9187, -3.000000, 272.000000, 318.000000, 0.000000 +9188, -3.000000, 272.000000, 318.000000, 0.000000 +9189, -3.000000, 272.000000, 318.000000, 0.000000 +9190, -3.000000, 272.000000, 318.000000, 0.000000 +9191, -3.000000, 272.000000, 318.000000, 0.000000 +9192, -3.000000, 272.000000, 318.000000, 0.000000 +9193, -3.000000, 272.000000, 318.000000, 0.000000 +9194, -3.000000, 272.000000, 318.000000, 0.000000 +9195, -3.000000, 272.000000, 318.000000, 0.000000 +9196, -3.000000, 272.000000, 318.000000, 0.000000 +9197, -3.000000, 272.000000, 318.000000, 0.000000 +9198, -3.000000, 272.000000, 318.000000, 0.000000 +9199, -3.000000, 272.000000, 318.000000, 0.000000 +9200, -3.000000, 274.000000, 321.000000, 0.000000 +9201, -3.000000, 274.000000, 321.000000, 0.000000 +9202, -3.000000, 274.000000, 321.000000, 0.000000 +9203, -3.000000, 274.000000, 321.000000, 0.000000 +9204, -3.000000, 274.000000, 321.000000, 0.000000 +9205, -3.000000, 274.000000, 321.000000, 0.000000 +9206, -3.000000, 274.000000, 321.000000, 0.000000 +9207, -3.000000, 274.000000, 321.000000, 0.000000 +9208, -3.000000, 274.000000, 321.000000, 0.000000 +9209, -3.000000, 274.000000, 321.000000, 0.000000 +9210, -3.000000, 274.000000, 321.000000, 0.000000 +9211, -3.000000, 274.000000, 321.000000, 0.000000 +9212, -3.000000, 274.000000, 321.000000, 0.000000 +9213, -3.000000, 274.000000, 321.000000, 0.000000 +9214, -3.000000, 274.000000, 321.000000, 0.000000 +9215, -3.000000, 274.000000, 321.000000, 0.000000 +9216, -3.000000, 274.000000, 321.000000, 0.000000 +9217, -3.000000, 274.000000, 321.000000, 0.000000 +9218, -3.000000, 274.000000, 321.000000, 0.000000 +9219, -3.000000, 274.000000, 321.000000, 0.000000 +9220, -3.000000, 274.000000, 321.000000, 0.000000 +9221, -3.000000, 274.000000, 321.000000, 0.000000 +9222, -3.000000, 274.000000, 321.000000, 0.000000 +9223, -3.000000, 274.000000, 321.000000, 0.000000 +9224, -3.000000, 274.000000, 321.000000, 0.000000 +9225, -3.000000, 274.000000, 321.000000, 0.000000 +9226, -3.000000, 274.000000, 321.000000, 0.000000 +9227, -3.000000, 274.000000, 321.000000, 0.000000 +9228, -3.000000, 274.000000, 321.000000, 0.000000 +9229, -3.000000, 274.000000, 321.000000, 0.000000 +9230, -3.000000, 274.000000, 321.000000, 0.000000 +9231, -3.000000, 274.000000, 321.000000, 0.000000 +9232, -3.000000, 274.000000, 321.000000, 0.000000 +9233, -3.000000, 274.000000, 321.000000, 0.000000 +9234, -3.000000, 274.000000, 321.000000, 0.000000 +9235, -3.000000, 274.000000, 321.000000, 0.000000 +9236, -3.000000, 274.000000, 321.000000, 0.000000 +9237, -3.000000, 274.000000, 321.000000, 0.000000 +9238, -3.000000, 274.000000, 321.000000, 0.000000 +9239, -3.000000, 274.000000, 321.000000, 0.000000 +9240, -3.000000, 274.000000, 321.000000, 0.000000 +9241, -3.000000, 274.000000, 321.000000, 0.000000 +9242, -3.000000, 274.000000, 321.000000, 0.000000 +9243, -3.000000, 274.000000, 321.000000, 0.000000 +9244, -3.000000, 274.000000, 321.000000, 0.000000 +9245, -3.000000, 274.000000, 321.000000, 0.000000 +9246, -3.000000, 274.000000, 321.000000, 0.000000 +9247, -3.000000, 274.000000, 321.000000, 0.000000 +9248, -3.000000, 274.000000, 321.000000, 0.000000 +9249, -3.000000, 274.000000, 321.000000, 0.000000 +9250, -3.000000, 274.000000, 321.000000, 0.000000 +9251, -3.000000, 274.000000, 321.000000, 0.000000 +9252, -3.000000, 274.000000, 321.000000, 0.000000 +9253, -3.000000, 274.000000, 321.000000, 0.000000 +9254, -3.000000, 274.000000, 321.000000, 0.000000 +9255, -3.000000, 274.000000, 321.000000, 0.000000 +9256, -3.000000, 274.000000, 321.000000, 0.000000 +9257, -3.000000, 274.000000, 321.000000, 0.000000 +9258, -3.000000, 274.000000, 321.000000, 0.000000 +9259, -3.000000, 274.000000, 321.000000, 0.000000 +9260, -3.000000, 274.000000, 321.000000, 0.000000 +9261, -3.000000, 274.000000, 321.000000, 0.000000 +9262, -3.000000, 274.000000, 321.000000, 0.000000 +9263, -3.000000, 274.000000, 321.000000, 0.000000 +9264, -3.000000, 274.000000, 321.000000, 0.000000 +9265, -3.000000, 274.000000, 321.000000, 0.000000 +9266, -3.000000, 274.000000, 321.000000, 0.000000 +9267, -3.000000, 274.000000, 321.000000, 0.000000 +9268, -3.000000, 274.000000, 321.000000, 0.000000 +9269, -3.000000, 274.000000, 321.000000, 0.000000 +9270, -3.000000, 274.000000, 321.000000, 0.000000 +9271, -3.000000, 274.000000, 321.000000, 0.000000 +9272, -3.000000, 274.000000, 321.000000, 0.000000 +9273, -3.000000, 274.000000, 321.000000, 0.000000 +9274, -3.000000, 274.000000, 321.000000, 0.000000 +9275, -3.000000, 274.000000, 321.000000, 0.000000 +9276, -3.000000, 274.000000, 321.000000, 0.000000 +9277, -3.000000, 274.000000, 321.000000, 0.000000 +9278, -3.000000, 274.000000, 321.000000, 0.000000 +9279, -3.000000, 274.000000, 321.000000, 0.000000 +9280, -3.000000, 274.000000, 321.000000, 0.000000 +9281, -3.000000, 274.000000, 321.000000, 0.000000 +9282, -3.000000, 274.000000, 321.000000, 0.000000 +9283, -3.000000, 274.000000, 321.000000, 0.000000 +9284, -3.000000, 274.000000, 321.000000, 0.000000 +9285, -3.000000, 274.000000, 321.000000, 0.000000 +9286, -3.000000, 274.000000, 321.000000, 0.000000 +9287, -3.000000, 274.000000, 321.000000, 0.000000 +9288, -3.000000, 274.000000, 321.000000, 0.000000 +9289, -3.000000, 274.000000, 321.000000, 0.000000 +9290, -3.000000, 274.000000, 321.000000, 0.000000 +9291, -3.000000, 274.000000, 321.000000, 0.000000 +9292, -3.000000, 274.000000, 321.000000, 0.000000 +9293, -3.000000, 274.000000, 321.000000, 0.000000 +9294, -3.000000, 274.000000, 321.000000, 0.000000 +9295, -3.000000, 274.000000, 321.000000, 0.000000 +9296, -3.000000, 274.000000, 321.000000, 0.000000 +9297, -3.000000, 274.000000, 321.000000, 0.000000 +9298, -3.000000, 274.000000, 321.000000, 0.000000 +9299, -3.000000, 274.000000, 321.000000, 0.000000 +9300, -3.000000, 276.000000, 324.000000, 0.000000 +9301, -3.000000, 276.000000, 324.000000, 0.000000 +9302, -3.000000, 276.000000, 324.000000, 0.000000 +9303, -3.000000, 276.000000, 324.000000, 0.000000 +9304, -3.000000, 276.000000, 324.000000, 0.000000 +9305, -3.000000, 276.000000, 324.000000, 0.000000 +9306, -3.000000, 276.000000, 324.000000, 0.000000 +9307, -3.000000, 276.000000, 324.000000, 0.000000 +9308, -3.000000, 276.000000, 324.000000, 0.000000 +9309, -3.000000, 276.000000, 324.000000, 0.000000 +9310, -3.000000, 276.000000, 324.000000, 0.000000 +9311, -3.000000, 276.000000, 324.000000, 0.000000 +9312, -3.000000, 276.000000, 324.000000, 0.000000 +9313, -3.000000, 276.000000, 324.000000, 0.000000 +9314, -3.000000, 276.000000, 324.000000, 0.000000 +9315, -3.000000, 276.000000, 324.000000, 0.000000 +9316, -3.000000, 276.000000, 324.000000, 0.000000 +9317, -3.000000, 276.000000, 324.000000, 0.000000 +9318, -3.000000, 276.000000, 324.000000, 0.000000 +9319, -3.000000, 276.000000, 324.000000, 0.000000 +9320, -3.000000, 276.000000, 324.000000, 0.000000 +9321, -3.000000, 276.000000, 324.000000, 0.000000 +9322, -3.000000, 276.000000, 324.000000, 0.000000 +9323, -3.000000, 276.000000, 324.000000, 0.000000 +9324, -3.000000, 276.000000, 324.000000, 0.000000 +9325, -3.000000, 276.000000, 324.000000, 0.000000 +9326, -3.000000, 276.000000, 324.000000, 0.000000 +9327, -3.000000, 276.000000, 324.000000, 0.000000 +9328, -3.000000, 276.000000, 324.000000, 0.000000 +9329, -3.000000, 276.000000, 324.000000, 0.000000 +9330, -3.000000, 276.000000, 324.000000, 0.000000 +9331, -3.000000, 276.000000, 324.000000, 0.000000 +9332, -3.000000, 276.000000, 324.000000, 0.000000 +9333, -3.000000, 276.000000, 324.000000, 0.000000 +9334, -3.000000, 276.000000, 324.000000, 0.000000 +9335, -3.000000, 276.000000, 324.000000, 0.000000 +9336, -3.000000, 276.000000, 324.000000, 0.000000 +9337, -3.000000, 276.000000, 324.000000, 0.000000 +9338, -3.000000, 276.000000, 324.000000, 0.000000 +9339, -3.000000, 276.000000, 324.000000, 0.000000 +9340, -3.000000, 276.000000, 324.000000, 0.000000 +9341, -3.000000, 276.000000, 324.000000, 0.000000 +9342, -3.000000, 276.000000, 324.000000, 0.000000 +9343, -3.000000, 276.000000, 324.000000, 0.000000 +9344, -3.000000, 276.000000, 324.000000, 0.000000 +9345, -3.000000, 276.000000, 324.000000, 0.000000 +9346, -3.000000, 276.000000, 324.000000, 0.000000 +9347, -3.000000, 276.000000, 324.000000, 0.000000 +9348, -3.000000, 276.000000, 324.000000, 0.000000 +9349, -3.000000, 276.000000, 324.000000, 0.000000 +9350, -3.000000, 276.000000, 324.000000, 0.000000 +9351, -3.000000, 276.000000, 324.000000, 0.000000 +9352, -3.000000, 276.000000, 324.000000, 0.000000 +9353, -3.000000, 276.000000, 324.000000, 0.000000 +9354, -3.000000, 276.000000, 324.000000, 0.000000 +9355, -3.000000, 276.000000, 324.000000, 0.000000 +9356, -3.000000, 276.000000, 324.000000, 0.000000 +9357, -3.000000, 276.000000, 324.000000, 0.000000 +9358, -3.000000, 276.000000, 324.000000, 0.000000 +9359, -3.000000, 276.000000, 324.000000, 0.000000 +9360, -3.000000, 276.000000, 324.000000, 0.000000 +9361, -3.000000, 276.000000, 324.000000, 0.000000 +9362, -3.000000, 276.000000, 324.000000, 0.000000 +9363, -3.000000, 276.000000, 324.000000, 0.000000 +9364, -3.000000, 276.000000, 324.000000, 0.000000 +9365, -3.000000, 276.000000, 324.000000, 0.000000 +9366, -3.000000, 276.000000, 324.000000, 0.000000 +9367, -3.000000, 276.000000, 324.000000, 0.000000 +9368, -3.000000, 276.000000, 324.000000, 0.000000 +9369, -3.000000, 276.000000, 324.000000, 0.000000 +9370, -3.000000, 276.000000, 324.000000, 0.000000 +9371, -3.000000, 276.000000, 324.000000, 0.000000 +9372, -3.000000, 276.000000, 324.000000, 0.000000 +9373, -3.000000, 276.000000, 324.000000, 0.000000 +9374, -3.000000, 276.000000, 324.000000, 0.000000 +9375, -3.000000, 276.000000, 324.000000, 0.000000 +9376, -3.000000, 276.000000, 324.000000, 0.000000 +9377, -3.000000, 276.000000, 324.000000, 0.000000 +9378, -3.000000, 276.000000, 324.000000, 0.000000 +9379, -3.000000, 276.000000, 324.000000, 0.000000 +9380, -3.000000, 276.000000, 324.000000, 0.000000 +9381, -3.000000, 276.000000, 324.000000, 0.000000 +9382, -3.000000, 276.000000, 324.000000, 0.000000 +9383, -3.000000, 276.000000, 324.000000, 0.000000 +9384, -3.000000, 276.000000, 324.000000, 0.000000 +9385, -3.000000, 276.000000, 324.000000, 0.000000 +9386, -3.000000, 276.000000, 324.000000, 0.000000 +9387, -3.000000, 276.000000, 324.000000, 0.000000 +9388, -3.000000, 276.000000, 324.000000, 0.000000 +9389, -3.000000, 276.000000, 324.000000, 0.000000 +9390, -3.000000, 276.000000, 324.000000, 0.000000 +9391, -3.000000, 276.000000, 324.000000, 0.000000 +9392, -3.000000, 276.000000, 324.000000, 0.000000 +9393, -3.000000, 276.000000, 324.000000, 0.000000 +9394, -3.000000, 276.000000, 324.000000, 0.000000 +9395, -3.000000, 276.000000, 324.000000, 0.000000 +9396, -3.000000, 276.000000, 324.000000, 0.000000 +9397, -3.000000, 276.000000, 324.000000, 0.000000 +9398, -3.000000, 276.000000, 324.000000, 0.000000 +9399, -3.000000, 276.000000, 324.000000, 0.000000 +9400, -3.000000, 278.000000, 327.000000, 0.000000 +9401, -3.000000, 278.000000, 327.000000, 0.000000 +9402, -3.000000, 278.000000, 327.000000, 0.000000 +9403, -3.000000, 278.000000, 327.000000, 0.000000 +9404, -3.000000, 278.000000, 327.000000, 0.000000 +9405, -3.000000, 278.000000, 327.000000, 0.000000 +9406, -3.000000, 278.000000, 327.000000, 0.000000 +9407, -3.000000, 278.000000, 327.000000, 0.000000 +9408, -3.000000, 278.000000, 327.000000, 0.000000 +9409, -3.000000, 278.000000, 327.000000, 0.000000 +9410, -3.000000, 278.000000, 327.000000, 0.000000 +9411, -3.000000, 278.000000, 327.000000, 0.000000 +9412, -3.000000, 278.000000, 327.000000, 0.000000 +9413, -3.000000, 278.000000, 327.000000, 0.000000 +9414, -3.000000, 278.000000, 327.000000, 0.000000 +9415, -3.000000, 278.000000, 327.000000, 0.000000 +9416, -3.000000, 278.000000, 327.000000, 0.000000 +9417, -3.000000, 278.000000, 327.000000, 0.000000 +9418, -3.000000, 278.000000, 327.000000, 0.000000 +9419, -3.000000, 278.000000, 327.000000, 0.000000 +9420, -3.000000, 278.000000, 327.000000, 0.000000 +9421, -3.000000, 278.000000, 327.000000, 0.000000 +9422, -3.000000, 278.000000, 327.000000, 0.000000 +9423, -3.000000, 278.000000, 327.000000, 0.000000 +9424, -3.000000, 278.000000, 327.000000, 0.000000 +9425, -3.000000, 278.000000, 327.000000, 0.000000 +9426, -3.000000, 278.000000, 327.000000, 0.000000 +9427, -3.000000, 278.000000, 327.000000, 0.000000 +9428, -3.000000, 278.000000, 327.000000, 0.000000 +9429, -3.000000, 278.000000, 327.000000, 0.000000 +9430, -3.000000, 278.000000, 327.000000, 0.000000 +9431, -3.000000, 278.000000, 327.000000, 0.000000 +9432, -3.000000, 278.000000, 327.000000, 0.000000 +9433, -3.000000, 278.000000, 327.000000, 0.000000 +9434, -3.000000, 278.000000, 327.000000, 0.000000 +9435, -3.000000, 278.000000, 327.000000, 0.000000 +9436, -3.000000, 278.000000, 327.000000, 0.000000 +9437, -3.000000, 278.000000, 327.000000, 0.000000 +9438, -3.000000, 278.000000, 327.000000, 0.000000 +9439, -3.000000, 278.000000, 327.000000, 0.000000 +9440, -3.000000, 278.000000, 327.000000, 0.000000 +9441, -3.000000, 278.000000, 327.000000, 0.000000 +9442, -3.000000, 278.000000, 327.000000, 0.000000 +9443, -3.000000, 278.000000, 327.000000, 0.000000 +9444, -3.000000, 278.000000, 327.000000, 0.000000 +9445, -3.000000, 278.000000, 327.000000, 0.000000 +9446, -3.000000, 278.000000, 327.000000, 0.000000 +9447, -3.000000, 278.000000, 327.000000, 0.000000 +9448, -3.000000, 278.000000, 327.000000, 0.000000 +9449, -3.000000, 278.000000, 327.000000, 0.000000 +9450, -3.000000, 278.000000, 327.000000, 0.000000 +9451, -3.000000, 278.000000, 327.000000, 0.000000 +9452, -3.000000, 278.000000, 327.000000, 0.000000 +9453, -3.000000, 278.000000, 327.000000, 0.000000 +9454, -3.000000, 278.000000, 327.000000, 0.000000 +9455, -3.000000, 278.000000, 327.000000, 0.000000 +9456, -3.000000, 278.000000, 327.000000, 0.000000 +9457, -3.000000, 278.000000, 327.000000, 0.000000 +9458, -3.000000, 278.000000, 327.000000, 0.000000 +9459, -3.000000, 278.000000, 327.000000, 0.000000 +9460, -3.000000, 278.000000, 327.000000, 0.000000 +9461, -3.000000, 278.000000, 327.000000, 0.000000 +9462, -3.000000, 278.000000, 327.000000, 0.000000 +9463, -3.000000, 278.000000, 327.000000, 0.000000 +9464, -3.000000, 278.000000, 327.000000, 0.000000 +9465, -3.000000, 278.000000, 327.000000, 0.000000 +9466, -3.000000, 278.000000, 327.000000, 0.000000 +9467, -3.000000, 278.000000, 327.000000, 0.000000 +9468, -3.000000, 278.000000, 327.000000, 0.000000 +9469, -3.000000, 278.000000, 327.000000, 0.000000 +9470, -3.000000, 278.000000, 327.000000, 0.000000 +9471, -3.000000, 278.000000, 327.000000, 0.000000 +9472, -3.000000, 278.000000, 327.000000, 0.000000 +9473, -3.000000, 278.000000, 327.000000, 0.000000 +9474, -3.000000, 278.000000, 327.000000, 0.000000 +9475, -3.000000, 278.000000, 327.000000, 0.000000 +9476, -3.000000, 278.000000, 327.000000, 0.000000 +9477, -3.000000, 278.000000, 327.000000, 0.000000 +9478, -3.000000, 278.000000, 327.000000, 0.000000 +9479, -3.000000, 278.000000, 327.000000, 0.000000 +9480, -3.000000, 278.000000, 327.000000, 0.000000 +9481, -3.000000, 278.000000, 327.000000, 0.000000 +9482, -3.000000, 278.000000, 327.000000, 0.000000 +9483, -3.000000, 278.000000, 327.000000, 0.000000 +9484, -3.000000, 278.000000, 327.000000, 0.000000 +9485, -3.000000, 278.000000, 327.000000, 0.000000 +9486, -3.000000, 278.000000, 327.000000, 0.000000 +9487, -3.000000, 278.000000, 327.000000, 0.000000 +9488, -3.000000, 278.000000, 327.000000, 0.000000 +9489, -3.000000, 278.000000, 327.000000, 0.000000 +9490, -3.000000, 278.000000, 327.000000, 0.000000 +9491, -3.000000, 278.000000, 327.000000, 0.000000 +9492, -3.000000, 278.000000, 327.000000, 0.000000 +9493, -3.000000, 278.000000, 327.000000, 0.000000 +9494, -3.000000, 278.000000, 327.000000, 0.000000 +9495, -3.000000, 278.000000, 327.000000, 0.000000 +9496, -3.000000, 278.000000, 327.000000, 0.000000 +9497, -3.000000, 278.000000, 327.000000, 0.000000 +9498, -3.000000, 278.000000, 327.000000, 0.000000 +9499, -3.000000, 278.000000, 327.000000, 0.000000 +9500, -3.000000, 280.000000, 330.000000, 0.000000 +9501, -3.000000, 280.000000, 330.000000, 0.000000 +9502, -3.000000, 280.000000, 330.000000, 0.000000 +9503, -3.000000, 280.000000, 330.000000, 0.000000 +9504, -3.000000, 280.000000, 330.000000, 0.000000 +9505, -3.000000, 280.000000, 330.000000, 0.000000 +9506, -3.000000, 280.000000, 330.000000, 0.000000 +9507, -3.000000, 280.000000, 330.000000, 0.000000 +9508, -3.000000, 280.000000, 330.000000, 0.000000 +9509, -3.000000, 280.000000, 330.000000, 0.000000 +9510, -3.000000, 280.000000, 330.000000, 0.000000 +9511, -3.000000, 280.000000, 330.000000, 0.000000 +9512, -3.000000, 280.000000, 330.000000, 0.000000 +9513, -3.000000, 280.000000, 330.000000, 0.000000 +9514, -3.000000, 280.000000, 330.000000, 0.000000 +9515, -3.000000, 280.000000, 330.000000, 0.000000 +9516, -3.000000, 280.000000, 330.000000, 0.000000 +9517, -3.000000, 280.000000, 330.000000, 0.000000 +9518, -3.000000, 280.000000, 330.000000, 0.000000 +9519, -3.000000, 280.000000, 330.000000, 0.000000 +9520, -3.000000, 280.000000, 330.000000, 0.000000 +9521, -3.000000, 280.000000, 330.000000, 0.000000 +9522, -3.000000, 280.000000, 330.000000, 0.000000 +9523, -3.000000, 280.000000, 330.000000, 0.000000 +9524, -3.000000, 280.000000, 330.000000, 0.000000 +9525, -3.000000, 280.000000, 330.000000, 0.000000 +9526, -3.000000, 280.000000, 330.000000, 0.000000 +9527, -3.000000, 280.000000, 330.000000, 0.000000 +9528, -3.000000, 280.000000, 330.000000, 0.000000 +9529, -3.000000, 280.000000, 330.000000, 0.000000 +9530, -3.000000, 280.000000, 330.000000, 0.000000 +9531, -3.000000, 280.000000, 330.000000, 0.000000 +9532, -3.000000, 280.000000, 330.000000, 0.000000 +9533, -3.000000, 280.000000, 330.000000, 0.000000 +9534, -3.000000, 280.000000, 330.000000, 0.000000 +9535, -3.000000, 280.000000, 330.000000, 0.000000 +9536, -3.000000, 280.000000, 330.000000, 0.000000 +9537, -3.000000, 280.000000, 330.000000, 0.000000 +9538, -3.000000, 280.000000, 330.000000, 0.000000 +9539, -3.000000, 280.000000, 330.000000, 0.000000 +9540, -3.000000, 280.000000, 330.000000, 0.000000 +9541, -3.000000, 280.000000, 330.000000, 0.000000 +9542, -3.000000, 280.000000, 330.000000, 0.000000 +9543, -3.000000, 280.000000, 330.000000, 0.000000 +9544, -3.000000, 280.000000, 330.000000, 0.000000 +9545, -3.000000, 280.000000, 330.000000, 0.000000 +9546, -3.000000, 280.000000, 330.000000, 0.000000 +9547, -3.000000, 280.000000, 330.000000, 0.000000 +9548, -3.000000, 280.000000, 330.000000, 0.000000 +9549, -3.000000, 280.000000, 330.000000, 0.000000 +9550, -3.000000, 280.000000, 330.000000, 0.000000 +9551, -3.000000, 280.000000, 330.000000, 0.000000 +9552, -3.000000, 280.000000, 330.000000, 0.000000 +9553, -3.000000, 280.000000, 330.000000, 0.000000 +9554, -3.000000, 280.000000, 330.000000, 0.000000 +9555, -3.000000, 280.000000, 330.000000, 0.000000 +9556, -3.000000, 280.000000, 330.000000, 0.000000 +9557, -3.000000, 280.000000, 330.000000, 0.000000 +9558, -3.000000, 280.000000, 330.000000, 0.000000 +9559, -3.000000, 280.000000, 330.000000, 0.000000 +9560, -3.000000, 280.000000, 330.000000, 0.000000 +9561, -3.000000, 280.000000, 330.000000, 0.000000 +9562, -3.000000, 280.000000, 330.000000, 0.000000 +9563, -3.000000, 280.000000, 330.000000, 0.000000 +9564, -3.000000, 280.000000, 330.000000, 0.000000 +9565, -3.000000, 280.000000, 330.000000, 0.000000 +9566, -3.000000, 280.000000, 330.000000, 0.000000 +9567, -3.000000, 280.000000, 330.000000, 0.000000 +9568, -3.000000, 280.000000, 330.000000, 0.000000 +9569, -3.000000, 280.000000, 330.000000, 0.000000 +9570, -3.000000, 280.000000, 330.000000, 0.000000 +9571, -3.000000, 280.000000, 330.000000, 0.000000 +9572, -3.000000, 280.000000, 330.000000, 0.000000 +9573, -3.000000, 280.000000, 330.000000, 0.000000 +9574, -3.000000, 280.000000, 330.000000, 0.000000 +9575, -3.000000, 280.000000, 330.000000, 0.000000 +9576, -3.000000, 280.000000, 330.000000, 0.000000 +9577, -3.000000, 280.000000, 330.000000, 0.000000 +9578, -3.000000, 280.000000, 330.000000, 0.000000 +9579, -3.000000, 280.000000, 330.000000, 0.000000 +9580, -3.000000, 280.000000, 330.000000, 0.000000 +9581, -3.000000, 280.000000, 330.000000, 0.000000 +9582, -3.000000, 280.000000, 330.000000, 0.000000 +9583, -3.000000, 280.000000, 330.000000, 0.000000 +9584, -3.000000, 280.000000, 330.000000, 0.000000 +9585, -3.000000, 280.000000, 330.000000, 0.000000 +9586, -3.000000, 280.000000, 330.000000, 0.000000 +9587, -3.000000, 280.000000, 330.000000, 0.000000 +9588, -3.000000, 280.000000, 330.000000, 0.000000 +9589, -3.000000, 280.000000, 330.000000, 0.000000 +9590, -3.000000, 280.000000, 330.000000, 0.000000 +9591, -3.000000, 280.000000, 330.000000, 0.000000 +9592, -3.000000, 280.000000, 330.000000, 0.000000 +9593, -3.000000, 280.000000, 330.000000, 0.000000 +9594, -3.000000, 280.000000, 330.000000, 0.000000 +9595, -3.000000, 280.000000, 330.000000, 0.000000 +9596, -3.000000, 280.000000, 330.000000, 0.000000 +9597, -3.000000, 280.000000, 330.000000, 0.000000 +9598, -3.000000, 280.000000, 330.000000, 0.000000 +9599, -3.000000, 280.000000, 330.000000, 0.000000 +9600, -3.000000, 282.000000, 333.000000, 0.000000 +9601, -3.000000, 282.000000, 333.000000, 0.000000 +9602, -3.000000, 282.000000, 333.000000, 0.000000 +9603, -3.000000, 282.000000, 333.000000, 0.000000 +9604, -3.000000, 282.000000, 333.000000, 0.000000 +9605, -3.000000, 282.000000, 333.000000, 0.000000 +9606, -3.000000, 282.000000, 333.000000, 0.000000 +9607, -3.000000, 282.000000, 333.000000, 0.000000 +9608, -3.000000, 282.000000, 333.000000, 0.000000 +9609, -3.000000, 282.000000, 333.000000, 0.000000 +9610, -3.000000, 282.000000, 333.000000, 0.000000 +9611, -3.000000, 282.000000, 333.000000, 0.000000 +9612, -3.000000, 282.000000, 333.000000, 0.000000 +9613, -3.000000, 282.000000, 333.000000, 0.000000 +9614, -3.000000, 282.000000, 333.000000, 0.000000 +9615, -3.000000, 282.000000, 333.000000, 0.000000 +9616, -3.000000, 282.000000, 333.000000, 0.000000 +9617, -3.000000, 282.000000, 333.000000, 0.000000 +9618, -3.000000, 282.000000, 333.000000, 0.000000 +9619, -3.000000, 282.000000, 333.000000, 0.000000 +9620, -3.000000, 282.000000, 333.000000, 0.000000 +9621, -3.000000, 282.000000, 333.000000, 0.000000 +9622, -3.000000, 282.000000, 333.000000, 0.000000 +9623, -3.000000, 282.000000, 333.000000, 0.000000 +9624, -3.000000, 282.000000, 333.000000, 0.000000 +9625, -3.000000, 282.000000, 333.000000, 0.000000 +9626, -3.000000, 282.000000, 333.000000, 0.000000 +9627, -3.000000, 282.000000, 333.000000, 0.000000 +9628, -3.000000, 282.000000, 333.000000, 0.000000 +9629, -3.000000, 282.000000, 333.000000, 0.000000 +9630, -3.000000, 282.000000, 333.000000, 0.000000 +9631, -3.000000, 282.000000, 333.000000, 0.000000 +9632, -3.000000, 282.000000, 333.000000, 0.000000 +9633, -3.000000, 282.000000, 333.000000, 0.000000 +9634, -3.000000, 282.000000, 333.000000, 0.000000 +9635, -3.000000, 282.000000, 333.000000, 0.000000 +9636, -3.000000, 282.000000, 333.000000, 0.000000 +9637, -3.000000, 282.000000, 333.000000, 0.000000 +9638, -3.000000, 282.000000, 333.000000, 0.000000 +9639, -3.000000, 282.000000, 333.000000, 0.000000 +9640, -3.000000, 282.000000, 333.000000, 0.000000 +9641, -3.000000, 282.000000, 333.000000, 0.000000 +9642, -3.000000, 282.000000, 333.000000, 0.000000 +9643, -3.000000, 282.000000, 333.000000, 0.000000 +9644, -3.000000, 282.000000, 333.000000, 0.000000 +9645, -3.000000, 282.000000, 333.000000, 0.000000 +9646, -3.000000, 282.000000, 333.000000, 0.000000 +9647, -3.000000, 282.000000, 333.000000, 0.000000 +9648, -3.000000, 282.000000, 333.000000, 0.000000 +9649, -3.000000, 282.000000, 333.000000, 0.000000 +9650, -3.000000, 282.000000, 333.000000, 0.000000 +9651, -3.000000, 282.000000, 333.000000, 0.000000 +9652, -3.000000, 282.000000, 333.000000, 0.000000 +9653, -3.000000, 282.000000, 333.000000, 0.000000 +9654, -3.000000, 282.000000, 333.000000, 0.000000 +9655, -3.000000, 282.000000, 333.000000, 0.000000 +9656, -3.000000, 282.000000, 333.000000, 0.000000 +9657, -3.000000, 282.000000, 333.000000, 0.000000 +9658, -3.000000, 282.000000, 333.000000, 0.000000 +9659, -3.000000, 282.000000, 333.000000, 0.000000 +9660, -3.000000, 282.000000, 333.000000, 0.000000 +9661, -3.000000, 282.000000, 333.000000, 0.000000 +9662, -3.000000, 282.000000, 333.000000, 0.000000 +9663, -3.000000, 282.000000, 333.000000, 0.000000 +9664, -3.000000, 282.000000, 333.000000, 0.000000 +9665, -3.000000, 282.000000, 333.000000, 0.000000 +9666, -3.000000, 282.000000, 333.000000, 0.000000 +9667, -3.000000, 282.000000, 333.000000, 0.000000 +9668, -3.000000, 282.000000, 333.000000, 0.000000 +9669, -3.000000, 282.000000, 333.000000, 0.000000 +9670, -3.000000, 282.000000, 333.000000, 0.000000 +9671, -3.000000, 282.000000, 333.000000, 0.000000 +9672, -3.000000, 282.000000, 333.000000, 0.000000 +9673, -3.000000, 282.000000, 333.000000, 0.000000 +9674, -3.000000, 282.000000, 333.000000, 0.000000 +9675, -3.000000, 282.000000, 333.000000, 0.000000 +9676, -3.000000, 282.000000, 333.000000, 0.000000 +9677, -3.000000, 282.000000, 333.000000, 0.000000 +9678, -3.000000, 282.000000, 333.000000, 0.000000 +9679, -3.000000, 282.000000, 333.000000, 0.000000 +9680, -3.000000, 282.000000, 333.000000, 0.000000 +9681, -3.000000, 282.000000, 333.000000, 0.000000 +9682, -3.000000, 282.000000, 333.000000, 0.000000 +9683, -3.000000, 282.000000, 333.000000, 0.000000 +9684, -3.000000, 282.000000, 333.000000, 0.000000 +9685, -3.000000, 282.000000, 333.000000, 0.000000 +9686, -3.000000, 282.000000, 333.000000, 0.000000 +9687, -3.000000, 282.000000, 333.000000, 0.000000 +9688, -3.000000, 282.000000, 333.000000, 0.000000 +9689, -3.000000, 282.000000, 333.000000, 0.000000 +9690, -3.000000, 282.000000, 333.000000, 0.000000 +9691, -3.000000, 282.000000, 333.000000, 0.000000 +9692, -3.000000, 282.000000, 333.000000, 0.000000 +9693, -3.000000, 282.000000, 333.000000, 0.000000 +9694, -3.000000, 282.000000, 333.000000, 0.000000 +9695, -3.000000, 282.000000, 333.000000, 0.000000 +9696, -3.000000, 282.000000, 333.000000, 0.000000 +9697, -3.000000, 282.000000, 333.000000, 0.000000 +9698, -3.000000, 282.000000, 333.000000, 0.000000 +9699, -3.000000, 282.000000, 333.000000, 0.000000 +9700, -3.000000, 284.000000, 336.000000, 0.000000 +9701, -3.000000, 284.000000, 336.000000, 0.000000 +9702, -3.000000, 284.000000, 336.000000, 0.000000 +9703, -3.000000, 284.000000, 336.000000, 0.000000 +9704, -3.000000, 284.000000, 336.000000, 0.000000 +9705, -3.000000, 284.000000, 336.000000, 0.000000 +9706, -3.000000, 284.000000, 336.000000, 0.000000 +9707, -3.000000, 284.000000, 336.000000, 0.000000 +9708, -3.000000, 284.000000, 336.000000, 0.000000 +9709, -3.000000, 284.000000, 336.000000, 0.000000 +9710, -3.000000, 284.000000, 336.000000, 0.000000 +9711, -3.000000, 284.000000, 336.000000, 0.000000 +9712, -3.000000, 284.000000, 336.000000, 0.000000 +9713, -3.000000, 284.000000, 336.000000, 0.000000 +9714, -3.000000, 284.000000, 336.000000, 0.000000 +9715, -3.000000, 284.000000, 336.000000, 0.000000 +9716, -3.000000, 284.000000, 336.000000, 0.000000 +9717, -3.000000, 284.000000, 336.000000, 0.000000 +9718, -3.000000, 284.000000, 336.000000, 0.000000 +9719, -3.000000, 284.000000, 336.000000, 0.000000 +9720, -3.000000, 284.000000, 336.000000, 0.000000 +9721, -3.000000, 284.000000, 336.000000, 0.000000 +9722, -3.000000, 284.000000, 336.000000, 0.000000 +9723, -3.000000, 284.000000, 336.000000, 0.000000 +9724, -3.000000, 284.000000, 336.000000, 0.000000 +9725, -3.000000, 284.000000, 336.000000, 0.000000 +9726, -3.000000, 284.000000, 336.000000, 0.000000 +9727, -3.000000, 284.000000, 336.000000, 0.000000 +9728, -3.000000, 284.000000, 336.000000, 0.000000 +9729, -3.000000, 284.000000, 336.000000, 0.000000 +9730, -3.000000, 284.000000, 336.000000, 0.000000 +9731, -3.000000, 284.000000, 336.000000, 0.000000 +9732, -3.000000, 284.000000, 336.000000, 0.000000 +9733, -3.000000, 284.000000, 336.000000, 0.000000 +9734, -3.000000, 284.000000, 336.000000, 0.000000 +9735, -3.000000, 284.000000, 336.000000, 0.000000 +9736, -3.000000, 284.000000, 336.000000, 0.000000 +9737, -3.000000, 284.000000, 336.000000, 0.000000 +9738, -3.000000, 284.000000, 336.000000, 0.000000 +9739, -3.000000, 284.000000, 336.000000, 0.000000 +9740, -3.000000, 284.000000, 336.000000, 0.000000 +9741, -3.000000, 284.000000, 336.000000, 0.000000 +9742, -3.000000, 284.000000, 336.000000, 0.000000 +9743, -3.000000, 284.000000, 336.000000, 0.000000 +9744, -3.000000, 284.000000, 336.000000, 0.000000 +9745, -3.000000, 284.000000, 336.000000, 0.000000 +9746, -3.000000, 284.000000, 336.000000, 0.000000 +9747, -3.000000, 284.000000, 336.000000, 0.000000 +9748, -3.000000, 284.000000, 336.000000, 0.000000 +9749, -3.000000, 284.000000, 336.000000, 0.000000 +9750, -3.000000, 284.000000, 336.000000, 0.000000 +9751, -3.000000, 284.000000, 336.000000, 0.000000 +9752, -3.000000, 284.000000, 336.000000, 0.000000 +9753, -3.000000, 284.000000, 336.000000, 0.000000 +9754, -3.000000, 284.000000, 336.000000, 0.000000 +9755, -3.000000, 284.000000, 336.000000, 0.000000 +9756, -3.000000, 284.000000, 336.000000, 0.000000 +9757, -3.000000, 284.000000, 336.000000, 0.000000 +9758, -3.000000, 284.000000, 336.000000, 0.000000 +9759, -3.000000, 284.000000, 336.000000, 0.000000 +9760, -3.000000, 284.000000, 336.000000, 0.000000 +9761, -3.000000, 284.000000, 336.000000, 0.000000 +9762, -3.000000, 284.000000, 336.000000, 0.000000 +9763, -3.000000, 284.000000, 336.000000, 0.000000 +9764, -3.000000, 284.000000, 336.000000, 0.000000 +9765, -3.000000, 284.000000, 336.000000, 0.000000 +9766, -3.000000, 284.000000, 336.000000, 0.000000 +9767, -3.000000, 284.000000, 336.000000, 0.000000 +9768, -3.000000, 284.000000, 336.000000, 0.000000 +9769, -3.000000, 284.000000, 336.000000, 0.000000 +9770, -3.000000, 284.000000, 336.000000, 0.000000 +9771, -3.000000, 284.000000, 336.000000, 0.000000 +9772, -3.000000, 284.000000, 336.000000, 0.000000 +9773, -3.000000, 284.000000, 336.000000, 0.000000 +9774, -3.000000, 284.000000, 336.000000, 0.000000 +9775, -3.000000, 284.000000, 336.000000, 0.000000 +9776, -3.000000, 284.000000, 336.000000, 0.000000 +9777, -3.000000, 284.000000, 336.000000, 0.000000 +9778, -3.000000, 284.000000, 336.000000, 0.000000 +9779, -3.000000, 284.000000, 336.000000, 0.000000 +9780, -3.000000, 284.000000, 336.000000, 0.000000 +9781, -3.000000, 284.000000, 336.000000, 0.000000 +9782, -3.000000, 284.000000, 336.000000, 0.000000 +9783, -3.000000, 284.000000, 336.000000, 0.000000 +9784, -3.000000, 284.000000, 336.000000, 0.000000 +9785, -3.000000, 284.000000, 336.000000, 0.000000 +9786, -3.000000, 284.000000, 336.000000, 0.000000 +9787, -3.000000, 284.000000, 336.000000, 0.000000 +9788, -3.000000, 284.000000, 336.000000, 0.000000 +9789, -3.000000, 284.000000, 336.000000, 0.000000 +9790, -3.000000, 284.000000, 336.000000, 0.000000 +9791, -3.000000, 284.000000, 336.000000, 0.000000 +9792, -3.000000, 284.000000, 336.000000, 0.000000 +9793, -3.000000, 284.000000, 336.000000, 0.000000 +9794, -3.000000, 284.000000, 336.000000, 0.000000 +9795, -3.000000, 284.000000, 336.000000, 0.000000 +9796, -3.000000, 284.000000, 336.000000, 0.000000 +9797, -3.000000, 284.000000, 336.000000, 0.000000 +9798, -3.000000, 284.000000, 336.000000, 0.000000 +9799, -3.000000, 284.000000, 336.000000, 0.000000 +9800, -3.000000, 286.000000, 339.000000, 0.000000 +9801, -3.000000, 286.000000, 339.000000, 0.000000 +9802, -3.000000, 286.000000, 339.000000, 0.000000 +9803, -3.000000, 286.000000, 339.000000, 0.000000 +9804, -3.000000, 286.000000, 339.000000, 0.000000 +9805, -3.000000, 286.000000, 339.000000, 0.000000 +9806, -3.000000, 286.000000, 339.000000, 0.000000 +9807, -3.000000, 286.000000, 339.000000, 0.000000 +9808, -3.000000, 286.000000, 339.000000, 0.000000 +9809, -3.000000, 286.000000, 339.000000, 0.000000 +9810, -3.000000, 286.000000, 339.000000, 0.000000 +9811, -3.000000, 286.000000, 339.000000, 0.000000 +9812, -3.000000, 286.000000, 339.000000, 0.000000 +9813, -3.000000, 286.000000, 339.000000, 0.000000 +9814, -3.000000, 286.000000, 339.000000, 0.000000 +9815, -3.000000, 286.000000, 339.000000, 0.000000 +9816, -3.000000, 286.000000, 339.000000, 0.000000 +9817, -3.000000, 286.000000, 339.000000, 0.000000 +9818, -3.000000, 286.000000, 339.000000, 0.000000 +9819, -3.000000, 286.000000, 339.000000, 0.000000 +9820, -3.000000, 286.000000, 339.000000, 0.000000 +9821, -3.000000, 286.000000, 339.000000, 0.000000 +9822, -3.000000, 286.000000, 339.000000, 0.000000 +9823, -3.000000, 286.000000, 339.000000, 0.000000 +9824, -3.000000, 286.000000, 339.000000, 0.000000 +9825, -3.000000, 286.000000, 339.000000, 0.000000 +9826, -3.000000, 286.000000, 339.000000, 0.000000 +9827, -3.000000, 286.000000, 339.000000, 0.000000 +9828, -3.000000, 286.000000, 339.000000, 0.000000 +9829, -3.000000, 286.000000, 339.000000, 0.000000 +9830, -3.000000, 286.000000, 339.000000, 0.000000 +9831, -3.000000, 286.000000, 339.000000, 0.000000 +9832, -3.000000, 286.000000, 339.000000, 0.000000 +9833, -3.000000, 286.000000, 339.000000, 0.000000 +9834, -3.000000, 286.000000, 339.000000, 0.000000 +9835, -3.000000, 286.000000, 339.000000, 0.000000 +9836, -3.000000, 286.000000, 339.000000, 0.000000 +9837, -3.000000, 286.000000, 339.000000, 0.000000 +9838, -3.000000, 286.000000, 339.000000, 0.000000 +9839, -3.000000, 286.000000, 339.000000, 0.000000 +9840, -3.000000, 286.000000, 339.000000, 0.000000 +9841, -3.000000, 286.000000, 339.000000, 0.000000 +9842, -3.000000, 286.000000, 339.000000, 0.000000 +9843, -3.000000, 286.000000, 339.000000, 0.000000 +9844, -3.000000, 286.000000, 339.000000, 0.000000 +9845, -3.000000, 286.000000, 339.000000, 0.000000 +9846, -3.000000, 286.000000, 339.000000, 0.000000 +9847, -3.000000, 286.000000, 339.000000, 0.000000 +9848, -3.000000, 286.000000, 339.000000, 0.000000 +9849, -3.000000, 286.000000, 339.000000, 0.000000 +9850, -3.000000, 286.000000, 339.000000, 0.000000 +9851, -3.000000, 286.000000, 339.000000, 0.000000 +9852, -3.000000, 286.000000, 339.000000, 0.000000 +9853, -3.000000, 286.000000, 339.000000, 0.000000 +9854, -3.000000, 286.000000, 339.000000, 0.000000 +9855, -3.000000, 286.000000, 339.000000, 0.000000 +9856, -3.000000, 286.000000, 339.000000, 0.000000 +9857, -3.000000, 286.000000, 339.000000, 0.000000 +9858, -3.000000, 286.000000, 339.000000, 0.000000 +9859, -3.000000, 286.000000, 339.000000, 0.000000 +9860, -3.000000, 286.000000, 339.000000, 0.000000 +9861, -3.000000, 286.000000, 339.000000, 0.000000 +9862, -3.000000, 286.000000, 339.000000, 0.000000 +9863, -3.000000, 286.000000, 339.000000, 0.000000 +9864, -3.000000, 286.000000, 339.000000, 0.000000 +9865, -3.000000, 286.000000, 339.000000, 0.000000 +9866, -3.000000, 286.000000, 339.000000, 0.000000 +9867, -3.000000, 286.000000, 339.000000, 0.000000 +9868, -3.000000, 286.000000, 339.000000, 0.000000 +9869, -3.000000, 286.000000, 339.000000, 0.000000 +9870, -3.000000, 286.000000, 339.000000, 0.000000 +9871, -3.000000, 286.000000, 339.000000, 0.000000 +9872, -3.000000, 286.000000, 339.000000, 0.000000 +9873, -3.000000, 286.000000, 339.000000, 0.000000 +9874, -3.000000, 286.000000, 339.000000, 0.000000 +9875, -3.000000, 286.000000, 339.000000, 0.000000 +9876, -3.000000, 286.000000, 339.000000, 0.000000 +9877, -3.000000, 286.000000, 339.000000, 0.000000 +9878, -3.000000, 286.000000, 339.000000, 0.000000 +9879, -3.000000, 286.000000, 339.000000, 0.000000 +9880, -3.000000, 286.000000, 339.000000, 0.000000 +9881, -3.000000, 286.000000, 339.000000, 0.000000 +9882, -3.000000, 286.000000, 339.000000, 0.000000 +9883, -3.000000, 286.000000, 339.000000, 0.000000 +9884, -3.000000, 286.000000, 339.000000, 0.000000 +9885, -3.000000, 286.000000, 339.000000, 0.000000 +9886, -3.000000, 286.000000, 339.000000, 0.000000 +9887, -3.000000, 286.000000, 339.000000, 0.000000 +9888, -3.000000, 286.000000, 339.000000, 0.000000 +9889, -3.000000, 286.000000, 339.000000, 0.000000 +9890, -3.000000, 286.000000, 339.000000, 0.000000 +9891, -3.000000, 286.000000, 339.000000, 0.000000 +9892, -3.000000, 286.000000, 339.000000, 0.000000 +9893, -3.000000, 286.000000, 339.000000, 0.000000 +9894, -3.000000, 286.000000, 339.000000, 0.000000 +9895, -3.000000, 286.000000, 339.000000, 0.000000 +9896, -3.000000, 286.000000, 339.000000, 0.000000 +9897, -3.000000, 286.000000, 339.000000, 0.000000 +9898, -3.000000, 286.000000, 339.000000, 0.000000 +9899, -3.000000, 286.000000, 339.000000, 0.000000 +9900, -3.000000, 288.000000, 342.000000, 0.000000 +9901, -3.000000, 288.000000, 342.000000, 0.000000 +9902, -3.000000, 288.000000, 342.000000, 0.000000 +9903, -3.000000, 288.000000, 342.000000, 0.000000 +9904, -3.000000, 288.000000, 342.000000, 0.000000 +9905, -3.000000, 288.000000, 342.000000, 0.000000 +9906, -3.000000, 288.000000, 342.000000, 0.000000 +9907, -3.000000, 288.000000, 342.000000, 0.000000 +9908, -3.000000, 288.000000, 342.000000, 0.000000 +9909, -3.000000, 288.000000, 342.000000, 0.000000 +9910, -3.000000, 288.000000, 342.000000, 0.000000 +9911, -3.000000, 288.000000, 342.000000, 0.000000 +9912, -3.000000, 288.000000, 342.000000, 0.000000 +9913, -3.000000, 288.000000, 342.000000, 0.000000 +9914, -3.000000, 288.000000, 342.000000, 0.000000 +9915, -3.000000, 288.000000, 342.000000, 0.000000 +9916, -3.000000, 288.000000, 342.000000, 0.000000 +9917, -3.000000, 288.000000, 342.000000, 0.000000 +9918, -3.000000, 288.000000, 342.000000, 0.000000 +9919, -3.000000, 288.000000, 342.000000, 0.000000 +9920, -3.000000, 288.000000, 342.000000, 0.000000 +9921, -3.000000, 288.000000, 342.000000, 0.000000 +9922, -3.000000, 288.000000, 342.000000, 0.000000 +9923, -3.000000, 288.000000, 342.000000, 0.000000 +9924, -3.000000, 288.000000, 342.000000, 0.000000 +9925, -3.000000, 288.000000, 342.000000, 0.000000 +9926, -3.000000, 288.000000, 342.000000, 0.000000 +9927, -3.000000, 288.000000, 342.000000, 0.000000 +9928, -3.000000, 288.000000, 342.000000, 0.000000 +9929, -3.000000, 288.000000, 342.000000, 0.000000 +9930, -3.000000, 288.000000, 342.000000, 0.000000 +9931, -3.000000, 288.000000, 342.000000, 0.000000 +9932, -3.000000, 288.000000, 342.000000, 0.000000 +9933, -3.000000, 288.000000, 342.000000, 0.000000 +9934, -3.000000, 288.000000, 342.000000, 0.000000 +9935, -3.000000, 288.000000, 342.000000, 0.000000 +9936, -3.000000, 288.000000, 342.000000, 0.000000 +9937, -3.000000, 288.000000, 342.000000, 0.000000 +9938, -3.000000, 288.000000, 342.000000, 0.000000 +9939, -3.000000, 288.000000, 342.000000, 0.000000 +9940, -3.000000, 288.000000, 342.000000, 0.000000 +9941, -3.000000, 288.000000, 342.000000, 0.000000 +9942, -3.000000, 288.000000, 342.000000, 0.000000 +9943, -3.000000, 288.000000, 342.000000, 0.000000 +9944, -3.000000, 288.000000, 342.000000, 0.000000 +9945, -3.000000, 288.000000, 342.000000, 0.000000 +9946, -3.000000, 288.000000, 342.000000, 0.000000 +9947, -3.000000, 288.000000, 342.000000, 0.000000 +9948, -3.000000, 288.000000, 342.000000, 0.000000 +9949, -3.000000, 288.000000, 342.000000, 0.000000 +9950, -3.000000, 288.000000, 342.000000, 0.000000 +9951, -3.000000, 288.000000, 342.000000, 0.000000 +9952, -3.000000, 288.000000, 342.000000, 0.000000 +9953, -3.000000, 288.000000, 342.000000, 0.000000 +9954, -3.000000, 288.000000, 342.000000, 0.000000 +9955, -3.000000, 288.000000, 342.000000, 0.000000 +9956, -3.000000, 288.000000, 342.000000, 0.000000 +9957, -3.000000, 288.000000, 342.000000, 0.000000 +9958, -3.000000, 288.000000, 342.000000, 0.000000 +9959, -3.000000, 288.000000, 342.000000, 0.000000 +9960, -3.000000, 288.000000, 342.000000, 0.000000 +9961, -3.000000, 288.000000, 342.000000, 0.000000 +9962, -3.000000, 288.000000, 342.000000, 0.000000 +9963, -3.000000, 288.000000, 342.000000, 0.000000 +9964, -3.000000, 288.000000, 342.000000, 0.000000 +9965, -3.000000, 288.000000, 342.000000, 0.000000 +9966, -3.000000, 288.000000, 342.000000, 0.000000 +9967, -3.000000, 288.000000, 342.000000, 0.000000 +9968, -3.000000, 288.000000, 342.000000, 0.000000 +9969, -3.000000, 288.000000, 342.000000, 0.000000 +9970, -3.000000, 288.000000, 342.000000, 0.000000 +9971, -3.000000, 288.000000, 342.000000, 0.000000 +9972, -3.000000, 288.000000, 342.000000, 0.000000 +9973, -3.000000, 288.000000, 342.000000, 0.000000 +9974, -3.000000, 288.000000, 342.000000, 0.000000 +9975, -3.000000, 288.000000, 342.000000, 0.000000 +9976, -3.000000, 288.000000, 342.000000, 0.000000 +9977, -3.000000, 288.000000, 342.000000, 0.000000 +9978, -3.000000, 288.000000, 342.000000, 0.000000 +9979, -3.000000, 288.000000, 342.000000, 0.000000 +9980, -3.000000, 288.000000, 342.000000, 0.000000 +9981, -3.000000, 288.000000, 342.000000, 0.000000 +9982, -3.000000, 288.000000, 342.000000, 0.000000 +9983, -3.000000, 288.000000, 342.000000, 0.000000 +9984, -3.000000, 288.000000, 342.000000, 0.000000 +9985, -3.000000, 288.000000, 342.000000, 0.000000 +9986, -3.000000, 288.000000, 342.000000, 0.000000 +9987, -3.000000, 288.000000, 342.000000, 0.000000 +9988, -3.000000, 288.000000, 342.000000, 0.000000 +9989, -3.000000, 288.000000, 342.000000, 0.000000 +9990, -3.000000, 288.000000, 342.000000, 0.000000 +9991, -3.000000, 288.000000, 342.000000, 0.000000 +9992, -3.000000, 288.000000, 342.000000, 0.000000 +9993, -3.000000, 288.000000, 342.000000, 0.000000 +9994, -3.000000, 288.000000, 342.000000, 0.000000 +9995, -3.000000, 288.000000, 342.000000, 0.000000 +9996, -3.000000, 288.000000, 342.000000, 0.000000 +9997, -3.000000, 288.000000, 342.000000, 0.000000 +9998, -3.000000, 288.000000, 342.000000, 0.000000 +9999, -3.000000, 288.000000, 342.000000, 0.000000 +10000, -3.000000, 290.000000, 345.000000, 0.000000 +10001, -3.000000, 290.000000, 345.000000, 0.000000 +10002, -3.000000, 290.000000, 345.000000, 0.000000 +10003, -3.000000, 290.000000, 345.000000, 0.000000 +10004, -3.000000, 290.000000, 345.000000, 0.000000 +10005, -3.000000, 290.000000, 345.000000, 0.000000 +10006, -3.000000, 290.000000, 345.000000, 0.000000 +10007, -3.000000, 290.000000, 345.000000, 0.000000 +10008, -3.000000, 290.000000, 345.000000, 0.000000 +10009, -3.000000, 290.000000, 345.000000, 0.000000 +10010, -3.000000, 290.000000, 345.000000, 0.000000 +10011, -3.000000, 290.000000, 345.000000, 0.000000 +10012, -3.000000, 290.000000, 345.000000, 0.000000 +10013, -3.000000, 290.000000, 345.000000, 0.000000 +10014, -3.000000, 290.000000, 345.000000, 0.000000 +10015, -3.000000, 290.000000, 345.000000, 0.000000 +10016, -3.000000, 290.000000, 345.000000, 0.000000 +10017, -3.000000, 290.000000, 345.000000, 0.000000 +10018, -3.000000, 290.000000, 345.000000, 0.000000 +10019, -3.000000, 290.000000, 345.000000, 0.000000 +10020, -3.000000, 290.000000, 345.000000, 0.000000 +10021, -3.000000, 290.000000, 345.000000, 0.000000 +10022, -3.000000, 290.000000, 345.000000, 0.000000 +10023, -3.000000, 290.000000, 345.000000, 0.000000 +10024, -3.000000, 290.000000, 345.000000, 0.000000 +10025, -3.000000, 290.000000, 345.000000, 0.000000 +10026, -3.000000, 290.000000, 345.000000, 0.000000 +10027, -3.000000, 290.000000, 345.000000, 0.000000 +10028, -3.000000, 290.000000, 345.000000, 0.000000 +10029, -3.000000, 290.000000, 345.000000, 0.000000 +10030, -3.000000, 290.000000, 345.000000, 0.000000 +10031, -3.000000, 290.000000, 345.000000, 0.000000 +10032, -3.000000, 290.000000, 345.000000, 0.000000 +10033, -3.000000, 290.000000, 345.000000, 0.000000 +10034, -3.000000, 290.000000, 345.000000, 0.000000 +10035, -3.000000, 290.000000, 345.000000, 0.000000 +10036, -3.000000, 290.000000, 345.000000, 0.000000 +10037, -3.000000, 290.000000, 345.000000, 0.000000 +10038, -3.000000, 290.000000, 345.000000, 0.000000 +10039, -3.000000, 290.000000, 345.000000, 0.000000 +10040, -3.000000, 290.000000, 345.000000, 0.000000 +10041, -3.000000, 290.000000, 345.000000, 0.000000 +10042, -3.000000, 290.000000, 345.000000, 0.000000 +10043, -3.000000, 290.000000, 345.000000, 0.000000 +10044, -3.000000, 290.000000, 345.000000, 0.000000 +10045, -3.000000, 290.000000, 345.000000, 0.000000 +10046, -3.000000, 290.000000, 345.000000, 0.000000 +10047, -3.000000, 290.000000, 345.000000, 0.000000 +10048, -3.000000, 290.000000, 345.000000, 0.000000 +10049, -3.000000, 290.000000, 345.000000, 0.000000 +10050, -3.000000, 290.000000, 345.000000, 0.000000 +10051, -3.000000, 290.000000, 345.000000, 0.000000 +10052, -3.000000, 290.000000, 345.000000, 0.000000 +10053, -3.000000, 290.000000, 345.000000, 0.000000 +10054, -3.000000, 290.000000, 345.000000, 0.000000 +10055, -3.000000, 290.000000, 345.000000, 0.000000 +10056, -3.000000, 290.000000, 345.000000, 0.000000 +10057, -3.000000, 290.000000, 345.000000, 0.000000 +10058, -3.000000, 290.000000, 345.000000, 0.000000 +10059, -3.000000, 290.000000, 345.000000, 0.000000 +10060, -3.000000, 290.000000, 345.000000, 0.000000 +10061, -3.000000, 290.000000, 345.000000, 0.000000 +10062, -3.000000, 290.000000, 345.000000, 0.000000 +10063, -3.000000, 290.000000, 345.000000, 0.000000 +10064, -3.000000, 290.000000, 345.000000, 0.000000 +10065, -3.000000, 290.000000, 345.000000, 0.000000 +10066, -3.000000, 290.000000, 345.000000, 0.000000 +10067, -3.000000, 290.000000, 345.000000, 0.000000 +10068, -3.000000, 290.000000, 345.000000, 0.000000 +10069, -3.000000, 290.000000, 345.000000, 0.000000 +10070, -3.000000, 290.000000, 345.000000, 0.000000 +10071, -3.000000, 290.000000, 345.000000, 0.000000 +10072, -3.000000, 290.000000, 345.000000, 0.000000 +10073, -3.000000, 290.000000, 345.000000, 0.000000 +10074, -3.000000, 290.000000, 345.000000, 0.000000 +10075, -3.000000, 290.000000, 345.000000, 0.000000 +10076, -3.000000, 290.000000, 345.000000, 0.000000 +10077, -3.000000, 290.000000, 345.000000, 0.000000 +10078, -3.000000, 290.000000, 345.000000, 0.000000 +10079, -3.000000, 290.000000, 345.000000, 0.000000 +10080, -3.000000, 290.000000, 345.000000, 0.000000 +10081, -3.000000, 290.000000, 345.000000, 0.000000 +10082, -3.000000, 290.000000, 345.000000, 0.000000 +10083, -3.000000, 290.000000, 345.000000, 0.000000 +10084, -3.000000, 290.000000, 345.000000, 0.000000 +10085, -3.000000, 290.000000, 345.000000, 0.000000 +10086, -3.000000, 290.000000, 345.000000, 0.000000 +10087, -3.000000, 290.000000, 345.000000, 0.000000 +10088, -3.000000, 290.000000, 345.000000, 0.000000 +10089, -3.000000, 290.000000, 345.000000, 0.000000 +10090, -3.000000, 290.000000, 345.000000, 0.000000 +10091, -3.000000, 290.000000, 345.000000, 0.000000 +10092, -3.000000, 290.000000, 345.000000, 0.000000 +10093, -3.000000, 290.000000, 345.000000, 0.000000 +10094, -3.000000, 290.000000, 345.000000, 0.000000 +10095, -3.000000, 290.000000, 345.000000, 0.000000 +10096, -3.000000, 290.000000, 345.000000, 0.000000 +10097, -3.000000, 290.000000, 345.000000, 0.000000 +10098, -3.000000, 290.000000, 345.000000, 0.000000 +10099, -3.000000, 290.000000, 345.000000, 0.000000 +10100, -3.000000, 292.000000, 348.000000, 0.000000 +10101, -3.000000, 292.000000, 348.000000, 0.000000 +10102, -3.000000, 292.000000, 348.000000, 0.000000 +10103, -3.000000, 292.000000, 348.000000, 0.000000 +10104, -3.000000, 292.000000, 348.000000, 0.000000 +10105, -3.000000, 292.000000, 348.000000, 0.000000 +10106, -3.000000, 292.000000, 348.000000, 0.000000 +10107, -3.000000, 292.000000, 348.000000, 0.000000 +10108, -3.000000, 292.000000, 348.000000, 0.000000 +10109, -3.000000, 292.000000, 348.000000, 0.000000 +10110, -3.000000, 292.000000, 348.000000, 0.000000 +10111, -3.000000, 292.000000, 348.000000, 0.000000 +10112, -3.000000, 292.000000, 348.000000, 0.000000 +10113, -3.000000, 292.000000, 348.000000, 0.000000 +10114, -3.000000, 292.000000, 348.000000, 0.000000 +10115, -3.000000, 292.000000, 348.000000, 0.000000 +10116, -3.000000, 292.000000, 348.000000, 0.000000 +10117, -3.000000, 292.000000, 348.000000, 0.000000 +10118, -3.000000, 292.000000, 348.000000, 0.000000 +10119, -3.000000, 292.000000, 348.000000, 0.000000 +10120, -3.000000, 292.000000, 348.000000, 0.000000 +10121, -3.000000, 292.000000, 348.000000, 0.000000 +10122, -3.000000, 292.000000, 348.000000, 0.000000 +10123, -3.000000, 292.000000, 348.000000, 0.000000 +10124, -3.000000, 292.000000, 348.000000, 0.000000 +10125, -3.000000, 292.000000, 348.000000, 0.000000 +10126, -3.000000, 292.000000, 348.000000, 0.000000 +10127, -3.000000, 292.000000, 348.000000, 0.000000 +10128, -3.000000, 292.000000, 348.000000, 0.000000 +10129, -3.000000, 292.000000, 348.000000, 0.000000 +10130, -3.000000, 292.000000, 348.000000, 0.000000 +10131, -3.000000, 292.000000, 348.000000, 0.000000 +10132, -3.000000, 292.000000, 348.000000, 0.000000 +10133, -3.000000, 292.000000, 348.000000, 0.000000 +10134, -3.000000, 292.000000, 348.000000, 0.000000 +10135, -3.000000, 292.000000, 348.000000, 0.000000 +10136, -3.000000, 292.000000, 348.000000, 0.000000 +10137, -3.000000, 292.000000, 348.000000, 0.000000 +10138, -3.000000, 292.000000, 348.000000, 0.000000 +10139, -3.000000, 292.000000, 348.000000, 0.000000 +10140, -3.000000, 292.000000, 348.000000, 0.000000 +10141, -3.000000, 292.000000, 348.000000, 0.000000 +10142, -3.000000, 292.000000, 348.000000, 0.000000 +10143, -3.000000, 292.000000, 348.000000, 0.000000 +10144, -3.000000, 292.000000, 348.000000, 0.000000 +10145, -3.000000, 292.000000, 348.000000, 0.000000 +10146, -3.000000, 292.000000, 348.000000, 0.000000 +10147, -3.000000, 292.000000, 348.000000, 0.000000 +10148, -3.000000, 292.000000, 348.000000, 0.000000 +10149, -3.000000, 292.000000, 348.000000, 0.000000 +10150, -3.000000, 292.000000, 348.000000, 0.000000 +10151, -3.000000, 292.000000, 348.000000, 0.000000 +10152, -3.000000, 292.000000, 348.000000, 0.000000 +10153, -3.000000, 292.000000, 348.000000, 0.000000 +10154, -3.000000, 292.000000, 348.000000, 0.000000 +10155, -3.000000, 292.000000, 348.000000, 0.000000 +10156, -3.000000, 292.000000, 348.000000, 0.000000 +10157, -3.000000, 292.000000, 348.000000, 0.000000 +10158, -3.000000, 292.000000, 348.000000, 0.000000 +10159, -3.000000, 292.000000, 348.000000, 0.000000 +10160, -3.000000, 292.000000, 348.000000, 0.000000 +10161, -3.000000, 292.000000, 348.000000, 0.000000 +10162, -3.000000, 292.000000, 348.000000, 0.000000 +10163, -3.000000, 292.000000, 348.000000, 0.000000 +10164, -3.000000, 292.000000, 348.000000, 0.000000 +10165, -3.000000, 292.000000, 348.000000, 0.000000 +10166, -3.000000, 292.000000, 348.000000, 0.000000 +10167, -3.000000, 292.000000, 348.000000, 0.000000 +10168, -3.000000, 292.000000, 348.000000, 0.000000 +10169, -3.000000, 292.000000, 348.000000, 0.000000 +10170, -3.000000, 292.000000, 348.000000, 0.000000 +10171, -3.000000, 292.000000, 348.000000, 0.000000 +10172, -3.000000, 292.000000, 348.000000, 0.000000 +10173, -3.000000, 292.000000, 348.000000, 0.000000 +10174, -3.000000, 292.000000, 348.000000, 0.000000 +10175, -3.000000, 292.000000, 348.000000, 0.000000 +10176, -3.000000, 292.000000, 348.000000, 0.000000 +10177, -3.000000, 292.000000, 348.000000, 0.000000 +10178, -3.000000, 292.000000, 348.000000, 0.000000 +10179, -3.000000, 292.000000, 348.000000, 0.000000 +10180, -3.000000, 292.000000, 348.000000, 0.000000 +10181, -3.000000, 292.000000, 348.000000, 0.000000 +10182, -3.000000, 292.000000, 348.000000, 0.000000 +10183, -3.000000, 292.000000, 348.000000, 0.000000 +10184, -3.000000, 292.000000, 348.000000, 0.000000 +10185, -3.000000, 292.000000, 348.000000, 0.000000 +10186, -3.000000, 292.000000, 348.000000, 0.000000 +10187, -3.000000, 292.000000, 348.000000, 0.000000 +10188, -3.000000, 292.000000, 348.000000, 0.000000 +10189, -3.000000, 292.000000, 348.000000, 0.000000 +10190, -3.000000, 292.000000, 348.000000, 0.000000 +10191, -3.000000, 292.000000, 348.000000, 0.000000 +10192, -3.000000, 292.000000, 348.000000, 0.000000 +10193, -3.000000, 292.000000, 348.000000, 0.000000 +10194, -3.000000, 292.000000, 348.000000, 0.000000 +10195, -3.000000, 292.000000, 348.000000, 0.000000 +10196, -3.000000, 292.000000, 348.000000, 0.000000 +10197, -3.000000, 292.000000, 348.000000, 0.000000 +10198, -3.000000, 292.000000, 348.000000, 0.000000 +10199, -3.000000, 292.000000, 348.000000, 0.000000 +10200, -3.000000, 294.000000, 351.000000, 0.000000 +10201, -3.000000, 294.000000, 351.000000, 0.000000 +10202, -3.000000, 294.000000, 351.000000, 0.000000 +10203, -3.000000, 294.000000, 351.000000, 0.000000 +10204, -3.000000, 294.000000, 351.000000, 0.000000 +10205, -3.000000, 294.000000, 351.000000, 0.000000 +10206, -3.000000, 294.000000, 351.000000, 0.000000 +10207, -3.000000, 294.000000, 351.000000, 0.000000 +10208, -3.000000, 294.000000, 351.000000, 0.000000 +10209, -3.000000, 294.000000, 351.000000, 0.000000 +10210, -3.000000, 294.000000, 351.000000, 0.000000 +10211, -3.000000, 294.000000, 351.000000, 0.000000 +10212, -3.000000, 294.000000, 351.000000, 0.000000 +10213, -3.000000, 294.000000, 351.000000, 0.000000 +10214, -3.000000, 294.000000, 351.000000, 0.000000 +10215, -3.000000, 294.000000, 351.000000, 0.000000 +10216, -3.000000, 294.000000, 351.000000, 0.000000 +10217, -3.000000, 294.000000, 351.000000, 0.000000 +10218, -3.000000, 294.000000, 351.000000, 0.000000 +10219, -3.000000, 294.000000, 351.000000, 0.000000 +10220, -3.000000, 294.000000, 351.000000, 0.000000 +10221, -3.000000, 294.000000, 351.000000, 0.000000 +10222, -3.000000, 294.000000, 351.000000, 0.000000 +10223, -3.000000, 294.000000, 351.000000, 0.000000 +10224, -3.000000, 294.000000, 351.000000, 0.000000 +10225, -3.000000, 294.000000, 351.000000, 0.000000 +10226, -3.000000, 294.000000, 351.000000, 0.000000 +10227, -3.000000, 294.000000, 351.000000, 0.000000 +10228, -3.000000, 294.000000, 351.000000, 0.000000 +10229, -3.000000, 294.000000, 351.000000, 0.000000 +10230, -3.000000, 294.000000, 351.000000, 0.000000 +10231, -3.000000, 294.000000, 351.000000, 0.000000 +10232, -3.000000, 294.000000, 351.000000, 0.000000 +10233, -3.000000, 294.000000, 351.000000, 0.000000 +10234, -3.000000, 294.000000, 351.000000, 0.000000 +10235, -3.000000, 294.000000, 351.000000, 0.000000 +10236, -3.000000, 294.000000, 351.000000, 0.000000 +10237, -3.000000, 294.000000, 351.000000, 0.000000 +10238, -3.000000, 294.000000, 351.000000, 0.000000 +10239, -3.000000, 294.000000, 351.000000, 0.000000 +10240, -3.000000, 294.000000, 351.000000, 0.000000 +10241, -3.000000, 294.000000, 351.000000, 0.000000 +10242, -3.000000, 294.000000, 351.000000, 0.000000 +10243, -3.000000, 294.000000, 351.000000, 0.000000 +10244, -3.000000, 294.000000, 351.000000, 0.000000 +10245, -3.000000, 294.000000, 351.000000, 0.000000 +10246, -3.000000, 294.000000, 351.000000, 0.000000 +10247, -3.000000, 294.000000, 351.000000, 0.000000 +10248, -3.000000, 294.000000, 351.000000, 0.000000 +10249, -3.000000, 294.000000, 351.000000, 0.000000 +10250, -3.000000, 294.000000, 351.000000, 0.000000 +10251, -3.000000, 294.000000, 351.000000, 0.000000 +10252, -3.000000, 294.000000, 351.000000, 0.000000 +10253, -3.000000, 294.000000, 351.000000, 0.000000 +10254, -3.000000, 294.000000, 351.000000, 0.000000 +10255, -3.000000, 294.000000, 351.000000, 0.000000 +10256, -3.000000, 294.000000, 351.000000, 0.000000 +10257, -3.000000, 294.000000, 351.000000, 0.000000 +10258, -3.000000, 294.000000, 351.000000, 0.000000 +10259, -3.000000, 294.000000, 351.000000, 0.000000 +10260, -3.000000, 294.000000, 351.000000, 0.000000 +10261, -3.000000, 294.000000, 351.000000, 0.000000 +10262, -3.000000, 294.000000, 351.000000, 0.000000 +10263, -3.000000, 294.000000, 351.000000, 0.000000 +10264, -3.000000, 294.000000, 351.000000, 0.000000 +10265, -3.000000, 294.000000, 351.000000, 0.000000 +10266, -3.000000, 294.000000, 351.000000, 0.000000 +10267, -3.000000, 294.000000, 351.000000, 0.000000 +10268, -3.000000, 294.000000, 351.000000, 0.000000 +10269, -3.000000, 294.000000, 351.000000, 0.000000 +10270, -3.000000, 294.000000, 351.000000, 0.000000 +10271, -3.000000, 294.000000, 351.000000, 0.000000 +10272, -3.000000, 294.000000, 351.000000, 0.000000 +10273, -3.000000, 294.000000, 351.000000, 0.000000 +10274, -3.000000, 294.000000, 351.000000, 0.000000 +10275, -3.000000, 294.000000, 351.000000, 0.000000 +10276, -3.000000, 294.000000, 351.000000, 0.000000 +10277, -3.000000, 294.000000, 351.000000, 0.000000 +10278, -3.000000, 294.000000, 351.000000, 0.000000 +10279, -3.000000, 294.000000, 351.000000, 0.000000 +10280, -3.000000, 294.000000, 351.000000, 0.000000 +10281, -3.000000, 294.000000, 351.000000, 0.000000 +10282, -3.000000, 294.000000, 351.000000, 0.000000 +10283, -3.000000, 294.000000, 351.000000, 0.000000 +10284, -3.000000, 294.000000, 351.000000, 0.000000 +10285, -3.000000, 294.000000, 351.000000, 0.000000 +10286, -3.000000, 294.000000, 351.000000, 0.000000 +10287, -3.000000, 294.000000, 351.000000, 0.000000 +10288, -3.000000, 294.000000, 351.000000, 0.000000 +10289, -3.000000, 294.000000, 351.000000, 0.000000 +10290, -3.000000, 294.000000, 351.000000, 0.000000 +10291, -3.000000, 294.000000, 351.000000, 0.000000 +10292, -3.000000, 294.000000, 351.000000, 0.000000 +10293, -3.000000, 294.000000, 351.000000, 0.000000 +10294, -3.000000, 294.000000, 351.000000, 0.000000 +10295, -3.000000, 294.000000, 351.000000, 0.000000 +10296, -3.000000, 294.000000, 351.000000, 0.000000 +10297, -3.000000, 294.000000, 351.000000, 0.000000 +10298, -3.000000, 294.000000, 351.000000, 0.000000 +10299, -3.000000, 294.000000, 351.000000, 0.000000 +10300, -3.000000, 296.000000, 354.000000, 0.000000 +10301, -3.000000, 296.000000, 354.000000, 0.000000 +10302, -3.000000, 296.000000, 354.000000, 0.000000 +10303, -3.000000, 296.000000, 354.000000, 0.000000 +10304, -3.000000, 296.000000, 354.000000, 0.000000 +10305, -3.000000, 296.000000, 354.000000, 0.000000 +10306, -3.000000, 296.000000, 354.000000, 0.000000 +10307, -3.000000, 296.000000, 354.000000, 0.000000 +10308, -3.000000, 296.000000, 354.000000, 0.000000 +10309, -3.000000, 296.000000, 354.000000, 0.000000 +10310, -3.000000, 296.000000, 354.000000, 0.000000 +10311, -3.000000, 296.000000, 354.000000, 0.000000 +10312, -3.000000, 296.000000, 354.000000, 0.000000 +10313, -3.000000, 296.000000, 354.000000, 0.000000 +10314, -3.000000, 296.000000, 354.000000, 0.000000 +10315, -3.000000, 296.000000, 354.000000, 0.000000 +10316, -3.000000, 296.000000, 354.000000, 0.000000 +10317, -3.000000, 296.000000, 354.000000, 0.000000 +10318, -3.000000, 296.000000, 354.000000, 0.000000 +10319, -3.000000, 296.000000, 354.000000, 0.000000 +10320, -3.000000, 296.000000, 354.000000, 0.000000 +10321, -3.000000, 296.000000, 354.000000, 0.000000 +10322, -3.000000, 296.000000, 354.000000, 0.000000 +10323, -3.000000, 296.000000, 354.000000, 0.000000 +10324, -3.000000, 296.000000, 354.000000, 0.000000 +10325, -3.000000, 296.000000, 354.000000, 0.000000 +10326, -3.000000, 296.000000, 354.000000, 0.000000 +10327, -3.000000, 296.000000, 354.000000, 0.000000 +10328, -3.000000, 296.000000, 354.000000, 0.000000 +10329, -3.000000, 296.000000, 354.000000, 0.000000 +10330, -3.000000, 296.000000, 354.000000, 0.000000 +10331, -3.000000, 296.000000, 354.000000, 0.000000 +10332, -3.000000, 296.000000, 354.000000, 0.000000 +10333, -3.000000, 296.000000, 354.000000, 0.000000 +10334, -3.000000, 296.000000, 354.000000, 0.000000 +10335, -3.000000, 296.000000, 354.000000, 0.000000 +10336, -3.000000, 296.000000, 354.000000, 0.000000 +10337, -3.000000, 296.000000, 354.000000, 0.000000 +10338, -3.000000, 296.000000, 354.000000, 0.000000 +10339, -3.000000, 296.000000, 354.000000, 0.000000 +10340, -3.000000, 296.000000, 354.000000, 0.000000 +10341, -3.000000, 296.000000, 354.000000, 0.000000 +10342, -3.000000, 296.000000, 354.000000, 0.000000 +10343, -3.000000, 296.000000, 354.000000, 0.000000 +10344, -3.000000, 296.000000, 354.000000, 0.000000 +10345, -3.000000, 296.000000, 354.000000, 0.000000 +10346, -3.000000, 296.000000, 354.000000, 0.000000 +10347, -3.000000, 296.000000, 354.000000, 0.000000 +10348, -3.000000, 296.000000, 354.000000, 0.000000 +10349, -3.000000, 296.000000, 354.000000, 0.000000 +10350, -3.000000, 296.000000, 354.000000, 0.000000 +10351, -3.000000, 296.000000, 354.000000, 0.000000 +10352, -3.000000, 296.000000, 354.000000, 0.000000 +10353, -3.000000, 296.000000, 354.000000, 0.000000 +10354, -3.000000, 296.000000, 354.000000, 0.000000 +10355, -3.000000, 296.000000, 354.000000, 0.000000 +10356, -3.000000, 296.000000, 354.000000, 0.000000 +10357, -3.000000, 296.000000, 354.000000, 0.000000 +10358, -3.000000, 296.000000, 354.000000, 0.000000 +10359, -3.000000, 296.000000, 354.000000, 0.000000 +10360, -3.000000, 296.000000, 354.000000, 0.000000 +10361, -3.000000, 296.000000, 354.000000, 0.000000 +10362, -3.000000, 296.000000, 354.000000, 0.000000 +10363, -3.000000, 296.000000, 354.000000, 0.000000 +10364, -3.000000, 296.000000, 354.000000, 0.000000 +10365, -3.000000, 296.000000, 354.000000, 0.000000 +10366, -3.000000, 296.000000, 354.000000, 0.000000 +10367, -3.000000, 296.000000, 354.000000, 0.000000 +10368, -3.000000, 296.000000, 354.000000, 0.000000 +10369, -3.000000, 296.000000, 354.000000, 0.000000 +10370, -3.000000, 296.000000, 354.000000, 0.000000 +10371, -3.000000, 296.000000, 354.000000, 0.000000 +10372, -3.000000, 296.000000, 354.000000, 0.000000 +10373, -3.000000, 296.000000, 354.000000, 0.000000 +10374, -3.000000, 296.000000, 354.000000, 0.000000 +10375, -3.000000, 296.000000, 354.000000, 0.000000 +10376, -3.000000, 296.000000, 354.000000, 0.000000 +10377, -3.000000, 296.000000, 354.000000, 0.000000 +10378, -3.000000, 296.000000, 354.000000, 0.000000 +10379, -3.000000, 296.000000, 354.000000, 0.000000 +10380, -3.000000, 296.000000, 354.000000, 0.000000 +10381, -3.000000, 296.000000, 354.000000, 0.000000 +10382, -3.000000, 296.000000, 354.000000, 0.000000 +10383, -3.000000, 296.000000, 354.000000, 0.000000 +10384, -3.000000, 296.000000, 354.000000, 0.000000 +10385, -3.000000, 296.000000, 354.000000, 0.000000 +10386, -3.000000, 296.000000, 354.000000, 0.000000 +10387, -3.000000, 296.000000, 354.000000, 0.000000 +10388, -3.000000, 296.000000, 354.000000, 0.000000 +10389, -3.000000, 296.000000, 354.000000, 0.000000 +10390, -3.000000, 296.000000, 354.000000, 0.000000 +10391, -3.000000, 296.000000, 354.000000, 0.000000 +10392, -3.000000, 296.000000, 354.000000, 0.000000 +10393, -3.000000, 296.000000, 354.000000, 0.000000 +10394, -3.000000, 296.000000, 354.000000, 0.000000 +10395, -3.000000, 296.000000, 354.000000, 0.000000 +10396, -3.000000, 296.000000, 354.000000, 0.000000 +10397, -3.000000, 296.000000, 354.000000, 0.000000 +10398, -3.000000, 296.000000, 354.000000, 0.000000 +10399, -3.000000, 296.000000, 354.000000, 0.000000 +10400, -3.000000, 298.000000, 357.000000, 0.000000 +10401, -3.000000, 298.000000, 357.000000, 0.000000 +10402, -3.000000, 298.000000, 357.000000, 0.000000 +10403, -3.000000, 298.000000, 357.000000, 0.000000 +10404, -3.000000, 298.000000, 357.000000, 0.000000 +10405, -3.000000, 298.000000, 357.000000, 0.000000 +10406, -3.000000, 298.000000, 357.000000, 0.000000 +10407, -3.000000, 298.000000, 357.000000, 0.000000 +10408, -3.000000, 298.000000, 357.000000, 0.000000 +10409, -3.000000, 298.000000, 357.000000, 0.000000 +10410, -3.000000, 298.000000, 357.000000, 0.000000 +10411, -3.000000, 298.000000, 357.000000, 0.000000 +10412, -3.000000, 298.000000, 357.000000, 0.000000 +10413, -3.000000, 298.000000, 357.000000, 0.000000 +10414, -3.000000, 298.000000, 357.000000, 0.000000 +10415, -3.000000, 298.000000, 357.000000, 0.000000 +10416, -3.000000, 298.000000, 357.000000, 0.000000 +10417, -3.000000, 298.000000, 357.000000, 0.000000 +10418, -3.000000, 298.000000, 357.000000, 0.000000 +10419, -3.000000, 298.000000, 357.000000, 0.000000 +10420, -3.000000, 298.000000, 357.000000, 0.000000 +10421, -3.000000, 298.000000, 357.000000, 0.000000 +10422, -3.000000, 298.000000, 357.000000, 0.000000 +10423, -3.000000, 298.000000, 357.000000, 0.000000 +10424, -3.000000, 298.000000, 357.000000, 0.000000 +10425, -3.000000, 298.000000, 357.000000, 0.000000 +10426, -3.000000, 298.000000, 357.000000, 0.000000 +10427, -3.000000, 298.000000, 357.000000, 0.000000 +10428, -3.000000, 298.000000, 357.000000, 0.000000 +10429, -3.000000, 298.000000, 357.000000, 0.000000 +10430, -3.000000, 298.000000, 357.000000, 0.000000 +10431, -3.000000, 298.000000, 357.000000, 0.000000 +10432, -3.000000, 298.000000, 357.000000, 0.000000 +10433, -3.000000, 298.000000, 357.000000, 0.000000 +10434, -3.000000, 298.000000, 357.000000, 0.000000 +10435, -3.000000, 298.000000, 357.000000, 0.000000 +10436, -3.000000, 298.000000, 357.000000, 0.000000 +10437, -3.000000, 298.000000, 357.000000, 0.000000 +10438, -3.000000, 298.000000, 357.000000, 0.000000 +10439, -3.000000, 298.000000, 357.000000, 0.000000 +10440, -3.000000, 298.000000, 357.000000, 0.000000 +10441, -3.000000, 298.000000, 357.000000, 0.000000 +10442, -3.000000, 298.000000, 357.000000, 0.000000 +10443, -3.000000, 298.000000, 357.000000, 0.000000 +10444, -3.000000, 298.000000, 357.000000, 0.000000 +10445, -3.000000, 298.000000, 357.000000, 0.000000 +10446, -3.000000, 298.000000, 357.000000, 0.000000 +10447, -3.000000, 298.000000, 357.000000, 0.000000 +10448, -3.000000, 298.000000, 357.000000, 0.000000 +10449, -3.000000, 298.000000, 357.000000, 0.000000 +10450, -3.000000, 298.000000, 357.000000, 0.000000 +10451, -3.000000, 298.000000, 357.000000, 0.000000 +10452, -3.000000, 298.000000, 357.000000, 0.000000 +10453, -3.000000, 298.000000, 357.000000, 0.000000 +10454, -3.000000, 298.000000, 357.000000, 0.000000 +10455, -3.000000, 298.000000, 357.000000, 0.000000 +10456, -3.000000, 298.000000, 357.000000, 0.000000 +10457, -3.000000, 298.000000, 357.000000, 0.000000 +10458, -3.000000, 298.000000, 357.000000, 0.000000 +10459, -3.000000, 298.000000, 357.000000, 0.000000 +10460, -3.000000, 298.000000, 357.000000, 0.000000 +10461, -3.000000, 298.000000, 357.000000, 0.000000 +10462, -3.000000, 298.000000, 357.000000, 0.000000 +10463, -3.000000, 298.000000, 357.000000, 0.000000 +10464, -3.000000, 298.000000, 357.000000, 0.000000 +10465, -3.000000, 298.000000, 357.000000, 0.000000 +10466, -3.000000, 298.000000, 357.000000, 0.000000 +10467, -3.000000, 298.000000, 357.000000, 0.000000 +10468, -3.000000, 298.000000, 357.000000, 0.000000 +10469, -3.000000, 298.000000, 357.000000, 0.000000 +10470, -3.000000, 298.000000, 357.000000, 0.000000 +10471, -3.000000, 298.000000, 357.000000, 0.000000 +10472, -3.000000, 298.000000, 357.000000, 0.000000 +10473, -3.000000, 298.000000, 357.000000, 0.000000 +10474, -3.000000, 298.000000, 357.000000, 0.000000 +10475, -3.000000, 298.000000, 357.000000, 0.000000 +10476, -3.000000, 298.000000, 357.000000, 0.000000 +10477, -3.000000, 298.000000, 357.000000, 0.000000 +10478, -3.000000, 298.000000, 357.000000, 0.000000 +10479, -3.000000, 298.000000, 357.000000, 0.000000 +10480, -3.000000, 298.000000, 357.000000, 0.000000 +10481, -3.000000, 298.000000, 357.000000, 0.000000 +10482, -3.000000, 298.000000, 357.000000, 0.000000 +10483, -3.000000, 298.000000, 357.000000, 0.000000 +10484, -3.000000, 298.000000, 357.000000, 0.000000 +10485, -3.000000, 298.000000, 357.000000, 0.000000 +10486, -3.000000, 298.000000, 357.000000, 0.000000 +10487, -3.000000, 298.000000, 357.000000, 0.000000 +10488, -3.000000, 298.000000, 357.000000, 0.000000 +10489, -3.000000, 298.000000, 357.000000, 0.000000 +10490, -3.000000, 298.000000, 357.000000, 0.000000 +10491, -3.000000, 298.000000, 357.000000, 0.000000 +10492, -3.000000, 298.000000, 357.000000, 0.000000 +10493, -3.000000, 298.000000, 357.000000, 0.000000 +10494, -3.000000, 298.000000, 357.000000, 0.000000 +10495, -3.000000, 298.000000, 357.000000, 0.000000 +10496, -3.000000, 298.000000, 357.000000, 0.000000 +10497, -3.000000, 298.000000, 357.000000, 0.000000 +10498, -3.000000, 298.000000, 357.000000, 0.000000 +10499, -3.000000, 298.000000, 357.000000, 0.000000 +10500, -3.000000, 300.000000, 360.000000, 0.000000 +10501, -3.000000, 300.000000, 360.000000, 0.000000 +10502, -3.000000, 300.000000, 360.000000, 0.000000 +10503, -3.000000, 300.000000, 360.000000, 0.000000 +10504, -3.000000, 300.000000, 360.000000, 0.000000 +10505, -3.000000, 300.000000, 360.000000, 0.000000 +10506, -3.000000, 300.000000, 360.000000, 0.000000 +10507, -3.000000, 300.000000, 360.000000, 0.000000 +10508, -3.000000, 300.000000, 360.000000, 0.000000 +10509, -3.000000, 300.000000, 360.000000, 0.000000 +10510, -3.000000, 300.000000, 360.000000, 0.000000 +10511, -3.000000, 300.000000, 360.000000, 0.000000 +10512, -3.000000, 300.000000, 360.000000, 0.000000 +10513, -3.000000, 300.000000, 360.000000, 0.000000 +10514, -3.000000, 300.000000, 360.000000, 0.000000 +10515, -3.000000, 300.000000, 360.000000, 0.000000 +10516, -3.000000, 300.000000, 360.000000, 0.000000 +10517, -3.000000, 300.000000, 360.000000, 0.000000 +10518, -3.000000, 300.000000, 360.000000, 0.000000 +10519, -3.000000, 300.000000, 360.000000, 0.000000 +10520, -3.000000, 300.000000, 360.000000, 0.000000 +10521, -3.000000, 300.000000, 360.000000, 0.000000 +10522, -3.000000, 300.000000, 360.000000, 0.000000 +10523, -3.000000, 300.000000, 360.000000, 0.000000 +10524, -3.000000, 300.000000, 360.000000, 0.000000 +10525, -3.000000, 300.000000, 360.000000, 0.000000 +10526, -3.000000, 300.000000, 360.000000, 0.000000 +10527, -3.000000, 300.000000, 360.000000, 0.000000 +10528, -3.000000, 300.000000, 360.000000, 0.000000 +10529, -3.000000, 300.000000, 360.000000, 0.000000 +10530, -3.000000, 300.000000, 360.000000, 0.000000 +10531, -3.000000, 300.000000, 360.000000, 0.000000 +10532, -3.000000, 300.000000, 360.000000, 0.000000 +10533, -3.000000, 300.000000, 360.000000, 0.000000 +10534, -3.000000, 300.000000, 360.000000, 0.000000 +10535, -3.000000, 300.000000, 360.000000, 0.000000 +10536, -3.000000, 300.000000, 360.000000, 0.000000 +10537, -3.000000, 300.000000, 360.000000, 0.000000 +10538, -3.000000, 300.000000, 360.000000, 0.000000 +10539, -3.000000, 300.000000, 360.000000, 0.000000 +10540, -3.000000, 300.000000, 360.000000, 0.000000 +10541, -3.000000, 300.000000, 360.000000, 0.000000 +10542, -3.000000, 300.000000, 360.000000, 0.000000 +10543, -3.000000, 300.000000, 360.000000, 0.000000 +10544, -3.000000, 300.000000, 360.000000, 0.000000 +10545, -3.000000, 300.000000, 360.000000, 0.000000 +10546, -3.000000, 300.000000, 360.000000, 0.000000 +10547, -3.000000, 300.000000, 360.000000, 0.000000 +10548, -3.000000, 300.000000, 360.000000, 0.000000 +10549, -3.000000, 300.000000, 360.000000, 0.000000 +10550, -3.000000, 300.000000, 360.000000, 0.000000 +10551, -3.000000, 300.000000, 360.000000, 0.000000 +10552, -3.000000, 300.000000, 360.000000, 0.000000 +10553, -3.000000, 300.000000, 360.000000, 0.000000 +10554, -3.000000, 300.000000, 360.000000, 0.000000 +10555, -3.000000, 300.000000, 360.000000, 0.000000 +10556, -3.000000, 300.000000, 360.000000, 0.000000 +10557, -3.000000, 300.000000, 360.000000, 0.000000 +10558, -3.000000, 300.000000, 360.000000, 0.000000 +10559, -3.000000, 300.000000, 360.000000, 0.000000 +10560, -3.000000, 300.000000, 360.000000, 0.000000 +10561, -3.000000, 300.000000, 360.000000, 0.000000 +10562, -3.000000, 300.000000, 360.000000, 0.000000 +10563, -3.000000, 300.000000, 360.000000, 0.000000 +10564, -3.000000, 300.000000, 360.000000, 0.000000 +10565, -3.000000, 300.000000, 360.000000, 0.000000 +10566, -3.000000, 300.000000, 360.000000, 0.000000 +10567, -3.000000, 300.000000, 360.000000, 0.000000 +10568, -3.000000, 300.000000, 360.000000, 0.000000 +10569, -3.000000, 300.000000, 360.000000, 0.000000 +10570, -3.000000, 300.000000, 360.000000, 0.000000 +10571, -3.000000, 300.000000, 360.000000, 0.000000 +10572, -3.000000, 300.000000, 360.000000, 0.000000 +10573, -3.000000, 300.000000, 360.000000, 0.000000 +10574, -3.000000, 300.000000, 360.000000, 0.000000 +10575, -3.000000, 300.000000, 360.000000, 0.000000 +10576, -3.000000, 300.000000, 360.000000, 0.000000 +10577, -3.000000, 300.000000, 360.000000, 0.000000 +10578, -3.000000, 300.000000, 360.000000, 0.000000 +10579, -3.000000, 300.000000, 360.000000, 0.000000 +10580, -3.000000, 300.000000, 360.000000, 0.000000 +10581, -3.000000, 300.000000, 360.000000, 0.000000 +10582, -3.000000, 300.000000, 360.000000, 0.000000 +10583, -3.000000, 300.000000, 360.000000, 0.000000 +10584, -3.000000, 300.000000, 360.000000, 0.000000 +10585, -3.000000, 300.000000, 360.000000, 0.000000 +10586, -3.000000, 300.000000, 360.000000, 0.000000 +10587, -3.000000, 300.000000, 360.000000, 0.000000 +10588, -3.000000, 300.000000, 360.000000, 0.000000 +10589, -3.000000, 300.000000, 360.000000, 0.000000 +10590, -3.000000, 300.000000, 360.000000, 0.000000 +10591, -3.000000, 300.000000, 360.000000, 0.000000 +10592, -3.000000, 300.000000, 360.000000, 0.000000 +10593, -3.000000, 300.000000, 360.000000, 0.000000 +10594, -3.000000, 300.000000, 360.000000, 0.000000 +10595, -3.000000, 300.000000, 360.000000, 0.000000 +10596, -3.000000, 300.000000, 360.000000, 0.000000 +10597, -3.000000, 300.000000, 360.000000, 0.000000 +10598, -3.000000, 300.000000, 360.000000, 0.000000 +10599, -3.000000, 300.000000, 360.000000, 0.000000 +10600, -3.000000, 302.000000, 363.000000, 0.000000 +10601, -3.000000, 302.000000, 363.000000, 0.000000 +10602, -3.000000, 302.000000, 363.000000, 0.000000 +10603, -3.000000, 302.000000, 363.000000, 0.000000 +10604, -3.000000, 302.000000, 363.000000, 0.000000 +10605, -3.000000, 302.000000, 363.000000, 0.000000 +10606, -3.000000, 302.000000, 363.000000, 0.000000 +10607, -3.000000, 302.000000, 363.000000, 0.000000 +10608, -3.000000, 302.000000, 363.000000, 0.000000 +10609, -3.000000, 302.000000, 363.000000, 0.000000 +10610, -3.000000, 302.000000, 363.000000, 0.000000 +10611, -3.000000, 302.000000, 363.000000, 0.000000 +10612, -3.000000, 302.000000, 363.000000, 0.000000 +10613, -3.000000, 302.000000, 363.000000, 0.000000 +10614, -3.000000, 302.000000, 363.000000, 0.000000 +10615, -3.000000, 302.000000, 363.000000, 0.000000 +10616, -3.000000, 302.000000, 363.000000, 0.000000 +10617, -3.000000, 302.000000, 363.000000, 0.000000 +10618, -3.000000, 302.000000, 363.000000, 0.000000 +10619, -3.000000, 302.000000, 363.000000, 0.000000 +10620, -3.000000, 302.000000, 363.000000, 0.000000 +10621, -3.000000, 302.000000, 363.000000, 0.000000 +10622, -3.000000, 302.000000, 363.000000, 0.000000 +10623, -3.000000, 302.000000, 363.000000, 0.000000 +10624, -3.000000, 302.000000, 363.000000, 0.000000 +10625, -3.000000, 302.000000, 363.000000, 0.000000 +10626, -3.000000, 302.000000, 363.000000, 0.000000 +10627, -3.000000, 302.000000, 363.000000, 0.000000 +10628, -3.000000, 302.000000, 363.000000, 0.000000 +10629, -3.000000, 302.000000, 363.000000, 0.000000 +10630, -3.000000, 302.000000, 363.000000, 0.000000 +10631, -3.000000, 302.000000, 363.000000, 0.000000 +10632, -3.000000, 302.000000, 363.000000, 0.000000 +10633, -3.000000, 302.000000, 363.000000, 0.000000 +10634, -3.000000, 302.000000, 363.000000, 0.000000 +10635, -3.000000, 302.000000, 363.000000, 0.000000 +10636, -3.000000, 302.000000, 363.000000, 0.000000 +10637, -3.000000, 302.000000, 363.000000, 0.000000 +10638, -3.000000, 302.000000, 363.000000, 0.000000 +10639, -3.000000, 302.000000, 363.000000, 0.000000 +10640, -3.000000, 302.000000, 363.000000, 0.000000 +10641, -3.000000, 302.000000, 363.000000, 0.000000 +10642, -3.000000, 302.000000, 363.000000, 0.000000 +10643, -3.000000, 302.000000, 363.000000, 0.000000 +10644, -3.000000, 302.000000, 363.000000, 0.000000 +10645, -3.000000, 302.000000, 363.000000, 0.000000 +10646, -3.000000, 302.000000, 363.000000, 0.000000 +10647, -3.000000, 302.000000, 363.000000, 0.000000 +10648, -3.000000, 302.000000, 363.000000, 0.000000 +10649, -3.000000, 302.000000, 363.000000, 0.000000 +10650, -3.000000, 302.000000, 363.000000, 0.000000 +10651, -3.000000, 302.000000, 363.000000, 0.000000 +10652, -3.000000, 302.000000, 363.000000, 0.000000 +10653, -3.000000, 302.000000, 363.000000, 0.000000 +10654, -3.000000, 302.000000, 363.000000, 0.000000 +10655, -3.000000, 302.000000, 363.000000, 0.000000 +10656, -3.000000, 302.000000, 363.000000, 0.000000 +10657, -3.000000, 302.000000, 363.000000, 0.000000 +10658, -3.000000, 302.000000, 363.000000, 0.000000 +10659, -3.000000, 302.000000, 363.000000, 0.000000 +10660, -3.000000, 302.000000, 363.000000, 0.000000 +10661, -3.000000, 302.000000, 363.000000, 0.000000 +10662, -3.000000, 302.000000, 363.000000, 0.000000 +10663, -3.000000, 302.000000, 363.000000, 0.000000 +10664, -3.000000, 302.000000, 363.000000, 0.000000 +10665, -3.000000, 302.000000, 363.000000, 0.000000 +10666, -3.000000, 302.000000, 363.000000, 0.000000 +10667, -3.000000, 302.000000, 363.000000, 0.000000 +10668, -3.000000, 302.000000, 363.000000, 0.000000 +10669, -3.000000, 302.000000, 363.000000, 0.000000 +10670, -3.000000, 302.000000, 363.000000, 0.000000 +10671, -3.000000, 302.000000, 363.000000, 0.000000 +10672, -3.000000, 302.000000, 363.000000, 0.000000 +10673, -3.000000, 302.000000, 363.000000, 0.000000 +10674, -3.000000, 302.000000, 363.000000, 0.000000 +10675, -3.000000, 302.000000, 363.000000, 0.000000 +10676, -3.000000, 302.000000, 363.000000, 0.000000 +10677, -3.000000, 302.000000, 363.000000, 0.000000 +10678, -3.000000, 302.000000, 363.000000, 0.000000 +10679, -3.000000, 302.000000, 363.000000, 0.000000 +10680, -3.000000, 302.000000, 363.000000, 0.000000 +10681, -3.000000, 302.000000, 363.000000, 0.000000 +10682, -3.000000, 302.000000, 363.000000, 0.000000 +10683, -3.000000, 302.000000, 363.000000, 0.000000 +10684, -3.000000, 302.000000, 363.000000, 0.000000 +10685, -3.000000, 302.000000, 363.000000, 0.000000 +10686, -3.000000, 302.000000, 363.000000, 0.000000 +10687, -3.000000, 302.000000, 363.000000, 0.000000 +10688, -3.000000, 302.000000, 363.000000, 0.000000 +10689, -3.000000, 302.000000, 363.000000, 0.000000 +10690, -3.000000, 302.000000, 363.000000, 0.000000 +10691, -3.000000, 302.000000, 363.000000, 0.000000 +10692, -3.000000, 302.000000, 363.000000, 0.000000 +10693, -3.000000, 302.000000, 363.000000, 0.000000 +10694, -3.000000, 302.000000, 363.000000, 0.000000 +10695, -3.000000, 302.000000, 363.000000, 0.000000 +10696, -3.000000, 302.000000, 363.000000, 0.000000 +10697, -3.000000, 302.000000, 363.000000, 0.000000 +10698, -3.000000, 302.000000, 363.000000, 0.000000 +10699, -3.000000, 302.000000, 363.000000, 0.000000 +10700, -3.000000, 304.000000, 366.000000, 0.000000 +10701, -3.000000, 304.000000, 366.000000, 0.000000 +10702, -3.000000, 304.000000, 366.000000, 0.000000 +10703, -3.000000, 304.000000, 366.000000, 0.000000 +10704, -3.000000, 304.000000, 366.000000, 0.000000 +10705, -3.000000, 304.000000, 366.000000, 0.000000 +10706, -3.000000, 304.000000, 366.000000, 0.000000 +10707, -3.000000, 304.000000, 366.000000, 0.000000 +10708, -3.000000, 304.000000, 366.000000, 0.000000 +10709, -3.000000, 304.000000, 366.000000, 0.000000 +10710, -3.000000, 304.000000, 366.000000, 0.000000 +10711, -3.000000, 304.000000, 366.000000, 0.000000 +10712, -3.000000, 304.000000, 366.000000, 0.000000 +10713, -3.000000, 304.000000, 366.000000, 0.000000 +10714, -3.000000, 304.000000, 366.000000, 0.000000 +10715, -3.000000, 304.000000, 366.000000, 0.000000 +10716, -3.000000, 304.000000, 366.000000, 0.000000 +10717, -3.000000, 304.000000, 366.000000, 0.000000 +10718, -3.000000, 304.000000, 366.000000, 0.000000 +10719, -3.000000, 304.000000, 366.000000, 0.000000 +10720, -3.000000, 304.000000, 366.000000, 0.000000 +10721, -3.000000, 304.000000, 366.000000, 0.000000 +10722, -3.000000, 304.000000, 366.000000, 0.000000 +10723, -3.000000, 304.000000, 366.000000, 0.000000 +10724, -3.000000, 304.000000, 366.000000, 0.000000 +10725, -3.000000, 304.000000, 366.000000, 0.000000 +10726, -3.000000, 304.000000, 366.000000, 0.000000 +10727, -3.000000, 304.000000, 366.000000, 0.000000 +10728, -3.000000, 304.000000, 366.000000, 0.000000 +10729, -3.000000, 304.000000, 366.000000, 0.000000 +10730, -3.000000, 304.000000, 366.000000, 0.000000 +10731, -3.000000, 304.000000, 366.000000, 0.000000 +10732, -3.000000, 304.000000, 366.000000, 0.000000 +10733, -3.000000, 304.000000, 366.000000, 0.000000 +10734, -3.000000, 304.000000, 366.000000, 0.000000 +10735, -3.000000, 304.000000, 366.000000, 0.000000 +10736, -3.000000, 304.000000, 366.000000, 0.000000 +10737, -3.000000, 304.000000, 366.000000, 0.000000 +10738, -3.000000, 304.000000, 366.000000, 0.000000 +10739, -3.000000, 304.000000, 366.000000, 0.000000 +10740, -3.000000, 304.000000, 366.000000, 0.000000 +10741, -3.000000, 304.000000, 366.000000, 0.000000 +10742, -3.000000, 304.000000, 366.000000, 0.000000 +10743, -3.000000, 304.000000, 366.000000, 0.000000 +10744, -3.000000, 304.000000, 366.000000, 0.000000 +10745, -3.000000, 304.000000, 366.000000, 0.000000 +10746, -3.000000, 304.000000, 366.000000, 0.000000 +10747, -3.000000, 304.000000, 366.000000, 0.000000 +10748, -3.000000, 304.000000, 366.000000, 0.000000 +10749, -3.000000, 304.000000, 366.000000, 0.000000 +10750, -3.000000, 304.000000, 366.000000, 0.000000 +10751, -3.000000, 304.000000, 366.000000, 0.000000 +10752, -3.000000, 304.000000, 366.000000, 0.000000 +10753, -3.000000, 304.000000, 366.000000, 0.000000 +10754, -3.000000, 304.000000, 366.000000, 0.000000 +10755, -3.000000, 304.000000, 366.000000, 0.000000 +10756, -3.000000, 304.000000, 366.000000, 0.000000 +10757, -3.000000, 304.000000, 366.000000, 0.000000 +10758, -3.000000, 304.000000, 366.000000, 0.000000 +10759, -3.000000, 304.000000, 366.000000, 0.000000 +10760, -3.000000, 304.000000, 366.000000, 0.000000 +10761, -3.000000, 304.000000, 366.000000, 0.000000 +10762, -3.000000, 304.000000, 366.000000, 0.000000 +10763, -3.000000, 304.000000, 366.000000, 0.000000 +10764, -3.000000, 304.000000, 366.000000, 0.000000 +10765, -3.000000, 304.000000, 366.000000, 0.000000 +10766, -3.000000, 304.000000, 366.000000, 0.000000 +10767, -3.000000, 304.000000, 366.000000, 0.000000 +10768, -3.000000, 304.000000, 366.000000, 0.000000 +10769, -3.000000, 304.000000, 366.000000, 0.000000 +10770, -3.000000, 304.000000, 366.000000, 0.000000 +10771, -3.000000, 304.000000, 366.000000, 0.000000 +10772, -3.000000, 304.000000, 366.000000, 0.000000 +10773, -3.000000, 304.000000, 366.000000, 0.000000 +10774, -3.000000, 304.000000, 366.000000, 0.000000 +10775, -3.000000, 304.000000, 366.000000, 0.000000 +10776, -3.000000, 304.000000, 366.000000, 0.000000 +10777, -3.000000, 304.000000, 366.000000, 0.000000 +10778, -3.000000, 304.000000, 366.000000, 0.000000 +10779, -3.000000, 304.000000, 366.000000, 0.000000 +10780, -3.000000, 304.000000, 366.000000, 0.000000 +10781, -3.000000, 304.000000, 366.000000, 0.000000 +10782, -3.000000, 304.000000, 366.000000, 0.000000 +10783, -3.000000, 304.000000, 366.000000, 0.000000 +10784, -3.000000, 304.000000, 366.000000, 0.000000 +10785, -3.000000, 304.000000, 366.000000, 0.000000 +10786, -3.000000, 304.000000, 366.000000, 0.000000 +10787, -3.000000, 304.000000, 366.000000, 0.000000 +10788, -3.000000, 304.000000, 366.000000, 0.000000 +10789, -3.000000, 304.000000, 366.000000, 0.000000 +10790, -3.000000, 304.000000, 366.000000, 0.000000 +10791, -3.000000, 304.000000, 366.000000, 0.000000 +10792, -3.000000, 304.000000, 366.000000, 0.000000 +10793, -3.000000, 304.000000, 366.000000, 0.000000 +10794, -3.000000, 304.000000, 366.000000, 0.000000 +10795, -3.000000, 304.000000, 366.000000, 0.000000 +10796, -3.000000, 304.000000, 366.000000, 0.000000 +10797, -3.000000, 304.000000, 366.000000, 0.000000 +10798, -3.000000, 304.000000, 366.000000, 0.000000 +10799, -3.000000, 304.000000, 366.000000, 0.000000 +10800, -3.000000, 306.000000, 369.000000, 0.000000 +10801, -3.000000, 306.000000, 369.000000, 0.000000 +10802, -3.000000, 306.000000, 369.000000, 0.000000 +10803, -3.000000, 306.000000, 369.000000, 0.000000 +10804, -3.000000, 306.000000, 369.000000, 0.000000 +10805, -3.000000, 306.000000, 369.000000, 0.000000 +10806, -3.000000, 306.000000, 369.000000, 0.000000 +10807, -3.000000, 306.000000, 369.000000, 0.000000 +10808, -3.000000, 306.000000, 369.000000, 0.000000 +10809, -3.000000, 306.000000, 369.000000, 0.000000 +10810, -3.000000, 306.000000, 369.000000, 0.000000 +10811, -3.000000, 306.000000, 369.000000, 0.000000 +10812, -3.000000, 306.000000, 369.000000, 0.000000 +10813, -3.000000, 306.000000, 369.000000, 0.000000 +10814, -3.000000, 306.000000, 369.000000, 0.000000 +10815, -3.000000, 306.000000, 369.000000, 0.000000 +10816, -3.000000, 306.000000, 369.000000, 0.000000 +10817, -3.000000, 306.000000, 369.000000, 0.000000 +10818, -3.000000, 306.000000, 369.000000, 0.000000 +10819, -3.000000, 306.000000, 369.000000, 0.000000 +10820, -3.000000, 306.000000, 369.000000, 0.000000 +10821, -3.000000, 306.000000, 369.000000, 0.000000 +10822, -3.000000, 306.000000, 369.000000, 0.000000 +10823, -3.000000, 306.000000, 369.000000, 0.000000 +10824, -3.000000, 306.000000, 369.000000, 0.000000 +10825, -3.000000, 306.000000, 369.000000, 0.000000 +10826, -3.000000, 306.000000, 369.000000, 0.000000 +10827, -3.000000, 306.000000, 369.000000, 0.000000 +10828, -3.000000, 306.000000, 369.000000, 0.000000 +10829, -3.000000, 306.000000, 369.000000, 0.000000 +10830, -3.000000, 306.000000, 369.000000, 0.000000 +10831, -3.000000, 306.000000, 369.000000, 0.000000 +10832, -3.000000, 306.000000, 369.000000, 0.000000 +10833, -3.000000, 306.000000, 369.000000, 0.000000 +10834, -3.000000, 306.000000, 369.000000, 0.000000 +10835, -3.000000, 306.000000, 369.000000, 0.000000 +10836, -3.000000, 306.000000, 369.000000, 0.000000 +10837, -3.000000, 306.000000, 369.000000, 0.000000 +10838, -3.000000, 306.000000, 369.000000, 0.000000 +10839, -3.000000, 306.000000, 369.000000, 0.000000 +10840, -3.000000, 306.000000, 369.000000, 0.000000 +10841, -3.000000, 306.000000, 369.000000, 0.000000 +10842, -3.000000, 306.000000, 369.000000, 0.000000 +10843, -3.000000, 306.000000, 369.000000, 0.000000 +10844, -3.000000, 306.000000, 369.000000, 0.000000 +10845, -3.000000, 306.000000, 369.000000, 0.000000 +10846, -3.000000, 306.000000, 369.000000, 0.000000 +10847, -3.000000, 306.000000, 369.000000, 0.000000 +10848, -3.000000, 306.000000, 369.000000, 0.000000 +10849, -3.000000, 306.000000, 369.000000, 0.000000 +10850, -3.000000, 306.000000, 369.000000, 0.000000 +10851, -3.000000, 306.000000, 369.000000, 0.000000 +10852, -3.000000, 306.000000, 369.000000, 0.000000 +10853, -3.000000, 306.000000, 369.000000, 0.000000 +10854, -3.000000, 306.000000, 369.000000, 0.000000 +10855, -3.000000, 306.000000, 369.000000, 0.000000 +10856, -3.000000, 306.000000, 369.000000, 0.000000 +10857, -3.000000, 306.000000, 369.000000, 0.000000 +10858, -3.000000, 306.000000, 369.000000, 0.000000 +10859, -3.000000, 306.000000, 369.000000, 0.000000 +10860, -3.000000, 306.000000, 369.000000, 0.000000 +10861, -3.000000, 306.000000, 369.000000, 0.000000 +10862, -3.000000, 306.000000, 369.000000, 0.000000 +10863, -3.000000, 306.000000, 369.000000, 0.000000 +10864, -3.000000, 306.000000, 369.000000, 0.000000 +10865, -3.000000, 306.000000, 369.000000, 0.000000 +10866, -3.000000, 306.000000, 369.000000, 0.000000 +10867, -3.000000, 306.000000, 369.000000, 0.000000 +10868, -3.000000, 306.000000, 369.000000, 0.000000 +10869, -3.000000, 306.000000, 369.000000, 0.000000 +10870, -3.000000, 306.000000, 369.000000, 0.000000 +10871, -3.000000, 306.000000, 369.000000, 0.000000 +10872, -3.000000, 306.000000, 369.000000, 0.000000 +10873, -3.000000, 306.000000, 369.000000, 0.000000 +10874, -3.000000, 306.000000, 369.000000, 0.000000 +10875, -3.000000, 306.000000, 369.000000, 0.000000 +10876, -3.000000, 306.000000, 369.000000, 0.000000 +10877, -3.000000, 306.000000, 369.000000, 0.000000 +10878, -3.000000, 306.000000, 369.000000, 0.000000 +10879, -3.000000, 306.000000, 369.000000, 0.000000 +10880, -3.000000, 306.000000, 369.000000, 0.000000 +10881, -3.000000, 306.000000, 369.000000, 0.000000 +10882, -3.000000, 306.000000, 369.000000, 0.000000 +10883, -3.000000, 306.000000, 369.000000, 0.000000 +10884, -3.000000, 306.000000, 369.000000, 0.000000 +10885, -3.000000, 306.000000, 369.000000, 0.000000 +10886, -3.000000, 306.000000, 369.000000, 0.000000 +10887, -3.000000, 306.000000, 369.000000, 0.000000 +10888, -3.000000, 306.000000, 369.000000, 0.000000 +10889, -3.000000, 306.000000, 369.000000, 0.000000 +10890, -3.000000, 306.000000, 369.000000, 0.000000 +10891, -3.000000, 306.000000, 369.000000, 0.000000 +10892, -3.000000, 306.000000, 369.000000, 0.000000 +10893, -3.000000, 306.000000, 369.000000, 0.000000 +10894, -3.000000, 306.000000, 369.000000, 0.000000 +10895, -3.000000, 306.000000, 369.000000, 0.000000 +10896, -3.000000, 306.000000, 369.000000, 0.000000 +10897, -3.000000, 306.000000, 369.000000, 0.000000 +10898, -3.000000, 306.000000, 369.000000, 0.000000 +10899, -3.000000, 306.000000, 369.000000, 0.000000 +10900, -3.000000, 308.000000, 372.000000, 0.000000 +10901, -3.000000, 308.000000, 372.000000, 0.000000 +10902, -3.000000, 308.000000, 372.000000, 0.000000 +10903, -3.000000, 308.000000, 372.000000, 0.000000 +10904, -3.000000, 308.000000, 372.000000, 0.000000 +10905, -3.000000, 308.000000, 372.000000, 0.000000 +10906, -3.000000, 308.000000, 372.000000, 0.000000 +10907, -3.000000, 308.000000, 372.000000, 0.000000 +10908, -3.000000, 308.000000, 372.000000, 0.000000 +10909, -3.000000, 308.000000, 372.000000, 0.000000 +10910, -3.000000, 308.000000, 372.000000, 0.000000 +10911, -3.000000, 308.000000, 372.000000, 0.000000 +10912, -3.000000, 308.000000, 372.000000, 0.000000 +10913, -3.000000, 308.000000, 372.000000, 0.000000 +10914, -3.000000, 308.000000, 372.000000, 0.000000 +10915, -3.000000, 308.000000, 372.000000, 0.000000 +10916, -3.000000, 308.000000, 372.000000, 0.000000 +10917, -3.000000, 308.000000, 372.000000, 0.000000 +10918, -3.000000, 308.000000, 372.000000, 0.000000 +10919, -3.000000, 308.000000, 372.000000, 0.000000 +10920, -3.000000, 308.000000, 372.000000, 0.000000 +10921, -3.000000, 308.000000, 372.000000, 0.000000 +10922, -3.000000, 308.000000, 372.000000, 0.000000 +10923, -3.000000, 308.000000, 372.000000, 0.000000 +10924, -3.000000, 308.000000, 372.000000, 0.000000 +10925, -3.000000, 308.000000, 372.000000, 0.000000 +10926, -3.000000, 308.000000, 372.000000, 0.000000 +10927, -3.000000, 308.000000, 372.000000, 0.000000 +10928, -3.000000, 308.000000, 372.000000, 0.000000 +10929, -3.000000, 308.000000, 372.000000, 0.000000 +10930, -3.000000, 308.000000, 372.000000, 0.000000 +10931, -3.000000, 308.000000, 372.000000, 0.000000 +10932, -3.000000, 308.000000, 372.000000, 0.000000 +10933, -3.000000, 308.000000, 372.000000, 0.000000 +10934, -3.000000, 308.000000, 372.000000, 0.000000 +10935, -3.000000, 308.000000, 372.000000, 0.000000 +10936, -3.000000, 308.000000, 372.000000, 0.000000 +10937, -3.000000, 308.000000, 372.000000, 0.000000 +10938, -3.000000, 308.000000, 372.000000, 0.000000 +10939, -3.000000, 308.000000, 372.000000, 0.000000 +10940, -3.000000, 308.000000, 372.000000, 0.000000 +10941, -3.000000, 308.000000, 372.000000, 0.000000 +10942, -3.000000, 308.000000, 372.000000, 0.000000 +10943, -3.000000, 308.000000, 372.000000, 0.000000 +10944, -3.000000, 308.000000, 372.000000, 0.000000 +10945, -3.000000, 308.000000, 372.000000, 0.000000 +10946, -3.000000, 308.000000, 372.000000, 0.000000 +10947, -3.000000, 308.000000, 372.000000, 0.000000 +10948, -3.000000, 308.000000, 372.000000, 0.000000 +10949, -3.000000, 308.000000, 372.000000, 0.000000 +10950, -3.000000, 308.000000, 372.000000, 0.000000 +10951, -3.000000, 308.000000, 372.000000, 0.000000 +10952, -3.000000, 308.000000, 372.000000, 0.000000 +10953, -3.000000, 308.000000, 372.000000, 0.000000 +10954, -3.000000, 308.000000, 372.000000, 0.000000 +10955, -3.000000, 308.000000, 372.000000, 0.000000 +10956, -3.000000, 308.000000, 372.000000, 0.000000 +10957, -3.000000, 308.000000, 372.000000, 0.000000 +10958, -3.000000, 308.000000, 372.000000, 0.000000 +10959, -3.000000, 308.000000, 372.000000, 0.000000 +10960, -3.000000, 308.000000, 372.000000, 0.000000 +10961, -3.000000, 308.000000, 372.000000, 0.000000 +10962, -3.000000, 308.000000, 372.000000, 0.000000 +10963, -3.000000, 308.000000, 372.000000, 0.000000 +10964, -3.000000, 308.000000, 372.000000, 0.000000 +10965, -3.000000, 308.000000, 372.000000, 0.000000 +10966, -3.000000, 308.000000, 372.000000, 0.000000 +10967, -3.000000, 308.000000, 372.000000, 0.000000 +10968, -3.000000, 308.000000, 372.000000, 0.000000 +10969, -3.000000, 308.000000, 372.000000, 0.000000 +10970, -3.000000, 308.000000, 372.000000, 0.000000 +10971, -3.000000, 308.000000, 372.000000, 0.000000 +10972, -3.000000, 308.000000, 372.000000, 0.000000 +10973, -3.000000, 308.000000, 372.000000, 0.000000 +10974, -3.000000, 308.000000, 372.000000, 0.000000 +10975, -3.000000, 308.000000, 372.000000, 0.000000 +10976, -3.000000, 308.000000, 372.000000, 0.000000 +10977, -3.000000, 308.000000, 372.000000, 0.000000 +10978, -3.000000, 308.000000, 372.000000, 0.000000 +10979, -3.000000, 308.000000, 372.000000, 0.000000 +10980, -3.000000, 308.000000, 372.000000, 0.000000 +10981, -3.000000, 308.000000, 372.000000, 0.000000 +10982, -3.000000, 308.000000, 372.000000, 0.000000 +10983, -3.000000, 308.000000, 372.000000, 0.000000 +10984, -3.000000, 308.000000, 372.000000, 0.000000 +10985, -3.000000, 308.000000, 372.000000, 0.000000 +10986, -3.000000, 308.000000, 372.000000, 0.000000 +10987, -3.000000, 308.000000, 372.000000, 0.000000 +10988, -3.000000, 308.000000, 372.000000, 0.000000 +10989, -3.000000, 308.000000, 372.000000, 0.000000 +10990, -3.000000, 308.000000, 372.000000, 0.000000 +10991, -3.000000, 308.000000, 372.000000, 0.000000 +10992, -3.000000, 308.000000, 372.000000, 0.000000 +10993, -3.000000, 308.000000, 372.000000, 0.000000 +10994, -3.000000, 308.000000, 372.000000, 0.000000 +10995, -3.000000, 308.000000, 372.000000, 0.000000 +10996, -3.000000, 308.000000, 372.000000, 0.000000 +10997, -3.000000, 308.000000, 372.000000, 0.000000 +10998, -3.000000, 308.000000, 372.000000, 0.000000 +10999, -3.000000, 308.000000, 372.000000, 0.000000 +11000, -3.000000, 310.000000, 375.000000, 0.000000 +11001, -3.000000, 310.000000, 375.000000, 0.000000 +11002, -3.000000, 310.000000, 375.000000, 0.000000 +11003, -3.000000, 310.000000, 375.000000, 0.000000 +11004, -3.000000, 310.000000, 375.000000, 0.000000 +11005, -3.000000, 310.000000, 375.000000, 0.000000 +11006, -3.000000, 310.000000, 375.000000, 0.000000 +11007, -3.000000, 310.000000, 375.000000, 0.000000 +11008, -3.000000, 310.000000, 375.000000, 0.000000 +11009, -3.000000, 310.000000, 375.000000, 0.000000 +11010, -3.000000, 310.000000, 375.000000, 0.000000 +11011, -3.000000, 310.000000, 375.000000, 0.000000 +11012, -3.000000, 310.000000, 375.000000, 0.000000 +11013, -3.000000, 310.000000, 375.000000, 0.000000 +11014, -3.000000, 310.000000, 375.000000, 0.000000 +11015, -3.000000, 310.000000, 375.000000, 0.000000 +11016, -3.000000, 310.000000, 375.000000, 0.000000 +11017, -3.000000, 310.000000, 375.000000, 0.000000 +11018, -3.000000, 310.000000, 375.000000, 0.000000 +11019, -3.000000, 310.000000, 375.000000, 0.000000 +11020, -3.000000, 310.000000, 375.000000, 0.000000 +11021, -3.000000, 310.000000, 375.000000, 0.000000 +11022, -3.000000, 310.000000, 375.000000, 0.000000 +11023, -3.000000, 310.000000, 375.000000, 0.000000 +11024, -3.000000, 310.000000, 375.000000, 0.000000 +11025, -3.000000, 310.000000, 375.000000, 0.000000 +11026, -3.000000, 310.000000, 375.000000, 0.000000 +11027, -3.000000, 310.000000, 375.000000, 0.000000 +11028, -3.000000, 310.000000, 375.000000, 0.000000 +11029, -3.000000, 310.000000, 375.000000, 0.000000 +11030, -3.000000, 310.000000, 375.000000, 0.000000 +11031, -3.000000, 310.000000, 375.000000, 0.000000 +11032, -3.000000, 310.000000, 375.000000, 0.000000 +11033, -3.000000, 310.000000, 375.000000, 0.000000 +11034, -3.000000, 310.000000, 375.000000, 0.000000 +11035, -3.000000, 310.000000, 375.000000, 0.000000 +11036, -3.000000, 310.000000, 375.000000, 0.000000 +11037, -3.000000, 310.000000, 375.000000, 0.000000 +11038, -3.000000, 310.000000, 375.000000, 0.000000 +11039, -3.000000, 310.000000, 375.000000, 0.000000 +11040, -3.000000, 310.000000, 375.000000, 0.000000 +11041, -3.000000, 310.000000, 375.000000, 0.000000 +11042, -3.000000, 310.000000, 375.000000, 0.000000 +11043, -3.000000, 310.000000, 375.000000, 0.000000 +11044, -3.000000, 310.000000, 375.000000, 0.000000 +11045, -3.000000, 310.000000, 375.000000, 0.000000 +11046, -3.000000, 310.000000, 375.000000, 0.000000 +11047, -3.000000, 310.000000, 375.000000, 0.000000 +11048, -3.000000, 310.000000, 375.000000, 0.000000 +11049, -3.000000, 310.000000, 375.000000, 0.000000 +11050, -3.000000, 310.000000, 375.000000, 0.000000 +11051, -3.000000, 310.000000, 375.000000, 0.000000 +11052, -3.000000, 310.000000, 375.000000, 0.000000 +11053, -3.000000, 310.000000, 375.000000, 0.000000 +11054, -3.000000, 310.000000, 375.000000, 0.000000 +11055, -3.000000, 310.000000, 375.000000, 0.000000 +11056, -3.000000, 310.000000, 375.000000, 0.000000 +11057, -3.000000, 310.000000, 375.000000, 0.000000 +11058, -3.000000, 310.000000, 375.000000, 0.000000 +11059, -3.000000, 310.000000, 375.000000, 0.000000 +11060, -3.000000, 310.000000, 375.000000, 0.000000 +11061, -3.000000, 310.000000, 375.000000, 0.000000 +11062, -3.000000, 310.000000, 375.000000, 0.000000 +11063, -3.000000, 310.000000, 375.000000, 0.000000 +11064, -3.000000, 310.000000, 375.000000, 0.000000 +11065, -3.000000, 310.000000, 375.000000, 0.000000 +11066, -3.000000, 310.000000, 375.000000, 0.000000 +11067, -3.000000, 310.000000, 375.000000, 0.000000 +11068, -3.000000, 310.000000, 375.000000, 0.000000 +11069, -3.000000, 310.000000, 375.000000, 0.000000 +11070, -3.000000, 310.000000, 375.000000, 0.000000 +11071, -3.000000, 310.000000, 375.000000, 0.000000 +11072, -3.000000, 310.000000, 375.000000, 0.000000 +11073, -3.000000, 310.000000, 375.000000, 0.000000 +11074, -3.000000, 310.000000, 375.000000, 0.000000 +11075, -3.000000, 310.000000, 375.000000, 0.000000 +11076, -3.000000, 310.000000, 375.000000, 0.000000 +11077, -3.000000, 310.000000, 375.000000, 0.000000 +11078, -3.000000, 310.000000, 375.000000, 0.000000 +11079, -3.000000, 310.000000, 375.000000, 0.000000 +11080, -3.000000, 310.000000, 375.000000, 0.000000 +11081, -3.000000, 310.000000, 375.000000, 0.000000 +11082, -3.000000, 310.000000, 375.000000, 0.000000 +11083, -3.000000, 310.000000, 375.000000, 0.000000 +11084, -3.000000, 310.000000, 375.000000, 0.000000 +11085, -3.000000, 310.000000, 375.000000, 0.000000 +11086, -3.000000, 310.000000, 375.000000, 0.000000 +11087, -3.000000, 310.000000, 375.000000, 0.000000 +11088, -3.000000, 310.000000, 375.000000, 0.000000 +11089, -3.000000, 310.000000, 375.000000, 0.000000 +11090, -3.000000, 310.000000, 375.000000, 0.000000 +11091, -3.000000, 310.000000, 375.000000, 0.000000 +11092, -3.000000, 310.000000, 375.000000, 0.000000 +11093, -3.000000, 310.000000, 375.000000, 0.000000 +11094, -3.000000, 310.000000, 375.000000, 0.000000 +11095, -3.000000, 310.000000, 375.000000, 0.000000 +11096, -3.000000, 310.000000, 375.000000, 0.000000 +11097, -3.000000, 310.000000, 375.000000, 0.000000 +11098, -3.000000, 310.000000, 375.000000, 0.000000 +11099, -3.000000, 310.000000, 375.000000, 0.000000 +11100, -3.000000, 312.000000, 378.000000, 0.000000 +11101, -3.000000, 312.000000, 378.000000, 0.000000 +11102, -3.000000, 312.000000, 378.000000, 0.000000 +11103, -3.000000, 312.000000, 378.000000, 0.000000 +11104, -3.000000, 312.000000, 378.000000, 0.000000 +11105, -3.000000, 312.000000, 378.000000, 0.000000 +11106, -3.000000, 312.000000, 378.000000, 0.000000 +11107, -3.000000, 312.000000, 378.000000, 0.000000 +11108, -3.000000, 312.000000, 378.000000, 0.000000 +11109, -3.000000, 312.000000, 378.000000, 0.000000 +11110, -3.000000, 312.000000, 378.000000, 0.000000 +11111, -3.000000, 312.000000, 378.000000, 0.000000 +11112, -3.000000, 312.000000, 378.000000, 0.000000 +11113, -3.000000, 312.000000, 378.000000, 0.000000 +11114, -3.000000, 312.000000, 378.000000, 0.000000 +11115, -3.000000, 312.000000, 378.000000, 0.000000 +11116, -3.000000, 312.000000, 378.000000, 0.000000 +11117, -3.000000, 312.000000, 378.000000, 0.000000 +11118, -3.000000, 312.000000, 378.000000, 0.000000 +11119, -3.000000, 312.000000, 378.000000, 0.000000 +11120, -3.000000, 312.000000, 378.000000, 0.000000 +11121, -3.000000, 312.000000, 378.000000, 0.000000 +11122, -3.000000, 312.000000, 378.000000, 0.000000 +11123, -3.000000, 312.000000, 378.000000, 0.000000 +11124, -3.000000, 312.000000, 378.000000, 0.000000 +11125, -3.000000, 312.000000, 378.000000, 0.000000 +11126, -3.000000, 312.000000, 378.000000, 0.000000 +11127, -3.000000, 312.000000, 378.000000, 0.000000 +11128, -3.000000, 312.000000, 378.000000, 0.000000 +11129, -3.000000, 312.000000, 378.000000, 0.000000 +11130, -3.000000, 312.000000, 378.000000, 0.000000 +11131, -3.000000, 312.000000, 378.000000, 0.000000 +11132, -3.000000, 312.000000, 378.000000, 0.000000 +11133, -3.000000, 312.000000, 378.000000, 0.000000 +11134, -3.000000, 312.000000, 378.000000, 0.000000 +11135, -3.000000, 312.000000, 378.000000, 0.000000 +11136, -3.000000, 312.000000, 378.000000, 0.000000 +11137, -3.000000, 312.000000, 378.000000, 0.000000 +11138, -3.000000, 312.000000, 378.000000, 0.000000 +11139, -3.000000, 312.000000, 378.000000, 0.000000 +11140, -3.000000, 312.000000, 378.000000, 0.000000 +11141, -3.000000, 312.000000, 378.000000, 0.000000 +11142, -3.000000, 312.000000, 378.000000, 0.000000 +11143, -3.000000, 312.000000, 378.000000, 0.000000 +11144, -3.000000, 312.000000, 378.000000, 0.000000 +11145, -3.000000, 312.000000, 378.000000, 0.000000 +11146, -3.000000, 312.000000, 378.000000, 0.000000 +11147, -3.000000, 312.000000, 378.000000, 0.000000 +11148, -3.000000, 312.000000, 378.000000, 0.000000 +11149, -3.000000, 312.000000, 378.000000, 0.000000 +11150, -3.000000, 312.000000, 378.000000, 0.000000 +11151, -3.000000, 312.000000, 378.000000, 0.000000 +11152, -3.000000, 312.000000, 378.000000, 0.000000 +11153, -3.000000, 312.000000, 378.000000, 0.000000 +11154, -3.000000, 312.000000, 378.000000, 0.000000 +11155, -3.000000, 312.000000, 378.000000, 0.000000 +11156, -3.000000, 312.000000, 378.000000, 0.000000 +11157, -3.000000, 312.000000, 378.000000, 0.000000 +11158, -3.000000, 312.000000, 378.000000, 0.000000 +11159, -3.000000, 312.000000, 378.000000, 0.000000 +11160, -3.000000, 312.000000, 378.000000, 0.000000 +11161, -3.000000, 312.000000, 378.000000, 0.000000 +11162, -3.000000, 312.000000, 378.000000, 0.000000 +11163, -3.000000, 312.000000, 378.000000, 0.000000 +11164, -3.000000, 312.000000, 378.000000, 0.000000 +11165, -3.000000, 312.000000, 378.000000, 0.000000 +11166, -3.000000, 312.000000, 378.000000, 0.000000 +11167, -3.000000, 312.000000, 378.000000, 0.000000 +11168, -3.000000, 312.000000, 378.000000, 0.000000 +11169, -3.000000, 312.000000, 378.000000, 0.000000 +11170, -3.000000, 312.000000, 378.000000, 0.000000 +11171, -3.000000, 312.000000, 378.000000, 0.000000 +11172, -3.000000, 312.000000, 378.000000, 0.000000 +11173, -3.000000, 312.000000, 378.000000, 0.000000 +11174, -3.000000, 312.000000, 378.000000, 0.000000 +11175, -3.000000, 312.000000, 378.000000, 0.000000 +11176, -3.000000, 312.000000, 378.000000, 0.000000 +11177, -3.000000, 312.000000, 378.000000, 0.000000 +11178, -3.000000, 312.000000, 378.000000, 0.000000 +11179, -3.000000, 312.000000, 378.000000, 0.000000 +11180, -3.000000, 312.000000, 378.000000, 0.000000 +11181, -3.000000, 312.000000, 378.000000, 0.000000 +11182, -3.000000, 312.000000, 378.000000, 0.000000 +11183, -3.000000, 312.000000, 378.000000, 0.000000 +11184, -3.000000, 312.000000, 378.000000, 0.000000 +11185, -3.000000, 312.000000, 378.000000, 0.000000 +11186, -3.000000, 312.000000, 378.000000, 0.000000 +11187, -3.000000, 312.000000, 378.000000, 0.000000 +11188, -3.000000, 312.000000, 378.000000, 0.000000 +11189, -3.000000, 312.000000, 378.000000, 0.000000 +11190, -3.000000, 312.000000, 378.000000, 0.000000 +11191, -3.000000, 312.000000, 378.000000, 0.000000 +11192, -3.000000, 312.000000, 378.000000, 0.000000 +11193, -3.000000, 312.000000, 378.000000, 0.000000 +11194, -3.000000, 312.000000, 378.000000, 0.000000 +11195, -3.000000, 312.000000, 378.000000, 0.000000 +11196, -3.000000, 312.000000, 378.000000, 0.000000 +11197, -3.000000, 312.000000, 378.000000, 0.000000 +11198, -3.000000, 312.000000, 378.000000, 0.000000 +11199, -3.000000, 312.000000, 378.000000, 0.000000 +11200, -3.000000, 314.000000, 381.000000, 0.000000 +11201, -3.000000, 314.000000, 381.000000, 0.000000 +11202, -3.000000, 314.000000, 381.000000, 0.000000 +11203, -3.000000, 314.000000, 381.000000, 0.000000 +11204, -3.000000, 314.000000, 381.000000, 0.000000 +11205, -3.000000, 314.000000, 381.000000, 0.000000 +11206, -3.000000, 314.000000, 381.000000, 0.000000 +11207, -3.000000, 314.000000, 381.000000, 0.000000 +11208, -3.000000, 314.000000, 381.000000, 0.000000 +11209, -3.000000, 314.000000, 381.000000, 0.000000 +11210, -3.000000, 314.000000, 381.000000, 0.000000 +11211, -3.000000, 314.000000, 381.000000, 0.000000 +11212, -3.000000, 314.000000, 381.000000, 0.000000 +11213, -3.000000, 314.000000, 381.000000, 0.000000 +11214, -3.000000, 314.000000, 381.000000, 0.000000 +11215, -3.000000, 314.000000, 381.000000, 0.000000 +11216, -3.000000, 314.000000, 381.000000, 0.000000 +11217, -3.000000, 314.000000, 381.000000, 0.000000 +11218, -3.000000, 314.000000, 381.000000, 0.000000 +11219, -3.000000, 314.000000, 381.000000, 0.000000 +11220, -3.000000, 314.000000, 381.000000, 0.000000 +11221, -3.000000, 314.000000, 381.000000, 0.000000 +11222, -3.000000, 314.000000, 381.000000, 0.000000 +11223, -3.000000, 314.000000, 381.000000, 0.000000 +11224, -3.000000, 314.000000, 381.000000, 0.000000 +11225, -3.000000, 314.000000, 381.000000, 0.000000 +11226, -3.000000, 314.000000, 381.000000, 0.000000 +11227, -3.000000, 314.000000, 381.000000, 0.000000 +11228, -3.000000, 314.000000, 381.000000, 0.000000 +11229, -3.000000, 314.000000, 381.000000, 0.000000 +11230, -3.000000, 314.000000, 381.000000, 0.000000 +11231, -3.000000, 314.000000, 381.000000, 0.000000 +11232, -3.000000, 314.000000, 381.000000, 0.000000 +11233, -3.000000, 314.000000, 381.000000, 0.000000 +11234, -3.000000, 314.000000, 381.000000, 0.000000 +11235, -3.000000, 314.000000, 381.000000, 0.000000 +11236, -3.000000, 314.000000, 381.000000, 0.000000 +11237, -3.000000, 314.000000, 381.000000, 0.000000 +11238, -3.000000, 314.000000, 381.000000, 0.000000 +11239, -3.000000, 314.000000, 381.000000, 0.000000 +11240, -3.000000, 314.000000, 381.000000, 0.000000 +11241, -3.000000, 314.000000, 381.000000, 0.000000 +11242, -3.000000, 314.000000, 381.000000, 0.000000 +11243, -3.000000, 314.000000, 381.000000, 0.000000 +11244, -3.000000, 314.000000, 381.000000, 0.000000 +11245, -3.000000, 314.000000, 381.000000, 0.000000 +11246, -3.000000, 314.000000, 381.000000, 0.000000 +11247, -3.000000, 314.000000, 381.000000, 0.000000 +11248, -3.000000, 314.000000, 381.000000, 0.000000 +11249, -3.000000, 314.000000, 381.000000, 0.000000 +11250, -3.000000, 314.000000, 381.000000, 0.000000 +11251, -3.000000, 314.000000, 381.000000, 0.000000 +11252, -3.000000, 314.000000, 381.000000, 0.000000 +11253, -3.000000, 314.000000, 381.000000, 0.000000 +11254, -3.000000, 314.000000, 381.000000, 0.000000 +11255, -3.000000, 314.000000, 381.000000, 0.000000 +11256, -3.000000, 314.000000, 381.000000, 0.000000 +11257, -3.000000, 314.000000, 381.000000, 0.000000 +11258, -3.000000, 314.000000, 381.000000, 0.000000 +11259, -3.000000, 314.000000, 381.000000, 0.000000 +11260, -3.000000, 314.000000, 381.000000, 0.000000 +11261, -3.000000, 314.000000, 381.000000, 0.000000 +11262, -3.000000, 314.000000, 381.000000, 0.000000 +11263, -3.000000, 314.000000, 381.000000, 0.000000 +11264, -3.000000, 314.000000, 381.000000, 0.000000 +11265, -3.000000, 314.000000, 381.000000, 0.000000 +11266, -3.000000, 314.000000, 381.000000, 0.000000 +11267, -3.000000, 314.000000, 381.000000, 0.000000 +11268, -3.000000, 314.000000, 381.000000, 0.000000 +11269, -3.000000, 314.000000, 381.000000, 0.000000 +11270, -3.000000, 314.000000, 381.000000, 0.000000 +11271, -3.000000, 314.000000, 381.000000, 0.000000 +11272, -3.000000, 314.000000, 381.000000, 0.000000 +11273, -3.000000, 314.000000, 381.000000, 0.000000 +11274, -3.000000, 314.000000, 381.000000, 0.000000 +11275, -3.000000, 314.000000, 381.000000, 0.000000 +11276, -3.000000, 314.000000, 381.000000, 0.000000 +11277, -3.000000, 314.000000, 381.000000, 0.000000 +11278, -3.000000, 314.000000, 381.000000, 0.000000 +11279, -3.000000, 314.000000, 381.000000, 0.000000 +11280, -3.000000, 314.000000, 381.000000, 0.000000 +11281, -3.000000, 314.000000, 381.000000, 0.000000 +11282, -3.000000, 314.000000, 381.000000, 0.000000 +11283, -3.000000, 314.000000, 381.000000, 0.000000 +11284, -3.000000, 314.000000, 381.000000, 0.000000 +11285, -3.000000, 314.000000, 381.000000, 0.000000 +11286, -3.000000, 314.000000, 381.000000, 0.000000 +11287, -3.000000, 314.000000, 381.000000, 0.000000 +11288, -3.000000, 314.000000, 381.000000, 0.000000 +11289, -3.000000, 314.000000, 381.000000, 0.000000 +11290, -3.000000, 314.000000, 381.000000, 0.000000 +11291, -3.000000, 314.000000, 381.000000, 0.000000 +11292, -3.000000, 314.000000, 381.000000, 0.000000 +11293, -3.000000, 314.000000, 381.000000, 0.000000 +11294, -3.000000, 314.000000, 381.000000, 0.000000 +11295, -3.000000, 314.000000, 381.000000, 0.000000 +11296, -3.000000, 314.000000, 381.000000, 0.000000 +11297, -3.000000, 314.000000, 381.000000, 0.000000 +11298, -3.000000, 314.000000, 381.000000, 0.000000 +11299, -3.000000, 314.000000, 381.000000, 0.000000 +11300, -3.000000, 316.000000, 384.000000, 0.000000 +11301, -3.000000, 316.000000, 384.000000, 0.000000 +11302, -3.000000, 316.000000, 384.000000, 0.000000 +11303, -3.000000, 316.000000, 384.000000, 0.000000 +11304, -3.000000, 316.000000, 384.000000, 0.000000 +11305, -3.000000, 316.000000, 384.000000, 0.000000 +11306, -3.000000, 316.000000, 384.000000, 0.000000 +11307, -3.000000, 316.000000, 384.000000, 0.000000 +11308, -3.000000, 316.000000, 384.000000, 0.000000 +11309, -3.000000, 316.000000, 384.000000, 0.000000 +11310, -3.000000, 316.000000, 384.000000, 0.000000 +11311, -3.000000, 316.000000, 384.000000, 0.000000 +11312, -3.000000, 316.000000, 384.000000, 0.000000 +11313, -3.000000, 316.000000, 384.000000, 0.000000 +11314, -3.000000, 316.000000, 384.000000, 0.000000 +11315, -3.000000, 316.000000, 384.000000, 0.000000 +11316, -3.000000, 316.000000, 384.000000, 0.000000 +11317, -3.000000, 316.000000, 384.000000, 0.000000 +11318, -3.000000, 316.000000, 384.000000, 0.000000 +11319, -3.000000, 316.000000, 384.000000, 0.000000 +11320, -3.000000, 316.000000, 384.000000, 0.000000 +11321, -3.000000, 316.000000, 384.000000, 0.000000 +11322, -3.000000, 316.000000, 384.000000, 0.000000 +11323, -3.000000, 316.000000, 384.000000, 0.000000 +11324, -3.000000, 316.000000, 384.000000, 0.000000 +11325, -3.000000, 316.000000, 384.000000, 0.000000 +11326, -3.000000, 316.000000, 384.000000, 0.000000 +11327, -3.000000, 316.000000, 384.000000, 0.000000 +11328, -3.000000, 316.000000, 384.000000, 0.000000 +11329, -3.000000, 316.000000, 384.000000, 0.000000 +11330, -3.000000, 316.000000, 384.000000, 0.000000 +11331, -3.000000, 316.000000, 384.000000, 0.000000 +11332, -3.000000, 316.000000, 384.000000, 0.000000 +11333, -3.000000, 316.000000, 384.000000, 0.000000 +11334, -3.000000, 316.000000, 384.000000, 0.000000 +11335, -3.000000, 316.000000, 384.000000, 0.000000 +11336, -3.000000, 316.000000, 384.000000, 0.000000 +11337, -3.000000, 316.000000, 384.000000, 0.000000 +11338, -3.000000, 316.000000, 384.000000, 0.000000 +11339, -3.000000, 316.000000, 384.000000, 0.000000 +11340, -3.000000, 316.000000, 384.000000, 0.000000 +11341, -3.000000, 316.000000, 384.000000, 0.000000 +11342, -3.000000, 316.000000, 384.000000, 0.000000 +11343, -3.000000, 316.000000, 384.000000, 0.000000 +11344, -3.000000, 316.000000, 384.000000, 0.000000 +11345, -3.000000, 316.000000, 384.000000, 0.000000 +11346, -3.000000, 316.000000, 384.000000, 0.000000 +11347, -3.000000, 316.000000, 384.000000, 0.000000 +11348, -3.000000, 316.000000, 384.000000, 0.000000 +11349, -3.000000, 316.000000, 384.000000, 0.000000 +11350, -3.000000, 316.000000, 384.000000, 0.000000 +11351, -3.000000, 316.000000, 384.000000, 0.000000 +11352, -3.000000, 316.000000, 384.000000, 0.000000 +11353, -3.000000, 316.000000, 384.000000, 0.000000 +11354, -3.000000, 316.000000, 384.000000, 0.000000 +11355, -3.000000, 316.000000, 384.000000, 0.000000 +11356, -3.000000, 316.000000, 384.000000, 0.000000 +11357, -3.000000, 316.000000, 384.000000, 0.000000 +11358, -3.000000, 316.000000, 384.000000, 0.000000 +11359, -3.000000, 316.000000, 384.000000, 0.000000 +11360, -3.000000, 316.000000, 384.000000, 0.000000 +11361, -3.000000, 316.000000, 384.000000, 0.000000 +11362, -3.000000, 316.000000, 384.000000, 0.000000 +11363, -3.000000, 316.000000, 384.000000, 0.000000 +11364, -3.000000, 316.000000, 384.000000, 0.000000 +11365, -3.000000, 316.000000, 384.000000, 0.000000 +11366, -3.000000, 316.000000, 384.000000, 0.000000 +11367, -3.000000, 316.000000, 384.000000, 0.000000 +11368, -3.000000, 316.000000, 384.000000, 0.000000 +11369, -3.000000, 316.000000, 384.000000, 0.000000 +11370, -3.000000, 316.000000, 384.000000, 0.000000 +11371, -3.000000, 316.000000, 384.000000, 0.000000 +11372, -3.000000, 316.000000, 384.000000, 0.000000 +11373, -3.000000, 316.000000, 384.000000, 0.000000 +11374, -3.000000, 316.000000, 384.000000, 0.000000 +11375, -3.000000, 316.000000, 384.000000, 0.000000 +11376, -3.000000, 316.000000, 384.000000, 0.000000 +11377, -3.000000, 316.000000, 384.000000, 0.000000 +11378, -3.000000, 316.000000, 384.000000, 0.000000 +11379, -3.000000, 316.000000, 384.000000, 0.000000 +11380, -3.000000, 316.000000, 384.000000, 0.000000 +11381, -3.000000, 316.000000, 384.000000, 0.000000 +11382, -3.000000, 316.000000, 384.000000, 0.000000 +11383, -3.000000, 316.000000, 384.000000, 0.000000 +11384, -3.000000, 316.000000, 384.000000, 0.000000 +11385, -3.000000, 316.000000, 384.000000, 0.000000 +11386, -3.000000, 316.000000, 384.000000, 0.000000 +11387, -3.000000, 316.000000, 384.000000, 0.000000 +11388, -3.000000, 316.000000, 384.000000, 0.000000 +11389, -3.000000, 316.000000, 384.000000, 0.000000 +11390, -3.000000, 316.000000, 384.000000, 0.000000 +11391, -3.000000, 316.000000, 384.000000, 0.000000 +11392, -3.000000, 316.000000, 384.000000, 0.000000 +11393, -3.000000, 316.000000, 384.000000, 0.000000 +11394, -3.000000, 316.000000, 384.000000, 0.000000 +11395, -3.000000, 316.000000, 384.000000, 0.000000 +11396, -3.000000, 316.000000, 384.000000, 0.000000 +11397, -3.000000, 316.000000, 384.000000, 0.000000 +11398, -3.000000, 316.000000, 384.000000, 0.000000 +11399, -3.000000, 316.000000, 384.000000, 0.000000 +11400, -3.000000, 318.000000, 387.000000, 0.000000 +11401, -3.000000, 318.000000, 387.000000, 0.000000 +11402, -3.000000, 318.000000, 387.000000, 0.000000 +11403, -3.000000, 318.000000, 387.000000, 0.000000 +11404, -3.000000, 318.000000, 387.000000, 0.000000 +11405, -3.000000, 318.000000, 387.000000, 0.000000 +11406, -3.000000, 318.000000, 387.000000, 0.000000 +11407, -3.000000, 318.000000, 387.000000, 0.000000 +11408, -3.000000, 318.000000, 387.000000, 0.000000 +11409, -3.000000, 318.000000, 387.000000, 0.000000 +11410, -3.000000, 318.000000, 387.000000, 0.000000 +11411, -3.000000, 318.000000, 387.000000, 0.000000 +11412, -3.000000, 318.000000, 387.000000, 0.000000 +11413, -3.000000, 318.000000, 387.000000, 0.000000 +11414, -3.000000, 318.000000, 387.000000, 0.000000 +11415, -3.000000, 318.000000, 387.000000, 0.000000 +11416, -3.000000, 318.000000, 387.000000, 0.000000 +11417, -3.000000, 318.000000, 387.000000, 0.000000 +11418, -3.000000, 318.000000, 387.000000, 0.000000 +11419, -3.000000, 318.000000, 387.000000, 0.000000 +11420, -3.000000, 318.000000, 387.000000, 0.000000 +11421, -3.000000, 318.000000, 387.000000, 0.000000 +11422, -3.000000, 318.000000, 387.000000, 0.000000 +11423, -3.000000, 318.000000, 387.000000, 0.000000 +11424, -3.000000, 318.000000, 387.000000, 0.000000 +11425, -3.000000, 318.000000, 387.000000, 0.000000 +11426, -3.000000, 318.000000, 387.000000, 0.000000 +11427, -3.000000, 318.000000, 387.000000, 0.000000 +11428, -3.000000, 318.000000, 387.000000, 0.000000 +11429, -3.000000, 318.000000, 387.000000, 0.000000 +11430, -3.000000, 318.000000, 387.000000, 0.000000 +11431, -3.000000, 318.000000, 387.000000, 0.000000 +11432, -3.000000, 318.000000, 387.000000, 0.000000 +11433, -3.000000, 318.000000, 387.000000, 0.000000 +11434, -3.000000, 318.000000, 387.000000, 0.000000 +11435, -3.000000, 318.000000, 387.000000, 0.000000 +11436, -3.000000, 318.000000, 387.000000, 0.000000 +11437, -3.000000, 318.000000, 387.000000, 0.000000 +11438, -3.000000, 318.000000, 387.000000, 0.000000 +11439, -3.000000, 318.000000, 387.000000, 0.000000 +11440, -3.000000, 318.000000, 387.000000, 0.000000 +11441, -3.000000, 318.000000, 387.000000, 0.000000 +11442, -3.000000, 318.000000, 387.000000, 0.000000 +11443, -3.000000, 318.000000, 387.000000, 0.000000 +11444, -3.000000, 318.000000, 387.000000, 0.000000 +11445, -3.000000, 318.000000, 387.000000, 0.000000 +11446, -3.000000, 318.000000, 387.000000, 0.000000 +11447, -3.000000, 318.000000, 387.000000, 0.000000 +11448, -3.000000, 318.000000, 387.000000, 0.000000 +11449, -3.000000, 318.000000, 387.000000, 0.000000 +11450, -3.000000, 318.000000, 387.000000, 0.000000 +11451, -3.000000, 318.000000, 387.000000, 0.000000 +11452, -3.000000, 318.000000, 387.000000, 0.000000 +11453, -3.000000, 318.000000, 387.000000, 0.000000 +11454, -3.000000, 318.000000, 387.000000, 0.000000 +11455, -3.000000, 318.000000, 387.000000, 0.000000 +11456, -3.000000, 318.000000, 387.000000, 0.000000 +11457, -3.000000, 318.000000, 387.000000, 0.000000 +11458, -3.000000, 318.000000, 387.000000, 0.000000 +11459, -3.000000, 318.000000, 387.000000, 0.000000 +11460, -3.000000, 318.000000, 387.000000, 0.000000 +11461, -3.000000, 318.000000, 387.000000, 0.000000 +11462, -3.000000, 318.000000, 387.000000, 0.000000 +11463, -3.000000, 318.000000, 387.000000, 0.000000 +11464, -3.000000, 318.000000, 387.000000, 0.000000 +11465, -3.000000, 318.000000, 387.000000, 0.000000 +11466, -3.000000, 318.000000, 387.000000, 0.000000 +11467, -3.000000, 318.000000, 387.000000, 0.000000 +11468, -3.000000, 318.000000, 387.000000, 0.000000 +11469, -3.000000, 318.000000, 387.000000, 0.000000 +11470, -3.000000, 318.000000, 387.000000, 0.000000 +11471, -3.000000, 318.000000, 387.000000, 0.000000 +11472, -3.000000, 318.000000, 387.000000, 0.000000 +11473, -3.000000, 318.000000, 387.000000, 0.000000 +11474, -3.000000, 318.000000, 387.000000, 0.000000 +11475, -3.000000, 318.000000, 387.000000, 0.000000 +11476, -3.000000, 318.000000, 387.000000, 0.000000 +11477, -3.000000, 318.000000, 387.000000, 0.000000 +11478, -3.000000, 318.000000, 387.000000, 0.000000 +11479, -3.000000, 318.000000, 387.000000, 0.000000 +11480, -3.000000, 318.000000, 387.000000, 0.000000 +11481, -3.000000, 318.000000, 387.000000, 0.000000 +11482, -3.000000, 318.000000, 387.000000, 0.000000 +11483, -3.000000, 318.000000, 387.000000, 0.000000 +11484, -3.000000, 318.000000, 387.000000, 0.000000 +11485, -3.000000, 318.000000, 387.000000, 0.000000 +11486, -3.000000, 318.000000, 387.000000, 0.000000 +11487, -3.000000, 318.000000, 387.000000, 0.000000 +11488, -3.000000, 318.000000, 387.000000, 0.000000 +11489, -3.000000, 318.000000, 387.000000, 0.000000 +11490, -3.000000, 318.000000, 387.000000, 0.000000 +11491, -3.000000, 318.000000, 387.000000, 0.000000 +11492, -3.000000, 318.000000, 387.000000, 0.000000 +11493, -3.000000, 318.000000, 387.000000, 0.000000 +11494, -3.000000, 318.000000, 387.000000, 0.000000 +11495, -3.000000, 318.000000, 387.000000, 0.000000 +11496, -3.000000, 318.000000, 387.000000, 0.000000 +11497, -3.000000, 318.000000, 387.000000, 0.000000 +11498, -3.000000, 318.000000, 387.000000, 0.000000 +11499, -3.000000, 318.000000, 387.000000, 0.000000 +11500, -3.000000, 320.000000, 390.000000, 0.000000 +11501, -3.000000, 320.000000, 390.000000, 0.000000 +11502, -3.000000, 320.000000, 390.000000, 0.000000 +11503, -3.000000, 320.000000, 390.000000, 0.000000 +11504, -3.000000, 320.000000, 390.000000, 0.000000 +11505, -3.000000, 320.000000, 390.000000, 0.000000 +11506, -3.000000, 320.000000, 390.000000, 0.000000 +11507, -3.000000, 320.000000, 390.000000, 0.000000 +11508, -3.000000, 320.000000, 390.000000, 0.000000 +11509, -3.000000, 320.000000, 390.000000, 0.000000 +11510, -3.000000, 320.000000, 390.000000, 0.000000 +11511, -3.000000, 320.000000, 390.000000, 0.000000 +11512, -3.000000, 320.000000, 390.000000, 0.000000 +11513, -3.000000, 320.000000, 390.000000, 0.000000 +11514, -3.000000, 320.000000, 390.000000, 0.000000 +11515, -3.000000, 320.000000, 390.000000, 0.000000 +11516, -3.000000, 320.000000, 390.000000, 0.000000 +11517, -3.000000, 320.000000, 390.000000, 0.000000 +11518, -3.000000, 320.000000, 390.000000, 0.000000 +11519, -3.000000, 320.000000, 390.000000, 0.000000 +11520, -3.000000, 320.000000, 390.000000, 0.000000 +11521, -3.000000, 320.000000, 390.000000, 0.000000 +11522, -3.000000, 320.000000, 390.000000, 0.000000 +11523, -3.000000, 320.000000, 390.000000, 0.000000 +11524, -3.000000, 320.000000, 390.000000, 0.000000 +11525, -3.000000, 320.000000, 390.000000, 0.000000 +11526, -3.000000, 320.000000, 390.000000, 0.000000 +11527, -3.000000, 320.000000, 390.000000, 0.000000 +11528, -3.000000, 320.000000, 390.000000, 0.000000 +11529, -3.000000, 320.000000, 390.000000, 0.000000 +11530, -3.000000, 320.000000, 390.000000, 0.000000 +11531, -3.000000, 320.000000, 390.000000, 0.000000 +11532, -3.000000, 320.000000, 390.000000, 0.000000 +11533, -3.000000, 320.000000, 390.000000, 0.000000 +11534, -3.000000, 320.000000, 390.000000, 0.000000 +11535, -3.000000, 320.000000, 390.000000, 0.000000 +11536, -3.000000, 320.000000, 390.000000, 0.000000 +11537, -3.000000, 320.000000, 390.000000, 0.000000 +11538, -3.000000, 320.000000, 390.000000, 0.000000 +11539, -3.000000, 320.000000, 390.000000, 0.000000 +11540, -3.000000, 320.000000, 390.000000, 0.000000 +11541, -3.000000, 320.000000, 390.000000, 0.000000 +11542, -3.000000, 320.000000, 390.000000, 0.000000 +11543, -3.000000, 320.000000, 390.000000, 0.000000 +11544, -3.000000, 320.000000, 390.000000, 0.000000 +11545, -3.000000, 320.000000, 390.000000, 0.000000 +11546, -3.000000, 320.000000, 390.000000, 0.000000 +11547, -3.000000, 320.000000, 390.000000, 0.000000 +11548, -3.000000, 320.000000, 390.000000, 0.000000 +11549, -3.000000, 320.000000, 390.000000, 0.000000 +11550, -3.000000, 320.000000, 390.000000, 0.000000 +11551, -3.000000, 320.000000, 390.000000, 0.000000 +11552, -3.000000, 320.000000, 390.000000, 0.000000 +11553, -3.000000, 320.000000, 390.000000, 0.000000 +11554, -3.000000, 320.000000, 390.000000, 0.000000 +11555, -3.000000, 320.000000, 390.000000, 0.000000 +11556, -3.000000, 320.000000, 390.000000, 0.000000 +11557, -3.000000, 320.000000, 390.000000, 0.000000 +11558, -3.000000, 320.000000, 390.000000, 0.000000 +11559, -3.000000, 320.000000, 390.000000, 0.000000 +11560, -3.000000, 320.000000, 390.000000, 0.000000 +11561, -3.000000, 320.000000, 390.000000, 0.000000 +11562, -3.000000, 320.000000, 390.000000, 0.000000 +11563, -3.000000, 320.000000, 390.000000, 0.000000 +11564, -3.000000, 320.000000, 390.000000, 0.000000 +11565, -3.000000, 320.000000, 390.000000, 0.000000 +11566, -3.000000, 320.000000, 390.000000, 0.000000 +11567, -3.000000, 320.000000, 390.000000, 0.000000 +11568, -3.000000, 320.000000, 390.000000, 0.000000 +11569, -3.000000, 320.000000, 390.000000, 0.000000 +11570, -3.000000, 320.000000, 390.000000, 0.000000 +11571, -3.000000, 320.000000, 390.000000, 0.000000 +11572, -3.000000, 320.000000, 390.000000, 0.000000 +11573, -3.000000, 320.000000, 390.000000, 0.000000 +11574, -3.000000, 320.000000, 390.000000, 0.000000 +11575, -3.000000, 320.000000, 390.000000, 0.000000 +11576, -3.000000, 320.000000, 390.000000, 0.000000 +11577, -3.000000, 320.000000, 390.000000, 0.000000 +11578, -3.000000, 320.000000, 390.000000, 0.000000 +11579, -3.000000, 320.000000, 390.000000, 0.000000 +11580, -3.000000, 320.000000, 390.000000, 0.000000 +11581, -3.000000, 320.000000, 390.000000, 0.000000 +11582, -3.000000, 320.000000, 390.000000, 0.000000 +11583, -3.000000, 320.000000, 390.000000, 0.000000 +11584, -3.000000, 320.000000, 390.000000, 0.000000 +11585, -3.000000, 320.000000, 390.000000, 0.000000 +11586, -3.000000, 320.000000, 390.000000, 0.000000 +11587, -3.000000, 320.000000, 390.000000, 0.000000 +11588, -3.000000, 320.000000, 390.000000, 0.000000 +11589, -3.000000, 320.000000, 390.000000, 0.000000 +11590, -3.000000, 320.000000, 390.000000, 0.000000 +11591, -3.000000, 320.000000, 390.000000, 0.000000 +11592, -3.000000, 320.000000, 390.000000, 0.000000 +11593, -3.000000, 320.000000, 390.000000, 0.000000 +11594, -3.000000, 320.000000, 390.000000, 0.000000 +11595, -3.000000, 320.000000, 390.000000, 0.000000 +11596, -3.000000, 320.000000, 390.000000, 0.000000 +11597, -3.000000, 320.000000, 390.000000, 0.000000 +11598, -3.000000, 320.000000, 390.000000, 0.000000 +11599, -3.000000, 320.000000, 390.000000, 0.000000 +11600, -3.000000, 322.000000, 393.000000, 0.000000 +11601, -3.000000, 322.000000, 393.000000, 0.000000 +11602, -3.000000, 322.000000, 393.000000, 0.000000 +11603, -3.000000, 322.000000, 393.000000, 0.000000 +11604, -3.000000, 322.000000, 393.000000, 0.000000 +11605, -3.000000, 322.000000, 393.000000, 0.000000 +11606, -3.000000, 322.000000, 393.000000, 0.000000 +11607, -3.000000, 322.000000, 393.000000, 0.000000 +11608, -3.000000, 322.000000, 393.000000, 0.000000 +11609, -3.000000, 322.000000, 393.000000, 0.000000 +11610, -3.000000, 322.000000, 393.000000, 0.000000 +11611, -3.000000, 322.000000, 393.000000, 0.000000 +11612, -3.000000, 322.000000, 393.000000, 0.000000 +11613, -3.000000, 322.000000, 393.000000, 0.000000 +11614, -3.000000, 322.000000, 393.000000, 0.000000 +11615, -3.000000, 322.000000, 393.000000, 0.000000 +11616, -3.000000, 322.000000, 393.000000, 0.000000 +11617, -3.000000, 322.000000, 393.000000, 0.000000 +11618, -3.000000, 322.000000, 393.000000, 0.000000 +11619, -3.000000, 322.000000, 393.000000, 0.000000 +11620, -3.000000, 322.000000, 393.000000, 0.000000 +11621, -3.000000, 322.000000, 393.000000, 0.000000 +11622, -3.000000, 322.000000, 393.000000, 0.000000 +11623, -3.000000, 322.000000, 393.000000, 0.000000 +11624, -3.000000, 322.000000, 393.000000, 0.000000 +11625, -3.000000, 322.000000, 393.000000, 0.000000 +11626, -3.000000, 322.000000, 393.000000, 0.000000 +11627, -3.000000, 322.000000, 393.000000, 0.000000 +11628, -3.000000, 322.000000, 393.000000, 0.000000 +11629, -3.000000, 322.000000, 393.000000, 0.000000 +11630, -3.000000, 322.000000, 393.000000, 0.000000 +11631, -3.000000, 322.000000, 393.000000, 0.000000 +11632, -3.000000, 322.000000, 393.000000, 0.000000 +11633, -3.000000, 322.000000, 393.000000, 0.000000 +11634, -3.000000, 322.000000, 393.000000, 0.000000 +11635, -3.000000, 322.000000, 393.000000, 0.000000 +11636, -3.000000, 322.000000, 393.000000, 0.000000 +11637, -3.000000, 322.000000, 393.000000, 0.000000 +11638, -3.000000, 322.000000, 393.000000, 0.000000 +11639, -3.000000, 322.000000, 393.000000, 0.000000 +11640, -3.000000, 322.000000, 393.000000, 0.000000 +11641, -3.000000, 322.000000, 393.000000, 0.000000 +11642, -3.000000, 322.000000, 393.000000, 0.000000 +11643, -3.000000, 322.000000, 393.000000, 0.000000 +11644, -3.000000, 322.000000, 393.000000, 0.000000 +11645, -3.000000, 322.000000, 393.000000, 0.000000 +11646, -3.000000, 322.000000, 393.000000, 0.000000 +11647, -3.000000, 322.000000, 393.000000, 0.000000 +11648, -3.000000, 322.000000, 393.000000, 0.000000 +11649, -3.000000, 322.000000, 393.000000, 0.000000 +11650, -3.000000, 322.000000, 393.000000, 0.000000 +11651, -3.000000, 322.000000, 393.000000, 0.000000 +11652, -3.000000, 322.000000, 393.000000, 0.000000 +11653, -3.000000, 322.000000, 393.000000, 0.000000 +11654, -3.000000, 322.000000, 393.000000, 0.000000 +11655, -3.000000, 322.000000, 393.000000, 0.000000 +11656, -3.000000, 322.000000, 393.000000, 0.000000 +11657, -3.000000, 322.000000, 393.000000, 0.000000 +11658, -3.000000, 322.000000, 393.000000, 0.000000 +11659, -3.000000, 322.000000, 393.000000, 0.000000 +11660, -3.000000, 322.000000, 393.000000, 0.000000 +11661, -3.000000, 322.000000, 393.000000, 0.000000 +11662, -3.000000, 322.000000, 393.000000, 0.000000 +11663, -3.000000, 322.000000, 393.000000, 0.000000 +11664, -3.000000, 322.000000, 393.000000, 0.000000 +11665, -3.000000, 322.000000, 393.000000, 0.000000 +11666, -3.000000, 322.000000, 393.000000, 0.000000 +11667, -3.000000, 322.000000, 393.000000, 0.000000 +11668, -3.000000, 322.000000, 393.000000, 0.000000 +11669, -3.000000, 322.000000, 393.000000, 0.000000 +11670, -3.000000, 322.000000, 393.000000, 0.000000 +11671, -3.000000, 322.000000, 393.000000, 0.000000 +11672, -3.000000, 322.000000, 393.000000, 0.000000 +11673, -3.000000, 322.000000, 393.000000, 0.000000 +11674, -3.000000, 322.000000, 393.000000, 0.000000 +11675, -3.000000, 322.000000, 393.000000, 0.000000 +11676, -3.000000, 322.000000, 393.000000, 0.000000 +11677, -3.000000, 322.000000, 393.000000, 0.000000 +11678, -3.000000, 322.000000, 393.000000, 0.000000 +11679, -3.000000, 322.000000, 393.000000, 0.000000 +11680, -3.000000, 322.000000, 393.000000, 0.000000 +11681, -3.000000, 322.000000, 393.000000, 0.000000 +11682, -3.000000, 322.000000, 393.000000, 0.000000 +11683, -3.000000, 322.000000, 393.000000, 0.000000 +11684, -3.000000, 322.000000, 393.000000, 0.000000 +11685, -3.000000, 322.000000, 393.000000, 0.000000 +11686, -3.000000, 322.000000, 393.000000, 0.000000 +11687, -3.000000, 322.000000, 393.000000, 0.000000 +11688, -3.000000, 322.000000, 393.000000, 0.000000 +11689, -3.000000, 322.000000, 393.000000, 0.000000 +11690, -3.000000, 322.000000, 393.000000, 0.000000 +11691, -3.000000, 322.000000, 393.000000, 0.000000 +11692, -3.000000, 322.000000, 393.000000, 0.000000 +11693, -3.000000, 322.000000, 393.000000, 0.000000 +11694, -3.000000, 322.000000, 393.000000, 0.000000 +11695, -3.000000, 322.000000, 393.000000, 0.000000 +11696, -3.000000, 322.000000, 393.000000, 0.000000 +11697, -3.000000, 322.000000, 393.000000, 0.000000 +11698, -3.000000, 322.000000, 393.000000, 0.000000 +11699, -3.000000, 322.000000, 393.000000, 0.000000 +11700, -3.000000, 324.000000, 396.000000, 0.000000 +11701, -3.000000, 324.000000, 396.000000, 0.000000 +11702, -3.000000, 324.000000, 396.000000, 0.000000 +11703, -3.000000, 324.000000, 396.000000, 0.000000 +11704, -3.000000, 324.000000, 396.000000, 0.000000 +11705, -3.000000, 324.000000, 396.000000, 0.000000 +11706, -3.000000, 324.000000, 396.000000, 0.000000 +11707, -3.000000, 324.000000, 396.000000, 0.000000 +11708, -3.000000, 324.000000, 396.000000, 0.000000 +11709, -3.000000, 324.000000, 396.000000, 0.000000 +11710, -3.000000, 324.000000, 396.000000, 0.000000 +11711, -3.000000, 324.000000, 396.000000, 0.000000 +11712, -3.000000, 324.000000, 396.000000, 0.000000 +11713, -3.000000, 324.000000, 396.000000, 0.000000 +11714, -3.000000, 324.000000, 396.000000, 0.000000 +11715, -3.000000, 324.000000, 396.000000, 0.000000 +11716, -3.000000, 324.000000, 396.000000, 0.000000 +11717, -3.000000, 324.000000, 396.000000, 0.000000 +11718, -3.000000, 324.000000, 396.000000, 0.000000 +11719, -3.000000, 324.000000, 396.000000, 0.000000 +11720, -3.000000, 324.000000, 396.000000, 0.000000 +11721, -3.000000, 324.000000, 396.000000, 0.000000 +11722, -3.000000, 324.000000, 396.000000, 0.000000 +11723, -3.000000, 324.000000, 396.000000, 0.000000 +11724, -3.000000, 324.000000, 396.000000, 0.000000 +11725, -3.000000, 324.000000, 396.000000, 0.000000 +11726, -3.000000, 324.000000, 396.000000, 0.000000 +11727, -3.000000, 324.000000, 396.000000, 0.000000 +11728, -3.000000, 324.000000, 396.000000, 0.000000 +11729, -3.000000, 324.000000, 396.000000, 0.000000 +11730, -3.000000, 324.000000, 396.000000, 0.000000 +11731, -3.000000, 324.000000, 396.000000, 0.000000 +11732, -3.000000, 324.000000, 396.000000, 0.000000 +11733, -3.000000, 324.000000, 396.000000, 0.000000 +11734, -3.000000, 324.000000, 396.000000, 0.000000 +11735, -3.000000, 324.000000, 396.000000, 0.000000 +11736, -3.000000, 324.000000, 396.000000, 0.000000 +11737, -3.000000, 324.000000, 396.000000, 0.000000 +11738, -3.000000, 324.000000, 396.000000, 0.000000 +11739, -3.000000, 324.000000, 396.000000, 0.000000 +11740, -3.000000, 324.000000, 396.000000, 0.000000 +11741, -3.000000, 324.000000, 396.000000, 0.000000 +11742, -3.000000, 324.000000, 396.000000, 0.000000 +11743, -3.000000, 324.000000, 396.000000, 0.000000 +11744, -3.000000, 324.000000, 396.000000, 0.000000 +11745, -3.000000, 324.000000, 396.000000, 0.000000 +11746, -3.000000, 324.000000, 396.000000, 0.000000 +11747, -3.000000, 324.000000, 396.000000, 0.000000 +11748, -3.000000, 324.000000, 396.000000, 0.000000 +11749, -3.000000, 324.000000, 396.000000, 0.000000 +11750, -3.000000, 324.000000, 396.000000, 0.000000 +11751, -3.000000, 324.000000, 396.000000, 0.000000 +11752, -3.000000, 324.000000, 396.000000, 0.000000 +11753, -3.000000, 324.000000, 396.000000, 0.000000 +11754, -3.000000, 324.000000, 396.000000, 0.000000 +11755, -3.000000, 324.000000, 396.000000, 0.000000 +11756, -3.000000, 324.000000, 396.000000, 0.000000 +11757, -3.000000, 324.000000, 396.000000, 0.000000 +11758, -3.000000, 324.000000, 396.000000, 0.000000 +11759, -3.000000, 324.000000, 396.000000, 0.000000 +11760, -3.000000, 324.000000, 396.000000, 0.000000 +11761, -3.000000, 324.000000, 396.000000, 0.000000 +11762, -3.000000, 324.000000, 396.000000, 0.000000 +11763, -3.000000, 324.000000, 396.000000, 0.000000 +11764, -3.000000, 324.000000, 396.000000, 0.000000 +11765, -3.000000, 324.000000, 396.000000, 0.000000 +11766, -3.000000, 324.000000, 396.000000, 0.000000 +11767, -3.000000, 324.000000, 396.000000, 0.000000 +11768, -3.000000, 324.000000, 396.000000, 0.000000 +11769, -3.000000, 324.000000, 396.000000, 0.000000 +11770, -3.000000, 324.000000, 396.000000, 0.000000 +11771, -3.000000, 324.000000, 396.000000, 0.000000 +11772, -3.000000, 324.000000, 396.000000, 0.000000 +11773, -3.000000, 324.000000, 396.000000, 0.000000 +11774, -3.000000, 324.000000, 396.000000, 0.000000 +11775, -3.000000, 324.000000, 396.000000, 0.000000 +11776, -3.000000, 324.000000, 396.000000, 0.000000 +11777, -3.000000, 324.000000, 396.000000, 0.000000 +11778, -3.000000, 324.000000, 396.000000, 0.000000 +11779, -3.000000, 324.000000, 396.000000, 0.000000 +11780, -3.000000, 324.000000, 396.000000, 0.000000 +11781, -3.000000, 324.000000, 396.000000, 0.000000 +11782, -3.000000, 324.000000, 396.000000, 0.000000 +11783, -3.000000, 324.000000, 396.000000, 0.000000 +11784, -3.000000, 324.000000, 396.000000, 0.000000 +11785, -3.000000, 324.000000, 396.000000, 0.000000 +11786, -3.000000, 324.000000, 396.000000, 0.000000 +11787, -3.000000, 324.000000, 396.000000, 0.000000 +11788, -3.000000, 324.000000, 396.000000, 0.000000 +11789, -3.000000, 324.000000, 396.000000, 0.000000 +11790, -3.000000, 324.000000, 396.000000, 0.000000 +11791, -3.000000, 324.000000, 396.000000, 0.000000 +11792, -3.000000, 324.000000, 396.000000, 0.000000 +11793, -3.000000, 324.000000, 396.000000, 0.000000 +11794, -3.000000, 324.000000, 396.000000, 0.000000 +11795, -3.000000, 324.000000, 396.000000, 0.000000 +11796, -3.000000, 324.000000, 396.000000, 0.000000 +11797, -3.000000, 324.000000, 396.000000, 0.000000 +11798, -3.000000, 324.000000, 396.000000, 0.000000 +11799, -3.000000, 324.000000, 396.000000, 0.000000 +11800, -3.000000, 326.000000, 399.000000, 0.000000 +11801, -3.000000, 326.000000, 399.000000, 0.000000 +11802, -3.000000, 326.000000, 399.000000, 0.000000 +11803, -3.000000, 326.000000, 399.000000, 0.000000 +11804, -3.000000, 326.000000, 399.000000, 0.000000 +11805, -3.000000, 326.000000, 399.000000, 0.000000 +11806, -3.000000, 326.000000, 399.000000, 0.000000 +11807, -3.000000, 326.000000, 399.000000, 0.000000 +11808, -3.000000, 326.000000, 399.000000, 0.000000 +11809, -3.000000, 326.000000, 399.000000, 0.000000 +11810, -3.000000, 326.000000, 399.000000, 0.000000 +11811, -3.000000, 326.000000, 399.000000, 0.000000 +11812, -3.000000, 326.000000, 399.000000, 0.000000 +11813, -3.000000, 326.000000, 399.000000, 0.000000 +11814, -3.000000, 326.000000, 399.000000, 0.000000 +11815, -3.000000, 326.000000, 399.000000, 0.000000 +11816, -3.000000, 326.000000, 399.000000, 0.000000 +11817, -3.000000, 326.000000, 399.000000, 0.000000 +11818, -3.000000, 326.000000, 399.000000, 0.000000 +11819, -3.000000, 326.000000, 399.000000, 0.000000 +11820, -3.000000, 326.000000, 399.000000, 0.000000 +11821, -3.000000, 326.000000, 399.000000, 0.000000 +11822, -3.000000, 326.000000, 399.000000, 0.000000 +11823, -3.000000, 326.000000, 399.000000, 0.000000 +11824, -3.000000, 326.000000, 399.000000, 0.000000 +11825, -3.000000, 326.000000, 399.000000, 0.000000 +11826, -3.000000, 326.000000, 399.000000, 0.000000 +11827, -3.000000, 326.000000, 399.000000, 0.000000 +11828, -3.000000, 326.000000, 399.000000, 0.000000 +11829, -3.000000, 326.000000, 399.000000, 0.000000 +11830, -3.000000, 326.000000, 399.000000, 0.000000 +11831, -3.000000, 326.000000, 399.000000, 0.000000 +11832, -3.000000, 326.000000, 399.000000, 0.000000 +11833, -3.000000, 326.000000, 399.000000, 0.000000 +11834, -3.000000, 326.000000, 399.000000, 0.000000 +11835, -3.000000, 326.000000, 399.000000, 0.000000 +11836, -3.000000, 326.000000, 399.000000, 0.000000 +11837, -3.000000, 326.000000, 399.000000, 0.000000 +11838, -3.000000, 326.000000, 399.000000, 0.000000 +11839, -3.000000, 326.000000, 399.000000, 0.000000 +11840, -3.000000, 326.000000, 399.000000, 0.000000 +11841, -3.000000, 326.000000, 399.000000, 0.000000 +11842, -3.000000, 326.000000, 399.000000, 0.000000 +11843, -3.000000, 326.000000, 399.000000, 0.000000 +11844, -3.000000, 326.000000, 399.000000, 0.000000 +11845, -3.000000, 326.000000, 399.000000, 0.000000 +11846, -3.000000, 326.000000, 399.000000, 0.000000 +11847, -3.000000, 326.000000, 399.000000, 0.000000 +11848, -3.000000, 326.000000, 399.000000, 0.000000 +11849, -3.000000, 326.000000, 399.000000, 0.000000 +11850, -3.000000, 326.000000, 399.000000, 0.000000 +11851, -3.000000, 326.000000, 399.000000, 0.000000 +11852, -3.000000, 326.000000, 399.000000, 0.000000 +11853, -3.000000, 326.000000, 399.000000, 0.000000 +11854, -3.000000, 326.000000, 399.000000, 0.000000 +11855, -3.000000, 326.000000, 399.000000, 0.000000 +11856, -3.000000, 326.000000, 399.000000, 0.000000 +11857, -3.000000, 326.000000, 399.000000, 0.000000 +11858, -3.000000, 326.000000, 399.000000, 0.000000 +11859, -3.000000, 326.000000, 399.000000, 0.000000 +11860, -3.000000, 326.000000, 399.000000, 0.000000 +11861, -3.000000, 326.000000, 399.000000, 0.000000 +11862, -3.000000, 326.000000, 399.000000, 0.000000 +11863, -3.000000, 326.000000, 399.000000, 0.000000 +11864, -3.000000, 326.000000, 399.000000, 0.000000 +11865, -3.000000, 326.000000, 399.000000, 0.000000 +11866, -3.000000, 326.000000, 399.000000, 0.000000 +11867, -3.000000, 326.000000, 399.000000, 0.000000 +11868, -3.000000, 326.000000, 399.000000, 0.000000 +11869, -3.000000, 326.000000, 399.000000, 0.000000 +11870, -3.000000, 326.000000, 399.000000, 0.000000 +11871, -3.000000, 326.000000, 399.000000, 0.000000 +11872, -3.000000, 326.000000, 399.000000, 0.000000 +11873, -3.000000, 326.000000, 399.000000, 0.000000 +11874, -3.000000, 326.000000, 399.000000, 0.000000 +11875, -3.000000, 326.000000, 399.000000, 0.000000 +11876, -3.000000, 326.000000, 399.000000, 0.000000 +11877, -3.000000, 326.000000, 399.000000, 0.000000 +11878, -3.000000, 326.000000, 399.000000, 0.000000 +11879, -3.000000, 326.000000, 399.000000, 0.000000 +11880, -3.000000, 326.000000, 399.000000, 0.000000 +11881, -3.000000, 326.000000, 399.000000, 0.000000 +11882, -3.000000, 326.000000, 399.000000, 0.000000 +11883, -3.000000, 326.000000, 399.000000, 0.000000 +11884, -3.000000, 326.000000, 399.000000, 0.000000 +11885, -3.000000, 326.000000, 399.000000, 0.000000 +11886, -3.000000, 326.000000, 399.000000, 0.000000 +11887, -3.000000, 326.000000, 399.000000, 0.000000 +11888, -3.000000, 326.000000, 399.000000, 0.000000 +11889, -3.000000, 326.000000, 399.000000, 0.000000 +11890, -3.000000, 326.000000, 399.000000, 0.000000 +11891, -3.000000, 326.000000, 399.000000, 0.000000 +11892, -3.000000, 326.000000, 399.000000, 0.000000 +11893, -3.000000, 326.000000, 399.000000, 0.000000 +11894, -3.000000, 326.000000, 399.000000, 0.000000 +11895, -3.000000, 326.000000, 399.000000, 0.000000 +11896, -3.000000, 326.000000, 399.000000, 0.000000 +11897, -3.000000, 326.000000, 399.000000, 0.000000 +11898, -3.000000, 326.000000, 399.000000, 0.000000 +11899, -3.000000, 326.000000, 399.000000, 0.000000 +11900, -3.000000, 328.000000, 402.000000, 0.000000 +11901, -3.000000, 328.000000, 402.000000, 0.000000 +11902, -3.000000, 328.000000, 402.000000, 0.000000 +11903, -3.000000, 328.000000, 402.000000, 0.000000 +11904, -3.000000, 328.000000, 402.000000, 0.000000 +11905, -3.000000, 328.000000, 402.000000, 0.000000 +11906, -3.000000, 328.000000, 402.000000, 0.000000 +11907, -3.000000, 328.000000, 402.000000, 0.000000 +11908, -3.000000, 328.000000, 402.000000, 0.000000 +11909, -3.000000, 328.000000, 402.000000, 0.000000 +11910, -3.000000, 328.000000, 402.000000, 0.000000 +11911, -3.000000, 328.000000, 402.000000, 0.000000 +11912, -3.000000, 328.000000, 402.000000, 0.000000 +11913, -3.000000, 328.000000, 402.000000, 0.000000 +11914, -3.000000, 328.000000, 402.000000, 0.000000 +11915, -3.000000, 328.000000, 402.000000, 0.000000 +11916, -3.000000, 328.000000, 402.000000, 0.000000 +11917, -3.000000, 328.000000, 402.000000, 0.000000 +11918, -3.000000, 328.000000, 402.000000, 0.000000 +11919, -3.000000, 328.000000, 402.000000, 0.000000 +11920, -3.000000, 328.000000, 402.000000, 0.000000 +11921, -3.000000, 328.000000, 402.000000, 0.000000 +11922, -3.000000, 328.000000, 402.000000, 0.000000 +11923, -3.000000, 328.000000, 402.000000, 0.000000 +11924, -3.000000, 328.000000, 402.000000, 0.000000 +11925, -3.000000, 328.000000, 402.000000, 0.000000 +11926, -3.000000, 328.000000, 402.000000, 0.000000 +11927, -3.000000, 328.000000, 402.000000, 0.000000 +11928, -3.000000, 328.000000, 402.000000, 0.000000 +11929, -3.000000, 328.000000, 402.000000, 0.000000 +11930, -3.000000, 328.000000, 402.000000, 0.000000 +11931, -3.000000, 328.000000, 402.000000, 0.000000 +11932, -3.000000, 328.000000, 402.000000, 0.000000 +11933, -3.000000, 328.000000, 402.000000, 0.000000 +11934, -3.000000, 328.000000, 402.000000, 0.000000 +11935, -3.000000, 328.000000, 402.000000, 0.000000 +11936, -3.000000, 328.000000, 402.000000, 0.000000 +11937, -3.000000, 328.000000, 402.000000, 0.000000 +11938, -3.000000, 328.000000, 402.000000, 0.000000 +11939, -3.000000, 328.000000, 402.000000, 0.000000 +11940, -3.000000, 328.000000, 402.000000, 0.000000 +11941, -3.000000, 328.000000, 402.000000, 0.000000 +11942, -3.000000, 328.000000, 402.000000, 0.000000 +11943, -3.000000, 328.000000, 402.000000, 0.000000 +11944, -3.000000, 328.000000, 402.000000, 0.000000 +11945, -3.000000, 328.000000, 402.000000, 0.000000 +11946, -3.000000, 328.000000, 402.000000, 0.000000 +11947, -3.000000, 328.000000, 402.000000, 0.000000 +11948, -3.000000, 328.000000, 402.000000, 0.000000 +11949, -3.000000, 328.000000, 402.000000, 0.000000 +11950, -3.000000, 328.000000, 402.000000, 0.000000 +11951, -3.000000, 328.000000, 402.000000, 0.000000 +11952, -3.000000, 328.000000, 402.000000, 0.000000 +11953, -3.000000, 328.000000, 402.000000, 0.000000 +11954, -3.000000, 328.000000, 402.000000, 0.000000 +11955, -3.000000, 328.000000, 402.000000, 0.000000 +11956, -3.000000, 328.000000, 402.000000, 0.000000 +11957, -3.000000, 328.000000, 402.000000, 0.000000 +11958, -3.000000, 328.000000, 402.000000, 0.000000 +11959, -3.000000, 328.000000, 402.000000, 0.000000 +11960, -3.000000, 328.000000, 402.000000, 0.000000 +11961, -3.000000, 328.000000, 402.000000, 0.000000 +11962, -3.000000, 328.000000, 402.000000, 0.000000 +11963, -3.000000, 328.000000, 402.000000, 0.000000 +11964, -3.000000, 328.000000, 402.000000, 0.000000 +11965, -3.000000, 328.000000, 402.000000, 0.000000 +11966, -3.000000, 328.000000, 402.000000, 0.000000 +11967, -3.000000, 328.000000, 402.000000, 0.000000 +11968, -3.000000, 328.000000, 402.000000, 0.000000 +11969, -3.000000, 328.000000, 402.000000, 0.000000 +11970, -3.000000, 328.000000, 402.000000, 0.000000 +11971, -3.000000, 328.000000, 402.000000, 0.000000 +11972, -3.000000, 328.000000, 402.000000, 0.000000 +11973, -3.000000, 328.000000, 402.000000, 0.000000 +11974, -3.000000, 328.000000, 402.000000, 0.000000 +11975, -3.000000, 328.000000, 402.000000, 0.000000 +11976, -3.000000, 328.000000, 402.000000, 0.000000 +11977, -3.000000, 328.000000, 402.000000, 0.000000 +11978, -3.000000, 328.000000, 402.000000, 0.000000 +11979, -3.000000, 328.000000, 402.000000, 0.000000 +11980, -3.000000, 328.000000, 402.000000, 0.000000 +11981, -3.000000, 328.000000, 402.000000, 0.000000 +11982, -3.000000, 328.000000, 402.000000, 0.000000 +11983, -3.000000, 328.000000, 402.000000, 0.000000 +11984, -3.000000, 328.000000, 402.000000, 0.000000 +11985, -3.000000, 328.000000, 402.000000, 0.000000 +11986, -3.000000, 328.000000, 402.000000, 0.000000 +11987, -3.000000, 328.000000, 402.000000, 0.000000 +11988, -3.000000, 328.000000, 402.000000, 0.000000 +11989, -3.000000, 328.000000, 402.000000, 0.000000 +11990, -3.000000, 328.000000, 402.000000, 0.000000 +11991, -3.000000, 328.000000, 402.000000, 0.000000 +11992, -3.000000, 328.000000, 402.000000, 0.000000 +11993, -3.000000, 328.000000, 402.000000, 0.000000 +11994, -3.000000, 328.000000, 402.000000, 0.000000 +11995, -3.000000, 328.000000, 402.000000, 0.000000 +11996, -3.000000, 328.000000, 402.000000, 0.000000 +11997, -3.000000, 328.000000, 402.000000, 0.000000 +11998, -3.000000, 328.000000, 402.000000, 0.000000 +11999, -3.000000, 328.000000, 402.000000, 0.000000 diff --git a/scripts/trajectories/azi+2-ele+2-every-100-frames.csv b/scripts/trajectories/azi+2-ele+2-every-100-frames.csv new file mode 100644 index 0000000000..4dcf81416a --- /dev/null +++ b/scripts/trajectories/azi+2-ele+2-every-100-frames.csv @@ -0,0 +1,12000 @@ +0, 0.653281, -0.270598, 0.270598, 0.653281 +1, 0.653281, -0.270598, 0.270598, 0.653281 +2, 0.653281, -0.270598, 0.270598, 0.653281 +3, 0.653281, -0.270598, 0.270598, 0.653281 +4, 0.653281, -0.270598, 0.270598, 0.653281 +5, 0.653281, -0.270598, 0.270598, 0.653281 +6, 0.653281, -0.270598, 0.270598, 0.653281 +7, 0.653281, -0.270598, 0.270598, 0.653281 +8, 0.653281, -0.270598, 0.270598, 0.653281 +9, 0.653281, -0.270598, 0.270598, 0.653281 +10, 0.653281, -0.270598, 0.270598, 0.653281 +11, 0.653281, -0.270598, 0.270598, 0.653281 +12, 0.653281, -0.270598, 0.270598, 0.653281 +13, 0.653281, -0.270598, 0.270598, 0.653281 +14, 0.653281, -0.270598, 0.270598, 0.653281 +15, 0.653281, -0.270598, 0.270598, 0.653281 +16, 0.653281, -0.270598, 0.270598, 0.653281 +17, 0.653281, -0.270598, 0.270598, 0.653281 +18, 0.653281, -0.270598, 0.270598, 0.653281 +19, 0.653281, -0.270598, 0.270598, 0.653281 +20, 0.653281, -0.270598, 0.270598, 0.653281 +21, 0.653281, -0.270598, 0.270598, 0.653281 +22, 0.653281, -0.270598, 0.270598, 0.653281 +23, 0.653281, -0.270598, 0.270598, 0.653281 +24, 0.653281, -0.270598, 0.270598, 0.653281 +25, 0.653281, -0.270598, 0.270598, 0.653281 +26, 0.653281, -0.270598, 0.270598, 0.653281 +27, 0.653281, -0.270598, 0.270598, 0.653281 +28, 0.653281, -0.270598, 0.270598, 0.653281 +29, 0.653281, -0.270598, 0.270598, 0.653281 +30, 0.653281, -0.270598, 0.270598, 0.653281 +31, 0.653281, -0.270598, 0.270598, 0.653281 +32, 0.653281, -0.270598, 0.270598, 0.653281 +33, 0.653281, -0.270598, 0.270598, 0.653281 +34, 0.653281, -0.270598, 0.270598, 0.653281 +35, 0.653281, -0.270598, 0.270598, 0.653281 +36, 0.653281, -0.270598, 0.270598, 0.653281 +37, 0.653281, -0.270598, 0.270598, 0.653281 +38, 0.653281, -0.270598, 0.270598, 0.653281 +39, 0.653281, -0.270598, 0.270598, 0.653281 +40, 0.653281, -0.270598, 0.270598, 0.653281 +41, 0.653281, -0.270598, 0.270598, 0.653281 +42, 0.653281, -0.270598, 0.270598, 0.653281 +43, 0.653281, -0.270598, 0.270598, 0.653281 +44, 0.653281, -0.270598, 0.270598, 0.653281 +45, 0.653281, -0.270598, 0.270598, 0.653281 +46, 0.653281, -0.270598, 0.270598, 0.653281 +47, 0.653281, -0.270598, 0.270598, 0.653281 +48, 0.653281, -0.270598, 0.270598, 0.653281 +49, 0.653281, -0.270598, 0.270598, 0.653281 +50, 0.653281, -0.270598, 0.270598, 0.653281 +51, 0.653281, -0.270598, 0.270598, 0.653281 +52, 0.653281, -0.270598, 0.270598, 0.653281 +53, 0.653281, -0.270598, 0.270598, 0.653281 +54, 0.653281, -0.270598, 0.270598, 0.653281 +55, 0.653281, -0.270598, 0.270598, 0.653281 +56, 0.653281, -0.270598, 0.270598, 0.653281 +57, 0.653281, -0.270598, 0.270598, 0.653281 +58, 0.653281, -0.270598, 0.270598, 0.653281 +59, 0.653281, -0.270598, 0.270598, 0.653281 +60, 0.653281, -0.270598, 0.270598, 0.653281 +61, 0.653281, -0.270598, 0.270598, 0.653281 +62, 0.653281, -0.270598, 0.270598, 0.653281 +63, 0.653281, -0.270598, 0.270598, 0.653281 +64, 0.653281, -0.270598, 0.270598, 0.653281 +65, 0.653281, -0.270598, 0.270598, 0.653281 +66, 0.653281, -0.270598, 0.270598, 0.653281 +67, 0.653281, -0.270598, 0.270598, 0.653281 +68, 0.653281, -0.270598, 0.270598, 0.653281 +69, 0.653281, -0.270598, 0.270598, 0.653281 +70, 0.653281, -0.270598, 0.270598, 0.653281 +71, 0.653281, -0.270598, 0.270598, 0.653281 +72, 0.653281, -0.270598, 0.270598, 0.653281 +73, 0.653281, -0.270598, 0.270598, 0.653281 +74, 0.653281, -0.270598, 0.270598, 0.653281 +75, 0.653281, -0.270598, 0.270598, 0.653281 +76, 0.653281, -0.270598, 0.270598, 0.653281 +77, 0.653281, -0.270598, 0.270598, 0.653281 +78, 0.653281, -0.270598, 0.270598, 0.653281 +79, 0.653281, -0.270598, 0.270598, 0.653281 +80, 0.653281, -0.270598, 0.270598, 0.653281 +81, 0.653281, -0.270598, 0.270598, 0.653281 +82, 0.653281, -0.270598, 0.270598, 0.653281 +83, 0.653281, -0.270598, 0.270598, 0.653281 +84, 0.653281, -0.270598, 0.270598, 0.653281 +85, 0.653281, -0.270598, 0.270598, 0.653281 +86, 0.653281, -0.270598, 0.270598, 0.653281 +87, 0.653281, -0.270598, 0.270598, 0.653281 +88, 0.653281, -0.270598, 0.270598, 0.653281 +89, 0.653281, -0.270598, 0.270598, 0.653281 +90, 0.653281, -0.270598, 0.270598, 0.653281 +91, 0.653281, -0.270598, 0.270598, 0.653281 +92, 0.653281, -0.270598, 0.270598, 0.653281 +93, 0.653281, -0.270598, 0.270598, 0.653281 +94, 0.653281, -0.270598, 0.270598, 0.653281 +95, 0.653281, -0.270598, 0.270598, 0.653281 +96, 0.653281, -0.270598, 0.270598, 0.653281 +97, 0.653281, -0.270598, 0.270598, 0.653281 +98, 0.653281, -0.270598, 0.270598, 0.653281 +99, 0.653281, -0.270598, 0.270598, 0.653281 +100, 0.634602, -0.292582, 0.282543, 0.657150 +101, 0.634602, -0.292582, 0.282543, 0.657150 +102, 0.634602, -0.292582, 0.282543, 0.657150 +103, 0.634602, -0.292582, 0.282543, 0.657150 +104, 0.634602, -0.292582, 0.282543, 0.657150 +105, 0.634602, -0.292582, 0.282543, 0.657150 +106, 0.634602, -0.292582, 0.282543, 0.657150 +107, 0.634602, -0.292582, 0.282543, 0.657150 +108, 0.634602, -0.292582, 0.282543, 0.657150 +109, 0.634602, -0.292582, 0.282543, 0.657150 +110, 0.634602, -0.292582, 0.282543, 0.657150 +111, 0.634602, -0.292582, 0.282543, 0.657150 +112, 0.634602, -0.292582, 0.282543, 0.657150 +113, 0.634602, -0.292582, 0.282543, 0.657150 +114, 0.634602, -0.292582, 0.282543, 0.657150 +115, 0.634602, -0.292582, 0.282543, 0.657150 +116, 0.634602, -0.292582, 0.282543, 0.657150 +117, 0.634602, -0.292582, 0.282543, 0.657150 +118, 0.634602, -0.292582, 0.282543, 0.657150 +119, 0.634602, -0.292582, 0.282543, 0.657150 +120, 0.634602, -0.292582, 0.282543, 0.657150 +121, 0.634602, -0.292582, 0.282543, 0.657150 +122, 0.634602, -0.292582, 0.282543, 0.657150 +123, 0.634602, -0.292582, 0.282543, 0.657150 +124, 0.634602, -0.292582, 0.282543, 0.657150 +125, 0.634602, -0.292582, 0.282543, 0.657150 +126, 0.634602, -0.292582, 0.282543, 0.657150 +127, 0.634602, -0.292582, 0.282543, 0.657150 +128, 0.634602, -0.292582, 0.282543, 0.657150 +129, 0.634602, -0.292582, 0.282543, 0.657150 +130, 0.634602, -0.292582, 0.282543, 0.657150 +131, 0.634602, -0.292582, 0.282543, 0.657150 +132, 0.634602, -0.292582, 0.282543, 0.657150 +133, 0.634602, -0.292582, 0.282543, 0.657150 +134, 0.634602, -0.292582, 0.282543, 0.657150 +135, 0.634602, -0.292582, 0.282543, 0.657150 +136, 0.634602, -0.292582, 0.282543, 0.657150 +137, 0.634602, -0.292582, 0.282543, 0.657150 +138, 0.634602, -0.292582, 0.282543, 0.657150 +139, 0.634602, -0.292582, 0.282543, 0.657150 +140, 0.634602, -0.292582, 0.282543, 0.657150 +141, 0.634602, -0.292582, 0.282543, 0.657150 +142, 0.634602, -0.292582, 0.282543, 0.657150 +143, 0.634602, -0.292582, 0.282543, 0.657150 +144, 0.634602, -0.292582, 0.282543, 0.657150 +145, 0.634602, -0.292582, 0.282543, 0.657150 +146, 0.634602, -0.292582, 0.282543, 0.657150 +147, 0.634602, -0.292582, 0.282543, 0.657150 +148, 0.634602, -0.292582, 0.282543, 0.657150 +149, 0.634602, -0.292582, 0.282543, 0.657150 +150, 0.634602, -0.292582, 0.282543, 0.657150 +151, 0.634602, -0.292582, 0.282543, 0.657150 +152, 0.634602, -0.292582, 0.282543, 0.657150 +153, 0.634602, -0.292582, 0.282543, 0.657150 +154, 0.634602, -0.292582, 0.282543, 0.657150 +155, 0.634602, -0.292582, 0.282543, 0.657150 +156, 0.634602, -0.292582, 0.282543, 0.657150 +157, 0.634602, -0.292582, 0.282543, 0.657150 +158, 0.634602, -0.292582, 0.282543, 0.657150 +159, 0.634602, -0.292582, 0.282543, 0.657150 +160, 0.634602, -0.292582, 0.282543, 0.657150 +161, 0.634602, -0.292582, 0.282543, 0.657150 +162, 0.634602, -0.292582, 0.282543, 0.657150 +163, 0.634602, -0.292582, 0.282543, 0.657150 +164, 0.634602, -0.292582, 0.282543, 0.657150 +165, 0.634602, -0.292582, 0.282543, 0.657150 +166, 0.634602, -0.292582, 0.282543, 0.657150 +167, 0.634602, -0.292582, 0.282543, 0.657150 +168, 0.634602, -0.292582, 0.282543, 0.657150 +169, 0.634602, -0.292582, 0.282543, 0.657150 +170, 0.634602, -0.292582, 0.282543, 0.657150 +171, 0.634602, -0.292582, 0.282543, 0.657150 +172, 0.634602, -0.292582, 0.282543, 0.657150 +173, 0.634602, -0.292582, 0.282543, 0.657150 +174, 0.634602, -0.292582, 0.282543, 0.657150 +175, 0.634602, -0.292582, 0.282543, 0.657150 +176, 0.634602, -0.292582, 0.282543, 0.657150 +177, 0.634602, -0.292582, 0.282543, 0.657150 +178, 0.634602, -0.292582, 0.282543, 0.657150 +179, 0.634602, -0.292582, 0.282543, 0.657150 +180, 0.634602, -0.292582, 0.282543, 0.657150 +181, 0.634602, -0.292582, 0.282543, 0.657150 +182, 0.634602, -0.292582, 0.282543, 0.657150 +183, 0.634602, -0.292582, 0.282543, 0.657150 +184, 0.634602, -0.292582, 0.282543, 0.657150 +185, 0.634602, -0.292582, 0.282543, 0.657150 +186, 0.634602, -0.292582, 0.282543, 0.657150 +187, 0.634602, -0.292582, 0.282543, 0.657150 +188, 0.634602, -0.292582, 0.282543, 0.657150 +189, 0.634602, -0.292582, 0.282543, 0.657150 +190, 0.634602, -0.292582, 0.282543, 0.657150 +191, 0.634602, -0.292582, 0.282543, 0.657150 +192, 0.634602, -0.292582, 0.282543, 0.657150 +193, 0.634602, -0.292582, 0.282543, 0.657150 +194, 0.634602, -0.292582, 0.282543, 0.657150 +195, 0.634602, -0.292582, 0.282543, 0.657150 +196, 0.634602, -0.292582, 0.282543, 0.657150 +197, 0.634602, -0.292582, 0.282543, 0.657150 +198, 0.634602, -0.292582, 0.282543, 0.657150 +199, 0.634602, -0.292582, 0.282543, 0.657150 +200, 0.615562, -0.314856, 0.293608, 0.660109 +201, 0.615562, -0.314856, 0.293608, 0.660109 +202, 0.615562, -0.314856, 0.293608, 0.660109 +203, 0.615562, -0.314856, 0.293608, 0.660109 +204, 0.615562, -0.314856, 0.293608, 0.660109 +205, 0.615562, -0.314856, 0.293608, 0.660109 +206, 0.615562, -0.314856, 0.293608, 0.660109 +207, 0.615562, -0.314856, 0.293608, 0.660109 +208, 0.615562, -0.314856, 0.293608, 0.660109 +209, 0.615562, -0.314856, 0.293608, 0.660109 +210, 0.615562, -0.314856, 0.293608, 0.660109 +211, 0.615562, -0.314856, 0.293608, 0.660109 +212, 0.615562, -0.314856, 0.293608, 0.660109 +213, 0.615562, -0.314856, 0.293608, 0.660109 +214, 0.615562, -0.314856, 0.293608, 0.660109 +215, 0.615562, -0.314856, 0.293608, 0.660109 +216, 0.615562, -0.314856, 0.293608, 0.660109 +217, 0.615562, -0.314856, 0.293608, 0.660109 +218, 0.615562, -0.314856, 0.293608, 0.660109 +219, 0.615562, -0.314856, 0.293608, 0.660109 +220, 0.615562, -0.314856, 0.293608, 0.660109 +221, 0.615562, -0.314856, 0.293608, 0.660109 +222, 0.615562, -0.314856, 0.293608, 0.660109 +223, 0.615562, -0.314856, 0.293608, 0.660109 +224, 0.615562, -0.314856, 0.293608, 0.660109 +225, 0.615562, -0.314856, 0.293608, 0.660109 +226, 0.615562, -0.314856, 0.293608, 0.660109 +227, 0.615562, -0.314856, 0.293608, 0.660109 +228, 0.615562, -0.314856, 0.293608, 0.660109 +229, 0.615562, -0.314856, 0.293608, 0.660109 +230, 0.615562, -0.314856, 0.293608, 0.660109 +231, 0.615562, -0.314856, 0.293608, 0.660109 +232, 0.615562, -0.314856, 0.293608, 0.660109 +233, 0.615562, -0.314856, 0.293608, 0.660109 +234, 0.615562, -0.314856, 0.293608, 0.660109 +235, 0.615562, -0.314856, 0.293608, 0.660109 +236, 0.615562, -0.314856, 0.293608, 0.660109 +237, 0.615562, -0.314856, 0.293608, 0.660109 +238, 0.615562, -0.314856, 0.293608, 0.660109 +239, 0.615562, -0.314856, 0.293608, 0.660109 +240, 0.615562, -0.314856, 0.293608, 0.660109 +241, 0.615562, -0.314856, 0.293608, 0.660109 +242, 0.615562, -0.314856, 0.293608, 0.660109 +243, 0.615562, -0.314856, 0.293608, 0.660109 +244, 0.615562, -0.314856, 0.293608, 0.660109 +245, 0.615562, -0.314856, 0.293608, 0.660109 +246, 0.615562, -0.314856, 0.293608, 0.660109 +247, 0.615562, -0.314856, 0.293608, 0.660109 +248, 0.615562, -0.314856, 0.293608, 0.660109 +249, 0.615562, -0.314856, 0.293608, 0.660109 +250, 0.615562, -0.314856, 0.293608, 0.660109 +251, 0.615562, -0.314856, 0.293608, 0.660109 +252, 0.615562, -0.314856, 0.293608, 0.660109 +253, 0.615562, -0.314856, 0.293608, 0.660109 +254, 0.615562, -0.314856, 0.293608, 0.660109 +255, 0.615562, -0.314856, 0.293608, 0.660109 +256, 0.615562, -0.314856, 0.293608, 0.660109 +257, 0.615562, -0.314856, 0.293608, 0.660109 +258, 0.615562, -0.314856, 0.293608, 0.660109 +259, 0.615562, -0.314856, 0.293608, 0.660109 +260, 0.615562, -0.314856, 0.293608, 0.660109 +261, 0.615562, -0.314856, 0.293608, 0.660109 +262, 0.615562, -0.314856, 0.293608, 0.660109 +263, 0.615562, -0.314856, 0.293608, 0.660109 +264, 0.615562, -0.314856, 0.293608, 0.660109 +265, 0.615562, -0.314856, 0.293608, 0.660109 +266, 0.615562, -0.314856, 0.293608, 0.660109 +267, 0.615562, -0.314856, 0.293608, 0.660109 +268, 0.615562, -0.314856, 0.293608, 0.660109 +269, 0.615562, -0.314856, 0.293608, 0.660109 +270, 0.615562, -0.314856, 0.293608, 0.660109 +271, 0.615562, -0.314856, 0.293608, 0.660109 +272, 0.615562, -0.314856, 0.293608, 0.660109 +273, 0.615562, -0.314856, 0.293608, 0.660109 +274, 0.615562, -0.314856, 0.293608, 0.660109 +275, 0.615562, -0.314856, 0.293608, 0.660109 +276, 0.615562, -0.314856, 0.293608, 0.660109 +277, 0.615562, -0.314856, 0.293608, 0.660109 +278, 0.615562, -0.314856, 0.293608, 0.660109 +279, 0.615562, -0.314856, 0.293608, 0.660109 +280, 0.615562, -0.314856, 0.293608, 0.660109 +281, 0.615562, -0.314856, 0.293608, 0.660109 +282, 0.615562, -0.314856, 0.293608, 0.660109 +283, 0.615562, -0.314856, 0.293608, 0.660109 +284, 0.615562, -0.314856, 0.293608, 0.660109 +285, 0.615562, -0.314856, 0.293608, 0.660109 +286, 0.615562, -0.314856, 0.293608, 0.660109 +287, 0.615562, -0.314856, 0.293608, 0.660109 +288, 0.615562, -0.314856, 0.293608, 0.660109 +289, 0.615562, -0.314856, 0.293608, 0.660109 +290, 0.615562, -0.314856, 0.293608, 0.660109 +291, 0.615562, -0.314856, 0.293608, 0.660109 +292, 0.615562, -0.314856, 0.293608, 0.660109 +293, 0.615562, -0.314856, 0.293608, 0.660109 +294, 0.615562, -0.314856, 0.293608, 0.660109 +295, 0.615562, -0.314856, 0.293608, 0.660109 +296, 0.615562, -0.314856, 0.293608, 0.660109 +297, 0.615562, -0.314856, 0.293608, 0.660109 +298, 0.615562, -0.314856, 0.293608, 0.660109 +299, 0.615562, -0.314856, 0.293608, 0.660109 +300, 0.596200, -0.337381, 0.303779, 0.662147 +301, 0.596200, -0.337381, 0.303779, 0.662147 +302, 0.596200, -0.337381, 0.303779, 0.662147 +303, 0.596200, -0.337381, 0.303779, 0.662147 +304, 0.596200, -0.337381, 0.303779, 0.662147 +305, 0.596200, -0.337381, 0.303779, 0.662147 +306, 0.596200, -0.337381, 0.303779, 0.662147 +307, 0.596200, -0.337381, 0.303779, 0.662147 +308, 0.596200, -0.337381, 0.303779, 0.662147 +309, 0.596200, -0.337381, 0.303779, 0.662147 +310, 0.596200, -0.337381, 0.303779, 0.662147 +311, 0.596200, -0.337381, 0.303779, 0.662147 +312, 0.596200, -0.337381, 0.303779, 0.662147 +313, 0.596200, -0.337381, 0.303779, 0.662147 +314, 0.596200, -0.337381, 0.303779, 0.662147 +315, 0.596200, -0.337381, 0.303779, 0.662147 +316, 0.596200, -0.337381, 0.303779, 0.662147 +317, 0.596200, -0.337381, 0.303779, 0.662147 +318, 0.596200, -0.337381, 0.303779, 0.662147 +319, 0.596200, -0.337381, 0.303779, 0.662147 +320, 0.596200, -0.337381, 0.303779, 0.662147 +321, 0.596200, -0.337381, 0.303779, 0.662147 +322, 0.596200, -0.337381, 0.303779, 0.662147 +323, 0.596200, -0.337381, 0.303779, 0.662147 +324, 0.596200, -0.337381, 0.303779, 0.662147 +325, 0.596200, -0.337381, 0.303779, 0.662147 +326, 0.596200, -0.337381, 0.303779, 0.662147 +327, 0.596200, -0.337381, 0.303779, 0.662147 +328, 0.596200, -0.337381, 0.303779, 0.662147 +329, 0.596200, -0.337381, 0.303779, 0.662147 +330, 0.596200, -0.337381, 0.303779, 0.662147 +331, 0.596200, -0.337381, 0.303779, 0.662147 +332, 0.596200, -0.337381, 0.303779, 0.662147 +333, 0.596200, -0.337381, 0.303779, 0.662147 +334, 0.596200, -0.337381, 0.303779, 0.662147 +335, 0.596200, -0.337381, 0.303779, 0.662147 +336, 0.596200, -0.337381, 0.303779, 0.662147 +337, 0.596200, -0.337381, 0.303779, 0.662147 +338, 0.596200, -0.337381, 0.303779, 0.662147 +339, 0.596200, -0.337381, 0.303779, 0.662147 +340, 0.596200, -0.337381, 0.303779, 0.662147 +341, 0.596200, -0.337381, 0.303779, 0.662147 +342, 0.596200, -0.337381, 0.303779, 0.662147 +343, 0.596200, -0.337381, 0.303779, 0.662147 +344, 0.596200, -0.337381, 0.303779, 0.662147 +345, 0.596200, -0.337381, 0.303779, 0.662147 +346, 0.596200, -0.337381, 0.303779, 0.662147 +347, 0.596200, -0.337381, 0.303779, 0.662147 +348, 0.596200, -0.337381, 0.303779, 0.662147 +349, 0.596200, -0.337381, 0.303779, 0.662147 +350, 0.596200, -0.337381, 0.303779, 0.662147 +351, 0.596200, -0.337381, 0.303779, 0.662147 +352, 0.596200, -0.337381, 0.303779, 0.662147 +353, 0.596200, -0.337381, 0.303779, 0.662147 +354, 0.596200, -0.337381, 0.303779, 0.662147 +355, 0.596200, -0.337381, 0.303779, 0.662147 +356, 0.596200, -0.337381, 0.303779, 0.662147 +357, 0.596200, -0.337381, 0.303779, 0.662147 +358, 0.596200, -0.337381, 0.303779, 0.662147 +359, 0.596200, -0.337381, 0.303779, 0.662147 +360, 0.596200, -0.337381, 0.303779, 0.662147 +361, 0.596200, -0.337381, 0.303779, 0.662147 +362, 0.596200, -0.337381, 0.303779, 0.662147 +363, 0.596200, -0.337381, 0.303779, 0.662147 +364, 0.596200, -0.337381, 0.303779, 0.662147 +365, 0.596200, -0.337381, 0.303779, 0.662147 +366, 0.596200, -0.337381, 0.303779, 0.662147 +367, 0.596200, -0.337381, 0.303779, 0.662147 +368, 0.596200, -0.337381, 0.303779, 0.662147 +369, 0.596200, -0.337381, 0.303779, 0.662147 +370, 0.596200, -0.337381, 0.303779, 0.662147 +371, 0.596200, -0.337381, 0.303779, 0.662147 +372, 0.596200, -0.337381, 0.303779, 0.662147 +373, 0.596200, -0.337381, 0.303779, 0.662147 +374, 0.596200, -0.337381, 0.303779, 0.662147 +375, 0.596200, -0.337381, 0.303779, 0.662147 +376, 0.596200, -0.337381, 0.303779, 0.662147 +377, 0.596200, -0.337381, 0.303779, 0.662147 +378, 0.596200, -0.337381, 0.303779, 0.662147 +379, 0.596200, -0.337381, 0.303779, 0.662147 +380, 0.596200, -0.337381, 0.303779, 0.662147 +381, 0.596200, -0.337381, 0.303779, 0.662147 +382, 0.596200, -0.337381, 0.303779, 0.662147 +383, 0.596200, -0.337381, 0.303779, 0.662147 +384, 0.596200, -0.337381, 0.303779, 0.662147 +385, 0.596200, -0.337381, 0.303779, 0.662147 +386, 0.596200, -0.337381, 0.303779, 0.662147 +387, 0.596200, -0.337381, 0.303779, 0.662147 +388, 0.596200, -0.337381, 0.303779, 0.662147 +389, 0.596200, -0.337381, 0.303779, 0.662147 +390, 0.596200, -0.337381, 0.303779, 0.662147 +391, 0.596200, -0.337381, 0.303779, 0.662147 +392, 0.596200, -0.337381, 0.303779, 0.662147 +393, 0.596200, -0.337381, 0.303779, 0.662147 +394, 0.596200, -0.337381, 0.303779, 0.662147 +395, 0.596200, -0.337381, 0.303779, 0.662147 +396, 0.596200, -0.337381, 0.303779, 0.662147 +397, 0.596200, -0.337381, 0.303779, 0.662147 +398, 0.596200, -0.337381, 0.303779, 0.662147 +399, 0.596200, -0.337381, 0.303779, 0.662147 +400, 0.576556, -0.360116, 0.313044, 0.663252 +401, 0.576556, -0.360116, 0.313044, 0.663252 +402, 0.576556, -0.360116, 0.313044, 0.663252 +403, 0.576556, -0.360116, 0.313044, 0.663252 +404, 0.576556, -0.360116, 0.313044, 0.663252 +405, 0.576556, -0.360116, 0.313044, 0.663252 +406, 0.576556, -0.360116, 0.313044, 0.663252 +407, 0.576556, -0.360116, 0.313044, 0.663252 +408, 0.576556, -0.360116, 0.313044, 0.663252 +409, 0.576556, -0.360116, 0.313044, 0.663252 +410, 0.576556, -0.360116, 0.313044, 0.663252 +411, 0.576556, -0.360116, 0.313044, 0.663252 +412, 0.576556, -0.360116, 0.313044, 0.663252 +413, 0.576556, -0.360116, 0.313044, 0.663252 +414, 0.576556, -0.360116, 0.313044, 0.663252 +415, 0.576556, -0.360116, 0.313044, 0.663252 +416, 0.576556, -0.360116, 0.313044, 0.663252 +417, 0.576556, -0.360116, 0.313044, 0.663252 +418, 0.576556, -0.360116, 0.313044, 0.663252 +419, 0.576556, -0.360116, 0.313044, 0.663252 +420, 0.576556, -0.360116, 0.313044, 0.663252 +421, 0.576556, -0.360116, 0.313044, 0.663252 +422, 0.576556, -0.360116, 0.313044, 0.663252 +423, 0.576556, -0.360116, 0.313044, 0.663252 +424, 0.576556, -0.360116, 0.313044, 0.663252 +425, 0.576556, -0.360116, 0.313044, 0.663252 +426, 0.576556, -0.360116, 0.313044, 0.663252 +427, 0.576556, -0.360116, 0.313044, 0.663252 +428, 0.576556, -0.360116, 0.313044, 0.663252 +429, 0.576556, -0.360116, 0.313044, 0.663252 +430, 0.576556, -0.360116, 0.313044, 0.663252 +431, 0.576556, -0.360116, 0.313044, 0.663252 +432, 0.576556, -0.360116, 0.313044, 0.663252 +433, 0.576556, -0.360116, 0.313044, 0.663252 +434, 0.576556, -0.360116, 0.313044, 0.663252 +435, 0.576556, -0.360116, 0.313044, 0.663252 +436, 0.576556, -0.360116, 0.313044, 0.663252 +437, 0.576556, -0.360116, 0.313044, 0.663252 +438, 0.576556, -0.360116, 0.313044, 0.663252 +439, 0.576556, -0.360116, 0.313044, 0.663252 +440, 0.576556, -0.360116, 0.313044, 0.663252 +441, 0.576556, -0.360116, 0.313044, 0.663252 +442, 0.576556, -0.360116, 0.313044, 0.663252 +443, 0.576556, -0.360116, 0.313044, 0.663252 +444, 0.576556, -0.360116, 0.313044, 0.663252 +445, 0.576556, -0.360116, 0.313044, 0.663252 +446, 0.576556, -0.360116, 0.313044, 0.663252 +447, 0.576556, -0.360116, 0.313044, 0.663252 +448, 0.576556, -0.360116, 0.313044, 0.663252 +449, 0.576556, -0.360116, 0.313044, 0.663252 +450, 0.576556, -0.360116, 0.313044, 0.663252 +451, 0.576556, -0.360116, 0.313044, 0.663252 +452, 0.576556, -0.360116, 0.313044, 0.663252 +453, 0.576556, -0.360116, 0.313044, 0.663252 +454, 0.576556, -0.360116, 0.313044, 0.663252 +455, 0.576556, -0.360116, 0.313044, 0.663252 +456, 0.576556, -0.360116, 0.313044, 0.663252 +457, 0.576556, -0.360116, 0.313044, 0.663252 +458, 0.576556, -0.360116, 0.313044, 0.663252 +459, 0.576556, -0.360116, 0.313044, 0.663252 +460, 0.576556, -0.360116, 0.313044, 0.663252 +461, 0.576556, -0.360116, 0.313044, 0.663252 +462, 0.576556, -0.360116, 0.313044, 0.663252 +463, 0.576556, -0.360116, 0.313044, 0.663252 +464, 0.576556, -0.360116, 0.313044, 0.663252 +465, 0.576556, -0.360116, 0.313044, 0.663252 +466, 0.576556, -0.360116, 0.313044, 0.663252 +467, 0.576556, -0.360116, 0.313044, 0.663252 +468, 0.576556, -0.360116, 0.313044, 0.663252 +469, 0.576556, -0.360116, 0.313044, 0.663252 +470, 0.576556, -0.360116, 0.313044, 0.663252 +471, 0.576556, -0.360116, 0.313044, 0.663252 +472, 0.576556, -0.360116, 0.313044, 0.663252 +473, 0.576556, -0.360116, 0.313044, 0.663252 +474, 0.576556, -0.360116, 0.313044, 0.663252 +475, 0.576556, -0.360116, 0.313044, 0.663252 +476, 0.576556, -0.360116, 0.313044, 0.663252 +477, 0.576556, -0.360116, 0.313044, 0.663252 +478, 0.576556, -0.360116, 0.313044, 0.663252 +479, 0.576556, -0.360116, 0.313044, 0.663252 +480, 0.576556, -0.360116, 0.313044, 0.663252 +481, 0.576556, -0.360116, 0.313044, 0.663252 +482, 0.576556, -0.360116, 0.313044, 0.663252 +483, 0.576556, -0.360116, 0.313044, 0.663252 +484, 0.576556, -0.360116, 0.313044, 0.663252 +485, 0.576556, -0.360116, 0.313044, 0.663252 +486, 0.576556, -0.360116, 0.313044, 0.663252 +487, 0.576556, -0.360116, 0.313044, 0.663252 +488, 0.576556, -0.360116, 0.313044, 0.663252 +489, 0.576556, -0.360116, 0.313044, 0.663252 +490, 0.576556, -0.360116, 0.313044, 0.663252 +491, 0.576556, -0.360116, 0.313044, 0.663252 +492, 0.576556, -0.360116, 0.313044, 0.663252 +493, 0.576556, -0.360116, 0.313044, 0.663252 +494, 0.576556, -0.360116, 0.313044, 0.663252 +495, 0.576556, -0.360116, 0.313044, 0.663252 +496, 0.576556, -0.360116, 0.313044, 0.663252 +497, 0.576556, -0.360116, 0.313044, 0.663252 +498, 0.576556, -0.360116, 0.313044, 0.663252 +499, 0.576556, -0.360116, 0.313044, 0.663252 +500, 0.556670, -0.383022, 0.321394, 0.663414 +501, 0.556670, -0.383022, 0.321394, 0.663414 +502, 0.556670, -0.383022, 0.321394, 0.663414 +503, 0.556670, -0.383022, 0.321394, 0.663414 +504, 0.556670, -0.383022, 0.321394, 0.663414 +505, 0.556670, -0.383022, 0.321394, 0.663414 +506, 0.556670, -0.383022, 0.321394, 0.663414 +507, 0.556670, -0.383022, 0.321394, 0.663414 +508, 0.556670, -0.383022, 0.321394, 0.663414 +509, 0.556670, -0.383022, 0.321394, 0.663414 +510, 0.556670, -0.383022, 0.321394, 0.663414 +511, 0.556670, -0.383022, 0.321394, 0.663414 +512, 0.556670, -0.383022, 0.321394, 0.663414 +513, 0.556670, -0.383022, 0.321394, 0.663414 +514, 0.556670, -0.383022, 0.321394, 0.663414 +515, 0.556670, -0.383022, 0.321394, 0.663414 +516, 0.556670, -0.383022, 0.321394, 0.663414 +517, 0.556670, -0.383022, 0.321394, 0.663414 +518, 0.556670, -0.383022, 0.321394, 0.663414 +519, 0.556670, -0.383022, 0.321394, 0.663414 +520, 0.556670, -0.383022, 0.321394, 0.663414 +521, 0.556670, -0.383022, 0.321394, 0.663414 +522, 0.556670, -0.383022, 0.321394, 0.663414 +523, 0.556670, -0.383022, 0.321394, 0.663414 +524, 0.556670, -0.383022, 0.321394, 0.663414 +525, 0.556670, -0.383022, 0.321394, 0.663414 +526, 0.556670, -0.383022, 0.321394, 0.663414 +527, 0.556670, -0.383022, 0.321394, 0.663414 +528, 0.556670, -0.383022, 0.321394, 0.663414 +529, 0.556670, -0.383022, 0.321394, 0.663414 +530, 0.556670, -0.383022, 0.321394, 0.663414 +531, 0.556670, -0.383022, 0.321394, 0.663414 +532, 0.556670, -0.383022, 0.321394, 0.663414 +533, 0.556670, -0.383022, 0.321394, 0.663414 +534, 0.556670, -0.383022, 0.321394, 0.663414 +535, 0.556670, -0.383022, 0.321394, 0.663414 +536, 0.556670, -0.383022, 0.321394, 0.663414 +537, 0.556670, -0.383022, 0.321394, 0.663414 +538, 0.556670, -0.383022, 0.321394, 0.663414 +539, 0.556670, -0.383022, 0.321394, 0.663414 +540, 0.556670, -0.383022, 0.321394, 0.663414 +541, 0.556670, -0.383022, 0.321394, 0.663414 +542, 0.556670, -0.383022, 0.321394, 0.663414 +543, 0.556670, -0.383022, 0.321394, 0.663414 +544, 0.556670, -0.383022, 0.321394, 0.663414 +545, 0.556670, -0.383022, 0.321394, 0.663414 +546, 0.556670, -0.383022, 0.321394, 0.663414 +547, 0.556670, -0.383022, 0.321394, 0.663414 +548, 0.556670, -0.383022, 0.321394, 0.663414 +549, 0.556670, -0.383022, 0.321394, 0.663414 +550, 0.556670, -0.383022, 0.321394, 0.663414 +551, 0.556670, -0.383022, 0.321394, 0.663414 +552, 0.556670, -0.383022, 0.321394, 0.663414 +553, 0.556670, -0.383022, 0.321394, 0.663414 +554, 0.556670, -0.383022, 0.321394, 0.663414 +555, 0.556670, -0.383022, 0.321394, 0.663414 +556, 0.556670, -0.383022, 0.321394, 0.663414 +557, 0.556670, -0.383022, 0.321394, 0.663414 +558, 0.556670, -0.383022, 0.321394, 0.663414 +559, 0.556670, -0.383022, 0.321394, 0.663414 +560, 0.556670, -0.383022, 0.321394, 0.663414 +561, 0.556670, -0.383022, 0.321394, 0.663414 +562, 0.556670, -0.383022, 0.321394, 0.663414 +563, 0.556670, -0.383022, 0.321394, 0.663414 +564, 0.556670, -0.383022, 0.321394, 0.663414 +565, 0.556670, -0.383022, 0.321394, 0.663414 +566, 0.556670, -0.383022, 0.321394, 0.663414 +567, 0.556670, -0.383022, 0.321394, 0.663414 +568, 0.556670, -0.383022, 0.321394, 0.663414 +569, 0.556670, -0.383022, 0.321394, 0.663414 +570, 0.556670, -0.383022, 0.321394, 0.663414 +571, 0.556670, -0.383022, 0.321394, 0.663414 +572, 0.556670, -0.383022, 0.321394, 0.663414 +573, 0.556670, -0.383022, 0.321394, 0.663414 +574, 0.556670, -0.383022, 0.321394, 0.663414 +575, 0.556670, -0.383022, 0.321394, 0.663414 +576, 0.556670, -0.383022, 0.321394, 0.663414 +577, 0.556670, -0.383022, 0.321394, 0.663414 +578, 0.556670, -0.383022, 0.321394, 0.663414 +579, 0.556670, -0.383022, 0.321394, 0.663414 +580, 0.556670, -0.383022, 0.321394, 0.663414 +581, 0.556670, -0.383022, 0.321394, 0.663414 +582, 0.556670, -0.383022, 0.321394, 0.663414 +583, 0.556670, -0.383022, 0.321394, 0.663414 +584, 0.556670, -0.383022, 0.321394, 0.663414 +585, 0.556670, -0.383022, 0.321394, 0.663414 +586, 0.556670, -0.383022, 0.321394, 0.663414 +587, 0.556670, -0.383022, 0.321394, 0.663414 +588, 0.556670, -0.383022, 0.321394, 0.663414 +589, 0.556670, -0.383022, 0.321394, 0.663414 +590, 0.556670, -0.383022, 0.321394, 0.663414 +591, 0.556670, -0.383022, 0.321394, 0.663414 +592, 0.556670, -0.383022, 0.321394, 0.663414 +593, 0.556670, -0.383022, 0.321394, 0.663414 +594, 0.556670, -0.383022, 0.321394, 0.663414 +595, 0.556670, -0.383022, 0.321394, 0.663414 +596, 0.556670, -0.383022, 0.321394, 0.663414 +597, 0.556670, -0.383022, 0.321394, 0.663414 +598, 0.556670, -0.383022, 0.321394, 0.663414 +599, 0.556670, -0.383022, 0.321394, 0.663414 +600, 0.536584, -0.406058, 0.328819, 0.662626 +601, 0.536584, -0.406058, 0.328819, 0.662626 +602, 0.536584, -0.406058, 0.328819, 0.662626 +603, 0.536584, -0.406058, 0.328819, 0.662626 +604, 0.536584, -0.406058, 0.328819, 0.662626 +605, 0.536584, -0.406058, 0.328819, 0.662626 +606, 0.536584, -0.406058, 0.328819, 0.662626 +607, 0.536584, -0.406058, 0.328819, 0.662626 +608, 0.536584, -0.406058, 0.328819, 0.662626 +609, 0.536584, -0.406058, 0.328819, 0.662626 +610, 0.536584, -0.406058, 0.328819, 0.662626 +611, 0.536584, -0.406058, 0.328819, 0.662626 +612, 0.536584, -0.406058, 0.328819, 0.662626 +613, 0.536584, -0.406058, 0.328819, 0.662626 +614, 0.536584, -0.406058, 0.328819, 0.662626 +615, 0.536584, -0.406058, 0.328819, 0.662626 +616, 0.536584, -0.406058, 0.328819, 0.662626 +617, 0.536584, -0.406058, 0.328819, 0.662626 +618, 0.536584, -0.406058, 0.328819, 0.662626 +619, 0.536584, -0.406058, 0.328819, 0.662626 +620, 0.536584, -0.406058, 0.328819, 0.662626 +621, 0.536584, -0.406058, 0.328819, 0.662626 +622, 0.536584, -0.406058, 0.328819, 0.662626 +623, 0.536584, -0.406058, 0.328819, 0.662626 +624, 0.536584, -0.406058, 0.328819, 0.662626 +625, 0.536584, -0.406058, 0.328819, 0.662626 +626, 0.536584, -0.406058, 0.328819, 0.662626 +627, 0.536584, -0.406058, 0.328819, 0.662626 +628, 0.536584, -0.406058, 0.328819, 0.662626 +629, 0.536584, -0.406058, 0.328819, 0.662626 +630, 0.536584, -0.406058, 0.328819, 0.662626 +631, 0.536584, -0.406058, 0.328819, 0.662626 +632, 0.536584, -0.406058, 0.328819, 0.662626 +633, 0.536584, -0.406058, 0.328819, 0.662626 +634, 0.536584, -0.406058, 0.328819, 0.662626 +635, 0.536584, -0.406058, 0.328819, 0.662626 +636, 0.536584, -0.406058, 0.328819, 0.662626 +637, 0.536584, -0.406058, 0.328819, 0.662626 +638, 0.536584, -0.406058, 0.328819, 0.662626 +639, 0.536584, -0.406058, 0.328819, 0.662626 +640, 0.536584, -0.406058, 0.328819, 0.662626 +641, 0.536584, -0.406058, 0.328819, 0.662626 +642, 0.536584, -0.406058, 0.328819, 0.662626 +643, 0.536584, -0.406058, 0.328819, 0.662626 +644, 0.536584, -0.406058, 0.328819, 0.662626 +645, 0.536584, -0.406058, 0.328819, 0.662626 +646, 0.536584, -0.406058, 0.328819, 0.662626 +647, 0.536584, -0.406058, 0.328819, 0.662626 +648, 0.536584, -0.406058, 0.328819, 0.662626 +649, 0.536584, -0.406058, 0.328819, 0.662626 +650, 0.536584, -0.406058, 0.328819, 0.662626 +651, 0.536584, -0.406058, 0.328819, 0.662626 +652, 0.536584, -0.406058, 0.328819, 0.662626 +653, 0.536584, -0.406058, 0.328819, 0.662626 +654, 0.536584, -0.406058, 0.328819, 0.662626 +655, 0.536584, -0.406058, 0.328819, 0.662626 +656, 0.536584, -0.406058, 0.328819, 0.662626 +657, 0.536584, -0.406058, 0.328819, 0.662626 +658, 0.536584, -0.406058, 0.328819, 0.662626 +659, 0.536584, -0.406058, 0.328819, 0.662626 +660, 0.536584, -0.406058, 0.328819, 0.662626 +661, 0.536584, -0.406058, 0.328819, 0.662626 +662, 0.536584, -0.406058, 0.328819, 0.662626 +663, 0.536584, -0.406058, 0.328819, 0.662626 +664, 0.536584, -0.406058, 0.328819, 0.662626 +665, 0.536584, -0.406058, 0.328819, 0.662626 +666, 0.536584, -0.406058, 0.328819, 0.662626 +667, 0.536584, -0.406058, 0.328819, 0.662626 +668, 0.536584, -0.406058, 0.328819, 0.662626 +669, 0.536584, -0.406058, 0.328819, 0.662626 +670, 0.536584, -0.406058, 0.328819, 0.662626 +671, 0.536584, -0.406058, 0.328819, 0.662626 +672, 0.536584, -0.406058, 0.328819, 0.662626 +673, 0.536584, -0.406058, 0.328819, 0.662626 +674, 0.536584, -0.406058, 0.328819, 0.662626 +675, 0.536584, -0.406058, 0.328819, 0.662626 +676, 0.536584, -0.406058, 0.328819, 0.662626 +677, 0.536584, -0.406058, 0.328819, 0.662626 +678, 0.536584, -0.406058, 0.328819, 0.662626 +679, 0.536584, -0.406058, 0.328819, 0.662626 +680, 0.536584, -0.406058, 0.328819, 0.662626 +681, 0.536584, -0.406058, 0.328819, 0.662626 +682, 0.536584, -0.406058, 0.328819, 0.662626 +683, 0.536584, -0.406058, 0.328819, 0.662626 +684, 0.536584, -0.406058, 0.328819, 0.662626 +685, 0.536584, -0.406058, 0.328819, 0.662626 +686, 0.536584, -0.406058, 0.328819, 0.662626 +687, 0.536584, -0.406058, 0.328819, 0.662626 +688, 0.536584, -0.406058, 0.328819, 0.662626 +689, 0.536584, -0.406058, 0.328819, 0.662626 +690, 0.536584, -0.406058, 0.328819, 0.662626 +691, 0.536584, -0.406058, 0.328819, 0.662626 +692, 0.536584, -0.406058, 0.328819, 0.662626 +693, 0.536584, -0.406058, 0.328819, 0.662626 +694, 0.536584, -0.406058, 0.328819, 0.662626 +695, 0.536584, -0.406058, 0.328819, 0.662626 +696, 0.536584, -0.406058, 0.328819, 0.662626 +697, 0.536584, -0.406058, 0.328819, 0.662626 +698, 0.536584, -0.406058, 0.328819, 0.662626 +699, 0.536584, -0.406058, 0.328819, 0.662626 +700, 0.516337, -0.429181, 0.335313, 0.660881 +701, 0.516337, -0.429181, 0.335313, 0.660881 +702, 0.516337, -0.429181, 0.335313, 0.660881 +703, 0.516337, -0.429181, 0.335313, 0.660881 +704, 0.516337, -0.429181, 0.335313, 0.660881 +705, 0.516337, -0.429181, 0.335313, 0.660881 +706, 0.516337, -0.429181, 0.335313, 0.660881 +707, 0.516337, -0.429181, 0.335313, 0.660881 +708, 0.516337, -0.429181, 0.335313, 0.660881 +709, 0.516337, -0.429181, 0.335313, 0.660881 +710, 0.516337, -0.429181, 0.335313, 0.660881 +711, 0.516337, -0.429181, 0.335313, 0.660881 +712, 0.516337, -0.429181, 0.335313, 0.660881 +713, 0.516337, -0.429181, 0.335313, 0.660881 +714, 0.516337, -0.429181, 0.335313, 0.660881 +715, 0.516337, -0.429181, 0.335313, 0.660881 +716, 0.516337, -0.429181, 0.335313, 0.660881 +717, 0.516337, -0.429181, 0.335313, 0.660881 +718, 0.516337, -0.429181, 0.335313, 0.660881 +719, 0.516337, -0.429181, 0.335313, 0.660881 +720, 0.516337, -0.429181, 0.335313, 0.660881 +721, 0.516337, -0.429181, 0.335313, 0.660881 +722, 0.516337, -0.429181, 0.335313, 0.660881 +723, 0.516337, -0.429181, 0.335313, 0.660881 +724, 0.516337, -0.429181, 0.335313, 0.660881 +725, 0.516337, -0.429181, 0.335313, 0.660881 +726, 0.516337, -0.429181, 0.335313, 0.660881 +727, 0.516337, -0.429181, 0.335313, 0.660881 +728, 0.516337, -0.429181, 0.335313, 0.660881 +729, 0.516337, -0.429181, 0.335313, 0.660881 +730, 0.516337, -0.429181, 0.335313, 0.660881 +731, 0.516337, -0.429181, 0.335313, 0.660881 +732, 0.516337, -0.429181, 0.335313, 0.660881 +733, 0.516337, -0.429181, 0.335313, 0.660881 +734, 0.516337, -0.429181, 0.335313, 0.660881 +735, 0.516337, -0.429181, 0.335313, 0.660881 +736, 0.516337, -0.429181, 0.335313, 0.660881 +737, 0.516337, -0.429181, 0.335313, 0.660881 +738, 0.516337, -0.429181, 0.335313, 0.660881 +739, 0.516337, -0.429181, 0.335313, 0.660881 +740, 0.516337, -0.429181, 0.335313, 0.660881 +741, 0.516337, -0.429181, 0.335313, 0.660881 +742, 0.516337, -0.429181, 0.335313, 0.660881 +743, 0.516337, -0.429181, 0.335313, 0.660881 +744, 0.516337, -0.429181, 0.335313, 0.660881 +745, 0.516337, -0.429181, 0.335313, 0.660881 +746, 0.516337, -0.429181, 0.335313, 0.660881 +747, 0.516337, -0.429181, 0.335313, 0.660881 +748, 0.516337, -0.429181, 0.335313, 0.660881 +749, 0.516337, -0.429181, 0.335313, 0.660881 +750, 0.516337, -0.429181, 0.335313, 0.660881 +751, 0.516337, -0.429181, 0.335313, 0.660881 +752, 0.516337, -0.429181, 0.335313, 0.660881 +753, 0.516337, -0.429181, 0.335313, 0.660881 +754, 0.516337, -0.429181, 0.335313, 0.660881 +755, 0.516337, -0.429181, 0.335313, 0.660881 +756, 0.516337, -0.429181, 0.335313, 0.660881 +757, 0.516337, -0.429181, 0.335313, 0.660881 +758, 0.516337, -0.429181, 0.335313, 0.660881 +759, 0.516337, -0.429181, 0.335313, 0.660881 +760, 0.516337, -0.429181, 0.335313, 0.660881 +761, 0.516337, -0.429181, 0.335313, 0.660881 +762, 0.516337, -0.429181, 0.335313, 0.660881 +763, 0.516337, -0.429181, 0.335313, 0.660881 +764, 0.516337, -0.429181, 0.335313, 0.660881 +765, 0.516337, -0.429181, 0.335313, 0.660881 +766, 0.516337, -0.429181, 0.335313, 0.660881 +767, 0.516337, -0.429181, 0.335313, 0.660881 +768, 0.516337, -0.429181, 0.335313, 0.660881 +769, 0.516337, -0.429181, 0.335313, 0.660881 +770, 0.516337, -0.429181, 0.335313, 0.660881 +771, 0.516337, -0.429181, 0.335313, 0.660881 +772, 0.516337, -0.429181, 0.335313, 0.660881 +773, 0.516337, -0.429181, 0.335313, 0.660881 +774, 0.516337, -0.429181, 0.335313, 0.660881 +775, 0.516337, -0.429181, 0.335313, 0.660881 +776, 0.516337, -0.429181, 0.335313, 0.660881 +777, 0.516337, -0.429181, 0.335313, 0.660881 +778, 0.516337, -0.429181, 0.335313, 0.660881 +779, 0.516337, -0.429181, 0.335313, 0.660881 +780, 0.516337, -0.429181, 0.335313, 0.660881 +781, 0.516337, -0.429181, 0.335313, 0.660881 +782, 0.516337, -0.429181, 0.335313, 0.660881 +783, 0.516337, -0.429181, 0.335313, 0.660881 +784, 0.516337, -0.429181, 0.335313, 0.660881 +785, 0.516337, -0.429181, 0.335313, 0.660881 +786, 0.516337, -0.429181, 0.335313, 0.660881 +787, 0.516337, -0.429181, 0.335313, 0.660881 +788, 0.516337, -0.429181, 0.335313, 0.660881 +789, 0.516337, -0.429181, 0.335313, 0.660881 +790, 0.516337, -0.429181, 0.335313, 0.660881 +791, 0.516337, -0.429181, 0.335313, 0.660881 +792, 0.516337, -0.429181, 0.335313, 0.660881 +793, 0.516337, -0.429181, 0.335313, 0.660881 +794, 0.516337, -0.429181, 0.335313, 0.660881 +795, 0.516337, -0.429181, 0.335313, 0.660881 +796, 0.516337, -0.429181, 0.335313, 0.660881 +797, 0.516337, -0.429181, 0.335313, 0.660881 +798, 0.516337, -0.429181, 0.335313, 0.660881 +799, 0.516337, -0.429181, 0.335313, 0.660881 +800, 0.495972, -0.452352, 0.340872, 0.658176 +801, 0.495972, -0.452352, 0.340872, 0.658176 +802, 0.495972, -0.452352, 0.340872, 0.658176 +803, 0.495972, -0.452352, 0.340872, 0.658176 +804, 0.495972, -0.452352, 0.340872, 0.658176 +805, 0.495972, -0.452352, 0.340872, 0.658176 +806, 0.495972, -0.452352, 0.340872, 0.658176 +807, 0.495972, -0.452352, 0.340872, 0.658176 +808, 0.495972, -0.452352, 0.340872, 0.658176 +809, 0.495972, -0.452352, 0.340872, 0.658176 +810, 0.495972, -0.452352, 0.340872, 0.658176 +811, 0.495972, -0.452352, 0.340872, 0.658176 +812, 0.495972, -0.452352, 0.340872, 0.658176 +813, 0.495972, -0.452352, 0.340872, 0.658176 +814, 0.495972, -0.452352, 0.340872, 0.658176 +815, 0.495972, -0.452352, 0.340872, 0.658176 +816, 0.495972, -0.452352, 0.340872, 0.658176 +817, 0.495972, -0.452352, 0.340872, 0.658176 +818, 0.495972, -0.452352, 0.340872, 0.658176 +819, 0.495972, -0.452352, 0.340872, 0.658176 +820, 0.495972, -0.452352, 0.340872, 0.658176 +821, 0.495972, -0.452352, 0.340872, 0.658176 +822, 0.495972, -0.452352, 0.340872, 0.658176 +823, 0.495972, -0.452352, 0.340872, 0.658176 +824, 0.495972, -0.452352, 0.340872, 0.658176 +825, 0.495972, -0.452352, 0.340872, 0.658176 +826, 0.495972, -0.452352, 0.340872, 0.658176 +827, 0.495972, -0.452352, 0.340872, 0.658176 +828, 0.495972, -0.452352, 0.340872, 0.658176 +829, 0.495972, -0.452352, 0.340872, 0.658176 +830, 0.495972, -0.452352, 0.340872, 0.658176 +831, 0.495972, -0.452352, 0.340872, 0.658176 +832, 0.495972, -0.452352, 0.340872, 0.658176 +833, 0.495972, -0.452352, 0.340872, 0.658176 +834, 0.495972, -0.452352, 0.340872, 0.658176 +835, 0.495972, -0.452352, 0.340872, 0.658176 +836, 0.495972, -0.452352, 0.340872, 0.658176 +837, 0.495972, -0.452352, 0.340872, 0.658176 +838, 0.495972, -0.452352, 0.340872, 0.658176 +839, 0.495972, -0.452352, 0.340872, 0.658176 +840, 0.495972, -0.452352, 0.340872, 0.658176 +841, 0.495972, -0.452352, 0.340872, 0.658176 +842, 0.495972, -0.452352, 0.340872, 0.658176 +843, 0.495972, -0.452352, 0.340872, 0.658176 +844, 0.495972, -0.452352, 0.340872, 0.658176 +845, 0.495972, -0.452352, 0.340872, 0.658176 +846, 0.495972, -0.452352, 0.340872, 0.658176 +847, 0.495972, -0.452352, 0.340872, 0.658176 +848, 0.495972, -0.452352, 0.340872, 0.658176 +849, 0.495972, -0.452352, 0.340872, 0.658176 +850, 0.495972, -0.452352, 0.340872, 0.658176 +851, 0.495972, -0.452352, 0.340872, 0.658176 +852, 0.495972, -0.452352, 0.340872, 0.658176 +853, 0.495972, -0.452352, 0.340872, 0.658176 +854, 0.495972, -0.452352, 0.340872, 0.658176 +855, 0.495972, -0.452352, 0.340872, 0.658176 +856, 0.495972, -0.452352, 0.340872, 0.658176 +857, 0.495972, -0.452352, 0.340872, 0.658176 +858, 0.495972, -0.452352, 0.340872, 0.658176 +859, 0.495972, -0.452352, 0.340872, 0.658176 +860, 0.495972, -0.452352, 0.340872, 0.658176 +861, 0.495972, -0.452352, 0.340872, 0.658176 +862, 0.495972, -0.452352, 0.340872, 0.658176 +863, 0.495972, -0.452352, 0.340872, 0.658176 +864, 0.495972, -0.452352, 0.340872, 0.658176 +865, 0.495972, -0.452352, 0.340872, 0.658176 +866, 0.495972, -0.452352, 0.340872, 0.658176 +867, 0.495972, -0.452352, 0.340872, 0.658176 +868, 0.495972, -0.452352, 0.340872, 0.658176 +869, 0.495972, -0.452352, 0.340872, 0.658176 +870, 0.495972, -0.452352, 0.340872, 0.658176 +871, 0.495972, -0.452352, 0.340872, 0.658176 +872, 0.495972, -0.452352, 0.340872, 0.658176 +873, 0.495972, -0.452352, 0.340872, 0.658176 +874, 0.495972, -0.452352, 0.340872, 0.658176 +875, 0.495972, -0.452352, 0.340872, 0.658176 +876, 0.495972, -0.452352, 0.340872, 0.658176 +877, 0.495972, -0.452352, 0.340872, 0.658176 +878, 0.495972, -0.452352, 0.340872, 0.658176 +879, 0.495972, -0.452352, 0.340872, 0.658176 +880, 0.495972, -0.452352, 0.340872, 0.658176 +881, 0.495972, -0.452352, 0.340872, 0.658176 +882, 0.495972, -0.452352, 0.340872, 0.658176 +883, 0.495972, -0.452352, 0.340872, 0.658176 +884, 0.495972, -0.452352, 0.340872, 0.658176 +885, 0.495972, -0.452352, 0.340872, 0.658176 +886, 0.495972, -0.452352, 0.340872, 0.658176 +887, 0.495972, -0.452352, 0.340872, 0.658176 +888, 0.495972, -0.452352, 0.340872, 0.658176 +889, 0.495972, -0.452352, 0.340872, 0.658176 +890, 0.495972, -0.452352, 0.340872, 0.658176 +891, 0.495972, -0.452352, 0.340872, 0.658176 +892, 0.495972, -0.452352, 0.340872, 0.658176 +893, 0.495972, -0.452352, 0.340872, 0.658176 +894, 0.495972, -0.452352, 0.340872, 0.658176 +895, 0.495972, -0.452352, 0.340872, 0.658176 +896, 0.495972, -0.452352, 0.340872, 0.658176 +897, 0.495972, -0.452352, 0.340872, 0.658176 +898, 0.495972, -0.452352, 0.340872, 0.658176 +899, 0.495972, -0.452352, 0.340872, 0.658176 +900, 0.475528, -0.475528, 0.345492, 0.654508 +901, 0.475528, -0.475528, 0.345492, 0.654508 +902, 0.475528, -0.475528, 0.345492, 0.654508 +903, 0.475528, -0.475528, 0.345492, 0.654508 +904, 0.475528, -0.475528, 0.345492, 0.654508 +905, 0.475528, -0.475528, 0.345492, 0.654508 +906, 0.475528, -0.475528, 0.345492, 0.654508 +907, 0.475528, -0.475528, 0.345492, 0.654508 +908, 0.475528, -0.475528, 0.345492, 0.654508 +909, 0.475528, -0.475528, 0.345492, 0.654508 +910, 0.475528, -0.475528, 0.345492, 0.654508 +911, 0.475528, -0.475528, 0.345492, 0.654508 +912, 0.475528, -0.475528, 0.345492, 0.654508 +913, 0.475528, -0.475528, 0.345492, 0.654508 +914, 0.475528, -0.475528, 0.345492, 0.654508 +915, 0.475528, -0.475528, 0.345492, 0.654508 +916, 0.475528, -0.475528, 0.345492, 0.654508 +917, 0.475528, -0.475528, 0.345492, 0.654508 +918, 0.475528, -0.475528, 0.345492, 0.654508 +919, 0.475528, -0.475528, 0.345492, 0.654508 +920, 0.475528, -0.475528, 0.345492, 0.654508 +921, 0.475528, -0.475528, 0.345492, 0.654508 +922, 0.475528, -0.475528, 0.345492, 0.654508 +923, 0.475528, -0.475528, 0.345492, 0.654508 +924, 0.475528, -0.475528, 0.345492, 0.654508 +925, 0.475528, -0.475528, 0.345492, 0.654508 +926, 0.475528, -0.475528, 0.345492, 0.654508 +927, 0.475528, -0.475528, 0.345492, 0.654508 +928, 0.475528, -0.475528, 0.345492, 0.654508 +929, 0.475528, -0.475528, 0.345492, 0.654508 +930, 0.475528, -0.475528, 0.345492, 0.654508 +931, 0.475528, -0.475528, 0.345492, 0.654508 +932, 0.475528, -0.475528, 0.345492, 0.654508 +933, 0.475528, -0.475528, 0.345492, 0.654508 +934, 0.475528, -0.475528, 0.345492, 0.654508 +935, 0.475528, -0.475528, 0.345492, 0.654508 +936, 0.475528, -0.475528, 0.345492, 0.654508 +937, 0.475528, -0.475528, 0.345492, 0.654508 +938, 0.475528, -0.475528, 0.345492, 0.654508 +939, 0.475528, -0.475528, 0.345492, 0.654508 +940, 0.475528, -0.475528, 0.345492, 0.654508 +941, 0.475528, -0.475528, 0.345492, 0.654508 +942, 0.475528, -0.475528, 0.345492, 0.654508 +943, 0.475528, -0.475528, 0.345492, 0.654508 +944, 0.475528, -0.475528, 0.345492, 0.654508 +945, 0.475528, -0.475528, 0.345492, 0.654508 +946, 0.475528, -0.475528, 0.345492, 0.654508 +947, 0.475528, -0.475528, 0.345492, 0.654508 +948, 0.475528, -0.475528, 0.345492, 0.654508 +949, 0.475528, -0.475528, 0.345492, 0.654508 +950, 0.475528, -0.475528, 0.345492, 0.654508 +951, 0.475528, -0.475528, 0.345492, 0.654508 +952, 0.475528, -0.475528, 0.345492, 0.654508 +953, 0.475528, -0.475528, 0.345492, 0.654508 +954, 0.475528, -0.475528, 0.345492, 0.654508 +955, 0.475528, -0.475528, 0.345492, 0.654508 +956, 0.475528, -0.475528, 0.345492, 0.654508 +957, 0.475528, -0.475528, 0.345492, 0.654508 +958, 0.475528, -0.475528, 0.345492, 0.654508 +959, 0.475528, -0.475528, 0.345492, 0.654508 +960, 0.475528, -0.475528, 0.345492, 0.654508 +961, 0.475528, -0.475528, 0.345492, 0.654508 +962, 0.475528, -0.475528, 0.345492, 0.654508 +963, 0.475528, -0.475528, 0.345492, 0.654508 +964, 0.475528, -0.475528, 0.345492, 0.654508 +965, 0.475528, -0.475528, 0.345492, 0.654508 +966, 0.475528, -0.475528, 0.345492, 0.654508 +967, 0.475528, -0.475528, 0.345492, 0.654508 +968, 0.475528, -0.475528, 0.345492, 0.654508 +969, 0.475528, -0.475528, 0.345492, 0.654508 +970, 0.475528, -0.475528, 0.345492, 0.654508 +971, 0.475528, -0.475528, 0.345492, 0.654508 +972, 0.475528, -0.475528, 0.345492, 0.654508 +973, 0.475528, -0.475528, 0.345492, 0.654508 +974, 0.475528, -0.475528, 0.345492, 0.654508 +975, 0.475528, -0.475528, 0.345492, 0.654508 +976, 0.475528, -0.475528, 0.345492, 0.654508 +977, 0.475528, -0.475528, 0.345492, 0.654508 +978, 0.475528, -0.475528, 0.345492, 0.654508 +979, 0.475528, -0.475528, 0.345492, 0.654508 +980, 0.475528, -0.475528, 0.345492, 0.654508 +981, 0.475528, -0.475528, 0.345492, 0.654508 +982, 0.475528, -0.475528, 0.345492, 0.654508 +983, 0.475528, -0.475528, 0.345492, 0.654508 +984, 0.475528, -0.475528, 0.345492, 0.654508 +985, 0.475528, -0.475528, 0.345492, 0.654508 +986, 0.475528, -0.475528, 0.345492, 0.654508 +987, 0.475528, -0.475528, 0.345492, 0.654508 +988, 0.475528, -0.475528, 0.345492, 0.654508 +989, 0.475528, -0.475528, 0.345492, 0.654508 +990, 0.475528, -0.475528, 0.345492, 0.654508 +991, 0.475528, -0.475528, 0.345492, 0.654508 +992, 0.475528, -0.475528, 0.345492, 0.654508 +993, 0.475528, -0.475528, 0.345492, 0.654508 +994, 0.475528, -0.475528, 0.345492, 0.654508 +995, 0.475528, -0.475528, 0.345492, 0.654508 +996, 0.475528, -0.475528, 0.345492, 0.654508 +997, 0.475528, -0.475528, 0.345492, 0.654508 +998, 0.475528, -0.475528, 0.345492, 0.654508 +999, 0.475528, -0.475528, 0.345492, 0.654508 +1000, 0.455049, -0.498668, 0.349171, 0.649877 +1001, 0.455049, -0.498668, 0.349171, 0.649877 +1002, 0.455049, -0.498668, 0.349171, 0.649877 +1003, 0.455049, -0.498668, 0.349171, 0.649877 +1004, 0.455049, -0.498668, 0.349171, 0.649877 +1005, 0.455049, -0.498668, 0.349171, 0.649877 +1006, 0.455049, -0.498668, 0.349171, 0.649877 +1007, 0.455049, -0.498668, 0.349171, 0.649877 +1008, 0.455049, -0.498668, 0.349171, 0.649877 +1009, 0.455049, -0.498668, 0.349171, 0.649877 +1010, 0.455049, -0.498668, 0.349171, 0.649877 +1011, 0.455049, -0.498668, 0.349171, 0.649877 +1012, 0.455049, -0.498668, 0.349171, 0.649877 +1013, 0.455049, -0.498668, 0.349171, 0.649877 +1014, 0.455049, -0.498668, 0.349171, 0.649877 +1015, 0.455049, -0.498668, 0.349171, 0.649877 +1016, 0.455049, -0.498668, 0.349171, 0.649877 +1017, 0.455049, -0.498668, 0.349171, 0.649877 +1018, 0.455049, -0.498668, 0.349171, 0.649877 +1019, 0.455049, -0.498668, 0.349171, 0.649877 +1020, 0.455049, -0.498668, 0.349171, 0.649877 +1021, 0.455049, -0.498668, 0.349171, 0.649877 +1022, 0.455049, -0.498668, 0.349171, 0.649877 +1023, 0.455049, -0.498668, 0.349171, 0.649877 +1024, 0.455049, -0.498668, 0.349171, 0.649877 +1025, 0.455049, -0.498668, 0.349171, 0.649877 +1026, 0.455049, -0.498668, 0.349171, 0.649877 +1027, 0.455049, -0.498668, 0.349171, 0.649877 +1028, 0.455049, -0.498668, 0.349171, 0.649877 +1029, 0.455049, -0.498668, 0.349171, 0.649877 +1030, 0.455049, -0.498668, 0.349171, 0.649877 +1031, 0.455049, -0.498668, 0.349171, 0.649877 +1032, 0.455049, -0.498668, 0.349171, 0.649877 +1033, 0.455049, -0.498668, 0.349171, 0.649877 +1034, 0.455049, -0.498668, 0.349171, 0.649877 +1035, 0.455049, -0.498668, 0.349171, 0.649877 +1036, 0.455049, -0.498668, 0.349171, 0.649877 +1037, 0.455049, -0.498668, 0.349171, 0.649877 +1038, 0.455049, -0.498668, 0.349171, 0.649877 +1039, 0.455049, -0.498668, 0.349171, 0.649877 +1040, 0.455049, -0.498668, 0.349171, 0.649877 +1041, 0.455049, -0.498668, 0.349171, 0.649877 +1042, 0.455049, -0.498668, 0.349171, 0.649877 +1043, 0.455049, -0.498668, 0.349171, 0.649877 +1044, 0.455049, -0.498668, 0.349171, 0.649877 +1045, 0.455049, -0.498668, 0.349171, 0.649877 +1046, 0.455049, -0.498668, 0.349171, 0.649877 +1047, 0.455049, -0.498668, 0.349171, 0.649877 +1048, 0.455049, -0.498668, 0.349171, 0.649877 +1049, 0.455049, -0.498668, 0.349171, 0.649877 +1050, 0.455049, -0.498668, 0.349171, 0.649877 +1051, 0.455049, -0.498668, 0.349171, 0.649877 +1052, 0.455049, -0.498668, 0.349171, 0.649877 +1053, 0.455049, -0.498668, 0.349171, 0.649877 +1054, 0.455049, -0.498668, 0.349171, 0.649877 +1055, 0.455049, -0.498668, 0.349171, 0.649877 +1056, 0.455049, -0.498668, 0.349171, 0.649877 +1057, 0.455049, -0.498668, 0.349171, 0.649877 +1058, 0.455049, -0.498668, 0.349171, 0.649877 +1059, 0.455049, -0.498668, 0.349171, 0.649877 +1060, 0.455049, -0.498668, 0.349171, 0.649877 +1061, 0.455049, -0.498668, 0.349171, 0.649877 +1062, 0.455049, -0.498668, 0.349171, 0.649877 +1063, 0.455049, -0.498668, 0.349171, 0.649877 +1064, 0.455049, -0.498668, 0.349171, 0.649877 +1065, 0.455049, -0.498668, 0.349171, 0.649877 +1066, 0.455049, -0.498668, 0.349171, 0.649877 +1067, 0.455049, -0.498668, 0.349171, 0.649877 +1068, 0.455049, -0.498668, 0.349171, 0.649877 +1069, 0.455049, -0.498668, 0.349171, 0.649877 +1070, 0.455049, -0.498668, 0.349171, 0.649877 +1071, 0.455049, -0.498668, 0.349171, 0.649877 +1072, 0.455049, -0.498668, 0.349171, 0.649877 +1073, 0.455049, -0.498668, 0.349171, 0.649877 +1074, 0.455049, -0.498668, 0.349171, 0.649877 +1075, 0.455049, -0.498668, 0.349171, 0.649877 +1076, 0.455049, -0.498668, 0.349171, 0.649877 +1077, 0.455049, -0.498668, 0.349171, 0.649877 +1078, 0.455049, -0.498668, 0.349171, 0.649877 +1079, 0.455049, -0.498668, 0.349171, 0.649877 +1080, 0.455049, -0.498668, 0.349171, 0.649877 +1081, 0.455049, -0.498668, 0.349171, 0.649877 +1082, 0.455049, -0.498668, 0.349171, 0.649877 +1083, 0.455049, -0.498668, 0.349171, 0.649877 +1084, 0.455049, -0.498668, 0.349171, 0.649877 +1085, 0.455049, -0.498668, 0.349171, 0.649877 +1086, 0.455049, -0.498668, 0.349171, 0.649877 +1087, 0.455049, -0.498668, 0.349171, 0.649877 +1088, 0.455049, -0.498668, 0.349171, 0.649877 +1089, 0.455049, -0.498668, 0.349171, 0.649877 +1090, 0.455049, -0.498668, 0.349171, 0.649877 +1091, 0.455049, -0.498668, 0.349171, 0.649877 +1092, 0.455049, -0.498668, 0.349171, 0.649877 +1093, 0.455049, -0.498668, 0.349171, 0.649877 +1094, 0.455049, -0.498668, 0.349171, 0.649877 +1095, 0.455049, -0.498668, 0.349171, 0.649877 +1096, 0.455049, -0.498668, 0.349171, 0.649877 +1097, 0.455049, -0.498668, 0.349171, 0.649877 +1098, 0.455049, -0.498668, 0.349171, 0.649877 +1099, 0.455049, -0.498668, 0.349171, 0.649877 +1100, 0.434575, -0.521730, 0.351911, 0.644283 +1101, 0.434575, -0.521730, 0.351911, 0.644283 +1102, 0.434575, -0.521730, 0.351911, 0.644283 +1103, 0.434575, -0.521730, 0.351911, 0.644283 +1104, 0.434575, -0.521730, 0.351911, 0.644283 +1105, 0.434575, -0.521730, 0.351911, 0.644283 +1106, 0.434575, -0.521730, 0.351911, 0.644283 +1107, 0.434575, -0.521730, 0.351911, 0.644283 +1108, 0.434575, -0.521730, 0.351911, 0.644283 +1109, 0.434575, -0.521730, 0.351911, 0.644283 +1110, 0.434575, -0.521730, 0.351911, 0.644283 +1111, 0.434575, -0.521730, 0.351911, 0.644283 +1112, 0.434575, -0.521730, 0.351911, 0.644283 +1113, 0.434575, -0.521730, 0.351911, 0.644283 +1114, 0.434575, -0.521730, 0.351911, 0.644283 +1115, 0.434575, -0.521730, 0.351911, 0.644283 +1116, 0.434575, -0.521730, 0.351911, 0.644283 +1117, 0.434575, -0.521730, 0.351911, 0.644283 +1118, 0.434575, -0.521730, 0.351911, 0.644283 +1119, 0.434575, -0.521730, 0.351911, 0.644283 +1120, 0.434575, -0.521730, 0.351911, 0.644283 +1121, 0.434575, -0.521730, 0.351911, 0.644283 +1122, 0.434575, -0.521730, 0.351911, 0.644283 +1123, 0.434575, -0.521730, 0.351911, 0.644283 +1124, 0.434575, -0.521730, 0.351911, 0.644283 +1125, 0.434575, -0.521730, 0.351911, 0.644283 +1126, 0.434575, -0.521730, 0.351911, 0.644283 +1127, 0.434575, -0.521730, 0.351911, 0.644283 +1128, 0.434575, -0.521730, 0.351911, 0.644283 +1129, 0.434575, -0.521730, 0.351911, 0.644283 +1130, 0.434575, -0.521730, 0.351911, 0.644283 +1131, 0.434575, -0.521730, 0.351911, 0.644283 +1132, 0.434575, -0.521730, 0.351911, 0.644283 +1133, 0.434575, -0.521730, 0.351911, 0.644283 +1134, 0.434575, -0.521730, 0.351911, 0.644283 +1135, 0.434575, -0.521730, 0.351911, 0.644283 +1136, 0.434575, -0.521730, 0.351911, 0.644283 +1137, 0.434575, -0.521730, 0.351911, 0.644283 +1138, 0.434575, -0.521730, 0.351911, 0.644283 +1139, 0.434575, -0.521730, 0.351911, 0.644283 +1140, 0.434575, -0.521730, 0.351911, 0.644283 +1141, 0.434575, -0.521730, 0.351911, 0.644283 +1142, 0.434575, -0.521730, 0.351911, 0.644283 +1143, 0.434575, -0.521730, 0.351911, 0.644283 +1144, 0.434575, -0.521730, 0.351911, 0.644283 +1145, 0.434575, -0.521730, 0.351911, 0.644283 +1146, 0.434575, -0.521730, 0.351911, 0.644283 +1147, 0.434575, -0.521730, 0.351911, 0.644283 +1148, 0.434575, -0.521730, 0.351911, 0.644283 +1149, 0.434575, -0.521730, 0.351911, 0.644283 +1150, 0.434575, -0.521730, 0.351911, 0.644283 +1151, 0.434575, -0.521730, 0.351911, 0.644283 +1152, 0.434575, -0.521730, 0.351911, 0.644283 +1153, 0.434575, -0.521730, 0.351911, 0.644283 +1154, 0.434575, -0.521730, 0.351911, 0.644283 +1155, 0.434575, -0.521730, 0.351911, 0.644283 +1156, 0.434575, -0.521730, 0.351911, 0.644283 +1157, 0.434575, -0.521730, 0.351911, 0.644283 +1158, 0.434575, -0.521730, 0.351911, 0.644283 +1159, 0.434575, -0.521730, 0.351911, 0.644283 +1160, 0.434575, -0.521730, 0.351911, 0.644283 +1161, 0.434575, -0.521730, 0.351911, 0.644283 +1162, 0.434575, -0.521730, 0.351911, 0.644283 +1163, 0.434575, -0.521730, 0.351911, 0.644283 +1164, 0.434575, -0.521730, 0.351911, 0.644283 +1165, 0.434575, -0.521730, 0.351911, 0.644283 +1166, 0.434575, -0.521730, 0.351911, 0.644283 +1167, 0.434575, -0.521730, 0.351911, 0.644283 +1168, 0.434575, -0.521730, 0.351911, 0.644283 +1169, 0.434575, -0.521730, 0.351911, 0.644283 +1170, 0.434575, -0.521730, 0.351911, 0.644283 +1171, 0.434575, -0.521730, 0.351911, 0.644283 +1172, 0.434575, -0.521730, 0.351911, 0.644283 +1173, 0.434575, -0.521730, 0.351911, 0.644283 +1174, 0.434575, -0.521730, 0.351911, 0.644283 +1175, 0.434575, -0.521730, 0.351911, 0.644283 +1176, 0.434575, -0.521730, 0.351911, 0.644283 +1177, 0.434575, -0.521730, 0.351911, 0.644283 +1178, 0.434575, -0.521730, 0.351911, 0.644283 +1179, 0.434575, -0.521730, 0.351911, 0.644283 +1180, 0.434575, -0.521730, 0.351911, 0.644283 +1181, 0.434575, -0.521730, 0.351911, 0.644283 +1182, 0.434575, -0.521730, 0.351911, 0.644283 +1183, 0.434575, -0.521730, 0.351911, 0.644283 +1184, 0.434575, -0.521730, 0.351911, 0.644283 +1185, 0.434575, -0.521730, 0.351911, 0.644283 +1186, 0.434575, -0.521730, 0.351911, 0.644283 +1187, 0.434575, -0.521730, 0.351911, 0.644283 +1188, 0.434575, -0.521730, 0.351911, 0.644283 +1189, 0.434575, -0.521730, 0.351911, 0.644283 +1190, 0.434575, -0.521730, 0.351911, 0.644283 +1191, 0.434575, -0.521730, 0.351911, 0.644283 +1192, 0.434575, -0.521730, 0.351911, 0.644283 +1193, 0.434575, -0.521730, 0.351911, 0.644283 +1194, 0.434575, -0.521730, 0.351911, 0.644283 +1195, 0.434575, -0.521730, 0.351911, 0.644283 +1196, 0.434575, -0.521730, 0.351911, 0.644283 +1197, 0.434575, -0.521730, 0.351911, 0.644283 +1198, 0.434575, -0.521730, 0.351911, 0.644283 +1199, 0.434575, -0.521730, 0.351911, 0.644283 +1200, 0.414147, -0.544673, 0.353715, 0.637730 +1201, 0.414147, -0.544673, 0.353715, 0.637730 +1202, 0.414147, -0.544673, 0.353715, 0.637730 +1203, 0.414147, -0.544673, 0.353715, 0.637730 +1204, 0.414147, -0.544673, 0.353715, 0.637730 +1205, 0.414147, -0.544673, 0.353715, 0.637730 +1206, 0.414147, -0.544673, 0.353715, 0.637730 +1207, 0.414147, -0.544673, 0.353715, 0.637730 +1208, 0.414147, -0.544673, 0.353715, 0.637730 +1209, 0.414147, -0.544673, 0.353715, 0.637730 +1210, 0.414147, -0.544673, 0.353715, 0.637730 +1211, 0.414147, -0.544673, 0.353715, 0.637730 +1212, 0.414147, -0.544673, 0.353715, 0.637730 +1213, 0.414147, -0.544673, 0.353715, 0.637730 +1214, 0.414147, -0.544673, 0.353715, 0.637730 +1215, 0.414147, -0.544673, 0.353715, 0.637730 +1216, 0.414147, -0.544673, 0.353715, 0.637730 +1217, 0.414147, -0.544673, 0.353715, 0.637730 +1218, 0.414147, -0.544673, 0.353715, 0.637730 +1219, 0.414147, -0.544673, 0.353715, 0.637730 +1220, 0.414147, -0.544673, 0.353715, 0.637730 +1221, 0.414147, -0.544673, 0.353715, 0.637730 +1222, 0.414147, -0.544673, 0.353715, 0.637730 +1223, 0.414147, -0.544673, 0.353715, 0.637730 +1224, 0.414147, -0.544673, 0.353715, 0.637730 +1225, 0.414147, -0.544673, 0.353715, 0.637730 +1226, 0.414147, -0.544673, 0.353715, 0.637730 +1227, 0.414147, -0.544673, 0.353715, 0.637730 +1228, 0.414147, -0.544673, 0.353715, 0.637730 +1229, 0.414147, -0.544673, 0.353715, 0.637730 +1230, 0.414147, -0.544673, 0.353715, 0.637730 +1231, 0.414147, -0.544673, 0.353715, 0.637730 +1232, 0.414147, -0.544673, 0.353715, 0.637730 +1233, 0.414147, -0.544673, 0.353715, 0.637730 +1234, 0.414147, -0.544673, 0.353715, 0.637730 +1235, 0.414147, -0.544673, 0.353715, 0.637730 +1236, 0.414147, -0.544673, 0.353715, 0.637730 +1237, 0.414147, -0.544673, 0.353715, 0.637730 +1238, 0.414147, -0.544673, 0.353715, 0.637730 +1239, 0.414147, -0.544673, 0.353715, 0.637730 +1240, 0.414147, -0.544673, 0.353715, 0.637730 +1241, 0.414147, -0.544673, 0.353715, 0.637730 +1242, 0.414147, -0.544673, 0.353715, 0.637730 +1243, 0.414147, -0.544673, 0.353715, 0.637730 +1244, 0.414147, -0.544673, 0.353715, 0.637730 +1245, 0.414147, -0.544673, 0.353715, 0.637730 +1246, 0.414147, -0.544673, 0.353715, 0.637730 +1247, 0.414147, -0.544673, 0.353715, 0.637730 +1248, 0.414147, -0.544673, 0.353715, 0.637730 +1249, 0.414147, -0.544673, 0.353715, 0.637730 +1250, 0.414147, -0.544673, 0.353715, 0.637730 +1251, 0.414147, -0.544673, 0.353715, 0.637730 +1252, 0.414147, -0.544673, 0.353715, 0.637730 +1253, 0.414147, -0.544673, 0.353715, 0.637730 +1254, 0.414147, -0.544673, 0.353715, 0.637730 +1255, 0.414147, -0.544673, 0.353715, 0.637730 +1256, 0.414147, -0.544673, 0.353715, 0.637730 +1257, 0.414147, -0.544673, 0.353715, 0.637730 +1258, 0.414147, -0.544673, 0.353715, 0.637730 +1259, 0.414147, -0.544673, 0.353715, 0.637730 +1260, 0.414147, -0.544673, 0.353715, 0.637730 +1261, 0.414147, -0.544673, 0.353715, 0.637730 +1262, 0.414147, -0.544673, 0.353715, 0.637730 +1263, 0.414147, -0.544673, 0.353715, 0.637730 +1264, 0.414147, -0.544673, 0.353715, 0.637730 +1265, 0.414147, -0.544673, 0.353715, 0.637730 +1266, 0.414147, -0.544673, 0.353715, 0.637730 +1267, 0.414147, -0.544673, 0.353715, 0.637730 +1268, 0.414147, -0.544673, 0.353715, 0.637730 +1269, 0.414147, -0.544673, 0.353715, 0.637730 +1270, 0.414147, -0.544673, 0.353715, 0.637730 +1271, 0.414147, -0.544673, 0.353715, 0.637730 +1272, 0.414147, -0.544673, 0.353715, 0.637730 +1273, 0.414147, -0.544673, 0.353715, 0.637730 +1274, 0.414147, -0.544673, 0.353715, 0.637730 +1275, 0.414147, -0.544673, 0.353715, 0.637730 +1276, 0.414147, -0.544673, 0.353715, 0.637730 +1277, 0.414147, -0.544673, 0.353715, 0.637730 +1278, 0.414147, -0.544673, 0.353715, 0.637730 +1279, 0.414147, -0.544673, 0.353715, 0.637730 +1280, 0.414147, -0.544673, 0.353715, 0.637730 +1281, 0.414147, -0.544673, 0.353715, 0.637730 +1282, 0.414147, -0.544673, 0.353715, 0.637730 +1283, 0.414147, -0.544673, 0.353715, 0.637730 +1284, 0.414147, -0.544673, 0.353715, 0.637730 +1285, 0.414147, -0.544673, 0.353715, 0.637730 +1286, 0.414147, -0.544673, 0.353715, 0.637730 +1287, 0.414147, -0.544673, 0.353715, 0.637730 +1288, 0.414147, -0.544673, 0.353715, 0.637730 +1289, 0.414147, -0.544673, 0.353715, 0.637730 +1290, 0.414147, -0.544673, 0.353715, 0.637730 +1291, 0.414147, -0.544673, 0.353715, 0.637730 +1292, 0.414147, -0.544673, 0.353715, 0.637730 +1293, 0.414147, -0.544673, 0.353715, 0.637730 +1294, 0.414147, -0.544673, 0.353715, 0.637730 +1295, 0.414147, -0.544673, 0.353715, 0.637730 +1296, 0.414147, -0.544673, 0.353715, 0.637730 +1297, 0.414147, -0.544673, 0.353715, 0.637730 +1298, 0.414147, -0.544673, 0.353715, 0.637730 +1299, 0.414147, -0.544673, 0.353715, 0.637730 +1300, 0.393807, -0.567455, 0.354585, 0.630223 +1301, 0.393807, -0.567455, 0.354585, 0.630223 +1302, 0.393807, -0.567455, 0.354585, 0.630223 +1303, 0.393807, -0.567455, 0.354585, 0.630223 +1304, 0.393807, -0.567455, 0.354585, 0.630223 +1305, 0.393807, -0.567455, 0.354585, 0.630223 +1306, 0.393807, -0.567455, 0.354585, 0.630223 +1307, 0.393807, -0.567455, 0.354585, 0.630223 +1308, 0.393807, -0.567455, 0.354585, 0.630223 +1309, 0.393807, -0.567455, 0.354585, 0.630223 +1310, 0.393807, -0.567455, 0.354585, 0.630223 +1311, 0.393807, -0.567455, 0.354585, 0.630223 +1312, 0.393807, -0.567455, 0.354585, 0.630223 +1313, 0.393807, -0.567455, 0.354585, 0.630223 +1314, 0.393807, -0.567455, 0.354585, 0.630223 +1315, 0.393807, -0.567455, 0.354585, 0.630223 +1316, 0.393807, -0.567455, 0.354585, 0.630223 +1317, 0.393807, -0.567455, 0.354585, 0.630223 +1318, 0.393807, -0.567455, 0.354585, 0.630223 +1319, 0.393807, -0.567455, 0.354585, 0.630223 +1320, 0.393807, -0.567455, 0.354585, 0.630223 +1321, 0.393807, -0.567455, 0.354585, 0.630223 +1322, 0.393807, -0.567455, 0.354585, 0.630223 +1323, 0.393807, -0.567455, 0.354585, 0.630223 +1324, 0.393807, -0.567455, 0.354585, 0.630223 +1325, 0.393807, -0.567455, 0.354585, 0.630223 +1326, 0.393807, -0.567455, 0.354585, 0.630223 +1327, 0.393807, -0.567455, 0.354585, 0.630223 +1328, 0.393807, -0.567455, 0.354585, 0.630223 +1329, 0.393807, -0.567455, 0.354585, 0.630223 +1330, 0.393807, -0.567455, 0.354585, 0.630223 +1331, 0.393807, -0.567455, 0.354585, 0.630223 +1332, 0.393807, -0.567455, 0.354585, 0.630223 +1333, 0.393807, -0.567455, 0.354585, 0.630223 +1334, 0.393807, -0.567455, 0.354585, 0.630223 +1335, 0.393807, -0.567455, 0.354585, 0.630223 +1336, 0.393807, -0.567455, 0.354585, 0.630223 +1337, 0.393807, -0.567455, 0.354585, 0.630223 +1338, 0.393807, -0.567455, 0.354585, 0.630223 +1339, 0.393807, -0.567455, 0.354585, 0.630223 +1340, 0.393807, -0.567455, 0.354585, 0.630223 +1341, 0.393807, -0.567455, 0.354585, 0.630223 +1342, 0.393807, -0.567455, 0.354585, 0.630223 +1343, 0.393807, -0.567455, 0.354585, 0.630223 +1344, 0.393807, -0.567455, 0.354585, 0.630223 +1345, 0.393807, -0.567455, 0.354585, 0.630223 +1346, 0.393807, -0.567455, 0.354585, 0.630223 +1347, 0.393807, -0.567455, 0.354585, 0.630223 +1348, 0.393807, -0.567455, 0.354585, 0.630223 +1349, 0.393807, -0.567455, 0.354585, 0.630223 +1350, 0.393807, -0.567455, 0.354585, 0.630223 +1351, 0.393807, -0.567455, 0.354585, 0.630223 +1352, 0.393807, -0.567455, 0.354585, 0.630223 +1353, 0.393807, -0.567455, 0.354585, 0.630223 +1354, 0.393807, -0.567455, 0.354585, 0.630223 +1355, 0.393807, -0.567455, 0.354585, 0.630223 +1356, 0.393807, -0.567455, 0.354585, 0.630223 +1357, 0.393807, -0.567455, 0.354585, 0.630223 +1358, 0.393807, -0.567455, 0.354585, 0.630223 +1359, 0.393807, -0.567455, 0.354585, 0.630223 +1360, 0.393807, -0.567455, 0.354585, 0.630223 +1361, 0.393807, -0.567455, 0.354585, 0.630223 +1362, 0.393807, -0.567455, 0.354585, 0.630223 +1363, 0.393807, -0.567455, 0.354585, 0.630223 +1364, 0.393807, -0.567455, 0.354585, 0.630223 +1365, 0.393807, -0.567455, 0.354585, 0.630223 +1366, 0.393807, -0.567455, 0.354585, 0.630223 +1367, 0.393807, -0.567455, 0.354585, 0.630223 +1368, 0.393807, -0.567455, 0.354585, 0.630223 +1369, 0.393807, -0.567455, 0.354585, 0.630223 +1370, 0.393807, -0.567455, 0.354585, 0.630223 +1371, 0.393807, -0.567455, 0.354585, 0.630223 +1372, 0.393807, -0.567455, 0.354585, 0.630223 +1373, 0.393807, -0.567455, 0.354585, 0.630223 +1374, 0.393807, -0.567455, 0.354585, 0.630223 +1375, 0.393807, -0.567455, 0.354585, 0.630223 +1376, 0.393807, -0.567455, 0.354585, 0.630223 +1377, 0.393807, -0.567455, 0.354585, 0.630223 +1378, 0.393807, -0.567455, 0.354585, 0.630223 +1379, 0.393807, -0.567455, 0.354585, 0.630223 +1380, 0.393807, -0.567455, 0.354585, 0.630223 +1381, 0.393807, -0.567455, 0.354585, 0.630223 +1382, 0.393807, -0.567455, 0.354585, 0.630223 +1383, 0.393807, -0.567455, 0.354585, 0.630223 +1384, 0.393807, -0.567455, 0.354585, 0.630223 +1385, 0.393807, -0.567455, 0.354585, 0.630223 +1386, 0.393807, -0.567455, 0.354585, 0.630223 +1387, 0.393807, -0.567455, 0.354585, 0.630223 +1388, 0.393807, -0.567455, 0.354585, 0.630223 +1389, 0.393807, -0.567455, 0.354585, 0.630223 +1390, 0.393807, -0.567455, 0.354585, 0.630223 +1391, 0.393807, -0.567455, 0.354585, 0.630223 +1392, 0.393807, -0.567455, 0.354585, 0.630223 +1393, 0.393807, -0.567455, 0.354585, 0.630223 +1394, 0.393807, -0.567455, 0.354585, 0.630223 +1395, 0.393807, -0.567455, 0.354585, 0.630223 +1396, 0.393807, -0.567455, 0.354585, 0.630223 +1397, 0.393807, -0.567455, 0.354585, 0.630223 +1398, 0.393807, -0.567455, 0.354585, 0.630223 +1399, 0.393807, -0.567455, 0.354585, 0.630223 +1400, 0.373595, -0.590035, 0.354529, 0.621767 +1401, 0.373595, -0.590035, 0.354529, 0.621767 +1402, 0.373595, -0.590035, 0.354529, 0.621767 +1403, 0.373595, -0.590035, 0.354529, 0.621767 +1404, 0.373595, -0.590035, 0.354529, 0.621767 +1405, 0.373595, -0.590035, 0.354529, 0.621767 +1406, 0.373595, -0.590035, 0.354529, 0.621767 +1407, 0.373595, -0.590035, 0.354529, 0.621767 +1408, 0.373595, -0.590035, 0.354529, 0.621767 +1409, 0.373595, -0.590035, 0.354529, 0.621767 +1410, 0.373595, -0.590035, 0.354529, 0.621767 +1411, 0.373595, -0.590035, 0.354529, 0.621767 +1412, 0.373595, -0.590035, 0.354529, 0.621767 +1413, 0.373595, -0.590035, 0.354529, 0.621767 +1414, 0.373595, -0.590035, 0.354529, 0.621767 +1415, 0.373595, -0.590035, 0.354529, 0.621767 +1416, 0.373595, -0.590035, 0.354529, 0.621767 +1417, 0.373595, -0.590035, 0.354529, 0.621767 +1418, 0.373595, -0.590035, 0.354529, 0.621767 +1419, 0.373595, -0.590035, 0.354529, 0.621767 +1420, 0.373595, -0.590035, 0.354529, 0.621767 +1421, 0.373595, -0.590035, 0.354529, 0.621767 +1422, 0.373595, -0.590035, 0.354529, 0.621767 +1423, 0.373595, -0.590035, 0.354529, 0.621767 +1424, 0.373595, -0.590035, 0.354529, 0.621767 +1425, 0.373595, -0.590035, 0.354529, 0.621767 +1426, 0.373595, -0.590035, 0.354529, 0.621767 +1427, 0.373595, -0.590035, 0.354529, 0.621767 +1428, 0.373595, -0.590035, 0.354529, 0.621767 +1429, 0.373595, -0.590035, 0.354529, 0.621767 +1430, 0.373595, -0.590035, 0.354529, 0.621767 +1431, 0.373595, -0.590035, 0.354529, 0.621767 +1432, 0.373595, -0.590035, 0.354529, 0.621767 +1433, 0.373595, -0.590035, 0.354529, 0.621767 +1434, 0.373595, -0.590035, 0.354529, 0.621767 +1435, 0.373595, -0.590035, 0.354529, 0.621767 +1436, 0.373595, -0.590035, 0.354529, 0.621767 +1437, 0.373595, -0.590035, 0.354529, 0.621767 +1438, 0.373595, -0.590035, 0.354529, 0.621767 +1439, 0.373595, -0.590035, 0.354529, 0.621767 +1440, 0.373595, -0.590035, 0.354529, 0.621767 +1441, 0.373595, -0.590035, 0.354529, 0.621767 +1442, 0.373595, -0.590035, 0.354529, 0.621767 +1443, 0.373595, -0.590035, 0.354529, 0.621767 +1444, 0.373595, -0.590035, 0.354529, 0.621767 +1445, 0.373595, -0.590035, 0.354529, 0.621767 +1446, 0.373595, -0.590035, 0.354529, 0.621767 +1447, 0.373595, -0.590035, 0.354529, 0.621767 +1448, 0.373595, -0.590035, 0.354529, 0.621767 +1449, 0.373595, -0.590035, 0.354529, 0.621767 +1450, 0.373595, -0.590035, 0.354529, 0.621767 +1451, 0.373595, -0.590035, 0.354529, 0.621767 +1452, 0.373595, -0.590035, 0.354529, 0.621767 +1453, 0.373595, -0.590035, 0.354529, 0.621767 +1454, 0.373595, -0.590035, 0.354529, 0.621767 +1455, 0.373595, -0.590035, 0.354529, 0.621767 +1456, 0.373595, -0.590035, 0.354529, 0.621767 +1457, 0.373595, -0.590035, 0.354529, 0.621767 +1458, 0.373595, -0.590035, 0.354529, 0.621767 +1459, 0.373595, -0.590035, 0.354529, 0.621767 +1460, 0.373595, -0.590035, 0.354529, 0.621767 +1461, 0.373595, -0.590035, 0.354529, 0.621767 +1462, 0.373595, -0.590035, 0.354529, 0.621767 +1463, 0.373595, -0.590035, 0.354529, 0.621767 +1464, 0.373595, -0.590035, 0.354529, 0.621767 +1465, 0.373595, -0.590035, 0.354529, 0.621767 +1466, 0.373595, -0.590035, 0.354529, 0.621767 +1467, 0.373595, -0.590035, 0.354529, 0.621767 +1468, 0.373595, -0.590035, 0.354529, 0.621767 +1469, 0.373595, -0.590035, 0.354529, 0.621767 +1470, 0.373595, -0.590035, 0.354529, 0.621767 +1471, 0.373595, -0.590035, 0.354529, 0.621767 +1472, 0.373595, -0.590035, 0.354529, 0.621767 +1473, 0.373595, -0.590035, 0.354529, 0.621767 +1474, 0.373595, -0.590035, 0.354529, 0.621767 +1475, 0.373595, -0.590035, 0.354529, 0.621767 +1476, 0.373595, -0.590035, 0.354529, 0.621767 +1477, 0.373595, -0.590035, 0.354529, 0.621767 +1478, 0.373595, -0.590035, 0.354529, 0.621767 +1479, 0.373595, -0.590035, 0.354529, 0.621767 +1480, 0.373595, -0.590035, 0.354529, 0.621767 +1481, 0.373595, -0.590035, 0.354529, 0.621767 +1482, 0.373595, -0.590035, 0.354529, 0.621767 +1483, 0.373595, -0.590035, 0.354529, 0.621767 +1484, 0.373595, -0.590035, 0.354529, 0.621767 +1485, 0.373595, -0.590035, 0.354529, 0.621767 +1486, 0.373595, -0.590035, 0.354529, 0.621767 +1487, 0.373595, -0.590035, 0.354529, 0.621767 +1488, 0.373595, -0.590035, 0.354529, 0.621767 +1489, 0.373595, -0.590035, 0.354529, 0.621767 +1490, 0.373595, -0.590035, 0.354529, 0.621767 +1491, 0.373595, -0.590035, 0.354529, 0.621767 +1492, 0.373595, -0.590035, 0.354529, 0.621767 +1493, 0.373595, -0.590035, 0.354529, 0.621767 +1494, 0.373595, -0.590035, 0.354529, 0.621767 +1495, 0.373595, -0.590035, 0.354529, 0.621767 +1496, 0.373595, -0.590035, 0.354529, 0.621767 +1497, 0.373595, -0.590035, 0.354529, 0.621767 +1498, 0.373595, -0.590035, 0.354529, 0.621767 +1499, 0.373595, -0.590035, 0.354529, 0.621767 +1500, 0.353553, -0.612372, 0.353553, 0.612372 +1501, 0.353553, -0.612372, 0.353553, 0.612372 +1502, 0.353553, -0.612372, 0.353553, 0.612372 +1503, 0.353553, -0.612372, 0.353553, 0.612372 +1504, 0.353553, -0.612372, 0.353553, 0.612372 +1505, 0.353553, -0.612372, 0.353553, 0.612372 +1506, 0.353553, -0.612372, 0.353553, 0.612372 +1507, 0.353553, -0.612372, 0.353553, 0.612372 +1508, 0.353553, -0.612372, 0.353553, 0.612372 +1509, 0.353553, -0.612372, 0.353553, 0.612372 +1510, 0.353553, -0.612372, 0.353553, 0.612372 +1511, 0.353553, -0.612372, 0.353553, 0.612372 +1512, 0.353553, -0.612372, 0.353553, 0.612372 +1513, 0.353553, -0.612372, 0.353553, 0.612372 +1514, 0.353553, -0.612372, 0.353553, 0.612372 +1515, 0.353553, -0.612372, 0.353553, 0.612372 +1516, 0.353553, -0.612372, 0.353553, 0.612372 +1517, 0.353553, -0.612372, 0.353553, 0.612372 +1518, 0.353553, -0.612372, 0.353553, 0.612372 +1519, 0.353553, -0.612372, 0.353553, 0.612372 +1520, 0.353553, -0.612372, 0.353553, 0.612372 +1521, 0.353553, -0.612372, 0.353553, 0.612372 +1522, 0.353553, -0.612372, 0.353553, 0.612372 +1523, 0.353553, -0.612372, 0.353553, 0.612372 +1524, 0.353553, -0.612372, 0.353553, 0.612372 +1525, 0.353553, -0.612372, 0.353553, 0.612372 +1526, 0.353553, -0.612372, 0.353553, 0.612372 +1527, 0.353553, -0.612372, 0.353553, 0.612372 +1528, 0.353553, -0.612372, 0.353553, 0.612372 +1529, 0.353553, -0.612372, 0.353553, 0.612372 +1530, 0.353553, -0.612372, 0.353553, 0.612372 +1531, 0.353553, -0.612372, 0.353553, 0.612372 +1532, 0.353553, -0.612372, 0.353553, 0.612372 +1533, 0.353553, -0.612372, 0.353553, 0.612372 +1534, 0.353553, -0.612372, 0.353553, 0.612372 +1535, 0.353553, -0.612372, 0.353553, 0.612372 +1536, 0.353553, -0.612372, 0.353553, 0.612372 +1537, 0.353553, -0.612372, 0.353553, 0.612372 +1538, 0.353553, -0.612372, 0.353553, 0.612372 +1539, 0.353553, -0.612372, 0.353553, 0.612372 +1540, 0.353553, -0.612372, 0.353553, 0.612372 +1541, 0.353553, -0.612372, 0.353553, 0.612372 +1542, 0.353553, -0.612372, 0.353553, 0.612372 +1543, 0.353553, -0.612372, 0.353553, 0.612372 +1544, 0.353553, -0.612372, 0.353553, 0.612372 +1545, 0.353553, -0.612372, 0.353553, 0.612372 +1546, 0.353553, -0.612372, 0.353553, 0.612372 +1547, 0.353553, -0.612372, 0.353553, 0.612372 +1548, 0.353553, -0.612372, 0.353553, 0.612372 +1549, 0.353553, -0.612372, 0.353553, 0.612372 +1550, 0.353553, -0.612372, 0.353553, 0.612372 +1551, 0.353553, -0.612372, 0.353553, 0.612372 +1552, 0.353553, -0.612372, 0.353553, 0.612372 +1553, 0.353553, -0.612372, 0.353553, 0.612372 +1554, 0.353553, -0.612372, 0.353553, 0.612372 +1555, 0.353553, -0.612372, 0.353553, 0.612372 +1556, 0.353553, -0.612372, 0.353553, 0.612372 +1557, 0.353553, -0.612372, 0.353553, 0.612372 +1558, 0.353553, -0.612372, 0.353553, 0.612372 +1559, 0.353553, -0.612372, 0.353553, 0.612372 +1560, 0.353553, -0.612372, 0.353553, 0.612372 +1561, 0.353553, -0.612372, 0.353553, 0.612372 +1562, 0.353553, -0.612372, 0.353553, 0.612372 +1563, 0.353553, -0.612372, 0.353553, 0.612372 +1564, 0.353553, -0.612372, 0.353553, 0.612372 +1565, 0.353553, -0.612372, 0.353553, 0.612372 +1566, 0.353553, -0.612372, 0.353553, 0.612372 +1567, 0.353553, -0.612372, 0.353553, 0.612372 +1568, 0.353553, -0.612372, 0.353553, 0.612372 +1569, 0.353553, -0.612372, 0.353553, 0.612372 +1570, 0.353553, -0.612372, 0.353553, 0.612372 +1571, 0.353553, -0.612372, 0.353553, 0.612372 +1572, 0.353553, -0.612372, 0.353553, 0.612372 +1573, 0.353553, -0.612372, 0.353553, 0.612372 +1574, 0.353553, -0.612372, 0.353553, 0.612372 +1575, 0.353553, -0.612372, 0.353553, 0.612372 +1576, 0.353553, -0.612372, 0.353553, 0.612372 +1577, 0.353553, -0.612372, 0.353553, 0.612372 +1578, 0.353553, -0.612372, 0.353553, 0.612372 +1579, 0.353553, -0.612372, 0.353553, 0.612372 +1580, 0.353553, -0.612372, 0.353553, 0.612372 +1581, 0.353553, -0.612372, 0.353553, 0.612372 +1582, 0.353553, -0.612372, 0.353553, 0.612372 +1583, 0.353553, -0.612372, 0.353553, 0.612372 +1584, 0.353553, -0.612372, 0.353553, 0.612372 +1585, 0.353553, -0.612372, 0.353553, 0.612372 +1586, 0.353553, -0.612372, 0.353553, 0.612372 +1587, 0.353553, -0.612372, 0.353553, 0.612372 +1588, 0.353553, -0.612372, 0.353553, 0.612372 +1589, 0.353553, -0.612372, 0.353553, 0.612372 +1590, 0.353553, -0.612372, 0.353553, 0.612372 +1591, 0.353553, -0.612372, 0.353553, 0.612372 +1592, 0.353553, -0.612372, 0.353553, 0.612372 +1593, 0.353553, -0.612372, 0.353553, 0.612372 +1594, 0.353553, -0.612372, 0.353553, 0.612372 +1595, 0.353553, -0.612372, 0.353553, 0.612372 +1596, 0.353553, -0.612372, 0.353553, 0.612372 +1597, 0.353553, -0.612372, 0.353553, 0.612372 +1598, 0.353553, -0.612372, 0.353553, 0.612372 +1599, 0.353553, -0.612372, 0.353553, 0.612372 +1600, 0.333721, -0.634427, 0.351668, 0.602048 +1601, 0.333721, -0.634427, 0.351668, 0.602048 +1602, 0.333721, -0.634427, 0.351668, 0.602048 +1603, 0.333721, -0.634427, 0.351668, 0.602048 +1604, 0.333721, -0.634427, 0.351668, 0.602048 +1605, 0.333721, -0.634427, 0.351668, 0.602048 +1606, 0.333721, -0.634427, 0.351668, 0.602048 +1607, 0.333721, -0.634427, 0.351668, 0.602048 +1608, 0.333721, -0.634427, 0.351668, 0.602048 +1609, 0.333721, -0.634427, 0.351668, 0.602048 +1610, 0.333721, -0.634427, 0.351668, 0.602048 +1611, 0.333721, -0.634427, 0.351668, 0.602048 +1612, 0.333721, -0.634427, 0.351668, 0.602048 +1613, 0.333721, -0.634427, 0.351668, 0.602048 +1614, 0.333721, -0.634427, 0.351668, 0.602048 +1615, 0.333721, -0.634427, 0.351668, 0.602048 +1616, 0.333721, -0.634427, 0.351668, 0.602048 +1617, 0.333721, -0.634427, 0.351668, 0.602048 +1618, 0.333721, -0.634427, 0.351668, 0.602048 +1619, 0.333721, -0.634427, 0.351668, 0.602048 +1620, 0.333721, -0.634427, 0.351668, 0.602048 +1621, 0.333721, -0.634427, 0.351668, 0.602048 +1622, 0.333721, -0.634427, 0.351668, 0.602048 +1623, 0.333721, -0.634427, 0.351668, 0.602048 +1624, 0.333721, -0.634427, 0.351668, 0.602048 +1625, 0.333721, -0.634427, 0.351668, 0.602048 +1626, 0.333721, -0.634427, 0.351668, 0.602048 +1627, 0.333721, -0.634427, 0.351668, 0.602048 +1628, 0.333721, -0.634427, 0.351668, 0.602048 +1629, 0.333721, -0.634427, 0.351668, 0.602048 +1630, 0.333721, -0.634427, 0.351668, 0.602048 +1631, 0.333721, -0.634427, 0.351668, 0.602048 +1632, 0.333721, -0.634427, 0.351668, 0.602048 +1633, 0.333721, -0.634427, 0.351668, 0.602048 +1634, 0.333721, -0.634427, 0.351668, 0.602048 +1635, 0.333721, -0.634427, 0.351668, 0.602048 +1636, 0.333721, -0.634427, 0.351668, 0.602048 +1637, 0.333721, -0.634427, 0.351668, 0.602048 +1638, 0.333721, -0.634427, 0.351668, 0.602048 +1639, 0.333721, -0.634427, 0.351668, 0.602048 +1640, 0.333721, -0.634427, 0.351668, 0.602048 +1641, 0.333721, -0.634427, 0.351668, 0.602048 +1642, 0.333721, -0.634427, 0.351668, 0.602048 +1643, 0.333721, -0.634427, 0.351668, 0.602048 +1644, 0.333721, -0.634427, 0.351668, 0.602048 +1645, 0.333721, -0.634427, 0.351668, 0.602048 +1646, 0.333721, -0.634427, 0.351668, 0.602048 +1647, 0.333721, -0.634427, 0.351668, 0.602048 +1648, 0.333721, -0.634427, 0.351668, 0.602048 +1649, 0.333721, -0.634427, 0.351668, 0.602048 +1650, 0.333721, -0.634427, 0.351668, 0.602048 +1651, 0.333721, -0.634427, 0.351668, 0.602048 +1652, 0.333721, -0.634427, 0.351668, 0.602048 +1653, 0.333721, -0.634427, 0.351668, 0.602048 +1654, 0.333721, -0.634427, 0.351668, 0.602048 +1655, 0.333721, -0.634427, 0.351668, 0.602048 +1656, 0.333721, -0.634427, 0.351668, 0.602048 +1657, 0.333721, -0.634427, 0.351668, 0.602048 +1658, 0.333721, -0.634427, 0.351668, 0.602048 +1659, 0.333721, -0.634427, 0.351668, 0.602048 +1660, 0.333721, -0.634427, 0.351668, 0.602048 +1661, 0.333721, -0.634427, 0.351668, 0.602048 +1662, 0.333721, -0.634427, 0.351668, 0.602048 +1663, 0.333721, -0.634427, 0.351668, 0.602048 +1664, 0.333721, -0.634427, 0.351668, 0.602048 +1665, 0.333721, -0.634427, 0.351668, 0.602048 +1666, 0.333721, -0.634427, 0.351668, 0.602048 +1667, 0.333721, -0.634427, 0.351668, 0.602048 +1668, 0.333721, -0.634427, 0.351668, 0.602048 +1669, 0.333721, -0.634427, 0.351668, 0.602048 +1670, 0.333721, -0.634427, 0.351668, 0.602048 +1671, 0.333721, -0.634427, 0.351668, 0.602048 +1672, 0.333721, -0.634427, 0.351668, 0.602048 +1673, 0.333721, -0.634427, 0.351668, 0.602048 +1674, 0.333721, -0.634427, 0.351668, 0.602048 +1675, 0.333721, -0.634427, 0.351668, 0.602048 +1676, 0.333721, -0.634427, 0.351668, 0.602048 +1677, 0.333721, -0.634427, 0.351668, 0.602048 +1678, 0.333721, -0.634427, 0.351668, 0.602048 +1679, 0.333721, -0.634427, 0.351668, 0.602048 +1680, 0.333721, -0.634427, 0.351668, 0.602048 +1681, 0.333721, -0.634427, 0.351668, 0.602048 +1682, 0.333721, -0.634427, 0.351668, 0.602048 +1683, 0.333721, -0.634427, 0.351668, 0.602048 +1684, 0.333721, -0.634427, 0.351668, 0.602048 +1685, 0.333721, -0.634427, 0.351668, 0.602048 +1686, 0.333721, -0.634427, 0.351668, 0.602048 +1687, 0.333721, -0.634427, 0.351668, 0.602048 +1688, 0.333721, -0.634427, 0.351668, 0.602048 +1689, 0.333721, -0.634427, 0.351668, 0.602048 +1690, 0.333721, -0.634427, 0.351668, 0.602048 +1691, 0.333721, -0.634427, 0.351668, 0.602048 +1692, 0.333721, -0.634427, 0.351668, 0.602048 +1693, 0.333721, -0.634427, 0.351668, 0.602048 +1694, 0.333721, -0.634427, 0.351668, 0.602048 +1695, 0.333721, -0.634427, 0.351668, 0.602048 +1696, 0.333721, -0.634427, 0.351668, 0.602048 +1697, 0.333721, -0.634427, 0.351668, 0.602048 +1698, 0.333721, -0.634427, 0.351668, 0.602048 +1699, 0.333721, -0.634427, 0.351668, 0.602048 +1700, 0.314138, -0.656158, 0.348885, 0.590807 +1701, 0.314138, -0.656158, 0.348885, 0.590807 +1702, 0.314138, -0.656158, 0.348885, 0.590807 +1703, 0.314138, -0.656158, 0.348885, 0.590807 +1704, 0.314138, -0.656158, 0.348885, 0.590807 +1705, 0.314138, -0.656158, 0.348885, 0.590807 +1706, 0.314138, -0.656158, 0.348885, 0.590807 +1707, 0.314138, -0.656158, 0.348885, 0.590807 +1708, 0.314138, -0.656158, 0.348885, 0.590807 +1709, 0.314138, -0.656158, 0.348885, 0.590807 +1710, 0.314138, -0.656158, 0.348885, 0.590807 +1711, 0.314138, -0.656158, 0.348885, 0.590807 +1712, 0.314138, -0.656158, 0.348885, 0.590807 +1713, 0.314138, -0.656158, 0.348885, 0.590807 +1714, 0.314138, -0.656158, 0.348885, 0.590807 +1715, 0.314138, -0.656158, 0.348885, 0.590807 +1716, 0.314138, -0.656158, 0.348885, 0.590807 +1717, 0.314138, -0.656158, 0.348885, 0.590807 +1718, 0.314138, -0.656158, 0.348885, 0.590807 +1719, 0.314138, -0.656158, 0.348885, 0.590807 +1720, 0.314138, -0.656158, 0.348885, 0.590807 +1721, 0.314138, -0.656158, 0.348885, 0.590807 +1722, 0.314138, -0.656158, 0.348885, 0.590807 +1723, 0.314138, -0.656158, 0.348885, 0.590807 +1724, 0.314138, -0.656158, 0.348885, 0.590807 +1725, 0.314138, -0.656158, 0.348885, 0.590807 +1726, 0.314138, -0.656158, 0.348885, 0.590807 +1727, 0.314138, -0.656158, 0.348885, 0.590807 +1728, 0.314138, -0.656158, 0.348885, 0.590807 +1729, 0.314138, -0.656158, 0.348885, 0.590807 +1730, 0.314138, -0.656158, 0.348885, 0.590807 +1731, 0.314138, -0.656158, 0.348885, 0.590807 +1732, 0.314138, -0.656158, 0.348885, 0.590807 +1733, 0.314138, -0.656158, 0.348885, 0.590807 +1734, 0.314138, -0.656158, 0.348885, 0.590807 +1735, 0.314138, -0.656158, 0.348885, 0.590807 +1736, 0.314138, -0.656158, 0.348885, 0.590807 +1737, 0.314138, -0.656158, 0.348885, 0.590807 +1738, 0.314138, -0.656158, 0.348885, 0.590807 +1739, 0.314138, -0.656158, 0.348885, 0.590807 +1740, 0.314138, -0.656158, 0.348885, 0.590807 +1741, 0.314138, -0.656158, 0.348885, 0.590807 +1742, 0.314138, -0.656158, 0.348885, 0.590807 +1743, 0.314138, -0.656158, 0.348885, 0.590807 +1744, 0.314138, -0.656158, 0.348885, 0.590807 +1745, 0.314138, -0.656158, 0.348885, 0.590807 +1746, 0.314138, -0.656158, 0.348885, 0.590807 +1747, 0.314138, -0.656158, 0.348885, 0.590807 +1748, 0.314138, -0.656158, 0.348885, 0.590807 +1749, 0.314138, -0.656158, 0.348885, 0.590807 +1750, 0.314138, -0.656158, 0.348885, 0.590807 +1751, 0.314138, -0.656158, 0.348885, 0.590807 +1752, 0.314138, -0.656158, 0.348885, 0.590807 +1753, 0.314138, -0.656158, 0.348885, 0.590807 +1754, 0.314138, -0.656158, 0.348885, 0.590807 +1755, 0.314138, -0.656158, 0.348885, 0.590807 +1756, 0.314138, -0.656158, 0.348885, 0.590807 +1757, 0.314138, -0.656158, 0.348885, 0.590807 +1758, 0.314138, -0.656158, 0.348885, 0.590807 +1759, 0.314138, -0.656158, 0.348885, 0.590807 +1760, 0.314138, -0.656158, 0.348885, 0.590807 +1761, 0.314138, -0.656158, 0.348885, 0.590807 +1762, 0.314138, -0.656158, 0.348885, 0.590807 +1763, 0.314138, -0.656158, 0.348885, 0.590807 +1764, 0.314138, -0.656158, 0.348885, 0.590807 +1765, 0.314138, -0.656158, 0.348885, 0.590807 +1766, 0.314138, -0.656158, 0.348885, 0.590807 +1767, 0.314138, -0.656158, 0.348885, 0.590807 +1768, 0.314138, -0.656158, 0.348885, 0.590807 +1769, 0.314138, -0.656158, 0.348885, 0.590807 +1770, 0.314138, -0.656158, 0.348885, 0.590807 +1771, 0.314138, -0.656158, 0.348885, 0.590807 +1772, 0.314138, -0.656158, 0.348885, 0.590807 +1773, 0.314138, -0.656158, 0.348885, 0.590807 +1774, 0.314138, -0.656158, 0.348885, 0.590807 +1775, 0.314138, -0.656158, 0.348885, 0.590807 +1776, 0.314138, -0.656158, 0.348885, 0.590807 +1777, 0.314138, -0.656158, 0.348885, 0.590807 +1778, 0.314138, -0.656158, 0.348885, 0.590807 +1779, 0.314138, -0.656158, 0.348885, 0.590807 +1780, 0.314138, -0.656158, 0.348885, 0.590807 +1781, 0.314138, -0.656158, 0.348885, 0.590807 +1782, 0.314138, -0.656158, 0.348885, 0.590807 +1783, 0.314138, -0.656158, 0.348885, 0.590807 +1784, 0.314138, -0.656158, 0.348885, 0.590807 +1785, 0.314138, -0.656158, 0.348885, 0.590807 +1786, 0.314138, -0.656158, 0.348885, 0.590807 +1787, 0.314138, -0.656158, 0.348885, 0.590807 +1788, 0.314138, -0.656158, 0.348885, 0.590807 +1789, 0.314138, -0.656158, 0.348885, 0.590807 +1790, 0.314138, -0.656158, 0.348885, 0.590807 +1791, 0.314138, -0.656158, 0.348885, 0.590807 +1792, 0.314138, -0.656158, 0.348885, 0.590807 +1793, 0.314138, -0.656158, 0.348885, 0.590807 +1794, 0.314138, -0.656158, 0.348885, 0.590807 +1795, 0.314138, -0.656158, 0.348885, 0.590807 +1796, 0.314138, -0.656158, 0.348885, 0.590807 +1797, 0.314138, -0.656158, 0.348885, 0.590807 +1798, 0.314138, -0.656158, 0.348885, 0.590807 +1799, 0.314138, -0.656158, 0.348885, 0.590807 +1800, 0.294843, -0.677527, 0.345217, 0.578662 +1801, 0.294843, -0.677527, 0.345217, 0.578662 +1802, 0.294843, -0.677527, 0.345217, 0.578662 +1803, 0.294843, -0.677527, 0.345217, 0.578662 +1804, 0.294843, -0.677527, 0.345217, 0.578662 +1805, 0.294843, -0.677527, 0.345217, 0.578662 +1806, 0.294843, -0.677527, 0.345217, 0.578662 +1807, 0.294843, -0.677527, 0.345217, 0.578662 +1808, 0.294843, -0.677527, 0.345217, 0.578662 +1809, 0.294843, -0.677527, 0.345217, 0.578662 +1810, 0.294843, -0.677527, 0.345217, 0.578662 +1811, 0.294843, -0.677527, 0.345217, 0.578662 +1812, 0.294843, -0.677527, 0.345217, 0.578662 +1813, 0.294843, -0.677527, 0.345217, 0.578662 +1814, 0.294843, -0.677527, 0.345217, 0.578662 +1815, 0.294843, -0.677527, 0.345217, 0.578662 +1816, 0.294843, -0.677527, 0.345217, 0.578662 +1817, 0.294843, -0.677527, 0.345217, 0.578662 +1818, 0.294843, -0.677527, 0.345217, 0.578662 +1819, 0.294843, -0.677527, 0.345217, 0.578662 +1820, 0.294843, -0.677527, 0.345217, 0.578662 +1821, 0.294843, -0.677527, 0.345217, 0.578662 +1822, 0.294843, -0.677527, 0.345217, 0.578662 +1823, 0.294843, -0.677527, 0.345217, 0.578662 +1824, 0.294843, -0.677527, 0.345217, 0.578662 +1825, 0.294843, -0.677527, 0.345217, 0.578662 +1826, 0.294843, -0.677527, 0.345217, 0.578662 +1827, 0.294843, -0.677527, 0.345217, 0.578662 +1828, 0.294843, -0.677527, 0.345217, 0.578662 +1829, 0.294843, -0.677527, 0.345217, 0.578662 +1830, 0.294843, -0.677527, 0.345217, 0.578662 +1831, 0.294843, -0.677527, 0.345217, 0.578662 +1832, 0.294843, -0.677527, 0.345217, 0.578662 +1833, 0.294843, -0.677527, 0.345217, 0.578662 +1834, 0.294843, -0.677527, 0.345217, 0.578662 +1835, 0.294843, -0.677527, 0.345217, 0.578662 +1836, 0.294843, -0.677527, 0.345217, 0.578662 +1837, 0.294843, -0.677527, 0.345217, 0.578662 +1838, 0.294843, -0.677527, 0.345217, 0.578662 +1839, 0.294843, -0.677527, 0.345217, 0.578662 +1840, 0.294843, -0.677527, 0.345217, 0.578662 +1841, 0.294843, -0.677527, 0.345217, 0.578662 +1842, 0.294843, -0.677527, 0.345217, 0.578662 +1843, 0.294843, -0.677527, 0.345217, 0.578662 +1844, 0.294843, -0.677527, 0.345217, 0.578662 +1845, 0.294843, -0.677527, 0.345217, 0.578662 +1846, 0.294843, -0.677527, 0.345217, 0.578662 +1847, 0.294843, -0.677527, 0.345217, 0.578662 +1848, 0.294843, -0.677527, 0.345217, 0.578662 +1849, 0.294843, -0.677527, 0.345217, 0.578662 +1850, 0.294843, -0.677527, 0.345217, 0.578662 +1851, 0.294843, -0.677527, 0.345217, 0.578662 +1852, 0.294843, -0.677527, 0.345217, 0.578662 +1853, 0.294843, -0.677527, 0.345217, 0.578662 +1854, 0.294843, -0.677527, 0.345217, 0.578662 +1855, 0.294843, -0.677527, 0.345217, 0.578662 +1856, 0.294843, -0.677527, 0.345217, 0.578662 +1857, 0.294843, -0.677527, 0.345217, 0.578662 +1858, 0.294843, -0.677527, 0.345217, 0.578662 +1859, 0.294843, -0.677527, 0.345217, 0.578662 +1860, 0.294843, -0.677527, 0.345217, 0.578662 +1861, 0.294843, -0.677527, 0.345217, 0.578662 +1862, 0.294843, -0.677527, 0.345217, 0.578662 +1863, 0.294843, -0.677527, 0.345217, 0.578662 +1864, 0.294843, -0.677527, 0.345217, 0.578662 +1865, 0.294843, -0.677527, 0.345217, 0.578662 +1866, 0.294843, -0.677527, 0.345217, 0.578662 +1867, 0.294843, -0.677527, 0.345217, 0.578662 +1868, 0.294843, -0.677527, 0.345217, 0.578662 +1869, 0.294843, -0.677527, 0.345217, 0.578662 +1870, 0.294843, -0.677527, 0.345217, 0.578662 +1871, 0.294843, -0.677527, 0.345217, 0.578662 +1872, 0.294843, -0.677527, 0.345217, 0.578662 +1873, 0.294843, -0.677527, 0.345217, 0.578662 +1874, 0.294843, -0.677527, 0.345217, 0.578662 +1875, 0.294843, -0.677527, 0.345217, 0.578662 +1876, 0.294843, -0.677527, 0.345217, 0.578662 +1877, 0.294843, -0.677527, 0.345217, 0.578662 +1878, 0.294843, -0.677527, 0.345217, 0.578662 +1879, 0.294843, -0.677527, 0.345217, 0.578662 +1880, 0.294843, -0.677527, 0.345217, 0.578662 +1881, 0.294843, -0.677527, 0.345217, 0.578662 +1882, 0.294843, -0.677527, 0.345217, 0.578662 +1883, 0.294843, -0.677527, 0.345217, 0.578662 +1884, 0.294843, -0.677527, 0.345217, 0.578662 +1885, 0.294843, -0.677527, 0.345217, 0.578662 +1886, 0.294843, -0.677527, 0.345217, 0.578662 +1887, 0.294843, -0.677527, 0.345217, 0.578662 +1888, 0.294843, -0.677527, 0.345217, 0.578662 +1889, 0.294843, -0.677527, 0.345217, 0.578662 +1890, 0.294843, -0.677527, 0.345217, 0.578662 +1891, 0.294843, -0.677527, 0.345217, 0.578662 +1892, 0.294843, -0.677527, 0.345217, 0.578662 +1893, 0.294843, -0.677527, 0.345217, 0.578662 +1894, 0.294843, -0.677527, 0.345217, 0.578662 +1895, 0.294843, -0.677527, 0.345217, 0.578662 +1896, 0.294843, -0.677527, 0.345217, 0.578662 +1897, 0.294843, -0.677527, 0.345217, 0.578662 +1898, 0.294843, -0.677527, 0.345217, 0.578662 +1899, 0.294843, -0.677527, 0.345217, 0.578662 +1900, 0.275876, -0.698494, 0.340678, 0.565629 +1901, 0.275876, -0.698494, 0.340678, 0.565629 +1902, 0.275876, -0.698494, 0.340678, 0.565629 +1903, 0.275876, -0.698494, 0.340678, 0.565629 +1904, 0.275876, -0.698494, 0.340678, 0.565629 +1905, 0.275876, -0.698494, 0.340678, 0.565629 +1906, 0.275876, -0.698494, 0.340678, 0.565629 +1907, 0.275876, -0.698494, 0.340678, 0.565629 +1908, 0.275876, -0.698494, 0.340678, 0.565629 +1909, 0.275876, -0.698494, 0.340678, 0.565629 +1910, 0.275876, -0.698494, 0.340678, 0.565629 +1911, 0.275876, -0.698494, 0.340678, 0.565629 +1912, 0.275876, -0.698494, 0.340678, 0.565629 +1913, 0.275876, -0.698494, 0.340678, 0.565629 +1914, 0.275876, -0.698494, 0.340678, 0.565629 +1915, 0.275876, -0.698494, 0.340678, 0.565629 +1916, 0.275876, -0.698494, 0.340678, 0.565629 +1917, 0.275876, -0.698494, 0.340678, 0.565629 +1918, 0.275876, -0.698494, 0.340678, 0.565629 +1919, 0.275876, -0.698494, 0.340678, 0.565629 +1920, 0.275876, -0.698494, 0.340678, 0.565629 +1921, 0.275876, -0.698494, 0.340678, 0.565629 +1922, 0.275876, -0.698494, 0.340678, 0.565629 +1923, 0.275876, -0.698494, 0.340678, 0.565629 +1924, 0.275876, -0.698494, 0.340678, 0.565629 +1925, 0.275876, -0.698494, 0.340678, 0.565629 +1926, 0.275876, -0.698494, 0.340678, 0.565629 +1927, 0.275876, -0.698494, 0.340678, 0.565629 +1928, 0.275876, -0.698494, 0.340678, 0.565629 +1929, 0.275876, -0.698494, 0.340678, 0.565629 +1930, 0.275876, -0.698494, 0.340678, 0.565629 +1931, 0.275876, -0.698494, 0.340678, 0.565629 +1932, 0.275876, -0.698494, 0.340678, 0.565629 +1933, 0.275876, -0.698494, 0.340678, 0.565629 +1934, 0.275876, -0.698494, 0.340678, 0.565629 +1935, 0.275876, -0.698494, 0.340678, 0.565629 +1936, 0.275876, -0.698494, 0.340678, 0.565629 +1937, 0.275876, -0.698494, 0.340678, 0.565629 +1938, 0.275876, -0.698494, 0.340678, 0.565629 +1939, 0.275876, -0.698494, 0.340678, 0.565629 +1940, 0.275876, -0.698494, 0.340678, 0.565629 +1941, 0.275876, -0.698494, 0.340678, 0.565629 +1942, 0.275876, -0.698494, 0.340678, 0.565629 +1943, 0.275876, -0.698494, 0.340678, 0.565629 +1944, 0.275876, -0.698494, 0.340678, 0.565629 +1945, 0.275876, -0.698494, 0.340678, 0.565629 +1946, 0.275876, -0.698494, 0.340678, 0.565629 +1947, 0.275876, -0.698494, 0.340678, 0.565629 +1948, 0.275876, -0.698494, 0.340678, 0.565629 +1949, 0.275876, -0.698494, 0.340678, 0.565629 +1950, 0.275876, -0.698494, 0.340678, 0.565629 +1951, 0.275876, -0.698494, 0.340678, 0.565629 +1952, 0.275876, -0.698494, 0.340678, 0.565629 +1953, 0.275876, -0.698494, 0.340678, 0.565629 +1954, 0.275876, -0.698494, 0.340678, 0.565629 +1955, 0.275876, -0.698494, 0.340678, 0.565629 +1956, 0.275876, -0.698494, 0.340678, 0.565629 +1957, 0.275876, -0.698494, 0.340678, 0.565629 +1958, 0.275876, -0.698494, 0.340678, 0.565629 +1959, 0.275876, -0.698494, 0.340678, 0.565629 +1960, 0.275876, -0.698494, 0.340678, 0.565629 +1961, 0.275876, -0.698494, 0.340678, 0.565629 +1962, 0.275876, -0.698494, 0.340678, 0.565629 +1963, 0.275876, -0.698494, 0.340678, 0.565629 +1964, 0.275876, -0.698494, 0.340678, 0.565629 +1965, 0.275876, -0.698494, 0.340678, 0.565629 +1966, 0.275876, -0.698494, 0.340678, 0.565629 +1967, 0.275876, -0.698494, 0.340678, 0.565629 +1968, 0.275876, -0.698494, 0.340678, 0.565629 +1969, 0.275876, -0.698494, 0.340678, 0.565629 +1970, 0.275876, -0.698494, 0.340678, 0.565629 +1971, 0.275876, -0.698494, 0.340678, 0.565629 +1972, 0.275876, -0.698494, 0.340678, 0.565629 +1973, 0.275876, -0.698494, 0.340678, 0.565629 +1974, 0.275876, -0.698494, 0.340678, 0.565629 +1975, 0.275876, -0.698494, 0.340678, 0.565629 +1976, 0.275876, -0.698494, 0.340678, 0.565629 +1977, 0.275876, -0.698494, 0.340678, 0.565629 +1978, 0.275876, -0.698494, 0.340678, 0.565629 +1979, 0.275876, -0.698494, 0.340678, 0.565629 +1980, 0.275876, -0.698494, 0.340678, 0.565629 +1981, 0.275876, -0.698494, 0.340678, 0.565629 +1982, 0.275876, -0.698494, 0.340678, 0.565629 +1983, 0.275876, -0.698494, 0.340678, 0.565629 +1984, 0.275876, -0.698494, 0.340678, 0.565629 +1985, 0.275876, -0.698494, 0.340678, 0.565629 +1986, 0.275876, -0.698494, 0.340678, 0.565629 +1987, 0.275876, -0.698494, 0.340678, 0.565629 +1988, 0.275876, -0.698494, 0.340678, 0.565629 +1989, 0.275876, -0.698494, 0.340678, 0.565629 +1990, 0.275876, -0.698494, 0.340678, 0.565629 +1991, 0.275876, -0.698494, 0.340678, 0.565629 +1992, 0.275876, -0.698494, 0.340678, 0.565629 +1993, 0.275876, -0.698494, 0.340678, 0.565629 +1994, 0.275876, -0.698494, 0.340678, 0.565629 +1995, 0.275876, -0.698494, 0.340678, 0.565629 +1996, 0.275876, -0.698494, 0.340678, 0.565629 +1997, 0.275876, -0.698494, 0.340678, 0.565629 +1998, 0.275876, -0.698494, 0.340678, 0.565629 +1999, 0.275876, -0.698494, 0.340678, 0.565629 +2000, 0.257274, -0.719022, 0.335286, 0.551725 +2001, 0.257274, -0.719022, 0.335286, 0.551725 +2002, 0.257274, -0.719022, 0.335286, 0.551725 +2003, 0.257274, -0.719022, 0.335286, 0.551725 +2004, 0.257274, -0.719022, 0.335286, 0.551725 +2005, 0.257274, -0.719022, 0.335286, 0.551725 +2006, 0.257274, -0.719022, 0.335286, 0.551725 +2007, 0.257274, -0.719022, 0.335286, 0.551725 +2008, 0.257274, -0.719022, 0.335286, 0.551725 +2009, 0.257274, -0.719022, 0.335286, 0.551725 +2010, 0.257274, -0.719022, 0.335286, 0.551725 +2011, 0.257274, -0.719022, 0.335286, 0.551725 +2012, 0.257274, -0.719022, 0.335286, 0.551725 +2013, 0.257274, -0.719022, 0.335286, 0.551725 +2014, 0.257274, -0.719022, 0.335286, 0.551725 +2015, 0.257274, -0.719022, 0.335286, 0.551725 +2016, 0.257274, -0.719022, 0.335286, 0.551725 +2017, 0.257274, -0.719022, 0.335286, 0.551725 +2018, 0.257274, -0.719022, 0.335286, 0.551725 +2019, 0.257274, -0.719022, 0.335286, 0.551725 +2020, 0.257274, -0.719022, 0.335286, 0.551725 +2021, 0.257274, -0.719022, 0.335286, 0.551725 +2022, 0.257274, -0.719022, 0.335286, 0.551725 +2023, 0.257274, -0.719022, 0.335286, 0.551725 +2024, 0.257274, -0.719022, 0.335286, 0.551725 +2025, 0.257274, -0.719022, 0.335286, 0.551725 +2026, 0.257274, -0.719022, 0.335286, 0.551725 +2027, 0.257274, -0.719022, 0.335286, 0.551725 +2028, 0.257274, -0.719022, 0.335286, 0.551725 +2029, 0.257274, -0.719022, 0.335286, 0.551725 +2030, 0.257274, -0.719022, 0.335286, 0.551725 +2031, 0.257274, -0.719022, 0.335286, 0.551725 +2032, 0.257274, -0.719022, 0.335286, 0.551725 +2033, 0.257274, -0.719022, 0.335286, 0.551725 +2034, 0.257274, -0.719022, 0.335286, 0.551725 +2035, 0.257274, -0.719022, 0.335286, 0.551725 +2036, 0.257274, -0.719022, 0.335286, 0.551725 +2037, 0.257274, -0.719022, 0.335286, 0.551725 +2038, 0.257274, -0.719022, 0.335286, 0.551725 +2039, 0.257274, -0.719022, 0.335286, 0.551725 +2040, 0.257274, -0.719022, 0.335286, 0.551725 +2041, 0.257274, -0.719022, 0.335286, 0.551725 +2042, 0.257274, -0.719022, 0.335286, 0.551725 +2043, 0.257274, -0.719022, 0.335286, 0.551725 +2044, 0.257274, -0.719022, 0.335286, 0.551725 +2045, 0.257274, -0.719022, 0.335286, 0.551725 +2046, 0.257274, -0.719022, 0.335286, 0.551725 +2047, 0.257274, -0.719022, 0.335286, 0.551725 +2048, 0.257274, -0.719022, 0.335286, 0.551725 +2049, 0.257274, -0.719022, 0.335286, 0.551725 +2050, 0.257274, -0.719022, 0.335286, 0.551725 +2051, 0.257274, -0.719022, 0.335286, 0.551725 +2052, 0.257274, -0.719022, 0.335286, 0.551725 +2053, 0.257274, -0.719022, 0.335286, 0.551725 +2054, 0.257274, -0.719022, 0.335286, 0.551725 +2055, 0.257274, -0.719022, 0.335286, 0.551725 +2056, 0.257274, -0.719022, 0.335286, 0.551725 +2057, 0.257274, -0.719022, 0.335286, 0.551725 +2058, 0.257274, -0.719022, 0.335286, 0.551725 +2059, 0.257274, -0.719022, 0.335286, 0.551725 +2060, 0.257274, -0.719022, 0.335286, 0.551725 +2061, 0.257274, -0.719022, 0.335286, 0.551725 +2062, 0.257274, -0.719022, 0.335286, 0.551725 +2063, 0.257274, -0.719022, 0.335286, 0.551725 +2064, 0.257274, -0.719022, 0.335286, 0.551725 +2065, 0.257274, -0.719022, 0.335286, 0.551725 +2066, 0.257274, -0.719022, 0.335286, 0.551725 +2067, 0.257274, -0.719022, 0.335286, 0.551725 +2068, 0.257274, -0.719022, 0.335286, 0.551725 +2069, 0.257274, -0.719022, 0.335286, 0.551725 +2070, 0.257274, -0.719022, 0.335286, 0.551725 +2071, 0.257274, -0.719022, 0.335286, 0.551725 +2072, 0.257274, -0.719022, 0.335286, 0.551725 +2073, 0.257274, -0.719022, 0.335286, 0.551725 +2074, 0.257274, -0.719022, 0.335286, 0.551725 +2075, 0.257274, -0.719022, 0.335286, 0.551725 +2076, 0.257274, -0.719022, 0.335286, 0.551725 +2077, 0.257274, -0.719022, 0.335286, 0.551725 +2078, 0.257274, -0.719022, 0.335286, 0.551725 +2079, 0.257274, -0.719022, 0.335286, 0.551725 +2080, 0.257274, -0.719022, 0.335286, 0.551725 +2081, 0.257274, -0.719022, 0.335286, 0.551725 +2082, 0.257274, -0.719022, 0.335286, 0.551725 +2083, 0.257274, -0.719022, 0.335286, 0.551725 +2084, 0.257274, -0.719022, 0.335286, 0.551725 +2085, 0.257274, -0.719022, 0.335286, 0.551725 +2086, 0.257274, -0.719022, 0.335286, 0.551725 +2087, 0.257274, -0.719022, 0.335286, 0.551725 +2088, 0.257274, -0.719022, 0.335286, 0.551725 +2089, 0.257274, -0.719022, 0.335286, 0.551725 +2090, 0.257274, -0.719022, 0.335286, 0.551725 +2091, 0.257274, -0.719022, 0.335286, 0.551725 +2092, 0.257274, -0.719022, 0.335286, 0.551725 +2093, 0.257274, -0.719022, 0.335286, 0.551725 +2094, 0.257274, -0.719022, 0.335286, 0.551725 +2095, 0.257274, -0.719022, 0.335286, 0.551725 +2096, 0.257274, -0.719022, 0.335286, 0.551725 +2097, 0.257274, -0.719022, 0.335286, 0.551725 +2098, 0.257274, -0.719022, 0.335286, 0.551725 +2099, 0.257274, -0.719022, 0.335286, 0.551725 +2100, 0.239074, -0.739074, 0.329057, 0.536969 +2101, 0.239074, -0.739074, 0.329057, 0.536969 +2102, 0.239074, -0.739074, 0.329057, 0.536969 +2103, 0.239074, -0.739074, 0.329057, 0.536969 +2104, 0.239074, -0.739074, 0.329057, 0.536969 +2105, 0.239074, -0.739074, 0.329057, 0.536969 +2106, 0.239074, -0.739074, 0.329057, 0.536969 +2107, 0.239074, -0.739074, 0.329057, 0.536969 +2108, 0.239074, -0.739074, 0.329057, 0.536969 +2109, 0.239074, -0.739074, 0.329057, 0.536969 +2110, 0.239074, -0.739074, 0.329057, 0.536969 +2111, 0.239074, -0.739074, 0.329057, 0.536969 +2112, 0.239074, -0.739074, 0.329057, 0.536969 +2113, 0.239074, -0.739074, 0.329057, 0.536969 +2114, 0.239074, -0.739074, 0.329057, 0.536969 +2115, 0.239074, -0.739074, 0.329057, 0.536969 +2116, 0.239074, -0.739074, 0.329057, 0.536969 +2117, 0.239074, -0.739074, 0.329057, 0.536969 +2118, 0.239074, -0.739074, 0.329057, 0.536969 +2119, 0.239074, -0.739074, 0.329057, 0.536969 +2120, 0.239074, -0.739074, 0.329057, 0.536969 +2121, 0.239074, -0.739074, 0.329057, 0.536969 +2122, 0.239074, -0.739074, 0.329057, 0.536969 +2123, 0.239074, -0.739074, 0.329057, 0.536969 +2124, 0.239074, -0.739074, 0.329057, 0.536969 +2125, 0.239074, -0.739074, 0.329057, 0.536969 +2126, 0.239074, -0.739074, 0.329057, 0.536969 +2127, 0.239074, -0.739074, 0.329057, 0.536969 +2128, 0.239074, -0.739074, 0.329057, 0.536969 +2129, 0.239074, -0.739074, 0.329057, 0.536969 +2130, 0.239074, -0.739074, 0.329057, 0.536969 +2131, 0.239074, -0.739074, 0.329057, 0.536969 +2132, 0.239074, -0.739074, 0.329057, 0.536969 +2133, 0.239074, -0.739074, 0.329057, 0.536969 +2134, 0.239074, -0.739074, 0.329057, 0.536969 +2135, 0.239074, -0.739074, 0.329057, 0.536969 +2136, 0.239074, -0.739074, 0.329057, 0.536969 +2137, 0.239074, -0.739074, 0.329057, 0.536969 +2138, 0.239074, -0.739074, 0.329057, 0.536969 +2139, 0.239074, -0.739074, 0.329057, 0.536969 +2140, 0.239074, -0.739074, 0.329057, 0.536969 +2141, 0.239074, -0.739074, 0.329057, 0.536969 +2142, 0.239074, -0.739074, 0.329057, 0.536969 +2143, 0.239074, -0.739074, 0.329057, 0.536969 +2144, 0.239074, -0.739074, 0.329057, 0.536969 +2145, 0.239074, -0.739074, 0.329057, 0.536969 +2146, 0.239074, -0.739074, 0.329057, 0.536969 +2147, 0.239074, -0.739074, 0.329057, 0.536969 +2148, 0.239074, -0.739074, 0.329057, 0.536969 +2149, 0.239074, -0.739074, 0.329057, 0.536969 +2150, 0.239074, -0.739074, 0.329057, 0.536969 +2151, 0.239074, -0.739074, 0.329057, 0.536969 +2152, 0.239074, -0.739074, 0.329057, 0.536969 +2153, 0.239074, -0.739074, 0.329057, 0.536969 +2154, 0.239074, -0.739074, 0.329057, 0.536969 +2155, 0.239074, -0.739074, 0.329057, 0.536969 +2156, 0.239074, -0.739074, 0.329057, 0.536969 +2157, 0.239074, -0.739074, 0.329057, 0.536969 +2158, 0.239074, -0.739074, 0.329057, 0.536969 +2159, 0.239074, -0.739074, 0.329057, 0.536969 +2160, 0.239074, -0.739074, 0.329057, 0.536969 +2161, 0.239074, -0.739074, 0.329057, 0.536969 +2162, 0.239074, -0.739074, 0.329057, 0.536969 +2163, 0.239074, -0.739074, 0.329057, 0.536969 +2164, 0.239074, -0.739074, 0.329057, 0.536969 +2165, 0.239074, -0.739074, 0.329057, 0.536969 +2166, 0.239074, -0.739074, 0.329057, 0.536969 +2167, 0.239074, -0.739074, 0.329057, 0.536969 +2168, 0.239074, -0.739074, 0.329057, 0.536969 +2169, 0.239074, -0.739074, 0.329057, 0.536969 +2170, 0.239074, -0.739074, 0.329057, 0.536969 +2171, 0.239074, -0.739074, 0.329057, 0.536969 +2172, 0.239074, -0.739074, 0.329057, 0.536969 +2173, 0.239074, -0.739074, 0.329057, 0.536969 +2174, 0.239074, -0.739074, 0.329057, 0.536969 +2175, 0.239074, -0.739074, 0.329057, 0.536969 +2176, 0.239074, -0.739074, 0.329057, 0.536969 +2177, 0.239074, -0.739074, 0.329057, 0.536969 +2178, 0.239074, -0.739074, 0.329057, 0.536969 +2179, 0.239074, -0.739074, 0.329057, 0.536969 +2180, 0.239074, -0.739074, 0.329057, 0.536969 +2181, 0.239074, -0.739074, 0.329057, 0.536969 +2182, 0.239074, -0.739074, 0.329057, 0.536969 +2183, 0.239074, -0.739074, 0.329057, 0.536969 +2184, 0.239074, -0.739074, 0.329057, 0.536969 +2185, 0.239074, -0.739074, 0.329057, 0.536969 +2186, 0.239074, -0.739074, 0.329057, 0.536969 +2187, 0.239074, -0.739074, 0.329057, 0.536969 +2188, 0.239074, -0.739074, 0.329057, 0.536969 +2189, 0.239074, -0.739074, 0.329057, 0.536969 +2190, 0.239074, -0.739074, 0.329057, 0.536969 +2191, 0.239074, -0.739074, 0.329057, 0.536969 +2192, 0.239074, -0.739074, 0.329057, 0.536969 +2193, 0.239074, -0.739074, 0.329057, 0.536969 +2194, 0.239074, -0.739074, 0.329057, 0.536969 +2195, 0.239074, -0.739074, 0.329057, 0.536969 +2196, 0.239074, -0.739074, 0.329057, 0.536969 +2197, 0.239074, -0.739074, 0.329057, 0.536969 +2198, 0.239074, -0.739074, 0.329057, 0.536969 +2199, 0.239074, -0.739074, 0.329057, 0.536969 +2200, 0.221313, -0.758612, 0.322012, 0.521380 +2201, 0.221313, -0.758612, 0.322012, 0.521380 +2202, 0.221313, -0.758612, 0.322012, 0.521380 +2203, 0.221313, -0.758612, 0.322012, 0.521380 +2204, 0.221313, -0.758612, 0.322012, 0.521380 +2205, 0.221313, -0.758612, 0.322012, 0.521380 +2206, 0.221313, -0.758612, 0.322012, 0.521380 +2207, 0.221313, -0.758612, 0.322012, 0.521380 +2208, 0.221313, -0.758612, 0.322012, 0.521380 +2209, 0.221313, -0.758612, 0.322012, 0.521380 +2210, 0.221313, -0.758612, 0.322012, 0.521380 +2211, 0.221313, -0.758612, 0.322012, 0.521380 +2212, 0.221313, -0.758612, 0.322012, 0.521380 +2213, 0.221313, -0.758612, 0.322012, 0.521380 +2214, 0.221313, -0.758612, 0.322012, 0.521380 +2215, 0.221313, -0.758612, 0.322012, 0.521380 +2216, 0.221313, -0.758612, 0.322012, 0.521380 +2217, 0.221313, -0.758612, 0.322012, 0.521380 +2218, 0.221313, -0.758612, 0.322012, 0.521380 +2219, 0.221313, -0.758612, 0.322012, 0.521380 +2220, 0.221313, -0.758612, 0.322012, 0.521380 +2221, 0.221313, -0.758612, 0.322012, 0.521380 +2222, 0.221313, -0.758612, 0.322012, 0.521380 +2223, 0.221313, -0.758612, 0.322012, 0.521380 +2224, 0.221313, -0.758612, 0.322012, 0.521380 +2225, 0.221313, -0.758612, 0.322012, 0.521380 +2226, 0.221313, -0.758612, 0.322012, 0.521380 +2227, 0.221313, -0.758612, 0.322012, 0.521380 +2228, 0.221313, -0.758612, 0.322012, 0.521380 +2229, 0.221313, -0.758612, 0.322012, 0.521380 +2230, 0.221313, -0.758612, 0.322012, 0.521380 +2231, 0.221313, -0.758612, 0.322012, 0.521380 +2232, 0.221313, -0.758612, 0.322012, 0.521380 +2233, 0.221313, -0.758612, 0.322012, 0.521380 +2234, 0.221313, -0.758612, 0.322012, 0.521380 +2235, 0.221313, -0.758612, 0.322012, 0.521380 +2236, 0.221313, -0.758612, 0.322012, 0.521380 +2237, 0.221313, -0.758612, 0.322012, 0.521380 +2238, 0.221313, -0.758612, 0.322012, 0.521380 +2239, 0.221313, -0.758612, 0.322012, 0.521380 +2240, 0.221313, -0.758612, 0.322012, 0.521380 +2241, 0.221313, -0.758612, 0.322012, 0.521380 +2242, 0.221313, -0.758612, 0.322012, 0.521380 +2243, 0.221313, -0.758612, 0.322012, 0.521380 +2244, 0.221313, -0.758612, 0.322012, 0.521380 +2245, 0.221313, -0.758612, 0.322012, 0.521380 +2246, 0.221313, -0.758612, 0.322012, 0.521380 +2247, 0.221313, -0.758612, 0.322012, 0.521380 +2248, 0.221313, -0.758612, 0.322012, 0.521380 +2249, 0.221313, -0.758612, 0.322012, 0.521380 +2250, 0.221313, -0.758612, 0.322012, 0.521380 +2251, 0.221313, -0.758612, 0.322012, 0.521380 +2252, 0.221313, -0.758612, 0.322012, 0.521380 +2253, 0.221313, -0.758612, 0.322012, 0.521380 +2254, 0.221313, -0.758612, 0.322012, 0.521380 +2255, 0.221313, -0.758612, 0.322012, 0.521380 +2256, 0.221313, -0.758612, 0.322012, 0.521380 +2257, 0.221313, -0.758612, 0.322012, 0.521380 +2258, 0.221313, -0.758612, 0.322012, 0.521380 +2259, 0.221313, -0.758612, 0.322012, 0.521380 +2260, 0.221313, -0.758612, 0.322012, 0.521380 +2261, 0.221313, -0.758612, 0.322012, 0.521380 +2262, 0.221313, -0.758612, 0.322012, 0.521380 +2263, 0.221313, -0.758612, 0.322012, 0.521380 +2264, 0.221313, -0.758612, 0.322012, 0.521380 +2265, 0.221313, -0.758612, 0.322012, 0.521380 +2266, 0.221313, -0.758612, 0.322012, 0.521380 +2267, 0.221313, -0.758612, 0.322012, 0.521380 +2268, 0.221313, -0.758612, 0.322012, 0.521380 +2269, 0.221313, -0.758612, 0.322012, 0.521380 +2270, 0.221313, -0.758612, 0.322012, 0.521380 +2271, 0.221313, -0.758612, 0.322012, 0.521380 +2272, 0.221313, -0.758612, 0.322012, 0.521380 +2273, 0.221313, -0.758612, 0.322012, 0.521380 +2274, 0.221313, -0.758612, 0.322012, 0.521380 +2275, 0.221313, -0.758612, 0.322012, 0.521380 +2276, 0.221313, -0.758612, 0.322012, 0.521380 +2277, 0.221313, -0.758612, 0.322012, 0.521380 +2278, 0.221313, -0.758612, 0.322012, 0.521380 +2279, 0.221313, -0.758612, 0.322012, 0.521380 +2280, 0.221313, -0.758612, 0.322012, 0.521380 +2281, 0.221313, -0.758612, 0.322012, 0.521380 +2282, 0.221313, -0.758612, 0.322012, 0.521380 +2283, 0.221313, -0.758612, 0.322012, 0.521380 +2284, 0.221313, -0.758612, 0.322012, 0.521380 +2285, 0.221313, -0.758612, 0.322012, 0.521380 +2286, 0.221313, -0.758612, 0.322012, 0.521380 +2287, 0.221313, -0.758612, 0.322012, 0.521380 +2288, 0.221313, -0.758612, 0.322012, 0.521380 +2289, 0.221313, -0.758612, 0.322012, 0.521380 +2290, 0.221313, -0.758612, 0.322012, 0.521380 +2291, 0.221313, -0.758612, 0.322012, 0.521380 +2292, 0.221313, -0.758612, 0.322012, 0.521380 +2293, 0.221313, -0.758612, 0.322012, 0.521380 +2294, 0.221313, -0.758612, 0.322012, 0.521380 +2295, 0.221313, -0.758612, 0.322012, 0.521380 +2296, 0.221313, -0.758612, 0.322012, 0.521380 +2297, 0.221313, -0.758612, 0.322012, 0.521380 +2298, 0.221313, -0.758612, 0.322012, 0.521380 +2299, 0.221313, -0.758612, 0.322012, 0.521380 +2300, 0.204025, -0.777602, 0.314172, 0.504981 +2301, 0.204025, -0.777602, 0.314172, 0.504981 +2302, 0.204025, -0.777602, 0.314172, 0.504981 +2303, 0.204025, -0.777602, 0.314172, 0.504981 +2304, 0.204025, -0.777602, 0.314172, 0.504981 +2305, 0.204025, -0.777602, 0.314172, 0.504981 +2306, 0.204025, -0.777602, 0.314172, 0.504981 +2307, 0.204025, -0.777602, 0.314172, 0.504981 +2308, 0.204025, -0.777602, 0.314172, 0.504981 +2309, 0.204025, -0.777602, 0.314172, 0.504981 +2310, 0.204025, -0.777602, 0.314172, 0.504981 +2311, 0.204025, -0.777602, 0.314172, 0.504981 +2312, 0.204025, -0.777602, 0.314172, 0.504981 +2313, 0.204025, -0.777602, 0.314172, 0.504981 +2314, 0.204025, -0.777602, 0.314172, 0.504981 +2315, 0.204025, -0.777602, 0.314172, 0.504981 +2316, 0.204025, -0.777602, 0.314172, 0.504981 +2317, 0.204025, -0.777602, 0.314172, 0.504981 +2318, 0.204025, -0.777602, 0.314172, 0.504981 +2319, 0.204025, -0.777602, 0.314172, 0.504981 +2320, 0.204025, -0.777602, 0.314172, 0.504981 +2321, 0.204025, -0.777602, 0.314172, 0.504981 +2322, 0.204025, -0.777602, 0.314172, 0.504981 +2323, 0.204025, -0.777602, 0.314172, 0.504981 +2324, 0.204025, -0.777602, 0.314172, 0.504981 +2325, 0.204025, -0.777602, 0.314172, 0.504981 +2326, 0.204025, -0.777602, 0.314172, 0.504981 +2327, 0.204025, -0.777602, 0.314172, 0.504981 +2328, 0.204025, -0.777602, 0.314172, 0.504981 +2329, 0.204025, -0.777602, 0.314172, 0.504981 +2330, 0.204025, -0.777602, 0.314172, 0.504981 +2331, 0.204025, -0.777602, 0.314172, 0.504981 +2332, 0.204025, -0.777602, 0.314172, 0.504981 +2333, 0.204025, -0.777602, 0.314172, 0.504981 +2334, 0.204025, -0.777602, 0.314172, 0.504981 +2335, 0.204025, -0.777602, 0.314172, 0.504981 +2336, 0.204025, -0.777602, 0.314172, 0.504981 +2337, 0.204025, -0.777602, 0.314172, 0.504981 +2338, 0.204025, -0.777602, 0.314172, 0.504981 +2339, 0.204025, -0.777602, 0.314172, 0.504981 +2340, 0.204025, -0.777602, 0.314172, 0.504981 +2341, 0.204025, -0.777602, 0.314172, 0.504981 +2342, 0.204025, -0.777602, 0.314172, 0.504981 +2343, 0.204025, -0.777602, 0.314172, 0.504981 +2344, 0.204025, -0.777602, 0.314172, 0.504981 +2345, 0.204025, -0.777602, 0.314172, 0.504981 +2346, 0.204025, -0.777602, 0.314172, 0.504981 +2347, 0.204025, -0.777602, 0.314172, 0.504981 +2348, 0.204025, -0.777602, 0.314172, 0.504981 +2349, 0.204025, -0.777602, 0.314172, 0.504981 +2350, 0.204025, -0.777602, 0.314172, 0.504981 +2351, 0.204025, -0.777602, 0.314172, 0.504981 +2352, 0.204025, -0.777602, 0.314172, 0.504981 +2353, 0.204025, -0.777602, 0.314172, 0.504981 +2354, 0.204025, -0.777602, 0.314172, 0.504981 +2355, 0.204025, -0.777602, 0.314172, 0.504981 +2356, 0.204025, -0.777602, 0.314172, 0.504981 +2357, 0.204025, -0.777602, 0.314172, 0.504981 +2358, 0.204025, -0.777602, 0.314172, 0.504981 +2359, 0.204025, -0.777602, 0.314172, 0.504981 +2360, 0.204025, -0.777602, 0.314172, 0.504981 +2361, 0.204025, -0.777602, 0.314172, 0.504981 +2362, 0.204025, -0.777602, 0.314172, 0.504981 +2363, 0.204025, -0.777602, 0.314172, 0.504981 +2364, 0.204025, -0.777602, 0.314172, 0.504981 +2365, 0.204025, -0.777602, 0.314172, 0.504981 +2366, 0.204025, -0.777602, 0.314172, 0.504981 +2367, 0.204025, -0.777602, 0.314172, 0.504981 +2368, 0.204025, -0.777602, 0.314172, 0.504981 +2369, 0.204025, -0.777602, 0.314172, 0.504981 +2370, 0.204025, -0.777602, 0.314172, 0.504981 +2371, 0.204025, -0.777602, 0.314172, 0.504981 +2372, 0.204025, -0.777602, 0.314172, 0.504981 +2373, 0.204025, -0.777602, 0.314172, 0.504981 +2374, 0.204025, -0.777602, 0.314172, 0.504981 +2375, 0.204025, -0.777602, 0.314172, 0.504981 +2376, 0.204025, -0.777602, 0.314172, 0.504981 +2377, 0.204025, -0.777602, 0.314172, 0.504981 +2378, 0.204025, -0.777602, 0.314172, 0.504981 +2379, 0.204025, -0.777602, 0.314172, 0.504981 +2380, 0.204025, -0.777602, 0.314172, 0.504981 +2381, 0.204025, -0.777602, 0.314172, 0.504981 +2382, 0.204025, -0.777602, 0.314172, 0.504981 +2383, 0.204025, -0.777602, 0.314172, 0.504981 +2384, 0.204025, -0.777602, 0.314172, 0.504981 +2385, 0.204025, -0.777602, 0.314172, 0.504981 +2386, 0.204025, -0.777602, 0.314172, 0.504981 +2387, 0.204025, -0.777602, 0.314172, 0.504981 +2388, 0.204025, -0.777602, 0.314172, 0.504981 +2389, 0.204025, -0.777602, 0.314172, 0.504981 +2390, 0.204025, -0.777602, 0.314172, 0.504981 +2391, 0.204025, -0.777602, 0.314172, 0.504981 +2392, 0.204025, -0.777602, 0.314172, 0.504981 +2393, 0.204025, -0.777602, 0.314172, 0.504981 +2394, 0.204025, -0.777602, 0.314172, 0.504981 +2395, 0.204025, -0.777602, 0.314172, 0.504981 +2396, 0.204025, -0.777602, 0.314172, 0.504981 +2397, 0.204025, -0.777602, 0.314172, 0.504981 +2398, 0.204025, -0.777602, 0.314172, 0.504981 +2399, 0.204025, -0.777602, 0.314172, 0.504981 +2400, 0.187247, -0.796008, 0.305559, 0.487794 +2401, 0.187247, -0.796008, 0.305559, 0.487794 +2402, 0.187247, -0.796008, 0.305559, 0.487794 +2403, 0.187247, -0.796008, 0.305559, 0.487794 +2404, 0.187247, -0.796008, 0.305559, 0.487794 +2405, 0.187247, -0.796008, 0.305559, 0.487794 +2406, 0.187247, -0.796008, 0.305559, 0.487794 +2407, 0.187247, -0.796008, 0.305559, 0.487794 +2408, 0.187247, -0.796008, 0.305559, 0.487794 +2409, 0.187247, -0.796008, 0.305559, 0.487794 +2410, 0.187247, -0.796008, 0.305559, 0.487794 +2411, 0.187247, -0.796008, 0.305559, 0.487794 +2412, 0.187247, -0.796008, 0.305559, 0.487794 +2413, 0.187247, -0.796008, 0.305559, 0.487794 +2414, 0.187247, -0.796008, 0.305559, 0.487794 +2415, 0.187247, -0.796008, 0.305559, 0.487794 +2416, 0.187247, -0.796008, 0.305559, 0.487794 +2417, 0.187247, -0.796008, 0.305559, 0.487794 +2418, 0.187247, -0.796008, 0.305559, 0.487794 +2419, 0.187247, -0.796008, 0.305559, 0.487794 +2420, 0.187247, -0.796008, 0.305559, 0.487794 +2421, 0.187247, -0.796008, 0.305559, 0.487794 +2422, 0.187247, -0.796008, 0.305559, 0.487794 +2423, 0.187247, -0.796008, 0.305559, 0.487794 +2424, 0.187247, -0.796008, 0.305559, 0.487794 +2425, 0.187247, -0.796008, 0.305559, 0.487794 +2426, 0.187247, -0.796008, 0.305559, 0.487794 +2427, 0.187247, -0.796008, 0.305559, 0.487794 +2428, 0.187247, -0.796008, 0.305559, 0.487794 +2429, 0.187247, -0.796008, 0.305559, 0.487794 +2430, 0.187247, -0.796008, 0.305559, 0.487794 +2431, 0.187247, -0.796008, 0.305559, 0.487794 +2432, 0.187247, -0.796008, 0.305559, 0.487794 +2433, 0.187247, -0.796008, 0.305559, 0.487794 +2434, 0.187247, -0.796008, 0.305559, 0.487794 +2435, 0.187247, -0.796008, 0.305559, 0.487794 +2436, 0.187247, -0.796008, 0.305559, 0.487794 +2437, 0.187247, -0.796008, 0.305559, 0.487794 +2438, 0.187247, -0.796008, 0.305559, 0.487794 +2439, 0.187247, -0.796008, 0.305559, 0.487794 +2440, 0.187247, -0.796008, 0.305559, 0.487794 +2441, 0.187247, -0.796008, 0.305559, 0.487794 +2442, 0.187247, -0.796008, 0.305559, 0.487794 +2443, 0.187247, -0.796008, 0.305559, 0.487794 +2444, 0.187247, -0.796008, 0.305559, 0.487794 +2445, 0.187247, -0.796008, 0.305559, 0.487794 +2446, 0.187247, -0.796008, 0.305559, 0.487794 +2447, 0.187247, -0.796008, 0.305559, 0.487794 +2448, 0.187247, -0.796008, 0.305559, 0.487794 +2449, 0.187247, -0.796008, 0.305559, 0.487794 +2450, 0.187247, -0.796008, 0.305559, 0.487794 +2451, 0.187247, -0.796008, 0.305559, 0.487794 +2452, 0.187247, -0.796008, 0.305559, 0.487794 +2453, 0.187247, -0.796008, 0.305559, 0.487794 +2454, 0.187247, -0.796008, 0.305559, 0.487794 +2455, 0.187247, -0.796008, 0.305559, 0.487794 +2456, 0.187247, -0.796008, 0.305559, 0.487794 +2457, 0.187247, -0.796008, 0.305559, 0.487794 +2458, 0.187247, -0.796008, 0.305559, 0.487794 +2459, 0.187247, -0.796008, 0.305559, 0.487794 +2460, 0.187247, -0.796008, 0.305559, 0.487794 +2461, 0.187247, -0.796008, 0.305559, 0.487794 +2462, 0.187247, -0.796008, 0.305559, 0.487794 +2463, 0.187247, -0.796008, 0.305559, 0.487794 +2464, 0.187247, -0.796008, 0.305559, 0.487794 +2465, 0.187247, -0.796008, 0.305559, 0.487794 +2466, 0.187247, -0.796008, 0.305559, 0.487794 +2467, 0.187247, -0.796008, 0.305559, 0.487794 +2468, 0.187247, -0.796008, 0.305559, 0.487794 +2469, 0.187247, -0.796008, 0.305559, 0.487794 +2470, 0.187247, -0.796008, 0.305559, 0.487794 +2471, 0.187247, -0.796008, 0.305559, 0.487794 +2472, 0.187247, -0.796008, 0.305559, 0.487794 +2473, 0.187247, -0.796008, 0.305559, 0.487794 +2474, 0.187247, -0.796008, 0.305559, 0.487794 +2475, 0.187247, -0.796008, 0.305559, 0.487794 +2476, 0.187247, -0.796008, 0.305559, 0.487794 +2477, 0.187247, -0.796008, 0.305559, 0.487794 +2478, 0.187247, -0.796008, 0.305559, 0.487794 +2479, 0.187247, -0.796008, 0.305559, 0.487794 +2480, 0.187247, -0.796008, 0.305559, 0.487794 +2481, 0.187247, -0.796008, 0.305559, 0.487794 +2482, 0.187247, -0.796008, 0.305559, 0.487794 +2483, 0.187247, -0.796008, 0.305559, 0.487794 +2484, 0.187247, -0.796008, 0.305559, 0.487794 +2485, 0.187247, -0.796008, 0.305559, 0.487794 +2486, 0.187247, -0.796008, 0.305559, 0.487794 +2487, 0.187247, -0.796008, 0.305559, 0.487794 +2488, 0.187247, -0.796008, 0.305559, 0.487794 +2489, 0.187247, -0.796008, 0.305559, 0.487794 +2490, 0.187247, -0.796008, 0.305559, 0.487794 +2491, 0.187247, -0.796008, 0.305559, 0.487794 +2492, 0.187247, -0.796008, 0.305559, 0.487794 +2493, 0.187247, -0.796008, 0.305559, 0.487794 +2494, 0.187247, -0.796008, 0.305559, 0.487794 +2495, 0.187247, -0.796008, 0.305559, 0.487794 +2496, 0.187247, -0.796008, 0.305559, 0.487794 +2497, 0.187247, -0.796008, 0.305559, 0.487794 +2498, 0.187247, -0.796008, 0.305559, 0.487794 +2499, 0.187247, -0.796008, 0.305559, 0.487794 +2500, 0.171010, -0.813798, 0.296198, 0.469846 +2501, 0.171010, -0.813798, 0.296198, 0.469846 +2502, 0.171010, -0.813798, 0.296198, 0.469846 +2503, 0.171010, -0.813798, 0.296198, 0.469846 +2504, 0.171010, -0.813798, 0.296198, 0.469846 +2505, 0.171010, -0.813798, 0.296198, 0.469846 +2506, 0.171010, -0.813798, 0.296198, 0.469846 +2507, 0.171010, -0.813798, 0.296198, 0.469846 +2508, 0.171010, -0.813798, 0.296198, 0.469846 +2509, 0.171010, -0.813798, 0.296198, 0.469846 +2510, 0.171010, -0.813798, 0.296198, 0.469846 +2511, 0.171010, -0.813798, 0.296198, 0.469846 +2512, 0.171010, -0.813798, 0.296198, 0.469846 +2513, 0.171010, -0.813798, 0.296198, 0.469846 +2514, 0.171010, -0.813798, 0.296198, 0.469846 +2515, 0.171010, -0.813798, 0.296198, 0.469846 +2516, 0.171010, -0.813798, 0.296198, 0.469846 +2517, 0.171010, -0.813798, 0.296198, 0.469846 +2518, 0.171010, -0.813798, 0.296198, 0.469846 +2519, 0.171010, -0.813798, 0.296198, 0.469846 +2520, 0.171010, -0.813798, 0.296198, 0.469846 +2521, 0.171010, -0.813798, 0.296198, 0.469846 +2522, 0.171010, -0.813798, 0.296198, 0.469846 +2523, 0.171010, -0.813798, 0.296198, 0.469846 +2524, 0.171010, -0.813798, 0.296198, 0.469846 +2525, 0.171010, -0.813798, 0.296198, 0.469846 +2526, 0.171010, -0.813798, 0.296198, 0.469846 +2527, 0.171010, -0.813798, 0.296198, 0.469846 +2528, 0.171010, -0.813798, 0.296198, 0.469846 +2529, 0.171010, -0.813798, 0.296198, 0.469846 +2530, 0.171010, -0.813798, 0.296198, 0.469846 +2531, 0.171010, -0.813798, 0.296198, 0.469846 +2532, 0.171010, -0.813798, 0.296198, 0.469846 +2533, 0.171010, -0.813798, 0.296198, 0.469846 +2534, 0.171010, -0.813798, 0.296198, 0.469846 +2535, 0.171010, -0.813798, 0.296198, 0.469846 +2536, 0.171010, -0.813798, 0.296198, 0.469846 +2537, 0.171010, -0.813798, 0.296198, 0.469846 +2538, 0.171010, -0.813798, 0.296198, 0.469846 +2539, 0.171010, -0.813798, 0.296198, 0.469846 +2540, 0.171010, -0.813798, 0.296198, 0.469846 +2541, 0.171010, -0.813798, 0.296198, 0.469846 +2542, 0.171010, -0.813798, 0.296198, 0.469846 +2543, 0.171010, -0.813798, 0.296198, 0.469846 +2544, 0.171010, -0.813798, 0.296198, 0.469846 +2545, 0.171010, -0.813798, 0.296198, 0.469846 +2546, 0.171010, -0.813798, 0.296198, 0.469846 +2547, 0.171010, -0.813798, 0.296198, 0.469846 +2548, 0.171010, -0.813798, 0.296198, 0.469846 +2549, 0.171010, -0.813798, 0.296198, 0.469846 +2550, 0.171010, -0.813798, 0.296198, 0.469846 +2551, 0.171010, -0.813798, 0.296198, 0.469846 +2552, 0.171010, -0.813798, 0.296198, 0.469846 +2553, 0.171010, -0.813798, 0.296198, 0.469846 +2554, 0.171010, -0.813798, 0.296198, 0.469846 +2555, 0.171010, -0.813798, 0.296198, 0.469846 +2556, 0.171010, -0.813798, 0.296198, 0.469846 +2557, 0.171010, -0.813798, 0.296198, 0.469846 +2558, 0.171010, -0.813798, 0.296198, 0.469846 +2559, 0.171010, -0.813798, 0.296198, 0.469846 +2560, 0.171010, -0.813798, 0.296198, 0.469846 +2561, 0.171010, -0.813798, 0.296198, 0.469846 +2562, 0.171010, -0.813798, 0.296198, 0.469846 +2563, 0.171010, -0.813798, 0.296198, 0.469846 +2564, 0.171010, -0.813798, 0.296198, 0.469846 +2565, 0.171010, -0.813798, 0.296198, 0.469846 +2566, 0.171010, -0.813798, 0.296198, 0.469846 +2567, 0.171010, -0.813798, 0.296198, 0.469846 +2568, 0.171010, -0.813798, 0.296198, 0.469846 +2569, 0.171010, -0.813798, 0.296198, 0.469846 +2570, 0.171010, -0.813798, 0.296198, 0.469846 +2571, 0.171010, -0.813798, 0.296198, 0.469846 +2572, 0.171010, -0.813798, 0.296198, 0.469846 +2573, 0.171010, -0.813798, 0.296198, 0.469846 +2574, 0.171010, -0.813798, 0.296198, 0.469846 +2575, 0.171010, -0.813798, 0.296198, 0.469846 +2576, 0.171010, -0.813798, 0.296198, 0.469846 +2577, 0.171010, -0.813798, 0.296198, 0.469846 +2578, 0.171010, -0.813798, 0.296198, 0.469846 +2579, 0.171010, -0.813798, 0.296198, 0.469846 +2580, 0.171010, -0.813798, 0.296198, 0.469846 +2581, 0.171010, -0.813798, 0.296198, 0.469846 +2582, 0.171010, -0.813798, 0.296198, 0.469846 +2583, 0.171010, -0.813798, 0.296198, 0.469846 +2584, 0.171010, -0.813798, 0.296198, 0.469846 +2585, 0.171010, -0.813798, 0.296198, 0.469846 +2586, 0.171010, -0.813798, 0.296198, 0.469846 +2587, 0.171010, -0.813798, 0.296198, 0.469846 +2588, 0.171010, -0.813798, 0.296198, 0.469846 +2589, 0.171010, -0.813798, 0.296198, 0.469846 +2590, 0.171010, -0.813798, 0.296198, 0.469846 +2591, 0.171010, -0.813798, 0.296198, 0.469846 +2592, 0.171010, -0.813798, 0.296198, 0.469846 +2593, 0.171010, -0.813798, 0.296198, 0.469846 +2594, 0.171010, -0.813798, 0.296198, 0.469846 +2595, 0.171010, -0.813798, 0.296198, 0.469846 +2596, 0.171010, -0.813798, 0.296198, 0.469846 +2597, 0.171010, -0.813798, 0.296198, 0.469846 +2598, 0.171010, -0.813798, 0.296198, 0.469846 +2599, 0.171010, -0.813798, 0.296198, 0.469846 +2600, 0.155348, -0.830938, 0.286115, 0.451162 +2601, 0.155348, -0.830938, 0.286115, 0.451162 +2602, 0.155348, -0.830938, 0.286115, 0.451162 +2603, 0.155348, -0.830938, 0.286115, 0.451162 +2604, 0.155348, -0.830938, 0.286115, 0.451162 +2605, 0.155348, -0.830938, 0.286115, 0.451162 +2606, 0.155348, -0.830938, 0.286115, 0.451162 +2607, 0.155348, -0.830938, 0.286115, 0.451162 +2608, 0.155348, -0.830938, 0.286115, 0.451162 +2609, 0.155348, -0.830938, 0.286115, 0.451162 +2610, 0.155348, -0.830938, 0.286115, 0.451162 +2611, 0.155348, -0.830938, 0.286115, 0.451162 +2612, 0.155348, -0.830938, 0.286115, 0.451162 +2613, 0.155348, -0.830938, 0.286115, 0.451162 +2614, 0.155348, -0.830938, 0.286115, 0.451162 +2615, 0.155348, -0.830938, 0.286115, 0.451162 +2616, 0.155348, -0.830938, 0.286115, 0.451162 +2617, 0.155348, -0.830938, 0.286115, 0.451162 +2618, 0.155348, -0.830938, 0.286115, 0.451162 +2619, 0.155348, -0.830938, 0.286115, 0.451162 +2620, 0.155348, -0.830938, 0.286115, 0.451162 +2621, 0.155348, -0.830938, 0.286115, 0.451162 +2622, 0.155348, -0.830938, 0.286115, 0.451162 +2623, 0.155348, -0.830938, 0.286115, 0.451162 +2624, 0.155348, -0.830938, 0.286115, 0.451162 +2625, 0.155348, -0.830938, 0.286115, 0.451162 +2626, 0.155348, -0.830938, 0.286115, 0.451162 +2627, 0.155348, -0.830938, 0.286115, 0.451162 +2628, 0.155348, -0.830938, 0.286115, 0.451162 +2629, 0.155348, -0.830938, 0.286115, 0.451162 +2630, 0.155348, -0.830938, 0.286115, 0.451162 +2631, 0.155348, -0.830938, 0.286115, 0.451162 +2632, 0.155348, -0.830938, 0.286115, 0.451162 +2633, 0.155348, -0.830938, 0.286115, 0.451162 +2634, 0.155348, -0.830938, 0.286115, 0.451162 +2635, 0.155348, -0.830938, 0.286115, 0.451162 +2636, 0.155348, -0.830938, 0.286115, 0.451162 +2637, 0.155348, -0.830938, 0.286115, 0.451162 +2638, 0.155348, -0.830938, 0.286115, 0.451162 +2639, 0.155348, -0.830938, 0.286115, 0.451162 +2640, 0.155348, -0.830938, 0.286115, 0.451162 +2641, 0.155348, -0.830938, 0.286115, 0.451162 +2642, 0.155348, -0.830938, 0.286115, 0.451162 +2643, 0.155348, -0.830938, 0.286115, 0.451162 +2644, 0.155348, -0.830938, 0.286115, 0.451162 +2645, 0.155348, -0.830938, 0.286115, 0.451162 +2646, 0.155348, -0.830938, 0.286115, 0.451162 +2647, 0.155348, -0.830938, 0.286115, 0.451162 +2648, 0.155348, -0.830938, 0.286115, 0.451162 +2649, 0.155348, -0.830938, 0.286115, 0.451162 +2650, 0.155348, -0.830938, 0.286115, 0.451162 +2651, 0.155348, -0.830938, 0.286115, 0.451162 +2652, 0.155348, -0.830938, 0.286115, 0.451162 +2653, 0.155348, -0.830938, 0.286115, 0.451162 +2654, 0.155348, -0.830938, 0.286115, 0.451162 +2655, 0.155348, -0.830938, 0.286115, 0.451162 +2656, 0.155348, -0.830938, 0.286115, 0.451162 +2657, 0.155348, -0.830938, 0.286115, 0.451162 +2658, 0.155348, -0.830938, 0.286115, 0.451162 +2659, 0.155348, -0.830938, 0.286115, 0.451162 +2660, 0.155348, -0.830938, 0.286115, 0.451162 +2661, 0.155348, -0.830938, 0.286115, 0.451162 +2662, 0.155348, -0.830938, 0.286115, 0.451162 +2663, 0.155348, -0.830938, 0.286115, 0.451162 +2664, 0.155348, -0.830938, 0.286115, 0.451162 +2665, 0.155348, -0.830938, 0.286115, 0.451162 +2666, 0.155348, -0.830938, 0.286115, 0.451162 +2667, 0.155348, -0.830938, 0.286115, 0.451162 +2668, 0.155348, -0.830938, 0.286115, 0.451162 +2669, 0.155348, -0.830938, 0.286115, 0.451162 +2670, 0.155348, -0.830938, 0.286115, 0.451162 +2671, 0.155348, -0.830938, 0.286115, 0.451162 +2672, 0.155348, -0.830938, 0.286115, 0.451162 +2673, 0.155348, -0.830938, 0.286115, 0.451162 +2674, 0.155348, -0.830938, 0.286115, 0.451162 +2675, 0.155348, -0.830938, 0.286115, 0.451162 +2676, 0.155348, -0.830938, 0.286115, 0.451162 +2677, 0.155348, -0.830938, 0.286115, 0.451162 +2678, 0.155348, -0.830938, 0.286115, 0.451162 +2679, 0.155348, -0.830938, 0.286115, 0.451162 +2680, 0.155348, -0.830938, 0.286115, 0.451162 +2681, 0.155348, -0.830938, 0.286115, 0.451162 +2682, 0.155348, -0.830938, 0.286115, 0.451162 +2683, 0.155348, -0.830938, 0.286115, 0.451162 +2684, 0.155348, -0.830938, 0.286115, 0.451162 +2685, 0.155348, -0.830938, 0.286115, 0.451162 +2686, 0.155348, -0.830938, 0.286115, 0.451162 +2687, 0.155348, -0.830938, 0.286115, 0.451162 +2688, 0.155348, -0.830938, 0.286115, 0.451162 +2689, 0.155348, -0.830938, 0.286115, 0.451162 +2690, 0.155348, -0.830938, 0.286115, 0.451162 +2691, 0.155348, -0.830938, 0.286115, 0.451162 +2692, 0.155348, -0.830938, 0.286115, 0.451162 +2693, 0.155348, -0.830938, 0.286115, 0.451162 +2694, 0.155348, -0.830938, 0.286115, 0.451162 +2695, 0.155348, -0.830938, 0.286115, 0.451162 +2696, 0.155348, -0.830938, 0.286115, 0.451162 +2697, 0.155348, -0.830938, 0.286115, 0.451162 +2698, 0.155348, -0.830938, 0.286115, 0.451162 +2699, 0.155348, -0.830938, 0.286115, 0.451162 +2700, 0.140291, -0.847398, 0.275336, 0.431771 +2701, 0.140291, -0.847398, 0.275336, 0.431771 +2702, 0.140291, -0.847398, 0.275336, 0.431771 +2703, 0.140291, -0.847398, 0.275336, 0.431771 +2704, 0.140291, -0.847398, 0.275336, 0.431771 +2705, 0.140291, -0.847398, 0.275336, 0.431771 +2706, 0.140291, -0.847398, 0.275336, 0.431771 +2707, 0.140291, -0.847398, 0.275336, 0.431771 +2708, 0.140291, -0.847398, 0.275336, 0.431771 +2709, 0.140291, -0.847398, 0.275336, 0.431771 +2710, 0.140291, -0.847398, 0.275336, 0.431771 +2711, 0.140291, -0.847398, 0.275336, 0.431771 +2712, 0.140291, -0.847398, 0.275336, 0.431771 +2713, 0.140291, -0.847398, 0.275336, 0.431771 +2714, 0.140291, -0.847398, 0.275336, 0.431771 +2715, 0.140291, -0.847398, 0.275336, 0.431771 +2716, 0.140291, -0.847398, 0.275336, 0.431771 +2717, 0.140291, -0.847398, 0.275336, 0.431771 +2718, 0.140291, -0.847398, 0.275336, 0.431771 +2719, 0.140291, -0.847398, 0.275336, 0.431771 +2720, 0.140291, -0.847398, 0.275336, 0.431771 +2721, 0.140291, -0.847398, 0.275336, 0.431771 +2722, 0.140291, -0.847398, 0.275336, 0.431771 +2723, 0.140291, -0.847398, 0.275336, 0.431771 +2724, 0.140291, -0.847398, 0.275336, 0.431771 +2725, 0.140291, -0.847398, 0.275336, 0.431771 +2726, 0.140291, -0.847398, 0.275336, 0.431771 +2727, 0.140291, -0.847398, 0.275336, 0.431771 +2728, 0.140291, -0.847398, 0.275336, 0.431771 +2729, 0.140291, -0.847398, 0.275336, 0.431771 +2730, 0.140291, -0.847398, 0.275336, 0.431771 +2731, 0.140291, -0.847398, 0.275336, 0.431771 +2732, 0.140291, -0.847398, 0.275336, 0.431771 +2733, 0.140291, -0.847398, 0.275336, 0.431771 +2734, 0.140291, -0.847398, 0.275336, 0.431771 +2735, 0.140291, -0.847398, 0.275336, 0.431771 +2736, 0.140291, -0.847398, 0.275336, 0.431771 +2737, 0.140291, -0.847398, 0.275336, 0.431771 +2738, 0.140291, -0.847398, 0.275336, 0.431771 +2739, 0.140291, -0.847398, 0.275336, 0.431771 +2740, 0.140291, -0.847398, 0.275336, 0.431771 +2741, 0.140291, -0.847398, 0.275336, 0.431771 +2742, 0.140291, -0.847398, 0.275336, 0.431771 +2743, 0.140291, -0.847398, 0.275336, 0.431771 +2744, 0.140291, -0.847398, 0.275336, 0.431771 +2745, 0.140291, -0.847398, 0.275336, 0.431771 +2746, 0.140291, -0.847398, 0.275336, 0.431771 +2747, 0.140291, -0.847398, 0.275336, 0.431771 +2748, 0.140291, -0.847398, 0.275336, 0.431771 +2749, 0.140291, -0.847398, 0.275336, 0.431771 +2750, 0.140291, -0.847398, 0.275336, 0.431771 +2751, 0.140291, -0.847398, 0.275336, 0.431771 +2752, 0.140291, -0.847398, 0.275336, 0.431771 +2753, 0.140291, -0.847398, 0.275336, 0.431771 +2754, 0.140291, -0.847398, 0.275336, 0.431771 +2755, 0.140291, -0.847398, 0.275336, 0.431771 +2756, 0.140291, -0.847398, 0.275336, 0.431771 +2757, 0.140291, -0.847398, 0.275336, 0.431771 +2758, 0.140291, -0.847398, 0.275336, 0.431771 +2759, 0.140291, -0.847398, 0.275336, 0.431771 +2760, 0.140291, -0.847398, 0.275336, 0.431771 +2761, 0.140291, -0.847398, 0.275336, 0.431771 +2762, 0.140291, -0.847398, 0.275336, 0.431771 +2763, 0.140291, -0.847398, 0.275336, 0.431771 +2764, 0.140291, -0.847398, 0.275336, 0.431771 +2765, 0.140291, -0.847398, 0.275336, 0.431771 +2766, 0.140291, -0.847398, 0.275336, 0.431771 +2767, 0.140291, -0.847398, 0.275336, 0.431771 +2768, 0.140291, -0.847398, 0.275336, 0.431771 +2769, 0.140291, -0.847398, 0.275336, 0.431771 +2770, 0.140291, -0.847398, 0.275336, 0.431771 +2771, 0.140291, -0.847398, 0.275336, 0.431771 +2772, 0.140291, -0.847398, 0.275336, 0.431771 +2773, 0.140291, -0.847398, 0.275336, 0.431771 +2774, 0.140291, -0.847398, 0.275336, 0.431771 +2775, 0.140291, -0.847398, 0.275336, 0.431771 +2776, 0.140291, -0.847398, 0.275336, 0.431771 +2777, 0.140291, -0.847398, 0.275336, 0.431771 +2778, 0.140291, -0.847398, 0.275336, 0.431771 +2779, 0.140291, -0.847398, 0.275336, 0.431771 +2780, 0.140291, -0.847398, 0.275336, 0.431771 +2781, 0.140291, -0.847398, 0.275336, 0.431771 +2782, 0.140291, -0.847398, 0.275336, 0.431771 +2783, 0.140291, -0.847398, 0.275336, 0.431771 +2784, 0.140291, -0.847398, 0.275336, 0.431771 +2785, 0.140291, -0.847398, 0.275336, 0.431771 +2786, 0.140291, -0.847398, 0.275336, 0.431771 +2787, 0.140291, -0.847398, 0.275336, 0.431771 +2788, 0.140291, -0.847398, 0.275336, 0.431771 +2789, 0.140291, -0.847398, 0.275336, 0.431771 +2790, 0.140291, -0.847398, 0.275336, 0.431771 +2791, 0.140291, -0.847398, 0.275336, 0.431771 +2792, 0.140291, -0.847398, 0.275336, 0.431771 +2793, 0.140291, -0.847398, 0.275336, 0.431771 +2794, 0.140291, -0.847398, 0.275336, 0.431771 +2795, 0.140291, -0.847398, 0.275336, 0.431771 +2796, 0.140291, -0.847398, 0.275336, 0.431771 +2797, 0.140291, -0.847398, 0.275336, 0.431771 +2798, 0.140291, -0.847398, 0.275336, 0.431771 +2799, 0.140291, -0.847398, 0.275336, 0.431771 +2800, 0.125869, -0.863147, 0.263890, 0.411700 +2801, 0.125869, -0.863147, 0.263890, 0.411700 +2802, 0.125869, -0.863147, 0.263890, 0.411700 +2803, 0.125869, -0.863147, 0.263890, 0.411700 +2804, 0.125869, -0.863147, 0.263890, 0.411700 +2805, 0.125869, -0.863147, 0.263890, 0.411700 +2806, 0.125869, -0.863147, 0.263890, 0.411700 +2807, 0.125869, -0.863147, 0.263890, 0.411700 +2808, 0.125869, -0.863147, 0.263890, 0.411700 +2809, 0.125869, -0.863147, 0.263890, 0.411700 +2810, 0.125869, -0.863147, 0.263890, 0.411700 +2811, 0.125869, -0.863147, 0.263890, 0.411700 +2812, 0.125869, -0.863147, 0.263890, 0.411700 +2813, 0.125869, -0.863147, 0.263890, 0.411700 +2814, 0.125869, -0.863147, 0.263890, 0.411700 +2815, 0.125869, -0.863147, 0.263890, 0.411700 +2816, 0.125869, -0.863147, 0.263890, 0.411700 +2817, 0.125869, -0.863147, 0.263890, 0.411700 +2818, 0.125869, -0.863147, 0.263890, 0.411700 +2819, 0.125869, -0.863147, 0.263890, 0.411700 +2820, 0.125869, -0.863147, 0.263890, 0.411700 +2821, 0.125869, -0.863147, 0.263890, 0.411700 +2822, 0.125869, -0.863147, 0.263890, 0.411700 +2823, 0.125869, -0.863147, 0.263890, 0.411700 +2824, 0.125869, -0.863147, 0.263890, 0.411700 +2825, 0.125869, -0.863147, 0.263890, 0.411700 +2826, 0.125869, -0.863147, 0.263890, 0.411700 +2827, 0.125869, -0.863147, 0.263890, 0.411700 +2828, 0.125869, -0.863147, 0.263890, 0.411700 +2829, 0.125869, -0.863147, 0.263890, 0.411700 +2830, 0.125869, -0.863147, 0.263890, 0.411700 +2831, 0.125869, -0.863147, 0.263890, 0.411700 +2832, 0.125869, -0.863147, 0.263890, 0.411700 +2833, 0.125869, -0.863147, 0.263890, 0.411700 +2834, 0.125869, -0.863147, 0.263890, 0.411700 +2835, 0.125869, -0.863147, 0.263890, 0.411700 +2836, 0.125869, -0.863147, 0.263890, 0.411700 +2837, 0.125869, -0.863147, 0.263890, 0.411700 +2838, 0.125869, -0.863147, 0.263890, 0.411700 +2839, 0.125869, -0.863147, 0.263890, 0.411700 +2840, 0.125869, -0.863147, 0.263890, 0.411700 +2841, 0.125869, -0.863147, 0.263890, 0.411700 +2842, 0.125869, -0.863147, 0.263890, 0.411700 +2843, 0.125869, -0.863147, 0.263890, 0.411700 +2844, 0.125869, -0.863147, 0.263890, 0.411700 +2845, 0.125869, -0.863147, 0.263890, 0.411700 +2846, 0.125869, -0.863147, 0.263890, 0.411700 +2847, 0.125869, -0.863147, 0.263890, 0.411700 +2848, 0.125869, -0.863147, 0.263890, 0.411700 +2849, 0.125869, -0.863147, 0.263890, 0.411700 +2850, 0.125869, -0.863147, 0.263890, 0.411700 +2851, 0.125869, -0.863147, 0.263890, 0.411700 +2852, 0.125869, -0.863147, 0.263890, 0.411700 +2853, 0.125869, -0.863147, 0.263890, 0.411700 +2854, 0.125869, -0.863147, 0.263890, 0.411700 +2855, 0.125869, -0.863147, 0.263890, 0.411700 +2856, 0.125869, -0.863147, 0.263890, 0.411700 +2857, 0.125869, -0.863147, 0.263890, 0.411700 +2858, 0.125869, -0.863147, 0.263890, 0.411700 +2859, 0.125869, -0.863147, 0.263890, 0.411700 +2860, 0.125869, -0.863147, 0.263890, 0.411700 +2861, 0.125869, -0.863147, 0.263890, 0.411700 +2862, 0.125869, -0.863147, 0.263890, 0.411700 +2863, 0.125869, -0.863147, 0.263890, 0.411700 +2864, 0.125869, -0.863147, 0.263890, 0.411700 +2865, 0.125869, -0.863147, 0.263890, 0.411700 +2866, 0.125869, -0.863147, 0.263890, 0.411700 +2867, 0.125869, -0.863147, 0.263890, 0.411700 +2868, 0.125869, -0.863147, 0.263890, 0.411700 +2869, 0.125869, -0.863147, 0.263890, 0.411700 +2870, 0.125869, -0.863147, 0.263890, 0.411700 +2871, 0.125869, -0.863147, 0.263890, 0.411700 +2872, 0.125869, -0.863147, 0.263890, 0.411700 +2873, 0.125869, -0.863147, 0.263890, 0.411700 +2874, 0.125869, -0.863147, 0.263890, 0.411700 +2875, 0.125869, -0.863147, 0.263890, 0.411700 +2876, 0.125869, -0.863147, 0.263890, 0.411700 +2877, 0.125869, -0.863147, 0.263890, 0.411700 +2878, 0.125869, -0.863147, 0.263890, 0.411700 +2879, 0.125869, -0.863147, 0.263890, 0.411700 +2880, 0.125869, -0.863147, 0.263890, 0.411700 +2881, 0.125869, -0.863147, 0.263890, 0.411700 +2882, 0.125869, -0.863147, 0.263890, 0.411700 +2883, 0.125869, -0.863147, 0.263890, 0.411700 +2884, 0.125869, -0.863147, 0.263890, 0.411700 +2885, 0.125869, -0.863147, 0.263890, 0.411700 +2886, 0.125869, -0.863147, 0.263890, 0.411700 +2887, 0.125869, -0.863147, 0.263890, 0.411700 +2888, 0.125869, -0.863147, 0.263890, 0.411700 +2889, 0.125869, -0.863147, 0.263890, 0.411700 +2890, 0.125869, -0.863147, 0.263890, 0.411700 +2891, 0.125869, -0.863147, 0.263890, 0.411700 +2892, 0.125869, -0.863147, 0.263890, 0.411700 +2893, 0.125869, -0.863147, 0.263890, 0.411700 +2894, 0.125869, -0.863147, 0.263890, 0.411700 +2895, 0.125869, -0.863147, 0.263890, 0.411700 +2896, 0.125869, -0.863147, 0.263890, 0.411700 +2897, 0.125869, -0.863147, 0.263890, 0.411700 +2898, 0.125869, -0.863147, 0.263890, 0.411700 +2899, 0.125869, -0.863147, 0.263890, 0.411700 +2900, 0.112112, -0.878156, 0.251807, 0.390980 +2901, 0.112112, -0.878156, 0.251807, 0.390980 +2902, 0.112112, -0.878156, 0.251807, 0.390980 +2903, 0.112112, -0.878156, 0.251807, 0.390980 +2904, 0.112112, -0.878156, 0.251807, 0.390980 +2905, 0.112112, -0.878156, 0.251807, 0.390980 +2906, 0.112112, -0.878156, 0.251807, 0.390980 +2907, 0.112112, -0.878156, 0.251807, 0.390980 +2908, 0.112112, -0.878156, 0.251807, 0.390980 +2909, 0.112112, -0.878156, 0.251807, 0.390980 +2910, 0.112112, -0.878156, 0.251807, 0.390980 +2911, 0.112112, -0.878156, 0.251807, 0.390980 +2912, 0.112112, -0.878156, 0.251807, 0.390980 +2913, 0.112112, -0.878156, 0.251807, 0.390980 +2914, 0.112112, -0.878156, 0.251807, 0.390980 +2915, 0.112112, -0.878156, 0.251807, 0.390980 +2916, 0.112112, -0.878156, 0.251807, 0.390980 +2917, 0.112112, -0.878156, 0.251807, 0.390980 +2918, 0.112112, -0.878156, 0.251807, 0.390980 +2919, 0.112112, -0.878156, 0.251807, 0.390980 +2920, 0.112112, -0.878156, 0.251807, 0.390980 +2921, 0.112112, -0.878156, 0.251807, 0.390980 +2922, 0.112112, -0.878156, 0.251807, 0.390980 +2923, 0.112112, -0.878156, 0.251807, 0.390980 +2924, 0.112112, -0.878156, 0.251807, 0.390980 +2925, 0.112112, -0.878156, 0.251807, 0.390980 +2926, 0.112112, -0.878156, 0.251807, 0.390980 +2927, 0.112112, -0.878156, 0.251807, 0.390980 +2928, 0.112112, -0.878156, 0.251807, 0.390980 +2929, 0.112112, -0.878156, 0.251807, 0.390980 +2930, 0.112112, -0.878156, 0.251807, 0.390980 +2931, 0.112112, -0.878156, 0.251807, 0.390980 +2932, 0.112112, -0.878156, 0.251807, 0.390980 +2933, 0.112112, -0.878156, 0.251807, 0.390980 +2934, 0.112112, -0.878156, 0.251807, 0.390980 +2935, 0.112112, -0.878156, 0.251807, 0.390980 +2936, 0.112112, -0.878156, 0.251807, 0.390980 +2937, 0.112112, -0.878156, 0.251807, 0.390980 +2938, 0.112112, -0.878156, 0.251807, 0.390980 +2939, 0.112112, -0.878156, 0.251807, 0.390980 +2940, 0.112112, -0.878156, 0.251807, 0.390980 +2941, 0.112112, -0.878156, 0.251807, 0.390980 +2942, 0.112112, -0.878156, 0.251807, 0.390980 +2943, 0.112112, -0.878156, 0.251807, 0.390980 +2944, 0.112112, -0.878156, 0.251807, 0.390980 +2945, 0.112112, -0.878156, 0.251807, 0.390980 +2946, 0.112112, -0.878156, 0.251807, 0.390980 +2947, 0.112112, -0.878156, 0.251807, 0.390980 +2948, 0.112112, -0.878156, 0.251807, 0.390980 +2949, 0.112112, -0.878156, 0.251807, 0.390980 +2950, 0.112112, -0.878156, 0.251807, 0.390980 +2951, 0.112112, -0.878156, 0.251807, 0.390980 +2952, 0.112112, -0.878156, 0.251807, 0.390980 +2953, 0.112112, -0.878156, 0.251807, 0.390980 +2954, 0.112112, -0.878156, 0.251807, 0.390980 +2955, 0.112112, -0.878156, 0.251807, 0.390980 +2956, 0.112112, -0.878156, 0.251807, 0.390980 +2957, 0.112112, -0.878156, 0.251807, 0.390980 +2958, 0.112112, -0.878156, 0.251807, 0.390980 +2959, 0.112112, -0.878156, 0.251807, 0.390980 +2960, 0.112112, -0.878156, 0.251807, 0.390980 +2961, 0.112112, -0.878156, 0.251807, 0.390980 +2962, 0.112112, -0.878156, 0.251807, 0.390980 +2963, 0.112112, -0.878156, 0.251807, 0.390980 +2964, 0.112112, -0.878156, 0.251807, 0.390980 +2965, 0.112112, -0.878156, 0.251807, 0.390980 +2966, 0.112112, -0.878156, 0.251807, 0.390980 +2967, 0.112112, -0.878156, 0.251807, 0.390980 +2968, 0.112112, -0.878156, 0.251807, 0.390980 +2969, 0.112112, -0.878156, 0.251807, 0.390980 +2970, 0.112112, -0.878156, 0.251807, 0.390980 +2971, 0.112112, -0.878156, 0.251807, 0.390980 +2972, 0.112112, -0.878156, 0.251807, 0.390980 +2973, 0.112112, -0.878156, 0.251807, 0.390980 +2974, 0.112112, -0.878156, 0.251807, 0.390980 +2975, 0.112112, -0.878156, 0.251807, 0.390980 +2976, 0.112112, -0.878156, 0.251807, 0.390980 +2977, 0.112112, -0.878156, 0.251807, 0.390980 +2978, 0.112112, -0.878156, 0.251807, 0.390980 +2979, 0.112112, -0.878156, 0.251807, 0.390980 +2980, 0.112112, -0.878156, 0.251807, 0.390980 +2981, 0.112112, -0.878156, 0.251807, 0.390980 +2982, 0.112112, -0.878156, 0.251807, 0.390980 +2983, 0.112112, -0.878156, 0.251807, 0.390980 +2984, 0.112112, -0.878156, 0.251807, 0.390980 +2985, 0.112112, -0.878156, 0.251807, 0.390980 +2986, 0.112112, -0.878156, 0.251807, 0.390980 +2987, 0.112112, -0.878156, 0.251807, 0.390980 +2988, 0.112112, -0.878156, 0.251807, 0.390980 +2989, 0.112112, -0.878156, 0.251807, 0.390980 +2990, 0.112112, -0.878156, 0.251807, 0.390980 +2991, 0.112112, -0.878156, 0.251807, 0.390980 +2992, 0.112112, -0.878156, 0.251807, 0.390980 +2993, 0.112112, -0.878156, 0.251807, 0.390980 +2994, 0.112112, -0.878156, 0.251807, 0.390980 +2995, 0.112112, -0.878156, 0.251807, 0.390980 +2996, 0.112112, -0.878156, 0.251807, 0.390980 +2997, 0.112112, -0.878156, 0.251807, 0.390980 +2998, 0.112112, -0.878156, 0.251807, 0.390980 +2999, 0.112112, -0.878156, 0.251807, 0.390980 +3000, 0.099046, -0.892399, 0.239118, 0.369644 +3001, 0.099046, -0.892399, 0.239118, 0.369644 +3002, 0.099046, -0.892399, 0.239118, 0.369644 +3003, 0.099046, -0.892399, 0.239118, 0.369644 +3004, 0.099046, -0.892399, 0.239118, 0.369644 +3005, 0.099046, -0.892399, 0.239118, 0.369644 +3006, 0.099046, -0.892399, 0.239118, 0.369644 +3007, 0.099046, -0.892399, 0.239118, 0.369644 +3008, 0.099046, -0.892399, 0.239118, 0.369644 +3009, 0.099046, -0.892399, 0.239118, 0.369644 +3010, 0.099046, -0.892399, 0.239118, 0.369644 +3011, 0.099046, -0.892399, 0.239118, 0.369644 +3012, 0.099046, -0.892399, 0.239118, 0.369644 +3013, 0.099046, -0.892399, 0.239118, 0.369644 +3014, 0.099046, -0.892399, 0.239118, 0.369644 +3015, 0.099046, -0.892399, 0.239118, 0.369644 +3016, 0.099046, -0.892399, 0.239118, 0.369644 +3017, 0.099046, -0.892399, 0.239118, 0.369644 +3018, 0.099046, -0.892399, 0.239118, 0.369644 +3019, 0.099046, -0.892399, 0.239118, 0.369644 +3020, 0.099046, -0.892399, 0.239118, 0.369644 +3021, 0.099046, -0.892399, 0.239118, 0.369644 +3022, 0.099046, -0.892399, 0.239118, 0.369644 +3023, 0.099046, -0.892399, 0.239118, 0.369644 +3024, 0.099046, -0.892399, 0.239118, 0.369644 +3025, 0.099046, -0.892399, 0.239118, 0.369644 +3026, 0.099046, -0.892399, 0.239118, 0.369644 +3027, 0.099046, -0.892399, 0.239118, 0.369644 +3028, 0.099046, -0.892399, 0.239118, 0.369644 +3029, 0.099046, -0.892399, 0.239118, 0.369644 +3030, 0.099046, -0.892399, 0.239118, 0.369644 +3031, 0.099046, -0.892399, 0.239118, 0.369644 +3032, 0.099046, -0.892399, 0.239118, 0.369644 +3033, 0.099046, -0.892399, 0.239118, 0.369644 +3034, 0.099046, -0.892399, 0.239118, 0.369644 +3035, 0.099046, -0.892399, 0.239118, 0.369644 +3036, 0.099046, -0.892399, 0.239118, 0.369644 +3037, 0.099046, -0.892399, 0.239118, 0.369644 +3038, 0.099046, -0.892399, 0.239118, 0.369644 +3039, 0.099046, -0.892399, 0.239118, 0.369644 +3040, 0.099046, -0.892399, 0.239118, 0.369644 +3041, 0.099046, -0.892399, 0.239118, 0.369644 +3042, 0.099046, -0.892399, 0.239118, 0.369644 +3043, 0.099046, -0.892399, 0.239118, 0.369644 +3044, 0.099046, -0.892399, 0.239118, 0.369644 +3045, 0.099046, -0.892399, 0.239118, 0.369644 +3046, 0.099046, -0.892399, 0.239118, 0.369644 +3047, 0.099046, -0.892399, 0.239118, 0.369644 +3048, 0.099046, -0.892399, 0.239118, 0.369644 +3049, 0.099046, -0.892399, 0.239118, 0.369644 +3050, 0.099046, -0.892399, 0.239118, 0.369644 +3051, 0.099046, -0.892399, 0.239118, 0.369644 +3052, 0.099046, -0.892399, 0.239118, 0.369644 +3053, 0.099046, -0.892399, 0.239118, 0.369644 +3054, 0.099046, -0.892399, 0.239118, 0.369644 +3055, 0.099046, -0.892399, 0.239118, 0.369644 +3056, 0.099046, -0.892399, 0.239118, 0.369644 +3057, 0.099046, -0.892399, 0.239118, 0.369644 +3058, 0.099046, -0.892399, 0.239118, 0.369644 +3059, 0.099046, -0.892399, 0.239118, 0.369644 +3060, 0.099046, -0.892399, 0.239118, 0.369644 +3061, 0.099046, -0.892399, 0.239118, 0.369644 +3062, 0.099046, -0.892399, 0.239118, 0.369644 +3063, 0.099046, -0.892399, 0.239118, 0.369644 +3064, 0.099046, -0.892399, 0.239118, 0.369644 +3065, 0.099046, -0.892399, 0.239118, 0.369644 +3066, 0.099046, -0.892399, 0.239118, 0.369644 +3067, 0.099046, -0.892399, 0.239118, 0.369644 +3068, 0.099046, -0.892399, 0.239118, 0.369644 +3069, 0.099046, -0.892399, 0.239118, 0.369644 +3070, 0.099046, -0.892399, 0.239118, 0.369644 +3071, 0.099046, -0.892399, 0.239118, 0.369644 +3072, 0.099046, -0.892399, 0.239118, 0.369644 +3073, 0.099046, -0.892399, 0.239118, 0.369644 +3074, 0.099046, -0.892399, 0.239118, 0.369644 +3075, 0.099046, -0.892399, 0.239118, 0.369644 +3076, 0.099046, -0.892399, 0.239118, 0.369644 +3077, 0.099046, -0.892399, 0.239118, 0.369644 +3078, 0.099046, -0.892399, 0.239118, 0.369644 +3079, 0.099046, -0.892399, 0.239118, 0.369644 +3080, 0.099046, -0.892399, 0.239118, 0.369644 +3081, 0.099046, -0.892399, 0.239118, 0.369644 +3082, 0.099046, -0.892399, 0.239118, 0.369644 +3083, 0.099046, -0.892399, 0.239118, 0.369644 +3084, 0.099046, -0.892399, 0.239118, 0.369644 +3085, 0.099046, -0.892399, 0.239118, 0.369644 +3086, 0.099046, -0.892399, 0.239118, 0.369644 +3087, 0.099046, -0.892399, 0.239118, 0.369644 +3088, 0.099046, -0.892399, 0.239118, 0.369644 +3089, 0.099046, -0.892399, 0.239118, 0.369644 +3090, 0.099046, -0.892399, 0.239118, 0.369644 +3091, 0.099046, -0.892399, 0.239118, 0.369644 +3092, 0.099046, -0.892399, 0.239118, 0.369644 +3093, 0.099046, -0.892399, 0.239118, 0.369644 +3094, 0.099046, -0.892399, 0.239118, 0.369644 +3095, 0.099046, -0.892399, 0.239118, 0.369644 +3096, 0.099046, -0.892399, 0.239118, 0.369644 +3097, 0.099046, -0.892399, 0.239118, 0.369644 +3098, 0.099046, -0.892399, 0.239118, 0.369644 +3099, 0.099046, -0.892399, 0.239118, 0.369644 +3100, 0.086697, -0.905849, 0.225854, 0.347723 +3101, 0.086697, -0.905849, 0.225854, 0.347723 +3102, 0.086697, -0.905849, 0.225854, 0.347723 +3103, 0.086697, -0.905849, 0.225854, 0.347723 +3104, 0.086697, -0.905849, 0.225854, 0.347723 +3105, 0.086697, -0.905849, 0.225854, 0.347723 +3106, 0.086697, -0.905849, 0.225854, 0.347723 +3107, 0.086697, -0.905849, 0.225854, 0.347723 +3108, 0.086697, -0.905849, 0.225854, 0.347723 +3109, 0.086697, -0.905849, 0.225854, 0.347723 +3110, 0.086697, -0.905849, 0.225854, 0.347723 +3111, 0.086697, -0.905849, 0.225854, 0.347723 +3112, 0.086697, -0.905849, 0.225854, 0.347723 +3113, 0.086697, -0.905849, 0.225854, 0.347723 +3114, 0.086697, -0.905849, 0.225854, 0.347723 +3115, 0.086697, -0.905849, 0.225854, 0.347723 +3116, 0.086697, -0.905849, 0.225854, 0.347723 +3117, 0.086697, -0.905849, 0.225854, 0.347723 +3118, 0.086697, -0.905849, 0.225854, 0.347723 +3119, 0.086697, -0.905849, 0.225854, 0.347723 +3120, 0.086697, -0.905849, 0.225854, 0.347723 +3121, 0.086697, -0.905849, 0.225854, 0.347723 +3122, 0.086697, -0.905849, 0.225854, 0.347723 +3123, 0.086697, -0.905849, 0.225854, 0.347723 +3124, 0.086697, -0.905849, 0.225854, 0.347723 +3125, 0.086697, -0.905849, 0.225854, 0.347723 +3126, 0.086697, -0.905849, 0.225854, 0.347723 +3127, 0.086697, -0.905849, 0.225854, 0.347723 +3128, 0.086697, -0.905849, 0.225854, 0.347723 +3129, 0.086697, -0.905849, 0.225854, 0.347723 +3130, 0.086697, -0.905849, 0.225854, 0.347723 +3131, 0.086697, -0.905849, 0.225854, 0.347723 +3132, 0.086697, -0.905849, 0.225854, 0.347723 +3133, 0.086697, -0.905849, 0.225854, 0.347723 +3134, 0.086697, -0.905849, 0.225854, 0.347723 +3135, 0.086697, -0.905849, 0.225854, 0.347723 +3136, 0.086697, -0.905849, 0.225854, 0.347723 +3137, 0.086697, -0.905849, 0.225854, 0.347723 +3138, 0.086697, -0.905849, 0.225854, 0.347723 +3139, 0.086697, -0.905849, 0.225854, 0.347723 +3140, 0.086697, -0.905849, 0.225854, 0.347723 +3141, 0.086697, -0.905849, 0.225854, 0.347723 +3142, 0.086697, -0.905849, 0.225854, 0.347723 +3143, 0.086697, -0.905849, 0.225854, 0.347723 +3144, 0.086697, -0.905849, 0.225854, 0.347723 +3145, 0.086697, -0.905849, 0.225854, 0.347723 +3146, 0.086697, -0.905849, 0.225854, 0.347723 +3147, 0.086697, -0.905849, 0.225854, 0.347723 +3148, 0.086697, -0.905849, 0.225854, 0.347723 +3149, 0.086697, -0.905849, 0.225854, 0.347723 +3150, 0.086697, -0.905849, 0.225854, 0.347723 +3151, 0.086697, -0.905849, 0.225854, 0.347723 +3152, 0.086697, -0.905849, 0.225854, 0.347723 +3153, 0.086697, -0.905849, 0.225854, 0.347723 +3154, 0.086697, -0.905849, 0.225854, 0.347723 +3155, 0.086697, -0.905849, 0.225854, 0.347723 +3156, 0.086697, -0.905849, 0.225854, 0.347723 +3157, 0.086697, -0.905849, 0.225854, 0.347723 +3158, 0.086697, -0.905849, 0.225854, 0.347723 +3159, 0.086697, -0.905849, 0.225854, 0.347723 +3160, 0.086697, -0.905849, 0.225854, 0.347723 +3161, 0.086697, -0.905849, 0.225854, 0.347723 +3162, 0.086697, -0.905849, 0.225854, 0.347723 +3163, 0.086697, -0.905849, 0.225854, 0.347723 +3164, 0.086697, -0.905849, 0.225854, 0.347723 +3165, 0.086697, -0.905849, 0.225854, 0.347723 +3166, 0.086697, -0.905849, 0.225854, 0.347723 +3167, 0.086697, -0.905849, 0.225854, 0.347723 +3168, 0.086697, -0.905849, 0.225854, 0.347723 +3169, 0.086697, -0.905849, 0.225854, 0.347723 +3170, 0.086697, -0.905849, 0.225854, 0.347723 +3171, 0.086697, -0.905849, 0.225854, 0.347723 +3172, 0.086697, -0.905849, 0.225854, 0.347723 +3173, 0.086697, -0.905849, 0.225854, 0.347723 +3174, 0.086697, -0.905849, 0.225854, 0.347723 +3175, 0.086697, -0.905849, 0.225854, 0.347723 +3176, 0.086697, -0.905849, 0.225854, 0.347723 +3177, 0.086697, -0.905849, 0.225854, 0.347723 +3178, 0.086697, -0.905849, 0.225854, 0.347723 +3179, 0.086697, -0.905849, 0.225854, 0.347723 +3180, 0.086697, -0.905849, 0.225854, 0.347723 +3181, 0.086697, -0.905849, 0.225854, 0.347723 +3182, 0.086697, -0.905849, 0.225854, 0.347723 +3183, 0.086697, -0.905849, 0.225854, 0.347723 +3184, 0.086697, -0.905849, 0.225854, 0.347723 +3185, 0.086697, -0.905849, 0.225854, 0.347723 +3186, 0.086697, -0.905849, 0.225854, 0.347723 +3187, 0.086697, -0.905849, 0.225854, 0.347723 +3188, 0.086697, -0.905849, 0.225854, 0.347723 +3189, 0.086697, -0.905849, 0.225854, 0.347723 +3190, 0.086697, -0.905849, 0.225854, 0.347723 +3191, 0.086697, -0.905849, 0.225854, 0.347723 +3192, 0.086697, -0.905849, 0.225854, 0.347723 +3193, 0.086697, -0.905849, 0.225854, 0.347723 +3194, 0.086697, -0.905849, 0.225854, 0.347723 +3195, 0.086697, -0.905849, 0.225854, 0.347723 +3196, 0.086697, -0.905849, 0.225854, 0.347723 +3197, 0.086697, -0.905849, 0.225854, 0.347723 +3198, 0.086697, -0.905849, 0.225854, 0.347723 +3199, 0.086697, -0.905849, 0.225854, 0.347723 +3200, 0.075090, -0.918482, 0.212048, 0.325251 +3201, 0.075090, -0.918482, 0.212048, 0.325251 +3202, 0.075090, -0.918482, 0.212048, 0.325251 +3203, 0.075090, -0.918482, 0.212048, 0.325251 +3204, 0.075090, -0.918482, 0.212048, 0.325251 +3205, 0.075090, -0.918482, 0.212048, 0.325251 +3206, 0.075090, -0.918482, 0.212048, 0.325251 +3207, 0.075090, -0.918482, 0.212048, 0.325251 +3208, 0.075090, -0.918482, 0.212048, 0.325251 +3209, 0.075090, -0.918482, 0.212048, 0.325251 +3210, 0.075090, -0.918482, 0.212048, 0.325251 +3211, 0.075090, -0.918482, 0.212048, 0.325251 +3212, 0.075090, -0.918482, 0.212048, 0.325251 +3213, 0.075090, -0.918482, 0.212048, 0.325251 +3214, 0.075090, -0.918482, 0.212048, 0.325251 +3215, 0.075090, -0.918482, 0.212048, 0.325251 +3216, 0.075090, -0.918482, 0.212048, 0.325251 +3217, 0.075090, -0.918482, 0.212048, 0.325251 +3218, 0.075090, -0.918482, 0.212048, 0.325251 +3219, 0.075090, -0.918482, 0.212048, 0.325251 +3220, 0.075090, -0.918482, 0.212048, 0.325251 +3221, 0.075090, -0.918482, 0.212048, 0.325251 +3222, 0.075090, -0.918482, 0.212048, 0.325251 +3223, 0.075090, -0.918482, 0.212048, 0.325251 +3224, 0.075090, -0.918482, 0.212048, 0.325251 +3225, 0.075090, -0.918482, 0.212048, 0.325251 +3226, 0.075090, -0.918482, 0.212048, 0.325251 +3227, 0.075090, -0.918482, 0.212048, 0.325251 +3228, 0.075090, -0.918482, 0.212048, 0.325251 +3229, 0.075090, -0.918482, 0.212048, 0.325251 +3230, 0.075090, -0.918482, 0.212048, 0.325251 +3231, 0.075090, -0.918482, 0.212048, 0.325251 +3232, 0.075090, -0.918482, 0.212048, 0.325251 +3233, 0.075090, -0.918482, 0.212048, 0.325251 +3234, 0.075090, -0.918482, 0.212048, 0.325251 +3235, 0.075090, -0.918482, 0.212048, 0.325251 +3236, 0.075090, -0.918482, 0.212048, 0.325251 +3237, 0.075090, -0.918482, 0.212048, 0.325251 +3238, 0.075090, -0.918482, 0.212048, 0.325251 +3239, 0.075090, -0.918482, 0.212048, 0.325251 +3240, 0.075090, -0.918482, 0.212048, 0.325251 +3241, 0.075090, -0.918482, 0.212048, 0.325251 +3242, 0.075090, -0.918482, 0.212048, 0.325251 +3243, 0.075090, -0.918482, 0.212048, 0.325251 +3244, 0.075090, -0.918482, 0.212048, 0.325251 +3245, 0.075090, -0.918482, 0.212048, 0.325251 +3246, 0.075090, -0.918482, 0.212048, 0.325251 +3247, 0.075090, -0.918482, 0.212048, 0.325251 +3248, 0.075090, -0.918482, 0.212048, 0.325251 +3249, 0.075090, -0.918482, 0.212048, 0.325251 +3250, 0.075090, -0.918482, 0.212048, 0.325251 +3251, 0.075090, -0.918482, 0.212048, 0.325251 +3252, 0.075090, -0.918482, 0.212048, 0.325251 +3253, 0.075090, -0.918482, 0.212048, 0.325251 +3254, 0.075090, -0.918482, 0.212048, 0.325251 +3255, 0.075090, -0.918482, 0.212048, 0.325251 +3256, 0.075090, -0.918482, 0.212048, 0.325251 +3257, 0.075090, -0.918482, 0.212048, 0.325251 +3258, 0.075090, -0.918482, 0.212048, 0.325251 +3259, 0.075090, -0.918482, 0.212048, 0.325251 +3260, 0.075090, -0.918482, 0.212048, 0.325251 +3261, 0.075090, -0.918482, 0.212048, 0.325251 +3262, 0.075090, -0.918482, 0.212048, 0.325251 +3263, 0.075090, -0.918482, 0.212048, 0.325251 +3264, 0.075090, -0.918482, 0.212048, 0.325251 +3265, 0.075090, -0.918482, 0.212048, 0.325251 +3266, 0.075090, -0.918482, 0.212048, 0.325251 +3267, 0.075090, -0.918482, 0.212048, 0.325251 +3268, 0.075090, -0.918482, 0.212048, 0.325251 +3269, 0.075090, -0.918482, 0.212048, 0.325251 +3270, 0.075090, -0.918482, 0.212048, 0.325251 +3271, 0.075090, -0.918482, 0.212048, 0.325251 +3272, 0.075090, -0.918482, 0.212048, 0.325251 +3273, 0.075090, -0.918482, 0.212048, 0.325251 +3274, 0.075090, -0.918482, 0.212048, 0.325251 +3275, 0.075090, -0.918482, 0.212048, 0.325251 +3276, 0.075090, -0.918482, 0.212048, 0.325251 +3277, 0.075090, -0.918482, 0.212048, 0.325251 +3278, 0.075090, -0.918482, 0.212048, 0.325251 +3279, 0.075090, -0.918482, 0.212048, 0.325251 +3280, 0.075090, -0.918482, 0.212048, 0.325251 +3281, 0.075090, -0.918482, 0.212048, 0.325251 +3282, 0.075090, -0.918482, 0.212048, 0.325251 +3283, 0.075090, -0.918482, 0.212048, 0.325251 +3284, 0.075090, -0.918482, 0.212048, 0.325251 +3285, 0.075090, -0.918482, 0.212048, 0.325251 +3286, 0.075090, -0.918482, 0.212048, 0.325251 +3287, 0.075090, -0.918482, 0.212048, 0.325251 +3288, 0.075090, -0.918482, 0.212048, 0.325251 +3289, 0.075090, -0.918482, 0.212048, 0.325251 +3290, 0.075090, -0.918482, 0.212048, 0.325251 +3291, 0.075090, -0.918482, 0.212048, 0.325251 +3292, 0.075090, -0.918482, 0.212048, 0.325251 +3293, 0.075090, -0.918482, 0.212048, 0.325251 +3294, 0.075090, -0.918482, 0.212048, 0.325251 +3295, 0.075090, -0.918482, 0.212048, 0.325251 +3296, 0.075090, -0.918482, 0.212048, 0.325251 +3297, 0.075090, -0.918482, 0.212048, 0.325251 +3298, 0.075090, -0.918482, 0.212048, 0.325251 +3299, 0.075090, -0.918482, 0.212048, 0.325251 +3300, 0.064248, -0.930274, 0.197736, 0.302264 +3301, 0.064248, -0.930274, 0.197736, 0.302264 +3302, 0.064248, -0.930274, 0.197736, 0.302264 +3303, 0.064248, -0.930274, 0.197736, 0.302264 +3304, 0.064248, -0.930274, 0.197736, 0.302264 +3305, 0.064248, -0.930274, 0.197736, 0.302264 +3306, 0.064248, -0.930274, 0.197736, 0.302264 +3307, 0.064248, -0.930274, 0.197736, 0.302264 +3308, 0.064248, -0.930274, 0.197736, 0.302264 +3309, 0.064248, -0.930274, 0.197736, 0.302264 +3310, 0.064248, -0.930274, 0.197736, 0.302264 +3311, 0.064248, -0.930274, 0.197736, 0.302264 +3312, 0.064248, -0.930274, 0.197736, 0.302264 +3313, 0.064248, -0.930274, 0.197736, 0.302264 +3314, 0.064248, -0.930274, 0.197736, 0.302264 +3315, 0.064248, -0.930274, 0.197736, 0.302264 +3316, 0.064248, -0.930274, 0.197736, 0.302264 +3317, 0.064248, -0.930274, 0.197736, 0.302264 +3318, 0.064248, -0.930274, 0.197736, 0.302264 +3319, 0.064248, -0.930274, 0.197736, 0.302264 +3320, 0.064248, -0.930274, 0.197736, 0.302264 +3321, 0.064248, -0.930274, 0.197736, 0.302264 +3322, 0.064248, -0.930274, 0.197736, 0.302264 +3323, 0.064248, -0.930274, 0.197736, 0.302264 +3324, 0.064248, -0.930274, 0.197736, 0.302264 +3325, 0.064248, -0.930274, 0.197736, 0.302264 +3326, 0.064248, -0.930274, 0.197736, 0.302264 +3327, 0.064248, -0.930274, 0.197736, 0.302264 +3328, 0.064248, -0.930274, 0.197736, 0.302264 +3329, 0.064248, -0.930274, 0.197736, 0.302264 +3330, 0.064248, -0.930274, 0.197736, 0.302264 +3331, 0.064248, -0.930274, 0.197736, 0.302264 +3332, 0.064248, -0.930274, 0.197736, 0.302264 +3333, 0.064248, -0.930274, 0.197736, 0.302264 +3334, 0.064248, -0.930274, 0.197736, 0.302264 +3335, 0.064248, -0.930274, 0.197736, 0.302264 +3336, 0.064248, -0.930274, 0.197736, 0.302264 +3337, 0.064248, -0.930274, 0.197736, 0.302264 +3338, 0.064248, -0.930274, 0.197736, 0.302264 +3339, 0.064248, -0.930274, 0.197736, 0.302264 +3340, 0.064248, -0.930274, 0.197736, 0.302264 +3341, 0.064248, -0.930274, 0.197736, 0.302264 +3342, 0.064248, -0.930274, 0.197736, 0.302264 +3343, 0.064248, -0.930274, 0.197736, 0.302264 +3344, 0.064248, -0.930274, 0.197736, 0.302264 +3345, 0.064248, -0.930274, 0.197736, 0.302264 +3346, 0.064248, -0.930274, 0.197736, 0.302264 +3347, 0.064248, -0.930274, 0.197736, 0.302264 +3348, 0.064248, -0.930274, 0.197736, 0.302264 +3349, 0.064248, -0.930274, 0.197736, 0.302264 +3350, 0.064248, -0.930274, 0.197736, 0.302264 +3351, 0.064248, -0.930274, 0.197736, 0.302264 +3352, 0.064248, -0.930274, 0.197736, 0.302264 +3353, 0.064248, -0.930274, 0.197736, 0.302264 +3354, 0.064248, -0.930274, 0.197736, 0.302264 +3355, 0.064248, -0.930274, 0.197736, 0.302264 +3356, 0.064248, -0.930274, 0.197736, 0.302264 +3357, 0.064248, -0.930274, 0.197736, 0.302264 +3358, 0.064248, -0.930274, 0.197736, 0.302264 +3359, 0.064248, -0.930274, 0.197736, 0.302264 +3360, 0.064248, -0.930274, 0.197736, 0.302264 +3361, 0.064248, -0.930274, 0.197736, 0.302264 +3362, 0.064248, -0.930274, 0.197736, 0.302264 +3363, 0.064248, -0.930274, 0.197736, 0.302264 +3364, 0.064248, -0.930274, 0.197736, 0.302264 +3365, 0.064248, -0.930274, 0.197736, 0.302264 +3366, 0.064248, -0.930274, 0.197736, 0.302264 +3367, 0.064248, -0.930274, 0.197736, 0.302264 +3368, 0.064248, -0.930274, 0.197736, 0.302264 +3369, 0.064248, -0.930274, 0.197736, 0.302264 +3370, 0.064248, -0.930274, 0.197736, 0.302264 +3371, 0.064248, -0.930274, 0.197736, 0.302264 +3372, 0.064248, -0.930274, 0.197736, 0.302264 +3373, 0.064248, -0.930274, 0.197736, 0.302264 +3374, 0.064248, -0.930274, 0.197736, 0.302264 +3375, 0.064248, -0.930274, 0.197736, 0.302264 +3376, 0.064248, -0.930274, 0.197736, 0.302264 +3377, 0.064248, -0.930274, 0.197736, 0.302264 +3378, 0.064248, -0.930274, 0.197736, 0.302264 +3379, 0.064248, -0.930274, 0.197736, 0.302264 +3380, 0.064248, -0.930274, 0.197736, 0.302264 +3381, 0.064248, -0.930274, 0.197736, 0.302264 +3382, 0.064248, -0.930274, 0.197736, 0.302264 +3383, 0.064248, -0.930274, 0.197736, 0.302264 +3384, 0.064248, -0.930274, 0.197736, 0.302264 +3385, 0.064248, -0.930274, 0.197736, 0.302264 +3386, 0.064248, -0.930274, 0.197736, 0.302264 +3387, 0.064248, -0.930274, 0.197736, 0.302264 +3388, 0.064248, -0.930274, 0.197736, 0.302264 +3389, 0.064248, -0.930274, 0.197736, 0.302264 +3390, 0.064248, -0.930274, 0.197736, 0.302264 +3391, 0.064248, -0.930274, 0.197736, 0.302264 +3392, 0.064248, -0.930274, 0.197736, 0.302264 +3393, 0.064248, -0.930274, 0.197736, 0.302264 +3394, 0.064248, -0.930274, 0.197736, 0.302264 +3395, 0.064248, -0.930274, 0.197736, 0.302264 +3396, 0.064248, -0.930274, 0.197736, 0.302264 +3397, 0.064248, -0.930274, 0.197736, 0.302264 +3398, 0.064248, -0.930274, 0.197736, 0.302264 +3399, 0.064248, -0.930274, 0.197736, 0.302264 +3400, 0.054193, -0.941204, 0.182951, 0.278797 +3401, 0.054193, -0.941204, 0.182951, 0.278797 +3402, 0.054193, -0.941204, 0.182951, 0.278797 +3403, 0.054193, -0.941204, 0.182951, 0.278797 +3404, 0.054193, -0.941204, 0.182951, 0.278797 +3405, 0.054193, -0.941204, 0.182951, 0.278797 +3406, 0.054193, -0.941204, 0.182951, 0.278797 +3407, 0.054193, -0.941204, 0.182951, 0.278797 +3408, 0.054193, -0.941204, 0.182951, 0.278797 +3409, 0.054193, -0.941204, 0.182951, 0.278797 +3410, 0.054193, -0.941204, 0.182951, 0.278797 +3411, 0.054193, -0.941204, 0.182951, 0.278797 +3412, 0.054193, -0.941204, 0.182951, 0.278797 +3413, 0.054193, -0.941204, 0.182951, 0.278797 +3414, 0.054193, -0.941204, 0.182951, 0.278797 +3415, 0.054193, -0.941204, 0.182951, 0.278797 +3416, 0.054193, -0.941204, 0.182951, 0.278797 +3417, 0.054193, -0.941204, 0.182951, 0.278797 +3418, 0.054193, -0.941204, 0.182951, 0.278797 +3419, 0.054193, -0.941204, 0.182951, 0.278797 +3420, 0.054193, -0.941204, 0.182951, 0.278797 +3421, 0.054193, -0.941204, 0.182951, 0.278797 +3422, 0.054193, -0.941204, 0.182951, 0.278797 +3423, 0.054193, -0.941204, 0.182951, 0.278797 +3424, 0.054193, -0.941204, 0.182951, 0.278797 +3425, 0.054193, -0.941204, 0.182951, 0.278797 +3426, 0.054193, -0.941204, 0.182951, 0.278797 +3427, 0.054193, -0.941204, 0.182951, 0.278797 +3428, 0.054193, -0.941204, 0.182951, 0.278797 +3429, 0.054193, -0.941204, 0.182951, 0.278797 +3430, 0.054193, -0.941204, 0.182951, 0.278797 +3431, 0.054193, -0.941204, 0.182951, 0.278797 +3432, 0.054193, -0.941204, 0.182951, 0.278797 +3433, 0.054193, -0.941204, 0.182951, 0.278797 +3434, 0.054193, -0.941204, 0.182951, 0.278797 +3435, 0.054193, -0.941204, 0.182951, 0.278797 +3436, 0.054193, -0.941204, 0.182951, 0.278797 +3437, 0.054193, -0.941204, 0.182951, 0.278797 +3438, 0.054193, -0.941204, 0.182951, 0.278797 +3439, 0.054193, -0.941204, 0.182951, 0.278797 +3440, 0.054193, -0.941204, 0.182951, 0.278797 +3441, 0.054193, -0.941204, 0.182951, 0.278797 +3442, 0.054193, -0.941204, 0.182951, 0.278797 +3443, 0.054193, -0.941204, 0.182951, 0.278797 +3444, 0.054193, -0.941204, 0.182951, 0.278797 +3445, 0.054193, -0.941204, 0.182951, 0.278797 +3446, 0.054193, -0.941204, 0.182951, 0.278797 +3447, 0.054193, -0.941204, 0.182951, 0.278797 +3448, 0.054193, -0.941204, 0.182951, 0.278797 +3449, 0.054193, -0.941204, 0.182951, 0.278797 +3450, 0.054193, -0.941204, 0.182951, 0.278797 +3451, 0.054193, -0.941204, 0.182951, 0.278797 +3452, 0.054193, -0.941204, 0.182951, 0.278797 +3453, 0.054193, -0.941204, 0.182951, 0.278797 +3454, 0.054193, -0.941204, 0.182951, 0.278797 +3455, 0.054193, -0.941204, 0.182951, 0.278797 +3456, 0.054193, -0.941204, 0.182951, 0.278797 +3457, 0.054193, -0.941204, 0.182951, 0.278797 +3458, 0.054193, -0.941204, 0.182951, 0.278797 +3459, 0.054193, -0.941204, 0.182951, 0.278797 +3460, 0.054193, -0.941204, 0.182951, 0.278797 +3461, 0.054193, -0.941204, 0.182951, 0.278797 +3462, 0.054193, -0.941204, 0.182951, 0.278797 +3463, 0.054193, -0.941204, 0.182951, 0.278797 +3464, 0.054193, -0.941204, 0.182951, 0.278797 +3465, 0.054193, -0.941204, 0.182951, 0.278797 +3466, 0.054193, -0.941204, 0.182951, 0.278797 +3467, 0.054193, -0.941204, 0.182951, 0.278797 +3468, 0.054193, -0.941204, 0.182951, 0.278797 +3469, 0.054193, -0.941204, 0.182951, 0.278797 +3470, 0.054193, -0.941204, 0.182951, 0.278797 +3471, 0.054193, -0.941204, 0.182951, 0.278797 +3472, 0.054193, -0.941204, 0.182951, 0.278797 +3473, 0.054193, -0.941204, 0.182951, 0.278797 +3474, 0.054193, -0.941204, 0.182951, 0.278797 +3475, 0.054193, -0.941204, 0.182951, 0.278797 +3476, 0.054193, -0.941204, 0.182951, 0.278797 +3477, 0.054193, -0.941204, 0.182951, 0.278797 +3478, 0.054193, -0.941204, 0.182951, 0.278797 +3479, 0.054193, -0.941204, 0.182951, 0.278797 +3480, 0.054193, -0.941204, 0.182951, 0.278797 +3481, 0.054193, -0.941204, 0.182951, 0.278797 +3482, 0.054193, -0.941204, 0.182951, 0.278797 +3483, 0.054193, -0.941204, 0.182951, 0.278797 +3484, 0.054193, -0.941204, 0.182951, 0.278797 +3485, 0.054193, -0.941204, 0.182951, 0.278797 +3486, 0.054193, -0.941204, 0.182951, 0.278797 +3487, 0.054193, -0.941204, 0.182951, 0.278797 +3488, 0.054193, -0.941204, 0.182951, 0.278797 +3489, 0.054193, -0.941204, 0.182951, 0.278797 +3490, 0.054193, -0.941204, 0.182951, 0.278797 +3491, 0.054193, -0.941204, 0.182951, 0.278797 +3492, 0.054193, -0.941204, 0.182951, 0.278797 +3493, 0.054193, -0.941204, 0.182951, 0.278797 +3494, 0.054193, -0.941204, 0.182951, 0.278797 +3495, 0.054193, -0.941204, 0.182951, 0.278797 +3496, 0.054193, -0.941204, 0.182951, 0.278797 +3497, 0.054193, -0.941204, 0.182951, 0.278797 +3498, 0.054193, -0.941204, 0.182951, 0.278797 +3499, 0.054193, -0.941204, 0.182951, 0.278797 +3500, 0.044943, -0.951251, 0.167731, 0.254887 +3501, 0.044943, -0.951251, 0.167731, 0.254887 +3502, 0.044943, -0.951251, 0.167731, 0.254887 +3503, 0.044943, -0.951251, 0.167731, 0.254887 +3504, 0.044943, -0.951251, 0.167731, 0.254887 +3505, 0.044943, -0.951251, 0.167731, 0.254887 +3506, 0.044943, -0.951251, 0.167731, 0.254887 +3507, 0.044943, -0.951251, 0.167731, 0.254887 +3508, 0.044943, -0.951251, 0.167731, 0.254887 +3509, 0.044943, -0.951251, 0.167731, 0.254887 +3510, 0.044943, -0.951251, 0.167731, 0.254887 +3511, 0.044943, -0.951251, 0.167731, 0.254887 +3512, 0.044943, -0.951251, 0.167731, 0.254887 +3513, 0.044943, -0.951251, 0.167731, 0.254887 +3514, 0.044943, -0.951251, 0.167731, 0.254887 +3515, 0.044943, -0.951251, 0.167731, 0.254887 +3516, 0.044943, -0.951251, 0.167731, 0.254887 +3517, 0.044943, -0.951251, 0.167731, 0.254887 +3518, 0.044943, -0.951251, 0.167731, 0.254887 +3519, 0.044943, -0.951251, 0.167731, 0.254887 +3520, 0.044943, -0.951251, 0.167731, 0.254887 +3521, 0.044943, -0.951251, 0.167731, 0.254887 +3522, 0.044943, -0.951251, 0.167731, 0.254887 +3523, 0.044943, -0.951251, 0.167731, 0.254887 +3524, 0.044943, -0.951251, 0.167731, 0.254887 +3525, 0.044943, -0.951251, 0.167731, 0.254887 +3526, 0.044943, -0.951251, 0.167731, 0.254887 +3527, 0.044943, -0.951251, 0.167731, 0.254887 +3528, 0.044943, -0.951251, 0.167731, 0.254887 +3529, 0.044943, -0.951251, 0.167731, 0.254887 +3530, 0.044943, -0.951251, 0.167731, 0.254887 +3531, 0.044943, -0.951251, 0.167731, 0.254887 +3532, 0.044943, -0.951251, 0.167731, 0.254887 +3533, 0.044943, -0.951251, 0.167731, 0.254887 +3534, 0.044943, -0.951251, 0.167731, 0.254887 +3535, 0.044943, -0.951251, 0.167731, 0.254887 +3536, 0.044943, -0.951251, 0.167731, 0.254887 +3537, 0.044943, -0.951251, 0.167731, 0.254887 +3538, 0.044943, -0.951251, 0.167731, 0.254887 +3539, 0.044943, -0.951251, 0.167731, 0.254887 +3540, 0.044943, -0.951251, 0.167731, 0.254887 +3541, 0.044943, -0.951251, 0.167731, 0.254887 +3542, 0.044943, -0.951251, 0.167731, 0.254887 +3543, 0.044943, -0.951251, 0.167731, 0.254887 +3544, 0.044943, -0.951251, 0.167731, 0.254887 +3545, 0.044943, -0.951251, 0.167731, 0.254887 +3546, 0.044943, -0.951251, 0.167731, 0.254887 +3547, 0.044943, -0.951251, 0.167731, 0.254887 +3548, 0.044943, -0.951251, 0.167731, 0.254887 +3549, 0.044943, -0.951251, 0.167731, 0.254887 +3550, 0.044943, -0.951251, 0.167731, 0.254887 +3551, 0.044943, -0.951251, 0.167731, 0.254887 +3552, 0.044943, -0.951251, 0.167731, 0.254887 +3553, 0.044943, -0.951251, 0.167731, 0.254887 +3554, 0.044943, -0.951251, 0.167731, 0.254887 +3555, 0.044943, -0.951251, 0.167731, 0.254887 +3556, 0.044943, -0.951251, 0.167731, 0.254887 +3557, 0.044943, -0.951251, 0.167731, 0.254887 +3558, 0.044943, -0.951251, 0.167731, 0.254887 +3559, 0.044943, -0.951251, 0.167731, 0.254887 +3560, 0.044943, -0.951251, 0.167731, 0.254887 +3561, 0.044943, -0.951251, 0.167731, 0.254887 +3562, 0.044943, -0.951251, 0.167731, 0.254887 +3563, 0.044943, -0.951251, 0.167731, 0.254887 +3564, 0.044943, -0.951251, 0.167731, 0.254887 +3565, 0.044943, -0.951251, 0.167731, 0.254887 +3566, 0.044943, -0.951251, 0.167731, 0.254887 +3567, 0.044943, -0.951251, 0.167731, 0.254887 +3568, 0.044943, -0.951251, 0.167731, 0.254887 +3569, 0.044943, -0.951251, 0.167731, 0.254887 +3570, 0.044943, -0.951251, 0.167731, 0.254887 +3571, 0.044943, -0.951251, 0.167731, 0.254887 +3572, 0.044943, -0.951251, 0.167731, 0.254887 +3573, 0.044943, -0.951251, 0.167731, 0.254887 +3574, 0.044943, -0.951251, 0.167731, 0.254887 +3575, 0.044943, -0.951251, 0.167731, 0.254887 +3576, 0.044943, -0.951251, 0.167731, 0.254887 +3577, 0.044943, -0.951251, 0.167731, 0.254887 +3578, 0.044943, -0.951251, 0.167731, 0.254887 +3579, 0.044943, -0.951251, 0.167731, 0.254887 +3580, 0.044943, -0.951251, 0.167731, 0.254887 +3581, 0.044943, -0.951251, 0.167731, 0.254887 +3582, 0.044943, -0.951251, 0.167731, 0.254887 +3583, 0.044943, -0.951251, 0.167731, 0.254887 +3584, 0.044943, -0.951251, 0.167731, 0.254887 +3585, 0.044943, -0.951251, 0.167731, 0.254887 +3586, 0.044943, -0.951251, 0.167731, 0.254887 +3587, 0.044943, -0.951251, 0.167731, 0.254887 +3588, 0.044943, -0.951251, 0.167731, 0.254887 +3589, 0.044943, -0.951251, 0.167731, 0.254887 +3590, 0.044943, -0.951251, 0.167731, 0.254887 +3591, 0.044943, -0.951251, 0.167731, 0.254887 +3592, 0.044943, -0.951251, 0.167731, 0.254887 +3593, 0.044943, -0.951251, 0.167731, 0.254887 +3594, 0.044943, -0.951251, 0.167731, 0.254887 +3595, 0.044943, -0.951251, 0.167731, 0.254887 +3596, 0.044943, -0.951251, 0.167731, 0.254887 +3597, 0.044943, -0.951251, 0.167731, 0.254887 +3598, 0.044943, -0.951251, 0.167731, 0.254887 +3599, 0.044943, -0.951251, 0.167731, 0.254887 +3600, 0.036519, -0.960398, 0.152112, 0.230571 +3601, 0.036519, -0.960398, 0.152112, 0.230571 +3602, 0.036519, -0.960398, 0.152112, 0.230571 +3603, 0.036519, -0.960398, 0.152112, 0.230571 +3604, 0.036519, -0.960398, 0.152112, 0.230571 +3605, 0.036519, -0.960398, 0.152112, 0.230571 +3606, 0.036519, -0.960398, 0.152112, 0.230571 +3607, 0.036519, -0.960398, 0.152112, 0.230571 +3608, 0.036519, -0.960398, 0.152112, 0.230571 +3609, 0.036519, -0.960398, 0.152112, 0.230571 +3610, 0.036519, -0.960398, 0.152112, 0.230571 +3611, 0.036519, -0.960398, 0.152112, 0.230571 +3612, 0.036519, -0.960398, 0.152112, 0.230571 +3613, 0.036519, -0.960398, 0.152112, 0.230571 +3614, 0.036519, -0.960398, 0.152112, 0.230571 +3615, 0.036519, -0.960398, 0.152112, 0.230571 +3616, 0.036519, -0.960398, 0.152112, 0.230571 +3617, 0.036519, -0.960398, 0.152112, 0.230571 +3618, 0.036519, -0.960398, 0.152112, 0.230571 +3619, 0.036519, -0.960398, 0.152112, 0.230571 +3620, 0.036519, -0.960398, 0.152112, 0.230571 +3621, 0.036519, -0.960398, 0.152112, 0.230571 +3622, 0.036519, -0.960398, 0.152112, 0.230571 +3623, 0.036519, -0.960398, 0.152112, 0.230571 +3624, 0.036519, -0.960398, 0.152112, 0.230571 +3625, 0.036519, -0.960398, 0.152112, 0.230571 +3626, 0.036519, -0.960398, 0.152112, 0.230571 +3627, 0.036519, -0.960398, 0.152112, 0.230571 +3628, 0.036519, -0.960398, 0.152112, 0.230571 +3629, 0.036519, -0.960398, 0.152112, 0.230571 +3630, 0.036519, -0.960398, 0.152112, 0.230571 +3631, 0.036519, -0.960398, 0.152112, 0.230571 +3632, 0.036519, -0.960398, 0.152112, 0.230571 +3633, 0.036519, -0.960398, 0.152112, 0.230571 +3634, 0.036519, -0.960398, 0.152112, 0.230571 +3635, 0.036519, -0.960398, 0.152112, 0.230571 +3636, 0.036519, -0.960398, 0.152112, 0.230571 +3637, 0.036519, -0.960398, 0.152112, 0.230571 +3638, 0.036519, -0.960398, 0.152112, 0.230571 +3639, 0.036519, -0.960398, 0.152112, 0.230571 +3640, 0.036519, -0.960398, 0.152112, 0.230571 +3641, 0.036519, -0.960398, 0.152112, 0.230571 +3642, 0.036519, -0.960398, 0.152112, 0.230571 +3643, 0.036519, -0.960398, 0.152112, 0.230571 +3644, 0.036519, -0.960398, 0.152112, 0.230571 +3645, 0.036519, -0.960398, 0.152112, 0.230571 +3646, 0.036519, -0.960398, 0.152112, 0.230571 +3647, 0.036519, -0.960398, 0.152112, 0.230571 +3648, 0.036519, -0.960398, 0.152112, 0.230571 +3649, 0.036519, -0.960398, 0.152112, 0.230571 +3650, 0.036519, -0.960398, 0.152112, 0.230571 +3651, 0.036519, -0.960398, 0.152112, 0.230571 +3652, 0.036519, -0.960398, 0.152112, 0.230571 +3653, 0.036519, -0.960398, 0.152112, 0.230571 +3654, 0.036519, -0.960398, 0.152112, 0.230571 +3655, 0.036519, -0.960398, 0.152112, 0.230571 +3656, 0.036519, -0.960398, 0.152112, 0.230571 +3657, 0.036519, -0.960398, 0.152112, 0.230571 +3658, 0.036519, -0.960398, 0.152112, 0.230571 +3659, 0.036519, -0.960398, 0.152112, 0.230571 +3660, 0.036519, -0.960398, 0.152112, 0.230571 +3661, 0.036519, -0.960398, 0.152112, 0.230571 +3662, 0.036519, -0.960398, 0.152112, 0.230571 +3663, 0.036519, -0.960398, 0.152112, 0.230571 +3664, 0.036519, -0.960398, 0.152112, 0.230571 +3665, 0.036519, -0.960398, 0.152112, 0.230571 +3666, 0.036519, -0.960398, 0.152112, 0.230571 +3667, 0.036519, -0.960398, 0.152112, 0.230571 +3668, 0.036519, -0.960398, 0.152112, 0.230571 +3669, 0.036519, -0.960398, 0.152112, 0.230571 +3670, 0.036519, -0.960398, 0.152112, 0.230571 +3671, 0.036519, -0.960398, 0.152112, 0.230571 +3672, 0.036519, -0.960398, 0.152112, 0.230571 +3673, 0.036519, -0.960398, 0.152112, 0.230571 +3674, 0.036519, -0.960398, 0.152112, 0.230571 +3675, 0.036519, -0.960398, 0.152112, 0.230571 +3676, 0.036519, -0.960398, 0.152112, 0.230571 +3677, 0.036519, -0.960398, 0.152112, 0.230571 +3678, 0.036519, -0.960398, 0.152112, 0.230571 +3679, 0.036519, -0.960398, 0.152112, 0.230571 +3680, 0.036519, -0.960398, 0.152112, 0.230571 +3681, 0.036519, -0.960398, 0.152112, 0.230571 +3682, 0.036519, -0.960398, 0.152112, 0.230571 +3683, 0.036519, -0.960398, 0.152112, 0.230571 +3684, 0.036519, -0.960398, 0.152112, 0.230571 +3685, 0.036519, -0.960398, 0.152112, 0.230571 +3686, 0.036519, -0.960398, 0.152112, 0.230571 +3687, 0.036519, -0.960398, 0.152112, 0.230571 +3688, 0.036519, -0.960398, 0.152112, 0.230571 +3689, 0.036519, -0.960398, 0.152112, 0.230571 +3690, 0.036519, -0.960398, 0.152112, 0.230571 +3691, 0.036519, -0.960398, 0.152112, 0.230571 +3692, 0.036519, -0.960398, 0.152112, 0.230571 +3693, 0.036519, -0.960398, 0.152112, 0.230571 +3694, 0.036519, -0.960398, 0.152112, 0.230571 +3695, 0.036519, -0.960398, 0.152112, 0.230571 +3696, 0.036519, -0.960398, 0.152112, 0.230571 +3697, 0.036519, -0.960398, 0.152112, 0.230571 +3698, 0.036519, -0.960398, 0.152112, 0.230571 +3699, 0.036519, -0.960398, 0.152112, 0.230571 +3700, 0.028936, -0.968628, 0.136132, 0.205888 +3701, 0.028936, -0.968628, 0.136132, 0.205888 +3702, 0.028936, -0.968628, 0.136132, 0.205888 +3703, 0.028936, -0.968628, 0.136132, 0.205888 +3704, 0.028936, -0.968628, 0.136132, 0.205888 +3705, 0.028936, -0.968628, 0.136132, 0.205888 +3706, 0.028936, -0.968628, 0.136132, 0.205888 +3707, 0.028936, -0.968628, 0.136132, 0.205888 +3708, 0.028936, -0.968628, 0.136132, 0.205888 +3709, 0.028936, -0.968628, 0.136132, 0.205888 +3710, 0.028936, -0.968628, 0.136132, 0.205888 +3711, 0.028936, -0.968628, 0.136132, 0.205888 +3712, 0.028936, -0.968628, 0.136132, 0.205888 +3713, 0.028936, -0.968628, 0.136132, 0.205888 +3714, 0.028936, -0.968628, 0.136132, 0.205888 +3715, 0.028936, -0.968628, 0.136132, 0.205888 +3716, 0.028936, -0.968628, 0.136132, 0.205888 +3717, 0.028936, -0.968628, 0.136132, 0.205888 +3718, 0.028936, -0.968628, 0.136132, 0.205888 +3719, 0.028936, -0.968628, 0.136132, 0.205888 +3720, 0.028936, -0.968628, 0.136132, 0.205888 +3721, 0.028936, -0.968628, 0.136132, 0.205888 +3722, 0.028936, -0.968628, 0.136132, 0.205888 +3723, 0.028936, -0.968628, 0.136132, 0.205888 +3724, 0.028936, -0.968628, 0.136132, 0.205888 +3725, 0.028936, -0.968628, 0.136132, 0.205888 +3726, 0.028936, -0.968628, 0.136132, 0.205888 +3727, 0.028936, -0.968628, 0.136132, 0.205888 +3728, 0.028936, -0.968628, 0.136132, 0.205888 +3729, 0.028936, -0.968628, 0.136132, 0.205888 +3730, 0.028936, -0.968628, 0.136132, 0.205888 +3731, 0.028936, -0.968628, 0.136132, 0.205888 +3732, 0.028936, -0.968628, 0.136132, 0.205888 +3733, 0.028936, -0.968628, 0.136132, 0.205888 +3734, 0.028936, -0.968628, 0.136132, 0.205888 +3735, 0.028936, -0.968628, 0.136132, 0.205888 +3736, 0.028936, -0.968628, 0.136132, 0.205888 +3737, 0.028936, -0.968628, 0.136132, 0.205888 +3738, 0.028936, -0.968628, 0.136132, 0.205888 +3739, 0.028936, -0.968628, 0.136132, 0.205888 +3740, 0.028936, -0.968628, 0.136132, 0.205888 +3741, 0.028936, -0.968628, 0.136132, 0.205888 +3742, 0.028936, -0.968628, 0.136132, 0.205888 +3743, 0.028936, -0.968628, 0.136132, 0.205888 +3744, 0.028936, -0.968628, 0.136132, 0.205888 +3745, 0.028936, -0.968628, 0.136132, 0.205888 +3746, 0.028936, -0.968628, 0.136132, 0.205888 +3747, 0.028936, -0.968628, 0.136132, 0.205888 +3748, 0.028936, -0.968628, 0.136132, 0.205888 +3749, 0.028936, -0.968628, 0.136132, 0.205888 +3750, 0.028936, -0.968628, 0.136132, 0.205888 +3751, 0.028936, -0.968628, 0.136132, 0.205888 +3752, 0.028936, -0.968628, 0.136132, 0.205888 +3753, 0.028936, -0.968628, 0.136132, 0.205888 +3754, 0.028936, -0.968628, 0.136132, 0.205888 +3755, 0.028936, -0.968628, 0.136132, 0.205888 +3756, 0.028936, -0.968628, 0.136132, 0.205888 +3757, 0.028936, -0.968628, 0.136132, 0.205888 +3758, 0.028936, -0.968628, 0.136132, 0.205888 +3759, 0.028936, -0.968628, 0.136132, 0.205888 +3760, 0.028936, -0.968628, 0.136132, 0.205888 +3761, 0.028936, -0.968628, 0.136132, 0.205888 +3762, 0.028936, -0.968628, 0.136132, 0.205888 +3763, 0.028936, -0.968628, 0.136132, 0.205888 +3764, 0.028936, -0.968628, 0.136132, 0.205888 +3765, 0.028936, -0.968628, 0.136132, 0.205888 +3766, 0.028936, -0.968628, 0.136132, 0.205888 +3767, 0.028936, -0.968628, 0.136132, 0.205888 +3768, 0.028936, -0.968628, 0.136132, 0.205888 +3769, 0.028936, -0.968628, 0.136132, 0.205888 +3770, 0.028936, -0.968628, 0.136132, 0.205888 +3771, 0.028936, -0.968628, 0.136132, 0.205888 +3772, 0.028936, -0.968628, 0.136132, 0.205888 +3773, 0.028936, -0.968628, 0.136132, 0.205888 +3774, 0.028936, -0.968628, 0.136132, 0.205888 +3775, 0.028936, -0.968628, 0.136132, 0.205888 +3776, 0.028936, -0.968628, 0.136132, 0.205888 +3777, 0.028936, -0.968628, 0.136132, 0.205888 +3778, 0.028936, -0.968628, 0.136132, 0.205888 +3779, 0.028936, -0.968628, 0.136132, 0.205888 +3780, 0.028936, -0.968628, 0.136132, 0.205888 +3781, 0.028936, -0.968628, 0.136132, 0.205888 +3782, 0.028936, -0.968628, 0.136132, 0.205888 +3783, 0.028936, -0.968628, 0.136132, 0.205888 +3784, 0.028936, -0.968628, 0.136132, 0.205888 +3785, 0.028936, -0.968628, 0.136132, 0.205888 +3786, 0.028936, -0.968628, 0.136132, 0.205888 +3787, 0.028936, -0.968628, 0.136132, 0.205888 +3788, 0.028936, -0.968628, 0.136132, 0.205888 +3789, 0.028936, -0.968628, 0.136132, 0.205888 +3790, 0.028936, -0.968628, 0.136132, 0.205888 +3791, 0.028936, -0.968628, 0.136132, 0.205888 +3792, 0.028936, -0.968628, 0.136132, 0.205888 +3793, 0.028936, -0.968628, 0.136132, 0.205888 +3794, 0.028936, -0.968628, 0.136132, 0.205888 +3795, 0.028936, -0.968628, 0.136132, 0.205888 +3796, 0.028936, -0.968628, 0.136132, 0.205888 +3797, 0.028936, -0.968628, 0.136132, 0.205888 +3798, 0.028936, -0.968628, 0.136132, 0.205888 +3799, 0.028936, -0.968628, 0.136132, 0.205888 +3800, 0.022209, -0.975926, 0.119829, 0.180877 +3801, 0.022209, -0.975926, 0.119829, 0.180877 +3802, 0.022209, -0.975926, 0.119829, 0.180877 +3803, 0.022209, -0.975926, 0.119829, 0.180877 +3804, 0.022209, -0.975926, 0.119829, 0.180877 +3805, 0.022209, -0.975926, 0.119829, 0.180877 +3806, 0.022209, -0.975926, 0.119829, 0.180877 +3807, 0.022209, -0.975926, 0.119829, 0.180877 +3808, 0.022209, -0.975926, 0.119829, 0.180877 +3809, 0.022209, -0.975926, 0.119829, 0.180877 +3810, 0.022209, -0.975926, 0.119829, 0.180877 +3811, 0.022209, -0.975926, 0.119829, 0.180877 +3812, 0.022209, -0.975926, 0.119829, 0.180877 +3813, 0.022209, -0.975926, 0.119829, 0.180877 +3814, 0.022209, -0.975926, 0.119829, 0.180877 +3815, 0.022209, -0.975926, 0.119829, 0.180877 +3816, 0.022209, -0.975926, 0.119829, 0.180877 +3817, 0.022209, -0.975926, 0.119829, 0.180877 +3818, 0.022209, -0.975926, 0.119829, 0.180877 +3819, 0.022209, -0.975926, 0.119829, 0.180877 +3820, 0.022209, -0.975926, 0.119829, 0.180877 +3821, 0.022209, -0.975926, 0.119829, 0.180877 +3822, 0.022209, -0.975926, 0.119829, 0.180877 +3823, 0.022209, -0.975926, 0.119829, 0.180877 +3824, 0.022209, -0.975926, 0.119829, 0.180877 +3825, 0.022209, -0.975926, 0.119829, 0.180877 +3826, 0.022209, -0.975926, 0.119829, 0.180877 +3827, 0.022209, -0.975926, 0.119829, 0.180877 +3828, 0.022209, -0.975926, 0.119829, 0.180877 +3829, 0.022209, -0.975926, 0.119829, 0.180877 +3830, 0.022209, -0.975926, 0.119829, 0.180877 +3831, 0.022209, -0.975926, 0.119829, 0.180877 +3832, 0.022209, -0.975926, 0.119829, 0.180877 +3833, 0.022209, -0.975926, 0.119829, 0.180877 +3834, 0.022209, -0.975926, 0.119829, 0.180877 +3835, 0.022209, -0.975926, 0.119829, 0.180877 +3836, 0.022209, -0.975926, 0.119829, 0.180877 +3837, 0.022209, -0.975926, 0.119829, 0.180877 +3838, 0.022209, -0.975926, 0.119829, 0.180877 +3839, 0.022209, -0.975926, 0.119829, 0.180877 +3840, 0.022209, -0.975926, 0.119829, 0.180877 +3841, 0.022209, -0.975926, 0.119829, 0.180877 +3842, 0.022209, -0.975926, 0.119829, 0.180877 +3843, 0.022209, -0.975926, 0.119829, 0.180877 +3844, 0.022209, -0.975926, 0.119829, 0.180877 +3845, 0.022209, -0.975926, 0.119829, 0.180877 +3846, 0.022209, -0.975926, 0.119829, 0.180877 +3847, 0.022209, -0.975926, 0.119829, 0.180877 +3848, 0.022209, -0.975926, 0.119829, 0.180877 +3849, 0.022209, -0.975926, 0.119829, 0.180877 +3850, 0.022209, -0.975926, 0.119829, 0.180877 +3851, 0.022209, -0.975926, 0.119829, 0.180877 +3852, 0.022209, -0.975926, 0.119829, 0.180877 +3853, 0.022209, -0.975926, 0.119829, 0.180877 +3854, 0.022209, -0.975926, 0.119829, 0.180877 +3855, 0.022209, -0.975926, 0.119829, 0.180877 +3856, 0.022209, -0.975926, 0.119829, 0.180877 +3857, 0.022209, -0.975926, 0.119829, 0.180877 +3858, 0.022209, -0.975926, 0.119829, 0.180877 +3859, 0.022209, -0.975926, 0.119829, 0.180877 +3860, 0.022209, -0.975926, 0.119829, 0.180877 +3861, 0.022209, -0.975926, 0.119829, 0.180877 +3862, 0.022209, -0.975926, 0.119829, 0.180877 +3863, 0.022209, -0.975926, 0.119829, 0.180877 +3864, 0.022209, -0.975926, 0.119829, 0.180877 +3865, 0.022209, -0.975926, 0.119829, 0.180877 +3866, 0.022209, -0.975926, 0.119829, 0.180877 +3867, 0.022209, -0.975926, 0.119829, 0.180877 +3868, 0.022209, -0.975926, 0.119829, 0.180877 +3869, 0.022209, -0.975926, 0.119829, 0.180877 +3870, 0.022209, -0.975926, 0.119829, 0.180877 +3871, 0.022209, -0.975926, 0.119829, 0.180877 +3872, 0.022209, -0.975926, 0.119829, 0.180877 +3873, 0.022209, -0.975926, 0.119829, 0.180877 +3874, 0.022209, -0.975926, 0.119829, 0.180877 +3875, 0.022209, -0.975926, 0.119829, 0.180877 +3876, 0.022209, -0.975926, 0.119829, 0.180877 +3877, 0.022209, -0.975926, 0.119829, 0.180877 +3878, 0.022209, -0.975926, 0.119829, 0.180877 +3879, 0.022209, -0.975926, 0.119829, 0.180877 +3880, 0.022209, -0.975926, 0.119829, 0.180877 +3881, 0.022209, -0.975926, 0.119829, 0.180877 +3882, 0.022209, -0.975926, 0.119829, 0.180877 +3883, 0.022209, -0.975926, 0.119829, 0.180877 +3884, 0.022209, -0.975926, 0.119829, 0.180877 +3885, 0.022209, -0.975926, 0.119829, 0.180877 +3886, 0.022209, -0.975926, 0.119829, 0.180877 +3887, 0.022209, -0.975926, 0.119829, 0.180877 +3888, 0.022209, -0.975926, 0.119829, 0.180877 +3889, 0.022209, -0.975926, 0.119829, 0.180877 +3890, 0.022209, -0.975926, 0.119829, 0.180877 +3891, 0.022209, -0.975926, 0.119829, 0.180877 +3892, 0.022209, -0.975926, 0.119829, 0.180877 +3893, 0.022209, -0.975926, 0.119829, 0.180877 +3894, 0.022209, -0.975926, 0.119829, 0.180877 +3895, 0.022209, -0.975926, 0.119829, 0.180877 +3896, 0.022209, -0.975926, 0.119829, 0.180877 +3897, 0.022209, -0.975926, 0.119829, 0.180877 +3898, 0.022209, -0.975926, 0.119829, 0.180877 +3899, 0.022209, -0.975926, 0.119829, 0.180877 +3900, 0.016352, -0.982278, 0.103242, 0.155578 +3901, 0.016352, -0.982278, 0.103242, 0.155578 +3902, 0.016352, -0.982278, 0.103242, 0.155578 +3903, 0.016352, -0.982278, 0.103242, 0.155578 +3904, 0.016352, -0.982278, 0.103242, 0.155578 +3905, 0.016352, -0.982278, 0.103242, 0.155578 +3906, 0.016352, -0.982278, 0.103242, 0.155578 +3907, 0.016352, -0.982278, 0.103242, 0.155578 +3908, 0.016352, -0.982278, 0.103242, 0.155578 +3909, 0.016352, -0.982278, 0.103242, 0.155578 +3910, 0.016352, -0.982278, 0.103242, 0.155578 +3911, 0.016352, -0.982278, 0.103242, 0.155578 +3912, 0.016352, -0.982278, 0.103242, 0.155578 +3913, 0.016352, -0.982278, 0.103242, 0.155578 +3914, 0.016352, -0.982278, 0.103242, 0.155578 +3915, 0.016352, -0.982278, 0.103242, 0.155578 +3916, 0.016352, -0.982278, 0.103242, 0.155578 +3917, 0.016352, -0.982278, 0.103242, 0.155578 +3918, 0.016352, -0.982278, 0.103242, 0.155578 +3919, 0.016352, -0.982278, 0.103242, 0.155578 +3920, 0.016352, -0.982278, 0.103242, 0.155578 +3921, 0.016352, -0.982278, 0.103242, 0.155578 +3922, 0.016352, -0.982278, 0.103242, 0.155578 +3923, 0.016352, -0.982278, 0.103242, 0.155578 +3924, 0.016352, -0.982278, 0.103242, 0.155578 +3925, 0.016352, -0.982278, 0.103242, 0.155578 +3926, 0.016352, -0.982278, 0.103242, 0.155578 +3927, 0.016352, -0.982278, 0.103242, 0.155578 +3928, 0.016352, -0.982278, 0.103242, 0.155578 +3929, 0.016352, -0.982278, 0.103242, 0.155578 +3930, 0.016352, -0.982278, 0.103242, 0.155578 +3931, 0.016352, -0.982278, 0.103242, 0.155578 +3932, 0.016352, -0.982278, 0.103242, 0.155578 +3933, 0.016352, -0.982278, 0.103242, 0.155578 +3934, 0.016352, -0.982278, 0.103242, 0.155578 +3935, 0.016352, -0.982278, 0.103242, 0.155578 +3936, 0.016352, -0.982278, 0.103242, 0.155578 +3937, 0.016352, -0.982278, 0.103242, 0.155578 +3938, 0.016352, -0.982278, 0.103242, 0.155578 +3939, 0.016352, -0.982278, 0.103242, 0.155578 +3940, 0.016352, -0.982278, 0.103242, 0.155578 +3941, 0.016352, -0.982278, 0.103242, 0.155578 +3942, 0.016352, -0.982278, 0.103242, 0.155578 +3943, 0.016352, -0.982278, 0.103242, 0.155578 +3944, 0.016352, -0.982278, 0.103242, 0.155578 +3945, 0.016352, -0.982278, 0.103242, 0.155578 +3946, 0.016352, -0.982278, 0.103242, 0.155578 +3947, 0.016352, -0.982278, 0.103242, 0.155578 +3948, 0.016352, -0.982278, 0.103242, 0.155578 +3949, 0.016352, -0.982278, 0.103242, 0.155578 +3950, 0.016352, -0.982278, 0.103242, 0.155578 +3951, 0.016352, -0.982278, 0.103242, 0.155578 +3952, 0.016352, -0.982278, 0.103242, 0.155578 +3953, 0.016352, -0.982278, 0.103242, 0.155578 +3954, 0.016352, -0.982278, 0.103242, 0.155578 +3955, 0.016352, -0.982278, 0.103242, 0.155578 +3956, 0.016352, -0.982278, 0.103242, 0.155578 +3957, 0.016352, -0.982278, 0.103242, 0.155578 +3958, 0.016352, -0.982278, 0.103242, 0.155578 +3959, 0.016352, -0.982278, 0.103242, 0.155578 +3960, 0.016352, -0.982278, 0.103242, 0.155578 +3961, 0.016352, -0.982278, 0.103242, 0.155578 +3962, 0.016352, -0.982278, 0.103242, 0.155578 +3963, 0.016352, -0.982278, 0.103242, 0.155578 +3964, 0.016352, -0.982278, 0.103242, 0.155578 +3965, 0.016352, -0.982278, 0.103242, 0.155578 +3966, 0.016352, -0.982278, 0.103242, 0.155578 +3967, 0.016352, -0.982278, 0.103242, 0.155578 +3968, 0.016352, -0.982278, 0.103242, 0.155578 +3969, 0.016352, -0.982278, 0.103242, 0.155578 +3970, 0.016352, -0.982278, 0.103242, 0.155578 +3971, 0.016352, -0.982278, 0.103242, 0.155578 +3972, 0.016352, -0.982278, 0.103242, 0.155578 +3973, 0.016352, -0.982278, 0.103242, 0.155578 +3974, 0.016352, -0.982278, 0.103242, 0.155578 +3975, 0.016352, -0.982278, 0.103242, 0.155578 +3976, 0.016352, -0.982278, 0.103242, 0.155578 +3977, 0.016352, -0.982278, 0.103242, 0.155578 +3978, 0.016352, -0.982278, 0.103242, 0.155578 +3979, 0.016352, -0.982278, 0.103242, 0.155578 +3980, 0.016352, -0.982278, 0.103242, 0.155578 +3981, 0.016352, -0.982278, 0.103242, 0.155578 +3982, 0.016352, -0.982278, 0.103242, 0.155578 +3983, 0.016352, -0.982278, 0.103242, 0.155578 +3984, 0.016352, -0.982278, 0.103242, 0.155578 +3985, 0.016352, -0.982278, 0.103242, 0.155578 +3986, 0.016352, -0.982278, 0.103242, 0.155578 +3987, 0.016352, -0.982278, 0.103242, 0.155578 +3988, 0.016352, -0.982278, 0.103242, 0.155578 +3989, 0.016352, -0.982278, 0.103242, 0.155578 +3990, 0.016352, -0.982278, 0.103242, 0.155578 +3991, 0.016352, -0.982278, 0.103242, 0.155578 +3992, 0.016352, -0.982278, 0.103242, 0.155578 +3993, 0.016352, -0.982278, 0.103242, 0.155578 +3994, 0.016352, -0.982278, 0.103242, 0.155578 +3995, 0.016352, -0.982278, 0.103242, 0.155578 +3996, 0.016352, -0.982278, 0.103242, 0.155578 +3997, 0.016352, -0.982278, 0.103242, 0.155578 +3998, 0.016352, -0.982278, 0.103242, 0.155578 +3999, 0.016352, -0.982278, 0.103242, 0.155578 +4000, 0.011376, -0.987672, 0.086410, 0.130030 +4001, 0.011376, -0.987672, 0.086410, 0.130030 +4002, 0.011376, -0.987672, 0.086410, 0.130030 +4003, 0.011376, -0.987672, 0.086410, 0.130030 +4004, 0.011376, -0.987672, 0.086410, 0.130030 +4005, 0.011376, -0.987672, 0.086410, 0.130030 +4006, 0.011376, -0.987672, 0.086410, 0.130030 +4007, 0.011376, -0.987672, 0.086410, 0.130030 +4008, 0.011376, -0.987672, 0.086410, 0.130030 +4009, 0.011376, -0.987672, 0.086410, 0.130030 +4010, 0.011376, -0.987672, 0.086410, 0.130030 +4011, 0.011376, -0.987672, 0.086410, 0.130030 +4012, 0.011376, -0.987672, 0.086410, 0.130030 +4013, 0.011376, -0.987672, 0.086410, 0.130030 +4014, 0.011376, -0.987672, 0.086410, 0.130030 +4015, 0.011376, -0.987672, 0.086410, 0.130030 +4016, 0.011376, -0.987672, 0.086410, 0.130030 +4017, 0.011376, -0.987672, 0.086410, 0.130030 +4018, 0.011376, -0.987672, 0.086410, 0.130030 +4019, 0.011376, -0.987672, 0.086410, 0.130030 +4020, 0.011376, -0.987672, 0.086410, 0.130030 +4021, 0.011376, -0.987672, 0.086410, 0.130030 +4022, 0.011376, -0.987672, 0.086410, 0.130030 +4023, 0.011376, -0.987672, 0.086410, 0.130030 +4024, 0.011376, -0.987672, 0.086410, 0.130030 +4025, 0.011376, -0.987672, 0.086410, 0.130030 +4026, 0.011376, -0.987672, 0.086410, 0.130030 +4027, 0.011376, -0.987672, 0.086410, 0.130030 +4028, 0.011376, -0.987672, 0.086410, 0.130030 +4029, 0.011376, -0.987672, 0.086410, 0.130030 +4030, 0.011376, -0.987672, 0.086410, 0.130030 +4031, 0.011376, -0.987672, 0.086410, 0.130030 +4032, 0.011376, -0.987672, 0.086410, 0.130030 +4033, 0.011376, -0.987672, 0.086410, 0.130030 +4034, 0.011376, -0.987672, 0.086410, 0.130030 +4035, 0.011376, -0.987672, 0.086410, 0.130030 +4036, 0.011376, -0.987672, 0.086410, 0.130030 +4037, 0.011376, -0.987672, 0.086410, 0.130030 +4038, 0.011376, -0.987672, 0.086410, 0.130030 +4039, 0.011376, -0.987672, 0.086410, 0.130030 +4040, 0.011376, -0.987672, 0.086410, 0.130030 +4041, 0.011376, -0.987672, 0.086410, 0.130030 +4042, 0.011376, -0.987672, 0.086410, 0.130030 +4043, 0.011376, -0.987672, 0.086410, 0.130030 +4044, 0.011376, -0.987672, 0.086410, 0.130030 +4045, 0.011376, -0.987672, 0.086410, 0.130030 +4046, 0.011376, -0.987672, 0.086410, 0.130030 +4047, 0.011376, -0.987672, 0.086410, 0.130030 +4048, 0.011376, -0.987672, 0.086410, 0.130030 +4049, 0.011376, -0.987672, 0.086410, 0.130030 +4050, 0.011376, -0.987672, 0.086410, 0.130030 +4051, 0.011376, -0.987672, 0.086410, 0.130030 +4052, 0.011376, -0.987672, 0.086410, 0.130030 +4053, 0.011376, -0.987672, 0.086410, 0.130030 +4054, 0.011376, -0.987672, 0.086410, 0.130030 +4055, 0.011376, -0.987672, 0.086410, 0.130030 +4056, 0.011376, -0.987672, 0.086410, 0.130030 +4057, 0.011376, -0.987672, 0.086410, 0.130030 +4058, 0.011376, -0.987672, 0.086410, 0.130030 +4059, 0.011376, -0.987672, 0.086410, 0.130030 +4060, 0.011376, -0.987672, 0.086410, 0.130030 +4061, 0.011376, -0.987672, 0.086410, 0.130030 +4062, 0.011376, -0.987672, 0.086410, 0.130030 +4063, 0.011376, -0.987672, 0.086410, 0.130030 +4064, 0.011376, -0.987672, 0.086410, 0.130030 +4065, 0.011376, -0.987672, 0.086410, 0.130030 +4066, 0.011376, -0.987672, 0.086410, 0.130030 +4067, 0.011376, -0.987672, 0.086410, 0.130030 +4068, 0.011376, -0.987672, 0.086410, 0.130030 +4069, 0.011376, -0.987672, 0.086410, 0.130030 +4070, 0.011376, -0.987672, 0.086410, 0.130030 +4071, 0.011376, -0.987672, 0.086410, 0.130030 +4072, 0.011376, -0.987672, 0.086410, 0.130030 +4073, 0.011376, -0.987672, 0.086410, 0.130030 +4074, 0.011376, -0.987672, 0.086410, 0.130030 +4075, 0.011376, -0.987672, 0.086410, 0.130030 +4076, 0.011376, -0.987672, 0.086410, 0.130030 +4077, 0.011376, -0.987672, 0.086410, 0.130030 +4078, 0.011376, -0.987672, 0.086410, 0.130030 +4079, 0.011376, -0.987672, 0.086410, 0.130030 +4080, 0.011376, -0.987672, 0.086410, 0.130030 +4081, 0.011376, -0.987672, 0.086410, 0.130030 +4082, 0.011376, -0.987672, 0.086410, 0.130030 +4083, 0.011376, -0.987672, 0.086410, 0.130030 +4084, 0.011376, -0.987672, 0.086410, 0.130030 +4085, 0.011376, -0.987672, 0.086410, 0.130030 +4086, 0.011376, -0.987672, 0.086410, 0.130030 +4087, 0.011376, -0.987672, 0.086410, 0.130030 +4088, 0.011376, -0.987672, 0.086410, 0.130030 +4089, 0.011376, -0.987672, 0.086410, 0.130030 +4090, 0.011376, -0.987672, 0.086410, 0.130030 +4091, 0.011376, -0.987672, 0.086410, 0.130030 +4092, 0.011376, -0.987672, 0.086410, 0.130030 +4093, 0.011376, -0.987672, 0.086410, 0.130030 +4094, 0.011376, -0.987672, 0.086410, 0.130030 +4095, 0.011376, -0.987672, 0.086410, 0.130030 +4096, 0.011376, -0.987672, 0.086410, 0.130030 +4097, 0.011376, -0.987672, 0.086410, 0.130030 +4098, 0.011376, -0.987672, 0.086410, 0.130030 +4099, 0.011376, -0.987672, 0.086410, 0.130030 +4100, 0.007292, -0.992099, 0.069374, 0.104274 +4101, 0.007292, -0.992099, 0.069374, 0.104274 +4102, 0.007292, -0.992099, 0.069374, 0.104274 +4103, 0.007292, -0.992099, 0.069374, 0.104274 +4104, 0.007292, -0.992099, 0.069374, 0.104274 +4105, 0.007292, -0.992099, 0.069374, 0.104274 +4106, 0.007292, -0.992099, 0.069374, 0.104274 +4107, 0.007292, -0.992099, 0.069374, 0.104274 +4108, 0.007292, -0.992099, 0.069374, 0.104274 +4109, 0.007292, -0.992099, 0.069374, 0.104274 +4110, 0.007292, -0.992099, 0.069374, 0.104274 +4111, 0.007292, -0.992099, 0.069374, 0.104274 +4112, 0.007292, -0.992099, 0.069374, 0.104274 +4113, 0.007292, -0.992099, 0.069374, 0.104274 +4114, 0.007292, -0.992099, 0.069374, 0.104274 +4115, 0.007292, -0.992099, 0.069374, 0.104274 +4116, 0.007292, -0.992099, 0.069374, 0.104274 +4117, 0.007292, -0.992099, 0.069374, 0.104274 +4118, 0.007292, -0.992099, 0.069374, 0.104274 +4119, 0.007292, -0.992099, 0.069374, 0.104274 +4120, 0.007292, -0.992099, 0.069374, 0.104274 +4121, 0.007292, -0.992099, 0.069374, 0.104274 +4122, 0.007292, -0.992099, 0.069374, 0.104274 +4123, 0.007292, -0.992099, 0.069374, 0.104274 +4124, 0.007292, -0.992099, 0.069374, 0.104274 +4125, 0.007292, -0.992099, 0.069374, 0.104274 +4126, 0.007292, -0.992099, 0.069374, 0.104274 +4127, 0.007292, -0.992099, 0.069374, 0.104274 +4128, 0.007292, -0.992099, 0.069374, 0.104274 +4129, 0.007292, -0.992099, 0.069374, 0.104274 +4130, 0.007292, -0.992099, 0.069374, 0.104274 +4131, 0.007292, -0.992099, 0.069374, 0.104274 +4132, 0.007292, -0.992099, 0.069374, 0.104274 +4133, 0.007292, -0.992099, 0.069374, 0.104274 +4134, 0.007292, -0.992099, 0.069374, 0.104274 +4135, 0.007292, -0.992099, 0.069374, 0.104274 +4136, 0.007292, -0.992099, 0.069374, 0.104274 +4137, 0.007292, -0.992099, 0.069374, 0.104274 +4138, 0.007292, -0.992099, 0.069374, 0.104274 +4139, 0.007292, -0.992099, 0.069374, 0.104274 +4140, 0.007292, -0.992099, 0.069374, 0.104274 +4141, 0.007292, -0.992099, 0.069374, 0.104274 +4142, 0.007292, -0.992099, 0.069374, 0.104274 +4143, 0.007292, -0.992099, 0.069374, 0.104274 +4144, 0.007292, -0.992099, 0.069374, 0.104274 +4145, 0.007292, -0.992099, 0.069374, 0.104274 +4146, 0.007292, -0.992099, 0.069374, 0.104274 +4147, 0.007292, -0.992099, 0.069374, 0.104274 +4148, 0.007292, -0.992099, 0.069374, 0.104274 +4149, 0.007292, -0.992099, 0.069374, 0.104274 +4150, 0.007292, -0.992099, 0.069374, 0.104274 +4151, 0.007292, -0.992099, 0.069374, 0.104274 +4152, 0.007292, -0.992099, 0.069374, 0.104274 +4153, 0.007292, -0.992099, 0.069374, 0.104274 +4154, 0.007292, -0.992099, 0.069374, 0.104274 +4155, 0.007292, -0.992099, 0.069374, 0.104274 +4156, 0.007292, -0.992099, 0.069374, 0.104274 +4157, 0.007292, -0.992099, 0.069374, 0.104274 +4158, 0.007292, -0.992099, 0.069374, 0.104274 +4159, 0.007292, -0.992099, 0.069374, 0.104274 +4160, 0.007292, -0.992099, 0.069374, 0.104274 +4161, 0.007292, -0.992099, 0.069374, 0.104274 +4162, 0.007292, -0.992099, 0.069374, 0.104274 +4163, 0.007292, -0.992099, 0.069374, 0.104274 +4164, 0.007292, -0.992099, 0.069374, 0.104274 +4165, 0.007292, -0.992099, 0.069374, 0.104274 +4166, 0.007292, -0.992099, 0.069374, 0.104274 +4167, 0.007292, -0.992099, 0.069374, 0.104274 +4168, 0.007292, -0.992099, 0.069374, 0.104274 +4169, 0.007292, -0.992099, 0.069374, 0.104274 +4170, 0.007292, -0.992099, 0.069374, 0.104274 +4171, 0.007292, -0.992099, 0.069374, 0.104274 +4172, 0.007292, -0.992099, 0.069374, 0.104274 +4173, 0.007292, -0.992099, 0.069374, 0.104274 +4174, 0.007292, -0.992099, 0.069374, 0.104274 +4175, 0.007292, -0.992099, 0.069374, 0.104274 +4176, 0.007292, -0.992099, 0.069374, 0.104274 +4177, 0.007292, -0.992099, 0.069374, 0.104274 +4178, 0.007292, -0.992099, 0.069374, 0.104274 +4179, 0.007292, -0.992099, 0.069374, 0.104274 +4180, 0.007292, -0.992099, 0.069374, 0.104274 +4181, 0.007292, -0.992099, 0.069374, 0.104274 +4182, 0.007292, -0.992099, 0.069374, 0.104274 +4183, 0.007292, -0.992099, 0.069374, 0.104274 +4184, 0.007292, -0.992099, 0.069374, 0.104274 +4185, 0.007292, -0.992099, 0.069374, 0.104274 +4186, 0.007292, -0.992099, 0.069374, 0.104274 +4187, 0.007292, -0.992099, 0.069374, 0.104274 +4188, 0.007292, -0.992099, 0.069374, 0.104274 +4189, 0.007292, -0.992099, 0.069374, 0.104274 +4190, 0.007292, -0.992099, 0.069374, 0.104274 +4191, 0.007292, -0.992099, 0.069374, 0.104274 +4192, 0.007292, -0.992099, 0.069374, 0.104274 +4193, 0.007292, -0.992099, 0.069374, 0.104274 +4194, 0.007292, -0.992099, 0.069374, 0.104274 +4195, 0.007292, -0.992099, 0.069374, 0.104274 +4196, 0.007292, -0.992099, 0.069374, 0.104274 +4197, 0.007292, -0.992099, 0.069374, 0.104274 +4198, 0.007292, -0.992099, 0.069374, 0.104274 +4199, 0.007292, -0.992099, 0.069374, 0.104274 +4200, 0.004106, -0.995551, 0.052175, 0.078352 +4201, 0.004106, -0.995551, 0.052175, 0.078352 +4202, 0.004106, -0.995551, 0.052175, 0.078352 +4203, 0.004106, -0.995551, 0.052175, 0.078352 +4204, 0.004106, -0.995551, 0.052175, 0.078352 +4205, 0.004106, -0.995551, 0.052175, 0.078352 +4206, 0.004106, -0.995551, 0.052175, 0.078352 +4207, 0.004106, -0.995551, 0.052175, 0.078352 +4208, 0.004106, -0.995551, 0.052175, 0.078352 +4209, 0.004106, -0.995551, 0.052175, 0.078352 +4210, 0.004106, -0.995551, 0.052175, 0.078352 +4211, 0.004106, -0.995551, 0.052175, 0.078352 +4212, 0.004106, -0.995551, 0.052175, 0.078352 +4213, 0.004106, -0.995551, 0.052175, 0.078352 +4214, 0.004106, -0.995551, 0.052175, 0.078352 +4215, 0.004106, -0.995551, 0.052175, 0.078352 +4216, 0.004106, -0.995551, 0.052175, 0.078352 +4217, 0.004106, -0.995551, 0.052175, 0.078352 +4218, 0.004106, -0.995551, 0.052175, 0.078352 +4219, 0.004106, -0.995551, 0.052175, 0.078352 +4220, 0.004106, -0.995551, 0.052175, 0.078352 +4221, 0.004106, -0.995551, 0.052175, 0.078352 +4222, 0.004106, -0.995551, 0.052175, 0.078352 +4223, 0.004106, -0.995551, 0.052175, 0.078352 +4224, 0.004106, -0.995551, 0.052175, 0.078352 +4225, 0.004106, -0.995551, 0.052175, 0.078352 +4226, 0.004106, -0.995551, 0.052175, 0.078352 +4227, 0.004106, -0.995551, 0.052175, 0.078352 +4228, 0.004106, -0.995551, 0.052175, 0.078352 +4229, 0.004106, -0.995551, 0.052175, 0.078352 +4230, 0.004106, -0.995551, 0.052175, 0.078352 +4231, 0.004106, -0.995551, 0.052175, 0.078352 +4232, 0.004106, -0.995551, 0.052175, 0.078352 +4233, 0.004106, -0.995551, 0.052175, 0.078352 +4234, 0.004106, -0.995551, 0.052175, 0.078352 +4235, 0.004106, -0.995551, 0.052175, 0.078352 +4236, 0.004106, -0.995551, 0.052175, 0.078352 +4237, 0.004106, -0.995551, 0.052175, 0.078352 +4238, 0.004106, -0.995551, 0.052175, 0.078352 +4239, 0.004106, -0.995551, 0.052175, 0.078352 +4240, 0.004106, -0.995551, 0.052175, 0.078352 +4241, 0.004106, -0.995551, 0.052175, 0.078352 +4242, 0.004106, -0.995551, 0.052175, 0.078352 +4243, 0.004106, -0.995551, 0.052175, 0.078352 +4244, 0.004106, -0.995551, 0.052175, 0.078352 +4245, 0.004106, -0.995551, 0.052175, 0.078352 +4246, 0.004106, -0.995551, 0.052175, 0.078352 +4247, 0.004106, -0.995551, 0.052175, 0.078352 +4248, 0.004106, -0.995551, 0.052175, 0.078352 +4249, 0.004106, -0.995551, 0.052175, 0.078352 +4250, 0.004106, -0.995551, 0.052175, 0.078352 +4251, 0.004106, -0.995551, 0.052175, 0.078352 +4252, 0.004106, -0.995551, 0.052175, 0.078352 +4253, 0.004106, -0.995551, 0.052175, 0.078352 +4254, 0.004106, -0.995551, 0.052175, 0.078352 +4255, 0.004106, -0.995551, 0.052175, 0.078352 +4256, 0.004106, -0.995551, 0.052175, 0.078352 +4257, 0.004106, -0.995551, 0.052175, 0.078352 +4258, 0.004106, -0.995551, 0.052175, 0.078352 +4259, 0.004106, -0.995551, 0.052175, 0.078352 +4260, 0.004106, -0.995551, 0.052175, 0.078352 +4261, 0.004106, -0.995551, 0.052175, 0.078352 +4262, 0.004106, -0.995551, 0.052175, 0.078352 +4263, 0.004106, -0.995551, 0.052175, 0.078352 +4264, 0.004106, -0.995551, 0.052175, 0.078352 +4265, 0.004106, -0.995551, 0.052175, 0.078352 +4266, 0.004106, -0.995551, 0.052175, 0.078352 +4267, 0.004106, -0.995551, 0.052175, 0.078352 +4268, 0.004106, -0.995551, 0.052175, 0.078352 +4269, 0.004106, -0.995551, 0.052175, 0.078352 +4270, 0.004106, -0.995551, 0.052175, 0.078352 +4271, 0.004106, -0.995551, 0.052175, 0.078352 +4272, 0.004106, -0.995551, 0.052175, 0.078352 +4273, 0.004106, -0.995551, 0.052175, 0.078352 +4274, 0.004106, -0.995551, 0.052175, 0.078352 +4275, 0.004106, -0.995551, 0.052175, 0.078352 +4276, 0.004106, -0.995551, 0.052175, 0.078352 +4277, 0.004106, -0.995551, 0.052175, 0.078352 +4278, 0.004106, -0.995551, 0.052175, 0.078352 +4279, 0.004106, -0.995551, 0.052175, 0.078352 +4280, 0.004106, -0.995551, 0.052175, 0.078352 +4281, 0.004106, -0.995551, 0.052175, 0.078352 +4282, 0.004106, -0.995551, 0.052175, 0.078352 +4283, 0.004106, -0.995551, 0.052175, 0.078352 +4284, 0.004106, -0.995551, 0.052175, 0.078352 +4285, 0.004106, -0.995551, 0.052175, 0.078352 +4286, 0.004106, -0.995551, 0.052175, 0.078352 +4287, 0.004106, -0.995551, 0.052175, 0.078352 +4288, 0.004106, -0.995551, 0.052175, 0.078352 +4289, 0.004106, -0.995551, 0.052175, 0.078352 +4290, 0.004106, -0.995551, 0.052175, 0.078352 +4291, 0.004106, -0.995551, 0.052175, 0.078352 +4292, 0.004106, -0.995551, 0.052175, 0.078352 +4293, 0.004106, -0.995551, 0.052175, 0.078352 +4294, 0.004106, -0.995551, 0.052175, 0.078352 +4295, 0.004106, -0.995551, 0.052175, 0.078352 +4296, 0.004106, -0.995551, 0.052175, 0.078352 +4297, 0.004106, -0.995551, 0.052175, 0.078352 +4298, 0.004106, -0.995551, 0.052175, 0.078352 +4299, 0.004106, -0.995551, 0.052175, 0.078352 +4300, 0.001826, -0.998021, 0.034852, 0.052304 +4301, 0.001826, -0.998021, 0.034852, 0.052304 +4302, 0.001826, -0.998021, 0.034852, 0.052304 +4303, 0.001826, -0.998021, 0.034852, 0.052304 +4304, 0.001826, -0.998021, 0.034852, 0.052304 +4305, 0.001826, -0.998021, 0.034852, 0.052304 +4306, 0.001826, -0.998021, 0.034852, 0.052304 +4307, 0.001826, -0.998021, 0.034852, 0.052304 +4308, 0.001826, -0.998021, 0.034852, 0.052304 +4309, 0.001826, -0.998021, 0.034852, 0.052304 +4310, 0.001826, -0.998021, 0.034852, 0.052304 +4311, 0.001826, -0.998021, 0.034852, 0.052304 +4312, 0.001826, -0.998021, 0.034852, 0.052304 +4313, 0.001826, -0.998021, 0.034852, 0.052304 +4314, 0.001826, -0.998021, 0.034852, 0.052304 +4315, 0.001826, -0.998021, 0.034852, 0.052304 +4316, 0.001826, -0.998021, 0.034852, 0.052304 +4317, 0.001826, -0.998021, 0.034852, 0.052304 +4318, 0.001826, -0.998021, 0.034852, 0.052304 +4319, 0.001826, -0.998021, 0.034852, 0.052304 +4320, 0.001826, -0.998021, 0.034852, 0.052304 +4321, 0.001826, -0.998021, 0.034852, 0.052304 +4322, 0.001826, -0.998021, 0.034852, 0.052304 +4323, 0.001826, -0.998021, 0.034852, 0.052304 +4324, 0.001826, -0.998021, 0.034852, 0.052304 +4325, 0.001826, -0.998021, 0.034852, 0.052304 +4326, 0.001826, -0.998021, 0.034852, 0.052304 +4327, 0.001826, -0.998021, 0.034852, 0.052304 +4328, 0.001826, -0.998021, 0.034852, 0.052304 +4329, 0.001826, -0.998021, 0.034852, 0.052304 +4330, 0.001826, -0.998021, 0.034852, 0.052304 +4331, 0.001826, -0.998021, 0.034852, 0.052304 +4332, 0.001826, -0.998021, 0.034852, 0.052304 +4333, 0.001826, -0.998021, 0.034852, 0.052304 +4334, 0.001826, -0.998021, 0.034852, 0.052304 +4335, 0.001826, -0.998021, 0.034852, 0.052304 +4336, 0.001826, -0.998021, 0.034852, 0.052304 +4337, 0.001826, -0.998021, 0.034852, 0.052304 +4338, 0.001826, -0.998021, 0.034852, 0.052304 +4339, 0.001826, -0.998021, 0.034852, 0.052304 +4340, 0.001826, -0.998021, 0.034852, 0.052304 +4341, 0.001826, -0.998021, 0.034852, 0.052304 +4342, 0.001826, -0.998021, 0.034852, 0.052304 +4343, 0.001826, -0.998021, 0.034852, 0.052304 +4344, 0.001826, -0.998021, 0.034852, 0.052304 +4345, 0.001826, -0.998021, 0.034852, 0.052304 +4346, 0.001826, -0.998021, 0.034852, 0.052304 +4347, 0.001826, -0.998021, 0.034852, 0.052304 +4348, 0.001826, -0.998021, 0.034852, 0.052304 +4349, 0.001826, -0.998021, 0.034852, 0.052304 +4350, 0.001826, -0.998021, 0.034852, 0.052304 +4351, 0.001826, -0.998021, 0.034852, 0.052304 +4352, 0.001826, -0.998021, 0.034852, 0.052304 +4353, 0.001826, -0.998021, 0.034852, 0.052304 +4354, 0.001826, -0.998021, 0.034852, 0.052304 +4355, 0.001826, -0.998021, 0.034852, 0.052304 +4356, 0.001826, -0.998021, 0.034852, 0.052304 +4357, 0.001826, -0.998021, 0.034852, 0.052304 +4358, 0.001826, -0.998021, 0.034852, 0.052304 +4359, 0.001826, -0.998021, 0.034852, 0.052304 +4360, 0.001826, -0.998021, 0.034852, 0.052304 +4361, 0.001826, -0.998021, 0.034852, 0.052304 +4362, 0.001826, -0.998021, 0.034852, 0.052304 +4363, 0.001826, -0.998021, 0.034852, 0.052304 +4364, 0.001826, -0.998021, 0.034852, 0.052304 +4365, 0.001826, -0.998021, 0.034852, 0.052304 +4366, 0.001826, -0.998021, 0.034852, 0.052304 +4367, 0.001826, -0.998021, 0.034852, 0.052304 +4368, 0.001826, -0.998021, 0.034852, 0.052304 +4369, 0.001826, -0.998021, 0.034852, 0.052304 +4370, 0.001826, -0.998021, 0.034852, 0.052304 +4371, 0.001826, -0.998021, 0.034852, 0.052304 +4372, 0.001826, -0.998021, 0.034852, 0.052304 +4373, 0.001826, -0.998021, 0.034852, 0.052304 +4374, 0.001826, -0.998021, 0.034852, 0.052304 +4375, 0.001826, -0.998021, 0.034852, 0.052304 +4376, 0.001826, -0.998021, 0.034852, 0.052304 +4377, 0.001826, -0.998021, 0.034852, 0.052304 +4378, 0.001826, -0.998021, 0.034852, 0.052304 +4379, 0.001826, -0.998021, 0.034852, 0.052304 +4380, 0.001826, -0.998021, 0.034852, 0.052304 +4381, 0.001826, -0.998021, 0.034852, 0.052304 +4382, 0.001826, -0.998021, 0.034852, 0.052304 +4383, 0.001826, -0.998021, 0.034852, 0.052304 +4384, 0.001826, -0.998021, 0.034852, 0.052304 +4385, 0.001826, -0.998021, 0.034852, 0.052304 +4386, 0.001826, -0.998021, 0.034852, 0.052304 +4387, 0.001826, -0.998021, 0.034852, 0.052304 +4388, 0.001826, -0.998021, 0.034852, 0.052304 +4389, 0.001826, -0.998021, 0.034852, 0.052304 +4390, 0.001826, -0.998021, 0.034852, 0.052304 +4391, 0.001826, -0.998021, 0.034852, 0.052304 +4392, 0.001826, -0.998021, 0.034852, 0.052304 +4393, 0.001826, -0.998021, 0.034852, 0.052304 +4394, 0.001826, -0.998021, 0.034852, 0.052304 +4395, 0.001826, -0.998021, 0.034852, 0.052304 +4396, 0.001826, -0.998021, 0.034852, 0.052304 +4397, 0.001826, -0.998021, 0.034852, 0.052304 +4398, 0.001826, -0.998021, 0.034852, 0.052304 +4399, 0.001826, -0.998021, 0.034852, 0.052304 +4400, 0.000457, -0.999505, 0.017446, 0.026173 +4401, 0.000457, -0.999505, 0.017446, 0.026173 +4402, 0.000457, -0.999505, 0.017446, 0.026173 +4403, 0.000457, -0.999505, 0.017446, 0.026173 +4404, 0.000457, -0.999505, 0.017446, 0.026173 +4405, 0.000457, -0.999505, 0.017446, 0.026173 +4406, 0.000457, -0.999505, 0.017446, 0.026173 +4407, 0.000457, -0.999505, 0.017446, 0.026173 +4408, 0.000457, -0.999505, 0.017446, 0.026173 +4409, 0.000457, -0.999505, 0.017446, 0.026173 +4410, 0.000457, -0.999505, 0.017446, 0.026173 +4411, 0.000457, -0.999505, 0.017446, 0.026173 +4412, 0.000457, -0.999505, 0.017446, 0.026173 +4413, 0.000457, -0.999505, 0.017446, 0.026173 +4414, 0.000457, -0.999505, 0.017446, 0.026173 +4415, 0.000457, -0.999505, 0.017446, 0.026173 +4416, 0.000457, -0.999505, 0.017446, 0.026173 +4417, 0.000457, -0.999505, 0.017446, 0.026173 +4418, 0.000457, -0.999505, 0.017446, 0.026173 +4419, 0.000457, -0.999505, 0.017446, 0.026173 +4420, 0.000457, -0.999505, 0.017446, 0.026173 +4421, 0.000457, -0.999505, 0.017446, 0.026173 +4422, 0.000457, -0.999505, 0.017446, 0.026173 +4423, 0.000457, -0.999505, 0.017446, 0.026173 +4424, 0.000457, -0.999505, 0.017446, 0.026173 +4425, 0.000457, -0.999505, 0.017446, 0.026173 +4426, 0.000457, -0.999505, 0.017446, 0.026173 +4427, 0.000457, -0.999505, 0.017446, 0.026173 +4428, 0.000457, -0.999505, 0.017446, 0.026173 +4429, 0.000457, -0.999505, 0.017446, 0.026173 +4430, 0.000457, -0.999505, 0.017446, 0.026173 +4431, 0.000457, -0.999505, 0.017446, 0.026173 +4432, 0.000457, -0.999505, 0.017446, 0.026173 +4433, 0.000457, -0.999505, 0.017446, 0.026173 +4434, 0.000457, -0.999505, 0.017446, 0.026173 +4435, 0.000457, -0.999505, 0.017446, 0.026173 +4436, 0.000457, -0.999505, 0.017446, 0.026173 +4437, 0.000457, -0.999505, 0.017446, 0.026173 +4438, 0.000457, -0.999505, 0.017446, 0.026173 +4439, 0.000457, -0.999505, 0.017446, 0.026173 +4440, 0.000457, -0.999505, 0.017446, 0.026173 +4441, 0.000457, -0.999505, 0.017446, 0.026173 +4442, 0.000457, -0.999505, 0.017446, 0.026173 +4443, 0.000457, -0.999505, 0.017446, 0.026173 +4444, 0.000457, -0.999505, 0.017446, 0.026173 +4445, 0.000457, -0.999505, 0.017446, 0.026173 +4446, 0.000457, -0.999505, 0.017446, 0.026173 +4447, 0.000457, -0.999505, 0.017446, 0.026173 +4448, 0.000457, -0.999505, 0.017446, 0.026173 +4449, 0.000457, -0.999505, 0.017446, 0.026173 +4450, 0.000457, -0.999505, 0.017446, 0.026173 +4451, 0.000457, -0.999505, 0.017446, 0.026173 +4452, 0.000457, -0.999505, 0.017446, 0.026173 +4453, 0.000457, -0.999505, 0.017446, 0.026173 +4454, 0.000457, -0.999505, 0.017446, 0.026173 +4455, 0.000457, -0.999505, 0.017446, 0.026173 +4456, 0.000457, -0.999505, 0.017446, 0.026173 +4457, 0.000457, -0.999505, 0.017446, 0.026173 +4458, 0.000457, -0.999505, 0.017446, 0.026173 +4459, 0.000457, -0.999505, 0.017446, 0.026173 +4460, 0.000457, -0.999505, 0.017446, 0.026173 +4461, 0.000457, -0.999505, 0.017446, 0.026173 +4462, 0.000457, -0.999505, 0.017446, 0.026173 +4463, 0.000457, -0.999505, 0.017446, 0.026173 +4464, 0.000457, -0.999505, 0.017446, 0.026173 +4465, 0.000457, -0.999505, 0.017446, 0.026173 +4466, 0.000457, -0.999505, 0.017446, 0.026173 +4467, 0.000457, -0.999505, 0.017446, 0.026173 +4468, 0.000457, -0.999505, 0.017446, 0.026173 +4469, 0.000457, -0.999505, 0.017446, 0.026173 +4470, 0.000457, -0.999505, 0.017446, 0.026173 +4471, 0.000457, -0.999505, 0.017446, 0.026173 +4472, 0.000457, -0.999505, 0.017446, 0.026173 +4473, 0.000457, -0.999505, 0.017446, 0.026173 +4474, 0.000457, -0.999505, 0.017446, 0.026173 +4475, 0.000457, -0.999505, 0.017446, 0.026173 +4476, 0.000457, -0.999505, 0.017446, 0.026173 +4477, 0.000457, -0.999505, 0.017446, 0.026173 +4478, 0.000457, -0.999505, 0.017446, 0.026173 +4479, 0.000457, -0.999505, 0.017446, 0.026173 +4480, 0.000457, -0.999505, 0.017446, 0.026173 +4481, 0.000457, -0.999505, 0.017446, 0.026173 +4482, 0.000457, -0.999505, 0.017446, 0.026173 +4483, 0.000457, -0.999505, 0.017446, 0.026173 +4484, 0.000457, -0.999505, 0.017446, 0.026173 +4485, 0.000457, -0.999505, 0.017446, 0.026173 +4486, 0.000457, -0.999505, 0.017446, 0.026173 +4487, 0.000457, -0.999505, 0.017446, 0.026173 +4488, 0.000457, -0.999505, 0.017446, 0.026173 +4489, 0.000457, -0.999505, 0.017446, 0.026173 +4490, 0.000457, -0.999505, 0.017446, 0.026173 +4491, 0.000457, -0.999505, 0.017446, 0.026173 +4492, 0.000457, -0.999505, 0.017446, 0.026173 +4493, 0.000457, -0.999505, 0.017446, 0.026173 +4494, 0.000457, -0.999505, 0.017446, 0.026173 +4495, 0.000457, -0.999505, 0.017446, 0.026173 +4496, 0.000457, -0.999505, 0.017446, 0.026173 +4497, 0.000457, -0.999505, 0.017446, 0.026173 +4498, 0.000457, -0.999505, 0.017446, 0.026173 +4499, 0.000457, -0.999505, 0.017446, 0.026173 +4500, 0.000000, -1.000000, 0.000000, 0.000000 +4501, 0.000000, -1.000000, 0.000000, 0.000000 +4502, 0.000000, -1.000000, 0.000000, 0.000000 +4503, 0.000000, -1.000000, 0.000000, 0.000000 +4504, 0.000000, -1.000000, 0.000000, 0.000000 +4505, 0.000000, -1.000000, 0.000000, 0.000000 +4506, 0.000000, -1.000000, 0.000000, 0.000000 +4507, 0.000000, -1.000000, 0.000000, 0.000000 +4508, 0.000000, -1.000000, 0.000000, 0.000000 +4509, 0.000000, -1.000000, 0.000000, 0.000000 +4510, 0.000000, -1.000000, 0.000000, 0.000000 +4511, 0.000000, -1.000000, 0.000000, 0.000000 +4512, 0.000000, -1.000000, 0.000000, 0.000000 +4513, 0.000000, -1.000000, 0.000000, 0.000000 +4514, 0.000000, -1.000000, 0.000000, 0.000000 +4515, 0.000000, -1.000000, 0.000000, 0.000000 +4516, 0.000000, -1.000000, 0.000000, 0.000000 +4517, 0.000000, -1.000000, 0.000000, 0.000000 +4518, 0.000000, -1.000000, 0.000000, 0.000000 +4519, 0.000000, -1.000000, 0.000000, 0.000000 +4520, 0.000000, -1.000000, 0.000000, 0.000000 +4521, 0.000000, -1.000000, 0.000000, 0.000000 +4522, 0.000000, -1.000000, 0.000000, 0.000000 +4523, 0.000000, -1.000000, 0.000000, 0.000000 +4524, 0.000000, -1.000000, 0.000000, 0.000000 +4525, 0.000000, -1.000000, 0.000000, 0.000000 +4526, 0.000000, -1.000000, 0.000000, 0.000000 +4527, 0.000000, -1.000000, 0.000000, 0.000000 +4528, 0.000000, -1.000000, 0.000000, 0.000000 +4529, 0.000000, -1.000000, 0.000000, 0.000000 +4530, 0.000000, -1.000000, 0.000000, 0.000000 +4531, 0.000000, -1.000000, 0.000000, 0.000000 +4532, 0.000000, -1.000000, 0.000000, 0.000000 +4533, 0.000000, -1.000000, 0.000000, 0.000000 +4534, 0.000000, -1.000000, 0.000000, 0.000000 +4535, 0.000000, -1.000000, 0.000000, 0.000000 +4536, 0.000000, -1.000000, 0.000000, 0.000000 +4537, 0.000000, -1.000000, 0.000000, 0.000000 +4538, 0.000000, -1.000000, 0.000000, 0.000000 +4539, 0.000000, -1.000000, 0.000000, 0.000000 +4540, 0.000000, -1.000000, 0.000000, 0.000000 +4541, 0.000000, -1.000000, 0.000000, 0.000000 +4542, 0.000000, -1.000000, 0.000000, 0.000000 +4543, 0.000000, -1.000000, 0.000000, 0.000000 +4544, 0.000000, -1.000000, 0.000000, 0.000000 +4545, 0.000000, -1.000000, 0.000000, 0.000000 +4546, 0.000000, -1.000000, 0.000000, 0.000000 +4547, 0.000000, -1.000000, 0.000000, 0.000000 +4548, 0.000000, -1.000000, 0.000000, 0.000000 +4549, 0.000000, -1.000000, 0.000000, 0.000000 +4550, 0.000000, -1.000000, 0.000000, 0.000000 +4551, 0.000000, -1.000000, 0.000000, 0.000000 +4552, 0.000000, -1.000000, 0.000000, 0.000000 +4553, 0.000000, -1.000000, 0.000000, 0.000000 +4554, 0.000000, -1.000000, 0.000000, 0.000000 +4555, 0.000000, -1.000000, 0.000000, 0.000000 +4556, 0.000000, -1.000000, 0.000000, 0.000000 +4557, 0.000000, -1.000000, 0.000000, 0.000000 +4558, 0.000000, -1.000000, 0.000000, 0.000000 +4559, 0.000000, -1.000000, 0.000000, 0.000000 +4560, 0.000000, -1.000000, 0.000000, 0.000000 +4561, 0.000000, -1.000000, 0.000000, 0.000000 +4562, 0.000000, -1.000000, 0.000000, 0.000000 +4563, 0.000000, -1.000000, 0.000000, 0.000000 +4564, 0.000000, -1.000000, 0.000000, 0.000000 +4565, 0.000000, -1.000000, 0.000000, 0.000000 +4566, 0.000000, -1.000000, 0.000000, 0.000000 +4567, 0.000000, -1.000000, 0.000000, 0.000000 +4568, 0.000000, -1.000000, 0.000000, 0.000000 +4569, 0.000000, -1.000000, 0.000000, 0.000000 +4570, 0.000000, -1.000000, 0.000000, 0.000000 +4571, 0.000000, -1.000000, 0.000000, 0.000000 +4572, 0.000000, -1.000000, 0.000000, 0.000000 +4573, 0.000000, -1.000000, 0.000000, 0.000000 +4574, 0.000000, -1.000000, 0.000000, 0.000000 +4575, 0.000000, -1.000000, 0.000000, 0.000000 +4576, 0.000000, -1.000000, 0.000000, 0.000000 +4577, 0.000000, -1.000000, 0.000000, 0.000000 +4578, 0.000000, -1.000000, 0.000000, 0.000000 +4579, 0.000000, -1.000000, 0.000000, 0.000000 +4580, 0.000000, -1.000000, 0.000000, 0.000000 +4581, 0.000000, -1.000000, 0.000000, 0.000000 +4582, 0.000000, -1.000000, 0.000000, 0.000000 +4583, 0.000000, -1.000000, 0.000000, 0.000000 +4584, 0.000000, -1.000000, 0.000000, 0.000000 +4585, 0.000000, -1.000000, 0.000000, 0.000000 +4586, 0.000000, -1.000000, 0.000000, 0.000000 +4587, 0.000000, -1.000000, 0.000000, 0.000000 +4588, 0.000000, -1.000000, 0.000000, 0.000000 +4589, 0.000000, -1.000000, 0.000000, 0.000000 +4590, 0.000000, -1.000000, 0.000000, 0.000000 +4591, 0.000000, -1.000000, 0.000000, 0.000000 +4592, 0.000000, -1.000000, 0.000000, 0.000000 +4593, 0.000000, -1.000000, 0.000000, 0.000000 +4594, 0.000000, -1.000000, 0.000000, 0.000000 +4595, 0.000000, -1.000000, 0.000000, 0.000000 +4596, 0.000000, -1.000000, 0.000000, 0.000000 +4597, 0.000000, -1.000000, 0.000000, 0.000000 +4598, 0.000000, -1.000000, 0.000000, 0.000000 +4599, 0.000000, -1.000000, 0.000000, 0.000000 +4600, 0.000457, -0.999505, -0.017446, -0.026173 +4601, 0.000457, -0.999505, -0.017446, -0.026173 +4602, 0.000457, -0.999505, -0.017446, -0.026173 +4603, 0.000457, -0.999505, -0.017446, -0.026173 +4604, 0.000457, -0.999505, -0.017446, -0.026173 +4605, 0.000457, -0.999505, -0.017446, -0.026173 +4606, 0.000457, -0.999505, -0.017446, -0.026173 +4607, 0.000457, -0.999505, -0.017446, -0.026173 +4608, 0.000457, -0.999505, -0.017446, -0.026173 +4609, 0.000457, -0.999505, -0.017446, -0.026173 +4610, 0.000457, -0.999505, -0.017446, -0.026173 +4611, 0.000457, -0.999505, -0.017446, -0.026173 +4612, 0.000457, -0.999505, -0.017446, -0.026173 +4613, 0.000457, -0.999505, -0.017446, -0.026173 +4614, 0.000457, -0.999505, -0.017446, -0.026173 +4615, 0.000457, -0.999505, -0.017446, -0.026173 +4616, 0.000457, -0.999505, -0.017446, -0.026173 +4617, 0.000457, -0.999505, -0.017446, -0.026173 +4618, 0.000457, -0.999505, -0.017446, -0.026173 +4619, 0.000457, -0.999505, -0.017446, -0.026173 +4620, 0.000457, -0.999505, -0.017446, -0.026173 +4621, 0.000457, -0.999505, -0.017446, -0.026173 +4622, 0.000457, -0.999505, -0.017446, -0.026173 +4623, 0.000457, -0.999505, -0.017446, -0.026173 +4624, 0.000457, -0.999505, -0.017446, -0.026173 +4625, 0.000457, -0.999505, -0.017446, -0.026173 +4626, 0.000457, -0.999505, -0.017446, -0.026173 +4627, 0.000457, -0.999505, -0.017446, -0.026173 +4628, 0.000457, -0.999505, -0.017446, -0.026173 +4629, 0.000457, -0.999505, -0.017446, -0.026173 +4630, 0.000457, -0.999505, -0.017446, -0.026173 +4631, 0.000457, -0.999505, -0.017446, -0.026173 +4632, 0.000457, -0.999505, -0.017446, -0.026173 +4633, 0.000457, -0.999505, -0.017446, -0.026173 +4634, 0.000457, -0.999505, -0.017446, -0.026173 +4635, 0.000457, -0.999505, -0.017446, -0.026173 +4636, 0.000457, -0.999505, -0.017446, -0.026173 +4637, 0.000457, -0.999505, -0.017446, -0.026173 +4638, 0.000457, -0.999505, -0.017446, -0.026173 +4639, 0.000457, -0.999505, -0.017446, -0.026173 +4640, 0.000457, -0.999505, -0.017446, -0.026173 +4641, 0.000457, -0.999505, -0.017446, -0.026173 +4642, 0.000457, -0.999505, -0.017446, -0.026173 +4643, 0.000457, -0.999505, -0.017446, -0.026173 +4644, 0.000457, -0.999505, -0.017446, -0.026173 +4645, 0.000457, -0.999505, -0.017446, -0.026173 +4646, 0.000457, -0.999505, -0.017446, -0.026173 +4647, 0.000457, -0.999505, -0.017446, -0.026173 +4648, 0.000457, -0.999505, -0.017446, -0.026173 +4649, 0.000457, -0.999505, -0.017446, -0.026173 +4650, 0.000457, -0.999505, -0.017446, -0.026173 +4651, 0.000457, -0.999505, -0.017446, -0.026173 +4652, 0.000457, -0.999505, -0.017446, -0.026173 +4653, 0.000457, -0.999505, -0.017446, -0.026173 +4654, 0.000457, -0.999505, -0.017446, -0.026173 +4655, 0.000457, -0.999505, -0.017446, -0.026173 +4656, 0.000457, -0.999505, -0.017446, -0.026173 +4657, 0.000457, -0.999505, -0.017446, -0.026173 +4658, 0.000457, -0.999505, -0.017446, -0.026173 +4659, 0.000457, -0.999505, -0.017446, -0.026173 +4660, 0.000457, -0.999505, -0.017446, -0.026173 +4661, 0.000457, -0.999505, -0.017446, -0.026173 +4662, 0.000457, -0.999505, -0.017446, -0.026173 +4663, 0.000457, -0.999505, -0.017446, -0.026173 +4664, 0.000457, -0.999505, -0.017446, -0.026173 +4665, 0.000457, -0.999505, -0.017446, -0.026173 +4666, 0.000457, -0.999505, -0.017446, -0.026173 +4667, 0.000457, -0.999505, -0.017446, -0.026173 +4668, 0.000457, -0.999505, -0.017446, -0.026173 +4669, 0.000457, -0.999505, -0.017446, -0.026173 +4670, 0.000457, -0.999505, -0.017446, -0.026173 +4671, 0.000457, -0.999505, -0.017446, -0.026173 +4672, 0.000457, -0.999505, -0.017446, -0.026173 +4673, 0.000457, -0.999505, -0.017446, -0.026173 +4674, 0.000457, -0.999505, -0.017446, -0.026173 +4675, 0.000457, -0.999505, -0.017446, -0.026173 +4676, 0.000457, -0.999505, -0.017446, -0.026173 +4677, 0.000457, -0.999505, -0.017446, -0.026173 +4678, 0.000457, -0.999505, -0.017446, -0.026173 +4679, 0.000457, -0.999505, -0.017446, -0.026173 +4680, 0.000457, -0.999505, -0.017446, -0.026173 +4681, 0.000457, -0.999505, -0.017446, -0.026173 +4682, 0.000457, -0.999505, -0.017446, -0.026173 +4683, 0.000457, -0.999505, -0.017446, -0.026173 +4684, 0.000457, -0.999505, -0.017446, -0.026173 +4685, 0.000457, -0.999505, -0.017446, -0.026173 +4686, 0.000457, -0.999505, -0.017446, -0.026173 +4687, 0.000457, -0.999505, -0.017446, -0.026173 +4688, 0.000457, -0.999505, -0.017446, -0.026173 +4689, 0.000457, -0.999505, -0.017446, -0.026173 +4690, 0.000457, -0.999505, -0.017446, -0.026173 +4691, 0.000457, -0.999505, -0.017446, -0.026173 +4692, 0.000457, -0.999505, -0.017446, -0.026173 +4693, 0.000457, -0.999505, -0.017446, -0.026173 +4694, 0.000457, -0.999505, -0.017446, -0.026173 +4695, 0.000457, -0.999505, -0.017446, -0.026173 +4696, 0.000457, -0.999505, -0.017446, -0.026173 +4697, 0.000457, -0.999505, -0.017446, -0.026173 +4698, 0.000457, -0.999505, -0.017446, -0.026173 +4699, 0.000457, -0.999505, -0.017446, -0.026173 +4700, 0.001826, -0.998021, -0.034852, -0.052304 +4701, 0.001826, -0.998021, -0.034852, -0.052304 +4702, 0.001826, -0.998021, -0.034852, -0.052304 +4703, 0.001826, -0.998021, -0.034852, -0.052304 +4704, 0.001826, -0.998021, -0.034852, -0.052304 +4705, 0.001826, -0.998021, -0.034852, -0.052304 +4706, 0.001826, -0.998021, -0.034852, -0.052304 +4707, 0.001826, -0.998021, -0.034852, -0.052304 +4708, 0.001826, -0.998021, -0.034852, -0.052304 +4709, 0.001826, -0.998021, -0.034852, -0.052304 +4710, 0.001826, -0.998021, -0.034852, -0.052304 +4711, 0.001826, -0.998021, -0.034852, -0.052304 +4712, 0.001826, -0.998021, -0.034852, -0.052304 +4713, 0.001826, -0.998021, -0.034852, -0.052304 +4714, 0.001826, -0.998021, -0.034852, -0.052304 +4715, 0.001826, -0.998021, -0.034852, -0.052304 +4716, 0.001826, -0.998021, -0.034852, -0.052304 +4717, 0.001826, -0.998021, -0.034852, -0.052304 +4718, 0.001826, -0.998021, -0.034852, -0.052304 +4719, 0.001826, -0.998021, -0.034852, -0.052304 +4720, 0.001826, -0.998021, -0.034852, -0.052304 +4721, 0.001826, -0.998021, -0.034852, -0.052304 +4722, 0.001826, -0.998021, -0.034852, -0.052304 +4723, 0.001826, -0.998021, -0.034852, -0.052304 +4724, 0.001826, -0.998021, -0.034852, -0.052304 +4725, 0.001826, -0.998021, -0.034852, -0.052304 +4726, 0.001826, -0.998021, -0.034852, -0.052304 +4727, 0.001826, -0.998021, -0.034852, -0.052304 +4728, 0.001826, -0.998021, -0.034852, -0.052304 +4729, 0.001826, -0.998021, -0.034852, -0.052304 +4730, 0.001826, -0.998021, -0.034852, -0.052304 +4731, 0.001826, -0.998021, -0.034852, -0.052304 +4732, 0.001826, -0.998021, -0.034852, -0.052304 +4733, 0.001826, -0.998021, -0.034852, -0.052304 +4734, 0.001826, -0.998021, -0.034852, -0.052304 +4735, 0.001826, -0.998021, -0.034852, -0.052304 +4736, 0.001826, -0.998021, -0.034852, -0.052304 +4737, 0.001826, -0.998021, -0.034852, -0.052304 +4738, 0.001826, -0.998021, -0.034852, -0.052304 +4739, 0.001826, -0.998021, -0.034852, -0.052304 +4740, 0.001826, -0.998021, -0.034852, -0.052304 +4741, 0.001826, -0.998021, -0.034852, -0.052304 +4742, 0.001826, -0.998021, -0.034852, -0.052304 +4743, 0.001826, -0.998021, -0.034852, -0.052304 +4744, 0.001826, -0.998021, -0.034852, -0.052304 +4745, 0.001826, -0.998021, -0.034852, -0.052304 +4746, 0.001826, -0.998021, -0.034852, -0.052304 +4747, 0.001826, -0.998021, -0.034852, -0.052304 +4748, 0.001826, -0.998021, -0.034852, -0.052304 +4749, 0.001826, -0.998021, -0.034852, -0.052304 +4750, 0.001826, -0.998021, -0.034852, -0.052304 +4751, 0.001826, -0.998021, -0.034852, -0.052304 +4752, 0.001826, -0.998021, -0.034852, -0.052304 +4753, 0.001826, -0.998021, -0.034852, -0.052304 +4754, 0.001826, -0.998021, -0.034852, -0.052304 +4755, 0.001826, -0.998021, -0.034852, -0.052304 +4756, 0.001826, -0.998021, -0.034852, -0.052304 +4757, 0.001826, -0.998021, -0.034852, -0.052304 +4758, 0.001826, -0.998021, -0.034852, -0.052304 +4759, 0.001826, -0.998021, -0.034852, -0.052304 +4760, 0.001826, -0.998021, -0.034852, -0.052304 +4761, 0.001826, -0.998021, -0.034852, -0.052304 +4762, 0.001826, -0.998021, -0.034852, -0.052304 +4763, 0.001826, -0.998021, -0.034852, -0.052304 +4764, 0.001826, -0.998021, -0.034852, -0.052304 +4765, 0.001826, -0.998021, -0.034852, -0.052304 +4766, 0.001826, -0.998021, -0.034852, -0.052304 +4767, 0.001826, -0.998021, -0.034852, -0.052304 +4768, 0.001826, -0.998021, -0.034852, -0.052304 +4769, 0.001826, -0.998021, -0.034852, -0.052304 +4770, 0.001826, -0.998021, -0.034852, -0.052304 +4771, 0.001826, -0.998021, -0.034852, -0.052304 +4772, 0.001826, -0.998021, -0.034852, -0.052304 +4773, 0.001826, -0.998021, -0.034852, -0.052304 +4774, 0.001826, -0.998021, -0.034852, -0.052304 +4775, 0.001826, -0.998021, -0.034852, -0.052304 +4776, 0.001826, -0.998021, -0.034852, -0.052304 +4777, 0.001826, -0.998021, -0.034852, -0.052304 +4778, 0.001826, -0.998021, -0.034852, -0.052304 +4779, 0.001826, -0.998021, -0.034852, -0.052304 +4780, 0.001826, -0.998021, -0.034852, -0.052304 +4781, 0.001826, -0.998021, -0.034852, -0.052304 +4782, 0.001826, -0.998021, -0.034852, -0.052304 +4783, 0.001826, -0.998021, -0.034852, -0.052304 +4784, 0.001826, -0.998021, -0.034852, -0.052304 +4785, 0.001826, -0.998021, -0.034852, -0.052304 +4786, 0.001826, -0.998021, -0.034852, -0.052304 +4787, 0.001826, -0.998021, -0.034852, -0.052304 +4788, 0.001826, -0.998021, -0.034852, -0.052304 +4789, 0.001826, -0.998021, -0.034852, -0.052304 +4790, 0.001826, -0.998021, -0.034852, -0.052304 +4791, 0.001826, -0.998021, -0.034852, -0.052304 +4792, 0.001826, -0.998021, -0.034852, -0.052304 +4793, 0.001826, -0.998021, -0.034852, -0.052304 +4794, 0.001826, -0.998021, -0.034852, -0.052304 +4795, 0.001826, -0.998021, -0.034852, -0.052304 +4796, 0.001826, -0.998021, -0.034852, -0.052304 +4797, 0.001826, -0.998021, -0.034852, -0.052304 +4798, 0.001826, -0.998021, -0.034852, -0.052304 +4799, 0.001826, -0.998021, -0.034852, -0.052304 +4800, 0.004106, -0.995551, -0.052175, -0.078352 +4801, 0.004106, -0.995551, -0.052175, -0.078352 +4802, 0.004106, -0.995551, -0.052175, -0.078352 +4803, 0.004106, -0.995551, -0.052175, -0.078352 +4804, 0.004106, -0.995551, -0.052175, -0.078352 +4805, 0.004106, -0.995551, -0.052175, -0.078352 +4806, 0.004106, -0.995551, -0.052175, -0.078352 +4807, 0.004106, -0.995551, -0.052175, -0.078352 +4808, 0.004106, -0.995551, -0.052175, -0.078352 +4809, 0.004106, -0.995551, -0.052175, -0.078352 +4810, 0.004106, -0.995551, -0.052175, -0.078352 +4811, 0.004106, -0.995551, -0.052175, -0.078352 +4812, 0.004106, -0.995551, -0.052175, -0.078352 +4813, 0.004106, -0.995551, -0.052175, -0.078352 +4814, 0.004106, -0.995551, -0.052175, -0.078352 +4815, 0.004106, -0.995551, -0.052175, -0.078352 +4816, 0.004106, -0.995551, -0.052175, -0.078352 +4817, 0.004106, -0.995551, -0.052175, -0.078352 +4818, 0.004106, -0.995551, -0.052175, -0.078352 +4819, 0.004106, -0.995551, -0.052175, -0.078352 +4820, 0.004106, -0.995551, -0.052175, -0.078352 +4821, 0.004106, -0.995551, -0.052175, -0.078352 +4822, 0.004106, -0.995551, -0.052175, -0.078352 +4823, 0.004106, -0.995551, -0.052175, -0.078352 +4824, 0.004106, -0.995551, -0.052175, -0.078352 +4825, 0.004106, -0.995551, -0.052175, -0.078352 +4826, 0.004106, -0.995551, -0.052175, -0.078352 +4827, 0.004106, -0.995551, -0.052175, -0.078352 +4828, 0.004106, -0.995551, -0.052175, -0.078352 +4829, 0.004106, -0.995551, -0.052175, -0.078352 +4830, 0.004106, -0.995551, -0.052175, -0.078352 +4831, 0.004106, -0.995551, -0.052175, -0.078352 +4832, 0.004106, -0.995551, -0.052175, -0.078352 +4833, 0.004106, -0.995551, -0.052175, -0.078352 +4834, 0.004106, -0.995551, -0.052175, -0.078352 +4835, 0.004106, -0.995551, -0.052175, -0.078352 +4836, 0.004106, -0.995551, -0.052175, -0.078352 +4837, 0.004106, -0.995551, -0.052175, -0.078352 +4838, 0.004106, -0.995551, -0.052175, -0.078352 +4839, 0.004106, -0.995551, -0.052175, -0.078352 +4840, 0.004106, -0.995551, -0.052175, -0.078352 +4841, 0.004106, -0.995551, -0.052175, -0.078352 +4842, 0.004106, -0.995551, -0.052175, -0.078352 +4843, 0.004106, -0.995551, -0.052175, -0.078352 +4844, 0.004106, -0.995551, -0.052175, -0.078352 +4845, 0.004106, -0.995551, -0.052175, -0.078352 +4846, 0.004106, -0.995551, -0.052175, -0.078352 +4847, 0.004106, -0.995551, -0.052175, -0.078352 +4848, 0.004106, -0.995551, -0.052175, -0.078352 +4849, 0.004106, -0.995551, -0.052175, -0.078352 +4850, 0.004106, -0.995551, -0.052175, -0.078352 +4851, 0.004106, -0.995551, -0.052175, -0.078352 +4852, 0.004106, -0.995551, -0.052175, -0.078352 +4853, 0.004106, -0.995551, -0.052175, -0.078352 +4854, 0.004106, -0.995551, -0.052175, -0.078352 +4855, 0.004106, -0.995551, -0.052175, -0.078352 +4856, 0.004106, -0.995551, -0.052175, -0.078352 +4857, 0.004106, -0.995551, -0.052175, -0.078352 +4858, 0.004106, -0.995551, -0.052175, -0.078352 +4859, 0.004106, -0.995551, -0.052175, -0.078352 +4860, 0.004106, -0.995551, -0.052175, -0.078352 +4861, 0.004106, -0.995551, -0.052175, -0.078352 +4862, 0.004106, -0.995551, -0.052175, -0.078352 +4863, 0.004106, -0.995551, -0.052175, -0.078352 +4864, 0.004106, -0.995551, -0.052175, -0.078352 +4865, 0.004106, -0.995551, -0.052175, -0.078352 +4866, 0.004106, -0.995551, -0.052175, -0.078352 +4867, 0.004106, -0.995551, -0.052175, -0.078352 +4868, 0.004106, -0.995551, -0.052175, -0.078352 +4869, 0.004106, -0.995551, -0.052175, -0.078352 +4870, 0.004106, -0.995551, -0.052175, -0.078352 +4871, 0.004106, -0.995551, -0.052175, -0.078352 +4872, 0.004106, -0.995551, -0.052175, -0.078352 +4873, 0.004106, -0.995551, -0.052175, -0.078352 +4874, 0.004106, -0.995551, -0.052175, -0.078352 +4875, 0.004106, -0.995551, -0.052175, -0.078352 +4876, 0.004106, -0.995551, -0.052175, -0.078352 +4877, 0.004106, -0.995551, -0.052175, -0.078352 +4878, 0.004106, -0.995551, -0.052175, -0.078352 +4879, 0.004106, -0.995551, -0.052175, -0.078352 +4880, 0.004106, -0.995551, -0.052175, -0.078352 +4881, 0.004106, -0.995551, -0.052175, -0.078352 +4882, 0.004106, -0.995551, -0.052175, -0.078352 +4883, 0.004106, -0.995551, -0.052175, -0.078352 +4884, 0.004106, -0.995551, -0.052175, -0.078352 +4885, 0.004106, -0.995551, -0.052175, -0.078352 +4886, 0.004106, -0.995551, -0.052175, -0.078352 +4887, 0.004106, -0.995551, -0.052175, -0.078352 +4888, 0.004106, -0.995551, -0.052175, -0.078352 +4889, 0.004106, -0.995551, -0.052175, -0.078352 +4890, 0.004106, -0.995551, -0.052175, -0.078352 +4891, 0.004106, -0.995551, -0.052175, -0.078352 +4892, 0.004106, -0.995551, -0.052175, -0.078352 +4893, 0.004106, -0.995551, -0.052175, -0.078352 +4894, 0.004106, -0.995551, -0.052175, -0.078352 +4895, 0.004106, -0.995551, -0.052175, -0.078352 +4896, 0.004106, -0.995551, -0.052175, -0.078352 +4897, 0.004106, -0.995551, -0.052175, -0.078352 +4898, 0.004106, -0.995551, -0.052175, -0.078352 +4899, 0.004106, -0.995551, -0.052175, -0.078352 +4900, 0.007292, -0.992099, -0.069374, -0.104274 +4901, 0.007292, -0.992099, -0.069374, -0.104274 +4902, 0.007292, -0.992099, -0.069374, -0.104274 +4903, 0.007292, -0.992099, -0.069374, -0.104274 +4904, 0.007292, -0.992099, -0.069374, -0.104274 +4905, 0.007292, -0.992099, -0.069374, -0.104274 +4906, 0.007292, -0.992099, -0.069374, -0.104274 +4907, 0.007292, -0.992099, -0.069374, -0.104274 +4908, 0.007292, -0.992099, -0.069374, -0.104274 +4909, 0.007292, -0.992099, -0.069374, -0.104274 +4910, 0.007292, -0.992099, -0.069374, -0.104274 +4911, 0.007292, -0.992099, -0.069374, -0.104274 +4912, 0.007292, -0.992099, -0.069374, -0.104274 +4913, 0.007292, -0.992099, -0.069374, -0.104274 +4914, 0.007292, -0.992099, -0.069374, -0.104274 +4915, 0.007292, -0.992099, -0.069374, -0.104274 +4916, 0.007292, -0.992099, -0.069374, -0.104274 +4917, 0.007292, -0.992099, -0.069374, -0.104274 +4918, 0.007292, -0.992099, -0.069374, -0.104274 +4919, 0.007292, -0.992099, -0.069374, -0.104274 +4920, 0.007292, -0.992099, -0.069374, -0.104274 +4921, 0.007292, -0.992099, -0.069374, -0.104274 +4922, 0.007292, -0.992099, -0.069374, -0.104274 +4923, 0.007292, -0.992099, -0.069374, -0.104274 +4924, 0.007292, -0.992099, -0.069374, -0.104274 +4925, 0.007292, -0.992099, -0.069374, -0.104274 +4926, 0.007292, -0.992099, -0.069374, -0.104274 +4927, 0.007292, -0.992099, -0.069374, -0.104274 +4928, 0.007292, -0.992099, -0.069374, -0.104274 +4929, 0.007292, -0.992099, -0.069374, -0.104274 +4930, 0.007292, -0.992099, -0.069374, -0.104274 +4931, 0.007292, -0.992099, -0.069374, -0.104274 +4932, 0.007292, -0.992099, -0.069374, -0.104274 +4933, 0.007292, -0.992099, -0.069374, -0.104274 +4934, 0.007292, -0.992099, -0.069374, -0.104274 +4935, 0.007292, -0.992099, -0.069374, -0.104274 +4936, 0.007292, -0.992099, -0.069374, -0.104274 +4937, 0.007292, -0.992099, -0.069374, -0.104274 +4938, 0.007292, -0.992099, -0.069374, -0.104274 +4939, 0.007292, -0.992099, -0.069374, -0.104274 +4940, 0.007292, -0.992099, -0.069374, -0.104274 +4941, 0.007292, -0.992099, -0.069374, -0.104274 +4942, 0.007292, -0.992099, -0.069374, -0.104274 +4943, 0.007292, -0.992099, -0.069374, -0.104274 +4944, 0.007292, -0.992099, -0.069374, -0.104274 +4945, 0.007292, -0.992099, -0.069374, -0.104274 +4946, 0.007292, -0.992099, -0.069374, -0.104274 +4947, 0.007292, -0.992099, -0.069374, -0.104274 +4948, 0.007292, -0.992099, -0.069374, -0.104274 +4949, 0.007292, -0.992099, -0.069374, -0.104274 +4950, 0.007292, -0.992099, -0.069374, -0.104274 +4951, 0.007292, -0.992099, -0.069374, -0.104274 +4952, 0.007292, -0.992099, -0.069374, -0.104274 +4953, 0.007292, -0.992099, -0.069374, -0.104274 +4954, 0.007292, -0.992099, -0.069374, -0.104274 +4955, 0.007292, -0.992099, -0.069374, -0.104274 +4956, 0.007292, -0.992099, -0.069374, -0.104274 +4957, 0.007292, -0.992099, -0.069374, -0.104274 +4958, 0.007292, -0.992099, -0.069374, -0.104274 +4959, 0.007292, -0.992099, -0.069374, -0.104274 +4960, 0.007292, -0.992099, -0.069374, -0.104274 +4961, 0.007292, -0.992099, -0.069374, -0.104274 +4962, 0.007292, -0.992099, -0.069374, -0.104274 +4963, 0.007292, -0.992099, -0.069374, -0.104274 +4964, 0.007292, -0.992099, -0.069374, -0.104274 +4965, 0.007292, -0.992099, -0.069374, -0.104274 +4966, 0.007292, -0.992099, -0.069374, -0.104274 +4967, 0.007292, -0.992099, -0.069374, -0.104274 +4968, 0.007292, -0.992099, -0.069374, -0.104274 +4969, 0.007292, -0.992099, -0.069374, -0.104274 +4970, 0.007292, -0.992099, -0.069374, -0.104274 +4971, 0.007292, -0.992099, -0.069374, -0.104274 +4972, 0.007292, -0.992099, -0.069374, -0.104274 +4973, 0.007292, -0.992099, -0.069374, -0.104274 +4974, 0.007292, -0.992099, -0.069374, -0.104274 +4975, 0.007292, -0.992099, -0.069374, -0.104274 +4976, 0.007292, -0.992099, -0.069374, -0.104274 +4977, 0.007292, -0.992099, -0.069374, -0.104274 +4978, 0.007292, -0.992099, -0.069374, -0.104274 +4979, 0.007292, -0.992099, -0.069374, -0.104274 +4980, 0.007292, -0.992099, -0.069374, -0.104274 +4981, 0.007292, -0.992099, -0.069374, -0.104274 +4982, 0.007292, -0.992099, -0.069374, -0.104274 +4983, 0.007292, -0.992099, -0.069374, -0.104274 +4984, 0.007292, -0.992099, -0.069374, -0.104274 +4985, 0.007292, -0.992099, -0.069374, -0.104274 +4986, 0.007292, -0.992099, -0.069374, -0.104274 +4987, 0.007292, -0.992099, -0.069374, -0.104274 +4988, 0.007292, -0.992099, -0.069374, -0.104274 +4989, 0.007292, -0.992099, -0.069374, -0.104274 +4990, 0.007292, -0.992099, -0.069374, -0.104274 +4991, 0.007292, -0.992099, -0.069374, -0.104274 +4992, 0.007292, -0.992099, -0.069374, -0.104274 +4993, 0.007292, -0.992099, -0.069374, -0.104274 +4994, 0.007292, -0.992099, -0.069374, -0.104274 +4995, 0.007292, -0.992099, -0.069374, -0.104274 +4996, 0.007292, -0.992099, -0.069374, -0.104274 +4997, 0.007292, -0.992099, -0.069374, -0.104274 +4998, 0.007292, -0.992099, -0.069374, -0.104274 +4999, 0.007292, -0.992099, -0.069374, -0.104274 +5000, 0.011376, -0.987672, -0.086410, -0.130030 +5001, 0.011376, -0.987672, -0.086410, -0.130030 +5002, 0.011376, -0.987672, -0.086410, -0.130030 +5003, 0.011376, -0.987672, -0.086410, -0.130030 +5004, 0.011376, -0.987672, -0.086410, -0.130030 +5005, 0.011376, -0.987672, -0.086410, -0.130030 +5006, 0.011376, -0.987672, -0.086410, -0.130030 +5007, 0.011376, -0.987672, -0.086410, -0.130030 +5008, 0.011376, -0.987672, -0.086410, -0.130030 +5009, 0.011376, -0.987672, -0.086410, -0.130030 +5010, 0.011376, -0.987672, -0.086410, -0.130030 +5011, 0.011376, -0.987672, -0.086410, -0.130030 +5012, 0.011376, -0.987672, -0.086410, -0.130030 +5013, 0.011376, -0.987672, -0.086410, -0.130030 +5014, 0.011376, -0.987672, -0.086410, -0.130030 +5015, 0.011376, -0.987672, -0.086410, -0.130030 +5016, 0.011376, -0.987672, -0.086410, -0.130030 +5017, 0.011376, -0.987672, -0.086410, -0.130030 +5018, 0.011376, -0.987672, -0.086410, -0.130030 +5019, 0.011376, -0.987672, -0.086410, -0.130030 +5020, 0.011376, -0.987672, -0.086410, -0.130030 +5021, 0.011376, -0.987672, -0.086410, -0.130030 +5022, 0.011376, -0.987672, -0.086410, -0.130030 +5023, 0.011376, -0.987672, -0.086410, -0.130030 +5024, 0.011376, -0.987672, -0.086410, -0.130030 +5025, 0.011376, -0.987672, -0.086410, -0.130030 +5026, 0.011376, -0.987672, -0.086410, -0.130030 +5027, 0.011376, -0.987672, -0.086410, -0.130030 +5028, 0.011376, -0.987672, -0.086410, -0.130030 +5029, 0.011376, -0.987672, -0.086410, -0.130030 +5030, 0.011376, -0.987672, -0.086410, -0.130030 +5031, 0.011376, -0.987672, -0.086410, -0.130030 +5032, 0.011376, -0.987672, -0.086410, -0.130030 +5033, 0.011376, -0.987672, -0.086410, -0.130030 +5034, 0.011376, -0.987672, -0.086410, -0.130030 +5035, 0.011376, -0.987672, -0.086410, -0.130030 +5036, 0.011376, -0.987672, -0.086410, -0.130030 +5037, 0.011376, -0.987672, -0.086410, -0.130030 +5038, 0.011376, -0.987672, -0.086410, -0.130030 +5039, 0.011376, -0.987672, -0.086410, -0.130030 +5040, 0.011376, -0.987672, -0.086410, -0.130030 +5041, 0.011376, -0.987672, -0.086410, -0.130030 +5042, 0.011376, -0.987672, -0.086410, -0.130030 +5043, 0.011376, -0.987672, -0.086410, -0.130030 +5044, 0.011376, -0.987672, -0.086410, -0.130030 +5045, 0.011376, -0.987672, -0.086410, -0.130030 +5046, 0.011376, -0.987672, -0.086410, -0.130030 +5047, 0.011376, -0.987672, -0.086410, -0.130030 +5048, 0.011376, -0.987672, -0.086410, -0.130030 +5049, 0.011376, -0.987672, -0.086410, -0.130030 +5050, 0.011376, -0.987672, -0.086410, -0.130030 +5051, 0.011376, -0.987672, -0.086410, -0.130030 +5052, 0.011376, -0.987672, -0.086410, -0.130030 +5053, 0.011376, -0.987672, -0.086410, -0.130030 +5054, 0.011376, -0.987672, -0.086410, -0.130030 +5055, 0.011376, -0.987672, -0.086410, -0.130030 +5056, 0.011376, -0.987672, -0.086410, -0.130030 +5057, 0.011376, -0.987672, -0.086410, -0.130030 +5058, 0.011376, -0.987672, -0.086410, -0.130030 +5059, 0.011376, -0.987672, -0.086410, -0.130030 +5060, 0.011376, -0.987672, -0.086410, -0.130030 +5061, 0.011376, -0.987672, -0.086410, -0.130030 +5062, 0.011376, -0.987672, -0.086410, -0.130030 +5063, 0.011376, -0.987672, -0.086410, -0.130030 +5064, 0.011376, -0.987672, -0.086410, -0.130030 +5065, 0.011376, -0.987672, -0.086410, -0.130030 +5066, 0.011376, -0.987672, -0.086410, -0.130030 +5067, 0.011376, -0.987672, -0.086410, -0.130030 +5068, 0.011376, -0.987672, -0.086410, -0.130030 +5069, 0.011376, -0.987672, -0.086410, -0.130030 +5070, 0.011376, -0.987672, -0.086410, -0.130030 +5071, 0.011376, -0.987672, -0.086410, -0.130030 +5072, 0.011376, -0.987672, -0.086410, -0.130030 +5073, 0.011376, -0.987672, -0.086410, -0.130030 +5074, 0.011376, -0.987672, -0.086410, -0.130030 +5075, 0.011376, -0.987672, -0.086410, -0.130030 +5076, 0.011376, -0.987672, -0.086410, -0.130030 +5077, 0.011376, -0.987672, -0.086410, -0.130030 +5078, 0.011376, -0.987672, -0.086410, -0.130030 +5079, 0.011376, -0.987672, -0.086410, -0.130030 +5080, 0.011376, -0.987672, -0.086410, -0.130030 +5081, 0.011376, -0.987672, -0.086410, -0.130030 +5082, 0.011376, -0.987672, -0.086410, -0.130030 +5083, 0.011376, -0.987672, -0.086410, -0.130030 +5084, 0.011376, -0.987672, -0.086410, -0.130030 +5085, 0.011376, -0.987672, -0.086410, -0.130030 +5086, 0.011376, -0.987672, -0.086410, -0.130030 +5087, 0.011376, -0.987672, -0.086410, -0.130030 +5088, 0.011376, -0.987672, -0.086410, -0.130030 +5089, 0.011376, -0.987672, -0.086410, -0.130030 +5090, 0.011376, -0.987672, -0.086410, -0.130030 +5091, 0.011376, -0.987672, -0.086410, -0.130030 +5092, 0.011376, -0.987672, -0.086410, -0.130030 +5093, 0.011376, -0.987672, -0.086410, -0.130030 +5094, 0.011376, -0.987672, -0.086410, -0.130030 +5095, 0.011376, -0.987672, -0.086410, -0.130030 +5096, 0.011376, -0.987672, -0.086410, -0.130030 +5097, 0.011376, -0.987672, -0.086410, -0.130030 +5098, 0.011376, -0.987672, -0.086410, -0.130030 +5099, 0.011376, -0.987672, -0.086410, -0.130030 +5100, 0.016352, -0.982278, -0.103242, -0.155578 +5101, 0.016352, -0.982278, -0.103242, -0.155578 +5102, 0.016352, -0.982278, -0.103242, -0.155578 +5103, 0.016352, -0.982278, -0.103242, -0.155578 +5104, 0.016352, -0.982278, -0.103242, -0.155578 +5105, 0.016352, -0.982278, -0.103242, -0.155578 +5106, 0.016352, -0.982278, -0.103242, -0.155578 +5107, 0.016352, -0.982278, -0.103242, -0.155578 +5108, 0.016352, -0.982278, -0.103242, -0.155578 +5109, 0.016352, -0.982278, -0.103242, -0.155578 +5110, 0.016352, -0.982278, -0.103242, -0.155578 +5111, 0.016352, -0.982278, -0.103242, -0.155578 +5112, 0.016352, -0.982278, -0.103242, -0.155578 +5113, 0.016352, -0.982278, -0.103242, -0.155578 +5114, 0.016352, -0.982278, -0.103242, -0.155578 +5115, 0.016352, -0.982278, -0.103242, -0.155578 +5116, 0.016352, -0.982278, -0.103242, -0.155578 +5117, 0.016352, -0.982278, -0.103242, -0.155578 +5118, 0.016352, -0.982278, -0.103242, -0.155578 +5119, 0.016352, -0.982278, -0.103242, -0.155578 +5120, 0.016352, -0.982278, -0.103242, -0.155578 +5121, 0.016352, -0.982278, -0.103242, -0.155578 +5122, 0.016352, -0.982278, -0.103242, -0.155578 +5123, 0.016352, -0.982278, -0.103242, -0.155578 +5124, 0.016352, -0.982278, -0.103242, -0.155578 +5125, 0.016352, -0.982278, -0.103242, -0.155578 +5126, 0.016352, -0.982278, -0.103242, -0.155578 +5127, 0.016352, -0.982278, -0.103242, -0.155578 +5128, 0.016352, -0.982278, -0.103242, -0.155578 +5129, 0.016352, -0.982278, -0.103242, -0.155578 +5130, 0.016352, -0.982278, -0.103242, -0.155578 +5131, 0.016352, -0.982278, -0.103242, -0.155578 +5132, 0.016352, -0.982278, -0.103242, -0.155578 +5133, 0.016352, -0.982278, -0.103242, -0.155578 +5134, 0.016352, -0.982278, -0.103242, -0.155578 +5135, 0.016352, -0.982278, -0.103242, -0.155578 +5136, 0.016352, -0.982278, -0.103242, -0.155578 +5137, 0.016352, -0.982278, -0.103242, -0.155578 +5138, 0.016352, -0.982278, -0.103242, -0.155578 +5139, 0.016352, -0.982278, -0.103242, -0.155578 +5140, 0.016352, -0.982278, -0.103242, -0.155578 +5141, 0.016352, -0.982278, -0.103242, -0.155578 +5142, 0.016352, -0.982278, -0.103242, -0.155578 +5143, 0.016352, -0.982278, -0.103242, -0.155578 +5144, 0.016352, -0.982278, -0.103242, -0.155578 +5145, 0.016352, -0.982278, -0.103242, -0.155578 +5146, 0.016352, -0.982278, -0.103242, -0.155578 +5147, 0.016352, -0.982278, -0.103242, -0.155578 +5148, 0.016352, -0.982278, -0.103242, -0.155578 +5149, 0.016352, -0.982278, -0.103242, -0.155578 +5150, 0.016352, -0.982278, -0.103242, -0.155578 +5151, 0.016352, -0.982278, -0.103242, -0.155578 +5152, 0.016352, -0.982278, -0.103242, -0.155578 +5153, 0.016352, -0.982278, -0.103242, -0.155578 +5154, 0.016352, -0.982278, -0.103242, -0.155578 +5155, 0.016352, -0.982278, -0.103242, -0.155578 +5156, 0.016352, -0.982278, -0.103242, -0.155578 +5157, 0.016352, -0.982278, -0.103242, -0.155578 +5158, 0.016352, -0.982278, -0.103242, -0.155578 +5159, 0.016352, -0.982278, -0.103242, -0.155578 +5160, 0.016352, -0.982278, -0.103242, -0.155578 +5161, 0.016352, -0.982278, -0.103242, -0.155578 +5162, 0.016352, -0.982278, -0.103242, -0.155578 +5163, 0.016352, -0.982278, -0.103242, -0.155578 +5164, 0.016352, -0.982278, -0.103242, -0.155578 +5165, 0.016352, -0.982278, -0.103242, -0.155578 +5166, 0.016352, -0.982278, -0.103242, -0.155578 +5167, 0.016352, -0.982278, -0.103242, -0.155578 +5168, 0.016352, -0.982278, -0.103242, -0.155578 +5169, 0.016352, -0.982278, -0.103242, -0.155578 +5170, 0.016352, -0.982278, -0.103242, -0.155578 +5171, 0.016352, -0.982278, -0.103242, -0.155578 +5172, 0.016352, -0.982278, -0.103242, -0.155578 +5173, 0.016352, -0.982278, -0.103242, -0.155578 +5174, 0.016352, -0.982278, -0.103242, -0.155578 +5175, 0.016352, -0.982278, -0.103242, -0.155578 +5176, 0.016352, -0.982278, -0.103242, -0.155578 +5177, 0.016352, -0.982278, -0.103242, -0.155578 +5178, 0.016352, -0.982278, -0.103242, -0.155578 +5179, 0.016352, -0.982278, -0.103242, -0.155578 +5180, 0.016352, -0.982278, -0.103242, -0.155578 +5181, 0.016352, -0.982278, -0.103242, -0.155578 +5182, 0.016352, -0.982278, -0.103242, -0.155578 +5183, 0.016352, -0.982278, -0.103242, -0.155578 +5184, 0.016352, -0.982278, -0.103242, -0.155578 +5185, 0.016352, -0.982278, -0.103242, -0.155578 +5186, 0.016352, -0.982278, -0.103242, -0.155578 +5187, 0.016352, -0.982278, -0.103242, -0.155578 +5188, 0.016352, -0.982278, -0.103242, -0.155578 +5189, 0.016352, -0.982278, -0.103242, -0.155578 +5190, 0.016352, -0.982278, -0.103242, -0.155578 +5191, 0.016352, -0.982278, -0.103242, -0.155578 +5192, 0.016352, -0.982278, -0.103242, -0.155578 +5193, 0.016352, -0.982278, -0.103242, -0.155578 +5194, 0.016352, -0.982278, -0.103242, -0.155578 +5195, 0.016352, -0.982278, -0.103242, -0.155578 +5196, 0.016352, -0.982278, -0.103242, -0.155578 +5197, 0.016352, -0.982278, -0.103242, -0.155578 +5198, 0.016352, -0.982278, -0.103242, -0.155578 +5199, 0.016352, -0.982278, -0.103242, -0.155578 +5200, 0.022209, -0.975926, -0.119829, -0.180877 +5201, 0.022209, -0.975926, -0.119829, -0.180877 +5202, 0.022209, -0.975926, -0.119829, -0.180877 +5203, 0.022209, -0.975926, -0.119829, -0.180877 +5204, 0.022209, -0.975926, -0.119829, -0.180877 +5205, 0.022209, -0.975926, -0.119829, -0.180877 +5206, 0.022209, -0.975926, -0.119829, -0.180877 +5207, 0.022209, -0.975926, -0.119829, -0.180877 +5208, 0.022209, -0.975926, -0.119829, -0.180877 +5209, 0.022209, -0.975926, -0.119829, -0.180877 +5210, 0.022209, -0.975926, -0.119829, -0.180877 +5211, 0.022209, -0.975926, -0.119829, -0.180877 +5212, 0.022209, -0.975926, -0.119829, -0.180877 +5213, 0.022209, -0.975926, -0.119829, -0.180877 +5214, 0.022209, -0.975926, -0.119829, -0.180877 +5215, 0.022209, -0.975926, -0.119829, -0.180877 +5216, 0.022209, -0.975926, -0.119829, -0.180877 +5217, 0.022209, -0.975926, -0.119829, -0.180877 +5218, 0.022209, -0.975926, -0.119829, -0.180877 +5219, 0.022209, -0.975926, -0.119829, -0.180877 +5220, 0.022209, -0.975926, -0.119829, -0.180877 +5221, 0.022209, -0.975926, -0.119829, -0.180877 +5222, 0.022209, -0.975926, -0.119829, -0.180877 +5223, 0.022209, -0.975926, -0.119829, -0.180877 +5224, 0.022209, -0.975926, -0.119829, -0.180877 +5225, 0.022209, -0.975926, -0.119829, -0.180877 +5226, 0.022209, -0.975926, -0.119829, -0.180877 +5227, 0.022209, -0.975926, -0.119829, -0.180877 +5228, 0.022209, -0.975926, -0.119829, -0.180877 +5229, 0.022209, -0.975926, -0.119829, -0.180877 +5230, 0.022209, -0.975926, -0.119829, -0.180877 +5231, 0.022209, -0.975926, -0.119829, -0.180877 +5232, 0.022209, -0.975926, -0.119829, -0.180877 +5233, 0.022209, -0.975926, -0.119829, -0.180877 +5234, 0.022209, -0.975926, -0.119829, -0.180877 +5235, 0.022209, -0.975926, -0.119829, -0.180877 +5236, 0.022209, -0.975926, -0.119829, -0.180877 +5237, 0.022209, -0.975926, -0.119829, -0.180877 +5238, 0.022209, -0.975926, -0.119829, -0.180877 +5239, 0.022209, -0.975926, -0.119829, -0.180877 +5240, 0.022209, -0.975926, -0.119829, -0.180877 +5241, 0.022209, -0.975926, -0.119829, -0.180877 +5242, 0.022209, -0.975926, -0.119829, -0.180877 +5243, 0.022209, -0.975926, -0.119829, -0.180877 +5244, 0.022209, -0.975926, -0.119829, -0.180877 +5245, 0.022209, -0.975926, -0.119829, -0.180877 +5246, 0.022209, -0.975926, -0.119829, -0.180877 +5247, 0.022209, -0.975926, -0.119829, -0.180877 +5248, 0.022209, -0.975926, -0.119829, -0.180877 +5249, 0.022209, -0.975926, -0.119829, -0.180877 +5250, 0.022209, -0.975926, -0.119829, -0.180877 +5251, 0.022209, -0.975926, -0.119829, -0.180877 +5252, 0.022209, -0.975926, -0.119829, -0.180877 +5253, 0.022209, -0.975926, -0.119829, -0.180877 +5254, 0.022209, -0.975926, -0.119829, -0.180877 +5255, 0.022209, -0.975926, -0.119829, -0.180877 +5256, 0.022209, -0.975926, -0.119829, -0.180877 +5257, 0.022209, -0.975926, -0.119829, -0.180877 +5258, 0.022209, -0.975926, -0.119829, -0.180877 +5259, 0.022209, -0.975926, -0.119829, -0.180877 +5260, 0.022209, -0.975926, -0.119829, -0.180877 +5261, 0.022209, -0.975926, -0.119829, -0.180877 +5262, 0.022209, -0.975926, -0.119829, -0.180877 +5263, 0.022209, -0.975926, -0.119829, -0.180877 +5264, 0.022209, -0.975926, -0.119829, -0.180877 +5265, 0.022209, -0.975926, -0.119829, -0.180877 +5266, 0.022209, -0.975926, -0.119829, -0.180877 +5267, 0.022209, -0.975926, -0.119829, -0.180877 +5268, 0.022209, -0.975926, -0.119829, -0.180877 +5269, 0.022209, -0.975926, -0.119829, -0.180877 +5270, 0.022209, -0.975926, -0.119829, -0.180877 +5271, 0.022209, -0.975926, -0.119829, -0.180877 +5272, 0.022209, -0.975926, -0.119829, -0.180877 +5273, 0.022209, -0.975926, -0.119829, -0.180877 +5274, 0.022209, -0.975926, -0.119829, -0.180877 +5275, 0.022209, -0.975926, -0.119829, -0.180877 +5276, 0.022209, -0.975926, -0.119829, -0.180877 +5277, 0.022209, -0.975926, -0.119829, -0.180877 +5278, 0.022209, -0.975926, -0.119829, -0.180877 +5279, 0.022209, -0.975926, -0.119829, -0.180877 +5280, 0.022209, -0.975926, -0.119829, -0.180877 +5281, 0.022209, -0.975926, -0.119829, -0.180877 +5282, 0.022209, -0.975926, -0.119829, -0.180877 +5283, 0.022209, -0.975926, -0.119829, -0.180877 +5284, 0.022209, -0.975926, -0.119829, -0.180877 +5285, 0.022209, -0.975926, -0.119829, -0.180877 +5286, 0.022209, -0.975926, -0.119829, -0.180877 +5287, 0.022209, -0.975926, -0.119829, -0.180877 +5288, 0.022209, -0.975926, -0.119829, -0.180877 +5289, 0.022209, -0.975926, -0.119829, -0.180877 +5290, 0.022209, -0.975926, -0.119829, -0.180877 +5291, 0.022209, -0.975926, -0.119829, -0.180877 +5292, 0.022209, -0.975926, -0.119829, -0.180877 +5293, 0.022209, -0.975926, -0.119829, -0.180877 +5294, 0.022209, -0.975926, -0.119829, -0.180877 +5295, 0.022209, -0.975926, -0.119829, -0.180877 +5296, 0.022209, -0.975926, -0.119829, -0.180877 +5297, 0.022209, -0.975926, -0.119829, -0.180877 +5298, 0.022209, -0.975926, -0.119829, -0.180877 +5299, 0.022209, -0.975926, -0.119829, -0.180877 +5300, 0.028936, -0.968628, -0.136132, -0.205888 +5301, 0.028936, -0.968628, -0.136132, -0.205888 +5302, 0.028936, -0.968628, -0.136132, -0.205888 +5303, 0.028936, -0.968628, -0.136132, -0.205888 +5304, 0.028936, -0.968628, -0.136132, -0.205888 +5305, 0.028936, -0.968628, -0.136132, -0.205888 +5306, 0.028936, -0.968628, -0.136132, -0.205888 +5307, 0.028936, -0.968628, -0.136132, -0.205888 +5308, 0.028936, -0.968628, -0.136132, -0.205888 +5309, 0.028936, -0.968628, -0.136132, -0.205888 +5310, 0.028936, -0.968628, -0.136132, -0.205888 +5311, 0.028936, -0.968628, -0.136132, -0.205888 +5312, 0.028936, -0.968628, -0.136132, -0.205888 +5313, 0.028936, -0.968628, -0.136132, -0.205888 +5314, 0.028936, -0.968628, -0.136132, -0.205888 +5315, 0.028936, -0.968628, -0.136132, -0.205888 +5316, 0.028936, -0.968628, -0.136132, -0.205888 +5317, 0.028936, -0.968628, -0.136132, -0.205888 +5318, 0.028936, -0.968628, -0.136132, -0.205888 +5319, 0.028936, -0.968628, -0.136132, -0.205888 +5320, 0.028936, -0.968628, -0.136132, -0.205888 +5321, 0.028936, -0.968628, -0.136132, -0.205888 +5322, 0.028936, -0.968628, -0.136132, -0.205888 +5323, 0.028936, -0.968628, -0.136132, -0.205888 +5324, 0.028936, -0.968628, -0.136132, -0.205888 +5325, 0.028936, -0.968628, -0.136132, -0.205888 +5326, 0.028936, -0.968628, -0.136132, -0.205888 +5327, 0.028936, -0.968628, -0.136132, -0.205888 +5328, 0.028936, -0.968628, -0.136132, -0.205888 +5329, 0.028936, -0.968628, -0.136132, -0.205888 +5330, 0.028936, -0.968628, -0.136132, -0.205888 +5331, 0.028936, -0.968628, -0.136132, -0.205888 +5332, 0.028936, -0.968628, -0.136132, -0.205888 +5333, 0.028936, -0.968628, -0.136132, -0.205888 +5334, 0.028936, -0.968628, -0.136132, -0.205888 +5335, 0.028936, -0.968628, -0.136132, -0.205888 +5336, 0.028936, -0.968628, -0.136132, -0.205888 +5337, 0.028936, -0.968628, -0.136132, -0.205888 +5338, 0.028936, -0.968628, -0.136132, -0.205888 +5339, 0.028936, -0.968628, -0.136132, -0.205888 +5340, 0.028936, -0.968628, -0.136132, -0.205888 +5341, 0.028936, -0.968628, -0.136132, -0.205888 +5342, 0.028936, -0.968628, -0.136132, -0.205888 +5343, 0.028936, -0.968628, -0.136132, -0.205888 +5344, 0.028936, -0.968628, -0.136132, -0.205888 +5345, 0.028936, -0.968628, -0.136132, -0.205888 +5346, 0.028936, -0.968628, -0.136132, -0.205888 +5347, 0.028936, -0.968628, -0.136132, -0.205888 +5348, 0.028936, -0.968628, -0.136132, -0.205888 +5349, 0.028936, -0.968628, -0.136132, -0.205888 +5350, 0.028936, -0.968628, -0.136132, -0.205888 +5351, 0.028936, -0.968628, -0.136132, -0.205888 +5352, 0.028936, -0.968628, -0.136132, -0.205888 +5353, 0.028936, -0.968628, -0.136132, -0.205888 +5354, 0.028936, -0.968628, -0.136132, -0.205888 +5355, 0.028936, -0.968628, -0.136132, -0.205888 +5356, 0.028936, -0.968628, -0.136132, -0.205888 +5357, 0.028936, -0.968628, -0.136132, -0.205888 +5358, 0.028936, -0.968628, -0.136132, -0.205888 +5359, 0.028936, -0.968628, -0.136132, -0.205888 +5360, 0.028936, -0.968628, -0.136132, -0.205888 +5361, 0.028936, -0.968628, -0.136132, -0.205888 +5362, 0.028936, -0.968628, -0.136132, -0.205888 +5363, 0.028936, -0.968628, -0.136132, -0.205888 +5364, 0.028936, -0.968628, -0.136132, -0.205888 +5365, 0.028936, -0.968628, -0.136132, -0.205888 +5366, 0.028936, -0.968628, -0.136132, -0.205888 +5367, 0.028936, -0.968628, -0.136132, -0.205888 +5368, 0.028936, -0.968628, -0.136132, -0.205888 +5369, 0.028936, -0.968628, -0.136132, -0.205888 +5370, 0.028936, -0.968628, -0.136132, -0.205888 +5371, 0.028936, -0.968628, -0.136132, -0.205888 +5372, 0.028936, -0.968628, -0.136132, -0.205888 +5373, 0.028936, -0.968628, -0.136132, -0.205888 +5374, 0.028936, -0.968628, -0.136132, -0.205888 +5375, 0.028936, -0.968628, -0.136132, -0.205888 +5376, 0.028936, -0.968628, -0.136132, -0.205888 +5377, 0.028936, -0.968628, -0.136132, -0.205888 +5378, 0.028936, -0.968628, -0.136132, -0.205888 +5379, 0.028936, -0.968628, -0.136132, -0.205888 +5380, 0.028936, -0.968628, -0.136132, -0.205888 +5381, 0.028936, -0.968628, -0.136132, -0.205888 +5382, 0.028936, -0.968628, -0.136132, -0.205888 +5383, 0.028936, -0.968628, -0.136132, -0.205888 +5384, 0.028936, -0.968628, -0.136132, -0.205888 +5385, 0.028936, -0.968628, -0.136132, -0.205888 +5386, 0.028936, -0.968628, -0.136132, -0.205888 +5387, 0.028936, -0.968628, -0.136132, -0.205888 +5388, 0.028936, -0.968628, -0.136132, -0.205888 +5389, 0.028936, -0.968628, -0.136132, -0.205888 +5390, 0.028936, -0.968628, -0.136132, -0.205888 +5391, 0.028936, -0.968628, -0.136132, -0.205888 +5392, 0.028936, -0.968628, -0.136132, -0.205888 +5393, 0.028936, -0.968628, -0.136132, -0.205888 +5394, 0.028936, -0.968628, -0.136132, -0.205888 +5395, 0.028936, -0.968628, -0.136132, -0.205888 +5396, 0.028936, -0.968628, -0.136132, -0.205888 +5397, 0.028936, -0.968628, -0.136132, -0.205888 +5398, 0.028936, -0.968628, -0.136132, -0.205888 +5399, 0.028936, -0.968628, -0.136132, -0.205888 +5400, 0.036519, -0.960398, -0.152112, -0.230571 +5401, 0.036519, -0.960398, -0.152112, -0.230571 +5402, 0.036519, -0.960398, -0.152112, -0.230571 +5403, 0.036519, -0.960398, -0.152112, -0.230571 +5404, 0.036519, -0.960398, -0.152112, -0.230571 +5405, 0.036519, -0.960398, -0.152112, -0.230571 +5406, 0.036519, -0.960398, -0.152112, -0.230571 +5407, 0.036519, -0.960398, -0.152112, -0.230571 +5408, 0.036519, -0.960398, -0.152112, -0.230571 +5409, 0.036519, -0.960398, -0.152112, -0.230571 +5410, 0.036519, -0.960398, -0.152112, -0.230571 +5411, 0.036519, -0.960398, -0.152112, -0.230571 +5412, 0.036519, -0.960398, -0.152112, -0.230571 +5413, 0.036519, -0.960398, -0.152112, -0.230571 +5414, 0.036519, -0.960398, -0.152112, -0.230571 +5415, 0.036519, -0.960398, -0.152112, -0.230571 +5416, 0.036519, -0.960398, -0.152112, -0.230571 +5417, 0.036519, -0.960398, -0.152112, -0.230571 +5418, 0.036519, -0.960398, -0.152112, -0.230571 +5419, 0.036519, -0.960398, -0.152112, -0.230571 +5420, 0.036519, -0.960398, -0.152112, -0.230571 +5421, 0.036519, -0.960398, -0.152112, -0.230571 +5422, 0.036519, -0.960398, -0.152112, -0.230571 +5423, 0.036519, -0.960398, -0.152112, -0.230571 +5424, 0.036519, -0.960398, -0.152112, -0.230571 +5425, 0.036519, -0.960398, -0.152112, -0.230571 +5426, 0.036519, -0.960398, -0.152112, -0.230571 +5427, 0.036519, -0.960398, -0.152112, -0.230571 +5428, 0.036519, -0.960398, -0.152112, -0.230571 +5429, 0.036519, -0.960398, -0.152112, -0.230571 +5430, 0.036519, -0.960398, -0.152112, -0.230571 +5431, 0.036519, -0.960398, -0.152112, -0.230571 +5432, 0.036519, -0.960398, -0.152112, -0.230571 +5433, 0.036519, -0.960398, -0.152112, -0.230571 +5434, 0.036519, -0.960398, -0.152112, -0.230571 +5435, 0.036519, -0.960398, -0.152112, -0.230571 +5436, 0.036519, -0.960398, -0.152112, -0.230571 +5437, 0.036519, -0.960398, -0.152112, -0.230571 +5438, 0.036519, -0.960398, -0.152112, -0.230571 +5439, 0.036519, -0.960398, -0.152112, -0.230571 +5440, 0.036519, -0.960398, -0.152112, -0.230571 +5441, 0.036519, -0.960398, -0.152112, -0.230571 +5442, 0.036519, -0.960398, -0.152112, -0.230571 +5443, 0.036519, -0.960398, -0.152112, -0.230571 +5444, 0.036519, -0.960398, -0.152112, -0.230571 +5445, 0.036519, -0.960398, -0.152112, -0.230571 +5446, 0.036519, -0.960398, -0.152112, -0.230571 +5447, 0.036519, -0.960398, -0.152112, -0.230571 +5448, 0.036519, -0.960398, -0.152112, -0.230571 +5449, 0.036519, -0.960398, -0.152112, -0.230571 +5450, 0.036519, -0.960398, -0.152112, -0.230571 +5451, 0.036519, -0.960398, -0.152112, -0.230571 +5452, 0.036519, -0.960398, -0.152112, -0.230571 +5453, 0.036519, -0.960398, -0.152112, -0.230571 +5454, 0.036519, -0.960398, -0.152112, -0.230571 +5455, 0.036519, -0.960398, -0.152112, -0.230571 +5456, 0.036519, -0.960398, -0.152112, -0.230571 +5457, 0.036519, -0.960398, -0.152112, -0.230571 +5458, 0.036519, -0.960398, -0.152112, -0.230571 +5459, 0.036519, -0.960398, -0.152112, -0.230571 +5460, 0.036519, -0.960398, -0.152112, -0.230571 +5461, 0.036519, -0.960398, -0.152112, -0.230571 +5462, 0.036519, -0.960398, -0.152112, -0.230571 +5463, 0.036519, -0.960398, -0.152112, -0.230571 +5464, 0.036519, -0.960398, -0.152112, -0.230571 +5465, 0.036519, -0.960398, -0.152112, -0.230571 +5466, 0.036519, -0.960398, -0.152112, -0.230571 +5467, 0.036519, -0.960398, -0.152112, -0.230571 +5468, 0.036519, -0.960398, -0.152112, -0.230571 +5469, 0.036519, -0.960398, -0.152112, -0.230571 +5470, 0.036519, -0.960398, -0.152112, -0.230571 +5471, 0.036519, -0.960398, -0.152112, -0.230571 +5472, 0.036519, -0.960398, -0.152112, -0.230571 +5473, 0.036519, -0.960398, -0.152112, -0.230571 +5474, 0.036519, -0.960398, -0.152112, -0.230571 +5475, 0.036519, -0.960398, -0.152112, -0.230571 +5476, 0.036519, -0.960398, -0.152112, -0.230571 +5477, 0.036519, -0.960398, -0.152112, -0.230571 +5478, 0.036519, -0.960398, -0.152112, -0.230571 +5479, 0.036519, -0.960398, -0.152112, -0.230571 +5480, 0.036519, -0.960398, -0.152112, -0.230571 +5481, 0.036519, -0.960398, -0.152112, -0.230571 +5482, 0.036519, -0.960398, -0.152112, -0.230571 +5483, 0.036519, -0.960398, -0.152112, -0.230571 +5484, 0.036519, -0.960398, -0.152112, -0.230571 +5485, 0.036519, -0.960398, -0.152112, -0.230571 +5486, 0.036519, -0.960398, -0.152112, -0.230571 +5487, 0.036519, -0.960398, -0.152112, -0.230571 +5488, 0.036519, -0.960398, -0.152112, -0.230571 +5489, 0.036519, -0.960398, -0.152112, -0.230571 +5490, 0.036519, -0.960398, -0.152112, -0.230571 +5491, 0.036519, -0.960398, -0.152112, -0.230571 +5492, 0.036519, -0.960398, -0.152112, -0.230571 +5493, 0.036519, -0.960398, -0.152112, -0.230571 +5494, 0.036519, -0.960398, -0.152112, -0.230571 +5495, 0.036519, -0.960398, -0.152112, -0.230571 +5496, 0.036519, -0.960398, -0.152112, -0.230571 +5497, 0.036519, -0.960398, -0.152112, -0.230571 +5498, 0.036519, -0.960398, -0.152112, -0.230571 +5499, 0.036519, -0.960398, -0.152112, -0.230571 +5500, 0.044943, -0.951251, -0.167731, -0.254887 +5501, 0.044943, -0.951251, -0.167731, -0.254887 +5502, 0.044943, -0.951251, -0.167731, -0.254887 +5503, 0.044943, -0.951251, -0.167731, -0.254887 +5504, 0.044943, -0.951251, -0.167731, -0.254887 +5505, 0.044943, -0.951251, -0.167731, -0.254887 +5506, 0.044943, -0.951251, -0.167731, -0.254887 +5507, 0.044943, -0.951251, -0.167731, -0.254887 +5508, 0.044943, -0.951251, -0.167731, -0.254887 +5509, 0.044943, -0.951251, -0.167731, -0.254887 +5510, 0.044943, -0.951251, -0.167731, -0.254887 +5511, 0.044943, -0.951251, -0.167731, -0.254887 +5512, 0.044943, -0.951251, -0.167731, -0.254887 +5513, 0.044943, -0.951251, -0.167731, -0.254887 +5514, 0.044943, -0.951251, -0.167731, -0.254887 +5515, 0.044943, -0.951251, -0.167731, -0.254887 +5516, 0.044943, -0.951251, -0.167731, -0.254887 +5517, 0.044943, -0.951251, -0.167731, -0.254887 +5518, 0.044943, -0.951251, -0.167731, -0.254887 +5519, 0.044943, -0.951251, -0.167731, -0.254887 +5520, 0.044943, -0.951251, -0.167731, -0.254887 +5521, 0.044943, -0.951251, -0.167731, -0.254887 +5522, 0.044943, -0.951251, -0.167731, -0.254887 +5523, 0.044943, -0.951251, -0.167731, -0.254887 +5524, 0.044943, -0.951251, -0.167731, -0.254887 +5525, 0.044943, -0.951251, -0.167731, -0.254887 +5526, 0.044943, -0.951251, -0.167731, -0.254887 +5527, 0.044943, -0.951251, -0.167731, -0.254887 +5528, 0.044943, -0.951251, -0.167731, -0.254887 +5529, 0.044943, -0.951251, -0.167731, -0.254887 +5530, 0.044943, -0.951251, -0.167731, -0.254887 +5531, 0.044943, -0.951251, -0.167731, -0.254887 +5532, 0.044943, -0.951251, -0.167731, -0.254887 +5533, 0.044943, -0.951251, -0.167731, -0.254887 +5534, 0.044943, -0.951251, -0.167731, -0.254887 +5535, 0.044943, -0.951251, -0.167731, -0.254887 +5536, 0.044943, -0.951251, -0.167731, -0.254887 +5537, 0.044943, -0.951251, -0.167731, -0.254887 +5538, 0.044943, -0.951251, -0.167731, -0.254887 +5539, 0.044943, -0.951251, -0.167731, -0.254887 +5540, 0.044943, -0.951251, -0.167731, -0.254887 +5541, 0.044943, -0.951251, -0.167731, -0.254887 +5542, 0.044943, -0.951251, -0.167731, -0.254887 +5543, 0.044943, -0.951251, -0.167731, -0.254887 +5544, 0.044943, -0.951251, -0.167731, -0.254887 +5545, 0.044943, -0.951251, -0.167731, -0.254887 +5546, 0.044943, -0.951251, -0.167731, -0.254887 +5547, 0.044943, -0.951251, -0.167731, -0.254887 +5548, 0.044943, -0.951251, -0.167731, -0.254887 +5549, 0.044943, -0.951251, -0.167731, -0.254887 +5550, 0.044943, -0.951251, -0.167731, -0.254887 +5551, 0.044943, -0.951251, -0.167731, -0.254887 +5552, 0.044943, -0.951251, -0.167731, -0.254887 +5553, 0.044943, -0.951251, -0.167731, -0.254887 +5554, 0.044943, -0.951251, -0.167731, -0.254887 +5555, 0.044943, -0.951251, -0.167731, -0.254887 +5556, 0.044943, -0.951251, -0.167731, -0.254887 +5557, 0.044943, -0.951251, -0.167731, -0.254887 +5558, 0.044943, -0.951251, -0.167731, -0.254887 +5559, 0.044943, -0.951251, -0.167731, -0.254887 +5560, 0.044943, -0.951251, -0.167731, -0.254887 +5561, 0.044943, -0.951251, -0.167731, -0.254887 +5562, 0.044943, -0.951251, -0.167731, -0.254887 +5563, 0.044943, -0.951251, -0.167731, -0.254887 +5564, 0.044943, -0.951251, -0.167731, -0.254887 +5565, 0.044943, -0.951251, -0.167731, -0.254887 +5566, 0.044943, -0.951251, -0.167731, -0.254887 +5567, 0.044943, -0.951251, -0.167731, -0.254887 +5568, 0.044943, -0.951251, -0.167731, -0.254887 +5569, 0.044943, -0.951251, -0.167731, -0.254887 +5570, 0.044943, -0.951251, -0.167731, -0.254887 +5571, 0.044943, -0.951251, -0.167731, -0.254887 +5572, 0.044943, -0.951251, -0.167731, -0.254887 +5573, 0.044943, -0.951251, -0.167731, -0.254887 +5574, 0.044943, -0.951251, -0.167731, -0.254887 +5575, 0.044943, -0.951251, -0.167731, -0.254887 +5576, 0.044943, -0.951251, -0.167731, -0.254887 +5577, 0.044943, -0.951251, -0.167731, -0.254887 +5578, 0.044943, -0.951251, -0.167731, -0.254887 +5579, 0.044943, -0.951251, -0.167731, -0.254887 +5580, 0.044943, -0.951251, -0.167731, -0.254887 +5581, 0.044943, -0.951251, -0.167731, -0.254887 +5582, 0.044943, -0.951251, -0.167731, -0.254887 +5583, 0.044943, -0.951251, -0.167731, -0.254887 +5584, 0.044943, -0.951251, -0.167731, -0.254887 +5585, 0.044943, -0.951251, -0.167731, -0.254887 +5586, 0.044943, -0.951251, -0.167731, -0.254887 +5587, 0.044943, -0.951251, -0.167731, -0.254887 +5588, 0.044943, -0.951251, -0.167731, -0.254887 +5589, 0.044943, -0.951251, -0.167731, -0.254887 +5590, 0.044943, -0.951251, -0.167731, -0.254887 +5591, 0.044943, -0.951251, -0.167731, -0.254887 +5592, 0.044943, -0.951251, -0.167731, -0.254887 +5593, 0.044943, -0.951251, -0.167731, -0.254887 +5594, 0.044943, -0.951251, -0.167731, -0.254887 +5595, 0.044943, -0.951251, -0.167731, -0.254887 +5596, 0.044943, -0.951251, -0.167731, -0.254887 +5597, 0.044943, -0.951251, -0.167731, -0.254887 +5598, 0.044943, -0.951251, -0.167731, -0.254887 +5599, 0.044943, -0.951251, -0.167731, -0.254887 +5600, 0.054193, -0.941204, -0.182951, -0.278797 +5601, 0.054193, -0.941204, -0.182951, -0.278797 +5602, 0.054193, -0.941204, -0.182951, -0.278797 +5603, 0.054193, -0.941204, -0.182951, -0.278797 +5604, 0.054193, -0.941204, -0.182951, -0.278797 +5605, 0.054193, -0.941204, -0.182951, -0.278797 +5606, 0.054193, -0.941204, -0.182951, -0.278797 +5607, 0.054193, -0.941204, -0.182951, -0.278797 +5608, 0.054193, -0.941204, -0.182951, -0.278797 +5609, 0.054193, -0.941204, -0.182951, -0.278797 +5610, 0.054193, -0.941204, -0.182951, -0.278797 +5611, 0.054193, -0.941204, -0.182951, -0.278797 +5612, 0.054193, -0.941204, -0.182951, -0.278797 +5613, 0.054193, -0.941204, -0.182951, -0.278797 +5614, 0.054193, -0.941204, -0.182951, -0.278797 +5615, 0.054193, -0.941204, -0.182951, -0.278797 +5616, 0.054193, -0.941204, -0.182951, -0.278797 +5617, 0.054193, -0.941204, -0.182951, -0.278797 +5618, 0.054193, -0.941204, -0.182951, -0.278797 +5619, 0.054193, -0.941204, -0.182951, -0.278797 +5620, 0.054193, -0.941204, -0.182951, -0.278797 +5621, 0.054193, -0.941204, -0.182951, -0.278797 +5622, 0.054193, -0.941204, -0.182951, -0.278797 +5623, 0.054193, -0.941204, -0.182951, -0.278797 +5624, 0.054193, -0.941204, -0.182951, -0.278797 +5625, 0.054193, -0.941204, -0.182951, -0.278797 +5626, 0.054193, -0.941204, -0.182951, -0.278797 +5627, 0.054193, -0.941204, -0.182951, -0.278797 +5628, 0.054193, -0.941204, -0.182951, -0.278797 +5629, 0.054193, -0.941204, -0.182951, -0.278797 +5630, 0.054193, -0.941204, -0.182951, -0.278797 +5631, 0.054193, -0.941204, -0.182951, -0.278797 +5632, 0.054193, -0.941204, -0.182951, -0.278797 +5633, 0.054193, -0.941204, -0.182951, -0.278797 +5634, 0.054193, -0.941204, -0.182951, -0.278797 +5635, 0.054193, -0.941204, -0.182951, -0.278797 +5636, 0.054193, -0.941204, -0.182951, -0.278797 +5637, 0.054193, -0.941204, -0.182951, -0.278797 +5638, 0.054193, -0.941204, -0.182951, -0.278797 +5639, 0.054193, -0.941204, -0.182951, -0.278797 +5640, 0.054193, -0.941204, -0.182951, -0.278797 +5641, 0.054193, -0.941204, -0.182951, -0.278797 +5642, 0.054193, -0.941204, -0.182951, -0.278797 +5643, 0.054193, -0.941204, -0.182951, -0.278797 +5644, 0.054193, -0.941204, -0.182951, -0.278797 +5645, 0.054193, -0.941204, -0.182951, -0.278797 +5646, 0.054193, -0.941204, -0.182951, -0.278797 +5647, 0.054193, -0.941204, -0.182951, -0.278797 +5648, 0.054193, -0.941204, -0.182951, -0.278797 +5649, 0.054193, -0.941204, -0.182951, -0.278797 +5650, 0.054193, -0.941204, -0.182951, -0.278797 +5651, 0.054193, -0.941204, -0.182951, -0.278797 +5652, 0.054193, -0.941204, -0.182951, -0.278797 +5653, 0.054193, -0.941204, -0.182951, -0.278797 +5654, 0.054193, -0.941204, -0.182951, -0.278797 +5655, 0.054193, -0.941204, -0.182951, -0.278797 +5656, 0.054193, -0.941204, -0.182951, -0.278797 +5657, 0.054193, -0.941204, -0.182951, -0.278797 +5658, 0.054193, -0.941204, -0.182951, -0.278797 +5659, 0.054193, -0.941204, -0.182951, -0.278797 +5660, 0.054193, -0.941204, -0.182951, -0.278797 +5661, 0.054193, -0.941204, -0.182951, -0.278797 +5662, 0.054193, -0.941204, -0.182951, -0.278797 +5663, 0.054193, -0.941204, -0.182951, -0.278797 +5664, 0.054193, -0.941204, -0.182951, -0.278797 +5665, 0.054193, -0.941204, -0.182951, -0.278797 +5666, 0.054193, -0.941204, -0.182951, -0.278797 +5667, 0.054193, -0.941204, -0.182951, -0.278797 +5668, 0.054193, -0.941204, -0.182951, -0.278797 +5669, 0.054193, -0.941204, -0.182951, -0.278797 +5670, 0.054193, -0.941204, -0.182951, -0.278797 +5671, 0.054193, -0.941204, -0.182951, -0.278797 +5672, 0.054193, -0.941204, -0.182951, -0.278797 +5673, 0.054193, -0.941204, -0.182951, -0.278797 +5674, 0.054193, -0.941204, -0.182951, -0.278797 +5675, 0.054193, -0.941204, -0.182951, -0.278797 +5676, 0.054193, -0.941204, -0.182951, -0.278797 +5677, 0.054193, -0.941204, -0.182951, -0.278797 +5678, 0.054193, -0.941204, -0.182951, -0.278797 +5679, 0.054193, -0.941204, -0.182951, -0.278797 +5680, 0.054193, -0.941204, -0.182951, -0.278797 +5681, 0.054193, -0.941204, -0.182951, -0.278797 +5682, 0.054193, -0.941204, -0.182951, -0.278797 +5683, 0.054193, -0.941204, -0.182951, -0.278797 +5684, 0.054193, -0.941204, -0.182951, -0.278797 +5685, 0.054193, -0.941204, -0.182951, -0.278797 +5686, 0.054193, -0.941204, -0.182951, -0.278797 +5687, 0.054193, -0.941204, -0.182951, -0.278797 +5688, 0.054193, -0.941204, -0.182951, -0.278797 +5689, 0.054193, -0.941204, -0.182951, -0.278797 +5690, 0.054193, -0.941204, -0.182951, -0.278797 +5691, 0.054193, -0.941204, -0.182951, -0.278797 +5692, 0.054193, -0.941204, -0.182951, -0.278797 +5693, 0.054193, -0.941204, -0.182951, -0.278797 +5694, 0.054193, -0.941204, -0.182951, -0.278797 +5695, 0.054193, -0.941204, -0.182951, -0.278797 +5696, 0.054193, -0.941204, -0.182951, -0.278797 +5697, 0.054193, -0.941204, -0.182951, -0.278797 +5698, 0.054193, -0.941204, -0.182951, -0.278797 +5699, 0.054193, -0.941204, -0.182951, -0.278797 +5700, 0.064248, -0.930274, -0.197736, -0.302264 +5701, 0.064248, -0.930274, -0.197736, -0.302264 +5702, 0.064248, -0.930274, -0.197736, -0.302264 +5703, 0.064248, -0.930274, -0.197736, -0.302264 +5704, 0.064248, -0.930274, -0.197736, -0.302264 +5705, 0.064248, -0.930274, -0.197736, -0.302264 +5706, 0.064248, -0.930274, -0.197736, -0.302264 +5707, 0.064248, -0.930274, -0.197736, -0.302264 +5708, 0.064248, -0.930274, -0.197736, -0.302264 +5709, 0.064248, -0.930274, -0.197736, -0.302264 +5710, 0.064248, -0.930274, -0.197736, -0.302264 +5711, 0.064248, -0.930274, -0.197736, -0.302264 +5712, 0.064248, -0.930274, -0.197736, -0.302264 +5713, 0.064248, -0.930274, -0.197736, -0.302264 +5714, 0.064248, -0.930274, -0.197736, -0.302264 +5715, 0.064248, -0.930274, -0.197736, -0.302264 +5716, 0.064248, -0.930274, -0.197736, -0.302264 +5717, 0.064248, -0.930274, -0.197736, -0.302264 +5718, 0.064248, -0.930274, -0.197736, -0.302264 +5719, 0.064248, -0.930274, -0.197736, -0.302264 +5720, 0.064248, -0.930274, -0.197736, -0.302264 +5721, 0.064248, -0.930274, -0.197736, -0.302264 +5722, 0.064248, -0.930274, -0.197736, -0.302264 +5723, 0.064248, -0.930274, -0.197736, -0.302264 +5724, 0.064248, -0.930274, -0.197736, -0.302264 +5725, 0.064248, -0.930274, -0.197736, -0.302264 +5726, 0.064248, -0.930274, -0.197736, -0.302264 +5727, 0.064248, -0.930274, -0.197736, -0.302264 +5728, 0.064248, -0.930274, -0.197736, -0.302264 +5729, 0.064248, -0.930274, -0.197736, -0.302264 +5730, 0.064248, -0.930274, -0.197736, -0.302264 +5731, 0.064248, -0.930274, -0.197736, -0.302264 +5732, 0.064248, -0.930274, -0.197736, -0.302264 +5733, 0.064248, -0.930274, -0.197736, -0.302264 +5734, 0.064248, -0.930274, -0.197736, -0.302264 +5735, 0.064248, -0.930274, -0.197736, -0.302264 +5736, 0.064248, -0.930274, -0.197736, -0.302264 +5737, 0.064248, -0.930274, -0.197736, -0.302264 +5738, 0.064248, -0.930274, -0.197736, -0.302264 +5739, 0.064248, -0.930274, -0.197736, -0.302264 +5740, 0.064248, -0.930274, -0.197736, -0.302264 +5741, 0.064248, -0.930274, -0.197736, -0.302264 +5742, 0.064248, -0.930274, -0.197736, -0.302264 +5743, 0.064248, -0.930274, -0.197736, -0.302264 +5744, 0.064248, -0.930274, -0.197736, -0.302264 +5745, 0.064248, -0.930274, -0.197736, -0.302264 +5746, 0.064248, -0.930274, -0.197736, -0.302264 +5747, 0.064248, -0.930274, -0.197736, -0.302264 +5748, 0.064248, -0.930274, -0.197736, -0.302264 +5749, 0.064248, -0.930274, -0.197736, -0.302264 +5750, 0.064248, -0.930274, -0.197736, -0.302264 +5751, 0.064248, -0.930274, -0.197736, -0.302264 +5752, 0.064248, -0.930274, -0.197736, -0.302264 +5753, 0.064248, -0.930274, -0.197736, -0.302264 +5754, 0.064248, -0.930274, -0.197736, -0.302264 +5755, 0.064248, -0.930274, -0.197736, -0.302264 +5756, 0.064248, -0.930274, -0.197736, -0.302264 +5757, 0.064248, -0.930274, -0.197736, -0.302264 +5758, 0.064248, -0.930274, -0.197736, -0.302264 +5759, 0.064248, -0.930274, -0.197736, -0.302264 +5760, 0.064248, -0.930274, -0.197736, -0.302264 +5761, 0.064248, -0.930274, -0.197736, -0.302264 +5762, 0.064248, -0.930274, -0.197736, -0.302264 +5763, 0.064248, -0.930274, -0.197736, -0.302264 +5764, 0.064248, -0.930274, -0.197736, -0.302264 +5765, 0.064248, -0.930274, -0.197736, -0.302264 +5766, 0.064248, -0.930274, -0.197736, -0.302264 +5767, 0.064248, -0.930274, -0.197736, -0.302264 +5768, 0.064248, -0.930274, -0.197736, -0.302264 +5769, 0.064248, -0.930274, -0.197736, -0.302264 +5770, 0.064248, -0.930274, -0.197736, -0.302264 +5771, 0.064248, -0.930274, -0.197736, -0.302264 +5772, 0.064248, -0.930274, -0.197736, -0.302264 +5773, 0.064248, -0.930274, -0.197736, -0.302264 +5774, 0.064248, -0.930274, -0.197736, -0.302264 +5775, 0.064248, -0.930274, -0.197736, -0.302264 +5776, 0.064248, -0.930274, -0.197736, -0.302264 +5777, 0.064248, -0.930274, -0.197736, -0.302264 +5778, 0.064248, -0.930274, -0.197736, -0.302264 +5779, 0.064248, -0.930274, -0.197736, -0.302264 +5780, 0.064248, -0.930274, -0.197736, -0.302264 +5781, 0.064248, -0.930274, -0.197736, -0.302264 +5782, 0.064248, -0.930274, -0.197736, -0.302264 +5783, 0.064248, -0.930274, -0.197736, -0.302264 +5784, 0.064248, -0.930274, -0.197736, -0.302264 +5785, 0.064248, -0.930274, -0.197736, -0.302264 +5786, 0.064248, -0.930274, -0.197736, -0.302264 +5787, 0.064248, -0.930274, -0.197736, -0.302264 +5788, 0.064248, -0.930274, -0.197736, -0.302264 +5789, 0.064248, -0.930274, -0.197736, -0.302264 +5790, 0.064248, -0.930274, -0.197736, -0.302264 +5791, 0.064248, -0.930274, -0.197736, -0.302264 +5792, 0.064248, -0.930274, -0.197736, -0.302264 +5793, 0.064248, -0.930274, -0.197736, -0.302264 +5794, 0.064248, -0.930274, -0.197736, -0.302264 +5795, 0.064248, -0.930274, -0.197736, -0.302264 +5796, 0.064248, -0.930274, -0.197736, -0.302264 +5797, 0.064248, -0.930274, -0.197736, -0.302264 +5798, 0.064248, -0.930274, -0.197736, -0.302264 +5799, 0.064248, -0.930274, -0.197736, -0.302264 +5800, 0.075090, -0.918482, -0.212048, -0.325251 +5801, 0.075090, -0.918482, -0.212048, -0.325251 +5802, 0.075090, -0.918482, -0.212048, -0.325251 +5803, 0.075090, -0.918482, -0.212048, -0.325251 +5804, 0.075090, -0.918482, -0.212048, -0.325251 +5805, 0.075090, -0.918482, -0.212048, -0.325251 +5806, 0.075090, -0.918482, -0.212048, -0.325251 +5807, 0.075090, -0.918482, -0.212048, -0.325251 +5808, 0.075090, -0.918482, -0.212048, -0.325251 +5809, 0.075090, -0.918482, -0.212048, -0.325251 +5810, 0.075090, -0.918482, -0.212048, -0.325251 +5811, 0.075090, -0.918482, -0.212048, -0.325251 +5812, 0.075090, -0.918482, -0.212048, -0.325251 +5813, 0.075090, -0.918482, -0.212048, -0.325251 +5814, 0.075090, -0.918482, -0.212048, -0.325251 +5815, 0.075090, -0.918482, -0.212048, -0.325251 +5816, 0.075090, -0.918482, -0.212048, -0.325251 +5817, 0.075090, -0.918482, -0.212048, -0.325251 +5818, 0.075090, -0.918482, -0.212048, -0.325251 +5819, 0.075090, -0.918482, -0.212048, -0.325251 +5820, 0.075090, -0.918482, -0.212048, -0.325251 +5821, 0.075090, -0.918482, -0.212048, -0.325251 +5822, 0.075090, -0.918482, -0.212048, -0.325251 +5823, 0.075090, -0.918482, -0.212048, -0.325251 +5824, 0.075090, -0.918482, -0.212048, -0.325251 +5825, 0.075090, -0.918482, -0.212048, -0.325251 +5826, 0.075090, -0.918482, -0.212048, -0.325251 +5827, 0.075090, -0.918482, -0.212048, -0.325251 +5828, 0.075090, -0.918482, -0.212048, -0.325251 +5829, 0.075090, -0.918482, -0.212048, -0.325251 +5830, 0.075090, -0.918482, -0.212048, -0.325251 +5831, 0.075090, -0.918482, -0.212048, -0.325251 +5832, 0.075090, -0.918482, -0.212048, -0.325251 +5833, 0.075090, -0.918482, -0.212048, -0.325251 +5834, 0.075090, -0.918482, -0.212048, -0.325251 +5835, 0.075090, -0.918482, -0.212048, -0.325251 +5836, 0.075090, -0.918482, -0.212048, -0.325251 +5837, 0.075090, -0.918482, -0.212048, -0.325251 +5838, 0.075090, -0.918482, -0.212048, -0.325251 +5839, 0.075090, -0.918482, -0.212048, -0.325251 +5840, 0.075090, -0.918482, -0.212048, -0.325251 +5841, 0.075090, -0.918482, -0.212048, -0.325251 +5842, 0.075090, -0.918482, -0.212048, -0.325251 +5843, 0.075090, -0.918482, -0.212048, -0.325251 +5844, 0.075090, -0.918482, -0.212048, -0.325251 +5845, 0.075090, -0.918482, -0.212048, -0.325251 +5846, 0.075090, -0.918482, -0.212048, -0.325251 +5847, 0.075090, -0.918482, -0.212048, -0.325251 +5848, 0.075090, -0.918482, -0.212048, -0.325251 +5849, 0.075090, -0.918482, -0.212048, -0.325251 +5850, 0.075090, -0.918482, -0.212048, -0.325251 +5851, 0.075090, -0.918482, -0.212048, -0.325251 +5852, 0.075090, -0.918482, -0.212048, -0.325251 +5853, 0.075090, -0.918482, -0.212048, -0.325251 +5854, 0.075090, -0.918482, -0.212048, -0.325251 +5855, 0.075090, -0.918482, -0.212048, -0.325251 +5856, 0.075090, -0.918482, -0.212048, -0.325251 +5857, 0.075090, -0.918482, -0.212048, -0.325251 +5858, 0.075090, -0.918482, -0.212048, -0.325251 +5859, 0.075090, -0.918482, -0.212048, -0.325251 +5860, 0.075090, -0.918482, -0.212048, -0.325251 +5861, 0.075090, -0.918482, -0.212048, -0.325251 +5862, 0.075090, -0.918482, -0.212048, -0.325251 +5863, 0.075090, -0.918482, -0.212048, -0.325251 +5864, 0.075090, -0.918482, -0.212048, -0.325251 +5865, 0.075090, -0.918482, -0.212048, -0.325251 +5866, 0.075090, -0.918482, -0.212048, -0.325251 +5867, 0.075090, -0.918482, -0.212048, -0.325251 +5868, 0.075090, -0.918482, -0.212048, -0.325251 +5869, 0.075090, -0.918482, -0.212048, -0.325251 +5870, 0.075090, -0.918482, -0.212048, -0.325251 +5871, 0.075090, -0.918482, -0.212048, -0.325251 +5872, 0.075090, -0.918482, -0.212048, -0.325251 +5873, 0.075090, -0.918482, -0.212048, -0.325251 +5874, 0.075090, -0.918482, -0.212048, -0.325251 +5875, 0.075090, -0.918482, -0.212048, -0.325251 +5876, 0.075090, -0.918482, -0.212048, -0.325251 +5877, 0.075090, -0.918482, -0.212048, -0.325251 +5878, 0.075090, -0.918482, -0.212048, -0.325251 +5879, 0.075090, -0.918482, -0.212048, -0.325251 +5880, 0.075090, -0.918482, -0.212048, -0.325251 +5881, 0.075090, -0.918482, -0.212048, -0.325251 +5882, 0.075090, -0.918482, -0.212048, -0.325251 +5883, 0.075090, -0.918482, -0.212048, -0.325251 +5884, 0.075090, -0.918482, -0.212048, -0.325251 +5885, 0.075090, -0.918482, -0.212048, -0.325251 +5886, 0.075090, -0.918482, -0.212048, -0.325251 +5887, 0.075090, -0.918482, -0.212048, -0.325251 +5888, 0.075090, -0.918482, -0.212048, -0.325251 +5889, 0.075090, -0.918482, -0.212048, -0.325251 +5890, 0.075090, -0.918482, -0.212048, -0.325251 +5891, 0.075090, -0.918482, -0.212048, -0.325251 +5892, 0.075090, -0.918482, -0.212048, -0.325251 +5893, 0.075090, -0.918482, -0.212048, -0.325251 +5894, 0.075090, -0.918482, -0.212048, -0.325251 +5895, 0.075090, -0.918482, -0.212048, -0.325251 +5896, 0.075090, -0.918482, -0.212048, -0.325251 +5897, 0.075090, -0.918482, -0.212048, -0.325251 +5898, 0.075090, -0.918482, -0.212048, -0.325251 +5899, 0.075090, -0.918482, -0.212048, -0.325251 +5900, 0.086697, -0.905849, -0.225854, -0.347723 +5901, 0.086697, -0.905849, -0.225854, -0.347723 +5902, 0.086697, -0.905849, -0.225854, -0.347723 +5903, 0.086697, -0.905849, -0.225854, -0.347723 +5904, 0.086697, -0.905849, -0.225854, -0.347723 +5905, 0.086697, -0.905849, -0.225854, -0.347723 +5906, 0.086697, -0.905849, -0.225854, -0.347723 +5907, 0.086697, -0.905849, -0.225854, -0.347723 +5908, 0.086697, -0.905849, -0.225854, -0.347723 +5909, 0.086697, -0.905849, -0.225854, -0.347723 +5910, 0.086697, -0.905849, -0.225854, -0.347723 +5911, 0.086697, -0.905849, -0.225854, -0.347723 +5912, 0.086697, -0.905849, -0.225854, -0.347723 +5913, 0.086697, -0.905849, -0.225854, -0.347723 +5914, 0.086697, -0.905849, -0.225854, -0.347723 +5915, 0.086697, -0.905849, -0.225854, -0.347723 +5916, 0.086697, -0.905849, -0.225854, -0.347723 +5917, 0.086697, -0.905849, -0.225854, -0.347723 +5918, 0.086697, -0.905849, -0.225854, -0.347723 +5919, 0.086697, -0.905849, -0.225854, -0.347723 +5920, 0.086697, -0.905849, -0.225854, -0.347723 +5921, 0.086697, -0.905849, -0.225854, -0.347723 +5922, 0.086697, -0.905849, -0.225854, -0.347723 +5923, 0.086697, -0.905849, -0.225854, -0.347723 +5924, 0.086697, -0.905849, -0.225854, -0.347723 +5925, 0.086697, -0.905849, -0.225854, -0.347723 +5926, 0.086697, -0.905849, -0.225854, -0.347723 +5927, 0.086697, -0.905849, -0.225854, -0.347723 +5928, 0.086697, -0.905849, -0.225854, -0.347723 +5929, 0.086697, -0.905849, -0.225854, -0.347723 +5930, 0.086697, -0.905849, -0.225854, -0.347723 +5931, 0.086697, -0.905849, -0.225854, -0.347723 +5932, 0.086697, -0.905849, -0.225854, -0.347723 +5933, 0.086697, -0.905849, -0.225854, -0.347723 +5934, 0.086697, -0.905849, -0.225854, -0.347723 +5935, 0.086697, -0.905849, -0.225854, -0.347723 +5936, 0.086697, -0.905849, -0.225854, -0.347723 +5937, 0.086697, -0.905849, -0.225854, -0.347723 +5938, 0.086697, -0.905849, -0.225854, -0.347723 +5939, 0.086697, -0.905849, -0.225854, -0.347723 +5940, 0.086697, -0.905849, -0.225854, -0.347723 +5941, 0.086697, -0.905849, -0.225854, -0.347723 +5942, 0.086697, -0.905849, -0.225854, -0.347723 +5943, 0.086697, -0.905849, -0.225854, -0.347723 +5944, 0.086697, -0.905849, -0.225854, -0.347723 +5945, 0.086697, -0.905849, -0.225854, -0.347723 +5946, 0.086697, -0.905849, -0.225854, -0.347723 +5947, 0.086697, -0.905849, -0.225854, -0.347723 +5948, 0.086697, -0.905849, -0.225854, -0.347723 +5949, 0.086697, -0.905849, -0.225854, -0.347723 +5950, 0.086697, -0.905849, -0.225854, -0.347723 +5951, 0.086697, -0.905849, -0.225854, -0.347723 +5952, 0.086697, -0.905849, -0.225854, -0.347723 +5953, 0.086697, -0.905849, -0.225854, -0.347723 +5954, 0.086697, -0.905849, -0.225854, -0.347723 +5955, 0.086697, -0.905849, -0.225854, -0.347723 +5956, 0.086697, -0.905849, -0.225854, -0.347723 +5957, 0.086697, -0.905849, -0.225854, -0.347723 +5958, 0.086697, -0.905849, -0.225854, -0.347723 +5959, 0.086697, -0.905849, -0.225854, -0.347723 +5960, 0.086697, -0.905849, -0.225854, -0.347723 +5961, 0.086697, -0.905849, -0.225854, -0.347723 +5962, 0.086697, -0.905849, -0.225854, -0.347723 +5963, 0.086697, -0.905849, -0.225854, -0.347723 +5964, 0.086697, -0.905849, -0.225854, -0.347723 +5965, 0.086697, -0.905849, -0.225854, -0.347723 +5966, 0.086697, -0.905849, -0.225854, -0.347723 +5967, 0.086697, -0.905849, -0.225854, -0.347723 +5968, 0.086697, -0.905849, -0.225854, -0.347723 +5969, 0.086697, -0.905849, -0.225854, -0.347723 +5970, 0.086697, -0.905849, -0.225854, -0.347723 +5971, 0.086697, -0.905849, -0.225854, -0.347723 +5972, 0.086697, -0.905849, -0.225854, -0.347723 +5973, 0.086697, -0.905849, -0.225854, -0.347723 +5974, 0.086697, -0.905849, -0.225854, -0.347723 +5975, 0.086697, -0.905849, -0.225854, -0.347723 +5976, 0.086697, -0.905849, -0.225854, -0.347723 +5977, 0.086697, -0.905849, -0.225854, -0.347723 +5978, 0.086697, -0.905849, -0.225854, -0.347723 +5979, 0.086697, -0.905849, -0.225854, -0.347723 +5980, 0.086697, -0.905849, -0.225854, -0.347723 +5981, 0.086697, -0.905849, -0.225854, -0.347723 +5982, 0.086697, -0.905849, -0.225854, -0.347723 +5983, 0.086697, -0.905849, -0.225854, -0.347723 +5984, 0.086697, -0.905849, -0.225854, -0.347723 +5985, 0.086697, -0.905849, -0.225854, -0.347723 +5986, 0.086697, -0.905849, -0.225854, -0.347723 +5987, 0.086697, -0.905849, -0.225854, -0.347723 +5988, 0.086697, -0.905849, -0.225854, -0.347723 +5989, 0.086697, -0.905849, -0.225854, -0.347723 +5990, 0.086697, -0.905849, -0.225854, -0.347723 +5991, 0.086697, -0.905849, -0.225854, -0.347723 +5992, 0.086697, -0.905849, -0.225854, -0.347723 +5993, 0.086697, -0.905849, -0.225854, -0.347723 +5994, 0.086697, -0.905849, -0.225854, -0.347723 +5995, 0.086697, -0.905849, -0.225854, -0.347723 +5996, 0.086697, -0.905849, -0.225854, -0.347723 +5997, 0.086697, -0.905849, -0.225854, -0.347723 +5998, 0.086697, -0.905849, -0.225854, -0.347723 +5999, 0.086697, -0.905849, -0.225854, -0.347723 +6000, 0.099046, -0.892399, -0.239118, -0.369644 +6001, 0.099046, -0.892399, -0.239118, -0.369644 +6002, 0.099046, -0.892399, -0.239118, -0.369644 +6003, 0.099046, -0.892399, -0.239118, -0.369644 +6004, 0.099046, -0.892399, -0.239118, -0.369644 +6005, 0.099046, -0.892399, -0.239118, -0.369644 +6006, 0.099046, -0.892399, -0.239118, -0.369644 +6007, 0.099046, -0.892399, -0.239118, -0.369644 +6008, 0.099046, -0.892399, -0.239118, -0.369644 +6009, 0.099046, -0.892399, -0.239118, -0.369644 +6010, 0.099046, -0.892399, -0.239118, -0.369644 +6011, 0.099046, -0.892399, -0.239118, -0.369644 +6012, 0.099046, -0.892399, -0.239118, -0.369644 +6013, 0.099046, -0.892399, -0.239118, -0.369644 +6014, 0.099046, -0.892399, -0.239118, -0.369644 +6015, 0.099046, -0.892399, -0.239118, -0.369644 +6016, 0.099046, -0.892399, -0.239118, -0.369644 +6017, 0.099046, -0.892399, -0.239118, -0.369644 +6018, 0.099046, -0.892399, -0.239118, -0.369644 +6019, 0.099046, -0.892399, -0.239118, -0.369644 +6020, 0.099046, -0.892399, -0.239118, -0.369644 +6021, 0.099046, -0.892399, -0.239118, -0.369644 +6022, 0.099046, -0.892399, -0.239118, -0.369644 +6023, 0.099046, -0.892399, -0.239118, -0.369644 +6024, 0.099046, -0.892399, -0.239118, -0.369644 +6025, 0.099046, -0.892399, -0.239118, -0.369644 +6026, 0.099046, -0.892399, -0.239118, -0.369644 +6027, 0.099046, -0.892399, -0.239118, -0.369644 +6028, 0.099046, -0.892399, -0.239118, -0.369644 +6029, 0.099046, -0.892399, -0.239118, -0.369644 +6030, 0.099046, -0.892399, -0.239118, -0.369644 +6031, 0.099046, -0.892399, -0.239118, -0.369644 +6032, 0.099046, -0.892399, -0.239118, -0.369644 +6033, 0.099046, -0.892399, -0.239118, -0.369644 +6034, 0.099046, -0.892399, -0.239118, -0.369644 +6035, 0.099046, -0.892399, -0.239118, -0.369644 +6036, 0.099046, -0.892399, -0.239118, -0.369644 +6037, 0.099046, -0.892399, -0.239118, -0.369644 +6038, 0.099046, -0.892399, -0.239118, -0.369644 +6039, 0.099046, -0.892399, -0.239118, -0.369644 +6040, 0.099046, -0.892399, -0.239118, -0.369644 +6041, 0.099046, -0.892399, -0.239118, -0.369644 +6042, 0.099046, -0.892399, -0.239118, -0.369644 +6043, 0.099046, -0.892399, -0.239118, -0.369644 +6044, 0.099046, -0.892399, -0.239118, -0.369644 +6045, 0.099046, -0.892399, -0.239118, -0.369644 +6046, 0.099046, -0.892399, -0.239118, -0.369644 +6047, 0.099046, -0.892399, -0.239118, -0.369644 +6048, 0.099046, -0.892399, -0.239118, -0.369644 +6049, 0.099046, -0.892399, -0.239118, -0.369644 +6050, 0.099046, -0.892399, -0.239118, -0.369644 +6051, 0.099046, -0.892399, -0.239118, -0.369644 +6052, 0.099046, -0.892399, -0.239118, -0.369644 +6053, 0.099046, -0.892399, -0.239118, -0.369644 +6054, 0.099046, -0.892399, -0.239118, -0.369644 +6055, 0.099046, -0.892399, -0.239118, -0.369644 +6056, 0.099046, -0.892399, -0.239118, -0.369644 +6057, 0.099046, -0.892399, -0.239118, -0.369644 +6058, 0.099046, -0.892399, -0.239118, -0.369644 +6059, 0.099046, -0.892399, -0.239118, -0.369644 +6060, 0.099046, -0.892399, -0.239118, -0.369644 +6061, 0.099046, -0.892399, -0.239118, -0.369644 +6062, 0.099046, -0.892399, -0.239118, -0.369644 +6063, 0.099046, -0.892399, -0.239118, -0.369644 +6064, 0.099046, -0.892399, -0.239118, -0.369644 +6065, 0.099046, -0.892399, -0.239118, -0.369644 +6066, 0.099046, -0.892399, -0.239118, -0.369644 +6067, 0.099046, -0.892399, -0.239118, -0.369644 +6068, 0.099046, -0.892399, -0.239118, -0.369644 +6069, 0.099046, -0.892399, -0.239118, -0.369644 +6070, 0.099046, -0.892399, -0.239118, -0.369644 +6071, 0.099046, -0.892399, -0.239118, -0.369644 +6072, 0.099046, -0.892399, -0.239118, -0.369644 +6073, 0.099046, -0.892399, -0.239118, -0.369644 +6074, 0.099046, -0.892399, -0.239118, -0.369644 +6075, 0.099046, -0.892399, -0.239118, -0.369644 +6076, 0.099046, -0.892399, -0.239118, -0.369644 +6077, 0.099046, -0.892399, -0.239118, -0.369644 +6078, 0.099046, -0.892399, -0.239118, -0.369644 +6079, 0.099046, -0.892399, -0.239118, -0.369644 +6080, 0.099046, -0.892399, -0.239118, -0.369644 +6081, 0.099046, -0.892399, -0.239118, -0.369644 +6082, 0.099046, -0.892399, -0.239118, -0.369644 +6083, 0.099046, -0.892399, -0.239118, -0.369644 +6084, 0.099046, -0.892399, -0.239118, -0.369644 +6085, 0.099046, -0.892399, -0.239118, -0.369644 +6086, 0.099046, -0.892399, -0.239118, -0.369644 +6087, 0.099046, -0.892399, -0.239118, -0.369644 +6088, 0.099046, -0.892399, -0.239118, -0.369644 +6089, 0.099046, -0.892399, -0.239118, -0.369644 +6090, 0.099046, -0.892399, -0.239118, -0.369644 +6091, 0.099046, -0.892399, -0.239118, -0.369644 +6092, 0.099046, -0.892399, -0.239118, -0.369644 +6093, 0.099046, -0.892399, -0.239118, -0.369644 +6094, 0.099046, -0.892399, -0.239118, -0.369644 +6095, 0.099046, -0.892399, -0.239118, -0.369644 +6096, 0.099046, -0.892399, -0.239118, -0.369644 +6097, 0.099046, -0.892399, -0.239118, -0.369644 +6098, 0.099046, -0.892399, -0.239118, -0.369644 +6099, 0.099046, -0.892399, -0.239118, -0.369644 +6100, 0.112112, -0.878156, -0.251807, -0.390980 +6101, 0.112112, -0.878156, -0.251807, -0.390980 +6102, 0.112112, -0.878156, -0.251807, -0.390980 +6103, 0.112112, -0.878156, -0.251807, -0.390980 +6104, 0.112112, -0.878156, -0.251807, -0.390980 +6105, 0.112112, -0.878156, -0.251807, -0.390980 +6106, 0.112112, -0.878156, -0.251807, -0.390980 +6107, 0.112112, -0.878156, -0.251807, -0.390980 +6108, 0.112112, -0.878156, -0.251807, -0.390980 +6109, 0.112112, -0.878156, -0.251807, -0.390980 +6110, 0.112112, -0.878156, -0.251807, -0.390980 +6111, 0.112112, -0.878156, -0.251807, -0.390980 +6112, 0.112112, -0.878156, -0.251807, -0.390980 +6113, 0.112112, -0.878156, -0.251807, -0.390980 +6114, 0.112112, -0.878156, -0.251807, -0.390980 +6115, 0.112112, -0.878156, -0.251807, -0.390980 +6116, 0.112112, -0.878156, -0.251807, -0.390980 +6117, 0.112112, -0.878156, -0.251807, -0.390980 +6118, 0.112112, -0.878156, -0.251807, -0.390980 +6119, 0.112112, -0.878156, -0.251807, -0.390980 +6120, 0.112112, -0.878156, -0.251807, -0.390980 +6121, 0.112112, -0.878156, -0.251807, -0.390980 +6122, 0.112112, -0.878156, -0.251807, -0.390980 +6123, 0.112112, -0.878156, -0.251807, -0.390980 +6124, 0.112112, -0.878156, -0.251807, -0.390980 +6125, 0.112112, -0.878156, -0.251807, -0.390980 +6126, 0.112112, -0.878156, -0.251807, -0.390980 +6127, 0.112112, -0.878156, -0.251807, -0.390980 +6128, 0.112112, -0.878156, -0.251807, -0.390980 +6129, 0.112112, -0.878156, -0.251807, -0.390980 +6130, 0.112112, -0.878156, -0.251807, -0.390980 +6131, 0.112112, -0.878156, -0.251807, -0.390980 +6132, 0.112112, -0.878156, -0.251807, -0.390980 +6133, 0.112112, -0.878156, -0.251807, -0.390980 +6134, 0.112112, -0.878156, -0.251807, -0.390980 +6135, 0.112112, -0.878156, -0.251807, -0.390980 +6136, 0.112112, -0.878156, -0.251807, -0.390980 +6137, 0.112112, -0.878156, -0.251807, -0.390980 +6138, 0.112112, -0.878156, -0.251807, -0.390980 +6139, 0.112112, -0.878156, -0.251807, -0.390980 +6140, 0.112112, -0.878156, -0.251807, -0.390980 +6141, 0.112112, -0.878156, -0.251807, -0.390980 +6142, 0.112112, -0.878156, -0.251807, -0.390980 +6143, 0.112112, -0.878156, -0.251807, -0.390980 +6144, 0.112112, -0.878156, -0.251807, -0.390980 +6145, 0.112112, -0.878156, -0.251807, -0.390980 +6146, 0.112112, -0.878156, -0.251807, -0.390980 +6147, 0.112112, -0.878156, -0.251807, -0.390980 +6148, 0.112112, -0.878156, -0.251807, -0.390980 +6149, 0.112112, -0.878156, -0.251807, -0.390980 +6150, 0.112112, -0.878156, -0.251807, -0.390980 +6151, 0.112112, -0.878156, -0.251807, -0.390980 +6152, 0.112112, -0.878156, -0.251807, -0.390980 +6153, 0.112112, -0.878156, -0.251807, -0.390980 +6154, 0.112112, -0.878156, -0.251807, -0.390980 +6155, 0.112112, -0.878156, -0.251807, -0.390980 +6156, 0.112112, -0.878156, -0.251807, -0.390980 +6157, 0.112112, -0.878156, -0.251807, -0.390980 +6158, 0.112112, -0.878156, -0.251807, -0.390980 +6159, 0.112112, -0.878156, -0.251807, -0.390980 +6160, 0.112112, -0.878156, -0.251807, -0.390980 +6161, 0.112112, -0.878156, -0.251807, -0.390980 +6162, 0.112112, -0.878156, -0.251807, -0.390980 +6163, 0.112112, -0.878156, -0.251807, -0.390980 +6164, 0.112112, -0.878156, -0.251807, -0.390980 +6165, 0.112112, -0.878156, -0.251807, -0.390980 +6166, 0.112112, -0.878156, -0.251807, -0.390980 +6167, 0.112112, -0.878156, -0.251807, -0.390980 +6168, 0.112112, -0.878156, -0.251807, -0.390980 +6169, 0.112112, -0.878156, -0.251807, -0.390980 +6170, 0.112112, -0.878156, -0.251807, -0.390980 +6171, 0.112112, -0.878156, -0.251807, -0.390980 +6172, 0.112112, -0.878156, -0.251807, -0.390980 +6173, 0.112112, -0.878156, -0.251807, -0.390980 +6174, 0.112112, -0.878156, -0.251807, -0.390980 +6175, 0.112112, -0.878156, -0.251807, -0.390980 +6176, 0.112112, -0.878156, -0.251807, -0.390980 +6177, 0.112112, -0.878156, -0.251807, -0.390980 +6178, 0.112112, -0.878156, -0.251807, -0.390980 +6179, 0.112112, -0.878156, -0.251807, -0.390980 +6180, 0.112112, -0.878156, -0.251807, -0.390980 +6181, 0.112112, -0.878156, -0.251807, -0.390980 +6182, 0.112112, -0.878156, -0.251807, -0.390980 +6183, 0.112112, -0.878156, -0.251807, -0.390980 +6184, 0.112112, -0.878156, -0.251807, -0.390980 +6185, 0.112112, -0.878156, -0.251807, -0.390980 +6186, 0.112112, -0.878156, -0.251807, -0.390980 +6187, 0.112112, -0.878156, -0.251807, -0.390980 +6188, 0.112112, -0.878156, -0.251807, -0.390980 +6189, 0.112112, -0.878156, -0.251807, -0.390980 +6190, 0.112112, -0.878156, -0.251807, -0.390980 +6191, 0.112112, -0.878156, -0.251807, -0.390980 +6192, 0.112112, -0.878156, -0.251807, -0.390980 +6193, 0.112112, -0.878156, -0.251807, -0.390980 +6194, 0.112112, -0.878156, -0.251807, -0.390980 +6195, 0.112112, -0.878156, -0.251807, -0.390980 +6196, 0.112112, -0.878156, -0.251807, -0.390980 +6197, 0.112112, -0.878156, -0.251807, -0.390980 +6198, 0.112112, -0.878156, -0.251807, -0.390980 +6199, 0.112112, -0.878156, -0.251807, -0.390980 +6200, 0.125869, -0.863147, -0.263890, -0.411700 +6201, 0.125869, -0.863147, -0.263890, -0.411700 +6202, 0.125869, -0.863147, -0.263890, -0.411700 +6203, 0.125869, -0.863147, -0.263890, -0.411700 +6204, 0.125869, -0.863147, -0.263890, -0.411700 +6205, 0.125869, -0.863147, -0.263890, -0.411700 +6206, 0.125869, -0.863147, -0.263890, -0.411700 +6207, 0.125869, -0.863147, -0.263890, -0.411700 +6208, 0.125869, -0.863147, -0.263890, -0.411700 +6209, 0.125869, -0.863147, -0.263890, -0.411700 +6210, 0.125869, -0.863147, -0.263890, -0.411700 +6211, 0.125869, -0.863147, -0.263890, -0.411700 +6212, 0.125869, -0.863147, -0.263890, -0.411700 +6213, 0.125869, -0.863147, -0.263890, -0.411700 +6214, 0.125869, -0.863147, -0.263890, -0.411700 +6215, 0.125869, -0.863147, -0.263890, -0.411700 +6216, 0.125869, -0.863147, -0.263890, -0.411700 +6217, 0.125869, -0.863147, -0.263890, -0.411700 +6218, 0.125869, -0.863147, -0.263890, -0.411700 +6219, 0.125869, -0.863147, -0.263890, -0.411700 +6220, 0.125869, -0.863147, -0.263890, -0.411700 +6221, 0.125869, -0.863147, -0.263890, -0.411700 +6222, 0.125869, -0.863147, -0.263890, -0.411700 +6223, 0.125869, -0.863147, -0.263890, -0.411700 +6224, 0.125869, -0.863147, -0.263890, -0.411700 +6225, 0.125869, -0.863147, -0.263890, -0.411700 +6226, 0.125869, -0.863147, -0.263890, -0.411700 +6227, 0.125869, -0.863147, -0.263890, -0.411700 +6228, 0.125869, -0.863147, -0.263890, -0.411700 +6229, 0.125869, -0.863147, -0.263890, -0.411700 +6230, 0.125869, -0.863147, -0.263890, -0.411700 +6231, 0.125869, -0.863147, -0.263890, -0.411700 +6232, 0.125869, -0.863147, -0.263890, -0.411700 +6233, 0.125869, -0.863147, -0.263890, -0.411700 +6234, 0.125869, -0.863147, -0.263890, -0.411700 +6235, 0.125869, -0.863147, -0.263890, -0.411700 +6236, 0.125869, -0.863147, -0.263890, -0.411700 +6237, 0.125869, -0.863147, -0.263890, -0.411700 +6238, 0.125869, -0.863147, -0.263890, -0.411700 +6239, 0.125869, -0.863147, -0.263890, -0.411700 +6240, 0.125869, -0.863147, -0.263890, -0.411700 +6241, 0.125869, -0.863147, -0.263890, -0.411700 +6242, 0.125869, -0.863147, -0.263890, -0.411700 +6243, 0.125869, -0.863147, -0.263890, -0.411700 +6244, 0.125869, -0.863147, -0.263890, -0.411700 +6245, 0.125869, -0.863147, -0.263890, -0.411700 +6246, 0.125869, -0.863147, -0.263890, -0.411700 +6247, 0.125869, -0.863147, -0.263890, -0.411700 +6248, 0.125869, -0.863147, -0.263890, -0.411700 +6249, 0.125869, -0.863147, -0.263890, -0.411700 +6250, 0.125869, -0.863147, -0.263890, -0.411700 +6251, 0.125869, -0.863147, -0.263890, -0.411700 +6252, 0.125869, -0.863147, -0.263890, -0.411700 +6253, 0.125869, -0.863147, -0.263890, -0.411700 +6254, 0.125869, -0.863147, -0.263890, -0.411700 +6255, 0.125869, -0.863147, -0.263890, -0.411700 +6256, 0.125869, -0.863147, -0.263890, -0.411700 +6257, 0.125869, -0.863147, -0.263890, -0.411700 +6258, 0.125869, -0.863147, -0.263890, -0.411700 +6259, 0.125869, -0.863147, -0.263890, -0.411700 +6260, 0.125869, -0.863147, -0.263890, -0.411700 +6261, 0.125869, -0.863147, -0.263890, -0.411700 +6262, 0.125869, -0.863147, -0.263890, -0.411700 +6263, 0.125869, -0.863147, -0.263890, -0.411700 +6264, 0.125869, -0.863147, -0.263890, -0.411700 +6265, 0.125869, -0.863147, -0.263890, -0.411700 +6266, 0.125869, -0.863147, -0.263890, -0.411700 +6267, 0.125869, -0.863147, -0.263890, -0.411700 +6268, 0.125869, -0.863147, -0.263890, -0.411700 +6269, 0.125869, -0.863147, -0.263890, -0.411700 +6270, 0.125869, -0.863147, -0.263890, -0.411700 +6271, 0.125869, -0.863147, -0.263890, -0.411700 +6272, 0.125869, -0.863147, -0.263890, -0.411700 +6273, 0.125869, -0.863147, -0.263890, -0.411700 +6274, 0.125869, -0.863147, -0.263890, -0.411700 +6275, 0.125869, -0.863147, -0.263890, -0.411700 +6276, 0.125869, -0.863147, -0.263890, -0.411700 +6277, 0.125869, -0.863147, -0.263890, -0.411700 +6278, 0.125869, -0.863147, -0.263890, -0.411700 +6279, 0.125869, -0.863147, -0.263890, -0.411700 +6280, 0.125869, -0.863147, -0.263890, -0.411700 +6281, 0.125869, -0.863147, -0.263890, -0.411700 +6282, 0.125869, -0.863147, -0.263890, -0.411700 +6283, 0.125869, -0.863147, -0.263890, -0.411700 +6284, 0.125869, -0.863147, -0.263890, -0.411700 +6285, 0.125869, -0.863147, -0.263890, -0.411700 +6286, 0.125869, -0.863147, -0.263890, -0.411700 +6287, 0.125869, -0.863147, -0.263890, -0.411700 +6288, 0.125869, -0.863147, -0.263890, -0.411700 +6289, 0.125869, -0.863147, -0.263890, -0.411700 +6290, 0.125869, -0.863147, -0.263890, -0.411700 +6291, 0.125869, -0.863147, -0.263890, -0.411700 +6292, 0.125869, -0.863147, -0.263890, -0.411700 +6293, 0.125869, -0.863147, -0.263890, -0.411700 +6294, 0.125869, -0.863147, -0.263890, -0.411700 +6295, 0.125869, -0.863147, -0.263890, -0.411700 +6296, 0.125869, -0.863147, -0.263890, -0.411700 +6297, 0.125869, -0.863147, -0.263890, -0.411700 +6298, 0.125869, -0.863147, -0.263890, -0.411700 +6299, 0.125869, -0.863147, -0.263890, -0.411700 +6300, 0.140291, -0.847398, -0.275336, -0.431771 +6301, 0.140291, -0.847398, -0.275336, -0.431771 +6302, 0.140291, -0.847398, -0.275336, -0.431771 +6303, 0.140291, -0.847398, -0.275336, -0.431771 +6304, 0.140291, -0.847398, -0.275336, -0.431771 +6305, 0.140291, -0.847398, -0.275336, -0.431771 +6306, 0.140291, -0.847398, -0.275336, -0.431771 +6307, 0.140291, -0.847398, -0.275336, -0.431771 +6308, 0.140291, -0.847398, -0.275336, -0.431771 +6309, 0.140291, -0.847398, -0.275336, -0.431771 +6310, 0.140291, -0.847398, -0.275336, -0.431771 +6311, 0.140291, -0.847398, -0.275336, -0.431771 +6312, 0.140291, -0.847398, -0.275336, -0.431771 +6313, 0.140291, -0.847398, -0.275336, -0.431771 +6314, 0.140291, -0.847398, -0.275336, -0.431771 +6315, 0.140291, -0.847398, -0.275336, -0.431771 +6316, 0.140291, -0.847398, -0.275336, -0.431771 +6317, 0.140291, -0.847398, -0.275336, -0.431771 +6318, 0.140291, -0.847398, -0.275336, -0.431771 +6319, 0.140291, -0.847398, -0.275336, -0.431771 +6320, 0.140291, -0.847398, -0.275336, -0.431771 +6321, 0.140291, -0.847398, -0.275336, -0.431771 +6322, 0.140291, -0.847398, -0.275336, -0.431771 +6323, 0.140291, -0.847398, -0.275336, -0.431771 +6324, 0.140291, -0.847398, -0.275336, -0.431771 +6325, 0.140291, -0.847398, -0.275336, -0.431771 +6326, 0.140291, -0.847398, -0.275336, -0.431771 +6327, 0.140291, -0.847398, -0.275336, -0.431771 +6328, 0.140291, -0.847398, -0.275336, -0.431771 +6329, 0.140291, -0.847398, -0.275336, -0.431771 +6330, 0.140291, -0.847398, -0.275336, -0.431771 +6331, 0.140291, -0.847398, -0.275336, -0.431771 +6332, 0.140291, -0.847398, -0.275336, -0.431771 +6333, 0.140291, -0.847398, -0.275336, -0.431771 +6334, 0.140291, -0.847398, -0.275336, -0.431771 +6335, 0.140291, -0.847398, -0.275336, -0.431771 +6336, 0.140291, -0.847398, -0.275336, -0.431771 +6337, 0.140291, -0.847398, -0.275336, -0.431771 +6338, 0.140291, -0.847398, -0.275336, -0.431771 +6339, 0.140291, -0.847398, -0.275336, -0.431771 +6340, 0.140291, -0.847398, -0.275336, -0.431771 +6341, 0.140291, -0.847398, -0.275336, -0.431771 +6342, 0.140291, -0.847398, -0.275336, -0.431771 +6343, 0.140291, -0.847398, -0.275336, -0.431771 +6344, 0.140291, -0.847398, -0.275336, -0.431771 +6345, 0.140291, -0.847398, -0.275336, -0.431771 +6346, 0.140291, -0.847398, -0.275336, -0.431771 +6347, 0.140291, -0.847398, -0.275336, -0.431771 +6348, 0.140291, -0.847398, -0.275336, -0.431771 +6349, 0.140291, -0.847398, -0.275336, -0.431771 +6350, 0.140291, -0.847398, -0.275336, -0.431771 +6351, 0.140291, -0.847398, -0.275336, -0.431771 +6352, 0.140291, -0.847398, -0.275336, -0.431771 +6353, 0.140291, -0.847398, -0.275336, -0.431771 +6354, 0.140291, -0.847398, -0.275336, -0.431771 +6355, 0.140291, -0.847398, -0.275336, -0.431771 +6356, 0.140291, -0.847398, -0.275336, -0.431771 +6357, 0.140291, -0.847398, -0.275336, -0.431771 +6358, 0.140291, -0.847398, -0.275336, -0.431771 +6359, 0.140291, -0.847398, -0.275336, -0.431771 +6360, 0.140291, -0.847398, -0.275336, -0.431771 +6361, 0.140291, -0.847398, -0.275336, -0.431771 +6362, 0.140291, -0.847398, -0.275336, -0.431771 +6363, 0.140291, -0.847398, -0.275336, -0.431771 +6364, 0.140291, -0.847398, -0.275336, -0.431771 +6365, 0.140291, -0.847398, -0.275336, -0.431771 +6366, 0.140291, -0.847398, -0.275336, -0.431771 +6367, 0.140291, -0.847398, -0.275336, -0.431771 +6368, 0.140291, -0.847398, -0.275336, -0.431771 +6369, 0.140291, -0.847398, -0.275336, -0.431771 +6370, 0.140291, -0.847398, -0.275336, -0.431771 +6371, 0.140291, -0.847398, -0.275336, -0.431771 +6372, 0.140291, -0.847398, -0.275336, -0.431771 +6373, 0.140291, -0.847398, -0.275336, -0.431771 +6374, 0.140291, -0.847398, -0.275336, -0.431771 +6375, 0.140291, -0.847398, -0.275336, -0.431771 +6376, 0.140291, -0.847398, -0.275336, -0.431771 +6377, 0.140291, -0.847398, -0.275336, -0.431771 +6378, 0.140291, -0.847398, -0.275336, -0.431771 +6379, 0.140291, -0.847398, -0.275336, -0.431771 +6380, 0.140291, -0.847398, -0.275336, -0.431771 +6381, 0.140291, -0.847398, -0.275336, -0.431771 +6382, 0.140291, -0.847398, -0.275336, -0.431771 +6383, 0.140291, -0.847398, -0.275336, -0.431771 +6384, 0.140291, -0.847398, -0.275336, -0.431771 +6385, 0.140291, -0.847398, -0.275336, -0.431771 +6386, 0.140291, -0.847398, -0.275336, -0.431771 +6387, 0.140291, -0.847398, -0.275336, -0.431771 +6388, 0.140291, -0.847398, -0.275336, -0.431771 +6389, 0.140291, -0.847398, -0.275336, -0.431771 +6390, 0.140291, -0.847398, -0.275336, -0.431771 +6391, 0.140291, -0.847398, -0.275336, -0.431771 +6392, 0.140291, -0.847398, -0.275336, -0.431771 +6393, 0.140291, -0.847398, -0.275336, -0.431771 +6394, 0.140291, -0.847398, -0.275336, -0.431771 +6395, 0.140291, -0.847398, -0.275336, -0.431771 +6396, 0.140291, -0.847398, -0.275336, -0.431771 +6397, 0.140291, -0.847398, -0.275336, -0.431771 +6398, 0.140291, -0.847398, -0.275336, -0.431771 +6399, 0.140291, -0.847398, -0.275336, -0.431771 +6400, 0.155348, -0.830938, -0.286115, -0.451162 +6401, 0.155348, -0.830938, -0.286115, -0.451162 +6402, 0.155348, -0.830938, -0.286115, -0.451162 +6403, 0.155348, -0.830938, -0.286115, -0.451162 +6404, 0.155348, -0.830938, -0.286115, -0.451162 +6405, 0.155348, -0.830938, -0.286115, -0.451162 +6406, 0.155348, -0.830938, -0.286115, -0.451162 +6407, 0.155348, -0.830938, -0.286115, -0.451162 +6408, 0.155348, -0.830938, -0.286115, -0.451162 +6409, 0.155348, -0.830938, -0.286115, -0.451162 +6410, 0.155348, -0.830938, -0.286115, -0.451162 +6411, 0.155348, -0.830938, -0.286115, -0.451162 +6412, 0.155348, -0.830938, -0.286115, -0.451162 +6413, 0.155348, -0.830938, -0.286115, -0.451162 +6414, 0.155348, -0.830938, -0.286115, -0.451162 +6415, 0.155348, -0.830938, -0.286115, -0.451162 +6416, 0.155348, -0.830938, -0.286115, -0.451162 +6417, 0.155348, -0.830938, -0.286115, -0.451162 +6418, 0.155348, -0.830938, -0.286115, -0.451162 +6419, 0.155348, -0.830938, -0.286115, -0.451162 +6420, 0.155348, -0.830938, -0.286115, -0.451162 +6421, 0.155348, -0.830938, -0.286115, -0.451162 +6422, 0.155348, -0.830938, -0.286115, -0.451162 +6423, 0.155348, -0.830938, -0.286115, -0.451162 +6424, 0.155348, -0.830938, -0.286115, -0.451162 +6425, 0.155348, -0.830938, -0.286115, -0.451162 +6426, 0.155348, -0.830938, -0.286115, -0.451162 +6427, 0.155348, -0.830938, -0.286115, -0.451162 +6428, 0.155348, -0.830938, -0.286115, -0.451162 +6429, 0.155348, -0.830938, -0.286115, -0.451162 +6430, 0.155348, -0.830938, -0.286115, -0.451162 +6431, 0.155348, -0.830938, -0.286115, -0.451162 +6432, 0.155348, -0.830938, -0.286115, -0.451162 +6433, 0.155348, -0.830938, -0.286115, -0.451162 +6434, 0.155348, -0.830938, -0.286115, -0.451162 +6435, 0.155348, -0.830938, -0.286115, -0.451162 +6436, 0.155348, -0.830938, -0.286115, -0.451162 +6437, 0.155348, -0.830938, -0.286115, -0.451162 +6438, 0.155348, -0.830938, -0.286115, -0.451162 +6439, 0.155348, -0.830938, -0.286115, -0.451162 +6440, 0.155348, -0.830938, -0.286115, -0.451162 +6441, 0.155348, -0.830938, -0.286115, -0.451162 +6442, 0.155348, -0.830938, -0.286115, -0.451162 +6443, 0.155348, -0.830938, -0.286115, -0.451162 +6444, 0.155348, -0.830938, -0.286115, -0.451162 +6445, 0.155348, -0.830938, -0.286115, -0.451162 +6446, 0.155348, -0.830938, -0.286115, -0.451162 +6447, 0.155348, -0.830938, -0.286115, -0.451162 +6448, 0.155348, -0.830938, -0.286115, -0.451162 +6449, 0.155348, -0.830938, -0.286115, -0.451162 +6450, 0.155348, -0.830938, -0.286115, -0.451162 +6451, 0.155348, -0.830938, -0.286115, -0.451162 +6452, 0.155348, -0.830938, -0.286115, -0.451162 +6453, 0.155348, -0.830938, -0.286115, -0.451162 +6454, 0.155348, -0.830938, -0.286115, -0.451162 +6455, 0.155348, -0.830938, -0.286115, -0.451162 +6456, 0.155348, -0.830938, -0.286115, -0.451162 +6457, 0.155348, -0.830938, -0.286115, -0.451162 +6458, 0.155348, -0.830938, -0.286115, -0.451162 +6459, 0.155348, -0.830938, -0.286115, -0.451162 +6460, 0.155348, -0.830938, -0.286115, -0.451162 +6461, 0.155348, -0.830938, -0.286115, -0.451162 +6462, 0.155348, -0.830938, -0.286115, -0.451162 +6463, 0.155348, -0.830938, -0.286115, -0.451162 +6464, 0.155348, -0.830938, -0.286115, -0.451162 +6465, 0.155348, -0.830938, -0.286115, -0.451162 +6466, 0.155348, -0.830938, -0.286115, -0.451162 +6467, 0.155348, -0.830938, -0.286115, -0.451162 +6468, 0.155348, -0.830938, -0.286115, -0.451162 +6469, 0.155348, -0.830938, -0.286115, -0.451162 +6470, 0.155348, -0.830938, -0.286115, -0.451162 +6471, 0.155348, -0.830938, -0.286115, -0.451162 +6472, 0.155348, -0.830938, -0.286115, -0.451162 +6473, 0.155348, -0.830938, -0.286115, -0.451162 +6474, 0.155348, -0.830938, -0.286115, -0.451162 +6475, 0.155348, -0.830938, -0.286115, -0.451162 +6476, 0.155348, -0.830938, -0.286115, -0.451162 +6477, 0.155348, -0.830938, -0.286115, -0.451162 +6478, 0.155348, -0.830938, -0.286115, -0.451162 +6479, 0.155348, -0.830938, -0.286115, -0.451162 +6480, 0.155348, -0.830938, -0.286115, -0.451162 +6481, 0.155348, -0.830938, -0.286115, -0.451162 +6482, 0.155348, -0.830938, -0.286115, -0.451162 +6483, 0.155348, -0.830938, -0.286115, -0.451162 +6484, 0.155348, -0.830938, -0.286115, -0.451162 +6485, 0.155348, -0.830938, -0.286115, -0.451162 +6486, 0.155348, -0.830938, -0.286115, -0.451162 +6487, 0.155348, -0.830938, -0.286115, -0.451162 +6488, 0.155348, -0.830938, -0.286115, -0.451162 +6489, 0.155348, -0.830938, -0.286115, -0.451162 +6490, 0.155348, -0.830938, -0.286115, -0.451162 +6491, 0.155348, -0.830938, -0.286115, -0.451162 +6492, 0.155348, -0.830938, -0.286115, -0.451162 +6493, 0.155348, -0.830938, -0.286115, -0.451162 +6494, 0.155348, -0.830938, -0.286115, -0.451162 +6495, 0.155348, -0.830938, -0.286115, -0.451162 +6496, 0.155348, -0.830938, -0.286115, -0.451162 +6497, 0.155348, -0.830938, -0.286115, -0.451162 +6498, 0.155348, -0.830938, -0.286115, -0.451162 +6499, 0.155348, -0.830938, -0.286115, -0.451162 +6500, 0.171010, -0.813798, -0.296198, -0.469846 +6501, 0.171010, -0.813798, -0.296198, -0.469846 +6502, 0.171010, -0.813798, -0.296198, -0.469846 +6503, 0.171010, -0.813798, -0.296198, -0.469846 +6504, 0.171010, -0.813798, -0.296198, -0.469846 +6505, 0.171010, -0.813798, -0.296198, -0.469846 +6506, 0.171010, -0.813798, -0.296198, -0.469846 +6507, 0.171010, -0.813798, -0.296198, -0.469846 +6508, 0.171010, -0.813798, -0.296198, -0.469846 +6509, 0.171010, -0.813798, -0.296198, -0.469846 +6510, 0.171010, -0.813798, -0.296198, -0.469846 +6511, 0.171010, -0.813798, -0.296198, -0.469846 +6512, 0.171010, -0.813798, -0.296198, -0.469846 +6513, 0.171010, -0.813798, -0.296198, -0.469846 +6514, 0.171010, -0.813798, -0.296198, -0.469846 +6515, 0.171010, -0.813798, -0.296198, -0.469846 +6516, 0.171010, -0.813798, -0.296198, -0.469846 +6517, 0.171010, -0.813798, -0.296198, -0.469846 +6518, 0.171010, -0.813798, -0.296198, -0.469846 +6519, 0.171010, -0.813798, -0.296198, -0.469846 +6520, 0.171010, -0.813798, -0.296198, -0.469846 +6521, 0.171010, -0.813798, -0.296198, -0.469846 +6522, 0.171010, -0.813798, -0.296198, -0.469846 +6523, 0.171010, -0.813798, -0.296198, -0.469846 +6524, 0.171010, -0.813798, -0.296198, -0.469846 +6525, 0.171010, -0.813798, -0.296198, -0.469846 +6526, 0.171010, -0.813798, -0.296198, -0.469846 +6527, 0.171010, -0.813798, -0.296198, -0.469846 +6528, 0.171010, -0.813798, -0.296198, -0.469846 +6529, 0.171010, -0.813798, -0.296198, -0.469846 +6530, 0.171010, -0.813798, -0.296198, -0.469846 +6531, 0.171010, -0.813798, -0.296198, -0.469846 +6532, 0.171010, -0.813798, -0.296198, -0.469846 +6533, 0.171010, -0.813798, -0.296198, -0.469846 +6534, 0.171010, -0.813798, -0.296198, -0.469846 +6535, 0.171010, -0.813798, -0.296198, -0.469846 +6536, 0.171010, -0.813798, -0.296198, -0.469846 +6537, 0.171010, -0.813798, -0.296198, -0.469846 +6538, 0.171010, -0.813798, -0.296198, -0.469846 +6539, 0.171010, -0.813798, -0.296198, -0.469846 +6540, 0.171010, -0.813798, -0.296198, -0.469846 +6541, 0.171010, -0.813798, -0.296198, -0.469846 +6542, 0.171010, -0.813798, -0.296198, -0.469846 +6543, 0.171010, -0.813798, -0.296198, -0.469846 +6544, 0.171010, -0.813798, -0.296198, -0.469846 +6545, 0.171010, -0.813798, -0.296198, -0.469846 +6546, 0.171010, -0.813798, -0.296198, -0.469846 +6547, 0.171010, -0.813798, -0.296198, -0.469846 +6548, 0.171010, -0.813798, -0.296198, -0.469846 +6549, 0.171010, -0.813798, -0.296198, -0.469846 +6550, 0.171010, -0.813798, -0.296198, -0.469846 +6551, 0.171010, -0.813798, -0.296198, -0.469846 +6552, 0.171010, -0.813798, -0.296198, -0.469846 +6553, 0.171010, -0.813798, -0.296198, -0.469846 +6554, 0.171010, -0.813798, -0.296198, -0.469846 +6555, 0.171010, -0.813798, -0.296198, -0.469846 +6556, 0.171010, -0.813798, -0.296198, -0.469846 +6557, 0.171010, -0.813798, -0.296198, -0.469846 +6558, 0.171010, -0.813798, -0.296198, -0.469846 +6559, 0.171010, -0.813798, -0.296198, -0.469846 +6560, 0.171010, -0.813798, -0.296198, -0.469846 +6561, 0.171010, -0.813798, -0.296198, -0.469846 +6562, 0.171010, -0.813798, -0.296198, -0.469846 +6563, 0.171010, -0.813798, -0.296198, -0.469846 +6564, 0.171010, -0.813798, -0.296198, -0.469846 +6565, 0.171010, -0.813798, -0.296198, -0.469846 +6566, 0.171010, -0.813798, -0.296198, -0.469846 +6567, 0.171010, -0.813798, -0.296198, -0.469846 +6568, 0.171010, -0.813798, -0.296198, -0.469846 +6569, 0.171010, -0.813798, -0.296198, -0.469846 +6570, 0.171010, -0.813798, -0.296198, -0.469846 +6571, 0.171010, -0.813798, -0.296198, -0.469846 +6572, 0.171010, -0.813798, -0.296198, -0.469846 +6573, 0.171010, -0.813798, -0.296198, -0.469846 +6574, 0.171010, -0.813798, -0.296198, -0.469846 +6575, 0.171010, -0.813798, -0.296198, -0.469846 +6576, 0.171010, -0.813798, -0.296198, -0.469846 +6577, 0.171010, -0.813798, -0.296198, -0.469846 +6578, 0.171010, -0.813798, -0.296198, -0.469846 +6579, 0.171010, -0.813798, -0.296198, -0.469846 +6580, 0.171010, -0.813798, -0.296198, -0.469846 +6581, 0.171010, -0.813798, -0.296198, -0.469846 +6582, 0.171010, -0.813798, -0.296198, -0.469846 +6583, 0.171010, -0.813798, -0.296198, -0.469846 +6584, 0.171010, -0.813798, -0.296198, -0.469846 +6585, 0.171010, -0.813798, -0.296198, -0.469846 +6586, 0.171010, -0.813798, -0.296198, -0.469846 +6587, 0.171010, -0.813798, -0.296198, -0.469846 +6588, 0.171010, -0.813798, -0.296198, -0.469846 +6589, 0.171010, -0.813798, -0.296198, -0.469846 +6590, 0.171010, -0.813798, -0.296198, -0.469846 +6591, 0.171010, -0.813798, -0.296198, -0.469846 +6592, 0.171010, -0.813798, -0.296198, -0.469846 +6593, 0.171010, -0.813798, -0.296198, -0.469846 +6594, 0.171010, -0.813798, -0.296198, -0.469846 +6595, 0.171010, -0.813798, -0.296198, -0.469846 +6596, 0.171010, -0.813798, -0.296198, -0.469846 +6597, 0.171010, -0.813798, -0.296198, -0.469846 +6598, 0.171010, -0.813798, -0.296198, -0.469846 +6599, 0.171010, -0.813798, -0.296198, -0.469846 +6600, 0.187247, -0.796008, -0.305559, -0.487794 +6601, 0.187247, -0.796008, -0.305559, -0.487794 +6602, 0.187247, -0.796008, -0.305559, -0.487794 +6603, 0.187247, -0.796008, -0.305559, -0.487794 +6604, 0.187247, -0.796008, -0.305559, -0.487794 +6605, 0.187247, -0.796008, -0.305559, -0.487794 +6606, 0.187247, -0.796008, -0.305559, -0.487794 +6607, 0.187247, -0.796008, -0.305559, -0.487794 +6608, 0.187247, -0.796008, -0.305559, -0.487794 +6609, 0.187247, -0.796008, -0.305559, -0.487794 +6610, 0.187247, -0.796008, -0.305559, -0.487794 +6611, 0.187247, -0.796008, -0.305559, -0.487794 +6612, 0.187247, -0.796008, -0.305559, -0.487794 +6613, 0.187247, -0.796008, -0.305559, -0.487794 +6614, 0.187247, -0.796008, -0.305559, -0.487794 +6615, 0.187247, -0.796008, -0.305559, -0.487794 +6616, 0.187247, -0.796008, -0.305559, -0.487794 +6617, 0.187247, -0.796008, -0.305559, -0.487794 +6618, 0.187247, -0.796008, -0.305559, -0.487794 +6619, 0.187247, -0.796008, -0.305559, -0.487794 +6620, 0.187247, -0.796008, -0.305559, -0.487794 +6621, 0.187247, -0.796008, -0.305559, -0.487794 +6622, 0.187247, -0.796008, -0.305559, -0.487794 +6623, 0.187247, -0.796008, -0.305559, -0.487794 +6624, 0.187247, -0.796008, -0.305559, -0.487794 +6625, 0.187247, -0.796008, -0.305559, -0.487794 +6626, 0.187247, -0.796008, -0.305559, -0.487794 +6627, 0.187247, -0.796008, -0.305559, -0.487794 +6628, 0.187247, -0.796008, -0.305559, -0.487794 +6629, 0.187247, -0.796008, -0.305559, -0.487794 +6630, 0.187247, -0.796008, -0.305559, -0.487794 +6631, 0.187247, -0.796008, -0.305559, -0.487794 +6632, 0.187247, -0.796008, -0.305559, -0.487794 +6633, 0.187247, -0.796008, -0.305559, -0.487794 +6634, 0.187247, -0.796008, -0.305559, -0.487794 +6635, 0.187247, -0.796008, -0.305559, -0.487794 +6636, 0.187247, -0.796008, -0.305559, -0.487794 +6637, 0.187247, -0.796008, -0.305559, -0.487794 +6638, 0.187247, -0.796008, -0.305559, -0.487794 +6639, 0.187247, -0.796008, -0.305559, -0.487794 +6640, 0.187247, -0.796008, -0.305559, -0.487794 +6641, 0.187247, -0.796008, -0.305559, -0.487794 +6642, 0.187247, -0.796008, -0.305559, -0.487794 +6643, 0.187247, -0.796008, -0.305559, -0.487794 +6644, 0.187247, -0.796008, -0.305559, -0.487794 +6645, 0.187247, -0.796008, -0.305559, -0.487794 +6646, 0.187247, -0.796008, -0.305559, -0.487794 +6647, 0.187247, -0.796008, -0.305559, -0.487794 +6648, 0.187247, -0.796008, -0.305559, -0.487794 +6649, 0.187247, -0.796008, -0.305559, -0.487794 +6650, 0.187247, -0.796008, -0.305559, -0.487794 +6651, 0.187247, -0.796008, -0.305559, -0.487794 +6652, 0.187247, -0.796008, -0.305559, -0.487794 +6653, 0.187247, -0.796008, -0.305559, -0.487794 +6654, 0.187247, -0.796008, -0.305559, -0.487794 +6655, 0.187247, -0.796008, -0.305559, -0.487794 +6656, 0.187247, -0.796008, -0.305559, -0.487794 +6657, 0.187247, -0.796008, -0.305559, -0.487794 +6658, 0.187247, -0.796008, -0.305559, -0.487794 +6659, 0.187247, -0.796008, -0.305559, -0.487794 +6660, 0.187247, -0.796008, -0.305559, -0.487794 +6661, 0.187247, -0.796008, -0.305559, -0.487794 +6662, 0.187247, -0.796008, -0.305559, -0.487794 +6663, 0.187247, -0.796008, -0.305559, -0.487794 +6664, 0.187247, -0.796008, -0.305559, -0.487794 +6665, 0.187247, -0.796008, -0.305559, -0.487794 +6666, 0.187247, -0.796008, -0.305559, -0.487794 +6667, 0.187247, -0.796008, -0.305559, -0.487794 +6668, 0.187247, -0.796008, -0.305559, -0.487794 +6669, 0.187247, -0.796008, -0.305559, -0.487794 +6670, 0.187247, -0.796008, -0.305559, -0.487794 +6671, 0.187247, -0.796008, -0.305559, -0.487794 +6672, 0.187247, -0.796008, -0.305559, -0.487794 +6673, 0.187247, -0.796008, -0.305559, -0.487794 +6674, 0.187247, -0.796008, -0.305559, -0.487794 +6675, 0.187247, -0.796008, -0.305559, -0.487794 +6676, 0.187247, -0.796008, -0.305559, -0.487794 +6677, 0.187247, -0.796008, -0.305559, -0.487794 +6678, 0.187247, -0.796008, -0.305559, -0.487794 +6679, 0.187247, -0.796008, -0.305559, -0.487794 +6680, 0.187247, -0.796008, -0.305559, -0.487794 +6681, 0.187247, -0.796008, -0.305559, -0.487794 +6682, 0.187247, -0.796008, -0.305559, -0.487794 +6683, 0.187247, -0.796008, -0.305559, -0.487794 +6684, 0.187247, -0.796008, -0.305559, -0.487794 +6685, 0.187247, -0.796008, -0.305559, -0.487794 +6686, 0.187247, -0.796008, -0.305559, -0.487794 +6687, 0.187247, -0.796008, -0.305559, -0.487794 +6688, 0.187247, -0.796008, -0.305559, -0.487794 +6689, 0.187247, -0.796008, -0.305559, -0.487794 +6690, 0.187247, -0.796008, -0.305559, -0.487794 +6691, 0.187247, -0.796008, -0.305559, -0.487794 +6692, 0.187247, -0.796008, -0.305559, -0.487794 +6693, 0.187247, -0.796008, -0.305559, -0.487794 +6694, 0.187247, -0.796008, -0.305559, -0.487794 +6695, 0.187247, -0.796008, -0.305559, -0.487794 +6696, 0.187247, -0.796008, -0.305559, -0.487794 +6697, 0.187247, -0.796008, -0.305559, -0.487794 +6698, 0.187247, -0.796008, -0.305559, -0.487794 +6699, 0.187247, -0.796008, -0.305559, -0.487794 +6700, 0.204025, -0.777602, -0.314172, -0.504981 +6701, 0.204025, -0.777602, -0.314172, -0.504981 +6702, 0.204025, -0.777602, -0.314172, -0.504981 +6703, 0.204025, -0.777602, -0.314172, -0.504981 +6704, 0.204025, -0.777602, -0.314172, -0.504981 +6705, 0.204025, -0.777602, -0.314172, -0.504981 +6706, 0.204025, -0.777602, -0.314172, -0.504981 +6707, 0.204025, -0.777602, -0.314172, -0.504981 +6708, 0.204025, -0.777602, -0.314172, -0.504981 +6709, 0.204025, -0.777602, -0.314172, -0.504981 +6710, 0.204025, -0.777602, -0.314172, -0.504981 +6711, 0.204025, -0.777602, -0.314172, -0.504981 +6712, 0.204025, -0.777602, -0.314172, -0.504981 +6713, 0.204025, -0.777602, -0.314172, -0.504981 +6714, 0.204025, -0.777602, -0.314172, -0.504981 +6715, 0.204025, -0.777602, -0.314172, -0.504981 +6716, 0.204025, -0.777602, -0.314172, -0.504981 +6717, 0.204025, -0.777602, -0.314172, -0.504981 +6718, 0.204025, -0.777602, -0.314172, -0.504981 +6719, 0.204025, -0.777602, -0.314172, -0.504981 +6720, 0.204025, -0.777602, -0.314172, -0.504981 +6721, 0.204025, -0.777602, -0.314172, -0.504981 +6722, 0.204025, -0.777602, -0.314172, -0.504981 +6723, 0.204025, -0.777602, -0.314172, -0.504981 +6724, 0.204025, -0.777602, -0.314172, -0.504981 +6725, 0.204025, -0.777602, -0.314172, -0.504981 +6726, 0.204025, -0.777602, -0.314172, -0.504981 +6727, 0.204025, -0.777602, -0.314172, -0.504981 +6728, 0.204025, -0.777602, -0.314172, -0.504981 +6729, 0.204025, -0.777602, -0.314172, -0.504981 +6730, 0.204025, -0.777602, -0.314172, -0.504981 +6731, 0.204025, -0.777602, -0.314172, -0.504981 +6732, 0.204025, -0.777602, -0.314172, -0.504981 +6733, 0.204025, -0.777602, -0.314172, -0.504981 +6734, 0.204025, -0.777602, -0.314172, -0.504981 +6735, 0.204025, -0.777602, -0.314172, -0.504981 +6736, 0.204025, -0.777602, -0.314172, -0.504981 +6737, 0.204025, -0.777602, -0.314172, -0.504981 +6738, 0.204025, -0.777602, -0.314172, -0.504981 +6739, 0.204025, -0.777602, -0.314172, -0.504981 +6740, 0.204025, -0.777602, -0.314172, -0.504981 +6741, 0.204025, -0.777602, -0.314172, -0.504981 +6742, 0.204025, -0.777602, -0.314172, -0.504981 +6743, 0.204025, -0.777602, -0.314172, -0.504981 +6744, 0.204025, -0.777602, -0.314172, -0.504981 +6745, 0.204025, -0.777602, -0.314172, -0.504981 +6746, 0.204025, -0.777602, -0.314172, -0.504981 +6747, 0.204025, -0.777602, -0.314172, -0.504981 +6748, 0.204025, -0.777602, -0.314172, -0.504981 +6749, 0.204025, -0.777602, -0.314172, -0.504981 +6750, 0.204025, -0.777602, -0.314172, -0.504981 +6751, 0.204025, -0.777602, -0.314172, -0.504981 +6752, 0.204025, -0.777602, -0.314172, -0.504981 +6753, 0.204025, -0.777602, -0.314172, -0.504981 +6754, 0.204025, -0.777602, -0.314172, -0.504981 +6755, 0.204025, -0.777602, -0.314172, -0.504981 +6756, 0.204025, -0.777602, -0.314172, -0.504981 +6757, 0.204025, -0.777602, -0.314172, -0.504981 +6758, 0.204025, -0.777602, -0.314172, -0.504981 +6759, 0.204025, -0.777602, -0.314172, -0.504981 +6760, 0.204025, -0.777602, -0.314172, -0.504981 +6761, 0.204025, -0.777602, -0.314172, -0.504981 +6762, 0.204025, -0.777602, -0.314172, -0.504981 +6763, 0.204025, -0.777602, -0.314172, -0.504981 +6764, 0.204025, -0.777602, -0.314172, -0.504981 +6765, 0.204025, -0.777602, -0.314172, -0.504981 +6766, 0.204025, -0.777602, -0.314172, -0.504981 +6767, 0.204025, -0.777602, -0.314172, -0.504981 +6768, 0.204025, -0.777602, -0.314172, -0.504981 +6769, 0.204025, -0.777602, -0.314172, -0.504981 +6770, 0.204025, -0.777602, -0.314172, -0.504981 +6771, 0.204025, -0.777602, -0.314172, -0.504981 +6772, 0.204025, -0.777602, -0.314172, -0.504981 +6773, 0.204025, -0.777602, -0.314172, -0.504981 +6774, 0.204025, -0.777602, -0.314172, -0.504981 +6775, 0.204025, -0.777602, -0.314172, -0.504981 +6776, 0.204025, -0.777602, -0.314172, -0.504981 +6777, 0.204025, -0.777602, -0.314172, -0.504981 +6778, 0.204025, -0.777602, -0.314172, -0.504981 +6779, 0.204025, -0.777602, -0.314172, -0.504981 +6780, 0.204025, -0.777602, -0.314172, -0.504981 +6781, 0.204025, -0.777602, -0.314172, -0.504981 +6782, 0.204025, -0.777602, -0.314172, -0.504981 +6783, 0.204025, -0.777602, -0.314172, -0.504981 +6784, 0.204025, -0.777602, -0.314172, -0.504981 +6785, 0.204025, -0.777602, -0.314172, -0.504981 +6786, 0.204025, -0.777602, -0.314172, -0.504981 +6787, 0.204025, -0.777602, -0.314172, -0.504981 +6788, 0.204025, -0.777602, -0.314172, -0.504981 +6789, 0.204025, -0.777602, -0.314172, -0.504981 +6790, 0.204025, -0.777602, -0.314172, -0.504981 +6791, 0.204025, -0.777602, -0.314172, -0.504981 +6792, 0.204025, -0.777602, -0.314172, -0.504981 +6793, 0.204025, -0.777602, -0.314172, -0.504981 +6794, 0.204025, -0.777602, -0.314172, -0.504981 +6795, 0.204025, -0.777602, -0.314172, -0.504981 +6796, 0.204025, -0.777602, -0.314172, -0.504981 +6797, 0.204025, -0.777602, -0.314172, -0.504981 +6798, 0.204025, -0.777602, -0.314172, -0.504981 +6799, 0.204025, -0.777602, -0.314172, -0.504981 +6800, 0.221313, -0.758612, -0.322012, -0.521380 +6801, 0.221313, -0.758612, -0.322012, -0.521380 +6802, 0.221313, -0.758612, -0.322012, -0.521380 +6803, 0.221313, -0.758612, -0.322012, -0.521380 +6804, 0.221313, -0.758612, -0.322012, -0.521380 +6805, 0.221313, -0.758612, -0.322012, -0.521380 +6806, 0.221313, -0.758612, -0.322012, -0.521380 +6807, 0.221313, -0.758612, -0.322012, -0.521380 +6808, 0.221313, -0.758612, -0.322012, -0.521380 +6809, 0.221313, -0.758612, -0.322012, -0.521380 +6810, 0.221313, -0.758612, -0.322012, -0.521380 +6811, 0.221313, -0.758612, -0.322012, -0.521380 +6812, 0.221313, -0.758612, -0.322012, -0.521380 +6813, 0.221313, -0.758612, -0.322012, -0.521380 +6814, 0.221313, -0.758612, -0.322012, -0.521380 +6815, 0.221313, -0.758612, -0.322012, -0.521380 +6816, 0.221313, -0.758612, -0.322012, -0.521380 +6817, 0.221313, -0.758612, -0.322012, -0.521380 +6818, 0.221313, -0.758612, -0.322012, -0.521380 +6819, 0.221313, -0.758612, -0.322012, -0.521380 +6820, 0.221313, -0.758612, -0.322012, -0.521380 +6821, 0.221313, -0.758612, -0.322012, -0.521380 +6822, 0.221313, -0.758612, -0.322012, -0.521380 +6823, 0.221313, -0.758612, -0.322012, -0.521380 +6824, 0.221313, -0.758612, -0.322012, -0.521380 +6825, 0.221313, -0.758612, -0.322012, -0.521380 +6826, 0.221313, -0.758612, -0.322012, -0.521380 +6827, 0.221313, -0.758612, -0.322012, -0.521380 +6828, 0.221313, -0.758612, -0.322012, -0.521380 +6829, 0.221313, -0.758612, -0.322012, -0.521380 +6830, 0.221313, -0.758612, -0.322012, -0.521380 +6831, 0.221313, -0.758612, -0.322012, -0.521380 +6832, 0.221313, -0.758612, -0.322012, -0.521380 +6833, 0.221313, -0.758612, -0.322012, -0.521380 +6834, 0.221313, -0.758612, -0.322012, -0.521380 +6835, 0.221313, -0.758612, -0.322012, -0.521380 +6836, 0.221313, -0.758612, -0.322012, -0.521380 +6837, 0.221313, -0.758612, -0.322012, -0.521380 +6838, 0.221313, -0.758612, -0.322012, -0.521380 +6839, 0.221313, -0.758612, -0.322012, -0.521380 +6840, 0.221313, -0.758612, -0.322012, -0.521380 +6841, 0.221313, -0.758612, -0.322012, -0.521380 +6842, 0.221313, -0.758612, -0.322012, -0.521380 +6843, 0.221313, -0.758612, -0.322012, -0.521380 +6844, 0.221313, -0.758612, -0.322012, -0.521380 +6845, 0.221313, -0.758612, -0.322012, -0.521380 +6846, 0.221313, -0.758612, -0.322012, -0.521380 +6847, 0.221313, -0.758612, -0.322012, -0.521380 +6848, 0.221313, -0.758612, -0.322012, -0.521380 +6849, 0.221313, -0.758612, -0.322012, -0.521380 +6850, 0.221313, -0.758612, -0.322012, -0.521380 +6851, 0.221313, -0.758612, -0.322012, -0.521380 +6852, 0.221313, -0.758612, -0.322012, -0.521380 +6853, 0.221313, -0.758612, -0.322012, -0.521380 +6854, 0.221313, -0.758612, -0.322012, -0.521380 +6855, 0.221313, -0.758612, -0.322012, -0.521380 +6856, 0.221313, -0.758612, -0.322012, -0.521380 +6857, 0.221313, -0.758612, -0.322012, -0.521380 +6858, 0.221313, -0.758612, -0.322012, -0.521380 +6859, 0.221313, -0.758612, -0.322012, -0.521380 +6860, 0.221313, -0.758612, -0.322012, -0.521380 +6861, 0.221313, -0.758612, -0.322012, -0.521380 +6862, 0.221313, -0.758612, -0.322012, -0.521380 +6863, 0.221313, -0.758612, -0.322012, -0.521380 +6864, 0.221313, -0.758612, -0.322012, -0.521380 +6865, 0.221313, -0.758612, -0.322012, -0.521380 +6866, 0.221313, -0.758612, -0.322012, -0.521380 +6867, 0.221313, -0.758612, -0.322012, -0.521380 +6868, 0.221313, -0.758612, -0.322012, -0.521380 +6869, 0.221313, -0.758612, -0.322012, -0.521380 +6870, 0.221313, -0.758612, -0.322012, -0.521380 +6871, 0.221313, -0.758612, -0.322012, -0.521380 +6872, 0.221313, -0.758612, -0.322012, -0.521380 +6873, 0.221313, -0.758612, -0.322012, -0.521380 +6874, 0.221313, -0.758612, -0.322012, -0.521380 +6875, 0.221313, -0.758612, -0.322012, -0.521380 +6876, 0.221313, -0.758612, -0.322012, -0.521380 +6877, 0.221313, -0.758612, -0.322012, -0.521380 +6878, 0.221313, -0.758612, -0.322012, -0.521380 +6879, 0.221313, -0.758612, -0.322012, -0.521380 +6880, 0.221313, -0.758612, -0.322012, -0.521380 +6881, 0.221313, -0.758612, -0.322012, -0.521380 +6882, 0.221313, -0.758612, -0.322012, -0.521380 +6883, 0.221313, -0.758612, -0.322012, -0.521380 +6884, 0.221313, -0.758612, -0.322012, -0.521380 +6885, 0.221313, -0.758612, -0.322012, -0.521380 +6886, 0.221313, -0.758612, -0.322012, -0.521380 +6887, 0.221313, -0.758612, -0.322012, -0.521380 +6888, 0.221313, -0.758612, -0.322012, -0.521380 +6889, 0.221313, -0.758612, -0.322012, -0.521380 +6890, 0.221313, -0.758612, -0.322012, -0.521380 +6891, 0.221313, -0.758612, -0.322012, -0.521380 +6892, 0.221313, -0.758612, -0.322012, -0.521380 +6893, 0.221313, -0.758612, -0.322012, -0.521380 +6894, 0.221313, -0.758612, -0.322012, -0.521380 +6895, 0.221313, -0.758612, -0.322012, -0.521380 +6896, 0.221313, -0.758612, -0.322012, -0.521380 +6897, 0.221313, -0.758612, -0.322012, -0.521380 +6898, 0.221313, -0.758612, -0.322012, -0.521380 +6899, 0.221313, -0.758612, -0.322012, -0.521380 +6900, 0.239074, -0.739074, -0.329057, -0.536969 +6901, 0.239074, -0.739074, -0.329057, -0.536969 +6902, 0.239074, -0.739074, -0.329057, -0.536969 +6903, 0.239074, -0.739074, -0.329057, -0.536969 +6904, 0.239074, -0.739074, -0.329057, -0.536969 +6905, 0.239074, -0.739074, -0.329057, -0.536969 +6906, 0.239074, -0.739074, -0.329057, -0.536969 +6907, 0.239074, -0.739074, -0.329057, -0.536969 +6908, 0.239074, -0.739074, -0.329057, -0.536969 +6909, 0.239074, -0.739074, -0.329057, -0.536969 +6910, 0.239074, -0.739074, -0.329057, -0.536969 +6911, 0.239074, -0.739074, -0.329057, -0.536969 +6912, 0.239074, -0.739074, -0.329057, -0.536969 +6913, 0.239074, -0.739074, -0.329057, -0.536969 +6914, 0.239074, -0.739074, -0.329057, -0.536969 +6915, 0.239074, -0.739074, -0.329057, -0.536969 +6916, 0.239074, -0.739074, -0.329057, -0.536969 +6917, 0.239074, -0.739074, -0.329057, -0.536969 +6918, 0.239074, -0.739074, -0.329057, -0.536969 +6919, 0.239074, -0.739074, -0.329057, -0.536969 +6920, 0.239074, -0.739074, -0.329057, -0.536969 +6921, 0.239074, -0.739074, -0.329057, -0.536969 +6922, 0.239074, -0.739074, -0.329057, -0.536969 +6923, 0.239074, -0.739074, -0.329057, -0.536969 +6924, 0.239074, -0.739074, -0.329057, -0.536969 +6925, 0.239074, -0.739074, -0.329057, -0.536969 +6926, 0.239074, -0.739074, -0.329057, -0.536969 +6927, 0.239074, -0.739074, -0.329057, -0.536969 +6928, 0.239074, -0.739074, -0.329057, -0.536969 +6929, 0.239074, -0.739074, -0.329057, -0.536969 +6930, 0.239074, -0.739074, -0.329057, -0.536969 +6931, 0.239074, -0.739074, -0.329057, -0.536969 +6932, 0.239074, -0.739074, -0.329057, -0.536969 +6933, 0.239074, -0.739074, -0.329057, -0.536969 +6934, 0.239074, -0.739074, -0.329057, -0.536969 +6935, 0.239074, -0.739074, -0.329057, -0.536969 +6936, 0.239074, -0.739074, -0.329057, -0.536969 +6937, 0.239074, -0.739074, -0.329057, -0.536969 +6938, 0.239074, -0.739074, -0.329057, -0.536969 +6939, 0.239074, -0.739074, -0.329057, -0.536969 +6940, 0.239074, -0.739074, -0.329057, -0.536969 +6941, 0.239074, -0.739074, -0.329057, -0.536969 +6942, 0.239074, -0.739074, -0.329057, -0.536969 +6943, 0.239074, -0.739074, -0.329057, -0.536969 +6944, 0.239074, -0.739074, -0.329057, -0.536969 +6945, 0.239074, -0.739074, -0.329057, -0.536969 +6946, 0.239074, -0.739074, -0.329057, -0.536969 +6947, 0.239074, -0.739074, -0.329057, -0.536969 +6948, 0.239074, -0.739074, -0.329057, -0.536969 +6949, 0.239074, -0.739074, -0.329057, -0.536969 +6950, 0.239074, -0.739074, -0.329057, -0.536969 +6951, 0.239074, -0.739074, -0.329057, -0.536969 +6952, 0.239074, -0.739074, -0.329057, -0.536969 +6953, 0.239074, -0.739074, -0.329057, -0.536969 +6954, 0.239074, -0.739074, -0.329057, -0.536969 +6955, 0.239074, -0.739074, -0.329057, -0.536969 +6956, 0.239074, -0.739074, -0.329057, -0.536969 +6957, 0.239074, -0.739074, -0.329057, -0.536969 +6958, 0.239074, -0.739074, -0.329057, -0.536969 +6959, 0.239074, -0.739074, -0.329057, -0.536969 +6960, 0.239074, -0.739074, -0.329057, -0.536969 +6961, 0.239074, -0.739074, -0.329057, -0.536969 +6962, 0.239074, -0.739074, -0.329057, -0.536969 +6963, 0.239074, -0.739074, -0.329057, -0.536969 +6964, 0.239074, -0.739074, -0.329057, -0.536969 +6965, 0.239074, -0.739074, -0.329057, -0.536969 +6966, 0.239074, -0.739074, -0.329057, -0.536969 +6967, 0.239074, -0.739074, -0.329057, -0.536969 +6968, 0.239074, -0.739074, -0.329057, -0.536969 +6969, 0.239074, -0.739074, -0.329057, -0.536969 +6970, 0.239074, -0.739074, -0.329057, -0.536969 +6971, 0.239074, -0.739074, -0.329057, -0.536969 +6972, 0.239074, -0.739074, -0.329057, -0.536969 +6973, 0.239074, -0.739074, -0.329057, -0.536969 +6974, 0.239074, -0.739074, -0.329057, -0.536969 +6975, 0.239074, -0.739074, -0.329057, -0.536969 +6976, 0.239074, -0.739074, -0.329057, -0.536969 +6977, 0.239074, -0.739074, -0.329057, -0.536969 +6978, 0.239074, -0.739074, -0.329057, -0.536969 +6979, 0.239074, -0.739074, -0.329057, -0.536969 +6980, 0.239074, -0.739074, -0.329057, -0.536969 +6981, 0.239074, -0.739074, -0.329057, -0.536969 +6982, 0.239074, -0.739074, -0.329057, -0.536969 +6983, 0.239074, -0.739074, -0.329057, -0.536969 +6984, 0.239074, -0.739074, -0.329057, -0.536969 +6985, 0.239074, -0.739074, -0.329057, -0.536969 +6986, 0.239074, -0.739074, -0.329057, -0.536969 +6987, 0.239074, -0.739074, -0.329057, -0.536969 +6988, 0.239074, -0.739074, -0.329057, -0.536969 +6989, 0.239074, -0.739074, -0.329057, -0.536969 +6990, 0.239074, -0.739074, -0.329057, -0.536969 +6991, 0.239074, -0.739074, -0.329057, -0.536969 +6992, 0.239074, -0.739074, -0.329057, -0.536969 +6993, 0.239074, -0.739074, -0.329057, -0.536969 +6994, 0.239074, -0.739074, -0.329057, -0.536969 +6995, 0.239074, -0.739074, -0.329057, -0.536969 +6996, 0.239074, -0.739074, -0.329057, -0.536969 +6997, 0.239074, -0.739074, -0.329057, -0.536969 +6998, 0.239074, -0.739074, -0.329057, -0.536969 +6999, 0.239074, -0.739074, -0.329057, -0.536969 +7000, 0.257274, -0.719022, -0.335286, -0.551725 +7001, 0.257274, -0.719022, -0.335286, -0.551725 +7002, 0.257274, -0.719022, -0.335286, -0.551725 +7003, 0.257274, -0.719022, -0.335286, -0.551725 +7004, 0.257274, -0.719022, -0.335286, -0.551725 +7005, 0.257274, -0.719022, -0.335286, -0.551725 +7006, 0.257274, -0.719022, -0.335286, -0.551725 +7007, 0.257274, -0.719022, -0.335286, -0.551725 +7008, 0.257274, -0.719022, -0.335286, -0.551725 +7009, 0.257274, -0.719022, -0.335286, -0.551725 +7010, 0.257274, -0.719022, -0.335286, -0.551725 +7011, 0.257274, -0.719022, -0.335286, -0.551725 +7012, 0.257274, -0.719022, -0.335286, -0.551725 +7013, 0.257274, -0.719022, -0.335286, -0.551725 +7014, 0.257274, -0.719022, -0.335286, -0.551725 +7015, 0.257274, -0.719022, -0.335286, -0.551725 +7016, 0.257274, -0.719022, -0.335286, -0.551725 +7017, 0.257274, -0.719022, -0.335286, -0.551725 +7018, 0.257274, -0.719022, -0.335286, -0.551725 +7019, 0.257274, -0.719022, -0.335286, -0.551725 +7020, 0.257274, -0.719022, -0.335286, -0.551725 +7021, 0.257274, -0.719022, -0.335286, -0.551725 +7022, 0.257274, -0.719022, -0.335286, -0.551725 +7023, 0.257274, -0.719022, -0.335286, -0.551725 +7024, 0.257274, -0.719022, -0.335286, -0.551725 +7025, 0.257274, -0.719022, -0.335286, -0.551725 +7026, 0.257274, -0.719022, -0.335286, -0.551725 +7027, 0.257274, -0.719022, -0.335286, -0.551725 +7028, 0.257274, -0.719022, -0.335286, -0.551725 +7029, 0.257274, -0.719022, -0.335286, -0.551725 +7030, 0.257274, -0.719022, -0.335286, -0.551725 +7031, 0.257274, -0.719022, -0.335286, -0.551725 +7032, 0.257274, -0.719022, -0.335286, -0.551725 +7033, 0.257274, -0.719022, -0.335286, -0.551725 +7034, 0.257274, -0.719022, -0.335286, -0.551725 +7035, 0.257274, -0.719022, -0.335286, -0.551725 +7036, 0.257274, -0.719022, -0.335286, -0.551725 +7037, 0.257274, -0.719022, -0.335286, -0.551725 +7038, 0.257274, -0.719022, -0.335286, -0.551725 +7039, 0.257274, -0.719022, -0.335286, -0.551725 +7040, 0.257274, -0.719022, -0.335286, -0.551725 +7041, 0.257274, -0.719022, -0.335286, -0.551725 +7042, 0.257274, -0.719022, -0.335286, -0.551725 +7043, 0.257274, -0.719022, -0.335286, -0.551725 +7044, 0.257274, -0.719022, -0.335286, -0.551725 +7045, 0.257274, -0.719022, -0.335286, -0.551725 +7046, 0.257274, -0.719022, -0.335286, -0.551725 +7047, 0.257274, -0.719022, -0.335286, -0.551725 +7048, 0.257274, -0.719022, -0.335286, -0.551725 +7049, 0.257274, -0.719022, -0.335286, -0.551725 +7050, 0.257274, -0.719022, -0.335286, -0.551725 +7051, 0.257274, -0.719022, -0.335286, -0.551725 +7052, 0.257274, -0.719022, -0.335286, -0.551725 +7053, 0.257274, -0.719022, -0.335286, -0.551725 +7054, 0.257274, -0.719022, -0.335286, -0.551725 +7055, 0.257274, -0.719022, -0.335286, -0.551725 +7056, 0.257274, -0.719022, -0.335286, -0.551725 +7057, 0.257274, -0.719022, -0.335286, -0.551725 +7058, 0.257274, -0.719022, -0.335286, -0.551725 +7059, 0.257274, -0.719022, -0.335286, -0.551725 +7060, 0.257274, -0.719022, -0.335286, -0.551725 +7061, 0.257274, -0.719022, -0.335286, -0.551725 +7062, 0.257274, -0.719022, -0.335286, -0.551725 +7063, 0.257274, -0.719022, -0.335286, -0.551725 +7064, 0.257274, -0.719022, -0.335286, -0.551725 +7065, 0.257274, -0.719022, -0.335286, -0.551725 +7066, 0.257274, -0.719022, -0.335286, -0.551725 +7067, 0.257274, -0.719022, -0.335286, -0.551725 +7068, 0.257274, -0.719022, -0.335286, -0.551725 +7069, 0.257274, -0.719022, -0.335286, -0.551725 +7070, 0.257274, -0.719022, -0.335286, -0.551725 +7071, 0.257274, -0.719022, -0.335286, -0.551725 +7072, 0.257274, -0.719022, -0.335286, -0.551725 +7073, 0.257274, -0.719022, -0.335286, -0.551725 +7074, 0.257274, -0.719022, -0.335286, -0.551725 +7075, 0.257274, -0.719022, -0.335286, -0.551725 +7076, 0.257274, -0.719022, -0.335286, -0.551725 +7077, 0.257274, -0.719022, -0.335286, -0.551725 +7078, 0.257274, -0.719022, -0.335286, -0.551725 +7079, 0.257274, -0.719022, -0.335286, -0.551725 +7080, 0.257274, -0.719022, -0.335286, -0.551725 +7081, 0.257274, -0.719022, -0.335286, -0.551725 +7082, 0.257274, -0.719022, -0.335286, -0.551725 +7083, 0.257274, -0.719022, -0.335286, -0.551725 +7084, 0.257274, -0.719022, -0.335286, -0.551725 +7085, 0.257274, -0.719022, -0.335286, -0.551725 +7086, 0.257274, -0.719022, -0.335286, -0.551725 +7087, 0.257274, -0.719022, -0.335286, -0.551725 +7088, 0.257274, -0.719022, -0.335286, -0.551725 +7089, 0.257274, -0.719022, -0.335286, -0.551725 +7090, 0.257274, -0.719022, -0.335286, -0.551725 +7091, 0.257274, -0.719022, -0.335286, -0.551725 +7092, 0.257274, -0.719022, -0.335286, -0.551725 +7093, 0.257274, -0.719022, -0.335286, -0.551725 +7094, 0.257274, -0.719022, -0.335286, -0.551725 +7095, 0.257274, -0.719022, -0.335286, -0.551725 +7096, 0.257274, -0.719022, -0.335286, -0.551725 +7097, 0.257274, -0.719022, -0.335286, -0.551725 +7098, 0.257274, -0.719022, -0.335286, -0.551725 +7099, 0.257274, -0.719022, -0.335286, -0.551725 +7100, 0.275876, -0.698494, -0.340678, -0.565629 +7101, 0.275876, -0.698494, -0.340678, -0.565629 +7102, 0.275876, -0.698494, -0.340678, -0.565629 +7103, 0.275876, -0.698494, -0.340678, -0.565629 +7104, 0.275876, -0.698494, -0.340678, -0.565629 +7105, 0.275876, -0.698494, -0.340678, -0.565629 +7106, 0.275876, -0.698494, -0.340678, -0.565629 +7107, 0.275876, -0.698494, -0.340678, -0.565629 +7108, 0.275876, -0.698494, -0.340678, -0.565629 +7109, 0.275876, -0.698494, -0.340678, -0.565629 +7110, 0.275876, -0.698494, -0.340678, -0.565629 +7111, 0.275876, -0.698494, -0.340678, -0.565629 +7112, 0.275876, -0.698494, -0.340678, -0.565629 +7113, 0.275876, -0.698494, -0.340678, -0.565629 +7114, 0.275876, -0.698494, -0.340678, -0.565629 +7115, 0.275876, -0.698494, -0.340678, -0.565629 +7116, 0.275876, -0.698494, -0.340678, -0.565629 +7117, 0.275876, -0.698494, -0.340678, -0.565629 +7118, 0.275876, -0.698494, -0.340678, -0.565629 +7119, 0.275876, -0.698494, -0.340678, -0.565629 +7120, 0.275876, -0.698494, -0.340678, -0.565629 +7121, 0.275876, -0.698494, -0.340678, -0.565629 +7122, 0.275876, -0.698494, -0.340678, -0.565629 +7123, 0.275876, -0.698494, -0.340678, -0.565629 +7124, 0.275876, -0.698494, -0.340678, -0.565629 +7125, 0.275876, -0.698494, -0.340678, -0.565629 +7126, 0.275876, -0.698494, -0.340678, -0.565629 +7127, 0.275876, -0.698494, -0.340678, -0.565629 +7128, 0.275876, -0.698494, -0.340678, -0.565629 +7129, 0.275876, -0.698494, -0.340678, -0.565629 +7130, 0.275876, -0.698494, -0.340678, -0.565629 +7131, 0.275876, -0.698494, -0.340678, -0.565629 +7132, 0.275876, -0.698494, -0.340678, -0.565629 +7133, 0.275876, -0.698494, -0.340678, -0.565629 +7134, 0.275876, -0.698494, -0.340678, -0.565629 +7135, 0.275876, -0.698494, -0.340678, -0.565629 +7136, 0.275876, -0.698494, -0.340678, -0.565629 +7137, 0.275876, -0.698494, -0.340678, -0.565629 +7138, 0.275876, -0.698494, -0.340678, -0.565629 +7139, 0.275876, -0.698494, -0.340678, -0.565629 +7140, 0.275876, -0.698494, -0.340678, -0.565629 +7141, 0.275876, -0.698494, -0.340678, -0.565629 +7142, 0.275876, -0.698494, -0.340678, -0.565629 +7143, 0.275876, -0.698494, -0.340678, -0.565629 +7144, 0.275876, -0.698494, -0.340678, -0.565629 +7145, 0.275876, -0.698494, -0.340678, -0.565629 +7146, 0.275876, -0.698494, -0.340678, -0.565629 +7147, 0.275876, -0.698494, -0.340678, -0.565629 +7148, 0.275876, -0.698494, -0.340678, -0.565629 +7149, 0.275876, -0.698494, -0.340678, -0.565629 +7150, 0.275876, -0.698494, -0.340678, -0.565629 +7151, 0.275876, -0.698494, -0.340678, -0.565629 +7152, 0.275876, -0.698494, -0.340678, -0.565629 +7153, 0.275876, -0.698494, -0.340678, -0.565629 +7154, 0.275876, -0.698494, -0.340678, -0.565629 +7155, 0.275876, -0.698494, -0.340678, -0.565629 +7156, 0.275876, -0.698494, -0.340678, -0.565629 +7157, 0.275876, -0.698494, -0.340678, -0.565629 +7158, 0.275876, -0.698494, -0.340678, -0.565629 +7159, 0.275876, -0.698494, -0.340678, -0.565629 +7160, 0.275876, -0.698494, -0.340678, -0.565629 +7161, 0.275876, -0.698494, -0.340678, -0.565629 +7162, 0.275876, -0.698494, -0.340678, -0.565629 +7163, 0.275876, -0.698494, -0.340678, -0.565629 +7164, 0.275876, -0.698494, -0.340678, -0.565629 +7165, 0.275876, -0.698494, -0.340678, -0.565629 +7166, 0.275876, -0.698494, -0.340678, -0.565629 +7167, 0.275876, -0.698494, -0.340678, -0.565629 +7168, 0.275876, -0.698494, -0.340678, -0.565629 +7169, 0.275876, -0.698494, -0.340678, -0.565629 +7170, 0.275876, -0.698494, -0.340678, -0.565629 +7171, 0.275876, -0.698494, -0.340678, -0.565629 +7172, 0.275876, -0.698494, -0.340678, -0.565629 +7173, 0.275876, -0.698494, -0.340678, -0.565629 +7174, 0.275876, -0.698494, -0.340678, -0.565629 +7175, 0.275876, -0.698494, -0.340678, -0.565629 +7176, 0.275876, -0.698494, -0.340678, -0.565629 +7177, 0.275876, -0.698494, -0.340678, -0.565629 +7178, 0.275876, -0.698494, -0.340678, -0.565629 +7179, 0.275876, -0.698494, -0.340678, -0.565629 +7180, 0.275876, -0.698494, -0.340678, -0.565629 +7181, 0.275876, -0.698494, -0.340678, -0.565629 +7182, 0.275876, -0.698494, -0.340678, -0.565629 +7183, 0.275876, -0.698494, -0.340678, -0.565629 +7184, 0.275876, -0.698494, -0.340678, -0.565629 +7185, 0.275876, -0.698494, -0.340678, -0.565629 +7186, 0.275876, -0.698494, -0.340678, -0.565629 +7187, 0.275876, -0.698494, -0.340678, -0.565629 +7188, 0.275876, -0.698494, -0.340678, -0.565629 +7189, 0.275876, -0.698494, -0.340678, -0.565629 +7190, 0.275876, -0.698494, -0.340678, -0.565629 +7191, 0.275876, -0.698494, -0.340678, -0.565629 +7192, 0.275876, -0.698494, -0.340678, -0.565629 +7193, 0.275876, -0.698494, -0.340678, -0.565629 +7194, 0.275876, -0.698494, -0.340678, -0.565629 +7195, 0.275876, -0.698494, -0.340678, -0.565629 +7196, 0.275876, -0.698494, -0.340678, -0.565629 +7197, 0.275876, -0.698494, -0.340678, -0.565629 +7198, 0.275876, -0.698494, -0.340678, -0.565629 +7199, 0.275876, -0.698494, -0.340678, -0.565629 +7200, 0.294843, -0.677527, -0.345217, -0.578662 +7201, 0.294843, -0.677527, -0.345217, -0.578662 +7202, 0.294843, -0.677527, -0.345217, -0.578662 +7203, 0.294843, -0.677527, -0.345217, -0.578662 +7204, 0.294843, -0.677527, -0.345217, -0.578662 +7205, 0.294843, -0.677527, -0.345217, -0.578662 +7206, 0.294843, -0.677527, -0.345217, -0.578662 +7207, 0.294843, -0.677527, -0.345217, -0.578662 +7208, 0.294843, -0.677527, -0.345217, -0.578662 +7209, 0.294843, -0.677527, -0.345217, -0.578662 +7210, 0.294843, -0.677527, -0.345217, -0.578662 +7211, 0.294843, -0.677527, -0.345217, -0.578662 +7212, 0.294843, -0.677527, -0.345217, -0.578662 +7213, 0.294843, -0.677527, -0.345217, -0.578662 +7214, 0.294843, -0.677527, -0.345217, -0.578662 +7215, 0.294843, -0.677527, -0.345217, -0.578662 +7216, 0.294843, -0.677527, -0.345217, -0.578662 +7217, 0.294843, -0.677527, -0.345217, -0.578662 +7218, 0.294843, -0.677527, -0.345217, -0.578662 +7219, 0.294843, -0.677527, -0.345217, -0.578662 +7220, 0.294843, -0.677527, -0.345217, -0.578662 +7221, 0.294843, -0.677527, -0.345217, -0.578662 +7222, 0.294843, -0.677527, -0.345217, -0.578662 +7223, 0.294843, -0.677527, -0.345217, -0.578662 +7224, 0.294843, -0.677527, -0.345217, -0.578662 +7225, 0.294843, -0.677527, -0.345217, -0.578662 +7226, 0.294843, -0.677527, -0.345217, -0.578662 +7227, 0.294843, -0.677527, -0.345217, -0.578662 +7228, 0.294843, -0.677527, -0.345217, -0.578662 +7229, 0.294843, -0.677527, -0.345217, -0.578662 +7230, 0.294843, -0.677527, -0.345217, -0.578662 +7231, 0.294843, -0.677527, -0.345217, -0.578662 +7232, 0.294843, -0.677527, -0.345217, -0.578662 +7233, 0.294843, -0.677527, -0.345217, -0.578662 +7234, 0.294843, -0.677527, -0.345217, -0.578662 +7235, 0.294843, -0.677527, -0.345217, -0.578662 +7236, 0.294843, -0.677527, -0.345217, -0.578662 +7237, 0.294843, -0.677527, -0.345217, -0.578662 +7238, 0.294843, -0.677527, -0.345217, -0.578662 +7239, 0.294843, -0.677527, -0.345217, -0.578662 +7240, 0.294843, -0.677527, -0.345217, -0.578662 +7241, 0.294843, -0.677527, -0.345217, -0.578662 +7242, 0.294843, -0.677527, -0.345217, -0.578662 +7243, 0.294843, -0.677527, -0.345217, -0.578662 +7244, 0.294843, -0.677527, -0.345217, -0.578662 +7245, 0.294843, -0.677527, -0.345217, -0.578662 +7246, 0.294843, -0.677527, -0.345217, -0.578662 +7247, 0.294843, -0.677527, -0.345217, -0.578662 +7248, 0.294843, -0.677527, -0.345217, -0.578662 +7249, 0.294843, -0.677527, -0.345217, -0.578662 +7250, 0.294843, -0.677527, -0.345217, -0.578662 +7251, 0.294843, -0.677527, -0.345217, -0.578662 +7252, 0.294843, -0.677527, -0.345217, -0.578662 +7253, 0.294843, -0.677527, -0.345217, -0.578662 +7254, 0.294843, -0.677527, -0.345217, -0.578662 +7255, 0.294843, -0.677527, -0.345217, -0.578662 +7256, 0.294843, -0.677527, -0.345217, -0.578662 +7257, 0.294843, -0.677527, -0.345217, -0.578662 +7258, 0.294843, -0.677527, -0.345217, -0.578662 +7259, 0.294843, -0.677527, -0.345217, -0.578662 +7260, 0.294843, -0.677527, -0.345217, -0.578662 +7261, 0.294843, -0.677527, -0.345217, -0.578662 +7262, 0.294843, -0.677527, -0.345217, -0.578662 +7263, 0.294843, -0.677527, -0.345217, -0.578662 +7264, 0.294843, -0.677527, -0.345217, -0.578662 +7265, 0.294843, -0.677527, -0.345217, -0.578662 +7266, 0.294843, -0.677527, -0.345217, -0.578662 +7267, 0.294843, -0.677527, -0.345217, -0.578662 +7268, 0.294843, -0.677527, -0.345217, -0.578662 +7269, 0.294843, -0.677527, -0.345217, -0.578662 +7270, 0.294843, -0.677527, -0.345217, -0.578662 +7271, 0.294843, -0.677527, -0.345217, -0.578662 +7272, 0.294843, -0.677527, -0.345217, -0.578662 +7273, 0.294843, -0.677527, -0.345217, -0.578662 +7274, 0.294843, -0.677527, -0.345217, -0.578662 +7275, 0.294843, -0.677527, -0.345217, -0.578662 +7276, 0.294843, -0.677527, -0.345217, -0.578662 +7277, 0.294843, -0.677527, -0.345217, -0.578662 +7278, 0.294843, -0.677527, -0.345217, -0.578662 +7279, 0.294843, -0.677527, -0.345217, -0.578662 +7280, 0.294843, -0.677527, -0.345217, -0.578662 +7281, 0.294843, -0.677527, -0.345217, -0.578662 +7282, 0.294843, -0.677527, -0.345217, -0.578662 +7283, 0.294843, -0.677527, -0.345217, -0.578662 +7284, 0.294843, -0.677527, -0.345217, -0.578662 +7285, 0.294843, -0.677527, -0.345217, -0.578662 +7286, 0.294843, -0.677527, -0.345217, -0.578662 +7287, 0.294843, -0.677527, -0.345217, -0.578662 +7288, 0.294843, -0.677527, -0.345217, -0.578662 +7289, 0.294843, -0.677527, -0.345217, -0.578662 +7290, 0.294843, -0.677527, -0.345217, -0.578662 +7291, 0.294843, -0.677527, -0.345217, -0.578662 +7292, 0.294843, -0.677527, -0.345217, -0.578662 +7293, 0.294843, -0.677527, -0.345217, -0.578662 +7294, 0.294843, -0.677527, -0.345217, -0.578662 +7295, 0.294843, -0.677527, -0.345217, -0.578662 +7296, 0.294843, -0.677527, -0.345217, -0.578662 +7297, 0.294843, -0.677527, -0.345217, -0.578662 +7298, 0.294843, -0.677527, -0.345217, -0.578662 +7299, 0.294843, -0.677527, -0.345217, -0.578662 +7300, 0.314138, -0.656158, -0.348885, -0.590807 +7301, 0.314138, -0.656158, -0.348885, -0.590807 +7302, 0.314138, -0.656158, -0.348885, -0.590807 +7303, 0.314138, -0.656158, -0.348885, -0.590807 +7304, 0.314138, -0.656158, -0.348885, -0.590807 +7305, 0.314138, -0.656158, -0.348885, -0.590807 +7306, 0.314138, -0.656158, -0.348885, -0.590807 +7307, 0.314138, -0.656158, -0.348885, -0.590807 +7308, 0.314138, -0.656158, -0.348885, -0.590807 +7309, 0.314138, -0.656158, -0.348885, -0.590807 +7310, 0.314138, -0.656158, -0.348885, -0.590807 +7311, 0.314138, -0.656158, -0.348885, -0.590807 +7312, 0.314138, -0.656158, -0.348885, -0.590807 +7313, 0.314138, -0.656158, -0.348885, -0.590807 +7314, 0.314138, -0.656158, -0.348885, -0.590807 +7315, 0.314138, -0.656158, -0.348885, -0.590807 +7316, 0.314138, -0.656158, -0.348885, -0.590807 +7317, 0.314138, -0.656158, -0.348885, -0.590807 +7318, 0.314138, -0.656158, -0.348885, -0.590807 +7319, 0.314138, -0.656158, -0.348885, -0.590807 +7320, 0.314138, -0.656158, -0.348885, -0.590807 +7321, 0.314138, -0.656158, -0.348885, -0.590807 +7322, 0.314138, -0.656158, -0.348885, -0.590807 +7323, 0.314138, -0.656158, -0.348885, -0.590807 +7324, 0.314138, -0.656158, -0.348885, -0.590807 +7325, 0.314138, -0.656158, -0.348885, -0.590807 +7326, 0.314138, -0.656158, -0.348885, -0.590807 +7327, 0.314138, -0.656158, -0.348885, -0.590807 +7328, 0.314138, -0.656158, -0.348885, -0.590807 +7329, 0.314138, -0.656158, -0.348885, -0.590807 +7330, 0.314138, -0.656158, -0.348885, -0.590807 +7331, 0.314138, -0.656158, -0.348885, -0.590807 +7332, 0.314138, -0.656158, -0.348885, -0.590807 +7333, 0.314138, -0.656158, -0.348885, -0.590807 +7334, 0.314138, -0.656158, -0.348885, -0.590807 +7335, 0.314138, -0.656158, -0.348885, -0.590807 +7336, 0.314138, -0.656158, -0.348885, -0.590807 +7337, 0.314138, -0.656158, -0.348885, -0.590807 +7338, 0.314138, -0.656158, -0.348885, -0.590807 +7339, 0.314138, -0.656158, -0.348885, -0.590807 +7340, 0.314138, -0.656158, -0.348885, -0.590807 +7341, 0.314138, -0.656158, -0.348885, -0.590807 +7342, 0.314138, -0.656158, -0.348885, -0.590807 +7343, 0.314138, -0.656158, -0.348885, -0.590807 +7344, 0.314138, -0.656158, -0.348885, -0.590807 +7345, 0.314138, -0.656158, -0.348885, -0.590807 +7346, 0.314138, -0.656158, -0.348885, -0.590807 +7347, 0.314138, -0.656158, -0.348885, -0.590807 +7348, 0.314138, -0.656158, -0.348885, -0.590807 +7349, 0.314138, -0.656158, -0.348885, -0.590807 +7350, 0.314138, -0.656158, -0.348885, -0.590807 +7351, 0.314138, -0.656158, -0.348885, -0.590807 +7352, 0.314138, -0.656158, -0.348885, -0.590807 +7353, 0.314138, -0.656158, -0.348885, -0.590807 +7354, 0.314138, -0.656158, -0.348885, -0.590807 +7355, 0.314138, -0.656158, -0.348885, -0.590807 +7356, 0.314138, -0.656158, -0.348885, -0.590807 +7357, 0.314138, -0.656158, -0.348885, -0.590807 +7358, 0.314138, -0.656158, -0.348885, -0.590807 +7359, 0.314138, -0.656158, -0.348885, -0.590807 +7360, 0.314138, -0.656158, -0.348885, -0.590807 +7361, 0.314138, -0.656158, -0.348885, -0.590807 +7362, 0.314138, -0.656158, -0.348885, -0.590807 +7363, 0.314138, -0.656158, -0.348885, -0.590807 +7364, 0.314138, -0.656158, -0.348885, -0.590807 +7365, 0.314138, -0.656158, -0.348885, -0.590807 +7366, 0.314138, -0.656158, -0.348885, -0.590807 +7367, 0.314138, -0.656158, -0.348885, -0.590807 +7368, 0.314138, -0.656158, -0.348885, -0.590807 +7369, 0.314138, -0.656158, -0.348885, -0.590807 +7370, 0.314138, -0.656158, -0.348885, -0.590807 +7371, 0.314138, -0.656158, -0.348885, -0.590807 +7372, 0.314138, -0.656158, -0.348885, -0.590807 +7373, 0.314138, -0.656158, -0.348885, -0.590807 +7374, 0.314138, -0.656158, -0.348885, -0.590807 +7375, 0.314138, -0.656158, -0.348885, -0.590807 +7376, 0.314138, -0.656158, -0.348885, -0.590807 +7377, 0.314138, -0.656158, -0.348885, -0.590807 +7378, 0.314138, -0.656158, -0.348885, -0.590807 +7379, 0.314138, -0.656158, -0.348885, -0.590807 +7380, 0.314138, -0.656158, -0.348885, -0.590807 +7381, 0.314138, -0.656158, -0.348885, -0.590807 +7382, 0.314138, -0.656158, -0.348885, -0.590807 +7383, 0.314138, -0.656158, -0.348885, -0.590807 +7384, 0.314138, -0.656158, -0.348885, -0.590807 +7385, 0.314138, -0.656158, -0.348885, -0.590807 +7386, 0.314138, -0.656158, -0.348885, -0.590807 +7387, 0.314138, -0.656158, -0.348885, -0.590807 +7388, 0.314138, -0.656158, -0.348885, -0.590807 +7389, 0.314138, -0.656158, -0.348885, -0.590807 +7390, 0.314138, -0.656158, -0.348885, -0.590807 +7391, 0.314138, -0.656158, -0.348885, -0.590807 +7392, 0.314138, -0.656158, -0.348885, -0.590807 +7393, 0.314138, -0.656158, -0.348885, -0.590807 +7394, 0.314138, -0.656158, -0.348885, -0.590807 +7395, 0.314138, -0.656158, -0.348885, -0.590807 +7396, 0.314138, -0.656158, -0.348885, -0.590807 +7397, 0.314138, -0.656158, -0.348885, -0.590807 +7398, 0.314138, -0.656158, -0.348885, -0.590807 +7399, 0.314138, -0.656158, -0.348885, -0.590807 +7400, 0.333721, -0.634427, -0.351668, -0.602048 +7401, 0.333721, -0.634427, -0.351668, -0.602048 +7402, 0.333721, -0.634427, -0.351668, -0.602048 +7403, 0.333721, -0.634427, -0.351668, -0.602048 +7404, 0.333721, -0.634427, -0.351668, -0.602048 +7405, 0.333721, -0.634427, -0.351668, -0.602048 +7406, 0.333721, -0.634427, -0.351668, -0.602048 +7407, 0.333721, -0.634427, -0.351668, -0.602048 +7408, 0.333721, -0.634427, -0.351668, -0.602048 +7409, 0.333721, -0.634427, -0.351668, -0.602048 +7410, 0.333721, -0.634427, -0.351668, -0.602048 +7411, 0.333721, -0.634427, -0.351668, -0.602048 +7412, 0.333721, -0.634427, -0.351668, -0.602048 +7413, 0.333721, -0.634427, -0.351668, -0.602048 +7414, 0.333721, -0.634427, -0.351668, -0.602048 +7415, 0.333721, -0.634427, -0.351668, -0.602048 +7416, 0.333721, -0.634427, -0.351668, -0.602048 +7417, 0.333721, -0.634427, -0.351668, -0.602048 +7418, 0.333721, -0.634427, -0.351668, -0.602048 +7419, 0.333721, -0.634427, -0.351668, -0.602048 +7420, 0.333721, -0.634427, -0.351668, -0.602048 +7421, 0.333721, -0.634427, -0.351668, -0.602048 +7422, 0.333721, -0.634427, -0.351668, -0.602048 +7423, 0.333721, -0.634427, -0.351668, -0.602048 +7424, 0.333721, -0.634427, -0.351668, -0.602048 +7425, 0.333721, -0.634427, -0.351668, -0.602048 +7426, 0.333721, -0.634427, -0.351668, -0.602048 +7427, 0.333721, -0.634427, -0.351668, -0.602048 +7428, 0.333721, -0.634427, -0.351668, -0.602048 +7429, 0.333721, -0.634427, -0.351668, -0.602048 +7430, 0.333721, -0.634427, -0.351668, -0.602048 +7431, 0.333721, -0.634427, -0.351668, -0.602048 +7432, 0.333721, -0.634427, -0.351668, -0.602048 +7433, 0.333721, -0.634427, -0.351668, -0.602048 +7434, 0.333721, -0.634427, -0.351668, -0.602048 +7435, 0.333721, -0.634427, -0.351668, -0.602048 +7436, 0.333721, -0.634427, -0.351668, -0.602048 +7437, 0.333721, -0.634427, -0.351668, -0.602048 +7438, 0.333721, -0.634427, -0.351668, -0.602048 +7439, 0.333721, -0.634427, -0.351668, -0.602048 +7440, 0.333721, -0.634427, -0.351668, -0.602048 +7441, 0.333721, -0.634427, -0.351668, -0.602048 +7442, 0.333721, -0.634427, -0.351668, -0.602048 +7443, 0.333721, -0.634427, -0.351668, -0.602048 +7444, 0.333721, -0.634427, -0.351668, -0.602048 +7445, 0.333721, -0.634427, -0.351668, -0.602048 +7446, 0.333721, -0.634427, -0.351668, -0.602048 +7447, 0.333721, -0.634427, -0.351668, -0.602048 +7448, 0.333721, -0.634427, -0.351668, -0.602048 +7449, 0.333721, -0.634427, -0.351668, -0.602048 +7450, 0.333721, -0.634427, -0.351668, -0.602048 +7451, 0.333721, -0.634427, -0.351668, -0.602048 +7452, 0.333721, -0.634427, -0.351668, -0.602048 +7453, 0.333721, -0.634427, -0.351668, -0.602048 +7454, 0.333721, -0.634427, -0.351668, -0.602048 +7455, 0.333721, -0.634427, -0.351668, -0.602048 +7456, 0.333721, -0.634427, -0.351668, -0.602048 +7457, 0.333721, -0.634427, -0.351668, -0.602048 +7458, 0.333721, -0.634427, -0.351668, -0.602048 +7459, 0.333721, -0.634427, -0.351668, -0.602048 +7460, 0.333721, -0.634427, -0.351668, -0.602048 +7461, 0.333721, -0.634427, -0.351668, -0.602048 +7462, 0.333721, -0.634427, -0.351668, -0.602048 +7463, 0.333721, -0.634427, -0.351668, -0.602048 +7464, 0.333721, -0.634427, -0.351668, -0.602048 +7465, 0.333721, -0.634427, -0.351668, -0.602048 +7466, 0.333721, -0.634427, -0.351668, -0.602048 +7467, 0.333721, -0.634427, -0.351668, -0.602048 +7468, 0.333721, -0.634427, -0.351668, -0.602048 +7469, 0.333721, -0.634427, -0.351668, -0.602048 +7470, 0.333721, -0.634427, -0.351668, -0.602048 +7471, 0.333721, -0.634427, -0.351668, -0.602048 +7472, 0.333721, -0.634427, -0.351668, -0.602048 +7473, 0.333721, -0.634427, -0.351668, -0.602048 +7474, 0.333721, -0.634427, -0.351668, -0.602048 +7475, 0.333721, -0.634427, -0.351668, -0.602048 +7476, 0.333721, -0.634427, -0.351668, -0.602048 +7477, 0.333721, -0.634427, -0.351668, -0.602048 +7478, 0.333721, -0.634427, -0.351668, -0.602048 +7479, 0.333721, -0.634427, -0.351668, -0.602048 +7480, 0.333721, -0.634427, -0.351668, -0.602048 +7481, 0.333721, -0.634427, -0.351668, -0.602048 +7482, 0.333721, -0.634427, -0.351668, -0.602048 +7483, 0.333721, -0.634427, -0.351668, -0.602048 +7484, 0.333721, -0.634427, -0.351668, -0.602048 +7485, 0.333721, -0.634427, -0.351668, -0.602048 +7486, 0.333721, -0.634427, -0.351668, -0.602048 +7487, 0.333721, -0.634427, -0.351668, -0.602048 +7488, 0.333721, -0.634427, -0.351668, -0.602048 +7489, 0.333721, -0.634427, -0.351668, -0.602048 +7490, 0.333721, -0.634427, -0.351668, -0.602048 +7491, 0.333721, -0.634427, -0.351668, -0.602048 +7492, 0.333721, -0.634427, -0.351668, -0.602048 +7493, 0.333721, -0.634427, -0.351668, -0.602048 +7494, 0.333721, -0.634427, -0.351668, -0.602048 +7495, 0.333721, -0.634427, -0.351668, -0.602048 +7496, 0.333721, -0.634427, -0.351668, -0.602048 +7497, 0.333721, -0.634427, -0.351668, -0.602048 +7498, 0.333721, -0.634427, -0.351668, -0.602048 +7499, 0.333721, -0.634427, -0.351668, -0.602048 +7500, 0.353553, -0.612372, -0.353553, -0.612372 +7501, 0.353553, -0.612372, -0.353553, -0.612372 +7502, 0.353553, -0.612372, -0.353553, -0.612372 +7503, 0.353553, -0.612372, -0.353553, -0.612372 +7504, 0.353553, -0.612372, -0.353553, -0.612372 +7505, 0.353553, -0.612372, -0.353553, -0.612372 +7506, 0.353553, -0.612372, -0.353553, -0.612372 +7507, 0.353553, -0.612372, -0.353553, -0.612372 +7508, 0.353553, -0.612372, -0.353553, -0.612372 +7509, 0.353553, -0.612372, -0.353553, -0.612372 +7510, 0.353553, -0.612372, -0.353553, -0.612372 +7511, 0.353553, -0.612372, -0.353553, -0.612372 +7512, 0.353553, -0.612372, -0.353553, -0.612372 +7513, 0.353553, -0.612372, -0.353553, -0.612372 +7514, 0.353553, -0.612372, -0.353553, -0.612372 +7515, 0.353553, -0.612372, -0.353553, -0.612372 +7516, 0.353553, -0.612372, -0.353553, -0.612372 +7517, 0.353553, -0.612372, -0.353553, -0.612372 +7518, 0.353553, -0.612372, -0.353553, -0.612372 +7519, 0.353553, -0.612372, -0.353553, -0.612372 +7520, 0.353553, -0.612372, -0.353553, -0.612372 +7521, 0.353553, -0.612372, -0.353553, -0.612372 +7522, 0.353553, -0.612372, -0.353553, -0.612372 +7523, 0.353553, -0.612372, -0.353553, -0.612372 +7524, 0.353553, -0.612372, -0.353553, -0.612372 +7525, 0.353553, -0.612372, -0.353553, -0.612372 +7526, 0.353553, -0.612372, -0.353553, -0.612372 +7527, 0.353553, -0.612372, -0.353553, -0.612372 +7528, 0.353553, -0.612372, -0.353553, -0.612372 +7529, 0.353553, -0.612372, -0.353553, -0.612372 +7530, 0.353553, -0.612372, -0.353553, -0.612372 +7531, 0.353553, -0.612372, -0.353553, -0.612372 +7532, 0.353553, -0.612372, -0.353553, -0.612372 +7533, 0.353553, -0.612372, -0.353553, -0.612372 +7534, 0.353553, -0.612372, -0.353553, -0.612372 +7535, 0.353553, -0.612372, -0.353553, -0.612372 +7536, 0.353553, -0.612372, -0.353553, -0.612372 +7537, 0.353553, -0.612372, -0.353553, -0.612372 +7538, 0.353553, -0.612372, -0.353553, -0.612372 +7539, 0.353553, -0.612372, -0.353553, -0.612372 +7540, 0.353553, -0.612372, -0.353553, -0.612372 +7541, 0.353553, -0.612372, -0.353553, -0.612372 +7542, 0.353553, -0.612372, -0.353553, -0.612372 +7543, 0.353553, -0.612372, -0.353553, -0.612372 +7544, 0.353553, -0.612372, -0.353553, -0.612372 +7545, 0.353553, -0.612372, -0.353553, -0.612372 +7546, 0.353553, -0.612372, -0.353553, -0.612372 +7547, 0.353553, -0.612372, -0.353553, -0.612372 +7548, 0.353553, -0.612372, -0.353553, -0.612372 +7549, 0.353553, -0.612372, -0.353553, -0.612372 +7550, 0.353553, -0.612372, -0.353553, -0.612372 +7551, 0.353553, -0.612372, -0.353553, -0.612372 +7552, 0.353553, -0.612372, -0.353553, -0.612372 +7553, 0.353553, -0.612372, -0.353553, -0.612372 +7554, 0.353553, -0.612372, -0.353553, -0.612372 +7555, 0.353553, -0.612372, -0.353553, -0.612372 +7556, 0.353553, -0.612372, -0.353553, -0.612372 +7557, 0.353553, -0.612372, -0.353553, -0.612372 +7558, 0.353553, -0.612372, -0.353553, -0.612372 +7559, 0.353553, -0.612372, -0.353553, -0.612372 +7560, 0.353553, -0.612372, -0.353553, -0.612372 +7561, 0.353553, -0.612372, -0.353553, -0.612372 +7562, 0.353553, -0.612372, -0.353553, -0.612372 +7563, 0.353553, -0.612372, -0.353553, -0.612372 +7564, 0.353553, -0.612372, -0.353553, -0.612372 +7565, 0.353553, -0.612372, -0.353553, -0.612372 +7566, 0.353553, -0.612372, -0.353553, -0.612372 +7567, 0.353553, -0.612372, -0.353553, -0.612372 +7568, 0.353553, -0.612372, -0.353553, -0.612372 +7569, 0.353553, -0.612372, -0.353553, -0.612372 +7570, 0.353553, -0.612372, -0.353553, -0.612372 +7571, 0.353553, -0.612372, -0.353553, -0.612372 +7572, 0.353553, -0.612372, -0.353553, -0.612372 +7573, 0.353553, -0.612372, -0.353553, -0.612372 +7574, 0.353553, -0.612372, -0.353553, -0.612372 +7575, 0.353553, -0.612372, -0.353553, -0.612372 +7576, 0.353553, -0.612372, -0.353553, -0.612372 +7577, 0.353553, -0.612372, -0.353553, -0.612372 +7578, 0.353553, -0.612372, -0.353553, -0.612372 +7579, 0.353553, -0.612372, -0.353553, -0.612372 +7580, 0.353553, -0.612372, -0.353553, -0.612372 +7581, 0.353553, -0.612372, -0.353553, -0.612372 +7582, 0.353553, -0.612372, -0.353553, -0.612372 +7583, 0.353553, -0.612372, -0.353553, -0.612372 +7584, 0.353553, -0.612372, -0.353553, -0.612372 +7585, 0.353553, -0.612372, -0.353553, -0.612372 +7586, 0.353553, -0.612372, -0.353553, -0.612372 +7587, 0.353553, -0.612372, -0.353553, -0.612372 +7588, 0.353553, -0.612372, -0.353553, -0.612372 +7589, 0.353553, -0.612372, -0.353553, -0.612372 +7590, 0.353553, -0.612372, -0.353553, -0.612372 +7591, 0.353553, -0.612372, -0.353553, -0.612372 +7592, 0.353553, -0.612372, -0.353553, -0.612372 +7593, 0.353553, -0.612372, -0.353553, -0.612372 +7594, 0.353553, -0.612372, -0.353553, -0.612372 +7595, 0.353553, -0.612372, -0.353553, -0.612372 +7596, 0.353553, -0.612372, -0.353553, -0.612372 +7597, 0.353553, -0.612372, -0.353553, -0.612372 +7598, 0.353553, -0.612372, -0.353553, -0.612372 +7599, 0.353553, -0.612372, -0.353553, -0.612372 +7600, 0.373595, -0.590035, -0.354529, -0.621767 +7601, 0.373595, -0.590035, -0.354529, -0.621767 +7602, 0.373595, -0.590035, -0.354529, -0.621767 +7603, 0.373595, -0.590035, -0.354529, -0.621767 +7604, 0.373595, -0.590035, -0.354529, -0.621767 +7605, 0.373595, -0.590035, -0.354529, -0.621767 +7606, 0.373595, -0.590035, -0.354529, -0.621767 +7607, 0.373595, -0.590035, -0.354529, -0.621767 +7608, 0.373595, -0.590035, -0.354529, -0.621767 +7609, 0.373595, -0.590035, -0.354529, -0.621767 +7610, 0.373595, -0.590035, -0.354529, -0.621767 +7611, 0.373595, -0.590035, -0.354529, -0.621767 +7612, 0.373595, -0.590035, -0.354529, -0.621767 +7613, 0.373595, -0.590035, -0.354529, -0.621767 +7614, 0.373595, -0.590035, -0.354529, -0.621767 +7615, 0.373595, -0.590035, -0.354529, -0.621767 +7616, 0.373595, -0.590035, -0.354529, -0.621767 +7617, 0.373595, -0.590035, -0.354529, -0.621767 +7618, 0.373595, -0.590035, -0.354529, -0.621767 +7619, 0.373595, -0.590035, -0.354529, -0.621767 +7620, 0.373595, -0.590035, -0.354529, -0.621767 +7621, 0.373595, -0.590035, -0.354529, -0.621767 +7622, 0.373595, -0.590035, -0.354529, -0.621767 +7623, 0.373595, -0.590035, -0.354529, -0.621767 +7624, 0.373595, -0.590035, -0.354529, -0.621767 +7625, 0.373595, -0.590035, -0.354529, -0.621767 +7626, 0.373595, -0.590035, -0.354529, -0.621767 +7627, 0.373595, -0.590035, -0.354529, -0.621767 +7628, 0.373595, -0.590035, -0.354529, -0.621767 +7629, 0.373595, -0.590035, -0.354529, -0.621767 +7630, 0.373595, -0.590035, -0.354529, -0.621767 +7631, 0.373595, -0.590035, -0.354529, -0.621767 +7632, 0.373595, -0.590035, -0.354529, -0.621767 +7633, 0.373595, -0.590035, -0.354529, -0.621767 +7634, 0.373595, -0.590035, -0.354529, -0.621767 +7635, 0.373595, -0.590035, -0.354529, -0.621767 +7636, 0.373595, -0.590035, -0.354529, -0.621767 +7637, 0.373595, -0.590035, -0.354529, -0.621767 +7638, 0.373595, -0.590035, -0.354529, -0.621767 +7639, 0.373595, -0.590035, -0.354529, -0.621767 +7640, 0.373595, -0.590035, -0.354529, -0.621767 +7641, 0.373595, -0.590035, -0.354529, -0.621767 +7642, 0.373595, -0.590035, -0.354529, -0.621767 +7643, 0.373595, -0.590035, -0.354529, -0.621767 +7644, 0.373595, -0.590035, -0.354529, -0.621767 +7645, 0.373595, -0.590035, -0.354529, -0.621767 +7646, 0.373595, -0.590035, -0.354529, -0.621767 +7647, 0.373595, -0.590035, -0.354529, -0.621767 +7648, 0.373595, -0.590035, -0.354529, -0.621767 +7649, 0.373595, -0.590035, -0.354529, -0.621767 +7650, 0.373595, -0.590035, -0.354529, -0.621767 +7651, 0.373595, -0.590035, -0.354529, -0.621767 +7652, 0.373595, -0.590035, -0.354529, -0.621767 +7653, 0.373595, -0.590035, -0.354529, -0.621767 +7654, 0.373595, -0.590035, -0.354529, -0.621767 +7655, 0.373595, -0.590035, -0.354529, -0.621767 +7656, 0.373595, -0.590035, -0.354529, -0.621767 +7657, 0.373595, -0.590035, -0.354529, -0.621767 +7658, 0.373595, -0.590035, -0.354529, -0.621767 +7659, 0.373595, -0.590035, -0.354529, -0.621767 +7660, 0.373595, -0.590035, -0.354529, -0.621767 +7661, 0.373595, -0.590035, -0.354529, -0.621767 +7662, 0.373595, -0.590035, -0.354529, -0.621767 +7663, 0.373595, -0.590035, -0.354529, -0.621767 +7664, 0.373595, -0.590035, -0.354529, -0.621767 +7665, 0.373595, -0.590035, -0.354529, -0.621767 +7666, 0.373595, -0.590035, -0.354529, -0.621767 +7667, 0.373595, -0.590035, -0.354529, -0.621767 +7668, 0.373595, -0.590035, -0.354529, -0.621767 +7669, 0.373595, -0.590035, -0.354529, -0.621767 +7670, 0.373595, -0.590035, -0.354529, -0.621767 +7671, 0.373595, -0.590035, -0.354529, -0.621767 +7672, 0.373595, -0.590035, -0.354529, -0.621767 +7673, 0.373595, -0.590035, -0.354529, -0.621767 +7674, 0.373595, -0.590035, -0.354529, -0.621767 +7675, 0.373595, -0.590035, -0.354529, -0.621767 +7676, 0.373595, -0.590035, -0.354529, -0.621767 +7677, 0.373595, -0.590035, -0.354529, -0.621767 +7678, 0.373595, -0.590035, -0.354529, -0.621767 +7679, 0.373595, -0.590035, -0.354529, -0.621767 +7680, 0.373595, -0.590035, -0.354529, -0.621767 +7681, 0.373595, -0.590035, -0.354529, -0.621767 +7682, 0.373595, -0.590035, -0.354529, -0.621767 +7683, 0.373595, -0.590035, -0.354529, -0.621767 +7684, 0.373595, -0.590035, -0.354529, -0.621767 +7685, 0.373595, -0.590035, -0.354529, -0.621767 +7686, 0.373595, -0.590035, -0.354529, -0.621767 +7687, 0.373595, -0.590035, -0.354529, -0.621767 +7688, 0.373595, -0.590035, -0.354529, -0.621767 +7689, 0.373595, -0.590035, -0.354529, -0.621767 +7690, 0.373595, -0.590035, -0.354529, -0.621767 +7691, 0.373595, -0.590035, -0.354529, -0.621767 +7692, 0.373595, -0.590035, -0.354529, -0.621767 +7693, 0.373595, -0.590035, -0.354529, -0.621767 +7694, 0.373595, -0.590035, -0.354529, -0.621767 +7695, 0.373595, -0.590035, -0.354529, -0.621767 +7696, 0.373595, -0.590035, -0.354529, -0.621767 +7697, 0.373595, -0.590035, -0.354529, -0.621767 +7698, 0.373595, -0.590035, -0.354529, -0.621767 +7699, 0.373595, -0.590035, -0.354529, -0.621767 +7700, 0.393807, -0.567455, -0.354585, -0.630223 +7701, 0.393807, -0.567455, -0.354585, -0.630223 +7702, 0.393807, -0.567455, -0.354585, -0.630223 +7703, 0.393807, -0.567455, -0.354585, -0.630223 +7704, 0.393807, -0.567455, -0.354585, -0.630223 +7705, 0.393807, -0.567455, -0.354585, -0.630223 +7706, 0.393807, -0.567455, -0.354585, -0.630223 +7707, 0.393807, -0.567455, -0.354585, -0.630223 +7708, 0.393807, -0.567455, -0.354585, -0.630223 +7709, 0.393807, -0.567455, -0.354585, -0.630223 +7710, 0.393807, -0.567455, -0.354585, -0.630223 +7711, 0.393807, -0.567455, -0.354585, -0.630223 +7712, 0.393807, -0.567455, -0.354585, -0.630223 +7713, 0.393807, -0.567455, -0.354585, -0.630223 +7714, 0.393807, -0.567455, -0.354585, -0.630223 +7715, 0.393807, -0.567455, -0.354585, -0.630223 +7716, 0.393807, -0.567455, -0.354585, -0.630223 +7717, 0.393807, -0.567455, -0.354585, -0.630223 +7718, 0.393807, -0.567455, -0.354585, -0.630223 +7719, 0.393807, -0.567455, -0.354585, -0.630223 +7720, 0.393807, -0.567455, -0.354585, -0.630223 +7721, 0.393807, -0.567455, -0.354585, -0.630223 +7722, 0.393807, -0.567455, -0.354585, -0.630223 +7723, 0.393807, -0.567455, -0.354585, -0.630223 +7724, 0.393807, -0.567455, -0.354585, -0.630223 +7725, 0.393807, -0.567455, -0.354585, -0.630223 +7726, 0.393807, -0.567455, -0.354585, -0.630223 +7727, 0.393807, -0.567455, -0.354585, -0.630223 +7728, 0.393807, -0.567455, -0.354585, -0.630223 +7729, 0.393807, -0.567455, -0.354585, -0.630223 +7730, 0.393807, -0.567455, -0.354585, -0.630223 +7731, 0.393807, -0.567455, -0.354585, -0.630223 +7732, 0.393807, -0.567455, -0.354585, -0.630223 +7733, 0.393807, -0.567455, -0.354585, -0.630223 +7734, 0.393807, -0.567455, -0.354585, -0.630223 +7735, 0.393807, -0.567455, -0.354585, -0.630223 +7736, 0.393807, -0.567455, -0.354585, -0.630223 +7737, 0.393807, -0.567455, -0.354585, -0.630223 +7738, 0.393807, -0.567455, -0.354585, -0.630223 +7739, 0.393807, -0.567455, -0.354585, -0.630223 +7740, 0.393807, -0.567455, -0.354585, -0.630223 +7741, 0.393807, -0.567455, -0.354585, -0.630223 +7742, 0.393807, -0.567455, -0.354585, -0.630223 +7743, 0.393807, -0.567455, -0.354585, -0.630223 +7744, 0.393807, -0.567455, -0.354585, -0.630223 +7745, 0.393807, -0.567455, -0.354585, -0.630223 +7746, 0.393807, -0.567455, -0.354585, -0.630223 +7747, 0.393807, -0.567455, -0.354585, -0.630223 +7748, 0.393807, -0.567455, -0.354585, -0.630223 +7749, 0.393807, -0.567455, -0.354585, -0.630223 +7750, 0.393807, -0.567455, -0.354585, -0.630223 +7751, 0.393807, -0.567455, -0.354585, -0.630223 +7752, 0.393807, -0.567455, -0.354585, -0.630223 +7753, 0.393807, -0.567455, -0.354585, -0.630223 +7754, 0.393807, -0.567455, -0.354585, -0.630223 +7755, 0.393807, -0.567455, -0.354585, -0.630223 +7756, 0.393807, -0.567455, -0.354585, -0.630223 +7757, 0.393807, -0.567455, -0.354585, -0.630223 +7758, 0.393807, -0.567455, -0.354585, -0.630223 +7759, 0.393807, -0.567455, -0.354585, -0.630223 +7760, 0.393807, -0.567455, -0.354585, -0.630223 +7761, 0.393807, -0.567455, -0.354585, -0.630223 +7762, 0.393807, -0.567455, -0.354585, -0.630223 +7763, 0.393807, -0.567455, -0.354585, -0.630223 +7764, 0.393807, -0.567455, -0.354585, -0.630223 +7765, 0.393807, -0.567455, -0.354585, -0.630223 +7766, 0.393807, -0.567455, -0.354585, -0.630223 +7767, 0.393807, -0.567455, -0.354585, -0.630223 +7768, 0.393807, -0.567455, -0.354585, -0.630223 +7769, 0.393807, -0.567455, -0.354585, -0.630223 +7770, 0.393807, -0.567455, -0.354585, -0.630223 +7771, 0.393807, -0.567455, -0.354585, -0.630223 +7772, 0.393807, -0.567455, -0.354585, -0.630223 +7773, 0.393807, -0.567455, -0.354585, -0.630223 +7774, 0.393807, -0.567455, -0.354585, -0.630223 +7775, 0.393807, -0.567455, -0.354585, -0.630223 +7776, 0.393807, -0.567455, -0.354585, -0.630223 +7777, 0.393807, -0.567455, -0.354585, -0.630223 +7778, 0.393807, -0.567455, -0.354585, -0.630223 +7779, 0.393807, -0.567455, -0.354585, -0.630223 +7780, 0.393807, -0.567455, -0.354585, -0.630223 +7781, 0.393807, -0.567455, -0.354585, -0.630223 +7782, 0.393807, -0.567455, -0.354585, -0.630223 +7783, 0.393807, -0.567455, -0.354585, -0.630223 +7784, 0.393807, -0.567455, -0.354585, -0.630223 +7785, 0.393807, -0.567455, -0.354585, -0.630223 +7786, 0.393807, -0.567455, -0.354585, -0.630223 +7787, 0.393807, -0.567455, -0.354585, -0.630223 +7788, 0.393807, -0.567455, -0.354585, -0.630223 +7789, 0.393807, -0.567455, -0.354585, -0.630223 +7790, 0.393807, -0.567455, -0.354585, -0.630223 +7791, 0.393807, -0.567455, -0.354585, -0.630223 +7792, 0.393807, -0.567455, -0.354585, -0.630223 +7793, 0.393807, -0.567455, -0.354585, -0.630223 +7794, 0.393807, -0.567455, -0.354585, -0.630223 +7795, 0.393807, -0.567455, -0.354585, -0.630223 +7796, 0.393807, -0.567455, -0.354585, -0.630223 +7797, 0.393807, -0.567455, -0.354585, -0.630223 +7798, 0.393807, -0.567455, -0.354585, -0.630223 +7799, 0.393807, -0.567455, -0.354585, -0.630223 +7800, 0.414147, -0.544673, -0.353715, -0.637730 +7801, 0.414147, -0.544673, -0.353715, -0.637730 +7802, 0.414147, -0.544673, -0.353715, -0.637730 +7803, 0.414147, -0.544673, -0.353715, -0.637730 +7804, 0.414147, -0.544673, -0.353715, -0.637730 +7805, 0.414147, -0.544673, -0.353715, -0.637730 +7806, 0.414147, -0.544673, -0.353715, -0.637730 +7807, 0.414147, -0.544673, -0.353715, -0.637730 +7808, 0.414147, -0.544673, -0.353715, -0.637730 +7809, 0.414147, -0.544673, -0.353715, -0.637730 +7810, 0.414147, -0.544673, -0.353715, -0.637730 +7811, 0.414147, -0.544673, -0.353715, -0.637730 +7812, 0.414147, -0.544673, -0.353715, -0.637730 +7813, 0.414147, -0.544673, -0.353715, -0.637730 +7814, 0.414147, -0.544673, -0.353715, -0.637730 +7815, 0.414147, -0.544673, -0.353715, -0.637730 +7816, 0.414147, -0.544673, -0.353715, -0.637730 +7817, 0.414147, -0.544673, -0.353715, -0.637730 +7818, 0.414147, -0.544673, -0.353715, -0.637730 +7819, 0.414147, -0.544673, -0.353715, -0.637730 +7820, 0.414147, -0.544673, -0.353715, -0.637730 +7821, 0.414147, -0.544673, -0.353715, -0.637730 +7822, 0.414147, -0.544673, -0.353715, -0.637730 +7823, 0.414147, -0.544673, -0.353715, -0.637730 +7824, 0.414147, -0.544673, -0.353715, -0.637730 +7825, 0.414147, -0.544673, -0.353715, -0.637730 +7826, 0.414147, -0.544673, -0.353715, -0.637730 +7827, 0.414147, -0.544673, -0.353715, -0.637730 +7828, 0.414147, -0.544673, -0.353715, -0.637730 +7829, 0.414147, -0.544673, -0.353715, -0.637730 +7830, 0.414147, -0.544673, -0.353715, -0.637730 +7831, 0.414147, -0.544673, -0.353715, -0.637730 +7832, 0.414147, -0.544673, -0.353715, -0.637730 +7833, 0.414147, -0.544673, -0.353715, -0.637730 +7834, 0.414147, -0.544673, -0.353715, -0.637730 +7835, 0.414147, -0.544673, -0.353715, -0.637730 +7836, 0.414147, -0.544673, -0.353715, -0.637730 +7837, 0.414147, -0.544673, -0.353715, -0.637730 +7838, 0.414147, -0.544673, -0.353715, -0.637730 +7839, 0.414147, -0.544673, -0.353715, -0.637730 +7840, 0.414147, -0.544673, -0.353715, -0.637730 +7841, 0.414147, -0.544673, -0.353715, -0.637730 +7842, 0.414147, -0.544673, -0.353715, -0.637730 +7843, 0.414147, -0.544673, -0.353715, -0.637730 +7844, 0.414147, -0.544673, -0.353715, -0.637730 +7845, 0.414147, -0.544673, -0.353715, -0.637730 +7846, 0.414147, -0.544673, -0.353715, -0.637730 +7847, 0.414147, -0.544673, -0.353715, -0.637730 +7848, 0.414147, -0.544673, -0.353715, -0.637730 +7849, 0.414147, -0.544673, -0.353715, -0.637730 +7850, 0.414147, -0.544673, -0.353715, -0.637730 +7851, 0.414147, -0.544673, -0.353715, -0.637730 +7852, 0.414147, -0.544673, -0.353715, -0.637730 +7853, 0.414147, -0.544673, -0.353715, -0.637730 +7854, 0.414147, -0.544673, -0.353715, -0.637730 +7855, 0.414147, -0.544673, -0.353715, -0.637730 +7856, 0.414147, -0.544673, -0.353715, -0.637730 +7857, 0.414147, -0.544673, -0.353715, -0.637730 +7858, 0.414147, -0.544673, -0.353715, -0.637730 +7859, 0.414147, -0.544673, -0.353715, -0.637730 +7860, 0.414147, -0.544673, -0.353715, -0.637730 +7861, 0.414147, -0.544673, -0.353715, -0.637730 +7862, 0.414147, -0.544673, -0.353715, -0.637730 +7863, 0.414147, -0.544673, -0.353715, -0.637730 +7864, 0.414147, -0.544673, -0.353715, -0.637730 +7865, 0.414147, -0.544673, -0.353715, -0.637730 +7866, 0.414147, -0.544673, -0.353715, -0.637730 +7867, 0.414147, -0.544673, -0.353715, -0.637730 +7868, 0.414147, -0.544673, -0.353715, -0.637730 +7869, 0.414147, -0.544673, -0.353715, -0.637730 +7870, 0.414147, -0.544673, -0.353715, -0.637730 +7871, 0.414147, -0.544673, -0.353715, -0.637730 +7872, 0.414147, -0.544673, -0.353715, -0.637730 +7873, 0.414147, -0.544673, -0.353715, -0.637730 +7874, 0.414147, -0.544673, -0.353715, -0.637730 +7875, 0.414147, -0.544673, -0.353715, -0.637730 +7876, 0.414147, -0.544673, -0.353715, -0.637730 +7877, 0.414147, -0.544673, -0.353715, -0.637730 +7878, 0.414147, -0.544673, -0.353715, -0.637730 +7879, 0.414147, -0.544673, -0.353715, -0.637730 +7880, 0.414147, -0.544673, -0.353715, -0.637730 +7881, 0.414147, -0.544673, -0.353715, -0.637730 +7882, 0.414147, -0.544673, -0.353715, -0.637730 +7883, 0.414147, -0.544673, -0.353715, -0.637730 +7884, 0.414147, -0.544673, -0.353715, -0.637730 +7885, 0.414147, -0.544673, -0.353715, -0.637730 +7886, 0.414147, -0.544673, -0.353715, -0.637730 +7887, 0.414147, -0.544673, -0.353715, -0.637730 +7888, 0.414147, -0.544673, -0.353715, -0.637730 +7889, 0.414147, -0.544673, -0.353715, -0.637730 +7890, 0.414147, -0.544673, -0.353715, -0.637730 +7891, 0.414147, -0.544673, -0.353715, -0.637730 +7892, 0.414147, -0.544673, -0.353715, -0.637730 +7893, 0.414147, -0.544673, -0.353715, -0.637730 +7894, 0.414147, -0.544673, -0.353715, -0.637730 +7895, 0.414147, -0.544673, -0.353715, -0.637730 +7896, 0.414147, -0.544673, -0.353715, -0.637730 +7897, 0.414147, -0.544673, -0.353715, -0.637730 +7898, 0.414147, -0.544673, -0.353715, -0.637730 +7899, 0.414147, -0.544673, -0.353715, -0.637730 +7900, 0.434575, -0.521730, -0.351911, -0.644283 +7901, 0.434575, -0.521730, -0.351911, -0.644283 +7902, 0.434575, -0.521730, -0.351911, -0.644283 +7903, 0.434575, -0.521730, -0.351911, -0.644283 +7904, 0.434575, -0.521730, -0.351911, -0.644283 +7905, 0.434575, -0.521730, -0.351911, -0.644283 +7906, 0.434575, -0.521730, -0.351911, -0.644283 +7907, 0.434575, -0.521730, -0.351911, -0.644283 +7908, 0.434575, -0.521730, -0.351911, -0.644283 +7909, 0.434575, -0.521730, -0.351911, -0.644283 +7910, 0.434575, -0.521730, -0.351911, -0.644283 +7911, 0.434575, -0.521730, -0.351911, -0.644283 +7912, 0.434575, -0.521730, -0.351911, -0.644283 +7913, 0.434575, -0.521730, -0.351911, -0.644283 +7914, 0.434575, -0.521730, -0.351911, -0.644283 +7915, 0.434575, -0.521730, -0.351911, -0.644283 +7916, 0.434575, -0.521730, -0.351911, -0.644283 +7917, 0.434575, -0.521730, -0.351911, -0.644283 +7918, 0.434575, -0.521730, -0.351911, -0.644283 +7919, 0.434575, -0.521730, -0.351911, -0.644283 +7920, 0.434575, -0.521730, -0.351911, -0.644283 +7921, 0.434575, -0.521730, -0.351911, -0.644283 +7922, 0.434575, -0.521730, -0.351911, -0.644283 +7923, 0.434575, -0.521730, -0.351911, -0.644283 +7924, 0.434575, -0.521730, -0.351911, -0.644283 +7925, 0.434575, -0.521730, -0.351911, -0.644283 +7926, 0.434575, -0.521730, -0.351911, -0.644283 +7927, 0.434575, -0.521730, -0.351911, -0.644283 +7928, 0.434575, -0.521730, -0.351911, -0.644283 +7929, 0.434575, -0.521730, -0.351911, -0.644283 +7930, 0.434575, -0.521730, -0.351911, -0.644283 +7931, 0.434575, -0.521730, -0.351911, -0.644283 +7932, 0.434575, -0.521730, -0.351911, -0.644283 +7933, 0.434575, -0.521730, -0.351911, -0.644283 +7934, 0.434575, -0.521730, -0.351911, -0.644283 +7935, 0.434575, -0.521730, -0.351911, -0.644283 +7936, 0.434575, -0.521730, -0.351911, -0.644283 +7937, 0.434575, -0.521730, -0.351911, -0.644283 +7938, 0.434575, -0.521730, -0.351911, -0.644283 +7939, 0.434575, -0.521730, -0.351911, -0.644283 +7940, 0.434575, -0.521730, -0.351911, -0.644283 +7941, 0.434575, -0.521730, -0.351911, -0.644283 +7942, 0.434575, -0.521730, -0.351911, -0.644283 +7943, 0.434575, -0.521730, -0.351911, -0.644283 +7944, 0.434575, -0.521730, -0.351911, -0.644283 +7945, 0.434575, -0.521730, -0.351911, -0.644283 +7946, 0.434575, -0.521730, -0.351911, -0.644283 +7947, 0.434575, -0.521730, -0.351911, -0.644283 +7948, 0.434575, -0.521730, -0.351911, -0.644283 +7949, 0.434575, -0.521730, -0.351911, -0.644283 +7950, 0.434575, -0.521730, -0.351911, -0.644283 +7951, 0.434575, -0.521730, -0.351911, -0.644283 +7952, 0.434575, -0.521730, -0.351911, -0.644283 +7953, 0.434575, -0.521730, -0.351911, -0.644283 +7954, 0.434575, -0.521730, -0.351911, -0.644283 +7955, 0.434575, -0.521730, -0.351911, -0.644283 +7956, 0.434575, -0.521730, -0.351911, -0.644283 +7957, 0.434575, -0.521730, -0.351911, -0.644283 +7958, 0.434575, -0.521730, -0.351911, -0.644283 +7959, 0.434575, -0.521730, -0.351911, -0.644283 +7960, 0.434575, -0.521730, -0.351911, -0.644283 +7961, 0.434575, -0.521730, -0.351911, -0.644283 +7962, 0.434575, -0.521730, -0.351911, -0.644283 +7963, 0.434575, -0.521730, -0.351911, -0.644283 +7964, 0.434575, -0.521730, -0.351911, -0.644283 +7965, 0.434575, -0.521730, -0.351911, -0.644283 +7966, 0.434575, -0.521730, -0.351911, -0.644283 +7967, 0.434575, -0.521730, -0.351911, -0.644283 +7968, 0.434575, -0.521730, -0.351911, -0.644283 +7969, 0.434575, -0.521730, -0.351911, -0.644283 +7970, 0.434575, -0.521730, -0.351911, -0.644283 +7971, 0.434575, -0.521730, -0.351911, -0.644283 +7972, 0.434575, -0.521730, -0.351911, -0.644283 +7973, 0.434575, -0.521730, -0.351911, -0.644283 +7974, 0.434575, -0.521730, -0.351911, -0.644283 +7975, 0.434575, -0.521730, -0.351911, -0.644283 +7976, 0.434575, -0.521730, -0.351911, -0.644283 +7977, 0.434575, -0.521730, -0.351911, -0.644283 +7978, 0.434575, -0.521730, -0.351911, -0.644283 +7979, 0.434575, -0.521730, -0.351911, -0.644283 +7980, 0.434575, -0.521730, -0.351911, -0.644283 +7981, 0.434575, -0.521730, -0.351911, -0.644283 +7982, 0.434575, -0.521730, -0.351911, -0.644283 +7983, 0.434575, -0.521730, -0.351911, -0.644283 +7984, 0.434575, -0.521730, -0.351911, -0.644283 +7985, 0.434575, -0.521730, -0.351911, -0.644283 +7986, 0.434575, -0.521730, -0.351911, -0.644283 +7987, 0.434575, -0.521730, -0.351911, -0.644283 +7988, 0.434575, -0.521730, -0.351911, -0.644283 +7989, 0.434575, -0.521730, -0.351911, -0.644283 +7990, 0.434575, -0.521730, -0.351911, -0.644283 +7991, 0.434575, -0.521730, -0.351911, -0.644283 +7992, 0.434575, -0.521730, -0.351911, -0.644283 +7993, 0.434575, -0.521730, -0.351911, -0.644283 +7994, 0.434575, -0.521730, -0.351911, -0.644283 +7995, 0.434575, -0.521730, -0.351911, -0.644283 +7996, 0.434575, -0.521730, -0.351911, -0.644283 +7997, 0.434575, -0.521730, -0.351911, -0.644283 +7998, 0.434575, -0.521730, -0.351911, -0.644283 +7999, 0.434575, -0.521730, -0.351911, -0.644283 +8000, 0.455049, -0.498668, -0.349171, -0.649877 +8001, 0.455049, -0.498668, -0.349171, -0.649877 +8002, 0.455049, -0.498668, -0.349171, -0.649877 +8003, 0.455049, -0.498668, -0.349171, -0.649877 +8004, 0.455049, -0.498668, -0.349171, -0.649877 +8005, 0.455049, -0.498668, -0.349171, -0.649877 +8006, 0.455049, -0.498668, -0.349171, -0.649877 +8007, 0.455049, -0.498668, -0.349171, -0.649877 +8008, 0.455049, -0.498668, -0.349171, -0.649877 +8009, 0.455049, -0.498668, -0.349171, -0.649877 +8010, 0.455049, -0.498668, -0.349171, -0.649877 +8011, 0.455049, -0.498668, -0.349171, -0.649877 +8012, 0.455049, -0.498668, -0.349171, -0.649877 +8013, 0.455049, -0.498668, -0.349171, -0.649877 +8014, 0.455049, -0.498668, -0.349171, -0.649877 +8015, 0.455049, -0.498668, -0.349171, -0.649877 +8016, 0.455049, -0.498668, -0.349171, -0.649877 +8017, 0.455049, -0.498668, -0.349171, -0.649877 +8018, 0.455049, -0.498668, -0.349171, -0.649877 +8019, 0.455049, -0.498668, -0.349171, -0.649877 +8020, 0.455049, -0.498668, -0.349171, -0.649877 +8021, 0.455049, -0.498668, -0.349171, -0.649877 +8022, 0.455049, -0.498668, -0.349171, -0.649877 +8023, 0.455049, -0.498668, -0.349171, -0.649877 +8024, 0.455049, -0.498668, -0.349171, -0.649877 +8025, 0.455049, -0.498668, -0.349171, -0.649877 +8026, 0.455049, -0.498668, -0.349171, -0.649877 +8027, 0.455049, -0.498668, -0.349171, -0.649877 +8028, 0.455049, -0.498668, -0.349171, -0.649877 +8029, 0.455049, -0.498668, -0.349171, -0.649877 +8030, 0.455049, -0.498668, -0.349171, -0.649877 +8031, 0.455049, -0.498668, -0.349171, -0.649877 +8032, 0.455049, -0.498668, -0.349171, -0.649877 +8033, 0.455049, -0.498668, -0.349171, -0.649877 +8034, 0.455049, -0.498668, -0.349171, -0.649877 +8035, 0.455049, -0.498668, -0.349171, -0.649877 +8036, 0.455049, -0.498668, -0.349171, -0.649877 +8037, 0.455049, -0.498668, -0.349171, -0.649877 +8038, 0.455049, -0.498668, -0.349171, -0.649877 +8039, 0.455049, -0.498668, -0.349171, -0.649877 +8040, 0.455049, -0.498668, -0.349171, -0.649877 +8041, 0.455049, -0.498668, -0.349171, -0.649877 +8042, 0.455049, -0.498668, -0.349171, -0.649877 +8043, 0.455049, -0.498668, -0.349171, -0.649877 +8044, 0.455049, -0.498668, -0.349171, -0.649877 +8045, 0.455049, -0.498668, -0.349171, -0.649877 +8046, 0.455049, -0.498668, -0.349171, -0.649877 +8047, 0.455049, -0.498668, -0.349171, -0.649877 +8048, 0.455049, -0.498668, -0.349171, -0.649877 +8049, 0.455049, -0.498668, -0.349171, -0.649877 +8050, 0.455049, -0.498668, -0.349171, -0.649877 +8051, 0.455049, -0.498668, -0.349171, -0.649877 +8052, 0.455049, -0.498668, -0.349171, -0.649877 +8053, 0.455049, -0.498668, -0.349171, -0.649877 +8054, 0.455049, -0.498668, -0.349171, -0.649877 +8055, 0.455049, -0.498668, -0.349171, -0.649877 +8056, 0.455049, -0.498668, -0.349171, -0.649877 +8057, 0.455049, -0.498668, -0.349171, -0.649877 +8058, 0.455049, -0.498668, -0.349171, -0.649877 +8059, 0.455049, -0.498668, -0.349171, -0.649877 +8060, 0.455049, -0.498668, -0.349171, -0.649877 +8061, 0.455049, -0.498668, -0.349171, -0.649877 +8062, 0.455049, -0.498668, -0.349171, -0.649877 +8063, 0.455049, -0.498668, -0.349171, -0.649877 +8064, 0.455049, -0.498668, -0.349171, -0.649877 +8065, 0.455049, -0.498668, -0.349171, -0.649877 +8066, 0.455049, -0.498668, -0.349171, -0.649877 +8067, 0.455049, -0.498668, -0.349171, -0.649877 +8068, 0.455049, -0.498668, -0.349171, -0.649877 +8069, 0.455049, -0.498668, -0.349171, -0.649877 +8070, 0.455049, -0.498668, -0.349171, -0.649877 +8071, 0.455049, -0.498668, -0.349171, -0.649877 +8072, 0.455049, -0.498668, -0.349171, -0.649877 +8073, 0.455049, -0.498668, -0.349171, -0.649877 +8074, 0.455049, -0.498668, -0.349171, -0.649877 +8075, 0.455049, -0.498668, -0.349171, -0.649877 +8076, 0.455049, -0.498668, -0.349171, -0.649877 +8077, 0.455049, -0.498668, -0.349171, -0.649877 +8078, 0.455049, -0.498668, -0.349171, -0.649877 +8079, 0.455049, -0.498668, -0.349171, -0.649877 +8080, 0.455049, -0.498668, -0.349171, -0.649877 +8081, 0.455049, -0.498668, -0.349171, -0.649877 +8082, 0.455049, -0.498668, -0.349171, -0.649877 +8083, 0.455049, -0.498668, -0.349171, -0.649877 +8084, 0.455049, -0.498668, -0.349171, -0.649877 +8085, 0.455049, -0.498668, -0.349171, -0.649877 +8086, 0.455049, -0.498668, -0.349171, -0.649877 +8087, 0.455049, -0.498668, -0.349171, -0.649877 +8088, 0.455049, -0.498668, -0.349171, -0.649877 +8089, 0.455049, -0.498668, -0.349171, -0.649877 +8090, 0.455049, -0.498668, -0.349171, -0.649877 +8091, 0.455049, -0.498668, -0.349171, -0.649877 +8092, 0.455049, -0.498668, -0.349171, -0.649877 +8093, 0.455049, -0.498668, -0.349171, -0.649877 +8094, 0.455049, -0.498668, -0.349171, -0.649877 +8095, 0.455049, -0.498668, -0.349171, -0.649877 +8096, 0.455049, -0.498668, -0.349171, -0.649877 +8097, 0.455049, -0.498668, -0.349171, -0.649877 +8098, 0.455049, -0.498668, -0.349171, -0.649877 +8099, 0.455049, -0.498668, -0.349171, -0.649877 +8100, 0.475528, -0.475528, -0.345492, -0.654508 +8101, 0.475528, -0.475528, -0.345492, -0.654508 +8102, 0.475528, -0.475528, -0.345492, -0.654508 +8103, 0.475528, -0.475528, -0.345492, -0.654508 +8104, 0.475528, -0.475528, -0.345492, -0.654508 +8105, 0.475528, -0.475528, -0.345492, -0.654508 +8106, 0.475528, -0.475528, -0.345492, -0.654508 +8107, 0.475528, -0.475528, -0.345492, -0.654508 +8108, 0.475528, -0.475528, -0.345492, -0.654508 +8109, 0.475528, -0.475528, -0.345492, -0.654508 +8110, 0.475528, -0.475528, -0.345492, -0.654508 +8111, 0.475528, -0.475528, -0.345492, -0.654508 +8112, 0.475528, -0.475528, -0.345492, -0.654508 +8113, 0.475528, -0.475528, -0.345492, -0.654508 +8114, 0.475528, -0.475528, -0.345492, -0.654508 +8115, 0.475528, -0.475528, -0.345492, -0.654508 +8116, 0.475528, -0.475528, -0.345492, -0.654508 +8117, 0.475528, -0.475528, -0.345492, -0.654508 +8118, 0.475528, -0.475528, -0.345492, -0.654508 +8119, 0.475528, -0.475528, -0.345492, -0.654508 +8120, 0.475528, -0.475528, -0.345492, -0.654508 +8121, 0.475528, -0.475528, -0.345492, -0.654508 +8122, 0.475528, -0.475528, -0.345492, -0.654508 +8123, 0.475528, -0.475528, -0.345492, -0.654508 +8124, 0.475528, -0.475528, -0.345492, -0.654508 +8125, 0.475528, -0.475528, -0.345492, -0.654508 +8126, 0.475528, -0.475528, -0.345492, -0.654508 +8127, 0.475528, -0.475528, -0.345492, -0.654508 +8128, 0.475528, -0.475528, -0.345492, -0.654508 +8129, 0.475528, -0.475528, -0.345492, -0.654508 +8130, 0.475528, -0.475528, -0.345492, -0.654508 +8131, 0.475528, -0.475528, -0.345492, -0.654508 +8132, 0.475528, -0.475528, -0.345492, -0.654508 +8133, 0.475528, -0.475528, -0.345492, -0.654508 +8134, 0.475528, -0.475528, -0.345492, -0.654508 +8135, 0.475528, -0.475528, -0.345492, -0.654508 +8136, 0.475528, -0.475528, -0.345492, -0.654508 +8137, 0.475528, -0.475528, -0.345492, -0.654508 +8138, 0.475528, -0.475528, -0.345492, -0.654508 +8139, 0.475528, -0.475528, -0.345492, -0.654508 +8140, 0.475528, -0.475528, -0.345492, -0.654508 +8141, 0.475528, -0.475528, -0.345492, -0.654508 +8142, 0.475528, -0.475528, -0.345492, -0.654508 +8143, 0.475528, -0.475528, -0.345492, -0.654508 +8144, 0.475528, -0.475528, -0.345492, -0.654508 +8145, 0.475528, -0.475528, -0.345492, -0.654508 +8146, 0.475528, -0.475528, -0.345492, -0.654508 +8147, 0.475528, -0.475528, -0.345492, -0.654508 +8148, 0.475528, -0.475528, -0.345492, -0.654508 +8149, 0.475528, -0.475528, -0.345492, -0.654508 +8150, 0.475528, -0.475528, -0.345492, -0.654508 +8151, 0.475528, -0.475528, -0.345492, -0.654508 +8152, 0.475528, -0.475528, -0.345492, -0.654508 +8153, 0.475528, -0.475528, -0.345492, -0.654508 +8154, 0.475528, -0.475528, -0.345492, -0.654508 +8155, 0.475528, -0.475528, -0.345492, -0.654508 +8156, 0.475528, -0.475528, -0.345492, -0.654508 +8157, 0.475528, -0.475528, -0.345492, -0.654508 +8158, 0.475528, -0.475528, -0.345492, -0.654508 +8159, 0.475528, -0.475528, -0.345492, -0.654508 +8160, 0.475528, -0.475528, -0.345492, -0.654508 +8161, 0.475528, -0.475528, -0.345492, -0.654508 +8162, 0.475528, -0.475528, -0.345492, -0.654508 +8163, 0.475528, -0.475528, -0.345492, -0.654508 +8164, 0.475528, -0.475528, -0.345492, -0.654508 +8165, 0.475528, -0.475528, -0.345492, -0.654508 +8166, 0.475528, -0.475528, -0.345492, -0.654508 +8167, 0.475528, -0.475528, -0.345492, -0.654508 +8168, 0.475528, -0.475528, -0.345492, -0.654508 +8169, 0.475528, -0.475528, -0.345492, -0.654508 +8170, 0.475528, -0.475528, -0.345492, -0.654508 +8171, 0.475528, -0.475528, -0.345492, -0.654508 +8172, 0.475528, -0.475528, -0.345492, -0.654508 +8173, 0.475528, -0.475528, -0.345492, -0.654508 +8174, 0.475528, -0.475528, -0.345492, -0.654508 +8175, 0.475528, -0.475528, -0.345492, -0.654508 +8176, 0.475528, -0.475528, -0.345492, -0.654508 +8177, 0.475528, -0.475528, -0.345492, -0.654508 +8178, 0.475528, -0.475528, -0.345492, -0.654508 +8179, 0.475528, -0.475528, -0.345492, -0.654508 +8180, 0.475528, -0.475528, -0.345492, -0.654508 +8181, 0.475528, -0.475528, -0.345492, -0.654508 +8182, 0.475528, -0.475528, -0.345492, -0.654508 +8183, 0.475528, -0.475528, -0.345492, -0.654508 +8184, 0.475528, -0.475528, -0.345492, -0.654508 +8185, 0.475528, -0.475528, -0.345492, -0.654508 +8186, 0.475528, -0.475528, -0.345492, -0.654508 +8187, 0.475528, -0.475528, -0.345492, -0.654508 +8188, 0.475528, -0.475528, -0.345492, -0.654508 +8189, 0.475528, -0.475528, -0.345492, -0.654508 +8190, 0.475528, -0.475528, -0.345492, -0.654508 +8191, 0.475528, -0.475528, -0.345492, -0.654508 +8192, 0.475528, -0.475528, -0.345492, -0.654508 +8193, 0.475528, -0.475528, -0.345492, -0.654508 +8194, 0.475528, -0.475528, -0.345492, -0.654508 +8195, 0.475528, -0.475528, -0.345492, -0.654508 +8196, 0.475528, -0.475528, -0.345492, -0.654508 +8197, 0.475528, -0.475528, -0.345492, -0.654508 +8198, 0.475528, -0.475528, -0.345492, -0.654508 +8199, 0.475528, -0.475528, -0.345492, -0.654508 +8200, 0.495972, -0.452352, -0.340872, -0.658176 +8201, 0.495972, -0.452352, -0.340872, -0.658176 +8202, 0.495972, -0.452352, -0.340872, -0.658176 +8203, 0.495972, -0.452352, -0.340872, -0.658176 +8204, 0.495972, -0.452352, -0.340872, -0.658176 +8205, 0.495972, -0.452352, -0.340872, -0.658176 +8206, 0.495972, -0.452352, -0.340872, -0.658176 +8207, 0.495972, -0.452352, -0.340872, -0.658176 +8208, 0.495972, -0.452352, -0.340872, -0.658176 +8209, 0.495972, -0.452352, -0.340872, -0.658176 +8210, 0.495972, -0.452352, -0.340872, -0.658176 +8211, 0.495972, -0.452352, -0.340872, -0.658176 +8212, 0.495972, -0.452352, -0.340872, -0.658176 +8213, 0.495972, -0.452352, -0.340872, -0.658176 +8214, 0.495972, -0.452352, -0.340872, -0.658176 +8215, 0.495972, -0.452352, -0.340872, -0.658176 +8216, 0.495972, -0.452352, -0.340872, -0.658176 +8217, 0.495972, -0.452352, -0.340872, -0.658176 +8218, 0.495972, -0.452352, -0.340872, -0.658176 +8219, 0.495972, -0.452352, -0.340872, -0.658176 +8220, 0.495972, -0.452352, -0.340872, -0.658176 +8221, 0.495972, -0.452352, -0.340872, -0.658176 +8222, 0.495972, -0.452352, -0.340872, -0.658176 +8223, 0.495972, -0.452352, -0.340872, -0.658176 +8224, 0.495972, -0.452352, -0.340872, -0.658176 +8225, 0.495972, -0.452352, -0.340872, -0.658176 +8226, 0.495972, -0.452352, -0.340872, -0.658176 +8227, 0.495972, -0.452352, -0.340872, -0.658176 +8228, 0.495972, -0.452352, -0.340872, -0.658176 +8229, 0.495972, -0.452352, -0.340872, -0.658176 +8230, 0.495972, -0.452352, -0.340872, -0.658176 +8231, 0.495972, -0.452352, -0.340872, -0.658176 +8232, 0.495972, -0.452352, -0.340872, -0.658176 +8233, 0.495972, -0.452352, -0.340872, -0.658176 +8234, 0.495972, -0.452352, -0.340872, -0.658176 +8235, 0.495972, -0.452352, -0.340872, -0.658176 +8236, 0.495972, -0.452352, -0.340872, -0.658176 +8237, 0.495972, -0.452352, -0.340872, -0.658176 +8238, 0.495972, -0.452352, -0.340872, -0.658176 +8239, 0.495972, -0.452352, -0.340872, -0.658176 +8240, 0.495972, -0.452352, -0.340872, -0.658176 +8241, 0.495972, -0.452352, -0.340872, -0.658176 +8242, 0.495972, -0.452352, -0.340872, -0.658176 +8243, 0.495972, -0.452352, -0.340872, -0.658176 +8244, 0.495972, -0.452352, -0.340872, -0.658176 +8245, 0.495972, -0.452352, -0.340872, -0.658176 +8246, 0.495972, -0.452352, -0.340872, -0.658176 +8247, 0.495972, -0.452352, -0.340872, -0.658176 +8248, 0.495972, -0.452352, -0.340872, -0.658176 +8249, 0.495972, -0.452352, -0.340872, -0.658176 +8250, 0.495972, -0.452352, -0.340872, -0.658176 +8251, 0.495972, -0.452352, -0.340872, -0.658176 +8252, 0.495972, -0.452352, -0.340872, -0.658176 +8253, 0.495972, -0.452352, -0.340872, -0.658176 +8254, 0.495972, -0.452352, -0.340872, -0.658176 +8255, 0.495972, -0.452352, -0.340872, -0.658176 +8256, 0.495972, -0.452352, -0.340872, -0.658176 +8257, 0.495972, -0.452352, -0.340872, -0.658176 +8258, 0.495972, -0.452352, -0.340872, -0.658176 +8259, 0.495972, -0.452352, -0.340872, -0.658176 +8260, 0.495972, -0.452352, -0.340872, -0.658176 +8261, 0.495972, -0.452352, -0.340872, -0.658176 +8262, 0.495972, -0.452352, -0.340872, -0.658176 +8263, 0.495972, -0.452352, -0.340872, -0.658176 +8264, 0.495972, -0.452352, -0.340872, -0.658176 +8265, 0.495972, -0.452352, -0.340872, -0.658176 +8266, 0.495972, -0.452352, -0.340872, -0.658176 +8267, 0.495972, -0.452352, -0.340872, -0.658176 +8268, 0.495972, -0.452352, -0.340872, -0.658176 +8269, 0.495972, -0.452352, -0.340872, -0.658176 +8270, 0.495972, -0.452352, -0.340872, -0.658176 +8271, 0.495972, -0.452352, -0.340872, -0.658176 +8272, 0.495972, -0.452352, -0.340872, -0.658176 +8273, 0.495972, -0.452352, -0.340872, -0.658176 +8274, 0.495972, -0.452352, -0.340872, -0.658176 +8275, 0.495972, -0.452352, -0.340872, -0.658176 +8276, 0.495972, -0.452352, -0.340872, -0.658176 +8277, 0.495972, -0.452352, -0.340872, -0.658176 +8278, 0.495972, -0.452352, -0.340872, -0.658176 +8279, 0.495972, -0.452352, -0.340872, -0.658176 +8280, 0.495972, -0.452352, -0.340872, -0.658176 +8281, 0.495972, -0.452352, -0.340872, -0.658176 +8282, 0.495972, -0.452352, -0.340872, -0.658176 +8283, 0.495972, -0.452352, -0.340872, -0.658176 +8284, 0.495972, -0.452352, -0.340872, -0.658176 +8285, 0.495972, -0.452352, -0.340872, -0.658176 +8286, 0.495972, -0.452352, -0.340872, -0.658176 +8287, 0.495972, -0.452352, -0.340872, -0.658176 +8288, 0.495972, -0.452352, -0.340872, -0.658176 +8289, 0.495972, -0.452352, -0.340872, -0.658176 +8290, 0.495972, -0.452352, -0.340872, -0.658176 +8291, 0.495972, -0.452352, -0.340872, -0.658176 +8292, 0.495972, -0.452352, -0.340872, -0.658176 +8293, 0.495972, -0.452352, -0.340872, -0.658176 +8294, 0.495972, -0.452352, -0.340872, -0.658176 +8295, 0.495972, -0.452352, -0.340872, -0.658176 +8296, 0.495972, -0.452352, -0.340872, -0.658176 +8297, 0.495972, -0.452352, -0.340872, -0.658176 +8298, 0.495972, -0.452352, -0.340872, -0.658176 +8299, 0.495972, -0.452352, -0.340872, -0.658176 +8300, 0.516337, -0.429181, -0.335313, -0.660881 +8301, 0.516337, -0.429181, -0.335313, -0.660881 +8302, 0.516337, -0.429181, -0.335313, -0.660881 +8303, 0.516337, -0.429181, -0.335313, -0.660881 +8304, 0.516337, -0.429181, -0.335313, -0.660881 +8305, 0.516337, -0.429181, -0.335313, -0.660881 +8306, 0.516337, -0.429181, -0.335313, -0.660881 +8307, 0.516337, -0.429181, -0.335313, -0.660881 +8308, 0.516337, -0.429181, -0.335313, -0.660881 +8309, 0.516337, -0.429181, -0.335313, -0.660881 +8310, 0.516337, -0.429181, -0.335313, -0.660881 +8311, 0.516337, -0.429181, -0.335313, -0.660881 +8312, 0.516337, -0.429181, -0.335313, -0.660881 +8313, 0.516337, -0.429181, -0.335313, -0.660881 +8314, 0.516337, -0.429181, -0.335313, -0.660881 +8315, 0.516337, -0.429181, -0.335313, -0.660881 +8316, 0.516337, -0.429181, -0.335313, -0.660881 +8317, 0.516337, -0.429181, -0.335313, -0.660881 +8318, 0.516337, -0.429181, -0.335313, -0.660881 +8319, 0.516337, -0.429181, -0.335313, -0.660881 +8320, 0.516337, -0.429181, -0.335313, -0.660881 +8321, 0.516337, -0.429181, -0.335313, -0.660881 +8322, 0.516337, -0.429181, -0.335313, -0.660881 +8323, 0.516337, -0.429181, -0.335313, -0.660881 +8324, 0.516337, -0.429181, -0.335313, -0.660881 +8325, 0.516337, -0.429181, -0.335313, -0.660881 +8326, 0.516337, -0.429181, -0.335313, -0.660881 +8327, 0.516337, -0.429181, -0.335313, -0.660881 +8328, 0.516337, -0.429181, -0.335313, -0.660881 +8329, 0.516337, -0.429181, -0.335313, -0.660881 +8330, 0.516337, -0.429181, -0.335313, -0.660881 +8331, 0.516337, -0.429181, -0.335313, -0.660881 +8332, 0.516337, -0.429181, -0.335313, -0.660881 +8333, 0.516337, -0.429181, -0.335313, -0.660881 +8334, 0.516337, -0.429181, -0.335313, -0.660881 +8335, 0.516337, -0.429181, -0.335313, -0.660881 +8336, 0.516337, -0.429181, -0.335313, -0.660881 +8337, 0.516337, -0.429181, -0.335313, -0.660881 +8338, 0.516337, -0.429181, -0.335313, -0.660881 +8339, 0.516337, -0.429181, -0.335313, -0.660881 +8340, 0.516337, -0.429181, -0.335313, -0.660881 +8341, 0.516337, -0.429181, -0.335313, -0.660881 +8342, 0.516337, -0.429181, -0.335313, -0.660881 +8343, 0.516337, -0.429181, -0.335313, -0.660881 +8344, 0.516337, -0.429181, -0.335313, -0.660881 +8345, 0.516337, -0.429181, -0.335313, -0.660881 +8346, 0.516337, -0.429181, -0.335313, -0.660881 +8347, 0.516337, -0.429181, -0.335313, -0.660881 +8348, 0.516337, -0.429181, -0.335313, -0.660881 +8349, 0.516337, -0.429181, -0.335313, -0.660881 +8350, 0.516337, -0.429181, -0.335313, -0.660881 +8351, 0.516337, -0.429181, -0.335313, -0.660881 +8352, 0.516337, -0.429181, -0.335313, -0.660881 +8353, 0.516337, -0.429181, -0.335313, -0.660881 +8354, 0.516337, -0.429181, -0.335313, -0.660881 +8355, 0.516337, -0.429181, -0.335313, -0.660881 +8356, 0.516337, -0.429181, -0.335313, -0.660881 +8357, 0.516337, -0.429181, -0.335313, -0.660881 +8358, 0.516337, -0.429181, -0.335313, -0.660881 +8359, 0.516337, -0.429181, -0.335313, -0.660881 +8360, 0.516337, -0.429181, -0.335313, -0.660881 +8361, 0.516337, -0.429181, -0.335313, -0.660881 +8362, 0.516337, -0.429181, -0.335313, -0.660881 +8363, 0.516337, -0.429181, -0.335313, -0.660881 +8364, 0.516337, -0.429181, -0.335313, -0.660881 +8365, 0.516337, -0.429181, -0.335313, -0.660881 +8366, 0.516337, -0.429181, -0.335313, -0.660881 +8367, 0.516337, -0.429181, -0.335313, -0.660881 +8368, 0.516337, -0.429181, -0.335313, -0.660881 +8369, 0.516337, -0.429181, -0.335313, -0.660881 +8370, 0.516337, -0.429181, -0.335313, -0.660881 +8371, 0.516337, -0.429181, -0.335313, -0.660881 +8372, 0.516337, -0.429181, -0.335313, -0.660881 +8373, 0.516337, -0.429181, -0.335313, -0.660881 +8374, 0.516337, -0.429181, -0.335313, -0.660881 +8375, 0.516337, -0.429181, -0.335313, -0.660881 +8376, 0.516337, -0.429181, -0.335313, -0.660881 +8377, 0.516337, -0.429181, -0.335313, -0.660881 +8378, 0.516337, -0.429181, -0.335313, -0.660881 +8379, 0.516337, -0.429181, -0.335313, -0.660881 +8380, 0.516337, -0.429181, -0.335313, -0.660881 +8381, 0.516337, -0.429181, -0.335313, -0.660881 +8382, 0.516337, -0.429181, -0.335313, -0.660881 +8383, 0.516337, -0.429181, -0.335313, -0.660881 +8384, 0.516337, -0.429181, -0.335313, -0.660881 +8385, 0.516337, -0.429181, -0.335313, -0.660881 +8386, 0.516337, -0.429181, -0.335313, -0.660881 +8387, 0.516337, -0.429181, -0.335313, -0.660881 +8388, 0.516337, -0.429181, -0.335313, -0.660881 +8389, 0.516337, -0.429181, -0.335313, -0.660881 +8390, 0.516337, -0.429181, -0.335313, -0.660881 +8391, 0.516337, -0.429181, -0.335313, -0.660881 +8392, 0.516337, -0.429181, -0.335313, -0.660881 +8393, 0.516337, -0.429181, -0.335313, -0.660881 +8394, 0.516337, -0.429181, -0.335313, -0.660881 +8395, 0.516337, -0.429181, -0.335313, -0.660881 +8396, 0.516337, -0.429181, -0.335313, -0.660881 +8397, 0.516337, -0.429181, -0.335313, -0.660881 +8398, 0.516337, -0.429181, -0.335313, -0.660881 +8399, 0.516337, -0.429181, -0.335313, -0.660881 +8400, 0.536584, -0.406058, -0.328819, -0.662626 +8401, 0.536584, -0.406058, -0.328819, -0.662626 +8402, 0.536584, -0.406058, -0.328819, -0.662626 +8403, 0.536584, -0.406058, -0.328819, -0.662626 +8404, 0.536584, -0.406058, -0.328819, -0.662626 +8405, 0.536584, -0.406058, -0.328819, -0.662626 +8406, 0.536584, -0.406058, -0.328819, -0.662626 +8407, 0.536584, -0.406058, -0.328819, -0.662626 +8408, 0.536584, -0.406058, -0.328819, -0.662626 +8409, 0.536584, -0.406058, -0.328819, -0.662626 +8410, 0.536584, -0.406058, -0.328819, -0.662626 +8411, 0.536584, -0.406058, -0.328819, -0.662626 +8412, 0.536584, -0.406058, -0.328819, -0.662626 +8413, 0.536584, -0.406058, -0.328819, -0.662626 +8414, 0.536584, -0.406058, -0.328819, -0.662626 +8415, 0.536584, -0.406058, -0.328819, -0.662626 +8416, 0.536584, -0.406058, -0.328819, -0.662626 +8417, 0.536584, -0.406058, -0.328819, -0.662626 +8418, 0.536584, -0.406058, -0.328819, -0.662626 +8419, 0.536584, -0.406058, -0.328819, -0.662626 +8420, 0.536584, -0.406058, -0.328819, -0.662626 +8421, 0.536584, -0.406058, -0.328819, -0.662626 +8422, 0.536584, -0.406058, -0.328819, -0.662626 +8423, 0.536584, -0.406058, -0.328819, -0.662626 +8424, 0.536584, -0.406058, -0.328819, -0.662626 +8425, 0.536584, -0.406058, -0.328819, -0.662626 +8426, 0.536584, -0.406058, -0.328819, -0.662626 +8427, 0.536584, -0.406058, -0.328819, -0.662626 +8428, 0.536584, -0.406058, -0.328819, -0.662626 +8429, 0.536584, -0.406058, -0.328819, -0.662626 +8430, 0.536584, -0.406058, -0.328819, -0.662626 +8431, 0.536584, -0.406058, -0.328819, -0.662626 +8432, 0.536584, -0.406058, -0.328819, -0.662626 +8433, 0.536584, -0.406058, -0.328819, -0.662626 +8434, 0.536584, -0.406058, -0.328819, -0.662626 +8435, 0.536584, -0.406058, -0.328819, -0.662626 +8436, 0.536584, -0.406058, -0.328819, -0.662626 +8437, 0.536584, -0.406058, -0.328819, -0.662626 +8438, 0.536584, -0.406058, -0.328819, -0.662626 +8439, 0.536584, -0.406058, -0.328819, -0.662626 +8440, 0.536584, -0.406058, -0.328819, -0.662626 +8441, 0.536584, -0.406058, -0.328819, -0.662626 +8442, 0.536584, -0.406058, -0.328819, -0.662626 +8443, 0.536584, -0.406058, -0.328819, -0.662626 +8444, 0.536584, -0.406058, -0.328819, -0.662626 +8445, 0.536584, -0.406058, -0.328819, -0.662626 +8446, 0.536584, -0.406058, -0.328819, -0.662626 +8447, 0.536584, -0.406058, -0.328819, -0.662626 +8448, 0.536584, -0.406058, -0.328819, -0.662626 +8449, 0.536584, -0.406058, -0.328819, -0.662626 +8450, 0.536584, -0.406058, -0.328819, -0.662626 +8451, 0.536584, -0.406058, -0.328819, -0.662626 +8452, 0.536584, -0.406058, -0.328819, -0.662626 +8453, 0.536584, -0.406058, -0.328819, -0.662626 +8454, 0.536584, -0.406058, -0.328819, -0.662626 +8455, 0.536584, -0.406058, -0.328819, -0.662626 +8456, 0.536584, -0.406058, -0.328819, -0.662626 +8457, 0.536584, -0.406058, -0.328819, -0.662626 +8458, 0.536584, -0.406058, -0.328819, -0.662626 +8459, 0.536584, -0.406058, -0.328819, -0.662626 +8460, 0.536584, -0.406058, -0.328819, -0.662626 +8461, 0.536584, -0.406058, -0.328819, -0.662626 +8462, 0.536584, -0.406058, -0.328819, -0.662626 +8463, 0.536584, -0.406058, -0.328819, -0.662626 +8464, 0.536584, -0.406058, -0.328819, -0.662626 +8465, 0.536584, -0.406058, -0.328819, -0.662626 +8466, 0.536584, -0.406058, -0.328819, -0.662626 +8467, 0.536584, -0.406058, -0.328819, -0.662626 +8468, 0.536584, -0.406058, -0.328819, -0.662626 +8469, 0.536584, -0.406058, -0.328819, -0.662626 +8470, 0.536584, -0.406058, -0.328819, -0.662626 +8471, 0.536584, -0.406058, -0.328819, -0.662626 +8472, 0.536584, -0.406058, -0.328819, -0.662626 +8473, 0.536584, -0.406058, -0.328819, -0.662626 +8474, 0.536584, -0.406058, -0.328819, -0.662626 +8475, 0.536584, -0.406058, -0.328819, -0.662626 +8476, 0.536584, -0.406058, -0.328819, -0.662626 +8477, 0.536584, -0.406058, -0.328819, -0.662626 +8478, 0.536584, -0.406058, -0.328819, -0.662626 +8479, 0.536584, -0.406058, -0.328819, -0.662626 +8480, 0.536584, -0.406058, -0.328819, -0.662626 +8481, 0.536584, -0.406058, -0.328819, -0.662626 +8482, 0.536584, -0.406058, -0.328819, -0.662626 +8483, 0.536584, -0.406058, -0.328819, -0.662626 +8484, 0.536584, -0.406058, -0.328819, -0.662626 +8485, 0.536584, -0.406058, -0.328819, -0.662626 +8486, 0.536584, -0.406058, -0.328819, -0.662626 +8487, 0.536584, -0.406058, -0.328819, -0.662626 +8488, 0.536584, -0.406058, -0.328819, -0.662626 +8489, 0.536584, -0.406058, -0.328819, -0.662626 +8490, 0.536584, -0.406058, -0.328819, -0.662626 +8491, 0.536584, -0.406058, -0.328819, -0.662626 +8492, 0.536584, -0.406058, -0.328819, -0.662626 +8493, 0.536584, -0.406058, -0.328819, -0.662626 +8494, 0.536584, -0.406058, -0.328819, -0.662626 +8495, 0.536584, -0.406058, -0.328819, -0.662626 +8496, 0.536584, -0.406058, -0.328819, -0.662626 +8497, 0.536584, -0.406058, -0.328819, -0.662626 +8498, 0.536584, -0.406058, -0.328819, -0.662626 +8499, 0.536584, -0.406058, -0.328819, -0.662626 +8500, 0.556670, -0.383022, -0.321394, -0.663414 +8501, 0.556670, -0.383022, -0.321394, -0.663414 +8502, 0.556670, -0.383022, -0.321394, -0.663414 +8503, 0.556670, -0.383022, -0.321394, -0.663414 +8504, 0.556670, -0.383022, -0.321394, -0.663414 +8505, 0.556670, -0.383022, -0.321394, -0.663414 +8506, 0.556670, -0.383022, -0.321394, -0.663414 +8507, 0.556670, -0.383022, -0.321394, -0.663414 +8508, 0.556670, -0.383022, -0.321394, -0.663414 +8509, 0.556670, -0.383022, -0.321394, -0.663414 +8510, 0.556670, -0.383022, -0.321394, -0.663414 +8511, 0.556670, -0.383022, -0.321394, -0.663414 +8512, 0.556670, -0.383022, -0.321394, -0.663414 +8513, 0.556670, -0.383022, -0.321394, -0.663414 +8514, 0.556670, -0.383022, -0.321394, -0.663414 +8515, 0.556670, -0.383022, -0.321394, -0.663414 +8516, 0.556670, -0.383022, -0.321394, -0.663414 +8517, 0.556670, -0.383022, -0.321394, -0.663414 +8518, 0.556670, -0.383022, -0.321394, -0.663414 +8519, 0.556670, -0.383022, -0.321394, -0.663414 +8520, 0.556670, -0.383022, -0.321394, -0.663414 +8521, 0.556670, -0.383022, -0.321394, -0.663414 +8522, 0.556670, -0.383022, -0.321394, -0.663414 +8523, 0.556670, -0.383022, -0.321394, -0.663414 +8524, 0.556670, -0.383022, -0.321394, -0.663414 +8525, 0.556670, -0.383022, -0.321394, -0.663414 +8526, 0.556670, -0.383022, -0.321394, -0.663414 +8527, 0.556670, -0.383022, -0.321394, -0.663414 +8528, 0.556670, -0.383022, -0.321394, -0.663414 +8529, 0.556670, -0.383022, -0.321394, -0.663414 +8530, 0.556670, -0.383022, -0.321394, -0.663414 +8531, 0.556670, -0.383022, -0.321394, -0.663414 +8532, 0.556670, -0.383022, -0.321394, -0.663414 +8533, 0.556670, -0.383022, -0.321394, -0.663414 +8534, 0.556670, -0.383022, -0.321394, -0.663414 +8535, 0.556670, -0.383022, -0.321394, -0.663414 +8536, 0.556670, -0.383022, -0.321394, -0.663414 +8537, 0.556670, -0.383022, -0.321394, -0.663414 +8538, 0.556670, -0.383022, -0.321394, -0.663414 +8539, 0.556670, -0.383022, -0.321394, -0.663414 +8540, 0.556670, -0.383022, -0.321394, -0.663414 +8541, 0.556670, -0.383022, -0.321394, -0.663414 +8542, 0.556670, -0.383022, -0.321394, -0.663414 +8543, 0.556670, -0.383022, -0.321394, -0.663414 +8544, 0.556670, -0.383022, -0.321394, -0.663414 +8545, 0.556670, -0.383022, -0.321394, -0.663414 +8546, 0.556670, -0.383022, -0.321394, -0.663414 +8547, 0.556670, -0.383022, -0.321394, -0.663414 +8548, 0.556670, -0.383022, -0.321394, -0.663414 +8549, 0.556670, -0.383022, -0.321394, -0.663414 +8550, 0.556670, -0.383022, -0.321394, -0.663414 +8551, 0.556670, -0.383022, -0.321394, -0.663414 +8552, 0.556670, -0.383022, -0.321394, -0.663414 +8553, 0.556670, -0.383022, -0.321394, -0.663414 +8554, 0.556670, -0.383022, -0.321394, -0.663414 +8555, 0.556670, -0.383022, -0.321394, -0.663414 +8556, 0.556670, -0.383022, -0.321394, -0.663414 +8557, 0.556670, -0.383022, -0.321394, -0.663414 +8558, 0.556670, -0.383022, -0.321394, -0.663414 +8559, 0.556670, -0.383022, -0.321394, -0.663414 +8560, 0.556670, -0.383022, -0.321394, -0.663414 +8561, 0.556670, -0.383022, -0.321394, -0.663414 +8562, 0.556670, -0.383022, -0.321394, -0.663414 +8563, 0.556670, -0.383022, -0.321394, -0.663414 +8564, 0.556670, -0.383022, -0.321394, -0.663414 +8565, 0.556670, -0.383022, -0.321394, -0.663414 +8566, 0.556670, -0.383022, -0.321394, -0.663414 +8567, 0.556670, -0.383022, -0.321394, -0.663414 +8568, 0.556670, -0.383022, -0.321394, -0.663414 +8569, 0.556670, -0.383022, -0.321394, -0.663414 +8570, 0.556670, -0.383022, -0.321394, -0.663414 +8571, 0.556670, -0.383022, -0.321394, -0.663414 +8572, 0.556670, -0.383022, -0.321394, -0.663414 +8573, 0.556670, -0.383022, -0.321394, -0.663414 +8574, 0.556670, -0.383022, -0.321394, -0.663414 +8575, 0.556670, -0.383022, -0.321394, -0.663414 +8576, 0.556670, -0.383022, -0.321394, -0.663414 +8577, 0.556670, -0.383022, -0.321394, -0.663414 +8578, 0.556670, -0.383022, -0.321394, -0.663414 +8579, 0.556670, -0.383022, -0.321394, -0.663414 +8580, 0.556670, -0.383022, -0.321394, -0.663414 +8581, 0.556670, -0.383022, -0.321394, -0.663414 +8582, 0.556670, -0.383022, -0.321394, -0.663414 +8583, 0.556670, -0.383022, -0.321394, -0.663414 +8584, 0.556670, -0.383022, -0.321394, -0.663414 +8585, 0.556670, -0.383022, -0.321394, -0.663414 +8586, 0.556670, -0.383022, -0.321394, -0.663414 +8587, 0.556670, -0.383022, -0.321394, -0.663414 +8588, 0.556670, -0.383022, -0.321394, -0.663414 +8589, 0.556670, -0.383022, -0.321394, -0.663414 +8590, 0.556670, -0.383022, -0.321394, -0.663414 +8591, 0.556670, -0.383022, -0.321394, -0.663414 +8592, 0.556670, -0.383022, -0.321394, -0.663414 +8593, 0.556670, -0.383022, -0.321394, -0.663414 +8594, 0.556670, -0.383022, -0.321394, -0.663414 +8595, 0.556670, -0.383022, -0.321394, -0.663414 +8596, 0.556670, -0.383022, -0.321394, -0.663414 +8597, 0.556670, -0.383022, -0.321394, -0.663414 +8598, 0.556670, -0.383022, -0.321394, -0.663414 +8599, 0.556670, -0.383022, -0.321394, -0.663414 +8600, 0.576556, -0.360116, -0.313044, -0.663252 +8601, 0.576556, -0.360116, -0.313044, -0.663252 +8602, 0.576556, -0.360116, -0.313044, -0.663252 +8603, 0.576556, -0.360116, -0.313044, -0.663252 +8604, 0.576556, -0.360116, -0.313044, -0.663252 +8605, 0.576556, -0.360116, -0.313044, -0.663252 +8606, 0.576556, -0.360116, -0.313044, -0.663252 +8607, 0.576556, -0.360116, -0.313044, -0.663252 +8608, 0.576556, -0.360116, -0.313044, -0.663252 +8609, 0.576556, -0.360116, -0.313044, -0.663252 +8610, 0.576556, -0.360116, -0.313044, -0.663252 +8611, 0.576556, -0.360116, -0.313044, -0.663252 +8612, 0.576556, -0.360116, -0.313044, -0.663252 +8613, 0.576556, -0.360116, -0.313044, -0.663252 +8614, 0.576556, -0.360116, -0.313044, -0.663252 +8615, 0.576556, -0.360116, -0.313044, -0.663252 +8616, 0.576556, -0.360116, -0.313044, -0.663252 +8617, 0.576556, -0.360116, -0.313044, -0.663252 +8618, 0.576556, -0.360116, -0.313044, -0.663252 +8619, 0.576556, -0.360116, -0.313044, -0.663252 +8620, 0.576556, -0.360116, -0.313044, -0.663252 +8621, 0.576556, -0.360116, -0.313044, -0.663252 +8622, 0.576556, -0.360116, -0.313044, -0.663252 +8623, 0.576556, -0.360116, -0.313044, -0.663252 +8624, 0.576556, -0.360116, -0.313044, -0.663252 +8625, 0.576556, -0.360116, -0.313044, -0.663252 +8626, 0.576556, -0.360116, -0.313044, -0.663252 +8627, 0.576556, -0.360116, -0.313044, -0.663252 +8628, 0.576556, -0.360116, -0.313044, -0.663252 +8629, 0.576556, -0.360116, -0.313044, -0.663252 +8630, 0.576556, -0.360116, -0.313044, -0.663252 +8631, 0.576556, -0.360116, -0.313044, -0.663252 +8632, 0.576556, -0.360116, -0.313044, -0.663252 +8633, 0.576556, -0.360116, -0.313044, -0.663252 +8634, 0.576556, -0.360116, -0.313044, -0.663252 +8635, 0.576556, -0.360116, -0.313044, -0.663252 +8636, 0.576556, -0.360116, -0.313044, -0.663252 +8637, 0.576556, -0.360116, -0.313044, -0.663252 +8638, 0.576556, -0.360116, -0.313044, -0.663252 +8639, 0.576556, -0.360116, -0.313044, -0.663252 +8640, 0.576556, -0.360116, -0.313044, -0.663252 +8641, 0.576556, -0.360116, -0.313044, -0.663252 +8642, 0.576556, -0.360116, -0.313044, -0.663252 +8643, 0.576556, -0.360116, -0.313044, -0.663252 +8644, 0.576556, -0.360116, -0.313044, -0.663252 +8645, 0.576556, -0.360116, -0.313044, -0.663252 +8646, 0.576556, -0.360116, -0.313044, -0.663252 +8647, 0.576556, -0.360116, -0.313044, -0.663252 +8648, 0.576556, -0.360116, -0.313044, -0.663252 +8649, 0.576556, -0.360116, -0.313044, -0.663252 +8650, 0.576556, -0.360116, -0.313044, -0.663252 +8651, 0.576556, -0.360116, -0.313044, -0.663252 +8652, 0.576556, -0.360116, -0.313044, -0.663252 +8653, 0.576556, -0.360116, -0.313044, -0.663252 +8654, 0.576556, -0.360116, -0.313044, -0.663252 +8655, 0.576556, -0.360116, -0.313044, -0.663252 +8656, 0.576556, -0.360116, -0.313044, -0.663252 +8657, 0.576556, -0.360116, -0.313044, -0.663252 +8658, 0.576556, -0.360116, -0.313044, -0.663252 +8659, 0.576556, -0.360116, -0.313044, -0.663252 +8660, 0.576556, -0.360116, -0.313044, -0.663252 +8661, 0.576556, -0.360116, -0.313044, -0.663252 +8662, 0.576556, -0.360116, -0.313044, -0.663252 +8663, 0.576556, -0.360116, -0.313044, -0.663252 +8664, 0.576556, -0.360116, -0.313044, -0.663252 +8665, 0.576556, -0.360116, -0.313044, -0.663252 +8666, 0.576556, -0.360116, -0.313044, -0.663252 +8667, 0.576556, -0.360116, -0.313044, -0.663252 +8668, 0.576556, -0.360116, -0.313044, -0.663252 +8669, 0.576556, -0.360116, -0.313044, -0.663252 +8670, 0.576556, -0.360116, -0.313044, -0.663252 +8671, 0.576556, -0.360116, -0.313044, -0.663252 +8672, 0.576556, -0.360116, -0.313044, -0.663252 +8673, 0.576556, -0.360116, -0.313044, -0.663252 +8674, 0.576556, -0.360116, -0.313044, -0.663252 +8675, 0.576556, -0.360116, -0.313044, -0.663252 +8676, 0.576556, -0.360116, -0.313044, -0.663252 +8677, 0.576556, -0.360116, -0.313044, -0.663252 +8678, 0.576556, -0.360116, -0.313044, -0.663252 +8679, 0.576556, -0.360116, -0.313044, -0.663252 +8680, 0.576556, -0.360116, -0.313044, -0.663252 +8681, 0.576556, -0.360116, -0.313044, -0.663252 +8682, 0.576556, -0.360116, -0.313044, -0.663252 +8683, 0.576556, -0.360116, -0.313044, -0.663252 +8684, 0.576556, -0.360116, -0.313044, -0.663252 +8685, 0.576556, -0.360116, -0.313044, -0.663252 +8686, 0.576556, -0.360116, -0.313044, -0.663252 +8687, 0.576556, -0.360116, -0.313044, -0.663252 +8688, 0.576556, -0.360116, -0.313044, -0.663252 +8689, 0.576556, -0.360116, -0.313044, -0.663252 +8690, 0.576556, -0.360116, -0.313044, -0.663252 +8691, 0.576556, -0.360116, -0.313044, -0.663252 +8692, 0.576556, -0.360116, -0.313044, -0.663252 +8693, 0.576556, -0.360116, -0.313044, -0.663252 +8694, 0.576556, -0.360116, -0.313044, -0.663252 +8695, 0.576556, -0.360116, -0.313044, -0.663252 +8696, 0.576556, -0.360116, -0.313044, -0.663252 +8697, 0.576556, -0.360116, -0.313044, -0.663252 +8698, 0.576556, -0.360116, -0.313044, -0.663252 +8699, 0.576556, -0.360116, -0.313044, -0.663252 +8700, 0.596200, -0.337381, -0.303779, -0.662147 +8701, 0.596200, -0.337381, -0.303779, -0.662147 +8702, 0.596200, -0.337381, -0.303779, -0.662147 +8703, 0.596200, -0.337381, -0.303779, -0.662147 +8704, 0.596200, -0.337381, -0.303779, -0.662147 +8705, 0.596200, -0.337381, -0.303779, -0.662147 +8706, 0.596200, -0.337381, -0.303779, -0.662147 +8707, 0.596200, -0.337381, -0.303779, -0.662147 +8708, 0.596200, -0.337381, -0.303779, -0.662147 +8709, 0.596200, -0.337381, -0.303779, -0.662147 +8710, 0.596200, -0.337381, -0.303779, -0.662147 +8711, 0.596200, -0.337381, -0.303779, -0.662147 +8712, 0.596200, -0.337381, -0.303779, -0.662147 +8713, 0.596200, -0.337381, -0.303779, -0.662147 +8714, 0.596200, -0.337381, -0.303779, -0.662147 +8715, 0.596200, -0.337381, -0.303779, -0.662147 +8716, 0.596200, -0.337381, -0.303779, -0.662147 +8717, 0.596200, -0.337381, -0.303779, -0.662147 +8718, 0.596200, -0.337381, -0.303779, -0.662147 +8719, 0.596200, -0.337381, -0.303779, -0.662147 +8720, 0.596200, -0.337381, -0.303779, -0.662147 +8721, 0.596200, -0.337381, -0.303779, -0.662147 +8722, 0.596200, -0.337381, -0.303779, -0.662147 +8723, 0.596200, -0.337381, -0.303779, -0.662147 +8724, 0.596200, -0.337381, -0.303779, -0.662147 +8725, 0.596200, -0.337381, -0.303779, -0.662147 +8726, 0.596200, -0.337381, -0.303779, -0.662147 +8727, 0.596200, -0.337381, -0.303779, -0.662147 +8728, 0.596200, -0.337381, -0.303779, -0.662147 +8729, 0.596200, -0.337381, -0.303779, -0.662147 +8730, 0.596200, -0.337381, -0.303779, -0.662147 +8731, 0.596200, -0.337381, -0.303779, -0.662147 +8732, 0.596200, -0.337381, -0.303779, -0.662147 +8733, 0.596200, -0.337381, -0.303779, -0.662147 +8734, 0.596200, -0.337381, -0.303779, -0.662147 +8735, 0.596200, -0.337381, -0.303779, -0.662147 +8736, 0.596200, -0.337381, -0.303779, -0.662147 +8737, 0.596200, -0.337381, -0.303779, -0.662147 +8738, 0.596200, -0.337381, -0.303779, -0.662147 +8739, 0.596200, -0.337381, -0.303779, -0.662147 +8740, 0.596200, -0.337381, -0.303779, -0.662147 +8741, 0.596200, -0.337381, -0.303779, -0.662147 +8742, 0.596200, -0.337381, -0.303779, -0.662147 +8743, 0.596200, -0.337381, -0.303779, -0.662147 +8744, 0.596200, -0.337381, -0.303779, -0.662147 +8745, 0.596200, -0.337381, -0.303779, -0.662147 +8746, 0.596200, -0.337381, -0.303779, -0.662147 +8747, 0.596200, -0.337381, -0.303779, -0.662147 +8748, 0.596200, -0.337381, -0.303779, -0.662147 +8749, 0.596200, -0.337381, -0.303779, -0.662147 +8750, 0.596200, -0.337381, -0.303779, -0.662147 +8751, 0.596200, -0.337381, -0.303779, -0.662147 +8752, 0.596200, -0.337381, -0.303779, -0.662147 +8753, 0.596200, -0.337381, -0.303779, -0.662147 +8754, 0.596200, -0.337381, -0.303779, -0.662147 +8755, 0.596200, -0.337381, -0.303779, -0.662147 +8756, 0.596200, -0.337381, -0.303779, -0.662147 +8757, 0.596200, -0.337381, -0.303779, -0.662147 +8758, 0.596200, -0.337381, -0.303779, -0.662147 +8759, 0.596200, -0.337381, -0.303779, -0.662147 +8760, 0.596200, -0.337381, -0.303779, -0.662147 +8761, 0.596200, -0.337381, -0.303779, -0.662147 +8762, 0.596200, -0.337381, -0.303779, -0.662147 +8763, 0.596200, -0.337381, -0.303779, -0.662147 +8764, 0.596200, -0.337381, -0.303779, -0.662147 +8765, 0.596200, -0.337381, -0.303779, -0.662147 +8766, 0.596200, -0.337381, -0.303779, -0.662147 +8767, 0.596200, -0.337381, -0.303779, -0.662147 +8768, 0.596200, -0.337381, -0.303779, -0.662147 +8769, 0.596200, -0.337381, -0.303779, -0.662147 +8770, 0.596200, -0.337381, -0.303779, -0.662147 +8771, 0.596200, -0.337381, -0.303779, -0.662147 +8772, 0.596200, -0.337381, -0.303779, -0.662147 +8773, 0.596200, -0.337381, -0.303779, -0.662147 +8774, 0.596200, -0.337381, -0.303779, -0.662147 +8775, 0.596200, -0.337381, -0.303779, -0.662147 +8776, 0.596200, -0.337381, -0.303779, -0.662147 +8777, 0.596200, -0.337381, -0.303779, -0.662147 +8778, 0.596200, -0.337381, -0.303779, -0.662147 +8779, 0.596200, -0.337381, -0.303779, -0.662147 +8780, 0.596200, -0.337381, -0.303779, -0.662147 +8781, 0.596200, -0.337381, -0.303779, -0.662147 +8782, 0.596200, -0.337381, -0.303779, -0.662147 +8783, 0.596200, -0.337381, -0.303779, -0.662147 +8784, 0.596200, -0.337381, -0.303779, -0.662147 +8785, 0.596200, -0.337381, -0.303779, -0.662147 +8786, 0.596200, -0.337381, -0.303779, -0.662147 +8787, 0.596200, -0.337381, -0.303779, -0.662147 +8788, 0.596200, -0.337381, -0.303779, -0.662147 +8789, 0.596200, -0.337381, -0.303779, -0.662147 +8790, 0.596200, -0.337381, -0.303779, -0.662147 +8791, 0.596200, -0.337381, -0.303779, -0.662147 +8792, 0.596200, -0.337381, -0.303779, -0.662147 +8793, 0.596200, -0.337381, -0.303779, -0.662147 +8794, 0.596200, -0.337381, -0.303779, -0.662147 +8795, 0.596200, -0.337381, -0.303779, -0.662147 +8796, 0.596200, -0.337381, -0.303779, -0.662147 +8797, 0.596200, -0.337381, -0.303779, -0.662147 +8798, 0.596200, -0.337381, -0.303779, -0.662147 +8799, 0.596200, -0.337381, -0.303779, -0.662147 +8800, 0.615562, -0.314856, -0.293608, -0.660109 +8801, 0.615562, -0.314856, -0.293608, -0.660109 +8802, 0.615562, -0.314856, -0.293608, -0.660109 +8803, 0.615562, -0.314856, -0.293608, -0.660109 +8804, 0.615562, -0.314856, -0.293608, -0.660109 +8805, 0.615562, -0.314856, -0.293608, -0.660109 +8806, 0.615562, -0.314856, -0.293608, -0.660109 +8807, 0.615562, -0.314856, -0.293608, -0.660109 +8808, 0.615562, -0.314856, -0.293608, -0.660109 +8809, 0.615562, -0.314856, -0.293608, -0.660109 +8810, 0.615562, -0.314856, -0.293608, -0.660109 +8811, 0.615562, -0.314856, -0.293608, -0.660109 +8812, 0.615562, -0.314856, -0.293608, -0.660109 +8813, 0.615562, -0.314856, -0.293608, -0.660109 +8814, 0.615562, -0.314856, -0.293608, -0.660109 +8815, 0.615562, -0.314856, -0.293608, -0.660109 +8816, 0.615562, -0.314856, -0.293608, -0.660109 +8817, 0.615562, -0.314856, -0.293608, -0.660109 +8818, 0.615562, -0.314856, -0.293608, -0.660109 +8819, 0.615562, -0.314856, -0.293608, -0.660109 +8820, 0.615562, -0.314856, -0.293608, -0.660109 +8821, 0.615562, -0.314856, -0.293608, -0.660109 +8822, 0.615562, -0.314856, -0.293608, -0.660109 +8823, 0.615562, -0.314856, -0.293608, -0.660109 +8824, 0.615562, -0.314856, -0.293608, -0.660109 +8825, 0.615562, -0.314856, -0.293608, -0.660109 +8826, 0.615562, -0.314856, -0.293608, -0.660109 +8827, 0.615562, -0.314856, -0.293608, -0.660109 +8828, 0.615562, -0.314856, -0.293608, -0.660109 +8829, 0.615562, -0.314856, -0.293608, -0.660109 +8830, 0.615562, -0.314856, -0.293608, -0.660109 +8831, 0.615562, -0.314856, -0.293608, -0.660109 +8832, 0.615562, -0.314856, -0.293608, -0.660109 +8833, 0.615562, -0.314856, -0.293608, -0.660109 +8834, 0.615562, -0.314856, -0.293608, -0.660109 +8835, 0.615562, -0.314856, -0.293608, -0.660109 +8836, 0.615562, -0.314856, -0.293608, -0.660109 +8837, 0.615562, -0.314856, -0.293608, -0.660109 +8838, 0.615562, -0.314856, -0.293608, -0.660109 +8839, 0.615562, -0.314856, -0.293608, -0.660109 +8840, 0.615562, -0.314856, -0.293608, -0.660109 +8841, 0.615562, -0.314856, -0.293608, -0.660109 +8842, 0.615562, -0.314856, -0.293608, -0.660109 +8843, 0.615562, -0.314856, -0.293608, -0.660109 +8844, 0.615562, -0.314856, -0.293608, -0.660109 +8845, 0.615562, -0.314856, -0.293608, -0.660109 +8846, 0.615562, -0.314856, -0.293608, -0.660109 +8847, 0.615562, -0.314856, -0.293608, -0.660109 +8848, 0.615562, -0.314856, -0.293608, -0.660109 +8849, 0.615562, -0.314856, -0.293608, -0.660109 +8850, 0.615562, -0.314856, -0.293608, -0.660109 +8851, 0.615562, -0.314856, -0.293608, -0.660109 +8852, 0.615562, -0.314856, -0.293608, -0.660109 +8853, 0.615562, -0.314856, -0.293608, -0.660109 +8854, 0.615562, -0.314856, -0.293608, -0.660109 +8855, 0.615562, -0.314856, -0.293608, -0.660109 +8856, 0.615562, -0.314856, -0.293608, -0.660109 +8857, 0.615562, -0.314856, -0.293608, -0.660109 +8858, 0.615562, -0.314856, -0.293608, -0.660109 +8859, 0.615562, -0.314856, -0.293608, -0.660109 +8860, 0.615562, -0.314856, -0.293608, -0.660109 +8861, 0.615562, -0.314856, -0.293608, -0.660109 +8862, 0.615562, -0.314856, -0.293608, -0.660109 +8863, 0.615562, -0.314856, -0.293608, -0.660109 +8864, 0.615562, -0.314856, -0.293608, -0.660109 +8865, 0.615562, -0.314856, -0.293608, -0.660109 +8866, 0.615562, -0.314856, -0.293608, -0.660109 +8867, 0.615562, -0.314856, -0.293608, -0.660109 +8868, 0.615562, -0.314856, -0.293608, -0.660109 +8869, 0.615562, -0.314856, -0.293608, -0.660109 +8870, 0.615562, -0.314856, -0.293608, -0.660109 +8871, 0.615562, -0.314856, -0.293608, -0.660109 +8872, 0.615562, -0.314856, -0.293608, -0.660109 +8873, 0.615562, -0.314856, -0.293608, -0.660109 +8874, 0.615562, -0.314856, -0.293608, -0.660109 +8875, 0.615562, -0.314856, -0.293608, -0.660109 +8876, 0.615562, -0.314856, -0.293608, -0.660109 +8877, 0.615562, -0.314856, -0.293608, -0.660109 +8878, 0.615562, -0.314856, -0.293608, -0.660109 +8879, 0.615562, -0.314856, -0.293608, -0.660109 +8880, 0.615562, -0.314856, -0.293608, -0.660109 +8881, 0.615562, -0.314856, -0.293608, -0.660109 +8882, 0.615562, -0.314856, -0.293608, -0.660109 +8883, 0.615562, -0.314856, -0.293608, -0.660109 +8884, 0.615562, -0.314856, -0.293608, -0.660109 +8885, 0.615562, -0.314856, -0.293608, -0.660109 +8886, 0.615562, -0.314856, -0.293608, -0.660109 +8887, 0.615562, -0.314856, -0.293608, -0.660109 +8888, 0.615562, -0.314856, -0.293608, -0.660109 +8889, 0.615562, -0.314856, -0.293608, -0.660109 +8890, 0.615562, -0.314856, -0.293608, -0.660109 +8891, 0.615562, -0.314856, -0.293608, -0.660109 +8892, 0.615562, -0.314856, -0.293608, -0.660109 +8893, 0.615562, -0.314856, -0.293608, -0.660109 +8894, 0.615562, -0.314856, -0.293608, -0.660109 +8895, 0.615562, -0.314856, -0.293608, -0.660109 +8896, 0.615562, -0.314856, -0.293608, -0.660109 +8897, 0.615562, -0.314856, -0.293608, -0.660109 +8898, 0.615562, -0.314856, -0.293608, -0.660109 +8899, 0.615562, -0.314856, -0.293608, -0.660109 +8900, 0.634602, -0.292582, -0.282543, -0.657150 +8901, 0.634602, -0.292582, -0.282543, -0.657150 +8902, 0.634602, -0.292582, -0.282543, -0.657150 +8903, 0.634602, -0.292582, -0.282543, -0.657150 +8904, 0.634602, -0.292582, -0.282543, -0.657150 +8905, 0.634602, -0.292582, -0.282543, -0.657150 +8906, 0.634602, -0.292582, -0.282543, -0.657150 +8907, 0.634602, -0.292582, -0.282543, -0.657150 +8908, 0.634602, -0.292582, -0.282543, -0.657150 +8909, 0.634602, -0.292582, -0.282543, -0.657150 +8910, 0.634602, -0.292582, -0.282543, -0.657150 +8911, 0.634602, -0.292582, -0.282543, -0.657150 +8912, 0.634602, -0.292582, -0.282543, -0.657150 +8913, 0.634602, -0.292582, -0.282543, -0.657150 +8914, 0.634602, -0.292582, -0.282543, -0.657150 +8915, 0.634602, -0.292582, -0.282543, -0.657150 +8916, 0.634602, -0.292582, -0.282543, -0.657150 +8917, 0.634602, -0.292582, -0.282543, -0.657150 +8918, 0.634602, -0.292582, -0.282543, -0.657150 +8919, 0.634602, -0.292582, -0.282543, -0.657150 +8920, 0.634602, -0.292582, -0.282543, -0.657150 +8921, 0.634602, -0.292582, -0.282543, -0.657150 +8922, 0.634602, -0.292582, -0.282543, -0.657150 +8923, 0.634602, -0.292582, -0.282543, -0.657150 +8924, 0.634602, -0.292582, -0.282543, -0.657150 +8925, 0.634602, -0.292582, -0.282543, -0.657150 +8926, 0.634602, -0.292582, -0.282543, -0.657150 +8927, 0.634602, -0.292582, -0.282543, -0.657150 +8928, 0.634602, -0.292582, -0.282543, -0.657150 +8929, 0.634602, -0.292582, -0.282543, -0.657150 +8930, 0.634602, -0.292582, -0.282543, -0.657150 +8931, 0.634602, -0.292582, -0.282543, -0.657150 +8932, 0.634602, -0.292582, -0.282543, -0.657150 +8933, 0.634602, -0.292582, -0.282543, -0.657150 +8934, 0.634602, -0.292582, -0.282543, -0.657150 +8935, 0.634602, -0.292582, -0.282543, -0.657150 +8936, 0.634602, -0.292582, -0.282543, -0.657150 +8937, 0.634602, -0.292582, -0.282543, -0.657150 +8938, 0.634602, -0.292582, -0.282543, -0.657150 +8939, 0.634602, -0.292582, -0.282543, -0.657150 +8940, 0.634602, -0.292582, -0.282543, -0.657150 +8941, 0.634602, -0.292582, -0.282543, -0.657150 +8942, 0.634602, -0.292582, -0.282543, -0.657150 +8943, 0.634602, -0.292582, -0.282543, -0.657150 +8944, 0.634602, -0.292582, -0.282543, -0.657150 +8945, 0.634602, -0.292582, -0.282543, -0.657150 +8946, 0.634602, -0.292582, -0.282543, -0.657150 +8947, 0.634602, -0.292582, -0.282543, -0.657150 +8948, 0.634602, -0.292582, -0.282543, -0.657150 +8949, 0.634602, -0.292582, -0.282543, -0.657150 +8950, 0.634602, -0.292582, -0.282543, -0.657150 +8951, 0.634602, -0.292582, -0.282543, -0.657150 +8952, 0.634602, -0.292582, -0.282543, -0.657150 +8953, 0.634602, -0.292582, -0.282543, -0.657150 +8954, 0.634602, -0.292582, -0.282543, -0.657150 +8955, 0.634602, -0.292582, -0.282543, -0.657150 +8956, 0.634602, -0.292582, -0.282543, -0.657150 +8957, 0.634602, -0.292582, -0.282543, -0.657150 +8958, 0.634602, -0.292582, -0.282543, -0.657150 +8959, 0.634602, -0.292582, -0.282543, -0.657150 +8960, 0.634602, -0.292582, -0.282543, -0.657150 +8961, 0.634602, -0.292582, -0.282543, -0.657150 +8962, 0.634602, -0.292582, -0.282543, -0.657150 +8963, 0.634602, -0.292582, -0.282543, -0.657150 +8964, 0.634602, -0.292582, -0.282543, -0.657150 +8965, 0.634602, -0.292582, -0.282543, -0.657150 +8966, 0.634602, -0.292582, -0.282543, -0.657150 +8967, 0.634602, -0.292582, -0.282543, -0.657150 +8968, 0.634602, -0.292582, -0.282543, -0.657150 +8969, 0.634602, -0.292582, -0.282543, -0.657150 +8970, 0.634602, -0.292582, -0.282543, -0.657150 +8971, 0.634602, -0.292582, -0.282543, -0.657150 +8972, 0.634602, -0.292582, -0.282543, -0.657150 +8973, 0.634602, -0.292582, -0.282543, -0.657150 +8974, 0.634602, -0.292582, -0.282543, -0.657150 +8975, 0.634602, -0.292582, -0.282543, -0.657150 +8976, 0.634602, -0.292582, -0.282543, -0.657150 +8977, 0.634602, -0.292582, -0.282543, -0.657150 +8978, 0.634602, -0.292582, -0.282543, -0.657150 +8979, 0.634602, -0.292582, -0.282543, -0.657150 +8980, 0.634602, -0.292582, -0.282543, -0.657150 +8981, 0.634602, -0.292582, -0.282543, -0.657150 +8982, 0.634602, -0.292582, -0.282543, -0.657150 +8983, 0.634602, -0.292582, -0.282543, -0.657150 +8984, 0.634602, -0.292582, -0.282543, -0.657150 +8985, 0.634602, -0.292582, -0.282543, -0.657150 +8986, 0.634602, -0.292582, -0.282543, -0.657150 +8987, 0.634602, -0.292582, -0.282543, -0.657150 +8988, 0.634602, -0.292582, -0.282543, -0.657150 +8989, 0.634602, -0.292582, -0.282543, -0.657150 +8990, 0.634602, -0.292582, -0.282543, -0.657150 +8991, 0.634602, -0.292582, -0.282543, -0.657150 +8992, 0.634602, -0.292582, -0.282543, -0.657150 +8993, 0.634602, -0.292582, -0.282543, -0.657150 +8994, 0.634602, -0.292582, -0.282543, -0.657150 +8995, 0.634602, -0.292582, -0.282543, -0.657150 +8996, 0.634602, -0.292582, -0.282543, -0.657150 +8997, 0.634602, -0.292582, -0.282543, -0.657150 +8998, 0.634602, -0.292582, -0.282543, -0.657150 +8999, 0.634602, -0.292582, -0.282543, -0.657150 +9000, 0.653281, -0.270598, -0.270598, -0.653281 +9001, 0.653281, -0.270598, -0.270598, -0.653281 +9002, 0.653281, -0.270598, -0.270598, -0.653281 +9003, 0.653281, -0.270598, -0.270598, -0.653281 +9004, 0.653281, -0.270598, -0.270598, -0.653281 +9005, 0.653281, -0.270598, -0.270598, -0.653281 +9006, 0.653281, -0.270598, -0.270598, -0.653281 +9007, 0.653281, -0.270598, -0.270598, -0.653281 +9008, 0.653281, -0.270598, -0.270598, -0.653281 +9009, 0.653281, -0.270598, -0.270598, -0.653281 +9010, 0.653281, -0.270598, -0.270598, -0.653281 +9011, 0.653281, -0.270598, -0.270598, -0.653281 +9012, 0.653281, -0.270598, -0.270598, -0.653281 +9013, 0.653281, -0.270598, -0.270598, -0.653281 +9014, 0.653281, -0.270598, -0.270598, -0.653281 +9015, 0.653281, -0.270598, -0.270598, -0.653281 +9016, 0.653281, -0.270598, -0.270598, -0.653281 +9017, 0.653281, -0.270598, -0.270598, -0.653281 +9018, 0.653281, -0.270598, -0.270598, -0.653281 +9019, 0.653281, -0.270598, -0.270598, -0.653281 +9020, 0.653281, -0.270598, -0.270598, -0.653281 +9021, 0.653281, -0.270598, -0.270598, -0.653281 +9022, 0.653281, -0.270598, -0.270598, -0.653281 +9023, 0.653281, -0.270598, -0.270598, -0.653281 +9024, 0.653281, -0.270598, -0.270598, -0.653281 +9025, 0.653281, -0.270598, -0.270598, -0.653281 +9026, 0.653281, -0.270598, -0.270598, -0.653281 +9027, 0.653281, -0.270598, -0.270598, -0.653281 +9028, 0.653281, -0.270598, -0.270598, -0.653281 +9029, 0.653281, -0.270598, -0.270598, -0.653281 +9030, 0.653281, -0.270598, -0.270598, -0.653281 +9031, 0.653281, -0.270598, -0.270598, -0.653281 +9032, 0.653281, -0.270598, -0.270598, -0.653281 +9033, 0.653281, -0.270598, -0.270598, -0.653281 +9034, 0.653281, -0.270598, -0.270598, -0.653281 +9035, 0.653281, -0.270598, -0.270598, -0.653281 +9036, 0.653281, -0.270598, -0.270598, -0.653281 +9037, 0.653281, -0.270598, -0.270598, -0.653281 +9038, 0.653281, -0.270598, -0.270598, -0.653281 +9039, 0.653281, -0.270598, -0.270598, -0.653281 +9040, 0.653281, -0.270598, -0.270598, -0.653281 +9041, 0.653281, -0.270598, -0.270598, -0.653281 +9042, 0.653281, -0.270598, -0.270598, -0.653281 +9043, 0.653281, -0.270598, -0.270598, -0.653281 +9044, 0.653281, -0.270598, -0.270598, -0.653281 +9045, 0.653281, -0.270598, -0.270598, -0.653281 +9046, 0.653281, -0.270598, -0.270598, -0.653281 +9047, 0.653281, -0.270598, -0.270598, -0.653281 +9048, 0.653281, -0.270598, -0.270598, -0.653281 +9049, 0.653281, -0.270598, -0.270598, -0.653281 +9050, 0.653281, -0.270598, -0.270598, -0.653281 +9051, 0.653281, -0.270598, -0.270598, -0.653281 +9052, 0.653281, -0.270598, -0.270598, -0.653281 +9053, 0.653281, -0.270598, -0.270598, -0.653281 +9054, 0.653281, -0.270598, -0.270598, -0.653281 +9055, 0.653281, -0.270598, -0.270598, -0.653281 +9056, 0.653281, -0.270598, -0.270598, -0.653281 +9057, 0.653281, -0.270598, -0.270598, -0.653281 +9058, 0.653281, -0.270598, -0.270598, -0.653281 +9059, 0.653281, -0.270598, -0.270598, -0.653281 +9060, 0.653281, -0.270598, -0.270598, -0.653281 +9061, 0.653281, -0.270598, -0.270598, -0.653281 +9062, 0.653281, -0.270598, -0.270598, -0.653281 +9063, 0.653281, -0.270598, -0.270598, -0.653281 +9064, 0.653281, -0.270598, -0.270598, -0.653281 +9065, 0.653281, -0.270598, -0.270598, -0.653281 +9066, 0.653281, -0.270598, -0.270598, -0.653281 +9067, 0.653281, -0.270598, -0.270598, -0.653281 +9068, 0.653281, -0.270598, -0.270598, -0.653281 +9069, 0.653281, -0.270598, -0.270598, -0.653281 +9070, 0.653281, -0.270598, -0.270598, -0.653281 +9071, 0.653281, -0.270598, -0.270598, -0.653281 +9072, 0.653281, -0.270598, -0.270598, -0.653281 +9073, 0.653281, -0.270598, -0.270598, -0.653281 +9074, 0.653281, -0.270598, -0.270598, -0.653281 +9075, 0.653281, -0.270598, -0.270598, -0.653281 +9076, 0.653281, -0.270598, -0.270598, -0.653281 +9077, 0.653281, -0.270598, -0.270598, -0.653281 +9078, 0.653281, -0.270598, -0.270598, -0.653281 +9079, 0.653281, -0.270598, -0.270598, -0.653281 +9080, 0.653281, -0.270598, -0.270598, -0.653281 +9081, 0.653281, -0.270598, -0.270598, -0.653281 +9082, 0.653281, -0.270598, -0.270598, -0.653281 +9083, 0.653281, -0.270598, -0.270598, -0.653281 +9084, 0.653281, -0.270598, -0.270598, -0.653281 +9085, 0.653281, -0.270598, -0.270598, -0.653281 +9086, 0.653281, -0.270598, -0.270598, -0.653281 +9087, 0.653281, -0.270598, -0.270598, -0.653281 +9088, 0.653281, -0.270598, -0.270598, -0.653281 +9089, 0.653281, -0.270598, -0.270598, -0.653281 +9090, 0.653281, -0.270598, -0.270598, -0.653281 +9091, 0.653281, -0.270598, -0.270598, -0.653281 +9092, 0.653281, -0.270598, -0.270598, -0.653281 +9093, 0.653281, -0.270598, -0.270598, -0.653281 +9094, 0.653281, -0.270598, -0.270598, -0.653281 +9095, 0.653281, -0.270598, -0.270598, -0.653281 +9096, 0.653281, -0.270598, -0.270598, -0.653281 +9097, 0.653281, -0.270598, -0.270598, -0.653281 +9098, 0.653281, -0.270598, -0.270598, -0.653281 +9099, 0.653281, -0.270598, -0.270598, -0.653281 +9100, 0.671562, -0.248943, -0.257788, -0.648519 +9101, 0.671562, -0.248943, -0.257788, -0.648519 +9102, 0.671562, -0.248943, -0.257788, -0.648519 +9103, 0.671562, -0.248943, -0.257788, -0.648519 +9104, 0.671562, -0.248943, -0.257788, -0.648519 +9105, 0.671562, -0.248943, -0.257788, -0.648519 +9106, 0.671562, -0.248943, -0.257788, -0.648519 +9107, 0.671562, -0.248943, -0.257788, -0.648519 +9108, 0.671562, -0.248943, -0.257788, -0.648519 +9109, 0.671562, -0.248943, -0.257788, -0.648519 +9110, 0.671562, -0.248943, -0.257788, -0.648519 +9111, 0.671562, -0.248943, -0.257788, -0.648519 +9112, 0.671562, -0.248943, -0.257788, -0.648519 +9113, 0.671562, -0.248943, -0.257788, -0.648519 +9114, 0.671562, -0.248943, -0.257788, -0.648519 +9115, 0.671562, -0.248943, -0.257788, -0.648519 +9116, 0.671562, -0.248943, -0.257788, -0.648519 +9117, 0.671562, -0.248943, -0.257788, -0.648519 +9118, 0.671562, -0.248943, -0.257788, -0.648519 +9119, 0.671562, -0.248943, -0.257788, -0.648519 +9120, 0.671562, -0.248943, -0.257788, -0.648519 +9121, 0.671562, -0.248943, -0.257788, -0.648519 +9122, 0.671562, -0.248943, -0.257788, -0.648519 +9123, 0.671562, -0.248943, -0.257788, -0.648519 +9124, 0.671562, -0.248943, -0.257788, -0.648519 +9125, 0.671562, -0.248943, -0.257788, -0.648519 +9126, 0.671562, -0.248943, -0.257788, -0.648519 +9127, 0.671562, -0.248943, -0.257788, -0.648519 +9128, 0.671562, -0.248943, -0.257788, -0.648519 +9129, 0.671562, -0.248943, -0.257788, -0.648519 +9130, 0.671562, -0.248943, -0.257788, -0.648519 +9131, 0.671562, -0.248943, -0.257788, -0.648519 +9132, 0.671562, -0.248943, -0.257788, -0.648519 +9133, 0.671562, -0.248943, -0.257788, -0.648519 +9134, 0.671562, -0.248943, -0.257788, -0.648519 +9135, 0.671562, -0.248943, -0.257788, -0.648519 +9136, 0.671562, -0.248943, -0.257788, -0.648519 +9137, 0.671562, -0.248943, -0.257788, -0.648519 +9138, 0.671562, -0.248943, -0.257788, -0.648519 +9139, 0.671562, -0.248943, -0.257788, -0.648519 +9140, 0.671562, -0.248943, -0.257788, -0.648519 +9141, 0.671562, -0.248943, -0.257788, -0.648519 +9142, 0.671562, -0.248943, -0.257788, -0.648519 +9143, 0.671562, -0.248943, -0.257788, -0.648519 +9144, 0.671562, -0.248943, -0.257788, -0.648519 +9145, 0.671562, -0.248943, -0.257788, -0.648519 +9146, 0.671562, -0.248943, -0.257788, -0.648519 +9147, 0.671562, -0.248943, -0.257788, -0.648519 +9148, 0.671562, -0.248943, -0.257788, -0.648519 +9149, 0.671562, -0.248943, -0.257788, -0.648519 +9150, 0.671562, -0.248943, -0.257788, -0.648519 +9151, 0.671562, -0.248943, -0.257788, -0.648519 +9152, 0.671562, -0.248943, -0.257788, -0.648519 +9153, 0.671562, -0.248943, -0.257788, -0.648519 +9154, 0.671562, -0.248943, -0.257788, -0.648519 +9155, 0.671562, -0.248943, -0.257788, -0.648519 +9156, 0.671562, -0.248943, -0.257788, -0.648519 +9157, 0.671562, -0.248943, -0.257788, -0.648519 +9158, 0.671562, -0.248943, -0.257788, -0.648519 +9159, 0.671562, -0.248943, -0.257788, -0.648519 +9160, 0.671562, -0.248943, -0.257788, -0.648519 +9161, 0.671562, -0.248943, -0.257788, -0.648519 +9162, 0.671562, -0.248943, -0.257788, -0.648519 +9163, 0.671562, -0.248943, -0.257788, -0.648519 +9164, 0.671562, -0.248943, -0.257788, -0.648519 +9165, 0.671562, -0.248943, -0.257788, -0.648519 +9166, 0.671562, -0.248943, -0.257788, -0.648519 +9167, 0.671562, -0.248943, -0.257788, -0.648519 +9168, 0.671562, -0.248943, -0.257788, -0.648519 +9169, 0.671562, -0.248943, -0.257788, -0.648519 +9170, 0.671562, -0.248943, -0.257788, -0.648519 +9171, 0.671562, -0.248943, -0.257788, -0.648519 +9172, 0.671562, -0.248943, -0.257788, -0.648519 +9173, 0.671562, -0.248943, -0.257788, -0.648519 +9174, 0.671562, -0.248943, -0.257788, -0.648519 +9175, 0.671562, -0.248943, -0.257788, -0.648519 +9176, 0.671562, -0.248943, -0.257788, -0.648519 +9177, 0.671562, -0.248943, -0.257788, -0.648519 +9178, 0.671562, -0.248943, -0.257788, -0.648519 +9179, 0.671562, -0.248943, -0.257788, -0.648519 +9180, 0.671562, -0.248943, -0.257788, -0.648519 +9181, 0.671562, -0.248943, -0.257788, -0.648519 +9182, 0.671562, -0.248943, -0.257788, -0.648519 +9183, 0.671562, -0.248943, -0.257788, -0.648519 +9184, 0.671562, -0.248943, -0.257788, -0.648519 +9185, 0.671562, -0.248943, -0.257788, -0.648519 +9186, 0.671562, -0.248943, -0.257788, -0.648519 +9187, 0.671562, -0.248943, -0.257788, -0.648519 +9188, 0.671562, -0.248943, -0.257788, -0.648519 +9189, 0.671562, -0.248943, -0.257788, -0.648519 +9190, 0.671562, -0.248943, -0.257788, -0.648519 +9191, 0.671562, -0.248943, -0.257788, -0.648519 +9192, 0.671562, -0.248943, -0.257788, -0.648519 +9193, 0.671562, -0.248943, -0.257788, -0.648519 +9194, 0.671562, -0.248943, -0.257788, -0.648519 +9195, 0.671562, -0.248943, -0.257788, -0.648519 +9196, 0.671562, -0.248943, -0.257788, -0.648519 +9197, 0.671562, -0.248943, -0.257788, -0.648519 +9198, 0.671562, -0.248943, -0.257788, -0.648519 +9199, 0.671562, -0.248943, -0.257788, -0.648519 +9200, 0.689404, -0.227656, -0.244131, -0.642880 +9201, 0.689404, -0.227656, -0.244131, -0.642880 +9202, 0.689404, -0.227656, -0.244131, -0.642880 +9203, 0.689404, -0.227656, -0.244131, -0.642880 +9204, 0.689404, -0.227656, -0.244131, -0.642880 +9205, 0.689404, -0.227656, -0.244131, -0.642880 +9206, 0.689404, -0.227656, -0.244131, -0.642880 +9207, 0.689404, -0.227656, -0.244131, -0.642880 +9208, 0.689404, -0.227656, -0.244131, -0.642880 +9209, 0.689404, -0.227656, -0.244131, -0.642880 +9210, 0.689404, -0.227656, -0.244131, -0.642880 +9211, 0.689404, -0.227656, -0.244131, -0.642880 +9212, 0.689404, -0.227656, -0.244131, -0.642880 +9213, 0.689404, -0.227656, -0.244131, -0.642880 +9214, 0.689404, -0.227656, -0.244131, -0.642880 +9215, 0.689404, -0.227656, -0.244131, -0.642880 +9216, 0.689404, -0.227656, -0.244131, -0.642880 +9217, 0.689404, -0.227656, -0.244131, -0.642880 +9218, 0.689404, -0.227656, -0.244131, -0.642880 +9219, 0.689404, -0.227656, -0.244131, -0.642880 +9220, 0.689404, -0.227656, -0.244131, -0.642880 +9221, 0.689404, -0.227656, -0.244131, -0.642880 +9222, 0.689404, -0.227656, -0.244131, -0.642880 +9223, 0.689404, -0.227656, -0.244131, -0.642880 +9224, 0.689404, -0.227656, -0.244131, -0.642880 +9225, 0.689404, -0.227656, -0.244131, -0.642880 +9226, 0.689404, -0.227656, -0.244131, -0.642880 +9227, 0.689404, -0.227656, -0.244131, -0.642880 +9228, 0.689404, -0.227656, -0.244131, -0.642880 +9229, 0.689404, -0.227656, -0.244131, -0.642880 +9230, 0.689404, -0.227656, -0.244131, -0.642880 +9231, 0.689404, -0.227656, -0.244131, -0.642880 +9232, 0.689404, -0.227656, -0.244131, -0.642880 +9233, 0.689404, -0.227656, -0.244131, -0.642880 +9234, 0.689404, -0.227656, -0.244131, -0.642880 +9235, 0.689404, -0.227656, -0.244131, -0.642880 +9236, 0.689404, -0.227656, -0.244131, -0.642880 +9237, 0.689404, -0.227656, -0.244131, -0.642880 +9238, 0.689404, -0.227656, -0.244131, -0.642880 +9239, 0.689404, -0.227656, -0.244131, -0.642880 +9240, 0.689404, -0.227656, -0.244131, -0.642880 +9241, 0.689404, -0.227656, -0.244131, -0.642880 +9242, 0.689404, -0.227656, -0.244131, -0.642880 +9243, 0.689404, -0.227656, -0.244131, -0.642880 +9244, 0.689404, -0.227656, -0.244131, -0.642880 +9245, 0.689404, -0.227656, -0.244131, -0.642880 +9246, 0.689404, -0.227656, -0.244131, -0.642880 +9247, 0.689404, -0.227656, -0.244131, -0.642880 +9248, 0.689404, -0.227656, -0.244131, -0.642880 +9249, 0.689404, -0.227656, -0.244131, -0.642880 +9250, 0.689404, -0.227656, -0.244131, -0.642880 +9251, 0.689404, -0.227656, -0.244131, -0.642880 +9252, 0.689404, -0.227656, -0.244131, -0.642880 +9253, 0.689404, -0.227656, -0.244131, -0.642880 +9254, 0.689404, -0.227656, -0.244131, -0.642880 +9255, 0.689404, -0.227656, -0.244131, -0.642880 +9256, 0.689404, -0.227656, -0.244131, -0.642880 +9257, 0.689404, -0.227656, -0.244131, -0.642880 +9258, 0.689404, -0.227656, -0.244131, -0.642880 +9259, 0.689404, -0.227656, -0.244131, -0.642880 +9260, 0.689404, -0.227656, -0.244131, -0.642880 +9261, 0.689404, -0.227656, -0.244131, -0.642880 +9262, 0.689404, -0.227656, -0.244131, -0.642880 +9263, 0.689404, -0.227656, -0.244131, -0.642880 +9264, 0.689404, -0.227656, -0.244131, -0.642880 +9265, 0.689404, -0.227656, -0.244131, -0.642880 +9266, 0.689404, -0.227656, -0.244131, -0.642880 +9267, 0.689404, -0.227656, -0.244131, -0.642880 +9268, 0.689404, -0.227656, -0.244131, -0.642880 +9269, 0.689404, -0.227656, -0.244131, -0.642880 +9270, 0.689404, -0.227656, -0.244131, -0.642880 +9271, 0.689404, -0.227656, -0.244131, -0.642880 +9272, 0.689404, -0.227656, -0.244131, -0.642880 +9273, 0.689404, -0.227656, -0.244131, -0.642880 +9274, 0.689404, -0.227656, -0.244131, -0.642880 +9275, 0.689404, -0.227656, -0.244131, -0.642880 +9276, 0.689404, -0.227656, -0.244131, -0.642880 +9277, 0.689404, -0.227656, -0.244131, -0.642880 +9278, 0.689404, -0.227656, -0.244131, -0.642880 +9279, 0.689404, -0.227656, -0.244131, -0.642880 +9280, 0.689404, -0.227656, -0.244131, -0.642880 +9281, 0.689404, -0.227656, -0.244131, -0.642880 +9282, 0.689404, -0.227656, -0.244131, -0.642880 +9283, 0.689404, -0.227656, -0.244131, -0.642880 +9284, 0.689404, -0.227656, -0.244131, -0.642880 +9285, 0.689404, -0.227656, -0.244131, -0.642880 +9286, 0.689404, -0.227656, -0.244131, -0.642880 +9287, 0.689404, -0.227656, -0.244131, -0.642880 +9288, 0.689404, -0.227656, -0.244131, -0.642880 +9289, 0.689404, -0.227656, -0.244131, -0.642880 +9290, 0.689404, -0.227656, -0.244131, -0.642880 +9291, 0.689404, -0.227656, -0.244131, -0.642880 +9292, 0.689404, -0.227656, -0.244131, -0.642880 +9293, 0.689404, -0.227656, -0.244131, -0.642880 +9294, 0.689404, -0.227656, -0.244131, -0.642880 +9295, 0.689404, -0.227656, -0.244131, -0.642880 +9296, 0.689404, -0.227656, -0.244131, -0.642880 +9297, 0.689404, -0.227656, -0.244131, -0.642880 +9298, 0.689404, -0.227656, -0.244131, -0.642880 +9299, 0.689404, -0.227656, -0.244131, -0.642880 +9300, 0.706773, -0.206773, -0.229644, -0.636381 +9301, 0.706773, -0.206773, -0.229644, -0.636381 +9302, 0.706773, -0.206773, -0.229644, -0.636381 +9303, 0.706773, -0.206773, -0.229644, -0.636381 +9304, 0.706773, -0.206773, -0.229644, -0.636381 +9305, 0.706773, -0.206773, -0.229644, -0.636381 +9306, 0.706773, -0.206773, -0.229644, -0.636381 +9307, 0.706773, -0.206773, -0.229644, -0.636381 +9308, 0.706773, -0.206773, -0.229644, -0.636381 +9309, 0.706773, -0.206773, -0.229644, -0.636381 +9310, 0.706773, -0.206773, -0.229644, -0.636381 +9311, 0.706773, -0.206773, -0.229644, -0.636381 +9312, 0.706773, -0.206773, -0.229644, -0.636381 +9313, 0.706773, -0.206773, -0.229644, -0.636381 +9314, 0.706773, -0.206773, -0.229644, -0.636381 +9315, 0.706773, -0.206773, -0.229644, -0.636381 +9316, 0.706773, -0.206773, -0.229644, -0.636381 +9317, 0.706773, -0.206773, -0.229644, -0.636381 +9318, 0.706773, -0.206773, -0.229644, -0.636381 +9319, 0.706773, -0.206773, -0.229644, -0.636381 +9320, 0.706773, -0.206773, -0.229644, -0.636381 +9321, 0.706773, -0.206773, -0.229644, -0.636381 +9322, 0.706773, -0.206773, -0.229644, -0.636381 +9323, 0.706773, -0.206773, -0.229644, -0.636381 +9324, 0.706773, -0.206773, -0.229644, -0.636381 +9325, 0.706773, -0.206773, -0.229644, -0.636381 +9326, 0.706773, -0.206773, -0.229644, -0.636381 +9327, 0.706773, -0.206773, -0.229644, -0.636381 +9328, 0.706773, -0.206773, -0.229644, -0.636381 +9329, 0.706773, -0.206773, -0.229644, -0.636381 +9330, 0.706773, -0.206773, -0.229644, -0.636381 +9331, 0.706773, -0.206773, -0.229644, -0.636381 +9332, 0.706773, -0.206773, -0.229644, -0.636381 +9333, 0.706773, -0.206773, -0.229644, -0.636381 +9334, 0.706773, -0.206773, -0.229644, -0.636381 +9335, 0.706773, -0.206773, -0.229644, -0.636381 +9336, 0.706773, -0.206773, -0.229644, -0.636381 +9337, 0.706773, -0.206773, -0.229644, -0.636381 +9338, 0.706773, -0.206773, -0.229644, -0.636381 +9339, 0.706773, -0.206773, -0.229644, -0.636381 +9340, 0.706773, -0.206773, -0.229644, -0.636381 +9341, 0.706773, -0.206773, -0.229644, -0.636381 +9342, 0.706773, -0.206773, -0.229644, -0.636381 +9343, 0.706773, -0.206773, -0.229644, -0.636381 +9344, 0.706773, -0.206773, -0.229644, -0.636381 +9345, 0.706773, -0.206773, -0.229644, -0.636381 +9346, 0.706773, -0.206773, -0.229644, -0.636381 +9347, 0.706773, -0.206773, -0.229644, -0.636381 +9348, 0.706773, -0.206773, -0.229644, -0.636381 +9349, 0.706773, -0.206773, -0.229644, -0.636381 +9350, 0.706773, -0.206773, -0.229644, -0.636381 +9351, 0.706773, -0.206773, -0.229644, -0.636381 +9352, 0.706773, -0.206773, -0.229644, -0.636381 +9353, 0.706773, -0.206773, -0.229644, -0.636381 +9354, 0.706773, -0.206773, -0.229644, -0.636381 +9355, 0.706773, -0.206773, -0.229644, -0.636381 +9356, 0.706773, -0.206773, -0.229644, -0.636381 +9357, 0.706773, -0.206773, -0.229644, -0.636381 +9358, 0.706773, -0.206773, -0.229644, -0.636381 +9359, 0.706773, -0.206773, -0.229644, -0.636381 +9360, 0.706773, -0.206773, -0.229644, -0.636381 +9361, 0.706773, -0.206773, -0.229644, -0.636381 +9362, 0.706773, -0.206773, -0.229644, -0.636381 +9363, 0.706773, -0.206773, -0.229644, -0.636381 +9364, 0.706773, -0.206773, -0.229644, -0.636381 +9365, 0.706773, -0.206773, -0.229644, -0.636381 +9366, 0.706773, -0.206773, -0.229644, -0.636381 +9367, 0.706773, -0.206773, -0.229644, -0.636381 +9368, 0.706773, -0.206773, -0.229644, -0.636381 +9369, 0.706773, -0.206773, -0.229644, -0.636381 +9370, 0.706773, -0.206773, -0.229644, -0.636381 +9371, 0.706773, -0.206773, -0.229644, -0.636381 +9372, 0.706773, -0.206773, -0.229644, -0.636381 +9373, 0.706773, -0.206773, -0.229644, -0.636381 +9374, 0.706773, -0.206773, -0.229644, -0.636381 +9375, 0.706773, -0.206773, -0.229644, -0.636381 +9376, 0.706773, -0.206773, -0.229644, -0.636381 +9377, 0.706773, -0.206773, -0.229644, -0.636381 +9378, 0.706773, -0.206773, -0.229644, -0.636381 +9379, 0.706773, -0.206773, -0.229644, -0.636381 +9380, 0.706773, -0.206773, -0.229644, -0.636381 +9381, 0.706773, -0.206773, -0.229644, -0.636381 +9382, 0.706773, -0.206773, -0.229644, -0.636381 +9383, 0.706773, -0.206773, -0.229644, -0.636381 +9384, 0.706773, -0.206773, -0.229644, -0.636381 +9385, 0.706773, -0.206773, -0.229644, -0.636381 +9386, 0.706773, -0.206773, -0.229644, -0.636381 +9387, 0.706773, -0.206773, -0.229644, -0.636381 +9388, 0.706773, -0.206773, -0.229644, -0.636381 +9389, 0.706773, -0.206773, -0.229644, -0.636381 +9390, 0.706773, -0.206773, -0.229644, -0.636381 +9391, 0.706773, -0.206773, -0.229644, -0.636381 +9392, 0.706773, -0.206773, -0.229644, -0.636381 +9393, 0.706773, -0.206773, -0.229644, -0.636381 +9394, 0.706773, -0.206773, -0.229644, -0.636381 +9395, 0.706773, -0.206773, -0.229644, -0.636381 +9396, 0.706773, -0.206773, -0.229644, -0.636381 +9397, 0.706773, -0.206773, -0.229644, -0.636381 +9398, 0.706773, -0.206773, -0.229644, -0.636381 +9399, 0.706773, -0.206773, -0.229644, -0.636381 +9400, 0.723630, -0.186331, -0.214349, -0.629042 +9401, 0.723630, -0.186331, -0.214349, -0.629042 +9402, 0.723630, -0.186331, -0.214349, -0.629042 +9403, 0.723630, -0.186331, -0.214349, -0.629042 +9404, 0.723630, -0.186331, -0.214349, -0.629042 +9405, 0.723630, -0.186331, -0.214349, -0.629042 +9406, 0.723630, -0.186331, -0.214349, -0.629042 +9407, 0.723630, -0.186331, -0.214349, -0.629042 +9408, 0.723630, -0.186331, -0.214349, -0.629042 +9409, 0.723630, -0.186331, -0.214349, -0.629042 +9410, 0.723630, -0.186331, -0.214349, -0.629042 +9411, 0.723630, -0.186331, -0.214349, -0.629042 +9412, 0.723630, -0.186331, -0.214349, -0.629042 +9413, 0.723630, -0.186331, -0.214349, -0.629042 +9414, 0.723630, -0.186331, -0.214349, -0.629042 +9415, 0.723630, -0.186331, -0.214349, -0.629042 +9416, 0.723630, -0.186331, -0.214349, -0.629042 +9417, 0.723630, -0.186331, -0.214349, -0.629042 +9418, 0.723630, -0.186331, -0.214349, -0.629042 +9419, 0.723630, -0.186331, -0.214349, -0.629042 +9420, 0.723630, -0.186331, -0.214349, -0.629042 +9421, 0.723630, -0.186331, -0.214349, -0.629042 +9422, 0.723630, -0.186331, -0.214349, -0.629042 +9423, 0.723630, -0.186331, -0.214349, -0.629042 +9424, 0.723630, -0.186331, -0.214349, -0.629042 +9425, 0.723630, -0.186331, -0.214349, -0.629042 +9426, 0.723630, -0.186331, -0.214349, -0.629042 +9427, 0.723630, -0.186331, -0.214349, -0.629042 +9428, 0.723630, -0.186331, -0.214349, -0.629042 +9429, 0.723630, -0.186331, -0.214349, -0.629042 +9430, 0.723630, -0.186331, -0.214349, -0.629042 +9431, 0.723630, -0.186331, -0.214349, -0.629042 +9432, 0.723630, -0.186331, -0.214349, -0.629042 +9433, 0.723630, -0.186331, -0.214349, -0.629042 +9434, 0.723630, -0.186331, -0.214349, -0.629042 +9435, 0.723630, -0.186331, -0.214349, -0.629042 +9436, 0.723630, -0.186331, -0.214349, -0.629042 +9437, 0.723630, -0.186331, -0.214349, -0.629042 +9438, 0.723630, -0.186331, -0.214349, -0.629042 +9439, 0.723630, -0.186331, -0.214349, -0.629042 +9440, 0.723630, -0.186331, -0.214349, -0.629042 +9441, 0.723630, -0.186331, -0.214349, -0.629042 +9442, 0.723630, -0.186331, -0.214349, -0.629042 +9443, 0.723630, -0.186331, -0.214349, -0.629042 +9444, 0.723630, -0.186331, -0.214349, -0.629042 +9445, 0.723630, -0.186331, -0.214349, -0.629042 +9446, 0.723630, -0.186331, -0.214349, -0.629042 +9447, 0.723630, -0.186331, -0.214349, -0.629042 +9448, 0.723630, -0.186331, -0.214349, -0.629042 +9449, 0.723630, -0.186331, -0.214349, -0.629042 +9450, 0.723630, -0.186331, -0.214349, -0.629042 +9451, 0.723630, -0.186331, -0.214349, -0.629042 +9452, 0.723630, -0.186331, -0.214349, -0.629042 +9453, 0.723630, -0.186331, -0.214349, -0.629042 +9454, 0.723630, -0.186331, -0.214349, -0.629042 +9455, 0.723630, -0.186331, -0.214349, -0.629042 +9456, 0.723630, -0.186331, -0.214349, -0.629042 +9457, 0.723630, -0.186331, -0.214349, -0.629042 +9458, 0.723630, -0.186331, -0.214349, -0.629042 +9459, 0.723630, -0.186331, -0.214349, -0.629042 +9460, 0.723630, -0.186331, -0.214349, -0.629042 +9461, 0.723630, -0.186331, -0.214349, -0.629042 +9462, 0.723630, -0.186331, -0.214349, -0.629042 +9463, 0.723630, -0.186331, -0.214349, -0.629042 +9464, 0.723630, -0.186331, -0.214349, -0.629042 +9465, 0.723630, -0.186331, -0.214349, -0.629042 +9466, 0.723630, -0.186331, -0.214349, -0.629042 +9467, 0.723630, -0.186331, -0.214349, -0.629042 +9468, 0.723630, -0.186331, -0.214349, -0.629042 +9469, 0.723630, -0.186331, -0.214349, -0.629042 +9470, 0.723630, -0.186331, -0.214349, -0.629042 +9471, 0.723630, -0.186331, -0.214349, -0.629042 +9472, 0.723630, -0.186331, -0.214349, -0.629042 +9473, 0.723630, -0.186331, -0.214349, -0.629042 +9474, 0.723630, -0.186331, -0.214349, -0.629042 +9475, 0.723630, -0.186331, -0.214349, -0.629042 +9476, 0.723630, -0.186331, -0.214349, -0.629042 +9477, 0.723630, -0.186331, -0.214349, -0.629042 +9478, 0.723630, -0.186331, -0.214349, -0.629042 +9479, 0.723630, -0.186331, -0.214349, -0.629042 +9480, 0.723630, -0.186331, -0.214349, -0.629042 +9481, 0.723630, -0.186331, -0.214349, -0.629042 +9482, 0.723630, -0.186331, -0.214349, -0.629042 +9483, 0.723630, -0.186331, -0.214349, -0.629042 +9484, 0.723630, -0.186331, -0.214349, -0.629042 +9485, 0.723630, -0.186331, -0.214349, -0.629042 +9486, 0.723630, -0.186331, -0.214349, -0.629042 +9487, 0.723630, -0.186331, -0.214349, -0.629042 +9488, 0.723630, -0.186331, -0.214349, -0.629042 +9489, 0.723630, -0.186331, -0.214349, -0.629042 +9490, 0.723630, -0.186331, -0.214349, -0.629042 +9491, 0.723630, -0.186331, -0.214349, -0.629042 +9492, 0.723630, -0.186331, -0.214349, -0.629042 +9493, 0.723630, -0.186331, -0.214349, -0.629042 +9494, 0.723630, -0.186331, -0.214349, -0.629042 +9495, 0.723630, -0.186331, -0.214349, -0.629042 +9496, 0.723630, -0.186331, -0.214349, -0.629042 +9497, 0.723630, -0.186331, -0.214349, -0.629042 +9498, 0.723630, -0.186331, -0.214349, -0.629042 +9499, 0.723630, -0.186331, -0.214349, -0.629042 +9500, 0.739942, -0.166366, -0.198267, -0.620885 +9501, 0.739942, -0.166366, -0.198267, -0.620885 +9502, 0.739942, -0.166366, -0.198267, -0.620885 +9503, 0.739942, -0.166366, -0.198267, -0.620885 +9504, 0.739942, -0.166366, -0.198267, -0.620885 +9505, 0.739942, -0.166366, -0.198267, -0.620885 +9506, 0.739942, -0.166366, -0.198267, -0.620885 +9507, 0.739942, -0.166366, -0.198267, -0.620885 +9508, 0.739942, -0.166366, -0.198267, -0.620885 +9509, 0.739942, -0.166366, -0.198267, -0.620885 +9510, 0.739942, -0.166366, -0.198267, -0.620885 +9511, 0.739942, -0.166366, -0.198267, -0.620885 +9512, 0.739942, -0.166366, -0.198267, -0.620885 +9513, 0.739942, -0.166366, -0.198267, -0.620885 +9514, 0.739942, -0.166366, -0.198267, -0.620885 +9515, 0.739942, -0.166366, -0.198267, -0.620885 +9516, 0.739942, -0.166366, -0.198267, -0.620885 +9517, 0.739942, -0.166366, -0.198267, -0.620885 +9518, 0.739942, -0.166366, -0.198267, -0.620885 +9519, 0.739942, -0.166366, -0.198267, -0.620885 +9520, 0.739942, -0.166366, -0.198267, -0.620885 +9521, 0.739942, -0.166366, -0.198267, -0.620885 +9522, 0.739942, -0.166366, -0.198267, -0.620885 +9523, 0.739942, -0.166366, -0.198267, -0.620885 +9524, 0.739942, -0.166366, -0.198267, -0.620885 +9525, 0.739942, -0.166366, -0.198267, -0.620885 +9526, 0.739942, -0.166366, -0.198267, -0.620885 +9527, 0.739942, -0.166366, -0.198267, -0.620885 +9528, 0.739942, -0.166366, -0.198267, -0.620885 +9529, 0.739942, -0.166366, -0.198267, -0.620885 +9530, 0.739942, -0.166366, -0.198267, -0.620885 +9531, 0.739942, -0.166366, -0.198267, -0.620885 +9532, 0.739942, -0.166366, -0.198267, -0.620885 +9533, 0.739942, -0.166366, -0.198267, -0.620885 +9534, 0.739942, -0.166366, -0.198267, -0.620885 +9535, 0.739942, -0.166366, -0.198267, -0.620885 +9536, 0.739942, -0.166366, -0.198267, -0.620885 +9537, 0.739942, -0.166366, -0.198267, -0.620885 +9538, 0.739942, -0.166366, -0.198267, -0.620885 +9539, 0.739942, -0.166366, -0.198267, -0.620885 +9540, 0.739942, -0.166366, -0.198267, -0.620885 +9541, 0.739942, -0.166366, -0.198267, -0.620885 +9542, 0.739942, -0.166366, -0.198267, -0.620885 +9543, 0.739942, -0.166366, -0.198267, -0.620885 +9544, 0.739942, -0.166366, -0.198267, -0.620885 +9545, 0.739942, -0.166366, -0.198267, -0.620885 +9546, 0.739942, -0.166366, -0.198267, -0.620885 +9547, 0.739942, -0.166366, -0.198267, -0.620885 +9548, 0.739942, -0.166366, -0.198267, -0.620885 +9549, 0.739942, -0.166366, -0.198267, -0.620885 +9550, 0.739942, -0.166366, -0.198267, -0.620885 +9551, 0.739942, -0.166366, -0.198267, -0.620885 +9552, 0.739942, -0.166366, -0.198267, -0.620885 +9553, 0.739942, -0.166366, -0.198267, -0.620885 +9554, 0.739942, -0.166366, -0.198267, -0.620885 +9555, 0.739942, -0.166366, -0.198267, -0.620885 +9556, 0.739942, -0.166366, -0.198267, -0.620885 +9557, 0.739942, -0.166366, -0.198267, -0.620885 +9558, 0.739942, -0.166366, -0.198267, -0.620885 +9559, 0.739942, -0.166366, -0.198267, -0.620885 +9560, 0.739942, -0.166366, -0.198267, -0.620885 +9561, 0.739942, -0.166366, -0.198267, -0.620885 +9562, 0.739942, -0.166366, -0.198267, -0.620885 +9563, 0.739942, -0.166366, -0.198267, -0.620885 +9564, 0.739942, -0.166366, -0.198267, -0.620885 +9565, 0.739942, -0.166366, -0.198267, -0.620885 +9566, 0.739942, -0.166366, -0.198267, -0.620885 +9567, 0.739942, -0.166366, -0.198267, -0.620885 +9568, 0.739942, -0.166366, -0.198267, -0.620885 +9569, 0.739942, -0.166366, -0.198267, -0.620885 +9570, 0.739942, -0.166366, -0.198267, -0.620885 +9571, 0.739942, -0.166366, -0.198267, -0.620885 +9572, 0.739942, -0.166366, -0.198267, -0.620885 +9573, 0.739942, -0.166366, -0.198267, -0.620885 +9574, 0.739942, -0.166366, -0.198267, -0.620885 +9575, 0.739942, -0.166366, -0.198267, -0.620885 +9576, 0.739942, -0.166366, -0.198267, -0.620885 +9577, 0.739942, -0.166366, -0.198267, -0.620885 +9578, 0.739942, -0.166366, -0.198267, -0.620885 +9579, 0.739942, -0.166366, -0.198267, -0.620885 +9580, 0.739942, -0.166366, -0.198267, -0.620885 +9581, 0.739942, -0.166366, -0.198267, -0.620885 +9582, 0.739942, -0.166366, -0.198267, -0.620885 +9583, 0.739942, -0.166366, -0.198267, -0.620885 +9584, 0.739942, -0.166366, -0.198267, -0.620885 +9585, 0.739942, -0.166366, -0.198267, -0.620885 +9586, 0.739942, -0.166366, -0.198267, -0.620885 +9587, 0.739942, -0.166366, -0.198267, -0.620885 +9588, 0.739942, -0.166366, -0.198267, -0.620885 +9589, 0.739942, -0.166366, -0.198267, -0.620885 +9590, 0.739942, -0.166366, -0.198267, -0.620885 +9591, 0.739942, -0.166366, -0.198267, -0.620885 +9592, 0.739942, -0.166366, -0.198267, -0.620885 +9593, 0.739942, -0.166366, -0.198267, -0.620885 +9594, 0.739942, -0.166366, -0.198267, -0.620885 +9595, 0.739942, -0.166366, -0.198267, -0.620885 +9596, 0.739942, -0.166366, -0.198267, -0.620885 +9597, 0.739942, -0.166366, -0.198267, -0.620885 +9598, 0.739942, -0.166366, -0.198267, -0.620885 +9599, 0.739942, -0.166366, -0.198267, -0.620885 +9600, 0.755673, -0.146912, -0.181421, -0.611932 +9601, 0.755673, -0.146912, -0.181421, -0.611932 +9602, 0.755673, -0.146912, -0.181421, -0.611932 +9603, 0.755673, -0.146912, -0.181421, -0.611932 +9604, 0.755673, -0.146912, -0.181421, -0.611932 +9605, 0.755673, -0.146912, -0.181421, -0.611932 +9606, 0.755673, -0.146912, -0.181421, -0.611932 +9607, 0.755673, -0.146912, -0.181421, -0.611932 +9608, 0.755673, -0.146912, -0.181421, -0.611932 +9609, 0.755673, -0.146912, -0.181421, -0.611932 +9610, 0.755673, -0.146912, -0.181421, -0.611932 +9611, 0.755673, -0.146912, -0.181421, -0.611932 +9612, 0.755673, -0.146912, -0.181421, -0.611932 +9613, 0.755673, -0.146912, -0.181421, -0.611932 +9614, 0.755673, -0.146912, -0.181421, -0.611932 +9615, 0.755673, -0.146912, -0.181421, -0.611932 +9616, 0.755673, -0.146912, -0.181421, -0.611932 +9617, 0.755673, -0.146912, -0.181421, -0.611932 +9618, 0.755673, -0.146912, -0.181421, -0.611932 +9619, 0.755673, -0.146912, -0.181421, -0.611932 +9620, 0.755673, -0.146912, -0.181421, -0.611932 +9621, 0.755673, -0.146912, -0.181421, -0.611932 +9622, 0.755673, -0.146912, -0.181421, -0.611932 +9623, 0.755673, -0.146912, -0.181421, -0.611932 +9624, 0.755673, -0.146912, -0.181421, -0.611932 +9625, 0.755673, -0.146912, -0.181421, -0.611932 +9626, 0.755673, -0.146912, -0.181421, -0.611932 +9627, 0.755673, -0.146912, -0.181421, -0.611932 +9628, 0.755673, -0.146912, -0.181421, -0.611932 +9629, 0.755673, -0.146912, -0.181421, -0.611932 +9630, 0.755673, -0.146912, -0.181421, -0.611932 +9631, 0.755673, -0.146912, -0.181421, -0.611932 +9632, 0.755673, -0.146912, -0.181421, -0.611932 +9633, 0.755673, -0.146912, -0.181421, -0.611932 +9634, 0.755673, -0.146912, -0.181421, -0.611932 +9635, 0.755673, -0.146912, -0.181421, -0.611932 +9636, 0.755673, -0.146912, -0.181421, -0.611932 +9637, 0.755673, -0.146912, -0.181421, -0.611932 +9638, 0.755673, -0.146912, -0.181421, -0.611932 +9639, 0.755673, -0.146912, -0.181421, -0.611932 +9640, 0.755673, -0.146912, -0.181421, -0.611932 +9641, 0.755673, -0.146912, -0.181421, -0.611932 +9642, 0.755673, -0.146912, -0.181421, -0.611932 +9643, 0.755673, -0.146912, -0.181421, -0.611932 +9644, 0.755673, -0.146912, -0.181421, -0.611932 +9645, 0.755673, -0.146912, -0.181421, -0.611932 +9646, 0.755673, -0.146912, -0.181421, -0.611932 +9647, 0.755673, -0.146912, -0.181421, -0.611932 +9648, 0.755673, -0.146912, -0.181421, -0.611932 +9649, 0.755673, -0.146912, -0.181421, -0.611932 +9650, 0.755673, -0.146912, -0.181421, -0.611932 +9651, 0.755673, -0.146912, -0.181421, -0.611932 +9652, 0.755673, -0.146912, -0.181421, -0.611932 +9653, 0.755673, -0.146912, -0.181421, -0.611932 +9654, 0.755673, -0.146912, -0.181421, -0.611932 +9655, 0.755673, -0.146912, -0.181421, -0.611932 +9656, 0.755673, -0.146912, -0.181421, -0.611932 +9657, 0.755673, -0.146912, -0.181421, -0.611932 +9658, 0.755673, -0.146912, -0.181421, -0.611932 +9659, 0.755673, -0.146912, -0.181421, -0.611932 +9660, 0.755673, -0.146912, -0.181421, -0.611932 +9661, 0.755673, -0.146912, -0.181421, -0.611932 +9662, 0.755673, -0.146912, -0.181421, -0.611932 +9663, 0.755673, -0.146912, -0.181421, -0.611932 +9664, 0.755673, -0.146912, -0.181421, -0.611932 +9665, 0.755673, -0.146912, -0.181421, -0.611932 +9666, 0.755673, -0.146912, -0.181421, -0.611932 +9667, 0.755673, -0.146912, -0.181421, -0.611932 +9668, 0.755673, -0.146912, -0.181421, -0.611932 +9669, 0.755673, -0.146912, -0.181421, -0.611932 +9670, 0.755673, -0.146912, -0.181421, -0.611932 +9671, 0.755673, -0.146912, -0.181421, -0.611932 +9672, 0.755673, -0.146912, -0.181421, -0.611932 +9673, 0.755673, -0.146912, -0.181421, -0.611932 +9674, 0.755673, -0.146912, -0.181421, -0.611932 +9675, 0.755673, -0.146912, -0.181421, -0.611932 +9676, 0.755673, -0.146912, -0.181421, -0.611932 +9677, 0.755673, -0.146912, -0.181421, -0.611932 +9678, 0.755673, -0.146912, -0.181421, -0.611932 +9679, 0.755673, -0.146912, -0.181421, -0.611932 +9680, 0.755673, -0.146912, -0.181421, -0.611932 +9681, 0.755673, -0.146912, -0.181421, -0.611932 +9682, 0.755673, -0.146912, -0.181421, -0.611932 +9683, 0.755673, -0.146912, -0.181421, -0.611932 +9684, 0.755673, -0.146912, -0.181421, -0.611932 +9685, 0.755673, -0.146912, -0.181421, -0.611932 +9686, 0.755673, -0.146912, -0.181421, -0.611932 +9687, 0.755673, -0.146912, -0.181421, -0.611932 +9688, 0.755673, -0.146912, -0.181421, -0.611932 +9689, 0.755673, -0.146912, -0.181421, -0.611932 +9690, 0.755673, -0.146912, -0.181421, -0.611932 +9691, 0.755673, -0.146912, -0.181421, -0.611932 +9692, 0.755673, -0.146912, -0.181421, -0.611932 +9693, 0.755673, -0.146912, -0.181421, -0.611932 +9694, 0.755673, -0.146912, -0.181421, -0.611932 +9695, 0.755673, -0.146912, -0.181421, -0.611932 +9696, 0.755673, -0.146912, -0.181421, -0.611932 +9697, 0.755673, -0.146912, -0.181421, -0.611932 +9698, 0.755673, -0.146912, -0.181421, -0.611932 +9699, 0.755673, -0.146912, -0.181421, -0.611932 +9700, 0.770791, -0.128003, -0.163837, -0.602208 +9701, 0.770791, -0.128003, -0.163837, -0.602208 +9702, 0.770791, -0.128003, -0.163837, -0.602208 +9703, 0.770791, -0.128003, -0.163837, -0.602208 +9704, 0.770791, -0.128003, -0.163837, -0.602208 +9705, 0.770791, -0.128003, -0.163837, -0.602208 +9706, 0.770791, -0.128003, -0.163837, -0.602208 +9707, 0.770791, -0.128003, -0.163837, -0.602208 +9708, 0.770791, -0.128003, -0.163837, -0.602208 +9709, 0.770791, -0.128003, -0.163837, -0.602208 +9710, 0.770791, -0.128003, -0.163837, -0.602208 +9711, 0.770791, -0.128003, -0.163837, -0.602208 +9712, 0.770791, -0.128003, -0.163837, -0.602208 +9713, 0.770791, -0.128003, -0.163837, -0.602208 +9714, 0.770791, -0.128003, -0.163837, -0.602208 +9715, 0.770791, -0.128003, -0.163837, -0.602208 +9716, 0.770791, -0.128003, -0.163837, -0.602208 +9717, 0.770791, -0.128003, -0.163837, -0.602208 +9718, 0.770791, -0.128003, -0.163837, -0.602208 +9719, 0.770791, -0.128003, -0.163837, -0.602208 +9720, 0.770791, -0.128003, -0.163837, -0.602208 +9721, 0.770791, -0.128003, -0.163837, -0.602208 +9722, 0.770791, -0.128003, -0.163837, -0.602208 +9723, 0.770791, -0.128003, -0.163837, -0.602208 +9724, 0.770791, -0.128003, -0.163837, -0.602208 +9725, 0.770791, -0.128003, -0.163837, -0.602208 +9726, 0.770791, -0.128003, -0.163837, -0.602208 +9727, 0.770791, -0.128003, -0.163837, -0.602208 +9728, 0.770791, -0.128003, -0.163837, -0.602208 +9729, 0.770791, -0.128003, -0.163837, -0.602208 +9730, 0.770791, -0.128003, -0.163837, -0.602208 +9731, 0.770791, -0.128003, -0.163837, -0.602208 +9732, 0.770791, -0.128003, -0.163837, -0.602208 +9733, 0.770791, -0.128003, -0.163837, -0.602208 +9734, 0.770791, -0.128003, -0.163837, -0.602208 +9735, 0.770791, -0.128003, -0.163837, -0.602208 +9736, 0.770791, -0.128003, -0.163837, -0.602208 +9737, 0.770791, -0.128003, -0.163837, -0.602208 +9738, 0.770791, -0.128003, -0.163837, -0.602208 +9739, 0.770791, -0.128003, -0.163837, -0.602208 +9740, 0.770791, -0.128003, -0.163837, -0.602208 +9741, 0.770791, -0.128003, -0.163837, -0.602208 +9742, 0.770791, -0.128003, -0.163837, -0.602208 +9743, 0.770791, -0.128003, -0.163837, -0.602208 +9744, 0.770791, -0.128003, -0.163837, -0.602208 +9745, 0.770791, -0.128003, -0.163837, -0.602208 +9746, 0.770791, -0.128003, -0.163837, -0.602208 +9747, 0.770791, -0.128003, -0.163837, -0.602208 +9748, 0.770791, -0.128003, -0.163837, -0.602208 +9749, 0.770791, -0.128003, -0.163837, -0.602208 +9750, 0.770791, -0.128003, -0.163837, -0.602208 +9751, 0.770791, -0.128003, -0.163837, -0.602208 +9752, 0.770791, -0.128003, -0.163837, -0.602208 +9753, 0.770791, -0.128003, -0.163837, -0.602208 +9754, 0.770791, -0.128003, -0.163837, -0.602208 +9755, 0.770791, -0.128003, -0.163837, -0.602208 +9756, 0.770791, -0.128003, -0.163837, -0.602208 +9757, 0.770791, -0.128003, -0.163837, -0.602208 +9758, 0.770791, -0.128003, -0.163837, -0.602208 +9759, 0.770791, -0.128003, -0.163837, -0.602208 +9760, 0.770791, -0.128003, -0.163837, -0.602208 +9761, 0.770791, -0.128003, -0.163837, -0.602208 +9762, 0.770791, -0.128003, -0.163837, -0.602208 +9763, 0.770791, -0.128003, -0.163837, -0.602208 +9764, 0.770791, -0.128003, -0.163837, -0.602208 +9765, 0.770791, -0.128003, -0.163837, -0.602208 +9766, 0.770791, -0.128003, -0.163837, -0.602208 +9767, 0.770791, -0.128003, -0.163837, -0.602208 +9768, 0.770791, -0.128003, -0.163837, -0.602208 +9769, 0.770791, -0.128003, -0.163837, -0.602208 +9770, 0.770791, -0.128003, -0.163837, -0.602208 +9771, 0.770791, -0.128003, -0.163837, -0.602208 +9772, 0.770791, -0.128003, -0.163837, -0.602208 +9773, 0.770791, -0.128003, -0.163837, -0.602208 +9774, 0.770791, -0.128003, -0.163837, -0.602208 +9775, 0.770791, -0.128003, -0.163837, -0.602208 +9776, 0.770791, -0.128003, -0.163837, -0.602208 +9777, 0.770791, -0.128003, -0.163837, -0.602208 +9778, 0.770791, -0.128003, -0.163837, -0.602208 +9779, 0.770791, -0.128003, -0.163837, -0.602208 +9780, 0.770791, -0.128003, -0.163837, -0.602208 +9781, 0.770791, -0.128003, -0.163837, -0.602208 +9782, 0.770791, -0.128003, -0.163837, -0.602208 +9783, 0.770791, -0.128003, -0.163837, -0.602208 +9784, 0.770791, -0.128003, -0.163837, -0.602208 +9785, 0.770791, -0.128003, -0.163837, -0.602208 +9786, 0.770791, -0.128003, -0.163837, -0.602208 +9787, 0.770791, -0.128003, -0.163837, -0.602208 +9788, 0.770791, -0.128003, -0.163837, -0.602208 +9789, 0.770791, -0.128003, -0.163837, -0.602208 +9790, 0.770791, -0.128003, -0.163837, -0.602208 +9791, 0.770791, -0.128003, -0.163837, -0.602208 +9792, 0.770791, -0.128003, -0.163837, -0.602208 +9793, 0.770791, -0.128003, -0.163837, -0.602208 +9794, 0.770791, -0.128003, -0.163837, -0.602208 +9795, 0.770791, -0.128003, -0.163837, -0.602208 +9796, 0.770791, -0.128003, -0.163837, -0.602208 +9797, 0.770791, -0.128003, -0.163837, -0.602208 +9798, 0.770791, -0.128003, -0.163837, -0.602208 +9799, 0.770791, -0.128003, -0.163837, -0.602208 +9800, 0.785262, -0.109672, -0.145540, -0.591738 +9801, 0.785262, -0.109672, -0.145540, -0.591738 +9802, 0.785262, -0.109672, -0.145540, -0.591738 +9803, 0.785262, -0.109672, -0.145540, -0.591738 +9804, 0.785262, -0.109672, -0.145540, -0.591738 +9805, 0.785262, -0.109672, -0.145540, -0.591738 +9806, 0.785262, -0.109672, -0.145540, -0.591738 +9807, 0.785262, -0.109672, -0.145540, -0.591738 +9808, 0.785262, -0.109672, -0.145540, -0.591738 +9809, 0.785262, -0.109672, -0.145540, -0.591738 +9810, 0.785262, -0.109672, -0.145540, -0.591738 +9811, 0.785262, -0.109672, -0.145540, -0.591738 +9812, 0.785262, -0.109672, -0.145540, -0.591738 +9813, 0.785262, -0.109672, -0.145540, -0.591738 +9814, 0.785262, -0.109672, -0.145540, -0.591738 +9815, 0.785262, -0.109672, -0.145540, -0.591738 +9816, 0.785262, -0.109672, -0.145540, -0.591738 +9817, 0.785262, -0.109672, -0.145540, -0.591738 +9818, 0.785262, -0.109672, -0.145540, -0.591738 +9819, 0.785262, -0.109672, -0.145540, -0.591738 +9820, 0.785262, -0.109672, -0.145540, -0.591738 +9821, 0.785262, -0.109672, -0.145540, -0.591738 +9822, 0.785262, -0.109672, -0.145540, -0.591738 +9823, 0.785262, -0.109672, -0.145540, -0.591738 +9824, 0.785262, -0.109672, -0.145540, -0.591738 +9825, 0.785262, -0.109672, -0.145540, -0.591738 +9826, 0.785262, -0.109672, -0.145540, -0.591738 +9827, 0.785262, -0.109672, -0.145540, -0.591738 +9828, 0.785262, -0.109672, -0.145540, -0.591738 +9829, 0.785262, -0.109672, -0.145540, -0.591738 +9830, 0.785262, -0.109672, -0.145540, -0.591738 +9831, 0.785262, -0.109672, -0.145540, -0.591738 +9832, 0.785262, -0.109672, -0.145540, -0.591738 +9833, 0.785262, -0.109672, -0.145540, -0.591738 +9834, 0.785262, -0.109672, -0.145540, -0.591738 +9835, 0.785262, -0.109672, -0.145540, -0.591738 +9836, 0.785262, -0.109672, -0.145540, -0.591738 +9837, 0.785262, -0.109672, -0.145540, -0.591738 +9838, 0.785262, -0.109672, -0.145540, -0.591738 +9839, 0.785262, -0.109672, -0.145540, -0.591738 +9840, 0.785262, -0.109672, -0.145540, -0.591738 +9841, 0.785262, -0.109672, -0.145540, -0.591738 +9842, 0.785262, -0.109672, -0.145540, -0.591738 +9843, 0.785262, -0.109672, -0.145540, -0.591738 +9844, 0.785262, -0.109672, -0.145540, -0.591738 +9845, 0.785262, -0.109672, -0.145540, -0.591738 +9846, 0.785262, -0.109672, -0.145540, -0.591738 +9847, 0.785262, -0.109672, -0.145540, -0.591738 +9848, 0.785262, -0.109672, -0.145540, -0.591738 +9849, 0.785262, -0.109672, -0.145540, -0.591738 +9850, 0.785262, -0.109672, -0.145540, -0.591738 +9851, 0.785262, -0.109672, -0.145540, -0.591738 +9852, 0.785262, -0.109672, -0.145540, -0.591738 +9853, 0.785262, -0.109672, -0.145540, -0.591738 +9854, 0.785262, -0.109672, -0.145540, -0.591738 +9855, 0.785262, -0.109672, -0.145540, -0.591738 +9856, 0.785262, -0.109672, -0.145540, -0.591738 +9857, 0.785262, -0.109672, -0.145540, -0.591738 +9858, 0.785262, -0.109672, -0.145540, -0.591738 +9859, 0.785262, -0.109672, -0.145540, -0.591738 +9860, 0.785262, -0.109672, -0.145540, -0.591738 +9861, 0.785262, -0.109672, -0.145540, -0.591738 +9862, 0.785262, -0.109672, -0.145540, -0.591738 +9863, 0.785262, -0.109672, -0.145540, -0.591738 +9864, 0.785262, -0.109672, -0.145540, -0.591738 +9865, 0.785262, -0.109672, -0.145540, -0.591738 +9866, 0.785262, -0.109672, -0.145540, -0.591738 +9867, 0.785262, -0.109672, -0.145540, -0.591738 +9868, 0.785262, -0.109672, -0.145540, -0.591738 +9869, 0.785262, -0.109672, -0.145540, -0.591738 +9870, 0.785262, -0.109672, -0.145540, -0.591738 +9871, 0.785262, -0.109672, -0.145540, -0.591738 +9872, 0.785262, -0.109672, -0.145540, -0.591738 +9873, 0.785262, -0.109672, -0.145540, -0.591738 +9874, 0.785262, -0.109672, -0.145540, -0.591738 +9875, 0.785262, -0.109672, -0.145540, -0.591738 +9876, 0.785262, -0.109672, -0.145540, -0.591738 +9877, 0.785262, -0.109672, -0.145540, -0.591738 +9878, 0.785262, -0.109672, -0.145540, -0.591738 +9879, 0.785262, -0.109672, -0.145540, -0.591738 +9880, 0.785262, -0.109672, -0.145540, -0.591738 +9881, 0.785262, -0.109672, -0.145540, -0.591738 +9882, 0.785262, -0.109672, -0.145540, -0.591738 +9883, 0.785262, -0.109672, -0.145540, -0.591738 +9884, 0.785262, -0.109672, -0.145540, -0.591738 +9885, 0.785262, -0.109672, -0.145540, -0.591738 +9886, 0.785262, -0.109672, -0.145540, -0.591738 +9887, 0.785262, -0.109672, -0.145540, -0.591738 +9888, 0.785262, -0.109672, -0.145540, -0.591738 +9889, 0.785262, -0.109672, -0.145540, -0.591738 +9890, 0.785262, -0.109672, -0.145540, -0.591738 +9891, 0.785262, -0.109672, -0.145540, -0.591738 +9892, 0.785262, -0.109672, -0.145540, -0.591738 +9893, 0.785262, -0.109672, -0.145540, -0.591738 +9894, 0.785262, -0.109672, -0.145540, -0.591738 +9895, 0.785262, -0.109672, -0.145540, -0.591738 +9896, 0.785262, -0.109672, -0.145540, -0.591738 +9897, 0.785262, -0.109672, -0.145540, -0.591738 +9898, 0.785262, -0.109672, -0.145540, -0.591738 +9899, 0.785262, -0.109672, -0.145540, -0.591738 +9900, 0.799057, -0.091950, -0.126558, -0.580549 +9901, 0.799057, -0.091950, -0.126558, -0.580549 +9902, 0.799057, -0.091950, -0.126558, -0.580549 +9903, 0.799057, -0.091950, -0.126558, -0.580549 +9904, 0.799057, -0.091950, -0.126558, -0.580549 +9905, 0.799057, -0.091950, -0.126558, -0.580549 +9906, 0.799057, -0.091950, -0.126558, -0.580549 +9907, 0.799057, -0.091950, -0.126558, -0.580549 +9908, 0.799057, -0.091950, -0.126558, -0.580549 +9909, 0.799057, -0.091950, -0.126558, -0.580549 +9910, 0.799057, -0.091950, -0.126558, -0.580549 +9911, 0.799057, -0.091950, -0.126558, -0.580549 +9912, 0.799057, -0.091950, -0.126558, -0.580549 +9913, 0.799057, -0.091950, -0.126558, -0.580549 +9914, 0.799057, -0.091950, -0.126558, -0.580549 +9915, 0.799057, -0.091950, -0.126558, -0.580549 +9916, 0.799057, -0.091950, -0.126558, -0.580549 +9917, 0.799057, -0.091950, -0.126558, -0.580549 +9918, 0.799057, -0.091950, -0.126558, -0.580549 +9919, 0.799057, -0.091950, -0.126558, -0.580549 +9920, 0.799057, -0.091950, -0.126558, -0.580549 +9921, 0.799057, -0.091950, -0.126558, -0.580549 +9922, 0.799057, -0.091950, -0.126558, -0.580549 +9923, 0.799057, -0.091950, -0.126558, -0.580549 +9924, 0.799057, -0.091950, -0.126558, -0.580549 +9925, 0.799057, -0.091950, -0.126558, -0.580549 +9926, 0.799057, -0.091950, -0.126558, -0.580549 +9927, 0.799057, -0.091950, -0.126558, -0.580549 +9928, 0.799057, -0.091950, -0.126558, -0.580549 +9929, 0.799057, -0.091950, -0.126558, -0.580549 +9930, 0.799057, -0.091950, -0.126558, -0.580549 +9931, 0.799057, -0.091950, -0.126558, -0.580549 +9932, 0.799057, -0.091950, -0.126558, -0.580549 +9933, 0.799057, -0.091950, -0.126558, -0.580549 +9934, 0.799057, -0.091950, -0.126558, -0.580549 +9935, 0.799057, -0.091950, -0.126558, -0.580549 +9936, 0.799057, -0.091950, -0.126558, -0.580549 +9937, 0.799057, -0.091950, -0.126558, -0.580549 +9938, 0.799057, -0.091950, -0.126558, -0.580549 +9939, 0.799057, -0.091950, -0.126558, -0.580549 +9940, 0.799057, -0.091950, -0.126558, -0.580549 +9941, 0.799057, -0.091950, -0.126558, -0.580549 +9942, 0.799057, -0.091950, -0.126558, -0.580549 +9943, 0.799057, -0.091950, -0.126558, -0.580549 +9944, 0.799057, -0.091950, -0.126558, -0.580549 +9945, 0.799057, -0.091950, -0.126558, -0.580549 +9946, 0.799057, -0.091950, -0.126558, -0.580549 +9947, 0.799057, -0.091950, -0.126558, -0.580549 +9948, 0.799057, -0.091950, -0.126558, -0.580549 +9949, 0.799057, -0.091950, -0.126558, -0.580549 +9950, 0.799057, -0.091950, -0.126558, -0.580549 +9951, 0.799057, -0.091950, -0.126558, -0.580549 +9952, 0.799057, -0.091950, -0.126558, -0.580549 +9953, 0.799057, -0.091950, -0.126558, -0.580549 +9954, 0.799057, -0.091950, -0.126558, -0.580549 +9955, 0.799057, -0.091950, -0.126558, -0.580549 +9956, 0.799057, -0.091950, -0.126558, -0.580549 +9957, 0.799057, -0.091950, -0.126558, -0.580549 +9958, 0.799057, -0.091950, -0.126558, -0.580549 +9959, 0.799057, -0.091950, -0.126558, -0.580549 +9960, 0.799057, -0.091950, -0.126558, -0.580549 +9961, 0.799057, -0.091950, -0.126558, -0.580549 +9962, 0.799057, -0.091950, -0.126558, -0.580549 +9963, 0.799057, -0.091950, -0.126558, -0.580549 +9964, 0.799057, -0.091950, -0.126558, -0.580549 +9965, 0.799057, -0.091950, -0.126558, -0.580549 +9966, 0.799057, -0.091950, -0.126558, -0.580549 +9967, 0.799057, -0.091950, -0.126558, -0.580549 +9968, 0.799057, -0.091950, -0.126558, -0.580549 +9969, 0.799057, -0.091950, -0.126558, -0.580549 +9970, 0.799057, -0.091950, -0.126558, -0.580549 +9971, 0.799057, -0.091950, -0.126558, -0.580549 +9972, 0.799057, -0.091950, -0.126558, -0.580549 +9973, 0.799057, -0.091950, -0.126558, -0.580549 +9974, 0.799057, -0.091950, -0.126558, -0.580549 +9975, 0.799057, -0.091950, -0.126558, -0.580549 +9976, 0.799057, -0.091950, -0.126558, -0.580549 +9977, 0.799057, -0.091950, -0.126558, -0.580549 +9978, 0.799057, -0.091950, -0.126558, -0.580549 +9979, 0.799057, -0.091950, -0.126558, -0.580549 +9980, 0.799057, -0.091950, -0.126558, -0.580549 +9981, 0.799057, -0.091950, -0.126558, -0.580549 +9982, 0.799057, -0.091950, -0.126558, -0.580549 +9983, 0.799057, -0.091950, -0.126558, -0.580549 +9984, 0.799057, -0.091950, -0.126558, -0.580549 +9985, 0.799057, -0.091950, -0.126558, -0.580549 +9986, 0.799057, -0.091950, -0.126558, -0.580549 +9987, 0.799057, -0.091950, -0.126558, -0.580549 +9988, 0.799057, -0.091950, -0.126558, -0.580549 +9989, 0.799057, -0.091950, -0.126558, -0.580549 +9990, 0.799057, -0.091950, -0.126558, -0.580549 +9991, 0.799057, -0.091950, -0.126558, -0.580549 +9992, 0.799057, -0.091950, -0.126558, -0.580549 +9993, 0.799057, -0.091950, -0.126558, -0.580549 +9994, 0.799057, -0.091950, -0.126558, -0.580549 +9995, 0.799057, -0.091950, -0.126558, -0.580549 +9996, 0.799057, -0.091950, -0.126558, -0.580549 +9997, 0.799057, -0.091950, -0.126558, -0.580549 +9998, 0.799057, -0.091950, -0.126558, -0.580549 +9999, 0.799057, -0.091950, -0.126558, -0.580549 +10000, 0.812144, -0.074867, -0.106921, -0.568669 +10001, 0.812144, -0.074867, -0.106921, -0.568669 +10002, 0.812144, -0.074867, -0.106921, -0.568669 +10003, 0.812144, -0.074867, -0.106921, -0.568669 +10004, 0.812144, -0.074867, -0.106921, -0.568669 +10005, 0.812144, -0.074867, -0.106921, -0.568669 +10006, 0.812144, -0.074867, -0.106921, -0.568669 +10007, 0.812144, -0.074867, -0.106921, -0.568669 +10008, 0.812144, -0.074867, -0.106921, -0.568669 +10009, 0.812144, -0.074867, -0.106921, -0.568669 +10010, 0.812144, -0.074867, -0.106921, -0.568669 +10011, 0.812144, -0.074867, -0.106921, -0.568669 +10012, 0.812144, -0.074867, -0.106921, -0.568669 +10013, 0.812144, -0.074867, -0.106921, -0.568669 +10014, 0.812144, -0.074867, -0.106921, -0.568669 +10015, 0.812144, -0.074867, -0.106921, -0.568669 +10016, 0.812144, -0.074867, -0.106921, -0.568669 +10017, 0.812144, -0.074867, -0.106921, -0.568669 +10018, 0.812144, -0.074867, -0.106921, -0.568669 +10019, 0.812144, -0.074867, -0.106921, -0.568669 +10020, 0.812144, -0.074867, -0.106921, -0.568669 +10021, 0.812144, -0.074867, -0.106921, -0.568669 +10022, 0.812144, -0.074867, -0.106921, -0.568669 +10023, 0.812144, -0.074867, -0.106921, -0.568669 +10024, 0.812144, -0.074867, -0.106921, -0.568669 +10025, 0.812144, -0.074867, -0.106921, -0.568669 +10026, 0.812144, -0.074867, -0.106921, -0.568669 +10027, 0.812144, -0.074867, -0.106921, -0.568669 +10028, 0.812144, -0.074867, -0.106921, -0.568669 +10029, 0.812144, -0.074867, -0.106921, -0.568669 +10030, 0.812144, -0.074867, -0.106921, -0.568669 +10031, 0.812144, -0.074867, -0.106921, -0.568669 +10032, 0.812144, -0.074867, -0.106921, -0.568669 +10033, 0.812144, -0.074867, -0.106921, -0.568669 +10034, 0.812144, -0.074867, -0.106921, -0.568669 +10035, 0.812144, -0.074867, -0.106921, -0.568669 +10036, 0.812144, -0.074867, -0.106921, -0.568669 +10037, 0.812144, -0.074867, -0.106921, -0.568669 +10038, 0.812144, -0.074867, -0.106921, -0.568669 +10039, 0.812144, -0.074867, -0.106921, -0.568669 +10040, 0.812144, -0.074867, -0.106921, -0.568669 +10041, 0.812144, -0.074867, -0.106921, -0.568669 +10042, 0.812144, -0.074867, -0.106921, -0.568669 +10043, 0.812144, -0.074867, -0.106921, -0.568669 +10044, 0.812144, -0.074867, -0.106921, -0.568669 +10045, 0.812144, -0.074867, -0.106921, -0.568669 +10046, 0.812144, -0.074867, -0.106921, -0.568669 +10047, 0.812144, -0.074867, -0.106921, -0.568669 +10048, 0.812144, -0.074867, -0.106921, -0.568669 +10049, 0.812144, -0.074867, -0.106921, -0.568669 +10050, 0.812144, -0.074867, -0.106921, -0.568669 +10051, 0.812144, -0.074867, -0.106921, -0.568669 +10052, 0.812144, -0.074867, -0.106921, -0.568669 +10053, 0.812144, -0.074867, -0.106921, -0.568669 +10054, 0.812144, -0.074867, -0.106921, -0.568669 +10055, 0.812144, -0.074867, -0.106921, -0.568669 +10056, 0.812144, -0.074867, -0.106921, -0.568669 +10057, 0.812144, -0.074867, -0.106921, -0.568669 +10058, 0.812144, -0.074867, -0.106921, -0.568669 +10059, 0.812144, -0.074867, -0.106921, -0.568669 +10060, 0.812144, -0.074867, -0.106921, -0.568669 +10061, 0.812144, -0.074867, -0.106921, -0.568669 +10062, 0.812144, -0.074867, -0.106921, -0.568669 +10063, 0.812144, -0.074867, -0.106921, -0.568669 +10064, 0.812144, -0.074867, -0.106921, -0.568669 +10065, 0.812144, -0.074867, -0.106921, -0.568669 +10066, 0.812144, -0.074867, -0.106921, -0.568669 +10067, 0.812144, -0.074867, -0.106921, -0.568669 +10068, 0.812144, -0.074867, -0.106921, -0.568669 +10069, 0.812144, -0.074867, -0.106921, -0.568669 +10070, 0.812144, -0.074867, -0.106921, -0.568669 +10071, 0.812144, -0.074867, -0.106921, -0.568669 +10072, 0.812144, -0.074867, -0.106921, -0.568669 +10073, 0.812144, -0.074867, -0.106921, -0.568669 +10074, 0.812144, -0.074867, -0.106921, -0.568669 +10075, 0.812144, -0.074867, -0.106921, -0.568669 +10076, 0.812144, -0.074867, -0.106921, -0.568669 +10077, 0.812144, -0.074867, -0.106921, -0.568669 +10078, 0.812144, -0.074867, -0.106921, -0.568669 +10079, 0.812144, -0.074867, -0.106921, -0.568669 +10080, 0.812144, -0.074867, -0.106921, -0.568669 +10081, 0.812144, -0.074867, -0.106921, -0.568669 +10082, 0.812144, -0.074867, -0.106921, -0.568669 +10083, 0.812144, -0.074867, -0.106921, -0.568669 +10084, 0.812144, -0.074867, -0.106921, -0.568669 +10085, 0.812144, -0.074867, -0.106921, -0.568669 +10086, 0.812144, -0.074867, -0.106921, -0.568669 +10087, 0.812144, -0.074867, -0.106921, -0.568669 +10088, 0.812144, -0.074867, -0.106921, -0.568669 +10089, 0.812144, -0.074867, -0.106921, -0.568669 +10090, 0.812144, -0.074867, -0.106921, -0.568669 +10091, 0.812144, -0.074867, -0.106921, -0.568669 +10092, 0.812144, -0.074867, -0.106921, -0.568669 +10093, 0.812144, -0.074867, -0.106921, -0.568669 +10094, 0.812144, -0.074867, -0.106921, -0.568669 +10095, 0.812144, -0.074867, -0.106921, -0.568669 +10096, 0.812144, -0.074867, -0.106921, -0.568669 +10097, 0.812144, -0.074867, -0.106921, -0.568669 +10098, 0.812144, -0.074867, -0.106921, -0.568669 +10099, 0.812144, -0.074867, -0.106921, -0.568669 +10100, 0.824496, -0.058452, -0.086658, -0.556130 +10101, 0.824496, -0.058452, -0.086658, -0.556130 +10102, 0.824496, -0.058452, -0.086658, -0.556130 +10103, 0.824496, -0.058452, -0.086658, -0.556130 +10104, 0.824496, -0.058452, -0.086658, -0.556130 +10105, 0.824496, -0.058452, -0.086658, -0.556130 +10106, 0.824496, -0.058452, -0.086658, -0.556130 +10107, 0.824496, -0.058452, -0.086658, -0.556130 +10108, 0.824496, -0.058452, -0.086658, -0.556130 +10109, 0.824496, -0.058452, -0.086658, -0.556130 +10110, 0.824496, -0.058452, -0.086658, -0.556130 +10111, 0.824496, -0.058452, -0.086658, -0.556130 +10112, 0.824496, -0.058452, -0.086658, -0.556130 +10113, 0.824496, -0.058452, -0.086658, -0.556130 +10114, 0.824496, -0.058452, -0.086658, -0.556130 +10115, 0.824496, -0.058452, -0.086658, -0.556130 +10116, 0.824496, -0.058452, -0.086658, -0.556130 +10117, 0.824496, -0.058452, -0.086658, -0.556130 +10118, 0.824496, -0.058452, -0.086658, -0.556130 +10119, 0.824496, -0.058452, -0.086658, -0.556130 +10120, 0.824496, -0.058452, -0.086658, -0.556130 +10121, 0.824496, -0.058452, -0.086658, -0.556130 +10122, 0.824496, -0.058452, -0.086658, -0.556130 +10123, 0.824496, -0.058452, -0.086658, -0.556130 +10124, 0.824496, -0.058452, -0.086658, -0.556130 +10125, 0.824496, -0.058452, -0.086658, -0.556130 +10126, 0.824496, -0.058452, -0.086658, -0.556130 +10127, 0.824496, -0.058452, -0.086658, -0.556130 +10128, 0.824496, -0.058452, -0.086658, -0.556130 +10129, 0.824496, -0.058452, -0.086658, -0.556130 +10130, 0.824496, -0.058452, -0.086658, -0.556130 +10131, 0.824496, -0.058452, -0.086658, -0.556130 +10132, 0.824496, -0.058452, -0.086658, -0.556130 +10133, 0.824496, -0.058452, -0.086658, -0.556130 +10134, 0.824496, -0.058452, -0.086658, -0.556130 +10135, 0.824496, -0.058452, -0.086658, -0.556130 +10136, 0.824496, -0.058452, -0.086658, -0.556130 +10137, 0.824496, -0.058452, -0.086658, -0.556130 +10138, 0.824496, -0.058452, -0.086658, -0.556130 +10139, 0.824496, -0.058452, -0.086658, -0.556130 +10140, 0.824496, -0.058452, -0.086658, -0.556130 +10141, 0.824496, -0.058452, -0.086658, -0.556130 +10142, 0.824496, -0.058452, -0.086658, -0.556130 +10143, 0.824496, -0.058452, -0.086658, -0.556130 +10144, 0.824496, -0.058452, -0.086658, -0.556130 +10145, 0.824496, -0.058452, -0.086658, -0.556130 +10146, 0.824496, -0.058452, -0.086658, -0.556130 +10147, 0.824496, -0.058452, -0.086658, -0.556130 +10148, 0.824496, -0.058452, -0.086658, -0.556130 +10149, 0.824496, -0.058452, -0.086658, -0.556130 +10150, 0.824496, -0.058452, -0.086658, -0.556130 +10151, 0.824496, -0.058452, -0.086658, -0.556130 +10152, 0.824496, -0.058452, -0.086658, -0.556130 +10153, 0.824496, -0.058452, -0.086658, -0.556130 +10154, 0.824496, -0.058452, -0.086658, -0.556130 +10155, 0.824496, -0.058452, -0.086658, -0.556130 +10156, 0.824496, -0.058452, -0.086658, -0.556130 +10157, 0.824496, -0.058452, -0.086658, -0.556130 +10158, 0.824496, -0.058452, -0.086658, -0.556130 +10159, 0.824496, -0.058452, -0.086658, -0.556130 +10160, 0.824496, -0.058452, -0.086658, -0.556130 +10161, 0.824496, -0.058452, -0.086658, -0.556130 +10162, 0.824496, -0.058452, -0.086658, -0.556130 +10163, 0.824496, -0.058452, -0.086658, -0.556130 +10164, 0.824496, -0.058452, -0.086658, -0.556130 +10165, 0.824496, -0.058452, -0.086658, -0.556130 +10166, 0.824496, -0.058452, -0.086658, -0.556130 +10167, 0.824496, -0.058452, -0.086658, -0.556130 +10168, 0.824496, -0.058452, -0.086658, -0.556130 +10169, 0.824496, -0.058452, -0.086658, -0.556130 +10170, 0.824496, -0.058452, -0.086658, -0.556130 +10171, 0.824496, -0.058452, -0.086658, -0.556130 +10172, 0.824496, -0.058452, -0.086658, -0.556130 +10173, 0.824496, -0.058452, -0.086658, -0.556130 +10174, 0.824496, -0.058452, -0.086658, -0.556130 +10175, 0.824496, -0.058452, -0.086658, -0.556130 +10176, 0.824496, -0.058452, -0.086658, -0.556130 +10177, 0.824496, -0.058452, -0.086658, -0.556130 +10178, 0.824496, -0.058452, -0.086658, -0.556130 +10179, 0.824496, -0.058452, -0.086658, -0.556130 +10180, 0.824496, -0.058452, -0.086658, -0.556130 +10181, 0.824496, -0.058452, -0.086658, -0.556130 +10182, 0.824496, -0.058452, -0.086658, -0.556130 +10183, 0.824496, -0.058452, -0.086658, -0.556130 +10184, 0.824496, -0.058452, -0.086658, -0.556130 +10185, 0.824496, -0.058452, -0.086658, -0.556130 +10186, 0.824496, -0.058452, -0.086658, -0.556130 +10187, 0.824496, -0.058452, -0.086658, -0.556130 +10188, 0.824496, -0.058452, -0.086658, -0.556130 +10189, 0.824496, -0.058452, -0.086658, -0.556130 +10190, 0.824496, -0.058452, -0.086658, -0.556130 +10191, 0.824496, -0.058452, -0.086658, -0.556130 +10192, 0.824496, -0.058452, -0.086658, -0.556130 +10193, 0.824496, -0.058452, -0.086658, -0.556130 +10194, 0.824496, -0.058452, -0.086658, -0.556130 +10195, 0.824496, -0.058452, -0.086658, -0.556130 +10196, 0.824496, -0.058452, -0.086658, -0.556130 +10197, 0.824496, -0.058452, -0.086658, -0.556130 +10198, 0.824496, -0.058452, -0.086658, -0.556130 +10199, 0.824496, -0.058452, -0.086658, -0.556130 +10200, 0.836085, -0.042732, -0.065801, -0.542960 +10201, 0.836085, -0.042732, -0.065801, -0.542960 +10202, 0.836085, -0.042732, -0.065801, -0.542960 +10203, 0.836085, -0.042732, -0.065801, -0.542960 +10204, 0.836085, -0.042732, -0.065801, -0.542960 +10205, 0.836085, -0.042732, -0.065801, -0.542960 +10206, 0.836085, -0.042732, -0.065801, -0.542960 +10207, 0.836085, -0.042732, -0.065801, -0.542960 +10208, 0.836085, -0.042732, -0.065801, -0.542960 +10209, 0.836085, -0.042732, -0.065801, -0.542960 +10210, 0.836085, -0.042732, -0.065801, -0.542960 +10211, 0.836085, -0.042732, -0.065801, -0.542960 +10212, 0.836085, -0.042732, -0.065801, -0.542960 +10213, 0.836085, -0.042732, -0.065801, -0.542960 +10214, 0.836085, -0.042732, -0.065801, -0.542960 +10215, 0.836085, -0.042732, -0.065801, -0.542960 +10216, 0.836085, -0.042732, -0.065801, -0.542960 +10217, 0.836085, -0.042732, -0.065801, -0.542960 +10218, 0.836085, -0.042732, -0.065801, -0.542960 +10219, 0.836085, -0.042732, -0.065801, -0.542960 +10220, 0.836085, -0.042732, -0.065801, -0.542960 +10221, 0.836085, -0.042732, -0.065801, -0.542960 +10222, 0.836085, -0.042732, -0.065801, -0.542960 +10223, 0.836085, -0.042732, -0.065801, -0.542960 +10224, 0.836085, -0.042732, -0.065801, -0.542960 +10225, 0.836085, -0.042732, -0.065801, -0.542960 +10226, 0.836085, -0.042732, -0.065801, -0.542960 +10227, 0.836085, -0.042732, -0.065801, -0.542960 +10228, 0.836085, -0.042732, -0.065801, -0.542960 +10229, 0.836085, -0.042732, -0.065801, -0.542960 +10230, 0.836085, -0.042732, -0.065801, -0.542960 +10231, 0.836085, -0.042732, -0.065801, -0.542960 +10232, 0.836085, -0.042732, -0.065801, -0.542960 +10233, 0.836085, -0.042732, -0.065801, -0.542960 +10234, 0.836085, -0.042732, -0.065801, -0.542960 +10235, 0.836085, -0.042732, -0.065801, -0.542960 +10236, 0.836085, -0.042732, -0.065801, -0.542960 +10237, 0.836085, -0.042732, -0.065801, -0.542960 +10238, 0.836085, -0.042732, -0.065801, -0.542960 +10239, 0.836085, -0.042732, -0.065801, -0.542960 +10240, 0.836085, -0.042732, -0.065801, -0.542960 +10241, 0.836085, -0.042732, -0.065801, -0.542960 +10242, 0.836085, -0.042732, -0.065801, -0.542960 +10243, 0.836085, -0.042732, -0.065801, -0.542960 +10244, 0.836085, -0.042732, -0.065801, -0.542960 +10245, 0.836085, -0.042732, -0.065801, -0.542960 +10246, 0.836085, -0.042732, -0.065801, -0.542960 +10247, 0.836085, -0.042732, -0.065801, -0.542960 +10248, 0.836085, -0.042732, -0.065801, -0.542960 +10249, 0.836085, -0.042732, -0.065801, -0.542960 +10250, 0.836085, -0.042732, -0.065801, -0.542960 +10251, 0.836085, -0.042732, -0.065801, -0.542960 +10252, 0.836085, -0.042732, -0.065801, -0.542960 +10253, 0.836085, -0.042732, -0.065801, -0.542960 +10254, 0.836085, -0.042732, -0.065801, -0.542960 +10255, 0.836085, -0.042732, -0.065801, -0.542960 +10256, 0.836085, -0.042732, -0.065801, -0.542960 +10257, 0.836085, -0.042732, -0.065801, -0.542960 +10258, 0.836085, -0.042732, -0.065801, -0.542960 +10259, 0.836085, -0.042732, -0.065801, -0.542960 +10260, 0.836085, -0.042732, -0.065801, -0.542960 +10261, 0.836085, -0.042732, -0.065801, -0.542960 +10262, 0.836085, -0.042732, -0.065801, -0.542960 +10263, 0.836085, -0.042732, -0.065801, -0.542960 +10264, 0.836085, -0.042732, -0.065801, -0.542960 +10265, 0.836085, -0.042732, -0.065801, -0.542960 +10266, 0.836085, -0.042732, -0.065801, -0.542960 +10267, 0.836085, -0.042732, -0.065801, -0.542960 +10268, 0.836085, -0.042732, -0.065801, -0.542960 +10269, 0.836085, -0.042732, -0.065801, -0.542960 +10270, 0.836085, -0.042732, -0.065801, -0.542960 +10271, 0.836085, -0.042732, -0.065801, -0.542960 +10272, 0.836085, -0.042732, -0.065801, -0.542960 +10273, 0.836085, -0.042732, -0.065801, -0.542960 +10274, 0.836085, -0.042732, -0.065801, -0.542960 +10275, 0.836085, -0.042732, -0.065801, -0.542960 +10276, 0.836085, -0.042732, -0.065801, -0.542960 +10277, 0.836085, -0.042732, -0.065801, -0.542960 +10278, 0.836085, -0.042732, -0.065801, -0.542960 +10279, 0.836085, -0.042732, -0.065801, -0.542960 +10280, 0.836085, -0.042732, -0.065801, -0.542960 +10281, 0.836085, -0.042732, -0.065801, -0.542960 +10282, 0.836085, -0.042732, -0.065801, -0.542960 +10283, 0.836085, -0.042732, -0.065801, -0.542960 +10284, 0.836085, -0.042732, -0.065801, -0.542960 +10285, 0.836085, -0.042732, -0.065801, -0.542960 +10286, 0.836085, -0.042732, -0.065801, -0.542960 +10287, 0.836085, -0.042732, -0.065801, -0.542960 +10288, 0.836085, -0.042732, -0.065801, -0.542960 +10289, 0.836085, -0.042732, -0.065801, -0.542960 +10290, 0.836085, -0.042732, -0.065801, -0.542960 +10291, 0.836085, -0.042732, -0.065801, -0.542960 +10292, 0.836085, -0.042732, -0.065801, -0.542960 +10293, 0.836085, -0.042732, -0.065801, -0.542960 +10294, 0.836085, -0.042732, -0.065801, -0.542960 +10295, 0.836085, -0.042732, -0.065801, -0.542960 +10296, 0.836085, -0.042732, -0.065801, -0.542960 +10297, 0.836085, -0.042732, -0.065801, -0.542960 +10298, 0.836085, -0.042732, -0.065801, -0.542960 +10299, 0.836085, -0.042732, -0.065801, -0.542960 +10300, 0.846886, -0.027734, -0.044383, -0.529193 +10301, 0.846886, -0.027734, -0.044383, -0.529193 +10302, 0.846886, -0.027734, -0.044383, -0.529193 +10303, 0.846886, -0.027734, -0.044383, -0.529193 +10304, 0.846886, -0.027734, -0.044383, -0.529193 +10305, 0.846886, -0.027734, -0.044383, -0.529193 +10306, 0.846886, -0.027734, -0.044383, -0.529193 +10307, 0.846886, -0.027734, -0.044383, -0.529193 +10308, 0.846886, -0.027734, -0.044383, -0.529193 +10309, 0.846886, -0.027734, -0.044383, -0.529193 +10310, 0.846886, -0.027734, -0.044383, -0.529193 +10311, 0.846886, -0.027734, -0.044383, -0.529193 +10312, 0.846886, -0.027734, -0.044383, -0.529193 +10313, 0.846886, -0.027734, -0.044383, -0.529193 +10314, 0.846886, -0.027734, -0.044383, -0.529193 +10315, 0.846886, -0.027734, -0.044383, -0.529193 +10316, 0.846886, -0.027734, -0.044383, -0.529193 +10317, 0.846886, -0.027734, -0.044383, -0.529193 +10318, 0.846886, -0.027734, -0.044383, -0.529193 +10319, 0.846886, -0.027734, -0.044383, -0.529193 +10320, 0.846886, -0.027734, -0.044383, -0.529193 +10321, 0.846886, -0.027734, -0.044383, -0.529193 +10322, 0.846886, -0.027734, -0.044383, -0.529193 +10323, 0.846886, -0.027734, -0.044383, -0.529193 +10324, 0.846886, -0.027734, -0.044383, -0.529193 +10325, 0.846886, -0.027734, -0.044383, -0.529193 +10326, 0.846886, -0.027734, -0.044383, -0.529193 +10327, 0.846886, -0.027734, -0.044383, -0.529193 +10328, 0.846886, -0.027734, -0.044383, -0.529193 +10329, 0.846886, -0.027734, -0.044383, -0.529193 +10330, 0.846886, -0.027734, -0.044383, -0.529193 +10331, 0.846886, -0.027734, -0.044383, -0.529193 +10332, 0.846886, -0.027734, -0.044383, -0.529193 +10333, 0.846886, -0.027734, -0.044383, -0.529193 +10334, 0.846886, -0.027734, -0.044383, -0.529193 +10335, 0.846886, -0.027734, -0.044383, -0.529193 +10336, 0.846886, -0.027734, -0.044383, -0.529193 +10337, 0.846886, -0.027734, -0.044383, -0.529193 +10338, 0.846886, -0.027734, -0.044383, -0.529193 +10339, 0.846886, -0.027734, -0.044383, -0.529193 +10340, 0.846886, -0.027734, -0.044383, -0.529193 +10341, 0.846886, -0.027734, -0.044383, -0.529193 +10342, 0.846886, -0.027734, -0.044383, -0.529193 +10343, 0.846886, -0.027734, -0.044383, -0.529193 +10344, 0.846886, -0.027734, -0.044383, -0.529193 +10345, 0.846886, -0.027734, -0.044383, -0.529193 +10346, 0.846886, -0.027734, -0.044383, -0.529193 +10347, 0.846886, -0.027734, -0.044383, -0.529193 +10348, 0.846886, -0.027734, -0.044383, -0.529193 +10349, 0.846886, -0.027734, -0.044383, -0.529193 +10350, 0.846886, -0.027734, -0.044383, -0.529193 +10351, 0.846886, -0.027734, -0.044383, -0.529193 +10352, 0.846886, -0.027734, -0.044383, -0.529193 +10353, 0.846886, -0.027734, -0.044383, -0.529193 +10354, 0.846886, -0.027734, -0.044383, -0.529193 +10355, 0.846886, -0.027734, -0.044383, -0.529193 +10356, 0.846886, -0.027734, -0.044383, -0.529193 +10357, 0.846886, -0.027734, -0.044383, -0.529193 +10358, 0.846886, -0.027734, -0.044383, -0.529193 +10359, 0.846886, -0.027734, -0.044383, -0.529193 +10360, 0.846886, -0.027734, -0.044383, -0.529193 +10361, 0.846886, -0.027734, -0.044383, -0.529193 +10362, 0.846886, -0.027734, -0.044383, -0.529193 +10363, 0.846886, -0.027734, -0.044383, -0.529193 +10364, 0.846886, -0.027734, -0.044383, -0.529193 +10365, 0.846886, -0.027734, -0.044383, -0.529193 +10366, 0.846886, -0.027734, -0.044383, -0.529193 +10367, 0.846886, -0.027734, -0.044383, -0.529193 +10368, 0.846886, -0.027734, -0.044383, -0.529193 +10369, 0.846886, -0.027734, -0.044383, -0.529193 +10370, 0.846886, -0.027734, -0.044383, -0.529193 +10371, 0.846886, -0.027734, -0.044383, -0.529193 +10372, 0.846886, -0.027734, -0.044383, -0.529193 +10373, 0.846886, -0.027734, -0.044383, -0.529193 +10374, 0.846886, -0.027734, -0.044383, -0.529193 +10375, 0.846886, -0.027734, -0.044383, -0.529193 +10376, 0.846886, -0.027734, -0.044383, -0.529193 +10377, 0.846886, -0.027734, -0.044383, -0.529193 +10378, 0.846886, -0.027734, -0.044383, -0.529193 +10379, 0.846886, -0.027734, -0.044383, -0.529193 +10380, 0.846886, -0.027734, -0.044383, -0.529193 +10381, 0.846886, -0.027734, -0.044383, -0.529193 +10382, 0.846886, -0.027734, -0.044383, -0.529193 +10383, 0.846886, -0.027734, -0.044383, -0.529193 +10384, 0.846886, -0.027734, -0.044383, -0.529193 +10385, 0.846886, -0.027734, -0.044383, -0.529193 +10386, 0.846886, -0.027734, -0.044383, -0.529193 +10387, 0.846886, -0.027734, -0.044383, -0.529193 +10388, 0.846886, -0.027734, -0.044383, -0.529193 +10389, 0.846886, -0.027734, -0.044383, -0.529193 +10390, 0.846886, -0.027734, -0.044383, -0.529193 +10391, 0.846886, -0.027734, -0.044383, -0.529193 +10392, 0.846886, -0.027734, -0.044383, -0.529193 +10393, 0.846886, -0.027734, -0.044383, -0.529193 +10394, 0.846886, -0.027734, -0.044383, -0.529193 +10395, 0.846886, -0.027734, -0.044383, -0.529193 +10396, 0.846886, -0.027734, -0.044383, -0.529193 +10397, 0.846886, -0.027734, -0.044383, -0.529193 +10398, 0.846886, -0.027734, -0.044383, -0.529193 +10399, 0.846886, -0.027734, -0.044383, -0.529193 +10400, 0.856874, -0.013482, -0.022438, -0.514862 +10401, 0.856874, -0.013482, -0.022438, -0.514862 +10402, 0.856874, -0.013482, -0.022438, -0.514862 +10403, 0.856874, -0.013482, -0.022438, -0.514862 +10404, 0.856874, -0.013482, -0.022438, -0.514862 +10405, 0.856874, -0.013482, -0.022438, -0.514862 +10406, 0.856874, -0.013482, -0.022438, -0.514862 +10407, 0.856874, -0.013482, -0.022438, -0.514862 +10408, 0.856874, -0.013482, -0.022438, -0.514862 +10409, 0.856874, -0.013482, -0.022438, -0.514862 +10410, 0.856874, -0.013482, -0.022438, -0.514862 +10411, 0.856874, -0.013482, -0.022438, -0.514862 +10412, 0.856874, -0.013482, -0.022438, -0.514862 +10413, 0.856874, -0.013482, -0.022438, -0.514862 +10414, 0.856874, -0.013482, -0.022438, -0.514862 +10415, 0.856874, -0.013482, -0.022438, -0.514862 +10416, 0.856874, -0.013482, -0.022438, -0.514862 +10417, 0.856874, -0.013482, -0.022438, -0.514862 +10418, 0.856874, -0.013482, -0.022438, -0.514862 +10419, 0.856874, -0.013482, -0.022438, -0.514862 +10420, 0.856874, -0.013482, -0.022438, -0.514862 +10421, 0.856874, -0.013482, -0.022438, -0.514862 +10422, 0.856874, -0.013482, -0.022438, -0.514862 +10423, 0.856874, -0.013482, -0.022438, -0.514862 +10424, 0.856874, -0.013482, -0.022438, -0.514862 +10425, 0.856874, -0.013482, -0.022438, -0.514862 +10426, 0.856874, -0.013482, -0.022438, -0.514862 +10427, 0.856874, -0.013482, -0.022438, -0.514862 +10428, 0.856874, -0.013482, -0.022438, -0.514862 +10429, 0.856874, -0.013482, -0.022438, -0.514862 +10430, 0.856874, -0.013482, -0.022438, -0.514862 +10431, 0.856874, -0.013482, -0.022438, -0.514862 +10432, 0.856874, -0.013482, -0.022438, -0.514862 +10433, 0.856874, -0.013482, -0.022438, -0.514862 +10434, 0.856874, -0.013482, -0.022438, -0.514862 +10435, 0.856874, -0.013482, -0.022438, -0.514862 +10436, 0.856874, -0.013482, -0.022438, -0.514862 +10437, 0.856874, -0.013482, -0.022438, -0.514862 +10438, 0.856874, -0.013482, -0.022438, -0.514862 +10439, 0.856874, -0.013482, -0.022438, -0.514862 +10440, 0.856874, -0.013482, -0.022438, -0.514862 +10441, 0.856874, -0.013482, -0.022438, -0.514862 +10442, 0.856874, -0.013482, -0.022438, -0.514862 +10443, 0.856874, -0.013482, -0.022438, -0.514862 +10444, 0.856874, -0.013482, -0.022438, -0.514862 +10445, 0.856874, -0.013482, -0.022438, -0.514862 +10446, 0.856874, -0.013482, -0.022438, -0.514862 +10447, 0.856874, -0.013482, -0.022438, -0.514862 +10448, 0.856874, -0.013482, -0.022438, -0.514862 +10449, 0.856874, -0.013482, -0.022438, -0.514862 +10450, 0.856874, -0.013482, -0.022438, -0.514862 +10451, 0.856874, -0.013482, -0.022438, -0.514862 +10452, 0.856874, -0.013482, -0.022438, -0.514862 +10453, 0.856874, -0.013482, -0.022438, -0.514862 +10454, 0.856874, -0.013482, -0.022438, -0.514862 +10455, 0.856874, -0.013482, -0.022438, -0.514862 +10456, 0.856874, -0.013482, -0.022438, -0.514862 +10457, 0.856874, -0.013482, -0.022438, -0.514862 +10458, 0.856874, -0.013482, -0.022438, -0.514862 +10459, 0.856874, -0.013482, -0.022438, -0.514862 +10460, 0.856874, -0.013482, -0.022438, -0.514862 +10461, 0.856874, -0.013482, -0.022438, -0.514862 +10462, 0.856874, -0.013482, -0.022438, -0.514862 +10463, 0.856874, -0.013482, -0.022438, -0.514862 +10464, 0.856874, -0.013482, -0.022438, -0.514862 +10465, 0.856874, -0.013482, -0.022438, -0.514862 +10466, 0.856874, -0.013482, -0.022438, -0.514862 +10467, 0.856874, -0.013482, -0.022438, -0.514862 +10468, 0.856874, -0.013482, -0.022438, -0.514862 +10469, 0.856874, -0.013482, -0.022438, -0.514862 +10470, 0.856874, -0.013482, -0.022438, -0.514862 +10471, 0.856874, -0.013482, -0.022438, -0.514862 +10472, 0.856874, -0.013482, -0.022438, -0.514862 +10473, 0.856874, -0.013482, -0.022438, -0.514862 +10474, 0.856874, -0.013482, -0.022438, -0.514862 +10475, 0.856874, -0.013482, -0.022438, -0.514862 +10476, 0.856874, -0.013482, -0.022438, -0.514862 +10477, 0.856874, -0.013482, -0.022438, -0.514862 +10478, 0.856874, -0.013482, -0.022438, -0.514862 +10479, 0.856874, -0.013482, -0.022438, -0.514862 +10480, 0.856874, -0.013482, -0.022438, -0.514862 +10481, 0.856874, -0.013482, -0.022438, -0.514862 +10482, 0.856874, -0.013482, -0.022438, -0.514862 +10483, 0.856874, -0.013482, -0.022438, -0.514862 +10484, 0.856874, -0.013482, -0.022438, -0.514862 +10485, 0.856874, -0.013482, -0.022438, -0.514862 +10486, 0.856874, -0.013482, -0.022438, -0.514862 +10487, 0.856874, -0.013482, -0.022438, -0.514862 +10488, 0.856874, -0.013482, -0.022438, -0.514862 +10489, 0.856874, -0.013482, -0.022438, -0.514862 +10490, 0.856874, -0.013482, -0.022438, -0.514862 +10491, 0.856874, -0.013482, -0.022438, -0.514862 +10492, 0.856874, -0.013482, -0.022438, -0.514862 +10493, 0.856874, -0.013482, -0.022438, -0.514862 +10494, 0.856874, -0.013482, -0.022438, -0.514862 +10495, 0.856874, -0.013482, -0.022438, -0.514862 +10496, 0.856874, -0.013482, -0.022438, -0.514862 +10497, 0.856874, -0.013482, -0.022438, -0.514862 +10498, 0.856874, -0.013482, -0.022438, -0.514862 +10499, 0.856874, -0.013482, -0.022438, -0.514862 +10500, 0.866025, -0.000000, -0.000000, -0.500000 +10501, 0.866025, -0.000000, -0.000000, -0.500000 +10502, 0.866025, -0.000000, -0.000000, -0.500000 +10503, 0.866025, -0.000000, -0.000000, -0.500000 +10504, 0.866025, -0.000000, -0.000000, -0.500000 +10505, 0.866025, -0.000000, -0.000000, -0.500000 +10506, 0.866025, -0.000000, -0.000000, -0.500000 +10507, 0.866025, -0.000000, -0.000000, -0.500000 +10508, 0.866025, -0.000000, -0.000000, -0.500000 +10509, 0.866025, -0.000000, -0.000000, -0.500000 +10510, 0.866025, -0.000000, -0.000000, -0.500000 +10511, 0.866025, -0.000000, -0.000000, -0.500000 +10512, 0.866025, -0.000000, -0.000000, -0.500000 +10513, 0.866025, -0.000000, -0.000000, -0.500000 +10514, 0.866025, -0.000000, -0.000000, -0.500000 +10515, 0.866025, -0.000000, -0.000000, -0.500000 +10516, 0.866025, -0.000000, -0.000000, -0.500000 +10517, 0.866025, -0.000000, -0.000000, -0.500000 +10518, 0.866025, -0.000000, -0.000000, -0.500000 +10519, 0.866025, -0.000000, -0.000000, -0.500000 +10520, 0.866025, -0.000000, -0.000000, -0.500000 +10521, 0.866025, -0.000000, -0.000000, -0.500000 +10522, 0.866025, -0.000000, -0.000000, -0.500000 +10523, 0.866025, -0.000000, -0.000000, -0.500000 +10524, 0.866025, -0.000000, -0.000000, -0.500000 +10525, 0.866025, -0.000000, -0.000000, -0.500000 +10526, 0.866025, -0.000000, -0.000000, -0.500000 +10527, 0.866025, -0.000000, -0.000000, -0.500000 +10528, 0.866025, -0.000000, -0.000000, -0.500000 +10529, 0.866025, -0.000000, -0.000000, -0.500000 +10530, 0.866025, -0.000000, -0.000000, -0.500000 +10531, 0.866025, -0.000000, -0.000000, -0.500000 +10532, 0.866025, -0.000000, -0.000000, -0.500000 +10533, 0.866025, -0.000000, -0.000000, -0.500000 +10534, 0.866025, -0.000000, -0.000000, -0.500000 +10535, 0.866025, -0.000000, -0.000000, -0.500000 +10536, 0.866025, -0.000000, -0.000000, -0.500000 +10537, 0.866025, -0.000000, -0.000000, -0.500000 +10538, 0.866025, -0.000000, -0.000000, -0.500000 +10539, 0.866025, -0.000000, -0.000000, -0.500000 +10540, 0.866025, -0.000000, -0.000000, -0.500000 +10541, 0.866025, -0.000000, -0.000000, -0.500000 +10542, 0.866025, -0.000000, -0.000000, -0.500000 +10543, 0.866025, -0.000000, -0.000000, -0.500000 +10544, 0.866025, -0.000000, -0.000000, -0.500000 +10545, 0.866025, -0.000000, -0.000000, -0.500000 +10546, 0.866025, -0.000000, -0.000000, -0.500000 +10547, 0.866025, -0.000000, -0.000000, -0.500000 +10548, 0.866025, -0.000000, -0.000000, -0.500000 +10549, 0.866025, -0.000000, -0.000000, -0.500000 +10550, 0.866025, -0.000000, -0.000000, -0.500000 +10551, 0.866025, -0.000000, -0.000000, -0.500000 +10552, 0.866025, -0.000000, -0.000000, -0.500000 +10553, 0.866025, -0.000000, -0.000000, -0.500000 +10554, 0.866025, -0.000000, -0.000000, -0.500000 +10555, 0.866025, -0.000000, -0.000000, -0.500000 +10556, 0.866025, -0.000000, -0.000000, -0.500000 +10557, 0.866025, -0.000000, -0.000000, -0.500000 +10558, 0.866025, -0.000000, -0.000000, -0.500000 +10559, 0.866025, -0.000000, -0.000000, -0.500000 +10560, 0.866025, -0.000000, -0.000000, -0.500000 +10561, 0.866025, -0.000000, -0.000000, -0.500000 +10562, 0.866025, -0.000000, -0.000000, -0.500000 +10563, 0.866025, -0.000000, -0.000000, -0.500000 +10564, 0.866025, -0.000000, -0.000000, -0.500000 +10565, 0.866025, -0.000000, -0.000000, -0.500000 +10566, 0.866025, -0.000000, -0.000000, -0.500000 +10567, 0.866025, -0.000000, -0.000000, -0.500000 +10568, 0.866025, -0.000000, -0.000000, -0.500000 +10569, 0.866025, -0.000000, -0.000000, -0.500000 +10570, 0.866025, -0.000000, -0.000000, -0.500000 +10571, 0.866025, -0.000000, -0.000000, -0.500000 +10572, 0.866025, -0.000000, -0.000000, -0.500000 +10573, 0.866025, -0.000000, -0.000000, -0.500000 +10574, 0.866025, -0.000000, -0.000000, -0.500000 +10575, 0.866025, -0.000000, -0.000000, -0.500000 +10576, 0.866025, -0.000000, -0.000000, -0.500000 +10577, 0.866025, -0.000000, -0.000000, -0.500000 +10578, 0.866025, -0.000000, -0.000000, -0.500000 +10579, 0.866025, -0.000000, -0.000000, -0.500000 +10580, 0.866025, -0.000000, -0.000000, -0.500000 +10581, 0.866025, -0.000000, -0.000000, -0.500000 +10582, 0.866025, -0.000000, -0.000000, -0.500000 +10583, 0.866025, -0.000000, -0.000000, -0.500000 +10584, 0.866025, -0.000000, -0.000000, -0.500000 +10585, 0.866025, -0.000000, -0.000000, -0.500000 +10586, 0.866025, -0.000000, -0.000000, -0.500000 +10587, 0.866025, -0.000000, -0.000000, -0.500000 +10588, 0.866025, -0.000000, -0.000000, -0.500000 +10589, 0.866025, -0.000000, -0.000000, -0.500000 +10590, 0.866025, -0.000000, -0.000000, -0.500000 +10591, 0.866025, -0.000000, -0.000000, -0.500000 +10592, 0.866025, -0.000000, -0.000000, -0.500000 +10593, 0.866025, -0.000000, -0.000000, -0.500000 +10594, 0.866025, -0.000000, -0.000000, -0.500000 +10595, 0.866025, -0.000000, -0.000000, -0.500000 +10596, 0.866025, -0.000000, -0.000000, -0.500000 +10597, 0.866025, -0.000000, -0.000000, -0.500000 +10598, 0.866025, -0.000000, -0.000000, -0.500000 +10599, 0.866025, -0.000000, -0.000000, -0.500000 +10600, 0.874320, 0.012691, 0.022895, -0.484643 +10601, 0.874320, 0.012691, 0.022895, -0.484643 +10602, 0.874320, 0.012691, 0.022895, -0.484643 +10603, 0.874320, 0.012691, 0.022895, -0.484643 +10604, 0.874320, 0.012691, 0.022895, -0.484643 +10605, 0.874320, 0.012691, 0.022895, -0.484643 +10606, 0.874320, 0.012691, 0.022895, -0.484643 +10607, 0.874320, 0.012691, 0.022895, -0.484643 +10608, 0.874320, 0.012691, 0.022895, -0.484643 +10609, 0.874320, 0.012691, 0.022895, -0.484643 +10610, 0.874320, 0.012691, 0.022895, -0.484643 +10611, 0.874320, 0.012691, 0.022895, -0.484643 +10612, 0.874320, 0.012691, 0.022895, -0.484643 +10613, 0.874320, 0.012691, 0.022895, -0.484643 +10614, 0.874320, 0.012691, 0.022895, -0.484643 +10615, 0.874320, 0.012691, 0.022895, -0.484643 +10616, 0.874320, 0.012691, 0.022895, -0.484643 +10617, 0.874320, 0.012691, 0.022895, -0.484643 +10618, 0.874320, 0.012691, 0.022895, -0.484643 +10619, 0.874320, 0.012691, 0.022895, -0.484643 +10620, 0.874320, 0.012691, 0.022895, -0.484643 +10621, 0.874320, 0.012691, 0.022895, -0.484643 +10622, 0.874320, 0.012691, 0.022895, -0.484643 +10623, 0.874320, 0.012691, 0.022895, -0.484643 +10624, 0.874320, 0.012691, 0.022895, -0.484643 +10625, 0.874320, 0.012691, 0.022895, -0.484643 +10626, 0.874320, 0.012691, 0.022895, -0.484643 +10627, 0.874320, 0.012691, 0.022895, -0.484643 +10628, 0.874320, 0.012691, 0.022895, -0.484643 +10629, 0.874320, 0.012691, 0.022895, -0.484643 +10630, 0.874320, 0.012691, 0.022895, -0.484643 +10631, 0.874320, 0.012691, 0.022895, -0.484643 +10632, 0.874320, 0.012691, 0.022895, -0.484643 +10633, 0.874320, 0.012691, 0.022895, -0.484643 +10634, 0.874320, 0.012691, 0.022895, -0.484643 +10635, 0.874320, 0.012691, 0.022895, -0.484643 +10636, 0.874320, 0.012691, 0.022895, -0.484643 +10637, 0.874320, 0.012691, 0.022895, -0.484643 +10638, 0.874320, 0.012691, 0.022895, -0.484643 +10639, 0.874320, 0.012691, 0.022895, -0.484643 +10640, 0.874320, 0.012691, 0.022895, -0.484643 +10641, 0.874320, 0.012691, 0.022895, -0.484643 +10642, 0.874320, 0.012691, 0.022895, -0.484643 +10643, 0.874320, 0.012691, 0.022895, -0.484643 +10644, 0.874320, 0.012691, 0.022895, -0.484643 +10645, 0.874320, 0.012691, 0.022895, -0.484643 +10646, 0.874320, 0.012691, 0.022895, -0.484643 +10647, 0.874320, 0.012691, 0.022895, -0.484643 +10648, 0.874320, 0.012691, 0.022895, -0.484643 +10649, 0.874320, 0.012691, 0.022895, -0.484643 +10650, 0.874320, 0.012691, 0.022895, -0.484643 +10651, 0.874320, 0.012691, 0.022895, -0.484643 +10652, 0.874320, 0.012691, 0.022895, -0.484643 +10653, 0.874320, 0.012691, 0.022895, -0.484643 +10654, 0.874320, 0.012691, 0.022895, -0.484643 +10655, 0.874320, 0.012691, 0.022895, -0.484643 +10656, 0.874320, 0.012691, 0.022895, -0.484643 +10657, 0.874320, 0.012691, 0.022895, -0.484643 +10658, 0.874320, 0.012691, 0.022895, -0.484643 +10659, 0.874320, 0.012691, 0.022895, -0.484643 +10660, 0.874320, 0.012691, 0.022895, -0.484643 +10661, 0.874320, 0.012691, 0.022895, -0.484643 +10662, 0.874320, 0.012691, 0.022895, -0.484643 +10663, 0.874320, 0.012691, 0.022895, -0.484643 +10664, 0.874320, 0.012691, 0.022895, -0.484643 +10665, 0.874320, 0.012691, 0.022895, -0.484643 +10666, 0.874320, 0.012691, 0.022895, -0.484643 +10667, 0.874320, 0.012691, 0.022895, -0.484643 +10668, 0.874320, 0.012691, 0.022895, -0.484643 +10669, 0.874320, 0.012691, 0.022895, -0.484643 +10670, 0.874320, 0.012691, 0.022895, -0.484643 +10671, 0.874320, 0.012691, 0.022895, -0.484643 +10672, 0.874320, 0.012691, 0.022895, -0.484643 +10673, 0.874320, 0.012691, 0.022895, -0.484643 +10674, 0.874320, 0.012691, 0.022895, -0.484643 +10675, 0.874320, 0.012691, 0.022895, -0.484643 +10676, 0.874320, 0.012691, 0.022895, -0.484643 +10677, 0.874320, 0.012691, 0.022895, -0.484643 +10678, 0.874320, 0.012691, 0.022895, -0.484643 +10679, 0.874320, 0.012691, 0.022895, -0.484643 +10680, 0.874320, 0.012691, 0.022895, -0.484643 +10681, 0.874320, 0.012691, 0.022895, -0.484643 +10682, 0.874320, 0.012691, 0.022895, -0.484643 +10683, 0.874320, 0.012691, 0.022895, -0.484643 +10684, 0.874320, 0.012691, 0.022895, -0.484643 +10685, 0.874320, 0.012691, 0.022895, -0.484643 +10686, 0.874320, 0.012691, 0.022895, -0.484643 +10687, 0.874320, 0.012691, 0.022895, -0.484643 +10688, 0.874320, 0.012691, 0.022895, -0.484643 +10689, 0.874320, 0.012691, 0.022895, -0.484643 +10690, 0.874320, 0.012691, 0.022895, -0.484643 +10691, 0.874320, 0.012691, 0.022895, -0.484643 +10692, 0.874320, 0.012691, 0.022895, -0.484643 +10693, 0.874320, 0.012691, 0.022895, -0.484643 +10694, 0.874320, 0.012691, 0.022895, -0.484643 +10695, 0.874320, 0.012691, 0.022895, -0.484643 +10696, 0.874320, 0.012691, 0.022895, -0.484643 +10697, 0.874320, 0.012691, 0.022895, -0.484643 +10698, 0.874320, 0.012691, 0.022895, -0.484643 +10699, 0.874320, 0.012691, 0.022895, -0.484643 +10700, 0.881738, 0.024570, 0.046210, -0.468828 +10701, 0.881738, 0.024570, 0.046210, -0.468828 +10702, 0.881738, 0.024570, 0.046210, -0.468828 +10703, 0.881738, 0.024570, 0.046210, -0.468828 +10704, 0.881738, 0.024570, 0.046210, -0.468828 +10705, 0.881738, 0.024570, 0.046210, -0.468828 +10706, 0.881738, 0.024570, 0.046210, -0.468828 +10707, 0.881738, 0.024570, 0.046210, -0.468828 +10708, 0.881738, 0.024570, 0.046210, -0.468828 +10709, 0.881738, 0.024570, 0.046210, -0.468828 +10710, 0.881738, 0.024570, 0.046210, -0.468828 +10711, 0.881738, 0.024570, 0.046210, -0.468828 +10712, 0.881738, 0.024570, 0.046210, -0.468828 +10713, 0.881738, 0.024570, 0.046210, -0.468828 +10714, 0.881738, 0.024570, 0.046210, -0.468828 +10715, 0.881738, 0.024570, 0.046210, -0.468828 +10716, 0.881738, 0.024570, 0.046210, -0.468828 +10717, 0.881738, 0.024570, 0.046210, -0.468828 +10718, 0.881738, 0.024570, 0.046210, -0.468828 +10719, 0.881738, 0.024570, 0.046210, -0.468828 +10720, 0.881738, 0.024570, 0.046210, -0.468828 +10721, 0.881738, 0.024570, 0.046210, -0.468828 +10722, 0.881738, 0.024570, 0.046210, -0.468828 +10723, 0.881738, 0.024570, 0.046210, -0.468828 +10724, 0.881738, 0.024570, 0.046210, -0.468828 +10725, 0.881738, 0.024570, 0.046210, -0.468828 +10726, 0.881738, 0.024570, 0.046210, -0.468828 +10727, 0.881738, 0.024570, 0.046210, -0.468828 +10728, 0.881738, 0.024570, 0.046210, -0.468828 +10729, 0.881738, 0.024570, 0.046210, -0.468828 +10730, 0.881738, 0.024570, 0.046210, -0.468828 +10731, 0.881738, 0.024570, 0.046210, -0.468828 +10732, 0.881738, 0.024570, 0.046210, -0.468828 +10733, 0.881738, 0.024570, 0.046210, -0.468828 +10734, 0.881738, 0.024570, 0.046210, -0.468828 +10735, 0.881738, 0.024570, 0.046210, -0.468828 +10736, 0.881738, 0.024570, 0.046210, -0.468828 +10737, 0.881738, 0.024570, 0.046210, -0.468828 +10738, 0.881738, 0.024570, 0.046210, -0.468828 +10739, 0.881738, 0.024570, 0.046210, -0.468828 +10740, 0.881738, 0.024570, 0.046210, -0.468828 +10741, 0.881738, 0.024570, 0.046210, -0.468828 +10742, 0.881738, 0.024570, 0.046210, -0.468828 +10743, 0.881738, 0.024570, 0.046210, -0.468828 +10744, 0.881738, 0.024570, 0.046210, -0.468828 +10745, 0.881738, 0.024570, 0.046210, -0.468828 +10746, 0.881738, 0.024570, 0.046210, -0.468828 +10747, 0.881738, 0.024570, 0.046210, -0.468828 +10748, 0.881738, 0.024570, 0.046210, -0.468828 +10749, 0.881738, 0.024570, 0.046210, -0.468828 +10750, 0.881738, 0.024570, 0.046210, -0.468828 +10751, 0.881738, 0.024570, 0.046210, -0.468828 +10752, 0.881738, 0.024570, 0.046210, -0.468828 +10753, 0.881738, 0.024570, 0.046210, -0.468828 +10754, 0.881738, 0.024570, 0.046210, -0.468828 +10755, 0.881738, 0.024570, 0.046210, -0.468828 +10756, 0.881738, 0.024570, 0.046210, -0.468828 +10757, 0.881738, 0.024570, 0.046210, -0.468828 +10758, 0.881738, 0.024570, 0.046210, -0.468828 +10759, 0.881738, 0.024570, 0.046210, -0.468828 +10760, 0.881738, 0.024570, 0.046210, -0.468828 +10761, 0.881738, 0.024570, 0.046210, -0.468828 +10762, 0.881738, 0.024570, 0.046210, -0.468828 +10763, 0.881738, 0.024570, 0.046210, -0.468828 +10764, 0.881738, 0.024570, 0.046210, -0.468828 +10765, 0.881738, 0.024570, 0.046210, -0.468828 +10766, 0.881738, 0.024570, 0.046210, -0.468828 +10767, 0.881738, 0.024570, 0.046210, -0.468828 +10768, 0.881738, 0.024570, 0.046210, -0.468828 +10769, 0.881738, 0.024570, 0.046210, -0.468828 +10770, 0.881738, 0.024570, 0.046210, -0.468828 +10771, 0.881738, 0.024570, 0.046210, -0.468828 +10772, 0.881738, 0.024570, 0.046210, -0.468828 +10773, 0.881738, 0.024570, 0.046210, -0.468828 +10774, 0.881738, 0.024570, 0.046210, -0.468828 +10775, 0.881738, 0.024570, 0.046210, -0.468828 +10776, 0.881738, 0.024570, 0.046210, -0.468828 +10777, 0.881738, 0.024570, 0.046210, -0.468828 +10778, 0.881738, 0.024570, 0.046210, -0.468828 +10779, 0.881738, 0.024570, 0.046210, -0.468828 +10780, 0.881738, 0.024570, 0.046210, -0.468828 +10781, 0.881738, 0.024570, 0.046210, -0.468828 +10782, 0.881738, 0.024570, 0.046210, -0.468828 +10783, 0.881738, 0.024570, 0.046210, -0.468828 +10784, 0.881738, 0.024570, 0.046210, -0.468828 +10785, 0.881738, 0.024570, 0.046210, -0.468828 +10786, 0.881738, 0.024570, 0.046210, -0.468828 +10787, 0.881738, 0.024570, 0.046210, -0.468828 +10788, 0.881738, 0.024570, 0.046210, -0.468828 +10789, 0.881738, 0.024570, 0.046210, -0.468828 +10790, 0.881738, 0.024570, 0.046210, -0.468828 +10791, 0.881738, 0.024570, 0.046210, -0.468828 +10792, 0.881738, 0.024570, 0.046210, -0.468828 +10793, 0.881738, 0.024570, 0.046210, -0.468828 +10794, 0.881738, 0.024570, 0.046210, -0.468828 +10795, 0.881738, 0.024570, 0.046210, -0.468828 +10796, 0.881738, 0.024570, 0.046210, -0.468828 +10797, 0.881738, 0.024570, 0.046210, -0.468828 +10798, 0.881738, 0.024570, 0.046210, -0.468828 +10799, 0.881738, 0.024570, 0.046210, -0.468828 +10800, 0.888260, 0.035620, 0.069908, -0.452591 +10801, 0.888260, 0.035620, 0.069908, -0.452591 +10802, 0.888260, 0.035620, 0.069908, -0.452591 +10803, 0.888260, 0.035620, 0.069908, -0.452591 +10804, 0.888260, 0.035620, 0.069908, -0.452591 +10805, 0.888260, 0.035620, 0.069908, -0.452591 +10806, 0.888260, 0.035620, 0.069908, -0.452591 +10807, 0.888260, 0.035620, 0.069908, -0.452591 +10808, 0.888260, 0.035620, 0.069908, -0.452591 +10809, 0.888260, 0.035620, 0.069908, -0.452591 +10810, 0.888260, 0.035620, 0.069908, -0.452591 +10811, 0.888260, 0.035620, 0.069908, -0.452591 +10812, 0.888260, 0.035620, 0.069908, -0.452591 +10813, 0.888260, 0.035620, 0.069908, -0.452591 +10814, 0.888260, 0.035620, 0.069908, -0.452591 +10815, 0.888260, 0.035620, 0.069908, -0.452591 +10816, 0.888260, 0.035620, 0.069908, -0.452591 +10817, 0.888260, 0.035620, 0.069908, -0.452591 +10818, 0.888260, 0.035620, 0.069908, -0.452591 +10819, 0.888260, 0.035620, 0.069908, -0.452591 +10820, 0.888260, 0.035620, 0.069908, -0.452591 +10821, 0.888260, 0.035620, 0.069908, -0.452591 +10822, 0.888260, 0.035620, 0.069908, -0.452591 +10823, 0.888260, 0.035620, 0.069908, -0.452591 +10824, 0.888260, 0.035620, 0.069908, -0.452591 +10825, 0.888260, 0.035620, 0.069908, -0.452591 +10826, 0.888260, 0.035620, 0.069908, -0.452591 +10827, 0.888260, 0.035620, 0.069908, -0.452591 +10828, 0.888260, 0.035620, 0.069908, -0.452591 +10829, 0.888260, 0.035620, 0.069908, -0.452591 +10830, 0.888260, 0.035620, 0.069908, -0.452591 +10831, 0.888260, 0.035620, 0.069908, -0.452591 +10832, 0.888260, 0.035620, 0.069908, -0.452591 +10833, 0.888260, 0.035620, 0.069908, -0.452591 +10834, 0.888260, 0.035620, 0.069908, -0.452591 +10835, 0.888260, 0.035620, 0.069908, -0.452591 +10836, 0.888260, 0.035620, 0.069908, -0.452591 +10837, 0.888260, 0.035620, 0.069908, -0.452591 +10838, 0.888260, 0.035620, 0.069908, -0.452591 +10839, 0.888260, 0.035620, 0.069908, -0.452591 +10840, 0.888260, 0.035620, 0.069908, -0.452591 +10841, 0.888260, 0.035620, 0.069908, -0.452591 +10842, 0.888260, 0.035620, 0.069908, -0.452591 +10843, 0.888260, 0.035620, 0.069908, -0.452591 +10844, 0.888260, 0.035620, 0.069908, -0.452591 +10845, 0.888260, 0.035620, 0.069908, -0.452591 +10846, 0.888260, 0.035620, 0.069908, -0.452591 +10847, 0.888260, 0.035620, 0.069908, -0.452591 +10848, 0.888260, 0.035620, 0.069908, -0.452591 +10849, 0.888260, 0.035620, 0.069908, -0.452591 +10850, 0.888260, 0.035620, 0.069908, -0.452591 +10851, 0.888260, 0.035620, 0.069908, -0.452591 +10852, 0.888260, 0.035620, 0.069908, -0.452591 +10853, 0.888260, 0.035620, 0.069908, -0.452591 +10854, 0.888260, 0.035620, 0.069908, -0.452591 +10855, 0.888260, 0.035620, 0.069908, -0.452591 +10856, 0.888260, 0.035620, 0.069908, -0.452591 +10857, 0.888260, 0.035620, 0.069908, -0.452591 +10858, 0.888260, 0.035620, 0.069908, -0.452591 +10859, 0.888260, 0.035620, 0.069908, -0.452591 +10860, 0.888260, 0.035620, 0.069908, -0.452591 +10861, 0.888260, 0.035620, 0.069908, -0.452591 +10862, 0.888260, 0.035620, 0.069908, -0.452591 +10863, 0.888260, 0.035620, 0.069908, -0.452591 +10864, 0.888260, 0.035620, 0.069908, -0.452591 +10865, 0.888260, 0.035620, 0.069908, -0.452591 +10866, 0.888260, 0.035620, 0.069908, -0.452591 +10867, 0.888260, 0.035620, 0.069908, -0.452591 +10868, 0.888260, 0.035620, 0.069908, -0.452591 +10869, 0.888260, 0.035620, 0.069908, -0.452591 +10870, 0.888260, 0.035620, 0.069908, -0.452591 +10871, 0.888260, 0.035620, 0.069908, -0.452591 +10872, 0.888260, 0.035620, 0.069908, -0.452591 +10873, 0.888260, 0.035620, 0.069908, -0.452591 +10874, 0.888260, 0.035620, 0.069908, -0.452591 +10875, 0.888260, 0.035620, 0.069908, -0.452591 +10876, 0.888260, 0.035620, 0.069908, -0.452591 +10877, 0.888260, 0.035620, 0.069908, -0.452591 +10878, 0.888260, 0.035620, 0.069908, -0.452591 +10879, 0.888260, 0.035620, 0.069908, -0.452591 +10880, 0.888260, 0.035620, 0.069908, -0.452591 +10881, 0.888260, 0.035620, 0.069908, -0.452591 +10882, 0.888260, 0.035620, 0.069908, -0.452591 +10883, 0.888260, 0.035620, 0.069908, -0.452591 +10884, 0.888260, 0.035620, 0.069908, -0.452591 +10885, 0.888260, 0.035620, 0.069908, -0.452591 +10886, 0.888260, 0.035620, 0.069908, -0.452591 +10887, 0.888260, 0.035620, 0.069908, -0.452591 +10888, 0.888260, 0.035620, 0.069908, -0.452591 +10889, 0.888260, 0.035620, 0.069908, -0.452591 +10890, 0.888260, 0.035620, 0.069908, -0.452591 +10891, 0.888260, 0.035620, 0.069908, -0.452591 +10892, 0.888260, 0.035620, 0.069908, -0.452591 +10893, 0.888260, 0.035620, 0.069908, -0.452591 +10894, 0.888260, 0.035620, 0.069908, -0.452591 +10895, 0.888260, 0.035620, 0.069908, -0.452591 +10896, 0.888260, 0.035620, 0.069908, -0.452591 +10897, 0.888260, 0.035620, 0.069908, -0.452591 +10898, 0.888260, 0.035620, 0.069908, -0.452591 +10899, 0.888260, 0.035620, 0.069908, -0.452591 +10900, 0.893870, 0.045822, 0.093950, -0.435970 +10901, 0.893870, 0.045822, 0.093950, -0.435970 +10902, 0.893870, 0.045822, 0.093950, -0.435970 +10903, 0.893870, 0.045822, 0.093950, -0.435970 +10904, 0.893870, 0.045822, 0.093950, -0.435970 +10905, 0.893870, 0.045822, 0.093950, -0.435970 +10906, 0.893870, 0.045822, 0.093950, -0.435970 +10907, 0.893870, 0.045822, 0.093950, -0.435970 +10908, 0.893870, 0.045822, 0.093950, -0.435970 +10909, 0.893870, 0.045822, 0.093950, -0.435970 +10910, 0.893870, 0.045822, 0.093950, -0.435970 +10911, 0.893870, 0.045822, 0.093950, -0.435970 +10912, 0.893870, 0.045822, 0.093950, -0.435970 +10913, 0.893870, 0.045822, 0.093950, -0.435970 +10914, 0.893870, 0.045822, 0.093950, -0.435970 +10915, 0.893870, 0.045822, 0.093950, -0.435970 +10916, 0.893870, 0.045822, 0.093950, -0.435970 +10917, 0.893870, 0.045822, 0.093950, -0.435970 +10918, 0.893870, 0.045822, 0.093950, -0.435970 +10919, 0.893870, 0.045822, 0.093950, -0.435970 +10920, 0.893870, 0.045822, 0.093950, -0.435970 +10921, 0.893870, 0.045822, 0.093950, -0.435970 +10922, 0.893870, 0.045822, 0.093950, -0.435970 +10923, 0.893870, 0.045822, 0.093950, -0.435970 +10924, 0.893870, 0.045822, 0.093950, -0.435970 +10925, 0.893870, 0.045822, 0.093950, -0.435970 +10926, 0.893870, 0.045822, 0.093950, -0.435970 +10927, 0.893870, 0.045822, 0.093950, -0.435970 +10928, 0.893870, 0.045822, 0.093950, -0.435970 +10929, 0.893870, 0.045822, 0.093950, -0.435970 +10930, 0.893870, 0.045822, 0.093950, -0.435970 +10931, 0.893870, 0.045822, 0.093950, -0.435970 +10932, 0.893870, 0.045822, 0.093950, -0.435970 +10933, 0.893870, 0.045822, 0.093950, -0.435970 +10934, 0.893870, 0.045822, 0.093950, -0.435970 +10935, 0.893870, 0.045822, 0.093950, -0.435970 +10936, 0.893870, 0.045822, 0.093950, -0.435970 +10937, 0.893870, 0.045822, 0.093950, -0.435970 +10938, 0.893870, 0.045822, 0.093950, -0.435970 +10939, 0.893870, 0.045822, 0.093950, -0.435970 +10940, 0.893870, 0.045822, 0.093950, -0.435970 +10941, 0.893870, 0.045822, 0.093950, -0.435970 +10942, 0.893870, 0.045822, 0.093950, -0.435970 +10943, 0.893870, 0.045822, 0.093950, -0.435970 +10944, 0.893870, 0.045822, 0.093950, -0.435970 +10945, 0.893870, 0.045822, 0.093950, -0.435970 +10946, 0.893870, 0.045822, 0.093950, -0.435970 +10947, 0.893870, 0.045822, 0.093950, -0.435970 +10948, 0.893870, 0.045822, 0.093950, -0.435970 +10949, 0.893870, 0.045822, 0.093950, -0.435970 +10950, 0.893870, 0.045822, 0.093950, -0.435970 +10951, 0.893870, 0.045822, 0.093950, -0.435970 +10952, 0.893870, 0.045822, 0.093950, -0.435970 +10953, 0.893870, 0.045822, 0.093950, -0.435970 +10954, 0.893870, 0.045822, 0.093950, -0.435970 +10955, 0.893870, 0.045822, 0.093950, -0.435970 +10956, 0.893870, 0.045822, 0.093950, -0.435970 +10957, 0.893870, 0.045822, 0.093950, -0.435970 +10958, 0.893870, 0.045822, 0.093950, -0.435970 +10959, 0.893870, 0.045822, 0.093950, -0.435970 +10960, 0.893870, 0.045822, 0.093950, -0.435970 +10961, 0.893870, 0.045822, 0.093950, -0.435970 +10962, 0.893870, 0.045822, 0.093950, -0.435970 +10963, 0.893870, 0.045822, 0.093950, -0.435970 +10964, 0.893870, 0.045822, 0.093950, -0.435970 +10965, 0.893870, 0.045822, 0.093950, -0.435970 +10966, 0.893870, 0.045822, 0.093950, -0.435970 +10967, 0.893870, 0.045822, 0.093950, -0.435970 +10968, 0.893870, 0.045822, 0.093950, -0.435970 +10969, 0.893870, 0.045822, 0.093950, -0.435970 +10970, 0.893870, 0.045822, 0.093950, -0.435970 +10971, 0.893870, 0.045822, 0.093950, -0.435970 +10972, 0.893870, 0.045822, 0.093950, -0.435970 +10973, 0.893870, 0.045822, 0.093950, -0.435970 +10974, 0.893870, 0.045822, 0.093950, -0.435970 +10975, 0.893870, 0.045822, 0.093950, -0.435970 +10976, 0.893870, 0.045822, 0.093950, -0.435970 +10977, 0.893870, 0.045822, 0.093950, -0.435970 +10978, 0.893870, 0.045822, 0.093950, -0.435970 +10979, 0.893870, 0.045822, 0.093950, -0.435970 +10980, 0.893870, 0.045822, 0.093950, -0.435970 +10981, 0.893870, 0.045822, 0.093950, -0.435970 +10982, 0.893870, 0.045822, 0.093950, -0.435970 +10983, 0.893870, 0.045822, 0.093950, -0.435970 +10984, 0.893870, 0.045822, 0.093950, -0.435970 +10985, 0.893870, 0.045822, 0.093950, -0.435970 +10986, 0.893870, 0.045822, 0.093950, -0.435970 +10987, 0.893870, 0.045822, 0.093950, -0.435970 +10988, 0.893870, 0.045822, 0.093950, -0.435970 +10989, 0.893870, 0.045822, 0.093950, -0.435970 +10990, 0.893870, 0.045822, 0.093950, -0.435970 +10991, 0.893870, 0.045822, 0.093950, -0.435970 +10992, 0.893870, 0.045822, 0.093950, -0.435970 +10993, 0.893870, 0.045822, 0.093950, -0.435970 +10994, 0.893870, 0.045822, 0.093950, -0.435970 +10995, 0.893870, 0.045822, 0.093950, -0.435970 +10996, 0.893870, 0.045822, 0.093950, -0.435970 +10997, 0.893870, 0.045822, 0.093950, -0.435970 +10998, 0.893870, 0.045822, 0.093950, -0.435970 +10999, 0.893870, 0.045822, 0.093950, -0.435970 +11000, 0.898554, 0.055163, 0.118297, -0.419003 +11001, 0.898554, 0.055163, 0.118297, -0.419003 +11002, 0.898554, 0.055163, 0.118297, -0.419003 +11003, 0.898554, 0.055163, 0.118297, -0.419003 +11004, 0.898554, 0.055163, 0.118297, -0.419003 +11005, 0.898554, 0.055163, 0.118297, -0.419003 +11006, 0.898554, 0.055163, 0.118297, -0.419003 +11007, 0.898554, 0.055163, 0.118297, -0.419003 +11008, 0.898554, 0.055163, 0.118297, -0.419003 +11009, 0.898554, 0.055163, 0.118297, -0.419003 +11010, 0.898554, 0.055163, 0.118297, -0.419003 +11011, 0.898554, 0.055163, 0.118297, -0.419003 +11012, 0.898554, 0.055163, 0.118297, -0.419003 +11013, 0.898554, 0.055163, 0.118297, -0.419003 +11014, 0.898554, 0.055163, 0.118297, -0.419003 +11015, 0.898554, 0.055163, 0.118297, -0.419003 +11016, 0.898554, 0.055163, 0.118297, -0.419003 +11017, 0.898554, 0.055163, 0.118297, -0.419003 +11018, 0.898554, 0.055163, 0.118297, -0.419003 +11019, 0.898554, 0.055163, 0.118297, -0.419003 +11020, 0.898554, 0.055163, 0.118297, -0.419003 +11021, 0.898554, 0.055163, 0.118297, -0.419003 +11022, 0.898554, 0.055163, 0.118297, -0.419003 +11023, 0.898554, 0.055163, 0.118297, -0.419003 +11024, 0.898554, 0.055163, 0.118297, -0.419003 +11025, 0.898554, 0.055163, 0.118297, -0.419003 +11026, 0.898554, 0.055163, 0.118297, -0.419003 +11027, 0.898554, 0.055163, 0.118297, -0.419003 +11028, 0.898554, 0.055163, 0.118297, -0.419003 +11029, 0.898554, 0.055163, 0.118297, -0.419003 +11030, 0.898554, 0.055163, 0.118297, -0.419003 +11031, 0.898554, 0.055163, 0.118297, -0.419003 +11032, 0.898554, 0.055163, 0.118297, -0.419003 +11033, 0.898554, 0.055163, 0.118297, -0.419003 +11034, 0.898554, 0.055163, 0.118297, -0.419003 +11035, 0.898554, 0.055163, 0.118297, -0.419003 +11036, 0.898554, 0.055163, 0.118297, -0.419003 +11037, 0.898554, 0.055163, 0.118297, -0.419003 +11038, 0.898554, 0.055163, 0.118297, -0.419003 +11039, 0.898554, 0.055163, 0.118297, -0.419003 +11040, 0.898554, 0.055163, 0.118297, -0.419003 +11041, 0.898554, 0.055163, 0.118297, -0.419003 +11042, 0.898554, 0.055163, 0.118297, -0.419003 +11043, 0.898554, 0.055163, 0.118297, -0.419003 +11044, 0.898554, 0.055163, 0.118297, -0.419003 +11045, 0.898554, 0.055163, 0.118297, -0.419003 +11046, 0.898554, 0.055163, 0.118297, -0.419003 +11047, 0.898554, 0.055163, 0.118297, -0.419003 +11048, 0.898554, 0.055163, 0.118297, -0.419003 +11049, 0.898554, 0.055163, 0.118297, -0.419003 +11050, 0.898554, 0.055163, 0.118297, -0.419003 +11051, 0.898554, 0.055163, 0.118297, -0.419003 +11052, 0.898554, 0.055163, 0.118297, -0.419003 +11053, 0.898554, 0.055163, 0.118297, -0.419003 +11054, 0.898554, 0.055163, 0.118297, -0.419003 +11055, 0.898554, 0.055163, 0.118297, -0.419003 +11056, 0.898554, 0.055163, 0.118297, -0.419003 +11057, 0.898554, 0.055163, 0.118297, -0.419003 +11058, 0.898554, 0.055163, 0.118297, -0.419003 +11059, 0.898554, 0.055163, 0.118297, -0.419003 +11060, 0.898554, 0.055163, 0.118297, -0.419003 +11061, 0.898554, 0.055163, 0.118297, -0.419003 +11062, 0.898554, 0.055163, 0.118297, -0.419003 +11063, 0.898554, 0.055163, 0.118297, -0.419003 +11064, 0.898554, 0.055163, 0.118297, -0.419003 +11065, 0.898554, 0.055163, 0.118297, -0.419003 +11066, 0.898554, 0.055163, 0.118297, -0.419003 +11067, 0.898554, 0.055163, 0.118297, -0.419003 +11068, 0.898554, 0.055163, 0.118297, -0.419003 +11069, 0.898554, 0.055163, 0.118297, -0.419003 +11070, 0.898554, 0.055163, 0.118297, -0.419003 +11071, 0.898554, 0.055163, 0.118297, -0.419003 +11072, 0.898554, 0.055163, 0.118297, -0.419003 +11073, 0.898554, 0.055163, 0.118297, -0.419003 +11074, 0.898554, 0.055163, 0.118297, -0.419003 +11075, 0.898554, 0.055163, 0.118297, -0.419003 +11076, 0.898554, 0.055163, 0.118297, -0.419003 +11077, 0.898554, 0.055163, 0.118297, -0.419003 +11078, 0.898554, 0.055163, 0.118297, -0.419003 +11079, 0.898554, 0.055163, 0.118297, -0.419003 +11080, 0.898554, 0.055163, 0.118297, -0.419003 +11081, 0.898554, 0.055163, 0.118297, -0.419003 +11082, 0.898554, 0.055163, 0.118297, -0.419003 +11083, 0.898554, 0.055163, 0.118297, -0.419003 +11084, 0.898554, 0.055163, 0.118297, -0.419003 +11085, 0.898554, 0.055163, 0.118297, -0.419003 +11086, 0.898554, 0.055163, 0.118297, -0.419003 +11087, 0.898554, 0.055163, 0.118297, -0.419003 +11088, 0.898554, 0.055163, 0.118297, -0.419003 +11089, 0.898554, 0.055163, 0.118297, -0.419003 +11090, 0.898554, 0.055163, 0.118297, -0.419003 +11091, 0.898554, 0.055163, 0.118297, -0.419003 +11092, 0.898554, 0.055163, 0.118297, -0.419003 +11093, 0.898554, 0.055163, 0.118297, -0.419003 +11094, 0.898554, 0.055163, 0.118297, -0.419003 +11095, 0.898554, 0.055163, 0.118297, -0.419003 +11096, 0.898554, 0.055163, 0.118297, -0.419003 +11097, 0.898554, 0.055163, 0.118297, -0.419003 +11098, 0.898554, 0.055163, 0.118297, -0.419003 +11099, 0.898554, 0.055163, 0.118297, -0.419003 +11100, 0.902298, 0.063628, 0.142910, -0.401729 +11101, 0.902298, 0.063628, 0.142910, -0.401729 +11102, 0.902298, 0.063628, 0.142910, -0.401729 +11103, 0.902298, 0.063628, 0.142910, -0.401729 +11104, 0.902298, 0.063628, 0.142910, -0.401729 +11105, 0.902298, 0.063628, 0.142910, -0.401729 +11106, 0.902298, 0.063628, 0.142910, -0.401729 +11107, 0.902298, 0.063628, 0.142910, -0.401729 +11108, 0.902298, 0.063628, 0.142910, -0.401729 +11109, 0.902298, 0.063628, 0.142910, -0.401729 +11110, 0.902298, 0.063628, 0.142910, -0.401729 +11111, 0.902298, 0.063628, 0.142910, -0.401729 +11112, 0.902298, 0.063628, 0.142910, -0.401729 +11113, 0.902298, 0.063628, 0.142910, -0.401729 +11114, 0.902298, 0.063628, 0.142910, -0.401729 +11115, 0.902298, 0.063628, 0.142910, -0.401729 +11116, 0.902298, 0.063628, 0.142910, -0.401729 +11117, 0.902298, 0.063628, 0.142910, -0.401729 +11118, 0.902298, 0.063628, 0.142910, -0.401729 +11119, 0.902298, 0.063628, 0.142910, -0.401729 +11120, 0.902298, 0.063628, 0.142910, -0.401729 +11121, 0.902298, 0.063628, 0.142910, -0.401729 +11122, 0.902298, 0.063628, 0.142910, -0.401729 +11123, 0.902298, 0.063628, 0.142910, -0.401729 +11124, 0.902298, 0.063628, 0.142910, -0.401729 +11125, 0.902298, 0.063628, 0.142910, -0.401729 +11126, 0.902298, 0.063628, 0.142910, -0.401729 +11127, 0.902298, 0.063628, 0.142910, -0.401729 +11128, 0.902298, 0.063628, 0.142910, -0.401729 +11129, 0.902298, 0.063628, 0.142910, -0.401729 +11130, 0.902298, 0.063628, 0.142910, -0.401729 +11131, 0.902298, 0.063628, 0.142910, -0.401729 +11132, 0.902298, 0.063628, 0.142910, -0.401729 +11133, 0.902298, 0.063628, 0.142910, -0.401729 +11134, 0.902298, 0.063628, 0.142910, -0.401729 +11135, 0.902298, 0.063628, 0.142910, -0.401729 +11136, 0.902298, 0.063628, 0.142910, -0.401729 +11137, 0.902298, 0.063628, 0.142910, -0.401729 +11138, 0.902298, 0.063628, 0.142910, -0.401729 +11139, 0.902298, 0.063628, 0.142910, -0.401729 +11140, 0.902298, 0.063628, 0.142910, -0.401729 +11141, 0.902298, 0.063628, 0.142910, -0.401729 +11142, 0.902298, 0.063628, 0.142910, -0.401729 +11143, 0.902298, 0.063628, 0.142910, -0.401729 +11144, 0.902298, 0.063628, 0.142910, -0.401729 +11145, 0.902298, 0.063628, 0.142910, -0.401729 +11146, 0.902298, 0.063628, 0.142910, -0.401729 +11147, 0.902298, 0.063628, 0.142910, -0.401729 +11148, 0.902298, 0.063628, 0.142910, -0.401729 +11149, 0.902298, 0.063628, 0.142910, -0.401729 +11150, 0.902298, 0.063628, 0.142910, -0.401729 +11151, 0.902298, 0.063628, 0.142910, -0.401729 +11152, 0.902298, 0.063628, 0.142910, -0.401729 +11153, 0.902298, 0.063628, 0.142910, -0.401729 +11154, 0.902298, 0.063628, 0.142910, -0.401729 +11155, 0.902298, 0.063628, 0.142910, -0.401729 +11156, 0.902298, 0.063628, 0.142910, -0.401729 +11157, 0.902298, 0.063628, 0.142910, -0.401729 +11158, 0.902298, 0.063628, 0.142910, -0.401729 +11159, 0.902298, 0.063628, 0.142910, -0.401729 +11160, 0.902298, 0.063628, 0.142910, -0.401729 +11161, 0.902298, 0.063628, 0.142910, -0.401729 +11162, 0.902298, 0.063628, 0.142910, -0.401729 +11163, 0.902298, 0.063628, 0.142910, -0.401729 +11164, 0.902298, 0.063628, 0.142910, -0.401729 +11165, 0.902298, 0.063628, 0.142910, -0.401729 +11166, 0.902298, 0.063628, 0.142910, -0.401729 +11167, 0.902298, 0.063628, 0.142910, -0.401729 +11168, 0.902298, 0.063628, 0.142910, -0.401729 +11169, 0.902298, 0.063628, 0.142910, -0.401729 +11170, 0.902298, 0.063628, 0.142910, -0.401729 +11171, 0.902298, 0.063628, 0.142910, -0.401729 +11172, 0.902298, 0.063628, 0.142910, -0.401729 +11173, 0.902298, 0.063628, 0.142910, -0.401729 +11174, 0.902298, 0.063628, 0.142910, -0.401729 +11175, 0.902298, 0.063628, 0.142910, -0.401729 +11176, 0.902298, 0.063628, 0.142910, -0.401729 +11177, 0.902298, 0.063628, 0.142910, -0.401729 +11178, 0.902298, 0.063628, 0.142910, -0.401729 +11179, 0.902298, 0.063628, 0.142910, -0.401729 +11180, 0.902298, 0.063628, 0.142910, -0.401729 +11181, 0.902298, 0.063628, 0.142910, -0.401729 +11182, 0.902298, 0.063628, 0.142910, -0.401729 +11183, 0.902298, 0.063628, 0.142910, -0.401729 +11184, 0.902298, 0.063628, 0.142910, -0.401729 +11185, 0.902298, 0.063628, 0.142910, -0.401729 +11186, 0.902298, 0.063628, 0.142910, -0.401729 +11187, 0.902298, 0.063628, 0.142910, -0.401729 +11188, 0.902298, 0.063628, 0.142910, -0.401729 +11189, 0.902298, 0.063628, 0.142910, -0.401729 +11190, 0.902298, 0.063628, 0.142910, -0.401729 +11191, 0.902298, 0.063628, 0.142910, -0.401729 +11192, 0.902298, 0.063628, 0.142910, -0.401729 +11193, 0.902298, 0.063628, 0.142910, -0.401729 +11194, 0.902298, 0.063628, 0.142910, -0.401729 +11195, 0.902298, 0.063628, 0.142910, -0.401729 +11196, 0.902298, 0.063628, 0.142910, -0.401729 +11197, 0.902298, 0.063628, 0.142910, -0.401729 +11198, 0.902298, 0.063628, 0.142910, -0.401729 +11199, 0.902298, 0.063628, 0.142910, -0.401729 +11200, 0.905091, 0.071205, 0.167749, -0.384188 +11201, 0.905091, 0.071205, 0.167749, -0.384188 +11202, 0.905091, 0.071205, 0.167749, -0.384188 +11203, 0.905091, 0.071205, 0.167749, -0.384188 +11204, 0.905091, 0.071205, 0.167749, -0.384188 +11205, 0.905091, 0.071205, 0.167749, -0.384188 +11206, 0.905091, 0.071205, 0.167749, -0.384188 +11207, 0.905091, 0.071205, 0.167749, -0.384188 +11208, 0.905091, 0.071205, 0.167749, -0.384188 +11209, 0.905091, 0.071205, 0.167749, -0.384188 +11210, 0.905091, 0.071205, 0.167749, -0.384188 +11211, 0.905091, 0.071205, 0.167749, -0.384188 +11212, 0.905091, 0.071205, 0.167749, -0.384188 +11213, 0.905091, 0.071205, 0.167749, -0.384188 +11214, 0.905091, 0.071205, 0.167749, -0.384188 +11215, 0.905091, 0.071205, 0.167749, -0.384188 +11216, 0.905091, 0.071205, 0.167749, -0.384188 +11217, 0.905091, 0.071205, 0.167749, -0.384188 +11218, 0.905091, 0.071205, 0.167749, -0.384188 +11219, 0.905091, 0.071205, 0.167749, -0.384188 +11220, 0.905091, 0.071205, 0.167749, -0.384188 +11221, 0.905091, 0.071205, 0.167749, -0.384188 +11222, 0.905091, 0.071205, 0.167749, -0.384188 +11223, 0.905091, 0.071205, 0.167749, -0.384188 +11224, 0.905091, 0.071205, 0.167749, -0.384188 +11225, 0.905091, 0.071205, 0.167749, -0.384188 +11226, 0.905091, 0.071205, 0.167749, -0.384188 +11227, 0.905091, 0.071205, 0.167749, -0.384188 +11228, 0.905091, 0.071205, 0.167749, -0.384188 +11229, 0.905091, 0.071205, 0.167749, -0.384188 +11230, 0.905091, 0.071205, 0.167749, -0.384188 +11231, 0.905091, 0.071205, 0.167749, -0.384188 +11232, 0.905091, 0.071205, 0.167749, -0.384188 +11233, 0.905091, 0.071205, 0.167749, -0.384188 +11234, 0.905091, 0.071205, 0.167749, -0.384188 +11235, 0.905091, 0.071205, 0.167749, -0.384188 +11236, 0.905091, 0.071205, 0.167749, -0.384188 +11237, 0.905091, 0.071205, 0.167749, -0.384188 +11238, 0.905091, 0.071205, 0.167749, -0.384188 +11239, 0.905091, 0.071205, 0.167749, -0.384188 +11240, 0.905091, 0.071205, 0.167749, -0.384188 +11241, 0.905091, 0.071205, 0.167749, -0.384188 +11242, 0.905091, 0.071205, 0.167749, -0.384188 +11243, 0.905091, 0.071205, 0.167749, -0.384188 +11244, 0.905091, 0.071205, 0.167749, -0.384188 +11245, 0.905091, 0.071205, 0.167749, -0.384188 +11246, 0.905091, 0.071205, 0.167749, -0.384188 +11247, 0.905091, 0.071205, 0.167749, -0.384188 +11248, 0.905091, 0.071205, 0.167749, -0.384188 +11249, 0.905091, 0.071205, 0.167749, -0.384188 +11250, 0.905091, 0.071205, 0.167749, -0.384188 +11251, 0.905091, 0.071205, 0.167749, -0.384188 +11252, 0.905091, 0.071205, 0.167749, -0.384188 +11253, 0.905091, 0.071205, 0.167749, -0.384188 +11254, 0.905091, 0.071205, 0.167749, -0.384188 +11255, 0.905091, 0.071205, 0.167749, -0.384188 +11256, 0.905091, 0.071205, 0.167749, -0.384188 +11257, 0.905091, 0.071205, 0.167749, -0.384188 +11258, 0.905091, 0.071205, 0.167749, -0.384188 +11259, 0.905091, 0.071205, 0.167749, -0.384188 +11260, 0.905091, 0.071205, 0.167749, -0.384188 +11261, 0.905091, 0.071205, 0.167749, -0.384188 +11262, 0.905091, 0.071205, 0.167749, -0.384188 +11263, 0.905091, 0.071205, 0.167749, -0.384188 +11264, 0.905091, 0.071205, 0.167749, -0.384188 +11265, 0.905091, 0.071205, 0.167749, -0.384188 +11266, 0.905091, 0.071205, 0.167749, -0.384188 +11267, 0.905091, 0.071205, 0.167749, -0.384188 +11268, 0.905091, 0.071205, 0.167749, -0.384188 +11269, 0.905091, 0.071205, 0.167749, -0.384188 +11270, 0.905091, 0.071205, 0.167749, -0.384188 +11271, 0.905091, 0.071205, 0.167749, -0.384188 +11272, 0.905091, 0.071205, 0.167749, -0.384188 +11273, 0.905091, 0.071205, 0.167749, -0.384188 +11274, 0.905091, 0.071205, 0.167749, -0.384188 +11275, 0.905091, 0.071205, 0.167749, -0.384188 +11276, 0.905091, 0.071205, 0.167749, -0.384188 +11277, 0.905091, 0.071205, 0.167749, -0.384188 +11278, 0.905091, 0.071205, 0.167749, -0.384188 +11279, 0.905091, 0.071205, 0.167749, -0.384188 +11280, 0.905091, 0.071205, 0.167749, -0.384188 +11281, 0.905091, 0.071205, 0.167749, -0.384188 +11282, 0.905091, 0.071205, 0.167749, -0.384188 +11283, 0.905091, 0.071205, 0.167749, -0.384188 +11284, 0.905091, 0.071205, 0.167749, -0.384188 +11285, 0.905091, 0.071205, 0.167749, -0.384188 +11286, 0.905091, 0.071205, 0.167749, -0.384188 +11287, 0.905091, 0.071205, 0.167749, -0.384188 +11288, 0.905091, 0.071205, 0.167749, -0.384188 +11289, 0.905091, 0.071205, 0.167749, -0.384188 +11290, 0.905091, 0.071205, 0.167749, -0.384188 +11291, 0.905091, 0.071205, 0.167749, -0.384188 +11292, 0.905091, 0.071205, 0.167749, -0.384188 +11293, 0.905091, 0.071205, 0.167749, -0.384188 +11294, 0.905091, 0.071205, 0.167749, -0.384188 +11295, 0.905091, 0.071205, 0.167749, -0.384188 +11296, 0.905091, 0.071205, 0.167749, -0.384188 +11297, 0.905091, 0.071205, 0.167749, -0.384188 +11298, 0.905091, 0.071205, 0.167749, -0.384188 +11299, 0.905091, 0.071205, 0.167749, -0.384188 +11300, 0.906923, 0.077885, 0.192772, -0.366421 +11301, 0.906923, 0.077885, 0.192772, -0.366421 +11302, 0.906923, 0.077885, 0.192772, -0.366421 +11303, 0.906923, 0.077885, 0.192772, -0.366421 +11304, 0.906923, 0.077885, 0.192772, -0.366421 +11305, 0.906923, 0.077885, 0.192772, -0.366421 +11306, 0.906923, 0.077885, 0.192772, -0.366421 +11307, 0.906923, 0.077885, 0.192772, -0.366421 +11308, 0.906923, 0.077885, 0.192772, -0.366421 +11309, 0.906923, 0.077885, 0.192772, -0.366421 +11310, 0.906923, 0.077885, 0.192772, -0.366421 +11311, 0.906923, 0.077885, 0.192772, -0.366421 +11312, 0.906923, 0.077885, 0.192772, -0.366421 +11313, 0.906923, 0.077885, 0.192772, -0.366421 +11314, 0.906923, 0.077885, 0.192772, -0.366421 +11315, 0.906923, 0.077885, 0.192772, -0.366421 +11316, 0.906923, 0.077885, 0.192772, -0.366421 +11317, 0.906923, 0.077885, 0.192772, -0.366421 +11318, 0.906923, 0.077885, 0.192772, -0.366421 +11319, 0.906923, 0.077885, 0.192772, -0.366421 +11320, 0.906923, 0.077885, 0.192772, -0.366421 +11321, 0.906923, 0.077885, 0.192772, -0.366421 +11322, 0.906923, 0.077885, 0.192772, -0.366421 +11323, 0.906923, 0.077885, 0.192772, -0.366421 +11324, 0.906923, 0.077885, 0.192772, -0.366421 +11325, 0.906923, 0.077885, 0.192772, -0.366421 +11326, 0.906923, 0.077885, 0.192772, -0.366421 +11327, 0.906923, 0.077885, 0.192772, -0.366421 +11328, 0.906923, 0.077885, 0.192772, -0.366421 +11329, 0.906923, 0.077885, 0.192772, -0.366421 +11330, 0.906923, 0.077885, 0.192772, -0.366421 +11331, 0.906923, 0.077885, 0.192772, -0.366421 +11332, 0.906923, 0.077885, 0.192772, -0.366421 +11333, 0.906923, 0.077885, 0.192772, -0.366421 +11334, 0.906923, 0.077885, 0.192772, -0.366421 +11335, 0.906923, 0.077885, 0.192772, -0.366421 +11336, 0.906923, 0.077885, 0.192772, -0.366421 +11337, 0.906923, 0.077885, 0.192772, -0.366421 +11338, 0.906923, 0.077885, 0.192772, -0.366421 +11339, 0.906923, 0.077885, 0.192772, -0.366421 +11340, 0.906923, 0.077885, 0.192772, -0.366421 +11341, 0.906923, 0.077885, 0.192772, -0.366421 +11342, 0.906923, 0.077885, 0.192772, -0.366421 +11343, 0.906923, 0.077885, 0.192772, -0.366421 +11344, 0.906923, 0.077885, 0.192772, -0.366421 +11345, 0.906923, 0.077885, 0.192772, -0.366421 +11346, 0.906923, 0.077885, 0.192772, -0.366421 +11347, 0.906923, 0.077885, 0.192772, -0.366421 +11348, 0.906923, 0.077885, 0.192772, -0.366421 +11349, 0.906923, 0.077885, 0.192772, -0.366421 +11350, 0.906923, 0.077885, 0.192772, -0.366421 +11351, 0.906923, 0.077885, 0.192772, -0.366421 +11352, 0.906923, 0.077885, 0.192772, -0.366421 +11353, 0.906923, 0.077885, 0.192772, -0.366421 +11354, 0.906923, 0.077885, 0.192772, -0.366421 +11355, 0.906923, 0.077885, 0.192772, -0.366421 +11356, 0.906923, 0.077885, 0.192772, -0.366421 +11357, 0.906923, 0.077885, 0.192772, -0.366421 +11358, 0.906923, 0.077885, 0.192772, -0.366421 +11359, 0.906923, 0.077885, 0.192772, -0.366421 +11360, 0.906923, 0.077885, 0.192772, -0.366421 +11361, 0.906923, 0.077885, 0.192772, -0.366421 +11362, 0.906923, 0.077885, 0.192772, -0.366421 +11363, 0.906923, 0.077885, 0.192772, -0.366421 +11364, 0.906923, 0.077885, 0.192772, -0.366421 +11365, 0.906923, 0.077885, 0.192772, -0.366421 +11366, 0.906923, 0.077885, 0.192772, -0.366421 +11367, 0.906923, 0.077885, 0.192772, -0.366421 +11368, 0.906923, 0.077885, 0.192772, -0.366421 +11369, 0.906923, 0.077885, 0.192772, -0.366421 +11370, 0.906923, 0.077885, 0.192772, -0.366421 +11371, 0.906923, 0.077885, 0.192772, -0.366421 +11372, 0.906923, 0.077885, 0.192772, -0.366421 +11373, 0.906923, 0.077885, 0.192772, -0.366421 +11374, 0.906923, 0.077885, 0.192772, -0.366421 +11375, 0.906923, 0.077885, 0.192772, -0.366421 +11376, 0.906923, 0.077885, 0.192772, -0.366421 +11377, 0.906923, 0.077885, 0.192772, -0.366421 +11378, 0.906923, 0.077885, 0.192772, -0.366421 +11379, 0.906923, 0.077885, 0.192772, -0.366421 +11380, 0.906923, 0.077885, 0.192772, -0.366421 +11381, 0.906923, 0.077885, 0.192772, -0.366421 +11382, 0.906923, 0.077885, 0.192772, -0.366421 +11383, 0.906923, 0.077885, 0.192772, -0.366421 +11384, 0.906923, 0.077885, 0.192772, -0.366421 +11385, 0.906923, 0.077885, 0.192772, -0.366421 +11386, 0.906923, 0.077885, 0.192772, -0.366421 +11387, 0.906923, 0.077885, 0.192772, -0.366421 +11388, 0.906923, 0.077885, 0.192772, -0.366421 +11389, 0.906923, 0.077885, 0.192772, -0.366421 +11390, 0.906923, 0.077885, 0.192772, -0.366421 +11391, 0.906923, 0.077885, 0.192772, -0.366421 +11392, 0.906923, 0.077885, 0.192772, -0.366421 +11393, 0.906923, 0.077885, 0.192772, -0.366421 +11394, 0.906923, 0.077885, 0.192772, -0.366421 +11395, 0.906923, 0.077885, 0.192772, -0.366421 +11396, 0.906923, 0.077885, 0.192772, -0.366421 +11397, 0.906923, 0.077885, 0.192772, -0.366421 +11398, 0.906923, 0.077885, 0.192772, -0.366421 +11399, 0.906923, 0.077885, 0.192772, -0.366421 +11400, 0.907786, 0.083659, 0.217940, -0.348466 +11401, 0.907786, 0.083659, 0.217940, -0.348466 +11402, 0.907786, 0.083659, 0.217940, -0.348466 +11403, 0.907786, 0.083659, 0.217940, -0.348466 +11404, 0.907786, 0.083659, 0.217940, -0.348466 +11405, 0.907786, 0.083659, 0.217940, -0.348466 +11406, 0.907786, 0.083659, 0.217940, -0.348466 +11407, 0.907786, 0.083659, 0.217940, -0.348466 +11408, 0.907786, 0.083659, 0.217940, -0.348466 +11409, 0.907786, 0.083659, 0.217940, -0.348466 +11410, 0.907786, 0.083659, 0.217940, -0.348466 +11411, 0.907786, 0.083659, 0.217940, -0.348466 +11412, 0.907786, 0.083659, 0.217940, -0.348466 +11413, 0.907786, 0.083659, 0.217940, -0.348466 +11414, 0.907786, 0.083659, 0.217940, -0.348466 +11415, 0.907786, 0.083659, 0.217940, -0.348466 +11416, 0.907786, 0.083659, 0.217940, -0.348466 +11417, 0.907786, 0.083659, 0.217940, -0.348466 +11418, 0.907786, 0.083659, 0.217940, -0.348466 +11419, 0.907786, 0.083659, 0.217940, -0.348466 +11420, 0.907786, 0.083659, 0.217940, -0.348466 +11421, 0.907786, 0.083659, 0.217940, -0.348466 +11422, 0.907786, 0.083659, 0.217940, -0.348466 +11423, 0.907786, 0.083659, 0.217940, -0.348466 +11424, 0.907786, 0.083659, 0.217940, -0.348466 +11425, 0.907786, 0.083659, 0.217940, -0.348466 +11426, 0.907786, 0.083659, 0.217940, -0.348466 +11427, 0.907786, 0.083659, 0.217940, -0.348466 +11428, 0.907786, 0.083659, 0.217940, -0.348466 +11429, 0.907786, 0.083659, 0.217940, -0.348466 +11430, 0.907786, 0.083659, 0.217940, -0.348466 +11431, 0.907786, 0.083659, 0.217940, -0.348466 +11432, 0.907786, 0.083659, 0.217940, -0.348466 +11433, 0.907786, 0.083659, 0.217940, -0.348466 +11434, 0.907786, 0.083659, 0.217940, -0.348466 +11435, 0.907786, 0.083659, 0.217940, -0.348466 +11436, 0.907786, 0.083659, 0.217940, -0.348466 +11437, 0.907786, 0.083659, 0.217940, -0.348466 +11438, 0.907786, 0.083659, 0.217940, -0.348466 +11439, 0.907786, 0.083659, 0.217940, -0.348466 +11440, 0.907786, 0.083659, 0.217940, -0.348466 +11441, 0.907786, 0.083659, 0.217940, -0.348466 +11442, 0.907786, 0.083659, 0.217940, -0.348466 +11443, 0.907786, 0.083659, 0.217940, -0.348466 +11444, 0.907786, 0.083659, 0.217940, -0.348466 +11445, 0.907786, 0.083659, 0.217940, -0.348466 +11446, 0.907786, 0.083659, 0.217940, -0.348466 +11447, 0.907786, 0.083659, 0.217940, -0.348466 +11448, 0.907786, 0.083659, 0.217940, -0.348466 +11449, 0.907786, 0.083659, 0.217940, -0.348466 +11450, 0.907786, 0.083659, 0.217940, -0.348466 +11451, 0.907786, 0.083659, 0.217940, -0.348466 +11452, 0.907786, 0.083659, 0.217940, -0.348466 +11453, 0.907786, 0.083659, 0.217940, -0.348466 +11454, 0.907786, 0.083659, 0.217940, -0.348466 +11455, 0.907786, 0.083659, 0.217940, -0.348466 +11456, 0.907786, 0.083659, 0.217940, -0.348466 +11457, 0.907786, 0.083659, 0.217940, -0.348466 +11458, 0.907786, 0.083659, 0.217940, -0.348466 +11459, 0.907786, 0.083659, 0.217940, -0.348466 +11460, 0.907786, 0.083659, 0.217940, -0.348466 +11461, 0.907786, 0.083659, 0.217940, -0.348466 +11462, 0.907786, 0.083659, 0.217940, -0.348466 +11463, 0.907786, 0.083659, 0.217940, -0.348466 +11464, 0.907786, 0.083659, 0.217940, -0.348466 +11465, 0.907786, 0.083659, 0.217940, -0.348466 +11466, 0.907786, 0.083659, 0.217940, -0.348466 +11467, 0.907786, 0.083659, 0.217940, -0.348466 +11468, 0.907786, 0.083659, 0.217940, -0.348466 +11469, 0.907786, 0.083659, 0.217940, -0.348466 +11470, 0.907786, 0.083659, 0.217940, -0.348466 +11471, 0.907786, 0.083659, 0.217940, -0.348466 +11472, 0.907786, 0.083659, 0.217940, -0.348466 +11473, 0.907786, 0.083659, 0.217940, -0.348466 +11474, 0.907786, 0.083659, 0.217940, -0.348466 +11475, 0.907786, 0.083659, 0.217940, -0.348466 +11476, 0.907786, 0.083659, 0.217940, -0.348466 +11477, 0.907786, 0.083659, 0.217940, -0.348466 +11478, 0.907786, 0.083659, 0.217940, -0.348466 +11479, 0.907786, 0.083659, 0.217940, -0.348466 +11480, 0.907786, 0.083659, 0.217940, -0.348466 +11481, 0.907786, 0.083659, 0.217940, -0.348466 +11482, 0.907786, 0.083659, 0.217940, -0.348466 +11483, 0.907786, 0.083659, 0.217940, -0.348466 +11484, 0.907786, 0.083659, 0.217940, -0.348466 +11485, 0.907786, 0.083659, 0.217940, -0.348466 +11486, 0.907786, 0.083659, 0.217940, -0.348466 +11487, 0.907786, 0.083659, 0.217940, -0.348466 +11488, 0.907786, 0.083659, 0.217940, -0.348466 +11489, 0.907786, 0.083659, 0.217940, -0.348466 +11490, 0.907786, 0.083659, 0.217940, -0.348466 +11491, 0.907786, 0.083659, 0.217940, -0.348466 +11492, 0.907786, 0.083659, 0.217940, -0.348466 +11493, 0.907786, 0.083659, 0.217940, -0.348466 +11494, 0.907786, 0.083659, 0.217940, -0.348466 +11495, 0.907786, 0.083659, 0.217940, -0.348466 +11496, 0.907786, 0.083659, 0.217940, -0.348466 +11497, 0.907786, 0.083659, 0.217940, -0.348466 +11498, 0.907786, 0.083659, 0.217940, -0.348466 +11499, 0.907786, 0.083659, 0.217940, -0.348466 +11500, 0.907673, 0.088521, 0.243210, -0.330366 +11501, 0.907673, 0.088521, 0.243210, -0.330366 +11502, 0.907673, 0.088521, 0.243210, -0.330366 +11503, 0.907673, 0.088521, 0.243210, -0.330366 +11504, 0.907673, 0.088521, 0.243210, -0.330366 +11505, 0.907673, 0.088521, 0.243210, -0.330366 +11506, 0.907673, 0.088521, 0.243210, -0.330366 +11507, 0.907673, 0.088521, 0.243210, -0.330366 +11508, 0.907673, 0.088521, 0.243210, -0.330366 +11509, 0.907673, 0.088521, 0.243210, -0.330366 +11510, 0.907673, 0.088521, 0.243210, -0.330366 +11511, 0.907673, 0.088521, 0.243210, -0.330366 +11512, 0.907673, 0.088521, 0.243210, -0.330366 +11513, 0.907673, 0.088521, 0.243210, -0.330366 +11514, 0.907673, 0.088521, 0.243210, -0.330366 +11515, 0.907673, 0.088521, 0.243210, -0.330366 +11516, 0.907673, 0.088521, 0.243210, -0.330366 +11517, 0.907673, 0.088521, 0.243210, -0.330366 +11518, 0.907673, 0.088521, 0.243210, -0.330366 +11519, 0.907673, 0.088521, 0.243210, -0.330366 +11520, 0.907673, 0.088521, 0.243210, -0.330366 +11521, 0.907673, 0.088521, 0.243210, -0.330366 +11522, 0.907673, 0.088521, 0.243210, -0.330366 +11523, 0.907673, 0.088521, 0.243210, -0.330366 +11524, 0.907673, 0.088521, 0.243210, -0.330366 +11525, 0.907673, 0.088521, 0.243210, -0.330366 +11526, 0.907673, 0.088521, 0.243210, -0.330366 +11527, 0.907673, 0.088521, 0.243210, -0.330366 +11528, 0.907673, 0.088521, 0.243210, -0.330366 +11529, 0.907673, 0.088521, 0.243210, -0.330366 +11530, 0.907673, 0.088521, 0.243210, -0.330366 +11531, 0.907673, 0.088521, 0.243210, -0.330366 +11532, 0.907673, 0.088521, 0.243210, -0.330366 +11533, 0.907673, 0.088521, 0.243210, -0.330366 +11534, 0.907673, 0.088521, 0.243210, -0.330366 +11535, 0.907673, 0.088521, 0.243210, -0.330366 +11536, 0.907673, 0.088521, 0.243210, -0.330366 +11537, 0.907673, 0.088521, 0.243210, -0.330366 +11538, 0.907673, 0.088521, 0.243210, -0.330366 +11539, 0.907673, 0.088521, 0.243210, -0.330366 +11540, 0.907673, 0.088521, 0.243210, -0.330366 +11541, 0.907673, 0.088521, 0.243210, -0.330366 +11542, 0.907673, 0.088521, 0.243210, -0.330366 +11543, 0.907673, 0.088521, 0.243210, -0.330366 +11544, 0.907673, 0.088521, 0.243210, -0.330366 +11545, 0.907673, 0.088521, 0.243210, -0.330366 +11546, 0.907673, 0.088521, 0.243210, -0.330366 +11547, 0.907673, 0.088521, 0.243210, -0.330366 +11548, 0.907673, 0.088521, 0.243210, -0.330366 +11549, 0.907673, 0.088521, 0.243210, -0.330366 +11550, 0.907673, 0.088521, 0.243210, -0.330366 +11551, 0.907673, 0.088521, 0.243210, -0.330366 +11552, 0.907673, 0.088521, 0.243210, -0.330366 +11553, 0.907673, 0.088521, 0.243210, -0.330366 +11554, 0.907673, 0.088521, 0.243210, -0.330366 +11555, 0.907673, 0.088521, 0.243210, -0.330366 +11556, 0.907673, 0.088521, 0.243210, -0.330366 +11557, 0.907673, 0.088521, 0.243210, -0.330366 +11558, 0.907673, 0.088521, 0.243210, -0.330366 +11559, 0.907673, 0.088521, 0.243210, -0.330366 +11560, 0.907673, 0.088521, 0.243210, -0.330366 +11561, 0.907673, 0.088521, 0.243210, -0.330366 +11562, 0.907673, 0.088521, 0.243210, -0.330366 +11563, 0.907673, 0.088521, 0.243210, -0.330366 +11564, 0.907673, 0.088521, 0.243210, -0.330366 +11565, 0.907673, 0.088521, 0.243210, -0.330366 +11566, 0.907673, 0.088521, 0.243210, -0.330366 +11567, 0.907673, 0.088521, 0.243210, -0.330366 +11568, 0.907673, 0.088521, 0.243210, -0.330366 +11569, 0.907673, 0.088521, 0.243210, -0.330366 +11570, 0.907673, 0.088521, 0.243210, -0.330366 +11571, 0.907673, 0.088521, 0.243210, -0.330366 +11572, 0.907673, 0.088521, 0.243210, -0.330366 +11573, 0.907673, 0.088521, 0.243210, -0.330366 +11574, 0.907673, 0.088521, 0.243210, -0.330366 +11575, 0.907673, 0.088521, 0.243210, -0.330366 +11576, 0.907673, 0.088521, 0.243210, -0.330366 +11577, 0.907673, 0.088521, 0.243210, -0.330366 +11578, 0.907673, 0.088521, 0.243210, -0.330366 +11579, 0.907673, 0.088521, 0.243210, -0.330366 +11580, 0.907673, 0.088521, 0.243210, -0.330366 +11581, 0.907673, 0.088521, 0.243210, -0.330366 +11582, 0.907673, 0.088521, 0.243210, -0.330366 +11583, 0.907673, 0.088521, 0.243210, -0.330366 +11584, 0.907673, 0.088521, 0.243210, -0.330366 +11585, 0.907673, 0.088521, 0.243210, -0.330366 +11586, 0.907673, 0.088521, 0.243210, -0.330366 +11587, 0.907673, 0.088521, 0.243210, -0.330366 +11588, 0.907673, 0.088521, 0.243210, -0.330366 +11589, 0.907673, 0.088521, 0.243210, -0.330366 +11590, 0.907673, 0.088521, 0.243210, -0.330366 +11591, 0.907673, 0.088521, 0.243210, -0.330366 +11592, 0.907673, 0.088521, 0.243210, -0.330366 +11593, 0.907673, 0.088521, 0.243210, -0.330366 +11594, 0.907673, 0.088521, 0.243210, -0.330366 +11595, 0.907673, 0.088521, 0.243210, -0.330366 +11596, 0.907673, 0.088521, 0.243210, -0.330366 +11597, 0.907673, 0.088521, 0.243210, -0.330366 +11598, 0.907673, 0.088521, 0.243210, -0.330366 +11599, 0.907673, 0.088521, 0.243210, -0.330366 +11600, 0.906582, 0.092466, 0.268542, -0.312161 +11601, 0.906582, 0.092466, 0.268542, -0.312161 +11602, 0.906582, 0.092466, 0.268542, -0.312161 +11603, 0.906582, 0.092466, 0.268542, -0.312161 +11604, 0.906582, 0.092466, 0.268542, -0.312161 +11605, 0.906582, 0.092466, 0.268542, -0.312161 +11606, 0.906582, 0.092466, 0.268542, -0.312161 +11607, 0.906582, 0.092466, 0.268542, -0.312161 +11608, 0.906582, 0.092466, 0.268542, -0.312161 +11609, 0.906582, 0.092466, 0.268542, -0.312161 +11610, 0.906582, 0.092466, 0.268542, -0.312161 +11611, 0.906582, 0.092466, 0.268542, -0.312161 +11612, 0.906582, 0.092466, 0.268542, -0.312161 +11613, 0.906582, 0.092466, 0.268542, -0.312161 +11614, 0.906582, 0.092466, 0.268542, -0.312161 +11615, 0.906582, 0.092466, 0.268542, -0.312161 +11616, 0.906582, 0.092466, 0.268542, -0.312161 +11617, 0.906582, 0.092466, 0.268542, -0.312161 +11618, 0.906582, 0.092466, 0.268542, -0.312161 +11619, 0.906582, 0.092466, 0.268542, -0.312161 +11620, 0.906582, 0.092466, 0.268542, -0.312161 +11621, 0.906582, 0.092466, 0.268542, -0.312161 +11622, 0.906582, 0.092466, 0.268542, -0.312161 +11623, 0.906582, 0.092466, 0.268542, -0.312161 +11624, 0.906582, 0.092466, 0.268542, -0.312161 +11625, 0.906582, 0.092466, 0.268542, -0.312161 +11626, 0.906582, 0.092466, 0.268542, -0.312161 +11627, 0.906582, 0.092466, 0.268542, -0.312161 +11628, 0.906582, 0.092466, 0.268542, -0.312161 +11629, 0.906582, 0.092466, 0.268542, -0.312161 +11630, 0.906582, 0.092466, 0.268542, -0.312161 +11631, 0.906582, 0.092466, 0.268542, -0.312161 +11632, 0.906582, 0.092466, 0.268542, -0.312161 +11633, 0.906582, 0.092466, 0.268542, -0.312161 +11634, 0.906582, 0.092466, 0.268542, -0.312161 +11635, 0.906582, 0.092466, 0.268542, -0.312161 +11636, 0.906582, 0.092466, 0.268542, -0.312161 +11637, 0.906582, 0.092466, 0.268542, -0.312161 +11638, 0.906582, 0.092466, 0.268542, -0.312161 +11639, 0.906582, 0.092466, 0.268542, -0.312161 +11640, 0.906582, 0.092466, 0.268542, -0.312161 +11641, 0.906582, 0.092466, 0.268542, -0.312161 +11642, 0.906582, 0.092466, 0.268542, -0.312161 +11643, 0.906582, 0.092466, 0.268542, -0.312161 +11644, 0.906582, 0.092466, 0.268542, -0.312161 +11645, 0.906582, 0.092466, 0.268542, -0.312161 +11646, 0.906582, 0.092466, 0.268542, -0.312161 +11647, 0.906582, 0.092466, 0.268542, -0.312161 +11648, 0.906582, 0.092466, 0.268542, -0.312161 +11649, 0.906582, 0.092466, 0.268542, -0.312161 +11650, 0.906582, 0.092466, 0.268542, -0.312161 +11651, 0.906582, 0.092466, 0.268542, -0.312161 +11652, 0.906582, 0.092466, 0.268542, -0.312161 +11653, 0.906582, 0.092466, 0.268542, -0.312161 +11654, 0.906582, 0.092466, 0.268542, -0.312161 +11655, 0.906582, 0.092466, 0.268542, -0.312161 +11656, 0.906582, 0.092466, 0.268542, -0.312161 +11657, 0.906582, 0.092466, 0.268542, -0.312161 +11658, 0.906582, 0.092466, 0.268542, -0.312161 +11659, 0.906582, 0.092466, 0.268542, -0.312161 +11660, 0.906582, 0.092466, 0.268542, -0.312161 +11661, 0.906582, 0.092466, 0.268542, -0.312161 +11662, 0.906582, 0.092466, 0.268542, -0.312161 +11663, 0.906582, 0.092466, 0.268542, -0.312161 +11664, 0.906582, 0.092466, 0.268542, -0.312161 +11665, 0.906582, 0.092466, 0.268542, -0.312161 +11666, 0.906582, 0.092466, 0.268542, -0.312161 +11667, 0.906582, 0.092466, 0.268542, -0.312161 +11668, 0.906582, 0.092466, 0.268542, -0.312161 +11669, 0.906582, 0.092466, 0.268542, -0.312161 +11670, 0.906582, 0.092466, 0.268542, -0.312161 +11671, 0.906582, 0.092466, 0.268542, -0.312161 +11672, 0.906582, 0.092466, 0.268542, -0.312161 +11673, 0.906582, 0.092466, 0.268542, -0.312161 +11674, 0.906582, 0.092466, 0.268542, -0.312161 +11675, 0.906582, 0.092466, 0.268542, -0.312161 +11676, 0.906582, 0.092466, 0.268542, -0.312161 +11677, 0.906582, 0.092466, 0.268542, -0.312161 +11678, 0.906582, 0.092466, 0.268542, -0.312161 +11679, 0.906582, 0.092466, 0.268542, -0.312161 +11680, 0.906582, 0.092466, 0.268542, -0.312161 +11681, 0.906582, 0.092466, 0.268542, -0.312161 +11682, 0.906582, 0.092466, 0.268542, -0.312161 +11683, 0.906582, 0.092466, 0.268542, -0.312161 +11684, 0.906582, 0.092466, 0.268542, -0.312161 +11685, 0.906582, 0.092466, 0.268542, -0.312161 +11686, 0.906582, 0.092466, 0.268542, -0.312161 +11687, 0.906582, 0.092466, 0.268542, -0.312161 +11688, 0.906582, 0.092466, 0.268542, -0.312161 +11689, 0.906582, 0.092466, 0.268542, -0.312161 +11690, 0.906582, 0.092466, 0.268542, -0.312161 +11691, 0.906582, 0.092466, 0.268542, -0.312161 +11692, 0.906582, 0.092466, 0.268542, -0.312161 +11693, 0.906582, 0.092466, 0.268542, -0.312161 +11694, 0.906582, 0.092466, 0.268542, -0.312161 +11695, 0.906582, 0.092466, 0.268542, -0.312161 +11696, 0.906582, 0.092466, 0.268542, -0.312161 +11697, 0.906582, 0.092466, 0.268542, -0.312161 +11698, 0.906582, 0.092466, 0.268542, -0.312161 +11699, 0.906582, 0.092466, 0.268542, -0.312161 +11700, 0.904508, 0.095492, 0.293893, -0.293893 +11701, 0.904508, 0.095492, 0.293893, -0.293893 +11702, 0.904508, 0.095492, 0.293893, -0.293893 +11703, 0.904508, 0.095492, 0.293893, -0.293893 +11704, 0.904508, 0.095492, 0.293893, -0.293893 +11705, 0.904508, 0.095492, 0.293893, -0.293893 +11706, 0.904508, 0.095492, 0.293893, -0.293893 +11707, 0.904508, 0.095492, 0.293893, -0.293893 +11708, 0.904508, 0.095492, 0.293893, -0.293893 +11709, 0.904508, 0.095492, 0.293893, -0.293893 +11710, 0.904508, 0.095492, 0.293893, -0.293893 +11711, 0.904508, 0.095492, 0.293893, -0.293893 +11712, 0.904508, 0.095492, 0.293893, -0.293893 +11713, 0.904508, 0.095492, 0.293893, -0.293893 +11714, 0.904508, 0.095492, 0.293893, -0.293893 +11715, 0.904508, 0.095492, 0.293893, -0.293893 +11716, 0.904508, 0.095492, 0.293893, -0.293893 +11717, 0.904508, 0.095492, 0.293893, -0.293893 +11718, 0.904508, 0.095492, 0.293893, -0.293893 +11719, 0.904508, 0.095492, 0.293893, -0.293893 +11720, 0.904508, 0.095492, 0.293893, -0.293893 +11721, 0.904508, 0.095492, 0.293893, -0.293893 +11722, 0.904508, 0.095492, 0.293893, -0.293893 +11723, 0.904508, 0.095492, 0.293893, -0.293893 +11724, 0.904508, 0.095492, 0.293893, -0.293893 +11725, 0.904508, 0.095492, 0.293893, -0.293893 +11726, 0.904508, 0.095492, 0.293893, -0.293893 +11727, 0.904508, 0.095492, 0.293893, -0.293893 +11728, 0.904508, 0.095492, 0.293893, -0.293893 +11729, 0.904508, 0.095492, 0.293893, -0.293893 +11730, 0.904508, 0.095492, 0.293893, -0.293893 +11731, 0.904508, 0.095492, 0.293893, -0.293893 +11732, 0.904508, 0.095492, 0.293893, -0.293893 +11733, 0.904508, 0.095492, 0.293893, -0.293893 +11734, 0.904508, 0.095492, 0.293893, -0.293893 +11735, 0.904508, 0.095492, 0.293893, -0.293893 +11736, 0.904508, 0.095492, 0.293893, -0.293893 +11737, 0.904508, 0.095492, 0.293893, -0.293893 +11738, 0.904508, 0.095492, 0.293893, -0.293893 +11739, 0.904508, 0.095492, 0.293893, -0.293893 +11740, 0.904508, 0.095492, 0.293893, -0.293893 +11741, 0.904508, 0.095492, 0.293893, -0.293893 +11742, 0.904508, 0.095492, 0.293893, -0.293893 +11743, 0.904508, 0.095492, 0.293893, -0.293893 +11744, 0.904508, 0.095492, 0.293893, -0.293893 +11745, 0.904508, 0.095492, 0.293893, -0.293893 +11746, 0.904508, 0.095492, 0.293893, -0.293893 +11747, 0.904508, 0.095492, 0.293893, -0.293893 +11748, 0.904508, 0.095492, 0.293893, -0.293893 +11749, 0.904508, 0.095492, 0.293893, -0.293893 +11750, 0.904508, 0.095492, 0.293893, -0.293893 +11751, 0.904508, 0.095492, 0.293893, -0.293893 +11752, 0.904508, 0.095492, 0.293893, -0.293893 +11753, 0.904508, 0.095492, 0.293893, -0.293893 +11754, 0.904508, 0.095492, 0.293893, -0.293893 +11755, 0.904508, 0.095492, 0.293893, -0.293893 +11756, 0.904508, 0.095492, 0.293893, -0.293893 +11757, 0.904508, 0.095492, 0.293893, -0.293893 +11758, 0.904508, 0.095492, 0.293893, -0.293893 +11759, 0.904508, 0.095492, 0.293893, -0.293893 +11760, 0.904508, 0.095492, 0.293893, -0.293893 +11761, 0.904508, 0.095492, 0.293893, -0.293893 +11762, 0.904508, 0.095492, 0.293893, -0.293893 +11763, 0.904508, 0.095492, 0.293893, -0.293893 +11764, 0.904508, 0.095492, 0.293893, -0.293893 +11765, 0.904508, 0.095492, 0.293893, -0.293893 +11766, 0.904508, 0.095492, 0.293893, -0.293893 +11767, 0.904508, 0.095492, 0.293893, -0.293893 +11768, 0.904508, 0.095492, 0.293893, -0.293893 +11769, 0.904508, 0.095492, 0.293893, -0.293893 +11770, 0.904508, 0.095492, 0.293893, -0.293893 +11771, 0.904508, 0.095492, 0.293893, -0.293893 +11772, 0.904508, 0.095492, 0.293893, -0.293893 +11773, 0.904508, 0.095492, 0.293893, -0.293893 +11774, 0.904508, 0.095492, 0.293893, -0.293893 +11775, 0.904508, 0.095492, 0.293893, -0.293893 +11776, 0.904508, 0.095492, 0.293893, -0.293893 +11777, 0.904508, 0.095492, 0.293893, -0.293893 +11778, 0.904508, 0.095492, 0.293893, -0.293893 +11779, 0.904508, 0.095492, 0.293893, -0.293893 +11780, 0.904508, 0.095492, 0.293893, -0.293893 +11781, 0.904508, 0.095492, 0.293893, -0.293893 +11782, 0.904508, 0.095492, 0.293893, -0.293893 +11783, 0.904508, 0.095492, 0.293893, -0.293893 +11784, 0.904508, 0.095492, 0.293893, -0.293893 +11785, 0.904508, 0.095492, 0.293893, -0.293893 +11786, 0.904508, 0.095492, 0.293893, -0.293893 +11787, 0.904508, 0.095492, 0.293893, -0.293893 +11788, 0.904508, 0.095492, 0.293893, -0.293893 +11789, 0.904508, 0.095492, 0.293893, -0.293893 +11790, 0.904508, 0.095492, 0.293893, -0.293893 +11791, 0.904508, 0.095492, 0.293893, -0.293893 +11792, 0.904508, 0.095492, 0.293893, -0.293893 +11793, 0.904508, 0.095492, 0.293893, -0.293893 +11794, 0.904508, 0.095492, 0.293893, -0.293893 +11795, 0.904508, 0.095492, 0.293893, -0.293893 +11796, 0.904508, 0.095492, 0.293893, -0.293893 +11797, 0.904508, 0.095492, 0.293893, -0.293893 +11798, 0.904508, 0.095492, 0.293893, -0.293893 +11799, 0.904508, 0.095492, 0.293893, -0.293893 +11800, 0.901453, 0.097596, 0.319221, -0.275602 +11801, 0.901453, 0.097596, 0.319221, -0.275602 +11802, 0.901453, 0.097596, 0.319221, -0.275602 +11803, 0.901453, 0.097596, 0.319221, -0.275602 +11804, 0.901453, 0.097596, 0.319221, -0.275602 +11805, 0.901453, 0.097596, 0.319221, -0.275602 +11806, 0.901453, 0.097596, 0.319221, -0.275602 +11807, 0.901453, 0.097596, 0.319221, -0.275602 +11808, 0.901453, 0.097596, 0.319221, -0.275602 +11809, 0.901453, 0.097596, 0.319221, -0.275602 +11810, 0.901453, 0.097596, 0.319221, -0.275602 +11811, 0.901453, 0.097596, 0.319221, -0.275602 +11812, 0.901453, 0.097596, 0.319221, -0.275602 +11813, 0.901453, 0.097596, 0.319221, -0.275602 +11814, 0.901453, 0.097596, 0.319221, -0.275602 +11815, 0.901453, 0.097596, 0.319221, -0.275602 +11816, 0.901453, 0.097596, 0.319221, -0.275602 +11817, 0.901453, 0.097596, 0.319221, -0.275602 +11818, 0.901453, 0.097596, 0.319221, -0.275602 +11819, 0.901453, 0.097596, 0.319221, -0.275602 +11820, 0.901453, 0.097596, 0.319221, -0.275602 +11821, 0.901453, 0.097596, 0.319221, -0.275602 +11822, 0.901453, 0.097596, 0.319221, -0.275602 +11823, 0.901453, 0.097596, 0.319221, -0.275602 +11824, 0.901453, 0.097596, 0.319221, -0.275602 +11825, 0.901453, 0.097596, 0.319221, -0.275602 +11826, 0.901453, 0.097596, 0.319221, -0.275602 +11827, 0.901453, 0.097596, 0.319221, -0.275602 +11828, 0.901453, 0.097596, 0.319221, -0.275602 +11829, 0.901453, 0.097596, 0.319221, -0.275602 +11830, 0.901453, 0.097596, 0.319221, -0.275602 +11831, 0.901453, 0.097596, 0.319221, -0.275602 +11832, 0.901453, 0.097596, 0.319221, -0.275602 +11833, 0.901453, 0.097596, 0.319221, -0.275602 +11834, 0.901453, 0.097596, 0.319221, -0.275602 +11835, 0.901453, 0.097596, 0.319221, -0.275602 +11836, 0.901453, 0.097596, 0.319221, -0.275602 +11837, 0.901453, 0.097596, 0.319221, -0.275602 +11838, 0.901453, 0.097596, 0.319221, -0.275602 +11839, 0.901453, 0.097596, 0.319221, -0.275602 +11840, 0.901453, 0.097596, 0.319221, -0.275602 +11841, 0.901453, 0.097596, 0.319221, -0.275602 +11842, 0.901453, 0.097596, 0.319221, -0.275602 +11843, 0.901453, 0.097596, 0.319221, -0.275602 +11844, 0.901453, 0.097596, 0.319221, -0.275602 +11845, 0.901453, 0.097596, 0.319221, -0.275602 +11846, 0.901453, 0.097596, 0.319221, -0.275602 +11847, 0.901453, 0.097596, 0.319221, -0.275602 +11848, 0.901453, 0.097596, 0.319221, -0.275602 +11849, 0.901453, 0.097596, 0.319221, -0.275602 +11850, 0.901453, 0.097596, 0.319221, -0.275602 +11851, 0.901453, 0.097596, 0.319221, -0.275602 +11852, 0.901453, 0.097596, 0.319221, -0.275602 +11853, 0.901453, 0.097596, 0.319221, -0.275602 +11854, 0.901453, 0.097596, 0.319221, -0.275602 +11855, 0.901453, 0.097596, 0.319221, -0.275602 +11856, 0.901453, 0.097596, 0.319221, -0.275602 +11857, 0.901453, 0.097596, 0.319221, -0.275602 +11858, 0.901453, 0.097596, 0.319221, -0.275602 +11859, 0.901453, 0.097596, 0.319221, -0.275602 +11860, 0.901453, 0.097596, 0.319221, -0.275602 +11861, 0.901453, 0.097596, 0.319221, -0.275602 +11862, 0.901453, 0.097596, 0.319221, -0.275602 +11863, 0.901453, 0.097596, 0.319221, -0.275602 +11864, 0.901453, 0.097596, 0.319221, -0.275602 +11865, 0.901453, 0.097596, 0.319221, -0.275602 +11866, 0.901453, 0.097596, 0.319221, -0.275602 +11867, 0.901453, 0.097596, 0.319221, -0.275602 +11868, 0.901453, 0.097596, 0.319221, -0.275602 +11869, 0.901453, 0.097596, 0.319221, -0.275602 +11870, 0.901453, 0.097596, 0.319221, -0.275602 +11871, 0.901453, 0.097596, 0.319221, -0.275602 +11872, 0.901453, 0.097596, 0.319221, -0.275602 +11873, 0.901453, 0.097596, 0.319221, -0.275602 +11874, 0.901453, 0.097596, 0.319221, -0.275602 +11875, 0.901453, 0.097596, 0.319221, -0.275602 +11876, 0.901453, 0.097596, 0.319221, -0.275602 +11877, 0.901453, 0.097596, 0.319221, -0.275602 +11878, 0.901453, 0.097596, 0.319221, -0.275602 +11879, 0.901453, 0.097596, 0.319221, -0.275602 +11880, 0.901453, 0.097596, 0.319221, -0.275602 +11881, 0.901453, 0.097596, 0.319221, -0.275602 +11882, 0.901453, 0.097596, 0.319221, -0.275602 +11883, 0.901453, 0.097596, 0.319221, -0.275602 +11884, 0.901453, 0.097596, 0.319221, -0.275602 +11885, 0.901453, 0.097596, 0.319221, -0.275602 +11886, 0.901453, 0.097596, 0.319221, -0.275602 +11887, 0.901453, 0.097596, 0.319221, -0.275602 +11888, 0.901453, 0.097596, 0.319221, -0.275602 +11889, 0.901453, 0.097596, 0.319221, -0.275602 +11890, 0.901453, 0.097596, 0.319221, -0.275602 +11891, 0.901453, 0.097596, 0.319221, -0.275602 +11892, 0.901453, 0.097596, 0.319221, -0.275602 +11893, 0.901453, 0.097596, 0.319221, -0.275602 +11894, 0.901453, 0.097596, 0.319221, -0.275602 +11895, 0.901453, 0.097596, 0.319221, -0.275602 +11896, 0.901453, 0.097596, 0.319221, -0.275602 +11897, 0.901453, 0.097596, 0.319221, -0.275602 +11898, 0.901453, 0.097596, 0.319221, -0.275602 +11899, 0.901453, 0.097596, 0.319221, -0.275602 +11900, 0.897415, 0.098780, 0.344485, -0.257330 +11901, 0.897415, 0.098780, 0.344485, -0.257330 +11902, 0.897415, 0.098780, 0.344485, -0.257330 +11903, 0.897415, 0.098780, 0.344485, -0.257330 +11904, 0.897415, 0.098780, 0.344485, -0.257330 +11905, 0.897415, 0.098780, 0.344485, -0.257330 +11906, 0.897415, 0.098780, 0.344485, -0.257330 +11907, 0.897415, 0.098780, 0.344485, -0.257330 +11908, 0.897415, 0.098780, 0.344485, -0.257330 +11909, 0.897415, 0.098780, 0.344485, -0.257330 +11910, 0.897415, 0.098780, 0.344485, -0.257330 +11911, 0.897415, 0.098780, 0.344485, -0.257330 +11912, 0.897415, 0.098780, 0.344485, -0.257330 +11913, 0.897415, 0.098780, 0.344485, -0.257330 +11914, 0.897415, 0.098780, 0.344485, -0.257330 +11915, 0.897415, 0.098780, 0.344485, -0.257330 +11916, 0.897415, 0.098780, 0.344485, -0.257330 +11917, 0.897415, 0.098780, 0.344485, -0.257330 +11918, 0.897415, 0.098780, 0.344485, -0.257330 +11919, 0.897415, 0.098780, 0.344485, -0.257330 +11920, 0.897415, 0.098780, 0.344485, -0.257330 +11921, 0.897415, 0.098780, 0.344485, -0.257330 +11922, 0.897415, 0.098780, 0.344485, -0.257330 +11923, 0.897415, 0.098780, 0.344485, -0.257330 +11924, 0.897415, 0.098780, 0.344485, -0.257330 +11925, 0.897415, 0.098780, 0.344485, -0.257330 +11926, 0.897415, 0.098780, 0.344485, -0.257330 +11927, 0.897415, 0.098780, 0.344485, -0.257330 +11928, 0.897415, 0.098780, 0.344485, -0.257330 +11929, 0.897415, 0.098780, 0.344485, -0.257330 +11930, 0.897415, 0.098780, 0.344485, -0.257330 +11931, 0.897415, 0.098780, 0.344485, -0.257330 +11932, 0.897415, 0.098780, 0.344485, -0.257330 +11933, 0.897415, 0.098780, 0.344485, -0.257330 +11934, 0.897415, 0.098780, 0.344485, -0.257330 +11935, 0.897415, 0.098780, 0.344485, -0.257330 +11936, 0.897415, 0.098780, 0.344485, -0.257330 +11937, 0.897415, 0.098780, 0.344485, -0.257330 +11938, 0.897415, 0.098780, 0.344485, -0.257330 +11939, 0.897415, 0.098780, 0.344485, -0.257330 +11940, 0.897415, 0.098780, 0.344485, -0.257330 +11941, 0.897415, 0.098780, 0.344485, -0.257330 +11942, 0.897415, 0.098780, 0.344485, -0.257330 +11943, 0.897415, 0.098780, 0.344485, -0.257330 +11944, 0.897415, 0.098780, 0.344485, -0.257330 +11945, 0.897415, 0.098780, 0.344485, -0.257330 +11946, 0.897415, 0.098780, 0.344485, -0.257330 +11947, 0.897415, 0.098780, 0.344485, -0.257330 +11948, 0.897415, 0.098780, 0.344485, -0.257330 +11949, 0.897415, 0.098780, 0.344485, -0.257330 +11950, 0.897415, 0.098780, 0.344485, -0.257330 +11951, 0.897415, 0.098780, 0.344485, -0.257330 +11952, 0.897415, 0.098780, 0.344485, -0.257330 +11953, 0.897415, 0.098780, 0.344485, -0.257330 +11954, 0.897415, 0.098780, 0.344485, -0.257330 +11955, 0.897415, 0.098780, 0.344485, -0.257330 +11956, 0.897415, 0.098780, 0.344485, -0.257330 +11957, 0.897415, 0.098780, 0.344485, -0.257330 +11958, 0.897415, 0.098780, 0.344485, -0.257330 +11959, 0.897415, 0.098780, 0.344485, -0.257330 +11960, 0.897415, 0.098780, 0.344485, -0.257330 +11961, 0.897415, 0.098780, 0.344485, -0.257330 +11962, 0.897415, 0.098780, 0.344485, -0.257330 +11963, 0.897415, 0.098780, 0.344485, -0.257330 +11964, 0.897415, 0.098780, 0.344485, -0.257330 +11965, 0.897415, 0.098780, 0.344485, -0.257330 +11966, 0.897415, 0.098780, 0.344485, -0.257330 +11967, 0.897415, 0.098780, 0.344485, -0.257330 +11968, 0.897415, 0.098780, 0.344485, -0.257330 +11969, 0.897415, 0.098780, 0.344485, -0.257330 +11970, 0.897415, 0.098780, 0.344485, -0.257330 +11971, 0.897415, 0.098780, 0.344485, -0.257330 +11972, 0.897415, 0.098780, 0.344485, -0.257330 +11973, 0.897415, 0.098780, 0.344485, -0.257330 +11974, 0.897415, 0.098780, 0.344485, -0.257330 +11975, 0.897415, 0.098780, 0.344485, -0.257330 +11976, 0.897415, 0.098780, 0.344485, -0.257330 +11977, 0.897415, 0.098780, 0.344485, -0.257330 +11978, 0.897415, 0.098780, 0.344485, -0.257330 +11979, 0.897415, 0.098780, 0.344485, -0.257330 +11980, 0.897415, 0.098780, 0.344485, -0.257330 +11981, 0.897415, 0.098780, 0.344485, -0.257330 +11982, 0.897415, 0.098780, 0.344485, -0.257330 +11983, 0.897415, 0.098780, 0.344485, -0.257330 +11984, 0.897415, 0.098780, 0.344485, -0.257330 +11985, 0.897415, 0.098780, 0.344485, -0.257330 +11986, 0.897415, 0.098780, 0.344485, -0.257330 +11987, 0.897415, 0.098780, 0.344485, -0.257330 +11988, 0.897415, 0.098780, 0.344485, -0.257330 +11989, 0.897415, 0.098780, 0.344485, -0.257330 +11990, 0.897415, 0.098780, 0.344485, -0.257330 +11991, 0.897415, 0.098780, 0.344485, -0.257330 +11992, 0.897415, 0.098780, 0.344485, -0.257330 +11993, 0.897415, 0.098780, 0.344485, -0.257330 +11994, 0.897415, 0.098780, 0.344485, -0.257330 +11995, 0.897415, 0.098780, 0.344485, -0.257330 +11996, 0.897415, 0.098780, 0.344485, -0.257330 +11997, 0.897415, 0.098780, 0.344485, -0.257330 +11998, 0.897415, 0.098780, 0.344485, -0.257330 +11999, 0.897415, 0.098780, 0.344485, -0.257330 diff --git a/scripts/trajectories/circle-with-up-down-15s.csv b/scripts/trajectories/circle-with-up-down-15s.csv new file mode 100644 index 0000000000..953021b03d --- /dev/null +++ b/scripts/trajectories/circle-with-up-down-15s.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 0.999999, 0.000000, -0.000001, 0.001048 +2, 0.999998, 0.000000, -0.000005, 0.002095 +3, 0.999995, 0.000000, -0.000012, 0.003143 +4, 0.999991, 0.000000, -0.000021, 0.004190 +5, 0.999986, 0.000000, -0.000034, 0.005238 +6, 0.999980, 0.000000, -0.000048, 0.006285 +7, 0.999973, 0.000000, -0.000066, 0.007333 +8, 0.999965, 0.000001, -0.000086, 0.008380 +9, 0.999956, 0.000001, -0.000109, 0.009428 +10, 0.999945, 0.000001, -0.000134, 0.010475 +11, 0.999934, 0.000002, -0.000162, 0.011523 +12, 0.999921, 0.000002, -0.000193, 0.012570 +13, 0.999907, 0.000003, -0.000226, 0.013618 +14, 0.999892, 0.000004, -0.000263, 0.014665 +15, 0.999877, 0.000005, -0.000302, 0.015713 +16, 0.999859, 0.000006, -0.000343, 0.016760 +17, 0.999841, 0.000007, -0.000387, 0.017807 +18, 0.999822, 0.000008, -0.000434, 0.018855 +19, 0.999802, 0.000010, -0.000484, 0.019902 +20, 0.999780, 0.000011, -0.000536, 0.020949 +21, 0.999758, 0.000013, -0.000591, 0.021997 +22, 0.999734, 0.000015, -0.000648, 0.023044 +23, 0.999710, 0.000017, -0.000708, 0.024091 +24, 0.999684, 0.000019, -0.000771, 0.025138 +25, 0.999657, 0.000022, -0.000837, 0.026186 +26, 0.999629, 0.000025, -0.000905, 0.027233 +27, 0.999600, 0.000028, -0.000976, 0.028280 +28, 0.999569, 0.000031, -0.001049, 0.029327 +29, 0.999538, 0.000034, -0.001126, 0.030374 +30, 0.999506, 0.000038, -0.001204, 0.031421 +31, 0.999472, 0.000042, -0.001286, 0.032468 +32, 0.999437, 0.000046, -0.001370, 0.033515 +33, 0.999401, 0.000050, -0.001457, 0.034562 +34, 0.999365, 0.000055, -0.001546, 0.035609 +35, 0.999327, 0.000060, -0.001638, 0.036656 +36, 0.999287, 0.000065, -0.001733, 0.037703 +37, 0.999247, 0.000071, -0.001830, 0.038749 +38, 0.999206, 0.000077, -0.001930, 0.039796 +39, 0.999164, 0.000083, -0.002033, 0.040843 +40, 0.999120, 0.000090, -0.002138, 0.041890 +41, 0.999075, 0.000097, -0.002246, 0.042936 +42, 0.999030, 0.000104, -0.002357, 0.043983 +43, 0.998983, 0.000111, -0.002470, 0.045029 +44, 0.998935, 0.000119, -0.002585, 0.046076 +45, 0.998885, 0.000128, -0.002704, 0.047122 +46, 0.998835, 0.000136, -0.002825, 0.048168 +47, 0.998784, 0.000145, -0.002948, 0.049215 +48, 0.998731, 0.000155, -0.003075, 0.050261 +49, 0.998678, 0.000165, -0.003203, 0.051307 +50, 0.998623, 0.000175, -0.003335, 0.052353 +51, 0.998567, 0.000186, -0.003469, 0.053399 +52, 0.998510, 0.000197, -0.003605, 0.054445 +53, 0.998452, 0.000208, -0.003745, 0.055491 +54, 0.998393, 0.000220, -0.003887, 0.056537 +55, 0.998333, 0.000232, -0.004031, 0.057583 +56, 0.998271, 0.000245, -0.004178, 0.058628 +57, 0.998208, 0.000259, -0.004327, 0.059674 +58, 0.998145, 0.000273, -0.004480, 0.060720 +59, 0.998080, 0.000287, -0.004634, 0.061765 +60, 0.998014, 0.000302, -0.004792, 0.062811 +61, 0.997947, 0.000317, -0.004951, 0.063856 +62, 0.997879, 0.000333, -0.005114, 0.064901 +63, 0.997809, 0.000349, -0.005279, 0.065947 +64, 0.997739, 0.000366, -0.005446, 0.066992 +65, 0.997667, 0.000383, -0.005616, 0.068037 +66, 0.997594, 0.000401, -0.005789, 0.069082 +67, 0.997520, 0.000419, -0.005964, 0.070127 +68, 0.997445, 0.000438, -0.006142, 0.071172 +69, 0.997369, 0.000458, -0.006322, 0.072216 +70, 0.997291, 0.000478, -0.006505, 0.073261 +71, 0.997213, 0.000498, -0.006690, 0.074306 +72, 0.997133, 0.000520, -0.006878, 0.075350 +73, 0.997052, 0.000542, -0.007068, 0.076394 +74, 0.996971, 0.000564, -0.007261, 0.077439 +75, 0.996887, 0.000587, -0.007456, 0.078483 +76, 0.996803, 0.000611, -0.007654, 0.079527 +77, 0.996718, 0.000635, -0.007854, 0.080571 +78, 0.996631, 0.000660, -0.008057, 0.081615 +79, 0.996543, 0.000685, -0.008263, 0.082659 +80, 0.996455, 0.000712, -0.008470, 0.083703 +81, 0.996364, 0.000738, -0.008681, 0.084746 +82, 0.996273, 0.000766, -0.008893, 0.085790 +83, 0.996181, 0.000794, -0.009108, 0.086833 +84, 0.996087, 0.000823, -0.009326, 0.087877 +85, 0.995993, 0.000852, -0.009546, 0.088920 +86, 0.995897, 0.000882, -0.009769, 0.089963 +87, 0.995800, 0.000913, -0.009994, 0.091006 +88, 0.995702, 0.000945, -0.010221, 0.092049 +89, 0.995602, 0.000977, -0.010451, 0.093092 +90, 0.995502, 0.001010, -0.010683, 0.094134 +91, 0.995400, 0.001044, -0.010918, 0.095177 +92, 0.995297, 0.001078, -0.011155, 0.096219 +93, 0.995193, 0.001114, -0.011395, 0.097261 +94, 0.995088, 0.001150, -0.011637, 0.098304 +95, 0.994981, 0.001186, -0.011881, 0.099346 +96, 0.994874, 0.001224, -0.012128, 0.100388 +97, 0.994765, 0.001262, -0.012377, 0.101429 +98, 0.994655, 0.001301, -0.012629, 0.102471 +99, 0.994544, 0.001341, -0.012883, 0.103513 +100, 0.994431, 0.001381, -0.013139, 0.104554 +101, 0.994318, 0.001423, -0.013398, 0.105595 +102, 0.994203, 0.001465, -0.013659, 0.106637 +103, 0.994087, 0.001508, -0.013922, 0.107678 +104, 0.993970, 0.001552, -0.014188, 0.108718 +105, 0.993852, 0.001596, -0.014456, 0.109759 +106, 0.993732, 0.001642, -0.014726, 0.110800 +107, 0.993612, 0.001688, -0.014999, 0.111840 +108, 0.993490, 0.001735, -0.015274, 0.112881 +109, 0.993367, 0.001783, -0.015551, 0.113921 +110, 0.993242, 0.001832, -0.015831, 0.114961 +111, 0.993117, 0.001882, -0.016113, 0.116001 +112, 0.992990, 0.001933, -0.016397, 0.117040 +113, 0.992862, 0.001984, -0.016683, 0.118080 +114, 0.992733, 0.002036, -0.016972, 0.119119 +115, 0.992602, 0.002090, -0.017263, 0.120159 +116, 0.992471, 0.002144, -0.017556, 0.121198 +117, 0.992338, 0.002199, -0.017852, 0.122237 +118, 0.992204, 0.002255, -0.018150, 0.123275 +119, 0.992069, 0.002312, -0.018450, 0.124314 +120, 0.991932, 0.002370, -0.018752, 0.125352 +121, 0.991795, 0.002428, -0.019057, 0.126391 +122, 0.991656, 0.002488, -0.019363, 0.127429 +123, 0.991515, 0.002549, -0.019672, 0.128467 +124, 0.991374, 0.002610, -0.019983, 0.129505 +125, 0.991231, 0.002673, -0.020297, 0.130542 +126, 0.991088, 0.002737, -0.020612, 0.131580 +127, 0.990942, 0.002801, -0.020930, 0.132617 +128, 0.990796, 0.002867, -0.021250, 0.133654 +129, 0.990649, 0.002933, -0.021572, 0.134691 +130, 0.990500, 0.003000, -0.021896, 0.135727 +131, 0.990350, 0.003069, -0.022223, 0.136764 +132, 0.990198, 0.003138, -0.022551, 0.137800 +133, 0.990046, 0.003209, -0.022882, 0.138836 +134, 0.989892, 0.003280, -0.023214, 0.139872 +135, 0.989737, 0.003353, -0.023549, 0.140908 +136, 0.989581, 0.003426, -0.023886, 0.141944 +137, 0.989423, 0.003501, -0.024226, 0.142979 +138, 0.989264, 0.003576, -0.024567, 0.144014 +139, 0.989104, 0.003653, -0.024910, 0.145049 +140, 0.988943, 0.003731, -0.025255, 0.146084 +141, 0.988780, 0.003809, -0.025603, 0.147118 +142, 0.988616, 0.003889, -0.025952, 0.148153 +143, 0.988451, 0.003970, -0.026304, 0.149187 +144, 0.988285, 0.004052, -0.026657, 0.150221 +145, 0.988117, 0.004135, -0.027013, 0.151254 +146, 0.987948, 0.004219, -0.027371, 0.152288 +147, 0.987778, 0.004304, -0.027730, 0.153321 +148, 0.987606, 0.004391, -0.028092, 0.154354 +149, 0.987434, 0.004478, -0.028456, 0.155387 +150, 0.987260, 0.004566, -0.028821, 0.156420 +151, 0.987084, 0.004656, -0.029189, 0.157452 +152, 0.986908, 0.004747, -0.029559, 0.158484 +153, 0.986730, 0.004839, -0.029930, 0.159516 +154, 0.986550, 0.004932, -0.030304, 0.160548 +155, 0.986370, 0.005026, -0.030679, 0.161579 +156, 0.986188, 0.005121, -0.031057, 0.162610 +157, 0.986005, 0.005217, -0.031436, 0.163641 +158, 0.985821, 0.005315, -0.031817, 0.164672 +159, 0.985635, 0.005413, -0.032201, 0.165702 +160, 0.985448, 0.005513, -0.032586, 0.166733 +161, 0.985260, 0.005614, -0.032973, 0.167763 +162, 0.985070, 0.005717, -0.033361, 0.168792 +163, 0.984879, 0.005820, -0.033752, 0.169822 +164, 0.984687, 0.005924, -0.034145, 0.170851 +165, 0.984494, 0.006030, -0.034539, 0.171880 +166, 0.984299, 0.006137, -0.034935, 0.172909 +167, 0.984103, 0.006245, -0.035334, 0.173937 +168, 0.983905, 0.006354, -0.035734, 0.174965 +169, 0.983707, 0.006465, -0.036135, 0.175993 +170, 0.983507, 0.006577, -0.036539, 0.177021 +171, 0.983305, 0.006690, -0.036944, 0.178048 +172, 0.983103, 0.006804, -0.037351, 0.179076 +173, 0.982898, 0.006919, -0.037760, 0.180102 +174, 0.982693, 0.007036, -0.038171, 0.181129 +175, 0.982486, 0.007153, -0.038583, 0.182155 +176, 0.982278, 0.007272, -0.038998, 0.183181 +177, 0.982069, 0.007393, -0.039413, 0.184207 +178, 0.981858, 0.007514, -0.039831, 0.185232 +179, 0.981646, 0.007637, -0.040250, 0.186257 +180, 0.981433, 0.007761, -0.040671, 0.187282 +181, 0.981218, 0.007886, -0.041094, 0.188307 +182, 0.981002, 0.008013, -0.041519, 0.189331 +183, 0.980785, 0.008141, -0.041945, 0.190355 +184, 0.980566, 0.008270, -0.042373, 0.191379 +185, 0.980346, 0.008400, -0.042802, 0.192402 +186, 0.980125, 0.008532, -0.043233, 0.193425 +187, 0.979902, 0.008665, -0.043666, 0.194448 +188, 0.979678, 0.008799, -0.044100, 0.195470 +189, 0.979453, 0.008935, -0.044536, 0.196492 +190, 0.979226, 0.009071, -0.044973, 0.197514 +191, 0.978998, 0.009209, -0.045413, 0.198536 +192, 0.978768, 0.009349, -0.045853, 0.199557 +193, 0.978537, 0.009490, -0.046295, 0.200578 +194, 0.978305, 0.009632, -0.046739, 0.201598 +195, 0.978072, 0.009775, -0.047185, 0.202618 +196, 0.977837, 0.009919, -0.047632, 0.203638 +197, 0.977600, 0.010065, -0.048080, 0.204658 +198, 0.977363, 0.010213, -0.048530, 0.205677 +199, 0.977124, 0.010361, -0.048981, 0.206696 +200, 0.976883, 0.010511, -0.049434, 0.207714 +201, 0.976641, 0.010662, -0.049889, 0.208732 +202, 0.976398, 0.010815, -0.050344, 0.209750 +203, 0.976154, 0.010969, -0.050802, 0.210768 +204, 0.975908, 0.011124, -0.051261, 0.211785 +205, 0.975660, 0.011281, -0.051721, 0.212802 +206, 0.975412, 0.011439, -0.052182, 0.213818 +207, 0.975162, 0.011598, -0.052645, 0.214834 +208, 0.974910, 0.011759, -0.053110, 0.215850 +209, 0.974657, 0.011921, -0.053576, 0.216865 +210, 0.974403, 0.012084, -0.054043, 0.217880 +211, 0.974148, 0.012249, -0.054511, 0.218895 +212, 0.973891, 0.012415, -0.054981, 0.219909 +213, 0.973632, 0.012583, -0.055453, 0.220923 +214, 0.973373, 0.012751, -0.055925, 0.221936 +215, 0.973111, 0.012922, -0.056399, 0.222949 +216, 0.972849, 0.013093, -0.056874, 0.223962 +217, 0.972585, 0.013266, -0.057351, 0.224974 +218, 0.972320, 0.013441, -0.057829, 0.225986 +219, 0.972053, 0.013616, -0.058308, 0.226998 +220, 0.971785, 0.013793, -0.058788, 0.228009 +221, 0.971515, 0.013972, -0.059270, 0.229020 +222, 0.971244, 0.014152, -0.059753, 0.230030 +223, 0.970972, 0.014333, -0.060237, 0.231040 +224, 0.970698, 0.014516, -0.060722, 0.232049 +225, 0.970423, 0.014700, -0.061209, 0.233059 +226, 0.970147, 0.014885, -0.061696, 0.234067 +227, 0.969869, 0.015072, -0.062185, 0.235076 +228, 0.969589, 0.015261, -0.062675, 0.236084 +229, 0.969309, 0.015450, -0.063166, 0.237091 +230, 0.969026, 0.015642, -0.063659, 0.238098 +231, 0.968743, 0.015834, -0.064152, 0.239105 +232, 0.968458, 0.016028, -0.064647, 0.240111 +233, 0.968171, 0.016223, -0.065143, 0.241117 +234, 0.967884, 0.016420, -0.065639, 0.242122 +235, 0.967594, 0.016618, -0.066137, 0.243127 +236, 0.967304, 0.016818, -0.066636, 0.244132 +237, 0.967012, 0.017019, -0.067136, 0.245136 +238, 0.966718, 0.017221, -0.067637, 0.246140 +239, 0.966423, 0.017425, -0.068139, 0.247143 +240, 0.966127, 0.017631, -0.068643, 0.248146 +241, 0.965829, 0.017837, -0.069147, 0.249148 +242, 0.965530, 0.018045, -0.069652, 0.250150 +243, 0.965229, 0.018255, -0.070158, 0.251151 +244, 0.964927, 0.018466, -0.070665, 0.252152 +245, 0.964624, 0.018678, -0.071173, 0.253153 +246, 0.964319, 0.018892, -0.071682, 0.254153 +247, 0.964013, 0.019108, -0.072192, 0.255152 +248, 0.963705, 0.019324, -0.072703, 0.256151 +249, 0.963396, 0.019542, -0.073215, 0.257150 +250, 0.963085, 0.019762, -0.073727, 0.258148 +251, 0.962773, 0.019983, -0.074241, 0.259146 +252, 0.962460, 0.020206, -0.074755, 0.260143 +253, 0.962145, 0.020430, -0.075271, 0.261140 +254, 0.961829, 0.020655, -0.075787, 0.262136 +255, 0.961511, 0.020882, -0.076304, 0.263132 +256, 0.961192, 0.021110, -0.076822, 0.264127 +257, 0.960871, 0.021340, -0.077340, 0.265122 +258, 0.960549, 0.021571, -0.077860, 0.266116 +259, 0.960226, 0.021803, -0.078380, 0.267110 +260, 0.959901, 0.022037, -0.078901, 0.268103 +261, 0.959575, 0.022273, -0.079423, 0.269096 +262, 0.959247, 0.022510, -0.079945, 0.270088 +263, 0.958918, 0.022748, -0.080468, 0.271080 +264, 0.958587, 0.022988, -0.080992, 0.272071 +265, 0.958255, 0.023229, -0.081517, 0.273062 +266, 0.957921, 0.023472, -0.082042, 0.274052 +267, 0.957587, 0.023716, -0.082568, 0.275042 +268, 0.957250, 0.023961, -0.083095, 0.276031 +269, 0.956912, 0.024208, -0.083623, 0.277020 +270, 0.956573, 0.024457, -0.084151, 0.278008 +271, 0.956232, 0.024706, -0.084679, 0.278996 +272, 0.955890, 0.024958, -0.085208, 0.279983 +273, 0.955547, 0.025211, -0.085738, 0.280969 +274, 0.955202, 0.025465, -0.086269, 0.281955 +275, 0.954855, 0.025720, -0.086800, 0.282941 +276, 0.954507, 0.025977, -0.087332, 0.283926 +277, 0.954158, 0.026236, -0.087864, 0.284910 +278, 0.953807, 0.026496, -0.088396, 0.285894 +279, 0.953455, 0.026757, -0.088930, 0.286877 +280, 0.953102, 0.027020, -0.089464, 0.287860 +281, 0.952747, 0.027284, -0.089998, 0.288842 +282, 0.952390, 0.027550, -0.090533, 0.289824 +283, 0.952032, 0.027817, -0.091068, 0.290805 +284, 0.951673, 0.028086, -0.091604, 0.291785 +285, 0.951312, 0.028356, -0.092140, 0.292765 +286, 0.950950, 0.028627, -0.092676, 0.293745 +287, 0.950586, 0.028900, -0.093213, 0.294724 +288, 0.950221, 0.029175, -0.093751, 0.295702 +289, 0.949855, 0.029450, -0.094289, 0.296680 +290, 0.949487, 0.029727, -0.094827, 0.297657 +291, 0.949117, 0.030006, -0.095365, 0.298633 +292, 0.948746, 0.030286, -0.095904, 0.299609 +293, 0.948374, 0.030568, -0.096444, 0.300584 +294, 0.948000, 0.030850, -0.096983, 0.301559 +295, 0.947625, 0.031135, -0.097523, 0.302533 +296, 0.947249, 0.031420, -0.098064, 0.303507 +297, 0.946871, 0.031708, -0.098604, 0.304480 +298, 0.946491, 0.031996, -0.099145, 0.305452 +299, 0.946110, 0.032286, -0.099686, 0.306424 +300, 0.945728, 0.032578, -0.100228, 0.307395 +301, 0.945344, 0.032870, -0.100769, 0.308366 +302, 0.944959, 0.033165, -0.101311, 0.309336 +303, 0.944572, 0.033460, -0.101853, 0.310305 +304, 0.944184, 0.033757, -0.102395, 0.311274 +305, 0.943795, 0.034056, -0.102938, 0.312242 +306, 0.943404, 0.034355, -0.103481, 0.313209 +307, 0.943012, 0.034657, -0.104023, 0.314176 +308, 0.942618, 0.034959, -0.104566, 0.315142 +309, 0.942223, 0.035263, -0.105110, 0.316108 +310, 0.941826, 0.035569, -0.105653, 0.317073 +311, 0.941428, 0.035876, -0.106196, 0.318037 +312, 0.941029, 0.036184, -0.106740, 0.319001 +313, 0.940628, 0.036493, -0.107283, 0.319964 +314, 0.940226, 0.036804, -0.107827, 0.320927 +315, 0.939822, 0.037117, -0.108370, 0.321889 +316, 0.939417, 0.037431, -0.108914, 0.322850 +317, 0.939011, 0.037746, -0.109458, 0.323810 +318, 0.938603, 0.038062, -0.110002, 0.324770 +319, 0.938193, 0.038380, -0.110545, 0.325729 +320, 0.937783, 0.038699, -0.111089, 0.326688 +321, 0.937371, 0.039020, -0.111633, 0.327646 +322, 0.936957, 0.039342, -0.112177, 0.328603 +323, 0.936542, 0.039665, -0.112720, 0.329560 +324, 0.936126, 0.039990, -0.113264, 0.330516 +325, 0.935708, 0.040316, -0.113807, 0.331471 +326, 0.935289, 0.040643, -0.114351, 0.332426 +327, 0.934868, 0.040972, -0.114894, 0.333380 +328, 0.934446, 0.041302, -0.115438, 0.334333 +329, 0.934023, 0.041634, -0.115981, 0.335286 +330, 0.933598, 0.041966, -0.116524, 0.336238 +331, 0.933172, 0.042300, -0.117067, 0.337189 +332, 0.932744, 0.042636, -0.117609, 0.338139 +333, 0.932315, 0.042973, -0.118152, 0.339089 +334, 0.931885, 0.043311, -0.118694, 0.340039 +335, 0.931453, 0.043650, -0.119236, 0.340987 +336, 0.931020, 0.043991, -0.119778, 0.341935 +337, 0.930586, 0.044333, -0.120320, 0.342882 +338, 0.930150, 0.044676, -0.120861, 0.343829 +339, 0.929712, 0.045021, -0.121402, 0.344774 +340, 0.929274, 0.045367, -0.121943, 0.345719 +341, 0.928834, 0.045714, -0.122484, 0.346664 +342, 0.928392, 0.046063, -0.123024, 0.347607 +343, 0.927950, 0.046412, -0.123564, 0.348550 +344, 0.927505, 0.046764, -0.124104, 0.349493 +345, 0.927060, 0.047116, -0.124644, 0.350434 +346, 0.926613, 0.047470, -0.125183, 0.351375 +347, 0.926165, 0.047825, -0.125721, 0.352315 +348, 0.925715, 0.048181, -0.126260, 0.353255 +349, 0.925264, 0.048538, -0.126798, 0.354194 +350, 0.924812, 0.048897, -0.127335, 0.355132 +351, 0.924358, 0.049257, -0.127872, 0.356069 +352, 0.923903, 0.049619, -0.128409, 0.357005 +353, 0.923446, 0.049981, -0.128945, 0.357941 +354, 0.922988, 0.050345, -0.129481, 0.358876 +355, 0.922529, 0.050710, -0.130017, 0.359811 +356, 0.922069, 0.051076, -0.130552, 0.360745 +357, 0.921607, 0.051444, -0.131086, 0.361678 +358, 0.921144, 0.051812, -0.131620, 0.362610 +359, 0.920679, 0.052182, -0.132153, 0.363541 +360, 0.920213, 0.052554, -0.132686, 0.364472 +361, 0.919746, 0.052926, -0.133219, 0.365402 +362, 0.919278, 0.053299, -0.133751, 0.366331 +363, 0.918808, 0.053674, -0.134282, 0.367260 +364, 0.918336, 0.054050, -0.134813, 0.368188 +365, 0.917864, 0.054427, -0.135343, 0.369115 +366, 0.917390, 0.054806, -0.135872, 0.370041 +367, 0.916915, 0.055185, -0.136401, 0.370967 +368, 0.916438, 0.055566, -0.136929, 0.371892 +369, 0.915961, 0.055948, -0.137457, 0.372816 +370, 0.915481, 0.056331, -0.137984, 0.373739 +371, 0.915001, 0.056715, -0.138510, 0.374662 +372, 0.914519, 0.057101, -0.139036, 0.375583 +373, 0.914036, 0.057487, -0.139561, 0.376505 +374, 0.913552, 0.057875, -0.140085, 0.377425 +375, 0.913066, 0.058264, -0.140609, 0.378344 +376, 0.912579, 0.058654, -0.141132, 0.379263 +377, 0.912091, 0.059045, -0.141654, 0.380181 +378, 0.911601, 0.059437, -0.142176, 0.381099 +379, 0.911111, 0.059830, -0.142696, 0.382015 +380, 0.910618, 0.060225, -0.143216, 0.382931 +381, 0.910125, 0.060620, -0.143735, 0.383846 +382, 0.909630, 0.061017, -0.144253, 0.384760 +383, 0.909134, 0.061415, -0.144771, 0.385674 +384, 0.908637, 0.061814, -0.145288, 0.386586 +385, 0.908139, 0.062214, -0.145803, 0.387498 +386, 0.907639, 0.062615, -0.146319, 0.388409 +387, 0.907138, 0.063017, -0.146833, 0.389320 +388, 0.906636, 0.063420, -0.147346, 0.390229 +389, 0.906132, 0.063824, -0.147858, 0.391138 +390, 0.905627, 0.064229, -0.148370, 0.392046 +391, 0.905121, 0.064636, -0.148881, 0.392954 +392, 0.904614, 0.065043, -0.149390, 0.393860 +393, 0.904105, 0.065451, -0.149899, 0.394766 +394, 0.903595, 0.065861, -0.150407, 0.395671 +395, 0.903084, 0.066271, -0.150914, 0.396575 +396, 0.902572, 0.066683, -0.151420, 0.397478 +397, 0.902059, 0.067095, -0.151925, 0.398381 +398, 0.901544, 0.067509, -0.152429, 0.399283 +399, 0.901028, 0.067923, -0.152932, 0.400184 +400, 0.900511, 0.068339, -0.153434, 0.401084 +401, 0.899992, 0.068755, -0.153935, 0.401983 +402, 0.899473, 0.069173, -0.154434, 0.402882 +403, 0.898952, 0.069591, -0.154933, 0.403780 +404, 0.898430, 0.070010, -0.155431, 0.404677 +405, 0.897907, 0.070431, -0.155928, 0.405573 +406, 0.897382, 0.070852, -0.156424, 0.406469 +407, 0.896857, 0.071274, -0.156918, 0.407363 +408, 0.896330, 0.071697, -0.157412, 0.408257 +409, 0.895802, 0.072121, -0.157904, 0.409150 +410, 0.895272, 0.072546, -0.158395, 0.410043 +411, 0.894742, 0.072972, -0.158886, 0.410934 +412, 0.894211, 0.073399, -0.159375, 0.411825 +413, 0.893678, 0.073827, -0.159862, 0.412715 +414, 0.893144, 0.074256, -0.160349, 0.413604 +415, 0.892609, 0.074685, -0.160834, 0.414492 +416, 0.892073, 0.075116, -0.161319, 0.415380 +417, 0.891535, 0.075547, -0.161802, 0.416267 +418, 0.890997, 0.075979, -0.162284, 0.417153 +419, 0.890457, 0.076412, -0.162764, 0.418038 +420, 0.889916, 0.076846, -0.163244, 0.418922 +421, 0.889374, 0.077281, -0.163722, 0.419806 +422, 0.888831, 0.077716, -0.164199, 0.420688 +423, 0.888287, 0.078153, -0.164675, 0.421570 +424, 0.887741, 0.078590, -0.165149, 0.422451 +425, 0.887195, 0.079028, -0.165622, 0.423332 +426, 0.886647, 0.079467, -0.166094, 0.424211 +427, 0.886098, 0.079906, -0.166565, 0.425090 +428, 0.885548, 0.080347, -0.167034, 0.425968 +429, 0.884997, 0.080788, -0.167502, 0.426845 +430, 0.884445, 0.081230, -0.167968, 0.427721 +431, 0.883892, 0.081673, -0.168433, 0.428597 +432, 0.883337, 0.082116, -0.168897, 0.429471 +433, 0.882782, 0.082561, -0.169359, 0.430345 +434, 0.882225, 0.083006, -0.169821, 0.431218 +435, 0.881668, 0.083451, -0.170280, 0.432091 +436, 0.881109, 0.083898, -0.170738, 0.432962 +437, 0.880549, 0.084345, -0.171195, 0.433833 +438, 0.879988, 0.084793, -0.171651, 0.434703 +439, 0.879427, 0.085242, -0.172105, 0.435572 +440, 0.878864, 0.085691, -0.172557, 0.436440 +441, 0.878300, 0.086141, -0.173008, 0.437307 +442, 0.877734, 0.086592, -0.173458, 0.438174 +443, 0.877168, 0.087043, -0.173906, 0.439040 +444, 0.876601, 0.087495, -0.174353, 0.439905 +445, 0.876033, 0.087948, -0.174798, 0.440769 +446, 0.875463, 0.088402, -0.175242, 0.441633 +447, 0.874893, 0.088856, -0.175684, 0.442495 +448, 0.874322, 0.089310, -0.176124, 0.443357 +449, 0.873749, 0.089766, -0.176564, 0.444218 +450, 0.873176, 0.090222, -0.177001, 0.445078 +451, 0.872601, 0.090678, -0.177437, 0.445938 +452, 0.872026, 0.091135, -0.177872, 0.446796 +453, 0.871449, 0.091593, -0.178304, 0.447654 +454, 0.870872, 0.092051, -0.178736, 0.448511 +455, 0.870294, 0.092510, -0.179165, 0.449367 +456, 0.869714, 0.092970, -0.179594, 0.450222 +457, 0.869134, 0.093430, -0.180020, 0.451077 +458, 0.868552, 0.093890, -0.180445, 0.451931 +459, 0.867970, 0.094351, -0.180868, 0.452784 +460, 0.867386, 0.094813, -0.181290, 0.453636 +461, 0.866802, 0.095275, -0.181710, 0.454487 +462, 0.866216, 0.095738, -0.182128, 0.455338 +463, 0.865630, 0.096201, -0.182545, 0.456188 +464, 0.865043, 0.096665, -0.182960, 0.457037 +465, 0.864455, 0.097129, -0.183373, 0.457885 +466, 0.863865, 0.097594, -0.183785, 0.458732 +467, 0.863275, 0.098059, -0.184194, 0.459579 +468, 0.862684, 0.098525, -0.184603, 0.460425 +469, 0.862092, 0.098991, -0.185009, 0.461270 +470, 0.861499, 0.099457, -0.185414, 0.462114 +471, 0.860905, 0.099924, -0.185817, 0.462957 +472, 0.860310, 0.100392, -0.186218, 0.463800 +473, 0.859715, 0.100859, -0.186618, 0.464642 +474, 0.859118, 0.101328, -0.187015, 0.465483 +475, 0.858520, 0.101796, -0.187411, 0.466323 +476, 0.857922, 0.102265, -0.187806, 0.467162 +477, 0.857323, 0.102735, -0.188198, 0.468001 +478, 0.856722, 0.103205, -0.188589, 0.468839 +479, 0.856121, 0.103675, -0.188977, 0.469676 +480, 0.855519, 0.104145, -0.189364, 0.470512 +481, 0.854916, 0.104616, -0.189750, 0.471348 +482, 0.854312, 0.105087, -0.190133, 0.472183 +483, 0.853708, 0.105559, -0.190515, 0.473017 +484, 0.853102, 0.106031, -0.190894, 0.473850 +485, 0.852496, 0.106503, -0.191272, 0.474682 +486, 0.851888, 0.106976, -0.191648, 0.475514 +487, 0.851280, 0.107448, -0.192022, 0.476345 +488, 0.850671, 0.107921, -0.192394, 0.477175 +489, 0.850062, 0.108395, -0.192765, 0.478004 +490, 0.849451, 0.108868, -0.193133, 0.478832 +491, 0.848839, 0.109342, -0.193500, 0.479660 +492, 0.848227, 0.109816, -0.193864, 0.480487 +493, 0.847614, 0.110291, -0.194227, 0.481313 +494, 0.847000, 0.110765, -0.194588, 0.482139 +495, 0.846385, 0.111240, -0.194947, 0.482963 +496, 0.845769, 0.111715, -0.195304, 0.483787 +497, 0.845153, 0.112191, -0.195659, 0.484610 +498, 0.844536, 0.112666, -0.196012, 0.485433 +499, 0.843918, 0.113142, -0.196363, 0.486254 +500, 0.843299, 0.113617, -0.196712, 0.487075 +501, 0.842679, 0.114093, -0.197059, 0.487895 +502, 0.842059, 0.114570, -0.197404, 0.488715 +503, 0.841438, 0.115046, -0.197747, 0.489533 +504, 0.840816, 0.115522, -0.198089, 0.490351 +505, 0.840193, 0.115999, -0.198428, 0.491168 +506, 0.839570, 0.116475, -0.198765, 0.491984 +507, 0.838946, 0.116952, -0.199100, 0.492800 +508, 0.838321, 0.117429, -0.199433, 0.493615 +509, 0.837695, 0.117906, -0.199764, 0.494429 +510, 0.837068, 0.118383, -0.200093, 0.495242 +511, 0.836441, 0.118860, -0.200420, 0.496055 +512, 0.835813, 0.119337, -0.200745, 0.496866 +513, 0.835184, 0.119814, -0.201068, 0.497678 +514, 0.834555, 0.120292, -0.201389, 0.498488 +515, 0.833925, 0.120769, -0.201708, 0.499297 +516, 0.833294, 0.121246, -0.202025, 0.500106 +517, 0.832663, 0.121724, -0.202339, 0.500914 +518, 0.832030, 0.122201, -0.202652, 0.501722 +519, 0.831397, 0.122678, -0.202962, 0.502529 +520, 0.830764, 0.123155, -0.203271, 0.503335 +521, 0.830129, 0.123633, -0.203577, 0.504140 +522, 0.829494, 0.124110, -0.203881, 0.504944 +523, 0.828858, 0.124587, -0.204183, 0.505748 +524, 0.828222, 0.125064, -0.204483, 0.506551 +525, 0.827585, 0.125541, -0.204781, 0.507353 +526, 0.826947, 0.126018, -0.205076, 0.508155 +527, 0.826309, 0.126495, -0.205370, 0.508956 +528, 0.825670, 0.126972, -0.205661, 0.509756 +529, 0.825030, 0.127449, -0.205950, 0.510556 +530, 0.824389, 0.127925, -0.206237, 0.511354 +531, 0.823748, 0.128402, -0.206522, 0.512152 +532, 0.823107, 0.128878, -0.206805, 0.512950 +533, 0.822464, 0.129354, -0.207085, 0.513746 +534, 0.821821, 0.129830, -0.207364, 0.514542 +535, 0.821178, 0.130306, -0.207640, 0.515338 +536, 0.820534, 0.130782, -0.207914, 0.516132 +537, 0.819889, 0.131258, -0.208186, 0.516926 +538, 0.819243, 0.131733, -0.208455, 0.517719 +539, 0.818597, 0.132208, -0.208723, 0.518512 +540, 0.817951, 0.132683, -0.208988, 0.519304 +541, 0.817303, 0.133158, -0.209251, 0.520095 +542, 0.816655, 0.133632, -0.209511, 0.520885 +543, 0.816007, 0.134106, -0.209770, 0.521675 +544, 0.815358, 0.134580, -0.210026, 0.522464 +545, 0.814708, 0.135054, -0.210280, 0.523252 +546, 0.814058, 0.135528, -0.210532, 0.524040 +547, 0.813407, 0.136001, -0.210782, 0.524827 +548, 0.812756, 0.136474, -0.211029, 0.525614 +549, 0.812104, 0.136946, -0.211274, 0.526399 +550, 0.811451, 0.137418, -0.211517, 0.527184 +551, 0.810798, 0.137890, -0.211757, 0.527969 +552, 0.810145, 0.138362, -0.211996, 0.528752 +553, 0.809491, 0.138833, -0.212232, 0.529536 +554, 0.808836, 0.139304, -0.212465, 0.530318 +555, 0.808181, 0.139775, -0.212697, 0.531100 +556, 0.807525, 0.140245, -0.212926, 0.531881 +557, 0.806869, 0.140715, -0.213153, 0.532661 +558, 0.806212, 0.141184, -0.213377, 0.533441 +559, 0.805555, 0.141653, -0.213600, 0.534220 +560, 0.804897, 0.142122, -0.213820, 0.534999 +561, 0.804238, 0.142590, -0.214037, 0.535777 +562, 0.803579, 0.143058, -0.214253, 0.536554 +563, 0.802920, 0.143525, -0.214466, 0.537331 +564, 0.802260, 0.143992, -0.214677, 0.538107 +565, 0.801600, 0.144458, -0.214885, 0.538882 +566, 0.800939, 0.144924, -0.215091, 0.539657 +567, 0.800278, 0.145390, -0.215295, 0.540431 +568, 0.799616, 0.145855, -0.215496, 0.541205 +569, 0.798953, 0.146319, -0.215695, 0.541978 +570, 0.798291, 0.146783, -0.215892, 0.542750 +571, 0.797627, 0.147247, -0.216087, 0.543522 +572, 0.796963, 0.147709, -0.216279, 0.544293 +573, 0.796299, 0.148172, -0.216469, 0.545063 +574, 0.795635, 0.148634, -0.216656, 0.545833 +575, 0.794969, 0.149095, -0.216841, 0.546602 +576, 0.794304, 0.149556, -0.217024, 0.547371 +577, 0.793638, 0.150016, -0.217204, 0.548139 +578, 0.792971, 0.150475, -0.217382, 0.548907 +579, 0.792304, 0.150934, -0.217558, 0.549674 +580, 0.791637, 0.151393, -0.217731, 0.550440 +581, 0.790969, 0.151850, -0.217902, 0.551206 +582, 0.790301, 0.152307, -0.218071, 0.551971 +583, 0.789632, 0.152764, -0.218237, 0.552735 +584, 0.788963, 0.153220, -0.218401, 0.553499 +585, 0.788294, 0.153675, -0.218562, 0.554263 +586, 0.787624, 0.154129, -0.218721, 0.555026 +587, 0.786954, 0.154583, -0.218878, 0.555788 +588, 0.786283, 0.155036, -0.219032, 0.556550 +589, 0.785612, 0.155489, -0.219184, 0.557311 +590, 0.784940, 0.155940, -0.219334, 0.558072 +591, 0.784269, 0.156391, -0.219481, 0.558832 +592, 0.783596, 0.156841, -0.219625, 0.559591 +593, 0.782924, 0.157291, -0.219768, 0.560350 +594, 0.782251, 0.157740, -0.219908, 0.561109 +595, 0.781577, 0.158188, -0.220045, 0.561866 +596, 0.780903, 0.158635, -0.220180, 0.562624 +597, 0.780229, 0.159082, -0.220313, 0.563381 +598, 0.779555, 0.159527, -0.220443, 0.564137 +599, 0.778880, 0.159972, -0.220571, 0.564893 +600, 0.778204, 0.160416, -0.220697, 0.565648 +601, 0.777529, 0.160860, -0.220820, 0.566402 +602, 0.776853, 0.161302, -0.220941, 0.567157 +603, 0.776176, 0.161744, -0.221059, 0.567910 +604, 0.775500, 0.162185, -0.221175, 0.568663 +605, 0.774823, 0.162624, -0.221288, 0.569416 +606, 0.774145, 0.163064, -0.221399, 0.570168 +607, 0.773468, 0.163502, -0.221508, 0.570920 +608, 0.772790, 0.163939, -0.221614, 0.571671 +609, 0.772111, 0.164375, -0.221718, 0.572421 +610, 0.771432, 0.164811, -0.221819, 0.573171 +611, 0.770753, 0.165246, -0.221918, 0.573921 +612, 0.770074, 0.165679, -0.222015, 0.574670 +613, 0.769394, 0.166112, -0.222109, 0.575419 +614, 0.768714, 0.166544, -0.222201, 0.576167 +615, 0.768034, 0.166975, -0.222290, 0.576914 +616, 0.767354, 0.167405, -0.222377, 0.577661 +617, 0.766673, 0.167834, -0.222461, 0.578408 +618, 0.765991, 0.168262, -0.222543, 0.579154 +619, 0.765310, 0.168689, -0.222623, 0.579900 +620, 0.764628, 0.169115, -0.222700, 0.580645 +621, 0.763946, 0.169540, -0.222775, 0.581390 +622, 0.763263, 0.169964, -0.222847, 0.582134 +623, 0.762581, 0.170387, -0.222917, 0.582878 +624, 0.761898, 0.170808, -0.222985, 0.583622 +625, 0.761215, 0.171229, -0.223050, 0.584364 +626, 0.760531, 0.171649, -0.223112, 0.585107 +627, 0.759847, 0.172068, -0.223172, 0.585849 +628, 0.759163, 0.172486, -0.223230, 0.586591 +629, 0.758479, 0.172902, -0.223285, 0.587332 +630, 0.757794, 0.173318, -0.223338, 0.588072 +631, 0.757109, 0.173732, -0.223389, 0.588813 +632, 0.756424, 0.174145, -0.223437, 0.589552 +633, 0.755739, 0.174558, -0.223482, 0.590292 +634, 0.755053, 0.174969, -0.223526, 0.591031 +635, 0.754367, 0.175379, -0.223566, 0.591769 +636, 0.753681, 0.175787, -0.223605, 0.592507 +637, 0.752994, 0.176195, -0.223641, 0.593245 +638, 0.752308, 0.176601, -0.223674, 0.593982 +639, 0.751621, 0.177007, -0.223705, 0.594719 +640, 0.750933, 0.177411, -0.223734, 0.595456 +641, 0.750246, 0.177814, -0.223760, 0.596192 +642, 0.749558, 0.178215, -0.223784, 0.596927 +643, 0.748870, 0.178616, -0.223805, 0.597663 +644, 0.748182, 0.179015, -0.223824, 0.598398 +645, 0.747494, 0.179413, -0.223841, 0.599132 +646, 0.746805, 0.179810, -0.223855, 0.599866 +647, 0.746116, 0.180205, -0.223867, 0.600600 +648, 0.745427, 0.180600, -0.223876, 0.601333 +649, 0.744738, 0.180993, -0.223883, 0.602066 +650, 0.744049, 0.181384, -0.223887, 0.602798 +651, 0.743359, 0.181775, -0.223889, 0.603530 +652, 0.742669, 0.182164, -0.223889, 0.604262 +653, 0.741979, 0.182552, -0.223886, 0.604994 +654, 0.741288, 0.182938, -0.223881, 0.605725 +655, 0.740598, 0.183324, -0.223873, 0.606455 +656, 0.739907, 0.183708, -0.223863, 0.607186 +657, 0.739216, 0.184090, -0.223851, 0.607915 +658, 0.738525, 0.184471, -0.223836, 0.608645 +659, 0.737833, 0.184851, -0.223819, 0.609374 +660, 0.737142, 0.185230, -0.223799, 0.610103 +661, 0.736450, 0.185607, -0.223777, 0.610831 +662, 0.735758, 0.185983, -0.223753, 0.611560 +663, 0.735066, 0.186357, -0.223726, 0.612287 +664, 0.734373, 0.186730, -0.223697, 0.613015 +665, 0.733681, 0.187102, -0.223665, 0.613742 +666, 0.732988, 0.187472, -0.223632, 0.614469 +667, 0.732295, 0.187840, -0.223595, 0.615195 +668, 0.731602, 0.188208, -0.223556, 0.615921 +669, 0.730909, 0.188574, -0.223515, 0.616647 +670, 0.730215, 0.188938, -0.223472, 0.617372 +671, 0.729521, 0.189301, -0.223426, 0.618098 +672, 0.728827, 0.189662, -0.223378, 0.618822 +673, 0.728133, 0.190022, -0.223327, 0.619547 +674, 0.727439, 0.190381, -0.223274, 0.620271 +675, 0.726745, 0.190738, -0.223219, 0.620995 +676, 0.726050, 0.191093, -0.223161, 0.621718 +677, 0.725355, 0.191448, -0.223101, 0.622442 +678, 0.724660, 0.191800, -0.223039, 0.623165 +679, 0.723965, 0.192151, -0.222974, 0.623887 +680, 0.723270, 0.192500, -0.222907, 0.624609 +681, 0.722574, 0.192848, -0.222837, 0.625331 +682, 0.721879, 0.193195, -0.222766, 0.626053 +683, 0.721183, 0.193539, -0.222691, 0.626775 +684, 0.720487, 0.193883, -0.222615, 0.627496 +685, 0.719791, 0.194224, -0.222536, 0.628217 +686, 0.719094, 0.194564, -0.222455, 0.628937 +687, 0.718398, 0.194903, -0.222371, 0.629657 +688, 0.717701, 0.195240, -0.222285, 0.630377 +689, 0.717004, 0.195575, -0.222197, 0.631097 +690, 0.716307, 0.195909, -0.222107, 0.631817 +691, 0.715610, 0.196241, -0.222014, 0.632536 +692, 0.714913, 0.196571, -0.221919, 0.633255 +693, 0.714215, 0.196900, -0.221821, 0.633973 +694, 0.713518, 0.197227, -0.221722, 0.634692 +695, 0.712820, 0.197552, -0.221620, 0.635410 +696, 0.712122, 0.197876, -0.221515, 0.636128 +697, 0.711424, 0.198198, -0.221409, 0.636845 +698, 0.710726, 0.198519, -0.221300, 0.637562 +699, 0.710027, 0.198837, -0.221188, 0.638280 +700, 0.709329, 0.199154, -0.221075, 0.638996 +701, 0.708630, 0.199470, -0.220959, 0.639713 +702, 0.707931, 0.199783, -0.220841, 0.640429 +703, 0.707232, 0.200095, -0.220720, 0.641145 +704, 0.706533, 0.200406, -0.220598, 0.641861 +705, 0.705833, 0.200714, -0.220473, 0.642577 +706, 0.705134, 0.201021, -0.220346, 0.643292 +707, 0.704434, 0.201326, -0.220216, 0.644007 +708, 0.703734, 0.201629, -0.220085, 0.644722 +709, 0.703034, 0.201931, -0.219951, 0.645437 +710, 0.702334, 0.202230, -0.219814, 0.646151 +711, 0.701634, 0.202528, -0.219676, 0.646865 +712, 0.700934, 0.202824, -0.219535, 0.647579 +713, 0.700233, 0.203119, -0.219392, 0.648293 +714, 0.699532, 0.203411, -0.219247, 0.649006 +715, 0.698831, 0.203702, -0.219100, 0.649719 +716, 0.698130, 0.203991, -0.218950, 0.650433 +717, 0.697429, 0.204278, -0.218798, 0.651145 +718, 0.696728, 0.204563, -0.218644, 0.651858 +719, 0.696026, 0.204847, -0.218488, 0.652570 +720, 0.695325, 0.205128, -0.218329, 0.653282 +721, 0.694623, 0.205408, -0.218169, 0.653994 +722, 0.693921, 0.205686, -0.218006, 0.654706 +723, 0.693219, 0.205962, -0.217841, 0.655418 +724, 0.692517, 0.206236, -0.217674, 0.656129 +725, 0.691814, 0.206509, -0.217504, 0.656840 +726, 0.691112, 0.206779, -0.217333, 0.657551 +727, 0.690409, 0.207047, -0.217159, 0.658262 +728, 0.689706, 0.207314, -0.216983, 0.658972 +729, 0.689003, 0.207579, -0.216805, 0.659683 +730, 0.688300, 0.207842, -0.216625, 0.660393 +731, 0.687597, 0.208103, -0.216442, 0.661103 +732, 0.686893, 0.208362, -0.216258, 0.661813 +733, 0.686190, 0.208619, -0.216071, 0.662522 +734, 0.685486, 0.208874, -0.215882, 0.663231 +735, 0.684782, 0.209127, -0.215691, 0.663941 +736, 0.684078, 0.209378, -0.215498, 0.664650 +737, 0.683373, 0.209627, -0.215303, 0.665358 +738, 0.682669, 0.209875, -0.215106, 0.666067 +739, 0.681964, 0.210120, -0.214906, 0.666775 +740, 0.681260, 0.210363, -0.214705, 0.667484 +741, 0.680555, 0.210605, -0.214501, 0.668192 +742, 0.679850, 0.210844, -0.214296, 0.668900 +743, 0.679144, 0.211081, -0.214088, 0.669607 +744, 0.678439, 0.211317, -0.213878, 0.670315 +745, 0.677733, 0.211550, -0.213666, 0.671022 +746, 0.677028, 0.211782, -0.213452, 0.671729 +747, 0.676322, 0.212011, -0.213236, 0.672436 +748, 0.675616, 0.212238, -0.213018, 0.673143 +749, 0.674910, 0.212463, -0.212798, 0.673850 +750, 0.674203, 0.212687, -0.212575, 0.674556 +751, 0.673497, 0.212908, -0.212351, 0.675263 +752, 0.672790, 0.213127, -0.212125, 0.675969 +753, 0.672083, 0.213344, -0.211896, 0.676675 +754, 0.671376, 0.213559, -0.211666, 0.677381 +755, 0.670669, 0.213772, -0.211434, 0.678086 +756, 0.669961, 0.213983, -0.211199, 0.678792 +757, 0.669253, 0.214192, -0.210963, 0.679497 +758, 0.668546, 0.214399, -0.210725, 0.680202 +759, 0.667838, 0.214603, -0.210484, 0.680907 +760, 0.667130, 0.214806, -0.210242, 0.681612 +761, 0.666421, 0.215006, -0.209998, 0.682317 +762, 0.665713, 0.215205, -0.209751, 0.683021 +763, 0.665004, 0.215401, -0.209503, 0.683726 +764, 0.664295, 0.215595, -0.209253, 0.684430 +765, 0.663586, 0.215787, -0.209001, 0.685134 +766, 0.662877, 0.215977, -0.208746, 0.685838 +767, 0.662167, 0.216165, -0.208490, 0.686541 +768, 0.661458, 0.216350, -0.208232, 0.687245 +769, 0.660748, 0.216534, -0.207972, 0.687948 +770, 0.660038, 0.216715, -0.207710, 0.688652 +771, 0.659328, 0.216894, -0.207447, 0.689355 +772, 0.658617, 0.217071, -0.207181, 0.690058 +773, 0.657907, 0.217246, -0.206913, 0.690760 +774, 0.657196, 0.217419, -0.206644, 0.691463 +775, 0.656485, 0.217589, -0.206373, 0.692166 +776, 0.655773, 0.217758, -0.206099, 0.692868 +777, 0.655062, 0.217924, -0.205824, 0.693570 +778, 0.654350, 0.218088, -0.205547, 0.694272 +779, 0.653638, 0.218249, -0.205268, 0.694974 +780, 0.652926, 0.218409, -0.204988, 0.695676 +781, 0.652214, 0.218566, -0.204705, 0.696377 +782, 0.651502, 0.218722, -0.204421, 0.697079 +783, 0.650789, 0.218874, -0.204135, 0.697780 +784, 0.650076, 0.219025, -0.203847, 0.698481 +785, 0.649363, 0.219174, -0.203557, 0.699182 +786, 0.648650, 0.219320, -0.203265, 0.699883 +787, 0.647936, 0.219464, -0.202972, 0.700583 +788, 0.647222, 0.219606, -0.202676, 0.701284 +789, 0.646508, 0.219745, -0.202379, 0.701984 +790, 0.645794, 0.219883, -0.202081, 0.702684 +791, 0.645079, 0.220018, -0.201780, 0.703384 +792, 0.644365, 0.220151, -0.201478, 0.704084 +793, 0.643650, 0.220281, -0.201174, 0.704784 +794, 0.642934, 0.220410, -0.200868, 0.705484 +795, 0.642219, 0.220536, -0.200560, 0.706183 +796, 0.641503, 0.220659, -0.200251, 0.706882 +797, 0.640787, 0.220781, -0.199940, 0.707581 +798, 0.640071, 0.220900, -0.199627, 0.708280 +799, 0.639355, 0.221017, -0.199312, 0.708979 +800, 0.638638, 0.221132, -0.198996, 0.709678 +801, 0.637921, 0.221244, -0.198678, 0.710376 +802, 0.637204, 0.221354, -0.198359, 0.711075 +803, 0.636486, 0.221462, -0.198037, 0.711773 +804, 0.635769, 0.221568, -0.197714, 0.712471 +805, 0.635051, 0.221671, -0.197390, 0.713169 +806, 0.634333, 0.221772, -0.197064, 0.713867 +807, 0.633614, 0.221870, -0.196736, 0.714564 +808, 0.632895, 0.221967, -0.196406, 0.715262 +809, 0.632176, 0.222061, -0.196075, 0.715959 +810, 0.631457, 0.222152, -0.195742, 0.716656 +811, 0.630737, 0.222242, -0.195408, 0.717353 +812, 0.630017, 0.222329, -0.195071, 0.718049 +813, 0.629297, 0.222413, -0.194734, 0.718746 +814, 0.628577, 0.222496, -0.194395, 0.719442 +815, 0.627856, 0.222576, -0.194054, 0.720139 +816, 0.627135, 0.222653, -0.193711, 0.720835 +817, 0.626414, 0.222729, -0.193367, 0.721531 +818, 0.625692, 0.222802, -0.193022, 0.722226 +819, 0.624971, 0.222872, -0.192675, 0.722922 +820, 0.624248, 0.222941, -0.192326, 0.723617 +821, 0.623526, 0.223007, -0.191976, 0.724313 +822, 0.622803, 0.223070, -0.191624, 0.725008 +823, 0.622080, 0.223131, -0.191271, 0.725703 +824, 0.621357, 0.223190, -0.190916, 0.726397 +825, 0.620633, 0.223247, -0.190560, 0.727092 +826, 0.619909, 0.223301, -0.190202, 0.727786 +827, 0.619185, 0.223353, -0.189843, 0.728480 +828, 0.618460, 0.223402, -0.189482, 0.729174 +829, 0.617735, 0.223449, -0.189120, 0.729868 +830, 0.617010, 0.223494, -0.188756, 0.730562 +831, 0.616284, 0.223536, -0.188391, 0.731255 +832, 0.615558, 0.223576, -0.188024, 0.731949 +833, 0.614832, 0.223614, -0.187656, 0.732642 +834, 0.614105, 0.223649, -0.187287, 0.733334 +835, 0.613378, 0.223682, -0.186916, 0.734027 +836, 0.612651, 0.223712, -0.186544, 0.734720 +837, 0.611924, 0.223740, -0.186170, 0.735412 +838, 0.611196, 0.223765, -0.185795, 0.736104 +839, 0.610467, 0.223789, -0.185419, 0.736796 +840, 0.609739, 0.223809, -0.185041, 0.737488 +841, 0.609010, 0.223828, -0.184662, 0.738179 +842, 0.608280, 0.223844, -0.184281, 0.738870 +843, 0.607551, 0.223857, -0.183899, 0.739562 +844, 0.606820, 0.223869, -0.183516, 0.740252 +845, 0.606090, 0.223877, -0.183131, 0.740943 +846, 0.605359, 0.223884, -0.182745, 0.741634 +847, 0.604628, 0.223888, -0.182358, 0.742324 +848, 0.603896, 0.223889, -0.181970, 0.743014 +849, 0.603164, 0.223889, -0.181580, 0.743704 +850, 0.602432, 0.223885, -0.181189, 0.744393 +851, 0.601699, 0.223880, -0.180796, 0.745083 +852, 0.600966, 0.223872, -0.180403, 0.745772 +853, 0.600233, 0.223861, -0.180008, 0.746461 +854, 0.599499, 0.223848, -0.179612, 0.747150 +855, 0.598765, 0.223833, -0.179214, 0.747838 +856, 0.598030, 0.223815, -0.178816, 0.748526 +857, 0.597295, 0.223795, -0.178416, 0.749214 +858, 0.596560, 0.223772, -0.178015, 0.749902 +859, 0.595824, 0.223747, -0.177612, 0.750590 +860, 0.595088, 0.223720, -0.177209, 0.751277 +861, 0.594351, 0.223690, -0.176804, 0.751964 +862, 0.593614, 0.223658, -0.176398, 0.752651 +863, 0.592876, 0.223623, -0.175991, 0.753338 +864, 0.592138, 0.223586, -0.175583, 0.754024 +865, 0.591400, 0.223546, -0.175174, 0.754710 +866, 0.590661, 0.223504, -0.174763, 0.755396 +867, 0.589922, 0.223460, -0.174352, 0.756081 +868, 0.589183, 0.223413, -0.173939, 0.756767 +869, 0.588443, 0.223364, -0.173525, 0.757452 +870, 0.587702, 0.223312, -0.173110, 0.758136 +871, 0.586961, 0.223258, -0.172694, 0.758821 +872, 0.586220, 0.223202, -0.172277, 0.759505 +873, 0.585478, 0.223143, -0.171859, 0.760189 +874, 0.584736, 0.223081, -0.171439, 0.760873 +875, 0.583993, 0.223017, -0.171019, 0.761556 +876, 0.583250, 0.222951, -0.170598, 0.762239 +877, 0.582506, 0.222883, -0.170175, 0.762922 +878, 0.581762, 0.222811, -0.169752, 0.763605 +879, 0.581018, 0.222738, -0.169327, 0.764287 +880, 0.580273, 0.222662, -0.168902, 0.764969 +881, 0.579527, 0.222584, -0.168475, 0.765651 +882, 0.578781, 0.222503, -0.168048, 0.766332 +883, 0.578035, 0.222420, -0.167619, 0.767013 +884, 0.577288, 0.222334, -0.167190, 0.767694 +885, 0.576541, 0.222246, -0.166760, 0.768374 +886, 0.575793, 0.222155, -0.166328, 0.769054 +887, 0.575044, 0.222062, -0.165896, 0.769734 +888, 0.574295, 0.221967, -0.165463, 0.770414 +889, 0.573546, 0.221869, -0.165028, 0.771093 +890, 0.572796, 0.221769, -0.164593, 0.771772 +891, 0.572046, 0.221667, -0.164157, 0.772450 +892, 0.571295, 0.221561, -0.163721, 0.773129 +893, 0.570544, 0.221454, -0.163283, 0.773807 +894, 0.569792, 0.221344, -0.162844, 0.774484 +895, 0.569040, 0.221232, -0.162405, 0.775161 +896, 0.568287, 0.221117, -0.161964, 0.775838 +897, 0.567533, 0.221000, -0.161523, 0.776515 +898, 0.566780, 0.220881, -0.161081, 0.777191 +899, 0.566025, 0.220759, -0.160638, 0.777867 +900, 0.565270, 0.220634, -0.160194, 0.778542 +901, 0.564515, 0.220508, -0.159750, 0.779217 +902, 0.563759, 0.220379, -0.159305, 0.779892 +903, 0.563002, 0.220247, -0.158858, 0.780566 +904, 0.562245, 0.220113, -0.158412, 0.781240 +905, 0.561488, 0.219977, -0.157964, 0.781914 +906, 0.560729, 0.219838, -0.157516, 0.782587 +907, 0.559971, 0.219697, -0.157066, 0.783260 +908, 0.559211, 0.219553, -0.156616, 0.783932 +909, 0.558452, 0.219407, -0.156166, 0.784605 +910, 0.557691, 0.219259, -0.155714, 0.785276 +911, 0.556930, 0.219108, -0.155262, 0.785948 +912, 0.556169, 0.218955, -0.154810, 0.786618 +913, 0.555407, 0.218800, -0.154356, 0.787289 +914, 0.554644, 0.218642, -0.153902, 0.787959 +915, 0.553881, 0.218482, -0.153447, 0.788629 +916, 0.553117, 0.218319, -0.152992, 0.789298 +917, 0.552353, 0.218154, -0.152536, 0.789967 +918, 0.551588, 0.217987, -0.152079, 0.790635 +919, 0.550823, 0.217817, -0.151621, 0.791303 +920, 0.550057, 0.217645, -0.151163, 0.791971 +921, 0.549290, 0.217470, -0.150705, 0.792638 +922, 0.548523, 0.217294, -0.150246, 0.793305 +923, 0.547755, 0.217114, -0.149786, 0.793971 +924, 0.546987, 0.216933, -0.149325, 0.794637 +925, 0.546218, 0.216749, -0.148864, 0.795302 +926, 0.545448, 0.216563, -0.148403, 0.795967 +927, 0.544678, 0.216374, -0.147941, 0.796631 +928, 0.543907, 0.216183, -0.147478, 0.797295 +929, 0.543136, 0.215990, -0.147015, 0.797959 +930, 0.542364, 0.215794, -0.146551, 0.798622 +931, 0.541591, 0.215596, -0.146087, 0.799285 +932, 0.540818, 0.215396, -0.145622, 0.799947 +933, 0.540044, 0.215193, -0.145157, 0.800608 +934, 0.539270, 0.214988, -0.144691, 0.801269 +935, 0.538495, 0.214781, -0.144225, 0.801930 +936, 0.537719, 0.214571, -0.143758, 0.802590 +937, 0.536943, 0.214360, -0.143291, 0.803250 +938, 0.536166, 0.214145, -0.142824, 0.803909 +939, 0.535388, 0.213929, -0.142356, 0.804568 +940, 0.534610, 0.213710, -0.141887, 0.805226 +941, 0.533831, 0.213489, -0.141419, 0.805883 +942, 0.533051, 0.213265, -0.140949, 0.806540 +943, 0.532271, 0.213040, -0.140480, 0.807197 +944, 0.531490, 0.212812, -0.140010, 0.807853 +945, 0.530709, 0.212581, -0.139539, 0.808508 +946, 0.529927, 0.212349, -0.139069, 0.809163 +947, 0.529144, 0.212114, -0.138598, 0.809818 +948, 0.528361, 0.211877, -0.138126, 0.810472 +949, 0.527577, 0.211637, -0.137654, 0.811125 +950, 0.526792, 0.211396, -0.137182, 0.811778 +951, 0.526007, 0.211152, -0.136710, 0.812430 +952, 0.525220, 0.210906, -0.136237, 0.813082 +953, 0.524434, 0.210657, -0.135764, 0.813733 +954, 0.523646, 0.210406, -0.135291, 0.814383 +955, 0.522858, 0.210154, -0.134817, 0.815033 +956, 0.522070, 0.209898, -0.134343, 0.815682 +957, 0.521280, 0.209641, -0.133869, 0.816331 +958, 0.520490, 0.209381, -0.133395, 0.816979 +959, 0.519699, 0.209120, -0.132920, 0.817627 +960, 0.518908, 0.208856, -0.132446, 0.818274 +961, 0.518116, 0.208589, -0.131971, 0.818920 +962, 0.517323, 0.208321, -0.131495, 0.819566 +963, 0.516529, 0.208050, -0.131020, 0.820211 +964, 0.515735, 0.207777, -0.130544, 0.820856 +965, 0.514940, 0.207502, -0.130068, 0.821500 +966, 0.514145, 0.207225, -0.129592, 0.822143 +967, 0.513348, 0.206945, -0.129116, 0.822786 +968, 0.512551, 0.206664, -0.128640, 0.823428 +969, 0.511753, 0.206380, -0.128164, 0.824069 +970, 0.510955, 0.206094, -0.127687, 0.824710 +971, 0.510156, 0.205806, -0.127210, 0.825350 +972, 0.509356, 0.205516, -0.126734, 0.825989 +973, 0.508556, 0.205223, -0.126257, 0.826628 +974, 0.507754, 0.204929, -0.125780, 0.827266 +975, 0.506952, 0.204632, -0.125303, 0.827904 +976, 0.506150, 0.204333, -0.124826, 0.828540 +977, 0.505346, 0.204032, -0.124349, 0.829176 +978, 0.504542, 0.203729, -0.123871, 0.829812 +979, 0.503737, 0.203424, -0.123394, 0.830447 +980, 0.502932, 0.203117, -0.122917, 0.831081 +981, 0.502125, 0.202807, -0.122440, 0.831714 +982, 0.501318, 0.202496, -0.121962, 0.832346 +983, 0.500511, 0.202182, -0.121485, 0.832978 +984, 0.499702, 0.201867, -0.121008, 0.833610 +985, 0.498893, 0.201549, -0.120530, 0.834240 +986, 0.498083, 0.201229, -0.120053, 0.834870 +987, 0.497272, 0.200907, -0.119576, 0.835499 +988, 0.496461, 0.200583, -0.119099, 0.836127 +989, 0.495648, 0.200257, -0.118621, 0.836755 +990, 0.494836, 0.199929, -0.118144, 0.837382 +991, 0.494022, 0.199599, -0.117667, 0.838008 +992, 0.493207, 0.199267, -0.117191, 0.838633 +993, 0.492392, 0.198933, -0.116714, 0.839258 +994, 0.491576, 0.198597, -0.116237, 0.839882 +995, 0.490760, 0.198258, -0.115760, 0.840505 +996, 0.489942, 0.197918, -0.115284, 0.841127 +997, 0.489124, 0.197576, -0.114808, 0.841749 +998, 0.488305, 0.197232, -0.114331, 0.842369 +999, 0.487485, 0.196886, -0.113855, 0.842989 +1000, 0.486665, 0.196538, -0.113380, 0.843609 +1001, 0.485844, 0.196187, -0.112904, 0.844227 +1002, 0.485022, 0.195835, -0.112428, 0.844845 +1003, 0.484199, 0.195481, -0.111953, 0.845461 +1004, 0.483375, 0.195125, -0.111478, 0.846077 +1005, 0.482551, 0.194767, -0.111003, 0.846693 +1006, 0.481726, 0.194408, -0.110528, 0.847307 +1007, 0.480900, 0.194046, -0.110054, 0.847921 +1008, 0.480074, 0.193682, -0.109579, 0.848533 +1009, 0.479246, 0.193317, -0.109105, 0.849145 +1010, 0.478418, 0.192949, -0.108632, 0.849756 +1011, 0.477589, 0.192580, -0.108158, 0.850367 +1012, 0.476760, 0.192208, -0.107685, 0.850976 +1013, 0.475929, 0.191835, -0.107212, 0.851584 +1014, 0.475098, 0.191460, -0.106739, 0.852192 +1015, 0.474266, 0.191083, -0.106267, 0.852799 +1016, 0.473433, 0.190705, -0.105795, 0.853405 +1017, 0.472600, 0.190324, -0.105323, 0.854010 +1018, 0.471765, 0.189942, -0.104852, 0.854614 +1019, 0.470930, 0.189557, -0.104381, 0.855218 +1020, 0.470094, 0.189171, -0.103910, 0.855820 +1021, 0.469258, 0.188783, -0.103440, 0.856422 +1022, 0.468420, 0.188394, -0.102970, 0.857023 +1023, 0.467582, 0.188002, -0.102500, 0.857622 +1024, 0.466743, 0.187609, -0.102031, 0.858221 +1025, 0.465903, 0.187214, -0.101562, 0.858819 +1026, 0.465062, 0.186817, -0.101094, 0.859416 +1027, 0.464221, 0.186418, -0.100625, 0.860013 +1028, 0.463379, 0.186018, -0.100158, 0.860608 +1029, 0.462536, 0.185616, -0.099691, 0.861202 +1030, 0.461692, 0.185212, -0.099224, 0.861796 +1031, 0.460847, 0.184806, -0.098758, 0.862388 +1032, 0.460002, 0.184399, -0.098292, 0.862980 +1033, 0.459156, 0.183990, -0.097826, 0.863570 +1034, 0.458309, 0.183579, -0.097361, 0.864160 +1035, 0.457461, 0.183167, -0.096897, 0.864749 +1036, 0.456612, 0.182752, -0.096433, 0.865337 +1037, 0.455763, 0.182337, -0.095970, 0.865923 +1038, 0.454913, 0.181919, -0.095507, 0.866509 +1039, 0.454062, 0.181500, -0.095044, 0.867094 +1040, 0.453210, 0.181079, -0.094582, 0.867678 +1041, 0.452357, 0.180657, -0.094121, 0.868261 +1042, 0.451504, 0.180233, -0.093660, 0.868843 +1043, 0.450650, 0.179807, -0.093200, 0.869424 +1044, 0.449795, 0.179380, -0.092740, 0.870004 +1045, 0.448939, 0.178951, -0.092281, 0.870583 +1046, 0.448083, 0.178520, -0.091822, 0.871161 +1047, 0.447225, 0.178088, -0.091364, 0.871738 +1048, 0.446367, 0.177655, -0.090907, 0.872314 +1049, 0.445508, 0.177219, -0.090450, 0.872889 +1050, 0.444648, 0.176782, -0.089994, 0.873463 +1051, 0.443788, 0.176344, -0.089538, 0.874036 +1052, 0.442926, 0.175904, -0.089083, 0.874608 +1053, 0.442064, 0.175463, -0.088629, 0.875178 +1054, 0.441201, 0.175020, -0.088175, 0.875748 +1055, 0.440337, 0.174576, -0.087722, 0.876317 +1056, 0.439473, 0.174130, -0.087269, 0.876885 +1057, 0.438607, 0.173682, -0.086818, 0.877451 +1058, 0.437741, 0.173233, -0.086367, 0.878017 +1059, 0.436874, 0.172783, -0.085916, 0.878582 +1060, 0.436006, 0.172331, -0.085466, 0.879145 +1061, 0.435137, 0.171878, -0.085017, 0.879708 +1062, 0.434268, 0.171423, -0.084569, 0.880269 +1063, 0.433398, 0.170967, -0.084122, 0.880829 +1064, 0.432527, 0.170509, -0.083675, 0.881389 +1065, 0.431655, 0.170051, -0.083228, 0.881947 +1066, 0.430782, 0.169590, -0.082783, 0.882504 +1067, 0.429908, 0.169128, -0.082338, 0.883060 +1068, 0.429034, 0.168665, -0.081895, 0.883615 +1069, 0.428159, 0.168201, -0.081451, 0.884169 +1070, 0.427283, 0.167735, -0.081009, 0.884721 +1071, 0.426407, 0.167268, -0.080567, 0.885273 +1072, 0.425529, 0.166799, -0.080127, 0.885823 +1073, 0.424651, 0.166329, -0.079686, 0.886373 +1074, 0.423772, 0.165858, -0.079247, 0.886921 +1075, 0.422892, 0.165386, -0.078809, 0.887468 +1076, 0.422011, 0.164912, -0.078371, 0.888014 +1077, 0.421129, 0.164437, -0.077934, 0.888559 +1078, 0.420247, 0.163961, -0.077498, 0.889103 +1079, 0.419364, 0.163483, -0.077063, 0.889645 +1080, 0.418480, 0.163004, -0.076629, 0.890187 +1081, 0.417595, 0.162524, -0.076195, 0.890727 +1082, 0.416710, 0.162043, -0.075763, 0.891266 +1083, 0.415823, 0.161561, -0.075331, 0.891804 +1084, 0.414936, 0.161077, -0.074900, 0.892341 +1085, 0.414048, 0.160592, -0.074470, 0.892876 +1086, 0.413160, 0.160106, -0.074041, 0.893411 +1087, 0.412270, 0.159619, -0.073613, 0.893944 +1088, 0.411380, 0.159130, -0.073186, 0.894476 +1089, 0.410489, 0.158641, -0.072759, 0.895007 +1090, 0.409597, 0.158150, -0.072334, 0.895537 +1091, 0.408704, 0.157658, -0.071909, 0.896066 +1092, 0.407811, 0.157165, -0.071486, 0.896593 +1093, 0.406916, 0.156671, -0.071063, 0.897120 +1094, 0.406021, 0.156176, -0.070641, 0.897645 +1095, 0.405125, 0.155680, -0.070220, 0.898168 +1096, 0.404229, 0.155182, -0.069801, 0.898691 +1097, 0.403331, 0.154684, -0.069382, 0.899212 +1098, 0.402433, 0.154185, -0.068964, 0.899733 +1099, 0.401534, 0.153684, -0.068547, 0.900252 +1100, 0.400634, 0.153183, -0.068131, 0.900770 +1101, 0.399733, 0.152680, -0.067716, 0.901286 +1102, 0.398832, 0.152177, -0.067302, 0.901801 +1103, 0.397930, 0.151672, -0.066889, 0.902316 +1104, 0.397027, 0.151167, -0.066477, 0.902828 +1105, 0.396123, 0.150660, -0.066066, 0.903340 +1106, 0.395218, 0.150153, -0.065656, 0.903851 +1107, 0.394313, 0.149645, -0.065247, 0.904360 +1108, 0.393407, 0.149135, -0.064839, 0.904868 +1109, 0.392500, 0.148625, -0.064432, 0.905374 +1110, 0.391592, 0.148114, -0.064027, 0.905880 +1111, 0.390684, 0.147602, -0.063622, 0.906384 +1112, 0.389775, 0.147089, -0.063218, 0.906887 +1113, 0.388865, 0.146576, -0.062816, 0.907389 +1114, 0.387954, 0.146061, -0.062414, 0.907889 +1115, 0.387042, 0.145546, -0.062014, 0.908388 +1116, 0.386130, 0.145029, -0.061614, 0.908886 +1117, 0.385217, 0.144512, -0.061216, 0.909383 +1118, 0.384303, 0.143994, -0.060819, 0.909878 +1119, 0.383389, 0.143476, -0.060422, 0.910372 +1120, 0.382473, 0.142956, -0.060027, 0.910865 +1121, 0.381557, 0.142436, -0.059634, 0.911356 +1122, 0.380640, 0.141915, -0.059241, 0.911846 +1123, 0.379722, 0.141393, -0.058849, 0.912335 +1124, 0.378804, 0.140871, -0.058459, 0.912823 +1125, 0.377885, 0.140347, -0.058069, 0.913309 +1126, 0.376965, 0.139823, -0.057681, 0.913794 +1127, 0.376044, 0.139299, -0.057294, 0.914278 +1128, 0.375123, 0.138773, -0.056908, 0.914760 +1129, 0.374200, 0.138247, -0.056523, 0.915241 +1130, 0.373277, 0.137721, -0.056139, 0.915721 +1131, 0.372354, 0.137193, -0.055757, 0.916200 +1132, 0.371429, 0.136665, -0.055376, 0.916677 +1133, 0.370504, 0.136137, -0.054995, 0.917153 +1134, 0.369578, 0.135608, -0.054616, 0.917627 +1135, 0.368651, 0.135078, -0.054239, 0.918100 +1136, 0.367724, 0.134547, -0.053862, 0.918572 +1137, 0.366796, 0.134016, -0.053487, 0.919043 +1138, 0.365867, 0.133485, -0.053113, 0.919512 +1139, 0.364937, 0.132953, -0.052740, 0.919980 +1140, 0.364007, 0.132420, -0.052368, 0.920446 +1141, 0.363076, 0.131887, -0.051997, 0.920912 +1142, 0.362144, 0.131353, -0.051628, 0.921376 +1143, 0.361211, 0.130819, -0.051260, 0.921838 +1144, 0.360278, 0.130284, -0.050893, 0.922299 +1145, 0.359344, 0.129749, -0.050527, 0.922759 +1146, 0.358409, 0.129213, -0.050163, 0.923218 +1147, 0.357473, 0.128677, -0.049800, 0.923675 +1148, 0.356537, 0.128141, -0.049438, 0.924130 +1149, 0.355600, 0.127604, -0.049077, 0.924585 +1150, 0.354663, 0.127066, -0.048718, 0.925038 +1151, 0.353724, 0.126529, -0.048360, 0.925490 +1152, 0.352785, 0.125991, -0.048003, 0.925940 +1153, 0.351845, 0.125452, -0.047647, 0.926389 +1154, 0.350905, 0.124913, -0.047293, 0.926836 +1155, 0.349964, 0.124374, -0.046940, 0.927283 +1156, 0.349022, 0.123834, -0.046588, 0.927728 +1157, 0.348079, 0.123294, -0.046237, 0.928171 +1158, 0.347136, 0.122754, -0.045888, 0.928613 +1159, 0.346192, 0.122214, -0.045540, 0.929054 +1160, 0.345247, 0.121673, -0.045194, 0.929493 +1161, 0.344302, 0.121132, -0.044848, 0.929931 +1162, 0.343355, 0.120591, -0.044504, 0.930368 +1163, 0.342409, 0.120049, -0.044162, 0.930803 +1164, 0.341461, 0.119507, -0.043820, 0.931237 +1165, 0.340513, 0.118965, -0.043480, 0.931669 +1166, 0.339564, 0.118423, -0.043141, 0.932100 +1167, 0.338614, 0.117880, -0.042804, 0.932530 +1168, 0.337664, 0.117338, -0.042468, 0.932958 +1169, 0.336713, 0.116795, -0.042133, 0.933385 +1170, 0.335762, 0.116252, -0.041800, 0.933811 +1171, 0.334809, 0.115709, -0.041468, 0.934235 +1172, 0.333856, 0.115166, -0.041137, 0.934657 +1173, 0.332903, 0.114623, -0.040807, 0.935079 +1174, 0.331948, 0.114079, -0.040479, 0.935499 +1175, 0.330994, 0.113536, -0.040153, 0.935917 +1176, 0.330038, 0.112992, -0.039827, 0.936334 +1177, 0.329082, 0.112448, -0.039503, 0.936750 +1178, 0.328125, 0.111905, -0.039181, 0.937164 +1179, 0.327167, 0.111361, -0.038859, 0.937577 +1180, 0.326209, 0.110817, -0.038539, 0.937988 +1181, 0.325250, 0.110273, -0.038221, 0.938398 +1182, 0.324290, 0.109730, -0.037904, 0.938807 +1183, 0.323330, 0.109186, -0.037588, 0.939214 +1184, 0.322369, 0.108642, -0.037273, 0.939620 +1185, 0.321408, 0.108099, -0.036960, 0.940024 +1186, 0.320446, 0.107555, -0.036649, 0.940427 +1187, 0.319483, 0.107011, -0.036338, 0.940829 +1188, 0.318519, 0.106468, -0.036030, 0.941229 +1189, 0.317555, 0.105924, -0.035722, 0.941628 +1190, 0.316591, 0.105381, -0.035416, 0.942025 +1191, 0.315625, 0.104838, -0.035111, 0.942421 +1192, 0.314659, 0.104295, -0.034808, 0.942815 +1193, 0.313693, 0.103752, -0.034506, 0.943208 +1194, 0.312726, 0.103209, -0.034205, 0.943600 +1195, 0.311758, 0.102667, -0.033906, 0.943990 +1196, 0.310789, 0.102124, -0.033609, 0.944379 +1197, 0.309820, 0.101582, -0.033312, 0.944766 +1198, 0.308851, 0.101040, -0.033017, 0.945152 +1199, 0.307881, 0.100498, -0.032724, 0.945536 +1200, 0.306910, 0.099957, -0.032432, 0.945919 +1201, 0.305938, 0.099416, -0.032141, 0.946301 +1202, 0.304966, 0.098875, -0.031852, 0.946681 +1203, 0.303993, 0.098334, -0.031564, 0.947060 +1204, 0.303020, 0.097793, -0.031277, 0.947437 +1205, 0.302046, 0.097253, -0.030992, 0.947813 +1206, 0.301072, 0.096714, -0.030709, 0.948187 +1207, 0.300097, 0.096174, -0.030427, 0.948560 +1208, 0.299121, 0.095635, -0.030146, 0.948932 +1209, 0.298145, 0.095096, -0.029867, 0.949302 +1210, 0.297168, 0.094558, -0.029589, 0.949671 +1211, 0.296191, 0.094020, -0.029312, 0.950038 +1212, 0.295213, 0.093482, -0.029037, 0.950404 +1213, 0.294234, 0.092945, -0.028764, 0.950768 +1214, 0.293255, 0.092408, -0.028491, 0.951131 +1215, 0.292276, 0.091872, -0.028221, 0.951493 +1216, 0.291295, 0.091336, -0.027951, 0.951853 +1217, 0.290314, 0.090800, -0.027684, 0.952211 +1218, 0.289333, 0.090265, -0.027417, 0.952569 +1219, 0.288351, 0.089731, -0.027152, 0.952924 +1220, 0.287369, 0.089197, -0.026889, 0.953279 +1221, 0.286386, 0.088663, -0.026626, 0.953632 +1222, 0.285402, 0.088130, -0.026366, 0.953983 +1223, 0.284418, 0.087598, -0.026107, 0.954333 +1224, 0.283433, 0.087066, -0.025849, 0.954682 +1225, 0.282448, 0.086534, -0.025592, 0.955029 +1226, 0.281462, 0.086004, -0.025337, 0.955374 +1227, 0.280476, 0.085473, -0.025084, 0.955719 +1228, 0.279489, 0.084944, -0.024832, 0.956062 +1229, 0.278502, 0.084415, -0.024581, 0.956403 +1230, 0.277514, 0.083886, -0.024332, 0.956743 +1231, 0.276526, 0.083359, -0.024085, 0.957081 +1232, 0.275537, 0.082832, -0.023838, 0.957419 +1233, 0.274547, 0.082305, -0.023593, 0.957754 +1234, 0.273557, 0.081780, -0.023350, 0.958088 +1235, 0.272567, 0.081255, -0.023108, 0.958421 +1236, 0.271576, 0.080730, -0.022868, 0.958753 +1237, 0.270584, 0.080207, -0.022629, 0.959082 +1238, 0.269592, 0.079684, -0.022391, 0.959411 +1239, 0.268600, 0.079162, -0.022155, 0.959738 +1240, 0.267607, 0.078640, -0.021920, 0.960064 +1241, 0.266613, 0.078120, -0.021687, 0.960388 +1242, 0.265619, 0.077600, -0.021455, 0.960710 +1243, 0.264624, 0.077081, -0.021225, 0.961032 +1244, 0.263629, 0.076563, -0.020996, 0.961352 +1245, 0.262634, 0.076045, -0.020768, 0.961670 +1246, 0.261638, 0.075529, -0.020542, 0.961987 +1247, 0.260641, 0.075013, -0.020317, 0.962303 +1248, 0.259644, 0.074498, -0.020094, 0.962617 +1249, 0.258647, 0.073984, -0.019872, 0.962929 +1250, 0.257649, 0.073471, -0.019652, 0.963241 +1251, 0.256651, 0.072959, -0.019433, 0.963551 +1252, 0.255652, 0.072447, -0.019216, 0.963859 +1253, 0.254652, 0.071937, -0.019000, 0.964166 +1254, 0.253653, 0.071428, -0.018785, 0.964472 +1255, 0.252652, 0.070919, -0.018572, 0.964776 +1256, 0.251652, 0.070411, -0.018360, 0.965079 +1257, 0.250650, 0.069905, -0.018150, 0.965380 +1258, 0.249649, 0.069399, -0.017941, 0.965680 +1259, 0.248647, 0.068895, -0.017734, 0.965978 +1260, 0.247644, 0.068391, -0.017528, 0.966275 +1261, 0.246641, 0.067888, -0.017323, 0.966571 +1262, 0.245638, 0.067387, -0.017120, 0.966865 +1263, 0.244634, 0.066886, -0.016918, 0.967158 +1264, 0.243630, 0.066387, -0.016718, 0.967449 +1265, 0.242625, 0.065888, -0.016519, 0.967739 +1266, 0.241620, 0.065391, -0.016322, 0.968028 +1267, 0.240614, 0.064895, -0.016125, 0.968315 +1268, 0.239608, 0.064399, -0.015931, 0.968600 +1269, 0.238602, 0.063905, -0.015738, 0.968885 +1270, 0.237595, 0.063413, -0.015546, 0.969168 +1271, 0.236587, 0.062921, -0.015355, 0.969449 +1272, 0.235580, 0.062430, -0.015166, 0.969729 +1273, 0.234572, 0.061941, -0.014979, 0.970008 +1274, 0.233563, 0.061452, -0.014793, 0.970285 +1275, 0.232554, 0.060965, -0.014608, 0.970561 +1276, 0.231545, 0.060479, -0.014424, 0.970835 +1277, 0.230535, 0.059995, -0.014242, 0.971108 +1278, 0.229525, 0.059511, -0.014062, 0.971380 +1279, 0.228514, 0.059029, -0.013883, 0.971650 +1280, 0.227503, 0.058548, -0.013705, 0.971919 +1281, 0.226492, 0.058068, -0.013528, 0.972186 +1282, 0.225480, 0.057590, -0.013353, 0.972452 +1283, 0.224468, 0.057113, -0.013180, 0.972717 +1284, 0.223456, 0.056637, -0.013007, 0.972980 +1285, 0.222443, 0.056162, -0.012836, 0.973242 +1286, 0.221429, 0.055689, -0.012667, 0.973503 +1287, 0.220416, 0.055217, -0.012499, 0.973762 +1288, 0.219402, 0.054746, -0.012332, 0.974019 +1289, 0.218387, 0.054277, -0.012166, 0.974276 +1290, 0.217373, 0.053809, -0.012002, 0.974531 +1291, 0.216357, 0.053343, -0.011840, 0.974784 +1292, 0.215342, 0.052877, -0.011678, 0.975036 +1293, 0.214326, 0.052414, -0.011518, 0.975287 +1294, 0.213310, 0.051951, -0.011360, 0.975536 +1295, 0.212293, 0.051490, -0.011202, 0.975784 +1296, 0.211276, 0.051031, -0.011046, 0.976031 +1297, 0.210259, 0.050573, -0.010892, 0.976276 +1298, 0.209241, 0.050116, -0.010739, 0.976520 +1299, 0.208223, 0.049661, -0.010587, 0.976762 +1300, 0.207205, 0.049208, -0.010436, 0.977003 +1301, 0.206186, 0.048755, -0.010287, 0.977243 +1302, 0.205167, 0.048305, -0.010139, 0.977482 +1303, 0.204148, 0.047856, -0.009992, 0.977719 +1304, 0.203128, 0.047408, -0.009847, 0.977954 +1305, 0.202108, 0.046962, -0.009703, 0.978188 +1306, 0.201088, 0.046517, -0.009560, 0.978421 +1307, 0.200067, 0.046074, -0.009419, 0.978653 +1308, 0.199046, 0.045633, -0.009279, 0.978883 +1309, 0.198025, 0.045193, -0.009140, 0.979112 +1310, 0.197003, 0.044754, -0.009003, 0.979339 +1311, 0.195981, 0.044318, -0.008867, 0.979566 +1312, 0.194959, 0.043883, -0.008732, 0.979790 +1313, 0.193937, 0.043449, -0.008598, 0.980014 +1314, 0.192914, 0.043017, -0.008466, 0.980236 +1315, 0.191890, 0.042587, -0.008335, 0.980456 +1316, 0.190867, 0.042158, -0.008205, 0.980676 +1317, 0.189843, 0.041731, -0.008077, 0.980894 +1318, 0.188819, 0.041306, -0.007950, 0.981111 +1319, 0.187795, 0.040883, -0.007824, 0.981326 +1320, 0.186770, 0.040461, -0.007699, 0.981540 +1321, 0.185745, 0.040041, -0.007576, 0.981753 +1322, 0.184720, 0.039622, -0.007453, 0.981964 +1323, 0.183694, 0.039205, -0.007332, 0.982174 +1324, 0.182668, 0.038790, -0.007213, 0.982383 +1325, 0.181642, 0.038377, -0.007094, 0.982590 +1326, 0.180616, 0.037965, -0.006977, 0.982796 +1327, 0.179589, 0.037556, -0.006861, 0.983001 +1328, 0.178562, 0.037148, -0.006746, 0.983204 +1329, 0.177535, 0.036741, -0.006633, 0.983406 +1330, 0.176507, 0.036337, -0.006521, 0.983607 +1331, 0.175479, 0.035934, -0.006410, 0.983806 +1332, 0.174451, 0.035533, -0.006300, 0.984004 +1333, 0.173423, 0.035134, -0.006191, 0.984201 +1334, 0.172395, 0.034737, -0.006083, 0.984396 +1335, 0.171366, 0.034342, -0.005977, 0.984591 +1336, 0.170337, 0.033948, -0.005872, 0.984783 +1337, 0.169307, 0.033557, -0.005768, 0.984975 +1338, 0.168278, 0.033167, -0.005665, 0.985165 +1339, 0.167248, 0.032779, -0.005564, 0.985354 +1340, 0.166218, 0.032393, -0.005463, 0.985542 +1341, 0.165187, 0.032009, -0.005364, 0.985728 +1342, 0.164157, 0.031626, -0.005266, 0.985913 +1343, 0.163126, 0.031246, -0.005169, 0.986097 +1344, 0.162095, 0.030868, -0.005073, 0.986279 +1345, 0.161063, 0.030491, -0.004978, 0.986460 +1346, 0.160032, 0.030117, -0.004885, 0.986640 +1347, 0.159000, 0.029744, -0.004793, 0.986819 +1348, 0.157968, 0.029374, -0.004701, 0.986996 +1349, 0.156936, 0.029005, -0.004611, 0.987172 +1350, 0.155903, 0.028638, -0.004522, 0.987347 +1351, 0.154871, 0.028274, -0.004434, 0.987520 +1352, 0.153838, 0.027911, -0.004347, 0.987692 +1353, 0.152804, 0.027550, -0.004262, 0.987863 +1354, 0.151771, 0.027192, -0.004177, 0.988033 +1355, 0.150738, 0.026835, -0.004093, 0.988201 +1356, 0.149704, 0.026480, -0.004011, 0.988368 +1357, 0.148670, 0.026128, -0.003929, 0.988534 +1358, 0.147635, 0.025777, -0.003849, 0.988698 +1359, 0.146601, 0.025429, -0.003770, 0.988862 +1360, 0.145566, 0.025082, -0.003692, 0.989024 +1361, 0.144532, 0.024738, -0.003615, 0.989184 +1362, 0.143497, 0.024396, -0.003538, 0.989344 +1363, 0.142461, 0.024056, -0.003463, 0.989502 +1364, 0.141426, 0.023718, -0.003389, 0.989659 +1365, 0.140390, 0.023382, -0.003316, 0.989815 +1366, 0.139354, 0.023048, -0.003244, 0.989969 +1367, 0.138318, 0.022716, -0.003173, 0.990122 +1368, 0.137282, 0.022387, -0.003103, 0.990274 +1369, 0.136246, 0.022059, -0.003035, 0.990425 +1370, 0.135209, 0.021734, -0.002967, 0.990574 +1371, 0.134172, 0.021411, -0.002900, 0.990722 +1372, 0.133135, 0.021090, -0.002834, 0.990869 +1373, 0.132098, 0.020771, -0.002769, 0.991015 +1374, 0.131061, 0.020454, -0.002705, 0.991160 +1375, 0.130023, 0.020140, -0.002642, 0.991303 +1376, 0.128986, 0.019828, -0.002580, 0.991445 +1377, 0.127948, 0.019518, -0.002518, 0.991586 +1378, 0.126910, 0.019210, -0.002458, 0.991725 +1379, 0.125872, 0.018904, -0.002399, 0.991864 +1380, 0.124833, 0.018601, -0.002341, 0.992001 +1381, 0.123795, 0.018299, -0.002283, 0.992136 +1382, 0.122756, 0.018001, -0.002227, 0.992271 +1383, 0.121717, 0.017704, -0.002171, 0.992405 +1384, 0.120678, 0.017409, -0.002117, 0.992537 +1385, 0.119639, 0.017117, -0.002063, 0.992668 +1386, 0.118600, 0.016827, -0.002010, 0.992798 +1387, 0.117560, 0.016540, -0.001958, 0.992926 +1388, 0.116520, 0.016254, -0.001907, 0.993053 +1389, 0.115481, 0.015971, -0.001857, 0.993180 +1390, 0.114441, 0.015690, -0.001808, 0.993305 +1391, 0.113401, 0.015412, -0.001759, 0.993428 +1392, 0.112360, 0.015136, -0.001712, 0.993551 +1393, 0.111320, 0.014862, -0.001665, 0.993672 +1394, 0.110279, 0.014590, -0.001619, 0.993792 +1395, 0.109239, 0.014321, -0.001574, 0.993911 +1396, 0.108198, 0.014054, -0.001530, 0.994029 +1397, 0.107157, 0.013790, -0.001486, 0.994145 +1398, 0.106116, 0.013528, -0.001444, 0.994261 +1399, 0.105075, 0.013268, -0.001402, 0.994375 +1400, 0.104033, 0.013010, -0.001361, 0.994488 +1401, 0.102992, 0.012755, -0.001321, 0.994600 +1402, 0.101950, 0.012503, -0.001281, 0.994710 +1403, 0.100909, 0.012252, -0.001243, 0.994819 +1404, 0.099867, 0.012004, -0.001205, 0.994928 +1405, 0.098825, 0.011759, -0.001168, 0.995035 +1406, 0.097783, 0.011516, -0.001132, 0.995141 +1407, 0.096740, 0.011275, -0.001096, 0.995245 +1408, 0.095698, 0.011036, -0.001061, 0.995349 +1409, 0.094655, 0.010801, -0.001027, 0.995451 +1410, 0.093613, 0.010567, -0.000994, 0.995552 +1411, 0.092570, 0.010336, -0.000961, 0.995652 +1412, 0.091527, 0.010107, -0.000929, 0.995751 +1413, 0.090484, 0.009881, -0.000898, 0.995848 +1414, 0.089441, 0.009657, -0.000867, 0.995945 +1415, 0.088398, 0.009436, -0.000837, 0.996040 +1416, 0.087355, 0.009217, -0.000808, 0.996134 +1417, 0.086312, 0.009001, -0.000780, 0.996227 +1418, 0.085268, 0.008787, -0.000752, 0.996319 +1419, 0.084224, 0.008575, -0.000725, 0.996410 +1420, 0.083181, 0.008366, -0.000698, 0.996499 +1421, 0.082137, 0.008160, -0.000672, 0.996587 +1422, 0.081093, 0.007956, -0.000647, 0.996675 +1423, 0.080049, 0.007754, -0.000623, 0.996761 +1424, 0.079005, 0.007555, -0.000599, 0.996845 +1425, 0.077961, 0.007358, -0.000575, 0.996929 +1426, 0.076917, 0.007164, -0.000553, 0.997012 +1427, 0.075872, 0.006973, -0.000531, 0.997093 +1428, 0.074828, 0.006784, -0.000509, 0.997173 +1429, 0.073783, 0.006597, -0.000488, 0.997252 +1430, 0.072739, 0.006413, -0.000468, 0.997330 +1431, 0.071694, 0.006232, -0.000448, 0.997407 +1432, 0.070649, 0.006053, -0.000429, 0.997483 +1433, 0.069604, 0.005876, -0.000410, 0.997557 +1434, 0.068559, 0.005702, -0.000392, 0.997631 +1435, 0.067514, 0.005531, -0.000374, 0.997703 +1436, 0.066469, 0.005362, -0.000357, 0.997774 +1437, 0.065424, 0.005196, -0.000341, 0.997844 +1438, 0.064379, 0.005032, -0.000325, 0.997913 +1439, 0.063333, 0.004871, -0.000309, 0.997980 +1440, 0.062288, 0.004713, -0.000294, 0.998047 +1441, 0.061242, 0.004557, -0.000280, 0.998112 +1442, 0.060197, 0.004403, -0.000266, 0.998177 +1443, 0.059151, 0.004252, -0.000252, 0.998240 +1444, 0.058106, 0.004104, -0.000239, 0.998302 +1445, 0.057060, 0.003958, -0.000226, 0.998363 +1446, 0.056014, 0.003815, -0.000214, 0.998423 +1447, 0.054968, 0.003675, -0.000202, 0.998481 +1448, 0.053922, 0.003537, -0.000191, 0.998539 +1449, 0.052876, 0.003402, -0.000180, 0.998595 +1450, 0.051830, 0.003269, -0.000170, 0.998651 +1451, 0.050784, 0.003139, -0.000160, 0.998705 +1452, 0.049738, 0.003011, -0.000150, 0.998758 +1453, 0.048691, 0.002886, -0.000141, 0.998810 +1454, 0.047645, 0.002764, -0.000132, 0.998860 +1455, 0.046599, 0.002644, -0.000123, 0.998910 +1456, 0.045552, 0.002527, -0.000115, 0.998959 +1457, 0.044506, 0.002413, -0.000107, 0.999006 +1458, 0.043459, 0.002301, -0.000100, 0.999053 +1459, 0.042413, 0.002192, -0.000093, 0.999098 +1460, 0.041366, 0.002085, -0.000086, 0.999142 +1461, 0.040320, 0.001981, -0.000080, 0.999185 +1462, 0.039273, 0.001880, -0.000074, 0.999227 +1463, 0.038226, 0.001781, -0.000068, 0.999268 +1464, 0.037179, 0.001685, -0.000063, 0.999307 +1465, 0.036132, 0.001592, -0.000058, 0.999346 +1466, 0.035086, 0.001501, -0.000053, 0.999383 +1467, 0.034039, 0.001413, -0.000048, 0.999420 +1468, 0.032992, 0.001328, -0.000044, 0.999455 +1469, 0.031945, 0.001245, -0.000040, 0.999489 +1470, 0.030898, 0.001165, -0.000036, 0.999522 +1471, 0.029851, 0.001087, -0.000032, 0.999554 +1472, 0.028804, 0.001012, -0.000029, 0.999585 +1473, 0.027756, 0.000940, -0.000026, 0.999614 +1474, 0.026709, 0.000871, -0.000023, 0.999643 +1475, 0.025662, 0.000804, -0.000021, 0.999670 +1476, 0.024615, 0.000740, -0.000018, 0.999697 +1477, 0.023568, 0.000678, -0.000016, 0.999722 +1478, 0.022520, 0.000619, -0.000014, 0.999746 +1479, 0.021473, 0.000563, -0.000012, 0.999769 +1480, 0.020426, 0.000509, -0.000010, 0.999791 +1481, 0.019378, 0.000459, -0.000009, 0.999812 +1482, 0.018331, 0.000410, -0.000008, 0.999832 +1483, 0.017284, 0.000365, -0.000006, 0.999851 +1484, 0.016236, 0.000322, -0.000005, 0.999868 +1485, 0.015189, 0.000282, -0.000004, 0.999885 +1486, 0.014141, 0.000244, -0.000003, 0.999900 +1487, 0.013094, 0.000209, -0.000003, 0.999914 +1488, 0.012046, 0.000177, -0.000002, 0.999927 +1489, 0.010999, 0.000148, -0.000002, 0.999939 +1490, 0.009952, 0.000121, -0.000001, 0.999950 +1491, 0.008904, 0.000097, -0.000001, 0.999960 +1492, 0.007857, 0.000075, -0.000001, 0.999969 +1493, 0.006809, 0.000057, -0.000000, 0.999977 +1494, 0.005761, 0.000041, -0.000000, 0.999983 +1495, 0.004714, 0.000027, -0.000000, 0.999989 +1496, 0.003666, 0.000016, -0.000000, 0.999993 +1497, 0.002619, 0.000008, -0.000000, 0.999997 +1498, 0.001571, 0.000003, -0.000000, 0.999999 +1499, 0.000524, 0.000000, -0.000000, 1.000000 +1500, -0.000524, 0.000000, 0.000000, 1.000000 +1501, -0.001571, 0.000003, 0.000000, 0.999999 +1502, -0.002619, 0.000008, 0.000000, 0.999997 +1503, -0.003666, 0.000016, 0.000000, 0.999993 +1504, -0.004714, 0.000027, 0.000000, 0.999989 +1505, -0.005761, 0.000041, 0.000000, 0.999983 +1506, -0.006809, 0.000057, 0.000000, 0.999977 +1507, -0.007857, 0.000075, 0.000001, 0.999969 +1508, -0.008904, 0.000097, 0.000001, 0.999960 +1509, -0.009952, 0.000121, 0.000001, 0.999950 +1510, -0.010999, 0.000148, 0.000002, 0.999939 +1511, -0.012046, 0.000177, 0.000002, 0.999927 +1512, -0.013094, 0.000209, 0.000003, 0.999914 +1513, -0.014141, 0.000244, 0.000003, 0.999900 +1514, -0.015189, 0.000282, 0.000004, 0.999885 +1515, -0.016236, 0.000322, 0.000005, 0.999868 +1516, -0.017284, 0.000365, 0.000006, 0.999851 +1517, -0.018331, 0.000410, 0.000008, 0.999832 +1518, -0.019378, 0.000459, 0.000009, 0.999812 +1519, -0.020426, 0.000509, 0.000010, 0.999791 +1520, -0.021473, 0.000563, 0.000012, 0.999769 +1521, -0.022520, 0.000619, 0.000014, 0.999746 +1522, -0.023568, 0.000678, 0.000016, 0.999722 +1523, -0.024615, 0.000740, 0.000018, 0.999697 +1524, -0.025662, 0.000804, 0.000021, 0.999670 +1525, -0.026709, 0.000871, 0.000023, 0.999643 +1526, -0.027756, 0.000940, 0.000026, 0.999614 +1527, -0.028804, 0.001012, 0.000029, 0.999585 +1528, -0.029851, 0.001087, 0.000032, 0.999554 +1529, -0.030898, 0.001165, 0.000036, 0.999522 +1530, -0.031945, 0.001245, 0.000040, 0.999489 +1531, -0.032992, 0.001328, 0.000044, 0.999455 +1532, -0.034039, 0.001413, 0.000048, 0.999420 +1533, -0.035086, 0.001501, 0.000053, 0.999383 +1534, -0.036132, 0.001592, 0.000058, 0.999346 +1535, -0.037179, 0.001685, 0.000063, 0.999307 +1536, -0.038226, 0.001781, 0.000068, 0.999268 +1537, -0.039273, 0.001880, 0.000074, 0.999227 +1538, -0.040320, 0.001981, 0.000080, 0.999185 +1539, -0.041366, 0.002085, 0.000086, 0.999142 +1540, -0.042413, 0.002192, 0.000093, 0.999098 +1541, -0.043459, 0.002301, 0.000100, 0.999053 +1542, -0.044506, 0.002413, 0.000107, 0.999006 +1543, -0.045552, 0.002527, 0.000115, 0.998959 +1544, -0.046599, 0.002644, 0.000123, 0.998910 +1545, -0.047645, 0.002764, 0.000132, 0.998860 +1546, -0.048691, 0.002886, 0.000141, 0.998810 +1547, -0.049738, 0.003011, 0.000150, 0.998758 +1548, -0.050784, 0.003139, 0.000160, 0.998705 +1549, -0.051830, 0.003269, 0.000170, 0.998651 +1550, -0.052876, 0.003402, 0.000180, 0.998595 +1551, -0.053922, 0.003537, 0.000191, 0.998539 +1552, -0.054968, 0.003675, 0.000202, 0.998481 +1553, -0.056014, 0.003815, 0.000214, 0.998423 +1554, -0.057060, 0.003958, 0.000226, 0.998363 +1555, -0.058106, 0.004104, 0.000239, 0.998302 +1556, -0.059151, 0.004252, 0.000252, 0.998240 +1557, -0.060197, 0.004403, 0.000266, 0.998177 +1558, -0.061242, 0.004557, 0.000280, 0.998112 +1559, -0.062288, 0.004713, 0.000294, 0.998047 +1560, -0.063333, 0.004871, 0.000309, 0.997980 +1561, -0.064379, 0.005032, 0.000325, 0.997913 +1562, -0.065424, 0.005196, 0.000341, 0.997844 +1563, -0.066469, 0.005362, 0.000357, 0.997774 +1564, -0.067514, 0.005531, 0.000374, 0.997703 +1565, -0.068559, 0.005702, 0.000392, 0.997631 +1566, -0.069604, 0.005876, 0.000410, 0.997557 +1567, -0.070649, 0.006053, 0.000429, 0.997483 +1568, -0.071694, 0.006232, 0.000448, 0.997407 +1569, -0.072739, 0.006413, 0.000468, 0.997330 +1570, -0.073783, 0.006597, 0.000488, 0.997252 +1571, -0.074828, 0.006784, 0.000509, 0.997173 +1572, -0.075872, 0.006973, 0.000531, 0.997093 +1573, -0.076917, 0.007164, 0.000553, 0.997012 +1574, -0.077961, 0.007358, 0.000575, 0.996929 +1575, -0.079005, 0.007555, 0.000599, 0.996845 +1576, -0.080049, 0.007754, 0.000623, 0.996761 +1577, -0.081093, 0.007956, 0.000647, 0.996675 +1578, -0.082137, 0.008160, 0.000672, 0.996587 +1579, -0.083181, 0.008366, 0.000698, 0.996499 +1580, -0.084224, 0.008575, 0.000725, 0.996410 +1581, -0.085268, 0.008787, 0.000752, 0.996319 +1582, -0.086312, 0.009001, 0.000780, 0.996227 +1583, -0.087355, 0.009217, 0.000808, 0.996134 +1584, -0.088398, 0.009436, 0.000837, 0.996040 +1585, -0.089441, 0.009657, 0.000867, 0.995945 +1586, -0.090484, 0.009881, 0.000898, 0.995848 +1587, -0.091527, 0.010107, 0.000929, 0.995751 +1588, -0.092570, 0.010336, 0.000961, 0.995652 +1589, -0.093613, 0.010567, 0.000994, 0.995552 +1590, -0.094655, 0.010801, 0.001027, 0.995451 +1591, -0.095698, 0.011036, 0.001061, 0.995349 +1592, -0.096740, 0.011275, 0.001096, 0.995245 +1593, -0.097783, 0.011516, 0.001132, 0.995141 +1594, -0.098825, 0.011759, 0.001168, 0.995035 +1595, -0.099867, 0.012004, 0.001205, 0.994928 +1596, -0.100909, 0.012252, 0.001243, 0.994819 +1597, -0.101950, 0.012503, 0.001281, 0.994710 +1598, -0.102992, 0.012755, 0.001321, 0.994600 +1599, -0.104033, 0.013010, 0.001361, 0.994488 +1600, -0.105075, 0.013268, 0.001402, 0.994375 +1601, -0.106116, 0.013528, 0.001444, 0.994261 +1602, -0.107157, 0.013790, 0.001486, 0.994145 +1603, -0.108198, 0.014054, 0.001530, 0.994029 +1604, -0.109239, 0.014321, 0.001574, 0.993911 +1605, -0.110279, 0.014590, 0.001619, 0.993792 +1606, -0.111320, 0.014862, 0.001665, 0.993672 +1607, -0.112360, 0.015136, 0.001712, 0.993551 +1608, -0.113401, 0.015412, 0.001759, 0.993428 +1609, -0.114441, 0.015690, 0.001808, 0.993305 +1610, -0.115481, 0.015971, 0.001857, 0.993180 +1611, -0.116520, 0.016254, 0.001907, 0.993053 +1612, -0.117560, 0.016540, 0.001958, 0.992926 +1613, -0.118600, 0.016827, 0.002010, 0.992798 +1614, -0.119639, 0.017117, 0.002063, 0.992668 +1615, -0.120678, 0.017409, 0.002117, 0.992537 +1616, -0.121717, 0.017704, 0.002171, 0.992405 +1617, -0.122756, 0.018001, 0.002227, 0.992271 +1618, -0.123795, 0.018299, 0.002283, 0.992136 +1619, -0.124833, 0.018601, 0.002341, 0.992001 +1620, -0.125872, 0.018904, 0.002399, 0.991864 +1621, -0.126910, 0.019210, 0.002458, 0.991725 +1622, -0.127948, 0.019518, 0.002518, 0.991586 +1623, -0.128986, 0.019828, 0.002580, 0.991445 +1624, -0.130023, 0.020140, 0.002642, 0.991303 +1625, -0.131061, 0.020454, 0.002705, 0.991160 +1626, -0.132098, 0.020771, 0.002769, 0.991015 +1627, -0.133135, 0.021090, 0.002834, 0.990869 +1628, -0.134172, 0.021411, 0.002900, 0.990722 +1629, -0.135209, 0.021734, 0.002967, 0.990574 +1630, -0.136246, 0.022059, 0.003035, 0.990425 +1631, -0.137282, 0.022387, 0.003103, 0.990274 +1632, -0.138318, 0.022716, 0.003173, 0.990122 +1633, -0.139354, 0.023048, 0.003244, 0.989969 +1634, -0.140390, 0.023382, 0.003316, 0.989815 +1635, -0.141426, 0.023718, 0.003389, 0.989659 +1636, -0.142461, 0.024056, 0.003463, 0.989502 +1637, -0.143497, 0.024396, 0.003538, 0.989344 +1638, -0.144532, 0.024738, 0.003615, 0.989184 +1639, -0.145566, 0.025082, 0.003692, 0.989024 +1640, -0.146601, 0.025429, 0.003770, 0.988862 +1641, -0.147635, 0.025777, 0.003849, 0.988698 +1642, -0.148670, 0.026128, 0.003929, 0.988534 +1643, -0.149704, 0.026480, 0.004011, 0.988368 +1644, -0.150738, 0.026835, 0.004093, 0.988201 +1645, -0.151771, 0.027192, 0.004177, 0.988033 +1646, -0.152804, 0.027550, 0.004262, 0.987863 +1647, -0.153838, 0.027911, 0.004347, 0.987692 +1648, -0.154871, 0.028274, 0.004434, 0.987520 +1649, -0.155903, 0.028638, 0.004522, 0.987347 +1650, -0.156936, 0.029005, 0.004611, 0.987172 +1651, -0.157968, 0.029374, 0.004701, 0.986996 +1652, -0.159000, 0.029744, 0.004793, 0.986819 +1653, -0.160032, 0.030117, 0.004885, 0.986640 +1654, -0.161063, 0.030491, 0.004978, 0.986460 +1655, -0.162095, 0.030868, 0.005073, 0.986279 +1656, -0.163126, 0.031246, 0.005169, 0.986097 +1657, -0.164157, 0.031626, 0.005266, 0.985913 +1658, -0.165187, 0.032009, 0.005364, 0.985728 +1659, -0.166218, 0.032393, 0.005463, 0.985542 +1660, -0.167248, 0.032779, 0.005564, 0.985354 +1661, -0.168278, 0.033167, 0.005665, 0.985165 +1662, -0.169307, 0.033557, 0.005768, 0.984975 +1663, -0.170337, 0.033948, 0.005872, 0.984783 +1664, -0.171366, 0.034342, 0.005977, 0.984591 +1665, -0.172395, 0.034737, 0.006083, 0.984396 +1666, -0.173423, 0.035134, 0.006191, 0.984201 +1667, -0.174451, 0.035533, 0.006300, 0.984004 +1668, -0.175479, 0.035934, 0.006410, 0.983806 +1669, -0.176507, 0.036337, 0.006521, 0.983607 +1670, -0.177535, 0.036741, 0.006633, 0.983406 +1671, -0.178562, 0.037148, 0.006746, 0.983204 +1672, -0.179589, 0.037556, 0.006861, 0.983001 +1673, -0.180616, 0.037965, 0.006977, 0.982796 +1674, -0.181642, 0.038377, 0.007094, 0.982590 +1675, -0.182668, 0.038790, 0.007213, 0.982383 +1676, -0.183694, 0.039205, 0.007332, 0.982174 +1677, -0.184720, 0.039622, 0.007453, 0.981964 +1678, -0.185745, 0.040041, 0.007576, 0.981753 +1679, -0.186770, 0.040461, 0.007699, 0.981540 +1680, -0.187795, 0.040883, 0.007824, 0.981326 +1681, -0.188819, 0.041306, 0.007950, 0.981111 +1682, -0.189843, 0.041731, 0.008077, 0.980894 +1683, -0.190867, 0.042158, 0.008205, 0.980676 +1684, -0.191890, 0.042587, 0.008335, 0.980456 +1685, -0.192914, 0.043017, 0.008466, 0.980236 +1686, -0.193937, 0.043449, 0.008598, 0.980014 +1687, -0.194959, 0.043883, 0.008732, 0.979790 +1688, -0.195981, 0.044318, 0.008867, 0.979566 +1689, -0.197003, 0.044754, 0.009003, 0.979339 +1690, -0.198025, 0.045193, 0.009140, 0.979112 +1691, -0.199046, 0.045633, 0.009279, 0.978883 +1692, -0.200067, 0.046074, 0.009419, 0.978653 +1693, -0.201088, 0.046517, 0.009560, 0.978421 +1694, -0.202108, 0.046962, 0.009703, 0.978188 +1695, -0.203128, 0.047408, 0.009847, 0.977954 +1696, -0.204148, 0.047856, 0.009992, 0.977719 +1697, -0.205167, 0.048305, 0.010139, 0.977482 +1698, -0.206186, 0.048755, 0.010287, 0.977243 +1699, -0.207205, 0.049208, 0.010436, 0.977003 +1700, -0.208223, 0.049661, 0.010587, 0.976762 +1701, -0.209241, 0.050116, 0.010739, 0.976520 +1702, -0.210259, 0.050573, 0.010892, 0.976276 +1703, -0.211276, 0.051031, 0.011046, 0.976031 +1704, -0.212293, 0.051490, 0.011202, 0.975784 +1705, -0.213310, 0.051951, 0.011360, 0.975536 +1706, -0.214326, 0.052414, 0.011518, 0.975287 +1707, -0.215342, 0.052877, 0.011678, 0.975036 +1708, -0.216357, 0.053343, 0.011840, 0.974784 +1709, -0.217373, 0.053809, 0.012002, 0.974531 +1710, -0.218387, 0.054277, 0.012166, 0.974276 +1711, -0.219402, 0.054746, 0.012332, 0.974019 +1712, -0.220416, 0.055217, 0.012499, 0.973762 +1713, -0.221429, 0.055689, 0.012667, 0.973503 +1714, -0.222443, 0.056162, 0.012836, 0.973242 +1715, -0.223456, 0.056637, 0.013007, 0.972980 +1716, -0.224468, 0.057113, 0.013180, 0.972717 +1717, -0.225480, 0.057590, 0.013353, 0.972452 +1718, -0.226492, 0.058068, 0.013528, 0.972186 +1719, -0.227503, 0.058548, 0.013705, 0.971919 +1720, -0.228514, 0.059029, 0.013883, 0.971650 +1721, -0.229525, 0.059511, 0.014062, 0.971380 +1722, -0.230535, 0.059995, 0.014242, 0.971108 +1723, -0.231545, 0.060479, 0.014424, 0.970835 +1724, -0.232554, 0.060965, 0.014608, 0.970561 +1725, -0.233563, 0.061452, 0.014793, 0.970285 +1726, -0.234572, 0.061941, 0.014979, 0.970008 +1727, -0.235580, 0.062430, 0.015166, 0.969729 +1728, -0.236587, 0.062921, 0.015355, 0.969449 +1729, -0.237595, 0.063413, 0.015546, 0.969168 +1730, -0.238602, 0.063905, 0.015738, 0.968885 +1731, -0.239608, 0.064399, 0.015931, 0.968600 +1732, -0.240614, 0.064895, 0.016125, 0.968315 +1733, -0.241620, 0.065391, 0.016322, 0.968028 +1734, -0.242625, 0.065888, 0.016519, 0.967739 +1735, -0.243630, 0.066387, 0.016718, 0.967449 +1736, -0.244634, 0.066886, 0.016918, 0.967158 +1737, -0.245638, 0.067387, 0.017120, 0.966865 +1738, -0.246641, 0.067888, 0.017323, 0.966571 +1739, -0.247644, 0.068391, 0.017528, 0.966275 +1740, -0.248647, 0.068895, 0.017734, 0.965978 +1741, -0.249649, 0.069399, 0.017941, 0.965680 +1742, -0.250650, 0.069905, 0.018150, 0.965380 +1743, -0.251652, 0.070411, 0.018360, 0.965079 +1744, -0.252652, 0.070919, 0.018572, 0.964776 +1745, -0.253653, 0.071428, 0.018785, 0.964472 +1746, -0.254652, 0.071937, 0.019000, 0.964166 +1747, -0.255652, 0.072447, 0.019216, 0.963859 +1748, -0.256651, 0.072959, 0.019433, 0.963551 +1749, -0.257649, 0.073471, 0.019652, 0.963241 +1750, -0.258647, 0.073984, 0.019872, 0.962929 +1751, -0.259644, 0.074498, 0.020094, 0.962617 +1752, -0.260641, 0.075013, 0.020317, 0.962303 +1753, -0.261638, 0.075529, 0.020542, 0.961987 +1754, -0.262634, 0.076045, 0.020768, 0.961670 +1755, -0.263629, 0.076563, 0.020996, 0.961352 +1756, -0.264624, 0.077081, 0.021225, 0.961032 +1757, -0.265619, 0.077600, 0.021455, 0.960710 +1758, -0.266613, 0.078120, 0.021687, 0.960388 +1759, -0.267607, 0.078640, 0.021920, 0.960064 +1760, -0.268600, 0.079162, 0.022155, 0.959738 +1761, -0.269592, 0.079684, 0.022391, 0.959411 +1762, -0.270584, 0.080207, 0.022629, 0.959082 +1763, -0.271576, 0.080730, 0.022868, 0.958753 +1764, -0.272567, 0.081255, 0.023108, 0.958421 +1765, -0.273557, 0.081780, 0.023350, 0.958088 +1766, -0.274547, 0.082305, 0.023593, 0.957754 +1767, -0.275537, 0.082832, 0.023838, 0.957419 +1768, -0.276526, 0.083359, 0.024085, 0.957081 +1769, -0.277514, 0.083886, 0.024332, 0.956743 +1770, -0.278502, 0.084415, 0.024581, 0.956403 +1771, -0.279489, 0.084944, 0.024832, 0.956062 +1772, -0.280476, 0.085473, 0.025084, 0.955719 +1773, -0.281462, 0.086004, 0.025337, 0.955374 +1774, -0.282448, 0.086534, 0.025592, 0.955029 +1775, -0.283433, 0.087066, 0.025849, 0.954682 +1776, -0.284418, 0.087598, 0.026107, 0.954333 +1777, -0.285402, 0.088130, 0.026366, 0.953983 +1778, -0.286386, 0.088663, 0.026626, 0.953632 +1779, -0.287369, 0.089197, 0.026889, 0.953279 +1780, -0.288351, 0.089731, 0.027152, 0.952924 +1781, -0.289333, 0.090265, 0.027417, 0.952569 +1782, -0.290314, 0.090800, 0.027684, 0.952211 +1783, -0.291295, 0.091336, 0.027951, 0.951853 +1784, -0.292276, 0.091872, 0.028221, 0.951493 +1785, -0.293255, 0.092408, 0.028491, 0.951131 +1786, -0.294234, 0.092945, 0.028764, 0.950768 +1787, -0.295213, 0.093482, 0.029037, 0.950404 +1788, -0.296191, 0.094020, 0.029312, 0.950038 +1789, -0.297168, 0.094558, 0.029589, 0.949671 +1790, -0.298145, 0.095096, 0.029867, 0.949302 +1791, -0.299121, 0.095635, 0.030146, 0.948932 +1792, -0.300097, 0.096174, 0.030427, 0.948560 +1793, -0.301072, 0.096714, 0.030709, 0.948187 +1794, -0.302046, 0.097253, 0.030992, 0.947813 +1795, -0.303020, 0.097793, 0.031277, 0.947437 +1796, -0.303993, 0.098334, 0.031564, 0.947060 +1797, -0.304966, 0.098875, 0.031852, 0.946681 +1798, -0.305938, 0.099416, 0.032141, 0.946301 +1799, -0.306910, 0.099957, 0.032432, 0.945919 +1800, -0.307881, 0.100498, 0.032724, 0.945536 +1801, -0.308851, 0.101040, 0.033017, 0.945152 +1802, -0.309820, 0.101582, 0.033312, 0.944766 +1803, -0.310789, 0.102124, 0.033609, 0.944379 +1804, -0.311758, 0.102667, 0.033906, 0.943990 +1805, -0.312726, 0.103209, 0.034205, 0.943600 +1806, -0.313693, 0.103752, 0.034506, 0.943208 +1807, -0.314659, 0.104295, 0.034808, 0.942815 +1808, -0.315625, 0.104838, 0.035111, 0.942421 +1809, -0.316591, 0.105381, 0.035416, 0.942025 +1810, -0.317555, 0.105924, 0.035722, 0.941628 +1811, -0.318519, 0.106468, 0.036030, 0.941229 +1812, -0.319483, 0.107011, 0.036338, 0.940829 +1813, -0.320446, 0.107555, 0.036649, 0.940427 +1814, -0.321408, 0.108099, 0.036960, 0.940024 +1815, -0.322369, 0.108642, 0.037273, 0.939620 +1816, -0.323330, 0.109186, 0.037588, 0.939214 +1817, -0.324290, 0.109730, 0.037904, 0.938807 +1818, -0.325250, 0.110273, 0.038221, 0.938398 +1819, -0.326209, 0.110817, 0.038539, 0.937988 +1820, -0.327167, 0.111361, 0.038859, 0.937577 +1821, -0.328125, 0.111905, 0.039181, 0.937164 +1822, -0.329082, 0.112448, 0.039503, 0.936750 +1823, -0.330038, 0.112992, 0.039827, 0.936334 +1824, -0.330994, 0.113536, 0.040153, 0.935917 +1825, -0.331948, 0.114079, 0.040479, 0.935499 +1826, -0.332903, 0.114623, 0.040807, 0.935079 +1827, -0.333856, 0.115166, 0.041137, 0.934657 +1828, -0.334809, 0.115709, 0.041468, 0.934235 +1829, -0.335762, 0.116252, 0.041800, 0.933811 +1830, -0.336713, 0.116795, 0.042133, 0.933385 +1831, -0.337664, 0.117338, 0.042468, 0.932958 +1832, -0.338614, 0.117880, 0.042804, 0.932530 +1833, -0.339564, 0.118423, 0.043141, 0.932100 +1834, -0.340513, 0.118965, 0.043480, 0.931669 +1835, -0.341461, 0.119507, 0.043820, 0.931237 +1836, -0.342409, 0.120049, 0.044162, 0.930803 +1837, -0.343355, 0.120591, 0.044504, 0.930368 +1838, -0.344302, 0.121132, 0.044848, 0.929931 +1839, -0.345247, 0.121673, 0.045194, 0.929493 +1840, -0.346192, 0.122214, 0.045540, 0.929054 +1841, -0.347136, 0.122754, 0.045888, 0.928613 +1842, -0.348079, 0.123294, 0.046237, 0.928171 +1843, -0.349022, 0.123834, 0.046588, 0.927728 +1844, -0.349964, 0.124374, 0.046940, 0.927283 +1845, -0.350905, 0.124913, 0.047293, 0.926836 +1846, -0.351845, 0.125452, 0.047647, 0.926389 +1847, -0.352785, 0.125991, 0.048003, 0.925940 +1848, -0.353724, 0.126529, 0.048360, 0.925490 +1849, -0.354663, 0.127066, 0.048718, 0.925038 +1850, -0.355600, 0.127604, 0.049077, 0.924585 +1851, -0.356537, 0.128141, 0.049438, 0.924130 +1852, -0.357473, 0.128677, 0.049800, 0.923675 +1853, -0.358409, 0.129213, 0.050163, 0.923218 +1854, -0.359344, 0.129749, 0.050527, 0.922759 +1855, -0.360278, 0.130284, 0.050893, 0.922299 +1856, -0.361211, 0.130819, 0.051260, 0.921838 +1857, -0.362144, 0.131353, 0.051628, 0.921376 +1858, -0.363076, 0.131887, 0.051997, 0.920912 +1859, -0.364007, 0.132420, 0.052368, 0.920446 +1860, -0.364937, 0.132953, 0.052740, 0.919980 +1861, -0.365867, 0.133485, 0.053113, 0.919512 +1862, -0.366796, 0.134016, 0.053487, 0.919043 +1863, -0.367724, 0.134547, 0.053862, 0.918572 +1864, -0.368651, 0.135078, 0.054239, 0.918100 +1865, -0.369578, 0.135608, 0.054616, 0.917627 +1866, -0.370504, 0.136137, 0.054995, 0.917153 +1867, -0.371429, 0.136665, 0.055376, 0.916677 +1868, -0.372354, 0.137193, 0.055757, 0.916200 +1869, -0.373277, 0.137721, 0.056139, 0.915721 +1870, -0.374200, 0.138247, 0.056523, 0.915241 +1871, -0.375123, 0.138773, 0.056908, 0.914760 +1872, -0.376044, 0.139299, 0.057294, 0.914278 +1873, -0.376965, 0.139823, 0.057681, 0.913794 +1874, -0.377885, 0.140347, 0.058069, 0.913309 +1875, -0.378804, 0.140871, 0.058459, 0.912823 +1876, -0.379722, 0.141393, 0.058849, 0.912335 +1877, -0.380640, 0.141915, 0.059241, 0.911846 +1878, -0.381557, 0.142436, 0.059634, 0.911356 +1879, -0.382473, 0.142956, 0.060027, 0.910865 +1880, -0.383389, 0.143476, 0.060422, 0.910372 +1881, -0.384303, 0.143994, 0.060819, 0.909878 +1882, -0.385217, 0.144512, 0.061216, 0.909383 +1883, -0.386130, 0.145029, 0.061614, 0.908886 +1884, -0.387042, 0.145546, 0.062014, 0.908388 +1885, -0.387954, 0.146061, 0.062414, 0.907889 +1886, -0.388865, 0.146576, 0.062816, 0.907389 +1887, -0.389775, 0.147089, 0.063218, 0.906887 +1888, -0.390684, 0.147602, 0.063622, 0.906384 +1889, -0.391592, 0.148114, 0.064027, 0.905880 +1890, -0.392500, 0.148625, 0.064432, 0.905374 +1891, -0.393407, 0.149135, 0.064839, 0.904868 +1892, -0.394313, 0.149645, 0.065247, 0.904360 +1893, -0.395218, 0.150153, 0.065656, 0.903851 +1894, -0.396123, 0.150660, 0.066066, 0.903340 +1895, -0.397027, 0.151167, 0.066477, 0.902828 +1896, -0.397930, 0.151672, 0.066889, 0.902316 +1897, -0.398832, 0.152177, 0.067302, 0.901801 +1898, -0.399733, 0.152680, 0.067716, 0.901286 +1899, -0.400634, 0.153183, 0.068131, 0.900770 +1900, -0.401534, 0.153684, 0.068547, 0.900252 +1901, -0.402433, 0.154185, 0.068964, 0.899733 +1902, -0.403331, 0.154684, 0.069382, 0.899212 +1903, -0.404229, 0.155182, 0.069801, 0.898691 +1904, -0.405125, 0.155680, 0.070220, 0.898168 +1905, -0.406021, 0.156176, 0.070641, 0.897645 +1906, -0.406916, 0.156671, 0.071063, 0.897120 +1907, -0.407811, 0.157165, 0.071486, 0.896593 +1908, -0.408704, 0.157658, 0.071909, 0.896066 +1909, -0.409597, 0.158150, 0.072334, 0.895537 +1910, -0.410489, 0.158641, 0.072759, 0.895007 +1911, -0.411380, 0.159130, 0.073186, 0.894476 +1912, -0.412270, 0.159619, 0.073613, 0.893944 +1913, -0.413160, 0.160106, 0.074041, 0.893411 +1914, -0.414048, 0.160592, 0.074470, 0.892876 +1915, -0.414936, 0.161077, 0.074900, 0.892341 +1916, -0.415823, 0.161561, 0.075331, 0.891804 +1917, -0.416710, 0.162043, 0.075763, 0.891266 +1918, -0.417595, 0.162524, 0.076195, 0.890727 +1919, -0.418480, 0.163004, 0.076629, 0.890187 +1920, -0.419364, 0.163483, 0.077063, 0.889645 +1921, -0.420247, 0.163961, 0.077498, 0.889103 +1922, -0.421129, 0.164437, 0.077934, 0.888559 +1923, -0.422011, 0.164912, 0.078371, 0.888014 +1924, -0.422892, 0.165386, 0.078809, 0.887468 +1925, -0.423772, 0.165858, 0.079247, 0.886921 +1926, -0.424651, 0.166329, 0.079686, 0.886373 +1927, -0.425529, 0.166799, 0.080127, 0.885823 +1928, -0.426407, 0.167268, 0.080567, 0.885273 +1929, -0.427283, 0.167735, 0.081009, 0.884721 +1930, -0.428159, 0.168201, 0.081451, 0.884169 +1931, -0.429034, 0.168665, 0.081895, 0.883615 +1932, -0.429908, 0.169128, 0.082338, 0.883060 +1933, -0.430782, 0.169590, 0.082783, 0.882504 +1934, -0.431655, 0.170051, 0.083228, 0.881947 +1935, -0.432527, 0.170509, 0.083675, 0.881389 +1936, -0.433398, 0.170967, 0.084122, 0.880829 +1937, -0.434268, 0.171423, 0.084569, 0.880269 +1938, -0.435137, 0.171878, 0.085017, 0.879708 +1939, -0.436006, 0.172331, 0.085466, 0.879145 +1940, -0.436874, 0.172783, 0.085916, 0.878582 +1941, -0.437741, 0.173233, 0.086367, 0.878017 +1942, -0.438607, 0.173682, 0.086818, 0.877451 +1943, -0.439473, 0.174130, 0.087269, 0.876885 +1944, -0.440337, 0.174576, 0.087722, 0.876317 +1945, -0.441201, 0.175020, 0.088175, 0.875748 +1946, -0.442064, 0.175463, 0.088629, 0.875178 +1947, -0.442926, 0.175904, 0.089083, 0.874608 +1948, -0.443788, 0.176344, 0.089538, 0.874036 +1949, -0.444648, 0.176782, 0.089994, 0.873463 +1950, -0.445508, 0.177219, 0.090450, 0.872889 +1951, -0.446367, 0.177655, 0.090907, 0.872314 +1952, -0.447225, 0.178088, 0.091364, 0.871738 +1953, -0.448083, 0.178520, 0.091822, 0.871161 +1954, -0.448939, 0.178951, 0.092281, 0.870583 +1955, -0.449795, 0.179380, 0.092740, 0.870004 +1956, -0.450650, 0.179807, 0.093200, 0.869424 +1957, -0.451504, 0.180233, 0.093660, 0.868843 +1958, -0.452357, 0.180657, 0.094121, 0.868261 +1959, -0.453210, 0.181079, 0.094582, 0.867678 +1960, -0.454062, 0.181500, 0.095044, 0.867094 +1961, -0.454913, 0.181919, 0.095507, 0.866509 +1962, -0.455763, 0.182337, 0.095970, 0.865923 +1963, -0.456612, 0.182752, 0.096433, 0.865337 +1964, -0.457461, 0.183167, 0.096897, 0.864749 +1965, -0.458309, 0.183579, 0.097361, 0.864160 +1966, -0.459156, 0.183990, 0.097826, 0.863570 +1967, -0.460002, 0.184399, 0.098292, 0.862980 +1968, -0.460847, 0.184806, 0.098758, 0.862388 +1969, -0.461692, 0.185212, 0.099224, 0.861796 +1970, -0.462536, 0.185616, 0.099691, 0.861202 +1971, -0.463379, 0.186018, 0.100158, 0.860608 +1972, -0.464221, 0.186418, 0.100625, 0.860013 +1973, -0.465062, 0.186817, 0.101094, 0.859416 +1974, -0.465903, 0.187214, 0.101562, 0.858819 +1975, -0.466743, 0.187609, 0.102031, 0.858221 +1976, -0.467582, 0.188002, 0.102500, 0.857622 +1977, -0.468420, 0.188394, 0.102970, 0.857023 +1978, -0.469258, 0.188783, 0.103440, 0.856422 +1979, -0.470094, 0.189171, 0.103910, 0.855820 +1980, -0.470930, 0.189557, 0.104381, 0.855218 +1981, -0.471765, 0.189942, 0.104852, 0.854614 +1982, -0.472600, 0.190324, 0.105323, 0.854010 +1983, -0.473433, 0.190705, 0.105795, 0.853405 +1984, -0.474266, 0.191083, 0.106267, 0.852799 +1985, -0.475098, 0.191460, 0.106739, 0.852192 +1986, -0.475929, 0.191835, 0.107212, 0.851584 +1987, -0.476760, 0.192208, 0.107685, 0.850976 +1988, -0.477589, 0.192580, 0.108158, 0.850367 +1989, -0.478418, 0.192949, 0.108632, 0.849756 +1990, -0.479246, 0.193317, 0.109105, 0.849145 +1991, -0.480074, 0.193682, 0.109579, 0.848533 +1992, -0.480900, 0.194046, 0.110054, 0.847921 +1993, -0.481726, 0.194408, 0.110528, 0.847307 +1994, -0.482551, 0.194767, 0.111003, 0.846693 +1995, -0.483375, 0.195125, 0.111478, 0.846077 +1996, -0.484199, 0.195481, 0.111953, 0.845461 +1997, -0.485022, 0.195835, 0.112428, 0.844845 +1998, -0.485844, 0.196187, 0.112904, 0.844227 +1999, -0.486665, 0.196538, 0.113380, 0.843609 +2000, -0.487485, 0.196886, 0.113855, 0.842989 +2001, -0.488305, 0.197232, 0.114331, 0.842369 +2002, -0.489124, 0.197576, 0.114808, 0.841749 +2003, -0.489942, 0.197918, 0.115284, 0.841127 +2004, -0.490760, 0.198258, 0.115760, 0.840505 +2005, -0.491576, 0.198597, 0.116237, 0.839882 +2006, -0.492392, 0.198933, 0.116714, 0.839258 +2007, -0.493207, 0.199267, 0.117191, 0.838633 +2008, -0.494022, 0.199599, 0.117667, 0.838008 +2009, -0.494836, 0.199929, 0.118144, 0.837382 +2010, -0.495648, 0.200257, 0.118621, 0.836755 +2011, -0.496461, 0.200583, 0.119099, 0.836127 +2012, -0.497272, 0.200907, 0.119576, 0.835499 +2013, -0.498083, 0.201229, 0.120053, 0.834870 +2014, -0.498893, 0.201549, 0.120530, 0.834240 +2015, -0.499702, 0.201867, 0.121008, 0.833610 +2016, -0.500511, 0.202182, 0.121485, 0.832978 +2017, -0.501318, 0.202496, 0.121962, 0.832346 +2018, -0.502125, 0.202807, 0.122440, 0.831714 +2019, -0.502932, 0.203117, 0.122917, 0.831081 +2020, -0.503737, 0.203424, 0.123394, 0.830447 +2021, -0.504542, 0.203729, 0.123871, 0.829812 +2022, -0.505346, 0.204032, 0.124349, 0.829176 +2023, -0.506150, 0.204333, 0.124826, 0.828540 +2024, -0.506952, 0.204632, 0.125303, 0.827904 +2025, -0.507754, 0.204929, 0.125780, 0.827266 +2026, -0.508556, 0.205223, 0.126257, 0.826628 +2027, -0.509356, 0.205516, 0.126734, 0.825989 +2028, -0.510156, 0.205806, 0.127210, 0.825350 +2029, -0.510955, 0.206094, 0.127687, 0.824710 +2030, -0.511753, 0.206380, 0.128164, 0.824069 +2031, -0.512551, 0.206664, 0.128640, 0.823428 +2032, -0.513348, 0.206945, 0.129116, 0.822786 +2033, -0.514145, 0.207225, 0.129592, 0.822143 +2034, -0.514940, 0.207502, 0.130068, 0.821500 +2035, -0.515735, 0.207777, 0.130544, 0.820856 +2036, -0.516529, 0.208050, 0.131020, 0.820211 +2037, -0.517323, 0.208321, 0.131495, 0.819566 +2038, -0.518116, 0.208589, 0.131971, 0.818920 +2039, -0.518908, 0.208856, 0.132446, 0.818274 +2040, -0.519699, 0.209120, 0.132920, 0.817627 +2041, -0.520490, 0.209381, 0.133395, 0.816979 +2042, -0.521280, 0.209641, 0.133869, 0.816331 +2043, -0.522070, 0.209898, 0.134343, 0.815682 +2044, -0.522858, 0.210154, 0.134817, 0.815033 +2045, -0.523646, 0.210406, 0.135291, 0.814383 +2046, -0.524434, 0.210657, 0.135764, 0.813733 +2047, -0.525220, 0.210906, 0.136237, 0.813082 +2048, -0.526007, 0.211152, 0.136710, 0.812430 +2049, -0.526792, 0.211396, 0.137182, 0.811778 +2050, -0.527577, 0.211637, 0.137654, 0.811125 +2051, -0.528361, 0.211877, 0.138126, 0.810472 +2052, -0.529144, 0.212114, 0.138598, 0.809818 +2053, -0.529927, 0.212349, 0.139069, 0.809163 +2054, -0.530709, 0.212581, 0.139539, 0.808508 +2055, -0.531490, 0.212812, 0.140010, 0.807853 +2056, -0.532271, 0.213040, 0.140480, 0.807197 +2057, -0.533051, 0.213265, 0.140949, 0.806540 +2058, -0.533831, 0.213489, 0.141419, 0.805883 +2059, -0.534610, 0.213710, 0.141887, 0.805226 +2060, -0.535388, 0.213929, 0.142356, 0.804568 +2061, -0.536166, 0.214145, 0.142824, 0.803909 +2062, -0.536943, 0.214360, 0.143291, 0.803250 +2063, -0.537719, 0.214571, 0.143758, 0.802590 +2064, -0.538495, 0.214781, 0.144225, 0.801930 +2065, -0.539270, 0.214988, 0.144691, 0.801269 +2066, -0.540044, 0.215193, 0.145157, 0.800608 +2067, -0.540818, 0.215396, 0.145622, 0.799947 +2068, -0.541591, 0.215596, 0.146087, 0.799285 +2069, -0.542364, 0.215794, 0.146551, 0.798622 +2070, -0.543136, 0.215990, 0.147015, 0.797959 +2071, -0.543907, 0.216183, 0.147478, 0.797295 +2072, -0.544678, 0.216374, 0.147941, 0.796631 +2073, -0.545448, 0.216563, 0.148403, 0.795967 +2074, -0.546218, 0.216749, 0.148864, 0.795302 +2075, -0.546987, 0.216933, 0.149325, 0.794637 +2076, -0.547755, 0.217114, 0.149786, 0.793971 +2077, -0.548523, 0.217294, 0.150246, 0.793305 +2078, -0.549290, 0.217470, 0.150705, 0.792638 +2079, -0.550057, 0.217645, 0.151163, 0.791971 +2080, -0.550823, 0.217817, 0.151621, 0.791303 +2081, -0.551588, 0.217987, 0.152079, 0.790635 +2082, -0.552353, 0.218154, 0.152536, 0.789967 +2083, -0.553117, 0.218319, 0.152992, 0.789298 +2084, -0.553881, 0.218482, 0.153447, 0.788629 +2085, -0.554644, 0.218642, 0.153902, 0.787959 +2086, -0.555407, 0.218800, 0.154356, 0.787289 +2087, -0.556169, 0.218955, 0.154810, 0.786618 +2088, -0.556930, 0.219108, 0.155262, 0.785948 +2089, -0.557691, 0.219259, 0.155714, 0.785276 +2090, -0.558452, 0.219407, 0.156166, 0.784605 +2091, -0.559211, 0.219553, 0.156616, 0.783932 +2092, -0.559971, 0.219697, 0.157066, 0.783260 +2093, -0.560729, 0.219838, 0.157516, 0.782587 +2094, -0.561488, 0.219977, 0.157964, 0.781914 +2095, -0.562245, 0.220113, 0.158412, 0.781240 +2096, -0.563002, 0.220247, 0.158858, 0.780566 +2097, -0.563759, 0.220379, 0.159305, 0.779892 +2098, -0.564515, 0.220508, 0.159750, 0.779217 +2099, -0.565270, 0.220634, 0.160194, 0.778542 +2100, -0.566025, 0.220759, 0.160638, 0.777867 +2101, -0.566780, 0.220881, 0.161081, 0.777191 +2102, -0.567533, 0.221000, 0.161523, 0.776515 +2103, -0.568287, 0.221117, 0.161964, 0.775838 +2104, -0.569040, 0.221232, 0.162405, 0.775161 +2105, -0.569792, 0.221344, 0.162844, 0.774484 +2106, -0.570544, 0.221454, 0.163283, 0.773807 +2107, -0.571295, 0.221561, 0.163721, 0.773129 +2108, -0.572046, 0.221667, 0.164157, 0.772450 +2109, -0.572796, 0.221769, 0.164593, 0.771772 +2110, -0.573546, 0.221869, 0.165028, 0.771093 +2111, -0.574295, 0.221967, 0.165463, 0.770414 +2112, -0.575044, 0.222062, 0.165896, 0.769734 +2113, -0.575793, 0.222155, 0.166328, 0.769054 +2114, -0.576541, 0.222246, 0.166760, 0.768374 +2115, -0.577288, 0.222334, 0.167190, 0.767694 +2116, -0.578035, 0.222420, 0.167619, 0.767013 +2117, -0.578781, 0.222503, 0.168048, 0.766332 +2118, -0.579527, 0.222584, 0.168475, 0.765651 +2119, -0.580273, 0.222662, 0.168902, 0.764969 +2120, -0.581018, 0.222738, 0.169327, 0.764287 +2121, -0.581762, 0.222811, 0.169752, 0.763605 +2122, -0.582506, 0.222883, 0.170175, 0.762922 +2123, -0.583250, 0.222951, 0.170598, 0.762239 +2124, -0.583993, 0.223017, 0.171019, 0.761556 +2125, -0.584736, 0.223081, 0.171439, 0.760873 +2126, -0.585478, 0.223143, 0.171859, 0.760189 +2127, -0.586220, 0.223202, 0.172277, 0.759505 +2128, -0.586961, 0.223258, 0.172694, 0.758821 +2129, -0.587702, 0.223312, 0.173110, 0.758136 +2130, -0.588443, 0.223364, 0.173525, 0.757452 +2131, -0.589183, 0.223413, 0.173939, 0.756767 +2132, -0.589922, 0.223460, 0.174352, 0.756081 +2133, -0.590661, 0.223504, 0.174763, 0.755396 +2134, -0.591400, 0.223546, 0.175174, 0.754710 +2135, -0.592138, 0.223586, 0.175583, 0.754024 +2136, -0.592876, 0.223623, 0.175991, 0.753338 +2137, -0.593614, 0.223658, 0.176398, 0.752651 +2138, -0.594351, 0.223690, 0.176804, 0.751964 +2139, -0.595088, 0.223720, 0.177209, 0.751277 +2140, -0.595824, 0.223747, 0.177612, 0.750590 +2141, -0.596560, 0.223772, 0.178015, 0.749902 +2142, -0.597295, 0.223795, 0.178416, 0.749214 +2143, -0.598030, 0.223815, 0.178816, 0.748526 +2144, -0.598765, 0.223833, 0.179214, 0.747838 +2145, -0.599499, 0.223848, 0.179612, 0.747150 +2146, -0.600233, 0.223861, 0.180008, 0.746461 +2147, -0.600966, 0.223872, 0.180403, 0.745772 +2148, -0.601699, 0.223880, 0.180796, 0.745083 +2149, -0.602432, 0.223885, 0.181189, 0.744393 +2150, -0.603164, 0.223889, 0.181580, 0.743704 +2151, -0.603896, 0.223889, 0.181970, 0.743014 +2152, -0.604628, 0.223888, 0.182358, 0.742324 +2153, -0.605359, 0.223884, 0.182745, 0.741634 +2154, -0.606090, 0.223877, 0.183131, 0.740943 +2155, -0.606820, 0.223869, 0.183516, 0.740252 +2156, -0.607551, 0.223857, 0.183899, 0.739562 +2157, -0.608280, 0.223844, 0.184281, 0.738870 +2158, -0.609010, 0.223828, 0.184662, 0.738179 +2159, -0.609739, 0.223809, 0.185041, 0.737488 +2160, -0.610467, 0.223789, 0.185419, 0.736796 +2161, -0.611196, 0.223765, 0.185795, 0.736104 +2162, -0.611924, 0.223740, 0.186170, 0.735412 +2163, -0.612651, 0.223712, 0.186544, 0.734720 +2164, -0.613378, 0.223682, 0.186916, 0.734027 +2165, -0.614105, 0.223649, 0.187287, 0.733334 +2166, -0.614832, 0.223614, 0.187656, 0.732642 +2167, -0.615558, 0.223576, 0.188024, 0.731949 +2168, -0.616284, 0.223536, 0.188391, 0.731255 +2169, -0.617010, 0.223494, 0.188756, 0.730562 +2170, -0.617735, 0.223449, 0.189120, 0.729868 +2171, -0.618460, 0.223402, 0.189482, 0.729174 +2172, -0.619185, 0.223353, 0.189843, 0.728480 +2173, -0.619909, 0.223301, 0.190202, 0.727786 +2174, -0.620633, 0.223247, 0.190560, 0.727092 +2175, -0.621357, 0.223190, 0.190916, 0.726397 +2176, -0.622080, 0.223131, 0.191271, 0.725703 +2177, -0.622803, 0.223070, 0.191624, 0.725008 +2178, -0.623526, 0.223007, 0.191976, 0.724313 +2179, -0.624248, 0.222941, 0.192326, 0.723617 +2180, -0.624971, 0.222872, 0.192675, 0.722922 +2181, -0.625692, 0.222802, 0.193022, 0.722226 +2182, -0.626414, 0.222729, 0.193367, 0.721531 +2183, -0.627135, 0.222653, 0.193711, 0.720835 +2184, -0.627856, 0.222576, 0.194054, 0.720139 +2185, -0.628577, 0.222496, 0.194395, 0.719442 +2186, -0.629297, 0.222413, 0.194734, 0.718746 +2187, -0.630017, 0.222329, 0.195071, 0.718049 +2188, -0.630737, 0.222242, 0.195408, 0.717353 +2189, -0.631457, 0.222152, 0.195742, 0.716656 +2190, -0.632176, 0.222061, 0.196075, 0.715959 +2191, -0.632895, 0.221967, 0.196406, 0.715262 +2192, -0.633614, 0.221870, 0.196736, 0.714564 +2193, -0.634333, 0.221772, 0.197064, 0.713867 +2194, -0.635051, 0.221671, 0.197390, 0.713169 +2195, -0.635769, 0.221568, 0.197714, 0.712471 +2196, -0.636486, 0.221462, 0.198037, 0.711773 +2197, -0.637204, 0.221354, 0.198359, 0.711075 +2198, -0.637921, 0.221244, 0.198678, 0.710376 +2199, -0.638638, 0.221132, 0.198996, 0.709678 +2200, -0.639355, 0.221017, 0.199312, 0.708979 +2201, -0.640071, 0.220900, 0.199627, 0.708280 +2202, -0.640787, 0.220781, 0.199940, 0.707581 +2203, -0.641503, 0.220659, 0.200251, 0.706882 +2204, -0.642219, 0.220536, 0.200560, 0.706183 +2205, -0.642934, 0.220410, 0.200868, 0.705484 +2206, -0.643650, 0.220281, 0.201174, 0.704784 +2207, -0.644365, 0.220151, 0.201478, 0.704084 +2208, -0.645079, 0.220018, 0.201780, 0.703384 +2209, -0.645794, 0.219883, 0.202081, 0.702684 +2210, -0.646508, 0.219745, 0.202379, 0.701984 +2211, -0.647222, 0.219606, 0.202676, 0.701284 +2212, -0.647936, 0.219464, 0.202972, 0.700583 +2213, -0.648650, 0.219320, 0.203265, 0.699883 +2214, -0.649363, 0.219174, 0.203557, 0.699182 +2215, -0.650076, 0.219025, 0.203847, 0.698481 +2216, -0.650789, 0.218874, 0.204135, 0.697780 +2217, -0.651502, 0.218722, 0.204421, 0.697079 +2218, -0.652214, 0.218566, 0.204705, 0.696377 +2219, -0.652926, 0.218409, 0.204988, 0.695676 +2220, -0.653638, 0.218249, 0.205268, 0.694974 +2221, -0.654350, 0.218088, 0.205547, 0.694272 +2222, -0.655062, 0.217924, 0.205824, 0.693570 +2223, -0.655773, 0.217758, 0.206099, 0.692868 +2224, -0.656485, 0.217589, 0.206373, 0.692166 +2225, -0.657196, 0.217419, 0.206644, 0.691463 +2226, -0.657907, 0.217246, 0.206913, 0.690760 +2227, -0.658617, 0.217071, 0.207181, 0.690058 +2228, -0.659328, 0.216894, 0.207447, 0.689355 +2229, -0.660038, 0.216715, 0.207710, 0.688652 +2230, -0.660748, 0.216534, 0.207972, 0.687948 +2231, -0.661458, 0.216350, 0.208232, 0.687245 +2232, -0.662167, 0.216165, 0.208490, 0.686541 +2233, -0.662877, 0.215977, 0.208746, 0.685838 +2234, -0.663586, 0.215787, 0.209001, 0.685134 +2235, -0.664295, 0.215595, 0.209253, 0.684430 +2236, -0.665004, 0.215401, 0.209503, 0.683726 +2237, -0.665713, 0.215205, 0.209751, 0.683021 +2238, -0.666421, 0.215006, 0.209998, 0.682317 +2239, -0.667130, 0.214806, 0.210242, 0.681612 +2240, -0.667838, 0.214603, 0.210484, 0.680907 +2241, -0.668546, 0.214399, 0.210725, 0.680202 +2242, -0.669253, 0.214192, 0.210963, 0.679497 +2243, -0.669961, 0.213983, 0.211199, 0.678792 +2244, -0.670669, 0.213772, 0.211434, 0.678086 +2245, -0.671376, 0.213559, 0.211666, 0.677381 +2246, -0.672083, 0.213344, 0.211896, 0.676675 +2247, -0.672790, 0.213127, 0.212125, 0.675969 +2248, -0.673497, 0.212908, 0.212351, 0.675263 +2249, -0.674203, 0.212687, 0.212575, 0.674556 +2250, -0.674910, 0.212463, 0.212798, 0.673850 +2251, -0.675616, 0.212238, 0.213018, 0.673143 +2252, -0.676322, 0.212011, 0.213236, 0.672436 +2253, -0.677028, 0.211782, 0.213452, 0.671729 +2254, -0.677733, 0.211550, 0.213666, 0.671022 +2255, -0.678439, 0.211317, 0.213878, 0.670315 +2256, -0.679144, 0.211081, 0.214088, 0.669607 +2257, -0.679850, 0.210844, 0.214296, 0.668900 +2258, -0.680555, 0.210605, 0.214501, 0.668192 +2259, -0.681260, 0.210363, 0.214705, 0.667484 +2260, -0.681964, 0.210120, 0.214906, 0.666775 +2261, -0.682669, 0.209875, 0.215106, 0.666067 +2262, -0.683373, 0.209627, 0.215303, 0.665358 +2263, -0.684078, 0.209378, 0.215498, 0.664650 +2264, -0.684782, 0.209127, 0.215691, 0.663941 +2265, -0.685486, 0.208874, 0.215882, 0.663231 +2266, -0.686190, 0.208619, 0.216071, 0.662522 +2267, -0.686893, 0.208362, 0.216258, 0.661813 +2268, -0.687597, 0.208103, 0.216442, 0.661103 +2269, -0.688300, 0.207842, 0.216625, 0.660393 +2270, -0.689003, 0.207579, 0.216805, 0.659683 +2271, -0.689706, 0.207314, 0.216983, 0.658972 +2272, -0.690409, 0.207047, 0.217159, 0.658262 +2273, -0.691112, 0.206779, 0.217333, 0.657551 +2274, -0.691814, 0.206509, 0.217504, 0.656840 +2275, -0.692517, 0.206236, 0.217674, 0.656129 +2276, -0.693219, 0.205962, 0.217841, 0.655418 +2277, -0.693921, 0.205686, 0.218006, 0.654706 +2278, -0.694623, 0.205408, 0.218169, 0.653994 +2279, -0.695325, 0.205128, 0.218329, 0.653282 +2280, -0.696026, 0.204847, 0.218488, 0.652570 +2281, -0.696728, 0.204563, 0.218644, 0.651858 +2282, -0.697429, 0.204278, 0.218798, 0.651145 +2283, -0.698130, 0.203991, 0.218950, 0.650433 +2284, -0.698831, 0.203702, 0.219100, 0.649719 +2285, -0.699532, 0.203411, 0.219247, 0.649006 +2286, -0.700233, 0.203119, 0.219392, 0.648293 +2287, -0.700934, 0.202824, 0.219535, 0.647579 +2288, -0.701634, 0.202528, 0.219676, 0.646865 +2289, -0.702334, 0.202230, 0.219814, 0.646151 +2290, -0.703034, 0.201931, 0.219951, 0.645437 +2291, -0.703734, 0.201629, 0.220085, 0.644722 +2292, -0.704434, 0.201326, 0.220216, 0.644007 +2293, -0.705134, 0.201021, 0.220346, 0.643292 +2294, -0.705833, 0.200714, 0.220473, 0.642577 +2295, -0.706533, 0.200406, 0.220598, 0.641861 +2296, -0.707232, 0.200095, 0.220720, 0.641145 +2297, -0.707931, 0.199783, 0.220841, 0.640429 +2298, -0.708630, 0.199470, 0.220959, 0.639713 +2299, -0.709329, 0.199154, 0.221075, 0.638996 +2300, -0.710027, 0.198837, 0.221188, 0.638280 +2301, -0.710726, 0.198519, 0.221300, 0.637562 +2302, -0.711424, 0.198198, 0.221409, 0.636845 +2303, -0.712122, 0.197876, 0.221515, 0.636128 +2304, -0.712820, 0.197552, 0.221620, 0.635410 +2305, -0.713518, 0.197227, 0.221722, 0.634692 +2306, -0.714215, 0.196900, 0.221821, 0.633973 +2307, -0.714913, 0.196571, 0.221919, 0.633255 +2308, -0.715610, 0.196241, 0.222014, 0.632536 +2309, -0.716307, 0.195909, 0.222107, 0.631817 +2310, -0.717004, 0.195575, 0.222197, 0.631097 +2311, -0.717701, 0.195240, 0.222285, 0.630377 +2312, -0.718398, 0.194903, 0.222371, 0.629657 +2313, -0.719094, 0.194564, 0.222455, 0.628937 +2314, -0.719791, 0.194224, 0.222536, 0.628217 +2315, -0.720487, 0.193883, 0.222615, 0.627496 +2316, -0.721183, 0.193539, 0.222691, 0.626775 +2317, -0.721879, 0.193195, 0.222766, 0.626053 +2318, -0.722574, 0.192848, 0.222837, 0.625331 +2319, -0.723270, 0.192500, 0.222907, 0.624609 +2320, -0.723965, 0.192151, 0.222974, 0.623887 +2321, -0.724660, 0.191800, 0.223039, 0.623165 +2322, -0.725355, 0.191448, 0.223101, 0.622442 +2323, -0.726050, 0.191093, 0.223161, 0.621718 +2324, -0.726745, 0.190738, 0.223219, 0.620995 +2325, -0.727439, 0.190381, 0.223274, 0.620271 +2326, -0.728133, 0.190022, 0.223327, 0.619547 +2327, -0.728827, 0.189662, 0.223378, 0.618822 +2328, -0.729521, 0.189301, 0.223426, 0.618098 +2329, -0.730215, 0.188938, 0.223472, 0.617372 +2330, -0.730909, 0.188574, 0.223515, 0.616647 +2331, -0.731602, 0.188208, 0.223556, 0.615921 +2332, -0.732295, 0.187840, 0.223595, 0.615195 +2333, -0.732988, 0.187472, 0.223632, 0.614469 +2334, -0.733681, 0.187102, 0.223665, 0.613742 +2335, -0.734373, 0.186730, 0.223697, 0.613015 +2336, -0.735066, 0.186357, 0.223726, 0.612287 +2337, -0.735758, 0.185983, 0.223753, 0.611560 +2338, -0.736450, 0.185607, 0.223777, 0.610831 +2339, -0.737142, 0.185230, 0.223799, 0.610103 +2340, -0.737833, 0.184851, 0.223819, 0.609374 +2341, -0.738525, 0.184471, 0.223836, 0.608645 +2342, -0.739216, 0.184090, 0.223851, 0.607915 +2343, -0.739907, 0.183708, 0.223863, 0.607186 +2344, -0.740598, 0.183324, 0.223873, 0.606455 +2345, -0.741288, 0.182938, 0.223881, 0.605725 +2346, -0.741979, 0.182552, 0.223886, 0.604994 +2347, -0.742669, 0.182164, 0.223889, 0.604262 +2348, -0.743359, 0.181775, 0.223889, 0.603530 +2349, -0.744049, 0.181384, 0.223887, 0.602798 +2350, -0.744738, 0.180993, 0.223883, 0.602066 +2351, -0.745427, 0.180600, 0.223876, 0.601333 +2352, -0.746116, 0.180205, 0.223867, 0.600600 +2353, -0.746805, 0.179810, 0.223855, 0.599866 +2354, -0.747494, 0.179413, 0.223841, 0.599132 +2355, -0.748182, 0.179015, 0.223824, 0.598398 +2356, -0.748870, 0.178616, 0.223805, 0.597663 +2357, -0.749558, 0.178215, 0.223784, 0.596927 +2358, -0.750246, 0.177814, 0.223760, 0.596192 +2359, -0.750933, 0.177411, 0.223734, 0.595456 +2360, -0.751621, 0.177007, 0.223705, 0.594719 +2361, -0.752308, 0.176601, 0.223674, 0.593982 +2362, -0.752994, 0.176195, 0.223641, 0.593245 +2363, -0.753681, 0.175787, 0.223605, 0.592507 +2364, -0.754367, 0.175379, 0.223566, 0.591769 +2365, -0.755053, 0.174969, 0.223526, 0.591031 +2366, -0.755739, 0.174558, 0.223482, 0.590292 +2367, -0.756424, 0.174145, 0.223437, 0.589552 +2368, -0.757109, 0.173732, 0.223389, 0.588813 +2369, -0.757794, 0.173318, 0.223338, 0.588072 +2370, -0.758479, 0.172902, 0.223285, 0.587332 +2371, -0.759163, 0.172486, 0.223230, 0.586591 +2372, -0.759847, 0.172068, 0.223172, 0.585849 +2373, -0.760531, 0.171649, 0.223112, 0.585107 +2374, -0.761215, 0.171229, 0.223050, 0.584364 +2375, -0.761898, 0.170808, 0.222985, 0.583622 +2376, -0.762581, 0.170387, 0.222917, 0.582878 +2377, -0.763263, 0.169964, 0.222847, 0.582134 +2378, -0.763946, 0.169540, 0.222775, 0.581390 +2379, -0.764628, 0.169115, 0.222700, 0.580645 +2380, -0.765310, 0.168689, 0.222623, 0.579900 +2381, -0.765991, 0.168262, 0.222543, 0.579154 +2382, -0.766673, 0.167834, 0.222461, 0.578408 +2383, -0.767354, 0.167405, 0.222377, 0.577661 +2384, -0.768034, 0.166975, 0.222290, 0.576914 +2385, -0.768714, 0.166544, 0.222201, 0.576167 +2386, -0.769394, 0.166112, 0.222109, 0.575419 +2387, -0.770074, 0.165679, 0.222015, 0.574670 +2388, -0.770753, 0.165246, 0.221918, 0.573921 +2389, -0.771432, 0.164811, 0.221819, 0.573171 +2390, -0.772111, 0.164375, 0.221718, 0.572421 +2391, -0.772790, 0.163939, 0.221614, 0.571671 +2392, -0.773468, 0.163502, 0.221508, 0.570920 +2393, -0.774145, 0.163064, 0.221399, 0.570168 +2394, -0.774823, 0.162624, 0.221288, 0.569416 +2395, -0.775500, 0.162185, 0.221175, 0.568663 +2396, -0.776176, 0.161744, 0.221059, 0.567910 +2397, -0.776853, 0.161302, 0.220941, 0.567157 +2398, -0.777529, 0.160860, 0.220820, 0.566402 +2399, -0.778204, 0.160416, 0.220697, 0.565648 +2400, -0.778880, 0.159972, 0.220571, 0.564893 +2401, -0.779555, 0.159527, 0.220443, 0.564137 +2402, -0.780229, 0.159082, 0.220313, 0.563381 +2403, -0.780903, 0.158635, 0.220180, 0.562624 +2404, -0.781577, 0.158188, 0.220045, 0.561866 +2405, -0.782251, 0.157740, 0.219908, 0.561109 +2406, -0.782924, 0.157291, 0.219768, 0.560350 +2407, -0.783596, 0.156841, 0.219625, 0.559591 +2408, -0.784269, 0.156391, 0.219481, 0.558832 +2409, -0.784940, 0.155940, 0.219334, 0.558072 +2410, -0.785612, 0.155489, 0.219184, 0.557311 +2411, -0.786283, 0.155036, 0.219032, 0.556550 +2412, -0.786954, 0.154583, 0.218878, 0.555788 +2413, -0.787624, 0.154129, 0.218721, 0.555026 +2414, -0.788294, 0.153675, 0.218562, 0.554263 +2415, -0.788963, 0.153220, 0.218401, 0.553499 +2416, -0.789632, 0.152764, 0.218237, 0.552735 +2417, -0.790301, 0.152307, 0.218071, 0.551971 +2418, -0.790969, 0.151850, 0.217902, 0.551206 +2419, -0.791637, 0.151393, 0.217731, 0.550440 +2420, -0.792304, 0.150934, 0.217558, 0.549674 +2421, -0.792971, 0.150475, 0.217382, 0.548907 +2422, -0.793638, 0.150016, 0.217204, 0.548139 +2423, -0.794304, 0.149556, 0.217024, 0.547371 +2424, -0.794969, 0.149095, 0.216841, 0.546602 +2425, -0.795635, 0.148634, 0.216656, 0.545833 +2426, -0.796299, 0.148172, 0.216469, 0.545063 +2427, -0.796963, 0.147709, 0.216279, 0.544293 +2428, -0.797627, 0.147247, 0.216087, 0.543522 +2429, -0.798291, 0.146783, 0.215892, 0.542750 +2430, -0.798953, 0.146319, 0.215695, 0.541978 +2431, -0.799616, 0.145855, 0.215496, 0.541205 +2432, -0.800278, 0.145390, 0.215295, 0.540431 +2433, -0.800939, 0.144924, 0.215091, 0.539657 +2434, -0.801600, 0.144458, 0.214885, 0.538882 +2435, -0.802260, 0.143992, 0.214677, 0.538107 +2436, -0.802920, 0.143525, 0.214466, 0.537331 +2437, -0.803579, 0.143058, 0.214253, 0.536554 +2438, -0.804238, 0.142590, 0.214037, 0.535777 +2439, -0.804897, 0.142122, 0.213820, 0.534999 +2440, -0.805555, 0.141653, 0.213600, 0.534220 +2441, -0.806212, 0.141184, 0.213377, 0.533441 +2442, -0.806869, 0.140715, 0.213153, 0.532661 +2443, -0.807525, 0.140245, 0.212926, 0.531881 +2444, -0.808181, 0.139775, 0.212697, 0.531100 +2445, -0.808836, 0.139304, 0.212465, 0.530318 +2446, -0.809491, 0.138833, 0.212232, 0.529536 +2447, -0.810145, 0.138362, 0.211996, 0.528752 +2448, -0.810798, 0.137890, 0.211757, 0.527969 +2449, -0.811451, 0.137418, 0.211517, 0.527184 +2450, -0.812104, 0.136946, 0.211274, 0.526399 +2451, -0.812756, 0.136474, 0.211029, 0.525614 +2452, -0.813407, 0.136001, 0.210782, 0.524827 +2453, -0.814058, 0.135528, 0.210532, 0.524040 +2454, -0.814708, 0.135054, 0.210280, 0.523252 +2455, -0.815358, 0.134580, 0.210026, 0.522464 +2456, -0.816007, 0.134106, 0.209770, 0.521675 +2457, -0.816655, 0.133632, 0.209511, 0.520885 +2458, -0.817303, 0.133158, 0.209251, 0.520095 +2459, -0.817951, 0.132683, 0.208988, 0.519304 +2460, -0.818597, 0.132208, 0.208723, 0.518512 +2461, -0.819243, 0.131733, 0.208455, 0.517719 +2462, -0.819889, 0.131258, 0.208186, 0.516926 +2463, -0.820534, 0.130782, 0.207914, 0.516132 +2464, -0.821178, 0.130306, 0.207640, 0.515338 +2465, -0.821821, 0.129830, 0.207364, 0.514542 +2466, -0.822464, 0.129354, 0.207085, 0.513746 +2467, -0.823107, 0.128878, 0.206805, 0.512950 +2468, -0.823748, 0.128402, 0.206522, 0.512152 +2469, -0.824389, 0.127925, 0.206237, 0.511354 +2470, -0.825030, 0.127449, 0.205950, 0.510556 +2471, -0.825670, 0.126972, 0.205661, 0.509756 +2472, -0.826309, 0.126495, 0.205370, 0.508956 +2473, -0.826947, 0.126018, 0.205076, 0.508155 +2474, -0.827585, 0.125541, 0.204781, 0.507353 +2475, -0.828222, 0.125064, 0.204483, 0.506551 +2476, -0.828858, 0.124587, 0.204183, 0.505748 +2477, -0.829494, 0.124110, 0.203881, 0.504944 +2478, -0.830129, 0.123633, 0.203577, 0.504140 +2479, -0.830764, 0.123155, 0.203271, 0.503335 +2480, -0.831397, 0.122678, 0.202962, 0.502529 +2481, -0.832030, 0.122201, 0.202652, 0.501722 +2482, -0.832663, 0.121724, 0.202339, 0.500914 +2483, -0.833294, 0.121246, 0.202025, 0.500106 +2484, -0.833925, 0.120769, 0.201708, 0.499297 +2485, -0.834555, 0.120292, 0.201389, 0.498488 +2486, -0.835184, 0.119814, 0.201068, 0.497678 +2487, -0.835813, 0.119337, 0.200745, 0.496866 +2488, -0.836441, 0.118860, 0.200420, 0.496055 +2489, -0.837068, 0.118383, 0.200093, 0.495242 +2490, -0.837695, 0.117906, 0.199764, 0.494429 +2491, -0.838321, 0.117429, 0.199433, 0.493615 +2492, -0.838946, 0.116952, 0.199100, 0.492800 +2493, -0.839570, 0.116475, 0.198765, 0.491984 +2494, -0.840193, 0.115999, 0.198428, 0.491168 +2495, -0.840816, 0.115522, 0.198089, 0.490351 +2496, -0.841438, 0.115046, 0.197747, 0.489533 +2497, -0.842059, 0.114570, 0.197404, 0.488715 +2498, -0.842679, 0.114093, 0.197059, 0.487895 +2499, -0.843299, 0.113617, 0.196712, 0.487075 +2500, -0.843918, 0.113142, 0.196363, 0.486254 +2501, -0.844536, 0.112666, 0.196012, 0.485433 +2502, -0.845153, 0.112191, 0.195659, 0.484610 +2503, -0.845769, 0.111715, 0.195304, 0.483787 +2504, -0.846385, 0.111240, 0.194947, 0.482963 +2505, -0.847000, 0.110765, 0.194588, 0.482139 +2506, -0.847614, 0.110291, 0.194227, 0.481313 +2507, -0.848227, 0.109816, 0.193864, 0.480487 +2508, -0.848839, 0.109342, 0.193500, 0.479660 +2509, -0.849451, 0.108868, 0.193133, 0.478832 +2510, -0.850062, 0.108395, 0.192765, 0.478004 +2511, -0.850671, 0.107921, 0.192394, 0.477175 +2512, -0.851280, 0.107448, 0.192022, 0.476345 +2513, -0.851888, 0.106976, 0.191648, 0.475514 +2514, -0.852496, 0.106503, 0.191272, 0.474682 +2515, -0.853102, 0.106031, 0.190894, 0.473850 +2516, -0.853708, 0.105559, 0.190515, 0.473017 +2517, -0.854312, 0.105087, 0.190133, 0.472183 +2518, -0.854916, 0.104616, 0.189750, 0.471348 +2519, -0.855519, 0.104145, 0.189364, 0.470512 +2520, -0.856121, 0.103675, 0.188977, 0.469676 +2521, -0.856722, 0.103205, 0.188589, 0.468839 +2522, -0.857323, 0.102735, 0.188198, 0.468001 +2523, -0.857922, 0.102265, 0.187806, 0.467162 +2524, -0.858520, 0.101796, 0.187411, 0.466323 +2525, -0.859118, 0.101328, 0.187015, 0.465483 +2526, -0.859715, 0.100859, 0.186618, 0.464642 +2527, -0.860310, 0.100392, 0.186218, 0.463800 +2528, -0.860905, 0.099924, 0.185817, 0.462957 +2529, -0.861499, 0.099457, 0.185414, 0.462114 +2530, -0.862092, 0.098991, 0.185009, 0.461270 +2531, -0.862684, 0.098525, 0.184603, 0.460425 +2532, -0.863275, 0.098059, 0.184194, 0.459579 +2533, -0.863865, 0.097594, 0.183785, 0.458732 +2534, -0.864455, 0.097129, 0.183373, 0.457885 +2535, -0.865043, 0.096665, 0.182960, 0.457037 +2536, -0.865630, 0.096201, 0.182545, 0.456188 +2537, -0.866216, 0.095738, 0.182128, 0.455338 +2538, -0.866802, 0.095275, 0.181710, 0.454487 +2539, -0.867386, 0.094813, 0.181290, 0.453636 +2540, -0.867970, 0.094351, 0.180868, 0.452784 +2541, -0.868552, 0.093890, 0.180445, 0.451931 +2542, -0.869134, 0.093430, 0.180020, 0.451077 +2543, -0.869714, 0.092970, 0.179594, 0.450222 +2544, -0.870294, 0.092510, 0.179165, 0.449367 +2545, -0.870872, 0.092051, 0.178736, 0.448511 +2546, -0.871449, 0.091593, 0.178304, 0.447654 +2547, -0.872026, 0.091135, 0.177872, 0.446796 +2548, -0.872601, 0.090678, 0.177437, 0.445938 +2549, -0.873176, 0.090222, 0.177001, 0.445078 +2550, -0.873749, 0.089766, 0.176564, 0.444218 +2551, -0.874322, 0.089310, 0.176124, 0.443357 +2552, -0.874893, 0.088856, 0.175684, 0.442495 +2553, -0.875463, 0.088402, 0.175242, 0.441633 +2554, -0.876033, 0.087948, 0.174798, 0.440769 +2555, -0.876601, 0.087495, 0.174353, 0.439905 +2556, -0.877168, 0.087043, 0.173906, 0.439040 +2557, -0.877734, 0.086592, 0.173458, 0.438174 +2558, -0.878300, 0.086141, 0.173008, 0.437307 +2559, -0.878864, 0.085691, 0.172557, 0.436440 +2560, -0.879427, 0.085242, 0.172105, 0.435572 +2561, -0.879988, 0.084793, 0.171651, 0.434703 +2562, -0.880549, 0.084345, 0.171195, 0.433833 +2563, -0.881109, 0.083898, 0.170738, 0.432962 +2564, -0.881668, 0.083451, 0.170280, 0.432091 +2565, -0.882225, 0.083006, 0.169821, 0.431218 +2566, -0.882782, 0.082561, 0.169359, 0.430345 +2567, -0.883337, 0.082116, 0.168897, 0.429471 +2568, -0.883892, 0.081673, 0.168433, 0.428597 +2569, -0.884445, 0.081230, 0.167968, 0.427721 +2570, -0.884997, 0.080788, 0.167502, 0.426845 +2571, -0.885548, 0.080347, 0.167034, 0.425968 +2572, -0.886098, 0.079906, 0.166565, 0.425090 +2573, -0.886647, 0.079467, 0.166094, 0.424211 +2574, -0.887195, 0.079028, 0.165622, 0.423332 +2575, -0.887741, 0.078590, 0.165149, 0.422451 +2576, -0.888287, 0.078153, 0.164675, 0.421570 +2577, -0.888831, 0.077716, 0.164199, 0.420688 +2578, -0.889374, 0.077281, 0.163722, 0.419806 +2579, -0.889916, 0.076846, 0.163244, 0.418922 +2580, -0.890457, 0.076412, 0.162764, 0.418038 +2581, -0.890997, 0.075979, 0.162284, 0.417153 +2582, -0.891535, 0.075547, 0.161802, 0.416267 +2583, -0.892073, 0.075116, 0.161319, 0.415380 +2584, -0.892609, 0.074685, 0.160834, 0.414492 +2585, -0.893144, 0.074256, 0.160349, 0.413604 +2586, -0.893678, 0.073827, 0.159862, 0.412715 +2587, -0.894211, 0.073399, 0.159375, 0.411825 +2588, -0.894742, 0.072972, 0.158886, 0.410934 +2589, -0.895272, 0.072546, 0.158395, 0.410043 +2590, -0.895802, 0.072121, 0.157904, 0.409150 +2591, -0.896330, 0.071697, 0.157412, 0.408257 +2592, -0.896857, 0.071274, 0.156918, 0.407363 +2593, -0.897382, 0.070852, 0.156424, 0.406469 +2594, -0.897907, 0.070431, 0.155928, 0.405573 +2595, -0.898430, 0.070010, 0.155431, 0.404677 +2596, -0.898952, 0.069591, 0.154933, 0.403780 +2597, -0.899473, 0.069173, 0.154434, 0.402882 +2598, -0.899992, 0.068755, 0.153935, 0.401983 +2599, -0.900511, 0.068339, 0.153434, 0.401084 +2600, -0.901028, 0.067923, 0.152932, 0.400184 +2601, -0.901544, 0.067509, 0.152429, 0.399283 +2602, -0.902059, 0.067095, 0.151925, 0.398381 +2603, -0.902572, 0.066683, 0.151420, 0.397478 +2604, -0.903084, 0.066271, 0.150914, 0.396575 +2605, -0.903595, 0.065861, 0.150407, 0.395671 +2606, -0.904105, 0.065451, 0.149899, 0.394766 +2607, -0.904614, 0.065043, 0.149390, 0.393860 +2608, -0.905121, 0.064636, 0.148881, 0.392954 +2609, -0.905627, 0.064229, 0.148370, 0.392046 +2610, -0.906132, 0.063824, 0.147858, 0.391138 +2611, -0.906636, 0.063420, 0.147346, 0.390229 +2612, -0.907138, 0.063017, 0.146833, 0.389320 +2613, -0.907639, 0.062615, 0.146319, 0.388409 +2614, -0.908139, 0.062214, 0.145803, 0.387498 +2615, -0.908637, 0.061814, 0.145288, 0.386586 +2616, -0.909134, 0.061415, 0.144771, 0.385674 +2617, -0.909630, 0.061017, 0.144253, 0.384760 +2618, -0.910125, 0.060620, 0.143735, 0.383846 +2619, -0.910618, 0.060225, 0.143216, 0.382931 +2620, -0.911111, 0.059830, 0.142696, 0.382015 +2621, -0.911601, 0.059437, 0.142176, 0.381099 +2622, -0.912091, 0.059045, 0.141654, 0.380181 +2623, -0.912579, 0.058654, 0.141132, 0.379263 +2624, -0.913066, 0.058264, 0.140609, 0.378344 +2625, -0.913552, 0.057875, 0.140085, 0.377425 +2626, -0.914036, 0.057487, 0.139561, 0.376505 +2627, -0.914519, 0.057101, 0.139036, 0.375583 +2628, -0.915001, 0.056715, 0.138510, 0.374662 +2629, -0.915481, 0.056331, 0.137984, 0.373739 +2630, -0.915961, 0.055948, 0.137457, 0.372816 +2631, -0.916438, 0.055566, 0.136929, 0.371892 +2632, -0.916915, 0.055185, 0.136401, 0.370967 +2633, -0.917390, 0.054806, 0.135872, 0.370041 +2634, -0.917864, 0.054427, 0.135343, 0.369115 +2635, -0.918336, 0.054050, 0.134813, 0.368188 +2636, -0.918808, 0.053674, 0.134282, 0.367260 +2637, -0.919278, 0.053299, 0.133751, 0.366331 +2638, -0.919746, 0.052926, 0.133219, 0.365402 +2639, -0.920213, 0.052554, 0.132686, 0.364472 +2640, -0.920679, 0.052182, 0.132153, 0.363541 +2641, -0.921144, 0.051812, 0.131620, 0.362610 +2642, -0.921607, 0.051444, 0.131086, 0.361678 +2643, -0.922069, 0.051076, 0.130552, 0.360745 +2644, -0.922529, 0.050710, 0.130017, 0.359811 +2645, -0.922988, 0.050345, 0.129481, 0.358876 +2646, -0.923446, 0.049981, 0.128945, 0.357941 +2647, -0.923903, 0.049619, 0.128409, 0.357005 +2648, -0.924358, 0.049257, 0.127872, 0.356069 +2649, -0.924812, 0.048897, 0.127335, 0.355132 +2650, -0.925264, 0.048538, 0.126798, 0.354194 +2651, -0.925715, 0.048181, 0.126260, 0.353255 +2652, -0.926165, 0.047825, 0.125721, 0.352315 +2653, -0.926613, 0.047470, 0.125183, 0.351375 +2654, -0.927060, 0.047116, 0.124644, 0.350434 +2655, -0.927505, 0.046764, 0.124104, 0.349493 +2656, -0.927950, 0.046412, 0.123564, 0.348550 +2657, -0.928392, 0.046063, 0.123024, 0.347607 +2658, -0.928834, 0.045714, 0.122484, 0.346664 +2659, -0.929274, 0.045367, 0.121943, 0.345719 +2660, -0.929712, 0.045021, 0.121402, 0.344774 +2661, -0.930150, 0.044676, 0.120861, 0.343829 +2662, -0.930586, 0.044333, 0.120320, 0.342882 +2663, -0.931020, 0.043991, 0.119778, 0.341935 +2664, -0.931453, 0.043650, 0.119236, 0.340987 +2665, -0.931885, 0.043311, 0.118694, 0.340039 +2666, -0.932315, 0.042973, 0.118152, 0.339089 +2667, -0.932744, 0.042636, 0.117609, 0.338139 +2668, -0.933172, 0.042300, 0.117067, 0.337189 +2669, -0.933598, 0.041966, 0.116524, 0.336238 +2670, -0.934023, 0.041634, 0.115981, 0.335286 +2671, -0.934446, 0.041302, 0.115438, 0.334333 +2672, -0.934868, 0.040972, 0.114894, 0.333380 +2673, -0.935289, 0.040643, 0.114351, 0.332426 +2674, -0.935708, 0.040316, 0.113807, 0.331471 +2675, -0.936126, 0.039990, 0.113264, 0.330516 +2676, -0.936542, 0.039665, 0.112720, 0.329560 +2677, -0.936957, 0.039342, 0.112177, 0.328603 +2678, -0.937371, 0.039020, 0.111633, 0.327646 +2679, -0.937783, 0.038699, 0.111089, 0.326688 +2680, -0.938193, 0.038380, 0.110545, 0.325729 +2681, -0.938603, 0.038062, 0.110002, 0.324770 +2682, -0.939011, 0.037746, 0.109458, 0.323810 +2683, -0.939417, 0.037431, 0.108914, 0.322850 +2684, -0.939822, 0.037117, 0.108370, 0.321889 +2685, -0.940226, 0.036804, 0.107827, 0.320927 +2686, -0.940628, 0.036493, 0.107283, 0.319964 +2687, -0.941029, 0.036184, 0.106740, 0.319001 +2688, -0.941428, 0.035876, 0.106196, 0.318037 +2689, -0.941826, 0.035569, 0.105653, 0.317073 +2690, -0.942223, 0.035263, 0.105110, 0.316108 +2691, -0.942618, 0.034959, 0.104566, 0.315142 +2692, -0.943012, 0.034657, 0.104023, 0.314176 +2693, -0.943404, 0.034355, 0.103481, 0.313209 +2694, -0.943795, 0.034056, 0.102938, 0.312242 +2695, -0.944184, 0.033757, 0.102395, 0.311274 +2696, -0.944572, 0.033460, 0.101853, 0.310305 +2697, -0.944959, 0.033165, 0.101311, 0.309336 +2698, -0.945344, 0.032870, 0.100769, 0.308366 +2699, -0.945728, 0.032578, 0.100228, 0.307395 +2700, -0.946110, 0.032286, 0.099686, 0.306424 +2701, -0.946491, 0.031996, 0.099145, 0.305452 +2702, -0.946871, 0.031708, 0.098604, 0.304480 +2703, -0.947249, 0.031420, 0.098064, 0.303507 +2704, -0.947625, 0.031135, 0.097523, 0.302533 +2705, -0.948000, 0.030850, 0.096983, 0.301559 +2706, -0.948374, 0.030568, 0.096444, 0.300584 +2707, -0.948746, 0.030286, 0.095904, 0.299609 +2708, -0.949117, 0.030006, 0.095365, 0.298633 +2709, -0.949487, 0.029727, 0.094827, 0.297657 +2710, -0.949855, 0.029450, 0.094289, 0.296680 +2711, -0.950221, 0.029175, 0.093751, 0.295702 +2712, -0.950586, 0.028900, 0.093213, 0.294724 +2713, -0.950950, 0.028627, 0.092676, 0.293745 +2714, -0.951312, 0.028356, 0.092140, 0.292765 +2715, -0.951673, 0.028086, 0.091604, 0.291785 +2716, -0.952032, 0.027817, 0.091068, 0.290805 +2717, -0.952390, 0.027550, 0.090533, 0.289824 +2718, -0.952747, 0.027284, 0.089998, 0.288842 +2719, -0.953102, 0.027020, 0.089464, 0.287860 +2720, -0.953455, 0.026757, 0.088930, 0.286877 +2721, -0.953807, 0.026496, 0.088396, 0.285894 +2722, -0.954158, 0.026236, 0.087864, 0.284910 +2723, -0.954507, 0.025977, 0.087332, 0.283926 +2724, -0.954855, 0.025720, 0.086800, 0.282941 +2725, -0.955202, 0.025465, 0.086269, 0.281955 +2726, -0.955547, 0.025211, 0.085738, 0.280969 +2727, -0.955890, 0.024958, 0.085208, 0.279983 +2728, -0.956232, 0.024706, 0.084679, 0.278996 +2729, -0.956573, 0.024457, 0.084151, 0.278008 +2730, -0.956912, 0.024208, 0.083623, 0.277020 +2731, -0.957250, 0.023961, 0.083095, 0.276031 +2732, -0.957587, 0.023716, 0.082568, 0.275042 +2733, -0.957921, 0.023472, 0.082042, 0.274052 +2734, -0.958255, 0.023229, 0.081517, 0.273062 +2735, -0.958587, 0.022988, 0.080992, 0.272071 +2736, -0.958918, 0.022748, 0.080468, 0.271080 +2737, -0.959247, 0.022510, 0.079945, 0.270088 +2738, -0.959575, 0.022273, 0.079423, 0.269096 +2739, -0.959901, 0.022037, 0.078901, 0.268103 +2740, -0.960226, 0.021803, 0.078380, 0.267110 +2741, -0.960549, 0.021571, 0.077860, 0.266116 +2742, -0.960871, 0.021340, 0.077340, 0.265122 +2743, -0.961192, 0.021110, 0.076822, 0.264127 +2744, -0.961511, 0.020882, 0.076304, 0.263132 +2745, -0.961829, 0.020655, 0.075787, 0.262136 +2746, -0.962145, 0.020430, 0.075271, 0.261140 +2747, -0.962460, 0.020206, 0.074755, 0.260143 +2748, -0.962773, 0.019983, 0.074241, 0.259146 +2749, -0.963085, 0.019762, 0.073727, 0.258148 +2750, -0.963396, 0.019542, 0.073215, 0.257150 +2751, -0.963705, 0.019324, 0.072703, 0.256151 +2752, -0.964013, 0.019108, 0.072192, 0.255152 +2753, -0.964319, 0.018892, 0.071682, 0.254153 +2754, -0.964624, 0.018678, 0.071173, 0.253153 +2755, -0.964927, 0.018466, 0.070665, 0.252152 +2756, -0.965229, 0.018255, 0.070158, 0.251151 +2757, -0.965530, 0.018045, 0.069652, 0.250150 +2758, -0.965829, 0.017837, 0.069147, 0.249148 +2759, -0.966127, 0.017631, 0.068643, 0.248146 +2760, -0.966423, 0.017425, 0.068139, 0.247143 +2761, -0.966718, 0.017221, 0.067637, 0.246140 +2762, -0.967012, 0.017019, 0.067136, 0.245136 +2763, -0.967304, 0.016818, 0.066636, 0.244132 +2764, -0.967594, 0.016618, 0.066137, 0.243127 +2765, -0.967884, 0.016420, 0.065639, 0.242122 +2766, -0.968171, 0.016223, 0.065143, 0.241117 +2767, -0.968458, 0.016028, 0.064647, 0.240111 +2768, -0.968743, 0.015834, 0.064152, 0.239105 +2769, -0.969026, 0.015642, 0.063659, 0.238098 +2770, -0.969309, 0.015450, 0.063166, 0.237091 +2771, -0.969589, 0.015261, 0.062675, 0.236084 +2772, -0.969869, 0.015072, 0.062185, 0.235076 +2773, -0.970147, 0.014885, 0.061696, 0.234067 +2774, -0.970423, 0.014700, 0.061209, 0.233059 +2775, -0.970698, 0.014516, 0.060722, 0.232049 +2776, -0.970972, 0.014333, 0.060237, 0.231040 +2777, -0.971244, 0.014152, 0.059753, 0.230030 +2778, -0.971515, 0.013972, 0.059270, 0.229020 +2779, -0.971785, 0.013793, 0.058788, 0.228009 +2780, -0.972053, 0.013616, 0.058308, 0.226998 +2781, -0.972320, 0.013441, 0.057829, 0.225986 +2782, -0.972585, 0.013266, 0.057351, 0.224974 +2783, -0.972849, 0.013093, 0.056874, 0.223962 +2784, -0.973111, 0.012922, 0.056399, 0.222949 +2785, -0.973373, 0.012751, 0.055925, 0.221936 +2786, -0.973632, 0.012583, 0.055453, 0.220923 +2787, -0.973891, 0.012415, 0.054981, 0.219909 +2788, -0.974148, 0.012249, 0.054511, 0.218895 +2789, -0.974403, 0.012084, 0.054043, 0.217880 +2790, -0.974657, 0.011921, 0.053576, 0.216865 +2791, -0.974910, 0.011759, 0.053110, 0.215850 +2792, -0.975162, 0.011598, 0.052645, 0.214834 +2793, -0.975412, 0.011439, 0.052182, 0.213818 +2794, -0.975660, 0.011281, 0.051721, 0.212802 +2795, -0.975908, 0.011124, 0.051261, 0.211785 +2796, -0.976154, 0.010969, 0.050802, 0.210768 +2797, -0.976398, 0.010815, 0.050344, 0.209750 +2798, -0.976641, 0.010662, 0.049889, 0.208732 +2799, -0.976883, 0.010511, 0.049434, 0.207714 +2800, -0.977124, 0.010361, 0.048981, 0.206696 +2801, -0.977363, 0.010213, 0.048530, 0.205677 +2802, -0.977600, 0.010065, 0.048080, 0.204658 +2803, -0.977837, 0.009919, 0.047632, 0.203638 +2804, -0.978072, 0.009775, 0.047185, 0.202618 +2805, -0.978305, 0.009632, 0.046739, 0.201598 +2806, -0.978537, 0.009490, 0.046295, 0.200578 +2807, -0.978768, 0.009349, 0.045853, 0.199557 +2808, -0.978998, 0.009209, 0.045413, 0.198536 +2809, -0.979226, 0.009071, 0.044973, 0.197514 +2810, -0.979453, 0.008935, 0.044536, 0.196492 +2811, -0.979678, 0.008799, 0.044100, 0.195470 +2812, -0.979902, 0.008665, 0.043666, 0.194448 +2813, -0.980125, 0.008532, 0.043233, 0.193425 +2814, -0.980346, 0.008400, 0.042802, 0.192402 +2815, -0.980566, 0.008270, 0.042373, 0.191379 +2816, -0.980785, 0.008141, 0.041945, 0.190355 +2817, -0.981002, 0.008013, 0.041519, 0.189331 +2818, -0.981218, 0.007886, 0.041094, 0.188307 +2819, -0.981433, 0.007761, 0.040671, 0.187282 +2820, -0.981646, 0.007637, 0.040250, 0.186257 +2821, -0.981858, 0.007514, 0.039831, 0.185232 +2822, -0.982069, 0.007393, 0.039413, 0.184207 +2823, -0.982278, 0.007272, 0.038998, 0.183181 +2824, -0.982486, 0.007153, 0.038583, 0.182155 +2825, -0.982693, 0.007036, 0.038171, 0.181129 +2826, -0.982898, 0.006919, 0.037760, 0.180102 +2827, -0.983103, 0.006804, 0.037351, 0.179076 +2828, -0.983305, 0.006690, 0.036944, 0.178048 +2829, -0.983507, 0.006577, 0.036539, 0.177021 +2830, -0.983707, 0.006465, 0.036135, 0.175993 +2831, -0.983905, 0.006354, 0.035734, 0.174965 +2832, -0.984103, 0.006245, 0.035334, 0.173937 +2833, -0.984299, 0.006137, 0.034935, 0.172909 +2834, -0.984494, 0.006030, 0.034539, 0.171880 +2835, -0.984687, 0.005924, 0.034145, 0.170851 +2836, -0.984879, 0.005820, 0.033752, 0.169822 +2837, -0.985070, 0.005717, 0.033361, 0.168792 +2838, -0.985260, 0.005614, 0.032973, 0.167763 +2839, -0.985448, 0.005513, 0.032586, 0.166733 +2840, -0.985635, 0.005413, 0.032201, 0.165702 +2841, -0.985821, 0.005315, 0.031817, 0.164672 +2842, -0.986005, 0.005217, 0.031436, 0.163641 +2843, -0.986188, 0.005121, 0.031057, 0.162610 +2844, -0.986370, 0.005026, 0.030679, 0.161579 +2845, -0.986550, 0.004932, 0.030304, 0.160548 +2846, -0.986730, 0.004839, 0.029930, 0.159516 +2847, -0.986908, 0.004747, 0.029559, 0.158484 +2848, -0.987084, 0.004656, 0.029189, 0.157452 +2849, -0.987260, 0.004566, 0.028821, 0.156420 +2850, -0.987434, 0.004478, 0.028456, 0.155387 +2851, -0.987606, 0.004391, 0.028092, 0.154354 +2852, -0.987778, 0.004304, 0.027730, 0.153321 +2853, -0.987948, 0.004219, 0.027371, 0.152288 +2854, -0.988117, 0.004135, 0.027013, 0.151254 +2855, -0.988285, 0.004052, 0.026657, 0.150221 +2856, -0.988451, 0.003970, 0.026304, 0.149187 +2857, -0.988616, 0.003889, 0.025952, 0.148153 +2858, -0.988780, 0.003809, 0.025603, 0.147118 +2859, -0.988943, 0.003731, 0.025255, 0.146084 +2860, -0.989104, 0.003653, 0.024910, 0.145049 +2861, -0.989264, 0.003576, 0.024567, 0.144014 +2862, -0.989423, 0.003501, 0.024226, 0.142979 +2863, -0.989581, 0.003426, 0.023886, 0.141944 +2864, -0.989737, 0.003353, 0.023549, 0.140908 +2865, -0.989892, 0.003280, 0.023214, 0.139872 +2866, -0.990046, 0.003209, 0.022882, 0.138836 +2867, -0.990198, 0.003138, 0.022551, 0.137800 +2868, -0.990350, 0.003069, 0.022223, 0.136764 +2869, -0.990500, 0.003000, 0.021896, 0.135727 +2870, -0.990649, 0.002933, 0.021572, 0.134691 +2871, -0.990796, 0.002867, 0.021250, 0.133654 +2872, -0.990942, 0.002801, 0.020930, 0.132617 +2873, -0.991088, 0.002737, 0.020612, 0.131580 +2874, -0.991231, 0.002673, 0.020297, 0.130542 +2875, -0.991374, 0.002610, 0.019983, 0.129505 +2876, -0.991515, 0.002549, 0.019672, 0.128467 +2877, -0.991656, 0.002488, 0.019363, 0.127429 +2878, -0.991795, 0.002428, 0.019057, 0.126391 +2879, -0.991932, 0.002370, 0.018752, 0.125352 +2880, -0.992069, 0.002312, 0.018450, 0.124314 +2881, -0.992204, 0.002255, 0.018150, 0.123275 +2882, -0.992338, 0.002199, 0.017852, 0.122237 +2883, -0.992471, 0.002144, 0.017556, 0.121198 +2884, -0.992602, 0.002090, 0.017263, 0.120159 +2885, -0.992733, 0.002036, 0.016972, 0.119119 +2886, -0.992862, 0.001984, 0.016683, 0.118080 +2887, -0.992990, 0.001933, 0.016397, 0.117040 +2888, -0.993117, 0.001882, 0.016113, 0.116001 +2889, -0.993242, 0.001832, 0.015831, 0.114961 +2890, -0.993367, 0.001783, 0.015551, 0.113921 +2891, -0.993490, 0.001735, 0.015274, 0.112881 +2892, -0.993612, 0.001688, 0.014999, 0.111840 +2893, -0.993732, 0.001642, 0.014726, 0.110800 +2894, -0.993852, 0.001596, 0.014456, 0.109759 +2895, -0.993970, 0.001552, 0.014188, 0.108718 +2896, -0.994087, 0.001508, 0.013922, 0.107678 +2897, -0.994203, 0.001465, 0.013659, 0.106637 +2898, -0.994318, 0.001423, 0.013398, 0.105595 +2899, -0.994431, 0.001381, 0.013139, 0.104554 +2900, -0.994544, 0.001341, 0.012883, 0.103513 +2901, -0.994655, 0.001301, 0.012629, 0.102471 +2902, -0.994765, 0.001262, 0.012377, 0.101429 +2903, -0.994874, 0.001224, 0.012128, 0.100388 +2904, -0.994981, 0.001186, 0.011881, 0.099346 +2905, -0.995088, 0.001150, 0.011637, 0.098304 +2906, -0.995193, 0.001114, 0.011395, 0.097261 +2907, -0.995297, 0.001078, 0.011155, 0.096219 +2908, -0.995400, 0.001044, 0.010918, 0.095177 +2909, -0.995502, 0.001010, 0.010683, 0.094134 +2910, -0.995602, 0.000977, 0.010451, 0.093092 +2911, -0.995702, 0.000945, 0.010221, 0.092049 +2912, -0.995800, 0.000913, 0.009994, 0.091006 +2913, -0.995897, 0.000882, 0.009769, 0.089963 +2914, -0.995993, 0.000852, 0.009546, 0.088920 +2915, -0.996087, 0.000823, 0.009326, 0.087877 +2916, -0.996181, 0.000794, 0.009108, 0.086833 +2917, -0.996273, 0.000766, 0.008893, 0.085790 +2918, -0.996364, 0.000738, 0.008681, 0.084746 +2919, -0.996455, 0.000712, 0.008470, 0.083703 +2920, -0.996543, 0.000685, 0.008263, 0.082659 +2921, -0.996631, 0.000660, 0.008057, 0.081615 +2922, -0.996718, 0.000635, 0.007854, 0.080571 +2923, -0.996803, 0.000611, 0.007654, 0.079527 +2924, -0.996887, 0.000587, 0.007456, 0.078483 +2925, -0.996971, 0.000564, 0.007261, 0.077439 +2926, -0.997052, 0.000542, 0.007068, 0.076394 +2927, -0.997133, 0.000520, 0.006878, 0.075350 +2928, -0.997213, 0.000498, 0.006690, 0.074306 +2929, -0.997291, 0.000478, 0.006505, 0.073261 +2930, -0.997369, 0.000458, 0.006322, 0.072216 +2931, -0.997445, 0.000438, 0.006142, 0.071172 +2932, -0.997520, 0.000419, 0.005964, 0.070127 +2933, -0.997594, 0.000401, 0.005789, 0.069082 +2934, -0.997667, 0.000383, 0.005616, 0.068037 +2935, -0.997739, 0.000366, 0.005446, 0.066992 +2936, -0.997809, 0.000349, 0.005279, 0.065947 +2937, -0.997879, 0.000333, 0.005114, 0.064901 +2938, -0.997947, 0.000317, 0.004951, 0.063856 +2939, -0.998014, 0.000302, 0.004792, 0.062811 +2940, -0.998080, 0.000287, 0.004634, 0.061765 +2941, -0.998145, 0.000273, 0.004480, 0.060720 +2942, -0.998208, 0.000259, 0.004327, 0.059674 +2943, -0.998271, 0.000245, 0.004178, 0.058628 +2944, -0.998333, 0.000232, 0.004031, 0.057583 +2945, -0.998393, 0.000220, 0.003887, 0.056537 +2946, -0.998452, 0.000208, 0.003745, 0.055491 +2947, -0.998510, 0.000197, 0.003605, 0.054445 +2948, -0.998567, 0.000186, 0.003469, 0.053399 +2949, -0.998623, 0.000175, 0.003335, 0.052353 +2950, -0.998678, 0.000165, 0.003203, 0.051307 +2951, -0.998731, 0.000155, 0.003075, 0.050261 +2952, -0.998784, 0.000145, 0.002948, 0.049215 +2953, -0.998835, 0.000136, 0.002825, 0.048168 +2954, -0.998885, 0.000128, 0.002704, 0.047122 +2955, -0.998935, 0.000119, 0.002585, 0.046076 +2956, -0.998983, 0.000111, 0.002470, 0.045029 +2957, -0.999030, 0.000104, 0.002357, 0.043983 +2958, -0.999075, 0.000097, 0.002246, 0.042936 +2959, -0.999120, 0.000090, 0.002138, 0.041890 +2960, -0.999164, 0.000083, 0.002033, 0.040843 +2961, -0.999206, 0.000077, 0.001930, 0.039796 +2962, -0.999247, 0.000071, 0.001830, 0.038749 +2963, -0.999287, 0.000065, 0.001733, 0.037703 +2964, -0.999327, 0.000060, 0.001638, 0.036656 +2965, -0.999365, 0.000055, 0.001546, 0.035609 +2966, -0.999401, 0.000050, 0.001457, 0.034562 +2967, -0.999437, 0.000046, 0.001370, 0.033515 +2968, -0.999472, 0.000042, 0.001286, 0.032468 +2969, -0.999506, 0.000038, 0.001204, 0.031421 +2970, -0.999538, 0.000034, 0.001126, 0.030374 +2971, -0.999569, 0.000031, 0.001049, 0.029327 +2972, -0.999600, 0.000028, 0.000976, 0.028280 +2973, -0.999629, 0.000025, 0.000905, 0.027233 +2974, -0.999657, 0.000022, 0.000837, 0.026186 +2975, -0.999684, 0.000019, 0.000771, 0.025138 +2976, -0.999710, 0.000017, 0.000708, 0.024091 +2977, -0.999734, 0.000015, 0.000648, 0.023044 +2978, -0.999758, 0.000013, 0.000591, 0.021997 +2979, -0.999780, 0.000011, 0.000536, 0.020949 +2980, -0.999802, 0.000010, 0.000484, 0.019902 +2981, -0.999822, 0.000008, 0.000434, 0.018855 +2982, -0.999841, 0.000007, 0.000387, 0.017807 +2983, -0.999859, 0.000006, 0.000343, 0.016760 +2984, -0.999877, 0.000005, 0.000302, 0.015713 +2985, -0.999892, 0.000004, 0.000263, 0.014665 +2986, -0.999907, 0.000003, 0.000226, 0.013618 +2987, -0.999921, 0.000002, 0.000193, 0.012570 +2988, -0.999934, 0.000002, 0.000162, 0.011523 +2989, -0.999945, 0.000001, 0.000134, 0.010475 +2990, -0.999956, 0.000001, 0.000109, 0.009428 +2991, -0.999965, 0.000001, 0.000086, 0.008380 +2992, -0.999973, 0.000000, 0.000066, 0.007333 +2993, -0.999980, 0.000000, 0.000048, 0.006285 +2994, -0.999986, 0.000000, 0.000034, 0.005238 +2995, -0.999991, 0.000000, 0.000021, 0.004190 +2996, -0.999995, 0.000000, 0.000012, 0.003143 +2997, -0.999998, 0.000000, 0.000005, 0.002095 +2998, -0.999999, 0.000000, 0.000001, 0.001048 +2999, -1.000000, 0.000000, 0.000000, 0.000000 diff --git a/scripts/trajectories/const000.csv b/scripts/trajectories/const000.csv new file mode 100644 index 0000000000..4d5b759074 --- /dev/null +++ b/scripts/trajectories/const000.csv @@ -0,0 +1,4 @@ +0,1.000000,0.000000,0.000000,0.000000 +1,1.000000,0.000000,0.000000,0.000000 +2,1.000000,0.000000,0.000000,0.000000 +3,1.000000,0.000000,0.000000,0.000000 \ No newline at end of file diff --git a/scripts/trajectories/const030.csv b/scripts/trajectories/const030.csv new file mode 100644 index 0000000000..3f69e7a4de --- /dev/null +++ b/scripts/trajectories/const030.csv @@ -0,0 +1,4 @@ +0, 0.965926, 0.000000, 0.000000, 0.258819 +1, 0.965926, 0.000000, 0.000000, 0.258819 +2, 0.965926, 0.000000, 0.000000, 0.258819 +3, 0.965926, 0.000000, 0.000000, 0.258819 diff --git a/scripts/trajectories/const090.csv b/scripts/trajectories/const090.csv new file mode 100644 index 0000000000..a4ad541af8 --- /dev/null +++ b/scripts/trajectories/const090.csv @@ -0,0 +1,4 @@ +0, 0.707107, 0.000000, 0.000000, 0.707107 +1, 0.707107, 0.000000, 0.000000, 0.707107 +2, 0.707107, 0.000000, 0.000000, 0.707107 +3, 0.707107, 0.000000, 0.000000, 0.707107 diff --git a/scripts/trajectories/const120.csv b/scripts/trajectories/const120.csv new file mode 100644 index 0000000000..1223155235 --- /dev/null +++ b/scripts/trajectories/const120.csv @@ -0,0 +1,4 @@ +0,0.500000, 0.000000, 0.000000, 0.866025 +1,0.500000, 0.000000, 0.000000, 0.866025 +2,0.500000, 0.000000, 0.000000, 0.866025 +3,0.500000, 0.000000, 0.000000, 0.866025 diff --git a/scripts/trajectories/const180.csv b/scripts/trajectories/const180.csv new file mode 100644 index 0000000000..2726f9792d --- /dev/null +++ b/scripts/trajectories/const180.csv @@ -0,0 +1,4 @@ +0, 0.000000, 0.000000, 0.000000, 1.000000 +1, 0.000000, 0.000000, 0.000000, 1.000000 +2, 0.000000, 0.000000, 0.000000, 1.000000 +3, 0.000000, 0.000000, 0.000000, 1.000000 diff --git a/scripts/trajectories/const240.csv b/scripts/trajectories/const240.csv new file mode 100644 index 0000000000..334cc081ab --- /dev/null +++ b/scripts/trajectories/const240.csv @@ -0,0 +1,4 @@ +0,-0.500000,-0.000000,0.000000,0.866025 +1,-0.500000,-0.000000,0.000000,0.866025 +2,-0.500000,-0.000000,0.000000,0.866025 +3,-0.500000,-0.000000,0.000000,0.866025 \ No newline at end of file diff --git a/scripts/trajectories/const250.csv b/scripts/trajectories/const250.csv new file mode 100644 index 0000000000..36988c3104 --- /dev/null +++ b/scripts/trajectories/const250.csv @@ -0,0 +1,4 @@ +0,-0.573576, -0.000000, 0.000000, 0.819152 +1,-0.573576, -0.000000, 0.000000, 0.819152 +2,-0.573576, -0.000000, 0.000000, 0.819152 +3,-0.573576, -0.000000, 0.000000, 0.819152 \ No newline at end of file diff --git a/scripts/trajectories/const270.csv b/scripts/trajectories/const270.csv new file mode 100644 index 0000000000..b514025192 --- /dev/null +++ b/scripts/trajectories/const270.csv @@ -0,0 +1,4 @@ +0,-0.707107, -0.000000, 0.000000, 0.707107 +1,-0.707107, -0.000000, 0.000000, 0.707107 +2,-0.707107, -0.000000, 0.000000, 0.707107 +3,-0.707107, -0.000000, 0.000000, 0.707107 \ No newline at end of file diff --git a/scripts/trajectories/const320.csv b/scripts/trajectories/const320.csv new file mode 100644 index 0000000000..2410a66225 --- /dev/null +++ b/scripts/trajectories/const320.csv @@ -0,0 +1,4 @@ +0,-0.939693, -0.000000, 0.000000, 0.342020 +1,-0.939693, -0.000000, 0.000000, 0.342020 +2,-0.939693, -0.000000, 0.000000, 0.342020 +3,-0.939693, -0.000000, 0.000000, 0.342020 \ No newline at end of file diff --git a/scripts/trajectories/full-circle-15s.csv b/scripts/trajectories/full-circle-15s.csv new file mode 100644 index 0000000000..692a4649fb --- /dev/null +++ b/scripts/trajectories/full-circle-15s.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 0.999999, 0.000000, 0.000000, 0.001048 +2, 0.999998, 0.000000, 0.000000, 0.002095 +3, 0.999995, 0.000000, 0.000000, 0.003143 +4, 0.999991, 0.000000, 0.000000, 0.004190 +5, 0.999986, 0.000000, 0.000000, 0.005238 +6, 0.999980, 0.000000, 0.000000, 0.006285 +7, 0.999973, 0.000000, 0.000000, 0.007333 +8, 0.999965, 0.000000, 0.000000, 0.008380 +9, 0.999956, 0.000000, 0.000000, 0.009428 +10, 0.999945, 0.000000, 0.000000, 0.010475 +11, 0.999934, 0.000000, 0.000000, 0.011523 +12, 0.999921, 0.000000, 0.000000, 0.012570 +13, 0.999907, 0.000000, 0.000000, 0.013618 +14, 0.999892, 0.000000, 0.000000, 0.014665 +15, 0.999877, 0.000000, 0.000000, 0.015713 +16, 0.999860, 0.000000, 0.000000, 0.016760 +17, 0.999841, 0.000000, 0.000000, 0.017807 +18, 0.999822, 0.000000, 0.000000, 0.018855 +19, 0.999802, 0.000000, 0.000000, 0.019902 +20, 0.999781, 0.000000, 0.000000, 0.020949 +21, 0.999758, 0.000000, 0.000000, 0.021997 +22, 0.999734, 0.000000, 0.000000, 0.023044 +23, 0.999710, 0.000000, 0.000000, 0.024091 +24, 0.999684, 0.000000, 0.000000, 0.025138 +25, 0.999657, 0.000000, 0.000000, 0.026186 +26, 0.999629, 0.000000, 0.000000, 0.027233 +27, 0.999600, 0.000000, 0.000000, 0.028280 +28, 0.999570, 0.000000, 0.000000, 0.029327 +29, 0.999539, 0.000000, 0.000000, 0.030374 +30, 0.999506, 0.000000, 0.000000, 0.031421 +31, 0.999473, 0.000000, 0.000000, 0.032468 +32, 0.999438, 0.000000, 0.000000, 0.033515 +33, 0.999403, 0.000000, 0.000000, 0.034562 +34, 0.999366, 0.000000, 0.000000, 0.035609 +35, 0.999328, 0.000000, 0.000000, 0.036656 +36, 0.999289, 0.000000, 0.000000, 0.037703 +37, 0.999249, 0.000000, 0.000000, 0.038750 +38, 0.999208, 0.000000, 0.000000, 0.039796 +39, 0.999166, 0.000000, 0.000000, 0.040843 +40, 0.999122, 0.000000, 0.000000, 0.041890 +41, 0.999078, 0.000000, 0.000000, 0.042936 +42, 0.999032, 0.000000, 0.000000, 0.043983 +43, 0.998986, 0.000000, 0.000000, 0.045029 +44, 0.998938, 0.000000, 0.000000, 0.046076 +45, 0.998889, 0.000000, 0.000000, 0.047122 +46, 0.998839, 0.000000, 0.000000, 0.048169 +47, 0.998788, 0.000000, 0.000000, 0.049215 +48, 0.998736, 0.000000, 0.000000, 0.050261 +49, 0.998683, 0.000000, 0.000000, 0.051307 +50, 0.998629, 0.000000, 0.000000, 0.052353 +51, 0.998573, 0.000000, 0.000000, 0.053399 +52, 0.998517, 0.000000, 0.000000, 0.054445 +53, 0.998459, 0.000000, 0.000000, 0.055491 +54, 0.998400, 0.000000, 0.000000, 0.056537 +55, 0.998341, 0.000000, 0.000000, 0.057583 +56, 0.998280, 0.000000, 0.000000, 0.058629 +57, 0.998218, 0.000000, 0.000000, 0.059675 +58, 0.998155, 0.000000, 0.000000, 0.060720 +59, 0.998091, 0.000000, 0.000000, 0.061766 +60, 0.998025, 0.000000, 0.000000, 0.062811 +61, 0.997959, 0.000000, 0.000000, 0.063857 +62, 0.997892, 0.000000, 0.000000, 0.064902 +63, 0.997823, 0.000000, 0.000000, 0.065948 +64, 0.997753, 0.000000, 0.000000, 0.066993 +65, 0.997683, 0.000000, 0.000000, 0.068038 +66, 0.997611, 0.000000, 0.000000, 0.069083 +67, 0.997538, 0.000000, 0.000000, 0.070128 +68, 0.997464, 0.000000, 0.000000, 0.071173 +69, 0.997389, 0.000000, 0.000000, 0.072218 +70, 0.997313, 0.000000, 0.000000, 0.073263 +71, 0.997235, 0.000000, 0.000000, 0.074307 +72, 0.997157, 0.000000, 0.000000, 0.075352 +73, 0.997078, 0.000000, 0.000000, 0.076396 +74, 0.996997, 0.000000, 0.000000, 0.077441 +75, 0.996915, 0.000000, 0.000000, 0.078485 +76, 0.996833, 0.000000, 0.000000, 0.079529 +77, 0.996749, 0.000000, 0.000000, 0.080574 +78, 0.996664, 0.000000, 0.000000, 0.081618 +79, 0.996578, 0.000000, 0.000000, 0.082662 +80, 0.996491, 0.000000, 0.000000, 0.083706 +81, 0.996402, 0.000000, 0.000000, 0.084750 +82, 0.996313, 0.000000, 0.000000, 0.085793 +83, 0.996223, 0.000000, 0.000000, 0.086837 +84, 0.996131, 0.000000, 0.000000, 0.087880 +85, 0.996038, 0.000000, 0.000000, 0.088924 +86, 0.995945, 0.000000, 0.000000, 0.089967 +87, 0.995850, 0.000000, 0.000000, 0.091010 +88, 0.995754, 0.000000, 0.000000, 0.092054 +89, 0.995657, 0.000000, 0.000000, 0.093097 +90, 0.995559, 0.000000, 0.000000, 0.094140 +91, 0.995460, 0.000000, 0.000000, 0.095182 +92, 0.995360, 0.000000, 0.000000, 0.096225 +93, 0.995258, 0.000000, 0.000000, 0.097268 +94, 0.995156, 0.000000, 0.000000, 0.098310 +95, 0.995052, 0.000000, 0.000000, 0.099353 +96, 0.994948, 0.000000, 0.000000, 0.100395 +97, 0.994842, 0.000000, 0.000000, 0.101437 +98, 0.994735, 0.000000, 0.000000, 0.102479 +99, 0.994627, 0.000000, 0.000000, 0.103521 +100, 0.994518, 0.000000, 0.000000, 0.104563 +101, 0.994408, 0.000000, 0.000000, 0.105605 +102, 0.994297, 0.000000, 0.000000, 0.106647 +103, 0.994185, 0.000000, 0.000000, 0.107688 +104, 0.994071, 0.000000, 0.000000, 0.108729 +105, 0.993957, 0.000000, 0.000000, 0.109771 +106, 0.993841, 0.000000, 0.000000, 0.110812 +107, 0.993725, 0.000000, 0.000000, 0.111853 +108, 0.993607, 0.000000, 0.000000, 0.112894 +109, 0.993488, 0.000000, 0.000000, 0.113935 +110, 0.993368, 0.000000, 0.000000, 0.114975 +111, 0.993247, 0.000000, 0.000000, 0.116016 +112, 0.993125, 0.000000, 0.000000, 0.117056 +113, 0.993002, 0.000000, 0.000000, 0.118097 +114, 0.992878, 0.000000, 0.000000, 0.119137 +115, 0.992753, 0.000000, 0.000000, 0.120177 +116, 0.992626, 0.000000, 0.000000, 0.121217 +117, 0.992499, 0.000000, 0.000000, 0.122256 +118, 0.992370, 0.000000, 0.000000, 0.123296 +119, 0.992240, 0.000000, 0.000000, 0.124335 +120, 0.992109, 0.000000, 0.000000, 0.125375 +121, 0.991978, 0.000000, 0.000000, 0.126414 +122, 0.991845, 0.000000, 0.000000, 0.127453 +123, 0.991711, 0.000000, 0.000000, 0.128492 +124, 0.991575, 0.000000, 0.000000, 0.129531 +125, 0.991439, 0.000000, 0.000000, 0.130569 +126, 0.991302, 0.000000, 0.000000, 0.131608 +127, 0.991163, 0.000000, 0.000000, 0.132646 +128, 0.991024, 0.000000, 0.000000, 0.133685 +129, 0.990883, 0.000000, 0.000000, 0.134723 +130, 0.990742, 0.000000, 0.000000, 0.135761 +131, 0.990599, 0.000000, 0.000000, 0.136798 +132, 0.990455, 0.000000, 0.000000, 0.137836 +133, 0.990310, 0.000000, 0.000000, 0.138873 +134, 0.990164, 0.000000, 0.000000, 0.139911 +135, 0.990017, 0.000000, 0.000000, 0.140948 +136, 0.989869, 0.000000, 0.000000, 0.141985 +137, 0.989720, 0.000000, 0.000000, 0.143022 +138, 0.989569, 0.000000, 0.000000, 0.144058 +139, 0.989418, 0.000000, 0.000000, 0.145095 +140, 0.989265, 0.000000, 0.000000, 0.146131 +141, 0.989112, 0.000000, 0.000000, 0.147168 +142, 0.988957, 0.000000, 0.000000, 0.148204 +143, 0.988801, 0.000000, 0.000000, 0.149240 +144, 0.988644, 0.000000, 0.000000, 0.150275 +145, 0.988486, 0.000000, 0.000000, 0.151311 +146, 0.988327, 0.000000, 0.000000, 0.152346 +147, 0.988167, 0.000000, 0.000000, 0.153382 +148, 0.988006, 0.000000, 0.000000, 0.154417 +149, 0.987844, 0.000000, 0.000000, 0.155451 +150, 0.987680, 0.000000, 0.000000, 0.156486 +151, 0.987516, 0.000000, 0.000000, 0.157521 +152, 0.987350, 0.000000, 0.000000, 0.158555 +153, 0.987183, 0.000000, 0.000000, 0.159589 +154, 0.987016, 0.000000, 0.000000, 0.160623 +155, 0.986847, 0.000000, 0.000000, 0.161657 +156, 0.986677, 0.000000, 0.000000, 0.162691 +157, 0.986506, 0.000000, 0.000000, 0.163724 +158, 0.986334, 0.000000, 0.000000, 0.164758 +159, 0.986161, 0.000000, 0.000000, 0.165791 +160, 0.985987, 0.000000, 0.000000, 0.166824 +161, 0.985811, 0.000000, 0.000000, 0.167857 +162, 0.985635, 0.000000, 0.000000, 0.168889 +163, 0.985458, 0.000000, 0.000000, 0.169922 +164, 0.985279, 0.000000, 0.000000, 0.170954 +165, 0.985099, 0.000000, 0.000000, 0.171986 +166, 0.984919, 0.000000, 0.000000, 0.173018 +167, 0.984737, 0.000000, 0.000000, 0.174049 +168, 0.984554, 0.000000, 0.000000, 0.175081 +169, 0.984370, 0.000000, 0.000000, 0.176112 +170, 0.984185, 0.000000, 0.000000, 0.177143 +171, 0.983999, 0.000000, 0.000000, 0.178174 +172, 0.983812, 0.000000, 0.000000, 0.179205 +173, 0.983624, 0.000000, 0.000000, 0.180235 +174, 0.983434, 0.000000, 0.000000, 0.181266 +175, 0.983244, 0.000000, 0.000000, 0.182296 +176, 0.983052, 0.000000, 0.000000, 0.183326 +177, 0.982860, 0.000000, 0.000000, 0.184355 +178, 0.982666, 0.000000, 0.000000, 0.185385 +179, 0.982471, 0.000000, 0.000000, 0.186414 +180, 0.982275, 0.000000, 0.000000, 0.187443 +181, 0.982079, 0.000000, 0.000000, 0.188472 +182, 0.981881, 0.000000, 0.000000, 0.189501 +183, 0.981682, 0.000000, 0.000000, 0.190529 +184, 0.981481, 0.000000, 0.000000, 0.191557 +185, 0.981280, 0.000000, 0.000000, 0.192585 +186, 0.981078, 0.000000, 0.000000, 0.193613 +187, 0.980875, 0.000000, 0.000000, 0.194641 +188, 0.980670, 0.000000, 0.000000, 0.195668 +189, 0.980465, 0.000000, 0.000000, 0.196695 +190, 0.980258, 0.000000, 0.000000, 0.197722 +191, 0.980050, 0.000000, 0.000000, 0.198749 +192, 0.979842, 0.000000, 0.000000, 0.199776 +193, 0.979632, 0.000000, 0.000000, 0.200802 +194, 0.979421, 0.000000, 0.000000, 0.201828 +195, 0.979209, 0.000000, 0.000000, 0.202854 +196, 0.978996, 0.000000, 0.000000, 0.203880 +197, 0.978782, 0.000000, 0.000000, 0.204905 +198, 0.978567, 0.000000, 0.000000, 0.205930 +199, 0.978350, 0.000000, 0.000000, 0.206955 +200, 0.978133, 0.000000, 0.000000, 0.207980 +201, 0.977915, 0.000000, 0.000000, 0.209005 +202, 0.977695, 0.000000, 0.000000, 0.210029 +203, 0.977475, 0.000000, 0.000000, 0.211053 +204, 0.977253, 0.000000, 0.000000, 0.212077 +205, 0.977030, 0.000000, 0.000000, 0.213100 +206, 0.976807, 0.000000, 0.000000, 0.214124 +207, 0.976582, 0.000000, 0.000000, 0.215147 +208, 0.976356, 0.000000, 0.000000, 0.216170 +209, 0.976129, 0.000000, 0.000000, 0.217192 +210, 0.975901, 0.000000, 0.000000, 0.218215 +211, 0.975672, 0.000000, 0.000000, 0.219237 +212, 0.975441, 0.000000, 0.000000, 0.220259 +213, 0.975210, 0.000000, 0.000000, 0.221281 +214, 0.974978, 0.000000, 0.000000, 0.222302 +215, 0.974744, 0.000000, 0.000000, 0.223323 +216, 0.974510, 0.000000, 0.000000, 0.224344 +217, 0.974274, 0.000000, 0.000000, 0.225365 +218, 0.974038, 0.000000, 0.000000, 0.226385 +219, 0.973800, 0.000000, 0.000000, 0.227406 +220, 0.973561, 0.000000, 0.000000, 0.228426 +221, 0.973322, 0.000000, 0.000000, 0.229445 +222, 0.973081, 0.000000, 0.000000, 0.230465 +223, 0.972839, 0.000000, 0.000000, 0.231484 +224, 0.972596, 0.000000, 0.000000, 0.232503 +225, 0.972352, 0.000000, 0.000000, 0.233522 +226, 0.972106, 0.000000, 0.000000, 0.234540 +227, 0.971860, 0.000000, 0.000000, 0.235558 +228, 0.971613, 0.000000, 0.000000, 0.236576 +229, 0.971365, 0.000000, 0.000000, 0.237594 +230, 0.971115, 0.000000, 0.000000, 0.238611 +231, 0.970865, 0.000000, 0.000000, 0.239629 +232, 0.970613, 0.000000, 0.000000, 0.240646 +233, 0.970360, 0.000000, 0.000000, 0.241662 +234, 0.970107, 0.000000, 0.000000, 0.242678 +235, 0.969852, 0.000000, 0.000000, 0.243695 +236, 0.969596, 0.000000, 0.000000, 0.244710 +237, 0.969339, 0.000000, 0.000000, 0.245726 +238, 0.969081, 0.000000, 0.000000, 0.246741 +239, 0.968822, 0.000000, 0.000000, 0.247756 +240, 0.968562, 0.000000, 0.000000, 0.248771 +241, 0.968301, 0.000000, 0.000000, 0.249786 +242, 0.968039, 0.000000, 0.000000, 0.250800 +243, 0.967776, 0.000000, 0.000000, 0.251814 +244, 0.967511, 0.000000, 0.000000, 0.252827 +245, 0.967246, 0.000000, 0.000000, 0.253841 +246, 0.966980, 0.000000, 0.000000, 0.254854 +247, 0.966712, 0.000000, 0.000000, 0.255867 +248, 0.966444, 0.000000, 0.000000, 0.256879 +249, 0.966174, 0.000000, 0.000000, 0.257891 +250, 0.965903, 0.000000, 0.000000, 0.258903 +251, 0.965631, 0.000000, 0.000000, 0.259915 +252, 0.965359, 0.000000, 0.000000, 0.260926 +253, 0.965085, 0.000000, 0.000000, 0.261938 +254, 0.964810, 0.000000, 0.000000, 0.262948 +255, 0.964534, 0.000000, 0.000000, 0.263959 +256, 0.964257, 0.000000, 0.000000, 0.264969 +257, 0.963979, 0.000000, 0.000000, 0.265979 +258, 0.963700, 0.000000, 0.000000, 0.266989 +259, 0.963419, 0.000000, 0.000000, 0.267998 +260, 0.963138, 0.000000, 0.000000, 0.269007 +261, 0.962856, 0.000000, 0.000000, 0.270016 +262, 0.962572, 0.000000, 0.000000, 0.271025 +263, 0.962288, 0.000000, 0.000000, 0.272033 +264, 0.962003, 0.000000, 0.000000, 0.273041 +265, 0.961716, 0.000000, 0.000000, 0.274048 +266, 0.961428, 0.000000, 0.000000, 0.275056 +267, 0.961140, 0.000000, 0.000000, 0.276062 +268, 0.960850, 0.000000, 0.000000, 0.277069 +269, 0.960559, 0.000000, 0.000000, 0.278076 +270, 0.960267, 0.000000, 0.000000, 0.279082 +271, 0.959975, 0.000000, 0.000000, 0.280087 +272, 0.959681, 0.000000, 0.000000, 0.281093 +273, 0.959386, 0.000000, 0.000000, 0.282098 +274, 0.959090, 0.000000, 0.000000, 0.283103 +275, 0.958792, 0.000000, 0.000000, 0.284107 +276, 0.958494, 0.000000, 0.000000, 0.285112 +277, 0.958195, 0.000000, 0.000000, 0.286116 +278, 0.957895, 0.000000, 0.000000, 0.287119 +279, 0.957594, 0.000000, 0.000000, 0.288122 +280, 0.957291, 0.000000, 0.000000, 0.289125 +281, 0.956988, 0.000000, 0.000000, 0.290128 +282, 0.956683, 0.000000, 0.000000, 0.291130 +283, 0.956378, 0.000000, 0.000000, 0.292132 +284, 0.956071, 0.000000, 0.000000, 0.293134 +285, 0.955764, 0.000000, 0.000000, 0.294135 +286, 0.955455, 0.000000, 0.000000, 0.295136 +287, 0.955145, 0.000000, 0.000000, 0.296137 +288, 0.954835, 0.000000, 0.000000, 0.297138 +289, 0.954523, 0.000000, 0.000000, 0.298138 +290, 0.954210, 0.000000, 0.000000, 0.299137 +291, 0.953896, 0.000000, 0.000000, 0.300137 +292, 0.953581, 0.000000, 0.000000, 0.301136 +293, 0.953265, 0.000000, 0.000000, 0.302135 +294, 0.952948, 0.000000, 0.000000, 0.303133 +295, 0.952630, 0.000000, 0.000000, 0.304131 +296, 0.952311, 0.000000, 0.000000, 0.305129 +297, 0.951991, 0.000000, 0.000000, 0.306126 +298, 0.951670, 0.000000, 0.000000, 0.307123 +299, 0.951347, 0.000000, 0.000000, 0.308120 +300, 0.951024, 0.000000, 0.000000, 0.309117 +301, 0.950700, 0.000000, 0.000000, 0.310113 +302, 0.950374, 0.000000, 0.000000, 0.311108 +303, 0.950048, 0.000000, 0.000000, 0.312104 +304, 0.949721, 0.000000, 0.000000, 0.313099 +305, 0.949392, 0.000000, 0.000000, 0.314094 +306, 0.949062, 0.000000, 0.000000, 0.315088 +307, 0.948732, 0.000000, 0.000000, 0.316082 +308, 0.948400, 0.000000, 0.000000, 0.317076 +309, 0.948068, 0.000000, 0.000000, 0.318069 +310, 0.947734, 0.000000, 0.000000, 0.319062 +311, 0.947399, 0.000000, 0.000000, 0.320055 +312, 0.947063, 0.000000, 0.000000, 0.321047 +313, 0.946727, 0.000000, 0.000000, 0.322039 +314, 0.946389, 0.000000, 0.000000, 0.323030 +315, 0.946050, 0.000000, 0.000000, 0.324021 +316, 0.945710, 0.000000, 0.000000, 0.325012 +317, 0.945369, 0.000000, 0.000000, 0.326003 +318, 0.945027, 0.000000, 0.000000, 0.326993 +319, 0.944684, 0.000000, 0.000000, 0.327983 +320, 0.944340, 0.000000, 0.000000, 0.328972 +321, 0.943994, 0.000000, 0.000000, 0.329961 +322, 0.943648, 0.000000, 0.000000, 0.330950 +323, 0.943301, 0.000000, 0.000000, 0.331938 +324, 0.942953, 0.000000, 0.000000, 0.332926 +325, 0.942604, 0.000000, 0.000000, 0.333914 +326, 0.942253, 0.000000, 0.000000, 0.334901 +327, 0.941902, 0.000000, 0.000000, 0.335888 +328, 0.941550, 0.000000, 0.000000, 0.336874 +329, 0.941196, 0.000000, 0.000000, 0.337861 +330, 0.940842, 0.000000, 0.000000, 0.338846 +331, 0.940486, 0.000000, 0.000000, 0.339832 +332, 0.940130, 0.000000, 0.000000, 0.340817 +333, 0.939772, 0.000000, 0.000000, 0.341801 +334, 0.939414, 0.000000, 0.000000, 0.342786 +335, 0.939054, 0.000000, 0.000000, 0.343770 +336, 0.938693, 0.000000, 0.000000, 0.344753 +337, 0.938332, 0.000000, 0.000000, 0.345736 +338, 0.937969, 0.000000, 0.000000, 0.346719 +339, 0.937605, 0.000000, 0.000000, 0.347701 +340, 0.937241, 0.000000, 0.000000, 0.348683 +341, 0.936875, 0.000000, 0.000000, 0.349665 +342, 0.936508, 0.000000, 0.000000, 0.350646 +343, 0.936140, 0.000000, 0.000000, 0.351627 +344, 0.935771, 0.000000, 0.000000, 0.352607 +345, 0.935401, 0.000000, 0.000000, 0.353588 +346, 0.935031, 0.000000, 0.000000, 0.354567 +347, 0.934659, 0.000000, 0.000000, 0.355547 +348, 0.934286, 0.000000, 0.000000, 0.356525 +349, 0.933912, 0.000000, 0.000000, 0.357504 +350, 0.933537, 0.000000, 0.000000, 0.358482 +351, 0.933161, 0.000000, 0.000000, 0.359460 +352, 0.932784, 0.000000, 0.000000, 0.360437 +353, 0.932405, 0.000000, 0.000000, 0.361414 +354, 0.932026, 0.000000, 0.000000, 0.362391 +355, 0.931646, 0.000000, 0.000000, 0.363367 +356, 0.931265, 0.000000, 0.000000, 0.364342 +357, 0.930883, 0.000000, 0.000000, 0.365318 +358, 0.930500, 0.000000, 0.000000, 0.366293 +359, 0.930115, 0.000000, 0.000000, 0.367267 +360, 0.929730, 0.000000, 0.000000, 0.368241 +361, 0.929344, 0.000000, 0.000000, 0.369215 +362, 0.928957, 0.000000, 0.000000, 0.370188 +363, 0.928568, 0.000000, 0.000000, 0.371161 +364, 0.928179, 0.000000, 0.000000, 0.372134 +365, 0.927789, 0.000000, 0.000000, 0.373106 +366, 0.927397, 0.000000, 0.000000, 0.374078 +367, 0.927005, 0.000000, 0.000000, 0.375049 +368, 0.926612, 0.000000, 0.000000, 0.376020 +369, 0.926217, 0.000000, 0.000000, 0.376990 +370, 0.925822, 0.000000, 0.000000, 0.377960 +371, 0.925425, 0.000000, 0.000000, 0.378930 +372, 0.925028, 0.000000, 0.000000, 0.379899 +373, 0.924629, 0.000000, 0.000000, 0.380868 +374, 0.924230, 0.000000, 0.000000, 0.381836 +375, 0.923829, 0.000000, 0.000000, 0.382804 +376, 0.923428, 0.000000, 0.000000, 0.383772 +377, 0.923025, 0.000000, 0.000000, 0.384739 +378, 0.922622, 0.000000, 0.000000, 0.385706 +379, 0.922217, 0.000000, 0.000000, 0.386672 +380, 0.921812, 0.000000, 0.000000, 0.387638 +381, 0.921405, 0.000000, 0.000000, 0.388603 +382, 0.920998, 0.000000, 0.000000, 0.389568 +383, 0.920589, 0.000000, 0.000000, 0.390533 +384, 0.920179, 0.000000, 0.000000, 0.391497 +385, 0.919769, 0.000000, 0.000000, 0.392461 +386, 0.919357, 0.000000, 0.000000, 0.393424 +387, 0.918944, 0.000000, 0.000000, 0.394387 +388, 0.918531, 0.000000, 0.000000, 0.395349 +389, 0.918116, 0.000000, 0.000000, 0.396311 +390, 0.917701, 0.000000, 0.000000, 0.397273 +391, 0.917284, 0.000000, 0.000000, 0.398234 +392, 0.916866, 0.000000, 0.000000, 0.399195 +393, 0.916448, 0.000000, 0.000000, 0.400155 +394, 0.916028, 0.000000, 0.000000, 0.401115 +395, 0.915607, 0.000000, 0.000000, 0.402074 +396, 0.915185, 0.000000, 0.000000, 0.403033 +397, 0.914763, 0.000000, 0.000000, 0.403991 +398, 0.914339, 0.000000, 0.000000, 0.404950 +399, 0.913914, 0.000000, 0.000000, 0.405907 +400, 0.913489, 0.000000, 0.000000, 0.406864 +401, 0.913062, 0.000000, 0.000000, 0.407821 +402, 0.912634, 0.000000, 0.000000, 0.408777 +403, 0.912206, 0.000000, 0.000000, 0.409733 +404, 0.911776, 0.000000, 0.000000, 0.410688 +405, 0.911345, 0.000000, 0.000000, 0.411643 +406, 0.910913, 0.000000, 0.000000, 0.412598 +407, 0.910481, 0.000000, 0.000000, 0.413552 +408, 0.910047, 0.000000, 0.000000, 0.414505 +409, 0.909612, 0.000000, 0.000000, 0.415458 +410, 0.909177, 0.000000, 0.000000, 0.416411 +411, 0.908740, 0.000000, 0.000000, 0.417363 +412, 0.908302, 0.000000, 0.000000, 0.418315 +413, 0.907863, 0.000000, 0.000000, 0.419266 +414, 0.907424, 0.000000, 0.000000, 0.420217 +415, 0.906983, 0.000000, 0.000000, 0.421167 +416, 0.906541, 0.000000, 0.000000, 0.422117 +417, 0.906099, 0.000000, 0.000000, 0.423067 +418, 0.905655, 0.000000, 0.000000, 0.424015 +419, 0.905210, 0.000000, 0.000000, 0.424964 +420, 0.904765, 0.000000, 0.000000, 0.425912 +421, 0.904318, 0.000000, 0.000000, 0.426860 +422, 0.903870, 0.000000, 0.000000, 0.427807 +423, 0.903422, 0.000000, 0.000000, 0.428753 +424, 0.902972, 0.000000, 0.000000, 0.429699 +425, 0.902521, 0.000000, 0.000000, 0.430645 +426, 0.902070, 0.000000, 0.000000, 0.431590 +427, 0.901617, 0.000000, 0.000000, 0.432535 +428, 0.901164, 0.000000, 0.000000, 0.433479 +429, 0.900709, 0.000000, 0.000000, 0.434423 +430, 0.900253, 0.000000, 0.000000, 0.435366 +431, 0.899797, 0.000000, 0.000000, 0.436309 +432, 0.899339, 0.000000, 0.000000, 0.437251 +433, 0.898881, 0.000000, 0.000000, 0.438193 +434, 0.898421, 0.000000, 0.000000, 0.439135 +435, 0.897961, 0.000000, 0.000000, 0.440076 +436, 0.897499, 0.000000, 0.000000, 0.441016 +437, 0.897037, 0.000000, 0.000000, 0.441956 +438, 0.896573, 0.000000, 0.000000, 0.442895 +439, 0.896109, 0.000000, 0.000000, 0.443834 +440, 0.895643, 0.000000, 0.000000, 0.444773 +441, 0.895177, 0.000000, 0.000000, 0.445711 +442, 0.894710, 0.000000, 0.000000, 0.446648 +443, 0.894241, 0.000000, 0.000000, 0.447585 +444, 0.893772, 0.000000, 0.000000, 0.448522 +445, 0.893302, 0.000000, 0.000000, 0.449458 +446, 0.892830, 0.000000, 0.000000, 0.450393 +447, 0.892358, 0.000000, 0.000000, 0.451328 +448, 0.891885, 0.000000, 0.000000, 0.452263 +449, 0.891410, 0.000000, 0.000000, 0.453197 +450, 0.890935, 0.000000, 0.000000, 0.454130 +451, 0.890459, 0.000000, 0.000000, 0.455064 +452, 0.889982, 0.000000, 0.000000, 0.455996 +453, 0.889504, 0.000000, 0.000000, 0.456928 +454, 0.889024, 0.000000, 0.000000, 0.457860 +455, 0.888544, 0.000000, 0.000000, 0.458791 +456, 0.888063, 0.000000, 0.000000, 0.459721 +457, 0.887581, 0.000000, 0.000000, 0.460651 +458, 0.887098, 0.000000, 0.000000, 0.461581 +459, 0.886614, 0.000000, 0.000000, 0.462510 +460, 0.886129, 0.000000, 0.000000, 0.463438 +461, 0.885643, 0.000000, 0.000000, 0.464366 +462, 0.885156, 0.000000, 0.000000, 0.465294 +463, 0.884668, 0.000000, 0.000000, 0.466221 +464, 0.884179, 0.000000, 0.000000, 0.467147 +465, 0.883690, 0.000000, 0.000000, 0.468073 +466, 0.883199, 0.000000, 0.000000, 0.468999 +467, 0.882707, 0.000000, 0.000000, 0.469924 +468, 0.882214, 0.000000, 0.000000, 0.470848 +469, 0.881721, 0.000000, 0.000000, 0.471772 +470, 0.881226, 0.000000, 0.000000, 0.472695 +471, 0.880730, 0.000000, 0.000000, 0.473618 +472, 0.880234, 0.000000, 0.000000, 0.474541 +473, 0.879736, 0.000000, 0.000000, 0.475462 +474, 0.879237, 0.000000, 0.000000, 0.476384 +475, 0.878738, 0.000000, 0.000000, 0.477305 +476, 0.878237, 0.000000, 0.000000, 0.478225 +477, 0.877736, 0.000000, 0.000000, 0.479145 +478, 0.877234, 0.000000, 0.000000, 0.480064 +479, 0.876730, 0.000000, 0.000000, 0.480982 +480, 0.876226, 0.000000, 0.000000, 0.481901 +481, 0.875721, 0.000000, 0.000000, 0.482818 +482, 0.875214, 0.000000, 0.000000, 0.483735 +483, 0.874707, 0.000000, 0.000000, 0.484652 +484, 0.874199, 0.000000, 0.000000, 0.485568 +485, 0.873690, 0.000000, 0.000000, 0.486483 +486, 0.873180, 0.000000, 0.000000, 0.487398 +487, 0.872669, 0.000000, 0.000000, 0.488313 +488, 0.872157, 0.000000, 0.000000, 0.489227 +489, 0.871644, 0.000000, 0.000000, 0.490140 +490, 0.871130, 0.000000, 0.000000, 0.491053 +491, 0.870615, 0.000000, 0.000000, 0.491965 +492, 0.870099, 0.000000, 0.000000, 0.492877 +493, 0.869582, 0.000000, 0.000000, 0.493788 +494, 0.869065, 0.000000, 0.000000, 0.494699 +495, 0.868546, 0.000000, 0.000000, 0.495609 +496, 0.868026, 0.000000, 0.000000, 0.496518 +497, 0.867506, 0.000000, 0.000000, 0.497427 +498, 0.866984, 0.000000, 0.000000, 0.498336 +499, 0.866462, 0.000000, 0.000000, 0.499244 +500, 0.865938, 0.000000, 0.000000, 0.500151 +501, 0.865414, 0.000000, 0.000000, 0.501058 +502, 0.864888, 0.000000, 0.000000, 0.501964 +503, 0.864362, 0.000000, 0.000000, 0.502870 +504, 0.863835, 0.000000, 0.000000, 0.503775 +505, 0.863307, 0.000000, 0.000000, 0.504680 +506, 0.862777, 0.000000, 0.000000, 0.505584 +507, 0.862247, 0.000000, 0.000000, 0.506487 +508, 0.861716, 0.000000, 0.000000, 0.507390 +509, 0.861184, 0.000000, 0.000000, 0.508293 +510, 0.860651, 0.000000, 0.000000, 0.509195 +511, 0.860117, 0.000000, 0.000000, 0.510096 +512, 0.859583, 0.000000, 0.000000, 0.510997 +513, 0.859047, 0.000000, 0.000000, 0.511897 +514, 0.858510, 0.000000, 0.000000, 0.512797 +515, 0.857973, 0.000000, 0.000000, 0.513696 +516, 0.857434, 0.000000, 0.000000, 0.514594 +517, 0.856894, 0.000000, 0.000000, 0.515492 +518, 0.856354, 0.000000, 0.000000, 0.516389 +519, 0.855813, 0.000000, 0.000000, 0.517286 +520, 0.855270, 0.000000, 0.000000, 0.518182 +521, 0.854727, 0.000000, 0.000000, 0.519078 +522, 0.854183, 0.000000, 0.000000, 0.519973 +523, 0.853638, 0.000000, 0.000000, 0.520868 +524, 0.853091, 0.000000, 0.000000, 0.521761 +525, 0.852544, 0.000000, 0.000000, 0.522655 +526, 0.851996, 0.000000, 0.000000, 0.523548 +527, 0.851447, 0.000000, 0.000000, 0.524440 +528, 0.850898, 0.000000, 0.000000, 0.525332 +529, 0.850347, 0.000000, 0.000000, 0.526223 +530, 0.849795, 0.000000, 0.000000, 0.527113 +531, 0.849243, 0.000000, 0.000000, 0.528003 +532, 0.848689, 0.000000, 0.000000, 0.528892 +533, 0.848134, 0.000000, 0.000000, 0.529781 +534, 0.847579, 0.000000, 0.000000, 0.530669 +535, 0.847023, 0.000000, 0.000000, 0.531557 +536, 0.846465, 0.000000, 0.000000, 0.532444 +537, 0.845907, 0.000000, 0.000000, 0.533330 +538, 0.845348, 0.000000, 0.000000, 0.534216 +539, 0.844788, 0.000000, 0.000000, 0.535101 +540, 0.844227, 0.000000, 0.000000, 0.535986 +541, 0.843665, 0.000000, 0.000000, 0.536870 +542, 0.843102, 0.000000, 0.000000, 0.537754 +543, 0.842538, 0.000000, 0.000000, 0.538636 +544, 0.841974, 0.000000, 0.000000, 0.539519 +545, 0.841408, 0.000000, 0.000000, 0.540400 +546, 0.840841, 0.000000, 0.000000, 0.541282 +547, 0.840274, 0.000000, 0.000000, 0.542162 +548, 0.839706, 0.000000, 0.000000, 0.543042 +549, 0.839136, 0.000000, 0.000000, 0.543921 +550, 0.838566, 0.000000, 0.000000, 0.544800 +551, 0.837995, 0.000000, 0.000000, 0.545678 +552, 0.837423, 0.000000, 0.000000, 0.546556 +553, 0.836850, 0.000000, 0.000000, 0.547433 +554, 0.836276, 0.000000, 0.000000, 0.548309 +555, 0.835701, 0.000000, 0.000000, 0.549185 +556, 0.835125, 0.000000, 0.000000, 0.550060 +557, 0.834549, 0.000000, 0.000000, 0.550934 +558, 0.833971, 0.000000, 0.000000, 0.551808 +559, 0.833392, 0.000000, 0.000000, 0.552682 +560, 0.832813, 0.000000, 0.000000, 0.553554 +561, 0.832233, 0.000000, 0.000000, 0.554427 +562, 0.831651, 0.000000, 0.000000, 0.555298 +563, 0.831069, 0.000000, 0.000000, 0.556169 +564, 0.830486, 0.000000, 0.000000, 0.557039 +565, 0.829902, 0.000000, 0.000000, 0.557909 +566, 0.829317, 0.000000, 0.000000, 0.558778 +567, 0.828732, 0.000000, 0.000000, 0.559646 +568, 0.828145, 0.000000, 0.000000, 0.560514 +569, 0.827557, 0.000000, 0.000000, 0.561381 +570, 0.826969, 0.000000, 0.000000, 0.562248 +571, 0.826379, 0.000000, 0.000000, 0.563114 +572, 0.825789, 0.000000, 0.000000, 0.563979 +573, 0.825198, 0.000000, 0.000000, 0.564844 +574, 0.824606, 0.000000, 0.000000, 0.565708 +575, 0.824012, 0.000000, 0.000000, 0.566572 +576, 0.823418, 0.000000, 0.000000, 0.567435 +577, 0.822824, 0.000000, 0.000000, 0.568297 +578, 0.822228, 0.000000, 0.000000, 0.569158 +579, 0.821631, 0.000000, 0.000000, 0.570019 +580, 0.821034, 0.000000, 0.000000, 0.570880 +581, 0.820435, 0.000000, 0.000000, 0.571740 +582, 0.819836, 0.000000, 0.000000, 0.572599 +583, 0.819235, 0.000000, 0.000000, 0.573457 +584, 0.818634, 0.000000, 0.000000, 0.574315 +585, 0.818032, 0.000000, 0.000000, 0.575172 +586, 0.817429, 0.000000, 0.000000, 0.576029 +587, 0.816825, 0.000000, 0.000000, 0.576885 +588, 0.816221, 0.000000, 0.000000, 0.577740 +589, 0.815615, 0.000000, 0.000000, 0.578595 +590, 0.815008, 0.000000, 0.000000, 0.579449 +591, 0.814401, 0.000000, 0.000000, 0.580303 +592, 0.813793, 0.000000, 0.000000, 0.581155 +593, 0.813183, 0.000000, 0.000000, 0.582008 +594, 0.812573, 0.000000, 0.000000, 0.582859 +595, 0.811962, 0.000000, 0.000000, 0.583710 +596, 0.811350, 0.000000, 0.000000, 0.584560 +597, 0.810738, 0.000000, 0.000000, 0.585410 +598, 0.810124, 0.000000, 0.000000, 0.586259 +599, 0.809509, 0.000000, 0.000000, 0.587107 +600, 0.808894, 0.000000, 0.000000, 0.587955 +601, 0.808277, 0.000000, 0.000000, 0.588802 +602, 0.807660, 0.000000, 0.000000, 0.589648 +603, 0.807042, 0.000000, 0.000000, 0.590494 +604, 0.806423, 0.000000, 0.000000, 0.591339 +605, 0.805803, 0.000000, 0.000000, 0.592183 +606, 0.805182, 0.000000, 0.000000, 0.593027 +607, 0.804561, 0.000000, 0.000000, 0.593870 +608, 0.803938, 0.000000, 0.000000, 0.594713 +609, 0.803315, 0.000000, 0.000000, 0.595555 +610, 0.802690, 0.000000, 0.000000, 0.596396 +611, 0.802065, 0.000000, 0.000000, 0.597236 +612, 0.801439, 0.000000, 0.000000, 0.598076 +613, 0.800812, 0.000000, 0.000000, 0.598915 +614, 0.800184, 0.000000, 0.000000, 0.599754 +615, 0.799556, 0.000000, 0.000000, 0.600592 +616, 0.798926, 0.000000, 0.000000, 0.601429 +617, 0.798296, 0.000000, 0.000000, 0.602266 +618, 0.797664, 0.000000, 0.000000, 0.603102 +619, 0.797032, 0.000000, 0.000000, 0.603937 +620, 0.796399, 0.000000, 0.000000, 0.604772 +621, 0.795765, 0.000000, 0.000000, 0.605605 +622, 0.795130, 0.000000, 0.000000, 0.606439 +623, 0.794494, 0.000000, 0.000000, 0.607271 +624, 0.793858, 0.000000, 0.000000, 0.608103 +625, 0.793220, 0.000000, 0.000000, 0.608935 +626, 0.792582, 0.000000, 0.000000, 0.609765 +627, 0.791943, 0.000000, 0.000000, 0.610595 +628, 0.791303, 0.000000, 0.000000, 0.611424 +629, 0.790662, 0.000000, 0.000000, 0.612253 +630, 0.790020, 0.000000, 0.000000, 0.613081 +631, 0.789377, 0.000000, 0.000000, 0.613908 +632, 0.788734, 0.000000, 0.000000, 0.614735 +633, 0.788090, 0.000000, 0.000000, 0.615561 +634, 0.787444, 0.000000, 0.000000, 0.616386 +635, 0.786798, 0.000000, 0.000000, 0.617210 +636, 0.786151, 0.000000, 0.000000, 0.618034 +637, 0.785503, 0.000000, 0.000000, 0.618857 +638, 0.784855, 0.000000, 0.000000, 0.619680 +639, 0.784205, 0.000000, 0.000000, 0.620502 +640, 0.783555, 0.000000, 0.000000, 0.621323 +641, 0.782903, 0.000000, 0.000000, 0.622143 +642, 0.782251, 0.000000, 0.000000, 0.622963 +643, 0.781598, 0.000000, 0.000000, 0.623782 +644, 0.780944, 0.000000, 0.000000, 0.624601 +645, 0.780290, 0.000000, 0.000000, 0.625418 +646, 0.779634, 0.000000, 0.000000, 0.626235 +647, 0.778978, 0.000000, 0.000000, 0.627052 +648, 0.778320, 0.000000, 0.000000, 0.627867 +649, 0.777662, 0.000000, 0.000000, 0.628682 +650, 0.777003, 0.000000, 0.000000, 0.629497 +651, 0.776343, 0.000000, 0.000000, 0.630310 +652, 0.775683, 0.000000, 0.000000, 0.631123 +653, 0.775021, 0.000000, 0.000000, 0.631935 +654, 0.774359, 0.000000, 0.000000, 0.632747 +655, 0.773695, 0.000000, 0.000000, 0.633558 +656, 0.773031, 0.000000, 0.000000, 0.634368 +657, 0.772366, 0.000000, 0.000000, 0.635177 +658, 0.771700, 0.000000, 0.000000, 0.635986 +659, 0.771034, 0.000000, 0.000000, 0.636794 +660, 0.770366, 0.000000, 0.000000, 0.637602 +661, 0.769698, 0.000000, 0.000000, 0.638408 +662, 0.769029, 0.000000, 0.000000, 0.639214 +663, 0.768359, 0.000000, 0.000000, 0.640019 +664, 0.767688, 0.000000, 0.000000, 0.640824 +665, 0.767016, 0.000000, 0.000000, 0.641628 +666, 0.766344, 0.000000, 0.000000, 0.642431 +667, 0.765670, 0.000000, 0.000000, 0.643233 +668, 0.764996, 0.000000, 0.000000, 0.644035 +669, 0.764321, 0.000000, 0.000000, 0.644836 +670, 0.763645, 0.000000, 0.000000, 0.645636 +671, 0.762968, 0.000000, 0.000000, 0.646436 +672, 0.762291, 0.000000, 0.000000, 0.647235 +673, 0.761612, 0.000000, 0.000000, 0.648033 +674, 0.760933, 0.000000, 0.000000, 0.648830 +675, 0.760253, 0.000000, 0.000000, 0.649627 +676, 0.759572, 0.000000, 0.000000, 0.650423 +677, 0.758890, 0.000000, 0.000000, 0.651219 +678, 0.758208, 0.000000, 0.000000, 0.652013 +679, 0.757524, 0.000000, 0.000000, 0.652807 +680, 0.756840, 0.000000, 0.000000, 0.653600 +681, 0.756155, 0.000000, 0.000000, 0.654393 +682, 0.755469, 0.000000, 0.000000, 0.655185 +683, 0.754782, 0.000000, 0.000000, 0.655976 +684, 0.754095, 0.000000, 0.000000, 0.656766 +685, 0.753406, 0.000000, 0.000000, 0.657555 +686, 0.752717, 0.000000, 0.000000, 0.658344 +687, 0.752027, 0.000000, 0.000000, 0.659132 +688, 0.751336, 0.000000, 0.000000, 0.659920 +689, 0.750644, 0.000000, 0.000000, 0.660707 +690, 0.749952, 0.000000, 0.000000, 0.661493 +691, 0.749258, 0.000000, 0.000000, 0.662278 +692, 0.748564, 0.000000, 0.000000, 0.663062 +693, 0.747869, 0.000000, 0.000000, 0.663846 +694, 0.747173, 0.000000, 0.000000, 0.664629 +695, 0.746477, 0.000000, 0.000000, 0.665412 +696, 0.745779, 0.000000, 0.000000, 0.666193 +697, 0.745081, 0.000000, 0.000000, 0.666974 +698, 0.744382, 0.000000, 0.000000, 0.667754 +699, 0.743682, 0.000000, 0.000000, 0.668534 +700, 0.742981, 0.000000, 0.000000, 0.669312 +701, 0.742280, 0.000000, 0.000000, 0.670090 +702, 0.741577, 0.000000, 0.000000, 0.670867 +703, 0.740874, 0.000000, 0.000000, 0.671644 +704, 0.740170, 0.000000, 0.000000, 0.672420 +705, 0.739465, 0.000000, 0.000000, 0.673195 +706, 0.738760, 0.000000, 0.000000, 0.673969 +707, 0.738053, 0.000000, 0.000000, 0.674742 +708, 0.737346, 0.000000, 0.000000, 0.675515 +709, 0.736638, 0.000000, 0.000000, 0.676287 +710, 0.735929, 0.000000, 0.000000, 0.677058 +711, 0.735220, 0.000000, 0.000000, 0.677829 +712, 0.734509, 0.000000, 0.000000, 0.678599 +713, 0.733798, 0.000000, 0.000000, 0.679368 +714, 0.733086, 0.000000, 0.000000, 0.680136 +715, 0.732373, 0.000000, 0.000000, 0.680904 +716, 0.731659, 0.000000, 0.000000, 0.681671 +717, 0.730945, 0.000000, 0.000000, 0.682437 +718, 0.730229, 0.000000, 0.000000, 0.683202 +719, 0.729513, 0.000000, 0.000000, 0.683967 +720, 0.728797, 0.000000, 0.000000, 0.684730 +721, 0.728079, 0.000000, 0.000000, 0.685493 +722, 0.727360, 0.000000, 0.000000, 0.686256 +723, 0.726641, 0.000000, 0.000000, 0.687017 +724, 0.725921, 0.000000, 0.000000, 0.687778 +725, 0.725200, 0.000000, 0.000000, 0.688538 +726, 0.724478, 0.000000, 0.000000, 0.689297 +727, 0.723756, 0.000000, 0.000000, 0.690056 +728, 0.723033, 0.000000, 0.000000, 0.690814 +729, 0.722309, 0.000000, 0.000000, 0.691571 +730, 0.721584, 0.000000, 0.000000, 0.692327 +731, 0.720858, 0.000000, 0.000000, 0.693083 +732, 0.720132, 0.000000, 0.000000, 0.693837 +733, 0.719404, 0.000000, 0.000000, 0.694591 +734, 0.718676, 0.000000, 0.000000, 0.695345 +735, 0.717948, 0.000000, 0.000000, 0.696097 +736, 0.717218, 0.000000, 0.000000, 0.696849 +737, 0.716488, 0.000000, 0.000000, 0.697600 +738, 0.715757, 0.000000, 0.000000, 0.698350 +739, 0.715025, 0.000000, 0.000000, 0.699099 +740, 0.714292, 0.000000, 0.000000, 0.699848 +741, 0.713558, 0.000000, 0.000000, 0.700596 +742, 0.712824, 0.000000, 0.000000, 0.701343 +743, 0.712089, 0.000000, 0.000000, 0.702089 +744, 0.711353, 0.000000, 0.000000, 0.702835 +745, 0.710616, 0.000000, 0.000000, 0.703580 +746, 0.709879, 0.000000, 0.000000, 0.704324 +747, 0.709141, 0.000000, 0.000000, 0.705067 +748, 0.708402, 0.000000, 0.000000, 0.705809 +749, 0.707662, 0.000000, 0.000000, 0.706551 +750, 0.706922, 0.000000, 0.000000, 0.707292 +751, 0.706180, 0.000000, 0.000000, 0.708032 +752, 0.705438, 0.000000, 0.000000, 0.708771 +753, 0.704695, 0.000000, 0.000000, 0.709510 +754, 0.703952, 0.000000, 0.000000, 0.710248 +755, 0.703207, 0.000000, 0.000000, 0.710985 +756, 0.702462, 0.000000, 0.000000, 0.711721 +757, 0.701716, 0.000000, 0.000000, 0.712457 +758, 0.700969, 0.000000, 0.000000, 0.713191 +759, 0.700222, 0.000000, 0.000000, 0.713925 +760, 0.699474, 0.000000, 0.000000, 0.714658 +761, 0.698725, 0.000000, 0.000000, 0.715391 +762, 0.697975, 0.000000, 0.000000, 0.716122 +763, 0.697224, 0.000000, 0.000000, 0.716853 +764, 0.696473, 0.000000, 0.000000, 0.717583 +765, 0.695721, 0.000000, 0.000000, 0.718312 +766, 0.694968, 0.000000, 0.000000, 0.719041 +767, 0.694214, 0.000000, 0.000000, 0.719768 +768, 0.693460, 0.000000, 0.000000, 0.720495 +769, 0.692705, 0.000000, 0.000000, 0.721221 +770, 0.691949, 0.000000, 0.000000, 0.721946 +771, 0.691192, 0.000000, 0.000000, 0.722671 +772, 0.690435, 0.000000, 0.000000, 0.723394 +773, 0.689677, 0.000000, 0.000000, 0.724117 +774, 0.688918, 0.000000, 0.000000, 0.724839 +775, 0.688158, 0.000000, 0.000000, 0.725561 +776, 0.687398, 0.000000, 0.000000, 0.726281 +777, 0.686637, 0.000000, 0.000000, 0.727001 +778, 0.685875, 0.000000, 0.000000, 0.727720 +779, 0.685112, 0.000000, 0.000000, 0.728438 +780, 0.684349, 0.000000, 0.000000, 0.729155 +781, 0.683584, 0.000000, 0.000000, 0.729872 +782, 0.682819, 0.000000, 0.000000, 0.730587 +783, 0.682054, 0.000000, 0.000000, 0.731302 +784, 0.681287, 0.000000, 0.000000, 0.732016 +785, 0.680520, 0.000000, 0.000000, 0.732729 +786, 0.679752, 0.000000, 0.000000, 0.733442 +787, 0.678983, 0.000000, 0.000000, 0.734154 +788, 0.678214, 0.000000, 0.000000, 0.734864 +789, 0.677444, 0.000000, 0.000000, 0.735575 +790, 0.676673, 0.000000, 0.000000, 0.736284 +791, 0.675901, 0.000000, 0.000000, 0.736992 +792, 0.675129, 0.000000, 0.000000, 0.737700 +793, 0.674356, 0.000000, 0.000000, 0.738407 +794, 0.673582, 0.000000, 0.000000, 0.739113 +795, 0.672807, 0.000000, 0.000000, 0.739818 +796, 0.672032, 0.000000, 0.000000, 0.740522 +797, 0.671256, 0.000000, 0.000000, 0.741226 +798, 0.670479, 0.000000, 0.000000, 0.741929 +799, 0.669701, 0.000000, 0.000000, 0.742631 +800, 0.668923, 0.000000, 0.000000, 0.743332 +801, 0.668144, 0.000000, 0.000000, 0.744032 +802, 0.667364, 0.000000, 0.000000, 0.744732 +803, 0.666584, 0.000000, 0.000000, 0.745430 +804, 0.665802, 0.000000, 0.000000, 0.746128 +805, 0.665020, 0.000000, 0.000000, 0.746825 +806, 0.664238, 0.000000, 0.000000, 0.747521 +807, 0.663454, 0.000000, 0.000000, 0.748217 +808, 0.662670, 0.000000, 0.000000, 0.748911 +809, 0.661885, 0.000000, 0.000000, 0.749605 +810, 0.661100, 0.000000, 0.000000, 0.750298 +811, 0.660313, 0.000000, 0.000000, 0.750990 +812, 0.659526, 0.000000, 0.000000, 0.751682 +813, 0.658739, 0.000000, 0.000000, 0.752372 +814, 0.657950, 0.000000, 0.000000, 0.753062 +815, 0.657161, 0.000000, 0.000000, 0.753750 +816, 0.656371, 0.000000, 0.000000, 0.754438 +817, 0.655580, 0.000000, 0.000000, 0.755126 +818, 0.654789, 0.000000, 0.000000, 0.755812 +819, 0.653997, 0.000000, 0.000000, 0.756497 +820, 0.653204, 0.000000, 0.000000, 0.757182 +821, 0.652410, 0.000000, 0.000000, 0.757866 +822, 0.651616, 0.000000, 0.000000, 0.758549 +823, 0.650821, 0.000000, 0.000000, 0.759231 +824, 0.650025, 0.000000, 0.000000, 0.759913 +825, 0.649229, 0.000000, 0.000000, 0.760593 +826, 0.648432, 0.000000, 0.000000, 0.761273 +827, 0.647634, 0.000000, 0.000000, 0.761952 +828, 0.646835, 0.000000, 0.000000, 0.762630 +829, 0.646036, 0.000000, 0.000000, 0.763307 +830, 0.645236, 0.000000, 0.000000, 0.763983 +831, 0.644436, 0.000000, 0.000000, 0.764659 +832, 0.643634, 0.000000, 0.000000, 0.765333 +833, 0.642832, 0.000000, 0.000000, 0.766007 +834, 0.642029, 0.000000, 0.000000, 0.766680 +835, 0.641226, 0.000000, 0.000000, 0.767352 +836, 0.640422, 0.000000, 0.000000, 0.768023 +837, 0.639617, 0.000000, 0.000000, 0.768694 +838, 0.638811, 0.000000, 0.000000, 0.769363 +839, 0.638005, 0.000000, 0.000000, 0.770032 +840, 0.637198, 0.000000, 0.000000, 0.770700 +841, 0.636390, 0.000000, 0.000000, 0.771367 +842, 0.635582, 0.000000, 0.000000, 0.772033 +843, 0.634773, 0.000000, 0.000000, 0.772699 +844, 0.633963, 0.000000, 0.000000, 0.773363 +845, 0.633153, 0.000000, 0.000000, 0.774027 +846, 0.632341, 0.000000, 0.000000, 0.774690 +847, 0.631529, 0.000000, 0.000000, 0.775352 +848, 0.630717, 0.000000, 0.000000, 0.776013 +849, 0.629904, 0.000000, 0.000000, 0.776673 +850, 0.629090, 0.000000, 0.000000, 0.777333 +851, 0.628275, 0.000000, 0.000000, 0.777991 +852, 0.627460, 0.000000, 0.000000, 0.778649 +853, 0.626644, 0.000000, 0.000000, 0.779306 +854, 0.625827, 0.000000, 0.000000, 0.779962 +855, 0.625010, 0.000000, 0.000000, 0.780617 +856, 0.624192, 0.000000, 0.000000, 0.781271 +857, 0.623373, 0.000000, 0.000000, 0.781925 +858, 0.622553, 0.000000, 0.000000, 0.782577 +859, 0.621733, 0.000000, 0.000000, 0.783229 +860, 0.620912, 0.000000, 0.000000, 0.783880 +861, 0.620091, 0.000000, 0.000000, 0.784530 +862, 0.619269, 0.000000, 0.000000, 0.785179 +863, 0.618446, 0.000000, 0.000000, 0.785827 +864, 0.617622, 0.000000, 0.000000, 0.786475 +865, 0.616798, 0.000000, 0.000000, 0.787121 +866, 0.615973, 0.000000, 0.000000, 0.787767 +867, 0.615148, 0.000000, 0.000000, 0.788412 +868, 0.614321, 0.000000, 0.000000, 0.789056 +869, 0.613495, 0.000000, 0.000000, 0.789699 +870, 0.612667, 0.000000, 0.000000, 0.790341 +871, 0.611839, 0.000000, 0.000000, 0.790983 +872, 0.611010, 0.000000, 0.000000, 0.791623 +873, 0.610180, 0.000000, 0.000000, 0.792263 +874, 0.609350, 0.000000, 0.000000, 0.792901 +875, 0.608519, 0.000000, 0.000000, 0.793539 +876, 0.607687, 0.000000, 0.000000, 0.794176 +877, 0.606855, 0.000000, 0.000000, 0.794812 +878, 0.606022, 0.000000, 0.000000, 0.795448 +879, 0.605189, 0.000000, 0.000000, 0.796082 +880, 0.604354, 0.000000, 0.000000, 0.796716 +881, 0.603519, 0.000000, 0.000000, 0.797348 +882, 0.602684, 0.000000, 0.000000, 0.797980 +883, 0.601848, 0.000000, 0.000000, 0.798611 +884, 0.601011, 0.000000, 0.000000, 0.799241 +885, 0.600173, 0.000000, 0.000000, 0.799870 +886, 0.599335, 0.000000, 0.000000, 0.800498 +887, 0.598496, 0.000000, 0.000000, 0.801126 +888, 0.597656, 0.000000, 0.000000, 0.801752 +889, 0.596816, 0.000000, 0.000000, 0.802378 +890, 0.595975, 0.000000, 0.000000, 0.803003 +891, 0.595134, 0.000000, 0.000000, 0.803627 +892, 0.594292, 0.000000, 0.000000, 0.804250 +893, 0.593449, 0.000000, 0.000000, 0.804872 +894, 0.592605, 0.000000, 0.000000, 0.805493 +895, 0.591761, 0.000000, 0.000000, 0.806113 +896, 0.590917, 0.000000, 0.000000, 0.806733 +897, 0.590071, 0.000000, 0.000000, 0.807351 +898, 0.589225, 0.000000, 0.000000, 0.807969 +899, 0.588378, 0.000000, 0.000000, 0.808586 +900, 0.587531, 0.000000, 0.000000, 0.809202 +901, 0.586683, 0.000000, 0.000000, 0.809817 +902, 0.585834, 0.000000, 0.000000, 0.810431 +903, 0.584985, 0.000000, 0.000000, 0.811044 +904, 0.584135, 0.000000, 0.000000, 0.811656 +905, 0.583285, 0.000000, 0.000000, 0.812268 +906, 0.582433, 0.000000, 0.000000, 0.812878 +907, 0.581581, 0.000000, 0.000000, 0.813488 +908, 0.580729, 0.000000, 0.000000, 0.814097 +909, 0.579876, 0.000000, 0.000000, 0.814705 +910, 0.579022, 0.000000, 0.000000, 0.815312 +911, 0.578168, 0.000000, 0.000000, 0.815918 +912, 0.577313, 0.000000, 0.000000, 0.816523 +913, 0.576457, 0.000000, 0.000000, 0.817127 +914, 0.575601, 0.000000, 0.000000, 0.817731 +915, 0.574744, 0.000000, 0.000000, 0.818333 +916, 0.573886, 0.000000, 0.000000, 0.818935 +917, 0.573028, 0.000000, 0.000000, 0.819536 +918, 0.572169, 0.000000, 0.000000, 0.820136 +919, 0.571310, 0.000000, 0.000000, 0.820734 +920, 0.570450, 0.000000, 0.000000, 0.821333 +921, 0.569589, 0.000000, 0.000000, 0.821930 +922, 0.568728, 0.000000, 0.000000, 0.822526 +923, 0.567866, 0.000000, 0.000000, 0.823121 +924, 0.567003, 0.000000, 0.000000, 0.823716 +925, 0.566140, 0.000000, 0.000000, 0.824309 +926, 0.565276, 0.000000, 0.000000, 0.824902 +927, 0.564412, 0.000000, 0.000000, 0.825493 +928, 0.563547, 0.000000, 0.000000, 0.826084 +929, 0.562681, 0.000000, 0.000000, 0.826674 +930, 0.561815, 0.000000, 0.000000, 0.827263 +931, 0.560948, 0.000000, 0.000000, 0.827851 +932, 0.560080, 0.000000, 0.000000, 0.828438 +933, 0.559212, 0.000000, 0.000000, 0.829025 +934, 0.558343, 0.000000, 0.000000, 0.829610 +935, 0.557474, 0.000000, 0.000000, 0.830194 +936, 0.556604, 0.000000, 0.000000, 0.830778 +937, 0.555734, 0.000000, 0.000000, 0.831360 +938, 0.554862, 0.000000, 0.000000, 0.831942 +939, 0.553991, 0.000000, 0.000000, 0.832523 +940, 0.553118, 0.000000, 0.000000, 0.833103 +941, 0.552245, 0.000000, 0.000000, 0.833682 +942, 0.551371, 0.000000, 0.000000, 0.834260 +943, 0.550497, 0.000000, 0.000000, 0.834837 +944, 0.549622, 0.000000, 0.000000, 0.835413 +945, 0.548747, 0.000000, 0.000000, 0.835988 +946, 0.547871, 0.000000, 0.000000, 0.836563 +947, 0.546994, 0.000000, 0.000000, 0.837136 +948, 0.546117, 0.000000, 0.000000, 0.837709 +949, 0.545239, 0.000000, 0.000000, 0.838280 +950, 0.544361, 0.000000, 0.000000, 0.838851 +951, 0.543482, 0.000000, 0.000000, 0.839421 +952, 0.542602, 0.000000, 0.000000, 0.839990 +953, 0.541722, 0.000000, 0.000000, 0.840558 +954, 0.540841, 0.000000, 0.000000, 0.841125 +955, 0.539960, 0.000000, 0.000000, 0.841691 +956, 0.539078, 0.000000, 0.000000, 0.842256 +957, 0.538195, 0.000000, 0.000000, 0.842820 +958, 0.537312, 0.000000, 0.000000, 0.843384 +959, 0.536428, 0.000000, 0.000000, 0.843946 +960, 0.535544, 0.000000, 0.000000, 0.844507 +961, 0.534659, 0.000000, 0.000000, 0.845068 +962, 0.533773, 0.000000, 0.000000, 0.845628 +963, 0.532887, 0.000000, 0.000000, 0.846186 +964, 0.532000, 0.000000, 0.000000, 0.846744 +965, 0.531113, 0.000000, 0.000000, 0.847301 +966, 0.530225, 0.000000, 0.000000, 0.847857 +967, 0.529337, 0.000000, 0.000000, 0.848412 +968, 0.528448, 0.000000, 0.000000, 0.848966 +969, 0.527558, 0.000000, 0.000000, 0.849519 +970, 0.526668, 0.000000, 0.000000, 0.850071 +971, 0.525777, 0.000000, 0.000000, 0.850622 +972, 0.524886, 0.000000, 0.000000, 0.851173 +973, 0.523994, 0.000000, 0.000000, 0.851722 +974, 0.523101, 0.000000, 0.000000, 0.852270 +975, 0.522208, 0.000000, 0.000000, 0.852818 +976, 0.521315, 0.000000, 0.000000, 0.853365 +977, 0.520420, 0.000000, 0.000000, 0.853910 +978, 0.519526, 0.000000, 0.000000, 0.854455 +979, 0.518630, 0.000000, 0.000000, 0.854999 +980, 0.517734, 0.000000, 0.000000, 0.855541 +981, 0.516838, 0.000000, 0.000000, 0.856083 +982, 0.515941, 0.000000, 0.000000, 0.856624 +983, 0.515043, 0.000000, 0.000000, 0.857164 +984, 0.514145, 0.000000, 0.000000, 0.857703 +985, 0.513246, 0.000000, 0.000000, 0.858241 +986, 0.512347, 0.000000, 0.000000, 0.858779 +987, 0.511447, 0.000000, 0.000000, 0.859315 +988, 0.510546, 0.000000, 0.000000, 0.859850 +989, 0.509645, 0.000000, 0.000000, 0.860385 +990, 0.508744, 0.000000, 0.000000, 0.860918 +991, 0.507842, 0.000000, 0.000000, 0.861450 +992, 0.506939, 0.000000, 0.000000, 0.861982 +993, 0.506036, 0.000000, 0.000000, 0.862512 +994, 0.505132, 0.000000, 0.000000, 0.863042 +995, 0.504228, 0.000000, 0.000000, 0.863571 +996, 0.503323, 0.000000, 0.000000, 0.864099 +997, 0.502417, 0.000000, 0.000000, 0.864625 +998, 0.501511, 0.000000, 0.000000, 0.865151 +999, 0.500605, 0.000000, 0.000000, 0.865676 +1000, 0.499698, 0.000000, 0.000000, 0.866200 +1001, 0.498790, 0.000000, 0.000000, 0.866723 +1002, 0.497882, 0.000000, 0.000000, 0.867245 +1003, 0.496973, 0.000000, 0.000000, 0.867766 +1004, 0.496064, 0.000000, 0.000000, 0.868286 +1005, 0.495154, 0.000000, 0.000000, 0.868805 +1006, 0.494243, 0.000000, 0.000000, 0.869324 +1007, 0.493332, 0.000000, 0.000000, 0.869841 +1008, 0.492421, 0.000000, 0.000000, 0.870357 +1009, 0.491509, 0.000000, 0.000000, 0.870872 +1010, 0.490596, 0.000000, 0.000000, 0.871387 +1011, 0.489683, 0.000000, 0.000000, 0.871900 +1012, 0.488770, 0.000000, 0.000000, 0.872413 +1013, 0.487856, 0.000000, 0.000000, 0.872924 +1014, 0.486941, 0.000000, 0.000000, 0.873435 +1015, 0.486026, 0.000000, 0.000000, 0.873945 +1016, 0.485110, 0.000000, 0.000000, 0.874453 +1017, 0.484194, 0.000000, 0.000000, 0.874961 +1018, 0.483277, 0.000000, 0.000000, 0.875468 +1019, 0.482359, 0.000000, 0.000000, 0.875973 +1020, 0.481442, 0.000000, 0.000000, 0.876478 +1021, 0.480523, 0.000000, 0.000000, 0.876982 +1022, 0.479604, 0.000000, 0.000000, 0.877485 +1023, 0.478685, 0.000000, 0.000000, 0.877987 +1024, 0.477765, 0.000000, 0.000000, 0.878488 +1025, 0.476844, 0.000000, 0.000000, 0.878988 +1026, 0.475923, 0.000000, 0.000000, 0.879487 +1027, 0.475002, 0.000000, 0.000000, 0.879985 +1028, 0.474079, 0.000000, 0.000000, 0.880482 +1029, 0.473157, 0.000000, 0.000000, 0.880978 +1030, 0.472234, 0.000000, 0.000000, 0.881473 +1031, 0.471310, 0.000000, 0.000000, 0.881968 +1032, 0.470386, 0.000000, 0.000000, 0.882461 +1033, 0.469461, 0.000000, 0.000000, 0.882953 +1034, 0.468536, 0.000000, 0.000000, 0.883444 +1035, 0.467610, 0.000000, 0.000000, 0.883935 +1036, 0.466684, 0.000000, 0.000000, 0.884424 +1037, 0.465757, 0.000000, 0.000000, 0.884912 +1038, 0.464830, 0.000000, 0.000000, 0.885400 +1039, 0.463902, 0.000000, 0.000000, 0.885886 +1040, 0.462974, 0.000000, 0.000000, 0.886372 +1041, 0.462045, 0.000000, 0.000000, 0.886856 +1042, 0.461116, 0.000000, 0.000000, 0.887340 +1043, 0.460186, 0.000000, 0.000000, 0.887822 +1044, 0.459256, 0.000000, 0.000000, 0.888304 +1045, 0.458325, 0.000000, 0.000000, 0.888785 +1046, 0.457394, 0.000000, 0.000000, 0.889264 +1047, 0.456462, 0.000000, 0.000000, 0.889743 +1048, 0.455530, 0.000000, 0.000000, 0.890220 +1049, 0.454597, 0.000000, 0.000000, 0.890697 +1050, 0.453664, 0.000000, 0.000000, 0.891173 +1051, 0.452730, 0.000000, 0.000000, 0.891648 +1052, 0.451796, 0.000000, 0.000000, 0.892121 +1053, 0.450861, 0.000000, 0.000000, 0.892594 +1054, 0.449926, 0.000000, 0.000000, 0.893066 +1055, 0.448990, 0.000000, 0.000000, 0.893537 +1056, 0.448054, 0.000000, 0.000000, 0.894007 +1057, 0.447117, 0.000000, 0.000000, 0.894476 +1058, 0.446180, 0.000000, 0.000000, 0.894943 +1059, 0.445242, 0.000000, 0.000000, 0.895410 +1060, 0.444304, 0.000000, 0.000000, 0.895876 +1061, 0.443365, 0.000000, 0.000000, 0.896341 +1062, 0.442426, 0.000000, 0.000000, 0.896805 +1063, 0.441486, 0.000000, 0.000000, 0.897268 +1064, 0.440546, 0.000000, 0.000000, 0.897730 +1065, 0.439605, 0.000000, 0.000000, 0.898191 +1066, 0.438664, 0.000000, 0.000000, 0.898651 +1067, 0.437722, 0.000000, 0.000000, 0.899110 +1068, 0.436780, 0.000000, 0.000000, 0.899568 +1069, 0.435838, 0.000000, 0.000000, 0.900025 +1070, 0.434895, 0.000000, 0.000000, 0.900481 +1071, 0.433951, 0.000000, 0.000000, 0.900936 +1072, 0.433007, 0.000000, 0.000000, 0.901390 +1073, 0.432063, 0.000000, 0.000000, 0.901844 +1074, 0.431118, 0.000000, 0.000000, 0.902296 +1075, 0.430172, 0.000000, 0.000000, 0.902747 +1076, 0.429226, 0.000000, 0.000000, 0.903197 +1077, 0.428280, 0.000000, 0.000000, 0.903646 +1078, 0.427333, 0.000000, 0.000000, 0.904094 +1079, 0.426386, 0.000000, 0.000000, 0.904541 +1080, 0.425438, 0.000000, 0.000000, 0.904988 +1081, 0.424490, 0.000000, 0.000000, 0.905433 +1082, 0.423541, 0.000000, 0.000000, 0.905877 +1083, 0.422592, 0.000000, 0.000000, 0.906320 +1084, 0.421642, 0.000000, 0.000000, 0.906762 +1085, 0.420692, 0.000000, 0.000000, 0.907203 +1086, 0.419742, 0.000000, 0.000000, 0.907644 +1087, 0.418791, 0.000000, 0.000000, 0.908083 +1088, 0.417839, 0.000000, 0.000000, 0.908521 +1089, 0.416887, 0.000000, 0.000000, 0.908958 +1090, 0.415935, 0.000000, 0.000000, 0.909394 +1091, 0.414982, 0.000000, 0.000000, 0.909830 +1092, 0.414029, 0.000000, 0.000000, 0.910264 +1093, 0.413075, 0.000000, 0.000000, 0.910697 +1094, 0.412121, 0.000000, 0.000000, 0.911129 +1095, 0.411166, 0.000000, 0.000000, 0.911561 +1096, 0.410211, 0.000000, 0.000000, 0.911991 +1097, 0.409255, 0.000000, 0.000000, 0.912420 +1098, 0.408299, 0.000000, 0.000000, 0.912848 +1099, 0.407343, 0.000000, 0.000000, 0.913275 +1100, 0.406386, 0.000000, 0.000000, 0.913702 +1101, 0.405428, 0.000000, 0.000000, 0.914127 +1102, 0.404471, 0.000000, 0.000000, 0.914551 +1103, 0.403512, 0.000000, 0.000000, 0.914974 +1104, 0.402554, 0.000000, 0.000000, 0.915396 +1105, 0.401594, 0.000000, 0.000000, 0.915818 +1106, 0.400635, 0.000000, 0.000000, 0.916238 +1107, 0.399675, 0.000000, 0.000000, 0.916657 +1108, 0.398714, 0.000000, 0.000000, 0.917075 +1109, 0.397753, 0.000000, 0.000000, 0.917492 +1110, 0.396792, 0.000000, 0.000000, 0.917908 +1111, 0.395830, 0.000000, 0.000000, 0.918324 +1112, 0.394868, 0.000000, 0.000000, 0.918738 +1113, 0.393906, 0.000000, 0.000000, 0.919151 +1114, 0.392942, 0.000000, 0.000000, 0.919563 +1115, 0.391979, 0.000000, 0.000000, 0.919974 +1116, 0.391015, 0.000000, 0.000000, 0.920384 +1117, 0.390051, 0.000000, 0.000000, 0.920793 +1118, 0.389086, 0.000000, 0.000000, 0.921201 +1119, 0.388121, 0.000000, 0.000000, 0.921609 +1120, 0.387155, 0.000000, 0.000000, 0.922015 +1121, 0.386189, 0.000000, 0.000000, 0.922420 +1122, 0.385222, 0.000000, 0.000000, 0.922824 +1123, 0.384256, 0.000000, 0.000000, 0.923227 +1124, 0.383288, 0.000000, 0.000000, 0.923629 +1125, 0.382320, 0.000000, 0.000000, 0.924030 +1126, 0.381352, 0.000000, 0.000000, 0.924430 +1127, 0.380384, 0.000000, 0.000000, 0.924829 +1128, 0.379415, 0.000000, 0.000000, 0.925227 +1129, 0.378445, 0.000000, 0.000000, 0.925624 +1130, 0.377475, 0.000000, 0.000000, 0.926020 +1131, 0.376505, 0.000000, 0.000000, 0.926415 +1132, 0.375535, 0.000000, 0.000000, 0.926808 +1133, 0.374563, 0.000000, 0.000000, 0.927201 +1134, 0.373592, 0.000000, 0.000000, 0.927593 +1135, 0.372620, 0.000000, 0.000000, 0.927984 +1136, 0.371648, 0.000000, 0.000000, 0.928374 +1137, 0.370675, 0.000000, 0.000000, 0.928763 +1138, 0.369702, 0.000000, 0.000000, 0.929150 +1139, 0.368728, 0.000000, 0.000000, 0.929537 +1140, 0.367754, 0.000000, 0.000000, 0.929923 +1141, 0.366780, 0.000000, 0.000000, 0.930308 +1142, 0.365805, 0.000000, 0.000000, 0.930691 +1143, 0.364830, 0.000000, 0.000000, 0.931074 +1144, 0.363855, 0.000000, 0.000000, 0.931456 +1145, 0.362879, 0.000000, 0.000000, 0.931836 +1146, 0.361902, 0.000000, 0.000000, 0.932216 +1147, 0.360926, 0.000000, 0.000000, 0.932595 +1148, 0.359948, 0.000000, 0.000000, 0.932972 +1149, 0.358971, 0.000000, 0.000000, 0.933349 +1150, 0.357993, 0.000000, 0.000000, 0.933724 +1151, 0.357015, 0.000000, 0.000000, 0.934099 +1152, 0.356036, 0.000000, 0.000000, 0.934472 +1153, 0.355057, 0.000000, 0.000000, 0.934845 +1154, 0.354077, 0.000000, 0.000000, 0.935216 +1155, 0.353098, 0.000000, 0.000000, 0.935587 +1156, 0.352117, 0.000000, 0.000000, 0.935956 +1157, 0.351137, 0.000000, 0.000000, 0.936324 +1158, 0.350156, 0.000000, 0.000000, 0.936692 +1159, 0.349174, 0.000000, 0.000000, 0.937058 +1160, 0.348192, 0.000000, 0.000000, 0.937423 +1161, 0.347210, 0.000000, 0.000000, 0.937787 +1162, 0.346228, 0.000000, 0.000000, 0.938151 +1163, 0.345245, 0.000000, 0.000000, 0.938513 +1164, 0.344261, 0.000000, 0.000000, 0.938874 +1165, 0.343278, 0.000000, 0.000000, 0.939234 +1166, 0.342294, 0.000000, 0.000000, 0.939593 +1167, 0.341309, 0.000000, 0.000000, 0.939951 +1168, 0.340324, 0.000000, 0.000000, 0.940308 +1169, 0.339339, 0.000000, 0.000000, 0.940664 +1170, 0.338354, 0.000000, 0.000000, 0.941019 +1171, 0.337368, 0.000000, 0.000000, 0.941373 +1172, 0.336381, 0.000000, 0.000000, 0.941726 +1173, 0.335395, 0.000000, 0.000000, 0.942078 +1174, 0.334407, 0.000000, 0.000000, 0.942429 +1175, 0.333420, 0.000000, 0.000000, 0.942778 +1176, 0.332432, 0.000000, 0.000000, 0.943127 +1177, 0.331444, 0.000000, 0.000000, 0.943475 +1178, 0.330456, 0.000000, 0.000000, 0.943822 +1179, 0.329467, 0.000000, 0.000000, 0.944167 +1180, 0.328478, 0.000000, 0.000000, 0.944512 +1181, 0.327488, 0.000000, 0.000000, 0.944855 +1182, 0.326498, 0.000000, 0.000000, 0.945198 +1183, 0.325508, 0.000000, 0.000000, 0.945539 +1184, 0.324517, 0.000000, 0.000000, 0.945880 +1185, 0.323526, 0.000000, 0.000000, 0.946219 +1186, 0.322535, 0.000000, 0.000000, 0.946558 +1187, 0.321543, 0.000000, 0.000000, 0.946895 +1188, 0.320551, 0.000000, 0.000000, 0.947231 +1189, 0.319558, 0.000000, 0.000000, 0.947567 +1190, 0.318565, 0.000000, 0.000000, 0.947901 +1191, 0.317572, 0.000000, 0.000000, 0.948234 +1192, 0.316579, 0.000000, 0.000000, 0.948566 +1193, 0.315585, 0.000000, 0.000000, 0.948897 +1194, 0.314591, 0.000000, 0.000000, 0.949227 +1195, 0.313596, 0.000000, 0.000000, 0.949556 +1196, 0.312601, 0.000000, 0.000000, 0.949884 +1197, 0.311606, 0.000000, 0.000000, 0.950211 +1198, 0.310611, 0.000000, 0.000000, 0.950537 +1199, 0.309615, 0.000000, 0.000000, 0.950862 +1200, 0.308618, 0.000000, 0.000000, 0.951186 +1201, 0.307622, 0.000000, 0.000000, 0.951509 +1202, 0.306625, 0.000000, 0.000000, 0.951830 +1203, 0.305628, 0.000000, 0.000000, 0.952151 +1204, 0.304630, 0.000000, 0.000000, 0.952471 +1205, 0.303632, 0.000000, 0.000000, 0.952789 +1206, 0.302634, 0.000000, 0.000000, 0.953107 +1207, 0.301635, 0.000000, 0.000000, 0.953423 +1208, 0.300636, 0.000000, 0.000000, 0.953739 +1209, 0.299637, 0.000000, 0.000000, 0.954053 +1210, 0.298638, 0.000000, 0.000000, 0.954367 +1211, 0.297638, 0.000000, 0.000000, 0.954679 +1212, 0.296637, 0.000000, 0.000000, 0.954990 +1213, 0.295637, 0.000000, 0.000000, 0.955300 +1214, 0.294636, 0.000000, 0.000000, 0.955610 +1215, 0.293635, 0.000000, 0.000000, 0.955918 +1216, 0.292633, 0.000000, 0.000000, 0.956225 +1217, 0.291631, 0.000000, 0.000000, 0.956531 +1218, 0.290629, 0.000000, 0.000000, 0.956836 +1219, 0.289627, 0.000000, 0.000000, 0.957140 +1220, 0.288624, 0.000000, 0.000000, 0.957443 +1221, 0.287621, 0.000000, 0.000000, 0.957744 +1222, 0.286617, 0.000000, 0.000000, 0.958045 +1223, 0.285614, 0.000000, 0.000000, 0.958345 +1224, 0.284610, 0.000000, 0.000000, 0.958644 +1225, 0.283605, 0.000000, 0.000000, 0.958941 +1226, 0.282600, 0.000000, 0.000000, 0.959238 +1227, 0.281595, 0.000000, 0.000000, 0.959533 +1228, 0.280590, 0.000000, 0.000000, 0.959828 +1229, 0.279585, 0.000000, 0.000000, 0.960121 +1230, 0.278579, 0.000000, 0.000000, 0.960413 +1231, 0.277572, 0.000000, 0.000000, 0.960705 +1232, 0.276566, 0.000000, 0.000000, 0.960995 +1233, 0.275559, 0.000000, 0.000000, 0.961284 +1234, 0.274552, 0.000000, 0.000000, 0.961572 +1235, 0.273544, 0.000000, 0.000000, 0.961859 +1236, 0.272537, 0.000000, 0.000000, 0.962145 +1237, 0.271529, 0.000000, 0.000000, 0.962430 +1238, 0.270520, 0.000000, 0.000000, 0.962714 +1239, 0.269512, 0.000000, 0.000000, 0.962997 +1240, 0.268503, 0.000000, 0.000000, 0.963279 +1241, 0.267494, 0.000000, 0.000000, 0.963560 +1242, 0.266484, 0.000000, 0.000000, 0.963839 +1243, 0.265474, 0.000000, 0.000000, 0.964118 +1244, 0.264464, 0.000000, 0.000000, 0.964396 +1245, 0.263454, 0.000000, 0.000000, 0.964672 +1246, 0.262443, 0.000000, 0.000000, 0.964947 +1247, 0.261432, 0.000000, 0.000000, 0.965222 +1248, 0.260421, 0.000000, 0.000000, 0.965495 +1249, 0.259409, 0.000000, 0.000000, 0.965767 +1250, 0.258397, 0.000000, 0.000000, 0.966039 +1251, 0.257385, 0.000000, 0.000000, 0.966309 +1252, 0.256373, 0.000000, 0.000000, 0.966578 +1253, 0.255360, 0.000000, 0.000000, 0.966846 +1254, 0.254347, 0.000000, 0.000000, 0.967113 +1255, 0.253334, 0.000000, 0.000000, 0.967379 +1256, 0.252321, 0.000000, 0.000000, 0.967644 +1257, 0.251307, 0.000000, 0.000000, 0.967907 +1258, 0.250293, 0.000000, 0.000000, 0.968170 +1259, 0.249278, 0.000000, 0.000000, 0.968432 +1260, 0.248264, 0.000000, 0.000000, 0.968692 +1261, 0.247249, 0.000000, 0.000000, 0.968952 +1262, 0.246234, 0.000000, 0.000000, 0.969210 +1263, 0.245218, 0.000000, 0.000000, 0.969468 +1264, 0.244203, 0.000000, 0.000000, 0.969724 +1265, 0.243187, 0.000000, 0.000000, 0.969980 +1266, 0.242170, 0.000000, 0.000000, 0.970234 +1267, 0.241154, 0.000000, 0.000000, 0.970487 +1268, 0.240137, 0.000000, 0.000000, 0.970739 +1269, 0.239120, 0.000000, 0.000000, 0.970990 +1270, 0.238103, 0.000000, 0.000000, 0.971240 +1271, 0.237085, 0.000000, 0.000000, 0.971489 +1272, 0.236067, 0.000000, 0.000000, 0.971737 +1273, 0.235049, 0.000000, 0.000000, 0.971983 +1274, 0.234031, 0.000000, 0.000000, 0.972229 +1275, 0.233012, 0.000000, 0.000000, 0.972474 +1276, 0.231994, 0.000000, 0.000000, 0.972717 +1277, 0.230975, 0.000000, 0.000000, 0.972960 +1278, 0.229955, 0.000000, 0.000000, 0.973201 +1279, 0.228936, 0.000000, 0.000000, 0.973442 +1280, 0.227916, 0.000000, 0.000000, 0.973681 +1281, 0.226896, 0.000000, 0.000000, 0.973919 +1282, 0.225875, 0.000000, 0.000000, 0.974156 +1283, 0.224855, 0.000000, 0.000000, 0.974392 +1284, 0.223834, 0.000000, 0.000000, 0.974627 +1285, 0.222813, 0.000000, 0.000000, 0.974861 +1286, 0.221791, 0.000000, 0.000000, 0.975094 +1287, 0.220770, 0.000000, 0.000000, 0.975326 +1288, 0.219748, 0.000000, 0.000000, 0.975557 +1289, 0.218726, 0.000000, 0.000000, 0.975786 +1290, 0.217704, 0.000000, 0.000000, 0.976015 +1291, 0.216681, 0.000000, 0.000000, 0.976242 +1292, 0.215658, 0.000000, 0.000000, 0.976469 +1293, 0.214635, 0.000000, 0.000000, 0.976694 +1294, 0.213612, 0.000000, 0.000000, 0.976919 +1295, 0.212589, 0.000000, 0.000000, 0.977142 +1296, 0.211565, 0.000000, 0.000000, 0.977364 +1297, 0.210541, 0.000000, 0.000000, 0.977585 +1298, 0.209517, 0.000000, 0.000000, 0.977805 +1299, 0.208492, 0.000000, 0.000000, 0.978024 +1300, 0.207468, 0.000000, 0.000000, 0.978242 +1301, 0.206443, 0.000000, 0.000000, 0.978459 +1302, 0.205418, 0.000000, 0.000000, 0.978674 +1303, 0.204392, 0.000000, 0.000000, 0.978889 +1304, 0.203367, 0.000000, 0.000000, 0.979103 +1305, 0.202341, 0.000000, 0.000000, 0.979315 +1306, 0.201315, 0.000000, 0.000000, 0.979527 +1307, 0.200289, 0.000000, 0.000000, 0.979737 +1308, 0.199262, 0.000000, 0.000000, 0.979946 +1309, 0.198236, 0.000000, 0.000000, 0.980154 +1310, 0.197209, 0.000000, 0.000000, 0.980361 +1311, 0.196182, 0.000000, 0.000000, 0.980568 +1312, 0.195155, 0.000000, 0.000000, 0.980773 +1313, 0.194127, 0.000000, 0.000000, 0.980976 +1314, 0.193099, 0.000000, 0.000000, 0.981179 +1315, 0.192071, 0.000000, 0.000000, 0.981381 +1316, 0.191043, 0.000000, 0.000000, 0.981582 +1317, 0.190015, 0.000000, 0.000000, 0.981781 +1318, 0.188986, 0.000000, 0.000000, 0.981980 +1319, 0.187958, 0.000000, 0.000000, 0.982177 +1320, 0.186929, 0.000000, 0.000000, 0.982374 +1321, 0.185899, 0.000000, 0.000000, 0.982569 +1322, 0.184870, 0.000000, 0.000000, 0.982763 +1323, 0.183840, 0.000000, 0.000000, 0.982956 +1324, 0.182811, 0.000000, 0.000000, 0.983148 +1325, 0.181781, 0.000000, 0.000000, 0.983339 +1326, 0.180750, 0.000000, 0.000000, 0.983529 +1327, 0.179720, 0.000000, 0.000000, 0.983718 +1328, 0.178689, 0.000000, 0.000000, 0.983906 +1329, 0.177659, 0.000000, 0.000000, 0.984092 +1330, 0.176628, 0.000000, 0.000000, 0.984278 +1331, 0.175596, 0.000000, 0.000000, 0.984462 +1332, 0.174565, 0.000000, 0.000000, 0.984646 +1333, 0.173534, 0.000000, 0.000000, 0.984828 +1334, 0.172502, 0.000000, 0.000000, 0.985009 +1335, 0.171470, 0.000000, 0.000000, 0.985189 +1336, 0.170438, 0.000000, 0.000000, 0.985368 +1337, 0.169405, 0.000000, 0.000000, 0.985546 +1338, 0.168373, 0.000000, 0.000000, 0.985723 +1339, 0.167340, 0.000000, 0.000000, 0.985899 +1340, 0.166307, 0.000000, 0.000000, 0.986074 +1341, 0.165274, 0.000000, 0.000000, 0.986248 +1342, 0.164241, 0.000000, 0.000000, 0.986420 +1343, 0.163208, 0.000000, 0.000000, 0.986592 +1344, 0.162174, 0.000000, 0.000000, 0.986762 +1345, 0.161140, 0.000000, 0.000000, 0.986932 +1346, 0.160106, 0.000000, 0.000000, 0.987100 +1347, 0.159072, 0.000000, 0.000000, 0.987267 +1348, 0.158038, 0.000000, 0.000000, 0.987433 +1349, 0.157003, 0.000000, 0.000000, 0.987598 +1350, 0.155969, 0.000000, 0.000000, 0.987762 +1351, 0.154934, 0.000000, 0.000000, 0.987925 +1352, 0.153899, 0.000000, 0.000000, 0.988087 +1353, 0.152864, 0.000000, 0.000000, 0.988247 +1354, 0.151829, 0.000000, 0.000000, 0.988407 +1355, 0.150793, 0.000000, 0.000000, 0.988565 +1356, 0.149757, 0.000000, 0.000000, 0.988723 +1357, 0.148722, 0.000000, 0.000000, 0.988879 +1358, 0.147686, 0.000000, 0.000000, 0.989034 +1359, 0.146650, 0.000000, 0.000000, 0.989189 +1360, 0.145613, 0.000000, 0.000000, 0.989342 +1361, 0.144577, 0.000000, 0.000000, 0.989494 +1362, 0.143540, 0.000000, 0.000000, 0.989644 +1363, 0.142503, 0.000000, 0.000000, 0.989794 +1364, 0.141466, 0.000000, 0.000000, 0.989943 +1365, 0.140429, 0.000000, 0.000000, 0.990091 +1366, 0.139392, 0.000000, 0.000000, 0.990237 +1367, 0.138355, 0.000000, 0.000000, 0.990383 +1368, 0.137317, 0.000000, 0.000000, 0.990527 +1369, 0.136279, 0.000000, 0.000000, 0.990670 +1370, 0.135242, 0.000000, 0.000000, 0.990813 +1371, 0.134204, 0.000000, 0.000000, 0.990954 +1372, 0.133165, 0.000000, 0.000000, 0.991094 +1373, 0.132127, 0.000000, 0.000000, 0.991233 +1374, 0.131089, 0.000000, 0.000000, 0.991371 +1375, 0.130050, 0.000000, 0.000000, 0.991507 +1376, 0.129011, 0.000000, 0.000000, 0.991643 +1377, 0.127973, 0.000000, 0.000000, 0.991778 +1378, 0.126934, 0.000000, 0.000000, 0.991911 +1379, 0.125894, 0.000000, 0.000000, 0.992044 +1380, 0.124855, 0.000000, 0.000000, 0.992175 +1381, 0.123816, 0.000000, 0.000000, 0.992305 +1382, 0.122776, 0.000000, 0.000000, 0.992434 +1383, 0.121736, 0.000000, 0.000000, 0.992562 +1384, 0.120697, 0.000000, 0.000000, 0.992689 +1385, 0.119657, 0.000000, 0.000000, 0.992815 +1386, 0.118617, 0.000000, 0.000000, 0.992940 +1387, 0.117576, 0.000000, 0.000000, 0.993064 +1388, 0.116536, 0.000000, 0.000000, 0.993186 +1389, 0.115496, 0.000000, 0.000000, 0.993308 +1390, 0.114455, 0.000000, 0.000000, 0.993428 +1391, 0.113414, 0.000000, 0.000000, 0.993548 +1392, 0.112373, 0.000000, 0.000000, 0.993666 +1393, 0.111332, 0.000000, 0.000000, 0.993783 +1394, 0.110291, 0.000000, 0.000000, 0.993899 +1395, 0.109250, 0.000000, 0.000000, 0.994014 +1396, 0.108209, 0.000000, 0.000000, 0.994128 +1397, 0.107167, 0.000000, 0.000000, 0.994241 +1398, 0.106126, 0.000000, 0.000000, 0.994353 +1399, 0.105084, 0.000000, 0.000000, 0.994463 +1400, 0.104042, 0.000000, 0.000000, 0.994573 +1401, 0.103000, 0.000000, 0.000000, 0.994681 +1402, 0.101958, 0.000000, 0.000000, 0.994789 +1403, 0.100916, 0.000000, 0.000000, 0.994895 +1404, 0.099874, 0.000000, 0.000000, 0.995000 +1405, 0.098832, 0.000000, 0.000000, 0.995104 +1406, 0.097789, 0.000000, 0.000000, 0.995207 +1407, 0.096747, 0.000000, 0.000000, 0.995309 +1408, 0.095704, 0.000000, 0.000000, 0.995410 +1409, 0.094661, 0.000000, 0.000000, 0.995510 +1410, 0.093618, 0.000000, 0.000000, 0.995608 +1411, 0.092575, 0.000000, 0.000000, 0.995706 +1412, 0.091532, 0.000000, 0.000000, 0.995802 +1413, 0.090489, 0.000000, 0.000000, 0.995897 +1414, 0.089446, 0.000000, 0.000000, 0.995992 +1415, 0.088402, 0.000000, 0.000000, 0.996085 +1416, 0.087359, 0.000000, 0.000000, 0.996177 +1417, 0.086315, 0.000000, 0.000000, 0.996268 +1418, 0.085271, 0.000000, 0.000000, 0.996358 +1419, 0.084228, 0.000000, 0.000000, 0.996447 +1420, 0.083184, 0.000000, 0.000000, 0.996534 +1421, 0.082140, 0.000000, 0.000000, 0.996621 +1422, 0.081096, 0.000000, 0.000000, 0.996706 +1423, 0.080052, 0.000000, 0.000000, 0.996791 +1424, 0.079007, 0.000000, 0.000000, 0.996874 +1425, 0.077963, 0.000000, 0.000000, 0.996956 +1426, 0.076919, 0.000000, 0.000000, 0.997037 +1427, 0.075874, 0.000000, 0.000000, 0.997117 +1428, 0.074830, 0.000000, 0.000000, 0.997196 +1429, 0.073785, 0.000000, 0.000000, 0.997274 +1430, 0.072740, 0.000000, 0.000000, 0.997351 +1431, 0.071695, 0.000000, 0.000000, 0.997427 +1432, 0.070650, 0.000000, 0.000000, 0.997501 +1433, 0.069606, 0.000000, 0.000000, 0.997575 +1434, 0.068560, 0.000000, 0.000000, 0.997647 +1435, 0.067515, 0.000000, 0.000000, 0.997718 +1436, 0.066470, 0.000000, 0.000000, 0.997788 +1437, 0.065425, 0.000000, 0.000000, 0.997857 +1438, 0.064380, 0.000000, 0.000000, 0.997925 +1439, 0.063334, 0.000000, 0.000000, 0.997992 +1440, 0.062289, 0.000000, 0.000000, 0.998058 +1441, 0.061243, 0.000000, 0.000000, 0.998123 +1442, 0.060198, 0.000000, 0.000000, 0.998186 +1443, 0.059152, 0.000000, 0.000000, 0.998249 +1444, 0.058106, 0.000000, 0.000000, 0.998310 +1445, 0.057060, 0.000000, 0.000000, 0.998371 +1446, 0.056014, 0.000000, 0.000000, 0.998430 +1447, 0.054968, 0.000000, 0.000000, 0.998488 +1448, 0.053922, 0.000000, 0.000000, 0.998545 +1449, 0.052876, 0.000000, 0.000000, 0.998601 +1450, 0.051830, 0.000000, 0.000000, 0.998656 +1451, 0.050784, 0.000000, 0.000000, 0.998710 +1452, 0.049738, 0.000000, 0.000000, 0.998762 +1453, 0.048692, 0.000000, 0.000000, 0.998814 +1454, 0.047645, 0.000000, 0.000000, 0.998864 +1455, 0.046599, 0.000000, 0.000000, 0.998914 +1456, 0.045553, 0.000000, 0.000000, 0.998962 +1457, 0.044506, 0.000000, 0.000000, 0.999009 +1458, 0.043459, 0.000000, 0.000000, 0.999055 +1459, 0.042413, 0.000000, 0.000000, 0.999100 +1460, 0.041366, 0.000000, 0.000000, 0.999144 +1461, 0.040320, 0.000000, 0.000000, 0.999187 +1462, 0.039273, 0.000000, 0.000000, 0.999229 +1463, 0.038226, 0.000000, 0.000000, 0.999269 +1464, 0.037179, 0.000000, 0.000000, 0.999309 +1465, 0.036132, 0.000000, 0.000000, 0.999347 +1466, 0.035086, 0.000000, 0.000000, 0.999384 +1467, 0.034039, 0.000000, 0.000000, 0.999421 +1468, 0.032992, 0.000000, 0.000000, 0.999456 +1469, 0.031945, 0.000000, 0.000000, 0.999490 +1470, 0.030898, 0.000000, 0.000000, 0.999523 +1471, 0.029851, 0.000000, 0.000000, 0.999554 +1472, 0.028804, 0.000000, 0.000000, 0.999585 +1473, 0.027756, 0.000000, 0.000000, 0.999615 +1474, 0.026709, 0.000000, 0.000000, 0.999643 +1475, 0.025662, 0.000000, 0.000000, 0.999671 +1476, 0.024615, 0.000000, 0.000000, 0.999697 +1477, 0.023568, 0.000000, 0.000000, 0.999722 +1478, 0.022520, 0.000000, 0.000000, 0.999746 +1479, 0.021473, 0.000000, 0.000000, 0.999769 +1480, 0.020426, 0.000000, 0.000000, 0.999791 +1481, 0.019378, 0.000000, 0.000000, 0.999812 +1482, 0.018331, 0.000000, 0.000000, 0.999832 +1483, 0.017284, 0.000000, 0.000000, 0.999851 +1484, 0.016236, 0.000000, 0.000000, 0.999868 +1485, 0.015189, 0.000000, 0.000000, 0.999885 +1486, 0.014141, 0.000000, 0.000000, 0.999900 +1487, 0.013094, 0.000000, 0.000000, 0.999914 +1488, 0.012046, 0.000000, 0.000000, 0.999927 +1489, 0.010999, 0.000000, 0.000000, 0.999940 +1490, 0.009952, 0.000000, 0.000000, 0.999950 +1491, 0.008904, 0.000000, 0.000000, 0.999960 +1492, 0.007857, 0.000000, 0.000000, 0.999969 +1493, 0.006809, 0.000000, 0.000000, 0.999977 +1494, 0.005761, 0.000000, 0.000000, 0.999983 +1495, 0.004714, 0.000000, 0.000000, 0.999989 +1496, 0.003666, 0.000000, 0.000000, 0.999993 +1497, 0.002619, 0.000000, 0.000000, 0.999997 +1498, 0.001571, 0.000000, 0.000000, 0.999999 +1499, 0.000524, 0.000000, 0.000000, 1.000000 +1500, -0.000524, -0.000000, 0.000000, 1.000000 +1501, -0.001571, -0.000000, 0.000000, 0.999999 +1502, -0.002619, -0.000000, 0.000000, 0.999997 +1503, -0.003666, -0.000000, 0.000000, 0.999993 +1504, -0.004714, -0.000000, 0.000000, 0.999989 +1505, -0.005761, -0.000000, 0.000000, 0.999983 +1506, -0.006809, -0.000000, 0.000000, 0.999977 +1507, -0.007857, -0.000000, 0.000000, 0.999969 +1508, -0.008904, -0.000000, 0.000000, 0.999960 +1509, -0.009952, -0.000000, 0.000000, 0.999950 +1510, -0.010999, -0.000000, 0.000000, 0.999940 +1511, -0.012046, -0.000000, 0.000000, 0.999927 +1512, -0.013094, -0.000000, 0.000000, 0.999914 +1513, -0.014141, -0.000000, 0.000000, 0.999900 +1514, -0.015189, -0.000000, 0.000000, 0.999885 +1515, -0.016236, -0.000000, 0.000000, 0.999868 +1516, -0.017284, -0.000000, 0.000000, 0.999851 +1517, -0.018331, -0.000000, 0.000000, 0.999832 +1518, -0.019378, -0.000000, 0.000000, 0.999812 +1519, -0.020426, -0.000000, 0.000000, 0.999791 +1520, -0.021473, -0.000000, 0.000000, 0.999769 +1521, -0.022520, -0.000000, 0.000000, 0.999746 +1522, -0.023568, -0.000000, 0.000000, 0.999722 +1523, -0.024615, -0.000000, 0.000000, 0.999697 +1524, -0.025662, -0.000000, 0.000000, 0.999671 +1525, -0.026709, -0.000000, 0.000000, 0.999643 +1526, -0.027756, -0.000000, 0.000000, 0.999615 +1527, -0.028804, -0.000000, 0.000000, 0.999585 +1528, -0.029851, -0.000000, 0.000000, 0.999554 +1529, -0.030898, -0.000000, 0.000000, 0.999523 +1530, -0.031945, -0.000000, 0.000000, 0.999490 +1531, -0.032992, -0.000000, 0.000000, 0.999456 +1532, -0.034039, -0.000000, 0.000000, 0.999421 +1533, -0.035086, -0.000000, 0.000000, 0.999384 +1534, -0.036132, -0.000000, 0.000000, 0.999347 +1535, -0.037179, -0.000000, 0.000000, 0.999309 +1536, -0.038226, -0.000000, 0.000000, 0.999269 +1537, -0.039273, -0.000000, 0.000000, 0.999229 +1538, -0.040320, -0.000000, 0.000000, 0.999187 +1539, -0.041366, -0.000000, 0.000000, 0.999144 +1540, -0.042413, -0.000000, 0.000000, 0.999100 +1541, -0.043459, -0.000000, 0.000000, 0.999055 +1542, -0.044506, -0.000000, 0.000000, 0.999009 +1543, -0.045553, -0.000000, 0.000000, 0.998962 +1544, -0.046599, -0.000000, 0.000000, 0.998914 +1545, -0.047645, -0.000000, 0.000000, 0.998864 +1546, -0.048692, -0.000000, 0.000000, 0.998814 +1547, -0.049738, -0.000000, 0.000000, 0.998762 +1548, -0.050784, -0.000000, 0.000000, 0.998710 +1549, -0.051830, -0.000000, 0.000000, 0.998656 +1550, -0.052876, -0.000000, 0.000000, 0.998601 +1551, -0.053922, -0.000000, 0.000000, 0.998545 +1552, -0.054968, -0.000000, 0.000000, 0.998488 +1553, -0.056014, -0.000000, 0.000000, 0.998430 +1554, -0.057060, -0.000000, 0.000000, 0.998371 +1555, -0.058106, -0.000000, 0.000000, 0.998310 +1556, -0.059152, -0.000000, 0.000000, 0.998249 +1557, -0.060198, -0.000000, 0.000000, 0.998186 +1558, -0.061243, -0.000000, 0.000000, 0.998123 +1559, -0.062289, -0.000000, 0.000000, 0.998058 +1560, -0.063334, -0.000000, 0.000000, 0.997992 +1561, -0.064380, -0.000000, 0.000000, 0.997925 +1562, -0.065425, -0.000000, 0.000000, 0.997857 +1563, -0.066470, -0.000000, 0.000000, 0.997788 +1564, -0.067515, -0.000000, 0.000000, 0.997718 +1565, -0.068560, -0.000000, 0.000000, 0.997647 +1566, -0.069606, -0.000000, 0.000000, 0.997575 +1567, -0.070650, -0.000000, 0.000000, 0.997501 +1568, -0.071695, -0.000000, 0.000000, 0.997427 +1569, -0.072740, -0.000000, 0.000000, 0.997351 +1570, -0.073785, -0.000000, 0.000000, 0.997274 +1571, -0.074830, -0.000000, 0.000000, 0.997196 +1572, -0.075874, -0.000000, 0.000000, 0.997117 +1573, -0.076919, -0.000000, 0.000000, 0.997037 +1574, -0.077963, -0.000000, 0.000000, 0.996956 +1575, -0.079007, -0.000000, 0.000000, 0.996874 +1576, -0.080052, -0.000000, 0.000000, 0.996791 +1577, -0.081096, -0.000000, 0.000000, 0.996706 +1578, -0.082140, -0.000000, 0.000000, 0.996621 +1579, -0.083184, -0.000000, 0.000000, 0.996534 +1580, -0.084228, -0.000000, 0.000000, 0.996447 +1581, -0.085271, -0.000000, 0.000000, 0.996358 +1582, -0.086315, -0.000000, 0.000000, 0.996268 +1583, -0.087359, -0.000000, 0.000000, 0.996177 +1584, -0.088402, -0.000000, 0.000000, 0.996085 +1585, -0.089446, -0.000000, 0.000000, 0.995992 +1586, -0.090489, -0.000000, 0.000000, 0.995897 +1587, -0.091532, -0.000000, 0.000000, 0.995802 +1588, -0.092575, -0.000000, 0.000000, 0.995706 +1589, -0.093618, -0.000000, 0.000000, 0.995608 +1590, -0.094661, -0.000000, 0.000000, 0.995510 +1591, -0.095704, -0.000000, 0.000000, 0.995410 +1592, -0.096747, -0.000000, 0.000000, 0.995309 +1593, -0.097789, -0.000000, 0.000000, 0.995207 +1594, -0.098832, -0.000000, 0.000000, 0.995104 +1595, -0.099874, -0.000000, 0.000000, 0.995000 +1596, -0.100916, -0.000000, 0.000000, 0.994895 +1597, -0.101958, -0.000000, 0.000000, 0.994789 +1598, -0.103000, -0.000000, 0.000000, 0.994681 +1599, -0.104042, -0.000000, 0.000000, 0.994573 +1600, -0.105084, -0.000000, 0.000000, 0.994463 +1601, -0.106126, -0.000000, 0.000000, 0.994353 +1602, -0.107167, -0.000000, 0.000000, 0.994241 +1603, -0.108209, -0.000000, 0.000000, 0.994128 +1604, -0.109250, -0.000000, 0.000000, 0.994014 +1605, -0.110291, -0.000000, 0.000000, 0.993899 +1606, -0.111332, -0.000000, 0.000000, 0.993783 +1607, -0.112373, -0.000000, 0.000000, 0.993666 +1608, -0.113414, -0.000000, 0.000000, 0.993548 +1609, -0.114455, -0.000000, 0.000000, 0.993428 +1610, -0.115496, -0.000000, 0.000000, 0.993308 +1611, -0.116536, -0.000000, 0.000000, 0.993186 +1612, -0.117576, -0.000000, 0.000000, 0.993064 +1613, -0.118617, -0.000000, 0.000000, 0.992940 +1614, -0.119657, -0.000000, 0.000000, 0.992815 +1615, -0.120697, -0.000000, 0.000000, 0.992689 +1616, -0.121736, -0.000000, 0.000000, 0.992562 +1617, -0.122776, -0.000000, 0.000000, 0.992434 +1618, -0.123816, -0.000000, 0.000000, 0.992305 +1619, -0.124855, -0.000000, 0.000000, 0.992175 +1620, -0.125894, -0.000000, 0.000000, 0.992044 +1621, -0.126934, -0.000000, 0.000000, 0.991911 +1622, -0.127973, -0.000000, 0.000000, 0.991778 +1623, -0.129011, -0.000000, 0.000000, 0.991643 +1624, -0.130050, -0.000000, 0.000000, 0.991507 +1625, -0.131089, -0.000000, 0.000000, 0.991371 +1626, -0.132127, -0.000000, 0.000000, 0.991233 +1627, -0.133165, -0.000000, 0.000000, 0.991094 +1628, -0.134204, -0.000000, 0.000000, 0.990954 +1629, -0.135242, -0.000000, 0.000000, 0.990813 +1630, -0.136279, -0.000000, 0.000000, 0.990670 +1631, -0.137317, -0.000000, 0.000000, 0.990527 +1632, -0.138355, -0.000000, 0.000000, 0.990383 +1633, -0.139392, -0.000000, 0.000000, 0.990237 +1634, -0.140429, -0.000000, 0.000000, 0.990091 +1635, -0.141466, -0.000000, 0.000000, 0.989943 +1636, -0.142503, -0.000000, 0.000000, 0.989794 +1637, -0.143540, -0.000000, 0.000000, 0.989644 +1638, -0.144577, -0.000000, 0.000000, 0.989494 +1639, -0.145613, -0.000000, 0.000000, 0.989342 +1640, -0.146650, -0.000000, 0.000000, 0.989189 +1641, -0.147686, -0.000000, 0.000000, 0.989034 +1642, -0.148722, -0.000000, 0.000000, 0.988879 +1643, -0.149757, -0.000000, 0.000000, 0.988723 +1644, -0.150793, -0.000000, 0.000000, 0.988565 +1645, -0.151829, -0.000000, 0.000000, 0.988407 +1646, -0.152864, -0.000000, 0.000000, 0.988247 +1647, -0.153899, -0.000000, 0.000000, 0.988087 +1648, -0.154934, -0.000000, 0.000000, 0.987925 +1649, -0.155969, -0.000000, 0.000000, 0.987762 +1650, -0.157003, -0.000000, 0.000000, 0.987598 +1651, -0.158038, -0.000000, 0.000000, 0.987433 +1652, -0.159072, -0.000000, 0.000000, 0.987267 +1653, -0.160106, -0.000000, 0.000000, 0.987100 +1654, -0.161140, -0.000000, 0.000000, 0.986932 +1655, -0.162174, -0.000000, 0.000000, 0.986762 +1656, -0.163208, -0.000000, 0.000000, 0.986592 +1657, -0.164241, -0.000000, 0.000000, 0.986420 +1658, -0.165274, -0.000000, 0.000000, 0.986248 +1659, -0.166307, -0.000000, 0.000000, 0.986074 +1660, -0.167340, -0.000000, 0.000000, 0.985899 +1661, -0.168373, -0.000000, 0.000000, 0.985723 +1662, -0.169405, -0.000000, 0.000000, 0.985546 +1663, -0.170438, -0.000000, 0.000000, 0.985368 +1664, -0.171470, -0.000000, 0.000000, 0.985189 +1665, -0.172502, -0.000000, 0.000000, 0.985009 +1666, -0.173534, -0.000000, 0.000000, 0.984828 +1667, -0.174565, -0.000000, 0.000000, 0.984646 +1668, -0.175596, -0.000000, 0.000000, 0.984462 +1669, -0.176628, -0.000000, 0.000000, 0.984278 +1670, -0.177659, -0.000000, 0.000000, 0.984092 +1671, -0.178689, -0.000000, 0.000000, 0.983906 +1672, -0.179720, -0.000000, 0.000000, 0.983718 +1673, -0.180750, -0.000000, 0.000000, 0.983529 +1674, -0.181781, -0.000000, 0.000000, 0.983339 +1675, -0.182811, -0.000000, 0.000000, 0.983148 +1676, -0.183840, -0.000000, 0.000000, 0.982956 +1677, -0.184870, -0.000000, 0.000000, 0.982763 +1678, -0.185899, -0.000000, 0.000000, 0.982569 +1679, -0.186929, -0.000000, 0.000000, 0.982374 +1680, -0.187958, -0.000000, 0.000000, 0.982177 +1681, -0.188986, -0.000000, 0.000000, 0.981980 +1682, -0.190015, -0.000000, 0.000000, 0.981781 +1683, -0.191043, -0.000000, 0.000000, 0.981582 +1684, -0.192071, -0.000000, 0.000000, 0.981381 +1685, -0.193099, -0.000000, 0.000000, 0.981179 +1686, -0.194127, -0.000000, 0.000000, 0.980976 +1687, -0.195155, -0.000000, 0.000000, 0.980773 +1688, -0.196182, -0.000000, 0.000000, 0.980568 +1689, -0.197209, -0.000000, 0.000000, 0.980361 +1690, -0.198236, -0.000000, 0.000000, 0.980154 +1691, -0.199262, -0.000000, 0.000000, 0.979946 +1692, -0.200289, -0.000000, 0.000000, 0.979737 +1693, -0.201315, -0.000000, 0.000000, 0.979527 +1694, -0.202341, -0.000000, 0.000000, 0.979315 +1695, -0.203367, -0.000000, 0.000000, 0.979103 +1696, -0.204392, -0.000000, 0.000000, 0.978889 +1697, -0.205418, -0.000000, 0.000000, 0.978674 +1698, -0.206443, -0.000000, 0.000000, 0.978459 +1699, -0.207468, -0.000000, 0.000000, 0.978242 +1700, -0.208492, -0.000000, 0.000000, 0.978024 +1701, -0.209517, -0.000000, 0.000000, 0.977805 +1702, -0.210541, -0.000000, 0.000000, 0.977585 +1703, -0.211565, -0.000000, 0.000000, 0.977364 +1704, -0.212589, -0.000000, 0.000000, 0.977142 +1705, -0.213612, -0.000000, 0.000000, 0.976919 +1706, -0.214635, -0.000000, 0.000000, 0.976694 +1707, -0.215658, -0.000000, 0.000000, 0.976469 +1708, -0.216681, -0.000000, 0.000000, 0.976242 +1709, -0.217704, -0.000000, 0.000000, 0.976015 +1710, -0.218726, -0.000000, 0.000000, 0.975786 +1711, -0.219748, -0.000000, 0.000000, 0.975557 +1712, -0.220770, -0.000000, 0.000000, 0.975326 +1713, -0.221791, -0.000000, 0.000000, 0.975094 +1714, -0.222813, -0.000000, 0.000000, 0.974861 +1715, -0.223834, -0.000000, 0.000000, 0.974627 +1716, -0.224855, -0.000000, 0.000000, 0.974392 +1717, -0.225875, -0.000000, 0.000000, 0.974156 +1718, -0.226896, -0.000000, 0.000000, 0.973919 +1719, -0.227916, -0.000000, 0.000000, 0.973681 +1720, -0.228936, -0.000000, 0.000000, 0.973442 +1721, -0.229955, -0.000000, 0.000000, 0.973201 +1722, -0.230975, -0.000000, 0.000000, 0.972960 +1723, -0.231994, -0.000000, 0.000000, 0.972717 +1724, -0.233012, -0.000000, 0.000000, 0.972474 +1725, -0.234031, -0.000000, 0.000000, 0.972229 +1726, -0.235049, -0.000000, 0.000000, 0.971983 +1727, -0.236067, -0.000000, 0.000000, 0.971737 +1728, -0.237085, -0.000000, 0.000000, 0.971489 +1729, -0.238103, -0.000000, 0.000000, 0.971240 +1730, -0.239120, -0.000000, 0.000000, 0.970990 +1731, -0.240137, -0.000000, 0.000000, 0.970739 +1732, -0.241154, -0.000000, 0.000000, 0.970487 +1733, -0.242170, -0.000000, 0.000000, 0.970234 +1734, -0.243187, -0.000000, 0.000000, 0.969980 +1735, -0.244203, -0.000000, 0.000000, 0.969724 +1736, -0.245218, -0.000000, 0.000000, 0.969468 +1737, -0.246234, -0.000000, 0.000000, 0.969210 +1738, -0.247249, -0.000000, 0.000000, 0.968952 +1739, -0.248264, -0.000000, 0.000000, 0.968692 +1740, -0.249278, -0.000000, 0.000000, 0.968432 +1741, -0.250293, -0.000000, 0.000000, 0.968170 +1742, -0.251307, -0.000000, 0.000000, 0.967907 +1743, -0.252321, -0.000000, 0.000000, 0.967644 +1744, -0.253334, -0.000000, 0.000000, 0.967379 +1745, -0.254347, -0.000000, 0.000000, 0.967113 +1746, -0.255360, -0.000000, 0.000000, 0.966846 +1747, -0.256373, -0.000000, 0.000000, 0.966578 +1748, -0.257385, -0.000000, 0.000000, 0.966309 +1749, -0.258397, -0.000000, 0.000000, 0.966039 +1750, -0.259409, -0.000000, 0.000000, 0.965767 +1751, -0.260421, -0.000000, 0.000000, 0.965495 +1752, -0.261432, -0.000000, 0.000000, 0.965222 +1753, -0.262443, -0.000000, 0.000000, 0.964947 +1754, -0.263454, -0.000000, 0.000000, 0.964672 +1755, -0.264464, -0.000000, 0.000000, 0.964396 +1756, -0.265474, -0.000000, 0.000000, 0.964118 +1757, -0.266484, -0.000000, 0.000000, 0.963839 +1758, -0.267494, -0.000000, 0.000000, 0.963560 +1759, -0.268503, -0.000000, 0.000000, 0.963279 +1760, -0.269512, -0.000000, 0.000000, 0.962997 +1761, -0.270520, -0.000000, 0.000000, 0.962714 +1762, -0.271529, -0.000000, 0.000000, 0.962430 +1763, -0.272537, -0.000000, 0.000000, 0.962145 +1764, -0.273544, -0.000000, 0.000000, 0.961859 +1765, -0.274552, -0.000000, 0.000000, 0.961572 +1766, -0.275559, -0.000000, 0.000000, 0.961284 +1767, -0.276566, -0.000000, 0.000000, 0.960995 +1768, -0.277572, -0.000000, 0.000000, 0.960705 +1769, -0.278579, -0.000000, 0.000000, 0.960413 +1770, -0.279585, -0.000000, 0.000000, 0.960121 +1771, -0.280590, -0.000000, 0.000000, 0.959828 +1772, -0.281595, -0.000000, 0.000000, 0.959533 +1773, -0.282600, -0.000000, 0.000000, 0.959238 +1774, -0.283605, -0.000000, 0.000000, 0.958941 +1775, -0.284610, -0.000000, 0.000000, 0.958644 +1776, -0.285614, -0.000000, 0.000000, 0.958345 +1777, -0.286617, -0.000000, 0.000000, 0.958045 +1778, -0.287621, -0.000000, 0.000000, 0.957744 +1779, -0.288624, -0.000000, 0.000000, 0.957443 +1780, -0.289627, -0.000000, 0.000000, 0.957140 +1781, -0.290629, -0.000000, 0.000000, 0.956836 +1782, -0.291631, -0.000000, 0.000000, 0.956531 +1783, -0.292633, -0.000000, 0.000000, 0.956225 +1784, -0.293635, -0.000000, 0.000000, 0.955918 +1785, -0.294636, -0.000000, 0.000000, 0.955610 +1786, -0.295637, -0.000000, 0.000000, 0.955300 +1787, -0.296637, -0.000000, 0.000000, 0.954990 +1788, -0.297638, -0.000000, 0.000000, 0.954679 +1789, -0.298638, -0.000000, 0.000000, 0.954367 +1790, -0.299637, -0.000000, 0.000000, 0.954053 +1791, -0.300636, -0.000000, 0.000000, 0.953739 +1792, -0.301635, -0.000000, 0.000000, 0.953423 +1793, -0.302634, -0.000000, 0.000000, 0.953107 +1794, -0.303632, -0.000000, 0.000000, 0.952789 +1795, -0.304630, -0.000000, 0.000000, 0.952471 +1796, -0.305628, -0.000000, 0.000000, 0.952151 +1797, -0.306625, -0.000000, 0.000000, 0.951830 +1798, -0.307622, -0.000000, 0.000000, 0.951509 +1799, -0.308618, -0.000000, 0.000000, 0.951186 +1800, -0.309615, -0.000000, 0.000000, 0.950862 +1801, -0.310611, -0.000000, 0.000000, 0.950537 +1802, -0.311606, -0.000000, 0.000000, 0.950211 +1803, -0.312601, -0.000000, 0.000000, 0.949884 +1804, -0.313596, -0.000000, 0.000000, 0.949556 +1805, -0.314591, -0.000000, 0.000000, 0.949227 +1806, -0.315585, -0.000000, 0.000000, 0.948897 +1807, -0.316579, -0.000000, 0.000000, 0.948566 +1808, -0.317572, -0.000000, 0.000000, 0.948234 +1809, -0.318565, -0.000000, 0.000000, 0.947901 +1810, -0.319558, -0.000000, 0.000000, 0.947567 +1811, -0.320551, -0.000000, 0.000000, 0.947231 +1812, -0.321543, -0.000000, 0.000000, 0.946895 +1813, -0.322535, -0.000000, 0.000000, 0.946558 +1814, -0.323526, -0.000000, 0.000000, 0.946219 +1815, -0.324517, -0.000000, 0.000000, 0.945880 +1816, -0.325508, -0.000000, 0.000000, 0.945539 +1817, -0.326498, -0.000000, 0.000000, 0.945198 +1818, -0.327488, -0.000000, 0.000000, 0.944855 +1819, -0.328478, -0.000000, 0.000000, 0.944512 +1820, -0.329467, -0.000000, 0.000000, 0.944167 +1821, -0.330456, -0.000000, 0.000000, 0.943822 +1822, -0.331444, -0.000000, 0.000000, 0.943475 +1823, -0.332432, -0.000000, 0.000000, 0.943127 +1824, -0.333420, -0.000000, 0.000000, 0.942778 +1825, -0.334407, -0.000000, 0.000000, 0.942429 +1826, -0.335395, -0.000000, 0.000000, 0.942078 +1827, -0.336381, -0.000000, 0.000000, 0.941726 +1828, -0.337368, -0.000000, 0.000000, 0.941373 +1829, -0.338354, -0.000000, 0.000000, 0.941019 +1830, -0.339339, -0.000000, 0.000000, 0.940664 +1831, -0.340324, -0.000000, 0.000000, 0.940308 +1832, -0.341309, -0.000000, 0.000000, 0.939951 +1833, -0.342294, -0.000000, 0.000000, 0.939593 +1834, -0.343278, -0.000000, 0.000000, 0.939234 +1835, -0.344261, -0.000000, 0.000000, 0.938874 +1836, -0.345245, -0.000000, 0.000000, 0.938513 +1837, -0.346228, -0.000000, 0.000000, 0.938151 +1838, -0.347210, -0.000000, 0.000000, 0.937787 +1839, -0.348192, -0.000000, 0.000000, 0.937423 +1840, -0.349174, -0.000000, 0.000000, 0.937058 +1841, -0.350156, -0.000000, 0.000000, 0.936692 +1842, -0.351137, -0.000000, 0.000000, 0.936324 +1843, -0.352117, -0.000000, 0.000000, 0.935956 +1844, -0.353098, -0.000000, 0.000000, 0.935587 +1845, -0.354077, -0.000000, 0.000000, 0.935216 +1846, -0.355057, -0.000000, 0.000000, 0.934845 +1847, -0.356036, -0.000000, 0.000000, 0.934472 +1848, -0.357015, -0.000000, 0.000000, 0.934099 +1849, -0.357993, -0.000000, 0.000000, 0.933724 +1850, -0.358971, -0.000000, 0.000000, 0.933349 +1851, -0.359948, -0.000000, 0.000000, 0.932972 +1852, -0.360926, -0.000000, 0.000000, 0.932595 +1853, -0.361902, -0.000000, 0.000000, 0.932216 +1854, -0.362879, -0.000000, 0.000000, 0.931836 +1855, -0.363855, -0.000000, 0.000000, 0.931456 +1856, -0.364830, -0.000000, 0.000000, 0.931074 +1857, -0.365805, -0.000000, 0.000000, 0.930691 +1858, -0.366780, -0.000000, 0.000000, 0.930308 +1859, -0.367754, -0.000000, 0.000000, 0.929923 +1860, -0.368728, -0.000000, 0.000000, 0.929537 +1861, -0.369702, -0.000000, 0.000000, 0.929150 +1862, -0.370675, -0.000000, 0.000000, 0.928763 +1863, -0.371648, -0.000000, 0.000000, 0.928374 +1864, -0.372620, -0.000000, 0.000000, 0.927984 +1865, -0.373592, -0.000000, 0.000000, 0.927593 +1866, -0.374563, -0.000000, 0.000000, 0.927201 +1867, -0.375535, -0.000000, 0.000000, 0.926808 +1868, -0.376505, -0.000000, 0.000000, 0.926415 +1869, -0.377475, -0.000000, 0.000000, 0.926020 +1870, -0.378445, -0.000000, 0.000000, 0.925624 +1871, -0.379415, -0.000000, 0.000000, 0.925227 +1872, -0.380384, -0.000000, 0.000000, 0.924829 +1873, -0.381352, -0.000000, 0.000000, 0.924430 +1874, -0.382320, -0.000000, 0.000000, 0.924030 +1875, -0.383288, -0.000000, 0.000000, 0.923629 +1876, -0.384256, -0.000000, 0.000000, 0.923227 +1877, -0.385222, -0.000000, 0.000000, 0.922824 +1878, -0.386189, -0.000000, 0.000000, 0.922420 +1879, -0.387155, -0.000000, 0.000000, 0.922015 +1880, -0.388121, -0.000000, 0.000000, 0.921609 +1881, -0.389086, -0.000000, 0.000000, 0.921201 +1882, -0.390051, -0.000000, 0.000000, 0.920793 +1883, -0.391015, -0.000000, 0.000000, 0.920384 +1884, -0.391979, -0.000000, 0.000000, 0.919974 +1885, -0.392942, -0.000000, 0.000000, 0.919563 +1886, -0.393906, -0.000000, 0.000000, 0.919151 +1887, -0.394868, -0.000000, 0.000000, 0.918738 +1888, -0.395830, -0.000000, 0.000000, 0.918324 +1889, -0.396792, -0.000000, 0.000000, 0.917908 +1890, -0.397753, -0.000000, 0.000000, 0.917492 +1891, -0.398714, -0.000000, 0.000000, 0.917075 +1892, -0.399675, -0.000000, 0.000000, 0.916657 +1893, -0.400635, -0.000000, 0.000000, 0.916238 +1894, -0.401594, -0.000000, 0.000000, 0.915818 +1895, -0.402554, -0.000000, 0.000000, 0.915396 +1896, -0.403512, -0.000000, 0.000000, 0.914974 +1897, -0.404471, -0.000000, 0.000000, 0.914551 +1898, -0.405428, -0.000000, 0.000000, 0.914127 +1899, -0.406386, -0.000000, 0.000000, 0.913702 +1900, -0.407343, -0.000000, 0.000000, 0.913275 +1901, -0.408299, -0.000000, 0.000000, 0.912848 +1902, -0.409255, -0.000000, 0.000000, 0.912420 +1903, -0.410211, -0.000000, 0.000000, 0.911991 +1904, -0.411166, -0.000000, 0.000000, 0.911561 +1905, -0.412121, -0.000000, 0.000000, 0.911129 +1906, -0.413075, -0.000000, 0.000000, 0.910697 +1907, -0.414029, -0.000000, 0.000000, 0.910264 +1908, -0.414982, -0.000000, 0.000000, 0.909830 +1909, -0.415935, -0.000000, 0.000000, 0.909394 +1910, -0.416887, -0.000000, 0.000000, 0.908958 +1911, -0.417839, -0.000000, 0.000000, 0.908521 +1912, -0.418791, -0.000000, 0.000000, 0.908083 +1913, -0.419742, -0.000000, 0.000000, 0.907644 +1914, -0.420692, -0.000000, 0.000000, 0.907203 +1915, -0.421642, -0.000000, 0.000000, 0.906762 +1916, -0.422592, -0.000000, 0.000000, 0.906320 +1917, -0.423541, -0.000000, 0.000000, 0.905877 +1918, -0.424490, -0.000000, 0.000000, 0.905433 +1919, -0.425438, -0.000000, 0.000000, 0.904988 +1920, -0.426386, -0.000000, 0.000000, 0.904541 +1921, -0.427333, -0.000000, 0.000000, 0.904094 +1922, -0.428280, -0.000000, 0.000000, 0.903646 +1923, -0.429226, -0.000000, 0.000000, 0.903197 +1924, -0.430172, -0.000000, 0.000000, 0.902747 +1925, -0.431118, -0.000000, 0.000000, 0.902296 +1926, -0.432063, -0.000000, 0.000000, 0.901844 +1927, -0.433007, -0.000000, 0.000000, 0.901390 +1928, -0.433951, -0.000000, 0.000000, 0.900936 +1929, -0.434895, -0.000000, 0.000000, 0.900481 +1930, -0.435838, -0.000000, 0.000000, 0.900025 +1931, -0.436780, -0.000000, 0.000000, 0.899568 +1932, -0.437722, -0.000000, 0.000000, 0.899110 +1933, -0.438664, -0.000000, 0.000000, 0.898651 +1934, -0.439605, -0.000000, 0.000000, 0.898191 +1935, -0.440546, -0.000000, 0.000000, 0.897730 +1936, -0.441486, -0.000000, 0.000000, 0.897268 +1937, -0.442426, -0.000000, 0.000000, 0.896805 +1938, -0.443365, -0.000000, 0.000000, 0.896341 +1939, -0.444304, -0.000000, 0.000000, 0.895876 +1940, -0.445242, -0.000000, 0.000000, 0.895410 +1941, -0.446180, -0.000000, 0.000000, 0.894943 +1942, -0.447117, -0.000000, 0.000000, 0.894476 +1943, -0.448054, -0.000000, 0.000000, 0.894007 +1944, -0.448990, -0.000000, 0.000000, 0.893537 +1945, -0.449926, -0.000000, 0.000000, 0.893066 +1946, -0.450861, -0.000000, 0.000000, 0.892594 +1947, -0.451796, -0.000000, 0.000000, 0.892121 +1948, -0.452730, -0.000000, 0.000000, 0.891648 +1949, -0.453664, -0.000000, 0.000000, 0.891173 +1950, -0.454597, -0.000000, 0.000000, 0.890697 +1951, -0.455530, -0.000000, 0.000000, 0.890220 +1952, -0.456462, -0.000000, 0.000000, 0.889743 +1953, -0.457394, -0.000000, 0.000000, 0.889264 +1954, -0.458325, -0.000000, 0.000000, 0.888785 +1955, -0.459256, -0.000000, 0.000000, 0.888304 +1956, -0.460186, -0.000000, 0.000000, 0.887822 +1957, -0.461116, -0.000000, 0.000000, 0.887340 +1958, -0.462045, -0.000000, 0.000000, 0.886856 +1959, -0.462974, -0.000000, 0.000000, 0.886372 +1960, -0.463902, -0.000000, 0.000000, 0.885886 +1961, -0.464830, -0.000000, 0.000000, 0.885400 +1962, -0.465757, -0.000000, 0.000000, 0.884912 +1963, -0.466684, -0.000000, 0.000000, 0.884424 +1964, -0.467610, -0.000000, 0.000000, 0.883935 +1965, -0.468536, -0.000000, 0.000000, 0.883444 +1966, -0.469461, -0.000000, 0.000000, 0.882953 +1967, -0.470386, -0.000000, 0.000000, 0.882461 +1968, -0.471310, -0.000000, 0.000000, 0.881968 +1969, -0.472234, -0.000000, 0.000000, 0.881473 +1970, -0.473157, -0.000000, 0.000000, 0.880978 +1971, -0.474079, -0.000000, 0.000000, 0.880482 +1972, -0.475002, -0.000000, 0.000000, 0.879985 +1973, -0.475923, -0.000000, 0.000000, 0.879487 +1974, -0.476844, -0.000000, 0.000000, 0.878988 +1975, -0.477765, -0.000000, 0.000000, 0.878488 +1976, -0.478685, -0.000000, 0.000000, 0.877987 +1977, -0.479604, -0.000000, 0.000000, 0.877485 +1978, -0.480523, -0.000000, 0.000000, 0.876982 +1979, -0.481442, -0.000000, 0.000000, 0.876478 +1980, -0.482359, -0.000000, 0.000000, 0.875973 +1981, -0.483277, -0.000000, 0.000000, 0.875468 +1982, -0.484194, -0.000000, 0.000000, 0.874961 +1983, -0.485110, -0.000000, 0.000000, 0.874453 +1984, -0.486026, -0.000000, 0.000000, 0.873945 +1985, -0.486941, -0.000000, 0.000000, 0.873435 +1986, -0.487856, -0.000000, 0.000000, 0.872924 +1987, -0.488770, -0.000000, 0.000000, 0.872413 +1988, -0.489683, -0.000000, 0.000000, 0.871900 +1989, -0.490596, -0.000000, 0.000000, 0.871387 +1990, -0.491509, -0.000000, 0.000000, 0.870872 +1991, -0.492421, -0.000000, 0.000000, 0.870357 +1992, -0.493332, -0.000000, 0.000000, 0.869841 +1993, -0.494243, -0.000000, 0.000000, 0.869324 +1994, -0.495154, -0.000000, 0.000000, 0.868805 +1995, -0.496064, -0.000000, 0.000000, 0.868286 +1996, -0.496973, -0.000000, 0.000000, 0.867766 +1997, -0.497882, -0.000000, 0.000000, 0.867245 +1998, -0.498790, -0.000000, 0.000000, 0.866723 +1999, -0.499698, -0.000000, 0.000000, 0.866200 +2000, -0.500605, -0.000000, 0.000000, 0.865676 +2001, -0.501511, -0.000000, 0.000000, 0.865151 +2002, -0.502417, -0.000000, 0.000000, 0.864625 +2003, -0.503323, -0.000000, 0.000000, 0.864099 +2004, -0.504228, -0.000000, 0.000000, 0.863571 +2005, -0.505132, -0.000000, 0.000000, 0.863042 +2006, -0.506036, -0.000000, 0.000000, 0.862512 +2007, -0.506939, -0.000000, 0.000000, 0.861982 +2008, -0.507842, -0.000000, 0.000000, 0.861450 +2009, -0.508744, -0.000000, 0.000000, 0.860918 +2010, -0.509645, -0.000000, 0.000000, 0.860385 +2011, -0.510546, -0.000000, 0.000000, 0.859850 +2012, -0.511447, -0.000000, 0.000000, 0.859315 +2013, -0.512347, -0.000000, 0.000000, 0.858779 +2014, -0.513246, -0.000000, 0.000000, 0.858241 +2015, -0.514145, -0.000000, 0.000000, 0.857703 +2016, -0.515043, -0.000000, 0.000000, 0.857164 +2017, -0.515941, -0.000000, 0.000000, 0.856624 +2018, -0.516838, -0.000000, 0.000000, 0.856083 +2019, -0.517734, -0.000000, 0.000000, 0.855541 +2020, -0.518630, -0.000000, 0.000000, 0.854999 +2021, -0.519526, -0.000000, 0.000000, 0.854455 +2022, -0.520420, -0.000000, 0.000000, 0.853910 +2023, -0.521315, -0.000000, 0.000000, 0.853365 +2024, -0.522208, -0.000000, 0.000000, 0.852818 +2025, -0.523101, -0.000000, 0.000000, 0.852270 +2026, -0.523994, -0.000000, 0.000000, 0.851722 +2027, -0.524886, -0.000000, 0.000000, 0.851173 +2028, -0.525777, -0.000000, 0.000000, 0.850622 +2029, -0.526668, -0.000000, 0.000000, 0.850071 +2030, -0.527558, -0.000000, 0.000000, 0.849519 +2031, -0.528448, -0.000000, 0.000000, 0.848966 +2032, -0.529337, -0.000000, 0.000000, 0.848412 +2033, -0.530225, -0.000000, 0.000000, 0.847857 +2034, -0.531113, -0.000000, 0.000000, 0.847301 +2035, -0.532000, -0.000000, 0.000000, 0.846744 +2036, -0.532887, -0.000000, 0.000000, 0.846186 +2037, -0.533773, -0.000000, 0.000000, 0.845628 +2038, -0.534659, -0.000000, 0.000000, 0.845068 +2039, -0.535544, -0.000000, 0.000000, 0.844507 +2040, -0.536428, -0.000000, 0.000000, 0.843946 +2041, -0.537312, -0.000000, 0.000000, 0.843384 +2042, -0.538195, -0.000000, 0.000000, 0.842820 +2043, -0.539078, -0.000000, 0.000000, 0.842256 +2044, -0.539960, -0.000000, 0.000000, 0.841691 +2045, -0.540841, -0.000000, 0.000000, 0.841125 +2046, -0.541722, -0.000000, 0.000000, 0.840558 +2047, -0.542602, -0.000000, 0.000000, 0.839990 +2048, -0.543482, -0.000000, 0.000000, 0.839421 +2049, -0.544361, -0.000000, 0.000000, 0.838851 +2050, -0.545239, -0.000000, 0.000000, 0.838280 +2051, -0.546117, -0.000000, 0.000000, 0.837709 +2052, -0.546994, -0.000000, 0.000000, 0.837136 +2053, -0.547871, -0.000000, 0.000000, 0.836563 +2054, -0.548747, -0.000000, 0.000000, 0.835988 +2055, -0.549622, -0.000000, 0.000000, 0.835413 +2056, -0.550497, -0.000000, 0.000000, 0.834837 +2057, -0.551371, -0.000000, 0.000000, 0.834260 +2058, -0.552245, -0.000000, 0.000000, 0.833682 +2059, -0.553118, -0.000000, 0.000000, 0.833103 +2060, -0.553991, -0.000000, 0.000000, 0.832523 +2061, -0.554862, -0.000000, 0.000000, 0.831942 +2062, -0.555734, -0.000000, 0.000000, 0.831360 +2063, -0.556604, -0.000000, 0.000000, 0.830778 +2064, -0.557474, -0.000000, 0.000000, 0.830194 +2065, -0.558343, -0.000000, 0.000000, 0.829610 +2066, -0.559212, -0.000000, 0.000000, 0.829025 +2067, -0.560080, -0.000000, 0.000000, 0.828438 +2068, -0.560948, -0.000000, 0.000000, 0.827851 +2069, -0.561815, -0.000000, 0.000000, 0.827263 +2070, -0.562681, -0.000000, 0.000000, 0.826674 +2071, -0.563547, -0.000000, 0.000000, 0.826084 +2072, -0.564412, -0.000000, 0.000000, 0.825493 +2073, -0.565276, -0.000000, 0.000000, 0.824902 +2074, -0.566140, -0.000000, 0.000000, 0.824309 +2075, -0.567003, -0.000000, 0.000000, 0.823716 +2076, -0.567866, -0.000000, 0.000000, 0.823121 +2077, -0.568728, -0.000000, 0.000000, 0.822526 +2078, -0.569589, -0.000000, 0.000000, 0.821930 +2079, -0.570450, -0.000000, 0.000000, 0.821333 +2080, -0.571310, -0.000000, 0.000000, 0.820734 +2081, -0.572169, -0.000000, 0.000000, 0.820136 +2082, -0.573028, -0.000000, 0.000000, 0.819536 +2083, -0.573886, -0.000000, 0.000000, 0.818935 +2084, -0.574744, -0.000000, 0.000000, 0.818333 +2085, -0.575601, -0.000000, 0.000000, 0.817731 +2086, -0.576457, -0.000000, 0.000000, 0.817127 +2087, -0.577313, -0.000000, 0.000000, 0.816523 +2088, -0.578168, -0.000000, 0.000000, 0.815918 +2089, -0.579022, -0.000000, 0.000000, 0.815312 +2090, -0.579876, -0.000000, 0.000000, 0.814705 +2091, -0.580729, -0.000000, 0.000000, 0.814097 +2092, -0.581581, -0.000000, 0.000000, 0.813488 +2093, -0.582433, -0.000000, 0.000000, 0.812878 +2094, -0.583285, -0.000000, 0.000000, 0.812268 +2095, -0.584135, -0.000000, 0.000000, 0.811656 +2096, -0.584985, -0.000000, 0.000000, 0.811044 +2097, -0.585834, -0.000000, 0.000000, 0.810431 +2098, -0.586683, -0.000000, 0.000000, 0.809817 +2099, -0.587531, -0.000000, 0.000000, 0.809202 +2100, -0.588378, -0.000000, 0.000000, 0.808586 +2101, -0.589225, -0.000000, 0.000000, 0.807969 +2102, -0.590071, -0.000000, 0.000000, 0.807351 +2103, -0.590917, -0.000000, 0.000000, 0.806733 +2104, -0.591761, -0.000000, 0.000000, 0.806113 +2105, -0.592605, -0.000000, 0.000000, 0.805493 +2106, -0.593449, -0.000000, 0.000000, 0.804872 +2107, -0.594292, -0.000000, 0.000000, 0.804250 +2108, -0.595134, -0.000000, 0.000000, 0.803627 +2109, -0.595975, -0.000000, 0.000000, 0.803003 +2110, -0.596816, -0.000000, 0.000000, 0.802378 +2111, -0.597656, -0.000000, 0.000000, 0.801752 +2112, -0.598496, -0.000000, 0.000000, 0.801126 +2113, -0.599335, -0.000000, 0.000000, 0.800498 +2114, -0.600173, -0.000000, 0.000000, 0.799870 +2115, -0.601011, -0.000000, 0.000000, 0.799241 +2116, -0.601848, -0.000000, 0.000000, 0.798611 +2117, -0.602684, -0.000000, 0.000000, 0.797980 +2118, -0.603519, -0.000000, 0.000000, 0.797348 +2119, -0.604354, -0.000000, 0.000000, 0.796716 +2120, -0.605189, -0.000000, 0.000000, 0.796082 +2121, -0.606022, -0.000000, 0.000000, 0.795448 +2122, -0.606855, -0.000000, 0.000000, 0.794812 +2123, -0.607687, -0.000000, 0.000000, 0.794176 +2124, -0.608519, -0.000000, 0.000000, 0.793539 +2125, -0.609350, -0.000000, 0.000000, 0.792901 +2126, -0.610180, -0.000000, 0.000000, 0.792263 +2127, -0.611010, -0.000000, 0.000000, 0.791623 +2128, -0.611839, -0.000000, 0.000000, 0.790983 +2129, -0.612667, -0.000000, 0.000000, 0.790341 +2130, -0.613495, -0.000000, 0.000000, 0.789699 +2131, -0.614321, -0.000000, 0.000000, 0.789056 +2132, -0.615148, -0.000000, 0.000000, 0.788412 +2133, -0.615973, -0.000000, 0.000000, 0.787767 +2134, -0.616798, -0.000000, 0.000000, 0.787121 +2135, -0.617622, -0.000000, 0.000000, 0.786475 +2136, -0.618446, -0.000000, 0.000000, 0.785827 +2137, -0.619269, -0.000000, 0.000000, 0.785179 +2138, -0.620091, -0.000000, 0.000000, 0.784530 +2139, -0.620912, -0.000000, 0.000000, 0.783880 +2140, -0.621733, -0.000000, 0.000000, 0.783229 +2141, -0.622553, -0.000000, 0.000000, 0.782577 +2142, -0.623373, -0.000000, 0.000000, 0.781925 +2143, -0.624192, -0.000000, 0.000000, 0.781271 +2144, -0.625010, -0.000000, 0.000000, 0.780617 +2145, -0.625827, -0.000000, 0.000000, 0.779962 +2146, -0.626644, -0.000000, 0.000000, 0.779306 +2147, -0.627460, -0.000000, 0.000000, 0.778649 +2148, -0.628275, -0.000000, 0.000000, 0.777991 +2149, -0.629090, -0.000000, 0.000000, 0.777333 +2150, -0.629904, -0.000000, 0.000000, 0.776673 +2151, -0.630717, -0.000000, 0.000000, 0.776013 +2152, -0.631529, -0.000000, 0.000000, 0.775352 +2153, -0.632341, -0.000000, 0.000000, 0.774690 +2154, -0.633153, -0.000000, 0.000000, 0.774027 +2155, -0.633963, -0.000000, 0.000000, 0.773363 +2156, -0.634773, -0.000000, 0.000000, 0.772699 +2157, -0.635582, -0.000000, 0.000000, 0.772033 +2158, -0.636390, -0.000000, 0.000000, 0.771367 +2159, -0.637198, -0.000000, 0.000000, 0.770700 +2160, -0.638005, -0.000000, 0.000000, 0.770032 +2161, -0.638811, -0.000000, 0.000000, 0.769363 +2162, -0.639617, -0.000000, 0.000000, 0.768694 +2163, -0.640422, -0.000000, 0.000000, 0.768023 +2164, -0.641226, -0.000000, 0.000000, 0.767352 +2165, -0.642029, -0.000000, 0.000000, 0.766680 +2166, -0.642832, -0.000000, 0.000000, 0.766007 +2167, -0.643634, -0.000000, 0.000000, 0.765333 +2168, -0.644436, -0.000000, 0.000000, 0.764659 +2169, -0.645236, -0.000000, 0.000000, 0.763983 +2170, -0.646036, -0.000000, 0.000000, 0.763307 +2171, -0.646835, -0.000000, 0.000000, 0.762630 +2172, -0.647634, -0.000000, 0.000000, 0.761952 +2173, -0.648432, -0.000000, 0.000000, 0.761273 +2174, -0.649229, -0.000000, 0.000000, 0.760593 +2175, -0.650025, -0.000000, 0.000000, 0.759913 +2176, -0.650821, -0.000000, 0.000000, 0.759231 +2177, -0.651616, -0.000000, 0.000000, 0.758549 +2178, -0.652410, -0.000000, 0.000000, 0.757866 +2179, -0.653204, -0.000000, 0.000000, 0.757182 +2180, -0.653997, -0.000000, 0.000000, 0.756497 +2181, -0.654789, -0.000000, 0.000000, 0.755812 +2182, -0.655580, -0.000000, 0.000000, 0.755126 +2183, -0.656371, -0.000000, 0.000000, 0.754438 +2184, -0.657161, -0.000000, 0.000000, 0.753750 +2185, -0.657950, -0.000000, 0.000000, 0.753062 +2186, -0.658739, -0.000000, 0.000000, 0.752372 +2187, -0.659526, -0.000000, 0.000000, 0.751682 +2188, -0.660313, -0.000000, 0.000000, 0.750990 +2189, -0.661100, -0.000000, 0.000000, 0.750298 +2190, -0.661885, -0.000000, 0.000000, 0.749605 +2191, -0.662670, -0.000000, 0.000000, 0.748911 +2192, -0.663454, -0.000000, 0.000000, 0.748217 +2193, -0.664238, -0.000000, 0.000000, 0.747521 +2194, -0.665020, -0.000000, 0.000000, 0.746825 +2195, -0.665802, -0.000000, 0.000000, 0.746128 +2196, -0.666584, -0.000000, 0.000000, 0.745430 +2197, -0.667364, -0.000000, 0.000000, 0.744732 +2198, -0.668144, -0.000000, 0.000000, 0.744032 +2199, -0.668923, -0.000000, 0.000000, 0.743332 +2200, -0.669701, -0.000000, 0.000000, 0.742631 +2201, -0.670479, -0.000000, 0.000000, 0.741929 +2202, -0.671256, -0.000000, 0.000000, 0.741226 +2203, -0.672032, -0.000000, 0.000000, 0.740522 +2204, -0.672807, -0.000000, 0.000000, 0.739818 +2205, -0.673582, -0.000000, 0.000000, 0.739113 +2206, -0.674356, -0.000000, 0.000000, 0.738407 +2207, -0.675129, -0.000000, 0.000000, 0.737700 +2208, -0.675901, -0.000000, 0.000000, 0.736992 +2209, -0.676673, -0.000000, 0.000000, 0.736284 +2210, -0.677444, -0.000000, 0.000000, 0.735575 +2211, -0.678214, -0.000000, 0.000000, 0.734864 +2212, -0.678983, -0.000000, 0.000000, 0.734154 +2213, -0.679752, -0.000000, 0.000000, 0.733442 +2214, -0.680520, -0.000000, 0.000000, 0.732729 +2215, -0.681287, -0.000000, 0.000000, 0.732016 +2216, -0.682054, -0.000000, 0.000000, 0.731302 +2217, -0.682819, -0.000000, 0.000000, 0.730587 +2218, -0.683584, -0.000000, 0.000000, 0.729872 +2219, -0.684349, -0.000000, 0.000000, 0.729155 +2220, -0.685112, -0.000000, 0.000000, 0.728438 +2221, -0.685875, -0.000000, 0.000000, 0.727720 +2222, -0.686637, -0.000000, 0.000000, 0.727001 +2223, -0.687398, -0.000000, 0.000000, 0.726281 +2224, -0.688158, -0.000000, 0.000000, 0.725561 +2225, -0.688918, -0.000000, 0.000000, 0.724839 +2226, -0.689677, -0.000000, 0.000000, 0.724117 +2227, -0.690435, -0.000000, 0.000000, 0.723394 +2228, -0.691192, -0.000000, 0.000000, 0.722671 +2229, -0.691949, -0.000000, 0.000000, 0.721946 +2230, -0.692705, -0.000000, 0.000000, 0.721221 +2231, -0.693460, -0.000000, 0.000000, 0.720495 +2232, -0.694214, -0.000000, 0.000000, 0.719768 +2233, -0.694968, -0.000000, 0.000000, 0.719041 +2234, -0.695721, -0.000000, 0.000000, 0.718312 +2235, -0.696473, -0.000000, 0.000000, 0.717583 +2236, -0.697224, -0.000000, 0.000000, 0.716853 +2237, -0.697975, -0.000000, 0.000000, 0.716122 +2238, -0.698725, -0.000000, 0.000000, 0.715391 +2239, -0.699474, -0.000000, 0.000000, 0.714658 +2240, -0.700222, -0.000000, 0.000000, 0.713925 +2241, -0.700969, -0.000000, 0.000000, 0.713191 +2242, -0.701716, -0.000000, 0.000000, 0.712457 +2243, -0.702462, -0.000000, 0.000000, 0.711721 +2244, -0.703207, -0.000000, 0.000000, 0.710985 +2245, -0.703952, -0.000000, 0.000000, 0.710248 +2246, -0.704695, -0.000000, 0.000000, 0.709510 +2247, -0.705438, -0.000000, 0.000000, 0.708771 +2248, -0.706180, -0.000000, 0.000000, 0.708032 +2249, -0.706922, -0.000000, 0.000000, 0.707292 +2250, -0.707662, -0.000000, 0.000000, 0.706551 +2251, -0.708402, -0.000000, 0.000000, 0.705809 +2252, -0.709141, -0.000000, 0.000000, 0.705067 +2253, -0.709879, -0.000000, 0.000000, 0.704324 +2254, -0.710616, -0.000000, 0.000000, 0.703580 +2255, -0.711353, -0.000000, 0.000000, 0.702835 +2256, -0.712089, -0.000000, 0.000000, 0.702089 +2257, -0.712824, -0.000000, 0.000000, 0.701343 +2258, -0.713558, -0.000000, 0.000000, 0.700596 +2259, -0.714292, -0.000000, 0.000000, 0.699848 +2260, -0.715025, -0.000000, 0.000000, 0.699099 +2261, -0.715757, -0.000000, 0.000000, 0.698350 +2262, -0.716488, -0.000000, 0.000000, 0.697600 +2263, -0.717218, -0.000000, 0.000000, 0.696849 +2264, -0.717948, -0.000000, 0.000000, 0.696097 +2265, -0.718676, -0.000000, 0.000000, 0.695345 +2266, -0.719404, -0.000000, 0.000000, 0.694591 +2267, -0.720132, -0.000000, 0.000000, 0.693837 +2268, -0.720858, -0.000000, 0.000000, 0.693083 +2269, -0.721584, -0.000000, 0.000000, 0.692327 +2270, -0.722309, -0.000000, 0.000000, 0.691571 +2271, -0.723033, -0.000000, 0.000000, 0.690814 +2272, -0.723756, -0.000000, 0.000000, 0.690056 +2273, -0.724478, -0.000000, 0.000000, 0.689297 +2274, -0.725200, -0.000000, 0.000000, 0.688538 +2275, -0.725921, -0.000000, 0.000000, 0.687778 +2276, -0.726641, -0.000000, 0.000000, 0.687017 +2277, -0.727360, -0.000000, 0.000000, 0.686256 +2278, -0.728079, -0.000000, 0.000000, 0.685493 +2279, -0.728797, -0.000000, 0.000000, 0.684730 +2280, -0.729513, -0.000000, 0.000000, 0.683967 +2281, -0.730229, -0.000000, 0.000000, 0.683202 +2282, -0.730945, -0.000000, 0.000000, 0.682437 +2283, -0.731659, -0.000000, 0.000000, 0.681671 +2284, -0.732373, -0.000000, 0.000000, 0.680904 +2285, -0.733086, -0.000000, 0.000000, 0.680136 +2286, -0.733798, -0.000000, 0.000000, 0.679368 +2287, -0.734509, -0.000000, 0.000000, 0.678599 +2288, -0.735220, -0.000000, 0.000000, 0.677829 +2289, -0.735929, -0.000000, 0.000000, 0.677058 +2290, -0.736638, -0.000000, 0.000000, 0.676287 +2291, -0.737346, -0.000000, 0.000000, 0.675515 +2292, -0.738053, -0.000000, 0.000000, 0.674742 +2293, -0.738760, -0.000000, 0.000000, 0.673969 +2294, -0.739465, -0.000000, 0.000000, 0.673195 +2295, -0.740170, -0.000000, 0.000000, 0.672420 +2296, -0.740874, -0.000000, 0.000000, 0.671644 +2297, -0.741577, -0.000000, 0.000000, 0.670867 +2298, -0.742280, -0.000000, 0.000000, 0.670090 +2299, -0.742981, -0.000000, 0.000000, 0.669312 +2300, -0.743682, -0.000000, 0.000000, 0.668534 +2301, -0.744382, -0.000000, 0.000000, 0.667754 +2302, -0.745081, -0.000000, 0.000000, 0.666974 +2303, -0.745779, -0.000000, 0.000000, 0.666193 +2304, -0.746477, -0.000000, 0.000000, 0.665412 +2305, -0.747173, -0.000000, 0.000000, 0.664629 +2306, -0.747869, -0.000000, 0.000000, 0.663846 +2307, -0.748564, -0.000000, 0.000000, 0.663062 +2308, -0.749258, -0.000000, 0.000000, 0.662278 +2309, -0.749952, -0.000000, 0.000000, 0.661493 +2310, -0.750644, -0.000000, 0.000000, 0.660707 +2311, -0.751336, -0.000000, 0.000000, 0.659920 +2312, -0.752027, -0.000000, 0.000000, 0.659132 +2313, -0.752717, -0.000000, 0.000000, 0.658344 +2314, -0.753406, -0.000000, 0.000000, 0.657555 +2315, -0.754095, -0.000000, 0.000000, 0.656766 +2316, -0.754782, -0.000000, 0.000000, 0.655976 +2317, -0.755469, -0.000000, 0.000000, 0.655185 +2318, -0.756155, -0.000000, 0.000000, 0.654393 +2319, -0.756840, -0.000000, 0.000000, 0.653600 +2320, -0.757524, -0.000000, 0.000000, 0.652807 +2321, -0.758208, -0.000000, 0.000000, 0.652013 +2322, -0.758890, -0.000000, 0.000000, 0.651219 +2323, -0.759572, -0.000000, 0.000000, 0.650423 +2324, -0.760253, -0.000000, 0.000000, 0.649627 +2325, -0.760933, -0.000000, 0.000000, 0.648830 +2326, -0.761612, -0.000000, 0.000000, 0.648033 +2327, -0.762291, -0.000000, 0.000000, 0.647235 +2328, -0.762968, -0.000000, 0.000000, 0.646436 +2329, -0.763645, -0.000000, 0.000000, 0.645636 +2330, -0.764321, -0.000000, 0.000000, 0.644836 +2331, -0.764996, -0.000000, 0.000000, 0.644035 +2332, -0.765670, -0.000000, 0.000000, 0.643233 +2333, -0.766344, -0.000000, 0.000000, 0.642431 +2334, -0.767016, -0.000000, 0.000000, 0.641628 +2335, -0.767688, -0.000000, 0.000000, 0.640824 +2336, -0.768359, -0.000000, 0.000000, 0.640019 +2337, -0.769029, -0.000000, 0.000000, 0.639214 +2338, -0.769698, -0.000000, 0.000000, 0.638408 +2339, -0.770366, -0.000000, 0.000000, 0.637602 +2340, -0.771034, -0.000000, 0.000000, 0.636794 +2341, -0.771700, -0.000000, 0.000000, 0.635986 +2342, -0.772366, -0.000000, 0.000000, 0.635177 +2343, -0.773031, -0.000000, 0.000000, 0.634368 +2344, -0.773695, -0.000000, 0.000000, 0.633558 +2345, -0.774359, -0.000000, 0.000000, 0.632747 +2346, -0.775021, -0.000000, 0.000000, 0.631935 +2347, -0.775683, -0.000000, 0.000000, 0.631123 +2348, -0.776343, -0.000000, 0.000000, 0.630310 +2349, -0.777003, -0.000000, 0.000000, 0.629497 +2350, -0.777662, -0.000000, 0.000000, 0.628682 +2351, -0.778320, -0.000000, 0.000000, 0.627867 +2352, -0.778978, -0.000000, 0.000000, 0.627052 +2353, -0.779634, -0.000000, 0.000000, 0.626235 +2354, -0.780290, -0.000000, 0.000000, 0.625418 +2355, -0.780944, -0.000000, 0.000000, 0.624601 +2356, -0.781598, -0.000000, 0.000000, 0.623782 +2357, -0.782251, -0.000000, 0.000000, 0.622963 +2358, -0.782903, -0.000000, 0.000000, 0.622143 +2359, -0.783555, -0.000000, 0.000000, 0.621323 +2360, -0.784205, -0.000000, 0.000000, 0.620502 +2361, -0.784855, -0.000000, 0.000000, 0.619680 +2362, -0.785503, -0.000000, 0.000000, 0.618857 +2363, -0.786151, -0.000000, 0.000000, 0.618034 +2364, -0.786798, -0.000000, 0.000000, 0.617210 +2365, -0.787444, -0.000000, 0.000000, 0.616386 +2366, -0.788090, -0.000000, 0.000000, 0.615561 +2367, -0.788734, -0.000000, 0.000000, 0.614735 +2368, -0.789377, -0.000000, 0.000000, 0.613908 +2369, -0.790020, -0.000000, 0.000000, 0.613081 +2370, -0.790662, -0.000000, 0.000000, 0.612253 +2371, -0.791303, -0.000000, 0.000000, 0.611424 +2372, -0.791943, -0.000000, 0.000000, 0.610595 +2373, -0.792582, -0.000000, 0.000000, 0.609765 +2374, -0.793220, -0.000000, 0.000000, 0.608935 +2375, -0.793858, -0.000000, 0.000000, 0.608103 +2376, -0.794494, -0.000000, 0.000000, 0.607271 +2377, -0.795130, -0.000000, 0.000000, 0.606439 +2378, -0.795765, -0.000000, 0.000000, 0.605605 +2379, -0.796399, -0.000000, 0.000000, 0.604772 +2380, -0.797032, -0.000000, 0.000000, 0.603937 +2381, -0.797664, -0.000000, 0.000000, 0.603102 +2382, -0.798296, -0.000000, 0.000000, 0.602266 +2383, -0.798926, -0.000000, 0.000000, 0.601429 +2384, -0.799556, -0.000000, 0.000000, 0.600592 +2385, -0.800184, -0.000000, 0.000000, 0.599754 +2386, -0.800812, -0.000000, 0.000000, 0.598915 +2387, -0.801439, -0.000000, 0.000000, 0.598076 +2388, -0.802065, -0.000000, 0.000000, 0.597236 +2389, -0.802690, -0.000000, 0.000000, 0.596396 +2390, -0.803315, -0.000000, 0.000000, 0.595555 +2391, -0.803938, -0.000000, 0.000000, 0.594713 +2392, -0.804561, -0.000000, 0.000000, 0.593870 +2393, -0.805182, -0.000000, 0.000000, 0.593027 +2394, -0.805803, -0.000000, 0.000000, 0.592183 +2395, -0.806423, -0.000000, 0.000000, 0.591339 +2396, -0.807042, -0.000000, 0.000000, 0.590494 +2397, -0.807660, -0.000000, 0.000000, 0.589648 +2398, -0.808277, -0.000000, 0.000000, 0.588802 +2399, -0.808894, -0.000000, 0.000000, 0.587955 +2400, -0.809509, -0.000000, 0.000000, 0.587107 +2401, -0.810124, -0.000000, 0.000000, 0.586259 +2402, -0.810738, -0.000000, 0.000000, 0.585410 +2403, -0.811350, -0.000000, 0.000000, 0.584560 +2404, -0.811962, -0.000000, 0.000000, 0.583710 +2405, -0.812573, -0.000000, 0.000000, 0.582859 +2406, -0.813183, -0.000000, 0.000000, 0.582008 +2407, -0.813793, -0.000000, 0.000000, 0.581155 +2408, -0.814401, -0.000000, 0.000000, 0.580303 +2409, -0.815008, -0.000000, 0.000000, 0.579449 +2410, -0.815615, -0.000000, 0.000000, 0.578595 +2411, -0.816221, -0.000000, 0.000000, 0.577740 +2412, -0.816825, -0.000000, 0.000000, 0.576885 +2413, -0.817429, -0.000000, 0.000000, 0.576029 +2414, -0.818032, -0.000000, 0.000000, 0.575172 +2415, -0.818634, -0.000000, 0.000000, 0.574315 +2416, -0.819235, -0.000000, 0.000000, 0.573457 +2417, -0.819836, -0.000000, 0.000000, 0.572599 +2418, -0.820435, -0.000000, 0.000000, 0.571740 +2419, -0.821034, -0.000000, 0.000000, 0.570880 +2420, -0.821631, -0.000000, 0.000000, 0.570019 +2421, -0.822228, -0.000000, 0.000000, 0.569158 +2422, -0.822824, -0.000000, 0.000000, 0.568297 +2423, -0.823418, -0.000000, 0.000000, 0.567435 +2424, -0.824012, -0.000000, 0.000000, 0.566572 +2425, -0.824606, -0.000000, 0.000000, 0.565708 +2426, -0.825198, -0.000000, 0.000000, 0.564844 +2427, -0.825789, -0.000000, 0.000000, 0.563979 +2428, -0.826379, -0.000000, 0.000000, 0.563114 +2429, -0.826969, -0.000000, 0.000000, 0.562248 +2430, -0.827557, -0.000000, 0.000000, 0.561381 +2431, -0.828145, -0.000000, 0.000000, 0.560514 +2432, -0.828732, -0.000000, 0.000000, 0.559646 +2433, -0.829317, -0.000000, 0.000000, 0.558778 +2434, -0.829902, -0.000000, 0.000000, 0.557909 +2435, -0.830486, -0.000000, 0.000000, 0.557039 +2436, -0.831069, -0.000000, 0.000000, 0.556169 +2437, -0.831651, -0.000000, 0.000000, 0.555298 +2438, -0.832233, -0.000000, 0.000000, 0.554427 +2439, -0.832813, -0.000000, 0.000000, 0.553554 +2440, -0.833392, -0.000000, 0.000000, 0.552682 +2441, -0.833971, -0.000000, 0.000000, 0.551808 +2442, -0.834549, -0.000000, 0.000000, 0.550934 +2443, -0.835125, -0.000000, 0.000000, 0.550060 +2444, -0.835701, -0.000000, 0.000000, 0.549185 +2445, -0.836276, -0.000000, 0.000000, 0.548309 +2446, -0.836850, -0.000000, 0.000000, 0.547433 +2447, -0.837423, -0.000000, 0.000000, 0.546556 +2448, -0.837995, -0.000000, 0.000000, 0.545678 +2449, -0.838566, -0.000000, 0.000000, 0.544800 +2450, -0.839136, -0.000000, 0.000000, 0.543921 +2451, -0.839706, -0.000000, 0.000000, 0.543042 +2452, -0.840274, -0.000000, 0.000000, 0.542162 +2453, -0.840841, -0.000000, 0.000000, 0.541282 +2454, -0.841408, -0.000000, 0.000000, 0.540400 +2455, -0.841974, -0.000000, 0.000000, 0.539519 +2456, -0.842538, -0.000000, 0.000000, 0.538636 +2457, -0.843102, -0.000000, 0.000000, 0.537754 +2458, -0.843665, -0.000000, 0.000000, 0.536870 +2459, -0.844227, -0.000000, 0.000000, 0.535986 +2460, -0.844788, -0.000000, 0.000000, 0.535101 +2461, -0.845348, -0.000000, 0.000000, 0.534216 +2462, -0.845907, -0.000000, 0.000000, 0.533330 +2463, -0.846465, -0.000000, 0.000000, 0.532444 +2464, -0.847023, -0.000000, 0.000000, 0.531557 +2465, -0.847579, -0.000000, 0.000000, 0.530669 +2466, -0.848134, -0.000000, 0.000000, 0.529781 +2467, -0.848689, -0.000000, 0.000000, 0.528892 +2468, -0.849243, -0.000000, 0.000000, 0.528003 +2469, -0.849795, -0.000000, 0.000000, 0.527113 +2470, -0.850347, -0.000000, 0.000000, 0.526223 +2471, -0.850898, -0.000000, 0.000000, 0.525332 +2472, -0.851447, -0.000000, 0.000000, 0.524440 +2473, -0.851996, -0.000000, 0.000000, 0.523548 +2474, -0.852544, -0.000000, 0.000000, 0.522655 +2475, -0.853091, -0.000000, 0.000000, 0.521761 +2476, -0.853638, -0.000000, 0.000000, 0.520868 +2477, -0.854183, -0.000000, 0.000000, 0.519973 +2478, -0.854727, -0.000000, 0.000000, 0.519078 +2479, -0.855270, -0.000000, 0.000000, 0.518182 +2480, -0.855813, -0.000000, 0.000000, 0.517286 +2481, -0.856354, -0.000000, 0.000000, 0.516389 +2482, -0.856894, -0.000000, 0.000000, 0.515492 +2483, -0.857434, -0.000000, 0.000000, 0.514594 +2484, -0.857973, -0.000000, 0.000000, 0.513696 +2485, -0.858510, -0.000000, 0.000000, 0.512797 +2486, -0.859047, -0.000000, 0.000000, 0.511897 +2487, -0.859583, -0.000000, 0.000000, 0.510997 +2488, -0.860117, -0.000000, 0.000000, 0.510096 +2489, -0.860651, -0.000000, 0.000000, 0.509195 +2490, -0.861184, -0.000000, 0.000000, 0.508293 +2491, -0.861716, -0.000000, 0.000000, 0.507390 +2492, -0.862247, -0.000000, 0.000000, 0.506487 +2493, -0.862777, -0.000000, 0.000000, 0.505584 +2494, -0.863307, -0.000000, 0.000000, 0.504680 +2495, -0.863835, -0.000000, 0.000000, 0.503775 +2496, -0.864362, -0.000000, 0.000000, 0.502870 +2497, -0.864888, -0.000000, 0.000000, 0.501964 +2498, -0.865414, -0.000000, 0.000000, 0.501058 +2499, -0.865938, -0.000000, 0.000000, 0.500151 +2500, -0.866462, -0.000000, 0.000000, 0.499244 +2501, -0.866984, -0.000000, 0.000000, 0.498336 +2502, -0.867506, -0.000000, 0.000000, 0.497427 +2503, -0.868026, -0.000000, 0.000000, 0.496518 +2504, -0.868546, -0.000000, 0.000000, 0.495609 +2505, -0.869065, -0.000000, 0.000000, 0.494699 +2506, -0.869582, -0.000000, 0.000000, 0.493788 +2507, -0.870099, -0.000000, 0.000000, 0.492877 +2508, -0.870615, -0.000000, 0.000000, 0.491965 +2509, -0.871130, -0.000000, 0.000000, 0.491053 +2510, -0.871644, -0.000000, 0.000000, 0.490140 +2511, -0.872157, -0.000000, 0.000000, 0.489227 +2512, -0.872669, -0.000000, 0.000000, 0.488313 +2513, -0.873180, -0.000000, 0.000000, 0.487398 +2514, -0.873690, -0.000000, 0.000000, 0.486483 +2515, -0.874199, -0.000000, 0.000000, 0.485568 +2516, -0.874707, -0.000000, 0.000000, 0.484652 +2517, -0.875214, -0.000000, 0.000000, 0.483735 +2518, -0.875721, -0.000000, 0.000000, 0.482818 +2519, -0.876226, -0.000000, 0.000000, 0.481901 +2520, -0.876730, -0.000000, 0.000000, 0.480982 +2521, -0.877234, -0.000000, 0.000000, 0.480064 +2522, -0.877736, -0.000000, 0.000000, 0.479145 +2523, -0.878237, -0.000000, 0.000000, 0.478225 +2524, -0.878738, -0.000000, 0.000000, 0.477305 +2525, -0.879237, -0.000000, 0.000000, 0.476384 +2526, -0.879736, -0.000000, 0.000000, 0.475462 +2527, -0.880234, -0.000000, 0.000000, 0.474541 +2528, -0.880730, -0.000000, 0.000000, 0.473618 +2529, -0.881226, -0.000000, 0.000000, 0.472695 +2530, -0.881721, -0.000000, 0.000000, 0.471772 +2531, -0.882214, -0.000000, 0.000000, 0.470848 +2532, -0.882707, -0.000000, 0.000000, 0.469924 +2533, -0.883199, -0.000000, 0.000000, 0.468999 +2534, -0.883690, -0.000000, 0.000000, 0.468073 +2535, -0.884179, -0.000000, 0.000000, 0.467147 +2536, -0.884668, -0.000000, 0.000000, 0.466221 +2537, -0.885156, -0.000000, 0.000000, 0.465294 +2538, -0.885643, -0.000000, 0.000000, 0.464366 +2539, -0.886129, -0.000000, 0.000000, 0.463438 +2540, -0.886614, -0.000000, 0.000000, 0.462510 +2541, -0.887098, -0.000000, 0.000000, 0.461581 +2542, -0.887581, -0.000000, 0.000000, 0.460651 +2543, -0.888063, -0.000000, 0.000000, 0.459721 +2544, -0.888544, -0.000000, 0.000000, 0.458791 +2545, -0.889024, -0.000000, 0.000000, 0.457860 +2546, -0.889504, -0.000000, 0.000000, 0.456928 +2547, -0.889982, -0.000000, 0.000000, 0.455996 +2548, -0.890459, -0.000000, 0.000000, 0.455064 +2549, -0.890935, -0.000000, 0.000000, 0.454130 +2550, -0.891410, -0.000000, 0.000000, 0.453197 +2551, -0.891885, -0.000000, 0.000000, 0.452263 +2552, -0.892358, -0.000000, 0.000000, 0.451328 +2553, -0.892830, -0.000000, 0.000000, 0.450393 +2554, -0.893302, -0.000000, 0.000000, 0.449458 +2555, -0.893772, -0.000000, 0.000000, 0.448522 +2556, -0.894241, -0.000000, 0.000000, 0.447585 +2557, -0.894710, -0.000000, 0.000000, 0.446648 +2558, -0.895177, -0.000000, 0.000000, 0.445711 +2559, -0.895643, -0.000000, 0.000000, 0.444773 +2560, -0.896109, -0.000000, 0.000000, 0.443834 +2561, -0.896573, -0.000000, 0.000000, 0.442895 +2562, -0.897037, -0.000000, 0.000000, 0.441956 +2563, -0.897499, -0.000000, 0.000000, 0.441016 +2564, -0.897961, -0.000000, 0.000000, 0.440076 +2565, -0.898421, -0.000000, 0.000000, 0.439135 +2566, -0.898881, -0.000000, 0.000000, 0.438193 +2567, -0.899339, -0.000000, 0.000000, 0.437251 +2568, -0.899797, -0.000000, 0.000000, 0.436309 +2569, -0.900253, -0.000000, 0.000000, 0.435366 +2570, -0.900709, -0.000000, 0.000000, 0.434423 +2571, -0.901164, -0.000000, 0.000000, 0.433479 +2572, -0.901617, -0.000000, 0.000000, 0.432535 +2573, -0.902070, -0.000000, 0.000000, 0.431590 +2574, -0.902521, -0.000000, 0.000000, 0.430645 +2575, -0.902972, -0.000000, 0.000000, 0.429699 +2576, -0.903422, -0.000000, 0.000000, 0.428753 +2577, -0.903870, -0.000000, 0.000000, 0.427807 +2578, -0.904318, -0.000000, 0.000000, 0.426860 +2579, -0.904765, -0.000000, 0.000000, 0.425912 +2580, -0.905210, -0.000000, 0.000000, 0.424964 +2581, -0.905655, -0.000000, 0.000000, 0.424015 +2582, -0.906099, -0.000000, 0.000000, 0.423067 +2583, -0.906541, -0.000000, 0.000000, 0.422117 +2584, -0.906983, -0.000000, 0.000000, 0.421167 +2585, -0.907424, -0.000000, 0.000000, 0.420217 +2586, -0.907863, -0.000000, 0.000000, 0.419266 +2587, -0.908302, -0.000000, 0.000000, 0.418315 +2588, -0.908740, -0.000000, 0.000000, 0.417363 +2589, -0.909177, -0.000000, 0.000000, 0.416411 +2590, -0.909612, -0.000000, 0.000000, 0.415458 +2591, -0.910047, -0.000000, 0.000000, 0.414505 +2592, -0.910481, -0.000000, 0.000000, 0.413552 +2593, -0.910913, -0.000000, 0.000000, 0.412598 +2594, -0.911345, -0.000000, 0.000000, 0.411643 +2595, -0.911776, -0.000000, 0.000000, 0.410688 +2596, -0.912206, -0.000000, 0.000000, 0.409733 +2597, -0.912634, -0.000000, 0.000000, 0.408777 +2598, -0.913062, -0.000000, 0.000000, 0.407821 +2599, -0.913489, -0.000000, 0.000000, 0.406864 +2600, -0.913914, -0.000000, 0.000000, 0.405907 +2601, -0.914339, -0.000000, 0.000000, 0.404950 +2602, -0.914763, -0.000000, 0.000000, 0.403991 +2603, -0.915185, -0.000000, 0.000000, 0.403033 +2604, -0.915607, -0.000000, 0.000000, 0.402074 +2605, -0.916028, -0.000000, 0.000000, 0.401115 +2606, -0.916448, -0.000000, 0.000000, 0.400155 +2607, -0.916866, -0.000000, 0.000000, 0.399195 +2608, -0.917284, -0.000000, 0.000000, 0.398234 +2609, -0.917701, -0.000000, 0.000000, 0.397273 +2610, -0.918116, -0.000000, 0.000000, 0.396311 +2611, -0.918531, -0.000000, 0.000000, 0.395349 +2612, -0.918944, -0.000000, 0.000000, 0.394387 +2613, -0.919357, -0.000000, 0.000000, 0.393424 +2614, -0.919769, -0.000000, 0.000000, 0.392461 +2615, -0.920179, -0.000000, 0.000000, 0.391497 +2616, -0.920589, -0.000000, 0.000000, 0.390533 +2617, -0.920998, -0.000000, 0.000000, 0.389568 +2618, -0.921405, -0.000000, 0.000000, 0.388603 +2619, -0.921812, -0.000000, 0.000000, 0.387638 +2620, -0.922217, -0.000000, 0.000000, 0.386672 +2621, -0.922622, -0.000000, 0.000000, 0.385706 +2622, -0.923025, -0.000000, 0.000000, 0.384739 +2623, -0.923428, -0.000000, 0.000000, 0.383772 +2624, -0.923829, -0.000000, 0.000000, 0.382804 +2625, -0.924230, -0.000000, 0.000000, 0.381836 +2626, -0.924629, -0.000000, 0.000000, 0.380868 +2627, -0.925028, -0.000000, 0.000000, 0.379899 +2628, -0.925425, -0.000000, 0.000000, 0.378930 +2629, -0.925822, -0.000000, 0.000000, 0.377960 +2630, -0.926217, -0.000000, 0.000000, 0.376990 +2631, -0.926612, -0.000000, 0.000000, 0.376020 +2632, -0.927005, -0.000000, 0.000000, 0.375049 +2633, -0.927397, -0.000000, 0.000000, 0.374078 +2634, -0.927789, -0.000000, 0.000000, 0.373106 +2635, -0.928179, -0.000000, 0.000000, 0.372134 +2636, -0.928568, -0.000000, 0.000000, 0.371161 +2637, -0.928957, -0.000000, 0.000000, 0.370188 +2638, -0.929344, -0.000000, 0.000000, 0.369215 +2639, -0.929730, -0.000000, 0.000000, 0.368241 +2640, -0.930115, -0.000000, 0.000000, 0.367267 +2641, -0.930500, -0.000000, 0.000000, 0.366293 +2642, -0.930883, -0.000000, 0.000000, 0.365318 +2643, -0.931265, -0.000000, 0.000000, 0.364342 +2644, -0.931646, -0.000000, 0.000000, 0.363367 +2645, -0.932026, -0.000000, 0.000000, 0.362391 +2646, -0.932405, -0.000000, 0.000000, 0.361414 +2647, -0.932784, -0.000000, 0.000000, 0.360437 +2648, -0.933161, -0.000000, 0.000000, 0.359460 +2649, -0.933537, -0.000000, 0.000000, 0.358482 +2650, -0.933912, -0.000000, 0.000000, 0.357504 +2651, -0.934286, -0.000000, 0.000000, 0.356525 +2652, -0.934659, -0.000000, 0.000000, 0.355547 +2653, -0.935031, -0.000000, 0.000000, 0.354567 +2654, -0.935401, -0.000000, 0.000000, 0.353588 +2655, -0.935771, -0.000000, 0.000000, 0.352607 +2656, -0.936140, -0.000000, 0.000000, 0.351627 +2657, -0.936508, -0.000000, 0.000000, 0.350646 +2658, -0.936875, -0.000000, 0.000000, 0.349665 +2659, -0.937241, -0.000000, 0.000000, 0.348683 +2660, -0.937605, -0.000000, 0.000000, 0.347701 +2661, -0.937969, -0.000000, 0.000000, 0.346719 +2662, -0.938332, -0.000000, 0.000000, 0.345736 +2663, -0.938693, -0.000000, 0.000000, 0.344753 +2664, -0.939054, -0.000000, 0.000000, 0.343770 +2665, -0.939414, -0.000000, 0.000000, 0.342786 +2666, -0.939772, -0.000000, 0.000000, 0.341801 +2667, -0.940130, -0.000000, 0.000000, 0.340817 +2668, -0.940486, -0.000000, 0.000000, 0.339832 +2669, -0.940842, -0.000000, 0.000000, 0.338846 +2670, -0.941196, -0.000000, 0.000000, 0.337861 +2671, -0.941550, -0.000000, 0.000000, 0.336874 +2672, -0.941902, -0.000000, 0.000000, 0.335888 +2673, -0.942253, -0.000000, 0.000000, 0.334901 +2674, -0.942604, -0.000000, 0.000000, 0.333914 +2675, -0.942953, -0.000000, 0.000000, 0.332926 +2676, -0.943301, -0.000000, 0.000000, 0.331938 +2677, -0.943648, -0.000000, 0.000000, 0.330950 +2678, -0.943994, -0.000000, 0.000000, 0.329961 +2679, -0.944340, -0.000000, 0.000000, 0.328972 +2680, -0.944684, -0.000000, 0.000000, 0.327983 +2681, -0.945027, -0.000000, 0.000000, 0.326993 +2682, -0.945369, -0.000000, 0.000000, 0.326003 +2683, -0.945710, -0.000000, 0.000000, 0.325012 +2684, -0.946050, -0.000000, 0.000000, 0.324021 +2685, -0.946389, -0.000000, 0.000000, 0.323030 +2686, -0.946727, -0.000000, 0.000000, 0.322039 +2687, -0.947063, -0.000000, 0.000000, 0.321047 +2688, -0.947399, -0.000000, 0.000000, 0.320055 +2689, -0.947734, -0.000000, 0.000000, 0.319062 +2690, -0.948068, -0.000000, 0.000000, 0.318069 +2691, -0.948400, -0.000000, 0.000000, 0.317076 +2692, -0.948732, -0.000000, 0.000000, 0.316082 +2693, -0.949062, -0.000000, 0.000000, 0.315088 +2694, -0.949392, -0.000000, 0.000000, 0.314094 +2695, -0.949721, -0.000000, 0.000000, 0.313099 +2696, -0.950048, -0.000000, 0.000000, 0.312104 +2697, -0.950374, -0.000000, 0.000000, 0.311108 +2698, -0.950700, -0.000000, 0.000000, 0.310113 +2699, -0.951024, -0.000000, 0.000000, 0.309117 +2700, -0.951347, -0.000000, 0.000000, 0.308120 +2701, -0.951670, -0.000000, 0.000000, 0.307123 +2702, -0.951991, -0.000000, 0.000000, 0.306126 +2703, -0.952311, -0.000000, 0.000000, 0.305129 +2704, -0.952630, -0.000000, 0.000000, 0.304131 +2705, -0.952948, -0.000000, 0.000000, 0.303133 +2706, -0.953265, -0.000000, 0.000000, 0.302135 +2707, -0.953581, -0.000000, 0.000000, 0.301136 +2708, -0.953896, -0.000000, 0.000000, 0.300137 +2709, -0.954210, -0.000000, 0.000000, 0.299137 +2710, -0.954523, -0.000000, 0.000000, 0.298138 +2711, -0.954835, -0.000000, 0.000000, 0.297138 +2712, -0.955145, -0.000000, 0.000000, 0.296137 +2713, -0.955455, -0.000000, 0.000000, 0.295136 +2714, -0.955764, -0.000000, 0.000000, 0.294135 +2715, -0.956071, -0.000000, 0.000000, 0.293134 +2716, -0.956378, -0.000000, 0.000000, 0.292132 +2717, -0.956683, -0.000000, 0.000000, 0.291130 +2718, -0.956988, -0.000000, 0.000000, 0.290128 +2719, -0.957291, -0.000000, 0.000000, 0.289125 +2720, -0.957594, -0.000000, 0.000000, 0.288122 +2721, -0.957895, -0.000000, 0.000000, 0.287119 +2722, -0.958195, -0.000000, 0.000000, 0.286116 +2723, -0.958494, -0.000000, 0.000000, 0.285112 +2724, -0.958792, -0.000000, 0.000000, 0.284107 +2725, -0.959090, -0.000000, 0.000000, 0.283103 +2726, -0.959386, -0.000000, 0.000000, 0.282098 +2727, -0.959681, -0.000000, 0.000000, 0.281093 +2728, -0.959975, -0.000000, 0.000000, 0.280087 +2729, -0.960267, -0.000000, 0.000000, 0.279082 +2730, -0.960559, -0.000000, 0.000000, 0.278076 +2731, -0.960850, -0.000000, 0.000000, 0.277069 +2732, -0.961140, -0.000000, 0.000000, 0.276062 +2733, -0.961428, -0.000000, 0.000000, 0.275056 +2734, -0.961716, -0.000000, 0.000000, 0.274048 +2735, -0.962003, -0.000000, 0.000000, 0.273041 +2736, -0.962288, -0.000000, 0.000000, 0.272033 +2737, -0.962572, -0.000000, 0.000000, 0.271025 +2738, -0.962856, -0.000000, 0.000000, 0.270016 +2739, -0.963138, -0.000000, 0.000000, 0.269007 +2740, -0.963419, -0.000000, 0.000000, 0.267998 +2741, -0.963700, -0.000000, 0.000000, 0.266989 +2742, -0.963979, -0.000000, 0.000000, 0.265979 +2743, -0.964257, -0.000000, 0.000000, 0.264969 +2744, -0.964534, -0.000000, 0.000000, 0.263959 +2745, -0.964810, -0.000000, 0.000000, 0.262948 +2746, -0.965085, -0.000000, 0.000000, 0.261938 +2747, -0.965359, -0.000000, 0.000000, 0.260926 +2748, -0.965631, -0.000000, 0.000000, 0.259915 +2749, -0.965903, -0.000000, 0.000000, 0.258903 +2750, -0.966174, -0.000000, 0.000000, 0.257891 +2751, -0.966444, -0.000000, 0.000000, 0.256879 +2752, -0.966712, -0.000000, 0.000000, 0.255867 +2753, -0.966980, -0.000000, 0.000000, 0.254854 +2754, -0.967246, -0.000000, 0.000000, 0.253841 +2755, -0.967511, -0.000000, 0.000000, 0.252827 +2756, -0.967776, -0.000000, 0.000000, 0.251814 +2757, -0.968039, -0.000000, 0.000000, 0.250800 +2758, -0.968301, -0.000000, 0.000000, 0.249786 +2759, -0.968562, -0.000000, 0.000000, 0.248771 +2760, -0.968822, -0.000000, 0.000000, 0.247756 +2761, -0.969081, -0.000000, 0.000000, 0.246741 +2762, -0.969339, -0.000000, 0.000000, 0.245726 +2763, -0.969596, -0.000000, 0.000000, 0.244710 +2764, -0.969852, -0.000000, 0.000000, 0.243695 +2765, -0.970107, -0.000000, 0.000000, 0.242678 +2766, -0.970360, -0.000000, 0.000000, 0.241662 +2767, -0.970613, -0.000000, 0.000000, 0.240646 +2768, -0.970865, -0.000000, 0.000000, 0.239629 +2769, -0.971115, -0.000000, 0.000000, 0.238611 +2770, -0.971365, -0.000000, 0.000000, 0.237594 +2771, -0.971613, -0.000000, 0.000000, 0.236576 +2772, -0.971860, -0.000000, 0.000000, 0.235558 +2773, -0.972106, -0.000000, 0.000000, 0.234540 +2774, -0.972352, -0.000000, 0.000000, 0.233522 +2775, -0.972596, -0.000000, 0.000000, 0.232503 +2776, -0.972839, -0.000000, 0.000000, 0.231484 +2777, -0.973081, -0.000000, 0.000000, 0.230465 +2778, -0.973322, -0.000000, 0.000000, 0.229445 +2779, -0.973561, -0.000000, 0.000000, 0.228426 +2780, -0.973800, -0.000000, 0.000000, 0.227406 +2781, -0.974038, -0.000000, 0.000000, 0.226385 +2782, -0.974274, -0.000000, 0.000000, 0.225365 +2783, -0.974510, -0.000000, 0.000000, 0.224344 +2784, -0.974744, -0.000000, 0.000000, 0.223323 +2785, -0.974978, -0.000000, 0.000000, 0.222302 +2786, -0.975210, -0.000000, 0.000000, 0.221281 +2787, -0.975441, -0.000000, 0.000000, 0.220259 +2788, -0.975672, -0.000000, 0.000000, 0.219237 +2789, -0.975901, -0.000000, 0.000000, 0.218215 +2790, -0.976129, -0.000000, 0.000000, 0.217192 +2791, -0.976356, -0.000000, 0.000000, 0.216170 +2792, -0.976582, -0.000000, 0.000000, 0.215147 +2793, -0.976807, -0.000000, 0.000000, 0.214124 +2794, -0.977030, -0.000000, 0.000000, 0.213100 +2795, -0.977253, -0.000000, 0.000000, 0.212077 +2796, -0.977475, -0.000000, 0.000000, 0.211053 +2797, -0.977695, -0.000000, 0.000000, 0.210029 +2798, -0.977915, -0.000000, 0.000000, 0.209005 +2799, -0.978133, -0.000000, 0.000000, 0.207980 +2800, -0.978350, -0.000000, 0.000000, 0.206955 +2801, -0.978567, -0.000000, 0.000000, 0.205930 +2802, -0.978782, -0.000000, 0.000000, 0.204905 +2803, -0.978996, -0.000000, 0.000000, 0.203880 +2804, -0.979209, -0.000000, 0.000000, 0.202854 +2805, -0.979421, -0.000000, 0.000000, 0.201828 +2806, -0.979632, -0.000000, 0.000000, 0.200802 +2807, -0.979842, -0.000000, 0.000000, 0.199776 +2808, -0.980050, -0.000000, 0.000000, 0.198749 +2809, -0.980258, -0.000000, 0.000000, 0.197722 +2810, -0.980465, -0.000000, 0.000000, 0.196695 +2811, -0.980670, -0.000000, 0.000000, 0.195668 +2812, -0.980875, -0.000000, 0.000000, 0.194641 +2813, -0.981078, -0.000000, 0.000000, 0.193613 +2814, -0.981280, -0.000000, 0.000000, 0.192585 +2815, -0.981481, -0.000000, 0.000000, 0.191557 +2816, -0.981682, -0.000000, 0.000000, 0.190529 +2817, -0.981881, -0.000000, 0.000000, 0.189501 +2818, -0.982079, -0.000000, 0.000000, 0.188472 +2819, -0.982275, -0.000000, 0.000000, 0.187443 +2820, -0.982471, -0.000000, 0.000000, 0.186414 +2821, -0.982666, -0.000000, 0.000000, 0.185385 +2822, -0.982860, -0.000000, 0.000000, 0.184355 +2823, -0.983052, -0.000000, 0.000000, 0.183326 +2824, -0.983244, -0.000000, 0.000000, 0.182296 +2825, -0.983434, -0.000000, 0.000000, 0.181266 +2826, -0.983624, -0.000000, 0.000000, 0.180235 +2827, -0.983812, -0.000000, 0.000000, 0.179205 +2828, -0.983999, -0.000000, 0.000000, 0.178174 +2829, -0.984185, -0.000000, 0.000000, 0.177143 +2830, -0.984370, -0.000000, 0.000000, 0.176112 +2831, -0.984554, -0.000000, 0.000000, 0.175081 +2832, -0.984737, -0.000000, 0.000000, 0.174049 +2833, -0.984919, -0.000000, 0.000000, 0.173018 +2834, -0.985099, -0.000000, 0.000000, 0.171986 +2835, -0.985279, -0.000000, 0.000000, 0.170954 +2836, -0.985458, -0.000000, 0.000000, 0.169922 +2837, -0.985635, -0.000000, 0.000000, 0.168889 +2838, -0.985811, -0.000000, 0.000000, 0.167857 +2839, -0.985987, -0.000000, 0.000000, 0.166824 +2840, -0.986161, -0.000000, 0.000000, 0.165791 +2841, -0.986334, -0.000000, 0.000000, 0.164758 +2842, -0.986506, -0.000000, 0.000000, 0.163724 +2843, -0.986677, -0.000000, 0.000000, 0.162691 +2844, -0.986847, -0.000000, 0.000000, 0.161657 +2845, -0.987016, -0.000000, 0.000000, 0.160623 +2846, -0.987183, -0.000000, 0.000000, 0.159589 +2847, -0.987350, -0.000000, 0.000000, 0.158555 +2848, -0.987516, -0.000000, 0.000000, 0.157521 +2849, -0.987680, -0.000000, 0.000000, 0.156486 +2850, -0.987844, -0.000000, 0.000000, 0.155451 +2851, -0.988006, -0.000000, 0.000000, 0.154417 +2852, -0.988167, -0.000000, 0.000000, 0.153382 +2853, -0.988327, -0.000000, 0.000000, 0.152346 +2854, -0.988486, -0.000000, 0.000000, 0.151311 +2855, -0.988644, -0.000000, 0.000000, 0.150275 +2856, -0.988801, -0.000000, 0.000000, 0.149240 +2857, -0.988957, -0.000000, 0.000000, 0.148204 +2858, -0.989112, -0.000000, 0.000000, 0.147168 +2859, -0.989265, -0.000000, 0.000000, 0.146131 +2860, -0.989418, -0.000000, 0.000000, 0.145095 +2861, -0.989569, -0.000000, 0.000000, 0.144058 +2862, -0.989720, -0.000000, 0.000000, 0.143022 +2863, -0.989869, -0.000000, 0.000000, 0.141985 +2864, -0.990017, -0.000000, 0.000000, 0.140948 +2865, -0.990164, -0.000000, 0.000000, 0.139911 +2866, -0.990310, -0.000000, 0.000000, 0.138873 +2867, -0.990455, -0.000000, 0.000000, 0.137836 +2868, -0.990599, -0.000000, 0.000000, 0.136798 +2869, -0.990742, -0.000000, 0.000000, 0.135761 +2870, -0.990883, -0.000000, 0.000000, 0.134723 +2871, -0.991024, -0.000000, 0.000000, 0.133685 +2872, -0.991163, -0.000000, 0.000000, 0.132646 +2873, -0.991302, -0.000000, 0.000000, 0.131608 +2874, -0.991439, -0.000000, 0.000000, 0.130569 +2875, -0.991575, -0.000000, 0.000000, 0.129531 +2876, -0.991711, -0.000000, 0.000000, 0.128492 +2877, -0.991845, -0.000000, 0.000000, 0.127453 +2878, -0.991978, -0.000000, 0.000000, 0.126414 +2879, -0.992109, -0.000000, 0.000000, 0.125375 +2880, -0.992240, -0.000000, 0.000000, 0.124335 +2881, -0.992370, -0.000000, 0.000000, 0.123296 +2882, -0.992499, -0.000000, 0.000000, 0.122256 +2883, -0.992626, -0.000000, 0.000000, 0.121217 +2884, -0.992753, -0.000000, 0.000000, 0.120177 +2885, -0.992878, -0.000000, 0.000000, 0.119137 +2886, -0.993002, -0.000000, 0.000000, 0.118097 +2887, -0.993125, -0.000000, 0.000000, 0.117056 +2888, -0.993247, -0.000000, 0.000000, 0.116016 +2889, -0.993368, -0.000000, 0.000000, 0.114975 +2890, -0.993488, -0.000000, 0.000000, 0.113935 +2891, -0.993607, -0.000000, 0.000000, 0.112894 +2892, -0.993725, -0.000000, 0.000000, 0.111853 +2893, -0.993841, -0.000000, 0.000000, 0.110812 +2894, -0.993957, -0.000000, 0.000000, 0.109771 +2895, -0.994071, -0.000000, 0.000000, 0.108729 +2896, -0.994185, -0.000000, 0.000000, 0.107688 +2897, -0.994297, -0.000000, 0.000000, 0.106647 +2898, -0.994408, -0.000000, 0.000000, 0.105605 +2899, -0.994518, -0.000000, 0.000000, 0.104563 +2900, -0.994627, -0.000000, 0.000000, 0.103521 +2901, -0.994735, -0.000000, 0.000000, 0.102479 +2902, -0.994842, -0.000000, 0.000000, 0.101437 +2903, -0.994948, -0.000000, 0.000000, 0.100395 +2904, -0.995052, -0.000000, 0.000000, 0.099353 +2905, -0.995156, -0.000000, 0.000000, 0.098310 +2906, -0.995258, -0.000000, 0.000000, 0.097268 +2907, -0.995360, -0.000000, 0.000000, 0.096225 +2908, -0.995460, -0.000000, 0.000000, 0.095182 +2909, -0.995559, -0.000000, 0.000000, 0.094140 +2910, -0.995657, -0.000000, 0.000000, 0.093097 +2911, -0.995754, -0.000000, 0.000000, 0.092054 +2912, -0.995850, -0.000000, 0.000000, 0.091010 +2913, -0.995945, -0.000000, 0.000000, 0.089967 +2914, -0.996038, -0.000000, 0.000000, 0.088924 +2915, -0.996131, -0.000000, 0.000000, 0.087880 +2916, -0.996223, -0.000000, 0.000000, 0.086837 +2917, -0.996313, -0.000000, 0.000000, 0.085793 +2918, -0.996402, -0.000000, 0.000000, 0.084750 +2919, -0.996491, -0.000000, 0.000000, 0.083706 +2920, -0.996578, -0.000000, 0.000000, 0.082662 +2921, -0.996664, -0.000000, 0.000000, 0.081618 +2922, -0.996749, -0.000000, 0.000000, 0.080574 +2923, -0.996833, -0.000000, 0.000000, 0.079529 +2924, -0.996915, -0.000000, 0.000000, 0.078485 +2925, -0.996997, -0.000000, 0.000000, 0.077441 +2926, -0.997078, -0.000000, 0.000000, 0.076396 +2927, -0.997157, -0.000000, 0.000000, 0.075352 +2928, -0.997235, -0.000000, 0.000000, 0.074307 +2929, -0.997313, -0.000000, 0.000000, 0.073263 +2930, -0.997389, -0.000000, 0.000000, 0.072218 +2931, -0.997464, -0.000000, 0.000000, 0.071173 +2932, -0.997538, -0.000000, 0.000000, 0.070128 +2933, -0.997611, -0.000000, 0.000000, 0.069083 +2934, -0.997683, -0.000000, 0.000000, 0.068038 +2935, -0.997753, -0.000000, 0.000000, 0.066993 +2936, -0.997823, -0.000000, 0.000000, 0.065948 +2937, -0.997892, -0.000000, 0.000000, 0.064902 +2938, -0.997959, -0.000000, 0.000000, 0.063857 +2939, -0.998025, -0.000000, 0.000000, 0.062811 +2940, -0.998091, -0.000000, 0.000000, 0.061766 +2941, -0.998155, -0.000000, 0.000000, 0.060720 +2942, -0.998218, -0.000000, 0.000000, 0.059675 +2943, -0.998280, -0.000000, 0.000000, 0.058629 +2944, -0.998341, -0.000000, 0.000000, 0.057583 +2945, -0.998400, -0.000000, 0.000000, 0.056537 +2946, -0.998459, -0.000000, 0.000000, 0.055491 +2947, -0.998517, -0.000000, 0.000000, 0.054445 +2948, -0.998573, -0.000000, 0.000000, 0.053399 +2949, -0.998629, -0.000000, 0.000000, 0.052353 +2950, -0.998683, -0.000000, 0.000000, 0.051307 +2951, -0.998736, -0.000000, 0.000000, 0.050261 +2952, -0.998788, -0.000000, 0.000000, 0.049215 +2953, -0.998839, -0.000000, 0.000000, 0.048169 +2954, -0.998889, -0.000000, 0.000000, 0.047122 +2955, -0.998938, -0.000000, 0.000000, 0.046076 +2956, -0.998986, -0.000000, 0.000000, 0.045029 +2957, -0.999032, -0.000000, 0.000000, 0.043983 +2958, -0.999078, -0.000000, 0.000000, 0.042936 +2959, -0.999122, -0.000000, 0.000000, 0.041890 +2960, -0.999166, -0.000000, 0.000000, 0.040843 +2961, -0.999208, -0.000000, 0.000000, 0.039796 +2962, -0.999249, -0.000000, 0.000000, 0.038750 +2963, -0.999289, -0.000000, 0.000000, 0.037703 +2964, -0.999328, -0.000000, 0.000000, 0.036656 +2965, -0.999366, -0.000000, 0.000000, 0.035609 +2966, -0.999403, -0.000000, 0.000000, 0.034562 +2967, -0.999438, -0.000000, 0.000000, 0.033515 +2968, -0.999473, -0.000000, 0.000000, 0.032468 +2969, -0.999506, -0.000000, 0.000000, 0.031421 +2970, -0.999539, -0.000000, 0.000000, 0.030374 +2971, -0.999570, -0.000000, 0.000000, 0.029327 +2972, -0.999600, -0.000000, 0.000000, 0.028280 +2973, -0.999629, -0.000000, 0.000000, 0.027233 +2974, -0.999657, -0.000000, 0.000000, 0.026186 +2975, -0.999684, -0.000000, 0.000000, 0.025138 +2976, -0.999710, -0.000000, 0.000000, 0.024091 +2977, -0.999734, -0.000000, 0.000000, 0.023044 +2978, -0.999758, -0.000000, 0.000000, 0.021997 +2979, -0.999781, -0.000000, 0.000000, 0.020949 +2980, -0.999802, -0.000000, 0.000000, 0.019902 +2981, -0.999822, -0.000000, 0.000000, 0.018855 +2982, -0.999841, -0.000000, 0.000000, 0.017807 +2983, -0.999860, -0.000000, 0.000000, 0.016760 +2984, -0.999877, -0.000000, 0.000000, 0.015713 +2985, -0.999892, -0.000000, 0.000000, 0.014665 +2986, -0.999907, -0.000000, 0.000000, 0.013618 +2987, -0.999921, -0.000000, 0.000000, 0.012570 +2988, -0.999934, -0.000000, 0.000000, 0.011523 +2989, -0.999945, -0.000000, 0.000000, 0.010475 +2990, -0.999956, -0.000000, 0.000000, 0.009428 +2991, -0.999965, -0.000000, 0.000000, 0.008380 +2992, -0.999973, -0.000000, 0.000000, 0.007333 +2993, -0.999980, -0.000000, 0.000000, 0.006285 +2994, -0.999986, -0.000000, 0.000000, 0.005238 +2995, -0.999991, -0.000000, 0.000000, 0.004190 +2996, -0.999995, -0.000000, 0.000000, 0.003143 +2997, -0.999998, -0.000000, 0.000000, 0.002095 +2998, -0.999999, -0.000000, 0.000000, 0.001048 +2999, -1.000000, -0.000000, 0.000000, 0.000000 diff --git a/scripts/trajectories/full-circle-T15.0-w0.0.csv b/scripts/trajectories/full-circle-T15.0-w0.0.csv new file mode 100644 index 0000000000..0894809fd1 --- /dev/null +++ b/scripts/trajectories/full-circle-T15.0-w0.0.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 1.000000, 0.000000, 0.000000, 0.000000 +2, 1.000000, 0.000000, 0.000000, 0.000000 +3, 1.000000, 0.000000, 0.000000, 0.000000 +4, 1.000000, 0.000000, 0.000000, 0.000000 +5, 1.000000, 0.000000, 0.000000, 0.000000 +6, 1.000000, 0.000000, 0.000000, 0.000000 +7, 1.000000, 0.000000, 0.000000, 0.000000 +8, 1.000000, 0.000000, 0.000000, 0.000000 +9, 1.000000, 0.000000, 0.000000, 0.000000 +10, 1.000000, 0.000000, 0.000000, 0.000000 +11, 1.000000, 0.000000, 0.000000, 0.000000 +12, 1.000000, 0.000000, 0.000000, 0.000000 +13, 1.000000, 0.000000, 0.000000, 0.000000 +14, 1.000000, 0.000000, 0.000000, 0.000000 +15, 1.000000, 0.000000, 0.000000, 0.000000 +16, 1.000000, 0.000000, 0.000000, 0.000000 +17, 1.000000, 0.000000, 0.000000, 0.000000 +18, 1.000000, 0.000000, 0.000000, 0.000000 +19, 1.000000, 0.000000, 0.000000, 0.000000 +20, 1.000000, 0.000000, 0.000000, 0.000000 +21, 1.000000, 0.000000, 0.000000, 0.000000 +22, 1.000000, 0.000000, 0.000000, 0.000000 +23, 1.000000, 0.000000, 0.000000, 0.000000 +24, 1.000000, 0.000000, 0.000000, 0.000000 +25, 1.000000, 0.000000, 0.000000, 0.000000 +26, 1.000000, 0.000000, 0.000000, 0.000000 +27, 1.000000, 0.000000, 0.000000, 0.000000 +28, 1.000000, 0.000000, 0.000000, 0.000000 +29, 1.000000, 0.000000, 0.000000, 0.000000 +30, 1.000000, 0.000000, 0.000000, 0.000000 +31, 1.000000, 0.000000, 0.000000, 0.000000 +32, 1.000000, 0.000000, 0.000000, 0.000000 +33, 1.000000, 0.000000, 0.000000, 0.000000 +34, 1.000000, 0.000000, 0.000000, 0.000000 +35, 1.000000, 0.000000, 0.000000, 0.000000 +36, 1.000000, 0.000000, 0.000000, 0.000000 +37, 1.000000, 0.000000, 0.000000, 0.000000 +38, 1.000000, 0.000000, 0.000000, 0.000000 +39, 1.000000, 0.000000, 0.000000, 0.000000 +40, 1.000000, 0.000000, 0.000000, 0.000000 +41, 1.000000, 0.000000, 0.000000, 0.000000 +42, 1.000000, 0.000000, 0.000000, 0.000000 +43, 1.000000, 0.000000, 0.000000, 0.000000 +44, 1.000000, 0.000000, 0.000000, 0.000000 +45, 1.000000, 0.000000, 0.000000, 0.000000 +46, 1.000000, 0.000000, 0.000000, 0.000000 +47, 1.000000, 0.000000, 0.000000, 0.000000 +48, 1.000000, 0.000000, 0.000000, 0.000000 +49, 1.000000, 0.000000, 0.000000, 0.000000 +50, 1.000000, 0.000000, 0.000000, 0.000000 +51, 1.000000, 0.000000, 0.000000, 0.000000 +52, 1.000000, 0.000000, 0.000000, 0.000000 +53, 1.000000, 0.000000, 0.000000, 0.000000 +54, 1.000000, 0.000000, 0.000000, 0.000000 +55, 1.000000, 0.000000, 0.000000, 0.000000 +56, 1.000000, 0.000000, 0.000000, 0.000000 +57, 1.000000, 0.000000, 0.000000, 0.000000 +58, 1.000000, 0.000000, 0.000000, 0.000000 +59, 1.000000, 0.000000, 0.000000, 0.000000 +60, 1.000000, 0.000000, 0.000000, 0.000000 +61, 1.000000, 0.000000, 0.000000, 0.000000 +62, 1.000000, 0.000000, 0.000000, 0.000000 +63, 1.000000, 0.000000, 0.000000, 0.000000 +64, 1.000000, 0.000000, 0.000000, 0.000000 +65, 1.000000, 0.000000, 0.000000, 0.000000 +66, 1.000000, 0.000000, 0.000000, 0.000000 +67, 1.000000, 0.000000, 0.000000, 0.000000 +68, 1.000000, 0.000000, 0.000000, 0.000000 +69, 1.000000, 0.000000, 0.000000, 0.000000 +70, 1.000000, 0.000000, 0.000000, 0.000000 +71, 1.000000, 0.000000, 0.000000, 0.000000 +72, 1.000000, 0.000000, 0.000000, 0.000000 +73, 1.000000, 0.000000, 0.000000, 0.000000 +74, 1.000000, 0.000000, 0.000000, 0.000000 +75, 1.000000, 0.000000, 0.000000, 0.000000 +76, 1.000000, 0.000000, 0.000000, 0.000000 +77, 1.000000, 0.000000, 0.000000, 0.000000 +78, 1.000000, 0.000000, 0.000000, 0.000000 +79, 1.000000, 0.000000, 0.000000, 0.000000 +80, 1.000000, 0.000000, 0.000000, 0.000000 +81, 1.000000, 0.000000, 0.000000, 0.000000 +82, 1.000000, 0.000000, 0.000000, 0.000000 +83, 1.000000, 0.000000, 0.000000, 0.000000 +84, 1.000000, 0.000000, 0.000000, 0.000000 +85, 1.000000, 0.000000, 0.000000, 0.000000 +86, 1.000000, 0.000000, 0.000000, 0.000000 +87, 1.000000, 0.000000, 0.000000, 0.000000 +88, 1.000000, 0.000000, 0.000000, 0.000000 +89, 1.000000, 0.000000, 0.000000, 0.000000 +90, 1.000000, 0.000000, 0.000000, 0.000000 +91, 1.000000, 0.000000, 0.000000, 0.000000 +92, 1.000000, 0.000000, 0.000000, 0.000000 +93, 1.000000, 0.000000, 0.000000, 0.000000 +94, 1.000000, 0.000000, 0.000000, 0.000000 +95, 1.000000, 0.000000, 0.000000, 0.000000 +96, 1.000000, 0.000000, 0.000000, 0.000000 +97, 1.000000, 0.000000, 0.000000, 0.000000 +98, 1.000000, 0.000000, 0.000000, 0.000000 +99, 1.000000, 0.000000, 0.000000, 0.000000 +100, 1.000000, 0.000000, 0.000000, 0.000000 +101, 1.000000, 0.000000, 0.000000, 0.000000 +102, 1.000000, 0.000000, 0.000000, 0.000000 +103, 1.000000, 0.000000, 0.000000, 0.000000 +104, 1.000000, 0.000000, 0.000000, 0.000000 +105, 1.000000, 0.000000, 0.000000, 0.000000 +106, 1.000000, 0.000000, 0.000000, 0.000000 +107, 1.000000, 0.000000, 0.000000, 0.000000 +108, 1.000000, 0.000000, 0.000000, 0.000000 +109, 1.000000, 0.000000, 0.000000, 0.000000 +110, 1.000000, 0.000000, 0.000000, 0.000000 +111, 1.000000, 0.000000, 0.000000, 0.000000 +112, 1.000000, 0.000000, 0.000000, 0.000000 +113, 1.000000, 0.000000, 0.000000, 0.000000 +114, 1.000000, 0.000000, 0.000000, 0.000000 +115, 1.000000, 0.000000, 0.000000, 0.000000 +116, 1.000000, 0.000000, 0.000000, 0.000000 +117, 1.000000, 0.000000, 0.000000, 0.000000 +118, 1.000000, 0.000000, 0.000000, 0.000000 +119, 1.000000, 0.000000, 0.000000, 0.000000 +120, 1.000000, 0.000000, 0.000000, 0.000000 +121, 1.000000, 0.000000, 0.000000, 0.000000 +122, 1.000000, 0.000000, 0.000000, 0.000000 +123, 1.000000, 0.000000, 0.000000, 0.000000 +124, 1.000000, 0.000000, 0.000000, 0.000000 +125, 1.000000, 0.000000, 0.000000, 0.000000 +126, 1.000000, 0.000000, 0.000000, 0.000000 +127, 1.000000, 0.000000, 0.000000, 0.000000 +128, 1.000000, 0.000000, 0.000000, 0.000000 +129, 1.000000, 0.000000, 0.000000, 0.000000 +130, 1.000000, 0.000000, 0.000000, 0.000000 +131, 1.000000, 0.000000, 0.000000, 0.000000 +132, 1.000000, 0.000000, 0.000000, 0.000000 +133, 1.000000, 0.000000, 0.000000, 0.000000 +134, 1.000000, 0.000000, 0.000000, 0.000000 +135, 1.000000, 0.000000, 0.000000, 0.000000 +136, 1.000000, 0.000000, 0.000000, 0.000000 +137, 1.000000, 0.000000, 0.000000, 0.000000 +138, 1.000000, 0.000000, 0.000000, 0.000000 +139, 1.000000, 0.000000, 0.000000, 0.000000 +140, 1.000000, 0.000000, 0.000000, 0.000000 +141, 1.000000, 0.000000, 0.000000, 0.000000 +142, 1.000000, 0.000000, 0.000000, 0.000000 +143, 1.000000, 0.000000, 0.000000, 0.000000 +144, 1.000000, 0.000000, 0.000000, 0.000000 +145, 1.000000, 0.000000, 0.000000, 0.000000 +146, 1.000000, 0.000000, 0.000000, 0.000000 +147, 1.000000, 0.000000, 0.000000, 0.000000 +148, 1.000000, 0.000000, 0.000000, 0.000000 +149, 1.000000, 0.000000, 0.000000, 0.000000 +150, 1.000000, 0.000000, 0.000000, 0.000000 +151, 1.000000, 0.000000, 0.000000, 0.000000 +152, 1.000000, 0.000000, 0.000000, 0.000000 +153, 1.000000, 0.000000, 0.000000, 0.000000 +154, 1.000000, 0.000000, 0.000000, 0.000000 +155, 1.000000, 0.000000, 0.000000, 0.000000 +156, 1.000000, 0.000000, 0.000000, 0.000000 +157, 1.000000, 0.000000, 0.000000, 0.000000 +158, 1.000000, 0.000000, 0.000000, 0.000000 +159, 1.000000, 0.000000, 0.000000, 0.000000 +160, 1.000000, 0.000000, 0.000000, 0.000000 +161, 1.000000, 0.000000, 0.000000, 0.000000 +162, 1.000000, 0.000000, 0.000000, 0.000000 +163, 1.000000, 0.000000, 0.000000, 0.000000 +164, 1.000000, 0.000000, 0.000000, 0.000000 +165, 1.000000, 0.000000, 0.000000, 0.000000 +166, 1.000000, 0.000000, 0.000000, 0.000000 +167, 1.000000, 0.000000, 0.000000, 0.000000 +168, 1.000000, 0.000000, 0.000000, 0.000000 +169, 1.000000, 0.000000, 0.000000, 0.000000 +170, 1.000000, 0.000000, 0.000000, 0.000000 +171, 1.000000, 0.000000, 0.000000, 0.000000 +172, 1.000000, 0.000000, 0.000000, 0.000000 +173, 1.000000, 0.000000, 0.000000, 0.000000 +174, 1.000000, 0.000000, 0.000000, 0.000000 +175, 1.000000, 0.000000, 0.000000, 0.000000 +176, 1.000000, 0.000000, 0.000000, 0.000000 +177, 1.000000, 0.000000, 0.000000, 0.000000 +178, 1.000000, 0.000000, 0.000000, 0.000000 +179, 1.000000, 0.000000, 0.000000, 0.000000 +180, 1.000000, 0.000000, 0.000000, 0.000000 +181, 1.000000, 0.000000, 0.000000, 0.000000 +182, 1.000000, 0.000000, 0.000000, 0.000000 +183, 1.000000, 0.000000, 0.000000, 0.000000 +184, 1.000000, 0.000000, 0.000000, 0.000000 +185, 1.000000, 0.000000, 0.000000, 0.000000 +186, 1.000000, 0.000000, 0.000000, 0.000000 +187, 1.000000, 0.000000, 0.000000, 0.000000 +188, 1.000000, 0.000000, 0.000000, 0.000000 +189, 1.000000, 0.000000, 0.000000, 0.000000 +190, 1.000000, 0.000000, 0.000000, 0.000000 +191, 1.000000, 0.000000, 0.000000, 0.000000 +192, 1.000000, 0.000000, 0.000000, 0.000000 +193, 1.000000, 0.000000, 0.000000, 0.000000 +194, 1.000000, 0.000000, 0.000000, 0.000000 +195, 1.000000, 0.000000, 0.000000, 0.000000 +196, 1.000000, 0.000000, 0.000000, 0.000000 +197, 1.000000, 0.000000, 0.000000, 0.000000 +198, 1.000000, 0.000000, 0.000000, 0.000000 +199, 1.000000, 0.000000, 0.000000, 0.000000 +200, 1.000000, 0.000000, 0.000000, 0.000000 +201, 1.000000, 0.000000, 0.000000, 0.000000 +202, 1.000000, 0.000000, 0.000000, 0.000000 +203, 1.000000, 0.000000, 0.000000, 0.000000 +204, 1.000000, 0.000000, 0.000000, 0.000000 +205, 1.000000, 0.000000, 0.000000, 0.000000 +206, 1.000000, 0.000000, 0.000000, 0.000000 +207, 1.000000, 0.000000, 0.000000, 0.000000 +208, 1.000000, 0.000000, 0.000000, 0.000000 +209, 1.000000, 0.000000, 0.000000, 0.000000 +210, 1.000000, 0.000000, 0.000000, 0.000000 +211, 1.000000, 0.000000, 0.000000, 0.000000 +212, 1.000000, 0.000000, 0.000000, 0.000000 +213, 1.000000, 0.000000, 0.000000, 0.000000 +214, 1.000000, 0.000000, 0.000000, 0.000000 +215, 1.000000, 0.000000, 0.000000, 0.000000 +216, 1.000000, 0.000000, 0.000000, 0.000000 +217, 1.000000, 0.000000, 0.000000, 0.000000 +218, 1.000000, 0.000000, 0.000000, 0.000000 +219, 1.000000, 0.000000, 0.000000, 0.000000 +220, 1.000000, 0.000000, 0.000000, 0.000000 +221, 1.000000, 0.000000, 0.000000, 0.000000 +222, 1.000000, 0.000000, 0.000000, 0.000000 +223, 1.000000, 0.000000, 0.000000, 0.000000 +224, 1.000000, 0.000000, 0.000000, 0.000000 +225, 1.000000, 0.000000, 0.000000, 0.000000 +226, 1.000000, 0.000000, 0.000000, 0.000000 +227, 1.000000, 0.000000, 0.000000, 0.000000 +228, 1.000000, 0.000000, 0.000000, 0.000000 +229, 1.000000, 0.000000, 0.000000, 0.000000 +230, 1.000000, 0.000000, 0.000000, 0.000000 +231, 1.000000, 0.000000, 0.000000, 0.000000 +232, 1.000000, 0.000000, 0.000000, 0.000000 +233, 1.000000, 0.000000, 0.000000, 0.000000 +234, 1.000000, 0.000000, 0.000000, 0.000000 +235, 1.000000, 0.000000, 0.000000, 0.000000 +236, 1.000000, 0.000000, 0.000000, 0.000000 +237, 1.000000, 0.000000, 0.000000, 0.000000 +238, 1.000000, 0.000000, 0.000000, 0.000000 +239, 1.000000, 0.000000, 0.000000, 0.000000 +240, 1.000000, 0.000000, 0.000000, 0.000000 +241, 1.000000, 0.000000, 0.000000, 0.000000 +242, 1.000000, 0.000000, 0.000000, 0.000000 +243, 1.000000, 0.000000, 0.000000, 0.000000 +244, 1.000000, 0.000000, 0.000000, 0.000000 +245, 1.000000, 0.000000, 0.000000, 0.000000 +246, 1.000000, 0.000000, 0.000000, 0.000000 +247, 1.000000, 0.000000, 0.000000, 0.000000 +248, 1.000000, 0.000000, 0.000000, 0.000000 +249, 1.000000, 0.000000, 0.000000, 0.000000 +250, 1.000000, 0.000000, 0.000000, 0.000000 +251, 1.000000, 0.000000, 0.000000, 0.000000 +252, 1.000000, 0.000000, 0.000000, 0.000000 +253, 1.000000, 0.000000, 0.000000, 0.000000 +254, 1.000000, 0.000000, 0.000000, 0.000000 +255, 1.000000, 0.000000, 0.000000, 0.000000 +256, 1.000000, 0.000000, 0.000000, 0.000000 +257, 1.000000, 0.000000, 0.000000, 0.000000 +258, 1.000000, 0.000000, 0.000000, 0.000000 +259, 1.000000, 0.000000, 0.000000, 0.000000 +260, 1.000000, 0.000000, 0.000000, 0.000000 +261, 1.000000, 0.000000, 0.000000, 0.000000 +262, 1.000000, 0.000000, 0.000000, 0.000000 +263, 1.000000, 0.000000, 0.000000, 0.000000 +264, 1.000000, 0.000000, 0.000000, 0.000000 +265, 1.000000, 0.000000, 0.000000, 0.000000 +266, 1.000000, 0.000000, 0.000000, 0.000000 +267, 1.000000, 0.000000, 0.000000, 0.000000 +268, 1.000000, 0.000000, 0.000000, 0.000000 +269, 1.000000, 0.000000, 0.000000, 0.000000 +270, 1.000000, 0.000000, 0.000000, 0.000000 +271, 1.000000, 0.000000, 0.000000, 0.000000 +272, 1.000000, 0.000000, 0.000000, 0.000000 +273, 1.000000, 0.000000, 0.000000, 0.000000 +274, 1.000000, 0.000000, 0.000000, 0.000000 +275, 1.000000, 0.000000, 0.000000, 0.000000 +276, 1.000000, 0.000000, 0.000000, 0.000000 +277, 1.000000, 0.000000, 0.000000, 0.000000 +278, 1.000000, 0.000000, 0.000000, 0.000000 +279, 1.000000, 0.000000, 0.000000, 0.000000 +280, 1.000000, 0.000000, 0.000000, 0.000000 +281, 1.000000, 0.000000, 0.000000, 0.000000 +282, 1.000000, 0.000000, 0.000000, 0.000000 +283, 1.000000, 0.000000, 0.000000, 0.000000 +284, 1.000000, 0.000000, 0.000000, 0.000000 +285, 1.000000, 0.000000, 0.000000, 0.000000 +286, 1.000000, 0.000000, 0.000000, 0.000000 +287, 1.000000, 0.000000, 0.000000, 0.000000 +288, 1.000000, 0.000000, 0.000000, 0.000000 +289, 1.000000, 0.000000, 0.000000, 0.000000 +290, 1.000000, 0.000000, 0.000000, 0.000000 +291, 1.000000, 0.000000, 0.000000, 0.000000 +292, 1.000000, 0.000000, 0.000000, 0.000000 +293, 1.000000, 0.000000, 0.000000, 0.000000 +294, 1.000000, 0.000000, 0.000000, 0.000000 +295, 1.000000, 0.000000, 0.000000, 0.000000 +296, 1.000000, 0.000000, 0.000000, 0.000000 +297, 1.000000, 0.000000, 0.000000, 0.000000 +298, 1.000000, 0.000000, 0.000000, 0.000000 +299, 1.000000, 0.000000, 0.000000, 0.000000 +300, 1.000000, 0.000000, 0.000000, 0.000000 +301, 1.000000, 0.000000, 0.000000, 0.000000 +302, 1.000000, 0.000000, 0.000000, 0.000000 +303, 1.000000, 0.000000, 0.000000, 0.000000 +304, 1.000000, 0.000000, 0.000000, 0.000000 +305, 1.000000, 0.000000, 0.000000, 0.000000 +306, 1.000000, 0.000000, 0.000000, 0.000000 +307, 1.000000, 0.000000, 0.000000, 0.000000 +308, 1.000000, 0.000000, 0.000000, 0.000000 +309, 1.000000, 0.000000, 0.000000, 0.000000 +310, 1.000000, 0.000000, 0.000000, 0.000000 +311, 1.000000, 0.000000, 0.000000, 0.000000 +312, 1.000000, 0.000000, 0.000000, 0.000000 +313, 1.000000, 0.000000, 0.000000, 0.000000 +314, 1.000000, 0.000000, 0.000000, 0.000000 +315, 1.000000, 0.000000, 0.000000, 0.000000 +316, 1.000000, 0.000000, 0.000000, 0.000000 +317, 1.000000, 0.000000, 0.000000, 0.000000 +318, 1.000000, 0.000000, 0.000000, 0.000000 +319, 1.000000, 0.000000, 0.000000, 0.000000 +320, 1.000000, 0.000000, 0.000000, 0.000000 +321, 1.000000, 0.000000, 0.000000, 0.000000 +322, 1.000000, 0.000000, 0.000000, 0.000000 +323, 1.000000, 0.000000, 0.000000, 0.000000 +324, 1.000000, 0.000000, 0.000000, 0.000000 +325, 1.000000, 0.000000, 0.000000, 0.000000 +326, 1.000000, 0.000000, 0.000000, 0.000000 +327, 1.000000, 0.000000, 0.000000, 0.000000 +328, 1.000000, 0.000000, 0.000000, 0.000000 +329, 1.000000, 0.000000, 0.000000, 0.000000 +330, 1.000000, 0.000000, 0.000000, 0.000000 +331, 1.000000, 0.000000, 0.000000, 0.000000 +332, 1.000000, 0.000000, 0.000000, 0.000000 +333, 1.000000, 0.000000, 0.000000, 0.000000 +334, 1.000000, 0.000000, 0.000000, 0.000000 +335, 1.000000, 0.000000, 0.000000, 0.000000 +336, 1.000000, 0.000000, 0.000000, 0.000000 +337, 1.000000, 0.000000, 0.000000, 0.000000 +338, 1.000000, 0.000000, 0.000000, 0.000000 +339, 1.000000, 0.000000, 0.000000, 0.000000 +340, 1.000000, 0.000000, 0.000000, 0.000000 +341, 1.000000, 0.000000, 0.000000, 0.000000 +342, 1.000000, 0.000000, 0.000000, 0.000000 +343, 1.000000, 0.000000, 0.000000, 0.000000 +344, 1.000000, 0.000000, 0.000000, 0.000000 +345, 1.000000, 0.000000, 0.000000, 0.000000 +346, 1.000000, 0.000000, 0.000000, 0.000000 +347, 1.000000, 0.000000, 0.000000, 0.000000 +348, 1.000000, 0.000000, 0.000000, 0.000000 +349, 1.000000, 0.000000, 0.000000, 0.000000 +350, 1.000000, 0.000000, 0.000000, 0.000000 +351, 1.000000, 0.000000, 0.000000, 0.000000 +352, 1.000000, 0.000000, 0.000000, 0.000000 +353, 1.000000, 0.000000, 0.000000, 0.000000 +354, 1.000000, 0.000000, 0.000000, 0.000000 +355, 1.000000, 0.000000, 0.000000, 0.000000 +356, 1.000000, 0.000000, 0.000000, 0.000000 +357, 1.000000, 0.000000, 0.000000, 0.000000 +358, 1.000000, 0.000000, 0.000000, 0.000000 +359, 1.000000, 0.000000, 0.000000, 0.000000 +360, 1.000000, 0.000000, 0.000000, 0.000000 +361, 1.000000, 0.000000, 0.000000, 0.000000 +362, 1.000000, 0.000000, 0.000000, 0.000000 +363, 1.000000, 0.000000, 0.000000, 0.000000 +364, 1.000000, 0.000000, 0.000000, 0.000000 +365, 1.000000, 0.000000, 0.000000, 0.000000 +366, 1.000000, 0.000000, 0.000000, 0.000000 +367, 1.000000, 0.000000, 0.000000, 0.000000 +368, 1.000000, 0.000000, 0.000000, 0.000000 +369, 1.000000, 0.000000, 0.000000, 0.000000 +370, 1.000000, 0.000000, 0.000000, 0.000000 +371, 1.000000, 0.000000, 0.000000, 0.000000 +372, 1.000000, 0.000000, 0.000000, 0.000000 +373, 1.000000, 0.000000, 0.000000, 0.000000 +374, 1.000000, 0.000000, 0.000000, 0.000000 +375, 1.000000, 0.000000, 0.000000, 0.000000 +376, 1.000000, 0.000000, 0.000000, 0.000000 +377, 1.000000, 0.000000, 0.000000, 0.000000 +378, 1.000000, 0.000000, 0.000000, 0.000000 +379, 1.000000, 0.000000, 0.000000, 0.000000 +380, 1.000000, 0.000000, 0.000000, 0.000000 +381, 1.000000, 0.000000, 0.000000, 0.000000 +382, 1.000000, 0.000000, 0.000000, 0.000000 +383, 1.000000, 0.000000, 0.000000, 0.000000 +384, 1.000000, 0.000000, 0.000000, 0.000000 +385, 1.000000, 0.000000, 0.000000, 0.000000 +386, 1.000000, 0.000000, 0.000000, 0.000000 +387, 1.000000, 0.000000, 0.000000, 0.000000 +388, 1.000000, 0.000000, 0.000000, 0.000000 +389, 1.000000, 0.000000, 0.000000, 0.000000 +390, 1.000000, 0.000000, 0.000000, 0.000000 +391, 1.000000, 0.000000, 0.000000, 0.000000 +392, 1.000000, 0.000000, 0.000000, 0.000000 +393, 1.000000, 0.000000, 0.000000, 0.000000 +394, 1.000000, 0.000000, 0.000000, 0.000000 +395, 1.000000, 0.000000, 0.000000, 0.000000 +396, 1.000000, 0.000000, 0.000000, 0.000000 +397, 1.000000, 0.000000, 0.000000, 0.000000 +398, 1.000000, 0.000000, 0.000000, 0.000000 +399, 1.000000, 0.000000, 0.000000, 0.000000 +400, 1.000000, 0.000000, 0.000000, 0.000000 +401, 1.000000, 0.000000, 0.000000, 0.000000 +402, 1.000000, 0.000000, 0.000000, 0.000000 +403, 1.000000, 0.000000, 0.000000, 0.000000 +404, 1.000000, 0.000000, 0.000000, 0.000000 +405, 1.000000, 0.000000, 0.000000, 0.000000 +406, 1.000000, 0.000000, 0.000000, 0.000000 +407, 1.000000, 0.000000, 0.000000, 0.000000 +408, 1.000000, 0.000000, 0.000000, 0.000000 +409, 1.000000, 0.000000, 0.000000, 0.000000 +410, 1.000000, 0.000000, 0.000000, 0.000000 +411, 1.000000, 0.000000, 0.000000, 0.000000 +412, 1.000000, 0.000000, 0.000000, 0.000000 +413, 1.000000, 0.000000, 0.000000, 0.000000 +414, 1.000000, 0.000000, 0.000000, 0.000000 +415, 1.000000, 0.000000, 0.000000, 0.000000 +416, 1.000000, 0.000000, 0.000000, 0.000000 +417, 1.000000, 0.000000, 0.000000, 0.000000 +418, 1.000000, 0.000000, 0.000000, 0.000000 +419, 1.000000, 0.000000, 0.000000, 0.000000 +420, 1.000000, 0.000000, 0.000000, 0.000000 +421, 1.000000, 0.000000, 0.000000, 0.000000 +422, 1.000000, 0.000000, 0.000000, 0.000000 +423, 1.000000, 0.000000, 0.000000, 0.000000 +424, 1.000000, 0.000000, 0.000000, 0.000000 +425, 1.000000, 0.000000, 0.000000, 0.000000 +426, 1.000000, 0.000000, 0.000000, 0.000000 +427, 1.000000, 0.000000, 0.000000, 0.000000 +428, 1.000000, 0.000000, 0.000000, 0.000000 +429, 1.000000, 0.000000, 0.000000, 0.000000 +430, 1.000000, 0.000000, 0.000000, 0.000000 +431, 1.000000, 0.000000, 0.000000, 0.000000 +432, 1.000000, 0.000000, 0.000000, 0.000000 +433, 1.000000, 0.000000, 0.000000, 0.000000 +434, 1.000000, 0.000000, 0.000000, 0.000000 +435, 1.000000, 0.000000, 0.000000, 0.000000 +436, 1.000000, 0.000000, 0.000000, 0.000000 +437, 1.000000, 0.000000, 0.000000, 0.000000 +438, 1.000000, 0.000000, 0.000000, 0.000000 +439, 1.000000, 0.000000, 0.000000, 0.000000 +440, 1.000000, 0.000000, 0.000000, 0.000000 +441, 1.000000, 0.000000, 0.000000, 0.000000 +442, 1.000000, 0.000000, 0.000000, 0.000000 +443, 1.000000, 0.000000, 0.000000, 0.000000 +444, 1.000000, 0.000000, 0.000000, 0.000000 +445, 1.000000, 0.000000, 0.000000, 0.000000 +446, 1.000000, 0.000000, 0.000000, 0.000000 +447, 1.000000, 0.000000, 0.000000, 0.000000 +448, 1.000000, 0.000000, 0.000000, 0.000000 +449, 1.000000, 0.000000, 0.000000, 0.000000 +450, 1.000000, 0.000000, 0.000000, 0.000000 +451, 1.000000, 0.000000, 0.000000, 0.000000 +452, 1.000000, 0.000000, 0.000000, 0.000000 +453, 1.000000, 0.000000, 0.000000, 0.000000 +454, 1.000000, 0.000000, 0.000000, 0.000000 +455, 1.000000, 0.000000, 0.000000, 0.000000 +456, 1.000000, 0.000000, 0.000000, 0.000000 +457, 1.000000, 0.000000, 0.000000, 0.000000 +458, 1.000000, 0.000000, 0.000000, 0.000000 +459, 1.000000, 0.000000, 0.000000, 0.000000 +460, 1.000000, 0.000000, 0.000000, 0.000000 +461, 1.000000, 0.000000, 0.000000, 0.000000 +462, 1.000000, 0.000000, 0.000000, 0.000000 +463, 1.000000, 0.000000, 0.000000, 0.000000 +464, 1.000000, 0.000000, 0.000000, 0.000000 +465, 1.000000, 0.000000, 0.000000, 0.000000 +466, 1.000000, 0.000000, 0.000000, 0.000000 +467, 1.000000, 0.000000, 0.000000, 0.000000 +468, 1.000000, 0.000000, 0.000000, 0.000000 +469, 1.000000, 0.000000, 0.000000, 0.000000 +470, 1.000000, 0.000000, 0.000000, 0.000000 +471, 1.000000, 0.000000, 0.000000, 0.000000 +472, 1.000000, 0.000000, 0.000000, 0.000000 +473, 1.000000, 0.000000, 0.000000, 0.000000 +474, 1.000000, 0.000000, 0.000000, 0.000000 +475, 1.000000, 0.000000, 0.000000, 0.000000 +476, 1.000000, 0.000000, 0.000000, 0.000000 +477, 1.000000, 0.000000, 0.000000, 0.000000 +478, 1.000000, 0.000000, 0.000000, 0.000000 +479, 1.000000, 0.000000, 0.000000, 0.000000 +480, 1.000000, 0.000000, 0.000000, 0.000000 +481, 1.000000, 0.000000, 0.000000, 0.000000 +482, 1.000000, 0.000000, 0.000000, 0.000000 +483, 1.000000, 0.000000, 0.000000, 0.000000 +484, 1.000000, 0.000000, 0.000000, 0.000000 +485, 1.000000, 0.000000, 0.000000, 0.000000 +486, 1.000000, 0.000000, 0.000000, 0.000000 +487, 1.000000, 0.000000, 0.000000, 0.000000 +488, 1.000000, 0.000000, 0.000000, 0.000000 +489, 1.000000, 0.000000, 0.000000, 0.000000 +490, 1.000000, 0.000000, 0.000000, 0.000000 +491, 1.000000, 0.000000, 0.000000, 0.000000 +492, 1.000000, 0.000000, 0.000000, 0.000000 +493, 1.000000, 0.000000, 0.000000, 0.000000 +494, 1.000000, 0.000000, 0.000000, 0.000000 +495, 1.000000, 0.000000, 0.000000, 0.000000 +496, 1.000000, 0.000000, 0.000000, 0.000000 +497, 1.000000, 0.000000, 0.000000, 0.000000 +498, 1.000000, 0.000000, 0.000000, 0.000000 +499, 1.000000, 0.000000, 0.000000, 0.000000 +500, 1.000000, 0.000000, 0.000000, 0.000000 +501, 1.000000, 0.000000, 0.000000, 0.000000 +502, 1.000000, 0.000000, 0.000000, 0.000000 +503, 1.000000, 0.000000, 0.000000, 0.000000 +504, 1.000000, 0.000000, 0.000000, 0.000000 +505, 1.000000, 0.000000, 0.000000, 0.000000 +506, 1.000000, 0.000000, 0.000000, 0.000000 +507, 1.000000, 0.000000, 0.000000, 0.000000 +508, 1.000000, 0.000000, 0.000000, 0.000000 +509, 1.000000, 0.000000, 0.000000, 0.000000 +510, 1.000000, 0.000000, 0.000000, 0.000000 +511, 1.000000, 0.000000, 0.000000, 0.000000 +512, 1.000000, 0.000000, 0.000000, 0.000000 +513, 1.000000, 0.000000, 0.000000, 0.000000 +514, 1.000000, 0.000000, 0.000000, 0.000000 +515, 1.000000, 0.000000, 0.000000, 0.000000 +516, 1.000000, 0.000000, 0.000000, 0.000000 +517, 1.000000, 0.000000, 0.000000, 0.000000 +518, 1.000000, 0.000000, 0.000000, 0.000000 +519, 1.000000, 0.000000, 0.000000, 0.000000 +520, 1.000000, 0.000000, 0.000000, 0.000000 +521, 1.000000, 0.000000, 0.000000, 0.000000 +522, 1.000000, 0.000000, 0.000000, 0.000000 +523, 1.000000, 0.000000, 0.000000, 0.000000 +524, 1.000000, 0.000000, 0.000000, 0.000000 +525, 1.000000, 0.000000, 0.000000, 0.000000 +526, 1.000000, 0.000000, 0.000000, 0.000000 +527, 1.000000, 0.000000, 0.000000, 0.000000 +528, 1.000000, 0.000000, 0.000000, 0.000000 +529, 1.000000, 0.000000, 0.000000, 0.000000 +530, 1.000000, 0.000000, 0.000000, 0.000000 +531, 1.000000, 0.000000, 0.000000, 0.000000 +532, 1.000000, 0.000000, 0.000000, 0.000000 +533, 1.000000, 0.000000, 0.000000, 0.000000 +534, 1.000000, 0.000000, 0.000000, 0.000000 +535, 1.000000, 0.000000, 0.000000, 0.000000 +536, 1.000000, 0.000000, 0.000000, 0.000000 +537, 1.000000, 0.000000, 0.000000, 0.000000 +538, 1.000000, 0.000000, 0.000000, 0.000000 +539, 1.000000, 0.000000, 0.000000, 0.000000 +540, 1.000000, 0.000000, 0.000000, 0.000000 +541, 1.000000, 0.000000, 0.000000, 0.000000 +542, 1.000000, 0.000000, 0.000000, 0.000000 +543, 1.000000, 0.000000, 0.000000, 0.000000 +544, 1.000000, 0.000000, 0.000000, 0.000000 +545, 1.000000, 0.000000, 0.000000, 0.000000 +546, 1.000000, 0.000000, 0.000000, 0.000000 +547, 1.000000, 0.000000, 0.000000, 0.000000 +548, 1.000000, 0.000000, 0.000000, 0.000000 +549, 1.000000, 0.000000, 0.000000, 0.000000 +550, 1.000000, 0.000000, 0.000000, 0.000000 +551, 1.000000, 0.000000, 0.000000, 0.000000 +552, 1.000000, 0.000000, 0.000000, 0.000000 +553, 1.000000, 0.000000, 0.000000, 0.000000 +554, 1.000000, 0.000000, 0.000000, 0.000000 +555, 1.000000, 0.000000, 0.000000, 0.000000 +556, 1.000000, 0.000000, 0.000000, 0.000000 +557, 1.000000, 0.000000, 0.000000, 0.000000 +558, 1.000000, 0.000000, 0.000000, 0.000000 +559, 1.000000, 0.000000, 0.000000, 0.000000 +560, 1.000000, 0.000000, 0.000000, 0.000000 +561, 1.000000, 0.000000, 0.000000, 0.000000 +562, 1.000000, 0.000000, 0.000000, 0.000000 +563, 1.000000, 0.000000, 0.000000, 0.000000 +564, 1.000000, 0.000000, 0.000000, 0.000000 +565, 1.000000, 0.000000, 0.000000, 0.000000 +566, 1.000000, 0.000000, 0.000000, 0.000000 +567, 1.000000, 0.000000, 0.000000, 0.000000 +568, 1.000000, 0.000000, 0.000000, 0.000000 +569, 1.000000, 0.000000, 0.000000, 0.000000 +570, 1.000000, 0.000000, 0.000000, 0.000000 +571, 1.000000, 0.000000, 0.000000, 0.000000 +572, 1.000000, 0.000000, 0.000000, 0.000000 +573, 1.000000, 0.000000, 0.000000, 0.000000 +574, 1.000000, 0.000000, 0.000000, 0.000000 +575, 1.000000, 0.000000, 0.000000, 0.000000 +576, 1.000000, 0.000000, 0.000000, 0.000000 +577, 1.000000, 0.000000, 0.000000, 0.000000 +578, 1.000000, 0.000000, 0.000000, 0.000000 +579, 1.000000, 0.000000, 0.000000, 0.000000 +580, 1.000000, 0.000000, 0.000000, 0.000000 +581, 1.000000, 0.000000, 0.000000, 0.000000 +582, 1.000000, 0.000000, 0.000000, 0.000000 +583, 1.000000, 0.000000, 0.000000, 0.000000 +584, 1.000000, 0.000000, 0.000000, 0.000000 +585, 1.000000, 0.000000, 0.000000, 0.000000 +586, 1.000000, 0.000000, 0.000000, 0.000000 +587, 1.000000, 0.000000, 0.000000, 0.000000 +588, 1.000000, 0.000000, 0.000000, 0.000000 +589, 1.000000, 0.000000, 0.000000, 0.000000 +590, 1.000000, 0.000000, 0.000000, 0.000000 +591, 1.000000, 0.000000, 0.000000, 0.000000 +592, 1.000000, 0.000000, 0.000000, 0.000000 +593, 1.000000, 0.000000, 0.000000, 0.000000 +594, 1.000000, 0.000000, 0.000000, 0.000000 +595, 1.000000, 0.000000, 0.000000, 0.000000 +596, 1.000000, 0.000000, 0.000000, 0.000000 +597, 1.000000, 0.000000, 0.000000, 0.000000 +598, 1.000000, 0.000000, 0.000000, 0.000000 +599, 1.000000, 0.000000, 0.000000, 0.000000 +600, 1.000000, 0.000000, 0.000000, 0.000000 +601, 1.000000, 0.000000, 0.000000, 0.000000 +602, 1.000000, 0.000000, 0.000000, 0.000000 +603, 1.000000, 0.000000, 0.000000, 0.000000 +604, 1.000000, 0.000000, 0.000000, 0.000000 +605, 1.000000, 0.000000, 0.000000, 0.000000 +606, 1.000000, 0.000000, 0.000000, 0.000000 +607, 1.000000, 0.000000, 0.000000, 0.000000 +608, 1.000000, 0.000000, 0.000000, 0.000000 +609, 1.000000, 0.000000, 0.000000, 0.000000 +610, 1.000000, 0.000000, 0.000000, 0.000000 +611, 1.000000, 0.000000, 0.000000, 0.000000 +612, 1.000000, 0.000000, 0.000000, 0.000000 +613, 1.000000, 0.000000, 0.000000, 0.000000 +614, 1.000000, 0.000000, 0.000000, 0.000000 +615, 1.000000, 0.000000, 0.000000, 0.000000 +616, 1.000000, 0.000000, 0.000000, 0.000000 +617, 1.000000, 0.000000, 0.000000, 0.000000 +618, 1.000000, 0.000000, 0.000000, 0.000000 +619, 1.000000, 0.000000, 0.000000, 0.000000 +620, 1.000000, 0.000000, 0.000000, 0.000000 +621, 1.000000, 0.000000, 0.000000, 0.000000 +622, 1.000000, 0.000000, 0.000000, 0.000000 +623, 1.000000, 0.000000, 0.000000, 0.000000 +624, 1.000000, 0.000000, 0.000000, 0.000000 +625, 1.000000, 0.000000, 0.000000, 0.000000 +626, 1.000000, 0.000000, 0.000000, 0.000000 +627, 1.000000, 0.000000, 0.000000, 0.000000 +628, 1.000000, 0.000000, 0.000000, 0.000000 +629, 1.000000, 0.000000, 0.000000, 0.000000 +630, 1.000000, 0.000000, 0.000000, 0.000000 +631, 1.000000, 0.000000, 0.000000, 0.000000 +632, 1.000000, 0.000000, 0.000000, 0.000000 +633, 1.000000, 0.000000, 0.000000, 0.000000 +634, 1.000000, 0.000000, 0.000000, 0.000000 +635, 1.000000, 0.000000, 0.000000, 0.000000 +636, 1.000000, 0.000000, 0.000000, 0.000000 +637, 1.000000, 0.000000, 0.000000, 0.000000 +638, 1.000000, 0.000000, 0.000000, 0.000000 +639, 1.000000, 0.000000, 0.000000, 0.000000 +640, 1.000000, 0.000000, 0.000000, 0.000000 +641, 1.000000, 0.000000, 0.000000, 0.000000 +642, 1.000000, 0.000000, 0.000000, 0.000000 +643, 1.000000, 0.000000, 0.000000, 0.000000 +644, 1.000000, 0.000000, 0.000000, 0.000000 +645, 1.000000, 0.000000, 0.000000, 0.000000 +646, 1.000000, 0.000000, 0.000000, 0.000000 +647, 1.000000, 0.000000, 0.000000, 0.000000 +648, 1.000000, 0.000000, 0.000000, 0.000000 +649, 1.000000, 0.000000, 0.000000, 0.000000 +650, 1.000000, 0.000000, 0.000000, 0.000000 +651, 1.000000, 0.000000, 0.000000, 0.000000 +652, 1.000000, 0.000000, 0.000000, 0.000000 +653, 1.000000, 0.000000, 0.000000, 0.000000 +654, 1.000000, 0.000000, 0.000000, 0.000000 +655, 1.000000, 0.000000, 0.000000, 0.000000 +656, 1.000000, 0.000000, 0.000000, 0.000000 +657, 1.000000, 0.000000, 0.000000, 0.000000 +658, 1.000000, 0.000000, 0.000000, 0.000000 +659, 1.000000, 0.000000, 0.000000, 0.000000 +660, 1.000000, 0.000000, 0.000000, 0.000000 +661, 1.000000, 0.000000, 0.000000, 0.000000 +662, 1.000000, 0.000000, 0.000000, 0.000000 +663, 1.000000, 0.000000, 0.000000, 0.000000 +664, 1.000000, 0.000000, 0.000000, 0.000000 +665, 1.000000, 0.000000, 0.000000, 0.000000 +666, 1.000000, 0.000000, 0.000000, 0.000000 +667, 1.000000, 0.000000, 0.000000, 0.000000 +668, 1.000000, 0.000000, 0.000000, 0.000000 +669, 1.000000, 0.000000, 0.000000, 0.000000 +670, 1.000000, 0.000000, 0.000000, 0.000000 +671, 1.000000, 0.000000, 0.000000, 0.000000 +672, 1.000000, 0.000000, 0.000000, 0.000000 +673, 1.000000, 0.000000, 0.000000, 0.000000 +674, 1.000000, 0.000000, 0.000000, 0.000000 +675, 1.000000, 0.000000, 0.000000, 0.000000 +676, 1.000000, 0.000000, 0.000000, 0.000000 +677, 1.000000, 0.000000, 0.000000, 0.000000 +678, 1.000000, 0.000000, 0.000000, 0.000000 +679, 1.000000, 0.000000, 0.000000, 0.000000 +680, 1.000000, 0.000000, 0.000000, 0.000000 +681, 1.000000, 0.000000, 0.000000, 0.000000 +682, 1.000000, 0.000000, 0.000000, 0.000000 +683, 1.000000, 0.000000, 0.000000, 0.000000 +684, 1.000000, 0.000000, 0.000000, 0.000000 +685, 1.000000, 0.000000, 0.000000, 0.000000 +686, 1.000000, 0.000000, 0.000000, 0.000000 +687, 1.000000, 0.000000, 0.000000, 0.000000 +688, 1.000000, 0.000000, 0.000000, 0.000000 +689, 1.000000, 0.000000, 0.000000, 0.000000 +690, 1.000000, 0.000000, 0.000000, 0.000000 +691, 1.000000, 0.000000, 0.000000, 0.000000 +692, 1.000000, 0.000000, 0.000000, 0.000000 +693, 1.000000, 0.000000, 0.000000, 0.000000 +694, 1.000000, 0.000000, 0.000000, 0.000000 +695, 1.000000, 0.000000, 0.000000, 0.000000 +696, 1.000000, 0.000000, 0.000000, 0.000000 +697, 1.000000, 0.000000, 0.000000, 0.000000 +698, 1.000000, 0.000000, 0.000000, 0.000000 +699, 1.000000, 0.000000, 0.000000, 0.000000 +700, 1.000000, 0.000000, 0.000000, 0.000000 +701, 1.000000, 0.000000, 0.000000, 0.000000 +702, 1.000000, 0.000000, 0.000000, 0.000000 +703, 1.000000, 0.000000, 0.000000, 0.000000 +704, 1.000000, 0.000000, 0.000000, 0.000000 +705, 1.000000, 0.000000, 0.000000, 0.000000 +706, 1.000000, 0.000000, 0.000000, 0.000000 +707, 1.000000, 0.000000, 0.000000, 0.000000 +708, 1.000000, 0.000000, 0.000000, 0.000000 +709, 1.000000, 0.000000, 0.000000, 0.000000 +710, 1.000000, 0.000000, 0.000000, 0.000000 +711, 1.000000, 0.000000, 0.000000, 0.000000 +712, 1.000000, 0.000000, 0.000000, 0.000000 +713, 1.000000, 0.000000, 0.000000, 0.000000 +714, 1.000000, 0.000000, 0.000000, 0.000000 +715, 1.000000, 0.000000, 0.000000, 0.000000 +716, 1.000000, 0.000000, 0.000000, 0.000000 +717, 1.000000, 0.000000, 0.000000, 0.000000 +718, 1.000000, 0.000000, 0.000000, 0.000000 +719, 1.000000, 0.000000, 0.000000, 0.000000 +720, 1.000000, 0.000000, 0.000000, 0.000000 +721, 1.000000, 0.000000, 0.000000, 0.000000 +722, 1.000000, 0.000000, 0.000000, 0.000000 +723, 1.000000, 0.000000, 0.000000, 0.000000 +724, 1.000000, 0.000000, 0.000000, 0.000000 +725, 1.000000, 0.000000, 0.000000, 0.000000 +726, 1.000000, 0.000000, 0.000000, 0.000000 +727, 1.000000, 0.000000, 0.000000, 0.000000 +728, 1.000000, 0.000000, 0.000000, 0.000000 +729, 1.000000, 0.000000, 0.000000, 0.000000 +730, 1.000000, 0.000000, 0.000000, 0.000000 +731, 1.000000, 0.000000, 0.000000, 0.000000 +732, 1.000000, 0.000000, 0.000000, 0.000000 +733, 1.000000, 0.000000, 0.000000, 0.000000 +734, 1.000000, 0.000000, 0.000000, 0.000000 +735, 1.000000, 0.000000, 0.000000, 0.000000 +736, 1.000000, 0.000000, 0.000000, 0.000000 +737, 1.000000, 0.000000, 0.000000, 0.000000 +738, 1.000000, 0.000000, 0.000000, 0.000000 +739, 1.000000, 0.000000, 0.000000, 0.000000 +740, 1.000000, 0.000000, 0.000000, 0.000000 +741, 1.000000, 0.000000, 0.000000, 0.000000 +742, 1.000000, 0.000000, 0.000000, 0.000000 +743, 1.000000, 0.000000, 0.000000, 0.000000 +744, 1.000000, 0.000000, 0.000000, 0.000000 +745, 1.000000, 0.000000, 0.000000, 0.000000 +746, 1.000000, 0.000000, 0.000000, 0.000000 +747, 1.000000, 0.000000, 0.000000, 0.000000 +748, 1.000000, 0.000000, 0.000000, 0.000000 +749, 1.000000, 0.000000, 0.000000, 0.000000 +750, 1.000000, 0.000000, 0.000000, 0.000000 +751, 1.000000, 0.000000, 0.000000, 0.000000 +752, 1.000000, 0.000000, 0.000000, 0.000000 +753, 1.000000, 0.000000, 0.000000, 0.000000 +754, 1.000000, 0.000000, 0.000000, 0.000000 +755, 1.000000, 0.000000, 0.000000, 0.000000 +756, 1.000000, 0.000000, 0.000000, 0.000000 +757, 1.000000, 0.000000, 0.000000, 0.000000 +758, 1.000000, 0.000000, 0.000000, 0.000000 +759, 1.000000, 0.000000, 0.000000, 0.000000 +760, 1.000000, 0.000000, 0.000000, 0.000000 +761, 1.000000, 0.000000, 0.000000, 0.000000 +762, 1.000000, 0.000000, 0.000000, 0.000000 +763, 1.000000, 0.000000, 0.000000, 0.000000 +764, 1.000000, 0.000000, 0.000000, 0.000000 +765, 1.000000, 0.000000, 0.000000, 0.000000 +766, 1.000000, 0.000000, 0.000000, 0.000000 +767, 1.000000, 0.000000, 0.000000, 0.000000 +768, 1.000000, 0.000000, 0.000000, 0.000000 +769, 1.000000, 0.000000, 0.000000, 0.000000 +770, 1.000000, 0.000000, 0.000000, 0.000000 +771, 1.000000, 0.000000, 0.000000, 0.000000 +772, 1.000000, 0.000000, 0.000000, 0.000000 +773, 1.000000, 0.000000, 0.000000, 0.000000 +774, 1.000000, 0.000000, 0.000000, 0.000000 +775, 1.000000, 0.000000, 0.000000, 0.000000 +776, 1.000000, 0.000000, 0.000000, 0.000000 +777, 1.000000, 0.000000, 0.000000, 0.000000 +778, 1.000000, 0.000000, 0.000000, 0.000000 +779, 1.000000, 0.000000, 0.000000, 0.000000 +780, 1.000000, 0.000000, 0.000000, 0.000000 +781, 1.000000, 0.000000, 0.000000, 0.000000 +782, 1.000000, 0.000000, 0.000000, 0.000000 +783, 1.000000, 0.000000, 0.000000, 0.000000 +784, 1.000000, 0.000000, 0.000000, 0.000000 +785, 1.000000, 0.000000, 0.000000, 0.000000 +786, 1.000000, 0.000000, 0.000000, 0.000000 +787, 1.000000, 0.000000, 0.000000, 0.000000 +788, 1.000000, 0.000000, 0.000000, 0.000000 +789, 1.000000, 0.000000, 0.000000, 0.000000 +790, 1.000000, 0.000000, 0.000000, 0.000000 +791, 1.000000, 0.000000, 0.000000, 0.000000 +792, 1.000000, 0.000000, 0.000000, 0.000000 +793, 1.000000, 0.000000, 0.000000, 0.000000 +794, 1.000000, 0.000000, 0.000000, 0.000000 +795, 1.000000, 0.000000, 0.000000, 0.000000 +796, 1.000000, 0.000000, 0.000000, 0.000000 +797, 1.000000, 0.000000, 0.000000, 0.000000 +798, 1.000000, 0.000000, 0.000000, 0.000000 +799, 1.000000, 0.000000, 0.000000, 0.000000 +800, 1.000000, 0.000000, 0.000000, 0.000000 +801, 1.000000, 0.000000, 0.000000, 0.000000 +802, 1.000000, 0.000000, 0.000000, 0.000000 +803, 1.000000, 0.000000, 0.000000, 0.000000 +804, 1.000000, 0.000000, 0.000000, 0.000000 +805, 1.000000, 0.000000, 0.000000, 0.000000 +806, 1.000000, 0.000000, 0.000000, 0.000000 +807, 1.000000, 0.000000, 0.000000, 0.000000 +808, 1.000000, 0.000000, 0.000000, 0.000000 +809, 1.000000, 0.000000, 0.000000, 0.000000 +810, 1.000000, 0.000000, 0.000000, 0.000000 +811, 1.000000, 0.000000, 0.000000, 0.000000 +812, 1.000000, 0.000000, 0.000000, 0.000000 +813, 1.000000, 0.000000, 0.000000, 0.000000 +814, 1.000000, 0.000000, 0.000000, 0.000000 +815, 1.000000, 0.000000, 0.000000, 0.000000 +816, 1.000000, 0.000000, 0.000000, 0.000000 +817, 1.000000, 0.000000, 0.000000, 0.000000 +818, 1.000000, 0.000000, 0.000000, 0.000000 +819, 1.000000, 0.000000, 0.000000, 0.000000 +820, 1.000000, 0.000000, 0.000000, 0.000000 +821, 1.000000, 0.000000, 0.000000, 0.000000 +822, 1.000000, 0.000000, 0.000000, 0.000000 +823, 1.000000, 0.000000, 0.000000, 0.000000 +824, 1.000000, 0.000000, 0.000000, 0.000000 +825, 1.000000, 0.000000, 0.000000, 0.000000 +826, 1.000000, 0.000000, 0.000000, 0.000000 +827, 1.000000, 0.000000, 0.000000, 0.000000 +828, 1.000000, 0.000000, 0.000000, 0.000000 +829, 1.000000, 0.000000, 0.000000, 0.000000 +830, 1.000000, 0.000000, 0.000000, 0.000000 +831, 1.000000, 0.000000, 0.000000, 0.000000 +832, 1.000000, 0.000000, 0.000000, 0.000000 +833, 1.000000, 0.000000, 0.000000, 0.000000 +834, 1.000000, 0.000000, 0.000000, 0.000000 +835, 1.000000, 0.000000, 0.000000, 0.000000 +836, 1.000000, 0.000000, 0.000000, 0.000000 +837, 1.000000, 0.000000, 0.000000, 0.000000 +838, 1.000000, 0.000000, 0.000000, 0.000000 +839, 1.000000, 0.000000, 0.000000, 0.000000 +840, 1.000000, 0.000000, 0.000000, 0.000000 +841, 1.000000, 0.000000, 0.000000, 0.000000 +842, 1.000000, 0.000000, 0.000000, 0.000000 +843, 1.000000, 0.000000, 0.000000, 0.000000 +844, 1.000000, 0.000000, 0.000000, 0.000000 +845, 1.000000, 0.000000, 0.000000, 0.000000 +846, 1.000000, 0.000000, 0.000000, 0.000000 +847, 1.000000, 0.000000, 0.000000, 0.000000 +848, 1.000000, 0.000000, 0.000000, 0.000000 +849, 1.000000, 0.000000, 0.000000, 0.000000 +850, 1.000000, 0.000000, 0.000000, 0.000000 +851, 1.000000, 0.000000, 0.000000, 0.000000 +852, 1.000000, 0.000000, 0.000000, 0.000000 +853, 1.000000, 0.000000, 0.000000, 0.000000 +854, 1.000000, 0.000000, 0.000000, 0.000000 +855, 1.000000, 0.000000, 0.000000, 0.000000 +856, 1.000000, 0.000000, 0.000000, 0.000000 +857, 1.000000, 0.000000, 0.000000, 0.000000 +858, 1.000000, 0.000000, 0.000000, 0.000000 +859, 1.000000, 0.000000, 0.000000, 0.000000 +860, 1.000000, 0.000000, 0.000000, 0.000000 +861, 1.000000, 0.000000, 0.000000, 0.000000 +862, 1.000000, 0.000000, 0.000000, 0.000000 +863, 1.000000, 0.000000, 0.000000, 0.000000 +864, 1.000000, 0.000000, 0.000000, 0.000000 +865, 1.000000, 0.000000, 0.000000, 0.000000 +866, 1.000000, 0.000000, 0.000000, 0.000000 +867, 1.000000, 0.000000, 0.000000, 0.000000 +868, 1.000000, 0.000000, 0.000000, 0.000000 +869, 1.000000, 0.000000, 0.000000, 0.000000 +870, 1.000000, 0.000000, 0.000000, 0.000000 +871, 1.000000, 0.000000, 0.000000, 0.000000 +872, 1.000000, 0.000000, 0.000000, 0.000000 +873, 1.000000, 0.000000, 0.000000, 0.000000 +874, 1.000000, 0.000000, 0.000000, 0.000000 +875, 1.000000, 0.000000, 0.000000, 0.000000 +876, 1.000000, 0.000000, 0.000000, 0.000000 +877, 1.000000, 0.000000, 0.000000, 0.000000 +878, 1.000000, 0.000000, 0.000000, 0.000000 +879, 1.000000, 0.000000, 0.000000, 0.000000 +880, 1.000000, 0.000000, 0.000000, 0.000000 +881, 1.000000, 0.000000, 0.000000, 0.000000 +882, 1.000000, 0.000000, 0.000000, 0.000000 +883, 1.000000, 0.000000, 0.000000, 0.000000 +884, 1.000000, 0.000000, 0.000000, 0.000000 +885, 1.000000, 0.000000, 0.000000, 0.000000 +886, 1.000000, 0.000000, 0.000000, 0.000000 +887, 1.000000, 0.000000, 0.000000, 0.000000 +888, 1.000000, 0.000000, 0.000000, 0.000000 +889, 1.000000, 0.000000, 0.000000, 0.000000 +890, 1.000000, 0.000000, 0.000000, 0.000000 +891, 1.000000, 0.000000, 0.000000, 0.000000 +892, 1.000000, 0.000000, 0.000000, 0.000000 +893, 1.000000, 0.000000, 0.000000, 0.000000 +894, 1.000000, 0.000000, 0.000000, 0.000000 +895, 1.000000, 0.000000, 0.000000, 0.000000 +896, 1.000000, 0.000000, 0.000000, 0.000000 +897, 1.000000, 0.000000, 0.000000, 0.000000 +898, 1.000000, 0.000000, 0.000000, 0.000000 +899, 1.000000, 0.000000, 0.000000, 0.000000 +900, 1.000000, 0.000000, 0.000000, 0.000000 +901, 1.000000, 0.000000, 0.000000, 0.000000 +902, 1.000000, 0.000000, 0.000000, 0.000000 +903, 1.000000, 0.000000, 0.000000, 0.000000 +904, 1.000000, 0.000000, 0.000000, 0.000000 +905, 1.000000, 0.000000, 0.000000, 0.000000 +906, 1.000000, 0.000000, 0.000000, 0.000000 +907, 1.000000, 0.000000, 0.000000, 0.000000 +908, 1.000000, 0.000000, 0.000000, 0.000000 +909, 1.000000, 0.000000, 0.000000, 0.000000 +910, 1.000000, 0.000000, 0.000000, 0.000000 +911, 1.000000, 0.000000, 0.000000, 0.000000 +912, 1.000000, 0.000000, 0.000000, 0.000000 +913, 1.000000, 0.000000, 0.000000, 0.000000 +914, 1.000000, 0.000000, 0.000000, 0.000000 +915, 1.000000, 0.000000, 0.000000, 0.000000 +916, 1.000000, 0.000000, 0.000000, 0.000000 +917, 1.000000, 0.000000, 0.000000, 0.000000 +918, 1.000000, 0.000000, 0.000000, 0.000000 +919, 1.000000, 0.000000, 0.000000, 0.000000 +920, 1.000000, 0.000000, 0.000000, 0.000000 +921, 1.000000, 0.000000, 0.000000, 0.000000 +922, 1.000000, 0.000000, 0.000000, 0.000000 +923, 1.000000, 0.000000, 0.000000, 0.000000 +924, 1.000000, 0.000000, 0.000000, 0.000000 +925, 1.000000, 0.000000, 0.000000, 0.000000 +926, 1.000000, 0.000000, 0.000000, 0.000000 +927, 1.000000, 0.000000, 0.000000, 0.000000 +928, 1.000000, 0.000000, 0.000000, 0.000000 +929, 1.000000, 0.000000, 0.000000, 0.000000 +930, 1.000000, 0.000000, 0.000000, 0.000000 +931, 1.000000, 0.000000, 0.000000, 0.000000 +932, 1.000000, 0.000000, 0.000000, 0.000000 +933, 1.000000, 0.000000, 0.000000, 0.000000 +934, 1.000000, 0.000000, 0.000000, 0.000000 +935, 1.000000, 0.000000, 0.000000, 0.000000 +936, 1.000000, 0.000000, 0.000000, 0.000000 +937, 1.000000, 0.000000, 0.000000, 0.000000 +938, 1.000000, 0.000000, 0.000000, 0.000000 +939, 1.000000, 0.000000, 0.000000, 0.000000 +940, 1.000000, 0.000000, 0.000000, 0.000000 +941, 1.000000, 0.000000, 0.000000, 0.000000 +942, 1.000000, 0.000000, 0.000000, 0.000000 +943, 1.000000, 0.000000, 0.000000, 0.000000 +944, 1.000000, 0.000000, 0.000000, 0.000000 +945, 1.000000, 0.000000, 0.000000, 0.000000 +946, 1.000000, 0.000000, 0.000000, 0.000000 +947, 1.000000, 0.000000, 0.000000, 0.000000 +948, 1.000000, 0.000000, 0.000000, 0.000000 +949, 1.000000, 0.000000, 0.000000, 0.000000 +950, 1.000000, 0.000000, 0.000000, 0.000000 +951, 1.000000, 0.000000, 0.000000, 0.000000 +952, 1.000000, 0.000000, 0.000000, 0.000000 +953, 1.000000, 0.000000, 0.000000, 0.000000 +954, 1.000000, 0.000000, 0.000000, 0.000000 +955, 1.000000, 0.000000, 0.000000, 0.000000 +956, 1.000000, 0.000000, 0.000000, 0.000000 +957, 1.000000, 0.000000, 0.000000, 0.000000 +958, 1.000000, 0.000000, 0.000000, 0.000000 +959, 1.000000, 0.000000, 0.000000, 0.000000 +960, 1.000000, 0.000000, 0.000000, 0.000000 +961, 1.000000, 0.000000, 0.000000, 0.000000 +962, 1.000000, 0.000000, 0.000000, 0.000000 +963, 1.000000, 0.000000, 0.000000, 0.000000 +964, 1.000000, 0.000000, 0.000000, 0.000000 +965, 1.000000, 0.000000, 0.000000, 0.000000 +966, 1.000000, 0.000000, 0.000000, 0.000000 +967, 1.000000, 0.000000, 0.000000, 0.000000 +968, 1.000000, 0.000000, 0.000000, 0.000000 +969, 1.000000, 0.000000, 0.000000, 0.000000 +970, 1.000000, 0.000000, 0.000000, 0.000000 +971, 1.000000, 0.000000, 0.000000, 0.000000 +972, 1.000000, 0.000000, 0.000000, 0.000000 +973, 1.000000, 0.000000, 0.000000, 0.000000 +974, 1.000000, 0.000000, 0.000000, 0.000000 +975, 1.000000, 0.000000, 0.000000, 0.000000 +976, 1.000000, 0.000000, 0.000000, 0.000000 +977, 1.000000, 0.000000, 0.000000, 0.000000 +978, 1.000000, 0.000000, 0.000000, 0.000000 +979, 1.000000, 0.000000, 0.000000, 0.000000 +980, 1.000000, 0.000000, 0.000000, 0.000000 +981, 1.000000, 0.000000, 0.000000, 0.000000 +982, 1.000000, 0.000000, 0.000000, 0.000000 +983, 1.000000, 0.000000, 0.000000, 0.000000 +984, 1.000000, 0.000000, 0.000000, 0.000000 +985, 1.000000, 0.000000, 0.000000, 0.000000 +986, 1.000000, 0.000000, 0.000000, 0.000000 +987, 1.000000, 0.000000, 0.000000, 0.000000 +988, 1.000000, 0.000000, 0.000000, 0.000000 +989, 1.000000, 0.000000, 0.000000, 0.000000 +990, 1.000000, 0.000000, 0.000000, 0.000000 +991, 1.000000, 0.000000, 0.000000, 0.000000 +992, 1.000000, 0.000000, 0.000000, 0.000000 +993, 1.000000, 0.000000, 0.000000, 0.000000 +994, 1.000000, 0.000000, 0.000000, 0.000000 +995, 1.000000, 0.000000, 0.000000, 0.000000 +996, 1.000000, 0.000000, 0.000000, 0.000000 +997, 1.000000, 0.000000, 0.000000, 0.000000 +998, 1.000000, 0.000000, 0.000000, 0.000000 +999, 1.000000, 0.000000, 0.000000, 0.000000 +1000, 1.000000, 0.000000, 0.000000, 0.000000 +1001, 1.000000, 0.000000, 0.000000, 0.000000 +1002, 1.000000, 0.000000, 0.000000, 0.000000 +1003, 1.000000, 0.000000, 0.000000, 0.000000 +1004, 1.000000, 0.000000, 0.000000, 0.000000 +1005, 1.000000, 0.000000, 0.000000, 0.000000 +1006, 1.000000, 0.000000, 0.000000, 0.000000 +1007, 1.000000, 0.000000, 0.000000, 0.000000 +1008, 1.000000, 0.000000, 0.000000, 0.000000 +1009, 1.000000, 0.000000, 0.000000, 0.000000 +1010, 1.000000, 0.000000, 0.000000, 0.000000 +1011, 1.000000, 0.000000, 0.000000, 0.000000 +1012, 1.000000, 0.000000, 0.000000, 0.000000 +1013, 1.000000, 0.000000, 0.000000, 0.000000 +1014, 1.000000, 0.000000, 0.000000, 0.000000 +1015, 1.000000, 0.000000, 0.000000, 0.000000 +1016, 1.000000, 0.000000, 0.000000, 0.000000 +1017, 1.000000, 0.000000, 0.000000, 0.000000 +1018, 1.000000, 0.000000, 0.000000, 0.000000 +1019, 1.000000, 0.000000, 0.000000, 0.000000 +1020, 1.000000, 0.000000, 0.000000, 0.000000 +1021, 1.000000, 0.000000, 0.000000, 0.000000 +1022, 1.000000, 0.000000, 0.000000, 0.000000 +1023, 1.000000, 0.000000, 0.000000, 0.000000 +1024, 1.000000, 0.000000, 0.000000, 0.000000 +1025, 1.000000, 0.000000, 0.000000, 0.000000 +1026, 1.000000, 0.000000, 0.000000, 0.000000 +1027, 1.000000, 0.000000, 0.000000, 0.000000 +1028, 1.000000, 0.000000, 0.000000, 0.000000 +1029, 1.000000, 0.000000, 0.000000, 0.000000 +1030, 1.000000, 0.000000, 0.000000, 0.000000 +1031, 1.000000, 0.000000, 0.000000, 0.000000 +1032, 1.000000, 0.000000, 0.000000, 0.000000 +1033, 1.000000, 0.000000, 0.000000, 0.000000 +1034, 1.000000, 0.000000, 0.000000, 0.000000 +1035, 1.000000, 0.000000, 0.000000, 0.000000 +1036, 1.000000, 0.000000, 0.000000, 0.000000 +1037, 1.000000, 0.000000, 0.000000, 0.000000 +1038, 1.000000, 0.000000, 0.000000, 0.000000 +1039, 1.000000, 0.000000, 0.000000, 0.000000 +1040, 1.000000, 0.000000, 0.000000, 0.000000 +1041, 1.000000, 0.000000, 0.000000, 0.000000 +1042, 1.000000, 0.000000, 0.000000, 0.000000 +1043, 1.000000, 0.000000, 0.000000, 0.000000 +1044, 1.000000, 0.000000, 0.000000, 0.000000 +1045, 1.000000, 0.000000, 0.000000, 0.000000 +1046, 1.000000, 0.000000, 0.000000, 0.000000 +1047, 1.000000, 0.000000, 0.000000, 0.000000 +1048, 1.000000, 0.000000, 0.000000, 0.000000 +1049, 1.000000, 0.000000, 0.000000, 0.000000 +1050, 1.000000, 0.000000, 0.000000, 0.000000 +1051, 1.000000, 0.000000, 0.000000, 0.000000 +1052, 1.000000, 0.000000, 0.000000, 0.000000 +1053, 1.000000, 0.000000, 0.000000, 0.000000 +1054, 1.000000, 0.000000, 0.000000, 0.000000 +1055, 1.000000, 0.000000, 0.000000, 0.000000 +1056, 1.000000, 0.000000, 0.000000, 0.000000 +1057, 1.000000, 0.000000, 0.000000, 0.000000 +1058, 1.000000, 0.000000, 0.000000, 0.000000 +1059, 1.000000, 0.000000, 0.000000, 0.000000 +1060, 1.000000, 0.000000, 0.000000, 0.000000 +1061, 1.000000, 0.000000, 0.000000, 0.000000 +1062, 1.000000, 0.000000, 0.000000, 0.000000 +1063, 1.000000, 0.000000, 0.000000, 0.000000 +1064, 1.000000, 0.000000, 0.000000, 0.000000 +1065, 1.000000, 0.000000, 0.000000, 0.000000 +1066, 1.000000, 0.000000, 0.000000, 0.000000 +1067, 1.000000, 0.000000, 0.000000, 0.000000 +1068, 1.000000, 0.000000, 0.000000, 0.000000 +1069, 1.000000, 0.000000, 0.000000, 0.000000 +1070, 1.000000, 0.000000, 0.000000, 0.000000 +1071, 1.000000, 0.000000, 0.000000, 0.000000 +1072, 1.000000, 0.000000, 0.000000, 0.000000 +1073, 1.000000, 0.000000, 0.000000, 0.000000 +1074, 1.000000, 0.000000, 0.000000, 0.000000 +1075, 1.000000, 0.000000, 0.000000, 0.000000 +1076, 1.000000, 0.000000, 0.000000, 0.000000 +1077, 1.000000, 0.000000, 0.000000, 0.000000 +1078, 1.000000, 0.000000, 0.000000, 0.000000 +1079, 1.000000, 0.000000, 0.000000, 0.000000 +1080, 1.000000, 0.000000, 0.000000, 0.000000 +1081, 1.000000, 0.000000, 0.000000, 0.000000 +1082, 1.000000, 0.000000, 0.000000, 0.000000 +1083, 1.000000, 0.000000, 0.000000, 0.000000 +1084, 1.000000, 0.000000, 0.000000, 0.000000 +1085, 1.000000, 0.000000, 0.000000, 0.000000 +1086, 1.000000, 0.000000, 0.000000, 0.000000 +1087, 1.000000, 0.000000, 0.000000, 0.000000 +1088, 1.000000, 0.000000, 0.000000, 0.000000 +1089, 1.000000, 0.000000, 0.000000, 0.000000 +1090, 1.000000, 0.000000, 0.000000, 0.000000 +1091, 1.000000, 0.000000, 0.000000, 0.000000 +1092, 1.000000, 0.000000, 0.000000, 0.000000 +1093, 1.000000, 0.000000, 0.000000, 0.000000 +1094, 1.000000, 0.000000, 0.000000, 0.000000 +1095, 1.000000, 0.000000, 0.000000, 0.000000 +1096, 1.000000, 0.000000, 0.000000, 0.000000 +1097, 1.000000, 0.000000, 0.000000, 0.000000 +1098, 1.000000, 0.000000, 0.000000, 0.000000 +1099, 1.000000, 0.000000, 0.000000, 0.000000 +1100, 1.000000, 0.000000, 0.000000, 0.000000 +1101, 1.000000, 0.000000, 0.000000, 0.000000 +1102, 1.000000, 0.000000, 0.000000, 0.000000 +1103, 1.000000, 0.000000, 0.000000, 0.000000 +1104, 1.000000, 0.000000, 0.000000, 0.000000 +1105, 1.000000, 0.000000, 0.000000, 0.000000 +1106, 1.000000, 0.000000, 0.000000, 0.000000 +1107, 1.000000, 0.000000, 0.000000, 0.000000 +1108, 1.000000, 0.000000, 0.000000, 0.000000 +1109, 1.000000, 0.000000, 0.000000, 0.000000 +1110, 1.000000, 0.000000, 0.000000, 0.000000 +1111, 1.000000, 0.000000, 0.000000, 0.000000 +1112, 1.000000, 0.000000, 0.000000, 0.000000 +1113, 1.000000, 0.000000, 0.000000, 0.000000 +1114, 1.000000, 0.000000, 0.000000, 0.000000 +1115, 1.000000, 0.000000, 0.000000, 0.000000 +1116, 1.000000, 0.000000, 0.000000, 0.000000 +1117, 1.000000, 0.000000, 0.000000, 0.000000 +1118, 1.000000, 0.000000, 0.000000, 0.000000 +1119, 1.000000, 0.000000, 0.000000, 0.000000 +1120, 1.000000, 0.000000, 0.000000, 0.000000 +1121, 1.000000, 0.000000, 0.000000, 0.000000 +1122, 1.000000, 0.000000, 0.000000, 0.000000 +1123, 1.000000, 0.000000, 0.000000, 0.000000 +1124, 1.000000, 0.000000, 0.000000, 0.000000 +1125, 1.000000, 0.000000, 0.000000, 0.000000 +1126, 1.000000, 0.000000, 0.000000, 0.000000 +1127, 1.000000, 0.000000, 0.000000, 0.000000 +1128, 1.000000, 0.000000, 0.000000, 0.000000 +1129, 1.000000, 0.000000, 0.000000, 0.000000 +1130, 1.000000, 0.000000, 0.000000, 0.000000 +1131, 1.000000, 0.000000, 0.000000, 0.000000 +1132, 1.000000, 0.000000, 0.000000, 0.000000 +1133, 1.000000, 0.000000, 0.000000, 0.000000 +1134, 1.000000, 0.000000, 0.000000, 0.000000 +1135, 1.000000, 0.000000, 0.000000, 0.000000 +1136, 1.000000, 0.000000, 0.000000, 0.000000 +1137, 1.000000, 0.000000, 0.000000, 0.000000 +1138, 1.000000, 0.000000, 0.000000, 0.000000 +1139, 1.000000, 0.000000, 0.000000, 0.000000 +1140, 1.000000, 0.000000, 0.000000, 0.000000 +1141, 1.000000, 0.000000, 0.000000, 0.000000 +1142, 1.000000, 0.000000, 0.000000, 0.000000 +1143, 1.000000, 0.000000, 0.000000, 0.000000 +1144, 1.000000, 0.000000, 0.000000, 0.000000 +1145, 1.000000, 0.000000, 0.000000, 0.000000 +1146, 1.000000, 0.000000, 0.000000, 0.000000 +1147, 1.000000, 0.000000, 0.000000, 0.000000 +1148, 1.000000, 0.000000, 0.000000, 0.000000 +1149, 1.000000, 0.000000, 0.000000, 0.000000 +1150, 1.000000, 0.000000, 0.000000, 0.000000 +1151, 1.000000, 0.000000, 0.000000, 0.000000 +1152, 1.000000, 0.000000, 0.000000, 0.000000 +1153, 1.000000, 0.000000, 0.000000, 0.000000 +1154, 1.000000, 0.000000, 0.000000, 0.000000 +1155, 1.000000, 0.000000, 0.000000, 0.000000 +1156, 1.000000, 0.000000, 0.000000, 0.000000 +1157, 1.000000, 0.000000, 0.000000, 0.000000 +1158, 1.000000, 0.000000, 0.000000, 0.000000 +1159, 1.000000, 0.000000, 0.000000, 0.000000 +1160, 1.000000, 0.000000, 0.000000, 0.000000 +1161, 1.000000, 0.000000, 0.000000, 0.000000 +1162, 1.000000, 0.000000, 0.000000, 0.000000 +1163, 1.000000, 0.000000, 0.000000, 0.000000 +1164, 1.000000, 0.000000, 0.000000, 0.000000 +1165, 1.000000, 0.000000, 0.000000, 0.000000 +1166, 1.000000, 0.000000, 0.000000, 0.000000 +1167, 1.000000, 0.000000, 0.000000, 0.000000 +1168, 1.000000, 0.000000, 0.000000, 0.000000 +1169, 1.000000, 0.000000, 0.000000, 0.000000 +1170, 1.000000, 0.000000, 0.000000, 0.000000 +1171, 1.000000, 0.000000, 0.000000, 0.000000 +1172, 1.000000, 0.000000, 0.000000, 0.000000 +1173, 1.000000, 0.000000, 0.000000, 0.000000 +1174, 1.000000, 0.000000, 0.000000, 0.000000 +1175, 1.000000, 0.000000, 0.000000, 0.000000 +1176, 1.000000, 0.000000, 0.000000, 0.000000 +1177, 1.000000, 0.000000, 0.000000, 0.000000 +1178, 1.000000, 0.000000, 0.000000, 0.000000 +1179, 1.000000, 0.000000, 0.000000, 0.000000 +1180, 1.000000, 0.000000, 0.000000, 0.000000 +1181, 1.000000, 0.000000, 0.000000, 0.000000 +1182, 1.000000, 0.000000, 0.000000, 0.000000 +1183, 1.000000, 0.000000, 0.000000, 0.000000 +1184, 1.000000, 0.000000, 0.000000, 0.000000 +1185, 1.000000, 0.000000, 0.000000, 0.000000 +1186, 1.000000, 0.000000, 0.000000, 0.000000 +1187, 1.000000, 0.000000, 0.000000, 0.000000 +1188, 1.000000, 0.000000, 0.000000, 0.000000 +1189, 1.000000, 0.000000, 0.000000, 0.000000 +1190, 1.000000, 0.000000, 0.000000, 0.000000 +1191, 1.000000, 0.000000, 0.000000, 0.000000 +1192, 1.000000, 0.000000, 0.000000, 0.000000 +1193, 1.000000, 0.000000, 0.000000, 0.000000 +1194, 1.000000, 0.000000, 0.000000, 0.000000 +1195, 1.000000, 0.000000, 0.000000, 0.000000 +1196, 1.000000, 0.000000, 0.000000, 0.000000 +1197, 1.000000, 0.000000, 0.000000, 0.000000 +1198, 1.000000, 0.000000, 0.000000, 0.000000 +1199, 1.000000, 0.000000, 0.000000, 0.000000 +1200, 1.000000, 0.000000, 0.000000, 0.000000 +1201, 1.000000, 0.000000, 0.000000, 0.000000 +1202, 1.000000, 0.000000, 0.000000, 0.000000 +1203, 1.000000, 0.000000, 0.000000, 0.000000 +1204, 1.000000, 0.000000, 0.000000, 0.000000 +1205, 1.000000, 0.000000, 0.000000, 0.000000 +1206, 1.000000, 0.000000, 0.000000, 0.000000 +1207, 1.000000, 0.000000, 0.000000, 0.000000 +1208, 1.000000, 0.000000, 0.000000, 0.000000 +1209, 1.000000, 0.000000, 0.000000, 0.000000 +1210, 1.000000, 0.000000, 0.000000, 0.000000 +1211, 1.000000, 0.000000, 0.000000, 0.000000 +1212, 1.000000, 0.000000, 0.000000, 0.000000 +1213, 1.000000, 0.000000, 0.000000, 0.000000 +1214, 1.000000, 0.000000, 0.000000, 0.000000 +1215, 1.000000, 0.000000, 0.000000, 0.000000 +1216, 1.000000, 0.000000, 0.000000, 0.000000 +1217, 1.000000, 0.000000, 0.000000, 0.000000 +1218, 1.000000, 0.000000, 0.000000, 0.000000 +1219, 1.000000, 0.000000, 0.000000, 0.000000 +1220, 1.000000, 0.000000, 0.000000, 0.000000 +1221, 1.000000, 0.000000, 0.000000, 0.000000 +1222, 1.000000, 0.000000, 0.000000, 0.000000 +1223, 1.000000, 0.000000, 0.000000, 0.000000 +1224, 1.000000, 0.000000, 0.000000, 0.000000 +1225, 1.000000, 0.000000, 0.000000, 0.000000 +1226, 1.000000, 0.000000, 0.000000, 0.000000 +1227, 1.000000, 0.000000, 0.000000, 0.000000 +1228, 1.000000, 0.000000, 0.000000, 0.000000 +1229, 1.000000, 0.000000, 0.000000, 0.000000 +1230, 1.000000, 0.000000, 0.000000, 0.000000 +1231, 1.000000, 0.000000, 0.000000, 0.000000 +1232, 1.000000, 0.000000, 0.000000, 0.000000 +1233, 1.000000, 0.000000, 0.000000, 0.000000 +1234, 1.000000, 0.000000, 0.000000, 0.000000 +1235, 1.000000, 0.000000, 0.000000, 0.000000 +1236, 1.000000, 0.000000, 0.000000, 0.000000 +1237, 1.000000, 0.000000, 0.000000, 0.000000 +1238, 1.000000, 0.000000, 0.000000, 0.000000 +1239, 1.000000, 0.000000, 0.000000, 0.000000 +1240, 1.000000, 0.000000, 0.000000, 0.000000 +1241, 1.000000, 0.000000, 0.000000, 0.000000 +1242, 1.000000, 0.000000, 0.000000, 0.000000 +1243, 1.000000, 0.000000, 0.000000, 0.000000 +1244, 1.000000, 0.000000, 0.000000, 0.000000 +1245, 1.000000, 0.000000, 0.000000, 0.000000 +1246, 1.000000, 0.000000, 0.000000, 0.000000 +1247, 1.000000, 0.000000, 0.000000, 0.000000 +1248, 1.000000, 0.000000, 0.000000, 0.000000 +1249, 1.000000, 0.000000, 0.000000, 0.000000 +1250, 1.000000, 0.000000, 0.000000, 0.000000 +1251, 1.000000, 0.000000, 0.000000, 0.000000 +1252, 1.000000, 0.000000, 0.000000, 0.000000 +1253, 1.000000, 0.000000, 0.000000, 0.000000 +1254, 1.000000, 0.000000, 0.000000, 0.000000 +1255, 1.000000, 0.000000, 0.000000, 0.000000 +1256, 1.000000, 0.000000, 0.000000, 0.000000 +1257, 1.000000, 0.000000, 0.000000, 0.000000 +1258, 1.000000, 0.000000, 0.000000, 0.000000 +1259, 1.000000, 0.000000, 0.000000, 0.000000 +1260, 1.000000, 0.000000, 0.000000, 0.000000 +1261, 1.000000, 0.000000, 0.000000, 0.000000 +1262, 1.000000, 0.000000, 0.000000, 0.000000 +1263, 1.000000, 0.000000, 0.000000, 0.000000 +1264, 1.000000, 0.000000, 0.000000, 0.000000 +1265, 1.000000, 0.000000, 0.000000, 0.000000 +1266, 1.000000, 0.000000, 0.000000, 0.000000 +1267, 1.000000, 0.000000, 0.000000, 0.000000 +1268, 1.000000, 0.000000, 0.000000, 0.000000 +1269, 1.000000, 0.000000, 0.000000, 0.000000 +1270, 1.000000, 0.000000, 0.000000, 0.000000 +1271, 1.000000, 0.000000, 0.000000, 0.000000 +1272, 1.000000, 0.000000, 0.000000, 0.000000 +1273, 1.000000, 0.000000, 0.000000, 0.000000 +1274, 1.000000, 0.000000, 0.000000, 0.000000 +1275, 1.000000, 0.000000, 0.000000, 0.000000 +1276, 1.000000, 0.000000, 0.000000, 0.000000 +1277, 1.000000, 0.000000, 0.000000, 0.000000 +1278, 1.000000, 0.000000, 0.000000, 0.000000 +1279, 1.000000, 0.000000, 0.000000, 0.000000 +1280, 1.000000, 0.000000, 0.000000, 0.000000 +1281, 1.000000, 0.000000, 0.000000, 0.000000 +1282, 1.000000, 0.000000, 0.000000, 0.000000 +1283, 1.000000, 0.000000, 0.000000, 0.000000 +1284, 1.000000, 0.000000, 0.000000, 0.000000 +1285, 1.000000, 0.000000, 0.000000, 0.000000 +1286, 1.000000, 0.000000, 0.000000, 0.000000 +1287, 1.000000, 0.000000, 0.000000, 0.000000 +1288, 1.000000, 0.000000, 0.000000, 0.000000 +1289, 1.000000, 0.000000, 0.000000, 0.000000 +1290, 1.000000, 0.000000, 0.000000, 0.000000 +1291, 1.000000, 0.000000, 0.000000, 0.000000 +1292, 1.000000, 0.000000, 0.000000, 0.000000 +1293, 1.000000, 0.000000, 0.000000, 0.000000 +1294, 1.000000, 0.000000, 0.000000, 0.000000 +1295, 1.000000, 0.000000, 0.000000, 0.000000 +1296, 1.000000, 0.000000, 0.000000, 0.000000 +1297, 1.000000, 0.000000, 0.000000, 0.000000 +1298, 1.000000, 0.000000, 0.000000, 0.000000 +1299, 1.000000, 0.000000, 0.000000, 0.000000 +1300, 1.000000, 0.000000, 0.000000, 0.000000 +1301, 1.000000, 0.000000, 0.000000, 0.000000 +1302, 1.000000, 0.000000, 0.000000, 0.000000 +1303, 1.000000, 0.000000, 0.000000, 0.000000 +1304, 1.000000, 0.000000, 0.000000, 0.000000 +1305, 1.000000, 0.000000, 0.000000, 0.000000 +1306, 1.000000, 0.000000, 0.000000, 0.000000 +1307, 1.000000, 0.000000, 0.000000, 0.000000 +1308, 1.000000, 0.000000, 0.000000, 0.000000 +1309, 1.000000, 0.000000, 0.000000, 0.000000 +1310, 1.000000, 0.000000, 0.000000, 0.000000 +1311, 1.000000, 0.000000, 0.000000, 0.000000 +1312, 1.000000, 0.000000, 0.000000, 0.000000 +1313, 1.000000, 0.000000, 0.000000, 0.000000 +1314, 1.000000, 0.000000, 0.000000, 0.000000 +1315, 1.000000, 0.000000, 0.000000, 0.000000 +1316, 1.000000, 0.000000, 0.000000, 0.000000 +1317, 1.000000, 0.000000, 0.000000, 0.000000 +1318, 1.000000, 0.000000, 0.000000, 0.000000 +1319, 1.000000, 0.000000, 0.000000, 0.000000 +1320, 1.000000, 0.000000, 0.000000, 0.000000 +1321, 1.000000, 0.000000, 0.000000, 0.000000 +1322, 1.000000, 0.000000, 0.000000, 0.000000 +1323, 1.000000, 0.000000, 0.000000, 0.000000 +1324, 1.000000, 0.000000, 0.000000, 0.000000 +1325, 1.000000, 0.000000, 0.000000, 0.000000 +1326, 1.000000, 0.000000, 0.000000, 0.000000 +1327, 1.000000, 0.000000, 0.000000, 0.000000 +1328, 1.000000, 0.000000, 0.000000, 0.000000 +1329, 1.000000, 0.000000, 0.000000, 0.000000 +1330, 1.000000, 0.000000, 0.000000, 0.000000 +1331, 1.000000, 0.000000, 0.000000, 0.000000 +1332, 1.000000, 0.000000, 0.000000, 0.000000 +1333, 1.000000, 0.000000, 0.000000, 0.000000 +1334, 1.000000, 0.000000, 0.000000, 0.000000 +1335, 1.000000, 0.000000, 0.000000, 0.000000 +1336, 1.000000, 0.000000, 0.000000, 0.000000 +1337, 1.000000, 0.000000, 0.000000, 0.000000 +1338, 1.000000, 0.000000, 0.000000, 0.000000 +1339, 1.000000, 0.000000, 0.000000, 0.000000 +1340, 1.000000, 0.000000, 0.000000, 0.000000 +1341, 1.000000, 0.000000, 0.000000, 0.000000 +1342, 1.000000, 0.000000, 0.000000, 0.000000 +1343, 1.000000, 0.000000, 0.000000, 0.000000 +1344, 1.000000, 0.000000, 0.000000, 0.000000 +1345, 1.000000, 0.000000, 0.000000, 0.000000 +1346, 1.000000, 0.000000, 0.000000, 0.000000 +1347, 1.000000, 0.000000, 0.000000, 0.000000 +1348, 1.000000, 0.000000, 0.000000, 0.000000 +1349, 1.000000, 0.000000, 0.000000, 0.000000 +1350, 1.000000, 0.000000, 0.000000, 0.000000 +1351, 1.000000, 0.000000, 0.000000, 0.000000 +1352, 1.000000, 0.000000, 0.000000, 0.000000 +1353, 1.000000, 0.000000, 0.000000, 0.000000 +1354, 1.000000, 0.000000, 0.000000, 0.000000 +1355, 1.000000, 0.000000, 0.000000, 0.000000 +1356, 1.000000, 0.000000, 0.000000, 0.000000 +1357, 1.000000, 0.000000, 0.000000, 0.000000 +1358, 1.000000, 0.000000, 0.000000, 0.000000 +1359, 1.000000, 0.000000, 0.000000, 0.000000 +1360, 1.000000, 0.000000, 0.000000, 0.000000 +1361, 1.000000, 0.000000, 0.000000, 0.000000 +1362, 1.000000, 0.000000, 0.000000, 0.000000 +1363, 1.000000, 0.000000, 0.000000, 0.000000 +1364, 1.000000, 0.000000, 0.000000, 0.000000 +1365, 1.000000, 0.000000, 0.000000, 0.000000 +1366, 1.000000, 0.000000, 0.000000, 0.000000 +1367, 1.000000, 0.000000, 0.000000, 0.000000 +1368, 1.000000, 0.000000, 0.000000, 0.000000 +1369, 1.000000, 0.000000, 0.000000, 0.000000 +1370, 1.000000, 0.000000, 0.000000, 0.000000 +1371, 1.000000, 0.000000, 0.000000, 0.000000 +1372, 1.000000, 0.000000, 0.000000, 0.000000 +1373, 1.000000, 0.000000, 0.000000, 0.000000 +1374, 1.000000, 0.000000, 0.000000, 0.000000 +1375, 1.000000, 0.000000, 0.000000, 0.000000 +1376, 1.000000, 0.000000, 0.000000, 0.000000 +1377, 1.000000, 0.000000, 0.000000, 0.000000 +1378, 1.000000, 0.000000, 0.000000, 0.000000 +1379, 1.000000, 0.000000, 0.000000, 0.000000 +1380, 1.000000, 0.000000, 0.000000, 0.000000 +1381, 1.000000, 0.000000, 0.000000, 0.000000 +1382, 1.000000, 0.000000, 0.000000, 0.000000 +1383, 1.000000, 0.000000, 0.000000, 0.000000 +1384, 1.000000, 0.000000, 0.000000, 0.000000 +1385, 1.000000, 0.000000, 0.000000, 0.000000 +1386, 1.000000, 0.000000, 0.000000, 0.000000 +1387, 1.000000, 0.000000, 0.000000, 0.000000 +1388, 1.000000, 0.000000, 0.000000, 0.000000 +1389, 1.000000, 0.000000, 0.000000, 0.000000 +1390, 1.000000, 0.000000, 0.000000, 0.000000 +1391, 1.000000, 0.000000, 0.000000, 0.000000 +1392, 1.000000, 0.000000, 0.000000, 0.000000 +1393, 1.000000, 0.000000, 0.000000, 0.000000 +1394, 1.000000, 0.000000, 0.000000, 0.000000 +1395, 1.000000, 0.000000, 0.000000, 0.000000 +1396, 1.000000, 0.000000, 0.000000, 0.000000 +1397, 1.000000, 0.000000, 0.000000, 0.000000 +1398, 1.000000, 0.000000, 0.000000, 0.000000 +1399, 1.000000, 0.000000, 0.000000, 0.000000 +1400, 1.000000, 0.000000, 0.000000, 0.000000 +1401, 1.000000, 0.000000, 0.000000, 0.000000 +1402, 1.000000, 0.000000, 0.000000, 0.000000 +1403, 1.000000, 0.000000, 0.000000, 0.000000 +1404, 1.000000, 0.000000, 0.000000, 0.000000 +1405, 1.000000, 0.000000, 0.000000, 0.000000 +1406, 1.000000, 0.000000, 0.000000, 0.000000 +1407, 1.000000, 0.000000, 0.000000, 0.000000 +1408, 1.000000, 0.000000, 0.000000, 0.000000 +1409, 1.000000, 0.000000, 0.000000, 0.000000 +1410, 1.000000, 0.000000, 0.000000, 0.000000 +1411, 1.000000, 0.000000, 0.000000, 0.000000 +1412, 1.000000, 0.000000, 0.000000, 0.000000 +1413, 1.000000, 0.000000, 0.000000, 0.000000 +1414, 1.000000, 0.000000, 0.000000, 0.000000 +1415, 1.000000, 0.000000, 0.000000, 0.000000 +1416, 1.000000, 0.000000, 0.000000, 0.000000 +1417, 1.000000, 0.000000, 0.000000, 0.000000 +1418, 1.000000, 0.000000, 0.000000, 0.000000 +1419, 1.000000, 0.000000, 0.000000, 0.000000 +1420, 1.000000, 0.000000, 0.000000, 0.000000 +1421, 1.000000, 0.000000, 0.000000, 0.000000 +1422, 1.000000, 0.000000, 0.000000, 0.000000 +1423, 1.000000, 0.000000, 0.000000, 0.000000 +1424, 1.000000, 0.000000, 0.000000, 0.000000 +1425, 1.000000, 0.000000, 0.000000, 0.000000 +1426, 1.000000, 0.000000, 0.000000, 0.000000 +1427, 1.000000, 0.000000, 0.000000, 0.000000 +1428, 1.000000, 0.000000, 0.000000, 0.000000 +1429, 1.000000, 0.000000, 0.000000, 0.000000 +1430, 1.000000, 0.000000, 0.000000, 0.000000 +1431, 1.000000, 0.000000, 0.000000, 0.000000 +1432, 1.000000, 0.000000, 0.000000, 0.000000 +1433, 1.000000, 0.000000, 0.000000, 0.000000 +1434, 1.000000, 0.000000, 0.000000, 0.000000 +1435, 1.000000, 0.000000, 0.000000, 0.000000 +1436, 1.000000, 0.000000, 0.000000, 0.000000 +1437, 1.000000, 0.000000, 0.000000, 0.000000 +1438, 1.000000, 0.000000, 0.000000, 0.000000 +1439, 1.000000, 0.000000, 0.000000, 0.000000 +1440, 1.000000, 0.000000, 0.000000, 0.000000 +1441, 1.000000, 0.000000, 0.000000, 0.000000 +1442, 1.000000, 0.000000, 0.000000, 0.000000 +1443, 1.000000, 0.000000, 0.000000, 0.000000 +1444, 1.000000, 0.000000, 0.000000, 0.000000 +1445, 1.000000, 0.000000, 0.000000, 0.000000 +1446, 1.000000, 0.000000, 0.000000, 0.000000 +1447, 1.000000, 0.000000, 0.000000, 0.000000 +1448, 1.000000, 0.000000, 0.000000, 0.000000 +1449, 1.000000, 0.000000, 0.000000, 0.000000 +1450, 1.000000, 0.000000, 0.000000, 0.000000 +1451, 1.000000, 0.000000, 0.000000, 0.000000 +1452, 1.000000, 0.000000, 0.000000, 0.000000 +1453, 1.000000, 0.000000, 0.000000, 0.000000 +1454, 1.000000, 0.000000, 0.000000, 0.000000 +1455, 1.000000, 0.000000, 0.000000, 0.000000 +1456, 1.000000, 0.000000, 0.000000, 0.000000 +1457, 1.000000, 0.000000, 0.000000, 0.000000 +1458, 1.000000, 0.000000, 0.000000, 0.000000 +1459, 1.000000, 0.000000, 0.000000, 0.000000 +1460, 1.000000, 0.000000, 0.000000, 0.000000 +1461, 1.000000, 0.000000, 0.000000, 0.000000 +1462, 1.000000, 0.000000, 0.000000, 0.000000 +1463, 1.000000, 0.000000, 0.000000, 0.000000 +1464, 1.000000, 0.000000, 0.000000, 0.000000 +1465, 1.000000, 0.000000, 0.000000, 0.000000 +1466, 1.000000, 0.000000, 0.000000, 0.000000 +1467, 1.000000, 0.000000, 0.000000, 0.000000 +1468, 1.000000, 0.000000, 0.000000, 0.000000 +1469, 1.000000, 0.000000, 0.000000, 0.000000 +1470, 1.000000, 0.000000, 0.000000, 0.000000 +1471, 1.000000, 0.000000, 0.000000, 0.000000 +1472, 1.000000, 0.000000, 0.000000, 0.000000 +1473, 1.000000, 0.000000, 0.000000, 0.000000 +1474, 1.000000, 0.000000, 0.000000, 0.000000 +1475, 1.000000, 0.000000, 0.000000, 0.000000 +1476, 1.000000, 0.000000, 0.000000, 0.000000 +1477, 1.000000, 0.000000, 0.000000, 0.000000 +1478, 1.000000, 0.000000, 0.000000, 0.000000 +1479, 1.000000, 0.000000, 0.000000, 0.000000 +1480, 1.000000, 0.000000, 0.000000, 0.000000 +1481, 1.000000, 0.000000, 0.000000, 0.000000 +1482, 1.000000, 0.000000, 0.000000, 0.000000 +1483, 1.000000, 0.000000, 0.000000, 0.000000 +1484, 1.000000, 0.000000, 0.000000, 0.000000 +1485, 1.000000, 0.000000, 0.000000, 0.000000 +1486, 1.000000, 0.000000, 0.000000, 0.000000 +1487, 1.000000, 0.000000, 0.000000, 0.000000 +1488, 1.000000, 0.000000, 0.000000, 0.000000 +1489, 1.000000, 0.000000, 0.000000, 0.000000 +1490, 1.000000, 0.000000, 0.000000, 0.000000 +1491, 1.000000, 0.000000, 0.000000, 0.000000 +1492, 1.000000, 0.000000, 0.000000, 0.000000 +1493, 1.000000, 0.000000, 0.000000, 0.000000 +1494, 1.000000, 0.000000, 0.000000, 0.000000 +1495, 1.000000, 0.000000, 0.000000, 0.000000 +1496, 1.000000, 0.000000, 0.000000, 0.000000 +1497, 1.000000, 0.000000, 0.000000, 0.000000 +1498, 1.000000, 0.000000, 0.000000, 0.000000 +1499, 1.000000, 0.000000, 0.000000, 0.000000 +1500, 1.000000, 0.000000, 0.000000, 0.000000 +1501, 1.000000, 0.000000, 0.000000, 0.000000 +1502, 1.000000, 0.000000, 0.000000, 0.000000 +1503, 1.000000, 0.000000, 0.000000, 0.000000 +1504, 1.000000, 0.000000, 0.000000, 0.000000 +1505, 1.000000, 0.000000, 0.000000, 0.000000 +1506, 1.000000, 0.000000, 0.000000, 0.000000 +1507, 1.000000, 0.000000, 0.000000, 0.000000 +1508, 1.000000, 0.000000, 0.000000, 0.000000 +1509, 1.000000, 0.000000, 0.000000, 0.000000 +1510, 1.000000, 0.000000, 0.000000, 0.000000 +1511, 1.000000, 0.000000, 0.000000, 0.000000 +1512, 1.000000, 0.000000, 0.000000, 0.000000 +1513, 1.000000, 0.000000, 0.000000, 0.000000 +1514, 1.000000, 0.000000, 0.000000, 0.000000 +1515, 1.000000, 0.000000, 0.000000, 0.000000 +1516, 1.000000, 0.000000, 0.000000, 0.000000 +1517, 1.000000, 0.000000, 0.000000, 0.000000 +1518, 1.000000, 0.000000, 0.000000, 0.000000 +1519, 1.000000, 0.000000, 0.000000, 0.000000 +1520, 1.000000, 0.000000, 0.000000, 0.000000 +1521, 1.000000, 0.000000, 0.000000, 0.000000 +1522, 1.000000, 0.000000, 0.000000, 0.000000 +1523, 1.000000, 0.000000, 0.000000, 0.000000 +1524, 1.000000, 0.000000, 0.000000, 0.000000 +1525, 1.000000, 0.000000, 0.000000, 0.000000 +1526, 1.000000, 0.000000, 0.000000, 0.000000 +1527, 1.000000, 0.000000, 0.000000, 0.000000 +1528, 1.000000, 0.000000, 0.000000, 0.000000 +1529, 1.000000, 0.000000, 0.000000, 0.000000 +1530, 1.000000, 0.000000, 0.000000, 0.000000 +1531, 1.000000, 0.000000, 0.000000, 0.000000 +1532, 1.000000, 0.000000, 0.000000, 0.000000 +1533, 1.000000, 0.000000, 0.000000, 0.000000 +1534, 1.000000, 0.000000, 0.000000, 0.000000 +1535, 1.000000, 0.000000, 0.000000, 0.000000 +1536, 1.000000, 0.000000, 0.000000, 0.000000 +1537, 1.000000, 0.000000, 0.000000, 0.000000 +1538, 1.000000, 0.000000, 0.000000, 0.000000 +1539, 1.000000, 0.000000, 0.000000, 0.000000 +1540, 1.000000, 0.000000, 0.000000, 0.000000 +1541, 1.000000, 0.000000, 0.000000, 0.000000 +1542, 1.000000, 0.000000, 0.000000, 0.000000 +1543, 1.000000, 0.000000, 0.000000, 0.000000 +1544, 1.000000, 0.000000, 0.000000, 0.000000 +1545, 1.000000, 0.000000, 0.000000, 0.000000 +1546, 1.000000, 0.000000, 0.000000, 0.000000 +1547, 1.000000, 0.000000, 0.000000, 0.000000 +1548, 1.000000, 0.000000, 0.000000, 0.000000 +1549, 1.000000, 0.000000, 0.000000, 0.000000 +1550, 1.000000, 0.000000, 0.000000, 0.000000 +1551, 1.000000, 0.000000, 0.000000, 0.000000 +1552, 1.000000, 0.000000, 0.000000, 0.000000 +1553, 1.000000, 0.000000, 0.000000, 0.000000 +1554, 1.000000, 0.000000, 0.000000, 0.000000 +1555, 1.000000, 0.000000, 0.000000, 0.000000 +1556, 1.000000, 0.000000, 0.000000, 0.000000 +1557, 1.000000, 0.000000, 0.000000, 0.000000 +1558, 1.000000, 0.000000, 0.000000, 0.000000 +1559, 1.000000, 0.000000, 0.000000, 0.000000 +1560, 1.000000, 0.000000, 0.000000, 0.000000 +1561, 1.000000, 0.000000, 0.000000, 0.000000 +1562, 1.000000, 0.000000, 0.000000, 0.000000 +1563, 1.000000, 0.000000, 0.000000, 0.000000 +1564, 1.000000, 0.000000, 0.000000, 0.000000 +1565, 1.000000, 0.000000, 0.000000, 0.000000 +1566, 1.000000, 0.000000, 0.000000, 0.000000 +1567, 1.000000, 0.000000, 0.000000, 0.000000 +1568, 1.000000, 0.000000, 0.000000, 0.000000 +1569, 1.000000, 0.000000, 0.000000, 0.000000 +1570, 1.000000, 0.000000, 0.000000, 0.000000 +1571, 1.000000, 0.000000, 0.000000, 0.000000 +1572, 1.000000, 0.000000, 0.000000, 0.000000 +1573, 1.000000, 0.000000, 0.000000, 0.000000 +1574, 1.000000, 0.000000, 0.000000, 0.000000 +1575, 1.000000, 0.000000, 0.000000, 0.000000 +1576, 1.000000, 0.000000, 0.000000, 0.000000 +1577, 1.000000, 0.000000, 0.000000, 0.000000 +1578, 1.000000, 0.000000, 0.000000, 0.000000 +1579, 1.000000, 0.000000, 0.000000, 0.000000 +1580, 1.000000, 0.000000, 0.000000, 0.000000 +1581, 1.000000, 0.000000, 0.000000, 0.000000 +1582, 1.000000, 0.000000, 0.000000, 0.000000 +1583, 1.000000, 0.000000, 0.000000, 0.000000 +1584, 1.000000, 0.000000, 0.000000, 0.000000 +1585, 1.000000, 0.000000, 0.000000, 0.000000 +1586, 1.000000, 0.000000, 0.000000, 0.000000 +1587, 1.000000, 0.000000, 0.000000, 0.000000 +1588, 1.000000, 0.000000, 0.000000, 0.000000 +1589, 1.000000, 0.000000, 0.000000, 0.000000 +1590, 1.000000, 0.000000, 0.000000, 0.000000 +1591, 1.000000, 0.000000, 0.000000, 0.000000 +1592, 1.000000, 0.000000, 0.000000, 0.000000 +1593, 1.000000, 0.000000, 0.000000, 0.000000 +1594, 1.000000, 0.000000, 0.000000, 0.000000 +1595, 1.000000, 0.000000, 0.000000, 0.000000 +1596, 1.000000, 0.000000, 0.000000, 0.000000 +1597, 1.000000, 0.000000, 0.000000, 0.000000 +1598, 1.000000, 0.000000, 0.000000, 0.000000 +1599, 1.000000, 0.000000, 0.000000, 0.000000 +1600, 1.000000, 0.000000, 0.000000, 0.000000 +1601, 1.000000, 0.000000, 0.000000, 0.000000 +1602, 1.000000, 0.000000, 0.000000, 0.000000 +1603, 1.000000, 0.000000, 0.000000, 0.000000 +1604, 1.000000, 0.000000, 0.000000, 0.000000 +1605, 1.000000, 0.000000, 0.000000, 0.000000 +1606, 1.000000, 0.000000, 0.000000, 0.000000 +1607, 1.000000, 0.000000, 0.000000, 0.000000 +1608, 1.000000, 0.000000, 0.000000, 0.000000 +1609, 1.000000, 0.000000, 0.000000, 0.000000 +1610, 1.000000, 0.000000, 0.000000, 0.000000 +1611, 1.000000, 0.000000, 0.000000, 0.000000 +1612, 1.000000, 0.000000, 0.000000, 0.000000 +1613, 1.000000, 0.000000, 0.000000, 0.000000 +1614, 1.000000, 0.000000, 0.000000, 0.000000 +1615, 1.000000, 0.000000, 0.000000, 0.000000 +1616, 1.000000, 0.000000, 0.000000, 0.000000 +1617, 1.000000, 0.000000, 0.000000, 0.000000 +1618, 1.000000, 0.000000, 0.000000, 0.000000 +1619, 1.000000, 0.000000, 0.000000, 0.000000 +1620, 1.000000, 0.000000, 0.000000, 0.000000 +1621, 1.000000, 0.000000, 0.000000, 0.000000 +1622, 1.000000, 0.000000, 0.000000, 0.000000 +1623, 1.000000, 0.000000, 0.000000, 0.000000 +1624, 1.000000, 0.000000, 0.000000, 0.000000 +1625, 1.000000, 0.000000, 0.000000, 0.000000 +1626, 1.000000, 0.000000, 0.000000, 0.000000 +1627, 1.000000, 0.000000, 0.000000, 0.000000 +1628, 1.000000, 0.000000, 0.000000, 0.000000 +1629, 1.000000, 0.000000, 0.000000, 0.000000 +1630, 1.000000, 0.000000, 0.000000, 0.000000 +1631, 1.000000, 0.000000, 0.000000, 0.000000 +1632, 1.000000, 0.000000, 0.000000, 0.000000 +1633, 1.000000, 0.000000, 0.000000, 0.000000 +1634, 1.000000, 0.000000, 0.000000, 0.000000 +1635, 1.000000, 0.000000, 0.000000, 0.000000 +1636, 1.000000, 0.000000, 0.000000, 0.000000 +1637, 1.000000, 0.000000, 0.000000, 0.000000 +1638, 1.000000, 0.000000, 0.000000, 0.000000 +1639, 1.000000, 0.000000, 0.000000, 0.000000 +1640, 1.000000, 0.000000, 0.000000, 0.000000 +1641, 1.000000, 0.000000, 0.000000, 0.000000 +1642, 1.000000, 0.000000, 0.000000, 0.000000 +1643, 1.000000, 0.000000, 0.000000, 0.000000 +1644, 1.000000, 0.000000, 0.000000, 0.000000 +1645, 1.000000, 0.000000, 0.000000, 0.000000 +1646, 1.000000, 0.000000, 0.000000, 0.000000 +1647, 1.000000, 0.000000, 0.000000, 0.000000 +1648, 1.000000, 0.000000, 0.000000, 0.000000 +1649, 1.000000, 0.000000, 0.000000, 0.000000 +1650, 1.000000, 0.000000, 0.000000, 0.000000 +1651, 1.000000, 0.000000, 0.000000, 0.000000 +1652, 1.000000, 0.000000, 0.000000, 0.000000 +1653, 1.000000, 0.000000, 0.000000, 0.000000 +1654, 1.000000, 0.000000, 0.000000, 0.000000 +1655, 1.000000, 0.000000, 0.000000, 0.000000 +1656, 1.000000, 0.000000, 0.000000, 0.000000 +1657, 1.000000, 0.000000, 0.000000, 0.000000 +1658, 1.000000, 0.000000, 0.000000, 0.000000 +1659, 1.000000, 0.000000, 0.000000, 0.000000 +1660, 1.000000, 0.000000, 0.000000, 0.000000 +1661, 1.000000, 0.000000, 0.000000, 0.000000 +1662, 1.000000, 0.000000, 0.000000, 0.000000 +1663, 1.000000, 0.000000, 0.000000, 0.000000 +1664, 1.000000, 0.000000, 0.000000, 0.000000 +1665, 1.000000, 0.000000, 0.000000, 0.000000 +1666, 1.000000, 0.000000, 0.000000, 0.000000 +1667, 1.000000, 0.000000, 0.000000, 0.000000 +1668, 1.000000, 0.000000, 0.000000, 0.000000 +1669, 1.000000, 0.000000, 0.000000, 0.000000 +1670, 1.000000, 0.000000, 0.000000, 0.000000 +1671, 1.000000, 0.000000, 0.000000, 0.000000 +1672, 1.000000, 0.000000, 0.000000, 0.000000 +1673, 1.000000, 0.000000, 0.000000, 0.000000 +1674, 1.000000, 0.000000, 0.000000, 0.000000 +1675, 1.000000, 0.000000, 0.000000, 0.000000 +1676, 1.000000, 0.000000, 0.000000, 0.000000 +1677, 1.000000, 0.000000, 0.000000, 0.000000 +1678, 1.000000, 0.000000, 0.000000, 0.000000 +1679, 1.000000, 0.000000, 0.000000, 0.000000 +1680, 1.000000, 0.000000, 0.000000, 0.000000 +1681, 1.000000, 0.000000, 0.000000, 0.000000 +1682, 1.000000, 0.000000, 0.000000, 0.000000 +1683, 1.000000, 0.000000, 0.000000, 0.000000 +1684, 1.000000, 0.000000, 0.000000, 0.000000 +1685, 1.000000, 0.000000, 0.000000, 0.000000 +1686, 1.000000, 0.000000, 0.000000, 0.000000 +1687, 1.000000, 0.000000, 0.000000, 0.000000 +1688, 1.000000, 0.000000, 0.000000, 0.000000 +1689, 1.000000, 0.000000, 0.000000, 0.000000 +1690, 1.000000, 0.000000, 0.000000, 0.000000 +1691, 1.000000, 0.000000, 0.000000, 0.000000 +1692, 1.000000, 0.000000, 0.000000, 0.000000 +1693, 1.000000, 0.000000, 0.000000, 0.000000 +1694, 1.000000, 0.000000, 0.000000, 0.000000 +1695, 1.000000, 0.000000, 0.000000, 0.000000 +1696, 1.000000, 0.000000, 0.000000, 0.000000 +1697, 1.000000, 0.000000, 0.000000, 0.000000 +1698, 1.000000, 0.000000, 0.000000, 0.000000 +1699, 1.000000, 0.000000, 0.000000, 0.000000 +1700, 1.000000, 0.000000, 0.000000, 0.000000 +1701, 1.000000, 0.000000, 0.000000, 0.000000 +1702, 1.000000, 0.000000, 0.000000, 0.000000 +1703, 1.000000, 0.000000, 0.000000, 0.000000 +1704, 1.000000, 0.000000, 0.000000, 0.000000 +1705, 1.000000, 0.000000, 0.000000, 0.000000 +1706, 1.000000, 0.000000, 0.000000, 0.000000 +1707, 1.000000, 0.000000, 0.000000, 0.000000 +1708, 1.000000, 0.000000, 0.000000, 0.000000 +1709, 1.000000, 0.000000, 0.000000, 0.000000 +1710, 1.000000, 0.000000, 0.000000, 0.000000 +1711, 1.000000, 0.000000, 0.000000, 0.000000 +1712, 1.000000, 0.000000, 0.000000, 0.000000 +1713, 1.000000, 0.000000, 0.000000, 0.000000 +1714, 1.000000, 0.000000, 0.000000, 0.000000 +1715, 1.000000, 0.000000, 0.000000, 0.000000 +1716, 1.000000, 0.000000, 0.000000, 0.000000 +1717, 1.000000, 0.000000, 0.000000, 0.000000 +1718, 1.000000, 0.000000, 0.000000, 0.000000 +1719, 1.000000, 0.000000, 0.000000, 0.000000 +1720, 1.000000, 0.000000, 0.000000, 0.000000 +1721, 1.000000, 0.000000, 0.000000, 0.000000 +1722, 1.000000, 0.000000, 0.000000, 0.000000 +1723, 1.000000, 0.000000, 0.000000, 0.000000 +1724, 1.000000, 0.000000, 0.000000, 0.000000 +1725, 1.000000, 0.000000, 0.000000, 0.000000 +1726, 1.000000, 0.000000, 0.000000, 0.000000 +1727, 1.000000, 0.000000, 0.000000, 0.000000 +1728, 1.000000, 0.000000, 0.000000, 0.000000 +1729, 1.000000, 0.000000, 0.000000, 0.000000 +1730, 1.000000, 0.000000, 0.000000, 0.000000 +1731, 1.000000, 0.000000, 0.000000, 0.000000 +1732, 1.000000, 0.000000, 0.000000, 0.000000 +1733, 1.000000, 0.000000, 0.000000, 0.000000 +1734, 1.000000, 0.000000, 0.000000, 0.000000 +1735, 1.000000, 0.000000, 0.000000, 0.000000 +1736, 1.000000, 0.000000, 0.000000, 0.000000 +1737, 1.000000, 0.000000, 0.000000, 0.000000 +1738, 1.000000, 0.000000, 0.000000, 0.000000 +1739, 1.000000, 0.000000, 0.000000, 0.000000 +1740, 1.000000, 0.000000, 0.000000, 0.000000 +1741, 1.000000, 0.000000, 0.000000, 0.000000 +1742, 1.000000, 0.000000, 0.000000, 0.000000 +1743, 1.000000, 0.000000, 0.000000, 0.000000 +1744, 1.000000, 0.000000, 0.000000, 0.000000 +1745, 1.000000, 0.000000, 0.000000, 0.000000 +1746, 1.000000, 0.000000, 0.000000, 0.000000 +1747, 1.000000, 0.000000, 0.000000, 0.000000 +1748, 1.000000, 0.000000, 0.000000, 0.000000 +1749, 1.000000, 0.000000, 0.000000, 0.000000 +1750, 1.000000, 0.000000, 0.000000, 0.000000 +1751, 1.000000, 0.000000, 0.000000, 0.000000 +1752, 1.000000, 0.000000, 0.000000, 0.000000 +1753, 1.000000, 0.000000, 0.000000, 0.000000 +1754, 1.000000, 0.000000, 0.000000, 0.000000 +1755, 1.000000, 0.000000, 0.000000, 0.000000 +1756, 1.000000, 0.000000, 0.000000, 0.000000 +1757, 1.000000, 0.000000, 0.000000, 0.000000 +1758, 1.000000, 0.000000, 0.000000, 0.000000 +1759, 1.000000, 0.000000, 0.000000, 0.000000 +1760, 1.000000, 0.000000, 0.000000, 0.000000 +1761, 1.000000, 0.000000, 0.000000, 0.000000 +1762, 1.000000, 0.000000, 0.000000, 0.000000 +1763, 1.000000, 0.000000, 0.000000, 0.000000 +1764, 1.000000, 0.000000, 0.000000, 0.000000 +1765, 1.000000, 0.000000, 0.000000, 0.000000 +1766, 1.000000, 0.000000, 0.000000, 0.000000 +1767, 1.000000, 0.000000, 0.000000, 0.000000 +1768, 1.000000, 0.000000, 0.000000, 0.000000 +1769, 1.000000, 0.000000, 0.000000, 0.000000 +1770, 1.000000, 0.000000, 0.000000, 0.000000 +1771, 1.000000, 0.000000, 0.000000, 0.000000 +1772, 1.000000, 0.000000, 0.000000, 0.000000 +1773, 1.000000, 0.000000, 0.000000, 0.000000 +1774, 1.000000, 0.000000, 0.000000, 0.000000 +1775, 1.000000, 0.000000, 0.000000, 0.000000 +1776, 1.000000, 0.000000, 0.000000, 0.000000 +1777, 1.000000, 0.000000, 0.000000, 0.000000 +1778, 1.000000, 0.000000, 0.000000, 0.000000 +1779, 1.000000, 0.000000, 0.000000, 0.000000 +1780, 1.000000, 0.000000, 0.000000, 0.000000 +1781, 1.000000, 0.000000, 0.000000, 0.000000 +1782, 1.000000, 0.000000, 0.000000, 0.000000 +1783, 1.000000, 0.000000, 0.000000, 0.000000 +1784, 1.000000, 0.000000, 0.000000, 0.000000 +1785, 1.000000, 0.000000, 0.000000, 0.000000 +1786, 1.000000, 0.000000, 0.000000, 0.000000 +1787, 1.000000, 0.000000, 0.000000, 0.000000 +1788, 1.000000, 0.000000, 0.000000, 0.000000 +1789, 1.000000, 0.000000, 0.000000, 0.000000 +1790, 1.000000, 0.000000, 0.000000, 0.000000 +1791, 1.000000, 0.000000, 0.000000, 0.000000 +1792, 1.000000, 0.000000, 0.000000, 0.000000 +1793, 1.000000, 0.000000, 0.000000, 0.000000 +1794, 1.000000, 0.000000, 0.000000, 0.000000 +1795, 1.000000, 0.000000, 0.000000, 0.000000 +1796, 1.000000, 0.000000, 0.000000, 0.000000 +1797, 1.000000, 0.000000, 0.000000, 0.000000 +1798, 1.000000, 0.000000, 0.000000, 0.000000 +1799, 1.000000, 0.000000, 0.000000, 0.000000 +1800, 1.000000, 0.000000, 0.000000, 0.000000 +1801, 1.000000, 0.000000, 0.000000, 0.000000 +1802, 1.000000, 0.000000, 0.000000, 0.000000 +1803, 1.000000, 0.000000, 0.000000, 0.000000 +1804, 1.000000, 0.000000, 0.000000, 0.000000 +1805, 1.000000, 0.000000, 0.000000, 0.000000 +1806, 1.000000, 0.000000, 0.000000, 0.000000 +1807, 1.000000, 0.000000, 0.000000, 0.000000 +1808, 1.000000, 0.000000, 0.000000, 0.000000 +1809, 1.000000, 0.000000, 0.000000, 0.000000 +1810, 1.000000, 0.000000, 0.000000, 0.000000 +1811, 1.000000, 0.000000, 0.000000, 0.000000 +1812, 1.000000, 0.000000, 0.000000, 0.000000 +1813, 1.000000, 0.000000, 0.000000, 0.000000 +1814, 1.000000, 0.000000, 0.000000, 0.000000 +1815, 1.000000, 0.000000, 0.000000, 0.000000 +1816, 1.000000, 0.000000, 0.000000, 0.000000 +1817, 1.000000, 0.000000, 0.000000, 0.000000 +1818, 1.000000, 0.000000, 0.000000, 0.000000 +1819, 1.000000, 0.000000, 0.000000, 0.000000 +1820, 1.000000, 0.000000, 0.000000, 0.000000 +1821, 1.000000, 0.000000, 0.000000, 0.000000 +1822, 1.000000, 0.000000, 0.000000, 0.000000 +1823, 1.000000, 0.000000, 0.000000, 0.000000 +1824, 1.000000, 0.000000, 0.000000, 0.000000 +1825, 1.000000, 0.000000, 0.000000, 0.000000 +1826, 1.000000, 0.000000, 0.000000, 0.000000 +1827, 1.000000, 0.000000, 0.000000, 0.000000 +1828, 1.000000, 0.000000, 0.000000, 0.000000 +1829, 1.000000, 0.000000, 0.000000, 0.000000 +1830, 1.000000, 0.000000, 0.000000, 0.000000 +1831, 1.000000, 0.000000, 0.000000, 0.000000 +1832, 1.000000, 0.000000, 0.000000, 0.000000 +1833, 1.000000, 0.000000, 0.000000, 0.000000 +1834, 1.000000, 0.000000, 0.000000, 0.000000 +1835, 1.000000, 0.000000, 0.000000, 0.000000 +1836, 1.000000, 0.000000, 0.000000, 0.000000 +1837, 1.000000, 0.000000, 0.000000, 0.000000 +1838, 1.000000, 0.000000, 0.000000, 0.000000 +1839, 1.000000, 0.000000, 0.000000, 0.000000 +1840, 1.000000, 0.000000, 0.000000, 0.000000 +1841, 1.000000, 0.000000, 0.000000, 0.000000 +1842, 1.000000, 0.000000, 0.000000, 0.000000 +1843, 1.000000, 0.000000, 0.000000, 0.000000 +1844, 1.000000, 0.000000, 0.000000, 0.000000 +1845, 1.000000, 0.000000, 0.000000, 0.000000 +1846, 1.000000, 0.000000, 0.000000, 0.000000 +1847, 1.000000, 0.000000, 0.000000, 0.000000 +1848, 1.000000, 0.000000, 0.000000, 0.000000 +1849, 1.000000, 0.000000, 0.000000, 0.000000 +1850, 1.000000, 0.000000, 0.000000, 0.000000 +1851, 1.000000, 0.000000, 0.000000, 0.000000 +1852, 1.000000, 0.000000, 0.000000, 0.000000 +1853, 1.000000, 0.000000, 0.000000, 0.000000 +1854, 1.000000, 0.000000, 0.000000, 0.000000 +1855, 1.000000, 0.000000, 0.000000, 0.000000 +1856, 1.000000, 0.000000, 0.000000, 0.000000 +1857, 1.000000, 0.000000, 0.000000, 0.000000 +1858, 1.000000, 0.000000, 0.000000, 0.000000 +1859, 1.000000, 0.000000, 0.000000, 0.000000 +1860, 1.000000, 0.000000, 0.000000, 0.000000 +1861, 1.000000, 0.000000, 0.000000, 0.000000 +1862, 1.000000, 0.000000, 0.000000, 0.000000 +1863, 1.000000, 0.000000, 0.000000, 0.000000 +1864, 1.000000, 0.000000, 0.000000, 0.000000 +1865, 1.000000, 0.000000, 0.000000, 0.000000 +1866, 1.000000, 0.000000, 0.000000, 0.000000 +1867, 1.000000, 0.000000, 0.000000, 0.000000 +1868, 1.000000, 0.000000, 0.000000, 0.000000 +1869, 1.000000, 0.000000, 0.000000, 0.000000 +1870, 1.000000, 0.000000, 0.000000, 0.000000 +1871, 1.000000, 0.000000, 0.000000, 0.000000 +1872, 1.000000, 0.000000, 0.000000, 0.000000 +1873, 1.000000, 0.000000, 0.000000, 0.000000 +1874, 1.000000, 0.000000, 0.000000, 0.000000 +1875, 1.000000, 0.000000, 0.000000, 0.000000 +1876, 1.000000, 0.000000, 0.000000, 0.000000 +1877, 1.000000, 0.000000, 0.000000, 0.000000 +1878, 1.000000, 0.000000, 0.000000, 0.000000 +1879, 1.000000, 0.000000, 0.000000, 0.000000 +1880, 1.000000, 0.000000, 0.000000, 0.000000 +1881, 1.000000, 0.000000, 0.000000, 0.000000 +1882, 1.000000, 0.000000, 0.000000, 0.000000 +1883, 1.000000, 0.000000, 0.000000, 0.000000 +1884, 1.000000, 0.000000, 0.000000, 0.000000 +1885, 1.000000, 0.000000, 0.000000, 0.000000 +1886, 1.000000, 0.000000, 0.000000, 0.000000 +1887, 1.000000, 0.000000, 0.000000, 0.000000 +1888, 1.000000, 0.000000, 0.000000, 0.000000 +1889, 1.000000, 0.000000, 0.000000, 0.000000 +1890, 1.000000, 0.000000, 0.000000, 0.000000 +1891, 1.000000, 0.000000, 0.000000, 0.000000 +1892, 1.000000, 0.000000, 0.000000, 0.000000 +1893, 1.000000, 0.000000, 0.000000, 0.000000 +1894, 1.000000, 0.000000, 0.000000, 0.000000 +1895, 1.000000, 0.000000, 0.000000, 0.000000 +1896, 1.000000, 0.000000, 0.000000, 0.000000 +1897, 1.000000, 0.000000, 0.000000, 0.000000 +1898, 1.000000, 0.000000, 0.000000, 0.000000 +1899, 1.000000, 0.000000, 0.000000, 0.000000 +1900, 1.000000, 0.000000, 0.000000, 0.000000 +1901, 1.000000, 0.000000, 0.000000, 0.000000 +1902, 1.000000, 0.000000, 0.000000, 0.000000 +1903, 1.000000, 0.000000, 0.000000, 0.000000 +1904, 1.000000, 0.000000, 0.000000, 0.000000 +1905, 1.000000, 0.000000, 0.000000, 0.000000 +1906, 1.000000, 0.000000, 0.000000, 0.000000 +1907, 1.000000, 0.000000, 0.000000, 0.000000 +1908, 1.000000, 0.000000, 0.000000, 0.000000 +1909, 1.000000, 0.000000, 0.000000, 0.000000 +1910, 1.000000, 0.000000, 0.000000, 0.000000 +1911, 1.000000, 0.000000, 0.000000, 0.000000 +1912, 1.000000, 0.000000, 0.000000, 0.000000 +1913, 1.000000, 0.000000, 0.000000, 0.000000 +1914, 1.000000, 0.000000, 0.000000, 0.000000 +1915, 1.000000, 0.000000, 0.000000, 0.000000 +1916, 1.000000, 0.000000, 0.000000, 0.000000 +1917, 1.000000, 0.000000, 0.000000, 0.000000 +1918, 1.000000, 0.000000, 0.000000, 0.000000 +1919, 1.000000, 0.000000, 0.000000, 0.000000 +1920, 1.000000, 0.000000, 0.000000, 0.000000 +1921, 1.000000, 0.000000, 0.000000, 0.000000 +1922, 1.000000, 0.000000, 0.000000, 0.000000 +1923, 1.000000, 0.000000, 0.000000, 0.000000 +1924, 1.000000, 0.000000, 0.000000, 0.000000 +1925, 1.000000, 0.000000, 0.000000, 0.000000 +1926, 1.000000, 0.000000, 0.000000, 0.000000 +1927, 1.000000, 0.000000, 0.000000, 0.000000 +1928, 1.000000, 0.000000, 0.000000, 0.000000 +1929, 1.000000, 0.000000, 0.000000, 0.000000 +1930, 1.000000, 0.000000, 0.000000, 0.000000 +1931, 1.000000, 0.000000, 0.000000, 0.000000 +1932, 1.000000, 0.000000, 0.000000, 0.000000 +1933, 1.000000, 0.000000, 0.000000, 0.000000 +1934, 1.000000, 0.000000, 0.000000, 0.000000 +1935, 1.000000, 0.000000, 0.000000, 0.000000 +1936, 1.000000, 0.000000, 0.000000, 0.000000 +1937, 1.000000, 0.000000, 0.000000, 0.000000 +1938, 1.000000, 0.000000, 0.000000, 0.000000 +1939, 1.000000, 0.000000, 0.000000, 0.000000 +1940, 1.000000, 0.000000, 0.000000, 0.000000 +1941, 1.000000, 0.000000, 0.000000, 0.000000 +1942, 1.000000, 0.000000, 0.000000, 0.000000 +1943, 1.000000, 0.000000, 0.000000, 0.000000 +1944, 1.000000, 0.000000, 0.000000, 0.000000 +1945, 1.000000, 0.000000, 0.000000, 0.000000 +1946, 1.000000, 0.000000, 0.000000, 0.000000 +1947, 1.000000, 0.000000, 0.000000, 0.000000 +1948, 1.000000, 0.000000, 0.000000, 0.000000 +1949, 1.000000, 0.000000, 0.000000, 0.000000 +1950, 1.000000, 0.000000, 0.000000, 0.000000 +1951, 1.000000, 0.000000, 0.000000, 0.000000 +1952, 1.000000, 0.000000, 0.000000, 0.000000 +1953, 1.000000, 0.000000, 0.000000, 0.000000 +1954, 1.000000, 0.000000, 0.000000, 0.000000 +1955, 1.000000, 0.000000, 0.000000, 0.000000 +1956, 1.000000, 0.000000, 0.000000, 0.000000 +1957, 1.000000, 0.000000, 0.000000, 0.000000 +1958, 1.000000, 0.000000, 0.000000, 0.000000 +1959, 1.000000, 0.000000, 0.000000, 0.000000 +1960, 1.000000, 0.000000, 0.000000, 0.000000 +1961, 1.000000, 0.000000, 0.000000, 0.000000 +1962, 1.000000, 0.000000, 0.000000, 0.000000 +1963, 1.000000, 0.000000, 0.000000, 0.000000 +1964, 1.000000, 0.000000, 0.000000, 0.000000 +1965, 1.000000, 0.000000, 0.000000, 0.000000 +1966, 1.000000, 0.000000, 0.000000, 0.000000 +1967, 1.000000, 0.000000, 0.000000, 0.000000 +1968, 1.000000, 0.000000, 0.000000, 0.000000 +1969, 1.000000, 0.000000, 0.000000, 0.000000 +1970, 1.000000, 0.000000, 0.000000, 0.000000 +1971, 1.000000, 0.000000, 0.000000, 0.000000 +1972, 1.000000, 0.000000, 0.000000, 0.000000 +1973, 1.000000, 0.000000, 0.000000, 0.000000 +1974, 1.000000, 0.000000, 0.000000, 0.000000 +1975, 1.000000, 0.000000, 0.000000, 0.000000 +1976, 1.000000, 0.000000, 0.000000, 0.000000 +1977, 1.000000, 0.000000, 0.000000, 0.000000 +1978, 1.000000, 0.000000, 0.000000, 0.000000 +1979, 1.000000, 0.000000, 0.000000, 0.000000 +1980, 1.000000, 0.000000, 0.000000, 0.000000 +1981, 1.000000, 0.000000, 0.000000, 0.000000 +1982, 1.000000, 0.000000, 0.000000, 0.000000 +1983, 1.000000, 0.000000, 0.000000, 0.000000 +1984, 1.000000, 0.000000, 0.000000, 0.000000 +1985, 1.000000, 0.000000, 0.000000, 0.000000 +1986, 1.000000, 0.000000, 0.000000, 0.000000 +1987, 1.000000, 0.000000, 0.000000, 0.000000 +1988, 1.000000, 0.000000, 0.000000, 0.000000 +1989, 1.000000, 0.000000, 0.000000, 0.000000 +1990, 1.000000, 0.000000, 0.000000, 0.000000 +1991, 1.000000, 0.000000, 0.000000, 0.000000 +1992, 1.000000, 0.000000, 0.000000, 0.000000 +1993, 1.000000, 0.000000, 0.000000, 0.000000 +1994, 1.000000, 0.000000, 0.000000, 0.000000 +1995, 1.000000, 0.000000, 0.000000, 0.000000 +1996, 1.000000, 0.000000, 0.000000, 0.000000 +1997, 1.000000, 0.000000, 0.000000, 0.000000 +1998, 1.000000, 0.000000, 0.000000, 0.000000 +1999, 1.000000, 0.000000, 0.000000, 0.000000 +2000, 1.000000, 0.000000, 0.000000, 0.000000 +2001, 1.000000, 0.000000, 0.000000, 0.000000 +2002, 1.000000, 0.000000, 0.000000, 0.000000 +2003, 1.000000, 0.000000, 0.000000, 0.000000 +2004, 1.000000, 0.000000, 0.000000, 0.000000 +2005, 1.000000, 0.000000, 0.000000, 0.000000 +2006, 1.000000, 0.000000, 0.000000, 0.000000 +2007, 1.000000, 0.000000, 0.000000, 0.000000 +2008, 1.000000, 0.000000, 0.000000, 0.000000 +2009, 1.000000, 0.000000, 0.000000, 0.000000 +2010, 1.000000, 0.000000, 0.000000, 0.000000 +2011, 1.000000, 0.000000, 0.000000, 0.000000 +2012, 1.000000, 0.000000, 0.000000, 0.000000 +2013, 1.000000, 0.000000, 0.000000, 0.000000 +2014, 1.000000, 0.000000, 0.000000, 0.000000 +2015, 1.000000, 0.000000, 0.000000, 0.000000 +2016, 1.000000, 0.000000, 0.000000, 0.000000 +2017, 1.000000, 0.000000, 0.000000, 0.000000 +2018, 1.000000, 0.000000, 0.000000, 0.000000 +2019, 1.000000, 0.000000, 0.000000, 0.000000 +2020, 1.000000, 0.000000, 0.000000, 0.000000 +2021, 1.000000, 0.000000, 0.000000, 0.000000 +2022, 1.000000, 0.000000, 0.000000, 0.000000 +2023, 1.000000, 0.000000, 0.000000, 0.000000 +2024, 1.000000, 0.000000, 0.000000, 0.000000 +2025, 1.000000, 0.000000, 0.000000, 0.000000 +2026, 1.000000, 0.000000, 0.000000, 0.000000 +2027, 1.000000, 0.000000, 0.000000, 0.000000 +2028, 1.000000, 0.000000, 0.000000, 0.000000 +2029, 1.000000, 0.000000, 0.000000, 0.000000 +2030, 1.000000, 0.000000, 0.000000, 0.000000 +2031, 1.000000, 0.000000, 0.000000, 0.000000 +2032, 1.000000, 0.000000, 0.000000, 0.000000 +2033, 1.000000, 0.000000, 0.000000, 0.000000 +2034, 1.000000, 0.000000, 0.000000, 0.000000 +2035, 1.000000, 0.000000, 0.000000, 0.000000 +2036, 1.000000, 0.000000, 0.000000, 0.000000 +2037, 1.000000, 0.000000, 0.000000, 0.000000 +2038, 1.000000, 0.000000, 0.000000, 0.000000 +2039, 1.000000, 0.000000, 0.000000, 0.000000 +2040, 1.000000, 0.000000, 0.000000, 0.000000 +2041, 1.000000, 0.000000, 0.000000, 0.000000 +2042, 1.000000, 0.000000, 0.000000, 0.000000 +2043, 1.000000, 0.000000, 0.000000, 0.000000 +2044, 1.000000, 0.000000, 0.000000, 0.000000 +2045, 1.000000, 0.000000, 0.000000, 0.000000 +2046, 1.000000, 0.000000, 0.000000, 0.000000 +2047, 1.000000, 0.000000, 0.000000, 0.000000 +2048, 1.000000, 0.000000, 0.000000, 0.000000 +2049, 1.000000, 0.000000, 0.000000, 0.000000 +2050, 1.000000, 0.000000, 0.000000, 0.000000 +2051, 1.000000, 0.000000, 0.000000, 0.000000 +2052, 1.000000, 0.000000, 0.000000, 0.000000 +2053, 1.000000, 0.000000, 0.000000, 0.000000 +2054, 1.000000, 0.000000, 0.000000, 0.000000 +2055, 1.000000, 0.000000, 0.000000, 0.000000 +2056, 1.000000, 0.000000, 0.000000, 0.000000 +2057, 1.000000, 0.000000, 0.000000, 0.000000 +2058, 1.000000, 0.000000, 0.000000, 0.000000 +2059, 1.000000, 0.000000, 0.000000, 0.000000 +2060, 1.000000, 0.000000, 0.000000, 0.000000 +2061, 1.000000, 0.000000, 0.000000, 0.000000 +2062, 1.000000, 0.000000, 0.000000, 0.000000 +2063, 1.000000, 0.000000, 0.000000, 0.000000 +2064, 1.000000, 0.000000, 0.000000, 0.000000 +2065, 1.000000, 0.000000, 0.000000, 0.000000 +2066, 1.000000, 0.000000, 0.000000, 0.000000 +2067, 1.000000, 0.000000, 0.000000, 0.000000 +2068, 1.000000, 0.000000, 0.000000, 0.000000 +2069, 1.000000, 0.000000, 0.000000, 0.000000 +2070, 1.000000, 0.000000, 0.000000, 0.000000 +2071, 1.000000, 0.000000, 0.000000, 0.000000 +2072, 1.000000, 0.000000, 0.000000, 0.000000 +2073, 1.000000, 0.000000, 0.000000, 0.000000 +2074, 1.000000, 0.000000, 0.000000, 0.000000 +2075, 1.000000, 0.000000, 0.000000, 0.000000 +2076, 1.000000, 0.000000, 0.000000, 0.000000 +2077, 1.000000, 0.000000, 0.000000, 0.000000 +2078, 1.000000, 0.000000, 0.000000, 0.000000 +2079, 1.000000, 0.000000, 0.000000, 0.000000 +2080, 1.000000, 0.000000, 0.000000, 0.000000 +2081, 1.000000, 0.000000, 0.000000, 0.000000 +2082, 1.000000, 0.000000, 0.000000, 0.000000 +2083, 1.000000, 0.000000, 0.000000, 0.000000 +2084, 1.000000, 0.000000, 0.000000, 0.000000 +2085, 1.000000, 0.000000, 0.000000, 0.000000 +2086, 1.000000, 0.000000, 0.000000, 0.000000 +2087, 1.000000, 0.000000, 0.000000, 0.000000 +2088, 1.000000, 0.000000, 0.000000, 0.000000 +2089, 1.000000, 0.000000, 0.000000, 0.000000 +2090, 1.000000, 0.000000, 0.000000, 0.000000 +2091, 1.000000, 0.000000, 0.000000, 0.000000 +2092, 1.000000, 0.000000, 0.000000, 0.000000 +2093, 1.000000, 0.000000, 0.000000, 0.000000 +2094, 1.000000, 0.000000, 0.000000, 0.000000 +2095, 1.000000, 0.000000, 0.000000, 0.000000 +2096, 1.000000, 0.000000, 0.000000, 0.000000 +2097, 1.000000, 0.000000, 0.000000, 0.000000 +2098, 1.000000, 0.000000, 0.000000, 0.000000 +2099, 1.000000, 0.000000, 0.000000, 0.000000 +2100, 1.000000, 0.000000, 0.000000, 0.000000 +2101, 1.000000, 0.000000, 0.000000, 0.000000 +2102, 1.000000, 0.000000, 0.000000, 0.000000 +2103, 1.000000, 0.000000, 0.000000, 0.000000 +2104, 1.000000, 0.000000, 0.000000, 0.000000 +2105, 1.000000, 0.000000, 0.000000, 0.000000 +2106, 1.000000, 0.000000, 0.000000, 0.000000 +2107, 1.000000, 0.000000, 0.000000, 0.000000 +2108, 1.000000, 0.000000, 0.000000, 0.000000 +2109, 1.000000, 0.000000, 0.000000, 0.000000 +2110, 1.000000, 0.000000, 0.000000, 0.000000 +2111, 1.000000, 0.000000, 0.000000, 0.000000 +2112, 1.000000, 0.000000, 0.000000, 0.000000 +2113, 1.000000, 0.000000, 0.000000, 0.000000 +2114, 1.000000, 0.000000, 0.000000, 0.000000 +2115, 1.000000, 0.000000, 0.000000, 0.000000 +2116, 1.000000, 0.000000, 0.000000, 0.000000 +2117, 1.000000, 0.000000, 0.000000, 0.000000 +2118, 1.000000, 0.000000, 0.000000, 0.000000 +2119, 1.000000, 0.000000, 0.000000, 0.000000 +2120, 1.000000, 0.000000, 0.000000, 0.000000 +2121, 1.000000, 0.000000, 0.000000, 0.000000 +2122, 1.000000, 0.000000, 0.000000, 0.000000 +2123, 1.000000, 0.000000, 0.000000, 0.000000 +2124, 1.000000, 0.000000, 0.000000, 0.000000 +2125, 1.000000, 0.000000, 0.000000, 0.000000 +2126, 1.000000, 0.000000, 0.000000, 0.000000 +2127, 1.000000, 0.000000, 0.000000, 0.000000 +2128, 1.000000, 0.000000, 0.000000, 0.000000 +2129, 1.000000, 0.000000, 0.000000, 0.000000 +2130, 1.000000, 0.000000, 0.000000, 0.000000 +2131, 1.000000, 0.000000, 0.000000, 0.000000 +2132, 1.000000, 0.000000, 0.000000, 0.000000 +2133, 1.000000, 0.000000, 0.000000, 0.000000 +2134, 1.000000, 0.000000, 0.000000, 0.000000 +2135, 1.000000, 0.000000, 0.000000, 0.000000 +2136, 1.000000, 0.000000, 0.000000, 0.000000 +2137, 1.000000, 0.000000, 0.000000, 0.000000 +2138, 1.000000, 0.000000, 0.000000, 0.000000 +2139, 1.000000, 0.000000, 0.000000, 0.000000 +2140, 1.000000, 0.000000, 0.000000, 0.000000 +2141, 1.000000, 0.000000, 0.000000, 0.000000 +2142, 1.000000, 0.000000, 0.000000, 0.000000 +2143, 1.000000, 0.000000, 0.000000, 0.000000 +2144, 1.000000, 0.000000, 0.000000, 0.000000 +2145, 1.000000, 0.000000, 0.000000, 0.000000 +2146, 1.000000, 0.000000, 0.000000, 0.000000 +2147, 1.000000, 0.000000, 0.000000, 0.000000 +2148, 1.000000, 0.000000, 0.000000, 0.000000 +2149, 1.000000, 0.000000, 0.000000, 0.000000 +2150, 1.000000, 0.000000, 0.000000, 0.000000 +2151, 1.000000, 0.000000, 0.000000, 0.000000 +2152, 1.000000, 0.000000, 0.000000, 0.000000 +2153, 1.000000, 0.000000, 0.000000, 0.000000 +2154, 1.000000, 0.000000, 0.000000, 0.000000 +2155, 1.000000, 0.000000, 0.000000, 0.000000 +2156, 1.000000, 0.000000, 0.000000, 0.000000 +2157, 1.000000, 0.000000, 0.000000, 0.000000 +2158, 1.000000, 0.000000, 0.000000, 0.000000 +2159, 1.000000, 0.000000, 0.000000, 0.000000 +2160, 1.000000, 0.000000, 0.000000, 0.000000 +2161, 1.000000, 0.000000, 0.000000, 0.000000 +2162, 1.000000, 0.000000, 0.000000, 0.000000 +2163, 1.000000, 0.000000, 0.000000, 0.000000 +2164, 1.000000, 0.000000, 0.000000, 0.000000 +2165, 1.000000, 0.000000, 0.000000, 0.000000 +2166, 1.000000, 0.000000, 0.000000, 0.000000 +2167, 1.000000, 0.000000, 0.000000, 0.000000 +2168, 1.000000, 0.000000, 0.000000, 0.000000 +2169, 1.000000, 0.000000, 0.000000, 0.000000 +2170, 1.000000, 0.000000, 0.000000, 0.000000 +2171, 1.000000, 0.000000, 0.000000, 0.000000 +2172, 1.000000, 0.000000, 0.000000, 0.000000 +2173, 1.000000, 0.000000, 0.000000, 0.000000 +2174, 1.000000, 0.000000, 0.000000, 0.000000 +2175, 1.000000, 0.000000, 0.000000, 0.000000 +2176, 1.000000, 0.000000, 0.000000, 0.000000 +2177, 1.000000, 0.000000, 0.000000, 0.000000 +2178, 1.000000, 0.000000, 0.000000, 0.000000 +2179, 1.000000, 0.000000, 0.000000, 0.000000 +2180, 1.000000, 0.000000, 0.000000, 0.000000 +2181, 1.000000, 0.000000, 0.000000, 0.000000 +2182, 1.000000, 0.000000, 0.000000, 0.000000 +2183, 1.000000, 0.000000, 0.000000, 0.000000 +2184, 1.000000, 0.000000, 0.000000, 0.000000 +2185, 1.000000, 0.000000, 0.000000, 0.000000 +2186, 1.000000, 0.000000, 0.000000, 0.000000 +2187, 1.000000, 0.000000, 0.000000, 0.000000 +2188, 1.000000, 0.000000, 0.000000, 0.000000 +2189, 1.000000, 0.000000, 0.000000, 0.000000 +2190, 1.000000, 0.000000, 0.000000, 0.000000 +2191, 1.000000, 0.000000, 0.000000, 0.000000 +2192, 1.000000, 0.000000, 0.000000, 0.000000 +2193, 1.000000, 0.000000, 0.000000, 0.000000 +2194, 1.000000, 0.000000, 0.000000, 0.000000 +2195, 1.000000, 0.000000, 0.000000, 0.000000 +2196, 1.000000, 0.000000, 0.000000, 0.000000 +2197, 1.000000, 0.000000, 0.000000, 0.000000 +2198, 1.000000, 0.000000, 0.000000, 0.000000 +2199, 1.000000, 0.000000, 0.000000, 0.000000 +2200, 1.000000, 0.000000, 0.000000, 0.000000 +2201, 1.000000, 0.000000, 0.000000, 0.000000 +2202, 1.000000, 0.000000, 0.000000, 0.000000 +2203, 1.000000, 0.000000, 0.000000, 0.000000 +2204, 1.000000, 0.000000, 0.000000, 0.000000 +2205, 1.000000, 0.000000, 0.000000, 0.000000 +2206, 1.000000, 0.000000, 0.000000, 0.000000 +2207, 1.000000, 0.000000, 0.000000, 0.000000 +2208, 1.000000, 0.000000, 0.000000, 0.000000 +2209, 1.000000, 0.000000, 0.000000, 0.000000 +2210, 1.000000, 0.000000, 0.000000, 0.000000 +2211, 1.000000, 0.000000, 0.000000, 0.000000 +2212, 1.000000, 0.000000, 0.000000, 0.000000 +2213, 1.000000, 0.000000, 0.000000, 0.000000 +2214, 1.000000, 0.000000, 0.000000, 0.000000 +2215, 1.000000, 0.000000, 0.000000, 0.000000 +2216, 1.000000, 0.000000, 0.000000, 0.000000 +2217, 1.000000, 0.000000, 0.000000, 0.000000 +2218, 1.000000, 0.000000, 0.000000, 0.000000 +2219, 1.000000, 0.000000, 0.000000, 0.000000 +2220, 1.000000, 0.000000, 0.000000, 0.000000 +2221, 1.000000, 0.000000, 0.000000, 0.000000 +2222, 1.000000, 0.000000, 0.000000, 0.000000 +2223, 1.000000, 0.000000, 0.000000, 0.000000 +2224, 1.000000, 0.000000, 0.000000, 0.000000 +2225, 1.000000, 0.000000, 0.000000, 0.000000 +2226, 1.000000, 0.000000, 0.000000, 0.000000 +2227, 1.000000, 0.000000, 0.000000, 0.000000 +2228, 1.000000, 0.000000, 0.000000, 0.000000 +2229, 1.000000, 0.000000, 0.000000, 0.000000 +2230, 1.000000, 0.000000, 0.000000, 0.000000 +2231, 1.000000, 0.000000, 0.000000, 0.000000 +2232, 1.000000, 0.000000, 0.000000, 0.000000 +2233, 1.000000, 0.000000, 0.000000, 0.000000 +2234, 1.000000, 0.000000, 0.000000, 0.000000 +2235, 1.000000, 0.000000, 0.000000, 0.000000 +2236, 1.000000, 0.000000, 0.000000, 0.000000 +2237, 1.000000, 0.000000, 0.000000, 0.000000 +2238, 1.000000, 0.000000, 0.000000, 0.000000 +2239, 1.000000, 0.000000, 0.000000, 0.000000 +2240, 1.000000, 0.000000, 0.000000, 0.000000 +2241, 1.000000, 0.000000, 0.000000, 0.000000 +2242, 1.000000, 0.000000, 0.000000, 0.000000 +2243, 1.000000, 0.000000, 0.000000, 0.000000 +2244, 1.000000, 0.000000, 0.000000, 0.000000 +2245, 1.000000, 0.000000, 0.000000, 0.000000 +2246, 1.000000, 0.000000, 0.000000, 0.000000 +2247, 1.000000, 0.000000, 0.000000, 0.000000 +2248, 1.000000, 0.000000, 0.000000, 0.000000 +2249, 1.000000, 0.000000, 0.000000, 0.000000 +2250, 1.000000, 0.000000, 0.000000, 0.000000 +2251, 1.000000, 0.000000, 0.000000, 0.000000 +2252, 1.000000, 0.000000, 0.000000, 0.000000 +2253, 1.000000, 0.000000, 0.000000, 0.000000 +2254, 1.000000, 0.000000, 0.000000, 0.000000 +2255, 1.000000, 0.000000, 0.000000, 0.000000 +2256, 1.000000, 0.000000, 0.000000, 0.000000 +2257, 1.000000, 0.000000, 0.000000, 0.000000 +2258, 1.000000, 0.000000, 0.000000, 0.000000 +2259, 1.000000, 0.000000, 0.000000, 0.000000 +2260, 1.000000, 0.000000, 0.000000, 0.000000 +2261, 1.000000, 0.000000, 0.000000, 0.000000 +2262, 1.000000, 0.000000, 0.000000, 0.000000 +2263, 1.000000, 0.000000, 0.000000, 0.000000 +2264, 1.000000, 0.000000, 0.000000, 0.000000 +2265, 1.000000, 0.000000, 0.000000, 0.000000 +2266, 1.000000, 0.000000, 0.000000, 0.000000 +2267, 1.000000, 0.000000, 0.000000, 0.000000 +2268, 1.000000, 0.000000, 0.000000, 0.000000 +2269, 1.000000, 0.000000, 0.000000, 0.000000 +2270, 1.000000, 0.000000, 0.000000, 0.000000 +2271, 1.000000, 0.000000, 0.000000, 0.000000 +2272, 1.000000, 0.000000, 0.000000, 0.000000 +2273, 1.000000, 0.000000, 0.000000, 0.000000 +2274, 1.000000, 0.000000, 0.000000, 0.000000 +2275, 1.000000, 0.000000, 0.000000, 0.000000 +2276, 1.000000, 0.000000, 0.000000, 0.000000 +2277, 1.000000, 0.000000, 0.000000, 0.000000 +2278, 1.000000, 0.000000, 0.000000, 0.000000 +2279, 1.000000, 0.000000, 0.000000, 0.000000 +2280, 1.000000, 0.000000, 0.000000, 0.000000 +2281, 1.000000, 0.000000, 0.000000, 0.000000 +2282, 1.000000, 0.000000, 0.000000, 0.000000 +2283, 1.000000, 0.000000, 0.000000, 0.000000 +2284, 1.000000, 0.000000, 0.000000, 0.000000 +2285, 1.000000, 0.000000, 0.000000, 0.000000 +2286, 1.000000, 0.000000, 0.000000, 0.000000 +2287, 1.000000, 0.000000, 0.000000, 0.000000 +2288, 1.000000, 0.000000, 0.000000, 0.000000 +2289, 1.000000, 0.000000, 0.000000, 0.000000 +2290, 1.000000, 0.000000, 0.000000, 0.000000 +2291, 1.000000, 0.000000, 0.000000, 0.000000 +2292, 1.000000, 0.000000, 0.000000, 0.000000 +2293, 1.000000, 0.000000, 0.000000, 0.000000 +2294, 1.000000, 0.000000, 0.000000, 0.000000 +2295, 1.000000, 0.000000, 0.000000, 0.000000 +2296, 1.000000, 0.000000, 0.000000, 0.000000 +2297, 1.000000, 0.000000, 0.000000, 0.000000 +2298, 1.000000, 0.000000, 0.000000, 0.000000 +2299, 1.000000, 0.000000, 0.000000, 0.000000 +2300, 1.000000, 0.000000, 0.000000, 0.000000 +2301, 1.000000, 0.000000, 0.000000, 0.000000 +2302, 1.000000, 0.000000, 0.000000, 0.000000 +2303, 1.000000, 0.000000, 0.000000, 0.000000 +2304, 1.000000, 0.000000, 0.000000, 0.000000 +2305, 1.000000, 0.000000, 0.000000, 0.000000 +2306, 1.000000, 0.000000, 0.000000, 0.000000 +2307, 1.000000, 0.000000, 0.000000, 0.000000 +2308, 1.000000, 0.000000, 0.000000, 0.000000 +2309, 1.000000, 0.000000, 0.000000, 0.000000 +2310, 1.000000, 0.000000, 0.000000, 0.000000 +2311, 1.000000, 0.000000, 0.000000, 0.000000 +2312, 1.000000, 0.000000, 0.000000, 0.000000 +2313, 1.000000, 0.000000, 0.000000, 0.000000 +2314, 1.000000, 0.000000, 0.000000, 0.000000 +2315, 1.000000, 0.000000, 0.000000, 0.000000 +2316, 1.000000, 0.000000, 0.000000, 0.000000 +2317, 1.000000, 0.000000, 0.000000, 0.000000 +2318, 1.000000, 0.000000, 0.000000, 0.000000 +2319, 1.000000, 0.000000, 0.000000, 0.000000 +2320, 1.000000, 0.000000, 0.000000, 0.000000 +2321, 1.000000, 0.000000, 0.000000, 0.000000 +2322, 1.000000, 0.000000, 0.000000, 0.000000 +2323, 1.000000, 0.000000, 0.000000, 0.000000 +2324, 1.000000, 0.000000, 0.000000, 0.000000 +2325, 1.000000, 0.000000, 0.000000, 0.000000 +2326, 1.000000, 0.000000, 0.000000, 0.000000 +2327, 1.000000, 0.000000, 0.000000, 0.000000 +2328, 1.000000, 0.000000, 0.000000, 0.000000 +2329, 1.000000, 0.000000, 0.000000, 0.000000 +2330, 1.000000, 0.000000, 0.000000, 0.000000 +2331, 1.000000, 0.000000, 0.000000, 0.000000 +2332, 1.000000, 0.000000, 0.000000, 0.000000 +2333, 1.000000, 0.000000, 0.000000, 0.000000 +2334, 1.000000, 0.000000, 0.000000, 0.000000 +2335, 1.000000, 0.000000, 0.000000, 0.000000 +2336, 1.000000, 0.000000, 0.000000, 0.000000 +2337, 1.000000, 0.000000, 0.000000, 0.000000 +2338, 1.000000, 0.000000, 0.000000, 0.000000 +2339, 1.000000, 0.000000, 0.000000, 0.000000 +2340, 1.000000, 0.000000, 0.000000, 0.000000 +2341, 1.000000, 0.000000, 0.000000, 0.000000 +2342, 1.000000, 0.000000, 0.000000, 0.000000 +2343, 1.000000, 0.000000, 0.000000, 0.000000 +2344, 1.000000, 0.000000, 0.000000, 0.000000 +2345, 1.000000, 0.000000, 0.000000, 0.000000 +2346, 1.000000, 0.000000, 0.000000, 0.000000 +2347, 1.000000, 0.000000, 0.000000, 0.000000 +2348, 1.000000, 0.000000, 0.000000, 0.000000 +2349, 1.000000, 0.000000, 0.000000, 0.000000 +2350, 1.000000, 0.000000, 0.000000, 0.000000 +2351, 1.000000, 0.000000, 0.000000, 0.000000 +2352, 1.000000, 0.000000, 0.000000, 0.000000 +2353, 1.000000, 0.000000, 0.000000, 0.000000 +2354, 1.000000, 0.000000, 0.000000, 0.000000 +2355, 1.000000, 0.000000, 0.000000, 0.000000 +2356, 1.000000, 0.000000, 0.000000, 0.000000 +2357, 1.000000, 0.000000, 0.000000, 0.000000 +2358, 1.000000, 0.000000, 0.000000, 0.000000 +2359, 1.000000, 0.000000, 0.000000, 0.000000 +2360, 1.000000, 0.000000, 0.000000, 0.000000 +2361, 1.000000, 0.000000, 0.000000, 0.000000 +2362, 1.000000, 0.000000, 0.000000, 0.000000 +2363, 1.000000, 0.000000, 0.000000, 0.000000 +2364, 1.000000, 0.000000, 0.000000, 0.000000 +2365, 1.000000, 0.000000, 0.000000, 0.000000 +2366, 1.000000, 0.000000, 0.000000, 0.000000 +2367, 1.000000, 0.000000, 0.000000, 0.000000 +2368, 1.000000, 0.000000, 0.000000, 0.000000 +2369, 1.000000, 0.000000, 0.000000, 0.000000 +2370, 1.000000, 0.000000, 0.000000, 0.000000 +2371, 1.000000, 0.000000, 0.000000, 0.000000 +2372, 1.000000, 0.000000, 0.000000, 0.000000 +2373, 1.000000, 0.000000, 0.000000, 0.000000 +2374, 1.000000, 0.000000, 0.000000, 0.000000 +2375, 1.000000, 0.000000, 0.000000, 0.000000 +2376, 1.000000, 0.000000, 0.000000, 0.000000 +2377, 1.000000, 0.000000, 0.000000, 0.000000 +2378, 1.000000, 0.000000, 0.000000, 0.000000 +2379, 1.000000, 0.000000, 0.000000, 0.000000 +2380, 1.000000, 0.000000, 0.000000, 0.000000 +2381, 1.000000, 0.000000, 0.000000, 0.000000 +2382, 1.000000, 0.000000, 0.000000, 0.000000 +2383, 1.000000, 0.000000, 0.000000, 0.000000 +2384, 1.000000, 0.000000, 0.000000, 0.000000 +2385, 1.000000, 0.000000, 0.000000, 0.000000 +2386, 1.000000, 0.000000, 0.000000, 0.000000 +2387, 1.000000, 0.000000, 0.000000, 0.000000 +2388, 1.000000, 0.000000, 0.000000, 0.000000 +2389, 1.000000, 0.000000, 0.000000, 0.000000 +2390, 1.000000, 0.000000, 0.000000, 0.000000 +2391, 1.000000, 0.000000, 0.000000, 0.000000 +2392, 1.000000, 0.000000, 0.000000, 0.000000 +2393, 1.000000, 0.000000, 0.000000, 0.000000 +2394, 1.000000, 0.000000, 0.000000, 0.000000 +2395, 1.000000, 0.000000, 0.000000, 0.000000 +2396, 1.000000, 0.000000, 0.000000, 0.000000 +2397, 1.000000, 0.000000, 0.000000, 0.000000 +2398, 1.000000, 0.000000, 0.000000, 0.000000 +2399, 1.000000, 0.000000, 0.000000, 0.000000 +2400, 1.000000, 0.000000, 0.000000, 0.000000 +2401, 1.000000, 0.000000, 0.000000, 0.000000 +2402, 1.000000, 0.000000, 0.000000, 0.000000 +2403, 1.000000, 0.000000, 0.000000, 0.000000 +2404, 1.000000, 0.000000, 0.000000, 0.000000 +2405, 1.000000, 0.000000, 0.000000, 0.000000 +2406, 1.000000, 0.000000, 0.000000, 0.000000 +2407, 1.000000, 0.000000, 0.000000, 0.000000 +2408, 1.000000, 0.000000, 0.000000, 0.000000 +2409, 1.000000, 0.000000, 0.000000, 0.000000 +2410, 1.000000, 0.000000, 0.000000, 0.000000 +2411, 1.000000, 0.000000, 0.000000, 0.000000 +2412, 1.000000, 0.000000, 0.000000, 0.000000 +2413, 1.000000, 0.000000, 0.000000, 0.000000 +2414, 1.000000, 0.000000, 0.000000, 0.000000 +2415, 1.000000, 0.000000, 0.000000, 0.000000 +2416, 1.000000, 0.000000, 0.000000, 0.000000 +2417, 1.000000, 0.000000, 0.000000, 0.000000 +2418, 1.000000, 0.000000, 0.000000, 0.000000 +2419, 1.000000, 0.000000, 0.000000, 0.000000 +2420, 1.000000, 0.000000, 0.000000, 0.000000 +2421, 1.000000, 0.000000, 0.000000, 0.000000 +2422, 1.000000, 0.000000, 0.000000, 0.000000 +2423, 1.000000, 0.000000, 0.000000, 0.000000 +2424, 1.000000, 0.000000, 0.000000, 0.000000 +2425, 1.000000, 0.000000, 0.000000, 0.000000 +2426, 1.000000, 0.000000, 0.000000, 0.000000 +2427, 1.000000, 0.000000, 0.000000, 0.000000 +2428, 1.000000, 0.000000, 0.000000, 0.000000 +2429, 1.000000, 0.000000, 0.000000, 0.000000 +2430, 1.000000, 0.000000, 0.000000, 0.000000 +2431, 1.000000, 0.000000, 0.000000, 0.000000 +2432, 1.000000, 0.000000, 0.000000, 0.000000 +2433, 1.000000, 0.000000, 0.000000, 0.000000 +2434, 1.000000, 0.000000, 0.000000, 0.000000 +2435, 1.000000, 0.000000, 0.000000, 0.000000 +2436, 1.000000, 0.000000, 0.000000, 0.000000 +2437, 1.000000, 0.000000, 0.000000, 0.000000 +2438, 1.000000, 0.000000, 0.000000, 0.000000 +2439, 1.000000, 0.000000, 0.000000, 0.000000 +2440, 1.000000, 0.000000, 0.000000, 0.000000 +2441, 1.000000, 0.000000, 0.000000, 0.000000 +2442, 1.000000, 0.000000, 0.000000, 0.000000 +2443, 1.000000, 0.000000, 0.000000, 0.000000 +2444, 1.000000, 0.000000, 0.000000, 0.000000 +2445, 1.000000, 0.000000, 0.000000, 0.000000 +2446, 1.000000, 0.000000, 0.000000, 0.000000 +2447, 1.000000, 0.000000, 0.000000, 0.000000 +2448, 1.000000, 0.000000, 0.000000, 0.000000 +2449, 1.000000, 0.000000, 0.000000, 0.000000 +2450, 1.000000, 0.000000, 0.000000, 0.000000 +2451, 1.000000, 0.000000, 0.000000, 0.000000 +2452, 1.000000, 0.000000, 0.000000, 0.000000 +2453, 1.000000, 0.000000, 0.000000, 0.000000 +2454, 1.000000, 0.000000, 0.000000, 0.000000 +2455, 1.000000, 0.000000, 0.000000, 0.000000 +2456, 1.000000, 0.000000, 0.000000, 0.000000 +2457, 1.000000, 0.000000, 0.000000, 0.000000 +2458, 1.000000, 0.000000, 0.000000, 0.000000 +2459, 1.000000, 0.000000, 0.000000, 0.000000 +2460, 1.000000, 0.000000, 0.000000, 0.000000 +2461, 1.000000, 0.000000, 0.000000, 0.000000 +2462, 1.000000, 0.000000, 0.000000, 0.000000 +2463, 1.000000, 0.000000, 0.000000, 0.000000 +2464, 1.000000, 0.000000, 0.000000, 0.000000 +2465, 1.000000, 0.000000, 0.000000, 0.000000 +2466, 1.000000, 0.000000, 0.000000, 0.000000 +2467, 1.000000, 0.000000, 0.000000, 0.000000 +2468, 1.000000, 0.000000, 0.000000, 0.000000 +2469, 1.000000, 0.000000, 0.000000, 0.000000 +2470, 1.000000, 0.000000, 0.000000, 0.000000 +2471, 1.000000, 0.000000, 0.000000, 0.000000 +2472, 1.000000, 0.000000, 0.000000, 0.000000 +2473, 1.000000, 0.000000, 0.000000, 0.000000 +2474, 1.000000, 0.000000, 0.000000, 0.000000 +2475, 1.000000, 0.000000, 0.000000, 0.000000 +2476, 1.000000, 0.000000, 0.000000, 0.000000 +2477, 1.000000, 0.000000, 0.000000, 0.000000 +2478, 1.000000, 0.000000, 0.000000, 0.000000 +2479, 1.000000, 0.000000, 0.000000, 0.000000 +2480, 1.000000, 0.000000, 0.000000, 0.000000 +2481, 1.000000, 0.000000, 0.000000, 0.000000 +2482, 1.000000, 0.000000, 0.000000, 0.000000 +2483, 1.000000, 0.000000, 0.000000, 0.000000 +2484, 1.000000, 0.000000, 0.000000, 0.000000 +2485, 1.000000, 0.000000, 0.000000, 0.000000 +2486, 1.000000, 0.000000, 0.000000, 0.000000 +2487, 1.000000, 0.000000, 0.000000, 0.000000 +2488, 1.000000, 0.000000, 0.000000, 0.000000 +2489, 1.000000, 0.000000, 0.000000, 0.000000 +2490, 1.000000, 0.000000, 0.000000, 0.000000 +2491, 1.000000, 0.000000, 0.000000, 0.000000 +2492, 1.000000, 0.000000, 0.000000, 0.000000 +2493, 1.000000, 0.000000, 0.000000, 0.000000 +2494, 1.000000, 0.000000, 0.000000, 0.000000 +2495, 1.000000, 0.000000, 0.000000, 0.000000 +2496, 1.000000, 0.000000, 0.000000, 0.000000 +2497, 1.000000, 0.000000, 0.000000, 0.000000 +2498, 1.000000, 0.000000, 0.000000, 0.000000 +2499, 1.000000, 0.000000, 0.000000, 0.000000 +2500, 1.000000, 0.000000, 0.000000, 0.000000 +2501, 1.000000, 0.000000, 0.000000, 0.000000 +2502, 1.000000, 0.000000, 0.000000, 0.000000 +2503, 1.000000, 0.000000, 0.000000, 0.000000 +2504, 1.000000, 0.000000, 0.000000, 0.000000 +2505, 1.000000, 0.000000, 0.000000, 0.000000 +2506, 1.000000, 0.000000, 0.000000, 0.000000 +2507, 1.000000, 0.000000, 0.000000, 0.000000 +2508, 1.000000, 0.000000, 0.000000, 0.000000 +2509, 1.000000, 0.000000, 0.000000, 0.000000 +2510, 1.000000, 0.000000, 0.000000, 0.000000 +2511, 1.000000, 0.000000, 0.000000, 0.000000 +2512, 1.000000, 0.000000, 0.000000, 0.000000 +2513, 1.000000, 0.000000, 0.000000, 0.000000 +2514, 1.000000, 0.000000, 0.000000, 0.000000 +2515, 1.000000, 0.000000, 0.000000, 0.000000 +2516, 1.000000, 0.000000, 0.000000, 0.000000 +2517, 1.000000, 0.000000, 0.000000, 0.000000 +2518, 1.000000, 0.000000, 0.000000, 0.000000 +2519, 1.000000, 0.000000, 0.000000, 0.000000 +2520, 1.000000, 0.000000, 0.000000, 0.000000 +2521, 1.000000, 0.000000, 0.000000, 0.000000 +2522, 1.000000, 0.000000, 0.000000, 0.000000 +2523, 1.000000, 0.000000, 0.000000, 0.000000 +2524, 1.000000, 0.000000, 0.000000, 0.000000 +2525, 1.000000, 0.000000, 0.000000, 0.000000 +2526, 1.000000, 0.000000, 0.000000, 0.000000 +2527, 1.000000, 0.000000, 0.000000, 0.000000 +2528, 1.000000, 0.000000, 0.000000, 0.000000 +2529, 1.000000, 0.000000, 0.000000, 0.000000 +2530, 1.000000, 0.000000, 0.000000, 0.000000 +2531, 1.000000, 0.000000, 0.000000, 0.000000 +2532, 1.000000, 0.000000, 0.000000, 0.000000 +2533, 1.000000, 0.000000, 0.000000, 0.000000 +2534, 1.000000, 0.000000, 0.000000, 0.000000 +2535, 1.000000, 0.000000, 0.000000, 0.000000 +2536, 1.000000, 0.000000, 0.000000, 0.000000 +2537, 1.000000, 0.000000, 0.000000, 0.000000 +2538, 1.000000, 0.000000, 0.000000, 0.000000 +2539, 1.000000, 0.000000, 0.000000, 0.000000 +2540, 1.000000, 0.000000, 0.000000, 0.000000 +2541, 1.000000, 0.000000, 0.000000, 0.000000 +2542, 1.000000, 0.000000, 0.000000, 0.000000 +2543, 1.000000, 0.000000, 0.000000, 0.000000 +2544, 1.000000, 0.000000, 0.000000, 0.000000 +2545, 1.000000, 0.000000, 0.000000, 0.000000 +2546, 1.000000, 0.000000, 0.000000, 0.000000 +2547, 1.000000, 0.000000, 0.000000, 0.000000 +2548, 1.000000, 0.000000, 0.000000, 0.000000 +2549, 1.000000, 0.000000, 0.000000, 0.000000 +2550, 1.000000, 0.000000, 0.000000, 0.000000 +2551, 1.000000, 0.000000, 0.000000, 0.000000 +2552, 1.000000, 0.000000, 0.000000, 0.000000 +2553, 1.000000, 0.000000, 0.000000, 0.000000 +2554, 1.000000, 0.000000, 0.000000, 0.000000 +2555, 1.000000, 0.000000, 0.000000, 0.000000 +2556, 1.000000, 0.000000, 0.000000, 0.000000 +2557, 1.000000, 0.000000, 0.000000, 0.000000 +2558, 1.000000, 0.000000, 0.000000, 0.000000 +2559, 1.000000, 0.000000, 0.000000, 0.000000 +2560, 1.000000, 0.000000, 0.000000, 0.000000 +2561, 1.000000, 0.000000, 0.000000, 0.000000 +2562, 1.000000, 0.000000, 0.000000, 0.000000 +2563, 1.000000, 0.000000, 0.000000, 0.000000 +2564, 1.000000, 0.000000, 0.000000, 0.000000 +2565, 1.000000, 0.000000, 0.000000, 0.000000 +2566, 1.000000, 0.000000, 0.000000, 0.000000 +2567, 1.000000, 0.000000, 0.000000, 0.000000 +2568, 1.000000, 0.000000, 0.000000, 0.000000 +2569, 1.000000, 0.000000, 0.000000, 0.000000 +2570, 1.000000, 0.000000, 0.000000, 0.000000 +2571, 1.000000, 0.000000, 0.000000, 0.000000 +2572, 1.000000, 0.000000, 0.000000, 0.000000 +2573, 1.000000, 0.000000, 0.000000, 0.000000 +2574, 1.000000, 0.000000, 0.000000, 0.000000 +2575, 1.000000, 0.000000, 0.000000, 0.000000 +2576, 1.000000, 0.000000, 0.000000, 0.000000 +2577, 1.000000, 0.000000, 0.000000, 0.000000 +2578, 1.000000, 0.000000, 0.000000, 0.000000 +2579, 1.000000, 0.000000, 0.000000, 0.000000 +2580, 1.000000, 0.000000, 0.000000, 0.000000 +2581, 1.000000, 0.000000, 0.000000, 0.000000 +2582, 1.000000, 0.000000, 0.000000, 0.000000 +2583, 1.000000, 0.000000, 0.000000, 0.000000 +2584, 1.000000, 0.000000, 0.000000, 0.000000 +2585, 1.000000, 0.000000, 0.000000, 0.000000 +2586, 1.000000, 0.000000, 0.000000, 0.000000 +2587, 1.000000, 0.000000, 0.000000, 0.000000 +2588, 1.000000, 0.000000, 0.000000, 0.000000 +2589, 1.000000, 0.000000, 0.000000, 0.000000 +2590, 1.000000, 0.000000, 0.000000, 0.000000 +2591, 1.000000, 0.000000, 0.000000, 0.000000 +2592, 1.000000, 0.000000, 0.000000, 0.000000 +2593, 1.000000, 0.000000, 0.000000, 0.000000 +2594, 1.000000, 0.000000, 0.000000, 0.000000 +2595, 1.000000, 0.000000, 0.000000, 0.000000 +2596, 1.000000, 0.000000, 0.000000, 0.000000 +2597, 1.000000, 0.000000, 0.000000, 0.000000 +2598, 1.000000, 0.000000, 0.000000, 0.000000 +2599, 1.000000, 0.000000, 0.000000, 0.000000 +2600, 1.000000, 0.000000, 0.000000, 0.000000 +2601, 1.000000, 0.000000, 0.000000, 0.000000 +2602, 1.000000, 0.000000, 0.000000, 0.000000 +2603, 1.000000, 0.000000, 0.000000, 0.000000 +2604, 1.000000, 0.000000, 0.000000, 0.000000 +2605, 1.000000, 0.000000, 0.000000, 0.000000 +2606, 1.000000, 0.000000, 0.000000, 0.000000 +2607, 1.000000, 0.000000, 0.000000, 0.000000 +2608, 1.000000, 0.000000, 0.000000, 0.000000 +2609, 1.000000, 0.000000, 0.000000, 0.000000 +2610, 1.000000, 0.000000, 0.000000, 0.000000 +2611, 1.000000, 0.000000, 0.000000, 0.000000 +2612, 1.000000, 0.000000, 0.000000, 0.000000 +2613, 1.000000, 0.000000, 0.000000, 0.000000 +2614, 1.000000, 0.000000, 0.000000, 0.000000 +2615, 1.000000, 0.000000, 0.000000, 0.000000 +2616, 1.000000, 0.000000, 0.000000, 0.000000 +2617, 1.000000, 0.000000, 0.000000, 0.000000 +2618, 1.000000, 0.000000, 0.000000, 0.000000 +2619, 1.000000, 0.000000, 0.000000, 0.000000 +2620, 1.000000, 0.000000, 0.000000, 0.000000 +2621, 1.000000, 0.000000, 0.000000, 0.000000 +2622, 1.000000, 0.000000, 0.000000, 0.000000 +2623, 1.000000, 0.000000, 0.000000, 0.000000 +2624, 1.000000, 0.000000, 0.000000, 0.000000 +2625, 1.000000, 0.000000, 0.000000, 0.000000 +2626, 1.000000, 0.000000, 0.000000, 0.000000 +2627, 1.000000, 0.000000, 0.000000, 0.000000 +2628, 1.000000, 0.000000, 0.000000, 0.000000 +2629, 1.000000, 0.000000, 0.000000, 0.000000 +2630, 1.000000, 0.000000, 0.000000, 0.000000 +2631, 1.000000, 0.000000, 0.000000, 0.000000 +2632, 1.000000, 0.000000, 0.000000, 0.000000 +2633, 1.000000, 0.000000, 0.000000, 0.000000 +2634, 1.000000, 0.000000, 0.000000, 0.000000 +2635, 1.000000, 0.000000, 0.000000, 0.000000 +2636, 1.000000, 0.000000, 0.000000, 0.000000 +2637, 1.000000, 0.000000, 0.000000, 0.000000 +2638, 1.000000, 0.000000, 0.000000, 0.000000 +2639, 1.000000, 0.000000, 0.000000, 0.000000 +2640, 1.000000, 0.000000, 0.000000, 0.000000 +2641, 1.000000, 0.000000, 0.000000, 0.000000 +2642, 1.000000, 0.000000, 0.000000, 0.000000 +2643, 1.000000, 0.000000, 0.000000, 0.000000 +2644, 1.000000, 0.000000, 0.000000, 0.000000 +2645, 1.000000, 0.000000, 0.000000, 0.000000 +2646, 1.000000, 0.000000, 0.000000, 0.000000 +2647, 1.000000, 0.000000, 0.000000, 0.000000 +2648, 1.000000, 0.000000, 0.000000, 0.000000 +2649, 1.000000, 0.000000, 0.000000, 0.000000 +2650, 1.000000, 0.000000, 0.000000, 0.000000 +2651, 1.000000, 0.000000, 0.000000, 0.000000 +2652, 1.000000, 0.000000, 0.000000, 0.000000 +2653, 1.000000, 0.000000, 0.000000, 0.000000 +2654, 1.000000, 0.000000, 0.000000, 0.000000 +2655, 1.000000, 0.000000, 0.000000, 0.000000 +2656, 1.000000, 0.000000, 0.000000, 0.000000 +2657, 1.000000, 0.000000, 0.000000, 0.000000 +2658, 1.000000, 0.000000, 0.000000, 0.000000 +2659, 1.000000, 0.000000, 0.000000, 0.000000 +2660, 1.000000, 0.000000, 0.000000, 0.000000 +2661, 1.000000, 0.000000, 0.000000, 0.000000 +2662, 1.000000, 0.000000, 0.000000, 0.000000 +2663, 1.000000, 0.000000, 0.000000, 0.000000 +2664, 1.000000, 0.000000, 0.000000, 0.000000 +2665, 1.000000, 0.000000, 0.000000, 0.000000 +2666, 1.000000, 0.000000, 0.000000, 0.000000 +2667, 1.000000, 0.000000, 0.000000, 0.000000 +2668, 1.000000, 0.000000, 0.000000, 0.000000 +2669, 1.000000, 0.000000, 0.000000, 0.000000 +2670, 1.000000, 0.000000, 0.000000, 0.000000 +2671, 1.000000, 0.000000, 0.000000, 0.000000 +2672, 1.000000, 0.000000, 0.000000, 0.000000 +2673, 1.000000, 0.000000, 0.000000, 0.000000 +2674, 1.000000, 0.000000, 0.000000, 0.000000 +2675, 1.000000, 0.000000, 0.000000, 0.000000 +2676, 1.000000, 0.000000, 0.000000, 0.000000 +2677, 1.000000, 0.000000, 0.000000, 0.000000 +2678, 1.000000, 0.000000, 0.000000, 0.000000 +2679, 1.000000, 0.000000, 0.000000, 0.000000 +2680, 1.000000, 0.000000, 0.000000, 0.000000 +2681, 1.000000, 0.000000, 0.000000, 0.000000 +2682, 1.000000, 0.000000, 0.000000, 0.000000 +2683, 1.000000, 0.000000, 0.000000, 0.000000 +2684, 1.000000, 0.000000, 0.000000, 0.000000 +2685, 1.000000, 0.000000, 0.000000, 0.000000 +2686, 1.000000, 0.000000, 0.000000, 0.000000 +2687, 1.000000, 0.000000, 0.000000, 0.000000 +2688, 1.000000, 0.000000, 0.000000, 0.000000 +2689, 1.000000, 0.000000, 0.000000, 0.000000 +2690, 1.000000, 0.000000, 0.000000, 0.000000 +2691, 1.000000, 0.000000, 0.000000, 0.000000 +2692, 1.000000, 0.000000, 0.000000, 0.000000 +2693, 1.000000, 0.000000, 0.000000, 0.000000 +2694, 1.000000, 0.000000, 0.000000, 0.000000 +2695, 1.000000, 0.000000, 0.000000, 0.000000 +2696, 1.000000, 0.000000, 0.000000, 0.000000 +2697, 1.000000, 0.000000, 0.000000, 0.000000 +2698, 1.000000, 0.000000, 0.000000, 0.000000 +2699, 1.000000, 0.000000, 0.000000, 0.000000 +2700, 1.000000, 0.000000, 0.000000, 0.000000 +2701, 1.000000, 0.000000, 0.000000, 0.000000 +2702, 1.000000, 0.000000, 0.000000, 0.000000 +2703, 1.000000, 0.000000, 0.000000, 0.000000 +2704, 1.000000, 0.000000, 0.000000, 0.000000 +2705, 1.000000, 0.000000, 0.000000, 0.000000 +2706, 1.000000, 0.000000, 0.000000, 0.000000 +2707, 1.000000, 0.000000, 0.000000, 0.000000 +2708, 1.000000, 0.000000, 0.000000, 0.000000 +2709, 1.000000, 0.000000, 0.000000, 0.000000 +2710, 1.000000, 0.000000, 0.000000, 0.000000 +2711, 1.000000, 0.000000, 0.000000, 0.000000 +2712, 1.000000, 0.000000, 0.000000, 0.000000 +2713, 1.000000, 0.000000, 0.000000, 0.000000 +2714, 1.000000, 0.000000, 0.000000, 0.000000 +2715, 1.000000, 0.000000, 0.000000, 0.000000 +2716, 1.000000, 0.000000, 0.000000, 0.000000 +2717, 1.000000, 0.000000, 0.000000, 0.000000 +2718, 1.000000, 0.000000, 0.000000, 0.000000 +2719, 1.000000, 0.000000, 0.000000, 0.000000 +2720, 1.000000, 0.000000, 0.000000, 0.000000 +2721, 1.000000, 0.000000, 0.000000, 0.000000 +2722, 1.000000, 0.000000, 0.000000, 0.000000 +2723, 1.000000, 0.000000, 0.000000, 0.000000 +2724, 1.000000, 0.000000, 0.000000, 0.000000 +2725, 1.000000, 0.000000, 0.000000, 0.000000 +2726, 1.000000, 0.000000, 0.000000, 0.000000 +2727, 1.000000, 0.000000, 0.000000, 0.000000 +2728, 1.000000, 0.000000, 0.000000, 0.000000 +2729, 1.000000, 0.000000, 0.000000, 0.000000 +2730, 1.000000, 0.000000, 0.000000, 0.000000 +2731, 1.000000, 0.000000, 0.000000, 0.000000 +2732, 1.000000, 0.000000, 0.000000, 0.000000 +2733, 1.000000, 0.000000, 0.000000, 0.000000 +2734, 1.000000, 0.000000, 0.000000, 0.000000 +2735, 1.000000, 0.000000, 0.000000, 0.000000 +2736, 1.000000, 0.000000, 0.000000, 0.000000 +2737, 1.000000, 0.000000, 0.000000, 0.000000 +2738, 1.000000, 0.000000, 0.000000, 0.000000 +2739, 1.000000, 0.000000, 0.000000, 0.000000 +2740, 1.000000, 0.000000, 0.000000, 0.000000 +2741, 1.000000, 0.000000, 0.000000, 0.000000 +2742, 1.000000, 0.000000, 0.000000, 0.000000 +2743, 1.000000, 0.000000, 0.000000, 0.000000 +2744, 1.000000, 0.000000, 0.000000, 0.000000 +2745, 1.000000, 0.000000, 0.000000, 0.000000 +2746, 1.000000, 0.000000, 0.000000, 0.000000 +2747, 1.000000, 0.000000, 0.000000, 0.000000 +2748, 1.000000, 0.000000, 0.000000, 0.000000 +2749, 1.000000, 0.000000, 0.000000, 0.000000 +2750, 1.000000, 0.000000, 0.000000, 0.000000 +2751, 1.000000, 0.000000, 0.000000, 0.000000 +2752, 1.000000, 0.000000, 0.000000, 0.000000 +2753, 1.000000, 0.000000, 0.000000, 0.000000 +2754, 1.000000, 0.000000, 0.000000, 0.000000 +2755, 1.000000, 0.000000, 0.000000, 0.000000 +2756, 1.000000, 0.000000, 0.000000, 0.000000 +2757, 1.000000, 0.000000, 0.000000, 0.000000 +2758, 1.000000, 0.000000, 0.000000, 0.000000 +2759, 1.000000, 0.000000, 0.000000, 0.000000 +2760, 1.000000, 0.000000, 0.000000, 0.000000 +2761, 1.000000, 0.000000, 0.000000, 0.000000 +2762, 1.000000, 0.000000, 0.000000, 0.000000 +2763, 1.000000, 0.000000, 0.000000, 0.000000 +2764, 1.000000, 0.000000, 0.000000, 0.000000 +2765, 1.000000, 0.000000, 0.000000, 0.000000 +2766, 1.000000, 0.000000, 0.000000, 0.000000 +2767, 1.000000, 0.000000, 0.000000, 0.000000 +2768, 1.000000, 0.000000, 0.000000, 0.000000 +2769, 1.000000, 0.000000, 0.000000, 0.000000 +2770, 1.000000, 0.000000, 0.000000, 0.000000 +2771, 1.000000, 0.000000, 0.000000, 0.000000 +2772, 1.000000, 0.000000, 0.000000, 0.000000 +2773, 1.000000, 0.000000, 0.000000, 0.000000 +2774, 1.000000, 0.000000, 0.000000, 0.000000 +2775, 1.000000, 0.000000, 0.000000, 0.000000 +2776, 1.000000, 0.000000, 0.000000, 0.000000 +2777, 1.000000, 0.000000, 0.000000, 0.000000 +2778, 1.000000, 0.000000, 0.000000, 0.000000 +2779, 1.000000, 0.000000, 0.000000, 0.000000 +2780, 1.000000, 0.000000, 0.000000, 0.000000 +2781, 1.000000, 0.000000, 0.000000, 0.000000 +2782, 1.000000, 0.000000, 0.000000, 0.000000 +2783, 1.000000, 0.000000, 0.000000, 0.000000 +2784, 1.000000, 0.000000, 0.000000, 0.000000 +2785, 1.000000, 0.000000, 0.000000, 0.000000 +2786, 1.000000, 0.000000, 0.000000, 0.000000 +2787, 1.000000, 0.000000, 0.000000, 0.000000 +2788, 1.000000, 0.000000, 0.000000, 0.000000 +2789, 1.000000, 0.000000, 0.000000, 0.000000 +2790, 1.000000, 0.000000, 0.000000, 0.000000 +2791, 1.000000, 0.000000, 0.000000, 0.000000 +2792, 1.000000, 0.000000, 0.000000, 0.000000 +2793, 1.000000, 0.000000, 0.000000, 0.000000 +2794, 1.000000, 0.000000, 0.000000, 0.000000 +2795, 1.000000, 0.000000, 0.000000, 0.000000 +2796, 1.000000, 0.000000, 0.000000, 0.000000 +2797, 1.000000, 0.000000, 0.000000, 0.000000 +2798, 1.000000, 0.000000, 0.000000, 0.000000 +2799, 1.000000, 0.000000, 0.000000, 0.000000 +2800, 1.000000, 0.000000, 0.000000, 0.000000 +2801, 1.000000, 0.000000, 0.000000, 0.000000 +2802, 1.000000, 0.000000, 0.000000, 0.000000 +2803, 1.000000, 0.000000, 0.000000, 0.000000 +2804, 1.000000, 0.000000, 0.000000, 0.000000 +2805, 1.000000, 0.000000, 0.000000, 0.000000 +2806, 1.000000, 0.000000, 0.000000, 0.000000 +2807, 1.000000, 0.000000, 0.000000, 0.000000 +2808, 1.000000, 0.000000, 0.000000, 0.000000 +2809, 1.000000, 0.000000, 0.000000, 0.000000 +2810, 1.000000, 0.000000, 0.000000, 0.000000 +2811, 1.000000, 0.000000, 0.000000, 0.000000 +2812, 1.000000, 0.000000, 0.000000, 0.000000 +2813, 1.000000, 0.000000, 0.000000, 0.000000 +2814, 1.000000, 0.000000, 0.000000, 0.000000 +2815, 1.000000, 0.000000, 0.000000, 0.000000 +2816, 1.000000, 0.000000, 0.000000, 0.000000 +2817, 1.000000, 0.000000, 0.000000, 0.000000 +2818, 1.000000, 0.000000, 0.000000, 0.000000 +2819, 1.000000, 0.000000, 0.000000, 0.000000 +2820, 1.000000, 0.000000, 0.000000, 0.000000 +2821, 1.000000, 0.000000, 0.000000, 0.000000 +2822, 1.000000, 0.000000, 0.000000, 0.000000 +2823, 1.000000, 0.000000, 0.000000, 0.000000 +2824, 1.000000, 0.000000, 0.000000, 0.000000 +2825, 1.000000, 0.000000, 0.000000, 0.000000 +2826, 1.000000, 0.000000, 0.000000, 0.000000 +2827, 1.000000, 0.000000, 0.000000, 0.000000 +2828, 1.000000, 0.000000, 0.000000, 0.000000 +2829, 1.000000, 0.000000, 0.000000, 0.000000 +2830, 1.000000, 0.000000, 0.000000, 0.000000 +2831, 1.000000, 0.000000, 0.000000, 0.000000 +2832, 1.000000, 0.000000, 0.000000, 0.000000 +2833, 1.000000, 0.000000, 0.000000, 0.000000 +2834, 1.000000, 0.000000, 0.000000, 0.000000 +2835, 1.000000, 0.000000, 0.000000, 0.000000 +2836, 1.000000, 0.000000, 0.000000, 0.000000 +2837, 1.000000, 0.000000, 0.000000, 0.000000 +2838, 1.000000, 0.000000, 0.000000, 0.000000 +2839, 1.000000, 0.000000, 0.000000, 0.000000 +2840, 1.000000, 0.000000, 0.000000, 0.000000 +2841, 1.000000, 0.000000, 0.000000, 0.000000 +2842, 1.000000, 0.000000, 0.000000, 0.000000 +2843, 1.000000, 0.000000, 0.000000, 0.000000 +2844, 1.000000, 0.000000, 0.000000, 0.000000 +2845, 1.000000, 0.000000, 0.000000, 0.000000 +2846, 1.000000, 0.000000, 0.000000, 0.000000 +2847, 1.000000, 0.000000, 0.000000, 0.000000 +2848, 1.000000, 0.000000, 0.000000, 0.000000 +2849, 1.000000, 0.000000, 0.000000, 0.000000 +2850, 1.000000, 0.000000, 0.000000, 0.000000 +2851, 1.000000, 0.000000, 0.000000, 0.000000 +2852, 1.000000, 0.000000, 0.000000, 0.000000 +2853, 1.000000, 0.000000, 0.000000, 0.000000 +2854, 1.000000, 0.000000, 0.000000, 0.000000 +2855, 1.000000, 0.000000, 0.000000, 0.000000 +2856, 1.000000, 0.000000, 0.000000, 0.000000 +2857, 1.000000, 0.000000, 0.000000, 0.000000 +2858, 1.000000, 0.000000, 0.000000, 0.000000 +2859, 1.000000, 0.000000, 0.000000, 0.000000 +2860, 1.000000, 0.000000, 0.000000, 0.000000 +2861, 1.000000, 0.000000, 0.000000, 0.000000 +2862, 1.000000, 0.000000, 0.000000, 0.000000 +2863, 1.000000, 0.000000, 0.000000, 0.000000 +2864, 1.000000, 0.000000, 0.000000, 0.000000 +2865, 1.000000, 0.000000, 0.000000, 0.000000 +2866, 1.000000, 0.000000, 0.000000, 0.000000 +2867, 1.000000, 0.000000, 0.000000, 0.000000 +2868, 1.000000, 0.000000, 0.000000, 0.000000 +2869, 1.000000, 0.000000, 0.000000, 0.000000 +2870, 1.000000, 0.000000, 0.000000, 0.000000 +2871, 1.000000, 0.000000, 0.000000, 0.000000 +2872, 1.000000, 0.000000, 0.000000, 0.000000 +2873, 1.000000, 0.000000, 0.000000, 0.000000 +2874, 1.000000, 0.000000, 0.000000, 0.000000 +2875, 1.000000, 0.000000, 0.000000, 0.000000 +2876, 1.000000, 0.000000, 0.000000, 0.000000 +2877, 1.000000, 0.000000, 0.000000, 0.000000 +2878, 1.000000, 0.000000, 0.000000, 0.000000 +2879, 1.000000, 0.000000, 0.000000, 0.000000 +2880, 1.000000, 0.000000, 0.000000, 0.000000 +2881, 1.000000, 0.000000, 0.000000, 0.000000 +2882, 1.000000, 0.000000, 0.000000, 0.000000 +2883, 1.000000, 0.000000, 0.000000, 0.000000 +2884, 1.000000, 0.000000, 0.000000, 0.000000 +2885, 1.000000, 0.000000, 0.000000, 0.000000 +2886, 1.000000, 0.000000, 0.000000, 0.000000 +2887, 1.000000, 0.000000, 0.000000, 0.000000 +2888, 1.000000, 0.000000, 0.000000, 0.000000 +2889, 1.000000, 0.000000, 0.000000, 0.000000 +2890, 1.000000, 0.000000, 0.000000, 0.000000 +2891, 1.000000, 0.000000, 0.000000, 0.000000 +2892, 1.000000, 0.000000, 0.000000, 0.000000 +2893, 1.000000, 0.000000, 0.000000, 0.000000 +2894, 1.000000, 0.000000, 0.000000, 0.000000 +2895, 1.000000, 0.000000, 0.000000, 0.000000 +2896, 1.000000, 0.000000, 0.000000, 0.000000 +2897, 1.000000, 0.000000, 0.000000, 0.000000 +2898, 1.000000, 0.000000, 0.000000, 0.000000 +2899, 1.000000, 0.000000, 0.000000, 0.000000 +2900, 1.000000, 0.000000, 0.000000, 0.000000 +2901, 1.000000, 0.000000, 0.000000, 0.000000 +2902, 1.000000, 0.000000, 0.000000, 0.000000 +2903, 1.000000, 0.000000, 0.000000, 0.000000 +2904, 1.000000, 0.000000, 0.000000, 0.000000 +2905, 1.000000, 0.000000, 0.000000, 0.000000 +2906, 1.000000, 0.000000, 0.000000, 0.000000 +2907, 1.000000, 0.000000, 0.000000, 0.000000 +2908, 1.000000, 0.000000, 0.000000, 0.000000 +2909, 1.000000, 0.000000, 0.000000, 0.000000 +2910, 1.000000, 0.000000, 0.000000, 0.000000 +2911, 1.000000, 0.000000, 0.000000, 0.000000 +2912, 1.000000, 0.000000, 0.000000, 0.000000 +2913, 1.000000, 0.000000, 0.000000, 0.000000 +2914, 1.000000, 0.000000, 0.000000, 0.000000 +2915, 1.000000, 0.000000, 0.000000, 0.000000 +2916, 1.000000, 0.000000, 0.000000, 0.000000 +2917, 1.000000, 0.000000, 0.000000, 0.000000 +2918, 1.000000, 0.000000, 0.000000, 0.000000 +2919, 1.000000, 0.000000, 0.000000, 0.000000 +2920, 1.000000, 0.000000, 0.000000, 0.000000 +2921, 1.000000, 0.000000, 0.000000, 0.000000 +2922, 1.000000, 0.000000, 0.000000, 0.000000 +2923, 1.000000, 0.000000, 0.000000, 0.000000 +2924, 1.000000, 0.000000, 0.000000, 0.000000 +2925, 1.000000, 0.000000, 0.000000, 0.000000 +2926, 1.000000, 0.000000, 0.000000, 0.000000 +2927, 1.000000, 0.000000, 0.000000, 0.000000 +2928, 1.000000, 0.000000, 0.000000, 0.000000 +2929, 1.000000, 0.000000, 0.000000, 0.000000 +2930, 1.000000, 0.000000, 0.000000, 0.000000 +2931, 1.000000, 0.000000, 0.000000, 0.000000 +2932, 1.000000, 0.000000, 0.000000, 0.000000 +2933, 1.000000, 0.000000, 0.000000, 0.000000 +2934, 1.000000, 0.000000, 0.000000, 0.000000 +2935, 1.000000, 0.000000, 0.000000, 0.000000 +2936, 1.000000, 0.000000, 0.000000, 0.000000 +2937, 1.000000, 0.000000, 0.000000, 0.000000 +2938, 1.000000, 0.000000, 0.000000, 0.000000 +2939, 1.000000, 0.000000, 0.000000, 0.000000 +2940, 1.000000, 0.000000, 0.000000, 0.000000 +2941, 1.000000, 0.000000, 0.000000, 0.000000 +2942, 1.000000, 0.000000, 0.000000, 0.000000 +2943, 1.000000, 0.000000, 0.000000, 0.000000 +2944, 1.000000, 0.000000, 0.000000, 0.000000 +2945, 1.000000, 0.000000, 0.000000, 0.000000 +2946, 1.000000, 0.000000, 0.000000, 0.000000 +2947, 1.000000, 0.000000, 0.000000, 0.000000 +2948, 1.000000, 0.000000, 0.000000, 0.000000 +2949, 1.000000, 0.000000, 0.000000, 0.000000 +2950, 1.000000, 0.000000, 0.000000, 0.000000 +2951, 1.000000, 0.000000, 0.000000, 0.000000 +2952, 1.000000, 0.000000, 0.000000, 0.000000 +2953, 1.000000, 0.000000, 0.000000, 0.000000 +2954, 1.000000, 0.000000, 0.000000, 0.000000 +2955, 1.000000, 0.000000, 0.000000, 0.000000 +2956, 1.000000, 0.000000, 0.000000, 0.000000 +2957, 1.000000, 0.000000, 0.000000, 0.000000 +2958, 1.000000, 0.000000, 0.000000, 0.000000 +2959, 1.000000, 0.000000, 0.000000, 0.000000 +2960, 1.000000, 0.000000, 0.000000, 0.000000 +2961, 1.000000, 0.000000, 0.000000, 0.000000 +2962, 1.000000, 0.000000, 0.000000, 0.000000 +2963, 1.000000, 0.000000, 0.000000, 0.000000 +2964, 1.000000, 0.000000, 0.000000, 0.000000 +2965, 1.000000, 0.000000, 0.000000, 0.000000 +2966, 1.000000, 0.000000, 0.000000, 0.000000 +2967, 1.000000, 0.000000, 0.000000, 0.000000 +2968, 1.000000, 0.000000, 0.000000, 0.000000 +2969, 1.000000, 0.000000, 0.000000, 0.000000 +2970, 1.000000, 0.000000, 0.000000, 0.000000 +2971, 1.000000, 0.000000, 0.000000, 0.000000 +2972, 1.000000, 0.000000, 0.000000, 0.000000 +2973, 1.000000, 0.000000, 0.000000, 0.000000 +2974, 1.000000, 0.000000, 0.000000, 0.000000 +2975, 1.000000, 0.000000, 0.000000, 0.000000 +2976, 1.000000, 0.000000, 0.000000, 0.000000 +2977, 1.000000, 0.000000, 0.000000, 0.000000 +2978, 1.000000, 0.000000, 0.000000, 0.000000 +2979, 1.000000, 0.000000, 0.000000, 0.000000 +2980, 1.000000, 0.000000, 0.000000, 0.000000 +2981, 1.000000, 0.000000, 0.000000, 0.000000 +2982, 1.000000, 0.000000, 0.000000, 0.000000 +2983, 1.000000, 0.000000, 0.000000, 0.000000 +2984, 1.000000, 0.000000, 0.000000, 0.000000 +2985, 1.000000, 0.000000, 0.000000, 0.000000 +2986, 1.000000, 0.000000, 0.000000, 0.000000 +2987, 1.000000, 0.000000, 0.000000, 0.000000 +2988, 1.000000, 0.000000, 0.000000, 0.000000 +2989, 1.000000, 0.000000, 0.000000, 0.000000 +2990, 1.000000, 0.000000, 0.000000, 0.000000 +2991, 1.000000, 0.000000, 0.000000, 0.000000 +2992, 1.000000, 0.000000, 0.000000, 0.000000 +2993, 1.000000, 0.000000, 0.000000, 0.000000 +2994, 1.000000, 0.000000, 0.000000, 0.000000 +2995, 1.000000, 0.000000, 0.000000, 0.000000 +2996, 1.000000, 0.000000, 0.000000, 0.000000 +2997, 1.000000, 0.000000, 0.000000, 0.000000 +2998, 1.000000, 0.000000, 0.000000, 0.000000 +2999, 1.000000, 0.000000, 0.000000, 0.000000 diff --git a/scripts/trajectories/full-circle-T15.0-w0.2.csv b/scripts/trajectories/full-circle-T15.0-w0.2.csv new file mode 100644 index 0000000000..f8fb10120b --- /dev/null +++ b/scripts/trajectories/full-circle-T15.0-w0.2.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 0.999995, 0.000000, 0.000000, 0.003143 +2, 0.999980, 0.000000, 0.000000, 0.006285 +3, 0.999956, 0.000000, 0.000000, 0.009428 +4, 0.999921, 0.000000, 0.000000, 0.012570 +5, 0.999877, 0.000000, 0.000000, 0.015713 +6, 0.999822, 0.000000, 0.000000, 0.018855 +7, 0.999758, 0.000000, 0.000000, 0.021997 +8, 0.999684, 0.000000, 0.000000, 0.025138 +9, 0.999600, 0.000000, 0.000000, 0.028280 +10, 0.999506, 0.000000, 0.000000, 0.031421 +11, 0.999403, 0.000000, 0.000000, 0.034562 +12, 0.999289, 0.000000, 0.000000, 0.037703 +13, 0.999166, 0.000000, 0.000000, 0.040843 +14, 0.999032, 0.000000, 0.000000, 0.043983 +15, 0.998889, 0.000000, 0.000000, 0.047122 +16, 0.998736, 0.000000, 0.000000, 0.050261 +17, 0.998573, 0.000000, 0.000000, 0.053399 +18, 0.998400, 0.000000, 0.000000, 0.056537 +19, 0.998218, 0.000000, 0.000000, 0.059675 +20, 0.998025, 0.000000, 0.000000, 0.062811 +21, 0.997823, 0.000000, 0.000000, 0.065948 +22, 0.997611, 0.000000, 0.000000, 0.069083 +23, 0.997389, 0.000000, 0.000000, 0.072218 +24, 0.997157, 0.000000, 0.000000, 0.075352 +25, 0.996915, 0.000000, 0.000000, 0.078485 +26, 0.996664, 0.000000, 0.000000, 0.081618 +27, 0.996402, 0.000000, 0.000000, 0.084750 +28, 0.996131, 0.000000, 0.000000, 0.087880 +29, 0.995850, 0.000000, 0.000000, 0.091010 +30, 0.995559, 0.000000, 0.000000, 0.094140 +31, 0.995258, 0.000000, 0.000000, 0.097268 +32, 0.994948, 0.000000, 0.000000, 0.100395 +33, 0.994627, 0.000000, 0.000000, 0.103521 +34, 0.994297, 0.000000, 0.000000, 0.106647 +35, 0.993957, 0.000000, 0.000000, 0.109771 +36, 0.993607, 0.000000, 0.000000, 0.112894 +37, 0.993247, 0.000000, 0.000000, 0.116016 +38, 0.992878, 0.000000, 0.000000, 0.119137 +39, 0.992499, 0.000000, 0.000000, 0.122256 +40, 0.992109, 0.000000, 0.000000, 0.125375 +41, 0.991711, 0.000000, 0.000000, 0.128492 +42, 0.991302, 0.000000, 0.000000, 0.131608 +43, 0.990883, 0.000000, 0.000000, 0.134723 +44, 0.990455, 0.000000, 0.000000, 0.137836 +45, 0.990017, 0.000000, 0.000000, 0.140948 +46, 0.989569, 0.000000, 0.000000, 0.144058 +47, 0.989112, 0.000000, 0.000000, 0.147168 +48, 0.988644, 0.000000, 0.000000, 0.150275 +49, 0.988167, 0.000000, 0.000000, 0.153382 +50, 0.987680, 0.000000, 0.000000, 0.156486 +51, 0.987183, 0.000000, 0.000000, 0.159589 +52, 0.986677, 0.000000, 0.000000, 0.162691 +53, 0.986161, 0.000000, 0.000000, 0.165791 +54, 0.985635, 0.000000, 0.000000, 0.168889 +55, 0.985099, 0.000000, 0.000000, 0.171986 +56, 0.984554, 0.000000, 0.000000, 0.175081 +57, 0.983999, 0.000000, 0.000000, 0.178174 +58, 0.983434, 0.000000, 0.000000, 0.181266 +59, 0.982860, 0.000000, 0.000000, 0.184355 +60, 0.982275, 0.000000, 0.000000, 0.187443 +61, 0.981682, 0.000000, 0.000000, 0.190529 +62, 0.981078, 0.000000, 0.000000, 0.193613 +63, 0.980465, 0.000000, 0.000000, 0.196695 +64, 0.979842, 0.000000, 0.000000, 0.199776 +65, 0.979209, 0.000000, 0.000000, 0.202854 +66, 0.978567, 0.000000, 0.000000, 0.205930 +67, 0.977915, 0.000000, 0.000000, 0.209005 +68, 0.977253, 0.000000, 0.000000, 0.212077 +69, 0.976582, 0.000000, 0.000000, 0.215147 +70, 0.975901, 0.000000, 0.000000, 0.218215 +71, 0.975210, 0.000000, 0.000000, 0.221281 +72, 0.974510, 0.000000, 0.000000, 0.224344 +73, 0.973800, 0.000000, 0.000000, 0.227406 +74, 0.973081, 0.000000, 0.000000, 0.230465 +75, 0.972352, 0.000000, 0.000000, 0.233522 +76, 0.971613, 0.000000, 0.000000, 0.236576 +77, 0.970865, 0.000000, 0.000000, 0.239629 +78, 0.970107, 0.000000, 0.000000, 0.242678 +79, 0.969339, 0.000000, 0.000000, 0.245726 +80, 0.968562, 0.000000, 0.000000, 0.248771 +81, 0.967776, 0.000000, 0.000000, 0.251814 +82, 0.966980, 0.000000, 0.000000, 0.254854 +83, 0.966174, 0.000000, 0.000000, 0.257891 +84, 0.965359, 0.000000, 0.000000, 0.260926 +85, 0.964534, 0.000000, 0.000000, 0.263959 +86, 0.963700, 0.000000, 0.000000, 0.266989 +87, 0.962856, 0.000000, 0.000000, 0.270016 +88, 0.962003, 0.000000, 0.000000, 0.273041 +89, 0.961140, 0.000000, 0.000000, 0.276062 +90, 0.960267, 0.000000, 0.000000, 0.279082 +91, 0.959386, 0.000000, 0.000000, 0.282098 +92, 0.958494, 0.000000, 0.000000, 0.285112 +93, 0.957594, 0.000000, 0.000000, 0.288122 +94, 0.956683, 0.000000, 0.000000, 0.291130 +95, 0.955764, 0.000000, 0.000000, 0.294135 +96, 0.954835, 0.000000, 0.000000, 0.297138 +97, 0.953896, 0.000000, 0.000000, 0.300137 +98, 0.952948, 0.000000, 0.000000, 0.303133 +99, 0.951991, 0.000000, 0.000000, 0.306126 +100, 0.951024, 0.000000, 0.000000, 0.309117 +101, 0.950048, 0.000000, 0.000000, 0.312104 +102, 0.949062, 0.000000, 0.000000, 0.315088 +103, 0.948068, 0.000000, 0.000000, 0.318069 +104, 0.947063, 0.000000, 0.000000, 0.321047 +105, 0.946050, 0.000000, 0.000000, 0.324021 +106, 0.945027, 0.000000, 0.000000, 0.326993 +107, 0.943994, 0.000000, 0.000000, 0.329961 +108, 0.942953, 0.000000, 0.000000, 0.332926 +109, 0.941902, 0.000000, 0.000000, 0.335888 +110, 0.940842, 0.000000, 0.000000, 0.338846 +111, 0.939772, 0.000000, 0.000000, 0.341801 +112, 0.938693, 0.000000, 0.000000, 0.344753 +113, 0.937605, 0.000000, 0.000000, 0.347701 +114, 0.936508, 0.000000, 0.000000, 0.350646 +115, 0.935401, 0.000000, 0.000000, 0.353588 +116, 0.934286, 0.000000, 0.000000, 0.356525 +117, 0.933161, 0.000000, 0.000000, 0.359460 +118, 0.932026, 0.000000, 0.000000, 0.362391 +119, 0.930883, 0.000000, 0.000000, 0.365318 +120, 0.929730, 0.000000, 0.000000, 0.368241 +121, 0.928568, 0.000000, 0.000000, 0.371161 +122, 0.927397, 0.000000, 0.000000, 0.374078 +123, 0.926217, 0.000000, 0.000000, 0.376990 +124, 0.925028, 0.000000, 0.000000, 0.379899 +125, 0.923829, 0.000000, 0.000000, 0.382804 +126, 0.922622, 0.000000, 0.000000, 0.385706 +127, 0.921405, 0.000000, 0.000000, 0.388603 +128, 0.920179, 0.000000, 0.000000, 0.391497 +129, 0.918944, 0.000000, 0.000000, 0.394387 +130, 0.917701, 0.000000, 0.000000, 0.397273 +131, 0.916448, 0.000000, 0.000000, 0.400155 +132, 0.915185, 0.000000, 0.000000, 0.403033 +133, 0.913914, 0.000000, 0.000000, 0.405907 +134, 0.912634, 0.000000, 0.000000, 0.408777 +135, 0.911345, 0.000000, 0.000000, 0.411643 +136, 0.910047, 0.000000, 0.000000, 0.414505 +137, 0.908740, 0.000000, 0.000000, 0.417363 +138, 0.907424, 0.000000, 0.000000, 0.420217 +139, 0.906099, 0.000000, 0.000000, 0.423067 +140, 0.904765, 0.000000, 0.000000, 0.425912 +141, 0.903422, 0.000000, 0.000000, 0.428753 +142, 0.902070, 0.000000, 0.000000, 0.431590 +143, 0.900709, 0.000000, 0.000000, 0.434423 +144, 0.899339, 0.000000, 0.000000, 0.437251 +145, 0.897961, 0.000000, 0.000000, 0.440076 +146, 0.896573, 0.000000, 0.000000, 0.442895 +147, 0.895177, 0.000000, 0.000000, 0.445711 +148, 0.893772, 0.000000, 0.000000, 0.448522 +149, 0.892358, 0.000000, 0.000000, 0.451328 +150, 0.890935, 0.000000, 0.000000, 0.454130 +151, 0.889504, 0.000000, 0.000000, 0.456928 +152, 0.888063, 0.000000, 0.000000, 0.459721 +153, 0.886614, 0.000000, 0.000000, 0.462510 +154, 0.885156, 0.000000, 0.000000, 0.465294 +155, 0.883690, 0.000000, 0.000000, 0.468073 +156, 0.882214, 0.000000, 0.000000, 0.470848 +157, 0.880730, 0.000000, 0.000000, 0.473618 +158, 0.879237, 0.000000, 0.000000, 0.476384 +159, 0.877736, 0.000000, 0.000000, 0.479145 +160, 0.876226, 0.000000, 0.000000, 0.481901 +161, 0.874707, 0.000000, 0.000000, 0.484652 +162, 0.873180, 0.000000, 0.000000, 0.487398 +163, 0.871644, 0.000000, 0.000000, 0.490140 +164, 0.870099, 0.000000, 0.000000, 0.492877 +165, 0.868546, 0.000000, 0.000000, 0.495609 +166, 0.866984, 0.000000, 0.000000, 0.498336 +167, 0.865414, 0.000000, 0.000000, 0.501058 +168, 0.863835, 0.000000, 0.000000, 0.503775 +169, 0.862247, 0.000000, 0.000000, 0.506487 +170, 0.860651, 0.000000, 0.000000, 0.509195 +171, 0.859047, 0.000000, 0.000000, 0.511897 +172, 0.857434, 0.000000, 0.000000, 0.514594 +173, 0.855813, 0.000000, 0.000000, 0.517286 +174, 0.854183, 0.000000, 0.000000, 0.519973 +175, 0.852544, 0.000000, 0.000000, 0.522655 +176, 0.850898, 0.000000, 0.000000, 0.525332 +177, 0.849243, 0.000000, 0.000000, 0.528003 +178, 0.847579, 0.000000, 0.000000, 0.530669 +179, 0.845907, 0.000000, 0.000000, 0.533330 +180, 0.844227, 0.000000, 0.000000, 0.535986 +181, 0.842538, 0.000000, 0.000000, 0.538636 +182, 0.840841, 0.000000, 0.000000, 0.541282 +183, 0.839136, 0.000000, 0.000000, 0.543921 +184, 0.837423, 0.000000, 0.000000, 0.546556 +185, 0.835701, 0.000000, 0.000000, 0.549185 +186, 0.833971, 0.000000, 0.000000, 0.551808 +187, 0.832233, 0.000000, 0.000000, 0.554427 +188, 0.830486, 0.000000, 0.000000, 0.557039 +189, 0.828732, 0.000000, 0.000000, 0.559646 +190, 0.826969, 0.000000, 0.000000, 0.562248 +191, 0.825198, 0.000000, 0.000000, 0.564844 +192, 0.823418, 0.000000, 0.000000, 0.567435 +193, 0.821631, 0.000000, 0.000000, 0.570019 +194, 0.819836, 0.000000, 0.000000, 0.572599 +195, 0.818032, 0.000000, 0.000000, 0.575172 +196, 0.816221, 0.000000, 0.000000, 0.577740 +197, 0.814401, 0.000000, 0.000000, 0.580303 +198, 0.812573, 0.000000, 0.000000, 0.582859 +199, 0.810738, 0.000000, 0.000000, 0.585410 +200, 0.808894, 0.000000, 0.000000, 0.587955 +201, 0.807042, 0.000000, 0.000000, 0.590494 +202, 0.805182, 0.000000, 0.000000, 0.593027 +203, 0.803315, 0.000000, 0.000000, 0.595555 +204, 0.801439, 0.000000, 0.000000, 0.598076 +205, 0.799556, 0.000000, 0.000000, 0.600592 +206, 0.797664, 0.000000, 0.000000, 0.603102 +207, 0.795765, 0.000000, 0.000000, 0.605605 +208, 0.793858, 0.000000, 0.000000, 0.608103 +209, 0.791943, 0.000000, 0.000000, 0.610595 +210, 0.790020, 0.000000, 0.000000, 0.613081 +211, 0.788090, 0.000000, 0.000000, 0.615561 +212, 0.786151, 0.000000, 0.000000, 0.618034 +213, 0.784205, 0.000000, 0.000000, 0.620502 +214, 0.782251, 0.000000, 0.000000, 0.622963 +215, 0.780290, 0.000000, 0.000000, 0.625418 +216, 0.778320, 0.000000, 0.000000, 0.627867 +217, 0.776343, 0.000000, 0.000000, 0.630310 +218, 0.774359, 0.000000, 0.000000, 0.632747 +219, 0.772366, 0.000000, 0.000000, 0.635177 +220, 0.770366, 0.000000, 0.000000, 0.637602 +221, 0.768359, 0.000000, 0.000000, 0.640019 +222, 0.766344, 0.000000, 0.000000, 0.642431 +223, 0.764321, 0.000000, 0.000000, 0.644836 +224, 0.762291, 0.000000, 0.000000, 0.647235 +225, 0.760253, 0.000000, 0.000000, 0.649627 +226, 0.758208, 0.000000, 0.000000, 0.652013 +227, 0.756155, 0.000000, 0.000000, 0.654393 +228, 0.754095, 0.000000, 0.000000, 0.656766 +229, 0.752027, 0.000000, 0.000000, 0.659132 +230, 0.749952, 0.000000, 0.000000, 0.661493 +231, 0.747869, 0.000000, 0.000000, 0.663846 +232, 0.745779, 0.000000, 0.000000, 0.666193 +233, 0.743682, 0.000000, 0.000000, 0.668534 +234, 0.741577, 0.000000, 0.000000, 0.670867 +235, 0.739465, 0.000000, 0.000000, 0.673195 +236, 0.737346, 0.000000, 0.000000, 0.675515 +237, 0.735220, 0.000000, 0.000000, 0.677829 +238, 0.733086, 0.000000, 0.000000, 0.680136 +239, 0.730945, 0.000000, 0.000000, 0.682437 +240, 0.728797, 0.000000, 0.000000, 0.684730 +241, 0.726641, 0.000000, 0.000000, 0.687017 +242, 0.724478, 0.000000, 0.000000, 0.689297 +243, 0.722309, 0.000000, 0.000000, 0.691571 +244, 0.720132, 0.000000, 0.000000, 0.693837 +245, 0.717948, 0.000000, 0.000000, 0.696097 +246, 0.715757, 0.000000, 0.000000, 0.698350 +247, 0.713558, 0.000000, 0.000000, 0.700596 +248, 0.711353, 0.000000, 0.000000, 0.702835 +249, 0.709141, 0.000000, 0.000000, 0.705067 +250, 0.706922, 0.000000, 0.000000, 0.707292 +251, 0.704695, 0.000000, 0.000000, 0.709510 +252, 0.702462, 0.000000, 0.000000, 0.711721 +253, 0.700222, 0.000000, 0.000000, 0.713925 +254, 0.697975, 0.000000, 0.000000, 0.716122 +255, 0.695721, 0.000000, 0.000000, 0.718312 +256, 0.693460, 0.000000, 0.000000, 0.720495 +257, 0.691192, 0.000000, 0.000000, 0.722671 +258, 0.688918, 0.000000, 0.000000, 0.724839 +259, 0.686637, 0.000000, 0.000000, 0.727001 +260, 0.684349, 0.000000, 0.000000, 0.729155 +261, 0.682054, 0.000000, 0.000000, 0.731302 +262, 0.679752, 0.000000, 0.000000, 0.733442 +263, 0.677444, 0.000000, 0.000000, 0.735575 +264, 0.675129, 0.000000, 0.000000, 0.737700 +265, 0.672807, 0.000000, 0.000000, 0.739818 +266, 0.670479, 0.000000, 0.000000, 0.741929 +267, 0.668144, 0.000000, 0.000000, 0.744032 +268, 0.665802, 0.000000, 0.000000, 0.746128 +269, 0.663454, 0.000000, 0.000000, 0.748217 +270, 0.661100, 0.000000, 0.000000, 0.750298 +271, 0.658739, 0.000000, 0.000000, 0.752372 +272, 0.656371, 0.000000, 0.000000, 0.754438 +273, 0.653997, 0.000000, 0.000000, 0.756497 +274, 0.651616, 0.000000, 0.000000, 0.758549 +275, 0.649229, 0.000000, 0.000000, 0.760593 +276, 0.646835, 0.000000, 0.000000, 0.762630 +277, 0.644436, 0.000000, 0.000000, 0.764659 +278, 0.642029, 0.000000, 0.000000, 0.766680 +279, 0.639617, 0.000000, 0.000000, 0.768694 +280, 0.637198, 0.000000, 0.000000, 0.770700 +281, 0.634773, 0.000000, 0.000000, 0.772699 +282, 0.632341, 0.000000, 0.000000, 0.774690 +283, 0.629904, 0.000000, 0.000000, 0.776673 +284, 0.627460, 0.000000, 0.000000, 0.778649 +285, 0.625010, 0.000000, 0.000000, 0.780617 +286, 0.622553, 0.000000, 0.000000, 0.782577 +287, 0.620091, 0.000000, 0.000000, 0.784530 +288, 0.617622, 0.000000, 0.000000, 0.786475 +289, 0.615148, 0.000000, 0.000000, 0.788412 +290, 0.612667, 0.000000, 0.000000, 0.790341 +291, 0.610180, 0.000000, 0.000000, 0.792263 +292, 0.607687, 0.000000, 0.000000, 0.794176 +293, 0.605189, 0.000000, 0.000000, 0.796082 +294, 0.602684, 0.000000, 0.000000, 0.797980 +295, 0.600173, 0.000000, 0.000000, 0.799870 +296, 0.597656, 0.000000, 0.000000, 0.801752 +297, 0.595134, 0.000000, 0.000000, 0.803627 +298, 0.592605, 0.000000, 0.000000, 0.805493 +299, 0.590071, 0.000000, 0.000000, 0.807351 +300, 0.587531, 0.000000, 0.000000, 0.809202 +301, 0.584985, 0.000000, 0.000000, 0.811044 +302, 0.582433, 0.000000, 0.000000, 0.812878 +303, 0.579876, 0.000000, 0.000000, 0.814705 +304, 0.577313, 0.000000, 0.000000, 0.816523 +305, 0.574744, 0.000000, 0.000000, 0.818333 +306, 0.572169, 0.000000, 0.000000, 0.820136 +307, 0.569589, 0.000000, 0.000000, 0.821930 +308, 0.567003, 0.000000, 0.000000, 0.823716 +309, 0.564412, 0.000000, 0.000000, 0.825493 +310, 0.561815, 0.000000, 0.000000, 0.827263 +311, 0.559212, 0.000000, 0.000000, 0.829025 +312, 0.556604, 0.000000, 0.000000, 0.830778 +313, 0.553991, 0.000000, 0.000000, 0.832523 +314, 0.551371, 0.000000, 0.000000, 0.834260 +315, 0.548747, 0.000000, 0.000000, 0.835988 +316, 0.546117, 0.000000, 0.000000, 0.837709 +317, 0.543482, 0.000000, 0.000000, 0.839421 +318, 0.540841, 0.000000, 0.000000, 0.841125 +319, 0.538195, 0.000000, 0.000000, 0.842820 +320, 0.535544, 0.000000, 0.000000, 0.844507 +321, 0.532887, 0.000000, 0.000000, 0.846186 +322, 0.530225, 0.000000, 0.000000, 0.847857 +323, 0.527558, 0.000000, 0.000000, 0.849519 +324, 0.524886, 0.000000, 0.000000, 0.851173 +325, 0.522208, 0.000000, 0.000000, 0.852818 +326, 0.519526, 0.000000, 0.000000, 0.854455 +327, 0.516838, 0.000000, 0.000000, 0.856083 +328, 0.514145, 0.000000, 0.000000, 0.857703 +329, 0.511447, 0.000000, 0.000000, 0.859315 +330, 0.508744, 0.000000, 0.000000, 0.860918 +331, 0.506036, 0.000000, 0.000000, 0.862512 +332, 0.503323, 0.000000, 0.000000, 0.864099 +333, 0.500605, 0.000000, 0.000000, 0.865676 +334, 0.497882, 0.000000, 0.000000, 0.867245 +335, 0.495154, 0.000000, 0.000000, 0.868805 +336, 0.492421, 0.000000, 0.000000, 0.870357 +337, 0.489683, 0.000000, 0.000000, 0.871900 +338, 0.486941, 0.000000, 0.000000, 0.873435 +339, 0.484194, 0.000000, 0.000000, 0.874961 +340, 0.481442, 0.000000, 0.000000, 0.876478 +341, 0.478685, 0.000000, 0.000000, 0.877987 +342, 0.475923, 0.000000, 0.000000, 0.879487 +343, 0.473157, 0.000000, 0.000000, 0.880978 +344, 0.470386, 0.000000, 0.000000, 0.882461 +345, 0.467610, 0.000000, 0.000000, 0.883935 +346, 0.464830, 0.000000, 0.000000, 0.885400 +347, 0.462045, 0.000000, 0.000000, 0.886856 +348, 0.459256, 0.000000, 0.000000, 0.888304 +349, 0.456462, 0.000000, 0.000000, 0.889743 +350, 0.453664, 0.000000, 0.000000, 0.891173 +351, 0.450861, 0.000000, 0.000000, 0.892594 +352, 0.448054, 0.000000, 0.000000, 0.894007 +353, 0.445242, 0.000000, 0.000000, 0.895410 +354, 0.442426, 0.000000, 0.000000, 0.896805 +355, 0.439605, 0.000000, 0.000000, 0.898191 +356, 0.436780, 0.000000, 0.000000, 0.899568 +357, 0.433951, 0.000000, 0.000000, 0.900936 +358, 0.431118, 0.000000, 0.000000, 0.902296 +359, 0.428280, 0.000000, 0.000000, 0.903646 +360, 0.425438, 0.000000, 0.000000, 0.904988 +361, 0.422592, 0.000000, 0.000000, 0.906320 +362, 0.419742, 0.000000, 0.000000, 0.907644 +363, 0.416887, 0.000000, 0.000000, 0.908958 +364, 0.414029, 0.000000, 0.000000, 0.910264 +365, 0.411166, 0.000000, 0.000000, 0.911561 +366, 0.408299, 0.000000, 0.000000, 0.912848 +367, 0.405428, 0.000000, 0.000000, 0.914127 +368, 0.402554, 0.000000, 0.000000, 0.915396 +369, 0.399675, 0.000000, 0.000000, 0.916657 +370, 0.396792, 0.000000, 0.000000, 0.917908 +371, 0.393906, 0.000000, 0.000000, 0.919151 +372, 0.391015, 0.000000, 0.000000, 0.920384 +373, 0.388121, 0.000000, 0.000000, 0.921609 +374, 0.385222, 0.000000, 0.000000, 0.922824 +375, 0.382320, 0.000000, 0.000000, 0.924030 +376, 0.379415, 0.000000, 0.000000, 0.925227 +377, 0.376505, 0.000000, 0.000000, 0.926415 +378, 0.373592, 0.000000, 0.000000, 0.927593 +379, 0.370675, 0.000000, 0.000000, 0.928763 +380, 0.367754, 0.000000, 0.000000, 0.929923 +381, 0.364830, 0.000000, 0.000000, 0.931074 +382, 0.361902, 0.000000, 0.000000, 0.932216 +383, 0.358971, 0.000000, 0.000000, 0.933349 +384, 0.356036, 0.000000, 0.000000, 0.934472 +385, 0.353098, 0.000000, 0.000000, 0.935587 +386, 0.350156, 0.000000, 0.000000, 0.936692 +387, 0.347210, 0.000000, 0.000000, 0.937787 +388, 0.344261, 0.000000, 0.000000, 0.938874 +389, 0.341309, 0.000000, 0.000000, 0.939951 +390, 0.338354, 0.000000, 0.000000, 0.941019 +391, 0.335395, 0.000000, 0.000000, 0.942078 +392, 0.332432, 0.000000, 0.000000, 0.943127 +393, 0.329467, 0.000000, 0.000000, 0.944167 +394, 0.326498, 0.000000, 0.000000, 0.945198 +395, 0.323526, 0.000000, 0.000000, 0.946219 +396, 0.320551, 0.000000, 0.000000, 0.947231 +397, 0.317572, 0.000000, 0.000000, 0.948234 +398, 0.314591, 0.000000, 0.000000, 0.949227 +399, 0.311606, 0.000000, 0.000000, 0.950211 +400, 0.308618, 0.000000, 0.000000, 0.951186 +401, 0.305628, 0.000000, 0.000000, 0.952151 +402, 0.302634, 0.000000, 0.000000, 0.953107 +403, 0.299637, 0.000000, 0.000000, 0.954053 +404, 0.296637, 0.000000, 0.000000, 0.954990 +405, 0.293635, 0.000000, 0.000000, 0.955918 +406, 0.290629, 0.000000, 0.000000, 0.956836 +407, 0.287621, 0.000000, 0.000000, 0.957744 +408, 0.284610, 0.000000, 0.000000, 0.958644 +409, 0.281595, 0.000000, 0.000000, 0.959533 +410, 0.278579, 0.000000, 0.000000, 0.960413 +411, 0.275559, 0.000000, 0.000000, 0.961284 +412, 0.272537, 0.000000, 0.000000, 0.962145 +413, 0.269512, 0.000000, 0.000000, 0.962997 +414, 0.266484, 0.000000, 0.000000, 0.963839 +415, 0.263454, 0.000000, 0.000000, 0.964672 +416, 0.260421, 0.000000, 0.000000, 0.965495 +417, 0.257385, 0.000000, 0.000000, 0.966309 +418, 0.254347, 0.000000, 0.000000, 0.967113 +419, 0.251307, 0.000000, 0.000000, 0.967907 +420, 0.248264, 0.000000, 0.000000, 0.968692 +421, 0.245218, 0.000000, 0.000000, 0.969468 +422, 0.242170, 0.000000, 0.000000, 0.970234 +423, 0.239120, 0.000000, 0.000000, 0.970990 +424, 0.236067, 0.000000, 0.000000, 0.971737 +425, 0.233012, 0.000000, 0.000000, 0.972474 +426, 0.229955, 0.000000, 0.000000, 0.973201 +427, 0.226896, 0.000000, 0.000000, 0.973919 +428, 0.223834, 0.000000, 0.000000, 0.974627 +429, 0.220770, 0.000000, 0.000000, 0.975326 +430, 0.217704, 0.000000, 0.000000, 0.976015 +431, 0.214635, 0.000000, 0.000000, 0.976694 +432, 0.211565, 0.000000, 0.000000, 0.977364 +433, 0.208492, 0.000000, 0.000000, 0.978024 +434, 0.205418, 0.000000, 0.000000, 0.978674 +435, 0.202341, 0.000000, 0.000000, 0.979315 +436, 0.199262, 0.000000, 0.000000, 0.979946 +437, 0.196182, 0.000000, 0.000000, 0.980568 +438, 0.193099, 0.000000, 0.000000, 0.981179 +439, 0.190015, 0.000000, 0.000000, 0.981781 +440, 0.186929, 0.000000, 0.000000, 0.982374 +441, 0.183840, 0.000000, 0.000000, 0.982956 +442, 0.180750, 0.000000, 0.000000, 0.983529 +443, 0.177659, 0.000000, 0.000000, 0.984092 +444, 0.174565, 0.000000, 0.000000, 0.984646 +445, 0.171470, 0.000000, 0.000000, 0.985189 +446, 0.168373, 0.000000, 0.000000, 0.985723 +447, 0.165274, 0.000000, 0.000000, 0.986248 +448, 0.162174, 0.000000, 0.000000, 0.986762 +449, 0.159072, 0.000000, 0.000000, 0.987267 +450, 0.155969, 0.000000, 0.000000, 0.987762 +451, 0.152864, 0.000000, 0.000000, 0.988247 +452, 0.149757, 0.000000, 0.000000, 0.988723 +453, 0.146650, 0.000000, 0.000000, 0.989189 +454, 0.143540, 0.000000, 0.000000, 0.989644 +455, 0.140429, 0.000000, 0.000000, 0.990091 +456, 0.137317, 0.000000, 0.000000, 0.990527 +457, 0.134204, 0.000000, 0.000000, 0.990954 +458, 0.131089, 0.000000, 0.000000, 0.991371 +459, 0.127973, 0.000000, 0.000000, 0.991778 +460, 0.124855, 0.000000, 0.000000, 0.992175 +461, 0.121736, 0.000000, 0.000000, 0.992562 +462, 0.118617, 0.000000, 0.000000, 0.992940 +463, 0.115496, 0.000000, 0.000000, 0.993308 +464, 0.112373, 0.000000, 0.000000, 0.993666 +465, 0.109250, 0.000000, 0.000000, 0.994014 +466, 0.106126, 0.000000, 0.000000, 0.994353 +467, 0.103000, 0.000000, 0.000000, 0.994681 +468, 0.099874, 0.000000, 0.000000, 0.995000 +469, 0.096747, 0.000000, 0.000000, 0.995309 +470, 0.093618, 0.000000, 0.000000, 0.995608 +471, 0.090489, 0.000000, 0.000000, 0.995897 +472, 0.087359, 0.000000, 0.000000, 0.996177 +473, 0.084228, 0.000000, 0.000000, 0.996447 +474, 0.081096, 0.000000, 0.000000, 0.996706 +475, 0.077963, 0.000000, 0.000000, 0.996956 +476, 0.074830, 0.000000, 0.000000, 0.997196 +477, 0.071695, 0.000000, 0.000000, 0.997427 +478, 0.068560, 0.000000, 0.000000, 0.997647 +479, 0.065425, 0.000000, 0.000000, 0.997857 +480, 0.062289, 0.000000, 0.000000, 0.998058 +481, 0.059152, 0.000000, 0.000000, 0.998249 +482, 0.056014, 0.000000, 0.000000, 0.998430 +483, 0.052876, 0.000000, 0.000000, 0.998601 +484, 0.049738, 0.000000, 0.000000, 0.998762 +485, 0.046599, 0.000000, 0.000000, 0.998914 +486, 0.043459, 0.000000, 0.000000, 0.999055 +487, 0.040320, 0.000000, 0.000000, 0.999187 +488, 0.037179, 0.000000, 0.000000, 0.999309 +489, 0.034039, 0.000000, 0.000000, 0.999421 +490, 0.030898, 0.000000, 0.000000, 0.999523 +491, 0.027756, 0.000000, 0.000000, 0.999615 +492, 0.024615, 0.000000, 0.000000, 0.999697 +493, 0.021473, 0.000000, 0.000000, 0.999769 +494, 0.018331, 0.000000, 0.000000, 0.999832 +495, 0.015189, 0.000000, 0.000000, 0.999885 +496, 0.012046, 0.000000, 0.000000, 0.999927 +497, 0.008904, 0.000000, 0.000000, 0.999960 +498, 0.005761, 0.000000, 0.000000, 0.999983 +499, 0.002619, 0.000000, 0.000000, 0.999997 +500, -0.000524, -0.000000, 0.000000, 1.000000 +501, -0.003666, -0.000000, 0.000000, 0.999993 +502, -0.006809, -0.000000, 0.000000, 0.999977 +503, -0.009952, -0.000000, 0.000000, 0.999950 +504, -0.013094, -0.000000, 0.000000, 0.999914 +505, -0.016236, -0.000000, 0.000000, 0.999868 +506, -0.019378, -0.000000, 0.000000, 0.999812 +507, -0.022520, -0.000000, 0.000000, 0.999746 +508, -0.025662, -0.000000, 0.000000, 0.999671 +509, -0.028804, -0.000000, 0.000000, 0.999585 +510, -0.031945, -0.000000, 0.000000, 0.999490 +511, -0.035086, -0.000000, 0.000000, 0.999384 +512, -0.038226, -0.000000, 0.000000, 0.999269 +513, -0.041366, -0.000000, 0.000000, 0.999144 +514, -0.044506, -0.000000, 0.000000, 0.999009 +515, -0.047645, -0.000000, 0.000000, 0.998864 +516, -0.050784, -0.000000, 0.000000, 0.998710 +517, -0.053922, -0.000000, 0.000000, 0.998545 +518, -0.057060, -0.000000, 0.000000, 0.998371 +519, -0.060198, -0.000000, 0.000000, 0.998186 +520, -0.063334, -0.000000, 0.000000, 0.997992 +521, -0.066470, -0.000000, 0.000000, 0.997788 +522, -0.069606, -0.000000, 0.000000, 0.997575 +523, -0.072740, -0.000000, 0.000000, 0.997351 +524, -0.075874, -0.000000, 0.000000, 0.997117 +525, -0.079007, -0.000000, 0.000000, 0.996874 +526, -0.082140, -0.000000, 0.000000, 0.996621 +527, -0.085271, -0.000000, 0.000000, 0.996358 +528, -0.088402, -0.000000, 0.000000, 0.996085 +529, -0.091532, -0.000000, 0.000000, 0.995802 +530, -0.094661, -0.000000, 0.000000, 0.995510 +531, -0.097789, -0.000000, 0.000000, 0.995207 +532, -0.100916, -0.000000, 0.000000, 0.994895 +533, -0.104042, -0.000000, 0.000000, 0.994573 +534, -0.107167, -0.000000, 0.000000, 0.994241 +535, -0.110291, -0.000000, 0.000000, 0.993899 +536, -0.113414, -0.000000, 0.000000, 0.993548 +537, -0.116536, -0.000000, 0.000000, 0.993186 +538, -0.119657, -0.000000, 0.000000, 0.992815 +539, -0.122776, -0.000000, 0.000000, 0.992434 +540, -0.125894, -0.000000, 0.000000, 0.992044 +541, -0.129011, -0.000000, 0.000000, 0.991643 +542, -0.132127, -0.000000, 0.000000, 0.991233 +543, -0.135242, -0.000000, 0.000000, 0.990813 +544, -0.138355, -0.000000, 0.000000, 0.990383 +545, -0.141466, -0.000000, 0.000000, 0.989943 +546, -0.144577, -0.000000, 0.000000, 0.989494 +547, -0.147686, -0.000000, 0.000000, 0.989034 +548, -0.150793, -0.000000, 0.000000, 0.988565 +549, -0.153899, -0.000000, 0.000000, 0.988087 +550, -0.157003, -0.000000, 0.000000, 0.987598 +551, -0.160106, -0.000000, 0.000000, 0.987100 +552, -0.163208, -0.000000, 0.000000, 0.986592 +553, -0.166307, -0.000000, 0.000000, 0.986074 +554, -0.169405, -0.000000, 0.000000, 0.985546 +555, -0.172502, -0.000000, 0.000000, 0.985009 +556, -0.175596, -0.000000, 0.000000, 0.984462 +557, -0.178689, -0.000000, 0.000000, 0.983906 +558, -0.181781, -0.000000, 0.000000, 0.983339 +559, -0.184870, -0.000000, 0.000000, 0.982763 +560, -0.187958, -0.000000, 0.000000, 0.982177 +561, -0.191043, -0.000000, 0.000000, 0.981582 +562, -0.194127, -0.000000, 0.000000, 0.980976 +563, -0.197209, -0.000000, 0.000000, 0.980361 +564, -0.200289, -0.000000, 0.000000, 0.979737 +565, -0.203367, -0.000000, 0.000000, 0.979103 +566, -0.206443, -0.000000, 0.000000, 0.978459 +567, -0.209517, -0.000000, 0.000000, 0.977805 +568, -0.212589, -0.000000, 0.000000, 0.977142 +569, -0.215658, -0.000000, 0.000000, 0.976469 +570, -0.218726, -0.000000, 0.000000, 0.975786 +571, -0.221791, -0.000000, 0.000000, 0.975094 +572, -0.224855, -0.000000, 0.000000, 0.974392 +573, -0.227916, -0.000000, 0.000000, 0.973681 +574, -0.230975, -0.000000, 0.000000, 0.972960 +575, -0.234031, -0.000000, 0.000000, 0.972229 +576, -0.237085, -0.000000, 0.000000, 0.971489 +577, -0.240137, -0.000000, 0.000000, 0.970739 +578, -0.243187, -0.000000, 0.000000, 0.969980 +579, -0.246234, -0.000000, 0.000000, 0.969210 +580, -0.249278, -0.000000, 0.000000, 0.968432 +581, -0.252321, -0.000000, 0.000000, 0.967644 +582, -0.255360, -0.000000, 0.000000, 0.966846 +583, -0.258397, -0.000000, 0.000000, 0.966039 +584, -0.261432, -0.000000, 0.000000, 0.965222 +585, -0.264464, -0.000000, 0.000000, 0.964396 +586, -0.267494, -0.000000, 0.000000, 0.963560 +587, -0.270520, -0.000000, 0.000000, 0.962714 +588, -0.273544, -0.000000, 0.000000, 0.961859 +589, -0.276566, -0.000000, 0.000000, 0.960995 +590, -0.279585, -0.000000, 0.000000, 0.960121 +591, -0.282600, -0.000000, 0.000000, 0.959238 +592, -0.285614, -0.000000, 0.000000, 0.958345 +593, -0.288624, -0.000000, 0.000000, 0.957443 +594, -0.291631, -0.000000, 0.000000, 0.956531 +595, -0.294636, -0.000000, 0.000000, 0.955610 +596, -0.297638, -0.000000, 0.000000, 0.954679 +597, -0.300636, -0.000000, 0.000000, 0.953739 +598, -0.303632, -0.000000, 0.000000, 0.952789 +599, -0.306625, -0.000000, 0.000000, 0.951830 +600, -0.309615, -0.000000, 0.000000, 0.950862 +601, -0.312601, -0.000000, 0.000000, 0.949884 +602, -0.315585, -0.000000, 0.000000, 0.948897 +603, -0.318565, -0.000000, 0.000000, 0.947901 +604, -0.321543, -0.000000, 0.000000, 0.946895 +605, -0.324517, -0.000000, 0.000000, 0.945880 +606, -0.327488, -0.000000, 0.000000, 0.944855 +607, -0.330456, -0.000000, 0.000000, 0.943822 +608, -0.333420, -0.000000, 0.000000, 0.942778 +609, -0.336381, -0.000000, 0.000000, 0.941726 +610, -0.339339, -0.000000, 0.000000, 0.940664 +611, -0.342294, -0.000000, 0.000000, 0.939593 +612, -0.345245, -0.000000, 0.000000, 0.938513 +613, -0.348192, -0.000000, 0.000000, 0.937423 +614, -0.351137, -0.000000, 0.000000, 0.936324 +615, -0.354077, -0.000000, 0.000000, 0.935216 +616, -0.357015, -0.000000, 0.000000, 0.934099 +617, -0.359948, -0.000000, 0.000000, 0.932972 +618, -0.362879, -0.000000, 0.000000, 0.931836 +619, -0.365805, -0.000000, 0.000000, 0.930691 +620, -0.368728, -0.000000, 0.000000, 0.929537 +621, -0.371648, -0.000000, 0.000000, 0.928374 +622, -0.374563, -0.000000, 0.000000, 0.927201 +623, -0.377475, -0.000000, 0.000000, 0.926020 +624, -0.380384, -0.000000, 0.000000, 0.924829 +625, -0.383288, -0.000000, 0.000000, 0.923629 +626, -0.386189, -0.000000, 0.000000, 0.922420 +627, -0.389086, -0.000000, 0.000000, 0.921201 +628, -0.391979, -0.000000, 0.000000, 0.919974 +629, -0.394868, -0.000000, 0.000000, 0.918738 +630, -0.397753, -0.000000, 0.000000, 0.917492 +631, -0.400635, -0.000000, 0.000000, 0.916238 +632, -0.403512, -0.000000, 0.000000, 0.914974 +633, -0.406386, -0.000000, 0.000000, 0.913702 +634, -0.409255, -0.000000, 0.000000, 0.912420 +635, -0.412121, -0.000000, 0.000000, 0.911129 +636, -0.414982, -0.000000, 0.000000, 0.909830 +637, -0.417839, -0.000000, 0.000000, 0.908521 +638, -0.420692, -0.000000, 0.000000, 0.907203 +639, -0.423541, -0.000000, 0.000000, 0.905877 +640, -0.426386, -0.000000, 0.000000, 0.904541 +641, -0.429226, -0.000000, 0.000000, 0.903197 +642, -0.432063, -0.000000, 0.000000, 0.901844 +643, -0.434895, -0.000000, 0.000000, 0.900481 +644, -0.437722, -0.000000, 0.000000, 0.899110 +645, -0.440546, -0.000000, 0.000000, 0.897730 +646, -0.443365, -0.000000, 0.000000, 0.896341 +647, -0.446180, -0.000000, 0.000000, 0.894943 +648, -0.448990, -0.000000, 0.000000, 0.893537 +649, -0.451796, -0.000000, 0.000000, 0.892121 +650, -0.454597, -0.000000, 0.000000, 0.890697 +651, -0.457394, -0.000000, 0.000000, 0.889264 +652, -0.460186, -0.000000, 0.000000, 0.887822 +653, -0.462974, -0.000000, 0.000000, 0.886372 +654, -0.465757, -0.000000, 0.000000, 0.884912 +655, -0.468536, -0.000000, 0.000000, 0.883444 +656, -0.471310, -0.000000, 0.000000, 0.881968 +657, -0.474079, -0.000000, 0.000000, 0.880482 +658, -0.476844, -0.000000, 0.000000, 0.878988 +659, -0.479604, -0.000000, 0.000000, 0.877485 +660, -0.482359, -0.000000, 0.000000, 0.875973 +661, -0.485110, -0.000000, 0.000000, 0.874453 +662, -0.487856, -0.000000, 0.000000, 0.872924 +663, -0.490596, -0.000000, 0.000000, 0.871387 +664, -0.493332, -0.000000, 0.000000, 0.869841 +665, -0.496064, -0.000000, 0.000000, 0.868286 +666, -0.498790, -0.000000, 0.000000, 0.866723 +667, -0.501511, -0.000000, 0.000000, 0.865151 +668, -0.504228, -0.000000, 0.000000, 0.863571 +669, -0.506939, -0.000000, 0.000000, 0.861982 +670, -0.509645, -0.000000, 0.000000, 0.860385 +671, -0.512347, -0.000000, 0.000000, 0.858779 +672, -0.515043, -0.000000, 0.000000, 0.857164 +673, -0.517734, -0.000000, 0.000000, 0.855541 +674, -0.520420, -0.000000, 0.000000, 0.853910 +675, -0.523101, -0.000000, 0.000000, 0.852270 +676, -0.525777, -0.000000, 0.000000, 0.850622 +677, -0.528448, -0.000000, 0.000000, 0.848966 +678, -0.531113, -0.000000, 0.000000, 0.847301 +679, -0.533773, -0.000000, 0.000000, 0.845628 +680, -0.536428, -0.000000, 0.000000, 0.843946 +681, -0.539078, -0.000000, 0.000000, 0.842256 +682, -0.541722, -0.000000, 0.000000, 0.840558 +683, -0.544361, -0.000000, 0.000000, 0.838851 +684, -0.546994, -0.000000, 0.000000, 0.837136 +685, -0.549622, -0.000000, 0.000000, 0.835413 +686, -0.552245, -0.000000, 0.000000, 0.833682 +687, -0.554862, -0.000000, 0.000000, 0.831942 +688, -0.557474, -0.000000, 0.000000, 0.830194 +689, -0.560080, -0.000000, 0.000000, 0.828438 +690, -0.562681, -0.000000, 0.000000, 0.826674 +691, -0.565276, -0.000000, 0.000000, 0.824902 +692, -0.567866, -0.000000, 0.000000, 0.823121 +693, -0.570450, -0.000000, 0.000000, 0.821333 +694, -0.573028, -0.000000, 0.000000, 0.819536 +695, -0.575601, -0.000000, 0.000000, 0.817731 +696, -0.578168, -0.000000, 0.000000, 0.815918 +697, -0.580729, -0.000000, 0.000000, 0.814097 +698, -0.583285, -0.000000, 0.000000, 0.812268 +699, -0.585834, -0.000000, 0.000000, 0.810431 +700, -0.588378, -0.000000, 0.000000, 0.808586 +701, -0.590917, -0.000000, 0.000000, 0.806733 +702, -0.593449, -0.000000, 0.000000, 0.804872 +703, -0.595975, -0.000000, 0.000000, 0.803003 +704, -0.598496, -0.000000, 0.000000, 0.801126 +705, -0.601011, -0.000000, 0.000000, 0.799241 +706, -0.603519, -0.000000, 0.000000, 0.797348 +707, -0.606022, -0.000000, 0.000000, 0.795448 +708, -0.608519, -0.000000, 0.000000, 0.793539 +709, -0.611010, -0.000000, 0.000000, 0.791623 +710, -0.613495, -0.000000, 0.000000, 0.789699 +711, -0.615973, -0.000000, 0.000000, 0.787767 +712, -0.618446, -0.000000, 0.000000, 0.785827 +713, -0.620912, -0.000000, 0.000000, 0.783880 +714, -0.623373, -0.000000, 0.000000, 0.781925 +715, -0.625827, -0.000000, 0.000000, 0.779962 +716, -0.628275, -0.000000, 0.000000, 0.777991 +717, -0.630717, -0.000000, 0.000000, 0.776013 +718, -0.633153, -0.000000, 0.000000, 0.774027 +719, -0.635582, -0.000000, 0.000000, 0.772033 +720, -0.638005, -0.000000, 0.000000, 0.770032 +721, -0.640422, -0.000000, 0.000000, 0.768023 +722, -0.642832, -0.000000, 0.000000, 0.766007 +723, -0.645236, -0.000000, 0.000000, 0.763983 +724, -0.647634, -0.000000, 0.000000, 0.761952 +725, -0.650025, -0.000000, 0.000000, 0.759913 +726, -0.652410, -0.000000, 0.000000, 0.757866 +727, -0.654789, -0.000000, 0.000000, 0.755812 +728, -0.657161, -0.000000, 0.000000, 0.753750 +729, -0.659526, -0.000000, 0.000000, 0.751682 +730, -0.661885, -0.000000, 0.000000, 0.749605 +731, -0.664238, -0.000000, 0.000000, 0.747521 +732, -0.666584, -0.000000, 0.000000, 0.745430 +733, -0.668923, -0.000000, 0.000000, 0.743332 +734, -0.671256, -0.000000, 0.000000, 0.741226 +735, -0.673582, -0.000000, 0.000000, 0.739113 +736, -0.675901, -0.000000, 0.000000, 0.736992 +737, -0.678214, -0.000000, 0.000000, 0.734864 +738, -0.680520, -0.000000, 0.000000, 0.732729 +739, -0.682819, -0.000000, 0.000000, 0.730587 +740, -0.685112, -0.000000, 0.000000, 0.728438 +741, -0.687398, -0.000000, 0.000000, 0.726281 +742, -0.689677, -0.000000, 0.000000, 0.724117 +743, -0.691949, -0.000000, 0.000000, 0.721946 +744, -0.694214, -0.000000, 0.000000, 0.719768 +745, -0.696473, -0.000000, 0.000000, 0.717583 +746, -0.698725, -0.000000, 0.000000, 0.715391 +747, -0.700969, -0.000000, 0.000000, 0.713191 +748, -0.703207, -0.000000, 0.000000, 0.710985 +749, -0.705438, -0.000000, 0.000000, 0.708771 +750, -0.707662, -0.000000, 0.000000, 0.706551 +751, -0.709879, -0.000000, 0.000000, 0.704324 +752, -0.712089, -0.000000, 0.000000, 0.702089 +753, -0.714292, -0.000000, 0.000000, 0.699848 +754, -0.716488, -0.000000, 0.000000, 0.697600 +755, -0.718676, -0.000000, 0.000000, 0.695345 +756, -0.720858, -0.000000, 0.000000, 0.693083 +757, -0.723033, -0.000000, 0.000000, 0.690814 +758, -0.725200, -0.000000, 0.000000, 0.688538 +759, -0.727360, -0.000000, 0.000000, 0.686256 +760, -0.729513, -0.000000, 0.000000, 0.683967 +761, -0.731659, -0.000000, 0.000000, 0.681671 +762, -0.733798, -0.000000, 0.000000, 0.679368 +763, -0.735929, -0.000000, 0.000000, 0.677058 +764, -0.738053, -0.000000, 0.000000, 0.674742 +765, -0.740170, -0.000000, 0.000000, 0.672420 +766, -0.742280, -0.000000, 0.000000, 0.670090 +767, -0.744382, -0.000000, 0.000000, 0.667754 +768, -0.746477, -0.000000, 0.000000, 0.665412 +769, -0.748564, -0.000000, 0.000000, 0.663062 +770, -0.750644, -0.000000, 0.000000, 0.660707 +771, -0.752717, -0.000000, 0.000000, 0.658344 +772, -0.754782, -0.000000, 0.000000, 0.655976 +773, -0.756840, -0.000000, 0.000000, 0.653600 +774, -0.758890, -0.000000, 0.000000, 0.651219 +775, -0.760933, -0.000000, 0.000000, 0.648830 +776, -0.762968, -0.000000, 0.000000, 0.646436 +777, -0.764996, -0.000000, 0.000000, 0.644035 +778, -0.767016, -0.000000, 0.000000, 0.641628 +779, -0.769029, -0.000000, 0.000000, 0.639214 +780, -0.771034, -0.000000, 0.000000, 0.636794 +781, -0.773031, -0.000000, 0.000000, 0.634368 +782, -0.775021, -0.000000, 0.000000, 0.631935 +783, -0.777003, -0.000000, 0.000000, 0.629497 +784, -0.778978, -0.000000, 0.000000, 0.627052 +785, -0.780944, -0.000000, 0.000000, 0.624601 +786, -0.782903, -0.000000, 0.000000, 0.622143 +787, -0.784855, -0.000000, 0.000000, 0.619680 +788, -0.786798, -0.000000, 0.000000, 0.617210 +789, -0.788734, -0.000000, 0.000000, 0.614735 +790, -0.790662, -0.000000, 0.000000, 0.612253 +791, -0.792582, -0.000000, 0.000000, 0.609765 +792, -0.794494, -0.000000, 0.000000, 0.607271 +793, -0.796399, -0.000000, 0.000000, 0.604772 +794, -0.798296, -0.000000, 0.000000, 0.602266 +795, -0.800184, -0.000000, 0.000000, 0.599754 +796, -0.802065, -0.000000, 0.000000, 0.597236 +797, -0.803938, -0.000000, 0.000000, 0.594713 +798, -0.805803, -0.000000, 0.000000, 0.592183 +799, -0.807660, -0.000000, 0.000000, 0.589648 +800, -0.809509, -0.000000, 0.000000, 0.587107 +801, -0.811350, -0.000000, 0.000000, 0.584560 +802, -0.813183, -0.000000, 0.000000, 0.582008 +803, -0.815008, -0.000000, 0.000000, 0.579449 +804, -0.816825, -0.000000, 0.000000, 0.576885 +805, -0.818634, -0.000000, 0.000000, 0.574315 +806, -0.820435, -0.000000, 0.000000, 0.571740 +807, -0.822228, -0.000000, 0.000000, 0.569158 +808, -0.824012, -0.000000, 0.000000, 0.566572 +809, -0.825789, -0.000000, 0.000000, 0.563979 +810, -0.827557, -0.000000, 0.000000, 0.561381 +811, -0.829317, -0.000000, 0.000000, 0.558778 +812, -0.831069, -0.000000, 0.000000, 0.556169 +813, -0.832813, -0.000000, 0.000000, 0.553554 +814, -0.834549, -0.000000, 0.000000, 0.550934 +815, -0.836276, -0.000000, 0.000000, 0.548309 +816, -0.837995, -0.000000, 0.000000, 0.545678 +817, -0.839706, -0.000000, 0.000000, 0.543042 +818, -0.841408, -0.000000, 0.000000, 0.540400 +819, -0.843102, -0.000000, 0.000000, 0.537754 +820, -0.844788, -0.000000, 0.000000, 0.535101 +821, -0.846465, -0.000000, 0.000000, 0.532444 +822, -0.848134, -0.000000, 0.000000, 0.529781 +823, -0.849795, -0.000000, 0.000000, 0.527113 +824, -0.851447, -0.000000, 0.000000, 0.524440 +825, -0.853091, -0.000000, 0.000000, 0.521761 +826, -0.854727, -0.000000, 0.000000, 0.519078 +827, -0.856354, -0.000000, 0.000000, 0.516389 +828, -0.857973, -0.000000, 0.000000, 0.513696 +829, -0.859583, -0.000000, 0.000000, 0.510997 +830, -0.861184, -0.000000, 0.000000, 0.508293 +831, -0.862777, -0.000000, 0.000000, 0.505584 +832, -0.864362, -0.000000, 0.000000, 0.502870 +833, -0.865938, -0.000000, 0.000000, 0.500151 +834, -0.867506, -0.000000, 0.000000, 0.497427 +835, -0.869065, -0.000000, 0.000000, 0.494699 +836, -0.870615, -0.000000, 0.000000, 0.491965 +837, -0.872157, -0.000000, 0.000000, 0.489227 +838, -0.873690, -0.000000, 0.000000, 0.486483 +839, -0.875214, -0.000000, 0.000000, 0.483735 +840, -0.876730, -0.000000, 0.000000, 0.480982 +841, -0.878237, -0.000000, 0.000000, 0.478225 +842, -0.879736, -0.000000, 0.000000, 0.475462 +843, -0.881226, -0.000000, 0.000000, 0.472695 +844, -0.882707, -0.000000, 0.000000, 0.469924 +845, -0.884179, -0.000000, 0.000000, 0.467147 +846, -0.885643, -0.000000, 0.000000, 0.464366 +847, -0.887098, -0.000000, 0.000000, 0.461581 +848, -0.888544, -0.000000, 0.000000, 0.458791 +849, -0.889982, -0.000000, 0.000000, 0.455996 +850, -0.891410, -0.000000, 0.000000, 0.453197 +851, -0.892830, -0.000000, 0.000000, 0.450393 +852, -0.894241, -0.000000, 0.000000, 0.447585 +853, -0.895643, -0.000000, 0.000000, 0.444773 +854, -0.897037, -0.000000, 0.000000, 0.441956 +855, -0.898421, -0.000000, 0.000000, 0.439135 +856, -0.899797, -0.000000, 0.000000, 0.436309 +857, -0.901164, -0.000000, 0.000000, 0.433479 +858, -0.902521, -0.000000, 0.000000, 0.430645 +859, -0.903870, -0.000000, 0.000000, 0.427807 +860, -0.905210, -0.000000, 0.000000, 0.424964 +861, -0.906541, -0.000000, 0.000000, 0.422117 +862, -0.907863, -0.000000, 0.000000, 0.419266 +863, -0.909177, -0.000000, 0.000000, 0.416411 +864, -0.910481, -0.000000, 0.000000, 0.413552 +865, -0.911776, -0.000000, 0.000000, 0.410688 +866, -0.913062, -0.000000, 0.000000, 0.407821 +867, -0.914339, -0.000000, 0.000000, 0.404950 +868, -0.915607, -0.000000, 0.000000, 0.402074 +869, -0.916866, -0.000000, 0.000000, 0.399195 +870, -0.918116, -0.000000, 0.000000, 0.396311 +871, -0.919357, -0.000000, 0.000000, 0.393424 +872, -0.920589, -0.000000, 0.000000, 0.390533 +873, -0.921812, -0.000000, 0.000000, 0.387638 +874, -0.923025, -0.000000, 0.000000, 0.384739 +875, -0.924230, -0.000000, 0.000000, 0.381836 +876, -0.925425, -0.000000, 0.000000, 0.378930 +877, -0.926612, -0.000000, 0.000000, 0.376020 +878, -0.927789, -0.000000, 0.000000, 0.373106 +879, -0.928957, -0.000000, 0.000000, 0.370188 +880, -0.930115, -0.000000, 0.000000, 0.367267 +881, -0.931265, -0.000000, 0.000000, 0.364342 +882, -0.932405, -0.000000, 0.000000, 0.361414 +883, -0.933537, -0.000000, 0.000000, 0.358482 +884, -0.934659, -0.000000, 0.000000, 0.355547 +885, -0.935771, -0.000000, 0.000000, 0.352607 +886, -0.936875, -0.000000, 0.000000, 0.349665 +887, -0.937969, -0.000000, 0.000000, 0.346719 +888, -0.939054, -0.000000, 0.000000, 0.343770 +889, -0.940130, -0.000000, 0.000000, 0.340817 +890, -0.941196, -0.000000, 0.000000, 0.337861 +891, -0.942253, -0.000000, 0.000000, 0.334901 +892, -0.943301, -0.000000, 0.000000, 0.331938 +893, -0.944340, -0.000000, 0.000000, 0.328972 +894, -0.945369, -0.000000, 0.000000, 0.326003 +895, -0.946389, -0.000000, 0.000000, 0.323030 +896, -0.947399, -0.000000, 0.000000, 0.320055 +897, -0.948400, -0.000000, 0.000000, 0.317076 +898, -0.949392, -0.000000, 0.000000, 0.314094 +899, -0.950374, -0.000000, 0.000000, 0.311108 +900, -0.951347, -0.000000, 0.000000, 0.308120 +901, -0.952311, -0.000000, 0.000000, 0.305129 +902, -0.953265, -0.000000, 0.000000, 0.302135 +903, -0.954210, -0.000000, 0.000000, 0.299137 +904, -0.955145, -0.000000, 0.000000, 0.296137 +905, -0.956071, -0.000000, 0.000000, 0.293134 +906, -0.956988, -0.000000, 0.000000, 0.290128 +907, -0.957895, -0.000000, 0.000000, 0.287119 +908, -0.958792, -0.000000, 0.000000, 0.284107 +909, -0.959681, -0.000000, 0.000000, 0.281093 +910, -0.960559, -0.000000, 0.000000, 0.278076 +911, -0.961428, -0.000000, 0.000000, 0.275056 +912, -0.962288, -0.000000, 0.000000, 0.272033 +913, -0.963138, -0.000000, 0.000000, 0.269007 +914, -0.963979, -0.000000, 0.000000, 0.265979 +915, -0.964810, -0.000000, 0.000000, 0.262948 +916, -0.965631, -0.000000, 0.000000, 0.259915 +917, -0.966444, -0.000000, 0.000000, 0.256879 +918, -0.967246, -0.000000, 0.000000, 0.253841 +919, -0.968039, -0.000000, 0.000000, 0.250800 +920, -0.968822, -0.000000, 0.000000, 0.247756 +921, -0.969596, -0.000000, 0.000000, 0.244710 +922, -0.970360, -0.000000, 0.000000, 0.241662 +923, -0.971115, -0.000000, 0.000000, 0.238611 +924, -0.971860, -0.000000, 0.000000, 0.235558 +925, -0.972596, -0.000000, 0.000000, 0.232503 +926, -0.973322, -0.000000, 0.000000, 0.229445 +927, -0.974038, -0.000000, 0.000000, 0.226385 +928, -0.974744, -0.000000, 0.000000, 0.223323 +929, -0.975441, -0.000000, 0.000000, 0.220259 +930, -0.976129, -0.000000, 0.000000, 0.217192 +931, -0.976807, -0.000000, 0.000000, 0.214124 +932, -0.977475, -0.000000, 0.000000, 0.211053 +933, -0.978133, -0.000000, 0.000000, 0.207980 +934, -0.978782, -0.000000, 0.000000, 0.204905 +935, -0.979421, -0.000000, 0.000000, 0.201828 +936, -0.980050, -0.000000, 0.000000, 0.198749 +937, -0.980670, -0.000000, 0.000000, 0.195668 +938, -0.981280, -0.000000, 0.000000, 0.192585 +939, -0.981881, -0.000000, 0.000000, 0.189501 +940, -0.982471, -0.000000, 0.000000, 0.186414 +941, -0.983052, -0.000000, 0.000000, 0.183326 +942, -0.983624, -0.000000, 0.000000, 0.180235 +943, -0.984185, -0.000000, 0.000000, 0.177143 +944, -0.984737, -0.000000, 0.000000, 0.174049 +945, -0.985279, -0.000000, 0.000000, 0.170954 +946, -0.985811, -0.000000, 0.000000, 0.167857 +947, -0.986334, -0.000000, 0.000000, 0.164758 +948, -0.986847, -0.000000, 0.000000, 0.161657 +949, -0.987350, -0.000000, 0.000000, 0.158555 +950, -0.987844, -0.000000, 0.000000, 0.155451 +951, -0.988327, -0.000000, 0.000000, 0.152346 +952, -0.988801, -0.000000, 0.000000, 0.149240 +953, -0.989265, -0.000000, 0.000000, 0.146131 +954, -0.989720, -0.000000, 0.000000, 0.143022 +955, -0.990164, -0.000000, 0.000000, 0.139911 +956, -0.990599, -0.000000, 0.000000, 0.136798 +957, -0.991024, -0.000000, 0.000000, 0.133685 +958, -0.991439, -0.000000, 0.000000, 0.130569 +959, -0.991845, -0.000000, 0.000000, 0.127453 +960, -0.992240, -0.000000, 0.000000, 0.124335 +961, -0.992626, -0.000000, 0.000000, 0.121217 +962, -0.993002, -0.000000, 0.000000, 0.118097 +963, -0.993368, -0.000000, 0.000000, 0.114975 +964, -0.993725, -0.000000, 0.000000, 0.111853 +965, -0.994071, -0.000000, 0.000000, 0.108729 +966, -0.994408, -0.000000, 0.000000, 0.105605 +967, -0.994735, -0.000000, 0.000000, 0.102479 +968, -0.995052, -0.000000, 0.000000, 0.099353 +969, -0.995360, -0.000000, 0.000000, 0.096225 +970, -0.995657, -0.000000, 0.000000, 0.093097 +971, -0.995945, -0.000000, 0.000000, 0.089967 +972, -0.996223, -0.000000, 0.000000, 0.086837 +973, -0.996491, -0.000000, 0.000000, 0.083706 +974, -0.996749, -0.000000, 0.000000, 0.080574 +975, -0.996997, -0.000000, 0.000000, 0.077441 +976, -0.997235, -0.000000, 0.000000, 0.074307 +977, -0.997464, -0.000000, 0.000000, 0.071173 +978, -0.997683, -0.000000, 0.000000, 0.068038 +979, -0.997892, -0.000000, 0.000000, 0.064902 +980, -0.998091, -0.000000, 0.000000, 0.061766 +981, -0.998280, -0.000000, 0.000000, 0.058629 +982, -0.998459, -0.000000, 0.000000, 0.055491 +983, -0.998629, -0.000000, 0.000000, 0.052353 +984, -0.998788, -0.000000, 0.000000, 0.049215 +985, -0.998938, -0.000000, 0.000000, 0.046076 +986, -0.999078, -0.000000, 0.000000, 0.042936 +987, -0.999208, -0.000000, 0.000000, 0.039796 +988, -0.999328, -0.000000, 0.000000, 0.036656 +989, -0.999438, -0.000000, 0.000000, 0.033515 +990, -0.999539, -0.000000, 0.000000, 0.030374 +991, -0.999629, -0.000000, 0.000000, 0.027233 +992, -0.999710, -0.000000, 0.000000, 0.024091 +993, -0.999781, -0.000000, 0.000000, 0.020949 +994, -0.999841, -0.000000, 0.000000, 0.017807 +995, -0.999892, -0.000000, 0.000000, 0.014665 +996, -0.999934, -0.000000, 0.000000, 0.011523 +997, -0.999965, -0.000000, 0.000000, 0.008380 +998, -0.999986, -0.000000, 0.000000, 0.005238 +999, -0.999998, -0.000000, 0.000000, 0.002095 +1000, -0.999999, 0.000000, -0.000000, -0.001048 +1001, -0.999991, 0.000000, -0.000000, -0.004190 +1002, -0.999973, 0.000000, -0.000000, -0.007333 +1003, -0.999945, 0.000000, -0.000000, -0.010475 +1004, -0.999907, 0.000000, -0.000000, -0.013618 +1005, -0.999860, 0.000000, -0.000000, -0.016760 +1006, -0.999802, 0.000000, -0.000000, -0.019902 +1007, -0.999734, 0.000000, -0.000000, -0.023044 +1008, -0.999657, 0.000000, -0.000000, -0.026186 +1009, -0.999570, 0.000000, -0.000000, -0.029327 +1010, -0.999473, 0.000000, -0.000000, -0.032468 +1011, -0.999366, 0.000000, -0.000000, -0.035609 +1012, -0.999249, 0.000000, -0.000000, -0.038750 +1013, -0.999122, 0.000000, -0.000000, -0.041890 +1014, -0.998986, 0.000000, -0.000000, -0.045029 +1015, -0.998839, 0.000000, -0.000000, -0.048169 +1016, -0.998683, 0.000000, -0.000000, -0.051307 +1017, -0.998517, 0.000000, -0.000000, -0.054445 +1018, -0.998341, 0.000000, -0.000000, -0.057583 +1019, -0.998155, 0.000000, -0.000000, -0.060720 +1020, -0.997959, 0.000000, -0.000000, -0.063857 +1021, -0.997753, 0.000000, -0.000000, -0.066993 +1022, -0.997538, 0.000000, -0.000000, -0.070128 +1023, -0.997313, 0.000000, -0.000000, -0.073263 +1024, -0.997078, 0.000000, -0.000000, -0.076396 +1025, -0.996833, 0.000000, -0.000000, -0.079529 +1026, -0.996578, 0.000000, -0.000000, -0.082662 +1027, -0.996313, 0.000000, -0.000000, -0.085793 +1028, -0.996038, 0.000000, -0.000000, -0.088924 +1029, -0.995754, 0.000000, -0.000000, -0.092054 +1030, -0.995460, 0.000000, -0.000000, -0.095182 +1031, -0.995156, 0.000000, -0.000000, -0.098310 +1032, -0.994842, 0.000000, -0.000000, -0.101437 +1033, -0.994518, 0.000000, -0.000000, -0.104563 +1034, -0.994185, 0.000000, -0.000000, -0.107688 +1035, -0.993841, 0.000000, -0.000000, -0.110812 +1036, -0.993488, 0.000000, -0.000000, -0.113935 +1037, -0.993125, 0.000000, -0.000000, -0.117056 +1038, -0.992753, 0.000000, -0.000000, -0.120177 +1039, -0.992370, 0.000000, -0.000000, -0.123296 +1040, -0.991978, 0.000000, -0.000000, -0.126414 +1041, -0.991575, 0.000000, -0.000000, -0.129531 +1042, -0.991163, 0.000000, -0.000000, -0.132646 +1043, -0.990742, 0.000000, -0.000000, -0.135761 +1044, -0.990310, 0.000000, -0.000000, -0.138873 +1045, -0.989869, 0.000000, -0.000000, -0.141985 +1046, -0.989418, 0.000000, -0.000000, -0.145095 +1047, -0.988957, 0.000000, -0.000000, -0.148204 +1048, -0.988486, 0.000000, -0.000000, -0.151311 +1049, -0.988006, 0.000000, -0.000000, -0.154417 +1050, -0.987516, 0.000000, -0.000000, -0.157521 +1051, -0.987016, 0.000000, -0.000000, -0.160623 +1052, -0.986506, 0.000000, -0.000000, -0.163724 +1053, -0.985987, 0.000000, -0.000000, -0.166824 +1054, -0.985458, 0.000000, -0.000000, -0.169922 +1055, -0.984919, 0.000000, -0.000000, -0.173018 +1056, -0.984370, 0.000000, -0.000000, -0.176112 +1057, -0.983812, 0.000000, -0.000000, -0.179205 +1058, -0.983244, 0.000000, -0.000000, -0.182296 +1059, -0.982666, 0.000000, -0.000000, -0.185385 +1060, -0.982079, 0.000000, -0.000000, -0.188472 +1061, -0.981481, 0.000000, -0.000000, -0.191557 +1062, -0.980875, 0.000000, -0.000000, -0.194641 +1063, -0.980258, 0.000000, -0.000000, -0.197722 +1064, -0.979632, 0.000000, -0.000000, -0.200802 +1065, -0.978996, 0.000000, -0.000000, -0.203880 +1066, -0.978350, 0.000000, -0.000000, -0.206955 +1067, -0.977695, 0.000000, -0.000000, -0.210029 +1068, -0.977030, 0.000000, -0.000000, -0.213100 +1069, -0.976356, 0.000000, -0.000000, -0.216170 +1070, -0.975672, 0.000000, -0.000000, -0.219237 +1071, -0.974978, 0.000000, -0.000000, -0.222302 +1072, -0.974274, 0.000000, -0.000000, -0.225365 +1073, -0.973561, 0.000000, -0.000000, -0.228426 +1074, -0.972839, 0.000000, -0.000000, -0.231484 +1075, -0.972106, 0.000000, -0.000000, -0.234540 +1076, -0.971365, 0.000000, -0.000000, -0.237594 +1077, -0.970613, 0.000000, -0.000000, -0.240646 +1078, -0.969852, 0.000000, -0.000000, -0.243695 +1079, -0.969081, 0.000000, -0.000000, -0.246741 +1080, -0.968301, 0.000000, -0.000000, -0.249786 +1081, -0.967511, 0.000000, -0.000000, -0.252827 +1082, -0.966712, 0.000000, -0.000000, -0.255867 +1083, -0.965903, 0.000000, -0.000000, -0.258903 +1084, -0.965085, 0.000000, -0.000000, -0.261938 +1085, -0.964257, 0.000000, -0.000000, -0.264969 +1086, -0.963419, 0.000000, -0.000000, -0.267998 +1087, -0.962572, 0.000000, -0.000000, -0.271025 +1088, -0.961716, 0.000000, -0.000000, -0.274048 +1089, -0.960850, 0.000000, -0.000000, -0.277069 +1090, -0.959975, 0.000000, -0.000000, -0.280087 +1091, -0.959090, 0.000000, -0.000000, -0.283103 +1092, -0.958195, 0.000000, -0.000000, -0.286116 +1093, -0.957291, 0.000000, -0.000000, -0.289125 +1094, -0.956378, 0.000000, -0.000000, -0.292132 +1095, -0.955455, 0.000000, -0.000000, -0.295136 +1096, -0.954523, 0.000000, -0.000000, -0.298138 +1097, -0.953581, 0.000000, -0.000000, -0.301136 +1098, -0.952630, 0.000000, -0.000000, -0.304131 +1099, -0.951670, 0.000000, -0.000000, -0.307123 +1100, -0.950700, 0.000000, -0.000000, -0.310113 +1101, -0.949721, 0.000000, -0.000000, -0.313099 +1102, -0.948732, 0.000000, -0.000000, -0.316082 +1103, -0.947734, 0.000000, -0.000000, -0.319062 +1104, -0.946727, 0.000000, -0.000000, -0.322039 +1105, -0.945710, 0.000000, -0.000000, -0.325012 +1106, -0.944684, 0.000000, -0.000000, -0.327983 +1107, -0.943648, 0.000000, -0.000000, -0.330950 +1108, -0.942604, 0.000000, -0.000000, -0.333914 +1109, -0.941550, 0.000000, -0.000000, -0.336874 +1110, -0.940486, 0.000000, -0.000000, -0.339832 +1111, -0.939414, 0.000000, -0.000000, -0.342786 +1112, -0.938332, 0.000000, -0.000000, -0.345736 +1113, -0.937241, 0.000000, -0.000000, -0.348683 +1114, -0.936140, 0.000000, -0.000000, -0.351627 +1115, -0.935031, 0.000000, -0.000000, -0.354567 +1116, -0.933912, 0.000000, -0.000000, -0.357504 +1117, -0.932784, 0.000000, -0.000000, -0.360437 +1118, -0.931646, 0.000000, -0.000000, -0.363367 +1119, -0.930500, 0.000000, -0.000000, -0.366293 +1120, -0.929344, 0.000000, -0.000000, -0.369215 +1121, -0.928179, 0.000000, -0.000000, -0.372134 +1122, -0.927005, 0.000000, -0.000000, -0.375049 +1123, -0.925822, 0.000000, -0.000000, -0.377960 +1124, -0.924629, 0.000000, -0.000000, -0.380868 +1125, -0.923428, 0.000000, -0.000000, -0.383772 +1126, -0.922217, 0.000000, -0.000000, -0.386672 +1127, -0.920998, 0.000000, -0.000000, -0.389568 +1128, -0.919769, 0.000000, -0.000000, -0.392461 +1129, -0.918531, 0.000000, -0.000000, -0.395349 +1130, -0.917284, 0.000000, -0.000000, -0.398234 +1131, -0.916028, 0.000000, -0.000000, -0.401115 +1132, -0.914763, 0.000000, -0.000000, -0.403991 +1133, -0.913489, 0.000000, -0.000000, -0.406864 +1134, -0.912206, 0.000000, -0.000000, -0.409733 +1135, -0.910913, 0.000000, -0.000000, -0.412598 +1136, -0.909612, 0.000000, -0.000000, -0.415458 +1137, -0.908302, 0.000000, -0.000000, -0.418315 +1138, -0.906983, 0.000000, -0.000000, -0.421167 +1139, -0.905655, 0.000000, -0.000000, -0.424015 +1140, -0.904318, 0.000000, -0.000000, -0.426860 +1141, -0.902972, 0.000000, -0.000000, -0.429699 +1142, -0.901617, 0.000000, -0.000000, -0.432535 +1143, -0.900253, 0.000000, -0.000000, -0.435366 +1144, -0.898881, 0.000000, -0.000000, -0.438193 +1145, -0.897499, 0.000000, -0.000000, -0.441016 +1146, -0.896109, 0.000000, -0.000000, -0.443834 +1147, -0.894710, 0.000000, -0.000000, -0.446648 +1148, -0.893302, 0.000000, -0.000000, -0.449458 +1149, -0.891885, 0.000000, -0.000000, -0.452263 +1150, -0.890459, 0.000000, -0.000000, -0.455064 +1151, -0.889024, 0.000000, -0.000000, -0.457860 +1152, -0.887581, 0.000000, -0.000000, -0.460651 +1153, -0.886129, 0.000000, -0.000000, -0.463438 +1154, -0.884668, 0.000000, -0.000000, -0.466221 +1155, -0.883199, 0.000000, -0.000000, -0.468999 +1156, -0.881721, 0.000000, -0.000000, -0.471772 +1157, -0.880234, 0.000000, -0.000000, -0.474541 +1158, -0.878738, 0.000000, -0.000000, -0.477305 +1159, -0.877234, 0.000000, -0.000000, -0.480064 +1160, -0.875721, 0.000000, -0.000000, -0.482818 +1161, -0.874199, 0.000000, -0.000000, -0.485568 +1162, -0.872669, 0.000000, -0.000000, -0.488313 +1163, -0.871130, 0.000000, -0.000000, -0.491053 +1164, -0.869582, 0.000000, -0.000000, -0.493788 +1165, -0.868026, 0.000000, -0.000000, -0.496518 +1166, -0.866462, 0.000000, -0.000000, -0.499244 +1167, -0.864888, 0.000000, -0.000000, -0.501964 +1168, -0.863307, 0.000000, -0.000000, -0.504680 +1169, -0.861716, 0.000000, -0.000000, -0.507390 +1170, -0.860117, 0.000000, -0.000000, -0.510096 +1171, -0.858510, 0.000000, -0.000000, -0.512797 +1172, -0.856894, 0.000000, -0.000000, -0.515492 +1173, -0.855270, 0.000000, -0.000000, -0.518182 +1174, -0.853638, 0.000000, -0.000000, -0.520868 +1175, -0.851996, 0.000000, -0.000000, -0.523548 +1176, -0.850347, 0.000000, -0.000000, -0.526223 +1177, -0.848689, 0.000000, -0.000000, -0.528892 +1178, -0.847023, 0.000000, -0.000000, -0.531557 +1179, -0.845348, 0.000000, -0.000000, -0.534216 +1180, -0.843665, 0.000000, -0.000000, -0.536870 +1181, -0.841974, 0.000000, -0.000000, -0.539519 +1182, -0.840274, 0.000000, -0.000000, -0.542162 +1183, -0.838566, 0.000000, -0.000000, -0.544800 +1184, -0.836850, 0.000000, -0.000000, -0.547433 +1185, -0.835125, 0.000000, -0.000000, -0.550060 +1186, -0.833392, 0.000000, -0.000000, -0.552682 +1187, -0.831651, 0.000000, -0.000000, -0.555298 +1188, -0.829902, 0.000000, -0.000000, -0.557909 +1189, -0.828145, 0.000000, -0.000000, -0.560514 +1190, -0.826379, 0.000000, -0.000000, -0.563114 +1191, -0.824606, 0.000000, -0.000000, -0.565708 +1192, -0.822824, 0.000000, -0.000000, -0.568297 +1193, -0.821034, 0.000000, -0.000000, -0.570880 +1194, -0.819235, 0.000000, -0.000000, -0.573457 +1195, -0.817429, 0.000000, -0.000000, -0.576029 +1196, -0.815615, 0.000000, -0.000000, -0.578595 +1197, -0.813793, 0.000000, -0.000000, -0.581155 +1198, -0.811962, 0.000000, -0.000000, -0.583710 +1199, -0.810124, 0.000000, -0.000000, -0.586259 +1200, -0.808277, 0.000000, -0.000000, -0.588802 +1201, -0.806423, 0.000000, -0.000000, -0.591339 +1202, -0.804561, 0.000000, -0.000000, -0.593870 +1203, -0.802690, 0.000000, -0.000000, -0.596396 +1204, -0.800812, 0.000000, -0.000000, -0.598915 +1205, -0.798926, 0.000000, -0.000000, -0.601429 +1206, -0.797032, 0.000000, -0.000000, -0.603937 +1207, -0.795130, 0.000000, -0.000000, -0.606439 +1208, -0.793220, 0.000000, -0.000000, -0.608935 +1209, -0.791303, 0.000000, -0.000000, -0.611424 +1210, -0.789377, 0.000000, -0.000000, -0.613908 +1211, -0.787444, 0.000000, -0.000000, -0.616386 +1212, -0.785503, 0.000000, -0.000000, -0.618857 +1213, -0.783555, 0.000000, -0.000000, -0.621323 +1214, -0.781598, 0.000000, -0.000000, -0.623782 +1215, -0.779634, 0.000000, -0.000000, -0.626235 +1216, -0.777662, 0.000000, -0.000000, -0.628682 +1217, -0.775683, 0.000000, -0.000000, -0.631123 +1218, -0.773695, 0.000000, -0.000000, -0.633558 +1219, -0.771700, 0.000000, -0.000000, -0.635986 +1220, -0.769698, 0.000000, -0.000000, -0.638408 +1221, -0.767688, 0.000000, -0.000000, -0.640824 +1222, -0.765670, 0.000000, -0.000000, -0.643233 +1223, -0.763645, 0.000000, -0.000000, -0.645636 +1224, -0.761612, 0.000000, -0.000000, -0.648033 +1225, -0.759572, 0.000000, -0.000000, -0.650423 +1226, -0.757524, 0.000000, -0.000000, -0.652807 +1227, -0.755469, 0.000000, -0.000000, -0.655185 +1228, -0.753406, 0.000000, -0.000000, -0.657555 +1229, -0.751336, 0.000000, -0.000000, -0.659920 +1230, -0.749258, 0.000000, -0.000000, -0.662278 +1231, -0.747173, 0.000000, -0.000000, -0.664629 +1232, -0.745081, 0.000000, -0.000000, -0.666974 +1233, -0.742981, 0.000000, -0.000000, -0.669312 +1234, -0.740874, 0.000000, -0.000000, -0.671644 +1235, -0.738760, 0.000000, -0.000000, -0.673969 +1236, -0.736638, 0.000000, -0.000000, -0.676287 +1237, -0.734509, 0.000000, -0.000000, -0.678599 +1238, -0.732373, 0.000000, -0.000000, -0.680904 +1239, -0.730229, 0.000000, -0.000000, -0.683202 +1240, -0.728079, 0.000000, -0.000000, -0.685493 +1241, -0.725921, 0.000000, -0.000000, -0.687778 +1242, -0.723756, 0.000000, -0.000000, -0.690056 +1243, -0.721584, 0.000000, -0.000000, -0.692327 +1244, -0.719404, 0.000000, -0.000000, -0.694591 +1245, -0.717218, 0.000000, -0.000000, -0.696849 +1246, -0.715025, 0.000000, -0.000000, -0.699099 +1247, -0.712824, 0.000000, -0.000000, -0.701343 +1248, -0.710616, 0.000000, -0.000000, -0.703580 +1249, -0.708402, 0.000000, -0.000000, -0.705809 +1250, -0.706180, 0.000000, -0.000000, -0.708032 +1251, -0.703952, 0.000000, -0.000000, -0.710248 +1252, -0.701716, 0.000000, -0.000000, -0.712457 +1253, -0.699474, 0.000000, -0.000000, -0.714658 +1254, -0.697224, 0.000000, -0.000000, -0.716853 +1255, -0.694968, 0.000000, -0.000000, -0.719041 +1256, -0.692705, 0.000000, -0.000000, -0.721221 +1257, -0.690435, 0.000000, -0.000000, -0.723394 +1258, -0.688158, 0.000000, -0.000000, -0.725561 +1259, -0.685875, 0.000000, -0.000000, -0.727720 +1260, -0.683584, 0.000000, -0.000000, -0.729872 +1261, -0.681287, 0.000000, -0.000000, -0.732016 +1262, -0.678983, 0.000000, -0.000000, -0.734154 +1263, -0.676673, 0.000000, -0.000000, -0.736284 +1264, -0.674356, 0.000000, -0.000000, -0.738407 +1265, -0.672032, 0.000000, -0.000000, -0.740522 +1266, -0.669701, 0.000000, -0.000000, -0.742631 +1267, -0.667364, 0.000000, -0.000000, -0.744732 +1268, -0.665020, 0.000000, -0.000000, -0.746825 +1269, -0.662670, 0.000000, -0.000000, -0.748911 +1270, -0.660313, 0.000000, -0.000000, -0.750990 +1271, -0.657950, 0.000000, -0.000000, -0.753062 +1272, -0.655580, 0.000000, -0.000000, -0.755126 +1273, -0.653204, 0.000000, -0.000000, -0.757182 +1274, -0.650821, 0.000000, -0.000000, -0.759231 +1275, -0.648432, 0.000000, -0.000000, -0.761273 +1276, -0.646036, 0.000000, -0.000000, -0.763307 +1277, -0.643634, 0.000000, -0.000000, -0.765333 +1278, -0.641226, 0.000000, -0.000000, -0.767352 +1279, -0.638811, 0.000000, -0.000000, -0.769363 +1280, -0.636390, 0.000000, -0.000000, -0.771367 +1281, -0.633963, 0.000000, -0.000000, -0.773363 +1282, -0.631529, 0.000000, -0.000000, -0.775352 +1283, -0.629090, 0.000000, -0.000000, -0.777333 +1284, -0.626644, 0.000000, -0.000000, -0.779306 +1285, -0.624192, 0.000000, -0.000000, -0.781271 +1286, -0.621733, 0.000000, -0.000000, -0.783229 +1287, -0.619269, 0.000000, -0.000000, -0.785179 +1288, -0.616798, 0.000000, -0.000000, -0.787121 +1289, -0.614321, 0.000000, -0.000000, -0.789056 +1290, -0.611839, 0.000000, -0.000000, -0.790983 +1291, -0.609350, 0.000000, -0.000000, -0.792901 +1292, -0.606855, 0.000000, -0.000000, -0.794812 +1293, -0.604354, 0.000000, -0.000000, -0.796716 +1294, -0.601848, 0.000000, -0.000000, -0.798611 +1295, -0.599335, 0.000000, -0.000000, -0.800498 +1296, -0.596816, 0.000000, -0.000000, -0.802378 +1297, -0.594292, 0.000000, -0.000000, -0.804250 +1298, -0.591761, 0.000000, -0.000000, -0.806113 +1299, -0.589225, 0.000000, -0.000000, -0.807969 +1300, -0.586683, 0.000000, -0.000000, -0.809817 +1301, -0.584135, 0.000000, -0.000000, -0.811656 +1302, -0.581581, 0.000000, -0.000000, -0.813488 +1303, -0.579022, 0.000000, -0.000000, -0.815312 +1304, -0.576457, 0.000000, -0.000000, -0.817127 +1305, -0.573886, 0.000000, -0.000000, -0.818935 +1306, -0.571310, 0.000000, -0.000000, -0.820734 +1307, -0.568728, 0.000000, -0.000000, -0.822526 +1308, -0.566140, 0.000000, -0.000000, -0.824309 +1309, -0.563547, 0.000000, -0.000000, -0.826084 +1310, -0.560948, 0.000000, -0.000000, -0.827851 +1311, -0.558343, 0.000000, -0.000000, -0.829610 +1312, -0.555734, 0.000000, -0.000000, -0.831360 +1313, -0.553118, 0.000000, -0.000000, -0.833103 +1314, -0.550497, 0.000000, -0.000000, -0.834837 +1315, -0.547871, 0.000000, -0.000000, -0.836563 +1316, -0.545239, 0.000000, -0.000000, -0.838280 +1317, -0.542602, 0.000000, -0.000000, -0.839990 +1318, -0.539960, 0.000000, -0.000000, -0.841691 +1319, -0.537312, 0.000000, -0.000000, -0.843384 +1320, -0.534659, 0.000000, -0.000000, -0.845068 +1321, -0.532000, 0.000000, -0.000000, -0.846744 +1322, -0.529337, 0.000000, -0.000000, -0.848412 +1323, -0.526668, 0.000000, -0.000000, -0.850071 +1324, -0.523994, 0.000000, -0.000000, -0.851722 +1325, -0.521315, 0.000000, -0.000000, -0.853365 +1326, -0.518630, 0.000000, -0.000000, -0.854999 +1327, -0.515941, 0.000000, -0.000000, -0.856624 +1328, -0.513246, 0.000000, -0.000000, -0.858241 +1329, -0.510546, 0.000000, -0.000000, -0.859850 +1330, -0.507842, 0.000000, -0.000000, -0.861450 +1331, -0.505132, 0.000000, -0.000000, -0.863042 +1332, -0.502417, 0.000000, -0.000000, -0.864625 +1333, -0.499698, 0.000000, -0.000000, -0.866200 +1334, -0.496973, 0.000000, -0.000000, -0.867766 +1335, -0.494243, 0.000000, -0.000000, -0.869324 +1336, -0.491509, 0.000000, -0.000000, -0.870872 +1337, -0.488770, 0.000000, -0.000000, -0.872413 +1338, -0.486026, 0.000000, -0.000000, -0.873945 +1339, -0.483277, 0.000000, -0.000000, -0.875468 +1340, -0.480523, 0.000000, -0.000000, -0.876982 +1341, -0.477765, 0.000000, -0.000000, -0.878488 +1342, -0.475002, 0.000000, -0.000000, -0.879985 +1343, -0.472234, 0.000000, -0.000000, -0.881473 +1344, -0.469461, 0.000000, -0.000000, -0.882953 +1345, -0.466684, 0.000000, -0.000000, -0.884424 +1346, -0.463902, 0.000000, -0.000000, -0.885886 +1347, -0.461116, 0.000000, -0.000000, -0.887340 +1348, -0.458325, 0.000000, -0.000000, -0.888785 +1349, -0.455530, 0.000000, -0.000000, -0.890220 +1350, -0.452730, 0.000000, -0.000000, -0.891648 +1351, -0.449926, 0.000000, -0.000000, -0.893066 +1352, -0.447117, 0.000000, -0.000000, -0.894476 +1353, -0.444304, 0.000000, -0.000000, -0.895876 +1354, -0.441486, 0.000000, -0.000000, -0.897268 +1355, -0.438664, 0.000000, -0.000000, -0.898651 +1356, -0.435838, 0.000000, -0.000000, -0.900025 +1357, -0.433007, 0.000000, -0.000000, -0.901390 +1358, -0.430172, 0.000000, -0.000000, -0.902747 +1359, -0.427333, 0.000000, -0.000000, -0.904094 +1360, -0.424490, 0.000000, -0.000000, -0.905433 +1361, -0.421642, 0.000000, -0.000000, -0.906762 +1362, -0.418791, 0.000000, -0.000000, -0.908083 +1363, -0.415935, 0.000000, -0.000000, -0.909394 +1364, -0.413075, 0.000000, -0.000000, -0.910697 +1365, -0.410211, 0.000000, -0.000000, -0.911991 +1366, -0.407343, 0.000000, -0.000000, -0.913275 +1367, -0.404471, 0.000000, -0.000000, -0.914551 +1368, -0.401594, 0.000000, -0.000000, -0.915818 +1369, -0.398714, 0.000000, -0.000000, -0.917075 +1370, -0.395830, 0.000000, -0.000000, -0.918324 +1371, -0.392942, 0.000000, -0.000000, -0.919563 +1372, -0.390051, 0.000000, -0.000000, -0.920793 +1373, -0.387155, 0.000000, -0.000000, -0.922015 +1374, -0.384256, 0.000000, -0.000000, -0.923227 +1375, -0.381352, 0.000000, -0.000000, -0.924430 +1376, -0.378445, 0.000000, -0.000000, -0.925624 +1377, -0.375535, 0.000000, -0.000000, -0.926808 +1378, -0.372620, 0.000000, -0.000000, -0.927984 +1379, -0.369702, 0.000000, -0.000000, -0.929150 +1380, -0.366780, 0.000000, -0.000000, -0.930308 +1381, -0.363855, 0.000000, -0.000000, -0.931456 +1382, -0.360926, 0.000000, -0.000000, -0.932595 +1383, -0.357993, 0.000000, -0.000000, -0.933724 +1384, -0.355057, 0.000000, -0.000000, -0.934845 +1385, -0.352117, 0.000000, -0.000000, -0.935956 +1386, -0.349174, 0.000000, -0.000000, -0.937058 +1387, -0.346228, 0.000000, -0.000000, -0.938151 +1388, -0.343278, 0.000000, -0.000000, -0.939234 +1389, -0.340324, 0.000000, -0.000000, -0.940308 +1390, -0.337368, 0.000000, -0.000000, -0.941373 +1391, -0.334407, 0.000000, -0.000000, -0.942429 +1392, -0.331444, 0.000000, -0.000000, -0.943475 +1393, -0.328478, 0.000000, -0.000000, -0.944512 +1394, -0.325508, 0.000000, -0.000000, -0.945539 +1395, -0.322535, 0.000000, -0.000000, -0.946558 +1396, -0.319558, 0.000000, -0.000000, -0.947567 +1397, -0.316579, 0.000000, -0.000000, -0.948566 +1398, -0.313596, 0.000000, -0.000000, -0.949556 +1399, -0.310611, 0.000000, -0.000000, -0.950537 +1400, -0.307622, 0.000000, -0.000000, -0.951509 +1401, -0.304630, 0.000000, -0.000000, -0.952471 +1402, -0.301635, 0.000000, -0.000000, -0.953423 +1403, -0.298638, 0.000000, -0.000000, -0.954367 +1404, -0.295637, 0.000000, -0.000000, -0.955300 +1405, -0.292633, 0.000000, -0.000000, -0.956225 +1406, -0.289627, 0.000000, -0.000000, -0.957140 +1407, -0.286617, 0.000000, -0.000000, -0.958045 +1408, -0.283605, 0.000000, -0.000000, -0.958941 +1409, -0.280590, 0.000000, -0.000000, -0.959828 +1410, -0.277572, 0.000000, -0.000000, -0.960705 +1411, -0.274552, 0.000000, -0.000000, -0.961572 +1412, -0.271529, 0.000000, -0.000000, -0.962430 +1413, -0.268503, 0.000000, -0.000000, -0.963279 +1414, -0.265474, 0.000000, -0.000000, -0.964118 +1415, -0.262443, 0.000000, -0.000000, -0.964947 +1416, -0.259409, 0.000000, -0.000000, -0.965767 +1417, -0.256373, 0.000000, -0.000000, -0.966578 +1418, -0.253334, 0.000000, -0.000000, -0.967379 +1419, -0.250293, 0.000000, -0.000000, -0.968170 +1420, -0.247249, 0.000000, -0.000000, -0.968952 +1421, -0.244203, 0.000000, -0.000000, -0.969724 +1422, -0.241154, 0.000000, -0.000000, -0.970487 +1423, -0.238103, 0.000000, -0.000000, -0.971240 +1424, -0.235049, 0.000000, -0.000000, -0.971983 +1425, -0.231994, 0.000000, -0.000000, -0.972717 +1426, -0.228936, 0.000000, -0.000000, -0.973442 +1427, -0.225875, 0.000000, -0.000000, -0.974156 +1428, -0.222813, 0.000000, -0.000000, -0.974861 +1429, -0.219748, 0.000000, -0.000000, -0.975557 +1430, -0.216681, 0.000000, -0.000000, -0.976242 +1431, -0.213612, 0.000000, -0.000000, -0.976919 +1432, -0.210541, 0.000000, -0.000000, -0.977585 +1433, -0.207468, 0.000000, -0.000000, -0.978242 +1434, -0.204392, 0.000000, -0.000000, -0.978889 +1435, -0.201315, 0.000000, -0.000000, -0.979527 +1436, -0.198236, 0.000000, -0.000000, -0.980154 +1437, -0.195155, 0.000000, -0.000000, -0.980773 +1438, -0.192071, 0.000000, -0.000000, -0.981381 +1439, -0.188986, 0.000000, -0.000000, -0.981980 +1440, -0.185899, 0.000000, -0.000000, -0.982569 +1441, -0.182811, 0.000000, -0.000000, -0.983148 +1442, -0.179720, 0.000000, -0.000000, -0.983718 +1443, -0.176628, 0.000000, -0.000000, -0.984278 +1444, -0.173534, 0.000000, -0.000000, -0.984828 +1445, -0.170438, 0.000000, -0.000000, -0.985368 +1446, -0.167340, 0.000000, -0.000000, -0.985899 +1447, -0.164241, 0.000000, -0.000000, -0.986420 +1448, -0.161140, 0.000000, -0.000000, -0.986932 +1449, -0.158038, 0.000000, -0.000000, -0.987433 +1450, -0.154934, 0.000000, -0.000000, -0.987925 +1451, -0.151829, 0.000000, -0.000000, -0.988407 +1452, -0.148722, 0.000000, -0.000000, -0.988879 +1453, -0.145613, 0.000000, -0.000000, -0.989342 +1454, -0.142503, 0.000000, -0.000000, -0.989794 +1455, -0.139392, 0.000000, -0.000000, -0.990237 +1456, -0.136279, 0.000000, -0.000000, -0.990670 +1457, -0.133165, 0.000000, -0.000000, -0.991094 +1458, -0.130050, 0.000000, -0.000000, -0.991507 +1459, -0.126934, 0.000000, -0.000000, -0.991911 +1460, -0.123816, 0.000000, -0.000000, -0.992305 +1461, -0.120697, 0.000000, -0.000000, -0.992689 +1462, -0.117576, 0.000000, -0.000000, -0.993064 +1463, -0.114455, 0.000000, -0.000000, -0.993428 +1464, -0.111332, 0.000000, -0.000000, -0.993783 +1465, -0.108209, 0.000000, -0.000000, -0.994128 +1466, -0.105084, 0.000000, -0.000000, -0.994463 +1467, -0.101958, 0.000000, -0.000000, -0.994789 +1468, -0.098832, 0.000000, -0.000000, -0.995104 +1469, -0.095704, 0.000000, -0.000000, -0.995410 +1470, -0.092575, 0.000000, -0.000000, -0.995706 +1471, -0.089446, 0.000000, -0.000000, -0.995992 +1472, -0.086315, 0.000000, -0.000000, -0.996268 +1473, -0.083184, 0.000000, -0.000000, -0.996534 +1474, -0.080052, 0.000000, -0.000000, -0.996791 +1475, -0.076919, 0.000000, -0.000000, -0.997037 +1476, -0.073785, 0.000000, -0.000000, -0.997274 +1477, -0.070650, 0.000000, -0.000000, -0.997501 +1478, -0.067515, 0.000000, -0.000000, -0.997718 +1479, -0.064380, 0.000000, -0.000000, -0.997925 +1480, -0.061243, 0.000000, -0.000000, -0.998123 +1481, -0.058106, 0.000000, -0.000000, -0.998310 +1482, -0.054968, 0.000000, -0.000000, -0.998488 +1483, -0.051830, 0.000000, -0.000000, -0.998656 +1484, -0.048692, 0.000000, -0.000000, -0.998814 +1485, -0.045553, 0.000000, -0.000000, -0.998962 +1486, -0.042413, 0.000000, -0.000000, -0.999100 +1487, -0.039273, 0.000000, -0.000000, -0.999229 +1488, -0.036132, 0.000000, -0.000000, -0.999347 +1489, -0.032992, 0.000000, -0.000000, -0.999456 +1490, -0.029851, 0.000000, -0.000000, -0.999554 +1491, -0.026709, 0.000000, -0.000000, -0.999643 +1492, -0.023568, 0.000000, -0.000000, -0.999722 +1493, -0.020426, 0.000000, -0.000000, -0.999791 +1494, -0.017284, 0.000000, -0.000000, -0.999851 +1495, -0.014141, 0.000000, -0.000000, -0.999900 +1496, -0.010999, 0.000000, -0.000000, -0.999940 +1497, -0.007857, 0.000000, -0.000000, -0.999969 +1498, -0.004714, 0.000000, -0.000000, -0.999989 +1499, -0.001571, 0.000000, -0.000000, -0.999999 +1500, 0.001571, 0.000000, 0.000000, -0.999999 +1501, 0.004714, 0.000000, 0.000000, -0.999989 +1502, 0.007857, 0.000000, 0.000000, -0.999969 +1503, 0.010999, 0.000000, 0.000000, -0.999940 +1504, 0.014141, 0.000000, 0.000000, -0.999900 +1505, 0.017284, 0.000000, 0.000000, -0.999851 +1506, 0.020426, 0.000000, 0.000000, -0.999791 +1507, 0.023568, 0.000000, 0.000000, -0.999722 +1508, 0.026709, 0.000000, 0.000000, -0.999643 +1509, 0.029851, 0.000000, 0.000000, -0.999554 +1510, 0.032992, 0.000000, 0.000000, -0.999456 +1511, 0.036132, 0.000000, 0.000000, -0.999347 +1512, 0.039273, 0.000000, 0.000000, -0.999229 +1513, 0.042413, 0.000000, 0.000000, -0.999100 +1514, 0.045553, 0.000000, 0.000000, -0.998962 +1515, 0.048692, 0.000000, 0.000000, -0.998814 +1516, 0.051830, 0.000000, 0.000000, -0.998656 +1517, 0.054968, 0.000000, 0.000000, -0.998488 +1518, 0.058106, 0.000000, 0.000000, -0.998310 +1519, 0.061243, 0.000000, 0.000000, -0.998123 +1520, 0.064380, 0.000000, 0.000000, -0.997925 +1521, 0.067515, 0.000000, 0.000000, -0.997718 +1522, 0.070650, 0.000000, 0.000000, -0.997501 +1523, 0.073785, 0.000000, 0.000000, -0.997274 +1524, 0.076919, 0.000000, 0.000000, -0.997037 +1525, 0.080052, 0.000000, 0.000000, -0.996791 +1526, 0.083184, 0.000000, 0.000000, -0.996534 +1527, 0.086315, 0.000000, 0.000000, -0.996268 +1528, 0.089446, 0.000000, 0.000000, -0.995992 +1529, 0.092575, 0.000000, 0.000000, -0.995706 +1530, 0.095704, 0.000000, 0.000000, -0.995410 +1531, 0.098832, 0.000000, 0.000000, -0.995104 +1532, 0.101958, 0.000000, 0.000000, -0.994789 +1533, 0.105084, 0.000000, 0.000000, -0.994463 +1534, 0.108209, 0.000000, 0.000000, -0.994128 +1535, 0.111332, 0.000000, 0.000000, -0.993783 +1536, 0.114455, 0.000000, 0.000000, -0.993428 +1537, 0.117576, 0.000000, 0.000000, -0.993064 +1538, 0.120697, 0.000000, 0.000000, -0.992689 +1539, 0.123816, 0.000000, 0.000000, -0.992305 +1540, 0.126934, 0.000000, 0.000000, -0.991911 +1541, 0.130050, 0.000000, 0.000000, -0.991507 +1542, 0.133165, 0.000000, 0.000000, -0.991094 +1543, 0.136279, 0.000000, 0.000000, -0.990670 +1544, 0.139392, 0.000000, 0.000000, -0.990237 +1545, 0.142503, 0.000000, 0.000000, -0.989794 +1546, 0.145613, 0.000000, 0.000000, -0.989342 +1547, 0.148722, 0.000000, 0.000000, -0.988879 +1548, 0.151829, 0.000000, 0.000000, -0.988407 +1549, 0.154934, 0.000000, 0.000000, -0.987925 +1550, 0.158038, 0.000000, 0.000000, -0.987433 +1551, 0.161140, 0.000000, 0.000000, -0.986932 +1552, 0.164241, 0.000000, 0.000000, -0.986420 +1553, 0.167340, 0.000000, 0.000000, -0.985899 +1554, 0.170438, 0.000000, 0.000000, -0.985368 +1555, 0.173534, 0.000000, 0.000000, -0.984828 +1556, 0.176628, 0.000000, 0.000000, -0.984278 +1557, 0.179720, 0.000000, 0.000000, -0.983718 +1558, 0.182811, 0.000000, 0.000000, -0.983148 +1559, 0.185899, 0.000000, 0.000000, -0.982569 +1560, 0.188986, 0.000000, 0.000000, -0.981980 +1561, 0.192071, 0.000000, 0.000000, -0.981381 +1562, 0.195155, 0.000000, 0.000000, -0.980773 +1563, 0.198236, 0.000000, 0.000000, -0.980154 +1564, 0.201315, 0.000000, 0.000000, -0.979527 +1565, 0.204392, 0.000000, 0.000000, -0.978889 +1566, 0.207468, 0.000000, 0.000000, -0.978242 +1567, 0.210541, 0.000000, 0.000000, -0.977585 +1568, 0.213612, 0.000000, 0.000000, -0.976919 +1569, 0.216681, 0.000000, 0.000000, -0.976242 +1570, 0.219748, 0.000000, 0.000000, -0.975557 +1571, 0.222813, 0.000000, 0.000000, -0.974861 +1572, 0.225875, 0.000000, 0.000000, -0.974156 +1573, 0.228936, 0.000000, 0.000000, -0.973442 +1574, 0.231994, 0.000000, 0.000000, -0.972717 +1575, 0.235049, 0.000000, 0.000000, -0.971983 +1576, 0.238103, 0.000000, 0.000000, -0.971240 +1577, 0.241154, 0.000000, 0.000000, -0.970487 +1578, 0.244203, 0.000000, 0.000000, -0.969724 +1579, 0.247249, 0.000000, 0.000000, -0.968952 +1580, 0.250293, 0.000000, 0.000000, -0.968170 +1581, 0.253334, 0.000000, 0.000000, -0.967379 +1582, 0.256373, 0.000000, 0.000000, -0.966578 +1583, 0.259409, 0.000000, 0.000000, -0.965767 +1584, 0.262443, 0.000000, 0.000000, -0.964947 +1585, 0.265474, 0.000000, 0.000000, -0.964118 +1586, 0.268503, 0.000000, 0.000000, -0.963279 +1587, 0.271529, 0.000000, 0.000000, -0.962430 +1588, 0.274552, 0.000000, 0.000000, -0.961572 +1589, 0.277572, 0.000000, 0.000000, -0.960705 +1590, 0.280590, 0.000000, 0.000000, -0.959828 +1591, 0.283605, 0.000000, 0.000000, -0.958941 +1592, 0.286617, 0.000000, 0.000000, -0.958045 +1593, 0.289627, 0.000000, 0.000000, -0.957140 +1594, 0.292633, 0.000000, 0.000000, -0.956225 +1595, 0.295637, 0.000000, 0.000000, -0.955300 +1596, 0.298638, 0.000000, 0.000000, -0.954367 +1597, 0.301635, 0.000000, 0.000000, -0.953423 +1598, 0.304630, 0.000000, 0.000000, -0.952471 +1599, 0.307622, 0.000000, 0.000000, -0.951509 +1600, 0.310611, 0.000000, 0.000000, -0.950537 +1601, 0.313596, 0.000000, 0.000000, -0.949556 +1602, 0.316579, 0.000000, 0.000000, -0.948566 +1603, 0.319558, 0.000000, 0.000000, -0.947567 +1604, 0.322535, 0.000000, 0.000000, -0.946558 +1605, 0.325508, 0.000000, 0.000000, -0.945539 +1606, 0.328478, 0.000000, 0.000000, -0.944512 +1607, 0.331444, 0.000000, 0.000000, -0.943475 +1608, 0.334407, 0.000000, 0.000000, -0.942429 +1609, 0.337368, 0.000000, 0.000000, -0.941373 +1610, 0.340324, 0.000000, 0.000000, -0.940308 +1611, 0.343278, 0.000000, 0.000000, -0.939234 +1612, 0.346228, 0.000000, 0.000000, -0.938151 +1613, 0.349174, 0.000000, 0.000000, -0.937058 +1614, 0.352117, 0.000000, 0.000000, -0.935956 +1615, 0.355057, 0.000000, 0.000000, -0.934845 +1616, 0.357993, 0.000000, 0.000000, -0.933724 +1617, 0.360926, 0.000000, 0.000000, -0.932595 +1618, 0.363855, 0.000000, 0.000000, -0.931456 +1619, 0.366780, 0.000000, 0.000000, -0.930308 +1620, 0.369702, 0.000000, 0.000000, -0.929150 +1621, 0.372620, 0.000000, 0.000000, -0.927984 +1622, 0.375535, 0.000000, 0.000000, -0.926808 +1623, 0.378445, 0.000000, 0.000000, -0.925624 +1624, 0.381352, 0.000000, 0.000000, -0.924430 +1625, 0.384256, 0.000000, 0.000000, -0.923227 +1626, 0.387155, 0.000000, 0.000000, -0.922015 +1627, 0.390051, 0.000000, 0.000000, -0.920793 +1628, 0.392942, 0.000000, 0.000000, -0.919563 +1629, 0.395830, 0.000000, 0.000000, -0.918324 +1630, 0.398714, 0.000000, 0.000000, -0.917075 +1631, 0.401594, 0.000000, 0.000000, -0.915818 +1632, 0.404471, 0.000000, 0.000000, -0.914551 +1633, 0.407343, 0.000000, 0.000000, -0.913275 +1634, 0.410211, 0.000000, 0.000000, -0.911991 +1635, 0.413075, 0.000000, 0.000000, -0.910697 +1636, 0.415935, 0.000000, 0.000000, -0.909394 +1637, 0.418791, 0.000000, 0.000000, -0.908083 +1638, 0.421642, 0.000000, 0.000000, -0.906762 +1639, 0.424490, 0.000000, 0.000000, -0.905433 +1640, 0.427333, 0.000000, 0.000000, -0.904094 +1641, 0.430172, 0.000000, 0.000000, -0.902747 +1642, 0.433007, 0.000000, 0.000000, -0.901390 +1643, 0.435838, 0.000000, 0.000000, -0.900025 +1644, 0.438664, 0.000000, 0.000000, -0.898651 +1645, 0.441486, 0.000000, 0.000000, -0.897268 +1646, 0.444304, 0.000000, 0.000000, -0.895876 +1647, 0.447117, 0.000000, 0.000000, -0.894476 +1648, 0.449926, 0.000000, 0.000000, -0.893066 +1649, 0.452730, 0.000000, 0.000000, -0.891648 +1650, 0.455530, 0.000000, 0.000000, -0.890220 +1651, 0.458325, 0.000000, 0.000000, -0.888785 +1652, 0.461116, 0.000000, 0.000000, -0.887340 +1653, 0.463902, 0.000000, 0.000000, -0.885886 +1654, 0.466684, 0.000000, 0.000000, -0.884424 +1655, 0.469461, 0.000000, 0.000000, -0.882953 +1656, 0.472234, 0.000000, 0.000000, -0.881473 +1657, 0.475002, 0.000000, 0.000000, -0.879985 +1658, 0.477765, 0.000000, 0.000000, -0.878488 +1659, 0.480523, 0.000000, 0.000000, -0.876982 +1660, 0.483277, 0.000000, 0.000000, -0.875468 +1661, 0.486026, 0.000000, 0.000000, -0.873945 +1662, 0.488770, 0.000000, 0.000000, -0.872413 +1663, 0.491509, 0.000000, 0.000000, -0.870872 +1664, 0.494243, 0.000000, 0.000000, -0.869324 +1665, 0.496973, 0.000000, 0.000000, -0.867766 +1666, 0.499698, 0.000000, 0.000000, -0.866200 +1667, 0.502417, 0.000000, 0.000000, -0.864625 +1668, 0.505132, 0.000000, 0.000000, -0.863042 +1669, 0.507842, 0.000000, 0.000000, -0.861450 +1670, 0.510546, 0.000000, 0.000000, -0.859850 +1671, 0.513246, 0.000000, 0.000000, -0.858241 +1672, 0.515941, 0.000000, 0.000000, -0.856624 +1673, 0.518630, 0.000000, 0.000000, -0.854999 +1674, 0.521315, 0.000000, 0.000000, -0.853365 +1675, 0.523994, 0.000000, 0.000000, -0.851722 +1676, 0.526668, 0.000000, 0.000000, -0.850071 +1677, 0.529337, 0.000000, 0.000000, -0.848412 +1678, 0.532000, 0.000000, 0.000000, -0.846744 +1679, 0.534659, 0.000000, 0.000000, -0.845068 +1680, 0.537312, 0.000000, 0.000000, -0.843384 +1681, 0.539960, 0.000000, 0.000000, -0.841691 +1682, 0.542602, 0.000000, 0.000000, -0.839990 +1683, 0.545239, 0.000000, 0.000000, -0.838280 +1684, 0.547871, 0.000000, 0.000000, -0.836563 +1685, 0.550497, 0.000000, 0.000000, -0.834837 +1686, 0.553118, 0.000000, 0.000000, -0.833103 +1687, 0.555734, 0.000000, 0.000000, -0.831360 +1688, 0.558343, 0.000000, 0.000000, -0.829610 +1689, 0.560948, 0.000000, 0.000000, -0.827851 +1690, 0.563547, 0.000000, 0.000000, -0.826084 +1691, 0.566140, 0.000000, 0.000000, -0.824309 +1692, 0.568728, 0.000000, 0.000000, -0.822526 +1693, 0.571310, 0.000000, 0.000000, -0.820734 +1694, 0.573886, 0.000000, 0.000000, -0.818935 +1695, 0.576457, 0.000000, 0.000000, -0.817127 +1696, 0.579022, 0.000000, 0.000000, -0.815312 +1697, 0.581581, 0.000000, 0.000000, -0.813488 +1698, 0.584135, 0.000000, 0.000000, -0.811656 +1699, 0.586683, 0.000000, 0.000000, -0.809817 +1700, 0.589225, 0.000000, 0.000000, -0.807969 +1701, 0.591761, 0.000000, 0.000000, -0.806113 +1702, 0.594292, 0.000000, 0.000000, -0.804250 +1703, 0.596816, 0.000000, 0.000000, -0.802378 +1704, 0.599335, 0.000000, 0.000000, -0.800498 +1705, 0.601848, 0.000000, 0.000000, -0.798611 +1706, 0.604354, 0.000000, 0.000000, -0.796716 +1707, 0.606855, 0.000000, 0.000000, -0.794812 +1708, 0.609350, 0.000000, 0.000000, -0.792901 +1709, 0.611839, 0.000000, 0.000000, -0.790983 +1710, 0.614321, 0.000000, 0.000000, -0.789056 +1711, 0.616798, 0.000000, 0.000000, -0.787121 +1712, 0.619269, 0.000000, 0.000000, -0.785179 +1713, 0.621733, 0.000000, 0.000000, -0.783229 +1714, 0.624192, 0.000000, 0.000000, -0.781271 +1715, 0.626644, 0.000000, 0.000000, -0.779306 +1716, 0.629090, 0.000000, 0.000000, -0.777333 +1717, 0.631529, 0.000000, 0.000000, -0.775352 +1718, 0.633963, 0.000000, 0.000000, -0.773363 +1719, 0.636390, 0.000000, 0.000000, -0.771367 +1720, 0.638811, 0.000000, 0.000000, -0.769363 +1721, 0.641226, 0.000000, 0.000000, -0.767352 +1722, 0.643634, 0.000000, 0.000000, -0.765333 +1723, 0.646036, 0.000000, 0.000000, -0.763307 +1724, 0.648432, 0.000000, 0.000000, -0.761273 +1725, 0.650821, 0.000000, 0.000000, -0.759231 +1726, 0.653204, 0.000000, 0.000000, -0.757182 +1727, 0.655580, 0.000000, 0.000000, -0.755126 +1728, 0.657950, 0.000000, 0.000000, -0.753062 +1729, 0.660313, 0.000000, 0.000000, -0.750990 +1730, 0.662670, 0.000000, 0.000000, -0.748911 +1731, 0.665020, 0.000000, 0.000000, -0.746825 +1732, 0.667364, 0.000000, 0.000000, -0.744732 +1733, 0.669701, 0.000000, 0.000000, -0.742631 +1734, 0.672032, 0.000000, 0.000000, -0.740522 +1735, 0.674356, 0.000000, 0.000000, -0.738407 +1736, 0.676673, 0.000000, 0.000000, -0.736284 +1737, 0.678983, 0.000000, 0.000000, -0.734154 +1738, 0.681287, 0.000000, 0.000000, -0.732016 +1739, 0.683584, 0.000000, 0.000000, -0.729872 +1740, 0.685875, 0.000000, 0.000000, -0.727720 +1741, 0.688158, 0.000000, 0.000000, -0.725561 +1742, 0.690435, 0.000000, 0.000000, -0.723394 +1743, 0.692705, 0.000000, 0.000000, -0.721221 +1744, 0.694968, 0.000000, 0.000000, -0.719041 +1745, 0.697224, 0.000000, 0.000000, -0.716853 +1746, 0.699474, 0.000000, 0.000000, -0.714658 +1747, 0.701716, 0.000000, 0.000000, -0.712457 +1748, 0.703952, 0.000000, 0.000000, -0.710248 +1749, 0.706180, 0.000000, 0.000000, -0.708032 +1750, 0.708402, 0.000000, 0.000000, -0.705809 +1751, 0.710616, 0.000000, 0.000000, -0.703580 +1752, 0.712824, 0.000000, 0.000000, -0.701343 +1753, 0.715025, 0.000000, 0.000000, -0.699099 +1754, 0.717218, 0.000000, 0.000000, -0.696849 +1755, 0.719404, 0.000000, 0.000000, -0.694591 +1756, 0.721584, 0.000000, 0.000000, -0.692327 +1757, 0.723756, 0.000000, 0.000000, -0.690056 +1758, 0.725921, 0.000000, 0.000000, -0.687778 +1759, 0.728079, 0.000000, 0.000000, -0.685493 +1760, 0.730229, 0.000000, 0.000000, -0.683202 +1761, 0.732373, 0.000000, 0.000000, -0.680904 +1762, 0.734509, 0.000000, 0.000000, -0.678599 +1763, 0.736638, 0.000000, 0.000000, -0.676287 +1764, 0.738760, 0.000000, 0.000000, -0.673969 +1765, 0.740874, 0.000000, 0.000000, -0.671644 +1766, 0.742981, 0.000000, 0.000000, -0.669312 +1767, 0.745081, 0.000000, 0.000000, -0.666974 +1768, 0.747173, 0.000000, 0.000000, -0.664629 +1769, 0.749258, 0.000000, 0.000000, -0.662278 +1770, 0.751336, 0.000000, 0.000000, -0.659920 +1771, 0.753406, 0.000000, 0.000000, -0.657555 +1772, 0.755469, 0.000000, 0.000000, -0.655185 +1773, 0.757524, 0.000000, 0.000000, -0.652807 +1774, 0.759572, 0.000000, 0.000000, -0.650423 +1775, 0.761612, 0.000000, 0.000000, -0.648033 +1776, 0.763645, 0.000000, 0.000000, -0.645636 +1777, 0.765670, 0.000000, 0.000000, -0.643233 +1778, 0.767688, 0.000000, 0.000000, -0.640824 +1779, 0.769698, 0.000000, 0.000000, -0.638408 +1780, 0.771700, 0.000000, 0.000000, -0.635986 +1781, 0.773695, 0.000000, 0.000000, -0.633558 +1782, 0.775683, 0.000000, 0.000000, -0.631123 +1783, 0.777662, 0.000000, 0.000000, -0.628682 +1784, 0.779634, 0.000000, 0.000000, -0.626235 +1785, 0.781598, 0.000000, 0.000000, -0.623782 +1786, 0.783555, 0.000000, 0.000000, -0.621323 +1787, 0.785503, 0.000000, 0.000000, -0.618857 +1788, 0.787444, 0.000000, 0.000000, -0.616386 +1789, 0.789377, 0.000000, 0.000000, -0.613908 +1790, 0.791303, 0.000000, 0.000000, -0.611424 +1791, 0.793220, 0.000000, 0.000000, -0.608935 +1792, 0.795130, 0.000000, 0.000000, -0.606439 +1793, 0.797032, 0.000000, 0.000000, -0.603937 +1794, 0.798926, 0.000000, 0.000000, -0.601429 +1795, 0.800812, 0.000000, 0.000000, -0.598915 +1796, 0.802690, 0.000000, 0.000000, -0.596396 +1797, 0.804561, 0.000000, 0.000000, -0.593870 +1798, 0.806423, 0.000000, 0.000000, -0.591339 +1799, 0.808277, 0.000000, 0.000000, -0.588802 +1800, 0.810124, 0.000000, 0.000000, -0.586259 +1801, 0.811962, 0.000000, 0.000000, -0.583710 +1802, 0.813793, 0.000000, 0.000000, -0.581155 +1803, 0.815615, 0.000000, 0.000000, -0.578595 +1804, 0.817429, 0.000000, 0.000000, -0.576029 +1805, 0.819235, 0.000000, 0.000000, -0.573457 +1806, 0.821034, 0.000000, 0.000000, -0.570880 +1807, 0.822824, 0.000000, 0.000000, -0.568297 +1808, 0.824606, 0.000000, 0.000000, -0.565708 +1809, 0.826379, 0.000000, 0.000000, -0.563114 +1810, 0.828145, 0.000000, 0.000000, -0.560514 +1811, 0.829902, 0.000000, 0.000000, -0.557909 +1812, 0.831651, 0.000000, 0.000000, -0.555298 +1813, 0.833392, 0.000000, 0.000000, -0.552682 +1814, 0.835125, 0.000000, 0.000000, -0.550060 +1815, 0.836850, 0.000000, 0.000000, -0.547433 +1816, 0.838566, 0.000000, 0.000000, -0.544800 +1817, 0.840274, 0.000000, 0.000000, -0.542162 +1818, 0.841974, 0.000000, 0.000000, -0.539519 +1819, 0.843665, 0.000000, 0.000000, -0.536870 +1820, 0.845348, 0.000000, 0.000000, -0.534216 +1821, 0.847023, 0.000000, 0.000000, -0.531557 +1822, 0.848689, 0.000000, 0.000000, -0.528892 +1823, 0.850347, 0.000000, 0.000000, -0.526223 +1824, 0.851996, 0.000000, 0.000000, -0.523548 +1825, 0.853638, 0.000000, 0.000000, -0.520868 +1826, 0.855270, 0.000000, 0.000000, -0.518182 +1827, 0.856894, 0.000000, 0.000000, -0.515492 +1828, 0.858510, 0.000000, 0.000000, -0.512797 +1829, 0.860117, 0.000000, 0.000000, -0.510096 +1830, 0.861716, 0.000000, 0.000000, -0.507390 +1831, 0.863307, 0.000000, 0.000000, -0.504680 +1832, 0.864888, 0.000000, 0.000000, -0.501964 +1833, 0.866462, 0.000000, 0.000000, -0.499244 +1834, 0.868026, 0.000000, 0.000000, -0.496518 +1835, 0.869582, 0.000000, 0.000000, -0.493788 +1836, 0.871130, 0.000000, 0.000000, -0.491053 +1837, 0.872669, 0.000000, 0.000000, -0.488313 +1838, 0.874199, 0.000000, 0.000000, -0.485568 +1839, 0.875721, 0.000000, 0.000000, -0.482818 +1840, 0.877234, 0.000000, 0.000000, -0.480064 +1841, 0.878738, 0.000000, 0.000000, -0.477305 +1842, 0.880234, 0.000000, 0.000000, -0.474541 +1843, 0.881721, 0.000000, 0.000000, -0.471772 +1844, 0.883199, 0.000000, 0.000000, -0.468999 +1845, 0.884668, 0.000000, 0.000000, -0.466221 +1846, 0.886129, 0.000000, 0.000000, -0.463438 +1847, 0.887581, 0.000000, 0.000000, -0.460651 +1848, 0.889024, 0.000000, 0.000000, -0.457860 +1849, 0.890459, 0.000000, 0.000000, -0.455064 +1850, 0.891885, 0.000000, 0.000000, -0.452263 +1851, 0.893302, 0.000000, 0.000000, -0.449458 +1852, 0.894710, 0.000000, 0.000000, -0.446648 +1853, 0.896109, 0.000000, 0.000000, -0.443834 +1854, 0.897499, 0.000000, 0.000000, -0.441016 +1855, 0.898881, 0.000000, 0.000000, -0.438193 +1856, 0.900253, 0.000000, 0.000000, -0.435366 +1857, 0.901617, 0.000000, 0.000000, -0.432535 +1858, 0.902972, 0.000000, 0.000000, -0.429699 +1859, 0.904318, 0.000000, 0.000000, -0.426860 +1860, 0.905655, 0.000000, 0.000000, -0.424015 +1861, 0.906983, 0.000000, 0.000000, -0.421167 +1862, 0.908302, 0.000000, 0.000000, -0.418315 +1863, 0.909612, 0.000000, 0.000000, -0.415458 +1864, 0.910913, 0.000000, 0.000000, -0.412598 +1865, 0.912206, 0.000000, 0.000000, -0.409733 +1866, 0.913489, 0.000000, 0.000000, -0.406864 +1867, 0.914763, 0.000000, 0.000000, -0.403991 +1868, 0.916028, 0.000000, 0.000000, -0.401115 +1869, 0.917284, 0.000000, 0.000000, -0.398234 +1870, 0.918531, 0.000000, 0.000000, -0.395349 +1871, 0.919769, 0.000000, 0.000000, -0.392461 +1872, 0.920998, 0.000000, 0.000000, -0.389568 +1873, 0.922217, 0.000000, 0.000000, -0.386672 +1874, 0.923428, 0.000000, 0.000000, -0.383772 +1875, 0.924629, 0.000000, 0.000000, -0.380868 +1876, 0.925822, 0.000000, 0.000000, -0.377960 +1877, 0.927005, 0.000000, 0.000000, -0.375049 +1878, 0.928179, 0.000000, 0.000000, -0.372134 +1879, 0.929344, 0.000000, 0.000000, -0.369215 +1880, 0.930500, 0.000000, 0.000000, -0.366293 +1881, 0.931646, 0.000000, 0.000000, -0.363367 +1882, 0.932784, 0.000000, 0.000000, -0.360437 +1883, 0.933912, 0.000000, 0.000000, -0.357504 +1884, 0.935031, 0.000000, 0.000000, -0.354567 +1885, 0.936140, 0.000000, 0.000000, -0.351627 +1886, 0.937241, 0.000000, 0.000000, -0.348683 +1887, 0.938332, 0.000000, 0.000000, -0.345736 +1888, 0.939414, 0.000000, 0.000000, -0.342786 +1889, 0.940486, 0.000000, 0.000000, -0.339832 +1890, 0.941550, 0.000000, 0.000000, -0.336874 +1891, 0.942604, 0.000000, 0.000000, -0.333914 +1892, 0.943648, 0.000000, 0.000000, -0.330950 +1893, 0.944684, 0.000000, 0.000000, -0.327983 +1894, 0.945710, 0.000000, 0.000000, -0.325012 +1895, 0.946727, 0.000000, 0.000000, -0.322039 +1896, 0.947734, 0.000000, 0.000000, -0.319062 +1897, 0.948732, 0.000000, 0.000000, -0.316082 +1898, 0.949721, 0.000000, 0.000000, -0.313099 +1899, 0.950700, 0.000000, 0.000000, -0.310113 +1900, 0.951670, 0.000000, 0.000000, -0.307123 +1901, 0.952630, 0.000000, 0.000000, -0.304131 +1902, 0.953581, 0.000000, 0.000000, -0.301136 +1903, 0.954523, 0.000000, 0.000000, -0.298138 +1904, 0.955455, 0.000000, 0.000000, -0.295136 +1905, 0.956378, 0.000000, 0.000000, -0.292132 +1906, 0.957291, 0.000000, 0.000000, -0.289125 +1907, 0.958195, 0.000000, 0.000000, -0.286116 +1908, 0.959090, 0.000000, 0.000000, -0.283103 +1909, 0.959975, 0.000000, 0.000000, -0.280087 +1910, 0.960850, 0.000000, 0.000000, -0.277069 +1911, 0.961716, 0.000000, 0.000000, -0.274048 +1912, 0.962572, 0.000000, 0.000000, -0.271025 +1913, 0.963419, 0.000000, 0.000000, -0.267998 +1914, 0.964257, 0.000000, 0.000000, -0.264969 +1915, 0.965085, 0.000000, 0.000000, -0.261938 +1916, 0.965903, 0.000000, 0.000000, -0.258903 +1917, 0.966712, 0.000000, 0.000000, -0.255867 +1918, 0.967511, 0.000000, 0.000000, -0.252827 +1919, 0.968301, 0.000000, 0.000000, -0.249786 +1920, 0.969081, 0.000000, 0.000000, -0.246741 +1921, 0.969852, 0.000000, 0.000000, -0.243695 +1922, 0.970613, 0.000000, 0.000000, -0.240646 +1923, 0.971365, 0.000000, 0.000000, -0.237594 +1924, 0.972106, 0.000000, 0.000000, -0.234540 +1925, 0.972839, 0.000000, 0.000000, -0.231484 +1926, 0.973561, 0.000000, 0.000000, -0.228426 +1927, 0.974274, 0.000000, 0.000000, -0.225365 +1928, 0.974978, 0.000000, 0.000000, -0.222302 +1929, 0.975672, 0.000000, 0.000000, -0.219237 +1930, 0.976356, 0.000000, 0.000000, -0.216170 +1931, 0.977030, 0.000000, 0.000000, -0.213100 +1932, 0.977695, 0.000000, 0.000000, -0.210029 +1933, 0.978350, 0.000000, 0.000000, -0.206955 +1934, 0.978996, 0.000000, 0.000000, -0.203880 +1935, 0.979632, 0.000000, 0.000000, -0.200802 +1936, 0.980258, 0.000000, 0.000000, -0.197722 +1937, 0.980875, 0.000000, 0.000000, -0.194641 +1938, 0.981481, 0.000000, 0.000000, -0.191557 +1939, 0.982079, 0.000000, 0.000000, -0.188472 +1940, 0.982666, 0.000000, 0.000000, -0.185385 +1941, 0.983244, 0.000000, 0.000000, -0.182296 +1942, 0.983812, 0.000000, 0.000000, -0.179205 +1943, 0.984370, 0.000000, 0.000000, -0.176112 +1944, 0.984919, 0.000000, 0.000000, -0.173018 +1945, 0.985458, 0.000000, 0.000000, -0.169922 +1946, 0.985987, 0.000000, 0.000000, -0.166824 +1947, 0.986506, 0.000000, 0.000000, -0.163724 +1948, 0.987016, 0.000000, 0.000000, -0.160623 +1949, 0.987516, 0.000000, 0.000000, -0.157521 +1950, 0.988006, 0.000000, 0.000000, -0.154417 +1951, 0.988486, 0.000000, 0.000000, -0.151311 +1952, 0.988957, 0.000000, 0.000000, -0.148204 +1953, 0.989418, 0.000000, 0.000000, -0.145095 +1954, 0.989869, 0.000000, 0.000000, -0.141985 +1955, 0.990310, 0.000000, 0.000000, -0.138873 +1956, 0.990742, 0.000000, 0.000000, -0.135761 +1957, 0.991163, 0.000000, 0.000000, -0.132646 +1958, 0.991575, 0.000000, 0.000000, -0.129531 +1959, 0.991978, 0.000000, 0.000000, -0.126414 +1960, 0.992370, 0.000000, 0.000000, -0.123296 +1961, 0.992753, 0.000000, 0.000000, -0.120177 +1962, 0.993125, 0.000000, 0.000000, -0.117056 +1963, 0.993488, 0.000000, 0.000000, -0.113935 +1964, 0.993841, 0.000000, 0.000000, -0.110812 +1965, 0.994185, 0.000000, 0.000000, -0.107688 +1966, 0.994518, 0.000000, 0.000000, -0.104563 +1967, 0.994842, 0.000000, 0.000000, -0.101437 +1968, 0.995156, 0.000000, 0.000000, -0.098310 +1969, 0.995460, 0.000000, 0.000000, -0.095182 +1970, 0.995754, 0.000000, 0.000000, -0.092054 +1971, 0.996038, 0.000000, 0.000000, -0.088924 +1972, 0.996313, 0.000000, 0.000000, -0.085793 +1973, 0.996578, 0.000000, 0.000000, -0.082662 +1974, 0.996833, 0.000000, 0.000000, -0.079529 +1975, 0.997078, 0.000000, 0.000000, -0.076396 +1976, 0.997313, 0.000000, 0.000000, -0.073263 +1977, 0.997538, 0.000000, 0.000000, -0.070128 +1978, 0.997753, 0.000000, 0.000000, -0.066993 +1979, 0.997959, 0.000000, 0.000000, -0.063857 +1980, 0.998155, 0.000000, 0.000000, -0.060720 +1981, 0.998341, 0.000000, 0.000000, -0.057583 +1982, 0.998517, 0.000000, 0.000000, -0.054445 +1983, 0.998683, 0.000000, 0.000000, -0.051307 +1984, 0.998839, 0.000000, 0.000000, -0.048169 +1985, 0.998986, 0.000000, 0.000000, -0.045029 +1986, 0.999122, 0.000000, 0.000000, -0.041890 +1987, 0.999249, 0.000000, 0.000000, -0.038750 +1988, 0.999366, 0.000000, 0.000000, -0.035609 +1989, 0.999473, 0.000000, 0.000000, -0.032468 +1990, 0.999570, 0.000000, 0.000000, -0.029327 +1991, 0.999657, 0.000000, 0.000000, -0.026186 +1992, 0.999734, 0.000000, 0.000000, -0.023044 +1993, 0.999802, 0.000000, 0.000000, -0.019902 +1994, 0.999860, 0.000000, 0.000000, -0.016760 +1995, 0.999907, 0.000000, 0.000000, -0.013618 +1996, 0.999945, 0.000000, 0.000000, -0.010475 +1997, 0.999973, 0.000000, 0.000000, -0.007333 +1998, 0.999991, 0.000000, 0.000000, -0.004190 +1999, 0.999999, 0.000000, 0.000000, -0.001048 +2000, 0.999998, 0.000000, 0.000000, 0.002095 +2001, 0.999986, 0.000000, 0.000000, 0.005238 +2002, 0.999965, 0.000000, 0.000000, 0.008380 +2003, 0.999934, 0.000000, 0.000000, 0.011523 +2004, 0.999892, 0.000000, 0.000000, 0.014665 +2005, 0.999841, 0.000000, 0.000000, 0.017807 +2006, 0.999781, 0.000000, 0.000000, 0.020949 +2007, 0.999710, 0.000000, 0.000000, 0.024091 +2008, 0.999629, 0.000000, 0.000000, 0.027233 +2009, 0.999539, 0.000000, 0.000000, 0.030374 +2010, 0.999438, 0.000000, 0.000000, 0.033515 +2011, 0.999328, 0.000000, 0.000000, 0.036656 +2012, 0.999208, 0.000000, 0.000000, 0.039796 +2013, 0.999078, 0.000000, 0.000000, 0.042936 +2014, 0.998938, 0.000000, 0.000000, 0.046076 +2015, 0.998788, 0.000000, 0.000000, 0.049215 +2016, 0.998629, 0.000000, 0.000000, 0.052353 +2017, 0.998459, 0.000000, 0.000000, 0.055491 +2018, 0.998280, 0.000000, 0.000000, 0.058629 +2019, 0.998091, 0.000000, 0.000000, 0.061766 +2020, 0.997892, 0.000000, 0.000000, 0.064902 +2021, 0.997683, 0.000000, 0.000000, 0.068038 +2022, 0.997464, 0.000000, 0.000000, 0.071173 +2023, 0.997235, 0.000000, 0.000000, 0.074307 +2024, 0.996997, 0.000000, 0.000000, 0.077441 +2025, 0.996749, 0.000000, 0.000000, 0.080574 +2026, 0.996491, 0.000000, 0.000000, 0.083706 +2027, 0.996223, 0.000000, 0.000000, 0.086837 +2028, 0.995945, 0.000000, 0.000000, 0.089967 +2029, 0.995657, 0.000000, 0.000000, 0.093097 +2030, 0.995360, 0.000000, 0.000000, 0.096225 +2031, 0.995052, 0.000000, 0.000000, 0.099353 +2032, 0.994735, 0.000000, 0.000000, 0.102479 +2033, 0.994408, 0.000000, 0.000000, 0.105605 +2034, 0.994071, 0.000000, 0.000000, 0.108729 +2035, 0.993725, 0.000000, 0.000000, 0.111853 +2036, 0.993368, 0.000000, 0.000000, 0.114975 +2037, 0.993002, 0.000000, 0.000000, 0.118097 +2038, 0.992626, 0.000000, 0.000000, 0.121217 +2039, 0.992240, 0.000000, 0.000000, 0.124335 +2040, 0.991845, 0.000000, 0.000000, 0.127453 +2041, 0.991439, 0.000000, 0.000000, 0.130569 +2042, 0.991024, 0.000000, 0.000000, 0.133685 +2043, 0.990599, 0.000000, 0.000000, 0.136798 +2044, 0.990164, 0.000000, 0.000000, 0.139911 +2045, 0.989720, 0.000000, 0.000000, 0.143022 +2046, 0.989265, 0.000000, 0.000000, 0.146131 +2047, 0.988801, 0.000000, 0.000000, 0.149240 +2048, 0.988327, 0.000000, 0.000000, 0.152346 +2049, 0.987844, 0.000000, 0.000000, 0.155451 +2050, 0.987350, 0.000000, 0.000000, 0.158555 +2051, 0.986847, 0.000000, 0.000000, 0.161657 +2052, 0.986334, 0.000000, 0.000000, 0.164758 +2053, 0.985811, 0.000000, 0.000000, 0.167857 +2054, 0.985279, 0.000000, 0.000000, 0.170954 +2055, 0.984737, 0.000000, 0.000000, 0.174049 +2056, 0.984185, 0.000000, 0.000000, 0.177143 +2057, 0.983624, 0.000000, 0.000000, 0.180235 +2058, 0.983052, 0.000000, 0.000000, 0.183326 +2059, 0.982471, 0.000000, 0.000000, 0.186414 +2060, 0.981881, 0.000000, 0.000000, 0.189501 +2061, 0.981280, 0.000000, 0.000000, 0.192585 +2062, 0.980670, 0.000000, 0.000000, 0.195668 +2063, 0.980050, 0.000000, 0.000000, 0.198749 +2064, 0.979421, 0.000000, 0.000000, 0.201828 +2065, 0.978782, 0.000000, 0.000000, 0.204905 +2066, 0.978133, 0.000000, 0.000000, 0.207980 +2067, 0.977475, 0.000000, 0.000000, 0.211053 +2068, 0.976807, 0.000000, 0.000000, 0.214124 +2069, 0.976129, 0.000000, 0.000000, 0.217192 +2070, 0.975441, 0.000000, 0.000000, 0.220259 +2071, 0.974744, 0.000000, 0.000000, 0.223323 +2072, 0.974038, 0.000000, 0.000000, 0.226385 +2073, 0.973322, 0.000000, 0.000000, 0.229445 +2074, 0.972596, 0.000000, 0.000000, 0.232503 +2075, 0.971860, 0.000000, 0.000000, 0.235558 +2076, 0.971115, 0.000000, 0.000000, 0.238611 +2077, 0.970360, 0.000000, 0.000000, 0.241662 +2078, 0.969596, 0.000000, 0.000000, 0.244710 +2079, 0.968822, 0.000000, 0.000000, 0.247756 +2080, 0.968039, 0.000000, 0.000000, 0.250800 +2081, 0.967246, 0.000000, 0.000000, 0.253841 +2082, 0.966444, 0.000000, 0.000000, 0.256879 +2083, 0.965631, 0.000000, 0.000000, 0.259915 +2084, 0.964810, 0.000000, 0.000000, 0.262948 +2085, 0.963979, 0.000000, 0.000000, 0.265979 +2086, 0.963138, 0.000000, 0.000000, 0.269007 +2087, 0.962288, 0.000000, 0.000000, 0.272033 +2088, 0.961428, 0.000000, 0.000000, 0.275056 +2089, 0.960559, 0.000000, 0.000000, 0.278076 +2090, 0.959681, 0.000000, 0.000000, 0.281093 +2091, 0.958792, 0.000000, 0.000000, 0.284107 +2092, 0.957895, 0.000000, 0.000000, 0.287119 +2093, 0.956988, 0.000000, 0.000000, 0.290128 +2094, 0.956071, 0.000000, 0.000000, 0.293134 +2095, 0.955145, 0.000000, 0.000000, 0.296137 +2096, 0.954210, 0.000000, 0.000000, 0.299137 +2097, 0.953265, 0.000000, 0.000000, 0.302135 +2098, 0.952311, 0.000000, 0.000000, 0.305129 +2099, 0.951347, 0.000000, 0.000000, 0.308120 +2100, 0.950374, 0.000000, 0.000000, 0.311108 +2101, 0.949392, 0.000000, 0.000000, 0.314094 +2102, 0.948400, 0.000000, 0.000000, 0.317076 +2103, 0.947399, 0.000000, 0.000000, 0.320055 +2104, 0.946389, 0.000000, 0.000000, 0.323030 +2105, 0.945369, 0.000000, 0.000000, 0.326003 +2106, 0.944340, 0.000000, 0.000000, 0.328972 +2107, 0.943301, 0.000000, 0.000000, 0.331938 +2108, 0.942253, 0.000000, 0.000000, 0.334901 +2109, 0.941196, 0.000000, 0.000000, 0.337861 +2110, 0.940130, 0.000000, 0.000000, 0.340817 +2111, 0.939054, 0.000000, 0.000000, 0.343770 +2112, 0.937969, 0.000000, 0.000000, 0.346719 +2113, 0.936875, 0.000000, 0.000000, 0.349665 +2114, 0.935771, 0.000000, 0.000000, 0.352607 +2115, 0.934659, 0.000000, 0.000000, 0.355547 +2116, 0.933537, 0.000000, 0.000000, 0.358482 +2117, 0.932405, 0.000000, 0.000000, 0.361414 +2118, 0.931265, 0.000000, 0.000000, 0.364342 +2119, 0.930115, 0.000000, 0.000000, 0.367267 +2120, 0.928957, 0.000000, 0.000000, 0.370188 +2121, 0.927789, 0.000000, 0.000000, 0.373106 +2122, 0.926612, 0.000000, 0.000000, 0.376020 +2123, 0.925425, 0.000000, 0.000000, 0.378930 +2124, 0.924230, 0.000000, 0.000000, 0.381836 +2125, 0.923025, 0.000000, 0.000000, 0.384739 +2126, 0.921812, 0.000000, 0.000000, 0.387638 +2127, 0.920589, 0.000000, 0.000000, 0.390533 +2128, 0.919357, 0.000000, 0.000000, 0.393424 +2129, 0.918116, 0.000000, 0.000000, 0.396311 +2130, 0.916866, 0.000000, 0.000000, 0.399195 +2131, 0.915607, 0.000000, 0.000000, 0.402074 +2132, 0.914339, 0.000000, 0.000000, 0.404950 +2133, 0.913062, 0.000000, 0.000000, 0.407821 +2134, 0.911776, 0.000000, 0.000000, 0.410688 +2135, 0.910481, 0.000000, 0.000000, 0.413552 +2136, 0.909177, 0.000000, 0.000000, 0.416411 +2137, 0.907863, 0.000000, 0.000000, 0.419266 +2138, 0.906541, 0.000000, 0.000000, 0.422117 +2139, 0.905210, 0.000000, 0.000000, 0.424964 +2140, 0.903870, 0.000000, 0.000000, 0.427807 +2141, 0.902521, 0.000000, 0.000000, 0.430645 +2142, 0.901164, 0.000000, 0.000000, 0.433479 +2143, 0.899797, 0.000000, 0.000000, 0.436309 +2144, 0.898421, 0.000000, 0.000000, 0.439135 +2145, 0.897037, 0.000000, 0.000000, 0.441956 +2146, 0.895643, 0.000000, 0.000000, 0.444773 +2147, 0.894241, 0.000000, 0.000000, 0.447585 +2148, 0.892830, 0.000000, 0.000000, 0.450393 +2149, 0.891410, 0.000000, 0.000000, 0.453197 +2150, 0.889982, 0.000000, 0.000000, 0.455996 +2151, 0.888544, 0.000000, 0.000000, 0.458791 +2152, 0.887098, 0.000000, 0.000000, 0.461581 +2153, 0.885643, 0.000000, 0.000000, 0.464366 +2154, 0.884179, 0.000000, 0.000000, 0.467147 +2155, 0.882707, 0.000000, 0.000000, 0.469924 +2156, 0.881226, 0.000000, 0.000000, 0.472695 +2157, 0.879736, 0.000000, 0.000000, 0.475462 +2158, 0.878237, 0.000000, 0.000000, 0.478225 +2159, 0.876730, 0.000000, 0.000000, 0.480982 +2160, 0.875214, 0.000000, 0.000000, 0.483735 +2161, 0.873690, 0.000000, 0.000000, 0.486483 +2162, 0.872157, 0.000000, 0.000000, 0.489227 +2163, 0.870615, 0.000000, 0.000000, 0.491965 +2164, 0.869065, 0.000000, 0.000000, 0.494699 +2165, 0.867506, 0.000000, 0.000000, 0.497427 +2166, 0.865938, 0.000000, 0.000000, 0.500151 +2167, 0.864362, 0.000000, 0.000000, 0.502870 +2168, 0.862777, 0.000000, 0.000000, 0.505584 +2169, 0.861184, 0.000000, 0.000000, 0.508293 +2170, 0.859583, 0.000000, 0.000000, 0.510997 +2171, 0.857973, 0.000000, 0.000000, 0.513696 +2172, 0.856354, 0.000000, 0.000000, 0.516389 +2173, 0.854727, 0.000000, 0.000000, 0.519078 +2174, 0.853091, 0.000000, 0.000000, 0.521761 +2175, 0.851447, 0.000000, 0.000000, 0.524440 +2176, 0.849795, 0.000000, 0.000000, 0.527113 +2177, 0.848134, 0.000000, 0.000000, 0.529781 +2178, 0.846465, 0.000000, 0.000000, 0.532444 +2179, 0.844788, 0.000000, 0.000000, 0.535101 +2180, 0.843102, 0.000000, 0.000000, 0.537754 +2181, 0.841408, 0.000000, 0.000000, 0.540400 +2182, 0.839706, 0.000000, 0.000000, 0.543042 +2183, 0.837995, 0.000000, 0.000000, 0.545678 +2184, 0.836276, 0.000000, 0.000000, 0.548309 +2185, 0.834549, 0.000000, 0.000000, 0.550934 +2186, 0.832813, 0.000000, 0.000000, 0.553554 +2187, 0.831069, 0.000000, 0.000000, 0.556169 +2188, 0.829317, 0.000000, 0.000000, 0.558778 +2189, 0.827557, 0.000000, 0.000000, 0.561381 +2190, 0.825789, 0.000000, 0.000000, 0.563979 +2191, 0.824012, 0.000000, 0.000000, 0.566572 +2192, 0.822228, 0.000000, 0.000000, 0.569158 +2193, 0.820435, 0.000000, 0.000000, 0.571740 +2194, 0.818634, 0.000000, 0.000000, 0.574315 +2195, 0.816825, 0.000000, 0.000000, 0.576885 +2196, 0.815008, 0.000000, 0.000000, 0.579449 +2197, 0.813183, 0.000000, 0.000000, 0.582008 +2198, 0.811350, 0.000000, 0.000000, 0.584560 +2199, 0.809509, 0.000000, 0.000000, 0.587107 +2200, 0.807660, 0.000000, 0.000000, 0.589648 +2201, 0.805803, 0.000000, 0.000000, 0.592183 +2202, 0.803938, 0.000000, 0.000000, 0.594713 +2203, 0.802065, 0.000000, 0.000000, 0.597236 +2204, 0.800184, 0.000000, 0.000000, 0.599754 +2205, 0.798296, 0.000000, 0.000000, 0.602266 +2206, 0.796399, 0.000000, 0.000000, 0.604772 +2207, 0.794494, 0.000000, 0.000000, 0.607271 +2208, 0.792582, 0.000000, 0.000000, 0.609765 +2209, 0.790662, 0.000000, 0.000000, 0.612253 +2210, 0.788734, 0.000000, 0.000000, 0.614735 +2211, 0.786798, 0.000000, 0.000000, 0.617210 +2212, 0.784855, 0.000000, 0.000000, 0.619680 +2213, 0.782903, 0.000000, 0.000000, 0.622143 +2214, 0.780944, 0.000000, 0.000000, 0.624601 +2215, 0.778978, 0.000000, 0.000000, 0.627052 +2216, 0.777003, 0.000000, 0.000000, 0.629497 +2217, 0.775021, 0.000000, 0.000000, 0.631935 +2218, 0.773031, 0.000000, 0.000000, 0.634368 +2219, 0.771034, 0.000000, 0.000000, 0.636794 +2220, 0.769029, 0.000000, 0.000000, 0.639214 +2221, 0.767016, 0.000000, 0.000000, 0.641628 +2222, 0.764996, 0.000000, 0.000000, 0.644035 +2223, 0.762968, 0.000000, 0.000000, 0.646436 +2224, 0.760933, 0.000000, 0.000000, 0.648830 +2225, 0.758890, 0.000000, 0.000000, 0.651219 +2226, 0.756840, 0.000000, 0.000000, 0.653600 +2227, 0.754782, 0.000000, 0.000000, 0.655976 +2228, 0.752717, 0.000000, 0.000000, 0.658344 +2229, 0.750644, 0.000000, 0.000000, 0.660707 +2230, 0.748564, 0.000000, 0.000000, 0.663062 +2231, 0.746477, 0.000000, 0.000000, 0.665412 +2232, 0.744382, 0.000000, 0.000000, 0.667754 +2233, 0.742280, 0.000000, 0.000000, 0.670090 +2234, 0.740170, 0.000000, 0.000000, 0.672420 +2235, 0.738053, 0.000000, 0.000000, 0.674742 +2236, 0.735929, 0.000000, 0.000000, 0.677058 +2237, 0.733798, 0.000000, 0.000000, 0.679368 +2238, 0.731659, 0.000000, 0.000000, 0.681671 +2239, 0.729513, 0.000000, 0.000000, 0.683967 +2240, 0.727360, 0.000000, 0.000000, 0.686256 +2241, 0.725200, 0.000000, 0.000000, 0.688538 +2242, 0.723033, 0.000000, 0.000000, 0.690814 +2243, 0.720858, 0.000000, 0.000000, 0.693083 +2244, 0.718676, 0.000000, 0.000000, 0.695345 +2245, 0.716488, 0.000000, 0.000000, 0.697600 +2246, 0.714292, 0.000000, 0.000000, 0.699848 +2247, 0.712089, 0.000000, 0.000000, 0.702089 +2248, 0.709879, 0.000000, 0.000000, 0.704324 +2249, 0.707662, 0.000000, 0.000000, 0.706551 +2250, 0.705438, 0.000000, 0.000000, 0.708771 +2251, 0.703207, 0.000000, 0.000000, 0.710985 +2252, 0.700969, 0.000000, 0.000000, 0.713191 +2253, 0.698725, 0.000000, 0.000000, 0.715391 +2254, 0.696473, 0.000000, 0.000000, 0.717583 +2255, 0.694214, 0.000000, 0.000000, 0.719768 +2256, 0.691949, 0.000000, 0.000000, 0.721946 +2257, 0.689677, 0.000000, 0.000000, 0.724117 +2258, 0.687398, 0.000000, 0.000000, 0.726281 +2259, 0.685112, 0.000000, 0.000000, 0.728438 +2260, 0.682819, 0.000000, 0.000000, 0.730587 +2261, 0.680520, 0.000000, 0.000000, 0.732729 +2262, 0.678214, 0.000000, 0.000000, 0.734864 +2263, 0.675901, 0.000000, 0.000000, 0.736992 +2264, 0.673582, 0.000000, 0.000000, 0.739113 +2265, 0.671256, 0.000000, 0.000000, 0.741226 +2266, 0.668923, 0.000000, 0.000000, 0.743332 +2267, 0.666584, 0.000000, 0.000000, 0.745430 +2268, 0.664238, 0.000000, 0.000000, 0.747521 +2269, 0.661885, 0.000000, 0.000000, 0.749605 +2270, 0.659526, 0.000000, 0.000000, 0.751682 +2271, 0.657161, 0.000000, 0.000000, 0.753750 +2272, 0.654789, 0.000000, 0.000000, 0.755812 +2273, 0.652410, 0.000000, 0.000000, 0.757866 +2274, 0.650025, 0.000000, 0.000000, 0.759913 +2275, 0.647634, 0.000000, 0.000000, 0.761952 +2276, 0.645236, 0.000000, 0.000000, 0.763983 +2277, 0.642832, 0.000000, 0.000000, 0.766007 +2278, 0.640422, 0.000000, 0.000000, 0.768023 +2279, 0.638005, 0.000000, 0.000000, 0.770032 +2280, 0.635582, 0.000000, 0.000000, 0.772033 +2281, 0.633153, 0.000000, 0.000000, 0.774027 +2282, 0.630717, 0.000000, 0.000000, 0.776013 +2283, 0.628275, 0.000000, 0.000000, 0.777991 +2284, 0.625827, 0.000000, 0.000000, 0.779962 +2285, 0.623373, 0.000000, 0.000000, 0.781925 +2286, 0.620912, 0.000000, 0.000000, 0.783880 +2287, 0.618446, 0.000000, 0.000000, 0.785827 +2288, 0.615973, 0.000000, 0.000000, 0.787767 +2289, 0.613495, 0.000000, 0.000000, 0.789699 +2290, 0.611010, 0.000000, 0.000000, 0.791623 +2291, 0.608519, 0.000000, 0.000000, 0.793539 +2292, 0.606022, 0.000000, 0.000000, 0.795448 +2293, 0.603519, 0.000000, 0.000000, 0.797348 +2294, 0.601011, 0.000000, 0.000000, 0.799241 +2295, 0.598496, 0.000000, 0.000000, 0.801126 +2296, 0.595975, 0.000000, 0.000000, 0.803003 +2297, 0.593449, 0.000000, 0.000000, 0.804872 +2298, 0.590917, 0.000000, 0.000000, 0.806733 +2299, 0.588378, 0.000000, 0.000000, 0.808586 +2300, 0.585834, 0.000000, 0.000000, 0.810431 +2301, 0.583285, 0.000000, 0.000000, 0.812268 +2302, 0.580729, 0.000000, 0.000000, 0.814097 +2303, 0.578168, 0.000000, 0.000000, 0.815918 +2304, 0.575601, 0.000000, 0.000000, 0.817731 +2305, 0.573028, 0.000000, 0.000000, 0.819536 +2306, 0.570450, 0.000000, 0.000000, 0.821333 +2307, 0.567866, 0.000000, 0.000000, 0.823121 +2308, 0.565276, 0.000000, 0.000000, 0.824902 +2309, 0.562681, 0.000000, 0.000000, 0.826674 +2310, 0.560080, 0.000000, 0.000000, 0.828438 +2311, 0.557474, 0.000000, 0.000000, 0.830194 +2312, 0.554862, 0.000000, 0.000000, 0.831942 +2313, 0.552245, 0.000000, 0.000000, 0.833682 +2314, 0.549622, 0.000000, 0.000000, 0.835413 +2315, 0.546994, 0.000000, 0.000000, 0.837136 +2316, 0.544361, 0.000000, 0.000000, 0.838851 +2317, 0.541722, 0.000000, 0.000000, 0.840558 +2318, 0.539078, 0.000000, 0.000000, 0.842256 +2319, 0.536428, 0.000000, 0.000000, 0.843946 +2320, 0.533773, 0.000000, 0.000000, 0.845628 +2321, 0.531113, 0.000000, 0.000000, 0.847301 +2322, 0.528448, 0.000000, 0.000000, 0.848966 +2323, 0.525777, 0.000000, 0.000000, 0.850622 +2324, 0.523101, 0.000000, 0.000000, 0.852270 +2325, 0.520420, 0.000000, 0.000000, 0.853910 +2326, 0.517734, 0.000000, 0.000000, 0.855541 +2327, 0.515043, 0.000000, 0.000000, 0.857164 +2328, 0.512347, 0.000000, 0.000000, 0.858779 +2329, 0.509645, 0.000000, 0.000000, 0.860385 +2330, 0.506939, 0.000000, 0.000000, 0.861982 +2331, 0.504228, 0.000000, 0.000000, 0.863571 +2332, 0.501511, 0.000000, 0.000000, 0.865151 +2333, 0.498790, 0.000000, 0.000000, 0.866723 +2334, 0.496064, 0.000000, 0.000000, 0.868286 +2335, 0.493332, 0.000000, 0.000000, 0.869841 +2336, 0.490596, 0.000000, 0.000000, 0.871387 +2337, 0.487856, 0.000000, 0.000000, 0.872924 +2338, 0.485110, 0.000000, 0.000000, 0.874453 +2339, 0.482359, 0.000000, 0.000000, 0.875973 +2340, 0.479604, 0.000000, 0.000000, 0.877485 +2341, 0.476844, 0.000000, 0.000000, 0.878988 +2342, 0.474079, 0.000000, 0.000000, 0.880482 +2343, 0.471310, 0.000000, 0.000000, 0.881968 +2344, 0.468536, 0.000000, 0.000000, 0.883444 +2345, 0.465757, 0.000000, 0.000000, 0.884912 +2346, 0.462974, 0.000000, 0.000000, 0.886372 +2347, 0.460186, 0.000000, 0.000000, 0.887822 +2348, 0.457394, 0.000000, 0.000000, 0.889264 +2349, 0.454597, 0.000000, 0.000000, 0.890697 +2350, 0.451796, 0.000000, 0.000000, 0.892121 +2351, 0.448990, 0.000000, 0.000000, 0.893537 +2352, 0.446180, 0.000000, 0.000000, 0.894943 +2353, 0.443365, 0.000000, 0.000000, 0.896341 +2354, 0.440546, 0.000000, 0.000000, 0.897730 +2355, 0.437722, 0.000000, 0.000000, 0.899110 +2356, 0.434895, 0.000000, 0.000000, 0.900481 +2357, 0.432063, 0.000000, 0.000000, 0.901844 +2358, 0.429226, 0.000000, 0.000000, 0.903197 +2359, 0.426386, 0.000000, 0.000000, 0.904541 +2360, 0.423541, 0.000000, 0.000000, 0.905877 +2361, 0.420692, 0.000000, 0.000000, 0.907203 +2362, 0.417839, 0.000000, 0.000000, 0.908521 +2363, 0.414982, 0.000000, 0.000000, 0.909830 +2364, 0.412121, 0.000000, 0.000000, 0.911129 +2365, 0.409255, 0.000000, 0.000000, 0.912420 +2366, 0.406386, 0.000000, 0.000000, 0.913702 +2367, 0.403512, 0.000000, 0.000000, 0.914974 +2368, 0.400635, 0.000000, 0.000000, 0.916238 +2369, 0.397753, 0.000000, 0.000000, 0.917492 +2370, 0.394868, 0.000000, 0.000000, 0.918738 +2371, 0.391979, 0.000000, 0.000000, 0.919974 +2372, 0.389086, 0.000000, 0.000000, 0.921201 +2373, 0.386189, 0.000000, 0.000000, 0.922420 +2374, 0.383288, 0.000000, 0.000000, 0.923629 +2375, 0.380384, 0.000000, 0.000000, 0.924829 +2376, 0.377475, 0.000000, 0.000000, 0.926020 +2377, 0.374563, 0.000000, 0.000000, 0.927201 +2378, 0.371648, 0.000000, 0.000000, 0.928374 +2379, 0.368728, 0.000000, 0.000000, 0.929537 +2380, 0.365805, 0.000000, 0.000000, 0.930691 +2381, 0.362879, 0.000000, 0.000000, 0.931836 +2382, 0.359948, 0.000000, 0.000000, 0.932972 +2383, 0.357015, 0.000000, 0.000000, 0.934099 +2384, 0.354077, 0.000000, 0.000000, 0.935216 +2385, 0.351137, 0.000000, 0.000000, 0.936324 +2386, 0.348192, 0.000000, 0.000000, 0.937423 +2387, 0.345245, 0.000000, 0.000000, 0.938513 +2388, 0.342294, 0.000000, 0.000000, 0.939593 +2389, 0.339339, 0.000000, 0.000000, 0.940664 +2390, 0.336381, 0.000000, 0.000000, 0.941726 +2391, 0.333420, 0.000000, 0.000000, 0.942778 +2392, 0.330456, 0.000000, 0.000000, 0.943822 +2393, 0.327488, 0.000000, 0.000000, 0.944855 +2394, 0.324517, 0.000000, 0.000000, 0.945880 +2395, 0.321543, 0.000000, 0.000000, 0.946895 +2396, 0.318565, 0.000000, 0.000000, 0.947901 +2397, 0.315585, 0.000000, 0.000000, 0.948897 +2398, 0.312601, 0.000000, 0.000000, 0.949884 +2399, 0.309615, 0.000000, 0.000000, 0.950862 +2400, 0.306625, 0.000000, 0.000000, 0.951830 +2401, 0.303632, 0.000000, 0.000000, 0.952789 +2402, 0.300636, 0.000000, 0.000000, 0.953739 +2403, 0.297638, 0.000000, 0.000000, 0.954679 +2404, 0.294636, 0.000000, 0.000000, 0.955610 +2405, 0.291631, 0.000000, 0.000000, 0.956531 +2406, 0.288624, 0.000000, 0.000000, 0.957443 +2407, 0.285614, 0.000000, 0.000000, 0.958345 +2408, 0.282600, 0.000000, 0.000000, 0.959238 +2409, 0.279585, 0.000000, 0.000000, 0.960121 +2410, 0.276566, 0.000000, 0.000000, 0.960995 +2411, 0.273544, 0.000000, 0.000000, 0.961859 +2412, 0.270520, 0.000000, 0.000000, 0.962714 +2413, 0.267494, 0.000000, 0.000000, 0.963560 +2414, 0.264464, 0.000000, 0.000000, 0.964396 +2415, 0.261432, 0.000000, 0.000000, 0.965222 +2416, 0.258397, 0.000000, 0.000000, 0.966039 +2417, 0.255360, 0.000000, 0.000000, 0.966846 +2418, 0.252321, 0.000000, 0.000000, 0.967644 +2419, 0.249278, 0.000000, 0.000000, 0.968432 +2420, 0.246234, 0.000000, 0.000000, 0.969210 +2421, 0.243187, 0.000000, 0.000000, 0.969980 +2422, 0.240137, 0.000000, 0.000000, 0.970739 +2423, 0.237085, 0.000000, 0.000000, 0.971489 +2424, 0.234031, 0.000000, 0.000000, 0.972229 +2425, 0.230975, 0.000000, 0.000000, 0.972960 +2426, 0.227916, 0.000000, 0.000000, 0.973681 +2427, 0.224855, 0.000000, 0.000000, 0.974392 +2428, 0.221791, 0.000000, 0.000000, 0.975094 +2429, 0.218726, 0.000000, 0.000000, 0.975786 +2430, 0.215658, 0.000000, 0.000000, 0.976469 +2431, 0.212589, 0.000000, 0.000000, 0.977142 +2432, 0.209517, 0.000000, 0.000000, 0.977805 +2433, 0.206443, 0.000000, 0.000000, 0.978459 +2434, 0.203367, 0.000000, 0.000000, 0.979103 +2435, 0.200289, 0.000000, 0.000000, 0.979737 +2436, 0.197209, 0.000000, 0.000000, 0.980361 +2437, 0.194127, 0.000000, 0.000000, 0.980976 +2438, 0.191043, 0.000000, 0.000000, 0.981582 +2439, 0.187958, 0.000000, 0.000000, 0.982177 +2440, 0.184870, 0.000000, 0.000000, 0.982763 +2441, 0.181781, 0.000000, 0.000000, 0.983339 +2442, 0.178689, 0.000000, 0.000000, 0.983906 +2443, 0.175596, 0.000000, 0.000000, 0.984462 +2444, 0.172502, 0.000000, 0.000000, 0.985009 +2445, 0.169405, 0.000000, 0.000000, 0.985546 +2446, 0.166307, 0.000000, 0.000000, 0.986074 +2447, 0.163208, 0.000000, 0.000000, 0.986592 +2448, 0.160106, 0.000000, 0.000000, 0.987100 +2449, 0.157003, 0.000000, 0.000000, 0.987598 +2450, 0.153899, 0.000000, 0.000000, 0.988087 +2451, 0.150793, 0.000000, 0.000000, 0.988565 +2452, 0.147686, 0.000000, 0.000000, 0.989034 +2453, 0.144577, 0.000000, 0.000000, 0.989494 +2454, 0.141466, 0.000000, 0.000000, 0.989943 +2455, 0.138355, 0.000000, 0.000000, 0.990383 +2456, 0.135242, 0.000000, 0.000000, 0.990813 +2457, 0.132127, 0.000000, 0.000000, 0.991233 +2458, 0.129011, 0.000000, 0.000000, 0.991643 +2459, 0.125894, 0.000000, 0.000000, 0.992044 +2460, 0.122776, 0.000000, 0.000000, 0.992434 +2461, 0.119657, 0.000000, 0.000000, 0.992815 +2462, 0.116536, 0.000000, 0.000000, 0.993186 +2463, 0.113414, 0.000000, 0.000000, 0.993548 +2464, 0.110291, 0.000000, 0.000000, 0.993899 +2465, 0.107167, 0.000000, 0.000000, 0.994241 +2466, 0.104042, 0.000000, 0.000000, 0.994573 +2467, 0.100916, 0.000000, 0.000000, 0.994895 +2468, 0.097789, 0.000000, 0.000000, 0.995207 +2469, 0.094661, 0.000000, 0.000000, 0.995510 +2470, 0.091532, 0.000000, 0.000000, 0.995802 +2471, 0.088402, 0.000000, 0.000000, 0.996085 +2472, 0.085271, 0.000000, 0.000000, 0.996358 +2473, 0.082140, 0.000000, 0.000000, 0.996621 +2474, 0.079007, 0.000000, 0.000000, 0.996874 +2475, 0.075874, 0.000000, 0.000000, 0.997117 +2476, 0.072740, 0.000000, 0.000000, 0.997351 +2477, 0.069606, 0.000000, 0.000000, 0.997575 +2478, 0.066470, 0.000000, 0.000000, 0.997788 +2479, 0.063334, 0.000000, 0.000000, 0.997992 +2480, 0.060198, 0.000000, 0.000000, 0.998186 +2481, 0.057060, 0.000000, 0.000000, 0.998371 +2482, 0.053922, 0.000000, 0.000000, 0.998545 +2483, 0.050784, 0.000000, 0.000000, 0.998710 +2484, 0.047645, 0.000000, 0.000000, 0.998864 +2485, 0.044506, 0.000000, 0.000000, 0.999009 +2486, 0.041366, 0.000000, 0.000000, 0.999144 +2487, 0.038226, 0.000000, 0.000000, 0.999269 +2488, 0.035086, 0.000000, 0.000000, 0.999384 +2489, 0.031945, 0.000000, 0.000000, 0.999490 +2490, 0.028804, 0.000000, 0.000000, 0.999585 +2491, 0.025662, 0.000000, 0.000000, 0.999671 +2492, 0.022520, 0.000000, 0.000000, 0.999746 +2493, 0.019378, 0.000000, 0.000000, 0.999812 +2494, 0.016236, 0.000000, 0.000000, 0.999868 +2495, 0.013094, 0.000000, 0.000000, 0.999914 +2496, 0.009952, 0.000000, 0.000000, 0.999950 +2497, 0.006809, 0.000000, 0.000000, 0.999977 +2498, 0.003666, 0.000000, 0.000000, 0.999993 +2499, 0.000524, 0.000000, 0.000000, 1.000000 +2500, -0.002619, -0.000000, 0.000000, 0.999997 +2501, -0.005761, -0.000000, 0.000000, 0.999983 +2502, -0.008904, -0.000000, 0.000000, 0.999960 +2503, -0.012046, -0.000000, 0.000000, 0.999927 +2504, -0.015189, -0.000000, 0.000000, 0.999885 +2505, -0.018331, -0.000000, 0.000000, 0.999832 +2506, -0.021473, -0.000000, 0.000000, 0.999769 +2507, -0.024615, -0.000000, 0.000000, 0.999697 +2508, -0.027756, -0.000000, 0.000000, 0.999615 +2509, -0.030898, -0.000000, 0.000000, 0.999523 +2510, -0.034039, -0.000000, 0.000000, 0.999421 +2511, -0.037179, -0.000000, 0.000000, 0.999309 +2512, -0.040320, -0.000000, 0.000000, 0.999187 +2513, -0.043459, -0.000000, 0.000000, 0.999055 +2514, -0.046599, -0.000000, 0.000000, 0.998914 +2515, -0.049738, -0.000000, 0.000000, 0.998762 +2516, -0.052876, -0.000000, 0.000000, 0.998601 +2517, -0.056014, -0.000000, 0.000000, 0.998430 +2518, -0.059152, -0.000000, 0.000000, 0.998249 +2519, -0.062289, -0.000000, 0.000000, 0.998058 +2520, -0.065425, -0.000000, 0.000000, 0.997857 +2521, -0.068560, -0.000000, 0.000000, 0.997647 +2522, -0.071695, -0.000000, 0.000000, 0.997427 +2523, -0.074830, -0.000000, 0.000000, 0.997196 +2524, -0.077963, -0.000000, 0.000000, 0.996956 +2525, -0.081096, -0.000000, 0.000000, 0.996706 +2526, -0.084228, -0.000000, 0.000000, 0.996447 +2527, -0.087359, -0.000000, 0.000000, 0.996177 +2528, -0.090489, -0.000000, 0.000000, 0.995897 +2529, -0.093618, -0.000000, 0.000000, 0.995608 +2530, -0.096747, -0.000000, 0.000000, 0.995309 +2531, -0.099874, -0.000000, 0.000000, 0.995000 +2532, -0.103000, -0.000000, 0.000000, 0.994681 +2533, -0.106126, -0.000000, 0.000000, 0.994353 +2534, -0.109250, -0.000000, 0.000000, 0.994014 +2535, -0.112373, -0.000000, 0.000000, 0.993666 +2536, -0.115496, -0.000000, 0.000000, 0.993308 +2537, -0.118617, -0.000000, 0.000000, 0.992940 +2538, -0.121736, -0.000000, 0.000000, 0.992562 +2539, -0.124855, -0.000000, 0.000000, 0.992175 +2540, -0.127973, -0.000000, 0.000000, 0.991778 +2541, -0.131089, -0.000000, 0.000000, 0.991371 +2542, -0.134204, -0.000000, 0.000000, 0.990954 +2543, -0.137317, -0.000000, 0.000000, 0.990527 +2544, -0.140429, -0.000000, 0.000000, 0.990091 +2545, -0.143540, -0.000000, 0.000000, 0.989644 +2546, -0.146650, -0.000000, 0.000000, 0.989189 +2547, -0.149757, -0.000000, 0.000000, 0.988723 +2548, -0.152864, -0.000000, 0.000000, 0.988247 +2549, -0.155969, -0.000000, 0.000000, 0.987762 +2550, -0.159072, -0.000000, 0.000000, 0.987267 +2551, -0.162174, -0.000000, 0.000000, 0.986762 +2552, -0.165274, -0.000000, 0.000000, 0.986248 +2553, -0.168373, -0.000000, 0.000000, 0.985723 +2554, -0.171470, -0.000000, 0.000000, 0.985189 +2555, -0.174565, -0.000000, 0.000000, 0.984646 +2556, -0.177659, -0.000000, 0.000000, 0.984092 +2557, -0.180750, -0.000000, 0.000000, 0.983529 +2558, -0.183840, -0.000000, 0.000000, 0.982956 +2559, -0.186929, -0.000000, 0.000000, 0.982374 +2560, -0.190015, -0.000000, 0.000000, 0.981781 +2561, -0.193099, -0.000000, 0.000000, 0.981179 +2562, -0.196182, -0.000000, 0.000000, 0.980568 +2563, -0.199262, -0.000000, 0.000000, 0.979946 +2564, -0.202341, -0.000000, 0.000000, 0.979315 +2565, -0.205418, -0.000000, 0.000000, 0.978674 +2566, -0.208492, -0.000000, 0.000000, 0.978024 +2567, -0.211565, -0.000000, 0.000000, 0.977364 +2568, -0.214635, -0.000000, 0.000000, 0.976694 +2569, -0.217704, -0.000000, 0.000000, 0.976015 +2570, -0.220770, -0.000000, 0.000000, 0.975326 +2571, -0.223834, -0.000000, 0.000000, 0.974627 +2572, -0.226896, -0.000000, 0.000000, 0.973919 +2573, -0.229955, -0.000000, 0.000000, 0.973201 +2574, -0.233012, -0.000000, 0.000000, 0.972474 +2575, -0.236067, -0.000000, 0.000000, 0.971737 +2576, -0.239120, -0.000000, 0.000000, 0.970990 +2577, -0.242170, -0.000000, 0.000000, 0.970234 +2578, -0.245218, -0.000000, 0.000000, 0.969468 +2579, -0.248264, -0.000000, 0.000000, 0.968692 +2580, -0.251307, -0.000000, 0.000000, 0.967907 +2581, -0.254347, -0.000000, 0.000000, 0.967113 +2582, -0.257385, -0.000000, 0.000000, 0.966309 +2583, -0.260421, -0.000000, 0.000000, 0.965495 +2584, -0.263454, -0.000000, 0.000000, 0.964672 +2585, -0.266484, -0.000000, 0.000000, 0.963839 +2586, -0.269512, -0.000000, 0.000000, 0.962997 +2587, -0.272537, -0.000000, 0.000000, 0.962145 +2588, -0.275559, -0.000000, 0.000000, 0.961284 +2589, -0.278579, -0.000000, 0.000000, 0.960413 +2590, -0.281595, -0.000000, 0.000000, 0.959533 +2591, -0.284610, -0.000000, 0.000000, 0.958644 +2592, -0.287621, -0.000000, 0.000000, 0.957744 +2593, -0.290629, -0.000000, 0.000000, 0.956836 +2594, -0.293635, -0.000000, 0.000000, 0.955918 +2595, -0.296637, -0.000000, 0.000000, 0.954990 +2596, -0.299637, -0.000000, 0.000000, 0.954053 +2597, -0.302634, -0.000000, 0.000000, 0.953107 +2598, -0.305628, -0.000000, 0.000000, 0.952151 +2599, -0.308618, -0.000000, 0.000000, 0.951186 +2600, -0.311606, -0.000000, 0.000000, 0.950211 +2601, -0.314591, -0.000000, 0.000000, 0.949227 +2602, -0.317572, -0.000000, 0.000000, 0.948234 +2603, -0.320551, -0.000000, 0.000000, 0.947231 +2604, -0.323526, -0.000000, 0.000000, 0.946219 +2605, -0.326498, -0.000000, 0.000000, 0.945198 +2606, -0.329467, -0.000000, 0.000000, 0.944167 +2607, -0.332432, -0.000000, 0.000000, 0.943127 +2608, -0.335395, -0.000000, 0.000000, 0.942078 +2609, -0.338354, -0.000000, 0.000000, 0.941019 +2610, -0.341309, -0.000000, 0.000000, 0.939951 +2611, -0.344261, -0.000000, 0.000000, 0.938874 +2612, -0.347210, -0.000000, 0.000000, 0.937787 +2613, -0.350156, -0.000000, 0.000000, 0.936692 +2614, -0.353098, -0.000000, 0.000000, 0.935587 +2615, -0.356036, -0.000000, 0.000000, 0.934472 +2616, -0.358971, -0.000000, 0.000000, 0.933349 +2617, -0.361902, -0.000000, 0.000000, 0.932216 +2618, -0.364830, -0.000000, 0.000000, 0.931074 +2619, -0.367754, -0.000000, 0.000000, 0.929923 +2620, -0.370675, -0.000000, 0.000000, 0.928763 +2621, -0.373592, -0.000000, 0.000000, 0.927593 +2622, -0.376505, -0.000000, 0.000000, 0.926415 +2623, -0.379415, -0.000000, 0.000000, 0.925227 +2624, -0.382320, -0.000000, 0.000000, 0.924030 +2625, -0.385222, -0.000000, 0.000000, 0.922824 +2626, -0.388121, -0.000000, 0.000000, 0.921609 +2627, -0.391015, -0.000000, 0.000000, 0.920384 +2628, -0.393906, -0.000000, 0.000000, 0.919151 +2629, -0.396792, -0.000000, 0.000000, 0.917908 +2630, -0.399675, -0.000000, 0.000000, 0.916657 +2631, -0.402554, -0.000000, 0.000000, 0.915396 +2632, -0.405428, -0.000000, 0.000000, 0.914127 +2633, -0.408299, -0.000000, 0.000000, 0.912848 +2634, -0.411166, -0.000000, 0.000000, 0.911561 +2635, -0.414029, -0.000000, 0.000000, 0.910264 +2636, -0.416887, -0.000000, 0.000000, 0.908958 +2637, -0.419742, -0.000000, 0.000000, 0.907644 +2638, -0.422592, -0.000000, 0.000000, 0.906320 +2639, -0.425438, -0.000000, 0.000000, 0.904988 +2640, -0.428280, -0.000000, 0.000000, 0.903646 +2641, -0.431118, -0.000000, 0.000000, 0.902296 +2642, -0.433951, -0.000000, 0.000000, 0.900936 +2643, -0.436780, -0.000000, 0.000000, 0.899568 +2644, -0.439605, -0.000000, 0.000000, 0.898191 +2645, -0.442426, -0.000000, 0.000000, 0.896805 +2646, -0.445242, -0.000000, 0.000000, 0.895410 +2647, -0.448054, -0.000000, 0.000000, 0.894007 +2648, -0.450861, -0.000000, 0.000000, 0.892594 +2649, -0.453664, -0.000000, 0.000000, 0.891173 +2650, -0.456462, -0.000000, 0.000000, 0.889743 +2651, -0.459256, -0.000000, 0.000000, 0.888304 +2652, -0.462045, -0.000000, 0.000000, 0.886856 +2653, -0.464830, -0.000000, 0.000000, 0.885400 +2654, -0.467610, -0.000000, 0.000000, 0.883935 +2655, -0.470386, -0.000000, 0.000000, 0.882461 +2656, -0.473157, -0.000000, 0.000000, 0.880978 +2657, -0.475923, -0.000000, 0.000000, 0.879487 +2658, -0.478685, -0.000000, 0.000000, 0.877987 +2659, -0.481442, -0.000000, 0.000000, 0.876478 +2660, -0.484194, -0.000000, 0.000000, 0.874961 +2661, -0.486941, -0.000000, 0.000000, 0.873435 +2662, -0.489683, -0.000000, 0.000000, 0.871900 +2663, -0.492421, -0.000000, 0.000000, 0.870357 +2664, -0.495154, -0.000000, 0.000000, 0.868805 +2665, -0.497882, -0.000000, 0.000000, 0.867245 +2666, -0.500605, -0.000000, 0.000000, 0.865676 +2667, -0.503323, -0.000000, 0.000000, 0.864099 +2668, -0.506036, -0.000000, 0.000000, 0.862512 +2669, -0.508744, -0.000000, 0.000000, 0.860918 +2670, -0.511447, -0.000000, 0.000000, 0.859315 +2671, -0.514145, -0.000000, 0.000000, 0.857703 +2672, -0.516838, -0.000000, 0.000000, 0.856083 +2673, -0.519526, -0.000000, 0.000000, 0.854455 +2674, -0.522208, -0.000000, 0.000000, 0.852818 +2675, -0.524886, -0.000000, 0.000000, 0.851173 +2676, -0.527558, -0.000000, 0.000000, 0.849519 +2677, -0.530225, -0.000000, 0.000000, 0.847857 +2678, -0.532887, -0.000000, 0.000000, 0.846186 +2679, -0.535544, -0.000000, 0.000000, 0.844507 +2680, -0.538195, -0.000000, 0.000000, 0.842820 +2681, -0.540841, -0.000000, 0.000000, 0.841125 +2682, -0.543482, -0.000000, 0.000000, 0.839421 +2683, -0.546117, -0.000000, 0.000000, 0.837709 +2684, -0.548747, -0.000000, 0.000000, 0.835988 +2685, -0.551371, -0.000000, 0.000000, 0.834260 +2686, -0.553991, -0.000000, 0.000000, 0.832523 +2687, -0.556604, -0.000000, 0.000000, 0.830778 +2688, -0.559212, -0.000000, 0.000000, 0.829025 +2689, -0.561815, -0.000000, 0.000000, 0.827263 +2690, -0.564412, -0.000000, 0.000000, 0.825493 +2691, -0.567003, -0.000000, 0.000000, 0.823716 +2692, -0.569589, -0.000000, 0.000000, 0.821930 +2693, -0.572169, -0.000000, 0.000000, 0.820136 +2694, -0.574744, -0.000000, 0.000000, 0.818333 +2695, -0.577313, -0.000000, 0.000000, 0.816523 +2696, -0.579876, -0.000000, 0.000000, 0.814705 +2697, -0.582433, -0.000000, 0.000000, 0.812878 +2698, -0.584985, -0.000000, 0.000000, 0.811044 +2699, -0.587531, -0.000000, 0.000000, 0.809202 +2700, -0.590071, -0.000000, 0.000000, 0.807351 +2701, -0.592605, -0.000000, 0.000000, 0.805493 +2702, -0.595134, -0.000000, 0.000000, 0.803627 +2703, -0.597656, -0.000000, 0.000000, 0.801752 +2704, -0.600173, -0.000000, 0.000000, 0.799870 +2705, -0.602684, -0.000000, 0.000000, 0.797980 +2706, -0.605189, -0.000000, 0.000000, 0.796082 +2707, -0.607687, -0.000000, 0.000000, 0.794176 +2708, -0.610180, -0.000000, 0.000000, 0.792263 +2709, -0.612667, -0.000000, 0.000000, 0.790341 +2710, -0.615148, -0.000000, 0.000000, 0.788412 +2711, -0.617622, -0.000000, 0.000000, 0.786475 +2712, -0.620091, -0.000000, 0.000000, 0.784530 +2713, -0.622553, -0.000000, 0.000000, 0.782577 +2714, -0.625010, -0.000000, 0.000000, 0.780617 +2715, -0.627460, -0.000000, 0.000000, 0.778649 +2716, -0.629904, -0.000000, 0.000000, 0.776673 +2717, -0.632341, -0.000000, 0.000000, 0.774690 +2718, -0.634773, -0.000000, 0.000000, 0.772699 +2719, -0.637198, -0.000000, 0.000000, 0.770700 +2720, -0.639617, -0.000000, 0.000000, 0.768694 +2721, -0.642029, -0.000000, 0.000000, 0.766680 +2722, -0.644436, -0.000000, 0.000000, 0.764659 +2723, -0.646835, -0.000000, 0.000000, 0.762630 +2724, -0.649229, -0.000000, 0.000000, 0.760593 +2725, -0.651616, -0.000000, 0.000000, 0.758549 +2726, -0.653997, -0.000000, 0.000000, 0.756497 +2727, -0.656371, -0.000000, 0.000000, 0.754438 +2728, -0.658739, -0.000000, 0.000000, 0.752372 +2729, -0.661100, -0.000000, 0.000000, 0.750298 +2730, -0.663454, -0.000000, 0.000000, 0.748217 +2731, -0.665802, -0.000000, 0.000000, 0.746128 +2732, -0.668144, -0.000000, 0.000000, 0.744032 +2733, -0.670479, -0.000000, 0.000000, 0.741929 +2734, -0.672807, -0.000000, 0.000000, 0.739818 +2735, -0.675129, -0.000000, 0.000000, 0.737700 +2736, -0.677444, -0.000000, 0.000000, 0.735575 +2737, -0.679752, -0.000000, 0.000000, 0.733442 +2738, -0.682054, -0.000000, 0.000000, 0.731302 +2739, -0.684349, -0.000000, 0.000000, 0.729155 +2740, -0.686637, -0.000000, 0.000000, 0.727001 +2741, -0.688918, -0.000000, 0.000000, 0.724839 +2742, -0.691192, -0.000000, 0.000000, 0.722671 +2743, -0.693460, -0.000000, 0.000000, 0.720495 +2744, -0.695721, -0.000000, 0.000000, 0.718312 +2745, -0.697975, -0.000000, 0.000000, 0.716122 +2746, -0.700222, -0.000000, 0.000000, 0.713925 +2747, -0.702462, -0.000000, 0.000000, 0.711721 +2748, -0.704695, -0.000000, 0.000000, 0.709510 +2749, -0.706922, -0.000000, 0.000000, 0.707292 +2750, -0.709141, -0.000000, 0.000000, 0.705067 +2751, -0.711353, -0.000000, 0.000000, 0.702835 +2752, -0.713558, -0.000000, 0.000000, 0.700596 +2753, -0.715757, -0.000000, 0.000000, 0.698350 +2754, -0.717948, -0.000000, 0.000000, 0.696097 +2755, -0.720132, -0.000000, 0.000000, 0.693837 +2756, -0.722309, -0.000000, 0.000000, 0.691571 +2757, -0.724478, -0.000000, 0.000000, 0.689297 +2758, -0.726641, -0.000000, 0.000000, 0.687017 +2759, -0.728797, -0.000000, 0.000000, 0.684730 +2760, -0.730945, -0.000000, 0.000000, 0.682437 +2761, -0.733086, -0.000000, 0.000000, 0.680136 +2762, -0.735220, -0.000000, 0.000000, 0.677829 +2763, -0.737346, -0.000000, 0.000000, 0.675515 +2764, -0.739465, -0.000000, 0.000000, 0.673195 +2765, -0.741577, -0.000000, 0.000000, 0.670867 +2766, -0.743682, -0.000000, 0.000000, 0.668534 +2767, -0.745779, -0.000000, 0.000000, 0.666193 +2768, -0.747869, -0.000000, 0.000000, 0.663846 +2769, -0.749952, -0.000000, 0.000000, 0.661493 +2770, -0.752027, -0.000000, 0.000000, 0.659132 +2771, -0.754095, -0.000000, 0.000000, 0.656766 +2772, -0.756155, -0.000000, 0.000000, 0.654393 +2773, -0.758208, -0.000000, 0.000000, 0.652013 +2774, -0.760253, -0.000000, 0.000000, 0.649627 +2775, -0.762291, -0.000000, 0.000000, 0.647235 +2776, -0.764321, -0.000000, 0.000000, 0.644836 +2777, -0.766344, -0.000000, 0.000000, 0.642431 +2778, -0.768359, -0.000000, 0.000000, 0.640019 +2779, -0.770366, -0.000000, 0.000000, 0.637602 +2780, -0.772366, -0.000000, 0.000000, 0.635177 +2781, -0.774359, -0.000000, 0.000000, 0.632747 +2782, -0.776343, -0.000000, 0.000000, 0.630310 +2783, -0.778320, -0.000000, 0.000000, 0.627867 +2784, -0.780290, -0.000000, 0.000000, 0.625418 +2785, -0.782251, -0.000000, 0.000000, 0.622963 +2786, -0.784205, -0.000000, 0.000000, 0.620502 +2787, -0.786151, -0.000000, 0.000000, 0.618034 +2788, -0.788090, -0.000000, 0.000000, 0.615561 +2789, -0.790020, -0.000000, 0.000000, 0.613081 +2790, -0.791943, -0.000000, 0.000000, 0.610595 +2791, -0.793858, -0.000000, 0.000000, 0.608103 +2792, -0.795765, -0.000000, 0.000000, 0.605605 +2793, -0.797664, -0.000000, 0.000000, 0.603102 +2794, -0.799556, -0.000000, 0.000000, 0.600592 +2795, -0.801439, -0.000000, 0.000000, 0.598076 +2796, -0.803315, -0.000000, 0.000000, 0.595555 +2797, -0.805182, -0.000000, 0.000000, 0.593027 +2798, -0.807042, -0.000000, 0.000000, 0.590494 +2799, -0.808894, -0.000000, 0.000000, 0.587955 +2800, -0.810738, -0.000000, 0.000000, 0.585410 +2801, -0.812573, -0.000000, 0.000000, 0.582859 +2802, -0.814401, -0.000000, 0.000000, 0.580303 +2803, -0.816221, -0.000000, 0.000000, 0.577740 +2804, -0.818032, -0.000000, 0.000000, 0.575172 +2805, -0.819836, -0.000000, 0.000000, 0.572599 +2806, -0.821631, -0.000000, 0.000000, 0.570019 +2807, -0.823418, -0.000000, 0.000000, 0.567435 +2808, -0.825198, -0.000000, 0.000000, 0.564844 +2809, -0.826969, -0.000000, 0.000000, 0.562248 +2810, -0.828732, -0.000000, 0.000000, 0.559646 +2811, -0.830486, -0.000000, 0.000000, 0.557039 +2812, -0.832233, -0.000000, 0.000000, 0.554427 +2813, -0.833971, -0.000000, 0.000000, 0.551808 +2814, -0.835701, -0.000000, 0.000000, 0.549185 +2815, -0.837423, -0.000000, 0.000000, 0.546556 +2816, -0.839136, -0.000000, 0.000000, 0.543921 +2817, -0.840841, -0.000000, 0.000000, 0.541282 +2818, -0.842538, -0.000000, 0.000000, 0.538636 +2819, -0.844227, -0.000000, 0.000000, 0.535986 +2820, -0.845907, -0.000000, 0.000000, 0.533330 +2821, -0.847579, -0.000000, 0.000000, 0.530669 +2822, -0.849243, -0.000000, 0.000000, 0.528003 +2823, -0.850898, -0.000000, 0.000000, 0.525332 +2824, -0.852544, -0.000000, 0.000000, 0.522655 +2825, -0.854183, -0.000000, 0.000000, 0.519973 +2826, -0.855813, -0.000000, 0.000000, 0.517286 +2827, -0.857434, -0.000000, 0.000000, 0.514594 +2828, -0.859047, -0.000000, 0.000000, 0.511897 +2829, -0.860651, -0.000000, 0.000000, 0.509195 +2830, -0.862247, -0.000000, 0.000000, 0.506487 +2831, -0.863835, -0.000000, 0.000000, 0.503775 +2832, -0.865414, -0.000000, 0.000000, 0.501058 +2833, -0.866984, -0.000000, 0.000000, 0.498336 +2834, -0.868546, -0.000000, 0.000000, 0.495609 +2835, -0.870099, -0.000000, 0.000000, 0.492877 +2836, -0.871644, -0.000000, 0.000000, 0.490140 +2837, -0.873180, -0.000000, 0.000000, 0.487398 +2838, -0.874707, -0.000000, 0.000000, 0.484652 +2839, -0.876226, -0.000000, 0.000000, 0.481901 +2840, -0.877736, -0.000000, 0.000000, 0.479145 +2841, -0.879237, -0.000000, 0.000000, 0.476384 +2842, -0.880730, -0.000000, 0.000000, 0.473618 +2843, -0.882214, -0.000000, 0.000000, 0.470848 +2844, -0.883690, -0.000000, 0.000000, 0.468073 +2845, -0.885156, -0.000000, 0.000000, 0.465294 +2846, -0.886614, -0.000000, 0.000000, 0.462510 +2847, -0.888063, -0.000000, 0.000000, 0.459721 +2848, -0.889504, -0.000000, 0.000000, 0.456928 +2849, -0.890935, -0.000000, 0.000000, 0.454130 +2850, -0.892358, -0.000000, 0.000000, 0.451328 +2851, -0.893772, -0.000000, 0.000000, 0.448522 +2852, -0.895177, -0.000000, 0.000000, 0.445711 +2853, -0.896573, -0.000000, 0.000000, 0.442895 +2854, -0.897961, -0.000000, 0.000000, 0.440076 +2855, -0.899339, -0.000000, 0.000000, 0.437251 +2856, -0.900709, -0.000000, 0.000000, 0.434423 +2857, -0.902070, -0.000000, 0.000000, 0.431590 +2858, -0.903422, -0.000000, 0.000000, 0.428753 +2859, -0.904765, -0.000000, 0.000000, 0.425912 +2860, -0.906099, -0.000000, 0.000000, 0.423067 +2861, -0.907424, -0.000000, 0.000000, 0.420217 +2862, -0.908740, -0.000000, 0.000000, 0.417363 +2863, -0.910047, -0.000000, 0.000000, 0.414505 +2864, -0.911345, -0.000000, 0.000000, 0.411643 +2865, -0.912634, -0.000000, 0.000000, 0.408777 +2866, -0.913914, -0.000000, 0.000000, 0.405907 +2867, -0.915185, -0.000000, 0.000000, 0.403033 +2868, -0.916448, -0.000000, 0.000000, 0.400155 +2869, -0.917701, -0.000000, 0.000000, 0.397273 +2870, -0.918944, -0.000000, 0.000000, 0.394387 +2871, -0.920179, -0.000000, 0.000000, 0.391497 +2872, -0.921405, -0.000000, 0.000000, 0.388603 +2873, -0.922622, -0.000000, 0.000000, 0.385706 +2874, -0.923829, -0.000000, 0.000000, 0.382804 +2875, -0.925028, -0.000000, 0.000000, 0.379899 +2876, -0.926217, -0.000000, 0.000000, 0.376990 +2877, -0.927397, -0.000000, 0.000000, 0.374078 +2878, -0.928568, -0.000000, 0.000000, 0.371161 +2879, -0.929730, -0.000000, 0.000000, 0.368241 +2880, -0.930883, -0.000000, 0.000000, 0.365318 +2881, -0.932026, -0.000000, 0.000000, 0.362391 +2882, -0.933161, -0.000000, 0.000000, 0.359460 +2883, -0.934286, -0.000000, 0.000000, 0.356525 +2884, -0.935401, -0.000000, 0.000000, 0.353588 +2885, -0.936508, -0.000000, 0.000000, 0.350646 +2886, -0.937605, -0.000000, 0.000000, 0.347701 +2887, -0.938693, -0.000000, 0.000000, 0.344753 +2888, -0.939772, -0.000000, 0.000000, 0.341801 +2889, -0.940842, -0.000000, 0.000000, 0.338846 +2890, -0.941902, -0.000000, 0.000000, 0.335888 +2891, -0.942953, -0.000000, 0.000000, 0.332926 +2892, -0.943994, -0.000000, 0.000000, 0.329961 +2893, -0.945027, -0.000000, 0.000000, 0.326993 +2894, -0.946050, -0.000000, 0.000000, 0.324021 +2895, -0.947063, -0.000000, 0.000000, 0.321047 +2896, -0.948068, -0.000000, 0.000000, 0.318069 +2897, -0.949062, -0.000000, 0.000000, 0.315088 +2898, -0.950048, -0.000000, 0.000000, 0.312104 +2899, -0.951024, -0.000000, 0.000000, 0.309117 +2900, -0.951991, -0.000000, 0.000000, 0.306126 +2901, -0.952948, -0.000000, 0.000000, 0.303133 +2902, -0.953896, -0.000000, 0.000000, 0.300137 +2903, -0.954835, -0.000000, 0.000000, 0.297138 +2904, -0.955764, -0.000000, 0.000000, 0.294135 +2905, -0.956683, -0.000000, 0.000000, 0.291130 +2906, -0.957594, -0.000000, 0.000000, 0.288122 +2907, -0.958494, -0.000000, 0.000000, 0.285112 +2908, -0.959386, -0.000000, 0.000000, 0.282098 +2909, -0.960267, -0.000000, 0.000000, 0.279082 +2910, -0.961140, -0.000000, 0.000000, 0.276062 +2911, -0.962003, -0.000000, 0.000000, 0.273041 +2912, -0.962856, -0.000000, 0.000000, 0.270016 +2913, -0.963700, -0.000000, 0.000000, 0.266989 +2914, -0.964534, -0.000000, 0.000000, 0.263959 +2915, -0.965359, -0.000000, 0.000000, 0.260926 +2916, -0.966174, -0.000000, 0.000000, 0.257891 +2917, -0.966980, -0.000000, 0.000000, 0.254854 +2918, -0.967776, -0.000000, 0.000000, 0.251814 +2919, -0.968562, -0.000000, 0.000000, 0.248771 +2920, -0.969339, -0.000000, 0.000000, 0.245726 +2921, -0.970107, -0.000000, 0.000000, 0.242678 +2922, -0.970865, -0.000000, 0.000000, 0.239629 +2923, -0.971613, -0.000000, 0.000000, 0.236576 +2924, -0.972352, -0.000000, 0.000000, 0.233522 +2925, -0.973081, -0.000000, 0.000000, 0.230465 +2926, -0.973800, -0.000000, 0.000000, 0.227406 +2927, -0.974510, -0.000000, 0.000000, 0.224344 +2928, -0.975210, -0.000000, 0.000000, 0.221281 +2929, -0.975901, -0.000000, 0.000000, 0.218215 +2930, -0.976582, -0.000000, 0.000000, 0.215147 +2931, -0.977253, -0.000000, 0.000000, 0.212077 +2932, -0.977915, -0.000000, 0.000000, 0.209005 +2933, -0.978567, -0.000000, 0.000000, 0.205930 +2934, -0.979209, -0.000000, 0.000000, 0.202854 +2935, -0.979842, -0.000000, 0.000000, 0.199776 +2936, -0.980465, -0.000000, 0.000000, 0.196695 +2937, -0.981078, -0.000000, 0.000000, 0.193613 +2938, -0.981682, -0.000000, 0.000000, 0.190529 +2939, -0.982275, -0.000000, 0.000000, 0.187443 +2940, -0.982860, -0.000000, 0.000000, 0.184355 +2941, -0.983434, -0.000000, 0.000000, 0.181266 +2942, -0.983999, -0.000000, 0.000000, 0.178174 +2943, -0.984554, -0.000000, 0.000000, 0.175081 +2944, -0.985099, -0.000000, 0.000000, 0.171986 +2945, -0.985635, -0.000000, 0.000000, 0.168889 +2946, -0.986161, -0.000000, 0.000000, 0.165791 +2947, -0.986677, -0.000000, 0.000000, 0.162691 +2948, -0.987183, -0.000000, 0.000000, 0.159589 +2949, -0.987680, -0.000000, 0.000000, 0.156486 +2950, -0.988167, -0.000000, 0.000000, 0.153382 +2951, -0.988644, -0.000000, 0.000000, 0.150275 +2952, -0.989112, -0.000000, 0.000000, 0.147168 +2953, -0.989569, -0.000000, 0.000000, 0.144058 +2954, -0.990017, -0.000000, 0.000000, 0.140948 +2955, -0.990455, -0.000000, 0.000000, 0.137836 +2956, -0.990883, -0.000000, 0.000000, 0.134723 +2957, -0.991302, -0.000000, 0.000000, 0.131608 +2958, -0.991711, -0.000000, 0.000000, 0.128492 +2959, -0.992109, -0.000000, 0.000000, 0.125375 +2960, -0.992499, -0.000000, 0.000000, 0.122256 +2961, -0.992878, -0.000000, 0.000000, 0.119137 +2962, -0.993247, -0.000000, 0.000000, 0.116016 +2963, -0.993607, -0.000000, 0.000000, 0.112894 +2964, -0.993957, -0.000000, 0.000000, 0.109771 +2965, -0.994297, -0.000000, 0.000000, 0.106647 +2966, -0.994627, -0.000000, 0.000000, 0.103521 +2967, -0.994948, -0.000000, 0.000000, 0.100395 +2968, -0.995258, -0.000000, 0.000000, 0.097268 +2969, -0.995559, -0.000000, 0.000000, 0.094140 +2970, -0.995850, -0.000000, 0.000000, 0.091010 +2971, -0.996131, -0.000000, 0.000000, 0.087880 +2972, -0.996402, -0.000000, 0.000000, 0.084750 +2973, -0.996664, -0.000000, 0.000000, 0.081618 +2974, -0.996915, -0.000000, 0.000000, 0.078485 +2975, -0.997157, -0.000000, 0.000000, 0.075352 +2976, -0.997389, -0.000000, 0.000000, 0.072218 +2977, -0.997611, -0.000000, 0.000000, 0.069083 +2978, -0.997823, -0.000000, 0.000000, 0.065948 +2979, -0.998025, -0.000000, 0.000000, 0.062811 +2980, -0.998218, -0.000000, 0.000000, 0.059675 +2981, -0.998400, -0.000000, 0.000000, 0.056537 +2982, -0.998573, -0.000000, 0.000000, 0.053399 +2983, -0.998736, -0.000000, 0.000000, 0.050261 +2984, -0.998889, -0.000000, 0.000000, 0.047122 +2985, -0.999032, -0.000000, 0.000000, 0.043983 +2986, -0.999166, -0.000000, 0.000000, 0.040843 +2987, -0.999289, -0.000000, 0.000000, 0.037703 +2988, -0.999403, -0.000000, 0.000000, 0.034562 +2989, -0.999506, -0.000000, 0.000000, 0.031421 +2990, -0.999600, -0.000000, 0.000000, 0.028280 +2991, -0.999684, -0.000000, 0.000000, 0.025138 +2992, -0.999758, -0.000000, 0.000000, 0.021997 +2993, -0.999822, -0.000000, 0.000000, 0.018855 +2994, -0.999877, -0.000000, 0.000000, 0.015713 +2995, -0.999921, -0.000000, 0.000000, 0.012570 +2996, -0.999956, -0.000000, 0.000000, 0.009428 +2997, -0.999980, -0.000000, 0.000000, 0.006285 +2998, -0.999995, -0.000000, 0.000000, 0.003143 +2999, -1.000000, -0.000000, 0.000000, 0.000000 diff --git a/scripts/trajectories/full-circle-T15.0-w0.4.csv b/scripts/trajectories/full-circle-T15.0-w0.4.csv new file mode 100644 index 0000000000..13d804bbfd --- /dev/null +++ b/scripts/trajectories/full-circle-T15.0-w0.4.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 0.999980, 0.000000, 0.000000, 0.006285 +2, 0.999921, 0.000000, 0.000000, 0.012570 +3, 0.999822, 0.000000, 0.000000, 0.018855 +4, 0.999684, 0.000000, 0.000000, 0.025138 +5, 0.999506, 0.000000, 0.000000, 0.031421 +6, 0.999289, 0.000000, 0.000000, 0.037703 +7, 0.999032, 0.000000, 0.000000, 0.043983 +8, 0.998736, 0.000000, 0.000000, 0.050261 +9, 0.998400, 0.000000, 0.000000, 0.056537 +10, 0.998025, 0.000000, 0.000000, 0.062811 +11, 0.997611, 0.000000, 0.000000, 0.069083 +12, 0.997157, 0.000000, 0.000000, 0.075352 +13, 0.996664, 0.000000, 0.000000, 0.081618 +14, 0.996131, 0.000000, 0.000000, 0.087880 +15, 0.995559, 0.000000, 0.000000, 0.094140 +16, 0.994948, 0.000000, 0.000000, 0.100395 +17, 0.994297, 0.000000, 0.000000, 0.106647 +18, 0.993607, 0.000000, 0.000000, 0.112894 +19, 0.992878, 0.000000, 0.000000, 0.119137 +20, 0.992109, 0.000000, 0.000000, 0.125375 +21, 0.991302, 0.000000, 0.000000, 0.131608 +22, 0.990455, 0.000000, 0.000000, 0.137836 +23, 0.989569, 0.000000, 0.000000, 0.144058 +24, 0.988644, 0.000000, 0.000000, 0.150275 +25, 0.987680, 0.000000, 0.000000, 0.156486 +26, 0.986677, 0.000000, 0.000000, 0.162691 +27, 0.985635, 0.000000, 0.000000, 0.168889 +28, 0.984554, 0.000000, 0.000000, 0.175081 +29, 0.983434, 0.000000, 0.000000, 0.181266 +30, 0.982275, 0.000000, 0.000000, 0.187443 +31, 0.981078, 0.000000, 0.000000, 0.193613 +32, 0.979842, 0.000000, 0.000000, 0.199776 +33, 0.978567, 0.000000, 0.000000, 0.205930 +34, 0.977253, 0.000000, 0.000000, 0.212077 +35, 0.975901, 0.000000, 0.000000, 0.218215 +36, 0.974510, 0.000000, 0.000000, 0.224344 +37, 0.973081, 0.000000, 0.000000, 0.230465 +38, 0.971613, 0.000000, 0.000000, 0.236576 +39, 0.970107, 0.000000, 0.000000, 0.242678 +40, 0.968562, 0.000000, 0.000000, 0.248771 +41, 0.966980, 0.000000, 0.000000, 0.254854 +42, 0.965359, 0.000000, 0.000000, 0.260926 +43, 0.963700, 0.000000, 0.000000, 0.266989 +44, 0.962003, 0.000000, 0.000000, 0.273041 +45, 0.960267, 0.000000, 0.000000, 0.279082 +46, 0.958494, 0.000000, 0.000000, 0.285112 +47, 0.956683, 0.000000, 0.000000, 0.291130 +48, 0.954835, 0.000000, 0.000000, 0.297138 +49, 0.952948, 0.000000, 0.000000, 0.303133 +50, 0.951024, 0.000000, 0.000000, 0.309117 +51, 0.949062, 0.000000, 0.000000, 0.315088 +52, 0.947063, 0.000000, 0.000000, 0.321047 +53, 0.945027, 0.000000, 0.000000, 0.326993 +54, 0.942953, 0.000000, 0.000000, 0.332926 +55, 0.940842, 0.000000, 0.000000, 0.338846 +56, 0.938693, 0.000000, 0.000000, 0.344753 +57, 0.936508, 0.000000, 0.000000, 0.350646 +58, 0.934286, 0.000000, 0.000000, 0.356525 +59, 0.932026, 0.000000, 0.000000, 0.362391 +60, 0.929730, 0.000000, 0.000000, 0.368241 +61, 0.927397, 0.000000, 0.000000, 0.374078 +62, 0.925028, 0.000000, 0.000000, 0.379899 +63, 0.922622, 0.000000, 0.000000, 0.385706 +64, 0.920179, 0.000000, 0.000000, 0.391497 +65, 0.917701, 0.000000, 0.000000, 0.397273 +66, 0.915185, 0.000000, 0.000000, 0.403033 +67, 0.912634, 0.000000, 0.000000, 0.408777 +68, 0.910047, 0.000000, 0.000000, 0.414505 +69, 0.907424, 0.000000, 0.000000, 0.420217 +70, 0.904765, 0.000000, 0.000000, 0.425912 +71, 0.902070, 0.000000, 0.000000, 0.431590 +72, 0.899339, 0.000000, 0.000000, 0.437251 +73, 0.896573, 0.000000, 0.000000, 0.442895 +74, 0.893772, 0.000000, 0.000000, 0.448522 +75, 0.890935, 0.000000, 0.000000, 0.454130 +76, 0.888063, 0.000000, 0.000000, 0.459721 +77, 0.885156, 0.000000, 0.000000, 0.465294 +78, 0.882214, 0.000000, 0.000000, 0.470848 +79, 0.879237, 0.000000, 0.000000, 0.476384 +80, 0.876226, 0.000000, 0.000000, 0.481901 +81, 0.873180, 0.000000, 0.000000, 0.487398 +82, 0.870099, 0.000000, 0.000000, 0.492877 +83, 0.866984, 0.000000, 0.000000, 0.498336 +84, 0.863835, 0.000000, 0.000000, 0.503775 +85, 0.860651, 0.000000, 0.000000, 0.509195 +86, 0.857434, 0.000000, 0.000000, 0.514594 +87, 0.854183, 0.000000, 0.000000, 0.519973 +88, 0.850898, 0.000000, 0.000000, 0.525332 +89, 0.847579, 0.000000, 0.000000, 0.530669 +90, 0.844227, 0.000000, 0.000000, 0.535986 +91, 0.840841, 0.000000, 0.000000, 0.541282 +92, 0.837423, 0.000000, 0.000000, 0.546556 +93, 0.833971, 0.000000, 0.000000, 0.551808 +94, 0.830486, 0.000000, 0.000000, 0.557039 +95, 0.826969, 0.000000, 0.000000, 0.562248 +96, 0.823418, 0.000000, 0.000000, 0.567435 +97, 0.819836, 0.000000, 0.000000, 0.572599 +98, 0.816221, 0.000000, 0.000000, 0.577740 +99, 0.812573, 0.000000, 0.000000, 0.582859 +100, 0.808894, 0.000000, 0.000000, 0.587955 +101, 0.805182, 0.000000, 0.000000, 0.593027 +102, 0.801439, 0.000000, 0.000000, 0.598076 +103, 0.797664, 0.000000, 0.000000, 0.603102 +104, 0.793858, 0.000000, 0.000000, 0.608103 +105, 0.790020, 0.000000, 0.000000, 0.613081 +106, 0.786151, 0.000000, 0.000000, 0.618034 +107, 0.782251, 0.000000, 0.000000, 0.622963 +108, 0.778320, 0.000000, 0.000000, 0.627867 +109, 0.774359, 0.000000, 0.000000, 0.632747 +110, 0.770366, 0.000000, 0.000000, 0.637602 +111, 0.766344, 0.000000, 0.000000, 0.642431 +112, 0.762291, 0.000000, 0.000000, 0.647235 +113, 0.758208, 0.000000, 0.000000, 0.652013 +114, 0.754095, 0.000000, 0.000000, 0.656766 +115, 0.749952, 0.000000, 0.000000, 0.661493 +116, 0.745779, 0.000000, 0.000000, 0.666193 +117, 0.741577, 0.000000, 0.000000, 0.670867 +118, 0.737346, 0.000000, 0.000000, 0.675515 +119, 0.733086, 0.000000, 0.000000, 0.680136 +120, 0.728797, 0.000000, 0.000000, 0.684730 +121, 0.724478, 0.000000, 0.000000, 0.689297 +122, 0.720132, 0.000000, 0.000000, 0.693837 +123, 0.715757, 0.000000, 0.000000, 0.698350 +124, 0.711353, 0.000000, 0.000000, 0.702835 +125, 0.706922, 0.000000, 0.000000, 0.707292 +126, 0.702462, 0.000000, 0.000000, 0.711721 +127, 0.697975, 0.000000, 0.000000, 0.716122 +128, 0.693460, 0.000000, 0.000000, 0.720495 +129, 0.688918, 0.000000, 0.000000, 0.724839 +130, 0.684349, 0.000000, 0.000000, 0.729155 +131, 0.679752, 0.000000, 0.000000, 0.733442 +132, 0.675129, 0.000000, 0.000000, 0.737700 +133, 0.670479, 0.000000, 0.000000, 0.741929 +134, 0.665802, 0.000000, 0.000000, 0.746128 +135, 0.661100, 0.000000, 0.000000, 0.750298 +136, 0.656371, 0.000000, 0.000000, 0.754438 +137, 0.651616, 0.000000, 0.000000, 0.758549 +138, 0.646835, 0.000000, 0.000000, 0.762630 +139, 0.642029, 0.000000, 0.000000, 0.766680 +140, 0.637198, 0.000000, 0.000000, 0.770700 +141, 0.632341, 0.000000, 0.000000, 0.774690 +142, 0.627460, 0.000000, 0.000000, 0.778649 +143, 0.622553, 0.000000, 0.000000, 0.782577 +144, 0.617622, 0.000000, 0.000000, 0.786475 +145, 0.612667, 0.000000, 0.000000, 0.790341 +146, 0.607687, 0.000000, 0.000000, 0.794176 +147, 0.602684, 0.000000, 0.000000, 0.797980 +148, 0.597656, 0.000000, 0.000000, 0.801752 +149, 0.592605, 0.000000, 0.000000, 0.805493 +150, 0.587531, 0.000000, 0.000000, 0.809202 +151, 0.582433, 0.000000, 0.000000, 0.812878 +152, 0.577313, 0.000000, 0.000000, 0.816523 +153, 0.572169, 0.000000, 0.000000, 0.820136 +154, 0.567003, 0.000000, 0.000000, 0.823716 +155, 0.561815, 0.000000, 0.000000, 0.827263 +156, 0.556604, 0.000000, 0.000000, 0.830778 +157, 0.551371, 0.000000, 0.000000, 0.834260 +158, 0.546117, 0.000000, 0.000000, 0.837709 +159, 0.540841, 0.000000, 0.000000, 0.841125 +160, 0.535544, 0.000000, 0.000000, 0.844507 +161, 0.530225, 0.000000, 0.000000, 0.847857 +162, 0.524886, 0.000000, 0.000000, 0.851173 +163, 0.519526, 0.000000, 0.000000, 0.854455 +164, 0.514145, 0.000000, 0.000000, 0.857703 +165, 0.508744, 0.000000, 0.000000, 0.860918 +166, 0.503323, 0.000000, 0.000000, 0.864099 +167, 0.497882, 0.000000, 0.000000, 0.867245 +168, 0.492421, 0.000000, 0.000000, 0.870357 +169, 0.486941, 0.000000, 0.000000, 0.873435 +170, 0.481442, 0.000000, 0.000000, 0.876478 +171, 0.475923, 0.000000, 0.000000, 0.879487 +172, 0.470386, 0.000000, 0.000000, 0.882461 +173, 0.464830, 0.000000, 0.000000, 0.885400 +174, 0.459256, 0.000000, 0.000000, 0.888304 +175, 0.453664, 0.000000, 0.000000, 0.891173 +176, 0.448054, 0.000000, 0.000000, 0.894007 +177, 0.442426, 0.000000, 0.000000, 0.896805 +178, 0.436780, 0.000000, 0.000000, 0.899568 +179, 0.431118, 0.000000, 0.000000, 0.902296 +180, 0.425438, 0.000000, 0.000000, 0.904988 +181, 0.419742, 0.000000, 0.000000, 0.907644 +182, 0.414029, 0.000000, 0.000000, 0.910264 +183, 0.408299, 0.000000, 0.000000, 0.912848 +184, 0.402554, 0.000000, 0.000000, 0.915396 +185, 0.396792, 0.000000, 0.000000, 0.917908 +186, 0.391015, 0.000000, 0.000000, 0.920384 +187, 0.385222, 0.000000, 0.000000, 0.922824 +188, 0.379415, 0.000000, 0.000000, 0.925227 +189, 0.373592, 0.000000, 0.000000, 0.927593 +190, 0.367754, 0.000000, 0.000000, 0.929923 +191, 0.361902, 0.000000, 0.000000, 0.932216 +192, 0.356036, 0.000000, 0.000000, 0.934472 +193, 0.350156, 0.000000, 0.000000, 0.936692 +194, 0.344261, 0.000000, 0.000000, 0.938874 +195, 0.338354, 0.000000, 0.000000, 0.941019 +196, 0.332432, 0.000000, 0.000000, 0.943127 +197, 0.326498, 0.000000, 0.000000, 0.945198 +198, 0.320551, 0.000000, 0.000000, 0.947231 +199, 0.314591, 0.000000, 0.000000, 0.949227 +200, 0.308618, 0.000000, 0.000000, 0.951186 +201, 0.302634, 0.000000, 0.000000, 0.953107 +202, 0.296637, 0.000000, 0.000000, 0.954990 +203, 0.290629, 0.000000, 0.000000, 0.956836 +204, 0.284610, 0.000000, 0.000000, 0.958644 +205, 0.278579, 0.000000, 0.000000, 0.960413 +206, 0.272537, 0.000000, 0.000000, 0.962145 +207, 0.266484, 0.000000, 0.000000, 0.963839 +208, 0.260421, 0.000000, 0.000000, 0.965495 +209, 0.254347, 0.000000, 0.000000, 0.967113 +210, 0.248264, 0.000000, 0.000000, 0.968692 +211, 0.242170, 0.000000, 0.000000, 0.970234 +212, 0.236067, 0.000000, 0.000000, 0.971737 +213, 0.229955, 0.000000, 0.000000, 0.973201 +214, 0.223834, 0.000000, 0.000000, 0.974627 +215, 0.217704, 0.000000, 0.000000, 0.976015 +216, 0.211565, 0.000000, 0.000000, 0.977364 +217, 0.205418, 0.000000, 0.000000, 0.978674 +218, 0.199262, 0.000000, 0.000000, 0.979946 +219, 0.193099, 0.000000, 0.000000, 0.981179 +220, 0.186929, 0.000000, 0.000000, 0.982374 +221, 0.180750, 0.000000, 0.000000, 0.983529 +222, 0.174565, 0.000000, 0.000000, 0.984646 +223, 0.168373, 0.000000, 0.000000, 0.985723 +224, 0.162174, 0.000000, 0.000000, 0.986762 +225, 0.155969, 0.000000, 0.000000, 0.987762 +226, 0.149757, 0.000000, 0.000000, 0.988723 +227, 0.143540, 0.000000, 0.000000, 0.989644 +228, 0.137317, 0.000000, 0.000000, 0.990527 +229, 0.131089, 0.000000, 0.000000, 0.991371 +230, 0.124855, 0.000000, 0.000000, 0.992175 +231, 0.118617, 0.000000, 0.000000, 0.992940 +232, 0.112373, 0.000000, 0.000000, 0.993666 +233, 0.106126, 0.000000, 0.000000, 0.994353 +234, 0.099874, 0.000000, 0.000000, 0.995000 +235, 0.093618, 0.000000, 0.000000, 0.995608 +236, 0.087359, 0.000000, 0.000000, 0.996177 +237, 0.081096, 0.000000, 0.000000, 0.996706 +238, 0.074830, 0.000000, 0.000000, 0.997196 +239, 0.068560, 0.000000, 0.000000, 0.997647 +240, 0.062289, 0.000000, 0.000000, 0.998058 +241, 0.056014, 0.000000, 0.000000, 0.998430 +242, 0.049738, 0.000000, 0.000000, 0.998762 +243, 0.043459, 0.000000, 0.000000, 0.999055 +244, 0.037179, 0.000000, 0.000000, 0.999309 +245, 0.030898, 0.000000, 0.000000, 0.999523 +246, 0.024615, 0.000000, 0.000000, 0.999697 +247, 0.018331, 0.000000, 0.000000, 0.999832 +248, 0.012046, 0.000000, 0.000000, 0.999927 +249, 0.005761, 0.000000, 0.000000, 0.999983 +250, -0.000524, -0.000000, 0.000000, 1.000000 +251, -0.006809, -0.000000, 0.000000, 0.999977 +252, -0.013094, -0.000000, 0.000000, 0.999914 +253, -0.019378, -0.000000, 0.000000, 0.999812 +254, -0.025662, -0.000000, 0.000000, 0.999671 +255, -0.031945, -0.000000, 0.000000, 0.999490 +256, -0.038226, -0.000000, 0.000000, 0.999269 +257, -0.044506, -0.000000, 0.000000, 0.999009 +258, -0.050784, -0.000000, 0.000000, 0.998710 +259, -0.057060, -0.000000, 0.000000, 0.998371 +260, -0.063334, -0.000000, 0.000000, 0.997992 +261, -0.069606, -0.000000, 0.000000, 0.997575 +262, -0.075874, -0.000000, 0.000000, 0.997117 +263, -0.082140, -0.000000, 0.000000, 0.996621 +264, -0.088402, -0.000000, 0.000000, 0.996085 +265, -0.094661, -0.000000, 0.000000, 0.995510 +266, -0.100916, -0.000000, 0.000000, 0.994895 +267, -0.107167, -0.000000, 0.000000, 0.994241 +268, -0.113414, -0.000000, 0.000000, 0.993548 +269, -0.119657, -0.000000, 0.000000, 0.992815 +270, -0.125894, -0.000000, 0.000000, 0.992044 +271, -0.132127, -0.000000, 0.000000, 0.991233 +272, -0.138355, -0.000000, 0.000000, 0.990383 +273, -0.144577, -0.000000, 0.000000, 0.989494 +274, -0.150793, -0.000000, 0.000000, 0.988565 +275, -0.157003, -0.000000, 0.000000, 0.987598 +276, -0.163208, -0.000000, 0.000000, 0.986592 +277, -0.169405, -0.000000, 0.000000, 0.985546 +278, -0.175596, -0.000000, 0.000000, 0.984462 +279, -0.181781, -0.000000, 0.000000, 0.983339 +280, -0.187958, -0.000000, 0.000000, 0.982177 +281, -0.194127, -0.000000, 0.000000, 0.980976 +282, -0.200289, -0.000000, 0.000000, 0.979737 +283, -0.206443, -0.000000, 0.000000, 0.978459 +284, -0.212589, -0.000000, 0.000000, 0.977142 +285, -0.218726, -0.000000, 0.000000, 0.975786 +286, -0.224855, -0.000000, 0.000000, 0.974392 +287, -0.230975, -0.000000, 0.000000, 0.972960 +288, -0.237085, -0.000000, 0.000000, 0.971489 +289, -0.243187, -0.000000, 0.000000, 0.969980 +290, -0.249278, -0.000000, 0.000000, 0.968432 +291, -0.255360, -0.000000, 0.000000, 0.966846 +292, -0.261432, -0.000000, 0.000000, 0.965222 +293, -0.267494, -0.000000, 0.000000, 0.963560 +294, -0.273544, -0.000000, 0.000000, 0.961859 +295, -0.279585, -0.000000, 0.000000, 0.960121 +296, -0.285614, -0.000000, 0.000000, 0.958345 +297, -0.291631, -0.000000, 0.000000, 0.956531 +298, -0.297638, -0.000000, 0.000000, 0.954679 +299, -0.303632, -0.000000, 0.000000, 0.952789 +300, -0.309615, -0.000000, 0.000000, 0.950862 +301, -0.315585, -0.000000, 0.000000, 0.948897 +302, -0.321543, -0.000000, 0.000000, 0.946895 +303, -0.327488, -0.000000, 0.000000, 0.944855 +304, -0.333420, -0.000000, 0.000000, 0.942778 +305, -0.339339, -0.000000, 0.000000, 0.940664 +306, -0.345245, -0.000000, 0.000000, 0.938513 +307, -0.351137, -0.000000, 0.000000, 0.936324 +308, -0.357015, -0.000000, 0.000000, 0.934099 +309, -0.362879, -0.000000, 0.000000, 0.931836 +310, -0.368728, -0.000000, 0.000000, 0.929537 +311, -0.374563, -0.000000, 0.000000, 0.927201 +312, -0.380384, -0.000000, 0.000000, 0.924829 +313, -0.386189, -0.000000, 0.000000, 0.922420 +314, -0.391979, -0.000000, 0.000000, 0.919974 +315, -0.397753, -0.000000, 0.000000, 0.917492 +316, -0.403512, -0.000000, 0.000000, 0.914974 +317, -0.409255, -0.000000, 0.000000, 0.912420 +318, -0.414982, -0.000000, 0.000000, 0.909830 +319, -0.420692, -0.000000, 0.000000, 0.907203 +320, -0.426386, -0.000000, 0.000000, 0.904541 +321, -0.432063, -0.000000, 0.000000, 0.901844 +322, -0.437722, -0.000000, 0.000000, 0.899110 +323, -0.443365, -0.000000, 0.000000, 0.896341 +324, -0.448990, -0.000000, 0.000000, 0.893537 +325, -0.454597, -0.000000, 0.000000, 0.890697 +326, -0.460186, -0.000000, 0.000000, 0.887822 +327, -0.465757, -0.000000, 0.000000, 0.884912 +328, -0.471310, -0.000000, 0.000000, 0.881968 +329, -0.476844, -0.000000, 0.000000, 0.878988 +330, -0.482359, -0.000000, 0.000000, 0.875973 +331, -0.487856, -0.000000, 0.000000, 0.872924 +332, -0.493332, -0.000000, 0.000000, 0.869841 +333, -0.498790, -0.000000, 0.000000, 0.866723 +334, -0.504228, -0.000000, 0.000000, 0.863571 +335, -0.509645, -0.000000, 0.000000, 0.860385 +336, -0.515043, -0.000000, 0.000000, 0.857164 +337, -0.520420, -0.000000, 0.000000, 0.853910 +338, -0.525777, -0.000000, 0.000000, 0.850622 +339, -0.531113, -0.000000, 0.000000, 0.847301 +340, -0.536428, -0.000000, 0.000000, 0.843946 +341, -0.541722, -0.000000, 0.000000, 0.840558 +342, -0.546994, -0.000000, 0.000000, 0.837136 +343, -0.552245, -0.000000, 0.000000, 0.833682 +344, -0.557474, -0.000000, 0.000000, 0.830194 +345, -0.562681, -0.000000, 0.000000, 0.826674 +346, -0.567866, -0.000000, 0.000000, 0.823121 +347, -0.573028, -0.000000, 0.000000, 0.819536 +348, -0.578168, -0.000000, 0.000000, 0.815918 +349, -0.583285, -0.000000, 0.000000, 0.812268 +350, -0.588378, -0.000000, 0.000000, 0.808586 +351, -0.593449, -0.000000, 0.000000, 0.804872 +352, -0.598496, -0.000000, 0.000000, 0.801126 +353, -0.603519, -0.000000, 0.000000, 0.797348 +354, -0.608519, -0.000000, 0.000000, 0.793539 +355, -0.613495, -0.000000, 0.000000, 0.789699 +356, -0.618446, -0.000000, 0.000000, 0.785827 +357, -0.623373, -0.000000, 0.000000, 0.781925 +358, -0.628275, -0.000000, 0.000000, 0.777991 +359, -0.633153, -0.000000, 0.000000, 0.774027 +360, -0.638005, -0.000000, 0.000000, 0.770032 +361, -0.642832, -0.000000, 0.000000, 0.766007 +362, -0.647634, -0.000000, 0.000000, 0.761952 +363, -0.652410, -0.000000, 0.000000, 0.757866 +364, -0.657161, -0.000000, 0.000000, 0.753750 +365, -0.661885, -0.000000, 0.000000, 0.749605 +366, -0.666584, -0.000000, 0.000000, 0.745430 +367, -0.671256, -0.000000, 0.000000, 0.741226 +368, -0.675901, -0.000000, 0.000000, 0.736992 +369, -0.680520, -0.000000, 0.000000, 0.732729 +370, -0.685112, -0.000000, 0.000000, 0.728438 +371, -0.689677, -0.000000, 0.000000, 0.724117 +372, -0.694214, -0.000000, 0.000000, 0.719768 +373, -0.698725, -0.000000, 0.000000, 0.715391 +374, -0.703207, -0.000000, 0.000000, 0.710985 +375, -0.707662, -0.000000, 0.000000, 0.706551 +376, -0.712089, -0.000000, 0.000000, 0.702089 +377, -0.716488, -0.000000, 0.000000, 0.697600 +378, -0.720858, -0.000000, 0.000000, 0.693083 +379, -0.725200, -0.000000, 0.000000, 0.688538 +380, -0.729513, -0.000000, 0.000000, 0.683967 +381, -0.733798, -0.000000, 0.000000, 0.679368 +382, -0.738053, -0.000000, 0.000000, 0.674742 +383, -0.742280, -0.000000, 0.000000, 0.670090 +384, -0.746477, -0.000000, 0.000000, 0.665412 +385, -0.750644, -0.000000, 0.000000, 0.660707 +386, -0.754782, -0.000000, 0.000000, 0.655976 +387, -0.758890, -0.000000, 0.000000, 0.651219 +388, -0.762968, -0.000000, 0.000000, 0.646436 +389, -0.767016, -0.000000, 0.000000, 0.641628 +390, -0.771034, -0.000000, 0.000000, 0.636794 +391, -0.775021, -0.000000, 0.000000, 0.631935 +392, -0.778978, -0.000000, 0.000000, 0.627052 +393, -0.782903, -0.000000, 0.000000, 0.622143 +394, -0.786798, -0.000000, 0.000000, 0.617210 +395, -0.790662, -0.000000, 0.000000, 0.612253 +396, -0.794494, -0.000000, 0.000000, 0.607271 +397, -0.798296, -0.000000, 0.000000, 0.602266 +398, -0.802065, -0.000000, 0.000000, 0.597236 +399, -0.805803, -0.000000, 0.000000, 0.592183 +400, -0.809509, -0.000000, 0.000000, 0.587107 +401, -0.813183, -0.000000, 0.000000, 0.582008 +402, -0.816825, -0.000000, 0.000000, 0.576885 +403, -0.820435, -0.000000, 0.000000, 0.571740 +404, -0.824012, -0.000000, 0.000000, 0.566572 +405, -0.827557, -0.000000, 0.000000, 0.561381 +406, -0.831069, -0.000000, 0.000000, 0.556169 +407, -0.834549, -0.000000, 0.000000, 0.550934 +408, -0.837995, -0.000000, 0.000000, 0.545678 +409, -0.841408, -0.000000, 0.000000, 0.540400 +410, -0.844788, -0.000000, 0.000000, 0.535101 +411, -0.848134, -0.000000, 0.000000, 0.529781 +412, -0.851447, -0.000000, 0.000000, 0.524440 +413, -0.854727, -0.000000, 0.000000, 0.519078 +414, -0.857973, -0.000000, 0.000000, 0.513696 +415, -0.861184, -0.000000, 0.000000, 0.508293 +416, -0.864362, -0.000000, 0.000000, 0.502870 +417, -0.867506, -0.000000, 0.000000, 0.497427 +418, -0.870615, -0.000000, 0.000000, 0.491965 +419, -0.873690, -0.000000, 0.000000, 0.486483 +420, -0.876730, -0.000000, 0.000000, 0.480982 +421, -0.879736, -0.000000, 0.000000, 0.475462 +422, -0.882707, -0.000000, 0.000000, 0.469924 +423, -0.885643, -0.000000, 0.000000, 0.464366 +424, -0.888544, -0.000000, 0.000000, 0.458791 +425, -0.891410, -0.000000, 0.000000, 0.453197 +426, -0.894241, -0.000000, 0.000000, 0.447585 +427, -0.897037, -0.000000, 0.000000, 0.441956 +428, -0.899797, -0.000000, 0.000000, 0.436309 +429, -0.902521, -0.000000, 0.000000, 0.430645 +430, -0.905210, -0.000000, 0.000000, 0.424964 +431, -0.907863, -0.000000, 0.000000, 0.419266 +432, -0.910481, -0.000000, 0.000000, 0.413552 +433, -0.913062, -0.000000, 0.000000, 0.407821 +434, -0.915607, -0.000000, 0.000000, 0.402074 +435, -0.918116, -0.000000, 0.000000, 0.396311 +436, -0.920589, -0.000000, 0.000000, 0.390533 +437, -0.923025, -0.000000, 0.000000, 0.384739 +438, -0.925425, -0.000000, 0.000000, 0.378930 +439, -0.927789, -0.000000, 0.000000, 0.373106 +440, -0.930115, -0.000000, 0.000000, 0.367267 +441, -0.932405, -0.000000, 0.000000, 0.361414 +442, -0.934659, -0.000000, 0.000000, 0.355547 +443, -0.936875, -0.000000, 0.000000, 0.349665 +444, -0.939054, -0.000000, 0.000000, 0.343770 +445, -0.941196, -0.000000, 0.000000, 0.337861 +446, -0.943301, -0.000000, 0.000000, 0.331938 +447, -0.945369, -0.000000, 0.000000, 0.326003 +448, -0.947399, -0.000000, 0.000000, 0.320055 +449, -0.949392, -0.000000, 0.000000, 0.314094 +450, -0.951347, -0.000000, 0.000000, 0.308120 +451, -0.953265, -0.000000, 0.000000, 0.302135 +452, -0.955145, -0.000000, 0.000000, 0.296137 +453, -0.956988, -0.000000, 0.000000, 0.290128 +454, -0.958792, -0.000000, 0.000000, 0.284107 +455, -0.960559, -0.000000, 0.000000, 0.278076 +456, -0.962288, -0.000000, 0.000000, 0.272033 +457, -0.963979, -0.000000, 0.000000, 0.265979 +458, -0.965631, -0.000000, 0.000000, 0.259915 +459, -0.967246, -0.000000, 0.000000, 0.253841 +460, -0.968822, -0.000000, 0.000000, 0.247756 +461, -0.970360, -0.000000, 0.000000, 0.241662 +462, -0.971860, -0.000000, 0.000000, 0.235558 +463, -0.973322, -0.000000, 0.000000, 0.229445 +464, -0.974744, -0.000000, 0.000000, 0.223323 +465, -0.976129, -0.000000, 0.000000, 0.217192 +466, -0.977475, -0.000000, 0.000000, 0.211053 +467, -0.978782, -0.000000, 0.000000, 0.204905 +468, -0.980050, -0.000000, 0.000000, 0.198749 +469, -0.981280, -0.000000, 0.000000, 0.192585 +470, -0.982471, -0.000000, 0.000000, 0.186414 +471, -0.983624, -0.000000, 0.000000, 0.180235 +472, -0.984737, -0.000000, 0.000000, 0.174049 +473, -0.985811, -0.000000, 0.000000, 0.167857 +474, -0.986847, -0.000000, 0.000000, 0.161657 +475, -0.987844, -0.000000, 0.000000, 0.155451 +476, -0.988801, -0.000000, 0.000000, 0.149240 +477, -0.989720, -0.000000, 0.000000, 0.143022 +478, -0.990599, -0.000000, 0.000000, 0.136798 +479, -0.991439, -0.000000, 0.000000, 0.130569 +480, -0.992240, -0.000000, 0.000000, 0.124335 +481, -0.993002, -0.000000, 0.000000, 0.118097 +482, -0.993725, -0.000000, 0.000000, 0.111853 +483, -0.994408, -0.000000, 0.000000, 0.105605 +484, -0.995052, -0.000000, 0.000000, 0.099353 +485, -0.995657, -0.000000, 0.000000, 0.093097 +486, -0.996223, -0.000000, 0.000000, 0.086837 +487, -0.996749, -0.000000, 0.000000, 0.080574 +488, -0.997235, -0.000000, 0.000000, 0.074307 +489, -0.997683, -0.000000, 0.000000, 0.068038 +490, -0.998091, -0.000000, 0.000000, 0.061766 +491, -0.998459, -0.000000, 0.000000, 0.055491 +492, -0.998788, -0.000000, 0.000000, 0.049215 +493, -0.999078, -0.000000, 0.000000, 0.042936 +494, -0.999328, -0.000000, 0.000000, 0.036656 +495, -0.999539, -0.000000, 0.000000, 0.030374 +496, -0.999710, -0.000000, 0.000000, 0.024091 +497, -0.999841, -0.000000, 0.000000, 0.017807 +498, -0.999934, -0.000000, 0.000000, 0.011523 +499, -0.999986, -0.000000, 0.000000, 0.005238 +500, -0.999999, 0.000000, -0.000000, -0.001048 +501, -0.999973, 0.000000, -0.000000, -0.007333 +502, -0.999907, 0.000000, -0.000000, -0.013618 +503, -0.999802, 0.000000, -0.000000, -0.019902 +504, -0.999657, 0.000000, -0.000000, -0.026186 +505, -0.999473, 0.000000, -0.000000, -0.032468 +506, -0.999249, 0.000000, -0.000000, -0.038750 +507, -0.998986, 0.000000, -0.000000, -0.045029 +508, -0.998683, 0.000000, -0.000000, -0.051307 +509, -0.998341, 0.000000, -0.000000, -0.057583 +510, -0.997959, 0.000000, -0.000000, -0.063857 +511, -0.997538, 0.000000, -0.000000, -0.070128 +512, -0.997078, 0.000000, -0.000000, -0.076396 +513, -0.996578, 0.000000, -0.000000, -0.082662 +514, -0.996038, 0.000000, -0.000000, -0.088924 +515, -0.995460, 0.000000, -0.000000, -0.095182 +516, -0.994842, 0.000000, -0.000000, -0.101437 +517, -0.994185, 0.000000, -0.000000, -0.107688 +518, -0.993488, 0.000000, -0.000000, -0.113935 +519, -0.992753, 0.000000, -0.000000, -0.120177 +520, -0.991978, 0.000000, -0.000000, -0.126414 +521, -0.991163, 0.000000, -0.000000, -0.132646 +522, -0.990310, 0.000000, -0.000000, -0.138873 +523, -0.989418, 0.000000, -0.000000, -0.145095 +524, -0.988486, 0.000000, -0.000000, -0.151311 +525, -0.987516, 0.000000, -0.000000, -0.157521 +526, -0.986506, 0.000000, -0.000000, -0.163724 +527, -0.985458, 0.000000, -0.000000, -0.169922 +528, -0.984370, 0.000000, -0.000000, -0.176112 +529, -0.983244, 0.000000, -0.000000, -0.182296 +530, -0.982079, 0.000000, -0.000000, -0.188472 +531, -0.980875, 0.000000, -0.000000, -0.194641 +532, -0.979632, 0.000000, -0.000000, -0.200802 +533, -0.978350, 0.000000, -0.000000, -0.206955 +534, -0.977030, 0.000000, -0.000000, -0.213100 +535, -0.975672, 0.000000, -0.000000, -0.219237 +536, -0.974274, 0.000000, -0.000000, -0.225365 +537, -0.972839, 0.000000, -0.000000, -0.231484 +538, -0.971365, 0.000000, -0.000000, -0.237594 +539, -0.969852, 0.000000, -0.000000, -0.243695 +540, -0.968301, 0.000000, -0.000000, -0.249786 +541, -0.966712, 0.000000, -0.000000, -0.255867 +542, -0.965085, 0.000000, -0.000000, -0.261938 +543, -0.963419, 0.000000, -0.000000, -0.267998 +544, -0.961716, 0.000000, -0.000000, -0.274048 +545, -0.959975, 0.000000, -0.000000, -0.280087 +546, -0.958195, 0.000000, -0.000000, -0.286116 +547, -0.956378, 0.000000, -0.000000, -0.292132 +548, -0.954523, 0.000000, -0.000000, -0.298138 +549, -0.952630, 0.000000, -0.000000, -0.304131 +550, -0.950700, 0.000000, -0.000000, -0.310113 +551, -0.948732, 0.000000, -0.000000, -0.316082 +552, -0.946727, 0.000000, -0.000000, -0.322039 +553, -0.944684, 0.000000, -0.000000, -0.327983 +554, -0.942604, 0.000000, -0.000000, -0.333914 +555, -0.940486, 0.000000, -0.000000, -0.339832 +556, -0.938332, 0.000000, -0.000000, -0.345736 +557, -0.936140, 0.000000, -0.000000, -0.351627 +558, -0.933912, 0.000000, -0.000000, -0.357504 +559, -0.931646, 0.000000, -0.000000, -0.363367 +560, -0.929344, 0.000000, -0.000000, -0.369215 +561, -0.927005, 0.000000, -0.000000, -0.375049 +562, -0.924629, 0.000000, -0.000000, -0.380868 +563, -0.922217, 0.000000, -0.000000, -0.386672 +564, -0.919769, 0.000000, -0.000000, -0.392461 +565, -0.917284, 0.000000, -0.000000, -0.398234 +566, -0.914763, 0.000000, -0.000000, -0.403991 +567, -0.912206, 0.000000, -0.000000, -0.409733 +568, -0.909612, 0.000000, -0.000000, -0.415458 +569, -0.906983, 0.000000, -0.000000, -0.421167 +570, -0.904318, 0.000000, -0.000000, -0.426860 +571, -0.901617, 0.000000, -0.000000, -0.432535 +572, -0.898881, 0.000000, -0.000000, -0.438193 +573, -0.896109, 0.000000, -0.000000, -0.443834 +574, -0.893302, 0.000000, -0.000000, -0.449458 +575, -0.890459, 0.000000, -0.000000, -0.455064 +576, -0.887581, 0.000000, -0.000000, -0.460651 +577, -0.884668, 0.000000, -0.000000, -0.466221 +578, -0.881721, 0.000000, -0.000000, -0.471772 +579, -0.878738, 0.000000, -0.000000, -0.477305 +580, -0.875721, 0.000000, -0.000000, -0.482818 +581, -0.872669, 0.000000, -0.000000, -0.488313 +582, -0.869582, 0.000000, -0.000000, -0.493788 +583, -0.866462, 0.000000, -0.000000, -0.499244 +584, -0.863307, 0.000000, -0.000000, -0.504680 +585, -0.860117, 0.000000, -0.000000, -0.510096 +586, -0.856894, 0.000000, -0.000000, -0.515492 +587, -0.853638, 0.000000, -0.000000, -0.520868 +588, -0.850347, 0.000000, -0.000000, -0.526223 +589, -0.847023, 0.000000, -0.000000, -0.531557 +590, -0.843665, 0.000000, -0.000000, -0.536870 +591, -0.840274, 0.000000, -0.000000, -0.542162 +592, -0.836850, 0.000000, -0.000000, -0.547433 +593, -0.833392, 0.000000, -0.000000, -0.552682 +594, -0.829902, 0.000000, -0.000000, -0.557909 +595, -0.826379, 0.000000, -0.000000, -0.563114 +596, -0.822824, 0.000000, -0.000000, -0.568297 +597, -0.819235, 0.000000, -0.000000, -0.573457 +598, -0.815615, 0.000000, -0.000000, -0.578595 +599, -0.811962, 0.000000, -0.000000, -0.583710 +600, -0.808277, 0.000000, -0.000000, -0.588802 +601, -0.804561, 0.000000, -0.000000, -0.593870 +602, -0.800812, 0.000000, -0.000000, -0.598915 +603, -0.797032, 0.000000, -0.000000, -0.603937 +604, -0.793220, 0.000000, -0.000000, -0.608935 +605, -0.789377, 0.000000, -0.000000, -0.613908 +606, -0.785503, 0.000000, -0.000000, -0.618857 +607, -0.781598, 0.000000, -0.000000, -0.623782 +608, -0.777662, 0.000000, -0.000000, -0.628682 +609, -0.773695, 0.000000, -0.000000, -0.633558 +610, -0.769698, 0.000000, -0.000000, -0.638408 +611, -0.765670, 0.000000, -0.000000, -0.643233 +612, -0.761612, 0.000000, -0.000000, -0.648033 +613, -0.757524, 0.000000, -0.000000, -0.652807 +614, -0.753406, 0.000000, -0.000000, -0.657555 +615, -0.749258, 0.000000, -0.000000, -0.662278 +616, -0.745081, 0.000000, -0.000000, -0.666974 +617, -0.740874, 0.000000, -0.000000, -0.671644 +618, -0.736638, 0.000000, -0.000000, -0.676287 +619, -0.732373, 0.000000, -0.000000, -0.680904 +620, -0.728079, 0.000000, -0.000000, -0.685493 +621, -0.723756, 0.000000, -0.000000, -0.690056 +622, -0.719404, 0.000000, -0.000000, -0.694591 +623, -0.715025, 0.000000, -0.000000, -0.699099 +624, -0.710616, 0.000000, -0.000000, -0.703580 +625, -0.706180, 0.000000, -0.000000, -0.708032 +626, -0.701716, 0.000000, -0.000000, -0.712457 +627, -0.697224, 0.000000, -0.000000, -0.716853 +628, -0.692705, 0.000000, -0.000000, -0.721221 +629, -0.688158, 0.000000, -0.000000, -0.725561 +630, -0.683584, 0.000000, -0.000000, -0.729872 +631, -0.678983, 0.000000, -0.000000, -0.734154 +632, -0.674356, 0.000000, -0.000000, -0.738407 +633, -0.669701, 0.000000, -0.000000, -0.742631 +634, -0.665020, 0.000000, -0.000000, -0.746825 +635, -0.660313, 0.000000, -0.000000, -0.750990 +636, -0.655580, 0.000000, -0.000000, -0.755126 +637, -0.650821, 0.000000, -0.000000, -0.759231 +638, -0.646036, 0.000000, -0.000000, -0.763307 +639, -0.641226, 0.000000, -0.000000, -0.767352 +640, -0.636390, 0.000000, -0.000000, -0.771367 +641, -0.631529, 0.000000, -0.000000, -0.775352 +642, -0.626644, 0.000000, -0.000000, -0.779306 +643, -0.621733, 0.000000, -0.000000, -0.783229 +644, -0.616798, 0.000000, -0.000000, -0.787121 +645, -0.611839, 0.000000, -0.000000, -0.790983 +646, -0.606855, 0.000000, -0.000000, -0.794812 +647, -0.601848, 0.000000, -0.000000, -0.798611 +648, -0.596816, 0.000000, -0.000000, -0.802378 +649, -0.591761, 0.000000, -0.000000, -0.806113 +650, -0.586683, 0.000000, -0.000000, -0.809817 +651, -0.581581, 0.000000, -0.000000, -0.813488 +652, -0.576457, 0.000000, -0.000000, -0.817127 +653, -0.571310, 0.000000, -0.000000, -0.820734 +654, -0.566140, 0.000000, -0.000000, -0.824309 +655, -0.560948, 0.000000, -0.000000, -0.827851 +656, -0.555734, 0.000000, -0.000000, -0.831360 +657, -0.550497, 0.000000, -0.000000, -0.834837 +658, -0.545239, 0.000000, -0.000000, -0.838280 +659, -0.539960, 0.000000, -0.000000, -0.841691 +660, -0.534659, 0.000000, -0.000000, -0.845068 +661, -0.529337, 0.000000, -0.000000, -0.848412 +662, -0.523994, 0.000000, -0.000000, -0.851722 +663, -0.518630, 0.000000, -0.000000, -0.854999 +664, -0.513246, 0.000000, -0.000000, -0.858241 +665, -0.507842, 0.000000, -0.000000, -0.861450 +666, -0.502417, 0.000000, -0.000000, -0.864625 +667, -0.496973, 0.000000, -0.000000, -0.867766 +668, -0.491509, 0.000000, -0.000000, -0.870872 +669, -0.486026, 0.000000, -0.000000, -0.873945 +670, -0.480523, 0.000000, -0.000000, -0.876982 +671, -0.475002, 0.000000, -0.000000, -0.879985 +672, -0.469461, 0.000000, -0.000000, -0.882953 +673, -0.463902, 0.000000, -0.000000, -0.885886 +674, -0.458325, 0.000000, -0.000000, -0.888785 +675, -0.452730, 0.000000, -0.000000, -0.891648 +676, -0.447117, 0.000000, -0.000000, -0.894476 +677, -0.441486, 0.000000, -0.000000, -0.897268 +678, -0.435838, 0.000000, -0.000000, -0.900025 +679, -0.430172, 0.000000, -0.000000, -0.902747 +680, -0.424490, 0.000000, -0.000000, -0.905433 +681, -0.418791, 0.000000, -0.000000, -0.908083 +682, -0.413075, 0.000000, -0.000000, -0.910697 +683, -0.407343, 0.000000, -0.000000, -0.913275 +684, -0.401594, 0.000000, -0.000000, -0.915818 +685, -0.395830, 0.000000, -0.000000, -0.918324 +686, -0.390051, 0.000000, -0.000000, -0.920793 +687, -0.384256, 0.000000, -0.000000, -0.923227 +688, -0.378445, 0.000000, -0.000000, -0.925624 +689, -0.372620, 0.000000, -0.000000, -0.927984 +690, -0.366780, 0.000000, -0.000000, -0.930308 +691, -0.360926, 0.000000, -0.000000, -0.932595 +692, -0.355057, 0.000000, -0.000000, -0.934845 +693, -0.349174, 0.000000, -0.000000, -0.937058 +694, -0.343278, 0.000000, -0.000000, -0.939234 +695, -0.337368, 0.000000, -0.000000, -0.941373 +696, -0.331444, 0.000000, -0.000000, -0.943475 +697, -0.325508, 0.000000, -0.000000, -0.945539 +698, -0.319558, 0.000000, -0.000000, -0.947567 +699, -0.313596, 0.000000, -0.000000, -0.949556 +700, -0.307622, 0.000000, -0.000000, -0.951509 +701, -0.301635, 0.000000, -0.000000, -0.953423 +702, -0.295637, 0.000000, -0.000000, -0.955300 +703, -0.289627, 0.000000, -0.000000, -0.957140 +704, -0.283605, 0.000000, -0.000000, -0.958941 +705, -0.277572, 0.000000, -0.000000, -0.960705 +706, -0.271529, 0.000000, -0.000000, -0.962430 +707, -0.265474, 0.000000, -0.000000, -0.964118 +708, -0.259409, 0.000000, -0.000000, -0.965767 +709, -0.253334, 0.000000, -0.000000, -0.967379 +710, -0.247249, 0.000000, -0.000000, -0.968952 +711, -0.241154, 0.000000, -0.000000, -0.970487 +712, -0.235049, 0.000000, -0.000000, -0.971983 +713, -0.228936, 0.000000, -0.000000, -0.973442 +714, -0.222813, 0.000000, -0.000000, -0.974861 +715, -0.216681, 0.000000, -0.000000, -0.976242 +716, -0.210541, 0.000000, -0.000000, -0.977585 +717, -0.204392, 0.000000, -0.000000, -0.978889 +718, -0.198236, 0.000000, -0.000000, -0.980154 +719, -0.192071, 0.000000, -0.000000, -0.981381 +720, -0.185899, 0.000000, -0.000000, -0.982569 +721, -0.179720, 0.000000, -0.000000, -0.983718 +722, -0.173534, 0.000000, -0.000000, -0.984828 +723, -0.167340, 0.000000, -0.000000, -0.985899 +724, -0.161140, 0.000000, -0.000000, -0.986932 +725, -0.154934, 0.000000, -0.000000, -0.987925 +726, -0.148722, 0.000000, -0.000000, -0.988879 +727, -0.142503, 0.000000, -0.000000, -0.989794 +728, -0.136279, 0.000000, -0.000000, -0.990670 +729, -0.130050, 0.000000, -0.000000, -0.991507 +730, -0.123816, 0.000000, -0.000000, -0.992305 +731, -0.117576, 0.000000, -0.000000, -0.993064 +732, -0.111332, 0.000000, -0.000000, -0.993783 +733, -0.105084, 0.000000, -0.000000, -0.994463 +734, -0.098832, 0.000000, -0.000000, -0.995104 +735, -0.092575, 0.000000, -0.000000, -0.995706 +736, -0.086315, 0.000000, -0.000000, -0.996268 +737, -0.080052, 0.000000, -0.000000, -0.996791 +738, -0.073785, 0.000000, -0.000000, -0.997274 +739, -0.067515, 0.000000, -0.000000, -0.997718 +740, -0.061243, 0.000000, -0.000000, -0.998123 +741, -0.054968, 0.000000, -0.000000, -0.998488 +742, -0.048692, 0.000000, -0.000000, -0.998814 +743, -0.042413, 0.000000, -0.000000, -0.999100 +744, -0.036132, 0.000000, -0.000000, -0.999347 +745, -0.029851, 0.000000, -0.000000, -0.999554 +746, -0.023568, 0.000000, -0.000000, -0.999722 +747, -0.017284, 0.000000, -0.000000, -0.999851 +748, -0.010999, 0.000000, -0.000000, -0.999940 +749, -0.004714, 0.000000, -0.000000, -0.999989 +750, 0.001571, 0.000000, 0.000000, -0.999999 +751, 0.007857, 0.000000, 0.000000, -0.999969 +752, 0.014141, 0.000000, 0.000000, -0.999900 +753, 0.020426, 0.000000, 0.000000, -0.999791 +754, 0.026709, 0.000000, 0.000000, -0.999643 +755, 0.032992, 0.000000, 0.000000, -0.999456 +756, 0.039273, 0.000000, 0.000000, -0.999229 +757, 0.045553, 0.000000, 0.000000, -0.998962 +758, 0.051830, 0.000000, 0.000000, -0.998656 +759, 0.058106, 0.000000, 0.000000, -0.998310 +760, 0.064380, 0.000000, 0.000000, -0.997925 +761, 0.070650, 0.000000, 0.000000, -0.997501 +762, 0.076919, 0.000000, 0.000000, -0.997037 +763, 0.083184, 0.000000, 0.000000, -0.996534 +764, 0.089446, 0.000000, 0.000000, -0.995992 +765, 0.095704, 0.000000, 0.000000, -0.995410 +766, 0.101958, 0.000000, 0.000000, -0.994789 +767, 0.108209, 0.000000, 0.000000, -0.994128 +768, 0.114455, 0.000000, 0.000000, -0.993428 +769, 0.120697, 0.000000, 0.000000, -0.992689 +770, 0.126934, 0.000000, 0.000000, -0.991911 +771, 0.133165, 0.000000, 0.000000, -0.991094 +772, 0.139392, 0.000000, 0.000000, -0.990237 +773, 0.145613, 0.000000, 0.000000, -0.989342 +774, 0.151829, 0.000000, 0.000000, -0.988407 +775, 0.158038, 0.000000, 0.000000, -0.987433 +776, 0.164241, 0.000000, 0.000000, -0.986420 +777, 0.170438, 0.000000, 0.000000, -0.985368 +778, 0.176628, 0.000000, 0.000000, -0.984278 +779, 0.182811, 0.000000, 0.000000, -0.983148 +780, 0.188986, 0.000000, 0.000000, -0.981980 +781, 0.195155, 0.000000, 0.000000, -0.980773 +782, 0.201315, 0.000000, 0.000000, -0.979527 +783, 0.207468, 0.000000, 0.000000, -0.978242 +784, 0.213612, 0.000000, 0.000000, -0.976919 +785, 0.219748, 0.000000, 0.000000, -0.975557 +786, 0.225875, 0.000000, 0.000000, -0.974156 +787, 0.231994, 0.000000, 0.000000, -0.972717 +788, 0.238103, 0.000000, 0.000000, -0.971240 +789, 0.244203, 0.000000, 0.000000, -0.969724 +790, 0.250293, 0.000000, 0.000000, -0.968170 +791, 0.256373, 0.000000, 0.000000, -0.966578 +792, 0.262443, 0.000000, 0.000000, -0.964947 +793, 0.268503, 0.000000, 0.000000, -0.963279 +794, 0.274552, 0.000000, 0.000000, -0.961572 +795, 0.280590, 0.000000, 0.000000, -0.959828 +796, 0.286617, 0.000000, 0.000000, -0.958045 +797, 0.292633, 0.000000, 0.000000, -0.956225 +798, 0.298638, 0.000000, 0.000000, -0.954367 +799, 0.304630, 0.000000, 0.000000, -0.952471 +800, 0.310611, 0.000000, 0.000000, -0.950537 +801, 0.316579, 0.000000, 0.000000, -0.948566 +802, 0.322535, 0.000000, 0.000000, -0.946558 +803, 0.328478, 0.000000, 0.000000, -0.944512 +804, 0.334407, 0.000000, 0.000000, -0.942429 +805, 0.340324, 0.000000, 0.000000, -0.940308 +806, 0.346228, 0.000000, 0.000000, -0.938151 +807, 0.352117, 0.000000, 0.000000, -0.935956 +808, 0.357993, 0.000000, 0.000000, -0.933724 +809, 0.363855, 0.000000, 0.000000, -0.931456 +810, 0.369702, 0.000000, 0.000000, -0.929150 +811, 0.375535, 0.000000, 0.000000, -0.926808 +812, 0.381352, 0.000000, 0.000000, -0.924430 +813, 0.387155, 0.000000, 0.000000, -0.922015 +814, 0.392942, 0.000000, 0.000000, -0.919563 +815, 0.398714, 0.000000, 0.000000, -0.917075 +816, 0.404471, 0.000000, 0.000000, -0.914551 +817, 0.410211, 0.000000, 0.000000, -0.911991 +818, 0.415935, 0.000000, 0.000000, -0.909394 +819, 0.421642, 0.000000, 0.000000, -0.906762 +820, 0.427333, 0.000000, 0.000000, -0.904094 +821, 0.433007, 0.000000, 0.000000, -0.901390 +822, 0.438664, 0.000000, 0.000000, -0.898651 +823, 0.444304, 0.000000, 0.000000, -0.895876 +824, 0.449926, 0.000000, 0.000000, -0.893066 +825, 0.455530, 0.000000, 0.000000, -0.890220 +826, 0.461116, 0.000000, 0.000000, -0.887340 +827, 0.466684, 0.000000, 0.000000, -0.884424 +828, 0.472234, 0.000000, 0.000000, -0.881473 +829, 0.477765, 0.000000, 0.000000, -0.878488 +830, 0.483277, 0.000000, 0.000000, -0.875468 +831, 0.488770, 0.000000, 0.000000, -0.872413 +832, 0.494243, 0.000000, 0.000000, -0.869324 +833, 0.499698, 0.000000, 0.000000, -0.866200 +834, 0.505132, 0.000000, 0.000000, -0.863042 +835, 0.510546, 0.000000, 0.000000, -0.859850 +836, 0.515941, 0.000000, 0.000000, -0.856624 +837, 0.521315, 0.000000, 0.000000, -0.853365 +838, 0.526668, 0.000000, 0.000000, -0.850071 +839, 0.532000, 0.000000, 0.000000, -0.846744 +840, 0.537312, 0.000000, 0.000000, -0.843384 +841, 0.542602, 0.000000, 0.000000, -0.839990 +842, 0.547871, 0.000000, 0.000000, -0.836563 +843, 0.553118, 0.000000, 0.000000, -0.833103 +844, 0.558343, 0.000000, 0.000000, -0.829610 +845, 0.563547, 0.000000, 0.000000, -0.826084 +846, 0.568728, 0.000000, 0.000000, -0.822526 +847, 0.573886, 0.000000, 0.000000, -0.818935 +848, 0.579022, 0.000000, 0.000000, -0.815312 +849, 0.584135, 0.000000, 0.000000, -0.811656 +850, 0.589225, 0.000000, 0.000000, -0.807969 +851, 0.594292, 0.000000, 0.000000, -0.804250 +852, 0.599335, 0.000000, 0.000000, -0.800498 +853, 0.604354, 0.000000, 0.000000, -0.796716 +854, 0.609350, 0.000000, 0.000000, -0.792901 +855, 0.614321, 0.000000, 0.000000, -0.789056 +856, 0.619269, 0.000000, 0.000000, -0.785179 +857, 0.624192, 0.000000, 0.000000, -0.781271 +858, 0.629090, 0.000000, 0.000000, -0.777333 +859, 0.633963, 0.000000, 0.000000, -0.773363 +860, 0.638811, 0.000000, 0.000000, -0.769363 +861, 0.643634, 0.000000, 0.000000, -0.765333 +862, 0.648432, 0.000000, 0.000000, -0.761273 +863, 0.653204, 0.000000, 0.000000, -0.757182 +864, 0.657950, 0.000000, 0.000000, -0.753062 +865, 0.662670, 0.000000, 0.000000, -0.748911 +866, 0.667364, 0.000000, 0.000000, -0.744732 +867, 0.672032, 0.000000, 0.000000, -0.740522 +868, 0.676673, 0.000000, 0.000000, -0.736284 +869, 0.681287, 0.000000, 0.000000, -0.732016 +870, 0.685875, 0.000000, 0.000000, -0.727720 +871, 0.690435, 0.000000, 0.000000, -0.723394 +872, 0.694968, 0.000000, 0.000000, -0.719041 +873, 0.699474, 0.000000, 0.000000, -0.714658 +874, 0.703952, 0.000000, 0.000000, -0.710248 +875, 0.708402, 0.000000, 0.000000, -0.705809 +876, 0.712824, 0.000000, 0.000000, -0.701343 +877, 0.717218, 0.000000, 0.000000, -0.696849 +878, 0.721584, 0.000000, 0.000000, -0.692327 +879, 0.725921, 0.000000, 0.000000, -0.687778 +880, 0.730229, 0.000000, 0.000000, -0.683202 +881, 0.734509, 0.000000, 0.000000, -0.678599 +882, 0.738760, 0.000000, 0.000000, -0.673969 +883, 0.742981, 0.000000, 0.000000, -0.669312 +884, 0.747173, 0.000000, 0.000000, -0.664629 +885, 0.751336, 0.000000, 0.000000, -0.659920 +886, 0.755469, 0.000000, 0.000000, -0.655185 +887, 0.759572, 0.000000, 0.000000, -0.650423 +888, 0.763645, 0.000000, 0.000000, -0.645636 +889, 0.767688, 0.000000, 0.000000, -0.640824 +890, 0.771700, 0.000000, 0.000000, -0.635986 +891, 0.775683, 0.000000, 0.000000, -0.631123 +892, 0.779634, 0.000000, 0.000000, -0.626235 +893, 0.783555, 0.000000, 0.000000, -0.621323 +894, 0.787444, 0.000000, 0.000000, -0.616386 +895, 0.791303, 0.000000, 0.000000, -0.611424 +896, 0.795130, 0.000000, 0.000000, -0.606439 +897, 0.798926, 0.000000, 0.000000, -0.601429 +898, 0.802690, 0.000000, 0.000000, -0.596396 +899, 0.806423, 0.000000, 0.000000, -0.591339 +900, 0.810124, 0.000000, 0.000000, -0.586259 +901, 0.813793, 0.000000, 0.000000, -0.581155 +902, 0.817429, 0.000000, 0.000000, -0.576029 +903, 0.821034, 0.000000, 0.000000, -0.570880 +904, 0.824606, 0.000000, 0.000000, -0.565708 +905, 0.828145, 0.000000, 0.000000, -0.560514 +906, 0.831651, 0.000000, 0.000000, -0.555298 +907, 0.835125, 0.000000, 0.000000, -0.550060 +908, 0.838566, 0.000000, 0.000000, -0.544800 +909, 0.841974, 0.000000, 0.000000, -0.539519 +910, 0.845348, 0.000000, 0.000000, -0.534216 +911, 0.848689, 0.000000, 0.000000, -0.528892 +912, 0.851996, 0.000000, 0.000000, -0.523548 +913, 0.855270, 0.000000, 0.000000, -0.518182 +914, 0.858510, 0.000000, 0.000000, -0.512797 +915, 0.861716, 0.000000, 0.000000, -0.507390 +916, 0.864888, 0.000000, 0.000000, -0.501964 +917, 0.868026, 0.000000, 0.000000, -0.496518 +918, 0.871130, 0.000000, 0.000000, -0.491053 +919, 0.874199, 0.000000, 0.000000, -0.485568 +920, 0.877234, 0.000000, 0.000000, -0.480064 +921, 0.880234, 0.000000, 0.000000, -0.474541 +922, 0.883199, 0.000000, 0.000000, -0.468999 +923, 0.886129, 0.000000, 0.000000, -0.463438 +924, 0.889024, 0.000000, 0.000000, -0.457860 +925, 0.891885, 0.000000, 0.000000, -0.452263 +926, 0.894710, 0.000000, 0.000000, -0.446648 +927, 0.897499, 0.000000, 0.000000, -0.441016 +928, 0.900253, 0.000000, 0.000000, -0.435366 +929, 0.902972, 0.000000, 0.000000, -0.429699 +930, 0.905655, 0.000000, 0.000000, -0.424015 +931, 0.908302, 0.000000, 0.000000, -0.418315 +932, 0.910913, 0.000000, 0.000000, -0.412598 +933, 0.913489, 0.000000, 0.000000, -0.406864 +934, 0.916028, 0.000000, 0.000000, -0.401115 +935, 0.918531, 0.000000, 0.000000, -0.395349 +936, 0.920998, 0.000000, 0.000000, -0.389568 +937, 0.923428, 0.000000, 0.000000, -0.383772 +938, 0.925822, 0.000000, 0.000000, -0.377960 +939, 0.928179, 0.000000, 0.000000, -0.372134 +940, 0.930500, 0.000000, 0.000000, -0.366293 +941, 0.932784, 0.000000, 0.000000, -0.360437 +942, 0.935031, 0.000000, 0.000000, -0.354567 +943, 0.937241, 0.000000, 0.000000, -0.348683 +944, 0.939414, 0.000000, 0.000000, -0.342786 +945, 0.941550, 0.000000, 0.000000, -0.336874 +946, 0.943648, 0.000000, 0.000000, -0.330950 +947, 0.945710, 0.000000, 0.000000, -0.325012 +948, 0.947734, 0.000000, 0.000000, -0.319062 +949, 0.949721, 0.000000, 0.000000, -0.313099 +950, 0.951670, 0.000000, 0.000000, -0.307123 +951, 0.953581, 0.000000, 0.000000, -0.301136 +952, 0.955455, 0.000000, 0.000000, -0.295136 +953, 0.957291, 0.000000, 0.000000, -0.289125 +954, 0.959090, 0.000000, 0.000000, -0.283103 +955, 0.960850, 0.000000, 0.000000, -0.277069 +956, 0.962572, 0.000000, 0.000000, -0.271025 +957, 0.964257, 0.000000, 0.000000, -0.264969 +958, 0.965903, 0.000000, 0.000000, -0.258903 +959, 0.967511, 0.000000, 0.000000, -0.252827 +960, 0.969081, 0.000000, 0.000000, -0.246741 +961, 0.970613, 0.000000, 0.000000, -0.240646 +962, 0.972106, 0.000000, 0.000000, -0.234540 +963, 0.973561, 0.000000, 0.000000, -0.228426 +964, 0.974978, 0.000000, 0.000000, -0.222302 +965, 0.976356, 0.000000, 0.000000, -0.216170 +966, 0.977695, 0.000000, 0.000000, -0.210029 +967, 0.978996, 0.000000, 0.000000, -0.203880 +968, 0.980258, 0.000000, 0.000000, -0.197722 +969, 0.981481, 0.000000, 0.000000, -0.191557 +970, 0.982666, 0.000000, 0.000000, -0.185385 +971, 0.983812, 0.000000, 0.000000, -0.179205 +972, 0.984919, 0.000000, 0.000000, -0.173018 +973, 0.985987, 0.000000, 0.000000, -0.166824 +974, 0.987016, 0.000000, 0.000000, -0.160623 +975, 0.988006, 0.000000, 0.000000, -0.154417 +976, 0.988957, 0.000000, 0.000000, -0.148204 +977, 0.989869, 0.000000, 0.000000, -0.141985 +978, 0.990742, 0.000000, 0.000000, -0.135761 +979, 0.991575, 0.000000, 0.000000, -0.129531 +980, 0.992370, 0.000000, 0.000000, -0.123296 +981, 0.993125, 0.000000, 0.000000, -0.117056 +982, 0.993841, 0.000000, 0.000000, -0.110812 +983, 0.994518, 0.000000, 0.000000, -0.104563 +984, 0.995156, 0.000000, 0.000000, -0.098310 +985, 0.995754, 0.000000, 0.000000, -0.092054 +986, 0.996313, 0.000000, 0.000000, -0.085793 +987, 0.996833, 0.000000, 0.000000, -0.079529 +988, 0.997313, 0.000000, 0.000000, -0.073263 +989, 0.997753, 0.000000, 0.000000, -0.066993 +990, 0.998155, 0.000000, 0.000000, -0.060720 +991, 0.998517, 0.000000, 0.000000, -0.054445 +992, 0.998839, 0.000000, 0.000000, -0.048169 +993, 0.999122, 0.000000, 0.000000, -0.041890 +994, 0.999366, 0.000000, 0.000000, -0.035609 +995, 0.999570, 0.000000, 0.000000, -0.029327 +996, 0.999734, 0.000000, 0.000000, -0.023044 +997, 0.999860, 0.000000, 0.000000, -0.016760 +998, 0.999945, 0.000000, 0.000000, -0.010475 +999, 0.999991, 0.000000, 0.000000, -0.004190 +1000, 0.999998, 0.000000, 0.000000, 0.002095 +1001, 0.999965, 0.000000, 0.000000, 0.008380 +1002, 0.999892, 0.000000, 0.000000, 0.014665 +1003, 0.999781, 0.000000, 0.000000, 0.020949 +1004, 0.999629, 0.000000, 0.000000, 0.027233 +1005, 0.999438, 0.000000, 0.000000, 0.033515 +1006, 0.999208, 0.000000, 0.000000, 0.039796 +1007, 0.998938, 0.000000, 0.000000, 0.046076 +1008, 0.998629, 0.000000, 0.000000, 0.052353 +1009, 0.998280, 0.000000, 0.000000, 0.058629 +1010, 0.997892, 0.000000, 0.000000, 0.064902 +1011, 0.997464, 0.000000, 0.000000, 0.071173 +1012, 0.996997, 0.000000, 0.000000, 0.077441 +1013, 0.996491, 0.000000, 0.000000, 0.083706 +1014, 0.995945, 0.000000, 0.000000, 0.089967 +1015, 0.995360, 0.000000, 0.000000, 0.096225 +1016, 0.994735, 0.000000, 0.000000, 0.102479 +1017, 0.994071, 0.000000, 0.000000, 0.108729 +1018, 0.993368, 0.000000, 0.000000, 0.114975 +1019, 0.992626, 0.000000, 0.000000, 0.121217 +1020, 0.991845, 0.000000, 0.000000, 0.127453 +1021, 0.991024, 0.000000, 0.000000, 0.133685 +1022, 0.990164, 0.000000, 0.000000, 0.139911 +1023, 0.989265, 0.000000, 0.000000, 0.146131 +1024, 0.988327, 0.000000, 0.000000, 0.152346 +1025, 0.987350, 0.000000, 0.000000, 0.158555 +1026, 0.986334, 0.000000, 0.000000, 0.164758 +1027, 0.985279, 0.000000, 0.000000, 0.170954 +1028, 0.984185, 0.000000, 0.000000, 0.177143 +1029, 0.983052, 0.000000, 0.000000, 0.183326 +1030, 0.981881, 0.000000, 0.000000, 0.189501 +1031, 0.980670, 0.000000, 0.000000, 0.195668 +1032, 0.979421, 0.000000, 0.000000, 0.201828 +1033, 0.978133, 0.000000, 0.000000, 0.207980 +1034, 0.976807, 0.000000, 0.000000, 0.214124 +1035, 0.975441, 0.000000, 0.000000, 0.220259 +1036, 0.974038, 0.000000, 0.000000, 0.226385 +1037, 0.972596, 0.000000, 0.000000, 0.232503 +1038, 0.971115, 0.000000, 0.000000, 0.238611 +1039, 0.969596, 0.000000, 0.000000, 0.244710 +1040, 0.968039, 0.000000, 0.000000, 0.250800 +1041, 0.966444, 0.000000, 0.000000, 0.256879 +1042, 0.964810, 0.000000, 0.000000, 0.262948 +1043, 0.963138, 0.000000, 0.000000, 0.269007 +1044, 0.961428, 0.000000, 0.000000, 0.275056 +1045, 0.959681, 0.000000, 0.000000, 0.281093 +1046, 0.957895, 0.000000, 0.000000, 0.287119 +1047, 0.956071, 0.000000, 0.000000, 0.293134 +1048, 0.954210, 0.000000, 0.000000, 0.299137 +1049, 0.952311, 0.000000, 0.000000, 0.305129 +1050, 0.950374, 0.000000, 0.000000, 0.311108 +1051, 0.948400, 0.000000, 0.000000, 0.317076 +1052, 0.946389, 0.000000, 0.000000, 0.323030 +1053, 0.944340, 0.000000, 0.000000, 0.328972 +1054, 0.942253, 0.000000, 0.000000, 0.334901 +1055, 0.940130, 0.000000, 0.000000, 0.340817 +1056, 0.937969, 0.000000, 0.000000, 0.346719 +1057, 0.935771, 0.000000, 0.000000, 0.352607 +1058, 0.933537, 0.000000, 0.000000, 0.358482 +1059, 0.931265, 0.000000, 0.000000, 0.364342 +1060, 0.928957, 0.000000, 0.000000, 0.370188 +1061, 0.926612, 0.000000, 0.000000, 0.376020 +1062, 0.924230, 0.000000, 0.000000, 0.381836 +1063, 0.921812, 0.000000, 0.000000, 0.387638 +1064, 0.919357, 0.000000, 0.000000, 0.393424 +1065, 0.916866, 0.000000, 0.000000, 0.399195 +1066, 0.914339, 0.000000, 0.000000, 0.404950 +1067, 0.911776, 0.000000, 0.000000, 0.410688 +1068, 0.909177, 0.000000, 0.000000, 0.416411 +1069, 0.906541, 0.000000, 0.000000, 0.422117 +1070, 0.903870, 0.000000, 0.000000, 0.427807 +1071, 0.901164, 0.000000, 0.000000, 0.433479 +1072, 0.898421, 0.000000, 0.000000, 0.439135 +1073, 0.895643, 0.000000, 0.000000, 0.444773 +1074, 0.892830, 0.000000, 0.000000, 0.450393 +1075, 0.889982, 0.000000, 0.000000, 0.455996 +1076, 0.887098, 0.000000, 0.000000, 0.461581 +1077, 0.884179, 0.000000, 0.000000, 0.467147 +1078, 0.881226, 0.000000, 0.000000, 0.472695 +1079, 0.878237, 0.000000, 0.000000, 0.478225 +1080, 0.875214, 0.000000, 0.000000, 0.483735 +1081, 0.872157, 0.000000, 0.000000, 0.489227 +1082, 0.869065, 0.000000, 0.000000, 0.494699 +1083, 0.865938, 0.000000, 0.000000, 0.500151 +1084, 0.862777, 0.000000, 0.000000, 0.505584 +1085, 0.859583, 0.000000, 0.000000, 0.510997 +1086, 0.856354, 0.000000, 0.000000, 0.516389 +1087, 0.853091, 0.000000, 0.000000, 0.521761 +1088, 0.849795, 0.000000, 0.000000, 0.527113 +1089, 0.846465, 0.000000, 0.000000, 0.532444 +1090, 0.843102, 0.000000, 0.000000, 0.537754 +1091, 0.839706, 0.000000, 0.000000, 0.543042 +1092, 0.836276, 0.000000, 0.000000, 0.548309 +1093, 0.832813, 0.000000, 0.000000, 0.553554 +1094, 0.829317, 0.000000, 0.000000, 0.558778 +1095, 0.825789, 0.000000, 0.000000, 0.563979 +1096, 0.822228, 0.000000, 0.000000, 0.569158 +1097, 0.818634, 0.000000, 0.000000, 0.574315 +1098, 0.815008, 0.000000, 0.000000, 0.579449 +1099, 0.811350, 0.000000, 0.000000, 0.584560 +1100, 0.807660, 0.000000, 0.000000, 0.589648 +1101, 0.803938, 0.000000, 0.000000, 0.594713 +1102, 0.800184, 0.000000, 0.000000, 0.599754 +1103, 0.796399, 0.000000, 0.000000, 0.604772 +1104, 0.792582, 0.000000, 0.000000, 0.609765 +1105, 0.788734, 0.000000, 0.000000, 0.614735 +1106, 0.784855, 0.000000, 0.000000, 0.619680 +1107, 0.780944, 0.000000, 0.000000, 0.624601 +1108, 0.777003, 0.000000, 0.000000, 0.629497 +1109, 0.773031, 0.000000, 0.000000, 0.634368 +1110, 0.769029, 0.000000, 0.000000, 0.639214 +1111, 0.764996, 0.000000, 0.000000, 0.644035 +1112, 0.760933, 0.000000, 0.000000, 0.648830 +1113, 0.756840, 0.000000, 0.000000, 0.653600 +1114, 0.752717, 0.000000, 0.000000, 0.658344 +1115, 0.748564, 0.000000, 0.000000, 0.663062 +1116, 0.744382, 0.000000, 0.000000, 0.667754 +1117, 0.740170, 0.000000, 0.000000, 0.672420 +1118, 0.735929, 0.000000, 0.000000, 0.677058 +1119, 0.731659, 0.000000, 0.000000, 0.681671 +1120, 0.727360, 0.000000, 0.000000, 0.686256 +1121, 0.723033, 0.000000, 0.000000, 0.690814 +1122, 0.718676, 0.000000, 0.000000, 0.695345 +1123, 0.714292, 0.000000, 0.000000, 0.699848 +1124, 0.709879, 0.000000, 0.000000, 0.704324 +1125, 0.705438, 0.000000, 0.000000, 0.708771 +1126, 0.700969, 0.000000, 0.000000, 0.713191 +1127, 0.696473, 0.000000, 0.000000, 0.717583 +1128, 0.691949, 0.000000, 0.000000, 0.721946 +1129, 0.687398, 0.000000, 0.000000, 0.726281 +1130, 0.682819, 0.000000, 0.000000, 0.730587 +1131, 0.678214, 0.000000, 0.000000, 0.734864 +1132, 0.673582, 0.000000, 0.000000, 0.739113 +1133, 0.668923, 0.000000, 0.000000, 0.743332 +1134, 0.664238, 0.000000, 0.000000, 0.747521 +1135, 0.659526, 0.000000, 0.000000, 0.751682 +1136, 0.654789, 0.000000, 0.000000, 0.755812 +1137, 0.650025, 0.000000, 0.000000, 0.759913 +1138, 0.645236, 0.000000, 0.000000, 0.763983 +1139, 0.640422, 0.000000, 0.000000, 0.768023 +1140, 0.635582, 0.000000, 0.000000, 0.772033 +1141, 0.630717, 0.000000, 0.000000, 0.776013 +1142, 0.625827, 0.000000, 0.000000, 0.779962 +1143, 0.620912, 0.000000, 0.000000, 0.783880 +1144, 0.615973, 0.000000, 0.000000, 0.787767 +1145, 0.611010, 0.000000, 0.000000, 0.791623 +1146, 0.606022, 0.000000, 0.000000, 0.795448 +1147, 0.601011, 0.000000, 0.000000, 0.799241 +1148, 0.595975, 0.000000, 0.000000, 0.803003 +1149, 0.590917, 0.000000, 0.000000, 0.806733 +1150, 0.585834, 0.000000, 0.000000, 0.810431 +1151, 0.580729, 0.000000, 0.000000, 0.814097 +1152, 0.575601, 0.000000, 0.000000, 0.817731 +1153, 0.570450, 0.000000, 0.000000, 0.821333 +1154, 0.565276, 0.000000, 0.000000, 0.824902 +1155, 0.560080, 0.000000, 0.000000, 0.828438 +1156, 0.554862, 0.000000, 0.000000, 0.831942 +1157, 0.549622, 0.000000, 0.000000, 0.835413 +1158, 0.544361, 0.000000, 0.000000, 0.838851 +1159, 0.539078, 0.000000, 0.000000, 0.842256 +1160, 0.533773, 0.000000, 0.000000, 0.845628 +1161, 0.528448, 0.000000, 0.000000, 0.848966 +1162, 0.523101, 0.000000, 0.000000, 0.852270 +1163, 0.517734, 0.000000, 0.000000, 0.855541 +1164, 0.512347, 0.000000, 0.000000, 0.858779 +1165, 0.506939, 0.000000, 0.000000, 0.861982 +1166, 0.501511, 0.000000, 0.000000, 0.865151 +1167, 0.496064, 0.000000, 0.000000, 0.868286 +1168, 0.490596, 0.000000, 0.000000, 0.871387 +1169, 0.485110, 0.000000, 0.000000, 0.874453 +1170, 0.479604, 0.000000, 0.000000, 0.877485 +1171, 0.474079, 0.000000, 0.000000, 0.880482 +1172, 0.468536, 0.000000, 0.000000, 0.883444 +1173, 0.462974, 0.000000, 0.000000, 0.886372 +1174, 0.457394, 0.000000, 0.000000, 0.889264 +1175, 0.451796, 0.000000, 0.000000, 0.892121 +1176, 0.446180, 0.000000, 0.000000, 0.894943 +1177, 0.440546, 0.000000, 0.000000, 0.897730 +1178, 0.434895, 0.000000, 0.000000, 0.900481 +1179, 0.429226, 0.000000, 0.000000, 0.903197 +1180, 0.423541, 0.000000, 0.000000, 0.905877 +1181, 0.417839, 0.000000, 0.000000, 0.908521 +1182, 0.412121, 0.000000, 0.000000, 0.911129 +1183, 0.406386, 0.000000, 0.000000, 0.913702 +1184, 0.400635, 0.000000, 0.000000, 0.916238 +1185, 0.394868, 0.000000, 0.000000, 0.918738 +1186, 0.389086, 0.000000, 0.000000, 0.921201 +1187, 0.383288, 0.000000, 0.000000, 0.923629 +1188, 0.377475, 0.000000, 0.000000, 0.926020 +1189, 0.371648, 0.000000, 0.000000, 0.928374 +1190, 0.365805, 0.000000, 0.000000, 0.930691 +1191, 0.359948, 0.000000, 0.000000, 0.932972 +1192, 0.354077, 0.000000, 0.000000, 0.935216 +1193, 0.348192, 0.000000, 0.000000, 0.937423 +1194, 0.342294, 0.000000, 0.000000, 0.939593 +1195, 0.336381, 0.000000, 0.000000, 0.941726 +1196, 0.330456, 0.000000, 0.000000, 0.943822 +1197, 0.324517, 0.000000, 0.000000, 0.945880 +1198, 0.318565, 0.000000, 0.000000, 0.947901 +1199, 0.312601, 0.000000, 0.000000, 0.949884 +1200, 0.306625, 0.000000, 0.000000, 0.951830 +1201, 0.300636, 0.000000, 0.000000, 0.953739 +1202, 0.294636, 0.000000, 0.000000, 0.955610 +1203, 0.288624, 0.000000, 0.000000, 0.957443 +1204, 0.282600, 0.000000, 0.000000, 0.959238 +1205, 0.276566, 0.000000, 0.000000, 0.960995 +1206, 0.270520, 0.000000, 0.000000, 0.962714 +1207, 0.264464, 0.000000, 0.000000, 0.964396 +1208, 0.258397, 0.000000, 0.000000, 0.966039 +1209, 0.252321, 0.000000, 0.000000, 0.967644 +1210, 0.246234, 0.000000, 0.000000, 0.969210 +1211, 0.240137, 0.000000, 0.000000, 0.970739 +1212, 0.234031, 0.000000, 0.000000, 0.972229 +1213, 0.227916, 0.000000, 0.000000, 0.973681 +1214, 0.221791, 0.000000, 0.000000, 0.975094 +1215, 0.215658, 0.000000, 0.000000, 0.976469 +1216, 0.209517, 0.000000, 0.000000, 0.977805 +1217, 0.203367, 0.000000, 0.000000, 0.979103 +1218, 0.197209, 0.000000, 0.000000, 0.980361 +1219, 0.191043, 0.000000, 0.000000, 0.981582 +1220, 0.184870, 0.000000, 0.000000, 0.982763 +1221, 0.178689, 0.000000, 0.000000, 0.983906 +1222, 0.172502, 0.000000, 0.000000, 0.985009 +1223, 0.166307, 0.000000, 0.000000, 0.986074 +1224, 0.160106, 0.000000, 0.000000, 0.987100 +1225, 0.153899, 0.000000, 0.000000, 0.988087 +1226, 0.147686, 0.000000, 0.000000, 0.989034 +1227, 0.141466, 0.000000, 0.000000, 0.989943 +1228, 0.135242, 0.000000, 0.000000, 0.990813 +1229, 0.129011, 0.000000, 0.000000, 0.991643 +1230, 0.122776, 0.000000, 0.000000, 0.992434 +1231, 0.116536, 0.000000, 0.000000, 0.993186 +1232, 0.110291, 0.000000, 0.000000, 0.993899 +1233, 0.104042, 0.000000, 0.000000, 0.994573 +1234, 0.097789, 0.000000, 0.000000, 0.995207 +1235, 0.091532, 0.000000, 0.000000, 0.995802 +1236, 0.085271, 0.000000, 0.000000, 0.996358 +1237, 0.079007, 0.000000, 0.000000, 0.996874 +1238, 0.072740, 0.000000, 0.000000, 0.997351 +1239, 0.066470, 0.000000, 0.000000, 0.997788 +1240, 0.060198, 0.000000, 0.000000, 0.998186 +1241, 0.053922, 0.000000, 0.000000, 0.998545 +1242, 0.047645, 0.000000, 0.000000, 0.998864 +1243, 0.041366, 0.000000, 0.000000, 0.999144 +1244, 0.035086, 0.000000, 0.000000, 0.999384 +1245, 0.028804, 0.000000, 0.000000, 0.999585 +1246, 0.022520, 0.000000, 0.000000, 0.999746 +1247, 0.016236, 0.000000, 0.000000, 0.999868 +1248, 0.009952, 0.000000, 0.000000, 0.999950 +1249, 0.003666, 0.000000, 0.000000, 0.999993 +1250, -0.002619, -0.000000, 0.000000, 0.999997 +1251, -0.008904, -0.000000, 0.000000, 0.999960 +1252, -0.015189, -0.000000, 0.000000, 0.999885 +1253, -0.021473, -0.000000, 0.000000, 0.999769 +1254, -0.027756, -0.000000, 0.000000, 0.999615 +1255, -0.034039, -0.000000, 0.000000, 0.999421 +1256, -0.040320, -0.000000, 0.000000, 0.999187 +1257, -0.046599, -0.000000, 0.000000, 0.998914 +1258, -0.052876, -0.000000, 0.000000, 0.998601 +1259, -0.059152, -0.000000, 0.000000, 0.998249 +1260, -0.065425, -0.000000, 0.000000, 0.997857 +1261, -0.071695, -0.000000, 0.000000, 0.997427 +1262, -0.077963, -0.000000, 0.000000, 0.996956 +1263, -0.084228, -0.000000, 0.000000, 0.996447 +1264, -0.090489, -0.000000, 0.000000, 0.995897 +1265, -0.096747, -0.000000, 0.000000, 0.995309 +1266, -0.103000, -0.000000, 0.000000, 0.994681 +1267, -0.109250, -0.000000, 0.000000, 0.994014 +1268, -0.115496, -0.000000, 0.000000, 0.993308 +1269, -0.121736, -0.000000, 0.000000, 0.992562 +1270, -0.127973, -0.000000, 0.000000, 0.991778 +1271, -0.134204, -0.000000, 0.000000, 0.990954 +1272, -0.140429, -0.000000, 0.000000, 0.990091 +1273, -0.146650, -0.000000, 0.000000, 0.989189 +1274, -0.152864, -0.000000, 0.000000, 0.988247 +1275, -0.159072, -0.000000, 0.000000, 0.987267 +1276, -0.165274, -0.000000, 0.000000, 0.986248 +1277, -0.171470, -0.000000, 0.000000, 0.985189 +1278, -0.177659, -0.000000, 0.000000, 0.984092 +1279, -0.183840, -0.000000, 0.000000, 0.982956 +1280, -0.190015, -0.000000, 0.000000, 0.981781 +1281, -0.196182, -0.000000, 0.000000, 0.980568 +1282, -0.202341, -0.000000, 0.000000, 0.979315 +1283, -0.208492, -0.000000, 0.000000, 0.978024 +1284, -0.214635, -0.000000, 0.000000, 0.976694 +1285, -0.220770, -0.000000, 0.000000, 0.975326 +1286, -0.226896, -0.000000, 0.000000, 0.973919 +1287, -0.233012, -0.000000, 0.000000, 0.972474 +1288, -0.239120, -0.000000, 0.000000, 0.970990 +1289, -0.245218, -0.000000, 0.000000, 0.969468 +1290, -0.251307, -0.000000, 0.000000, 0.967907 +1291, -0.257385, -0.000000, 0.000000, 0.966309 +1292, -0.263454, -0.000000, 0.000000, 0.964672 +1293, -0.269512, -0.000000, 0.000000, 0.962997 +1294, -0.275559, -0.000000, 0.000000, 0.961284 +1295, -0.281595, -0.000000, 0.000000, 0.959533 +1296, -0.287621, -0.000000, 0.000000, 0.957744 +1297, -0.293635, -0.000000, 0.000000, 0.955918 +1298, -0.299637, -0.000000, 0.000000, 0.954053 +1299, -0.305628, -0.000000, 0.000000, 0.952151 +1300, -0.311606, -0.000000, 0.000000, 0.950211 +1301, -0.317572, -0.000000, 0.000000, 0.948234 +1302, -0.323526, -0.000000, 0.000000, 0.946219 +1303, -0.329467, -0.000000, 0.000000, 0.944167 +1304, -0.335395, -0.000000, 0.000000, 0.942078 +1305, -0.341309, -0.000000, 0.000000, 0.939951 +1306, -0.347210, -0.000000, 0.000000, 0.937787 +1307, -0.353098, -0.000000, 0.000000, 0.935587 +1308, -0.358971, -0.000000, 0.000000, 0.933349 +1309, -0.364830, -0.000000, 0.000000, 0.931074 +1310, -0.370675, -0.000000, 0.000000, 0.928763 +1311, -0.376505, -0.000000, 0.000000, 0.926415 +1312, -0.382320, -0.000000, 0.000000, 0.924030 +1313, -0.388121, -0.000000, 0.000000, 0.921609 +1314, -0.393906, -0.000000, 0.000000, 0.919151 +1315, -0.399675, -0.000000, 0.000000, 0.916657 +1316, -0.405428, -0.000000, 0.000000, 0.914127 +1317, -0.411166, -0.000000, 0.000000, 0.911561 +1318, -0.416887, -0.000000, 0.000000, 0.908958 +1319, -0.422592, -0.000000, 0.000000, 0.906320 +1320, -0.428280, -0.000000, 0.000000, 0.903646 +1321, -0.433951, -0.000000, 0.000000, 0.900936 +1322, -0.439605, -0.000000, 0.000000, 0.898191 +1323, -0.445242, -0.000000, 0.000000, 0.895410 +1324, -0.450861, -0.000000, 0.000000, 0.892594 +1325, -0.456462, -0.000000, 0.000000, 0.889743 +1326, -0.462045, -0.000000, 0.000000, 0.886856 +1327, -0.467610, -0.000000, 0.000000, 0.883935 +1328, -0.473157, -0.000000, 0.000000, 0.880978 +1329, -0.478685, -0.000000, 0.000000, 0.877987 +1330, -0.484194, -0.000000, 0.000000, 0.874961 +1331, -0.489683, -0.000000, 0.000000, 0.871900 +1332, -0.495154, -0.000000, 0.000000, 0.868805 +1333, -0.500605, -0.000000, 0.000000, 0.865676 +1334, -0.506036, -0.000000, 0.000000, 0.862512 +1335, -0.511447, -0.000000, 0.000000, 0.859315 +1336, -0.516838, -0.000000, 0.000000, 0.856083 +1337, -0.522208, -0.000000, 0.000000, 0.852818 +1338, -0.527558, -0.000000, 0.000000, 0.849519 +1339, -0.532887, -0.000000, 0.000000, 0.846186 +1340, -0.538195, -0.000000, 0.000000, 0.842820 +1341, -0.543482, -0.000000, 0.000000, 0.839421 +1342, -0.548747, -0.000000, 0.000000, 0.835988 +1343, -0.553991, -0.000000, 0.000000, 0.832523 +1344, -0.559212, -0.000000, 0.000000, 0.829025 +1345, -0.564412, -0.000000, 0.000000, 0.825493 +1346, -0.569589, -0.000000, 0.000000, 0.821930 +1347, -0.574744, -0.000000, 0.000000, 0.818333 +1348, -0.579876, -0.000000, 0.000000, 0.814705 +1349, -0.584985, -0.000000, 0.000000, 0.811044 +1350, -0.590071, -0.000000, 0.000000, 0.807351 +1351, -0.595134, -0.000000, 0.000000, 0.803627 +1352, -0.600173, -0.000000, 0.000000, 0.799870 +1353, -0.605189, -0.000000, 0.000000, 0.796082 +1354, -0.610180, -0.000000, 0.000000, 0.792263 +1355, -0.615148, -0.000000, 0.000000, 0.788412 +1356, -0.620091, -0.000000, 0.000000, 0.784530 +1357, -0.625010, -0.000000, 0.000000, 0.780617 +1358, -0.629904, -0.000000, 0.000000, 0.776673 +1359, -0.634773, -0.000000, 0.000000, 0.772699 +1360, -0.639617, -0.000000, 0.000000, 0.768694 +1361, -0.644436, -0.000000, 0.000000, 0.764659 +1362, -0.649229, -0.000000, 0.000000, 0.760593 +1363, -0.653997, -0.000000, 0.000000, 0.756497 +1364, -0.658739, -0.000000, 0.000000, 0.752372 +1365, -0.663454, -0.000000, 0.000000, 0.748217 +1366, -0.668144, -0.000000, 0.000000, 0.744032 +1367, -0.672807, -0.000000, 0.000000, 0.739818 +1368, -0.677444, -0.000000, 0.000000, 0.735575 +1369, -0.682054, -0.000000, 0.000000, 0.731302 +1370, -0.686637, -0.000000, 0.000000, 0.727001 +1371, -0.691192, -0.000000, 0.000000, 0.722671 +1372, -0.695721, -0.000000, 0.000000, 0.718312 +1373, -0.700222, -0.000000, 0.000000, 0.713925 +1374, -0.704695, -0.000000, 0.000000, 0.709510 +1375, -0.709141, -0.000000, 0.000000, 0.705067 +1376, -0.713558, -0.000000, 0.000000, 0.700596 +1377, -0.717948, -0.000000, 0.000000, 0.696097 +1378, -0.722309, -0.000000, 0.000000, 0.691571 +1379, -0.726641, -0.000000, 0.000000, 0.687017 +1380, -0.730945, -0.000000, 0.000000, 0.682437 +1381, -0.735220, -0.000000, 0.000000, 0.677829 +1382, -0.739465, -0.000000, 0.000000, 0.673195 +1383, -0.743682, -0.000000, 0.000000, 0.668534 +1384, -0.747869, -0.000000, 0.000000, 0.663846 +1385, -0.752027, -0.000000, 0.000000, 0.659132 +1386, -0.756155, -0.000000, 0.000000, 0.654393 +1387, -0.760253, -0.000000, 0.000000, 0.649627 +1388, -0.764321, -0.000000, 0.000000, 0.644836 +1389, -0.768359, -0.000000, 0.000000, 0.640019 +1390, -0.772366, -0.000000, 0.000000, 0.635177 +1391, -0.776343, -0.000000, 0.000000, 0.630310 +1392, -0.780290, -0.000000, 0.000000, 0.625418 +1393, -0.784205, -0.000000, 0.000000, 0.620502 +1394, -0.788090, -0.000000, 0.000000, 0.615561 +1395, -0.791943, -0.000000, 0.000000, 0.610595 +1396, -0.795765, -0.000000, 0.000000, 0.605605 +1397, -0.799556, -0.000000, 0.000000, 0.600592 +1398, -0.803315, -0.000000, 0.000000, 0.595555 +1399, -0.807042, -0.000000, 0.000000, 0.590494 +1400, -0.810738, -0.000000, 0.000000, 0.585410 +1401, -0.814401, -0.000000, 0.000000, 0.580303 +1402, -0.818032, -0.000000, 0.000000, 0.575172 +1403, -0.821631, -0.000000, 0.000000, 0.570019 +1404, -0.825198, -0.000000, 0.000000, 0.564844 +1405, -0.828732, -0.000000, 0.000000, 0.559646 +1406, -0.832233, -0.000000, 0.000000, 0.554427 +1407, -0.835701, -0.000000, 0.000000, 0.549185 +1408, -0.839136, -0.000000, 0.000000, 0.543921 +1409, -0.842538, -0.000000, 0.000000, 0.538636 +1410, -0.845907, -0.000000, 0.000000, 0.533330 +1411, -0.849243, -0.000000, 0.000000, 0.528003 +1412, -0.852544, -0.000000, 0.000000, 0.522655 +1413, -0.855813, -0.000000, 0.000000, 0.517286 +1414, -0.859047, -0.000000, 0.000000, 0.511897 +1415, -0.862247, -0.000000, 0.000000, 0.506487 +1416, -0.865414, -0.000000, 0.000000, 0.501058 +1417, -0.868546, -0.000000, 0.000000, 0.495609 +1418, -0.871644, -0.000000, 0.000000, 0.490140 +1419, -0.874707, -0.000000, 0.000000, 0.484652 +1420, -0.877736, -0.000000, 0.000000, 0.479145 +1421, -0.880730, -0.000000, 0.000000, 0.473618 +1422, -0.883690, -0.000000, 0.000000, 0.468073 +1423, -0.886614, -0.000000, 0.000000, 0.462510 +1424, -0.889504, -0.000000, 0.000000, 0.456928 +1425, -0.892358, -0.000000, 0.000000, 0.451328 +1426, -0.895177, -0.000000, 0.000000, 0.445711 +1427, -0.897961, -0.000000, 0.000000, 0.440076 +1428, -0.900709, -0.000000, 0.000000, 0.434423 +1429, -0.903422, -0.000000, 0.000000, 0.428753 +1430, -0.906099, -0.000000, 0.000000, 0.423067 +1431, -0.908740, -0.000000, 0.000000, 0.417363 +1432, -0.911345, -0.000000, 0.000000, 0.411643 +1433, -0.913914, -0.000000, 0.000000, 0.405907 +1434, -0.916448, -0.000000, 0.000000, 0.400155 +1435, -0.918944, -0.000000, 0.000000, 0.394387 +1436, -0.921405, -0.000000, 0.000000, 0.388603 +1437, -0.923829, -0.000000, 0.000000, 0.382804 +1438, -0.926217, -0.000000, 0.000000, 0.376990 +1439, -0.928568, -0.000000, 0.000000, 0.371161 +1440, -0.930883, -0.000000, 0.000000, 0.365318 +1441, -0.933161, -0.000000, 0.000000, 0.359460 +1442, -0.935401, -0.000000, 0.000000, 0.353588 +1443, -0.937605, -0.000000, 0.000000, 0.347701 +1444, -0.939772, -0.000000, 0.000000, 0.341801 +1445, -0.941902, -0.000000, 0.000000, 0.335888 +1446, -0.943994, -0.000000, 0.000000, 0.329961 +1447, -0.946050, -0.000000, 0.000000, 0.324021 +1448, -0.948068, -0.000000, 0.000000, 0.318069 +1449, -0.950048, -0.000000, 0.000000, 0.312104 +1450, -0.951991, -0.000000, 0.000000, 0.306126 +1451, -0.953896, -0.000000, 0.000000, 0.300137 +1452, -0.955764, -0.000000, 0.000000, 0.294135 +1453, -0.957594, -0.000000, 0.000000, 0.288122 +1454, -0.959386, -0.000000, 0.000000, 0.282098 +1455, -0.961140, -0.000000, 0.000000, 0.276062 +1456, -0.962856, -0.000000, 0.000000, 0.270016 +1457, -0.964534, -0.000000, 0.000000, 0.263959 +1458, -0.966174, -0.000000, 0.000000, 0.257891 +1459, -0.967776, -0.000000, 0.000000, 0.251814 +1460, -0.969339, -0.000000, 0.000000, 0.245726 +1461, -0.970865, -0.000000, 0.000000, 0.239629 +1462, -0.972352, -0.000000, 0.000000, 0.233522 +1463, -0.973800, -0.000000, 0.000000, 0.227406 +1464, -0.975210, -0.000000, 0.000000, 0.221281 +1465, -0.976582, -0.000000, 0.000000, 0.215147 +1466, -0.977915, -0.000000, 0.000000, 0.209005 +1467, -0.979209, -0.000000, 0.000000, 0.202854 +1468, -0.980465, -0.000000, 0.000000, 0.196695 +1469, -0.981682, -0.000000, 0.000000, 0.190529 +1470, -0.982860, -0.000000, 0.000000, 0.184355 +1471, -0.983999, -0.000000, 0.000000, 0.178174 +1472, -0.985099, -0.000000, 0.000000, 0.171986 +1473, -0.986161, -0.000000, 0.000000, 0.165791 +1474, -0.987183, -0.000000, 0.000000, 0.159589 +1475, -0.988167, -0.000000, 0.000000, 0.153382 +1476, -0.989112, -0.000000, 0.000000, 0.147168 +1477, -0.990017, -0.000000, 0.000000, 0.140948 +1478, -0.990883, -0.000000, 0.000000, 0.134723 +1479, -0.991711, -0.000000, 0.000000, 0.128492 +1480, -0.992499, -0.000000, 0.000000, 0.122256 +1481, -0.993247, -0.000000, 0.000000, 0.116016 +1482, -0.993957, -0.000000, 0.000000, 0.109771 +1483, -0.994627, -0.000000, 0.000000, 0.103521 +1484, -0.995258, -0.000000, 0.000000, 0.097268 +1485, -0.995850, -0.000000, 0.000000, 0.091010 +1486, -0.996402, -0.000000, 0.000000, 0.084750 +1487, -0.996915, -0.000000, 0.000000, 0.078485 +1488, -0.997389, -0.000000, 0.000000, 0.072218 +1489, -0.997823, -0.000000, 0.000000, 0.065948 +1490, -0.998218, -0.000000, 0.000000, 0.059675 +1491, -0.998573, -0.000000, 0.000000, 0.053399 +1492, -0.998889, -0.000000, 0.000000, 0.047122 +1493, -0.999166, -0.000000, 0.000000, 0.040843 +1494, -0.999403, -0.000000, 0.000000, 0.034562 +1495, -0.999600, -0.000000, 0.000000, 0.028280 +1496, -0.999758, -0.000000, 0.000000, 0.021997 +1497, -0.999877, -0.000000, 0.000000, 0.015713 +1498, -0.999956, -0.000000, 0.000000, 0.009428 +1499, -0.999995, -0.000000, 0.000000, 0.003143 +1500, -0.999995, 0.000000, -0.000000, -0.003143 +1501, -0.999956, 0.000000, -0.000000, -0.009428 +1502, -0.999877, 0.000000, -0.000000, -0.015713 +1503, -0.999758, 0.000000, -0.000000, -0.021997 +1504, -0.999600, 0.000000, -0.000000, -0.028280 +1505, -0.999403, 0.000000, -0.000000, -0.034562 +1506, -0.999166, 0.000000, -0.000000, -0.040843 +1507, -0.998889, 0.000000, -0.000000, -0.047122 +1508, -0.998573, 0.000000, -0.000000, -0.053399 +1509, -0.998218, 0.000000, -0.000000, -0.059675 +1510, -0.997823, 0.000000, -0.000000, -0.065948 +1511, -0.997389, 0.000000, -0.000000, -0.072218 +1512, -0.996915, 0.000000, -0.000000, -0.078485 +1513, -0.996402, 0.000000, -0.000000, -0.084750 +1514, -0.995850, 0.000000, -0.000000, -0.091010 +1515, -0.995258, 0.000000, -0.000000, -0.097268 +1516, -0.994627, 0.000000, -0.000000, -0.103521 +1517, -0.993957, 0.000000, -0.000000, -0.109771 +1518, -0.993247, 0.000000, -0.000000, -0.116016 +1519, -0.992499, 0.000000, -0.000000, -0.122256 +1520, -0.991711, 0.000000, -0.000000, -0.128492 +1521, -0.990883, 0.000000, -0.000000, -0.134723 +1522, -0.990017, 0.000000, -0.000000, -0.140948 +1523, -0.989112, 0.000000, -0.000000, -0.147168 +1524, -0.988167, 0.000000, -0.000000, -0.153382 +1525, -0.987183, 0.000000, -0.000000, -0.159589 +1526, -0.986161, 0.000000, -0.000000, -0.165791 +1527, -0.985099, 0.000000, -0.000000, -0.171986 +1528, -0.983999, 0.000000, -0.000000, -0.178174 +1529, -0.982860, 0.000000, -0.000000, -0.184355 +1530, -0.981682, 0.000000, -0.000000, -0.190529 +1531, -0.980465, 0.000000, -0.000000, -0.196695 +1532, -0.979209, 0.000000, -0.000000, -0.202854 +1533, -0.977915, 0.000000, -0.000000, -0.209005 +1534, -0.976582, 0.000000, -0.000000, -0.215147 +1535, -0.975210, 0.000000, -0.000000, -0.221281 +1536, -0.973800, 0.000000, -0.000000, -0.227406 +1537, -0.972352, 0.000000, -0.000000, -0.233522 +1538, -0.970865, 0.000000, -0.000000, -0.239629 +1539, -0.969339, 0.000000, -0.000000, -0.245726 +1540, -0.967776, 0.000000, -0.000000, -0.251814 +1541, -0.966174, 0.000000, -0.000000, -0.257891 +1542, -0.964534, 0.000000, -0.000000, -0.263959 +1543, -0.962856, 0.000000, -0.000000, -0.270016 +1544, -0.961140, 0.000000, -0.000000, -0.276062 +1545, -0.959386, 0.000000, -0.000000, -0.282098 +1546, -0.957594, 0.000000, -0.000000, -0.288122 +1547, -0.955764, 0.000000, -0.000000, -0.294135 +1548, -0.953896, 0.000000, -0.000000, -0.300137 +1549, -0.951991, 0.000000, -0.000000, -0.306126 +1550, -0.950048, 0.000000, -0.000000, -0.312104 +1551, -0.948068, 0.000000, -0.000000, -0.318069 +1552, -0.946050, 0.000000, -0.000000, -0.324021 +1553, -0.943994, 0.000000, -0.000000, -0.329961 +1554, -0.941902, 0.000000, -0.000000, -0.335888 +1555, -0.939772, 0.000000, -0.000000, -0.341801 +1556, -0.937605, 0.000000, -0.000000, -0.347701 +1557, -0.935401, 0.000000, -0.000000, -0.353588 +1558, -0.933161, 0.000000, -0.000000, -0.359460 +1559, -0.930883, 0.000000, -0.000000, -0.365318 +1560, -0.928568, 0.000000, -0.000000, -0.371161 +1561, -0.926217, 0.000000, -0.000000, -0.376990 +1562, -0.923829, 0.000000, -0.000000, -0.382804 +1563, -0.921405, 0.000000, -0.000000, -0.388603 +1564, -0.918944, 0.000000, -0.000000, -0.394387 +1565, -0.916448, 0.000000, -0.000000, -0.400155 +1566, -0.913914, 0.000000, -0.000000, -0.405907 +1567, -0.911345, 0.000000, -0.000000, -0.411643 +1568, -0.908740, 0.000000, -0.000000, -0.417363 +1569, -0.906099, 0.000000, -0.000000, -0.423067 +1570, -0.903422, 0.000000, -0.000000, -0.428753 +1571, -0.900709, 0.000000, -0.000000, -0.434423 +1572, -0.897961, 0.000000, -0.000000, -0.440076 +1573, -0.895177, 0.000000, -0.000000, -0.445711 +1574, -0.892358, 0.000000, -0.000000, -0.451328 +1575, -0.889504, 0.000000, -0.000000, -0.456928 +1576, -0.886614, 0.000000, -0.000000, -0.462510 +1577, -0.883690, 0.000000, -0.000000, -0.468073 +1578, -0.880730, 0.000000, -0.000000, -0.473618 +1579, -0.877736, 0.000000, -0.000000, -0.479145 +1580, -0.874707, 0.000000, -0.000000, -0.484652 +1581, -0.871644, 0.000000, -0.000000, -0.490140 +1582, -0.868546, 0.000000, -0.000000, -0.495609 +1583, -0.865414, 0.000000, -0.000000, -0.501058 +1584, -0.862247, 0.000000, -0.000000, -0.506487 +1585, -0.859047, 0.000000, -0.000000, -0.511897 +1586, -0.855813, 0.000000, -0.000000, -0.517286 +1587, -0.852544, 0.000000, -0.000000, -0.522655 +1588, -0.849243, 0.000000, -0.000000, -0.528003 +1589, -0.845907, 0.000000, -0.000000, -0.533330 +1590, -0.842538, 0.000000, -0.000000, -0.538636 +1591, -0.839136, 0.000000, -0.000000, -0.543921 +1592, -0.835701, 0.000000, -0.000000, -0.549185 +1593, -0.832233, 0.000000, -0.000000, -0.554427 +1594, -0.828732, 0.000000, -0.000000, -0.559646 +1595, -0.825198, 0.000000, -0.000000, -0.564844 +1596, -0.821631, 0.000000, -0.000000, -0.570019 +1597, -0.818032, 0.000000, -0.000000, -0.575172 +1598, -0.814401, 0.000000, -0.000000, -0.580303 +1599, -0.810738, 0.000000, -0.000000, -0.585410 +1600, -0.807042, 0.000000, -0.000000, -0.590494 +1601, -0.803315, 0.000000, -0.000000, -0.595555 +1602, -0.799556, 0.000000, -0.000000, -0.600592 +1603, -0.795765, 0.000000, -0.000000, -0.605605 +1604, -0.791943, 0.000000, -0.000000, -0.610595 +1605, -0.788090, 0.000000, -0.000000, -0.615561 +1606, -0.784205, 0.000000, -0.000000, -0.620502 +1607, -0.780290, 0.000000, -0.000000, -0.625418 +1608, -0.776343, 0.000000, -0.000000, -0.630310 +1609, -0.772366, 0.000000, -0.000000, -0.635177 +1610, -0.768359, 0.000000, -0.000000, -0.640019 +1611, -0.764321, 0.000000, -0.000000, -0.644836 +1612, -0.760253, 0.000000, -0.000000, -0.649627 +1613, -0.756155, 0.000000, -0.000000, -0.654393 +1614, -0.752027, 0.000000, -0.000000, -0.659132 +1615, -0.747869, 0.000000, -0.000000, -0.663846 +1616, -0.743682, 0.000000, -0.000000, -0.668534 +1617, -0.739465, 0.000000, -0.000000, -0.673195 +1618, -0.735220, 0.000000, -0.000000, -0.677829 +1619, -0.730945, 0.000000, -0.000000, -0.682437 +1620, -0.726641, 0.000000, -0.000000, -0.687017 +1621, -0.722309, 0.000000, -0.000000, -0.691571 +1622, -0.717948, 0.000000, -0.000000, -0.696097 +1623, -0.713558, 0.000000, -0.000000, -0.700596 +1624, -0.709141, 0.000000, -0.000000, -0.705067 +1625, -0.704695, 0.000000, -0.000000, -0.709510 +1626, -0.700222, 0.000000, -0.000000, -0.713925 +1627, -0.695721, 0.000000, -0.000000, -0.718312 +1628, -0.691192, 0.000000, -0.000000, -0.722671 +1629, -0.686637, 0.000000, -0.000000, -0.727001 +1630, -0.682054, 0.000000, -0.000000, -0.731302 +1631, -0.677444, 0.000000, -0.000000, -0.735575 +1632, -0.672807, 0.000000, -0.000000, -0.739818 +1633, -0.668144, 0.000000, -0.000000, -0.744032 +1634, -0.663454, 0.000000, -0.000000, -0.748217 +1635, -0.658739, 0.000000, -0.000000, -0.752372 +1636, -0.653997, 0.000000, -0.000000, -0.756497 +1637, -0.649229, 0.000000, -0.000000, -0.760593 +1638, -0.644436, 0.000000, -0.000000, -0.764659 +1639, -0.639617, 0.000000, -0.000000, -0.768694 +1640, -0.634773, 0.000000, -0.000000, -0.772699 +1641, -0.629904, 0.000000, -0.000000, -0.776673 +1642, -0.625010, 0.000000, -0.000000, -0.780617 +1643, -0.620091, 0.000000, -0.000000, -0.784530 +1644, -0.615148, 0.000000, -0.000000, -0.788412 +1645, -0.610180, 0.000000, -0.000000, -0.792263 +1646, -0.605189, 0.000000, -0.000000, -0.796082 +1647, -0.600173, 0.000000, -0.000000, -0.799870 +1648, -0.595134, 0.000000, -0.000000, -0.803627 +1649, -0.590071, 0.000000, -0.000000, -0.807351 +1650, -0.584985, 0.000000, -0.000000, -0.811044 +1651, -0.579876, 0.000000, -0.000000, -0.814705 +1652, -0.574744, 0.000000, -0.000000, -0.818333 +1653, -0.569589, 0.000000, -0.000000, -0.821930 +1654, -0.564412, 0.000000, -0.000000, -0.825493 +1655, -0.559212, 0.000000, -0.000000, -0.829025 +1656, -0.553991, 0.000000, -0.000000, -0.832523 +1657, -0.548747, 0.000000, -0.000000, -0.835988 +1658, -0.543482, 0.000000, -0.000000, -0.839421 +1659, -0.538195, 0.000000, -0.000000, -0.842820 +1660, -0.532887, 0.000000, -0.000000, -0.846186 +1661, -0.527558, 0.000000, -0.000000, -0.849519 +1662, -0.522208, 0.000000, -0.000000, -0.852818 +1663, -0.516838, 0.000000, -0.000000, -0.856083 +1664, -0.511447, 0.000000, -0.000000, -0.859315 +1665, -0.506036, 0.000000, -0.000000, -0.862512 +1666, -0.500605, 0.000000, -0.000000, -0.865676 +1667, -0.495154, 0.000000, -0.000000, -0.868805 +1668, -0.489683, 0.000000, -0.000000, -0.871900 +1669, -0.484194, 0.000000, -0.000000, -0.874961 +1670, -0.478685, 0.000000, -0.000000, -0.877987 +1671, -0.473157, 0.000000, -0.000000, -0.880978 +1672, -0.467610, 0.000000, -0.000000, -0.883935 +1673, -0.462045, 0.000000, -0.000000, -0.886856 +1674, -0.456462, 0.000000, -0.000000, -0.889743 +1675, -0.450861, 0.000000, -0.000000, -0.892594 +1676, -0.445242, 0.000000, -0.000000, -0.895410 +1677, -0.439605, 0.000000, -0.000000, -0.898191 +1678, -0.433951, 0.000000, -0.000000, -0.900936 +1679, -0.428280, 0.000000, -0.000000, -0.903646 +1680, -0.422592, 0.000000, -0.000000, -0.906320 +1681, -0.416887, 0.000000, -0.000000, -0.908958 +1682, -0.411166, 0.000000, -0.000000, -0.911561 +1683, -0.405428, 0.000000, -0.000000, -0.914127 +1684, -0.399675, 0.000000, -0.000000, -0.916657 +1685, -0.393906, 0.000000, -0.000000, -0.919151 +1686, -0.388121, 0.000000, -0.000000, -0.921609 +1687, -0.382320, 0.000000, -0.000000, -0.924030 +1688, -0.376505, 0.000000, -0.000000, -0.926415 +1689, -0.370675, 0.000000, -0.000000, -0.928763 +1690, -0.364830, 0.000000, -0.000000, -0.931074 +1691, -0.358971, 0.000000, -0.000000, -0.933349 +1692, -0.353098, 0.000000, -0.000000, -0.935587 +1693, -0.347210, 0.000000, -0.000000, -0.937787 +1694, -0.341309, 0.000000, -0.000000, -0.939951 +1695, -0.335395, 0.000000, -0.000000, -0.942078 +1696, -0.329467, 0.000000, -0.000000, -0.944167 +1697, -0.323526, 0.000000, -0.000000, -0.946219 +1698, -0.317572, 0.000000, -0.000000, -0.948234 +1699, -0.311606, 0.000000, -0.000000, -0.950211 +1700, -0.305628, 0.000000, -0.000000, -0.952151 +1701, -0.299637, 0.000000, -0.000000, -0.954053 +1702, -0.293635, 0.000000, -0.000000, -0.955918 +1703, -0.287621, 0.000000, -0.000000, -0.957744 +1704, -0.281595, 0.000000, -0.000000, -0.959533 +1705, -0.275559, 0.000000, -0.000000, -0.961284 +1706, -0.269512, 0.000000, -0.000000, -0.962997 +1707, -0.263454, 0.000000, -0.000000, -0.964672 +1708, -0.257385, 0.000000, -0.000000, -0.966309 +1709, -0.251307, 0.000000, -0.000000, -0.967907 +1710, -0.245218, 0.000000, -0.000000, -0.969468 +1711, -0.239120, 0.000000, -0.000000, -0.970990 +1712, -0.233012, 0.000000, -0.000000, -0.972474 +1713, -0.226896, 0.000000, -0.000000, -0.973919 +1714, -0.220770, 0.000000, -0.000000, -0.975326 +1715, -0.214635, 0.000000, -0.000000, -0.976694 +1716, -0.208492, 0.000000, -0.000000, -0.978024 +1717, -0.202341, 0.000000, -0.000000, -0.979315 +1718, -0.196182, 0.000000, -0.000000, -0.980568 +1719, -0.190015, 0.000000, -0.000000, -0.981781 +1720, -0.183840, 0.000000, -0.000000, -0.982956 +1721, -0.177659, 0.000000, -0.000000, -0.984092 +1722, -0.171470, 0.000000, -0.000000, -0.985189 +1723, -0.165274, 0.000000, -0.000000, -0.986248 +1724, -0.159072, 0.000000, -0.000000, -0.987267 +1725, -0.152864, 0.000000, -0.000000, -0.988247 +1726, -0.146650, 0.000000, -0.000000, -0.989189 +1727, -0.140429, 0.000000, -0.000000, -0.990091 +1728, -0.134204, 0.000000, -0.000000, -0.990954 +1729, -0.127973, 0.000000, -0.000000, -0.991778 +1730, -0.121736, 0.000000, -0.000000, -0.992562 +1731, -0.115496, 0.000000, -0.000000, -0.993308 +1732, -0.109250, 0.000000, -0.000000, -0.994014 +1733, -0.103000, 0.000000, -0.000000, -0.994681 +1734, -0.096747, 0.000000, -0.000000, -0.995309 +1735, -0.090489, 0.000000, -0.000000, -0.995897 +1736, -0.084228, 0.000000, -0.000000, -0.996447 +1737, -0.077963, 0.000000, -0.000000, -0.996956 +1738, -0.071695, 0.000000, -0.000000, -0.997427 +1739, -0.065425, 0.000000, -0.000000, -0.997857 +1740, -0.059152, 0.000000, -0.000000, -0.998249 +1741, -0.052876, 0.000000, -0.000000, -0.998601 +1742, -0.046599, 0.000000, -0.000000, -0.998914 +1743, -0.040320, 0.000000, -0.000000, -0.999187 +1744, -0.034039, 0.000000, -0.000000, -0.999421 +1745, -0.027756, 0.000000, -0.000000, -0.999615 +1746, -0.021473, 0.000000, -0.000000, -0.999769 +1747, -0.015189, 0.000000, -0.000000, -0.999885 +1748, -0.008904, 0.000000, -0.000000, -0.999960 +1749, -0.002619, 0.000000, -0.000000, -0.999997 +1750, 0.003666, 0.000000, 0.000000, -0.999993 +1751, 0.009952, 0.000000, 0.000000, -0.999950 +1752, 0.016236, 0.000000, 0.000000, -0.999868 +1753, 0.022520, 0.000000, 0.000000, -0.999746 +1754, 0.028804, 0.000000, 0.000000, -0.999585 +1755, 0.035086, 0.000000, 0.000000, -0.999384 +1756, 0.041366, 0.000000, 0.000000, -0.999144 +1757, 0.047645, 0.000000, 0.000000, -0.998864 +1758, 0.053922, 0.000000, 0.000000, -0.998545 +1759, 0.060198, 0.000000, 0.000000, -0.998186 +1760, 0.066470, 0.000000, 0.000000, -0.997788 +1761, 0.072740, 0.000000, 0.000000, -0.997351 +1762, 0.079007, 0.000000, 0.000000, -0.996874 +1763, 0.085271, 0.000000, 0.000000, -0.996358 +1764, 0.091532, 0.000000, 0.000000, -0.995802 +1765, 0.097789, 0.000000, 0.000000, -0.995207 +1766, 0.104042, 0.000000, 0.000000, -0.994573 +1767, 0.110291, 0.000000, 0.000000, -0.993899 +1768, 0.116536, 0.000000, 0.000000, -0.993186 +1769, 0.122776, 0.000000, 0.000000, -0.992434 +1770, 0.129011, 0.000000, 0.000000, -0.991643 +1771, 0.135242, 0.000000, 0.000000, -0.990813 +1772, 0.141466, 0.000000, 0.000000, -0.989943 +1773, 0.147686, 0.000000, 0.000000, -0.989034 +1774, 0.153899, 0.000000, 0.000000, -0.988087 +1775, 0.160106, 0.000000, 0.000000, -0.987100 +1776, 0.166307, 0.000000, 0.000000, -0.986074 +1777, 0.172502, 0.000000, 0.000000, -0.985009 +1778, 0.178689, 0.000000, 0.000000, -0.983906 +1779, 0.184870, 0.000000, 0.000000, -0.982763 +1780, 0.191043, 0.000000, 0.000000, -0.981582 +1781, 0.197209, 0.000000, 0.000000, -0.980361 +1782, 0.203367, 0.000000, 0.000000, -0.979103 +1783, 0.209517, 0.000000, 0.000000, -0.977805 +1784, 0.215658, 0.000000, 0.000000, -0.976469 +1785, 0.221791, 0.000000, 0.000000, -0.975094 +1786, 0.227916, 0.000000, 0.000000, -0.973681 +1787, 0.234031, 0.000000, 0.000000, -0.972229 +1788, 0.240137, 0.000000, 0.000000, -0.970739 +1789, 0.246234, 0.000000, 0.000000, -0.969210 +1790, 0.252321, 0.000000, 0.000000, -0.967644 +1791, 0.258397, 0.000000, 0.000000, -0.966039 +1792, 0.264464, 0.000000, 0.000000, -0.964396 +1793, 0.270520, 0.000000, 0.000000, -0.962714 +1794, 0.276566, 0.000000, 0.000000, -0.960995 +1795, 0.282600, 0.000000, 0.000000, -0.959238 +1796, 0.288624, 0.000000, 0.000000, -0.957443 +1797, 0.294636, 0.000000, 0.000000, -0.955610 +1798, 0.300636, 0.000000, 0.000000, -0.953739 +1799, 0.306625, 0.000000, 0.000000, -0.951830 +1800, 0.312601, 0.000000, 0.000000, -0.949884 +1801, 0.318565, 0.000000, 0.000000, -0.947901 +1802, 0.324517, 0.000000, 0.000000, -0.945880 +1803, 0.330456, 0.000000, 0.000000, -0.943822 +1804, 0.336381, 0.000000, 0.000000, -0.941726 +1805, 0.342294, 0.000000, 0.000000, -0.939593 +1806, 0.348192, 0.000000, 0.000000, -0.937423 +1807, 0.354077, 0.000000, 0.000000, -0.935216 +1808, 0.359948, 0.000000, 0.000000, -0.932972 +1809, 0.365805, 0.000000, 0.000000, -0.930691 +1810, 0.371648, 0.000000, 0.000000, -0.928374 +1811, 0.377475, 0.000000, 0.000000, -0.926020 +1812, 0.383288, 0.000000, 0.000000, -0.923629 +1813, 0.389086, 0.000000, 0.000000, -0.921201 +1814, 0.394868, 0.000000, 0.000000, -0.918738 +1815, 0.400635, 0.000000, 0.000000, -0.916238 +1816, 0.406386, 0.000000, 0.000000, -0.913702 +1817, 0.412121, 0.000000, 0.000000, -0.911129 +1818, 0.417839, 0.000000, 0.000000, -0.908521 +1819, 0.423541, 0.000000, 0.000000, -0.905877 +1820, 0.429226, 0.000000, 0.000000, -0.903197 +1821, 0.434895, 0.000000, 0.000000, -0.900481 +1822, 0.440546, 0.000000, 0.000000, -0.897730 +1823, 0.446180, 0.000000, 0.000000, -0.894943 +1824, 0.451796, 0.000000, 0.000000, -0.892121 +1825, 0.457394, 0.000000, 0.000000, -0.889264 +1826, 0.462974, 0.000000, 0.000000, -0.886372 +1827, 0.468536, 0.000000, 0.000000, -0.883444 +1828, 0.474079, 0.000000, 0.000000, -0.880482 +1829, 0.479604, 0.000000, 0.000000, -0.877485 +1830, 0.485110, 0.000000, 0.000000, -0.874453 +1831, 0.490596, 0.000000, 0.000000, -0.871387 +1832, 0.496064, 0.000000, 0.000000, -0.868286 +1833, 0.501511, 0.000000, 0.000000, -0.865151 +1834, 0.506939, 0.000000, 0.000000, -0.861982 +1835, 0.512347, 0.000000, 0.000000, -0.858779 +1836, 0.517734, 0.000000, 0.000000, -0.855541 +1837, 0.523101, 0.000000, 0.000000, -0.852270 +1838, 0.528448, 0.000000, 0.000000, -0.848966 +1839, 0.533773, 0.000000, 0.000000, -0.845628 +1840, 0.539078, 0.000000, 0.000000, -0.842256 +1841, 0.544361, 0.000000, 0.000000, -0.838851 +1842, 0.549622, 0.000000, 0.000000, -0.835413 +1843, 0.554862, 0.000000, 0.000000, -0.831942 +1844, 0.560080, 0.000000, 0.000000, -0.828438 +1845, 0.565276, 0.000000, 0.000000, -0.824902 +1846, 0.570450, 0.000000, 0.000000, -0.821333 +1847, 0.575601, 0.000000, 0.000000, -0.817731 +1848, 0.580729, 0.000000, 0.000000, -0.814097 +1849, 0.585834, 0.000000, 0.000000, -0.810431 +1850, 0.590917, 0.000000, 0.000000, -0.806733 +1851, 0.595975, 0.000000, 0.000000, -0.803003 +1852, 0.601011, 0.000000, 0.000000, -0.799241 +1853, 0.606022, 0.000000, 0.000000, -0.795448 +1854, 0.611010, 0.000000, 0.000000, -0.791623 +1855, 0.615973, 0.000000, 0.000000, -0.787767 +1856, 0.620912, 0.000000, 0.000000, -0.783880 +1857, 0.625827, 0.000000, 0.000000, -0.779962 +1858, 0.630717, 0.000000, 0.000000, -0.776013 +1859, 0.635582, 0.000000, 0.000000, -0.772033 +1860, 0.640422, 0.000000, 0.000000, -0.768023 +1861, 0.645236, 0.000000, 0.000000, -0.763983 +1862, 0.650025, 0.000000, 0.000000, -0.759913 +1863, 0.654789, 0.000000, 0.000000, -0.755812 +1864, 0.659526, 0.000000, 0.000000, -0.751682 +1865, 0.664238, 0.000000, 0.000000, -0.747521 +1866, 0.668923, 0.000000, 0.000000, -0.743332 +1867, 0.673582, 0.000000, 0.000000, -0.739113 +1868, 0.678214, 0.000000, 0.000000, -0.734864 +1869, 0.682819, 0.000000, 0.000000, -0.730587 +1870, 0.687398, 0.000000, 0.000000, -0.726281 +1871, 0.691949, 0.000000, 0.000000, -0.721946 +1872, 0.696473, 0.000000, 0.000000, -0.717583 +1873, 0.700969, 0.000000, 0.000000, -0.713191 +1874, 0.705438, 0.000000, 0.000000, -0.708771 +1875, 0.709879, 0.000000, 0.000000, -0.704324 +1876, 0.714292, 0.000000, 0.000000, -0.699848 +1877, 0.718676, 0.000000, 0.000000, -0.695345 +1878, 0.723033, 0.000000, 0.000000, -0.690814 +1879, 0.727360, 0.000000, 0.000000, -0.686256 +1880, 0.731659, 0.000000, 0.000000, -0.681671 +1881, 0.735929, 0.000000, 0.000000, -0.677058 +1882, 0.740170, 0.000000, 0.000000, -0.672420 +1883, 0.744382, 0.000000, 0.000000, -0.667754 +1884, 0.748564, 0.000000, 0.000000, -0.663062 +1885, 0.752717, 0.000000, 0.000000, -0.658344 +1886, 0.756840, 0.000000, 0.000000, -0.653600 +1887, 0.760933, 0.000000, 0.000000, -0.648830 +1888, 0.764996, 0.000000, 0.000000, -0.644035 +1889, 0.769029, 0.000000, 0.000000, -0.639214 +1890, 0.773031, 0.000000, 0.000000, -0.634368 +1891, 0.777003, 0.000000, 0.000000, -0.629497 +1892, 0.780944, 0.000000, 0.000000, -0.624601 +1893, 0.784855, 0.000000, 0.000000, -0.619680 +1894, 0.788734, 0.000000, 0.000000, -0.614735 +1895, 0.792582, 0.000000, 0.000000, -0.609765 +1896, 0.796399, 0.000000, 0.000000, -0.604772 +1897, 0.800184, 0.000000, 0.000000, -0.599754 +1898, 0.803938, 0.000000, 0.000000, -0.594713 +1899, 0.807660, 0.000000, 0.000000, -0.589648 +1900, 0.811350, 0.000000, 0.000000, -0.584560 +1901, 0.815008, 0.000000, 0.000000, -0.579449 +1902, 0.818634, 0.000000, 0.000000, -0.574315 +1903, 0.822228, 0.000000, 0.000000, -0.569158 +1904, 0.825789, 0.000000, 0.000000, -0.563979 +1905, 0.829317, 0.000000, 0.000000, -0.558778 +1906, 0.832813, 0.000000, 0.000000, -0.553554 +1907, 0.836276, 0.000000, 0.000000, -0.548309 +1908, 0.839706, 0.000000, 0.000000, -0.543042 +1909, 0.843102, 0.000000, 0.000000, -0.537754 +1910, 0.846465, 0.000000, 0.000000, -0.532444 +1911, 0.849795, 0.000000, 0.000000, -0.527113 +1912, 0.853091, 0.000000, 0.000000, -0.521761 +1913, 0.856354, 0.000000, 0.000000, -0.516389 +1914, 0.859583, 0.000000, 0.000000, -0.510997 +1915, 0.862777, 0.000000, 0.000000, -0.505584 +1916, 0.865938, 0.000000, 0.000000, -0.500151 +1917, 0.869065, 0.000000, 0.000000, -0.494699 +1918, 0.872157, 0.000000, 0.000000, -0.489227 +1919, 0.875214, 0.000000, 0.000000, -0.483735 +1920, 0.878237, 0.000000, 0.000000, -0.478225 +1921, 0.881226, 0.000000, 0.000000, -0.472695 +1922, 0.884179, 0.000000, 0.000000, -0.467147 +1923, 0.887098, 0.000000, 0.000000, -0.461581 +1924, 0.889982, 0.000000, 0.000000, -0.455996 +1925, 0.892830, 0.000000, 0.000000, -0.450393 +1926, 0.895643, 0.000000, 0.000000, -0.444773 +1927, 0.898421, 0.000000, 0.000000, -0.439135 +1928, 0.901164, 0.000000, 0.000000, -0.433479 +1929, 0.903870, 0.000000, 0.000000, -0.427807 +1930, 0.906541, 0.000000, 0.000000, -0.422117 +1931, 0.909177, 0.000000, 0.000000, -0.416411 +1932, 0.911776, 0.000000, 0.000000, -0.410688 +1933, 0.914339, 0.000000, 0.000000, -0.404950 +1934, 0.916866, 0.000000, 0.000000, -0.399195 +1935, 0.919357, 0.000000, 0.000000, -0.393424 +1936, 0.921812, 0.000000, 0.000000, -0.387638 +1937, 0.924230, 0.000000, 0.000000, -0.381836 +1938, 0.926612, 0.000000, 0.000000, -0.376020 +1939, 0.928957, 0.000000, 0.000000, -0.370188 +1940, 0.931265, 0.000000, 0.000000, -0.364342 +1941, 0.933537, 0.000000, 0.000000, -0.358482 +1942, 0.935771, 0.000000, 0.000000, -0.352607 +1943, 0.937969, 0.000000, 0.000000, -0.346719 +1944, 0.940130, 0.000000, 0.000000, -0.340817 +1945, 0.942253, 0.000000, 0.000000, -0.334901 +1946, 0.944340, 0.000000, 0.000000, -0.328972 +1947, 0.946389, 0.000000, 0.000000, -0.323030 +1948, 0.948400, 0.000000, 0.000000, -0.317076 +1949, 0.950374, 0.000000, 0.000000, -0.311108 +1950, 0.952311, 0.000000, 0.000000, -0.305129 +1951, 0.954210, 0.000000, 0.000000, -0.299137 +1952, 0.956071, 0.000000, 0.000000, -0.293134 +1953, 0.957895, 0.000000, 0.000000, -0.287119 +1954, 0.959681, 0.000000, 0.000000, -0.281093 +1955, 0.961428, 0.000000, 0.000000, -0.275056 +1956, 0.963138, 0.000000, 0.000000, -0.269007 +1957, 0.964810, 0.000000, 0.000000, -0.262948 +1958, 0.966444, 0.000000, 0.000000, -0.256879 +1959, 0.968039, 0.000000, 0.000000, -0.250800 +1960, 0.969596, 0.000000, 0.000000, -0.244710 +1961, 0.971115, 0.000000, 0.000000, -0.238611 +1962, 0.972596, 0.000000, 0.000000, -0.232503 +1963, 0.974038, 0.000000, 0.000000, -0.226385 +1964, 0.975441, 0.000000, 0.000000, -0.220259 +1965, 0.976807, 0.000000, 0.000000, -0.214124 +1966, 0.978133, 0.000000, 0.000000, -0.207980 +1967, 0.979421, 0.000000, 0.000000, -0.201828 +1968, 0.980670, 0.000000, 0.000000, -0.195668 +1969, 0.981881, 0.000000, 0.000000, -0.189501 +1970, 0.983052, 0.000000, 0.000000, -0.183326 +1971, 0.984185, 0.000000, 0.000000, -0.177143 +1972, 0.985279, 0.000000, 0.000000, -0.170954 +1973, 0.986334, 0.000000, 0.000000, -0.164758 +1974, 0.987350, 0.000000, 0.000000, -0.158555 +1975, 0.988327, 0.000000, 0.000000, -0.152346 +1976, 0.989265, 0.000000, 0.000000, -0.146131 +1977, 0.990164, 0.000000, 0.000000, -0.139911 +1978, 0.991024, 0.000000, 0.000000, -0.133685 +1979, 0.991845, 0.000000, 0.000000, -0.127453 +1980, 0.992626, 0.000000, 0.000000, -0.121217 +1981, 0.993368, 0.000000, 0.000000, -0.114975 +1982, 0.994071, 0.000000, 0.000000, -0.108729 +1983, 0.994735, 0.000000, 0.000000, -0.102479 +1984, 0.995360, 0.000000, 0.000000, -0.096225 +1985, 0.995945, 0.000000, 0.000000, -0.089967 +1986, 0.996491, 0.000000, 0.000000, -0.083706 +1987, 0.996997, 0.000000, 0.000000, -0.077441 +1988, 0.997464, 0.000000, 0.000000, -0.071173 +1989, 0.997892, 0.000000, 0.000000, -0.064902 +1990, 0.998280, 0.000000, 0.000000, -0.058629 +1991, 0.998629, 0.000000, 0.000000, -0.052353 +1992, 0.998938, 0.000000, 0.000000, -0.046076 +1993, 0.999208, 0.000000, 0.000000, -0.039796 +1994, 0.999438, 0.000000, 0.000000, -0.033515 +1995, 0.999629, 0.000000, 0.000000, -0.027233 +1996, 0.999781, 0.000000, 0.000000, -0.020949 +1997, 0.999892, 0.000000, 0.000000, -0.014665 +1998, 0.999965, 0.000000, 0.000000, -0.008380 +1999, 0.999998, 0.000000, 0.000000, -0.002095 +2000, 0.999991, 0.000000, 0.000000, 0.004190 +2001, 0.999945, 0.000000, 0.000000, 0.010475 +2002, 0.999860, 0.000000, 0.000000, 0.016760 +2003, 0.999734, 0.000000, 0.000000, 0.023044 +2004, 0.999570, 0.000000, 0.000000, 0.029327 +2005, 0.999366, 0.000000, 0.000000, 0.035609 +2006, 0.999122, 0.000000, 0.000000, 0.041890 +2007, 0.998839, 0.000000, 0.000000, 0.048169 +2008, 0.998517, 0.000000, 0.000000, 0.054445 +2009, 0.998155, 0.000000, 0.000000, 0.060720 +2010, 0.997753, 0.000000, 0.000000, 0.066993 +2011, 0.997313, 0.000000, 0.000000, 0.073263 +2012, 0.996833, 0.000000, 0.000000, 0.079529 +2013, 0.996313, 0.000000, 0.000000, 0.085793 +2014, 0.995754, 0.000000, 0.000000, 0.092054 +2015, 0.995156, 0.000000, 0.000000, 0.098310 +2016, 0.994518, 0.000000, 0.000000, 0.104563 +2017, 0.993841, 0.000000, 0.000000, 0.110812 +2018, 0.993125, 0.000000, 0.000000, 0.117056 +2019, 0.992370, 0.000000, 0.000000, 0.123296 +2020, 0.991575, 0.000000, 0.000000, 0.129531 +2021, 0.990742, 0.000000, 0.000000, 0.135761 +2022, 0.989869, 0.000000, 0.000000, 0.141985 +2023, 0.988957, 0.000000, 0.000000, 0.148204 +2024, 0.988006, 0.000000, 0.000000, 0.154417 +2025, 0.987016, 0.000000, 0.000000, 0.160623 +2026, 0.985987, 0.000000, 0.000000, 0.166824 +2027, 0.984919, 0.000000, 0.000000, 0.173018 +2028, 0.983812, 0.000000, 0.000000, 0.179205 +2029, 0.982666, 0.000000, 0.000000, 0.185385 +2030, 0.981481, 0.000000, 0.000000, 0.191557 +2031, 0.980258, 0.000000, 0.000000, 0.197722 +2032, 0.978996, 0.000000, 0.000000, 0.203880 +2033, 0.977695, 0.000000, 0.000000, 0.210029 +2034, 0.976356, 0.000000, 0.000000, 0.216170 +2035, 0.974978, 0.000000, 0.000000, 0.222302 +2036, 0.973561, 0.000000, 0.000000, 0.228426 +2037, 0.972106, 0.000000, 0.000000, 0.234540 +2038, 0.970613, 0.000000, 0.000000, 0.240646 +2039, 0.969081, 0.000000, 0.000000, 0.246741 +2040, 0.967511, 0.000000, 0.000000, 0.252827 +2041, 0.965903, 0.000000, 0.000000, 0.258903 +2042, 0.964257, 0.000000, 0.000000, 0.264969 +2043, 0.962572, 0.000000, 0.000000, 0.271025 +2044, 0.960850, 0.000000, 0.000000, 0.277069 +2045, 0.959090, 0.000000, 0.000000, 0.283103 +2046, 0.957291, 0.000000, 0.000000, 0.289125 +2047, 0.955455, 0.000000, 0.000000, 0.295136 +2048, 0.953581, 0.000000, 0.000000, 0.301136 +2049, 0.951670, 0.000000, 0.000000, 0.307123 +2050, 0.949721, 0.000000, 0.000000, 0.313099 +2051, 0.947734, 0.000000, 0.000000, 0.319062 +2052, 0.945710, 0.000000, 0.000000, 0.325012 +2053, 0.943648, 0.000000, 0.000000, 0.330950 +2054, 0.941550, 0.000000, 0.000000, 0.336874 +2055, 0.939414, 0.000000, 0.000000, 0.342786 +2056, 0.937241, 0.000000, 0.000000, 0.348683 +2057, 0.935031, 0.000000, 0.000000, 0.354567 +2058, 0.932784, 0.000000, 0.000000, 0.360437 +2059, 0.930500, 0.000000, 0.000000, 0.366293 +2060, 0.928179, 0.000000, 0.000000, 0.372134 +2061, 0.925822, 0.000000, 0.000000, 0.377960 +2062, 0.923428, 0.000000, 0.000000, 0.383772 +2063, 0.920998, 0.000000, 0.000000, 0.389568 +2064, 0.918531, 0.000000, 0.000000, 0.395349 +2065, 0.916028, 0.000000, 0.000000, 0.401115 +2066, 0.913489, 0.000000, 0.000000, 0.406864 +2067, 0.910913, 0.000000, 0.000000, 0.412598 +2068, 0.908302, 0.000000, 0.000000, 0.418315 +2069, 0.905655, 0.000000, 0.000000, 0.424015 +2070, 0.902972, 0.000000, 0.000000, 0.429699 +2071, 0.900253, 0.000000, 0.000000, 0.435366 +2072, 0.897499, 0.000000, 0.000000, 0.441016 +2073, 0.894710, 0.000000, 0.000000, 0.446648 +2074, 0.891885, 0.000000, 0.000000, 0.452263 +2075, 0.889024, 0.000000, 0.000000, 0.457860 +2076, 0.886129, 0.000000, 0.000000, 0.463438 +2077, 0.883199, 0.000000, 0.000000, 0.468999 +2078, 0.880234, 0.000000, 0.000000, 0.474541 +2079, 0.877234, 0.000000, 0.000000, 0.480064 +2080, 0.874199, 0.000000, 0.000000, 0.485568 +2081, 0.871130, 0.000000, 0.000000, 0.491053 +2082, 0.868026, 0.000000, 0.000000, 0.496518 +2083, 0.864888, 0.000000, 0.000000, 0.501964 +2084, 0.861716, 0.000000, 0.000000, 0.507390 +2085, 0.858510, 0.000000, 0.000000, 0.512797 +2086, 0.855270, 0.000000, 0.000000, 0.518182 +2087, 0.851996, 0.000000, 0.000000, 0.523548 +2088, 0.848689, 0.000000, 0.000000, 0.528892 +2089, 0.845348, 0.000000, 0.000000, 0.534216 +2090, 0.841974, 0.000000, 0.000000, 0.539519 +2091, 0.838566, 0.000000, 0.000000, 0.544800 +2092, 0.835125, 0.000000, 0.000000, 0.550060 +2093, 0.831651, 0.000000, 0.000000, 0.555298 +2094, 0.828145, 0.000000, 0.000000, 0.560514 +2095, 0.824606, 0.000000, 0.000000, 0.565708 +2096, 0.821034, 0.000000, 0.000000, 0.570880 +2097, 0.817429, 0.000000, 0.000000, 0.576029 +2098, 0.813793, 0.000000, 0.000000, 0.581155 +2099, 0.810124, 0.000000, 0.000000, 0.586259 +2100, 0.806423, 0.000000, 0.000000, 0.591339 +2101, 0.802690, 0.000000, 0.000000, 0.596396 +2102, 0.798926, 0.000000, 0.000000, 0.601429 +2103, 0.795130, 0.000000, 0.000000, 0.606439 +2104, 0.791303, 0.000000, 0.000000, 0.611424 +2105, 0.787444, 0.000000, 0.000000, 0.616386 +2106, 0.783555, 0.000000, 0.000000, 0.621323 +2107, 0.779634, 0.000000, 0.000000, 0.626235 +2108, 0.775683, 0.000000, 0.000000, 0.631123 +2109, 0.771700, 0.000000, 0.000000, 0.635986 +2110, 0.767688, 0.000000, 0.000000, 0.640824 +2111, 0.763645, 0.000000, 0.000000, 0.645636 +2112, 0.759572, 0.000000, 0.000000, 0.650423 +2113, 0.755469, 0.000000, 0.000000, 0.655185 +2114, 0.751336, 0.000000, 0.000000, 0.659920 +2115, 0.747173, 0.000000, 0.000000, 0.664629 +2116, 0.742981, 0.000000, 0.000000, 0.669312 +2117, 0.738760, 0.000000, 0.000000, 0.673969 +2118, 0.734509, 0.000000, 0.000000, 0.678599 +2119, 0.730229, 0.000000, 0.000000, 0.683202 +2120, 0.725921, 0.000000, 0.000000, 0.687778 +2121, 0.721584, 0.000000, 0.000000, 0.692327 +2122, 0.717218, 0.000000, 0.000000, 0.696849 +2123, 0.712824, 0.000000, 0.000000, 0.701343 +2124, 0.708402, 0.000000, 0.000000, 0.705809 +2125, 0.703952, 0.000000, 0.000000, 0.710248 +2126, 0.699474, 0.000000, 0.000000, 0.714658 +2127, 0.694968, 0.000000, 0.000000, 0.719041 +2128, 0.690435, 0.000000, 0.000000, 0.723394 +2129, 0.685875, 0.000000, 0.000000, 0.727720 +2130, 0.681287, 0.000000, 0.000000, 0.732016 +2131, 0.676673, 0.000000, 0.000000, 0.736284 +2132, 0.672032, 0.000000, 0.000000, 0.740522 +2133, 0.667364, 0.000000, 0.000000, 0.744732 +2134, 0.662670, 0.000000, 0.000000, 0.748911 +2135, 0.657950, 0.000000, 0.000000, 0.753062 +2136, 0.653204, 0.000000, 0.000000, 0.757182 +2137, 0.648432, 0.000000, 0.000000, 0.761273 +2138, 0.643634, 0.000000, 0.000000, 0.765333 +2139, 0.638811, 0.000000, 0.000000, 0.769363 +2140, 0.633963, 0.000000, 0.000000, 0.773363 +2141, 0.629090, 0.000000, 0.000000, 0.777333 +2142, 0.624192, 0.000000, 0.000000, 0.781271 +2143, 0.619269, 0.000000, 0.000000, 0.785179 +2144, 0.614321, 0.000000, 0.000000, 0.789056 +2145, 0.609350, 0.000000, 0.000000, 0.792901 +2146, 0.604354, 0.000000, 0.000000, 0.796716 +2147, 0.599335, 0.000000, 0.000000, 0.800498 +2148, 0.594292, 0.000000, 0.000000, 0.804250 +2149, 0.589225, 0.000000, 0.000000, 0.807969 +2150, 0.584135, 0.000000, 0.000000, 0.811656 +2151, 0.579022, 0.000000, 0.000000, 0.815312 +2152, 0.573886, 0.000000, 0.000000, 0.818935 +2153, 0.568728, 0.000000, 0.000000, 0.822526 +2154, 0.563547, 0.000000, 0.000000, 0.826084 +2155, 0.558343, 0.000000, 0.000000, 0.829610 +2156, 0.553118, 0.000000, 0.000000, 0.833103 +2157, 0.547871, 0.000000, 0.000000, 0.836563 +2158, 0.542602, 0.000000, 0.000000, 0.839990 +2159, 0.537312, 0.000000, 0.000000, 0.843384 +2160, 0.532000, 0.000000, 0.000000, 0.846744 +2161, 0.526668, 0.000000, 0.000000, 0.850071 +2162, 0.521315, 0.000000, 0.000000, 0.853365 +2163, 0.515941, 0.000000, 0.000000, 0.856624 +2164, 0.510546, 0.000000, 0.000000, 0.859850 +2165, 0.505132, 0.000000, 0.000000, 0.863042 +2166, 0.499698, 0.000000, 0.000000, 0.866200 +2167, 0.494243, 0.000000, 0.000000, 0.869324 +2168, 0.488770, 0.000000, 0.000000, 0.872413 +2169, 0.483277, 0.000000, 0.000000, 0.875468 +2170, 0.477765, 0.000000, 0.000000, 0.878488 +2171, 0.472234, 0.000000, 0.000000, 0.881473 +2172, 0.466684, 0.000000, 0.000000, 0.884424 +2173, 0.461116, 0.000000, 0.000000, 0.887340 +2174, 0.455530, 0.000000, 0.000000, 0.890220 +2175, 0.449926, 0.000000, 0.000000, 0.893066 +2176, 0.444304, 0.000000, 0.000000, 0.895876 +2177, 0.438664, 0.000000, 0.000000, 0.898651 +2178, 0.433007, 0.000000, 0.000000, 0.901390 +2179, 0.427333, 0.000000, 0.000000, 0.904094 +2180, 0.421642, 0.000000, 0.000000, 0.906762 +2181, 0.415935, 0.000000, 0.000000, 0.909394 +2182, 0.410211, 0.000000, 0.000000, 0.911991 +2183, 0.404471, 0.000000, 0.000000, 0.914551 +2184, 0.398714, 0.000000, 0.000000, 0.917075 +2185, 0.392942, 0.000000, 0.000000, 0.919563 +2186, 0.387155, 0.000000, 0.000000, 0.922015 +2187, 0.381352, 0.000000, 0.000000, 0.924430 +2188, 0.375535, 0.000000, 0.000000, 0.926808 +2189, 0.369702, 0.000000, 0.000000, 0.929150 +2190, 0.363855, 0.000000, 0.000000, 0.931456 +2191, 0.357993, 0.000000, 0.000000, 0.933724 +2192, 0.352117, 0.000000, 0.000000, 0.935956 +2193, 0.346228, 0.000000, 0.000000, 0.938151 +2194, 0.340324, 0.000000, 0.000000, 0.940308 +2195, 0.334407, 0.000000, 0.000000, 0.942429 +2196, 0.328478, 0.000000, 0.000000, 0.944512 +2197, 0.322535, 0.000000, 0.000000, 0.946558 +2198, 0.316579, 0.000000, 0.000000, 0.948566 +2199, 0.310611, 0.000000, 0.000000, 0.950537 +2200, 0.304630, 0.000000, 0.000000, 0.952471 +2201, 0.298638, 0.000000, 0.000000, 0.954367 +2202, 0.292633, 0.000000, 0.000000, 0.956225 +2203, 0.286617, 0.000000, 0.000000, 0.958045 +2204, 0.280590, 0.000000, 0.000000, 0.959828 +2205, 0.274552, 0.000000, 0.000000, 0.961572 +2206, 0.268503, 0.000000, 0.000000, 0.963279 +2207, 0.262443, 0.000000, 0.000000, 0.964947 +2208, 0.256373, 0.000000, 0.000000, 0.966578 +2209, 0.250293, 0.000000, 0.000000, 0.968170 +2210, 0.244203, 0.000000, 0.000000, 0.969724 +2211, 0.238103, 0.000000, 0.000000, 0.971240 +2212, 0.231994, 0.000000, 0.000000, 0.972717 +2213, 0.225875, 0.000000, 0.000000, 0.974156 +2214, 0.219748, 0.000000, 0.000000, 0.975557 +2215, 0.213612, 0.000000, 0.000000, 0.976919 +2216, 0.207468, 0.000000, 0.000000, 0.978242 +2217, 0.201315, 0.000000, 0.000000, 0.979527 +2218, 0.195155, 0.000000, 0.000000, 0.980773 +2219, 0.188986, 0.000000, 0.000000, 0.981980 +2220, 0.182811, 0.000000, 0.000000, 0.983148 +2221, 0.176628, 0.000000, 0.000000, 0.984278 +2222, 0.170438, 0.000000, 0.000000, 0.985368 +2223, 0.164241, 0.000000, 0.000000, 0.986420 +2224, 0.158038, 0.000000, 0.000000, 0.987433 +2225, 0.151829, 0.000000, 0.000000, 0.988407 +2226, 0.145613, 0.000000, 0.000000, 0.989342 +2227, 0.139392, 0.000000, 0.000000, 0.990237 +2228, 0.133165, 0.000000, 0.000000, 0.991094 +2229, 0.126934, 0.000000, 0.000000, 0.991911 +2230, 0.120697, 0.000000, 0.000000, 0.992689 +2231, 0.114455, 0.000000, 0.000000, 0.993428 +2232, 0.108209, 0.000000, 0.000000, 0.994128 +2233, 0.101958, 0.000000, 0.000000, 0.994789 +2234, 0.095704, 0.000000, 0.000000, 0.995410 +2235, 0.089446, 0.000000, 0.000000, 0.995992 +2236, 0.083184, 0.000000, 0.000000, 0.996534 +2237, 0.076919, 0.000000, 0.000000, 0.997037 +2238, 0.070650, 0.000000, 0.000000, 0.997501 +2239, 0.064380, 0.000000, 0.000000, 0.997925 +2240, 0.058106, 0.000000, 0.000000, 0.998310 +2241, 0.051830, 0.000000, 0.000000, 0.998656 +2242, 0.045553, 0.000000, 0.000000, 0.998962 +2243, 0.039273, 0.000000, 0.000000, 0.999229 +2244, 0.032992, 0.000000, 0.000000, 0.999456 +2245, 0.026709, 0.000000, 0.000000, 0.999643 +2246, 0.020426, 0.000000, 0.000000, 0.999791 +2247, 0.014141, 0.000000, 0.000000, 0.999900 +2248, 0.007857, 0.000000, 0.000000, 0.999969 +2249, 0.001571, 0.000000, 0.000000, 0.999999 +2250, -0.004714, -0.000000, 0.000000, 0.999989 +2251, -0.010999, -0.000000, 0.000000, 0.999940 +2252, -0.017284, -0.000000, 0.000000, 0.999851 +2253, -0.023568, -0.000000, 0.000000, 0.999722 +2254, -0.029851, -0.000000, 0.000000, 0.999554 +2255, -0.036132, -0.000000, 0.000000, 0.999347 +2256, -0.042413, -0.000000, 0.000000, 0.999100 +2257, -0.048692, -0.000000, 0.000000, 0.998814 +2258, -0.054968, -0.000000, 0.000000, 0.998488 +2259, -0.061243, -0.000000, 0.000000, 0.998123 +2260, -0.067515, -0.000000, 0.000000, 0.997718 +2261, -0.073785, -0.000000, 0.000000, 0.997274 +2262, -0.080052, -0.000000, 0.000000, 0.996791 +2263, -0.086315, -0.000000, 0.000000, 0.996268 +2264, -0.092575, -0.000000, 0.000000, 0.995706 +2265, -0.098832, -0.000000, 0.000000, 0.995104 +2266, -0.105084, -0.000000, 0.000000, 0.994463 +2267, -0.111332, -0.000000, 0.000000, 0.993783 +2268, -0.117576, -0.000000, 0.000000, 0.993064 +2269, -0.123816, -0.000000, 0.000000, 0.992305 +2270, -0.130050, -0.000000, 0.000000, 0.991507 +2271, -0.136279, -0.000000, 0.000000, 0.990670 +2272, -0.142503, -0.000000, 0.000000, 0.989794 +2273, -0.148722, -0.000000, 0.000000, 0.988879 +2274, -0.154934, -0.000000, 0.000000, 0.987925 +2275, -0.161140, -0.000000, 0.000000, 0.986932 +2276, -0.167340, -0.000000, 0.000000, 0.985899 +2277, -0.173534, -0.000000, 0.000000, 0.984828 +2278, -0.179720, -0.000000, 0.000000, 0.983718 +2279, -0.185899, -0.000000, 0.000000, 0.982569 +2280, -0.192071, -0.000000, 0.000000, 0.981381 +2281, -0.198236, -0.000000, 0.000000, 0.980154 +2282, -0.204392, -0.000000, 0.000000, 0.978889 +2283, -0.210541, -0.000000, 0.000000, 0.977585 +2284, -0.216681, -0.000000, 0.000000, 0.976242 +2285, -0.222813, -0.000000, 0.000000, 0.974861 +2286, -0.228936, -0.000000, 0.000000, 0.973442 +2287, -0.235049, -0.000000, 0.000000, 0.971983 +2288, -0.241154, -0.000000, 0.000000, 0.970487 +2289, -0.247249, -0.000000, 0.000000, 0.968952 +2290, -0.253334, -0.000000, 0.000000, 0.967379 +2291, -0.259409, -0.000000, 0.000000, 0.965767 +2292, -0.265474, -0.000000, 0.000000, 0.964118 +2293, -0.271529, -0.000000, 0.000000, 0.962430 +2294, -0.277572, -0.000000, 0.000000, 0.960705 +2295, -0.283605, -0.000000, 0.000000, 0.958941 +2296, -0.289627, -0.000000, 0.000000, 0.957140 +2297, -0.295637, -0.000000, 0.000000, 0.955300 +2298, -0.301635, -0.000000, 0.000000, 0.953423 +2299, -0.307622, -0.000000, 0.000000, 0.951509 +2300, -0.313596, -0.000000, 0.000000, 0.949556 +2301, -0.319558, -0.000000, 0.000000, 0.947567 +2302, -0.325508, -0.000000, 0.000000, 0.945539 +2303, -0.331444, -0.000000, 0.000000, 0.943475 +2304, -0.337368, -0.000000, 0.000000, 0.941373 +2305, -0.343278, -0.000000, 0.000000, 0.939234 +2306, -0.349174, -0.000000, 0.000000, 0.937058 +2307, -0.355057, -0.000000, 0.000000, 0.934845 +2308, -0.360926, -0.000000, 0.000000, 0.932595 +2309, -0.366780, -0.000000, 0.000000, 0.930308 +2310, -0.372620, -0.000000, 0.000000, 0.927984 +2311, -0.378445, -0.000000, 0.000000, 0.925624 +2312, -0.384256, -0.000000, 0.000000, 0.923227 +2313, -0.390051, -0.000000, 0.000000, 0.920793 +2314, -0.395830, -0.000000, 0.000000, 0.918324 +2315, -0.401594, -0.000000, 0.000000, 0.915818 +2316, -0.407343, -0.000000, 0.000000, 0.913275 +2317, -0.413075, -0.000000, 0.000000, 0.910697 +2318, -0.418791, -0.000000, 0.000000, 0.908083 +2319, -0.424490, -0.000000, 0.000000, 0.905433 +2320, -0.430172, -0.000000, 0.000000, 0.902747 +2321, -0.435838, -0.000000, 0.000000, 0.900025 +2322, -0.441486, -0.000000, 0.000000, 0.897268 +2323, -0.447117, -0.000000, 0.000000, 0.894476 +2324, -0.452730, -0.000000, 0.000000, 0.891648 +2325, -0.458325, -0.000000, 0.000000, 0.888785 +2326, -0.463902, -0.000000, 0.000000, 0.885886 +2327, -0.469461, -0.000000, 0.000000, 0.882953 +2328, -0.475002, -0.000000, 0.000000, 0.879985 +2329, -0.480523, -0.000000, 0.000000, 0.876982 +2330, -0.486026, -0.000000, 0.000000, 0.873945 +2331, -0.491509, -0.000000, 0.000000, 0.870872 +2332, -0.496973, -0.000000, 0.000000, 0.867766 +2333, -0.502417, -0.000000, 0.000000, 0.864625 +2334, -0.507842, -0.000000, 0.000000, 0.861450 +2335, -0.513246, -0.000000, 0.000000, 0.858241 +2336, -0.518630, -0.000000, 0.000000, 0.854999 +2337, -0.523994, -0.000000, 0.000000, 0.851722 +2338, -0.529337, -0.000000, 0.000000, 0.848412 +2339, -0.534659, -0.000000, 0.000000, 0.845068 +2340, -0.539960, -0.000000, 0.000000, 0.841691 +2341, -0.545239, -0.000000, 0.000000, 0.838280 +2342, -0.550497, -0.000000, 0.000000, 0.834837 +2343, -0.555734, -0.000000, 0.000000, 0.831360 +2344, -0.560948, -0.000000, 0.000000, 0.827851 +2345, -0.566140, -0.000000, 0.000000, 0.824309 +2346, -0.571310, -0.000000, 0.000000, 0.820734 +2347, -0.576457, -0.000000, 0.000000, 0.817127 +2348, -0.581581, -0.000000, 0.000000, 0.813488 +2349, -0.586683, -0.000000, 0.000000, 0.809817 +2350, -0.591761, -0.000000, 0.000000, 0.806113 +2351, -0.596816, -0.000000, 0.000000, 0.802378 +2352, -0.601848, -0.000000, 0.000000, 0.798611 +2353, -0.606855, -0.000000, 0.000000, 0.794812 +2354, -0.611839, -0.000000, 0.000000, 0.790983 +2355, -0.616798, -0.000000, 0.000000, 0.787121 +2356, -0.621733, -0.000000, 0.000000, 0.783229 +2357, -0.626644, -0.000000, 0.000000, 0.779306 +2358, -0.631529, -0.000000, 0.000000, 0.775352 +2359, -0.636390, -0.000000, 0.000000, 0.771367 +2360, -0.641226, -0.000000, 0.000000, 0.767352 +2361, -0.646036, -0.000000, 0.000000, 0.763307 +2362, -0.650821, -0.000000, 0.000000, 0.759231 +2363, -0.655580, -0.000000, 0.000000, 0.755126 +2364, -0.660313, -0.000000, 0.000000, 0.750990 +2365, -0.665020, -0.000000, 0.000000, 0.746825 +2366, -0.669701, -0.000000, 0.000000, 0.742631 +2367, -0.674356, -0.000000, 0.000000, 0.738407 +2368, -0.678983, -0.000000, 0.000000, 0.734154 +2369, -0.683584, -0.000000, 0.000000, 0.729872 +2370, -0.688158, -0.000000, 0.000000, 0.725561 +2371, -0.692705, -0.000000, 0.000000, 0.721221 +2372, -0.697224, -0.000000, 0.000000, 0.716853 +2373, -0.701716, -0.000000, 0.000000, 0.712457 +2374, -0.706180, -0.000000, 0.000000, 0.708032 +2375, -0.710616, -0.000000, 0.000000, 0.703580 +2376, -0.715025, -0.000000, 0.000000, 0.699099 +2377, -0.719404, -0.000000, 0.000000, 0.694591 +2378, -0.723756, -0.000000, 0.000000, 0.690056 +2379, -0.728079, -0.000000, 0.000000, 0.685493 +2380, -0.732373, -0.000000, 0.000000, 0.680904 +2381, -0.736638, -0.000000, 0.000000, 0.676287 +2382, -0.740874, -0.000000, 0.000000, 0.671644 +2383, -0.745081, -0.000000, 0.000000, 0.666974 +2384, -0.749258, -0.000000, 0.000000, 0.662278 +2385, -0.753406, -0.000000, 0.000000, 0.657555 +2386, -0.757524, -0.000000, 0.000000, 0.652807 +2387, -0.761612, -0.000000, 0.000000, 0.648033 +2388, -0.765670, -0.000000, 0.000000, 0.643233 +2389, -0.769698, -0.000000, 0.000000, 0.638408 +2390, -0.773695, -0.000000, 0.000000, 0.633558 +2391, -0.777662, -0.000000, 0.000000, 0.628682 +2392, -0.781598, -0.000000, 0.000000, 0.623782 +2393, -0.785503, -0.000000, 0.000000, 0.618857 +2394, -0.789377, -0.000000, 0.000000, 0.613908 +2395, -0.793220, -0.000000, 0.000000, 0.608935 +2396, -0.797032, -0.000000, 0.000000, 0.603937 +2397, -0.800812, -0.000000, 0.000000, 0.598915 +2398, -0.804561, -0.000000, 0.000000, 0.593870 +2399, -0.808277, -0.000000, 0.000000, 0.588802 +2400, -0.811962, -0.000000, 0.000000, 0.583710 +2401, -0.815615, -0.000000, 0.000000, 0.578595 +2402, -0.819235, -0.000000, 0.000000, 0.573457 +2403, -0.822824, -0.000000, 0.000000, 0.568297 +2404, -0.826379, -0.000000, 0.000000, 0.563114 +2405, -0.829902, -0.000000, 0.000000, 0.557909 +2406, -0.833392, -0.000000, 0.000000, 0.552682 +2407, -0.836850, -0.000000, 0.000000, 0.547433 +2408, -0.840274, -0.000000, 0.000000, 0.542162 +2409, -0.843665, -0.000000, 0.000000, 0.536870 +2410, -0.847023, -0.000000, 0.000000, 0.531557 +2411, -0.850347, -0.000000, 0.000000, 0.526223 +2412, -0.853638, -0.000000, 0.000000, 0.520868 +2413, -0.856894, -0.000000, 0.000000, 0.515492 +2414, -0.860117, -0.000000, 0.000000, 0.510096 +2415, -0.863307, -0.000000, 0.000000, 0.504680 +2416, -0.866462, -0.000000, 0.000000, 0.499244 +2417, -0.869582, -0.000000, 0.000000, 0.493788 +2418, -0.872669, -0.000000, 0.000000, 0.488313 +2419, -0.875721, -0.000000, 0.000000, 0.482818 +2420, -0.878738, -0.000000, 0.000000, 0.477305 +2421, -0.881721, -0.000000, 0.000000, 0.471772 +2422, -0.884668, -0.000000, 0.000000, 0.466221 +2423, -0.887581, -0.000000, 0.000000, 0.460651 +2424, -0.890459, -0.000000, 0.000000, 0.455064 +2425, -0.893302, -0.000000, 0.000000, 0.449458 +2426, -0.896109, -0.000000, 0.000000, 0.443834 +2427, -0.898881, -0.000000, 0.000000, 0.438193 +2428, -0.901617, -0.000000, 0.000000, 0.432535 +2429, -0.904318, -0.000000, 0.000000, 0.426860 +2430, -0.906983, -0.000000, 0.000000, 0.421167 +2431, -0.909612, -0.000000, 0.000000, 0.415458 +2432, -0.912206, -0.000000, 0.000000, 0.409733 +2433, -0.914763, -0.000000, 0.000000, 0.403991 +2434, -0.917284, -0.000000, 0.000000, 0.398234 +2435, -0.919769, -0.000000, 0.000000, 0.392461 +2436, -0.922217, -0.000000, 0.000000, 0.386672 +2437, -0.924629, -0.000000, 0.000000, 0.380868 +2438, -0.927005, -0.000000, 0.000000, 0.375049 +2439, -0.929344, -0.000000, 0.000000, 0.369215 +2440, -0.931646, -0.000000, 0.000000, 0.363367 +2441, -0.933912, -0.000000, 0.000000, 0.357504 +2442, -0.936140, -0.000000, 0.000000, 0.351627 +2443, -0.938332, -0.000000, 0.000000, 0.345736 +2444, -0.940486, -0.000000, 0.000000, 0.339832 +2445, -0.942604, -0.000000, 0.000000, 0.333914 +2446, -0.944684, -0.000000, 0.000000, 0.327983 +2447, -0.946727, -0.000000, 0.000000, 0.322039 +2448, -0.948732, -0.000000, 0.000000, 0.316082 +2449, -0.950700, -0.000000, 0.000000, 0.310113 +2450, -0.952630, -0.000000, 0.000000, 0.304131 +2451, -0.954523, -0.000000, 0.000000, 0.298138 +2452, -0.956378, -0.000000, 0.000000, 0.292132 +2453, -0.958195, -0.000000, 0.000000, 0.286116 +2454, -0.959975, -0.000000, 0.000000, 0.280087 +2455, -0.961716, -0.000000, 0.000000, 0.274048 +2456, -0.963419, -0.000000, 0.000000, 0.267998 +2457, -0.965085, -0.000000, 0.000000, 0.261938 +2458, -0.966712, -0.000000, 0.000000, 0.255867 +2459, -0.968301, -0.000000, 0.000000, 0.249786 +2460, -0.969852, -0.000000, 0.000000, 0.243695 +2461, -0.971365, -0.000000, 0.000000, 0.237594 +2462, -0.972839, -0.000000, 0.000000, 0.231484 +2463, -0.974274, -0.000000, 0.000000, 0.225365 +2464, -0.975672, -0.000000, 0.000000, 0.219237 +2465, -0.977030, -0.000000, 0.000000, 0.213100 +2466, -0.978350, -0.000000, 0.000000, 0.206955 +2467, -0.979632, -0.000000, 0.000000, 0.200802 +2468, -0.980875, -0.000000, 0.000000, 0.194641 +2469, -0.982079, -0.000000, 0.000000, 0.188472 +2470, -0.983244, -0.000000, 0.000000, 0.182296 +2471, -0.984370, -0.000000, 0.000000, 0.176112 +2472, -0.985458, -0.000000, 0.000000, 0.169922 +2473, -0.986506, -0.000000, 0.000000, 0.163724 +2474, -0.987516, -0.000000, 0.000000, 0.157521 +2475, -0.988486, -0.000000, 0.000000, 0.151311 +2476, -0.989418, -0.000000, 0.000000, 0.145095 +2477, -0.990310, -0.000000, 0.000000, 0.138873 +2478, -0.991163, -0.000000, 0.000000, 0.132646 +2479, -0.991978, -0.000000, 0.000000, 0.126414 +2480, -0.992753, -0.000000, 0.000000, 0.120177 +2481, -0.993488, -0.000000, 0.000000, 0.113935 +2482, -0.994185, -0.000000, 0.000000, 0.107688 +2483, -0.994842, -0.000000, 0.000000, 0.101437 +2484, -0.995460, -0.000000, 0.000000, 0.095182 +2485, -0.996038, -0.000000, 0.000000, 0.088924 +2486, -0.996578, -0.000000, 0.000000, 0.082662 +2487, -0.997078, -0.000000, 0.000000, 0.076396 +2488, -0.997538, -0.000000, 0.000000, 0.070128 +2489, -0.997959, -0.000000, 0.000000, 0.063857 +2490, -0.998341, -0.000000, 0.000000, 0.057583 +2491, -0.998683, -0.000000, 0.000000, 0.051307 +2492, -0.998986, -0.000000, 0.000000, 0.045029 +2493, -0.999249, -0.000000, 0.000000, 0.038750 +2494, -0.999473, -0.000000, 0.000000, 0.032468 +2495, -0.999657, -0.000000, 0.000000, 0.026186 +2496, -0.999802, -0.000000, 0.000000, 0.019902 +2497, -0.999907, -0.000000, 0.000000, 0.013618 +2498, -0.999973, -0.000000, 0.000000, 0.007333 +2499, -0.999999, -0.000000, 0.000000, 0.001048 +2500, -0.999986, 0.000000, -0.000000, -0.005238 +2501, -0.999934, 0.000000, -0.000000, -0.011523 +2502, -0.999841, 0.000000, -0.000000, -0.017807 +2503, -0.999710, 0.000000, -0.000000, -0.024091 +2504, -0.999539, 0.000000, -0.000000, -0.030374 +2505, -0.999328, 0.000000, -0.000000, -0.036656 +2506, -0.999078, 0.000000, -0.000000, -0.042936 +2507, -0.998788, 0.000000, -0.000000, -0.049215 +2508, -0.998459, 0.000000, -0.000000, -0.055491 +2509, -0.998091, 0.000000, -0.000000, -0.061766 +2510, -0.997683, 0.000000, -0.000000, -0.068038 +2511, -0.997235, 0.000000, -0.000000, -0.074307 +2512, -0.996749, 0.000000, -0.000000, -0.080574 +2513, -0.996223, 0.000000, -0.000000, -0.086837 +2514, -0.995657, 0.000000, -0.000000, -0.093097 +2515, -0.995052, 0.000000, -0.000000, -0.099353 +2516, -0.994408, 0.000000, -0.000000, -0.105605 +2517, -0.993725, 0.000000, -0.000000, -0.111853 +2518, -0.993002, 0.000000, -0.000000, -0.118097 +2519, -0.992240, 0.000000, -0.000000, -0.124335 +2520, -0.991439, 0.000000, -0.000000, -0.130569 +2521, -0.990599, 0.000000, -0.000000, -0.136798 +2522, -0.989720, 0.000000, -0.000000, -0.143022 +2523, -0.988801, 0.000000, -0.000000, -0.149240 +2524, -0.987844, 0.000000, -0.000000, -0.155451 +2525, -0.986847, 0.000000, -0.000000, -0.161657 +2526, -0.985811, 0.000000, -0.000000, -0.167857 +2527, -0.984737, 0.000000, -0.000000, -0.174049 +2528, -0.983624, 0.000000, -0.000000, -0.180235 +2529, -0.982471, 0.000000, -0.000000, -0.186414 +2530, -0.981280, 0.000000, -0.000000, -0.192585 +2531, -0.980050, 0.000000, -0.000000, -0.198749 +2532, -0.978782, 0.000000, -0.000000, -0.204905 +2533, -0.977475, 0.000000, -0.000000, -0.211053 +2534, -0.976129, 0.000000, -0.000000, -0.217192 +2535, -0.974744, 0.000000, -0.000000, -0.223323 +2536, -0.973322, 0.000000, -0.000000, -0.229445 +2537, -0.971860, 0.000000, -0.000000, -0.235558 +2538, -0.970360, 0.000000, -0.000000, -0.241662 +2539, -0.968822, 0.000000, -0.000000, -0.247756 +2540, -0.967246, 0.000000, -0.000000, -0.253841 +2541, -0.965631, 0.000000, -0.000000, -0.259915 +2542, -0.963979, 0.000000, -0.000000, -0.265979 +2543, -0.962288, 0.000000, -0.000000, -0.272033 +2544, -0.960559, 0.000000, -0.000000, -0.278076 +2545, -0.958792, 0.000000, -0.000000, -0.284107 +2546, -0.956988, 0.000000, -0.000000, -0.290128 +2547, -0.955145, 0.000000, -0.000000, -0.296137 +2548, -0.953265, 0.000000, -0.000000, -0.302135 +2549, -0.951347, 0.000000, -0.000000, -0.308120 +2550, -0.949392, 0.000000, -0.000000, -0.314094 +2551, -0.947399, 0.000000, -0.000000, -0.320055 +2552, -0.945369, 0.000000, -0.000000, -0.326003 +2553, -0.943301, 0.000000, -0.000000, -0.331938 +2554, -0.941196, 0.000000, -0.000000, -0.337861 +2555, -0.939054, 0.000000, -0.000000, -0.343770 +2556, -0.936875, 0.000000, -0.000000, -0.349665 +2557, -0.934659, 0.000000, -0.000000, -0.355547 +2558, -0.932405, 0.000000, -0.000000, -0.361414 +2559, -0.930115, 0.000000, -0.000000, -0.367267 +2560, -0.927789, 0.000000, -0.000000, -0.373106 +2561, -0.925425, 0.000000, -0.000000, -0.378930 +2562, -0.923025, 0.000000, -0.000000, -0.384739 +2563, -0.920589, 0.000000, -0.000000, -0.390533 +2564, -0.918116, 0.000000, -0.000000, -0.396311 +2565, -0.915607, 0.000000, -0.000000, -0.402074 +2566, -0.913062, 0.000000, -0.000000, -0.407821 +2567, -0.910481, 0.000000, -0.000000, -0.413552 +2568, -0.907863, 0.000000, -0.000000, -0.419266 +2569, -0.905210, 0.000000, -0.000000, -0.424964 +2570, -0.902521, 0.000000, -0.000000, -0.430645 +2571, -0.899797, 0.000000, -0.000000, -0.436309 +2572, -0.897037, 0.000000, -0.000000, -0.441956 +2573, -0.894241, 0.000000, -0.000000, -0.447585 +2574, -0.891410, 0.000000, -0.000000, -0.453197 +2575, -0.888544, 0.000000, -0.000000, -0.458791 +2576, -0.885643, 0.000000, -0.000000, -0.464366 +2577, -0.882707, 0.000000, -0.000000, -0.469924 +2578, -0.879736, 0.000000, -0.000000, -0.475462 +2579, -0.876730, 0.000000, -0.000000, -0.480982 +2580, -0.873690, 0.000000, -0.000000, -0.486483 +2581, -0.870615, 0.000000, -0.000000, -0.491965 +2582, -0.867506, 0.000000, -0.000000, -0.497427 +2583, -0.864362, 0.000000, -0.000000, -0.502870 +2584, -0.861184, 0.000000, -0.000000, -0.508293 +2585, -0.857973, 0.000000, -0.000000, -0.513696 +2586, -0.854727, 0.000000, -0.000000, -0.519078 +2587, -0.851447, 0.000000, -0.000000, -0.524440 +2588, -0.848134, 0.000000, -0.000000, -0.529781 +2589, -0.844788, 0.000000, -0.000000, -0.535101 +2590, -0.841408, 0.000000, -0.000000, -0.540400 +2591, -0.837995, 0.000000, -0.000000, -0.545678 +2592, -0.834549, 0.000000, -0.000000, -0.550934 +2593, -0.831069, 0.000000, -0.000000, -0.556169 +2594, -0.827557, 0.000000, -0.000000, -0.561381 +2595, -0.824012, 0.000000, -0.000000, -0.566572 +2596, -0.820435, 0.000000, -0.000000, -0.571740 +2597, -0.816825, 0.000000, -0.000000, -0.576885 +2598, -0.813183, 0.000000, -0.000000, -0.582008 +2599, -0.809509, 0.000000, -0.000000, -0.587107 +2600, -0.805803, 0.000000, -0.000000, -0.592183 +2601, -0.802065, 0.000000, -0.000000, -0.597236 +2602, -0.798296, 0.000000, -0.000000, -0.602266 +2603, -0.794494, 0.000000, -0.000000, -0.607271 +2604, -0.790662, 0.000000, -0.000000, -0.612253 +2605, -0.786798, 0.000000, -0.000000, -0.617210 +2606, -0.782903, 0.000000, -0.000000, -0.622143 +2607, -0.778978, 0.000000, -0.000000, -0.627052 +2608, -0.775021, 0.000000, -0.000000, -0.631935 +2609, -0.771034, 0.000000, -0.000000, -0.636794 +2610, -0.767016, 0.000000, -0.000000, -0.641628 +2611, -0.762968, 0.000000, -0.000000, -0.646436 +2612, -0.758890, 0.000000, -0.000000, -0.651219 +2613, -0.754782, 0.000000, -0.000000, -0.655976 +2614, -0.750644, 0.000000, -0.000000, -0.660707 +2615, -0.746477, 0.000000, -0.000000, -0.665412 +2616, -0.742280, 0.000000, -0.000000, -0.670090 +2617, -0.738053, 0.000000, -0.000000, -0.674742 +2618, -0.733798, 0.000000, -0.000000, -0.679368 +2619, -0.729513, 0.000000, -0.000000, -0.683967 +2620, -0.725200, 0.000000, -0.000000, -0.688538 +2621, -0.720858, 0.000000, -0.000000, -0.693083 +2622, -0.716488, 0.000000, -0.000000, -0.697600 +2623, -0.712089, 0.000000, -0.000000, -0.702089 +2624, -0.707662, 0.000000, -0.000000, -0.706551 +2625, -0.703207, 0.000000, -0.000000, -0.710985 +2626, -0.698725, 0.000000, -0.000000, -0.715391 +2627, -0.694214, 0.000000, -0.000000, -0.719768 +2628, -0.689677, 0.000000, -0.000000, -0.724117 +2629, -0.685112, 0.000000, -0.000000, -0.728438 +2630, -0.680520, 0.000000, -0.000000, -0.732729 +2631, -0.675901, 0.000000, -0.000000, -0.736992 +2632, -0.671256, 0.000000, -0.000000, -0.741226 +2633, -0.666584, 0.000000, -0.000000, -0.745430 +2634, -0.661885, 0.000000, -0.000000, -0.749605 +2635, -0.657161, 0.000000, -0.000000, -0.753750 +2636, -0.652410, 0.000000, -0.000000, -0.757866 +2637, -0.647634, 0.000000, -0.000000, -0.761952 +2638, -0.642832, 0.000000, -0.000000, -0.766007 +2639, -0.638005, 0.000000, -0.000000, -0.770032 +2640, -0.633153, 0.000000, -0.000000, -0.774027 +2641, -0.628275, 0.000000, -0.000000, -0.777991 +2642, -0.623373, 0.000000, -0.000000, -0.781925 +2643, -0.618446, 0.000000, -0.000000, -0.785827 +2644, -0.613495, 0.000000, -0.000000, -0.789699 +2645, -0.608519, 0.000000, -0.000000, -0.793539 +2646, -0.603519, 0.000000, -0.000000, -0.797348 +2647, -0.598496, 0.000000, -0.000000, -0.801126 +2648, -0.593449, 0.000000, -0.000000, -0.804872 +2649, -0.588378, 0.000000, -0.000000, -0.808586 +2650, -0.583285, 0.000000, -0.000000, -0.812268 +2651, -0.578168, 0.000000, -0.000000, -0.815918 +2652, -0.573028, 0.000000, -0.000000, -0.819536 +2653, -0.567866, 0.000000, -0.000000, -0.823121 +2654, -0.562681, 0.000000, -0.000000, -0.826674 +2655, -0.557474, 0.000000, -0.000000, -0.830194 +2656, -0.552245, 0.000000, -0.000000, -0.833682 +2657, -0.546994, 0.000000, -0.000000, -0.837136 +2658, -0.541722, 0.000000, -0.000000, -0.840558 +2659, -0.536428, 0.000000, -0.000000, -0.843946 +2660, -0.531113, 0.000000, -0.000000, -0.847301 +2661, -0.525777, 0.000000, -0.000000, -0.850622 +2662, -0.520420, 0.000000, -0.000000, -0.853910 +2663, -0.515043, 0.000000, -0.000000, -0.857164 +2664, -0.509645, 0.000000, -0.000000, -0.860385 +2665, -0.504228, 0.000000, -0.000000, -0.863571 +2666, -0.498790, 0.000000, -0.000000, -0.866723 +2667, -0.493332, 0.000000, -0.000000, -0.869841 +2668, -0.487856, 0.000000, -0.000000, -0.872924 +2669, -0.482359, 0.000000, -0.000000, -0.875973 +2670, -0.476844, 0.000000, -0.000000, -0.878988 +2671, -0.471310, 0.000000, -0.000000, -0.881968 +2672, -0.465757, 0.000000, -0.000000, -0.884912 +2673, -0.460186, 0.000000, -0.000000, -0.887822 +2674, -0.454597, 0.000000, -0.000000, -0.890697 +2675, -0.448990, 0.000000, -0.000000, -0.893537 +2676, -0.443365, 0.000000, -0.000000, -0.896341 +2677, -0.437722, 0.000000, -0.000000, -0.899110 +2678, -0.432063, 0.000000, -0.000000, -0.901844 +2679, -0.426386, 0.000000, -0.000000, -0.904541 +2680, -0.420692, 0.000000, -0.000000, -0.907203 +2681, -0.414982, 0.000000, -0.000000, -0.909830 +2682, -0.409255, 0.000000, -0.000000, -0.912420 +2683, -0.403512, 0.000000, -0.000000, -0.914974 +2684, -0.397753, 0.000000, -0.000000, -0.917492 +2685, -0.391979, 0.000000, -0.000000, -0.919974 +2686, -0.386189, 0.000000, -0.000000, -0.922420 +2687, -0.380384, 0.000000, -0.000000, -0.924829 +2688, -0.374563, 0.000000, -0.000000, -0.927201 +2689, -0.368728, 0.000000, -0.000000, -0.929537 +2690, -0.362879, 0.000000, -0.000000, -0.931836 +2691, -0.357015, 0.000000, -0.000000, -0.934099 +2692, -0.351137, 0.000000, -0.000000, -0.936324 +2693, -0.345245, 0.000000, -0.000000, -0.938513 +2694, -0.339339, 0.000000, -0.000000, -0.940664 +2695, -0.333420, 0.000000, -0.000000, -0.942778 +2696, -0.327488, 0.000000, -0.000000, -0.944855 +2697, -0.321543, 0.000000, -0.000000, -0.946895 +2698, -0.315585, 0.000000, -0.000000, -0.948897 +2699, -0.309615, 0.000000, -0.000000, -0.950862 +2700, -0.303632, 0.000000, -0.000000, -0.952789 +2701, -0.297638, 0.000000, -0.000000, -0.954679 +2702, -0.291631, 0.000000, -0.000000, -0.956531 +2703, -0.285614, 0.000000, -0.000000, -0.958345 +2704, -0.279585, 0.000000, -0.000000, -0.960121 +2705, -0.273544, 0.000000, -0.000000, -0.961859 +2706, -0.267494, 0.000000, -0.000000, -0.963560 +2707, -0.261432, 0.000000, -0.000000, -0.965222 +2708, -0.255360, 0.000000, -0.000000, -0.966846 +2709, -0.249278, 0.000000, -0.000000, -0.968432 +2710, -0.243187, 0.000000, -0.000000, -0.969980 +2711, -0.237085, 0.000000, -0.000000, -0.971489 +2712, -0.230975, 0.000000, -0.000000, -0.972960 +2713, -0.224855, 0.000000, -0.000000, -0.974392 +2714, -0.218726, 0.000000, -0.000000, -0.975786 +2715, -0.212589, 0.000000, -0.000000, -0.977142 +2716, -0.206443, 0.000000, -0.000000, -0.978459 +2717, -0.200289, 0.000000, -0.000000, -0.979737 +2718, -0.194127, 0.000000, -0.000000, -0.980976 +2719, -0.187958, 0.000000, -0.000000, -0.982177 +2720, -0.181781, 0.000000, -0.000000, -0.983339 +2721, -0.175596, 0.000000, -0.000000, -0.984462 +2722, -0.169405, 0.000000, -0.000000, -0.985546 +2723, -0.163208, 0.000000, -0.000000, -0.986592 +2724, -0.157003, 0.000000, -0.000000, -0.987598 +2725, -0.150793, 0.000000, -0.000000, -0.988565 +2726, -0.144577, 0.000000, -0.000000, -0.989494 +2727, -0.138355, 0.000000, -0.000000, -0.990383 +2728, -0.132127, 0.000000, -0.000000, -0.991233 +2729, -0.125894, 0.000000, -0.000000, -0.992044 +2730, -0.119657, 0.000000, -0.000000, -0.992815 +2731, -0.113414, 0.000000, -0.000000, -0.993548 +2732, -0.107167, 0.000000, -0.000000, -0.994241 +2733, -0.100916, 0.000000, -0.000000, -0.994895 +2734, -0.094661, 0.000000, -0.000000, -0.995510 +2735, -0.088402, 0.000000, -0.000000, -0.996085 +2736, -0.082140, 0.000000, -0.000000, -0.996621 +2737, -0.075874, 0.000000, -0.000000, -0.997117 +2738, -0.069606, 0.000000, -0.000000, -0.997575 +2739, -0.063334, 0.000000, -0.000000, -0.997992 +2740, -0.057060, 0.000000, -0.000000, -0.998371 +2741, -0.050784, 0.000000, -0.000000, -0.998710 +2742, -0.044506, 0.000000, -0.000000, -0.999009 +2743, -0.038226, 0.000000, -0.000000, -0.999269 +2744, -0.031945, 0.000000, -0.000000, -0.999490 +2745, -0.025662, 0.000000, -0.000000, -0.999671 +2746, -0.019378, 0.000000, -0.000000, -0.999812 +2747, -0.013094, 0.000000, -0.000000, -0.999914 +2748, -0.006809, 0.000000, -0.000000, -0.999977 +2749, -0.000524, 0.000000, -0.000000, -1.000000 +2750, 0.005761, 0.000000, 0.000000, -0.999983 +2751, 0.012046, 0.000000, 0.000000, -0.999927 +2752, 0.018331, 0.000000, 0.000000, -0.999832 +2753, 0.024615, 0.000000, 0.000000, -0.999697 +2754, 0.030898, 0.000000, 0.000000, -0.999523 +2755, 0.037179, 0.000000, 0.000000, -0.999309 +2756, 0.043459, 0.000000, 0.000000, -0.999055 +2757, 0.049738, 0.000000, 0.000000, -0.998762 +2758, 0.056014, 0.000000, 0.000000, -0.998430 +2759, 0.062289, 0.000000, 0.000000, -0.998058 +2760, 0.068560, 0.000000, 0.000000, -0.997647 +2761, 0.074830, 0.000000, 0.000000, -0.997196 +2762, 0.081096, 0.000000, 0.000000, -0.996706 +2763, 0.087359, 0.000000, 0.000000, -0.996177 +2764, 0.093618, 0.000000, 0.000000, -0.995608 +2765, 0.099874, 0.000000, 0.000000, -0.995000 +2766, 0.106126, 0.000000, 0.000000, -0.994353 +2767, 0.112373, 0.000000, 0.000000, -0.993666 +2768, 0.118617, 0.000000, 0.000000, -0.992940 +2769, 0.124855, 0.000000, 0.000000, -0.992175 +2770, 0.131089, 0.000000, 0.000000, -0.991371 +2771, 0.137317, 0.000000, 0.000000, -0.990527 +2772, 0.143540, 0.000000, 0.000000, -0.989644 +2773, 0.149757, 0.000000, 0.000000, -0.988723 +2774, 0.155969, 0.000000, 0.000000, -0.987762 +2775, 0.162174, 0.000000, 0.000000, -0.986762 +2776, 0.168373, 0.000000, 0.000000, -0.985723 +2777, 0.174565, 0.000000, 0.000000, -0.984646 +2778, 0.180750, 0.000000, 0.000000, -0.983529 +2779, 0.186929, 0.000000, 0.000000, -0.982374 +2780, 0.193099, 0.000000, 0.000000, -0.981179 +2781, 0.199262, 0.000000, 0.000000, -0.979946 +2782, 0.205418, 0.000000, 0.000000, -0.978674 +2783, 0.211565, 0.000000, 0.000000, -0.977364 +2784, 0.217704, 0.000000, 0.000000, -0.976015 +2785, 0.223834, 0.000000, 0.000000, -0.974627 +2786, 0.229955, 0.000000, 0.000000, -0.973201 +2787, 0.236067, 0.000000, 0.000000, -0.971737 +2788, 0.242170, 0.000000, 0.000000, -0.970234 +2789, 0.248264, 0.000000, 0.000000, -0.968692 +2790, 0.254347, 0.000000, 0.000000, -0.967113 +2791, 0.260421, 0.000000, 0.000000, -0.965495 +2792, 0.266484, 0.000000, 0.000000, -0.963839 +2793, 0.272537, 0.000000, 0.000000, -0.962145 +2794, 0.278579, 0.000000, 0.000000, -0.960413 +2795, 0.284610, 0.000000, 0.000000, -0.958644 +2796, 0.290629, 0.000000, 0.000000, -0.956836 +2797, 0.296637, 0.000000, 0.000000, -0.954990 +2798, 0.302634, 0.000000, 0.000000, -0.953107 +2799, 0.308618, 0.000000, 0.000000, -0.951186 +2800, 0.314591, 0.000000, 0.000000, -0.949227 +2801, 0.320551, 0.000000, 0.000000, -0.947231 +2802, 0.326498, 0.000000, 0.000000, -0.945198 +2803, 0.332432, 0.000000, 0.000000, -0.943127 +2804, 0.338354, 0.000000, 0.000000, -0.941019 +2805, 0.344261, 0.000000, 0.000000, -0.938874 +2806, 0.350156, 0.000000, 0.000000, -0.936692 +2807, 0.356036, 0.000000, 0.000000, -0.934472 +2808, 0.361902, 0.000000, 0.000000, -0.932216 +2809, 0.367754, 0.000000, 0.000000, -0.929923 +2810, 0.373592, 0.000000, 0.000000, -0.927593 +2811, 0.379415, 0.000000, 0.000000, -0.925227 +2812, 0.385222, 0.000000, 0.000000, -0.922824 +2813, 0.391015, 0.000000, 0.000000, -0.920384 +2814, 0.396792, 0.000000, 0.000000, -0.917908 +2815, 0.402554, 0.000000, 0.000000, -0.915396 +2816, 0.408299, 0.000000, 0.000000, -0.912848 +2817, 0.414029, 0.000000, 0.000000, -0.910264 +2818, 0.419742, 0.000000, 0.000000, -0.907644 +2819, 0.425438, 0.000000, 0.000000, -0.904988 +2820, 0.431118, 0.000000, 0.000000, -0.902296 +2821, 0.436780, 0.000000, 0.000000, -0.899568 +2822, 0.442426, 0.000000, 0.000000, -0.896805 +2823, 0.448054, 0.000000, 0.000000, -0.894007 +2824, 0.453664, 0.000000, 0.000000, -0.891173 +2825, 0.459256, 0.000000, 0.000000, -0.888304 +2826, 0.464830, 0.000000, 0.000000, -0.885400 +2827, 0.470386, 0.000000, 0.000000, -0.882461 +2828, 0.475923, 0.000000, 0.000000, -0.879487 +2829, 0.481442, 0.000000, 0.000000, -0.876478 +2830, 0.486941, 0.000000, 0.000000, -0.873435 +2831, 0.492421, 0.000000, 0.000000, -0.870357 +2832, 0.497882, 0.000000, 0.000000, -0.867245 +2833, 0.503323, 0.000000, 0.000000, -0.864099 +2834, 0.508744, 0.000000, 0.000000, -0.860918 +2835, 0.514145, 0.000000, 0.000000, -0.857703 +2836, 0.519526, 0.000000, 0.000000, -0.854455 +2837, 0.524886, 0.000000, 0.000000, -0.851173 +2838, 0.530225, 0.000000, 0.000000, -0.847857 +2839, 0.535544, 0.000000, 0.000000, -0.844507 +2840, 0.540841, 0.000000, 0.000000, -0.841125 +2841, 0.546117, 0.000000, 0.000000, -0.837709 +2842, 0.551371, 0.000000, 0.000000, -0.834260 +2843, 0.556604, 0.000000, 0.000000, -0.830778 +2844, 0.561815, 0.000000, 0.000000, -0.827263 +2845, 0.567003, 0.000000, 0.000000, -0.823716 +2846, 0.572169, 0.000000, 0.000000, -0.820136 +2847, 0.577313, 0.000000, 0.000000, -0.816523 +2848, 0.582433, 0.000000, 0.000000, -0.812878 +2849, 0.587531, 0.000000, 0.000000, -0.809202 +2850, 0.592605, 0.000000, 0.000000, -0.805493 +2851, 0.597656, 0.000000, 0.000000, -0.801752 +2852, 0.602684, 0.000000, 0.000000, -0.797980 +2853, 0.607687, 0.000000, 0.000000, -0.794176 +2854, 0.612667, 0.000000, 0.000000, -0.790341 +2855, 0.617622, 0.000000, 0.000000, -0.786475 +2856, 0.622553, 0.000000, 0.000000, -0.782577 +2857, 0.627460, 0.000000, 0.000000, -0.778649 +2858, 0.632341, 0.000000, 0.000000, -0.774690 +2859, 0.637198, 0.000000, 0.000000, -0.770700 +2860, 0.642029, 0.000000, 0.000000, -0.766680 +2861, 0.646835, 0.000000, 0.000000, -0.762630 +2862, 0.651616, 0.000000, 0.000000, -0.758549 +2863, 0.656371, 0.000000, 0.000000, -0.754438 +2864, 0.661100, 0.000000, 0.000000, -0.750298 +2865, 0.665802, 0.000000, 0.000000, -0.746128 +2866, 0.670479, 0.000000, 0.000000, -0.741929 +2867, 0.675129, 0.000000, 0.000000, -0.737700 +2868, 0.679752, 0.000000, 0.000000, -0.733442 +2869, 0.684349, 0.000000, 0.000000, -0.729155 +2870, 0.688918, 0.000000, 0.000000, -0.724839 +2871, 0.693460, 0.000000, 0.000000, -0.720495 +2872, 0.697975, 0.000000, 0.000000, -0.716122 +2873, 0.702462, 0.000000, 0.000000, -0.711721 +2874, 0.706922, 0.000000, 0.000000, -0.707292 +2875, 0.711353, 0.000000, 0.000000, -0.702835 +2876, 0.715757, 0.000000, 0.000000, -0.698350 +2877, 0.720132, 0.000000, 0.000000, -0.693837 +2878, 0.724478, 0.000000, 0.000000, -0.689297 +2879, 0.728797, 0.000000, 0.000000, -0.684730 +2880, 0.733086, 0.000000, 0.000000, -0.680136 +2881, 0.737346, 0.000000, 0.000000, -0.675515 +2882, 0.741577, 0.000000, 0.000000, -0.670867 +2883, 0.745779, 0.000000, 0.000000, -0.666193 +2884, 0.749952, 0.000000, 0.000000, -0.661493 +2885, 0.754095, 0.000000, 0.000000, -0.656766 +2886, 0.758208, 0.000000, 0.000000, -0.652013 +2887, 0.762291, 0.000000, 0.000000, -0.647235 +2888, 0.766344, 0.000000, 0.000000, -0.642431 +2889, 0.770366, 0.000000, 0.000000, -0.637602 +2890, 0.774359, 0.000000, 0.000000, -0.632747 +2891, 0.778320, 0.000000, 0.000000, -0.627867 +2892, 0.782251, 0.000000, 0.000000, -0.622963 +2893, 0.786151, 0.000000, 0.000000, -0.618034 +2894, 0.790020, 0.000000, 0.000000, -0.613081 +2895, 0.793858, 0.000000, 0.000000, -0.608103 +2896, 0.797664, 0.000000, 0.000000, -0.603102 +2897, 0.801439, 0.000000, 0.000000, -0.598076 +2898, 0.805182, 0.000000, 0.000000, -0.593027 +2899, 0.808894, 0.000000, 0.000000, -0.587955 +2900, 0.812573, 0.000000, 0.000000, -0.582859 +2901, 0.816221, 0.000000, 0.000000, -0.577740 +2902, 0.819836, 0.000000, 0.000000, -0.572599 +2903, 0.823418, 0.000000, 0.000000, -0.567435 +2904, 0.826969, 0.000000, 0.000000, -0.562248 +2905, 0.830486, 0.000000, 0.000000, -0.557039 +2906, 0.833971, 0.000000, 0.000000, -0.551808 +2907, 0.837423, 0.000000, 0.000000, -0.546556 +2908, 0.840841, 0.000000, 0.000000, -0.541282 +2909, 0.844227, 0.000000, 0.000000, -0.535986 +2910, 0.847579, 0.000000, 0.000000, -0.530669 +2911, 0.850898, 0.000000, 0.000000, -0.525332 +2912, 0.854183, 0.000000, 0.000000, -0.519973 +2913, 0.857434, 0.000000, 0.000000, -0.514594 +2914, 0.860651, 0.000000, 0.000000, -0.509195 +2915, 0.863835, 0.000000, 0.000000, -0.503775 +2916, 0.866984, 0.000000, 0.000000, -0.498336 +2917, 0.870099, 0.000000, 0.000000, -0.492877 +2918, 0.873180, 0.000000, 0.000000, -0.487398 +2919, 0.876226, 0.000000, 0.000000, -0.481901 +2920, 0.879237, 0.000000, 0.000000, -0.476384 +2921, 0.882214, 0.000000, 0.000000, -0.470848 +2922, 0.885156, 0.000000, 0.000000, -0.465294 +2923, 0.888063, 0.000000, 0.000000, -0.459721 +2924, 0.890935, 0.000000, 0.000000, -0.454130 +2925, 0.893772, 0.000000, 0.000000, -0.448522 +2926, 0.896573, 0.000000, 0.000000, -0.442895 +2927, 0.899339, 0.000000, 0.000000, -0.437251 +2928, 0.902070, 0.000000, 0.000000, -0.431590 +2929, 0.904765, 0.000000, 0.000000, -0.425912 +2930, 0.907424, 0.000000, 0.000000, -0.420217 +2931, 0.910047, 0.000000, 0.000000, -0.414505 +2932, 0.912634, 0.000000, 0.000000, -0.408777 +2933, 0.915185, 0.000000, 0.000000, -0.403033 +2934, 0.917701, 0.000000, 0.000000, -0.397273 +2935, 0.920179, 0.000000, 0.000000, -0.391497 +2936, 0.922622, 0.000000, 0.000000, -0.385706 +2937, 0.925028, 0.000000, 0.000000, -0.379899 +2938, 0.927397, 0.000000, 0.000000, -0.374078 +2939, 0.929730, 0.000000, 0.000000, -0.368241 +2940, 0.932026, 0.000000, 0.000000, -0.362391 +2941, 0.934286, 0.000000, 0.000000, -0.356525 +2942, 0.936508, 0.000000, 0.000000, -0.350646 +2943, 0.938693, 0.000000, 0.000000, -0.344753 +2944, 0.940842, 0.000000, 0.000000, -0.338846 +2945, 0.942953, 0.000000, 0.000000, -0.332926 +2946, 0.945027, 0.000000, 0.000000, -0.326993 +2947, 0.947063, 0.000000, 0.000000, -0.321047 +2948, 0.949062, 0.000000, 0.000000, -0.315088 +2949, 0.951024, 0.000000, 0.000000, -0.309117 +2950, 0.952948, 0.000000, 0.000000, -0.303133 +2951, 0.954835, 0.000000, 0.000000, -0.297138 +2952, 0.956683, 0.000000, 0.000000, -0.291130 +2953, 0.958494, 0.000000, 0.000000, -0.285112 +2954, 0.960267, 0.000000, 0.000000, -0.279082 +2955, 0.962003, 0.000000, 0.000000, -0.273041 +2956, 0.963700, 0.000000, 0.000000, -0.266989 +2957, 0.965359, 0.000000, 0.000000, -0.260926 +2958, 0.966980, 0.000000, 0.000000, -0.254854 +2959, 0.968562, 0.000000, 0.000000, -0.248771 +2960, 0.970107, 0.000000, 0.000000, -0.242678 +2961, 0.971613, 0.000000, 0.000000, -0.236576 +2962, 0.973081, 0.000000, 0.000000, -0.230465 +2963, 0.974510, 0.000000, 0.000000, -0.224344 +2964, 0.975901, 0.000000, 0.000000, -0.218215 +2965, 0.977253, 0.000000, 0.000000, -0.212077 +2966, 0.978567, 0.000000, 0.000000, -0.205930 +2967, 0.979842, 0.000000, 0.000000, -0.199776 +2968, 0.981078, 0.000000, 0.000000, -0.193613 +2969, 0.982275, 0.000000, 0.000000, -0.187443 +2970, 0.983434, 0.000000, 0.000000, -0.181266 +2971, 0.984554, 0.000000, 0.000000, -0.175081 +2972, 0.985635, 0.000000, 0.000000, -0.168889 +2973, 0.986677, 0.000000, 0.000000, -0.162691 +2974, 0.987680, 0.000000, 0.000000, -0.156486 +2975, 0.988644, 0.000000, 0.000000, -0.150275 +2976, 0.989569, 0.000000, 0.000000, -0.144058 +2977, 0.990455, 0.000000, 0.000000, -0.137836 +2978, 0.991302, 0.000000, 0.000000, -0.131608 +2979, 0.992109, 0.000000, 0.000000, -0.125375 +2980, 0.992878, 0.000000, 0.000000, -0.119137 +2981, 0.993607, 0.000000, 0.000000, -0.112894 +2982, 0.994297, 0.000000, 0.000000, -0.106647 +2983, 0.994948, 0.000000, 0.000000, -0.100395 +2984, 0.995559, 0.000000, 0.000000, -0.094140 +2985, 0.996131, 0.000000, 0.000000, -0.087880 +2986, 0.996664, 0.000000, 0.000000, -0.081618 +2987, 0.997157, 0.000000, 0.000000, -0.075352 +2988, 0.997611, 0.000000, 0.000000, -0.069083 +2989, 0.998025, 0.000000, 0.000000, -0.062811 +2990, 0.998400, 0.000000, 0.000000, -0.056537 +2991, 0.998736, 0.000000, 0.000000, -0.050261 +2992, 0.999032, 0.000000, 0.000000, -0.043983 +2993, 0.999289, 0.000000, 0.000000, -0.037703 +2994, 0.999506, 0.000000, 0.000000, -0.031421 +2995, 0.999684, 0.000000, 0.000000, -0.025138 +2996, 0.999822, 0.000000, 0.000000, -0.018855 +2997, 0.999921, 0.000000, 0.000000, -0.012570 +2998, 0.999980, 0.000000, 0.000000, -0.006285 +2999, 1.000000, 0.000000, 0.000000, -0.000000 diff --git a/scripts/trajectories/full-circle-T15.0-w1.0.csv b/scripts/trajectories/full-circle-T15.0-w1.0.csv new file mode 100644 index 0000000000..1b49b3cc27 --- /dev/null +++ b/scripts/trajectories/full-circle-T15.0-w1.0.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 0.999877, 0.000000, 0.000000, 0.015713 +2, 0.999506, 0.000000, 0.000000, 0.031421 +3, 0.998889, 0.000000, 0.000000, 0.047122 +4, 0.998025, 0.000000, 0.000000, 0.062811 +5, 0.996915, 0.000000, 0.000000, 0.078485 +6, 0.995559, 0.000000, 0.000000, 0.094140 +7, 0.993957, 0.000000, 0.000000, 0.109771 +8, 0.992109, 0.000000, 0.000000, 0.125375 +9, 0.990017, 0.000000, 0.000000, 0.140948 +10, 0.987680, 0.000000, 0.000000, 0.156486 +11, 0.985099, 0.000000, 0.000000, 0.171986 +12, 0.982275, 0.000000, 0.000000, 0.187443 +13, 0.979209, 0.000000, 0.000000, 0.202854 +14, 0.975901, 0.000000, 0.000000, 0.218215 +15, 0.972352, 0.000000, 0.000000, 0.233522 +16, 0.968562, 0.000000, 0.000000, 0.248771 +17, 0.964534, 0.000000, 0.000000, 0.263959 +18, 0.960267, 0.000000, 0.000000, 0.279082 +19, 0.955764, 0.000000, 0.000000, 0.294135 +20, 0.951024, 0.000000, 0.000000, 0.309117 +21, 0.946050, 0.000000, 0.000000, 0.324021 +22, 0.940842, 0.000000, 0.000000, 0.338846 +23, 0.935401, 0.000000, 0.000000, 0.353588 +24, 0.929730, 0.000000, 0.000000, 0.368241 +25, 0.923829, 0.000000, 0.000000, 0.382804 +26, 0.917701, 0.000000, 0.000000, 0.397273 +27, 0.911345, 0.000000, 0.000000, 0.411643 +28, 0.904765, 0.000000, 0.000000, 0.425912 +29, 0.897961, 0.000000, 0.000000, 0.440076 +30, 0.890935, 0.000000, 0.000000, 0.454130 +31, 0.883690, 0.000000, 0.000000, 0.468073 +32, 0.876226, 0.000000, 0.000000, 0.481901 +33, 0.868546, 0.000000, 0.000000, 0.495609 +34, 0.860651, 0.000000, 0.000000, 0.509195 +35, 0.852544, 0.000000, 0.000000, 0.522655 +36, 0.844227, 0.000000, 0.000000, 0.535986 +37, 0.835701, 0.000000, 0.000000, 0.549185 +38, 0.826969, 0.000000, 0.000000, 0.562248 +39, 0.818032, 0.000000, 0.000000, 0.575172 +40, 0.808894, 0.000000, 0.000000, 0.587955 +41, 0.799556, 0.000000, 0.000000, 0.600592 +42, 0.790020, 0.000000, 0.000000, 0.613081 +43, 0.780290, 0.000000, 0.000000, 0.625418 +44, 0.770366, 0.000000, 0.000000, 0.637602 +45, 0.760253, 0.000000, 0.000000, 0.649627 +46, 0.749952, 0.000000, 0.000000, 0.661493 +47, 0.739465, 0.000000, 0.000000, 0.673195 +48, 0.728797, 0.000000, 0.000000, 0.684730 +49, 0.717948, 0.000000, 0.000000, 0.696097 +50, 0.706922, 0.000000, 0.000000, 0.707292 +51, 0.695721, 0.000000, 0.000000, 0.718312 +52, 0.684349, 0.000000, 0.000000, 0.729155 +53, 0.672807, 0.000000, 0.000000, 0.739818 +54, 0.661100, 0.000000, 0.000000, 0.750298 +55, 0.649229, 0.000000, 0.000000, 0.760593 +56, 0.637198, 0.000000, 0.000000, 0.770700 +57, 0.625010, 0.000000, 0.000000, 0.780617 +58, 0.612667, 0.000000, 0.000000, 0.790341 +59, 0.600173, 0.000000, 0.000000, 0.799870 +60, 0.587531, 0.000000, 0.000000, 0.809202 +61, 0.574744, 0.000000, 0.000000, 0.818333 +62, 0.561815, 0.000000, 0.000000, 0.827263 +63, 0.548747, 0.000000, 0.000000, 0.835988 +64, 0.535544, 0.000000, 0.000000, 0.844507 +65, 0.522208, 0.000000, 0.000000, 0.852818 +66, 0.508744, 0.000000, 0.000000, 0.860918 +67, 0.495154, 0.000000, 0.000000, 0.868805 +68, 0.481442, 0.000000, 0.000000, 0.876478 +69, 0.467610, 0.000000, 0.000000, 0.883935 +70, 0.453664, 0.000000, 0.000000, 0.891173 +71, 0.439605, 0.000000, 0.000000, 0.898191 +72, 0.425438, 0.000000, 0.000000, 0.904988 +73, 0.411166, 0.000000, 0.000000, 0.911561 +74, 0.396792, 0.000000, 0.000000, 0.917908 +75, 0.382320, 0.000000, 0.000000, 0.924030 +76, 0.367754, 0.000000, 0.000000, 0.929923 +77, 0.353098, 0.000000, 0.000000, 0.935587 +78, 0.338354, 0.000000, 0.000000, 0.941019 +79, 0.323526, 0.000000, 0.000000, 0.946219 +80, 0.308618, 0.000000, 0.000000, 0.951186 +81, 0.293635, 0.000000, 0.000000, 0.955918 +82, 0.278579, 0.000000, 0.000000, 0.960413 +83, 0.263454, 0.000000, 0.000000, 0.964672 +84, 0.248264, 0.000000, 0.000000, 0.968692 +85, 0.233012, 0.000000, 0.000000, 0.972474 +86, 0.217704, 0.000000, 0.000000, 0.976015 +87, 0.202341, 0.000000, 0.000000, 0.979315 +88, 0.186929, 0.000000, 0.000000, 0.982374 +89, 0.171470, 0.000000, 0.000000, 0.985189 +90, 0.155969, 0.000000, 0.000000, 0.987762 +91, 0.140429, 0.000000, 0.000000, 0.990091 +92, 0.124855, 0.000000, 0.000000, 0.992175 +93, 0.109250, 0.000000, 0.000000, 0.994014 +94, 0.093618, 0.000000, 0.000000, 0.995608 +95, 0.077963, 0.000000, 0.000000, 0.996956 +96, 0.062289, 0.000000, 0.000000, 0.998058 +97, 0.046599, 0.000000, 0.000000, 0.998914 +98, 0.030898, 0.000000, 0.000000, 0.999523 +99, 0.015189, 0.000000, 0.000000, 0.999885 +100, -0.000524, -0.000000, 0.000000, 1.000000 +101, -0.016236, -0.000000, 0.000000, 0.999868 +102, -0.031945, -0.000000, 0.000000, 0.999490 +103, -0.047645, -0.000000, 0.000000, 0.998864 +104, -0.063334, -0.000000, 0.000000, 0.997992 +105, -0.079007, -0.000000, 0.000000, 0.996874 +106, -0.094661, -0.000000, 0.000000, 0.995510 +107, -0.110291, -0.000000, 0.000000, 0.993899 +108, -0.125894, -0.000000, 0.000000, 0.992044 +109, -0.141466, -0.000000, 0.000000, 0.989943 +110, -0.157003, -0.000000, 0.000000, 0.987598 +111, -0.172502, -0.000000, 0.000000, 0.985009 +112, -0.187958, -0.000000, 0.000000, 0.982177 +113, -0.203367, -0.000000, 0.000000, 0.979103 +114, -0.218726, -0.000000, 0.000000, 0.975786 +115, -0.234031, -0.000000, 0.000000, 0.972229 +116, -0.249278, -0.000000, 0.000000, 0.968432 +117, -0.264464, -0.000000, 0.000000, 0.964396 +118, -0.279585, -0.000000, 0.000000, 0.960121 +119, -0.294636, -0.000000, 0.000000, 0.955610 +120, -0.309615, -0.000000, 0.000000, 0.950862 +121, -0.324517, -0.000000, 0.000000, 0.945880 +122, -0.339339, -0.000000, 0.000000, 0.940664 +123, -0.354077, -0.000000, 0.000000, 0.935216 +124, -0.368728, -0.000000, 0.000000, 0.929537 +125, -0.383288, -0.000000, 0.000000, 0.923629 +126, -0.397753, -0.000000, 0.000000, 0.917492 +127, -0.412121, -0.000000, 0.000000, 0.911129 +128, -0.426386, -0.000000, 0.000000, 0.904541 +129, -0.440546, -0.000000, 0.000000, 0.897730 +130, -0.454597, -0.000000, 0.000000, 0.890697 +131, -0.468536, -0.000000, 0.000000, 0.883444 +132, -0.482359, -0.000000, 0.000000, 0.875973 +133, -0.496064, -0.000000, 0.000000, 0.868286 +134, -0.509645, -0.000000, 0.000000, 0.860385 +135, -0.523101, -0.000000, 0.000000, 0.852270 +136, -0.536428, -0.000000, 0.000000, 0.843946 +137, -0.549622, -0.000000, 0.000000, 0.835413 +138, -0.562681, -0.000000, 0.000000, 0.826674 +139, -0.575601, -0.000000, 0.000000, 0.817731 +140, -0.588378, -0.000000, 0.000000, 0.808586 +141, -0.601011, -0.000000, 0.000000, 0.799241 +142, -0.613495, -0.000000, 0.000000, 0.789699 +143, -0.625827, -0.000000, 0.000000, 0.779962 +144, -0.638005, -0.000000, 0.000000, 0.770032 +145, -0.650025, -0.000000, 0.000000, 0.759913 +146, -0.661885, -0.000000, 0.000000, 0.749605 +147, -0.673582, -0.000000, 0.000000, 0.739113 +148, -0.685112, -0.000000, 0.000000, 0.728438 +149, -0.696473, -0.000000, 0.000000, 0.717583 +150, -0.707662, -0.000000, 0.000000, 0.706551 +151, -0.718676, -0.000000, 0.000000, 0.695345 +152, -0.729513, -0.000000, 0.000000, 0.683967 +153, -0.740170, -0.000000, 0.000000, 0.672420 +154, -0.750644, -0.000000, 0.000000, 0.660707 +155, -0.760933, -0.000000, 0.000000, 0.648830 +156, -0.771034, -0.000000, 0.000000, 0.636794 +157, -0.780944, -0.000000, 0.000000, 0.624601 +158, -0.790662, -0.000000, 0.000000, 0.612253 +159, -0.800184, -0.000000, 0.000000, 0.599754 +160, -0.809509, -0.000000, 0.000000, 0.587107 +161, -0.818634, -0.000000, 0.000000, 0.574315 +162, -0.827557, -0.000000, 0.000000, 0.561381 +163, -0.836276, -0.000000, 0.000000, 0.548309 +164, -0.844788, -0.000000, 0.000000, 0.535101 +165, -0.853091, -0.000000, 0.000000, 0.521761 +166, -0.861184, -0.000000, 0.000000, 0.508293 +167, -0.869065, -0.000000, 0.000000, 0.494699 +168, -0.876730, -0.000000, 0.000000, 0.480982 +169, -0.884179, -0.000000, 0.000000, 0.467147 +170, -0.891410, -0.000000, 0.000000, 0.453197 +171, -0.898421, -0.000000, 0.000000, 0.439135 +172, -0.905210, -0.000000, 0.000000, 0.424964 +173, -0.911776, -0.000000, 0.000000, 0.410688 +174, -0.918116, -0.000000, 0.000000, 0.396311 +175, -0.924230, -0.000000, 0.000000, 0.381836 +176, -0.930115, -0.000000, 0.000000, 0.367267 +177, -0.935771, -0.000000, 0.000000, 0.352607 +178, -0.941196, -0.000000, 0.000000, 0.337861 +179, -0.946389, -0.000000, 0.000000, 0.323030 +180, -0.951347, -0.000000, 0.000000, 0.308120 +181, -0.956071, -0.000000, 0.000000, 0.293134 +182, -0.960559, -0.000000, 0.000000, 0.278076 +183, -0.964810, -0.000000, 0.000000, 0.262948 +184, -0.968822, -0.000000, 0.000000, 0.247756 +185, -0.972596, -0.000000, 0.000000, 0.232503 +186, -0.976129, -0.000000, 0.000000, 0.217192 +187, -0.979421, -0.000000, 0.000000, 0.201828 +188, -0.982471, -0.000000, 0.000000, 0.186414 +189, -0.985279, -0.000000, 0.000000, 0.170954 +190, -0.987844, -0.000000, 0.000000, 0.155451 +191, -0.990164, -0.000000, 0.000000, 0.139911 +192, -0.992240, -0.000000, 0.000000, 0.124335 +193, -0.994071, -0.000000, 0.000000, 0.108729 +194, -0.995657, -0.000000, 0.000000, 0.093097 +195, -0.996997, -0.000000, 0.000000, 0.077441 +196, -0.998091, -0.000000, 0.000000, 0.061766 +197, -0.998938, -0.000000, 0.000000, 0.046076 +198, -0.999539, -0.000000, 0.000000, 0.030374 +199, -0.999892, -0.000000, 0.000000, 0.014665 +200, -0.999999, 0.000000, -0.000000, -0.001048 +201, -0.999860, 0.000000, -0.000000, -0.016760 +202, -0.999473, 0.000000, -0.000000, -0.032468 +203, -0.998839, 0.000000, -0.000000, -0.048169 +204, -0.997959, 0.000000, -0.000000, -0.063857 +205, -0.996833, 0.000000, -0.000000, -0.079529 +206, -0.995460, 0.000000, -0.000000, -0.095182 +207, -0.993841, 0.000000, -0.000000, -0.110812 +208, -0.991978, 0.000000, -0.000000, -0.126414 +209, -0.989869, 0.000000, -0.000000, -0.141985 +210, -0.987516, 0.000000, -0.000000, -0.157521 +211, -0.984919, 0.000000, -0.000000, -0.173018 +212, -0.982079, 0.000000, -0.000000, -0.188472 +213, -0.978996, 0.000000, -0.000000, -0.203880 +214, -0.975672, 0.000000, -0.000000, -0.219237 +215, -0.972106, 0.000000, -0.000000, -0.234540 +216, -0.968301, 0.000000, -0.000000, -0.249786 +217, -0.964257, 0.000000, -0.000000, -0.264969 +218, -0.959975, 0.000000, -0.000000, -0.280087 +219, -0.955455, 0.000000, -0.000000, -0.295136 +220, -0.950700, 0.000000, -0.000000, -0.310113 +221, -0.945710, 0.000000, -0.000000, -0.325012 +222, -0.940486, 0.000000, -0.000000, -0.339832 +223, -0.935031, 0.000000, -0.000000, -0.354567 +224, -0.929344, 0.000000, -0.000000, -0.369215 +225, -0.923428, 0.000000, -0.000000, -0.383772 +226, -0.917284, 0.000000, -0.000000, -0.398234 +227, -0.910913, 0.000000, -0.000000, -0.412598 +228, -0.904318, 0.000000, -0.000000, -0.426860 +229, -0.897499, 0.000000, -0.000000, -0.441016 +230, -0.890459, 0.000000, -0.000000, -0.455064 +231, -0.883199, 0.000000, -0.000000, -0.468999 +232, -0.875721, 0.000000, -0.000000, -0.482818 +233, -0.868026, 0.000000, -0.000000, -0.496518 +234, -0.860117, 0.000000, -0.000000, -0.510096 +235, -0.851996, 0.000000, -0.000000, -0.523548 +236, -0.843665, 0.000000, -0.000000, -0.536870 +237, -0.835125, 0.000000, -0.000000, -0.550060 +238, -0.826379, 0.000000, -0.000000, -0.563114 +239, -0.817429, 0.000000, -0.000000, -0.576029 +240, -0.808277, 0.000000, -0.000000, -0.588802 +241, -0.798926, 0.000000, -0.000000, -0.601429 +242, -0.789377, 0.000000, -0.000000, -0.613908 +243, -0.779634, 0.000000, -0.000000, -0.626235 +244, -0.769698, 0.000000, -0.000000, -0.638408 +245, -0.759572, 0.000000, -0.000000, -0.650423 +246, -0.749258, 0.000000, -0.000000, -0.662278 +247, -0.738760, 0.000000, -0.000000, -0.673969 +248, -0.728079, 0.000000, -0.000000, -0.685493 +249, -0.717218, 0.000000, -0.000000, -0.696849 +250, -0.706180, 0.000000, -0.000000, -0.708032 +251, -0.694968, 0.000000, -0.000000, -0.719041 +252, -0.683584, 0.000000, -0.000000, -0.729872 +253, -0.672032, 0.000000, -0.000000, -0.740522 +254, -0.660313, 0.000000, -0.000000, -0.750990 +255, -0.648432, 0.000000, -0.000000, -0.761273 +256, -0.636390, 0.000000, -0.000000, -0.771367 +257, -0.624192, 0.000000, -0.000000, -0.781271 +258, -0.611839, 0.000000, -0.000000, -0.790983 +259, -0.599335, 0.000000, -0.000000, -0.800498 +260, -0.586683, 0.000000, -0.000000, -0.809817 +261, -0.573886, 0.000000, -0.000000, -0.818935 +262, -0.560948, 0.000000, -0.000000, -0.827851 +263, -0.547871, 0.000000, -0.000000, -0.836563 +264, -0.534659, 0.000000, -0.000000, -0.845068 +265, -0.521315, 0.000000, -0.000000, -0.853365 +266, -0.507842, 0.000000, -0.000000, -0.861450 +267, -0.494243, 0.000000, -0.000000, -0.869324 +268, -0.480523, 0.000000, -0.000000, -0.876982 +269, -0.466684, 0.000000, -0.000000, -0.884424 +270, -0.452730, 0.000000, -0.000000, -0.891648 +271, -0.438664, 0.000000, -0.000000, -0.898651 +272, -0.424490, 0.000000, -0.000000, -0.905433 +273, -0.410211, 0.000000, -0.000000, -0.911991 +274, -0.395830, 0.000000, -0.000000, -0.918324 +275, -0.381352, 0.000000, -0.000000, -0.924430 +276, -0.366780, 0.000000, -0.000000, -0.930308 +277, -0.352117, 0.000000, -0.000000, -0.935956 +278, -0.337368, 0.000000, -0.000000, -0.941373 +279, -0.322535, 0.000000, -0.000000, -0.946558 +280, -0.307622, 0.000000, -0.000000, -0.951509 +281, -0.292633, 0.000000, -0.000000, -0.956225 +282, -0.277572, 0.000000, -0.000000, -0.960705 +283, -0.262443, 0.000000, -0.000000, -0.964947 +284, -0.247249, 0.000000, -0.000000, -0.968952 +285, -0.231994, 0.000000, -0.000000, -0.972717 +286, -0.216681, 0.000000, -0.000000, -0.976242 +287, -0.201315, 0.000000, -0.000000, -0.979527 +288, -0.185899, 0.000000, -0.000000, -0.982569 +289, -0.170438, 0.000000, -0.000000, -0.985368 +290, -0.154934, 0.000000, -0.000000, -0.987925 +291, -0.139392, 0.000000, -0.000000, -0.990237 +292, -0.123816, 0.000000, -0.000000, -0.992305 +293, -0.108209, 0.000000, -0.000000, -0.994128 +294, -0.092575, 0.000000, -0.000000, -0.995706 +295, -0.076919, 0.000000, -0.000000, -0.997037 +296, -0.061243, 0.000000, -0.000000, -0.998123 +297, -0.045553, 0.000000, -0.000000, -0.998962 +298, -0.029851, 0.000000, -0.000000, -0.999554 +299, -0.014141, 0.000000, -0.000000, -0.999900 +300, 0.001571, 0.000000, 0.000000, -0.999999 +301, 0.017284, 0.000000, 0.000000, -0.999851 +302, 0.032992, 0.000000, 0.000000, -0.999456 +303, 0.048692, 0.000000, 0.000000, -0.998814 +304, 0.064380, 0.000000, 0.000000, -0.997925 +305, 0.080052, 0.000000, 0.000000, -0.996791 +306, 0.095704, 0.000000, 0.000000, -0.995410 +307, 0.111332, 0.000000, 0.000000, -0.993783 +308, 0.126934, 0.000000, 0.000000, -0.991911 +309, 0.142503, 0.000000, 0.000000, -0.989794 +310, 0.158038, 0.000000, 0.000000, -0.987433 +311, 0.173534, 0.000000, 0.000000, -0.984828 +312, 0.188986, 0.000000, 0.000000, -0.981980 +313, 0.204392, 0.000000, 0.000000, -0.978889 +314, 0.219748, 0.000000, 0.000000, -0.975557 +315, 0.235049, 0.000000, 0.000000, -0.971983 +316, 0.250293, 0.000000, 0.000000, -0.968170 +317, 0.265474, 0.000000, 0.000000, -0.964118 +318, 0.280590, 0.000000, 0.000000, -0.959828 +319, 0.295637, 0.000000, 0.000000, -0.955300 +320, 0.310611, 0.000000, 0.000000, -0.950537 +321, 0.325508, 0.000000, 0.000000, -0.945539 +322, 0.340324, 0.000000, 0.000000, -0.940308 +323, 0.355057, 0.000000, 0.000000, -0.934845 +324, 0.369702, 0.000000, 0.000000, -0.929150 +325, 0.384256, 0.000000, 0.000000, -0.923227 +326, 0.398714, 0.000000, 0.000000, -0.917075 +327, 0.413075, 0.000000, 0.000000, -0.910697 +328, 0.427333, 0.000000, 0.000000, -0.904094 +329, 0.441486, 0.000000, 0.000000, -0.897268 +330, 0.455530, 0.000000, 0.000000, -0.890220 +331, 0.469461, 0.000000, 0.000000, -0.882953 +332, 0.483277, 0.000000, 0.000000, -0.875468 +333, 0.496973, 0.000000, 0.000000, -0.867766 +334, 0.510546, 0.000000, 0.000000, -0.859850 +335, 0.523994, 0.000000, 0.000000, -0.851722 +336, 0.537312, 0.000000, 0.000000, -0.843384 +337, 0.550497, 0.000000, 0.000000, -0.834837 +338, 0.563547, 0.000000, 0.000000, -0.826084 +339, 0.576457, 0.000000, 0.000000, -0.817127 +340, 0.589225, 0.000000, 0.000000, -0.807969 +341, 0.601848, 0.000000, 0.000000, -0.798611 +342, 0.614321, 0.000000, 0.000000, -0.789056 +343, 0.626644, 0.000000, 0.000000, -0.779306 +344, 0.638811, 0.000000, 0.000000, -0.769363 +345, 0.650821, 0.000000, 0.000000, -0.759231 +346, 0.662670, 0.000000, 0.000000, -0.748911 +347, 0.674356, 0.000000, 0.000000, -0.738407 +348, 0.685875, 0.000000, 0.000000, -0.727720 +349, 0.697224, 0.000000, 0.000000, -0.716853 +350, 0.708402, 0.000000, 0.000000, -0.705809 +351, 0.719404, 0.000000, 0.000000, -0.694591 +352, 0.730229, 0.000000, 0.000000, -0.683202 +353, 0.740874, 0.000000, 0.000000, -0.671644 +354, 0.751336, 0.000000, 0.000000, -0.659920 +355, 0.761612, 0.000000, 0.000000, -0.648033 +356, 0.771700, 0.000000, 0.000000, -0.635986 +357, 0.781598, 0.000000, 0.000000, -0.623782 +358, 0.791303, 0.000000, 0.000000, -0.611424 +359, 0.800812, 0.000000, 0.000000, -0.598915 +360, 0.810124, 0.000000, 0.000000, -0.586259 +361, 0.819235, 0.000000, 0.000000, -0.573457 +362, 0.828145, 0.000000, 0.000000, -0.560514 +363, 0.836850, 0.000000, 0.000000, -0.547433 +364, 0.845348, 0.000000, 0.000000, -0.534216 +365, 0.853638, 0.000000, 0.000000, -0.520868 +366, 0.861716, 0.000000, 0.000000, -0.507390 +367, 0.869582, 0.000000, 0.000000, -0.493788 +368, 0.877234, 0.000000, 0.000000, -0.480064 +369, 0.884668, 0.000000, 0.000000, -0.466221 +370, 0.891885, 0.000000, 0.000000, -0.452263 +371, 0.898881, 0.000000, 0.000000, -0.438193 +372, 0.905655, 0.000000, 0.000000, -0.424015 +373, 0.912206, 0.000000, 0.000000, -0.409733 +374, 0.918531, 0.000000, 0.000000, -0.395349 +375, 0.924629, 0.000000, 0.000000, -0.380868 +376, 0.930500, 0.000000, 0.000000, -0.366293 +377, 0.936140, 0.000000, 0.000000, -0.351627 +378, 0.941550, 0.000000, 0.000000, -0.336874 +379, 0.946727, 0.000000, 0.000000, -0.322039 +380, 0.951670, 0.000000, 0.000000, -0.307123 +381, 0.956378, 0.000000, 0.000000, -0.292132 +382, 0.960850, 0.000000, 0.000000, -0.277069 +383, 0.965085, 0.000000, 0.000000, -0.261938 +384, 0.969081, 0.000000, 0.000000, -0.246741 +385, 0.972839, 0.000000, 0.000000, -0.231484 +386, 0.976356, 0.000000, 0.000000, -0.216170 +387, 0.979632, 0.000000, 0.000000, -0.200802 +388, 0.982666, 0.000000, 0.000000, -0.185385 +389, 0.985458, 0.000000, 0.000000, -0.169922 +390, 0.988006, 0.000000, 0.000000, -0.154417 +391, 0.990310, 0.000000, 0.000000, -0.138873 +392, 0.992370, 0.000000, 0.000000, -0.123296 +393, 0.994185, 0.000000, 0.000000, -0.107688 +394, 0.995754, 0.000000, 0.000000, -0.092054 +395, 0.997078, 0.000000, 0.000000, -0.076396 +396, 0.998155, 0.000000, 0.000000, -0.060720 +397, 0.998986, 0.000000, 0.000000, -0.045029 +398, 0.999570, 0.000000, 0.000000, -0.029327 +399, 0.999907, 0.000000, 0.000000, -0.013618 +400, 0.999998, 0.000000, 0.000000, 0.002095 +401, 0.999841, 0.000000, 0.000000, 0.017807 +402, 0.999438, 0.000000, 0.000000, 0.033515 +403, 0.998788, 0.000000, 0.000000, 0.049215 +404, 0.997892, 0.000000, 0.000000, 0.064902 +405, 0.996749, 0.000000, 0.000000, 0.080574 +406, 0.995360, 0.000000, 0.000000, 0.096225 +407, 0.993725, 0.000000, 0.000000, 0.111853 +408, 0.991845, 0.000000, 0.000000, 0.127453 +409, 0.989720, 0.000000, 0.000000, 0.143022 +410, 0.987350, 0.000000, 0.000000, 0.158555 +411, 0.984737, 0.000000, 0.000000, 0.174049 +412, 0.981881, 0.000000, 0.000000, 0.189501 +413, 0.978782, 0.000000, 0.000000, 0.204905 +414, 0.975441, 0.000000, 0.000000, 0.220259 +415, 0.971860, 0.000000, 0.000000, 0.235558 +416, 0.968039, 0.000000, 0.000000, 0.250800 +417, 0.963979, 0.000000, 0.000000, 0.265979 +418, 0.959681, 0.000000, 0.000000, 0.281093 +419, 0.955145, 0.000000, 0.000000, 0.296137 +420, 0.950374, 0.000000, 0.000000, 0.311108 +421, 0.945369, 0.000000, 0.000000, 0.326003 +422, 0.940130, 0.000000, 0.000000, 0.340817 +423, 0.934659, 0.000000, 0.000000, 0.355547 +424, 0.928957, 0.000000, 0.000000, 0.370188 +425, 0.923025, 0.000000, 0.000000, 0.384739 +426, 0.916866, 0.000000, 0.000000, 0.399195 +427, 0.910481, 0.000000, 0.000000, 0.413552 +428, 0.903870, 0.000000, 0.000000, 0.427807 +429, 0.897037, 0.000000, 0.000000, 0.441956 +430, 0.889982, 0.000000, 0.000000, 0.455996 +431, 0.882707, 0.000000, 0.000000, 0.469924 +432, 0.875214, 0.000000, 0.000000, 0.483735 +433, 0.867506, 0.000000, 0.000000, 0.497427 +434, 0.859583, 0.000000, 0.000000, 0.510997 +435, 0.851447, 0.000000, 0.000000, 0.524440 +436, 0.843102, 0.000000, 0.000000, 0.537754 +437, 0.834549, 0.000000, 0.000000, 0.550934 +438, 0.825789, 0.000000, 0.000000, 0.563979 +439, 0.816825, 0.000000, 0.000000, 0.576885 +440, 0.807660, 0.000000, 0.000000, 0.589648 +441, 0.798296, 0.000000, 0.000000, 0.602266 +442, 0.788734, 0.000000, 0.000000, 0.614735 +443, 0.778978, 0.000000, 0.000000, 0.627052 +444, 0.769029, 0.000000, 0.000000, 0.639214 +445, 0.758890, 0.000000, 0.000000, 0.651219 +446, 0.748564, 0.000000, 0.000000, 0.663062 +447, 0.738053, 0.000000, 0.000000, 0.674742 +448, 0.727360, 0.000000, 0.000000, 0.686256 +449, 0.716488, 0.000000, 0.000000, 0.697600 +450, 0.705438, 0.000000, 0.000000, 0.708771 +451, 0.694214, 0.000000, 0.000000, 0.719768 +452, 0.682819, 0.000000, 0.000000, 0.730587 +453, 0.671256, 0.000000, 0.000000, 0.741226 +454, 0.659526, 0.000000, 0.000000, 0.751682 +455, 0.647634, 0.000000, 0.000000, 0.761952 +456, 0.635582, 0.000000, 0.000000, 0.772033 +457, 0.623373, 0.000000, 0.000000, 0.781925 +458, 0.611010, 0.000000, 0.000000, 0.791623 +459, 0.598496, 0.000000, 0.000000, 0.801126 +460, 0.585834, 0.000000, 0.000000, 0.810431 +461, 0.573028, 0.000000, 0.000000, 0.819536 +462, 0.560080, 0.000000, 0.000000, 0.828438 +463, 0.546994, 0.000000, 0.000000, 0.837136 +464, 0.533773, 0.000000, 0.000000, 0.845628 +465, 0.520420, 0.000000, 0.000000, 0.853910 +466, 0.506939, 0.000000, 0.000000, 0.861982 +467, 0.493332, 0.000000, 0.000000, 0.869841 +468, 0.479604, 0.000000, 0.000000, 0.877485 +469, 0.465757, 0.000000, 0.000000, 0.884912 +470, 0.451796, 0.000000, 0.000000, 0.892121 +471, 0.437722, 0.000000, 0.000000, 0.899110 +472, 0.423541, 0.000000, 0.000000, 0.905877 +473, 0.409255, 0.000000, 0.000000, 0.912420 +474, 0.394868, 0.000000, 0.000000, 0.918738 +475, 0.380384, 0.000000, 0.000000, 0.924829 +476, 0.365805, 0.000000, 0.000000, 0.930691 +477, 0.351137, 0.000000, 0.000000, 0.936324 +478, 0.336381, 0.000000, 0.000000, 0.941726 +479, 0.321543, 0.000000, 0.000000, 0.946895 +480, 0.306625, 0.000000, 0.000000, 0.951830 +481, 0.291631, 0.000000, 0.000000, 0.956531 +482, 0.276566, 0.000000, 0.000000, 0.960995 +483, 0.261432, 0.000000, 0.000000, 0.965222 +484, 0.246234, 0.000000, 0.000000, 0.969210 +485, 0.230975, 0.000000, 0.000000, 0.972960 +486, 0.215658, 0.000000, 0.000000, 0.976469 +487, 0.200289, 0.000000, 0.000000, 0.979737 +488, 0.184870, 0.000000, 0.000000, 0.982763 +489, 0.169405, 0.000000, 0.000000, 0.985546 +490, 0.153899, 0.000000, 0.000000, 0.988087 +491, 0.138355, 0.000000, 0.000000, 0.990383 +492, 0.122776, 0.000000, 0.000000, 0.992434 +493, 0.107167, 0.000000, 0.000000, 0.994241 +494, 0.091532, 0.000000, 0.000000, 0.995802 +495, 0.075874, 0.000000, 0.000000, 0.997117 +496, 0.060198, 0.000000, 0.000000, 0.998186 +497, 0.044506, 0.000000, 0.000000, 0.999009 +498, 0.028804, 0.000000, 0.000000, 0.999585 +499, 0.013094, 0.000000, 0.000000, 0.999914 +500, -0.002619, -0.000000, 0.000000, 0.999997 +501, -0.018331, -0.000000, 0.000000, 0.999832 +502, -0.034039, -0.000000, 0.000000, 0.999421 +503, -0.049738, -0.000000, 0.000000, 0.998762 +504, -0.065425, -0.000000, 0.000000, 0.997857 +505, -0.081096, -0.000000, 0.000000, 0.996706 +506, -0.096747, -0.000000, 0.000000, 0.995309 +507, -0.112373, -0.000000, 0.000000, 0.993666 +508, -0.127973, -0.000000, 0.000000, 0.991778 +509, -0.143540, -0.000000, 0.000000, 0.989644 +510, -0.159072, -0.000000, 0.000000, 0.987267 +511, -0.174565, -0.000000, 0.000000, 0.984646 +512, -0.190015, -0.000000, 0.000000, 0.981781 +513, -0.205418, -0.000000, 0.000000, 0.978674 +514, -0.220770, -0.000000, 0.000000, 0.975326 +515, -0.236067, -0.000000, 0.000000, 0.971737 +516, -0.251307, -0.000000, 0.000000, 0.967907 +517, -0.266484, -0.000000, 0.000000, 0.963839 +518, -0.281595, -0.000000, 0.000000, 0.959533 +519, -0.296637, -0.000000, 0.000000, 0.954990 +520, -0.311606, -0.000000, 0.000000, 0.950211 +521, -0.326498, -0.000000, 0.000000, 0.945198 +522, -0.341309, -0.000000, 0.000000, 0.939951 +523, -0.356036, -0.000000, 0.000000, 0.934472 +524, -0.370675, -0.000000, 0.000000, 0.928763 +525, -0.385222, -0.000000, 0.000000, 0.922824 +526, -0.399675, -0.000000, 0.000000, 0.916657 +527, -0.414029, -0.000000, 0.000000, 0.910264 +528, -0.428280, -0.000000, 0.000000, 0.903646 +529, -0.442426, -0.000000, 0.000000, 0.896805 +530, -0.456462, -0.000000, 0.000000, 0.889743 +531, -0.470386, -0.000000, 0.000000, 0.882461 +532, -0.484194, -0.000000, 0.000000, 0.874961 +533, -0.497882, -0.000000, 0.000000, 0.867245 +534, -0.511447, -0.000000, 0.000000, 0.859315 +535, -0.524886, -0.000000, 0.000000, 0.851173 +536, -0.538195, -0.000000, 0.000000, 0.842820 +537, -0.551371, -0.000000, 0.000000, 0.834260 +538, -0.564412, -0.000000, 0.000000, 0.825493 +539, -0.577313, -0.000000, 0.000000, 0.816523 +540, -0.590071, -0.000000, 0.000000, 0.807351 +541, -0.602684, -0.000000, 0.000000, 0.797980 +542, -0.615148, -0.000000, 0.000000, 0.788412 +543, -0.627460, -0.000000, 0.000000, 0.778649 +544, -0.639617, -0.000000, 0.000000, 0.768694 +545, -0.651616, -0.000000, 0.000000, 0.758549 +546, -0.663454, -0.000000, 0.000000, 0.748217 +547, -0.675129, -0.000000, 0.000000, 0.737700 +548, -0.686637, -0.000000, 0.000000, 0.727001 +549, -0.697975, -0.000000, 0.000000, 0.716122 +550, -0.709141, -0.000000, 0.000000, 0.705067 +551, -0.720132, -0.000000, 0.000000, 0.693837 +552, -0.730945, -0.000000, 0.000000, 0.682437 +553, -0.741577, -0.000000, 0.000000, 0.670867 +554, -0.752027, -0.000000, 0.000000, 0.659132 +555, -0.762291, -0.000000, 0.000000, 0.647235 +556, -0.772366, -0.000000, 0.000000, 0.635177 +557, -0.782251, -0.000000, 0.000000, 0.622963 +558, -0.791943, -0.000000, 0.000000, 0.610595 +559, -0.801439, -0.000000, 0.000000, 0.598076 +560, -0.810738, -0.000000, 0.000000, 0.585410 +561, -0.819836, -0.000000, 0.000000, 0.572599 +562, -0.828732, -0.000000, 0.000000, 0.559646 +563, -0.837423, -0.000000, 0.000000, 0.546556 +564, -0.845907, -0.000000, 0.000000, 0.533330 +565, -0.854183, -0.000000, 0.000000, 0.519973 +566, -0.862247, -0.000000, 0.000000, 0.506487 +567, -0.870099, -0.000000, 0.000000, 0.492877 +568, -0.877736, -0.000000, 0.000000, 0.479145 +569, -0.885156, -0.000000, 0.000000, 0.465294 +570, -0.892358, -0.000000, 0.000000, 0.451328 +571, -0.899339, -0.000000, 0.000000, 0.437251 +572, -0.906099, -0.000000, 0.000000, 0.423067 +573, -0.912634, -0.000000, 0.000000, 0.408777 +574, -0.918944, -0.000000, 0.000000, 0.394387 +575, -0.925028, -0.000000, 0.000000, 0.379899 +576, -0.930883, -0.000000, 0.000000, 0.365318 +577, -0.936508, -0.000000, 0.000000, 0.350646 +578, -0.941902, -0.000000, 0.000000, 0.335888 +579, -0.947063, -0.000000, 0.000000, 0.321047 +580, -0.951991, -0.000000, 0.000000, 0.306126 +581, -0.956683, -0.000000, 0.000000, 0.291130 +582, -0.961140, -0.000000, 0.000000, 0.276062 +583, -0.965359, -0.000000, 0.000000, 0.260926 +584, -0.969339, -0.000000, 0.000000, 0.245726 +585, -0.973081, -0.000000, 0.000000, 0.230465 +586, -0.976582, -0.000000, 0.000000, 0.215147 +587, -0.979842, -0.000000, 0.000000, 0.199776 +588, -0.982860, -0.000000, 0.000000, 0.184355 +589, -0.985635, -0.000000, 0.000000, 0.168889 +590, -0.988167, -0.000000, 0.000000, 0.153382 +591, -0.990455, -0.000000, 0.000000, 0.137836 +592, -0.992499, -0.000000, 0.000000, 0.122256 +593, -0.994297, -0.000000, 0.000000, 0.106647 +594, -0.995850, -0.000000, 0.000000, 0.091010 +595, -0.997157, -0.000000, 0.000000, 0.075352 +596, -0.998218, -0.000000, 0.000000, 0.059675 +597, -0.999032, -0.000000, 0.000000, 0.043983 +598, -0.999600, -0.000000, 0.000000, 0.028280 +599, -0.999921, -0.000000, 0.000000, 0.012570 +600, -0.999995, 0.000000, -0.000000, -0.003143 +601, -0.999822, 0.000000, -0.000000, -0.018855 +602, -0.999403, 0.000000, -0.000000, -0.034562 +603, -0.998736, 0.000000, -0.000000, -0.050261 +604, -0.997823, 0.000000, -0.000000, -0.065948 +605, -0.996664, 0.000000, -0.000000, -0.081618 +606, -0.995258, 0.000000, -0.000000, -0.097268 +607, -0.993607, 0.000000, -0.000000, -0.112894 +608, -0.991711, 0.000000, -0.000000, -0.128492 +609, -0.989569, 0.000000, -0.000000, -0.144058 +610, -0.987183, 0.000000, -0.000000, -0.159589 +611, -0.984554, 0.000000, -0.000000, -0.175081 +612, -0.981682, 0.000000, -0.000000, -0.190529 +613, -0.978567, 0.000000, -0.000000, -0.205930 +614, -0.975210, 0.000000, -0.000000, -0.221281 +615, -0.971613, 0.000000, -0.000000, -0.236576 +616, -0.967776, 0.000000, -0.000000, -0.251814 +617, -0.963700, 0.000000, -0.000000, -0.266989 +618, -0.959386, 0.000000, -0.000000, -0.282098 +619, -0.954835, 0.000000, -0.000000, -0.297138 +620, -0.950048, 0.000000, -0.000000, -0.312104 +621, -0.945027, 0.000000, -0.000000, -0.326993 +622, -0.939772, 0.000000, -0.000000, -0.341801 +623, -0.934286, 0.000000, -0.000000, -0.356525 +624, -0.928568, 0.000000, -0.000000, -0.371161 +625, -0.922622, 0.000000, -0.000000, -0.385706 +626, -0.916448, 0.000000, -0.000000, -0.400155 +627, -0.910047, 0.000000, -0.000000, -0.414505 +628, -0.903422, 0.000000, -0.000000, -0.428753 +629, -0.896573, 0.000000, -0.000000, -0.442895 +630, -0.889504, 0.000000, -0.000000, -0.456928 +631, -0.882214, 0.000000, -0.000000, -0.470848 +632, -0.874707, 0.000000, -0.000000, -0.484652 +633, -0.866984, 0.000000, -0.000000, -0.498336 +634, -0.859047, 0.000000, -0.000000, -0.511897 +635, -0.850898, 0.000000, -0.000000, -0.525332 +636, -0.842538, 0.000000, -0.000000, -0.538636 +637, -0.833971, 0.000000, -0.000000, -0.551808 +638, -0.825198, 0.000000, -0.000000, -0.564844 +639, -0.816221, 0.000000, -0.000000, -0.577740 +640, -0.807042, 0.000000, -0.000000, -0.590494 +641, -0.797664, 0.000000, -0.000000, -0.603102 +642, -0.788090, 0.000000, -0.000000, -0.615561 +643, -0.778320, 0.000000, -0.000000, -0.627867 +644, -0.768359, 0.000000, -0.000000, -0.640019 +645, -0.758208, 0.000000, -0.000000, -0.652013 +646, -0.747869, 0.000000, -0.000000, -0.663846 +647, -0.737346, 0.000000, -0.000000, -0.675515 +648, -0.726641, 0.000000, -0.000000, -0.687017 +649, -0.715757, 0.000000, -0.000000, -0.698350 +650, -0.704695, 0.000000, -0.000000, -0.709510 +651, -0.693460, 0.000000, -0.000000, -0.720495 +652, -0.682054, 0.000000, -0.000000, -0.731302 +653, -0.670479, 0.000000, -0.000000, -0.741929 +654, -0.658739, 0.000000, -0.000000, -0.752372 +655, -0.646835, 0.000000, -0.000000, -0.762630 +656, -0.634773, 0.000000, -0.000000, -0.772699 +657, -0.622553, 0.000000, -0.000000, -0.782577 +658, -0.610180, 0.000000, -0.000000, -0.792263 +659, -0.597656, 0.000000, -0.000000, -0.801752 +660, -0.584985, 0.000000, -0.000000, -0.811044 +661, -0.572169, 0.000000, -0.000000, -0.820136 +662, -0.559212, 0.000000, -0.000000, -0.829025 +663, -0.546117, 0.000000, -0.000000, -0.837709 +664, -0.532887, 0.000000, -0.000000, -0.846186 +665, -0.519526, 0.000000, -0.000000, -0.854455 +666, -0.506036, 0.000000, -0.000000, -0.862512 +667, -0.492421, 0.000000, -0.000000, -0.870357 +668, -0.478685, 0.000000, -0.000000, -0.877987 +669, -0.464830, 0.000000, -0.000000, -0.885400 +670, -0.450861, 0.000000, -0.000000, -0.892594 +671, -0.436780, 0.000000, -0.000000, -0.899568 +672, -0.422592, 0.000000, -0.000000, -0.906320 +673, -0.408299, 0.000000, -0.000000, -0.912848 +674, -0.393906, 0.000000, -0.000000, -0.919151 +675, -0.379415, 0.000000, -0.000000, -0.925227 +676, -0.364830, 0.000000, -0.000000, -0.931074 +677, -0.350156, 0.000000, -0.000000, -0.936692 +678, -0.335395, 0.000000, -0.000000, -0.942078 +679, -0.320551, 0.000000, -0.000000, -0.947231 +680, -0.305628, 0.000000, -0.000000, -0.952151 +681, -0.290629, 0.000000, -0.000000, -0.956836 +682, -0.275559, 0.000000, -0.000000, -0.961284 +683, -0.260421, 0.000000, -0.000000, -0.965495 +684, -0.245218, 0.000000, -0.000000, -0.969468 +685, -0.229955, 0.000000, -0.000000, -0.973201 +686, -0.214635, 0.000000, -0.000000, -0.976694 +687, -0.199262, 0.000000, -0.000000, -0.979946 +688, -0.183840, 0.000000, -0.000000, -0.982956 +689, -0.168373, 0.000000, -0.000000, -0.985723 +690, -0.152864, 0.000000, -0.000000, -0.988247 +691, -0.137317, 0.000000, -0.000000, -0.990527 +692, -0.121736, 0.000000, -0.000000, -0.992562 +693, -0.106126, 0.000000, -0.000000, -0.994353 +694, -0.090489, 0.000000, -0.000000, -0.995897 +695, -0.074830, 0.000000, -0.000000, -0.997196 +696, -0.059152, 0.000000, -0.000000, -0.998249 +697, -0.043459, 0.000000, -0.000000, -0.999055 +698, -0.027756, 0.000000, -0.000000, -0.999615 +699, -0.012046, 0.000000, -0.000000, -0.999927 +700, 0.003666, 0.000000, 0.000000, -0.999993 +701, 0.019378, 0.000000, 0.000000, -0.999812 +702, 0.035086, 0.000000, 0.000000, -0.999384 +703, 0.050784, 0.000000, 0.000000, -0.998710 +704, 0.066470, 0.000000, 0.000000, -0.997788 +705, 0.082140, 0.000000, 0.000000, -0.996621 +706, 0.097789, 0.000000, 0.000000, -0.995207 +707, 0.113414, 0.000000, 0.000000, -0.993548 +708, 0.129011, 0.000000, 0.000000, -0.991643 +709, 0.144577, 0.000000, 0.000000, -0.989494 +710, 0.160106, 0.000000, 0.000000, -0.987100 +711, 0.175596, 0.000000, 0.000000, -0.984462 +712, 0.191043, 0.000000, 0.000000, -0.981582 +713, 0.206443, 0.000000, 0.000000, -0.978459 +714, 0.221791, 0.000000, 0.000000, -0.975094 +715, 0.237085, 0.000000, 0.000000, -0.971489 +716, 0.252321, 0.000000, 0.000000, -0.967644 +717, 0.267494, 0.000000, 0.000000, -0.963560 +718, 0.282600, 0.000000, 0.000000, -0.959238 +719, 0.297638, 0.000000, 0.000000, -0.954679 +720, 0.312601, 0.000000, 0.000000, -0.949884 +721, 0.327488, 0.000000, 0.000000, -0.944855 +722, 0.342294, 0.000000, 0.000000, -0.939593 +723, 0.357015, 0.000000, 0.000000, -0.934099 +724, 0.371648, 0.000000, 0.000000, -0.928374 +725, 0.386189, 0.000000, 0.000000, -0.922420 +726, 0.400635, 0.000000, 0.000000, -0.916238 +727, 0.414982, 0.000000, 0.000000, -0.909830 +728, 0.429226, 0.000000, 0.000000, -0.903197 +729, 0.443365, 0.000000, 0.000000, -0.896341 +730, 0.457394, 0.000000, 0.000000, -0.889264 +731, 0.471310, 0.000000, 0.000000, -0.881968 +732, 0.485110, 0.000000, 0.000000, -0.874453 +733, 0.498790, 0.000000, 0.000000, -0.866723 +734, 0.512347, 0.000000, 0.000000, -0.858779 +735, 0.525777, 0.000000, 0.000000, -0.850622 +736, 0.539078, 0.000000, 0.000000, -0.842256 +737, 0.552245, 0.000000, 0.000000, -0.833682 +738, 0.565276, 0.000000, 0.000000, -0.824902 +739, 0.578168, 0.000000, 0.000000, -0.815918 +740, 0.590917, 0.000000, 0.000000, -0.806733 +741, 0.603519, 0.000000, 0.000000, -0.797348 +742, 0.615973, 0.000000, 0.000000, -0.787767 +743, 0.628275, 0.000000, 0.000000, -0.777991 +744, 0.640422, 0.000000, 0.000000, -0.768023 +745, 0.652410, 0.000000, 0.000000, -0.757866 +746, 0.664238, 0.000000, 0.000000, -0.747521 +747, 0.675901, 0.000000, 0.000000, -0.736992 +748, 0.687398, 0.000000, 0.000000, -0.726281 +749, 0.698725, 0.000000, 0.000000, -0.715391 +750, 0.709879, 0.000000, 0.000000, -0.704324 +751, 0.720858, 0.000000, 0.000000, -0.693083 +752, 0.731659, 0.000000, 0.000000, -0.681671 +753, 0.742280, 0.000000, 0.000000, -0.670090 +754, 0.752717, 0.000000, 0.000000, -0.658344 +755, 0.762968, 0.000000, 0.000000, -0.646436 +756, 0.773031, 0.000000, 0.000000, -0.634368 +757, 0.782903, 0.000000, 0.000000, -0.622143 +758, 0.792582, 0.000000, 0.000000, -0.609765 +759, 0.802065, 0.000000, 0.000000, -0.597236 +760, 0.811350, 0.000000, 0.000000, -0.584560 +761, 0.820435, 0.000000, 0.000000, -0.571740 +762, 0.829317, 0.000000, 0.000000, -0.558778 +763, 0.837995, 0.000000, 0.000000, -0.545678 +764, 0.846465, 0.000000, 0.000000, -0.532444 +765, 0.854727, 0.000000, 0.000000, -0.519078 +766, 0.862777, 0.000000, 0.000000, -0.505584 +767, 0.870615, 0.000000, 0.000000, -0.491965 +768, 0.878237, 0.000000, 0.000000, -0.478225 +769, 0.885643, 0.000000, 0.000000, -0.464366 +770, 0.892830, 0.000000, 0.000000, -0.450393 +771, 0.899797, 0.000000, 0.000000, -0.436309 +772, 0.906541, 0.000000, 0.000000, -0.422117 +773, 0.913062, 0.000000, 0.000000, -0.407821 +774, 0.919357, 0.000000, 0.000000, -0.393424 +775, 0.925425, 0.000000, 0.000000, -0.378930 +776, 0.931265, 0.000000, 0.000000, -0.364342 +777, 0.936875, 0.000000, 0.000000, -0.349665 +778, 0.942253, 0.000000, 0.000000, -0.334901 +779, 0.947399, 0.000000, 0.000000, -0.320055 +780, 0.952311, 0.000000, 0.000000, -0.305129 +781, 0.956988, 0.000000, 0.000000, -0.290128 +782, 0.961428, 0.000000, 0.000000, -0.275056 +783, 0.965631, 0.000000, 0.000000, -0.259915 +784, 0.969596, 0.000000, 0.000000, -0.244710 +785, 0.973322, 0.000000, 0.000000, -0.229445 +786, 0.976807, 0.000000, 0.000000, -0.214124 +787, 0.980050, 0.000000, 0.000000, -0.198749 +788, 0.983052, 0.000000, 0.000000, -0.183326 +789, 0.985811, 0.000000, 0.000000, -0.167857 +790, 0.988327, 0.000000, 0.000000, -0.152346 +791, 0.990599, 0.000000, 0.000000, -0.136798 +792, 0.992626, 0.000000, 0.000000, -0.121217 +793, 0.994408, 0.000000, 0.000000, -0.105605 +794, 0.995945, 0.000000, 0.000000, -0.089967 +795, 0.997235, 0.000000, 0.000000, -0.074307 +796, 0.998280, 0.000000, 0.000000, -0.058629 +797, 0.999078, 0.000000, 0.000000, -0.042936 +798, 0.999629, 0.000000, 0.000000, -0.027233 +799, 0.999934, 0.000000, 0.000000, -0.011523 +800, 0.999991, 0.000000, 0.000000, 0.004190 +801, 0.999802, 0.000000, 0.000000, 0.019902 +802, 0.999366, 0.000000, 0.000000, 0.035609 +803, 0.998683, 0.000000, 0.000000, 0.051307 +804, 0.997753, 0.000000, 0.000000, 0.066993 +805, 0.996578, 0.000000, 0.000000, 0.082662 +806, 0.995156, 0.000000, 0.000000, 0.098310 +807, 0.993488, 0.000000, 0.000000, 0.113935 +808, 0.991575, 0.000000, 0.000000, 0.129531 +809, 0.989418, 0.000000, 0.000000, 0.145095 +810, 0.987016, 0.000000, 0.000000, 0.160623 +811, 0.984370, 0.000000, 0.000000, 0.176112 +812, 0.981481, 0.000000, 0.000000, 0.191557 +813, 0.978350, 0.000000, 0.000000, 0.206955 +814, 0.974978, 0.000000, 0.000000, 0.222302 +815, 0.971365, 0.000000, 0.000000, 0.237594 +816, 0.967511, 0.000000, 0.000000, 0.252827 +817, 0.963419, 0.000000, 0.000000, 0.267998 +818, 0.959090, 0.000000, 0.000000, 0.283103 +819, 0.954523, 0.000000, 0.000000, 0.298138 +820, 0.949721, 0.000000, 0.000000, 0.313099 +821, 0.944684, 0.000000, 0.000000, 0.327983 +822, 0.939414, 0.000000, 0.000000, 0.342786 +823, 0.933912, 0.000000, 0.000000, 0.357504 +824, 0.928179, 0.000000, 0.000000, 0.372134 +825, 0.922217, 0.000000, 0.000000, 0.386672 +826, 0.916028, 0.000000, 0.000000, 0.401115 +827, 0.909612, 0.000000, 0.000000, 0.415458 +828, 0.902972, 0.000000, 0.000000, 0.429699 +829, 0.896109, 0.000000, 0.000000, 0.443834 +830, 0.889024, 0.000000, 0.000000, 0.457860 +831, 0.881721, 0.000000, 0.000000, 0.471772 +832, 0.874199, 0.000000, 0.000000, 0.485568 +833, 0.866462, 0.000000, 0.000000, 0.499244 +834, 0.858510, 0.000000, 0.000000, 0.512797 +835, 0.850347, 0.000000, 0.000000, 0.526223 +836, 0.841974, 0.000000, 0.000000, 0.539519 +837, 0.833392, 0.000000, 0.000000, 0.552682 +838, 0.824606, 0.000000, 0.000000, 0.565708 +839, 0.815615, 0.000000, 0.000000, 0.578595 +840, 0.806423, 0.000000, 0.000000, 0.591339 +841, 0.797032, 0.000000, 0.000000, 0.603937 +842, 0.787444, 0.000000, 0.000000, 0.616386 +843, 0.777662, 0.000000, 0.000000, 0.628682 +844, 0.767688, 0.000000, 0.000000, 0.640824 +845, 0.757524, 0.000000, 0.000000, 0.652807 +846, 0.747173, 0.000000, 0.000000, 0.664629 +847, 0.736638, 0.000000, 0.000000, 0.676287 +848, 0.725921, 0.000000, 0.000000, 0.687778 +849, 0.715025, 0.000000, 0.000000, 0.699099 +850, 0.703952, 0.000000, 0.000000, 0.710248 +851, 0.692705, 0.000000, 0.000000, 0.721221 +852, 0.681287, 0.000000, 0.000000, 0.732016 +853, 0.669701, 0.000000, 0.000000, 0.742631 +854, 0.657950, 0.000000, 0.000000, 0.753062 +855, 0.646036, 0.000000, 0.000000, 0.763307 +856, 0.633963, 0.000000, 0.000000, 0.773363 +857, 0.621733, 0.000000, 0.000000, 0.783229 +858, 0.609350, 0.000000, 0.000000, 0.792901 +859, 0.596816, 0.000000, 0.000000, 0.802378 +860, 0.584135, 0.000000, 0.000000, 0.811656 +861, 0.571310, 0.000000, 0.000000, 0.820734 +862, 0.558343, 0.000000, 0.000000, 0.829610 +863, 0.545239, 0.000000, 0.000000, 0.838280 +864, 0.532000, 0.000000, 0.000000, 0.846744 +865, 0.518630, 0.000000, 0.000000, 0.854999 +866, 0.505132, 0.000000, 0.000000, 0.863042 +867, 0.491509, 0.000000, 0.000000, 0.870872 +868, 0.477765, 0.000000, 0.000000, 0.878488 +869, 0.463902, 0.000000, 0.000000, 0.885886 +870, 0.449926, 0.000000, 0.000000, 0.893066 +871, 0.435838, 0.000000, 0.000000, 0.900025 +872, 0.421642, 0.000000, 0.000000, 0.906762 +873, 0.407343, 0.000000, 0.000000, 0.913275 +874, 0.392942, 0.000000, 0.000000, 0.919563 +875, 0.378445, 0.000000, 0.000000, 0.925624 +876, 0.363855, 0.000000, 0.000000, 0.931456 +877, 0.349174, 0.000000, 0.000000, 0.937058 +878, 0.334407, 0.000000, 0.000000, 0.942429 +879, 0.319558, 0.000000, 0.000000, 0.947567 +880, 0.304630, 0.000000, 0.000000, 0.952471 +881, 0.289627, 0.000000, 0.000000, 0.957140 +882, 0.274552, 0.000000, 0.000000, 0.961572 +883, 0.259409, 0.000000, 0.000000, 0.965767 +884, 0.244203, 0.000000, 0.000000, 0.969724 +885, 0.228936, 0.000000, 0.000000, 0.973442 +886, 0.213612, 0.000000, 0.000000, 0.976919 +887, 0.198236, 0.000000, 0.000000, 0.980154 +888, 0.182811, 0.000000, 0.000000, 0.983148 +889, 0.167340, 0.000000, 0.000000, 0.985899 +890, 0.151829, 0.000000, 0.000000, 0.988407 +891, 0.136279, 0.000000, 0.000000, 0.990670 +892, 0.120697, 0.000000, 0.000000, 0.992689 +893, 0.105084, 0.000000, 0.000000, 0.994463 +894, 0.089446, 0.000000, 0.000000, 0.995992 +895, 0.073785, 0.000000, 0.000000, 0.997274 +896, 0.058106, 0.000000, 0.000000, 0.998310 +897, 0.042413, 0.000000, 0.000000, 0.999100 +898, 0.026709, 0.000000, 0.000000, 0.999643 +899, 0.010999, 0.000000, 0.000000, 0.999940 +900, -0.004714, -0.000000, 0.000000, 0.999989 +901, -0.020426, -0.000000, 0.000000, 0.999791 +902, -0.036132, -0.000000, 0.000000, 0.999347 +903, -0.051830, -0.000000, 0.000000, 0.998656 +904, -0.067515, -0.000000, 0.000000, 0.997718 +905, -0.083184, -0.000000, 0.000000, 0.996534 +906, -0.098832, -0.000000, 0.000000, 0.995104 +907, -0.114455, -0.000000, 0.000000, 0.993428 +908, -0.130050, -0.000000, 0.000000, 0.991507 +909, -0.145613, -0.000000, 0.000000, 0.989342 +910, -0.161140, -0.000000, 0.000000, 0.986932 +911, -0.176628, -0.000000, 0.000000, 0.984278 +912, -0.192071, -0.000000, 0.000000, 0.981381 +913, -0.207468, -0.000000, 0.000000, 0.978242 +914, -0.222813, -0.000000, 0.000000, 0.974861 +915, -0.238103, -0.000000, 0.000000, 0.971240 +916, -0.253334, -0.000000, 0.000000, 0.967379 +917, -0.268503, -0.000000, 0.000000, 0.963279 +918, -0.283605, -0.000000, 0.000000, 0.958941 +919, -0.298638, -0.000000, 0.000000, 0.954367 +920, -0.313596, -0.000000, 0.000000, 0.949556 +921, -0.328478, -0.000000, 0.000000, 0.944512 +922, -0.343278, -0.000000, 0.000000, 0.939234 +923, -0.357993, -0.000000, 0.000000, 0.933724 +924, -0.372620, -0.000000, 0.000000, 0.927984 +925, -0.387155, -0.000000, 0.000000, 0.922015 +926, -0.401594, -0.000000, 0.000000, 0.915818 +927, -0.415935, -0.000000, 0.000000, 0.909394 +928, -0.430172, -0.000000, 0.000000, 0.902747 +929, -0.444304, -0.000000, 0.000000, 0.895876 +930, -0.458325, -0.000000, 0.000000, 0.888785 +931, -0.472234, -0.000000, 0.000000, 0.881473 +932, -0.486026, -0.000000, 0.000000, 0.873945 +933, -0.499698, -0.000000, 0.000000, 0.866200 +934, -0.513246, -0.000000, 0.000000, 0.858241 +935, -0.526668, -0.000000, 0.000000, 0.850071 +936, -0.539960, -0.000000, 0.000000, 0.841691 +937, -0.553118, -0.000000, 0.000000, 0.833103 +938, -0.566140, -0.000000, 0.000000, 0.824309 +939, -0.579022, -0.000000, 0.000000, 0.815312 +940, -0.591761, -0.000000, 0.000000, 0.806113 +941, -0.604354, -0.000000, 0.000000, 0.796716 +942, -0.616798, -0.000000, 0.000000, 0.787121 +943, -0.629090, -0.000000, 0.000000, 0.777333 +944, -0.641226, -0.000000, 0.000000, 0.767352 +945, -0.653204, -0.000000, 0.000000, 0.757182 +946, -0.665020, -0.000000, 0.000000, 0.746825 +947, -0.676673, -0.000000, 0.000000, 0.736284 +948, -0.688158, -0.000000, 0.000000, 0.725561 +949, -0.699474, -0.000000, 0.000000, 0.714658 +950, -0.710616, -0.000000, 0.000000, 0.703580 +951, -0.721584, -0.000000, 0.000000, 0.692327 +952, -0.732373, -0.000000, 0.000000, 0.680904 +953, -0.742981, -0.000000, 0.000000, 0.669312 +954, -0.753406, -0.000000, 0.000000, 0.657555 +955, -0.763645, -0.000000, 0.000000, 0.645636 +956, -0.773695, -0.000000, 0.000000, 0.633558 +957, -0.783555, -0.000000, 0.000000, 0.621323 +958, -0.793220, -0.000000, 0.000000, 0.608935 +959, -0.802690, -0.000000, 0.000000, 0.596396 +960, -0.811962, -0.000000, 0.000000, 0.583710 +961, -0.821034, -0.000000, 0.000000, 0.570880 +962, -0.829902, -0.000000, 0.000000, 0.557909 +963, -0.838566, -0.000000, 0.000000, 0.544800 +964, -0.847023, -0.000000, 0.000000, 0.531557 +965, -0.855270, -0.000000, 0.000000, 0.518182 +966, -0.863307, -0.000000, 0.000000, 0.504680 +967, -0.871130, -0.000000, 0.000000, 0.491053 +968, -0.878738, -0.000000, 0.000000, 0.477305 +969, -0.886129, -0.000000, 0.000000, 0.463438 +970, -0.893302, -0.000000, 0.000000, 0.449458 +971, -0.900253, -0.000000, 0.000000, 0.435366 +972, -0.906983, -0.000000, 0.000000, 0.421167 +973, -0.913489, -0.000000, 0.000000, 0.406864 +974, -0.919769, -0.000000, 0.000000, 0.392461 +975, -0.925822, -0.000000, 0.000000, 0.377960 +976, -0.931646, -0.000000, 0.000000, 0.363367 +977, -0.937241, -0.000000, 0.000000, 0.348683 +978, -0.942604, -0.000000, 0.000000, 0.333914 +979, -0.947734, -0.000000, 0.000000, 0.319062 +980, -0.952630, -0.000000, 0.000000, 0.304131 +981, -0.957291, -0.000000, 0.000000, 0.289125 +982, -0.961716, -0.000000, 0.000000, 0.274048 +983, -0.965903, -0.000000, 0.000000, 0.258903 +984, -0.969852, -0.000000, 0.000000, 0.243695 +985, -0.973561, -0.000000, 0.000000, 0.228426 +986, -0.977030, -0.000000, 0.000000, 0.213100 +987, -0.980258, -0.000000, 0.000000, 0.197722 +988, -0.983244, -0.000000, 0.000000, 0.182296 +989, -0.985987, -0.000000, 0.000000, 0.166824 +990, -0.988486, -0.000000, 0.000000, 0.151311 +991, -0.990742, -0.000000, 0.000000, 0.135761 +992, -0.992753, -0.000000, 0.000000, 0.120177 +993, -0.994518, -0.000000, 0.000000, 0.104563 +994, -0.996038, -0.000000, 0.000000, 0.088924 +995, -0.997313, -0.000000, 0.000000, 0.073263 +996, -0.998341, -0.000000, 0.000000, 0.057583 +997, -0.999122, -0.000000, 0.000000, 0.041890 +998, -0.999657, -0.000000, 0.000000, 0.026186 +999, -0.999945, -0.000000, 0.000000, 0.010475 +1000, -0.999986, 0.000000, -0.000000, -0.005238 +1001, -0.999781, 0.000000, -0.000000, -0.020949 +1002, -0.999328, 0.000000, -0.000000, -0.036656 +1003, -0.998629, 0.000000, -0.000000, -0.052353 +1004, -0.997683, 0.000000, -0.000000, -0.068038 +1005, -0.996491, 0.000000, -0.000000, -0.083706 +1006, -0.995052, 0.000000, -0.000000, -0.099353 +1007, -0.993368, 0.000000, -0.000000, -0.114975 +1008, -0.991439, 0.000000, -0.000000, -0.130569 +1009, -0.989265, 0.000000, -0.000000, -0.146131 +1010, -0.986847, 0.000000, -0.000000, -0.161657 +1011, -0.984185, 0.000000, -0.000000, -0.177143 +1012, -0.981280, 0.000000, -0.000000, -0.192585 +1013, -0.978133, 0.000000, -0.000000, -0.207980 +1014, -0.974744, 0.000000, -0.000000, -0.223323 +1015, -0.971115, 0.000000, -0.000000, -0.238611 +1016, -0.967246, 0.000000, -0.000000, -0.253841 +1017, -0.963138, 0.000000, -0.000000, -0.269007 +1018, -0.958792, 0.000000, -0.000000, -0.284107 +1019, -0.954210, 0.000000, -0.000000, -0.299137 +1020, -0.949392, 0.000000, -0.000000, -0.314094 +1021, -0.944340, 0.000000, -0.000000, -0.328972 +1022, -0.939054, 0.000000, -0.000000, -0.343770 +1023, -0.933537, 0.000000, -0.000000, -0.358482 +1024, -0.927789, 0.000000, -0.000000, -0.373106 +1025, -0.921812, 0.000000, -0.000000, -0.387638 +1026, -0.915607, 0.000000, -0.000000, -0.402074 +1027, -0.909177, 0.000000, -0.000000, -0.416411 +1028, -0.902521, 0.000000, -0.000000, -0.430645 +1029, -0.895643, 0.000000, -0.000000, -0.444773 +1030, -0.888544, 0.000000, -0.000000, -0.458791 +1031, -0.881226, 0.000000, -0.000000, -0.472695 +1032, -0.873690, 0.000000, -0.000000, -0.486483 +1033, -0.865938, 0.000000, -0.000000, -0.500151 +1034, -0.857973, 0.000000, -0.000000, -0.513696 +1035, -0.849795, 0.000000, -0.000000, -0.527113 +1036, -0.841408, 0.000000, -0.000000, -0.540400 +1037, -0.832813, 0.000000, -0.000000, -0.553554 +1038, -0.824012, 0.000000, -0.000000, -0.566572 +1039, -0.815008, 0.000000, -0.000000, -0.579449 +1040, -0.805803, 0.000000, -0.000000, -0.592183 +1041, -0.796399, 0.000000, -0.000000, -0.604772 +1042, -0.786798, 0.000000, -0.000000, -0.617210 +1043, -0.777003, 0.000000, -0.000000, -0.629497 +1044, -0.767016, 0.000000, -0.000000, -0.641628 +1045, -0.756840, 0.000000, -0.000000, -0.653600 +1046, -0.746477, 0.000000, -0.000000, -0.665412 +1047, -0.735929, 0.000000, -0.000000, -0.677058 +1048, -0.725200, 0.000000, -0.000000, -0.688538 +1049, -0.714292, 0.000000, -0.000000, -0.699848 +1050, -0.703207, 0.000000, -0.000000, -0.710985 +1051, -0.691949, 0.000000, -0.000000, -0.721946 +1052, -0.680520, 0.000000, -0.000000, -0.732729 +1053, -0.668923, 0.000000, -0.000000, -0.743332 +1054, -0.657161, 0.000000, -0.000000, -0.753750 +1055, -0.645236, 0.000000, -0.000000, -0.763983 +1056, -0.633153, 0.000000, -0.000000, -0.774027 +1057, -0.620912, 0.000000, -0.000000, -0.783880 +1058, -0.608519, 0.000000, -0.000000, -0.793539 +1059, -0.595975, 0.000000, -0.000000, -0.803003 +1060, -0.583285, 0.000000, -0.000000, -0.812268 +1061, -0.570450, 0.000000, -0.000000, -0.821333 +1062, -0.557474, 0.000000, -0.000000, -0.830194 +1063, -0.544361, 0.000000, -0.000000, -0.838851 +1064, -0.531113, 0.000000, -0.000000, -0.847301 +1065, -0.517734, 0.000000, -0.000000, -0.855541 +1066, -0.504228, 0.000000, -0.000000, -0.863571 +1067, -0.490596, 0.000000, -0.000000, -0.871387 +1068, -0.476844, 0.000000, -0.000000, -0.878988 +1069, -0.462974, 0.000000, -0.000000, -0.886372 +1070, -0.448990, 0.000000, -0.000000, -0.893537 +1071, -0.434895, 0.000000, -0.000000, -0.900481 +1072, -0.420692, 0.000000, -0.000000, -0.907203 +1073, -0.406386, 0.000000, -0.000000, -0.913702 +1074, -0.391979, 0.000000, -0.000000, -0.919974 +1075, -0.377475, 0.000000, -0.000000, -0.926020 +1076, -0.362879, 0.000000, -0.000000, -0.931836 +1077, -0.348192, 0.000000, -0.000000, -0.937423 +1078, -0.333420, 0.000000, -0.000000, -0.942778 +1079, -0.318565, 0.000000, -0.000000, -0.947901 +1080, -0.303632, 0.000000, -0.000000, -0.952789 +1081, -0.288624, 0.000000, -0.000000, -0.957443 +1082, -0.273544, 0.000000, -0.000000, -0.961859 +1083, -0.258397, 0.000000, -0.000000, -0.966039 +1084, -0.243187, 0.000000, -0.000000, -0.969980 +1085, -0.227916, 0.000000, -0.000000, -0.973681 +1086, -0.212589, 0.000000, -0.000000, -0.977142 +1087, -0.197209, 0.000000, -0.000000, -0.980361 +1088, -0.181781, 0.000000, -0.000000, -0.983339 +1089, -0.166307, 0.000000, -0.000000, -0.986074 +1090, -0.150793, 0.000000, -0.000000, -0.988565 +1091, -0.135242, 0.000000, -0.000000, -0.990813 +1092, -0.119657, 0.000000, -0.000000, -0.992815 +1093, -0.104042, 0.000000, -0.000000, -0.994573 +1094, -0.088402, 0.000000, -0.000000, -0.996085 +1095, -0.072740, 0.000000, -0.000000, -0.997351 +1096, -0.057060, 0.000000, -0.000000, -0.998371 +1097, -0.041366, 0.000000, -0.000000, -0.999144 +1098, -0.025662, 0.000000, -0.000000, -0.999671 +1099, -0.009952, 0.000000, -0.000000, -0.999950 +1100, 0.005761, 0.000000, 0.000000, -0.999983 +1101, 0.021473, 0.000000, 0.000000, -0.999769 +1102, 0.037179, 0.000000, 0.000000, -0.999309 +1103, 0.052876, 0.000000, 0.000000, -0.998601 +1104, 0.068560, 0.000000, 0.000000, -0.997647 +1105, 0.084228, 0.000000, 0.000000, -0.996447 +1106, 0.099874, 0.000000, 0.000000, -0.995000 +1107, 0.115496, 0.000000, 0.000000, -0.993308 +1108, 0.131089, 0.000000, 0.000000, -0.991371 +1109, 0.146650, 0.000000, 0.000000, -0.989189 +1110, 0.162174, 0.000000, 0.000000, -0.986762 +1111, 0.177659, 0.000000, 0.000000, -0.984092 +1112, 0.193099, 0.000000, 0.000000, -0.981179 +1113, 0.208492, 0.000000, 0.000000, -0.978024 +1114, 0.223834, 0.000000, 0.000000, -0.974627 +1115, 0.239120, 0.000000, 0.000000, -0.970990 +1116, 0.254347, 0.000000, 0.000000, -0.967113 +1117, 0.269512, 0.000000, 0.000000, -0.962997 +1118, 0.284610, 0.000000, 0.000000, -0.958644 +1119, 0.299637, 0.000000, 0.000000, -0.954053 +1120, 0.314591, 0.000000, 0.000000, -0.949227 +1121, 0.329467, 0.000000, 0.000000, -0.944167 +1122, 0.344261, 0.000000, 0.000000, -0.938874 +1123, 0.358971, 0.000000, 0.000000, -0.933349 +1124, 0.373592, 0.000000, 0.000000, -0.927593 +1125, 0.388121, 0.000000, 0.000000, -0.921609 +1126, 0.402554, 0.000000, 0.000000, -0.915396 +1127, 0.416887, 0.000000, 0.000000, -0.908958 +1128, 0.431118, 0.000000, 0.000000, -0.902296 +1129, 0.445242, 0.000000, 0.000000, -0.895410 +1130, 0.459256, 0.000000, 0.000000, -0.888304 +1131, 0.473157, 0.000000, 0.000000, -0.880978 +1132, 0.486941, 0.000000, 0.000000, -0.873435 +1133, 0.500605, 0.000000, 0.000000, -0.865676 +1134, 0.514145, 0.000000, 0.000000, -0.857703 +1135, 0.527558, 0.000000, 0.000000, -0.849519 +1136, 0.540841, 0.000000, 0.000000, -0.841125 +1137, 0.553991, 0.000000, 0.000000, -0.832523 +1138, 0.567003, 0.000000, 0.000000, -0.823716 +1139, 0.579876, 0.000000, 0.000000, -0.814705 +1140, 0.592605, 0.000000, 0.000000, -0.805493 +1141, 0.605189, 0.000000, 0.000000, -0.796082 +1142, 0.617622, 0.000000, 0.000000, -0.786475 +1143, 0.629904, 0.000000, 0.000000, -0.776673 +1144, 0.642029, 0.000000, 0.000000, -0.766680 +1145, 0.653997, 0.000000, 0.000000, -0.756497 +1146, 0.665802, 0.000000, 0.000000, -0.746128 +1147, 0.677444, 0.000000, 0.000000, -0.735575 +1148, 0.688918, 0.000000, 0.000000, -0.724839 +1149, 0.700222, 0.000000, 0.000000, -0.713925 +1150, 0.711353, 0.000000, 0.000000, -0.702835 +1151, 0.722309, 0.000000, 0.000000, -0.691571 +1152, 0.733086, 0.000000, 0.000000, -0.680136 +1153, 0.743682, 0.000000, 0.000000, -0.668534 +1154, 0.754095, 0.000000, 0.000000, -0.656766 +1155, 0.764321, 0.000000, 0.000000, -0.644836 +1156, 0.774359, 0.000000, 0.000000, -0.632747 +1157, 0.784205, 0.000000, 0.000000, -0.620502 +1158, 0.793858, 0.000000, 0.000000, -0.608103 +1159, 0.803315, 0.000000, 0.000000, -0.595555 +1160, 0.812573, 0.000000, 0.000000, -0.582859 +1161, 0.821631, 0.000000, 0.000000, -0.570019 +1162, 0.830486, 0.000000, 0.000000, -0.557039 +1163, 0.839136, 0.000000, 0.000000, -0.543921 +1164, 0.847579, 0.000000, 0.000000, -0.530669 +1165, 0.855813, 0.000000, 0.000000, -0.517286 +1166, 0.863835, 0.000000, 0.000000, -0.503775 +1167, 0.871644, 0.000000, 0.000000, -0.490140 +1168, 0.879237, 0.000000, 0.000000, -0.476384 +1169, 0.886614, 0.000000, 0.000000, -0.462510 +1170, 0.893772, 0.000000, 0.000000, -0.448522 +1171, 0.900709, 0.000000, 0.000000, -0.434423 +1172, 0.907424, 0.000000, 0.000000, -0.420217 +1173, 0.913914, 0.000000, 0.000000, -0.405907 +1174, 0.920179, 0.000000, 0.000000, -0.391497 +1175, 0.926217, 0.000000, 0.000000, -0.376990 +1176, 0.932026, 0.000000, 0.000000, -0.362391 +1177, 0.937605, 0.000000, 0.000000, -0.347701 +1178, 0.942953, 0.000000, 0.000000, -0.332926 +1179, 0.948068, 0.000000, 0.000000, -0.318069 +1180, 0.952948, 0.000000, 0.000000, -0.303133 +1181, 0.957594, 0.000000, 0.000000, -0.288122 +1182, 0.962003, 0.000000, 0.000000, -0.273041 +1183, 0.966174, 0.000000, 0.000000, -0.257891 +1184, 0.970107, 0.000000, 0.000000, -0.242678 +1185, 0.973800, 0.000000, 0.000000, -0.227406 +1186, 0.977253, 0.000000, 0.000000, -0.212077 +1187, 0.980465, 0.000000, 0.000000, -0.196695 +1188, 0.983434, 0.000000, 0.000000, -0.181266 +1189, 0.986161, 0.000000, 0.000000, -0.165791 +1190, 0.988644, 0.000000, 0.000000, -0.150275 +1191, 0.990883, 0.000000, 0.000000, -0.134723 +1192, 0.992878, 0.000000, 0.000000, -0.119137 +1193, 0.994627, 0.000000, 0.000000, -0.103521 +1194, 0.996131, 0.000000, 0.000000, -0.087880 +1195, 0.997389, 0.000000, 0.000000, -0.072218 +1196, 0.998400, 0.000000, 0.000000, -0.056537 +1197, 0.999166, 0.000000, 0.000000, -0.040843 +1198, 0.999684, 0.000000, 0.000000, -0.025138 +1199, 0.999956, 0.000000, 0.000000, -0.009428 +1200, 0.999980, 0.000000, 0.000000, 0.006285 +1201, 0.999758, 0.000000, 0.000000, 0.021997 +1202, 0.999289, 0.000000, 0.000000, 0.037703 +1203, 0.998573, 0.000000, 0.000000, 0.053399 +1204, 0.997611, 0.000000, 0.000000, 0.069083 +1205, 0.996402, 0.000000, 0.000000, 0.084750 +1206, 0.994948, 0.000000, 0.000000, 0.100395 +1207, 0.993247, 0.000000, 0.000000, 0.116016 +1208, 0.991302, 0.000000, 0.000000, 0.131608 +1209, 0.989112, 0.000000, 0.000000, 0.147168 +1210, 0.986677, 0.000000, 0.000000, 0.162691 +1211, 0.983999, 0.000000, 0.000000, 0.178174 +1212, 0.981078, 0.000000, 0.000000, 0.193613 +1213, 0.977915, 0.000000, 0.000000, 0.209005 +1214, 0.974510, 0.000000, 0.000000, 0.224344 +1215, 0.970865, 0.000000, 0.000000, 0.239629 +1216, 0.966980, 0.000000, 0.000000, 0.254854 +1217, 0.962856, 0.000000, 0.000000, 0.270016 +1218, 0.958494, 0.000000, 0.000000, 0.285112 +1219, 0.953896, 0.000000, 0.000000, 0.300137 +1220, 0.949062, 0.000000, 0.000000, 0.315088 +1221, 0.943994, 0.000000, 0.000000, 0.329961 +1222, 0.938693, 0.000000, 0.000000, 0.344753 +1223, 0.933161, 0.000000, 0.000000, 0.359460 +1224, 0.927397, 0.000000, 0.000000, 0.374078 +1225, 0.921405, 0.000000, 0.000000, 0.388603 +1226, 0.915185, 0.000000, 0.000000, 0.403033 +1227, 0.908740, 0.000000, 0.000000, 0.417363 +1228, 0.902070, 0.000000, 0.000000, 0.431590 +1229, 0.895177, 0.000000, 0.000000, 0.445711 +1230, 0.888063, 0.000000, 0.000000, 0.459721 +1231, 0.880730, 0.000000, 0.000000, 0.473618 +1232, 0.873180, 0.000000, 0.000000, 0.487398 +1233, 0.865414, 0.000000, 0.000000, 0.501058 +1234, 0.857434, 0.000000, 0.000000, 0.514594 +1235, 0.849243, 0.000000, 0.000000, 0.528003 +1236, 0.840841, 0.000000, 0.000000, 0.541282 +1237, 0.832233, 0.000000, 0.000000, 0.554427 +1238, 0.823418, 0.000000, 0.000000, 0.567435 +1239, 0.814401, 0.000000, 0.000000, 0.580303 +1240, 0.805182, 0.000000, 0.000000, 0.593027 +1241, 0.795765, 0.000000, 0.000000, 0.605605 +1242, 0.786151, 0.000000, 0.000000, 0.618034 +1243, 0.776343, 0.000000, 0.000000, 0.630310 +1244, 0.766344, 0.000000, 0.000000, 0.642431 +1245, 0.756155, 0.000000, 0.000000, 0.654393 +1246, 0.745779, 0.000000, 0.000000, 0.666193 +1247, 0.735220, 0.000000, 0.000000, 0.677829 +1248, 0.724478, 0.000000, 0.000000, 0.689297 +1249, 0.713558, 0.000000, 0.000000, 0.700596 +1250, 0.702462, 0.000000, 0.000000, 0.711721 +1251, 0.691192, 0.000000, 0.000000, 0.722671 +1252, 0.679752, 0.000000, 0.000000, 0.733442 +1253, 0.668144, 0.000000, 0.000000, 0.744032 +1254, 0.656371, 0.000000, 0.000000, 0.754438 +1255, 0.644436, 0.000000, 0.000000, 0.764659 +1256, 0.632341, 0.000000, 0.000000, 0.774690 +1257, 0.620091, 0.000000, 0.000000, 0.784530 +1258, 0.607687, 0.000000, 0.000000, 0.794176 +1259, 0.595134, 0.000000, 0.000000, 0.803627 +1260, 0.582433, 0.000000, 0.000000, 0.812878 +1261, 0.569589, 0.000000, 0.000000, 0.821930 +1262, 0.556604, 0.000000, 0.000000, 0.830778 +1263, 0.543482, 0.000000, 0.000000, 0.839421 +1264, 0.530225, 0.000000, 0.000000, 0.847857 +1265, 0.516838, 0.000000, 0.000000, 0.856083 +1266, 0.503323, 0.000000, 0.000000, 0.864099 +1267, 0.489683, 0.000000, 0.000000, 0.871900 +1268, 0.475923, 0.000000, 0.000000, 0.879487 +1269, 0.462045, 0.000000, 0.000000, 0.886856 +1270, 0.448054, 0.000000, 0.000000, 0.894007 +1271, 0.433951, 0.000000, 0.000000, 0.900936 +1272, 0.419742, 0.000000, 0.000000, 0.907644 +1273, 0.405428, 0.000000, 0.000000, 0.914127 +1274, 0.391015, 0.000000, 0.000000, 0.920384 +1275, 0.376505, 0.000000, 0.000000, 0.926415 +1276, 0.361902, 0.000000, 0.000000, 0.932216 +1277, 0.347210, 0.000000, 0.000000, 0.937787 +1278, 0.332432, 0.000000, 0.000000, 0.943127 +1279, 0.317572, 0.000000, 0.000000, 0.948234 +1280, 0.302634, 0.000000, 0.000000, 0.953107 +1281, 0.287621, 0.000000, 0.000000, 0.957744 +1282, 0.272537, 0.000000, 0.000000, 0.962145 +1283, 0.257385, 0.000000, 0.000000, 0.966309 +1284, 0.242170, 0.000000, 0.000000, 0.970234 +1285, 0.226896, 0.000000, 0.000000, 0.973919 +1286, 0.211565, 0.000000, 0.000000, 0.977364 +1287, 0.196182, 0.000000, 0.000000, 0.980568 +1288, 0.180750, 0.000000, 0.000000, 0.983529 +1289, 0.165274, 0.000000, 0.000000, 0.986248 +1290, 0.149757, 0.000000, 0.000000, 0.988723 +1291, 0.134204, 0.000000, 0.000000, 0.990954 +1292, 0.118617, 0.000000, 0.000000, 0.992940 +1293, 0.103000, 0.000000, 0.000000, 0.994681 +1294, 0.087359, 0.000000, 0.000000, 0.996177 +1295, 0.071695, 0.000000, 0.000000, 0.997427 +1296, 0.056014, 0.000000, 0.000000, 0.998430 +1297, 0.040320, 0.000000, 0.000000, 0.999187 +1298, 0.024615, 0.000000, 0.000000, 0.999697 +1299, 0.008904, 0.000000, 0.000000, 0.999960 +1300, -0.006809, -0.000000, 0.000000, 0.999977 +1301, -0.022520, -0.000000, 0.000000, 0.999746 +1302, -0.038226, -0.000000, 0.000000, 0.999269 +1303, -0.053922, -0.000000, 0.000000, 0.998545 +1304, -0.069606, -0.000000, 0.000000, 0.997575 +1305, -0.085271, -0.000000, 0.000000, 0.996358 +1306, -0.100916, -0.000000, 0.000000, 0.994895 +1307, -0.116536, -0.000000, 0.000000, 0.993186 +1308, -0.132127, -0.000000, 0.000000, 0.991233 +1309, -0.147686, -0.000000, 0.000000, 0.989034 +1310, -0.163208, -0.000000, 0.000000, 0.986592 +1311, -0.178689, -0.000000, 0.000000, 0.983906 +1312, -0.194127, -0.000000, 0.000000, 0.980976 +1313, -0.209517, -0.000000, 0.000000, 0.977805 +1314, -0.224855, -0.000000, 0.000000, 0.974392 +1315, -0.240137, -0.000000, 0.000000, 0.970739 +1316, -0.255360, -0.000000, 0.000000, 0.966846 +1317, -0.270520, -0.000000, 0.000000, 0.962714 +1318, -0.285614, -0.000000, 0.000000, 0.958345 +1319, -0.300636, -0.000000, 0.000000, 0.953739 +1320, -0.315585, -0.000000, 0.000000, 0.948897 +1321, -0.330456, -0.000000, 0.000000, 0.943822 +1322, -0.345245, -0.000000, 0.000000, 0.938513 +1323, -0.359948, -0.000000, 0.000000, 0.932972 +1324, -0.374563, -0.000000, 0.000000, 0.927201 +1325, -0.389086, -0.000000, 0.000000, 0.921201 +1326, -0.403512, -0.000000, 0.000000, 0.914974 +1327, -0.417839, -0.000000, 0.000000, 0.908521 +1328, -0.432063, -0.000000, 0.000000, 0.901844 +1329, -0.446180, -0.000000, 0.000000, 0.894943 +1330, -0.460186, -0.000000, 0.000000, 0.887822 +1331, -0.474079, -0.000000, 0.000000, 0.880482 +1332, -0.487856, -0.000000, 0.000000, 0.872924 +1333, -0.501511, -0.000000, 0.000000, 0.865151 +1334, -0.515043, -0.000000, 0.000000, 0.857164 +1335, -0.528448, -0.000000, 0.000000, 0.848966 +1336, -0.541722, -0.000000, 0.000000, 0.840558 +1337, -0.554862, -0.000000, 0.000000, 0.831942 +1338, -0.567866, -0.000000, 0.000000, 0.823121 +1339, -0.580729, -0.000000, 0.000000, 0.814097 +1340, -0.593449, -0.000000, 0.000000, 0.804872 +1341, -0.606022, -0.000000, 0.000000, 0.795448 +1342, -0.618446, -0.000000, 0.000000, 0.785827 +1343, -0.630717, -0.000000, 0.000000, 0.776013 +1344, -0.642832, -0.000000, 0.000000, 0.766007 +1345, -0.654789, -0.000000, 0.000000, 0.755812 +1346, -0.666584, -0.000000, 0.000000, 0.745430 +1347, -0.678214, -0.000000, 0.000000, 0.734864 +1348, -0.689677, -0.000000, 0.000000, 0.724117 +1349, -0.700969, -0.000000, 0.000000, 0.713191 +1350, -0.712089, -0.000000, 0.000000, 0.702089 +1351, -0.723033, -0.000000, 0.000000, 0.690814 +1352, -0.733798, -0.000000, 0.000000, 0.679368 +1353, -0.744382, -0.000000, 0.000000, 0.667754 +1354, -0.754782, -0.000000, 0.000000, 0.655976 +1355, -0.764996, -0.000000, 0.000000, 0.644035 +1356, -0.775021, -0.000000, 0.000000, 0.631935 +1357, -0.784855, -0.000000, 0.000000, 0.619680 +1358, -0.794494, -0.000000, 0.000000, 0.607271 +1359, -0.803938, -0.000000, 0.000000, 0.594713 +1360, -0.813183, -0.000000, 0.000000, 0.582008 +1361, -0.822228, -0.000000, 0.000000, 0.569158 +1362, -0.831069, -0.000000, 0.000000, 0.556169 +1363, -0.839706, -0.000000, 0.000000, 0.543042 +1364, -0.848134, -0.000000, 0.000000, 0.529781 +1365, -0.856354, -0.000000, 0.000000, 0.516389 +1366, -0.864362, -0.000000, 0.000000, 0.502870 +1367, -0.872157, -0.000000, 0.000000, 0.489227 +1368, -0.879736, -0.000000, 0.000000, 0.475462 +1369, -0.887098, -0.000000, 0.000000, 0.461581 +1370, -0.894241, -0.000000, 0.000000, 0.447585 +1371, -0.901164, -0.000000, 0.000000, 0.433479 +1372, -0.907863, -0.000000, 0.000000, 0.419266 +1373, -0.914339, -0.000000, 0.000000, 0.404950 +1374, -0.920589, -0.000000, 0.000000, 0.390533 +1375, -0.926612, -0.000000, 0.000000, 0.376020 +1376, -0.932405, -0.000000, 0.000000, 0.361414 +1377, -0.937969, -0.000000, 0.000000, 0.346719 +1378, -0.943301, -0.000000, 0.000000, 0.331938 +1379, -0.948400, -0.000000, 0.000000, 0.317076 +1380, -0.953265, -0.000000, 0.000000, 0.302135 +1381, -0.957895, -0.000000, 0.000000, 0.287119 +1382, -0.962288, -0.000000, 0.000000, 0.272033 +1383, -0.966444, -0.000000, 0.000000, 0.256879 +1384, -0.970360, -0.000000, 0.000000, 0.241662 +1385, -0.974038, -0.000000, 0.000000, 0.226385 +1386, -0.977475, -0.000000, 0.000000, 0.211053 +1387, -0.980670, -0.000000, 0.000000, 0.195668 +1388, -0.983624, -0.000000, 0.000000, 0.180235 +1389, -0.986334, -0.000000, 0.000000, 0.164758 +1390, -0.988801, -0.000000, 0.000000, 0.149240 +1391, -0.991024, -0.000000, 0.000000, 0.133685 +1392, -0.993002, -0.000000, 0.000000, 0.118097 +1393, -0.994735, -0.000000, 0.000000, 0.102479 +1394, -0.996223, -0.000000, 0.000000, 0.086837 +1395, -0.997464, -0.000000, 0.000000, 0.071173 +1396, -0.998459, -0.000000, 0.000000, 0.055491 +1397, -0.999208, -0.000000, 0.000000, 0.039796 +1398, -0.999710, -0.000000, 0.000000, 0.024091 +1399, -0.999965, -0.000000, 0.000000, 0.008380 +1400, -0.999973, 0.000000, -0.000000, -0.007333 +1401, -0.999734, 0.000000, -0.000000, -0.023044 +1402, -0.999249, 0.000000, -0.000000, -0.038750 +1403, -0.998517, 0.000000, -0.000000, -0.054445 +1404, -0.997538, 0.000000, -0.000000, -0.070128 +1405, -0.996313, 0.000000, -0.000000, -0.085793 +1406, -0.994842, 0.000000, -0.000000, -0.101437 +1407, -0.993125, 0.000000, -0.000000, -0.117056 +1408, -0.991163, 0.000000, -0.000000, -0.132646 +1409, -0.988957, 0.000000, -0.000000, -0.148204 +1410, -0.986506, 0.000000, -0.000000, -0.163724 +1411, -0.983812, 0.000000, -0.000000, -0.179205 +1412, -0.980875, 0.000000, -0.000000, -0.194641 +1413, -0.977695, 0.000000, -0.000000, -0.210029 +1414, -0.974274, 0.000000, -0.000000, -0.225365 +1415, -0.970613, 0.000000, -0.000000, -0.240646 +1416, -0.966712, 0.000000, -0.000000, -0.255867 +1417, -0.962572, 0.000000, -0.000000, -0.271025 +1418, -0.958195, 0.000000, -0.000000, -0.286116 +1419, -0.953581, 0.000000, -0.000000, -0.301136 +1420, -0.948732, 0.000000, -0.000000, -0.316082 +1421, -0.943648, 0.000000, -0.000000, -0.330950 +1422, -0.938332, 0.000000, -0.000000, -0.345736 +1423, -0.932784, 0.000000, -0.000000, -0.360437 +1424, -0.927005, 0.000000, -0.000000, -0.375049 +1425, -0.920998, 0.000000, -0.000000, -0.389568 +1426, -0.914763, 0.000000, -0.000000, -0.403991 +1427, -0.908302, 0.000000, -0.000000, -0.418315 +1428, -0.901617, 0.000000, -0.000000, -0.432535 +1429, -0.894710, 0.000000, -0.000000, -0.446648 +1430, -0.887581, 0.000000, -0.000000, -0.460651 +1431, -0.880234, 0.000000, -0.000000, -0.474541 +1432, -0.872669, 0.000000, -0.000000, -0.488313 +1433, -0.864888, 0.000000, -0.000000, -0.501964 +1434, -0.856894, 0.000000, -0.000000, -0.515492 +1435, -0.848689, 0.000000, -0.000000, -0.528892 +1436, -0.840274, 0.000000, -0.000000, -0.542162 +1437, -0.831651, 0.000000, -0.000000, -0.555298 +1438, -0.822824, 0.000000, -0.000000, -0.568297 +1439, -0.813793, 0.000000, -0.000000, -0.581155 +1440, -0.804561, 0.000000, -0.000000, -0.593870 +1441, -0.795130, 0.000000, -0.000000, -0.606439 +1442, -0.785503, 0.000000, -0.000000, -0.618857 +1443, -0.775683, 0.000000, -0.000000, -0.631123 +1444, -0.765670, 0.000000, -0.000000, -0.643233 +1445, -0.755469, 0.000000, -0.000000, -0.655185 +1446, -0.745081, 0.000000, -0.000000, -0.666974 +1447, -0.734509, 0.000000, -0.000000, -0.678599 +1448, -0.723756, 0.000000, -0.000000, -0.690056 +1449, -0.712824, 0.000000, -0.000000, -0.701343 +1450, -0.701716, 0.000000, -0.000000, -0.712457 +1451, -0.690435, 0.000000, -0.000000, -0.723394 +1452, -0.678983, 0.000000, -0.000000, -0.734154 +1453, -0.667364, 0.000000, -0.000000, -0.744732 +1454, -0.655580, 0.000000, -0.000000, -0.755126 +1455, -0.643634, 0.000000, -0.000000, -0.765333 +1456, -0.631529, 0.000000, -0.000000, -0.775352 +1457, -0.619269, 0.000000, -0.000000, -0.785179 +1458, -0.606855, 0.000000, -0.000000, -0.794812 +1459, -0.594292, 0.000000, -0.000000, -0.804250 +1460, -0.581581, 0.000000, -0.000000, -0.813488 +1461, -0.568728, 0.000000, -0.000000, -0.822526 +1462, -0.555734, 0.000000, -0.000000, -0.831360 +1463, -0.542602, 0.000000, -0.000000, -0.839990 +1464, -0.529337, 0.000000, -0.000000, -0.848412 +1465, -0.515941, 0.000000, -0.000000, -0.856624 +1466, -0.502417, 0.000000, -0.000000, -0.864625 +1467, -0.488770, 0.000000, -0.000000, -0.872413 +1468, -0.475002, 0.000000, -0.000000, -0.879985 +1469, -0.461116, 0.000000, -0.000000, -0.887340 +1470, -0.447117, 0.000000, -0.000000, -0.894476 +1471, -0.433007, 0.000000, -0.000000, -0.901390 +1472, -0.418791, 0.000000, -0.000000, -0.908083 +1473, -0.404471, 0.000000, -0.000000, -0.914551 +1474, -0.390051, 0.000000, -0.000000, -0.920793 +1475, -0.375535, 0.000000, -0.000000, -0.926808 +1476, -0.360926, 0.000000, -0.000000, -0.932595 +1477, -0.346228, 0.000000, -0.000000, -0.938151 +1478, -0.331444, 0.000000, -0.000000, -0.943475 +1479, -0.316579, 0.000000, -0.000000, -0.948566 +1480, -0.301635, 0.000000, -0.000000, -0.953423 +1481, -0.286617, 0.000000, -0.000000, -0.958045 +1482, -0.271529, 0.000000, -0.000000, -0.962430 +1483, -0.256373, 0.000000, -0.000000, -0.966578 +1484, -0.241154, 0.000000, -0.000000, -0.970487 +1485, -0.225875, 0.000000, -0.000000, -0.974156 +1486, -0.210541, 0.000000, -0.000000, -0.977585 +1487, -0.195155, 0.000000, -0.000000, -0.980773 +1488, -0.179720, 0.000000, -0.000000, -0.983718 +1489, -0.164241, 0.000000, -0.000000, -0.986420 +1490, -0.148722, 0.000000, -0.000000, -0.988879 +1491, -0.133165, 0.000000, -0.000000, -0.991094 +1492, -0.117576, 0.000000, -0.000000, -0.993064 +1493, -0.101958, 0.000000, -0.000000, -0.994789 +1494, -0.086315, 0.000000, -0.000000, -0.996268 +1495, -0.070650, 0.000000, -0.000000, -0.997501 +1496, -0.054968, 0.000000, -0.000000, -0.998488 +1497, -0.039273, 0.000000, -0.000000, -0.999229 +1498, -0.023568, 0.000000, -0.000000, -0.999722 +1499, -0.007857, 0.000000, -0.000000, -0.999969 +1500, 0.007857, 0.000000, 0.000000, -0.999969 +1501, 0.023568, 0.000000, 0.000000, -0.999722 +1502, 0.039273, 0.000000, 0.000000, -0.999229 +1503, 0.054968, 0.000000, 0.000000, -0.998488 +1504, 0.070650, 0.000000, 0.000000, -0.997501 +1505, 0.086315, 0.000000, 0.000000, -0.996268 +1506, 0.101958, 0.000000, 0.000000, -0.994789 +1507, 0.117576, 0.000000, 0.000000, -0.993064 +1508, 0.133165, 0.000000, 0.000000, -0.991094 +1509, 0.148722, 0.000000, 0.000000, -0.988879 +1510, 0.164241, 0.000000, 0.000000, -0.986420 +1511, 0.179720, 0.000000, 0.000000, -0.983718 +1512, 0.195155, 0.000000, 0.000000, -0.980773 +1513, 0.210541, 0.000000, 0.000000, -0.977585 +1514, 0.225875, 0.000000, 0.000000, -0.974156 +1515, 0.241154, 0.000000, 0.000000, -0.970487 +1516, 0.256373, 0.000000, 0.000000, -0.966578 +1517, 0.271529, 0.000000, 0.000000, -0.962430 +1518, 0.286617, 0.000000, 0.000000, -0.958045 +1519, 0.301635, 0.000000, 0.000000, -0.953423 +1520, 0.316579, 0.000000, 0.000000, -0.948566 +1521, 0.331444, 0.000000, 0.000000, -0.943475 +1522, 0.346228, 0.000000, 0.000000, -0.938151 +1523, 0.360926, 0.000000, 0.000000, -0.932595 +1524, 0.375535, 0.000000, 0.000000, -0.926808 +1525, 0.390051, 0.000000, 0.000000, -0.920793 +1526, 0.404471, 0.000000, 0.000000, -0.914551 +1527, 0.418791, 0.000000, 0.000000, -0.908083 +1528, 0.433007, 0.000000, 0.000000, -0.901390 +1529, 0.447117, 0.000000, 0.000000, -0.894476 +1530, 0.461116, 0.000000, 0.000000, -0.887340 +1531, 0.475002, 0.000000, 0.000000, -0.879985 +1532, 0.488770, 0.000000, 0.000000, -0.872413 +1533, 0.502417, 0.000000, 0.000000, -0.864625 +1534, 0.515941, 0.000000, 0.000000, -0.856624 +1535, 0.529337, 0.000000, 0.000000, -0.848412 +1536, 0.542602, 0.000000, 0.000000, -0.839990 +1537, 0.555734, 0.000000, 0.000000, -0.831360 +1538, 0.568728, 0.000000, 0.000000, -0.822526 +1539, 0.581581, 0.000000, 0.000000, -0.813488 +1540, 0.594292, 0.000000, 0.000000, -0.804250 +1541, 0.606855, 0.000000, 0.000000, -0.794812 +1542, 0.619269, 0.000000, 0.000000, -0.785179 +1543, 0.631529, 0.000000, 0.000000, -0.775352 +1544, 0.643634, 0.000000, 0.000000, -0.765333 +1545, 0.655580, 0.000000, 0.000000, -0.755126 +1546, 0.667364, 0.000000, 0.000000, -0.744732 +1547, 0.678983, 0.000000, 0.000000, -0.734154 +1548, 0.690435, 0.000000, 0.000000, -0.723394 +1549, 0.701716, 0.000000, 0.000000, -0.712457 +1550, 0.712824, 0.000000, 0.000000, -0.701343 +1551, 0.723756, 0.000000, 0.000000, -0.690056 +1552, 0.734509, 0.000000, 0.000000, -0.678599 +1553, 0.745081, 0.000000, 0.000000, -0.666974 +1554, 0.755469, 0.000000, 0.000000, -0.655185 +1555, 0.765670, 0.000000, 0.000000, -0.643233 +1556, 0.775683, 0.000000, 0.000000, -0.631123 +1557, 0.785503, 0.000000, 0.000000, -0.618857 +1558, 0.795130, 0.000000, 0.000000, -0.606439 +1559, 0.804561, 0.000000, 0.000000, -0.593870 +1560, 0.813793, 0.000000, 0.000000, -0.581155 +1561, 0.822824, 0.000000, 0.000000, -0.568297 +1562, 0.831651, 0.000000, 0.000000, -0.555298 +1563, 0.840274, 0.000000, 0.000000, -0.542162 +1564, 0.848689, 0.000000, 0.000000, -0.528892 +1565, 0.856894, 0.000000, 0.000000, -0.515492 +1566, 0.864888, 0.000000, 0.000000, -0.501964 +1567, 0.872669, 0.000000, 0.000000, -0.488313 +1568, 0.880234, 0.000000, 0.000000, -0.474541 +1569, 0.887581, 0.000000, 0.000000, -0.460651 +1570, 0.894710, 0.000000, 0.000000, -0.446648 +1571, 0.901617, 0.000000, 0.000000, -0.432535 +1572, 0.908302, 0.000000, 0.000000, -0.418315 +1573, 0.914763, 0.000000, 0.000000, -0.403991 +1574, 0.920998, 0.000000, 0.000000, -0.389568 +1575, 0.927005, 0.000000, 0.000000, -0.375049 +1576, 0.932784, 0.000000, 0.000000, -0.360437 +1577, 0.938332, 0.000000, 0.000000, -0.345736 +1578, 0.943648, 0.000000, 0.000000, -0.330950 +1579, 0.948732, 0.000000, 0.000000, -0.316082 +1580, 0.953581, 0.000000, 0.000000, -0.301136 +1581, 0.958195, 0.000000, 0.000000, -0.286116 +1582, 0.962572, 0.000000, 0.000000, -0.271025 +1583, 0.966712, 0.000000, 0.000000, -0.255867 +1584, 0.970613, 0.000000, 0.000000, -0.240646 +1585, 0.974274, 0.000000, 0.000000, -0.225365 +1586, 0.977695, 0.000000, 0.000000, -0.210029 +1587, 0.980875, 0.000000, 0.000000, -0.194641 +1588, 0.983812, 0.000000, 0.000000, -0.179205 +1589, 0.986506, 0.000000, 0.000000, -0.163724 +1590, 0.988957, 0.000000, 0.000000, -0.148204 +1591, 0.991163, 0.000000, 0.000000, -0.132646 +1592, 0.993125, 0.000000, 0.000000, -0.117056 +1593, 0.994842, 0.000000, 0.000000, -0.101437 +1594, 0.996313, 0.000000, 0.000000, -0.085793 +1595, 0.997538, 0.000000, 0.000000, -0.070128 +1596, 0.998517, 0.000000, 0.000000, -0.054445 +1597, 0.999249, 0.000000, 0.000000, -0.038750 +1598, 0.999734, 0.000000, 0.000000, -0.023044 +1599, 0.999973, 0.000000, 0.000000, -0.007333 +1600, 0.999965, 0.000000, 0.000000, 0.008380 +1601, 0.999710, 0.000000, 0.000000, 0.024091 +1602, 0.999208, 0.000000, 0.000000, 0.039796 +1603, 0.998459, 0.000000, 0.000000, 0.055491 +1604, 0.997464, 0.000000, 0.000000, 0.071173 +1605, 0.996223, 0.000000, 0.000000, 0.086837 +1606, 0.994735, 0.000000, 0.000000, 0.102479 +1607, 0.993002, 0.000000, 0.000000, 0.118097 +1608, 0.991024, 0.000000, 0.000000, 0.133685 +1609, 0.988801, 0.000000, 0.000000, 0.149240 +1610, 0.986334, 0.000000, 0.000000, 0.164758 +1611, 0.983624, 0.000000, 0.000000, 0.180235 +1612, 0.980670, 0.000000, 0.000000, 0.195668 +1613, 0.977475, 0.000000, 0.000000, 0.211053 +1614, 0.974038, 0.000000, 0.000000, 0.226385 +1615, 0.970360, 0.000000, 0.000000, 0.241662 +1616, 0.966444, 0.000000, 0.000000, 0.256879 +1617, 0.962288, 0.000000, 0.000000, 0.272033 +1618, 0.957895, 0.000000, 0.000000, 0.287119 +1619, 0.953265, 0.000000, 0.000000, 0.302135 +1620, 0.948400, 0.000000, 0.000000, 0.317076 +1621, 0.943301, 0.000000, 0.000000, 0.331938 +1622, 0.937969, 0.000000, 0.000000, 0.346719 +1623, 0.932405, 0.000000, 0.000000, 0.361414 +1624, 0.926612, 0.000000, 0.000000, 0.376020 +1625, 0.920589, 0.000000, 0.000000, 0.390533 +1626, 0.914339, 0.000000, 0.000000, 0.404950 +1627, 0.907863, 0.000000, 0.000000, 0.419266 +1628, 0.901164, 0.000000, 0.000000, 0.433479 +1629, 0.894241, 0.000000, 0.000000, 0.447585 +1630, 0.887098, 0.000000, 0.000000, 0.461581 +1631, 0.879736, 0.000000, 0.000000, 0.475462 +1632, 0.872157, 0.000000, 0.000000, 0.489227 +1633, 0.864362, 0.000000, 0.000000, 0.502870 +1634, 0.856354, 0.000000, 0.000000, 0.516389 +1635, 0.848134, 0.000000, 0.000000, 0.529781 +1636, 0.839706, 0.000000, 0.000000, 0.543042 +1637, 0.831069, 0.000000, 0.000000, 0.556169 +1638, 0.822228, 0.000000, 0.000000, 0.569158 +1639, 0.813183, 0.000000, 0.000000, 0.582008 +1640, 0.803938, 0.000000, 0.000000, 0.594713 +1641, 0.794494, 0.000000, 0.000000, 0.607271 +1642, 0.784855, 0.000000, 0.000000, 0.619680 +1643, 0.775021, 0.000000, 0.000000, 0.631935 +1644, 0.764996, 0.000000, 0.000000, 0.644035 +1645, 0.754782, 0.000000, 0.000000, 0.655976 +1646, 0.744382, 0.000000, 0.000000, 0.667754 +1647, 0.733798, 0.000000, 0.000000, 0.679368 +1648, 0.723033, 0.000000, 0.000000, 0.690814 +1649, 0.712089, 0.000000, 0.000000, 0.702089 +1650, 0.700969, 0.000000, 0.000000, 0.713191 +1651, 0.689677, 0.000000, 0.000000, 0.724117 +1652, 0.678214, 0.000000, 0.000000, 0.734864 +1653, 0.666584, 0.000000, 0.000000, 0.745430 +1654, 0.654789, 0.000000, 0.000000, 0.755812 +1655, 0.642832, 0.000000, 0.000000, 0.766007 +1656, 0.630717, 0.000000, 0.000000, 0.776013 +1657, 0.618446, 0.000000, 0.000000, 0.785827 +1658, 0.606022, 0.000000, 0.000000, 0.795448 +1659, 0.593449, 0.000000, 0.000000, 0.804872 +1660, 0.580729, 0.000000, 0.000000, 0.814097 +1661, 0.567866, 0.000000, 0.000000, 0.823121 +1662, 0.554862, 0.000000, 0.000000, 0.831942 +1663, 0.541722, 0.000000, 0.000000, 0.840558 +1664, 0.528448, 0.000000, 0.000000, 0.848966 +1665, 0.515043, 0.000000, 0.000000, 0.857164 +1666, 0.501511, 0.000000, 0.000000, 0.865151 +1667, 0.487856, 0.000000, 0.000000, 0.872924 +1668, 0.474079, 0.000000, 0.000000, 0.880482 +1669, 0.460186, 0.000000, 0.000000, 0.887822 +1670, 0.446180, 0.000000, 0.000000, 0.894943 +1671, 0.432063, 0.000000, 0.000000, 0.901844 +1672, 0.417839, 0.000000, 0.000000, 0.908521 +1673, 0.403512, 0.000000, 0.000000, 0.914974 +1674, 0.389086, 0.000000, 0.000000, 0.921201 +1675, 0.374563, 0.000000, 0.000000, 0.927201 +1676, 0.359948, 0.000000, 0.000000, 0.932972 +1677, 0.345245, 0.000000, 0.000000, 0.938513 +1678, 0.330456, 0.000000, 0.000000, 0.943822 +1679, 0.315585, 0.000000, 0.000000, 0.948897 +1680, 0.300636, 0.000000, 0.000000, 0.953739 +1681, 0.285614, 0.000000, 0.000000, 0.958345 +1682, 0.270520, 0.000000, 0.000000, 0.962714 +1683, 0.255360, 0.000000, 0.000000, 0.966846 +1684, 0.240137, 0.000000, 0.000000, 0.970739 +1685, 0.224855, 0.000000, 0.000000, 0.974392 +1686, 0.209517, 0.000000, 0.000000, 0.977805 +1687, 0.194127, 0.000000, 0.000000, 0.980976 +1688, 0.178689, 0.000000, 0.000000, 0.983906 +1689, 0.163208, 0.000000, 0.000000, 0.986592 +1690, 0.147686, 0.000000, 0.000000, 0.989034 +1691, 0.132127, 0.000000, 0.000000, 0.991233 +1692, 0.116536, 0.000000, 0.000000, 0.993186 +1693, 0.100916, 0.000000, 0.000000, 0.994895 +1694, 0.085271, 0.000000, 0.000000, 0.996358 +1695, 0.069606, 0.000000, 0.000000, 0.997575 +1696, 0.053922, 0.000000, 0.000000, 0.998545 +1697, 0.038226, 0.000000, 0.000000, 0.999269 +1698, 0.022520, 0.000000, 0.000000, 0.999746 +1699, 0.006809, 0.000000, 0.000000, 0.999977 +1700, -0.008904, -0.000000, 0.000000, 0.999960 +1701, -0.024615, -0.000000, 0.000000, 0.999697 +1702, -0.040320, -0.000000, 0.000000, 0.999187 +1703, -0.056014, -0.000000, 0.000000, 0.998430 +1704, -0.071695, -0.000000, 0.000000, 0.997427 +1705, -0.087359, -0.000000, 0.000000, 0.996177 +1706, -0.103000, -0.000000, 0.000000, 0.994681 +1707, -0.118617, -0.000000, 0.000000, 0.992940 +1708, -0.134204, -0.000000, 0.000000, 0.990954 +1709, -0.149757, -0.000000, 0.000000, 0.988723 +1710, -0.165274, -0.000000, 0.000000, 0.986248 +1711, -0.180750, -0.000000, 0.000000, 0.983529 +1712, -0.196182, -0.000000, 0.000000, 0.980568 +1713, -0.211565, -0.000000, 0.000000, 0.977364 +1714, -0.226896, -0.000000, 0.000000, 0.973919 +1715, -0.242170, -0.000000, 0.000000, 0.970234 +1716, -0.257385, -0.000000, 0.000000, 0.966309 +1717, -0.272537, -0.000000, 0.000000, 0.962145 +1718, -0.287621, -0.000000, 0.000000, 0.957744 +1719, -0.302634, -0.000000, 0.000000, 0.953107 +1720, -0.317572, -0.000000, 0.000000, 0.948234 +1721, -0.332432, -0.000000, 0.000000, 0.943127 +1722, -0.347210, -0.000000, 0.000000, 0.937787 +1723, -0.361902, -0.000000, 0.000000, 0.932216 +1724, -0.376505, -0.000000, 0.000000, 0.926415 +1725, -0.391015, -0.000000, 0.000000, 0.920384 +1726, -0.405428, -0.000000, 0.000000, 0.914127 +1727, -0.419742, -0.000000, 0.000000, 0.907644 +1728, -0.433951, -0.000000, 0.000000, 0.900936 +1729, -0.448054, -0.000000, 0.000000, 0.894007 +1730, -0.462045, -0.000000, 0.000000, 0.886856 +1731, -0.475923, -0.000000, 0.000000, 0.879487 +1732, -0.489683, -0.000000, 0.000000, 0.871900 +1733, -0.503323, -0.000000, 0.000000, 0.864099 +1734, -0.516838, -0.000000, 0.000000, 0.856083 +1735, -0.530225, -0.000000, 0.000000, 0.847857 +1736, -0.543482, -0.000000, 0.000000, 0.839421 +1737, -0.556604, -0.000000, 0.000000, 0.830778 +1738, -0.569589, -0.000000, 0.000000, 0.821930 +1739, -0.582433, -0.000000, 0.000000, 0.812878 +1740, -0.595134, -0.000000, 0.000000, 0.803627 +1741, -0.607687, -0.000000, 0.000000, 0.794176 +1742, -0.620091, -0.000000, 0.000000, 0.784530 +1743, -0.632341, -0.000000, 0.000000, 0.774690 +1744, -0.644436, -0.000000, 0.000000, 0.764659 +1745, -0.656371, -0.000000, 0.000000, 0.754438 +1746, -0.668144, -0.000000, 0.000000, 0.744032 +1747, -0.679752, -0.000000, 0.000000, 0.733442 +1748, -0.691192, -0.000000, 0.000000, 0.722671 +1749, -0.702462, -0.000000, 0.000000, 0.711721 +1750, -0.713558, -0.000000, 0.000000, 0.700596 +1751, -0.724478, -0.000000, 0.000000, 0.689297 +1752, -0.735220, -0.000000, 0.000000, 0.677829 +1753, -0.745779, -0.000000, 0.000000, 0.666193 +1754, -0.756155, -0.000000, 0.000000, 0.654393 +1755, -0.766344, -0.000000, 0.000000, 0.642431 +1756, -0.776343, -0.000000, 0.000000, 0.630310 +1757, -0.786151, -0.000000, 0.000000, 0.618034 +1758, -0.795765, -0.000000, 0.000000, 0.605605 +1759, -0.805182, -0.000000, 0.000000, 0.593027 +1760, -0.814401, -0.000000, 0.000000, 0.580303 +1761, -0.823418, -0.000000, 0.000000, 0.567435 +1762, -0.832233, -0.000000, 0.000000, 0.554427 +1763, -0.840841, -0.000000, 0.000000, 0.541282 +1764, -0.849243, -0.000000, 0.000000, 0.528003 +1765, -0.857434, -0.000000, 0.000000, 0.514594 +1766, -0.865414, -0.000000, 0.000000, 0.501058 +1767, -0.873180, -0.000000, 0.000000, 0.487398 +1768, -0.880730, -0.000000, 0.000000, 0.473618 +1769, -0.888063, -0.000000, 0.000000, 0.459721 +1770, -0.895177, -0.000000, 0.000000, 0.445711 +1771, -0.902070, -0.000000, 0.000000, 0.431590 +1772, -0.908740, -0.000000, 0.000000, 0.417363 +1773, -0.915185, -0.000000, 0.000000, 0.403033 +1774, -0.921405, -0.000000, 0.000000, 0.388603 +1775, -0.927397, -0.000000, 0.000000, 0.374078 +1776, -0.933161, -0.000000, 0.000000, 0.359460 +1777, -0.938693, -0.000000, 0.000000, 0.344753 +1778, -0.943994, -0.000000, 0.000000, 0.329961 +1779, -0.949062, -0.000000, 0.000000, 0.315088 +1780, -0.953896, -0.000000, 0.000000, 0.300137 +1781, -0.958494, -0.000000, 0.000000, 0.285112 +1782, -0.962856, -0.000000, 0.000000, 0.270016 +1783, -0.966980, -0.000000, 0.000000, 0.254854 +1784, -0.970865, -0.000000, 0.000000, 0.239629 +1785, -0.974510, -0.000000, 0.000000, 0.224344 +1786, -0.977915, -0.000000, 0.000000, 0.209005 +1787, -0.981078, -0.000000, 0.000000, 0.193613 +1788, -0.983999, -0.000000, 0.000000, 0.178174 +1789, -0.986677, -0.000000, 0.000000, 0.162691 +1790, -0.989112, -0.000000, 0.000000, 0.147168 +1791, -0.991302, -0.000000, 0.000000, 0.131608 +1792, -0.993247, -0.000000, 0.000000, 0.116016 +1793, -0.994948, -0.000000, 0.000000, 0.100395 +1794, -0.996402, -0.000000, 0.000000, 0.084750 +1795, -0.997611, -0.000000, 0.000000, 0.069083 +1796, -0.998573, -0.000000, 0.000000, 0.053399 +1797, -0.999289, -0.000000, 0.000000, 0.037703 +1798, -0.999758, -0.000000, 0.000000, 0.021997 +1799, -0.999980, -0.000000, 0.000000, 0.006285 +1800, -0.999956, 0.000000, -0.000000, -0.009428 +1801, -0.999684, 0.000000, -0.000000, -0.025138 +1802, -0.999166, 0.000000, -0.000000, -0.040843 +1803, -0.998400, 0.000000, -0.000000, -0.056537 +1804, -0.997389, 0.000000, -0.000000, -0.072218 +1805, -0.996131, 0.000000, -0.000000, -0.087880 +1806, -0.994627, 0.000000, -0.000000, -0.103521 +1807, -0.992878, 0.000000, -0.000000, -0.119137 +1808, -0.990883, 0.000000, -0.000000, -0.134723 +1809, -0.988644, 0.000000, -0.000000, -0.150275 +1810, -0.986161, 0.000000, -0.000000, -0.165791 +1811, -0.983434, 0.000000, -0.000000, -0.181266 +1812, -0.980465, 0.000000, -0.000000, -0.196695 +1813, -0.977253, 0.000000, -0.000000, -0.212077 +1814, -0.973800, 0.000000, -0.000000, -0.227406 +1815, -0.970107, 0.000000, -0.000000, -0.242678 +1816, -0.966174, 0.000000, -0.000000, -0.257891 +1817, -0.962003, 0.000000, -0.000000, -0.273041 +1818, -0.957594, 0.000000, -0.000000, -0.288122 +1819, -0.952948, 0.000000, -0.000000, -0.303133 +1820, -0.948068, 0.000000, -0.000000, -0.318069 +1821, -0.942953, 0.000000, -0.000000, -0.332926 +1822, -0.937605, 0.000000, -0.000000, -0.347701 +1823, -0.932026, 0.000000, -0.000000, -0.362391 +1824, -0.926217, 0.000000, -0.000000, -0.376990 +1825, -0.920179, 0.000000, -0.000000, -0.391497 +1826, -0.913914, 0.000000, -0.000000, -0.405907 +1827, -0.907424, 0.000000, -0.000000, -0.420217 +1828, -0.900709, 0.000000, -0.000000, -0.434423 +1829, -0.893772, 0.000000, -0.000000, -0.448522 +1830, -0.886614, 0.000000, -0.000000, -0.462510 +1831, -0.879237, 0.000000, -0.000000, -0.476384 +1832, -0.871644, 0.000000, -0.000000, -0.490140 +1833, -0.863835, 0.000000, -0.000000, -0.503775 +1834, -0.855813, 0.000000, -0.000000, -0.517286 +1835, -0.847579, 0.000000, -0.000000, -0.530669 +1836, -0.839136, 0.000000, -0.000000, -0.543921 +1837, -0.830486, 0.000000, -0.000000, -0.557039 +1838, -0.821631, 0.000000, -0.000000, -0.570019 +1839, -0.812573, 0.000000, -0.000000, -0.582859 +1840, -0.803315, 0.000000, -0.000000, -0.595555 +1841, -0.793858, 0.000000, -0.000000, -0.608103 +1842, -0.784205, 0.000000, -0.000000, -0.620502 +1843, -0.774359, 0.000000, -0.000000, -0.632747 +1844, -0.764321, 0.000000, -0.000000, -0.644836 +1845, -0.754095, 0.000000, -0.000000, -0.656766 +1846, -0.743682, 0.000000, -0.000000, -0.668534 +1847, -0.733086, 0.000000, -0.000000, -0.680136 +1848, -0.722309, 0.000000, -0.000000, -0.691571 +1849, -0.711353, 0.000000, -0.000000, -0.702835 +1850, -0.700222, 0.000000, -0.000000, -0.713925 +1851, -0.688918, 0.000000, -0.000000, -0.724839 +1852, -0.677444, 0.000000, -0.000000, -0.735575 +1853, -0.665802, 0.000000, -0.000000, -0.746128 +1854, -0.653997, 0.000000, -0.000000, -0.756497 +1855, -0.642029, 0.000000, -0.000000, -0.766680 +1856, -0.629904, 0.000000, -0.000000, -0.776673 +1857, -0.617622, 0.000000, -0.000000, -0.786475 +1858, -0.605189, 0.000000, -0.000000, -0.796082 +1859, -0.592605, 0.000000, -0.000000, -0.805493 +1860, -0.579876, 0.000000, -0.000000, -0.814705 +1861, -0.567003, 0.000000, -0.000000, -0.823716 +1862, -0.553991, 0.000000, -0.000000, -0.832523 +1863, -0.540841, 0.000000, -0.000000, -0.841125 +1864, -0.527558, 0.000000, -0.000000, -0.849519 +1865, -0.514145, 0.000000, -0.000000, -0.857703 +1866, -0.500605, 0.000000, -0.000000, -0.865676 +1867, -0.486941, 0.000000, -0.000000, -0.873435 +1868, -0.473157, 0.000000, -0.000000, -0.880978 +1869, -0.459256, 0.000000, -0.000000, -0.888304 +1870, -0.445242, 0.000000, -0.000000, -0.895410 +1871, -0.431118, 0.000000, -0.000000, -0.902296 +1872, -0.416887, 0.000000, -0.000000, -0.908958 +1873, -0.402554, 0.000000, -0.000000, -0.915396 +1874, -0.388121, 0.000000, -0.000000, -0.921609 +1875, -0.373592, 0.000000, -0.000000, -0.927593 +1876, -0.358971, 0.000000, -0.000000, -0.933349 +1877, -0.344261, 0.000000, -0.000000, -0.938874 +1878, -0.329467, 0.000000, -0.000000, -0.944167 +1879, -0.314591, 0.000000, -0.000000, -0.949227 +1880, -0.299637, 0.000000, -0.000000, -0.954053 +1881, -0.284610, 0.000000, -0.000000, -0.958644 +1882, -0.269512, 0.000000, -0.000000, -0.962997 +1883, -0.254347, 0.000000, -0.000000, -0.967113 +1884, -0.239120, 0.000000, -0.000000, -0.970990 +1885, -0.223834, 0.000000, -0.000000, -0.974627 +1886, -0.208492, 0.000000, -0.000000, -0.978024 +1887, -0.193099, 0.000000, -0.000000, -0.981179 +1888, -0.177659, 0.000000, -0.000000, -0.984092 +1889, -0.162174, 0.000000, -0.000000, -0.986762 +1890, -0.146650, 0.000000, -0.000000, -0.989189 +1891, -0.131089, 0.000000, -0.000000, -0.991371 +1892, -0.115496, 0.000000, -0.000000, -0.993308 +1893, -0.099874, 0.000000, -0.000000, -0.995000 +1894, -0.084228, 0.000000, -0.000000, -0.996447 +1895, -0.068560, 0.000000, -0.000000, -0.997647 +1896, -0.052876, 0.000000, -0.000000, -0.998601 +1897, -0.037179, 0.000000, -0.000000, -0.999309 +1898, -0.021473, 0.000000, -0.000000, -0.999769 +1899, -0.005761, 0.000000, -0.000000, -0.999983 +1900, 0.009952, 0.000000, 0.000000, -0.999950 +1901, 0.025662, 0.000000, 0.000000, -0.999671 +1902, 0.041366, 0.000000, 0.000000, -0.999144 +1903, 0.057060, 0.000000, 0.000000, -0.998371 +1904, 0.072740, 0.000000, 0.000000, -0.997351 +1905, 0.088402, 0.000000, 0.000000, -0.996085 +1906, 0.104042, 0.000000, 0.000000, -0.994573 +1907, 0.119657, 0.000000, 0.000000, -0.992815 +1908, 0.135242, 0.000000, 0.000000, -0.990813 +1909, 0.150793, 0.000000, 0.000000, -0.988565 +1910, 0.166307, 0.000000, 0.000000, -0.986074 +1911, 0.181781, 0.000000, 0.000000, -0.983339 +1912, 0.197209, 0.000000, 0.000000, -0.980361 +1913, 0.212589, 0.000000, 0.000000, -0.977142 +1914, 0.227916, 0.000000, 0.000000, -0.973681 +1915, 0.243187, 0.000000, 0.000000, -0.969980 +1916, 0.258397, 0.000000, 0.000000, -0.966039 +1917, 0.273544, 0.000000, 0.000000, -0.961859 +1918, 0.288624, 0.000000, 0.000000, -0.957443 +1919, 0.303632, 0.000000, 0.000000, -0.952789 +1920, 0.318565, 0.000000, 0.000000, -0.947901 +1921, 0.333420, 0.000000, 0.000000, -0.942778 +1922, 0.348192, 0.000000, 0.000000, -0.937423 +1923, 0.362879, 0.000000, 0.000000, -0.931836 +1924, 0.377475, 0.000000, 0.000000, -0.926020 +1925, 0.391979, 0.000000, 0.000000, -0.919974 +1926, 0.406386, 0.000000, 0.000000, -0.913702 +1927, 0.420692, 0.000000, 0.000000, -0.907203 +1928, 0.434895, 0.000000, 0.000000, -0.900481 +1929, 0.448990, 0.000000, 0.000000, -0.893537 +1930, 0.462974, 0.000000, 0.000000, -0.886372 +1931, 0.476844, 0.000000, 0.000000, -0.878988 +1932, 0.490596, 0.000000, 0.000000, -0.871387 +1933, 0.504228, 0.000000, 0.000000, -0.863571 +1934, 0.517734, 0.000000, 0.000000, -0.855541 +1935, 0.531113, 0.000000, 0.000000, -0.847301 +1936, 0.544361, 0.000000, 0.000000, -0.838851 +1937, 0.557474, 0.000000, 0.000000, -0.830194 +1938, 0.570450, 0.000000, 0.000000, -0.821333 +1939, 0.583285, 0.000000, 0.000000, -0.812268 +1940, 0.595975, 0.000000, 0.000000, -0.803003 +1941, 0.608519, 0.000000, 0.000000, -0.793539 +1942, 0.620912, 0.000000, 0.000000, -0.783880 +1943, 0.633153, 0.000000, 0.000000, -0.774027 +1944, 0.645236, 0.000000, 0.000000, -0.763983 +1945, 0.657161, 0.000000, 0.000000, -0.753750 +1946, 0.668923, 0.000000, 0.000000, -0.743332 +1947, 0.680520, 0.000000, 0.000000, -0.732729 +1948, 0.691949, 0.000000, 0.000000, -0.721946 +1949, 0.703207, 0.000000, 0.000000, -0.710985 +1950, 0.714292, 0.000000, 0.000000, -0.699848 +1951, 0.725200, 0.000000, 0.000000, -0.688538 +1952, 0.735929, 0.000000, 0.000000, -0.677058 +1953, 0.746477, 0.000000, 0.000000, -0.665412 +1954, 0.756840, 0.000000, 0.000000, -0.653600 +1955, 0.767016, 0.000000, 0.000000, -0.641628 +1956, 0.777003, 0.000000, 0.000000, -0.629497 +1957, 0.786798, 0.000000, 0.000000, -0.617210 +1958, 0.796399, 0.000000, 0.000000, -0.604772 +1959, 0.805803, 0.000000, 0.000000, -0.592183 +1960, 0.815008, 0.000000, 0.000000, -0.579449 +1961, 0.824012, 0.000000, 0.000000, -0.566572 +1962, 0.832813, 0.000000, 0.000000, -0.553554 +1963, 0.841408, 0.000000, 0.000000, -0.540400 +1964, 0.849795, 0.000000, 0.000000, -0.527113 +1965, 0.857973, 0.000000, 0.000000, -0.513696 +1966, 0.865938, 0.000000, 0.000000, -0.500151 +1967, 0.873690, 0.000000, 0.000000, -0.486483 +1968, 0.881226, 0.000000, 0.000000, -0.472695 +1969, 0.888544, 0.000000, 0.000000, -0.458791 +1970, 0.895643, 0.000000, 0.000000, -0.444773 +1971, 0.902521, 0.000000, 0.000000, -0.430645 +1972, 0.909177, 0.000000, 0.000000, -0.416411 +1973, 0.915607, 0.000000, 0.000000, -0.402074 +1974, 0.921812, 0.000000, 0.000000, -0.387638 +1975, 0.927789, 0.000000, 0.000000, -0.373106 +1976, 0.933537, 0.000000, 0.000000, -0.358482 +1977, 0.939054, 0.000000, 0.000000, -0.343770 +1978, 0.944340, 0.000000, 0.000000, -0.328972 +1979, 0.949392, 0.000000, 0.000000, -0.314094 +1980, 0.954210, 0.000000, 0.000000, -0.299137 +1981, 0.958792, 0.000000, 0.000000, -0.284107 +1982, 0.963138, 0.000000, 0.000000, -0.269007 +1983, 0.967246, 0.000000, 0.000000, -0.253841 +1984, 0.971115, 0.000000, 0.000000, -0.238611 +1985, 0.974744, 0.000000, 0.000000, -0.223323 +1986, 0.978133, 0.000000, 0.000000, -0.207980 +1987, 0.981280, 0.000000, 0.000000, -0.192585 +1988, 0.984185, 0.000000, 0.000000, -0.177143 +1989, 0.986847, 0.000000, 0.000000, -0.161657 +1990, 0.989265, 0.000000, 0.000000, -0.146131 +1991, 0.991439, 0.000000, 0.000000, -0.130569 +1992, 0.993368, 0.000000, 0.000000, -0.114975 +1993, 0.995052, 0.000000, 0.000000, -0.099353 +1994, 0.996491, 0.000000, 0.000000, -0.083706 +1995, 0.997683, 0.000000, 0.000000, -0.068038 +1996, 0.998629, 0.000000, 0.000000, -0.052353 +1997, 0.999328, 0.000000, 0.000000, -0.036656 +1998, 0.999781, 0.000000, 0.000000, -0.020949 +1999, 0.999986, 0.000000, 0.000000, -0.005238 +2000, 0.999945, 0.000000, 0.000000, 0.010475 +2001, 0.999657, 0.000000, 0.000000, 0.026186 +2002, 0.999122, 0.000000, 0.000000, 0.041890 +2003, 0.998341, 0.000000, 0.000000, 0.057583 +2004, 0.997313, 0.000000, 0.000000, 0.073263 +2005, 0.996038, 0.000000, 0.000000, 0.088924 +2006, 0.994518, 0.000000, 0.000000, 0.104563 +2007, 0.992753, 0.000000, 0.000000, 0.120177 +2008, 0.990742, 0.000000, 0.000000, 0.135761 +2009, 0.988486, 0.000000, 0.000000, 0.151311 +2010, 0.985987, 0.000000, 0.000000, 0.166824 +2011, 0.983244, 0.000000, 0.000000, 0.182296 +2012, 0.980258, 0.000000, 0.000000, 0.197722 +2013, 0.977030, 0.000000, 0.000000, 0.213100 +2014, 0.973561, 0.000000, 0.000000, 0.228426 +2015, 0.969852, 0.000000, 0.000000, 0.243695 +2016, 0.965903, 0.000000, 0.000000, 0.258903 +2017, 0.961716, 0.000000, 0.000000, 0.274048 +2018, 0.957291, 0.000000, 0.000000, 0.289125 +2019, 0.952630, 0.000000, 0.000000, 0.304131 +2020, 0.947734, 0.000000, 0.000000, 0.319062 +2021, 0.942604, 0.000000, 0.000000, 0.333914 +2022, 0.937241, 0.000000, 0.000000, 0.348683 +2023, 0.931646, 0.000000, 0.000000, 0.363367 +2024, 0.925822, 0.000000, 0.000000, 0.377960 +2025, 0.919769, 0.000000, 0.000000, 0.392461 +2026, 0.913489, 0.000000, 0.000000, 0.406864 +2027, 0.906983, 0.000000, 0.000000, 0.421167 +2028, 0.900253, 0.000000, 0.000000, 0.435366 +2029, 0.893302, 0.000000, 0.000000, 0.449458 +2030, 0.886129, 0.000000, 0.000000, 0.463438 +2031, 0.878738, 0.000000, 0.000000, 0.477305 +2032, 0.871130, 0.000000, 0.000000, 0.491053 +2033, 0.863307, 0.000000, 0.000000, 0.504680 +2034, 0.855270, 0.000000, 0.000000, 0.518182 +2035, 0.847023, 0.000000, 0.000000, 0.531557 +2036, 0.838566, 0.000000, 0.000000, 0.544800 +2037, 0.829902, 0.000000, 0.000000, 0.557909 +2038, 0.821034, 0.000000, 0.000000, 0.570880 +2039, 0.811962, 0.000000, 0.000000, 0.583710 +2040, 0.802690, 0.000000, 0.000000, 0.596396 +2041, 0.793220, 0.000000, 0.000000, 0.608935 +2042, 0.783555, 0.000000, 0.000000, 0.621323 +2043, 0.773695, 0.000000, 0.000000, 0.633558 +2044, 0.763645, 0.000000, 0.000000, 0.645636 +2045, 0.753406, 0.000000, 0.000000, 0.657555 +2046, 0.742981, 0.000000, 0.000000, 0.669312 +2047, 0.732373, 0.000000, 0.000000, 0.680904 +2048, 0.721584, 0.000000, 0.000000, 0.692327 +2049, 0.710616, 0.000000, 0.000000, 0.703580 +2050, 0.699474, 0.000000, 0.000000, 0.714658 +2051, 0.688158, 0.000000, 0.000000, 0.725561 +2052, 0.676673, 0.000000, 0.000000, 0.736284 +2053, 0.665020, 0.000000, 0.000000, 0.746825 +2054, 0.653204, 0.000000, 0.000000, 0.757182 +2055, 0.641226, 0.000000, 0.000000, 0.767352 +2056, 0.629090, 0.000000, 0.000000, 0.777333 +2057, 0.616798, 0.000000, 0.000000, 0.787121 +2058, 0.604354, 0.000000, 0.000000, 0.796716 +2059, 0.591761, 0.000000, 0.000000, 0.806113 +2060, 0.579022, 0.000000, 0.000000, 0.815312 +2061, 0.566140, 0.000000, 0.000000, 0.824309 +2062, 0.553118, 0.000000, 0.000000, 0.833103 +2063, 0.539960, 0.000000, 0.000000, 0.841691 +2064, 0.526668, 0.000000, 0.000000, 0.850071 +2065, 0.513246, 0.000000, 0.000000, 0.858241 +2066, 0.499698, 0.000000, 0.000000, 0.866200 +2067, 0.486026, 0.000000, 0.000000, 0.873945 +2068, 0.472234, 0.000000, 0.000000, 0.881473 +2069, 0.458325, 0.000000, 0.000000, 0.888785 +2070, 0.444304, 0.000000, 0.000000, 0.895876 +2071, 0.430172, 0.000000, 0.000000, 0.902747 +2072, 0.415935, 0.000000, 0.000000, 0.909394 +2073, 0.401594, 0.000000, 0.000000, 0.915818 +2074, 0.387155, 0.000000, 0.000000, 0.922015 +2075, 0.372620, 0.000000, 0.000000, 0.927984 +2076, 0.357993, 0.000000, 0.000000, 0.933724 +2077, 0.343278, 0.000000, 0.000000, 0.939234 +2078, 0.328478, 0.000000, 0.000000, 0.944512 +2079, 0.313596, 0.000000, 0.000000, 0.949556 +2080, 0.298638, 0.000000, 0.000000, 0.954367 +2081, 0.283605, 0.000000, 0.000000, 0.958941 +2082, 0.268503, 0.000000, 0.000000, 0.963279 +2083, 0.253334, 0.000000, 0.000000, 0.967379 +2084, 0.238103, 0.000000, 0.000000, 0.971240 +2085, 0.222813, 0.000000, 0.000000, 0.974861 +2086, 0.207468, 0.000000, 0.000000, 0.978242 +2087, 0.192071, 0.000000, 0.000000, 0.981381 +2088, 0.176628, 0.000000, 0.000000, 0.984278 +2089, 0.161140, 0.000000, 0.000000, 0.986932 +2090, 0.145613, 0.000000, 0.000000, 0.989342 +2091, 0.130050, 0.000000, 0.000000, 0.991507 +2092, 0.114455, 0.000000, 0.000000, 0.993428 +2093, 0.098832, 0.000000, 0.000000, 0.995104 +2094, 0.083184, 0.000000, 0.000000, 0.996534 +2095, 0.067515, 0.000000, 0.000000, 0.997718 +2096, 0.051830, 0.000000, 0.000000, 0.998656 +2097, 0.036132, 0.000000, 0.000000, 0.999347 +2098, 0.020426, 0.000000, 0.000000, 0.999791 +2099, 0.004714, 0.000000, 0.000000, 0.999989 +2100, -0.010999, -0.000000, 0.000000, 0.999940 +2101, -0.026709, -0.000000, 0.000000, 0.999643 +2102, -0.042413, -0.000000, 0.000000, 0.999100 +2103, -0.058106, -0.000000, 0.000000, 0.998310 +2104, -0.073785, -0.000000, 0.000000, 0.997274 +2105, -0.089446, -0.000000, 0.000000, 0.995992 +2106, -0.105084, -0.000000, 0.000000, 0.994463 +2107, -0.120697, -0.000000, 0.000000, 0.992689 +2108, -0.136279, -0.000000, 0.000000, 0.990670 +2109, -0.151829, -0.000000, 0.000000, 0.988407 +2110, -0.167340, -0.000000, 0.000000, 0.985899 +2111, -0.182811, -0.000000, 0.000000, 0.983148 +2112, -0.198236, -0.000000, 0.000000, 0.980154 +2113, -0.213612, -0.000000, 0.000000, 0.976919 +2114, -0.228936, -0.000000, 0.000000, 0.973442 +2115, -0.244203, -0.000000, 0.000000, 0.969724 +2116, -0.259409, -0.000000, 0.000000, 0.965767 +2117, -0.274552, -0.000000, 0.000000, 0.961572 +2118, -0.289627, -0.000000, 0.000000, 0.957140 +2119, -0.304630, -0.000000, 0.000000, 0.952471 +2120, -0.319558, -0.000000, 0.000000, 0.947567 +2121, -0.334407, -0.000000, 0.000000, 0.942429 +2122, -0.349174, -0.000000, 0.000000, 0.937058 +2123, -0.363855, -0.000000, 0.000000, 0.931456 +2124, -0.378445, -0.000000, 0.000000, 0.925624 +2125, -0.392942, -0.000000, 0.000000, 0.919563 +2126, -0.407343, -0.000000, 0.000000, 0.913275 +2127, -0.421642, -0.000000, 0.000000, 0.906762 +2128, -0.435838, -0.000000, 0.000000, 0.900025 +2129, -0.449926, -0.000000, 0.000000, 0.893066 +2130, -0.463902, -0.000000, 0.000000, 0.885886 +2131, -0.477765, -0.000000, 0.000000, 0.878488 +2132, -0.491509, -0.000000, 0.000000, 0.870872 +2133, -0.505132, -0.000000, 0.000000, 0.863042 +2134, -0.518630, -0.000000, 0.000000, 0.854999 +2135, -0.532000, -0.000000, 0.000000, 0.846744 +2136, -0.545239, -0.000000, 0.000000, 0.838280 +2137, -0.558343, -0.000000, 0.000000, 0.829610 +2138, -0.571310, -0.000000, 0.000000, 0.820734 +2139, -0.584135, -0.000000, 0.000000, 0.811656 +2140, -0.596816, -0.000000, 0.000000, 0.802378 +2141, -0.609350, -0.000000, 0.000000, 0.792901 +2142, -0.621733, -0.000000, 0.000000, 0.783229 +2143, -0.633963, -0.000000, 0.000000, 0.773363 +2144, -0.646036, -0.000000, 0.000000, 0.763307 +2145, -0.657950, -0.000000, 0.000000, 0.753062 +2146, -0.669701, -0.000000, 0.000000, 0.742631 +2147, -0.681287, -0.000000, 0.000000, 0.732016 +2148, -0.692705, -0.000000, 0.000000, 0.721221 +2149, -0.703952, -0.000000, 0.000000, 0.710248 +2150, -0.715025, -0.000000, 0.000000, 0.699099 +2151, -0.725921, -0.000000, 0.000000, 0.687778 +2152, -0.736638, -0.000000, 0.000000, 0.676287 +2153, -0.747173, -0.000000, 0.000000, 0.664629 +2154, -0.757524, -0.000000, 0.000000, 0.652807 +2155, -0.767688, -0.000000, 0.000000, 0.640824 +2156, -0.777662, -0.000000, 0.000000, 0.628682 +2157, -0.787444, -0.000000, 0.000000, 0.616386 +2158, -0.797032, -0.000000, 0.000000, 0.603937 +2159, -0.806423, -0.000000, 0.000000, 0.591339 +2160, -0.815615, -0.000000, 0.000000, 0.578595 +2161, -0.824606, -0.000000, 0.000000, 0.565708 +2162, -0.833392, -0.000000, 0.000000, 0.552682 +2163, -0.841974, -0.000000, 0.000000, 0.539519 +2164, -0.850347, -0.000000, 0.000000, 0.526223 +2165, -0.858510, -0.000000, 0.000000, 0.512797 +2166, -0.866462, -0.000000, 0.000000, 0.499244 +2167, -0.874199, -0.000000, 0.000000, 0.485568 +2168, -0.881721, -0.000000, 0.000000, 0.471772 +2169, -0.889024, -0.000000, 0.000000, 0.457860 +2170, -0.896109, -0.000000, 0.000000, 0.443834 +2171, -0.902972, -0.000000, 0.000000, 0.429699 +2172, -0.909612, -0.000000, 0.000000, 0.415458 +2173, -0.916028, -0.000000, 0.000000, 0.401115 +2174, -0.922217, -0.000000, 0.000000, 0.386672 +2175, -0.928179, -0.000000, 0.000000, 0.372134 +2176, -0.933912, -0.000000, 0.000000, 0.357504 +2177, -0.939414, -0.000000, 0.000000, 0.342786 +2178, -0.944684, -0.000000, 0.000000, 0.327983 +2179, -0.949721, -0.000000, 0.000000, 0.313099 +2180, -0.954523, -0.000000, 0.000000, 0.298138 +2181, -0.959090, -0.000000, 0.000000, 0.283103 +2182, -0.963419, -0.000000, 0.000000, 0.267998 +2183, -0.967511, -0.000000, 0.000000, 0.252827 +2184, -0.971365, -0.000000, 0.000000, 0.237594 +2185, -0.974978, -0.000000, 0.000000, 0.222302 +2186, -0.978350, -0.000000, 0.000000, 0.206955 +2187, -0.981481, -0.000000, 0.000000, 0.191557 +2188, -0.984370, -0.000000, 0.000000, 0.176112 +2189, -0.987016, -0.000000, 0.000000, 0.160623 +2190, -0.989418, -0.000000, 0.000000, 0.145095 +2191, -0.991575, -0.000000, 0.000000, 0.129531 +2192, -0.993488, -0.000000, 0.000000, 0.113935 +2193, -0.995156, -0.000000, 0.000000, 0.098310 +2194, -0.996578, -0.000000, 0.000000, 0.082662 +2195, -0.997753, -0.000000, 0.000000, 0.066993 +2196, -0.998683, -0.000000, 0.000000, 0.051307 +2197, -0.999366, -0.000000, 0.000000, 0.035609 +2198, -0.999802, -0.000000, 0.000000, 0.019902 +2199, -0.999991, -0.000000, 0.000000, 0.004190 +2200, -0.999934, 0.000000, -0.000000, -0.011523 +2201, -0.999629, 0.000000, -0.000000, -0.027233 +2202, -0.999078, 0.000000, -0.000000, -0.042936 +2203, -0.998280, 0.000000, -0.000000, -0.058629 +2204, -0.997235, 0.000000, -0.000000, -0.074307 +2205, -0.995945, 0.000000, -0.000000, -0.089967 +2206, -0.994408, 0.000000, -0.000000, -0.105605 +2207, -0.992626, 0.000000, -0.000000, -0.121217 +2208, -0.990599, 0.000000, -0.000000, -0.136798 +2209, -0.988327, 0.000000, -0.000000, -0.152346 +2210, -0.985811, 0.000000, -0.000000, -0.167857 +2211, -0.983052, 0.000000, -0.000000, -0.183326 +2212, -0.980050, 0.000000, -0.000000, -0.198749 +2213, -0.976807, 0.000000, -0.000000, -0.214124 +2214, -0.973322, 0.000000, -0.000000, -0.229445 +2215, -0.969596, 0.000000, -0.000000, -0.244710 +2216, -0.965631, 0.000000, -0.000000, -0.259915 +2217, -0.961428, 0.000000, -0.000000, -0.275056 +2218, -0.956988, 0.000000, -0.000000, -0.290128 +2219, -0.952311, 0.000000, -0.000000, -0.305129 +2220, -0.947399, 0.000000, -0.000000, -0.320055 +2221, -0.942253, 0.000000, -0.000000, -0.334901 +2222, -0.936875, 0.000000, -0.000000, -0.349665 +2223, -0.931265, 0.000000, -0.000000, -0.364342 +2224, -0.925425, 0.000000, -0.000000, -0.378930 +2225, -0.919357, 0.000000, -0.000000, -0.393424 +2226, -0.913062, 0.000000, -0.000000, -0.407821 +2227, -0.906541, 0.000000, -0.000000, -0.422117 +2228, -0.899797, 0.000000, -0.000000, -0.436309 +2229, -0.892830, 0.000000, -0.000000, -0.450393 +2230, -0.885643, 0.000000, -0.000000, -0.464366 +2231, -0.878237, 0.000000, -0.000000, -0.478225 +2232, -0.870615, 0.000000, -0.000000, -0.491965 +2233, -0.862777, 0.000000, -0.000000, -0.505584 +2234, -0.854727, 0.000000, -0.000000, -0.519078 +2235, -0.846465, 0.000000, -0.000000, -0.532444 +2236, -0.837995, 0.000000, -0.000000, -0.545678 +2237, -0.829317, 0.000000, -0.000000, -0.558778 +2238, -0.820435, 0.000000, -0.000000, -0.571740 +2239, -0.811350, 0.000000, -0.000000, -0.584560 +2240, -0.802065, 0.000000, -0.000000, -0.597236 +2241, -0.792582, 0.000000, -0.000000, -0.609765 +2242, -0.782903, 0.000000, -0.000000, -0.622143 +2243, -0.773031, 0.000000, -0.000000, -0.634368 +2244, -0.762968, 0.000000, -0.000000, -0.646436 +2245, -0.752717, 0.000000, -0.000000, -0.658344 +2246, -0.742280, 0.000000, -0.000000, -0.670090 +2247, -0.731659, 0.000000, -0.000000, -0.681671 +2248, -0.720858, 0.000000, -0.000000, -0.693083 +2249, -0.709879, 0.000000, -0.000000, -0.704324 +2250, -0.698725, 0.000000, -0.000000, -0.715391 +2251, -0.687398, 0.000000, -0.000000, -0.726281 +2252, -0.675901, 0.000000, -0.000000, -0.736992 +2253, -0.664238, 0.000000, -0.000000, -0.747521 +2254, -0.652410, 0.000000, -0.000000, -0.757866 +2255, -0.640422, 0.000000, -0.000000, -0.768023 +2256, -0.628275, 0.000000, -0.000000, -0.777991 +2257, -0.615973, 0.000000, -0.000000, -0.787767 +2258, -0.603519, 0.000000, -0.000000, -0.797348 +2259, -0.590917, 0.000000, -0.000000, -0.806733 +2260, -0.578168, 0.000000, -0.000000, -0.815918 +2261, -0.565276, 0.000000, -0.000000, -0.824902 +2262, -0.552245, 0.000000, -0.000000, -0.833682 +2263, -0.539078, 0.000000, -0.000000, -0.842256 +2264, -0.525777, 0.000000, -0.000000, -0.850622 +2265, -0.512347, 0.000000, -0.000000, -0.858779 +2266, -0.498790, 0.000000, -0.000000, -0.866723 +2267, -0.485110, 0.000000, -0.000000, -0.874453 +2268, -0.471310, 0.000000, -0.000000, -0.881968 +2269, -0.457394, 0.000000, -0.000000, -0.889264 +2270, -0.443365, 0.000000, -0.000000, -0.896341 +2271, -0.429226, 0.000000, -0.000000, -0.903197 +2272, -0.414982, 0.000000, -0.000000, -0.909830 +2273, -0.400635, 0.000000, -0.000000, -0.916238 +2274, -0.386189, 0.000000, -0.000000, -0.922420 +2275, -0.371648, 0.000000, -0.000000, -0.928374 +2276, -0.357015, 0.000000, -0.000000, -0.934099 +2277, -0.342294, 0.000000, -0.000000, -0.939593 +2278, -0.327488, 0.000000, -0.000000, -0.944855 +2279, -0.312601, 0.000000, -0.000000, -0.949884 +2280, -0.297638, 0.000000, -0.000000, -0.954679 +2281, -0.282600, 0.000000, -0.000000, -0.959238 +2282, -0.267494, 0.000000, -0.000000, -0.963560 +2283, -0.252321, 0.000000, -0.000000, -0.967644 +2284, -0.237085, 0.000000, -0.000000, -0.971489 +2285, -0.221791, 0.000000, -0.000000, -0.975094 +2286, -0.206443, 0.000000, -0.000000, -0.978459 +2287, -0.191043, 0.000000, -0.000000, -0.981582 +2288, -0.175596, 0.000000, -0.000000, -0.984462 +2289, -0.160106, 0.000000, -0.000000, -0.987100 +2290, -0.144577, 0.000000, -0.000000, -0.989494 +2291, -0.129011, 0.000000, -0.000000, -0.991643 +2292, -0.113414, 0.000000, -0.000000, -0.993548 +2293, -0.097789, 0.000000, -0.000000, -0.995207 +2294, -0.082140, 0.000000, -0.000000, -0.996621 +2295, -0.066470, 0.000000, -0.000000, -0.997788 +2296, -0.050784, 0.000000, -0.000000, -0.998710 +2297, -0.035086, 0.000000, -0.000000, -0.999384 +2298, -0.019378, 0.000000, -0.000000, -0.999812 +2299, -0.003666, 0.000000, -0.000000, -0.999993 +2300, 0.012046, 0.000000, 0.000000, -0.999927 +2301, 0.027756, 0.000000, 0.000000, -0.999615 +2302, 0.043459, 0.000000, 0.000000, -0.999055 +2303, 0.059152, 0.000000, 0.000000, -0.998249 +2304, 0.074830, 0.000000, 0.000000, -0.997196 +2305, 0.090489, 0.000000, 0.000000, -0.995897 +2306, 0.106126, 0.000000, 0.000000, -0.994353 +2307, 0.121736, 0.000000, 0.000000, -0.992562 +2308, 0.137317, 0.000000, 0.000000, -0.990527 +2309, 0.152864, 0.000000, 0.000000, -0.988247 +2310, 0.168373, 0.000000, 0.000000, -0.985723 +2311, 0.183840, 0.000000, 0.000000, -0.982956 +2312, 0.199262, 0.000000, 0.000000, -0.979946 +2313, 0.214635, 0.000000, 0.000000, -0.976694 +2314, 0.229955, 0.000000, 0.000000, -0.973201 +2315, 0.245218, 0.000000, 0.000000, -0.969468 +2316, 0.260421, 0.000000, 0.000000, -0.965495 +2317, 0.275559, 0.000000, 0.000000, -0.961284 +2318, 0.290629, 0.000000, 0.000000, -0.956836 +2319, 0.305628, 0.000000, 0.000000, -0.952151 +2320, 0.320551, 0.000000, 0.000000, -0.947231 +2321, 0.335395, 0.000000, 0.000000, -0.942078 +2322, 0.350156, 0.000000, 0.000000, -0.936692 +2323, 0.364830, 0.000000, 0.000000, -0.931074 +2324, 0.379415, 0.000000, 0.000000, -0.925227 +2325, 0.393906, 0.000000, 0.000000, -0.919151 +2326, 0.408299, 0.000000, 0.000000, -0.912848 +2327, 0.422592, 0.000000, 0.000000, -0.906320 +2328, 0.436780, 0.000000, 0.000000, -0.899568 +2329, 0.450861, 0.000000, 0.000000, -0.892594 +2330, 0.464830, 0.000000, 0.000000, -0.885400 +2331, 0.478685, 0.000000, 0.000000, -0.877987 +2332, 0.492421, 0.000000, 0.000000, -0.870357 +2333, 0.506036, 0.000000, 0.000000, -0.862512 +2334, 0.519526, 0.000000, 0.000000, -0.854455 +2335, 0.532887, 0.000000, 0.000000, -0.846186 +2336, 0.546117, 0.000000, 0.000000, -0.837709 +2337, 0.559212, 0.000000, 0.000000, -0.829025 +2338, 0.572169, 0.000000, 0.000000, -0.820136 +2339, 0.584985, 0.000000, 0.000000, -0.811044 +2340, 0.597656, 0.000000, 0.000000, -0.801752 +2341, 0.610180, 0.000000, 0.000000, -0.792263 +2342, 0.622553, 0.000000, 0.000000, -0.782577 +2343, 0.634773, 0.000000, 0.000000, -0.772699 +2344, 0.646835, 0.000000, 0.000000, -0.762630 +2345, 0.658739, 0.000000, 0.000000, -0.752372 +2346, 0.670479, 0.000000, 0.000000, -0.741929 +2347, 0.682054, 0.000000, 0.000000, -0.731302 +2348, 0.693460, 0.000000, 0.000000, -0.720495 +2349, 0.704695, 0.000000, 0.000000, -0.709510 +2350, 0.715757, 0.000000, 0.000000, -0.698350 +2351, 0.726641, 0.000000, 0.000000, -0.687017 +2352, 0.737346, 0.000000, 0.000000, -0.675515 +2353, 0.747869, 0.000000, 0.000000, -0.663846 +2354, 0.758208, 0.000000, 0.000000, -0.652013 +2355, 0.768359, 0.000000, 0.000000, -0.640019 +2356, 0.778320, 0.000000, 0.000000, -0.627867 +2357, 0.788090, 0.000000, 0.000000, -0.615561 +2358, 0.797664, 0.000000, 0.000000, -0.603102 +2359, 0.807042, 0.000000, 0.000000, -0.590494 +2360, 0.816221, 0.000000, 0.000000, -0.577740 +2361, 0.825198, 0.000000, 0.000000, -0.564844 +2362, 0.833971, 0.000000, 0.000000, -0.551808 +2363, 0.842538, 0.000000, 0.000000, -0.538636 +2364, 0.850898, 0.000000, 0.000000, -0.525332 +2365, 0.859047, 0.000000, 0.000000, -0.511897 +2366, 0.866984, 0.000000, 0.000000, -0.498336 +2367, 0.874707, 0.000000, 0.000000, -0.484652 +2368, 0.882214, 0.000000, 0.000000, -0.470848 +2369, 0.889504, 0.000000, 0.000000, -0.456928 +2370, 0.896573, 0.000000, 0.000000, -0.442895 +2371, 0.903422, 0.000000, 0.000000, -0.428753 +2372, 0.910047, 0.000000, 0.000000, -0.414505 +2373, 0.916448, 0.000000, 0.000000, -0.400155 +2374, 0.922622, 0.000000, 0.000000, -0.385706 +2375, 0.928568, 0.000000, 0.000000, -0.371161 +2376, 0.934286, 0.000000, 0.000000, -0.356525 +2377, 0.939772, 0.000000, 0.000000, -0.341801 +2378, 0.945027, 0.000000, 0.000000, -0.326993 +2379, 0.950048, 0.000000, 0.000000, -0.312104 +2380, 0.954835, 0.000000, 0.000000, -0.297138 +2381, 0.959386, 0.000000, 0.000000, -0.282098 +2382, 0.963700, 0.000000, 0.000000, -0.266989 +2383, 0.967776, 0.000000, 0.000000, -0.251814 +2384, 0.971613, 0.000000, 0.000000, -0.236576 +2385, 0.975210, 0.000000, 0.000000, -0.221281 +2386, 0.978567, 0.000000, 0.000000, -0.205930 +2387, 0.981682, 0.000000, 0.000000, -0.190529 +2388, 0.984554, 0.000000, 0.000000, -0.175081 +2389, 0.987183, 0.000000, 0.000000, -0.159589 +2390, 0.989569, 0.000000, 0.000000, -0.144058 +2391, 0.991711, 0.000000, 0.000000, -0.128492 +2392, 0.993607, 0.000000, 0.000000, -0.112894 +2393, 0.995258, 0.000000, 0.000000, -0.097268 +2394, 0.996664, 0.000000, 0.000000, -0.081618 +2395, 0.997823, 0.000000, 0.000000, -0.065948 +2396, 0.998736, 0.000000, 0.000000, -0.050261 +2397, 0.999403, 0.000000, 0.000000, -0.034562 +2398, 0.999822, 0.000000, 0.000000, -0.018855 +2399, 0.999995, 0.000000, 0.000000, -0.003143 +2400, 0.999921, 0.000000, 0.000000, 0.012570 +2401, 0.999600, 0.000000, 0.000000, 0.028280 +2402, 0.999032, 0.000000, 0.000000, 0.043983 +2403, 0.998218, 0.000000, 0.000000, 0.059675 +2404, 0.997157, 0.000000, 0.000000, 0.075352 +2405, 0.995850, 0.000000, 0.000000, 0.091010 +2406, 0.994297, 0.000000, 0.000000, 0.106647 +2407, 0.992499, 0.000000, 0.000000, 0.122256 +2408, 0.990455, 0.000000, 0.000000, 0.137836 +2409, 0.988167, 0.000000, 0.000000, 0.153382 +2410, 0.985635, 0.000000, 0.000000, 0.168889 +2411, 0.982860, 0.000000, 0.000000, 0.184355 +2412, 0.979842, 0.000000, 0.000000, 0.199776 +2413, 0.976582, 0.000000, 0.000000, 0.215147 +2414, 0.973081, 0.000000, 0.000000, 0.230465 +2415, 0.969339, 0.000000, 0.000000, 0.245726 +2416, 0.965359, 0.000000, 0.000000, 0.260926 +2417, 0.961140, 0.000000, 0.000000, 0.276062 +2418, 0.956683, 0.000000, 0.000000, 0.291130 +2419, 0.951991, 0.000000, 0.000000, 0.306126 +2420, 0.947063, 0.000000, 0.000000, 0.321047 +2421, 0.941902, 0.000000, 0.000000, 0.335888 +2422, 0.936508, 0.000000, 0.000000, 0.350646 +2423, 0.930883, 0.000000, 0.000000, 0.365318 +2424, 0.925028, 0.000000, 0.000000, 0.379899 +2425, 0.918944, 0.000000, 0.000000, 0.394387 +2426, 0.912634, 0.000000, 0.000000, 0.408777 +2427, 0.906099, 0.000000, 0.000000, 0.423067 +2428, 0.899339, 0.000000, 0.000000, 0.437251 +2429, 0.892358, 0.000000, 0.000000, 0.451328 +2430, 0.885156, 0.000000, 0.000000, 0.465294 +2431, 0.877736, 0.000000, 0.000000, 0.479145 +2432, 0.870099, 0.000000, 0.000000, 0.492877 +2433, 0.862247, 0.000000, 0.000000, 0.506487 +2434, 0.854183, 0.000000, 0.000000, 0.519973 +2435, 0.845907, 0.000000, 0.000000, 0.533330 +2436, 0.837423, 0.000000, 0.000000, 0.546556 +2437, 0.828732, 0.000000, 0.000000, 0.559646 +2438, 0.819836, 0.000000, 0.000000, 0.572599 +2439, 0.810738, 0.000000, 0.000000, 0.585410 +2440, 0.801439, 0.000000, 0.000000, 0.598076 +2441, 0.791943, 0.000000, 0.000000, 0.610595 +2442, 0.782251, 0.000000, 0.000000, 0.622963 +2443, 0.772366, 0.000000, 0.000000, 0.635177 +2444, 0.762291, 0.000000, 0.000000, 0.647235 +2445, 0.752027, 0.000000, 0.000000, 0.659132 +2446, 0.741577, 0.000000, 0.000000, 0.670867 +2447, 0.730945, 0.000000, 0.000000, 0.682437 +2448, 0.720132, 0.000000, 0.000000, 0.693837 +2449, 0.709141, 0.000000, 0.000000, 0.705067 +2450, 0.697975, 0.000000, 0.000000, 0.716122 +2451, 0.686637, 0.000000, 0.000000, 0.727001 +2452, 0.675129, 0.000000, 0.000000, 0.737700 +2453, 0.663454, 0.000000, 0.000000, 0.748217 +2454, 0.651616, 0.000000, 0.000000, 0.758549 +2455, 0.639617, 0.000000, 0.000000, 0.768694 +2456, 0.627460, 0.000000, 0.000000, 0.778649 +2457, 0.615148, 0.000000, 0.000000, 0.788412 +2458, 0.602684, 0.000000, 0.000000, 0.797980 +2459, 0.590071, 0.000000, 0.000000, 0.807351 +2460, 0.577313, 0.000000, 0.000000, 0.816523 +2461, 0.564412, 0.000000, 0.000000, 0.825493 +2462, 0.551371, 0.000000, 0.000000, 0.834260 +2463, 0.538195, 0.000000, 0.000000, 0.842820 +2464, 0.524886, 0.000000, 0.000000, 0.851173 +2465, 0.511447, 0.000000, 0.000000, 0.859315 +2466, 0.497882, 0.000000, 0.000000, 0.867245 +2467, 0.484194, 0.000000, 0.000000, 0.874961 +2468, 0.470386, 0.000000, 0.000000, 0.882461 +2469, 0.456462, 0.000000, 0.000000, 0.889743 +2470, 0.442426, 0.000000, 0.000000, 0.896805 +2471, 0.428280, 0.000000, 0.000000, 0.903646 +2472, 0.414029, 0.000000, 0.000000, 0.910264 +2473, 0.399675, 0.000000, 0.000000, 0.916657 +2474, 0.385222, 0.000000, 0.000000, 0.922824 +2475, 0.370675, 0.000000, 0.000000, 0.928763 +2476, 0.356036, 0.000000, 0.000000, 0.934472 +2477, 0.341309, 0.000000, 0.000000, 0.939951 +2478, 0.326498, 0.000000, 0.000000, 0.945198 +2479, 0.311606, 0.000000, 0.000000, 0.950211 +2480, 0.296637, 0.000000, 0.000000, 0.954990 +2481, 0.281595, 0.000000, 0.000000, 0.959533 +2482, 0.266484, 0.000000, 0.000000, 0.963839 +2483, 0.251307, 0.000000, 0.000000, 0.967907 +2484, 0.236067, 0.000000, 0.000000, 0.971737 +2485, 0.220770, 0.000000, 0.000000, 0.975326 +2486, 0.205418, 0.000000, 0.000000, 0.978674 +2487, 0.190015, 0.000000, 0.000000, 0.981781 +2488, 0.174565, 0.000000, 0.000000, 0.984646 +2489, 0.159072, 0.000000, 0.000000, 0.987267 +2490, 0.143540, 0.000000, 0.000000, 0.989644 +2491, 0.127973, 0.000000, 0.000000, 0.991778 +2492, 0.112373, 0.000000, 0.000000, 0.993666 +2493, 0.096747, 0.000000, 0.000000, 0.995309 +2494, 0.081096, 0.000000, 0.000000, 0.996706 +2495, 0.065425, 0.000000, 0.000000, 0.997857 +2496, 0.049738, 0.000000, 0.000000, 0.998762 +2497, 0.034039, 0.000000, 0.000000, 0.999421 +2498, 0.018331, 0.000000, 0.000000, 0.999832 +2499, 0.002619, 0.000000, 0.000000, 0.999997 +2500, -0.013094, -0.000000, 0.000000, 0.999914 +2501, -0.028804, -0.000000, 0.000000, 0.999585 +2502, -0.044506, -0.000000, 0.000000, 0.999009 +2503, -0.060198, -0.000000, 0.000000, 0.998186 +2504, -0.075874, -0.000000, 0.000000, 0.997117 +2505, -0.091532, -0.000000, 0.000000, 0.995802 +2506, -0.107167, -0.000000, 0.000000, 0.994241 +2507, -0.122776, -0.000000, 0.000000, 0.992434 +2508, -0.138355, -0.000000, 0.000000, 0.990383 +2509, -0.153899, -0.000000, 0.000000, 0.988087 +2510, -0.169405, -0.000000, 0.000000, 0.985546 +2511, -0.184870, -0.000000, 0.000000, 0.982763 +2512, -0.200289, -0.000000, 0.000000, 0.979737 +2513, -0.215658, -0.000000, 0.000000, 0.976469 +2514, -0.230975, -0.000000, 0.000000, 0.972960 +2515, -0.246234, -0.000000, 0.000000, 0.969210 +2516, -0.261432, -0.000000, 0.000000, 0.965222 +2517, -0.276566, -0.000000, 0.000000, 0.960995 +2518, -0.291631, -0.000000, 0.000000, 0.956531 +2519, -0.306625, -0.000000, 0.000000, 0.951830 +2520, -0.321543, -0.000000, 0.000000, 0.946895 +2521, -0.336381, -0.000000, 0.000000, 0.941726 +2522, -0.351137, -0.000000, 0.000000, 0.936324 +2523, -0.365805, -0.000000, 0.000000, 0.930691 +2524, -0.380384, -0.000000, 0.000000, 0.924829 +2525, -0.394868, -0.000000, 0.000000, 0.918738 +2526, -0.409255, -0.000000, 0.000000, 0.912420 +2527, -0.423541, -0.000000, 0.000000, 0.905877 +2528, -0.437722, -0.000000, 0.000000, 0.899110 +2529, -0.451796, -0.000000, 0.000000, 0.892121 +2530, -0.465757, -0.000000, 0.000000, 0.884912 +2531, -0.479604, -0.000000, 0.000000, 0.877485 +2532, -0.493332, -0.000000, 0.000000, 0.869841 +2533, -0.506939, -0.000000, 0.000000, 0.861982 +2534, -0.520420, -0.000000, 0.000000, 0.853910 +2535, -0.533773, -0.000000, 0.000000, 0.845628 +2536, -0.546994, -0.000000, 0.000000, 0.837136 +2537, -0.560080, -0.000000, 0.000000, 0.828438 +2538, -0.573028, -0.000000, 0.000000, 0.819536 +2539, -0.585834, -0.000000, 0.000000, 0.810431 +2540, -0.598496, -0.000000, 0.000000, 0.801126 +2541, -0.611010, -0.000000, 0.000000, 0.791623 +2542, -0.623373, -0.000000, 0.000000, 0.781925 +2543, -0.635582, -0.000000, 0.000000, 0.772033 +2544, -0.647634, -0.000000, 0.000000, 0.761952 +2545, -0.659526, -0.000000, 0.000000, 0.751682 +2546, -0.671256, -0.000000, 0.000000, 0.741226 +2547, -0.682819, -0.000000, 0.000000, 0.730587 +2548, -0.694214, -0.000000, 0.000000, 0.719768 +2549, -0.705438, -0.000000, 0.000000, 0.708771 +2550, -0.716488, -0.000000, 0.000000, 0.697600 +2551, -0.727360, -0.000000, 0.000000, 0.686256 +2552, -0.738053, -0.000000, 0.000000, 0.674742 +2553, -0.748564, -0.000000, 0.000000, 0.663062 +2554, -0.758890, -0.000000, 0.000000, 0.651219 +2555, -0.769029, -0.000000, 0.000000, 0.639214 +2556, -0.778978, -0.000000, 0.000000, 0.627052 +2557, -0.788734, -0.000000, 0.000000, 0.614735 +2558, -0.798296, -0.000000, 0.000000, 0.602266 +2559, -0.807660, -0.000000, 0.000000, 0.589648 +2560, -0.816825, -0.000000, 0.000000, 0.576885 +2561, -0.825789, -0.000000, 0.000000, 0.563979 +2562, -0.834549, -0.000000, 0.000000, 0.550934 +2563, -0.843102, -0.000000, 0.000000, 0.537754 +2564, -0.851447, -0.000000, 0.000000, 0.524440 +2565, -0.859583, -0.000000, 0.000000, 0.510997 +2566, -0.867506, -0.000000, 0.000000, 0.497427 +2567, -0.875214, -0.000000, 0.000000, 0.483735 +2568, -0.882707, -0.000000, 0.000000, 0.469924 +2569, -0.889982, -0.000000, 0.000000, 0.455996 +2570, -0.897037, -0.000000, 0.000000, 0.441956 +2571, -0.903870, -0.000000, 0.000000, 0.427807 +2572, -0.910481, -0.000000, 0.000000, 0.413552 +2573, -0.916866, -0.000000, 0.000000, 0.399195 +2574, -0.923025, -0.000000, 0.000000, 0.384739 +2575, -0.928957, -0.000000, 0.000000, 0.370188 +2576, -0.934659, -0.000000, 0.000000, 0.355547 +2577, -0.940130, -0.000000, 0.000000, 0.340817 +2578, -0.945369, -0.000000, 0.000000, 0.326003 +2579, -0.950374, -0.000000, 0.000000, 0.311108 +2580, -0.955145, -0.000000, 0.000000, 0.296137 +2581, -0.959681, -0.000000, 0.000000, 0.281093 +2582, -0.963979, -0.000000, 0.000000, 0.265979 +2583, -0.968039, -0.000000, 0.000000, 0.250800 +2584, -0.971860, -0.000000, 0.000000, 0.235558 +2585, -0.975441, -0.000000, 0.000000, 0.220259 +2586, -0.978782, -0.000000, 0.000000, 0.204905 +2587, -0.981881, -0.000000, 0.000000, 0.189501 +2588, -0.984737, -0.000000, 0.000000, 0.174049 +2589, -0.987350, -0.000000, 0.000000, 0.158555 +2590, -0.989720, -0.000000, 0.000000, 0.143022 +2591, -0.991845, -0.000000, 0.000000, 0.127453 +2592, -0.993725, -0.000000, 0.000000, 0.111853 +2593, -0.995360, -0.000000, 0.000000, 0.096225 +2594, -0.996749, -0.000000, 0.000000, 0.080574 +2595, -0.997892, -0.000000, 0.000000, 0.064902 +2596, -0.998788, -0.000000, 0.000000, 0.049215 +2597, -0.999438, -0.000000, 0.000000, 0.033515 +2598, -0.999841, -0.000000, 0.000000, 0.017807 +2599, -0.999998, -0.000000, 0.000000, 0.002095 +2600, -0.999907, 0.000000, -0.000000, -0.013618 +2601, -0.999570, 0.000000, -0.000000, -0.029327 +2602, -0.998986, 0.000000, -0.000000, -0.045029 +2603, -0.998155, 0.000000, -0.000000, -0.060720 +2604, -0.997078, 0.000000, -0.000000, -0.076396 +2605, -0.995754, 0.000000, -0.000000, -0.092054 +2606, -0.994185, 0.000000, -0.000000, -0.107688 +2607, -0.992370, 0.000000, -0.000000, -0.123296 +2608, -0.990310, 0.000000, -0.000000, -0.138873 +2609, -0.988006, 0.000000, -0.000000, -0.154417 +2610, -0.985458, 0.000000, -0.000000, -0.169922 +2611, -0.982666, 0.000000, -0.000000, -0.185385 +2612, -0.979632, 0.000000, -0.000000, -0.200802 +2613, -0.976356, 0.000000, -0.000000, -0.216170 +2614, -0.972839, 0.000000, -0.000000, -0.231484 +2615, -0.969081, 0.000000, -0.000000, -0.246741 +2616, -0.965085, 0.000000, -0.000000, -0.261938 +2617, -0.960850, 0.000000, -0.000000, -0.277069 +2618, -0.956378, 0.000000, -0.000000, -0.292132 +2619, -0.951670, 0.000000, -0.000000, -0.307123 +2620, -0.946727, 0.000000, -0.000000, -0.322039 +2621, -0.941550, 0.000000, -0.000000, -0.336874 +2622, -0.936140, 0.000000, -0.000000, -0.351627 +2623, -0.930500, 0.000000, -0.000000, -0.366293 +2624, -0.924629, 0.000000, -0.000000, -0.380868 +2625, -0.918531, 0.000000, -0.000000, -0.395349 +2626, -0.912206, 0.000000, -0.000000, -0.409733 +2627, -0.905655, 0.000000, -0.000000, -0.424015 +2628, -0.898881, 0.000000, -0.000000, -0.438193 +2629, -0.891885, 0.000000, -0.000000, -0.452263 +2630, -0.884668, 0.000000, -0.000000, -0.466221 +2631, -0.877234, 0.000000, -0.000000, -0.480064 +2632, -0.869582, 0.000000, -0.000000, -0.493788 +2633, -0.861716, 0.000000, -0.000000, -0.507390 +2634, -0.853638, 0.000000, -0.000000, -0.520868 +2635, -0.845348, 0.000000, -0.000000, -0.534216 +2636, -0.836850, 0.000000, -0.000000, -0.547433 +2637, -0.828145, 0.000000, -0.000000, -0.560514 +2638, -0.819235, 0.000000, -0.000000, -0.573457 +2639, -0.810124, 0.000000, -0.000000, -0.586259 +2640, -0.800812, 0.000000, -0.000000, -0.598915 +2641, -0.791303, 0.000000, -0.000000, -0.611424 +2642, -0.781598, 0.000000, -0.000000, -0.623782 +2643, -0.771700, 0.000000, -0.000000, -0.635986 +2644, -0.761612, 0.000000, -0.000000, -0.648033 +2645, -0.751336, 0.000000, -0.000000, -0.659920 +2646, -0.740874, 0.000000, -0.000000, -0.671644 +2647, -0.730229, 0.000000, -0.000000, -0.683202 +2648, -0.719404, 0.000000, -0.000000, -0.694591 +2649, -0.708402, 0.000000, -0.000000, -0.705809 +2650, -0.697224, 0.000000, -0.000000, -0.716853 +2651, -0.685875, 0.000000, -0.000000, -0.727720 +2652, -0.674356, 0.000000, -0.000000, -0.738407 +2653, -0.662670, 0.000000, -0.000000, -0.748911 +2654, -0.650821, 0.000000, -0.000000, -0.759231 +2655, -0.638811, 0.000000, -0.000000, -0.769363 +2656, -0.626644, 0.000000, -0.000000, -0.779306 +2657, -0.614321, 0.000000, -0.000000, -0.789056 +2658, -0.601848, 0.000000, -0.000000, -0.798611 +2659, -0.589225, 0.000000, -0.000000, -0.807969 +2660, -0.576457, 0.000000, -0.000000, -0.817127 +2661, -0.563547, 0.000000, -0.000000, -0.826084 +2662, -0.550497, 0.000000, -0.000000, -0.834837 +2663, -0.537312, 0.000000, -0.000000, -0.843384 +2664, -0.523994, 0.000000, -0.000000, -0.851722 +2665, -0.510546, 0.000000, -0.000000, -0.859850 +2666, -0.496973, 0.000000, -0.000000, -0.867766 +2667, -0.483277, 0.000000, -0.000000, -0.875468 +2668, -0.469461, 0.000000, -0.000000, -0.882953 +2669, -0.455530, 0.000000, -0.000000, -0.890220 +2670, -0.441486, 0.000000, -0.000000, -0.897268 +2671, -0.427333, 0.000000, -0.000000, -0.904094 +2672, -0.413075, 0.000000, -0.000000, -0.910697 +2673, -0.398714, 0.000000, -0.000000, -0.917075 +2674, -0.384256, 0.000000, -0.000000, -0.923227 +2675, -0.369702, 0.000000, -0.000000, -0.929150 +2676, -0.355057, 0.000000, -0.000000, -0.934845 +2677, -0.340324, 0.000000, -0.000000, -0.940308 +2678, -0.325508, 0.000000, -0.000000, -0.945539 +2679, -0.310611, 0.000000, -0.000000, -0.950537 +2680, -0.295637, 0.000000, -0.000000, -0.955300 +2681, -0.280590, 0.000000, -0.000000, -0.959828 +2682, -0.265474, 0.000000, -0.000000, -0.964118 +2683, -0.250293, 0.000000, -0.000000, -0.968170 +2684, -0.235049, 0.000000, -0.000000, -0.971983 +2685, -0.219748, 0.000000, -0.000000, -0.975557 +2686, -0.204392, 0.000000, -0.000000, -0.978889 +2687, -0.188986, 0.000000, -0.000000, -0.981980 +2688, -0.173534, 0.000000, -0.000000, -0.984828 +2689, -0.158038, 0.000000, -0.000000, -0.987433 +2690, -0.142503, 0.000000, -0.000000, -0.989794 +2691, -0.126934, 0.000000, -0.000000, -0.991911 +2692, -0.111332, 0.000000, -0.000000, -0.993783 +2693, -0.095704, 0.000000, -0.000000, -0.995410 +2694, -0.080052, 0.000000, -0.000000, -0.996791 +2695, -0.064380, 0.000000, -0.000000, -0.997925 +2696, -0.048692, 0.000000, -0.000000, -0.998814 +2697, -0.032992, 0.000000, -0.000000, -0.999456 +2698, -0.017284, 0.000000, -0.000000, -0.999851 +2699, -0.001571, 0.000000, -0.000000, -0.999999 +2700, 0.014141, 0.000000, 0.000000, -0.999900 +2701, 0.029851, 0.000000, 0.000000, -0.999554 +2702, 0.045553, 0.000000, 0.000000, -0.998962 +2703, 0.061243, 0.000000, 0.000000, -0.998123 +2704, 0.076919, 0.000000, 0.000000, -0.997037 +2705, 0.092575, 0.000000, 0.000000, -0.995706 +2706, 0.108209, 0.000000, 0.000000, -0.994128 +2707, 0.123816, 0.000000, 0.000000, -0.992305 +2708, 0.139392, 0.000000, 0.000000, -0.990237 +2709, 0.154934, 0.000000, 0.000000, -0.987925 +2710, 0.170438, 0.000000, 0.000000, -0.985368 +2711, 0.185899, 0.000000, 0.000000, -0.982569 +2712, 0.201315, 0.000000, 0.000000, -0.979527 +2713, 0.216681, 0.000000, 0.000000, -0.976242 +2714, 0.231994, 0.000000, 0.000000, -0.972717 +2715, 0.247249, 0.000000, 0.000000, -0.968952 +2716, 0.262443, 0.000000, 0.000000, -0.964947 +2717, 0.277572, 0.000000, 0.000000, -0.960705 +2718, 0.292633, 0.000000, 0.000000, -0.956225 +2719, 0.307622, 0.000000, 0.000000, -0.951509 +2720, 0.322535, 0.000000, 0.000000, -0.946558 +2721, 0.337368, 0.000000, 0.000000, -0.941373 +2722, 0.352117, 0.000000, 0.000000, -0.935956 +2723, 0.366780, 0.000000, 0.000000, -0.930308 +2724, 0.381352, 0.000000, 0.000000, -0.924430 +2725, 0.395830, 0.000000, 0.000000, -0.918324 +2726, 0.410211, 0.000000, 0.000000, -0.911991 +2727, 0.424490, 0.000000, 0.000000, -0.905433 +2728, 0.438664, 0.000000, 0.000000, -0.898651 +2729, 0.452730, 0.000000, 0.000000, -0.891648 +2730, 0.466684, 0.000000, 0.000000, -0.884424 +2731, 0.480523, 0.000000, 0.000000, -0.876982 +2732, 0.494243, 0.000000, 0.000000, -0.869324 +2733, 0.507842, 0.000000, 0.000000, -0.861450 +2734, 0.521315, 0.000000, 0.000000, -0.853365 +2735, 0.534659, 0.000000, 0.000000, -0.845068 +2736, 0.547871, 0.000000, 0.000000, -0.836563 +2737, 0.560948, 0.000000, 0.000000, -0.827851 +2738, 0.573886, 0.000000, 0.000000, -0.818935 +2739, 0.586683, 0.000000, 0.000000, -0.809817 +2740, 0.599335, 0.000000, 0.000000, -0.800498 +2741, 0.611839, 0.000000, 0.000000, -0.790983 +2742, 0.624192, 0.000000, 0.000000, -0.781271 +2743, 0.636390, 0.000000, 0.000000, -0.771367 +2744, 0.648432, 0.000000, 0.000000, -0.761273 +2745, 0.660313, 0.000000, 0.000000, -0.750990 +2746, 0.672032, 0.000000, 0.000000, -0.740522 +2747, 0.683584, 0.000000, 0.000000, -0.729872 +2748, 0.694968, 0.000000, 0.000000, -0.719041 +2749, 0.706180, 0.000000, 0.000000, -0.708032 +2750, 0.717218, 0.000000, 0.000000, -0.696849 +2751, 0.728079, 0.000000, 0.000000, -0.685493 +2752, 0.738760, 0.000000, 0.000000, -0.673969 +2753, 0.749258, 0.000000, 0.000000, -0.662278 +2754, 0.759572, 0.000000, 0.000000, -0.650423 +2755, 0.769698, 0.000000, 0.000000, -0.638408 +2756, 0.779634, 0.000000, 0.000000, -0.626235 +2757, 0.789377, 0.000000, 0.000000, -0.613908 +2758, 0.798926, 0.000000, 0.000000, -0.601429 +2759, 0.808277, 0.000000, 0.000000, -0.588802 +2760, 0.817429, 0.000000, 0.000000, -0.576029 +2761, 0.826379, 0.000000, 0.000000, -0.563114 +2762, 0.835125, 0.000000, 0.000000, -0.550060 +2763, 0.843665, 0.000000, 0.000000, -0.536870 +2764, 0.851996, 0.000000, 0.000000, -0.523548 +2765, 0.860117, 0.000000, 0.000000, -0.510096 +2766, 0.868026, 0.000000, 0.000000, -0.496518 +2767, 0.875721, 0.000000, 0.000000, -0.482818 +2768, 0.883199, 0.000000, 0.000000, -0.468999 +2769, 0.890459, 0.000000, 0.000000, -0.455064 +2770, 0.897499, 0.000000, 0.000000, -0.441016 +2771, 0.904318, 0.000000, 0.000000, -0.426860 +2772, 0.910913, 0.000000, 0.000000, -0.412598 +2773, 0.917284, 0.000000, 0.000000, -0.398234 +2774, 0.923428, 0.000000, 0.000000, -0.383772 +2775, 0.929344, 0.000000, 0.000000, -0.369215 +2776, 0.935031, 0.000000, 0.000000, -0.354567 +2777, 0.940486, 0.000000, 0.000000, -0.339832 +2778, 0.945710, 0.000000, 0.000000, -0.325012 +2779, 0.950700, 0.000000, 0.000000, -0.310113 +2780, 0.955455, 0.000000, 0.000000, -0.295136 +2781, 0.959975, 0.000000, 0.000000, -0.280087 +2782, 0.964257, 0.000000, 0.000000, -0.264969 +2783, 0.968301, 0.000000, 0.000000, -0.249786 +2784, 0.972106, 0.000000, 0.000000, -0.234540 +2785, 0.975672, 0.000000, 0.000000, -0.219237 +2786, 0.978996, 0.000000, 0.000000, -0.203880 +2787, 0.982079, 0.000000, 0.000000, -0.188472 +2788, 0.984919, 0.000000, 0.000000, -0.173018 +2789, 0.987516, 0.000000, 0.000000, -0.157521 +2790, 0.989869, 0.000000, 0.000000, -0.141985 +2791, 0.991978, 0.000000, 0.000000, -0.126414 +2792, 0.993841, 0.000000, 0.000000, -0.110812 +2793, 0.995460, 0.000000, 0.000000, -0.095182 +2794, 0.996833, 0.000000, 0.000000, -0.079529 +2795, 0.997959, 0.000000, 0.000000, -0.063857 +2796, 0.998839, 0.000000, 0.000000, -0.048169 +2797, 0.999473, 0.000000, 0.000000, -0.032468 +2798, 0.999860, 0.000000, 0.000000, -0.016760 +2799, 0.999999, 0.000000, 0.000000, -0.001048 +2800, 0.999892, 0.000000, 0.000000, 0.014665 +2801, 0.999539, 0.000000, 0.000000, 0.030374 +2802, 0.998938, 0.000000, 0.000000, 0.046076 +2803, 0.998091, 0.000000, 0.000000, 0.061766 +2804, 0.996997, 0.000000, 0.000000, 0.077441 +2805, 0.995657, 0.000000, 0.000000, 0.093097 +2806, 0.994071, 0.000000, 0.000000, 0.108729 +2807, 0.992240, 0.000000, 0.000000, 0.124335 +2808, 0.990164, 0.000000, 0.000000, 0.139911 +2809, 0.987844, 0.000000, 0.000000, 0.155451 +2810, 0.985279, 0.000000, 0.000000, 0.170954 +2811, 0.982471, 0.000000, 0.000000, 0.186414 +2812, 0.979421, 0.000000, 0.000000, 0.201828 +2813, 0.976129, 0.000000, 0.000000, 0.217192 +2814, 0.972596, 0.000000, 0.000000, 0.232503 +2815, 0.968822, 0.000000, 0.000000, 0.247756 +2816, 0.964810, 0.000000, 0.000000, 0.262948 +2817, 0.960559, 0.000000, 0.000000, 0.278076 +2818, 0.956071, 0.000000, 0.000000, 0.293134 +2819, 0.951347, 0.000000, 0.000000, 0.308120 +2820, 0.946389, 0.000000, 0.000000, 0.323030 +2821, 0.941196, 0.000000, 0.000000, 0.337861 +2822, 0.935771, 0.000000, 0.000000, 0.352607 +2823, 0.930115, 0.000000, 0.000000, 0.367267 +2824, 0.924230, 0.000000, 0.000000, 0.381836 +2825, 0.918116, 0.000000, 0.000000, 0.396311 +2826, 0.911776, 0.000000, 0.000000, 0.410688 +2827, 0.905210, 0.000000, 0.000000, 0.424964 +2828, 0.898421, 0.000000, 0.000000, 0.439135 +2829, 0.891410, 0.000000, 0.000000, 0.453197 +2830, 0.884179, 0.000000, 0.000000, 0.467147 +2831, 0.876730, 0.000000, 0.000000, 0.480982 +2832, 0.869065, 0.000000, 0.000000, 0.494699 +2833, 0.861184, 0.000000, 0.000000, 0.508293 +2834, 0.853091, 0.000000, 0.000000, 0.521761 +2835, 0.844788, 0.000000, 0.000000, 0.535101 +2836, 0.836276, 0.000000, 0.000000, 0.548309 +2837, 0.827557, 0.000000, 0.000000, 0.561381 +2838, 0.818634, 0.000000, 0.000000, 0.574315 +2839, 0.809509, 0.000000, 0.000000, 0.587107 +2840, 0.800184, 0.000000, 0.000000, 0.599754 +2841, 0.790662, 0.000000, 0.000000, 0.612253 +2842, 0.780944, 0.000000, 0.000000, 0.624601 +2843, 0.771034, 0.000000, 0.000000, 0.636794 +2844, 0.760933, 0.000000, 0.000000, 0.648830 +2845, 0.750644, 0.000000, 0.000000, 0.660707 +2846, 0.740170, 0.000000, 0.000000, 0.672420 +2847, 0.729513, 0.000000, 0.000000, 0.683967 +2848, 0.718676, 0.000000, 0.000000, 0.695345 +2849, 0.707662, 0.000000, 0.000000, 0.706551 +2850, 0.696473, 0.000000, 0.000000, 0.717583 +2851, 0.685112, 0.000000, 0.000000, 0.728438 +2852, 0.673582, 0.000000, 0.000000, 0.739113 +2853, 0.661885, 0.000000, 0.000000, 0.749605 +2854, 0.650025, 0.000000, 0.000000, 0.759913 +2855, 0.638005, 0.000000, 0.000000, 0.770032 +2856, 0.625827, 0.000000, 0.000000, 0.779962 +2857, 0.613495, 0.000000, 0.000000, 0.789699 +2858, 0.601011, 0.000000, 0.000000, 0.799241 +2859, 0.588378, 0.000000, 0.000000, 0.808586 +2860, 0.575601, 0.000000, 0.000000, 0.817731 +2861, 0.562681, 0.000000, 0.000000, 0.826674 +2862, 0.549622, 0.000000, 0.000000, 0.835413 +2863, 0.536428, 0.000000, 0.000000, 0.843946 +2864, 0.523101, 0.000000, 0.000000, 0.852270 +2865, 0.509645, 0.000000, 0.000000, 0.860385 +2866, 0.496064, 0.000000, 0.000000, 0.868286 +2867, 0.482359, 0.000000, 0.000000, 0.875973 +2868, 0.468536, 0.000000, 0.000000, 0.883444 +2869, 0.454597, 0.000000, 0.000000, 0.890697 +2870, 0.440546, 0.000000, 0.000000, 0.897730 +2871, 0.426386, 0.000000, 0.000000, 0.904541 +2872, 0.412121, 0.000000, 0.000000, 0.911129 +2873, 0.397753, 0.000000, 0.000000, 0.917492 +2874, 0.383288, 0.000000, 0.000000, 0.923629 +2875, 0.368728, 0.000000, 0.000000, 0.929537 +2876, 0.354077, 0.000000, 0.000000, 0.935216 +2877, 0.339339, 0.000000, 0.000000, 0.940664 +2878, 0.324517, 0.000000, 0.000000, 0.945880 +2879, 0.309615, 0.000000, 0.000000, 0.950862 +2880, 0.294636, 0.000000, 0.000000, 0.955610 +2881, 0.279585, 0.000000, 0.000000, 0.960121 +2882, 0.264464, 0.000000, 0.000000, 0.964396 +2883, 0.249278, 0.000000, 0.000000, 0.968432 +2884, 0.234031, 0.000000, 0.000000, 0.972229 +2885, 0.218726, 0.000000, 0.000000, 0.975786 +2886, 0.203367, 0.000000, 0.000000, 0.979103 +2887, 0.187958, 0.000000, 0.000000, 0.982177 +2888, 0.172502, 0.000000, 0.000000, 0.985009 +2889, 0.157003, 0.000000, 0.000000, 0.987598 +2890, 0.141466, 0.000000, 0.000000, 0.989943 +2891, 0.125894, 0.000000, 0.000000, 0.992044 +2892, 0.110291, 0.000000, 0.000000, 0.993899 +2893, 0.094661, 0.000000, 0.000000, 0.995510 +2894, 0.079007, 0.000000, 0.000000, 0.996874 +2895, 0.063334, 0.000000, 0.000000, 0.997992 +2896, 0.047645, 0.000000, 0.000000, 0.998864 +2897, 0.031945, 0.000000, 0.000000, 0.999490 +2898, 0.016236, 0.000000, 0.000000, 0.999868 +2899, 0.000524, 0.000000, 0.000000, 1.000000 +2900, -0.015189, -0.000000, 0.000000, 0.999885 +2901, -0.030898, -0.000000, 0.000000, 0.999523 +2902, -0.046599, -0.000000, 0.000000, 0.998914 +2903, -0.062289, -0.000000, 0.000000, 0.998058 +2904, -0.077963, -0.000000, 0.000000, 0.996956 +2905, -0.093618, -0.000000, 0.000000, 0.995608 +2906, -0.109250, -0.000000, 0.000000, 0.994014 +2907, -0.124855, -0.000000, 0.000000, 0.992175 +2908, -0.140429, -0.000000, 0.000000, 0.990091 +2909, -0.155969, -0.000000, 0.000000, 0.987762 +2910, -0.171470, -0.000000, 0.000000, 0.985189 +2911, -0.186929, -0.000000, 0.000000, 0.982374 +2912, -0.202341, -0.000000, 0.000000, 0.979315 +2913, -0.217704, -0.000000, 0.000000, 0.976015 +2914, -0.233012, -0.000000, 0.000000, 0.972474 +2915, -0.248264, -0.000000, 0.000000, 0.968692 +2916, -0.263454, -0.000000, 0.000000, 0.964672 +2917, -0.278579, -0.000000, 0.000000, 0.960413 +2918, -0.293635, -0.000000, 0.000000, 0.955918 +2919, -0.308618, -0.000000, 0.000000, 0.951186 +2920, -0.323526, -0.000000, 0.000000, 0.946219 +2921, -0.338354, -0.000000, 0.000000, 0.941019 +2922, -0.353098, -0.000000, 0.000000, 0.935587 +2923, -0.367754, -0.000000, 0.000000, 0.929923 +2924, -0.382320, -0.000000, 0.000000, 0.924030 +2925, -0.396792, -0.000000, 0.000000, 0.917908 +2926, -0.411166, -0.000000, 0.000000, 0.911561 +2927, -0.425438, -0.000000, 0.000000, 0.904988 +2928, -0.439605, -0.000000, 0.000000, 0.898191 +2929, -0.453664, -0.000000, 0.000000, 0.891173 +2930, -0.467610, -0.000000, 0.000000, 0.883935 +2931, -0.481442, -0.000000, 0.000000, 0.876478 +2932, -0.495154, -0.000000, 0.000000, 0.868805 +2933, -0.508744, -0.000000, 0.000000, 0.860918 +2934, -0.522208, -0.000000, 0.000000, 0.852818 +2935, -0.535544, -0.000000, 0.000000, 0.844507 +2936, -0.548747, -0.000000, 0.000000, 0.835988 +2937, -0.561815, -0.000000, 0.000000, 0.827263 +2938, -0.574744, -0.000000, 0.000000, 0.818333 +2939, -0.587531, -0.000000, 0.000000, 0.809202 +2940, -0.600173, -0.000000, 0.000000, 0.799870 +2941, -0.612667, -0.000000, 0.000000, 0.790341 +2942, -0.625010, -0.000000, 0.000000, 0.780617 +2943, -0.637198, -0.000000, 0.000000, 0.770700 +2944, -0.649229, -0.000000, 0.000000, 0.760593 +2945, -0.661100, -0.000000, 0.000000, 0.750298 +2946, -0.672807, -0.000000, 0.000000, 0.739818 +2947, -0.684349, -0.000000, 0.000000, 0.729155 +2948, -0.695721, -0.000000, 0.000000, 0.718312 +2949, -0.706922, -0.000000, 0.000000, 0.707292 +2950, -0.717948, -0.000000, 0.000000, 0.696097 +2951, -0.728797, -0.000000, 0.000000, 0.684730 +2952, -0.739465, -0.000000, 0.000000, 0.673195 +2953, -0.749952, -0.000000, 0.000000, 0.661493 +2954, -0.760253, -0.000000, 0.000000, 0.649627 +2955, -0.770366, -0.000000, 0.000000, 0.637602 +2956, -0.780290, -0.000000, 0.000000, 0.625418 +2957, -0.790020, -0.000000, 0.000000, 0.613081 +2958, -0.799556, -0.000000, 0.000000, 0.600592 +2959, -0.808894, -0.000000, 0.000000, 0.587955 +2960, -0.818032, -0.000000, 0.000000, 0.575172 +2961, -0.826969, -0.000000, 0.000000, 0.562248 +2962, -0.835701, -0.000000, 0.000000, 0.549185 +2963, -0.844227, -0.000000, 0.000000, 0.535986 +2964, -0.852544, -0.000000, 0.000000, 0.522655 +2965, -0.860651, -0.000000, 0.000000, 0.509195 +2966, -0.868546, -0.000000, 0.000000, 0.495609 +2967, -0.876226, -0.000000, 0.000000, 0.481901 +2968, -0.883690, -0.000000, 0.000000, 0.468073 +2969, -0.890935, -0.000000, 0.000000, 0.454130 +2970, -0.897961, -0.000000, 0.000000, 0.440076 +2971, -0.904765, -0.000000, 0.000000, 0.425912 +2972, -0.911345, -0.000000, 0.000000, 0.411643 +2973, -0.917701, -0.000000, 0.000000, 0.397273 +2974, -0.923829, -0.000000, 0.000000, 0.382804 +2975, -0.929730, -0.000000, 0.000000, 0.368241 +2976, -0.935401, -0.000000, 0.000000, 0.353588 +2977, -0.940842, -0.000000, 0.000000, 0.338846 +2978, -0.946050, -0.000000, 0.000000, 0.324021 +2979, -0.951024, -0.000000, 0.000000, 0.309117 +2980, -0.955764, -0.000000, 0.000000, 0.294135 +2981, -0.960267, -0.000000, 0.000000, 0.279082 +2982, -0.964534, -0.000000, 0.000000, 0.263959 +2983, -0.968562, -0.000000, 0.000000, 0.248771 +2984, -0.972352, -0.000000, 0.000000, 0.233522 +2985, -0.975901, -0.000000, 0.000000, 0.218215 +2986, -0.979209, -0.000000, 0.000000, 0.202854 +2987, -0.982275, -0.000000, 0.000000, 0.187443 +2988, -0.985099, -0.000000, 0.000000, 0.171986 +2989, -0.987680, -0.000000, 0.000000, 0.156486 +2990, -0.990017, -0.000000, 0.000000, 0.140948 +2991, -0.992109, -0.000000, 0.000000, 0.125375 +2992, -0.993957, -0.000000, 0.000000, 0.109771 +2993, -0.995559, -0.000000, 0.000000, 0.094140 +2994, -0.996915, -0.000000, 0.000000, 0.078485 +2995, -0.998025, -0.000000, 0.000000, 0.062811 +2996, -0.998889, -0.000000, 0.000000, 0.047122 +2997, -0.999506, -0.000000, 0.000000, 0.031421 +2998, -0.999877, -0.000000, 0.000000, 0.015713 +2999, -1.000000, 0.000000, -0.000000, -0.000000 diff --git a/scripts/trajectories/full_circle_in_15s-Euler.csv b/scripts/trajectories/full_circle_in_15s-Euler.csv new file mode 100644 index 0000000000..5ed447ca26 --- /dev/null +++ b/scripts/trajectories/full_circle_in_15s-Euler.csv @@ -0,0 +1,3000 @@ +0,-3.0,0.000000,0.000000,0.000000 +1,-3.0,0.120000,0.000000,0.000000 +2,-3.0,0.240000,0.000000,0.000000 +3,-3.0,0.360000,0.000000,0.000000 +4,-3.0,0.480000,0.000000,0.000000 +5,-3.0,0.600000,0.000000,0.000000 +6,-3.0,0.720000,0.000000,0.000000 +7,-3.0,0.840000,0.000000,0.000000 +8,-3.0,0.960000,0.000000,0.000000 +9,-3.0,1.080000,0.000000,0.000000 +10,-3.0,1.200000,0.000000,0.000000 +11,-3.0,1.320000,0.000000,0.000000 +12,-3.0,1.440000,0.000000,0.000000 +13,-3.0,1.560000,0.000000,0.000000 +14,-3.0,1.680000,0.000000,0.000000 +15,-3.0,1.800000,0.000000,0.000000 +16,-3.0,1.920000,0.000000,0.000000 +17,-3.0,2.040000,0.000000,0.000000 +18,-3.0,2.160000,0.000000,0.000000 +19,-3.0,2.280000,0.000000,0.000000 +20,-3.0,2.400000,0.000000,0.000000 +21,-3.0,2.520000,0.000000,0.000000 +22,-3.0,2.640000,0.000000,0.000000 +23,-3.0,2.760000,0.000000,0.000000 +24,-3.0,2.880000,0.000000,0.000000 +25,-3.0,3.000000,0.000000,0.000000 +26,-3.0,3.120000,0.000000,0.000000 +27,-3.0,3.240000,0.000000,0.000000 +28,-3.0,3.360000,0.000000,0.000000 +29,-3.0,3.480000,0.000000,0.000000 +30,-3.0,3.600000,0.000000,0.000000 +31,-3.0,3.720000,0.000000,0.000000 +32,-3.0,3.840000,0.000000,0.000000 +33,-3.0,3.960000,0.000000,0.000000 +34,-3.0,4.080000,0.000000,0.000000 +35,-3.0,4.200000,0.000000,0.000000 +36,-3.0,4.320000,0.000000,0.000000 +37,-3.0,4.440000,0.000000,0.000000 +38,-3.0,4.560000,0.000000,0.000000 +39,-3.0,4.680000,0.000000,0.000000 +40,-3.0,4.800000,0.000000,0.000000 +41,-3.0,4.920000,0.000000,0.000000 +42,-3.0,5.040000,0.000000,0.000000 +43,-3.0,5.160000,0.000000,0.000000 +44,-3.0,5.280000,0.000000,0.000000 +45,-3.0,5.400000,0.000000,0.000000 +46,-3.0,5.520000,0.000000,0.000000 +47,-3.0,5.640000,0.000000,0.000000 +48,-3.0,5.760000,0.000000,0.000000 +49,-3.0,5.880000,0.000000,0.000000 +50,-3.0,6.000000,0.000000,0.000000 +51,-3.0,6.120000,0.000000,0.000000 +52,-3.0,6.240000,0.000000,0.000000 +53,-3.0,6.360000,0.000000,0.000000 +54,-3.0,6.480000,0.000000,0.000000 +55,-3.0,6.600000,0.000000,0.000000 +56,-3.0,6.720000,0.000000,0.000000 +57,-3.0,6.840000,0.000000,0.000000 +58,-3.0,6.960000,0.000000,0.000000 +59,-3.0,7.080000,0.000000,0.000000 +60,-3.0,7.200000,0.000000,0.000000 +61,-3.0,7.320000,0.000000,0.000000 +62,-3.0,7.440000,0.000000,0.000000 +63,-3.0,7.560000,0.000000,0.000000 +64,-3.0,7.680000,0.000000,0.000000 +65,-3.0,7.800000,0.000000,0.000000 +66,-3.0,7.920000,0.000000,0.000000 +67,-3.0,8.040000,0.000000,0.000000 +68,-3.0,8.160000,0.000000,0.000000 +69,-3.0,8.280000,0.000000,0.000000 +70,-3.0,8.400000,0.000000,0.000000 +71,-3.0,8.520000,0.000000,0.000000 +72,-3.0,8.640000,0.000000,0.000000 +73,-3.0,8.760000,0.000000,0.000000 +74,-3.0,8.880000,0.000000,0.000000 +75,-3.0,9.000000,0.000000,0.000000 +76,-3.0,9.120000,0.000000,0.000000 +77,-3.0,9.240000,0.000000,0.000000 +78,-3.0,9.360000,0.000000,0.000000 +79,-3.0,9.480000,0.000000,0.000000 +80,-3.0,9.600000,0.000000,0.000000 +81,-3.0,9.720000,0.000000,0.000000 +82,-3.0,9.840000,0.000000,0.000000 +83,-3.0,9.960000,0.000000,0.000000 +84,-3.0,10.080000,0.000000,0.000000 +85,-3.0,10.200000,0.000000,0.000000 +86,-3.0,10.320000,0.000000,0.000000 +87,-3.0,10.440000,0.000000,0.000000 +88,-3.0,10.560000,0.000000,0.000000 +89,-3.0,10.680000,0.000000,0.000000 +90,-3.0,10.800000,0.000000,0.000000 +91,-3.0,10.920000,0.000000,0.000000 +92,-3.0,11.040000,0.000000,0.000000 +93,-3.0,11.160000,0.000000,0.000000 +94,-3.0,11.280000,0.000000,0.000000 +95,-3.0,11.400000,0.000000,0.000000 +96,-3.0,11.520000,0.000000,0.000000 +97,-3.0,11.640000,0.000000,0.000000 +98,-3.0,11.760000,0.000000,0.000000 +99,-3.0,11.880000,0.000000,0.000000 +100,-3.0,12.000000,0.000000,0.000000 +101,-3.0,12.120000,0.000000,0.000000 +102,-3.0,12.240000,0.000000,0.000000 +103,-3.0,12.360000,0.000000,0.000000 +104,-3.0,12.480000,0.000000,0.000000 +105,-3.0,12.600000,0.000000,0.000000 +106,-3.0,12.720000,0.000000,0.000000 +107,-3.0,12.840000,0.000000,0.000000 +108,-3.0,12.960000,0.000000,0.000000 +109,-3.0,13.080000,0.000000,0.000000 +110,-3.0,13.200000,0.000000,0.000000 +111,-3.0,13.320000,0.000000,0.000000 +112,-3.0,13.440000,0.000000,0.000000 +113,-3.0,13.560000,0.000000,0.000000 +114,-3.0,13.680000,0.000000,0.000000 +115,-3.0,13.800000,0.000000,0.000000 +116,-3.0,13.920000,0.000000,0.000000 +117,-3.0,14.040000,0.000000,0.000000 +118,-3.0,14.160000,0.000000,0.000000 +119,-3.0,14.280000,0.000000,0.000000 +120,-3.0,14.400000,0.000000,0.000000 +121,-3.0,14.520000,0.000000,0.000000 +122,-3.0,14.640000,0.000000,0.000000 +123,-3.0,14.760000,0.000000,0.000000 +124,-3.0,14.880000,0.000000,0.000000 +125,-3.0,15.000000,0.000000,0.000000 +126,-3.0,15.120000,0.000000,0.000000 +127,-3.0,15.240000,0.000000,0.000000 +128,-3.0,15.360000,0.000000,0.000000 +129,-3.0,15.480000,0.000000,0.000000 +130,-3.0,15.600000,0.000000,0.000000 +131,-3.0,15.720000,0.000000,0.000000 +132,-3.0,15.840000,0.000000,0.000000 +133,-3.0,15.960000,0.000000,0.000000 +134,-3.0,16.080000,0.000000,0.000000 +135,-3.0,16.200000,0.000000,0.000000 +136,-3.0,16.320000,0.000000,0.000000 +137,-3.0,16.440000,0.000000,0.000000 +138,-3.0,16.560000,0.000000,0.000000 +139,-3.0,16.680000,0.000000,0.000000 +140,-3.0,16.800000,0.000000,0.000000 +141,-3.0,16.920000,0.000000,0.000000 +142,-3.0,17.040000,0.000000,0.000000 +143,-3.0,17.160000,0.000000,0.000000 +144,-3.0,17.280000,0.000000,0.000000 +145,-3.0,17.400000,0.000000,0.000000 +146,-3.0,17.520000,0.000000,0.000000 +147,-3.0,17.640000,0.000000,0.000000 +148,-3.0,17.760000,0.000000,0.000000 +149,-3.0,17.880000,0.000000,0.000000 +150,-3.0,18.000000,0.000000,0.000000 +151,-3.0,18.120000,0.000000,0.000000 +152,-3.0,18.240000,0.000000,0.000000 +153,-3.0,18.360000,0.000000,0.000000 +154,-3.0,18.480000,0.000000,0.000000 +155,-3.0,18.600000,0.000000,0.000000 +156,-3.0,18.720000,0.000000,0.000000 +157,-3.0,18.840000,0.000000,0.000000 +158,-3.0,18.960000,0.000000,0.000000 +159,-3.0,19.080000,0.000000,0.000000 +160,-3.0,19.200000,0.000000,0.000000 +161,-3.0,19.320000,0.000000,0.000000 +162,-3.0,19.440000,0.000000,0.000000 +163,-3.0,19.560000,0.000000,0.000000 +164,-3.0,19.680000,0.000000,0.000000 +165,-3.0,19.800000,0.000000,0.000000 +166,-3.0,19.920000,0.000000,0.000000 +167,-3.0,20.040000,0.000000,0.000000 +168,-3.0,20.160000,0.000000,0.000000 +169,-3.0,20.280000,0.000000,0.000000 +170,-3.0,20.400000,0.000000,0.000000 +171,-3.0,20.520000,0.000000,0.000000 +172,-3.0,20.640000,0.000000,0.000000 +173,-3.0,20.760000,0.000000,0.000000 +174,-3.0,20.880000,0.000000,0.000000 +175,-3.0,21.000000,0.000000,0.000000 +176,-3.0,21.120000,0.000000,0.000000 +177,-3.0,21.240000,0.000000,0.000000 +178,-3.0,21.360000,0.000000,0.000000 +179,-3.0,21.480000,0.000000,0.000000 +180,-3.0,21.600000,0.000000,0.000000 +181,-3.0,21.720000,0.000000,0.000000 +182,-3.0,21.840000,0.000000,0.000000 +183,-3.0,21.960000,0.000000,0.000000 +184,-3.0,22.080000,0.000000,0.000000 +185,-3.0,22.200000,0.000000,0.000000 +186,-3.0,22.320000,0.000000,0.000000 +187,-3.0,22.440000,0.000000,0.000000 +188,-3.0,22.560000,0.000000,0.000000 +189,-3.0,22.680000,0.000000,0.000000 +190,-3.0,22.800000,0.000000,0.000000 +191,-3.0,22.920000,0.000000,0.000000 +192,-3.0,23.040000,0.000000,0.000000 +193,-3.0,23.160000,0.000000,0.000000 +194,-3.0,23.280000,0.000000,0.000000 +195,-3.0,23.400000,0.000000,0.000000 +196,-3.0,23.520000,0.000000,0.000000 +197,-3.0,23.640000,0.000000,0.000000 +198,-3.0,23.760000,0.000000,0.000000 +199,-3.0,23.880000,0.000000,0.000000 +200,-3.0,24.000000,0.000000,0.000000 +201,-3.0,24.120000,0.000000,0.000000 +202,-3.0,24.240000,0.000000,0.000000 +203,-3.0,24.360000,0.000000,0.000000 +204,-3.0,24.480000,0.000000,0.000000 +205,-3.0,24.600000,0.000000,0.000000 +206,-3.0,24.720000,0.000000,0.000000 +207,-3.0,24.840000,0.000000,0.000000 +208,-3.0,24.960000,0.000000,0.000000 +209,-3.0,25.080000,0.000000,0.000000 +210,-3.0,25.200000,0.000000,0.000000 +211,-3.0,25.320000,0.000000,0.000000 +212,-3.0,25.440000,0.000000,0.000000 +213,-3.0,25.560000,0.000000,0.000000 +214,-3.0,25.680000,0.000000,0.000000 +215,-3.0,25.800000,0.000000,0.000000 +216,-3.0,25.920000,0.000000,0.000000 +217,-3.0,26.040000,0.000000,0.000000 +218,-3.0,26.160000,0.000000,0.000000 +219,-3.0,26.280000,0.000000,0.000000 +220,-3.0,26.400000,0.000000,0.000000 +221,-3.0,26.520000,0.000000,0.000000 +222,-3.0,26.640000,0.000000,0.000000 +223,-3.0,26.760000,0.000000,0.000000 +224,-3.0,26.880000,0.000000,0.000000 +225,-3.0,27.000000,0.000000,0.000000 +226,-3.0,27.120000,0.000000,0.000000 +227,-3.0,27.240000,0.000000,0.000000 +228,-3.0,27.360000,0.000000,0.000000 +229,-3.0,27.480000,0.000000,0.000000 +230,-3.0,27.600000,0.000000,0.000000 +231,-3.0,27.720000,0.000000,0.000000 +232,-3.0,27.840000,0.000000,0.000000 +233,-3.0,27.960000,0.000000,0.000000 +234,-3.0,28.080000,0.000000,0.000000 +235,-3.0,28.200000,0.000000,0.000000 +236,-3.0,28.320000,0.000000,0.000000 +237,-3.0,28.440000,0.000000,0.000000 +238,-3.0,28.560000,0.000000,0.000000 +239,-3.0,28.680000,0.000000,0.000000 +240,-3.0,28.800000,0.000000,0.000000 +241,-3.0,28.920000,0.000000,0.000000 +242,-3.0,29.040000,0.000000,0.000000 +243,-3.0,29.160000,0.000000,0.000000 +244,-3.0,29.280000,0.000000,0.000000 +245,-3.0,29.400000,0.000000,0.000000 +246,-3.0,29.520000,0.000000,0.000000 +247,-3.0,29.640000,0.000000,0.000000 +248,-3.0,29.760000,0.000000,0.000000 +249,-3.0,29.880000,0.000000,0.000000 +250,-3.0,30.000000,0.000000,0.000000 +251,-3.0,30.120000,0.000000,0.000000 +252,-3.0,30.240000,0.000000,0.000000 +253,-3.0,30.360000,0.000000,0.000000 +254,-3.0,30.480000,0.000000,0.000000 +255,-3.0,30.600000,0.000000,0.000000 +256,-3.0,30.720000,0.000000,0.000000 +257,-3.0,30.840000,0.000000,0.000000 +258,-3.0,30.960000,0.000000,0.000000 +259,-3.0,31.080000,0.000000,0.000000 +260,-3.0,31.200000,0.000000,0.000000 +261,-3.0,31.320000,0.000000,0.000000 +262,-3.0,31.440000,0.000000,0.000000 +263,-3.0,31.560000,0.000000,0.000000 +264,-3.0,31.680000,0.000000,0.000000 +265,-3.0,31.800000,0.000000,0.000000 +266,-3.0,31.920000,0.000000,0.000000 +267,-3.0,32.040000,0.000000,0.000000 +268,-3.0,32.160000,0.000000,0.000000 +269,-3.0,32.280000,0.000000,0.000000 +270,-3.0,32.400000,0.000000,0.000000 +271,-3.0,32.520000,0.000000,0.000000 +272,-3.0,32.640000,0.000000,0.000000 +273,-3.0,32.760000,0.000000,0.000000 +274,-3.0,32.880000,0.000000,0.000000 +275,-3.0,33.000000,0.000000,0.000000 +276,-3.0,33.120000,0.000000,0.000000 +277,-3.0,33.240000,0.000000,0.000000 +278,-3.0,33.360000,0.000000,0.000000 +279,-3.0,33.480000,0.000000,0.000000 +280,-3.0,33.600000,0.000000,0.000000 +281,-3.0,33.720000,0.000000,0.000000 +282,-3.0,33.840000,0.000000,0.000000 +283,-3.0,33.960000,0.000000,0.000000 +284,-3.0,34.080000,0.000000,0.000000 +285,-3.0,34.200000,0.000000,0.000000 +286,-3.0,34.320000,0.000000,0.000000 +287,-3.0,34.440000,0.000000,0.000000 +288,-3.0,34.560000,0.000000,0.000000 +289,-3.0,34.680000,0.000000,0.000000 +290,-3.0,34.800000,0.000000,0.000000 +291,-3.0,34.920000,0.000000,0.000000 +292,-3.0,35.040000,0.000000,0.000000 +293,-3.0,35.160000,0.000000,0.000000 +294,-3.0,35.280000,0.000000,0.000000 +295,-3.0,35.400000,0.000000,0.000000 +296,-3.0,35.520000,0.000000,0.000000 +297,-3.0,35.640000,0.000000,0.000000 +298,-3.0,35.760000,0.000000,0.000000 +299,-3.0,35.880000,0.000000,0.000000 +300,-3.0,36.000000,0.000000,0.000000 +301,-3.0,36.120000,0.000000,0.000000 +302,-3.0,36.240000,0.000000,0.000000 +303,-3.0,36.360000,0.000000,0.000000 +304,-3.0,36.480000,0.000000,0.000000 +305,-3.0,36.600000,0.000000,0.000000 +306,-3.0,36.720000,0.000000,0.000000 +307,-3.0,36.840000,0.000000,0.000000 +308,-3.0,36.960000,0.000000,0.000000 +309,-3.0,37.080000,0.000000,0.000000 +310,-3.0,37.200000,0.000000,0.000000 +311,-3.0,37.320000,0.000000,0.000000 +312,-3.0,37.440000,0.000000,0.000000 +313,-3.0,37.560000,0.000000,0.000000 +314,-3.0,37.680000,0.000000,0.000000 +315,-3.0,37.800000,0.000000,0.000000 +316,-3.0,37.920000,0.000000,0.000000 +317,-3.0,38.040000,0.000000,0.000000 +318,-3.0,38.160000,0.000000,0.000000 +319,-3.0,38.280000,0.000000,0.000000 +320,-3.0,38.400000,0.000000,0.000000 +321,-3.0,38.520000,0.000000,0.000000 +322,-3.0,38.640000,0.000000,0.000000 +323,-3.0,38.760000,0.000000,0.000000 +324,-3.0,38.880000,0.000000,0.000000 +325,-3.0,39.000000,0.000000,0.000000 +326,-3.0,39.120000,0.000000,0.000000 +327,-3.0,39.240000,0.000000,0.000000 +328,-3.0,39.360000,0.000000,0.000000 +329,-3.0,39.480000,0.000000,0.000000 +330,-3.0,39.600000,0.000000,0.000000 +331,-3.0,39.720000,0.000000,0.000000 +332,-3.0,39.840000,0.000000,0.000000 +333,-3.0,39.960000,0.000000,0.000000 +334,-3.0,40.080000,0.000000,0.000000 +335,-3.0,40.200000,0.000000,0.000000 +336,-3.0,40.320000,0.000000,0.000000 +337,-3.0,40.440000,0.000000,0.000000 +338,-3.0,40.560000,0.000000,0.000000 +339,-3.0,40.680000,0.000000,0.000000 +340,-3.0,40.800000,0.000000,0.000000 +341,-3.0,40.920000,0.000000,0.000000 +342,-3.0,41.040000,0.000000,0.000000 +343,-3.0,41.160000,0.000000,0.000000 +344,-3.0,41.280000,0.000000,0.000000 +345,-3.0,41.400000,0.000000,0.000000 +346,-3.0,41.520000,0.000000,0.000000 +347,-3.0,41.640000,0.000000,0.000000 +348,-3.0,41.760000,0.000000,0.000000 +349,-3.0,41.880000,0.000000,0.000000 +350,-3.0,42.000000,0.000000,0.000000 +351,-3.0,42.120000,0.000000,0.000000 +352,-3.0,42.240000,0.000000,0.000000 +353,-3.0,42.360000,0.000000,0.000000 +354,-3.0,42.480000,0.000000,0.000000 +355,-3.0,42.600000,0.000000,0.000000 +356,-3.0,42.720000,0.000000,0.000000 +357,-3.0,42.840000,0.000000,0.000000 +358,-3.0,42.960000,0.000000,0.000000 +359,-3.0,43.080000,0.000000,0.000000 +360,-3.0,43.200000,0.000000,0.000000 +361,-3.0,43.320000,0.000000,0.000000 +362,-3.0,43.440000,0.000000,0.000000 +363,-3.0,43.560000,0.000000,0.000000 +364,-3.0,43.680000,0.000000,0.000000 +365,-3.0,43.800000,0.000000,0.000000 +366,-3.0,43.920000,0.000000,0.000000 +367,-3.0,44.040000,0.000000,0.000000 +368,-3.0,44.160000,0.000000,0.000000 +369,-3.0,44.280000,0.000000,0.000000 +370,-3.0,44.400000,0.000000,0.000000 +371,-3.0,44.520000,0.000000,0.000000 +372,-3.0,44.640000,0.000000,0.000000 +373,-3.0,44.760000,0.000000,0.000000 +374,-3.0,44.880000,0.000000,0.000000 +375,-3.0,45.000000,0.000000,0.000000 +376,-3.0,45.120000,0.000000,0.000000 +377,-3.0,45.240000,0.000000,0.000000 +378,-3.0,45.360000,0.000000,0.000000 +379,-3.0,45.480000,0.000000,0.000000 +380,-3.0,45.600000,0.000000,0.000000 +381,-3.0,45.720000,0.000000,0.000000 +382,-3.0,45.840000,0.000000,0.000000 +383,-3.0,45.960000,0.000000,0.000000 +384,-3.0,46.080000,0.000000,0.000000 +385,-3.0,46.200000,0.000000,0.000000 +386,-3.0,46.320000,0.000000,0.000000 +387,-3.0,46.440000,0.000000,0.000000 +388,-3.0,46.560000,0.000000,0.000000 +389,-3.0,46.680000,0.000000,0.000000 +390,-3.0,46.800000,0.000000,0.000000 +391,-3.0,46.920000,0.000000,0.000000 +392,-3.0,47.040000,0.000000,0.000000 +393,-3.0,47.160000,0.000000,0.000000 +394,-3.0,47.280000,0.000000,0.000000 +395,-3.0,47.400000,0.000000,0.000000 +396,-3.0,47.520000,0.000000,0.000000 +397,-3.0,47.640000,0.000000,0.000000 +398,-3.0,47.760000,0.000000,0.000000 +399,-3.0,47.880000,0.000000,0.000000 +400,-3.0,48.000000,0.000000,0.000000 +401,-3.0,48.120000,0.000000,0.000000 +402,-3.0,48.240000,0.000000,0.000000 +403,-3.0,48.360000,0.000000,0.000000 +404,-3.0,48.480000,0.000000,0.000000 +405,-3.0,48.600000,0.000000,0.000000 +406,-3.0,48.720000,0.000000,0.000000 +407,-3.0,48.840000,0.000000,0.000000 +408,-3.0,48.960000,0.000000,0.000000 +409,-3.0,49.080000,0.000000,0.000000 +410,-3.0,49.200000,0.000000,0.000000 +411,-3.0,49.320000,0.000000,0.000000 +412,-3.0,49.440000,0.000000,0.000000 +413,-3.0,49.560000,0.000000,0.000000 +414,-3.0,49.680000,0.000000,0.000000 +415,-3.0,49.800000,0.000000,0.000000 +416,-3.0,49.920000,0.000000,0.000000 +417,-3.0,50.040000,0.000000,0.000000 +418,-3.0,50.160000,0.000000,0.000000 +419,-3.0,50.280000,0.000000,0.000000 +420,-3.0,50.400000,0.000000,0.000000 +421,-3.0,50.520000,0.000000,0.000000 +422,-3.0,50.640000,0.000000,0.000000 +423,-3.0,50.760000,0.000000,0.000000 +424,-3.0,50.880000,0.000000,0.000000 +425,-3.0,51.000000,0.000000,0.000000 +426,-3.0,51.120000,0.000000,0.000000 +427,-3.0,51.240000,0.000000,0.000000 +428,-3.0,51.360000,0.000000,0.000000 +429,-3.0,51.480000,0.000000,0.000000 +430,-3.0,51.600000,0.000000,0.000000 +431,-3.0,51.720000,0.000000,0.000000 +432,-3.0,51.840000,0.000000,0.000000 +433,-3.0,51.960000,0.000000,0.000000 +434,-3.0,52.080000,0.000000,0.000000 +435,-3.0,52.200000,0.000000,0.000000 +436,-3.0,52.320000,0.000000,0.000000 +437,-3.0,52.440000,0.000000,0.000000 +438,-3.0,52.560000,0.000000,0.000000 +439,-3.0,52.680000,0.000000,0.000000 +440,-3.0,52.800000,0.000000,0.000000 +441,-3.0,52.920000,0.000000,0.000000 +442,-3.0,53.040000,0.000000,0.000000 +443,-3.0,53.160000,0.000000,0.000000 +444,-3.0,53.280000,0.000000,0.000000 +445,-3.0,53.400000,0.000000,0.000000 +446,-3.0,53.520000,0.000000,0.000000 +447,-3.0,53.640000,0.000000,0.000000 +448,-3.0,53.760000,0.000000,0.000000 +449,-3.0,53.880000,0.000000,0.000000 +450,-3.0,54.000000,0.000000,0.000000 +451,-3.0,54.120000,0.000000,0.000000 +452,-3.0,54.240000,0.000000,0.000000 +453,-3.0,54.360000,0.000000,0.000000 +454,-3.0,54.480000,0.000000,0.000000 +455,-3.0,54.600000,0.000000,0.000000 +456,-3.0,54.720000,0.000000,0.000000 +457,-3.0,54.840000,0.000000,0.000000 +458,-3.0,54.960000,0.000000,0.000000 +459,-3.0,55.080000,0.000000,0.000000 +460,-3.0,55.200000,0.000000,0.000000 +461,-3.0,55.320000,0.000000,0.000000 +462,-3.0,55.440000,0.000000,0.000000 +463,-3.0,55.560000,0.000000,0.000000 +464,-3.0,55.680000,0.000000,0.000000 +465,-3.0,55.800000,0.000000,0.000000 +466,-3.0,55.920000,0.000000,0.000000 +467,-3.0,56.040000,0.000000,0.000000 +468,-3.0,56.160000,0.000000,0.000000 +469,-3.0,56.280000,0.000000,0.000000 +470,-3.0,56.400000,0.000000,0.000000 +471,-3.0,56.520000,0.000000,0.000000 +472,-3.0,56.640000,0.000000,0.000000 +473,-3.0,56.760000,0.000000,0.000000 +474,-3.0,56.880000,0.000000,0.000000 +475,-3.0,57.000000,0.000000,0.000000 +476,-3.0,57.120000,0.000000,0.000000 +477,-3.0,57.240000,0.000000,0.000000 +478,-3.0,57.360000,0.000000,0.000000 +479,-3.0,57.480000,0.000000,0.000000 +480,-3.0,57.600000,0.000000,0.000000 +481,-3.0,57.720000,0.000000,0.000000 +482,-3.0,57.840000,0.000000,0.000000 +483,-3.0,57.960000,0.000000,0.000000 +484,-3.0,58.080000,0.000000,0.000000 +485,-3.0,58.200000,0.000000,0.000000 +486,-3.0,58.320000,0.000000,0.000000 +487,-3.0,58.440000,0.000000,0.000000 +488,-3.0,58.560000,0.000000,0.000000 +489,-3.0,58.680000,0.000000,0.000000 +490,-3.0,58.800000,0.000000,0.000000 +491,-3.0,58.920000,0.000000,0.000000 +492,-3.0,59.040000,0.000000,0.000000 +493,-3.0,59.160000,0.000000,0.000000 +494,-3.0,59.280000,0.000000,0.000000 +495,-3.0,59.400000,0.000000,0.000000 +496,-3.0,59.520000,0.000000,0.000000 +497,-3.0,59.640000,0.000000,0.000000 +498,-3.0,59.760000,0.000000,0.000000 +499,-3.0,59.880000,0.000000,0.000000 +500,-3.0,60.000000,0.000000,0.000000 +501,-3.0,60.120000,0.000000,0.000000 +502,-3.0,60.240000,0.000000,0.000000 +503,-3.0,60.360000,0.000000,0.000000 +504,-3.0,60.480000,0.000000,0.000000 +505,-3.0,60.600000,0.000000,0.000000 +506,-3.0,60.720000,0.000000,0.000000 +507,-3.0,60.840000,0.000000,0.000000 +508,-3.0,60.960000,0.000000,0.000000 +509,-3.0,61.080000,0.000000,0.000000 +510,-3.0,61.200000,0.000000,0.000000 +511,-3.0,61.320000,0.000000,0.000000 +512,-3.0,61.440000,0.000000,0.000000 +513,-3.0,61.560000,0.000000,0.000000 +514,-3.0,61.680000,0.000000,0.000000 +515,-3.0,61.800000,0.000000,0.000000 +516,-3.0,61.920000,0.000000,0.000000 +517,-3.0,62.040000,0.000000,0.000000 +518,-3.0,62.160000,0.000000,0.000000 +519,-3.0,62.280000,0.000000,0.000000 +520,-3.0,62.400000,0.000000,0.000000 +521,-3.0,62.520000,0.000000,0.000000 +522,-3.0,62.640000,0.000000,0.000000 +523,-3.0,62.760000,0.000000,0.000000 +524,-3.0,62.880000,0.000000,0.000000 +525,-3.0,63.000000,0.000000,0.000000 +526,-3.0,63.120000,0.000000,0.000000 +527,-3.0,63.240000,0.000000,0.000000 +528,-3.0,63.360000,0.000000,0.000000 +529,-3.0,63.480000,0.000000,0.000000 +530,-3.0,63.600000,0.000000,0.000000 +531,-3.0,63.720000,0.000000,0.000000 +532,-3.0,63.840000,0.000000,0.000000 +533,-3.0,63.960000,0.000000,0.000000 +534,-3.0,64.080000,0.000000,0.000000 +535,-3.0,64.200000,0.000000,0.000000 +536,-3.0,64.320000,0.000000,0.000000 +537,-3.0,64.440000,0.000000,0.000000 +538,-3.0,64.560000,0.000000,0.000000 +539,-3.0,64.680000,0.000000,0.000000 +540,-3.0,64.800000,0.000000,0.000000 +541,-3.0,64.920000,0.000000,0.000000 +542,-3.0,65.040000,0.000000,0.000000 +543,-3.0,65.160000,0.000000,0.000000 +544,-3.0,65.280000,0.000000,0.000000 +545,-3.0,65.400000,0.000000,0.000000 +546,-3.0,65.520000,0.000000,0.000000 +547,-3.0,65.640000,0.000000,0.000000 +548,-3.0,65.760000,0.000000,0.000000 +549,-3.0,65.880000,0.000000,0.000000 +550,-3.0,66.000000,0.000000,0.000000 +551,-3.0,66.120000,0.000000,0.000000 +552,-3.0,66.240000,0.000000,0.000000 +553,-3.0,66.360000,0.000000,0.000000 +554,-3.0,66.480000,0.000000,0.000000 +555,-3.0,66.600000,0.000000,0.000000 +556,-3.0,66.720000,0.000000,0.000000 +557,-3.0,66.840000,0.000000,0.000000 +558,-3.0,66.960000,0.000000,0.000000 +559,-3.0,67.080000,0.000000,0.000000 +560,-3.0,67.200000,0.000000,0.000000 +561,-3.0,67.320000,0.000000,0.000000 +562,-3.0,67.440000,0.000000,0.000000 +563,-3.0,67.560000,0.000000,0.000000 +564,-3.0,67.680000,0.000000,0.000000 +565,-3.0,67.800000,0.000000,0.000000 +566,-3.0,67.920000,0.000000,0.000000 +567,-3.0,68.040000,0.000000,0.000000 +568,-3.0,68.160000,0.000000,0.000000 +569,-3.0,68.280000,0.000000,0.000000 +570,-3.0,68.400000,0.000000,0.000000 +571,-3.0,68.520000,0.000000,0.000000 +572,-3.0,68.640000,0.000000,0.000000 +573,-3.0,68.760000,0.000000,0.000000 +574,-3.0,68.880000,0.000000,0.000000 +575,-3.0,69.000000,0.000000,0.000000 +576,-3.0,69.120000,0.000000,0.000000 +577,-3.0,69.240000,0.000000,0.000000 +578,-3.0,69.360000,0.000000,0.000000 +579,-3.0,69.480000,0.000000,0.000000 +580,-3.0,69.600000,0.000000,0.000000 +581,-3.0,69.720000,0.000000,0.000000 +582,-3.0,69.840000,0.000000,0.000000 +583,-3.0,69.960000,0.000000,0.000000 +584,-3.0,70.080000,0.000000,0.000000 +585,-3.0,70.200000,0.000000,0.000000 +586,-3.0,70.320000,0.000000,0.000000 +587,-3.0,70.440000,0.000000,0.000000 +588,-3.0,70.560000,0.000000,0.000000 +589,-3.0,70.680000,0.000000,0.000000 +590,-3.0,70.800000,0.000000,0.000000 +591,-3.0,70.920000,0.000000,0.000000 +592,-3.0,71.040000,0.000000,0.000000 +593,-3.0,71.160000,0.000000,0.000000 +594,-3.0,71.280000,0.000000,0.000000 +595,-3.0,71.400000,0.000000,0.000000 +596,-3.0,71.520000,0.000000,0.000000 +597,-3.0,71.640000,0.000000,0.000000 +598,-3.0,71.760000,0.000000,0.000000 +599,-3.0,71.880000,0.000000,0.000000 +600,-3.0,72.000000,0.000000,0.000000 +601,-3.0,72.120000,0.000000,0.000000 +602,-3.0,72.240000,0.000000,0.000000 +603,-3.0,72.360000,0.000000,0.000000 +604,-3.0,72.480000,0.000000,0.000000 +605,-3.0,72.600000,0.000000,0.000000 +606,-3.0,72.720000,0.000000,0.000000 +607,-3.0,72.840000,0.000000,0.000000 +608,-3.0,72.960000,0.000000,0.000000 +609,-3.0,73.080000,0.000000,0.000000 +610,-3.0,73.200000,0.000000,0.000000 +611,-3.0,73.320000,0.000000,0.000000 +612,-3.0,73.440000,0.000000,0.000000 +613,-3.0,73.560000,0.000000,0.000000 +614,-3.0,73.680000,0.000000,0.000000 +615,-3.0,73.800000,0.000000,0.000000 +616,-3.0,73.920000,0.000000,0.000000 +617,-3.0,74.040000,0.000000,0.000000 +618,-3.0,74.160000,0.000000,0.000000 +619,-3.0,74.280000,0.000000,0.000000 +620,-3.0,74.400000,0.000000,0.000000 +621,-3.0,74.520000,0.000000,0.000000 +622,-3.0,74.640000,0.000000,0.000000 +623,-3.0,74.760000,0.000000,0.000000 +624,-3.0,74.880000,0.000000,0.000000 +625,-3.0,75.000000,0.000000,0.000000 +626,-3.0,75.120000,0.000000,0.000000 +627,-3.0,75.240000,0.000000,0.000000 +628,-3.0,75.360000,0.000000,0.000000 +629,-3.0,75.480000,0.000000,0.000000 +630,-3.0,75.600000,0.000000,0.000000 +631,-3.0,75.720000,0.000000,0.000000 +632,-3.0,75.840000,0.000000,0.000000 +633,-3.0,75.960000,0.000000,0.000000 +634,-3.0,76.080000,0.000000,0.000000 +635,-3.0,76.200000,0.000000,0.000000 +636,-3.0,76.320000,0.000000,0.000000 +637,-3.0,76.440000,0.000000,0.000000 +638,-3.0,76.560000,0.000000,0.000000 +639,-3.0,76.680000,0.000000,0.000000 +640,-3.0,76.800000,0.000000,0.000000 +641,-3.0,76.920000,0.000000,0.000000 +642,-3.0,77.040000,0.000000,0.000000 +643,-3.0,77.160000,0.000000,0.000000 +644,-3.0,77.280000,0.000000,0.000000 +645,-3.0,77.400000,0.000000,0.000000 +646,-3.0,77.520000,0.000000,0.000000 +647,-3.0,77.640000,0.000000,0.000000 +648,-3.0,77.760000,0.000000,0.000000 +649,-3.0,77.880000,0.000000,0.000000 +650,-3.0,78.000000,0.000000,0.000000 +651,-3.0,78.120000,0.000000,0.000000 +652,-3.0,78.240000,0.000000,0.000000 +653,-3.0,78.360000,0.000000,0.000000 +654,-3.0,78.480000,0.000000,0.000000 +655,-3.0,78.600000,0.000000,0.000000 +656,-3.0,78.720000,0.000000,0.000000 +657,-3.0,78.840000,0.000000,0.000000 +658,-3.0,78.960000,0.000000,0.000000 +659,-3.0,79.080000,0.000000,0.000000 +660,-3.0,79.200000,0.000000,0.000000 +661,-3.0,79.320000,0.000000,0.000000 +662,-3.0,79.440000,0.000000,0.000000 +663,-3.0,79.560000,0.000000,0.000000 +664,-3.0,79.680000,0.000000,0.000000 +665,-3.0,79.800000,0.000000,0.000000 +666,-3.0,79.920000,0.000000,0.000000 +667,-3.0,80.040000,0.000000,0.000000 +668,-3.0,80.160000,0.000000,0.000000 +669,-3.0,80.280000,0.000000,0.000000 +670,-3.0,80.400000,0.000000,0.000000 +671,-3.0,80.520000,0.000000,0.000000 +672,-3.0,80.640000,0.000000,0.000000 +673,-3.0,80.760000,0.000000,0.000000 +674,-3.0,80.880000,0.000000,0.000000 +675,-3.0,81.000000,0.000000,0.000000 +676,-3.0,81.120000,0.000000,0.000000 +677,-3.0,81.240000,0.000000,0.000000 +678,-3.0,81.360000,0.000000,0.000000 +679,-3.0,81.480000,0.000000,0.000000 +680,-3.0,81.600000,0.000000,0.000000 +681,-3.0,81.720000,0.000000,0.000000 +682,-3.0,81.840000,0.000000,0.000000 +683,-3.0,81.960000,0.000000,0.000000 +684,-3.0,82.080000,0.000000,0.000000 +685,-3.0,82.200000,0.000000,0.000000 +686,-3.0,82.320000,0.000000,0.000000 +687,-3.0,82.440000,0.000000,0.000000 +688,-3.0,82.560000,0.000000,0.000000 +689,-3.0,82.680000,0.000000,0.000000 +690,-3.0,82.800000,0.000000,0.000000 +691,-3.0,82.920000,0.000000,0.000000 +692,-3.0,83.040000,0.000000,0.000000 +693,-3.0,83.160000,0.000000,0.000000 +694,-3.0,83.280000,0.000000,0.000000 +695,-3.0,83.400000,0.000000,0.000000 +696,-3.0,83.520000,0.000000,0.000000 +697,-3.0,83.640000,0.000000,0.000000 +698,-3.0,83.760000,0.000000,0.000000 +699,-3.0,83.880000,0.000000,0.000000 +700,-3.0,84.000000,0.000000,0.000000 +701,-3.0,84.120000,0.000000,0.000000 +702,-3.0,84.240000,0.000000,0.000000 +703,-3.0,84.360000,0.000000,0.000000 +704,-3.0,84.480000,0.000000,0.000000 +705,-3.0,84.600000,0.000000,0.000000 +706,-3.0,84.720000,0.000000,0.000000 +707,-3.0,84.840000,0.000000,0.000000 +708,-3.0,84.960000,0.000000,0.000000 +709,-3.0,85.080000,0.000000,0.000000 +710,-3.0,85.200000,0.000000,0.000000 +711,-3.0,85.320000,0.000000,0.000000 +712,-3.0,85.440000,0.000000,0.000000 +713,-3.0,85.560000,0.000000,0.000000 +714,-3.0,85.680000,0.000000,0.000000 +715,-3.0,85.800000,0.000000,0.000000 +716,-3.0,85.920000,0.000000,0.000000 +717,-3.0,86.040000,0.000000,0.000000 +718,-3.0,86.160000,0.000000,0.000000 +719,-3.0,86.280000,0.000000,0.000000 +720,-3.0,86.400000,0.000000,0.000000 +721,-3.0,86.520000,0.000000,0.000000 +722,-3.0,86.640000,0.000000,0.000000 +723,-3.0,86.760000,0.000000,0.000000 +724,-3.0,86.880000,0.000000,0.000000 +725,-3.0,87.000000,0.000000,0.000000 +726,-3.0,87.120000,0.000000,0.000000 +727,-3.0,87.240000,0.000000,0.000000 +728,-3.0,87.360000,0.000000,0.000000 +729,-3.0,87.480000,0.000000,0.000000 +730,-3.0,87.600000,0.000000,0.000000 +731,-3.0,87.720000,0.000000,0.000000 +732,-3.0,87.840000,0.000000,0.000000 +733,-3.0,87.960000,0.000000,0.000000 +734,-3.0,88.080000,0.000000,0.000000 +735,-3.0,88.200000,0.000000,0.000000 +736,-3.0,88.320000,0.000000,0.000000 +737,-3.0,88.440000,0.000000,0.000000 +738,-3.0,88.560000,0.000000,0.000000 +739,-3.0,88.680000,0.000000,0.000000 +740,-3.0,88.800000,0.000000,0.000000 +741,-3.0,88.920000,0.000000,0.000000 +742,-3.0,89.040000,0.000000,0.000000 +743,-3.0,89.160000,0.000000,0.000000 +744,-3.0,89.280000,0.000000,0.000000 +745,-3.0,89.400000,0.000000,0.000000 +746,-3.0,89.520000,0.000000,0.000000 +747,-3.0,89.640000,0.000000,0.000000 +748,-3.0,89.760000,0.000000,0.000000 +749,-3.0,89.880000,0.000000,0.000000 +750,-3.0,90.000000,0.000000,0.000000 +751,-3.0,90.120000,0.000000,0.000000 +752,-3.0,90.240000,0.000000,0.000000 +753,-3.0,90.360000,0.000000,0.000000 +754,-3.0,90.480000,0.000000,0.000000 +755,-3.0,90.600000,0.000000,0.000000 +756,-3.0,90.720000,0.000000,0.000000 +757,-3.0,90.840000,0.000000,0.000000 +758,-3.0,90.960000,0.000000,0.000000 +759,-3.0,91.080000,0.000000,0.000000 +760,-3.0,91.200000,0.000000,0.000000 +761,-3.0,91.320000,0.000000,0.000000 +762,-3.0,91.440000,0.000000,0.000000 +763,-3.0,91.560000,0.000000,0.000000 +764,-3.0,91.680000,0.000000,0.000000 +765,-3.0,91.800000,0.000000,0.000000 +766,-3.0,91.920000,0.000000,0.000000 +767,-3.0,92.040000,0.000000,0.000000 +768,-3.0,92.160000,0.000000,0.000000 +769,-3.0,92.280000,0.000000,0.000000 +770,-3.0,92.400000,0.000000,0.000000 +771,-3.0,92.520000,0.000000,0.000000 +772,-3.0,92.640000,0.000000,0.000000 +773,-3.0,92.760000,0.000000,0.000000 +774,-3.0,92.880000,0.000000,0.000000 +775,-3.0,93.000000,0.000000,0.000000 +776,-3.0,93.120000,0.000000,0.000000 +777,-3.0,93.240000,0.000000,0.000000 +778,-3.0,93.360000,0.000000,0.000000 +779,-3.0,93.480000,0.000000,0.000000 +780,-3.0,93.600000,0.000000,0.000000 +781,-3.0,93.720000,0.000000,0.000000 +782,-3.0,93.840000,0.000000,0.000000 +783,-3.0,93.960000,0.000000,0.000000 +784,-3.0,94.080000,0.000000,0.000000 +785,-3.0,94.200000,0.000000,0.000000 +786,-3.0,94.320000,0.000000,0.000000 +787,-3.0,94.440000,0.000000,0.000000 +788,-3.0,94.560000,0.000000,0.000000 +789,-3.0,94.680000,0.000000,0.000000 +790,-3.0,94.800000,0.000000,0.000000 +791,-3.0,94.920000,0.000000,0.000000 +792,-3.0,95.040000,0.000000,0.000000 +793,-3.0,95.160000,0.000000,0.000000 +794,-3.0,95.280000,0.000000,0.000000 +795,-3.0,95.400000,0.000000,0.000000 +796,-3.0,95.520000,0.000000,0.000000 +797,-3.0,95.640000,0.000000,0.000000 +798,-3.0,95.760000,0.000000,0.000000 +799,-3.0,95.880000,0.000000,0.000000 +800,-3.0,96.000000,0.000000,0.000000 +801,-3.0,96.120000,0.000000,0.000000 +802,-3.0,96.240000,0.000000,0.000000 +803,-3.0,96.360000,0.000000,0.000000 +804,-3.0,96.480000,0.000000,0.000000 +805,-3.0,96.600000,0.000000,0.000000 +806,-3.0,96.720000,0.000000,0.000000 +807,-3.0,96.840000,0.000000,0.000000 +808,-3.0,96.960000,0.000000,0.000000 +809,-3.0,97.080000,0.000000,0.000000 +810,-3.0,97.200000,0.000000,0.000000 +811,-3.0,97.320000,0.000000,0.000000 +812,-3.0,97.440000,0.000000,0.000000 +813,-3.0,97.560000,0.000000,0.000000 +814,-3.0,97.680000,0.000000,0.000000 +815,-3.0,97.800000,0.000000,0.000000 +816,-3.0,97.920000,0.000000,0.000000 +817,-3.0,98.040000,0.000000,0.000000 +818,-3.0,98.160000,0.000000,0.000000 +819,-3.0,98.280000,0.000000,0.000000 +820,-3.0,98.400000,0.000000,0.000000 +821,-3.0,98.520000,0.000000,0.000000 +822,-3.0,98.640000,0.000000,0.000000 +823,-3.0,98.760000,0.000000,0.000000 +824,-3.0,98.880000,0.000000,0.000000 +825,-3.0,99.000000,0.000000,0.000000 +826,-3.0,99.120000,0.000000,0.000000 +827,-3.0,99.240000,0.000000,0.000000 +828,-3.0,99.360000,0.000000,0.000000 +829,-3.0,99.480000,0.000000,0.000000 +830,-3.0,99.600000,0.000000,0.000000 +831,-3.0,99.720000,0.000000,0.000000 +832,-3.0,99.840000,0.000000,0.000000 +833,-3.0,99.960000,0.000000,0.000000 +834,-3.0,100.080000,0.000000,0.000000 +835,-3.0,100.200000,0.000000,0.000000 +836,-3.0,100.320000,0.000000,0.000000 +837,-3.0,100.440000,0.000000,0.000000 +838,-3.0,100.560000,0.000000,0.000000 +839,-3.0,100.680000,0.000000,0.000000 +840,-3.0,100.800000,0.000000,0.000000 +841,-3.0,100.920000,0.000000,0.000000 +842,-3.0,101.040000,0.000000,0.000000 +843,-3.0,101.160000,0.000000,0.000000 +844,-3.0,101.280000,0.000000,0.000000 +845,-3.0,101.400000,0.000000,0.000000 +846,-3.0,101.520000,0.000000,0.000000 +847,-3.0,101.640000,0.000000,0.000000 +848,-3.0,101.760000,0.000000,0.000000 +849,-3.0,101.880000,0.000000,0.000000 +850,-3.0,102.000000,0.000000,0.000000 +851,-3.0,102.120000,0.000000,0.000000 +852,-3.0,102.240000,0.000000,0.000000 +853,-3.0,102.360000,0.000000,0.000000 +854,-3.0,102.480000,0.000000,0.000000 +855,-3.0,102.600000,0.000000,0.000000 +856,-3.0,102.720000,0.000000,0.000000 +857,-3.0,102.840000,0.000000,0.000000 +858,-3.0,102.960000,0.000000,0.000000 +859,-3.0,103.080000,0.000000,0.000000 +860,-3.0,103.200000,0.000000,0.000000 +861,-3.0,103.320000,0.000000,0.000000 +862,-3.0,103.440000,0.000000,0.000000 +863,-3.0,103.560000,0.000000,0.000000 +864,-3.0,103.680000,0.000000,0.000000 +865,-3.0,103.800000,0.000000,0.000000 +866,-3.0,103.920000,0.000000,0.000000 +867,-3.0,104.040000,0.000000,0.000000 +868,-3.0,104.160000,0.000000,0.000000 +869,-3.0,104.280000,0.000000,0.000000 +870,-3.0,104.400000,0.000000,0.000000 +871,-3.0,104.520000,0.000000,0.000000 +872,-3.0,104.640000,0.000000,0.000000 +873,-3.0,104.760000,0.000000,0.000000 +874,-3.0,104.880000,0.000000,0.000000 +875,-3.0,105.000000,0.000000,0.000000 +876,-3.0,105.120000,0.000000,0.000000 +877,-3.0,105.240000,0.000000,0.000000 +878,-3.0,105.360000,0.000000,0.000000 +879,-3.0,105.480000,0.000000,0.000000 +880,-3.0,105.600000,0.000000,0.000000 +881,-3.0,105.720000,0.000000,0.000000 +882,-3.0,105.840000,0.000000,0.000000 +883,-3.0,105.960000,0.000000,0.000000 +884,-3.0,106.080000,0.000000,0.000000 +885,-3.0,106.200000,0.000000,0.000000 +886,-3.0,106.320000,0.000000,0.000000 +887,-3.0,106.440000,0.000000,0.000000 +888,-3.0,106.560000,0.000000,0.000000 +889,-3.0,106.680000,0.000000,0.000000 +890,-3.0,106.800000,0.000000,0.000000 +891,-3.0,106.920000,0.000000,0.000000 +892,-3.0,107.040000,0.000000,0.000000 +893,-3.0,107.160000,0.000000,0.000000 +894,-3.0,107.280000,0.000000,0.000000 +895,-3.0,107.400000,0.000000,0.000000 +896,-3.0,107.520000,0.000000,0.000000 +897,-3.0,107.640000,0.000000,0.000000 +898,-3.0,107.760000,0.000000,0.000000 +899,-3.0,107.880000,0.000000,0.000000 +900,-3.0,108.000000,0.000000,0.000000 +901,-3.0,108.120000,0.000000,0.000000 +902,-3.0,108.240000,0.000000,0.000000 +903,-3.0,108.360000,0.000000,0.000000 +904,-3.0,108.480000,0.000000,0.000000 +905,-3.0,108.600000,0.000000,0.000000 +906,-3.0,108.720000,0.000000,0.000000 +907,-3.0,108.840000,0.000000,0.000000 +908,-3.0,108.960000,0.000000,0.000000 +909,-3.0,109.080000,0.000000,0.000000 +910,-3.0,109.200000,0.000000,0.000000 +911,-3.0,109.320000,0.000000,0.000000 +912,-3.0,109.440000,0.000000,0.000000 +913,-3.0,109.560000,0.000000,0.000000 +914,-3.0,109.680000,0.000000,0.000000 +915,-3.0,109.800000,0.000000,0.000000 +916,-3.0,109.920000,0.000000,0.000000 +917,-3.0,110.040000,0.000000,0.000000 +918,-3.0,110.160000,0.000000,0.000000 +919,-3.0,110.280000,0.000000,0.000000 +920,-3.0,110.400000,0.000000,0.000000 +921,-3.0,110.520000,0.000000,0.000000 +922,-3.0,110.640000,0.000000,0.000000 +923,-3.0,110.760000,0.000000,0.000000 +924,-3.0,110.880000,0.000000,0.000000 +925,-3.0,111.000000,0.000000,0.000000 +926,-3.0,111.120000,0.000000,0.000000 +927,-3.0,111.240000,0.000000,0.000000 +928,-3.0,111.360000,0.000000,0.000000 +929,-3.0,111.480000,0.000000,0.000000 +930,-3.0,111.600000,0.000000,0.000000 +931,-3.0,111.720000,0.000000,0.000000 +932,-3.0,111.840000,0.000000,0.000000 +933,-3.0,111.960000,0.000000,0.000000 +934,-3.0,112.080000,0.000000,0.000000 +935,-3.0,112.200000,0.000000,0.000000 +936,-3.0,112.320000,0.000000,0.000000 +937,-3.0,112.440000,0.000000,0.000000 +938,-3.0,112.560000,0.000000,0.000000 +939,-3.0,112.680000,0.000000,0.000000 +940,-3.0,112.800000,0.000000,0.000000 +941,-3.0,112.920000,0.000000,0.000000 +942,-3.0,113.040000,0.000000,0.000000 +943,-3.0,113.160000,0.000000,0.000000 +944,-3.0,113.280000,0.000000,0.000000 +945,-3.0,113.400000,0.000000,0.000000 +946,-3.0,113.520000,0.000000,0.000000 +947,-3.0,113.640000,0.000000,0.000000 +948,-3.0,113.760000,0.000000,0.000000 +949,-3.0,113.880000,0.000000,0.000000 +950,-3.0,114.000000,0.000000,0.000000 +951,-3.0,114.120000,0.000000,0.000000 +952,-3.0,114.240000,0.000000,0.000000 +953,-3.0,114.360000,0.000000,0.000000 +954,-3.0,114.480000,0.000000,0.000000 +955,-3.0,114.600000,0.000000,0.000000 +956,-3.0,114.720000,0.000000,0.000000 +957,-3.0,114.840000,0.000000,0.000000 +958,-3.0,114.960000,0.000000,0.000000 +959,-3.0,115.080000,0.000000,0.000000 +960,-3.0,115.200000,0.000000,0.000000 +961,-3.0,115.320000,0.000000,0.000000 +962,-3.0,115.440000,0.000000,0.000000 +963,-3.0,115.560000,0.000000,0.000000 +964,-3.0,115.680000,0.000000,0.000000 +965,-3.0,115.800000,0.000000,0.000000 +966,-3.0,115.920000,0.000000,0.000000 +967,-3.0,116.040000,0.000000,0.000000 +968,-3.0,116.160000,0.000000,0.000000 +969,-3.0,116.280000,0.000000,0.000000 +970,-3.0,116.400000,0.000000,0.000000 +971,-3.0,116.520000,0.000000,0.000000 +972,-3.0,116.640000,0.000000,0.000000 +973,-3.0,116.760000,0.000000,0.000000 +974,-3.0,116.880000,0.000000,0.000000 +975,-3.0,117.000000,0.000000,0.000000 +976,-3.0,117.120000,0.000000,0.000000 +977,-3.0,117.240000,0.000000,0.000000 +978,-3.0,117.360000,0.000000,0.000000 +979,-3.0,117.480000,0.000000,0.000000 +980,-3.0,117.600000,0.000000,0.000000 +981,-3.0,117.720000,0.000000,0.000000 +982,-3.0,117.840000,0.000000,0.000000 +983,-3.0,117.960000,0.000000,0.000000 +984,-3.0,118.080000,0.000000,0.000000 +985,-3.0,118.200000,0.000000,0.000000 +986,-3.0,118.320000,0.000000,0.000000 +987,-3.0,118.440000,0.000000,0.000000 +988,-3.0,118.560000,0.000000,0.000000 +989,-3.0,118.680000,0.000000,0.000000 +990,-3.0,118.800000,0.000000,0.000000 +991,-3.0,118.920000,0.000000,0.000000 +992,-3.0,119.040000,0.000000,0.000000 +993,-3.0,119.160000,0.000000,0.000000 +994,-3.0,119.280000,0.000000,0.000000 +995,-3.0,119.400000,0.000000,0.000000 +996,-3.0,119.520000,0.000000,0.000000 +997,-3.0,119.640000,0.000000,0.000000 +998,-3.0,119.760000,0.000000,0.000000 +999,-3.0,119.880000,0.000000,0.000000 +1000,-3.0,120.000000,0.000000,0.000000 +1001,-3.0,120.120000,0.000000,0.000000 +1002,-3.0,120.240000,0.000000,0.000000 +1003,-3.0,120.360000,0.000000,0.000000 +1004,-3.0,120.480000,0.000000,0.000000 +1005,-3.0,120.600000,0.000000,0.000000 +1006,-3.0,120.720000,0.000000,0.000000 +1007,-3.0,120.840000,0.000000,0.000000 +1008,-3.0,120.960000,0.000000,0.000000 +1009,-3.0,121.080000,0.000000,0.000000 +1010,-3.0,121.200000,0.000000,0.000000 +1011,-3.0,121.320000,0.000000,0.000000 +1012,-3.0,121.440000,0.000000,0.000000 +1013,-3.0,121.560000,0.000000,0.000000 +1014,-3.0,121.680000,0.000000,0.000000 +1015,-3.0,121.800000,0.000000,0.000000 +1016,-3.0,121.920000,0.000000,0.000000 +1017,-3.0,122.040000,0.000000,0.000000 +1018,-3.0,122.160000,0.000000,0.000000 +1019,-3.0,122.280000,0.000000,0.000000 +1020,-3.0,122.400000,0.000000,0.000000 +1021,-3.0,122.520000,0.000000,0.000000 +1022,-3.0,122.640000,0.000000,0.000000 +1023,-3.0,122.760000,0.000000,0.000000 +1024,-3.0,122.880000,0.000000,0.000000 +1025,-3.0,123.000000,0.000000,0.000000 +1026,-3.0,123.120000,0.000000,0.000000 +1027,-3.0,123.240000,0.000000,0.000000 +1028,-3.0,123.360000,0.000000,0.000000 +1029,-3.0,123.480000,0.000000,0.000000 +1030,-3.0,123.600000,0.000000,0.000000 +1031,-3.0,123.720000,0.000000,0.000000 +1032,-3.0,123.840000,0.000000,0.000000 +1033,-3.0,123.960000,0.000000,0.000000 +1034,-3.0,124.080000,0.000000,0.000000 +1035,-3.0,124.200000,0.000000,0.000000 +1036,-3.0,124.320000,0.000000,0.000000 +1037,-3.0,124.440000,0.000000,0.000000 +1038,-3.0,124.560000,0.000000,0.000000 +1039,-3.0,124.680000,0.000000,0.000000 +1040,-3.0,124.800000,0.000000,0.000000 +1041,-3.0,124.920000,0.000000,0.000000 +1042,-3.0,125.040000,0.000000,0.000000 +1043,-3.0,125.160000,0.000000,0.000000 +1044,-3.0,125.280000,0.000000,0.000000 +1045,-3.0,125.400000,0.000000,0.000000 +1046,-3.0,125.520000,0.000000,0.000000 +1047,-3.0,125.640000,0.000000,0.000000 +1048,-3.0,125.760000,0.000000,0.000000 +1049,-3.0,125.880000,0.000000,0.000000 +1050,-3.0,126.000000,0.000000,0.000000 +1051,-3.0,126.120000,0.000000,0.000000 +1052,-3.0,126.240000,0.000000,0.000000 +1053,-3.0,126.360000,0.000000,0.000000 +1054,-3.0,126.480000,0.000000,0.000000 +1055,-3.0,126.600000,0.000000,0.000000 +1056,-3.0,126.720000,0.000000,0.000000 +1057,-3.0,126.840000,0.000000,0.000000 +1058,-3.0,126.960000,0.000000,0.000000 +1059,-3.0,127.080000,0.000000,0.000000 +1060,-3.0,127.200000,0.000000,0.000000 +1061,-3.0,127.320000,0.000000,0.000000 +1062,-3.0,127.440000,0.000000,0.000000 +1063,-3.0,127.560000,0.000000,0.000000 +1064,-3.0,127.680000,0.000000,0.000000 +1065,-3.0,127.800000,0.000000,0.000000 +1066,-3.0,127.920000,0.000000,0.000000 +1067,-3.0,128.040000,0.000000,0.000000 +1068,-3.0,128.160000,0.000000,0.000000 +1069,-3.0,128.280000,0.000000,0.000000 +1070,-3.0,128.400000,0.000000,0.000000 +1071,-3.0,128.520000,0.000000,0.000000 +1072,-3.0,128.640000,0.000000,0.000000 +1073,-3.0,128.760000,0.000000,0.000000 +1074,-3.0,128.880000,0.000000,0.000000 +1075,-3.0,129.000000,0.000000,0.000000 +1076,-3.0,129.120000,0.000000,0.000000 +1077,-3.0,129.240000,0.000000,0.000000 +1078,-3.0,129.360000,0.000000,0.000000 +1079,-3.0,129.480000,0.000000,0.000000 +1080,-3.0,129.600000,0.000000,0.000000 +1081,-3.0,129.720000,0.000000,0.000000 +1082,-3.0,129.840000,0.000000,0.000000 +1083,-3.0,129.960000,0.000000,0.000000 +1084,-3.0,130.080000,0.000000,0.000000 +1085,-3.0,130.200000,0.000000,0.000000 +1086,-3.0,130.320000,0.000000,0.000000 +1087,-3.0,130.440000,0.000000,0.000000 +1088,-3.0,130.560000,0.000000,0.000000 +1089,-3.0,130.680000,0.000000,0.000000 +1090,-3.0,130.800000,0.000000,0.000000 +1091,-3.0,130.920000,0.000000,0.000000 +1092,-3.0,131.040000,0.000000,0.000000 +1093,-3.0,131.160000,0.000000,0.000000 +1094,-3.0,131.280000,0.000000,0.000000 +1095,-3.0,131.400000,0.000000,0.000000 +1096,-3.0,131.520000,0.000000,0.000000 +1097,-3.0,131.640000,0.000000,0.000000 +1098,-3.0,131.760000,0.000000,0.000000 +1099,-3.0,131.880000,0.000000,0.000000 +1100,-3.0,132.000000,0.000000,0.000000 +1101,-3.0,132.120000,0.000000,0.000000 +1102,-3.0,132.240000,0.000000,0.000000 +1103,-3.0,132.360000,0.000000,0.000000 +1104,-3.0,132.480000,0.000000,0.000000 +1105,-3.0,132.600000,0.000000,0.000000 +1106,-3.0,132.720000,0.000000,0.000000 +1107,-3.0,132.840000,0.000000,0.000000 +1108,-3.0,132.960000,0.000000,0.000000 +1109,-3.0,133.080000,0.000000,0.000000 +1110,-3.0,133.200000,0.000000,0.000000 +1111,-3.0,133.320000,0.000000,0.000000 +1112,-3.0,133.440000,0.000000,0.000000 +1113,-3.0,133.560000,0.000000,0.000000 +1114,-3.0,133.680000,0.000000,0.000000 +1115,-3.0,133.800000,0.000000,0.000000 +1116,-3.0,133.920000,0.000000,0.000000 +1117,-3.0,134.040000,0.000000,0.000000 +1118,-3.0,134.160000,0.000000,0.000000 +1119,-3.0,134.280000,0.000000,0.000000 +1120,-3.0,134.400000,0.000000,0.000000 +1121,-3.0,134.520000,0.000000,0.000000 +1122,-3.0,134.640000,0.000000,0.000000 +1123,-3.0,134.760000,0.000000,0.000000 +1124,-3.0,134.880000,0.000000,0.000000 +1125,-3.0,135.000000,0.000000,0.000000 +1126,-3.0,135.120000,0.000000,0.000000 +1127,-3.0,135.240000,0.000000,0.000000 +1128,-3.0,135.360000,0.000000,0.000000 +1129,-3.0,135.480000,0.000000,0.000000 +1130,-3.0,135.600000,0.000000,0.000000 +1131,-3.0,135.720000,0.000000,0.000000 +1132,-3.0,135.840000,0.000000,0.000000 +1133,-3.0,135.960000,0.000000,0.000000 +1134,-3.0,136.080000,0.000000,0.000000 +1135,-3.0,136.200000,0.000000,0.000000 +1136,-3.0,136.320000,0.000000,0.000000 +1137,-3.0,136.440000,0.000000,0.000000 +1138,-3.0,136.560000,0.000000,0.000000 +1139,-3.0,136.680000,0.000000,0.000000 +1140,-3.0,136.800000,0.000000,0.000000 +1141,-3.0,136.920000,0.000000,0.000000 +1142,-3.0,137.040000,0.000000,0.000000 +1143,-3.0,137.160000,0.000000,0.000000 +1144,-3.0,137.280000,0.000000,0.000000 +1145,-3.0,137.400000,0.000000,0.000000 +1146,-3.0,137.520000,0.000000,0.000000 +1147,-3.0,137.640000,0.000000,0.000000 +1148,-3.0,137.760000,0.000000,0.000000 +1149,-3.0,137.880000,0.000000,0.000000 +1150,-3.0,138.000000,0.000000,0.000000 +1151,-3.0,138.120000,0.000000,0.000000 +1152,-3.0,138.240000,0.000000,0.000000 +1153,-3.0,138.360000,0.000000,0.000000 +1154,-3.0,138.480000,0.000000,0.000000 +1155,-3.0,138.600000,0.000000,0.000000 +1156,-3.0,138.720000,0.000000,0.000000 +1157,-3.0,138.840000,0.000000,0.000000 +1158,-3.0,138.960000,0.000000,0.000000 +1159,-3.0,139.080000,0.000000,0.000000 +1160,-3.0,139.200000,0.000000,0.000000 +1161,-3.0,139.320000,0.000000,0.000000 +1162,-3.0,139.440000,0.000000,0.000000 +1163,-3.0,139.560000,0.000000,0.000000 +1164,-3.0,139.680000,0.000000,0.000000 +1165,-3.0,139.800000,0.000000,0.000000 +1166,-3.0,139.920000,0.000000,0.000000 +1167,-3.0,140.040000,0.000000,0.000000 +1168,-3.0,140.160000,0.000000,0.000000 +1169,-3.0,140.280000,0.000000,0.000000 +1170,-3.0,140.400000,0.000000,0.000000 +1171,-3.0,140.520000,0.000000,0.000000 +1172,-3.0,140.640000,0.000000,0.000000 +1173,-3.0,140.760000,0.000000,0.000000 +1174,-3.0,140.880000,0.000000,0.000000 +1175,-3.0,141.000000,0.000000,0.000000 +1176,-3.0,141.120000,0.000000,0.000000 +1177,-3.0,141.240000,0.000000,0.000000 +1178,-3.0,141.360000,0.000000,0.000000 +1179,-3.0,141.480000,0.000000,0.000000 +1180,-3.0,141.600000,0.000000,0.000000 +1181,-3.0,141.720000,0.000000,0.000000 +1182,-3.0,141.840000,0.000000,0.000000 +1183,-3.0,141.960000,0.000000,0.000000 +1184,-3.0,142.080000,0.000000,0.000000 +1185,-3.0,142.200000,0.000000,0.000000 +1186,-3.0,142.320000,0.000000,0.000000 +1187,-3.0,142.440000,0.000000,0.000000 +1188,-3.0,142.560000,0.000000,0.000000 +1189,-3.0,142.680000,0.000000,0.000000 +1190,-3.0,142.800000,0.000000,0.000000 +1191,-3.0,142.920000,0.000000,0.000000 +1192,-3.0,143.040000,0.000000,0.000000 +1193,-3.0,143.160000,0.000000,0.000000 +1194,-3.0,143.280000,0.000000,0.000000 +1195,-3.0,143.400000,0.000000,0.000000 +1196,-3.0,143.520000,0.000000,0.000000 +1197,-3.0,143.640000,0.000000,0.000000 +1198,-3.0,143.760000,0.000000,0.000000 +1199,-3.0,143.880000,0.000000,0.000000 +1200,-3.0,144.000000,0.000000,0.000000 +1201,-3.0,144.120000,0.000000,0.000000 +1202,-3.0,144.240000,0.000000,0.000000 +1203,-3.0,144.360000,0.000000,0.000000 +1204,-3.0,144.480000,0.000000,0.000000 +1205,-3.0,144.600000,0.000000,0.000000 +1206,-3.0,144.720000,0.000000,0.000000 +1207,-3.0,144.840000,0.000000,0.000000 +1208,-3.0,144.960000,0.000000,0.000000 +1209,-3.0,145.080000,0.000000,0.000000 +1210,-3.0,145.200000,0.000000,0.000000 +1211,-3.0,145.320000,0.000000,0.000000 +1212,-3.0,145.440000,0.000000,0.000000 +1213,-3.0,145.560000,0.000000,0.000000 +1214,-3.0,145.680000,0.000000,0.000000 +1215,-3.0,145.800000,0.000000,0.000000 +1216,-3.0,145.920000,0.000000,0.000000 +1217,-3.0,146.040000,0.000000,0.000000 +1218,-3.0,146.160000,0.000000,0.000000 +1219,-3.0,146.280000,0.000000,0.000000 +1220,-3.0,146.400000,0.000000,0.000000 +1221,-3.0,146.520000,0.000000,0.000000 +1222,-3.0,146.640000,0.000000,0.000000 +1223,-3.0,146.760000,0.000000,0.000000 +1224,-3.0,146.880000,0.000000,0.000000 +1225,-3.0,147.000000,0.000000,0.000000 +1226,-3.0,147.120000,0.000000,0.000000 +1227,-3.0,147.240000,0.000000,0.000000 +1228,-3.0,147.360000,0.000000,0.000000 +1229,-3.0,147.480000,0.000000,0.000000 +1230,-3.0,147.600000,0.000000,0.000000 +1231,-3.0,147.720000,0.000000,0.000000 +1232,-3.0,147.840000,0.000000,0.000000 +1233,-3.0,147.960000,0.000000,0.000000 +1234,-3.0,148.080000,0.000000,0.000000 +1235,-3.0,148.200000,0.000000,0.000000 +1236,-3.0,148.320000,0.000000,0.000000 +1237,-3.0,148.440000,0.000000,0.000000 +1238,-3.0,148.560000,0.000000,0.000000 +1239,-3.0,148.680000,0.000000,0.000000 +1240,-3.0,148.800000,0.000000,0.000000 +1241,-3.0,148.920000,0.000000,0.000000 +1242,-3.0,149.040000,0.000000,0.000000 +1243,-3.0,149.160000,0.000000,0.000000 +1244,-3.0,149.280000,0.000000,0.000000 +1245,-3.0,149.400000,0.000000,0.000000 +1246,-3.0,149.520000,0.000000,0.000000 +1247,-3.0,149.640000,0.000000,0.000000 +1248,-3.0,149.760000,0.000000,0.000000 +1249,-3.0,149.880000,0.000000,0.000000 +1250,-3.0,150.000000,0.000000,0.000000 +1251,-3.0,150.120000,0.000000,0.000000 +1252,-3.0,150.240000,0.000000,0.000000 +1253,-3.0,150.360000,0.000000,0.000000 +1254,-3.0,150.480000,0.000000,0.000000 +1255,-3.0,150.600000,0.000000,0.000000 +1256,-3.0,150.720000,0.000000,0.000000 +1257,-3.0,150.840000,0.000000,0.000000 +1258,-3.0,150.960000,0.000000,0.000000 +1259,-3.0,151.080000,0.000000,0.000000 +1260,-3.0,151.200000,0.000000,0.000000 +1261,-3.0,151.320000,0.000000,0.000000 +1262,-3.0,151.440000,0.000000,0.000000 +1263,-3.0,151.560000,0.000000,0.000000 +1264,-3.0,151.680000,0.000000,0.000000 +1265,-3.0,151.800000,0.000000,0.000000 +1266,-3.0,151.920000,0.000000,0.000000 +1267,-3.0,152.040000,0.000000,0.000000 +1268,-3.0,152.160000,0.000000,0.000000 +1269,-3.0,152.280000,0.000000,0.000000 +1270,-3.0,152.400000,0.000000,0.000000 +1271,-3.0,152.520000,0.000000,0.000000 +1272,-3.0,152.640000,0.000000,0.000000 +1273,-3.0,152.760000,0.000000,0.000000 +1274,-3.0,152.880000,0.000000,0.000000 +1275,-3.0,153.000000,0.000000,0.000000 +1276,-3.0,153.120000,0.000000,0.000000 +1277,-3.0,153.240000,0.000000,0.000000 +1278,-3.0,153.360000,0.000000,0.000000 +1279,-3.0,153.480000,0.000000,0.000000 +1280,-3.0,153.600000,0.000000,0.000000 +1281,-3.0,153.720000,0.000000,0.000000 +1282,-3.0,153.840000,0.000000,0.000000 +1283,-3.0,153.960000,0.000000,0.000000 +1284,-3.0,154.080000,0.000000,0.000000 +1285,-3.0,154.200000,0.000000,0.000000 +1286,-3.0,154.320000,0.000000,0.000000 +1287,-3.0,154.440000,0.000000,0.000000 +1288,-3.0,154.560000,0.000000,0.000000 +1289,-3.0,154.680000,0.000000,0.000000 +1290,-3.0,154.800000,0.000000,0.000000 +1291,-3.0,154.920000,0.000000,0.000000 +1292,-3.0,155.040000,0.000000,0.000000 +1293,-3.0,155.160000,0.000000,0.000000 +1294,-3.0,155.280000,0.000000,0.000000 +1295,-3.0,155.400000,0.000000,0.000000 +1296,-3.0,155.520000,0.000000,0.000000 +1297,-3.0,155.640000,0.000000,0.000000 +1298,-3.0,155.760000,0.000000,0.000000 +1299,-3.0,155.880000,0.000000,0.000000 +1300,-3.0,156.000000,0.000000,0.000000 +1301,-3.0,156.120000,0.000000,0.000000 +1302,-3.0,156.240000,0.000000,0.000000 +1303,-3.0,156.360000,0.000000,0.000000 +1304,-3.0,156.480000,0.000000,0.000000 +1305,-3.0,156.600000,0.000000,0.000000 +1306,-3.0,156.720000,0.000000,0.000000 +1307,-3.0,156.840000,0.000000,0.000000 +1308,-3.0,156.960000,0.000000,0.000000 +1309,-3.0,157.080000,0.000000,0.000000 +1310,-3.0,157.200000,0.000000,0.000000 +1311,-3.0,157.320000,0.000000,0.000000 +1312,-3.0,157.440000,0.000000,0.000000 +1313,-3.0,157.560000,0.000000,0.000000 +1314,-3.0,157.680000,0.000000,0.000000 +1315,-3.0,157.800000,0.000000,0.000000 +1316,-3.0,157.920000,0.000000,0.000000 +1317,-3.0,158.040000,0.000000,0.000000 +1318,-3.0,158.160000,0.000000,0.000000 +1319,-3.0,158.280000,0.000000,0.000000 +1320,-3.0,158.400000,0.000000,0.000000 +1321,-3.0,158.520000,0.000000,0.000000 +1322,-3.0,158.640000,0.000000,0.000000 +1323,-3.0,158.760000,0.000000,0.000000 +1324,-3.0,158.880000,0.000000,0.000000 +1325,-3.0,159.000000,0.000000,0.000000 +1326,-3.0,159.120000,0.000000,0.000000 +1327,-3.0,159.240000,0.000000,0.000000 +1328,-3.0,159.360000,0.000000,0.000000 +1329,-3.0,159.480000,0.000000,0.000000 +1330,-3.0,159.600000,0.000000,0.000000 +1331,-3.0,159.720000,0.000000,0.000000 +1332,-3.0,159.840000,0.000000,0.000000 +1333,-3.0,159.960000,0.000000,0.000000 +1334,-3.0,160.080000,0.000000,0.000000 +1335,-3.0,160.200000,0.000000,0.000000 +1336,-3.0,160.320000,0.000000,0.000000 +1337,-3.0,160.440000,0.000000,0.000000 +1338,-3.0,160.560000,0.000000,0.000000 +1339,-3.0,160.680000,0.000000,0.000000 +1340,-3.0,160.800000,0.000000,0.000000 +1341,-3.0,160.920000,0.000000,0.000000 +1342,-3.0,161.040000,0.000000,0.000000 +1343,-3.0,161.160000,0.000000,0.000000 +1344,-3.0,161.280000,0.000000,0.000000 +1345,-3.0,161.400000,0.000000,0.000000 +1346,-3.0,161.520000,0.000000,0.000000 +1347,-3.0,161.640000,0.000000,0.000000 +1348,-3.0,161.760000,0.000000,0.000000 +1349,-3.0,161.880000,0.000000,0.000000 +1350,-3.0,162.000000,0.000000,0.000000 +1351,-3.0,162.120000,0.000000,0.000000 +1352,-3.0,162.240000,0.000000,0.000000 +1353,-3.0,162.360000,0.000000,0.000000 +1354,-3.0,162.480000,0.000000,0.000000 +1355,-3.0,162.600000,0.000000,0.000000 +1356,-3.0,162.720000,0.000000,0.000000 +1357,-3.0,162.840000,0.000000,0.000000 +1358,-3.0,162.960000,0.000000,0.000000 +1359,-3.0,163.080000,0.000000,0.000000 +1360,-3.0,163.200000,0.000000,0.000000 +1361,-3.0,163.320000,0.000000,0.000000 +1362,-3.0,163.440000,0.000000,0.000000 +1363,-3.0,163.560000,0.000000,0.000000 +1364,-3.0,163.680000,0.000000,0.000000 +1365,-3.0,163.800000,0.000000,0.000000 +1366,-3.0,163.920000,0.000000,0.000000 +1367,-3.0,164.040000,0.000000,0.000000 +1368,-3.0,164.160000,0.000000,0.000000 +1369,-3.0,164.280000,0.000000,0.000000 +1370,-3.0,164.400000,0.000000,0.000000 +1371,-3.0,164.520000,0.000000,0.000000 +1372,-3.0,164.640000,0.000000,0.000000 +1373,-3.0,164.760000,0.000000,0.000000 +1374,-3.0,164.880000,0.000000,0.000000 +1375,-3.0,165.000000,0.000000,0.000000 +1376,-3.0,165.120000,0.000000,0.000000 +1377,-3.0,165.240000,0.000000,0.000000 +1378,-3.0,165.360000,0.000000,0.000000 +1379,-3.0,165.480000,0.000000,0.000000 +1380,-3.0,165.600000,0.000000,0.000000 +1381,-3.0,165.720000,0.000000,0.000000 +1382,-3.0,165.840000,0.000000,0.000000 +1383,-3.0,165.960000,0.000000,0.000000 +1384,-3.0,166.080000,0.000000,0.000000 +1385,-3.0,166.200000,0.000000,0.000000 +1386,-3.0,166.320000,0.000000,0.000000 +1387,-3.0,166.440000,0.000000,0.000000 +1388,-3.0,166.560000,0.000000,0.000000 +1389,-3.0,166.680000,0.000000,0.000000 +1390,-3.0,166.800000,0.000000,0.000000 +1391,-3.0,166.920000,0.000000,0.000000 +1392,-3.0,167.040000,0.000000,0.000000 +1393,-3.0,167.160000,0.000000,0.000000 +1394,-3.0,167.280000,0.000000,0.000000 +1395,-3.0,167.400000,0.000000,0.000000 +1396,-3.0,167.520000,0.000000,0.000000 +1397,-3.0,167.640000,0.000000,0.000000 +1398,-3.0,167.760000,0.000000,0.000000 +1399,-3.0,167.880000,0.000000,0.000000 +1400,-3.0,168.000000,0.000000,0.000000 +1401,-3.0,168.120000,0.000000,0.000000 +1402,-3.0,168.240000,0.000000,0.000000 +1403,-3.0,168.360000,0.000000,0.000000 +1404,-3.0,168.480000,0.000000,0.000000 +1405,-3.0,168.600000,0.000000,0.000000 +1406,-3.0,168.720000,0.000000,0.000000 +1407,-3.0,168.840000,0.000000,0.000000 +1408,-3.0,168.960000,0.000000,0.000000 +1409,-3.0,169.080000,0.000000,0.000000 +1410,-3.0,169.200000,0.000000,0.000000 +1411,-3.0,169.320000,0.000000,0.000000 +1412,-3.0,169.440000,0.000000,0.000000 +1413,-3.0,169.560000,0.000000,0.000000 +1414,-3.0,169.680000,0.000000,0.000000 +1415,-3.0,169.800000,0.000000,0.000000 +1416,-3.0,169.920000,0.000000,0.000000 +1417,-3.0,170.040000,0.000000,0.000000 +1418,-3.0,170.160000,0.000000,0.000000 +1419,-3.0,170.280000,0.000000,0.000000 +1420,-3.0,170.400000,0.000000,0.000000 +1421,-3.0,170.520000,0.000000,0.000000 +1422,-3.0,170.640000,0.000000,0.000000 +1423,-3.0,170.760000,0.000000,0.000000 +1424,-3.0,170.880000,0.000000,0.000000 +1425,-3.0,171.000000,0.000000,0.000000 +1426,-3.0,171.120000,0.000000,0.000000 +1427,-3.0,171.240000,0.000000,0.000000 +1428,-3.0,171.360000,0.000000,0.000000 +1429,-3.0,171.480000,0.000000,0.000000 +1430,-3.0,171.600000,0.000000,0.000000 +1431,-3.0,171.720000,0.000000,0.000000 +1432,-3.0,171.840000,0.000000,0.000000 +1433,-3.0,171.960000,0.000000,0.000000 +1434,-3.0,172.080000,0.000000,0.000000 +1435,-3.0,172.200000,0.000000,0.000000 +1436,-3.0,172.320000,0.000000,0.000000 +1437,-3.0,172.440000,0.000000,0.000000 +1438,-3.0,172.560000,0.000000,0.000000 +1439,-3.0,172.680000,0.000000,0.000000 +1440,-3.0,172.800000,0.000000,0.000000 +1441,-3.0,172.920000,0.000000,0.000000 +1442,-3.0,173.040000,0.000000,0.000000 +1443,-3.0,173.160000,0.000000,0.000000 +1444,-3.0,173.280000,0.000000,0.000000 +1445,-3.0,173.400000,0.000000,0.000000 +1446,-3.0,173.520000,0.000000,0.000000 +1447,-3.0,173.640000,0.000000,0.000000 +1448,-3.0,173.760000,0.000000,0.000000 +1449,-3.0,173.880000,0.000000,0.000000 +1450,-3.0,174.000000,0.000000,0.000000 +1451,-3.0,174.120000,0.000000,0.000000 +1452,-3.0,174.240000,0.000000,0.000000 +1453,-3.0,174.360000,0.000000,0.000000 +1454,-3.0,174.480000,0.000000,0.000000 +1455,-3.0,174.600000,0.000000,0.000000 +1456,-3.0,174.720000,0.000000,0.000000 +1457,-3.0,174.840000,0.000000,0.000000 +1458,-3.0,174.960000,0.000000,0.000000 +1459,-3.0,175.080000,0.000000,0.000000 +1460,-3.0,175.200000,0.000000,0.000000 +1461,-3.0,175.320000,0.000000,0.000000 +1462,-3.0,175.440000,0.000000,0.000000 +1463,-3.0,175.560000,0.000000,0.000000 +1464,-3.0,175.680000,0.000000,0.000000 +1465,-3.0,175.800000,0.000000,0.000000 +1466,-3.0,175.920000,0.000000,0.000000 +1467,-3.0,176.040000,0.000000,0.000000 +1468,-3.0,176.160000,0.000000,0.000000 +1469,-3.0,176.280000,0.000000,0.000000 +1470,-3.0,176.400000,0.000000,0.000000 +1471,-3.0,176.520000,0.000000,0.000000 +1472,-3.0,176.640000,0.000000,0.000000 +1473,-3.0,176.760000,0.000000,0.000000 +1474,-3.0,176.880000,0.000000,0.000000 +1475,-3.0,177.000000,0.000000,0.000000 +1476,-3.0,177.120000,0.000000,0.000000 +1477,-3.0,177.240000,0.000000,0.000000 +1478,-3.0,177.360000,0.000000,0.000000 +1479,-3.0,177.480000,0.000000,0.000000 +1480,-3.0,177.600000,0.000000,0.000000 +1481,-3.0,177.720000,0.000000,0.000000 +1482,-3.0,177.840000,0.000000,0.000000 +1483,-3.0,177.960000,0.000000,0.000000 +1484,-3.0,178.080000,0.000000,0.000000 +1485,-3.0,178.200000,0.000000,0.000000 +1486,-3.0,178.320000,0.000000,0.000000 +1487,-3.0,178.440000,0.000000,0.000000 +1488,-3.0,178.560000,0.000000,0.000000 +1489,-3.0,178.680000,0.000000,0.000000 +1490,-3.0,178.800000,0.000000,0.000000 +1491,-3.0,178.920000,0.000000,0.000000 +1492,-3.0,179.040000,0.000000,0.000000 +1493,-3.0,179.160000,0.000000,0.000000 +1494,-3.0,179.280000,0.000000,0.000000 +1495,-3.0,179.400000,0.000000,0.000000 +1496,-3.0,179.520000,0.000000,0.000000 +1497,-3.0,179.640000,0.000000,0.000000 +1498,-3.0,179.760000,0.000000,0.000000 +1499,-3.0,179.880000,0.000000,0.000000 +1500,-3.0,180.000000,0.000000,0.000000 +1501,-3.0,180.120000,0.000000,0.000000 +1502,-3.0,180.240000,0.000000,0.000000 +1503,-3.0,180.360000,0.000000,0.000000 +1504,-3.0,180.480000,0.000000,0.000000 +1505,-3.0,180.600000,0.000000,0.000000 +1506,-3.0,180.720000,0.000000,0.000000 +1507,-3.0,180.840000,0.000000,0.000000 +1508,-3.0,180.960000,0.000000,0.000000 +1509,-3.0,181.080000,0.000000,0.000000 +1510,-3.0,181.200000,0.000000,0.000000 +1511,-3.0,181.320000,0.000000,0.000000 +1512,-3.0,181.440000,0.000000,0.000000 +1513,-3.0,181.560000,0.000000,0.000000 +1514,-3.0,181.680000,0.000000,0.000000 +1515,-3.0,181.800000,0.000000,0.000000 +1516,-3.0,181.920000,0.000000,0.000000 +1517,-3.0,182.040000,0.000000,0.000000 +1518,-3.0,182.160000,0.000000,0.000000 +1519,-3.0,182.280000,0.000000,0.000000 +1520,-3.0,182.400000,0.000000,0.000000 +1521,-3.0,182.520000,0.000000,0.000000 +1522,-3.0,182.640000,0.000000,0.000000 +1523,-3.0,182.760000,0.000000,0.000000 +1524,-3.0,182.880000,0.000000,0.000000 +1525,-3.0,183.000000,0.000000,0.000000 +1526,-3.0,183.120000,0.000000,0.000000 +1527,-3.0,183.240000,0.000000,0.000000 +1528,-3.0,183.360000,0.000000,0.000000 +1529,-3.0,183.480000,0.000000,0.000000 +1530,-3.0,183.600000,0.000000,0.000000 +1531,-3.0,183.720000,0.000000,0.000000 +1532,-3.0,183.840000,0.000000,0.000000 +1533,-3.0,183.960000,0.000000,0.000000 +1534,-3.0,184.080000,0.000000,0.000000 +1535,-3.0,184.200000,0.000000,0.000000 +1536,-3.0,184.320000,0.000000,0.000000 +1537,-3.0,184.440000,0.000000,0.000000 +1538,-3.0,184.560000,0.000000,0.000000 +1539,-3.0,184.680000,0.000000,0.000000 +1540,-3.0,184.800000,0.000000,0.000000 +1541,-3.0,184.920000,0.000000,0.000000 +1542,-3.0,185.040000,0.000000,0.000000 +1543,-3.0,185.160000,0.000000,0.000000 +1544,-3.0,185.280000,0.000000,0.000000 +1545,-3.0,185.400000,0.000000,0.000000 +1546,-3.0,185.520000,0.000000,0.000000 +1547,-3.0,185.640000,0.000000,0.000000 +1548,-3.0,185.760000,0.000000,0.000000 +1549,-3.0,185.880000,0.000000,0.000000 +1550,-3.0,186.000000,0.000000,0.000000 +1551,-3.0,186.120000,0.000000,0.000000 +1552,-3.0,186.240000,0.000000,0.000000 +1553,-3.0,186.360000,0.000000,0.000000 +1554,-3.0,186.480000,0.000000,0.000000 +1555,-3.0,186.600000,0.000000,0.000000 +1556,-3.0,186.720000,0.000000,0.000000 +1557,-3.0,186.840000,0.000000,0.000000 +1558,-3.0,186.960000,0.000000,0.000000 +1559,-3.0,187.080000,0.000000,0.000000 +1560,-3.0,187.200000,0.000000,0.000000 +1561,-3.0,187.320000,0.000000,0.000000 +1562,-3.0,187.440000,0.000000,0.000000 +1563,-3.0,187.560000,0.000000,0.000000 +1564,-3.0,187.680000,0.000000,0.000000 +1565,-3.0,187.800000,0.000000,0.000000 +1566,-3.0,187.920000,0.000000,0.000000 +1567,-3.0,188.040000,0.000000,0.000000 +1568,-3.0,188.160000,0.000000,0.000000 +1569,-3.0,188.280000,0.000000,0.000000 +1570,-3.0,188.400000,0.000000,0.000000 +1571,-3.0,188.520000,0.000000,0.000000 +1572,-3.0,188.640000,0.000000,0.000000 +1573,-3.0,188.760000,0.000000,0.000000 +1574,-3.0,188.880000,0.000000,0.000000 +1575,-3.0,189.000000,0.000000,0.000000 +1576,-3.0,189.120000,0.000000,0.000000 +1577,-3.0,189.240000,0.000000,0.000000 +1578,-3.0,189.360000,0.000000,0.000000 +1579,-3.0,189.480000,0.000000,0.000000 +1580,-3.0,189.600000,0.000000,0.000000 +1581,-3.0,189.720000,0.000000,0.000000 +1582,-3.0,189.840000,0.000000,0.000000 +1583,-3.0,189.960000,0.000000,0.000000 +1584,-3.0,190.080000,0.000000,0.000000 +1585,-3.0,190.200000,0.000000,0.000000 +1586,-3.0,190.320000,0.000000,0.000000 +1587,-3.0,190.440000,0.000000,0.000000 +1588,-3.0,190.560000,0.000000,0.000000 +1589,-3.0,190.680000,0.000000,0.000000 +1590,-3.0,190.800000,0.000000,0.000000 +1591,-3.0,190.920000,0.000000,0.000000 +1592,-3.0,191.040000,0.000000,0.000000 +1593,-3.0,191.160000,0.000000,0.000000 +1594,-3.0,191.280000,0.000000,0.000000 +1595,-3.0,191.400000,0.000000,0.000000 +1596,-3.0,191.520000,0.000000,0.000000 +1597,-3.0,191.640000,0.000000,0.000000 +1598,-3.0,191.760000,0.000000,0.000000 +1599,-3.0,191.880000,0.000000,0.000000 +1600,-3.0,192.000000,0.000000,0.000000 +1601,-3.0,192.120000,0.000000,0.000000 +1602,-3.0,192.240000,0.000000,0.000000 +1603,-3.0,192.360000,0.000000,0.000000 +1604,-3.0,192.480000,0.000000,0.000000 +1605,-3.0,192.600000,0.000000,0.000000 +1606,-3.0,192.720000,0.000000,0.000000 +1607,-3.0,192.840000,0.000000,0.000000 +1608,-3.0,192.960000,0.000000,0.000000 +1609,-3.0,193.080000,0.000000,0.000000 +1610,-3.0,193.200000,0.000000,0.000000 +1611,-3.0,193.320000,0.000000,0.000000 +1612,-3.0,193.440000,0.000000,0.000000 +1613,-3.0,193.560000,0.000000,0.000000 +1614,-3.0,193.680000,0.000000,0.000000 +1615,-3.0,193.800000,0.000000,0.000000 +1616,-3.0,193.920000,0.000000,0.000000 +1617,-3.0,194.040000,0.000000,0.000000 +1618,-3.0,194.160000,0.000000,0.000000 +1619,-3.0,194.280000,0.000000,0.000000 +1620,-3.0,194.400000,0.000000,0.000000 +1621,-3.0,194.520000,0.000000,0.000000 +1622,-3.0,194.640000,0.000000,0.000000 +1623,-3.0,194.760000,0.000000,0.000000 +1624,-3.0,194.880000,0.000000,0.000000 +1625,-3.0,195.000000,0.000000,0.000000 +1626,-3.0,195.120000,0.000000,0.000000 +1627,-3.0,195.240000,0.000000,0.000000 +1628,-3.0,195.360000,0.000000,0.000000 +1629,-3.0,195.480000,0.000000,0.000000 +1630,-3.0,195.600000,0.000000,0.000000 +1631,-3.0,195.720000,0.000000,0.000000 +1632,-3.0,195.840000,0.000000,0.000000 +1633,-3.0,195.960000,0.000000,0.000000 +1634,-3.0,196.080000,0.000000,0.000000 +1635,-3.0,196.200000,0.000000,0.000000 +1636,-3.0,196.320000,0.000000,0.000000 +1637,-3.0,196.440000,0.000000,0.000000 +1638,-3.0,196.560000,0.000000,0.000000 +1639,-3.0,196.680000,0.000000,0.000000 +1640,-3.0,196.800000,0.000000,0.000000 +1641,-3.0,196.920000,0.000000,0.000000 +1642,-3.0,197.040000,0.000000,0.000000 +1643,-3.0,197.160000,0.000000,0.000000 +1644,-3.0,197.280000,0.000000,0.000000 +1645,-3.0,197.400000,0.000000,0.000000 +1646,-3.0,197.520000,0.000000,0.000000 +1647,-3.0,197.640000,0.000000,0.000000 +1648,-3.0,197.760000,0.000000,0.000000 +1649,-3.0,197.880000,0.000000,0.000000 +1650,-3.0,198.000000,0.000000,0.000000 +1651,-3.0,198.120000,0.000000,0.000000 +1652,-3.0,198.240000,0.000000,0.000000 +1653,-3.0,198.360000,0.000000,0.000000 +1654,-3.0,198.480000,0.000000,0.000000 +1655,-3.0,198.600000,0.000000,0.000000 +1656,-3.0,198.720000,0.000000,0.000000 +1657,-3.0,198.840000,0.000000,0.000000 +1658,-3.0,198.960000,0.000000,0.000000 +1659,-3.0,199.080000,0.000000,0.000000 +1660,-3.0,199.200000,0.000000,0.000000 +1661,-3.0,199.320000,0.000000,0.000000 +1662,-3.0,199.440000,0.000000,0.000000 +1663,-3.0,199.560000,0.000000,0.000000 +1664,-3.0,199.680000,0.000000,0.000000 +1665,-3.0,199.800000,0.000000,0.000000 +1666,-3.0,199.920000,0.000000,0.000000 +1667,-3.0,200.040000,0.000000,0.000000 +1668,-3.0,200.160000,0.000000,0.000000 +1669,-3.0,200.280000,0.000000,0.000000 +1670,-3.0,200.400000,0.000000,0.000000 +1671,-3.0,200.520000,0.000000,0.000000 +1672,-3.0,200.640000,0.000000,0.000000 +1673,-3.0,200.760000,0.000000,0.000000 +1674,-3.0,200.880000,0.000000,0.000000 +1675,-3.0,201.000000,0.000000,0.000000 +1676,-3.0,201.120000,0.000000,0.000000 +1677,-3.0,201.240000,0.000000,0.000000 +1678,-3.0,201.360000,0.000000,0.000000 +1679,-3.0,201.480000,0.000000,0.000000 +1680,-3.0,201.600000,0.000000,0.000000 +1681,-3.0,201.720000,0.000000,0.000000 +1682,-3.0,201.840000,0.000000,0.000000 +1683,-3.0,201.960000,0.000000,0.000000 +1684,-3.0,202.080000,0.000000,0.000000 +1685,-3.0,202.200000,0.000000,0.000000 +1686,-3.0,202.320000,0.000000,0.000000 +1687,-3.0,202.440000,0.000000,0.000000 +1688,-3.0,202.560000,0.000000,0.000000 +1689,-3.0,202.680000,0.000000,0.000000 +1690,-3.0,202.800000,0.000000,0.000000 +1691,-3.0,202.920000,0.000000,0.000000 +1692,-3.0,203.040000,0.000000,0.000000 +1693,-3.0,203.160000,0.000000,0.000000 +1694,-3.0,203.280000,0.000000,0.000000 +1695,-3.0,203.400000,0.000000,0.000000 +1696,-3.0,203.520000,0.000000,0.000000 +1697,-3.0,203.640000,0.000000,0.000000 +1698,-3.0,203.760000,0.000000,0.000000 +1699,-3.0,203.880000,0.000000,0.000000 +1700,-3.0,204.000000,0.000000,0.000000 +1701,-3.0,204.120000,0.000000,0.000000 +1702,-3.0,204.240000,0.000000,0.000000 +1703,-3.0,204.360000,0.000000,0.000000 +1704,-3.0,204.480000,0.000000,0.000000 +1705,-3.0,204.600000,0.000000,0.000000 +1706,-3.0,204.720000,0.000000,0.000000 +1707,-3.0,204.840000,0.000000,0.000000 +1708,-3.0,204.960000,0.000000,0.000000 +1709,-3.0,205.080000,0.000000,0.000000 +1710,-3.0,205.200000,0.000000,0.000000 +1711,-3.0,205.320000,0.000000,0.000000 +1712,-3.0,205.440000,0.000000,0.000000 +1713,-3.0,205.560000,0.000000,0.000000 +1714,-3.0,205.680000,0.000000,0.000000 +1715,-3.0,205.800000,0.000000,0.000000 +1716,-3.0,205.920000,0.000000,0.000000 +1717,-3.0,206.040000,0.000000,0.000000 +1718,-3.0,206.160000,0.000000,0.000000 +1719,-3.0,206.280000,0.000000,0.000000 +1720,-3.0,206.400000,0.000000,0.000000 +1721,-3.0,206.520000,0.000000,0.000000 +1722,-3.0,206.640000,0.000000,0.000000 +1723,-3.0,206.760000,0.000000,0.000000 +1724,-3.0,206.880000,0.000000,0.000000 +1725,-3.0,207.000000,0.000000,0.000000 +1726,-3.0,207.120000,0.000000,0.000000 +1727,-3.0,207.240000,0.000000,0.000000 +1728,-3.0,207.360000,0.000000,0.000000 +1729,-3.0,207.480000,0.000000,0.000000 +1730,-3.0,207.600000,0.000000,0.000000 +1731,-3.0,207.720000,0.000000,0.000000 +1732,-3.0,207.840000,0.000000,0.000000 +1733,-3.0,207.960000,0.000000,0.000000 +1734,-3.0,208.080000,0.000000,0.000000 +1735,-3.0,208.200000,0.000000,0.000000 +1736,-3.0,208.320000,0.000000,0.000000 +1737,-3.0,208.440000,0.000000,0.000000 +1738,-3.0,208.560000,0.000000,0.000000 +1739,-3.0,208.680000,0.000000,0.000000 +1740,-3.0,208.800000,0.000000,0.000000 +1741,-3.0,208.920000,0.000000,0.000000 +1742,-3.0,209.040000,0.000000,0.000000 +1743,-3.0,209.160000,0.000000,0.000000 +1744,-3.0,209.280000,0.000000,0.000000 +1745,-3.0,209.400000,0.000000,0.000000 +1746,-3.0,209.520000,0.000000,0.000000 +1747,-3.0,209.640000,0.000000,0.000000 +1748,-3.0,209.760000,0.000000,0.000000 +1749,-3.0,209.880000,0.000000,0.000000 +1750,-3.0,210.000000,0.000000,0.000000 +1751,-3.0,210.120000,0.000000,0.000000 +1752,-3.0,210.240000,0.000000,0.000000 +1753,-3.0,210.360000,0.000000,0.000000 +1754,-3.0,210.480000,0.000000,0.000000 +1755,-3.0,210.600000,0.000000,0.000000 +1756,-3.0,210.720000,0.000000,0.000000 +1757,-3.0,210.840000,0.000000,0.000000 +1758,-3.0,210.960000,0.000000,0.000000 +1759,-3.0,211.080000,0.000000,0.000000 +1760,-3.0,211.200000,0.000000,0.000000 +1761,-3.0,211.320000,0.000000,0.000000 +1762,-3.0,211.440000,0.000000,0.000000 +1763,-3.0,211.560000,0.000000,0.000000 +1764,-3.0,211.680000,0.000000,0.000000 +1765,-3.0,211.800000,0.000000,0.000000 +1766,-3.0,211.920000,0.000000,0.000000 +1767,-3.0,212.040000,0.000000,0.000000 +1768,-3.0,212.160000,0.000000,0.000000 +1769,-3.0,212.280000,0.000000,0.000000 +1770,-3.0,212.400000,0.000000,0.000000 +1771,-3.0,212.520000,0.000000,0.000000 +1772,-3.0,212.640000,0.000000,0.000000 +1773,-3.0,212.760000,0.000000,0.000000 +1774,-3.0,212.880000,0.000000,0.000000 +1775,-3.0,213.000000,0.000000,0.000000 +1776,-3.0,213.120000,0.000000,0.000000 +1777,-3.0,213.240000,0.000000,0.000000 +1778,-3.0,213.360000,0.000000,0.000000 +1779,-3.0,213.480000,0.000000,0.000000 +1780,-3.0,213.600000,0.000000,0.000000 +1781,-3.0,213.720000,0.000000,0.000000 +1782,-3.0,213.840000,0.000000,0.000000 +1783,-3.0,213.960000,0.000000,0.000000 +1784,-3.0,214.080000,0.000000,0.000000 +1785,-3.0,214.200000,0.000000,0.000000 +1786,-3.0,214.320000,0.000000,0.000000 +1787,-3.0,214.440000,0.000000,0.000000 +1788,-3.0,214.560000,0.000000,0.000000 +1789,-3.0,214.680000,0.000000,0.000000 +1790,-3.0,214.800000,0.000000,0.000000 +1791,-3.0,214.920000,0.000000,0.000000 +1792,-3.0,215.040000,0.000000,0.000000 +1793,-3.0,215.160000,0.000000,0.000000 +1794,-3.0,215.280000,0.000000,0.000000 +1795,-3.0,215.400000,0.000000,0.000000 +1796,-3.0,215.520000,0.000000,0.000000 +1797,-3.0,215.640000,0.000000,0.000000 +1798,-3.0,215.760000,0.000000,0.000000 +1799,-3.0,215.880000,0.000000,0.000000 +1800,-3.0,216.000000,0.000000,0.000000 +1801,-3.0,216.120000,0.000000,0.000000 +1802,-3.0,216.240000,0.000000,0.000000 +1803,-3.0,216.360000,0.000000,0.000000 +1804,-3.0,216.480000,0.000000,0.000000 +1805,-3.0,216.600000,0.000000,0.000000 +1806,-3.0,216.720000,0.000000,0.000000 +1807,-3.0,216.840000,0.000000,0.000000 +1808,-3.0,216.960000,0.000000,0.000000 +1809,-3.0,217.080000,0.000000,0.000000 +1810,-3.0,217.200000,0.000000,0.000000 +1811,-3.0,217.320000,0.000000,0.000000 +1812,-3.0,217.440000,0.000000,0.000000 +1813,-3.0,217.560000,0.000000,0.000000 +1814,-3.0,217.680000,0.000000,0.000000 +1815,-3.0,217.800000,0.000000,0.000000 +1816,-3.0,217.920000,0.000000,0.000000 +1817,-3.0,218.040000,0.000000,0.000000 +1818,-3.0,218.160000,0.000000,0.000000 +1819,-3.0,218.280000,0.000000,0.000000 +1820,-3.0,218.400000,0.000000,0.000000 +1821,-3.0,218.520000,0.000000,0.000000 +1822,-3.0,218.640000,0.000000,0.000000 +1823,-3.0,218.760000,0.000000,0.000000 +1824,-3.0,218.880000,0.000000,0.000000 +1825,-3.0,219.000000,0.000000,0.000000 +1826,-3.0,219.120000,0.000000,0.000000 +1827,-3.0,219.240000,0.000000,0.000000 +1828,-3.0,219.360000,0.000000,0.000000 +1829,-3.0,219.480000,0.000000,0.000000 +1830,-3.0,219.600000,0.000000,0.000000 +1831,-3.0,219.720000,0.000000,0.000000 +1832,-3.0,219.840000,0.000000,0.000000 +1833,-3.0,219.960000,0.000000,0.000000 +1834,-3.0,220.080000,0.000000,0.000000 +1835,-3.0,220.200000,0.000000,0.000000 +1836,-3.0,220.320000,0.000000,0.000000 +1837,-3.0,220.440000,0.000000,0.000000 +1838,-3.0,220.560000,0.000000,0.000000 +1839,-3.0,220.680000,0.000000,0.000000 +1840,-3.0,220.800000,0.000000,0.000000 +1841,-3.0,220.920000,0.000000,0.000000 +1842,-3.0,221.040000,0.000000,0.000000 +1843,-3.0,221.160000,0.000000,0.000000 +1844,-3.0,221.280000,0.000000,0.000000 +1845,-3.0,221.400000,0.000000,0.000000 +1846,-3.0,221.520000,0.000000,0.000000 +1847,-3.0,221.640000,0.000000,0.000000 +1848,-3.0,221.760000,0.000000,0.000000 +1849,-3.0,221.880000,0.000000,0.000000 +1850,-3.0,222.000000,0.000000,0.000000 +1851,-3.0,222.120000,0.000000,0.000000 +1852,-3.0,222.240000,0.000000,0.000000 +1853,-3.0,222.360000,0.000000,0.000000 +1854,-3.0,222.480000,0.000000,0.000000 +1855,-3.0,222.600000,0.000000,0.000000 +1856,-3.0,222.720000,0.000000,0.000000 +1857,-3.0,222.840000,0.000000,0.000000 +1858,-3.0,222.960000,0.000000,0.000000 +1859,-3.0,223.080000,0.000000,0.000000 +1860,-3.0,223.200000,0.000000,0.000000 +1861,-3.0,223.320000,0.000000,0.000000 +1862,-3.0,223.440000,0.000000,0.000000 +1863,-3.0,223.560000,0.000000,0.000000 +1864,-3.0,223.680000,0.000000,0.000000 +1865,-3.0,223.800000,0.000000,0.000000 +1866,-3.0,223.920000,0.000000,0.000000 +1867,-3.0,224.040000,0.000000,0.000000 +1868,-3.0,224.160000,0.000000,0.000000 +1869,-3.0,224.280000,0.000000,0.000000 +1870,-3.0,224.400000,0.000000,0.000000 +1871,-3.0,224.520000,0.000000,0.000000 +1872,-3.0,224.640000,0.000000,0.000000 +1873,-3.0,224.760000,0.000000,0.000000 +1874,-3.0,224.880000,0.000000,0.000000 +1875,-3.0,225.000000,0.000000,0.000000 +1876,-3.0,225.120000,0.000000,0.000000 +1877,-3.0,225.240000,0.000000,0.000000 +1878,-3.0,225.360000,0.000000,0.000000 +1879,-3.0,225.480000,0.000000,0.000000 +1880,-3.0,225.600000,0.000000,0.000000 +1881,-3.0,225.720000,0.000000,0.000000 +1882,-3.0,225.840000,0.000000,0.000000 +1883,-3.0,225.960000,0.000000,0.000000 +1884,-3.0,226.080000,0.000000,0.000000 +1885,-3.0,226.200000,0.000000,0.000000 +1886,-3.0,226.320000,0.000000,0.000000 +1887,-3.0,226.440000,0.000000,0.000000 +1888,-3.0,226.560000,0.000000,0.000000 +1889,-3.0,226.680000,0.000000,0.000000 +1890,-3.0,226.800000,0.000000,0.000000 +1891,-3.0,226.920000,0.000000,0.000000 +1892,-3.0,227.040000,0.000000,0.000000 +1893,-3.0,227.160000,0.000000,0.000000 +1894,-3.0,227.280000,0.000000,0.000000 +1895,-3.0,227.400000,0.000000,0.000000 +1896,-3.0,227.520000,0.000000,0.000000 +1897,-3.0,227.640000,0.000000,0.000000 +1898,-3.0,227.760000,0.000000,0.000000 +1899,-3.0,227.880000,0.000000,0.000000 +1900,-3.0,228.000000,0.000000,0.000000 +1901,-3.0,228.120000,0.000000,0.000000 +1902,-3.0,228.240000,0.000000,0.000000 +1903,-3.0,228.360000,0.000000,0.000000 +1904,-3.0,228.480000,0.000000,0.000000 +1905,-3.0,228.600000,0.000000,0.000000 +1906,-3.0,228.720000,0.000000,0.000000 +1907,-3.0,228.840000,0.000000,0.000000 +1908,-3.0,228.960000,0.000000,0.000000 +1909,-3.0,229.080000,0.000000,0.000000 +1910,-3.0,229.200000,0.000000,0.000000 +1911,-3.0,229.320000,0.000000,0.000000 +1912,-3.0,229.440000,0.000000,0.000000 +1913,-3.0,229.560000,0.000000,0.000000 +1914,-3.0,229.680000,0.000000,0.000000 +1915,-3.0,229.800000,0.000000,0.000000 +1916,-3.0,229.920000,0.000000,0.000000 +1917,-3.0,230.040000,0.000000,0.000000 +1918,-3.0,230.160000,0.000000,0.000000 +1919,-3.0,230.280000,0.000000,0.000000 +1920,-3.0,230.400000,0.000000,0.000000 +1921,-3.0,230.520000,0.000000,0.000000 +1922,-3.0,230.640000,0.000000,0.000000 +1923,-3.0,230.760000,0.000000,0.000000 +1924,-3.0,230.880000,0.000000,0.000000 +1925,-3.0,231.000000,0.000000,0.000000 +1926,-3.0,231.120000,0.000000,0.000000 +1927,-3.0,231.240000,0.000000,0.000000 +1928,-3.0,231.360000,0.000000,0.000000 +1929,-3.0,231.480000,0.000000,0.000000 +1930,-3.0,231.600000,0.000000,0.000000 +1931,-3.0,231.720000,0.000000,0.000000 +1932,-3.0,231.840000,0.000000,0.000000 +1933,-3.0,231.960000,0.000000,0.000000 +1934,-3.0,232.080000,0.000000,0.000000 +1935,-3.0,232.200000,0.000000,0.000000 +1936,-3.0,232.320000,0.000000,0.000000 +1937,-3.0,232.440000,0.000000,0.000000 +1938,-3.0,232.560000,0.000000,0.000000 +1939,-3.0,232.680000,0.000000,0.000000 +1940,-3.0,232.800000,0.000000,0.000000 +1941,-3.0,232.920000,0.000000,0.000000 +1942,-3.0,233.040000,0.000000,0.000000 +1943,-3.0,233.160000,0.000000,0.000000 +1944,-3.0,233.280000,0.000000,0.000000 +1945,-3.0,233.400000,0.000000,0.000000 +1946,-3.0,233.520000,0.000000,0.000000 +1947,-3.0,233.640000,0.000000,0.000000 +1948,-3.0,233.760000,0.000000,0.000000 +1949,-3.0,233.880000,0.000000,0.000000 +1950,-3.0,234.000000,0.000000,0.000000 +1951,-3.0,234.120000,0.000000,0.000000 +1952,-3.0,234.240000,0.000000,0.000000 +1953,-3.0,234.360000,0.000000,0.000000 +1954,-3.0,234.480000,0.000000,0.000000 +1955,-3.0,234.600000,0.000000,0.000000 +1956,-3.0,234.720000,0.000000,0.000000 +1957,-3.0,234.840000,0.000000,0.000000 +1958,-3.0,234.960000,0.000000,0.000000 +1959,-3.0,235.080000,0.000000,0.000000 +1960,-3.0,235.200000,0.000000,0.000000 +1961,-3.0,235.320000,0.000000,0.000000 +1962,-3.0,235.440000,0.000000,0.000000 +1963,-3.0,235.560000,0.000000,0.000000 +1964,-3.0,235.680000,0.000000,0.000000 +1965,-3.0,235.800000,0.000000,0.000000 +1966,-3.0,235.920000,0.000000,0.000000 +1967,-3.0,236.040000,0.000000,0.000000 +1968,-3.0,236.160000,0.000000,0.000000 +1969,-3.0,236.280000,0.000000,0.000000 +1970,-3.0,236.400000,0.000000,0.000000 +1971,-3.0,236.520000,0.000000,0.000000 +1972,-3.0,236.640000,0.000000,0.000000 +1973,-3.0,236.760000,0.000000,0.000000 +1974,-3.0,236.880000,0.000000,0.000000 +1975,-3.0,237.000000,0.000000,0.000000 +1976,-3.0,237.120000,0.000000,0.000000 +1977,-3.0,237.240000,0.000000,0.000000 +1978,-3.0,237.360000,0.000000,0.000000 +1979,-3.0,237.480000,0.000000,0.000000 +1980,-3.0,237.600000,0.000000,0.000000 +1981,-3.0,237.720000,0.000000,0.000000 +1982,-3.0,237.840000,0.000000,0.000000 +1983,-3.0,237.960000,0.000000,0.000000 +1984,-3.0,238.080000,0.000000,0.000000 +1985,-3.0,238.200000,0.000000,0.000000 +1986,-3.0,238.320000,0.000000,0.000000 +1987,-3.0,238.440000,0.000000,0.000000 +1988,-3.0,238.560000,0.000000,0.000000 +1989,-3.0,238.680000,0.000000,0.000000 +1990,-3.0,238.800000,0.000000,0.000000 +1991,-3.0,238.920000,0.000000,0.000000 +1992,-3.0,239.040000,0.000000,0.000000 +1993,-3.0,239.160000,0.000000,0.000000 +1994,-3.0,239.280000,0.000000,0.000000 +1995,-3.0,239.400000,0.000000,0.000000 +1996,-3.0,239.520000,0.000000,0.000000 +1997,-3.0,239.640000,0.000000,0.000000 +1998,-3.0,239.760000,0.000000,0.000000 +1999,-3.0,239.880000,0.000000,0.000000 +2000,-3.0,240.000000,0.000000,0.000000 +2001,-3.0,240.120000,0.000000,0.000000 +2002,-3.0,240.240000,0.000000,0.000000 +2003,-3.0,240.360000,0.000000,0.000000 +2004,-3.0,240.480000,0.000000,0.000000 +2005,-3.0,240.600000,0.000000,0.000000 +2006,-3.0,240.720000,0.000000,0.000000 +2007,-3.0,240.840000,0.000000,0.000000 +2008,-3.0,240.960000,0.000000,0.000000 +2009,-3.0,241.080000,0.000000,0.000000 +2010,-3.0,241.200000,0.000000,0.000000 +2011,-3.0,241.320000,0.000000,0.000000 +2012,-3.0,241.440000,0.000000,0.000000 +2013,-3.0,241.560000,0.000000,0.000000 +2014,-3.0,241.680000,0.000000,0.000000 +2015,-3.0,241.800000,0.000000,0.000000 +2016,-3.0,241.920000,0.000000,0.000000 +2017,-3.0,242.040000,0.000000,0.000000 +2018,-3.0,242.160000,0.000000,0.000000 +2019,-3.0,242.280000,0.000000,0.000000 +2020,-3.0,242.400000,0.000000,0.000000 +2021,-3.0,242.520000,0.000000,0.000000 +2022,-3.0,242.640000,0.000000,0.000000 +2023,-3.0,242.760000,0.000000,0.000000 +2024,-3.0,242.880000,0.000000,0.000000 +2025,-3.0,243.000000,0.000000,0.000000 +2026,-3.0,243.120000,0.000000,0.000000 +2027,-3.0,243.240000,0.000000,0.000000 +2028,-3.0,243.360000,0.000000,0.000000 +2029,-3.0,243.480000,0.000000,0.000000 +2030,-3.0,243.600000,0.000000,0.000000 +2031,-3.0,243.720000,0.000000,0.000000 +2032,-3.0,243.840000,0.000000,0.000000 +2033,-3.0,243.960000,0.000000,0.000000 +2034,-3.0,244.080000,0.000000,0.000000 +2035,-3.0,244.200000,0.000000,0.000000 +2036,-3.0,244.320000,0.000000,0.000000 +2037,-3.0,244.440000,0.000000,0.000000 +2038,-3.0,244.560000,0.000000,0.000000 +2039,-3.0,244.680000,0.000000,0.000000 +2040,-3.0,244.800000,0.000000,0.000000 +2041,-3.0,244.920000,0.000000,0.000000 +2042,-3.0,245.040000,0.000000,0.000000 +2043,-3.0,245.160000,0.000000,0.000000 +2044,-3.0,245.280000,0.000000,0.000000 +2045,-3.0,245.400000,0.000000,0.000000 +2046,-3.0,245.520000,0.000000,0.000000 +2047,-3.0,245.640000,0.000000,0.000000 +2048,-3.0,245.760000,0.000000,0.000000 +2049,-3.0,245.880000,0.000000,0.000000 +2050,-3.0,246.000000,0.000000,0.000000 +2051,-3.0,246.120000,0.000000,0.000000 +2052,-3.0,246.240000,0.000000,0.000000 +2053,-3.0,246.360000,0.000000,0.000000 +2054,-3.0,246.480000,0.000000,0.000000 +2055,-3.0,246.600000,0.000000,0.000000 +2056,-3.0,246.720000,0.000000,0.000000 +2057,-3.0,246.840000,0.000000,0.000000 +2058,-3.0,246.960000,0.000000,0.000000 +2059,-3.0,247.080000,0.000000,0.000000 +2060,-3.0,247.200000,0.000000,0.000000 +2061,-3.0,247.320000,0.000000,0.000000 +2062,-3.0,247.440000,0.000000,0.000000 +2063,-3.0,247.560000,0.000000,0.000000 +2064,-3.0,247.680000,0.000000,0.000000 +2065,-3.0,247.800000,0.000000,0.000000 +2066,-3.0,247.920000,0.000000,0.000000 +2067,-3.0,248.040000,0.000000,0.000000 +2068,-3.0,248.160000,0.000000,0.000000 +2069,-3.0,248.280000,0.000000,0.000000 +2070,-3.0,248.400000,0.000000,0.000000 +2071,-3.0,248.520000,0.000000,0.000000 +2072,-3.0,248.640000,0.000000,0.000000 +2073,-3.0,248.760000,0.000000,0.000000 +2074,-3.0,248.880000,0.000000,0.000000 +2075,-3.0,249.000000,0.000000,0.000000 +2076,-3.0,249.120000,0.000000,0.000000 +2077,-3.0,249.240000,0.000000,0.000000 +2078,-3.0,249.360000,0.000000,0.000000 +2079,-3.0,249.480000,0.000000,0.000000 +2080,-3.0,249.600000,0.000000,0.000000 +2081,-3.0,249.720000,0.000000,0.000000 +2082,-3.0,249.840000,0.000000,0.000000 +2083,-3.0,249.960000,0.000000,0.000000 +2084,-3.0,250.080000,0.000000,0.000000 +2085,-3.0,250.200000,0.000000,0.000000 +2086,-3.0,250.320000,0.000000,0.000000 +2087,-3.0,250.440000,0.000000,0.000000 +2088,-3.0,250.560000,0.000000,0.000000 +2089,-3.0,250.680000,0.000000,0.000000 +2090,-3.0,250.800000,0.000000,0.000000 +2091,-3.0,250.920000,0.000000,0.000000 +2092,-3.0,251.040000,0.000000,0.000000 +2093,-3.0,251.160000,0.000000,0.000000 +2094,-3.0,251.280000,0.000000,0.000000 +2095,-3.0,251.400000,0.000000,0.000000 +2096,-3.0,251.520000,0.000000,0.000000 +2097,-3.0,251.640000,0.000000,0.000000 +2098,-3.0,251.760000,0.000000,0.000000 +2099,-3.0,251.880000,0.000000,0.000000 +2100,-3.0,252.000000,0.000000,0.000000 +2101,-3.0,252.120000,0.000000,0.000000 +2102,-3.0,252.240000,0.000000,0.000000 +2103,-3.0,252.360000,0.000000,0.000000 +2104,-3.0,252.480000,0.000000,0.000000 +2105,-3.0,252.600000,0.000000,0.000000 +2106,-3.0,252.720000,0.000000,0.000000 +2107,-3.0,252.840000,0.000000,0.000000 +2108,-3.0,252.960000,0.000000,0.000000 +2109,-3.0,253.080000,0.000000,0.000000 +2110,-3.0,253.200000,0.000000,0.000000 +2111,-3.0,253.320000,0.000000,0.000000 +2112,-3.0,253.440000,0.000000,0.000000 +2113,-3.0,253.560000,0.000000,0.000000 +2114,-3.0,253.680000,0.000000,0.000000 +2115,-3.0,253.800000,0.000000,0.000000 +2116,-3.0,253.920000,0.000000,0.000000 +2117,-3.0,254.040000,0.000000,0.000000 +2118,-3.0,254.160000,0.000000,0.000000 +2119,-3.0,254.280000,0.000000,0.000000 +2120,-3.0,254.400000,0.000000,0.000000 +2121,-3.0,254.520000,0.000000,0.000000 +2122,-3.0,254.640000,0.000000,0.000000 +2123,-3.0,254.760000,0.000000,0.000000 +2124,-3.0,254.880000,0.000000,0.000000 +2125,-3.0,255.000000,0.000000,0.000000 +2126,-3.0,255.120000,0.000000,0.000000 +2127,-3.0,255.240000,0.000000,0.000000 +2128,-3.0,255.360000,0.000000,0.000000 +2129,-3.0,255.480000,0.000000,0.000000 +2130,-3.0,255.600000,0.000000,0.000000 +2131,-3.0,255.720000,0.000000,0.000000 +2132,-3.0,255.840000,0.000000,0.000000 +2133,-3.0,255.960000,0.000000,0.000000 +2134,-3.0,256.080000,0.000000,0.000000 +2135,-3.0,256.200000,0.000000,0.000000 +2136,-3.0,256.320000,0.000000,0.000000 +2137,-3.0,256.440000,0.000000,0.000000 +2138,-3.0,256.560000,0.000000,0.000000 +2139,-3.0,256.680000,0.000000,0.000000 +2140,-3.0,256.800000,0.000000,0.000000 +2141,-3.0,256.920000,0.000000,0.000000 +2142,-3.0,257.040000,0.000000,0.000000 +2143,-3.0,257.160000,0.000000,0.000000 +2144,-3.0,257.280000,0.000000,0.000000 +2145,-3.0,257.400000,0.000000,0.000000 +2146,-3.0,257.520000,0.000000,0.000000 +2147,-3.0,257.640000,0.000000,0.000000 +2148,-3.0,257.760000,0.000000,0.000000 +2149,-3.0,257.880000,0.000000,0.000000 +2150,-3.0,258.000000,0.000000,0.000000 +2151,-3.0,258.120000,0.000000,0.000000 +2152,-3.0,258.240000,0.000000,0.000000 +2153,-3.0,258.360000,0.000000,0.000000 +2154,-3.0,258.480000,0.000000,0.000000 +2155,-3.0,258.600000,0.000000,0.000000 +2156,-3.0,258.720000,0.000000,0.000000 +2157,-3.0,258.840000,0.000000,0.000000 +2158,-3.0,258.960000,0.000000,0.000000 +2159,-3.0,259.080000,0.000000,0.000000 +2160,-3.0,259.200000,0.000000,0.000000 +2161,-3.0,259.320000,0.000000,0.000000 +2162,-3.0,259.440000,0.000000,0.000000 +2163,-3.0,259.560000,0.000000,0.000000 +2164,-3.0,259.680000,0.000000,0.000000 +2165,-3.0,259.800000,0.000000,0.000000 +2166,-3.0,259.920000,0.000000,0.000000 +2167,-3.0,260.040000,0.000000,0.000000 +2168,-3.0,260.160000,0.000000,0.000000 +2169,-3.0,260.280000,0.000000,0.000000 +2170,-3.0,260.400000,0.000000,0.000000 +2171,-3.0,260.520000,0.000000,0.000000 +2172,-3.0,260.640000,0.000000,0.000000 +2173,-3.0,260.760000,0.000000,0.000000 +2174,-3.0,260.880000,0.000000,0.000000 +2175,-3.0,261.000000,0.000000,0.000000 +2176,-3.0,261.120000,0.000000,0.000000 +2177,-3.0,261.240000,0.000000,0.000000 +2178,-3.0,261.360000,0.000000,0.000000 +2179,-3.0,261.480000,0.000000,0.000000 +2180,-3.0,261.600000,0.000000,0.000000 +2181,-3.0,261.720000,0.000000,0.000000 +2182,-3.0,261.840000,0.000000,0.000000 +2183,-3.0,261.960000,0.000000,0.000000 +2184,-3.0,262.080000,0.000000,0.000000 +2185,-3.0,262.200000,0.000000,0.000000 +2186,-3.0,262.320000,0.000000,0.000000 +2187,-3.0,262.440000,0.000000,0.000000 +2188,-3.0,262.560000,0.000000,0.000000 +2189,-3.0,262.680000,0.000000,0.000000 +2190,-3.0,262.800000,0.000000,0.000000 +2191,-3.0,262.920000,0.000000,0.000000 +2192,-3.0,263.040000,0.000000,0.000000 +2193,-3.0,263.160000,0.000000,0.000000 +2194,-3.0,263.280000,0.000000,0.000000 +2195,-3.0,263.400000,0.000000,0.000000 +2196,-3.0,263.520000,0.000000,0.000000 +2197,-3.0,263.640000,0.000000,0.000000 +2198,-3.0,263.760000,0.000000,0.000000 +2199,-3.0,263.880000,0.000000,0.000000 +2200,-3.0,264.000000,0.000000,0.000000 +2201,-3.0,264.120000,0.000000,0.000000 +2202,-3.0,264.240000,0.000000,0.000000 +2203,-3.0,264.360000,0.000000,0.000000 +2204,-3.0,264.480000,0.000000,0.000000 +2205,-3.0,264.600000,0.000000,0.000000 +2206,-3.0,264.720000,0.000000,0.000000 +2207,-3.0,264.840000,0.000000,0.000000 +2208,-3.0,264.960000,0.000000,0.000000 +2209,-3.0,265.080000,0.000000,0.000000 +2210,-3.0,265.200000,0.000000,0.000000 +2211,-3.0,265.320000,0.000000,0.000000 +2212,-3.0,265.440000,0.000000,0.000000 +2213,-3.0,265.560000,0.000000,0.000000 +2214,-3.0,265.680000,0.000000,0.000000 +2215,-3.0,265.800000,0.000000,0.000000 +2216,-3.0,265.920000,0.000000,0.000000 +2217,-3.0,266.040000,0.000000,0.000000 +2218,-3.0,266.160000,0.000000,0.000000 +2219,-3.0,266.280000,0.000000,0.000000 +2220,-3.0,266.400000,0.000000,0.000000 +2221,-3.0,266.520000,0.000000,0.000000 +2222,-3.0,266.640000,0.000000,0.000000 +2223,-3.0,266.760000,0.000000,0.000000 +2224,-3.0,266.880000,0.000000,0.000000 +2225,-3.0,267.000000,0.000000,0.000000 +2226,-3.0,267.120000,0.000000,0.000000 +2227,-3.0,267.240000,0.000000,0.000000 +2228,-3.0,267.360000,0.000000,0.000000 +2229,-3.0,267.480000,0.000000,0.000000 +2230,-3.0,267.600000,0.000000,0.000000 +2231,-3.0,267.720000,0.000000,0.000000 +2232,-3.0,267.840000,0.000000,0.000000 +2233,-3.0,267.960000,0.000000,0.000000 +2234,-3.0,268.080000,0.000000,0.000000 +2235,-3.0,268.200000,0.000000,0.000000 +2236,-3.0,268.320000,0.000000,0.000000 +2237,-3.0,268.440000,0.000000,0.000000 +2238,-3.0,268.560000,0.000000,0.000000 +2239,-3.0,268.680000,0.000000,0.000000 +2240,-3.0,268.800000,0.000000,0.000000 +2241,-3.0,268.920000,0.000000,0.000000 +2242,-3.0,269.040000,0.000000,0.000000 +2243,-3.0,269.160000,0.000000,0.000000 +2244,-3.0,269.280000,0.000000,0.000000 +2245,-3.0,269.400000,0.000000,0.000000 +2246,-3.0,269.520000,0.000000,0.000000 +2247,-3.0,269.640000,0.000000,0.000000 +2248,-3.0,269.760000,0.000000,0.000000 +2249,-3.0,269.880000,0.000000,0.000000 +2250,-3.0,270.000000,0.000000,0.000000 +2251,-3.0,270.120000,0.000000,0.000000 +2252,-3.0,270.240000,0.000000,0.000000 +2253,-3.0,270.360000,0.000000,0.000000 +2254,-3.0,270.480000,0.000000,0.000000 +2255,-3.0,270.600000,0.000000,0.000000 +2256,-3.0,270.720000,0.000000,0.000000 +2257,-3.0,270.840000,0.000000,0.000000 +2258,-3.0,270.960000,0.000000,0.000000 +2259,-3.0,271.080000,0.000000,0.000000 +2260,-3.0,271.200000,0.000000,0.000000 +2261,-3.0,271.320000,0.000000,0.000000 +2262,-3.0,271.440000,0.000000,0.000000 +2263,-3.0,271.560000,0.000000,0.000000 +2264,-3.0,271.680000,0.000000,0.000000 +2265,-3.0,271.800000,0.000000,0.000000 +2266,-3.0,271.920000,0.000000,0.000000 +2267,-3.0,272.040000,0.000000,0.000000 +2268,-3.0,272.160000,0.000000,0.000000 +2269,-3.0,272.280000,0.000000,0.000000 +2270,-3.0,272.400000,0.000000,0.000000 +2271,-3.0,272.520000,0.000000,0.000000 +2272,-3.0,272.640000,0.000000,0.000000 +2273,-3.0,272.760000,0.000000,0.000000 +2274,-3.0,272.880000,0.000000,0.000000 +2275,-3.0,273.000000,0.000000,0.000000 +2276,-3.0,273.120000,0.000000,0.000000 +2277,-3.0,273.240000,0.000000,0.000000 +2278,-3.0,273.360000,0.000000,0.000000 +2279,-3.0,273.480000,0.000000,0.000000 +2280,-3.0,273.600000,0.000000,0.000000 +2281,-3.0,273.720000,0.000000,0.000000 +2282,-3.0,273.840000,0.000000,0.000000 +2283,-3.0,273.960000,0.000000,0.000000 +2284,-3.0,274.080000,0.000000,0.000000 +2285,-3.0,274.200000,0.000000,0.000000 +2286,-3.0,274.320000,0.000000,0.000000 +2287,-3.0,274.440000,0.000000,0.000000 +2288,-3.0,274.560000,0.000000,0.000000 +2289,-3.0,274.680000,0.000000,0.000000 +2290,-3.0,274.800000,0.000000,0.000000 +2291,-3.0,274.920000,0.000000,0.000000 +2292,-3.0,275.040000,0.000000,0.000000 +2293,-3.0,275.160000,0.000000,0.000000 +2294,-3.0,275.280000,0.000000,0.000000 +2295,-3.0,275.400000,0.000000,0.000000 +2296,-3.0,275.520000,0.000000,0.000000 +2297,-3.0,275.640000,0.000000,0.000000 +2298,-3.0,275.760000,0.000000,0.000000 +2299,-3.0,275.880000,0.000000,0.000000 +2300,-3.0,276.000000,0.000000,0.000000 +2301,-3.0,276.120000,0.000000,0.000000 +2302,-3.0,276.240000,0.000000,0.000000 +2303,-3.0,276.360000,0.000000,0.000000 +2304,-3.0,276.480000,0.000000,0.000000 +2305,-3.0,276.600000,0.000000,0.000000 +2306,-3.0,276.720000,0.000000,0.000000 +2307,-3.0,276.840000,0.000000,0.000000 +2308,-3.0,276.960000,0.000000,0.000000 +2309,-3.0,277.080000,0.000000,0.000000 +2310,-3.0,277.200000,0.000000,0.000000 +2311,-3.0,277.320000,0.000000,0.000000 +2312,-3.0,277.440000,0.000000,0.000000 +2313,-3.0,277.560000,0.000000,0.000000 +2314,-3.0,277.680000,0.000000,0.000000 +2315,-3.0,277.800000,0.000000,0.000000 +2316,-3.0,277.920000,0.000000,0.000000 +2317,-3.0,278.040000,0.000000,0.000000 +2318,-3.0,278.160000,0.000000,0.000000 +2319,-3.0,278.280000,0.000000,0.000000 +2320,-3.0,278.400000,0.000000,0.000000 +2321,-3.0,278.520000,0.000000,0.000000 +2322,-3.0,278.640000,0.000000,0.000000 +2323,-3.0,278.760000,0.000000,0.000000 +2324,-3.0,278.880000,0.000000,0.000000 +2325,-3.0,279.000000,0.000000,0.000000 +2326,-3.0,279.120000,0.000000,0.000000 +2327,-3.0,279.240000,0.000000,0.000000 +2328,-3.0,279.360000,0.000000,0.000000 +2329,-3.0,279.480000,0.000000,0.000000 +2330,-3.0,279.600000,0.000000,0.000000 +2331,-3.0,279.720000,0.000000,0.000000 +2332,-3.0,279.840000,0.000000,0.000000 +2333,-3.0,279.960000,0.000000,0.000000 +2334,-3.0,280.080000,0.000000,0.000000 +2335,-3.0,280.200000,0.000000,0.000000 +2336,-3.0,280.320000,0.000000,0.000000 +2337,-3.0,280.440000,0.000000,0.000000 +2338,-3.0,280.560000,0.000000,0.000000 +2339,-3.0,280.680000,0.000000,0.000000 +2340,-3.0,280.800000,0.000000,0.000000 +2341,-3.0,280.920000,0.000000,0.000000 +2342,-3.0,281.040000,0.000000,0.000000 +2343,-3.0,281.160000,0.000000,0.000000 +2344,-3.0,281.280000,0.000000,0.000000 +2345,-3.0,281.400000,0.000000,0.000000 +2346,-3.0,281.520000,0.000000,0.000000 +2347,-3.0,281.640000,0.000000,0.000000 +2348,-3.0,281.760000,0.000000,0.000000 +2349,-3.0,281.880000,0.000000,0.000000 +2350,-3.0,282.000000,0.000000,0.000000 +2351,-3.0,282.120000,0.000000,0.000000 +2352,-3.0,282.240000,0.000000,0.000000 +2353,-3.0,282.360000,0.000000,0.000000 +2354,-3.0,282.480000,0.000000,0.000000 +2355,-3.0,282.600000,0.000000,0.000000 +2356,-3.0,282.720000,0.000000,0.000000 +2357,-3.0,282.840000,0.000000,0.000000 +2358,-3.0,282.960000,0.000000,0.000000 +2359,-3.0,283.080000,0.000000,0.000000 +2360,-3.0,283.200000,0.000000,0.000000 +2361,-3.0,283.320000,0.000000,0.000000 +2362,-3.0,283.440000,0.000000,0.000000 +2363,-3.0,283.560000,0.000000,0.000000 +2364,-3.0,283.680000,0.000000,0.000000 +2365,-3.0,283.800000,0.000000,0.000000 +2366,-3.0,283.920000,0.000000,0.000000 +2367,-3.0,284.040000,0.000000,0.000000 +2368,-3.0,284.160000,0.000000,0.000000 +2369,-3.0,284.280000,0.000000,0.000000 +2370,-3.0,284.400000,0.000000,0.000000 +2371,-3.0,284.520000,0.000000,0.000000 +2372,-3.0,284.640000,0.000000,0.000000 +2373,-3.0,284.760000,0.000000,0.000000 +2374,-3.0,284.880000,0.000000,0.000000 +2375,-3.0,285.000000,0.000000,0.000000 +2376,-3.0,285.120000,0.000000,0.000000 +2377,-3.0,285.240000,0.000000,0.000000 +2378,-3.0,285.360000,0.000000,0.000000 +2379,-3.0,285.480000,0.000000,0.000000 +2380,-3.0,285.600000,0.000000,0.000000 +2381,-3.0,285.720000,0.000000,0.000000 +2382,-3.0,285.840000,0.000000,0.000000 +2383,-3.0,285.960000,0.000000,0.000000 +2384,-3.0,286.080000,0.000000,0.000000 +2385,-3.0,286.200000,0.000000,0.000000 +2386,-3.0,286.320000,0.000000,0.000000 +2387,-3.0,286.440000,0.000000,0.000000 +2388,-3.0,286.560000,0.000000,0.000000 +2389,-3.0,286.680000,0.000000,0.000000 +2390,-3.0,286.800000,0.000000,0.000000 +2391,-3.0,286.920000,0.000000,0.000000 +2392,-3.0,287.040000,0.000000,0.000000 +2393,-3.0,287.160000,0.000000,0.000000 +2394,-3.0,287.280000,0.000000,0.000000 +2395,-3.0,287.400000,0.000000,0.000000 +2396,-3.0,287.520000,0.000000,0.000000 +2397,-3.0,287.640000,0.000000,0.000000 +2398,-3.0,287.760000,0.000000,0.000000 +2399,-3.0,287.880000,0.000000,0.000000 +2400,-3.0,288.000000,0.000000,0.000000 +2401,-3.0,288.120000,0.000000,0.000000 +2402,-3.0,288.240000,0.000000,0.000000 +2403,-3.0,288.360000,0.000000,0.000000 +2404,-3.0,288.480000,0.000000,0.000000 +2405,-3.0,288.600000,0.000000,0.000000 +2406,-3.0,288.720000,0.000000,0.000000 +2407,-3.0,288.840000,0.000000,0.000000 +2408,-3.0,288.960000,0.000000,0.000000 +2409,-3.0,289.080000,0.000000,0.000000 +2410,-3.0,289.200000,0.000000,0.000000 +2411,-3.0,289.320000,0.000000,0.000000 +2412,-3.0,289.440000,0.000000,0.000000 +2413,-3.0,289.560000,0.000000,0.000000 +2414,-3.0,289.680000,0.000000,0.000000 +2415,-3.0,289.800000,0.000000,0.000000 +2416,-3.0,289.920000,0.000000,0.000000 +2417,-3.0,290.040000,0.000000,0.000000 +2418,-3.0,290.160000,0.000000,0.000000 +2419,-3.0,290.280000,0.000000,0.000000 +2420,-3.0,290.400000,0.000000,0.000000 +2421,-3.0,290.520000,0.000000,0.000000 +2422,-3.0,290.640000,0.000000,0.000000 +2423,-3.0,290.760000,0.000000,0.000000 +2424,-3.0,290.880000,0.000000,0.000000 +2425,-3.0,291.000000,0.000000,0.000000 +2426,-3.0,291.120000,0.000000,0.000000 +2427,-3.0,291.240000,0.000000,0.000000 +2428,-3.0,291.360000,0.000000,0.000000 +2429,-3.0,291.480000,0.000000,0.000000 +2430,-3.0,291.600000,0.000000,0.000000 +2431,-3.0,291.720000,0.000000,0.000000 +2432,-3.0,291.840000,0.000000,0.000000 +2433,-3.0,291.960000,0.000000,0.000000 +2434,-3.0,292.080000,0.000000,0.000000 +2435,-3.0,292.200000,0.000000,0.000000 +2436,-3.0,292.320000,0.000000,0.000000 +2437,-3.0,292.440000,0.000000,0.000000 +2438,-3.0,292.560000,0.000000,0.000000 +2439,-3.0,292.680000,0.000000,0.000000 +2440,-3.0,292.800000,0.000000,0.000000 +2441,-3.0,292.920000,0.000000,0.000000 +2442,-3.0,293.040000,0.000000,0.000000 +2443,-3.0,293.160000,0.000000,0.000000 +2444,-3.0,293.280000,0.000000,0.000000 +2445,-3.0,293.400000,0.000000,0.000000 +2446,-3.0,293.520000,0.000000,0.000000 +2447,-3.0,293.640000,0.000000,0.000000 +2448,-3.0,293.760000,0.000000,0.000000 +2449,-3.0,293.880000,0.000000,0.000000 +2450,-3.0,294.000000,0.000000,0.000000 +2451,-3.0,294.120000,0.000000,0.000000 +2452,-3.0,294.240000,0.000000,0.000000 +2453,-3.0,294.360000,0.000000,0.000000 +2454,-3.0,294.480000,0.000000,0.000000 +2455,-3.0,294.600000,0.000000,0.000000 +2456,-3.0,294.720000,0.000000,0.000000 +2457,-3.0,294.840000,0.000000,0.000000 +2458,-3.0,294.960000,0.000000,0.000000 +2459,-3.0,295.080000,0.000000,0.000000 +2460,-3.0,295.200000,0.000000,0.000000 +2461,-3.0,295.320000,0.000000,0.000000 +2462,-3.0,295.440000,0.000000,0.000000 +2463,-3.0,295.560000,0.000000,0.000000 +2464,-3.0,295.680000,0.000000,0.000000 +2465,-3.0,295.800000,0.000000,0.000000 +2466,-3.0,295.920000,0.000000,0.000000 +2467,-3.0,296.040000,0.000000,0.000000 +2468,-3.0,296.160000,0.000000,0.000000 +2469,-3.0,296.280000,0.000000,0.000000 +2470,-3.0,296.400000,0.000000,0.000000 +2471,-3.0,296.520000,0.000000,0.000000 +2472,-3.0,296.640000,0.000000,0.000000 +2473,-3.0,296.760000,0.000000,0.000000 +2474,-3.0,296.880000,0.000000,0.000000 +2475,-3.0,297.000000,0.000000,0.000000 +2476,-3.0,297.120000,0.000000,0.000000 +2477,-3.0,297.240000,0.000000,0.000000 +2478,-3.0,297.360000,0.000000,0.000000 +2479,-3.0,297.480000,0.000000,0.000000 +2480,-3.0,297.600000,0.000000,0.000000 +2481,-3.0,297.720000,0.000000,0.000000 +2482,-3.0,297.840000,0.000000,0.000000 +2483,-3.0,297.960000,0.000000,0.000000 +2484,-3.0,298.080000,0.000000,0.000000 +2485,-3.0,298.200000,0.000000,0.000000 +2486,-3.0,298.320000,0.000000,0.000000 +2487,-3.0,298.440000,0.000000,0.000000 +2488,-3.0,298.560000,0.000000,0.000000 +2489,-3.0,298.680000,0.000000,0.000000 +2490,-3.0,298.800000,0.000000,0.000000 +2491,-3.0,298.920000,0.000000,0.000000 +2492,-3.0,299.040000,0.000000,0.000000 +2493,-3.0,299.160000,0.000000,0.000000 +2494,-3.0,299.280000,0.000000,0.000000 +2495,-3.0,299.400000,0.000000,0.000000 +2496,-3.0,299.520000,0.000000,0.000000 +2497,-3.0,299.640000,0.000000,0.000000 +2498,-3.0,299.760000,0.000000,0.000000 +2499,-3.0,299.880000,0.000000,0.000000 +2500,-3.0,300.000000,0.000000,0.000000 +2501,-3.0,300.120000,0.000000,0.000000 +2502,-3.0,300.240000,0.000000,0.000000 +2503,-3.0,300.360000,0.000000,0.000000 +2504,-3.0,300.480000,0.000000,0.000000 +2505,-3.0,300.600000,0.000000,0.000000 +2506,-3.0,300.720000,0.000000,0.000000 +2507,-3.0,300.840000,0.000000,0.000000 +2508,-3.0,300.960000,0.000000,0.000000 +2509,-3.0,301.080000,0.000000,0.000000 +2510,-3.0,301.200000,0.000000,0.000000 +2511,-3.0,301.320000,0.000000,0.000000 +2512,-3.0,301.440000,0.000000,0.000000 +2513,-3.0,301.560000,0.000000,0.000000 +2514,-3.0,301.680000,0.000000,0.000000 +2515,-3.0,301.800000,0.000000,0.000000 +2516,-3.0,301.920000,0.000000,0.000000 +2517,-3.0,302.040000,0.000000,0.000000 +2518,-3.0,302.160000,0.000000,0.000000 +2519,-3.0,302.280000,0.000000,0.000000 +2520,-3.0,302.400000,0.000000,0.000000 +2521,-3.0,302.520000,0.000000,0.000000 +2522,-3.0,302.640000,0.000000,0.000000 +2523,-3.0,302.760000,0.000000,0.000000 +2524,-3.0,302.880000,0.000000,0.000000 +2525,-3.0,303.000000,0.000000,0.000000 +2526,-3.0,303.120000,0.000000,0.000000 +2527,-3.0,303.240000,0.000000,0.000000 +2528,-3.0,303.360000,0.000000,0.000000 +2529,-3.0,303.480000,0.000000,0.000000 +2530,-3.0,303.600000,0.000000,0.000000 +2531,-3.0,303.720000,0.000000,0.000000 +2532,-3.0,303.840000,0.000000,0.000000 +2533,-3.0,303.960000,0.000000,0.000000 +2534,-3.0,304.080000,0.000000,0.000000 +2535,-3.0,304.200000,0.000000,0.000000 +2536,-3.0,304.320000,0.000000,0.000000 +2537,-3.0,304.440000,0.000000,0.000000 +2538,-3.0,304.560000,0.000000,0.000000 +2539,-3.0,304.680000,0.000000,0.000000 +2540,-3.0,304.800000,0.000000,0.000000 +2541,-3.0,304.920000,0.000000,0.000000 +2542,-3.0,305.040000,0.000000,0.000000 +2543,-3.0,305.160000,0.000000,0.000000 +2544,-3.0,305.280000,0.000000,0.000000 +2545,-3.0,305.400000,0.000000,0.000000 +2546,-3.0,305.520000,0.000000,0.000000 +2547,-3.0,305.640000,0.000000,0.000000 +2548,-3.0,305.760000,0.000000,0.000000 +2549,-3.0,305.880000,0.000000,0.000000 +2550,-3.0,306.000000,0.000000,0.000000 +2551,-3.0,306.120000,0.000000,0.000000 +2552,-3.0,306.240000,0.000000,0.000000 +2553,-3.0,306.360000,0.000000,0.000000 +2554,-3.0,306.480000,0.000000,0.000000 +2555,-3.0,306.600000,0.000000,0.000000 +2556,-3.0,306.720000,0.000000,0.000000 +2557,-3.0,306.840000,0.000000,0.000000 +2558,-3.0,306.960000,0.000000,0.000000 +2559,-3.0,307.080000,0.000000,0.000000 +2560,-3.0,307.200000,0.000000,0.000000 +2561,-3.0,307.320000,0.000000,0.000000 +2562,-3.0,307.440000,0.000000,0.000000 +2563,-3.0,307.560000,0.000000,0.000000 +2564,-3.0,307.680000,0.000000,0.000000 +2565,-3.0,307.800000,0.000000,0.000000 +2566,-3.0,307.920000,0.000000,0.000000 +2567,-3.0,308.040000,0.000000,0.000000 +2568,-3.0,308.160000,0.000000,0.000000 +2569,-3.0,308.280000,0.000000,0.000000 +2570,-3.0,308.400000,0.000000,0.000000 +2571,-3.0,308.520000,0.000000,0.000000 +2572,-3.0,308.640000,0.000000,0.000000 +2573,-3.0,308.760000,0.000000,0.000000 +2574,-3.0,308.880000,0.000000,0.000000 +2575,-3.0,309.000000,0.000000,0.000000 +2576,-3.0,309.120000,0.000000,0.000000 +2577,-3.0,309.240000,0.000000,0.000000 +2578,-3.0,309.360000,0.000000,0.000000 +2579,-3.0,309.480000,0.000000,0.000000 +2580,-3.0,309.600000,0.000000,0.000000 +2581,-3.0,309.720000,0.000000,0.000000 +2582,-3.0,309.840000,0.000000,0.000000 +2583,-3.0,309.960000,0.000000,0.000000 +2584,-3.0,310.080000,0.000000,0.000000 +2585,-3.0,310.200000,0.000000,0.000000 +2586,-3.0,310.320000,0.000000,0.000000 +2587,-3.0,310.440000,0.000000,0.000000 +2588,-3.0,310.560000,0.000000,0.000000 +2589,-3.0,310.680000,0.000000,0.000000 +2590,-3.0,310.800000,0.000000,0.000000 +2591,-3.0,310.920000,0.000000,0.000000 +2592,-3.0,311.040000,0.000000,0.000000 +2593,-3.0,311.160000,0.000000,0.000000 +2594,-3.0,311.280000,0.000000,0.000000 +2595,-3.0,311.400000,0.000000,0.000000 +2596,-3.0,311.520000,0.000000,0.000000 +2597,-3.0,311.640000,0.000000,0.000000 +2598,-3.0,311.760000,0.000000,0.000000 +2599,-3.0,311.880000,0.000000,0.000000 +2600,-3.0,312.000000,0.000000,0.000000 +2601,-3.0,312.120000,0.000000,0.000000 +2602,-3.0,312.240000,0.000000,0.000000 +2603,-3.0,312.360000,0.000000,0.000000 +2604,-3.0,312.480000,0.000000,0.000000 +2605,-3.0,312.600000,0.000000,0.000000 +2606,-3.0,312.720000,0.000000,0.000000 +2607,-3.0,312.840000,0.000000,0.000000 +2608,-3.0,312.960000,0.000000,0.000000 +2609,-3.0,313.080000,0.000000,0.000000 +2610,-3.0,313.200000,0.000000,0.000000 +2611,-3.0,313.320000,0.000000,0.000000 +2612,-3.0,313.440000,0.000000,0.000000 +2613,-3.0,313.560000,0.000000,0.000000 +2614,-3.0,313.680000,0.000000,0.000000 +2615,-3.0,313.800000,0.000000,0.000000 +2616,-3.0,313.920000,0.000000,0.000000 +2617,-3.0,314.040000,0.000000,0.000000 +2618,-3.0,314.160000,0.000000,0.000000 +2619,-3.0,314.280000,0.000000,0.000000 +2620,-3.0,314.400000,0.000000,0.000000 +2621,-3.0,314.520000,0.000000,0.000000 +2622,-3.0,314.640000,0.000000,0.000000 +2623,-3.0,314.760000,0.000000,0.000000 +2624,-3.0,314.880000,0.000000,0.000000 +2625,-3.0,315.000000,0.000000,0.000000 +2626,-3.0,315.120000,0.000000,0.000000 +2627,-3.0,315.240000,0.000000,0.000000 +2628,-3.0,315.360000,0.000000,0.000000 +2629,-3.0,315.480000,0.000000,0.000000 +2630,-3.0,315.600000,0.000000,0.000000 +2631,-3.0,315.720000,0.000000,0.000000 +2632,-3.0,315.840000,0.000000,0.000000 +2633,-3.0,315.960000,0.000000,0.000000 +2634,-3.0,316.080000,0.000000,0.000000 +2635,-3.0,316.200000,0.000000,0.000000 +2636,-3.0,316.320000,0.000000,0.000000 +2637,-3.0,316.440000,0.000000,0.000000 +2638,-3.0,316.560000,0.000000,0.000000 +2639,-3.0,316.680000,0.000000,0.000000 +2640,-3.0,316.800000,0.000000,0.000000 +2641,-3.0,316.920000,0.000000,0.000000 +2642,-3.0,317.040000,0.000000,0.000000 +2643,-3.0,317.160000,0.000000,0.000000 +2644,-3.0,317.280000,0.000000,0.000000 +2645,-3.0,317.400000,0.000000,0.000000 +2646,-3.0,317.520000,0.000000,0.000000 +2647,-3.0,317.640000,0.000000,0.000000 +2648,-3.0,317.760000,0.000000,0.000000 +2649,-3.0,317.880000,0.000000,0.000000 +2650,-3.0,318.000000,0.000000,0.000000 +2651,-3.0,318.120000,0.000000,0.000000 +2652,-3.0,318.240000,0.000000,0.000000 +2653,-3.0,318.360000,0.000000,0.000000 +2654,-3.0,318.480000,0.000000,0.000000 +2655,-3.0,318.600000,0.000000,0.000000 +2656,-3.0,318.720000,0.000000,0.000000 +2657,-3.0,318.840000,0.000000,0.000000 +2658,-3.0,318.960000,0.000000,0.000000 +2659,-3.0,319.080000,0.000000,0.000000 +2660,-3.0,319.200000,0.000000,0.000000 +2661,-3.0,319.320000,0.000000,0.000000 +2662,-3.0,319.440000,0.000000,0.000000 +2663,-3.0,319.560000,0.000000,0.000000 +2664,-3.0,319.680000,0.000000,0.000000 +2665,-3.0,319.800000,0.000000,0.000000 +2666,-3.0,319.920000,0.000000,0.000000 +2667,-3.0,320.040000,0.000000,0.000000 +2668,-3.0,320.160000,0.000000,0.000000 +2669,-3.0,320.280000,0.000000,0.000000 +2670,-3.0,320.400000,0.000000,0.000000 +2671,-3.0,320.520000,0.000000,0.000000 +2672,-3.0,320.640000,0.000000,0.000000 +2673,-3.0,320.760000,0.000000,0.000000 +2674,-3.0,320.880000,0.000000,0.000000 +2675,-3.0,321.000000,0.000000,0.000000 +2676,-3.0,321.120000,0.000000,0.000000 +2677,-3.0,321.240000,0.000000,0.000000 +2678,-3.0,321.360000,0.000000,0.000000 +2679,-3.0,321.480000,0.000000,0.000000 +2680,-3.0,321.600000,0.000000,0.000000 +2681,-3.0,321.720000,0.000000,0.000000 +2682,-3.0,321.840000,0.000000,0.000000 +2683,-3.0,321.960000,0.000000,0.000000 +2684,-3.0,322.080000,0.000000,0.000000 +2685,-3.0,322.200000,0.000000,0.000000 +2686,-3.0,322.320000,0.000000,0.000000 +2687,-3.0,322.440000,0.000000,0.000000 +2688,-3.0,322.560000,0.000000,0.000000 +2689,-3.0,322.680000,0.000000,0.000000 +2690,-3.0,322.800000,0.000000,0.000000 +2691,-3.0,322.920000,0.000000,0.000000 +2692,-3.0,323.040000,0.000000,0.000000 +2693,-3.0,323.160000,0.000000,0.000000 +2694,-3.0,323.280000,0.000000,0.000000 +2695,-3.0,323.400000,0.000000,0.000000 +2696,-3.0,323.520000,0.000000,0.000000 +2697,-3.0,323.640000,0.000000,0.000000 +2698,-3.0,323.760000,0.000000,0.000000 +2699,-3.0,323.880000,0.000000,0.000000 +2700,-3.0,324.000000,0.000000,0.000000 +2701,-3.0,324.120000,0.000000,0.000000 +2702,-3.0,324.240000,0.000000,0.000000 +2703,-3.0,324.360000,0.000000,0.000000 +2704,-3.0,324.480000,0.000000,0.000000 +2705,-3.0,324.600000,0.000000,0.000000 +2706,-3.0,324.720000,0.000000,0.000000 +2707,-3.0,324.840000,0.000000,0.000000 +2708,-3.0,324.960000,0.000000,0.000000 +2709,-3.0,325.080000,0.000000,0.000000 +2710,-3.0,325.200000,0.000000,0.000000 +2711,-3.0,325.320000,0.000000,0.000000 +2712,-3.0,325.440000,0.000000,0.000000 +2713,-3.0,325.560000,0.000000,0.000000 +2714,-3.0,325.680000,0.000000,0.000000 +2715,-3.0,325.800000,0.000000,0.000000 +2716,-3.0,325.920000,0.000000,0.000000 +2717,-3.0,326.040000,0.000000,0.000000 +2718,-3.0,326.160000,0.000000,0.000000 +2719,-3.0,326.280000,0.000000,0.000000 +2720,-3.0,326.400000,0.000000,0.000000 +2721,-3.0,326.520000,0.000000,0.000000 +2722,-3.0,326.640000,0.000000,0.000000 +2723,-3.0,326.760000,0.000000,0.000000 +2724,-3.0,326.880000,0.000000,0.000000 +2725,-3.0,327.000000,0.000000,0.000000 +2726,-3.0,327.120000,0.000000,0.000000 +2727,-3.0,327.240000,0.000000,0.000000 +2728,-3.0,327.360000,0.000000,0.000000 +2729,-3.0,327.480000,0.000000,0.000000 +2730,-3.0,327.600000,0.000000,0.000000 +2731,-3.0,327.720000,0.000000,0.000000 +2732,-3.0,327.840000,0.000000,0.000000 +2733,-3.0,327.960000,0.000000,0.000000 +2734,-3.0,328.080000,0.000000,0.000000 +2735,-3.0,328.200000,0.000000,0.000000 +2736,-3.0,328.320000,0.000000,0.000000 +2737,-3.0,328.440000,0.000000,0.000000 +2738,-3.0,328.560000,0.000000,0.000000 +2739,-3.0,328.680000,0.000000,0.000000 +2740,-3.0,328.800000,0.000000,0.000000 +2741,-3.0,328.920000,0.000000,0.000000 +2742,-3.0,329.040000,0.000000,0.000000 +2743,-3.0,329.160000,0.000000,0.000000 +2744,-3.0,329.280000,0.000000,0.000000 +2745,-3.0,329.400000,0.000000,0.000000 +2746,-3.0,329.520000,0.000000,0.000000 +2747,-3.0,329.640000,0.000000,0.000000 +2748,-3.0,329.760000,0.000000,0.000000 +2749,-3.0,329.880000,0.000000,0.000000 +2750,-3.0,330.000000,0.000000,0.000000 +2751,-3.0,330.120000,0.000000,0.000000 +2752,-3.0,330.240000,0.000000,0.000000 +2753,-3.0,330.360000,0.000000,0.000000 +2754,-3.0,330.480000,0.000000,0.000000 +2755,-3.0,330.600000,0.000000,0.000000 +2756,-3.0,330.720000,0.000000,0.000000 +2757,-3.0,330.840000,0.000000,0.000000 +2758,-3.0,330.960000,0.000000,0.000000 +2759,-3.0,331.080000,0.000000,0.000000 +2760,-3.0,331.200000,0.000000,0.000000 +2761,-3.0,331.320000,0.000000,0.000000 +2762,-3.0,331.440000,0.000000,0.000000 +2763,-3.0,331.560000,0.000000,0.000000 +2764,-3.0,331.680000,0.000000,0.000000 +2765,-3.0,331.800000,0.000000,0.000000 +2766,-3.0,331.920000,0.000000,0.000000 +2767,-3.0,332.040000,0.000000,0.000000 +2768,-3.0,332.160000,0.000000,0.000000 +2769,-3.0,332.280000,0.000000,0.000000 +2770,-3.0,332.400000,0.000000,0.000000 +2771,-3.0,332.520000,0.000000,0.000000 +2772,-3.0,332.640000,0.000000,0.000000 +2773,-3.0,332.760000,0.000000,0.000000 +2774,-3.0,332.880000,0.000000,0.000000 +2775,-3.0,333.000000,0.000000,0.000000 +2776,-3.0,333.120000,0.000000,0.000000 +2777,-3.0,333.240000,0.000000,0.000000 +2778,-3.0,333.360000,0.000000,0.000000 +2779,-3.0,333.480000,0.000000,0.000000 +2780,-3.0,333.600000,0.000000,0.000000 +2781,-3.0,333.720000,0.000000,0.000000 +2782,-3.0,333.840000,0.000000,0.000000 +2783,-3.0,333.960000,0.000000,0.000000 +2784,-3.0,334.080000,0.000000,0.000000 +2785,-3.0,334.200000,0.000000,0.000000 +2786,-3.0,334.320000,0.000000,0.000000 +2787,-3.0,334.440000,0.000000,0.000000 +2788,-3.0,334.560000,0.000000,0.000000 +2789,-3.0,334.680000,0.000000,0.000000 +2790,-3.0,334.800000,0.000000,0.000000 +2791,-3.0,334.920000,0.000000,0.000000 +2792,-3.0,335.040000,0.000000,0.000000 +2793,-3.0,335.160000,0.000000,0.000000 +2794,-3.0,335.280000,0.000000,0.000000 +2795,-3.0,335.400000,0.000000,0.000000 +2796,-3.0,335.520000,0.000000,0.000000 +2797,-3.0,335.640000,0.000000,0.000000 +2798,-3.0,335.760000,0.000000,0.000000 +2799,-3.0,335.880000,0.000000,0.000000 +2800,-3.0,336.000000,0.000000,0.000000 +2801,-3.0,336.120000,0.000000,0.000000 +2802,-3.0,336.240000,0.000000,0.000000 +2803,-3.0,336.360000,0.000000,0.000000 +2804,-3.0,336.480000,0.000000,0.000000 +2805,-3.0,336.600000,0.000000,0.000000 +2806,-3.0,336.720000,0.000000,0.000000 +2807,-3.0,336.840000,0.000000,0.000000 +2808,-3.0,336.960000,0.000000,0.000000 +2809,-3.0,337.080000,0.000000,0.000000 +2810,-3.0,337.200000,0.000000,0.000000 +2811,-3.0,337.320000,0.000000,0.000000 +2812,-3.0,337.440000,0.000000,0.000000 +2813,-3.0,337.560000,0.000000,0.000000 +2814,-3.0,337.680000,0.000000,0.000000 +2815,-3.0,337.800000,0.000000,0.000000 +2816,-3.0,337.920000,0.000000,0.000000 +2817,-3.0,338.040000,0.000000,0.000000 +2818,-3.0,338.160000,0.000000,0.000000 +2819,-3.0,338.280000,0.000000,0.000000 +2820,-3.0,338.400000,0.000000,0.000000 +2821,-3.0,338.520000,0.000000,0.000000 +2822,-3.0,338.640000,0.000000,0.000000 +2823,-3.0,338.760000,0.000000,0.000000 +2824,-3.0,338.880000,0.000000,0.000000 +2825,-3.0,339.000000,0.000000,0.000000 +2826,-3.0,339.120000,0.000000,0.000000 +2827,-3.0,339.240000,0.000000,0.000000 +2828,-3.0,339.360000,0.000000,0.000000 +2829,-3.0,339.480000,0.000000,0.000000 +2830,-3.0,339.600000,0.000000,0.000000 +2831,-3.0,339.720000,0.000000,0.000000 +2832,-3.0,339.840000,0.000000,0.000000 +2833,-3.0,339.960000,0.000000,0.000000 +2834,-3.0,340.080000,0.000000,0.000000 +2835,-3.0,340.200000,0.000000,0.000000 +2836,-3.0,340.320000,0.000000,0.000000 +2837,-3.0,340.440000,0.000000,0.000000 +2838,-3.0,340.560000,0.000000,0.000000 +2839,-3.0,340.680000,0.000000,0.000000 +2840,-3.0,340.800000,0.000000,0.000000 +2841,-3.0,340.920000,0.000000,0.000000 +2842,-3.0,341.040000,0.000000,0.000000 +2843,-3.0,341.160000,0.000000,0.000000 +2844,-3.0,341.280000,0.000000,0.000000 +2845,-3.0,341.400000,0.000000,0.000000 +2846,-3.0,341.520000,0.000000,0.000000 +2847,-3.0,341.640000,0.000000,0.000000 +2848,-3.0,341.760000,0.000000,0.000000 +2849,-3.0,341.880000,0.000000,0.000000 +2850,-3.0,342.000000,0.000000,0.000000 +2851,-3.0,342.120000,0.000000,0.000000 +2852,-3.0,342.240000,0.000000,0.000000 +2853,-3.0,342.360000,0.000000,0.000000 +2854,-3.0,342.480000,0.000000,0.000000 +2855,-3.0,342.600000,0.000000,0.000000 +2856,-3.0,342.720000,0.000000,0.000000 +2857,-3.0,342.840000,0.000000,0.000000 +2858,-3.0,342.960000,0.000000,0.000000 +2859,-3.0,343.080000,0.000000,0.000000 +2860,-3.0,343.200000,0.000000,0.000000 +2861,-3.0,343.320000,0.000000,0.000000 +2862,-3.0,343.440000,0.000000,0.000000 +2863,-3.0,343.560000,0.000000,0.000000 +2864,-3.0,343.680000,0.000000,0.000000 +2865,-3.0,343.800000,0.000000,0.000000 +2866,-3.0,343.920000,0.000000,0.000000 +2867,-3.0,344.040000,0.000000,0.000000 +2868,-3.0,344.160000,0.000000,0.000000 +2869,-3.0,344.280000,0.000000,0.000000 +2870,-3.0,344.400000,0.000000,0.000000 +2871,-3.0,344.520000,0.000000,0.000000 +2872,-3.0,344.640000,0.000000,0.000000 +2873,-3.0,344.760000,0.000000,0.000000 +2874,-3.0,344.880000,0.000000,0.000000 +2875,-3.0,345.000000,0.000000,0.000000 +2876,-3.0,345.120000,0.000000,0.000000 +2877,-3.0,345.240000,0.000000,0.000000 +2878,-3.0,345.360000,0.000000,0.000000 +2879,-3.0,345.480000,0.000000,0.000000 +2880,-3.0,345.600000,0.000000,0.000000 +2881,-3.0,345.720000,0.000000,0.000000 +2882,-3.0,345.840000,0.000000,0.000000 +2883,-3.0,345.960000,0.000000,0.000000 +2884,-3.0,346.080000,0.000000,0.000000 +2885,-3.0,346.200000,0.000000,0.000000 +2886,-3.0,346.320000,0.000000,0.000000 +2887,-3.0,346.440000,0.000000,0.000000 +2888,-3.0,346.560000,0.000000,0.000000 +2889,-3.0,346.680000,0.000000,0.000000 +2890,-3.0,346.800000,0.000000,0.000000 +2891,-3.0,346.920000,0.000000,0.000000 +2892,-3.0,347.040000,0.000000,0.000000 +2893,-3.0,347.160000,0.000000,0.000000 +2894,-3.0,347.280000,0.000000,0.000000 +2895,-3.0,347.400000,0.000000,0.000000 +2896,-3.0,347.520000,0.000000,0.000000 +2897,-3.0,347.640000,0.000000,0.000000 +2898,-3.0,347.760000,0.000000,0.000000 +2899,-3.0,347.880000,0.000000,0.000000 +2900,-3.0,348.000000,0.000000,0.000000 +2901,-3.0,348.120000,0.000000,0.000000 +2902,-3.0,348.240000,0.000000,0.000000 +2903,-3.0,348.360000,0.000000,0.000000 +2904,-3.0,348.480000,0.000000,0.000000 +2905,-3.0,348.600000,0.000000,0.000000 +2906,-3.0,348.720000,0.000000,0.000000 +2907,-3.0,348.840000,0.000000,0.000000 +2908,-3.0,348.960000,0.000000,0.000000 +2909,-3.0,349.080000,0.000000,0.000000 +2910,-3.0,349.200000,0.000000,0.000000 +2911,-3.0,349.320000,0.000000,0.000000 +2912,-3.0,349.440000,0.000000,0.000000 +2913,-3.0,349.560000,0.000000,0.000000 +2914,-3.0,349.680000,0.000000,0.000000 +2915,-3.0,349.800000,0.000000,0.000000 +2916,-3.0,349.920000,0.000000,0.000000 +2917,-3.0,350.040000,0.000000,0.000000 +2918,-3.0,350.160000,0.000000,0.000000 +2919,-3.0,350.280000,0.000000,0.000000 +2920,-3.0,350.400000,0.000000,0.000000 +2921,-3.0,350.520000,0.000000,0.000000 +2922,-3.0,350.640000,0.000000,0.000000 +2923,-3.0,350.760000,0.000000,0.000000 +2924,-3.0,350.880000,0.000000,0.000000 +2925,-3.0,351.000000,0.000000,0.000000 +2926,-3.0,351.120000,0.000000,0.000000 +2927,-3.0,351.240000,0.000000,0.000000 +2928,-3.0,351.360000,0.000000,0.000000 +2929,-3.0,351.480000,0.000000,0.000000 +2930,-3.0,351.600000,0.000000,0.000000 +2931,-3.0,351.720000,0.000000,0.000000 +2932,-3.0,351.840000,0.000000,0.000000 +2933,-3.0,351.960000,0.000000,0.000000 +2934,-3.0,352.080000,0.000000,0.000000 +2935,-3.0,352.200000,0.000000,0.000000 +2936,-3.0,352.320000,0.000000,0.000000 +2937,-3.0,352.440000,0.000000,0.000000 +2938,-3.0,352.560000,0.000000,0.000000 +2939,-3.0,352.680000,0.000000,0.000000 +2940,-3.0,352.800000,0.000000,0.000000 +2941,-3.0,352.920000,0.000000,0.000000 +2942,-3.0,353.040000,0.000000,0.000000 +2943,-3.0,353.160000,0.000000,0.000000 +2944,-3.0,353.280000,0.000000,0.000000 +2945,-3.0,353.400000,0.000000,0.000000 +2946,-3.0,353.520000,0.000000,0.000000 +2947,-3.0,353.640000,0.000000,0.000000 +2948,-3.0,353.760000,0.000000,0.000000 +2949,-3.0,353.880000,0.000000,0.000000 +2950,-3.0,354.000000,0.000000,0.000000 +2951,-3.0,354.120000,0.000000,0.000000 +2952,-3.0,354.240000,0.000000,0.000000 +2953,-3.0,354.360000,0.000000,0.000000 +2954,-3.0,354.480000,0.000000,0.000000 +2955,-3.0,354.600000,0.000000,0.000000 +2956,-3.0,354.720000,0.000000,0.000000 +2957,-3.0,354.840000,0.000000,0.000000 +2958,-3.0,354.960000,0.000000,0.000000 +2959,-3.0,355.080000,0.000000,0.000000 +2960,-3.0,355.200000,0.000000,0.000000 +2961,-3.0,355.320000,0.000000,0.000000 +2962,-3.0,355.440000,0.000000,0.000000 +2963,-3.0,355.560000,0.000000,0.000000 +2964,-3.0,355.680000,0.000000,0.000000 +2965,-3.0,355.800000,0.000000,0.000000 +2966,-3.0,355.920000,0.000000,0.000000 +2967,-3.0,356.040000,0.000000,0.000000 +2968,-3.0,356.160000,0.000000,0.000000 +2969,-3.0,356.280000,0.000000,0.000000 +2970,-3.0,356.400000,0.000000,0.000000 +2971,-3.0,356.520000,0.000000,0.000000 +2972,-3.0,356.640000,0.000000,0.000000 +2973,-3.0,356.760000,0.000000,0.000000 +2974,-3.0,356.880000,0.000000,0.000000 +2975,-3.0,357.000000,0.000000,0.000000 +2976,-3.0,357.120000,0.000000,0.000000 +2977,-3.0,357.240000,0.000000,0.000000 +2978,-3.0,357.360000,0.000000,0.000000 +2979,-3.0,357.480000,0.000000,0.000000 +2980,-3.0,357.600000,0.000000,0.000000 +2981,-3.0,357.720000,0.000000,0.000000 +2982,-3.0,357.840000,0.000000,0.000000 +2983,-3.0,357.960000,0.000000,0.000000 +2984,-3.0,358.080000,0.000000,0.000000 +2985,-3.0,358.200000,0.000000,0.000000 +2986,-3.0,358.320000,0.000000,0.000000 +2987,-3.0,358.440000,0.000000,0.000000 +2988,-3.0,358.560000,0.000000,0.000000 +2989,-3.0,358.680000,0.000000,0.000000 +2990,-3.0,358.800000,0.000000,0.000000 +2991,-3.0,358.920000,0.000000,0.000000 +2992,-3.0,359.040000,0.000000,0.000000 +2993,-3.0,359.160000,0.000000,0.000000 +2994,-3.0,359.280000,0.000000,0.000000 +2995,-3.0,359.400000,0.000000,0.000000 +2996,-3.0,359.520000,0.000000,0.000000 +2997,-3.0,359.640000,0.000000,0.000000 +2998,-3.0,359.760000,0.000000,0.000000 +2999,-3.0,359.880000,0.000000,0.000000 diff --git a/scripts/trajectories/full_circle_in_15s.csv b/scripts/trajectories/full_circle_in_15s.csv new file mode 100644 index 0000000000..ad09f93413 --- /dev/null +++ b/scripts/trajectories/full_circle_in_15s.csv @@ -0,0 +1,3000 @@ +0,1.000000,0.000000,0.000000,0.000000 +1,0.999999,0.000000,0.000000,0.001047 +2,0.999998,0.000000,0.000000,0.002094 +3,0.999995,0.000000,0.000000,0.003142 +4,0.999991,0.000000,0.000000,0.004189 +5,0.999986,0.000000,0.000000,0.005236 +6,0.999980,0.000000,0.000000,0.006283 +7,0.999973,0.000000,0.000000,0.007330 +8,0.999965,0.000000,0.000000,0.008377 +9,0.999956,0.000000,0.000000,0.009425 +10,0.999945,0.000000,0.000000,0.010472 +11,0.999934,0.000000,0.000000,0.011519 +12,0.999921,0.000000,0.000000,0.012566 +13,0.999907,0.000000,0.000000,0.013613 +14,0.999893,0.000000,0.000000,0.014660 +15,0.999877,0.000000,0.000000,0.015707 +16,0.999860,0.000000,0.000000,0.016754 +17,0.999842,0.000000,0.000000,0.017801 +18,0.999822,0.000000,0.000000,0.018848 +19,0.999802,0.000000,0.000000,0.019895 +20,0.999781,0.000000,0.000000,0.020942 +21,0.999758,0.000000,0.000000,0.021989 +22,0.999735,0.000000,0.000000,0.023036 +23,0.999710,0.000000,0.000000,0.024083 +24,0.999684,0.000000,0.000000,0.025130 +25,0.999657,0.000000,0.000000,0.026177 +26,0.999629,0.000000,0.000000,0.027224 +27,0.999600,0.000000,0.000000,0.028271 +28,0.999570,0.000000,0.000000,0.029317 +29,0.999539,0.000000,0.000000,0.030364 +30,0.999507,0.000000,0.000000,0.031411 +31,0.999473,0.000000,0.000000,0.032457 +32,0.999439,0.000000,0.000000,0.033504 +33,0.999403,0.000000,0.000000,0.034551 +34,0.999366,0.000000,0.000000,0.035597 +35,0.999328,0.000000,0.000000,0.036644 +36,0.999289,0.000000,0.000000,0.037690 +37,0.999249,0.000000,0.000000,0.038737 +38,0.999208,0.000000,0.000000,0.039783 +39,0.999166,0.000000,0.000000,0.040829 +40,0.999123,0.000000,0.000000,0.041876 +41,0.999078,0.000000,0.000000,0.042922 +42,0.999033,0.000000,0.000000,0.043968 +43,0.998986,0.000000,0.000000,0.045014 +44,0.998939,0.000000,0.000000,0.046060 +45,0.998890,0.000000,0.000000,0.047106 +46,0.998840,0.000000,0.000000,0.048152 +47,0.998789,0.000000,0.000000,0.049198 +48,0.998737,0.000000,0.000000,0.050244 +49,0.998684,0.000000,0.000000,0.051290 +50,0.998630,0.000000,0.000000,0.052336 +51,0.998574,0.000000,0.000000,0.053382 +52,0.998518,0.000000,0.000000,0.054427 +53,0.998460,0.000000,0.000000,0.055473 +54,0.998402,0.000000,0.000000,0.056519 +55,0.998342,0.000000,0.000000,0.057564 +56,0.998281,0.000000,0.000000,0.058609 +57,0.998219,0.000000,0.000000,0.059655 +58,0.998156,0.000000,0.000000,0.060700 +59,0.998092,0.000000,0.000000,0.061745 +60,0.998027,0.000000,0.000000,0.062791 +61,0.997960,0.000000,0.000000,0.063836 +62,0.997893,0.000000,0.000000,0.064881 +63,0.997825,0.000000,0.000000,0.065926 +64,0.997755,0.000000,0.000000,0.066970 +65,0.997684,0.000000,0.000000,0.068015 +66,0.997613,0.000000,0.000000,0.069060 +67,0.997540,0.000000,0.000000,0.070105 +68,0.997466,0.000000,0.000000,0.071149 +69,0.997391,0.000000,0.000000,0.072194 +70,0.997314,0.000000,0.000000,0.073238 +71,0.997237,0.000000,0.000000,0.074283 +72,0.997159,0.000000,0.000000,0.075327 +73,0.997079,0.000000,0.000000,0.076371 +74,0.996999,0.000000,0.000000,0.077415 +75,0.996917,0.000000,0.000000,0.078459 +76,0.996835,0.000000,0.000000,0.079503 +77,0.996751,0.000000,0.000000,0.080547 +78,0.996666,0.000000,0.000000,0.081591 +79,0.996580,0.000000,0.000000,0.082634 +80,0.996493,0.000000,0.000000,0.083678 +81,0.996405,0.000000,0.000000,0.084721 +82,0.996315,0.000000,0.000000,0.085765 +83,0.996225,0.000000,0.000000,0.086808 +84,0.996134,0.000000,0.000000,0.087851 +85,0.996041,0.000000,0.000000,0.088894 +86,0.995947,0.000000,0.000000,0.089937 +87,0.995853,0.000000,0.000000,0.090980 +88,0.995757,0.000000,0.000000,0.092023 +89,0.995660,0.000000,0.000000,0.093066 +90,0.995562,0.000000,0.000000,0.094108 +91,0.995463,0.000000,0.000000,0.095151 +92,0.995363,0.000000,0.000000,0.096193 +93,0.995261,0.000000,0.000000,0.097235 +94,0.995159,0.000000,0.000000,0.098278 +95,0.995056,0.000000,0.000000,0.099320 +96,0.994951,0.000000,0.000000,0.100362 +97,0.994845,0.000000,0.000000,0.101404 +98,0.994739,0.000000,0.000000,0.102445 +99,0.994631,0.000000,0.000000,0.103487 +100,0.994522,0.000000,0.000000,0.104528 +101,0.994412,0.000000,0.000000,0.105570 +102,0.994301,0.000000,0.000000,0.106611 +103,0.994189,0.000000,0.000000,0.107652 +104,0.994075,0.000000,0.000000,0.108693 +105,0.993961,0.000000,0.000000,0.109734 +106,0.993845,0.000000,0.000000,0.110775 +107,0.993729,0.000000,0.000000,0.111816 +108,0.993611,0.000000,0.000000,0.112856 +109,0.993493,0.000000,0.000000,0.113897 +110,0.993373,0.000000,0.000000,0.114937 +111,0.993252,0.000000,0.000000,0.115977 +112,0.993130,0.000000,0.000000,0.117017 +113,0.993007,0.000000,0.000000,0.118057 +114,0.992883,0.000000,0.000000,0.119097 +115,0.992757,0.000000,0.000000,0.120137 +116,0.992631,0.000000,0.000000,0.121176 +117,0.992504,0.000000,0.000000,0.122216 +118,0.992375,0.000000,0.000000,0.123255 +119,0.992245,0.000000,0.000000,0.124294 +120,0.992115,0.000000,0.000000,0.125333 +121,0.991983,0.000000,0.000000,0.126372 +122,0.991850,0.000000,0.000000,0.127411 +123,0.991716,0.000000,0.000000,0.128449 +124,0.991581,0.000000,0.000000,0.129488 +125,0.991445,0.000000,0.000000,0.130526 +126,0.991308,0.000000,0.000000,0.131564 +127,0.991169,0.000000,0.000000,0.132602 +128,0.991030,0.000000,0.000000,0.133640 +129,0.990889,0.000000,0.000000,0.134678 +130,0.990748,0.000000,0.000000,0.135716 +131,0.990605,0.000000,0.000000,0.136753 +132,0.990461,0.000000,0.000000,0.137790 +133,0.990317,0.000000,0.000000,0.138827 +134,0.990171,0.000000,0.000000,0.139864 +135,0.990024,0.000000,0.000000,0.140901 +136,0.989876,0.000000,0.000000,0.141938 +137,0.989726,0.000000,0.000000,0.142974 +138,0.989576,0.000000,0.000000,0.144011 +139,0.989425,0.000000,0.000000,0.145047 +140,0.989272,0.000000,0.000000,0.146083 +141,0.989119,0.000000,0.000000,0.147119 +142,0.988964,0.000000,0.000000,0.148155 +143,0.988809,0.000000,0.000000,0.149190 +144,0.988652,0.000000,0.000000,0.150226 +145,0.988494,0.000000,0.000000,0.151261 +146,0.988335,0.000000,0.000000,0.152296 +147,0.988175,0.000000,0.000000,0.153331 +148,0.988014,0.000000,0.000000,0.154366 +149,0.987852,0.000000,0.000000,0.155400 +150,0.987688,0.000000,0.000000,0.156434 +151,0.987524,0.000000,0.000000,0.157469 +152,0.987359,0.000000,0.000000,0.158503 +153,0.987192,0.000000,0.000000,0.159537 +154,0.987024,0.000000,0.000000,0.160570 +155,0.986856,0.000000,0.000000,0.161604 +156,0.986686,0.000000,0.000000,0.162637 +157,0.986515,0.000000,0.000000,0.163670 +158,0.986343,0.000000,0.000000,0.164703 +159,0.986170,0.000000,0.000000,0.165736 +160,0.985996,0.000000,0.000000,0.166769 +161,0.985821,0.000000,0.000000,0.167801 +162,0.985645,0.000000,0.000000,0.168833 +163,0.985467,0.000000,0.000000,0.169866 +164,0.985289,0.000000,0.000000,0.170897 +165,0.985109,0.000000,0.000000,0.171929 +166,0.984929,0.000000,0.000000,0.172961 +167,0.984747,0.000000,0.000000,0.173992 +168,0.984564,0.000000,0.000000,0.175023 +169,0.984381,0.000000,0.000000,0.176054 +170,0.984196,0.000000,0.000000,0.177085 +171,0.984010,0.000000,0.000000,0.178115 +172,0.983823,0.000000,0.000000,0.179146 +173,0.983634,0.000000,0.000000,0.180176 +174,0.983445,0.000000,0.000000,0.181206 +175,0.983255,0.000000,0.000000,0.182236 +176,0.983064,0.000000,0.000000,0.183265 +177,0.982871,0.000000,0.000000,0.184294 +178,0.982678,0.000000,0.000000,0.185324 +179,0.982483,0.000000,0.000000,0.186353 +180,0.982287,0.000000,0.000000,0.187381 +181,0.982090,0.000000,0.000000,0.188410 +182,0.981893,0.000000,0.000000,0.189438 +183,0.981694,0.000000,0.000000,0.190466 +184,0.981494,0.000000,0.000000,0.191494 +185,0.981293,0.000000,0.000000,0.192522 +186,0.981091,0.000000,0.000000,0.193549 +187,0.980887,0.000000,0.000000,0.194577 +188,0.980683,0.000000,0.000000,0.195604 +189,0.980478,0.000000,0.000000,0.196631 +190,0.980271,0.000000,0.000000,0.197657 +191,0.980064,0.000000,0.000000,0.198684 +192,0.979855,0.000000,0.000000,0.199710 +193,0.979645,0.000000,0.000000,0.200736 +194,0.979435,0.000000,0.000000,0.201762 +195,0.979223,0.000000,0.000000,0.202787 +196,0.979010,0.000000,0.000000,0.203813 +197,0.978796,0.000000,0.000000,0.204838 +198,0.978581,0.000000,0.000000,0.205863 +199,0.978365,0.000000,0.000000,0.206887 +200,0.978148,0.000000,0.000000,0.207912 +201,0.977929,0.000000,0.000000,0.208936 +202,0.977710,0.000000,0.000000,0.209960 +203,0.977490,0.000000,0.000000,0.210984 +204,0.977268,0.000000,0.000000,0.212007 +205,0.977046,0.000000,0.000000,0.213030 +206,0.976822,0.000000,0.000000,0.214053 +207,0.976597,0.000000,0.000000,0.215076 +208,0.976371,0.000000,0.000000,0.216099 +209,0.976145,0.000000,0.000000,0.217121 +210,0.975917,0.000000,0.000000,0.218143 +211,0.975688,0.000000,0.000000,0.219165 +212,0.975458,0.000000,0.000000,0.220187 +213,0.975227,0.000000,0.000000,0.221208 +214,0.974994,0.000000,0.000000,0.222229 +215,0.974761,0.000000,0.000000,0.223250 +216,0.974527,0.000000,0.000000,0.224271 +217,0.974291,0.000000,0.000000,0.225291 +218,0.974055,0.000000,0.000000,0.226311 +219,0.973817,0.000000,0.000000,0.227331 +220,0.973579,0.000000,0.000000,0.228351 +221,0.973339,0.000000,0.000000,0.229370 +222,0.973099,0.000000,0.000000,0.230389 +223,0.972857,0.000000,0.000000,0.231408 +224,0.972614,0.000000,0.000000,0.232427 +225,0.972370,0.000000,0.000000,0.233445 +226,0.972125,0.000000,0.000000,0.234463 +227,0.971879,0.000000,0.000000,0.235481 +228,0.971632,0.000000,0.000000,0.236499 +229,0.971384,0.000000,0.000000,0.237516 +230,0.971134,0.000000,0.000000,0.238533 +231,0.970884,0.000000,0.000000,0.239550 +232,0.970633,0.000000,0.000000,0.240567 +233,0.970380,0.000000,0.000000,0.241583 +234,0.970127,0.000000,0.000000,0.242599 +235,0.969872,0.000000,0.000000,0.243615 +236,0.969616,0.000000,0.000000,0.244631 +237,0.969360,0.000000,0.000000,0.245646 +238,0.969102,0.000000,0.000000,0.246661 +239,0.968843,0.000000,0.000000,0.247675 +240,0.968583,0.000000,0.000000,0.248690 +241,0.968322,0.000000,0.000000,0.249704 +242,0.968060,0.000000,0.000000,0.250718 +243,0.967797,0.000000,0.000000,0.251732 +244,0.967533,0.000000,0.000000,0.252745 +245,0.967268,0.000000,0.000000,0.253758 +246,0.967001,0.000000,0.000000,0.254771 +247,0.966734,0.000000,0.000000,0.255783 +248,0.966466,0.000000,0.000000,0.256795 +249,0.966196,0.000000,0.000000,0.257807 +250,0.965926,0.000000,0.000000,0.258819 +251,0.965654,0.000000,0.000000,0.259830 +252,0.965382,0.000000,0.000000,0.260842 +253,0.965108,0.000000,0.000000,0.261852 +254,0.964833,0.000000,0.000000,0.262863 +255,0.964557,0.000000,0.000000,0.263873 +256,0.964281,0.000000,0.000000,0.264883 +257,0.964003,0.000000,0.000000,0.265893 +258,0.963724,0.000000,0.000000,0.266902 +259,0.963444,0.000000,0.000000,0.267911 +260,0.963163,0.000000,0.000000,0.268920 +261,0.962880,0.000000,0.000000,0.269928 +262,0.962597,0.000000,0.000000,0.270936 +263,0.962313,0.000000,0.000000,0.271944 +264,0.962028,0.000000,0.000000,0.272952 +265,0.961741,0.000000,0.000000,0.273959 +266,0.961454,0.000000,0.000000,0.274966 +267,0.961165,0.000000,0.000000,0.275973 +268,0.960876,0.000000,0.000000,0.276979 +269,0.960585,0.000000,0.000000,0.277985 +270,0.960294,0.000000,0.000000,0.278991 +271,0.960001,0.000000,0.000000,0.279997 +272,0.959707,0.000000,0.000000,0.281002 +273,0.959412,0.000000,0.000000,0.282007 +274,0.959117,0.000000,0.000000,0.283011 +275,0.958820,0.000000,0.000000,0.284015 +276,0.958522,0.000000,0.000000,0.285019 +277,0.958223,0.000000,0.000000,0.286023 +278,0.957923,0.000000,0.000000,0.287026 +279,0.957622,0.000000,0.000000,0.288029 +280,0.957319,0.000000,0.000000,0.289032 +281,0.957016,0.000000,0.000000,0.290034 +282,0.956712,0.000000,0.000000,0.291036 +283,0.956407,0.000000,0.000000,0.292038 +284,0.956100,0.000000,0.000000,0.293039 +285,0.955793,0.000000,0.000000,0.294040 +286,0.955485,0.000000,0.000000,0.295041 +287,0.955175,0.000000,0.000000,0.296041 +288,0.954865,0.000000,0.000000,0.297042 +289,0.954553,0.000000,0.000000,0.298041 +290,0.954240,0.000000,0.000000,0.299041 +291,0.953927,0.000000,0.000000,0.300040 +292,0.953612,0.000000,0.000000,0.301039 +293,0.953296,0.000000,0.000000,0.302037 +294,0.952979,0.000000,0.000000,0.303035 +295,0.952661,0.000000,0.000000,0.304033 +296,0.952343,0.000000,0.000000,0.305031 +297,0.952023,0.000000,0.000000,0.306028 +298,0.951702,0.000000,0.000000,0.307024 +299,0.951380,0.000000,0.000000,0.308021 +300,0.951057,0.000000,0.000000,0.309017 +301,0.950732,0.000000,0.000000,0.310013 +302,0.950407,0.000000,0.000000,0.311008 +303,0.950081,0.000000,0.000000,0.312003 +304,0.949754,0.000000,0.000000,0.312998 +305,0.949425,0.000000,0.000000,0.313992 +306,0.949096,0.000000,0.000000,0.314987 +307,0.948766,0.000000,0.000000,0.315980 +308,0.948434,0.000000,0.000000,0.316974 +309,0.948102,0.000000,0.000000,0.317967 +310,0.947768,0.000000,0.000000,0.318959 +311,0.947434,0.000000,0.000000,0.319952 +312,0.947098,0.000000,0.000000,0.320944 +313,0.946762,0.000000,0.000000,0.321935 +314,0.946424,0.000000,0.000000,0.322927 +315,0.946085,0.000000,0.000000,0.323917 +316,0.945746,0.000000,0.000000,0.324908 +317,0.945405,0.000000,0.000000,0.325898 +318,0.945063,0.000000,0.000000,0.326888 +319,0.944720,0.000000,0.000000,0.327878 +320,0.944376,0.000000,0.000000,0.328867 +321,0.944031,0.000000,0.000000,0.329855 +322,0.943686,0.000000,0.000000,0.330844 +323,0.943339,0.000000,0.000000,0.331832 +324,0.942991,0.000000,0.000000,0.332820 +325,0.942641,0.000000,0.000000,0.333807 +326,0.942291,0.000000,0.000000,0.334794 +327,0.941940,0.000000,0.000000,0.335780 +328,0.941588,0.000000,0.000000,0.336767 +329,0.941235,0.000000,0.000000,0.337752 +330,0.940881,0.000000,0.000000,0.338738 +331,0.940526,0.000000,0.000000,0.339723 +332,0.940169,0.000000,0.000000,0.340708 +333,0.939812,0.000000,0.000000,0.341692 +334,0.939454,0.000000,0.000000,0.342676 +335,0.939094,0.000000,0.000000,0.343660 +336,0.938734,0.000000,0.000000,0.344643 +337,0.938372,0.000000,0.000000,0.345626 +338,0.938010,0.000000,0.000000,0.346608 +339,0.937646,0.000000,0.000000,0.347590 +340,0.937282,0.000000,0.000000,0.348572 +341,0.936916,0.000000,0.000000,0.349553 +342,0.936550,0.000000,0.000000,0.350534 +343,0.936182,0.000000,0.000000,0.351515 +344,0.935814,0.000000,0.000000,0.352495 +345,0.935444,0.000000,0.000000,0.353475 +346,0.935073,0.000000,0.000000,0.354454 +347,0.934702,0.000000,0.000000,0.355433 +348,0.934329,0.000000,0.000000,0.356412 +349,0.933955,0.000000,0.000000,0.357390 +350,0.933580,0.000000,0.000000,0.358368 +351,0.933205,0.000000,0.000000,0.359345 +352,0.932828,0.000000,0.000000,0.360322 +353,0.932450,0.000000,0.000000,0.361299 +354,0.932071,0.000000,0.000000,0.362275 +355,0.931691,0.000000,0.000000,0.363251 +356,0.931310,0.000000,0.000000,0.364227 +357,0.930928,0.000000,0.000000,0.365202 +358,0.930545,0.000000,0.000000,0.366176 +359,0.930161,0.000000,0.000000,0.367151 +360,0.929776,0.000000,0.000000,0.368125 +361,0.929390,0.000000,0.000000,0.369098 +362,0.929003,0.000000,0.000000,0.370071 +363,0.928615,0.000000,0.000000,0.371044 +364,0.928226,0.000000,0.000000,0.372016 +365,0.927836,0.000000,0.000000,0.372988 +366,0.927445,0.000000,0.000000,0.373959 +367,0.927053,0.000000,0.000000,0.374930 +368,0.926660,0.000000,0.000000,0.375901 +369,0.926266,0.000000,0.000000,0.376871 +370,0.925871,0.000000,0.000000,0.377841 +371,0.925474,0.000000,0.000000,0.378810 +372,0.925077,0.000000,0.000000,0.379779 +373,0.924679,0.000000,0.000000,0.380748 +374,0.924280,0.000000,0.000000,0.381716 +375,0.923880,0.000000,0.000000,0.382683 +376,0.923478,0.000000,0.000000,0.383651 +377,0.923076,0.000000,0.000000,0.384618 +378,0.922673,0.000000,0.000000,0.385584 +379,0.922268,0.000000,0.000000,0.386550 +380,0.921863,0.000000,0.000000,0.387516 +381,0.921457,0.000000,0.000000,0.388481 +382,0.921050,0.000000,0.000000,0.389445 +383,0.920641,0.000000,0.000000,0.390410 +384,0.920232,0.000000,0.000000,0.391374 +385,0.919821,0.000000,0.000000,0.392337 +386,0.919410,0.000000,0.000000,0.393300 +387,0.918998,0.000000,0.000000,0.394263 +388,0.918584,0.000000,0.000000,0.395225 +389,0.918170,0.000000,0.000000,0.396187 +390,0.917755,0.000000,0.000000,0.397148 +391,0.917338,0.000000,0.000000,0.398109 +392,0.916921,0.000000,0.000000,0.399069 +393,0.916502,0.000000,0.000000,0.400029 +394,0.916083,0.000000,0.000000,0.400989 +395,0.915663,0.000000,0.000000,0.401948 +396,0.915241,0.000000,0.000000,0.402906 +397,0.914819,0.000000,0.000000,0.403865 +398,0.914395,0.000000,0.000000,0.404822 +399,0.913971,0.000000,0.000000,0.405780 +400,0.913545,0.000000,0.000000,0.406737 +401,0.913119,0.000000,0.000000,0.407693 +402,0.912692,0.000000,0.000000,0.408649 +403,0.912263,0.000000,0.000000,0.409605 +404,0.911834,0.000000,0.000000,0.410560 +405,0.911403,0.000000,0.000000,0.411514 +406,0.910972,0.000000,0.000000,0.412469 +407,0.910539,0.000000,0.000000,0.413422 +408,0.910106,0.000000,0.000000,0.414376 +409,0.909672,0.000000,0.000000,0.415328 +410,0.909236,0.000000,0.000000,0.416281 +411,0.908800,0.000000,0.000000,0.417233 +412,0.908362,0.000000,0.000000,0.418184 +413,0.907924,0.000000,0.000000,0.419135 +414,0.907484,0.000000,0.000000,0.420086 +415,0.907044,0.000000,0.000000,0.421036 +416,0.906603,0.000000,0.000000,0.421985 +417,0.906160,0.000000,0.000000,0.422935 +418,0.905717,0.000000,0.000000,0.423883 +419,0.905272,0.000000,0.000000,0.424832 +420,0.904827,0.000000,0.000000,0.425779 +421,0.904381,0.000000,0.000000,0.426727 +422,0.903933,0.000000,0.000000,0.427673 +423,0.903485,0.000000,0.000000,0.428620 +424,0.903036,0.000000,0.000000,0.429566 +425,0.902585,0.000000,0.000000,0.430511 +426,0.902134,0.000000,0.000000,0.431456 +427,0.901682,0.000000,0.000000,0.432401 +428,0.901228,0.000000,0.000000,0.433345 +429,0.900774,0.000000,0.000000,0.434288 +430,0.900319,0.000000,0.000000,0.435231 +431,0.899863,0.000000,0.000000,0.436174 +432,0.899405,0.000000,0.000000,0.437116 +433,0.898947,0.000000,0.000000,0.438057 +434,0.898488,0.000000,0.000000,0.438999 +435,0.898028,0.000000,0.000000,0.439939 +436,0.897566,0.000000,0.000000,0.440879 +437,0.897104,0.000000,0.000000,0.441819 +438,0.896641,0.000000,0.000000,0.442758 +439,0.896177,0.000000,0.000000,0.443697 +440,0.895712,0.000000,0.000000,0.444635 +441,0.895246,0.000000,0.000000,0.445573 +442,0.894779,0.000000,0.000000,0.446510 +443,0.894310,0.000000,0.000000,0.447447 +444,0.893841,0.000000,0.000000,0.448383 +445,0.893371,0.000000,0.000000,0.449319 +446,0.892900,0.000000,0.000000,0.450254 +447,0.892428,0.000000,0.000000,0.451189 +448,0.891955,0.000000,0.000000,0.452123 +449,0.891481,0.000000,0.000000,0.453057 +450,0.891007,0.000000,0.000000,0.453990 +451,0.890531,0.000000,0.000000,0.454923 +452,0.890054,0.000000,0.000000,0.455856 +453,0.889576,0.000000,0.000000,0.456787 +454,0.889097,0.000000,0.000000,0.457719 +455,0.888617,0.000000,0.000000,0.458650 +456,0.888136,0.000000,0.000000,0.459580 +457,0.887655,0.000000,0.000000,0.460510 +458,0.887172,0.000000,0.000000,0.461439 +459,0.886688,0.000000,0.000000,0.462368 +460,0.886204,0.000000,0.000000,0.463296 +461,0.885718,0.000000,0.000000,0.464224 +462,0.885231,0.000000,0.000000,0.465151 +463,0.884744,0.000000,0.000000,0.466078 +464,0.884255,0.000000,0.000000,0.467004 +465,0.883766,0.000000,0.000000,0.467930 +466,0.883275,0.000000,0.000000,0.468855 +467,0.882784,0.000000,0.000000,0.469780 +468,0.882291,0.000000,0.000000,0.470704 +469,0.881798,0.000000,0.000000,0.471628 +470,0.881303,0.000000,0.000000,0.472551 +471,0.880808,0.000000,0.000000,0.473473 +472,0.880312,0.000000,0.000000,0.474396 +473,0.879815,0.000000,0.000000,0.475317 +474,0.879316,0.000000,0.000000,0.476238 +475,0.878817,0.000000,0.000000,0.477159 +476,0.878317,0.000000,0.000000,0.478079 +477,0.877816,0.000000,0.000000,0.478998 +478,0.877314,0.000000,0.000000,0.479917 +479,0.876811,0.000000,0.000000,0.480836 +480,0.876307,0.000000,0.000000,0.481754 +481,0.875802,0.000000,0.000000,0.482671 +482,0.875296,0.000000,0.000000,0.483588 +483,0.874789,0.000000,0.000000,0.484504 +484,0.874281,0.000000,0.000000,0.485420 +485,0.873772,0.000000,0.000000,0.486335 +486,0.873262,0.000000,0.000000,0.487250 +487,0.872752,0.000000,0.000000,0.488164 +488,0.872240,0.000000,0.000000,0.489078 +489,0.871727,0.000000,0.000000,0.489991 +490,0.871214,0.000000,0.000000,0.490904 +491,0.870699,0.000000,0.000000,0.491816 +492,0.870184,0.000000,0.000000,0.492727 +493,0.869667,0.000000,0.000000,0.493638 +494,0.869150,0.000000,0.000000,0.494549 +495,0.868632,0.000000,0.000000,0.495459 +496,0.868112,0.000000,0.000000,0.496368 +497,0.867592,0.000000,0.000000,0.497277 +498,0.867071,0.000000,0.000000,0.498185 +499,0.866549,0.000000,0.000000,0.499093 +500,0.866025,0.000000,0.000000,0.500000 +501,0.865501,0.000000,0.000000,0.500907 +502,0.864976,0.000000,0.000000,0.501813 +503,0.864450,0.000000,0.000000,0.502718 +504,0.863923,0.000000,0.000000,0.503623 +505,0.863396,0.000000,0.000000,0.504528 +506,0.862867,0.000000,0.000000,0.505431 +507,0.862337,0.000000,0.000000,0.506335 +508,0.861806,0.000000,0.000000,0.507238 +509,0.861275,0.000000,0.000000,0.508140 +510,0.860742,0.000000,0.000000,0.509041 +511,0.860208,0.000000,0.000000,0.509943 +512,0.859674,0.000000,0.000000,0.510843 +513,0.859139,0.000000,0.000000,0.511743 +514,0.858602,0.000000,0.000000,0.512642 +515,0.858065,0.000000,0.000000,0.513541 +516,0.857527,0.000000,0.000000,0.514440 +517,0.856987,0.000000,0.000000,0.515337 +518,0.856447,0.000000,0.000000,0.516234 +519,0.855906,0.000000,0.000000,0.517131 +520,0.855364,0.000000,0.000000,0.518027 +521,0.854821,0.000000,0.000000,0.518922 +522,0.854277,0.000000,0.000000,0.519817 +523,0.853733,0.000000,0.000000,0.520712 +524,0.853187,0.000000,0.000000,0.521605 +525,0.852640,0.000000,0.000000,0.522499 +526,0.852093,0.000000,0.000000,0.523391 +527,0.851544,0.000000,0.000000,0.524283 +528,0.850994,0.000000,0.000000,0.525175 +529,0.850444,0.000000,0.000000,0.526066 +530,0.849893,0.000000,0.000000,0.526956 +531,0.849340,0.000000,0.000000,0.527846 +532,0.848787,0.000000,0.000000,0.528735 +533,0.848233,0.000000,0.000000,0.529623 +534,0.847678,0.000000,0.000000,0.530511 +535,0.847122,0.000000,0.000000,0.531399 +536,0.846565,0.000000,0.000000,0.532285 +537,0.846007,0.000000,0.000000,0.533172 +538,0.845448,0.000000,0.000000,0.534057 +539,0.844889,0.000000,0.000000,0.534942 +540,0.844328,0.000000,0.000000,0.535827 +541,0.843766,0.000000,0.000000,0.536711 +542,0.843204,0.000000,0.000000,0.537594 +543,0.842640,0.000000,0.000000,0.538477 +544,0.842076,0.000000,0.000000,0.539359 +545,0.841511,0.000000,0.000000,0.540240 +546,0.840945,0.000000,0.000000,0.541121 +547,0.840377,0.000000,0.000000,0.542002 +548,0.839809,0.000000,0.000000,0.542881 +549,0.839240,0.000000,0.000000,0.543760 +550,0.838671,0.000000,0.000000,0.544639 +551,0.838100,0.000000,0.000000,0.545517 +552,0.837528,0.000000,0.000000,0.546394 +553,0.836955,0.000000,0.000000,0.547271 +554,0.836382,0.000000,0.000000,0.548147 +555,0.835807,0.000000,0.000000,0.549023 +556,0.835232,0.000000,0.000000,0.549898 +557,0.834656,0.000000,0.000000,0.550772 +558,0.834078,0.000000,0.000000,0.551646 +559,0.833500,0.000000,0.000000,0.552519 +560,0.832921,0.000000,0.000000,0.553392 +561,0.832341,0.000000,0.000000,0.554263 +562,0.831760,0.000000,0.000000,0.555135 +563,0.831179,0.000000,0.000000,0.556006 +564,0.830596,0.000000,0.000000,0.556876 +565,0.830012,0.000000,0.000000,0.557745 +566,0.829428,0.000000,0.000000,0.558614 +567,0.828842,0.000000,0.000000,0.559482 +568,0.828256,0.000000,0.000000,0.560350 +569,0.827669,0.000000,0.000000,0.561217 +570,0.827081,0.000000,0.000000,0.562083 +571,0.826492,0.000000,0.000000,0.562949 +572,0.825902,0.000000,0.000000,0.563814 +573,0.825311,0.000000,0.000000,0.564679 +574,0.824719,0.000000,0.000000,0.565543 +575,0.824126,0.000000,0.000000,0.566406 +576,0.823533,0.000000,0.000000,0.567269 +577,0.822938,0.000000,0.000000,0.568131 +578,0.822343,0.000000,0.000000,0.568993 +579,0.821746,0.000000,0.000000,0.569853 +580,0.821149,0.000000,0.000000,0.570714 +581,0.820551,0.000000,0.000000,0.571573 +582,0.819952,0.000000,0.000000,0.572432 +583,0.819352,0.000000,0.000000,0.573290 +584,0.818751,0.000000,0.000000,0.574148 +585,0.818150,0.000000,0.000000,0.575005 +586,0.817547,0.000000,0.000000,0.575862 +587,0.816944,0.000000,0.000000,0.576718 +588,0.816339,0.000000,0.000000,0.577573 +589,0.815734,0.000000,0.000000,0.578427 +590,0.815128,0.000000,0.000000,0.579281 +591,0.814521,0.000000,0.000000,0.580134 +592,0.813913,0.000000,0.000000,0.580987 +593,0.813304,0.000000,0.000000,0.581839 +594,0.812694,0.000000,0.000000,0.582690 +595,0.812084,0.000000,0.000000,0.583541 +596,0.811472,0.000000,0.000000,0.584391 +597,0.810860,0.000000,0.000000,0.585241 +598,0.810246,0.000000,0.000000,0.586090 +599,0.809632,0.000000,0.000000,0.586938 +600,0.809017,0.000000,0.000000,0.587785 +601,0.808401,0.000000,0.000000,0.588632 +602,0.807784,0.000000,0.000000,0.589478 +603,0.807166,0.000000,0.000000,0.590324 +604,0.806548,0.000000,0.000000,0.591169 +605,0.805928,0.000000,0.000000,0.592013 +606,0.805308,0.000000,0.000000,0.592857 +607,0.804687,0.000000,0.000000,0.593700 +608,0.804064,0.000000,0.000000,0.594542 +609,0.803441,0.000000,0.000000,0.595384 +610,0.802817,0.000000,0.000000,0.596225 +611,0.802193,0.000000,0.000000,0.597065 +612,0.801567,0.000000,0.000000,0.597905 +613,0.800940,0.000000,0.000000,0.598744 +614,0.800313,0.000000,0.000000,0.599582 +615,0.799685,0.000000,0.000000,0.600420 +616,0.799055,0.000000,0.000000,0.601257 +617,0.798425,0.000000,0.000000,0.602094 +618,0.797794,0.000000,0.000000,0.602930 +619,0.797163,0.000000,0.000000,0.603765 +620,0.796530,0.000000,0.000000,0.604599 +621,0.795896,0.000000,0.000000,0.605433 +622,0.795262,0.000000,0.000000,0.606266 +623,0.794627,0.000000,0.000000,0.607098 +624,0.793990,0.000000,0.000000,0.607930 +625,0.793353,0.000000,0.000000,0.608761 +626,0.792715,0.000000,0.000000,0.609592 +627,0.792077,0.000000,0.000000,0.610422 +628,0.791437,0.000000,0.000000,0.611251 +629,0.790796,0.000000,0.000000,0.612079 +630,0.790155,0.000000,0.000000,0.612907 +631,0.789513,0.000000,0.000000,0.613734 +632,0.788870,0.000000,0.000000,0.614561 +633,0.788226,0.000000,0.000000,0.615386 +634,0.787581,0.000000,0.000000,0.616211 +635,0.786935,0.000000,0.000000,0.617036 +636,0.786288,0.000000,0.000000,0.617860 +637,0.785641,0.000000,0.000000,0.618683 +638,0.784993,0.000000,0.000000,0.619505 +639,0.784343,0.000000,0.000000,0.620327 +640,0.783693,0.000000,0.000000,0.621148 +641,0.783043,0.000000,0.000000,0.621968 +642,0.782391,0.000000,0.000000,0.622788 +643,0.781738,0.000000,0.000000,0.623607 +644,0.781085,0.000000,0.000000,0.624425 +645,0.780430,0.000000,0.000000,0.625243 +646,0.779775,0.000000,0.000000,0.626060 +647,0.779119,0.000000,0.000000,0.626876 +648,0.778462,0.000000,0.000000,0.627691 +649,0.777805,0.000000,0.000000,0.628506 +650,0.777146,0.000000,0.000000,0.629320 +651,0.776487,0.000000,0.000000,0.630134 +652,0.775826,0.000000,0.000000,0.630947 +653,0.775165,0.000000,0.000000,0.631759 +654,0.774503,0.000000,0.000000,0.632570 +655,0.773840,0.000000,0.000000,0.633381 +656,0.773177,0.000000,0.000000,0.634191 +657,0.772512,0.000000,0.000000,0.635000 +658,0.771847,0.000000,0.000000,0.635809 +659,0.771180,0.000000,0.000000,0.636617 +660,0.770513,0.000000,0.000000,0.637424 +661,0.769845,0.000000,0.000000,0.638231 +662,0.769177,0.000000,0.000000,0.639036 +663,0.768507,0.000000,0.000000,0.639841 +664,0.767836,0.000000,0.000000,0.640646 +665,0.767165,0.000000,0.000000,0.641450 +666,0.766493,0.000000,0.000000,0.642253 +667,0.765820,0.000000,0.000000,0.643055 +668,0.765146,0.000000,0.000000,0.643857 +669,0.764472,0.000000,0.000000,0.644657 +670,0.763796,0.000000,0.000000,0.645458 +671,0.763120,0.000000,0.000000,0.646257 +672,0.762443,0.000000,0.000000,0.647056 +673,0.761764,0.000000,0.000000,0.647854 +674,0.761086,0.000000,0.000000,0.648651 +675,0.760406,0.000000,0.000000,0.649448 +676,0.759725,0.000000,0.000000,0.650244 +677,0.759044,0.000000,0.000000,0.651039 +678,0.758362,0.000000,0.000000,0.651834 +679,0.757679,0.000000,0.000000,0.652628 +680,0.756995,0.000000,0.000000,0.653421 +681,0.756310,0.000000,0.000000,0.654213 +682,0.755625,0.000000,0.000000,0.655005 +683,0.754939,0.000000,0.000000,0.655796 +684,0.754251,0.000000,0.000000,0.656586 +685,0.753563,0.000000,0.000000,0.657375 +686,0.752875,0.000000,0.000000,0.658164 +687,0.752185,0.000000,0.000000,0.658952 +688,0.751494,0.000000,0.000000,0.659739 +689,0.750803,0.000000,0.000000,0.660526 +690,0.750111,0.000000,0.000000,0.661312 +691,0.749418,0.000000,0.000000,0.662097 +692,0.748724,0.000000,0.000000,0.662881 +693,0.748030,0.000000,0.000000,0.663665 +694,0.747334,0.000000,0.000000,0.664448 +695,0.746638,0.000000,0.000000,0.665230 +696,0.745941,0.000000,0.000000,0.666012 +697,0.745243,0.000000,0.000000,0.666793 +698,0.744545,0.000000,0.000000,0.667573 +699,0.743845,0.000000,0.000000,0.668352 +700,0.743145,0.000000,0.000000,0.669131 +701,0.742444,0.000000,0.000000,0.669908 +702,0.741742,0.000000,0.000000,0.670686 +703,0.741039,0.000000,0.000000,0.671462 +704,0.740335,0.000000,0.000000,0.672238 +705,0.739631,0.000000,0.000000,0.673013 +706,0.738926,0.000000,0.000000,0.673787 +707,0.738220,0.000000,0.000000,0.674560 +708,0.737513,0.000000,0.000000,0.675333 +709,0.736806,0.000000,0.000000,0.676105 +710,0.736097,0.000000,0.000000,0.676876 +711,0.735388,0.000000,0.000000,0.677646 +712,0.734678,0.000000,0.000000,0.678416 +713,0.733967,0.000000,0.000000,0.679185 +714,0.733255,0.000000,0.000000,0.679953 +715,0.732543,0.000000,0.000000,0.680721 +716,0.731830,0.000000,0.000000,0.681488 +717,0.731116,0.000000,0.000000,0.682254 +718,0.730401,0.000000,0.000000,0.683019 +719,0.729685,0.000000,0.000000,0.683783 +720,0.728969,0.000000,0.000000,0.684547 +721,0.728251,0.000000,0.000000,0.685310 +722,0.727533,0.000000,0.000000,0.686072 +723,0.726814,0.000000,0.000000,0.686834 +724,0.726095,0.000000,0.000000,0.687595 +725,0.725374,0.000000,0.000000,0.688355 +726,0.724653,0.000000,0.000000,0.689114 +727,0.723931,0.000000,0.000000,0.689872 +728,0.723208,0.000000,0.000000,0.690630 +729,0.722485,0.000000,0.000000,0.691387 +730,0.721760,0.000000,0.000000,0.692143 +731,0.721035,0.000000,0.000000,0.692899 +732,0.720309,0.000000,0.000000,0.693653 +733,0.719582,0.000000,0.000000,0.694407 +734,0.718855,0.000000,0.000000,0.695160 +735,0.718126,0.000000,0.000000,0.695913 +736,0.717397,0.000000,0.000000,0.696664 +737,0.716667,0.000000,0.000000,0.697415 +738,0.715936,0.000000,0.000000,0.698165 +739,0.715205,0.000000,0.000000,0.698915 +740,0.714473,0.000000,0.000000,0.699663 +741,0.713740,0.000000,0.000000,0.700411 +742,0.713006,0.000000,0.000000,0.701158 +743,0.712271,0.000000,0.000000,0.701904 +744,0.711536,0.000000,0.000000,0.702650 +745,0.710799,0.000000,0.000000,0.703395 +746,0.710062,0.000000,0.000000,0.704139 +747,0.709325,0.000000,0.000000,0.704882 +748,0.708586,0.000000,0.000000,0.705624 +749,0.707847,0.000000,0.000000,0.706366 +750,0.707107,0.000000,0.000000,0.707107 +751,0.706366,0.000000,0.000000,0.707847 +752,0.705624,0.000000,0.000000,0.708586 +753,0.704882,0.000000,0.000000,0.709325 +754,0.704139,0.000000,0.000000,0.710062 +755,0.703395,0.000000,0.000000,0.710799 +756,0.702650,0.000000,0.000000,0.711536 +757,0.701904,0.000000,0.000000,0.712271 +758,0.701158,0.000000,0.000000,0.713006 +759,0.700411,0.000000,0.000000,0.713740 +760,0.699663,0.000000,0.000000,0.714473 +761,0.698915,0.000000,0.000000,0.715205 +762,0.698165,0.000000,0.000000,0.715936 +763,0.697415,0.000000,0.000000,0.716667 +764,0.696664,0.000000,0.000000,0.717397 +765,0.695913,0.000000,0.000000,0.718126 +766,0.695160,0.000000,0.000000,0.718855 +767,0.694407,0.000000,0.000000,0.719582 +768,0.693653,0.000000,0.000000,0.720309 +769,0.692899,0.000000,0.000000,0.721035 +770,0.692143,0.000000,0.000000,0.721760 +771,0.691387,0.000000,0.000000,0.722485 +772,0.690630,0.000000,0.000000,0.723208 +773,0.689872,0.000000,0.000000,0.723931 +774,0.689114,0.000000,0.000000,0.724653 +775,0.688355,0.000000,0.000000,0.725374 +776,0.687595,0.000000,0.000000,0.726095 +777,0.686834,0.000000,0.000000,0.726814 +778,0.686072,0.000000,0.000000,0.727533 +779,0.685310,0.000000,0.000000,0.728251 +780,0.684547,0.000000,0.000000,0.728969 +781,0.683783,0.000000,0.000000,0.729685 +782,0.683019,0.000000,0.000000,0.730401 +783,0.682254,0.000000,0.000000,0.731116 +784,0.681488,0.000000,0.000000,0.731830 +785,0.680721,0.000000,0.000000,0.732543 +786,0.679953,0.000000,0.000000,0.733255 +787,0.679185,0.000000,0.000000,0.733967 +788,0.678416,0.000000,0.000000,0.734678 +789,0.677646,0.000000,0.000000,0.735388 +790,0.676876,0.000000,0.000000,0.736097 +791,0.676105,0.000000,0.000000,0.736806 +792,0.675333,0.000000,0.000000,0.737513 +793,0.674560,0.000000,0.000000,0.738220 +794,0.673787,0.000000,0.000000,0.738926 +795,0.673013,0.000000,0.000000,0.739631 +796,0.672238,0.000000,0.000000,0.740335 +797,0.671462,0.000000,0.000000,0.741039 +798,0.670686,0.000000,0.000000,0.741742 +799,0.669908,0.000000,0.000000,0.742444 +800,0.669131,0.000000,0.000000,0.743145 +801,0.668352,0.000000,0.000000,0.743845 +802,0.667573,0.000000,0.000000,0.744545 +803,0.666793,0.000000,0.000000,0.745243 +804,0.666012,0.000000,0.000000,0.745941 +805,0.665230,0.000000,0.000000,0.746638 +806,0.664448,0.000000,0.000000,0.747334 +807,0.663665,0.000000,0.000000,0.748030 +808,0.662881,0.000000,0.000000,0.748724 +809,0.662097,0.000000,0.000000,0.749418 +810,0.661312,0.000000,0.000000,0.750111 +811,0.660526,0.000000,0.000000,0.750803 +812,0.659739,0.000000,0.000000,0.751494 +813,0.658952,0.000000,0.000000,0.752185 +814,0.658164,0.000000,0.000000,0.752875 +815,0.657375,0.000000,0.000000,0.753563 +816,0.656586,0.000000,0.000000,0.754251 +817,0.655796,0.000000,0.000000,0.754939 +818,0.655005,0.000000,0.000000,0.755625 +819,0.654213,0.000000,0.000000,0.756310 +820,0.653421,0.000000,0.000000,0.756995 +821,0.652628,0.000000,0.000000,0.757679 +822,0.651834,0.000000,0.000000,0.758362 +823,0.651039,0.000000,0.000000,0.759044 +824,0.650244,0.000000,0.000000,0.759725 +825,0.649448,0.000000,0.000000,0.760406 +826,0.648651,0.000000,0.000000,0.761086 +827,0.647854,0.000000,0.000000,0.761764 +828,0.647056,0.000000,0.000000,0.762443 +829,0.646257,0.000000,0.000000,0.763120 +830,0.645458,0.000000,0.000000,0.763796 +831,0.644657,0.000000,0.000000,0.764472 +832,0.643857,0.000000,0.000000,0.765146 +833,0.643055,0.000000,0.000000,0.765820 +834,0.642253,0.000000,0.000000,0.766493 +835,0.641450,0.000000,0.000000,0.767165 +836,0.640646,0.000000,0.000000,0.767836 +837,0.639841,0.000000,0.000000,0.768507 +838,0.639036,0.000000,0.000000,0.769177 +839,0.638231,0.000000,0.000000,0.769845 +840,0.637424,0.000000,0.000000,0.770513 +841,0.636617,0.000000,0.000000,0.771180 +842,0.635809,0.000000,0.000000,0.771847 +843,0.635000,0.000000,0.000000,0.772512 +844,0.634191,0.000000,0.000000,0.773177 +845,0.633381,0.000000,0.000000,0.773840 +846,0.632570,0.000000,0.000000,0.774503 +847,0.631759,0.000000,0.000000,0.775165 +848,0.630947,0.000000,0.000000,0.775826 +849,0.630134,0.000000,0.000000,0.776487 +850,0.629320,0.000000,0.000000,0.777146 +851,0.628506,0.000000,0.000000,0.777805 +852,0.627691,0.000000,0.000000,0.778462 +853,0.626876,0.000000,0.000000,0.779119 +854,0.626060,0.000000,0.000000,0.779775 +855,0.625243,0.000000,0.000000,0.780430 +856,0.624425,0.000000,0.000000,0.781085 +857,0.623607,0.000000,0.000000,0.781738 +858,0.622788,0.000000,0.000000,0.782391 +859,0.621968,0.000000,0.000000,0.783043 +860,0.621148,0.000000,0.000000,0.783693 +861,0.620327,0.000000,0.000000,0.784343 +862,0.619505,0.000000,0.000000,0.784993 +863,0.618683,0.000000,0.000000,0.785641 +864,0.617860,0.000000,0.000000,0.786288 +865,0.617036,0.000000,0.000000,0.786935 +866,0.616211,0.000000,0.000000,0.787581 +867,0.615386,0.000000,0.000000,0.788226 +868,0.614561,0.000000,0.000000,0.788870 +869,0.613734,0.000000,0.000000,0.789513 +870,0.612907,0.000000,0.000000,0.790155 +871,0.612079,0.000000,0.000000,0.790796 +872,0.611251,0.000000,0.000000,0.791437 +873,0.610422,0.000000,0.000000,0.792077 +874,0.609592,0.000000,0.000000,0.792715 +875,0.608761,0.000000,0.000000,0.793353 +876,0.607930,0.000000,0.000000,0.793990 +877,0.607098,0.000000,0.000000,0.794627 +878,0.606266,0.000000,0.000000,0.795262 +879,0.605433,0.000000,0.000000,0.795896 +880,0.604599,0.000000,0.000000,0.796530 +881,0.603765,0.000000,0.000000,0.797163 +882,0.602930,0.000000,0.000000,0.797794 +883,0.602094,0.000000,0.000000,0.798425 +884,0.601257,0.000000,0.000000,0.799055 +885,0.600420,0.000000,0.000000,0.799685 +886,0.599582,0.000000,0.000000,0.800313 +887,0.598744,0.000000,0.000000,0.800940 +888,0.597905,0.000000,0.000000,0.801567 +889,0.597065,0.000000,0.000000,0.802193 +890,0.596225,0.000000,0.000000,0.802817 +891,0.595384,0.000000,0.000000,0.803441 +892,0.594542,0.000000,0.000000,0.804064 +893,0.593700,0.000000,0.000000,0.804687 +894,0.592857,0.000000,0.000000,0.805308 +895,0.592013,0.000000,0.000000,0.805928 +896,0.591169,0.000000,0.000000,0.806548 +897,0.590324,0.000000,0.000000,0.807166 +898,0.589478,0.000000,0.000000,0.807784 +899,0.588632,0.000000,0.000000,0.808401 +900,0.587785,0.000000,0.000000,0.809017 +901,0.586938,0.000000,0.000000,0.809632 +902,0.586090,0.000000,0.000000,0.810246 +903,0.585241,0.000000,0.000000,0.810860 +904,0.584391,0.000000,0.000000,0.811472 +905,0.583541,0.000000,0.000000,0.812084 +906,0.582690,0.000000,0.000000,0.812694 +907,0.581839,0.000000,0.000000,0.813304 +908,0.580987,0.000000,0.000000,0.813913 +909,0.580134,0.000000,0.000000,0.814521 +910,0.579281,0.000000,0.000000,0.815128 +911,0.578427,0.000000,0.000000,0.815734 +912,0.577573,0.000000,0.000000,0.816339 +913,0.576718,0.000000,0.000000,0.816944 +914,0.575862,0.000000,0.000000,0.817547 +915,0.575005,0.000000,0.000000,0.818150 +916,0.574148,0.000000,0.000000,0.818751 +917,0.573290,0.000000,0.000000,0.819352 +918,0.572432,0.000000,0.000000,0.819952 +919,0.571573,0.000000,0.000000,0.820551 +920,0.570714,0.000000,0.000000,0.821149 +921,0.569853,0.000000,0.000000,0.821746 +922,0.568993,0.000000,0.000000,0.822343 +923,0.568131,0.000000,0.000000,0.822938 +924,0.567269,0.000000,0.000000,0.823533 +925,0.566406,0.000000,0.000000,0.824126 +926,0.565543,0.000000,0.000000,0.824719 +927,0.564679,0.000000,0.000000,0.825311 +928,0.563814,0.000000,0.000000,0.825902 +929,0.562949,0.000000,0.000000,0.826492 +930,0.562083,0.000000,0.000000,0.827081 +931,0.561217,0.000000,0.000000,0.827669 +932,0.560350,0.000000,0.000000,0.828256 +933,0.559482,0.000000,0.000000,0.828842 +934,0.558614,0.000000,0.000000,0.829428 +935,0.557745,0.000000,0.000000,0.830012 +936,0.556876,0.000000,0.000000,0.830596 +937,0.556006,0.000000,0.000000,0.831179 +938,0.555135,0.000000,0.000000,0.831760 +939,0.554263,0.000000,0.000000,0.832341 +940,0.553392,0.000000,0.000000,0.832921 +941,0.552519,0.000000,0.000000,0.833500 +942,0.551646,0.000000,0.000000,0.834078 +943,0.550772,0.000000,0.000000,0.834656 +944,0.549898,0.000000,0.000000,0.835232 +945,0.549023,0.000000,0.000000,0.835807 +946,0.548147,0.000000,0.000000,0.836382 +947,0.547271,0.000000,0.000000,0.836955 +948,0.546394,0.000000,0.000000,0.837528 +949,0.545517,0.000000,0.000000,0.838100 +950,0.544639,0.000000,0.000000,0.838671 +951,0.543760,0.000000,0.000000,0.839240 +952,0.542881,0.000000,0.000000,0.839809 +953,0.542002,0.000000,0.000000,0.840377 +954,0.541121,0.000000,0.000000,0.840945 +955,0.540240,0.000000,0.000000,0.841511 +956,0.539359,0.000000,0.000000,0.842076 +957,0.538477,0.000000,0.000000,0.842640 +958,0.537594,0.000000,0.000000,0.843204 +959,0.536711,0.000000,0.000000,0.843766 +960,0.535827,0.000000,0.000000,0.844328 +961,0.534942,0.000000,0.000000,0.844889 +962,0.534057,0.000000,0.000000,0.845448 +963,0.533172,0.000000,0.000000,0.846007 +964,0.532285,0.000000,0.000000,0.846565 +965,0.531399,0.000000,0.000000,0.847122 +966,0.530511,0.000000,0.000000,0.847678 +967,0.529623,0.000000,0.000000,0.848233 +968,0.528735,0.000000,0.000000,0.848787 +969,0.527846,0.000000,0.000000,0.849340 +970,0.526956,0.000000,0.000000,0.849893 +971,0.526066,0.000000,0.000000,0.850444 +972,0.525175,0.000000,0.000000,0.850994 +973,0.524283,0.000000,0.000000,0.851544 +974,0.523391,0.000000,0.000000,0.852093 +975,0.522499,0.000000,0.000000,0.852640 +976,0.521605,0.000000,0.000000,0.853187 +977,0.520712,0.000000,0.000000,0.853733 +978,0.519817,0.000000,0.000000,0.854277 +979,0.518922,0.000000,0.000000,0.854821 +980,0.518027,0.000000,0.000000,0.855364 +981,0.517131,0.000000,0.000000,0.855906 +982,0.516234,0.000000,0.000000,0.856447 +983,0.515337,0.000000,0.000000,0.856987 +984,0.514440,0.000000,0.000000,0.857527 +985,0.513541,0.000000,0.000000,0.858065 +986,0.512642,0.000000,0.000000,0.858602 +987,0.511743,0.000000,0.000000,0.859139 +988,0.510843,0.000000,0.000000,0.859674 +989,0.509943,0.000000,0.000000,0.860208 +990,0.509041,0.000000,0.000000,0.860742 +991,0.508140,0.000000,0.000000,0.861275 +992,0.507238,0.000000,0.000000,0.861806 +993,0.506335,0.000000,0.000000,0.862337 +994,0.505431,0.000000,0.000000,0.862867 +995,0.504528,0.000000,0.000000,0.863396 +996,0.503623,0.000000,0.000000,0.863923 +997,0.502718,0.000000,0.000000,0.864450 +998,0.501813,0.000000,0.000000,0.864976 +999,0.500907,0.000000,0.000000,0.865501 +1000,0.500000,0.000000,0.000000,0.866025 +1001,0.499093,0.000000,0.000000,0.866549 +1002,0.498185,0.000000,0.000000,0.867071 +1003,0.497277,0.000000,0.000000,0.867592 +1004,0.496368,0.000000,0.000000,0.868112 +1005,0.495459,0.000000,0.000000,0.868632 +1006,0.494549,0.000000,0.000000,0.869150 +1007,0.493638,0.000000,0.000000,0.869667 +1008,0.492727,0.000000,0.000000,0.870184 +1009,0.491816,0.000000,0.000000,0.870699 +1010,0.490904,0.000000,0.000000,0.871214 +1011,0.489991,0.000000,0.000000,0.871727 +1012,0.489078,0.000000,0.000000,0.872240 +1013,0.488164,0.000000,0.000000,0.872752 +1014,0.487250,0.000000,0.000000,0.873262 +1015,0.486335,0.000000,0.000000,0.873772 +1016,0.485420,0.000000,0.000000,0.874281 +1017,0.484504,0.000000,0.000000,0.874789 +1018,0.483588,0.000000,0.000000,0.875296 +1019,0.482671,0.000000,0.000000,0.875802 +1020,0.481754,0.000000,0.000000,0.876307 +1021,0.480836,0.000000,0.000000,0.876811 +1022,0.479917,0.000000,0.000000,0.877314 +1023,0.478998,0.000000,0.000000,0.877816 +1024,0.478079,0.000000,0.000000,0.878317 +1025,0.477159,0.000000,0.000000,0.878817 +1026,0.476238,0.000000,0.000000,0.879316 +1027,0.475317,0.000000,0.000000,0.879815 +1028,0.474396,0.000000,0.000000,0.880312 +1029,0.473473,0.000000,0.000000,0.880808 +1030,0.472551,0.000000,0.000000,0.881303 +1031,0.471628,0.000000,0.000000,0.881798 +1032,0.470704,0.000000,0.000000,0.882291 +1033,0.469780,0.000000,0.000000,0.882784 +1034,0.468855,0.000000,0.000000,0.883275 +1035,0.467930,0.000000,0.000000,0.883766 +1036,0.467004,0.000000,0.000000,0.884255 +1037,0.466078,0.000000,0.000000,0.884744 +1038,0.465151,0.000000,0.000000,0.885231 +1039,0.464224,0.000000,0.000000,0.885718 +1040,0.463296,0.000000,0.000000,0.886204 +1041,0.462368,0.000000,0.000000,0.886688 +1042,0.461439,0.000000,0.000000,0.887172 +1043,0.460510,0.000000,0.000000,0.887655 +1044,0.459580,0.000000,0.000000,0.888136 +1045,0.458650,0.000000,0.000000,0.888617 +1046,0.457719,0.000000,0.000000,0.889097 +1047,0.456787,0.000000,0.000000,0.889576 +1048,0.455856,0.000000,0.000000,0.890054 +1049,0.454923,0.000000,0.000000,0.890531 +1050,0.453990,0.000000,0.000000,0.891007 +1051,0.453057,0.000000,0.000000,0.891481 +1052,0.452123,0.000000,0.000000,0.891955 +1053,0.451189,0.000000,0.000000,0.892428 +1054,0.450254,0.000000,0.000000,0.892900 +1055,0.449319,0.000000,0.000000,0.893371 +1056,0.448383,0.000000,0.000000,0.893841 +1057,0.447447,0.000000,0.000000,0.894310 +1058,0.446510,0.000000,0.000000,0.894779 +1059,0.445573,0.000000,0.000000,0.895246 +1060,0.444635,0.000000,0.000000,0.895712 +1061,0.443697,0.000000,0.000000,0.896177 +1062,0.442758,0.000000,0.000000,0.896641 +1063,0.441819,0.000000,0.000000,0.897104 +1064,0.440879,0.000000,0.000000,0.897566 +1065,0.439939,0.000000,0.000000,0.898028 +1066,0.438999,0.000000,0.000000,0.898488 +1067,0.438057,0.000000,0.000000,0.898947 +1068,0.437116,0.000000,0.000000,0.899405 +1069,0.436174,0.000000,0.000000,0.899863 +1070,0.435231,0.000000,0.000000,0.900319 +1071,0.434288,0.000000,0.000000,0.900774 +1072,0.433345,0.000000,0.000000,0.901228 +1073,0.432401,0.000000,0.000000,0.901682 +1074,0.431456,0.000000,0.000000,0.902134 +1075,0.430511,0.000000,0.000000,0.902585 +1076,0.429566,0.000000,0.000000,0.903036 +1077,0.428620,0.000000,0.000000,0.903485 +1078,0.427673,0.000000,0.000000,0.903933 +1079,0.426727,0.000000,0.000000,0.904381 +1080,0.425779,0.000000,0.000000,0.904827 +1081,0.424832,0.000000,0.000000,0.905272 +1082,0.423883,0.000000,0.000000,0.905717 +1083,0.422935,0.000000,0.000000,0.906160 +1084,0.421985,0.000000,0.000000,0.906603 +1085,0.421036,0.000000,0.000000,0.907044 +1086,0.420086,0.000000,0.000000,0.907484 +1087,0.419135,0.000000,0.000000,0.907924 +1088,0.418184,0.000000,0.000000,0.908362 +1089,0.417233,0.000000,0.000000,0.908800 +1090,0.416281,0.000000,0.000000,0.909236 +1091,0.415328,0.000000,0.000000,0.909672 +1092,0.414376,0.000000,0.000000,0.910106 +1093,0.413422,0.000000,0.000000,0.910539 +1094,0.412469,0.000000,0.000000,0.910972 +1095,0.411514,0.000000,0.000000,0.911403 +1096,0.410560,0.000000,0.000000,0.911834 +1097,0.409605,0.000000,0.000000,0.912263 +1098,0.408649,0.000000,0.000000,0.912692 +1099,0.407693,0.000000,0.000000,0.913119 +1100,0.406737,0.000000,0.000000,0.913545 +1101,0.405780,0.000000,0.000000,0.913971 +1102,0.404822,0.000000,0.000000,0.914395 +1103,0.403865,0.000000,0.000000,0.914819 +1104,0.402906,0.000000,0.000000,0.915241 +1105,0.401948,0.000000,0.000000,0.915663 +1106,0.400989,0.000000,0.000000,0.916083 +1107,0.400029,0.000000,0.000000,0.916502 +1108,0.399069,0.000000,0.000000,0.916921 +1109,0.398109,0.000000,0.000000,0.917338 +1110,0.397148,0.000000,0.000000,0.917755 +1111,0.396187,0.000000,0.000000,0.918170 +1112,0.395225,0.000000,0.000000,0.918584 +1113,0.394263,0.000000,0.000000,0.918998 +1114,0.393300,0.000000,0.000000,0.919410 +1115,0.392337,0.000000,0.000000,0.919821 +1116,0.391374,0.000000,0.000000,0.920232 +1117,0.390410,0.000000,0.000000,0.920641 +1118,0.389445,0.000000,0.000000,0.921050 +1119,0.388481,0.000000,0.000000,0.921457 +1120,0.387516,0.000000,0.000000,0.921863 +1121,0.386550,0.000000,0.000000,0.922268 +1122,0.385584,0.000000,0.000000,0.922673 +1123,0.384618,0.000000,0.000000,0.923076 +1124,0.383651,0.000000,0.000000,0.923478 +1125,0.382683,0.000000,0.000000,0.923880 +1126,0.381716,0.000000,0.000000,0.924280 +1127,0.380748,0.000000,0.000000,0.924679 +1128,0.379779,0.000000,0.000000,0.925077 +1129,0.378810,0.000000,0.000000,0.925474 +1130,0.377841,0.000000,0.000000,0.925871 +1131,0.376871,0.000000,0.000000,0.926266 +1132,0.375901,0.000000,0.000000,0.926660 +1133,0.374930,0.000000,0.000000,0.927053 +1134,0.373959,0.000000,0.000000,0.927445 +1135,0.372988,0.000000,0.000000,0.927836 +1136,0.372016,0.000000,0.000000,0.928226 +1137,0.371044,0.000000,0.000000,0.928615 +1138,0.370071,0.000000,0.000000,0.929003 +1139,0.369098,0.000000,0.000000,0.929390 +1140,0.368125,0.000000,0.000000,0.929776 +1141,0.367151,0.000000,0.000000,0.930161 +1142,0.366176,0.000000,0.000000,0.930545 +1143,0.365202,0.000000,0.000000,0.930928 +1144,0.364227,0.000000,0.000000,0.931310 +1145,0.363251,0.000000,0.000000,0.931691 +1146,0.362275,0.000000,0.000000,0.932071 +1147,0.361299,0.000000,0.000000,0.932450 +1148,0.360322,0.000000,0.000000,0.932828 +1149,0.359345,0.000000,0.000000,0.933205 +1150,0.358368,0.000000,0.000000,0.933580 +1151,0.357390,0.000000,0.000000,0.933955 +1152,0.356412,0.000000,0.000000,0.934329 +1153,0.355433,0.000000,0.000000,0.934702 +1154,0.354454,0.000000,0.000000,0.935073 +1155,0.353475,0.000000,0.000000,0.935444 +1156,0.352495,0.000000,0.000000,0.935814 +1157,0.351515,0.000000,0.000000,0.936182 +1158,0.350534,0.000000,0.000000,0.936550 +1159,0.349553,0.000000,0.000000,0.936916 +1160,0.348572,0.000000,0.000000,0.937282 +1161,0.347590,0.000000,0.000000,0.937646 +1162,0.346608,0.000000,0.000000,0.938010 +1163,0.345626,0.000000,0.000000,0.938372 +1164,0.344643,0.000000,0.000000,0.938734 +1165,0.343660,0.000000,0.000000,0.939094 +1166,0.342676,0.000000,0.000000,0.939454 +1167,0.341692,0.000000,0.000000,0.939812 +1168,0.340708,0.000000,0.000000,0.940169 +1169,0.339723,0.000000,0.000000,0.940526 +1170,0.338738,0.000000,0.000000,0.940881 +1171,0.337752,0.000000,0.000000,0.941235 +1172,0.336767,0.000000,0.000000,0.941588 +1173,0.335780,0.000000,0.000000,0.941940 +1174,0.334794,0.000000,0.000000,0.942291 +1175,0.333807,0.000000,0.000000,0.942641 +1176,0.332820,0.000000,0.000000,0.942991 +1177,0.331832,0.000000,0.000000,0.943339 +1178,0.330844,0.000000,0.000000,0.943686 +1179,0.329855,0.000000,0.000000,0.944031 +1180,0.328867,0.000000,0.000000,0.944376 +1181,0.327878,0.000000,0.000000,0.944720 +1182,0.326888,0.000000,0.000000,0.945063 +1183,0.325898,0.000000,0.000000,0.945405 +1184,0.324908,0.000000,0.000000,0.945746 +1185,0.323917,0.000000,0.000000,0.946085 +1186,0.322927,0.000000,0.000000,0.946424 +1187,0.321935,0.000000,0.000000,0.946762 +1188,0.320944,0.000000,0.000000,0.947098 +1189,0.319952,0.000000,0.000000,0.947434 +1190,0.318959,0.000000,0.000000,0.947768 +1191,0.317967,0.000000,0.000000,0.948102 +1192,0.316974,0.000000,0.000000,0.948434 +1193,0.315980,0.000000,0.000000,0.948766 +1194,0.314987,0.000000,0.000000,0.949096 +1195,0.313992,0.000000,0.000000,0.949425 +1196,0.312998,0.000000,0.000000,0.949754 +1197,0.312003,0.000000,0.000000,0.950081 +1198,0.311008,0.000000,0.000000,0.950407 +1199,0.310013,0.000000,0.000000,0.950732 +1200,0.309017,0.000000,0.000000,0.951057 +1201,0.308021,0.000000,0.000000,0.951380 +1202,0.307024,0.000000,0.000000,0.951702 +1203,0.306028,0.000000,0.000000,0.952023 +1204,0.305031,0.000000,0.000000,0.952343 +1205,0.304033,0.000000,0.000000,0.952661 +1206,0.303035,0.000000,0.000000,0.952979 +1207,0.302037,0.000000,0.000000,0.953296 +1208,0.301039,0.000000,0.000000,0.953612 +1209,0.300040,0.000000,0.000000,0.953927 +1210,0.299041,0.000000,0.000000,0.954240 +1211,0.298041,0.000000,0.000000,0.954553 +1212,0.297042,0.000000,0.000000,0.954865 +1213,0.296041,0.000000,0.000000,0.955175 +1214,0.295041,0.000000,0.000000,0.955485 +1215,0.294040,0.000000,0.000000,0.955793 +1216,0.293039,0.000000,0.000000,0.956100 +1217,0.292038,0.000000,0.000000,0.956407 +1218,0.291036,0.000000,0.000000,0.956712 +1219,0.290034,0.000000,0.000000,0.957016 +1220,0.289032,0.000000,0.000000,0.957319 +1221,0.288029,0.000000,0.000000,0.957622 +1222,0.287026,0.000000,0.000000,0.957923 +1223,0.286023,0.000000,0.000000,0.958223 +1224,0.285019,0.000000,0.000000,0.958522 +1225,0.284015,0.000000,0.000000,0.958820 +1226,0.283011,0.000000,0.000000,0.959117 +1227,0.282007,0.000000,0.000000,0.959412 +1228,0.281002,0.000000,0.000000,0.959707 +1229,0.279997,0.000000,0.000000,0.960001 +1230,0.278991,0.000000,0.000000,0.960294 +1231,0.277985,0.000000,0.000000,0.960585 +1232,0.276979,0.000000,0.000000,0.960876 +1233,0.275973,0.000000,0.000000,0.961165 +1234,0.274966,0.000000,0.000000,0.961454 +1235,0.273959,0.000000,0.000000,0.961741 +1236,0.272952,0.000000,0.000000,0.962028 +1237,0.271944,0.000000,0.000000,0.962313 +1238,0.270936,0.000000,0.000000,0.962597 +1239,0.269928,0.000000,0.000000,0.962880 +1240,0.268920,0.000000,0.000000,0.963163 +1241,0.267911,0.000000,0.000000,0.963444 +1242,0.266902,0.000000,0.000000,0.963724 +1243,0.265893,0.000000,0.000000,0.964003 +1244,0.264883,0.000000,0.000000,0.964281 +1245,0.263873,0.000000,0.000000,0.964557 +1246,0.262863,0.000000,0.000000,0.964833 +1247,0.261852,0.000000,0.000000,0.965108 +1248,0.260842,0.000000,0.000000,0.965382 +1249,0.259830,0.000000,0.000000,0.965654 +1250,0.258819,0.000000,0.000000,0.965926 +1251,0.257807,0.000000,0.000000,0.966196 +1252,0.256795,0.000000,0.000000,0.966466 +1253,0.255783,0.000000,0.000000,0.966734 +1254,0.254771,0.000000,0.000000,0.967001 +1255,0.253758,0.000000,0.000000,0.967268 +1256,0.252745,0.000000,0.000000,0.967533 +1257,0.251732,0.000000,0.000000,0.967797 +1258,0.250718,0.000000,0.000000,0.968060 +1259,0.249704,0.000000,0.000000,0.968322 +1260,0.248690,0.000000,0.000000,0.968583 +1261,0.247675,0.000000,0.000000,0.968843 +1262,0.246661,0.000000,0.000000,0.969102 +1263,0.245646,0.000000,0.000000,0.969360 +1264,0.244631,0.000000,0.000000,0.969616 +1265,0.243615,0.000000,0.000000,0.969872 +1266,0.242599,0.000000,0.000000,0.970127 +1267,0.241583,0.000000,0.000000,0.970380 +1268,0.240567,0.000000,0.000000,0.970633 +1269,0.239550,0.000000,0.000000,0.970884 +1270,0.238533,0.000000,0.000000,0.971134 +1271,0.237516,0.000000,0.000000,0.971384 +1272,0.236499,0.000000,0.000000,0.971632 +1273,0.235481,0.000000,0.000000,0.971879 +1274,0.234463,0.000000,0.000000,0.972125 +1275,0.233445,0.000000,0.000000,0.972370 +1276,0.232427,0.000000,0.000000,0.972614 +1277,0.231408,0.000000,0.000000,0.972857 +1278,0.230389,0.000000,0.000000,0.973099 +1279,0.229370,0.000000,0.000000,0.973339 +1280,0.228351,0.000000,0.000000,0.973579 +1281,0.227331,0.000000,0.000000,0.973817 +1282,0.226311,0.000000,0.000000,0.974055 +1283,0.225291,0.000000,0.000000,0.974291 +1284,0.224271,0.000000,0.000000,0.974527 +1285,0.223250,0.000000,0.000000,0.974761 +1286,0.222229,0.000000,0.000000,0.974994 +1287,0.221208,0.000000,0.000000,0.975227 +1288,0.220187,0.000000,0.000000,0.975458 +1289,0.219165,0.000000,0.000000,0.975688 +1290,0.218143,0.000000,0.000000,0.975917 +1291,0.217121,0.000000,0.000000,0.976145 +1292,0.216099,0.000000,0.000000,0.976371 +1293,0.215076,0.000000,0.000000,0.976597 +1294,0.214053,0.000000,0.000000,0.976822 +1295,0.213030,0.000000,0.000000,0.977046 +1296,0.212007,0.000000,0.000000,0.977268 +1297,0.210984,0.000000,0.000000,0.977490 +1298,0.209960,0.000000,0.000000,0.977710 +1299,0.208936,0.000000,0.000000,0.977929 +1300,0.207912,0.000000,0.000000,0.978148 +1301,0.206887,0.000000,0.000000,0.978365 +1302,0.205863,0.000000,0.000000,0.978581 +1303,0.204838,0.000000,0.000000,0.978796 +1304,0.203813,0.000000,0.000000,0.979010 +1305,0.202787,0.000000,0.000000,0.979223 +1306,0.201762,0.000000,0.000000,0.979435 +1307,0.200736,0.000000,0.000000,0.979645 +1308,0.199710,0.000000,0.000000,0.979855 +1309,0.198684,0.000000,0.000000,0.980064 +1310,0.197657,0.000000,0.000000,0.980271 +1311,0.196631,0.000000,0.000000,0.980478 +1312,0.195604,0.000000,0.000000,0.980683 +1313,0.194577,0.000000,0.000000,0.980887 +1314,0.193549,0.000000,0.000000,0.981091 +1315,0.192522,0.000000,0.000000,0.981293 +1316,0.191494,0.000000,0.000000,0.981494 +1317,0.190466,0.000000,0.000000,0.981694 +1318,0.189438,0.000000,0.000000,0.981893 +1319,0.188410,0.000000,0.000000,0.982090 +1320,0.187381,0.000000,0.000000,0.982287 +1321,0.186353,0.000000,0.000000,0.982483 +1322,0.185324,0.000000,0.000000,0.982678 +1323,0.184294,0.000000,0.000000,0.982871 +1324,0.183265,0.000000,0.000000,0.983064 +1325,0.182236,0.000000,0.000000,0.983255 +1326,0.181206,0.000000,0.000000,0.983445 +1327,0.180176,0.000000,0.000000,0.983634 +1328,0.179146,0.000000,0.000000,0.983823 +1329,0.178115,0.000000,0.000000,0.984010 +1330,0.177085,0.000000,0.000000,0.984196 +1331,0.176054,0.000000,0.000000,0.984381 +1332,0.175023,0.000000,0.000000,0.984564 +1333,0.173992,0.000000,0.000000,0.984747 +1334,0.172961,0.000000,0.000000,0.984929 +1335,0.171929,0.000000,0.000000,0.985109 +1336,0.170897,0.000000,0.000000,0.985289 +1337,0.169866,0.000000,0.000000,0.985467 +1338,0.168833,0.000000,0.000000,0.985645 +1339,0.167801,0.000000,0.000000,0.985821 +1340,0.166769,0.000000,0.000000,0.985996 +1341,0.165736,0.000000,0.000000,0.986170 +1342,0.164703,0.000000,0.000000,0.986343 +1343,0.163670,0.000000,0.000000,0.986515 +1344,0.162637,0.000000,0.000000,0.986686 +1345,0.161604,0.000000,0.000000,0.986856 +1346,0.160570,0.000000,0.000000,0.987024 +1347,0.159537,0.000000,0.000000,0.987192 +1348,0.158503,0.000000,0.000000,0.987359 +1349,0.157469,0.000000,0.000000,0.987524 +1350,0.156434,0.000000,0.000000,0.987688 +1351,0.155400,0.000000,0.000000,0.987852 +1352,0.154366,0.000000,0.000000,0.988014 +1353,0.153331,0.000000,0.000000,0.988175 +1354,0.152296,0.000000,0.000000,0.988335 +1355,0.151261,0.000000,0.000000,0.988494 +1356,0.150226,0.000000,0.000000,0.988652 +1357,0.149190,0.000000,0.000000,0.988809 +1358,0.148155,0.000000,0.000000,0.988964 +1359,0.147119,0.000000,0.000000,0.989119 +1360,0.146083,0.000000,0.000000,0.989272 +1361,0.145047,0.000000,0.000000,0.989425 +1362,0.144011,0.000000,0.000000,0.989576 +1363,0.142974,0.000000,0.000000,0.989726 +1364,0.141938,0.000000,0.000000,0.989876 +1365,0.140901,0.000000,0.000000,0.990024 +1366,0.139864,0.000000,0.000000,0.990171 +1367,0.138827,0.000000,0.000000,0.990317 +1368,0.137790,0.000000,0.000000,0.990461 +1369,0.136753,0.000000,0.000000,0.990605 +1370,0.135716,0.000000,0.000000,0.990748 +1371,0.134678,0.000000,0.000000,0.990889 +1372,0.133640,0.000000,0.000000,0.991030 +1373,0.132602,0.000000,0.000000,0.991169 +1374,0.131564,0.000000,0.000000,0.991308 +1375,0.130526,0.000000,0.000000,0.991445 +1376,0.129488,0.000000,0.000000,0.991581 +1377,0.128449,0.000000,0.000000,0.991716 +1378,0.127411,0.000000,0.000000,0.991850 +1379,0.126372,0.000000,0.000000,0.991983 +1380,0.125333,0.000000,0.000000,0.992115 +1381,0.124294,0.000000,0.000000,0.992245 +1382,0.123255,0.000000,0.000000,0.992375 +1383,0.122216,0.000000,0.000000,0.992504 +1384,0.121176,0.000000,0.000000,0.992631 +1385,0.120137,0.000000,0.000000,0.992757 +1386,0.119097,0.000000,0.000000,0.992883 +1387,0.118057,0.000000,0.000000,0.993007 +1388,0.117017,0.000000,0.000000,0.993130 +1389,0.115977,0.000000,0.000000,0.993252 +1390,0.114937,0.000000,0.000000,0.993373 +1391,0.113897,0.000000,0.000000,0.993493 +1392,0.112856,0.000000,0.000000,0.993611 +1393,0.111816,0.000000,0.000000,0.993729 +1394,0.110775,0.000000,0.000000,0.993845 +1395,0.109734,0.000000,0.000000,0.993961 +1396,0.108693,0.000000,0.000000,0.994075 +1397,0.107652,0.000000,0.000000,0.994189 +1398,0.106611,0.000000,0.000000,0.994301 +1399,0.105570,0.000000,0.000000,0.994412 +1400,0.104528,0.000000,0.000000,0.994522 +1401,0.103487,0.000000,0.000000,0.994631 +1402,0.102445,0.000000,0.000000,0.994739 +1403,0.101404,0.000000,0.000000,0.994845 +1404,0.100362,0.000000,0.000000,0.994951 +1405,0.099320,0.000000,0.000000,0.995056 +1406,0.098278,0.000000,0.000000,0.995159 +1407,0.097235,0.000000,0.000000,0.995261 +1408,0.096193,0.000000,0.000000,0.995363 +1409,0.095151,0.000000,0.000000,0.995463 +1410,0.094108,0.000000,0.000000,0.995562 +1411,0.093066,0.000000,0.000000,0.995660 +1412,0.092023,0.000000,0.000000,0.995757 +1413,0.090980,0.000000,0.000000,0.995853 +1414,0.089937,0.000000,0.000000,0.995947 +1415,0.088894,0.000000,0.000000,0.996041 +1416,0.087851,0.000000,0.000000,0.996134 +1417,0.086808,0.000000,0.000000,0.996225 +1418,0.085765,0.000000,0.000000,0.996315 +1419,0.084721,0.000000,0.000000,0.996405 +1420,0.083678,0.000000,0.000000,0.996493 +1421,0.082634,0.000000,0.000000,0.996580 +1422,0.081591,0.000000,0.000000,0.996666 +1423,0.080547,0.000000,0.000000,0.996751 +1424,0.079503,0.000000,0.000000,0.996835 +1425,0.078459,0.000000,0.000000,0.996917 +1426,0.077415,0.000000,0.000000,0.996999 +1427,0.076371,0.000000,0.000000,0.997079 +1428,0.075327,0.000000,0.000000,0.997159 +1429,0.074283,0.000000,0.000000,0.997237 +1430,0.073238,0.000000,0.000000,0.997314 +1431,0.072194,0.000000,0.000000,0.997391 +1432,0.071149,0.000000,0.000000,0.997466 +1433,0.070105,0.000000,0.000000,0.997540 +1434,0.069060,0.000000,0.000000,0.997613 +1435,0.068015,0.000000,0.000000,0.997684 +1436,0.066970,0.000000,0.000000,0.997755 +1437,0.065926,0.000000,0.000000,0.997825 +1438,0.064881,0.000000,0.000000,0.997893 +1439,0.063836,0.000000,0.000000,0.997960 +1440,0.062791,0.000000,0.000000,0.998027 +1441,0.061745,0.000000,0.000000,0.998092 +1442,0.060700,0.000000,0.000000,0.998156 +1443,0.059655,0.000000,0.000000,0.998219 +1444,0.058609,0.000000,0.000000,0.998281 +1445,0.057564,0.000000,0.000000,0.998342 +1446,0.056519,0.000000,0.000000,0.998402 +1447,0.055473,0.000000,0.000000,0.998460 +1448,0.054427,0.000000,0.000000,0.998518 +1449,0.053382,0.000000,0.000000,0.998574 +1450,0.052336,0.000000,0.000000,0.998630 +1451,0.051290,0.000000,0.000000,0.998684 +1452,0.050244,0.000000,0.000000,0.998737 +1453,0.049198,0.000000,0.000000,0.998789 +1454,0.048152,0.000000,0.000000,0.998840 +1455,0.047106,0.000000,0.000000,0.998890 +1456,0.046060,0.000000,0.000000,0.998939 +1457,0.045014,0.000000,0.000000,0.998986 +1458,0.043968,0.000000,0.000000,0.999033 +1459,0.042922,0.000000,0.000000,0.999078 +1460,0.041876,0.000000,0.000000,0.999123 +1461,0.040829,0.000000,0.000000,0.999166 +1462,0.039783,0.000000,0.000000,0.999208 +1463,0.038737,0.000000,0.000000,0.999249 +1464,0.037690,0.000000,0.000000,0.999289 +1465,0.036644,0.000000,0.000000,0.999328 +1466,0.035597,0.000000,0.000000,0.999366 +1467,0.034551,0.000000,0.000000,0.999403 +1468,0.033504,0.000000,0.000000,0.999439 +1469,0.032457,0.000000,0.000000,0.999473 +1470,0.031411,0.000000,0.000000,0.999507 +1471,0.030364,0.000000,0.000000,0.999539 +1472,0.029317,0.000000,0.000000,0.999570 +1473,0.028271,0.000000,0.000000,0.999600 +1474,0.027224,0.000000,0.000000,0.999629 +1475,0.026177,0.000000,0.000000,0.999657 +1476,0.025130,0.000000,0.000000,0.999684 +1477,0.024083,0.000000,0.000000,0.999710 +1478,0.023036,0.000000,0.000000,0.999735 +1479,0.021989,0.000000,0.000000,0.999758 +1480,0.020942,0.000000,0.000000,0.999781 +1481,0.019895,0.000000,0.000000,0.999802 +1482,0.018848,0.000000,0.000000,0.999822 +1483,0.017801,0.000000,0.000000,0.999842 +1484,0.016754,0.000000,0.000000,0.999860 +1485,0.015707,0.000000,0.000000,0.999877 +1486,0.014660,0.000000,0.000000,0.999893 +1487,0.013613,0.000000,0.000000,0.999907 +1488,0.012566,0.000000,0.000000,0.999921 +1489,0.011519,0.000000,0.000000,0.999934 +1490,0.010472,0.000000,0.000000,0.999945 +1491,0.009425,0.000000,0.000000,0.999956 +1492,0.008377,0.000000,0.000000,0.999965 +1493,0.007330,0.000000,0.000000,0.999973 +1494,0.006283,0.000000,0.000000,0.999980 +1495,0.005236,0.000000,0.000000,0.999986 +1496,0.004189,0.000000,0.000000,0.999991 +1497,0.003142,0.000000,0.000000,0.999995 +1498,0.002094,0.000000,0.000000,0.999998 +1499,0.001047,0.000000,0.000000,0.999999 +1500,0.000000,0.000000,0.000000,1.000000 +1501,-0.001047,-0.000000,0.000000,0.999999 +1502,-0.002094,-0.000000,0.000000,0.999998 +1503,-0.003142,-0.000000,0.000000,0.999995 +1504,-0.004189,-0.000000,0.000000,0.999991 +1505,-0.005236,-0.000000,0.000000,0.999986 +1506,-0.006283,-0.000000,0.000000,0.999980 +1507,-0.007330,-0.000000,0.000000,0.999973 +1508,-0.008377,-0.000000,0.000000,0.999965 +1509,-0.009425,-0.000000,0.000000,0.999956 +1510,-0.010472,-0.000000,0.000000,0.999945 +1511,-0.011519,-0.000000,0.000000,0.999934 +1512,-0.012566,-0.000000,0.000000,0.999921 +1513,-0.013613,-0.000000,0.000000,0.999907 +1514,-0.014660,-0.000000,0.000000,0.999893 +1515,-0.015707,-0.000000,0.000000,0.999877 +1516,-0.016754,-0.000000,0.000000,0.999860 +1517,-0.017801,-0.000000,0.000000,0.999842 +1518,-0.018848,-0.000000,0.000000,0.999822 +1519,-0.019895,-0.000000,0.000000,0.999802 +1520,-0.020942,-0.000000,0.000000,0.999781 +1521,-0.021989,-0.000000,0.000000,0.999758 +1522,-0.023036,-0.000000,0.000000,0.999735 +1523,-0.024083,-0.000000,0.000000,0.999710 +1524,-0.025130,-0.000000,0.000000,0.999684 +1525,-0.026177,-0.000000,0.000000,0.999657 +1526,-0.027224,-0.000000,0.000000,0.999629 +1527,-0.028271,-0.000000,0.000000,0.999600 +1528,-0.029317,-0.000000,0.000000,0.999570 +1529,-0.030364,-0.000000,0.000000,0.999539 +1530,-0.031411,-0.000000,0.000000,0.999507 +1531,-0.032457,-0.000000,0.000000,0.999473 +1532,-0.033504,-0.000000,0.000000,0.999439 +1533,-0.034551,-0.000000,0.000000,0.999403 +1534,-0.035597,-0.000000,0.000000,0.999366 +1535,-0.036644,-0.000000,0.000000,0.999328 +1536,-0.037690,-0.000000,0.000000,0.999289 +1537,-0.038737,-0.000000,0.000000,0.999249 +1538,-0.039783,-0.000000,0.000000,0.999208 +1539,-0.040829,-0.000000,0.000000,0.999166 +1540,-0.041876,-0.000000,0.000000,0.999123 +1541,-0.042922,-0.000000,0.000000,0.999078 +1542,-0.043968,-0.000000,0.000000,0.999033 +1543,-0.045014,-0.000000,0.000000,0.998986 +1544,-0.046060,-0.000000,0.000000,0.998939 +1545,-0.047106,-0.000000,0.000000,0.998890 +1546,-0.048152,-0.000000,0.000000,0.998840 +1547,-0.049198,-0.000000,0.000000,0.998789 +1548,-0.050244,-0.000000,0.000000,0.998737 +1549,-0.051290,-0.000000,0.000000,0.998684 +1550,-0.052336,-0.000000,0.000000,0.998630 +1551,-0.053382,-0.000000,0.000000,0.998574 +1552,-0.054427,-0.000000,0.000000,0.998518 +1553,-0.055473,-0.000000,0.000000,0.998460 +1554,-0.056519,-0.000000,0.000000,0.998402 +1555,-0.057564,-0.000000,0.000000,0.998342 +1556,-0.058609,-0.000000,0.000000,0.998281 +1557,-0.059655,-0.000000,0.000000,0.998219 +1558,-0.060700,-0.000000,0.000000,0.998156 +1559,-0.061745,-0.000000,0.000000,0.998092 +1560,-0.062791,-0.000000,0.000000,0.998027 +1561,-0.063836,-0.000000,0.000000,0.997960 +1562,-0.064881,-0.000000,0.000000,0.997893 +1563,-0.065926,-0.000000,0.000000,0.997825 +1564,-0.066970,-0.000000,0.000000,0.997755 +1565,-0.068015,-0.000000,0.000000,0.997684 +1566,-0.069060,-0.000000,0.000000,0.997613 +1567,-0.070105,-0.000000,0.000000,0.997540 +1568,-0.071149,-0.000000,0.000000,0.997466 +1569,-0.072194,-0.000000,0.000000,0.997391 +1570,-0.073238,-0.000000,0.000000,0.997314 +1571,-0.074283,-0.000000,0.000000,0.997237 +1572,-0.075327,-0.000000,0.000000,0.997159 +1573,-0.076371,-0.000000,0.000000,0.997079 +1574,-0.077415,-0.000000,0.000000,0.996999 +1575,-0.078459,-0.000000,0.000000,0.996917 +1576,-0.079503,-0.000000,0.000000,0.996835 +1577,-0.080547,-0.000000,0.000000,0.996751 +1578,-0.081591,-0.000000,0.000000,0.996666 +1579,-0.082634,-0.000000,0.000000,0.996580 +1580,-0.083678,-0.000000,0.000000,0.996493 +1581,-0.084721,-0.000000,0.000000,0.996405 +1582,-0.085765,-0.000000,0.000000,0.996315 +1583,-0.086808,-0.000000,0.000000,0.996225 +1584,-0.087851,-0.000000,0.000000,0.996134 +1585,-0.088894,-0.000000,0.000000,0.996041 +1586,-0.089937,-0.000000,0.000000,0.995947 +1587,-0.090980,-0.000000,0.000000,0.995853 +1588,-0.092023,-0.000000,0.000000,0.995757 +1589,-0.093066,-0.000000,0.000000,0.995660 +1590,-0.094108,-0.000000,0.000000,0.995562 +1591,-0.095151,-0.000000,0.000000,0.995463 +1592,-0.096193,-0.000000,0.000000,0.995363 +1593,-0.097235,-0.000000,0.000000,0.995261 +1594,-0.098278,-0.000000,0.000000,0.995159 +1595,-0.099320,-0.000000,0.000000,0.995056 +1596,-0.100362,-0.000000,0.000000,0.994951 +1597,-0.101404,-0.000000,0.000000,0.994845 +1598,-0.102445,-0.000000,0.000000,0.994739 +1599,-0.103487,-0.000000,0.000000,0.994631 +1600,-0.104528,-0.000000,0.000000,0.994522 +1601,-0.105570,-0.000000,0.000000,0.994412 +1602,-0.106611,-0.000000,0.000000,0.994301 +1603,-0.107652,-0.000000,0.000000,0.994189 +1604,-0.108693,-0.000000,0.000000,0.994075 +1605,-0.109734,-0.000000,0.000000,0.993961 +1606,-0.110775,-0.000000,0.000000,0.993845 +1607,-0.111816,-0.000000,0.000000,0.993729 +1608,-0.112856,-0.000000,0.000000,0.993611 +1609,-0.113897,-0.000000,0.000000,0.993493 +1610,-0.114937,-0.000000,0.000000,0.993373 +1611,-0.115977,-0.000000,0.000000,0.993252 +1612,-0.117017,-0.000000,0.000000,0.993130 +1613,-0.118057,-0.000000,0.000000,0.993007 +1614,-0.119097,-0.000000,0.000000,0.992883 +1615,-0.120137,-0.000000,0.000000,0.992757 +1616,-0.121176,-0.000000,0.000000,0.992631 +1617,-0.122216,-0.000000,0.000000,0.992504 +1618,-0.123255,-0.000000,0.000000,0.992375 +1619,-0.124294,-0.000000,0.000000,0.992245 +1620,-0.125333,-0.000000,0.000000,0.992115 +1621,-0.126372,-0.000000,0.000000,0.991983 +1622,-0.127411,-0.000000,0.000000,0.991850 +1623,-0.128449,-0.000000,0.000000,0.991716 +1624,-0.129488,-0.000000,0.000000,0.991581 +1625,-0.130526,-0.000000,0.000000,0.991445 +1626,-0.131564,-0.000000,0.000000,0.991308 +1627,-0.132602,-0.000000,0.000000,0.991169 +1628,-0.133640,-0.000000,0.000000,0.991030 +1629,-0.134678,-0.000000,0.000000,0.990889 +1630,-0.135716,-0.000000,0.000000,0.990748 +1631,-0.136753,-0.000000,0.000000,0.990605 +1632,-0.137790,-0.000000,0.000000,0.990461 +1633,-0.138827,-0.000000,0.000000,0.990317 +1634,-0.139864,-0.000000,0.000000,0.990171 +1635,-0.140901,-0.000000,0.000000,0.990024 +1636,-0.141938,-0.000000,0.000000,0.989876 +1637,-0.142974,-0.000000,0.000000,0.989726 +1638,-0.144011,-0.000000,0.000000,0.989576 +1639,-0.145047,-0.000000,0.000000,0.989425 +1640,-0.146083,-0.000000,0.000000,0.989272 +1641,-0.147119,-0.000000,0.000000,0.989119 +1642,-0.148155,-0.000000,0.000000,0.988964 +1643,-0.149190,-0.000000,0.000000,0.988809 +1644,-0.150226,-0.000000,0.000000,0.988652 +1645,-0.151261,-0.000000,0.000000,0.988494 +1646,-0.152296,-0.000000,0.000000,0.988335 +1647,-0.153331,-0.000000,0.000000,0.988175 +1648,-0.154366,-0.000000,0.000000,0.988014 +1649,-0.155400,-0.000000,0.000000,0.987852 +1650,-0.156434,-0.000000,0.000000,0.987688 +1651,-0.157469,-0.000000,0.000000,0.987524 +1652,-0.158503,-0.000000,0.000000,0.987359 +1653,-0.159537,-0.000000,0.000000,0.987192 +1654,-0.160570,-0.000000,0.000000,0.987024 +1655,-0.161604,-0.000000,0.000000,0.986856 +1656,-0.162637,-0.000000,0.000000,0.986686 +1657,-0.163670,-0.000000,0.000000,0.986515 +1658,-0.164703,-0.000000,0.000000,0.986343 +1659,-0.165736,-0.000000,0.000000,0.986170 +1660,-0.166769,-0.000000,0.000000,0.985996 +1661,-0.167801,-0.000000,0.000000,0.985821 +1662,-0.168833,-0.000000,0.000000,0.985645 +1663,-0.169866,-0.000000,0.000000,0.985467 +1664,-0.170897,-0.000000,0.000000,0.985289 +1665,-0.171929,-0.000000,0.000000,0.985109 +1666,-0.172961,-0.000000,0.000000,0.984929 +1667,-0.173992,-0.000000,0.000000,0.984747 +1668,-0.175023,-0.000000,0.000000,0.984564 +1669,-0.176054,-0.000000,0.000000,0.984381 +1670,-0.177085,-0.000000,0.000000,0.984196 +1671,-0.178115,-0.000000,0.000000,0.984010 +1672,-0.179146,-0.000000,0.000000,0.983823 +1673,-0.180176,-0.000000,0.000000,0.983634 +1674,-0.181206,-0.000000,0.000000,0.983445 +1675,-0.182236,-0.000000,0.000000,0.983255 +1676,-0.183265,-0.000000,0.000000,0.983064 +1677,-0.184294,-0.000000,0.000000,0.982871 +1678,-0.185324,-0.000000,0.000000,0.982678 +1679,-0.186353,-0.000000,0.000000,0.982483 +1680,-0.187381,-0.000000,0.000000,0.982287 +1681,-0.188410,-0.000000,0.000000,0.982090 +1682,-0.189438,-0.000000,0.000000,0.981893 +1683,-0.190466,-0.000000,0.000000,0.981694 +1684,-0.191494,-0.000000,0.000000,0.981494 +1685,-0.192522,-0.000000,0.000000,0.981293 +1686,-0.193549,-0.000000,0.000000,0.981091 +1687,-0.194577,-0.000000,0.000000,0.980887 +1688,-0.195604,-0.000000,0.000000,0.980683 +1689,-0.196631,-0.000000,0.000000,0.980478 +1690,-0.197657,-0.000000,0.000000,0.980271 +1691,-0.198684,-0.000000,0.000000,0.980064 +1692,-0.199710,-0.000000,0.000000,0.979855 +1693,-0.200736,-0.000000,0.000000,0.979645 +1694,-0.201762,-0.000000,0.000000,0.979435 +1695,-0.202787,-0.000000,0.000000,0.979223 +1696,-0.203813,-0.000000,0.000000,0.979010 +1697,-0.204838,-0.000000,0.000000,0.978796 +1698,-0.205863,-0.000000,0.000000,0.978581 +1699,-0.206887,-0.000000,0.000000,0.978365 +1700,-0.207912,-0.000000,0.000000,0.978148 +1701,-0.208936,-0.000000,0.000000,0.977929 +1702,-0.209960,-0.000000,0.000000,0.977710 +1703,-0.210984,-0.000000,0.000000,0.977490 +1704,-0.212007,-0.000000,0.000000,0.977268 +1705,-0.213030,-0.000000,0.000000,0.977046 +1706,-0.214053,-0.000000,0.000000,0.976822 +1707,-0.215076,-0.000000,0.000000,0.976597 +1708,-0.216099,-0.000000,0.000000,0.976371 +1709,-0.217121,-0.000000,0.000000,0.976145 +1710,-0.218143,-0.000000,0.000000,0.975917 +1711,-0.219165,-0.000000,0.000000,0.975688 +1712,-0.220187,-0.000000,0.000000,0.975458 +1713,-0.221208,-0.000000,0.000000,0.975227 +1714,-0.222229,-0.000000,0.000000,0.974994 +1715,-0.223250,-0.000000,0.000000,0.974761 +1716,-0.224271,-0.000000,0.000000,0.974527 +1717,-0.225291,-0.000000,0.000000,0.974291 +1718,-0.226311,-0.000000,0.000000,0.974055 +1719,-0.227331,-0.000000,0.000000,0.973817 +1720,-0.228351,-0.000000,0.000000,0.973579 +1721,-0.229370,-0.000000,0.000000,0.973339 +1722,-0.230389,-0.000000,0.000000,0.973099 +1723,-0.231408,-0.000000,0.000000,0.972857 +1724,-0.232427,-0.000000,0.000000,0.972614 +1725,-0.233445,-0.000000,0.000000,0.972370 +1726,-0.234463,-0.000000,0.000000,0.972125 +1727,-0.235481,-0.000000,0.000000,0.971879 +1728,-0.236499,-0.000000,0.000000,0.971632 +1729,-0.237516,-0.000000,0.000000,0.971384 +1730,-0.238533,-0.000000,0.000000,0.971134 +1731,-0.239550,-0.000000,0.000000,0.970884 +1732,-0.240567,-0.000000,0.000000,0.970633 +1733,-0.241583,-0.000000,0.000000,0.970380 +1734,-0.242599,-0.000000,0.000000,0.970127 +1735,-0.243615,-0.000000,0.000000,0.969872 +1736,-0.244631,-0.000000,0.000000,0.969616 +1737,-0.245646,-0.000000,0.000000,0.969360 +1738,-0.246661,-0.000000,0.000000,0.969102 +1739,-0.247675,-0.000000,0.000000,0.968843 +1740,-0.248690,-0.000000,0.000000,0.968583 +1741,-0.249704,-0.000000,0.000000,0.968322 +1742,-0.250718,-0.000000,0.000000,0.968060 +1743,-0.251732,-0.000000,0.000000,0.967797 +1744,-0.252745,-0.000000,0.000000,0.967533 +1745,-0.253758,-0.000000,0.000000,0.967268 +1746,-0.254771,-0.000000,0.000000,0.967001 +1747,-0.255783,-0.000000,0.000000,0.966734 +1748,-0.256795,-0.000000,0.000000,0.966466 +1749,-0.257807,-0.000000,0.000000,0.966196 +1750,-0.258819,-0.000000,0.000000,0.965926 +1751,-0.259830,-0.000000,0.000000,0.965654 +1752,-0.260842,-0.000000,0.000000,0.965382 +1753,-0.261852,-0.000000,0.000000,0.965108 +1754,-0.262863,-0.000000,0.000000,0.964833 +1755,-0.263873,-0.000000,0.000000,0.964557 +1756,-0.264883,-0.000000,0.000000,0.964281 +1757,-0.265893,-0.000000,0.000000,0.964003 +1758,-0.266902,-0.000000,0.000000,0.963724 +1759,-0.267911,-0.000000,0.000000,0.963444 +1760,-0.268920,-0.000000,0.000000,0.963163 +1761,-0.269928,-0.000000,0.000000,0.962880 +1762,-0.270936,-0.000000,0.000000,0.962597 +1763,-0.271944,-0.000000,0.000000,0.962313 +1764,-0.272952,-0.000000,0.000000,0.962028 +1765,-0.273959,-0.000000,0.000000,0.961741 +1766,-0.274966,-0.000000,0.000000,0.961454 +1767,-0.275973,-0.000000,0.000000,0.961165 +1768,-0.276979,-0.000000,0.000000,0.960876 +1769,-0.277985,-0.000000,0.000000,0.960585 +1770,-0.278991,-0.000000,0.000000,0.960294 +1771,-0.279997,-0.000000,0.000000,0.960001 +1772,-0.281002,-0.000000,0.000000,0.959707 +1773,-0.282007,-0.000000,0.000000,0.959412 +1774,-0.283011,-0.000000,0.000000,0.959117 +1775,-0.284015,-0.000000,0.000000,0.958820 +1776,-0.285019,-0.000000,0.000000,0.958522 +1777,-0.286023,-0.000000,0.000000,0.958223 +1778,-0.287026,-0.000000,0.000000,0.957923 +1779,-0.288029,-0.000000,0.000000,0.957622 +1780,-0.289032,-0.000000,0.000000,0.957319 +1781,-0.290034,-0.000000,0.000000,0.957016 +1782,-0.291036,-0.000000,0.000000,0.956712 +1783,-0.292038,-0.000000,0.000000,0.956407 +1784,-0.293039,-0.000000,0.000000,0.956100 +1785,-0.294040,-0.000000,0.000000,0.955793 +1786,-0.295041,-0.000000,0.000000,0.955485 +1787,-0.296041,-0.000000,0.000000,0.955175 +1788,-0.297042,-0.000000,0.000000,0.954865 +1789,-0.298041,-0.000000,0.000000,0.954553 +1790,-0.299041,-0.000000,0.000000,0.954240 +1791,-0.300040,-0.000000,0.000000,0.953927 +1792,-0.301039,-0.000000,0.000000,0.953612 +1793,-0.302037,-0.000000,0.000000,0.953296 +1794,-0.303035,-0.000000,0.000000,0.952979 +1795,-0.304033,-0.000000,0.000000,0.952661 +1796,-0.305031,-0.000000,0.000000,0.952343 +1797,-0.306028,-0.000000,0.000000,0.952023 +1798,-0.307024,-0.000000,0.000000,0.951702 +1799,-0.308021,-0.000000,0.000000,0.951380 +1800,-0.309017,-0.000000,0.000000,0.951057 +1801,-0.310013,-0.000000,0.000000,0.950732 +1802,-0.311008,-0.000000,0.000000,0.950407 +1803,-0.312003,-0.000000,0.000000,0.950081 +1804,-0.312998,-0.000000,0.000000,0.949754 +1805,-0.313992,-0.000000,0.000000,0.949425 +1806,-0.314987,-0.000000,0.000000,0.949096 +1807,-0.315980,-0.000000,0.000000,0.948766 +1808,-0.316974,-0.000000,0.000000,0.948434 +1809,-0.317967,-0.000000,0.000000,0.948102 +1810,-0.318959,-0.000000,0.000000,0.947768 +1811,-0.319952,-0.000000,0.000000,0.947434 +1812,-0.320944,-0.000000,0.000000,0.947098 +1813,-0.321935,-0.000000,0.000000,0.946762 +1814,-0.322927,-0.000000,0.000000,0.946424 +1815,-0.323917,-0.000000,0.000000,0.946085 +1816,-0.324908,-0.000000,0.000000,0.945746 +1817,-0.325898,-0.000000,0.000000,0.945405 +1818,-0.326888,-0.000000,0.000000,0.945063 +1819,-0.327878,-0.000000,0.000000,0.944720 +1820,-0.328867,-0.000000,0.000000,0.944376 +1821,-0.329855,-0.000000,0.000000,0.944031 +1822,-0.330844,-0.000000,0.000000,0.943686 +1823,-0.331832,-0.000000,0.000000,0.943339 +1824,-0.332820,-0.000000,0.000000,0.942991 +1825,-0.333807,-0.000000,0.000000,0.942641 +1826,-0.334794,-0.000000,0.000000,0.942291 +1827,-0.335780,-0.000000,0.000000,0.941940 +1828,-0.336767,-0.000000,0.000000,0.941588 +1829,-0.337752,-0.000000,0.000000,0.941235 +1830,-0.338738,-0.000000,0.000000,0.940881 +1831,-0.339723,-0.000000,0.000000,0.940526 +1832,-0.340708,-0.000000,0.000000,0.940169 +1833,-0.341692,-0.000000,0.000000,0.939812 +1834,-0.342676,-0.000000,0.000000,0.939454 +1835,-0.343660,-0.000000,0.000000,0.939094 +1836,-0.344643,-0.000000,0.000000,0.938734 +1837,-0.345626,-0.000000,0.000000,0.938372 +1838,-0.346608,-0.000000,0.000000,0.938010 +1839,-0.347590,-0.000000,0.000000,0.937646 +1840,-0.348572,-0.000000,0.000000,0.937282 +1841,-0.349553,-0.000000,0.000000,0.936916 +1842,-0.350534,-0.000000,0.000000,0.936550 +1843,-0.351515,-0.000000,0.000000,0.936182 +1844,-0.352495,-0.000000,0.000000,0.935814 +1845,-0.353475,-0.000000,0.000000,0.935444 +1846,-0.354454,-0.000000,0.000000,0.935073 +1847,-0.355433,-0.000000,0.000000,0.934702 +1848,-0.356412,-0.000000,0.000000,0.934329 +1849,-0.357390,-0.000000,0.000000,0.933955 +1850,-0.358368,-0.000000,0.000000,0.933580 +1851,-0.359345,-0.000000,0.000000,0.933205 +1852,-0.360322,-0.000000,0.000000,0.932828 +1853,-0.361299,-0.000000,0.000000,0.932450 +1854,-0.362275,-0.000000,0.000000,0.932071 +1855,-0.363251,-0.000000,0.000000,0.931691 +1856,-0.364227,-0.000000,0.000000,0.931310 +1857,-0.365202,-0.000000,0.000000,0.930928 +1858,-0.366176,-0.000000,0.000000,0.930545 +1859,-0.367151,-0.000000,0.000000,0.930161 +1860,-0.368125,-0.000000,0.000000,0.929776 +1861,-0.369098,-0.000000,0.000000,0.929390 +1862,-0.370071,-0.000000,0.000000,0.929003 +1863,-0.371044,-0.000000,0.000000,0.928615 +1864,-0.372016,-0.000000,0.000000,0.928226 +1865,-0.372988,-0.000000,0.000000,0.927836 +1866,-0.373959,-0.000000,0.000000,0.927445 +1867,-0.374930,-0.000000,0.000000,0.927053 +1868,-0.375901,-0.000000,0.000000,0.926660 +1869,-0.376871,-0.000000,0.000000,0.926266 +1870,-0.377841,-0.000000,0.000000,0.925871 +1871,-0.378810,-0.000000,0.000000,0.925474 +1872,-0.379779,-0.000000,0.000000,0.925077 +1873,-0.380748,-0.000000,0.000000,0.924679 +1874,-0.381716,-0.000000,0.000000,0.924280 +1875,-0.382683,-0.000000,0.000000,0.923880 +1876,-0.383651,-0.000000,0.000000,0.923478 +1877,-0.384618,-0.000000,0.000000,0.923076 +1878,-0.385584,-0.000000,0.000000,0.922673 +1879,-0.386550,-0.000000,0.000000,0.922268 +1880,-0.387516,-0.000000,0.000000,0.921863 +1881,-0.388481,-0.000000,0.000000,0.921457 +1882,-0.389445,-0.000000,0.000000,0.921050 +1883,-0.390410,-0.000000,0.000000,0.920641 +1884,-0.391374,-0.000000,0.000000,0.920232 +1885,-0.392337,-0.000000,0.000000,0.919821 +1886,-0.393300,-0.000000,0.000000,0.919410 +1887,-0.394263,-0.000000,0.000000,0.918998 +1888,-0.395225,-0.000000,0.000000,0.918584 +1889,-0.396187,-0.000000,0.000000,0.918170 +1890,-0.397148,-0.000000,0.000000,0.917755 +1891,-0.398109,-0.000000,0.000000,0.917338 +1892,-0.399069,-0.000000,0.000000,0.916921 +1893,-0.400029,-0.000000,0.000000,0.916502 +1894,-0.400989,-0.000000,0.000000,0.916083 +1895,-0.401948,-0.000000,0.000000,0.915663 +1896,-0.402906,-0.000000,0.000000,0.915241 +1897,-0.403865,-0.000000,0.000000,0.914819 +1898,-0.404822,-0.000000,0.000000,0.914395 +1899,-0.405780,-0.000000,0.000000,0.913971 +1900,-0.406737,-0.000000,0.000000,0.913545 +1901,-0.407693,-0.000000,0.000000,0.913119 +1902,-0.408649,-0.000000,0.000000,0.912692 +1903,-0.409605,-0.000000,0.000000,0.912263 +1904,-0.410560,-0.000000,0.000000,0.911834 +1905,-0.411514,-0.000000,0.000000,0.911403 +1906,-0.412469,-0.000000,0.000000,0.910972 +1907,-0.413422,-0.000000,0.000000,0.910539 +1908,-0.414376,-0.000000,0.000000,0.910106 +1909,-0.415328,-0.000000,0.000000,0.909672 +1910,-0.416281,-0.000000,0.000000,0.909236 +1911,-0.417233,-0.000000,0.000000,0.908800 +1912,-0.418184,-0.000000,0.000000,0.908362 +1913,-0.419135,-0.000000,0.000000,0.907924 +1914,-0.420086,-0.000000,0.000000,0.907484 +1915,-0.421036,-0.000000,0.000000,0.907044 +1916,-0.421985,-0.000000,0.000000,0.906603 +1917,-0.422935,-0.000000,0.000000,0.906160 +1918,-0.423883,-0.000000,0.000000,0.905717 +1919,-0.424832,-0.000000,0.000000,0.905272 +1920,-0.425779,-0.000000,0.000000,0.904827 +1921,-0.426727,-0.000000,0.000000,0.904381 +1922,-0.427673,-0.000000,0.000000,0.903933 +1923,-0.428620,-0.000000,0.000000,0.903485 +1924,-0.429566,-0.000000,0.000000,0.903036 +1925,-0.430511,-0.000000,0.000000,0.902585 +1926,-0.431456,-0.000000,0.000000,0.902134 +1927,-0.432401,-0.000000,0.000000,0.901682 +1928,-0.433345,-0.000000,0.000000,0.901228 +1929,-0.434288,-0.000000,0.000000,0.900774 +1930,-0.435231,-0.000000,0.000000,0.900319 +1931,-0.436174,-0.000000,0.000000,0.899863 +1932,-0.437116,-0.000000,0.000000,0.899405 +1933,-0.438057,-0.000000,0.000000,0.898947 +1934,-0.438999,-0.000000,0.000000,0.898488 +1935,-0.439939,-0.000000,0.000000,0.898028 +1936,-0.440879,-0.000000,0.000000,0.897566 +1937,-0.441819,-0.000000,0.000000,0.897104 +1938,-0.442758,-0.000000,0.000000,0.896641 +1939,-0.443697,-0.000000,0.000000,0.896177 +1940,-0.444635,-0.000000,0.000000,0.895712 +1941,-0.445573,-0.000000,0.000000,0.895246 +1942,-0.446510,-0.000000,0.000000,0.894779 +1943,-0.447447,-0.000000,0.000000,0.894310 +1944,-0.448383,-0.000000,0.000000,0.893841 +1945,-0.449319,-0.000000,0.000000,0.893371 +1946,-0.450254,-0.000000,0.000000,0.892900 +1947,-0.451189,-0.000000,0.000000,0.892428 +1948,-0.452123,-0.000000,0.000000,0.891955 +1949,-0.453057,-0.000000,0.000000,0.891481 +1950,-0.453990,-0.000000,0.000000,0.891007 +1951,-0.454923,-0.000000,0.000000,0.890531 +1952,-0.455856,-0.000000,0.000000,0.890054 +1953,-0.456787,-0.000000,0.000000,0.889576 +1954,-0.457719,-0.000000,0.000000,0.889097 +1955,-0.458650,-0.000000,0.000000,0.888617 +1956,-0.459580,-0.000000,0.000000,0.888136 +1957,-0.460510,-0.000000,0.000000,0.887655 +1958,-0.461439,-0.000000,0.000000,0.887172 +1959,-0.462368,-0.000000,0.000000,0.886688 +1960,-0.463296,-0.000000,0.000000,0.886204 +1961,-0.464224,-0.000000,0.000000,0.885718 +1962,-0.465151,-0.000000,0.000000,0.885231 +1963,-0.466078,-0.000000,0.000000,0.884744 +1964,-0.467004,-0.000000,0.000000,0.884255 +1965,-0.467930,-0.000000,0.000000,0.883766 +1966,-0.468855,-0.000000,0.000000,0.883275 +1967,-0.469780,-0.000000,0.000000,0.882784 +1968,-0.470704,-0.000000,0.000000,0.882291 +1969,-0.471628,-0.000000,0.000000,0.881798 +1970,-0.472551,-0.000000,0.000000,0.881303 +1971,-0.473473,-0.000000,0.000000,0.880808 +1972,-0.474396,-0.000000,0.000000,0.880312 +1973,-0.475317,-0.000000,0.000000,0.879815 +1974,-0.476238,-0.000000,0.000000,0.879316 +1975,-0.477159,-0.000000,0.000000,0.878817 +1976,-0.478079,-0.000000,0.000000,0.878317 +1977,-0.478998,-0.000000,0.000000,0.877816 +1978,-0.479917,-0.000000,0.000000,0.877314 +1979,-0.480836,-0.000000,0.000000,0.876811 +1980,-0.481754,-0.000000,0.000000,0.876307 +1981,-0.482671,-0.000000,0.000000,0.875802 +1982,-0.483588,-0.000000,0.000000,0.875296 +1983,-0.484504,-0.000000,0.000000,0.874789 +1984,-0.485420,-0.000000,0.000000,0.874281 +1985,-0.486335,-0.000000,0.000000,0.873772 +1986,-0.487250,-0.000000,0.000000,0.873262 +1987,-0.488164,-0.000000,0.000000,0.872752 +1988,-0.489078,-0.000000,0.000000,0.872240 +1989,-0.489991,-0.000000,0.000000,0.871727 +1990,-0.490904,-0.000000,0.000000,0.871214 +1991,-0.491816,-0.000000,0.000000,0.870699 +1992,-0.492727,-0.000000,0.000000,0.870184 +1993,-0.493638,-0.000000,0.000000,0.869667 +1994,-0.494549,-0.000000,0.000000,0.869150 +1995,-0.495459,-0.000000,0.000000,0.868632 +1996,-0.496368,-0.000000,0.000000,0.868112 +1997,-0.497277,-0.000000,0.000000,0.867592 +1998,-0.498185,-0.000000,0.000000,0.867071 +1999,-0.499093,-0.000000,0.000000,0.866549 +2000,-0.500000,-0.000000,0.000000,0.866025 +2001,-0.500907,-0.000000,0.000000,0.865501 +2002,-0.501813,-0.000000,0.000000,0.864976 +2003,-0.502718,-0.000000,0.000000,0.864450 +2004,-0.503623,-0.000000,0.000000,0.863923 +2005,-0.504528,-0.000000,0.000000,0.863396 +2006,-0.505431,-0.000000,0.000000,0.862867 +2007,-0.506335,-0.000000,0.000000,0.862337 +2008,-0.507238,-0.000000,0.000000,0.861806 +2009,-0.508140,-0.000000,0.000000,0.861275 +2010,-0.509041,-0.000000,0.000000,0.860742 +2011,-0.509943,-0.000000,0.000000,0.860208 +2012,-0.510843,-0.000000,0.000000,0.859674 +2013,-0.511743,-0.000000,0.000000,0.859139 +2014,-0.512642,-0.000000,0.000000,0.858602 +2015,-0.513541,-0.000000,0.000000,0.858065 +2016,-0.514440,-0.000000,0.000000,0.857527 +2017,-0.515337,-0.000000,0.000000,0.856987 +2018,-0.516234,-0.000000,0.000000,0.856447 +2019,-0.517131,-0.000000,0.000000,0.855906 +2020,-0.518027,-0.000000,0.000000,0.855364 +2021,-0.518922,-0.000000,0.000000,0.854821 +2022,-0.519817,-0.000000,0.000000,0.854277 +2023,-0.520712,-0.000000,0.000000,0.853733 +2024,-0.521605,-0.000000,0.000000,0.853187 +2025,-0.522499,-0.000000,0.000000,0.852640 +2026,-0.523391,-0.000000,0.000000,0.852093 +2027,-0.524283,-0.000000,0.000000,0.851544 +2028,-0.525175,-0.000000,0.000000,0.850994 +2029,-0.526066,-0.000000,0.000000,0.850444 +2030,-0.526956,-0.000000,0.000000,0.849893 +2031,-0.527846,-0.000000,0.000000,0.849340 +2032,-0.528735,-0.000000,0.000000,0.848787 +2033,-0.529623,-0.000000,0.000000,0.848233 +2034,-0.530511,-0.000000,0.000000,0.847678 +2035,-0.531399,-0.000000,0.000000,0.847122 +2036,-0.532285,-0.000000,0.000000,0.846565 +2037,-0.533172,-0.000000,0.000000,0.846007 +2038,-0.534057,-0.000000,0.000000,0.845448 +2039,-0.534942,-0.000000,0.000000,0.844889 +2040,-0.535827,-0.000000,0.000000,0.844328 +2041,-0.536711,-0.000000,0.000000,0.843766 +2042,-0.537594,-0.000000,0.000000,0.843204 +2043,-0.538477,-0.000000,0.000000,0.842640 +2044,-0.539359,-0.000000,0.000000,0.842076 +2045,-0.540240,-0.000000,0.000000,0.841511 +2046,-0.541121,-0.000000,0.000000,0.840945 +2047,-0.542002,-0.000000,0.000000,0.840377 +2048,-0.542881,-0.000000,0.000000,0.839809 +2049,-0.543760,-0.000000,0.000000,0.839240 +2050,-0.544639,-0.000000,0.000000,0.838671 +2051,-0.545517,-0.000000,0.000000,0.838100 +2052,-0.546394,-0.000000,0.000000,0.837528 +2053,-0.547271,-0.000000,0.000000,0.836955 +2054,-0.548147,-0.000000,0.000000,0.836382 +2055,-0.549023,-0.000000,0.000000,0.835807 +2056,-0.549898,-0.000000,0.000000,0.835232 +2057,-0.550772,-0.000000,0.000000,0.834656 +2058,-0.551646,-0.000000,0.000000,0.834078 +2059,-0.552519,-0.000000,0.000000,0.833500 +2060,-0.553392,-0.000000,0.000000,0.832921 +2061,-0.554263,-0.000000,0.000000,0.832341 +2062,-0.555135,-0.000000,0.000000,0.831760 +2063,-0.556006,-0.000000,0.000000,0.831179 +2064,-0.556876,-0.000000,0.000000,0.830596 +2065,-0.557745,-0.000000,0.000000,0.830012 +2066,-0.558614,-0.000000,0.000000,0.829428 +2067,-0.559482,-0.000000,0.000000,0.828842 +2068,-0.560350,-0.000000,0.000000,0.828256 +2069,-0.561217,-0.000000,0.000000,0.827669 +2070,-0.562083,-0.000000,0.000000,0.827081 +2071,-0.562949,-0.000000,0.000000,0.826492 +2072,-0.563814,-0.000000,0.000000,0.825902 +2073,-0.564679,-0.000000,0.000000,0.825311 +2074,-0.565543,-0.000000,0.000000,0.824719 +2075,-0.566406,-0.000000,0.000000,0.824126 +2076,-0.567269,-0.000000,0.000000,0.823533 +2077,-0.568131,-0.000000,0.000000,0.822938 +2078,-0.568993,-0.000000,0.000000,0.822343 +2079,-0.569853,-0.000000,0.000000,0.821746 +2080,-0.570714,-0.000000,0.000000,0.821149 +2081,-0.571573,-0.000000,0.000000,0.820551 +2082,-0.572432,-0.000000,0.000000,0.819952 +2083,-0.573290,-0.000000,0.000000,0.819352 +2084,-0.574148,-0.000000,0.000000,0.818751 +2085,-0.575005,-0.000000,0.000000,0.818150 +2086,-0.575862,-0.000000,0.000000,0.817547 +2087,-0.576718,-0.000000,0.000000,0.816944 +2088,-0.577573,-0.000000,0.000000,0.816339 +2089,-0.578427,-0.000000,0.000000,0.815734 +2090,-0.579281,-0.000000,0.000000,0.815128 +2091,-0.580134,-0.000000,0.000000,0.814521 +2092,-0.580987,-0.000000,0.000000,0.813913 +2093,-0.581839,-0.000000,0.000000,0.813304 +2094,-0.582690,-0.000000,0.000000,0.812694 +2095,-0.583541,-0.000000,0.000000,0.812084 +2096,-0.584391,-0.000000,0.000000,0.811472 +2097,-0.585241,-0.000000,0.000000,0.810860 +2098,-0.586090,-0.000000,0.000000,0.810246 +2099,-0.586938,-0.000000,0.000000,0.809632 +2100,-0.587785,-0.000000,0.000000,0.809017 +2101,-0.588632,-0.000000,0.000000,0.808401 +2102,-0.589478,-0.000000,0.000000,0.807784 +2103,-0.590324,-0.000000,0.000000,0.807166 +2104,-0.591169,-0.000000,0.000000,0.806548 +2105,-0.592013,-0.000000,0.000000,0.805928 +2106,-0.592857,-0.000000,0.000000,0.805308 +2107,-0.593700,-0.000000,0.000000,0.804687 +2108,-0.594542,-0.000000,0.000000,0.804064 +2109,-0.595384,-0.000000,0.000000,0.803441 +2110,-0.596225,-0.000000,0.000000,0.802817 +2111,-0.597065,-0.000000,0.000000,0.802193 +2112,-0.597905,-0.000000,0.000000,0.801567 +2113,-0.598744,-0.000000,0.000000,0.800940 +2114,-0.599582,-0.000000,0.000000,0.800313 +2115,-0.600420,-0.000000,0.000000,0.799685 +2116,-0.601257,-0.000000,0.000000,0.799055 +2117,-0.602094,-0.000000,0.000000,0.798425 +2118,-0.602930,-0.000000,0.000000,0.797794 +2119,-0.603765,-0.000000,0.000000,0.797163 +2120,-0.604599,-0.000000,0.000000,0.796530 +2121,-0.605433,-0.000000,0.000000,0.795896 +2122,-0.606266,-0.000000,0.000000,0.795262 +2123,-0.607098,-0.000000,0.000000,0.794627 +2124,-0.607930,-0.000000,0.000000,0.793990 +2125,-0.608761,-0.000000,0.000000,0.793353 +2126,-0.609592,-0.000000,0.000000,0.792715 +2127,-0.610422,-0.000000,0.000000,0.792077 +2128,-0.611251,-0.000000,0.000000,0.791437 +2129,-0.612079,-0.000000,0.000000,0.790796 +2130,-0.612907,-0.000000,0.000000,0.790155 +2131,-0.613734,-0.000000,0.000000,0.789513 +2132,-0.614561,-0.000000,0.000000,0.788870 +2133,-0.615386,-0.000000,0.000000,0.788226 +2134,-0.616211,-0.000000,0.000000,0.787581 +2135,-0.617036,-0.000000,0.000000,0.786935 +2136,-0.617860,-0.000000,0.000000,0.786288 +2137,-0.618683,-0.000000,0.000000,0.785641 +2138,-0.619505,-0.000000,0.000000,0.784993 +2139,-0.620327,-0.000000,0.000000,0.784343 +2140,-0.621148,-0.000000,0.000000,0.783693 +2141,-0.621968,-0.000000,0.000000,0.783043 +2142,-0.622788,-0.000000,0.000000,0.782391 +2143,-0.623607,-0.000000,0.000000,0.781738 +2144,-0.624425,-0.000000,0.000000,0.781085 +2145,-0.625243,-0.000000,0.000000,0.780430 +2146,-0.626060,-0.000000,0.000000,0.779775 +2147,-0.626876,-0.000000,0.000000,0.779119 +2148,-0.627691,-0.000000,0.000000,0.778462 +2149,-0.628506,-0.000000,0.000000,0.777805 +2150,-0.629320,-0.000000,0.000000,0.777146 +2151,-0.630134,-0.000000,0.000000,0.776487 +2152,-0.630947,-0.000000,0.000000,0.775826 +2153,-0.631759,-0.000000,0.000000,0.775165 +2154,-0.632570,-0.000000,0.000000,0.774503 +2155,-0.633381,-0.000000,0.000000,0.773840 +2156,-0.634191,-0.000000,0.000000,0.773177 +2157,-0.635000,-0.000000,0.000000,0.772512 +2158,-0.635809,-0.000000,0.000000,0.771847 +2159,-0.636617,-0.000000,0.000000,0.771180 +2160,-0.637424,-0.000000,0.000000,0.770513 +2161,-0.638231,-0.000000,0.000000,0.769845 +2162,-0.639036,-0.000000,0.000000,0.769177 +2163,-0.639841,-0.000000,0.000000,0.768507 +2164,-0.640646,-0.000000,0.000000,0.767836 +2165,-0.641450,-0.000000,0.000000,0.767165 +2166,-0.642253,-0.000000,0.000000,0.766493 +2167,-0.643055,-0.000000,0.000000,0.765820 +2168,-0.643857,-0.000000,0.000000,0.765146 +2169,-0.644657,-0.000000,0.000000,0.764472 +2170,-0.645458,-0.000000,0.000000,0.763796 +2171,-0.646257,-0.000000,0.000000,0.763120 +2172,-0.647056,-0.000000,0.000000,0.762443 +2173,-0.647854,-0.000000,0.000000,0.761764 +2174,-0.648651,-0.000000,0.000000,0.761086 +2175,-0.649448,-0.000000,0.000000,0.760406 +2176,-0.650244,-0.000000,0.000000,0.759725 +2177,-0.651039,-0.000000,0.000000,0.759044 +2178,-0.651834,-0.000000,0.000000,0.758362 +2179,-0.652628,-0.000000,0.000000,0.757679 +2180,-0.653421,-0.000000,0.000000,0.756995 +2181,-0.654213,-0.000000,0.000000,0.756310 +2182,-0.655005,-0.000000,0.000000,0.755625 +2183,-0.655796,-0.000000,0.000000,0.754939 +2184,-0.656586,-0.000000,0.000000,0.754251 +2185,-0.657375,-0.000000,0.000000,0.753563 +2186,-0.658164,-0.000000,0.000000,0.752875 +2187,-0.658952,-0.000000,0.000000,0.752185 +2188,-0.659739,-0.000000,0.000000,0.751494 +2189,-0.660526,-0.000000,0.000000,0.750803 +2190,-0.661312,-0.000000,0.000000,0.750111 +2191,-0.662097,-0.000000,0.000000,0.749418 +2192,-0.662881,-0.000000,0.000000,0.748724 +2193,-0.663665,-0.000000,0.000000,0.748030 +2194,-0.664448,-0.000000,0.000000,0.747334 +2195,-0.665230,-0.000000,0.000000,0.746638 +2196,-0.666012,-0.000000,0.000000,0.745941 +2197,-0.666793,-0.000000,0.000000,0.745243 +2198,-0.667573,-0.000000,0.000000,0.744545 +2199,-0.668352,-0.000000,0.000000,0.743845 +2200,-0.669131,-0.000000,0.000000,0.743145 +2201,-0.669908,-0.000000,0.000000,0.742444 +2202,-0.670686,-0.000000,0.000000,0.741742 +2203,-0.671462,-0.000000,0.000000,0.741039 +2204,-0.672238,-0.000000,0.000000,0.740335 +2205,-0.673013,-0.000000,0.000000,0.739631 +2206,-0.673787,-0.000000,0.000000,0.738926 +2207,-0.674560,-0.000000,0.000000,0.738220 +2208,-0.675333,-0.000000,0.000000,0.737513 +2209,-0.676105,-0.000000,0.000000,0.736806 +2210,-0.676876,-0.000000,0.000000,0.736097 +2211,-0.677646,-0.000000,0.000000,0.735388 +2212,-0.678416,-0.000000,0.000000,0.734678 +2213,-0.679185,-0.000000,0.000000,0.733967 +2214,-0.679953,-0.000000,0.000000,0.733255 +2215,-0.680721,-0.000000,0.000000,0.732543 +2216,-0.681488,-0.000000,0.000000,0.731830 +2217,-0.682254,-0.000000,0.000000,0.731116 +2218,-0.683019,-0.000000,0.000000,0.730401 +2219,-0.683783,-0.000000,0.000000,0.729685 +2220,-0.684547,-0.000000,0.000000,0.728969 +2221,-0.685310,-0.000000,0.000000,0.728251 +2222,-0.686072,-0.000000,0.000000,0.727533 +2223,-0.686834,-0.000000,0.000000,0.726814 +2224,-0.687595,-0.000000,0.000000,0.726095 +2225,-0.688355,-0.000000,0.000000,0.725374 +2226,-0.689114,-0.000000,0.000000,0.724653 +2227,-0.689872,-0.000000,0.000000,0.723931 +2228,-0.690630,-0.000000,0.000000,0.723208 +2229,-0.691387,-0.000000,0.000000,0.722485 +2230,-0.692143,-0.000000,0.000000,0.721760 +2231,-0.692899,-0.000000,0.000000,0.721035 +2232,-0.693653,-0.000000,0.000000,0.720309 +2233,-0.694407,-0.000000,0.000000,0.719582 +2234,-0.695160,-0.000000,0.000000,0.718855 +2235,-0.695913,-0.000000,0.000000,0.718126 +2236,-0.696664,-0.000000,0.000000,0.717397 +2237,-0.697415,-0.000000,0.000000,0.716667 +2238,-0.698165,-0.000000,0.000000,0.715936 +2239,-0.698915,-0.000000,0.000000,0.715205 +2240,-0.699663,-0.000000,0.000000,0.714473 +2241,-0.700411,-0.000000,0.000000,0.713740 +2242,-0.701158,-0.000000,0.000000,0.713006 +2243,-0.701904,-0.000000,0.000000,0.712271 +2244,-0.702650,-0.000000,0.000000,0.711536 +2245,-0.703395,-0.000000,0.000000,0.710799 +2246,-0.704139,-0.000000,0.000000,0.710062 +2247,-0.704882,-0.000000,0.000000,0.709325 +2248,-0.705624,-0.000000,0.000000,0.708586 +2249,-0.706366,-0.000000,0.000000,0.707847 +2250,-0.707107,-0.000000,0.000000,0.707107 +2251,-0.707847,-0.000000,0.000000,0.706366 +2252,-0.708586,-0.000000,0.000000,0.705624 +2253,-0.709325,-0.000000,0.000000,0.704882 +2254,-0.710062,-0.000000,0.000000,0.704139 +2255,-0.710799,-0.000000,0.000000,0.703395 +2256,-0.711536,-0.000000,0.000000,0.702650 +2257,-0.712271,-0.000000,0.000000,0.701904 +2258,-0.713006,-0.000000,0.000000,0.701158 +2259,-0.713740,-0.000000,0.000000,0.700411 +2260,-0.714473,-0.000000,0.000000,0.699663 +2261,-0.715205,-0.000000,0.000000,0.698915 +2262,-0.715936,-0.000000,0.000000,0.698165 +2263,-0.716667,-0.000000,0.000000,0.697415 +2264,-0.717397,-0.000000,0.000000,0.696664 +2265,-0.718126,-0.000000,0.000000,0.695913 +2266,-0.718855,-0.000000,0.000000,0.695160 +2267,-0.719582,-0.000000,0.000000,0.694407 +2268,-0.720309,-0.000000,0.000000,0.693653 +2269,-0.721035,-0.000000,0.000000,0.692899 +2270,-0.721760,-0.000000,0.000000,0.692143 +2271,-0.722485,-0.000000,0.000000,0.691387 +2272,-0.723208,-0.000000,0.000000,0.690630 +2273,-0.723931,-0.000000,0.000000,0.689872 +2274,-0.724653,-0.000000,0.000000,0.689114 +2275,-0.725374,-0.000000,0.000000,0.688355 +2276,-0.726095,-0.000000,0.000000,0.687595 +2277,-0.726814,-0.000000,0.000000,0.686834 +2278,-0.727533,-0.000000,0.000000,0.686072 +2279,-0.728251,-0.000000,0.000000,0.685310 +2280,-0.728969,-0.000000,0.000000,0.684547 +2281,-0.729685,-0.000000,0.000000,0.683783 +2282,-0.730401,-0.000000,0.000000,0.683019 +2283,-0.731116,-0.000000,0.000000,0.682254 +2284,-0.731830,-0.000000,0.000000,0.681488 +2285,-0.732543,-0.000000,0.000000,0.680721 +2286,-0.733255,-0.000000,0.000000,0.679953 +2287,-0.733967,-0.000000,0.000000,0.679185 +2288,-0.734678,-0.000000,0.000000,0.678416 +2289,-0.735388,-0.000000,0.000000,0.677646 +2290,-0.736097,-0.000000,0.000000,0.676876 +2291,-0.736806,-0.000000,0.000000,0.676105 +2292,-0.737513,-0.000000,0.000000,0.675333 +2293,-0.738220,-0.000000,0.000000,0.674560 +2294,-0.738926,-0.000000,0.000000,0.673787 +2295,-0.739631,-0.000000,0.000000,0.673013 +2296,-0.740335,-0.000000,0.000000,0.672238 +2297,-0.741039,-0.000000,0.000000,0.671462 +2298,-0.741742,-0.000000,0.000000,0.670686 +2299,-0.742444,-0.000000,0.000000,0.669908 +2300,-0.743145,-0.000000,0.000000,0.669131 +2301,-0.743845,-0.000000,0.000000,0.668352 +2302,-0.744545,-0.000000,0.000000,0.667573 +2303,-0.745243,-0.000000,0.000000,0.666793 +2304,-0.745941,-0.000000,0.000000,0.666012 +2305,-0.746638,-0.000000,0.000000,0.665230 +2306,-0.747334,-0.000000,0.000000,0.664448 +2307,-0.748030,-0.000000,0.000000,0.663665 +2308,-0.748724,-0.000000,0.000000,0.662881 +2309,-0.749418,-0.000000,0.000000,0.662097 +2310,-0.750111,-0.000000,0.000000,0.661312 +2311,-0.750803,-0.000000,0.000000,0.660526 +2312,-0.751494,-0.000000,0.000000,0.659739 +2313,-0.752185,-0.000000,0.000000,0.658952 +2314,-0.752875,-0.000000,0.000000,0.658164 +2315,-0.753563,-0.000000,0.000000,0.657375 +2316,-0.754251,-0.000000,0.000000,0.656586 +2317,-0.754939,-0.000000,0.000000,0.655796 +2318,-0.755625,-0.000000,0.000000,0.655005 +2319,-0.756310,-0.000000,0.000000,0.654213 +2320,-0.756995,-0.000000,0.000000,0.653421 +2321,-0.757679,-0.000000,0.000000,0.652628 +2322,-0.758362,-0.000000,0.000000,0.651834 +2323,-0.759044,-0.000000,0.000000,0.651039 +2324,-0.759725,-0.000000,0.000000,0.650244 +2325,-0.760406,-0.000000,0.000000,0.649448 +2326,-0.761086,-0.000000,0.000000,0.648651 +2327,-0.761764,-0.000000,0.000000,0.647854 +2328,-0.762443,-0.000000,0.000000,0.647056 +2329,-0.763120,-0.000000,0.000000,0.646257 +2330,-0.763796,-0.000000,0.000000,0.645458 +2331,-0.764472,-0.000000,0.000000,0.644657 +2332,-0.765146,-0.000000,0.000000,0.643857 +2333,-0.765820,-0.000000,0.000000,0.643055 +2334,-0.766493,-0.000000,0.000000,0.642253 +2335,-0.767165,-0.000000,0.000000,0.641450 +2336,-0.767836,-0.000000,0.000000,0.640646 +2337,-0.768507,-0.000000,0.000000,0.639841 +2338,-0.769177,-0.000000,0.000000,0.639036 +2339,-0.769845,-0.000000,0.000000,0.638231 +2340,-0.770513,-0.000000,0.000000,0.637424 +2341,-0.771180,-0.000000,0.000000,0.636617 +2342,-0.771847,-0.000000,0.000000,0.635809 +2343,-0.772512,-0.000000,0.000000,0.635000 +2344,-0.773177,-0.000000,0.000000,0.634191 +2345,-0.773840,-0.000000,0.000000,0.633381 +2346,-0.774503,-0.000000,0.000000,0.632570 +2347,-0.775165,-0.000000,0.000000,0.631759 +2348,-0.775826,-0.000000,0.000000,0.630947 +2349,-0.776487,-0.000000,0.000000,0.630134 +2350,-0.777146,-0.000000,0.000000,0.629320 +2351,-0.777805,-0.000000,0.000000,0.628506 +2352,-0.778462,-0.000000,0.000000,0.627691 +2353,-0.779119,-0.000000,0.000000,0.626876 +2354,-0.779775,-0.000000,0.000000,0.626060 +2355,-0.780430,-0.000000,0.000000,0.625243 +2356,-0.781085,-0.000000,0.000000,0.624425 +2357,-0.781738,-0.000000,0.000000,0.623607 +2358,-0.782391,-0.000000,0.000000,0.622788 +2359,-0.783043,-0.000000,0.000000,0.621968 +2360,-0.783693,-0.000000,0.000000,0.621148 +2361,-0.784343,-0.000000,0.000000,0.620327 +2362,-0.784993,-0.000000,0.000000,0.619505 +2363,-0.785641,-0.000000,0.000000,0.618683 +2364,-0.786288,-0.000000,0.000000,0.617860 +2365,-0.786935,-0.000000,0.000000,0.617036 +2366,-0.787581,-0.000000,0.000000,0.616211 +2367,-0.788226,-0.000000,0.000000,0.615386 +2368,-0.788870,-0.000000,0.000000,0.614561 +2369,-0.789513,-0.000000,0.000000,0.613734 +2370,-0.790155,-0.000000,0.000000,0.612907 +2371,-0.790796,-0.000000,0.000000,0.612079 +2372,-0.791437,-0.000000,0.000000,0.611251 +2373,-0.792077,-0.000000,0.000000,0.610422 +2374,-0.792715,-0.000000,0.000000,0.609592 +2375,-0.793353,-0.000000,0.000000,0.608761 +2376,-0.793990,-0.000000,0.000000,0.607930 +2377,-0.794627,-0.000000,0.000000,0.607098 +2378,-0.795262,-0.000000,0.000000,0.606266 +2379,-0.795896,-0.000000,0.000000,0.605433 +2380,-0.796530,-0.000000,0.000000,0.604599 +2381,-0.797163,-0.000000,0.000000,0.603765 +2382,-0.797794,-0.000000,0.000000,0.602930 +2383,-0.798425,-0.000000,0.000000,0.602094 +2384,-0.799055,-0.000000,0.000000,0.601257 +2385,-0.799685,-0.000000,0.000000,0.600420 +2386,-0.800313,-0.000000,0.000000,0.599582 +2387,-0.800940,-0.000000,0.000000,0.598744 +2388,-0.801567,-0.000000,0.000000,0.597905 +2389,-0.802193,-0.000000,0.000000,0.597065 +2390,-0.802817,-0.000000,0.000000,0.596225 +2391,-0.803441,-0.000000,0.000000,0.595384 +2392,-0.804064,-0.000000,0.000000,0.594542 +2393,-0.804687,-0.000000,0.000000,0.593700 +2394,-0.805308,-0.000000,0.000000,0.592857 +2395,-0.805928,-0.000000,0.000000,0.592013 +2396,-0.806548,-0.000000,0.000000,0.591169 +2397,-0.807166,-0.000000,0.000000,0.590324 +2398,-0.807784,-0.000000,0.000000,0.589478 +2399,-0.808401,-0.000000,0.000000,0.588632 +2400,-0.809017,-0.000000,0.000000,0.587785 +2401,-0.809632,-0.000000,0.000000,0.586938 +2402,-0.810246,-0.000000,0.000000,0.586090 +2403,-0.810860,-0.000000,0.000000,0.585241 +2404,-0.811472,-0.000000,0.000000,0.584391 +2405,-0.812084,-0.000000,0.000000,0.583541 +2406,-0.812694,-0.000000,0.000000,0.582690 +2407,-0.813304,-0.000000,0.000000,0.581839 +2408,-0.813913,-0.000000,0.000000,0.580987 +2409,-0.814521,-0.000000,0.000000,0.580134 +2410,-0.815128,-0.000000,0.000000,0.579281 +2411,-0.815734,-0.000000,0.000000,0.578427 +2412,-0.816339,-0.000000,0.000000,0.577573 +2413,-0.816944,-0.000000,0.000000,0.576718 +2414,-0.817547,-0.000000,0.000000,0.575862 +2415,-0.818150,-0.000000,0.000000,0.575005 +2416,-0.818751,-0.000000,0.000000,0.574148 +2417,-0.819352,-0.000000,0.000000,0.573290 +2418,-0.819952,-0.000000,0.000000,0.572432 +2419,-0.820551,-0.000000,0.000000,0.571573 +2420,-0.821149,-0.000000,0.000000,0.570714 +2421,-0.821746,-0.000000,0.000000,0.569853 +2422,-0.822343,-0.000000,0.000000,0.568993 +2423,-0.822938,-0.000000,0.000000,0.568131 +2424,-0.823533,-0.000000,0.000000,0.567269 +2425,-0.824126,-0.000000,0.000000,0.566406 +2426,-0.824719,-0.000000,0.000000,0.565543 +2427,-0.825311,-0.000000,0.000000,0.564679 +2428,-0.825902,-0.000000,0.000000,0.563814 +2429,-0.826492,-0.000000,0.000000,0.562949 +2430,-0.827081,-0.000000,0.000000,0.562083 +2431,-0.827669,-0.000000,0.000000,0.561217 +2432,-0.828256,-0.000000,0.000000,0.560350 +2433,-0.828842,-0.000000,0.000000,0.559482 +2434,-0.829428,-0.000000,0.000000,0.558614 +2435,-0.830012,-0.000000,0.000000,0.557745 +2436,-0.830596,-0.000000,0.000000,0.556876 +2437,-0.831179,-0.000000,0.000000,0.556006 +2438,-0.831760,-0.000000,0.000000,0.555135 +2439,-0.832341,-0.000000,0.000000,0.554263 +2440,-0.832921,-0.000000,0.000000,0.553392 +2441,-0.833500,-0.000000,0.000000,0.552519 +2442,-0.834078,-0.000000,0.000000,0.551646 +2443,-0.834656,-0.000000,0.000000,0.550772 +2444,-0.835232,-0.000000,0.000000,0.549898 +2445,-0.835807,-0.000000,0.000000,0.549023 +2446,-0.836382,-0.000000,0.000000,0.548147 +2447,-0.836955,-0.000000,0.000000,0.547271 +2448,-0.837528,-0.000000,0.000000,0.546394 +2449,-0.838100,-0.000000,0.000000,0.545517 +2450,-0.838671,-0.000000,0.000000,0.544639 +2451,-0.839240,-0.000000,0.000000,0.543760 +2452,-0.839809,-0.000000,0.000000,0.542881 +2453,-0.840377,-0.000000,0.000000,0.542002 +2454,-0.840945,-0.000000,0.000000,0.541121 +2455,-0.841511,-0.000000,0.000000,0.540240 +2456,-0.842076,-0.000000,0.000000,0.539359 +2457,-0.842640,-0.000000,0.000000,0.538477 +2458,-0.843204,-0.000000,0.000000,0.537594 +2459,-0.843766,-0.000000,0.000000,0.536711 +2460,-0.844328,-0.000000,0.000000,0.535827 +2461,-0.844889,-0.000000,0.000000,0.534942 +2462,-0.845448,-0.000000,0.000000,0.534057 +2463,-0.846007,-0.000000,0.000000,0.533172 +2464,-0.846565,-0.000000,0.000000,0.532285 +2465,-0.847122,-0.000000,0.000000,0.531399 +2466,-0.847678,-0.000000,0.000000,0.530511 +2467,-0.848233,-0.000000,0.000000,0.529623 +2468,-0.848787,-0.000000,0.000000,0.528735 +2469,-0.849340,-0.000000,0.000000,0.527846 +2470,-0.849893,-0.000000,0.000000,0.526956 +2471,-0.850444,-0.000000,0.000000,0.526066 +2472,-0.850994,-0.000000,0.000000,0.525175 +2473,-0.851544,-0.000000,0.000000,0.524283 +2474,-0.852093,-0.000000,0.000000,0.523391 +2475,-0.852640,-0.000000,0.000000,0.522499 +2476,-0.853187,-0.000000,0.000000,0.521605 +2477,-0.853733,-0.000000,0.000000,0.520712 +2478,-0.854277,-0.000000,0.000000,0.519817 +2479,-0.854821,-0.000000,0.000000,0.518922 +2480,-0.855364,-0.000000,0.000000,0.518027 +2481,-0.855906,-0.000000,0.000000,0.517131 +2482,-0.856447,-0.000000,0.000000,0.516234 +2483,-0.856987,-0.000000,0.000000,0.515337 +2484,-0.857527,-0.000000,0.000000,0.514440 +2485,-0.858065,-0.000000,0.000000,0.513541 +2486,-0.858602,-0.000000,0.000000,0.512642 +2487,-0.859139,-0.000000,0.000000,0.511743 +2488,-0.859674,-0.000000,0.000000,0.510843 +2489,-0.860208,-0.000000,0.000000,0.509943 +2490,-0.860742,-0.000000,0.000000,0.509041 +2491,-0.861275,-0.000000,0.000000,0.508140 +2492,-0.861806,-0.000000,0.000000,0.507238 +2493,-0.862337,-0.000000,0.000000,0.506335 +2494,-0.862867,-0.000000,0.000000,0.505431 +2495,-0.863396,-0.000000,0.000000,0.504528 +2496,-0.863923,-0.000000,0.000000,0.503623 +2497,-0.864450,-0.000000,0.000000,0.502718 +2498,-0.864976,-0.000000,0.000000,0.501813 +2499,-0.865501,-0.000000,0.000000,0.500907 +2500,-0.866025,-0.000000,0.000000,0.500000 +2501,-0.866549,-0.000000,0.000000,0.499093 +2502,-0.867071,-0.000000,0.000000,0.498185 +2503,-0.867592,-0.000000,0.000000,0.497277 +2504,-0.868112,-0.000000,0.000000,0.496368 +2505,-0.868632,-0.000000,0.000000,0.495459 +2506,-0.869150,-0.000000,0.000000,0.494549 +2507,-0.869667,-0.000000,0.000000,0.493638 +2508,-0.870184,-0.000000,0.000000,0.492727 +2509,-0.870699,-0.000000,0.000000,0.491816 +2510,-0.871214,-0.000000,0.000000,0.490904 +2511,-0.871727,-0.000000,0.000000,0.489991 +2512,-0.872240,-0.000000,0.000000,0.489078 +2513,-0.872752,-0.000000,0.000000,0.488164 +2514,-0.873262,-0.000000,0.000000,0.487250 +2515,-0.873772,-0.000000,0.000000,0.486335 +2516,-0.874281,-0.000000,0.000000,0.485420 +2517,-0.874789,-0.000000,0.000000,0.484504 +2518,-0.875296,-0.000000,0.000000,0.483588 +2519,-0.875802,-0.000000,0.000000,0.482671 +2520,-0.876307,-0.000000,0.000000,0.481754 +2521,-0.876811,-0.000000,0.000000,0.480836 +2522,-0.877314,-0.000000,0.000000,0.479917 +2523,-0.877816,-0.000000,0.000000,0.478998 +2524,-0.878317,-0.000000,0.000000,0.478079 +2525,-0.878817,-0.000000,0.000000,0.477159 +2526,-0.879316,-0.000000,0.000000,0.476238 +2527,-0.879815,-0.000000,0.000000,0.475317 +2528,-0.880312,-0.000000,0.000000,0.474396 +2529,-0.880808,-0.000000,0.000000,0.473473 +2530,-0.881303,-0.000000,0.000000,0.472551 +2531,-0.881798,-0.000000,0.000000,0.471628 +2532,-0.882291,-0.000000,0.000000,0.470704 +2533,-0.882784,-0.000000,0.000000,0.469780 +2534,-0.883275,-0.000000,0.000000,0.468855 +2535,-0.883766,-0.000000,0.000000,0.467930 +2536,-0.884255,-0.000000,0.000000,0.467004 +2537,-0.884744,-0.000000,0.000000,0.466078 +2538,-0.885231,-0.000000,0.000000,0.465151 +2539,-0.885718,-0.000000,0.000000,0.464224 +2540,-0.886204,-0.000000,0.000000,0.463296 +2541,-0.886688,-0.000000,0.000000,0.462368 +2542,-0.887172,-0.000000,0.000000,0.461439 +2543,-0.887655,-0.000000,0.000000,0.460510 +2544,-0.888136,-0.000000,0.000000,0.459580 +2545,-0.888617,-0.000000,0.000000,0.458650 +2546,-0.889097,-0.000000,0.000000,0.457719 +2547,-0.889576,-0.000000,0.000000,0.456787 +2548,-0.890054,-0.000000,0.000000,0.455856 +2549,-0.890531,-0.000000,0.000000,0.454923 +2550,-0.891007,-0.000000,0.000000,0.453990 +2551,-0.891481,-0.000000,0.000000,0.453057 +2552,-0.891955,-0.000000,0.000000,0.452123 +2553,-0.892428,-0.000000,0.000000,0.451189 +2554,-0.892900,-0.000000,0.000000,0.450254 +2555,-0.893371,-0.000000,0.000000,0.449319 +2556,-0.893841,-0.000000,0.000000,0.448383 +2557,-0.894310,-0.000000,0.000000,0.447447 +2558,-0.894779,-0.000000,0.000000,0.446510 +2559,-0.895246,-0.000000,0.000000,0.445573 +2560,-0.895712,-0.000000,0.000000,0.444635 +2561,-0.896177,-0.000000,0.000000,0.443697 +2562,-0.896641,-0.000000,0.000000,0.442758 +2563,-0.897104,-0.000000,0.000000,0.441819 +2564,-0.897566,-0.000000,0.000000,0.440879 +2565,-0.898028,-0.000000,0.000000,0.439939 +2566,-0.898488,-0.000000,0.000000,0.438999 +2567,-0.898947,-0.000000,0.000000,0.438057 +2568,-0.899405,-0.000000,0.000000,0.437116 +2569,-0.899863,-0.000000,0.000000,0.436174 +2570,-0.900319,-0.000000,0.000000,0.435231 +2571,-0.900774,-0.000000,0.000000,0.434288 +2572,-0.901228,-0.000000,0.000000,0.433345 +2573,-0.901682,-0.000000,0.000000,0.432401 +2574,-0.902134,-0.000000,0.000000,0.431456 +2575,-0.902585,-0.000000,0.000000,0.430511 +2576,-0.903036,-0.000000,0.000000,0.429566 +2577,-0.903485,-0.000000,0.000000,0.428620 +2578,-0.903933,-0.000000,0.000000,0.427673 +2579,-0.904381,-0.000000,0.000000,0.426727 +2580,-0.904827,-0.000000,0.000000,0.425779 +2581,-0.905272,-0.000000,0.000000,0.424832 +2582,-0.905717,-0.000000,0.000000,0.423883 +2583,-0.906160,-0.000000,0.000000,0.422935 +2584,-0.906603,-0.000000,0.000000,0.421985 +2585,-0.907044,-0.000000,0.000000,0.421036 +2586,-0.907484,-0.000000,0.000000,0.420086 +2587,-0.907924,-0.000000,0.000000,0.419135 +2588,-0.908362,-0.000000,0.000000,0.418184 +2589,-0.908800,-0.000000,0.000000,0.417233 +2590,-0.909236,-0.000000,0.000000,0.416281 +2591,-0.909672,-0.000000,0.000000,0.415328 +2592,-0.910106,-0.000000,0.000000,0.414376 +2593,-0.910539,-0.000000,0.000000,0.413422 +2594,-0.910972,-0.000000,0.000000,0.412469 +2595,-0.911403,-0.000000,0.000000,0.411514 +2596,-0.911834,-0.000000,0.000000,0.410560 +2597,-0.912263,-0.000000,0.000000,0.409605 +2598,-0.912692,-0.000000,0.000000,0.408649 +2599,-0.913119,-0.000000,0.000000,0.407693 +2600,-0.913545,-0.000000,0.000000,0.406737 +2601,-0.913971,-0.000000,0.000000,0.405780 +2602,-0.914395,-0.000000,0.000000,0.404822 +2603,-0.914819,-0.000000,0.000000,0.403865 +2604,-0.915241,-0.000000,0.000000,0.402906 +2605,-0.915663,-0.000000,0.000000,0.401948 +2606,-0.916083,-0.000000,0.000000,0.400989 +2607,-0.916502,-0.000000,0.000000,0.400029 +2608,-0.916921,-0.000000,0.000000,0.399069 +2609,-0.917338,-0.000000,0.000000,0.398109 +2610,-0.917755,-0.000000,0.000000,0.397148 +2611,-0.918170,-0.000000,0.000000,0.396187 +2612,-0.918584,-0.000000,0.000000,0.395225 +2613,-0.918998,-0.000000,0.000000,0.394263 +2614,-0.919410,-0.000000,0.000000,0.393300 +2615,-0.919821,-0.000000,0.000000,0.392337 +2616,-0.920232,-0.000000,0.000000,0.391374 +2617,-0.920641,-0.000000,0.000000,0.390410 +2618,-0.921050,-0.000000,0.000000,0.389445 +2619,-0.921457,-0.000000,0.000000,0.388481 +2620,-0.921863,-0.000000,0.000000,0.387516 +2621,-0.922268,-0.000000,0.000000,0.386550 +2622,-0.922673,-0.000000,0.000000,0.385584 +2623,-0.923076,-0.000000,0.000000,0.384618 +2624,-0.923478,-0.000000,0.000000,0.383651 +2625,-0.923880,-0.000000,0.000000,0.382683 +2626,-0.924280,-0.000000,0.000000,0.381716 +2627,-0.924679,-0.000000,0.000000,0.380748 +2628,-0.925077,-0.000000,0.000000,0.379779 +2629,-0.925474,-0.000000,0.000000,0.378810 +2630,-0.925871,-0.000000,0.000000,0.377841 +2631,-0.926266,-0.000000,0.000000,0.376871 +2632,-0.926660,-0.000000,0.000000,0.375901 +2633,-0.927053,-0.000000,0.000000,0.374930 +2634,-0.927445,-0.000000,0.000000,0.373959 +2635,-0.927836,-0.000000,0.000000,0.372988 +2636,-0.928226,-0.000000,0.000000,0.372016 +2637,-0.928615,-0.000000,0.000000,0.371044 +2638,-0.929003,-0.000000,0.000000,0.370071 +2639,-0.929390,-0.000000,0.000000,0.369098 +2640,-0.929776,-0.000000,0.000000,0.368125 +2641,-0.930161,-0.000000,0.000000,0.367151 +2642,-0.930545,-0.000000,0.000000,0.366176 +2643,-0.930928,-0.000000,0.000000,0.365202 +2644,-0.931310,-0.000000,0.000000,0.364227 +2645,-0.931691,-0.000000,0.000000,0.363251 +2646,-0.932071,-0.000000,0.000000,0.362275 +2647,-0.932450,-0.000000,0.000000,0.361299 +2648,-0.932828,-0.000000,0.000000,0.360322 +2649,-0.933205,-0.000000,0.000000,0.359345 +2650,-0.933580,-0.000000,0.000000,0.358368 +2651,-0.933955,-0.000000,0.000000,0.357390 +2652,-0.934329,-0.000000,0.000000,0.356412 +2653,-0.934702,-0.000000,0.000000,0.355433 +2654,-0.935073,-0.000000,0.000000,0.354454 +2655,-0.935444,-0.000000,0.000000,0.353475 +2656,-0.935814,-0.000000,0.000000,0.352495 +2657,-0.936182,-0.000000,0.000000,0.351515 +2658,-0.936550,-0.000000,0.000000,0.350534 +2659,-0.936916,-0.000000,0.000000,0.349553 +2660,-0.937282,-0.000000,0.000000,0.348572 +2661,-0.937646,-0.000000,0.000000,0.347590 +2662,-0.938010,-0.000000,0.000000,0.346608 +2663,-0.938372,-0.000000,0.000000,0.345626 +2664,-0.938734,-0.000000,0.000000,0.344643 +2665,-0.939094,-0.000000,0.000000,0.343660 +2666,-0.939454,-0.000000,0.000000,0.342676 +2667,-0.939812,-0.000000,0.000000,0.341692 +2668,-0.940169,-0.000000,0.000000,0.340708 +2669,-0.940526,-0.000000,0.000000,0.339723 +2670,-0.940881,-0.000000,0.000000,0.338738 +2671,-0.941235,-0.000000,0.000000,0.337752 +2672,-0.941588,-0.000000,0.000000,0.336767 +2673,-0.941940,-0.000000,0.000000,0.335780 +2674,-0.942291,-0.000000,0.000000,0.334794 +2675,-0.942641,-0.000000,0.000000,0.333807 +2676,-0.942991,-0.000000,0.000000,0.332820 +2677,-0.943339,-0.000000,0.000000,0.331832 +2678,-0.943686,-0.000000,0.000000,0.330844 +2679,-0.944031,-0.000000,0.000000,0.329855 +2680,-0.944376,-0.000000,0.000000,0.328867 +2681,-0.944720,-0.000000,0.000000,0.327878 +2682,-0.945063,-0.000000,0.000000,0.326888 +2683,-0.945405,-0.000000,0.000000,0.325898 +2684,-0.945746,-0.000000,0.000000,0.324908 +2685,-0.946085,-0.000000,0.000000,0.323917 +2686,-0.946424,-0.000000,0.000000,0.322927 +2687,-0.946762,-0.000000,0.000000,0.321935 +2688,-0.947098,-0.000000,0.000000,0.320944 +2689,-0.947434,-0.000000,0.000000,0.319952 +2690,-0.947768,-0.000000,0.000000,0.318959 +2691,-0.948102,-0.000000,0.000000,0.317967 +2692,-0.948434,-0.000000,0.000000,0.316974 +2693,-0.948766,-0.000000,0.000000,0.315980 +2694,-0.949096,-0.000000,0.000000,0.314987 +2695,-0.949425,-0.000000,0.000000,0.313992 +2696,-0.949754,-0.000000,0.000000,0.312998 +2697,-0.950081,-0.000000,0.000000,0.312003 +2698,-0.950407,-0.000000,0.000000,0.311008 +2699,-0.950732,-0.000000,0.000000,0.310013 +2700,-0.951057,-0.000000,0.000000,0.309017 +2701,-0.951380,-0.000000,0.000000,0.308021 +2702,-0.951702,-0.000000,0.000000,0.307024 +2703,-0.952023,-0.000000,0.000000,0.306028 +2704,-0.952343,-0.000000,0.000000,0.305031 +2705,-0.952661,-0.000000,0.000000,0.304033 +2706,-0.952979,-0.000000,0.000000,0.303035 +2707,-0.953296,-0.000000,0.000000,0.302037 +2708,-0.953612,-0.000000,0.000000,0.301039 +2709,-0.953927,-0.000000,0.000000,0.300040 +2710,-0.954240,-0.000000,0.000000,0.299041 +2711,-0.954553,-0.000000,0.000000,0.298041 +2712,-0.954865,-0.000000,0.000000,0.297042 +2713,-0.955175,-0.000000,0.000000,0.296041 +2714,-0.955485,-0.000000,0.000000,0.295041 +2715,-0.955793,-0.000000,0.000000,0.294040 +2716,-0.956100,-0.000000,0.000000,0.293039 +2717,-0.956407,-0.000000,0.000000,0.292038 +2718,-0.956712,-0.000000,0.000000,0.291036 +2719,-0.957016,-0.000000,0.000000,0.290034 +2720,-0.957319,-0.000000,0.000000,0.289032 +2721,-0.957622,-0.000000,0.000000,0.288029 +2722,-0.957923,-0.000000,0.000000,0.287026 +2723,-0.958223,-0.000000,0.000000,0.286023 +2724,-0.958522,-0.000000,0.000000,0.285019 +2725,-0.958820,-0.000000,0.000000,0.284015 +2726,-0.959117,-0.000000,0.000000,0.283011 +2727,-0.959412,-0.000000,0.000000,0.282007 +2728,-0.959707,-0.000000,0.000000,0.281002 +2729,-0.960001,-0.000000,0.000000,0.279997 +2730,-0.960294,-0.000000,0.000000,0.278991 +2731,-0.960585,-0.000000,0.000000,0.277985 +2732,-0.960876,-0.000000,0.000000,0.276979 +2733,-0.961165,-0.000000,0.000000,0.275973 +2734,-0.961454,-0.000000,0.000000,0.274966 +2735,-0.961741,-0.000000,0.000000,0.273959 +2736,-0.962028,-0.000000,0.000000,0.272952 +2737,-0.962313,-0.000000,0.000000,0.271944 +2738,-0.962597,-0.000000,0.000000,0.270936 +2739,-0.962880,-0.000000,0.000000,0.269928 +2740,-0.963163,-0.000000,0.000000,0.268920 +2741,-0.963444,-0.000000,0.000000,0.267911 +2742,-0.963724,-0.000000,0.000000,0.266902 +2743,-0.964003,-0.000000,0.000000,0.265893 +2744,-0.964281,-0.000000,0.000000,0.264883 +2745,-0.964557,-0.000000,0.000000,0.263873 +2746,-0.964833,-0.000000,0.000000,0.262863 +2747,-0.965108,-0.000000,0.000000,0.261852 +2748,-0.965382,-0.000000,0.000000,0.260842 +2749,-0.965654,-0.000000,0.000000,0.259830 +2750,-0.965926,-0.000000,0.000000,0.258819 +2751,-0.966196,-0.000000,0.000000,0.257807 +2752,-0.966466,-0.000000,0.000000,0.256795 +2753,-0.966734,-0.000000,0.000000,0.255783 +2754,-0.967001,-0.000000,0.000000,0.254771 +2755,-0.967268,-0.000000,0.000000,0.253758 +2756,-0.967533,-0.000000,0.000000,0.252745 +2757,-0.967797,-0.000000,0.000000,0.251732 +2758,-0.968060,-0.000000,0.000000,0.250718 +2759,-0.968322,-0.000000,0.000000,0.249704 +2760,-0.968583,-0.000000,0.000000,0.248690 +2761,-0.968843,-0.000000,0.000000,0.247675 +2762,-0.969102,-0.000000,0.000000,0.246661 +2763,-0.969360,-0.000000,0.000000,0.245646 +2764,-0.969616,-0.000000,0.000000,0.244631 +2765,-0.969872,-0.000000,0.000000,0.243615 +2766,-0.970127,-0.000000,0.000000,0.242599 +2767,-0.970380,-0.000000,0.000000,0.241583 +2768,-0.970633,-0.000000,0.000000,0.240567 +2769,-0.970884,-0.000000,0.000000,0.239550 +2770,-0.971134,-0.000000,0.000000,0.238533 +2771,-0.971384,-0.000000,0.000000,0.237516 +2772,-0.971632,-0.000000,0.000000,0.236499 +2773,-0.971879,-0.000000,0.000000,0.235481 +2774,-0.972125,-0.000000,0.000000,0.234463 +2775,-0.972370,-0.000000,0.000000,0.233445 +2776,-0.972614,-0.000000,0.000000,0.232427 +2777,-0.972857,-0.000000,0.000000,0.231408 +2778,-0.973099,-0.000000,0.000000,0.230389 +2779,-0.973339,-0.000000,0.000000,0.229370 +2780,-0.973579,-0.000000,0.000000,0.228351 +2781,-0.973817,-0.000000,0.000000,0.227331 +2782,-0.974055,-0.000000,0.000000,0.226311 +2783,-0.974291,-0.000000,0.000000,0.225291 +2784,-0.974527,-0.000000,0.000000,0.224271 +2785,-0.974761,-0.000000,0.000000,0.223250 +2786,-0.974994,-0.000000,0.000000,0.222229 +2787,-0.975227,-0.000000,0.000000,0.221208 +2788,-0.975458,-0.000000,0.000000,0.220187 +2789,-0.975688,-0.000000,0.000000,0.219165 +2790,-0.975917,-0.000000,0.000000,0.218143 +2791,-0.976145,-0.000000,0.000000,0.217121 +2792,-0.976371,-0.000000,0.000000,0.216099 +2793,-0.976597,-0.000000,0.000000,0.215076 +2794,-0.976822,-0.000000,0.000000,0.214053 +2795,-0.977046,-0.000000,0.000000,0.213030 +2796,-0.977268,-0.000000,0.000000,0.212007 +2797,-0.977490,-0.000000,0.000000,0.210984 +2798,-0.977710,-0.000000,0.000000,0.209960 +2799,-0.977929,-0.000000,0.000000,0.208936 +2800,-0.978148,-0.000000,0.000000,0.207912 +2801,-0.978365,-0.000000,0.000000,0.206887 +2802,-0.978581,-0.000000,0.000000,0.205863 +2803,-0.978796,-0.000000,0.000000,0.204838 +2804,-0.979010,-0.000000,0.000000,0.203813 +2805,-0.979223,-0.000000,0.000000,0.202787 +2806,-0.979435,-0.000000,0.000000,0.201762 +2807,-0.979645,-0.000000,0.000000,0.200736 +2808,-0.979855,-0.000000,0.000000,0.199710 +2809,-0.980064,-0.000000,0.000000,0.198684 +2810,-0.980271,-0.000000,0.000000,0.197657 +2811,-0.980478,-0.000000,0.000000,0.196631 +2812,-0.980683,-0.000000,0.000000,0.195604 +2813,-0.980887,-0.000000,0.000000,0.194577 +2814,-0.981091,-0.000000,0.000000,0.193549 +2815,-0.981293,-0.000000,0.000000,0.192522 +2816,-0.981494,-0.000000,0.000000,0.191494 +2817,-0.981694,-0.000000,0.000000,0.190466 +2818,-0.981893,-0.000000,0.000000,0.189438 +2819,-0.982090,-0.000000,0.000000,0.188410 +2820,-0.982287,-0.000000,0.000000,0.187381 +2821,-0.982483,-0.000000,0.000000,0.186353 +2822,-0.982678,-0.000000,0.000000,0.185324 +2823,-0.982871,-0.000000,0.000000,0.184294 +2824,-0.983064,-0.000000,0.000000,0.183265 +2825,-0.983255,-0.000000,0.000000,0.182236 +2826,-0.983445,-0.000000,0.000000,0.181206 +2827,-0.983634,-0.000000,0.000000,0.180176 +2828,-0.983823,-0.000000,0.000000,0.179146 +2829,-0.984010,-0.000000,0.000000,0.178115 +2830,-0.984196,-0.000000,0.000000,0.177085 +2831,-0.984381,-0.000000,0.000000,0.176054 +2832,-0.984564,-0.000000,0.000000,0.175023 +2833,-0.984747,-0.000000,0.000000,0.173992 +2834,-0.984929,-0.000000,0.000000,0.172961 +2835,-0.985109,-0.000000,0.000000,0.171929 +2836,-0.985289,-0.000000,0.000000,0.170897 +2837,-0.985467,-0.000000,0.000000,0.169866 +2838,-0.985645,-0.000000,0.000000,0.168833 +2839,-0.985821,-0.000000,0.000000,0.167801 +2840,-0.985996,-0.000000,0.000000,0.166769 +2841,-0.986170,-0.000000,0.000000,0.165736 +2842,-0.986343,-0.000000,0.000000,0.164703 +2843,-0.986515,-0.000000,0.000000,0.163670 +2844,-0.986686,-0.000000,0.000000,0.162637 +2845,-0.986856,-0.000000,0.000000,0.161604 +2846,-0.987024,-0.000000,0.000000,0.160570 +2847,-0.987192,-0.000000,0.000000,0.159537 +2848,-0.987359,-0.000000,0.000000,0.158503 +2849,-0.987524,-0.000000,0.000000,0.157469 +2850,-0.987688,-0.000000,0.000000,0.156434 +2851,-0.987852,-0.000000,0.000000,0.155400 +2852,-0.988014,-0.000000,0.000000,0.154366 +2853,-0.988175,-0.000000,0.000000,0.153331 +2854,-0.988335,-0.000000,0.000000,0.152296 +2855,-0.988494,-0.000000,0.000000,0.151261 +2856,-0.988652,-0.000000,0.000000,0.150226 +2857,-0.988809,-0.000000,0.000000,0.149190 +2858,-0.988964,-0.000000,0.000000,0.148155 +2859,-0.989119,-0.000000,0.000000,0.147119 +2860,-0.989272,-0.000000,0.000000,0.146083 +2861,-0.989425,-0.000000,0.000000,0.145047 +2862,-0.989576,-0.000000,0.000000,0.144011 +2863,-0.989726,-0.000000,0.000000,0.142974 +2864,-0.989876,-0.000000,0.000000,0.141938 +2865,-0.990024,-0.000000,0.000000,0.140901 +2866,-0.990171,-0.000000,0.000000,0.139864 +2867,-0.990317,-0.000000,0.000000,0.138827 +2868,-0.990461,-0.000000,0.000000,0.137790 +2869,-0.990605,-0.000000,0.000000,0.136753 +2870,-0.990748,-0.000000,0.000000,0.135716 +2871,-0.990889,-0.000000,0.000000,0.134678 +2872,-0.991030,-0.000000,0.000000,0.133640 +2873,-0.991169,-0.000000,0.000000,0.132602 +2874,-0.991308,-0.000000,0.000000,0.131564 +2875,-0.991445,-0.000000,0.000000,0.130526 +2876,-0.991581,-0.000000,0.000000,0.129488 +2877,-0.991716,-0.000000,0.000000,0.128449 +2878,-0.991850,-0.000000,0.000000,0.127411 +2879,-0.991983,-0.000000,0.000000,0.126372 +2880,-0.992115,-0.000000,0.000000,0.125333 +2881,-0.992245,-0.000000,0.000000,0.124294 +2882,-0.992375,-0.000000,0.000000,0.123255 +2883,-0.992504,-0.000000,0.000000,0.122216 +2884,-0.992631,-0.000000,0.000000,0.121176 +2885,-0.992757,-0.000000,0.000000,0.120137 +2886,-0.992883,-0.000000,0.000000,0.119097 +2887,-0.993007,-0.000000,0.000000,0.118057 +2888,-0.993130,-0.000000,0.000000,0.117017 +2889,-0.993252,-0.000000,0.000000,0.115977 +2890,-0.993373,-0.000000,0.000000,0.114937 +2891,-0.993493,-0.000000,0.000000,0.113897 +2892,-0.993611,-0.000000,0.000000,0.112856 +2893,-0.993729,-0.000000,0.000000,0.111816 +2894,-0.993845,-0.000000,0.000000,0.110775 +2895,-0.993961,-0.000000,0.000000,0.109734 +2896,-0.994075,-0.000000,0.000000,0.108693 +2897,-0.994189,-0.000000,0.000000,0.107652 +2898,-0.994301,-0.000000,0.000000,0.106611 +2899,-0.994412,-0.000000,0.000000,0.105570 +2900,-0.994522,-0.000000,0.000000,0.104528 +2901,-0.994631,-0.000000,0.000000,0.103487 +2902,-0.994739,-0.000000,0.000000,0.102445 +2903,-0.994845,-0.000000,0.000000,0.101404 +2904,-0.994951,-0.000000,0.000000,0.100362 +2905,-0.995056,-0.000000,0.000000,0.099320 +2906,-0.995159,-0.000000,0.000000,0.098278 +2907,-0.995261,-0.000000,0.000000,0.097235 +2908,-0.995363,-0.000000,0.000000,0.096193 +2909,-0.995463,-0.000000,0.000000,0.095151 +2910,-0.995562,-0.000000,0.000000,0.094108 +2911,-0.995660,-0.000000,0.000000,0.093066 +2912,-0.995757,-0.000000,0.000000,0.092023 +2913,-0.995853,-0.000000,0.000000,0.090980 +2914,-0.995947,-0.000000,0.000000,0.089937 +2915,-0.996041,-0.000000,0.000000,0.088894 +2916,-0.996134,-0.000000,0.000000,0.087851 +2917,-0.996225,-0.000000,0.000000,0.086808 +2918,-0.996315,-0.000000,0.000000,0.085765 +2919,-0.996405,-0.000000,0.000000,0.084721 +2920,-0.996493,-0.000000,0.000000,0.083678 +2921,-0.996580,-0.000000,0.000000,0.082634 +2922,-0.996666,-0.000000,0.000000,0.081591 +2923,-0.996751,-0.000000,0.000000,0.080547 +2924,-0.996835,-0.000000,0.000000,0.079503 +2925,-0.996917,-0.000000,0.000000,0.078459 +2926,-0.996999,-0.000000,0.000000,0.077415 +2927,-0.997079,-0.000000,0.000000,0.076371 +2928,-0.997159,-0.000000,0.000000,0.075327 +2929,-0.997237,-0.000000,0.000000,0.074283 +2930,-0.997314,-0.000000,0.000000,0.073238 +2931,-0.997391,-0.000000,0.000000,0.072194 +2932,-0.997466,-0.000000,0.000000,0.071149 +2933,-0.997540,-0.000000,0.000000,0.070105 +2934,-0.997613,-0.000000,0.000000,0.069060 +2935,-0.997684,-0.000000,0.000000,0.068015 +2936,-0.997755,-0.000000,0.000000,0.066970 +2937,-0.997825,-0.000000,0.000000,0.065926 +2938,-0.997893,-0.000000,0.000000,0.064881 +2939,-0.997960,-0.000000,0.000000,0.063836 +2940,-0.998027,-0.000000,0.000000,0.062791 +2941,-0.998092,-0.000000,0.000000,0.061745 +2942,-0.998156,-0.000000,0.000000,0.060700 +2943,-0.998219,-0.000000,0.000000,0.059655 +2944,-0.998281,-0.000000,0.000000,0.058609 +2945,-0.998342,-0.000000,0.000000,0.057564 +2946,-0.998402,-0.000000,0.000000,0.056519 +2947,-0.998460,-0.000000,0.000000,0.055473 +2948,-0.998518,-0.000000,0.000000,0.054427 +2949,-0.998574,-0.000000,0.000000,0.053382 +2950,-0.998630,-0.000000,0.000000,0.052336 +2951,-0.998684,-0.000000,0.000000,0.051290 +2952,-0.998737,-0.000000,0.000000,0.050244 +2953,-0.998789,-0.000000,0.000000,0.049198 +2954,-0.998840,-0.000000,0.000000,0.048152 +2955,-0.998890,-0.000000,0.000000,0.047106 +2956,-0.998939,-0.000000,0.000000,0.046060 +2957,-0.998986,-0.000000,0.000000,0.045014 +2958,-0.999033,-0.000000,0.000000,0.043968 +2959,-0.999078,-0.000000,0.000000,0.042922 +2960,-0.999123,-0.000000,0.000000,0.041876 +2961,-0.999166,-0.000000,0.000000,0.040829 +2962,-0.999208,-0.000000,0.000000,0.039783 +2963,-0.999249,-0.000000,0.000000,0.038737 +2964,-0.999289,-0.000000,0.000000,0.037690 +2965,-0.999328,-0.000000,0.000000,0.036644 +2966,-0.999366,-0.000000,0.000000,0.035597 +2967,-0.999403,-0.000000,0.000000,0.034551 +2968,-0.999439,-0.000000,0.000000,0.033504 +2969,-0.999473,-0.000000,0.000000,0.032457 +2970,-0.999507,-0.000000,0.000000,0.031411 +2971,-0.999539,-0.000000,0.000000,0.030364 +2972,-0.999570,-0.000000,0.000000,0.029317 +2973,-0.999600,-0.000000,0.000000,0.028271 +2974,-0.999629,-0.000000,0.000000,0.027224 +2975,-0.999657,-0.000000,0.000000,0.026177 +2976,-0.999684,-0.000000,0.000000,0.025130 +2977,-0.999710,-0.000000,0.000000,0.024083 +2978,-0.999735,-0.000000,0.000000,0.023036 +2979,-0.999758,-0.000000,0.000000,0.021989 +2980,-0.999781,-0.000000,0.000000,0.020942 +2981,-0.999802,-0.000000,0.000000,0.019895 +2982,-0.999822,-0.000000,0.000000,0.018848 +2983,-0.999842,-0.000000,0.000000,0.017801 +2984,-0.999860,-0.000000,0.000000,0.016754 +2985,-0.999877,-0.000000,0.000000,0.015707 +2986,-0.999893,-0.000000,0.000000,0.014660 +2987,-0.999907,-0.000000,0.000000,0.013613 +2988,-0.999921,-0.000000,0.000000,0.012566 +2989,-0.999934,-0.000000,0.000000,0.011519 +2990,-0.999945,-0.000000,0.000000,0.010472 +2991,-0.999956,-0.000000,0.000000,0.009425 +2992,-0.999965,-0.000000,0.000000,0.008377 +2993,-0.999973,-0.000000,0.000000,0.007330 +2994,-0.999980,-0.000000,0.000000,0.006283 +2995,-0.999986,-0.000000,0.000000,0.005236 +2996,-0.999991,-0.000000,0.000000,0.004189 +2997,-0.999995,-0.000000,0.000000,0.003142 +2998,-0.999998,-0.000000,0.000000,0.002094 +2999,-0.999999,-0.000000,0.000000,0.001047 diff --git a/scripts/trajectories/half-circle-front-over-top-15s.csv b/scripts/trajectories/half-circle-front-over-top-15s.csv new file mode 100644 index 0000000000..850b3feed6 --- /dev/null +++ b/scripts/trajectories/half-circle-front-over-top-15s.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 1.000000, 0.000524, 0.000000, 0.000000 +2, 0.999999, 0.001048, 0.000000, 0.000000 +3, 0.999999, 0.001571, 0.000000, 0.000000 +4, 0.999998, 0.002095, 0.000000, 0.000000 +5, 0.999997, 0.002619, 0.000000, 0.000000 +6, 0.999995, 0.003143, 0.000000, 0.000000 +7, 0.999993, 0.003666, 0.000000, 0.000000 +8, 0.999991, 0.004190, 0.000000, 0.000000 +9, 0.999989, 0.004714, 0.000000, 0.000000 +10, 0.999986, 0.005238, 0.000000, 0.000000 +11, 0.999983, 0.005761, 0.000000, 0.000000 +12, 0.999980, 0.006285, 0.000000, 0.000000 +13, 0.999977, 0.006809, 0.000000, 0.000000 +14, 0.999973, 0.007333, 0.000000, 0.000000 +15, 0.999969, 0.007857, 0.000000, 0.000000 +16, 0.999965, 0.008380, 0.000000, 0.000000 +17, 0.999960, 0.008904, 0.000000, 0.000000 +18, 0.999956, 0.009428, 0.000000, 0.000000 +19, 0.999950, 0.009952, 0.000000, 0.000000 +20, 0.999945, 0.010475, 0.000000, 0.000000 +21, 0.999940, 0.010999, 0.000000, 0.000000 +22, 0.999934, 0.011523, 0.000000, 0.000000 +23, 0.999927, 0.012046, 0.000000, 0.000000 +24, 0.999921, 0.012570, 0.000000, 0.000000 +25, 0.999914, 0.013094, 0.000000, 0.000000 +26, 0.999907, 0.013618, 0.000000, 0.000000 +27, 0.999900, 0.014141, 0.000000, 0.000000 +28, 0.999892, 0.014665, 0.000000, 0.000000 +29, 0.999885, 0.015189, 0.000000, 0.000000 +30, 0.999877, 0.015713, 0.000000, 0.000000 +31, 0.999868, 0.016236, 0.000000, 0.000000 +32, 0.999860, 0.016760, 0.000000, 0.000000 +33, 0.999851, 0.017284, 0.000000, 0.000000 +34, 0.999841, 0.017807, 0.000000, 0.000000 +35, 0.999832, 0.018331, 0.000000, 0.000000 +36, 0.999822, 0.018855, 0.000000, 0.000000 +37, 0.999812, 0.019378, 0.000000, 0.000000 +38, 0.999802, 0.019902, 0.000000, 0.000000 +39, 0.999791, 0.020426, 0.000000, 0.000000 +40, 0.999781, 0.020949, 0.000000, 0.000000 +41, 0.999769, 0.021473, 0.000000, 0.000000 +42, 0.999758, 0.021997, 0.000000, 0.000000 +43, 0.999746, 0.022520, 0.000000, 0.000000 +44, 0.999734, 0.023044, 0.000000, 0.000000 +45, 0.999722, 0.023568, 0.000000, 0.000000 +46, 0.999710, 0.024091, 0.000000, 0.000000 +47, 0.999697, 0.024615, 0.000000, 0.000000 +48, 0.999684, 0.025138, 0.000000, 0.000000 +49, 0.999671, 0.025662, 0.000000, 0.000000 +50, 0.999657, 0.026186, 0.000000, 0.000000 +51, 0.999643, 0.026709, 0.000000, 0.000000 +52, 0.999629, 0.027233, 0.000000, 0.000000 +53, 0.999615, 0.027756, 0.000000, 0.000000 +54, 0.999600, 0.028280, 0.000000, 0.000000 +55, 0.999585, 0.028804, 0.000000, 0.000000 +56, 0.999570, 0.029327, 0.000000, 0.000000 +57, 0.999554, 0.029851, 0.000000, 0.000000 +58, 0.999539, 0.030374, 0.000000, 0.000000 +59, 0.999523, 0.030898, 0.000000, 0.000000 +60, 0.999506, 0.031421, 0.000000, 0.000000 +61, 0.999490, 0.031945, 0.000000, 0.000000 +62, 0.999473, 0.032468, 0.000000, 0.000000 +63, 0.999456, 0.032992, 0.000000, 0.000000 +64, 0.999438, 0.033515, 0.000000, 0.000000 +65, 0.999421, 0.034039, 0.000000, 0.000000 +66, 0.999403, 0.034562, 0.000000, 0.000000 +67, 0.999384, 0.035086, 0.000000, 0.000000 +68, 0.999366, 0.035609, 0.000000, 0.000000 +69, 0.999347, 0.036132, 0.000000, 0.000000 +70, 0.999328, 0.036656, 0.000000, 0.000000 +71, 0.999309, 0.037179, 0.000000, 0.000000 +72, 0.999289, 0.037703, 0.000000, 0.000000 +73, 0.999269, 0.038226, 0.000000, 0.000000 +74, 0.999249, 0.038750, 0.000000, 0.000000 +75, 0.999229, 0.039273, 0.000000, 0.000000 +76, 0.999208, 0.039796, 0.000000, 0.000000 +77, 0.999187, 0.040320, 0.000000, 0.000000 +78, 0.999166, 0.040843, 0.000000, 0.000000 +79, 0.999144, 0.041366, 0.000000, 0.000000 +80, 0.999122, 0.041890, 0.000000, 0.000000 +81, 0.999100, 0.042413, 0.000000, 0.000000 +82, 0.999078, 0.042936, 0.000000, 0.000000 +83, 0.999055, 0.043459, 0.000000, 0.000000 +84, 0.999032, 0.043983, 0.000000, 0.000000 +85, 0.999009, 0.044506, 0.000000, 0.000000 +86, 0.998986, 0.045029, 0.000000, 0.000000 +87, 0.998962, 0.045553, 0.000000, 0.000000 +88, 0.998938, 0.046076, 0.000000, 0.000000 +89, 0.998914, 0.046599, 0.000000, 0.000000 +90, 0.998889, 0.047122, 0.000000, 0.000000 +91, 0.998864, 0.047645, 0.000000, 0.000000 +92, 0.998839, 0.048169, 0.000000, 0.000000 +93, 0.998814, 0.048692, 0.000000, 0.000000 +94, 0.998788, 0.049215, 0.000000, 0.000000 +95, 0.998762, 0.049738, 0.000000, 0.000000 +96, 0.998736, 0.050261, 0.000000, 0.000000 +97, 0.998710, 0.050784, 0.000000, 0.000000 +98, 0.998683, 0.051307, 0.000000, 0.000000 +99, 0.998656, 0.051830, 0.000000, 0.000000 +100, 0.998629, 0.052353, 0.000000, 0.000000 +101, 0.998601, 0.052876, 0.000000, 0.000000 +102, 0.998573, 0.053399, 0.000000, 0.000000 +103, 0.998545, 0.053922, 0.000000, 0.000000 +104, 0.998517, 0.054445, 0.000000, 0.000000 +105, 0.998488, 0.054968, 0.000000, 0.000000 +106, 0.998459, 0.055491, 0.000000, 0.000000 +107, 0.998430, 0.056014, 0.000000, 0.000000 +108, 0.998400, 0.056537, 0.000000, 0.000000 +109, 0.998371, 0.057060, 0.000000, 0.000000 +110, 0.998341, 0.057583, 0.000000, 0.000000 +111, 0.998310, 0.058106, 0.000000, 0.000000 +112, 0.998280, 0.058629, 0.000000, 0.000000 +113, 0.998249, 0.059152, 0.000000, 0.000000 +114, 0.998218, 0.059675, 0.000000, 0.000000 +115, 0.998186, 0.060198, 0.000000, 0.000000 +116, 0.998155, 0.060720, 0.000000, 0.000000 +117, 0.998123, 0.061243, 0.000000, 0.000000 +118, 0.998091, 0.061766, 0.000000, 0.000000 +119, 0.998058, 0.062289, 0.000000, 0.000000 +120, 0.998025, 0.062811, 0.000000, 0.000000 +121, 0.997992, 0.063334, 0.000000, 0.000000 +122, 0.997959, 0.063857, 0.000000, 0.000000 +123, 0.997925, 0.064380, 0.000000, 0.000000 +124, 0.997892, 0.064902, 0.000000, 0.000000 +125, 0.997857, 0.065425, 0.000000, 0.000000 +126, 0.997823, 0.065948, 0.000000, 0.000000 +127, 0.997788, 0.066470, 0.000000, 0.000000 +128, 0.997753, 0.066993, 0.000000, 0.000000 +129, 0.997718, 0.067515, 0.000000, 0.000000 +130, 0.997683, 0.068038, 0.000000, 0.000000 +131, 0.997647, 0.068560, 0.000000, 0.000000 +132, 0.997611, 0.069083, 0.000000, 0.000000 +133, 0.997575, 0.069606, 0.000000, 0.000000 +134, 0.997538, 0.070128, 0.000000, 0.000000 +135, 0.997501, 0.070650, 0.000000, 0.000000 +136, 0.997464, 0.071173, 0.000000, 0.000000 +137, 0.997427, 0.071695, 0.000000, 0.000000 +138, 0.997389, 0.072218, 0.000000, 0.000000 +139, 0.997351, 0.072740, 0.000000, 0.000000 +140, 0.997313, 0.073263, 0.000000, 0.000000 +141, 0.997274, 0.073785, 0.000000, 0.000000 +142, 0.997235, 0.074307, 0.000000, 0.000000 +143, 0.997196, 0.074830, 0.000000, 0.000000 +144, 0.997157, 0.075352, 0.000000, 0.000000 +145, 0.997117, 0.075874, 0.000000, 0.000000 +146, 0.997078, 0.076396, 0.000000, 0.000000 +147, 0.997037, 0.076919, 0.000000, 0.000000 +148, 0.996997, 0.077441, 0.000000, 0.000000 +149, 0.996956, 0.077963, 0.000000, 0.000000 +150, 0.996915, 0.078485, 0.000000, 0.000000 +151, 0.996874, 0.079007, 0.000000, 0.000000 +152, 0.996833, 0.079529, 0.000000, 0.000000 +153, 0.996791, 0.080052, 0.000000, 0.000000 +154, 0.996749, 0.080574, 0.000000, 0.000000 +155, 0.996706, 0.081096, 0.000000, 0.000000 +156, 0.996664, 0.081618, 0.000000, 0.000000 +157, 0.996621, 0.082140, 0.000000, 0.000000 +158, 0.996578, 0.082662, 0.000000, 0.000000 +159, 0.996534, 0.083184, 0.000000, 0.000000 +160, 0.996491, 0.083706, 0.000000, 0.000000 +161, 0.996447, 0.084228, 0.000000, 0.000000 +162, 0.996402, 0.084750, 0.000000, 0.000000 +163, 0.996358, 0.085271, 0.000000, 0.000000 +164, 0.996313, 0.085793, 0.000000, 0.000000 +165, 0.996268, 0.086315, 0.000000, 0.000000 +166, 0.996223, 0.086837, 0.000000, 0.000000 +167, 0.996177, 0.087359, 0.000000, 0.000000 +168, 0.996131, 0.087880, 0.000000, 0.000000 +169, 0.996085, 0.088402, 0.000000, 0.000000 +170, 0.996038, 0.088924, 0.000000, 0.000000 +171, 0.995992, 0.089446, 0.000000, 0.000000 +172, 0.995945, 0.089967, 0.000000, 0.000000 +173, 0.995897, 0.090489, 0.000000, 0.000000 +174, 0.995850, 0.091010, 0.000000, 0.000000 +175, 0.995802, 0.091532, 0.000000, 0.000000 +176, 0.995754, 0.092054, 0.000000, 0.000000 +177, 0.995706, 0.092575, 0.000000, 0.000000 +178, 0.995657, 0.093097, 0.000000, 0.000000 +179, 0.995608, 0.093618, 0.000000, 0.000000 +180, 0.995559, 0.094140, 0.000000, 0.000000 +181, 0.995510, 0.094661, 0.000000, 0.000000 +182, 0.995460, 0.095182, 0.000000, 0.000000 +183, 0.995410, 0.095704, 0.000000, 0.000000 +184, 0.995360, 0.096225, 0.000000, 0.000000 +185, 0.995309, 0.096747, 0.000000, 0.000000 +186, 0.995258, 0.097268, 0.000000, 0.000000 +187, 0.995207, 0.097789, 0.000000, 0.000000 +188, 0.995156, 0.098310, 0.000000, 0.000000 +189, 0.995104, 0.098832, 0.000000, 0.000000 +190, 0.995052, 0.099353, 0.000000, 0.000000 +191, 0.995000, 0.099874, 0.000000, 0.000000 +192, 0.994948, 0.100395, 0.000000, 0.000000 +193, 0.994895, 0.100916, 0.000000, 0.000000 +194, 0.994842, 0.101437, 0.000000, 0.000000 +195, 0.994789, 0.101958, 0.000000, 0.000000 +196, 0.994735, 0.102479, 0.000000, 0.000000 +197, 0.994681, 0.103000, 0.000000, 0.000000 +198, 0.994627, 0.103521, 0.000000, 0.000000 +199, 0.994573, 0.104042, 0.000000, 0.000000 +200, 0.994518, 0.104563, 0.000000, 0.000000 +201, 0.994463, 0.105084, 0.000000, 0.000000 +202, 0.994408, 0.105605, 0.000000, 0.000000 +203, 0.994353, 0.106126, 0.000000, 0.000000 +204, 0.994297, 0.106647, 0.000000, 0.000000 +205, 0.994241, 0.107167, 0.000000, 0.000000 +206, 0.994185, 0.107688, 0.000000, 0.000000 +207, 0.994128, 0.108209, 0.000000, 0.000000 +208, 0.994071, 0.108729, 0.000000, 0.000000 +209, 0.994014, 0.109250, 0.000000, 0.000000 +210, 0.993957, 0.109771, 0.000000, 0.000000 +211, 0.993899, 0.110291, 0.000000, 0.000000 +212, 0.993841, 0.110812, 0.000000, 0.000000 +213, 0.993783, 0.111332, 0.000000, 0.000000 +214, 0.993725, 0.111853, 0.000000, 0.000000 +215, 0.993666, 0.112373, 0.000000, 0.000000 +216, 0.993607, 0.112894, 0.000000, 0.000000 +217, 0.993548, 0.113414, 0.000000, 0.000000 +218, 0.993488, 0.113935, 0.000000, 0.000000 +219, 0.993428, 0.114455, 0.000000, 0.000000 +220, 0.993368, 0.114975, 0.000000, 0.000000 +221, 0.993308, 0.115496, 0.000000, 0.000000 +222, 0.993247, 0.116016, 0.000000, 0.000000 +223, 0.993186, 0.116536, 0.000000, 0.000000 +224, 0.993125, 0.117056, 0.000000, 0.000000 +225, 0.993064, 0.117576, 0.000000, 0.000000 +226, 0.993002, 0.118097, 0.000000, 0.000000 +227, 0.992940, 0.118617, 0.000000, 0.000000 +228, 0.992878, 0.119137, 0.000000, 0.000000 +229, 0.992815, 0.119657, 0.000000, 0.000000 +230, 0.992753, 0.120177, 0.000000, 0.000000 +231, 0.992689, 0.120697, 0.000000, 0.000000 +232, 0.992626, 0.121217, 0.000000, 0.000000 +233, 0.992562, 0.121736, 0.000000, 0.000000 +234, 0.992499, 0.122256, 0.000000, 0.000000 +235, 0.992434, 0.122776, 0.000000, 0.000000 +236, 0.992370, 0.123296, 0.000000, 0.000000 +237, 0.992305, 0.123816, 0.000000, 0.000000 +238, 0.992240, 0.124335, 0.000000, 0.000000 +239, 0.992175, 0.124855, 0.000000, 0.000000 +240, 0.992109, 0.125375, 0.000000, 0.000000 +241, 0.992044, 0.125894, 0.000000, 0.000000 +242, 0.991978, 0.126414, 0.000000, 0.000000 +243, 0.991911, 0.126934, 0.000000, 0.000000 +244, 0.991845, 0.127453, 0.000000, 0.000000 +245, 0.991778, 0.127973, 0.000000, 0.000000 +246, 0.991711, 0.128492, 0.000000, 0.000000 +247, 0.991643, 0.129011, 0.000000, 0.000000 +248, 0.991575, 0.129531, 0.000000, 0.000000 +249, 0.991507, 0.130050, 0.000000, 0.000000 +250, 0.991439, 0.130569, 0.000000, 0.000000 +251, 0.991371, 0.131089, 0.000000, 0.000000 +252, 0.991302, 0.131608, 0.000000, 0.000000 +253, 0.991233, 0.132127, 0.000000, 0.000000 +254, 0.991163, 0.132646, 0.000000, 0.000000 +255, 0.991094, 0.133165, 0.000000, 0.000000 +256, 0.991024, 0.133685, 0.000000, 0.000000 +257, 0.990954, 0.134204, 0.000000, 0.000000 +258, 0.990883, 0.134723, 0.000000, 0.000000 +259, 0.990813, 0.135242, 0.000000, 0.000000 +260, 0.990742, 0.135761, 0.000000, 0.000000 +261, 0.990670, 0.136279, 0.000000, 0.000000 +262, 0.990599, 0.136798, 0.000000, 0.000000 +263, 0.990527, 0.137317, 0.000000, 0.000000 +264, 0.990455, 0.137836, 0.000000, 0.000000 +265, 0.990383, 0.138355, 0.000000, 0.000000 +266, 0.990310, 0.138873, 0.000000, 0.000000 +267, 0.990237, 0.139392, 0.000000, 0.000000 +268, 0.990164, 0.139911, 0.000000, 0.000000 +269, 0.990091, 0.140429, 0.000000, 0.000000 +270, 0.990017, 0.140948, 0.000000, 0.000000 +271, 0.989943, 0.141466, 0.000000, 0.000000 +272, 0.989869, 0.141985, 0.000000, 0.000000 +273, 0.989794, 0.142503, 0.000000, 0.000000 +274, 0.989720, 0.143022, 0.000000, 0.000000 +275, 0.989644, 0.143540, 0.000000, 0.000000 +276, 0.989569, 0.144058, 0.000000, 0.000000 +277, 0.989494, 0.144577, 0.000000, 0.000000 +278, 0.989418, 0.145095, 0.000000, 0.000000 +279, 0.989342, 0.145613, 0.000000, 0.000000 +280, 0.989265, 0.146131, 0.000000, 0.000000 +281, 0.989189, 0.146650, 0.000000, 0.000000 +282, 0.989112, 0.147168, 0.000000, 0.000000 +283, 0.989034, 0.147686, 0.000000, 0.000000 +284, 0.988957, 0.148204, 0.000000, 0.000000 +285, 0.988879, 0.148722, 0.000000, 0.000000 +286, 0.988801, 0.149240, 0.000000, 0.000000 +287, 0.988723, 0.149757, 0.000000, 0.000000 +288, 0.988644, 0.150275, 0.000000, 0.000000 +289, 0.988565, 0.150793, 0.000000, 0.000000 +290, 0.988486, 0.151311, 0.000000, 0.000000 +291, 0.988407, 0.151829, 0.000000, 0.000000 +292, 0.988327, 0.152346, 0.000000, 0.000000 +293, 0.988247, 0.152864, 0.000000, 0.000000 +294, 0.988167, 0.153382, 0.000000, 0.000000 +295, 0.988087, 0.153899, 0.000000, 0.000000 +296, 0.988006, 0.154417, 0.000000, 0.000000 +297, 0.987925, 0.154934, 0.000000, 0.000000 +298, 0.987844, 0.155451, 0.000000, 0.000000 +299, 0.987762, 0.155969, 0.000000, 0.000000 +300, 0.987680, 0.156486, 0.000000, 0.000000 +301, 0.987598, 0.157003, 0.000000, 0.000000 +302, 0.987516, 0.157521, 0.000000, 0.000000 +303, 0.987433, 0.158038, 0.000000, 0.000000 +304, 0.987350, 0.158555, 0.000000, 0.000000 +305, 0.987267, 0.159072, 0.000000, 0.000000 +306, 0.987183, 0.159589, 0.000000, 0.000000 +307, 0.987100, 0.160106, 0.000000, 0.000000 +308, 0.987016, 0.160623, 0.000000, 0.000000 +309, 0.986932, 0.161140, 0.000000, 0.000000 +310, 0.986847, 0.161657, 0.000000, 0.000000 +311, 0.986762, 0.162174, 0.000000, 0.000000 +312, 0.986677, 0.162691, 0.000000, 0.000000 +313, 0.986592, 0.163208, 0.000000, 0.000000 +314, 0.986506, 0.163724, 0.000000, 0.000000 +315, 0.986420, 0.164241, 0.000000, 0.000000 +316, 0.986334, 0.164758, 0.000000, 0.000000 +317, 0.986248, 0.165274, 0.000000, 0.000000 +318, 0.986161, 0.165791, 0.000000, 0.000000 +319, 0.986074, 0.166307, 0.000000, 0.000000 +320, 0.985987, 0.166824, 0.000000, 0.000000 +321, 0.985899, 0.167340, 0.000000, 0.000000 +322, 0.985811, 0.167857, 0.000000, 0.000000 +323, 0.985723, 0.168373, 0.000000, 0.000000 +324, 0.985635, 0.168889, 0.000000, 0.000000 +325, 0.985546, 0.169405, 0.000000, 0.000000 +326, 0.985458, 0.169922, 0.000000, 0.000000 +327, 0.985368, 0.170438, 0.000000, 0.000000 +328, 0.985279, 0.170954, 0.000000, 0.000000 +329, 0.985189, 0.171470, 0.000000, 0.000000 +330, 0.985099, 0.171986, 0.000000, 0.000000 +331, 0.985009, 0.172502, 0.000000, 0.000000 +332, 0.984919, 0.173018, 0.000000, 0.000000 +333, 0.984828, 0.173534, 0.000000, 0.000000 +334, 0.984737, 0.174049, 0.000000, 0.000000 +335, 0.984646, 0.174565, 0.000000, 0.000000 +336, 0.984554, 0.175081, 0.000000, 0.000000 +337, 0.984462, 0.175596, 0.000000, 0.000000 +338, 0.984370, 0.176112, 0.000000, 0.000000 +339, 0.984278, 0.176628, 0.000000, 0.000000 +340, 0.984185, 0.177143, 0.000000, 0.000000 +341, 0.984092, 0.177659, 0.000000, 0.000000 +342, 0.983999, 0.178174, 0.000000, 0.000000 +343, 0.983906, 0.178689, 0.000000, 0.000000 +344, 0.983812, 0.179205, 0.000000, 0.000000 +345, 0.983718, 0.179720, 0.000000, 0.000000 +346, 0.983624, 0.180235, 0.000000, 0.000000 +347, 0.983529, 0.180750, 0.000000, 0.000000 +348, 0.983434, 0.181266, 0.000000, 0.000000 +349, 0.983339, 0.181781, 0.000000, 0.000000 +350, 0.983244, 0.182296, 0.000000, 0.000000 +351, 0.983148, 0.182811, 0.000000, 0.000000 +352, 0.983052, 0.183326, 0.000000, 0.000000 +353, 0.982956, 0.183840, 0.000000, 0.000000 +354, 0.982860, 0.184355, 0.000000, 0.000000 +355, 0.982763, 0.184870, 0.000000, 0.000000 +356, 0.982666, 0.185385, 0.000000, 0.000000 +357, 0.982569, 0.185899, 0.000000, 0.000000 +358, 0.982471, 0.186414, 0.000000, 0.000000 +359, 0.982374, 0.186929, 0.000000, 0.000000 +360, 0.982275, 0.187443, 0.000000, 0.000000 +361, 0.982177, 0.187958, 0.000000, 0.000000 +362, 0.982079, 0.188472, 0.000000, 0.000000 +363, 0.981980, 0.188986, 0.000000, 0.000000 +364, 0.981881, 0.189501, 0.000000, 0.000000 +365, 0.981781, 0.190015, 0.000000, 0.000000 +366, 0.981682, 0.190529, 0.000000, 0.000000 +367, 0.981582, 0.191043, 0.000000, 0.000000 +368, 0.981481, 0.191557, 0.000000, 0.000000 +369, 0.981381, 0.192071, 0.000000, 0.000000 +370, 0.981280, 0.192585, 0.000000, 0.000000 +371, 0.981179, 0.193099, 0.000000, 0.000000 +372, 0.981078, 0.193613, 0.000000, 0.000000 +373, 0.980976, 0.194127, 0.000000, 0.000000 +374, 0.980875, 0.194641, 0.000000, 0.000000 +375, 0.980773, 0.195155, 0.000000, 0.000000 +376, 0.980670, 0.195668, 0.000000, 0.000000 +377, 0.980568, 0.196182, 0.000000, 0.000000 +378, 0.980465, 0.196695, 0.000000, 0.000000 +379, 0.980361, 0.197209, 0.000000, 0.000000 +380, 0.980258, 0.197722, 0.000000, 0.000000 +381, 0.980154, 0.198236, 0.000000, 0.000000 +382, 0.980050, 0.198749, 0.000000, 0.000000 +383, 0.979946, 0.199262, 0.000000, 0.000000 +384, 0.979842, 0.199776, 0.000000, 0.000000 +385, 0.979737, 0.200289, 0.000000, 0.000000 +386, 0.979632, 0.200802, 0.000000, 0.000000 +387, 0.979527, 0.201315, 0.000000, 0.000000 +388, 0.979421, 0.201828, 0.000000, 0.000000 +389, 0.979315, 0.202341, 0.000000, 0.000000 +390, 0.979209, 0.202854, 0.000000, 0.000000 +391, 0.979103, 0.203367, 0.000000, 0.000000 +392, 0.978996, 0.203880, 0.000000, 0.000000 +393, 0.978889, 0.204392, 0.000000, 0.000000 +394, 0.978782, 0.204905, 0.000000, 0.000000 +395, 0.978674, 0.205418, 0.000000, 0.000000 +396, 0.978567, 0.205930, 0.000000, 0.000000 +397, 0.978459, 0.206443, 0.000000, 0.000000 +398, 0.978350, 0.206955, 0.000000, 0.000000 +399, 0.978242, 0.207468, 0.000000, 0.000000 +400, 0.978133, 0.207980, 0.000000, 0.000000 +401, 0.978024, 0.208492, 0.000000, 0.000000 +402, 0.977915, 0.209005, 0.000000, 0.000000 +403, 0.977805, 0.209517, 0.000000, 0.000000 +404, 0.977695, 0.210029, 0.000000, 0.000000 +405, 0.977585, 0.210541, 0.000000, 0.000000 +406, 0.977475, 0.211053, 0.000000, 0.000000 +407, 0.977364, 0.211565, 0.000000, 0.000000 +408, 0.977253, 0.212077, 0.000000, 0.000000 +409, 0.977142, 0.212589, 0.000000, 0.000000 +410, 0.977030, 0.213100, 0.000000, 0.000000 +411, 0.976919, 0.213612, 0.000000, 0.000000 +412, 0.976807, 0.214124, 0.000000, 0.000000 +413, 0.976694, 0.214635, 0.000000, 0.000000 +414, 0.976582, 0.215147, 0.000000, 0.000000 +415, 0.976469, 0.215658, 0.000000, 0.000000 +416, 0.976356, 0.216170, 0.000000, 0.000000 +417, 0.976242, 0.216681, 0.000000, 0.000000 +418, 0.976129, 0.217192, 0.000000, 0.000000 +419, 0.976015, 0.217704, 0.000000, 0.000000 +420, 0.975901, 0.218215, 0.000000, 0.000000 +421, 0.975786, 0.218726, 0.000000, 0.000000 +422, 0.975672, 0.219237, 0.000000, 0.000000 +423, 0.975557, 0.219748, 0.000000, 0.000000 +424, 0.975441, 0.220259, 0.000000, 0.000000 +425, 0.975326, 0.220770, 0.000000, 0.000000 +426, 0.975210, 0.221281, 0.000000, 0.000000 +427, 0.975094, 0.221791, 0.000000, 0.000000 +428, 0.974978, 0.222302, 0.000000, 0.000000 +429, 0.974861, 0.222813, 0.000000, 0.000000 +430, 0.974744, 0.223323, 0.000000, 0.000000 +431, 0.974627, 0.223834, 0.000000, 0.000000 +432, 0.974510, 0.224344, 0.000000, 0.000000 +433, 0.974392, 0.224855, 0.000000, 0.000000 +434, 0.974274, 0.225365, 0.000000, 0.000000 +435, 0.974156, 0.225875, 0.000000, 0.000000 +436, 0.974038, 0.226385, 0.000000, 0.000000 +437, 0.973919, 0.226896, 0.000000, 0.000000 +438, 0.973800, 0.227406, 0.000000, 0.000000 +439, 0.973681, 0.227916, 0.000000, 0.000000 +440, 0.973561, 0.228426, 0.000000, 0.000000 +441, 0.973442, 0.228936, 0.000000, 0.000000 +442, 0.973322, 0.229445, 0.000000, 0.000000 +443, 0.973201, 0.229955, 0.000000, 0.000000 +444, 0.973081, 0.230465, 0.000000, 0.000000 +445, 0.972960, 0.230975, 0.000000, 0.000000 +446, 0.972839, 0.231484, 0.000000, 0.000000 +447, 0.972717, 0.231994, 0.000000, 0.000000 +448, 0.972596, 0.232503, 0.000000, 0.000000 +449, 0.972474, 0.233012, 0.000000, 0.000000 +450, 0.972352, 0.233522, 0.000000, 0.000000 +451, 0.972229, 0.234031, 0.000000, 0.000000 +452, 0.972106, 0.234540, 0.000000, 0.000000 +453, 0.971983, 0.235049, 0.000000, 0.000000 +454, 0.971860, 0.235558, 0.000000, 0.000000 +455, 0.971737, 0.236067, 0.000000, 0.000000 +456, 0.971613, 0.236576, 0.000000, 0.000000 +457, 0.971489, 0.237085, 0.000000, 0.000000 +458, 0.971365, 0.237594, 0.000000, 0.000000 +459, 0.971240, 0.238103, 0.000000, 0.000000 +460, 0.971115, 0.238611, 0.000000, 0.000000 +461, 0.970990, 0.239120, 0.000000, 0.000000 +462, 0.970865, 0.239629, 0.000000, 0.000000 +463, 0.970739, 0.240137, 0.000000, 0.000000 +464, 0.970613, 0.240646, 0.000000, 0.000000 +465, 0.970487, 0.241154, 0.000000, 0.000000 +466, 0.970360, 0.241662, 0.000000, 0.000000 +467, 0.970234, 0.242170, 0.000000, 0.000000 +468, 0.970107, 0.242678, 0.000000, 0.000000 +469, 0.969980, 0.243187, 0.000000, 0.000000 +470, 0.969852, 0.243695, 0.000000, 0.000000 +471, 0.969724, 0.244203, 0.000000, 0.000000 +472, 0.969596, 0.244710, 0.000000, 0.000000 +473, 0.969468, 0.245218, 0.000000, 0.000000 +474, 0.969339, 0.245726, 0.000000, 0.000000 +475, 0.969210, 0.246234, 0.000000, 0.000000 +476, 0.969081, 0.246741, 0.000000, 0.000000 +477, 0.968952, 0.247249, 0.000000, 0.000000 +478, 0.968822, 0.247756, 0.000000, 0.000000 +479, 0.968692, 0.248264, 0.000000, 0.000000 +480, 0.968562, 0.248771, 0.000000, 0.000000 +481, 0.968432, 0.249278, 0.000000, 0.000000 +482, 0.968301, 0.249786, 0.000000, 0.000000 +483, 0.968170, 0.250293, 0.000000, 0.000000 +484, 0.968039, 0.250800, 0.000000, 0.000000 +485, 0.967907, 0.251307, 0.000000, 0.000000 +486, 0.967776, 0.251814, 0.000000, 0.000000 +487, 0.967644, 0.252321, 0.000000, 0.000000 +488, 0.967511, 0.252827, 0.000000, 0.000000 +489, 0.967379, 0.253334, 0.000000, 0.000000 +490, 0.967246, 0.253841, 0.000000, 0.000000 +491, 0.967113, 0.254347, 0.000000, 0.000000 +492, 0.966980, 0.254854, 0.000000, 0.000000 +493, 0.966846, 0.255360, 0.000000, 0.000000 +494, 0.966712, 0.255867, 0.000000, 0.000000 +495, 0.966578, 0.256373, 0.000000, 0.000000 +496, 0.966444, 0.256879, 0.000000, 0.000000 +497, 0.966309, 0.257385, 0.000000, 0.000000 +498, 0.966174, 0.257891, 0.000000, 0.000000 +499, 0.966039, 0.258397, 0.000000, 0.000000 +500, 0.965903, 0.258903, 0.000000, 0.000000 +501, 0.965767, 0.259409, 0.000000, 0.000000 +502, 0.965631, 0.259915, 0.000000, 0.000000 +503, 0.965495, 0.260421, 0.000000, 0.000000 +504, 0.965359, 0.260926, 0.000000, 0.000000 +505, 0.965222, 0.261432, 0.000000, 0.000000 +506, 0.965085, 0.261938, 0.000000, 0.000000 +507, 0.964947, 0.262443, 0.000000, 0.000000 +508, 0.964810, 0.262948, 0.000000, 0.000000 +509, 0.964672, 0.263454, 0.000000, 0.000000 +510, 0.964534, 0.263959, 0.000000, 0.000000 +511, 0.964396, 0.264464, 0.000000, 0.000000 +512, 0.964257, 0.264969, 0.000000, 0.000000 +513, 0.964118, 0.265474, 0.000000, 0.000000 +514, 0.963979, 0.265979, 0.000000, 0.000000 +515, 0.963839, 0.266484, 0.000000, 0.000000 +516, 0.963700, 0.266989, 0.000000, 0.000000 +517, 0.963560, 0.267494, 0.000000, 0.000000 +518, 0.963419, 0.267998, 0.000000, 0.000000 +519, 0.963279, 0.268503, 0.000000, 0.000000 +520, 0.963138, 0.269007, 0.000000, 0.000000 +521, 0.962997, 0.269512, 0.000000, 0.000000 +522, 0.962856, 0.270016, 0.000000, 0.000000 +523, 0.962714, 0.270520, 0.000000, 0.000000 +524, 0.962572, 0.271025, 0.000000, 0.000000 +525, 0.962430, 0.271529, 0.000000, 0.000000 +526, 0.962288, 0.272033, 0.000000, 0.000000 +527, 0.962145, 0.272537, 0.000000, 0.000000 +528, 0.962003, 0.273041, 0.000000, 0.000000 +529, 0.961859, 0.273544, 0.000000, 0.000000 +530, 0.961716, 0.274048, 0.000000, 0.000000 +531, 0.961572, 0.274552, 0.000000, 0.000000 +532, 0.961428, 0.275056, 0.000000, 0.000000 +533, 0.961284, 0.275559, 0.000000, 0.000000 +534, 0.961140, 0.276062, 0.000000, 0.000000 +535, 0.960995, 0.276566, 0.000000, 0.000000 +536, 0.960850, 0.277069, 0.000000, 0.000000 +537, 0.960705, 0.277572, 0.000000, 0.000000 +538, 0.960559, 0.278076, 0.000000, 0.000000 +539, 0.960413, 0.278579, 0.000000, 0.000000 +540, 0.960267, 0.279082, 0.000000, 0.000000 +541, 0.960121, 0.279585, 0.000000, 0.000000 +542, 0.959975, 0.280087, 0.000000, 0.000000 +543, 0.959828, 0.280590, 0.000000, 0.000000 +544, 0.959681, 0.281093, 0.000000, 0.000000 +545, 0.959533, 0.281595, 0.000000, 0.000000 +546, 0.959386, 0.282098, 0.000000, 0.000000 +547, 0.959238, 0.282600, 0.000000, 0.000000 +548, 0.959090, 0.283103, 0.000000, 0.000000 +549, 0.958941, 0.283605, 0.000000, 0.000000 +550, 0.958792, 0.284107, 0.000000, 0.000000 +551, 0.958644, 0.284610, 0.000000, 0.000000 +552, 0.958494, 0.285112, 0.000000, 0.000000 +553, 0.958345, 0.285614, 0.000000, 0.000000 +554, 0.958195, 0.286116, 0.000000, 0.000000 +555, 0.958045, 0.286617, 0.000000, 0.000000 +556, 0.957895, 0.287119, 0.000000, 0.000000 +557, 0.957744, 0.287621, 0.000000, 0.000000 +558, 0.957594, 0.288122, 0.000000, 0.000000 +559, 0.957443, 0.288624, 0.000000, 0.000000 +560, 0.957291, 0.289125, 0.000000, 0.000000 +561, 0.957140, 0.289627, 0.000000, 0.000000 +562, 0.956988, 0.290128, 0.000000, 0.000000 +563, 0.956836, 0.290629, 0.000000, 0.000000 +564, 0.956683, 0.291130, 0.000000, 0.000000 +565, 0.956531, 0.291631, 0.000000, 0.000000 +566, 0.956378, 0.292132, 0.000000, 0.000000 +567, 0.956225, 0.292633, 0.000000, 0.000000 +568, 0.956071, 0.293134, 0.000000, 0.000000 +569, 0.955918, 0.293635, 0.000000, 0.000000 +570, 0.955764, 0.294135, 0.000000, 0.000000 +571, 0.955610, 0.294636, 0.000000, 0.000000 +572, 0.955455, 0.295136, 0.000000, 0.000000 +573, 0.955300, 0.295637, 0.000000, 0.000000 +574, 0.955145, 0.296137, 0.000000, 0.000000 +575, 0.954990, 0.296637, 0.000000, 0.000000 +576, 0.954835, 0.297138, 0.000000, 0.000000 +577, 0.954679, 0.297638, 0.000000, 0.000000 +578, 0.954523, 0.298138, 0.000000, 0.000000 +579, 0.954367, 0.298638, 0.000000, 0.000000 +580, 0.954210, 0.299137, 0.000000, 0.000000 +581, 0.954053, 0.299637, 0.000000, 0.000000 +582, 0.953896, 0.300137, 0.000000, 0.000000 +583, 0.953739, 0.300636, 0.000000, 0.000000 +584, 0.953581, 0.301136, 0.000000, 0.000000 +585, 0.953423, 0.301635, 0.000000, 0.000000 +586, 0.953265, 0.302135, 0.000000, 0.000000 +587, 0.953107, 0.302634, 0.000000, 0.000000 +588, 0.952948, 0.303133, 0.000000, 0.000000 +589, 0.952789, 0.303632, 0.000000, 0.000000 +590, 0.952630, 0.304131, 0.000000, 0.000000 +591, 0.952471, 0.304630, 0.000000, 0.000000 +592, 0.952311, 0.305129, 0.000000, 0.000000 +593, 0.952151, 0.305628, 0.000000, 0.000000 +594, 0.951991, 0.306126, 0.000000, 0.000000 +595, 0.951830, 0.306625, 0.000000, 0.000000 +596, 0.951670, 0.307123, 0.000000, 0.000000 +597, 0.951509, 0.307622, 0.000000, 0.000000 +598, 0.951347, 0.308120, 0.000000, 0.000000 +599, 0.951186, 0.308618, 0.000000, 0.000000 +600, 0.951024, 0.309117, 0.000000, 0.000000 +601, 0.950862, 0.309615, 0.000000, 0.000000 +602, 0.950700, 0.310113, 0.000000, 0.000000 +603, 0.950537, 0.310611, 0.000000, 0.000000 +604, 0.950374, 0.311108, 0.000000, 0.000000 +605, 0.950211, 0.311606, 0.000000, 0.000000 +606, 0.950048, 0.312104, 0.000000, 0.000000 +607, 0.949884, 0.312601, 0.000000, 0.000000 +608, 0.949721, 0.313099, 0.000000, 0.000000 +609, 0.949556, 0.313596, 0.000000, 0.000000 +610, 0.949392, 0.314094, 0.000000, 0.000000 +611, 0.949227, 0.314591, 0.000000, 0.000000 +612, 0.949062, 0.315088, 0.000000, 0.000000 +613, 0.948897, 0.315585, 0.000000, 0.000000 +614, 0.948732, 0.316082, 0.000000, 0.000000 +615, 0.948566, 0.316579, 0.000000, 0.000000 +616, 0.948400, 0.317076, 0.000000, 0.000000 +617, 0.948234, 0.317572, 0.000000, 0.000000 +618, 0.948068, 0.318069, 0.000000, 0.000000 +619, 0.947901, 0.318565, 0.000000, 0.000000 +620, 0.947734, 0.319062, 0.000000, 0.000000 +621, 0.947567, 0.319558, 0.000000, 0.000000 +622, 0.947399, 0.320055, 0.000000, 0.000000 +623, 0.947231, 0.320551, 0.000000, 0.000000 +624, 0.947063, 0.321047, 0.000000, 0.000000 +625, 0.946895, 0.321543, 0.000000, 0.000000 +626, 0.946727, 0.322039, 0.000000, 0.000000 +627, 0.946558, 0.322535, 0.000000, 0.000000 +628, 0.946389, 0.323030, 0.000000, 0.000000 +629, 0.946219, 0.323526, 0.000000, 0.000000 +630, 0.946050, 0.324021, 0.000000, 0.000000 +631, 0.945880, 0.324517, 0.000000, 0.000000 +632, 0.945710, 0.325012, 0.000000, 0.000000 +633, 0.945539, 0.325508, 0.000000, 0.000000 +634, 0.945369, 0.326003, 0.000000, 0.000000 +635, 0.945198, 0.326498, 0.000000, 0.000000 +636, 0.945027, 0.326993, 0.000000, 0.000000 +637, 0.944855, 0.327488, 0.000000, 0.000000 +638, 0.944684, 0.327983, 0.000000, 0.000000 +639, 0.944512, 0.328478, 0.000000, 0.000000 +640, 0.944340, 0.328972, 0.000000, 0.000000 +641, 0.944167, 0.329467, 0.000000, 0.000000 +642, 0.943994, 0.329961, 0.000000, 0.000000 +643, 0.943822, 0.330456, 0.000000, 0.000000 +644, 0.943648, 0.330950, 0.000000, 0.000000 +645, 0.943475, 0.331444, 0.000000, 0.000000 +646, 0.943301, 0.331938, 0.000000, 0.000000 +647, 0.943127, 0.332432, 0.000000, 0.000000 +648, 0.942953, 0.332926, 0.000000, 0.000000 +649, 0.942778, 0.333420, 0.000000, 0.000000 +650, 0.942604, 0.333914, 0.000000, 0.000000 +651, 0.942429, 0.334407, 0.000000, 0.000000 +652, 0.942253, 0.334901, 0.000000, 0.000000 +653, 0.942078, 0.335395, 0.000000, 0.000000 +654, 0.941902, 0.335888, 0.000000, 0.000000 +655, 0.941726, 0.336381, 0.000000, 0.000000 +656, 0.941550, 0.336874, 0.000000, 0.000000 +657, 0.941373, 0.337368, 0.000000, 0.000000 +658, 0.941196, 0.337861, 0.000000, 0.000000 +659, 0.941019, 0.338354, 0.000000, 0.000000 +660, 0.940842, 0.338846, 0.000000, 0.000000 +661, 0.940664, 0.339339, 0.000000, 0.000000 +662, 0.940486, 0.339832, 0.000000, 0.000000 +663, 0.940308, 0.340324, 0.000000, 0.000000 +664, 0.940130, 0.340817, 0.000000, 0.000000 +665, 0.939951, 0.341309, 0.000000, 0.000000 +666, 0.939772, 0.341801, 0.000000, 0.000000 +667, 0.939593, 0.342294, 0.000000, 0.000000 +668, 0.939414, 0.342786, 0.000000, 0.000000 +669, 0.939234, 0.343278, 0.000000, 0.000000 +670, 0.939054, 0.343770, 0.000000, 0.000000 +671, 0.938874, 0.344261, 0.000000, 0.000000 +672, 0.938693, 0.344753, 0.000000, 0.000000 +673, 0.938513, 0.345245, 0.000000, 0.000000 +674, 0.938332, 0.345736, 0.000000, 0.000000 +675, 0.938151, 0.346228, 0.000000, 0.000000 +676, 0.937969, 0.346719, 0.000000, 0.000000 +677, 0.937787, 0.347210, 0.000000, 0.000000 +678, 0.937605, 0.347701, 0.000000, 0.000000 +679, 0.937423, 0.348192, 0.000000, 0.000000 +680, 0.937241, 0.348683, 0.000000, 0.000000 +681, 0.937058, 0.349174, 0.000000, 0.000000 +682, 0.936875, 0.349665, 0.000000, 0.000000 +683, 0.936692, 0.350156, 0.000000, 0.000000 +684, 0.936508, 0.350646, 0.000000, 0.000000 +685, 0.936324, 0.351137, 0.000000, 0.000000 +686, 0.936140, 0.351627, 0.000000, 0.000000 +687, 0.935956, 0.352117, 0.000000, 0.000000 +688, 0.935771, 0.352607, 0.000000, 0.000000 +689, 0.935587, 0.353098, 0.000000, 0.000000 +690, 0.935401, 0.353588, 0.000000, 0.000000 +691, 0.935216, 0.354077, 0.000000, 0.000000 +692, 0.935031, 0.354567, 0.000000, 0.000000 +693, 0.934845, 0.355057, 0.000000, 0.000000 +694, 0.934659, 0.355547, 0.000000, 0.000000 +695, 0.934472, 0.356036, 0.000000, 0.000000 +696, 0.934286, 0.356525, 0.000000, 0.000000 +697, 0.934099, 0.357015, 0.000000, 0.000000 +698, 0.933912, 0.357504, 0.000000, 0.000000 +699, 0.933724, 0.357993, 0.000000, 0.000000 +700, 0.933537, 0.358482, 0.000000, 0.000000 +701, 0.933349, 0.358971, 0.000000, 0.000000 +702, 0.933161, 0.359460, 0.000000, 0.000000 +703, 0.932972, 0.359948, 0.000000, 0.000000 +704, 0.932784, 0.360437, 0.000000, 0.000000 +705, 0.932595, 0.360926, 0.000000, 0.000000 +706, 0.932405, 0.361414, 0.000000, 0.000000 +707, 0.932216, 0.361902, 0.000000, 0.000000 +708, 0.932026, 0.362391, 0.000000, 0.000000 +709, 0.931836, 0.362879, 0.000000, 0.000000 +710, 0.931646, 0.363367, 0.000000, 0.000000 +711, 0.931456, 0.363855, 0.000000, 0.000000 +712, 0.931265, 0.364342, 0.000000, 0.000000 +713, 0.931074, 0.364830, 0.000000, 0.000000 +714, 0.930883, 0.365318, 0.000000, 0.000000 +715, 0.930691, 0.365805, 0.000000, 0.000000 +716, 0.930500, 0.366293, 0.000000, 0.000000 +717, 0.930308, 0.366780, 0.000000, 0.000000 +718, 0.930115, 0.367267, 0.000000, 0.000000 +719, 0.929923, 0.367754, 0.000000, 0.000000 +720, 0.929730, 0.368241, 0.000000, 0.000000 +721, 0.929537, 0.368728, 0.000000, 0.000000 +722, 0.929344, 0.369215, 0.000000, 0.000000 +723, 0.929150, 0.369702, 0.000000, 0.000000 +724, 0.928957, 0.370188, 0.000000, 0.000000 +725, 0.928763, 0.370675, 0.000000, 0.000000 +726, 0.928568, 0.371161, 0.000000, 0.000000 +727, 0.928374, 0.371648, 0.000000, 0.000000 +728, 0.928179, 0.372134, 0.000000, 0.000000 +729, 0.927984, 0.372620, 0.000000, 0.000000 +730, 0.927789, 0.373106, 0.000000, 0.000000 +731, 0.927593, 0.373592, 0.000000, 0.000000 +732, 0.927397, 0.374078, 0.000000, 0.000000 +733, 0.927201, 0.374563, 0.000000, 0.000000 +734, 0.927005, 0.375049, 0.000000, 0.000000 +735, 0.926808, 0.375535, 0.000000, 0.000000 +736, 0.926612, 0.376020, 0.000000, 0.000000 +737, 0.926415, 0.376505, 0.000000, 0.000000 +738, 0.926217, 0.376990, 0.000000, 0.000000 +739, 0.926020, 0.377475, 0.000000, 0.000000 +740, 0.925822, 0.377960, 0.000000, 0.000000 +741, 0.925624, 0.378445, 0.000000, 0.000000 +742, 0.925425, 0.378930, 0.000000, 0.000000 +743, 0.925227, 0.379415, 0.000000, 0.000000 +744, 0.925028, 0.379899, 0.000000, 0.000000 +745, 0.924829, 0.380384, 0.000000, 0.000000 +746, 0.924629, 0.380868, 0.000000, 0.000000 +747, 0.924430, 0.381352, 0.000000, 0.000000 +748, 0.924230, 0.381836, 0.000000, 0.000000 +749, 0.924030, 0.382320, 0.000000, 0.000000 +750, 0.923829, 0.382804, 0.000000, 0.000000 +751, 0.923629, 0.383288, 0.000000, 0.000000 +752, 0.923428, 0.383772, 0.000000, 0.000000 +753, 0.923227, 0.384256, 0.000000, 0.000000 +754, 0.923025, 0.384739, 0.000000, 0.000000 +755, 0.922824, 0.385222, 0.000000, 0.000000 +756, 0.922622, 0.385706, 0.000000, 0.000000 +757, 0.922420, 0.386189, 0.000000, 0.000000 +758, 0.922217, 0.386672, 0.000000, 0.000000 +759, 0.922015, 0.387155, 0.000000, 0.000000 +760, 0.921812, 0.387638, 0.000000, 0.000000 +761, 0.921609, 0.388121, 0.000000, 0.000000 +762, 0.921405, 0.388603, 0.000000, 0.000000 +763, 0.921201, 0.389086, 0.000000, 0.000000 +764, 0.920998, 0.389568, 0.000000, 0.000000 +765, 0.920793, 0.390051, 0.000000, 0.000000 +766, 0.920589, 0.390533, 0.000000, 0.000000 +767, 0.920384, 0.391015, 0.000000, 0.000000 +768, 0.920179, 0.391497, 0.000000, 0.000000 +769, 0.919974, 0.391979, 0.000000, 0.000000 +770, 0.919769, 0.392461, 0.000000, 0.000000 +771, 0.919563, 0.392942, 0.000000, 0.000000 +772, 0.919357, 0.393424, 0.000000, 0.000000 +773, 0.919151, 0.393906, 0.000000, 0.000000 +774, 0.918944, 0.394387, 0.000000, 0.000000 +775, 0.918738, 0.394868, 0.000000, 0.000000 +776, 0.918531, 0.395349, 0.000000, 0.000000 +777, 0.918324, 0.395830, 0.000000, 0.000000 +778, 0.918116, 0.396311, 0.000000, 0.000000 +779, 0.917908, 0.396792, 0.000000, 0.000000 +780, 0.917701, 0.397273, 0.000000, 0.000000 +781, 0.917492, 0.397753, 0.000000, 0.000000 +782, 0.917284, 0.398234, 0.000000, 0.000000 +783, 0.917075, 0.398714, 0.000000, 0.000000 +784, 0.916866, 0.399195, 0.000000, 0.000000 +785, 0.916657, 0.399675, 0.000000, 0.000000 +786, 0.916448, 0.400155, 0.000000, 0.000000 +787, 0.916238, 0.400635, 0.000000, 0.000000 +788, 0.916028, 0.401115, 0.000000, 0.000000 +789, 0.915818, 0.401594, 0.000000, 0.000000 +790, 0.915607, 0.402074, 0.000000, 0.000000 +791, 0.915396, 0.402554, 0.000000, 0.000000 +792, 0.915185, 0.403033, 0.000000, 0.000000 +793, 0.914974, 0.403512, 0.000000, 0.000000 +794, 0.914763, 0.403991, 0.000000, 0.000000 +795, 0.914551, 0.404471, 0.000000, 0.000000 +796, 0.914339, 0.404950, 0.000000, 0.000000 +797, 0.914127, 0.405428, 0.000000, 0.000000 +798, 0.913914, 0.405907, 0.000000, 0.000000 +799, 0.913702, 0.406386, 0.000000, 0.000000 +800, 0.913489, 0.406864, 0.000000, 0.000000 +801, 0.913275, 0.407343, 0.000000, 0.000000 +802, 0.913062, 0.407821, 0.000000, 0.000000 +803, 0.912848, 0.408299, 0.000000, 0.000000 +804, 0.912634, 0.408777, 0.000000, 0.000000 +805, 0.912420, 0.409255, 0.000000, 0.000000 +806, 0.912206, 0.409733, 0.000000, 0.000000 +807, 0.911991, 0.410211, 0.000000, 0.000000 +808, 0.911776, 0.410688, 0.000000, 0.000000 +809, 0.911561, 0.411166, 0.000000, 0.000000 +810, 0.911345, 0.411643, 0.000000, 0.000000 +811, 0.911129, 0.412121, 0.000000, 0.000000 +812, 0.910913, 0.412598, 0.000000, 0.000000 +813, 0.910697, 0.413075, 0.000000, 0.000000 +814, 0.910481, 0.413552, 0.000000, 0.000000 +815, 0.910264, 0.414029, 0.000000, 0.000000 +816, 0.910047, 0.414505, 0.000000, 0.000000 +817, 0.909830, 0.414982, 0.000000, 0.000000 +818, 0.909612, 0.415458, 0.000000, 0.000000 +819, 0.909394, 0.415935, 0.000000, 0.000000 +820, 0.909177, 0.416411, 0.000000, 0.000000 +821, 0.908958, 0.416887, 0.000000, 0.000000 +822, 0.908740, 0.417363, 0.000000, 0.000000 +823, 0.908521, 0.417839, 0.000000, 0.000000 +824, 0.908302, 0.418315, 0.000000, 0.000000 +825, 0.908083, 0.418791, 0.000000, 0.000000 +826, 0.907863, 0.419266, 0.000000, 0.000000 +827, 0.907644, 0.419742, 0.000000, 0.000000 +828, 0.907424, 0.420217, 0.000000, 0.000000 +829, 0.907203, 0.420692, 0.000000, 0.000000 +830, 0.906983, 0.421167, 0.000000, 0.000000 +831, 0.906762, 0.421642, 0.000000, 0.000000 +832, 0.906541, 0.422117, 0.000000, 0.000000 +833, 0.906320, 0.422592, 0.000000, 0.000000 +834, 0.906099, 0.423067, 0.000000, 0.000000 +835, 0.905877, 0.423541, 0.000000, 0.000000 +836, 0.905655, 0.424015, 0.000000, 0.000000 +837, 0.905433, 0.424490, 0.000000, 0.000000 +838, 0.905210, 0.424964, 0.000000, 0.000000 +839, 0.904988, 0.425438, 0.000000, 0.000000 +840, 0.904765, 0.425912, 0.000000, 0.000000 +841, 0.904541, 0.426386, 0.000000, 0.000000 +842, 0.904318, 0.426860, 0.000000, 0.000000 +843, 0.904094, 0.427333, 0.000000, 0.000000 +844, 0.903870, 0.427807, 0.000000, 0.000000 +845, 0.903646, 0.428280, 0.000000, 0.000000 +846, 0.903422, 0.428753, 0.000000, 0.000000 +847, 0.903197, 0.429226, 0.000000, 0.000000 +848, 0.902972, 0.429699, 0.000000, 0.000000 +849, 0.902747, 0.430172, 0.000000, 0.000000 +850, 0.902521, 0.430645, 0.000000, 0.000000 +851, 0.902296, 0.431118, 0.000000, 0.000000 +852, 0.902070, 0.431590, 0.000000, 0.000000 +853, 0.901844, 0.432063, 0.000000, 0.000000 +854, 0.901617, 0.432535, 0.000000, 0.000000 +855, 0.901390, 0.433007, 0.000000, 0.000000 +856, 0.901164, 0.433479, 0.000000, 0.000000 +857, 0.900936, 0.433951, 0.000000, 0.000000 +858, 0.900709, 0.434423, 0.000000, 0.000000 +859, 0.900481, 0.434895, 0.000000, 0.000000 +860, 0.900253, 0.435366, 0.000000, 0.000000 +861, 0.900025, 0.435838, 0.000000, 0.000000 +862, 0.899797, 0.436309, 0.000000, 0.000000 +863, 0.899568, 0.436780, 0.000000, 0.000000 +864, 0.899339, 0.437251, 0.000000, 0.000000 +865, 0.899110, 0.437722, 0.000000, 0.000000 +866, 0.898881, 0.438193, 0.000000, 0.000000 +867, 0.898651, 0.438664, 0.000000, 0.000000 +868, 0.898421, 0.439135, 0.000000, 0.000000 +869, 0.898191, 0.439605, 0.000000, 0.000000 +870, 0.897961, 0.440076, 0.000000, 0.000000 +871, 0.897730, 0.440546, 0.000000, 0.000000 +872, 0.897499, 0.441016, 0.000000, 0.000000 +873, 0.897268, 0.441486, 0.000000, 0.000000 +874, 0.897037, 0.441956, 0.000000, 0.000000 +875, 0.896805, 0.442426, 0.000000, 0.000000 +876, 0.896573, 0.442895, 0.000000, 0.000000 +877, 0.896341, 0.443365, 0.000000, 0.000000 +878, 0.896109, 0.443834, 0.000000, 0.000000 +879, 0.895876, 0.444304, 0.000000, 0.000000 +880, 0.895643, 0.444773, 0.000000, 0.000000 +881, 0.895410, 0.445242, 0.000000, 0.000000 +882, 0.895177, 0.445711, 0.000000, 0.000000 +883, 0.894943, 0.446180, 0.000000, 0.000000 +884, 0.894710, 0.446648, 0.000000, 0.000000 +885, 0.894476, 0.447117, 0.000000, 0.000000 +886, 0.894241, 0.447585, 0.000000, 0.000000 +887, 0.894007, 0.448054, 0.000000, 0.000000 +888, 0.893772, 0.448522, 0.000000, 0.000000 +889, 0.893537, 0.448990, 0.000000, 0.000000 +890, 0.893302, 0.449458, 0.000000, 0.000000 +891, 0.893066, 0.449926, 0.000000, 0.000000 +892, 0.892830, 0.450393, 0.000000, 0.000000 +893, 0.892594, 0.450861, 0.000000, 0.000000 +894, 0.892358, 0.451328, 0.000000, 0.000000 +895, 0.892121, 0.451796, 0.000000, 0.000000 +896, 0.891885, 0.452263, 0.000000, 0.000000 +897, 0.891648, 0.452730, 0.000000, 0.000000 +898, 0.891410, 0.453197, 0.000000, 0.000000 +899, 0.891173, 0.453664, 0.000000, 0.000000 +900, 0.890935, 0.454130, 0.000000, 0.000000 +901, 0.890697, 0.454597, 0.000000, 0.000000 +902, 0.890459, 0.455064, 0.000000, 0.000000 +903, 0.890220, 0.455530, 0.000000, 0.000000 +904, 0.889982, 0.455996, 0.000000, 0.000000 +905, 0.889743, 0.456462, 0.000000, 0.000000 +906, 0.889504, 0.456928, 0.000000, 0.000000 +907, 0.889264, 0.457394, 0.000000, 0.000000 +908, 0.889024, 0.457860, 0.000000, 0.000000 +909, 0.888785, 0.458325, 0.000000, 0.000000 +910, 0.888544, 0.458791, 0.000000, 0.000000 +911, 0.888304, 0.459256, 0.000000, 0.000000 +912, 0.888063, 0.459721, 0.000000, 0.000000 +913, 0.887822, 0.460186, 0.000000, 0.000000 +914, 0.887581, 0.460651, 0.000000, 0.000000 +915, 0.887340, 0.461116, 0.000000, 0.000000 +916, 0.887098, 0.461581, 0.000000, 0.000000 +917, 0.886856, 0.462045, 0.000000, 0.000000 +918, 0.886614, 0.462510, 0.000000, 0.000000 +919, 0.886372, 0.462974, 0.000000, 0.000000 +920, 0.886129, 0.463438, 0.000000, 0.000000 +921, 0.885886, 0.463902, 0.000000, 0.000000 +922, 0.885643, 0.464366, 0.000000, 0.000000 +923, 0.885400, 0.464830, 0.000000, 0.000000 +924, 0.885156, 0.465294, 0.000000, 0.000000 +925, 0.884912, 0.465757, 0.000000, 0.000000 +926, 0.884668, 0.466221, 0.000000, 0.000000 +927, 0.884424, 0.466684, 0.000000, 0.000000 +928, 0.884179, 0.467147, 0.000000, 0.000000 +929, 0.883935, 0.467610, 0.000000, 0.000000 +930, 0.883690, 0.468073, 0.000000, 0.000000 +931, 0.883444, 0.468536, 0.000000, 0.000000 +932, 0.883199, 0.468999, 0.000000, 0.000000 +933, 0.882953, 0.469461, 0.000000, 0.000000 +934, 0.882707, 0.469924, 0.000000, 0.000000 +935, 0.882461, 0.470386, 0.000000, 0.000000 +936, 0.882214, 0.470848, 0.000000, 0.000000 +937, 0.881968, 0.471310, 0.000000, 0.000000 +938, 0.881721, 0.471772, 0.000000, 0.000000 +939, 0.881473, 0.472234, 0.000000, 0.000000 +940, 0.881226, 0.472695, 0.000000, 0.000000 +941, 0.880978, 0.473157, 0.000000, 0.000000 +942, 0.880730, 0.473618, 0.000000, 0.000000 +943, 0.880482, 0.474079, 0.000000, 0.000000 +944, 0.880234, 0.474541, 0.000000, 0.000000 +945, 0.879985, 0.475002, 0.000000, 0.000000 +946, 0.879736, 0.475462, 0.000000, 0.000000 +947, 0.879487, 0.475923, 0.000000, 0.000000 +948, 0.879237, 0.476384, 0.000000, 0.000000 +949, 0.878988, 0.476844, 0.000000, 0.000000 +950, 0.878738, 0.477305, 0.000000, 0.000000 +951, 0.878488, 0.477765, 0.000000, 0.000000 +952, 0.878237, 0.478225, 0.000000, 0.000000 +953, 0.877987, 0.478685, 0.000000, 0.000000 +954, 0.877736, 0.479145, 0.000000, 0.000000 +955, 0.877485, 0.479604, 0.000000, 0.000000 +956, 0.877234, 0.480064, 0.000000, 0.000000 +957, 0.876982, 0.480523, 0.000000, 0.000000 +958, 0.876730, 0.480982, 0.000000, 0.000000 +959, 0.876478, 0.481442, 0.000000, 0.000000 +960, 0.876226, 0.481901, 0.000000, 0.000000 +961, 0.875973, 0.482359, 0.000000, 0.000000 +962, 0.875721, 0.482818, 0.000000, 0.000000 +963, 0.875468, 0.483277, 0.000000, 0.000000 +964, 0.875214, 0.483735, 0.000000, 0.000000 +965, 0.874961, 0.484194, 0.000000, 0.000000 +966, 0.874707, 0.484652, 0.000000, 0.000000 +967, 0.874453, 0.485110, 0.000000, 0.000000 +968, 0.874199, 0.485568, 0.000000, 0.000000 +969, 0.873945, 0.486026, 0.000000, 0.000000 +970, 0.873690, 0.486483, 0.000000, 0.000000 +971, 0.873435, 0.486941, 0.000000, 0.000000 +972, 0.873180, 0.487398, 0.000000, 0.000000 +973, 0.872924, 0.487856, 0.000000, 0.000000 +974, 0.872669, 0.488313, 0.000000, 0.000000 +975, 0.872413, 0.488770, 0.000000, 0.000000 +976, 0.872157, 0.489227, 0.000000, 0.000000 +977, 0.871900, 0.489683, 0.000000, 0.000000 +978, 0.871644, 0.490140, 0.000000, 0.000000 +979, 0.871387, 0.490596, 0.000000, 0.000000 +980, 0.871130, 0.491053, 0.000000, 0.000000 +981, 0.870872, 0.491509, 0.000000, 0.000000 +982, 0.870615, 0.491965, 0.000000, 0.000000 +983, 0.870357, 0.492421, 0.000000, 0.000000 +984, 0.870099, 0.492877, 0.000000, 0.000000 +985, 0.869841, 0.493332, 0.000000, 0.000000 +986, 0.869582, 0.493788, 0.000000, 0.000000 +987, 0.869324, 0.494243, 0.000000, 0.000000 +988, 0.869065, 0.494699, 0.000000, 0.000000 +989, 0.868805, 0.495154, 0.000000, 0.000000 +990, 0.868546, 0.495609, 0.000000, 0.000000 +991, 0.868286, 0.496064, 0.000000, 0.000000 +992, 0.868026, 0.496518, 0.000000, 0.000000 +993, 0.867766, 0.496973, 0.000000, 0.000000 +994, 0.867506, 0.497427, 0.000000, 0.000000 +995, 0.867245, 0.497882, 0.000000, 0.000000 +996, 0.866984, 0.498336, 0.000000, 0.000000 +997, 0.866723, 0.498790, 0.000000, 0.000000 +998, 0.866462, 0.499244, 0.000000, 0.000000 +999, 0.866200, 0.499698, 0.000000, 0.000000 +1000, 0.865938, 0.500151, 0.000000, 0.000000 +1001, 0.865676, 0.500605, 0.000000, 0.000000 +1002, 0.865414, 0.501058, 0.000000, 0.000000 +1003, 0.865151, 0.501511, 0.000000, 0.000000 +1004, 0.864888, 0.501964, 0.000000, 0.000000 +1005, 0.864625, 0.502417, 0.000000, 0.000000 +1006, 0.864362, 0.502870, 0.000000, 0.000000 +1007, 0.864099, 0.503323, 0.000000, 0.000000 +1008, 0.863835, 0.503775, 0.000000, 0.000000 +1009, 0.863571, 0.504228, 0.000000, 0.000000 +1010, 0.863307, 0.504680, 0.000000, 0.000000 +1011, 0.863042, 0.505132, 0.000000, 0.000000 +1012, 0.862777, 0.505584, 0.000000, 0.000000 +1013, 0.862512, 0.506036, 0.000000, 0.000000 +1014, 0.862247, 0.506487, 0.000000, 0.000000 +1015, 0.861982, 0.506939, 0.000000, 0.000000 +1016, 0.861716, 0.507390, 0.000000, 0.000000 +1017, 0.861450, 0.507842, 0.000000, 0.000000 +1018, 0.861184, 0.508293, 0.000000, 0.000000 +1019, 0.860918, 0.508744, 0.000000, 0.000000 +1020, 0.860651, 0.509195, 0.000000, 0.000000 +1021, 0.860385, 0.509645, 0.000000, 0.000000 +1022, 0.860117, 0.510096, 0.000000, 0.000000 +1023, 0.859850, 0.510546, 0.000000, 0.000000 +1024, 0.859583, 0.510997, 0.000000, 0.000000 +1025, 0.859315, 0.511447, 0.000000, 0.000000 +1026, 0.859047, 0.511897, 0.000000, 0.000000 +1027, 0.858779, 0.512347, 0.000000, 0.000000 +1028, 0.858510, 0.512797, 0.000000, 0.000000 +1029, 0.858241, 0.513246, 0.000000, 0.000000 +1030, 0.857973, 0.513696, 0.000000, 0.000000 +1031, 0.857703, 0.514145, 0.000000, 0.000000 +1032, 0.857434, 0.514594, 0.000000, 0.000000 +1033, 0.857164, 0.515043, 0.000000, 0.000000 +1034, 0.856894, 0.515492, 0.000000, 0.000000 +1035, 0.856624, 0.515941, 0.000000, 0.000000 +1036, 0.856354, 0.516389, 0.000000, 0.000000 +1037, 0.856083, 0.516838, 0.000000, 0.000000 +1038, 0.855813, 0.517286, 0.000000, 0.000000 +1039, 0.855541, 0.517734, 0.000000, 0.000000 +1040, 0.855270, 0.518182, 0.000000, 0.000000 +1041, 0.854999, 0.518630, 0.000000, 0.000000 +1042, 0.854727, 0.519078, 0.000000, 0.000000 +1043, 0.854455, 0.519526, 0.000000, 0.000000 +1044, 0.854183, 0.519973, 0.000000, 0.000000 +1045, 0.853910, 0.520420, 0.000000, 0.000000 +1046, 0.853638, 0.520868, 0.000000, 0.000000 +1047, 0.853365, 0.521315, 0.000000, 0.000000 +1048, 0.853091, 0.521761, 0.000000, 0.000000 +1049, 0.852818, 0.522208, 0.000000, 0.000000 +1050, 0.852544, 0.522655, 0.000000, 0.000000 +1051, 0.852270, 0.523101, 0.000000, 0.000000 +1052, 0.851996, 0.523548, 0.000000, 0.000000 +1053, 0.851722, 0.523994, 0.000000, 0.000000 +1054, 0.851447, 0.524440, 0.000000, 0.000000 +1055, 0.851173, 0.524886, 0.000000, 0.000000 +1056, 0.850898, 0.525332, 0.000000, 0.000000 +1057, 0.850622, 0.525777, 0.000000, 0.000000 +1058, 0.850347, 0.526223, 0.000000, 0.000000 +1059, 0.850071, 0.526668, 0.000000, 0.000000 +1060, 0.849795, 0.527113, 0.000000, 0.000000 +1061, 0.849519, 0.527558, 0.000000, 0.000000 +1062, 0.849243, 0.528003, 0.000000, 0.000000 +1063, 0.848966, 0.528448, 0.000000, 0.000000 +1064, 0.848689, 0.528892, 0.000000, 0.000000 +1065, 0.848412, 0.529337, 0.000000, 0.000000 +1066, 0.848134, 0.529781, 0.000000, 0.000000 +1067, 0.847857, 0.530225, 0.000000, 0.000000 +1068, 0.847579, 0.530669, 0.000000, 0.000000 +1069, 0.847301, 0.531113, 0.000000, 0.000000 +1070, 0.847023, 0.531557, 0.000000, 0.000000 +1071, 0.846744, 0.532000, 0.000000, 0.000000 +1072, 0.846465, 0.532444, 0.000000, 0.000000 +1073, 0.846186, 0.532887, 0.000000, 0.000000 +1074, 0.845907, 0.533330, 0.000000, 0.000000 +1075, 0.845628, 0.533773, 0.000000, 0.000000 +1076, 0.845348, 0.534216, 0.000000, 0.000000 +1077, 0.845068, 0.534659, 0.000000, 0.000000 +1078, 0.844788, 0.535101, 0.000000, 0.000000 +1079, 0.844507, 0.535544, 0.000000, 0.000000 +1080, 0.844227, 0.535986, 0.000000, 0.000000 +1081, 0.843946, 0.536428, 0.000000, 0.000000 +1082, 0.843665, 0.536870, 0.000000, 0.000000 +1083, 0.843384, 0.537312, 0.000000, 0.000000 +1084, 0.843102, 0.537754, 0.000000, 0.000000 +1085, 0.842820, 0.538195, 0.000000, 0.000000 +1086, 0.842538, 0.538636, 0.000000, 0.000000 +1087, 0.842256, 0.539078, 0.000000, 0.000000 +1088, 0.841974, 0.539519, 0.000000, 0.000000 +1089, 0.841691, 0.539960, 0.000000, 0.000000 +1090, 0.841408, 0.540400, 0.000000, 0.000000 +1091, 0.841125, 0.540841, 0.000000, 0.000000 +1092, 0.840841, 0.541282, 0.000000, 0.000000 +1093, 0.840558, 0.541722, 0.000000, 0.000000 +1094, 0.840274, 0.542162, 0.000000, 0.000000 +1095, 0.839990, 0.542602, 0.000000, 0.000000 +1096, 0.839706, 0.543042, 0.000000, 0.000000 +1097, 0.839421, 0.543482, 0.000000, 0.000000 +1098, 0.839136, 0.543921, 0.000000, 0.000000 +1099, 0.838851, 0.544361, 0.000000, 0.000000 +1100, 0.838566, 0.544800, 0.000000, 0.000000 +1101, 0.838280, 0.545239, 0.000000, 0.000000 +1102, 0.837995, 0.545678, 0.000000, 0.000000 +1103, 0.837709, 0.546117, 0.000000, 0.000000 +1104, 0.837423, 0.546556, 0.000000, 0.000000 +1105, 0.837136, 0.546994, 0.000000, 0.000000 +1106, 0.836850, 0.547433, 0.000000, 0.000000 +1107, 0.836563, 0.547871, 0.000000, 0.000000 +1108, 0.836276, 0.548309, 0.000000, 0.000000 +1109, 0.835988, 0.548747, 0.000000, 0.000000 +1110, 0.835701, 0.549185, 0.000000, 0.000000 +1111, 0.835413, 0.549622, 0.000000, 0.000000 +1112, 0.835125, 0.550060, 0.000000, 0.000000 +1113, 0.834837, 0.550497, 0.000000, 0.000000 +1114, 0.834549, 0.550934, 0.000000, 0.000000 +1115, 0.834260, 0.551371, 0.000000, 0.000000 +1116, 0.833971, 0.551808, 0.000000, 0.000000 +1117, 0.833682, 0.552245, 0.000000, 0.000000 +1118, 0.833392, 0.552682, 0.000000, 0.000000 +1119, 0.833103, 0.553118, 0.000000, 0.000000 +1120, 0.832813, 0.553554, 0.000000, 0.000000 +1121, 0.832523, 0.553991, 0.000000, 0.000000 +1122, 0.832233, 0.554427, 0.000000, 0.000000 +1123, 0.831942, 0.554862, 0.000000, 0.000000 +1124, 0.831651, 0.555298, 0.000000, 0.000000 +1125, 0.831360, 0.555734, 0.000000, 0.000000 +1126, 0.831069, 0.556169, 0.000000, 0.000000 +1127, 0.830778, 0.556604, 0.000000, 0.000000 +1128, 0.830486, 0.557039, 0.000000, 0.000000 +1129, 0.830194, 0.557474, 0.000000, 0.000000 +1130, 0.829902, 0.557909, 0.000000, 0.000000 +1131, 0.829610, 0.558343, 0.000000, 0.000000 +1132, 0.829317, 0.558778, 0.000000, 0.000000 +1133, 0.829025, 0.559212, 0.000000, 0.000000 +1134, 0.828732, 0.559646, 0.000000, 0.000000 +1135, 0.828438, 0.560080, 0.000000, 0.000000 +1136, 0.828145, 0.560514, 0.000000, 0.000000 +1137, 0.827851, 0.560948, 0.000000, 0.000000 +1138, 0.827557, 0.561381, 0.000000, 0.000000 +1139, 0.827263, 0.561815, 0.000000, 0.000000 +1140, 0.826969, 0.562248, 0.000000, 0.000000 +1141, 0.826674, 0.562681, 0.000000, 0.000000 +1142, 0.826379, 0.563114, 0.000000, 0.000000 +1143, 0.826084, 0.563547, 0.000000, 0.000000 +1144, 0.825789, 0.563979, 0.000000, 0.000000 +1145, 0.825493, 0.564412, 0.000000, 0.000000 +1146, 0.825198, 0.564844, 0.000000, 0.000000 +1147, 0.824902, 0.565276, 0.000000, 0.000000 +1148, 0.824606, 0.565708, 0.000000, 0.000000 +1149, 0.824309, 0.566140, 0.000000, 0.000000 +1150, 0.824012, 0.566572, 0.000000, 0.000000 +1151, 0.823716, 0.567003, 0.000000, 0.000000 +1152, 0.823418, 0.567435, 0.000000, 0.000000 +1153, 0.823121, 0.567866, 0.000000, 0.000000 +1154, 0.822824, 0.568297, 0.000000, 0.000000 +1155, 0.822526, 0.568728, 0.000000, 0.000000 +1156, 0.822228, 0.569158, 0.000000, 0.000000 +1157, 0.821930, 0.569589, 0.000000, 0.000000 +1158, 0.821631, 0.570019, 0.000000, 0.000000 +1159, 0.821333, 0.570450, 0.000000, 0.000000 +1160, 0.821034, 0.570880, 0.000000, 0.000000 +1161, 0.820734, 0.571310, 0.000000, 0.000000 +1162, 0.820435, 0.571740, 0.000000, 0.000000 +1163, 0.820136, 0.572169, 0.000000, 0.000000 +1164, 0.819836, 0.572599, 0.000000, 0.000000 +1165, 0.819536, 0.573028, 0.000000, 0.000000 +1166, 0.819235, 0.573457, 0.000000, 0.000000 +1167, 0.818935, 0.573886, 0.000000, 0.000000 +1168, 0.818634, 0.574315, 0.000000, 0.000000 +1169, 0.818333, 0.574744, 0.000000, 0.000000 +1170, 0.818032, 0.575172, 0.000000, 0.000000 +1171, 0.817731, 0.575601, 0.000000, 0.000000 +1172, 0.817429, 0.576029, 0.000000, 0.000000 +1173, 0.817127, 0.576457, 0.000000, 0.000000 +1174, 0.816825, 0.576885, 0.000000, 0.000000 +1175, 0.816523, 0.577313, 0.000000, 0.000000 +1176, 0.816221, 0.577740, 0.000000, 0.000000 +1177, 0.815918, 0.578168, 0.000000, 0.000000 +1178, 0.815615, 0.578595, 0.000000, 0.000000 +1179, 0.815312, 0.579022, 0.000000, 0.000000 +1180, 0.815008, 0.579449, 0.000000, 0.000000 +1181, 0.814705, 0.579876, 0.000000, 0.000000 +1182, 0.814401, 0.580303, 0.000000, 0.000000 +1183, 0.814097, 0.580729, 0.000000, 0.000000 +1184, 0.813793, 0.581155, 0.000000, 0.000000 +1185, 0.813488, 0.581581, 0.000000, 0.000000 +1186, 0.813183, 0.582008, 0.000000, 0.000000 +1187, 0.812878, 0.582433, 0.000000, 0.000000 +1188, 0.812573, 0.582859, 0.000000, 0.000000 +1189, 0.812268, 0.583285, 0.000000, 0.000000 +1190, 0.811962, 0.583710, 0.000000, 0.000000 +1191, 0.811656, 0.584135, 0.000000, 0.000000 +1192, 0.811350, 0.584560, 0.000000, 0.000000 +1193, 0.811044, 0.584985, 0.000000, 0.000000 +1194, 0.810738, 0.585410, 0.000000, 0.000000 +1195, 0.810431, 0.585834, 0.000000, 0.000000 +1196, 0.810124, 0.586259, 0.000000, 0.000000 +1197, 0.809817, 0.586683, 0.000000, 0.000000 +1198, 0.809509, 0.587107, 0.000000, 0.000000 +1199, 0.809202, 0.587531, 0.000000, 0.000000 +1200, 0.808894, 0.587955, 0.000000, 0.000000 +1201, 0.808586, 0.588378, 0.000000, 0.000000 +1202, 0.808277, 0.588802, 0.000000, 0.000000 +1203, 0.807969, 0.589225, 0.000000, 0.000000 +1204, 0.807660, 0.589648, 0.000000, 0.000000 +1205, 0.807351, 0.590071, 0.000000, 0.000000 +1206, 0.807042, 0.590494, 0.000000, 0.000000 +1207, 0.806733, 0.590917, 0.000000, 0.000000 +1208, 0.806423, 0.591339, 0.000000, 0.000000 +1209, 0.806113, 0.591761, 0.000000, 0.000000 +1210, 0.805803, 0.592183, 0.000000, 0.000000 +1211, 0.805493, 0.592605, 0.000000, 0.000000 +1212, 0.805182, 0.593027, 0.000000, 0.000000 +1213, 0.804872, 0.593449, 0.000000, 0.000000 +1214, 0.804561, 0.593870, 0.000000, 0.000000 +1215, 0.804250, 0.594292, 0.000000, 0.000000 +1216, 0.803938, 0.594713, 0.000000, 0.000000 +1217, 0.803627, 0.595134, 0.000000, 0.000000 +1218, 0.803315, 0.595555, 0.000000, 0.000000 +1219, 0.803003, 0.595975, 0.000000, 0.000000 +1220, 0.802690, 0.596396, 0.000000, 0.000000 +1221, 0.802378, 0.596816, 0.000000, 0.000000 +1222, 0.802065, 0.597236, 0.000000, 0.000000 +1223, 0.801752, 0.597656, 0.000000, 0.000000 +1224, 0.801439, 0.598076, 0.000000, 0.000000 +1225, 0.801126, 0.598496, 0.000000, 0.000000 +1226, 0.800812, 0.598915, 0.000000, 0.000000 +1227, 0.800498, 0.599335, 0.000000, 0.000000 +1228, 0.800184, 0.599754, 0.000000, 0.000000 +1229, 0.799870, 0.600173, 0.000000, 0.000000 +1230, 0.799556, 0.600592, 0.000000, 0.000000 +1231, 0.799241, 0.601011, 0.000000, 0.000000 +1232, 0.798926, 0.601429, 0.000000, 0.000000 +1233, 0.798611, 0.601848, 0.000000, 0.000000 +1234, 0.798296, 0.602266, 0.000000, 0.000000 +1235, 0.797980, 0.602684, 0.000000, 0.000000 +1236, 0.797664, 0.603102, 0.000000, 0.000000 +1237, 0.797348, 0.603519, 0.000000, 0.000000 +1238, 0.797032, 0.603937, 0.000000, 0.000000 +1239, 0.796716, 0.604354, 0.000000, 0.000000 +1240, 0.796399, 0.604772, 0.000000, 0.000000 +1241, 0.796082, 0.605189, 0.000000, 0.000000 +1242, 0.795765, 0.605605, 0.000000, 0.000000 +1243, 0.795448, 0.606022, 0.000000, 0.000000 +1244, 0.795130, 0.606439, 0.000000, 0.000000 +1245, 0.794812, 0.606855, 0.000000, 0.000000 +1246, 0.794494, 0.607271, 0.000000, 0.000000 +1247, 0.794176, 0.607687, 0.000000, 0.000000 +1248, 0.793858, 0.608103, 0.000000, 0.000000 +1249, 0.793539, 0.608519, 0.000000, 0.000000 +1250, 0.793220, 0.608935, 0.000000, 0.000000 +1251, 0.792901, 0.609350, 0.000000, 0.000000 +1252, 0.792582, 0.609765, 0.000000, 0.000000 +1253, 0.792263, 0.610180, 0.000000, 0.000000 +1254, 0.791943, 0.610595, 0.000000, 0.000000 +1255, 0.791623, 0.611010, 0.000000, 0.000000 +1256, 0.791303, 0.611424, 0.000000, 0.000000 +1257, 0.790983, 0.611839, 0.000000, 0.000000 +1258, 0.790662, 0.612253, 0.000000, 0.000000 +1259, 0.790341, 0.612667, 0.000000, 0.000000 +1260, 0.790020, 0.613081, 0.000000, 0.000000 +1261, 0.789699, 0.613495, 0.000000, 0.000000 +1262, 0.789377, 0.613908, 0.000000, 0.000000 +1263, 0.789056, 0.614321, 0.000000, 0.000000 +1264, 0.788734, 0.614735, 0.000000, 0.000000 +1265, 0.788412, 0.615148, 0.000000, 0.000000 +1266, 0.788090, 0.615561, 0.000000, 0.000000 +1267, 0.787767, 0.615973, 0.000000, 0.000000 +1268, 0.787444, 0.616386, 0.000000, 0.000000 +1269, 0.787121, 0.616798, 0.000000, 0.000000 +1270, 0.786798, 0.617210, 0.000000, 0.000000 +1271, 0.786475, 0.617622, 0.000000, 0.000000 +1272, 0.786151, 0.618034, 0.000000, 0.000000 +1273, 0.785827, 0.618446, 0.000000, 0.000000 +1274, 0.785503, 0.618857, 0.000000, 0.000000 +1275, 0.785179, 0.619269, 0.000000, 0.000000 +1276, 0.784855, 0.619680, 0.000000, 0.000000 +1277, 0.784530, 0.620091, 0.000000, 0.000000 +1278, 0.784205, 0.620502, 0.000000, 0.000000 +1279, 0.783880, 0.620912, 0.000000, 0.000000 +1280, 0.783555, 0.621323, 0.000000, 0.000000 +1281, 0.783229, 0.621733, 0.000000, 0.000000 +1282, 0.782903, 0.622143, 0.000000, 0.000000 +1283, 0.782577, 0.622553, 0.000000, 0.000000 +1284, 0.782251, 0.622963, 0.000000, 0.000000 +1285, 0.781925, 0.623373, 0.000000, 0.000000 +1286, 0.781598, 0.623782, 0.000000, 0.000000 +1287, 0.781271, 0.624192, 0.000000, 0.000000 +1288, 0.780944, 0.624601, 0.000000, 0.000000 +1289, 0.780617, 0.625010, 0.000000, 0.000000 +1290, 0.780290, 0.625418, 0.000000, 0.000000 +1291, 0.779962, 0.625827, 0.000000, 0.000000 +1292, 0.779634, 0.626235, 0.000000, 0.000000 +1293, 0.779306, 0.626644, 0.000000, 0.000000 +1294, 0.778978, 0.627052, 0.000000, 0.000000 +1295, 0.778649, 0.627460, 0.000000, 0.000000 +1296, 0.778320, 0.627867, 0.000000, 0.000000 +1297, 0.777991, 0.628275, 0.000000, 0.000000 +1298, 0.777662, 0.628682, 0.000000, 0.000000 +1299, 0.777333, 0.629090, 0.000000, 0.000000 +1300, 0.777003, 0.629497, 0.000000, 0.000000 +1301, 0.776673, 0.629904, 0.000000, 0.000000 +1302, 0.776343, 0.630310, 0.000000, 0.000000 +1303, 0.776013, 0.630717, 0.000000, 0.000000 +1304, 0.775683, 0.631123, 0.000000, 0.000000 +1305, 0.775352, 0.631529, 0.000000, 0.000000 +1306, 0.775021, 0.631935, 0.000000, 0.000000 +1307, 0.774690, 0.632341, 0.000000, 0.000000 +1308, 0.774359, 0.632747, 0.000000, 0.000000 +1309, 0.774027, 0.633153, 0.000000, 0.000000 +1310, 0.773695, 0.633558, 0.000000, 0.000000 +1311, 0.773363, 0.633963, 0.000000, 0.000000 +1312, 0.773031, 0.634368, 0.000000, 0.000000 +1313, 0.772699, 0.634773, 0.000000, 0.000000 +1314, 0.772366, 0.635177, 0.000000, 0.000000 +1315, 0.772033, 0.635582, 0.000000, 0.000000 +1316, 0.771700, 0.635986, 0.000000, 0.000000 +1317, 0.771367, 0.636390, 0.000000, 0.000000 +1318, 0.771034, 0.636794, 0.000000, 0.000000 +1319, 0.770700, 0.637198, 0.000000, 0.000000 +1320, 0.770366, 0.637602, 0.000000, 0.000000 +1321, 0.770032, 0.638005, 0.000000, 0.000000 +1322, 0.769698, 0.638408, 0.000000, 0.000000 +1323, 0.769363, 0.638811, 0.000000, 0.000000 +1324, 0.769029, 0.639214, 0.000000, 0.000000 +1325, 0.768694, 0.639617, 0.000000, 0.000000 +1326, 0.768359, 0.640019, 0.000000, 0.000000 +1327, 0.768023, 0.640422, 0.000000, 0.000000 +1328, 0.767688, 0.640824, 0.000000, 0.000000 +1329, 0.767352, 0.641226, 0.000000, 0.000000 +1330, 0.767016, 0.641628, 0.000000, 0.000000 +1331, 0.766680, 0.642029, 0.000000, 0.000000 +1332, 0.766344, 0.642431, 0.000000, 0.000000 +1333, 0.766007, 0.642832, 0.000000, 0.000000 +1334, 0.765670, 0.643233, 0.000000, 0.000000 +1335, 0.765333, 0.643634, 0.000000, 0.000000 +1336, 0.764996, 0.644035, 0.000000, 0.000000 +1337, 0.764659, 0.644436, 0.000000, 0.000000 +1338, 0.764321, 0.644836, 0.000000, 0.000000 +1339, 0.763983, 0.645236, 0.000000, 0.000000 +1340, 0.763645, 0.645636, 0.000000, 0.000000 +1341, 0.763307, 0.646036, 0.000000, 0.000000 +1342, 0.762968, 0.646436, 0.000000, 0.000000 +1343, 0.762630, 0.646835, 0.000000, 0.000000 +1344, 0.762291, 0.647235, 0.000000, 0.000000 +1345, 0.761952, 0.647634, 0.000000, 0.000000 +1346, 0.761612, 0.648033, 0.000000, 0.000000 +1347, 0.761273, 0.648432, 0.000000, 0.000000 +1348, 0.760933, 0.648830, 0.000000, 0.000000 +1349, 0.760593, 0.649229, 0.000000, 0.000000 +1350, 0.760253, 0.649627, 0.000000, 0.000000 +1351, 0.759913, 0.650025, 0.000000, 0.000000 +1352, 0.759572, 0.650423, 0.000000, 0.000000 +1353, 0.759231, 0.650821, 0.000000, 0.000000 +1354, 0.758890, 0.651219, 0.000000, 0.000000 +1355, 0.758549, 0.651616, 0.000000, 0.000000 +1356, 0.758208, 0.652013, 0.000000, 0.000000 +1357, 0.757866, 0.652410, 0.000000, 0.000000 +1358, 0.757524, 0.652807, 0.000000, 0.000000 +1359, 0.757182, 0.653204, 0.000000, 0.000000 +1360, 0.756840, 0.653600, 0.000000, 0.000000 +1361, 0.756497, 0.653997, 0.000000, 0.000000 +1362, 0.756155, 0.654393, 0.000000, 0.000000 +1363, 0.755812, 0.654789, 0.000000, 0.000000 +1364, 0.755469, 0.655185, 0.000000, 0.000000 +1365, 0.755126, 0.655580, 0.000000, 0.000000 +1366, 0.754782, 0.655976, 0.000000, 0.000000 +1367, 0.754438, 0.656371, 0.000000, 0.000000 +1368, 0.754095, 0.656766, 0.000000, 0.000000 +1369, 0.753750, 0.657161, 0.000000, 0.000000 +1370, 0.753406, 0.657555, 0.000000, 0.000000 +1371, 0.753062, 0.657950, 0.000000, 0.000000 +1372, 0.752717, 0.658344, 0.000000, 0.000000 +1373, 0.752372, 0.658739, 0.000000, 0.000000 +1374, 0.752027, 0.659132, 0.000000, 0.000000 +1375, 0.751682, 0.659526, 0.000000, 0.000000 +1376, 0.751336, 0.659920, 0.000000, 0.000000 +1377, 0.750990, 0.660313, 0.000000, 0.000000 +1378, 0.750644, 0.660707, 0.000000, 0.000000 +1379, 0.750298, 0.661100, 0.000000, 0.000000 +1380, 0.749952, 0.661493, 0.000000, 0.000000 +1381, 0.749605, 0.661885, 0.000000, 0.000000 +1382, 0.749258, 0.662278, 0.000000, 0.000000 +1383, 0.748911, 0.662670, 0.000000, 0.000000 +1384, 0.748564, 0.663062, 0.000000, 0.000000 +1385, 0.748217, 0.663454, 0.000000, 0.000000 +1386, 0.747869, 0.663846, 0.000000, 0.000000 +1387, 0.747521, 0.664238, 0.000000, 0.000000 +1388, 0.747173, 0.664629, 0.000000, 0.000000 +1389, 0.746825, 0.665020, 0.000000, 0.000000 +1390, 0.746477, 0.665412, 0.000000, 0.000000 +1391, 0.746128, 0.665802, 0.000000, 0.000000 +1392, 0.745779, 0.666193, 0.000000, 0.000000 +1393, 0.745430, 0.666584, 0.000000, 0.000000 +1394, 0.745081, 0.666974, 0.000000, 0.000000 +1395, 0.744732, 0.667364, 0.000000, 0.000000 +1396, 0.744382, 0.667754, 0.000000, 0.000000 +1397, 0.744032, 0.668144, 0.000000, 0.000000 +1398, 0.743682, 0.668534, 0.000000, 0.000000 +1399, 0.743332, 0.668923, 0.000000, 0.000000 +1400, 0.742981, 0.669312, 0.000000, 0.000000 +1401, 0.742631, 0.669701, 0.000000, 0.000000 +1402, 0.742280, 0.670090, 0.000000, 0.000000 +1403, 0.741929, 0.670479, 0.000000, 0.000000 +1404, 0.741577, 0.670867, 0.000000, 0.000000 +1405, 0.741226, 0.671256, 0.000000, 0.000000 +1406, 0.740874, 0.671644, 0.000000, 0.000000 +1407, 0.740522, 0.672032, 0.000000, 0.000000 +1408, 0.740170, 0.672420, 0.000000, 0.000000 +1409, 0.739818, 0.672807, 0.000000, 0.000000 +1410, 0.739465, 0.673195, 0.000000, 0.000000 +1411, 0.739113, 0.673582, 0.000000, 0.000000 +1412, 0.738760, 0.673969, 0.000000, 0.000000 +1413, 0.738407, 0.674356, 0.000000, 0.000000 +1414, 0.738053, 0.674742, 0.000000, 0.000000 +1415, 0.737700, 0.675129, 0.000000, 0.000000 +1416, 0.737346, 0.675515, 0.000000, 0.000000 +1417, 0.736992, 0.675901, 0.000000, 0.000000 +1418, 0.736638, 0.676287, 0.000000, 0.000000 +1419, 0.736284, 0.676673, 0.000000, 0.000000 +1420, 0.735929, 0.677058, 0.000000, 0.000000 +1421, 0.735575, 0.677444, 0.000000, 0.000000 +1422, 0.735220, 0.677829, 0.000000, 0.000000 +1423, 0.734864, 0.678214, 0.000000, 0.000000 +1424, 0.734509, 0.678599, 0.000000, 0.000000 +1425, 0.734154, 0.678983, 0.000000, 0.000000 +1426, 0.733798, 0.679368, 0.000000, 0.000000 +1427, 0.733442, 0.679752, 0.000000, 0.000000 +1428, 0.733086, 0.680136, 0.000000, 0.000000 +1429, 0.732729, 0.680520, 0.000000, 0.000000 +1430, 0.732373, 0.680904, 0.000000, 0.000000 +1431, 0.732016, 0.681287, 0.000000, 0.000000 +1432, 0.731659, 0.681671, 0.000000, 0.000000 +1433, 0.731302, 0.682054, 0.000000, 0.000000 +1434, 0.730945, 0.682437, 0.000000, 0.000000 +1435, 0.730587, 0.682819, 0.000000, 0.000000 +1436, 0.730229, 0.683202, 0.000000, 0.000000 +1437, 0.729872, 0.683584, 0.000000, 0.000000 +1438, 0.729513, 0.683967, 0.000000, 0.000000 +1439, 0.729155, 0.684349, 0.000000, 0.000000 +1440, 0.728797, 0.684730, 0.000000, 0.000000 +1441, 0.728438, 0.685112, 0.000000, 0.000000 +1442, 0.728079, 0.685493, 0.000000, 0.000000 +1443, 0.727720, 0.685875, 0.000000, 0.000000 +1444, 0.727360, 0.686256, 0.000000, 0.000000 +1445, 0.727001, 0.686637, 0.000000, 0.000000 +1446, 0.726641, 0.687017, 0.000000, 0.000000 +1447, 0.726281, 0.687398, 0.000000, 0.000000 +1448, 0.725921, 0.687778, 0.000000, 0.000000 +1449, 0.725561, 0.688158, 0.000000, 0.000000 +1450, 0.725200, 0.688538, 0.000000, 0.000000 +1451, 0.724839, 0.688918, 0.000000, 0.000000 +1452, 0.724478, 0.689297, 0.000000, 0.000000 +1453, 0.724117, 0.689677, 0.000000, 0.000000 +1454, 0.723756, 0.690056, 0.000000, 0.000000 +1455, 0.723394, 0.690435, 0.000000, 0.000000 +1456, 0.723033, 0.690814, 0.000000, 0.000000 +1457, 0.722671, 0.691192, 0.000000, 0.000000 +1458, 0.722309, 0.691571, 0.000000, 0.000000 +1459, 0.721946, 0.691949, 0.000000, 0.000000 +1460, 0.721584, 0.692327, 0.000000, 0.000000 +1461, 0.721221, 0.692705, 0.000000, 0.000000 +1462, 0.720858, 0.693083, 0.000000, 0.000000 +1463, 0.720495, 0.693460, 0.000000, 0.000000 +1464, 0.720132, 0.693837, 0.000000, 0.000000 +1465, 0.719768, 0.694214, 0.000000, 0.000000 +1466, 0.719404, 0.694591, 0.000000, 0.000000 +1467, 0.719041, 0.694968, 0.000000, 0.000000 +1468, 0.718676, 0.695345, 0.000000, 0.000000 +1469, 0.718312, 0.695721, 0.000000, 0.000000 +1470, 0.717948, 0.696097, 0.000000, 0.000000 +1471, 0.717583, 0.696473, 0.000000, 0.000000 +1472, 0.717218, 0.696849, 0.000000, 0.000000 +1473, 0.716853, 0.697224, 0.000000, 0.000000 +1474, 0.716488, 0.697600, 0.000000, 0.000000 +1475, 0.716122, 0.697975, 0.000000, 0.000000 +1476, 0.715757, 0.698350, 0.000000, 0.000000 +1477, 0.715391, 0.698725, 0.000000, 0.000000 +1478, 0.715025, 0.699099, 0.000000, 0.000000 +1479, 0.714658, 0.699474, 0.000000, 0.000000 +1480, 0.714292, 0.699848, 0.000000, 0.000000 +1481, 0.713925, 0.700222, 0.000000, 0.000000 +1482, 0.713558, 0.700596, 0.000000, 0.000000 +1483, 0.713191, 0.700969, 0.000000, 0.000000 +1484, 0.712824, 0.701343, 0.000000, 0.000000 +1485, 0.712457, 0.701716, 0.000000, 0.000000 +1486, 0.712089, 0.702089, 0.000000, 0.000000 +1487, 0.711721, 0.702462, 0.000000, 0.000000 +1488, 0.711353, 0.702835, 0.000000, 0.000000 +1489, 0.710985, 0.703207, 0.000000, 0.000000 +1490, 0.710616, 0.703580, 0.000000, 0.000000 +1491, 0.710248, 0.703952, 0.000000, 0.000000 +1492, 0.709879, 0.704324, 0.000000, 0.000000 +1493, 0.709510, 0.704695, 0.000000, 0.000000 +1494, 0.709141, 0.705067, 0.000000, 0.000000 +1495, 0.708771, 0.705438, 0.000000, 0.000000 +1496, 0.708402, 0.705809, 0.000000, 0.000000 +1497, 0.708032, 0.706180, 0.000000, 0.000000 +1498, 0.707662, 0.706551, 0.000000, 0.000000 +1499, 0.707292, 0.706922, 0.000000, 0.000000 +1500, 0.706922, 0.707292, 0.000000, 0.000000 +1501, 0.706551, 0.707662, 0.000000, 0.000000 +1502, 0.706180, 0.708032, 0.000000, 0.000000 +1503, 0.705809, 0.708402, 0.000000, 0.000000 +1504, 0.705438, 0.708771, 0.000000, 0.000000 +1505, 0.705067, 0.709141, 0.000000, 0.000000 +1506, 0.704695, 0.709510, 0.000000, 0.000000 +1507, 0.704324, 0.709879, 0.000000, 0.000000 +1508, 0.703952, 0.710248, 0.000000, 0.000000 +1509, 0.703580, 0.710616, 0.000000, 0.000000 +1510, 0.703207, 0.710985, 0.000000, 0.000000 +1511, 0.702835, 0.711353, 0.000000, 0.000000 +1512, 0.702462, 0.711721, 0.000000, 0.000000 +1513, 0.702089, 0.712089, 0.000000, 0.000000 +1514, 0.701716, 0.712457, 0.000000, 0.000000 +1515, 0.701343, 0.712824, 0.000000, 0.000000 +1516, 0.700969, 0.713191, 0.000000, 0.000000 +1517, 0.700596, 0.713558, 0.000000, 0.000000 +1518, 0.700222, 0.713925, 0.000000, 0.000000 +1519, 0.699848, 0.714292, 0.000000, 0.000000 +1520, 0.699474, 0.714658, 0.000000, 0.000000 +1521, 0.699099, 0.715025, 0.000000, 0.000000 +1522, 0.698725, 0.715391, 0.000000, 0.000000 +1523, 0.698350, 0.715757, 0.000000, 0.000000 +1524, 0.697975, 0.716122, 0.000000, 0.000000 +1525, 0.697600, 0.716488, 0.000000, 0.000000 +1526, 0.697224, 0.716853, 0.000000, 0.000000 +1527, 0.696849, 0.717218, 0.000000, 0.000000 +1528, 0.696473, 0.717583, 0.000000, 0.000000 +1529, 0.696097, 0.717948, 0.000000, 0.000000 +1530, 0.695721, 0.718312, 0.000000, 0.000000 +1531, 0.695345, 0.718676, 0.000000, 0.000000 +1532, 0.694968, 0.719041, 0.000000, 0.000000 +1533, 0.694591, 0.719404, 0.000000, 0.000000 +1534, 0.694214, 0.719768, 0.000000, 0.000000 +1535, 0.693837, 0.720132, 0.000000, 0.000000 +1536, 0.693460, 0.720495, 0.000000, 0.000000 +1537, 0.693083, 0.720858, 0.000000, 0.000000 +1538, 0.692705, 0.721221, 0.000000, 0.000000 +1539, 0.692327, 0.721584, 0.000000, 0.000000 +1540, 0.691949, 0.721946, 0.000000, 0.000000 +1541, 0.691571, 0.722309, 0.000000, 0.000000 +1542, 0.691192, 0.722671, 0.000000, 0.000000 +1543, 0.690814, 0.723033, 0.000000, 0.000000 +1544, 0.690435, 0.723394, 0.000000, 0.000000 +1545, 0.690056, 0.723756, 0.000000, 0.000000 +1546, 0.689677, 0.724117, 0.000000, 0.000000 +1547, 0.689297, 0.724478, 0.000000, 0.000000 +1548, 0.688918, 0.724839, 0.000000, 0.000000 +1549, 0.688538, 0.725200, 0.000000, 0.000000 +1550, 0.688158, 0.725561, 0.000000, 0.000000 +1551, 0.687778, 0.725921, 0.000000, 0.000000 +1552, 0.687398, 0.726281, 0.000000, 0.000000 +1553, 0.687017, 0.726641, 0.000000, 0.000000 +1554, 0.686637, 0.727001, 0.000000, 0.000000 +1555, 0.686256, 0.727360, 0.000000, 0.000000 +1556, 0.685875, 0.727720, 0.000000, 0.000000 +1557, 0.685493, 0.728079, 0.000000, 0.000000 +1558, 0.685112, 0.728438, 0.000000, 0.000000 +1559, 0.684730, 0.728797, 0.000000, 0.000000 +1560, 0.684349, 0.729155, 0.000000, 0.000000 +1561, 0.683967, 0.729513, 0.000000, 0.000000 +1562, 0.683584, 0.729872, 0.000000, 0.000000 +1563, 0.683202, 0.730229, 0.000000, 0.000000 +1564, 0.682819, 0.730587, 0.000000, 0.000000 +1565, 0.682437, 0.730945, 0.000000, 0.000000 +1566, 0.682054, 0.731302, 0.000000, 0.000000 +1567, 0.681671, 0.731659, 0.000000, 0.000000 +1568, 0.681287, 0.732016, 0.000000, 0.000000 +1569, 0.680904, 0.732373, 0.000000, 0.000000 +1570, 0.680520, 0.732729, 0.000000, 0.000000 +1571, 0.680136, 0.733086, 0.000000, 0.000000 +1572, 0.679752, 0.733442, 0.000000, 0.000000 +1573, 0.679368, 0.733798, 0.000000, 0.000000 +1574, 0.678983, 0.734154, 0.000000, 0.000000 +1575, 0.678599, 0.734509, 0.000000, 0.000000 +1576, 0.678214, 0.734864, 0.000000, 0.000000 +1577, 0.677829, 0.735220, 0.000000, 0.000000 +1578, 0.677444, 0.735575, 0.000000, 0.000000 +1579, 0.677058, 0.735929, 0.000000, 0.000000 +1580, 0.676673, 0.736284, 0.000000, 0.000000 +1581, 0.676287, 0.736638, 0.000000, 0.000000 +1582, 0.675901, 0.736992, 0.000000, 0.000000 +1583, 0.675515, 0.737346, 0.000000, 0.000000 +1584, 0.675129, 0.737700, 0.000000, 0.000000 +1585, 0.674742, 0.738053, 0.000000, 0.000000 +1586, 0.674356, 0.738407, 0.000000, 0.000000 +1587, 0.673969, 0.738760, 0.000000, 0.000000 +1588, 0.673582, 0.739113, 0.000000, 0.000000 +1589, 0.673195, 0.739465, 0.000000, 0.000000 +1590, 0.672807, 0.739818, 0.000000, 0.000000 +1591, 0.672420, 0.740170, 0.000000, 0.000000 +1592, 0.672032, 0.740522, 0.000000, 0.000000 +1593, 0.671644, 0.740874, 0.000000, 0.000000 +1594, 0.671256, 0.741226, 0.000000, 0.000000 +1595, 0.670867, 0.741577, 0.000000, 0.000000 +1596, 0.670479, 0.741929, 0.000000, 0.000000 +1597, 0.670090, 0.742280, 0.000000, 0.000000 +1598, 0.669701, 0.742631, 0.000000, 0.000000 +1599, 0.669312, 0.742981, 0.000000, 0.000000 +1600, 0.668923, 0.743332, 0.000000, 0.000000 +1601, 0.668534, 0.743682, 0.000000, 0.000000 +1602, 0.668144, 0.744032, 0.000000, 0.000000 +1603, 0.667754, 0.744382, 0.000000, 0.000000 +1604, 0.667364, 0.744732, 0.000000, 0.000000 +1605, 0.666974, 0.745081, 0.000000, 0.000000 +1606, 0.666584, 0.745430, 0.000000, 0.000000 +1607, 0.666193, 0.745779, 0.000000, 0.000000 +1608, 0.665802, 0.746128, 0.000000, 0.000000 +1609, 0.665412, 0.746477, 0.000000, 0.000000 +1610, 0.665020, 0.746825, 0.000000, 0.000000 +1611, 0.664629, 0.747173, 0.000000, 0.000000 +1612, 0.664238, 0.747521, 0.000000, 0.000000 +1613, 0.663846, 0.747869, 0.000000, 0.000000 +1614, 0.663454, 0.748217, 0.000000, 0.000000 +1615, 0.663062, 0.748564, 0.000000, 0.000000 +1616, 0.662670, 0.748911, 0.000000, 0.000000 +1617, 0.662278, 0.749258, 0.000000, 0.000000 +1618, 0.661885, 0.749605, 0.000000, 0.000000 +1619, 0.661493, 0.749952, 0.000000, 0.000000 +1620, 0.661100, 0.750298, 0.000000, 0.000000 +1621, 0.660707, 0.750644, 0.000000, 0.000000 +1622, 0.660313, 0.750990, 0.000000, 0.000000 +1623, 0.659920, 0.751336, 0.000000, 0.000000 +1624, 0.659526, 0.751682, 0.000000, 0.000000 +1625, 0.659132, 0.752027, 0.000000, 0.000000 +1626, 0.658739, 0.752372, 0.000000, 0.000000 +1627, 0.658344, 0.752717, 0.000000, 0.000000 +1628, 0.657950, 0.753062, 0.000000, 0.000000 +1629, 0.657555, 0.753406, 0.000000, 0.000000 +1630, 0.657161, 0.753750, 0.000000, 0.000000 +1631, 0.656766, 0.754095, 0.000000, 0.000000 +1632, 0.656371, 0.754438, 0.000000, 0.000000 +1633, 0.655976, 0.754782, 0.000000, 0.000000 +1634, 0.655580, 0.755126, 0.000000, 0.000000 +1635, 0.655185, 0.755469, 0.000000, 0.000000 +1636, 0.654789, 0.755812, 0.000000, 0.000000 +1637, 0.654393, 0.756155, 0.000000, 0.000000 +1638, 0.653997, 0.756497, 0.000000, 0.000000 +1639, 0.653600, 0.756840, 0.000000, 0.000000 +1640, 0.653204, 0.757182, 0.000000, 0.000000 +1641, 0.652807, 0.757524, 0.000000, 0.000000 +1642, 0.652410, 0.757866, 0.000000, 0.000000 +1643, 0.652013, 0.758208, 0.000000, 0.000000 +1644, 0.651616, 0.758549, 0.000000, 0.000000 +1645, 0.651219, 0.758890, 0.000000, 0.000000 +1646, 0.650821, 0.759231, 0.000000, 0.000000 +1647, 0.650423, 0.759572, 0.000000, 0.000000 +1648, 0.650025, 0.759913, 0.000000, 0.000000 +1649, 0.649627, 0.760253, 0.000000, 0.000000 +1650, 0.649229, 0.760593, 0.000000, 0.000000 +1651, 0.648830, 0.760933, 0.000000, 0.000000 +1652, 0.648432, 0.761273, 0.000000, 0.000000 +1653, 0.648033, 0.761612, 0.000000, 0.000000 +1654, 0.647634, 0.761952, 0.000000, 0.000000 +1655, 0.647235, 0.762291, 0.000000, 0.000000 +1656, 0.646835, 0.762630, 0.000000, 0.000000 +1657, 0.646436, 0.762968, 0.000000, 0.000000 +1658, 0.646036, 0.763307, 0.000000, 0.000000 +1659, 0.645636, 0.763645, 0.000000, 0.000000 +1660, 0.645236, 0.763983, 0.000000, 0.000000 +1661, 0.644836, 0.764321, 0.000000, 0.000000 +1662, 0.644436, 0.764659, 0.000000, 0.000000 +1663, 0.644035, 0.764996, 0.000000, 0.000000 +1664, 0.643634, 0.765333, 0.000000, 0.000000 +1665, 0.643233, 0.765670, 0.000000, 0.000000 +1666, 0.642832, 0.766007, 0.000000, 0.000000 +1667, 0.642431, 0.766344, 0.000000, 0.000000 +1668, 0.642029, 0.766680, 0.000000, 0.000000 +1669, 0.641628, 0.767016, 0.000000, 0.000000 +1670, 0.641226, 0.767352, 0.000000, 0.000000 +1671, 0.640824, 0.767688, 0.000000, 0.000000 +1672, 0.640422, 0.768023, 0.000000, 0.000000 +1673, 0.640019, 0.768359, 0.000000, 0.000000 +1674, 0.639617, 0.768694, 0.000000, 0.000000 +1675, 0.639214, 0.769029, 0.000000, 0.000000 +1676, 0.638811, 0.769363, 0.000000, 0.000000 +1677, 0.638408, 0.769698, 0.000000, 0.000000 +1678, 0.638005, 0.770032, 0.000000, 0.000000 +1679, 0.637602, 0.770366, 0.000000, 0.000000 +1680, 0.637198, 0.770700, 0.000000, 0.000000 +1681, 0.636794, 0.771034, 0.000000, 0.000000 +1682, 0.636390, 0.771367, 0.000000, 0.000000 +1683, 0.635986, 0.771700, 0.000000, 0.000000 +1684, 0.635582, 0.772033, 0.000000, 0.000000 +1685, 0.635177, 0.772366, 0.000000, 0.000000 +1686, 0.634773, 0.772699, 0.000000, 0.000000 +1687, 0.634368, 0.773031, 0.000000, 0.000000 +1688, 0.633963, 0.773363, 0.000000, 0.000000 +1689, 0.633558, 0.773695, 0.000000, 0.000000 +1690, 0.633153, 0.774027, 0.000000, 0.000000 +1691, 0.632747, 0.774359, 0.000000, 0.000000 +1692, 0.632341, 0.774690, 0.000000, 0.000000 +1693, 0.631935, 0.775021, 0.000000, 0.000000 +1694, 0.631529, 0.775352, 0.000000, 0.000000 +1695, 0.631123, 0.775683, 0.000000, 0.000000 +1696, 0.630717, 0.776013, 0.000000, 0.000000 +1697, 0.630310, 0.776343, 0.000000, 0.000000 +1698, 0.629904, 0.776673, 0.000000, 0.000000 +1699, 0.629497, 0.777003, 0.000000, 0.000000 +1700, 0.629090, 0.777333, 0.000000, 0.000000 +1701, 0.628682, 0.777662, 0.000000, 0.000000 +1702, 0.628275, 0.777991, 0.000000, 0.000000 +1703, 0.627867, 0.778320, 0.000000, 0.000000 +1704, 0.627460, 0.778649, 0.000000, 0.000000 +1705, 0.627052, 0.778978, 0.000000, 0.000000 +1706, 0.626644, 0.779306, 0.000000, 0.000000 +1707, 0.626235, 0.779634, 0.000000, 0.000000 +1708, 0.625827, 0.779962, 0.000000, 0.000000 +1709, 0.625418, 0.780290, 0.000000, 0.000000 +1710, 0.625010, 0.780617, 0.000000, 0.000000 +1711, 0.624601, 0.780944, 0.000000, 0.000000 +1712, 0.624192, 0.781271, 0.000000, 0.000000 +1713, 0.623782, 0.781598, 0.000000, 0.000000 +1714, 0.623373, 0.781925, 0.000000, 0.000000 +1715, 0.622963, 0.782251, 0.000000, 0.000000 +1716, 0.622553, 0.782577, 0.000000, 0.000000 +1717, 0.622143, 0.782903, 0.000000, 0.000000 +1718, 0.621733, 0.783229, 0.000000, 0.000000 +1719, 0.621323, 0.783555, 0.000000, 0.000000 +1720, 0.620912, 0.783880, 0.000000, 0.000000 +1721, 0.620502, 0.784205, 0.000000, 0.000000 +1722, 0.620091, 0.784530, 0.000000, 0.000000 +1723, 0.619680, 0.784855, 0.000000, 0.000000 +1724, 0.619269, 0.785179, 0.000000, 0.000000 +1725, 0.618857, 0.785503, 0.000000, 0.000000 +1726, 0.618446, 0.785827, 0.000000, 0.000000 +1727, 0.618034, 0.786151, 0.000000, 0.000000 +1728, 0.617622, 0.786475, 0.000000, 0.000000 +1729, 0.617210, 0.786798, 0.000000, 0.000000 +1730, 0.616798, 0.787121, 0.000000, 0.000000 +1731, 0.616386, 0.787444, 0.000000, 0.000000 +1732, 0.615973, 0.787767, 0.000000, 0.000000 +1733, 0.615561, 0.788090, 0.000000, 0.000000 +1734, 0.615148, 0.788412, 0.000000, 0.000000 +1735, 0.614735, 0.788734, 0.000000, 0.000000 +1736, 0.614321, 0.789056, 0.000000, 0.000000 +1737, 0.613908, 0.789377, 0.000000, 0.000000 +1738, 0.613495, 0.789699, 0.000000, 0.000000 +1739, 0.613081, 0.790020, 0.000000, 0.000000 +1740, 0.612667, 0.790341, 0.000000, 0.000000 +1741, 0.612253, 0.790662, 0.000000, 0.000000 +1742, 0.611839, 0.790983, 0.000000, 0.000000 +1743, 0.611424, 0.791303, 0.000000, 0.000000 +1744, 0.611010, 0.791623, 0.000000, 0.000000 +1745, 0.610595, 0.791943, 0.000000, 0.000000 +1746, 0.610180, 0.792263, 0.000000, 0.000000 +1747, 0.609765, 0.792582, 0.000000, 0.000000 +1748, 0.609350, 0.792901, 0.000000, 0.000000 +1749, 0.608935, 0.793220, 0.000000, 0.000000 +1750, 0.608519, 0.793539, 0.000000, 0.000000 +1751, 0.608103, 0.793858, 0.000000, 0.000000 +1752, 0.607687, 0.794176, 0.000000, 0.000000 +1753, 0.607271, 0.794494, 0.000000, 0.000000 +1754, 0.606855, 0.794812, 0.000000, 0.000000 +1755, 0.606439, 0.795130, 0.000000, 0.000000 +1756, 0.606022, 0.795448, 0.000000, 0.000000 +1757, 0.605605, 0.795765, 0.000000, 0.000000 +1758, 0.605189, 0.796082, 0.000000, 0.000000 +1759, 0.604772, 0.796399, 0.000000, 0.000000 +1760, 0.604354, 0.796716, 0.000000, 0.000000 +1761, 0.603937, 0.797032, 0.000000, 0.000000 +1762, 0.603519, 0.797348, 0.000000, 0.000000 +1763, 0.603102, 0.797664, 0.000000, 0.000000 +1764, 0.602684, 0.797980, 0.000000, 0.000000 +1765, 0.602266, 0.798296, 0.000000, 0.000000 +1766, 0.601848, 0.798611, 0.000000, 0.000000 +1767, 0.601429, 0.798926, 0.000000, 0.000000 +1768, 0.601011, 0.799241, 0.000000, 0.000000 +1769, 0.600592, 0.799556, 0.000000, 0.000000 +1770, 0.600173, 0.799870, 0.000000, 0.000000 +1771, 0.599754, 0.800184, 0.000000, 0.000000 +1772, 0.599335, 0.800498, 0.000000, 0.000000 +1773, 0.598915, 0.800812, 0.000000, 0.000000 +1774, 0.598496, 0.801126, 0.000000, 0.000000 +1775, 0.598076, 0.801439, 0.000000, 0.000000 +1776, 0.597656, 0.801752, 0.000000, 0.000000 +1777, 0.597236, 0.802065, 0.000000, 0.000000 +1778, 0.596816, 0.802378, 0.000000, 0.000000 +1779, 0.596396, 0.802690, 0.000000, 0.000000 +1780, 0.595975, 0.803003, 0.000000, 0.000000 +1781, 0.595555, 0.803315, 0.000000, 0.000000 +1782, 0.595134, 0.803627, 0.000000, 0.000000 +1783, 0.594713, 0.803938, 0.000000, 0.000000 +1784, 0.594292, 0.804250, 0.000000, 0.000000 +1785, 0.593870, 0.804561, 0.000000, 0.000000 +1786, 0.593449, 0.804872, 0.000000, 0.000000 +1787, 0.593027, 0.805182, 0.000000, 0.000000 +1788, 0.592605, 0.805493, 0.000000, 0.000000 +1789, 0.592183, 0.805803, 0.000000, 0.000000 +1790, 0.591761, 0.806113, 0.000000, 0.000000 +1791, 0.591339, 0.806423, 0.000000, 0.000000 +1792, 0.590917, 0.806733, 0.000000, 0.000000 +1793, 0.590494, 0.807042, 0.000000, 0.000000 +1794, 0.590071, 0.807351, 0.000000, 0.000000 +1795, 0.589648, 0.807660, 0.000000, 0.000000 +1796, 0.589225, 0.807969, 0.000000, 0.000000 +1797, 0.588802, 0.808277, 0.000000, 0.000000 +1798, 0.588378, 0.808586, 0.000000, 0.000000 +1799, 0.587955, 0.808894, 0.000000, 0.000000 +1800, 0.587531, 0.809202, 0.000000, 0.000000 +1801, 0.587107, 0.809509, 0.000000, 0.000000 +1802, 0.586683, 0.809817, 0.000000, 0.000000 +1803, 0.586259, 0.810124, 0.000000, 0.000000 +1804, 0.585834, 0.810431, 0.000000, 0.000000 +1805, 0.585410, 0.810738, 0.000000, 0.000000 +1806, 0.584985, 0.811044, 0.000000, 0.000000 +1807, 0.584560, 0.811350, 0.000000, 0.000000 +1808, 0.584135, 0.811656, 0.000000, 0.000000 +1809, 0.583710, 0.811962, 0.000000, 0.000000 +1810, 0.583285, 0.812268, 0.000000, 0.000000 +1811, 0.582859, 0.812573, 0.000000, 0.000000 +1812, 0.582433, 0.812878, 0.000000, 0.000000 +1813, 0.582008, 0.813183, 0.000000, 0.000000 +1814, 0.581581, 0.813488, 0.000000, 0.000000 +1815, 0.581155, 0.813793, 0.000000, 0.000000 +1816, 0.580729, 0.814097, 0.000000, 0.000000 +1817, 0.580303, 0.814401, 0.000000, 0.000000 +1818, 0.579876, 0.814705, 0.000000, 0.000000 +1819, 0.579449, 0.815008, 0.000000, 0.000000 +1820, 0.579022, 0.815312, 0.000000, 0.000000 +1821, 0.578595, 0.815615, 0.000000, 0.000000 +1822, 0.578168, 0.815918, 0.000000, 0.000000 +1823, 0.577740, 0.816221, 0.000000, 0.000000 +1824, 0.577313, 0.816523, 0.000000, 0.000000 +1825, 0.576885, 0.816825, 0.000000, 0.000000 +1826, 0.576457, 0.817127, 0.000000, 0.000000 +1827, 0.576029, 0.817429, 0.000000, 0.000000 +1828, 0.575601, 0.817731, 0.000000, 0.000000 +1829, 0.575172, 0.818032, 0.000000, 0.000000 +1830, 0.574744, 0.818333, 0.000000, 0.000000 +1831, 0.574315, 0.818634, 0.000000, 0.000000 +1832, 0.573886, 0.818935, 0.000000, 0.000000 +1833, 0.573457, 0.819235, 0.000000, 0.000000 +1834, 0.573028, 0.819536, 0.000000, 0.000000 +1835, 0.572599, 0.819836, 0.000000, 0.000000 +1836, 0.572169, 0.820136, 0.000000, 0.000000 +1837, 0.571740, 0.820435, 0.000000, 0.000000 +1838, 0.571310, 0.820734, 0.000000, 0.000000 +1839, 0.570880, 0.821034, 0.000000, 0.000000 +1840, 0.570450, 0.821333, 0.000000, 0.000000 +1841, 0.570019, 0.821631, 0.000000, 0.000000 +1842, 0.569589, 0.821930, 0.000000, 0.000000 +1843, 0.569158, 0.822228, 0.000000, 0.000000 +1844, 0.568728, 0.822526, 0.000000, 0.000000 +1845, 0.568297, 0.822824, 0.000000, 0.000000 +1846, 0.567866, 0.823121, 0.000000, 0.000000 +1847, 0.567435, 0.823418, 0.000000, 0.000000 +1848, 0.567003, 0.823716, 0.000000, 0.000000 +1849, 0.566572, 0.824012, 0.000000, 0.000000 +1850, 0.566140, 0.824309, 0.000000, 0.000000 +1851, 0.565708, 0.824606, 0.000000, 0.000000 +1852, 0.565276, 0.824902, 0.000000, 0.000000 +1853, 0.564844, 0.825198, 0.000000, 0.000000 +1854, 0.564412, 0.825493, 0.000000, 0.000000 +1855, 0.563979, 0.825789, 0.000000, 0.000000 +1856, 0.563547, 0.826084, 0.000000, 0.000000 +1857, 0.563114, 0.826379, 0.000000, 0.000000 +1858, 0.562681, 0.826674, 0.000000, 0.000000 +1859, 0.562248, 0.826969, 0.000000, 0.000000 +1860, 0.561815, 0.827263, 0.000000, 0.000000 +1861, 0.561381, 0.827557, 0.000000, 0.000000 +1862, 0.560948, 0.827851, 0.000000, 0.000000 +1863, 0.560514, 0.828145, 0.000000, 0.000000 +1864, 0.560080, 0.828438, 0.000000, 0.000000 +1865, 0.559646, 0.828732, 0.000000, 0.000000 +1866, 0.559212, 0.829025, 0.000000, 0.000000 +1867, 0.558778, 0.829317, 0.000000, 0.000000 +1868, 0.558343, 0.829610, 0.000000, 0.000000 +1869, 0.557909, 0.829902, 0.000000, 0.000000 +1870, 0.557474, 0.830194, 0.000000, 0.000000 +1871, 0.557039, 0.830486, 0.000000, 0.000000 +1872, 0.556604, 0.830778, 0.000000, 0.000000 +1873, 0.556169, 0.831069, 0.000000, 0.000000 +1874, 0.555734, 0.831360, 0.000000, 0.000000 +1875, 0.555298, 0.831651, 0.000000, 0.000000 +1876, 0.554862, 0.831942, 0.000000, 0.000000 +1877, 0.554427, 0.832233, 0.000000, 0.000000 +1878, 0.553991, 0.832523, 0.000000, 0.000000 +1879, 0.553554, 0.832813, 0.000000, 0.000000 +1880, 0.553118, 0.833103, 0.000000, 0.000000 +1881, 0.552682, 0.833392, 0.000000, 0.000000 +1882, 0.552245, 0.833682, 0.000000, 0.000000 +1883, 0.551808, 0.833971, 0.000000, 0.000000 +1884, 0.551371, 0.834260, 0.000000, 0.000000 +1885, 0.550934, 0.834549, 0.000000, 0.000000 +1886, 0.550497, 0.834837, 0.000000, 0.000000 +1887, 0.550060, 0.835125, 0.000000, 0.000000 +1888, 0.549622, 0.835413, 0.000000, 0.000000 +1889, 0.549185, 0.835701, 0.000000, 0.000000 +1890, 0.548747, 0.835988, 0.000000, 0.000000 +1891, 0.548309, 0.836276, 0.000000, 0.000000 +1892, 0.547871, 0.836563, 0.000000, 0.000000 +1893, 0.547433, 0.836850, 0.000000, 0.000000 +1894, 0.546994, 0.837136, 0.000000, 0.000000 +1895, 0.546556, 0.837423, 0.000000, 0.000000 +1896, 0.546117, 0.837709, 0.000000, 0.000000 +1897, 0.545678, 0.837995, 0.000000, 0.000000 +1898, 0.545239, 0.838280, 0.000000, 0.000000 +1899, 0.544800, 0.838566, 0.000000, 0.000000 +1900, 0.544361, 0.838851, 0.000000, 0.000000 +1901, 0.543921, 0.839136, 0.000000, 0.000000 +1902, 0.543482, 0.839421, 0.000000, 0.000000 +1903, 0.543042, 0.839706, 0.000000, 0.000000 +1904, 0.542602, 0.839990, 0.000000, 0.000000 +1905, 0.542162, 0.840274, 0.000000, 0.000000 +1906, 0.541722, 0.840558, 0.000000, 0.000000 +1907, 0.541282, 0.840841, 0.000000, 0.000000 +1908, 0.540841, 0.841125, 0.000000, 0.000000 +1909, 0.540400, 0.841408, 0.000000, 0.000000 +1910, 0.539960, 0.841691, 0.000000, 0.000000 +1911, 0.539519, 0.841974, 0.000000, 0.000000 +1912, 0.539078, 0.842256, 0.000000, 0.000000 +1913, 0.538636, 0.842538, 0.000000, 0.000000 +1914, 0.538195, 0.842820, 0.000000, 0.000000 +1915, 0.537754, 0.843102, 0.000000, 0.000000 +1916, 0.537312, 0.843384, 0.000000, 0.000000 +1917, 0.536870, 0.843665, 0.000000, 0.000000 +1918, 0.536428, 0.843946, 0.000000, 0.000000 +1919, 0.535986, 0.844227, 0.000000, 0.000000 +1920, 0.535544, 0.844507, 0.000000, 0.000000 +1921, 0.535101, 0.844788, 0.000000, 0.000000 +1922, 0.534659, 0.845068, 0.000000, 0.000000 +1923, 0.534216, 0.845348, 0.000000, 0.000000 +1924, 0.533773, 0.845628, 0.000000, 0.000000 +1925, 0.533330, 0.845907, 0.000000, 0.000000 +1926, 0.532887, 0.846186, 0.000000, 0.000000 +1927, 0.532444, 0.846465, 0.000000, 0.000000 +1928, 0.532000, 0.846744, 0.000000, 0.000000 +1929, 0.531557, 0.847023, 0.000000, 0.000000 +1930, 0.531113, 0.847301, 0.000000, 0.000000 +1931, 0.530669, 0.847579, 0.000000, 0.000000 +1932, 0.530225, 0.847857, 0.000000, 0.000000 +1933, 0.529781, 0.848134, 0.000000, 0.000000 +1934, 0.529337, 0.848412, 0.000000, 0.000000 +1935, 0.528892, 0.848689, 0.000000, 0.000000 +1936, 0.528448, 0.848966, 0.000000, 0.000000 +1937, 0.528003, 0.849243, 0.000000, 0.000000 +1938, 0.527558, 0.849519, 0.000000, 0.000000 +1939, 0.527113, 0.849795, 0.000000, 0.000000 +1940, 0.526668, 0.850071, 0.000000, 0.000000 +1941, 0.526223, 0.850347, 0.000000, 0.000000 +1942, 0.525777, 0.850622, 0.000000, 0.000000 +1943, 0.525332, 0.850898, 0.000000, 0.000000 +1944, 0.524886, 0.851173, 0.000000, 0.000000 +1945, 0.524440, 0.851447, 0.000000, 0.000000 +1946, 0.523994, 0.851722, 0.000000, 0.000000 +1947, 0.523548, 0.851996, 0.000000, 0.000000 +1948, 0.523101, 0.852270, 0.000000, 0.000000 +1949, 0.522655, 0.852544, 0.000000, 0.000000 +1950, 0.522208, 0.852818, 0.000000, 0.000000 +1951, 0.521761, 0.853091, 0.000000, 0.000000 +1952, 0.521315, 0.853365, 0.000000, 0.000000 +1953, 0.520868, 0.853638, 0.000000, 0.000000 +1954, 0.520420, 0.853910, 0.000000, 0.000000 +1955, 0.519973, 0.854183, 0.000000, 0.000000 +1956, 0.519526, 0.854455, 0.000000, 0.000000 +1957, 0.519078, 0.854727, 0.000000, 0.000000 +1958, 0.518630, 0.854999, 0.000000, 0.000000 +1959, 0.518182, 0.855270, 0.000000, 0.000000 +1960, 0.517734, 0.855541, 0.000000, 0.000000 +1961, 0.517286, 0.855813, 0.000000, 0.000000 +1962, 0.516838, 0.856083, 0.000000, 0.000000 +1963, 0.516389, 0.856354, 0.000000, 0.000000 +1964, 0.515941, 0.856624, 0.000000, 0.000000 +1965, 0.515492, 0.856894, 0.000000, 0.000000 +1966, 0.515043, 0.857164, 0.000000, 0.000000 +1967, 0.514594, 0.857434, 0.000000, 0.000000 +1968, 0.514145, 0.857703, 0.000000, 0.000000 +1969, 0.513696, 0.857973, 0.000000, 0.000000 +1970, 0.513246, 0.858241, 0.000000, 0.000000 +1971, 0.512797, 0.858510, 0.000000, 0.000000 +1972, 0.512347, 0.858779, 0.000000, 0.000000 +1973, 0.511897, 0.859047, 0.000000, 0.000000 +1974, 0.511447, 0.859315, 0.000000, 0.000000 +1975, 0.510997, 0.859583, 0.000000, 0.000000 +1976, 0.510546, 0.859850, 0.000000, 0.000000 +1977, 0.510096, 0.860117, 0.000000, 0.000000 +1978, 0.509645, 0.860385, 0.000000, 0.000000 +1979, 0.509195, 0.860651, 0.000000, 0.000000 +1980, 0.508744, 0.860918, 0.000000, 0.000000 +1981, 0.508293, 0.861184, 0.000000, 0.000000 +1982, 0.507842, 0.861450, 0.000000, 0.000000 +1983, 0.507390, 0.861716, 0.000000, 0.000000 +1984, 0.506939, 0.861982, 0.000000, 0.000000 +1985, 0.506487, 0.862247, 0.000000, 0.000000 +1986, 0.506036, 0.862512, 0.000000, 0.000000 +1987, 0.505584, 0.862777, 0.000000, 0.000000 +1988, 0.505132, 0.863042, 0.000000, 0.000000 +1989, 0.504680, 0.863307, 0.000000, 0.000000 +1990, 0.504228, 0.863571, 0.000000, 0.000000 +1991, 0.503775, 0.863835, 0.000000, 0.000000 +1992, 0.503323, 0.864099, 0.000000, 0.000000 +1993, 0.502870, 0.864362, 0.000000, 0.000000 +1994, 0.502417, 0.864625, 0.000000, 0.000000 +1995, 0.501964, 0.864888, 0.000000, 0.000000 +1996, 0.501511, 0.865151, 0.000000, 0.000000 +1997, 0.501058, 0.865414, 0.000000, 0.000000 +1998, 0.500605, 0.865676, 0.000000, 0.000000 +1999, 0.500151, 0.865938, 0.000000, 0.000000 +2000, 0.499698, 0.866200, 0.000000, 0.000000 +2001, 0.499244, 0.866462, 0.000000, 0.000000 +2002, 0.498790, 0.866723, 0.000000, 0.000000 +2003, 0.498336, 0.866984, 0.000000, 0.000000 +2004, 0.497882, 0.867245, 0.000000, 0.000000 +2005, 0.497427, 0.867506, 0.000000, 0.000000 +2006, 0.496973, 0.867766, 0.000000, 0.000000 +2007, 0.496518, 0.868026, 0.000000, 0.000000 +2008, 0.496064, 0.868286, 0.000000, 0.000000 +2009, 0.495609, 0.868546, 0.000000, 0.000000 +2010, 0.495154, 0.868805, 0.000000, 0.000000 +2011, 0.494699, 0.869065, 0.000000, 0.000000 +2012, 0.494243, 0.869324, 0.000000, 0.000000 +2013, 0.493788, 0.869582, 0.000000, 0.000000 +2014, 0.493332, 0.869841, 0.000000, 0.000000 +2015, 0.492877, 0.870099, 0.000000, 0.000000 +2016, 0.492421, 0.870357, 0.000000, 0.000000 +2017, 0.491965, 0.870615, 0.000000, 0.000000 +2018, 0.491509, 0.870872, 0.000000, 0.000000 +2019, 0.491053, 0.871130, 0.000000, 0.000000 +2020, 0.490596, 0.871387, 0.000000, 0.000000 +2021, 0.490140, 0.871644, 0.000000, 0.000000 +2022, 0.489683, 0.871900, 0.000000, 0.000000 +2023, 0.489227, 0.872157, 0.000000, 0.000000 +2024, 0.488770, 0.872413, 0.000000, 0.000000 +2025, 0.488313, 0.872669, 0.000000, 0.000000 +2026, 0.487856, 0.872924, 0.000000, 0.000000 +2027, 0.487398, 0.873180, 0.000000, 0.000000 +2028, 0.486941, 0.873435, 0.000000, 0.000000 +2029, 0.486483, 0.873690, 0.000000, 0.000000 +2030, 0.486026, 0.873945, 0.000000, 0.000000 +2031, 0.485568, 0.874199, 0.000000, 0.000000 +2032, 0.485110, 0.874453, 0.000000, 0.000000 +2033, 0.484652, 0.874707, 0.000000, 0.000000 +2034, 0.484194, 0.874961, 0.000000, 0.000000 +2035, 0.483735, 0.875214, 0.000000, 0.000000 +2036, 0.483277, 0.875468, 0.000000, 0.000000 +2037, 0.482818, 0.875721, 0.000000, 0.000000 +2038, 0.482359, 0.875973, 0.000000, 0.000000 +2039, 0.481901, 0.876226, 0.000000, 0.000000 +2040, 0.481442, 0.876478, 0.000000, 0.000000 +2041, 0.480982, 0.876730, 0.000000, 0.000000 +2042, 0.480523, 0.876982, 0.000000, 0.000000 +2043, 0.480064, 0.877234, 0.000000, 0.000000 +2044, 0.479604, 0.877485, 0.000000, 0.000000 +2045, 0.479145, 0.877736, 0.000000, 0.000000 +2046, 0.478685, 0.877987, 0.000000, 0.000000 +2047, 0.478225, 0.878237, 0.000000, 0.000000 +2048, 0.477765, 0.878488, 0.000000, 0.000000 +2049, 0.477305, 0.878738, 0.000000, 0.000000 +2050, 0.476844, 0.878988, 0.000000, 0.000000 +2051, 0.476384, 0.879237, 0.000000, 0.000000 +2052, 0.475923, 0.879487, 0.000000, 0.000000 +2053, 0.475462, 0.879736, 0.000000, 0.000000 +2054, 0.475002, 0.879985, 0.000000, 0.000000 +2055, 0.474541, 0.880234, 0.000000, 0.000000 +2056, 0.474079, 0.880482, 0.000000, 0.000000 +2057, 0.473618, 0.880730, 0.000000, 0.000000 +2058, 0.473157, 0.880978, 0.000000, 0.000000 +2059, 0.472695, 0.881226, 0.000000, 0.000000 +2060, 0.472234, 0.881473, 0.000000, 0.000000 +2061, 0.471772, 0.881721, 0.000000, 0.000000 +2062, 0.471310, 0.881968, 0.000000, 0.000000 +2063, 0.470848, 0.882214, 0.000000, 0.000000 +2064, 0.470386, 0.882461, 0.000000, 0.000000 +2065, 0.469924, 0.882707, 0.000000, 0.000000 +2066, 0.469461, 0.882953, 0.000000, 0.000000 +2067, 0.468999, 0.883199, 0.000000, 0.000000 +2068, 0.468536, 0.883444, 0.000000, 0.000000 +2069, 0.468073, 0.883690, 0.000000, 0.000000 +2070, 0.467610, 0.883935, 0.000000, 0.000000 +2071, 0.467147, 0.884179, 0.000000, 0.000000 +2072, 0.466684, 0.884424, 0.000000, 0.000000 +2073, 0.466221, 0.884668, 0.000000, 0.000000 +2074, 0.465757, 0.884912, 0.000000, 0.000000 +2075, 0.465294, 0.885156, 0.000000, 0.000000 +2076, 0.464830, 0.885400, 0.000000, 0.000000 +2077, 0.464366, 0.885643, 0.000000, 0.000000 +2078, 0.463902, 0.885886, 0.000000, 0.000000 +2079, 0.463438, 0.886129, 0.000000, 0.000000 +2080, 0.462974, 0.886372, 0.000000, 0.000000 +2081, 0.462510, 0.886614, 0.000000, 0.000000 +2082, 0.462045, 0.886856, 0.000000, 0.000000 +2083, 0.461581, 0.887098, 0.000000, 0.000000 +2084, 0.461116, 0.887340, 0.000000, 0.000000 +2085, 0.460651, 0.887581, 0.000000, 0.000000 +2086, 0.460186, 0.887822, 0.000000, 0.000000 +2087, 0.459721, 0.888063, 0.000000, 0.000000 +2088, 0.459256, 0.888304, 0.000000, 0.000000 +2089, 0.458791, 0.888544, 0.000000, 0.000000 +2090, 0.458325, 0.888785, 0.000000, 0.000000 +2091, 0.457860, 0.889024, 0.000000, 0.000000 +2092, 0.457394, 0.889264, 0.000000, 0.000000 +2093, 0.456928, 0.889504, 0.000000, 0.000000 +2094, 0.456462, 0.889743, 0.000000, 0.000000 +2095, 0.455996, 0.889982, 0.000000, 0.000000 +2096, 0.455530, 0.890220, 0.000000, 0.000000 +2097, 0.455064, 0.890459, 0.000000, 0.000000 +2098, 0.454597, 0.890697, 0.000000, 0.000000 +2099, 0.454130, 0.890935, 0.000000, 0.000000 +2100, 0.453664, 0.891173, 0.000000, 0.000000 +2101, 0.453197, 0.891410, 0.000000, 0.000000 +2102, 0.452730, 0.891648, 0.000000, 0.000000 +2103, 0.452263, 0.891885, 0.000000, 0.000000 +2104, 0.451796, 0.892121, 0.000000, 0.000000 +2105, 0.451328, 0.892358, 0.000000, 0.000000 +2106, 0.450861, 0.892594, 0.000000, 0.000000 +2107, 0.450393, 0.892830, 0.000000, 0.000000 +2108, 0.449926, 0.893066, 0.000000, 0.000000 +2109, 0.449458, 0.893302, 0.000000, 0.000000 +2110, 0.448990, 0.893537, 0.000000, 0.000000 +2111, 0.448522, 0.893772, 0.000000, 0.000000 +2112, 0.448054, 0.894007, 0.000000, 0.000000 +2113, 0.447585, 0.894241, 0.000000, 0.000000 +2114, 0.447117, 0.894476, 0.000000, 0.000000 +2115, 0.446648, 0.894710, 0.000000, 0.000000 +2116, 0.446180, 0.894943, 0.000000, 0.000000 +2117, 0.445711, 0.895177, 0.000000, 0.000000 +2118, 0.445242, 0.895410, 0.000000, 0.000000 +2119, 0.444773, 0.895643, 0.000000, 0.000000 +2120, 0.444304, 0.895876, 0.000000, 0.000000 +2121, 0.443834, 0.896109, 0.000000, 0.000000 +2122, 0.443365, 0.896341, 0.000000, 0.000000 +2123, 0.442895, 0.896573, 0.000000, 0.000000 +2124, 0.442426, 0.896805, 0.000000, 0.000000 +2125, 0.441956, 0.897037, 0.000000, 0.000000 +2126, 0.441486, 0.897268, 0.000000, 0.000000 +2127, 0.441016, 0.897499, 0.000000, 0.000000 +2128, 0.440546, 0.897730, 0.000000, 0.000000 +2129, 0.440076, 0.897961, 0.000000, 0.000000 +2130, 0.439605, 0.898191, 0.000000, 0.000000 +2131, 0.439135, 0.898421, 0.000000, 0.000000 +2132, 0.438664, 0.898651, 0.000000, 0.000000 +2133, 0.438193, 0.898881, 0.000000, 0.000000 +2134, 0.437722, 0.899110, 0.000000, 0.000000 +2135, 0.437251, 0.899339, 0.000000, 0.000000 +2136, 0.436780, 0.899568, 0.000000, 0.000000 +2137, 0.436309, 0.899797, 0.000000, 0.000000 +2138, 0.435838, 0.900025, 0.000000, 0.000000 +2139, 0.435366, 0.900253, 0.000000, 0.000000 +2140, 0.434895, 0.900481, 0.000000, 0.000000 +2141, 0.434423, 0.900709, 0.000000, 0.000000 +2142, 0.433951, 0.900936, 0.000000, 0.000000 +2143, 0.433479, 0.901164, 0.000000, 0.000000 +2144, 0.433007, 0.901390, 0.000000, 0.000000 +2145, 0.432535, 0.901617, 0.000000, 0.000000 +2146, 0.432063, 0.901844, 0.000000, 0.000000 +2147, 0.431590, 0.902070, 0.000000, 0.000000 +2148, 0.431118, 0.902296, 0.000000, 0.000000 +2149, 0.430645, 0.902521, 0.000000, 0.000000 +2150, 0.430172, 0.902747, 0.000000, 0.000000 +2151, 0.429699, 0.902972, 0.000000, 0.000000 +2152, 0.429226, 0.903197, 0.000000, 0.000000 +2153, 0.428753, 0.903422, 0.000000, 0.000000 +2154, 0.428280, 0.903646, 0.000000, 0.000000 +2155, 0.427807, 0.903870, 0.000000, 0.000000 +2156, 0.427333, 0.904094, 0.000000, 0.000000 +2157, 0.426860, 0.904318, 0.000000, 0.000000 +2158, 0.426386, 0.904541, 0.000000, 0.000000 +2159, 0.425912, 0.904765, 0.000000, 0.000000 +2160, 0.425438, 0.904988, 0.000000, 0.000000 +2161, 0.424964, 0.905210, 0.000000, 0.000000 +2162, 0.424490, 0.905433, 0.000000, 0.000000 +2163, 0.424015, 0.905655, 0.000000, 0.000000 +2164, 0.423541, 0.905877, 0.000000, 0.000000 +2165, 0.423067, 0.906099, 0.000000, 0.000000 +2166, 0.422592, 0.906320, 0.000000, 0.000000 +2167, 0.422117, 0.906541, 0.000000, 0.000000 +2168, 0.421642, 0.906762, 0.000000, 0.000000 +2169, 0.421167, 0.906983, 0.000000, 0.000000 +2170, 0.420692, 0.907203, 0.000000, 0.000000 +2171, 0.420217, 0.907424, 0.000000, 0.000000 +2172, 0.419742, 0.907644, 0.000000, 0.000000 +2173, 0.419266, 0.907863, 0.000000, 0.000000 +2174, 0.418791, 0.908083, 0.000000, 0.000000 +2175, 0.418315, 0.908302, 0.000000, 0.000000 +2176, 0.417839, 0.908521, 0.000000, 0.000000 +2177, 0.417363, 0.908740, 0.000000, 0.000000 +2178, 0.416887, 0.908958, 0.000000, 0.000000 +2179, 0.416411, 0.909177, 0.000000, 0.000000 +2180, 0.415935, 0.909394, 0.000000, 0.000000 +2181, 0.415458, 0.909612, 0.000000, 0.000000 +2182, 0.414982, 0.909830, 0.000000, 0.000000 +2183, 0.414505, 0.910047, 0.000000, 0.000000 +2184, 0.414029, 0.910264, 0.000000, 0.000000 +2185, 0.413552, 0.910481, 0.000000, 0.000000 +2186, 0.413075, 0.910697, 0.000000, 0.000000 +2187, 0.412598, 0.910913, 0.000000, 0.000000 +2188, 0.412121, 0.911129, 0.000000, 0.000000 +2189, 0.411643, 0.911345, 0.000000, 0.000000 +2190, 0.411166, 0.911561, 0.000000, 0.000000 +2191, 0.410688, 0.911776, 0.000000, 0.000000 +2192, 0.410211, 0.911991, 0.000000, 0.000000 +2193, 0.409733, 0.912206, 0.000000, 0.000000 +2194, 0.409255, 0.912420, 0.000000, 0.000000 +2195, 0.408777, 0.912634, 0.000000, 0.000000 +2196, 0.408299, 0.912848, 0.000000, 0.000000 +2197, 0.407821, 0.913062, 0.000000, 0.000000 +2198, 0.407343, 0.913275, 0.000000, 0.000000 +2199, 0.406864, 0.913489, 0.000000, 0.000000 +2200, 0.406386, 0.913702, 0.000000, 0.000000 +2201, 0.405907, 0.913914, 0.000000, 0.000000 +2202, 0.405428, 0.914127, 0.000000, 0.000000 +2203, 0.404950, 0.914339, 0.000000, 0.000000 +2204, 0.404471, 0.914551, 0.000000, 0.000000 +2205, 0.403991, 0.914763, 0.000000, 0.000000 +2206, 0.403512, 0.914974, 0.000000, 0.000000 +2207, 0.403033, 0.915185, 0.000000, 0.000000 +2208, 0.402554, 0.915396, 0.000000, 0.000000 +2209, 0.402074, 0.915607, 0.000000, 0.000000 +2210, 0.401594, 0.915818, 0.000000, 0.000000 +2211, 0.401115, 0.916028, 0.000000, 0.000000 +2212, 0.400635, 0.916238, 0.000000, 0.000000 +2213, 0.400155, 0.916448, 0.000000, 0.000000 +2214, 0.399675, 0.916657, 0.000000, 0.000000 +2215, 0.399195, 0.916866, 0.000000, 0.000000 +2216, 0.398714, 0.917075, 0.000000, 0.000000 +2217, 0.398234, 0.917284, 0.000000, 0.000000 +2218, 0.397753, 0.917492, 0.000000, 0.000000 +2219, 0.397273, 0.917701, 0.000000, 0.000000 +2220, 0.396792, 0.917908, 0.000000, 0.000000 +2221, 0.396311, 0.918116, 0.000000, 0.000000 +2222, 0.395830, 0.918324, 0.000000, 0.000000 +2223, 0.395349, 0.918531, 0.000000, 0.000000 +2224, 0.394868, 0.918738, 0.000000, 0.000000 +2225, 0.394387, 0.918944, 0.000000, 0.000000 +2226, 0.393906, 0.919151, 0.000000, 0.000000 +2227, 0.393424, 0.919357, 0.000000, 0.000000 +2228, 0.392942, 0.919563, 0.000000, 0.000000 +2229, 0.392461, 0.919769, 0.000000, 0.000000 +2230, 0.391979, 0.919974, 0.000000, 0.000000 +2231, 0.391497, 0.920179, 0.000000, 0.000000 +2232, 0.391015, 0.920384, 0.000000, 0.000000 +2233, 0.390533, 0.920589, 0.000000, 0.000000 +2234, 0.390051, 0.920793, 0.000000, 0.000000 +2235, 0.389568, 0.920998, 0.000000, 0.000000 +2236, 0.389086, 0.921201, 0.000000, 0.000000 +2237, 0.388603, 0.921405, 0.000000, 0.000000 +2238, 0.388121, 0.921609, 0.000000, 0.000000 +2239, 0.387638, 0.921812, 0.000000, 0.000000 +2240, 0.387155, 0.922015, 0.000000, 0.000000 +2241, 0.386672, 0.922217, 0.000000, 0.000000 +2242, 0.386189, 0.922420, 0.000000, 0.000000 +2243, 0.385706, 0.922622, 0.000000, 0.000000 +2244, 0.385222, 0.922824, 0.000000, 0.000000 +2245, 0.384739, 0.923025, 0.000000, 0.000000 +2246, 0.384256, 0.923227, 0.000000, 0.000000 +2247, 0.383772, 0.923428, 0.000000, 0.000000 +2248, 0.383288, 0.923629, 0.000000, 0.000000 +2249, 0.382804, 0.923829, 0.000000, 0.000000 +2250, 0.382320, 0.924030, 0.000000, 0.000000 +2251, 0.381836, 0.924230, 0.000000, 0.000000 +2252, 0.381352, 0.924430, 0.000000, 0.000000 +2253, 0.380868, 0.924629, 0.000000, 0.000000 +2254, 0.380384, 0.924829, 0.000000, 0.000000 +2255, 0.379899, 0.925028, 0.000000, 0.000000 +2256, 0.379415, 0.925227, 0.000000, 0.000000 +2257, 0.378930, 0.925425, 0.000000, 0.000000 +2258, 0.378445, 0.925624, 0.000000, 0.000000 +2259, 0.377960, 0.925822, 0.000000, 0.000000 +2260, 0.377475, 0.926020, 0.000000, 0.000000 +2261, 0.376990, 0.926217, 0.000000, 0.000000 +2262, 0.376505, 0.926415, 0.000000, 0.000000 +2263, 0.376020, 0.926612, 0.000000, 0.000000 +2264, 0.375535, 0.926808, 0.000000, 0.000000 +2265, 0.375049, 0.927005, 0.000000, 0.000000 +2266, 0.374563, 0.927201, 0.000000, 0.000000 +2267, 0.374078, 0.927397, 0.000000, 0.000000 +2268, 0.373592, 0.927593, 0.000000, 0.000000 +2269, 0.373106, 0.927789, 0.000000, 0.000000 +2270, 0.372620, 0.927984, 0.000000, 0.000000 +2271, 0.372134, 0.928179, 0.000000, 0.000000 +2272, 0.371648, 0.928374, 0.000000, 0.000000 +2273, 0.371161, 0.928568, 0.000000, 0.000000 +2274, 0.370675, 0.928763, 0.000000, 0.000000 +2275, 0.370188, 0.928957, 0.000000, 0.000000 +2276, 0.369702, 0.929150, 0.000000, 0.000000 +2277, 0.369215, 0.929344, 0.000000, 0.000000 +2278, 0.368728, 0.929537, 0.000000, 0.000000 +2279, 0.368241, 0.929730, 0.000000, 0.000000 +2280, 0.367754, 0.929923, 0.000000, 0.000000 +2281, 0.367267, 0.930115, 0.000000, 0.000000 +2282, 0.366780, 0.930308, 0.000000, 0.000000 +2283, 0.366293, 0.930500, 0.000000, 0.000000 +2284, 0.365805, 0.930691, 0.000000, 0.000000 +2285, 0.365318, 0.930883, 0.000000, 0.000000 +2286, 0.364830, 0.931074, 0.000000, 0.000000 +2287, 0.364342, 0.931265, 0.000000, 0.000000 +2288, 0.363855, 0.931456, 0.000000, 0.000000 +2289, 0.363367, 0.931646, 0.000000, 0.000000 +2290, 0.362879, 0.931836, 0.000000, 0.000000 +2291, 0.362391, 0.932026, 0.000000, 0.000000 +2292, 0.361902, 0.932216, 0.000000, 0.000000 +2293, 0.361414, 0.932405, 0.000000, 0.000000 +2294, 0.360926, 0.932595, 0.000000, 0.000000 +2295, 0.360437, 0.932784, 0.000000, 0.000000 +2296, 0.359948, 0.932972, 0.000000, 0.000000 +2297, 0.359460, 0.933161, 0.000000, 0.000000 +2298, 0.358971, 0.933349, 0.000000, 0.000000 +2299, 0.358482, 0.933537, 0.000000, 0.000000 +2300, 0.357993, 0.933724, 0.000000, 0.000000 +2301, 0.357504, 0.933912, 0.000000, 0.000000 +2302, 0.357015, 0.934099, 0.000000, 0.000000 +2303, 0.356525, 0.934286, 0.000000, 0.000000 +2304, 0.356036, 0.934472, 0.000000, 0.000000 +2305, 0.355547, 0.934659, 0.000000, 0.000000 +2306, 0.355057, 0.934845, 0.000000, 0.000000 +2307, 0.354567, 0.935031, 0.000000, 0.000000 +2308, 0.354077, 0.935216, 0.000000, 0.000000 +2309, 0.353588, 0.935401, 0.000000, 0.000000 +2310, 0.353098, 0.935587, 0.000000, 0.000000 +2311, 0.352607, 0.935771, 0.000000, 0.000000 +2312, 0.352117, 0.935956, 0.000000, 0.000000 +2313, 0.351627, 0.936140, 0.000000, 0.000000 +2314, 0.351137, 0.936324, 0.000000, 0.000000 +2315, 0.350646, 0.936508, 0.000000, 0.000000 +2316, 0.350156, 0.936692, 0.000000, 0.000000 +2317, 0.349665, 0.936875, 0.000000, 0.000000 +2318, 0.349174, 0.937058, 0.000000, 0.000000 +2319, 0.348683, 0.937241, 0.000000, 0.000000 +2320, 0.348192, 0.937423, 0.000000, 0.000000 +2321, 0.347701, 0.937605, 0.000000, 0.000000 +2322, 0.347210, 0.937787, 0.000000, 0.000000 +2323, 0.346719, 0.937969, 0.000000, 0.000000 +2324, 0.346228, 0.938151, 0.000000, 0.000000 +2325, 0.345736, 0.938332, 0.000000, 0.000000 +2326, 0.345245, 0.938513, 0.000000, 0.000000 +2327, 0.344753, 0.938693, 0.000000, 0.000000 +2328, 0.344261, 0.938874, 0.000000, 0.000000 +2329, 0.343770, 0.939054, 0.000000, 0.000000 +2330, 0.343278, 0.939234, 0.000000, 0.000000 +2331, 0.342786, 0.939414, 0.000000, 0.000000 +2332, 0.342294, 0.939593, 0.000000, 0.000000 +2333, 0.341801, 0.939772, 0.000000, 0.000000 +2334, 0.341309, 0.939951, 0.000000, 0.000000 +2335, 0.340817, 0.940130, 0.000000, 0.000000 +2336, 0.340324, 0.940308, 0.000000, 0.000000 +2337, 0.339832, 0.940486, 0.000000, 0.000000 +2338, 0.339339, 0.940664, 0.000000, 0.000000 +2339, 0.338846, 0.940842, 0.000000, 0.000000 +2340, 0.338354, 0.941019, 0.000000, 0.000000 +2341, 0.337861, 0.941196, 0.000000, 0.000000 +2342, 0.337368, 0.941373, 0.000000, 0.000000 +2343, 0.336874, 0.941550, 0.000000, 0.000000 +2344, 0.336381, 0.941726, 0.000000, 0.000000 +2345, 0.335888, 0.941902, 0.000000, 0.000000 +2346, 0.335395, 0.942078, 0.000000, 0.000000 +2347, 0.334901, 0.942253, 0.000000, 0.000000 +2348, 0.334407, 0.942429, 0.000000, 0.000000 +2349, 0.333914, 0.942604, 0.000000, 0.000000 +2350, 0.333420, 0.942778, 0.000000, 0.000000 +2351, 0.332926, 0.942953, 0.000000, 0.000000 +2352, 0.332432, 0.943127, 0.000000, 0.000000 +2353, 0.331938, 0.943301, 0.000000, 0.000000 +2354, 0.331444, 0.943475, 0.000000, 0.000000 +2355, 0.330950, 0.943648, 0.000000, 0.000000 +2356, 0.330456, 0.943822, 0.000000, 0.000000 +2357, 0.329961, 0.943994, 0.000000, 0.000000 +2358, 0.329467, 0.944167, 0.000000, 0.000000 +2359, 0.328972, 0.944340, 0.000000, 0.000000 +2360, 0.328478, 0.944512, 0.000000, 0.000000 +2361, 0.327983, 0.944684, 0.000000, 0.000000 +2362, 0.327488, 0.944855, 0.000000, 0.000000 +2363, 0.326993, 0.945027, 0.000000, 0.000000 +2364, 0.326498, 0.945198, 0.000000, 0.000000 +2365, 0.326003, 0.945369, 0.000000, 0.000000 +2366, 0.325508, 0.945539, 0.000000, 0.000000 +2367, 0.325012, 0.945710, 0.000000, 0.000000 +2368, 0.324517, 0.945880, 0.000000, 0.000000 +2369, 0.324021, 0.946050, 0.000000, 0.000000 +2370, 0.323526, 0.946219, 0.000000, 0.000000 +2371, 0.323030, 0.946389, 0.000000, 0.000000 +2372, 0.322535, 0.946558, 0.000000, 0.000000 +2373, 0.322039, 0.946727, 0.000000, 0.000000 +2374, 0.321543, 0.946895, 0.000000, 0.000000 +2375, 0.321047, 0.947063, 0.000000, 0.000000 +2376, 0.320551, 0.947231, 0.000000, 0.000000 +2377, 0.320055, 0.947399, 0.000000, 0.000000 +2378, 0.319558, 0.947567, 0.000000, 0.000000 +2379, 0.319062, 0.947734, 0.000000, 0.000000 +2380, 0.318565, 0.947901, 0.000000, 0.000000 +2381, 0.318069, 0.948068, 0.000000, 0.000000 +2382, 0.317572, 0.948234, 0.000000, 0.000000 +2383, 0.317076, 0.948400, 0.000000, 0.000000 +2384, 0.316579, 0.948566, 0.000000, 0.000000 +2385, 0.316082, 0.948732, 0.000000, 0.000000 +2386, 0.315585, 0.948897, 0.000000, 0.000000 +2387, 0.315088, 0.949062, 0.000000, 0.000000 +2388, 0.314591, 0.949227, 0.000000, 0.000000 +2389, 0.314094, 0.949392, 0.000000, 0.000000 +2390, 0.313596, 0.949556, 0.000000, 0.000000 +2391, 0.313099, 0.949721, 0.000000, 0.000000 +2392, 0.312601, 0.949884, 0.000000, 0.000000 +2393, 0.312104, 0.950048, 0.000000, 0.000000 +2394, 0.311606, 0.950211, 0.000000, 0.000000 +2395, 0.311108, 0.950374, 0.000000, 0.000000 +2396, 0.310611, 0.950537, 0.000000, 0.000000 +2397, 0.310113, 0.950700, 0.000000, 0.000000 +2398, 0.309615, 0.950862, 0.000000, 0.000000 +2399, 0.309117, 0.951024, 0.000000, 0.000000 +2400, 0.308618, 0.951186, 0.000000, 0.000000 +2401, 0.308120, 0.951347, 0.000000, 0.000000 +2402, 0.307622, 0.951509, 0.000000, 0.000000 +2403, 0.307123, 0.951670, 0.000000, 0.000000 +2404, 0.306625, 0.951830, 0.000000, 0.000000 +2405, 0.306126, 0.951991, 0.000000, 0.000000 +2406, 0.305628, 0.952151, 0.000000, 0.000000 +2407, 0.305129, 0.952311, 0.000000, 0.000000 +2408, 0.304630, 0.952471, 0.000000, 0.000000 +2409, 0.304131, 0.952630, 0.000000, 0.000000 +2410, 0.303632, 0.952789, 0.000000, 0.000000 +2411, 0.303133, 0.952948, 0.000000, 0.000000 +2412, 0.302634, 0.953107, 0.000000, 0.000000 +2413, 0.302135, 0.953265, 0.000000, 0.000000 +2414, 0.301635, 0.953423, 0.000000, 0.000000 +2415, 0.301136, 0.953581, 0.000000, 0.000000 +2416, 0.300636, 0.953739, 0.000000, 0.000000 +2417, 0.300137, 0.953896, 0.000000, 0.000000 +2418, 0.299637, 0.954053, 0.000000, 0.000000 +2419, 0.299137, 0.954210, 0.000000, 0.000000 +2420, 0.298638, 0.954367, 0.000000, 0.000000 +2421, 0.298138, 0.954523, 0.000000, 0.000000 +2422, 0.297638, 0.954679, 0.000000, 0.000000 +2423, 0.297138, 0.954835, 0.000000, 0.000000 +2424, 0.296637, 0.954990, 0.000000, 0.000000 +2425, 0.296137, 0.955145, 0.000000, 0.000000 +2426, 0.295637, 0.955300, 0.000000, 0.000000 +2427, 0.295136, 0.955455, 0.000000, 0.000000 +2428, 0.294636, 0.955610, 0.000000, 0.000000 +2429, 0.294135, 0.955764, 0.000000, 0.000000 +2430, 0.293635, 0.955918, 0.000000, 0.000000 +2431, 0.293134, 0.956071, 0.000000, 0.000000 +2432, 0.292633, 0.956225, 0.000000, 0.000000 +2433, 0.292132, 0.956378, 0.000000, 0.000000 +2434, 0.291631, 0.956531, 0.000000, 0.000000 +2435, 0.291130, 0.956683, 0.000000, 0.000000 +2436, 0.290629, 0.956836, 0.000000, 0.000000 +2437, 0.290128, 0.956988, 0.000000, 0.000000 +2438, 0.289627, 0.957140, 0.000000, 0.000000 +2439, 0.289125, 0.957291, 0.000000, 0.000000 +2440, 0.288624, 0.957443, 0.000000, 0.000000 +2441, 0.288122, 0.957594, 0.000000, 0.000000 +2442, 0.287621, 0.957744, 0.000000, 0.000000 +2443, 0.287119, 0.957895, 0.000000, 0.000000 +2444, 0.286617, 0.958045, 0.000000, 0.000000 +2445, 0.286116, 0.958195, 0.000000, 0.000000 +2446, 0.285614, 0.958345, 0.000000, 0.000000 +2447, 0.285112, 0.958494, 0.000000, 0.000000 +2448, 0.284610, 0.958644, 0.000000, 0.000000 +2449, 0.284107, 0.958792, 0.000000, 0.000000 +2450, 0.283605, 0.958941, 0.000000, 0.000000 +2451, 0.283103, 0.959090, 0.000000, 0.000000 +2452, 0.282600, 0.959238, 0.000000, 0.000000 +2453, 0.282098, 0.959386, 0.000000, 0.000000 +2454, 0.281595, 0.959533, 0.000000, 0.000000 +2455, 0.281093, 0.959681, 0.000000, 0.000000 +2456, 0.280590, 0.959828, 0.000000, 0.000000 +2457, 0.280087, 0.959975, 0.000000, 0.000000 +2458, 0.279585, 0.960121, 0.000000, 0.000000 +2459, 0.279082, 0.960267, 0.000000, 0.000000 +2460, 0.278579, 0.960413, 0.000000, 0.000000 +2461, 0.278076, 0.960559, 0.000000, 0.000000 +2462, 0.277572, 0.960705, 0.000000, 0.000000 +2463, 0.277069, 0.960850, 0.000000, 0.000000 +2464, 0.276566, 0.960995, 0.000000, 0.000000 +2465, 0.276062, 0.961140, 0.000000, 0.000000 +2466, 0.275559, 0.961284, 0.000000, 0.000000 +2467, 0.275056, 0.961428, 0.000000, 0.000000 +2468, 0.274552, 0.961572, 0.000000, 0.000000 +2469, 0.274048, 0.961716, 0.000000, 0.000000 +2470, 0.273544, 0.961859, 0.000000, 0.000000 +2471, 0.273041, 0.962003, 0.000000, 0.000000 +2472, 0.272537, 0.962145, 0.000000, 0.000000 +2473, 0.272033, 0.962288, 0.000000, 0.000000 +2474, 0.271529, 0.962430, 0.000000, 0.000000 +2475, 0.271025, 0.962572, 0.000000, 0.000000 +2476, 0.270520, 0.962714, 0.000000, 0.000000 +2477, 0.270016, 0.962856, 0.000000, 0.000000 +2478, 0.269512, 0.962997, 0.000000, 0.000000 +2479, 0.269007, 0.963138, 0.000000, 0.000000 +2480, 0.268503, 0.963279, 0.000000, 0.000000 +2481, 0.267998, 0.963419, 0.000000, 0.000000 +2482, 0.267494, 0.963560, 0.000000, 0.000000 +2483, 0.266989, 0.963700, 0.000000, 0.000000 +2484, 0.266484, 0.963839, 0.000000, 0.000000 +2485, 0.265979, 0.963979, 0.000000, 0.000000 +2486, 0.265474, 0.964118, 0.000000, 0.000000 +2487, 0.264969, 0.964257, 0.000000, 0.000000 +2488, 0.264464, 0.964396, 0.000000, 0.000000 +2489, 0.263959, 0.964534, 0.000000, 0.000000 +2490, 0.263454, 0.964672, 0.000000, 0.000000 +2491, 0.262948, 0.964810, 0.000000, 0.000000 +2492, 0.262443, 0.964947, 0.000000, 0.000000 +2493, 0.261938, 0.965085, 0.000000, 0.000000 +2494, 0.261432, 0.965222, 0.000000, 0.000000 +2495, 0.260926, 0.965359, 0.000000, 0.000000 +2496, 0.260421, 0.965495, 0.000000, 0.000000 +2497, 0.259915, 0.965631, 0.000000, 0.000000 +2498, 0.259409, 0.965767, 0.000000, 0.000000 +2499, 0.258903, 0.965903, 0.000000, 0.000000 +2500, 0.258397, 0.966039, 0.000000, 0.000000 +2501, 0.257891, 0.966174, 0.000000, 0.000000 +2502, 0.257385, 0.966309, 0.000000, 0.000000 +2503, 0.256879, 0.966444, 0.000000, 0.000000 +2504, 0.256373, 0.966578, 0.000000, 0.000000 +2505, 0.255867, 0.966712, 0.000000, 0.000000 +2506, 0.255360, 0.966846, 0.000000, 0.000000 +2507, 0.254854, 0.966980, 0.000000, 0.000000 +2508, 0.254347, 0.967113, 0.000000, 0.000000 +2509, 0.253841, 0.967246, 0.000000, 0.000000 +2510, 0.253334, 0.967379, 0.000000, 0.000000 +2511, 0.252827, 0.967511, 0.000000, 0.000000 +2512, 0.252321, 0.967644, 0.000000, 0.000000 +2513, 0.251814, 0.967776, 0.000000, 0.000000 +2514, 0.251307, 0.967907, 0.000000, 0.000000 +2515, 0.250800, 0.968039, 0.000000, 0.000000 +2516, 0.250293, 0.968170, 0.000000, 0.000000 +2517, 0.249786, 0.968301, 0.000000, 0.000000 +2518, 0.249278, 0.968432, 0.000000, 0.000000 +2519, 0.248771, 0.968562, 0.000000, 0.000000 +2520, 0.248264, 0.968692, 0.000000, 0.000000 +2521, 0.247756, 0.968822, 0.000000, 0.000000 +2522, 0.247249, 0.968952, 0.000000, 0.000000 +2523, 0.246741, 0.969081, 0.000000, 0.000000 +2524, 0.246234, 0.969210, 0.000000, 0.000000 +2525, 0.245726, 0.969339, 0.000000, 0.000000 +2526, 0.245218, 0.969468, 0.000000, 0.000000 +2527, 0.244710, 0.969596, 0.000000, 0.000000 +2528, 0.244203, 0.969724, 0.000000, 0.000000 +2529, 0.243695, 0.969852, 0.000000, 0.000000 +2530, 0.243187, 0.969980, 0.000000, 0.000000 +2531, 0.242678, 0.970107, 0.000000, 0.000000 +2532, 0.242170, 0.970234, 0.000000, 0.000000 +2533, 0.241662, 0.970360, 0.000000, 0.000000 +2534, 0.241154, 0.970487, 0.000000, 0.000000 +2535, 0.240646, 0.970613, 0.000000, 0.000000 +2536, 0.240137, 0.970739, 0.000000, 0.000000 +2537, 0.239629, 0.970865, 0.000000, 0.000000 +2538, 0.239120, 0.970990, 0.000000, 0.000000 +2539, 0.238611, 0.971115, 0.000000, 0.000000 +2540, 0.238103, 0.971240, 0.000000, 0.000000 +2541, 0.237594, 0.971365, 0.000000, 0.000000 +2542, 0.237085, 0.971489, 0.000000, 0.000000 +2543, 0.236576, 0.971613, 0.000000, 0.000000 +2544, 0.236067, 0.971737, 0.000000, 0.000000 +2545, 0.235558, 0.971860, 0.000000, 0.000000 +2546, 0.235049, 0.971983, 0.000000, 0.000000 +2547, 0.234540, 0.972106, 0.000000, 0.000000 +2548, 0.234031, 0.972229, 0.000000, 0.000000 +2549, 0.233522, 0.972352, 0.000000, 0.000000 +2550, 0.233012, 0.972474, 0.000000, 0.000000 +2551, 0.232503, 0.972596, 0.000000, 0.000000 +2552, 0.231994, 0.972717, 0.000000, 0.000000 +2553, 0.231484, 0.972839, 0.000000, 0.000000 +2554, 0.230975, 0.972960, 0.000000, 0.000000 +2555, 0.230465, 0.973081, 0.000000, 0.000000 +2556, 0.229955, 0.973201, 0.000000, 0.000000 +2557, 0.229445, 0.973322, 0.000000, 0.000000 +2558, 0.228936, 0.973442, 0.000000, 0.000000 +2559, 0.228426, 0.973561, 0.000000, 0.000000 +2560, 0.227916, 0.973681, 0.000000, 0.000000 +2561, 0.227406, 0.973800, 0.000000, 0.000000 +2562, 0.226896, 0.973919, 0.000000, 0.000000 +2563, 0.226385, 0.974038, 0.000000, 0.000000 +2564, 0.225875, 0.974156, 0.000000, 0.000000 +2565, 0.225365, 0.974274, 0.000000, 0.000000 +2566, 0.224855, 0.974392, 0.000000, 0.000000 +2567, 0.224344, 0.974510, 0.000000, 0.000000 +2568, 0.223834, 0.974627, 0.000000, 0.000000 +2569, 0.223323, 0.974744, 0.000000, 0.000000 +2570, 0.222813, 0.974861, 0.000000, 0.000000 +2571, 0.222302, 0.974978, 0.000000, 0.000000 +2572, 0.221791, 0.975094, 0.000000, 0.000000 +2573, 0.221281, 0.975210, 0.000000, 0.000000 +2574, 0.220770, 0.975326, 0.000000, 0.000000 +2575, 0.220259, 0.975441, 0.000000, 0.000000 +2576, 0.219748, 0.975557, 0.000000, 0.000000 +2577, 0.219237, 0.975672, 0.000000, 0.000000 +2578, 0.218726, 0.975786, 0.000000, 0.000000 +2579, 0.218215, 0.975901, 0.000000, 0.000000 +2580, 0.217704, 0.976015, 0.000000, 0.000000 +2581, 0.217192, 0.976129, 0.000000, 0.000000 +2582, 0.216681, 0.976242, 0.000000, 0.000000 +2583, 0.216170, 0.976356, 0.000000, 0.000000 +2584, 0.215658, 0.976469, 0.000000, 0.000000 +2585, 0.215147, 0.976582, 0.000000, 0.000000 +2586, 0.214635, 0.976694, 0.000000, 0.000000 +2587, 0.214124, 0.976807, 0.000000, 0.000000 +2588, 0.213612, 0.976919, 0.000000, 0.000000 +2589, 0.213100, 0.977030, 0.000000, 0.000000 +2590, 0.212589, 0.977142, 0.000000, 0.000000 +2591, 0.212077, 0.977253, 0.000000, 0.000000 +2592, 0.211565, 0.977364, 0.000000, 0.000000 +2593, 0.211053, 0.977475, 0.000000, 0.000000 +2594, 0.210541, 0.977585, 0.000000, 0.000000 +2595, 0.210029, 0.977695, 0.000000, 0.000000 +2596, 0.209517, 0.977805, 0.000000, 0.000000 +2597, 0.209005, 0.977915, 0.000000, 0.000000 +2598, 0.208492, 0.978024, 0.000000, 0.000000 +2599, 0.207980, 0.978133, 0.000000, 0.000000 +2600, 0.207468, 0.978242, 0.000000, 0.000000 +2601, 0.206955, 0.978350, 0.000000, 0.000000 +2602, 0.206443, 0.978459, 0.000000, 0.000000 +2603, 0.205930, 0.978567, 0.000000, 0.000000 +2604, 0.205418, 0.978674, 0.000000, 0.000000 +2605, 0.204905, 0.978782, 0.000000, 0.000000 +2606, 0.204392, 0.978889, 0.000000, 0.000000 +2607, 0.203880, 0.978996, 0.000000, 0.000000 +2608, 0.203367, 0.979103, 0.000000, 0.000000 +2609, 0.202854, 0.979209, 0.000000, 0.000000 +2610, 0.202341, 0.979315, 0.000000, 0.000000 +2611, 0.201828, 0.979421, 0.000000, 0.000000 +2612, 0.201315, 0.979527, 0.000000, 0.000000 +2613, 0.200802, 0.979632, 0.000000, 0.000000 +2614, 0.200289, 0.979737, 0.000000, 0.000000 +2615, 0.199776, 0.979842, 0.000000, 0.000000 +2616, 0.199262, 0.979946, 0.000000, 0.000000 +2617, 0.198749, 0.980050, 0.000000, 0.000000 +2618, 0.198236, 0.980154, 0.000000, 0.000000 +2619, 0.197722, 0.980258, 0.000000, 0.000000 +2620, 0.197209, 0.980361, 0.000000, 0.000000 +2621, 0.196695, 0.980465, 0.000000, 0.000000 +2622, 0.196182, 0.980568, 0.000000, 0.000000 +2623, 0.195668, 0.980670, 0.000000, 0.000000 +2624, 0.195155, 0.980773, 0.000000, 0.000000 +2625, 0.194641, 0.980875, 0.000000, 0.000000 +2626, 0.194127, 0.980976, 0.000000, 0.000000 +2627, 0.193613, 0.981078, 0.000000, 0.000000 +2628, 0.193099, 0.981179, 0.000000, 0.000000 +2629, 0.192585, 0.981280, 0.000000, 0.000000 +2630, 0.192071, 0.981381, 0.000000, 0.000000 +2631, 0.191557, 0.981481, 0.000000, 0.000000 +2632, 0.191043, 0.981582, 0.000000, 0.000000 +2633, 0.190529, 0.981682, 0.000000, 0.000000 +2634, 0.190015, 0.981781, 0.000000, 0.000000 +2635, 0.189501, 0.981881, 0.000000, 0.000000 +2636, 0.188986, 0.981980, 0.000000, 0.000000 +2637, 0.188472, 0.982079, 0.000000, 0.000000 +2638, 0.187958, 0.982177, 0.000000, 0.000000 +2639, 0.187443, 0.982275, 0.000000, 0.000000 +2640, 0.186929, 0.982374, 0.000000, 0.000000 +2641, 0.186414, 0.982471, 0.000000, 0.000000 +2642, 0.185899, 0.982569, 0.000000, 0.000000 +2643, 0.185385, 0.982666, 0.000000, 0.000000 +2644, 0.184870, 0.982763, 0.000000, 0.000000 +2645, 0.184355, 0.982860, 0.000000, 0.000000 +2646, 0.183840, 0.982956, 0.000000, 0.000000 +2647, 0.183326, 0.983052, 0.000000, 0.000000 +2648, 0.182811, 0.983148, 0.000000, 0.000000 +2649, 0.182296, 0.983244, 0.000000, 0.000000 +2650, 0.181781, 0.983339, 0.000000, 0.000000 +2651, 0.181266, 0.983434, 0.000000, 0.000000 +2652, 0.180750, 0.983529, 0.000000, 0.000000 +2653, 0.180235, 0.983624, 0.000000, 0.000000 +2654, 0.179720, 0.983718, 0.000000, 0.000000 +2655, 0.179205, 0.983812, 0.000000, 0.000000 +2656, 0.178689, 0.983906, 0.000000, 0.000000 +2657, 0.178174, 0.983999, 0.000000, 0.000000 +2658, 0.177659, 0.984092, 0.000000, 0.000000 +2659, 0.177143, 0.984185, 0.000000, 0.000000 +2660, 0.176628, 0.984278, 0.000000, 0.000000 +2661, 0.176112, 0.984370, 0.000000, 0.000000 +2662, 0.175596, 0.984462, 0.000000, 0.000000 +2663, 0.175081, 0.984554, 0.000000, 0.000000 +2664, 0.174565, 0.984646, 0.000000, 0.000000 +2665, 0.174049, 0.984737, 0.000000, 0.000000 +2666, 0.173534, 0.984828, 0.000000, 0.000000 +2667, 0.173018, 0.984919, 0.000000, 0.000000 +2668, 0.172502, 0.985009, 0.000000, 0.000000 +2669, 0.171986, 0.985099, 0.000000, 0.000000 +2670, 0.171470, 0.985189, 0.000000, 0.000000 +2671, 0.170954, 0.985279, 0.000000, 0.000000 +2672, 0.170438, 0.985368, 0.000000, 0.000000 +2673, 0.169922, 0.985458, 0.000000, 0.000000 +2674, 0.169405, 0.985546, 0.000000, 0.000000 +2675, 0.168889, 0.985635, 0.000000, 0.000000 +2676, 0.168373, 0.985723, 0.000000, 0.000000 +2677, 0.167857, 0.985811, 0.000000, 0.000000 +2678, 0.167340, 0.985899, 0.000000, 0.000000 +2679, 0.166824, 0.985987, 0.000000, 0.000000 +2680, 0.166307, 0.986074, 0.000000, 0.000000 +2681, 0.165791, 0.986161, 0.000000, 0.000000 +2682, 0.165274, 0.986248, 0.000000, 0.000000 +2683, 0.164758, 0.986334, 0.000000, 0.000000 +2684, 0.164241, 0.986420, 0.000000, 0.000000 +2685, 0.163724, 0.986506, 0.000000, 0.000000 +2686, 0.163208, 0.986592, 0.000000, 0.000000 +2687, 0.162691, 0.986677, 0.000000, 0.000000 +2688, 0.162174, 0.986762, 0.000000, 0.000000 +2689, 0.161657, 0.986847, 0.000000, 0.000000 +2690, 0.161140, 0.986932, 0.000000, 0.000000 +2691, 0.160623, 0.987016, 0.000000, 0.000000 +2692, 0.160106, 0.987100, 0.000000, 0.000000 +2693, 0.159589, 0.987183, 0.000000, 0.000000 +2694, 0.159072, 0.987267, 0.000000, 0.000000 +2695, 0.158555, 0.987350, 0.000000, 0.000000 +2696, 0.158038, 0.987433, 0.000000, 0.000000 +2697, 0.157521, 0.987516, 0.000000, 0.000000 +2698, 0.157003, 0.987598, 0.000000, 0.000000 +2699, 0.156486, 0.987680, 0.000000, 0.000000 +2700, 0.155969, 0.987762, 0.000000, 0.000000 +2701, 0.155451, 0.987844, 0.000000, 0.000000 +2702, 0.154934, 0.987925, 0.000000, 0.000000 +2703, 0.154417, 0.988006, 0.000000, 0.000000 +2704, 0.153899, 0.988087, 0.000000, 0.000000 +2705, 0.153382, 0.988167, 0.000000, 0.000000 +2706, 0.152864, 0.988247, 0.000000, 0.000000 +2707, 0.152346, 0.988327, 0.000000, 0.000000 +2708, 0.151829, 0.988407, 0.000000, 0.000000 +2709, 0.151311, 0.988486, 0.000000, 0.000000 +2710, 0.150793, 0.988565, 0.000000, 0.000000 +2711, 0.150275, 0.988644, 0.000000, 0.000000 +2712, 0.149757, 0.988723, 0.000000, 0.000000 +2713, 0.149240, 0.988801, 0.000000, 0.000000 +2714, 0.148722, 0.988879, 0.000000, 0.000000 +2715, 0.148204, 0.988957, 0.000000, 0.000000 +2716, 0.147686, 0.989034, 0.000000, 0.000000 +2717, 0.147168, 0.989112, 0.000000, 0.000000 +2718, 0.146650, 0.989189, 0.000000, 0.000000 +2719, 0.146131, 0.989265, 0.000000, 0.000000 +2720, 0.145613, 0.989342, 0.000000, 0.000000 +2721, 0.145095, 0.989418, 0.000000, 0.000000 +2722, 0.144577, 0.989494, 0.000000, 0.000000 +2723, 0.144058, 0.989569, 0.000000, 0.000000 +2724, 0.143540, 0.989644, 0.000000, 0.000000 +2725, 0.143022, 0.989720, 0.000000, 0.000000 +2726, 0.142503, 0.989794, 0.000000, 0.000000 +2727, 0.141985, 0.989869, 0.000000, 0.000000 +2728, 0.141466, 0.989943, 0.000000, 0.000000 +2729, 0.140948, 0.990017, 0.000000, 0.000000 +2730, 0.140429, 0.990091, 0.000000, 0.000000 +2731, 0.139911, 0.990164, 0.000000, 0.000000 +2732, 0.139392, 0.990237, 0.000000, 0.000000 +2733, 0.138873, 0.990310, 0.000000, 0.000000 +2734, 0.138355, 0.990383, 0.000000, 0.000000 +2735, 0.137836, 0.990455, 0.000000, 0.000000 +2736, 0.137317, 0.990527, 0.000000, 0.000000 +2737, 0.136798, 0.990599, 0.000000, 0.000000 +2738, 0.136279, 0.990670, 0.000000, 0.000000 +2739, 0.135761, 0.990742, 0.000000, 0.000000 +2740, 0.135242, 0.990813, 0.000000, 0.000000 +2741, 0.134723, 0.990883, 0.000000, 0.000000 +2742, 0.134204, 0.990954, 0.000000, 0.000000 +2743, 0.133685, 0.991024, 0.000000, 0.000000 +2744, 0.133165, 0.991094, 0.000000, 0.000000 +2745, 0.132646, 0.991163, 0.000000, 0.000000 +2746, 0.132127, 0.991233, 0.000000, 0.000000 +2747, 0.131608, 0.991302, 0.000000, 0.000000 +2748, 0.131089, 0.991371, 0.000000, 0.000000 +2749, 0.130569, 0.991439, 0.000000, 0.000000 +2750, 0.130050, 0.991507, 0.000000, 0.000000 +2751, 0.129531, 0.991575, 0.000000, 0.000000 +2752, 0.129011, 0.991643, 0.000000, 0.000000 +2753, 0.128492, 0.991711, 0.000000, 0.000000 +2754, 0.127973, 0.991778, 0.000000, 0.000000 +2755, 0.127453, 0.991845, 0.000000, 0.000000 +2756, 0.126934, 0.991911, 0.000000, 0.000000 +2757, 0.126414, 0.991978, 0.000000, 0.000000 +2758, 0.125894, 0.992044, 0.000000, 0.000000 +2759, 0.125375, 0.992109, 0.000000, 0.000000 +2760, 0.124855, 0.992175, 0.000000, 0.000000 +2761, 0.124335, 0.992240, 0.000000, 0.000000 +2762, 0.123816, 0.992305, 0.000000, 0.000000 +2763, 0.123296, 0.992370, 0.000000, 0.000000 +2764, 0.122776, 0.992434, 0.000000, 0.000000 +2765, 0.122256, 0.992499, 0.000000, 0.000000 +2766, 0.121736, 0.992562, 0.000000, 0.000000 +2767, 0.121217, 0.992626, 0.000000, 0.000000 +2768, 0.120697, 0.992689, 0.000000, 0.000000 +2769, 0.120177, 0.992753, 0.000000, 0.000000 +2770, 0.119657, 0.992815, 0.000000, 0.000000 +2771, 0.119137, 0.992878, 0.000000, 0.000000 +2772, 0.118617, 0.992940, 0.000000, 0.000000 +2773, 0.118097, 0.993002, 0.000000, 0.000000 +2774, 0.117576, 0.993064, 0.000000, 0.000000 +2775, 0.117056, 0.993125, 0.000000, 0.000000 +2776, 0.116536, 0.993186, 0.000000, 0.000000 +2777, 0.116016, 0.993247, 0.000000, 0.000000 +2778, 0.115496, 0.993308, 0.000000, 0.000000 +2779, 0.114975, 0.993368, 0.000000, 0.000000 +2780, 0.114455, 0.993428, 0.000000, 0.000000 +2781, 0.113935, 0.993488, 0.000000, 0.000000 +2782, 0.113414, 0.993548, 0.000000, 0.000000 +2783, 0.112894, 0.993607, 0.000000, 0.000000 +2784, 0.112373, 0.993666, 0.000000, 0.000000 +2785, 0.111853, 0.993725, 0.000000, 0.000000 +2786, 0.111332, 0.993783, 0.000000, 0.000000 +2787, 0.110812, 0.993841, 0.000000, 0.000000 +2788, 0.110291, 0.993899, 0.000000, 0.000000 +2789, 0.109771, 0.993957, 0.000000, 0.000000 +2790, 0.109250, 0.994014, 0.000000, 0.000000 +2791, 0.108729, 0.994071, 0.000000, 0.000000 +2792, 0.108209, 0.994128, 0.000000, 0.000000 +2793, 0.107688, 0.994185, 0.000000, 0.000000 +2794, 0.107167, 0.994241, 0.000000, 0.000000 +2795, 0.106647, 0.994297, 0.000000, 0.000000 +2796, 0.106126, 0.994353, 0.000000, 0.000000 +2797, 0.105605, 0.994408, 0.000000, 0.000000 +2798, 0.105084, 0.994463, 0.000000, 0.000000 +2799, 0.104563, 0.994518, 0.000000, 0.000000 +2800, 0.104042, 0.994573, 0.000000, 0.000000 +2801, 0.103521, 0.994627, 0.000000, 0.000000 +2802, 0.103000, 0.994681, 0.000000, 0.000000 +2803, 0.102479, 0.994735, 0.000000, 0.000000 +2804, 0.101958, 0.994789, 0.000000, 0.000000 +2805, 0.101437, 0.994842, 0.000000, 0.000000 +2806, 0.100916, 0.994895, 0.000000, 0.000000 +2807, 0.100395, 0.994948, 0.000000, 0.000000 +2808, 0.099874, 0.995000, 0.000000, 0.000000 +2809, 0.099353, 0.995052, 0.000000, 0.000000 +2810, 0.098832, 0.995104, 0.000000, 0.000000 +2811, 0.098310, 0.995156, 0.000000, 0.000000 +2812, 0.097789, 0.995207, 0.000000, 0.000000 +2813, 0.097268, 0.995258, 0.000000, 0.000000 +2814, 0.096747, 0.995309, 0.000000, 0.000000 +2815, 0.096225, 0.995360, 0.000000, 0.000000 +2816, 0.095704, 0.995410, 0.000000, 0.000000 +2817, 0.095182, 0.995460, 0.000000, 0.000000 +2818, 0.094661, 0.995510, 0.000000, 0.000000 +2819, 0.094140, 0.995559, 0.000000, 0.000000 +2820, 0.093618, 0.995608, 0.000000, 0.000000 +2821, 0.093097, 0.995657, 0.000000, 0.000000 +2822, 0.092575, 0.995706, 0.000000, 0.000000 +2823, 0.092054, 0.995754, 0.000000, 0.000000 +2824, 0.091532, 0.995802, 0.000000, 0.000000 +2825, 0.091010, 0.995850, 0.000000, 0.000000 +2826, 0.090489, 0.995897, 0.000000, 0.000000 +2827, 0.089967, 0.995945, 0.000000, 0.000000 +2828, 0.089446, 0.995992, 0.000000, 0.000000 +2829, 0.088924, 0.996038, 0.000000, 0.000000 +2830, 0.088402, 0.996085, 0.000000, 0.000000 +2831, 0.087880, 0.996131, 0.000000, 0.000000 +2832, 0.087359, 0.996177, 0.000000, 0.000000 +2833, 0.086837, 0.996223, 0.000000, 0.000000 +2834, 0.086315, 0.996268, 0.000000, 0.000000 +2835, 0.085793, 0.996313, 0.000000, 0.000000 +2836, 0.085271, 0.996358, 0.000000, 0.000000 +2837, 0.084750, 0.996402, 0.000000, 0.000000 +2838, 0.084228, 0.996447, 0.000000, 0.000000 +2839, 0.083706, 0.996491, 0.000000, 0.000000 +2840, 0.083184, 0.996534, 0.000000, 0.000000 +2841, 0.082662, 0.996578, 0.000000, 0.000000 +2842, 0.082140, 0.996621, 0.000000, 0.000000 +2843, 0.081618, 0.996664, 0.000000, 0.000000 +2844, 0.081096, 0.996706, 0.000000, 0.000000 +2845, 0.080574, 0.996749, 0.000000, 0.000000 +2846, 0.080052, 0.996791, 0.000000, 0.000000 +2847, 0.079529, 0.996833, 0.000000, 0.000000 +2848, 0.079007, 0.996874, 0.000000, 0.000000 +2849, 0.078485, 0.996915, 0.000000, 0.000000 +2850, 0.077963, 0.996956, 0.000000, 0.000000 +2851, 0.077441, 0.996997, 0.000000, 0.000000 +2852, 0.076919, 0.997037, 0.000000, 0.000000 +2853, 0.076396, 0.997078, 0.000000, 0.000000 +2854, 0.075874, 0.997117, 0.000000, 0.000000 +2855, 0.075352, 0.997157, 0.000000, 0.000000 +2856, 0.074830, 0.997196, 0.000000, 0.000000 +2857, 0.074307, 0.997235, 0.000000, 0.000000 +2858, 0.073785, 0.997274, 0.000000, 0.000000 +2859, 0.073263, 0.997313, 0.000000, 0.000000 +2860, 0.072740, 0.997351, 0.000000, 0.000000 +2861, 0.072218, 0.997389, 0.000000, 0.000000 +2862, 0.071695, 0.997427, 0.000000, 0.000000 +2863, 0.071173, 0.997464, 0.000000, 0.000000 +2864, 0.070650, 0.997501, 0.000000, 0.000000 +2865, 0.070128, 0.997538, 0.000000, 0.000000 +2866, 0.069606, 0.997575, 0.000000, 0.000000 +2867, 0.069083, 0.997611, 0.000000, 0.000000 +2868, 0.068560, 0.997647, 0.000000, 0.000000 +2869, 0.068038, 0.997683, 0.000000, 0.000000 +2870, 0.067515, 0.997718, 0.000000, 0.000000 +2871, 0.066993, 0.997753, 0.000000, 0.000000 +2872, 0.066470, 0.997788, 0.000000, 0.000000 +2873, 0.065948, 0.997823, 0.000000, 0.000000 +2874, 0.065425, 0.997857, 0.000000, 0.000000 +2875, 0.064902, 0.997892, 0.000000, 0.000000 +2876, 0.064380, 0.997925, 0.000000, 0.000000 +2877, 0.063857, 0.997959, 0.000000, 0.000000 +2878, 0.063334, 0.997992, 0.000000, 0.000000 +2879, 0.062811, 0.998025, 0.000000, 0.000000 +2880, 0.062289, 0.998058, 0.000000, 0.000000 +2881, 0.061766, 0.998091, 0.000000, 0.000000 +2882, 0.061243, 0.998123, 0.000000, 0.000000 +2883, 0.060720, 0.998155, 0.000000, 0.000000 +2884, 0.060198, 0.998186, 0.000000, 0.000000 +2885, 0.059675, 0.998218, 0.000000, 0.000000 +2886, 0.059152, 0.998249, 0.000000, 0.000000 +2887, 0.058629, 0.998280, 0.000000, 0.000000 +2888, 0.058106, 0.998310, 0.000000, 0.000000 +2889, 0.057583, 0.998341, 0.000000, 0.000000 +2890, 0.057060, 0.998371, 0.000000, 0.000000 +2891, 0.056537, 0.998400, 0.000000, 0.000000 +2892, 0.056014, 0.998430, 0.000000, 0.000000 +2893, 0.055491, 0.998459, 0.000000, 0.000000 +2894, 0.054968, 0.998488, 0.000000, 0.000000 +2895, 0.054445, 0.998517, 0.000000, 0.000000 +2896, 0.053922, 0.998545, 0.000000, 0.000000 +2897, 0.053399, 0.998573, 0.000000, 0.000000 +2898, 0.052876, 0.998601, 0.000000, 0.000000 +2899, 0.052353, 0.998629, 0.000000, 0.000000 +2900, 0.051830, 0.998656, 0.000000, 0.000000 +2901, 0.051307, 0.998683, 0.000000, 0.000000 +2902, 0.050784, 0.998710, 0.000000, 0.000000 +2903, 0.050261, 0.998736, 0.000000, 0.000000 +2904, 0.049738, 0.998762, 0.000000, 0.000000 +2905, 0.049215, 0.998788, 0.000000, 0.000000 +2906, 0.048692, 0.998814, 0.000000, 0.000000 +2907, 0.048169, 0.998839, 0.000000, 0.000000 +2908, 0.047645, 0.998864, 0.000000, 0.000000 +2909, 0.047122, 0.998889, 0.000000, 0.000000 +2910, 0.046599, 0.998914, 0.000000, 0.000000 +2911, 0.046076, 0.998938, 0.000000, 0.000000 +2912, 0.045553, 0.998962, 0.000000, 0.000000 +2913, 0.045029, 0.998986, 0.000000, 0.000000 +2914, 0.044506, 0.999009, 0.000000, 0.000000 +2915, 0.043983, 0.999032, 0.000000, 0.000000 +2916, 0.043459, 0.999055, 0.000000, 0.000000 +2917, 0.042936, 0.999078, 0.000000, 0.000000 +2918, 0.042413, 0.999100, 0.000000, 0.000000 +2919, 0.041890, 0.999122, 0.000000, 0.000000 +2920, 0.041366, 0.999144, 0.000000, 0.000000 +2921, 0.040843, 0.999166, 0.000000, 0.000000 +2922, 0.040320, 0.999187, 0.000000, 0.000000 +2923, 0.039796, 0.999208, 0.000000, 0.000000 +2924, 0.039273, 0.999229, 0.000000, 0.000000 +2925, 0.038750, 0.999249, 0.000000, 0.000000 +2926, 0.038226, 0.999269, 0.000000, 0.000000 +2927, 0.037703, 0.999289, 0.000000, 0.000000 +2928, 0.037179, 0.999309, 0.000000, 0.000000 +2929, 0.036656, 0.999328, 0.000000, 0.000000 +2930, 0.036132, 0.999347, 0.000000, 0.000000 +2931, 0.035609, 0.999366, 0.000000, 0.000000 +2932, 0.035086, 0.999384, 0.000000, 0.000000 +2933, 0.034562, 0.999403, 0.000000, 0.000000 +2934, 0.034039, 0.999421, 0.000000, 0.000000 +2935, 0.033515, 0.999438, 0.000000, 0.000000 +2936, 0.032992, 0.999456, 0.000000, 0.000000 +2937, 0.032468, 0.999473, 0.000000, 0.000000 +2938, 0.031945, 0.999490, 0.000000, 0.000000 +2939, 0.031421, 0.999506, 0.000000, 0.000000 +2940, 0.030898, 0.999523, 0.000000, 0.000000 +2941, 0.030374, 0.999539, 0.000000, 0.000000 +2942, 0.029851, 0.999554, 0.000000, 0.000000 +2943, 0.029327, 0.999570, 0.000000, 0.000000 +2944, 0.028804, 0.999585, 0.000000, 0.000000 +2945, 0.028280, 0.999600, 0.000000, 0.000000 +2946, 0.027756, 0.999615, 0.000000, 0.000000 +2947, 0.027233, 0.999629, 0.000000, 0.000000 +2948, 0.026709, 0.999643, 0.000000, 0.000000 +2949, 0.026186, 0.999657, 0.000000, 0.000000 +2950, 0.025662, 0.999671, 0.000000, 0.000000 +2951, 0.025138, 0.999684, 0.000000, 0.000000 +2952, 0.024615, 0.999697, 0.000000, 0.000000 +2953, 0.024091, 0.999710, 0.000000, 0.000000 +2954, 0.023568, 0.999722, 0.000000, 0.000000 +2955, 0.023044, 0.999734, 0.000000, 0.000000 +2956, 0.022520, 0.999746, 0.000000, 0.000000 +2957, 0.021997, 0.999758, 0.000000, 0.000000 +2958, 0.021473, 0.999769, 0.000000, 0.000000 +2959, 0.020949, 0.999781, 0.000000, 0.000000 +2960, 0.020426, 0.999791, 0.000000, 0.000000 +2961, 0.019902, 0.999802, 0.000000, 0.000000 +2962, 0.019378, 0.999812, 0.000000, 0.000000 +2963, 0.018855, 0.999822, 0.000000, 0.000000 +2964, 0.018331, 0.999832, 0.000000, 0.000000 +2965, 0.017807, 0.999841, 0.000000, 0.000000 +2966, 0.017284, 0.999851, 0.000000, 0.000000 +2967, 0.016760, 0.999860, 0.000000, 0.000000 +2968, 0.016236, 0.999868, 0.000000, 0.000000 +2969, 0.015713, 0.999877, 0.000000, 0.000000 +2970, 0.015189, 0.999885, 0.000000, 0.000000 +2971, 0.014665, 0.999892, 0.000000, 0.000000 +2972, 0.014141, 0.999900, 0.000000, 0.000000 +2973, 0.013618, 0.999907, 0.000000, 0.000000 +2974, 0.013094, 0.999914, 0.000000, 0.000000 +2975, 0.012570, 0.999921, 0.000000, 0.000000 +2976, 0.012046, 0.999927, 0.000000, 0.000000 +2977, 0.011523, 0.999934, 0.000000, 0.000000 +2978, 0.010999, 0.999940, 0.000000, 0.000000 +2979, 0.010475, 0.999945, 0.000000, 0.000000 +2980, 0.009952, 0.999950, 0.000000, 0.000000 +2981, 0.009428, 0.999956, 0.000000, 0.000000 +2982, 0.008904, 0.999960, 0.000000, 0.000000 +2983, 0.008380, 0.999965, 0.000000, 0.000000 +2984, 0.007857, 0.999969, 0.000000, 0.000000 +2985, 0.007333, 0.999973, 0.000000, 0.000000 +2986, 0.006809, 0.999977, 0.000000, 0.000000 +2987, 0.006285, 0.999980, 0.000000, 0.000000 +2988, 0.005761, 0.999983, 0.000000, 0.000000 +2989, 0.005238, 0.999986, 0.000000, 0.000000 +2990, 0.004714, 0.999989, 0.000000, 0.000000 +2991, 0.004190, 0.999991, 0.000000, 0.000000 +2992, 0.003666, 0.999993, 0.000000, 0.000000 +2993, 0.003143, 0.999995, 0.000000, 0.000000 +2994, 0.002619, 0.999997, 0.000000, 0.000000 +2995, 0.002095, 0.999998, 0.000000, 0.000000 +2996, 0.001571, 0.999999, 0.000000, 0.000000 +2997, 0.001048, 0.999999, 0.000000, 0.000000 +2998, 0.000524, 1.000000, 0.000000, 0.000000 +2999, 0.000000, 1.000000, 0.000000, 0.000000 diff --git a/scripts/trajectories/half-circle-over-top-15s.csv b/scripts/trajectories/half-circle-over-top-15s.csv new file mode 100644 index 0000000000..850b3feed6 --- /dev/null +++ b/scripts/trajectories/half-circle-over-top-15s.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 1.000000, 0.000524, 0.000000, 0.000000 +2, 0.999999, 0.001048, 0.000000, 0.000000 +3, 0.999999, 0.001571, 0.000000, 0.000000 +4, 0.999998, 0.002095, 0.000000, 0.000000 +5, 0.999997, 0.002619, 0.000000, 0.000000 +6, 0.999995, 0.003143, 0.000000, 0.000000 +7, 0.999993, 0.003666, 0.000000, 0.000000 +8, 0.999991, 0.004190, 0.000000, 0.000000 +9, 0.999989, 0.004714, 0.000000, 0.000000 +10, 0.999986, 0.005238, 0.000000, 0.000000 +11, 0.999983, 0.005761, 0.000000, 0.000000 +12, 0.999980, 0.006285, 0.000000, 0.000000 +13, 0.999977, 0.006809, 0.000000, 0.000000 +14, 0.999973, 0.007333, 0.000000, 0.000000 +15, 0.999969, 0.007857, 0.000000, 0.000000 +16, 0.999965, 0.008380, 0.000000, 0.000000 +17, 0.999960, 0.008904, 0.000000, 0.000000 +18, 0.999956, 0.009428, 0.000000, 0.000000 +19, 0.999950, 0.009952, 0.000000, 0.000000 +20, 0.999945, 0.010475, 0.000000, 0.000000 +21, 0.999940, 0.010999, 0.000000, 0.000000 +22, 0.999934, 0.011523, 0.000000, 0.000000 +23, 0.999927, 0.012046, 0.000000, 0.000000 +24, 0.999921, 0.012570, 0.000000, 0.000000 +25, 0.999914, 0.013094, 0.000000, 0.000000 +26, 0.999907, 0.013618, 0.000000, 0.000000 +27, 0.999900, 0.014141, 0.000000, 0.000000 +28, 0.999892, 0.014665, 0.000000, 0.000000 +29, 0.999885, 0.015189, 0.000000, 0.000000 +30, 0.999877, 0.015713, 0.000000, 0.000000 +31, 0.999868, 0.016236, 0.000000, 0.000000 +32, 0.999860, 0.016760, 0.000000, 0.000000 +33, 0.999851, 0.017284, 0.000000, 0.000000 +34, 0.999841, 0.017807, 0.000000, 0.000000 +35, 0.999832, 0.018331, 0.000000, 0.000000 +36, 0.999822, 0.018855, 0.000000, 0.000000 +37, 0.999812, 0.019378, 0.000000, 0.000000 +38, 0.999802, 0.019902, 0.000000, 0.000000 +39, 0.999791, 0.020426, 0.000000, 0.000000 +40, 0.999781, 0.020949, 0.000000, 0.000000 +41, 0.999769, 0.021473, 0.000000, 0.000000 +42, 0.999758, 0.021997, 0.000000, 0.000000 +43, 0.999746, 0.022520, 0.000000, 0.000000 +44, 0.999734, 0.023044, 0.000000, 0.000000 +45, 0.999722, 0.023568, 0.000000, 0.000000 +46, 0.999710, 0.024091, 0.000000, 0.000000 +47, 0.999697, 0.024615, 0.000000, 0.000000 +48, 0.999684, 0.025138, 0.000000, 0.000000 +49, 0.999671, 0.025662, 0.000000, 0.000000 +50, 0.999657, 0.026186, 0.000000, 0.000000 +51, 0.999643, 0.026709, 0.000000, 0.000000 +52, 0.999629, 0.027233, 0.000000, 0.000000 +53, 0.999615, 0.027756, 0.000000, 0.000000 +54, 0.999600, 0.028280, 0.000000, 0.000000 +55, 0.999585, 0.028804, 0.000000, 0.000000 +56, 0.999570, 0.029327, 0.000000, 0.000000 +57, 0.999554, 0.029851, 0.000000, 0.000000 +58, 0.999539, 0.030374, 0.000000, 0.000000 +59, 0.999523, 0.030898, 0.000000, 0.000000 +60, 0.999506, 0.031421, 0.000000, 0.000000 +61, 0.999490, 0.031945, 0.000000, 0.000000 +62, 0.999473, 0.032468, 0.000000, 0.000000 +63, 0.999456, 0.032992, 0.000000, 0.000000 +64, 0.999438, 0.033515, 0.000000, 0.000000 +65, 0.999421, 0.034039, 0.000000, 0.000000 +66, 0.999403, 0.034562, 0.000000, 0.000000 +67, 0.999384, 0.035086, 0.000000, 0.000000 +68, 0.999366, 0.035609, 0.000000, 0.000000 +69, 0.999347, 0.036132, 0.000000, 0.000000 +70, 0.999328, 0.036656, 0.000000, 0.000000 +71, 0.999309, 0.037179, 0.000000, 0.000000 +72, 0.999289, 0.037703, 0.000000, 0.000000 +73, 0.999269, 0.038226, 0.000000, 0.000000 +74, 0.999249, 0.038750, 0.000000, 0.000000 +75, 0.999229, 0.039273, 0.000000, 0.000000 +76, 0.999208, 0.039796, 0.000000, 0.000000 +77, 0.999187, 0.040320, 0.000000, 0.000000 +78, 0.999166, 0.040843, 0.000000, 0.000000 +79, 0.999144, 0.041366, 0.000000, 0.000000 +80, 0.999122, 0.041890, 0.000000, 0.000000 +81, 0.999100, 0.042413, 0.000000, 0.000000 +82, 0.999078, 0.042936, 0.000000, 0.000000 +83, 0.999055, 0.043459, 0.000000, 0.000000 +84, 0.999032, 0.043983, 0.000000, 0.000000 +85, 0.999009, 0.044506, 0.000000, 0.000000 +86, 0.998986, 0.045029, 0.000000, 0.000000 +87, 0.998962, 0.045553, 0.000000, 0.000000 +88, 0.998938, 0.046076, 0.000000, 0.000000 +89, 0.998914, 0.046599, 0.000000, 0.000000 +90, 0.998889, 0.047122, 0.000000, 0.000000 +91, 0.998864, 0.047645, 0.000000, 0.000000 +92, 0.998839, 0.048169, 0.000000, 0.000000 +93, 0.998814, 0.048692, 0.000000, 0.000000 +94, 0.998788, 0.049215, 0.000000, 0.000000 +95, 0.998762, 0.049738, 0.000000, 0.000000 +96, 0.998736, 0.050261, 0.000000, 0.000000 +97, 0.998710, 0.050784, 0.000000, 0.000000 +98, 0.998683, 0.051307, 0.000000, 0.000000 +99, 0.998656, 0.051830, 0.000000, 0.000000 +100, 0.998629, 0.052353, 0.000000, 0.000000 +101, 0.998601, 0.052876, 0.000000, 0.000000 +102, 0.998573, 0.053399, 0.000000, 0.000000 +103, 0.998545, 0.053922, 0.000000, 0.000000 +104, 0.998517, 0.054445, 0.000000, 0.000000 +105, 0.998488, 0.054968, 0.000000, 0.000000 +106, 0.998459, 0.055491, 0.000000, 0.000000 +107, 0.998430, 0.056014, 0.000000, 0.000000 +108, 0.998400, 0.056537, 0.000000, 0.000000 +109, 0.998371, 0.057060, 0.000000, 0.000000 +110, 0.998341, 0.057583, 0.000000, 0.000000 +111, 0.998310, 0.058106, 0.000000, 0.000000 +112, 0.998280, 0.058629, 0.000000, 0.000000 +113, 0.998249, 0.059152, 0.000000, 0.000000 +114, 0.998218, 0.059675, 0.000000, 0.000000 +115, 0.998186, 0.060198, 0.000000, 0.000000 +116, 0.998155, 0.060720, 0.000000, 0.000000 +117, 0.998123, 0.061243, 0.000000, 0.000000 +118, 0.998091, 0.061766, 0.000000, 0.000000 +119, 0.998058, 0.062289, 0.000000, 0.000000 +120, 0.998025, 0.062811, 0.000000, 0.000000 +121, 0.997992, 0.063334, 0.000000, 0.000000 +122, 0.997959, 0.063857, 0.000000, 0.000000 +123, 0.997925, 0.064380, 0.000000, 0.000000 +124, 0.997892, 0.064902, 0.000000, 0.000000 +125, 0.997857, 0.065425, 0.000000, 0.000000 +126, 0.997823, 0.065948, 0.000000, 0.000000 +127, 0.997788, 0.066470, 0.000000, 0.000000 +128, 0.997753, 0.066993, 0.000000, 0.000000 +129, 0.997718, 0.067515, 0.000000, 0.000000 +130, 0.997683, 0.068038, 0.000000, 0.000000 +131, 0.997647, 0.068560, 0.000000, 0.000000 +132, 0.997611, 0.069083, 0.000000, 0.000000 +133, 0.997575, 0.069606, 0.000000, 0.000000 +134, 0.997538, 0.070128, 0.000000, 0.000000 +135, 0.997501, 0.070650, 0.000000, 0.000000 +136, 0.997464, 0.071173, 0.000000, 0.000000 +137, 0.997427, 0.071695, 0.000000, 0.000000 +138, 0.997389, 0.072218, 0.000000, 0.000000 +139, 0.997351, 0.072740, 0.000000, 0.000000 +140, 0.997313, 0.073263, 0.000000, 0.000000 +141, 0.997274, 0.073785, 0.000000, 0.000000 +142, 0.997235, 0.074307, 0.000000, 0.000000 +143, 0.997196, 0.074830, 0.000000, 0.000000 +144, 0.997157, 0.075352, 0.000000, 0.000000 +145, 0.997117, 0.075874, 0.000000, 0.000000 +146, 0.997078, 0.076396, 0.000000, 0.000000 +147, 0.997037, 0.076919, 0.000000, 0.000000 +148, 0.996997, 0.077441, 0.000000, 0.000000 +149, 0.996956, 0.077963, 0.000000, 0.000000 +150, 0.996915, 0.078485, 0.000000, 0.000000 +151, 0.996874, 0.079007, 0.000000, 0.000000 +152, 0.996833, 0.079529, 0.000000, 0.000000 +153, 0.996791, 0.080052, 0.000000, 0.000000 +154, 0.996749, 0.080574, 0.000000, 0.000000 +155, 0.996706, 0.081096, 0.000000, 0.000000 +156, 0.996664, 0.081618, 0.000000, 0.000000 +157, 0.996621, 0.082140, 0.000000, 0.000000 +158, 0.996578, 0.082662, 0.000000, 0.000000 +159, 0.996534, 0.083184, 0.000000, 0.000000 +160, 0.996491, 0.083706, 0.000000, 0.000000 +161, 0.996447, 0.084228, 0.000000, 0.000000 +162, 0.996402, 0.084750, 0.000000, 0.000000 +163, 0.996358, 0.085271, 0.000000, 0.000000 +164, 0.996313, 0.085793, 0.000000, 0.000000 +165, 0.996268, 0.086315, 0.000000, 0.000000 +166, 0.996223, 0.086837, 0.000000, 0.000000 +167, 0.996177, 0.087359, 0.000000, 0.000000 +168, 0.996131, 0.087880, 0.000000, 0.000000 +169, 0.996085, 0.088402, 0.000000, 0.000000 +170, 0.996038, 0.088924, 0.000000, 0.000000 +171, 0.995992, 0.089446, 0.000000, 0.000000 +172, 0.995945, 0.089967, 0.000000, 0.000000 +173, 0.995897, 0.090489, 0.000000, 0.000000 +174, 0.995850, 0.091010, 0.000000, 0.000000 +175, 0.995802, 0.091532, 0.000000, 0.000000 +176, 0.995754, 0.092054, 0.000000, 0.000000 +177, 0.995706, 0.092575, 0.000000, 0.000000 +178, 0.995657, 0.093097, 0.000000, 0.000000 +179, 0.995608, 0.093618, 0.000000, 0.000000 +180, 0.995559, 0.094140, 0.000000, 0.000000 +181, 0.995510, 0.094661, 0.000000, 0.000000 +182, 0.995460, 0.095182, 0.000000, 0.000000 +183, 0.995410, 0.095704, 0.000000, 0.000000 +184, 0.995360, 0.096225, 0.000000, 0.000000 +185, 0.995309, 0.096747, 0.000000, 0.000000 +186, 0.995258, 0.097268, 0.000000, 0.000000 +187, 0.995207, 0.097789, 0.000000, 0.000000 +188, 0.995156, 0.098310, 0.000000, 0.000000 +189, 0.995104, 0.098832, 0.000000, 0.000000 +190, 0.995052, 0.099353, 0.000000, 0.000000 +191, 0.995000, 0.099874, 0.000000, 0.000000 +192, 0.994948, 0.100395, 0.000000, 0.000000 +193, 0.994895, 0.100916, 0.000000, 0.000000 +194, 0.994842, 0.101437, 0.000000, 0.000000 +195, 0.994789, 0.101958, 0.000000, 0.000000 +196, 0.994735, 0.102479, 0.000000, 0.000000 +197, 0.994681, 0.103000, 0.000000, 0.000000 +198, 0.994627, 0.103521, 0.000000, 0.000000 +199, 0.994573, 0.104042, 0.000000, 0.000000 +200, 0.994518, 0.104563, 0.000000, 0.000000 +201, 0.994463, 0.105084, 0.000000, 0.000000 +202, 0.994408, 0.105605, 0.000000, 0.000000 +203, 0.994353, 0.106126, 0.000000, 0.000000 +204, 0.994297, 0.106647, 0.000000, 0.000000 +205, 0.994241, 0.107167, 0.000000, 0.000000 +206, 0.994185, 0.107688, 0.000000, 0.000000 +207, 0.994128, 0.108209, 0.000000, 0.000000 +208, 0.994071, 0.108729, 0.000000, 0.000000 +209, 0.994014, 0.109250, 0.000000, 0.000000 +210, 0.993957, 0.109771, 0.000000, 0.000000 +211, 0.993899, 0.110291, 0.000000, 0.000000 +212, 0.993841, 0.110812, 0.000000, 0.000000 +213, 0.993783, 0.111332, 0.000000, 0.000000 +214, 0.993725, 0.111853, 0.000000, 0.000000 +215, 0.993666, 0.112373, 0.000000, 0.000000 +216, 0.993607, 0.112894, 0.000000, 0.000000 +217, 0.993548, 0.113414, 0.000000, 0.000000 +218, 0.993488, 0.113935, 0.000000, 0.000000 +219, 0.993428, 0.114455, 0.000000, 0.000000 +220, 0.993368, 0.114975, 0.000000, 0.000000 +221, 0.993308, 0.115496, 0.000000, 0.000000 +222, 0.993247, 0.116016, 0.000000, 0.000000 +223, 0.993186, 0.116536, 0.000000, 0.000000 +224, 0.993125, 0.117056, 0.000000, 0.000000 +225, 0.993064, 0.117576, 0.000000, 0.000000 +226, 0.993002, 0.118097, 0.000000, 0.000000 +227, 0.992940, 0.118617, 0.000000, 0.000000 +228, 0.992878, 0.119137, 0.000000, 0.000000 +229, 0.992815, 0.119657, 0.000000, 0.000000 +230, 0.992753, 0.120177, 0.000000, 0.000000 +231, 0.992689, 0.120697, 0.000000, 0.000000 +232, 0.992626, 0.121217, 0.000000, 0.000000 +233, 0.992562, 0.121736, 0.000000, 0.000000 +234, 0.992499, 0.122256, 0.000000, 0.000000 +235, 0.992434, 0.122776, 0.000000, 0.000000 +236, 0.992370, 0.123296, 0.000000, 0.000000 +237, 0.992305, 0.123816, 0.000000, 0.000000 +238, 0.992240, 0.124335, 0.000000, 0.000000 +239, 0.992175, 0.124855, 0.000000, 0.000000 +240, 0.992109, 0.125375, 0.000000, 0.000000 +241, 0.992044, 0.125894, 0.000000, 0.000000 +242, 0.991978, 0.126414, 0.000000, 0.000000 +243, 0.991911, 0.126934, 0.000000, 0.000000 +244, 0.991845, 0.127453, 0.000000, 0.000000 +245, 0.991778, 0.127973, 0.000000, 0.000000 +246, 0.991711, 0.128492, 0.000000, 0.000000 +247, 0.991643, 0.129011, 0.000000, 0.000000 +248, 0.991575, 0.129531, 0.000000, 0.000000 +249, 0.991507, 0.130050, 0.000000, 0.000000 +250, 0.991439, 0.130569, 0.000000, 0.000000 +251, 0.991371, 0.131089, 0.000000, 0.000000 +252, 0.991302, 0.131608, 0.000000, 0.000000 +253, 0.991233, 0.132127, 0.000000, 0.000000 +254, 0.991163, 0.132646, 0.000000, 0.000000 +255, 0.991094, 0.133165, 0.000000, 0.000000 +256, 0.991024, 0.133685, 0.000000, 0.000000 +257, 0.990954, 0.134204, 0.000000, 0.000000 +258, 0.990883, 0.134723, 0.000000, 0.000000 +259, 0.990813, 0.135242, 0.000000, 0.000000 +260, 0.990742, 0.135761, 0.000000, 0.000000 +261, 0.990670, 0.136279, 0.000000, 0.000000 +262, 0.990599, 0.136798, 0.000000, 0.000000 +263, 0.990527, 0.137317, 0.000000, 0.000000 +264, 0.990455, 0.137836, 0.000000, 0.000000 +265, 0.990383, 0.138355, 0.000000, 0.000000 +266, 0.990310, 0.138873, 0.000000, 0.000000 +267, 0.990237, 0.139392, 0.000000, 0.000000 +268, 0.990164, 0.139911, 0.000000, 0.000000 +269, 0.990091, 0.140429, 0.000000, 0.000000 +270, 0.990017, 0.140948, 0.000000, 0.000000 +271, 0.989943, 0.141466, 0.000000, 0.000000 +272, 0.989869, 0.141985, 0.000000, 0.000000 +273, 0.989794, 0.142503, 0.000000, 0.000000 +274, 0.989720, 0.143022, 0.000000, 0.000000 +275, 0.989644, 0.143540, 0.000000, 0.000000 +276, 0.989569, 0.144058, 0.000000, 0.000000 +277, 0.989494, 0.144577, 0.000000, 0.000000 +278, 0.989418, 0.145095, 0.000000, 0.000000 +279, 0.989342, 0.145613, 0.000000, 0.000000 +280, 0.989265, 0.146131, 0.000000, 0.000000 +281, 0.989189, 0.146650, 0.000000, 0.000000 +282, 0.989112, 0.147168, 0.000000, 0.000000 +283, 0.989034, 0.147686, 0.000000, 0.000000 +284, 0.988957, 0.148204, 0.000000, 0.000000 +285, 0.988879, 0.148722, 0.000000, 0.000000 +286, 0.988801, 0.149240, 0.000000, 0.000000 +287, 0.988723, 0.149757, 0.000000, 0.000000 +288, 0.988644, 0.150275, 0.000000, 0.000000 +289, 0.988565, 0.150793, 0.000000, 0.000000 +290, 0.988486, 0.151311, 0.000000, 0.000000 +291, 0.988407, 0.151829, 0.000000, 0.000000 +292, 0.988327, 0.152346, 0.000000, 0.000000 +293, 0.988247, 0.152864, 0.000000, 0.000000 +294, 0.988167, 0.153382, 0.000000, 0.000000 +295, 0.988087, 0.153899, 0.000000, 0.000000 +296, 0.988006, 0.154417, 0.000000, 0.000000 +297, 0.987925, 0.154934, 0.000000, 0.000000 +298, 0.987844, 0.155451, 0.000000, 0.000000 +299, 0.987762, 0.155969, 0.000000, 0.000000 +300, 0.987680, 0.156486, 0.000000, 0.000000 +301, 0.987598, 0.157003, 0.000000, 0.000000 +302, 0.987516, 0.157521, 0.000000, 0.000000 +303, 0.987433, 0.158038, 0.000000, 0.000000 +304, 0.987350, 0.158555, 0.000000, 0.000000 +305, 0.987267, 0.159072, 0.000000, 0.000000 +306, 0.987183, 0.159589, 0.000000, 0.000000 +307, 0.987100, 0.160106, 0.000000, 0.000000 +308, 0.987016, 0.160623, 0.000000, 0.000000 +309, 0.986932, 0.161140, 0.000000, 0.000000 +310, 0.986847, 0.161657, 0.000000, 0.000000 +311, 0.986762, 0.162174, 0.000000, 0.000000 +312, 0.986677, 0.162691, 0.000000, 0.000000 +313, 0.986592, 0.163208, 0.000000, 0.000000 +314, 0.986506, 0.163724, 0.000000, 0.000000 +315, 0.986420, 0.164241, 0.000000, 0.000000 +316, 0.986334, 0.164758, 0.000000, 0.000000 +317, 0.986248, 0.165274, 0.000000, 0.000000 +318, 0.986161, 0.165791, 0.000000, 0.000000 +319, 0.986074, 0.166307, 0.000000, 0.000000 +320, 0.985987, 0.166824, 0.000000, 0.000000 +321, 0.985899, 0.167340, 0.000000, 0.000000 +322, 0.985811, 0.167857, 0.000000, 0.000000 +323, 0.985723, 0.168373, 0.000000, 0.000000 +324, 0.985635, 0.168889, 0.000000, 0.000000 +325, 0.985546, 0.169405, 0.000000, 0.000000 +326, 0.985458, 0.169922, 0.000000, 0.000000 +327, 0.985368, 0.170438, 0.000000, 0.000000 +328, 0.985279, 0.170954, 0.000000, 0.000000 +329, 0.985189, 0.171470, 0.000000, 0.000000 +330, 0.985099, 0.171986, 0.000000, 0.000000 +331, 0.985009, 0.172502, 0.000000, 0.000000 +332, 0.984919, 0.173018, 0.000000, 0.000000 +333, 0.984828, 0.173534, 0.000000, 0.000000 +334, 0.984737, 0.174049, 0.000000, 0.000000 +335, 0.984646, 0.174565, 0.000000, 0.000000 +336, 0.984554, 0.175081, 0.000000, 0.000000 +337, 0.984462, 0.175596, 0.000000, 0.000000 +338, 0.984370, 0.176112, 0.000000, 0.000000 +339, 0.984278, 0.176628, 0.000000, 0.000000 +340, 0.984185, 0.177143, 0.000000, 0.000000 +341, 0.984092, 0.177659, 0.000000, 0.000000 +342, 0.983999, 0.178174, 0.000000, 0.000000 +343, 0.983906, 0.178689, 0.000000, 0.000000 +344, 0.983812, 0.179205, 0.000000, 0.000000 +345, 0.983718, 0.179720, 0.000000, 0.000000 +346, 0.983624, 0.180235, 0.000000, 0.000000 +347, 0.983529, 0.180750, 0.000000, 0.000000 +348, 0.983434, 0.181266, 0.000000, 0.000000 +349, 0.983339, 0.181781, 0.000000, 0.000000 +350, 0.983244, 0.182296, 0.000000, 0.000000 +351, 0.983148, 0.182811, 0.000000, 0.000000 +352, 0.983052, 0.183326, 0.000000, 0.000000 +353, 0.982956, 0.183840, 0.000000, 0.000000 +354, 0.982860, 0.184355, 0.000000, 0.000000 +355, 0.982763, 0.184870, 0.000000, 0.000000 +356, 0.982666, 0.185385, 0.000000, 0.000000 +357, 0.982569, 0.185899, 0.000000, 0.000000 +358, 0.982471, 0.186414, 0.000000, 0.000000 +359, 0.982374, 0.186929, 0.000000, 0.000000 +360, 0.982275, 0.187443, 0.000000, 0.000000 +361, 0.982177, 0.187958, 0.000000, 0.000000 +362, 0.982079, 0.188472, 0.000000, 0.000000 +363, 0.981980, 0.188986, 0.000000, 0.000000 +364, 0.981881, 0.189501, 0.000000, 0.000000 +365, 0.981781, 0.190015, 0.000000, 0.000000 +366, 0.981682, 0.190529, 0.000000, 0.000000 +367, 0.981582, 0.191043, 0.000000, 0.000000 +368, 0.981481, 0.191557, 0.000000, 0.000000 +369, 0.981381, 0.192071, 0.000000, 0.000000 +370, 0.981280, 0.192585, 0.000000, 0.000000 +371, 0.981179, 0.193099, 0.000000, 0.000000 +372, 0.981078, 0.193613, 0.000000, 0.000000 +373, 0.980976, 0.194127, 0.000000, 0.000000 +374, 0.980875, 0.194641, 0.000000, 0.000000 +375, 0.980773, 0.195155, 0.000000, 0.000000 +376, 0.980670, 0.195668, 0.000000, 0.000000 +377, 0.980568, 0.196182, 0.000000, 0.000000 +378, 0.980465, 0.196695, 0.000000, 0.000000 +379, 0.980361, 0.197209, 0.000000, 0.000000 +380, 0.980258, 0.197722, 0.000000, 0.000000 +381, 0.980154, 0.198236, 0.000000, 0.000000 +382, 0.980050, 0.198749, 0.000000, 0.000000 +383, 0.979946, 0.199262, 0.000000, 0.000000 +384, 0.979842, 0.199776, 0.000000, 0.000000 +385, 0.979737, 0.200289, 0.000000, 0.000000 +386, 0.979632, 0.200802, 0.000000, 0.000000 +387, 0.979527, 0.201315, 0.000000, 0.000000 +388, 0.979421, 0.201828, 0.000000, 0.000000 +389, 0.979315, 0.202341, 0.000000, 0.000000 +390, 0.979209, 0.202854, 0.000000, 0.000000 +391, 0.979103, 0.203367, 0.000000, 0.000000 +392, 0.978996, 0.203880, 0.000000, 0.000000 +393, 0.978889, 0.204392, 0.000000, 0.000000 +394, 0.978782, 0.204905, 0.000000, 0.000000 +395, 0.978674, 0.205418, 0.000000, 0.000000 +396, 0.978567, 0.205930, 0.000000, 0.000000 +397, 0.978459, 0.206443, 0.000000, 0.000000 +398, 0.978350, 0.206955, 0.000000, 0.000000 +399, 0.978242, 0.207468, 0.000000, 0.000000 +400, 0.978133, 0.207980, 0.000000, 0.000000 +401, 0.978024, 0.208492, 0.000000, 0.000000 +402, 0.977915, 0.209005, 0.000000, 0.000000 +403, 0.977805, 0.209517, 0.000000, 0.000000 +404, 0.977695, 0.210029, 0.000000, 0.000000 +405, 0.977585, 0.210541, 0.000000, 0.000000 +406, 0.977475, 0.211053, 0.000000, 0.000000 +407, 0.977364, 0.211565, 0.000000, 0.000000 +408, 0.977253, 0.212077, 0.000000, 0.000000 +409, 0.977142, 0.212589, 0.000000, 0.000000 +410, 0.977030, 0.213100, 0.000000, 0.000000 +411, 0.976919, 0.213612, 0.000000, 0.000000 +412, 0.976807, 0.214124, 0.000000, 0.000000 +413, 0.976694, 0.214635, 0.000000, 0.000000 +414, 0.976582, 0.215147, 0.000000, 0.000000 +415, 0.976469, 0.215658, 0.000000, 0.000000 +416, 0.976356, 0.216170, 0.000000, 0.000000 +417, 0.976242, 0.216681, 0.000000, 0.000000 +418, 0.976129, 0.217192, 0.000000, 0.000000 +419, 0.976015, 0.217704, 0.000000, 0.000000 +420, 0.975901, 0.218215, 0.000000, 0.000000 +421, 0.975786, 0.218726, 0.000000, 0.000000 +422, 0.975672, 0.219237, 0.000000, 0.000000 +423, 0.975557, 0.219748, 0.000000, 0.000000 +424, 0.975441, 0.220259, 0.000000, 0.000000 +425, 0.975326, 0.220770, 0.000000, 0.000000 +426, 0.975210, 0.221281, 0.000000, 0.000000 +427, 0.975094, 0.221791, 0.000000, 0.000000 +428, 0.974978, 0.222302, 0.000000, 0.000000 +429, 0.974861, 0.222813, 0.000000, 0.000000 +430, 0.974744, 0.223323, 0.000000, 0.000000 +431, 0.974627, 0.223834, 0.000000, 0.000000 +432, 0.974510, 0.224344, 0.000000, 0.000000 +433, 0.974392, 0.224855, 0.000000, 0.000000 +434, 0.974274, 0.225365, 0.000000, 0.000000 +435, 0.974156, 0.225875, 0.000000, 0.000000 +436, 0.974038, 0.226385, 0.000000, 0.000000 +437, 0.973919, 0.226896, 0.000000, 0.000000 +438, 0.973800, 0.227406, 0.000000, 0.000000 +439, 0.973681, 0.227916, 0.000000, 0.000000 +440, 0.973561, 0.228426, 0.000000, 0.000000 +441, 0.973442, 0.228936, 0.000000, 0.000000 +442, 0.973322, 0.229445, 0.000000, 0.000000 +443, 0.973201, 0.229955, 0.000000, 0.000000 +444, 0.973081, 0.230465, 0.000000, 0.000000 +445, 0.972960, 0.230975, 0.000000, 0.000000 +446, 0.972839, 0.231484, 0.000000, 0.000000 +447, 0.972717, 0.231994, 0.000000, 0.000000 +448, 0.972596, 0.232503, 0.000000, 0.000000 +449, 0.972474, 0.233012, 0.000000, 0.000000 +450, 0.972352, 0.233522, 0.000000, 0.000000 +451, 0.972229, 0.234031, 0.000000, 0.000000 +452, 0.972106, 0.234540, 0.000000, 0.000000 +453, 0.971983, 0.235049, 0.000000, 0.000000 +454, 0.971860, 0.235558, 0.000000, 0.000000 +455, 0.971737, 0.236067, 0.000000, 0.000000 +456, 0.971613, 0.236576, 0.000000, 0.000000 +457, 0.971489, 0.237085, 0.000000, 0.000000 +458, 0.971365, 0.237594, 0.000000, 0.000000 +459, 0.971240, 0.238103, 0.000000, 0.000000 +460, 0.971115, 0.238611, 0.000000, 0.000000 +461, 0.970990, 0.239120, 0.000000, 0.000000 +462, 0.970865, 0.239629, 0.000000, 0.000000 +463, 0.970739, 0.240137, 0.000000, 0.000000 +464, 0.970613, 0.240646, 0.000000, 0.000000 +465, 0.970487, 0.241154, 0.000000, 0.000000 +466, 0.970360, 0.241662, 0.000000, 0.000000 +467, 0.970234, 0.242170, 0.000000, 0.000000 +468, 0.970107, 0.242678, 0.000000, 0.000000 +469, 0.969980, 0.243187, 0.000000, 0.000000 +470, 0.969852, 0.243695, 0.000000, 0.000000 +471, 0.969724, 0.244203, 0.000000, 0.000000 +472, 0.969596, 0.244710, 0.000000, 0.000000 +473, 0.969468, 0.245218, 0.000000, 0.000000 +474, 0.969339, 0.245726, 0.000000, 0.000000 +475, 0.969210, 0.246234, 0.000000, 0.000000 +476, 0.969081, 0.246741, 0.000000, 0.000000 +477, 0.968952, 0.247249, 0.000000, 0.000000 +478, 0.968822, 0.247756, 0.000000, 0.000000 +479, 0.968692, 0.248264, 0.000000, 0.000000 +480, 0.968562, 0.248771, 0.000000, 0.000000 +481, 0.968432, 0.249278, 0.000000, 0.000000 +482, 0.968301, 0.249786, 0.000000, 0.000000 +483, 0.968170, 0.250293, 0.000000, 0.000000 +484, 0.968039, 0.250800, 0.000000, 0.000000 +485, 0.967907, 0.251307, 0.000000, 0.000000 +486, 0.967776, 0.251814, 0.000000, 0.000000 +487, 0.967644, 0.252321, 0.000000, 0.000000 +488, 0.967511, 0.252827, 0.000000, 0.000000 +489, 0.967379, 0.253334, 0.000000, 0.000000 +490, 0.967246, 0.253841, 0.000000, 0.000000 +491, 0.967113, 0.254347, 0.000000, 0.000000 +492, 0.966980, 0.254854, 0.000000, 0.000000 +493, 0.966846, 0.255360, 0.000000, 0.000000 +494, 0.966712, 0.255867, 0.000000, 0.000000 +495, 0.966578, 0.256373, 0.000000, 0.000000 +496, 0.966444, 0.256879, 0.000000, 0.000000 +497, 0.966309, 0.257385, 0.000000, 0.000000 +498, 0.966174, 0.257891, 0.000000, 0.000000 +499, 0.966039, 0.258397, 0.000000, 0.000000 +500, 0.965903, 0.258903, 0.000000, 0.000000 +501, 0.965767, 0.259409, 0.000000, 0.000000 +502, 0.965631, 0.259915, 0.000000, 0.000000 +503, 0.965495, 0.260421, 0.000000, 0.000000 +504, 0.965359, 0.260926, 0.000000, 0.000000 +505, 0.965222, 0.261432, 0.000000, 0.000000 +506, 0.965085, 0.261938, 0.000000, 0.000000 +507, 0.964947, 0.262443, 0.000000, 0.000000 +508, 0.964810, 0.262948, 0.000000, 0.000000 +509, 0.964672, 0.263454, 0.000000, 0.000000 +510, 0.964534, 0.263959, 0.000000, 0.000000 +511, 0.964396, 0.264464, 0.000000, 0.000000 +512, 0.964257, 0.264969, 0.000000, 0.000000 +513, 0.964118, 0.265474, 0.000000, 0.000000 +514, 0.963979, 0.265979, 0.000000, 0.000000 +515, 0.963839, 0.266484, 0.000000, 0.000000 +516, 0.963700, 0.266989, 0.000000, 0.000000 +517, 0.963560, 0.267494, 0.000000, 0.000000 +518, 0.963419, 0.267998, 0.000000, 0.000000 +519, 0.963279, 0.268503, 0.000000, 0.000000 +520, 0.963138, 0.269007, 0.000000, 0.000000 +521, 0.962997, 0.269512, 0.000000, 0.000000 +522, 0.962856, 0.270016, 0.000000, 0.000000 +523, 0.962714, 0.270520, 0.000000, 0.000000 +524, 0.962572, 0.271025, 0.000000, 0.000000 +525, 0.962430, 0.271529, 0.000000, 0.000000 +526, 0.962288, 0.272033, 0.000000, 0.000000 +527, 0.962145, 0.272537, 0.000000, 0.000000 +528, 0.962003, 0.273041, 0.000000, 0.000000 +529, 0.961859, 0.273544, 0.000000, 0.000000 +530, 0.961716, 0.274048, 0.000000, 0.000000 +531, 0.961572, 0.274552, 0.000000, 0.000000 +532, 0.961428, 0.275056, 0.000000, 0.000000 +533, 0.961284, 0.275559, 0.000000, 0.000000 +534, 0.961140, 0.276062, 0.000000, 0.000000 +535, 0.960995, 0.276566, 0.000000, 0.000000 +536, 0.960850, 0.277069, 0.000000, 0.000000 +537, 0.960705, 0.277572, 0.000000, 0.000000 +538, 0.960559, 0.278076, 0.000000, 0.000000 +539, 0.960413, 0.278579, 0.000000, 0.000000 +540, 0.960267, 0.279082, 0.000000, 0.000000 +541, 0.960121, 0.279585, 0.000000, 0.000000 +542, 0.959975, 0.280087, 0.000000, 0.000000 +543, 0.959828, 0.280590, 0.000000, 0.000000 +544, 0.959681, 0.281093, 0.000000, 0.000000 +545, 0.959533, 0.281595, 0.000000, 0.000000 +546, 0.959386, 0.282098, 0.000000, 0.000000 +547, 0.959238, 0.282600, 0.000000, 0.000000 +548, 0.959090, 0.283103, 0.000000, 0.000000 +549, 0.958941, 0.283605, 0.000000, 0.000000 +550, 0.958792, 0.284107, 0.000000, 0.000000 +551, 0.958644, 0.284610, 0.000000, 0.000000 +552, 0.958494, 0.285112, 0.000000, 0.000000 +553, 0.958345, 0.285614, 0.000000, 0.000000 +554, 0.958195, 0.286116, 0.000000, 0.000000 +555, 0.958045, 0.286617, 0.000000, 0.000000 +556, 0.957895, 0.287119, 0.000000, 0.000000 +557, 0.957744, 0.287621, 0.000000, 0.000000 +558, 0.957594, 0.288122, 0.000000, 0.000000 +559, 0.957443, 0.288624, 0.000000, 0.000000 +560, 0.957291, 0.289125, 0.000000, 0.000000 +561, 0.957140, 0.289627, 0.000000, 0.000000 +562, 0.956988, 0.290128, 0.000000, 0.000000 +563, 0.956836, 0.290629, 0.000000, 0.000000 +564, 0.956683, 0.291130, 0.000000, 0.000000 +565, 0.956531, 0.291631, 0.000000, 0.000000 +566, 0.956378, 0.292132, 0.000000, 0.000000 +567, 0.956225, 0.292633, 0.000000, 0.000000 +568, 0.956071, 0.293134, 0.000000, 0.000000 +569, 0.955918, 0.293635, 0.000000, 0.000000 +570, 0.955764, 0.294135, 0.000000, 0.000000 +571, 0.955610, 0.294636, 0.000000, 0.000000 +572, 0.955455, 0.295136, 0.000000, 0.000000 +573, 0.955300, 0.295637, 0.000000, 0.000000 +574, 0.955145, 0.296137, 0.000000, 0.000000 +575, 0.954990, 0.296637, 0.000000, 0.000000 +576, 0.954835, 0.297138, 0.000000, 0.000000 +577, 0.954679, 0.297638, 0.000000, 0.000000 +578, 0.954523, 0.298138, 0.000000, 0.000000 +579, 0.954367, 0.298638, 0.000000, 0.000000 +580, 0.954210, 0.299137, 0.000000, 0.000000 +581, 0.954053, 0.299637, 0.000000, 0.000000 +582, 0.953896, 0.300137, 0.000000, 0.000000 +583, 0.953739, 0.300636, 0.000000, 0.000000 +584, 0.953581, 0.301136, 0.000000, 0.000000 +585, 0.953423, 0.301635, 0.000000, 0.000000 +586, 0.953265, 0.302135, 0.000000, 0.000000 +587, 0.953107, 0.302634, 0.000000, 0.000000 +588, 0.952948, 0.303133, 0.000000, 0.000000 +589, 0.952789, 0.303632, 0.000000, 0.000000 +590, 0.952630, 0.304131, 0.000000, 0.000000 +591, 0.952471, 0.304630, 0.000000, 0.000000 +592, 0.952311, 0.305129, 0.000000, 0.000000 +593, 0.952151, 0.305628, 0.000000, 0.000000 +594, 0.951991, 0.306126, 0.000000, 0.000000 +595, 0.951830, 0.306625, 0.000000, 0.000000 +596, 0.951670, 0.307123, 0.000000, 0.000000 +597, 0.951509, 0.307622, 0.000000, 0.000000 +598, 0.951347, 0.308120, 0.000000, 0.000000 +599, 0.951186, 0.308618, 0.000000, 0.000000 +600, 0.951024, 0.309117, 0.000000, 0.000000 +601, 0.950862, 0.309615, 0.000000, 0.000000 +602, 0.950700, 0.310113, 0.000000, 0.000000 +603, 0.950537, 0.310611, 0.000000, 0.000000 +604, 0.950374, 0.311108, 0.000000, 0.000000 +605, 0.950211, 0.311606, 0.000000, 0.000000 +606, 0.950048, 0.312104, 0.000000, 0.000000 +607, 0.949884, 0.312601, 0.000000, 0.000000 +608, 0.949721, 0.313099, 0.000000, 0.000000 +609, 0.949556, 0.313596, 0.000000, 0.000000 +610, 0.949392, 0.314094, 0.000000, 0.000000 +611, 0.949227, 0.314591, 0.000000, 0.000000 +612, 0.949062, 0.315088, 0.000000, 0.000000 +613, 0.948897, 0.315585, 0.000000, 0.000000 +614, 0.948732, 0.316082, 0.000000, 0.000000 +615, 0.948566, 0.316579, 0.000000, 0.000000 +616, 0.948400, 0.317076, 0.000000, 0.000000 +617, 0.948234, 0.317572, 0.000000, 0.000000 +618, 0.948068, 0.318069, 0.000000, 0.000000 +619, 0.947901, 0.318565, 0.000000, 0.000000 +620, 0.947734, 0.319062, 0.000000, 0.000000 +621, 0.947567, 0.319558, 0.000000, 0.000000 +622, 0.947399, 0.320055, 0.000000, 0.000000 +623, 0.947231, 0.320551, 0.000000, 0.000000 +624, 0.947063, 0.321047, 0.000000, 0.000000 +625, 0.946895, 0.321543, 0.000000, 0.000000 +626, 0.946727, 0.322039, 0.000000, 0.000000 +627, 0.946558, 0.322535, 0.000000, 0.000000 +628, 0.946389, 0.323030, 0.000000, 0.000000 +629, 0.946219, 0.323526, 0.000000, 0.000000 +630, 0.946050, 0.324021, 0.000000, 0.000000 +631, 0.945880, 0.324517, 0.000000, 0.000000 +632, 0.945710, 0.325012, 0.000000, 0.000000 +633, 0.945539, 0.325508, 0.000000, 0.000000 +634, 0.945369, 0.326003, 0.000000, 0.000000 +635, 0.945198, 0.326498, 0.000000, 0.000000 +636, 0.945027, 0.326993, 0.000000, 0.000000 +637, 0.944855, 0.327488, 0.000000, 0.000000 +638, 0.944684, 0.327983, 0.000000, 0.000000 +639, 0.944512, 0.328478, 0.000000, 0.000000 +640, 0.944340, 0.328972, 0.000000, 0.000000 +641, 0.944167, 0.329467, 0.000000, 0.000000 +642, 0.943994, 0.329961, 0.000000, 0.000000 +643, 0.943822, 0.330456, 0.000000, 0.000000 +644, 0.943648, 0.330950, 0.000000, 0.000000 +645, 0.943475, 0.331444, 0.000000, 0.000000 +646, 0.943301, 0.331938, 0.000000, 0.000000 +647, 0.943127, 0.332432, 0.000000, 0.000000 +648, 0.942953, 0.332926, 0.000000, 0.000000 +649, 0.942778, 0.333420, 0.000000, 0.000000 +650, 0.942604, 0.333914, 0.000000, 0.000000 +651, 0.942429, 0.334407, 0.000000, 0.000000 +652, 0.942253, 0.334901, 0.000000, 0.000000 +653, 0.942078, 0.335395, 0.000000, 0.000000 +654, 0.941902, 0.335888, 0.000000, 0.000000 +655, 0.941726, 0.336381, 0.000000, 0.000000 +656, 0.941550, 0.336874, 0.000000, 0.000000 +657, 0.941373, 0.337368, 0.000000, 0.000000 +658, 0.941196, 0.337861, 0.000000, 0.000000 +659, 0.941019, 0.338354, 0.000000, 0.000000 +660, 0.940842, 0.338846, 0.000000, 0.000000 +661, 0.940664, 0.339339, 0.000000, 0.000000 +662, 0.940486, 0.339832, 0.000000, 0.000000 +663, 0.940308, 0.340324, 0.000000, 0.000000 +664, 0.940130, 0.340817, 0.000000, 0.000000 +665, 0.939951, 0.341309, 0.000000, 0.000000 +666, 0.939772, 0.341801, 0.000000, 0.000000 +667, 0.939593, 0.342294, 0.000000, 0.000000 +668, 0.939414, 0.342786, 0.000000, 0.000000 +669, 0.939234, 0.343278, 0.000000, 0.000000 +670, 0.939054, 0.343770, 0.000000, 0.000000 +671, 0.938874, 0.344261, 0.000000, 0.000000 +672, 0.938693, 0.344753, 0.000000, 0.000000 +673, 0.938513, 0.345245, 0.000000, 0.000000 +674, 0.938332, 0.345736, 0.000000, 0.000000 +675, 0.938151, 0.346228, 0.000000, 0.000000 +676, 0.937969, 0.346719, 0.000000, 0.000000 +677, 0.937787, 0.347210, 0.000000, 0.000000 +678, 0.937605, 0.347701, 0.000000, 0.000000 +679, 0.937423, 0.348192, 0.000000, 0.000000 +680, 0.937241, 0.348683, 0.000000, 0.000000 +681, 0.937058, 0.349174, 0.000000, 0.000000 +682, 0.936875, 0.349665, 0.000000, 0.000000 +683, 0.936692, 0.350156, 0.000000, 0.000000 +684, 0.936508, 0.350646, 0.000000, 0.000000 +685, 0.936324, 0.351137, 0.000000, 0.000000 +686, 0.936140, 0.351627, 0.000000, 0.000000 +687, 0.935956, 0.352117, 0.000000, 0.000000 +688, 0.935771, 0.352607, 0.000000, 0.000000 +689, 0.935587, 0.353098, 0.000000, 0.000000 +690, 0.935401, 0.353588, 0.000000, 0.000000 +691, 0.935216, 0.354077, 0.000000, 0.000000 +692, 0.935031, 0.354567, 0.000000, 0.000000 +693, 0.934845, 0.355057, 0.000000, 0.000000 +694, 0.934659, 0.355547, 0.000000, 0.000000 +695, 0.934472, 0.356036, 0.000000, 0.000000 +696, 0.934286, 0.356525, 0.000000, 0.000000 +697, 0.934099, 0.357015, 0.000000, 0.000000 +698, 0.933912, 0.357504, 0.000000, 0.000000 +699, 0.933724, 0.357993, 0.000000, 0.000000 +700, 0.933537, 0.358482, 0.000000, 0.000000 +701, 0.933349, 0.358971, 0.000000, 0.000000 +702, 0.933161, 0.359460, 0.000000, 0.000000 +703, 0.932972, 0.359948, 0.000000, 0.000000 +704, 0.932784, 0.360437, 0.000000, 0.000000 +705, 0.932595, 0.360926, 0.000000, 0.000000 +706, 0.932405, 0.361414, 0.000000, 0.000000 +707, 0.932216, 0.361902, 0.000000, 0.000000 +708, 0.932026, 0.362391, 0.000000, 0.000000 +709, 0.931836, 0.362879, 0.000000, 0.000000 +710, 0.931646, 0.363367, 0.000000, 0.000000 +711, 0.931456, 0.363855, 0.000000, 0.000000 +712, 0.931265, 0.364342, 0.000000, 0.000000 +713, 0.931074, 0.364830, 0.000000, 0.000000 +714, 0.930883, 0.365318, 0.000000, 0.000000 +715, 0.930691, 0.365805, 0.000000, 0.000000 +716, 0.930500, 0.366293, 0.000000, 0.000000 +717, 0.930308, 0.366780, 0.000000, 0.000000 +718, 0.930115, 0.367267, 0.000000, 0.000000 +719, 0.929923, 0.367754, 0.000000, 0.000000 +720, 0.929730, 0.368241, 0.000000, 0.000000 +721, 0.929537, 0.368728, 0.000000, 0.000000 +722, 0.929344, 0.369215, 0.000000, 0.000000 +723, 0.929150, 0.369702, 0.000000, 0.000000 +724, 0.928957, 0.370188, 0.000000, 0.000000 +725, 0.928763, 0.370675, 0.000000, 0.000000 +726, 0.928568, 0.371161, 0.000000, 0.000000 +727, 0.928374, 0.371648, 0.000000, 0.000000 +728, 0.928179, 0.372134, 0.000000, 0.000000 +729, 0.927984, 0.372620, 0.000000, 0.000000 +730, 0.927789, 0.373106, 0.000000, 0.000000 +731, 0.927593, 0.373592, 0.000000, 0.000000 +732, 0.927397, 0.374078, 0.000000, 0.000000 +733, 0.927201, 0.374563, 0.000000, 0.000000 +734, 0.927005, 0.375049, 0.000000, 0.000000 +735, 0.926808, 0.375535, 0.000000, 0.000000 +736, 0.926612, 0.376020, 0.000000, 0.000000 +737, 0.926415, 0.376505, 0.000000, 0.000000 +738, 0.926217, 0.376990, 0.000000, 0.000000 +739, 0.926020, 0.377475, 0.000000, 0.000000 +740, 0.925822, 0.377960, 0.000000, 0.000000 +741, 0.925624, 0.378445, 0.000000, 0.000000 +742, 0.925425, 0.378930, 0.000000, 0.000000 +743, 0.925227, 0.379415, 0.000000, 0.000000 +744, 0.925028, 0.379899, 0.000000, 0.000000 +745, 0.924829, 0.380384, 0.000000, 0.000000 +746, 0.924629, 0.380868, 0.000000, 0.000000 +747, 0.924430, 0.381352, 0.000000, 0.000000 +748, 0.924230, 0.381836, 0.000000, 0.000000 +749, 0.924030, 0.382320, 0.000000, 0.000000 +750, 0.923829, 0.382804, 0.000000, 0.000000 +751, 0.923629, 0.383288, 0.000000, 0.000000 +752, 0.923428, 0.383772, 0.000000, 0.000000 +753, 0.923227, 0.384256, 0.000000, 0.000000 +754, 0.923025, 0.384739, 0.000000, 0.000000 +755, 0.922824, 0.385222, 0.000000, 0.000000 +756, 0.922622, 0.385706, 0.000000, 0.000000 +757, 0.922420, 0.386189, 0.000000, 0.000000 +758, 0.922217, 0.386672, 0.000000, 0.000000 +759, 0.922015, 0.387155, 0.000000, 0.000000 +760, 0.921812, 0.387638, 0.000000, 0.000000 +761, 0.921609, 0.388121, 0.000000, 0.000000 +762, 0.921405, 0.388603, 0.000000, 0.000000 +763, 0.921201, 0.389086, 0.000000, 0.000000 +764, 0.920998, 0.389568, 0.000000, 0.000000 +765, 0.920793, 0.390051, 0.000000, 0.000000 +766, 0.920589, 0.390533, 0.000000, 0.000000 +767, 0.920384, 0.391015, 0.000000, 0.000000 +768, 0.920179, 0.391497, 0.000000, 0.000000 +769, 0.919974, 0.391979, 0.000000, 0.000000 +770, 0.919769, 0.392461, 0.000000, 0.000000 +771, 0.919563, 0.392942, 0.000000, 0.000000 +772, 0.919357, 0.393424, 0.000000, 0.000000 +773, 0.919151, 0.393906, 0.000000, 0.000000 +774, 0.918944, 0.394387, 0.000000, 0.000000 +775, 0.918738, 0.394868, 0.000000, 0.000000 +776, 0.918531, 0.395349, 0.000000, 0.000000 +777, 0.918324, 0.395830, 0.000000, 0.000000 +778, 0.918116, 0.396311, 0.000000, 0.000000 +779, 0.917908, 0.396792, 0.000000, 0.000000 +780, 0.917701, 0.397273, 0.000000, 0.000000 +781, 0.917492, 0.397753, 0.000000, 0.000000 +782, 0.917284, 0.398234, 0.000000, 0.000000 +783, 0.917075, 0.398714, 0.000000, 0.000000 +784, 0.916866, 0.399195, 0.000000, 0.000000 +785, 0.916657, 0.399675, 0.000000, 0.000000 +786, 0.916448, 0.400155, 0.000000, 0.000000 +787, 0.916238, 0.400635, 0.000000, 0.000000 +788, 0.916028, 0.401115, 0.000000, 0.000000 +789, 0.915818, 0.401594, 0.000000, 0.000000 +790, 0.915607, 0.402074, 0.000000, 0.000000 +791, 0.915396, 0.402554, 0.000000, 0.000000 +792, 0.915185, 0.403033, 0.000000, 0.000000 +793, 0.914974, 0.403512, 0.000000, 0.000000 +794, 0.914763, 0.403991, 0.000000, 0.000000 +795, 0.914551, 0.404471, 0.000000, 0.000000 +796, 0.914339, 0.404950, 0.000000, 0.000000 +797, 0.914127, 0.405428, 0.000000, 0.000000 +798, 0.913914, 0.405907, 0.000000, 0.000000 +799, 0.913702, 0.406386, 0.000000, 0.000000 +800, 0.913489, 0.406864, 0.000000, 0.000000 +801, 0.913275, 0.407343, 0.000000, 0.000000 +802, 0.913062, 0.407821, 0.000000, 0.000000 +803, 0.912848, 0.408299, 0.000000, 0.000000 +804, 0.912634, 0.408777, 0.000000, 0.000000 +805, 0.912420, 0.409255, 0.000000, 0.000000 +806, 0.912206, 0.409733, 0.000000, 0.000000 +807, 0.911991, 0.410211, 0.000000, 0.000000 +808, 0.911776, 0.410688, 0.000000, 0.000000 +809, 0.911561, 0.411166, 0.000000, 0.000000 +810, 0.911345, 0.411643, 0.000000, 0.000000 +811, 0.911129, 0.412121, 0.000000, 0.000000 +812, 0.910913, 0.412598, 0.000000, 0.000000 +813, 0.910697, 0.413075, 0.000000, 0.000000 +814, 0.910481, 0.413552, 0.000000, 0.000000 +815, 0.910264, 0.414029, 0.000000, 0.000000 +816, 0.910047, 0.414505, 0.000000, 0.000000 +817, 0.909830, 0.414982, 0.000000, 0.000000 +818, 0.909612, 0.415458, 0.000000, 0.000000 +819, 0.909394, 0.415935, 0.000000, 0.000000 +820, 0.909177, 0.416411, 0.000000, 0.000000 +821, 0.908958, 0.416887, 0.000000, 0.000000 +822, 0.908740, 0.417363, 0.000000, 0.000000 +823, 0.908521, 0.417839, 0.000000, 0.000000 +824, 0.908302, 0.418315, 0.000000, 0.000000 +825, 0.908083, 0.418791, 0.000000, 0.000000 +826, 0.907863, 0.419266, 0.000000, 0.000000 +827, 0.907644, 0.419742, 0.000000, 0.000000 +828, 0.907424, 0.420217, 0.000000, 0.000000 +829, 0.907203, 0.420692, 0.000000, 0.000000 +830, 0.906983, 0.421167, 0.000000, 0.000000 +831, 0.906762, 0.421642, 0.000000, 0.000000 +832, 0.906541, 0.422117, 0.000000, 0.000000 +833, 0.906320, 0.422592, 0.000000, 0.000000 +834, 0.906099, 0.423067, 0.000000, 0.000000 +835, 0.905877, 0.423541, 0.000000, 0.000000 +836, 0.905655, 0.424015, 0.000000, 0.000000 +837, 0.905433, 0.424490, 0.000000, 0.000000 +838, 0.905210, 0.424964, 0.000000, 0.000000 +839, 0.904988, 0.425438, 0.000000, 0.000000 +840, 0.904765, 0.425912, 0.000000, 0.000000 +841, 0.904541, 0.426386, 0.000000, 0.000000 +842, 0.904318, 0.426860, 0.000000, 0.000000 +843, 0.904094, 0.427333, 0.000000, 0.000000 +844, 0.903870, 0.427807, 0.000000, 0.000000 +845, 0.903646, 0.428280, 0.000000, 0.000000 +846, 0.903422, 0.428753, 0.000000, 0.000000 +847, 0.903197, 0.429226, 0.000000, 0.000000 +848, 0.902972, 0.429699, 0.000000, 0.000000 +849, 0.902747, 0.430172, 0.000000, 0.000000 +850, 0.902521, 0.430645, 0.000000, 0.000000 +851, 0.902296, 0.431118, 0.000000, 0.000000 +852, 0.902070, 0.431590, 0.000000, 0.000000 +853, 0.901844, 0.432063, 0.000000, 0.000000 +854, 0.901617, 0.432535, 0.000000, 0.000000 +855, 0.901390, 0.433007, 0.000000, 0.000000 +856, 0.901164, 0.433479, 0.000000, 0.000000 +857, 0.900936, 0.433951, 0.000000, 0.000000 +858, 0.900709, 0.434423, 0.000000, 0.000000 +859, 0.900481, 0.434895, 0.000000, 0.000000 +860, 0.900253, 0.435366, 0.000000, 0.000000 +861, 0.900025, 0.435838, 0.000000, 0.000000 +862, 0.899797, 0.436309, 0.000000, 0.000000 +863, 0.899568, 0.436780, 0.000000, 0.000000 +864, 0.899339, 0.437251, 0.000000, 0.000000 +865, 0.899110, 0.437722, 0.000000, 0.000000 +866, 0.898881, 0.438193, 0.000000, 0.000000 +867, 0.898651, 0.438664, 0.000000, 0.000000 +868, 0.898421, 0.439135, 0.000000, 0.000000 +869, 0.898191, 0.439605, 0.000000, 0.000000 +870, 0.897961, 0.440076, 0.000000, 0.000000 +871, 0.897730, 0.440546, 0.000000, 0.000000 +872, 0.897499, 0.441016, 0.000000, 0.000000 +873, 0.897268, 0.441486, 0.000000, 0.000000 +874, 0.897037, 0.441956, 0.000000, 0.000000 +875, 0.896805, 0.442426, 0.000000, 0.000000 +876, 0.896573, 0.442895, 0.000000, 0.000000 +877, 0.896341, 0.443365, 0.000000, 0.000000 +878, 0.896109, 0.443834, 0.000000, 0.000000 +879, 0.895876, 0.444304, 0.000000, 0.000000 +880, 0.895643, 0.444773, 0.000000, 0.000000 +881, 0.895410, 0.445242, 0.000000, 0.000000 +882, 0.895177, 0.445711, 0.000000, 0.000000 +883, 0.894943, 0.446180, 0.000000, 0.000000 +884, 0.894710, 0.446648, 0.000000, 0.000000 +885, 0.894476, 0.447117, 0.000000, 0.000000 +886, 0.894241, 0.447585, 0.000000, 0.000000 +887, 0.894007, 0.448054, 0.000000, 0.000000 +888, 0.893772, 0.448522, 0.000000, 0.000000 +889, 0.893537, 0.448990, 0.000000, 0.000000 +890, 0.893302, 0.449458, 0.000000, 0.000000 +891, 0.893066, 0.449926, 0.000000, 0.000000 +892, 0.892830, 0.450393, 0.000000, 0.000000 +893, 0.892594, 0.450861, 0.000000, 0.000000 +894, 0.892358, 0.451328, 0.000000, 0.000000 +895, 0.892121, 0.451796, 0.000000, 0.000000 +896, 0.891885, 0.452263, 0.000000, 0.000000 +897, 0.891648, 0.452730, 0.000000, 0.000000 +898, 0.891410, 0.453197, 0.000000, 0.000000 +899, 0.891173, 0.453664, 0.000000, 0.000000 +900, 0.890935, 0.454130, 0.000000, 0.000000 +901, 0.890697, 0.454597, 0.000000, 0.000000 +902, 0.890459, 0.455064, 0.000000, 0.000000 +903, 0.890220, 0.455530, 0.000000, 0.000000 +904, 0.889982, 0.455996, 0.000000, 0.000000 +905, 0.889743, 0.456462, 0.000000, 0.000000 +906, 0.889504, 0.456928, 0.000000, 0.000000 +907, 0.889264, 0.457394, 0.000000, 0.000000 +908, 0.889024, 0.457860, 0.000000, 0.000000 +909, 0.888785, 0.458325, 0.000000, 0.000000 +910, 0.888544, 0.458791, 0.000000, 0.000000 +911, 0.888304, 0.459256, 0.000000, 0.000000 +912, 0.888063, 0.459721, 0.000000, 0.000000 +913, 0.887822, 0.460186, 0.000000, 0.000000 +914, 0.887581, 0.460651, 0.000000, 0.000000 +915, 0.887340, 0.461116, 0.000000, 0.000000 +916, 0.887098, 0.461581, 0.000000, 0.000000 +917, 0.886856, 0.462045, 0.000000, 0.000000 +918, 0.886614, 0.462510, 0.000000, 0.000000 +919, 0.886372, 0.462974, 0.000000, 0.000000 +920, 0.886129, 0.463438, 0.000000, 0.000000 +921, 0.885886, 0.463902, 0.000000, 0.000000 +922, 0.885643, 0.464366, 0.000000, 0.000000 +923, 0.885400, 0.464830, 0.000000, 0.000000 +924, 0.885156, 0.465294, 0.000000, 0.000000 +925, 0.884912, 0.465757, 0.000000, 0.000000 +926, 0.884668, 0.466221, 0.000000, 0.000000 +927, 0.884424, 0.466684, 0.000000, 0.000000 +928, 0.884179, 0.467147, 0.000000, 0.000000 +929, 0.883935, 0.467610, 0.000000, 0.000000 +930, 0.883690, 0.468073, 0.000000, 0.000000 +931, 0.883444, 0.468536, 0.000000, 0.000000 +932, 0.883199, 0.468999, 0.000000, 0.000000 +933, 0.882953, 0.469461, 0.000000, 0.000000 +934, 0.882707, 0.469924, 0.000000, 0.000000 +935, 0.882461, 0.470386, 0.000000, 0.000000 +936, 0.882214, 0.470848, 0.000000, 0.000000 +937, 0.881968, 0.471310, 0.000000, 0.000000 +938, 0.881721, 0.471772, 0.000000, 0.000000 +939, 0.881473, 0.472234, 0.000000, 0.000000 +940, 0.881226, 0.472695, 0.000000, 0.000000 +941, 0.880978, 0.473157, 0.000000, 0.000000 +942, 0.880730, 0.473618, 0.000000, 0.000000 +943, 0.880482, 0.474079, 0.000000, 0.000000 +944, 0.880234, 0.474541, 0.000000, 0.000000 +945, 0.879985, 0.475002, 0.000000, 0.000000 +946, 0.879736, 0.475462, 0.000000, 0.000000 +947, 0.879487, 0.475923, 0.000000, 0.000000 +948, 0.879237, 0.476384, 0.000000, 0.000000 +949, 0.878988, 0.476844, 0.000000, 0.000000 +950, 0.878738, 0.477305, 0.000000, 0.000000 +951, 0.878488, 0.477765, 0.000000, 0.000000 +952, 0.878237, 0.478225, 0.000000, 0.000000 +953, 0.877987, 0.478685, 0.000000, 0.000000 +954, 0.877736, 0.479145, 0.000000, 0.000000 +955, 0.877485, 0.479604, 0.000000, 0.000000 +956, 0.877234, 0.480064, 0.000000, 0.000000 +957, 0.876982, 0.480523, 0.000000, 0.000000 +958, 0.876730, 0.480982, 0.000000, 0.000000 +959, 0.876478, 0.481442, 0.000000, 0.000000 +960, 0.876226, 0.481901, 0.000000, 0.000000 +961, 0.875973, 0.482359, 0.000000, 0.000000 +962, 0.875721, 0.482818, 0.000000, 0.000000 +963, 0.875468, 0.483277, 0.000000, 0.000000 +964, 0.875214, 0.483735, 0.000000, 0.000000 +965, 0.874961, 0.484194, 0.000000, 0.000000 +966, 0.874707, 0.484652, 0.000000, 0.000000 +967, 0.874453, 0.485110, 0.000000, 0.000000 +968, 0.874199, 0.485568, 0.000000, 0.000000 +969, 0.873945, 0.486026, 0.000000, 0.000000 +970, 0.873690, 0.486483, 0.000000, 0.000000 +971, 0.873435, 0.486941, 0.000000, 0.000000 +972, 0.873180, 0.487398, 0.000000, 0.000000 +973, 0.872924, 0.487856, 0.000000, 0.000000 +974, 0.872669, 0.488313, 0.000000, 0.000000 +975, 0.872413, 0.488770, 0.000000, 0.000000 +976, 0.872157, 0.489227, 0.000000, 0.000000 +977, 0.871900, 0.489683, 0.000000, 0.000000 +978, 0.871644, 0.490140, 0.000000, 0.000000 +979, 0.871387, 0.490596, 0.000000, 0.000000 +980, 0.871130, 0.491053, 0.000000, 0.000000 +981, 0.870872, 0.491509, 0.000000, 0.000000 +982, 0.870615, 0.491965, 0.000000, 0.000000 +983, 0.870357, 0.492421, 0.000000, 0.000000 +984, 0.870099, 0.492877, 0.000000, 0.000000 +985, 0.869841, 0.493332, 0.000000, 0.000000 +986, 0.869582, 0.493788, 0.000000, 0.000000 +987, 0.869324, 0.494243, 0.000000, 0.000000 +988, 0.869065, 0.494699, 0.000000, 0.000000 +989, 0.868805, 0.495154, 0.000000, 0.000000 +990, 0.868546, 0.495609, 0.000000, 0.000000 +991, 0.868286, 0.496064, 0.000000, 0.000000 +992, 0.868026, 0.496518, 0.000000, 0.000000 +993, 0.867766, 0.496973, 0.000000, 0.000000 +994, 0.867506, 0.497427, 0.000000, 0.000000 +995, 0.867245, 0.497882, 0.000000, 0.000000 +996, 0.866984, 0.498336, 0.000000, 0.000000 +997, 0.866723, 0.498790, 0.000000, 0.000000 +998, 0.866462, 0.499244, 0.000000, 0.000000 +999, 0.866200, 0.499698, 0.000000, 0.000000 +1000, 0.865938, 0.500151, 0.000000, 0.000000 +1001, 0.865676, 0.500605, 0.000000, 0.000000 +1002, 0.865414, 0.501058, 0.000000, 0.000000 +1003, 0.865151, 0.501511, 0.000000, 0.000000 +1004, 0.864888, 0.501964, 0.000000, 0.000000 +1005, 0.864625, 0.502417, 0.000000, 0.000000 +1006, 0.864362, 0.502870, 0.000000, 0.000000 +1007, 0.864099, 0.503323, 0.000000, 0.000000 +1008, 0.863835, 0.503775, 0.000000, 0.000000 +1009, 0.863571, 0.504228, 0.000000, 0.000000 +1010, 0.863307, 0.504680, 0.000000, 0.000000 +1011, 0.863042, 0.505132, 0.000000, 0.000000 +1012, 0.862777, 0.505584, 0.000000, 0.000000 +1013, 0.862512, 0.506036, 0.000000, 0.000000 +1014, 0.862247, 0.506487, 0.000000, 0.000000 +1015, 0.861982, 0.506939, 0.000000, 0.000000 +1016, 0.861716, 0.507390, 0.000000, 0.000000 +1017, 0.861450, 0.507842, 0.000000, 0.000000 +1018, 0.861184, 0.508293, 0.000000, 0.000000 +1019, 0.860918, 0.508744, 0.000000, 0.000000 +1020, 0.860651, 0.509195, 0.000000, 0.000000 +1021, 0.860385, 0.509645, 0.000000, 0.000000 +1022, 0.860117, 0.510096, 0.000000, 0.000000 +1023, 0.859850, 0.510546, 0.000000, 0.000000 +1024, 0.859583, 0.510997, 0.000000, 0.000000 +1025, 0.859315, 0.511447, 0.000000, 0.000000 +1026, 0.859047, 0.511897, 0.000000, 0.000000 +1027, 0.858779, 0.512347, 0.000000, 0.000000 +1028, 0.858510, 0.512797, 0.000000, 0.000000 +1029, 0.858241, 0.513246, 0.000000, 0.000000 +1030, 0.857973, 0.513696, 0.000000, 0.000000 +1031, 0.857703, 0.514145, 0.000000, 0.000000 +1032, 0.857434, 0.514594, 0.000000, 0.000000 +1033, 0.857164, 0.515043, 0.000000, 0.000000 +1034, 0.856894, 0.515492, 0.000000, 0.000000 +1035, 0.856624, 0.515941, 0.000000, 0.000000 +1036, 0.856354, 0.516389, 0.000000, 0.000000 +1037, 0.856083, 0.516838, 0.000000, 0.000000 +1038, 0.855813, 0.517286, 0.000000, 0.000000 +1039, 0.855541, 0.517734, 0.000000, 0.000000 +1040, 0.855270, 0.518182, 0.000000, 0.000000 +1041, 0.854999, 0.518630, 0.000000, 0.000000 +1042, 0.854727, 0.519078, 0.000000, 0.000000 +1043, 0.854455, 0.519526, 0.000000, 0.000000 +1044, 0.854183, 0.519973, 0.000000, 0.000000 +1045, 0.853910, 0.520420, 0.000000, 0.000000 +1046, 0.853638, 0.520868, 0.000000, 0.000000 +1047, 0.853365, 0.521315, 0.000000, 0.000000 +1048, 0.853091, 0.521761, 0.000000, 0.000000 +1049, 0.852818, 0.522208, 0.000000, 0.000000 +1050, 0.852544, 0.522655, 0.000000, 0.000000 +1051, 0.852270, 0.523101, 0.000000, 0.000000 +1052, 0.851996, 0.523548, 0.000000, 0.000000 +1053, 0.851722, 0.523994, 0.000000, 0.000000 +1054, 0.851447, 0.524440, 0.000000, 0.000000 +1055, 0.851173, 0.524886, 0.000000, 0.000000 +1056, 0.850898, 0.525332, 0.000000, 0.000000 +1057, 0.850622, 0.525777, 0.000000, 0.000000 +1058, 0.850347, 0.526223, 0.000000, 0.000000 +1059, 0.850071, 0.526668, 0.000000, 0.000000 +1060, 0.849795, 0.527113, 0.000000, 0.000000 +1061, 0.849519, 0.527558, 0.000000, 0.000000 +1062, 0.849243, 0.528003, 0.000000, 0.000000 +1063, 0.848966, 0.528448, 0.000000, 0.000000 +1064, 0.848689, 0.528892, 0.000000, 0.000000 +1065, 0.848412, 0.529337, 0.000000, 0.000000 +1066, 0.848134, 0.529781, 0.000000, 0.000000 +1067, 0.847857, 0.530225, 0.000000, 0.000000 +1068, 0.847579, 0.530669, 0.000000, 0.000000 +1069, 0.847301, 0.531113, 0.000000, 0.000000 +1070, 0.847023, 0.531557, 0.000000, 0.000000 +1071, 0.846744, 0.532000, 0.000000, 0.000000 +1072, 0.846465, 0.532444, 0.000000, 0.000000 +1073, 0.846186, 0.532887, 0.000000, 0.000000 +1074, 0.845907, 0.533330, 0.000000, 0.000000 +1075, 0.845628, 0.533773, 0.000000, 0.000000 +1076, 0.845348, 0.534216, 0.000000, 0.000000 +1077, 0.845068, 0.534659, 0.000000, 0.000000 +1078, 0.844788, 0.535101, 0.000000, 0.000000 +1079, 0.844507, 0.535544, 0.000000, 0.000000 +1080, 0.844227, 0.535986, 0.000000, 0.000000 +1081, 0.843946, 0.536428, 0.000000, 0.000000 +1082, 0.843665, 0.536870, 0.000000, 0.000000 +1083, 0.843384, 0.537312, 0.000000, 0.000000 +1084, 0.843102, 0.537754, 0.000000, 0.000000 +1085, 0.842820, 0.538195, 0.000000, 0.000000 +1086, 0.842538, 0.538636, 0.000000, 0.000000 +1087, 0.842256, 0.539078, 0.000000, 0.000000 +1088, 0.841974, 0.539519, 0.000000, 0.000000 +1089, 0.841691, 0.539960, 0.000000, 0.000000 +1090, 0.841408, 0.540400, 0.000000, 0.000000 +1091, 0.841125, 0.540841, 0.000000, 0.000000 +1092, 0.840841, 0.541282, 0.000000, 0.000000 +1093, 0.840558, 0.541722, 0.000000, 0.000000 +1094, 0.840274, 0.542162, 0.000000, 0.000000 +1095, 0.839990, 0.542602, 0.000000, 0.000000 +1096, 0.839706, 0.543042, 0.000000, 0.000000 +1097, 0.839421, 0.543482, 0.000000, 0.000000 +1098, 0.839136, 0.543921, 0.000000, 0.000000 +1099, 0.838851, 0.544361, 0.000000, 0.000000 +1100, 0.838566, 0.544800, 0.000000, 0.000000 +1101, 0.838280, 0.545239, 0.000000, 0.000000 +1102, 0.837995, 0.545678, 0.000000, 0.000000 +1103, 0.837709, 0.546117, 0.000000, 0.000000 +1104, 0.837423, 0.546556, 0.000000, 0.000000 +1105, 0.837136, 0.546994, 0.000000, 0.000000 +1106, 0.836850, 0.547433, 0.000000, 0.000000 +1107, 0.836563, 0.547871, 0.000000, 0.000000 +1108, 0.836276, 0.548309, 0.000000, 0.000000 +1109, 0.835988, 0.548747, 0.000000, 0.000000 +1110, 0.835701, 0.549185, 0.000000, 0.000000 +1111, 0.835413, 0.549622, 0.000000, 0.000000 +1112, 0.835125, 0.550060, 0.000000, 0.000000 +1113, 0.834837, 0.550497, 0.000000, 0.000000 +1114, 0.834549, 0.550934, 0.000000, 0.000000 +1115, 0.834260, 0.551371, 0.000000, 0.000000 +1116, 0.833971, 0.551808, 0.000000, 0.000000 +1117, 0.833682, 0.552245, 0.000000, 0.000000 +1118, 0.833392, 0.552682, 0.000000, 0.000000 +1119, 0.833103, 0.553118, 0.000000, 0.000000 +1120, 0.832813, 0.553554, 0.000000, 0.000000 +1121, 0.832523, 0.553991, 0.000000, 0.000000 +1122, 0.832233, 0.554427, 0.000000, 0.000000 +1123, 0.831942, 0.554862, 0.000000, 0.000000 +1124, 0.831651, 0.555298, 0.000000, 0.000000 +1125, 0.831360, 0.555734, 0.000000, 0.000000 +1126, 0.831069, 0.556169, 0.000000, 0.000000 +1127, 0.830778, 0.556604, 0.000000, 0.000000 +1128, 0.830486, 0.557039, 0.000000, 0.000000 +1129, 0.830194, 0.557474, 0.000000, 0.000000 +1130, 0.829902, 0.557909, 0.000000, 0.000000 +1131, 0.829610, 0.558343, 0.000000, 0.000000 +1132, 0.829317, 0.558778, 0.000000, 0.000000 +1133, 0.829025, 0.559212, 0.000000, 0.000000 +1134, 0.828732, 0.559646, 0.000000, 0.000000 +1135, 0.828438, 0.560080, 0.000000, 0.000000 +1136, 0.828145, 0.560514, 0.000000, 0.000000 +1137, 0.827851, 0.560948, 0.000000, 0.000000 +1138, 0.827557, 0.561381, 0.000000, 0.000000 +1139, 0.827263, 0.561815, 0.000000, 0.000000 +1140, 0.826969, 0.562248, 0.000000, 0.000000 +1141, 0.826674, 0.562681, 0.000000, 0.000000 +1142, 0.826379, 0.563114, 0.000000, 0.000000 +1143, 0.826084, 0.563547, 0.000000, 0.000000 +1144, 0.825789, 0.563979, 0.000000, 0.000000 +1145, 0.825493, 0.564412, 0.000000, 0.000000 +1146, 0.825198, 0.564844, 0.000000, 0.000000 +1147, 0.824902, 0.565276, 0.000000, 0.000000 +1148, 0.824606, 0.565708, 0.000000, 0.000000 +1149, 0.824309, 0.566140, 0.000000, 0.000000 +1150, 0.824012, 0.566572, 0.000000, 0.000000 +1151, 0.823716, 0.567003, 0.000000, 0.000000 +1152, 0.823418, 0.567435, 0.000000, 0.000000 +1153, 0.823121, 0.567866, 0.000000, 0.000000 +1154, 0.822824, 0.568297, 0.000000, 0.000000 +1155, 0.822526, 0.568728, 0.000000, 0.000000 +1156, 0.822228, 0.569158, 0.000000, 0.000000 +1157, 0.821930, 0.569589, 0.000000, 0.000000 +1158, 0.821631, 0.570019, 0.000000, 0.000000 +1159, 0.821333, 0.570450, 0.000000, 0.000000 +1160, 0.821034, 0.570880, 0.000000, 0.000000 +1161, 0.820734, 0.571310, 0.000000, 0.000000 +1162, 0.820435, 0.571740, 0.000000, 0.000000 +1163, 0.820136, 0.572169, 0.000000, 0.000000 +1164, 0.819836, 0.572599, 0.000000, 0.000000 +1165, 0.819536, 0.573028, 0.000000, 0.000000 +1166, 0.819235, 0.573457, 0.000000, 0.000000 +1167, 0.818935, 0.573886, 0.000000, 0.000000 +1168, 0.818634, 0.574315, 0.000000, 0.000000 +1169, 0.818333, 0.574744, 0.000000, 0.000000 +1170, 0.818032, 0.575172, 0.000000, 0.000000 +1171, 0.817731, 0.575601, 0.000000, 0.000000 +1172, 0.817429, 0.576029, 0.000000, 0.000000 +1173, 0.817127, 0.576457, 0.000000, 0.000000 +1174, 0.816825, 0.576885, 0.000000, 0.000000 +1175, 0.816523, 0.577313, 0.000000, 0.000000 +1176, 0.816221, 0.577740, 0.000000, 0.000000 +1177, 0.815918, 0.578168, 0.000000, 0.000000 +1178, 0.815615, 0.578595, 0.000000, 0.000000 +1179, 0.815312, 0.579022, 0.000000, 0.000000 +1180, 0.815008, 0.579449, 0.000000, 0.000000 +1181, 0.814705, 0.579876, 0.000000, 0.000000 +1182, 0.814401, 0.580303, 0.000000, 0.000000 +1183, 0.814097, 0.580729, 0.000000, 0.000000 +1184, 0.813793, 0.581155, 0.000000, 0.000000 +1185, 0.813488, 0.581581, 0.000000, 0.000000 +1186, 0.813183, 0.582008, 0.000000, 0.000000 +1187, 0.812878, 0.582433, 0.000000, 0.000000 +1188, 0.812573, 0.582859, 0.000000, 0.000000 +1189, 0.812268, 0.583285, 0.000000, 0.000000 +1190, 0.811962, 0.583710, 0.000000, 0.000000 +1191, 0.811656, 0.584135, 0.000000, 0.000000 +1192, 0.811350, 0.584560, 0.000000, 0.000000 +1193, 0.811044, 0.584985, 0.000000, 0.000000 +1194, 0.810738, 0.585410, 0.000000, 0.000000 +1195, 0.810431, 0.585834, 0.000000, 0.000000 +1196, 0.810124, 0.586259, 0.000000, 0.000000 +1197, 0.809817, 0.586683, 0.000000, 0.000000 +1198, 0.809509, 0.587107, 0.000000, 0.000000 +1199, 0.809202, 0.587531, 0.000000, 0.000000 +1200, 0.808894, 0.587955, 0.000000, 0.000000 +1201, 0.808586, 0.588378, 0.000000, 0.000000 +1202, 0.808277, 0.588802, 0.000000, 0.000000 +1203, 0.807969, 0.589225, 0.000000, 0.000000 +1204, 0.807660, 0.589648, 0.000000, 0.000000 +1205, 0.807351, 0.590071, 0.000000, 0.000000 +1206, 0.807042, 0.590494, 0.000000, 0.000000 +1207, 0.806733, 0.590917, 0.000000, 0.000000 +1208, 0.806423, 0.591339, 0.000000, 0.000000 +1209, 0.806113, 0.591761, 0.000000, 0.000000 +1210, 0.805803, 0.592183, 0.000000, 0.000000 +1211, 0.805493, 0.592605, 0.000000, 0.000000 +1212, 0.805182, 0.593027, 0.000000, 0.000000 +1213, 0.804872, 0.593449, 0.000000, 0.000000 +1214, 0.804561, 0.593870, 0.000000, 0.000000 +1215, 0.804250, 0.594292, 0.000000, 0.000000 +1216, 0.803938, 0.594713, 0.000000, 0.000000 +1217, 0.803627, 0.595134, 0.000000, 0.000000 +1218, 0.803315, 0.595555, 0.000000, 0.000000 +1219, 0.803003, 0.595975, 0.000000, 0.000000 +1220, 0.802690, 0.596396, 0.000000, 0.000000 +1221, 0.802378, 0.596816, 0.000000, 0.000000 +1222, 0.802065, 0.597236, 0.000000, 0.000000 +1223, 0.801752, 0.597656, 0.000000, 0.000000 +1224, 0.801439, 0.598076, 0.000000, 0.000000 +1225, 0.801126, 0.598496, 0.000000, 0.000000 +1226, 0.800812, 0.598915, 0.000000, 0.000000 +1227, 0.800498, 0.599335, 0.000000, 0.000000 +1228, 0.800184, 0.599754, 0.000000, 0.000000 +1229, 0.799870, 0.600173, 0.000000, 0.000000 +1230, 0.799556, 0.600592, 0.000000, 0.000000 +1231, 0.799241, 0.601011, 0.000000, 0.000000 +1232, 0.798926, 0.601429, 0.000000, 0.000000 +1233, 0.798611, 0.601848, 0.000000, 0.000000 +1234, 0.798296, 0.602266, 0.000000, 0.000000 +1235, 0.797980, 0.602684, 0.000000, 0.000000 +1236, 0.797664, 0.603102, 0.000000, 0.000000 +1237, 0.797348, 0.603519, 0.000000, 0.000000 +1238, 0.797032, 0.603937, 0.000000, 0.000000 +1239, 0.796716, 0.604354, 0.000000, 0.000000 +1240, 0.796399, 0.604772, 0.000000, 0.000000 +1241, 0.796082, 0.605189, 0.000000, 0.000000 +1242, 0.795765, 0.605605, 0.000000, 0.000000 +1243, 0.795448, 0.606022, 0.000000, 0.000000 +1244, 0.795130, 0.606439, 0.000000, 0.000000 +1245, 0.794812, 0.606855, 0.000000, 0.000000 +1246, 0.794494, 0.607271, 0.000000, 0.000000 +1247, 0.794176, 0.607687, 0.000000, 0.000000 +1248, 0.793858, 0.608103, 0.000000, 0.000000 +1249, 0.793539, 0.608519, 0.000000, 0.000000 +1250, 0.793220, 0.608935, 0.000000, 0.000000 +1251, 0.792901, 0.609350, 0.000000, 0.000000 +1252, 0.792582, 0.609765, 0.000000, 0.000000 +1253, 0.792263, 0.610180, 0.000000, 0.000000 +1254, 0.791943, 0.610595, 0.000000, 0.000000 +1255, 0.791623, 0.611010, 0.000000, 0.000000 +1256, 0.791303, 0.611424, 0.000000, 0.000000 +1257, 0.790983, 0.611839, 0.000000, 0.000000 +1258, 0.790662, 0.612253, 0.000000, 0.000000 +1259, 0.790341, 0.612667, 0.000000, 0.000000 +1260, 0.790020, 0.613081, 0.000000, 0.000000 +1261, 0.789699, 0.613495, 0.000000, 0.000000 +1262, 0.789377, 0.613908, 0.000000, 0.000000 +1263, 0.789056, 0.614321, 0.000000, 0.000000 +1264, 0.788734, 0.614735, 0.000000, 0.000000 +1265, 0.788412, 0.615148, 0.000000, 0.000000 +1266, 0.788090, 0.615561, 0.000000, 0.000000 +1267, 0.787767, 0.615973, 0.000000, 0.000000 +1268, 0.787444, 0.616386, 0.000000, 0.000000 +1269, 0.787121, 0.616798, 0.000000, 0.000000 +1270, 0.786798, 0.617210, 0.000000, 0.000000 +1271, 0.786475, 0.617622, 0.000000, 0.000000 +1272, 0.786151, 0.618034, 0.000000, 0.000000 +1273, 0.785827, 0.618446, 0.000000, 0.000000 +1274, 0.785503, 0.618857, 0.000000, 0.000000 +1275, 0.785179, 0.619269, 0.000000, 0.000000 +1276, 0.784855, 0.619680, 0.000000, 0.000000 +1277, 0.784530, 0.620091, 0.000000, 0.000000 +1278, 0.784205, 0.620502, 0.000000, 0.000000 +1279, 0.783880, 0.620912, 0.000000, 0.000000 +1280, 0.783555, 0.621323, 0.000000, 0.000000 +1281, 0.783229, 0.621733, 0.000000, 0.000000 +1282, 0.782903, 0.622143, 0.000000, 0.000000 +1283, 0.782577, 0.622553, 0.000000, 0.000000 +1284, 0.782251, 0.622963, 0.000000, 0.000000 +1285, 0.781925, 0.623373, 0.000000, 0.000000 +1286, 0.781598, 0.623782, 0.000000, 0.000000 +1287, 0.781271, 0.624192, 0.000000, 0.000000 +1288, 0.780944, 0.624601, 0.000000, 0.000000 +1289, 0.780617, 0.625010, 0.000000, 0.000000 +1290, 0.780290, 0.625418, 0.000000, 0.000000 +1291, 0.779962, 0.625827, 0.000000, 0.000000 +1292, 0.779634, 0.626235, 0.000000, 0.000000 +1293, 0.779306, 0.626644, 0.000000, 0.000000 +1294, 0.778978, 0.627052, 0.000000, 0.000000 +1295, 0.778649, 0.627460, 0.000000, 0.000000 +1296, 0.778320, 0.627867, 0.000000, 0.000000 +1297, 0.777991, 0.628275, 0.000000, 0.000000 +1298, 0.777662, 0.628682, 0.000000, 0.000000 +1299, 0.777333, 0.629090, 0.000000, 0.000000 +1300, 0.777003, 0.629497, 0.000000, 0.000000 +1301, 0.776673, 0.629904, 0.000000, 0.000000 +1302, 0.776343, 0.630310, 0.000000, 0.000000 +1303, 0.776013, 0.630717, 0.000000, 0.000000 +1304, 0.775683, 0.631123, 0.000000, 0.000000 +1305, 0.775352, 0.631529, 0.000000, 0.000000 +1306, 0.775021, 0.631935, 0.000000, 0.000000 +1307, 0.774690, 0.632341, 0.000000, 0.000000 +1308, 0.774359, 0.632747, 0.000000, 0.000000 +1309, 0.774027, 0.633153, 0.000000, 0.000000 +1310, 0.773695, 0.633558, 0.000000, 0.000000 +1311, 0.773363, 0.633963, 0.000000, 0.000000 +1312, 0.773031, 0.634368, 0.000000, 0.000000 +1313, 0.772699, 0.634773, 0.000000, 0.000000 +1314, 0.772366, 0.635177, 0.000000, 0.000000 +1315, 0.772033, 0.635582, 0.000000, 0.000000 +1316, 0.771700, 0.635986, 0.000000, 0.000000 +1317, 0.771367, 0.636390, 0.000000, 0.000000 +1318, 0.771034, 0.636794, 0.000000, 0.000000 +1319, 0.770700, 0.637198, 0.000000, 0.000000 +1320, 0.770366, 0.637602, 0.000000, 0.000000 +1321, 0.770032, 0.638005, 0.000000, 0.000000 +1322, 0.769698, 0.638408, 0.000000, 0.000000 +1323, 0.769363, 0.638811, 0.000000, 0.000000 +1324, 0.769029, 0.639214, 0.000000, 0.000000 +1325, 0.768694, 0.639617, 0.000000, 0.000000 +1326, 0.768359, 0.640019, 0.000000, 0.000000 +1327, 0.768023, 0.640422, 0.000000, 0.000000 +1328, 0.767688, 0.640824, 0.000000, 0.000000 +1329, 0.767352, 0.641226, 0.000000, 0.000000 +1330, 0.767016, 0.641628, 0.000000, 0.000000 +1331, 0.766680, 0.642029, 0.000000, 0.000000 +1332, 0.766344, 0.642431, 0.000000, 0.000000 +1333, 0.766007, 0.642832, 0.000000, 0.000000 +1334, 0.765670, 0.643233, 0.000000, 0.000000 +1335, 0.765333, 0.643634, 0.000000, 0.000000 +1336, 0.764996, 0.644035, 0.000000, 0.000000 +1337, 0.764659, 0.644436, 0.000000, 0.000000 +1338, 0.764321, 0.644836, 0.000000, 0.000000 +1339, 0.763983, 0.645236, 0.000000, 0.000000 +1340, 0.763645, 0.645636, 0.000000, 0.000000 +1341, 0.763307, 0.646036, 0.000000, 0.000000 +1342, 0.762968, 0.646436, 0.000000, 0.000000 +1343, 0.762630, 0.646835, 0.000000, 0.000000 +1344, 0.762291, 0.647235, 0.000000, 0.000000 +1345, 0.761952, 0.647634, 0.000000, 0.000000 +1346, 0.761612, 0.648033, 0.000000, 0.000000 +1347, 0.761273, 0.648432, 0.000000, 0.000000 +1348, 0.760933, 0.648830, 0.000000, 0.000000 +1349, 0.760593, 0.649229, 0.000000, 0.000000 +1350, 0.760253, 0.649627, 0.000000, 0.000000 +1351, 0.759913, 0.650025, 0.000000, 0.000000 +1352, 0.759572, 0.650423, 0.000000, 0.000000 +1353, 0.759231, 0.650821, 0.000000, 0.000000 +1354, 0.758890, 0.651219, 0.000000, 0.000000 +1355, 0.758549, 0.651616, 0.000000, 0.000000 +1356, 0.758208, 0.652013, 0.000000, 0.000000 +1357, 0.757866, 0.652410, 0.000000, 0.000000 +1358, 0.757524, 0.652807, 0.000000, 0.000000 +1359, 0.757182, 0.653204, 0.000000, 0.000000 +1360, 0.756840, 0.653600, 0.000000, 0.000000 +1361, 0.756497, 0.653997, 0.000000, 0.000000 +1362, 0.756155, 0.654393, 0.000000, 0.000000 +1363, 0.755812, 0.654789, 0.000000, 0.000000 +1364, 0.755469, 0.655185, 0.000000, 0.000000 +1365, 0.755126, 0.655580, 0.000000, 0.000000 +1366, 0.754782, 0.655976, 0.000000, 0.000000 +1367, 0.754438, 0.656371, 0.000000, 0.000000 +1368, 0.754095, 0.656766, 0.000000, 0.000000 +1369, 0.753750, 0.657161, 0.000000, 0.000000 +1370, 0.753406, 0.657555, 0.000000, 0.000000 +1371, 0.753062, 0.657950, 0.000000, 0.000000 +1372, 0.752717, 0.658344, 0.000000, 0.000000 +1373, 0.752372, 0.658739, 0.000000, 0.000000 +1374, 0.752027, 0.659132, 0.000000, 0.000000 +1375, 0.751682, 0.659526, 0.000000, 0.000000 +1376, 0.751336, 0.659920, 0.000000, 0.000000 +1377, 0.750990, 0.660313, 0.000000, 0.000000 +1378, 0.750644, 0.660707, 0.000000, 0.000000 +1379, 0.750298, 0.661100, 0.000000, 0.000000 +1380, 0.749952, 0.661493, 0.000000, 0.000000 +1381, 0.749605, 0.661885, 0.000000, 0.000000 +1382, 0.749258, 0.662278, 0.000000, 0.000000 +1383, 0.748911, 0.662670, 0.000000, 0.000000 +1384, 0.748564, 0.663062, 0.000000, 0.000000 +1385, 0.748217, 0.663454, 0.000000, 0.000000 +1386, 0.747869, 0.663846, 0.000000, 0.000000 +1387, 0.747521, 0.664238, 0.000000, 0.000000 +1388, 0.747173, 0.664629, 0.000000, 0.000000 +1389, 0.746825, 0.665020, 0.000000, 0.000000 +1390, 0.746477, 0.665412, 0.000000, 0.000000 +1391, 0.746128, 0.665802, 0.000000, 0.000000 +1392, 0.745779, 0.666193, 0.000000, 0.000000 +1393, 0.745430, 0.666584, 0.000000, 0.000000 +1394, 0.745081, 0.666974, 0.000000, 0.000000 +1395, 0.744732, 0.667364, 0.000000, 0.000000 +1396, 0.744382, 0.667754, 0.000000, 0.000000 +1397, 0.744032, 0.668144, 0.000000, 0.000000 +1398, 0.743682, 0.668534, 0.000000, 0.000000 +1399, 0.743332, 0.668923, 0.000000, 0.000000 +1400, 0.742981, 0.669312, 0.000000, 0.000000 +1401, 0.742631, 0.669701, 0.000000, 0.000000 +1402, 0.742280, 0.670090, 0.000000, 0.000000 +1403, 0.741929, 0.670479, 0.000000, 0.000000 +1404, 0.741577, 0.670867, 0.000000, 0.000000 +1405, 0.741226, 0.671256, 0.000000, 0.000000 +1406, 0.740874, 0.671644, 0.000000, 0.000000 +1407, 0.740522, 0.672032, 0.000000, 0.000000 +1408, 0.740170, 0.672420, 0.000000, 0.000000 +1409, 0.739818, 0.672807, 0.000000, 0.000000 +1410, 0.739465, 0.673195, 0.000000, 0.000000 +1411, 0.739113, 0.673582, 0.000000, 0.000000 +1412, 0.738760, 0.673969, 0.000000, 0.000000 +1413, 0.738407, 0.674356, 0.000000, 0.000000 +1414, 0.738053, 0.674742, 0.000000, 0.000000 +1415, 0.737700, 0.675129, 0.000000, 0.000000 +1416, 0.737346, 0.675515, 0.000000, 0.000000 +1417, 0.736992, 0.675901, 0.000000, 0.000000 +1418, 0.736638, 0.676287, 0.000000, 0.000000 +1419, 0.736284, 0.676673, 0.000000, 0.000000 +1420, 0.735929, 0.677058, 0.000000, 0.000000 +1421, 0.735575, 0.677444, 0.000000, 0.000000 +1422, 0.735220, 0.677829, 0.000000, 0.000000 +1423, 0.734864, 0.678214, 0.000000, 0.000000 +1424, 0.734509, 0.678599, 0.000000, 0.000000 +1425, 0.734154, 0.678983, 0.000000, 0.000000 +1426, 0.733798, 0.679368, 0.000000, 0.000000 +1427, 0.733442, 0.679752, 0.000000, 0.000000 +1428, 0.733086, 0.680136, 0.000000, 0.000000 +1429, 0.732729, 0.680520, 0.000000, 0.000000 +1430, 0.732373, 0.680904, 0.000000, 0.000000 +1431, 0.732016, 0.681287, 0.000000, 0.000000 +1432, 0.731659, 0.681671, 0.000000, 0.000000 +1433, 0.731302, 0.682054, 0.000000, 0.000000 +1434, 0.730945, 0.682437, 0.000000, 0.000000 +1435, 0.730587, 0.682819, 0.000000, 0.000000 +1436, 0.730229, 0.683202, 0.000000, 0.000000 +1437, 0.729872, 0.683584, 0.000000, 0.000000 +1438, 0.729513, 0.683967, 0.000000, 0.000000 +1439, 0.729155, 0.684349, 0.000000, 0.000000 +1440, 0.728797, 0.684730, 0.000000, 0.000000 +1441, 0.728438, 0.685112, 0.000000, 0.000000 +1442, 0.728079, 0.685493, 0.000000, 0.000000 +1443, 0.727720, 0.685875, 0.000000, 0.000000 +1444, 0.727360, 0.686256, 0.000000, 0.000000 +1445, 0.727001, 0.686637, 0.000000, 0.000000 +1446, 0.726641, 0.687017, 0.000000, 0.000000 +1447, 0.726281, 0.687398, 0.000000, 0.000000 +1448, 0.725921, 0.687778, 0.000000, 0.000000 +1449, 0.725561, 0.688158, 0.000000, 0.000000 +1450, 0.725200, 0.688538, 0.000000, 0.000000 +1451, 0.724839, 0.688918, 0.000000, 0.000000 +1452, 0.724478, 0.689297, 0.000000, 0.000000 +1453, 0.724117, 0.689677, 0.000000, 0.000000 +1454, 0.723756, 0.690056, 0.000000, 0.000000 +1455, 0.723394, 0.690435, 0.000000, 0.000000 +1456, 0.723033, 0.690814, 0.000000, 0.000000 +1457, 0.722671, 0.691192, 0.000000, 0.000000 +1458, 0.722309, 0.691571, 0.000000, 0.000000 +1459, 0.721946, 0.691949, 0.000000, 0.000000 +1460, 0.721584, 0.692327, 0.000000, 0.000000 +1461, 0.721221, 0.692705, 0.000000, 0.000000 +1462, 0.720858, 0.693083, 0.000000, 0.000000 +1463, 0.720495, 0.693460, 0.000000, 0.000000 +1464, 0.720132, 0.693837, 0.000000, 0.000000 +1465, 0.719768, 0.694214, 0.000000, 0.000000 +1466, 0.719404, 0.694591, 0.000000, 0.000000 +1467, 0.719041, 0.694968, 0.000000, 0.000000 +1468, 0.718676, 0.695345, 0.000000, 0.000000 +1469, 0.718312, 0.695721, 0.000000, 0.000000 +1470, 0.717948, 0.696097, 0.000000, 0.000000 +1471, 0.717583, 0.696473, 0.000000, 0.000000 +1472, 0.717218, 0.696849, 0.000000, 0.000000 +1473, 0.716853, 0.697224, 0.000000, 0.000000 +1474, 0.716488, 0.697600, 0.000000, 0.000000 +1475, 0.716122, 0.697975, 0.000000, 0.000000 +1476, 0.715757, 0.698350, 0.000000, 0.000000 +1477, 0.715391, 0.698725, 0.000000, 0.000000 +1478, 0.715025, 0.699099, 0.000000, 0.000000 +1479, 0.714658, 0.699474, 0.000000, 0.000000 +1480, 0.714292, 0.699848, 0.000000, 0.000000 +1481, 0.713925, 0.700222, 0.000000, 0.000000 +1482, 0.713558, 0.700596, 0.000000, 0.000000 +1483, 0.713191, 0.700969, 0.000000, 0.000000 +1484, 0.712824, 0.701343, 0.000000, 0.000000 +1485, 0.712457, 0.701716, 0.000000, 0.000000 +1486, 0.712089, 0.702089, 0.000000, 0.000000 +1487, 0.711721, 0.702462, 0.000000, 0.000000 +1488, 0.711353, 0.702835, 0.000000, 0.000000 +1489, 0.710985, 0.703207, 0.000000, 0.000000 +1490, 0.710616, 0.703580, 0.000000, 0.000000 +1491, 0.710248, 0.703952, 0.000000, 0.000000 +1492, 0.709879, 0.704324, 0.000000, 0.000000 +1493, 0.709510, 0.704695, 0.000000, 0.000000 +1494, 0.709141, 0.705067, 0.000000, 0.000000 +1495, 0.708771, 0.705438, 0.000000, 0.000000 +1496, 0.708402, 0.705809, 0.000000, 0.000000 +1497, 0.708032, 0.706180, 0.000000, 0.000000 +1498, 0.707662, 0.706551, 0.000000, 0.000000 +1499, 0.707292, 0.706922, 0.000000, 0.000000 +1500, 0.706922, 0.707292, 0.000000, 0.000000 +1501, 0.706551, 0.707662, 0.000000, 0.000000 +1502, 0.706180, 0.708032, 0.000000, 0.000000 +1503, 0.705809, 0.708402, 0.000000, 0.000000 +1504, 0.705438, 0.708771, 0.000000, 0.000000 +1505, 0.705067, 0.709141, 0.000000, 0.000000 +1506, 0.704695, 0.709510, 0.000000, 0.000000 +1507, 0.704324, 0.709879, 0.000000, 0.000000 +1508, 0.703952, 0.710248, 0.000000, 0.000000 +1509, 0.703580, 0.710616, 0.000000, 0.000000 +1510, 0.703207, 0.710985, 0.000000, 0.000000 +1511, 0.702835, 0.711353, 0.000000, 0.000000 +1512, 0.702462, 0.711721, 0.000000, 0.000000 +1513, 0.702089, 0.712089, 0.000000, 0.000000 +1514, 0.701716, 0.712457, 0.000000, 0.000000 +1515, 0.701343, 0.712824, 0.000000, 0.000000 +1516, 0.700969, 0.713191, 0.000000, 0.000000 +1517, 0.700596, 0.713558, 0.000000, 0.000000 +1518, 0.700222, 0.713925, 0.000000, 0.000000 +1519, 0.699848, 0.714292, 0.000000, 0.000000 +1520, 0.699474, 0.714658, 0.000000, 0.000000 +1521, 0.699099, 0.715025, 0.000000, 0.000000 +1522, 0.698725, 0.715391, 0.000000, 0.000000 +1523, 0.698350, 0.715757, 0.000000, 0.000000 +1524, 0.697975, 0.716122, 0.000000, 0.000000 +1525, 0.697600, 0.716488, 0.000000, 0.000000 +1526, 0.697224, 0.716853, 0.000000, 0.000000 +1527, 0.696849, 0.717218, 0.000000, 0.000000 +1528, 0.696473, 0.717583, 0.000000, 0.000000 +1529, 0.696097, 0.717948, 0.000000, 0.000000 +1530, 0.695721, 0.718312, 0.000000, 0.000000 +1531, 0.695345, 0.718676, 0.000000, 0.000000 +1532, 0.694968, 0.719041, 0.000000, 0.000000 +1533, 0.694591, 0.719404, 0.000000, 0.000000 +1534, 0.694214, 0.719768, 0.000000, 0.000000 +1535, 0.693837, 0.720132, 0.000000, 0.000000 +1536, 0.693460, 0.720495, 0.000000, 0.000000 +1537, 0.693083, 0.720858, 0.000000, 0.000000 +1538, 0.692705, 0.721221, 0.000000, 0.000000 +1539, 0.692327, 0.721584, 0.000000, 0.000000 +1540, 0.691949, 0.721946, 0.000000, 0.000000 +1541, 0.691571, 0.722309, 0.000000, 0.000000 +1542, 0.691192, 0.722671, 0.000000, 0.000000 +1543, 0.690814, 0.723033, 0.000000, 0.000000 +1544, 0.690435, 0.723394, 0.000000, 0.000000 +1545, 0.690056, 0.723756, 0.000000, 0.000000 +1546, 0.689677, 0.724117, 0.000000, 0.000000 +1547, 0.689297, 0.724478, 0.000000, 0.000000 +1548, 0.688918, 0.724839, 0.000000, 0.000000 +1549, 0.688538, 0.725200, 0.000000, 0.000000 +1550, 0.688158, 0.725561, 0.000000, 0.000000 +1551, 0.687778, 0.725921, 0.000000, 0.000000 +1552, 0.687398, 0.726281, 0.000000, 0.000000 +1553, 0.687017, 0.726641, 0.000000, 0.000000 +1554, 0.686637, 0.727001, 0.000000, 0.000000 +1555, 0.686256, 0.727360, 0.000000, 0.000000 +1556, 0.685875, 0.727720, 0.000000, 0.000000 +1557, 0.685493, 0.728079, 0.000000, 0.000000 +1558, 0.685112, 0.728438, 0.000000, 0.000000 +1559, 0.684730, 0.728797, 0.000000, 0.000000 +1560, 0.684349, 0.729155, 0.000000, 0.000000 +1561, 0.683967, 0.729513, 0.000000, 0.000000 +1562, 0.683584, 0.729872, 0.000000, 0.000000 +1563, 0.683202, 0.730229, 0.000000, 0.000000 +1564, 0.682819, 0.730587, 0.000000, 0.000000 +1565, 0.682437, 0.730945, 0.000000, 0.000000 +1566, 0.682054, 0.731302, 0.000000, 0.000000 +1567, 0.681671, 0.731659, 0.000000, 0.000000 +1568, 0.681287, 0.732016, 0.000000, 0.000000 +1569, 0.680904, 0.732373, 0.000000, 0.000000 +1570, 0.680520, 0.732729, 0.000000, 0.000000 +1571, 0.680136, 0.733086, 0.000000, 0.000000 +1572, 0.679752, 0.733442, 0.000000, 0.000000 +1573, 0.679368, 0.733798, 0.000000, 0.000000 +1574, 0.678983, 0.734154, 0.000000, 0.000000 +1575, 0.678599, 0.734509, 0.000000, 0.000000 +1576, 0.678214, 0.734864, 0.000000, 0.000000 +1577, 0.677829, 0.735220, 0.000000, 0.000000 +1578, 0.677444, 0.735575, 0.000000, 0.000000 +1579, 0.677058, 0.735929, 0.000000, 0.000000 +1580, 0.676673, 0.736284, 0.000000, 0.000000 +1581, 0.676287, 0.736638, 0.000000, 0.000000 +1582, 0.675901, 0.736992, 0.000000, 0.000000 +1583, 0.675515, 0.737346, 0.000000, 0.000000 +1584, 0.675129, 0.737700, 0.000000, 0.000000 +1585, 0.674742, 0.738053, 0.000000, 0.000000 +1586, 0.674356, 0.738407, 0.000000, 0.000000 +1587, 0.673969, 0.738760, 0.000000, 0.000000 +1588, 0.673582, 0.739113, 0.000000, 0.000000 +1589, 0.673195, 0.739465, 0.000000, 0.000000 +1590, 0.672807, 0.739818, 0.000000, 0.000000 +1591, 0.672420, 0.740170, 0.000000, 0.000000 +1592, 0.672032, 0.740522, 0.000000, 0.000000 +1593, 0.671644, 0.740874, 0.000000, 0.000000 +1594, 0.671256, 0.741226, 0.000000, 0.000000 +1595, 0.670867, 0.741577, 0.000000, 0.000000 +1596, 0.670479, 0.741929, 0.000000, 0.000000 +1597, 0.670090, 0.742280, 0.000000, 0.000000 +1598, 0.669701, 0.742631, 0.000000, 0.000000 +1599, 0.669312, 0.742981, 0.000000, 0.000000 +1600, 0.668923, 0.743332, 0.000000, 0.000000 +1601, 0.668534, 0.743682, 0.000000, 0.000000 +1602, 0.668144, 0.744032, 0.000000, 0.000000 +1603, 0.667754, 0.744382, 0.000000, 0.000000 +1604, 0.667364, 0.744732, 0.000000, 0.000000 +1605, 0.666974, 0.745081, 0.000000, 0.000000 +1606, 0.666584, 0.745430, 0.000000, 0.000000 +1607, 0.666193, 0.745779, 0.000000, 0.000000 +1608, 0.665802, 0.746128, 0.000000, 0.000000 +1609, 0.665412, 0.746477, 0.000000, 0.000000 +1610, 0.665020, 0.746825, 0.000000, 0.000000 +1611, 0.664629, 0.747173, 0.000000, 0.000000 +1612, 0.664238, 0.747521, 0.000000, 0.000000 +1613, 0.663846, 0.747869, 0.000000, 0.000000 +1614, 0.663454, 0.748217, 0.000000, 0.000000 +1615, 0.663062, 0.748564, 0.000000, 0.000000 +1616, 0.662670, 0.748911, 0.000000, 0.000000 +1617, 0.662278, 0.749258, 0.000000, 0.000000 +1618, 0.661885, 0.749605, 0.000000, 0.000000 +1619, 0.661493, 0.749952, 0.000000, 0.000000 +1620, 0.661100, 0.750298, 0.000000, 0.000000 +1621, 0.660707, 0.750644, 0.000000, 0.000000 +1622, 0.660313, 0.750990, 0.000000, 0.000000 +1623, 0.659920, 0.751336, 0.000000, 0.000000 +1624, 0.659526, 0.751682, 0.000000, 0.000000 +1625, 0.659132, 0.752027, 0.000000, 0.000000 +1626, 0.658739, 0.752372, 0.000000, 0.000000 +1627, 0.658344, 0.752717, 0.000000, 0.000000 +1628, 0.657950, 0.753062, 0.000000, 0.000000 +1629, 0.657555, 0.753406, 0.000000, 0.000000 +1630, 0.657161, 0.753750, 0.000000, 0.000000 +1631, 0.656766, 0.754095, 0.000000, 0.000000 +1632, 0.656371, 0.754438, 0.000000, 0.000000 +1633, 0.655976, 0.754782, 0.000000, 0.000000 +1634, 0.655580, 0.755126, 0.000000, 0.000000 +1635, 0.655185, 0.755469, 0.000000, 0.000000 +1636, 0.654789, 0.755812, 0.000000, 0.000000 +1637, 0.654393, 0.756155, 0.000000, 0.000000 +1638, 0.653997, 0.756497, 0.000000, 0.000000 +1639, 0.653600, 0.756840, 0.000000, 0.000000 +1640, 0.653204, 0.757182, 0.000000, 0.000000 +1641, 0.652807, 0.757524, 0.000000, 0.000000 +1642, 0.652410, 0.757866, 0.000000, 0.000000 +1643, 0.652013, 0.758208, 0.000000, 0.000000 +1644, 0.651616, 0.758549, 0.000000, 0.000000 +1645, 0.651219, 0.758890, 0.000000, 0.000000 +1646, 0.650821, 0.759231, 0.000000, 0.000000 +1647, 0.650423, 0.759572, 0.000000, 0.000000 +1648, 0.650025, 0.759913, 0.000000, 0.000000 +1649, 0.649627, 0.760253, 0.000000, 0.000000 +1650, 0.649229, 0.760593, 0.000000, 0.000000 +1651, 0.648830, 0.760933, 0.000000, 0.000000 +1652, 0.648432, 0.761273, 0.000000, 0.000000 +1653, 0.648033, 0.761612, 0.000000, 0.000000 +1654, 0.647634, 0.761952, 0.000000, 0.000000 +1655, 0.647235, 0.762291, 0.000000, 0.000000 +1656, 0.646835, 0.762630, 0.000000, 0.000000 +1657, 0.646436, 0.762968, 0.000000, 0.000000 +1658, 0.646036, 0.763307, 0.000000, 0.000000 +1659, 0.645636, 0.763645, 0.000000, 0.000000 +1660, 0.645236, 0.763983, 0.000000, 0.000000 +1661, 0.644836, 0.764321, 0.000000, 0.000000 +1662, 0.644436, 0.764659, 0.000000, 0.000000 +1663, 0.644035, 0.764996, 0.000000, 0.000000 +1664, 0.643634, 0.765333, 0.000000, 0.000000 +1665, 0.643233, 0.765670, 0.000000, 0.000000 +1666, 0.642832, 0.766007, 0.000000, 0.000000 +1667, 0.642431, 0.766344, 0.000000, 0.000000 +1668, 0.642029, 0.766680, 0.000000, 0.000000 +1669, 0.641628, 0.767016, 0.000000, 0.000000 +1670, 0.641226, 0.767352, 0.000000, 0.000000 +1671, 0.640824, 0.767688, 0.000000, 0.000000 +1672, 0.640422, 0.768023, 0.000000, 0.000000 +1673, 0.640019, 0.768359, 0.000000, 0.000000 +1674, 0.639617, 0.768694, 0.000000, 0.000000 +1675, 0.639214, 0.769029, 0.000000, 0.000000 +1676, 0.638811, 0.769363, 0.000000, 0.000000 +1677, 0.638408, 0.769698, 0.000000, 0.000000 +1678, 0.638005, 0.770032, 0.000000, 0.000000 +1679, 0.637602, 0.770366, 0.000000, 0.000000 +1680, 0.637198, 0.770700, 0.000000, 0.000000 +1681, 0.636794, 0.771034, 0.000000, 0.000000 +1682, 0.636390, 0.771367, 0.000000, 0.000000 +1683, 0.635986, 0.771700, 0.000000, 0.000000 +1684, 0.635582, 0.772033, 0.000000, 0.000000 +1685, 0.635177, 0.772366, 0.000000, 0.000000 +1686, 0.634773, 0.772699, 0.000000, 0.000000 +1687, 0.634368, 0.773031, 0.000000, 0.000000 +1688, 0.633963, 0.773363, 0.000000, 0.000000 +1689, 0.633558, 0.773695, 0.000000, 0.000000 +1690, 0.633153, 0.774027, 0.000000, 0.000000 +1691, 0.632747, 0.774359, 0.000000, 0.000000 +1692, 0.632341, 0.774690, 0.000000, 0.000000 +1693, 0.631935, 0.775021, 0.000000, 0.000000 +1694, 0.631529, 0.775352, 0.000000, 0.000000 +1695, 0.631123, 0.775683, 0.000000, 0.000000 +1696, 0.630717, 0.776013, 0.000000, 0.000000 +1697, 0.630310, 0.776343, 0.000000, 0.000000 +1698, 0.629904, 0.776673, 0.000000, 0.000000 +1699, 0.629497, 0.777003, 0.000000, 0.000000 +1700, 0.629090, 0.777333, 0.000000, 0.000000 +1701, 0.628682, 0.777662, 0.000000, 0.000000 +1702, 0.628275, 0.777991, 0.000000, 0.000000 +1703, 0.627867, 0.778320, 0.000000, 0.000000 +1704, 0.627460, 0.778649, 0.000000, 0.000000 +1705, 0.627052, 0.778978, 0.000000, 0.000000 +1706, 0.626644, 0.779306, 0.000000, 0.000000 +1707, 0.626235, 0.779634, 0.000000, 0.000000 +1708, 0.625827, 0.779962, 0.000000, 0.000000 +1709, 0.625418, 0.780290, 0.000000, 0.000000 +1710, 0.625010, 0.780617, 0.000000, 0.000000 +1711, 0.624601, 0.780944, 0.000000, 0.000000 +1712, 0.624192, 0.781271, 0.000000, 0.000000 +1713, 0.623782, 0.781598, 0.000000, 0.000000 +1714, 0.623373, 0.781925, 0.000000, 0.000000 +1715, 0.622963, 0.782251, 0.000000, 0.000000 +1716, 0.622553, 0.782577, 0.000000, 0.000000 +1717, 0.622143, 0.782903, 0.000000, 0.000000 +1718, 0.621733, 0.783229, 0.000000, 0.000000 +1719, 0.621323, 0.783555, 0.000000, 0.000000 +1720, 0.620912, 0.783880, 0.000000, 0.000000 +1721, 0.620502, 0.784205, 0.000000, 0.000000 +1722, 0.620091, 0.784530, 0.000000, 0.000000 +1723, 0.619680, 0.784855, 0.000000, 0.000000 +1724, 0.619269, 0.785179, 0.000000, 0.000000 +1725, 0.618857, 0.785503, 0.000000, 0.000000 +1726, 0.618446, 0.785827, 0.000000, 0.000000 +1727, 0.618034, 0.786151, 0.000000, 0.000000 +1728, 0.617622, 0.786475, 0.000000, 0.000000 +1729, 0.617210, 0.786798, 0.000000, 0.000000 +1730, 0.616798, 0.787121, 0.000000, 0.000000 +1731, 0.616386, 0.787444, 0.000000, 0.000000 +1732, 0.615973, 0.787767, 0.000000, 0.000000 +1733, 0.615561, 0.788090, 0.000000, 0.000000 +1734, 0.615148, 0.788412, 0.000000, 0.000000 +1735, 0.614735, 0.788734, 0.000000, 0.000000 +1736, 0.614321, 0.789056, 0.000000, 0.000000 +1737, 0.613908, 0.789377, 0.000000, 0.000000 +1738, 0.613495, 0.789699, 0.000000, 0.000000 +1739, 0.613081, 0.790020, 0.000000, 0.000000 +1740, 0.612667, 0.790341, 0.000000, 0.000000 +1741, 0.612253, 0.790662, 0.000000, 0.000000 +1742, 0.611839, 0.790983, 0.000000, 0.000000 +1743, 0.611424, 0.791303, 0.000000, 0.000000 +1744, 0.611010, 0.791623, 0.000000, 0.000000 +1745, 0.610595, 0.791943, 0.000000, 0.000000 +1746, 0.610180, 0.792263, 0.000000, 0.000000 +1747, 0.609765, 0.792582, 0.000000, 0.000000 +1748, 0.609350, 0.792901, 0.000000, 0.000000 +1749, 0.608935, 0.793220, 0.000000, 0.000000 +1750, 0.608519, 0.793539, 0.000000, 0.000000 +1751, 0.608103, 0.793858, 0.000000, 0.000000 +1752, 0.607687, 0.794176, 0.000000, 0.000000 +1753, 0.607271, 0.794494, 0.000000, 0.000000 +1754, 0.606855, 0.794812, 0.000000, 0.000000 +1755, 0.606439, 0.795130, 0.000000, 0.000000 +1756, 0.606022, 0.795448, 0.000000, 0.000000 +1757, 0.605605, 0.795765, 0.000000, 0.000000 +1758, 0.605189, 0.796082, 0.000000, 0.000000 +1759, 0.604772, 0.796399, 0.000000, 0.000000 +1760, 0.604354, 0.796716, 0.000000, 0.000000 +1761, 0.603937, 0.797032, 0.000000, 0.000000 +1762, 0.603519, 0.797348, 0.000000, 0.000000 +1763, 0.603102, 0.797664, 0.000000, 0.000000 +1764, 0.602684, 0.797980, 0.000000, 0.000000 +1765, 0.602266, 0.798296, 0.000000, 0.000000 +1766, 0.601848, 0.798611, 0.000000, 0.000000 +1767, 0.601429, 0.798926, 0.000000, 0.000000 +1768, 0.601011, 0.799241, 0.000000, 0.000000 +1769, 0.600592, 0.799556, 0.000000, 0.000000 +1770, 0.600173, 0.799870, 0.000000, 0.000000 +1771, 0.599754, 0.800184, 0.000000, 0.000000 +1772, 0.599335, 0.800498, 0.000000, 0.000000 +1773, 0.598915, 0.800812, 0.000000, 0.000000 +1774, 0.598496, 0.801126, 0.000000, 0.000000 +1775, 0.598076, 0.801439, 0.000000, 0.000000 +1776, 0.597656, 0.801752, 0.000000, 0.000000 +1777, 0.597236, 0.802065, 0.000000, 0.000000 +1778, 0.596816, 0.802378, 0.000000, 0.000000 +1779, 0.596396, 0.802690, 0.000000, 0.000000 +1780, 0.595975, 0.803003, 0.000000, 0.000000 +1781, 0.595555, 0.803315, 0.000000, 0.000000 +1782, 0.595134, 0.803627, 0.000000, 0.000000 +1783, 0.594713, 0.803938, 0.000000, 0.000000 +1784, 0.594292, 0.804250, 0.000000, 0.000000 +1785, 0.593870, 0.804561, 0.000000, 0.000000 +1786, 0.593449, 0.804872, 0.000000, 0.000000 +1787, 0.593027, 0.805182, 0.000000, 0.000000 +1788, 0.592605, 0.805493, 0.000000, 0.000000 +1789, 0.592183, 0.805803, 0.000000, 0.000000 +1790, 0.591761, 0.806113, 0.000000, 0.000000 +1791, 0.591339, 0.806423, 0.000000, 0.000000 +1792, 0.590917, 0.806733, 0.000000, 0.000000 +1793, 0.590494, 0.807042, 0.000000, 0.000000 +1794, 0.590071, 0.807351, 0.000000, 0.000000 +1795, 0.589648, 0.807660, 0.000000, 0.000000 +1796, 0.589225, 0.807969, 0.000000, 0.000000 +1797, 0.588802, 0.808277, 0.000000, 0.000000 +1798, 0.588378, 0.808586, 0.000000, 0.000000 +1799, 0.587955, 0.808894, 0.000000, 0.000000 +1800, 0.587531, 0.809202, 0.000000, 0.000000 +1801, 0.587107, 0.809509, 0.000000, 0.000000 +1802, 0.586683, 0.809817, 0.000000, 0.000000 +1803, 0.586259, 0.810124, 0.000000, 0.000000 +1804, 0.585834, 0.810431, 0.000000, 0.000000 +1805, 0.585410, 0.810738, 0.000000, 0.000000 +1806, 0.584985, 0.811044, 0.000000, 0.000000 +1807, 0.584560, 0.811350, 0.000000, 0.000000 +1808, 0.584135, 0.811656, 0.000000, 0.000000 +1809, 0.583710, 0.811962, 0.000000, 0.000000 +1810, 0.583285, 0.812268, 0.000000, 0.000000 +1811, 0.582859, 0.812573, 0.000000, 0.000000 +1812, 0.582433, 0.812878, 0.000000, 0.000000 +1813, 0.582008, 0.813183, 0.000000, 0.000000 +1814, 0.581581, 0.813488, 0.000000, 0.000000 +1815, 0.581155, 0.813793, 0.000000, 0.000000 +1816, 0.580729, 0.814097, 0.000000, 0.000000 +1817, 0.580303, 0.814401, 0.000000, 0.000000 +1818, 0.579876, 0.814705, 0.000000, 0.000000 +1819, 0.579449, 0.815008, 0.000000, 0.000000 +1820, 0.579022, 0.815312, 0.000000, 0.000000 +1821, 0.578595, 0.815615, 0.000000, 0.000000 +1822, 0.578168, 0.815918, 0.000000, 0.000000 +1823, 0.577740, 0.816221, 0.000000, 0.000000 +1824, 0.577313, 0.816523, 0.000000, 0.000000 +1825, 0.576885, 0.816825, 0.000000, 0.000000 +1826, 0.576457, 0.817127, 0.000000, 0.000000 +1827, 0.576029, 0.817429, 0.000000, 0.000000 +1828, 0.575601, 0.817731, 0.000000, 0.000000 +1829, 0.575172, 0.818032, 0.000000, 0.000000 +1830, 0.574744, 0.818333, 0.000000, 0.000000 +1831, 0.574315, 0.818634, 0.000000, 0.000000 +1832, 0.573886, 0.818935, 0.000000, 0.000000 +1833, 0.573457, 0.819235, 0.000000, 0.000000 +1834, 0.573028, 0.819536, 0.000000, 0.000000 +1835, 0.572599, 0.819836, 0.000000, 0.000000 +1836, 0.572169, 0.820136, 0.000000, 0.000000 +1837, 0.571740, 0.820435, 0.000000, 0.000000 +1838, 0.571310, 0.820734, 0.000000, 0.000000 +1839, 0.570880, 0.821034, 0.000000, 0.000000 +1840, 0.570450, 0.821333, 0.000000, 0.000000 +1841, 0.570019, 0.821631, 0.000000, 0.000000 +1842, 0.569589, 0.821930, 0.000000, 0.000000 +1843, 0.569158, 0.822228, 0.000000, 0.000000 +1844, 0.568728, 0.822526, 0.000000, 0.000000 +1845, 0.568297, 0.822824, 0.000000, 0.000000 +1846, 0.567866, 0.823121, 0.000000, 0.000000 +1847, 0.567435, 0.823418, 0.000000, 0.000000 +1848, 0.567003, 0.823716, 0.000000, 0.000000 +1849, 0.566572, 0.824012, 0.000000, 0.000000 +1850, 0.566140, 0.824309, 0.000000, 0.000000 +1851, 0.565708, 0.824606, 0.000000, 0.000000 +1852, 0.565276, 0.824902, 0.000000, 0.000000 +1853, 0.564844, 0.825198, 0.000000, 0.000000 +1854, 0.564412, 0.825493, 0.000000, 0.000000 +1855, 0.563979, 0.825789, 0.000000, 0.000000 +1856, 0.563547, 0.826084, 0.000000, 0.000000 +1857, 0.563114, 0.826379, 0.000000, 0.000000 +1858, 0.562681, 0.826674, 0.000000, 0.000000 +1859, 0.562248, 0.826969, 0.000000, 0.000000 +1860, 0.561815, 0.827263, 0.000000, 0.000000 +1861, 0.561381, 0.827557, 0.000000, 0.000000 +1862, 0.560948, 0.827851, 0.000000, 0.000000 +1863, 0.560514, 0.828145, 0.000000, 0.000000 +1864, 0.560080, 0.828438, 0.000000, 0.000000 +1865, 0.559646, 0.828732, 0.000000, 0.000000 +1866, 0.559212, 0.829025, 0.000000, 0.000000 +1867, 0.558778, 0.829317, 0.000000, 0.000000 +1868, 0.558343, 0.829610, 0.000000, 0.000000 +1869, 0.557909, 0.829902, 0.000000, 0.000000 +1870, 0.557474, 0.830194, 0.000000, 0.000000 +1871, 0.557039, 0.830486, 0.000000, 0.000000 +1872, 0.556604, 0.830778, 0.000000, 0.000000 +1873, 0.556169, 0.831069, 0.000000, 0.000000 +1874, 0.555734, 0.831360, 0.000000, 0.000000 +1875, 0.555298, 0.831651, 0.000000, 0.000000 +1876, 0.554862, 0.831942, 0.000000, 0.000000 +1877, 0.554427, 0.832233, 0.000000, 0.000000 +1878, 0.553991, 0.832523, 0.000000, 0.000000 +1879, 0.553554, 0.832813, 0.000000, 0.000000 +1880, 0.553118, 0.833103, 0.000000, 0.000000 +1881, 0.552682, 0.833392, 0.000000, 0.000000 +1882, 0.552245, 0.833682, 0.000000, 0.000000 +1883, 0.551808, 0.833971, 0.000000, 0.000000 +1884, 0.551371, 0.834260, 0.000000, 0.000000 +1885, 0.550934, 0.834549, 0.000000, 0.000000 +1886, 0.550497, 0.834837, 0.000000, 0.000000 +1887, 0.550060, 0.835125, 0.000000, 0.000000 +1888, 0.549622, 0.835413, 0.000000, 0.000000 +1889, 0.549185, 0.835701, 0.000000, 0.000000 +1890, 0.548747, 0.835988, 0.000000, 0.000000 +1891, 0.548309, 0.836276, 0.000000, 0.000000 +1892, 0.547871, 0.836563, 0.000000, 0.000000 +1893, 0.547433, 0.836850, 0.000000, 0.000000 +1894, 0.546994, 0.837136, 0.000000, 0.000000 +1895, 0.546556, 0.837423, 0.000000, 0.000000 +1896, 0.546117, 0.837709, 0.000000, 0.000000 +1897, 0.545678, 0.837995, 0.000000, 0.000000 +1898, 0.545239, 0.838280, 0.000000, 0.000000 +1899, 0.544800, 0.838566, 0.000000, 0.000000 +1900, 0.544361, 0.838851, 0.000000, 0.000000 +1901, 0.543921, 0.839136, 0.000000, 0.000000 +1902, 0.543482, 0.839421, 0.000000, 0.000000 +1903, 0.543042, 0.839706, 0.000000, 0.000000 +1904, 0.542602, 0.839990, 0.000000, 0.000000 +1905, 0.542162, 0.840274, 0.000000, 0.000000 +1906, 0.541722, 0.840558, 0.000000, 0.000000 +1907, 0.541282, 0.840841, 0.000000, 0.000000 +1908, 0.540841, 0.841125, 0.000000, 0.000000 +1909, 0.540400, 0.841408, 0.000000, 0.000000 +1910, 0.539960, 0.841691, 0.000000, 0.000000 +1911, 0.539519, 0.841974, 0.000000, 0.000000 +1912, 0.539078, 0.842256, 0.000000, 0.000000 +1913, 0.538636, 0.842538, 0.000000, 0.000000 +1914, 0.538195, 0.842820, 0.000000, 0.000000 +1915, 0.537754, 0.843102, 0.000000, 0.000000 +1916, 0.537312, 0.843384, 0.000000, 0.000000 +1917, 0.536870, 0.843665, 0.000000, 0.000000 +1918, 0.536428, 0.843946, 0.000000, 0.000000 +1919, 0.535986, 0.844227, 0.000000, 0.000000 +1920, 0.535544, 0.844507, 0.000000, 0.000000 +1921, 0.535101, 0.844788, 0.000000, 0.000000 +1922, 0.534659, 0.845068, 0.000000, 0.000000 +1923, 0.534216, 0.845348, 0.000000, 0.000000 +1924, 0.533773, 0.845628, 0.000000, 0.000000 +1925, 0.533330, 0.845907, 0.000000, 0.000000 +1926, 0.532887, 0.846186, 0.000000, 0.000000 +1927, 0.532444, 0.846465, 0.000000, 0.000000 +1928, 0.532000, 0.846744, 0.000000, 0.000000 +1929, 0.531557, 0.847023, 0.000000, 0.000000 +1930, 0.531113, 0.847301, 0.000000, 0.000000 +1931, 0.530669, 0.847579, 0.000000, 0.000000 +1932, 0.530225, 0.847857, 0.000000, 0.000000 +1933, 0.529781, 0.848134, 0.000000, 0.000000 +1934, 0.529337, 0.848412, 0.000000, 0.000000 +1935, 0.528892, 0.848689, 0.000000, 0.000000 +1936, 0.528448, 0.848966, 0.000000, 0.000000 +1937, 0.528003, 0.849243, 0.000000, 0.000000 +1938, 0.527558, 0.849519, 0.000000, 0.000000 +1939, 0.527113, 0.849795, 0.000000, 0.000000 +1940, 0.526668, 0.850071, 0.000000, 0.000000 +1941, 0.526223, 0.850347, 0.000000, 0.000000 +1942, 0.525777, 0.850622, 0.000000, 0.000000 +1943, 0.525332, 0.850898, 0.000000, 0.000000 +1944, 0.524886, 0.851173, 0.000000, 0.000000 +1945, 0.524440, 0.851447, 0.000000, 0.000000 +1946, 0.523994, 0.851722, 0.000000, 0.000000 +1947, 0.523548, 0.851996, 0.000000, 0.000000 +1948, 0.523101, 0.852270, 0.000000, 0.000000 +1949, 0.522655, 0.852544, 0.000000, 0.000000 +1950, 0.522208, 0.852818, 0.000000, 0.000000 +1951, 0.521761, 0.853091, 0.000000, 0.000000 +1952, 0.521315, 0.853365, 0.000000, 0.000000 +1953, 0.520868, 0.853638, 0.000000, 0.000000 +1954, 0.520420, 0.853910, 0.000000, 0.000000 +1955, 0.519973, 0.854183, 0.000000, 0.000000 +1956, 0.519526, 0.854455, 0.000000, 0.000000 +1957, 0.519078, 0.854727, 0.000000, 0.000000 +1958, 0.518630, 0.854999, 0.000000, 0.000000 +1959, 0.518182, 0.855270, 0.000000, 0.000000 +1960, 0.517734, 0.855541, 0.000000, 0.000000 +1961, 0.517286, 0.855813, 0.000000, 0.000000 +1962, 0.516838, 0.856083, 0.000000, 0.000000 +1963, 0.516389, 0.856354, 0.000000, 0.000000 +1964, 0.515941, 0.856624, 0.000000, 0.000000 +1965, 0.515492, 0.856894, 0.000000, 0.000000 +1966, 0.515043, 0.857164, 0.000000, 0.000000 +1967, 0.514594, 0.857434, 0.000000, 0.000000 +1968, 0.514145, 0.857703, 0.000000, 0.000000 +1969, 0.513696, 0.857973, 0.000000, 0.000000 +1970, 0.513246, 0.858241, 0.000000, 0.000000 +1971, 0.512797, 0.858510, 0.000000, 0.000000 +1972, 0.512347, 0.858779, 0.000000, 0.000000 +1973, 0.511897, 0.859047, 0.000000, 0.000000 +1974, 0.511447, 0.859315, 0.000000, 0.000000 +1975, 0.510997, 0.859583, 0.000000, 0.000000 +1976, 0.510546, 0.859850, 0.000000, 0.000000 +1977, 0.510096, 0.860117, 0.000000, 0.000000 +1978, 0.509645, 0.860385, 0.000000, 0.000000 +1979, 0.509195, 0.860651, 0.000000, 0.000000 +1980, 0.508744, 0.860918, 0.000000, 0.000000 +1981, 0.508293, 0.861184, 0.000000, 0.000000 +1982, 0.507842, 0.861450, 0.000000, 0.000000 +1983, 0.507390, 0.861716, 0.000000, 0.000000 +1984, 0.506939, 0.861982, 0.000000, 0.000000 +1985, 0.506487, 0.862247, 0.000000, 0.000000 +1986, 0.506036, 0.862512, 0.000000, 0.000000 +1987, 0.505584, 0.862777, 0.000000, 0.000000 +1988, 0.505132, 0.863042, 0.000000, 0.000000 +1989, 0.504680, 0.863307, 0.000000, 0.000000 +1990, 0.504228, 0.863571, 0.000000, 0.000000 +1991, 0.503775, 0.863835, 0.000000, 0.000000 +1992, 0.503323, 0.864099, 0.000000, 0.000000 +1993, 0.502870, 0.864362, 0.000000, 0.000000 +1994, 0.502417, 0.864625, 0.000000, 0.000000 +1995, 0.501964, 0.864888, 0.000000, 0.000000 +1996, 0.501511, 0.865151, 0.000000, 0.000000 +1997, 0.501058, 0.865414, 0.000000, 0.000000 +1998, 0.500605, 0.865676, 0.000000, 0.000000 +1999, 0.500151, 0.865938, 0.000000, 0.000000 +2000, 0.499698, 0.866200, 0.000000, 0.000000 +2001, 0.499244, 0.866462, 0.000000, 0.000000 +2002, 0.498790, 0.866723, 0.000000, 0.000000 +2003, 0.498336, 0.866984, 0.000000, 0.000000 +2004, 0.497882, 0.867245, 0.000000, 0.000000 +2005, 0.497427, 0.867506, 0.000000, 0.000000 +2006, 0.496973, 0.867766, 0.000000, 0.000000 +2007, 0.496518, 0.868026, 0.000000, 0.000000 +2008, 0.496064, 0.868286, 0.000000, 0.000000 +2009, 0.495609, 0.868546, 0.000000, 0.000000 +2010, 0.495154, 0.868805, 0.000000, 0.000000 +2011, 0.494699, 0.869065, 0.000000, 0.000000 +2012, 0.494243, 0.869324, 0.000000, 0.000000 +2013, 0.493788, 0.869582, 0.000000, 0.000000 +2014, 0.493332, 0.869841, 0.000000, 0.000000 +2015, 0.492877, 0.870099, 0.000000, 0.000000 +2016, 0.492421, 0.870357, 0.000000, 0.000000 +2017, 0.491965, 0.870615, 0.000000, 0.000000 +2018, 0.491509, 0.870872, 0.000000, 0.000000 +2019, 0.491053, 0.871130, 0.000000, 0.000000 +2020, 0.490596, 0.871387, 0.000000, 0.000000 +2021, 0.490140, 0.871644, 0.000000, 0.000000 +2022, 0.489683, 0.871900, 0.000000, 0.000000 +2023, 0.489227, 0.872157, 0.000000, 0.000000 +2024, 0.488770, 0.872413, 0.000000, 0.000000 +2025, 0.488313, 0.872669, 0.000000, 0.000000 +2026, 0.487856, 0.872924, 0.000000, 0.000000 +2027, 0.487398, 0.873180, 0.000000, 0.000000 +2028, 0.486941, 0.873435, 0.000000, 0.000000 +2029, 0.486483, 0.873690, 0.000000, 0.000000 +2030, 0.486026, 0.873945, 0.000000, 0.000000 +2031, 0.485568, 0.874199, 0.000000, 0.000000 +2032, 0.485110, 0.874453, 0.000000, 0.000000 +2033, 0.484652, 0.874707, 0.000000, 0.000000 +2034, 0.484194, 0.874961, 0.000000, 0.000000 +2035, 0.483735, 0.875214, 0.000000, 0.000000 +2036, 0.483277, 0.875468, 0.000000, 0.000000 +2037, 0.482818, 0.875721, 0.000000, 0.000000 +2038, 0.482359, 0.875973, 0.000000, 0.000000 +2039, 0.481901, 0.876226, 0.000000, 0.000000 +2040, 0.481442, 0.876478, 0.000000, 0.000000 +2041, 0.480982, 0.876730, 0.000000, 0.000000 +2042, 0.480523, 0.876982, 0.000000, 0.000000 +2043, 0.480064, 0.877234, 0.000000, 0.000000 +2044, 0.479604, 0.877485, 0.000000, 0.000000 +2045, 0.479145, 0.877736, 0.000000, 0.000000 +2046, 0.478685, 0.877987, 0.000000, 0.000000 +2047, 0.478225, 0.878237, 0.000000, 0.000000 +2048, 0.477765, 0.878488, 0.000000, 0.000000 +2049, 0.477305, 0.878738, 0.000000, 0.000000 +2050, 0.476844, 0.878988, 0.000000, 0.000000 +2051, 0.476384, 0.879237, 0.000000, 0.000000 +2052, 0.475923, 0.879487, 0.000000, 0.000000 +2053, 0.475462, 0.879736, 0.000000, 0.000000 +2054, 0.475002, 0.879985, 0.000000, 0.000000 +2055, 0.474541, 0.880234, 0.000000, 0.000000 +2056, 0.474079, 0.880482, 0.000000, 0.000000 +2057, 0.473618, 0.880730, 0.000000, 0.000000 +2058, 0.473157, 0.880978, 0.000000, 0.000000 +2059, 0.472695, 0.881226, 0.000000, 0.000000 +2060, 0.472234, 0.881473, 0.000000, 0.000000 +2061, 0.471772, 0.881721, 0.000000, 0.000000 +2062, 0.471310, 0.881968, 0.000000, 0.000000 +2063, 0.470848, 0.882214, 0.000000, 0.000000 +2064, 0.470386, 0.882461, 0.000000, 0.000000 +2065, 0.469924, 0.882707, 0.000000, 0.000000 +2066, 0.469461, 0.882953, 0.000000, 0.000000 +2067, 0.468999, 0.883199, 0.000000, 0.000000 +2068, 0.468536, 0.883444, 0.000000, 0.000000 +2069, 0.468073, 0.883690, 0.000000, 0.000000 +2070, 0.467610, 0.883935, 0.000000, 0.000000 +2071, 0.467147, 0.884179, 0.000000, 0.000000 +2072, 0.466684, 0.884424, 0.000000, 0.000000 +2073, 0.466221, 0.884668, 0.000000, 0.000000 +2074, 0.465757, 0.884912, 0.000000, 0.000000 +2075, 0.465294, 0.885156, 0.000000, 0.000000 +2076, 0.464830, 0.885400, 0.000000, 0.000000 +2077, 0.464366, 0.885643, 0.000000, 0.000000 +2078, 0.463902, 0.885886, 0.000000, 0.000000 +2079, 0.463438, 0.886129, 0.000000, 0.000000 +2080, 0.462974, 0.886372, 0.000000, 0.000000 +2081, 0.462510, 0.886614, 0.000000, 0.000000 +2082, 0.462045, 0.886856, 0.000000, 0.000000 +2083, 0.461581, 0.887098, 0.000000, 0.000000 +2084, 0.461116, 0.887340, 0.000000, 0.000000 +2085, 0.460651, 0.887581, 0.000000, 0.000000 +2086, 0.460186, 0.887822, 0.000000, 0.000000 +2087, 0.459721, 0.888063, 0.000000, 0.000000 +2088, 0.459256, 0.888304, 0.000000, 0.000000 +2089, 0.458791, 0.888544, 0.000000, 0.000000 +2090, 0.458325, 0.888785, 0.000000, 0.000000 +2091, 0.457860, 0.889024, 0.000000, 0.000000 +2092, 0.457394, 0.889264, 0.000000, 0.000000 +2093, 0.456928, 0.889504, 0.000000, 0.000000 +2094, 0.456462, 0.889743, 0.000000, 0.000000 +2095, 0.455996, 0.889982, 0.000000, 0.000000 +2096, 0.455530, 0.890220, 0.000000, 0.000000 +2097, 0.455064, 0.890459, 0.000000, 0.000000 +2098, 0.454597, 0.890697, 0.000000, 0.000000 +2099, 0.454130, 0.890935, 0.000000, 0.000000 +2100, 0.453664, 0.891173, 0.000000, 0.000000 +2101, 0.453197, 0.891410, 0.000000, 0.000000 +2102, 0.452730, 0.891648, 0.000000, 0.000000 +2103, 0.452263, 0.891885, 0.000000, 0.000000 +2104, 0.451796, 0.892121, 0.000000, 0.000000 +2105, 0.451328, 0.892358, 0.000000, 0.000000 +2106, 0.450861, 0.892594, 0.000000, 0.000000 +2107, 0.450393, 0.892830, 0.000000, 0.000000 +2108, 0.449926, 0.893066, 0.000000, 0.000000 +2109, 0.449458, 0.893302, 0.000000, 0.000000 +2110, 0.448990, 0.893537, 0.000000, 0.000000 +2111, 0.448522, 0.893772, 0.000000, 0.000000 +2112, 0.448054, 0.894007, 0.000000, 0.000000 +2113, 0.447585, 0.894241, 0.000000, 0.000000 +2114, 0.447117, 0.894476, 0.000000, 0.000000 +2115, 0.446648, 0.894710, 0.000000, 0.000000 +2116, 0.446180, 0.894943, 0.000000, 0.000000 +2117, 0.445711, 0.895177, 0.000000, 0.000000 +2118, 0.445242, 0.895410, 0.000000, 0.000000 +2119, 0.444773, 0.895643, 0.000000, 0.000000 +2120, 0.444304, 0.895876, 0.000000, 0.000000 +2121, 0.443834, 0.896109, 0.000000, 0.000000 +2122, 0.443365, 0.896341, 0.000000, 0.000000 +2123, 0.442895, 0.896573, 0.000000, 0.000000 +2124, 0.442426, 0.896805, 0.000000, 0.000000 +2125, 0.441956, 0.897037, 0.000000, 0.000000 +2126, 0.441486, 0.897268, 0.000000, 0.000000 +2127, 0.441016, 0.897499, 0.000000, 0.000000 +2128, 0.440546, 0.897730, 0.000000, 0.000000 +2129, 0.440076, 0.897961, 0.000000, 0.000000 +2130, 0.439605, 0.898191, 0.000000, 0.000000 +2131, 0.439135, 0.898421, 0.000000, 0.000000 +2132, 0.438664, 0.898651, 0.000000, 0.000000 +2133, 0.438193, 0.898881, 0.000000, 0.000000 +2134, 0.437722, 0.899110, 0.000000, 0.000000 +2135, 0.437251, 0.899339, 0.000000, 0.000000 +2136, 0.436780, 0.899568, 0.000000, 0.000000 +2137, 0.436309, 0.899797, 0.000000, 0.000000 +2138, 0.435838, 0.900025, 0.000000, 0.000000 +2139, 0.435366, 0.900253, 0.000000, 0.000000 +2140, 0.434895, 0.900481, 0.000000, 0.000000 +2141, 0.434423, 0.900709, 0.000000, 0.000000 +2142, 0.433951, 0.900936, 0.000000, 0.000000 +2143, 0.433479, 0.901164, 0.000000, 0.000000 +2144, 0.433007, 0.901390, 0.000000, 0.000000 +2145, 0.432535, 0.901617, 0.000000, 0.000000 +2146, 0.432063, 0.901844, 0.000000, 0.000000 +2147, 0.431590, 0.902070, 0.000000, 0.000000 +2148, 0.431118, 0.902296, 0.000000, 0.000000 +2149, 0.430645, 0.902521, 0.000000, 0.000000 +2150, 0.430172, 0.902747, 0.000000, 0.000000 +2151, 0.429699, 0.902972, 0.000000, 0.000000 +2152, 0.429226, 0.903197, 0.000000, 0.000000 +2153, 0.428753, 0.903422, 0.000000, 0.000000 +2154, 0.428280, 0.903646, 0.000000, 0.000000 +2155, 0.427807, 0.903870, 0.000000, 0.000000 +2156, 0.427333, 0.904094, 0.000000, 0.000000 +2157, 0.426860, 0.904318, 0.000000, 0.000000 +2158, 0.426386, 0.904541, 0.000000, 0.000000 +2159, 0.425912, 0.904765, 0.000000, 0.000000 +2160, 0.425438, 0.904988, 0.000000, 0.000000 +2161, 0.424964, 0.905210, 0.000000, 0.000000 +2162, 0.424490, 0.905433, 0.000000, 0.000000 +2163, 0.424015, 0.905655, 0.000000, 0.000000 +2164, 0.423541, 0.905877, 0.000000, 0.000000 +2165, 0.423067, 0.906099, 0.000000, 0.000000 +2166, 0.422592, 0.906320, 0.000000, 0.000000 +2167, 0.422117, 0.906541, 0.000000, 0.000000 +2168, 0.421642, 0.906762, 0.000000, 0.000000 +2169, 0.421167, 0.906983, 0.000000, 0.000000 +2170, 0.420692, 0.907203, 0.000000, 0.000000 +2171, 0.420217, 0.907424, 0.000000, 0.000000 +2172, 0.419742, 0.907644, 0.000000, 0.000000 +2173, 0.419266, 0.907863, 0.000000, 0.000000 +2174, 0.418791, 0.908083, 0.000000, 0.000000 +2175, 0.418315, 0.908302, 0.000000, 0.000000 +2176, 0.417839, 0.908521, 0.000000, 0.000000 +2177, 0.417363, 0.908740, 0.000000, 0.000000 +2178, 0.416887, 0.908958, 0.000000, 0.000000 +2179, 0.416411, 0.909177, 0.000000, 0.000000 +2180, 0.415935, 0.909394, 0.000000, 0.000000 +2181, 0.415458, 0.909612, 0.000000, 0.000000 +2182, 0.414982, 0.909830, 0.000000, 0.000000 +2183, 0.414505, 0.910047, 0.000000, 0.000000 +2184, 0.414029, 0.910264, 0.000000, 0.000000 +2185, 0.413552, 0.910481, 0.000000, 0.000000 +2186, 0.413075, 0.910697, 0.000000, 0.000000 +2187, 0.412598, 0.910913, 0.000000, 0.000000 +2188, 0.412121, 0.911129, 0.000000, 0.000000 +2189, 0.411643, 0.911345, 0.000000, 0.000000 +2190, 0.411166, 0.911561, 0.000000, 0.000000 +2191, 0.410688, 0.911776, 0.000000, 0.000000 +2192, 0.410211, 0.911991, 0.000000, 0.000000 +2193, 0.409733, 0.912206, 0.000000, 0.000000 +2194, 0.409255, 0.912420, 0.000000, 0.000000 +2195, 0.408777, 0.912634, 0.000000, 0.000000 +2196, 0.408299, 0.912848, 0.000000, 0.000000 +2197, 0.407821, 0.913062, 0.000000, 0.000000 +2198, 0.407343, 0.913275, 0.000000, 0.000000 +2199, 0.406864, 0.913489, 0.000000, 0.000000 +2200, 0.406386, 0.913702, 0.000000, 0.000000 +2201, 0.405907, 0.913914, 0.000000, 0.000000 +2202, 0.405428, 0.914127, 0.000000, 0.000000 +2203, 0.404950, 0.914339, 0.000000, 0.000000 +2204, 0.404471, 0.914551, 0.000000, 0.000000 +2205, 0.403991, 0.914763, 0.000000, 0.000000 +2206, 0.403512, 0.914974, 0.000000, 0.000000 +2207, 0.403033, 0.915185, 0.000000, 0.000000 +2208, 0.402554, 0.915396, 0.000000, 0.000000 +2209, 0.402074, 0.915607, 0.000000, 0.000000 +2210, 0.401594, 0.915818, 0.000000, 0.000000 +2211, 0.401115, 0.916028, 0.000000, 0.000000 +2212, 0.400635, 0.916238, 0.000000, 0.000000 +2213, 0.400155, 0.916448, 0.000000, 0.000000 +2214, 0.399675, 0.916657, 0.000000, 0.000000 +2215, 0.399195, 0.916866, 0.000000, 0.000000 +2216, 0.398714, 0.917075, 0.000000, 0.000000 +2217, 0.398234, 0.917284, 0.000000, 0.000000 +2218, 0.397753, 0.917492, 0.000000, 0.000000 +2219, 0.397273, 0.917701, 0.000000, 0.000000 +2220, 0.396792, 0.917908, 0.000000, 0.000000 +2221, 0.396311, 0.918116, 0.000000, 0.000000 +2222, 0.395830, 0.918324, 0.000000, 0.000000 +2223, 0.395349, 0.918531, 0.000000, 0.000000 +2224, 0.394868, 0.918738, 0.000000, 0.000000 +2225, 0.394387, 0.918944, 0.000000, 0.000000 +2226, 0.393906, 0.919151, 0.000000, 0.000000 +2227, 0.393424, 0.919357, 0.000000, 0.000000 +2228, 0.392942, 0.919563, 0.000000, 0.000000 +2229, 0.392461, 0.919769, 0.000000, 0.000000 +2230, 0.391979, 0.919974, 0.000000, 0.000000 +2231, 0.391497, 0.920179, 0.000000, 0.000000 +2232, 0.391015, 0.920384, 0.000000, 0.000000 +2233, 0.390533, 0.920589, 0.000000, 0.000000 +2234, 0.390051, 0.920793, 0.000000, 0.000000 +2235, 0.389568, 0.920998, 0.000000, 0.000000 +2236, 0.389086, 0.921201, 0.000000, 0.000000 +2237, 0.388603, 0.921405, 0.000000, 0.000000 +2238, 0.388121, 0.921609, 0.000000, 0.000000 +2239, 0.387638, 0.921812, 0.000000, 0.000000 +2240, 0.387155, 0.922015, 0.000000, 0.000000 +2241, 0.386672, 0.922217, 0.000000, 0.000000 +2242, 0.386189, 0.922420, 0.000000, 0.000000 +2243, 0.385706, 0.922622, 0.000000, 0.000000 +2244, 0.385222, 0.922824, 0.000000, 0.000000 +2245, 0.384739, 0.923025, 0.000000, 0.000000 +2246, 0.384256, 0.923227, 0.000000, 0.000000 +2247, 0.383772, 0.923428, 0.000000, 0.000000 +2248, 0.383288, 0.923629, 0.000000, 0.000000 +2249, 0.382804, 0.923829, 0.000000, 0.000000 +2250, 0.382320, 0.924030, 0.000000, 0.000000 +2251, 0.381836, 0.924230, 0.000000, 0.000000 +2252, 0.381352, 0.924430, 0.000000, 0.000000 +2253, 0.380868, 0.924629, 0.000000, 0.000000 +2254, 0.380384, 0.924829, 0.000000, 0.000000 +2255, 0.379899, 0.925028, 0.000000, 0.000000 +2256, 0.379415, 0.925227, 0.000000, 0.000000 +2257, 0.378930, 0.925425, 0.000000, 0.000000 +2258, 0.378445, 0.925624, 0.000000, 0.000000 +2259, 0.377960, 0.925822, 0.000000, 0.000000 +2260, 0.377475, 0.926020, 0.000000, 0.000000 +2261, 0.376990, 0.926217, 0.000000, 0.000000 +2262, 0.376505, 0.926415, 0.000000, 0.000000 +2263, 0.376020, 0.926612, 0.000000, 0.000000 +2264, 0.375535, 0.926808, 0.000000, 0.000000 +2265, 0.375049, 0.927005, 0.000000, 0.000000 +2266, 0.374563, 0.927201, 0.000000, 0.000000 +2267, 0.374078, 0.927397, 0.000000, 0.000000 +2268, 0.373592, 0.927593, 0.000000, 0.000000 +2269, 0.373106, 0.927789, 0.000000, 0.000000 +2270, 0.372620, 0.927984, 0.000000, 0.000000 +2271, 0.372134, 0.928179, 0.000000, 0.000000 +2272, 0.371648, 0.928374, 0.000000, 0.000000 +2273, 0.371161, 0.928568, 0.000000, 0.000000 +2274, 0.370675, 0.928763, 0.000000, 0.000000 +2275, 0.370188, 0.928957, 0.000000, 0.000000 +2276, 0.369702, 0.929150, 0.000000, 0.000000 +2277, 0.369215, 0.929344, 0.000000, 0.000000 +2278, 0.368728, 0.929537, 0.000000, 0.000000 +2279, 0.368241, 0.929730, 0.000000, 0.000000 +2280, 0.367754, 0.929923, 0.000000, 0.000000 +2281, 0.367267, 0.930115, 0.000000, 0.000000 +2282, 0.366780, 0.930308, 0.000000, 0.000000 +2283, 0.366293, 0.930500, 0.000000, 0.000000 +2284, 0.365805, 0.930691, 0.000000, 0.000000 +2285, 0.365318, 0.930883, 0.000000, 0.000000 +2286, 0.364830, 0.931074, 0.000000, 0.000000 +2287, 0.364342, 0.931265, 0.000000, 0.000000 +2288, 0.363855, 0.931456, 0.000000, 0.000000 +2289, 0.363367, 0.931646, 0.000000, 0.000000 +2290, 0.362879, 0.931836, 0.000000, 0.000000 +2291, 0.362391, 0.932026, 0.000000, 0.000000 +2292, 0.361902, 0.932216, 0.000000, 0.000000 +2293, 0.361414, 0.932405, 0.000000, 0.000000 +2294, 0.360926, 0.932595, 0.000000, 0.000000 +2295, 0.360437, 0.932784, 0.000000, 0.000000 +2296, 0.359948, 0.932972, 0.000000, 0.000000 +2297, 0.359460, 0.933161, 0.000000, 0.000000 +2298, 0.358971, 0.933349, 0.000000, 0.000000 +2299, 0.358482, 0.933537, 0.000000, 0.000000 +2300, 0.357993, 0.933724, 0.000000, 0.000000 +2301, 0.357504, 0.933912, 0.000000, 0.000000 +2302, 0.357015, 0.934099, 0.000000, 0.000000 +2303, 0.356525, 0.934286, 0.000000, 0.000000 +2304, 0.356036, 0.934472, 0.000000, 0.000000 +2305, 0.355547, 0.934659, 0.000000, 0.000000 +2306, 0.355057, 0.934845, 0.000000, 0.000000 +2307, 0.354567, 0.935031, 0.000000, 0.000000 +2308, 0.354077, 0.935216, 0.000000, 0.000000 +2309, 0.353588, 0.935401, 0.000000, 0.000000 +2310, 0.353098, 0.935587, 0.000000, 0.000000 +2311, 0.352607, 0.935771, 0.000000, 0.000000 +2312, 0.352117, 0.935956, 0.000000, 0.000000 +2313, 0.351627, 0.936140, 0.000000, 0.000000 +2314, 0.351137, 0.936324, 0.000000, 0.000000 +2315, 0.350646, 0.936508, 0.000000, 0.000000 +2316, 0.350156, 0.936692, 0.000000, 0.000000 +2317, 0.349665, 0.936875, 0.000000, 0.000000 +2318, 0.349174, 0.937058, 0.000000, 0.000000 +2319, 0.348683, 0.937241, 0.000000, 0.000000 +2320, 0.348192, 0.937423, 0.000000, 0.000000 +2321, 0.347701, 0.937605, 0.000000, 0.000000 +2322, 0.347210, 0.937787, 0.000000, 0.000000 +2323, 0.346719, 0.937969, 0.000000, 0.000000 +2324, 0.346228, 0.938151, 0.000000, 0.000000 +2325, 0.345736, 0.938332, 0.000000, 0.000000 +2326, 0.345245, 0.938513, 0.000000, 0.000000 +2327, 0.344753, 0.938693, 0.000000, 0.000000 +2328, 0.344261, 0.938874, 0.000000, 0.000000 +2329, 0.343770, 0.939054, 0.000000, 0.000000 +2330, 0.343278, 0.939234, 0.000000, 0.000000 +2331, 0.342786, 0.939414, 0.000000, 0.000000 +2332, 0.342294, 0.939593, 0.000000, 0.000000 +2333, 0.341801, 0.939772, 0.000000, 0.000000 +2334, 0.341309, 0.939951, 0.000000, 0.000000 +2335, 0.340817, 0.940130, 0.000000, 0.000000 +2336, 0.340324, 0.940308, 0.000000, 0.000000 +2337, 0.339832, 0.940486, 0.000000, 0.000000 +2338, 0.339339, 0.940664, 0.000000, 0.000000 +2339, 0.338846, 0.940842, 0.000000, 0.000000 +2340, 0.338354, 0.941019, 0.000000, 0.000000 +2341, 0.337861, 0.941196, 0.000000, 0.000000 +2342, 0.337368, 0.941373, 0.000000, 0.000000 +2343, 0.336874, 0.941550, 0.000000, 0.000000 +2344, 0.336381, 0.941726, 0.000000, 0.000000 +2345, 0.335888, 0.941902, 0.000000, 0.000000 +2346, 0.335395, 0.942078, 0.000000, 0.000000 +2347, 0.334901, 0.942253, 0.000000, 0.000000 +2348, 0.334407, 0.942429, 0.000000, 0.000000 +2349, 0.333914, 0.942604, 0.000000, 0.000000 +2350, 0.333420, 0.942778, 0.000000, 0.000000 +2351, 0.332926, 0.942953, 0.000000, 0.000000 +2352, 0.332432, 0.943127, 0.000000, 0.000000 +2353, 0.331938, 0.943301, 0.000000, 0.000000 +2354, 0.331444, 0.943475, 0.000000, 0.000000 +2355, 0.330950, 0.943648, 0.000000, 0.000000 +2356, 0.330456, 0.943822, 0.000000, 0.000000 +2357, 0.329961, 0.943994, 0.000000, 0.000000 +2358, 0.329467, 0.944167, 0.000000, 0.000000 +2359, 0.328972, 0.944340, 0.000000, 0.000000 +2360, 0.328478, 0.944512, 0.000000, 0.000000 +2361, 0.327983, 0.944684, 0.000000, 0.000000 +2362, 0.327488, 0.944855, 0.000000, 0.000000 +2363, 0.326993, 0.945027, 0.000000, 0.000000 +2364, 0.326498, 0.945198, 0.000000, 0.000000 +2365, 0.326003, 0.945369, 0.000000, 0.000000 +2366, 0.325508, 0.945539, 0.000000, 0.000000 +2367, 0.325012, 0.945710, 0.000000, 0.000000 +2368, 0.324517, 0.945880, 0.000000, 0.000000 +2369, 0.324021, 0.946050, 0.000000, 0.000000 +2370, 0.323526, 0.946219, 0.000000, 0.000000 +2371, 0.323030, 0.946389, 0.000000, 0.000000 +2372, 0.322535, 0.946558, 0.000000, 0.000000 +2373, 0.322039, 0.946727, 0.000000, 0.000000 +2374, 0.321543, 0.946895, 0.000000, 0.000000 +2375, 0.321047, 0.947063, 0.000000, 0.000000 +2376, 0.320551, 0.947231, 0.000000, 0.000000 +2377, 0.320055, 0.947399, 0.000000, 0.000000 +2378, 0.319558, 0.947567, 0.000000, 0.000000 +2379, 0.319062, 0.947734, 0.000000, 0.000000 +2380, 0.318565, 0.947901, 0.000000, 0.000000 +2381, 0.318069, 0.948068, 0.000000, 0.000000 +2382, 0.317572, 0.948234, 0.000000, 0.000000 +2383, 0.317076, 0.948400, 0.000000, 0.000000 +2384, 0.316579, 0.948566, 0.000000, 0.000000 +2385, 0.316082, 0.948732, 0.000000, 0.000000 +2386, 0.315585, 0.948897, 0.000000, 0.000000 +2387, 0.315088, 0.949062, 0.000000, 0.000000 +2388, 0.314591, 0.949227, 0.000000, 0.000000 +2389, 0.314094, 0.949392, 0.000000, 0.000000 +2390, 0.313596, 0.949556, 0.000000, 0.000000 +2391, 0.313099, 0.949721, 0.000000, 0.000000 +2392, 0.312601, 0.949884, 0.000000, 0.000000 +2393, 0.312104, 0.950048, 0.000000, 0.000000 +2394, 0.311606, 0.950211, 0.000000, 0.000000 +2395, 0.311108, 0.950374, 0.000000, 0.000000 +2396, 0.310611, 0.950537, 0.000000, 0.000000 +2397, 0.310113, 0.950700, 0.000000, 0.000000 +2398, 0.309615, 0.950862, 0.000000, 0.000000 +2399, 0.309117, 0.951024, 0.000000, 0.000000 +2400, 0.308618, 0.951186, 0.000000, 0.000000 +2401, 0.308120, 0.951347, 0.000000, 0.000000 +2402, 0.307622, 0.951509, 0.000000, 0.000000 +2403, 0.307123, 0.951670, 0.000000, 0.000000 +2404, 0.306625, 0.951830, 0.000000, 0.000000 +2405, 0.306126, 0.951991, 0.000000, 0.000000 +2406, 0.305628, 0.952151, 0.000000, 0.000000 +2407, 0.305129, 0.952311, 0.000000, 0.000000 +2408, 0.304630, 0.952471, 0.000000, 0.000000 +2409, 0.304131, 0.952630, 0.000000, 0.000000 +2410, 0.303632, 0.952789, 0.000000, 0.000000 +2411, 0.303133, 0.952948, 0.000000, 0.000000 +2412, 0.302634, 0.953107, 0.000000, 0.000000 +2413, 0.302135, 0.953265, 0.000000, 0.000000 +2414, 0.301635, 0.953423, 0.000000, 0.000000 +2415, 0.301136, 0.953581, 0.000000, 0.000000 +2416, 0.300636, 0.953739, 0.000000, 0.000000 +2417, 0.300137, 0.953896, 0.000000, 0.000000 +2418, 0.299637, 0.954053, 0.000000, 0.000000 +2419, 0.299137, 0.954210, 0.000000, 0.000000 +2420, 0.298638, 0.954367, 0.000000, 0.000000 +2421, 0.298138, 0.954523, 0.000000, 0.000000 +2422, 0.297638, 0.954679, 0.000000, 0.000000 +2423, 0.297138, 0.954835, 0.000000, 0.000000 +2424, 0.296637, 0.954990, 0.000000, 0.000000 +2425, 0.296137, 0.955145, 0.000000, 0.000000 +2426, 0.295637, 0.955300, 0.000000, 0.000000 +2427, 0.295136, 0.955455, 0.000000, 0.000000 +2428, 0.294636, 0.955610, 0.000000, 0.000000 +2429, 0.294135, 0.955764, 0.000000, 0.000000 +2430, 0.293635, 0.955918, 0.000000, 0.000000 +2431, 0.293134, 0.956071, 0.000000, 0.000000 +2432, 0.292633, 0.956225, 0.000000, 0.000000 +2433, 0.292132, 0.956378, 0.000000, 0.000000 +2434, 0.291631, 0.956531, 0.000000, 0.000000 +2435, 0.291130, 0.956683, 0.000000, 0.000000 +2436, 0.290629, 0.956836, 0.000000, 0.000000 +2437, 0.290128, 0.956988, 0.000000, 0.000000 +2438, 0.289627, 0.957140, 0.000000, 0.000000 +2439, 0.289125, 0.957291, 0.000000, 0.000000 +2440, 0.288624, 0.957443, 0.000000, 0.000000 +2441, 0.288122, 0.957594, 0.000000, 0.000000 +2442, 0.287621, 0.957744, 0.000000, 0.000000 +2443, 0.287119, 0.957895, 0.000000, 0.000000 +2444, 0.286617, 0.958045, 0.000000, 0.000000 +2445, 0.286116, 0.958195, 0.000000, 0.000000 +2446, 0.285614, 0.958345, 0.000000, 0.000000 +2447, 0.285112, 0.958494, 0.000000, 0.000000 +2448, 0.284610, 0.958644, 0.000000, 0.000000 +2449, 0.284107, 0.958792, 0.000000, 0.000000 +2450, 0.283605, 0.958941, 0.000000, 0.000000 +2451, 0.283103, 0.959090, 0.000000, 0.000000 +2452, 0.282600, 0.959238, 0.000000, 0.000000 +2453, 0.282098, 0.959386, 0.000000, 0.000000 +2454, 0.281595, 0.959533, 0.000000, 0.000000 +2455, 0.281093, 0.959681, 0.000000, 0.000000 +2456, 0.280590, 0.959828, 0.000000, 0.000000 +2457, 0.280087, 0.959975, 0.000000, 0.000000 +2458, 0.279585, 0.960121, 0.000000, 0.000000 +2459, 0.279082, 0.960267, 0.000000, 0.000000 +2460, 0.278579, 0.960413, 0.000000, 0.000000 +2461, 0.278076, 0.960559, 0.000000, 0.000000 +2462, 0.277572, 0.960705, 0.000000, 0.000000 +2463, 0.277069, 0.960850, 0.000000, 0.000000 +2464, 0.276566, 0.960995, 0.000000, 0.000000 +2465, 0.276062, 0.961140, 0.000000, 0.000000 +2466, 0.275559, 0.961284, 0.000000, 0.000000 +2467, 0.275056, 0.961428, 0.000000, 0.000000 +2468, 0.274552, 0.961572, 0.000000, 0.000000 +2469, 0.274048, 0.961716, 0.000000, 0.000000 +2470, 0.273544, 0.961859, 0.000000, 0.000000 +2471, 0.273041, 0.962003, 0.000000, 0.000000 +2472, 0.272537, 0.962145, 0.000000, 0.000000 +2473, 0.272033, 0.962288, 0.000000, 0.000000 +2474, 0.271529, 0.962430, 0.000000, 0.000000 +2475, 0.271025, 0.962572, 0.000000, 0.000000 +2476, 0.270520, 0.962714, 0.000000, 0.000000 +2477, 0.270016, 0.962856, 0.000000, 0.000000 +2478, 0.269512, 0.962997, 0.000000, 0.000000 +2479, 0.269007, 0.963138, 0.000000, 0.000000 +2480, 0.268503, 0.963279, 0.000000, 0.000000 +2481, 0.267998, 0.963419, 0.000000, 0.000000 +2482, 0.267494, 0.963560, 0.000000, 0.000000 +2483, 0.266989, 0.963700, 0.000000, 0.000000 +2484, 0.266484, 0.963839, 0.000000, 0.000000 +2485, 0.265979, 0.963979, 0.000000, 0.000000 +2486, 0.265474, 0.964118, 0.000000, 0.000000 +2487, 0.264969, 0.964257, 0.000000, 0.000000 +2488, 0.264464, 0.964396, 0.000000, 0.000000 +2489, 0.263959, 0.964534, 0.000000, 0.000000 +2490, 0.263454, 0.964672, 0.000000, 0.000000 +2491, 0.262948, 0.964810, 0.000000, 0.000000 +2492, 0.262443, 0.964947, 0.000000, 0.000000 +2493, 0.261938, 0.965085, 0.000000, 0.000000 +2494, 0.261432, 0.965222, 0.000000, 0.000000 +2495, 0.260926, 0.965359, 0.000000, 0.000000 +2496, 0.260421, 0.965495, 0.000000, 0.000000 +2497, 0.259915, 0.965631, 0.000000, 0.000000 +2498, 0.259409, 0.965767, 0.000000, 0.000000 +2499, 0.258903, 0.965903, 0.000000, 0.000000 +2500, 0.258397, 0.966039, 0.000000, 0.000000 +2501, 0.257891, 0.966174, 0.000000, 0.000000 +2502, 0.257385, 0.966309, 0.000000, 0.000000 +2503, 0.256879, 0.966444, 0.000000, 0.000000 +2504, 0.256373, 0.966578, 0.000000, 0.000000 +2505, 0.255867, 0.966712, 0.000000, 0.000000 +2506, 0.255360, 0.966846, 0.000000, 0.000000 +2507, 0.254854, 0.966980, 0.000000, 0.000000 +2508, 0.254347, 0.967113, 0.000000, 0.000000 +2509, 0.253841, 0.967246, 0.000000, 0.000000 +2510, 0.253334, 0.967379, 0.000000, 0.000000 +2511, 0.252827, 0.967511, 0.000000, 0.000000 +2512, 0.252321, 0.967644, 0.000000, 0.000000 +2513, 0.251814, 0.967776, 0.000000, 0.000000 +2514, 0.251307, 0.967907, 0.000000, 0.000000 +2515, 0.250800, 0.968039, 0.000000, 0.000000 +2516, 0.250293, 0.968170, 0.000000, 0.000000 +2517, 0.249786, 0.968301, 0.000000, 0.000000 +2518, 0.249278, 0.968432, 0.000000, 0.000000 +2519, 0.248771, 0.968562, 0.000000, 0.000000 +2520, 0.248264, 0.968692, 0.000000, 0.000000 +2521, 0.247756, 0.968822, 0.000000, 0.000000 +2522, 0.247249, 0.968952, 0.000000, 0.000000 +2523, 0.246741, 0.969081, 0.000000, 0.000000 +2524, 0.246234, 0.969210, 0.000000, 0.000000 +2525, 0.245726, 0.969339, 0.000000, 0.000000 +2526, 0.245218, 0.969468, 0.000000, 0.000000 +2527, 0.244710, 0.969596, 0.000000, 0.000000 +2528, 0.244203, 0.969724, 0.000000, 0.000000 +2529, 0.243695, 0.969852, 0.000000, 0.000000 +2530, 0.243187, 0.969980, 0.000000, 0.000000 +2531, 0.242678, 0.970107, 0.000000, 0.000000 +2532, 0.242170, 0.970234, 0.000000, 0.000000 +2533, 0.241662, 0.970360, 0.000000, 0.000000 +2534, 0.241154, 0.970487, 0.000000, 0.000000 +2535, 0.240646, 0.970613, 0.000000, 0.000000 +2536, 0.240137, 0.970739, 0.000000, 0.000000 +2537, 0.239629, 0.970865, 0.000000, 0.000000 +2538, 0.239120, 0.970990, 0.000000, 0.000000 +2539, 0.238611, 0.971115, 0.000000, 0.000000 +2540, 0.238103, 0.971240, 0.000000, 0.000000 +2541, 0.237594, 0.971365, 0.000000, 0.000000 +2542, 0.237085, 0.971489, 0.000000, 0.000000 +2543, 0.236576, 0.971613, 0.000000, 0.000000 +2544, 0.236067, 0.971737, 0.000000, 0.000000 +2545, 0.235558, 0.971860, 0.000000, 0.000000 +2546, 0.235049, 0.971983, 0.000000, 0.000000 +2547, 0.234540, 0.972106, 0.000000, 0.000000 +2548, 0.234031, 0.972229, 0.000000, 0.000000 +2549, 0.233522, 0.972352, 0.000000, 0.000000 +2550, 0.233012, 0.972474, 0.000000, 0.000000 +2551, 0.232503, 0.972596, 0.000000, 0.000000 +2552, 0.231994, 0.972717, 0.000000, 0.000000 +2553, 0.231484, 0.972839, 0.000000, 0.000000 +2554, 0.230975, 0.972960, 0.000000, 0.000000 +2555, 0.230465, 0.973081, 0.000000, 0.000000 +2556, 0.229955, 0.973201, 0.000000, 0.000000 +2557, 0.229445, 0.973322, 0.000000, 0.000000 +2558, 0.228936, 0.973442, 0.000000, 0.000000 +2559, 0.228426, 0.973561, 0.000000, 0.000000 +2560, 0.227916, 0.973681, 0.000000, 0.000000 +2561, 0.227406, 0.973800, 0.000000, 0.000000 +2562, 0.226896, 0.973919, 0.000000, 0.000000 +2563, 0.226385, 0.974038, 0.000000, 0.000000 +2564, 0.225875, 0.974156, 0.000000, 0.000000 +2565, 0.225365, 0.974274, 0.000000, 0.000000 +2566, 0.224855, 0.974392, 0.000000, 0.000000 +2567, 0.224344, 0.974510, 0.000000, 0.000000 +2568, 0.223834, 0.974627, 0.000000, 0.000000 +2569, 0.223323, 0.974744, 0.000000, 0.000000 +2570, 0.222813, 0.974861, 0.000000, 0.000000 +2571, 0.222302, 0.974978, 0.000000, 0.000000 +2572, 0.221791, 0.975094, 0.000000, 0.000000 +2573, 0.221281, 0.975210, 0.000000, 0.000000 +2574, 0.220770, 0.975326, 0.000000, 0.000000 +2575, 0.220259, 0.975441, 0.000000, 0.000000 +2576, 0.219748, 0.975557, 0.000000, 0.000000 +2577, 0.219237, 0.975672, 0.000000, 0.000000 +2578, 0.218726, 0.975786, 0.000000, 0.000000 +2579, 0.218215, 0.975901, 0.000000, 0.000000 +2580, 0.217704, 0.976015, 0.000000, 0.000000 +2581, 0.217192, 0.976129, 0.000000, 0.000000 +2582, 0.216681, 0.976242, 0.000000, 0.000000 +2583, 0.216170, 0.976356, 0.000000, 0.000000 +2584, 0.215658, 0.976469, 0.000000, 0.000000 +2585, 0.215147, 0.976582, 0.000000, 0.000000 +2586, 0.214635, 0.976694, 0.000000, 0.000000 +2587, 0.214124, 0.976807, 0.000000, 0.000000 +2588, 0.213612, 0.976919, 0.000000, 0.000000 +2589, 0.213100, 0.977030, 0.000000, 0.000000 +2590, 0.212589, 0.977142, 0.000000, 0.000000 +2591, 0.212077, 0.977253, 0.000000, 0.000000 +2592, 0.211565, 0.977364, 0.000000, 0.000000 +2593, 0.211053, 0.977475, 0.000000, 0.000000 +2594, 0.210541, 0.977585, 0.000000, 0.000000 +2595, 0.210029, 0.977695, 0.000000, 0.000000 +2596, 0.209517, 0.977805, 0.000000, 0.000000 +2597, 0.209005, 0.977915, 0.000000, 0.000000 +2598, 0.208492, 0.978024, 0.000000, 0.000000 +2599, 0.207980, 0.978133, 0.000000, 0.000000 +2600, 0.207468, 0.978242, 0.000000, 0.000000 +2601, 0.206955, 0.978350, 0.000000, 0.000000 +2602, 0.206443, 0.978459, 0.000000, 0.000000 +2603, 0.205930, 0.978567, 0.000000, 0.000000 +2604, 0.205418, 0.978674, 0.000000, 0.000000 +2605, 0.204905, 0.978782, 0.000000, 0.000000 +2606, 0.204392, 0.978889, 0.000000, 0.000000 +2607, 0.203880, 0.978996, 0.000000, 0.000000 +2608, 0.203367, 0.979103, 0.000000, 0.000000 +2609, 0.202854, 0.979209, 0.000000, 0.000000 +2610, 0.202341, 0.979315, 0.000000, 0.000000 +2611, 0.201828, 0.979421, 0.000000, 0.000000 +2612, 0.201315, 0.979527, 0.000000, 0.000000 +2613, 0.200802, 0.979632, 0.000000, 0.000000 +2614, 0.200289, 0.979737, 0.000000, 0.000000 +2615, 0.199776, 0.979842, 0.000000, 0.000000 +2616, 0.199262, 0.979946, 0.000000, 0.000000 +2617, 0.198749, 0.980050, 0.000000, 0.000000 +2618, 0.198236, 0.980154, 0.000000, 0.000000 +2619, 0.197722, 0.980258, 0.000000, 0.000000 +2620, 0.197209, 0.980361, 0.000000, 0.000000 +2621, 0.196695, 0.980465, 0.000000, 0.000000 +2622, 0.196182, 0.980568, 0.000000, 0.000000 +2623, 0.195668, 0.980670, 0.000000, 0.000000 +2624, 0.195155, 0.980773, 0.000000, 0.000000 +2625, 0.194641, 0.980875, 0.000000, 0.000000 +2626, 0.194127, 0.980976, 0.000000, 0.000000 +2627, 0.193613, 0.981078, 0.000000, 0.000000 +2628, 0.193099, 0.981179, 0.000000, 0.000000 +2629, 0.192585, 0.981280, 0.000000, 0.000000 +2630, 0.192071, 0.981381, 0.000000, 0.000000 +2631, 0.191557, 0.981481, 0.000000, 0.000000 +2632, 0.191043, 0.981582, 0.000000, 0.000000 +2633, 0.190529, 0.981682, 0.000000, 0.000000 +2634, 0.190015, 0.981781, 0.000000, 0.000000 +2635, 0.189501, 0.981881, 0.000000, 0.000000 +2636, 0.188986, 0.981980, 0.000000, 0.000000 +2637, 0.188472, 0.982079, 0.000000, 0.000000 +2638, 0.187958, 0.982177, 0.000000, 0.000000 +2639, 0.187443, 0.982275, 0.000000, 0.000000 +2640, 0.186929, 0.982374, 0.000000, 0.000000 +2641, 0.186414, 0.982471, 0.000000, 0.000000 +2642, 0.185899, 0.982569, 0.000000, 0.000000 +2643, 0.185385, 0.982666, 0.000000, 0.000000 +2644, 0.184870, 0.982763, 0.000000, 0.000000 +2645, 0.184355, 0.982860, 0.000000, 0.000000 +2646, 0.183840, 0.982956, 0.000000, 0.000000 +2647, 0.183326, 0.983052, 0.000000, 0.000000 +2648, 0.182811, 0.983148, 0.000000, 0.000000 +2649, 0.182296, 0.983244, 0.000000, 0.000000 +2650, 0.181781, 0.983339, 0.000000, 0.000000 +2651, 0.181266, 0.983434, 0.000000, 0.000000 +2652, 0.180750, 0.983529, 0.000000, 0.000000 +2653, 0.180235, 0.983624, 0.000000, 0.000000 +2654, 0.179720, 0.983718, 0.000000, 0.000000 +2655, 0.179205, 0.983812, 0.000000, 0.000000 +2656, 0.178689, 0.983906, 0.000000, 0.000000 +2657, 0.178174, 0.983999, 0.000000, 0.000000 +2658, 0.177659, 0.984092, 0.000000, 0.000000 +2659, 0.177143, 0.984185, 0.000000, 0.000000 +2660, 0.176628, 0.984278, 0.000000, 0.000000 +2661, 0.176112, 0.984370, 0.000000, 0.000000 +2662, 0.175596, 0.984462, 0.000000, 0.000000 +2663, 0.175081, 0.984554, 0.000000, 0.000000 +2664, 0.174565, 0.984646, 0.000000, 0.000000 +2665, 0.174049, 0.984737, 0.000000, 0.000000 +2666, 0.173534, 0.984828, 0.000000, 0.000000 +2667, 0.173018, 0.984919, 0.000000, 0.000000 +2668, 0.172502, 0.985009, 0.000000, 0.000000 +2669, 0.171986, 0.985099, 0.000000, 0.000000 +2670, 0.171470, 0.985189, 0.000000, 0.000000 +2671, 0.170954, 0.985279, 0.000000, 0.000000 +2672, 0.170438, 0.985368, 0.000000, 0.000000 +2673, 0.169922, 0.985458, 0.000000, 0.000000 +2674, 0.169405, 0.985546, 0.000000, 0.000000 +2675, 0.168889, 0.985635, 0.000000, 0.000000 +2676, 0.168373, 0.985723, 0.000000, 0.000000 +2677, 0.167857, 0.985811, 0.000000, 0.000000 +2678, 0.167340, 0.985899, 0.000000, 0.000000 +2679, 0.166824, 0.985987, 0.000000, 0.000000 +2680, 0.166307, 0.986074, 0.000000, 0.000000 +2681, 0.165791, 0.986161, 0.000000, 0.000000 +2682, 0.165274, 0.986248, 0.000000, 0.000000 +2683, 0.164758, 0.986334, 0.000000, 0.000000 +2684, 0.164241, 0.986420, 0.000000, 0.000000 +2685, 0.163724, 0.986506, 0.000000, 0.000000 +2686, 0.163208, 0.986592, 0.000000, 0.000000 +2687, 0.162691, 0.986677, 0.000000, 0.000000 +2688, 0.162174, 0.986762, 0.000000, 0.000000 +2689, 0.161657, 0.986847, 0.000000, 0.000000 +2690, 0.161140, 0.986932, 0.000000, 0.000000 +2691, 0.160623, 0.987016, 0.000000, 0.000000 +2692, 0.160106, 0.987100, 0.000000, 0.000000 +2693, 0.159589, 0.987183, 0.000000, 0.000000 +2694, 0.159072, 0.987267, 0.000000, 0.000000 +2695, 0.158555, 0.987350, 0.000000, 0.000000 +2696, 0.158038, 0.987433, 0.000000, 0.000000 +2697, 0.157521, 0.987516, 0.000000, 0.000000 +2698, 0.157003, 0.987598, 0.000000, 0.000000 +2699, 0.156486, 0.987680, 0.000000, 0.000000 +2700, 0.155969, 0.987762, 0.000000, 0.000000 +2701, 0.155451, 0.987844, 0.000000, 0.000000 +2702, 0.154934, 0.987925, 0.000000, 0.000000 +2703, 0.154417, 0.988006, 0.000000, 0.000000 +2704, 0.153899, 0.988087, 0.000000, 0.000000 +2705, 0.153382, 0.988167, 0.000000, 0.000000 +2706, 0.152864, 0.988247, 0.000000, 0.000000 +2707, 0.152346, 0.988327, 0.000000, 0.000000 +2708, 0.151829, 0.988407, 0.000000, 0.000000 +2709, 0.151311, 0.988486, 0.000000, 0.000000 +2710, 0.150793, 0.988565, 0.000000, 0.000000 +2711, 0.150275, 0.988644, 0.000000, 0.000000 +2712, 0.149757, 0.988723, 0.000000, 0.000000 +2713, 0.149240, 0.988801, 0.000000, 0.000000 +2714, 0.148722, 0.988879, 0.000000, 0.000000 +2715, 0.148204, 0.988957, 0.000000, 0.000000 +2716, 0.147686, 0.989034, 0.000000, 0.000000 +2717, 0.147168, 0.989112, 0.000000, 0.000000 +2718, 0.146650, 0.989189, 0.000000, 0.000000 +2719, 0.146131, 0.989265, 0.000000, 0.000000 +2720, 0.145613, 0.989342, 0.000000, 0.000000 +2721, 0.145095, 0.989418, 0.000000, 0.000000 +2722, 0.144577, 0.989494, 0.000000, 0.000000 +2723, 0.144058, 0.989569, 0.000000, 0.000000 +2724, 0.143540, 0.989644, 0.000000, 0.000000 +2725, 0.143022, 0.989720, 0.000000, 0.000000 +2726, 0.142503, 0.989794, 0.000000, 0.000000 +2727, 0.141985, 0.989869, 0.000000, 0.000000 +2728, 0.141466, 0.989943, 0.000000, 0.000000 +2729, 0.140948, 0.990017, 0.000000, 0.000000 +2730, 0.140429, 0.990091, 0.000000, 0.000000 +2731, 0.139911, 0.990164, 0.000000, 0.000000 +2732, 0.139392, 0.990237, 0.000000, 0.000000 +2733, 0.138873, 0.990310, 0.000000, 0.000000 +2734, 0.138355, 0.990383, 0.000000, 0.000000 +2735, 0.137836, 0.990455, 0.000000, 0.000000 +2736, 0.137317, 0.990527, 0.000000, 0.000000 +2737, 0.136798, 0.990599, 0.000000, 0.000000 +2738, 0.136279, 0.990670, 0.000000, 0.000000 +2739, 0.135761, 0.990742, 0.000000, 0.000000 +2740, 0.135242, 0.990813, 0.000000, 0.000000 +2741, 0.134723, 0.990883, 0.000000, 0.000000 +2742, 0.134204, 0.990954, 0.000000, 0.000000 +2743, 0.133685, 0.991024, 0.000000, 0.000000 +2744, 0.133165, 0.991094, 0.000000, 0.000000 +2745, 0.132646, 0.991163, 0.000000, 0.000000 +2746, 0.132127, 0.991233, 0.000000, 0.000000 +2747, 0.131608, 0.991302, 0.000000, 0.000000 +2748, 0.131089, 0.991371, 0.000000, 0.000000 +2749, 0.130569, 0.991439, 0.000000, 0.000000 +2750, 0.130050, 0.991507, 0.000000, 0.000000 +2751, 0.129531, 0.991575, 0.000000, 0.000000 +2752, 0.129011, 0.991643, 0.000000, 0.000000 +2753, 0.128492, 0.991711, 0.000000, 0.000000 +2754, 0.127973, 0.991778, 0.000000, 0.000000 +2755, 0.127453, 0.991845, 0.000000, 0.000000 +2756, 0.126934, 0.991911, 0.000000, 0.000000 +2757, 0.126414, 0.991978, 0.000000, 0.000000 +2758, 0.125894, 0.992044, 0.000000, 0.000000 +2759, 0.125375, 0.992109, 0.000000, 0.000000 +2760, 0.124855, 0.992175, 0.000000, 0.000000 +2761, 0.124335, 0.992240, 0.000000, 0.000000 +2762, 0.123816, 0.992305, 0.000000, 0.000000 +2763, 0.123296, 0.992370, 0.000000, 0.000000 +2764, 0.122776, 0.992434, 0.000000, 0.000000 +2765, 0.122256, 0.992499, 0.000000, 0.000000 +2766, 0.121736, 0.992562, 0.000000, 0.000000 +2767, 0.121217, 0.992626, 0.000000, 0.000000 +2768, 0.120697, 0.992689, 0.000000, 0.000000 +2769, 0.120177, 0.992753, 0.000000, 0.000000 +2770, 0.119657, 0.992815, 0.000000, 0.000000 +2771, 0.119137, 0.992878, 0.000000, 0.000000 +2772, 0.118617, 0.992940, 0.000000, 0.000000 +2773, 0.118097, 0.993002, 0.000000, 0.000000 +2774, 0.117576, 0.993064, 0.000000, 0.000000 +2775, 0.117056, 0.993125, 0.000000, 0.000000 +2776, 0.116536, 0.993186, 0.000000, 0.000000 +2777, 0.116016, 0.993247, 0.000000, 0.000000 +2778, 0.115496, 0.993308, 0.000000, 0.000000 +2779, 0.114975, 0.993368, 0.000000, 0.000000 +2780, 0.114455, 0.993428, 0.000000, 0.000000 +2781, 0.113935, 0.993488, 0.000000, 0.000000 +2782, 0.113414, 0.993548, 0.000000, 0.000000 +2783, 0.112894, 0.993607, 0.000000, 0.000000 +2784, 0.112373, 0.993666, 0.000000, 0.000000 +2785, 0.111853, 0.993725, 0.000000, 0.000000 +2786, 0.111332, 0.993783, 0.000000, 0.000000 +2787, 0.110812, 0.993841, 0.000000, 0.000000 +2788, 0.110291, 0.993899, 0.000000, 0.000000 +2789, 0.109771, 0.993957, 0.000000, 0.000000 +2790, 0.109250, 0.994014, 0.000000, 0.000000 +2791, 0.108729, 0.994071, 0.000000, 0.000000 +2792, 0.108209, 0.994128, 0.000000, 0.000000 +2793, 0.107688, 0.994185, 0.000000, 0.000000 +2794, 0.107167, 0.994241, 0.000000, 0.000000 +2795, 0.106647, 0.994297, 0.000000, 0.000000 +2796, 0.106126, 0.994353, 0.000000, 0.000000 +2797, 0.105605, 0.994408, 0.000000, 0.000000 +2798, 0.105084, 0.994463, 0.000000, 0.000000 +2799, 0.104563, 0.994518, 0.000000, 0.000000 +2800, 0.104042, 0.994573, 0.000000, 0.000000 +2801, 0.103521, 0.994627, 0.000000, 0.000000 +2802, 0.103000, 0.994681, 0.000000, 0.000000 +2803, 0.102479, 0.994735, 0.000000, 0.000000 +2804, 0.101958, 0.994789, 0.000000, 0.000000 +2805, 0.101437, 0.994842, 0.000000, 0.000000 +2806, 0.100916, 0.994895, 0.000000, 0.000000 +2807, 0.100395, 0.994948, 0.000000, 0.000000 +2808, 0.099874, 0.995000, 0.000000, 0.000000 +2809, 0.099353, 0.995052, 0.000000, 0.000000 +2810, 0.098832, 0.995104, 0.000000, 0.000000 +2811, 0.098310, 0.995156, 0.000000, 0.000000 +2812, 0.097789, 0.995207, 0.000000, 0.000000 +2813, 0.097268, 0.995258, 0.000000, 0.000000 +2814, 0.096747, 0.995309, 0.000000, 0.000000 +2815, 0.096225, 0.995360, 0.000000, 0.000000 +2816, 0.095704, 0.995410, 0.000000, 0.000000 +2817, 0.095182, 0.995460, 0.000000, 0.000000 +2818, 0.094661, 0.995510, 0.000000, 0.000000 +2819, 0.094140, 0.995559, 0.000000, 0.000000 +2820, 0.093618, 0.995608, 0.000000, 0.000000 +2821, 0.093097, 0.995657, 0.000000, 0.000000 +2822, 0.092575, 0.995706, 0.000000, 0.000000 +2823, 0.092054, 0.995754, 0.000000, 0.000000 +2824, 0.091532, 0.995802, 0.000000, 0.000000 +2825, 0.091010, 0.995850, 0.000000, 0.000000 +2826, 0.090489, 0.995897, 0.000000, 0.000000 +2827, 0.089967, 0.995945, 0.000000, 0.000000 +2828, 0.089446, 0.995992, 0.000000, 0.000000 +2829, 0.088924, 0.996038, 0.000000, 0.000000 +2830, 0.088402, 0.996085, 0.000000, 0.000000 +2831, 0.087880, 0.996131, 0.000000, 0.000000 +2832, 0.087359, 0.996177, 0.000000, 0.000000 +2833, 0.086837, 0.996223, 0.000000, 0.000000 +2834, 0.086315, 0.996268, 0.000000, 0.000000 +2835, 0.085793, 0.996313, 0.000000, 0.000000 +2836, 0.085271, 0.996358, 0.000000, 0.000000 +2837, 0.084750, 0.996402, 0.000000, 0.000000 +2838, 0.084228, 0.996447, 0.000000, 0.000000 +2839, 0.083706, 0.996491, 0.000000, 0.000000 +2840, 0.083184, 0.996534, 0.000000, 0.000000 +2841, 0.082662, 0.996578, 0.000000, 0.000000 +2842, 0.082140, 0.996621, 0.000000, 0.000000 +2843, 0.081618, 0.996664, 0.000000, 0.000000 +2844, 0.081096, 0.996706, 0.000000, 0.000000 +2845, 0.080574, 0.996749, 0.000000, 0.000000 +2846, 0.080052, 0.996791, 0.000000, 0.000000 +2847, 0.079529, 0.996833, 0.000000, 0.000000 +2848, 0.079007, 0.996874, 0.000000, 0.000000 +2849, 0.078485, 0.996915, 0.000000, 0.000000 +2850, 0.077963, 0.996956, 0.000000, 0.000000 +2851, 0.077441, 0.996997, 0.000000, 0.000000 +2852, 0.076919, 0.997037, 0.000000, 0.000000 +2853, 0.076396, 0.997078, 0.000000, 0.000000 +2854, 0.075874, 0.997117, 0.000000, 0.000000 +2855, 0.075352, 0.997157, 0.000000, 0.000000 +2856, 0.074830, 0.997196, 0.000000, 0.000000 +2857, 0.074307, 0.997235, 0.000000, 0.000000 +2858, 0.073785, 0.997274, 0.000000, 0.000000 +2859, 0.073263, 0.997313, 0.000000, 0.000000 +2860, 0.072740, 0.997351, 0.000000, 0.000000 +2861, 0.072218, 0.997389, 0.000000, 0.000000 +2862, 0.071695, 0.997427, 0.000000, 0.000000 +2863, 0.071173, 0.997464, 0.000000, 0.000000 +2864, 0.070650, 0.997501, 0.000000, 0.000000 +2865, 0.070128, 0.997538, 0.000000, 0.000000 +2866, 0.069606, 0.997575, 0.000000, 0.000000 +2867, 0.069083, 0.997611, 0.000000, 0.000000 +2868, 0.068560, 0.997647, 0.000000, 0.000000 +2869, 0.068038, 0.997683, 0.000000, 0.000000 +2870, 0.067515, 0.997718, 0.000000, 0.000000 +2871, 0.066993, 0.997753, 0.000000, 0.000000 +2872, 0.066470, 0.997788, 0.000000, 0.000000 +2873, 0.065948, 0.997823, 0.000000, 0.000000 +2874, 0.065425, 0.997857, 0.000000, 0.000000 +2875, 0.064902, 0.997892, 0.000000, 0.000000 +2876, 0.064380, 0.997925, 0.000000, 0.000000 +2877, 0.063857, 0.997959, 0.000000, 0.000000 +2878, 0.063334, 0.997992, 0.000000, 0.000000 +2879, 0.062811, 0.998025, 0.000000, 0.000000 +2880, 0.062289, 0.998058, 0.000000, 0.000000 +2881, 0.061766, 0.998091, 0.000000, 0.000000 +2882, 0.061243, 0.998123, 0.000000, 0.000000 +2883, 0.060720, 0.998155, 0.000000, 0.000000 +2884, 0.060198, 0.998186, 0.000000, 0.000000 +2885, 0.059675, 0.998218, 0.000000, 0.000000 +2886, 0.059152, 0.998249, 0.000000, 0.000000 +2887, 0.058629, 0.998280, 0.000000, 0.000000 +2888, 0.058106, 0.998310, 0.000000, 0.000000 +2889, 0.057583, 0.998341, 0.000000, 0.000000 +2890, 0.057060, 0.998371, 0.000000, 0.000000 +2891, 0.056537, 0.998400, 0.000000, 0.000000 +2892, 0.056014, 0.998430, 0.000000, 0.000000 +2893, 0.055491, 0.998459, 0.000000, 0.000000 +2894, 0.054968, 0.998488, 0.000000, 0.000000 +2895, 0.054445, 0.998517, 0.000000, 0.000000 +2896, 0.053922, 0.998545, 0.000000, 0.000000 +2897, 0.053399, 0.998573, 0.000000, 0.000000 +2898, 0.052876, 0.998601, 0.000000, 0.000000 +2899, 0.052353, 0.998629, 0.000000, 0.000000 +2900, 0.051830, 0.998656, 0.000000, 0.000000 +2901, 0.051307, 0.998683, 0.000000, 0.000000 +2902, 0.050784, 0.998710, 0.000000, 0.000000 +2903, 0.050261, 0.998736, 0.000000, 0.000000 +2904, 0.049738, 0.998762, 0.000000, 0.000000 +2905, 0.049215, 0.998788, 0.000000, 0.000000 +2906, 0.048692, 0.998814, 0.000000, 0.000000 +2907, 0.048169, 0.998839, 0.000000, 0.000000 +2908, 0.047645, 0.998864, 0.000000, 0.000000 +2909, 0.047122, 0.998889, 0.000000, 0.000000 +2910, 0.046599, 0.998914, 0.000000, 0.000000 +2911, 0.046076, 0.998938, 0.000000, 0.000000 +2912, 0.045553, 0.998962, 0.000000, 0.000000 +2913, 0.045029, 0.998986, 0.000000, 0.000000 +2914, 0.044506, 0.999009, 0.000000, 0.000000 +2915, 0.043983, 0.999032, 0.000000, 0.000000 +2916, 0.043459, 0.999055, 0.000000, 0.000000 +2917, 0.042936, 0.999078, 0.000000, 0.000000 +2918, 0.042413, 0.999100, 0.000000, 0.000000 +2919, 0.041890, 0.999122, 0.000000, 0.000000 +2920, 0.041366, 0.999144, 0.000000, 0.000000 +2921, 0.040843, 0.999166, 0.000000, 0.000000 +2922, 0.040320, 0.999187, 0.000000, 0.000000 +2923, 0.039796, 0.999208, 0.000000, 0.000000 +2924, 0.039273, 0.999229, 0.000000, 0.000000 +2925, 0.038750, 0.999249, 0.000000, 0.000000 +2926, 0.038226, 0.999269, 0.000000, 0.000000 +2927, 0.037703, 0.999289, 0.000000, 0.000000 +2928, 0.037179, 0.999309, 0.000000, 0.000000 +2929, 0.036656, 0.999328, 0.000000, 0.000000 +2930, 0.036132, 0.999347, 0.000000, 0.000000 +2931, 0.035609, 0.999366, 0.000000, 0.000000 +2932, 0.035086, 0.999384, 0.000000, 0.000000 +2933, 0.034562, 0.999403, 0.000000, 0.000000 +2934, 0.034039, 0.999421, 0.000000, 0.000000 +2935, 0.033515, 0.999438, 0.000000, 0.000000 +2936, 0.032992, 0.999456, 0.000000, 0.000000 +2937, 0.032468, 0.999473, 0.000000, 0.000000 +2938, 0.031945, 0.999490, 0.000000, 0.000000 +2939, 0.031421, 0.999506, 0.000000, 0.000000 +2940, 0.030898, 0.999523, 0.000000, 0.000000 +2941, 0.030374, 0.999539, 0.000000, 0.000000 +2942, 0.029851, 0.999554, 0.000000, 0.000000 +2943, 0.029327, 0.999570, 0.000000, 0.000000 +2944, 0.028804, 0.999585, 0.000000, 0.000000 +2945, 0.028280, 0.999600, 0.000000, 0.000000 +2946, 0.027756, 0.999615, 0.000000, 0.000000 +2947, 0.027233, 0.999629, 0.000000, 0.000000 +2948, 0.026709, 0.999643, 0.000000, 0.000000 +2949, 0.026186, 0.999657, 0.000000, 0.000000 +2950, 0.025662, 0.999671, 0.000000, 0.000000 +2951, 0.025138, 0.999684, 0.000000, 0.000000 +2952, 0.024615, 0.999697, 0.000000, 0.000000 +2953, 0.024091, 0.999710, 0.000000, 0.000000 +2954, 0.023568, 0.999722, 0.000000, 0.000000 +2955, 0.023044, 0.999734, 0.000000, 0.000000 +2956, 0.022520, 0.999746, 0.000000, 0.000000 +2957, 0.021997, 0.999758, 0.000000, 0.000000 +2958, 0.021473, 0.999769, 0.000000, 0.000000 +2959, 0.020949, 0.999781, 0.000000, 0.000000 +2960, 0.020426, 0.999791, 0.000000, 0.000000 +2961, 0.019902, 0.999802, 0.000000, 0.000000 +2962, 0.019378, 0.999812, 0.000000, 0.000000 +2963, 0.018855, 0.999822, 0.000000, 0.000000 +2964, 0.018331, 0.999832, 0.000000, 0.000000 +2965, 0.017807, 0.999841, 0.000000, 0.000000 +2966, 0.017284, 0.999851, 0.000000, 0.000000 +2967, 0.016760, 0.999860, 0.000000, 0.000000 +2968, 0.016236, 0.999868, 0.000000, 0.000000 +2969, 0.015713, 0.999877, 0.000000, 0.000000 +2970, 0.015189, 0.999885, 0.000000, 0.000000 +2971, 0.014665, 0.999892, 0.000000, 0.000000 +2972, 0.014141, 0.999900, 0.000000, 0.000000 +2973, 0.013618, 0.999907, 0.000000, 0.000000 +2974, 0.013094, 0.999914, 0.000000, 0.000000 +2975, 0.012570, 0.999921, 0.000000, 0.000000 +2976, 0.012046, 0.999927, 0.000000, 0.000000 +2977, 0.011523, 0.999934, 0.000000, 0.000000 +2978, 0.010999, 0.999940, 0.000000, 0.000000 +2979, 0.010475, 0.999945, 0.000000, 0.000000 +2980, 0.009952, 0.999950, 0.000000, 0.000000 +2981, 0.009428, 0.999956, 0.000000, 0.000000 +2982, 0.008904, 0.999960, 0.000000, 0.000000 +2983, 0.008380, 0.999965, 0.000000, 0.000000 +2984, 0.007857, 0.999969, 0.000000, 0.000000 +2985, 0.007333, 0.999973, 0.000000, 0.000000 +2986, 0.006809, 0.999977, 0.000000, 0.000000 +2987, 0.006285, 0.999980, 0.000000, 0.000000 +2988, 0.005761, 0.999983, 0.000000, 0.000000 +2989, 0.005238, 0.999986, 0.000000, 0.000000 +2990, 0.004714, 0.999989, 0.000000, 0.000000 +2991, 0.004190, 0.999991, 0.000000, 0.000000 +2992, 0.003666, 0.999993, 0.000000, 0.000000 +2993, 0.003143, 0.999995, 0.000000, 0.000000 +2994, 0.002619, 0.999997, 0.000000, 0.000000 +2995, 0.002095, 0.999998, 0.000000, 0.000000 +2996, 0.001571, 0.999999, 0.000000, 0.000000 +2997, 0.001048, 0.999999, 0.000000, 0.000000 +2998, 0.000524, 1.000000, 0.000000, 0.000000 +2999, 0.000000, 1.000000, 0.000000, 0.000000 diff --git a/scripts/trajectories/headrot-1.5s-Euler.csv b/scripts/trajectories/headrot-1.5s-Euler.csv new file mode 100644 index 0000000000..3683fa3cfc --- /dev/null +++ b/scripts/trajectories/headrot-1.5s-Euler.csv @@ -0,0 +1,8100 @@ +0,-3.0,10.000033,0.000000,0.000000 +1,-3.0,10.000033,0.000000,0.000000 +2,-3.0,10.000033,0.000000,0.000000 +3,-3.0,10.000033,0.000000,0.000000 +4,-3.0,10.000033,0.000000,0.000000 +5,-3.0,10.000033,0.000000,0.000000 +6,-3.0,10.000033,0.000000,0.000000 +7,-3.0,10.000033,0.000000,0.000000 +8,-3.0,10.000033,0.000000,0.000000 +9,-3.0,10.000033,0.000000,0.000000 +10,-3.0,10.000033,0.000000,0.000000 +11,-3.0,10.000033,0.000000,0.000000 +12,-3.0,10.000033,0.000000,0.000000 +13,-3.0,10.000033,0.000000,0.000000 +14,-3.0,10.000033,0.000000,0.000000 +15,-3.0,10.000033,0.000000,0.000000 +16,-3.0,10.000033,0.000000,0.000000 +17,-3.0,10.000033,0.000000,0.000000 +18,-3.0,10.000033,0.000000,0.000000 +19,-3.0,10.000033,0.000000,0.000000 +20,-3.0,10.000033,0.000000,0.000000 +21,-3.0,10.000033,0.000000,0.000000 +22,-3.0,10.000033,0.000000,0.000000 +23,-3.0,10.000033,0.000000,0.000000 +24,-3.0,10.000033,0.000000,0.000000 +25,-3.0,10.000033,0.000000,0.000000 +26,-3.0,10.000033,0.000000,0.000000 +27,-3.0,10.000033,0.000000,0.000000 +28,-3.0,10.000033,0.000000,0.000000 +29,-3.0,10.000033,0.000000,0.000000 +30,-3.0,10.000033,0.000000,0.000000 +31,-3.0,10.000033,0.000000,0.000000 +32,-3.0,10.000033,0.000000,0.000000 +33,-3.0,10.000033,0.000000,0.000000 +34,-3.0,10.000033,0.000000,0.000000 +35,-3.0,10.000033,0.000000,0.000000 +36,-3.0,10.000033,0.000000,0.000000 +37,-3.0,10.000033,0.000000,0.000000 +38,-3.0,10.000033,0.000000,0.000000 +39,-3.0,10.000033,0.000000,0.000000 +40,-3.0,10.000033,0.000000,0.000000 +41,-3.0,10.000033,0.000000,0.000000 +42,-3.0,10.000033,0.000000,0.000000 +43,-3.0,10.000033,0.000000,0.000000 +44,-3.0,10.000033,0.000000,0.000000 +45,-3.0,10.000033,0.000000,0.000000 +46,-3.0,10.000033,0.000000,0.000000 +47,-3.0,10.000033,0.000000,0.000000 +48,-3.0,10.000033,0.000000,0.000000 +49,-3.0,10.000033,0.000000,0.000000 +50,-3.0,10.000033,0.000000,0.000000 +51,-3.0,10.000033,0.000000,0.000000 +52,-3.0,10.000033,0.000000,0.000000 +53,-3.0,10.000033,0.000000,0.000000 +54,-3.0,10.000033,0.000000,0.000000 +55,-3.0,10.000033,0.000000,0.000000 +56,-3.0,10.000033,0.000000,0.000000 +57,-3.0,10.000033,0.000000,0.000000 +58,-3.0,10.000033,0.000000,0.000000 +59,-3.0,10.000033,0.000000,0.000000 +60,-3.0,10.000033,0.000000,0.000000 +61,-3.0,10.000033,0.000000,0.000000 +62,-3.0,10.000033,0.000000,0.000000 +63,-3.0,10.000033,0.000000,0.000000 +64,-3.0,10.000033,0.000000,0.000000 +65,-3.0,10.000033,0.000000,0.000000 +66,-3.0,10.000033,0.000000,0.000000 +67,-3.0,10.000033,0.000000,0.000000 +68,-3.0,10.000033,0.000000,0.000000 +69,-3.0,10.000033,0.000000,0.000000 +70,-3.0,10.000033,0.000000,0.000000 +71,-3.0,10.000033,0.000000,0.000000 +72,-3.0,10.000033,0.000000,0.000000 +73,-3.0,10.000033,0.000000,0.000000 +74,-3.0,10.000033,0.000000,0.000000 +75,-3.0,10.000033,0.000000,0.000000 +76,-3.0,10.000033,0.000000,0.000000 +77,-3.0,10.000033,0.000000,0.000000 +78,-3.0,10.000033,0.000000,0.000000 +79,-3.0,10.000033,0.000000,0.000000 +80,-3.0,10.000033,0.000000,0.000000 +81,-3.0,10.000033,0.000000,0.000000 +82,-3.0,10.000033,0.000000,0.000000 +83,-3.0,10.000033,0.000000,0.000000 +84,-3.0,10.000033,0.000000,0.000000 +85,-3.0,10.000033,0.000000,0.000000 +86,-3.0,10.000033,0.000000,0.000000 +87,-3.0,10.000033,0.000000,0.000000 +88,-3.0,10.000033,0.000000,0.000000 +89,-3.0,10.000033,0.000000,0.000000 +90,-3.0,10.000033,0.000000,0.000000 +91,-3.0,10.000033,0.000000,0.000000 +92,-3.0,10.000033,0.000000,0.000000 +93,-3.0,10.000033,0.000000,0.000000 +94,-3.0,10.000033,0.000000,0.000000 +95,-3.0,10.000033,0.000000,0.000000 +96,-3.0,10.000033,0.000000,0.000000 +97,-3.0,10.000033,0.000000,0.000000 +98,-3.0,10.000033,0.000000,0.000000 +99,-3.0,10.000033,0.000000,0.000000 +100,-3.0,10.000033,0.000000,0.000000 +101,-3.0,10.000033,0.000000,0.000000 +102,-3.0,10.000033,0.000000,0.000000 +103,-3.0,10.000033,0.000000,0.000000 +104,-3.0,10.000033,0.000000,0.000000 +105,-3.0,10.000033,0.000000,0.000000 +106,-3.0,10.000033,0.000000,0.000000 +107,-3.0,10.000033,0.000000,0.000000 +108,-3.0,10.000033,0.000000,0.000000 +109,-3.0,10.000033,0.000000,0.000000 +110,-3.0,10.000033,0.000000,0.000000 +111,-3.0,10.000033,0.000000,0.000000 +112,-3.0,10.000033,0.000000,0.000000 +113,-3.0,10.000033,0.000000,0.000000 +114,-3.0,10.000033,0.000000,0.000000 +115,-3.0,10.000033,0.000000,0.000000 +116,-3.0,10.000033,0.000000,0.000000 +117,-3.0,10.000033,0.000000,0.000000 +118,-3.0,10.000033,0.000000,0.000000 +119,-3.0,10.000033,0.000000,0.000000 +120,-3.0,10.000033,0.000000,0.000000 +121,-3.0,10.000033,0.000000,0.000000 +122,-3.0,10.000033,0.000000,0.000000 +123,-3.0,10.000033,0.000000,0.000000 +124,-3.0,10.000033,0.000000,0.000000 +125,-3.0,10.000033,0.000000,0.000000 +126,-3.0,10.000033,0.000000,0.000000 +127,-3.0,10.000033,0.000000,0.000000 +128,-3.0,10.000033,0.000000,0.000000 +129,-3.0,10.000033,0.000000,0.000000 +130,-3.0,10.000033,0.000000,0.000000 +131,-3.0,10.000033,0.000000,0.000000 +132,-3.0,10.000033,0.000000,0.000000 +133,-3.0,10.000033,0.000000,0.000000 +134,-3.0,10.000033,0.000000,0.000000 +135,-3.0,10.000033,0.000000,0.000000 +136,-3.0,10.000033,0.000000,0.000000 +137,-3.0,10.000033,0.000000,0.000000 +138,-3.0,10.000033,0.000000,0.000000 +139,-3.0,10.000033,0.000000,0.000000 +140,-3.0,10.000033,0.000000,0.000000 +141,-3.0,10.000033,0.000000,0.000000 +142,-3.0,10.000033,0.000000,0.000000 +143,-3.0,10.000033,0.000000,0.000000 +144,-3.0,10.000033,0.000000,0.000000 +145,-3.0,10.000033,0.000000,0.000000 +146,-3.0,10.000033,0.000000,0.000000 +147,-3.0,10.000033,0.000000,0.000000 +148,-3.0,10.000033,0.000000,0.000000 +149,-3.0,10.000033,0.000000,0.000000 +150,-3.0,10.000033,0.000000,0.000000 +151,-3.0,10.000033,0.000000,0.000000 +152,-3.0,10.000033,0.000000,0.000000 +153,-3.0,10.000033,0.000000,0.000000 +154,-3.0,10.000033,0.000000,0.000000 +155,-3.0,10.000033,0.000000,0.000000 +156,-3.0,10.000033,0.000000,0.000000 +157,-3.0,10.000033,0.000000,0.000000 +158,-3.0,10.000033,0.000000,0.000000 +159,-3.0,10.000033,0.000000,0.000000 +160,-3.0,10.000033,0.000000,0.000000 +161,-3.0,10.000033,0.000000,0.000000 +162,-3.0,10.000033,0.000000,0.000000 +163,-3.0,10.000033,0.000000,0.000000 +164,-3.0,10.000033,0.000000,0.000000 +165,-3.0,10.000033,0.000000,0.000000 +166,-3.0,10.000033,0.000000,0.000000 +167,-3.0,10.000033,0.000000,0.000000 +168,-3.0,10.000033,0.000000,0.000000 +169,-3.0,10.000033,0.000000,0.000000 +170,-3.0,10.000033,0.000000,0.000000 +171,-3.0,10.000033,0.000000,0.000000 +172,-3.0,10.000033,0.000000,0.000000 +173,-3.0,10.000033,0.000000,0.000000 +174,-3.0,10.000033,0.000000,0.000000 +175,-3.0,10.000033,0.000000,0.000000 +176,-3.0,10.000033,0.000000,0.000000 +177,-3.0,10.000033,0.000000,0.000000 +178,-3.0,10.000033,0.000000,0.000000 +179,-3.0,10.000033,0.000000,0.000000 +180,-3.0,10.000033,0.000000,0.000000 +181,-3.0,10.000033,0.000000,0.000000 +182,-3.0,10.000033,0.000000,0.000000 +183,-3.0,10.000033,0.000000,0.000000 +184,-3.0,10.000033,0.000000,0.000000 +185,-3.0,10.000033,0.000000,0.000000 +186,-3.0,10.000033,0.000000,0.000000 +187,-3.0,10.000033,0.000000,0.000000 +188,-3.0,10.000033,0.000000,0.000000 +189,-3.0,10.000033,0.000000,0.000000 +190,-3.0,10.000033,0.000000,0.000000 +191,-3.0,10.000033,0.000000,0.000000 +192,-3.0,10.000033,0.000000,0.000000 +193,-3.0,10.000033,0.000000,0.000000 +194,-3.0,10.000033,0.000000,0.000000 +195,-3.0,10.000033,0.000000,0.000000 +196,-3.0,10.000033,0.000000,0.000000 +197,-3.0,10.000033,0.000000,0.000000 +198,-3.0,10.000033,0.000000,0.000000 +199,-3.0,10.000033,0.000000,0.000000 +200,-3.0,10.000033,0.000000,0.000000 +201,-3.0,10.000033,0.000000,0.000000 +202,-3.0,10.000033,0.000000,0.000000 +203,-3.0,10.000033,0.000000,0.000000 +204,-3.0,10.000033,0.000000,0.000000 +205,-3.0,10.000033,0.000000,0.000000 +206,-3.0,10.000033,0.000000,0.000000 +207,-3.0,10.000033,0.000000,0.000000 +208,-3.0,10.000033,0.000000,0.000000 +209,-3.0,10.000033,0.000000,0.000000 +210,-3.0,10.000033,0.000000,0.000000 +211,-3.0,10.000033,0.000000,0.000000 +212,-3.0,10.000033,0.000000,0.000000 +213,-3.0,10.000033,0.000000,0.000000 +214,-3.0,10.000033,0.000000,0.000000 +215,-3.0,10.000033,0.000000,0.000000 +216,-3.0,10.000033,0.000000,0.000000 +217,-3.0,10.000033,0.000000,0.000000 +218,-3.0,10.000033,0.000000,0.000000 +219,-3.0,10.000033,0.000000,0.000000 +220,-3.0,10.000033,0.000000,0.000000 +221,-3.0,10.000033,0.000000,0.000000 +222,-3.0,10.000033,0.000000,0.000000 +223,-3.0,10.000033,0.000000,0.000000 +224,-3.0,10.000033,0.000000,0.000000 +225,-3.0,10.000033,0.000000,0.000000 +226,-3.0,10.000033,0.000000,0.000000 +227,-3.0,10.000033,0.000000,0.000000 +228,-3.0,10.000033,0.000000,0.000000 +229,-3.0,10.000033,0.000000,0.000000 +230,-3.0,10.000033,0.000000,0.000000 +231,-3.0,10.000033,0.000000,0.000000 +232,-3.0,10.000033,0.000000,0.000000 +233,-3.0,10.000033,0.000000,0.000000 +234,-3.0,10.000033,0.000000,0.000000 +235,-3.0,10.000033,0.000000,0.000000 +236,-3.0,10.000033,0.000000,0.000000 +237,-3.0,10.000033,0.000000,0.000000 +238,-3.0,10.000033,0.000000,0.000000 +239,-3.0,10.000033,0.000000,0.000000 +240,-3.0,10.000033,0.000000,0.000000 +241,-3.0,10.000033,0.000000,0.000000 +242,-3.0,10.000033,0.000000,0.000000 +243,-3.0,10.000033,0.000000,0.000000 +244,-3.0,10.000033,0.000000,0.000000 +245,-3.0,10.000033,0.000000,0.000000 +246,-3.0,10.000033,0.000000,0.000000 +247,-3.0,10.000033,0.000000,0.000000 +248,-3.0,10.000033,0.000000,0.000000 +249,-3.0,10.000033,0.000000,0.000000 +250,-3.0,10.000033,0.000000,0.000000 +251,-3.0,10.000033,0.000000,0.000000 +252,-3.0,10.000033,0.000000,0.000000 +253,-3.0,10.000033,0.000000,0.000000 +254,-3.0,10.000033,0.000000,0.000000 +255,-3.0,10.000033,0.000000,0.000000 +256,-3.0,10.000033,0.000000,0.000000 +257,-3.0,10.000033,0.000000,0.000000 +258,-3.0,10.000033,0.000000,0.000000 +259,-3.0,10.000033,0.000000,0.000000 +260,-3.0,10.000033,0.000000,0.000000 +261,-3.0,10.000033,0.000000,0.000000 +262,-3.0,10.000033,0.000000,0.000000 +263,-3.0,10.000033,0.000000,0.000000 +264,-3.0,10.000033,0.000000,0.000000 +265,-3.0,10.000033,0.000000,0.000000 +266,-3.0,10.000033,0.000000,0.000000 +267,-3.0,10.000033,0.000000,0.000000 +268,-3.0,10.000033,0.000000,0.000000 +269,-3.0,10.000033,0.000000,0.000000 +270,-3.0,10.000033,0.000000,0.000000 +271,-3.0,10.000033,0.000000,0.000000 +272,-3.0,10.000033,0.000000,0.000000 +273,-3.0,10.000033,0.000000,0.000000 +274,-3.0,10.000033,0.000000,0.000000 +275,-3.0,10.000033,0.000000,0.000000 +276,-3.0,10.000033,0.000000,0.000000 +277,-3.0,10.000033,0.000000,0.000000 +278,-3.0,10.000033,0.000000,0.000000 +279,-3.0,10.000033,0.000000,0.000000 +280,-3.0,10.000033,0.000000,0.000000 +281,-3.0,10.000033,0.000000,0.000000 +282,-3.0,10.000033,0.000000,0.000000 +283,-3.0,10.000033,0.000000,0.000000 +284,-3.0,10.000033,0.000000,0.000000 +285,-3.0,10.000033,0.000000,0.000000 +286,-3.0,10.000033,0.000000,0.000000 +287,-3.0,10.000033,0.000000,0.000000 +288,-3.0,10.000033,0.000000,0.000000 +289,-3.0,10.000033,0.000000,0.000000 +290,-3.0,10.000033,0.000000,0.000000 +291,-3.0,10.000033,0.000000,0.000000 +292,-3.0,10.000033,0.000000,0.000000 +293,-3.0,10.000033,0.000000,0.000000 +294,-3.0,10.000033,0.000000,0.000000 +295,-3.0,10.000033,0.000000,0.000000 +296,-3.0,10.000033,0.000000,0.000000 +297,-3.0,10.000033,0.000000,0.000000 +298,-3.0,10.000033,0.000000,0.000000 +299,-3.0,10.000033,0.000000,0.000000 +300,-3.0,10.000033,0.000000,0.000000 +301,-3.0,10.000033,0.000000,0.000000 +302,-3.0,10.000033,0.000000,0.000000 +303,-3.0,10.000033,0.000000,0.000000 +304,-3.0,10.000033,0.000000,0.000000 +305,-3.0,10.000033,0.000000,0.000000 +306,-3.0,10.000033,0.000000,0.000000 +307,-3.0,10.000033,0.000000,0.000000 +308,-3.0,10.000033,0.000000,0.000000 +309,-3.0,10.000033,0.000000,0.000000 +310,-3.0,10.000033,0.000000,0.000000 +311,-3.0,10.000033,0.000000,0.000000 +312,-3.0,10.000033,0.000000,0.000000 +313,-3.0,10.000033,0.000000,0.000000 +314,-3.0,10.000033,0.000000,0.000000 +315,-3.0,10.000033,0.000000,0.000000 +316,-3.0,10.000033,0.000000,0.000000 +317,-3.0,10.000033,0.000000,0.000000 +318,-3.0,10.000033,0.000000,0.000000 +319,-3.0,10.000033,0.000000,0.000000 +320,-3.0,10.000033,0.000000,0.000000 +321,-3.0,10.000033,0.000000,0.000000 +322,-3.0,10.000033,0.000000,0.000000 +323,-3.0,10.000033,0.000000,0.000000 +324,-3.0,10.000033,0.000000,0.000000 +325,-3.0,10.000033,0.000000,0.000000 +326,-3.0,10.000033,0.000000,0.000000 +327,-3.0,10.000033,0.000000,0.000000 +328,-3.0,10.000033,0.000000,0.000000 +329,-3.0,10.000033,0.000000,0.000000 +330,-3.0,10.000033,0.000000,0.000000 +331,-3.0,10.000033,0.000000,0.000000 +332,-3.0,10.000033,0.000000,0.000000 +333,-3.0,10.000033,0.000000,0.000000 +334,-3.0,10.000033,0.000000,0.000000 +335,-3.0,10.000033,0.000000,0.000000 +336,-3.0,10.000033,0.000000,0.000000 +337,-3.0,10.000033,0.000000,0.000000 +338,-3.0,10.000033,0.000000,0.000000 +339,-3.0,10.000033,0.000000,0.000000 +340,-3.0,10.000033,0.000000,0.000000 +341,-3.0,10.000033,0.000000,0.000000 +342,-3.0,10.000033,0.000000,0.000000 +343,-3.0,10.000033,0.000000,0.000000 +344,-3.0,10.000033,0.000000,0.000000 +345,-3.0,10.000033,0.000000,0.000000 +346,-3.0,10.000033,0.000000,0.000000 +347,-3.0,10.000033,0.000000,0.000000 +348,-3.0,10.000033,0.000000,0.000000 +349,-3.0,10.000033,0.000000,0.000000 +350,-3.0,10.000033,0.000000,0.000000 +351,-3.0,10.000033,0.000000,0.000000 +352,-3.0,10.000033,0.000000,0.000000 +353,-3.0,10.000033,0.000000,0.000000 +354,-3.0,10.000033,0.000000,0.000000 +355,-3.0,10.000033,0.000000,0.000000 +356,-3.0,10.000033,0.000000,0.000000 +357,-3.0,10.000033,0.000000,0.000000 +358,-3.0,10.000033,0.000000,0.000000 +359,-3.0,10.000033,0.000000,0.000000 +360,-3.0,10.000033,0.000000,0.000000 +361,-3.0,10.000033,0.000000,0.000000 +362,-3.0,10.000033,0.000000,0.000000 +363,-3.0,10.000033,0.000000,0.000000 +364,-3.0,10.000033,0.000000,0.000000 +365,-3.0,10.000033,0.000000,0.000000 +366,-3.0,10.000033,0.000000,0.000000 +367,-3.0,10.000033,0.000000,0.000000 +368,-3.0,10.000033,0.000000,0.000000 +369,-3.0,10.000033,0.000000,0.000000 +370,-3.0,10.000033,0.000000,0.000000 +371,-3.0,10.000033,0.000000,0.000000 +372,-3.0,10.000033,0.000000,0.000000 +373,-3.0,10.000033,0.000000,0.000000 +374,-3.0,10.000033,0.000000,0.000000 +375,-3.0,10.000033,0.000000,0.000000 +376,-3.0,10.000033,0.000000,0.000000 +377,-3.0,10.000033,0.000000,0.000000 +378,-3.0,10.000033,0.000000,0.000000 +379,-3.0,10.000033,0.000000,0.000000 +380,-3.0,10.000033,0.000000,0.000000 +381,-3.0,10.000033,0.000000,0.000000 +382,-3.0,10.000033,0.000000,0.000000 +383,-3.0,10.000033,0.000000,0.000000 +384,-3.0,10.000033,0.000000,0.000000 +385,-3.0,10.000033,0.000000,0.000000 +386,-3.0,10.000033,0.000000,0.000000 +387,-3.0,10.000033,0.000000,0.000000 +388,-3.0,10.000033,0.000000,0.000000 +389,-3.0,10.000033,0.000000,0.000000 +390,-3.0,10.000033,0.000000,0.000000 +391,-3.0,10.000033,0.000000,0.000000 +392,-3.0,10.000033,0.000000,0.000000 +393,-3.0,10.000033,0.000000,0.000000 +394,-3.0,10.000033,0.000000,0.000000 +395,-3.0,10.000033,0.000000,0.000000 +396,-3.0,10.000033,0.000000,0.000000 +397,-3.0,10.000033,0.000000,0.000000 +398,-3.0,10.000033,0.000000,0.000000 +399,-3.0,10.000033,0.000000,0.000000 +400,-3.0,10.000033,0.000000,0.000000 +401,-3.0,10.000033,0.000000,0.000000 +402,-3.0,10.000033,0.000000,0.000000 +403,-3.0,10.000033,0.000000,0.000000 +404,-3.0,10.000033,0.000000,0.000000 +405,-3.0,10.000033,0.000000,0.000000 +406,-3.0,10.000033,0.000000,0.000000 +407,-3.0,10.000033,0.000000,0.000000 +408,-3.0,10.000033,0.000000,0.000000 +409,-3.0,10.000033,0.000000,0.000000 +410,-3.0,10.000033,0.000000,0.000000 +411,-3.0,10.000033,0.000000,0.000000 +412,-3.0,10.000033,0.000000,0.000000 +413,-3.0,10.000033,0.000000,0.000000 +414,-3.0,10.000033,0.000000,0.000000 +415,-3.0,10.000033,0.000000,0.000000 +416,-3.0,10.000033,0.000000,0.000000 +417,-3.0,10.000033,0.000000,0.000000 +418,-3.0,10.000033,0.000000,0.000000 +419,-3.0,10.000033,0.000000,0.000000 +420,-3.0,10.000033,0.000000,0.000000 +421,-3.0,10.000033,0.000000,0.000000 +422,-3.0,10.000033,0.000000,0.000000 +423,-3.0,10.000033,0.000000,0.000000 +424,-3.0,10.000033,0.000000,0.000000 +425,-3.0,10.000033,0.000000,0.000000 +426,-3.0,10.000033,0.000000,0.000000 +427,-3.0,10.000033,0.000000,0.000000 +428,-3.0,10.000033,0.000000,0.000000 +429,-3.0,10.000033,0.000000,0.000000 +430,-3.0,10.000033,0.000000,0.000000 +431,-3.0,10.000033,0.000000,0.000000 +432,-3.0,10.000033,0.000000,0.000000 +433,-3.0,10.000033,0.000000,0.000000 +434,-3.0,10.000033,0.000000,0.000000 +435,-3.0,10.000033,0.000000,0.000000 +436,-3.0,10.000033,0.000000,0.000000 +437,-3.0,10.000033,0.000000,0.000000 +438,-3.0,10.000033,0.000000,0.000000 +439,-3.0,10.000033,0.000000,0.000000 +440,-3.0,10.000033,0.000000,0.000000 +441,-3.0,10.000033,0.000000,0.000000 +442,-3.0,10.000033,0.000000,0.000000 +443,-3.0,10.000033,0.000000,0.000000 +444,-3.0,10.000033,0.000000,0.000000 +445,-3.0,10.000033,0.000000,0.000000 +446,-3.0,10.000033,0.000000,0.000000 +447,-3.0,10.000033,0.000000,0.000000 +448,-3.0,10.000033,0.000000,0.000000 +449,-3.0,10.000033,0.000000,0.000000 +450,-3.0,10.000033,0.000000,0.000000 +451,-3.0,10.000033,0.000000,0.000000 +452,-3.0,10.000033,0.000000,0.000000 +453,-3.0,10.000033,0.000000,0.000000 +454,-3.0,10.000033,0.000000,0.000000 +455,-3.0,10.000033,0.000000,0.000000 +456,-3.0,10.000033,0.000000,0.000000 +457,-3.0,10.000033,0.000000,0.000000 +458,-3.0,10.000033,0.000000,0.000000 +459,-3.0,10.000033,0.000000,0.000000 +460,-3.0,10.000033,0.000000,0.000000 +461,-3.0,10.000033,0.000000,0.000000 +462,-3.0,10.000033,0.000000,0.000000 +463,-3.0,10.000033,0.000000,0.000000 +464,-3.0,10.000033,0.000000,0.000000 +465,-3.0,10.000033,0.000000,0.000000 +466,-3.0,10.000033,0.000000,0.000000 +467,-3.0,10.000033,0.000000,0.000000 +468,-3.0,10.000033,0.000000,0.000000 +469,-3.0,10.000033,0.000000,0.000000 +470,-3.0,10.000033,0.000000,0.000000 +471,-3.0,10.000033,0.000000,0.000000 +472,-3.0,10.000033,0.000000,0.000000 +473,-3.0,10.000033,0.000000,0.000000 +474,-3.0,10.000033,0.000000,0.000000 +475,-3.0,10.000033,0.000000,0.000000 +476,-3.0,10.000033,0.000000,0.000000 +477,-3.0,10.000033,0.000000,0.000000 +478,-3.0,10.000033,0.000000,0.000000 +479,-3.0,10.000033,0.000000,0.000000 +480,-3.0,10.000033,0.000000,0.000000 +481,-3.0,10.000033,0.000000,0.000000 +482,-3.0,10.000033,0.000000,0.000000 +483,-3.0,10.000033,0.000000,0.000000 +484,-3.0,10.000033,0.000000,0.000000 +485,-3.0,10.000033,0.000000,0.000000 +486,-3.0,10.000033,0.000000,0.000000 +487,-3.0,10.000033,0.000000,0.000000 +488,-3.0,10.000033,0.000000,0.000000 +489,-3.0,10.000033,0.000000,0.000000 +490,-3.0,10.000033,0.000000,0.000000 +491,-3.0,10.000033,0.000000,0.000000 +492,-3.0,10.000033,0.000000,0.000000 +493,-3.0,10.000033,0.000000,0.000000 +494,-3.0,10.000033,0.000000,0.000000 +495,-3.0,10.000033,0.000000,0.000000 +496,-3.0,10.000033,0.000000,0.000000 +497,-3.0,10.000033,0.000000,0.000000 +498,-3.0,10.000033,0.000000,0.000000 +499,-3.0,10.000033,0.000000,0.000000 +500,-3.0,10.000033,0.000000,0.000000 +501,-3.0,10.000033,0.000000,0.000000 +502,-3.0,10.000033,0.000000,0.000000 +503,-3.0,10.000033,0.000000,0.000000 +504,-3.0,10.000033,0.000000,0.000000 +505,-3.0,10.000033,0.000000,0.000000 +506,-3.0,10.000033,0.000000,0.000000 +507,-3.0,10.000033,0.000000,0.000000 +508,-3.0,10.000033,0.000000,0.000000 +509,-3.0,10.000033,0.000000,0.000000 +510,-3.0,10.000033,0.000000,0.000000 +511,-3.0,10.000033,0.000000,0.000000 +512,-3.0,10.000033,0.000000,0.000000 +513,-3.0,10.000033,0.000000,0.000000 +514,-3.0,10.000033,0.000000,0.000000 +515,-3.0,10.000033,0.000000,0.000000 +516,-3.0,10.000033,0.000000,0.000000 +517,-3.0,10.000033,0.000000,0.000000 +518,-3.0,10.000033,0.000000,0.000000 +519,-3.0,10.000033,0.000000,0.000000 +520,-3.0,10.000033,0.000000,0.000000 +521,-3.0,10.000033,0.000000,0.000000 +522,-3.0,10.000033,0.000000,0.000000 +523,-3.0,10.000033,0.000000,0.000000 +524,-3.0,10.000033,0.000000,0.000000 +525,-3.0,10.000033,0.000000,0.000000 +526,-3.0,10.000033,0.000000,0.000000 +527,-3.0,10.000033,0.000000,0.000000 +528,-3.0,10.000033,0.000000,0.000000 +529,-3.0,10.000033,0.000000,0.000000 +530,-3.0,10.000033,0.000000,0.000000 +531,-3.0,10.000033,0.000000,0.000000 +532,-3.0,10.000033,0.000000,0.000000 +533,-3.0,10.000033,0.000000,0.000000 +534,-3.0,10.000033,0.000000,0.000000 +535,-3.0,10.000033,0.000000,0.000000 +536,-3.0,10.000033,0.000000,0.000000 +537,-3.0,10.000033,0.000000,0.000000 +538,-3.0,10.000033,0.000000,0.000000 +539,-3.0,10.000033,0.000000,0.000000 +540,-3.0,10.000033,0.000000,0.000000 +541,-3.0,10.000033,0.000000,0.000000 +542,-3.0,10.000033,0.000000,0.000000 +543,-3.0,10.000033,0.000000,0.000000 +544,-3.0,10.000033,0.000000,0.000000 +545,-3.0,10.000033,0.000000,0.000000 +546,-3.0,10.000033,0.000000,0.000000 +547,-3.0,10.000033,0.000000,0.000000 +548,-3.0,10.000033,0.000000,0.000000 +549,-3.0,10.000033,0.000000,0.000000 +550,-3.0,10.000033,0.000000,0.000000 +551,-3.0,10.000033,0.000000,0.000000 +552,-3.0,10.000033,0.000000,0.000000 +553,-3.0,10.000033,0.000000,0.000000 +554,-3.0,10.000033,0.000000,0.000000 +555,-3.0,10.000033,0.000000,0.000000 +556,-3.0,10.000033,0.000000,0.000000 +557,-3.0,10.000033,0.000000,0.000000 +558,-3.0,10.000033,0.000000,0.000000 +559,-3.0,10.000033,0.000000,0.000000 +560,-3.0,10.000033,0.000000,0.000000 +561,-3.0,10.000033,0.000000,0.000000 +562,-3.0,10.000033,0.000000,0.000000 +563,-3.0,10.000033,0.000000,0.000000 +564,-3.0,10.000033,0.000000,0.000000 +565,-3.0,10.000033,0.000000,0.000000 +566,-3.0,10.000033,0.000000,0.000000 +567,-3.0,10.000033,0.000000,0.000000 +568,-3.0,10.000033,0.000000,0.000000 +569,-3.0,10.000033,0.000000,0.000000 +570,-3.0,10.000033,0.000000,0.000000 +571,-3.0,10.000033,0.000000,0.000000 +572,-3.0,10.000033,0.000000,0.000000 +573,-3.0,10.000033,0.000000,0.000000 +574,-3.0,10.000033,0.000000,0.000000 +575,-3.0,10.000033,0.000000,0.000000 +576,-3.0,10.000033,0.000000,0.000000 +577,-3.0,10.000033,0.000000,0.000000 +578,-3.0,10.000033,0.000000,0.000000 +579,-3.0,10.000033,0.000000,0.000000 +580,-3.0,10.000033,0.000000,0.000000 +581,-3.0,10.000033,0.000000,0.000000 +582,-3.0,10.000033,0.000000,0.000000 +583,-3.0,10.000033,0.000000,0.000000 +584,-3.0,10.000033,0.000000,0.000000 +585,-3.0,10.000033,0.000000,0.000000 +586,-3.0,10.000033,0.000000,0.000000 +587,-3.0,10.000033,0.000000,0.000000 +588,-3.0,10.000033,0.000000,0.000000 +589,-3.0,10.000033,0.000000,0.000000 +590,-3.0,10.000033,0.000000,0.000000 +591,-3.0,10.000033,0.000000,0.000000 +592,-3.0,10.000033,0.000000,0.000000 +593,-3.0,10.000033,0.000000,0.000000 +594,-3.0,10.000033,0.000000,0.000000 +595,-3.0,10.000033,0.000000,0.000000 +596,-3.0,10.000033,0.000000,0.000000 +597,-3.0,10.000033,0.000000,0.000000 +598,-3.0,10.000033,0.000000,0.000000 +599,-3.0,10.000033,0.000000,0.000000 +600,-3.0,10.000033,0.000000,0.000000 +601,-3.0,10.000033,0.000000,0.000000 +602,-3.0,10.000033,0.000000,0.000000 +603,-3.0,10.000033,0.000000,0.000000 +604,-3.0,10.000033,0.000000,0.000000 +605,-3.0,10.000033,0.000000,0.000000 +606,-3.0,10.000033,0.000000,0.000000 +607,-3.0,10.000033,0.000000,0.000000 +608,-3.0,10.000033,0.000000,0.000000 +609,-3.0,10.000033,0.000000,0.000000 +610,-3.0,10.000033,0.000000,0.000000 +611,-3.0,10.000033,0.000000,0.000000 +612,-3.0,10.000033,0.000000,0.000000 +613,-3.0,10.000033,0.000000,0.000000 +614,-3.0,10.000033,0.000000,0.000000 +615,-3.0,10.000033,0.000000,0.000000 +616,-3.0,10.000033,0.000000,0.000000 +617,-3.0,10.000033,0.000000,0.000000 +618,-3.0,10.000033,0.000000,0.000000 +619,-3.0,10.000033,0.000000,0.000000 +620,-3.0,10.000033,0.000000,0.000000 +621,-3.0,10.000033,0.000000,0.000000 +622,-3.0,10.000033,0.000000,0.000000 +623,-3.0,10.000033,0.000000,0.000000 +624,-3.0,10.000033,0.000000,0.000000 +625,-3.0,10.000033,0.000000,0.000000 +626,-3.0,10.000033,0.000000,0.000000 +627,-3.0,10.000033,0.000000,0.000000 +628,-3.0,10.000033,0.000000,0.000000 +629,-3.0,10.000033,0.000000,0.000000 +630,-3.0,10.000033,0.000000,0.000000 +631,-3.0,10.000033,0.000000,0.000000 +632,-3.0,10.000033,0.000000,0.000000 +633,-3.0,10.000033,0.000000,0.000000 +634,-3.0,10.000033,0.000000,0.000000 +635,-3.0,10.000033,0.000000,0.000000 +636,-3.0,10.000033,0.000000,0.000000 +637,-3.0,10.000033,0.000000,0.000000 +638,-3.0,10.000033,0.000000,0.000000 +639,-3.0,10.000033,0.000000,0.000000 +640,-3.0,10.000033,0.000000,0.000000 +641,-3.0,10.000033,0.000000,0.000000 +642,-3.0,10.000033,0.000000,0.000000 +643,-3.0,10.000033,0.000000,0.000000 +644,-3.0,10.000033,0.000000,0.000000 +645,-3.0,10.000033,0.000000,0.000000 +646,-3.0,10.000033,0.000000,0.000000 +647,-3.0,10.000033,0.000000,0.000000 +648,-3.0,10.000033,0.000000,0.000000 +649,-3.0,10.000033,0.000000,0.000000 +650,-3.0,10.000033,0.000000,0.000000 +651,-3.0,10.000033,0.000000,0.000000 +652,-3.0,10.000033,0.000000,0.000000 +653,-3.0,10.000033,0.000000,0.000000 +654,-3.0,10.000033,0.000000,0.000000 +655,-3.0,10.000033,0.000000,0.000000 +656,-3.0,10.000033,0.000000,0.000000 +657,-3.0,10.000033,0.000000,0.000000 +658,-3.0,10.000033,0.000000,0.000000 +659,-3.0,10.000033,0.000000,0.000000 +660,-3.0,10.000033,0.000000,0.000000 +661,-3.0,10.000033,0.000000,0.000000 +662,-3.0,10.000033,0.000000,0.000000 +663,-3.0,10.000033,0.000000,0.000000 +664,-3.0,10.000033,0.000000,0.000000 +665,-3.0,10.000033,0.000000,0.000000 +666,-3.0,10.000033,0.000000,0.000000 +667,-3.0,10.000033,0.000000,0.000000 +668,-3.0,10.000033,0.000000,0.000000 +669,-3.0,10.000033,0.000000,0.000000 +670,-3.0,10.000033,0.000000,0.000000 +671,-3.0,10.000033,0.000000,0.000000 +672,-3.0,10.000033,0.000000,0.000000 +673,-3.0,10.000033,0.000000,0.000000 +674,-3.0,10.000033,0.000000,0.000000 +675,-3.0,10.000033,0.000000,0.000000 +676,-3.0,10.000033,0.000000,0.000000 +677,-3.0,10.000033,0.000000,0.000000 +678,-3.0,10.000033,0.000000,0.000000 +679,-3.0,10.000033,0.000000,0.000000 +680,-3.0,10.000033,0.000000,0.000000 +681,-3.0,10.000033,0.000000,0.000000 +682,-3.0,10.000033,0.000000,0.000000 +683,-3.0,10.000033,0.000000,0.000000 +684,-3.0,10.000033,0.000000,0.000000 +685,-3.0,10.000033,0.000000,0.000000 +686,-3.0,10.000033,0.000000,0.000000 +687,-3.0,10.000033,0.000000,0.000000 +688,-3.0,10.000033,0.000000,0.000000 +689,-3.0,10.000033,0.000000,0.000000 +690,-3.0,10.000033,0.000000,0.000000 +691,-3.0,10.000033,0.000000,0.000000 +692,-3.0,10.000033,0.000000,0.000000 +693,-3.0,10.000033,0.000000,0.000000 +694,-3.0,10.000033,0.000000,0.000000 +695,-3.0,10.000033,0.000000,0.000000 +696,-3.0,10.000033,0.000000,0.000000 +697,-3.0,10.000033,0.000000,0.000000 +698,-3.0,10.000033,0.000000,0.000000 +699,-3.0,10.000033,0.000000,0.000000 +700,-3.0,10.000033,0.000000,0.000000 +701,-3.0,10.000033,0.000000,0.000000 +702,-3.0,10.000033,0.000000,0.000000 +703,-3.0,10.000033,0.000000,0.000000 +704,-3.0,10.000033,0.000000,0.000000 +705,-3.0,10.000033,0.000000,0.000000 +706,-3.0,10.000033,0.000000,0.000000 +707,-3.0,10.000033,0.000000,0.000000 +708,-3.0,10.000033,0.000000,0.000000 +709,-3.0,10.000033,0.000000,0.000000 +710,-3.0,10.000033,0.000000,0.000000 +711,-3.0,10.000033,0.000000,0.000000 +712,-3.0,10.000033,0.000000,0.000000 +713,-3.0,10.000033,0.000000,0.000000 +714,-3.0,10.000033,0.000000,0.000000 +715,-3.0,10.000033,0.000000,0.000000 +716,-3.0,10.000033,0.000000,0.000000 +717,-3.0,10.000033,0.000000,0.000000 +718,-3.0,10.000033,0.000000,0.000000 +719,-3.0,10.000033,0.000000,0.000000 +720,-3.0,10.000033,0.000000,0.000000 +721,-3.0,10.000033,0.000000,0.000000 +722,-3.0,10.000033,0.000000,0.000000 +723,-3.0,10.000033,0.000000,0.000000 +724,-3.0,10.000033,0.000000,0.000000 +725,-3.0,10.000033,0.000000,0.000000 +726,-3.0,10.000033,0.000000,0.000000 +727,-3.0,10.000033,0.000000,0.000000 +728,-3.0,10.000033,0.000000,0.000000 +729,-3.0,10.000033,0.000000,0.000000 +730,-3.0,10.000033,0.000000,0.000000 +731,-3.0,10.000033,0.000000,0.000000 +732,-3.0,10.000033,0.000000,0.000000 +733,-3.0,10.000033,0.000000,0.000000 +734,-3.0,10.000033,0.000000,0.000000 +735,-3.0,10.000033,0.000000,0.000000 +736,-3.0,10.000033,0.000000,0.000000 +737,-3.0,10.000033,0.000000,0.000000 +738,-3.0,10.000033,0.000000,0.000000 +739,-3.0,10.000033,0.000000,0.000000 +740,-3.0,10.000033,0.000000,0.000000 +741,-3.0,10.000033,0.000000,0.000000 +742,-3.0,10.000033,0.000000,0.000000 +743,-3.0,10.000033,0.000000,0.000000 +744,-3.0,10.000033,0.000000,0.000000 +745,-3.0,10.000033,0.000000,0.000000 +746,-3.0,10.000033,0.000000,0.000000 +747,-3.0,10.000033,0.000000,0.000000 +748,-3.0,10.000033,0.000000,0.000000 +749,-3.0,10.000033,0.000000,0.000000 +750,-3.0,10.000033,0.000000,0.000000 +751,-3.0,10.000033,0.000000,0.000000 +752,-3.0,10.000033,0.000000,0.000000 +753,-3.0,10.000033,0.000000,0.000000 +754,-3.0,10.000033,0.000000,0.000000 +755,-3.0,10.000033,0.000000,0.000000 +756,-3.0,10.000033,0.000000,0.000000 +757,-3.0,10.000033,0.000000,0.000000 +758,-3.0,10.000033,0.000000,0.000000 +759,-3.0,10.000033,0.000000,0.000000 +760,-3.0,10.000033,0.000000,0.000000 +761,-3.0,10.000033,0.000000,0.000000 +762,-3.0,10.000033,0.000000,0.000000 +763,-3.0,10.000033,0.000000,0.000000 +764,-3.0,10.000033,0.000000,0.000000 +765,-3.0,10.000033,0.000000,0.000000 +766,-3.0,10.000033,0.000000,0.000000 +767,-3.0,10.000033,0.000000,0.000000 +768,-3.0,10.000033,0.000000,0.000000 +769,-3.0,10.000033,0.000000,0.000000 +770,-3.0,10.000033,0.000000,0.000000 +771,-3.0,10.000033,0.000000,0.000000 +772,-3.0,10.000033,0.000000,0.000000 +773,-3.0,10.000033,0.000000,0.000000 +774,-3.0,10.000033,0.000000,0.000000 +775,-3.0,10.000033,0.000000,0.000000 +776,-3.0,10.000033,0.000000,0.000000 +777,-3.0,10.000033,0.000000,0.000000 +778,-3.0,10.000033,0.000000,0.000000 +779,-3.0,10.000033,0.000000,0.000000 +780,-3.0,10.000033,0.000000,0.000000 +781,-3.0,10.000033,0.000000,0.000000 +782,-3.0,10.000033,0.000000,0.000000 +783,-3.0,10.000033,0.000000,0.000000 +784,-3.0,10.000033,0.000000,0.000000 +785,-3.0,10.000033,0.000000,0.000000 +786,-3.0,10.000033,0.000000,0.000000 +787,-3.0,10.000033,0.000000,0.000000 +788,-3.0,10.000033,0.000000,0.000000 +789,-3.0,10.000033,0.000000,0.000000 +790,-3.0,10.000033,0.000000,0.000000 +791,-3.0,10.000033,0.000000,0.000000 +792,-3.0,10.000033,0.000000,0.000000 +793,-3.0,10.000033,0.000000,0.000000 +794,-3.0,10.000033,0.000000,0.000000 +795,-3.0,10.000033,0.000000,0.000000 +796,-3.0,10.000033,0.000000,0.000000 +797,-3.0,10.000033,0.000000,0.000000 +798,-3.0,10.000033,0.000000,0.000000 +799,-3.0,10.000033,0.000000,0.000000 +800,-3.0,10.000033,0.000000,0.000000 +801,-3.0,10.266693,0.000000,0.000000 +802,-3.0,10.533298,0.000000,0.000000 +803,-3.0,10.799964,0.000000,0.000000 +804,-3.0,11.066683,0.000000,0.000000 +805,-3.0,11.333351,0.000000,0.000000 +806,-3.0,11.599969,0.000000,0.000000 +807,-3.0,11.866644,0.000000,0.000000 +808,-3.0,12.133388,0.000000,0.000000 +809,-3.0,12.399959,0.000000,0.000000 +810,-3.0,12.666719,0.000000,0.000000 +811,-3.0,12.933321,0.000000,0.000000 +812,-3.0,13.199985,0.000000,0.000000 +813,-3.0,13.466728,0.000000,0.000000 +814,-3.0,13.733303,0.000000,0.000000 +815,-3.0,13.999958,0.000000,0.000000 +816,-3.0,14.266695,0.000000,0.000000 +817,-3.0,14.533386,0.000000,0.000000 +818,-3.0,14.800045,0.000000,0.000000 +819,-3.0,15.066674,0.000000,0.000000 +820,-3.0,15.333377,0.000000,0.000000 +821,-3.0,15.600053,0.000000,0.000000 +822,-3.0,15.866688,0.000000,0.000000 +823,-3.0,16.133298,0.000000,0.000000 +824,-3.0,16.400004,0.000000,0.000000 +825,-3.0,16.666689,0.000000,0.000000 +826,-3.0,16.933338,0.000000,0.000000 +827,-3.0,17.199953,0.000000,0.000000 +828,-3.0,17.466686,0.000000,0.000000 +829,-3.0,17.733387,0.000000,0.000000 +830,-3.0,17.999939,0.000000,0.000000 +831,-3.0,18.266614,0.000000,0.000000 +832,-3.0,18.533381,0.000000,0.000000 +833,-3.0,18.800002,0.000000,0.000000 +834,-3.0,19.066614,0.000000,0.000000 +835,-3.0,19.333340,0.000000,0.000000 +836,-3.0,19.599942,0.000000,0.000000 +837,-3.0,19.866642,0.000000,0.000000 +838,-3.0,20.133340,0.000000,0.000000 +839,-3.0,20.400039,0.000000,0.000000 +840,-3.0,20.666719,0.000000,0.000000 +841,-3.0,20.933283,0.000000,0.000000 +842,-3.0,21.199951,0.000000,0.000000 +843,-3.0,21.466645,0.000000,0.000000 +844,-3.0,21.733326,0.000000,0.000000 +845,-3.0,21.999997,0.000000,0.000000 +846,-3.0,22.266677,0.000000,0.000000 +847,-3.0,22.533370,0.000000,0.000000 +848,-3.0,22.799955,0.000000,0.000000 +849,-3.0,23.066676,0.000000,0.000000 +850,-3.0,23.333393,0.000000,0.000000 +851,-3.0,23.599985,0.000000,0.000000 +852,-3.0,23.866618,0.000000,0.000000 +853,-3.0,24.133372,0.000000,0.000000 +854,-3.0,24.400027,0.000000,0.000000 +855,-3.0,24.666684,0.000000,0.000000 +856,-3.0,24.933389,0.000000,0.000000 +857,-3.0,25.199976,0.000000,0.000000 +858,-3.0,25.466691,0.000000,0.000000 +859,-3.0,25.733337,0.000000,0.000000 +860,-3.0,25.999992,0.000000,0.000000 +861,-3.0,26.266680,0.000000,0.000000 +862,-3.0,26.533402,0.000000,0.000000 +863,-3.0,26.800015,0.000000,0.000000 +864,-3.0,27.066665,0.000000,0.000000 +865,-3.0,27.333354,0.000000,0.000000 +866,-3.0,27.599937,0.000000,0.000000 +867,-3.0,27.866709,0.000000,0.000000 +868,-3.0,28.133378,0.000000,0.000000 +869,-3.0,28.399943,0.000000,0.000000 +870,-3.0,28.666705,0.000000,0.000000 +871,-3.0,28.933365,0.000000,0.000000 +872,-3.0,29.199951,0.000000,0.000000 +873,-3.0,29.466713,0.000000,0.000000 +874,-3.0,29.733404,0.000000,0.000000 +875,-3.0,29.999999,0.000000,0.000000 +876,-3.0,30.266650,0.000000,0.000000 +877,-3.0,30.533358,0.000000,0.000000 +878,-3.0,30.799975,0.000000,0.000000 +879,-3.0,31.066678,0.000000,0.000000 +880,-3.0,31.333291,0.000000,0.000000 +881,-3.0,31.599969,0.000000,0.000000 +882,-3.0,31.866712,0.000000,0.000000 +883,-3.0,32.133369,0.000000,0.000000 +884,-3.0,32.399995,0.000000,0.000000 +885,-3.0,32.666664,0.000000,0.000000 +886,-3.0,32.933278,0.000000,0.000000 +887,-3.0,33.199965,0.000000,0.000000 +888,-3.0,33.466700,0.000000,0.000000 +889,-3.0,33.733283,0.000000,0.000000 +890,-3.0,34.000045,0.000000,0.000000 +891,-3.0,34.266630,0.000000,0.000000 +892,-3.0,34.533296,0.000000,0.000000 +893,-3.0,34.800018,0.000000,0.000000 +894,-3.0,35.066723,0.000000,0.000000 +895,-3.0,35.333357,0.000000,0.000000 +896,-3.0,35.599949,0.000000,0.000000 +897,-3.0,35.866631,0.000000,0.000000 +898,-3.0,36.133274,0.000000,0.000000 +899,-3.0,36.400009,0.000000,0.000000 +900,-3.0,36.666709,0.000000,0.000000 +901,-3.0,36.933345,0.000000,0.000000 +902,-3.0,37.199948,0.000000,0.000000 +903,-3.0,37.466678,0.000000,0.000000 +904,-3.0,37.733350,0.000000,0.000000 +905,-3.0,37.999992,0.000000,0.000000 +906,-3.0,38.266709,0.000000,0.000000 +907,-3.0,38.533297,0.000000,0.000000 +908,-3.0,38.799993,0.000000,0.000000 +909,-3.0,39.066635,0.000000,0.000000 +910,-3.0,39.333285,0.000000,0.000000 +911,-3.0,39.600017,0.000000,0.000000 +912,-3.0,39.866731,0.000000,0.000000 +913,-3.0,40.133294,0.000000,0.000000 +914,-3.0,40.399973,0.000000,0.000000 +915,-3.0,40.666637,0.000000,0.000000 +916,-3.0,40.933288,0.000000,0.000000 +917,-3.0,41.200061,0.000000,0.000000 +918,-3.0,41.466659,0.000000,0.000000 +919,-3.0,41.733278,0.000000,0.000000 +920,-3.0,41.999994,0.000000,0.000000 +921,-3.0,42.266733,0.000000,0.000000 +922,-3.0,42.533303,0.000000,0.000000 +923,-3.0,42.800035,0.000000,0.000000 +924,-3.0,43.066599,0.000000,0.000000 +925,-3.0,43.333328,0.000000,0.000000 +926,-3.0,43.600028,0.000000,0.000000 +927,-3.0,43.866730,0.000000,0.000000 +928,-3.0,44.133300,0.000000,0.000000 +929,-3.0,44.400042,0.000000,0.000000 +930,-3.0,44.666624,0.000000,0.000000 +931,-3.0,44.933350,0.000000,0.000000 +932,-3.0,45.199949,0.000000,0.000000 +933,-3.0,45.466696,0.000000,0.000000 +934,-3.0,45.733350,0.000000,0.000000 +935,-3.0,45.999987,0.000000,0.000000 +936,-3.0,46.266639,0.000000,0.000000 +937,-3.0,46.533308,0.000000,0.000000 +938,-3.0,46.800027,0.000000,0.000000 +939,-3.0,47.066734,0.000000,0.000000 +940,-3.0,47.333325,0.000000,0.000000 +941,-3.0,47.599969,0.000000,0.000000 +942,-3.0,47.866607,0.000000,0.000000 +943,-3.0,48.133301,0.000000,0.000000 +944,-3.0,48.399992,0.000000,0.000000 +945,-3.0,48.666742,0.000000,0.000000 +946,-3.0,48.933353,0.000000,0.000000 +947,-3.0,49.200026,0.000000,0.000000 +948,-3.0,49.466732,0.000000,0.000000 +949,-3.0,49.733333,0.000000,0.000000 +950,-3.0,49.999970,0.000000,0.000000 +951,-3.0,50.266644,0.000000,0.000000 +952,-3.0,50.533358,0.000000,0.000000 +953,-3.0,50.799972,0.000000,0.000000 +954,-3.0,51.066659,0.000000,0.000000 +955,-3.0,51.333359,0.000000,0.000000 +956,-3.0,51.599993,0.000000,0.000000 +957,-3.0,51.866674,0.000000,0.000000 +958,-3.0,52.133373,0.000000,0.000000 +959,-3.0,52.400010,0.000000,0.000000 +960,-3.0,52.666729,0.000000,0.000000 +961,-3.0,52.933327,0.000000,0.000000 +962,-3.0,53.199980,0.000000,0.000000 +963,-3.0,53.466720,0.000000,0.000000 +964,-3.0,53.733374,0.000000,0.000000 +965,-3.0,53.999942,0.000000,0.000000 +966,-3.0,54.266716,0.000000,0.000000 +967,-3.0,54.533264,0.000000,0.000000 +968,-3.0,54.800019,0.000000,0.000000 +969,-3.0,55.066727,0.000000,0.000000 +970,-3.0,55.333356,0.000000,0.000000 +971,-3.0,55.600053,0.000000,0.000000 +972,-3.0,55.866675,0.000000,0.000000 +973,-3.0,56.133399,0.000000,0.000000 +974,-3.0,56.400021,0.000000,0.000000 +975,-3.0,56.666601,0.000000,0.000000 +976,-3.0,56.933287,0.000000,0.000000 +977,-3.0,57.200022,0.000000,0.000000 +978,-3.0,57.466719,0.000000,0.000000 +979,-3.0,57.733350,0.000000,0.000000 +980,-3.0,58.000065,0.000000,0.000000 +981,-3.0,58.266716,0.000000,0.000000 +982,-3.0,58.533335,0.000000,0.000000 +983,-3.0,58.800042,0.000000,0.000000 +984,-3.0,59.066690,0.000000,0.000000 +985,-3.0,59.333310,0.000000,0.000000 +986,-3.0,59.599993,0.000000,0.000000 +987,-3.0,59.866679,0.000000,0.000000 +988,-3.0,60.133283,0.000000,0.000000 +989,-3.0,60.400014,0.000000,0.000000 +990,-3.0,60.666694,0.000000,0.000000 +991,-3.0,60.933325,0.000000,0.000000 +992,-3.0,61.199937,0.000000,0.000000 +993,-3.0,61.466653,0.000000,0.000000 +994,-3.0,61.733352,0.000000,0.000000 +995,-3.0,61.999980,0.000000,0.000000 +996,-3.0,62.266595,0.000000,0.000000 +997,-3.0,62.533347,0.000000,0.000000 +998,-3.0,62.800061,0.000000,0.000000 +999,-3.0,63.066738,0.000000,0.000000 +1000,-3.0,63.333406,0.000000,0.000000 +1001,-3.0,63.600039,0.000000,0.000000 +1002,-3.0,63.866640,0.000000,0.000000 +1003,-3.0,64.133388,0.000000,0.000000 +1004,-3.0,64.399954,0.000000,0.000000 +1005,-3.0,64.666670,0.000000,0.000000 +1006,-3.0,64.933359,0.000000,0.000000 +1007,-3.0,65.200023,0.000000,0.000000 +1008,-3.0,65.466688,0.000000,0.000000 +1009,-3.0,65.733358,0.000000,0.000000 +1010,-3.0,66.000006,0.000000,0.000000 +1011,-3.0,66.266634,0.000000,0.000000 +1012,-3.0,66.533270,0.000000,0.000000 +1013,-3.0,66.800043,0.000000,0.000000 +1014,-3.0,67.066673,0.000000,0.000000 +1015,-3.0,67.333289,0.000000,0.000000 +1016,-3.0,67.600048,0.000000,0.000000 +1017,-3.0,67.866691,0.000000,0.000000 +1018,-3.0,68.133301,0.000000,0.000000 +1019,-3.0,68.399952,0.000000,0.000000 +1020,-3.0,68.666728,0.000000,0.000000 +1021,-3.0,68.933392,0.000000,0.000000 +1022,-3.0,69.200031,0.000000,0.000000 +1023,-3.0,69.466715,0.000000,0.000000 +1024,-3.0,69.733400,0.000000,0.000000 +1025,-3.0,69.999931,0.000000,0.000000 +1026,-3.0,70.266644,0.000000,0.000000 +1027,-3.0,70.533385,0.000000,0.000000 +1028,-3.0,70.799978,0.000000,0.000000 +1029,-3.0,71.066600,0.000000,0.000000 +1030,-3.0,71.333389,0.000000,0.000000 +1031,-3.0,71.600055,0.000000,0.000000 +1032,-3.0,71.866734,0.000000,0.000000 +1033,-3.0,72.133314,0.000000,0.000000 +1034,-3.0,72.400046,0.000000,0.000000 +1035,-3.0,72.666680,0.000000,0.000000 +1036,-3.0,72.933334,0.000000,0.000000 +1037,-3.0,73.200010,0.000000,0.000000 +1038,-3.0,73.466749,0.000000,0.000000 +1039,-3.0,73.733355,0.000000,0.000000 +1040,-3.0,74.000006,0.000000,0.000000 +1041,-3.0,74.266685,0.000000,0.000000 +1042,-3.0,74.533413,0.000000,0.000000 +1043,-3.0,74.800032,0.000000,0.000000 +1044,-3.0,75.066685,0.000000,0.000000 +1045,-3.0,75.333390,0.000000,0.000000 +1046,-3.0,75.599991,0.000000,0.000000 +1047,-3.0,75.866648,0.000000,0.000000 +1048,-3.0,76.133343,0.000000,0.000000 +1049,-3.0,76.399939,0.000000,0.000000 +1050,-3.0,76.666594,0.000000,0.000000 +1051,-3.0,76.933294,0.000000,0.000000 +1052,-3.0,77.200057,0.000000,0.000000 +1053,-3.0,77.466740,0.000000,0.000000 +1054,-3.0,77.733298,0.000000,0.000000 +1055,-3.0,77.999938,0.000000,0.000000 +1056,-3.0,78.266632,0.000000,0.000000 +1057,-3.0,78.533409,0.000000,0.000000 +1058,-3.0,78.800084,0.000000,0.000000 +1059,-3.0,79.066657,0.000000,0.000000 +1060,-3.0,79.333318,0.000000,0.000000 +1061,-3.0,79.600054,0.000000,0.000000 +1062,-3.0,79.866694,0.000000,0.000000 +1063,-3.0,80.133412,0.000000,0.000000 +1064,-3.0,80.400050,0.000000,0.000000 +1065,-3.0,80.666608,0.000000,0.000000 +1066,-3.0,80.933409,0.000000,0.000000 +1067,-3.0,81.199962,0.000000,0.000000 +1068,-3.0,81.466611,0.000000,0.000000 +1069,-3.0,81.733336,0.000000,0.000000 +1070,-3.0,82.000000,0.000000,0.000000 +1071,-3.0,82.266743,0.000000,0.000000 +1072,-3.0,82.533255,0.000000,0.000000 +1073,-3.0,82.800021,0.000000,0.000000 +1074,-3.0,83.066720,0.000000,0.000000 +1075,-3.0,83.333354,0.000000,0.000000 +1076,-3.0,83.599924,0.000000,0.000000 +1077,-3.0,83.866592,0.000000,0.000000 +1078,-3.0,84.133361,0.000000,0.000000 +1079,-3.0,84.400069,0.000000,0.000000 +1080,-3.0,84.666712,0.000000,0.000000 +1081,-3.0,84.933305,0.000000,0.000000 +1082,-3.0,85.200004,0.000000,0.000000 +1083,-3.0,85.466649,0.000000,0.000000 +1084,-3.0,85.733403,0.000000,0.000000 +1085,-3.0,85.999943,0.000000,0.000000 +1086,-3.0,86.266596,0.000000,0.000000 +1087,-3.0,86.533362,0.000000,0.000000 +1088,-3.0,86.800081,0.000000,0.000000 +1089,-3.0,87.066592,0.000000,0.000000 +1090,-3.0,87.333384,0.000000,0.000000 +1091,-3.0,87.599971,0.000000,0.000000 +1092,-3.0,87.866682,0.000000,0.000000 +1093,-3.0,88.133351,0.000000,0.000000 +1094,-3.0,88.399984,0.000000,0.000000 +1095,-3.0,88.666741,0.000000,0.000000 +1096,-3.0,88.933302,0.000000,0.000000 +1097,-3.0,89.199991,0.000000,0.000000 +1098,-3.0,89.466649,0.000000,0.000000 +1099,-3.0,89.733276,0.000000,0.000000 +1100,-3.0,90.000035,0.000000,0.000000 +1101,-3.0,90.000035,0.000000,0.000000 +1102,-3.0,90.000035,0.000000,0.000000 +1103,-3.0,90.000035,0.000000,0.000000 +1104,-3.0,90.000035,0.000000,0.000000 +1105,-3.0,90.000035,0.000000,0.000000 +1106,-3.0,90.000035,0.000000,0.000000 +1107,-3.0,90.000035,0.000000,0.000000 +1108,-3.0,90.000035,0.000000,0.000000 +1109,-3.0,90.000035,0.000000,0.000000 +1110,-3.0,90.000035,0.000000,0.000000 +1111,-3.0,90.000035,0.000000,0.000000 +1112,-3.0,90.000035,0.000000,0.000000 +1113,-3.0,90.000035,0.000000,0.000000 +1114,-3.0,90.000035,0.000000,0.000000 +1115,-3.0,90.000035,0.000000,0.000000 +1116,-3.0,90.000035,0.000000,0.000000 +1117,-3.0,90.000035,0.000000,0.000000 +1118,-3.0,90.000035,0.000000,0.000000 +1119,-3.0,90.000035,0.000000,0.000000 +1120,-3.0,90.000035,0.000000,0.000000 +1121,-3.0,90.000035,0.000000,0.000000 +1122,-3.0,90.000035,0.000000,0.000000 +1123,-3.0,90.000035,0.000000,0.000000 +1124,-3.0,90.000035,0.000000,0.000000 +1125,-3.0,90.000035,0.000000,0.000000 +1126,-3.0,90.000035,0.000000,0.000000 +1127,-3.0,90.000035,0.000000,0.000000 +1128,-3.0,90.000035,0.000000,0.000000 +1129,-3.0,90.000035,0.000000,0.000000 +1130,-3.0,90.000035,0.000000,0.000000 +1131,-3.0,90.000035,0.000000,0.000000 +1132,-3.0,90.000035,0.000000,0.000000 +1133,-3.0,90.000035,0.000000,0.000000 +1134,-3.0,90.000035,0.000000,0.000000 +1135,-3.0,90.000035,0.000000,0.000000 +1136,-3.0,90.000035,0.000000,0.000000 +1137,-3.0,90.000035,0.000000,0.000000 +1138,-3.0,90.000035,0.000000,0.000000 +1139,-3.0,90.000035,0.000000,0.000000 +1140,-3.0,90.000035,0.000000,0.000000 +1141,-3.0,90.000035,0.000000,0.000000 +1142,-3.0,90.000035,0.000000,0.000000 +1143,-3.0,90.000035,0.000000,0.000000 +1144,-3.0,90.000035,0.000000,0.000000 +1145,-3.0,90.000035,0.000000,0.000000 +1146,-3.0,90.000035,0.000000,0.000000 +1147,-3.0,90.000035,0.000000,0.000000 +1148,-3.0,90.000035,0.000000,0.000000 +1149,-3.0,90.000035,0.000000,0.000000 +1150,-3.0,90.000035,0.000000,0.000000 +1151,-3.0,90.000035,0.000000,0.000000 +1152,-3.0,90.000035,0.000000,0.000000 +1153,-3.0,90.000035,0.000000,0.000000 +1154,-3.0,90.000035,0.000000,0.000000 +1155,-3.0,90.000035,0.000000,0.000000 +1156,-3.0,90.000035,0.000000,0.000000 +1157,-3.0,90.000035,0.000000,0.000000 +1158,-3.0,90.000035,0.000000,0.000000 +1159,-3.0,90.000035,0.000000,0.000000 +1160,-3.0,90.000035,0.000000,0.000000 +1161,-3.0,90.000035,0.000000,0.000000 +1162,-3.0,90.000035,0.000000,0.000000 +1163,-3.0,90.000035,0.000000,0.000000 +1164,-3.0,90.000035,0.000000,0.000000 +1165,-3.0,90.000035,0.000000,0.000000 +1166,-3.0,90.000035,0.000000,0.000000 +1167,-3.0,90.000035,0.000000,0.000000 +1168,-3.0,90.000035,0.000000,0.000000 +1169,-3.0,90.000035,0.000000,0.000000 +1170,-3.0,90.000035,0.000000,0.000000 +1171,-3.0,90.000035,0.000000,0.000000 +1172,-3.0,90.000035,0.000000,0.000000 +1173,-3.0,90.000035,0.000000,0.000000 +1174,-3.0,90.000035,0.000000,0.000000 +1175,-3.0,90.000035,0.000000,0.000000 +1176,-3.0,90.000035,0.000000,0.000000 +1177,-3.0,90.000035,0.000000,0.000000 +1178,-3.0,90.000035,0.000000,0.000000 +1179,-3.0,90.000035,0.000000,0.000000 +1180,-3.0,90.000035,0.000000,0.000000 +1181,-3.0,90.000035,0.000000,0.000000 +1182,-3.0,90.000035,0.000000,0.000000 +1183,-3.0,90.000035,0.000000,0.000000 +1184,-3.0,90.000035,0.000000,0.000000 +1185,-3.0,90.000035,0.000000,0.000000 +1186,-3.0,90.000035,0.000000,0.000000 +1187,-3.0,90.000035,0.000000,0.000000 +1188,-3.0,90.000035,0.000000,0.000000 +1189,-3.0,90.000035,0.000000,0.000000 +1190,-3.0,90.000035,0.000000,0.000000 +1191,-3.0,90.000035,0.000000,0.000000 +1192,-3.0,90.000035,0.000000,0.000000 +1193,-3.0,90.000035,0.000000,0.000000 +1194,-3.0,90.000035,0.000000,0.000000 +1195,-3.0,90.000035,0.000000,0.000000 +1196,-3.0,90.000035,0.000000,0.000000 +1197,-3.0,90.000035,0.000000,0.000000 +1198,-3.0,90.000035,0.000000,0.000000 +1199,-3.0,90.000035,0.000000,0.000000 +1200,-3.0,90.000035,0.000000,0.000000 +1201,-3.0,90.000035,0.000000,0.000000 +1202,-3.0,90.000035,0.000000,0.000000 +1203,-3.0,90.000035,0.000000,0.000000 +1204,-3.0,90.000035,0.000000,0.000000 +1205,-3.0,90.000035,0.000000,0.000000 +1206,-3.0,90.000035,0.000000,0.000000 +1207,-3.0,90.000035,0.000000,0.000000 +1208,-3.0,90.000035,0.000000,0.000000 +1209,-3.0,90.000035,0.000000,0.000000 +1210,-3.0,90.000035,0.000000,0.000000 +1211,-3.0,90.000035,0.000000,0.000000 +1212,-3.0,90.000035,0.000000,0.000000 +1213,-3.0,90.000035,0.000000,0.000000 +1214,-3.0,90.000035,0.000000,0.000000 +1215,-3.0,90.000035,0.000000,0.000000 +1216,-3.0,90.000035,0.000000,0.000000 +1217,-3.0,90.000035,0.000000,0.000000 +1218,-3.0,90.000035,0.000000,0.000000 +1219,-3.0,90.000035,0.000000,0.000000 +1220,-3.0,90.000035,0.000000,0.000000 +1221,-3.0,90.000035,0.000000,0.000000 +1222,-3.0,90.000035,0.000000,0.000000 +1223,-3.0,90.000035,0.000000,0.000000 +1224,-3.0,90.000035,0.000000,0.000000 +1225,-3.0,90.000035,0.000000,0.000000 +1226,-3.0,90.000035,0.000000,0.000000 +1227,-3.0,90.000035,0.000000,0.000000 +1228,-3.0,90.000035,0.000000,0.000000 +1229,-3.0,90.000035,0.000000,0.000000 +1230,-3.0,90.000035,0.000000,0.000000 +1231,-3.0,90.000035,0.000000,0.000000 +1232,-3.0,90.000035,0.000000,0.000000 +1233,-3.0,90.000035,0.000000,0.000000 +1234,-3.0,90.000035,0.000000,0.000000 +1235,-3.0,90.000035,0.000000,0.000000 +1236,-3.0,90.000035,0.000000,0.000000 +1237,-3.0,90.000035,0.000000,0.000000 +1238,-3.0,90.000035,0.000000,0.000000 +1239,-3.0,90.000035,0.000000,0.000000 +1240,-3.0,90.000035,0.000000,0.000000 +1241,-3.0,90.000035,0.000000,0.000000 +1242,-3.0,90.000035,0.000000,0.000000 +1243,-3.0,90.000035,0.000000,0.000000 +1244,-3.0,90.000035,0.000000,0.000000 +1245,-3.0,90.000035,0.000000,0.000000 +1246,-3.0,90.000035,0.000000,0.000000 +1247,-3.0,90.000035,0.000000,0.000000 +1248,-3.0,90.000035,0.000000,0.000000 +1249,-3.0,90.000035,0.000000,0.000000 +1250,-3.0,90.000035,0.000000,0.000000 +1251,-3.0,90.000035,0.000000,0.000000 +1252,-3.0,90.000035,0.000000,0.000000 +1253,-3.0,90.000035,0.000000,0.000000 +1254,-3.0,90.000035,0.000000,0.000000 +1255,-3.0,90.000035,0.000000,0.000000 +1256,-3.0,90.000035,0.000000,0.000000 +1257,-3.0,90.000035,0.000000,0.000000 +1258,-3.0,90.000035,0.000000,0.000000 +1259,-3.0,90.000035,0.000000,0.000000 +1260,-3.0,90.000035,0.000000,0.000000 +1261,-3.0,90.000035,0.000000,0.000000 +1262,-3.0,90.000035,0.000000,0.000000 +1263,-3.0,90.000035,0.000000,0.000000 +1264,-3.0,90.000035,0.000000,0.000000 +1265,-3.0,90.000035,0.000000,0.000000 +1266,-3.0,90.000035,0.000000,0.000000 +1267,-3.0,90.000035,0.000000,0.000000 +1268,-3.0,90.000035,0.000000,0.000000 +1269,-3.0,90.000035,0.000000,0.000000 +1270,-3.0,90.000035,0.000000,0.000000 +1271,-3.0,90.000035,0.000000,0.000000 +1272,-3.0,90.000035,0.000000,0.000000 +1273,-3.0,90.000035,0.000000,0.000000 +1274,-3.0,90.000035,0.000000,0.000000 +1275,-3.0,90.000035,0.000000,0.000000 +1276,-3.0,90.000035,0.000000,0.000000 +1277,-3.0,90.000035,0.000000,0.000000 +1278,-3.0,90.000035,0.000000,0.000000 +1279,-3.0,90.000035,0.000000,0.000000 +1280,-3.0,90.000035,0.000000,0.000000 +1281,-3.0,90.000035,0.000000,0.000000 +1282,-3.0,90.000035,0.000000,0.000000 +1283,-3.0,90.000035,0.000000,0.000000 +1284,-3.0,90.000035,0.000000,0.000000 +1285,-3.0,90.000035,0.000000,0.000000 +1286,-3.0,90.000035,0.000000,0.000000 +1287,-3.0,90.000035,0.000000,0.000000 +1288,-3.0,90.000035,0.000000,0.000000 +1289,-3.0,90.000035,0.000000,0.000000 +1290,-3.0,90.000035,0.000000,0.000000 +1291,-3.0,90.000035,0.000000,0.000000 +1292,-3.0,90.000035,0.000000,0.000000 +1293,-3.0,90.000035,0.000000,0.000000 +1294,-3.0,90.000035,0.000000,0.000000 +1295,-3.0,90.000035,0.000000,0.000000 +1296,-3.0,90.000035,0.000000,0.000000 +1297,-3.0,90.000035,0.000000,0.000000 +1298,-3.0,90.000035,0.000000,0.000000 +1299,-3.0,90.000035,0.000000,0.000000 +1300,-3.0,90.000035,0.000000,0.000000 +1301,-3.0,90.000035,0.000000,0.000000 +1302,-3.0,90.000035,0.000000,0.000000 +1303,-3.0,90.000035,0.000000,0.000000 +1304,-3.0,90.000035,0.000000,0.000000 +1305,-3.0,90.000035,0.000000,0.000000 +1306,-3.0,90.000035,0.000000,0.000000 +1307,-3.0,90.000035,0.000000,0.000000 +1308,-3.0,90.000035,0.000000,0.000000 +1309,-3.0,90.000035,0.000000,0.000000 +1310,-3.0,90.000035,0.000000,0.000000 +1311,-3.0,90.000035,0.000000,0.000000 +1312,-3.0,90.000035,0.000000,0.000000 +1313,-3.0,90.000035,0.000000,0.000000 +1314,-3.0,90.000035,0.000000,0.000000 +1315,-3.0,90.000035,0.000000,0.000000 +1316,-3.0,90.000035,0.000000,0.000000 +1317,-3.0,90.000035,0.000000,0.000000 +1318,-3.0,90.000035,0.000000,0.000000 +1319,-3.0,90.000035,0.000000,0.000000 +1320,-3.0,90.000035,0.000000,0.000000 +1321,-3.0,90.000035,0.000000,0.000000 +1322,-3.0,90.000035,0.000000,0.000000 +1323,-3.0,90.000035,0.000000,0.000000 +1324,-3.0,90.000035,0.000000,0.000000 +1325,-3.0,90.000035,0.000000,0.000000 +1326,-3.0,90.000035,0.000000,0.000000 +1327,-3.0,90.000035,0.000000,0.000000 +1328,-3.0,90.000035,0.000000,0.000000 +1329,-3.0,90.000035,0.000000,0.000000 +1330,-3.0,90.000035,0.000000,0.000000 +1331,-3.0,90.000035,0.000000,0.000000 +1332,-3.0,90.000035,0.000000,0.000000 +1333,-3.0,90.000035,0.000000,0.000000 +1334,-3.0,90.000035,0.000000,0.000000 +1335,-3.0,90.000035,0.000000,0.000000 +1336,-3.0,90.000035,0.000000,0.000000 +1337,-3.0,90.000035,0.000000,0.000000 +1338,-3.0,90.000035,0.000000,0.000000 +1339,-3.0,90.000035,0.000000,0.000000 +1340,-3.0,90.000035,0.000000,0.000000 +1341,-3.0,90.000035,0.000000,0.000000 +1342,-3.0,90.000035,0.000000,0.000000 +1343,-3.0,90.000035,0.000000,0.000000 +1344,-3.0,90.000035,0.000000,0.000000 +1345,-3.0,90.000035,0.000000,0.000000 +1346,-3.0,90.000035,0.000000,0.000000 +1347,-3.0,90.000035,0.000000,0.000000 +1348,-3.0,90.000035,0.000000,0.000000 +1349,-3.0,90.000035,0.000000,0.000000 +1350,-3.0,90.000035,0.000000,0.000000 +1351,-3.0,90.000035,0.000000,0.000000 +1352,-3.0,90.000035,0.000000,0.000000 +1353,-3.0,90.000035,0.000000,0.000000 +1354,-3.0,90.000035,0.000000,0.000000 +1355,-3.0,90.000035,0.000000,0.000000 +1356,-3.0,90.000035,0.000000,0.000000 +1357,-3.0,90.000035,0.000000,0.000000 +1358,-3.0,90.000035,0.000000,0.000000 +1359,-3.0,90.000035,0.000000,0.000000 +1360,-3.0,90.000035,0.000000,0.000000 +1361,-3.0,90.000035,0.000000,0.000000 +1362,-3.0,90.000035,0.000000,0.000000 +1363,-3.0,90.000035,0.000000,0.000000 +1364,-3.0,90.000035,0.000000,0.000000 +1365,-3.0,90.000035,0.000000,0.000000 +1366,-3.0,90.000035,0.000000,0.000000 +1367,-3.0,90.000035,0.000000,0.000000 +1368,-3.0,90.000035,0.000000,0.000000 +1369,-3.0,90.000035,0.000000,0.000000 +1370,-3.0,90.000035,0.000000,0.000000 +1371,-3.0,90.000035,0.000000,0.000000 +1372,-3.0,90.000035,0.000000,0.000000 +1373,-3.0,90.000035,0.000000,0.000000 +1374,-3.0,90.000035,0.000000,0.000000 +1375,-3.0,90.000035,0.000000,0.000000 +1376,-3.0,90.000035,0.000000,0.000000 +1377,-3.0,90.000035,0.000000,0.000000 +1378,-3.0,90.000035,0.000000,0.000000 +1379,-3.0,90.000035,0.000000,0.000000 +1380,-3.0,90.000035,0.000000,0.000000 +1381,-3.0,90.000035,0.000000,0.000000 +1382,-3.0,90.000035,0.000000,0.000000 +1383,-3.0,90.000035,0.000000,0.000000 +1384,-3.0,90.000035,0.000000,0.000000 +1385,-3.0,90.000035,0.000000,0.000000 +1386,-3.0,90.000035,0.000000,0.000000 +1387,-3.0,90.000035,0.000000,0.000000 +1388,-3.0,90.000035,0.000000,0.000000 +1389,-3.0,90.000035,0.000000,0.000000 +1390,-3.0,90.000035,0.000000,0.000000 +1391,-3.0,90.000035,0.000000,0.000000 +1392,-3.0,90.000035,0.000000,0.000000 +1393,-3.0,90.000035,0.000000,0.000000 +1394,-3.0,90.000035,0.000000,0.000000 +1395,-3.0,90.000035,0.000000,0.000000 +1396,-3.0,90.000035,0.000000,0.000000 +1397,-3.0,90.000035,0.000000,0.000000 +1398,-3.0,90.000035,0.000000,0.000000 +1399,-3.0,90.000035,0.000000,0.000000 +1400,-3.0,90.000035,0.000000,0.000000 +1401,-3.0,90.000035,0.000000,0.000000 +1402,-3.0,90.000035,0.000000,0.000000 +1403,-3.0,90.000035,0.000000,0.000000 +1404,-3.0,90.000035,0.000000,0.000000 +1405,-3.0,90.000035,0.000000,0.000000 +1406,-3.0,90.000035,0.000000,0.000000 +1407,-3.0,90.000035,0.000000,0.000000 +1408,-3.0,90.000035,0.000000,0.000000 +1409,-3.0,90.000035,0.000000,0.000000 +1410,-3.0,90.000035,0.000000,0.000000 +1411,-3.0,90.000035,0.000000,0.000000 +1412,-3.0,90.000035,0.000000,0.000000 +1413,-3.0,90.000035,0.000000,0.000000 +1414,-3.0,90.000035,0.000000,0.000000 +1415,-3.0,90.000035,0.000000,0.000000 +1416,-3.0,90.000035,0.000000,0.000000 +1417,-3.0,90.000035,0.000000,0.000000 +1418,-3.0,90.000035,0.000000,0.000000 +1419,-3.0,90.000035,0.000000,0.000000 +1420,-3.0,90.000035,0.000000,0.000000 +1421,-3.0,90.000035,0.000000,0.000000 +1422,-3.0,90.000035,0.000000,0.000000 +1423,-3.0,90.000035,0.000000,0.000000 +1424,-3.0,90.000035,0.000000,0.000000 +1425,-3.0,90.000035,0.000000,0.000000 +1426,-3.0,90.000035,0.000000,0.000000 +1427,-3.0,90.000035,0.000000,0.000000 +1428,-3.0,90.000035,0.000000,0.000000 +1429,-3.0,90.000035,0.000000,0.000000 +1430,-3.0,90.000035,0.000000,0.000000 +1431,-3.0,90.000035,0.000000,0.000000 +1432,-3.0,90.000035,0.000000,0.000000 +1433,-3.0,90.000035,0.000000,0.000000 +1434,-3.0,90.000035,0.000000,0.000000 +1435,-3.0,90.000035,0.000000,0.000000 +1436,-3.0,90.000035,0.000000,0.000000 +1437,-3.0,90.000035,0.000000,0.000000 +1438,-3.0,90.000035,0.000000,0.000000 +1439,-3.0,90.000035,0.000000,0.000000 +1440,-3.0,90.000035,0.000000,0.000000 +1441,-3.0,90.000035,0.000000,0.000000 +1442,-3.0,90.000035,0.000000,0.000000 +1443,-3.0,90.000035,0.000000,0.000000 +1444,-3.0,90.000035,0.000000,0.000000 +1445,-3.0,90.000035,0.000000,0.000000 +1446,-3.0,90.000035,0.000000,0.000000 +1447,-3.0,90.000035,0.000000,0.000000 +1448,-3.0,90.000035,0.000000,0.000000 +1449,-3.0,90.000035,0.000000,0.000000 +1450,-3.0,90.000035,0.000000,0.000000 +1451,-3.0,90.000035,0.000000,0.000000 +1452,-3.0,90.000035,0.000000,0.000000 +1453,-3.0,90.000035,0.000000,0.000000 +1454,-3.0,90.000035,0.000000,0.000000 +1455,-3.0,90.000035,0.000000,0.000000 +1456,-3.0,90.000035,0.000000,0.000000 +1457,-3.0,90.000035,0.000000,0.000000 +1458,-3.0,90.000035,0.000000,0.000000 +1459,-3.0,90.000035,0.000000,0.000000 +1460,-3.0,90.000035,0.000000,0.000000 +1461,-3.0,90.000035,0.000000,0.000000 +1462,-3.0,90.000035,0.000000,0.000000 +1463,-3.0,90.000035,0.000000,0.000000 +1464,-3.0,90.000035,0.000000,0.000000 +1465,-3.0,90.000035,0.000000,0.000000 +1466,-3.0,90.000035,0.000000,0.000000 +1467,-3.0,90.000035,0.000000,0.000000 +1468,-3.0,90.000035,0.000000,0.000000 +1469,-3.0,90.000035,0.000000,0.000000 +1470,-3.0,90.000035,0.000000,0.000000 +1471,-3.0,90.000035,0.000000,0.000000 +1472,-3.0,90.000035,0.000000,0.000000 +1473,-3.0,90.000035,0.000000,0.000000 +1474,-3.0,90.000035,0.000000,0.000000 +1475,-3.0,90.000035,0.000000,0.000000 +1476,-3.0,90.000035,0.000000,0.000000 +1477,-3.0,90.000035,0.000000,0.000000 +1478,-3.0,90.000035,0.000000,0.000000 +1479,-3.0,90.000035,0.000000,0.000000 +1480,-3.0,90.000035,0.000000,0.000000 +1481,-3.0,90.000035,0.000000,0.000000 +1482,-3.0,90.000035,0.000000,0.000000 +1483,-3.0,90.000035,0.000000,0.000000 +1484,-3.0,90.000035,0.000000,0.000000 +1485,-3.0,90.000035,0.000000,0.000000 +1486,-3.0,90.000035,0.000000,0.000000 +1487,-3.0,90.000035,0.000000,0.000000 +1488,-3.0,90.000035,0.000000,0.000000 +1489,-3.0,90.000035,0.000000,0.000000 +1490,-3.0,90.000035,0.000000,0.000000 +1491,-3.0,90.000035,0.000000,0.000000 +1492,-3.0,90.000035,0.000000,0.000000 +1493,-3.0,90.000035,0.000000,0.000000 +1494,-3.0,90.000035,0.000000,0.000000 +1495,-3.0,90.000035,0.000000,0.000000 +1496,-3.0,90.000035,0.000000,0.000000 +1497,-3.0,90.000035,0.000000,0.000000 +1498,-3.0,90.000035,0.000000,0.000000 +1499,-3.0,90.000035,0.000000,0.000000 +1500,-3.0,90.000035,0.000000,0.000000 +1501,-3.0,90.000035,0.000000,0.000000 +1502,-3.0,90.000035,0.000000,0.000000 +1503,-3.0,90.000035,0.000000,0.000000 +1504,-3.0,90.000035,0.000000,0.000000 +1505,-3.0,90.000035,0.000000,0.000000 +1506,-3.0,90.000035,0.000000,0.000000 +1507,-3.0,90.000035,0.000000,0.000000 +1508,-3.0,90.000035,0.000000,0.000000 +1509,-3.0,90.000035,0.000000,0.000000 +1510,-3.0,90.000035,0.000000,0.000000 +1511,-3.0,90.000035,0.000000,0.000000 +1512,-3.0,90.000035,0.000000,0.000000 +1513,-3.0,90.000035,0.000000,0.000000 +1514,-3.0,90.000035,0.000000,0.000000 +1515,-3.0,90.000035,0.000000,0.000000 +1516,-3.0,90.000035,0.000000,0.000000 +1517,-3.0,90.000035,0.000000,0.000000 +1518,-3.0,90.000035,0.000000,0.000000 +1519,-3.0,90.000035,0.000000,0.000000 +1520,-3.0,90.000035,0.000000,0.000000 +1521,-3.0,90.000035,0.000000,0.000000 +1522,-3.0,90.000035,0.000000,0.000000 +1523,-3.0,90.000035,0.000000,0.000000 +1524,-3.0,90.000035,0.000000,0.000000 +1525,-3.0,90.000035,0.000000,0.000000 +1526,-3.0,90.000035,0.000000,0.000000 +1527,-3.0,90.000035,0.000000,0.000000 +1528,-3.0,90.000035,0.000000,0.000000 +1529,-3.0,90.000035,0.000000,0.000000 +1530,-3.0,90.000035,0.000000,0.000000 +1531,-3.0,90.000035,0.000000,0.000000 +1532,-3.0,90.000035,0.000000,0.000000 +1533,-3.0,90.000035,0.000000,0.000000 +1534,-3.0,90.000035,0.000000,0.000000 +1535,-3.0,90.000035,0.000000,0.000000 +1536,-3.0,90.000035,0.000000,0.000000 +1537,-3.0,90.000035,0.000000,0.000000 +1538,-3.0,90.000035,0.000000,0.000000 +1539,-3.0,90.000035,0.000000,0.000000 +1540,-3.0,90.000035,0.000000,0.000000 +1541,-3.0,90.000035,0.000000,0.000000 +1542,-3.0,90.000035,0.000000,0.000000 +1543,-3.0,90.000035,0.000000,0.000000 +1544,-3.0,90.000035,0.000000,0.000000 +1545,-3.0,90.000035,0.000000,0.000000 +1546,-3.0,90.000035,0.000000,0.000000 +1547,-3.0,90.000035,0.000000,0.000000 +1548,-3.0,90.000035,0.000000,0.000000 +1549,-3.0,90.000035,0.000000,0.000000 +1550,-3.0,90.000035,0.000000,0.000000 +1551,-3.0,90.000035,0.000000,0.000000 +1552,-3.0,90.000035,0.000000,0.000000 +1553,-3.0,90.000035,0.000000,0.000000 +1554,-3.0,90.000035,0.000000,0.000000 +1555,-3.0,90.000035,0.000000,0.000000 +1556,-3.0,90.000035,0.000000,0.000000 +1557,-3.0,90.000035,0.000000,0.000000 +1558,-3.0,90.000035,0.000000,0.000000 +1559,-3.0,90.000035,0.000000,0.000000 +1560,-3.0,90.000035,0.000000,0.000000 +1561,-3.0,90.000035,0.000000,0.000000 +1562,-3.0,90.000035,0.000000,0.000000 +1563,-3.0,90.000035,0.000000,0.000000 +1564,-3.0,90.000035,0.000000,0.000000 +1565,-3.0,90.000035,0.000000,0.000000 +1566,-3.0,90.000035,0.000000,0.000000 +1567,-3.0,90.000035,0.000000,0.000000 +1568,-3.0,90.000035,0.000000,0.000000 +1569,-3.0,90.000035,0.000000,0.000000 +1570,-3.0,90.000035,0.000000,0.000000 +1571,-3.0,90.000035,0.000000,0.000000 +1572,-3.0,90.000035,0.000000,0.000000 +1573,-3.0,90.000035,0.000000,0.000000 +1574,-3.0,90.000035,0.000000,0.000000 +1575,-3.0,90.000035,0.000000,0.000000 +1576,-3.0,90.000035,0.000000,0.000000 +1577,-3.0,90.000035,0.000000,0.000000 +1578,-3.0,90.000035,0.000000,0.000000 +1579,-3.0,90.000035,0.000000,0.000000 +1580,-3.0,90.000035,0.000000,0.000000 +1581,-3.0,90.000035,0.000000,0.000000 +1582,-3.0,90.000035,0.000000,0.000000 +1583,-3.0,90.000035,0.000000,0.000000 +1584,-3.0,90.000035,0.000000,0.000000 +1585,-3.0,90.000035,0.000000,0.000000 +1586,-3.0,90.000035,0.000000,0.000000 +1587,-3.0,90.000035,0.000000,0.000000 +1588,-3.0,90.000035,0.000000,0.000000 +1589,-3.0,90.000035,0.000000,0.000000 +1590,-3.0,90.000035,0.000000,0.000000 +1591,-3.0,90.000035,0.000000,0.000000 +1592,-3.0,90.000035,0.000000,0.000000 +1593,-3.0,90.000035,0.000000,0.000000 +1594,-3.0,90.000035,0.000000,0.000000 +1595,-3.0,90.000035,0.000000,0.000000 +1596,-3.0,90.000035,0.000000,0.000000 +1597,-3.0,90.000035,0.000000,0.000000 +1598,-3.0,90.000035,0.000000,0.000000 +1599,-3.0,90.000035,0.000000,0.000000 +1600,-3.0,90.000035,0.000000,0.000000 +1601,-3.0,90.000035,0.000000,0.000000 +1602,-3.0,90.000035,0.000000,0.000000 +1603,-3.0,90.000035,0.000000,0.000000 +1604,-3.0,90.000035,0.000000,0.000000 +1605,-3.0,90.000035,0.000000,0.000000 +1606,-3.0,90.000035,0.000000,0.000000 +1607,-3.0,90.000035,0.000000,0.000000 +1608,-3.0,90.000035,0.000000,0.000000 +1609,-3.0,90.000035,0.000000,0.000000 +1610,-3.0,90.000035,0.000000,0.000000 +1611,-3.0,90.000035,0.000000,0.000000 +1612,-3.0,90.000035,0.000000,0.000000 +1613,-3.0,90.000035,0.000000,0.000000 +1614,-3.0,90.000035,0.000000,0.000000 +1615,-3.0,90.000035,0.000000,0.000000 +1616,-3.0,90.000035,0.000000,0.000000 +1617,-3.0,90.000035,0.000000,0.000000 +1618,-3.0,90.000035,0.000000,0.000000 +1619,-3.0,90.000035,0.000000,0.000000 +1620,-3.0,90.000035,0.000000,0.000000 +1621,-3.0,90.000035,0.000000,0.000000 +1622,-3.0,90.000035,0.000000,0.000000 +1623,-3.0,90.000035,0.000000,0.000000 +1624,-3.0,90.000035,0.000000,0.000000 +1625,-3.0,90.000035,0.000000,0.000000 +1626,-3.0,90.000035,0.000000,0.000000 +1627,-3.0,90.000035,0.000000,0.000000 +1628,-3.0,90.000035,0.000000,0.000000 +1629,-3.0,90.000035,0.000000,0.000000 +1630,-3.0,90.000035,0.000000,0.000000 +1631,-3.0,90.000035,0.000000,0.000000 +1632,-3.0,90.000035,0.000000,0.000000 +1633,-3.0,90.000035,0.000000,0.000000 +1634,-3.0,90.000035,0.000000,0.000000 +1635,-3.0,90.000035,0.000000,0.000000 +1636,-3.0,90.000035,0.000000,0.000000 +1637,-3.0,90.000035,0.000000,0.000000 +1638,-3.0,90.000035,0.000000,0.000000 +1639,-3.0,90.000035,0.000000,0.000000 +1640,-3.0,90.000035,0.000000,0.000000 +1641,-3.0,90.000035,0.000000,0.000000 +1642,-3.0,90.000035,0.000000,0.000000 +1643,-3.0,90.000035,0.000000,0.000000 +1644,-3.0,90.000035,0.000000,0.000000 +1645,-3.0,90.000035,0.000000,0.000000 +1646,-3.0,90.000035,0.000000,0.000000 +1647,-3.0,90.000035,0.000000,0.000000 +1648,-3.0,90.000035,0.000000,0.000000 +1649,-3.0,90.000035,0.000000,0.000000 +1650,-3.0,90.000035,0.000000,0.000000 +1651,-3.0,90.000035,0.000000,0.000000 +1652,-3.0,90.000035,0.000000,0.000000 +1653,-3.0,90.000035,0.000000,0.000000 +1654,-3.0,90.000035,0.000000,0.000000 +1655,-3.0,90.000035,0.000000,0.000000 +1656,-3.0,90.000035,0.000000,0.000000 +1657,-3.0,90.000035,0.000000,0.000000 +1658,-3.0,90.000035,0.000000,0.000000 +1659,-3.0,90.000035,0.000000,0.000000 +1660,-3.0,90.000035,0.000000,0.000000 +1661,-3.0,90.000035,0.000000,0.000000 +1662,-3.0,90.000035,0.000000,0.000000 +1663,-3.0,90.000035,0.000000,0.000000 +1664,-3.0,90.000035,0.000000,0.000000 +1665,-3.0,90.000035,0.000000,0.000000 +1666,-3.0,90.000035,0.000000,0.000000 +1667,-3.0,90.000035,0.000000,0.000000 +1668,-3.0,90.000035,0.000000,0.000000 +1669,-3.0,90.000035,0.000000,0.000000 +1670,-3.0,90.000035,0.000000,0.000000 +1671,-3.0,90.000035,0.000000,0.000000 +1672,-3.0,90.000035,0.000000,0.000000 +1673,-3.0,90.000035,0.000000,0.000000 +1674,-3.0,90.000035,0.000000,0.000000 +1675,-3.0,90.000035,0.000000,0.000000 +1676,-3.0,90.000035,0.000000,0.000000 +1677,-3.0,90.000035,0.000000,0.000000 +1678,-3.0,90.000035,0.000000,0.000000 +1679,-3.0,90.000035,0.000000,0.000000 +1680,-3.0,90.000035,0.000000,0.000000 +1681,-3.0,90.000035,0.000000,0.000000 +1682,-3.0,90.000035,0.000000,0.000000 +1683,-3.0,90.000035,0.000000,0.000000 +1684,-3.0,90.000035,0.000000,0.000000 +1685,-3.0,90.000035,0.000000,0.000000 +1686,-3.0,90.000035,0.000000,0.000000 +1687,-3.0,90.000035,0.000000,0.000000 +1688,-3.0,90.000035,0.000000,0.000000 +1689,-3.0,90.000035,0.000000,0.000000 +1690,-3.0,90.000035,0.000000,0.000000 +1691,-3.0,90.000035,0.000000,0.000000 +1692,-3.0,90.000035,0.000000,0.000000 +1693,-3.0,90.000035,0.000000,0.000000 +1694,-3.0,90.000035,0.000000,0.000000 +1695,-3.0,90.000035,0.000000,0.000000 +1696,-3.0,90.000035,0.000000,0.000000 +1697,-3.0,90.000035,0.000000,0.000000 +1698,-3.0,90.000035,0.000000,0.000000 +1699,-3.0,90.000035,0.000000,0.000000 +1700,-3.0,90.000035,0.000000,0.000000 +1701,-3.0,90.000035,0.000000,0.000000 +1702,-3.0,90.000035,0.000000,0.000000 +1703,-3.0,90.000035,0.000000,0.000000 +1704,-3.0,90.000035,0.000000,0.000000 +1705,-3.0,90.000035,0.000000,0.000000 +1706,-3.0,90.000035,0.000000,0.000000 +1707,-3.0,90.000035,0.000000,0.000000 +1708,-3.0,90.000035,0.000000,0.000000 +1709,-3.0,90.000035,0.000000,0.000000 +1710,-3.0,90.000035,0.000000,0.000000 +1711,-3.0,90.000035,0.000000,0.000000 +1712,-3.0,90.000035,0.000000,0.000000 +1713,-3.0,90.000035,0.000000,0.000000 +1714,-3.0,90.000035,0.000000,0.000000 +1715,-3.0,90.000035,0.000000,0.000000 +1716,-3.0,90.000035,0.000000,0.000000 +1717,-3.0,90.000035,0.000000,0.000000 +1718,-3.0,90.000035,0.000000,0.000000 +1719,-3.0,90.000035,0.000000,0.000000 +1720,-3.0,90.000035,0.000000,0.000000 +1721,-3.0,90.000035,0.000000,0.000000 +1722,-3.0,90.000035,0.000000,0.000000 +1723,-3.0,90.000035,0.000000,0.000000 +1724,-3.0,90.000035,0.000000,0.000000 +1725,-3.0,90.000035,0.000000,0.000000 +1726,-3.0,90.000035,0.000000,0.000000 +1727,-3.0,90.000035,0.000000,0.000000 +1728,-3.0,90.000035,0.000000,0.000000 +1729,-3.0,90.000035,0.000000,0.000000 +1730,-3.0,90.000035,0.000000,0.000000 +1731,-3.0,90.000035,0.000000,0.000000 +1732,-3.0,90.000035,0.000000,0.000000 +1733,-3.0,90.000035,0.000000,0.000000 +1734,-3.0,90.000035,0.000000,0.000000 +1735,-3.0,90.000035,0.000000,0.000000 +1736,-3.0,90.000035,0.000000,0.000000 +1737,-3.0,90.000035,0.000000,0.000000 +1738,-3.0,90.000035,0.000000,0.000000 +1739,-3.0,90.000035,0.000000,0.000000 +1740,-3.0,90.000035,0.000000,0.000000 +1741,-3.0,90.000035,0.000000,0.000000 +1742,-3.0,90.000035,0.000000,0.000000 +1743,-3.0,90.000035,0.000000,0.000000 +1744,-3.0,90.000035,0.000000,0.000000 +1745,-3.0,90.000035,0.000000,0.000000 +1746,-3.0,90.000035,0.000000,0.000000 +1747,-3.0,90.000035,0.000000,0.000000 +1748,-3.0,90.000035,0.000000,0.000000 +1749,-3.0,90.000035,0.000000,0.000000 +1750,-3.0,90.000035,0.000000,0.000000 +1751,-3.0,90.000035,0.000000,0.000000 +1752,-3.0,90.000035,0.000000,0.000000 +1753,-3.0,90.000035,0.000000,0.000000 +1754,-3.0,90.000035,0.000000,0.000000 +1755,-3.0,90.000035,0.000000,0.000000 +1756,-3.0,90.000035,0.000000,0.000000 +1757,-3.0,90.000035,0.000000,0.000000 +1758,-3.0,90.000035,0.000000,0.000000 +1759,-3.0,90.000035,0.000000,0.000000 +1760,-3.0,90.000035,0.000000,0.000000 +1761,-3.0,90.000035,0.000000,0.000000 +1762,-3.0,90.000035,0.000000,0.000000 +1763,-3.0,90.000035,0.000000,0.000000 +1764,-3.0,90.000035,0.000000,0.000000 +1765,-3.0,90.000035,0.000000,0.000000 +1766,-3.0,90.000035,0.000000,0.000000 +1767,-3.0,90.000035,0.000000,0.000000 +1768,-3.0,90.000035,0.000000,0.000000 +1769,-3.0,90.000035,0.000000,0.000000 +1770,-3.0,90.000035,0.000000,0.000000 +1771,-3.0,90.000035,0.000000,0.000000 +1772,-3.0,90.000035,0.000000,0.000000 +1773,-3.0,90.000035,0.000000,0.000000 +1774,-3.0,90.000035,0.000000,0.000000 +1775,-3.0,90.000035,0.000000,0.000000 +1776,-3.0,90.000035,0.000000,0.000000 +1777,-3.0,90.000035,0.000000,0.000000 +1778,-3.0,90.000035,0.000000,0.000000 +1779,-3.0,90.000035,0.000000,0.000000 +1780,-3.0,90.000035,0.000000,0.000000 +1781,-3.0,90.000035,0.000000,0.000000 +1782,-3.0,90.000035,0.000000,0.000000 +1783,-3.0,90.000035,0.000000,0.000000 +1784,-3.0,90.000035,0.000000,0.000000 +1785,-3.0,90.000035,0.000000,0.000000 +1786,-3.0,90.000035,0.000000,0.000000 +1787,-3.0,90.000035,0.000000,0.000000 +1788,-3.0,90.000035,0.000000,0.000000 +1789,-3.0,90.000035,0.000000,0.000000 +1790,-3.0,90.000035,0.000000,0.000000 +1791,-3.0,90.000035,0.000000,0.000000 +1792,-3.0,90.000035,0.000000,0.000000 +1793,-3.0,90.000035,0.000000,0.000000 +1794,-3.0,90.000035,0.000000,0.000000 +1795,-3.0,90.000035,0.000000,0.000000 +1796,-3.0,90.000035,0.000000,0.000000 +1797,-3.0,90.000035,0.000000,0.000000 +1798,-3.0,90.000035,0.000000,0.000000 +1799,-3.0,90.000035,0.000000,0.000000 +1800,-3.0,90.000035,0.000000,0.000000 +1801,-3.0,90.000035,0.000000,0.000000 +1802,-3.0,90.000035,0.000000,0.000000 +1803,-3.0,90.000035,0.000000,0.000000 +1804,-3.0,90.000035,0.000000,0.000000 +1805,-3.0,90.000035,0.000000,0.000000 +1806,-3.0,90.000035,0.000000,0.000000 +1807,-3.0,90.000035,0.000000,0.000000 +1808,-3.0,90.000035,0.000000,0.000000 +1809,-3.0,90.000035,0.000000,0.000000 +1810,-3.0,90.000035,0.000000,0.000000 +1811,-3.0,90.000035,0.000000,0.000000 +1812,-3.0,90.000035,0.000000,0.000000 +1813,-3.0,90.000035,0.000000,0.000000 +1814,-3.0,90.000035,0.000000,0.000000 +1815,-3.0,90.000035,0.000000,0.000000 +1816,-3.0,90.000035,0.000000,0.000000 +1817,-3.0,90.000035,0.000000,0.000000 +1818,-3.0,90.000035,0.000000,0.000000 +1819,-3.0,90.000035,0.000000,0.000000 +1820,-3.0,90.000035,0.000000,0.000000 +1821,-3.0,90.000035,0.000000,0.000000 +1822,-3.0,90.000035,0.000000,0.000000 +1823,-3.0,90.000035,0.000000,0.000000 +1824,-3.0,90.000035,0.000000,0.000000 +1825,-3.0,90.000035,0.000000,0.000000 +1826,-3.0,90.000035,0.000000,0.000000 +1827,-3.0,90.000035,0.000000,0.000000 +1828,-3.0,90.000035,0.000000,0.000000 +1829,-3.0,90.000035,0.000000,0.000000 +1830,-3.0,90.000035,0.000000,0.000000 +1831,-3.0,90.000035,0.000000,0.000000 +1832,-3.0,90.000035,0.000000,0.000000 +1833,-3.0,90.000035,0.000000,0.000000 +1834,-3.0,90.000035,0.000000,0.000000 +1835,-3.0,90.000035,0.000000,0.000000 +1836,-3.0,90.000035,0.000000,0.000000 +1837,-3.0,90.000035,0.000000,0.000000 +1838,-3.0,90.000035,0.000000,0.000000 +1839,-3.0,90.000035,0.000000,0.000000 +1840,-3.0,90.000035,0.000000,0.000000 +1841,-3.0,90.000035,0.000000,0.000000 +1842,-3.0,90.000035,0.000000,0.000000 +1843,-3.0,90.000035,0.000000,0.000000 +1844,-3.0,90.000035,0.000000,0.000000 +1845,-3.0,90.000035,0.000000,0.000000 +1846,-3.0,90.000035,0.000000,0.000000 +1847,-3.0,90.000035,0.000000,0.000000 +1848,-3.0,90.000035,0.000000,0.000000 +1849,-3.0,90.000035,0.000000,0.000000 +1850,-3.0,90.000035,0.000000,0.000000 +1851,-3.0,90.000035,0.000000,0.000000 +1852,-3.0,90.000035,0.000000,0.000000 +1853,-3.0,90.000035,0.000000,0.000000 +1854,-3.0,90.000035,0.000000,0.000000 +1855,-3.0,90.000035,0.000000,0.000000 +1856,-3.0,90.000035,0.000000,0.000000 +1857,-3.0,90.000035,0.000000,0.000000 +1858,-3.0,90.000035,0.000000,0.000000 +1859,-3.0,90.000035,0.000000,0.000000 +1860,-3.0,90.000035,0.000000,0.000000 +1861,-3.0,90.000035,0.000000,0.000000 +1862,-3.0,90.000035,0.000000,0.000000 +1863,-3.0,90.000035,0.000000,0.000000 +1864,-3.0,90.000035,0.000000,0.000000 +1865,-3.0,90.000035,0.000000,0.000000 +1866,-3.0,90.000035,0.000000,0.000000 +1867,-3.0,90.000035,0.000000,0.000000 +1868,-3.0,90.000035,0.000000,0.000000 +1869,-3.0,90.000035,0.000000,0.000000 +1870,-3.0,90.000035,0.000000,0.000000 +1871,-3.0,90.000035,0.000000,0.000000 +1872,-3.0,90.000035,0.000000,0.000000 +1873,-3.0,90.000035,0.000000,0.000000 +1874,-3.0,90.000035,0.000000,0.000000 +1875,-3.0,90.000035,0.000000,0.000000 +1876,-3.0,90.000035,0.000000,0.000000 +1877,-3.0,90.000035,0.000000,0.000000 +1878,-3.0,90.000035,0.000000,0.000000 +1879,-3.0,90.000035,0.000000,0.000000 +1880,-3.0,90.000035,0.000000,0.000000 +1881,-3.0,90.000035,0.000000,0.000000 +1882,-3.0,90.000035,0.000000,0.000000 +1883,-3.0,90.000035,0.000000,0.000000 +1884,-3.0,90.000035,0.000000,0.000000 +1885,-3.0,90.000035,0.000000,0.000000 +1886,-3.0,90.000035,0.000000,0.000000 +1887,-3.0,90.000035,0.000000,0.000000 +1888,-3.0,90.000035,0.000000,0.000000 +1889,-3.0,90.000035,0.000000,0.000000 +1890,-3.0,90.000035,0.000000,0.000000 +1891,-3.0,90.000035,0.000000,0.000000 +1892,-3.0,90.000035,0.000000,0.000000 +1893,-3.0,90.000035,0.000000,0.000000 +1894,-3.0,90.000035,0.000000,0.000000 +1895,-3.0,90.000035,0.000000,0.000000 +1896,-3.0,90.000035,0.000000,0.000000 +1897,-3.0,90.000035,0.000000,0.000000 +1898,-3.0,90.000035,0.000000,0.000000 +1899,-3.0,90.000035,0.000000,0.000000 +1900,-3.0,90.000035,0.000000,0.000000 +1901,-3.0,90.000035,0.000000,0.000000 +1902,-3.0,90.000035,0.000000,0.000000 +1903,-3.0,90.000035,0.000000,0.000000 +1904,-3.0,90.000035,0.000000,0.000000 +1905,-3.0,90.000035,0.000000,0.000000 +1906,-3.0,90.000035,0.000000,0.000000 +1907,-3.0,90.000035,0.000000,0.000000 +1908,-3.0,90.000035,0.000000,0.000000 +1909,-3.0,90.000035,0.000000,0.000000 +1910,-3.0,90.000035,0.000000,0.000000 +1911,-3.0,90.000035,0.000000,0.000000 +1912,-3.0,90.000035,0.000000,0.000000 +1913,-3.0,90.000035,0.000000,0.000000 +1914,-3.0,90.000035,0.000000,0.000000 +1915,-3.0,90.000035,0.000000,0.000000 +1916,-3.0,90.000035,0.000000,0.000000 +1917,-3.0,90.000035,0.000000,0.000000 +1918,-3.0,90.000035,0.000000,0.000000 +1919,-3.0,90.000035,0.000000,0.000000 +1920,-3.0,90.000035,0.000000,0.000000 +1921,-3.0,90.000035,0.000000,0.000000 +1922,-3.0,90.000035,0.000000,0.000000 +1923,-3.0,90.000035,0.000000,0.000000 +1924,-3.0,90.000035,0.000000,0.000000 +1925,-3.0,90.000035,0.000000,0.000000 +1926,-3.0,90.000035,0.000000,0.000000 +1927,-3.0,90.000035,0.000000,0.000000 +1928,-3.0,90.000035,0.000000,0.000000 +1929,-3.0,90.000035,0.000000,0.000000 +1930,-3.0,90.000035,0.000000,0.000000 +1931,-3.0,90.000035,0.000000,0.000000 +1932,-3.0,90.000035,0.000000,0.000000 +1933,-3.0,90.000035,0.000000,0.000000 +1934,-3.0,90.000035,0.000000,0.000000 +1935,-3.0,90.000035,0.000000,0.000000 +1936,-3.0,90.000035,0.000000,0.000000 +1937,-3.0,90.000035,0.000000,0.000000 +1938,-3.0,90.000035,0.000000,0.000000 +1939,-3.0,90.000035,0.000000,0.000000 +1940,-3.0,90.000035,0.000000,0.000000 +1941,-3.0,90.000035,0.000000,0.000000 +1942,-3.0,90.000035,0.000000,0.000000 +1943,-3.0,90.000035,0.000000,0.000000 +1944,-3.0,90.000035,0.000000,0.000000 +1945,-3.0,90.000035,0.000000,0.000000 +1946,-3.0,90.000035,0.000000,0.000000 +1947,-3.0,90.000035,0.000000,0.000000 +1948,-3.0,90.000035,0.000000,0.000000 +1949,-3.0,90.000035,0.000000,0.000000 +1950,-3.0,90.000035,0.000000,0.000000 +1951,-3.0,90.000035,0.000000,0.000000 +1952,-3.0,90.000035,0.000000,0.000000 +1953,-3.0,90.000035,0.000000,0.000000 +1954,-3.0,90.000035,0.000000,0.000000 +1955,-3.0,90.000035,0.000000,0.000000 +1956,-3.0,90.000035,0.000000,0.000000 +1957,-3.0,90.000035,0.000000,0.000000 +1958,-3.0,90.000035,0.000000,0.000000 +1959,-3.0,90.000035,0.000000,0.000000 +1960,-3.0,90.000035,0.000000,0.000000 +1961,-3.0,90.000035,0.000000,0.000000 +1962,-3.0,90.000035,0.000000,0.000000 +1963,-3.0,90.000035,0.000000,0.000000 +1964,-3.0,90.000035,0.000000,0.000000 +1965,-3.0,90.000035,0.000000,0.000000 +1966,-3.0,90.000035,0.000000,0.000000 +1967,-3.0,90.000035,0.000000,0.000000 +1968,-3.0,90.000035,0.000000,0.000000 +1969,-3.0,90.000035,0.000000,0.000000 +1970,-3.0,90.000035,0.000000,0.000000 +1971,-3.0,90.000035,0.000000,0.000000 +1972,-3.0,90.000035,0.000000,0.000000 +1973,-3.0,90.000035,0.000000,0.000000 +1974,-3.0,90.000035,0.000000,0.000000 +1975,-3.0,90.000035,0.000000,0.000000 +1976,-3.0,90.000035,0.000000,0.000000 +1977,-3.0,90.000035,0.000000,0.000000 +1978,-3.0,90.000035,0.000000,0.000000 +1979,-3.0,90.000035,0.000000,0.000000 +1980,-3.0,90.000035,0.000000,0.000000 +1981,-3.0,90.000035,0.000000,0.000000 +1982,-3.0,90.000035,0.000000,0.000000 +1983,-3.0,90.000035,0.000000,0.000000 +1984,-3.0,90.000035,0.000000,0.000000 +1985,-3.0,90.000035,0.000000,0.000000 +1986,-3.0,90.000035,0.000000,0.000000 +1987,-3.0,90.000035,0.000000,0.000000 +1988,-3.0,90.000035,0.000000,0.000000 +1989,-3.0,90.000035,0.000000,0.000000 +1990,-3.0,90.000035,0.000000,0.000000 +1991,-3.0,90.000035,0.000000,0.000000 +1992,-3.0,90.000035,0.000000,0.000000 +1993,-3.0,90.000035,0.000000,0.000000 +1994,-3.0,90.000035,0.000000,0.000000 +1995,-3.0,90.000035,0.000000,0.000000 +1996,-3.0,90.000035,0.000000,0.000000 +1997,-3.0,90.000035,0.000000,0.000000 +1998,-3.0,90.000035,0.000000,0.000000 +1999,-3.0,90.000035,0.000000,0.000000 +2000,-3.0,90.000035,0.000000,0.000000 +2001,-3.0,90.000035,0.000000,0.000000 +2002,-3.0,90.000035,0.000000,0.000000 +2003,-3.0,90.000035,0.000000,0.000000 +2004,-3.0,90.000035,0.000000,0.000000 +2005,-3.0,90.000035,0.000000,0.000000 +2006,-3.0,90.000035,0.000000,0.000000 +2007,-3.0,90.000035,0.000000,0.000000 +2008,-3.0,90.000035,0.000000,0.000000 +2009,-3.0,90.000035,0.000000,0.000000 +2010,-3.0,90.000035,0.000000,0.000000 +2011,-3.0,90.000035,0.000000,0.000000 +2012,-3.0,90.000035,0.000000,0.000000 +2013,-3.0,90.000035,0.000000,0.000000 +2014,-3.0,90.000035,0.000000,0.000000 +2015,-3.0,90.000035,0.000000,0.000000 +2016,-3.0,90.000035,0.000000,0.000000 +2017,-3.0,90.000035,0.000000,0.000000 +2018,-3.0,90.000035,0.000000,0.000000 +2019,-3.0,90.000035,0.000000,0.000000 +2020,-3.0,90.000035,0.000000,0.000000 +2021,-3.0,90.000035,0.000000,0.000000 +2022,-3.0,90.000035,0.000000,0.000000 +2023,-3.0,90.000035,0.000000,0.000000 +2024,-3.0,90.000035,0.000000,0.000000 +2025,-3.0,90.000035,0.000000,0.000000 +2026,-3.0,90.000035,0.000000,0.000000 +2027,-3.0,90.000035,0.000000,0.000000 +2028,-3.0,90.000035,0.000000,0.000000 +2029,-3.0,90.000035,0.000000,0.000000 +2030,-3.0,90.000035,0.000000,0.000000 +2031,-3.0,90.000035,0.000000,0.000000 +2032,-3.0,90.000035,0.000000,0.000000 +2033,-3.0,90.000035,0.000000,0.000000 +2034,-3.0,90.000035,0.000000,0.000000 +2035,-3.0,90.000035,0.000000,0.000000 +2036,-3.0,90.000035,0.000000,0.000000 +2037,-3.0,90.000035,0.000000,0.000000 +2038,-3.0,90.000035,0.000000,0.000000 +2039,-3.0,90.000035,0.000000,0.000000 +2040,-3.0,90.000035,0.000000,0.000000 +2041,-3.0,90.000035,0.000000,0.000000 +2042,-3.0,90.000035,0.000000,0.000000 +2043,-3.0,90.000035,0.000000,0.000000 +2044,-3.0,90.000035,0.000000,0.000000 +2045,-3.0,90.000035,0.000000,0.000000 +2046,-3.0,90.000035,0.000000,0.000000 +2047,-3.0,90.000035,0.000000,0.000000 +2048,-3.0,90.000035,0.000000,0.000000 +2049,-3.0,90.000035,0.000000,0.000000 +2050,-3.0,90.000035,0.000000,0.000000 +2051,-3.0,90.000035,0.000000,0.000000 +2052,-3.0,90.000035,0.000000,0.000000 +2053,-3.0,90.000035,0.000000,0.000000 +2054,-3.0,90.000035,0.000000,0.000000 +2055,-3.0,90.000035,0.000000,0.000000 +2056,-3.0,90.000035,0.000000,0.000000 +2057,-3.0,90.000035,0.000000,0.000000 +2058,-3.0,90.000035,0.000000,0.000000 +2059,-3.0,90.000035,0.000000,0.000000 +2060,-3.0,90.000035,0.000000,0.000000 +2061,-3.0,90.000035,0.000000,0.000000 +2062,-3.0,90.000035,0.000000,0.000000 +2063,-3.0,90.000035,0.000000,0.000000 +2064,-3.0,90.000035,0.000000,0.000000 +2065,-3.0,90.000035,0.000000,0.000000 +2066,-3.0,90.000035,0.000000,0.000000 +2067,-3.0,90.000035,0.000000,0.000000 +2068,-3.0,90.000035,0.000000,0.000000 +2069,-3.0,90.000035,0.000000,0.000000 +2070,-3.0,90.000035,0.000000,0.000000 +2071,-3.0,90.000035,0.000000,0.000000 +2072,-3.0,90.000035,0.000000,0.000000 +2073,-3.0,90.000035,0.000000,0.000000 +2074,-3.0,90.000035,0.000000,0.000000 +2075,-3.0,90.000035,0.000000,0.000000 +2076,-3.0,90.000035,0.000000,0.000000 +2077,-3.0,90.000035,0.000000,0.000000 +2078,-3.0,90.000035,0.000000,0.000000 +2079,-3.0,90.000035,0.000000,0.000000 +2080,-3.0,90.000035,0.000000,0.000000 +2081,-3.0,90.000035,0.000000,0.000000 +2082,-3.0,90.000035,0.000000,0.000000 +2083,-3.0,90.000035,0.000000,0.000000 +2084,-3.0,90.000035,0.000000,0.000000 +2085,-3.0,90.000035,0.000000,0.000000 +2086,-3.0,90.000035,0.000000,0.000000 +2087,-3.0,90.000035,0.000000,0.000000 +2088,-3.0,90.000035,0.000000,0.000000 +2089,-3.0,90.000035,0.000000,0.000000 +2090,-3.0,90.000035,0.000000,0.000000 +2091,-3.0,90.000035,0.000000,0.000000 +2092,-3.0,90.000035,0.000000,0.000000 +2093,-3.0,90.000035,0.000000,0.000000 +2094,-3.0,90.000035,0.000000,0.000000 +2095,-3.0,90.000035,0.000000,0.000000 +2096,-3.0,90.000035,0.000000,0.000000 +2097,-3.0,90.000035,0.000000,0.000000 +2098,-3.0,90.000035,0.000000,0.000000 +2099,-3.0,90.000035,0.000000,0.000000 +2100,-3.0,90.000035,0.000000,0.000000 +2101,-3.0,90.000035,0.000000,0.000000 +2102,-3.0,90.000035,0.000000,0.000000 +2103,-3.0,90.000035,0.000000,0.000000 +2104,-3.0,90.000035,0.000000,0.000000 +2105,-3.0,90.000035,0.000000,0.000000 +2106,-3.0,90.000035,0.000000,0.000000 +2107,-3.0,90.000035,0.000000,0.000000 +2108,-3.0,90.000035,0.000000,0.000000 +2109,-3.0,90.000035,0.000000,0.000000 +2110,-3.0,90.000035,0.000000,0.000000 +2111,-3.0,90.000035,0.000000,0.000000 +2112,-3.0,90.000035,0.000000,0.000000 +2113,-3.0,90.000035,0.000000,0.000000 +2114,-3.0,90.000035,0.000000,0.000000 +2115,-3.0,90.000035,0.000000,0.000000 +2116,-3.0,90.000035,0.000000,0.000000 +2117,-3.0,90.000035,0.000000,0.000000 +2118,-3.0,90.000035,0.000000,0.000000 +2119,-3.0,90.000035,0.000000,0.000000 +2120,-3.0,90.000035,0.000000,0.000000 +2121,-3.0,90.000035,0.000000,0.000000 +2122,-3.0,90.000035,0.000000,0.000000 +2123,-3.0,90.000035,0.000000,0.000000 +2124,-3.0,90.000035,0.000000,0.000000 +2125,-3.0,90.000035,0.000000,0.000000 +2126,-3.0,90.000035,0.000000,0.000000 +2127,-3.0,90.000035,0.000000,0.000000 +2128,-3.0,90.000035,0.000000,0.000000 +2129,-3.0,90.000035,0.000000,0.000000 +2130,-3.0,90.000035,0.000000,0.000000 +2131,-3.0,90.000035,0.000000,0.000000 +2132,-3.0,90.000035,0.000000,0.000000 +2133,-3.0,90.000035,0.000000,0.000000 +2134,-3.0,90.000035,0.000000,0.000000 +2135,-3.0,90.000035,0.000000,0.000000 +2136,-3.0,90.000035,0.000000,0.000000 +2137,-3.0,90.000035,0.000000,0.000000 +2138,-3.0,90.000035,0.000000,0.000000 +2139,-3.0,90.000035,0.000000,0.000000 +2140,-3.0,90.000035,0.000000,0.000000 +2141,-3.0,90.000035,0.000000,0.000000 +2142,-3.0,90.000035,0.000000,0.000000 +2143,-3.0,90.000035,0.000000,0.000000 +2144,-3.0,90.000035,0.000000,0.000000 +2145,-3.0,90.000035,0.000000,0.000000 +2146,-3.0,90.000035,0.000000,0.000000 +2147,-3.0,90.000035,0.000000,0.000000 +2148,-3.0,90.000035,0.000000,0.000000 +2149,-3.0,90.000035,0.000000,0.000000 +2150,-3.0,90.000035,0.000000,0.000000 +2151,-3.0,90.000035,0.000000,0.000000 +2152,-3.0,90.000035,0.000000,0.000000 +2153,-3.0,90.000035,0.000000,0.000000 +2154,-3.0,90.000035,0.000000,0.000000 +2155,-3.0,90.000035,0.000000,0.000000 +2156,-3.0,90.000035,0.000000,0.000000 +2157,-3.0,90.000035,0.000000,0.000000 +2158,-3.0,90.000035,0.000000,0.000000 +2159,-3.0,90.000035,0.000000,0.000000 +2160,-3.0,90.000035,0.000000,0.000000 +2161,-3.0,90.000035,0.000000,0.000000 +2162,-3.0,90.000035,0.000000,0.000000 +2163,-3.0,90.000035,0.000000,0.000000 +2164,-3.0,90.000035,0.000000,0.000000 +2165,-3.0,90.000035,0.000000,0.000000 +2166,-3.0,90.000035,0.000000,0.000000 +2167,-3.0,90.000035,0.000000,0.000000 +2168,-3.0,90.000035,0.000000,0.000000 +2169,-3.0,90.000035,0.000000,0.000000 +2170,-3.0,90.000035,0.000000,0.000000 +2171,-3.0,90.000035,0.000000,0.000000 +2172,-3.0,90.000035,0.000000,0.000000 +2173,-3.0,90.000035,0.000000,0.000000 +2174,-3.0,90.000035,0.000000,0.000000 +2175,-3.0,90.000035,0.000000,0.000000 +2176,-3.0,90.000035,0.000000,0.000000 +2177,-3.0,90.000035,0.000000,0.000000 +2178,-3.0,90.000035,0.000000,0.000000 +2179,-3.0,90.000035,0.000000,0.000000 +2180,-3.0,90.000035,0.000000,0.000000 +2181,-3.0,90.000035,0.000000,0.000000 +2182,-3.0,90.000035,0.000000,0.000000 +2183,-3.0,90.000035,0.000000,0.000000 +2184,-3.0,90.000035,0.000000,0.000000 +2185,-3.0,90.000035,0.000000,0.000000 +2186,-3.0,90.000035,0.000000,0.000000 +2187,-3.0,90.000035,0.000000,0.000000 +2188,-3.0,90.000035,0.000000,0.000000 +2189,-3.0,90.000035,0.000000,0.000000 +2190,-3.0,90.000035,0.000000,0.000000 +2191,-3.0,90.000035,0.000000,0.000000 +2192,-3.0,90.000035,0.000000,0.000000 +2193,-3.0,90.000035,0.000000,0.000000 +2194,-3.0,90.000035,0.000000,0.000000 +2195,-3.0,90.000035,0.000000,0.000000 +2196,-3.0,90.000035,0.000000,0.000000 +2197,-3.0,90.000035,0.000000,0.000000 +2198,-3.0,90.000035,0.000000,0.000000 +2199,-3.0,90.000035,0.000000,0.000000 +2200,-3.0,90.000035,0.000000,0.000000 +2201,-3.0,90.000035,0.000000,0.000000 +2202,-3.0,90.000035,0.000000,0.000000 +2203,-3.0,90.000035,0.000000,0.000000 +2204,-3.0,90.000035,0.000000,0.000000 +2205,-3.0,90.000035,0.000000,0.000000 +2206,-3.0,90.000035,0.000000,0.000000 +2207,-3.0,90.000035,0.000000,0.000000 +2208,-3.0,90.000035,0.000000,0.000000 +2209,-3.0,90.000035,0.000000,0.000000 +2210,-3.0,90.000035,0.000000,0.000000 +2211,-3.0,90.000035,0.000000,0.000000 +2212,-3.0,90.000035,0.000000,0.000000 +2213,-3.0,90.000035,0.000000,0.000000 +2214,-3.0,90.000035,0.000000,0.000000 +2215,-3.0,90.000035,0.000000,0.000000 +2216,-3.0,90.000035,0.000000,0.000000 +2217,-3.0,90.000035,0.000000,0.000000 +2218,-3.0,90.000035,0.000000,0.000000 +2219,-3.0,90.000035,0.000000,0.000000 +2220,-3.0,90.000035,0.000000,0.000000 +2221,-3.0,90.000035,0.000000,0.000000 +2222,-3.0,90.000035,0.000000,0.000000 +2223,-3.0,90.000035,0.000000,0.000000 +2224,-3.0,90.000035,0.000000,0.000000 +2225,-3.0,90.000035,0.000000,0.000000 +2226,-3.0,90.000035,0.000000,0.000000 +2227,-3.0,90.000035,0.000000,0.000000 +2228,-3.0,90.000035,0.000000,0.000000 +2229,-3.0,90.000035,0.000000,0.000000 +2230,-3.0,90.000035,0.000000,0.000000 +2231,-3.0,90.000035,0.000000,0.000000 +2232,-3.0,90.000035,0.000000,0.000000 +2233,-3.0,90.000035,0.000000,0.000000 +2234,-3.0,90.000035,0.000000,0.000000 +2235,-3.0,90.000035,0.000000,0.000000 +2236,-3.0,90.000035,0.000000,0.000000 +2237,-3.0,90.000035,0.000000,0.000000 +2238,-3.0,90.000035,0.000000,0.000000 +2239,-3.0,90.000035,0.000000,0.000000 +2240,-3.0,90.000035,0.000000,0.000000 +2241,-3.0,90.000035,0.000000,0.000000 +2242,-3.0,90.000035,0.000000,0.000000 +2243,-3.0,90.000035,0.000000,0.000000 +2244,-3.0,90.000035,0.000000,0.000000 +2245,-3.0,90.000035,0.000000,0.000000 +2246,-3.0,90.000035,0.000000,0.000000 +2247,-3.0,90.000035,0.000000,0.000000 +2248,-3.0,90.000035,0.000000,0.000000 +2249,-3.0,90.000035,0.000000,0.000000 +2250,-3.0,90.000035,0.000000,0.000000 +2251,-3.0,90.000035,0.000000,0.000000 +2252,-3.0,90.000035,0.000000,0.000000 +2253,-3.0,90.000035,0.000000,0.000000 +2254,-3.0,90.000035,0.000000,0.000000 +2255,-3.0,90.000035,0.000000,0.000000 +2256,-3.0,90.000035,0.000000,0.000000 +2257,-3.0,90.000035,0.000000,0.000000 +2258,-3.0,90.000035,0.000000,0.000000 +2259,-3.0,90.000035,0.000000,0.000000 +2260,-3.0,90.000035,0.000000,0.000000 +2261,-3.0,90.000035,0.000000,0.000000 +2262,-3.0,90.000035,0.000000,0.000000 +2263,-3.0,90.000035,0.000000,0.000000 +2264,-3.0,90.000035,0.000000,0.000000 +2265,-3.0,90.000035,0.000000,0.000000 +2266,-3.0,90.000035,0.000000,0.000000 +2267,-3.0,90.000035,0.000000,0.000000 +2268,-3.0,90.000035,0.000000,0.000000 +2269,-3.0,90.000035,0.000000,0.000000 +2270,-3.0,90.000035,0.000000,0.000000 +2271,-3.0,90.000035,0.000000,0.000000 +2272,-3.0,90.000035,0.000000,0.000000 +2273,-3.0,90.000035,0.000000,0.000000 +2274,-3.0,90.000035,0.000000,0.000000 +2275,-3.0,90.000035,0.000000,0.000000 +2276,-3.0,90.000035,0.000000,0.000000 +2277,-3.0,90.000035,0.000000,0.000000 +2278,-3.0,90.000035,0.000000,0.000000 +2279,-3.0,90.000035,0.000000,0.000000 +2280,-3.0,90.000035,0.000000,0.000000 +2281,-3.0,90.000035,0.000000,0.000000 +2282,-3.0,90.000035,0.000000,0.000000 +2283,-3.0,90.000035,0.000000,0.000000 +2284,-3.0,90.000035,0.000000,0.000000 +2285,-3.0,90.000035,0.000000,0.000000 +2286,-3.0,90.000035,0.000000,0.000000 +2287,-3.0,90.000035,0.000000,0.000000 +2288,-3.0,90.000035,0.000000,0.000000 +2289,-3.0,90.000035,0.000000,0.000000 +2290,-3.0,90.000035,0.000000,0.000000 +2291,-3.0,90.000035,0.000000,0.000000 +2292,-3.0,90.000035,0.000000,0.000000 +2293,-3.0,90.000035,0.000000,0.000000 +2294,-3.0,90.000035,0.000000,0.000000 +2295,-3.0,90.000035,0.000000,0.000000 +2296,-3.0,90.000035,0.000000,0.000000 +2297,-3.0,90.000035,0.000000,0.000000 +2298,-3.0,90.000035,0.000000,0.000000 +2299,-3.0,90.000035,0.000000,0.000000 +2300,-3.0,90.000035,0.000000,0.000000 +2301,-3.0,90.000035,0.000000,0.000000 +2302,-3.0,90.000035,0.000000,0.000000 +2303,-3.0,90.000035,0.000000,0.000000 +2304,-3.0,90.000035,0.000000,0.000000 +2305,-3.0,90.000035,0.000000,0.000000 +2306,-3.0,90.000035,0.000000,0.000000 +2307,-3.0,90.000035,0.000000,0.000000 +2308,-3.0,90.000035,0.000000,0.000000 +2309,-3.0,90.000035,0.000000,0.000000 +2310,-3.0,90.000035,0.000000,0.000000 +2311,-3.0,90.000035,0.000000,0.000000 +2312,-3.0,90.000035,0.000000,0.000000 +2313,-3.0,90.000035,0.000000,0.000000 +2314,-3.0,90.000035,0.000000,0.000000 +2315,-3.0,90.000035,0.000000,0.000000 +2316,-3.0,90.000035,0.000000,0.000000 +2317,-3.0,90.000035,0.000000,0.000000 +2318,-3.0,90.000035,0.000000,0.000000 +2319,-3.0,90.000035,0.000000,0.000000 +2320,-3.0,90.000035,0.000000,0.000000 +2321,-3.0,90.000035,0.000000,0.000000 +2322,-3.0,90.000035,0.000000,0.000000 +2323,-3.0,90.000035,0.000000,0.000000 +2324,-3.0,90.000035,0.000000,0.000000 +2325,-3.0,90.000035,0.000000,0.000000 +2326,-3.0,90.000035,0.000000,0.000000 +2327,-3.0,90.000035,0.000000,0.000000 +2328,-3.0,90.000035,0.000000,0.000000 +2329,-3.0,90.000035,0.000000,0.000000 +2330,-3.0,90.000035,0.000000,0.000000 +2331,-3.0,90.000035,0.000000,0.000000 +2332,-3.0,90.000035,0.000000,0.000000 +2333,-3.0,90.000035,0.000000,0.000000 +2334,-3.0,90.000035,0.000000,0.000000 +2335,-3.0,90.000035,0.000000,0.000000 +2336,-3.0,90.000035,0.000000,0.000000 +2337,-3.0,90.000035,0.000000,0.000000 +2338,-3.0,90.000035,0.000000,0.000000 +2339,-3.0,90.000035,0.000000,0.000000 +2340,-3.0,90.000035,0.000000,0.000000 +2341,-3.0,90.000035,0.000000,0.000000 +2342,-3.0,90.000035,0.000000,0.000000 +2343,-3.0,90.000035,0.000000,0.000000 +2344,-3.0,90.000035,0.000000,0.000000 +2345,-3.0,90.000035,0.000000,0.000000 +2346,-3.0,90.000035,0.000000,0.000000 +2347,-3.0,90.000035,0.000000,0.000000 +2348,-3.0,90.000035,0.000000,0.000000 +2349,-3.0,90.000035,0.000000,0.000000 +2350,-3.0,90.000035,0.000000,0.000000 +2351,-3.0,90.000035,0.000000,0.000000 +2352,-3.0,90.000035,0.000000,0.000000 +2353,-3.0,90.000035,0.000000,0.000000 +2354,-3.0,90.000035,0.000000,0.000000 +2355,-3.0,90.000035,0.000000,0.000000 +2356,-3.0,90.000035,0.000000,0.000000 +2357,-3.0,90.000035,0.000000,0.000000 +2358,-3.0,90.000035,0.000000,0.000000 +2359,-3.0,90.000035,0.000000,0.000000 +2360,-3.0,90.000035,0.000000,0.000000 +2361,-3.0,90.000035,0.000000,0.000000 +2362,-3.0,90.000035,0.000000,0.000000 +2363,-3.0,90.000035,0.000000,0.000000 +2364,-3.0,90.000035,0.000000,0.000000 +2365,-3.0,90.000035,0.000000,0.000000 +2366,-3.0,90.000035,0.000000,0.000000 +2367,-3.0,90.000035,0.000000,0.000000 +2368,-3.0,90.000035,0.000000,0.000000 +2369,-3.0,90.000035,0.000000,0.000000 +2370,-3.0,90.000035,0.000000,0.000000 +2371,-3.0,90.000035,0.000000,0.000000 +2372,-3.0,90.000035,0.000000,0.000000 +2373,-3.0,90.000035,0.000000,0.000000 +2374,-3.0,90.000035,0.000000,0.000000 +2375,-3.0,90.000035,0.000000,0.000000 +2376,-3.0,90.000035,0.000000,0.000000 +2377,-3.0,90.000035,0.000000,0.000000 +2378,-3.0,90.000035,0.000000,0.000000 +2379,-3.0,90.000035,0.000000,0.000000 +2380,-3.0,90.000035,0.000000,0.000000 +2381,-3.0,90.000035,0.000000,0.000000 +2382,-3.0,90.000035,0.000000,0.000000 +2383,-3.0,90.000035,0.000000,0.000000 +2384,-3.0,90.000035,0.000000,0.000000 +2385,-3.0,90.000035,0.000000,0.000000 +2386,-3.0,90.000035,0.000000,0.000000 +2387,-3.0,90.000035,0.000000,0.000000 +2388,-3.0,90.000035,0.000000,0.000000 +2389,-3.0,90.000035,0.000000,0.000000 +2390,-3.0,90.000035,0.000000,0.000000 +2391,-3.0,90.000035,0.000000,0.000000 +2392,-3.0,90.000035,0.000000,0.000000 +2393,-3.0,90.000035,0.000000,0.000000 +2394,-3.0,90.000035,0.000000,0.000000 +2395,-3.0,90.000035,0.000000,0.000000 +2396,-3.0,90.000035,0.000000,0.000000 +2397,-3.0,90.000035,0.000000,0.000000 +2398,-3.0,90.000035,0.000000,0.000000 +2399,-3.0,90.000035,0.000000,0.000000 +2400,-3.0,90.000035,0.000000,0.000000 +2401,-3.0,90.000035,0.000000,0.000000 +2402,-3.0,90.000035,0.000000,0.000000 +2403,-3.0,90.000035,0.000000,0.000000 +2404,-3.0,90.000035,0.000000,0.000000 +2405,-3.0,90.000035,0.000000,0.000000 +2406,-3.0,90.000035,0.000000,0.000000 +2407,-3.0,90.000035,0.000000,0.000000 +2408,-3.0,90.000035,0.000000,0.000000 +2409,-3.0,90.000035,0.000000,0.000000 +2410,-3.0,90.000035,0.000000,0.000000 +2411,-3.0,90.000035,0.000000,0.000000 +2412,-3.0,90.000035,0.000000,0.000000 +2413,-3.0,90.000035,0.000000,0.000000 +2414,-3.0,90.000035,0.000000,0.000000 +2415,-3.0,90.000035,0.000000,0.000000 +2416,-3.0,90.000035,0.000000,0.000000 +2417,-3.0,90.000035,0.000000,0.000000 +2418,-3.0,90.000035,0.000000,0.000000 +2419,-3.0,90.000035,0.000000,0.000000 +2420,-3.0,90.000035,0.000000,0.000000 +2421,-3.0,90.000035,0.000000,0.000000 +2422,-3.0,90.000035,0.000000,0.000000 +2423,-3.0,90.000035,0.000000,0.000000 +2424,-3.0,90.000035,0.000000,0.000000 +2425,-3.0,90.000035,0.000000,0.000000 +2426,-3.0,90.000035,0.000000,0.000000 +2427,-3.0,90.000035,0.000000,0.000000 +2428,-3.0,90.000035,0.000000,0.000000 +2429,-3.0,90.000035,0.000000,0.000000 +2430,-3.0,90.000035,0.000000,0.000000 +2431,-3.0,90.000035,0.000000,0.000000 +2432,-3.0,90.000035,0.000000,0.000000 +2433,-3.0,90.000035,0.000000,0.000000 +2434,-3.0,90.000035,0.000000,0.000000 +2435,-3.0,90.000035,0.000000,0.000000 +2436,-3.0,90.000035,0.000000,0.000000 +2437,-3.0,90.000035,0.000000,0.000000 +2438,-3.0,90.000035,0.000000,0.000000 +2439,-3.0,90.000035,0.000000,0.000000 +2440,-3.0,90.000035,0.000000,0.000000 +2441,-3.0,90.000035,0.000000,0.000000 +2442,-3.0,90.000035,0.000000,0.000000 +2443,-3.0,90.000035,0.000000,0.000000 +2444,-3.0,90.000035,0.000000,0.000000 +2445,-3.0,90.000035,0.000000,0.000000 +2446,-3.0,90.000035,0.000000,0.000000 +2447,-3.0,90.000035,0.000000,0.000000 +2448,-3.0,90.000035,0.000000,0.000000 +2449,-3.0,90.000035,0.000000,0.000000 +2450,-3.0,90.000035,0.000000,0.000000 +2451,-3.0,90.000035,0.000000,0.000000 +2452,-3.0,90.000035,0.000000,0.000000 +2453,-3.0,90.000035,0.000000,0.000000 +2454,-3.0,90.000035,0.000000,0.000000 +2455,-3.0,90.000035,0.000000,0.000000 +2456,-3.0,90.000035,0.000000,0.000000 +2457,-3.0,90.000035,0.000000,0.000000 +2458,-3.0,90.000035,0.000000,0.000000 +2459,-3.0,90.000035,0.000000,0.000000 +2460,-3.0,90.000035,0.000000,0.000000 +2461,-3.0,90.000035,0.000000,0.000000 +2462,-3.0,90.000035,0.000000,0.000000 +2463,-3.0,90.000035,0.000000,0.000000 +2464,-3.0,90.000035,0.000000,0.000000 +2465,-3.0,90.000035,0.000000,0.000000 +2466,-3.0,90.000035,0.000000,0.000000 +2467,-3.0,90.000035,0.000000,0.000000 +2468,-3.0,90.000035,0.000000,0.000000 +2469,-3.0,90.000035,0.000000,0.000000 +2470,-3.0,90.000035,0.000000,0.000000 +2471,-3.0,90.000035,0.000000,0.000000 +2472,-3.0,90.000035,0.000000,0.000000 +2473,-3.0,90.000035,0.000000,0.000000 +2474,-3.0,90.000035,0.000000,0.000000 +2475,-3.0,90.000035,0.000000,0.000000 +2476,-3.0,90.000035,0.000000,0.000000 +2477,-3.0,90.000035,0.000000,0.000000 +2478,-3.0,90.000035,0.000000,0.000000 +2479,-3.0,90.000035,0.000000,0.000000 +2480,-3.0,90.000035,0.000000,0.000000 +2481,-3.0,90.000035,0.000000,0.000000 +2482,-3.0,90.000035,0.000000,0.000000 +2483,-3.0,90.000035,0.000000,0.000000 +2484,-3.0,90.000035,0.000000,0.000000 +2485,-3.0,90.000035,0.000000,0.000000 +2486,-3.0,90.000035,0.000000,0.000000 +2487,-3.0,90.000035,0.000000,0.000000 +2488,-3.0,90.000035,0.000000,0.000000 +2489,-3.0,90.000035,0.000000,0.000000 +2490,-3.0,90.000035,0.000000,0.000000 +2491,-3.0,90.000035,0.000000,0.000000 +2492,-3.0,90.000035,0.000000,0.000000 +2493,-3.0,90.000035,0.000000,0.000000 +2494,-3.0,90.000035,0.000000,0.000000 +2495,-3.0,90.000035,0.000000,0.000000 +2496,-3.0,90.000035,0.000000,0.000000 +2497,-3.0,90.000035,0.000000,0.000000 +2498,-3.0,90.000035,0.000000,0.000000 +2499,-3.0,90.000035,0.000000,0.000000 +2500,-3.0,90.000035,0.000000,0.000000 +2501,-3.0,90.000035,0.000000,0.000000 +2502,-3.0,90.000035,0.000000,0.000000 +2503,-3.0,90.000035,0.000000,0.000000 +2504,-3.0,90.000035,0.000000,0.000000 +2505,-3.0,90.000035,0.000000,0.000000 +2506,-3.0,90.000035,0.000000,0.000000 +2507,-3.0,90.000035,0.000000,0.000000 +2508,-3.0,90.000035,0.000000,0.000000 +2509,-3.0,90.000035,0.000000,0.000000 +2510,-3.0,90.000035,0.000000,0.000000 +2511,-3.0,90.000035,0.000000,0.000000 +2512,-3.0,90.000035,0.000000,0.000000 +2513,-3.0,90.000035,0.000000,0.000000 +2514,-3.0,90.000035,0.000000,0.000000 +2515,-3.0,90.000035,0.000000,0.000000 +2516,-3.0,90.000035,0.000000,0.000000 +2517,-3.0,90.000035,0.000000,0.000000 +2518,-3.0,90.000035,0.000000,0.000000 +2519,-3.0,90.000035,0.000000,0.000000 +2520,-3.0,90.000035,0.000000,0.000000 +2521,-3.0,90.000035,0.000000,0.000000 +2522,-3.0,90.000035,0.000000,0.000000 +2523,-3.0,90.000035,0.000000,0.000000 +2524,-3.0,90.000035,0.000000,0.000000 +2525,-3.0,90.000035,0.000000,0.000000 +2526,-3.0,90.000035,0.000000,0.000000 +2527,-3.0,90.000035,0.000000,0.000000 +2528,-3.0,90.000035,0.000000,0.000000 +2529,-3.0,90.000035,0.000000,0.000000 +2530,-3.0,90.000035,0.000000,0.000000 +2531,-3.0,90.000035,0.000000,0.000000 +2532,-3.0,90.000035,0.000000,0.000000 +2533,-3.0,90.000035,0.000000,0.000000 +2534,-3.0,90.000035,0.000000,0.000000 +2535,-3.0,90.000035,0.000000,0.000000 +2536,-3.0,90.000035,0.000000,0.000000 +2537,-3.0,90.000035,0.000000,0.000000 +2538,-3.0,90.000035,0.000000,0.000000 +2539,-3.0,90.000035,0.000000,0.000000 +2540,-3.0,90.000035,0.000000,0.000000 +2541,-3.0,90.000035,0.000000,0.000000 +2542,-3.0,90.000035,0.000000,0.000000 +2543,-3.0,90.000035,0.000000,0.000000 +2544,-3.0,90.000035,0.000000,0.000000 +2545,-3.0,90.000035,0.000000,0.000000 +2546,-3.0,90.000035,0.000000,0.000000 +2547,-3.0,90.000035,0.000000,0.000000 +2548,-3.0,90.000035,0.000000,0.000000 +2549,-3.0,90.000035,0.000000,0.000000 +2550,-3.0,90.000035,0.000000,0.000000 +2551,-3.0,90.000035,0.000000,0.000000 +2552,-3.0,90.000035,0.000000,0.000000 +2553,-3.0,90.000035,0.000000,0.000000 +2554,-3.0,90.000035,0.000000,0.000000 +2555,-3.0,90.000035,0.000000,0.000000 +2556,-3.0,90.000035,0.000000,0.000000 +2557,-3.0,90.000035,0.000000,0.000000 +2558,-3.0,90.000035,0.000000,0.000000 +2559,-3.0,90.000035,0.000000,0.000000 +2560,-3.0,90.000035,0.000000,0.000000 +2561,-3.0,90.000035,0.000000,0.000000 +2562,-3.0,90.000035,0.000000,0.000000 +2563,-3.0,90.000035,0.000000,0.000000 +2564,-3.0,90.000035,0.000000,0.000000 +2565,-3.0,90.000035,0.000000,0.000000 +2566,-3.0,90.000035,0.000000,0.000000 +2567,-3.0,90.000035,0.000000,0.000000 +2568,-3.0,90.000035,0.000000,0.000000 +2569,-3.0,90.000035,0.000000,0.000000 +2570,-3.0,90.000035,0.000000,0.000000 +2571,-3.0,90.000035,0.000000,0.000000 +2572,-3.0,90.000035,0.000000,0.000000 +2573,-3.0,90.000035,0.000000,0.000000 +2574,-3.0,90.000035,0.000000,0.000000 +2575,-3.0,90.000035,0.000000,0.000000 +2576,-3.0,90.000035,0.000000,0.000000 +2577,-3.0,90.000035,0.000000,0.000000 +2578,-3.0,90.000035,0.000000,0.000000 +2579,-3.0,90.000035,0.000000,0.000000 +2580,-3.0,90.000035,0.000000,0.000000 +2581,-3.0,90.000035,0.000000,0.000000 +2582,-3.0,90.000035,0.000000,0.000000 +2583,-3.0,90.000035,0.000000,0.000000 +2584,-3.0,90.000035,0.000000,0.000000 +2585,-3.0,90.000035,0.000000,0.000000 +2586,-3.0,90.000035,0.000000,0.000000 +2587,-3.0,90.000035,0.000000,0.000000 +2588,-3.0,90.000035,0.000000,0.000000 +2589,-3.0,90.000035,0.000000,0.000000 +2590,-3.0,90.000035,0.000000,0.000000 +2591,-3.0,90.000035,0.000000,0.000000 +2592,-3.0,90.000035,0.000000,0.000000 +2593,-3.0,90.000035,0.000000,0.000000 +2594,-3.0,90.000035,0.000000,0.000000 +2595,-3.0,90.000035,0.000000,0.000000 +2596,-3.0,90.000035,0.000000,0.000000 +2597,-3.0,90.000035,0.000000,0.000000 +2598,-3.0,90.000035,0.000000,0.000000 +2599,-3.0,90.000035,0.000000,0.000000 +2600,-3.0,90.000035,0.000000,0.000000 +2601,-3.0,90.000035,0.000000,0.000000 +2602,-3.0,90.000035,0.000000,0.000000 +2603,-3.0,90.000035,0.000000,0.000000 +2604,-3.0,90.000035,0.000000,0.000000 +2605,-3.0,90.000035,0.000000,0.000000 +2606,-3.0,90.000035,0.000000,0.000000 +2607,-3.0,90.000035,0.000000,0.000000 +2608,-3.0,90.000035,0.000000,0.000000 +2609,-3.0,90.000035,0.000000,0.000000 +2610,-3.0,90.000035,0.000000,0.000000 +2611,-3.0,90.000035,0.000000,0.000000 +2612,-3.0,90.000035,0.000000,0.000000 +2613,-3.0,90.000035,0.000000,0.000000 +2614,-3.0,90.000035,0.000000,0.000000 +2615,-3.0,90.000035,0.000000,0.000000 +2616,-3.0,90.000035,0.000000,0.000000 +2617,-3.0,90.000035,0.000000,0.000000 +2618,-3.0,90.000035,0.000000,0.000000 +2619,-3.0,90.000035,0.000000,0.000000 +2620,-3.0,90.000035,0.000000,0.000000 +2621,-3.0,90.000035,0.000000,0.000000 +2622,-3.0,90.000035,0.000000,0.000000 +2623,-3.0,90.000035,0.000000,0.000000 +2624,-3.0,90.000035,0.000000,0.000000 +2625,-3.0,90.000035,0.000000,0.000000 +2626,-3.0,90.000035,0.000000,0.000000 +2627,-3.0,90.000035,0.000000,0.000000 +2628,-3.0,90.000035,0.000000,0.000000 +2629,-3.0,90.000035,0.000000,0.000000 +2630,-3.0,90.000035,0.000000,0.000000 +2631,-3.0,90.000035,0.000000,0.000000 +2632,-3.0,90.000035,0.000000,0.000000 +2633,-3.0,90.000035,0.000000,0.000000 +2634,-3.0,90.000035,0.000000,0.000000 +2635,-3.0,90.000035,0.000000,0.000000 +2636,-3.0,90.000035,0.000000,0.000000 +2637,-3.0,90.000035,0.000000,0.000000 +2638,-3.0,90.000035,0.000000,0.000000 +2639,-3.0,90.000035,0.000000,0.000000 +2640,-3.0,90.000035,0.000000,0.000000 +2641,-3.0,90.000035,0.000000,0.000000 +2642,-3.0,90.000035,0.000000,0.000000 +2643,-3.0,90.000035,0.000000,0.000000 +2644,-3.0,90.000035,0.000000,0.000000 +2645,-3.0,90.000035,0.000000,0.000000 +2646,-3.0,90.000035,0.000000,0.000000 +2647,-3.0,90.000035,0.000000,0.000000 +2648,-3.0,90.000035,0.000000,0.000000 +2649,-3.0,90.000035,0.000000,0.000000 +2650,-3.0,90.000035,0.000000,0.000000 +2651,-3.0,90.000035,0.000000,0.000000 +2652,-3.0,90.000035,0.000000,0.000000 +2653,-3.0,90.000035,0.000000,0.000000 +2654,-3.0,90.000035,0.000000,0.000000 +2655,-3.0,90.000035,0.000000,0.000000 +2656,-3.0,90.000035,0.000000,0.000000 +2657,-3.0,90.000035,0.000000,0.000000 +2658,-3.0,90.000035,0.000000,0.000000 +2659,-3.0,90.000035,0.000000,0.000000 +2660,-3.0,90.000035,0.000000,0.000000 +2661,-3.0,90.000035,0.000000,0.000000 +2662,-3.0,90.000035,0.000000,0.000000 +2663,-3.0,90.000035,0.000000,0.000000 +2664,-3.0,90.000035,0.000000,0.000000 +2665,-3.0,90.000035,0.000000,0.000000 +2666,-3.0,90.000035,0.000000,0.000000 +2667,-3.0,90.000035,0.000000,0.000000 +2668,-3.0,90.000035,0.000000,0.000000 +2669,-3.0,90.000035,0.000000,0.000000 +2670,-3.0,90.000035,0.000000,0.000000 +2671,-3.0,90.000035,0.000000,0.000000 +2672,-3.0,90.000035,0.000000,0.000000 +2673,-3.0,90.000035,0.000000,0.000000 +2674,-3.0,90.000035,0.000000,0.000000 +2675,-3.0,90.000035,0.000000,0.000000 +2676,-3.0,90.000035,0.000000,0.000000 +2677,-3.0,90.000035,0.000000,0.000000 +2678,-3.0,90.000035,0.000000,0.000000 +2679,-3.0,90.000035,0.000000,0.000000 +2680,-3.0,90.000035,0.000000,0.000000 +2681,-3.0,90.000035,0.000000,0.000000 +2682,-3.0,90.000035,0.000000,0.000000 +2683,-3.0,90.000035,0.000000,0.000000 +2684,-3.0,90.000035,0.000000,0.000000 +2685,-3.0,90.000035,0.000000,0.000000 +2686,-3.0,90.000035,0.000000,0.000000 +2687,-3.0,90.000035,0.000000,0.000000 +2688,-3.0,90.000035,0.000000,0.000000 +2689,-3.0,90.000035,0.000000,0.000000 +2690,-3.0,90.000035,0.000000,0.000000 +2691,-3.0,90.000035,0.000000,0.000000 +2692,-3.0,90.000035,0.000000,0.000000 +2693,-3.0,90.000035,0.000000,0.000000 +2694,-3.0,90.000035,0.000000,0.000000 +2695,-3.0,90.000035,0.000000,0.000000 +2696,-3.0,90.000035,0.000000,0.000000 +2697,-3.0,90.000035,0.000000,0.000000 +2698,-3.0,90.000035,0.000000,0.000000 +2699,-3.0,90.000035,0.000000,0.000000 +2700,-3.0,90.000035,0.000000,0.000000 +2701,-3.0,90.000035,0.000000,0.000000 +2702,-3.0,90.000035,0.000000,0.000000 +2703,-3.0,90.000035,0.000000,0.000000 +2704,-3.0,90.000035,0.000000,0.000000 +2705,-3.0,90.000035,0.000000,0.000000 +2706,-3.0,90.000035,0.000000,0.000000 +2707,-3.0,90.000035,0.000000,0.000000 +2708,-3.0,90.000035,0.000000,0.000000 +2709,-3.0,90.000035,0.000000,0.000000 +2710,-3.0,90.000035,0.000000,0.000000 +2711,-3.0,90.000035,0.000000,0.000000 +2712,-3.0,90.000035,0.000000,0.000000 +2713,-3.0,90.000035,0.000000,0.000000 +2714,-3.0,90.000035,0.000000,0.000000 +2715,-3.0,90.000035,0.000000,0.000000 +2716,-3.0,90.000035,0.000000,0.000000 +2717,-3.0,90.000035,0.000000,0.000000 +2718,-3.0,90.000035,0.000000,0.000000 +2719,-3.0,90.000035,0.000000,0.000000 +2720,-3.0,90.000035,0.000000,0.000000 +2721,-3.0,90.000035,0.000000,0.000000 +2722,-3.0,90.000035,0.000000,0.000000 +2723,-3.0,90.000035,0.000000,0.000000 +2724,-3.0,90.000035,0.000000,0.000000 +2725,-3.0,90.000035,0.000000,0.000000 +2726,-3.0,90.000035,0.000000,0.000000 +2727,-3.0,90.000035,0.000000,0.000000 +2728,-3.0,90.000035,0.000000,0.000000 +2729,-3.0,90.000035,0.000000,0.000000 +2730,-3.0,90.000035,0.000000,0.000000 +2731,-3.0,90.000035,0.000000,0.000000 +2732,-3.0,90.000035,0.000000,0.000000 +2733,-3.0,90.000035,0.000000,0.000000 +2734,-3.0,90.000035,0.000000,0.000000 +2735,-3.0,90.000035,0.000000,0.000000 +2736,-3.0,90.000035,0.000000,0.000000 +2737,-3.0,90.000035,0.000000,0.000000 +2738,-3.0,90.000035,0.000000,0.000000 +2739,-3.0,90.000035,0.000000,0.000000 +2740,-3.0,90.000035,0.000000,0.000000 +2741,-3.0,90.000035,0.000000,0.000000 +2742,-3.0,90.000035,0.000000,0.000000 +2743,-3.0,90.000035,0.000000,0.000000 +2744,-3.0,90.000035,0.000000,0.000000 +2745,-3.0,90.000035,0.000000,0.000000 +2746,-3.0,90.000035,0.000000,0.000000 +2747,-3.0,90.000035,0.000000,0.000000 +2748,-3.0,90.000035,0.000000,0.000000 +2749,-3.0,90.000035,0.000000,0.000000 +2750,-3.0,90.000035,0.000000,0.000000 +2751,-3.0,90.000035,0.000000,0.000000 +2752,-3.0,90.000035,0.000000,0.000000 +2753,-3.0,90.000035,0.000000,0.000000 +2754,-3.0,90.000035,0.000000,0.000000 +2755,-3.0,90.000035,0.000000,0.000000 +2756,-3.0,90.000035,0.000000,0.000000 +2757,-3.0,90.000035,0.000000,0.000000 +2758,-3.0,90.000035,0.000000,0.000000 +2759,-3.0,90.000035,0.000000,0.000000 +2760,-3.0,90.000035,0.000000,0.000000 +2761,-3.0,90.000035,0.000000,0.000000 +2762,-3.0,90.000035,0.000000,0.000000 +2763,-3.0,90.000035,0.000000,0.000000 +2764,-3.0,90.000035,0.000000,0.000000 +2765,-3.0,90.000035,0.000000,0.000000 +2766,-3.0,90.000035,0.000000,0.000000 +2767,-3.0,90.000035,0.000000,0.000000 +2768,-3.0,90.000035,0.000000,0.000000 +2769,-3.0,90.000035,0.000000,0.000000 +2770,-3.0,90.000035,0.000000,0.000000 +2771,-3.0,90.000035,0.000000,0.000000 +2772,-3.0,90.000035,0.000000,0.000000 +2773,-3.0,90.000035,0.000000,0.000000 +2774,-3.0,90.000035,0.000000,0.000000 +2775,-3.0,90.000035,0.000000,0.000000 +2776,-3.0,90.000035,0.000000,0.000000 +2777,-3.0,90.000035,0.000000,0.000000 +2778,-3.0,90.000035,0.000000,0.000000 +2779,-3.0,90.000035,0.000000,0.000000 +2780,-3.0,90.000035,0.000000,0.000000 +2781,-3.0,90.000035,0.000000,0.000000 +2782,-3.0,90.000035,0.000000,0.000000 +2783,-3.0,90.000035,0.000000,0.000000 +2784,-3.0,90.000035,0.000000,0.000000 +2785,-3.0,90.000035,0.000000,0.000000 +2786,-3.0,90.000035,0.000000,0.000000 +2787,-3.0,90.000035,0.000000,0.000000 +2788,-3.0,90.000035,0.000000,0.000000 +2789,-3.0,90.000035,0.000000,0.000000 +2790,-3.0,90.000035,0.000000,0.000000 +2791,-3.0,90.000035,0.000000,0.000000 +2792,-3.0,90.000035,0.000000,0.000000 +2793,-3.0,90.000035,0.000000,0.000000 +2794,-3.0,90.000035,0.000000,0.000000 +2795,-3.0,90.000035,0.000000,0.000000 +2796,-3.0,90.000035,0.000000,0.000000 +2797,-3.0,90.000035,0.000000,0.000000 +2798,-3.0,90.000035,0.000000,0.000000 +2799,-3.0,90.000035,0.000000,0.000000 +2800,-3.0,90.000035,0.000000,0.000000 +2801,-3.0,90.000035,0.000000,0.000000 +2802,-3.0,90.000035,0.000000,0.000000 +2803,-3.0,90.000035,0.000000,0.000000 +2804,-3.0,90.000035,0.000000,0.000000 +2805,-3.0,90.000035,0.000000,0.000000 +2806,-3.0,90.000035,0.000000,0.000000 +2807,-3.0,90.000035,0.000000,0.000000 +2808,-3.0,90.000035,0.000000,0.000000 +2809,-3.0,90.000035,0.000000,0.000000 +2810,-3.0,90.000035,0.000000,0.000000 +2811,-3.0,90.000035,0.000000,0.000000 +2812,-3.0,90.000035,0.000000,0.000000 +2813,-3.0,90.000035,0.000000,0.000000 +2814,-3.0,90.000035,0.000000,0.000000 +2815,-3.0,90.000035,0.000000,0.000000 +2816,-3.0,90.000035,0.000000,0.000000 +2817,-3.0,90.000035,0.000000,0.000000 +2818,-3.0,90.000035,0.000000,0.000000 +2819,-3.0,90.000035,0.000000,0.000000 +2820,-3.0,90.000035,0.000000,0.000000 +2821,-3.0,90.000035,0.000000,0.000000 +2822,-3.0,90.000035,0.000000,0.000000 +2823,-3.0,90.000035,0.000000,0.000000 +2824,-3.0,90.000035,0.000000,0.000000 +2825,-3.0,90.000035,0.000000,0.000000 +2826,-3.0,90.000035,0.000000,0.000000 +2827,-3.0,90.000035,0.000000,0.000000 +2828,-3.0,90.000035,0.000000,0.000000 +2829,-3.0,90.000035,0.000000,0.000000 +2830,-3.0,90.000035,0.000000,0.000000 +2831,-3.0,90.000035,0.000000,0.000000 +2832,-3.0,90.000035,0.000000,0.000000 +2833,-3.0,90.000035,0.000000,0.000000 +2834,-3.0,90.000035,0.000000,0.000000 +2835,-3.0,90.000035,0.000000,0.000000 +2836,-3.0,90.000035,0.000000,0.000000 +2837,-3.0,90.000035,0.000000,0.000000 +2838,-3.0,90.000035,0.000000,0.000000 +2839,-3.0,90.000035,0.000000,0.000000 +2840,-3.0,90.000035,0.000000,0.000000 +2841,-3.0,90.000035,0.000000,0.000000 +2842,-3.0,90.000035,0.000000,0.000000 +2843,-3.0,90.000035,0.000000,0.000000 +2844,-3.0,90.000035,0.000000,0.000000 +2845,-3.0,90.000035,0.000000,0.000000 +2846,-3.0,90.000035,0.000000,0.000000 +2847,-3.0,90.000035,0.000000,0.000000 +2848,-3.0,90.000035,0.000000,0.000000 +2849,-3.0,90.000035,0.000000,0.000000 +2850,-3.0,90.000035,0.000000,0.000000 +2851,-3.0,90.000035,0.000000,0.000000 +2852,-3.0,90.000035,0.000000,0.000000 +2853,-3.0,90.000035,0.000000,0.000000 +2854,-3.0,90.000035,0.000000,0.000000 +2855,-3.0,90.000035,0.000000,0.000000 +2856,-3.0,90.000035,0.000000,0.000000 +2857,-3.0,90.000035,0.000000,0.000000 +2858,-3.0,90.000035,0.000000,0.000000 +2859,-3.0,90.000035,0.000000,0.000000 +2860,-3.0,90.000035,0.000000,0.000000 +2861,-3.0,90.000035,0.000000,0.000000 +2862,-3.0,90.000035,0.000000,0.000000 +2863,-3.0,90.000035,0.000000,0.000000 +2864,-3.0,90.000035,0.000000,0.000000 +2865,-3.0,90.000035,0.000000,0.000000 +2866,-3.0,90.000035,0.000000,0.000000 +2867,-3.0,90.000035,0.000000,0.000000 +2868,-3.0,90.000035,0.000000,0.000000 +2869,-3.0,90.000035,0.000000,0.000000 +2870,-3.0,90.000035,0.000000,0.000000 +2871,-3.0,90.000035,0.000000,0.000000 +2872,-3.0,90.000035,0.000000,0.000000 +2873,-3.0,90.000035,0.000000,0.000000 +2874,-3.0,90.000035,0.000000,0.000000 +2875,-3.0,90.000035,0.000000,0.000000 +2876,-3.0,90.000035,0.000000,0.000000 +2877,-3.0,90.000035,0.000000,0.000000 +2878,-3.0,90.000035,0.000000,0.000000 +2879,-3.0,90.000035,0.000000,0.000000 +2880,-3.0,90.000035,0.000000,0.000000 +2881,-3.0,90.000035,0.000000,0.000000 +2882,-3.0,90.000035,0.000000,0.000000 +2883,-3.0,90.000035,0.000000,0.000000 +2884,-3.0,90.000035,0.000000,0.000000 +2885,-3.0,90.000035,0.000000,0.000000 +2886,-3.0,90.000035,0.000000,0.000000 +2887,-3.0,90.000035,0.000000,0.000000 +2888,-3.0,90.000035,0.000000,0.000000 +2889,-3.0,90.000035,0.000000,0.000000 +2890,-3.0,90.000035,0.000000,0.000000 +2891,-3.0,90.000035,0.000000,0.000000 +2892,-3.0,90.000035,0.000000,0.000000 +2893,-3.0,90.000035,0.000000,0.000000 +2894,-3.0,90.000035,0.000000,0.000000 +2895,-3.0,90.000035,0.000000,0.000000 +2896,-3.0,90.000035,0.000000,0.000000 +2897,-3.0,90.000035,0.000000,0.000000 +2898,-3.0,90.000035,0.000000,0.000000 +2899,-3.0,90.000035,0.000000,0.000000 +2900,-3.0,90.000035,0.000000,0.000000 +2901,-3.0,90.000035,0.000000,0.000000 +2902,-3.0,90.000035,0.000000,0.000000 +2903,-3.0,90.000035,0.000000,0.000000 +2904,-3.0,90.000035,0.000000,0.000000 +2905,-3.0,90.000035,0.000000,0.000000 +2906,-3.0,90.000035,0.000000,0.000000 +2907,-3.0,90.000035,0.000000,0.000000 +2908,-3.0,90.000035,0.000000,0.000000 +2909,-3.0,90.000035,0.000000,0.000000 +2910,-3.0,90.000035,0.000000,0.000000 +2911,-3.0,90.000035,0.000000,0.000000 +2912,-3.0,90.000035,0.000000,0.000000 +2913,-3.0,90.000035,0.000000,0.000000 +2914,-3.0,90.000035,0.000000,0.000000 +2915,-3.0,90.000035,0.000000,0.000000 +2916,-3.0,90.000035,0.000000,0.000000 +2917,-3.0,90.000035,0.000000,0.000000 +2918,-3.0,90.000035,0.000000,0.000000 +2919,-3.0,90.000035,0.000000,0.000000 +2920,-3.0,90.000035,0.000000,0.000000 +2921,-3.0,90.000035,0.000000,0.000000 +2922,-3.0,90.000035,0.000000,0.000000 +2923,-3.0,90.000035,0.000000,0.000000 +2924,-3.0,90.000035,0.000000,0.000000 +2925,-3.0,90.000035,0.000000,0.000000 +2926,-3.0,90.000035,0.000000,0.000000 +2927,-3.0,90.000035,0.000000,0.000000 +2928,-3.0,90.000035,0.000000,0.000000 +2929,-3.0,90.000035,0.000000,0.000000 +2930,-3.0,90.000035,0.000000,0.000000 +2931,-3.0,90.000035,0.000000,0.000000 +2932,-3.0,90.000035,0.000000,0.000000 +2933,-3.0,90.000035,0.000000,0.000000 +2934,-3.0,90.000035,0.000000,0.000000 +2935,-3.0,90.000035,0.000000,0.000000 +2936,-3.0,90.000035,0.000000,0.000000 +2937,-3.0,90.000035,0.000000,0.000000 +2938,-3.0,90.000035,0.000000,0.000000 +2939,-3.0,90.000035,0.000000,0.000000 +2940,-3.0,90.000035,0.000000,0.000000 +2941,-3.0,90.000035,0.000000,0.000000 +2942,-3.0,90.000035,0.000000,0.000000 +2943,-3.0,90.000035,0.000000,0.000000 +2944,-3.0,90.000035,0.000000,0.000000 +2945,-3.0,90.000035,0.000000,0.000000 +2946,-3.0,90.000035,0.000000,0.000000 +2947,-3.0,90.000035,0.000000,0.000000 +2948,-3.0,90.000035,0.000000,0.000000 +2949,-3.0,90.000035,0.000000,0.000000 +2950,-3.0,90.000035,0.000000,0.000000 +2951,-3.0,90.000035,0.000000,0.000000 +2952,-3.0,90.000035,0.000000,0.000000 +2953,-3.0,90.000035,0.000000,0.000000 +2954,-3.0,90.000035,0.000000,0.000000 +2955,-3.0,90.000035,0.000000,0.000000 +2956,-3.0,90.000035,0.000000,0.000000 +2957,-3.0,90.000035,0.000000,0.000000 +2958,-3.0,90.000035,0.000000,0.000000 +2959,-3.0,90.000035,0.000000,0.000000 +2960,-3.0,90.000035,0.000000,0.000000 +2961,-3.0,90.000035,0.000000,0.000000 +2962,-3.0,90.000035,0.000000,0.000000 +2963,-3.0,90.000035,0.000000,0.000000 +2964,-3.0,90.000035,0.000000,0.000000 +2965,-3.0,90.000035,0.000000,0.000000 +2966,-3.0,90.000035,0.000000,0.000000 +2967,-3.0,90.000035,0.000000,0.000000 +2968,-3.0,90.000035,0.000000,0.000000 +2969,-3.0,90.000035,0.000000,0.000000 +2970,-3.0,90.000035,0.000000,0.000000 +2971,-3.0,90.000035,0.000000,0.000000 +2972,-3.0,90.000035,0.000000,0.000000 +2973,-3.0,90.000035,0.000000,0.000000 +2974,-3.0,90.000035,0.000000,0.000000 +2975,-3.0,90.000035,0.000000,0.000000 +2976,-3.0,90.000035,0.000000,0.000000 +2977,-3.0,90.000035,0.000000,0.000000 +2978,-3.0,90.000035,0.000000,0.000000 +2979,-3.0,90.000035,0.000000,0.000000 +2980,-3.0,90.000035,0.000000,0.000000 +2981,-3.0,90.000035,0.000000,0.000000 +2982,-3.0,90.000035,0.000000,0.000000 +2983,-3.0,90.000035,0.000000,0.000000 +2984,-3.0,90.000035,0.000000,0.000000 +2985,-3.0,90.000035,0.000000,0.000000 +2986,-3.0,90.000035,0.000000,0.000000 +2987,-3.0,90.000035,0.000000,0.000000 +2988,-3.0,90.000035,0.000000,0.000000 +2989,-3.0,90.000035,0.000000,0.000000 +2990,-3.0,90.000035,0.000000,0.000000 +2991,-3.0,90.000035,0.000000,0.000000 +2992,-3.0,90.000035,0.000000,0.000000 +2993,-3.0,90.000035,0.000000,0.000000 +2994,-3.0,90.000035,0.000000,0.000000 +2995,-3.0,90.000035,0.000000,0.000000 +2996,-3.0,90.000035,0.000000,0.000000 +2997,-3.0,90.000035,0.000000,0.000000 +2998,-3.0,90.000035,0.000000,0.000000 +2999,-3.0,90.000035,0.000000,0.000000 +3000,-3.0,90.000035,0.000000,0.000000 +3001,-3.0,90.000035,0.000000,0.000000 +3002,-3.0,90.000035,0.000000,0.000000 +3003,-3.0,90.000035,0.000000,0.000000 +3004,-3.0,90.000035,0.000000,0.000000 +3005,-3.0,90.000035,0.000000,0.000000 +3006,-3.0,90.000035,0.000000,0.000000 +3007,-3.0,90.000035,0.000000,0.000000 +3008,-3.0,90.000035,0.000000,0.000000 +3009,-3.0,90.000035,0.000000,0.000000 +3010,-3.0,90.000035,0.000000,0.000000 +3011,-3.0,90.000035,0.000000,0.000000 +3012,-3.0,90.000035,0.000000,0.000000 +3013,-3.0,90.000035,0.000000,0.000000 +3014,-3.0,90.000035,0.000000,0.000000 +3015,-3.0,90.000035,0.000000,0.000000 +3016,-3.0,90.000035,0.000000,0.000000 +3017,-3.0,90.000035,0.000000,0.000000 +3018,-3.0,90.000035,0.000000,0.000000 +3019,-3.0,90.000035,0.000000,0.000000 +3020,-3.0,90.000035,0.000000,0.000000 +3021,-3.0,90.000035,0.000000,0.000000 +3022,-3.0,90.000035,0.000000,0.000000 +3023,-3.0,90.000035,0.000000,0.000000 +3024,-3.0,90.000035,0.000000,0.000000 +3025,-3.0,90.000035,0.000000,0.000000 +3026,-3.0,90.000035,0.000000,0.000000 +3027,-3.0,90.000035,0.000000,0.000000 +3028,-3.0,90.000035,0.000000,0.000000 +3029,-3.0,90.000035,0.000000,0.000000 +3030,-3.0,90.000035,0.000000,0.000000 +3031,-3.0,90.000035,0.000000,0.000000 +3032,-3.0,90.000035,0.000000,0.000000 +3033,-3.0,90.000035,0.000000,0.000000 +3034,-3.0,90.000035,0.000000,0.000000 +3035,-3.0,90.000035,0.000000,0.000000 +3036,-3.0,90.000035,0.000000,0.000000 +3037,-3.0,90.000035,0.000000,0.000000 +3038,-3.0,90.000035,0.000000,0.000000 +3039,-3.0,90.000035,0.000000,0.000000 +3040,-3.0,90.000035,0.000000,0.000000 +3041,-3.0,90.000035,0.000000,0.000000 +3042,-3.0,90.000035,0.000000,0.000000 +3043,-3.0,90.000035,0.000000,0.000000 +3044,-3.0,90.000035,0.000000,0.000000 +3045,-3.0,90.000035,0.000000,0.000000 +3046,-3.0,90.000035,0.000000,0.000000 +3047,-3.0,90.000035,0.000000,0.000000 +3048,-3.0,90.000035,0.000000,0.000000 +3049,-3.0,90.000035,0.000000,0.000000 +3050,-3.0,90.000035,0.000000,0.000000 +3051,-3.0,90.000035,0.000000,0.000000 +3052,-3.0,90.000035,0.000000,0.000000 +3053,-3.0,90.000035,0.000000,0.000000 +3054,-3.0,90.000035,0.000000,0.000000 +3055,-3.0,90.000035,0.000000,0.000000 +3056,-3.0,90.000035,0.000000,0.000000 +3057,-3.0,90.000035,0.000000,0.000000 +3058,-3.0,90.000035,0.000000,0.000000 +3059,-3.0,90.000035,0.000000,0.000000 +3060,-3.0,90.000035,0.000000,0.000000 +3061,-3.0,90.000035,0.000000,0.000000 +3062,-3.0,90.000035,0.000000,0.000000 +3063,-3.0,90.000035,0.000000,0.000000 +3064,-3.0,90.000035,0.000000,0.000000 +3065,-3.0,90.000035,0.000000,0.000000 +3066,-3.0,90.000035,0.000000,0.000000 +3067,-3.0,90.000035,0.000000,0.000000 +3068,-3.0,90.000035,0.000000,0.000000 +3069,-3.0,90.000035,0.000000,0.000000 +3070,-3.0,90.000035,0.000000,0.000000 +3071,-3.0,90.000035,0.000000,0.000000 +3072,-3.0,90.000035,0.000000,0.000000 +3073,-3.0,90.000035,0.000000,0.000000 +3074,-3.0,90.000035,0.000000,0.000000 +3075,-3.0,90.000035,0.000000,0.000000 +3076,-3.0,90.000035,0.000000,0.000000 +3077,-3.0,90.000035,0.000000,0.000000 +3078,-3.0,90.000035,0.000000,0.000000 +3079,-3.0,90.000035,0.000000,0.000000 +3080,-3.0,90.000035,0.000000,0.000000 +3081,-3.0,90.000035,0.000000,0.000000 +3082,-3.0,90.000035,0.000000,0.000000 +3083,-3.0,90.000035,0.000000,0.000000 +3084,-3.0,90.000035,0.000000,0.000000 +3085,-3.0,90.000035,0.000000,0.000000 +3086,-3.0,90.000035,0.000000,0.000000 +3087,-3.0,90.000035,0.000000,0.000000 +3088,-3.0,90.000035,0.000000,0.000000 +3089,-3.0,90.000035,0.000000,0.000000 +3090,-3.0,90.000035,0.000000,0.000000 +3091,-3.0,90.000035,0.000000,0.000000 +3092,-3.0,90.000035,0.000000,0.000000 +3093,-3.0,90.000035,0.000000,0.000000 +3094,-3.0,90.000035,0.000000,0.000000 +3095,-3.0,90.000035,0.000000,0.000000 +3096,-3.0,90.000035,0.000000,0.000000 +3097,-3.0,90.000035,0.000000,0.000000 +3098,-3.0,90.000035,0.000000,0.000000 +3099,-3.0,90.000035,0.000000,0.000000 +3100,-3.0,90.000035,0.000000,0.000000 +3101,-3.0,90.000035,0.000000,0.000000 +3102,-3.0,90.000035,0.000000,0.000000 +3103,-3.0,90.000035,0.000000,0.000000 +3104,-3.0,90.000035,0.000000,0.000000 +3105,-3.0,90.000035,0.000000,0.000000 +3106,-3.0,90.000035,0.000000,0.000000 +3107,-3.0,90.000035,0.000000,0.000000 +3108,-3.0,90.000035,0.000000,0.000000 +3109,-3.0,90.000035,0.000000,0.000000 +3110,-3.0,90.000035,0.000000,0.000000 +3111,-3.0,90.000035,0.000000,0.000000 +3112,-3.0,90.000035,0.000000,0.000000 +3113,-3.0,90.000035,0.000000,0.000000 +3114,-3.0,90.000035,0.000000,0.000000 +3115,-3.0,90.000035,0.000000,0.000000 +3116,-3.0,90.000035,0.000000,0.000000 +3117,-3.0,90.000035,0.000000,0.000000 +3118,-3.0,90.000035,0.000000,0.000000 +3119,-3.0,90.000035,0.000000,0.000000 +3120,-3.0,90.000035,0.000000,0.000000 +3121,-3.0,90.000035,0.000000,0.000000 +3122,-3.0,90.000035,0.000000,0.000000 +3123,-3.0,90.000035,0.000000,0.000000 +3124,-3.0,90.000035,0.000000,0.000000 +3125,-3.0,90.000035,0.000000,0.000000 +3126,-3.0,90.000035,0.000000,0.000000 +3127,-3.0,90.000035,0.000000,0.000000 +3128,-3.0,90.000035,0.000000,0.000000 +3129,-3.0,90.000035,0.000000,0.000000 +3130,-3.0,90.000035,0.000000,0.000000 +3131,-3.0,90.000035,0.000000,0.000000 +3132,-3.0,90.000035,0.000000,0.000000 +3133,-3.0,90.000035,0.000000,0.000000 +3134,-3.0,90.000035,0.000000,0.000000 +3135,-3.0,90.000035,0.000000,0.000000 +3136,-3.0,90.000035,0.000000,0.000000 +3137,-3.0,90.000035,0.000000,0.000000 +3138,-3.0,90.000035,0.000000,0.000000 +3139,-3.0,90.000035,0.000000,0.000000 +3140,-3.0,90.000035,0.000000,0.000000 +3141,-3.0,90.000035,0.000000,0.000000 +3142,-3.0,90.000035,0.000000,0.000000 +3143,-3.0,90.000035,0.000000,0.000000 +3144,-3.0,90.000035,0.000000,0.000000 +3145,-3.0,90.000035,0.000000,0.000000 +3146,-3.0,90.000035,0.000000,0.000000 +3147,-3.0,90.000035,0.000000,0.000000 +3148,-3.0,90.000035,0.000000,0.000000 +3149,-3.0,90.000035,0.000000,0.000000 +3150,-3.0,90.000035,0.000000,0.000000 +3151,-3.0,90.000035,0.000000,0.000000 +3152,-3.0,90.000035,0.000000,0.000000 +3153,-3.0,90.000035,0.000000,0.000000 +3154,-3.0,90.000035,0.000000,0.000000 +3155,-3.0,90.000035,0.000000,0.000000 +3156,-3.0,90.000035,0.000000,0.000000 +3157,-3.0,90.000035,0.000000,0.000000 +3158,-3.0,90.000035,0.000000,0.000000 +3159,-3.0,90.000035,0.000000,0.000000 +3160,-3.0,90.000035,0.000000,0.000000 +3161,-3.0,90.000035,0.000000,0.000000 +3162,-3.0,90.000035,0.000000,0.000000 +3163,-3.0,90.000035,0.000000,0.000000 +3164,-3.0,90.000035,0.000000,0.000000 +3165,-3.0,90.000035,0.000000,0.000000 +3166,-3.0,90.000035,0.000000,0.000000 +3167,-3.0,90.000035,0.000000,0.000000 +3168,-3.0,90.000035,0.000000,0.000000 +3169,-3.0,90.000035,0.000000,0.000000 +3170,-3.0,90.000035,0.000000,0.000000 +3171,-3.0,90.000035,0.000000,0.000000 +3172,-3.0,90.000035,0.000000,0.000000 +3173,-3.0,90.000035,0.000000,0.000000 +3174,-3.0,90.000035,0.000000,0.000000 +3175,-3.0,90.000035,0.000000,0.000000 +3176,-3.0,90.000035,0.000000,0.000000 +3177,-3.0,90.000035,0.000000,0.000000 +3178,-3.0,90.000035,0.000000,0.000000 +3179,-3.0,90.000035,0.000000,0.000000 +3180,-3.0,90.000035,0.000000,0.000000 +3181,-3.0,90.000035,0.000000,0.000000 +3182,-3.0,90.000035,0.000000,0.000000 +3183,-3.0,90.000035,0.000000,0.000000 +3184,-3.0,90.000035,0.000000,0.000000 +3185,-3.0,90.000035,0.000000,0.000000 +3186,-3.0,90.000035,0.000000,0.000000 +3187,-3.0,90.000035,0.000000,0.000000 +3188,-3.0,90.000035,0.000000,0.000000 +3189,-3.0,90.000035,0.000000,0.000000 +3190,-3.0,90.000035,0.000000,0.000000 +3191,-3.0,90.000035,0.000000,0.000000 +3192,-3.0,90.000035,0.000000,0.000000 +3193,-3.0,90.000035,0.000000,0.000000 +3194,-3.0,90.000035,0.000000,0.000000 +3195,-3.0,90.000035,0.000000,0.000000 +3196,-3.0,90.000035,0.000000,0.000000 +3197,-3.0,90.000035,0.000000,0.000000 +3198,-3.0,90.000035,0.000000,0.000000 +3199,-3.0,90.000035,0.000000,0.000000 +3200,-3.0,90.000035,0.000000,0.000000 +3201,-3.0,90.000035,0.000000,0.000000 +3202,-3.0,90.000035,0.000000,0.000000 +3203,-3.0,90.000035,0.000000,0.000000 +3204,-3.0,90.000035,0.000000,0.000000 +3205,-3.0,90.000035,0.000000,0.000000 +3206,-3.0,90.000035,0.000000,0.000000 +3207,-3.0,90.000035,0.000000,0.000000 +3208,-3.0,90.000035,0.000000,0.000000 +3209,-3.0,90.000035,0.000000,0.000000 +3210,-3.0,90.000035,0.000000,0.000000 +3211,-3.0,90.000035,0.000000,0.000000 +3212,-3.0,90.000035,0.000000,0.000000 +3213,-3.0,90.000035,0.000000,0.000000 +3214,-3.0,90.000035,0.000000,0.000000 +3215,-3.0,90.000035,0.000000,0.000000 +3216,-3.0,90.000035,0.000000,0.000000 +3217,-3.0,90.000035,0.000000,0.000000 +3218,-3.0,90.000035,0.000000,0.000000 +3219,-3.0,90.000035,0.000000,0.000000 +3220,-3.0,90.000035,0.000000,0.000000 +3221,-3.0,90.000035,0.000000,0.000000 +3222,-3.0,90.000035,0.000000,0.000000 +3223,-3.0,90.000035,0.000000,0.000000 +3224,-3.0,90.000035,0.000000,0.000000 +3225,-3.0,90.000035,0.000000,0.000000 +3226,-3.0,90.000035,0.000000,0.000000 +3227,-3.0,90.000035,0.000000,0.000000 +3228,-3.0,90.000035,0.000000,0.000000 +3229,-3.0,90.000035,0.000000,0.000000 +3230,-3.0,90.000035,0.000000,0.000000 +3231,-3.0,90.000035,0.000000,0.000000 +3232,-3.0,90.000035,0.000000,0.000000 +3233,-3.0,90.000035,0.000000,0.000000 +3234,-3.0,90.000035,0.000000,0.000000 +3235,-3.0,90.000035,0.000000,0.000000 +3236,-3.0,90.000035,0.000000,0.000000 +3237,-3.0,90.000035,0.000000,0.000000 +3238,-3.0,90.000035,0.000000,0.000000 +3239,-3.0,90.000035,0.000000,0.000000 +3240,-3.0,90.000035,0.000000,0.000000 +3241,-3.0,90.000035,0.000000,0.000000 +3242,-3.0,90.000035,0.000000,0.000000 +3243,-3.0,90.000035,0.000000,0.000000 +3244,-3.0,90.000035,0.000000,0.000000 +3245,-3.0,90.000035,0.000000,0.000000 +3246,-3.0,90.000035,0.000000,0.000000 +3247,-3.0,90.000035,0.000000,0.000000 +3248,-3.0,90.000035,0.000000,0.000000 +3249,-3.0,90.000035,0.000000,0.000000 +3250,-3.0,90.000035,0.000000,0.000000 +3251,-3.0,90.000035,0.000000,0.000000 +3252,-3.0,90.000035,0.000000,0.000000 +3253,-3.0,90.000035,0.000000,0.000000 +3254,-3.0,90.000035,0.000000,0.000000 +3255,-3.0,90.000035,0.000000,0.000000 +3256,-3.0,90.000035,0.000000,0.000000 +3257,-3.0,90.000035,0.000000,0.000000 +3258,-3.0,90.000035,0.000000,0.000000 +3259,-3.0,90.000035,0.000000,0.000000 +3260,-3.0,90.000035,0.000000,0.000000 +3261,-3.0,90.000035,0.000000,0.000000 +3262,-3.0,90.000035,0.000000,0.000000 +3263,-3.0,90.000035,0.000000,0.000000 +3264,-3.0,90.000035,0.000000,0.000000 +3265,-3.0,90.000035,0.000000,0.000000 +3266,-3.0,90.000035,0.000000,0.000000 +3267,-3.0,90.000035,0.000000,0.000000 +3268,-3.0,90.000035,0.000000,0.000000 +3269,-3.0,90.000035,0.000000,0.000000 +3270,-3.0,90.000035,0.000000,0.000000 +3271,-3.0,90.000035,0.000000,0.000000 +3272,-3.0,90.000035,0.000000,0.000000 +3273,-3.0,90.000035,0.000000,0.000000 +3274,-3.0,90.000035,0.000000,0.000000 +3275,-3.0,90.000035,0.000000,0.000000 +3276,-3.0,90.000035,0.000000,0.000000 +3277,-3.0,90.000035,0.000000,0.000000 +3278,-3.0,90.000035,0.000000,0.000000 +3279,-3.0,90.000035,0.000000,0.000000 +3280,-3.0,90.000035,0.000000,0.000000 +3281,-3.0,90.000035,0.000000,0.000000 +3282,-3.0,90.000035,0.000000,0.000000 +3283,-3.0,90.000035,0.000000,0.000000 +3284,-3.0,90.000035,0.000000,0.000000 +3285,-3.0,90.000035,0.000000,0.000000 +3286,-3.0,90.000035,0.000000,0.000000 +3287,-3.0,90.000035,0.000000,0.000000 +3288,-3.0,90.000035,0.000000,0.000000 +3289,-3.0,90.000035,0.000000,0.000000 +3290,-3.0,90.000035,0.000000,0.000000 +3291,-3.0,90.000035,0.000000,0.000000 +3292,-3.0,90.000035,0.000000,0.000000 +3293,-3.0,90.000035,0.000000,0.000000 +3294,-3.0,90.000035,0.000000,0.000000 +3295,-3.0,90.000035,0.000000,0.000000 +3296,-3.0,90.000035,0.000000,0.000000 +3297,-3.0,90.000035,0.000000,0.000000 +3298,-3.0,90.000035,0.000000,0.000000 +3299,-3.0,90.000035,0.000000,0.000000 +3300,-3.0,90.000035,0.000000,0.000000 +3301,-3.0,90.000035,0.000000,0.000000 +3302,-3.0,90.000035,0.000000,0.000000 +3303,-3.0,90.000035,0.000000,0.000000 +3304,-3.0,90.000035,0.000000,0.000000 +3305,-3.0,90.000035,0.000000,0.000000 +3306,-3.0,90.000035,0.000000,0.000000 +3307,-3.0,90.000035,0.000000,0.000000 +3308,-3.0,90.000035,0.000000,0.000000 +3309,-3.0,90.000035,0.000000,0.000000 +3310,-3.0,90.000035,0.000000,0.000000 +3311,-3.0,90.000035,0.000000,0.000000 +3312,-3.0,90.000035,0.000000,0.000000 +3313,-3.0,90.000035,0.000000,0.000000 +3314,-3.0,90.000035,0.000000,0.000000 +3315,-3.0,90.000035,0.000000,0.000000 +3316,-3.0,90.000035,0.000000,0.000000 +3317,-3.0,90.000035,0.000000,0.000000 +3318,-3.0,90.000035,0.000000,0.000000 +3319,-3.0,90.000035,0.000000,0.000000 +3320,-3.0,90.000035,0.000000,0.000000 +3321,-3.0,90.000035,0.000000,0.000000 +3322,-3.0,90.000035,0.000000,0.000000 +3323,-3.0,90.000035,0.000000,0.000000 +3324,-3.0,90.000035,0.000000,0.000000 +3325,-3.0,90.000035,0.000000,0.000000 +3326,-3.0,90.000035,0.000000,0.000000 +3327,-3.0,90.000035,0.000000,0.000000 +3328,-3.0,90.000035,0.000000,0.000000 +3329,-3.0,90.000035,0.000000,0.000000 +3330,-3.0,90.000035,0.000000,0.000000 +3331,-3.0,90.000035,0.000000,0.000000 +3332,-3.0,90.000035,0.000000,0.000000 +3333,-3.0,90.000035,0.000000,0.000000 +3334,-3.0,90.000035,0.000000,0.000000 +3335,-3.0,90.000035,0.000000,0.000000 +3336,-3.0,90.000035,0.000000,0.000000 +3337,-3.0,90.000035,0.000000,0.000000 +3338,-3.0,90.000035,0.000000,0.000000 +3339,-3.0,90.000035,0.000000,0.000000 +3340,-3.0,90.000035,0.000000,0.000000 +3341,-3.0,90.000035,0.000000,0.000000 +3342,-3.0,90.000035,0.000000,0.000000 +3343,-3.0,90.000035,0.000000,0.000000 +3344,-3.0,90.000035,0.000000,0.000000 +3345,-3.0,90.000035,0.000000,0.000000 +3346,-3.0,90.000035,0.000000,0.000000 +3347,-3.0,90.000035,0.000000,0.000000 +3348,-3.0,90.000035,0.000000,0.000000 +3349,-3.0,90.000035,0.000000,0.000000 +3350,-3.0,90.000035,0.000000,0.000000 +3351,-3.0,90.000035,0.000000,0.000000 +3352,-3.0,90.000035,0.000000,0.000000 +3353,-3.0,90.000035,0.000000,0.000000 +3354,-3.0,90.000035,0.000000,0.000000 +3355,-3.0,90.000035,0.000000,0.000000 +3356,-3.0,90.000035,0.000000,0.000000 +3357,-3.0,90.000035,0.000000,0.000000 +3358,-3.0,90.000035,0.000000,0.000000 +3359,-3.0,90.000035,0.000000,0.000000 +3360,-3.0,90.000035,0.000000,0.000000 +3361,-3.0,90.000035,0.000000,0.000000 +3362,-3.0,90.000035,0.000000,0.000000 +3363,-3.0,90.000035,0.000000,0.000000 +3364,-3.0,90.000035,0.000000,0.000000 +3365,-3.0,90.000035,0.000000,0.000000 +3366,-3.0,90.000035,0.000000,0.000000 +3367,-3.0,90.000035,0.000000,0.000000 +3368,-3.0,90.000035,0.000000,0.000000 +3369,-3.0,90.000035,0.000000,0.000000 +3370,-3.0,90.000035,0.000000,0.000000 +3371,-3.0,90.000035,0.000000,0.000000 +3372,-3.0,90.000035,0.000000,0.000000 +3373,-3.0,90.000035,0.000000,0.000000 +3374,-3.0,90.000035,0.000000,0.000000 +3375,-3.0,90.000035,0.000000,0.000000 +3376,-3.0,90.000035,0.000000,0.000000 +3377,-3.0,90.000035,0.000000,0.000000 +3378,-3.0,90.000035,0.000000,0.000000 +3379,-3.0,90.000035,0.000000,0.000000 +3380,-3.0,90.000035,0.000000,0.000000 +3381,-3.0,90.000035,0.000000,0.000000 +3382,-3.0,90.000035,0.000000,0.000000 +3383,-3.0,90.000035,0.000000,0.000000 +3384,-3.0,90.000035,0.000000,0.000000 +3385,-3.0,90.000035,0.000000,0.000000 +3386,-3.0,90.000035,0.000000,0.000000 +3387,-3.0,90.000035,0.000000,0.000000 +3388,-3.0,90.000035,0.000000,0.000000 +3389,-3.0,90.000035,0.000000,0.000000 +3390,-3.0,90.000035,0.000000,0.000000 +3391,-3.0,90.000035,0.000000,0.000000 +3392,-3.0,90.000035,0.000000,0.000000 +3393,-3.0,90.000035,0.000000,0.000000 +3394,-3.0,90.000035,0.000000,0.000000 +3395,-3.0,90.000035,0.000000,0.000000 +3396,-3.0,90.000035,0.000000,0.000000 +3397,-3.0,90.000035,0.000000,0.000000 +3398,-3.0,90.000035,0.000000,0.000000 +3399,-3.0,90.000035,0.000000,0.000000 +3400,-3.0,90.000035,0.000000,0.000000 +3401,-3.0,90.000035,0.000000,0.000000 +3402,-3.0,90.000035,0.000000,0.000000 +3403,-3.0,90.000035,0.000000,0.000000 +3404,-3.0,90.000035,0.000000,0.000000 +3405,-3.0,90.000035,0.000000,0.000000 +3406,-3.0,90.000035,0.000000,0.000000 +3407,-3.0,90.000035,0.000000,0.000000 +3408,-3.0,90.000035,0.000000,0.000000 +3409,-3.0,90.000035,0.000000,0.000000 +3410,-3.0,90.000035,0.000000,0.000000 +3411,-3.0,90.000035,0.000000,0.000000 +3412,-3.0,90.000035,0.000000,0.000000 +3413,-3.0,90.000035,0.000000,0.000000 +3414,-3.0,90.000035,0.000000,0.000000 +3415,-3.0,90.000035,0.000000,0.000000 +3416,-3.0,90.000035,0.000000,0.000000 +3417,-3.0,90.000035,0.000000,0.000000 +3418,-3.0,90.000035,0.000000,0.000000 +3419,-3.0,90.000035,0.000000,0.000000 +3420,-3.0,90.000035,0.000000,0.000000 +3421,-3.0,90.000035,0.000000,0.000000 +3422,-3.0,90.000035,0.000000,0.000000 +3423,-3.0,90.000035,0.000000,0.000000 +3424,-3.0,90.000035,0.000000,0.000000 +3425,-3.0,90.000035,0.000000,0.000000 +3426,-3.0,90.000035,0.000000,0.000000 +3427,-3.0,90.000035,0.000000,0.000000 +3428,-3.0,90.000035,0.000000,0.000000 +3429,-3.0,90.000035,0.000000,0.000000 +3430,-3.0,90.000035,0.000000,0.000000 +3431,-3.0,90.000035,0.000000,0.000000 +3432,-3.0,90.000035,0.000000,0.000000 +3433,-3.0,90.000035,0.000000,0.000000 +3434,-3.0,90.000035,0.000000,0.000000 +3435,-3.0,90.000035,0.000000,0.000000 +3436,-3.0,90.000035,0.000000,0.000000 +3437,-3.0,90.000035,0.000000,0.000000 +3438,-3.0,90.000035,0.000000,0.000000 +3439,-3.0,90.000035,0.000000,0.000000 +3440,-3.0,90.000035,0.000000,0.000000 +3441,-3.0,90.000035,0.000000,0.000000 +3442,-3.0,90.000035,0.000000,0.000000 +3443,-3.0,90.000035,0.000000,0.000000 +3444,-3.0,90.000035,0.000000,0.000000 +3445,-3.0,90.000035,0.000000,0.000000 +3446,-3.0,90.000035,0.000000,0.000000 +3447,-3.0,90.000035,0.000000,0.000000 +3448,-3.0,90.000035,0.000000,0.000000 +3449,-3.0,90.000035,0.000000,0.000000 +3450,-3.0,90.000035,0.000000,0.000000 +3451,-3.0,90.000035,0.000000,0.000000 +3452,-3.0,90.000035,0.000000,0.000000 +3453,-3.0,90.000035,0.000000,0.000000 +3454,-3.0,90.000035,0.000000,0.000000 +3455,-3.0,90.000035,0.000000,0.000000 +3456,-3.0,90.000035,0.000000,0.000000 +3457,-3.0,90.000035,0.000000,0.000000 +3458,-3.0,90.000035,0.000000,0.000000 +3459,-3.0,90.000035,0.000000,0.000000 +3460,-3.0,90.000035,0.000000,0.000000 +3461,-3.0,90.000035,0.000000,0.000000 +3462,-3.0,90.000035,0.000000,0.000000 +3463,-3.0,90.000035,0.000000,0.000000 +3464,-3.0,90.000035,0.000000,0.000000 +3465,-3.0,90.000035,0.000000,0.000000 +3466,-3.0,90.000035,0.000000,0.000000 +3467,-3.0,90.000035,0.000000,0.000000 +3468,-3.0,90.000035,0.000000,0.000000 +3469,-3.0,90.000035,0.000000,0.000000 +3470,-3.0,90.000035,0.000000,0.000000 +3471,-3.0,90.000035,0.000000,0.000000 +3472,-3.0,90.000035,0.000000,0.000000 +3473,-3.0,90.000035,0.000000,0.000000 +3474,-3.0,90.000035,0.000000,0.000000 +3475,-3.0,90.000035,0.000000,0.000000 +3476,-3.0,90.000035,0.000000,0.000000 +3477,-3.0,90.000035,0.000000,0.000000 +3478,-3.0,90.000035,0.000000,0.000000 +3479,-3.0,90.000035,0.000000,0.000000 +3480,-3.0,90.000035,0.000000,0.000000 +3481,-3.0,90.000035,0.000000,0.000000 +3482,-3.0,90.000035,0.000000,0.000000 +3483,-3.0,90.000035,0.000000,0.000000 +3484,-3.0,90.000035,0.000000,0.000000 +3485,-3.0,90.000035,0.000000,0.000000 +3486,-3.0,90.000035,0.000000,0.000000 +3487,-3.0,90.000035,0.000000,0.000000 +3488,-3.0,90.000035,0.000000,0.000000 +3489,-3.0,90.000035,0.000000,0.000000 +3490,-3.0,90.000035,0.000000,0.000000 +3491,-3.0,90.000035,0.000000,0.000000 +3492,-3.0,90.000035,0.000000,0.000000 +3493,-3.0,90.000035,0.000000,0.000000 +3494,-3.0,90.000035,0.000000,0.000000 +3495,-3.0,90.000035,0.000000,0.000000 +3496,-3.0,90.000035,0.000000,0.000000 +3497,-3.0,90.000035,0.000000,0.000000 +3498,-3.0,90.000035,0.000000,0.000000 +3499,-3.0,90.000035,0.000000,0.000000 +3500,-3.0,90.000035,0.000000,0.000000 +3501,-3.0,90.000035,0.000000,0.000000 +3502,-3.0,90.000035,0.000000,0.000000 +3503,-3.0,90.000035,0.000000,0.000000 +3504,-3.0,90.000035,0.000000,0.000000 +3505,-3.0,90.000035,0.000000,0.000000 +3506,-3.0,90.000035,0.000000,0.000000 +3507,-3.0,90.000035,0.000000,0.000000 +3508,-3.0,90.000035,0.000000,0.000000 +3509,-3.0,90.000035,0.000000,0.000000 +3510,-3.0,90.000035,0.000000,0.000000 +3511,-3.0,90.000035,0.000000,0.000000 +3512,-3.0,90.000035,0.000000,0.000000 +3513,-3.0,90.000035,0.000000,0.000000 +3514,-3.0,90.000035,0.000000,0.000000 +3515,-3.0,90.000035,0.000000,0.000000 +3516,-3.0,90.000035,0.000000,0.000000 +3517,-3.0,90.000035,0.000000,0.000000 +3518,-3.0,90.000035,0.000000,0.000000 +3519,-3.0,90.000035,0.000000,0.000000 +3520,-3.0,90.000035,0.000000,0.000000 +3521,-3.0,90.000035,0.000000,0.000000 +3522,-3.0,90.000035,0.000000,0.000000 +3523,-3.0,90.000035,0.000000,0.000000 +3524,-3.0,90.000035,0.000000,0.000000 +3525,-3.0,90.000035,0.000000,0.000000 +3526,-3.0,90.000035,0.000000,0.000000 +3527,-3.0,90.000035,0.000000,0.000000 +3528,-3.0,90.000035,0.000000,0.000000 +3529,-3.0,90.000035,0.000000,0.000000 +3530,-3.0,90.000035,0.000000,0.000000 +3531,-3.0,90.000035,0.000000,0.000000 +3532,-3.0,90.000035,0.000000,0.000000 +3533,-3.0,90.000035,0.000000,0.000000 +3534,-3.0,90.000035,0.000000,0.000000 +3535,-3.0,90.000035,0.000000,0.000000 +3536,-3.0,90.000035,0.000000,0.000000 +3537,-3.0,90.000035,0.000000,0.000000 +3538,-3.0,90.000035,0.000000,0.000000 +3539,-3.0,90.000035,0.000000,0.000000 +3540,-3.0,90.000035,0.000000,0.000000 +3541,-3.0,90.000035,0.000000,0.000000 +3542,-3.0,90.000035,0.000000,0.000000 +3543,-3.0,90.000035,0.000000,0.000000 +3544,-3.0,90.000035,0.000000,0.000000 +3545,-3.0,90.000035,0.000000,0.000000 +3546,-3.0,90.000035,0.000000,0.000000 +3547,-3.0,90.000035,0.000000,0.000000 +3548,-3.0,90.000035,0.000000,0.000000 +3549,-3.0,90.000035,0.000000,0.000000 +3550,-3.0,90.000035,0.000000,0.000000 +3551,-3.0,90.000035,0.000000,0.000000 +3552,-3.0,90.000035,0.000000,0.000000 +3553,-3.0,90.000035,0.000000,0.000000 +3554,-3.0,90.000035,0.000000,0.000000 +3555,-3.0,90.000035,0.000000,0.000000 +3556,-3.0,90.000035,0.000000,0.000000 +3557,-3.0,90.000035,0.000000,0.000000 +3558,-3.0,90.000035,0.000000,0.000000 +3559,-3.0,90.000035,0.000000,0.000000 +3560,-3.0,90.000035,0.000000,0.000000 +3561,-3.0,90.000035,0.000000,0.000000 +3562,-3.0,90.000035,0.000000,0.000000 +3563,-3.0,90.000035,0.000000,0.000000 +3564,-3.0,90.000035,0.000000,0.000000 +3565,-3.0,90.000035,0.000000,0.000000 +3566,-3.0,90.000035,0.000000,0.000000 +3567,-3.0,90.000035,0.000000,0.000000 +3568,-3.0,90.000035,0.000000,0.000000 +3569,-3.0,90.000035,0.000000,0.000000 +3570,-3.0,90.000035,0.000000,0.000000 +3571,-3.0,90.000035,0.000000,0.000000 +3572,-3.0,90.000035,0.000000,0.000000 +3573,-3.0,90.000035,0.000000,0.000000 +3574,-3.0,90.000035,0.000000,0.000000 +3575,-3.0,90.000035,0.000000,0.000000 +3576,-3.0,90.000035,0.000000,0.000000 +3577,-3.0,90.000035,0.000000,0.000000 +3578,-3.0,90.000035,0.000000,0.000000 +3579,-3.0,90.000035,0.000000,0.000000 +3580,-3.0,90.000035,0.000000,0.000000 +3581,-3.0,90.000035,0.000000,0.000000 +3582,-3.0,90.000035,0.000000,0.000000 +3583,-3.0,90.000035,0.000000,0.000000 +3584,-3.0,90.000035,0.000000,0.000000 +3585,-3.0,90.000035,0.000000,0.000000 +3586,-3.0,90.000035,0.000000,0.000000 +3587,-3.0,90.000035,0.000000,0.000000 +3588,-3.0,90.000035,0.000000,0.000000 +3589,-3.0,90.000035,0.000000,0.000000 +3590,-3.0,90.000035,0.000000,0.000000 +3591,-3.0,90.000035,0.000000,0.000000 +3592,-3.0,90.000035,0.000000,0.000000 +3593,-3.0,90.000035,0.000000,0.000000 +3594,-3.0,90.000035,0.000000,0.000000 +3595,-3.0,90.000035,0.000000,0.000000 +3596,-3.0,90.000035,0.000000,0.000000 +3597,-3.0,90.000035,0.000000,0.000000 +3598,-3.0,90.000035,0.000000,0.000000 +3599,-3.0,90.000035,0.000000,0.000000 +3600,-3.0,90.000035,0.000000,0.000000 +3601,-3.0,90.000035,0.000000,0.000000 +3602,-3.0,90.000035,0.000000,0.000000 +3603,-3.0,90.000035,0.000000,0.000000 +3604,-3.0,90.000035,0.000000,0.000000 +3605,-3.0,90.000035,0.000000,0.000000 +3606,-3.0,90.000035,0.000000,0.000000 +3607,-3.0,90.000035,0.000000,0.000000 +3608,-3.0,90.000035,0.000000,0.000000 +3609,-3.0,90.000035,0.000000,0.000000 +3610,-3.0,90.000035,0.000000,0.000000 +3611,-3.0,90.000035,0.000000,0.000000 +3612,-3.0,90.000035,0.000000,0.000000 +3613,-3.0,90.000035,0.000000,0.000000 +3614,-3.0,90.000035,0.000000,0.000000 +3615,-3.0,90.000035,0.000000,0.000000 +3616,-3.0,90.000035,0.000000,0.000000 +3617,-3.0,90.000035,0.000000,0.000000 +3618,-3.0,90.000035,0.000000,0.000000 +3619,-3.0,90.000035,0.000000,0.000000 +3620,-3.0,90.000035,0.000000,0.000000 +3621,-3.0,90.000035,0.000000,0.000000 +3622,-3.0,90.000035,0.000000,0.000000 +3623,-3.0,90.000035,0.000000,0.000000 +3624,-3.0,90.000035,0.000000,0.000000 +3625,-3.0,90.000035,0.000000,0.000000 +3626,-3.0,90.000035,0.000000,0.000000 +3627,-3.0,90.000035,0.000000,0.000000 +3628,-3.0,90.000035,0.000000,0.000000 +3629,-3.0,90.000035,0.000000,0.000000 +3630,-3.0,90.000035,0.000000,0.000000 +3631,-3.0,90.000035,0.000000,0.000000 +3632,-3.0,90.000035,0.000000,0.000000 +3633,-3.0,90.000035,0.000000,0.000000 +3634,-3.0,90.000035,0.000000,0.000000 +3635,-3.0,90.000035,0.000000,0.000000 +3636,-3.0,90.000035,0.000000,0.000000 +3637,-3.0,90.000035,0.000000,0.000000 +3638,-3.0,90.000035,0.000000,0.000000 +3639,-3.0,90.000035,0.000000,0.000000 +3640,-3.0,90.000035,0.000000,0.000000 +3641,-3.0,90.000035,0.000000,0.000000 +3642,-3.0,90.000035,0.000000,0.000000 +3643,-3.0,90.000035,0.000000,0.000000 +3644,-3.0,90.000035,0.000000,0.000000 +3645,-3.0,90.000035,0.000000,0.000000 +3646,-3.0,90.000035,0.000000,0.000000 +3647,-3.0,90.000035,0.000000,0.000000 +3648,-3.0,90.000035,0.000000,0.000000 +3649,-3.0,90.000035,0.000000,0.000000 +3650,-3.0,90.000035,0.000000,0.000000 +3651,-3.0,90.000035,0.000000,0.000000 +3652,-3.0,90.000035,0.000000,0.000000 +3653,-3.0,90.000035,0.000000,0.000000 +3654,-3.0,90.000035,0.000000,0.000000 +3655,-3.0,90.000035,0.000000,0.000000 +3656,-3.0,90.000035,0.000000,0.000000 +3657,-3.0,90.000035,0.000000,0.000000 +3658,-3.0,90.000035,0.000000,0.000000 +3659,-3.0,90.000035,0.000000,0.000000 +3660,-3.0,90.000035,0.000000,0.000000 +3661,-3.0,90.000035,0.000000,0.000000 +3662,-3.0,90.000035,0.000000,0.000000 +3663,-3.0,90.000035,0.000000,0.000000 +3664,-3.0,90.000035,0.000000,0.000000 +3665,-3.0,90.000035,0.000000,0.000000 +3666,-3.0,90.000035,0.000000,0.000000 +3667,-3.0,90.000035,0.000000,0.000000 +3668,-3.0,90.000035,0.000000,0.000000 +3669,-3.0,90.000035,0.000000,0.000000 +3670,-3.0,90.000035,0.000000,0.000000 +3671,-3.0,90.000035,0.000000,0.000000 +3672,-3.0,90.000035,0.000000,0.000000 +3673,-3.0,90.000035,0.000000,0.000000 +3674,-3.0,90.000035,0.000000,0.000000 +3675,-3.0,90.000035,0.000000,0.000000 +3676,-3.0,90.000035,0.000000,0.000000 +3677,-3.0,90.000035,0.000000,0.000000 +3678,-3.0,90.000035,0.000000,0.000000 +3679,-3.0,90.000035,0.000000,0.000000 +3680,-3.0,90.000035,0.000000,0.000000 +3681,-3.0,90.000035,0.000000,0.000000 +3682,-3.0,90.000035,0.000000,0.000000 +3683,-3.0,90.000035,0.000000,0.000000 +3684,-3.0,90.000035,0.000000,0.000000 +3685,-3.0,90.000035,0.000000,0.000000 +3686,-3.0,90.000035,0.000000,0.000000 +3687,-3.0,90.000035,0.000000,0.000000 +3688,-3.0,90.000035,0.000000,0.000000 +3689,-3.0,90.000035,0.000000,0.000000 +3690,-3.0,90.000035,0.000000,0.000000 +3691,-3.0,90.000035,0.000000,0.000000 +3692,-3.0,90.000035,0.000000,0.000000 +3693,-3.0,90.000035,0.000000,0.000000 +3694,-3.0,90.000035,0.000000,0.000000 +3695,-3.0,90.000035,0.000000,0.000000 +3696,-3.0,90.000035,0.000000,0.000000 +3697,-3.0,90.000035,0.000000,0.000000 +3698,-3.0,90.000035,0.000000,0.000000 +3699,-3.0,90.000035,0.000000,0.000000 +3700,-3.0,90.000035,0.000000,0.000000 +3701,-3.0,90.000035,0.000000,0.000000 +3702,-3.0,90.000035,0.000000,0.000000 +3703,-3.0,90.000035,0.000000,0.000000 +3704,-3.0,90.000035,0.000000,0.000000 +3705,-3.0,90.000035,0.000000,0.000000 +3706,-3.0,90.000035,0.000000,0.000000 +3707,-3.0,90.000035,0.000000,0.000000 +3708,-3.0,90.000035,0.000000,0.000000 +3709,-3.0,90.000035,0.000000,0.000000 +3710,-3.0,90.000035,0.000000,0.000000 +3711,-3.0,90.000035,0.000000,0.000000 +3712,-3.0,90.000035,0.000000,0.000000 +3713,-3.0,90.000035,0.000000,0.000000 +3714,-3.0,90.000035,0.000000,0.000000 +3715,-3.0,90.000035,0.000000,0.000000 +3716,-3.0,90.000035,0.000000,0.000000 +3717,-3.0,90.000035,0.000000,0.000000 +3718,-3.0,90.000035,0.000000,0.000000 +3719,-3.0,90.000035,0.000000,0.000000 +3720,-3.0,90.000035,0.000000,0.000000 +3721,-3.0,90.000035,0.000000,0.000000 +3722,-3.0,90.000035,0.000000,0.000000 +3723,-3.0,90.000035,0.000000,0.000000 +3724,-3.0,90.000035,0.000000,0.000000 +3725,-3.0,90.000035,0.000000,0.000000 +3726,-3.0,90.000035,0.000000,0.000000 +3727,-3.0,90.000035,0.000000,0.000000 +3728,-3.0,90.000035,0.000000,0.000000 +3729,-3.0,90.000035,0.000000,0.000000 +3730,-3.0,90.000035,0.000000,0.000000 +3731,-3.0,90.000035,0.000000,0.000000 +3732,-3.0,90.000035,0.000000,0.000000 +3733,-3.0,90.000035,0.000000,0.000000 +3734,-3.0,90.000035,0.000000,0.000000 +3735,-3.0,90.000035,0.000000,0.000000 +3736,-3.0,90.000035,0.000000,0.000000 +3737,-3.0,90.000035,0.000000,0.000000 +3738,-3.0,90.000035,0.000000,0.000000 +3739,-3.0,90.000035,0.000000,0.000000 +3740,-3.0,90.000035,0.000000,0.000000 +3741,-3.0,90.000035,0.000000,0.000000 +3742,-3.0,90.000035,0.000000,0.000000 +3743,-3.0,90.000035,0.000000,0.000000 +3744,-3.0,90.000035,0.000000,0.000000 +3745,-3.0,90.000035,0.000000,0.000000 +3746,-3.0,90.000035,0.000000,0.000000 +3747,-3.0,90.000035,0.000000,0.000000 +3748,-3.0,90.000035,0.000000,0.000000 +3749,-3.0,90.000035,0.000000,0.000000 +3750,-3.0,90.000035,0.000000,0.000000 +3751,-3.0,90.000035,0.000000,0.000000 +3752,-3.0,90.000035,0.000000,0.000000 +3753,-3.0,90.000035,0.000000,0.000000 +3754,-3.0,90.000035,0.000000,0.000000 +3755,-3.0,90.000035,0.000000,0.000000 +3756,-3.0,90.000035,0.000000,0.000000 +3757,-3.0,90.000035,0.000000,0.000000 +3758,-3.0,90.000035,0.000000,0.000000 +3759,-3.0,90.000035,0.000000,0.000000 +3760,-3.0,90.000035,0.000000,0.000000 +3761,-3.0,90.000035,0.000000,0.000000 +3762,-3.0,90.000035,0.000000,0.000000 +3763,-3.0,90.000035,0.000000,0.000000 +3764,-3.0,90.000035,0.000000,0.000000 +3765,-3.0,90.000035,0.000000,0.000000 +3766,-3.0,90.000035,0.000000,0.000000 +3767,-3.0,90.000035,0.000000,0.000000 +3768,-3.0,90.000035,0.000000,0.000000 +3769,-3.0,90.000035,0.000000,0.000000 +3770,-3.0,90.000035,0.000000,0.000000 +3771,-3.0,90.000035,0.000000,0.000000 +3772,-3.0,90.000035,0.000000,0.000000 +3773,-3.0,90.000035,0.000000,0.000000 +3774,-3.0,90.000035,0.000000,0.000000 +3775,-3.0,90.000035,0.000000,0.000000 +3776,-3.0,90.000035,0.000000,0.000000 +3777,-3.0,90.000035,0.000000,0.000000 +3778,-3.0,90.000035,0.000000,0.000000 +3779,-3.0,90.000035,0.000000,0.000000 +3780,-3.0,90.000035,0.000000,0.000000 +3781,-3.0,90.000035,0.000000,0.000000 +3782,-3.0,90.000035,0.000000,0.000000 +3783,-3.0,90.000035,0.000000,0.000000 +3784,-3.0,90.000035,0.000000,0.000000 +3785,-3.0,90.000035,0.000000,0.000000 +3786,-3.0,90.000035,0.000000,0.000000 +3787,-3.0,90.000035,0.000000,0.000000 +3788,-3.0,90.000035,0.000000,0.000000 +3789,-3.0,90.000035,0.000000,0.000000 +3790,-3.0,90.000035,0.000000,0.000000 +3791,-3.0,90.000035,0.000000,0.000000 +3792,-3.0,90.000035,0.000000,0.000000 +3793,-3.0,90.000035,0.000000,0.000000 +3794,-3.0,90.000035,0.000000,0.000000 +3795,-3.0,90.000035,0.000000,0.000000 +3796,-3.0,90.000035,0.000000,0.000000 +3797,-3.0,90.000035,0.000000,0.000000 +3798,-3.0,90.000035,0.000000,0.000000 +3799,-3.0,90.000035,0.000000,0.000000 +3800,-3.0,90.000035,0.000000,0.000000 +3801,-3.0,90.000035,0.000000,0.000000 +3802,-3.0,90.000035,0.000000,0.000000 +3803,-3.0,90.000035,0.000000,0.000000 +3804,-3.0,90.000035,0.000000,0.000000 +3805,-3.0,90.000035,0.000000,0.000000 +3806,-3.0,90.000035,0.000000,0.000000 +3807,-3.0,90.000035,0.000000,0.000000 +3808,-3.0,90.000035,0.000000,0.000000 +3809,-3.0,90.000035,0.000000,0.000000 +3810,-3.0,90.000035,0.000000,0.000000 +3811,-3.0,90.000035,0.000000,0.000000 +3812,-3.0,90.000035,0.000000,0.000000 +3813,-3.0,90.000035,0.000000,0.000000 +3814,-3.0,90.000035,0.000000,0.000000 +3815,-3.0,90.000035,0.000000,0.000000 +3816,-3.0,90.000035,0.000000,0.000000 +3817,-3.0,90.000035,0.000000,0.000000 +3818,-3.0,90.000035,0.000000,0.000000 +3819,-3.0,90.000035,0.000000,0.000000 +3820,-3.0,90.000035,0.000000,0.000000 +3821,-3.0,90.000035,0.000000,0.000000 +3822,-3.0,90.000035,0.000000,0.000000 +3823,-3.0,90.000035,0.000000,0.000000 +3824,-3.0,90.000035,0.000000,0.000000 +3825,-3.0,90.000035,0.000000,0.000000 +3826,-3.0,90.000035,0.000000,0.000000 +3827,-3.0,90.000035,0.000000,0.000000 +3828,-3.0,90.000035,0.000000,0.000000 +3829,-3.0,90.000035,0.000000,0.000000 +3830,-3.0,90.000035,0.000000,0.000000 +3831,-3.0,90.000035,0.000000,0.000000 +3832,-3.0,90.000035,0.000000,0.000000 +3833,-3.0,90.000035,0.000000,0.000000 +3834,-3.0,90.000035,0.000000,0.000000 +3835,-3.0,90.000035,0.000000,0.000000 +3836,-3.0,90.000035,0.000000,0.000000 +3837,-3.0,90.000035,0.000000,0.000000 +3838,-3.0,90.000035,0.000000,0.000000 +3839,-3.0,90.000035,0.000000,0.000000 +3840,-3.0,90.000035,0.000000,0.000000 +3841,-3.0,90.000035,0.000000,0.000000 +3842,-3.0,90.000035,0.000000,0.000000 +3843,-3.0,90.000035,0.000000,0.000000 +3844,-3.0,90.000035,0.000000,0.000000 +3845,-3.0,90.000035,0.000000,0.000000 +3846,-3.0,90.000035,0.000000,0.000000 +3847,-3.0,90.000035,0.000000,0.000000 +3848,-3.0,90.000035,0.000000,0.000000 +3849,-3.0,90.000035,0.000000,0.000000 +3850,-3.0,90.000035,0.000000,0.000000 +3851,-3.0,90.000035,0.000000,0.000000 +3852,-3.0,90.000035,0.000000,0.000000 +3853,-3.0,90.000035,0.000000,0.000000 +3854,-3.0,90.000035,0.000000,0.000000 +3855,-3.0,90.000035,0.000000,0.000000 +3856,-3.0,90.000035,0.000000,0.000000 +3857,-3.0,90.000035,0.000000,0.000000 +3858,-3.0,90.000035,0.000000,0.000000 +3859,-3.0,90.000035,0.000000,0.000000 +3860,-3.0,90.000035,0.000000,0.000000 +3861,-3.0,90.000035,0.000000,0.000000 +3862,-3.0,90.000035,0.000000,0.000000 +3863,-3.0,90.000035,0.000000,0.000000 +3864,-3.0,90.000035,0.000000,0.000000 +3865,-3.0,90.000035,0.000000,0.000000 +3866,-3.0,90.000035,0.000000,0.000000 +3867,-3.0,90.000035,0.000000,0.000000 +3868,-3.0,90.000035,0.000000,0.000000 +3869,-3.0,90.000035,0.000000,0.000000 +3870,-3.0,90.000035,0.000000,0.000000 +3871,-3.0,90.000035,0.000000,0.000000 +3872,-3.0,90.000035,0.000000,0.000000 +3873,-3.0,90.000035,0.000000,0.000000 +3874,-3.0,90.000035,0.000000,0.000000 +3875,-3.0,90.000035,0.000000,0.000000 +3876,-3.0,90.000035,0.000000,0.000000 +3877,-3.0,90.000035,0.000000,0.000000 +3878,-3.0,90.000035,0.000000,0.000000 +3879,-3.0,90.000035,0.000000,0.000000 +3880,-3.0,90.000035,0.000000,0.000000 +3881,-3.0,90.000035,0.000000,0.000000 +3882,-3.0,90.000035,0.000000,0.000000 +3883,-3.0,90.000035,0.000000,0.000000 +3884,-3.0,90.000035,0.000000,0.000000 +3885,-3.0,90.000035,0.000000,0.000000 +3886,-3.0,90.000035,0.000000,0.000000 +3887,-3.0,90.000035,0.000000,0.000000 +3888,-3.0,90.000035,0.000000,0.000000 +3889,-3.0,90.000035,0.000000,0.000000 +3890,-3.0,90.000035,0.000000,0.000000 +3891,-3.0,90.000035,0.000000,0.000000 +3892,-3.0,90.000035,0.000000,0.000000 +3893,-3.0,90.000035,0.000000,0.000000 +3894,-3.0,90.000035,0.000000,0.000000 +3895,-3.0,90.000035,0.000000,0.000000 +3896,-3.0,90.000035,0.000000,0.000000 +3897,-3.0,90.000035,0.000000,0.000000 +3898,-3.0,90.000035,0.000000,0.000000 +3899,-3.0,90.000035,0.000000,0.000000 +3900,-3.0,90.000035,0.000000,0.000000 +3901,-3.0,90.000035,0.000000,0.000000 +3902,-3.0,90.000035,0.000000,0.000000 +3903,-3.0,90.000035,0.000000,0.000000 +3904,-3.0,90.000035,0.000000,0.000000 +3905,-3.0,90.000035,0.000000,0.000000 +3906,-3.0,90.000035,0.000000,0.000000 +3907,-3.0,90.000035,0.000000,0.000000 +3908,-3.0,90.000035,0.000000,0.000000 +3909,-3.0,90.000035,0.000000,0.000000 +3910,-3.0,90.000035,0.000000,0.000000 +3911,-3.0,90.000035,0.000000,0.000000 +3912,-3.0,90.000035,0.000000,0.000000 +3913,-3.0,90.000035,0.000000,0.000000 +3914,-3.0,90.000035,0.000000,0.000000 +3915,-3.0,90.000035,0.000000,0.000000 +3916,-3.0,90.000035,0.000000,0.000000 +3917,-3.0,90.000035,0.000000,0.000000 +3918,-3.0,90.000035,0.000000,0.000000 +3919,-3.0,90.000035,0.000000,0.000000 +3920,-3.0,90.000035,0.000000,0.000000 +3921,-3.0,90.000035,0.000000,0.000000 +3922,-3.0,90.000035,0.000000,0.000000 +3923,-3.0,90.000035,0.000000,0.000000 +3924,-3.0,90.000035,0.000000,0.000000 +3925,-3.0,90.000035,0.000000,0.000000 +3926,-3.0,90.000035,0.000000,0.000000 +3927,-3.0,90.000035,0.000000,0.000000 +3928,-3.0,90.000035,0.000000,0.000000 +3929,-3.0,90.000035,0.000000,0.000000 +3930,-3.0,90.000035,0.000000,0.000000 +3931,-3.0,90.000035,0.000000,0.000000 +3932,-3.0,90.000035,0.000000,0.000000 +3933,-3.0,90.000035,0.000000,0.000000 +3934,-3.0,90.000035,0.000000,0.000000 +3935,-3.0,90.000035,0.000000,0.000000 +3936,-3.0,90.000035,0.000000,0.000000 +3937,-3.0,90.000035,0.000000,0.000000 +3938,-3.0,90.000035,0.000000,0.000000 +3939,-3.0,90.000035,0.000000,0.000000 +3940,-3.0,90.000035,0.000000,0.000000 +3941,-3.0,90.000035,0.000000,0.000000 +3942,-3.0,90.000035,0.000000,0.000000 +3943,-3.0,90.000035,0.000000,0.000000 +3944,-3.0,90.000035,0.000000,0.000000 +3945,-3.0,90.000035,0.000000,0.000000 +3946,-3.0,90.000035,0.000000,0.000000 +3947,-3.0,90.000035,0.000000,0.000000 +3948,-3.0,90.000035,0.000000,0.000000 +3949,-3.0,90.000035,0.000000,0.000000 +3950,-3.0,90.000035,0.000000,0.000000 +3951,-3.0,90.000035,0.000000,0.000000 +3952,-3.0,90.000035,0.000000,0.000000 +3953,-3.0,90.000035,0.000000,0.000000 +3954,-3.0,90.000035,0.000000,0.000000 +3955,-3.0,90.000035,0.000000,0.000000 +3956,-3.0,90.000035,0.000000,0.000000 +3957,-3.0,90.000035,0.000000,0.000000 +3958,-3.0,90.000035,0.000000,0.000000 +3959,-3.0,90.000035,0.000000,0.000000 +3960,-3.0,90.000035,0.000000,0.000000 +3961,-3.0,90.000035,0.000000,0.000000 +3962,-3.0,90.000035,0.000000,0.000000 +3963,-3.0,90.000035,0.000000,0.000000 +3964,-3.0,90.000035,0.000000,0.000000 +3965,-3.0,90.000035,0.000000,0.000000 +3966,-3.0,90.000035,0.000000,0.000000 +3967,-3.0,90.000035,0.000000,0.000000 +3968,-3.0,90.000035,0.000000,0.000000 +3969,-3.0,90.000035,0.000000,0.000000 +3970,-3.0,90.000035,0.000000,0.000000 +3971,-3.0,90.000035,0.000000,0.000000 +3972,-3.0,90.000035,0.000000,0.000000 +3973,-3.0,90.000035,0.000000,0.000000 +3974,-3.0,90.000035,0.000000,0.000000 +3975,-3.0,90.000035,0.000000,0.000000 +3976,-3.0,90.000035,0.000000,0.000000 +3977,-3.0,90.000035,0.000000,0.000000 +3978,-3.0,90.000035,0.000000,0.000000 +3979,-3.0,90.000035,0.000000,0.000000 +3980,-3.0,90.000035,0.000000,0.000000 +3981,-3.0,90.000035,0.000000,0.000000 +3982,-3.0,90.000035,0.000000,0.000000 +3983,-3.0,90.000035,0.000000,0.000000 +3984,-3.0,90.000035,0.000000,0.000000 +3985,-3.0,90.000035,0.000000,0.000000 +3986,-3.0,90.000035,0.000000,0.000000 +3987,-3.0,90.000035,0.000000,0.000000 +3988,-3.0,90.000035,0.000000,0.000000 +3989,-3.0,90.000035,0.000000,0.000000 +3990,-3.0,90.000035,0.000000,0.000000 +3991,-3.0,90.000035,0.000000,0.000000 +3992,-3.0,90.000035,0.000000,0.000000 +3993,-3.0,90.000035,0.000000,0.000000 +3994,-3.0,90.000035,0.000000,0.000000 +3995,-3.0,90.000035,0.000000,0.000000 +3996,-3.0,90.000035,0.000000,0.000000 +3997,-3.0,90.000035,0.000000,0.000000 +3998,-3.0,90.000035,0.000000,0.000000 +3999,-3.0,90.000035,0.000000,0.000000 +4000,-3.0,90.000035,0.000000,0.000000 +4001,-3.0,90.000035,0.000000,0.000000 +4002,-3.0,90.000035,0.000000,0.000000 +4003,-3.0,90.000035,0.000000,0.000000 +4004,-3.0,90.000035,0.000000,0.000000 +4005,-3.0,90.000035,0.000000,0.000000 +4006,-3.0,90.000035,0.000000,0.000000 +4007,-3.0,90.000035,0.000000,0.000000 +4008,-3.0,90.000035,0.000000,0.000000 +4009,-3.0,90.000035,0.000000,0.000000 +4010,-3.0,90.000035,0.000000,0.000000 +4011,-3.0,90.000035,0.000000,0.000000 +4012,-3.0,90.000035,0.000000,0.000000 +4013,-3.0,90.000035,0.000000,0.000000 +4014,-3.0,90.000035,0.000000,0.000000 +4015,-3.0,90.000035,0.000000,0.000000 +4016,-3.0,90.000035,0.000000,0.000000 +4017,-3.0,90.000035,0.000000,0.000000 +4018,-3.0,90.000035,0.000000,0.000000 +4019,-3.0,90.000035,0.000000,0.000000 +4020,-3.0,90.000035,0.000000,0.000000 +4021,-3.0,90.000035,0.000000,0.000000 +4022,-3.0,90.000035,0.000000,0.000000 +4023,-3.0,90.000035,0.000000,0.000000 +4024,-3.0,90.000035,0.000000,0.000000 +4025,-3.0,90.000035,0.000000,0.000000 +4026,-3.0,90.000035,0.000000,0.000000 +4027,-3.0,90.000035,0.000000,0.000000 +4028,-3.0,90.000035,0.000000,0.000000 +4029,-3.0,90.000035,0.000000,0.000000 +4030,-3.0,90.000035,0.000000,0.000000 +4031,-3.0,90.000035,0.000000,0.000000 +4032,-3.0,90.000035,0.000000,0.000000 +4033,-3.0,90.000035,0.000000,0.000000 +4034,-3.0,90.000035,0.000000,0.000000 +4035,-3.0,90.000035,0.000000,0.000000 +4036,-3.0,90.000035,0.000000,0.000000 +4037,-3.0,90.000035,0.000000,0.000000 +4038,-3.0,90.000035,0.000000,0.000000 +4039,-3.0,90.000035,0.000000,0.000000 +4040,-3.0,90.000035,0.000000,0.000000 +4041,-3.0,90.000035,0.000000,0.000000 +4042,-3.0,90.000035,0.000000,0.000000 +4043,-3.0,90.000035,0.000000,0.000000 +4044,-3.0,90.000035,0.000000,0.000000 +4045,-3.0,90.000035,0.000000,0.000000 +4046,-3.0,90.000035,0.000000,0.000000 +4047,-3.0,90.000035,0.000000,0.000000 +4048,-3.0,90.000035,0.000000,0.000000 +4049,-3.0,90.000035,0.000000,0.000000 +4050,-3.0,90.000035,0.000000,0.000000 +4051,-3.0,90.000035,0.000000,0.000000 +4052,-3.0,90.000035,0.000000,0.000000 +4053,-3.0,90.000035,0.000000,0.000000 +4054,-3.0,90.000035,0.000000,0.000000 +4055,-3.0,90.000035,0.000000,0.000000 +4056,-3.0,90.000035,0.000000,0.000000 +4057,-3.0,90.000035,0.000000,0.000000 +4058,-3.0,90.000035,0.000000,0.000000 +4059,-3.0,90.000035,0.000000,0.000000 +4060,-3.0,90.000035,0.000000,0.000000 +4061,-3.0,90.000035,0.000000,0.000000 +4062,-3.0,90.000035,0.000000,0.000000 +4063,-3.0,90.000035,0.000000,0.000000 +4064,-3.0,90.000035,0.000000,0.000000 +4065,-3.0,90.000035,0.000000,0.000000 +4066,-3.0,90.000035,0.000000,0.000000 +4067,-3.0,90.000035,0.000000,0.000000 +4068,-3.0,90.000035,0.000000,0.000000 +4069,-3.0,90.000035,0.000000,0.000000 +4070,-3.0,90.000035,0.000000,0.000000 +4071,-3.0,90.000035,0.000000,0.000000 +4072,-3.0,90.000035,0.000000,0.000000 +4073,-3.0,90.000035,0.000000,0.000000 +4074,-3.0,90.000035,0.000000,0.000000 +4075,-3.0,90.000035,0.000000,0.000000 +4076,-3.0,90.000035,0.000000,0.000000 +4077,-3.0,90.000035,0.000000,0.000000 +4078,-3.0,90.000035,0.000000,0.000000 +4079,-3.0,90.000035,0.000000,0.000000 +4080,-3.0,90.000035,0.000000,0.000000 +4081,-3.0,90.000035,0.000000,0.000000 +4082,-3.0,90.000035,0.000000,0.000000 +4083,-3.0,90.000035,0.000000,0.000000 +4084,-3.0,90.000035,0.000000,0.000000 +4085,-3.0,90.000035,0.000000,0.000000 +4086,-3.0,90.000035,0.000000,0.000000 +4087,-3.0,90.000035,0.000000,0.000000 +4088,-3.0,90.000035,0.000000,0.000000 +4089,-3.0,90.000035,0.000000,0.000000 +4090,-3.0,90.000035,0.000000,0.000000 +4091,-3.0,90.000035,0.000000,0.000000 +4092,-3.0,90.000035,0.000000,0.000000 +4093,-3.0,90.000035,0.000000,0.000000 +4094,-3.0,90.000035,0.000000,0.000000 +4095,-3.0,90.000035,0.000000,0.000000 +4096,-3.0,90.000035,0.000000,0.000000 +4097,-3.0,90.000035,0.000000,0.000000 +4098,-3.0,90.000035,0.000000,0.000000 +4099,-3.0,90.000035,0.000000,0.000000 +4100,-3.0,90.000035,0.000000,0.000000 +4101,-3.0,90.000035,0.000000,0.000000 +4102,-3.0,90.000035,0.000000,0.000000 +4103,-3.0,90.000035,0.000000,0.000000 +4104,-3.0,90.000035,0.000000,0.000000 +4105,-3.0,90.000035,0.000000,0.000000 +4106,-3.0,90.000035,0.000000,0.000000 +4107,-3.0,90.000035,0.000000,0.000000 +4108,-3.0,90.000035,0.000000,0.000000 +4109,-3.0,90.000035,0.000000,0.000000 +4110,-3.0,90.000035,0.000000,0.000000 +4111,-3.0,90.000035,0.000000,0.000000 +4112,-3.0,90.000035,0.000000,0.000000 +4113,-3.0,90.000035,0.000000,0.000000 +4114,-3.0,90.000035,0.000000,0.000000 +4115,-3.0,90.000035,0.000000,0.000000 +4116,-3.0,90.000035,0.000000,0.000000 +4117,-3.0,90.000035,0.000000,0.000000 +4118,-3.0,90.000035,0.000000,0.000000 +4119,-3.0,90.000035,0.000000,0.000000 +4120,-3.0,90.000035,0.000000,0.000000 +4121,-3.0,90.000035,0.000000,0.000000 +4122,-3.0,90.000035,0.000000,0.000000 +4123,-3.0,90.000035,0.000000,0.000000 +4124,-3.0,90.000035,0.000000,0.000000 +4125,-3.0,90.000035,0.000000,0.000000 +4126,-3.0,90.000035,0.000000,0.000000 +4127,-3.0,90.000035,0.000000,0.000000 +4128,-3.0,90.000035,0.000000,0.000000 +4129,-3.0,90.000035,0.000000,0.000000 +4130,-3.0,90.000035,0.000000,0.000000 +4131,-3.0,90.000035,0.000000,0.000000 +4132,-3.0,90.000035,0.000000,0.000000 +4133,-3.0,90.000035,0.000000,0.000000 +4134,-3.0,90.000035,0.000000,0.000000 +4135,-3.0,90.000035,0.000000,0.000000 +4136,-3.0,90.000035,0.000000,0.000000 +4137,-3.0,90.000035,0.000000,0.000000 +4138,-3.0,90.000035,0.000000,0.000000 +4139,-3.0,90.000035,0.000000,0.000000 +4140,-3.0,90.000035,0.000000,0.000000 +4141,-3.0,90.000035,0.000000,0.000000 +4142,-3.0,90.000035,0.000000,0.000000 +4143,-3.0,90.000035,0.000000,0.000000 +4144,-3.0,90.000035,0.000000,0.000000 +4145,-3.0,90.000035,0.000000,0.000000 +4146,-3.0,90.000035,0.000000,0.000000 +4147,-3.0,90.000035,0.000000,0.000000 +4148,-3.0,90.000035,0.000000,0.000000 +4149,-3.0,90.000035,0.000000,0.000000 +4150,-3.0,90.000035,0.000000,0.000000 +4151,-3.0,90.000035,0.000000,0.000000 +4152,-3.0,90.000035,0.000000,0.000000 +4153,-3.0,90.000035,0.000000,0.000000 +4154,-3.0,90.000035,0.000000,0.000000 +4155,-3.0,90.000035,0.000000,0.000000 +4156,-3.0,90.000035,0.000000,0.000000 +4157,-3.0,90.000035,0.000000,0.000000 +4158,-3.0,90.000035,0.000000,0.000000 +4159,-3.0,90.000035,0.000000,0.000000 +4160,-3.0,90.000035,0.000000,0.000000 +4161,-3.0,90.000035,0.000000,0.000000 +4162,-3.0,90.000035,0.000000,0.000000 +4163,-3.0,90.000035,0.000000,0.000000 +4164,-3.0,90.000035,0.000000,0.000000 +4165,-3.0,90.000035,0.000000,0.000000 +4166,-3.0,90.000035,0.000000,0.000000 +4167,-3.0,90.000035,0.000000,0.000000 +4168,-3.0,90.000035,0.000000,0.000000 +4169,-3.0,90.000035,0.000000,0.000000 +4170,-3.0,90.000035,0.000000,0.000000 +4171,-3.0,90.000035,0.000000,0.000000 +4172,-3.0,90.000035,0.000000,0.000000 +4173,-3.0,90.000035,0.000000,0.000000 +4174,-3.0,90.000035,0.000000,0.000000 +4175,-3.0,90.000035,0.000000,0.000000 +4176,-3.0,90.000035,0.000000,0.000000 +4177,-3.0,90.000035,0.000000,0.000000 +4178,-3.0,90.000035,0.000000,0.000000 +4179,-3.0,90.000035,0.000000,0.000000 +4180,-3.0,90.000035,0.000000,0.000000 +4181,-3.0,90.000035,0.000000,0.000000 +4182,-3.0,90.000035,0.000000,0.000000 +4183,-3.0,90.000035,0.000000,0.000000 +4184,-3.0,90.000035,0.000000,0.000000 +4185,-3.0,90.000035,0.000000,0.000000 +4186,-3.0,90.000035,0.000000,0.000000 +4187,-3.0,90.000035,0.000000,0.000000 +4188,-3.0,90.000035,0.000000,0.000000 +4189,-3.0,90.000035,0.000000,0.000000 +4190,-3.0,90.000035,0.000000,0.000000 +4191,-3.0,90.000035,0.000000,0.000000 +4192,-3.0,90.000035,0.000000,0.000000 +4193,-3.0,90.000035,0.000000,0.000000 +4194,-3.0,90.000035,0.000000,0.000000 +4195,-3.0,90.000035,0.000000,0.000000 +4196,-3.0,90.000035,0.000000,0.000000 +4197,-3.0,90.000035,0.000000,0.000000 +4198,-3.0,90.000035,0.000000,0.000000 +4199,-3.0,90.000035,0.000000,0.000000 +4200,-3.0,90.000035,0.000000,0.000000 +4201,-3.0,90.000035,0.000000,0.000000 +4202,-3.0,90.000035,0.000000,0.000000 +4203,-3.0,90.000035,0.000000,0.000000 +4204,-3.0,90.000035,0.000000,0.000000 +4205,-3.0,90.000035,0.000000,0.000000 +4206,-3.0,90.000035,0.000000,0.000000 +4207,-3.0,90.000035,0.000000,0.000000 +4208,-3.0,90.000035,0.000000,0.000000 +4209,-3.0,90.000035,0.000000,0.000000 +4210,-3.0,90.000035,0.000000,0.000000 +4211,-3.0,90.000035,0.000000,0.000000 +4212,-3.0,90.000035,0.000000,0.000000 +4213,-3.0,90.000035,0.000000,0.000000 +4214,-3.0,90.000035,0.000000,0.000000 +4215,-3.0,90.000035,0.000000,0.000000 +4216,-3.0,90.000035,0.000000,0.000000 +4217,-3.0,90.000035,0.000000,0.000000 +4218,-3.0,90.000035,0.000000,0.000000 +4219,-3.0,90.000035,0.000000,0.000000 +4220,-3.0,90.000035,0.000000,0.000000 +4221,-3.0,90.000035,0.000000,0.000000 +4222,-3.0,90.000035,0.000000,0.000000 +4223,-3.0,90.000035,0.000000,0.000000 +4224,-3.0,90.000035,0.000000,0.000000 +4225,-3.0,90.000035,0.000000,0.000000 +4226,-3.0,90.000035,0.000000,0.000000 +4227,-3.0,90.000035,0.000000,0.000000 +4228,-3.0,90.000035,0.000000,0.000000 +4229,-3.0,90.000035,0.000000,0.000000 +4230,-3.0,90.000035,0.000000,0.000000 +4231,-3.0,90.000035,0.000000,0.000000 +4232,-3.0,90.000035,0.000000,0.000000 +4233,-3.0,90.000035,0.000000,0.000000 +4234,-3.0,90.000035,0.000000,0.000000 +4235,-3.0,90.000035,0.000000,0.000000 +4236,-3.0,90.000035,0.000000,0.000000 +4237,-3.0,90.000035,0.000000,0.000000 +4238,-3.0,90.000035,0.000000,0.000000 +4239,-3.0,90.000035,0.000000,0.000000 +4240,-3.0,90.000035,0.000000,0.000000 +4241,-3.0,90.000035,0.000000,0.000000 +4242,-3.0,90.000035,0.000000,0.000000 +4243,-3.0,90.000035,0.000000,0.000000 +4244,-3.0,90.000035,0.000000,0.000000 +4245,-3.0,90.000035,0.000000,0.000000 +4246,-3.0,90.000035,0.000000,0.000000 +4247,-3.0,90.000035,0.000000,0.000000 +4248,-3.0,90.000035,0.000000,0.000000 +4249,-3.0,90.000035,0.000000,0.000000 +4250,-3.0,90.000035,0.000000,0.000000 +4251,-3.0,90.000035,0.000000,0.000000 +4252,-3.0,90.000035,0.000000,0.000000 +4253,-3.0,90.000035,0.000000,0.000000 +4254,-3.0,90.000035,0.000000,0.000000 +4255,-3.0,90.000035,0.000000,0.000000 +4256,-3.0,90.000035,0.000000,0.000000 +4257,-3.0,90.000035,0.000000,0.000000 +4258,-3.0,90.000035,0.000000,0.000000 +4259,-3.0,90.000035,0.000000,0.000000 +4260,-3.0,90.000035,0.000000,0.000000 +4261,-3.0,90.000035,0.000000,0.000000 +4262,-3.0,90.000035,0.000000,0.000000 +4263,-3.0,90.000035,0.000000,0.000000 +4264,-3.0,90.000035,0.000000,0.000000 +4265,-3.0,90.000035,0.000000,0.000000 +4266,-3.0,90.000035,0.000000,0.000000 +4267,-3.0,90.000035,0.000000,0.000000 +4268,-3.0,90.000035,0.000000,0.000000 +4269,-3.0,90.000035,0.000000,0.000000 +4270,-3.0,90.000035,0.000000,0.000000 +4271,-3.0,90.000035,0.000000,0.000000 +4272,-3.0,90.000035,0.000000,0.000000 +4273,-3.0,90.000035,0.000000,0.000000 +4274,-3.0,90.000035,0.000000,0.000000 +4275,-3.0,90.000035,0.000000,0.000000 +4276,-3.0,90.000035,0.000000,0.000000 +4277,-3.0,90.000035,0.000000,0.000000 +4278,-3.0,90.000035,0.000000,0.000000 +4279,-3.0,90.000035,0.000000,0.000000 +4280,-3.0,90.000035,0.000000,0.000000 +4281,-3.0,90.000035,0.000000,0.000000 +4282,-3.0,90.000035,0.000000,0.000000 +4283,-3.0,90.000035,0.000000,0.000000 +4284,-3.0,90.000035,0.000000,0.000000 +4285,-3.0,90.000035,0.000000,0.000000 +4286,-3.0,90.000035,0.000000,0.000000 +4287,-3.0,90.000035,0.000000,0.000000 +4288,-3.0,90.000035,0.000000,0.000000 +4289,-3.0,90.000035,0.000000,0.000000 +4290,-3.0,90.000035,0.000000,0.000000 +4291,-3.0,90.000035,0.000000,0.000000 +4292,-3.0,90.000035,0.000000,0.000000 +4293,-3.0,90.000035,0.000000,0.000000 +4294,-3.0,90.000035,0.000000,0.000000 +4295,-3.0,90.000035,0.000000,0.000000 +4296,-3.0,90.000035,0.000000,0.000000 +4297,-3.0,90.000035,0.000000,0.000000 +4298,-3.0,90.000035,0.000000,0.000000 +4299,-3.0,90.000035,0.000000,0.000000 +4300,-3.0,90.000035,0.000000,0.000000 +4301,-3.0,90.000035,0.000000,0.000000 +4302,-3.0,90.000035,0.000000,0.000000 +4303,-3.0,90.000035,0.000000,0.000000 +4304,-3.0,90.000035,0.000000,0.000000 +4305,-3.0,90.000035,0.000000,0.000000 +4306,-3.0,90.000035,0.000000,0.000000 +4307,-3.0,90.000035,0.000000,0.000000 +4308,-3.0,90.000035,0.000000,0.000000 +4309,-3.0,90.000035,0.000000,0.000000 +4310,-3.0,90.000035,0.000000,0.000000 +4311,-3.0,90.000035,0.000000,0.000000 +4312,-3.0,90.000035,0.000000,0.000000 +4313,-3.0,90.000035,0.000000,0.000000 +4314,-3.0,90.000035,0.000000,0.000000 +4315,-3.0,90.000035,0.000000,0.000000 +4316,-3.0,90.000035,0.000000,0.000000 +4317,-3.0,90.000035,0.000000,0.000000 +4318,-3.0,90.000035,0.000000,0.000000 +4319,-3.0,90.000035,0.000000,0.000000 +4320,-3.0,90.000035,0.000000,0.000000 +4321,-3.0,90.000035,0.000000,0.000000 +4322,-3.0,90.000035,0.000000,0.000000 +4323,-3.0,90.000035,0.000000,0.000000 +4324,-3.0,90.000035,0.000000,0.000000 +4325,-3.0,90.000035,0.000000,0.000000 +4326,-3.0,90.000035,0.000000,0.000000 +4327,-3.0,90.000035,0.000000,0.000000 +4328,-3.0,90.000035,0.000000,0.000000 +4329,-3.0,90.000035,0.000000,0.000000 +4330,-3.0,90.000035,0.000000,0.000000 +4331,-3.0,90.000035,0.000000,0.000000 +4332,-3.0,90.000035,0.000000,0.000000 +4333,-3.0,90.000035,0.000000,0.000000 +4334,-3.0,90.000035,0.000000,0.000000 +4335,-3.0,90.000035,0.000000,0.000000 +4336,-3.0,90.000035,0.000000,0.000000 +4337,-3.0,90.000035,0.000000,0.000000 +4338,-3.0,90.000035,0.000000,0.000000 +4339,-3.0,90.000035,0.000000,0.000000 +4340,-3.0,90.000035,0.000000,0.000000 +4341,-3.0,90.000035,0.000000,0.000000 +4342,-3.0,90.000035,0.000000,0.000000 +4343,-3.0,90.000035,0.000000,0.000000 +4344,-3.0,90.000035,0.000000,0.000000 +4345,-3.0,90.000035,0.000000,0.000000 +4346,-3.0,90.000035,0.000000,0.000000 +4347,-3.0,90.000035,0.000000,0.000000 +4348,-3.0,90.000035,0.000000,0.000000 +4349,-3.0,90.000035,0.000000,0.000000 +4350,-3.0,90.000035,0.000000,0.000000 +4351,-3.0,90.000035,0.000000,0.000000 +4352,-3.0,90.000035,0.000000,0.000000 +4353,-3.0,90.000035,0.000000,0.000000 +4354,-3.0,90.000035,0.000000,0.000000 +4355,-3.0,90.000035,0.000000,0.000000 +4356,-3.0,90.000035,0.000000,0.000000 +4357,-3.0,90.000035,0.000000,0.000000 +4358,-3.0,90.000035,0.000000,0.000000 +4359,-3.0,90.000035,0.000000,0.000000 +4360,-3.0,90.000035,0.000000,0.000000 +4361,-3.0,90.000035,0.000000,0.000000 +4362,-3.0,90.000035,0.000000,0.000000 +4363,-3.0,90.000035,0.000000,0.000000 +4364,-3.0,90.000035,0.000000,0.000000 +4365,-3.0,90.000035,0.000000,0.000000 +4366,-3.0,90.000035,0.000000,0.000000 +4367,-3.0,90.000035,0.000000,0.000000 +4368,-3.0,90.000035,0.000000,0.000000 +4369,-3.0,90.000035,0.000000,0.000000 +4370,-3.0,90.000035,0.000000,0.000000 +4371,-3.0,90.000035,0.000000,0.000000 +4372,-3.0,90.000035,0.000000,0.000000 +4373,-3.0,90.000035,0.000000,0.000000 +4374,-3.0,90.000035,0.000000,0.000000 +4375,-3.0,90.000035,0.000000,0.000000 +4376,-3.0,90.000035,0.000000,0.000000 +4377,-3.0,90.000035,0.000000,0.000000 +4378,-3.0,90.000035,0.000000,0.000000 +4379,-3.0,90.000035,0.000000,0.000000 +4380,-3.0,90.000035,0.000000,0.000000 +4381,-3.0,90.000035,0.000000,0.000000 +4382,-3.0,90.000035,0.000000,0.000000 +4383,-3.0,90.000035,0.000000,0.000000 +4384,-3.0,90.000035,0.000000,0.000000 +4385,-3.0,90.000035,0.000000,0.000000 +4386,-3.0,90.000035,0.000000,0.000000 +4387,-3.0,90.000035,0.000000,0.000000 +4388,-3.0,90.000035,0.000000,0.000000 +4389,-3.0,90.000035,0.000000,0.000000 +4390,-3.0,90.000035,0.000000,0.000000 +4391,-3.0,90.000035,0.000000,0.000000 +4392,-3.0,90.000035,0.000000,0.000000 +4393,-3.0,90.000035,0.000000,0.000000 +4394,-3.0,90.000035,0.000000,0.000000 +4395,-3.0,90.000035,0.000000,0.000000 +4396,-3.0,90.000035,0.000000,0.000000 +4397,-3.0,90.000035,0.000000,0.000000 +4398,-3.0,90.000035,0.000000,0.000000 +4399,-3.0,90.000035,0.000000,0.000000 +4400,-3.0,90.000035,0.000000,0.000000 +4401,-3.0,90.000035,0.000000,0.000000 +4402,-3.0,90.000035,0.000000,0.000000 +4403,-3.0,90.000035,0.000000,0.000000 +4404,-3.0,90.000035,0.000000,0.000000 +4405,-3.0,90.000035,0.000000,0.000000 +4406,-3.0,90.000035,0.000000,0.000000 +4407,-3.0,90.000035,0.000000,0.000000 +4408,-3.0,90.000035,0.000000,0.000000 +4409,-3.0,90.000035,0.000000,0.000000 +4410,-3.0,90.000035,0.000000,0.000000 +4411,-3.0,90.000035,0.000000,0.000000 +4412,-3.0,90.000035,0.000000,0.000000 +4413,-3.0,90.000035,0.000000,0.000000 +4414,-3.0,90.000035,0.000000,0.000000 +4415,-3.0,90.000035,0.000000,0.000000 +4416,-3.0,90.000035,0.000000,0.000000 +4417,-3.0,90.000035,0.000000,0.000000 +4418,-3.0,90.000035,0.000000,0.000000 +4419,-3.0,90.000035,0.000000,0.000000 +4420,-3.0,90.000035,0.000000,0.000000 +4421,-3.0,90.000035,0.000000,0.000000 +4422,-3.0,90.000035,0.000000,0.000000 +4423,-3.0,90.000035,0.000000,0.000000 +4424,-3.0,90.000035,0.000000,0.000000 +4425,-3.0,90.000035,0.000000,0.000000 +4426,-3.0,90.000035,0.000000,0.000000 +4427,-3.0,90.000035,0.000000,0.000000 +4428,-3.0,90.000035,0.000000,0.000000 +4429,-3.0,90.000035,0.000000,0.000000 +4430,-3.0,90.000035,0.000000,0.000000 +4431,-3.0,90.000035,0.000000,0.000000 +4432,-3.0,90.000035,0.000000,0.000000 +4433,-3.0,90.000035,0.000000,0.000000 +4434,-3.0,90.000035,0.000000,0.000000 +4435,-3.0,90.000035,0.000000,0.000000 +4436,-3.0,90.000035,0.000000,0.000000 +4437,-3.0,90.000035,0.000000,0.000000 +4438,-3.0,90.000035,0.000000,0.000000 +4439,-3.0,90.000035,0.000000,0.000000 +4440,-3.0,90.000035,0.000000,0.000000 +4441,-3.0,90.000035,0.000000,0.000000 +4442,-3.0,90.000035,0.000000,0.000000 +4443,-3.0,90.000035,0.000000,0.000000 +4444,-3.0,90.000035,0.000000,0.000000 +4445,-3.0,90.000035,0.000000,0.000000 +4446,-3.0,90.000035,0.000000,0.000000 +4447,-3.0,90.000035,0.000000,0.000000 +4448,-3.0,90.000035,0.000000,0.000000 +4449,-3.0,90.000035,0.000000,0.000000 +4450,-3.0,90.000035,0.000000,0.000000 +4451,-3.0,90.000035,0.000000,0.000000 +4452,-3.0,90.000035,0.000000,0.000000 +4453,-3.0,90.000035,0.000000,0.000000 +4454,-3.0,90.000035,0.000000,0.000000 +4455,-3.0,90.000035,0.000000,0.000000 +4456,-3.0,90.000035,0.000000,0.000000 +4457,-3.0,90.000035,0.000000,0.000000 +4458,-3.0,90.000035,0.000000,0.000000 +4459,-3.0,90.000035,0.000000,0.000000 +4460,-3.0,90.000035,0.000000,0.000000 +4461,-3.0,90.000035,0.000000,0.000000 +4462,-3.0,90.000035,0.000000,0.000000 +4463,-3.0,90.000035,0.000000,0.000000 +4464,-3.0,90.000035,0.000000,0.000000 +4465,-3.0,90.000035,0.000000,0.000000 +4466,-3.0,90.000035,0.000000,0.000000 +4467,-3.0,90.000035,0.000000,0.000000 +4468,-3.0,90.000035,0.000000,0.000000 +4469,-3.0,90.000035,0.000000,0.000000 +4470,-3.0,90.000035,0.000000,0.000000 +4471,-3.0,90.000035,0.000000,0.000000 +4472,-3.0,90.000035,0.000000,0.000000 +4473,-3.0,90.000035,0.000000,0.000000 +4474,-3.0,90.000035,0.000000,0.000000 +4475,-3.0,90.000035,0.000000,0.000000 +4476,-3.0,90.000035,0.000000,0.000000 +4477,-3.0,90.000035,0.000000,0.000000 +4478,-3.0,90.000035,0.000000,0.000000 +4479,-3.0,90.000035,0.000000,0.000000 +4480,-3.0,90.000035,0.000000,0.000000 +4481,-3.0,90.000035,0.000000,0.000000 +4482,-3.0,90.000035,0.000000,0.000000 +4483,-3.0,90.000035,0.000000,0.000000 +4484,-3.0,90.000035,0.000000,0.000000 +4485,-3.0,90.000035,0.000000,0.000000 +4486,-3.0,90.000035,0.000000,0.000000 +4487,-3.0,90.000035,0.000000,0.000000 +4488,-3.0,90.000035,0.000000,0.000000 +4489,-3.0,90.000035,0.000000,0.000000 +4490,-3.0,90.000035,0.000000,0.000000 +4491,-3.0,90.000035,0.000000,0.000000 +4492,-3.0,90.000035,0.000000,0.000000 +4493,-3.0,90.000035,0.000000,0.000000 +4494,-3.0,90.000035,0.000000,0.000000 +4495,-3.0,90.000035,0.000000,0.000000 +4496,-3.0,90.000035,0.000000,0.000000 +4497,-3.0,90.000035,0.000000,0.000000 +4498,-3.0,90.000035,0.000000,0.000000 +4499,-3.0,90.000035,0.000000,0.000000 +4500,-3.0,90.000035,0.000000,0.000000 +4501,-3.0,90.000035,0.000000,0.000000 +4502,-3.0,90.000035,0.000000,0.000000 +4503,-3.0,90.000035,0.000000,0.000000 +4504,-3.0,90.000035,0.000000,0.000000 +4505,-3.0,90.000035,0.000000,0.000000 +4506,-3.0,90.000035,0.000000,0.000000 +4507,-3.0,90.000035,0.000000,0.000000 +4508,-3.0,90.000035,0.000000,0.000000 +4509,-3.0,90.000035,0.000000,0.000000 +4510,-3.0,90.000035,0.000000,0.000000 +4511,-3.0,90.000035,0.000000,0.000000 +4512,-3.0,90.000035,0.000000,0.000000 +4513,-3.0,90.000035,0.000000,0.000000 +4514,-3.0,90.000035,0.000000,0.000000 +4515,-3.0,90.000035,0.000000,0.000000 +4516,-3.0,90.000035,0.000000,0.000000 +4517,-3.0,90.000035,0.000000,0.000000 +4518,-3.0,90.000035,0.000000,0.000000 +4519,-3.0,90.000035,0.000000,0.000000 +4520,-3.0,90.000035,0.000000,0.000000 +4521,-3.0,90.000035,0.000000,0.000000 +4522,-3.0,90.000035,0.000000,0.000000 +4523,-3.0,90.000035,0.000000,0.000000 +4524,-3.0,90.000035,0.000000,0.000000 +4525,-3.0,90.000035,0.000000,0.000000 +4526,-3.0,90.000035,0.000000,0.000000 +4527,-3.0,90.000035,0.000000,0.000000 +4528,-3.0,90.000035,0.000000,0.000000 +4529,-3.0,90.000035,0.000000,0.000000 +4530,-3.0,90.000035,0.000000,0.000000 +4531,-3.0,90.000035,0.000000,0.000000 +4532,-3.0,90.000035,0.000000,0.000000 +4533,-3.0,90.000035,0.000000,0.000000 +4534,-3.0,90.000035,0.000000,0.000000 +4535,-3.0,90.000035,0.000000,0.000000 +4536,-3.0,90.000035,0.000000,0.000000 +4537,-3.0,90.000035,0.000000,0.000000 +4538,-3.0,90.000035,0.000000,0.000000 +4539,-3.0,90.000035,0.000000,0.000000 +4540,-3.0,90.000035,0.000000,0.000000 +4541,-3.0,90.000035,0.000000,0.000000 +4542,-3.0,90.000035,0.000000,0.000000 +4543,-3.0,90.000035,0.000000,0.000000 +4544,-3.0,90.000035,0.000000,0.000000 +4545,-3.0,90.000035,0.000000,0.000000 +4546,-3.0,90.000035,0.000000,0.000000 +4547,-3.0,90.000035,0.000000,0.000000 +4548,-3.0,90.000035,0.000000,0.000000 +4549,-3.0,90.000035,0.000000,0.000000 +4550,-3.0,90.000035,0.000000,0.000000 +4551,-3.0,90.000035,0.000000,0.000000 +4552,-3.0,90.000035,0.000000,0.000000 +4553,-3.0,90.000035,0.000000,0.000000 +4554,-3.0,90.000035,0.000000,0.000000 +4555,-3.0,90.000035,0.000000,0.000000 +4556,-3.0,90.000035,0.000000,0.000000 +4557,-3.0,90.000035,0.000000,0.000000 +4558,-3.0,90.000035,0.000000,0.000000 +4559,-3.0,90.000035,0.000000,0.000000 +4560,-3.0,90.000035,0.000000,0.000000 +4561,-3.0,90.000035,0.000000,0.000000 +4562,-3.0,90.000035,0.000000,0.000000 +4563,-3.0,90.000035,0.000000,0.000000 +4564,-3.0,90.000035,0.000000,0.000000 +4565,-3.0,90.000035,0.000000,0.000000 +4566,-3.0,90.000035,0.000000,0.000000 +4567,-3.0,90.000035,0.000000,0.000000 +4568,-3.0,90.000035,0.000000,0.000000 +4569,-3.0,90.000035,0.000000,0.000000 +4570,-3.0,90.000035,0.000000,0.000000 +4571,-3.0,90.000035,0.000000,0.000000 +4572,-3.0,90.000035,0.000000,0.000000 +4573,-3.0,90.000035,0.000000,0.000000 +4574,-3.0,90.000035,0.000000,0.000000 +4575,-3.0,90.000035,0.000000,0.000000 +4576,-3.0,90.000035,0.000000,0.000000 +4577,-3.0,90.000035,0.000000,0.000000 +4578,-3.0,90.000035,0.000000,0.000000 +4579,-3.0,90.000035,0.000000,0.000000 +4580,-3.0,90.000035,0.000000,0.000000 +4581,-3.0,90.000035,0.000000,0.000000 +4582,-3.0,90.000035,0.000000,0.000000 +4583,-3.0,90.000035,0.000000,0.000000 +4584,-3.0,90.000035,0.000000,0.000000 +4585,-3.0,90.000035,0.000000,0.000000 +4586,-3.0,90.000035,0.000000,0.000000 +4587,-3.0,90.000035,0.000000,0.000000 +4588,-3.0,90.000035,0.000000,0.000000 +4589,-3.0,90.000035,0.000000,0.000000 +4590,-3.0,90.000035,0.000000,0.000000 +4591,-3.0,90.000035,0.000000,0.000000 +4592,-3.0,90.000035,0.000000,0.000000 +4593,-3.0,90.000035,0.000000,0.000000 +4594,-3.0,90.000035,0.000000,0.000000 +4595,-3.0,90.000035,0.000000,0.000000 +4596,-3.0,90.000035,0.000000,0.000000 +4597,-3.0,90.000035,0.000000,0.000000 +4598,-3.0,90.000035,0.000000,0.000000 +4599,-3.0,90.000035,0.000000,0.000000 +4600,-3.0,90.000035,0.000000,0.000000 +4601,-3.0,90.000035,0.000000,0.000000 +4602,-3.0,90.000035,0.000000,0.000000 +4603,-3.0,90.000035,0.000000,0.000000 +4604,-3.0,90.000035,0.000000,0.000000 +4605,-3.0,90.000035,0.000000,0.000000 +4606,-3.0,90.000035,0.000000,0.000000 +4607,-3.0,90.000035,0.000000,0.000000 +4608,-3.0,90.000035,0.000000,0.000000 +4609,-3.0,90.000035,0.000000,0.000000 +4610,-3.0,90.000035,0.000000,0.000000 +4611,-3.0,90.000035,0.000000,0.000000 +4612,-3.0,90.000035,0.000000,0.000000 +4613,-3.0,90.000035,0.000000,0.000000 +4614,-3.0,90.000035,0.000000,0.000000 +4615,-3.0,90.000035,0.000000,0.000000 +4616,-3.0,90.000035,0.000000,0.000000 +4617,-3.0,90.000035,0.000000,0.000000 +4618,-3.0,90.000035,0.000000,0.000000 +4619,-3.0,90.000035,0.000000,0.000000 +4620,-3.0,90.000035,0.000000,0.000000 +4621,-3.0,90.000035,0.000000,0.000000 +4622,-3.0,90.000035,0.000000,0.000000 +4623,-3.0,90.000035,0.000000,0.000000 +4624,-3.0,90.000035,0.000000,0.000000 +4625,-3.0,90.000035,0.000000,0.000000 +4626,-3.0,90.000035,0.000000,0.000000 +4627,-3.0,90.000035,0.000000,0.000000 +4628,-3.0,90.000035,0.000000,0.000000 +4629,-3.0,90.000035,0.000000,0.000000 +4630,-3.0,90.000035,0.000000,0.000000 +4631,-3.0,90.000035,0.000000,0.000000 +4632,-3.0,90.000035,0.000000,0.000000 +4633,-3.0,90.000035,0.000000,0.000000 +4634,-3.0,90.000035,0.000000,0.000000 +4635,-3.0,90.000035,0.000000,0.000000 +4636,-3.0,90.000035,0.000000,0.000000 +4637,-3.0,90.000035,0.000000,0.000000 +4638,-3.0,90.000035,0.000000,0.000000 +4639,-3.0,90.000035,0.000000,0.000000 +4640,-3.0,90.000035,0.000000,0.000000 +4641,-3.0,90.000035,0.000000,0.000000 +4642,-3.0,90.000035,0.000000,0.000000 +4643,-3.0,90.000035,0.000000,0.000000 +4644,-3.0,90.000035,0.000000,0.000000 +4645,-3.0,90.000035,0.000000,0.000000 +4646,-3.0,90.000035,0.000000,0.000000 +4647,-3.0,90.000035,0.000000,0.000000 +4648,-3.0,90.000035,0.000000,0.000000 +4649,-3.0,90.000035,0.000000,0.000000 +4650,-3.0,90.000035,0.000000,0.000000 +4651,-3.0,90.000035,0.000000,0.000000 +4652,-3.0,90.000035,0.000000,0.000000 +4653,-3.0,90.000035,0.000000,0.000000 +4654,-3.0,90.000035,0.000000,0.000000 +4655,-3.0,90.000035,0.000000,0.000000 +4656,-3.0,90.000035,0.000000,0.000000 +4657,-3.0,90.000035,0.000000,0.000000 +4658,-3.0,90.000035,0.000000,0.000000 +4659,-3.0,90.000035,0.000000,0.000000 +4660,-3.0,90.000035,0.000000,0.000000 +4661,-3.0,90.000035,0.000000,0.000000 +4662,-3.0,90.000035,0.000000,0.000000 +4663,-3.0,90.000035,0.000000,0.000000 +4664,-3.0,90.000035,0.000000,0.000000 +4665,-3.0,90.000035,0.000000,0.000000 +4666,-3.0,90.000035,0.000000,0.000000 +4667,-3.0,90.000035,0.000000,0.000000 +4668,-3.0,90.000035,0.000000,0.000000 +4669,-3.0,90.000035,0.000000,0.000000 +4670,-3.0,90.000035,0.000000,0.000000 +4671,-3.0,90.000035,0.000000,0.000000 +4672,-3.0,90.000035,0.000000,0.000000 +4673,-3.0,90.000035,0.000000,0.000000 +4674,-3.0,90.000035,0.000000,0.000000 +4675,-3.0,90.000035,0.000000,0.000000 +4676,-3.0,90.000035,0.000000,0.000000 +4677,-3.0,90.000035,0.000000,0.000000 +4678,-3.0,90.000035,0.000000,0.000000 +4679,-3.0,90.000035,0.000000,0.000000 +4680,-3.0,90.000035,0.000000,0.000000 +4681,-3.0,90.000035,0.000000,0.000000 +4682,-3.0,90.000035,0.000000,0.000000 +4683,-3.0,90.000035,0.000000,0.000000 +4684,-3.0,90.000035,0.000000,0.000000 +4685,-3.0,90.000035,0.000000,0.000000 +4686,-3.0,90.000035,0.000000,0.000000 +4687,-3.0,90.000035,0.000000,0.000000 +4688,-3.0,90.000035,0.000000,0.000000 +4689,-3.0,90.000035,0.000000,0.000000 +4690,-3.0,90.000035,0.000000,0.000000 +4691,-3.0,90.000035,0.000000,0.000000 +4692,-3.0,90.000035,0.000000,0.000000 +4693,-3.0,90.000035,0.000000,0.000000 +4694,-3.0,90.000035,0.000000,0.000000 +4695,-3.0,90.000035,0.000000,0.000000 +4696,-3.0,90.000035,0.000000,0.000000 +4697,-3.0,90.000035,0.000000,0.000000 +4698,-3.0,90.000035,0.000000,0.000000 +4699,-3.0,90.000035,0.000000,0.000000 +4700,-3.0,90.000035,0.000000,0.000000 +4701,-3.0,90.000035,0.000000,0.000000 +4702,-3.0,90.000035,0.000000,0.000000 +4703,-3.0,90.000035,0.000000,0.000000 +4704,-3.0,90.000035,0.000000,0.000000 +4705,-3.0,90.000035,0.000000,0.000000 +4706,-3.0,90.000035,0.000000,0.000000 +4707,-3.0,90.000035,0.000000,0.000000 +4708,-3.0,90.000035,0.000000,0.000000 +4709,-3.0,90.000035,0.000000,0.000000 +4710,-3.0,90.000035,0.000000,0.000000 +4711,-3.0,90.000035,0.000000,0.000000 +4712,-3.0,90.000035,0.000000,0.000000 +4713,-3.0,90.000035,0.000000,0.000000 +4714,-3.0,90.000035,0.000000,0.000000 +4715,-3.0,90.000035,0.000000,0.000000 +4716,-3.0,90.000035,0.000000,0.000000 +4717,-3.0,90.000035,0.000000,0.000000 +4718,-3.0,90.000035,0.000000,0.000000 +4719,-3.0,90.000035,0.000000,0.000000 +4720,-3.0,90.000035,0.000000,0.000000 +4721,-3.0,90.000035,0.000000,0.000000 +4722,-3.0,90.000035,0.000000,0.000000 +4723,-3.0,90.000035,0.000000,0.000000 +4724,-3.0,90.000035,0.000000,0.000000 +4725,-3.0,90.000035,0.000000,0.000000 +4726,-3.0,90.000035,0.000000,0.000000 +4727,-3.0,90.000035,0.000000,0.000000 +4728,-3.0,90.000035,0.000000,0.000000 +4729,-3.0,90.000035,0.000000,0.000000 +4730,-3.0,90.000035,0.000000,0.000000 +4731,-3.0,90.000035,0.000000,0.000000 +4732,-3.0,90.000035,0.000000,0.000000 +4733,-3.0,90.000035,0.000000,0.000000 +4734,-3.0,90.000035,0.000000,0.000000 +4735,-3.0,90.000035,0.000000,0.000000 +4736,-3.0,90.000035,0.000000,0.000000 +4737,-3.0,90.000035,0.000000,0.000000 +4738,-3.0,90.000035,0.000000,0.000000 +4739,-3.0,90.000035,0.000000,0.000000 +4740,-3.0,90.000035,0.000000,0.000000 +4741,-3.0,90.000035,0.000000,0.000000 +4742,-3.0,90.000035,0.000000,0.000000 +4743,-3.0,90.000035,0.000000,0.000000 +4744,-3.0,90.000035,0.000000,0.000000 +4745,-3.0,90.000035,0.000000,0.000000 +4746,-3.0,90.000035,0.000000,0.000000 +4747,-3.0,90.000035,0.000000,0.000000 +4748,-3.0,90.000035,0.000000,0.000000 +4749,-3.0,90.000035,0.000000,0.000000 +4750,-3.0,90.000035,0.000000,0.000000 +4751,-3.0,90.000035,0.000000,0.000000 +4752,-3.0,90.000035,0.000000,0.000000 +4753,-3.0,90.000035,0.000000,0.000000 +4754,-3.0,90.000035,0.000000,0.000000 +4755,-3.0,90.000035,0.000000,0.000000 +4756,-3.0,90.000035,0.000000,0.000000 +4757,-3.0,90.000035,0.000000,0.000000 +4758,-3.0,90.000035,0.000000,0.000000 +4759,-3.0,90.000035,0.000000,0.000000 +4760,-3.0,90.000035,0.000000,0.000000 +4761,-3.0,90.000035,0.000000,0.000000 +4762,-3.0,90.000035,0.000000,0.000000 +4763,-3.0,90.000035,0.000000,0.000000 +4764,-3.0,90.000035,0.000000,0.000000 +4765,-3.0,90.000035,0.000000,0.000000 +4766,-3.0,90.000035,0.000000,0.000000 +4767,-3.0,90.000035,0.000000,0.000000 +4768,-3.0,90.000035,0.000000,0.000000 +4769,-3.0,90.000035,0.000000,0.000000 +4770,-3.0,90.000035,0.000000,0.000000 +4771,-3.0,90.000035,0.000000,0.000000 +4772,-3.0,90.000035,0.000000,0.000000 +4773,-3.0,90.000035,0.000000,0.000000 +4774,-3.0,90.000035,0.000000,0.000000 +4775,-3.0,90.000035,0.000000,0.000000 +4776,-3.0,90.000035,0.000000,0.000000 +4777,-3.0,90.000035,0.000000,0.000000 +4778,-3.0,90.000035,0.000000,0.000000 +4779,-3.0,90.000035,0.000000,0.000000 +4780,-3.0,90.000035,0.000000,0.000000 +4781,-3.0,90.000035,0.000000,0.000000 +4782,-3.0,90.000035,0.000000,0.000000 +4783,-3.0,90.000035,0.000000,0.000000 +4784,-3.0,90.000035,0.000000,0.000000 +4785,-3.0,90.000035,0.000000,0.000000 +4786,-3.0,90.000035,0.000000,0.000000 +4787,-3.0,90.000035,0.000000,0.000000 +4788,-3.0,90.000035,0.000000,0.000000 +4789,-3.0,90.000035,0.000000,0.000000 +4790,-3.0,90.000035,0.000000,0.000000 +4791,-3.0,90.000035,0.000000,0.000000 +4792,-3.0,90.000035,0.000000,0.000000 +4793,-3.0,90.000035,0.000000,0.000000 +4794,-3.0,90.000035,0.000000,0.000000 +4795,-3.0,90.000035,0.000000,0.000000 +4796,-3.0,90.000035,0.000000,0.000000 +4797,-3.0,90.000035,0.000000,0.000000 +4798,-3.0,90.000035,0.000000,0.000000 +4799,-3.0,90.000035,0.000000,0.000000 +4800,-3.0,90.000035,0.000000,0.000000 +4801,-3.0,90.000035,0.000000,0.000000 +4802,-3.0,90.000035,0.000000,0.000000 +4803,-3.0,90.000035,0.000000,0.000000 +4804,-3.0,90.000035,0.000000,0.000000 +4805,-3.0,90.000035,0.000000,0.000000 +4806,-3.0,90.000035,0.000000,0.000000 +4807,-3.0,90.000035,0.000000,0.000000 +4808,-3.0,90.000035,0.000000,0.000000 +4809,-3.0,90.000035,0.000000,0.000000 +4810,-3.0,90.000035,0.000000,0.000000 +4811,-3.0,90.000035,0.000000,0.000000 +4812,-3.0,90.000035,0.000000,0.000000 +4813,-3.0,90.000035,0.000000,0.000000 +4814,-3.0,90.000035,0.000000,0.000000 +4815,-3.0,90.000035,0.000000,0.000000 +4816,-3.0,90.000035,0.000000,0.000000 +4817,-3.0,90.000035,0.000000,0.000000 +4818,-3.0,90.000035,0.000000,0.000000 +4819,-3.0,90.000035,0.000000,0.000000 +4820,-3.0,90.000035,0.000000,0.000000 +4821,-3.0,90.000035,0.000000,0.000000 +4822,-3.0,90.000035,0.000000,0.000000 +4823,-3.0,90.000035,0.000000,0.000000 +4824,-3.0,90.000035,0.000000,0.000000 +4825,-3.0,90.000035,0.000000,0.000000 +4826,-3.0,90.000035,0.000000,0.000000 +4827,-3.0,90.000035,0.000000,0.000000 +4828,-3.0,90.000035,0.000000,0.000000 +4829,-3.0,90.000035,0.000000,0.000000 +4830,-3.0,90.000035,0.000000,0.000000 +4831,-3.0,90.000035,0.000000,0.000000 +4832,-3.0,90.000035,0.000000,0.000000 +4833,-3.0,90.000035,0.000000,0.000000 +4834,-3.0,90.000035,0.000000,0.000000 +4835,-3.0,90.000035,0.000000,0.000000 +4836,-3.0,90.000035,0.000000,0.000000 +4837,-3.0,90.000035,0.000000,0.000000 +4838,-3.0,90.000035,0.000000,0.000000 +4839,-3.0,90.000035,0.000000,0.000000 +4840,-3.0,90.000035,0.000000,0.000000 +4841,-3.0,90.000035,0.000000,0.000000 +4842,-3.0,90.000035,0.000000,0.000000 +4843,-3.0,90.000035,0.000000,0.000000 +4844,-3.0,90.000035,0.000000,0.000000 +4845,-3.0,90.000035,0.000000,0.000000 +4846,-3.0,90.000035,0.000000,0.000000 +4847,-3.0,90.000035,0.000000,0.000000 +4848,-3.0,90.000035,0.000000,0.000000 +4849,-3.0,90.000035,0.000000,0.000000 +4850,-3.0,90.000035,0.000000,0.000000 +4851,-3.0,90.000035,0.000000,0.000000 +4852,-3.0,90.000035,0.000000,0.000000 +4853,-3.0,90.000035,0.000000,0.000000 +4854,-3.0,90.000035,0.000000,0.000000 +4855,-3.0,90.000035,0.000000,0.000000 +4856,-3.0,90.000035,0.000000,0.000000 +4857,-3.0,90.000035,0.000000,0.000000 +4858,-3.0,90.000035,0.000000,0.000000 +4859,-3.0,90.000035,0.000000,0.000000 +4860,-3.0,90.000035,0.000000,0.000000 +4861,-3.0,90.000035,0.000000,0.000000 +4862,-3.0,90.000035,0.000000,0.000000 +4863,-3.0,90.000035,0.000000,0.000000 +4864,-3.0,90.000035,0.000000,0.000000 +4865,-3.0,90.000035,0.000000,0.000000 +4866,-3.0,90.000035,0.000000,0.000000 +4867,-3.0,90.000035,0.000000,0.000000 +4868,-3.0,90.000035,0.000000,0.000000 +4869,-3.0,90.000035,0.000000,0.000000 +4870,-3.0,90.000035,0.000000,0.000000 +4871,-3.0,90.000035,0.000000,0.000000 +4872,-3.0,90.000035,0.000000,0.000000 +4873,-3.0,90.000035,0.000000,0.000000 +4874,-3.0,90.000035,0.000000,0.000000 +4875,-3.0,90.000035,0.000000,0.000000 +4876,-3.0,90.000035,0.000000,0.000000 +4877,-3.0,90.000035,0.000000,0.000000 +4878,-3.0,90.000035,0.000000,0.000000 +4879,-3.0,90.000035,0.000000,0.000000 +4880,-3.0,90.000035,0.000000,0.000000 +4881,-3.0,90.000035,0.000000,0.000000 +4882,-3.0,90.000035,0.000000,0.000000 +4883,-3.0,90.000035,0.000000,0.000000 +4884,-3.0,90.000035,0.000000,0.000000 +4885,-3.0,90.000035,0.000000,0.000000 +4886,-3.0,90.000035,0.000000,0.000000 +4887,-3.0,90.000035,0.000000,0.000000 +4888,-3.0,90.000035,0.000000,0.000000 +4889,-3.0,90.000035,0.000000,0.000000 +4890,-3.0,90.000035,0.000000,0.000000 +4891,-3.0,90.000035,0.000000,0.000000 +4892,-3.0,90.000035,0.000000,0.000000 +4893,-3.0,90.000035,0.000000,0.000000 +4894,-3.0,90.000035,0.000000,0.000000 +4895,-3.0,90.000035,0.000000,0.000000 +4896,-3.0,90.000035,0.000000,0.000000 +4897,-3.0,90.000035,0.000000,0.000000 +4898,-3.0,90.000035,0.000000,0.000000 +4899,-3.0,90.000035,0.000000,0.000000 +4900,-3.0,90.000035,0.000000,0.000000 +4901,-3.0,90.000035,0.000000,0.000000 +4902,-3.0,90.000035,0.000000,0.000000 +4903,-3.0,90.000035,0.000000,0.000000 +4904,-3.0,90.000035,0.000000,0.000000 +4905,-3.0,90.000035,0.000000,0.000000 +4906,-3.0,90.000035,0.000000,0.000000 +4907,-3.0,90.000035,0.000000,0.000000 +4908,-3.0,90.000035,0.000000,0.000000 +4909,-3.0,90.000035,0.000000,0.000000 +4910,-3.0,90.000035,0.000000,0.000000 +4911,-3.0,90.000035,0.000000,0.000000 +4912,-3.0,90.000035,0.000000,0.000000 +4913,-3.0,90.000035,0.000000,0.000000 +4914,-3.0,90.000035,0.000000,0.000000 +4915,-3.0,90.000035,0.000000,0.000000 +4916,-3.0,90.000035,0.000000,0.000000 +4917,-3.0,90.000035,0.000000,0.000000 +4918,-3.0,90.000035,0.000000,0.000000 +4919,-3.0,90.000035,0.000000,0.000000 +4920,-3.0,90.000035,0.000000,0.000000 +4921,-3.0,90.000035,0.000000,0.000000 +4922,-3.0,90.000035,0.000000,0.000000 +4923,-3.0,90.000035,0.000000,0.000000 +4924,-3.0,90.000035,0.000000,0.000000 +4925,-3.0,90.000035,0.000000,0.000000 +4926,-3.0,90.000035,0.000000,0.000000 +4927,-3.0,90.000035,0.000000,0.000000 +4928,-3.0,90.000035,0.000000,0.000000 +4929,-3.0,90.000035,0.000000,0.000000 +4930,-3.0,90.000035,0.000000,0.000000 +4931,-3.0,90.000035,0.000000,0.000000 +4932,-3.0,90.000035,0.000000,0.000000 +4933,-3.0,90.000035,0.000000,0.000000 +4934,-3.0,90.000035,0.000000,0.000000 +4935,-3.0,90.000035,0.000000,0.000000 +4936,-3.0,90.000035,0.000000,0.000000 +4937,-3.0,90.000035,0.000000,0.000000 +4938,-3.0,90.000035,0.000000,0.000000 +4939,-3.0,90.000035,0.000000,0.000000 +4940,-3.0,90.000035,0.000000,0.000000 +4941,-3.0,90.000035,0.000000,0.000000 +4942,-3.0,90.000035,0.000000,0.000000 +4943,-3.0,90.000035,0.000000,0.000000 +4944,-3.0,90.000035,0.000000,0.000000 +4945,-3.0,90.000035,0.000000,0.000000 +4946,-3.0,90.000035,0.000000,0.000000 +4947,-3.0,90.000035,0.000000,0.000000 +4948,-3.0,90.000035,0.000000,0.000000 +4949,-3.0,90.000035,0.000000,0.000000 +4950,-3.0,90.000035,0.000000,0.000000 +4951,-3.0,90.000035,0.000000,0.000000 +4952,-3.0,90.000035,0.000000,0.000000 +4953,-3.0,90.000035,0.000000,0.000000 +4954,-3.0,90.000035,0.000000,0.000000 +4955,-3.0,90.000035,0.000000,0.000000 +4956,-3.0,90.000035,0.000000,0.000000 +4957,-3.0,90.000035,0.000000,0.000000 +4958,-3.0,90.000035,0.000000,0.000000 +4959,-3.0,90.000035,0.000000,0.000000 +4960,-3.0,90.000035,0.000000,0.000000 +4961,-3.0,90.000035,0.000000,0.000000 +4962,-3.0,90.000035,0.000000,0.000000 +4963,-3.0,90.000035,0.000000,0.000000 +4964,-3.0,90.000035,0.000000,0.000000 +4965,-3.0,90.000035,0.000000,0.000000 +4966,-3.0,90.000035,0.000000,0.000000 +4967,-3.0,90.000035,0.000000,0.000000 +4968,-3.0,90.000035,0.000000,0.000000 +4969,-3.0,90.000035,0.000000,0.000000 +4970,-3.0,90.000035,0.000000,0.000000 +4971,-3.0,90.000035,0.000000,0.000000 +4972,-3.0,90.000035,0.000000,0.000000 +4973,-3.0,90.000035,0.000000,0.000000 +4974,-3.0,90.000035,0.000000,0.000000 +4975,-3.0,90.000035,0.000000,0.000000 +4976,-3.0,90.000035,0.000000,0.000000 +4977,-3.0,90.000035,0.000000,0.000000 +4978,-3.0,90.000035,0.000000,0.000000 +4979,-3.0,90.000035,0.000000,0.000000 +4980,-3.0,90.000035,0.000000,0.000000 +4981,-3.0,90.000035,0.000000,0.000000 +4982,-3.0,90.000035,0.000000,0.000000 +4983,-3.0,90.000035,0.000000,0.000000 +4984,-3.0,90.000035,0.000000,0.000000 +4985,-3.0,90.000035,0.000000,0.000000 +4986,-3.0,90.000035,0.000000,0.000000 +4987,-3.0,90.000035,0.000000,0.000000 +4988,-3.0,90.000035,0.000000,0.000000 +4989,-3.0,90.000035,0.000000,0.000000 +4990,-3.0,90.000035,0.000000,0.000000 +4991,-3.0,90.000035,0.000000,0.000000 +4992,-3.0,90.000035,0.000000,0.000000 +4993,-3.0,90.000035,0.000000,0.000000 +4994,-3.0,90.000035,0.000000,0.000000 +4995,-3.0,90.000035,0.000000,0.000000 +4996,-3.0,90.000035,0.000000,0.000000 +4997,-3.0,90.000035,0.000000,0.000000 +4998,-3.0,90.000035,0.000000,0.000000 +4999,-3.0,90.000035,0.000000,0.000000 +5000,-3.0,90.000035,0.000000,0.000000 +5001,-3.0,90.000035,0.000000,0.000000 +5002,-3.0,90.000035,0.000000,0.000000 +5003,-3.0,90.000035,0.000000,0.000000 +5004,-3.0,90.000035,0.000000,0.000000 +5005,-3.0,90.000035,0.000000,0.000000 +5006,-3.0,90.000035,0.000000,0.000000 +5007,-3.0,90.000035,0.000000,0.000000 +5008,-3.0,90.000035,0.000000,0.000000 +5009,-3.0,90.000035,0.000000,0.000000 +5010,-3.0,90.000035,0.000000,0.000000 +5011,-3.0,90.000035,0.000000,0.000000 +5012,-3.0,90.000035,0.000000,0.000000 +5013,-3.0,90.000035,0.000000,0.000000 +5014,-3.0,90.000035,0.000000,0.000000 +5015,-3.0,90.000035,0.000000,0.000000 +5016,-3.0,90.000035,0.000000,0.000000 +5017,-3.0,90.000035,0.000000,0.000000 +5018,-3.0,90.000035,0.000000,0.000000 +5019,-3.0,90.000035,0.000000,0.000000 +5020,-3.0,90.000035,0.000000,0.000000 +5021,-3.0,90.000035,0.000000,0.000000 +5022,-3.0,90.000035,0.000000,0.000000 +5023,-3.0,90.000035,0.000000,0.000000 +5024,-3.0,90.000035,0.000000,0.000000 +5025,-3.0,90.000035,0.000000,0.000000 +5026,-3.0,90.000035,0.000000,0.000000 +5027,-3.0,90.000035,0.000000,0.000000 +5028,-3.0,90.000035,0.000000,0.000000 +5029,-3.0,90.000035,0.000000,0.000000 +5030,-3.0,90.000035,0.000000,0.000000 +5031,-3.0,90.000035,0.000000,0.000000 +5032,-3.0,90.000035,0.000000,0.000000 +5033,-3.0,90.000035,0.000000,0.000000 +5034,-3.0,90.000035,0.000000,0.000000 +5035,-3.0,90.000035,0.000000,0.000000 +5036,-3.0,90.000035,0.000000,0.000000 +5037,-3.0,90.000035,0.000000,0.000000 +5038,-3.0,90.000035,0.000000,0.000000 +5039,-3.0,90.000035,0.000000,0.000000 +5040,-3.0,90.000035,0.000000,0.000000 +5041,-3.0,90.000035,0.000000,0.000000 +5042,-3.0,90.000035,0.000000,0.000000 +5043,-3.0,90.000035,0.000000,0.000000 +5044,-3.0,90.000035,0.000000,0.000000 +5045,-3.0,90.000035,0.000000,0.000000 +5046,-3.0,90.000035,0.000000,0.000000 +5047,-3.0,90.000035,0.000000,0.000000 +5048,-3.0,90.000035,0.000000,0.000000 +5049,-3.0,90.000035,0.000000,0.000000 +5050,-3.0,90.000035,0.000000,0.000000 +5051,-3.0,90.000035,0.000000,0.000000 +5052,-3.0,90.000035,0.000000,0.000000 +5053,-3.0,90.000035,0.000000,0.000000 +5054,-3.0,90.000035,0.000000,0.000000 +5055,-3.0,90.000035,0.000000,0.000000 +5056,-3.0,90.000035,0.000000,0.000000 +5057,-3.0,90.000035,0.000000,0.000000 +5058,-3.0,90.000035,0.000000,0.000000 +5059,-3.0,90.000035,0.000000,0.000000 +5060,-3.0,90.000035,0.000000,0.000000 +5061,-3.0,90.000035,0.000000,0.000000 +5062,-3.0,90.000035,0.000000,0.000000 +5063,-3.0,90.000035,0.000000,0.000000 +5064,-3.0,90.000035,0.000000,0.000000 +5065,-3.0,90.000035,0.000000,0.000000 +5066,-3.0,90.000035,0.000000,0.000000 +5067,-3.0,90.000035,0.000000,0.000000 +5068,-3.0,90.000035,0.000000,0.000000 +5069,-3.0,90.000035,0.000000,0.000000 +5070,-3.0,90.000035,0.000000,0.000000 +5071,-3.0,90.000035,0.000000,0.000000 +5072,-3.0,90.000035,0.000000,0.000000 +5073,-3.0,90.000035,0.000000,0.000000 +5074,-3.0,90.000035,0.000000,0.000000 +5075,-3.0,90.000035,0.000000,0.000000 +5076,-3.0,90.000035,0.000000,0.000000 +5077,-3.0,90.000035,0.000000,0.000000 +5078,-3.0,90.000035,0.000000,0.000000 +5079,-3.0,90.000035,0.000000,0.000000 +5080,-3.0,90.000035,0.000000,0.000000 +5081,-3.0,90.000035,0.000000,0.000000 +5082,-3.0,90.000035,0.000000,0.000000 +5083,-3.0,90.000035,0.000000,0.000000 +5084,-3.0,90.000035,0.000000,0.000000 +5085,-3.0,90.000035,0.000000,0.000000 +5086,-3.0,90.000035,0.000000,0.000000 +5087,-3.0,90.000035,0.000000,0.000000 +5088,-3.0,90.000035,0.000000,0.000000 +5089,-3.0,90.000035,0.000000,0.000000 +5090,-3.0,90.000035,0.000000,0.000000 +5091,-3.0,90.000035,0.000000,0.000000 +5092,-3.0,90.000035,0.000000,0.000000 +5093,-3.0,90.000035,0.000000,0.000000 +5094,-3.0,90.000035,0.000000,0.000000 +5095,-3.0,90.000035,0.000000,0.000000 +5096,-3.0,90.000035,0.000000,0.000000 +5097,-3.0,90.000035,0.000000,0.000000 +5098,-3.0,90.000035,0.000000,0.000000 +5099,-3.0,90.000035,0.000000,0.000000 +5100,-3.0,90.000035,0.000000,0.000000 +5101,-3.0,90.000035,0.000000,0.000000 +5102,-3.0,90.000035,0.000000,0.000000 +5103,-3.0,90.000035,0.000000,0.000000 +5104,-3.0,90.000035,0.000000,0.000000 +5105,-3.0,90.000035,0.000000,0.000000 +5106,-3.0,90.000035,0.000000,0.000000 +5107,-3.0,90.000035,0.000000,0.000000 +5108,-3.0,90.000035,0.000000,0.000000 +5109,-3.0,90.000035,0.000000,0.000000 +5110,-3.0,90.000035,0.000000,0.000000 +5111,-3.0,90.000035,0.000000,0.000000 +5112,-3.0,90.000035,0.000000,0.000000 +5113,-3.0,90.000035,0.000000,0.000000 +5114,-3.0,90.000035,0.000000,0.000000 +5115,-3.0,90.000035,0.000000,0.000000 +5116,-3.0,90.000035,0.000000,0.000000 +5117,-3.0,90.000035,0.000000,0.000000 +5118,-3.0,90.000035,0.000000,0.000000 +5119,-3.0,90.000035,0.000000,0.000000 +5120,-3.0,90.000035,0.000000,0.000000 +5121,-3.0,90.000035,0.000000,0.000000 +5122,-3.0,90.000035,0.000000,0.000000 +5123,-3.0,90.000035,0.000000,0.000000 +5124,-3.0,90.000035,0.000000,0.000000 +5125,-3.0,90.000035,0.000000,0.000000 +5126,-3.0,90.000035,0.000000,0.000000 +5127,-3.0,90.000035,0.000000,0.000000 +5128,-3.0,90.000035,0.000000,0.000000 +5129,-3.0,90.000035,0.000000,0.000000 +5130,-3.0,90.000035,0.000000,0.000000 +5131,-3.0,90.000035,0.000000,0.000000 +5132,-3.0,90.000035,0.000000,0.000000 +5133,-3.0,90.000035,0.000000,0.000000 +5134,-3.0,90.000035,0.000000,0.000000 +5135,-3.0,90.000035,0.000000,0.000000 +5136,-3.0,90.000035,0.000000,0.000000 +5137,-3.0,90.000035,0.000000,0.000000 +5138,-3.0,90.000035,0.000000,0.000000 +5139,-3.0,90.000035,0.000000,0.000000 +5140,-3.0,90.000035,0.000000,0.000000 +5141,-3.0,90.000035,0.000000,0.000000 +5142,-3.0,90.000035,0.000000,0.000000 +5143,-3.0,90.000035,0.000000,0.000000 +5144,-3.0,90.000035,0.000000,0.000000 +5145,-3.0,90.000035,0.000000,0.000000 +5146,-3.0,90.000035,0.000000,0.000000 +5147,-3.0,90.000035,0.000000,0.000000 +5148,-3.0,90.000035,0.000000,0.000000 +5149,-3.0,90.000035,0.000000,0.000000 +5150,-3.0,90.000035,0.000000,0.000000 +5151,-3.0,90.000035,0.000000,0.000000 +5152,-3.0,90.000035,0.000000,0.000000 +5153,-3.0,90.000035,0.000000,0.000000 +5154,-3.0,90.000035,0.000000,0.000000 +5155,-3.0,90.000035,0.000000,0.000000 +5156,-3.0,90.000035,0.000000,0.000000 +5157,-3.0,90.000035,0.000000,0.000000 +5158,-3.0,90.000035,0.000000,0.000000 +5159,-3.0,90.000035,0.000000,0.000000 +5160,-3.0,90.000035,0.000000,0.000000 +5161,-3.0,90.000035,0.000000,0.000000 +5162,-3.0,90.000035,0.000000,0.000000 +5163,-3.0,90.000035,0.000000,0.000000 +5164,-3.0,90.000035,0.000000,0.000000 +5165,-3.0,90.000035,0.000000,0.000000 +5166,-3.0,90.000035,0.000000,0.000000 +5167,-3.0,90.000035,0.000000,0.000000 +5168,-3.0,90.000035,0.000000,0.000000 +5169,-3.0,90.000035,0.000000,0.000000 +5170,-3.0,90.000035,0.000000,0.000000 +5171,-3.0,90.000035,0.000000,0.000000 +5172,-3.0,90.000035,0.000000,0.000000 +5173,-3.0,90.000035,0.000000,0.000000 +5174,-3.0,90.000035,0.000000,0.000000 +5175,-3.0,90.000035,0.000000,0.000000 +5176,-3.0,90.000035,0.000000,0.000000 +5177,-3.0,90.000035,0.000000,0.000000 +5178,-3.0,90.000035,0.000000,0.000000 +5179,-3.0,90.000035,0.000000,0.000000 +5180,-3.0,90.000035,0.000000,0.000000 +5181,-3.0,90.000035,0.000000,0.000000 +5182,-3.0,90.000035,0.000000,0.000000 +5183,-3.0,90.000035,0.000000,0.000000 +5184,-3.0,90.000035,0.000000,0.000000 +5185,-3.0,90.000035,0.000000,0.000000 +5186,-3.0,90.000035,0.000000,0.000000 +5187,-3.0,90.000035,0.000000,0.000000 +5188,-3.0,90.000035,0.000000,0.000000 +5189,-3.0,90.000035,0.000000,0.000000 +5190,-3.0,90.000035,0.000000,0.000000 +5191,-3.0,90.000035,0.000000,0.000000 +5192,-3.0,90.000035,0.000000,0.000000 +5193,-3.0,90.000035,0.000000,0.000000 +5194,-3.0,90.000035,0.000000,0.000000 +5195,-3.0,90.000035,0.000000,0.000000 +5196,-3.0,90.000035,0.000000,0.000000 +5197,-3.0,90.000035,0.000000,0.000000 +5198,-3.0,90.000035,0.000000,0.000000 +5199,-3.0,90.000035,0.000000,0.000000 +5200,-3.0,90.000035,0.000000,0.000000 +5201,-3.0,90.000035,0.000000,0.000000 +5202,-3.0,90.000035,0.000000,0.000000 +5203,-3.0,90.000035,0.000000,0.000000 +5204,-3.0,90.000035,0.000000,0.000000 +5205,-3.0,90.000035,0.000000,0.000000 +5206,-3.0,90.000035,0.000000,0.000000 +5207,-3.0,90.000035,0.000000,0.000000 +5208,-3.0,90.000035,0.000000,0.000000 +5209,-3.0,90.000035,0.000000,0.000000 +5210,-3.0,90.000035,0.000000,0.000000 +5211,-3.0,90.000035,0.000000,0.000000 +5212,-3.0,90.000035,0.000000,0.000000 +5213,-3.0,90.000035,0.000000,0.000000 +5214,-3.0,90.000035,0.000000,0.000000 +5215,-3.0,90.000035,0.000000,0.000000 +5216,-3.0,90.000035,0.000000,0.000000 +5217,-3.0,90.000035,0.000000,0.000000 +5218,-3.0,90.000035,0.000000,0.000000 +5219,-3.0,90.000035,0.000000,0.000000 +5220,-3.0,90.000035,0.000000,0.000000 +5221,-3.0,90.000035,0.000000,0.000000 +5222,-3.0,90.000035,0.000000,0.000000 +5223,-3.0,90.000035,0.000000,0.000000 +5224,-3.0,90.000035,0.000000,0.000000 +5225,-3.0,90.000035,0.000000,0.000000 +5226,-3.0,90.000035,0.000000,0.000000 +5227,-3.0,90.000035,0.000000,0.000000 +5228,-3.0,90.000035,0.000000,0.000000 +5229,-3.0,90.000035,0.000000,0.000000 +5230,-3.0,90.000035,0.000000,0.000000 +5231,-3.0,90.000035,0.000000,0.000000 +5232,-3.0,90.000035,0.000000,0.000000 +5233,-3.0,90.000035,0.000000,0.000000 +5234,-3.0,90.000035,0.000000,0.000000 +5235,-3.0,90.000035,0.000000,0.000000 +5236,-3.0,90.000035,0.000000,0.000000 +5237,-3.0,90.000035,0.000000,0.000000 +5238,-3.0,90.000035,0.000000,0.000000 +5239,-3.0,90.000035,0.000000,0.000000 +5240,-3.0,90.000035,0.000000,0.000000 +5241,-3.0,90.000035,0.000000,0.000000 +5242,-3.0,90.000035,0.000000,0.000000 +5243,-3.0,90.000035,0.000000,0.000000 +5244,-3.0,90.000035,0.000000,0.000000 +5245,-3.0,90.000035,0.000000,0.000000 +5246,-3.0,90.000035,0.000000,0.000000 +5247,-3.0,90.000035,0.000000,0.000000 +5248,-3.0,90.000035,0.000000,0.000000 +5249,-3.0,90.000035,0.000000,0.000000 +5250,-3.0,90.000035,0.000000,0.000000 +5251,-3.0,90.000035,0.000000,0.000000 +5252,-3.0,90.000035,0.000000,0.000000 +5253,-3.0,90.000035,0.000000,0.000000 +5254,-3.0,90.000035,0.000000,0.000000 +5255,-3.0,90.000035,0.000000,0.000000 +5256,-3.0,90.000035,0.000000,0.000000 +5257,-3.0,90.000035,0.000000,0.000000 +5258,-3.0,90.000035,0.000000,0.000000 +5259,-3.0,90.000035,0.000000,0.000000 +5260,-3.0,90.000035,0.000000,0.000000 +5261,-3.0,90.000035,0.000000,0.000000 +5262,-3.0,90.000035,0.000000,0.000000 +5263,-3.0,90.000035,0.000000,0.000000 +5264,-3.0,90.000035,0.000000,0.000000 +5265,-3.0,90.000035,0.000000,0.000000 +5266,-3.0,90.000035,0.000000,0.000000 +5267,-3.0,90.000035,0.000000,0.000000 +5268,-3.0,90.000035,0.000000,0.000000 +5269,-3.0,90.000035,0.000000,0.000000 +5270,-3.0,90.000035,0.000000,0.000000 +5271,-3.0,90.000035,0.000000,0.000000 +5272,-3.0,90.000035,0.000000,0.000000 +5273,-3.0,90.000035,0.000000,0.000000 +5274,-3.0,90.000035,0.000000,0.000000 +5275,-3.0,90.000035,0.000000,0.000000 +5276,-3.0,90.000035,0.000000,0.000000 +5277,-3.0,90.000035,0.000000,0.000000 +5278,-3.0,90.000035,0.000000,0.000000 +5279,-3.0,90.000035,0.000000,0.000000 +5280,-3.0,90.000035,0.000000,0.000000 +5281,-3.0,90.000035,0.000000,0.000000 +5282,-3.0,90.000035,0.000000,0.000000 +5283,-3.0,90.000035,0.000000,0.000000 +5284,-3.0,90.000035,0.000000,0.000000 +5285,-3.0,90.000035,0.000000,0.000000 +5286,-3.0,90.000035,0.000000,0.000000 +5287,-3.0,90.000035,0.000000,0.000000 +5288,-3.0,90.000035,0.000000,0.000000 +5289,-3.0,90.000035,0.000000,0.000000 +5290,-3.0,90.000035,0.000000,0.000000 +5291,-3.0,90.000035,0.000000,0.000000 +5292,-3.0,90.000035,0.000000,0.000000 +5293,-3.0,90.000035,0.000000,0.000000 +5294,-3.0,90.000035,0.000000,0.000000 +5295,-3.0,90.000035,0.000000,0.000000 +5296,-3.0,90.000035,0.000000,0.000000 +5297,-3.0,90.000035,0.000000,0.000000 +5298,-3.0,90.000035,0.000000,0.000000 +5299,-3.0,90.000035,0.000000,0.000000 +5300,-3.0,90.000035,0.000000,0.000000 +5301,-3.0,90.000035,0.000000,0.000000 +5302,-3.0,90.000035,0.000000,0.000000 +5303,-3.0,90.000035,0.000000,0.000000 +5304,-3.0,90.000035,0.000000,0.000000 +5305,-3.0,90.000035,0.000000,0.000000 +5306,-3.0,90.000035,0.000000,0.000000 +5307,-3.0,90.000035,0.000000,0.000000 +5308,-3.0,90.000035,0.000000,0.000000 +5309,-3.0,90.000035,0.000000,0.000000 +5310,-3.0,90.000035,0.000000,0.000000 +5311,-3.0,90.000035,0.000000,0.000000 +5312,-3.0,90.000035,0.000000,0.000000 +5313,-3.0,90.000035,0.000000,0.000000 +5314,-3.0,90.000035,0.000000,0.000000 +5315,-3.0,90.000035,0.000000,0.000000 +5316,-3.0,90.000035,0.000000,0.000000 +5317,-3.0,90.000035,0.000000,0.000000 +5318,-3.0,90.000035,0.000000,0.000000 +5319,-3.0,90.000035,0.000000,0.000000 +5320,-3.0,90.000035,0.000000,0.000000 +5321,-3.0,90.000035,0.000000,0.000000 +5322,-3.0,90.000035,0.000000,0.000000 +5323,-3.0,90.000035,0.000000,0.000000 +5324,-3.0,90.000035,0.000000,0.000000 +5325,-3.0,90.000035,0.000000,0.000000 +5326,-3.0,90.000035,0.000000,0.000000 +5327,-3.0,90.000035,0.000000,0.000000 +5328,-3.0,90.000035,0.000000,0.000000 +5329,-3.0,90.000035,0.000000,0.000000 +5330,-3.0,90.000035,0.000000,0.000000 +5331,-3.0,90.000035,0.000000,0.000000 +5332,-3.0,90.000035,0.000000,0.000000 +5333,-3.0,90.000035,0.000000,0.000000 +5334,-3.0,90.000035,0.000000,0.000000 +5335,-3.0,90.000035,0.000000,0.000000 +5336,-3.0,90.000035,0.000000,0.000000 +5337,-3.0,90.000035,0.000000,0.000000 +5338,-3.0,90.000035,0.000000,0.000000 +5339,-3.0,90.000035,0.000000,0.000000 +5340,-3.0,90.000035,0.000000,0.000000 +5341,-3.0,90.000035,0.000000,0.000000 +5342,-3.0,90.000035,0.000000,0.000000 +5343,-3.0,90.000035,0.000000,0.000000 +5344,-3.0,90.000035,0.000000,0.000000 +5345,-3.0,90.000035,0.000000,0.000000 +5346,-3.0,90.000035,0.000000,0.000000 +5347,-3.0,90.000035,0.000000,0.000000 +5348,-3.0,90.000035,0.000000,0.000000 +5349,-3.0,90.000035,0.000000,0.000000 +5350,-3.0,90.000035,0.000000,0.000000 +5351,-3.0,90.000035,0.000000,0.000000 +5352,-3.0,90.000035,0.000000,0.000000 +5353,-3.0,90.000035,0.000000,0.000000 +5354,-3.0,90.000035,0.000000,0.000000 +5355,-3.0,90.000035,0.000000,0.000000 +5356,-3.0,90.000035,0.000000,0.000000 +5357,-3.0,90.000035,0.000000,0.000000 +5358,-3.0,90.000035,0.000000,0.000000 +5359,-3.0,90.000035,0.000000,0.000000 +5360,-3.0,90.000035,0.000000,0.000000 +5361,-3.0,90.000035,0.000000,0.000000 +5362,-3.0,90.000035,0.000000,0.000000 +5363,-3.0,90.000035,0.000000,0.000000 +5364,-3.0,90.000035,0.000000,0.000000 +5365,-3.0,90.000035,0.000000,0.000000 +5366,-3.0,90.000035,0.000000,0.000000 +5367,-3.0,90.000035,0.000000,0.000000 +5368,-3.0,90.000035,0.000000,0.000000 +5369,-3.0,90.000035,0.000000,0.000000 +5370,-3.0,90.000035,0.000000,0.000000 +5371,-3.0,90.000035,0.000000,0.000000 +5372,-3.0,90.000035,0.000000,0.000000 +5373,-3.0,90.000035,0.000000,0.000000 +5374,-3.0,90.000035,0.000000,0.000000 +5375,-3.0,90.000035,0.000000,0.000000 +5376,-3.0,90.000035,0.000000,0.000000 +5377,-3.0,90.000035,0.000000,0.000000 +5378,-3.0,90.000035,0.000000,0.000000 +5379,-3.0,90.000035,0.000000,0.000000 +5380,-3.0,90.000035,0.000000,0.000000 +5381,-3.0,90.000035,0.000000,0.000000 +5382,-3.0,90.000035,0.000000,0.000000 +5383,-3.0,90.000035,0.000000,0.000000 +5384,-3.0,90.000035,0.000000,0.000000 +5385,-3.0,90.000035,0.000000,0.000000 +5386,-3.0,90.000035,0.000000,0.000000 +5387,-3.0,90.000035,0.000000,0.000000 +5388,-3.0,90.000035,0.000000,0.000000 +5389,-3.0,90.000035,0.000000,0.000000 +5390,-3.0,90.000035,0.000000,0.000000 +5391,-3.0,90.000035,0.000000,0.000000 +5392,-3.0,90.000035,0.000000,0.000000 +5393,-3.0,90.000035,0.000000,0.000000 +5394,-3.0,90.000035,0.000000,0.000000 +5395,-3.0,90.000035,0.000000,0.000000 +5396,-3.0,90.000035,0.000000,0.000000 +5397,-3.0,90.000035,0.000000,0.000000 +5398,-3.0,90.000035,0.000000,0.000000 +5399,-3.0,90.000035,0.000000,0.000000 +5400,-3.0,90.000035,0.000000,0.000000 +5401,-3.0,90.000035,0.000000,0.000000 +5402,-3.0,90.000035,0.000000,0.000000 +5403,-3.0,90.000035,0.000000,0.000000 +5404,-3.0,90.000035,0.000000,0.000000 +5405,-3.0,90.000035,0.000000,0.000000 +5406,-3.0,90.000035,0.000000,0.000000 +5407,-3.0,90.000035,0.000000,0.000000 +5408,-3.0,90.000035,0.000000,0.000000 +5409,-3.0,90.000035,0.000000,0.000000 +5410,-3.0,90.000035,0.000000,0.000000 +5411,-3.0,90.000035,0.000000,0.000000 +5412,-3.0,90.000035,0.000000,0.000000 +5413,-3.0,90.000035,0.000000,0.000000 +5414,-3.0,90.000035,0.000000,0.000000 +5415,-3.0,90.000035,0.000000,0.000000 +5416,-3.0,90.000035,0.000000,0.000000 +5417,-3.0,90.000035,0.000000,0.000000 +5418,-3.0,90.000035,0.000000,0.000000 +5419,-3.0,90.000035,0.000000,0.000000 +5420,-3.0,90.000035,0.000000,0.000000 +5421,-3.0,90.000035,0.000000,0.000000 +5422,-3.0,90.000035,0.000000,0.000000 +5423,-3.0,90.000035,0.000000,0.000000 +5424,-3.0,90.000035,0.000000,0.000000 +5425,-3.0,90.000035,0.000000,0.000000 +5426,-3.0,90.000035,0.000000,0.000000 +5427,-3.0,90.000035,0.000000,0.000000 +5428,-3.0,90.000035,0.000000,0.000000 +5429,-3.0,90.000035,0.000000,0.000000 +5430,-3.0,90.000035,0.000000,0.000000 +5431,-3.0,90.000035,0.000000,0.000000 +5432,-3.0,90.000035,0.000000,0.000000 +5433,-3.0,90.000035,0.000000,0.000000 +5434,-3.0,90.000035,0.000000,0.000000 +5435,-3.0,90.000035,0.000000,0.000000 +5436,-3.0,90.000035,0.000000,0.000000 +5437,-3.0,90.000035,0.000000,0.000000 +5438,-3.0,90.000035,0.000000,0.000000 +5439,-3.0,90.000035,0.000000,0.000000 +5440,-3.0,90.000035,0.000000,0.000000 +5441,-3.0,90.000035,0.000000,0.000000 +5442,-3.0,90.000035,0.000000,0.000000 +5443,-3.0,90.000035,0.000000,0.000000 +5444,-3.0,90.000035,0.000000,0.000000 +5445,-3.0,90.000035,0.000000,0.000000 +5446,-3.0,90.000035,0.000000,0.000000 +5447,-3.0,90.000035,0.000000,0.000000 +5448,-3.0,90.000035,0.000000,0.000000 +5449,-3.0,90.000035,0.000000,0.000000 +5450,-3.0,90.000035,0.000000,0.000000 +5451,-3.0,90.000035,0.000000,0.000000 +5452,-3.0,90.000035,0.000000,0.000000 +5453,-3.0,90.000035,0.000000,0.000000 +5454,-3.0,90.000035,0.000000,0.000000 +5455,-3.0,90.000035,0.000000,0.000000 +5456,-3.0,90.000035,0.000000,0.000000 +5457,-3.0,90.000035,0.000000,0.000000 +5458,-3.0,90.000035,0.000000,0.000000 +5459,-3.0,90.000035,0.000000,0.000000 +5460,-3.0,90.000035,0.000000,0.000000 +5461,-3.0,90.000035,0.000000,0.000000 +5462,-3.0,90.000035,0.000000,0.000000 +5463,-3.0,90.000035,0.000000,0.000000 +5464,-3.0,90.000035,0.000000,0.000000 +5465,-3.0,90.000035,0.000000,0.000000 +5466,-3.0,90.000035,0.000000,0.000000 +5467,-3.0,90.000035,0.000000,0.000000 +5468,-3.0,90.000035,0.000000,0.000000 +5469,-3.0,90.000035,0.000000,0.000000 +5470,-3.0,90.000035,0.000000,0.000000 +5471,-3.0,90.000035,0.000000,0.000000 +5472,-3.0,90.000035,0.000000,0.000000 +5473,-3.0,90.000035,0.000000,0.000000 +5474,-3.0,90.000035,0.000000,0.000000 +5475,-3.0,90.000035,0.000000,0.000000 +5476,-3.0,90.000035,0.000000,0.000000 +5477,-3.0,90.000035,0.000000,0.000000 +5478,-3.0,90.000035,0.000000,0.000000 +5479,-3.0,90.000035,0.000000,0.000000 +5480,-3.0,90.000035,0.000000,0.000000 +5481,-3.0,90.000035,0.000000,0.000000 +5482,-3.0,90.000035,0.000000,0.000000 +5483,-3.0,90.000035,0.000000,0.000000 +5484,-3.0,90.000035,0.000000,0.000000 +5485,-3.0,90.000035,0.000000,0.000000 +5486,-3.0,90.000035,0.000000,0.000000 +5487,-3.0,90.000035,0.000000,0.000000 +5488,-3.0,90.000035,0.000000,0.000000 +5489,-3.0,90.000035,0.000000,0.000000 +5490,-3.0,90.000035,0.000000,0.000000 +5491,-3.0,90.000035,0.000000,0.000000 +5492,-3.0,90.000035,0.000000,0.000000 +5493,-3.0,90.000035,0.000000,0.000000 +5494,-3.0,90.000035,0.000000,0.000000 +5495,-3.0,90.000035,0.000000,0.000000 +5496,-3.0,90.000035,0.000000,0.000000 +5497,-3.0,90.000035,0.000000,0.000000 +5498,-3.0,90.000035,0.000000,0.000000 +5499,-3.0,90.000035,0.000000,0.000000 +5500,-3.0,90.000035,0.000000,0.000000 +5501,-3.0,90.000035,0.000000,0.000000 +5502,-3.0,90.000035,0.000000,0.000000 +5503,-3.0,90.000035,0.000000,0.000000 +5504,-3.0,90.000035,0.000000,0.000000 +5505,-3.0,90.000035,0.000000,0.000000 +5506,-3.0,90.000035,0.000000,0.000000 +5507,-3.0,90.000035,0.000000,0.000000 +5508,-3.0,90.000035,0.000000,0.000000 +5509,-3.0,90.000035,0.000000,0.000000 +5510,-3.0,90.000035,0.000000,0.000000 +5511,-3.0,90.000035,0.000000,0.000000 +5512,-3.0,90.000035,0.000000,0.000000 +5513,-3.0,90.000035,0.000000,0.000000 +5514,-3.0,90.000035,0.000000,0.000000 +5515,-3.0,90.000035,0.000000,0.000000 +5516,-3.0,90.000035,0.000000,0.000000 +5517,-3.0,90.000035,0.000000,0.000000 +5518,-3.0,90.000035,0.000000,0.000000 +5519,-3.0,90.000035,0.000000,0.000000 +5520,-3.0,90.000035,0.000000,0.000000 +5521,-3.0,90.000035,0.000000,0.000000 +5522,-3.0,90.000035,0.000000,0.000000 +5523,-3.0,90.000035,0.000000,0.000000 +5524,-3.0,90.000035,0.000000,0.000000 +5525,-3.0,90.000035,0.000000,0.000000 +5526,-3.0,90.000035,0.000000,0.000000 +5527,-3.0,90.000035,0.000000,0.000000 +5528,-3.0,90.000035,0.000000,0.000000 +5529,-3.0,90.000035,0.000000,0.000000 +5530,-3.0,90.000035,0.000000,0.000000 +5531,-3.0,90.000035,0.000000,0.000000 +5532,-3.0,90.000035,0.000000,0.000000 +5533,-3.0,90.000035,0.000000,0.000000 +5534,-3.0,90.000035,0.000000,0.000000 +5535,-3.0,90.000035,0.000000,0.000000 +5536,-3.0,90.000035,0.000000,0.000000 +5537,-3.0,90.000035,0.000000,0.000000 +5538,-3.0,90.000035,0.000000,0.000000 +5539,-3.0,90.000035,0.000000,0.000000 +5540,-3.0,90.000035,0.000000,0.000000 +5541,-3.0,90.000035,0.000000,0.000000 +5542,-3.0,90.000035,0.000000,0.000000 +5543,-3.0,90.000035,0.000000,0.000000 +5544,-3.0,90.000035,0.000000,0.000000 +5545,-3.0,90.000035,0.000000,0.000000 +5546,-3.0,90.000035,0.000000,0.000000 +5547,-3.0,90.000035,0.000000,0.000000 +5548,-3.0,90.000035,0.000000,0.000000 +5549,-3.0,90.000035,0.000000,0.000000 +5550,-3.0,90.000035,0.000000,0.000000 +5551,-3.0,90.000035,0.000000,0.000000 +5552,-3.0,90.000035,0.000000,0.000000 +5553,-3.0,90.000035,0.000000,0.000000 +5554,-3.0,90.000035,0.000000,0.000000 +5555,-3.0,90.000035,0.000000,0.000000 +5556,-3.0,90.000035,0.000000,0.000000 +5557,-3.0,90.000035,0.000000,0.000000 +5558,-3.0,90.000035,0.000000,0.000000 +5559,-3.0,90.000035,0.000000,0.000000 +5560,-3.0,90.000035,0.000000,0.000000 +5561,-3.0,90.000035,0.000000,0.000000 +5562,-3.0,90.000035,0.000000,0.000000 +5563,-3.0,90.000035,0.000000,0.000000 +5564,-3.0,90.000035,0.000000,0.000000 +5565,-3.0,90.000035,0.000000,0.000000 +5566,-3.0,90.000035,0.000000,0.000000 +5567,-3.0,90.000035,0.000000,0.000000 +5568,-3.0,90.000035,0.000000,0.000000 +5569,-3.0,90.000035,0.000000,0.000000 +5570,-3.0,90.000035,0.000000,0.000000 +5571,-3.0,90.000035,0.000000,0.000000 +5572,-3.0,90.000035,0.000000,0.000000 +5573,-3.0,90.000035,0.000000,0.000000 +5574,-3.0,90.000035,0.000000,0.000000 +5575,-3.0,90.000035,0.000000,0.000000 +5576,-3.0,90.000035,0.000000,0.000000 +5577,-3.0,90.000035,0.000000,0.000000 +5578,-3.0,90.000035,0.000000,0.000000 +5579,-3.0,90.000035,0.000000,0.000000 +5580,-3.0,90.000035,0.000000,0.000000 +5581,-3.0,90.000035,0.000000,0.000000 +5582,-3.0,90.000035,0.000000,0.000000 +5583,-3.0,90.000035,0.000000,0.000000 +5584,-3.0,90.000035,0.000000,0.000000 +5585,-3.0,90.000035,0.000000,0.000000 +5586,-3.0,90.000035,0.000000,0.000000 +5587,-3.0,90.000035,0.000000,0.000000 +5588,-3.0,90.000035,0.000000,0.000000 +5589,-3.0,90.000035,0.000000,0.000000 +5590,-3.0,90.000035,0.000000,0.000000 +5591,-3.0,90.000035,0.000000,0.000000 +5592,-3.0,90.000035,0.000000,0.000000 +5593,-3.0,90.000035,0.000000,0.000000 +5594,-3.0,90.000035,0.000000,0.000000 +5595,-3.0,90.000035,0.000000,0.000000 +5596,-3.0,90.000035,0.000000,0.000000 +5597,-3.0,90.000035,0.000000,0.000000 +5598,-3.0,90.000035,0.000000,0.000000 +5599,-3.0,90.000035,0.000000,0.000000 +5600,-3.0,90.000035,0.000000,0.000000 +5601,-3.0,90.000035,0.000000,0.000000 +5602,-3.0,90.000035,0.000000,0.000000 +5603,-3.0,90.000035,0.000000,0.000000 +5604,-3.0,90.000035,0.000000,0.000000 +5605,-3.0,90.000035,0.000000,0.000000 +5606,-3.0,90.000035,0.000000,0.000000 +5607,-3.0,90.000035,0.000000,0.000000 +5608,-3.0,90.000035,0.000000,0.000000 +5609,-3.0,90.000035,0.000000,0.000000 +5610,-3.0,90.000035,0.000000,0.000000 +5611,-3.0,90.000035,0.000000,0.000000 +5612,-3.0,90.000035,0.000000,0.000000 +5613,-3.0,90.000035,0.000000,0.000000 +5614,-3.0,90.000035,0.000000,0.000000 +5615,-3.0,90.000035,0.000000,0.000000 +5616,-3.0,90.000035,0.000000,0.000000 +5617,-3.0,90.000035,0.000000,0.000000 +5618,-3.0,90.000035,0.000000,0.000000 +5619,-3.0,90.000035,0.000000,0.000000 +5620,-3.0,90.000035,0.000000,0.000000 +5621,-3.0,90.000035,0.000000,0.000000 +5622,-3.0,90.000035,0.000000,0.000000 +5623,-3.0,90.000035,0.000000,0.000000 +5624,-3.0,90.000035,0.000000,0.000000 +5625,-3.0,90.000035,0.000000,0.000000 +5626,-3.0,90.000035,0.000000,0.000000 +5627,-3.0,90.000035,0.000000,0.000000 +5628,-3.0,90.000035,0.000000,0.000000 +5629,-3.0,90.000035,0.000000,0.000000 +5630,-3.0,90.000035,0.000000,0.000000 +5631,-3.0,90.000035,0.000000,0.000000 +5632,-3.0,90.000035,0.000000,0.000000 +5633,-3.0,90.000035,0.000000,0.000000 +5634,-3.0,90.000035,0.000000,0.000000 +5635,-3.0,90.000035,0.000000,0.000000 +5636,-3.0,90.000035,0.000000,0.000000 +5637,-3.0,90.000035,0.000000,0.000000 +5638,-3.0,90.000035,0.000000,0.000000 +5639,-3.0,90.000035,0.000000,0.000000 +5640,-3.0,90.000035,0.000000,0.000000 +5641,-3.0,90.000035,0.000000,0.000000 +5642,-3.0,90.000035,0.000000,0.000000 +5643,-3.0,90.000035,0.000000,0.000000 +5644,-3.0,90.000035,0.000000,0.000000 +5645,-3.0,90.000035,0.000000,0.000000 +5646,-3.0,90.000035,0.000000,0.000000 +5647,-3.0,90.000035,0.000000,0.000000 +5648,-3.0,90.000035,0.000000,0.000000 +5649,-3.0,90.000035,0.000000,0.000000 +5650,-3.0,90.000035,0.000000,0.000000 +5651,-3.0,90.000035,0.000000,0.000000 +5652,-3.0,90.000035,0.000000,0.000000 +5653,-3.0,90.000035,0.000000,0.000000 +5654,-3.0,90.000035,0.000000,0.000000 +5655,-3.0,90.000035,0.000000,0.000000 +5656,-3.0,90.000035,0.000000,0.000000 +5657,-3.0,90.000035,0.000000,0.000000 +5658,-3.0,90.000035,0.000000,0.000000 +5659,-3.0,90.000035,0.000000,0.000000 +5660,-3.0,90.000035,0.000000,0.000000 +5661,-3.0,90.000035,0.000000,0.000000 +5662,-3.0,90.000035,0.000000,0.000000 +5663,-3.0,90.000035,0.000000,0.000000 +5664,-3.0,90.000035,0.000000,0.000000 +5665,-3.0,90.000035,0.000000,0.000000 +5666,-3.0,90.000035,0.000000,0.000000 +5667,-3.0,90.000035,0.000000,0.000000 +5668,-3.0,90.000035,0.000000,0.000000 +5669,-3.0,90.000035,0.000000,0.000000 +5670,-3.0,90.000035,0.000000,0.000000 +5671,-3.0,90.000035,0.000000,0.000000 +5672,-3.0,90.000035,0.000000,0.000000 +5673,-3.0,90.000035,0.000000,0.000000 +5674,-3.0,90.000035,0.000000,0.000000 +5675,-3.0,90.000035,0.000000,0.000000 +5676,-3.0,90.000035,0.000000,0.000000 +5677,-3.0,90.000035,0.000000,0.000000 +5678,-3.0,90.000035,0.000000,0.000000 +5679,-3.0,90.000035,0.000000,0.000000 +5680,-3.0,90.000035,0.000000,0.000000 +5681,-3.0,90.000035,0.000000,0.000000 +5682,-3.0,90.000035,0.000000,0.000000 +5683,-3.0,90.000035,0.000000,0.000000 +5684,-3.0,90.000035,0.000000,0.000000 +5685,-3.0,90.000035,0.000000,0.000000 +5686,-3.0,90.000035,0.000000,0.000000 +5687,-3.0,90.000035,0.000000,0.000000 +5688,-3.0,90.000035,0.000000,0.000000 +5689,-3.0,90.000035,0.000000,0.000000 +5690,-3.0,90.000035,0.000000,0.000000 +5691,-3.0,90.000035,0.000000,0.000000 +5692,-3.0,90.000035,0.000000,0.000000 +5693,-3.0,90.000035,0.000000,0.000000 +5694,-3.0,90.000035,0.000000,0.000000 +5695,-3.0,90.000035,0.000000,0.000000 +5696,-3.0,90.000035,0.000000,0.000000 +5697,-3.0,90.000035,0.000000,0.000000 +5698,-3.0,90.000035,0.000000,0.000000 +5699,-3.0,90.000035,0.000000,0.000000 +5700,-3.0,90.000035,0.000000,0.000000 +5701,-3.0,90.000035,0.000000,0.000000 +5702,-3.0,90.000035,0.000000,0.000000 +5703,-3.0,90.000035,0.000000,0.000000 +5704,-3.0,90.000035,0.000000,0.000000 +5705,-3.0,90.000035,0.000000,0.000000 +5706,-3.0,90.000035,0.000000,0.000000 +5707,-3.0,90.000035,0.000000,0.000000 +5708,-3.0,90.000035,0.000000,0.000000 +5709,-3.0,90.000035,0.000000,0.000000 +5710,-3.0,90.000035,0.000000,0.000000 +5711,-3.0,90.000035,0.000000,0.000000 +5712,-3.0,90.000035,0.000000,0.000000 +5713,-3.0,90.000035,0.000000,0.000000 +5714,-3.0,90.000035,0.000000,0.000000 +5715,-3.0,90.000035,0.000000,0.000000 +5716,-3.0,90.000035,0.000000,0.000000 +5717,-3.0,90.000035,0.000000,0.000000 +5718,-3.0,90.000035,0.000000,0.000000 +5719,-3.0,90.000035,0.000000,0.000000 +5720,-3.0,90.000035,0.000000,0.000000 +5721,-3.0,90.000035,0.000000,0.000000 +5722,-3.0,90.000035,0.000000,0.000000 +5723,-3.0,90.000035,0.000000,0.000000 +5724,-3.0,90.000035,0.000000,0.000000 +5725,-3.0,90.000035,0.000000,0.000000 +5726,-3.0,90.000035,0.000000,0.000000 +5727,-3.0,90.000035,0.000000,0.000000 +5728,-3.0,90.000035,0.000000,0.000000 +5729,-3.0,90.000035,0.000000,0.000000 +5730,-3.0,90.000035,0.000000,0.000000 +5731,-3.0,90.000035,0.000000,0.000000 +5732,-3.0,90.000035,0.000000,0.000000 +5733,-3.0,90.000035,0.000000,0.000000 +5734,-3.0,90.000035,0.000000,0.000000 +5735,-3.0,90.000035,0.000000,0.000000 +5736,-3.0,90.000035,0.000000,0.000000 +5737,-3.0,90.000035,0.000000,0.000000 +5738,-3.0,90.000035,0.000000,0.000000 +5739,-3.0,90.000035,0.000000,0.000000 +5740,-3.0,90.000035,0.000000,0.000000 +5741,-3.0,90.000035,0.000000,0.000000 +5742,-3.0,90.000035,0.000000,0.000000 +5743,-3.0,90.000035,0.000000,0.000000 +5744,-3.0,90.000035,0.000000,0.000000 +5745,-3.0,90.000035,0.000000,0.000000 +5746,-3.0,90.000035,0.000000,0.000000 +5747,-3.0,90.000035,0.000000,0.000000 +5748,-3.0,90.000035,0.000000,0.000000 +5749,-3.0,90.000035,0.000000,0.000000 +5750,-3.0,90.000035,0.000000,0.000000 +5751,-3.0,90.000035,0.000000,0.000000 +5752,-3.0,90.000035,0.000000,0.000000 +5753,-3.0,90.000035,0.000000,0.000000 +5754,-3.0,90.000035,0.000000,0.000000 +5755,-3.0,90.000035,0.000000,0.000000 +5756,-3.0,90.000035,0.000000,0.000000 +5757,-3.0,90.000035,0.000000,0.000000 +5758,-3.0,90.000035,0.000000,0.000000 +5759,-3.0,90.000035,0.000000,0.000000 +5760,-3.0,90.000035,0.000000,0.000000 +5761,-3.0,90.000035,0.000000,0.000000 +5762,-3.0,90.000035,0.000000,0.000000 +5763,-3.0,90.000035,0.000000,0.000000 +5764,-3.0,90.000035,0.000000,0.000000 +5765,-3.0,90.000035,0.000000,0.000000 +5766,-3.0,90.000035,0.000000,0.000000 +5767,-3.0,90.000035,0.000000,0.000000 +5768,-3.0,90.000035,0.000000,0.000000 +5769,-3.0,90.000035,0.000000,0.000000 +5770,-3.0,90.000035,0.000000,0.000000 +5771,-3.0,90.000035,0.000000,0.000000 +5772,-3.0,90.000035,0.000000,0.000000 +5773,-3.0,90.000035,0.000000,0.000000 +5774,-3.0,90.000035,0.000000,0.000000 +5775,-3.0,90.000035,0.000000,0.000000 +5776,-3.0,90.000035,0.000000,0.000000 +5777,-3.0,90.000035,0.000000,0.000000 +5778,-3.0,90.000035,0.000000,0.000000 +5779,-3.0,90.000035,0.000000,0.000000 +5780,-3.0,90.000035,0.000000,0.000000 +5781,-3.0,90.000035,0.000000,0.000000 +5782,-3.0,90.000035,0.000000,0.000000 +5783,-3.0,90.000035,0.000000,0.000000 +5784,-3.0,90.000035,0.000000,0.000000 +5785,-3.0,90.000035,0.000000,0.000000 +5786,-3.0,90.000035,0.000000,0.000000 +5787,-3.0,90.000035,0.000000,0.000000 +5788,-3.0,90.000035,0.000000,0.000000 +5789,-3.0,90.000035,0.000000,0.000000 +5790,-3.0,90.000035,0.000000,0.000000 +5791,-3.0,90.000035,0.000000,0.000000 +5792,-3.0,90.000035,0.000000,0.000000 +5793,-3.0,90.000035,0.000000,0.000000 +5794,-3.0,90.000035,0.000000,0.000000 +5795,-3.0,90.000035,0.000000,0.000000 +5796,-3.0,90.000035,0.000000,0.000000 +5797,-3.0,90.000035,0.000000,0.000000 +5798,-3.0,90.000035,0.000000,0.000000 +5799,-3.0,90.000035,0.000000,0.000000 +5800,-3.0,90.000035,0.000000,0.000000 +5801,-3.0,90.000035,0.000000,0.000000 +5802,-3.0,90.000035,0.000000,0.000000 +5803,-3.0,90.000035,0.000000,0.000000 +5804,-3.0,90.000035,0.000000,0.000000 +5805,-3.0,90.000035,0.000000,0.000000 +5806,-3.0,90.000035,0.000000,0.000000 +5807,-3.0,90.000035,0.000000,0.000000 +5808,-3.0,90.000035,0.000000,0.000000 +5809,-3.0,90.000035,0.000000,0.000000 +5810,-3.0,90.000035,0.000000,0.000000 +5811,-3.0,90.000035,0.000000,0.000000 +5812,-3.0,90.000035,0.000000,0.000000 +5813,-3.0,90.000035,0.000000,0.000000 +5814,-3.0,90.000035,0.000000,0.000000 +5815,-3.0,90.000035,0.000000,0.000000 +5816,-3.0,90.000035,0.000000,0.000000 +5817,-3.0,90.000035,0.000000,0.000000 +5818,-3.0,90.000035,0.000000,0.000000 +5819,-3.0,90.000035,0.000000,0.000000 +5820,-3.0,90.000035,0.000000,0.000000 +5821,-3.0,90.000035,0.000000,0.000000 +5822,-3.0,90.000035,0.000000,0.000000 +5823,-3.0,90.000035,0.000000,0.000000 +5824,-3.0,90.000035,0.000000,0.000000 +5825,-3.0,90.000035,0.000000,0.000000 +5826,-3.0,90.000035,0.000000,0.000000 +5827,-3.0,90.000035,0.000000,0.000000 +5828,-3.0,90.000035,0.000000,0.000000 +5829,-3.0,90.000035,0.000000,0.000000 +5830,-3.0,90.000035,0.000000,0.000000 +5831,-3.0,90.000035,0.000000,0.000000 +5832,-3.0,90.000035,0.000000,0.000000 +5833,-3.0,90.000035,0.000000,0.000000 +5834,-3.0,90.000035,0.000000,0.000000 +5835,-3.0,90.000035,0.000000,0.000000 +5836,-3.0,90.000035,0.000000,0.000000 +5837,-3.0,90.000035,0.000000,0.000000 +5838,-3.0,90.000035,0.000000,0.000000 +5839,-3.0,90.000035,0.000000,0.000000 +5840,-3.0,90.000035,0.000000,0.000000 +5841,-3.0,90.000035,0.000000,0.000000 +5842,-3.0,90.000035,0.000000,0.000000 +5843,-3.0,90.000035,0.000000,0.000000 +5844,-3.0,90.000035,0.000000,0.000000 +5845,-3.0,90.000035,0.000000,0.000000 +5846,-3.0,90.000035,0.000000,0.000000 +5847,-3.0,90.000035,0.000000,0.000000 +5848,-3.0,90.000035,0.000000,0.000000 +5849,-3.0,90.000035,0.000000,0.000000 +5850,-3.0,90.000035,0.000000,0.000000 +5851,-3.0,90.000035,0.000000,0.000000 +5852,-3.0,90.000035,0.000000,0.000000 +5853,-3.0,90.000035,0.000000,0.000000 +5854,-3.0,90.000035,0.000000,0.000000 +5855,-3.0,90.000035,0.000000,0.000000 +5856,-3.0,90.000035,0.000000,0.000000 +5857,-3.0,90.000035,0.000000,0.000000 +5858,-3.0,90.000035,0.000000,0.000000 +5859,-3.0,90.000035,0.000000,0.000000 +5860,-3.0,90.000035,0.000000,0.000000 +5861,-3.0,90.000035,0.000000,0.000000 +5862,-3.0,90.000035,0.000000,0.000000 +5863,-3.0,90.000035,0.000000,0.000000 +5864,-3.0,90.000035,0.000000,0.000000 +5865,-3.0,90.000035,0.000000,0.000000 +5866,-3.0,90.000035,0.000000,0.000000 +5867,-3.0,90.000035,0.000000,0.000000 +5868,-3.0,90.000035,0.000000,0.000000 +5869,-3.0,90.000035,0.000000,0.000000 +5870,-3.0,90.000035,0.000000,0.000000 +5871,-3.0,90.000035,0.000000,0.000000 +5872,-3.0,90.000035,0.000000,0.000000 +5873,-3.0,90.000035,0.000000,0.000000 +5874,-3.0,90.000035,0.000000,0.000000 +5875,-3.0,90.000035,0.000000,0.000000 +5876,-3.0,90.000035,0.000000,0.000000 +5877,-3.0,90.000035,0.000000,0.000000 +5878,-3.0,90.000035,0.000000,0.000000 +5879,-3.0,90.000035,0.000000,0.000000 +5880,-3.0,90.000035,0.000000,0.000000 +5881,-3.0,90.000035,0.000000,0.000000 +5882,-3.0,90.000035,0.000000,0.000000 +5883,-3.0,90.000035,0.000000,0.000000 +5884,-3.0,90.000035,0.000000,0.000000 +5885,-3.0,90.000035,0.000000,0.000000 +5886,-3.0,90.000035,0.000000,0.000000 +5887,-3.0,90.000035,0.000000,0.000000 +5888,-3.0,90.000035,0.000000,0.000000 +5889,-3.0,90.000035,0.000000,0.000000 +5890,-3.0,90.000035,0.000000,0.000000 +5891,-3.0,90.000035,0.000000,0.000000 +5892,-3.0,90.000035,0.000000,0.000000 +5893,-3.0,90.000035,0.000000,0.000000 +5894,-3.0,90.000035,0.000000,0.000000 +5895,-3.0,90.000035,0.000000,0.000000 +5896,-3.0,90.000035,0.000000,0.000000 +5897,-3.0,90.000035,0.000000,0.000000 +5898,-3.0,90.000035,0.000000,0.000000 +5899,-3.0,90.000035,0.000000,0.000000 +5900,-3.0,90.000035,0.000000,0.000000 +5901,-3.0,90.000035,0.000000,0.000000 +5902,-3.0,90.000035,0.000000,0.000000 +5903,-3.0,90.000035,0.000000,0.000000 +5904,-3.0,90.000035,0.000000,0.000000 +5905,-3.0,90.000035,0.000000,0.000000 +5906,-3.0,90.000035,0.000000,0.000000 +5907,-3.0,90.000035,0.000000,0.000000 +5908,-3.0,90.000035,0.000000,0.000000 +5909,-3.0,90.000035,0.000000,0.000000 +5910,-3.0,90.000035,0.000000,0.000000 +5911,-3.0,90.000035,0.000000,0.000000 +5912,-3.0,90.000035,0.000000,0.000000 +5913,-3.0,90.000035,0.000000,0.000000 +5914,-3.0,90.000035,0.000000,0.000000 +5915,-3.0,90.000035,0.000000,0.000000 +5916,-3.0,90.000035,0.000000,0.000000 +5917,-3.0,90.000035,0.000000,0.000000 +5918,-3.0,90.000035,0.000000,0.000000 +5919,-3.0,90.000035,0.000000,0.000000 +5920,-3.0,90.000035,0.000000,0.000000 +5921,-3.0,90.000035,0.000000,0.000000 +5922,-3.0,90.000035,0.000000,0.000000 +5923,-3.0,90.000035,0.000000,0.000000 +5924,-3.0,90.000035,0.000000,0.000000 +5925,-3.0,90.000035,0.000000,0.000000 +5926,-3.0,90.000035,0.000000,0.000000 +5927,-3.0,90.000035,0.000000,0.000000 +5928,-3.0,90.000035,0.000000,0.000000 +5929,-3.0,90.000035,0.000000,0.000000 +5930,-3.0,90.000035,0.000000,0.000000 +5931,-3.0,90.000035,0.000000,0.000000 +5932,-3.0,90.000035,0.000000,0.000000 +5933,-3.0,90.000035,0.000000,0.000000 +5934,-3.0,90.000035,0.000000,0.000000 +5935,-3.0,90.000035,0.000000,0.000000 +5936,-3.0,90.000035,0.000000,0.000000 +5937,-3.0,90.000035,0.000000,0.000000 +5938,-3.0,90.000035,0.000000,0.000000 +5939,-3.0,90.000035,0.000000,0.000000 +5940,-3.0,90.000035,0.000000,0.000000 +5941,-3.0,90.000035,0.000000,0.000000 +5942,-3.0,90.000035,0.000000,0.000000 +5943,-3.0,90.000035,0.000000,0.000000 +5944,-3.0,90.000035,0.000000,0.000000 +5945,-3.0,90.000035,0.000000,0.000000 +5946,-3.0,90.000035,0.000000,0.000000 +5947,-3.0,90.000035,0.000000,0.000000 +5948,-3.0,90.000035,0.000000,0.000000 +5949,-3.0,90.000035,0.000000,0.000000 +5950,-3.0,90.000035,0.000000,0.000000 +5951,-3.0,90.000035,0.000000,0.000000 +5952,-3.0,90.000035,0.000000,0.000000 +5953,-3.0,90.000035,0.000000,0.000000 +5954,-3.0,90.000035,0.000000,0.000000 +5955,-3.0,90.000035,0.000000,0.000000 +5956,-3.0,90.000035,0.000000,0.000000 +5957,-3.0,90.000035,0.000000,0.000000 +5958,-3.0,90.000035,0.000000,0.000000 +5959,-3.0,90.000035,0.000000,0.000000 +5960,-3.0,90.000035,0.000000,0.000000 +5961,-3.0,90.000035,0.000000,0.000000 +5962,-3.0,90.000035,0.000000,0.000000 +5963,-3.0,90.000035,0.000000,0.000000 +5964,-3.0,90.000035,0.000000,0.000000 +5965,-3.0,90.000035,0.000000,0.000000 +5966,-3.0,90.000035,0.000000,0.000000 +5967,-3.0,90.000035,0.000000,0.000000 +5968,-3.0,90.000035,0.000000,0.000000 +5969,-3.0,90.000035,0.000000,0.000000 +5970,-3.0,90.000035,0.000000,0.000000 +5971,-3.0,90.000035,0.000000,0.000000 +5972,-3.0,90.000035,0.000000,0.000000 +5973,-3.0,90.000035,0.000000,0.000000 +5974,-3.0,90.000035,0.000000,0.000000 +5975,-3.0,90.000035,0.000000,0.000000 +5976,-3.0,90.000035,0.000000,0.000000 +5977,-3.0,90.000035,0.000000,0.000000 +5978,-3.0,90.000035,0.000000,0.000000 +5979,-3.0,90.000035,0.000000,0.000000 +5980,-3.0,90.000035,0.000000,0.000000 +5981,-3.0,90.000035,0.000000,0.000000 +5982,-3.0,90.000035,0.000000,0.000000 +5983,-3.0,90.000035,0.000000,0.000000 +5984,-3.0,90.000035,0.000000,0.000000 +5985,-3.0,90.000035,0.000000,0.000000 +5986,-3.0,90.000035,0.000000,0.000000 +5987,-3.0,90.000035,0.000000,0.000000 +5988,-3.0,90.000035,0.000000,0.000000 +5989,-3.0,90.000035,0.000000,0.000000 +5990,-3.0,90.000035,0.000000,0.000000 +5991,-3.0,90.000035,0.000000,0.000000 +5992,-3.0,90.000035,0.000000,0.000000 +5993,-3.0,90.000035,0.000000,0.000000 +5994,-3.0,90.000035,0.000000,0.000000 +5995,-3.0,90.000035,0.000000,0.000000 +5996,-3.0,90.000035,0.000000,0.000000 +5997,-3.0,90.000035,0.000000,0.000000 +5998,-3.0,90.000035,0.000000,0.000000 +5999,-3.0,90.000035,0.000000,0.000000 +6000,-3.0,90.000035,0.000000,0.000000 +6001,-3.0,90.000035,0.000000,0.000000 +6002,-3.0,90.000035,0.000000,0.000000 +6003,-3.0,90.000035,0.000000,0.000000 +6004,-3.0,90.000035,0.000000,0.000000 +6005,-3.0,90.000035,0.000000,0.000000 +6006,-3.0,90.000035,0.000000,0.000000 +6007,-3.0,90.000035,0.000000,0.000000 +6008,-3.0,90.000035,0.000000,0.000000 +6009,-3.0,90.000035,0.000000,0.000000 +6010,-3.0,90.000035,0.000000,0.000000 +6011,-3.0,90.000035,0.000000,0.000000 +6012,-3.0,90.000035,0.000000,0.000000 +6013,-3.0,90.000035,0.000000,0.000000 +6014,-3.0,90.000035,0.000000,0.000000 +6015,-3.0,90.000035,0.000000,0.000000 +6016,-3.0,90.000035,0.000000,0.000000 +6017,-3.0,90.000035,0.000000,0.000000 +6018,-3.0,90.000035,0.000000,0.000000 +6019,-3.0,90.000035,0.000000,0.000000 +6020,-3.0,90.000035,0.000000,0.000000 +6021,-3.0,90.000035,0.000000,0.000000 +6022,-3.0,90.000035,0.000000,0.000000 +6023,-3.0,90.000035,0.000000,0.000000 +6024,-3.0,90.000035,0.000000,0.000000 +6025,-3.0,90.000035,0.000000,0.000000 +6026,-3.0,90.000035,0.000000,0.000000 +6027,-3.0,90.000035,0.000000,0.000000 +6028,-3.0,90.000035,0.000000,0.000000 +6029,-3.0,90.000035,0.000000,0.000000 +6030,-3.0,90.000035,0.000000,0.000000 +6031,-3.0,90.000035,0.000000,0.000000 +6032,-3.0,90.000035,0.000000,0.000000 +6033,-3.0,90.000035,0.000000,0.000000 +6034,-3.0,90.000035,0.000000,0.000000 +6035,-3.0,90.000035,0.000000,0.000000 +6036,-3.0,90.000035,0.000000,0.000000 +6037,-3.0,90.000035,0.000000,0.000000 +6038,-3.0,90.000035,0.000000,0.000000 +6039,-3.0,90.000035,0.000000,0.000000 +6040,-3.0,90.000035,0.000000,0.000000 +6041,-3.0,90.000035,0.000000,0.000000 +6042,-3.0,90.000035,0.000000,0.000000 +6043,-3.0,90.000035,0.000000,0.000000 +6044,-3.0,90.000035,0.000000,0.000000 +6045,-3.0,90.000035,0.000000,0.000000 +6046,-3.0,90.000035,0.000000,0.000000 +6047,-3.0,90.000035,0.000000,0.000000 +6048,-3.0,90.000035,0.000000,0.000000 +6049,-3.0,90.000035,0.000000,0.000000 +6050,-3.0,90.000035,0.000000,0.000000 +6051,-3.0,90.000035,0.000000,0.000000 +6052,-3.0,90.000035,0.000000,0.000000 +6053,-3.0,90.000035,0.000000,0.000000 +6054,-3.0,90.000035,0.000000,0.000000 +6055,-3.0,90.000035,0.000000,0.000000 +6056,-3.0,90.000035,0.000000,0.000000 +6057,-3.0,90.000035,0.000000,0.000000 +6058,-3.0,90.000035,0.000000,0.000000 +6059,-3.0,90.000035,0.000000,0.000000 +6060,-3.0,90.000035,0.000000,0.000000 +6061,-3.0,90.000035,0.000000,0.000000 +6062,-3.0,90.000035,0.000000,0.000000 +6063,-3.0,90.000035,0.000000,0.000000 +6064,-3.0,90.000035,0.000000,0.000000 +6065,-3.0,90.000035,0.000000,0.000000 +6066,-3.0,90.000035,0.000000,0.000000 +6067,-3.0,90.000035,0.000000,0.000000 +6068,-3.0,90.000035,0.000000,0.000000 +6069,-3.0,90.000035,0.000000,0.000000 +6070,-3.0,90.000035,0.000000,0.000000 +6071,-3.0,90.000035,0.000000,0.000000 +6072,-3.0,90.000035,0.000000,0.000000 +6073,-3.0,90.000035,0.000000,0.000000 +6074,-3.0,90.000035,0.000000,0.000000 +6075,-3.0,90.000035,0.000000,0.000000 +6076,-3.0,90.000035,0.000000,0.000000 +6077,-3.0,90.000035,0.000000,0.000000 +6078,-3.0,90.000035,0.000000,0.000000 +6079,-3.0,90.000035,0.000000,0.000000 +6080,-3.0,90.000035,0.000000,0.000000 +6081,-3.0,90.000035,0.000000,0.000000 +6082,-3.0,90.000035,0.000000,0.000000 +6083,-3.0,90.000035,0.000000,0.000000 +6084,-3.0,90.000035,0.000000,0.000000 +6085,-3.0,90.000035,0.000000,0.000000 +6086,-3.0,90.000035,0.000000,0.000000 +6087,-3.0,90.000035,0.000000,0.000000 +6088,-3.0,90.000035,0.000000,0.000000 +6089,-3.0,90.000035,0.000000,0.000000 +6090,-3.0,90.000035,0.000000,0.000000 +6091,-3.0,90.000035,0.000000,0.000000 +6092,-3.0,90.000035,0.000000,0.000000 +6093,-3.0,90.000035,0.000000,0.000000 +6094,-3.0,90.000035,0.000000,0.000000 +6095,-3.0,90.000035,0.000000,0.000000 +6096,-3.0,90.000035,0.000000,0.000000 +6097,-3.0,90.000035,0.000000,0.000000 +6098,-3.0,90.000035,0.000000,0.000000 +6099,-3.0,90.000035,0.000000,0.000000 +6100,-3.0,90.000035,0.000000,0.000000 +6101,-3.0,90.000035,0.000000,0.000000 +6102,-3.0,90.000035,0.000000,0.000000 +6103,-3.0,90.000035,0.000000,0.000000 +6104,-3.0,90.000035,0.000000,0.000000 +6105,-3.0,90.000035,0.000000,0.000000 +6106,-3.0,90.000035,0.000000,0.000000 +6107,-3.0,90.000035,0.000000,0.000000 +6108,-3.0,90.000035,0.000000,0.000000 +6109,-3.0,90.000035,0.000000,0.000000 +6110,-3.0,90.000035,0.000000,0.000000 +6111,-3.0,90.000035,0.000000,0.000000 +6112,-3.0,90.000035,0.000000,0.000000 +6113,-3.0,90.000035,0.000000,0.000000 +6114,-3.0,90.000035,0.000000,0.000000 +6115,-3.0,90.000035,0.000000,0.000000 +6116,-3.0,90.000035,0.000000,0.000000 +6117,-3.0,90.000035,0.000000,0.000000 +6118,-3.0,90.000035,0.000000,0.000000 +6119,-3.0,90.000035,0.000000,0.000000 +6120,-3.0,90.000035,0.000000,0.000000 +6121,-3.0,90.000035,0.000000,0.000000 +6122,-3.0,90.000035,0.000000,0.000000 +6123,-3.0,90.000035,0.000000,0.000000 +6124,-3.0,90.000035,0.000000,0.000000 +6125,-3.0,90.000035,0.000000,0.000000 +6126,-3.0,90.000035,0.000000,0.000000 +6127,-3.0,90.000035,0.000000,0.000000 +6128,-3.0,90.000035,0.000000,0.000000 +6129,-3.0,90.000035,0.000000,0.000000 +6130,-3.0,90.000035,0.000000,0.000000 +6131,-3.0,90.000035,0.000000,0.000000 +6132,-3.0,90.000035,0.000000,0.000000 +6133,-3.0,90.000035,0.000000,0.000000 +6134,-3.0,90.000035,0.000000,0.000000 +6135,-3.0,90.000035,0.000000,0.000000 +6136,-3.0,90.000035,0.000000,0.000000 +6137,-3.0,90.000035,0.000000,0.000000 +6138,-3.0,90.000035,0.000000,0.000000 +6139,-3.0,90.000035,0.000000,0.000000 +6140,-3.0,90.000035,0.000000,0.000000 +6141,-3.0,90.000035,0.000000,0.000000 +6142,-3.0,90.000035,0.000000,0.000000 +6143,-3.0,90.000035,0.000000,0.000000 +6144,-3.0,90.000035,0.000000,0.000000 +6145,-3.0,90.000035,0.000000,0.000000 +6146,-3.0,90.000035,0.000000,0.000000 +6147,-3.0,90.000035,0.000000,0.000000 +6148,-3.0,90.000035,0.000000,0.000000 +6149,-3.0,90.000035,0.000000,0.000000 +6150,-3.0,90.000035,0.000000,0.000000 +6151,-3.0,90.000035,0.000000,0.000000 +6152,-3.0,90.000035,0.000000,0.000000 +6153,-3.0,90.000035,0.000000,0.000000 +6154,-3.0,90.000035,0.000000,0.000000 +6155,-3.0,90.000035,0.000000,0.000000 +6156,-3.0,90.000035,0.000000,0.000000 +6157,-3.0,90.000035,0.000000,0.000000 +6158,-3.0,90.000035,0.000000,0.000000 +6159,-3.0,90.000035,0.000000,0.000000 +6160,-3.0,90.000035,0.000000,0.000000 +6161,-3.0,90.000035,0.000000,0.000000 +6162,-3.0,90.000035,0.000000,0.000000 +6163,-3.0,90.000035,0.000000,0.000000 +6164,-3.0,90.000035,0.000000,0.000000 +6165,-3.0,90.000035,0.000000,0.000000 +6166,-3.0,90.000035,0.000000,0.000000 +6167,-3.0,90.000035,0.000000,0.000000 +6168,-3.0,90.000035,0.000000,0.000000 +6169,-3.0,90.000035,0.000000,0.000000 +6170,-3.0,90.000035,0.000000,0.000000 +6171,-3.0,90.000035,0.000000,0.000000 +6172,-3.0,90.000035,0.000000,0.000000 +6173,-3.0,90.000035,0.000000,0.000000 +6174,-3.0,90.000035,0.000000,0.000000 +6175,-3.0,90.000035,0.000000,0.000000 +6176,-3.0,90.000035,0.000000,0.000000 +6177,-3.0,90.000035,0.000000,0.000000 +6178,-3.0,90.000035,0.000000,0.000000 +6179,-3.0,90.000035,0.000000,0.000000 +6180,-3.0,90.000035,0.000000,0.000000 +6181,-3.0,90.000035,0.000000,0.000000 +6182,-3.0,90.000035,0.000000,0.000000 +6183,-3.0,90.000035,0.000000,0.000000 +6184,-3.0,90.000035,0.000000,0.000000 +6185,-3.0,90.000035,0.000000,0.000000 +6186,-3.0,90.000035,0.000000,0.000000 +6187,-3.0,90.000035,0.000000,0.000000 +6188,-3.0,90.000035,0.000000,0.000000 +6189,-3.0,90.000035,0.000000,0.000000 +6190,-3.0,90.000035,0.000000,0.000000 +6191,-3.0,90.000035,0.000000,0.000000 +6192,-3.0,90.000035,0.000000,0.000000 +6193,-3.0,90.000035,0.000000,0.000000 +6194,-3.0,90.000035,0.000000,0.000000 +6195,-3.0,90.000035,0.000000,0.000000 +6196,-3.0,90.000035,0.000000,0.000000 +6197,-3.0,90.000035,0.000000,0.000000 +6198,-3.0,90.000035,0.000000,0.000000 +6199,-3.0,90.000035,0.000000,0.000000 +6200,-3.0,90.000035,0.000000,0.000000 +6201,-3.0,90.000035,0.000000,0.000000 +6202,-3.0,90.000035,0.000000,0.000000 +6203,-3.0,90.000035,0.000000,0.000000 +6204,-3.0,90.000035,0.000000,0.000000 +6205,-3.0,90.000035,0.000000,0.000000 +6206,-3.0,90.000035,0.000000,0.000000 +6207,-3.0,90.000035,0.000000,0.000000 +6208,-3.0,90.000035,0.000000,0.000000 +6209,-3.0,90.000035,0.000000,0.000000 +6210,-3.0,90.000035,0.000000,0.000000 +6211,-3.0,90.000035,0.000000,0.000000 +6212,-3.0,90.000035,0.000000,0.000000 +6213,-3.0,90.000035,0.000000,0.000000 +6214,-3.0,90.000035,0.000000,0.000000 +6215,-3.0,90.000035,0.000000,0.000000 +6216,-3.0,90.000035,0.000000,0.000000 +6217,-3.0,90.000035,0.000000,0.000000 +6218,-3.0,90.000035,0.000000,0.000000 +6219,-3.0,90.000035,0.000000,0.000000 +6220,-3.0,90.000035,0.000000,0.000000 +6221,-3.0,90.000035,0.000000,0.000000 +6222,-3.0,90.000035,0.000000,0.000000 +6223,-3.0,90.000035,0.000000,0.000000 +6224,-3.0,90.000035,0.000000,0.000000 +6225,-3.0,90.000035,0.000000,0.000000 +6226,-3.0,90.000035,0.000000,0.000000 +6227,-3.0,90.000035,0.000000,0.000000 +6228,-3.0,90.000035,0.000000,0.000000 +6229,-3.0,90.000035,0.000000,0.000000 +6230,-3.0,90.000035,0.000000,0.000000 +6231,-3.0,90.000035,0.000000,0.000000 +6232,-3.0,90.000035,0.000000,0.000000 +6233,-3.0,90.000035,0.000000,0.000000 +6234,-3.0,90.000035,0.000000,0.000000 +6235,-3.0,90.000035,0.000000,0.000000 +6236,-3.0,90.000035,0.000000,0.000000 +6237,-3.0,90.000035,0.000000,0.000000 +6238,-3.0,90.000035,0.000000,0.000000 +6239,-3.0,90.000035,0.000000,0.000000 +6240,-3.0,90.000035,0.000000,0.000000 +6241,-3.0,90.000035,0.000000,0.000000 +6242,-3.0,90.000035,0.000000,0.000000 +6243,-3.0,90.000035,0.000000,0.000000 +6244,-3.0,90.000035,0.000000,0.000000 +6245,-3.0,90.000035,0.000000,0.000000 +6246,-3.0,90.000035,0.000000,0.000000 +6247,-3.0,90.000035,0.000000,0.000000 +6248,-3.0,90.000035,0.000000,0.000000 +6249,-3.0,90.000035,0.000000,0.000000 +6250,-3.0,90.000035,0.000000,0.000000 +6251,-3.0,90.000035,0.000000,0.000000 +6252,-3.0,90.000035,0.000000,0.000000 +6253,-3.0,90.000035,0.000000,0.000000 +6254,-3.0,90.000035,0.000000,0.000000 +6255,-3.0,90.000035,0.000000,0.000000 +6256,-3.0,90.000035,0.000000,0.000000 +6257,-3.0,90.000035,0.000000,0.000000 +6258,-3.0,90.000035,0.000000,0.000000 +6259,-3.0,90.000035,0.000000,0.000000 +6260,-3.0,90.000035,0.000000,0.000000 +6261,-3.0,90.000035,0.000000,0.000000 +6262,-3.0,90.000035,0.000000,0.000000 +6263,-3.0,90.000035,0.000000,0.000000 +6264,-3.0,90.000035,0.000000,0.000000 +6265,-3.0,90.000035,0.000000,0.000000 +6266,-3.0,90.000035,0.000000,0.000000 +6267,-3.0,90.000035,0.000000,0.000000 +6268,-3.0,90.000035,0.000000,0.000000 +6269,-3.0,90.000035,0.000000,0.000000 +6270,-3.0,90.000035,0.000000,0.000000 +6271,-3.0,90.000035,0.000000,0.000000 +6272,-3.0,90.000035,0.000000,0.000000 +6273,-3.0,90.000035,0.000000,0.000000 +6274,-3.0,90.000035,0.000000,0.000000 +6275,-3.0,90.000035,0.000000,0.000000 +6276,-3.0,90.000035,0.000000,0.000000 +6277,-3.0,90.000035,0.000000,0.000000 +6278,-3.0,90.000035,0.000000,0.000000 +6279,-3.0,90.000035,0.000000,0.000000 +6280,-3.0,90.000035,0.000000,0.000000 +6281,-3.0,90.000035,0.000000,0.000000 +6282,-3.0,90.000035,0.000000,0.000000 +6283,-3.0,90.000035,0.000000,0.000000 +6284,-3.0,90.000035,0.000000,0.000000 +6285,-3.0,90.000035,0.000000,0.000000 +6286,-3.0,90.000035,0.000000,0.000000 +6287,-3.0,90.000035,0.000000,0.000000 +6288,-3.0,90.000035,0.000000,0.000000 +6289,-3.0,90.000035,0.000000,0.000000 +6290,-3.0,90.000035,0.000000,0.000000 +6291,-3.0,90.000035,0.000000,0.000000 +6292,-3.0,90.000035,0.000000,0.000000 +6293,-3.0,90.000035,0.000000,0.000000 +6294,-3.0,90.000035,0.000000,0.000000 +6295,-3.0,90.000035,0.000000,0.000000 +6296,-3.0,90.000035,0.000000,0.000000 +6297,-3.0,90.000035,0.000000,0.000000 +6298,-3.0,90.000035,0.000000,0.000000 +6299,-3.0,90.000035,0.000000,0.000000 +6300,-3.0,90.000035,0.000000,0.000000 +6301,-3.0,90.000035,0.000000,0.000000 +6302,-3.0,90.000035,0.000000,0.000000 +6303,-3.0,90.000035,0.000000,0.000000 +6304,-3.0,90.000035,0.000000,0.000000 +6305,-3.0,90.000035,0.000000,0.000000 +6306,-3.0,90.000035,0.000000,0.000000 +6307,-3.0,90.000035,0.000000,0.000000 +6308,-3.0,90.000035,0.000000,0.000000 +6309,-3.0,90.000035,0.000000,0.000000 +6310,-3.0,90.000035,0.000000,0.000000 +6311,-3.0,90.000035,0.000000,0.000000 +6312,-3.0,90.000035,0.000000,0.000000 +6313,-3.0,90.000035,0.000000,0.000000 +6314,-3.0,90.000035,0.000000,0.000000 +6315,-3.0,90.000035,0.000000,0.000000 +6316,-3.0,90.000035,0.000000,0.000000 +6317,-3.0,90.000035,0.000000,0.000000 +6318,-3.0,90.000035,0.000000,0.000000 +6319,-3.0,90.000035,0.000000,0.000000 +6320,-3.0,90.000035,0.000000,0.000000 +6321,-3.0,90.000035,0.000000,0.000000 +6322,-3.0,90.000035,0.000000,0.000000 +6323,-3.0,90.000035,0.000000,0.000000 +6324,-3.0,90.000035,0.000000,0.000000 +6325,-3.0,90.000035,0.000000,0.000000 +6326,-3.0,90.000035,0.000000,0.000000 +6327,-3.0,90.000035,0.000000,0.000000 +6328,-3.0,90.000035,0.000000,0.000000 +6329,-3.0,90.000035,0.000000,0.000000 +6330,-3.0,90.000035,0.000000,0.000000 +6331,-3.0,90.000035,0.000000,0.000000 +6332,-3.0,90.000035,0.000000,0.000000 +6333,-3.0,90.000035,0.000000,0.000000 +6334,-3.0,90.000035,0.000000,0.000000 +6335,-3.0,90.000035,0.000000,0.000000 +6336,-3.0,90.000035,0.000000,0.000000 +6337,-3.0,90.000035,0.000000,0.000000 +6338,-3.0,90.000035,0.000000,0.000000 +6339,-3.0,90.000035,0.000000,0.000000 +6340,-3.0,90.000035,0.000000,0.000000 +6341,-3.0,90.000035,0.000000,0.000000 +6342,-3.0,90.000035,0.000000,0.000000 +6343,-3.0,90.000035,0.000000,0.000000 +6344,-3.0,90.000035,0.000000,0.000000 +6345,-3.0,90.000035,0.000000,0.000000 +6346,-3.0,90.000035,0.000000,0.000000 +6347,-3.0,90.000035,0.000000,0.000000 +6348,-3.0,90.000035,0.000000,0.000000 +6349,-3.0,90.000035,0.000000,0.000000 +6350,-3.0,90.000035,0.000000,0.000000 +6351,-3.0,90.000035,0.000000,0.000000 +6352,-3.0,90.000035,0.000000,0.000000 +6353,-3.0,90.000035,0.000000,0.000000 +6354,-3.0,90.000035,0.000000,0.000000 +6355,-3.0,90.000035,0.000000,0.000000 +6356,-3.0,90.000035,0.000000,0.000000 +6357,-3.0,90.000035,0.000000,0.000000 +6358,-3.0,90.000035,0.000000,0.000000 +6359,-3.0,90.000035,0.000000,0.000000 +6360,-3.0,90.000035,0.000000,0.000000 +6361,-3.0,90.000035,0.000000,0.000000 +6362,-3.0,90.000035,0.000000,0.000000 +6363,-3.0,90.000035,0.000000,0.000000 +6364,-3.0,90.000035,0.000000,0.000000 +6365,-3.0,90.000035,0.000000,0.000000 +6366,-3.0,90.000035,0.000000,0.000000 +6367,-3.0,90.000035,0.000000,0.000000 +6368,-3.0,90.000035,0.000000,0.000000 +6369,-3.0,90.000035,0.000000,0.000000 +6370,-3.0,90.000035,0.000000,0.000000 +6371,-3.0,90.000035,0.000000,0.000000 +6372,-3.0,90.000035,0.000000,0.000000 +6373,-3.0,90.000035,0.000000,0.000000 +6374,-3.0,90.000035,0.000000,0.000000 +6375,-3.0,90.000035,0.000000,0.000000 +6376,-3.0,90.000035,0.000000,0.000000 +6377,-3.0,90.000035,0.000000,0.000000 +6378,-3.0,90.000035,0.000000,0.000000 +6379,-3.0,90.000035,0.000000,0.000000 +6380,-3.0,90.000035,0.000000,0.000000 +6381,-3.0,90.000035,0.000000,0.000000 +6382,-3.0,90.000035,0.000000,0.000000 +6383,-3.0,90.000035,0.000000,0.000000 +6384,-3.0,90.000035,0.000000,0.000000 +6385,-3.0,90.000035,0.000000,0.000000 +6386,-3.0,90.000035,0.000000,0.000000 +6387,-3.0,90.000035,0.000000,0.000000 +6388,-3.0,90.000035,0.000000,0.000000 +6389,-3.0,90.000035,0.000000,0.000000 +6390,-3.0,90.000035,0.000000,0.000000 +6391,-3.0,90.000035,0.000000,0.000000 +6392,-3.0,90.000035,0.000000,0.000000 +6393,-3.0,90.000035,0.000000,0.000000 +6394,-3.0,90.000035,0.000000,0.000000 +6395,-3.0,90.000035,0.000000,0.000000 +6396,-3.0,90.000035,0.000000,0.000000 +6397,-3.0,90.000035,0.000000,0.000000 +6398,-3.0,90.000035,0.000000,0.000000 +6399,-3.0,90.000035,0.000000,0.000000 +6400,-3.0,90.000035,0.000000,0.000000 +6401,-3.0,90.000035,0.000000,0.000000 +6402,-3.0,90.000035,0.000000,0.000000 +6403,-3.0,90.000035,0.000000,0.000000 +6404,-3.0,90.000035,0.000000,0.000000 +6405,-3.0,90.000035,0.000000,0.000000 +6406,-3.0,90.000035,0.000000,0.000000 +6407,-3.0,90.000035,0.000000,0.000000 +6408,-3.0,90.000035,0.000000,0.000000 +6409,-3.0,90.000035,0.000000,0.000000 +6410,-3.0,90.000035,0.000000,0.000000 +6411,-3.0,90.000035,0.000000,0.000000 +6412,-3.0,90.000035,0.000000,0.000000 +6413,-3.0,90.000035,0.000000,0.000000 +6414,-3.0,90.000035,0.000000,0.000000 +6415,-3.0,90.000035,0.000000,0.000000 +6416,-3.0,90.000035,0.000000,0.000000 +6417,-3.0,90.000035,0.000000,0.000000 +6418,-3.0,90.000035,0.000000,0.000000 +6419,-3.0,90.000035,0.000000,0.000000 +6420,-3.0,90.000035,0.000000,0.000000 +6421,-3.0,90.000035,0.000000,0.000000 +6422,-3.0,90.000035,0.000000,0.000000 +6423,-3.0,90.000035,0.000000,0.000000 +6424,-3.0,90.000035,0.000000,0.000000 +6425,-3.0,90.000035,0.000000,0.000000 +6426,-3.0,90.000035,0.000000,0.000000 +6427,-3.0,90.000035,0.000000,0.000000 +6428,-3.0,90.000035,0.000000,0.000000 +6429,-3.0,90.000035,0.000000,0.000000 +6430,-3.0,90.000035,0.000000,0.000000 +6431,-3.0,90.000035,0.000000,0.000000 +6432,-3.0,90.000035,0.000000,0.000000 +6433,-3.0,90.000035,0.000000,0.000000 +6434,-3.0,90.000035,0.000000,0.000000 +6435,-3.0,90.000035,0.000000,0.000000 +6436,-3.0,90.000035,0.000000,0.000000 +6437,-3.0,90.000035,0.000000,0.000000 +6438,-3.0,90.000035,0.000000,0.000000 +6439,-3.0,90.000035,0.000000,0.000000 +6440,-3.0,90.000035,0.000000,0.000000 +6441,-3.0,90.000035,0.000000,0.000000 +6442,-3.0,90.000035,0.000000,0.000000 +6443,-3.0,90.000035,0.000000,0.000000 +6444,-3.0,90.000035,0.000000,0.000000 +6445,-3.0,90.000035,0.000000,0.000000 +6446,-3.0,90.000035,0.000000,0.000000 +6447,-3.0,90.000035,0.000000,0.000000 +6448,-3.0,90.000035,0.000000,0.000000 +6449,-3.0,90.000035,0.000000,0.000000 +6450,-3.0,90.000035,0.000000,0.000000 +6451,-3.0,90.000035,0.000000,0.000000 +6452,-3.0,90.000035,0.000000,0.000000 +6453,-3.0,90.000035,0.000000,0.000000 +6454,-3.0,90.000035,0.000000,0.000000 +6455,-3.0,90.000035,0.000000,0.000000 +6456,-3.0,90.000035,0.000000,0.000000 +6457,-3.0,90.000035,0.000000,0.000000 +6458,-3.0,90.000035,0.000000,0.000000 +6459,-3.0,90.000035,0.000000,0.000000 +6460,-3.0,90.000035,0.000000,0.000000 +6461,-3.0,90.000035,0.000000,0.000000 +6462,-3.0,90.000035,0.000000,0.000000 +6463,-3.0,90.000035,0.000000,0.000000 +6464,-3.0,90.000035,0.000000,0.000000 +6465,-3.0,90.000035,0.000000,0.000000 +6466,-3.0,90.000035,0.000000,0.000000 +6467,-3.0,90.000035,0.000000,0.000000 +6468,-3.0,90.000035,0.000000,0.000000 +6469,-3.0,90.000035,0.000000,0.000000 +6470,-3.0,90.000035,0.000000,0.000000 +6471,-3.0,90.000035,0.000000,0.000000 +6472,-3.0,90.000035,0.000000,0.000000 +6473,-3.0,90.000035,0.000000,0.000000 +6474,-3.0,90.000035,0.000000,0.000000 +6475,-3.0,90.000035,0.000000,0.000000 +6476,-3.0,90.000035,0.000000,0.000000 +6477,-3.0,90.000035,0.000000,0.000000 +6478,-3.0,90.000035,0.000000,0.000000 +6479,-3.0,90.000035,0.000000,0.000000 +6480,-3.0,90.000035,0.000000,0.000000 +6481,-3.0,90.000035,0.000000,0.000000 +6482,-3.0,90.000035,0.000000,0.000000 +6483,-3.0,90.000035,0.000000,0.000000 +6484,-3.0,90.000035,0.000000,0.000000 +6485,-3.0,90.000035,0.000000,0.000000 +6486,-3.0,90.000035,0.000000,0.000000 +6487,-3.0,90.000035,0.000000,0.000000 +6488,-3.0,90.000035,0.000000,0.000000 +6489,-3.0,90.000035,0.000000,0.000000 +6490,-3.0,90.000035,0.000000,0.000000 +6491,-3.0,90.000035,0.000000,0.000000 +6492,-3.0,90.000035,0.000000,0.000000 +6493,-3.0,90.000035,0.000000,0.000000 +6494,-3.0,90.000035,0.000000,0.000000 +6495,-3.0,90.000035,0.000000,0.000000 +6496,-3.0,90.000035,0.000000,0.000000 +6497,-3.0,90.000035,0.000000,0.000000 +6498,-3.0,90.000035,0.000000,0.000000 +6499,-3.0,90.000035,0.000000,0.000000 +6500,-3.0,90.000035,0.000000,0.000000 +6501,-3.0,90.000035,0.000000,0.000000 +6502,-3.0,90.000035,0.000000,0.000000 +6503,-3.0,90.000035,0.000000,0.000000 +6504,-3.0,90.000035,0.000000,0.000000 +6505,-3.0,90.000035,0.000000,0.000000 +6506,-3.0,90.000035,0.000000,0.000000 +6507,-3.0,90.000035,0.000000,0.000000 +6508,-3.0,90.000035,0.000000,0.000000 +6509,-3.0,90.000035,0.000000,0.000000 +6510,-3.0,90.000035,0.000000,0.000000 +6511,-3.0,90.000035,0.000000,0.000000 +6512,-3.0,90.000035,0.000000,0.000000 +6513,-3.0,90.000035,0.000000,0.000000 +6514,-3.0,90.000035,0.000000,0.000000 +6515,-3.0,90.000035,0.000000,0.000000 +6516,-3.0,90.000035,0.000000,0.000000 +6517,-3.0,90.000035,0.000000,0.000000 +6518,-3.0,90.000035,0.000000,0.000000 +6519,-3.0,90.000035,0.000000,0.000000 +6520,-3.0,90.000035,0.000000,0.000000 +6521,-3.0,90.000035,0.000000,0.000000 +6522,-3.0,90.000035,0.000000,0.000000 +6523,-3.0,90.000035,0.000000,0.000000 +6524,-3.0,90.000035,0.000000,0.000000 +6525,-3.0,90.000035,0.000000,0.000000 +6526,-3.0,90.000035,0.000000,0.000000 +6527,-3.0,90.000035,0.000000,0.000000 +6528,-3.0,90.000035,0.000000,0.000000 +6529,-3.0,90.000035,0.000000,0.000000 +6530,-3.0,90.000035,0.000000,0.000000 +6531,-3.0,90.000035,0.000000,0.000000 +6532,-3.0,90.000035,0.000000,0.000000 +6533,-3.0,90.000035,0.000000,0.000000 +6534,-3.0,90.000035,0.000000,0.000000 +6535,-3.0,90.000035,0.000000,0.000000 +6536,-3.0,90.000035,0.000000,0.000000 +6537,-3.0,90.000035,0.000000,0.000000 +6538,-3.0,90.000035,0.000000,0.000000 +6539,-3.0,90.000035,0.000000,0.000000 +6540,-3.0,90.000035,0.000000,0.000000 +6541,-3.0,90.000035,0.000000,0.000000 +6542,-3.0,90.000035,0.000000,0.000000 +6543,-3.0,90.000035,0.000000,0.000000 +6544,-3.0,90.000035,0.000000,0.000000 +6545,-3.0,90.000035,0.000000,0.000000 +6546,-3.0,90.000035,0.000000,0.000000 +6547,-3.0,90.000035,0.000000,0.000000 +6548,-3.0,90.000035,0.000000,0.000000 +6549,-3.0,90.000035,0.000000,0.000000 +6550,-3.0,90.000035,0.000000,0.000000 +6551,-3.0,90.000035,0.000000,0.000000 +6552,-3.0,90.000035,0.000000,0.000000 +6553,-3.0,90.000035,0.000000,0.000000 +6554,-3.0,90.000035,0.000000,0.000000 +6555,-3.0,90.000035,0.000000,0.000000 +6556,-3.0,90.000035,0.000000,0.000000 +6557,-3.0,90.000035,0.000000,0.000000 +6558,-3.0,90.000035,0.000000,0.000000 +6559,-3.0,90.000035,0.000000,0.000000 +6560,-3.0,90.000035,0.000000,0.000000 +6561,-3.0,90.000035,0.000000,0.000000 +6562,-3.0,90.000035,0.000000,0.000000 +6563,-3.0,90.000035,0.000000,0.000000 +6564,-3.0,90.000035,0.000000,0.000000 +6565,-3.0,90.000035,0.000000,0.000000 +6566,-3.0,90.000035,0.000000,0.000000 +6567,-3.0,90.000035,0.000000,0.000000 +6568,-3.0,90.000035,0.000000,0.000000 +6569,-3.0,90.000035,0.000000,0.000000 +6570,-3.0,90.000035,0.000000,0.000000 +6571,-3.0,90.000035,0.000000,0.000000 +6572,-3.0,90.000035,0.000000,0.000000 +6573,-3.0,90.000035,0.000000,0.000000 +6574,-3.0,90.000035,0.000000,0.000000 +6575,-3.0,90.000035,0.000000,0.000000 +6576,-3.0,90.000035,0.000000,0.000000 +6577,-3.0,90.000035,0.000000,0.000000 +6578,-3.0,90.000035,0.000000,0.000000 +6579,-3.0,90.000035,0.000000,0.000000 +6580,-3.0,90.000035,0.000000,0.000000 +6581,-3.0,90.000035,0.000000,0.000000 +6582,-3.0,90.000035,0.000000,0.000000 +6583,-3.0,90.000035,0.000000,0.000000 +6584,-3.0,90.000035,0.000000,0.000000 +6585,-3.0,90.000035,0.000000,0.000000 +6586,-3.0,90.000035,0.000000,0.000000 +6587,-3.0,90.000035,0.000000,0.000000 +6588,-3.0,90.000035,0.000000,0.000000 +6589,-3.0,90.000035,0.000000,0.000000 +6590,-3.0,90.000035,0.000000,0.000000 +6591,-3.0,90.000035,0.000000,0.000000 +6592,-3.0,90.000035,0.000000,0.000000 +6593,-3.0,90.000035,0.000000,0.000000 +6594,-3.0,90.000035,0.000000,0.000000 +6595,-3.0,90.000035,0.000000,0.000000 +6596,-3.0,90.000035,0.000000,0.000000 +6597,-3.0,90.000035,0.000000,0.000000 +6598,-3.0,90.000035,0.000000,0.000000 +6599,-3.0,90.000035,0.000000,0.000000 +6600,-3.0,90.000035,0.000000,0.000000 +6601,-3.0,90.000035,0.000000,0.000000 +6602,-3.0,90.000035,0.000000,0.000000 +6603,-3.0,90.000035,0.000000,0.000000 +6604,-3.0,90.000035,0.000000,0.000000 +6605,-3.0,90.000035,0.000000,0.000000 +6606,-3.0,90.000035,0.000000,0.000000 +6607,-3.0,90.000035,0.000000,0.000000 +6608,-3.0,90.000035,0.000000,0.000000 +6609,-3.0,90.000035,0.000000,0.000000 +6610,-3.0,90.000035,0.000000,0.000000 +6611,-3.0,90.000035,0.000000,0.000000 +6612,-3.0,90.000035,0.000000,0.000000 +6613,-3.0,90.000035,0.000000,0.000000 +6614,-3.0,90.000035,0.000000,0.000000 +6615,-3.0,90.000035,0.000000,0.000000 +6616,-3.0,90.000035,0.000000,0.000000 +6617,-3.0,90.000035,0.000000,0.000000 +6618,-3.0,90.000035,0.000000,0.000000 +6619,-3.0,90.000035,0.000000,0.000000 +6620,-3.0,90.000035,0.000000,0.000000 +6621,-3.0,90.000035,0.000000,0.000000 +6622,-3.0,90.000035,0.000000,0.000000 +6623,-3.0,90.000035,0.000000,0.000000 +6624,-3.0,90.000035,0.000000,0.000000 +6625,-3.0,90.000035,0.000000,0.000000 +6626,-3.0,90.000035,0.000000,0.000000 +6627,-3.0,90.000035,0.000000,0.000000 +6628,-3.0,90.000035,0.000000,0.000000 +6629,-3.0,90.000035,0.000000,0.000000 +6630,-3.0,90.000035,0.000000,0.000000 +6631,-3.0,90.000035,0.000000,0.000000 +6632,-3.0,90.000035,0.000000,0.000000 +6633,-3.0,90.000035,0.000000,0.000000 +6634,-3.0,90.000035,0.000000,0.000000 +6635,-3.0,90.000035,0.000000,0.000000 +6636,-3.0,90.000035,0.000000,0.000000 +6637,-3.0,90.000035,0.000000,0.000000 +6638,-3.0,90.000035,0.000000,0.000000 +6639,-3.0,90.000035,0.000000,0.000000 +6640,-3.0,90.000035,0.000000,0.000000 +6641,-3.0,90.000035,0.000000,0.000000 +6642,-3.0,90.000035,0.000000,0.000000 +6643,-3.0,90.000035,0.000000,0.000000 +6644,-3.0,90.000035,0.000000,0.000000 +6645,-3.0,90.000035,0.000000,0.000000 +6646,-3.0,90.000035,0.000000,0.000000 +6647,-3.0,90.000035,0.000000,0.000000 +6648,-3.0,90.000035,0.000000,0.000000 +6649,-3.0,90.000035,0.000000,0.000000 +6650,-3.0,90.000035,0.000000,0.000000 +6651,-3.0,90.000035,0.000000,0.000000 +6652,-3.0,90.000035,0.000000,0.000000 +6653,-3.0,90.000035,0.000000,0.000000 +6654,-3.0,90.000035,0.000000,0.000000 +6655,-3.0,90.000035,0.000000,0.000000 +6656,-3.0,90.000035,0.000000,0.000000 +6657,-3.0,90.000035,0.000000,0.000000 +6658,-3.0,90.000035,0.000000,0.000000 +6659,-3.0,90.000035,0.000000,0.000000 +6660,-3.0,90.000035,0.000000,0.000000 +6661,-3.0,90.000035,0.000000,0.000000 +6662,-3.0,90.000035,0.000000,0.000000 +6663,-3.0,90.000035,0.000000,0.000000 +6664,-3.0,90.000035,0.000000,0.000000 +6665,-3.0,90.000035,0.000000,0.000000 +6666,-3.0,90.000035,0.000000,0.000000 +6667,-3.0,90.000035,0.000000,0.000000 +6668,-3.0,90.000035,0.000000,0.000000 +6669,-3.0,90.000035,0.000000,0.000000 +6670,-3.0,90.000035,0.000000,0.000000 +6671,-3.0,90.000035,0.000000,0.000000 +6672,-3.0,90.000035,0.000000,0.000000 +6673,-3.0,90.000035,0.000000,0.000000 +6674,-3.0,90.000035,0.000000,0.000000 +6675,-3.0,90.000035,0.000000,0.000000 +6676,-3.0,90.000035,0.000000,0.000000 +6677,-3.0,90.000035,0.000000,0.000000 +6678,-3.0,90.000035,0.000000,0.000000 +6679,-3.0,90.000035,0.000000,0.000000 +6680,-3.0,90.000035,0.000000,0.000000 +6681,-3.0,90.000035,0.000000,0.000000 +6682,-3.0,90.000035,0.000000,0.000000 +6683,-3.0,90.000035,0.000000,0.000000 +6684,-3.0,90.000035,0.000000,0.000000 +6685,-3.0,90.000035,0.000000,0.000000 +6686,-3.0,90.000035,0.000000,0.000000 +6687,-3.0,90.000035,0.000000,0.000000 +6688,-3.0,90.000035,0.000000,0.000000 +6689,-3.0,90.000035,0.000000,0.000000 +6690,-3.0,90.000035,0.000000,0.000000 +6691,-3.0,90.000035,0.000000,0.000000 +6692,-3.0,90.000035,0.000000,0.000000 +6693,-3.0,90.000035,0.000000,0.000000 +6694,-3.0,90.000035,0.000000,0.000000 +6695,-3.0,90.000035,0.000000,0.000000 +6696,-3.0,90.000035,0.000000,0.000000 +6697,-3.0,90.000035,0.000000,0.000000 +6698,-3.0,90.000035,0.000000,0.000000 +6699,-3.0,90.000035,0.000000,0.000000 +6700,-3.0,90.000035,0.000000,0.000000 +6701,-3.0,90.000035,0.000000,0.000000 +6702,-3.0,90.000035,0.000000,0.000000 +6703,-3.0,90.000035,0.000000,0.000000 +6704,-3.0,90.000035,0.000000,0.000000 +6705,-3.0,90.000035,0.000000,0.000000 +6706,-3.0,90.000035,0.000000,0.000000 +6707,-3.0,90.000035,0.000000,0.000000 +6708,-3.0,90.000035,0.000000,0.000000 +6709,-3.0,90.000035,0.000000,0.000000 +6710,-3.0,90.000035,0.000000,0.000000 +6711,-3.0,90.000035,0.000000,0.000000 +6712,-3.0,90.000035,0.000000,0.000000 +6713,-3.0,90.000035,0.000000,0.000000 +6714,-3.0,90.000035,0.000000,0.000000 +6715,-3.0,90.000035,0.000000,0.000000 +6716,-3.0,90.000035,0.000000,0.000000 +6717,-3.0,90.000035,0.000000,0.000000 +6718,-3.0,90.000035,0.000000,0.000000 +6719,-3.0,90.000035,0.000000,0.000000 +6720,-3.0,90.000035,0.000000,0.000000 +6721,-3.0,90.000035,0.000000,0.000000 +6722,-3.0,90.000035,0.000000,0.000000 +6723,-3.0,90.000035,0.000000,0.000000 +6724,-3.0,90.000035,0.000000,0.000000 +6725,-3.0,90.000035,0.000000,0.000000 +6726,-3.0,90.000035,0.000000,0.000000 +6727,-3.0,90.000035,0.000000,0.000000 +6728,-3.0,90.000035,0.000000,0.000000 +6729,-3.0,90.000035,0.000000,0.000000 +6730,-3.0,90.000035,0.000000,0.000000 +6731,-3.0,90.000035,0.000000,0.000000 +6732,-3.0,90.000035,0.000000,0.000000 +6733,-3.0,90.000035,0.000000,0.000000 +6734,-3.0,90.000035,0.000000,0.000000 +6735,-3.0,90.000035,0.000000,0.000000 +6736,-3.0,90.000035,0.000000,0.000000 +6737,-3.0,90.000035,0.000000,0.000000 +6738,-3.0,90.000035,0.000000,0.000000 +6739,-3.0,90.000035,0.000000,0.000000 +6740,-3.0,90.000035,0.000000,0.000000 +6741,-3.0,90.000035,0.000000,0.000000 +6742,-3.0,90.000035,0.000000,0.000000 +6743,-3.0,90.000035,0.000000,0.000000 +6744,-3.0,90.000035,0.000000,0.000000 +6745,-3.0,90.000035,0.000000,0.000000 +6746,-3.0,90.000035,0.000000,0.000000 +6747,-3.0,90.000035,0.000000,0.000000 +6748,-3.0,90.000035,0.000000,0.000000 +6749,-3.0,90.000035,0.000000,0.000000 +6750,-3.0,90.000035,0.000000,0.000000 +6751,-3.0,90.000035,0.000000,0.000000 +6752,-3.0,90.000035,0.000000,0.000000 +6753,-3.0,90.000035,0.000000,0.000000 +6754,-3.0,90.000035,0.000000,0.000000 +6755,-3.0,90.000035,0.000000,0.000000 +6756,-3.0,90.000035,0.000000,0.000000 +6757,-3.0,90.000035,0.000000,0.000000 +6758,-3.0,90.000035,0.000000,0.000000 +6759,-3.0,90.000035,0.000000,0.000000 +6760,-3.0,90.000035,0.000000,0.000000 +6761,-3.0,90.000035,0.000000,0.000000 +6762,-3.0,90.000035,0.000000,0.000000 +6763,-3.0,90.000035,0.000000,0.000000 +6764,-3.0,90.000035,0.000000,0.000000 +6765,-3.0,90.000035,0.000000,0.000000 +6766,-3.0,90.000035,0.000000,0.000000 +6767,-3.0,90.000035,0.000000,0.000000 +6768,-3.0,90.000035,0.000000,0.000000 +6769,-3.0,90.000035,0.000000,0.000000 +6770,-3.0,90.000035,0.000000,0.000000 +6771,-3.0,90.000035,0.000000,0.000000 +6772,-3.0,90.000035,0.000000,0.000000 +6773,-3.0,90.000035,0.000000,0.000000 +6774,-3.0,90.000035,0.000000,0.000000 +6775,-3.0,90.000035,0.000000,0.000000 +6776,-3.0,90.000035,0.000000,0.000000 +6777,-3.0,90.000035,0.000000,0.000000 +6778,-3.0,90.000035,0.000000,0.000000 +6779,-3.0,90.000035,0.000000,0.000000 +6780,-3.0,90.000035,0.000000,0.000000 +6781,-3.0,90.000035,0.000000,0.000000 +6782,-3.0,90.000035,0.000000,0.000000 +6783,-3.0,90.000035,0.000000,0.000000 +6784,-3.0,90.000035,0.000000,0.000000 +6785,-3.0,90.000035,0.000000,0.000000 +6786,-3.0,90.000035,0.000000,0.000000 +6787,-3.0,90.000035,0.000000,0.000000 +6788,-3.0,90.000035,0.000000,0.000000 +6789,-3.0,90.000035,0.000000,0.000000 +6790,-3.0,90.000035,0.000000,0.000000 +6791,-3.0,90.000035,0.000000,0.000000 +6792,-3.0,90.000035,0.000000,0.000000 +6793,-3.0,90.000035,0.000000,0.000000 +6794,-3.0,90.000035,0.000000,0.000000 +6795,-3.0,90.000035,0.000000,0.000000 +6796,-3.0,90.000035,0.000000,0.000000 +6797,-3.0,90.000035,0.000000,0.000000 +6798,-3.0,90.000035,0.000000,0.000000 +6799,-3.0,90.000035,0.000000,0.000000 +6800,-3.0,90.000035,0.000000,0.000000 +6801,-3.0,90.000035,0.000000,0.000000 +6802,-3.0,90.000035,0.000000,0.000000 +6803,-3.0,90.000035,0.000000,0.000000 +6804,-3.0,90.000035,0.000000,0.000000 +6805,-3.0,90.000035,0.000000,0.000000 +6806,-3.0,90.000035,0.000000,0.000000 +6807,-3.0,90.000035,0.000000,0.000000 +6808,-3.0,90.000035,0.000000,0.000000 +6809,-3.0,90.000035,0.000000,0.000000 +6810,-3.0,90.000035,0.000000,0.000000 +6811,-3.0,90.000035,0.000000,0.000000 +6812,-3.0,90.000035,0.000000,0.000000 +6813,-3.0,90.000035,0.000000,0.000000 +6814,-3.0,90.000035,0.000000,0.000000 +6815,-3.0,90.000035,0.000000,0.000000 +6816,-3.0,90.000035,0.000000,0.000000 +6817,-3.0,90.000035,0.000000,0.000000 +6818,-3.0,90.000035,0.000000,0.000000 +6819,-3.0,90.000035,0.000000,0.000000 +6820,-3.0,90.000035,0.000000,0.000000 +6821,-3.0,90.000035,0.000000,0.000000 +6822,-3.0,90.000035,0.000000,0.000000 +6823,-3.0,90.000035,0.000000,0.000000 +6824,-3.0,90.000035,0.000000,0.000000 +6825,-3.0,90.000035,0.000000,0.000000 +6826,-3.0,90.000035,0.000000,0.000000 +6827,-3.0,90.000035,0.000000,0.000000 +6828,-3.0,90.000035,0.000000,0.000000 +6829,-3.0,90.000035,0.000000,0.000000 +6830,-3.0,90.000035,0.000000,0.000000 +6831,-3.0,90.000035,0.000000,0.000000 +6832,-3.0,90.000035,0.000000,0.000000 +6833,-3.0,90.000035,0.000000,0.000000 +6834,-3.0,90.000035,0.000000,0.000000 +6835,-3.0,90.000035,0.000000,0.000000 +6836,-3.0,90.000035,0.000000,0.000000 +6837,-3.0,90.000035,0.000000,0.000000 +6838,-3.0,90.000035,0.000000,0.000000 +6839,-3.0,90.000035,0.000000,0.000000 +6840,-3.0,90.000035,0.000000,0.000000 +6841,-3.0,90.000035,0.000000,0.000000 +6842,-3.0,90.000035,0.000000,0.000000 +6843,-3.0,90.000035,0.000000,0.000000 +6844,-3.0,90.000035,0.000000,0.000000 +6845,-3.0,90.000035,0.000000,0.000000 +6846,-3.0,90.000035,0.000000,0.000000 +6847,-3.0,90.000035,0.000000,0.000000 +6848,-3.0,90.000035,0.000000,0.000000 +6849,-3.0,90.000035,0.000000,0.000000 +6850,-3.0,90.000035,0.000000,0.000000 +6851,-3.0,90.000035,0.000000,0.000000 +6852,-3.0,90.000035,0.000000,0.000000 +6853,-3.0,90.000035,0.000000,0.000000 +6854,-3.0,90.000035,0.000000,0.000000 +6855,-3.0,90.000035,0.000000,0.000000 +6856,-3.0,90.000035,0.000000,0.000000 +6857,-3.0,90.000035,0.000000,0.000000 +6858,-3.0,90.000035,0.000000,0.000000 +6859,-3.0,90.000035,0.000000,0.000000 +6860,-3.0,90.000035,0.000000,0.000000 +6861,-3.0,90.000035,0.000000,0.000000 +6862,-3.0,90.000035,0.000000,0.000000 +6863,-3.0,90.000035,0.000000,0.000000 +6864,-3.0,90.000035,0.000000,0.000000 +6865,-3.0,90.000035,0.000000,0.000000 +6866,-3.0,90.000035,0.000000,0.000000 +6867,-3.0,90.000035,0.000000,0.000000 +6868,-3.0,90.000035,0.000000,0.000000 +6869,-3.0,90.000035,0.000000,0.000000 +6870,-3.0,90.000035,0.000000,0.000000 +6871,-3.0,90.000035,0.000000,0.000000 +6872,-3.0,90.000035,0.000000,0.000000 +6873,-3.0,90.000035,0.000000,0.000000 +6874,-3.0,90.000035,0.000000,0.000000 +6875,-3.0,90.000035,0.000000,0.000000 +6876,-3.0,90.000035,0.000000,0.000000 +6877,-3.0,90.000035,0.000000,0.000000 +6878,-3.0,90.000035,0.000000,0.000000 +6879,-3.0,90.000035,0.000000,0.000000 +6880,-3.0,90.000035,0.000000,0.000000 +6881,-3.0,90.000035,0.000000,0.000000 +6882,-3.0,90.000035,0.000000,0.000000 +6883,-3.0,90.000035,0.000000,0.000000 +6884,-3.0,90.000035,0.000000,0.000000 +6885,-3.0,90.000035,0.000000,0.000000 +6886,-3.0,90.000035,0.000000,0.000000 +6887,-3.0,90.000035,0.000000,0.000000 +6888,-3.0,90.000035,0.000000,0.000000 +6889,-3.0,90.000035,0.000000,0.000000 +6890,-3.0,90.000035,0.000000,0.000000 +6891,-3.0,90.000035,0.000000,0.000000 +6892,-3.0,90.000035,0.000000,0.000000 +6893,-3.0,90.000035,0.000000,0.000000 +6894,-3.0,90.000035,0.000000,0.000000 +6895,-3.0,90.000035,0.000000,0.000000 +6896,-3.0,90.000035,0.000000,0.000000 +6897,-3.0,90.000035,0.000000,0.000000 +6898,-3.0,90.000035,0.000000,0.000000 +6899,-3.0,90.000035,0.000000,0.000000 +6900,-3.0,90.000035,0.000000,0.000000 +6901,-3.0,90.000035,0.000000,0.000000 +6902,-3.0,90.000035,0.000000,0.000000 +6903,-3.0,90.000035,0.000000,0.000000 +6904,-3.0,90.000035,0.000000,0.000000 +6905,-3.0,90.000035,0.000000,0.000000 +6906,-3.0,90.000035,0.000000,0.000000 +6907,-3.0,90.000035,0.000000,0.000000 +6908,-3.0,90.000035,0.000000,0.000000 +6909,-3.0,90.000035,0.000000,0.000000 +6910,-3.0,90.000035,0.000000,0.000000 +6911,-3.0,90.000035,0.000000,0.000000 +6912,-3.0,90.000035,0.000000,0.000000 +6913,-3.0,90.000035,0.000000,0.000000 +6914,-3.0,90.000035,0.000000,0.000000 +6915,-3.0,90.000035,0.000000,0.000000 +6916,-3.0,90.000035,0.000000,0.000000 +6917,-3.0,90.000035,0.000000,0.000000 +6918,-3.0,90.000035,0.000000,0.000000 +6919,-3.0,90.000035,0.000000,0.000000 +6920,-3.0,90.000035,0.000000,0.000000 +6921,-3.0,90.000035,0.000000,0.000000 +6922,-3.0,90.000035,0.000000,0.000000 +6923,-3.0,90.000035,0.000000,0.000000 +6924,-3.0,90.000035,0.000000,0.000000 +6925,-3.0,90.000035,0.000000,0.000000 +6926,-3.0,90.000035,0.000000,0.000000 +6927,-3.0,90.000035,0.000000,0.000000 +6928,-3.0,90.000035,0.000000,0.000000 +6929,-3.0,90.000035,0.000000,0.000000 +6930,-3.0,90.000035,0.000000,0.000000 +6931,-3.0,90.000035,0.000000,0.000000 +6932,-3.0,90.000035,0.000000,0.000000 +6933,-3.0,90.000035,0.000000,0.000000 +6934,-3.0,90.000035,0.000000,0.000000 +6935,-3.0,90.000035,0.000000,0.000000 +6936,-3.0,90.000035,0.000000,0.000000 +6937,-3.0,90.000035,0.000000,0.000000 +6938,-3.0,90.000035,0.000000,0.000000 +6939,-3.0,90.000035,0.000000,0.000000 +6940,-3.0,90.000035,0.000000,0.000000 +6941,-3.0,90.000035,0.000000,0.000000 +6942,-3.0,90.000035,0.000000,0.000000 +6943,-3.0,90.000035,0.000000,0.000000 +6944,-3.0,90.000035,0.000000,0.000000 +6945,-3.0,90.000035,0.000000,0.000000 +6946,-3.0,90.000035,0.000000,0.000000 +6947,-3.0,90.000035,0.000000,0.000000 +6948,-3.0,90.000035,0.000000,0.000000 +6949,-3.0,90.000035,0.000000,0.000000 +6950,-3.0,90.000035,0.000000,0.000000 +6951,-3.0,90.000035,0.000000,0.000000 +6952,-3.0,90.000035,0.000000,0.000000 +6953,-3.0,90.000035,0.000000,0.000000 +6954,-3.0,90.000035,0.000000,0.000000 +6955,-3.0,90.000035,0.000000,0.000000 +6956,-3.0,90.000035,0.000000,0.000000 +6957,-3.0,90.000035,0.000000,0.000000 +6958,-3.0,90.000035,0.000000,0.000000 +6959,-3.0,90.000035,0.000000,0.000000 +6960,-3.0,90.000035,0.000000,0.000000 +6961,-3.0,90.000035,0.000000,0.000000 +6962,-3.0,90.000035,0.000000,0.000000 +6963,-3.0,90.000035,0.000000,0.000000 +6964,-3.0,90.000035,0.000000,0.000000 +6965,-3.0,90.000035,0.000000,0.000000 +6966,-3.0,90.000035,0.000000,0.000000 +6967,-3.0,90.000035,0.000000,0.000000 +6968,-3.0,90.000035,0.000000,0.000000 +6969,-3.0,90.000035,0.000000,0.000000 +6970,-3.0,90.000035,0.000000,0.000000 +6971,-3.0,90.000035,0.000000,0.000000 +6972,-3.0,90.000035,0.000000,0.000000 +6973,-3.0,90.000035,0.000000,0.000000 +6974,-3.0,90.000035,0.000000,0.000000 +6975,-3.0,90.000035,0.000000,0.000000 +6976,-3.0,90.000035,0.000000,0.000000 +6977,-3.0,90.000035,0.000000,0.000000 +6978,-3.0,90.000035,0.000000,0.000000 +6979,-3.0,90.000035,0.000000,0.000000 +6980,-3.0,90.000035,0.000000,0.000000 +6981,-3.0,90.000035,0.000000,0.000000 +6982,-3.0,90.000035,0.000000,0.000000 +6983,-3.0,90.000035,0.000000,0.000000 +6984,-3.0,90.000035,0.000000,0.000000 +6985,-3.0,90.000035,0.000000,0.000000 +6986,-3.0,90.000035,0.000000,0.000000 +6987,-3.0,90.000035,0.000000,0.000000 +6988,-3.0,90.000035,0.000000,0.000000 +6989,-3.0,90.000035,0.000000,0.000000 +6990,-3.0,90.000035,0.000000,0.000000 +6991,-3.0,90.000035,0.000000,0.000000 +6992,-3.0,90.000035,0.000000,0.000000 +6993,-3.0,90.000035,0.000000,0.000000 +6994,-3.0,90.000035,0.000000,0.000000 +6995,-3.0,90.000035,0.000000,0.000000 +6996,-3.0,90.000035,0.000000,0.000000 +6997,-3.0,90.000035,0.000000,0.000000 +6998,-3.0,90.000035,0.000000,0.000000 +6999,-3.0,90.000035,0.000000,0.000000 +7000,-3.0,90.000035,0.000000,0.000000 +7001,-3.0,90.000035,0.000000,0.000000 +7002,-3.0,90.000035,0.000000,0.000000 +7003,-3.0,90.000035,0.000000,0.000000 +7004,-3.0,90.000035,0.000000,0.000000 +7005,-3.0,90.000035,0.000000,0.000000 +7006,-3.0,90.000035,0.000000,0.000000 +7007,-3.0,90.000035,0.000000,0.000000 +7008,-3.0,90.000035,0.000000,0.000000 +7009,-3.0,90.000035,0.000000,0.000000 +7010,-3.0,90.000035,0.000000,0.000000 +7011,-3.0,90.000035,0.000000,0.000000 +7012,-3.0,90.000035,0.000000,0.000000 +7013,-3.0,90.000035,0.000000,0.000000 +7014,-3.0,90.000035,0.000000,0.000000 +7015,-3.0,90.000035,0.000000,0.000000 +7016,-3.0,90.000035,0.000000,0.000000 +7017,-3.0,90.000035,0.000000,0.000000 +7018,-3.0,90.000035,0.000000,0.000000 +7019,-3.0,90.000035,0.000000,0.000000 +7020,-3.0,90.000035,0.000000,0.000000 +7021,-3.0,90.000035,0.000000,0.000000 +7022,-3.0,90.000035,0.000000,0.000000 +7023,-3.0,90.000035,0.000000,0.000000 +7024,-3.0,90.000035,0.000000,0.000000 +7025,-3.0,90.000035,0.000000,0.000000 +7026,-3.0,90.000035,0.000000,0.000000 +7027,-3.0,90.000035,0.000000,0.000000 +7028,-3.0,90.000035,0.000000,0.000000 +7029,-3.0,90.000035,0.000000,0.000000 +7030,-3.0,90.000035,0.000000,0.000000 +7031,-3.0,90.000035,0.000000,0.000000 +7032,-3.0,90.000035,0.000000,0.000000 +7033,-3.0,90.000035,0.000000,0.000000 +7034,-3.0,90.000035,0.000000,0.000000 +7035,-3.0,90.000035,0.000000,0.000000 +7036,-3.0,90.000035,0.000000,0.000000 +7037,-3.0,90.000035,0.000000,0.000000 +7038,-3.0,90.000035,0.000000,0.000000 +7039,-3.0,90.000035,0.000000,0.000000 +7040,-3.0,90.000035,0.000000,0.000000 +7041,-3.0,90.000035,0.000000,0.000000 +7042,-3.0,90.000035,0.000000,0.000000 +7043,-3.0,90.000035,0.000000,0.000000 +7044,-3.0,90.000035,0.000000,0.000000 +7045,-3.0,90.000035,0.000000,0.000000 +7046,-3.0,90.000035,0.000000,0.000000 +7047,-3.0,90.000035,0.000000,0.000000 +7048,-3.0,90.000035,0.000000,0.000000 +7049,-3.0,90.000035,0.000000,0.000000 +7050,-3.0,90.000035,0.000000,0.000000 +7051,-3.0,90.000035,0.000000,0.000000 +7052,-3.0,90.000035,0.000000,0.000000 +7053,-3.0,90.000035,0.000000,0.000000 +7054,-3.0,90.000035,0.000000,0.000000 +7055,-3.0,90.000035,0.000000,0.000000 +7056,-3.0,90.000035,0.000000,0.000000 +7057,-3.0,90.000035,0.000000,0.000000 +7058,-3.0,90.000035,0.000000,0.000000 +7059,-3.0,90.000035,0.000000,0.000000 +7060,-3.0,90.000035,0.000000,0.000000 +7061,-3.0,90.000035,0.000000,0.000000 +7062,-3.0,90.000035,0.000000,0.000000 +7063,-3.0,90.000035,0.000000,0.000000 +7064,-3.0,90.000035,0.000000,0.000000 +7065,-3.0,90.000035,0.000000,0.000000 +7066,-3.0,90.000035,0.000000,0.000000 +7067,-3.0,90.000035,0.000000,0.000000 +7068,-3.0,90.000035,0.000000,0.000000 +7069,-3.0,90.000035,0.000000,0.000000 +7070,-3.0,90.000035,0.000000,0.000000 +7071,-3.0,90.000035,0.000000,0.000000 +7072,-3.0,90.000035,0.000000,0.000000 +7073,-3.0,90.000035,0.000000,0.000000 +7074,-3.0,90.000035,0.000000,0.000000 +7075,-3.0,90.000035,0.000000,0.000000 +7076,-3.0,90.000035,0.000000,0.000000 +7077,-3.0,90.000035,0.000000,0.000000 +7078,-3.0,90.000035,0.000000,0.000000 +7079,-3.0,90.000035,0.000000,0.000000 +7080,-3.0,90.000035,0.000000,0.000000 +7081,-3.0,90.000035,0.000000,0.000000 +7082,-3.0,90.000035,0.000000,0.000000 +7083,-3.0,90.000035,0.000000,0.000000 +7084,-3.0,90.000035,0.000000,0.000000 +7085,-3.0,90.000035,0.000000,0.000000 +7086,-3.0,90.000035,0.000000,0.000000 +7087,-3.0,90.000035,0.000000,0.000000 +7088,-3.0,90.000035,0.000000,0.000000 +7089,-3.0,90.000035,0.000000,0.000000 +7090,-3.0,90.000035,0.000000,0.000000 +7091,-3.0,90.000035,0.000000,0.000000 +7092,-3.0,90.000035,0.000000,0.000000 +7093,-3.0,90.000035,0.000000,0.000000 +7094,-3.0,90.000035,0.000000,0.000000 +7095,-3.0,90.000035,0.000000,0.000000 +7096,-3.0,90.000035,0.000000,0.000000 +7097,-3.0,90.000035,0.000000,0.000000 +7098,-3.0,90.000035,0.000000,0.000000 +7099,-3.0,90.000035,0.000000,0.000000 +7100,-3.0,90.000035,0.000000,0.000000 +7101,-3.0,90.000035,0.000000,0.000000 +7102,-3.0,90.000035,0.000000,0.000000 +7103,-3.0,90.000035,0.000000,0.000000 +7104,-3.0,90.000035,0.000000,0.000000 +7105,-3.0,90.000035,0.000000,0.000000 +7106,-3.0,90.000035,0.000000,0.000000 +7107,-3.0,90.000035,0.000000,0.000000 +7108,-3.0,90.000035,0.000000,0.000000 +7109,-3.0,90.000035,0.000000,0.000000 +7110,-3.0,90.000035,0.000000,0.000000 +7111,-3.0,90.000035,0.000000,0.000000 +7112,-3.0,90.000035,0.000000,0.000000 +7113,-3.0,90.000035,0.000000,0.000000 +7114,-3.0,90.000035,0.000000,0.000000 +7115,-3.0,90.000035,0.000000,0.000000 +7116,-3.0,90.000035,0.000000,0.000000 +7117,-3.0,90.000035,0.000000,0.000000 +7118,-3.0,90.000035,0.000000,0.000000 +7119,-3.0,90.000035,0.000000,0.000000 +7120,-3.0,90.000035,0.000000,0.000000 +7121,-3.0,90.000035,0.000000,0.000000 +7122,-3.0,90.000035,0.000000,0.000000 +7123,-3.0,90.000035,0.000000,0.000000 +7124,-3.0,90.000035,0.000000,0.000000 +7125,-3.0,90.000035,0.000000,0.000000 +7126,-3.0,90.000035,0.000000,0.000000 +7127,-3.0,90.000035,0.000000,0.000000 +7128,-3.0,90.000035,0.000000,0.000000 +7129,-3.0,90.000035,0.000000,0.000000 +7130,-3.0,90.000035,0.000000,0.000000 +7131,-3.0,90.000035,0.000000,0.000000 +7132,-3.0,90.000035,0.000000,0.000000 +7133,-3.0,90.000035,0.000000,0.000000 +7134,-3.0,90.000035,0.000000,0.000000 +7135,-3.0,90.000035,0.000000,0.000000 +7136,-3.0,90.000035,0.000000,0.000000 +7137,-3.0,90.000035,0.000000,0.000000 +7138,-3.0,90.000035,0.000000,0.000000 +7139,-3.0,90.000035,0.000000,0.000000 +7140,-3.0,90.000035,0.000000,0.000000 +7141,-3.0,90.000035,0.000000,0.000000 +7142,-3.0,90.000035,0.000000,0.000000 +7143,-3.0,90.000035,0.000000,0.000000 +7144,-3.0,90.000035,0.000000,0.000000 +7145,-3.0,90.000035,0.000000,0.000000 +7146,-3.0,90.000035,0.000000,0.000000 +7147,-3.0,90.000035,0.000000,0.000000 +7148,-3.0,90.000035,0.000000,0.000000 +7149,-3.0,90.000035,0.000000,0.000000 +7150,-3.0,90.000035,0.000000,0.000000 +7151,-3.0,90.000035,0.000000,0.000000 +7152,-3.0,90.000035,0.000000,0.000000 +7153,-3.0,90.000035,0.000000,0.000000 +7154,-3.0,90.000035,0.000000,0.000000 +7155,-3.0,90.000035,0.000000,0.000000 +7156,-3.0,90.000035,0.000000,0.000000 +7157,-3.0,90.000035,0.000000,0.000000 +7158,-3.0,90.000035,0.000000,0.000000 +7159,-3.0,90.000035,0.000000,0.000000 +7160,-3.0,90.000035,0.000000,0.000000 +7161,-3.0,90.000035,0.000000,0.000000 +7162,-3.0,90.000035,0.000000,0.000000 +7163,-3.0,90.000035,0.000000,0.000000 +7164,-3.0,90.000035,0.000000,0.000000 +7165,-3.0,90.000035,0.000000,0.000000 +7166,-3.0,90.000035,0.000000,0.000000 +7167,-3.0,90.000035,0.000000,0.000000 +7168,-3.0,90.000035,0.000000,0.000000 +7169,-3.0,90.000035,0.000000,0.000000 +7170,-3.0,90.000035,0.000000,0.000000 +7171,-3.0,90.000035,0.000000,0.000000 +7172,-3.0,90.000035,0.000000,0.000000 +7173,-3.0,90.000035,0.000000,0.000000 +7174,-3.0,90.000035,0.000000,0.000000 +7175,-3.0,90.000035,0.000000,0.000000 +7176,-3.0,90.000035,0.000000,0.000000 +7177,-3.0,90.000035,0.000000,0.000000 +7178,-3.0,90.000035,0.000000,0.000000 +7179,-3.0,90.000035,0.000000,0.000000 +7180,-3.0,90.000035,0.000000,0.000000 +7181,-3.0,90.000035,0.000000,0.000000 +7182,-3.0,90.000035,0.000000,0.000000 +7183,-3.0,90.000035,0.000000,0.000000 +7184,-3.0,90.000035,0.000000,0.000000 +7185,-3.0,90.000035,0.000000,0.000000 +7186,-3.0,90.000035,0.000000,0.000000 +7187,-3.0,90.000035,0.000000,0.000000 +7188,-3.0,90.000035,0.000000,0.000000 +7189,-3.0,90.000035,0.000000,0.000000 +7190,-3.0,90.000035,0.000000,0.000000 +7191,-3.0,90.000035,0.000000,0.000000 +7192,-3.0,90.000035,0.000000,0.000000 +7193,-3.0,90.000035,0.000000,0.000000 +7194,-3.0,90.000035,0.000000,0.000000 +7195,-3.0,90.000035,0.000000,0.000000 +7196,-3.0,90.000035,0.000000,0.000000 +7197,-3.0,90.000035,0.000000,0.000000 +7198,-3.0,90.000035,0.000000,0.000000 +7199,-3.0,90.000035,0.000000,0.000000 +7200,-3.0,90.000035,0.000000,0.000000 +7201,-3.0,90.000035,0.000000,0.000000 +7202,-3.0,90.000035,0.000000,0.000000 +7203,-3.0,90.000035,0.000000,0.000000 +7204,-3.0,90.000035,0.000000,0.000000 +7205,-3.0,90.000035,0.000000,0.000000 +7206,-3.0,90.000035,0.000000,0.000000 +7207,-3.0,90.000035,0.000000,0.000000 +7208,-3.0,90.000035,0.000000,0.000000 +7209,-3.0,90.000035,0.000000,0.000000 +7210,-3.0,90.000035,0.000000,0.000000 +7211,-3.0,90.000035,0.000000,0.000000 +7212,-3.0,90.000035,0.000000,0.000000 +7213,-3.0,90.000035,0.000000,0.000000 +7214,-3.0,90.000035,0.000000,0.000000 +7215,-3.0,90.000035,0.000000,0.000000 +7216,-3.0,90.000035,0.000000,0.000000 +7217,-3.0,90.000035,0.000000,0.000000 +7218,-3.0,90.000035,0.000000,0.000000 +7219,-3.0,90.000035,0.000000,0.000000 +7220,-3.0,90.000035,0.000000,0.000000 +7221,-3.0,90.000035,0.000000,0.000000 +7222,-3.0,90.000035,0.000000,0.000000 +7223,-3.0,90.000035,0.000000,0.000000 +7224,-3.0,90.000035,0.000000,0.000000 +7225,-3.0,90.000035,0.000000,0.000000 +7226,-3.0,90.000035,0.000000,0.000000 +7227,-3.0,90.000035,0.000000,0.000000 +7228,-3.0,90.000035,0.000000,0.000000 +7229,-3.0,90.000035,0.000000,0.000000 +7230,-3.0,90.000035,0.000000,0.000000 +7231,-3.0,90.000035,0.000000,0.000000 +7232,-3.0,90.000035,0.000000,0.000000 +7233,-3.0,90.000035,0.000000,0.000000 +7234,-3.0,90.000035,0.000000,0.000000 +7235,-3.0,90.000035,0.000000,0.000000 +7236,-3.0,90.000035,0.000000,0.000000 +7237,-3.0,90.000035,0.000000,0.000000 +7238,-3.0,90.000035,0.000000,0.000000 +7239,-3.0,90.000035,0.000000,0.000000 +7240,-3.0,90.000035,0.000000,0.000000 +7241,-3.0,90.000035,0.000000,0.000000 +7242,-3.0,90.000035,0.000000,0.000000 +7243,-3.0,90.000035,0.000000,0.000000 +7244,-3.0,90.000035,0.000000,0.000000 +7245,-3.0,90.000035,0.000000,0.000000 +7246,-3.0,90.000035,0.000000,0.000000 +7247,-3.0,90.000035,0.000000,0.000000 +7248,-3.0,90.000035,0.000000,0.000000 +7249,-3.0,90.000035,0.000000,0.000000 +7250,-3.0,90.000035,0.000000,0.000000 +7251,-3.0,90.000035,0.000000,0.000000 +7252,-3.0,90.000035,0.000000,0.000000 +7253,-3.0,90.000035,0.000000,0.000000 +7254,-3.0,90.000035,0.000000,0.000000 +7255,-3.0,90.000035,0.000000,0.000000 +7256,-3.0,90.000035,0.000000,0.000000 +7257,-3.0,90.000035,0.000000,0.000000 +7258,-3.0,90.000035,0.000000,0.000000 +7259,-3.0,90.000035,0.000000,0.000000 +7260,-3.0,90.000035,0.000000,0.000000 +7261,-3.0,90.000035,0.000000,0.000000 +7262,-3.0,90.000035,0.000000,0.000000 +7263,-3.0,90.000035,0.000000,0.000000 +7264,-3.0,90.000035,0.000000,0.000000 +7265,-3.0,90.000035,0.000000,0.000000 +7266,-3.0,90.000035,0.000000,0.000000 +7267,-3.0,90.000035,0.000000,0.000000 +7268,-3.0,90.000035,0.000000,0.000000 +7269,-3.0,90.000035,0.000000,0.000000 +7270,-3.0,90.000035,0.000000,0.000000 +7271,-3.0,90.000035,0.000000,0.000000 +7272,-3.0,90.000035,0.000000,0.000000 +7273,-3.0,90.000035,0.000000,0.000000 +7274,-3.0,90.000035,0.000000,0.000000 +7275,-3.0,90.000035,0.000000,0.000000 +7276,-3.0,90.000035,0.000000,0.000000 +7277,-3.0,90.000035,0.000000,0.000000 +7278,-3.0,90.000035,0.000000,0.000000 +7279,-3.0,90.000035,0.000000,0.000000 +7280,-3.0,90.000035,0.000000,0.000000 +7281,-3.0,90.000035,0.000000,0.000000 +7282,-3.0,90.000035,0.000000,0.000000 +7283,-3.0,90.000035,0.000000,0.000000 +7284,-3.0,90.000035,0.000000,0.000000 +7285,-3.0,90.000035,0.000000,0.000000 +7286,-3.0,90.000035,0.000000,0.000000 +7287,-3.0,90.000035,0.000000,0.000000 +7288,-3.0,90.000035,0.000000,0.000000 +7289,-3.0,90.000035,0.000000,0.000000 +7290,-3.0,90.000035,0.000000,0.000000 +7291,-3.0,90.000035,0.000000,0.000000 +7292,-3.0,90.000035,0.000000,0.000000 +7293,-3.0,90.000035,0.000000,0.000000 +7294,-3.0,90.000035,0.000000,0.000000 +7295,-3.0,90.000035,0.000000,0.000000 +7296,-3.0,90.000035,0.000000,0.000000 +7297,-3.0,90.000035,0.000000,0.000000 +7298,-3.0,90.000035,0.000000,0.000000 +7299,-3.0,90.000035,0.000000,0.000000 +7300,-3.0,90.000035,0.000000,0.000000 +7301,-3.0,90.000035,0.000000,0.000000 +7302,-3.0,90.000035,0.000000,0.000000 +7303,-3.0,90.000035,0.000000,0.000000 +7304,-3.0,90.000035,0.000000,0.000000 +7305,-3.0,90.000035,0.000000,0.000000 +7306,-3.0,90.000035,0.000000,0.000000 +7307,-3.0,90.000035,0.000000,0.000000 +7308,-3.0,90.000035,0.000000,0.000000 +7309,-3.0,90.000035,0.000000,0.000000 +7310,-3.0,90.000035,0.000000,0.000000 +7311,-3.0,90.000035,0.000000,0.000000 +7312,-3.0,90.000035,0.000000,0.000000 +7313,-3.0,90.000035,0.000000,0.000000 +7314,-3.0,90.000035,0.000000,0.000000 +7315,-3.0,90.000035,0.000000,0.000000 +7316,-3.0,90.000035,0.000000,0.000000 +7317,-3.0,90.000035,0.000000,0.000000 +7318,-3.0,90.000035,0.000000,0.000000 +7319,-3.0,90.000035,0.000000,0.000000 +7320,-3.0,90.000035,0.000000,0.000000 +7321,-3.0,90.000035,0.000000,0.000000 +7322,-3.0,90.000035,0.000000,0.000000 +7323,-3.0,90.000035,0.000000,0.000000 +7324,-3.0,90.000035,0.000000,0.000000 +7325,-3.0,90.000035,0.000000,0.000000 +7326,-3.0,90.000035,0.000000,0.000000 +7327,-3.0,90.000035,0.000000,0.000000 +7328,-3.0,90.000035,0.000000,0.000000 +7329,-3.0,90.000035,0.000000,0.000000 +7330,-3.0,90.000035,0.000000,0.000000 +7331,-3.0,90.000035,0.000000,0.000000 +7332,-3.0,90.000035,0.000000,0.000000 +7333,-3.0,90.000035,0.000000,0.000000 +7334,-3.0,90.000035,0.000000,0.000000 +7335,-3.0,90.000035,0.000000,0.000000 +7336,-3.0,90.000035,0.000000,0.000000 +7337,-3.0,90.000035,0.000000,0.000000 +7338,-3.0,90.000035,0.000000,0.000000 +7339,-3.0,90.000035,0.000000,0.000000 +7340,-3.0,90.000035,0.000000,0.000000 +7341,-3.0,90.000035,0.000000,0.000000 +7342,-3.0,90.000035,0.000000,0.000000 +7343,-3.0,90.000035,0.000000,0.000000 +7344,-3.0,90.000035,0.000000,0.000000 +7345,-3.0,90.000035,0.000000,0.000000 +7346,-3.0,90.000035,0.000000,0.000000 +7347,-3.0,90.000035,0.000000,0.000000 +7348,-3.0,90.000035,0.000000,0.000000 +7349,-3.0,90.000035,0.000000,0.000000 +7350,-3.0,90.000035,0.000000,0.000000 +7351,-3.0,90.000035,0.000000,0.000000 +7352,-3.0,90.000035,0.000000,0.000000 +7353,-3.0,90.000035,0.000000,0.000000 +7354,-3.0,90.000035,0.000000,0.000000 +7355,-3.0,90.000035,0.000000,0.000000 +7356,-3.0,90.000035,0.000000,0.000000 +7357,-3.0,90.000035,0.000000,0.000000 +7358,-3.0,90.000035,0.000000,0.000000 +7359,-3.0,90.000035,0.000000,0.000000 +7360,-3.0,90.000035,0.000000,0.000000 +7361,-3.0,90.000035,0.000000,0.000000 +7362,-3.0,90.000035,0.000000,0.000000 +7363,-3.0,90.000035,0.000000,0.000000 +7364,-3.0,90.000035,0.000000,0.000000 +7365,-3.0,90.000035,0.000000,0.000000 +7366,-3.0,90.000035,0.000000,0.000000 +7367,-3.0,90.000035,0.000000,0.000000 +7368,-3.0,90.000035,0.000000,0.000000 +7369,-3.0,90.000035,0.000000,0.000000 +7370,-3.0,90.000035,0.000000,0.000000 +7371,-3.0,90.000035,0.000000,0.000000 +7372,-3.0,90.000035,0.000000,0.000000 +7373,-3.0,90.000035,0.000000,0.000000 +7374,-3.0,90.000035,0.000000,0.000000 +7375,-3.0,90.000035,0.000000,0.000000 +7376,-3.0,90.000035,0.000000,0.000000 +7377,-3.0,90.000035,0.000000,0.000000 +7378,-3.0,90.000035,0.000000,0.000000 +7379,-3.0,90.000035,0.000000,0.000000 +7380,-3.0,90.000035,0.000000,0.000000 +7381,-3.0,90.000035,0.000000,0.000000 +7382,-3.0,90.000035,0.000000,0.000000 +7383,-3.0,90.000035,0.000000,0.000000 +7384,-3.0,90.000035,0.000000,0.000000 +7385,-3.0,90.000035,0.000000,0.000000 +7386,-3.0,90.000035,0.000000,0.000000 +7387,-3.0,90.000035,0.000000,0.000000 +7388,-3.0,90.000035,0.000000,0.000000 +7389,-3.0,90.000035,0.000000,0.000000 +7390,-3.0,90.000035,0.000000,0.000000 +7391,-3.0,90.000035,0.000000,0.000000 +7392,-3.0,90.000035,0.000000,0.000000 +7393,-3.0,90.000035,0.000000,0.000000 +7394,-3.0,90.000035,0.000000,0.000000 +7395,-3.0,90.000035,0.000000,0.000000 +7396,-3.0,90.000035,0.000000,0.000000 +7397,-3.0,90.000035,0.000000,0.000000 +7398,-3.0,90.000035,0.000000,0.000000 +7399,-3.0,90.000035,0.000000,0.000000 +7400,-3.0,90.000035,0.000000,0.000000 +7401,-3.0,90.000035,0.000000,0.000000 +7402,-3.0,90.000035,0.000000,0.000000 +7403,-3.0,90.000035,0.000000,0.000000 +7404,-3.0,90.000035,0.000000,0.000000 +7405,-3.0,90.000035,0.000000,0.000000 +7406,-3.0,90.000035,0.000000,0.000000 +7407,-3.0,90.000035,0.000000,0.000000 +7408,-3.0,90.000035,0.000000,0.000000 +7409,-3.0,90.000035,0.000000,0.000000 +7410,-3.0,90.000035,0.000000,0.000000 +7411,-3.0,90.000035,0.000000,0.000000 +7412,-3.0,90.000035,0.000000,0.000000 +7413,-3.0,90.000035,0.000000,0.000000 +7414,-3.0,90.000035,0.000000,0.000000 +7415,-3.0,90.000035,0.000000,0.000000 +7416,-3.0,90.000035,0.000000,0.000000 +7417,-3.0,90.000035,0.000000,0.000000 +7418,-3.0,90.000035,0.000000,0.000000 +7419,-3.0,90.000035,0.000000,0.000000 +7420,-3.0,90.000035,0.000000,0.000000 +7421,-3.0,90.000035,0.000000,0.000000 +7422,-3.0,90.000035,0.000000,0.000000 +7423,-3.0,90.000035,0.000000,0.000000 +7424,-3.0,90.000035,0.000000,0.000000 +7425,-3.0,90.000035,0.000000,0.000000 +7426,-3.0,90.000035,0.000000,0.000000 +7427,-3.0,90.000035,0.000000,0.000000 +7428,-3.0,90.000035,0.000000,0.000000 +7429,-3.0,90.000035,0.000000,0.000000 +7430,-3.0,90.000035,0.000000,0.000000 +7431,-3.0,90.000035,0.000000,0.000000 +7432,-3.0,90.000035,0.000000,0.000000 +7433,-3.0,90.000035,0.000000,0.000000 +7434,-3.0,90.000035,0.000000,0.000000 +7435,-3.0,90.000035,0.000000,0.000000 +7436,-3.0,90.000035,0.000000,0.000000 +7437,-3.0,90.000035,0.000000,0.000000 +7438,-3.0,90.000035,0.000000,0.000000 +7439,-3.0,90.000035,0.000000,0.000000 +7440,-3.0,90.000035,0.000000,0.000000 +7441,-3.0,90.000035,0.000000,0.000000 +7442,-3.0,90.000035,0.000000,0.000000 +7443,-3.0,90.000035,0.000000,0.000000 +7444,-3.0,90.000035,0.000000,0.000000 +7445,-3.0,90.000035,0.000000,0.000000 +7446,-3.0,90.000035,0.000000,0.000000 +7447,-3.0,90.000035,0.000000,0.000000 +7448,-3.0,90.000035,0.000000,0.000000 +7449,-3.0,90.000035,0.000000,0.000000 +7450,-3.0,90.000035,0.000000,0.000000 +7451,-3.0,90.000035,0.000000,0.000000 +7452,-3.0,90.000035,0.000000,0.000000 +7453,-3.0,90.000035,0.000000,0.000000 +7454,-3.0,90.000035,0.000000,0.000000 +7455,-3.0,90.000035,0.000000,0.000000 +7456,-3.0,90.000035,0.000000,0.000000 +7457,-3.0,90.000035,0.000000,0.000000 +7458,-3.0,90.000035,0.000000,0.000000 +7459,-3.0,90.000035,0.000000,0.000000 +7460,-3.0,90.000035,0.000000,0.000000 +7461,-3.0,90.000035,0.000000,0.000000 +7462,-3.0,90.000035,0.000000,0.000000 +7463,-3.0,90.000035,0.000000,0.000000 +7464,-3.0,90.000035,0.000000,0.000000 +7465,-3.0,90.000035,0.000000,0.000000 +7466,-3.0,90.000035,0.000000,0.000000 +7467,-3.0,90.000035,0.000000,0.000000 +7468,-3.0,90.000035,0.000000,0.000000 +7469,-3.0,90.000035,0.000000,0.000000 +7470,-3.0,90.000035,0.000000,0.000000 +7471,-3.0,90.000035,0.000000,0.000000 +7472,-3.0,90.000035,0.000000,0.000000 +7473,-3.0,90.000035,0.000000,0.000000 +7474,-3.0,90.000035,0.000000,0.000000 +7475,-3.0,90.000035,0.000000,0.000000 +7476,-3.0,90.000035,0.000000,0.000000 +7477,-3.0,90.000035,0.000000,0.000000 +7478,-3.0,90.000035,0.000000,0.000000 +7479,-3.0,90.000035,0.000000,0.000000 +7480,-3.0,90.000035,0.000000,0.000000 +7481,-3.0,90.000035,0.000000,0.000000 +7482,-3.0,90.000035,0.000000,0.000000 +7483,-3.0,90.000035,0.000000,0.000000 +7484,-3.0,90.000035,0.000000,0.000000 +7485,-3.0,90.000035,0.000000,0.000000 +7486,-3.0,90.000035,0.000000,0.000000 +7487,-3.0,90.000035,0.000000,0.000000 +7488,-3.0,90.000035,0.000000,0.000000 +7489,-3.0,90.000035,0.000000,0.000000 +7490,-3.0,90.000035,0.000000,0.000000 +7491,-3.0,90.000035,0.000000,0.000000 +7492,-3.0,90.000035,0.000000,0.000000 +7493,-3.0,90.000035,0.000000,0.000000 +7494,-3.0,90.000035,0.000000,0.000000 +7495,-3.0,90.000035,0.000000,0.000000 +7496,-3.0,90.000035,0.000000,0.000000 +7497,-3.0,90.000035,0.000000,0.000000 +7498,-3.0,90.000035,0.000000,0.000000 +7499,-3.0,90.000035,0.000000,0.000000 +7500,-3.0,90.000035,0.000000,0.000000 +7501,-3.0,90.000035,0.000000,0.000000 +7502,-3.0,90.000035,0.000000,0.000000 +7503,-3.0,90.000035,0.000000,0.000000 +7504,-3.0,90.000035,0.000000,0.000000 +7505,-3.0,90.000035,0.000000,0.000000 +7506,-3.0,90.000035,0.000000,0.000000 +7507,-3.0,90.000035,0.000000,0.000000 +7508,-3.0,90.000035,0.000000,0.000000 +7509,-3.0,90.000035,0.000000,0.000000 +7510,-3.0,90.000035,0.000000,0.000000 +7511,-3.0,90.000035,0.000000,0.000000 +7512,-3.0,90.000035,0.000000,0.000000 +7513,-3.0,90.000035,0.000000,0.000000 +7514,-3.0,90.000035,0.000000,0.000000 +7515,-3.0,90.000035,0.000000,0.000000 +7516,-3.0,90.000035,0.000000,0.000000 +7517,-3.0,90.000035,0.000000,0.000000 +7518,-3.0,90.000035,0.000000,0.000000 +7519,-3.0,90.000035,0.000000,0.000000 +7520,-3.0,90.000035,0.000000,0.000000 +7521,-3.0,90.000035,0.000000,0.000000 +7522,-3.0,90.000035,0.000000,0.000000 +7523,-3.0,90.000035,0.000000,0.000000 +7524,-3.0,90.000035,0.000000,0.000000 +7525,-3.0,90.000035,0.000000,0.000000 +7526,-3.0,90.000035,0.000000,0.000000 +7527,-3.0,90.000035,0.000000,0.000000 +7528,-3.0,90.000035,0.000000,0.000000 +7529,-3.0,90.000035,0.000000,0.000000 +7530,-3.0,90.000035,0.000000,0.000000 +7531,-3.0,90.000035,0.000000,0.000000 +7532,-3.0,90.000035,0.000000,0.000000 +7533,-3.0,90.000035,0.000000,0.000000 +7534,-3.0,90.000035,0.000000,0.000000 +7535,-3.0,90.000035,0.000000,0.000000 +7536,-3.0,90.000035,0.000000,0.000000 +7537,-3.0,90.000035,0.000000,0.000000 +7538,-3.0,90.000035,0.000000,0.000000 +7539,-3.0,90.000035,0.000000,0.000000 +7540,-3.0,90.000035,0.000000,0.000000 +7541,-3.0,90.000035,0.000000,0.000000 +7542,-3.0,90.000035,0.000000,0.000000 +7543,-3.0,90.000035,0.000000,0.000000 +7544,-3.0,90.000035,0.000000,0.000000 +7545,-3.0,90.000035,0.000000,0.000000 +7546,-3.0,90.000035,0.000000,0.000000 +7547,-3.0,90.000035,0.000000,0.000000 +7548,-3.0,90.000035,0.000000,0.000000 +7549,-3.0,90.000035,0.000000,0.000000 +7550,-3.0,90.000035,0.000000,0.000000 +7551,-3.0,90.000035,0.000000,0.000000 +7552,-3.0,90.000035,0.000000,0.000000 +7553,-3.0,90.000035,0.000000,0.000000 +7554,-3.0,90.000035,0.000000,0.000000 +7555,-3.0,90.000035,0.000000,0.000000 +7556,-3.0,90.000035,0.000000,0.000000 +7557,-3.0,90.000035,0.000000,0.000000 +7558,-3.0,90.000035,0.000000,0.000000 +7559,-3.0,90.000035,0.000000,0.000000 +7560,-3.0,90.000035,0.000000,0.000000 +7561,-3.0,90.000035,0.000000,0.000000 +7562,-3.0,90.000035,0.000000,0.000000 +7563,-3.0,90.000035,0.000000,0.000000 +7564,-3.0,90.000035,0.000000,0.000000 +7565,-3.0,90.000035,0.000000,0.000000 +7566,-3.0,90.000035,0.000000,0.000000 +7567,-3.0,90.000035,0.000000,0.000000 +7568,-3.0,90.000035,0.000000,0.000000 +7569,-3.0,90.000035,0.000000,0.000000 +7570,-3.0,90.000035,0.000000,0.000000 +7571,-3.0,90.000035,0.000000,0.000000 +7572,-3.0,90.000035,0.000000,0.000000 +7573,-3.0,90.000035,0.000000,0.000000 +7574,-3.0,90.000035,0.000000,0.000000 +7575,-3.0,90.000035,0.000000,0.000000 +7576,-3.0,90.000035,0.000000,0.000000 +7577,-3.0,90.000035,0.000000,0.000000 +7578,-3.0,90.000035,0.000000,0.000000 +7579,-3.0,90.000035,0.000000,0.000000 +7580,-3.0,90.000035,0.000000,0.000000 +7581,-3.0,90.000035,0.000000,0.000000 +7582,-3.0,90.000035,0.000000,0.000000 +7583,-3.0,90.000035,0.000000,0.000000 +7584,-3.0,90.000035,0.000000,0.000000 +7585,-3.0,90.000035,0.000000,0.000000 +7586,-3.0,90.000035,0.000000,0.000000 +7587,-3.0,90.000035,0.000000,0.000000 +7588,-3.0,90.000035,0.000000,0.000000 +7589,-3.0,90.000035,0.000000,0.000000 +7590,-3.0,90.000035,0.000000,0.000000 +7591,-3.0,90.000035,0.000000,0.000000 +7592,-3.0,90.000035,0.000000,0.000000 +7593,-3.0,90.000035,0.000000,0.000000 +7594,-3.0,90.000035,0.000000,0.000000 +7595,-3.0,90.000035,0.000000,0.000000 +7596,-3.0,90.000035,0.000000,0.000000 +7597,-3.0,90.000035,0.000000,0.000000 +7598,-3.0,90.000035,0.000000,0.000000 +7599,-3.0,90.000035,0.000000,0.000000 +7600,-3.0,90.000035,0.000000,0.000000 +7601,-3.0,90.000035,0.000000,0.000000 +7602,-3.0,90.000035,0.000000,0.000000 +7603,-3.0,90.000035,0.000000,0.000000 +7604,-3.0,90.000035,0.000000,0.000000 +7605,-3.0,90.000035,0.000000,0.000000 +7606,-3.0,90.000035,0.000000,0.000000 +7607,-3.0,90.000035,0.000000,0.000000 +7608,-3.0,90.000035,0.000000,0.000000 +7609,-3.0,90.000035,0.000000,0.000000 +7610,-3.0,90.000035,0.000000,0.000000 +7611,-3.0,90.000035,0.000000,0.000000 +7612,-3.0,90.000035,0.000000,0.000000 +7613,-3.0,90.000035,0.000000,0.000000 +7614,-3.0,90.000035,0.000000,0.000000 +7615,-3.0,90.000035,0.000000,0.000000 +7616,-3.0,90.000035,0.000000,0.000000 +7617,-3.0,90.000035,0.000000,0.000000 +7618,-3.0,90.000035,0.000000,0.000000 +7619,-3.0,90.000035,0.000000,0.000000 +7620,-3.0,90.000035,0.000000,0.000000 +7621,-3.0,90.000035,0.000000,0.000000 +7622,-3.0,90.000035,0.000000,0.000000 +7623,-3.0,90.000035,0.000000,0.000000 +7624,-3.0,90.000035,0.000000,0.000000 +7625,-3.0,90.000035,0.000000,0.000000 +7626,-3.0,90.000035,0.000000,0.000000 +7627,-3.0,90.000035,0.000000,0.000000 +7628,-3.0,90.000035,0.000000,0.000000 +7629,-3.0,90.000035,0.000000,0.000000 +7630,-3.0,90.000035,0.000000,0.000000 +7631,-3.0,90.000035,0.000000,0.000000 +7632,-3.0,90.000035,0.000000,0.000000 +7633,-3.0,90.000035,0.000000,0.000000 +7634,-3.0,90.000035,0.000000,0.000000 +7635,-3.0,90.000035,0.000000,0.000000 +7636,-3.0,90.000035,0.000000,0.000000 +7637,-3.0,90.000035,0.000000,0.000000 +7638,-3.0,90.000035,0.000000,0.000000 +7639,-3.0,90.000035,0.000000,0.000000 +7640,-3.0,90.000035,0.000000,0.000000 +7641,-3.0,90.000035,0.000000,0.000000 +7642,-3.0,90.000035,0.000000,0.000000 +7643,-3.0,90.000035,0.000000,0.000000 +7644,-3.0,90.000035,0.000000,0.000000 +7645,-3.0,90.000035,0.000000,0.000000 +7646,-3.0,90.000035,0.000000,0.000000 +7647,-3.0,90.000035,0.000000,0.000000 +7648,-3.0,90.000035,0.000000,0.000000 +7649,-3.0,90.000035,0.000000,0.000000 +7650,-3.0,90.000035,0.000000,0.000000 +7651,-3.0,90.000035,0.000000,0.000000 +7652,-3.0,90.000035,0.000000,0.000000 +7653,-3.0,90.000035,0.000000,0.000000 +7654,-3.0,90.000035,0.000000,0.000000 +7655,-3.0,90.000035,0.000000,0.000000 +7656,-3.0,90.000035,0.000000,0.000000 +7657,-3.0,90.000035,0.000000,0.000000 +7658,-3.0,90.000035,0.000000,0.000000 +7659,-3.0,90.000035,0.000000,0.000000 +7660,-3.0,90.000035,0.000000,0.000000 +7661,-3.0,90.000035,0.000000,0.000000 +7662,-3.0,90.000035,0.000000,0.000000 +7663,-3.0,90.000035,0.000000,0.000000 +7664,-3.0,90.000035,0.000000,0.000000 +7665,-3.0,90.000035,0.000000,0.000000 +7666,-3.0,90.000035,0.000000,0.000000 +7667,-3.0,90.000035,0.000000,0.000000 +7668,-3.0,90.000035,0.000000,0.000000 +7669,-3.0,90.000035,0.000000,0.000000 +7670,-3.0,90.000035,0.000000,0.000000 +7671,-3.0,90.000035,0.000000,0.000000 +7672,-3.0,90.000035,0.000000,0.000000 +7673,-3.0,90.000035,0.000000,0.000000 +7674,-3.0,90.000035,0.000000,0.000000 +7675,-3.0,90.000035,0.000000,0.000000 +7676,-3.0,90.000035,0.000000,0.000000 +7677,-3.0,90.000035,0.000000,0.000000 +7678,-3.0,90.000035,0.000000,0.000000 +7679,-3.0,90.000035,0.000000,0.000000 +7680,-3.0,90.000035,0.000000,0.000000 +7681,-3.0,90.000035,0.000000,0.000000 +7682,-3.0,90.000035,0.000000,0.000000 +7683,-3.0,90.000035,0.000000,0.000000 +7684,-3.0,90.000035,0.000000,0.000000 +7685,-3.0,90.000035,0.000000,0.000000 +7686,-3.0,90.000035,0.000000,0.000000 +7687,-3.0,90.000035,0.000000,0.000000 +7688,-3.0,90.000035,0.000000,0.000000 +7689,-3.0,90.000035,0.000000,0.000000 +7690,-3.0,90.000035,0.000000,0.000000 +7691,-3.0,90.000035,0.000000,0.000000 +7692,-3.0,90.000035,0.000000,0.000000 +7693,-3.0,90.000035,0.000000,0.000000 +7694,-3.0,90.000035,0.000000,0.000000 +7695,-3.0,90.000035,0.000000,0.000000 +7696,-3.0,90.000035,0.000000,0.000000 +7697,-3.0,90.000035,0.000000,0.000000 +7698,-3.0,90.000035,0.000000,0.000000 +7699,-3.0,90.000035,0.000000,0.000000 +7700,-3.0,90.000035,0.000000,0.000000 +7701,-3.0,90.000035,0.000000,0.000000 +7702,-3.0,90.000035,0.000000,0.000000 +7703,-3.0,90.000035,0.000000,0.000000 +7704,-3.0,90.000035,0.000000,0.000000 +7705,-3.0,90.000035,0.000000,0.000000 +7706,-3.0,90.000035,0.000000,0.000000 +7707,-3.0,90.000035,0.000000,0.000000 +7708,-3.0,90.000035,0.000000,0.000000 +7709,-3.0,90.000035,0.000000,0.000000 +7710,-3.0,90.000035,0.000000,0.000000 +7711,-3.0,90.000035,0.000000,0.000000 +7712,-3.0,90.000035,0.000000,0.000000 +7713,-3.0,90.000035,0.000000,0.000000 +7714,-3.0,90.000035,0.000000,0.000000 +7715,-3.0,90.000035,0.000000,0.000000 +7716,-3.0,90.000035,0.000000,0.000000 +7717,-3.0,90.000035,0.000000,0.000000 +7718,-3.0,90.000035,0.000000,0.000000 +7719,-3.0,90.000035,0.000000,0.000000 +7720,-3.0,90.000035,0.000000,0.000000 +7721,-3.0,90.000035,0.000000,0.000000 +7722,-3.0,90.000035,0.000000,0.000000 +7723,-3.0,90.000035,0.000000,0.000000 +7724,-3.0,90.000035,0.000000,0.000000 +7725,-3.0,90.000035,0.000000,0.000000 +7726,-3.0,90.000035,0.000000,0.000000 +7727,-3.0,90.000035,0.000000,0.000000 +7728,-3.0,90.000035,0.000000,0.000000 +7729,-3.0,90.000035,0.000000,0.000000 +7730,-3.0,90.000035,0.000000,0.000000 +7731,-3.0,90.000035,0.000000,0.000000 +7732,-3.0,90.000035,0.000000,0.000000 +7733,-3.0,90.000035,0.000000,0.000000 +7734,-3.0,90.000035,0.000000,0.000000 +7735,-3.0,90.000035,0.000000,0.000000 +7736,-3.0,90.000035,0.000000,0.000000 +7737,-3.0,90.000035,0.000000,0.000000 +7738,-3.0,90.000035,0.000000,0.000000 +7739,-3.0,90.000035,0.000000,0.000000 +7740,-3.0,90.000035,0.000000,0.000000 +7741,-3.0,90.000035,0.000000,0.000000 +7742,-3.0,90.000035,0.000000,0.000000 +7743,-3.0,90.000035,0.000000,0.000000 +7744,-3.0,90.000035,0.000000,0.000000 +7745,-3.0,90.000035,0.000000,0.000000 +7746,-3.0,90.000035,0.000000,0.000000 +7747,-3.0,90.000035,0.000000,0.000000 +7748,-3.0,90.000035,0.000000,0.000000 +7749,-3.0,90.000035,0.000000,0.000000 +7750,-3.0,90.000035,0.000000,0.000000 +7751,-3.0,90.000035,0.000000,0.000000 +7752,-3.0,90.000035,0.000000,0.000000 +7753,-3.0,90.000035,0.000000,0.000000 +7754,-3.0,90.000035,0.000000,0.000000 +7755,-3.0,90.000035,0.000000,0.000000 +7756,-3.0,90.000035,0.000000,0.000000 +7757,-3.0,90.000035,0.000000,0.000000 +7758,-3.0,90.000035,0.000000,0.000000 +7759,-3.0,90.000035,0.000000,0.000000 +7760,-3.0,90.000035,0.000000,0.000000 +7761,-3.0,90.000035,0.000000,0.000000 +7762,-3.0,90.000035,0.000000,0.000000 +7763,-3.0,90.000035,0.000000,0.000000 +7764,-3.0,90.000035,0.000000,0.000000 +7765,-3.0,90.000035,0.000000,0.000000 +7766,-3.0,90.000035,0.000000,0.000000 +7767,-3.0,90.000035,0.000000,0.000000 +7768,-3.0,90.000035,0.000000,0.000000 +7769,-3.0,90.000035,0.000000,0.000000 +7770,-3.0,90.000035,0.000000,0.000000 +7771,-3.0,90.000035,0.000000,0.000000 +7772,-3.0,90.000035,0.000000,0.000000 +7773,-3.0,90.000035,0.000000,0.000000 +7774,-3.0,90.000035,0.000000,0.000000 +7775,-3.0,90.000035,0.000000,0.000000 +7776,-3.0,90.000035,0.000000,0.000000 +7777,-3.0,90.000035,0.000000,0.000000 +7778,-3.0,90.000035,0.000000,0.000000 +7779,-3.0,90.000035,0.000000,0.000000 +7780,-3.0,90.000035,0.000000,0.000000 +7781,-3.0,90.000035,0.000000,0.000000 +7782,-3.0,90.000035,0.000000,0.000000 +7783,-3.0,90.000035,0.000000,0.000000 +7784,-3.0,90.000035,0.000000,0.000000 +7785,-3.0,90.000035,0.000000,0.000000 +7786,-3.0,90.000035,0.000000,0.000000 +7787,-3.0,90.000035,0.000000,0.000000 +7788,-3.0,90.000035,0.000000,0.000000 +7789,-3.0,90.000035,0.000000,0.000000 +7790,-3.0,90.000035,0.000000,0.000000 +7791,-3.0,90.000035,0.000000,0.000000 +7792,-3.0,90.000035,0.000000,0.000000 +7793,-3.0,90.000035,0.000000,0.000000 +7794,-3.0,90.000035,0.000000,0.000000 +7795,-3.0,90.000035,0.000000,0.000000 +7796,-3.0,90.000035,0.000000,0.000000 +7797,-3.0,90.000035,0.000000,0.000000 +7798,-3.0,90.000035,0.000000,0.000000 +7799,-3.0,90.000035,0.000000,0.000000 +7800,-3.0,90.000035,0.000000,0.000000 +7801,-3.0,90.000035,0.000000,0.000000 +7802,-3.0,90.000035,0.000000,0.000000 +7803,-3.0,90.000035,0.000000,0.000000 +7804,-3.0,90.000035,0.000000,0.000000 +7805,-3.0,90.000035,0.000000,0.000000 +7806,-3.0,90.000035,0.000000,0.000000 +7807,-3.0,90.000035,0.000000,0.000000 +7808,-3.0,90.000035,0.000000,0.000000 +7809,-3.0,90.000035,0.000000,0.000000 +7810,-3.0,90.000035,0.000000,0.000000 +7811,-3.0,90.000035,0.000000,0.000000 +7812,-3.0,90.000035,0.000000,0.000000 +7813,-3.0,90.000035,0.000000,0.000000 +7814,-3.0,90.000035,0.000000,0.000000 +7815,-3.0,90.000035,0.000000,0.000000 +7816,-3.0,90.000035,0.000000,0.000000 +7817,-3.0,90.000035,0.000000,0.000000 +7818,-3.0,90.000035,0.000000,0.000000 +7819,-3.0,90.000035,0.000000,0.000000 +7820,-3.0,90.000035,0.000000,0.000000 +7821,-3.0,90.000035,0.000000,0.000000 +7822,-3.0,90.000035,0.000000,0.000000 +7823,-3.0,90.000035,0.000000,0.000000 +7824,-3.0,90.000035,0.000000,0.000000 +7825,-3.0,90.000035,0.000000,0.000000 +7826,-3.0,90.000035,0.000000,0.000000 +7827,-3.0,90.000035,0.000000,0.000000 +7828,-3.0,90.000035,0.000000,0.000000 +7829,-3.0,90.000035,0.000000,0.000000 +7830,-3.0,90.000035,0.000000,0.000000 +7831,-3.0,90.000035,0.000000,0.000000 +7832,-3.0,90.000035,0.000000,0.000000 +7833,-3.0,90.000035,0.000000,0.000000 +7834,-3.0,90.000035,0.000000,0.000000 +7835,-3.0,90.000035,0.000000,0.000000 +7836,-3.0,90.000035,0.000000,0.000000 +7837,-3.0,90.000035,0.000000,0.000000 +7838,-3.0,90.000035,0.000000,0.000000 +7839,-3.0,90.000035,0.000000,0.000000 +7840,-3.0,90.000035,0.000000,0.000000 +7841,-3.0,90.000035,0.000000,0.000000 +7842,-3.0,90.000035,0.000000,0.000000 +7843,-3.0,90.000035,0.000000,0.000000 +7844,-3.0,90.000035,0.000000,0.000000 +7845,-3.0,90.000035,0.000000,0.000000 +7846,-3.0,90.000035,0.000000,0.000000 +7847,-3.0,90.000035,0.000000,0.000000 +7848,-3.0,90.000035,0.000000,0.000000 +7849,-3.0,90.000035,0.000000,0.000000 +7850,-3.0,90.000035,0.000000,0.000000 +7851,-3.0,90.000035,0.000000,0.000000 +7852,-3.0,90.000035,0.000000,0.000000 +7853,-3.0,90.000035,0.000000,0.000000 +7854,-3.0,90.000035,0.000000,0.000000 +7855,-3.0,90.000035,0.000000,0.000000 +7856,-3.0,90.000035,0.000000,0.000000 +7857,-3.0,90.000035,0.000000,0.000000 +7858,-3.0,90.000035,0.000000,0.000000 +7859,-3.0,90.000035,0.000000,0.000000 +7860,-3.0,90.000035,0.000000,0.000000 +7861,-3.0,90.000035,0.000000,0.000000 +7862,-3.0,90.000035,0.000000,0.000000 +7863,-3.0,90.000035,0.000000,0.000000 +7864,-3.0,90.000035,0.000000,0.000000 +7865,-3.0,90.000035,0.000000,0.000000 +7866,-3.0,90.000035,0.000000,0.000000 +7867,-3.0,90.000035,0.000000,0.000000 +7868,-3.0,90.000035,0.000000,0.000000 +7869,-3.0,90.000035,0.000000,0.000000 +7870,-3.0,90.000035,0.000000,0.000000 +7871,-3.0,90.000035,0.000000,0.000000 +7872,-3.0,90.000035,0.000000,0.000000 +7873,-3.0,90.000035,0.000000,0.000000 +7874,-3.0,90.000035,0.000000,0.000000 +7875,-3.0,90.000035,0.000000,0.000000 +7876,-3.0,90.000035,0.000000,0.000000 +7877,-3.0,90.000035,0.000000,0.000000 +7878,-3.0,90.000035,0.000000,0.000000 +7879,-3.0,90.000035,0.000000,0.000000 +7880,-3.0,90.000035,0.000000,0.000000 +7881,-3.0,90.000035,0.000000,0.000000 +7882,-3.0,90.000035,0.000000,0.000000 +7883,-3.0,90.000035,0.000000,0.000000 +7884,-3.0,90.000035,0.000000,0.000000 +7885,-3.0,90.000035,0.000000,0.000000 +7886,-3.0,90.000035,0.000000,0.000000 +7887,-3.0,90.000035,0.000000,0.000000 +7888,-3.0,90.000035,0.000000,0.000000 +7889,-3.0,90.000035,0.000000,0.000000 +7890,-3.0,90.000035,0.000000,0.000000 +7891,-3.0,90.000035,0.000000,0.000000 +7892,-3.0,90.000035,0.000000,0.000000 +7893,-3.0,90.000035,0.000000,0.000000 +7894,-3.0,90.000035,0.000000,0.000000 +7895,-3.0,90.000035,0.000000,0.000000 +7896,-3.0,90.000035,0.000000,0.000000 +7897,-3.0,90.000035,0.000000,0.000000 +7898,-3.0,90.000035,0.000000,0.000000 +7899,-3.0,90.000035,0.000000,0.000000 +7900,-3.0,90.000035,0.000000,0.000000 +7901,-3.0,90.000035,0.000000,0.000000 +7902,-3.0,90.000035,0.000000,0.000000 +7903,-3.0,90.000035,0.000000,0.000000 +7904,-3.0,90.000035,0.000000,0.000000 +7905,-3.0,90.000035,0.000000,0.000000 +7906,-3.0,90.000035,0.000000,0.000000 +7907,-3.0,90.000035,0.000000,0.000000 +7908,-3.0,90.000035,0.000000,0.000000 +7909,-3.0,90.000035,0.000000,0.000000 +7910,-3.0,90.000035,0.000000,0.000000 +7911,-3.0,90.000035,0.000000,0.000000 +7912,-3.0,90.000035,0.000000,0.000000 +7913,-3.0,90.000035,0.000000,0.000000 +7914,-3.0,90.000035,0.000000,0.000000 +7915,-3.0,90.000035,0.000000,0.000000 +7916,-3.0,90.000035,0.000000,0.000000 +7917,-3.0,90.000035,0.000000,0.000000 +7918,-3.0,90.000035,0.000000,0.000000 +7919,-3.0,90.000035,0.000000,0.000000 +7920,-3.0,90.000035,0.000000,0.000000 +7921,-3.0,90.000035,0.000000,0.000000 +7922,-3.0,90.000035,0.000000,0.000000 +7923,-3.0,90.000035,0.000000,0.000000 +7924,-3.0,90.000035,0.000000,0.000000 +7925,-3.0,90.000035,0.000000,0.000000 +7926,-3.0,90.000035,0.000000,0.000000 +7927,-3.0,90.000035,0.000000,0.000000 +7928,-3.0,90.000035,0.000000,0.000000 +7929,-3.0,90.000035,0.000000,0.000000 +7930,-3.0,90.000035,0.000000,0.000000 +7931,-3.0,90.000035,0.000000,0.000000 +7932,-3.0,90.000035,0.000000,0.000000 +7933,-3.0,90.000035,0.000000,0.000000 +7934,-3.0,90.000035,0.000000,0.000000 +7935,-3.0,90.000035,0.000000,0.000000 +7936,-3.0,90.000035,0.000000,0.000000 +7937,-3.0,90.000035,0.000000,0.000000 +7938,-3.0,90.000035,0.000000,0.000000 +7939,-3.0,90.000035,0.000000,0.000000 +7940,-3.0,90.000035,0.000000,0.000000 +7941,-3.0,90.000035,0.000000,0.000000 +7942,-3.0,90.000035,0.000000,0.000000 +7943,-3.0,90.000035,0.000000,0.000000 +7944,-3.0,90.000035,0.000000,0.000000 +7945,-3.0,90.000035,0.000000,0.000000 +7946,-3.0,90.000035,0.000000,0.000000 +7947,-3.0,90.000035,0.000000,0.000000 +7948,-3.0,90.000035,0.000000,0.000000 +7949,-3.0,90.000035,0.000000,0.000000 +7950,-3.0,90.000035,0.000000,0.000000 +7951,-3.0,90.000035,0.000000,0.000000 +7952,-3.0,90.000035,0.000000,0.000000 +7953,-3.0,90.000035,0.000000,0.000000 +7954,-3.0,90.000035,0.000000,0.000000 +7955,-3.0,90.000035,0.000000,0.000000 +7956,-3.0,90.000035,0.000000,0.000000 +7957,-3.0,90.000035,0.000000,0.000000 +7958,-3.0,90.000035,0.000000,0.000000 +7959,-3.0,90.000035,0.000000,0.000000 +7960,-3.0,90.000035,0.000000,0.000000 +7961,-3.0,90.000035,0.000000,0.000000 +7962,-3.0,90.000035,0.000000,0.000000 +7963,-3.0,90.000035,0.000000,0.000000 +7964,-3.0,90.000035,0.000000,0.000000 +7965,-3.0,90.000035,0.000000,0.000000 +7966,-3.0,90.000035,0.000000,0.000000 +7967,-3.0,90.000035,0.000000,0.000000 +7968,-3.0,90.000035,0.000000,0.000000 +7969,-3.0,90.000035,0.000000,0.000000 +7970,-3.0,90.000035,0.000000,0.000000 +7971,-3.0,90.000035,0.000000,0.000000 +7972,-3.0,90.000035,0.000000,0.000000 +7973,-3.0,90.000035,0.000000,0.000000 +7974,-3.0,90.000035,0.000000,0.000000 +7975,-3.0,90.000035,0.000000,0.000000 +7976,-3.0,90.000035,0.000000,0.000000 +7977,-3.0,90.000035,0.000000,0.000000 +7978,-3.0,90.000035,0.000000,0.000000 +7979,-3.0,90.000035,0.000000,0.000000 +7980,-3.0,90.000035,0.000000,0.000000 +7981,-3.0,90.000035,0.000000,0.000000 +7982,-3.0,90.000035,0.000000,0.000000 +7983,-3.0,90.000035,0.000000,0.000000 +7984,-3.0,90.000035,0.000000,0.000000 +7985,-3.0,90.000035,0.000000,0.000000 +7986,-3.0,90.000035,0.000000,0.000000 +7987,-3.0,90.000035,0.000000,0.000000 +7988,-3.0,90.000035,0.000000,0.000000 +7989,-3.0,90.000035,0.000000,0.000000 +7990,-3.0,90.000035,0.000000,0.000000 +7991,-3.0,90.000035,0.000000,0.000000 +7992,-3.0,90.000035,0.000000,0.000000 +7993,-3.0,90.000035,0.000000,0.000000 +7994,-3.0,90.000035,0.000000,0.000000 +7995,-3.0,90.000035,0.000000,0.000000 +7996,-3.0,90.000035,0.000000,0.000000 +7997,-3.0,90.000035,0.000000,0.000000 +7998,-3.0,90.000035,0.000000,0.000000 +7999,-3.0,90.000035,0.000000,0.000000 +8000,-3.0,90.000035,0.000000,0.000000 +8001,-3.0,90.000035,0.000000,0.000000 +8002,-3.0,90.000035,0.000000,0.000000 +8003,-3.0,90.000035,0.000000,0.000000 +8004,-3.0,90.000035,0.000000,0.000000 +8005,-3.0,90.000035,0.000000,0.000000 +8006,-3.0,90.000035,0.000000,0.000000 +8007,-3.0,90.000035,0.000000,0.000000 +8008,-3.0,90.000035,0.000000,0.000000 +8009,-3.0,90.000035,0.000000,0.000000 +8010,-3.0,90.000035,0.000000,0.000000 +8011,-3.0,90.000035,0.000000,0.000000 +8012,-3.0,90.000035,0.000000,0.000000 +8013,-3.0,90.000035,0.000000,0.000000 +8014,-3.0,90.000035,0.000000,0.000000 +8015,-3.0,90.000035,0.000000,0.000000 +8016,-3.0,90.000035,0.000000,0.000000 +8017,-3.0,90.000035,0.000000,0.000000 +8018,-3.0,90.000035,0.000000,0.000000 +8019,-3.0,90.000035,0.000000,0.000000 +8020,-3.0,90.000035,0.000000,0.000000 +8021,-3.0,90.000035,0.000000,0.000000 +8022,-3.0,90.000035,0.000000,0.000000 +8023,-3.0,90.000035,0.000000,0.000000 +8024,-3.0,90.000035,0.000000,0.000000 +8025,-3.0,90.000035,0.000000,0.000000 +8026,-3.0,90.000035,0.000000,0.000000 +8027,-3.0,90.000035,0.000000,0.000000 +8028,-3.0,90.000035,0.000000,0.000000 +8029,-3.0,90.000035,0.000000,0.000000 +8030,-3.0,90.000035,0.000000,0.000000 +8031,-3.0,90.000035,0.000000,0.000000 +8032,-3.0,90.000035,0.000000,0.000000 +8033,-3.0,90.000035,0.000000,0.000000 +8034,-3.0,90.000035,0.000000,0.000000 +8035,-3.0,90.000035,0.000000,0.000000 +8036,-3.0,90.000035,0.000000,0.000000 +8037,-3.0,90.000035,0.000000,0.000000 +8038,-3.0,90.000035,0.000000,0.000000 +8039,-3.0,90.000035,0.000000,0.000000 +8040,-3.0,90.000035,0.000000,0.000000 +8041,-3.0,90.000035,0.000000,0.000000 +8042,-3.0,90.000035,0.000000,0.000000 +8043,-3.0,90.000035,0.000000,0.000000 +8044,-3.0,90.000035,0.000000,0.000000 +8045,-3.0,90.000035,0.000000,0.000000 +8046,-3.0,90.000035,0.000000,0.000000 +8047,-3.0,90.000035,0.000000,0.000000 +8048,-3.0,90.000035,0.000000,0.000000 +8049,-3.0,90.000035,0.000000,0.000000 +8050,-3.0,90.000035,0.000000,0.000000 +8051,-3.0,90.000035,0.000000,0.000000 +8052,-3.0,90.000035,0.000000,0.000000 +8053,-3.0,90.000035,0.000000,0.000000 +8054,-3.0,90.000035,0.000000,0.000000 +8055,-3.0,90.000035,0.000000,0.000000 +8056,-3.0,90.000035,0.000000,0.000000 +8057,-3.0,90.000035,0.000000,0.000000 +8058,-3.0,90.000035,0.000000,0.000000 +8059,-3.0,90.000035,0.000000,0.000000 +8060,-3.0,90.000035,0.000000,0.000000 +8061,-3.0,90.000035,0.000000,0.000000 +8062,-3.0,90.000035,0.000000,0.000000 +8063,-3.0,90.000035,0.000000,0.000000 +8064,-3.0,90.000035,0.000000,0.000000 +8065,-3.0,90.000035,0.000000,0.000000 +8066,-3.0,90.000035,0.000000,0.000000 +8067,-3.0,90.000035,0.000000,0.000000 +8068,-3.0,90.000035,0.000000,0.000000 +8069,-3.0,90.000035,0.000000,0.000000 +8070,-3.0,90.000035,0.000000,0.000000 +8071,-3.0,90.000035,0.000000,0.000000 +8072,-3.0,90.000035,0.000000,0.000000 +8073,-3.0,90.000035,0.000000,0.000000 +8074,-3.0,90.000035,0.000000,0.000000 +8075,-3.0,90.000035,0.000000,0.000000 +8076,-3.0,90.000035,0.000000,0.000000 +8077,-3.0,90.000035,0.000000,0.000000 +8078,-3.0,90.000035,0.000000,0.000000 +8079,-3.0,90.000035,0.000000,0.000000 +8080,-3.0,90.000035,0.000000,0.000000 +8081,-3.0,90.000035,0.000000,0.000000 +8082,-3.0,90.000035,0.000000,0.000000 +8083,-3.0,90.000035,0.000000,0.000000 +8084,-3.0,90.000035,0.000000,0.000000 +8085,-3.0,90.000035,0.000000,0.000000 +8086,-3.0,90.000035,0.000000,0.000000 +8087,-3.0,90.000035,0.000000,0.000000 +8088,-3.0,90.000035,0.000000,0.000000 +8089,-3.0,90.000035,0.000000,0.000000 +8090,-3.0,90.000035,0.000000,0.000000 +8091,-3.0,90.000035,0.000000,0.000000 +8092,-3.0,90.000035,0.000000,0.000000 +8093,-3.0,90.000035,0.000000,0.000000 +8094,-3.0,90.000035,0.000000,0.000000 +8095,-3.0,90.000035,0.000000,0.000000 +8096,-3.0,90.000035,0.000000,0.000000 +8097,-3.0,90.000035,0.000000,0.000000 +8098,-3.0,90.000035,0.000000,0.000000 +8099,-3.0,90.000035,0.000000,0.000000 diff --git a/scripts/trajectories/headrot-1.5s.csv b/scripts/trajectories/headrot-1.5s.csv new file mode 100644 index 0000000000..e3500d2d39 --- /dev/null +++ b/scripts/trajectories/headrot-1.5s.csv @@ -0,0 +1,8100 @@ +0,0.996195,0.000000,0.000000,0.087156 +1,0.996195,0.000000,0.000000,0.087156 +2,0.996195,0.000000,0.000000,0.087156 +3,0.996195,0.000000,0.000000,0.087156 +4,0.996195,0.000000,0.000000,0.087156 +5,0.996195,0.000000,0.000000,0.087156 +6,0.996195,0.000000,0.000000,0.087156 +7,0.996195,0.000000,0.000000,0.087156 +8,0.996195,0.000000,0.000000,0.087156 +9,0.996195,0.000000,0.000000,0.087156 +10,0.996195,0.000000,0.000000,0.087156 +11,0.996195,0.000000,0.000000,0.087156 +12,0.996195,0.000000,0.000000,0.087156 +13,0.996195,0.000000,0.000000,0.087156 +14,0.996195,0.000000,0.000000,0.087156 +15,0.996195,0.000000,0.000000,0.087156 +16,0.996195,0.000000,0.000000,0.087156 +17,0.996195,0.000000,0.000000,0.087156 +18,0.996195,0.000000,0.000000,0.087156 +19,0.996195,0.000000,0.000000,0.087156 +20,0.996195,0.000000,0.000000,0.087156 +21,0.996195,0.000000,0.000000,0.087156 +22,0.996195,0.000000,0.000000,0.087156 +23,0.996195,0.000000,0.000000,0.087156 +24,0.996195,0.000000,0.000000,0.087156 +25,0.996195,0.000000,0.000000,0.087156 +26,0.996195,0.000000,0.000000,0.087156 +27,0.996195,0.000000,0.000000,0.087156 +28,0.996195,0.000000,0.000000,0.087156 +29,0.996195,0.000000,0.000000,0.087156 +30,0.996195,0.000000,0.000000,0.087156 +31,0.996195,0.000000,0.000000,0.087156 +32,0.996195,0.000000,0.000000,0.087156 +33,0.996195,0.000000,0.000000,0.087156 +34,0.996195,0.000000,0.000000,0.087156 +35,0.996195,0.000000,0.000000,0.087156 +36,0.996195,0.000000,0.000000,0.087156 +37,0.996195,0.000000,0.000000,0.087156 +38,0.996195,0.000000,0.000000,0.087156 +39,0.996195,0.000000,0.000000,0.087156 +40,0.996195,0.000000,0.000000,0.087156 +41,0.996195,0.000000,0.000000,0.087156 +42,0.996195,0.000000,0.000000,0.087156 +43,0.996195,0.000000,0.000000,0.087156 +44,0.996195,0.000000,0.000000,0.087156 +45,0.996195,0.000000,0.000000,0.087156 +46,0.996195,0.000000,0.000000,0.087156 +47,0.996195,0.000000,0.000000,0.087156 +48,0.996195,0.000000,0.000000,0.087156 +49,0.996195,0.000000,0.000000,0.087156 +50,0.996195,0.000000,0.000000,0.087156 +51,0.996195,0.000000,0.000000,0.087156 +52,0.996195,0.000000,0.000000,0.087156 +53,0.996195,0.000000,0.000000,0.087156 +54,0.996195,0.000000,0.000000,0.087156 +55,0.996195,0.000000,0.000000,0.087156 +56,0.996195,0.000000,0.000000,0.087156 +57,0.996195,0.000000,0.000000,0.087156 +58,0.996195,0.000000,0.000000,0.087156 +59,0.996195,0.000000,0.000000,0.087156 +60,0.996195,0.000000,0.000000,0.087156 +61,0.996195,0.000000,0.000000,0.087156 +62,0.996195,0.000000,0.000000,0.087156 +63,0.996195,0.000000,0.000000,0.087156 +64,0.996195,0.000000,0.000000,0.087156 +65,0.996195,0.000000,0.000000,0.087156 +66,0.996195,0.000000,0.000000,0.087156 +67,0.996195,0.000000,0.000000,0.087156 +68,0.996195,0.000000,0.000000,0.087156 +69,0.996195,0.000000,0.000000,0.087156 +70,0.996195,0.000000,0.000000,0.087156 +71,0.996195,0.000000,0.000000,0.087156 +72,0.996195,0.000000,0.000000,0.087156 +73,0.996195,0.000000,0.000000,0.087156 +74,0.996195,0.000000,0.000000,0.087156 +75,0.996195,0.000000,0.000000,0.087156 +76,0.996195,0.000000,0.000000,0.087156 +77,0.996195,0.000000,0.000000,0.087156 +78,0.996195,0.000000,0.000000,0.087156 +79,0.996195,0.000000,0.000000,0.087156 +80,0.996195,0.000000,0.000000,0.087156 +81,0.996195,0.000000,0.000000,0.087156 +82,0.996195,0.000000,0.000000,0.087156 +83,0.996195,0.000000,0.000000,0.087156 +84,0.996195,0.000000,0.000000,0.087156 +85,0.996195,0.000000,0.000000,0.087156 +86,0.996195,0.000000,0.000000,0.087156 +87,0.996195,0.000000,0.000000,0.087156 +88,0.996195,0.000000,0.000000,0.087156 +89,0.996195,0.000000,0.000000,0.087156 +90,0.996195,0.000000,0.000000,0.087156 +91,0.996195,0.000000,0.000000,0.087156 +92,0.996195,0.000000,0.000000,0.087156 +93,0.996195,0.000000,0.000000,0.087156 +94,0.996195,0.000000,0.000000,0.087156 +95,0.996195,0.000000,0.000000,0.087156 +96,0.996195,0.000000,0.000000,0.087156 +97,0.996195,0.000000,0.000000,0.087156 +98,0.996195,0.000000,0.000000,0.087156 +99,0.996195,0.000000,0.000000,0.087156 +100,0.996195,0.000000,0.000000,0.087156 +101,0.996195,0.000000,0.000000,0.087156 +102,0.996195,0.000000,0.000000,0.087156 +103,0.996195,0.000000,0.000000,0.087156 +104,0.996195,0.000000,0.000000,0.087156 +105,0.996195,0.000000,0.000000,0.087156 +106,0.996195,0.000000,0.000000,0.087156 +107,0.996195,0.000000,0.000000,0.087156 +108,0.996195,0.000000,0.000000,0.087156 +109,0.996195,0.000000,0.000000,0.087156 +110,0.996195,0.000000,0.000000,0.087156 +111,0.996195,0.000000,0.000000,0.087156 +112,0.996195,0.000000,0.000000,0.087156 +113,0.996195,0.000000,0.000000,0.087156 +114,0.996195,0.000000,0.000000,0.087156 +115,0.996195,0.000000,0.000000,0.087156 +116,0.996195,0.000000,0.000000,0.087156 +117,0.996195,0.000000,0.000000,0.087156 +118,0.996195,0.000000,0.000000,0.087156 +119,0.996195,0.000000,0.000000,0.087156 +120,0.996195,0.000000,0.000000,0.087156 +121,0.996195,0.000000,0.000000,0.087156 +122,0.996195,0.000000,0.000000,0.087156 +123,0.996195,0.000000,0.000000,0.087156 +124,0.996195,0.000000,0.000000,0.087156 +125,0.996195,0.000000,0.000000,0.087156 +126,0.996195,0.000000,0.000000,0.087156 +127,0.996195,0.000000,0.000000,0.087156 +128,0.996195,0.000000,0.000000,0.087156 +129,0.996195,0.000000,0.000000,0.087156 +130,0.996195,0.000000,0.000000,0.087156 +131,0.996195,0.000000,0.000000,0.087156 +132,0.996195,0.000000,0.000000,0.087156 +133,0.996195,0.000000,0.000000,0.087156 +134,0.996195,0.000000,0.000000,0.087156 +135,0.996195,0.000000,0.000000,0.087156 +136,0.996195,0.000000,0.000000,0.087156 +137,0.996195,0.000000,0.000000,0.087156 +138,0.996195,0.000000,0.000000,0.087156 +139,0.996195,0.000000,0.000000,0.087156 +140,0.996195,0.000000,0.000000,0.087156 +141,0.996195,0.000000,0.000000,0.087156 +142,0.996195,0.000000,0.000000,0.087156 +143,0.996195,0.000000,0.000000,0.087156 +144,0.996195,0.000000,0.000000,0.087156 +145,0.996195,0.000000,0.000000,0.087156 +146,0.996195,0.000000,0.000000,0.087156 +147,0.996195,0.000000,0.000000,0.087156 +148,0.996195,0.000000,0.000000,0.087156 +149,0.996195,0.000000,0.000000,0.087156 +150,0.996195,0.000000,0.000000,0.087156 +151,0.996195,0.000000,0.000000,0.087156 +152,0.996195,0.000000,0.000000,0.087156 +153,0.996195,0.000000,0.000000,0.087156 +154,0.996195,0.000000,0.000000,0.087156 +155,0.996195,0.000000,0.000000,0.087156 +156,0.996195,0.000000,0.000000,0.087156 +157,0.996195,0.000000,0.000000,0.087156 +158,0.996195,0.000000,0.000000,0.087156 +159,0.996195,0.000000,0.000000,0.087156 +160,0.996195,0.000000,0.000000,0.087156 +161,0.996195,0.000000,0.000000,0.087156 +162,0.996195,0.000000,0.000000,0.087156 +163,0.996195,0.000000,0.000000,0.087156 +164,0.996195,0.000000,0.000000,0.087156 +165,0.996195,0.000000,0.000000,0.087156 +166,0.996195,0.000000,0.000000,0.087156 +167,0.996195,0.000000,0.000000,0.087156 +168,0.996195,0.000000,0.000000,0.087156 +169,0.996195,0.000000,0.000000,0.087156 +170,0.996195,0.000000,0.000000,0.087156 +171,0.996195,0.000000,0.000000,0.087156 +172,0.996195,0.000000,0.000000,0.087156 +173,0.996195,0.000000,0.000000,0.087156 +174,0.996195,0.000000,0.000000,0.087156 +175,0.996195,0.000000,0.000000,0.087156 +176,0.996195,0.000000,0.000000,0.087156 +177,0.996195,0.000000,0.000000,0.087156 +178,0.996195,0.000000,0.000000,0.087156 +179,0.996195,0.000000,0.000000,0.087156 +180,0.996195,0.000000,0.000000,0.087156 +181,0.996195,0.000000,0.000000,0.087156 +182,0.996195,0.000000,0.000000,0.087156 +183,0.996195,0.000000,0.000000,0.087156 +184,0.996195,0.000000,0.000000,0.087156 +185,0.996195,0.000000,0.000000,0.087156 +186,0.996195,0.000000,0.000000,0.087156 +187,0.996195,0.000000,0.000000,0.087156 +188,0.996195,0.000000,0.000000,0.087156 +189,0.996195,0.000000,0.000000,0.087156 +190,0.996195,0.000000,0.000000,0.087156 +191,0.996195,0.000000,0.000000,0.087156 +192,0.996195,0.000000,0.000000,0.087156 +193,0.996195,0.000000,0.000000,0.087156 +194,0.996195,0.000000,0.000000,0.087156 +195,0.996195,0.000000,0.000000,0.087156 +196,0.996195,0.000000,0.000000,0.087156 +197,0.996195,0.000000,0.000000,0.087156 +198,0.996195,0.000000,0.000000,0.087156 +199,0.996195,0.000000,0.000000,0.087156 +200,0.996195,0.000000,0.000000,0.087156 +201,0.996195,0.000000,0.000000,0.087156 +202,0.996195,0.000000,0.000000,0.087156 +203,0.996195,0.000000,0.000000,0.087156 +204,0.996195,0.000000,0.000000,0.087156 +205,0.996195,0.000000,0.000000,0.087156 +206,0.996195,0.000000,0.000000,0.087156 +207,0.996195,0.000000,0.000000,0.087156 +208,0.996195,0.000000,0.000000,0.087156 +209,0.996195,0.000000,0.000000,0.087156 +210,0.996195,0.000000,0.000000,0.087156 +211,0.996195,0.000000,0.000000,0.087156 +212,0.996195,0.000000,0.000000,0.087156 +213,0.996195,0.000000,0.000000,0.087156 +214,0.996195,0.000000,0.000000,0.087156 +215,0.996195,0.000000,0.000000,0.087156 +216,0.996195,0.000000,0.000000,0.087156 +217,0.996195,0.000000,0.000000,0.087156 +218,0.996195,0.000000,0.000000,0.087156 +219,0.996195,0.000000,0.000000,0.087156 +220,0.996195,0.000000,0.000000,0.087156 +221,0.996195,0.000000,0.000000,0.087156 +222,0.996195,0.000000,0.000000,0.087156 +223,0.996195,0.000000,0.000000,0.087156 +224,0.996195,0.000000,0.000000,0.087156 +225,0.996195,0.000000,0.000000,0.087156 +226,0.996195,0.000000,0.000000,0.087156 +227,0.996195,0.000000,0.000000,0.087156 +228,0.996195,0.000000,0.000000,0.087156 +229,0.996195,0.000000,0.000000,0.087156 +230,0.996195,0.000000,0.000000,0.087156 +231,0.996195,0.000000,0.000000,0.087156 +232,0.996195,0.000000,0.000000,0.087156 +233,0.996195,0.000000,0.000000,0.087156 +234,0.996195,0.000000,0.000000,0.087156 +235,0.996195,0.000000,0.000000,0.087156 +236,0.996195,0.000000,0.000000,0.087156 +237,0.996195,0.000000,0.000000,0.087156 +238,0.996195,0.000000,0.000000,0.087156 +239,0.996195,0.000000,0.000000,0.087156 +240,0.996195,0.000000,0.000000,0.087156 +241,0.996195,0.000000,0.000000,0.087156 +242,0.996195,0.000000,0.000000,0.087156 +243,0.996195,0.000000,0.000000,0.087156 +244,0.996195,0.000000,0.000000,0.087156 +245,0.996195,0.000000,0.000000,0.087156 +246,0.996195,0.000000,0.000000,0.087156 +247,0.996195,0.000000,0.000000,0.087156 +248,0.996195,0.000000,0.000000,0.087156 +249,0.996195,0.000000,0.000000,0.087156 +250,0.996195,0.000000,0.000000,0.087156 +251,0.996195,0.000000,0.000000,0.087156 +252,0.996195,0.000000,0.000000,0.087156 +253,0.996195,0.000000,0.000000,0.087156 +254,0.996195,0.000000,0.000000,0.087156 +255,0.996195,0.000000,0.000000,0.087156 +256,0.996195,0.000000,0.000000,0.087156 +257,0.996195,0.000000,0.000000,0.087156 +258,0.996195,0.000000,0.000000,0.087156 +259,0.996195,0.000000,0.000000,0.087156 +260,0.996195,0.000000,0.000000,0.087156 +261,0.996195,0.000000,0.000000,0.087156 +262,0.996195,0.000000,0.000000,0.087156 +263,0.996195,0.000000,0.000000,0.087156 +264,0.996195,0.000000,0.000000,0.087156 +265,0.996195,0.000000,0.000000,0.087156 +266,0.996195,0.000000,0.000000,0.087156 +267,0.996195,0.000000,0.000000,0.087156 +268,0.996195,0.000000,0.000000,0.087156 +269,0.996195,0.000000,0.000000,0.087156 +270,0.996195,0.000000,0.000000,0.087156 +271,0.996195,0.000000,0.000000,0.087156 +272,0.996195,0.000000,0.000000,0.087156 +273,0.996195,0.000000,0.000000,0.087156 +274,0.996195,0.000000,0.000000,0.087156 +275,0.996195,0.000000,0.000000,0.087156 +276,0.996195,0.000000,0.000000,0.087156 +277,0.996195,0.000000,0.000000,0.087156 +278,0.996195,0.000000,0.000000,0.087156 +279,0.996195,0.000000,0.000000,0.087156 +280,0.996195,0.000000,0.000000,0.087156 +281,0.996195,0.000000,0.000000,0.087156 +282,0.996195,0.000000,0.000000,0.087156 +283,0.996195,0.000000,0.000000,0.087156 +284,0.996195,0.000000,0.000000,0.087156 +285,0.996195,0.000000,0.000000,0.087156 +286,0.996195,0.000000,0.000000,0.087156 +287,0.996195,0.000000,0.000000,0.087156 +288,0.996195,0.000000,0.000000,0.087156 +289,0.996195,0.000000,0.000000,0.087156 +290,0.996195,0.000000,0.000000,0.087156 +291,0.996195,0.000000,0.000000,0.087156 +292,0.996195,0.000000,0.000000,0.087156 +293,0.996195,0.000000,0.000000,0.087156 +294,0.996195,0.000000,0.000000,0.087156 +295,0.996195,0.000000,0.000000,0.087156 +296,0.996195,0.000000,0.000000,0.087156 +297,0.996195,0.000000,0.000000,0.087156 +298,0.996195,0.000000,0.000000,0.087156 +299,0.996195,0.000000,0.000000,0.087156 +300,0.996195,0.000000,0.000000,0.087156 +301,0.996195,0.000000,0.000000,0.087156 +302,0.996195,0.000000,0.000000,0.087156 +303,0.996195,0.000000,0.000000,0.087156 +304,0.996195,0.000000,0.000000,0.087156 +305,0.996195,0.000000,0.000000,0.087156 +306,0.996195,0.000000,0.000000,0.087156 +307,0.996195,0.000000,0.000000,0.087156 +308,0.996195,0.000000,0.000000,0.087156 +309,0.996195,0.000000,0.000000,0.087156 +310,0.996195,0.000000,0.000000,0.087156 +311,0.996195,0.000000,0.000000,0.087156 +312,0.996195,0.000000,0.000000,0.087156 +313,0.996195,0.000000,0.000000,0.087156 +314,0.996195,0.000000,0.000000,0.087156 +315,0.996195,0.000000,0.000000,0.087156 +316,0.996195,0.000000,0.000000,0.087156 +317,0.996195,0.000000,0.000000,0.087156 +318,0.996195,0.000000,0.000000,0.087156 +319,0.996195,0.000000,0.000000,0.087156 +320,0.996195,0.000000,0.000000,0.087156 +321,0.996195,0.000000,0.000000,0.087156 +322,0.996195,0.000000,0.000000,0.087156 +323,0.996195,0.000000,0.000000,0.087156 +324,0.996195,0.000000,0.000000,0.087156 +325,0.996195,0.000000,0.000000,0.087156 +326,0.996195,0.000000,0.000000,0.087156 +327,0.996195,0.000000,0.000000,0.087156 +328,0.996195,0.000000,0.000000,0.087156 +329,0.996195,0.000000,0.000000,0.087156 +330,0.996195,0.000000,0.000000,0.087156 +331,0.996195,0.000000,0.000000,0.087156 +332,0.996195,0.000000,0.000000,0.087156 +333,0.996195,0.000000,0.000000,0.087156 +334,0.996195,0.000000,0.000000,0.087156 +335,0.996195,0.000000,0.000000,0.087156 +336,0.996195,0.000000,0.000000,0.087156 +337,0.996195,0.000000,0.000000,0.087156 +338,0.996195,0.000000,0.000000,0.087156 +339,0.996195,0.000000,0.000000,0.087156 +340,0.996195,0.000000,0.000000,0.087156 +341,0.996195,0.000000,0.000000,0.087156 +342,0.996195,0.000000,0.000000,0.087156 +343,0.996195,0.000000,0.000000,0.087156 +344,0.996195,0.000000,0.000000,0.087156 +345,0.996195,0.000000,0.000000,0.087156 +346,0.996195,0.000000,0.000000,0.087156 +347,0.996195,0.000000,0.000000,0.087156 +348,0.996195,0.000000,0.000000,0.087156 +349,0.996195,0.000000,0.000000,0.087156 +350,0.996195,0.000000,0.000000,0.087156 +351,0.996195,0.000000,0.000000,0.087156 +352,0.996195,0.000000,0.000000,0.087156 +353,0.996195,0.000000,0.000000,0.087156 +354,0.996195,0.000000,0.000000,0.087156 +355,0.996195,0.000000,0.000000,0.087156 +356,0.996195,0.000000,0.000000,0.087156 +357,0.996195,0.000000,0.000000,0.087156 +358,0.996195,0.000000,0.000000,0.087156 +359,0.996195,0.000000,0.000000,0.087156 +360,0.996195,0.000000,0.000000,0.087156 +361,0.996195,0.000000,0.000000,0.087156 +362,0.996195,0.000000,0.000000,0.087156 +363,0.996195,0.000000,0.000000,0.087156 +364,0.996195,0.000000,0.000000,0.087156 +365,0.996195,0.000000,0.000000,0.087156 +366,0.996195,0.000000,0.000000,0.087156 +367,0.996195,0.000000,0.000000,0.087156 +368,0.996195,0.000000,0.000000,0.087156 +369,0.996195,0.000000,0.000000,0.087156 +370,0.996195,0.000000,0.000000,0.087156 +371,0.996195,0.000000,0.000000,0.087156 +372,0.996195,0.000000,0.000000,0.087156 +373,0.996195,0.000000,0.000000,0.087156 +374,0.996195,0.000000,0.000000,0.087156 +375,0.996195,0.000000,0.000000,0.087156 +376,0.996195,0.000000,0.000000,0.087156 +377,0.996195,0.000000,0.000000,0.087156 +378,0.996195,0.000000,0.000000,0.087156 +379,0.996195,0.000000,0.000000,0.087156 +380,0.996195,0.000000,0.000000,0.087156 +381,0.996195,0.000000,0.000000,0.087156 +382,0.996195,0.000000,0.000000,0.087156 +383,0.996195,0.000000,0.000000,0.087156 +384,0.996195,0.000000,0.000000,0.087156 +385,0.996195,0.000000,0.000000,0.087156 +386,0.996195,0.000000,0.000000,0.087156 +387,0.996195,0.000000,0.000000,0.087156 +388,0.996195,0.000000,0.000000,0.087156 +389,0.996195,0.000000,0.000000,0.087156 +390,0.996195,0.000000,0.000000,0.087156 +391,0.996195,0.000000,0.000000,0.087156 +392,0.996195,0.000000,0.000000,0.087156 +393,0.996195,0.000000,0.000000,0.087156 +394,0.996195,0.000000,0.000000,0.087156 +395,0.996195,0.000000,0.000000,0.087156 +396,0.996195,0.000000,0.000000,0.087156 +397,0.996195,0.000000,0.000000,0.087156 +398,0.996195,0.000000,0.000000,0.087156 +399,0.996195,0.000000,0.000000,0.087156 +400,0.996195,0.000000,0.000000,0.087156 +401,0.996195,0.000000,0.000000,0.087156 +402,0.996195,0.000000,0.000000,0.087156 +403,0.996195,0.000000,0.000000,0.087156 +404,0.996195,0.000000,0.000000,0.087156 +405,0.996195,0.000000,0.000000,0.087156 +406,0.996195,0.000000,0.000000,0.087156 +407,0.996195,0.000000,0.000000,0.087156 +408,0.996195,0.000000,0.000000,0.087156 +409,0.996195,0.000000,0.000000,0.087156 +410,0.996195,0.000000,0.000000,0.087156 +411,0.996195,0.000000,0.000000,0.087156 +412,0.996195,0.000000,0.000000,0.087156 +413,0.996195,0.000000,0.000000,0.087156 +414,0.996195,0.000000,0.000000,0.087156 +415,0.996195,0.000000,0.000000,0.087156 +416,0.996195,0.000000,0.000000,0.087156 +417,0.996195,0.000000,0.000000,0.087156 +418,0.996195,0.000000,0.000000,0.087156 +419,0.996195,0.000000,0.000000,0.087156 +420,0.996195,0.000000,0.000000,0.087156 +421,0.996195,0.000000,0.000000,0.087156 +422,0.996195,0.000000,0.000000,0.087156 +423,0.996195,0.000000,0.000000,0.087156 +424,0.996195,0.000000,0.000000,0.087156 +425,0.996195,0.000000,0.000000,0.087156 +426,0.996195,0.000000,0.000000,0.087156 +427,0.996195,0.000000,0.000000,0.087156 +428,0.996195,0.000000,0.000000,0.087156 +429,0.996195,0.000000,0.000000,0.087156 +430,0.996195,0.000000,0.000000,0.087156 +431,0.996195,0.000000,0.000000,0.087156 +432,0.996195,0.000000,0.000000,0.087156 +433,0.996195,0.000000,0.000000,0.087156 +434,0.996195,0.000000,0.000000,0.087156 +435,0.996195,0.000000,0.000000,0.087156 +436,0.996195,0.000000,0.000000,0.087156 +437,0.996195,0.000000,0.000000,0.087156 +438,0.996195,0.000000,0.000000,0.087156 +439,0.996195,0.000000,0.000000,0.087156 +440,0.996195,0.000000,0.000000,0.087156 +441,0.996195,0.000000,0.000000,0.087156 +442,0.996195,0.000000,0.000000,0.087156 +443,0.996195,0.000000,0.000000,0.087156 +444,0.996195,0.000000,0.000000,0.087156 +445,0.996195,0.000000,0.000000,0.087156 +446,0.996195,0.000000,0.000000,0.087156 +447,0.996195,0.000000,0.000000,0.087156 +448,0.996195,0.000000,0.000000,0.087156 +449,0.996195,0.000000,0.000000,0.087156 +450,0.996195,0.000000,0.000000,0.087156 +451,0.996195,0.000000,0.000000,0.087156 +452,0.996195,0.000000,0.000000,0.087156 +453,0.996195,0.000000,0.000000,0.087156 +454,0.996195,0.000000,0.000000,0.087156 +455,0.996195,0.000000,0.000000,0.087156 +456,0.996195,0.000000,0.000000,0.087156 +457,0.996195,0.000000,0.000000,0.087156 +458,0.996195,0.000000,0.000000,0.087156 +459,0.996195,0.000000,0.000000,0.087156 +460,0.996195,0.000000,0.000000,0.087156 +461,0.996195,0.000000,0.000000,0.087156 +462,0.996195,0.000000,0.000000,0.087156 +463,0.996195,0.000000,0.000000,0.087156 +464,0.996195,0.000000,0.000000,0.087156 +465,0.996195,0.000000,0.000000,0.087156 +466,0.996195,0.000000,0.000000,0.087156 +467,0.996195,0.000000,0.000000,0.087156 +468,0.996195,0.000000,0.000000,0.087156 +469,0.996195,0.000000,0.000000,0.087156 +470,0.996195,0.000000,0.000000,0.087156 +471,0.996195,0.000000,0.000000,0.087156 +472,0.996195,0.000000,0.000000,0.087156 +473,0.996195,0.000000,0.000000,0.087156 +474,0.996195,0.000000,0.000000,0.087156 +475,0.996195,0.000000,0.000000,0.087156 +476,0.996195,0.000000,0.000000,0.087156 +477,0.996195,0.000000,0.000000,0.087156 +478,0.996195,0.000000,0.000000,0.087156 +479,0.996195,0.000000,0.000000,0.087156 +480,0.996195,0.000000,0.000000,0.087156 +481,0.996195,0.000000,0.000000,0.087156 +482,0.996195,0.000000,0.000000,0.087156 +483,0.996195,0.000000,0.000000,0.087156 +484,0.996195,0.000000,0.000000,0.087156 +485,0.996195,0.000000,0.000000,0.087156 +486,0.996195,0.000000,0.000000,0.087156 +487,0.996195,0.000000,0.000000,0.087156 +488,0.996195,0.000000,0.000000,0.087156 +489,0.996195,0.000000,0.000000,0.087156 +490,0.996195,0.000000,0.000000,0.087156 +491,0.996195,0.000000,0.000000,0.087156 +492,0.996195,0.000000,0.000000,0.087156 +493,0.996195,0.000000,0.000000,0.087156 +494,0.996195,0.000000,0.000000,0.087156 +495,0.996195,0.000000,0.000000,0.087156 +496,0.996195,0.000000,0.000000,0.087156 +497,0.996195,0.000000,0.000000,0.087156 +498,0.996195,0.000000,0.000000,0.087156 +499,0.996195,0.000000,0.000000,0.087156 +500,0.996195,0.000000,0.000000,0.087156 +501,0.996195,0.000000,0.000000,0.087156 +502,0.996195,0.000000,0.000000,0.087156 +503,0.996195,0.000000,0.000000,0.087156 +504,0.996195,0.000000,0.000000,0.087156 +505,0.996195,0.000000,0.000000,0.087156 +506,0.996195,0.000000,0.000000,0.087156 +507,0.996195,0.000000,0.000000,0.087156 +508,0.996195,0.000000,0.000000,0.087156 +509,0.996195,0.000000,0.000000,0.087156 +510,0.996195,0.000000,0.000000,0.087156 +511,0.996195,0.000000,0.000000,0.087156 +512,0.996195,0.000000,0.000000,0.087156 +513,0.996195,0.000000,0.000000,0.087156 +514,0.996195,0.000000,0.000000,0.087156 +515,0.996195,0.000000,0.000000,0.087156 +516,0.996195,0.000000,0.000000,0.087156 +517,0.996195,0.000000,0.000000,0.087156 +518,0.996195,0.000000,0.000000,0.087156 +519,0.996195,0.000000,0.000000,0.087156 +520,0.996195,0.000000,0.000000,0.087156 +521,0.996195,0.000000,0.000000,0.087156 +522,0.996195,0.000000,0.000000,0.087156 +523,0.996195,0.000000,0.000000,0.087156 +524,0.996195,0.000000,0.000000,0.087156 +525,0.996195,0.000000,0.000000,0.087156 +526,0.996195,0.000000,0.000000,0.087156 +527,0.996195,0.000000,0.000000,0.087156 +528,0.996195,0.000000,0.000000,0.087156 +529,0.996195,0.000000,0.000000,0.087156 +530,0.996195,0.000000,0.000000,0.087156 +531,0.996195,0.000000,0.000000,0.087156 +532,0.996195,0.000000,0.000000,0.087156 +533,0.996195,0.000000,0.000000,0.087156 +534,0.996195,0.000000,0.000000,0.087156 +535,0.996195,0.000000,0.000000,0.087156 +536,0.996195,0.000000,0.000000,0.087156 +537,0.996195,0.000000,0.000000,0.087156 +538,0.996195,0.000000,0.000000,0.087156 +539,0.996195,0.000000,0.000000,0.087156 +540,0.996195,0.000000,0.000000,0.087156 +541,0.996195,0.000000,0.000000,0.087156 +542,0.996195,0.000000,0.000000,0.087156 +543,0.996195,0.000000,0.000000,0.087156 +544,0.996195,0.000000,0.000000,0.087156 +545,0.996195,0.000000,0.000000,0.087156 +546,0.996195,0.000000,0.000000,0.087156 +547,0.996195,0.000000,0.000000,0.087156 +548,0.996195,0.000000,0.000000,0.087156 +549,0.996195,0.000000,0.000000,0.087156 +550,0.996195,0.000000,0.000000,0.087156 +551,0.996195,0.000000,0.000000,0.087156 +552,0.996195,0.000000,0.000000,0.087156 +553,0.996195,0.000000,0.000000,0.087156 +554,0.996195,0.000000,0.000000,0.087156 +555,0.996195,0.000000,0.000000,0.087156 +556,0.996195,0.000000,0.000000,0.087156 +557,0.996195,0.000000,0.000000,0.087156 +558,0.996195,0.000000,0.000000,0.087156 +559,0.996195,0.000000,0.000000,0.087156 +560,0.996195,0.000000,0.000000,0.087156 +561,0.996195,0.000000,0.000000,0.087156 +562,0.996195,0.000000,0.000000,0.087156 +563,0.996195,0.000000,0.000000,0.087156 +564,0.996195,0.000000,0.000000,0.087156 +565,0.996195,0.000000,0.000000,0.087156 +566,0.996195,0.000000,0.000000,0.087156 +567,0.996195,0.000000,0.000000,0.087156 +568,0.996195,0.000000,0.000000,0.087156 +569,0.996195,0.000000,0.000000,0.087156 +570,0.996195,0.000000,0.000000,0.087156 +571,0.996195,0.000000,0.000000,0.087156 +572,0.996195,0.000000,0.000000,0.087156 +573,0.996195,0.000000,0.000000,0.087156 +574,0.996195,0.000000,0.000000,0.087156 +575,0.996195,0.000000,0.000000,0.087156 +576,0.996195,0.000000,0.000000,0.087156 +577,0.996195,0.000000,0.000000,0.087156 +578,0.996195,0.000000,0.000000,0.087156 +579,0.996195,0.000000,0.000000,0.087156 +580,0.996195,0.000000,0.000000,0.087156 +581,0.996195,0.000000,0.000000,0.087156 +582,0.996195,0.000000,0.000000,0.087156 +583,0.996195,0.000000,0.000000,0.087156 +584,0.996195,0.000000,0.000000,0.087156 +585,0.996195,0.000000,0.000000,0.087156 +586,0.996195,0.000000,0.000000,0.087156 +587,0.996195,0.000000,0.000000,0.087156 +588,0.996195,0.000000,0.000000,0.087156 +589,0.996195,0.000000,0.000000,0.087156 +590,0.996195,0.000000,0.000000,0.087156 +591,0.996195,0.000000,0.000000,0.087156 +592,0.996195,0.000000,0.000000,0.087156 +593,0.996195,0.000000,0.000000,0.087156 +594,0.996195,0.000000,0.000000,0.087156 +595,0.996195,0.000000,0.000000,0.087156 +596,0.996195,0.000000,0.000000,0.087156 +597,0.996195,0.000000,0.000000,0.087156 +598,0.996195,0.000000,0.000000,0.087156 +599,0.996195,0.000000,0.000000,0.087156 +600,0.996195,0.000000,0.000000,0.087156 +601,0.996195,0.000000,0.000000,0.087156 +602,0.996195,0.000000,0.000000,0.087156 +603,0.996195,0.000000,0.000000,0.087156 +604,0.996195,0.000000,0.000000,0.087156 +605,0.996195,0.000000,0.000000,0.087156 +606,0.996195,0.000000,0.000000,0.087156 +607,0.996195,0.000000,0.000000,0.087156 +608,0.996195,0.000000,0.000000,0.087156 +609,0.996195,0.000000,0.000000,0.087156 +610,0.996195,0.000000,0.000000,0.087156 +611,0.996195,0.000000,0.000000,0.087156 +612,0.996195,0.000000,0.000000,0.087156 +613,0.996195,0.000000,0.000000,0.087156 +614,0.996195,0.000000,0.000000,0.087156 +615,0.996195,0.000000,0.000000,0.087156 +616,0.996195,0.000000,0.000000,0.087156 +617,0.996195,0.000000,0.000000,0.087156 +618,0.996195,0.000000,0.000000,0.087156 +619,0.996195,0.000000,0.000000,0.087156 +620,0.996195,0.000000,0.000000,0.087156 +621,0.996195,0.000000,0.000000,0.087156 +622,0.996195,0.000000,0.000000,0.087156 +623,0.996195,0.000000,0.000000,0.087156 +624,0.996195,0.000000,0.000000,0.087156 +625,0.996195,0.000000,0.000000,0.087156 +626,0.996195,0.000000,0.000000,0.087156 +627,0.996195,0.000000,0.000000,0.087156 +628,0.996195,0.000000,0.000000,0.087156 +629,0.996195,0.000000,0.000000,0.087156 +630,0.996195,0.000000,0.000000,0.087156 +631,0.996195,0.000000,0.000000,0.087156 +632,0.996195,0.000000,0.000000,0.087156 +633,0.996195,0.000000,0.000000,0.087156 +634,0.996195,0.000000,0.000000,0.087156 +635,0.996195,0.000000,0.000000,0.087156 +636,0.996195,0.000000,0.000000,0.087156 +637,0.996195,0.000000,0.000000,0.087156 +638,0.996195,0.000000,0.000000,0.087156 +639,0.996195,0.000000,0.000000,0.087156 +640,0.996195,0.000000,0.000000,0.087156 +641,0.996195,0.000000,0.000000,0.087156 +642,0.996195,0.000000,0.000000,0.087156 +643,0.996195,0.000000,0.000000,0.087156 +644,0.996195,0.000000,0.000000,0.087156 +645,0.996195,0.000000,0.000000,0.087156 +646,0.996195,0.000000,0.000000,0.087156 +647,0.996195,0.000000,0.000000,0.087156 +648,0.996195,0.000000,0.000000,0.087156 +649,0.996195,0.000000,0.000000,0.087156 +650,0.996195,0.000000,0.000000,0.087156 +651,0.996195,0.000000,0.000000,0.087156 +652,0.996195,0.000000,0.000000,0.087156 +653,0.996195,0.000000,0.000000,0.087156 +654,0.996195,0.000000,0.000000,0.087156 +655,0.996195,0.000000,0.000000,0.087156 +656,0.996195,0.000000,0.000000,0.087156 +657,0.996195,0.000000,0.000000,0.087156 +658,0.996195,0.000000,0.000000,0.087156 +659,0.996195,0.000000,0.000000,0.087156 +660,0.996195,0.000000,0.000000,0.087156 +661,0.996195,0.000000,0.000000,0.087156 +662,0.996195,0.000000,0.000000,0.087156 +663,0.996195,0.000000,0.000000,0.087156 +664,0.996195,0.000000,0.000000,0.087156 +665,0.996195,0.000000,0.000000,0.087156 +666,0.996195,0.000000,0.000000,0.087156 +667,0.996195,0.000000,0.000000,0.087156 +668,0.996195,0.000000,0.000000,0.087156 +669,0.996195,0.000000,0.000000,0.087156 +670,0.996195,0.000000,0.000000,0.087156 +671,0.996195,0.000000,0.000000,0.087156 +672,0.996195,0.000000,0.000000,0.087156 +673,0.996195,0.000000,0.000000,0.087156 +674,0.996195,0.000000,0.000000,0.087156 +675,0.996195,0.000000,0.000000,0.087156 +676,0.996195,0.000000,0.000000,0.087156 +677,0.996195,0.000000,0.000000,0.087156 +678,0.996195,0.000000,0.000000,0.087156 +679,0.996195,0.000000,0.000000,0.087156 +680,0.996195,0.000000,0.000000,0.087156 +681,0.996195,0.000000,0.000000,0.087156 +682,0.996195,0.000000,0.000000,0.087156 +683,0.996195,0.000000,0.000000,0.087156 +684,0.996195,0.000000,0.000000,0.087156 +685,0.996195,0.000000,0.000000,0.087156 +686,0.996195,0.000000,0.000000,0.087156 +687,0.996195,0.000000,0.000000,0.087156 +688,0.996195,0.000000,0.000000,0.087156 +689,0.996195,0.000000,0.000000,0.087156 +690,0.996195,0.000000,0.000000,0.087156 +691,0.996195,0.000000,0.000000,0.087156 +692,0.996195,0.000000,0.000000,0.087156 +693,0.996195,0.000000,0.000000,0.087156 +694,0.996195,0.000000,0.000000,0.087156 +695,0.996195,0.000000,0.000000,0.087156 +696,0.996195,0.000000,0.000000,0.087156 +697,0.996195,0.000000,0.000000,0.087156 +698,0.996195,0.000000,0.000000,0.087156 +699,0.996195,0.000000,0.000000,0.087156 +700,0.996195,0.000000,0.000000,0.087156 +701,0.996195,0.000000,0.000000,0.087156 +702,0.996195,0.000000,0.000000,0.087156 +703,0.996195,0.000000,0.000000,0.087156 +704,0.996195,0.000000,0.000000,0.087156 +705,0.996195,0.000000,0.000000,0.087156 +706,0.996195,0.000000,0.000000,0.087156 +707,0.996195,0.000000,0.000000,0.087156 +708,0.996195,0.000000,0.000000,0.087156 +709,0.996195,0.000000,0.000000,0.087156 +710,0.996195,0.000000,0.000000,0.087156 +711,0.996195,0.000000,0.000000,0.087156 +712,0.996195,0.000000,0.000000,0.087156 +713,0.996195,0.000000,0.000000,0.087156 +714,0.996195,0.000000,0.000000,0.087156 +715,0.996195,0.000000,0.000000,0.087156 +716,0.996195,0.000000,0.000000,0.087156 +717,0.996195,0.000000,0.000000,0.087156 +718,0.996195,0.000000,0.000000,0.087156 +719,0.996195,0.000000,0.000000,0.087156 +720,0.996195,0.000000,0.000000,0.087156 +721,0.996195,0.000000,0.000000,0.087156 +722,0.996195,0.000000,0.000000,0.087156 +723,0.996195,0.000000,0.000000,0.087156 +724,0.996195,0.000000,0.000000,0.087156 +725,0.996195,0.000000,0.000000,0.087156 +726,0.996195,0.000000,0.000000,0.087156 +727,0.996195,0.000000,0.000000,0.087156 +728,0.996195,0.000000,0.000000,0.087156 +729,0.996195,0.000000,0.000000,0.087156 +730,0.996195,0.000000,0.000000,0.087156 +731,0.996195,0.000000,0.000000,0.087156 +732,0.996195,0.000000,0.000000,0.087156 +733,0.996195,0.000000,0.000000,0.087156 +734,0.996195,0.000000,0.000000,0.087156 +735,0.996195,0.000000,0.000000,0.087156 +736,0.996195,0.000000,0.000000,0.087156 +737,0.996195,0.000000,0.000000,0.087156 +738,0.996195,0.000000,0.000000,0.087156 +739,0.996195,0.000000,0.000000,0.087156 +740,0.996195,0.000000,0.000000,0.087156 +741,0.996195,0.000000,0.000000,0.087156 +742,0.996195,0.000000,0.000000,0.087156 +743,0.996195,0.000000,0.000000,0.087156 +744,0.996195,0.000000,0.000000,0.087156 +745,0.996195,0.000000,0.000000,0.087156 +746,0.996195,0.000000,0.000000,0.087156 +747,0.996195,0.000000,0.000000,0.087156 +748,0.996195,0.000000,0.000000,0.087156 +749,0.996195,0.000000,0.000000,0.087156 +750,0.996195,0.000000,0.000000,0.087156 +751,0.996195,0.000000,0.000000,0.087156 +752,0.996195,0.000000,0.000000,0.087156 +753,0.996195,0.000000,0.000000,0.087156 +754,0.996195,0.000000,0.000000,0.087156 +755,0.996195,0.000000,0.000000,0.087156 +756,0.996195,0.000000,0.000000,0.087156 +757,0.996195,0.000000,0.000000,0.087156 +758,0.996195,0.000000,0.000000,0.087156 +759,0.996195,0.000000,0.000000,0.087156 +760,0.996195,0.000000,0.000000,0.087156 +761,0.996195,0.000000,0.000000,0.087156 +762,0.996195,0.000000,0.000000,0.087156 +763,0.996195,0.000000,0.000000,0.087156 +764,0.996195,0.000000,0.000000,0.087156 +765,0.996195,0.000000,0.000000,0.087156 +766,0.996195,0.000000,0.000000,0.087156 +767,0.996195,0.000000,0.000000,0.087156 +768,0.996195,0.000000,0.000000,0.087156 +769,0.996195,0.000000,0.000000,0.087156 +770,0.996195,0.000000,0.000000,0.087156 +771,0.996195,0.000000,0.000000,0.087156 +772,0.996195,0.000000,0.000000,0.087156 +773,0.996195,0.000000,0.000000,0.087156 +774,0.996195,0.000000,0.000000,0.087156 +775,0.996195,0.000000,0.000000,0.087156 +776,0.996195,0.000000,0.000000,0.087156 +777,0.996195,0.000000,0.000000,0.087156 +778,0.996195,0.000000,0.000000,0.087156 +779,0.996195,0.000000,0.000000,0.087156 +780,0.996195,0.000000,0.000000,0.087156 +781,0.996195,0.000000,0.000000,0.087156 +782,0.996195,0.000000,0.000000,0.087156 +783,0.996195,0.000000,0.000000,0.087156 +784,0.996195,0.000000,0.000000,0.087156 +785,0.996195,0.000000,0.000000,0.087156 +786,0.996195,0.000000,0.000000,0.087156 +787,0.996195,0.000000,0.000000,0.087156 +788,0.996195,0.000000,0.000000,0.087156 +789,0.996195,0.000000,0.000000,0.087156 +790,0.996195,0.000000,0.000000,0.087156 +791,0.996195,0.000000,0.000000,0.087156 +792,0.996195,0.000000,0.000000,0.087156 +793,0.996195,0.000000,0.000000,0.087156 +794,0.996195,0.000000,0.000000,0.087156 +795,0.996195,0.000000,0.000000,0.087156 +796,0.996195,0.000000,0.000000,0.087156 +797,0.996195,0.000000,0.000000,0.087156 +798,0.996195,0.000000,0.000000,0.087156 +799,0.996195,0.000000,0.000000,0.087156 +800,0.996195,0.000000,0.000000,0.087156 +801,0.995989,0.000000,0.000000,0.089474 +802,0.995778,0.000000,0.000000,0.091791 +803,0.995562,0.000000,0.000000,0.094108 +804,0.995340,0.000000,0.000000,0.096425 +805,0.995113,0.000000,0.000000,0.098741 +806,0.994881,0.000000,0.000000,0.101056 +807,0.994643,0.000000,0.000000,0.103371 +808,0.994400,0.000000,0.000000,0.105686 +809,0.994151,0.000000,0.000000,0.107999 +810,0.993897,0.000000,0.000000,0.110313 +811,0.993638,0.000000,0.000000,0.112625 +812,0.993373,0.000000,0.000000,0.114937 +813,0.993103,0.000000,0.000000,0.117249 +814,0.992827,0.000000,0.000000,0.119559 +815,0.992546,0.000000,0.000000,0.121869 +816,0.992260,0.000000,0.000000,0.124179 +817,0.991968,0.000000,0.000000,0.126488 +818,0.991671,0.000000,0.000000,0.128796 +819,0.991369,0.000000,0.000000,0.131103 +820,0.991061,0.000000,0.000000,0.133410 +821,0.990748,0.000000,0.000000,0.135716 +822,0.990429,0.000000,0.000000,0.138021 +823,0.990105,0.000000,0.000000,0.140325 +824,0.989776,0.000000,0.000000,0.142629 +825,0.989442,0.000000,0.000000,0.144932 +826,0.989102,0.000000,0.000000,0.147234 +827,0.988756,0.000000,0.000000,0.149535 +828,0.988406,0.000000,0.000000,0.151836 +829,0.988050,0.000000,0.000000,0.154136 +830,0.987688,0.000000,0.000000,0.156434 +831,0.987322,0.000000,0.000000,0.158732 +832,0.986950,0.000000,0.000000,0.161030 +833,0.986572,0.000000,0.000000,0.163326 +834,0.986189,0.000000,0.000000,0.165621 +835,0.985801,0.000000,0.000000,0.167916 +836,0.985408,0.000000,0.000000,0.170209 +837,0.985009,0.000000,0.000000,0.172502 +838,0.984605,0.000000,0.000000,0.174794 +839,0.984196,0.000000,0.000000,0.177085 +840,0.983781,0.000000,0.000000,0.179375 +841,0.983361,0.000000,0.000000,0.181663 +842,0.982935,0.000000,0.000000,0.183951 +843,0.982505,0.000000,0.000000,0.186238 +844,0.982069,0.000000,0.000000,0.188524 +845,0.981627,0.000000,0.000000,0.190809 +846,0.981180,0.000000,0.000000,0.193093 +847,0.980728,0.000000,0.000000,0.195376 +848,0.980271,0.000000,0.000000,0.197657 +849,0.979809,0.000000,0.000000,0.199938 +850,0.979341,0.000000,0.000000,0.202218 +851,0.978867,0.000000,0.000000,0.204496 +852,0.978389,0.000000,0.000000,0.206773 +853,0.977905,0.000000,0.000000,0.209050 +854,0.977416,0.000000,0.000000,0.211325 +855,0.976921,0.000000,0.000000,0.213599 +856,0.976422,0.000000,0.000000,0.215872 +857,0.975917,0.000000,0.000000,0.218143 +858,0.975406,0.000000,0.000000,0.220414 +859,0.974891,0.000000,0.000000,0.222683 +860,0.974370,0.000000,0.000000,0.224951 +861,0.973844,0.000000,0.000000,0.227218 +862,0.973313,0.000000,0.000000,0.229484 +863,0.972776,0.000000,0.000000,0.231748 +864,0.972234,0.000000,0.000000,0.234011 +865,0.971687,0.000000,0.000000,0.236273 +866,0.971134,0.000000,0.000000,0.238533 +867,0.970577,0.000000,0.000000,0.240793 +868,0.970014,0.000000,0.000000,0.243051 +869,0.969445,0.000000,0.000000,0.245307 +870,0.968872,0.000000,0.000000,0.247563 +871,0.968293,0.000000,0.000000,0.249817 +872,0.967709,0.000000,0.000000,0.252069 +873,0.967120,0.000000,0.000000,0.254321 +874,0.966526,0.000000,0.000000,0.256571 +875,0.965926,0.000000,0.000000,0.258819 +876,0.965321,0.000000,0.000000,0.261066 +877,0.964711,0.000000,0.000000,0.263312 +878,0.964095,0.000000,0.000000,0.265556 +879,0.963475,0.000000,0.000000,0.267799 +880,0.962849,0.000000,0.000000,0.270040 +881,0.962218,0.000000,0.000000,0.272280 +882,0.961582,0.000000,0.000000,0.274519 +883,0.960940,0.000000,0.000000,0.276756 +884,0.960294,0.000000,0.000000,0.278991 +885,0.959642,0.000000,0.000000,0.281225 +886,0.958985,0.000000,0.000000,0.283457 +887,0.958323,0.000000,0.000000,0.285688 +888,0.957655,0.000000,0.000000,0.287918 +889,0.956983,0.000000,0.000000,0.290145 +890,0.956305,0.000000,0.000000,0.292372 +891,0.955622,0.000000,0.000000,0.294596 +892,0.954934,0.000000,0.000000,0.296819 +893,0.954240,0.000000,0.000000,0.299041 +894,0.953542,0.000000,0.000000,0.301261 +895,0.952838,0.000000,0.000000,0.303479 +896,0.952129,0.000000,0.000000,0.305695 +897,0.951415,0.000000,0.000000,0.307910 +898,0.950696,0.000000,0.000000,0.310123 +899,0.949972,0.000000,0.000000,0.312335 +900,0.949243,0.000000,0.000000,0.314545 +901,0.948508,0.000000,0.000000,0.316753 +902,0.947768,0.000000,0.000000,0.318959 +903,0.947024,0.000000,0.000000,0.321164 +904,0.946274,0.000000,0.000000,0.323367 +905,0.945519,0.000000,0.000000,0.325568 +906,0.944758,0.000000,0.000000,0.327768 +907,0.943993,0.000000,0.000000,0.329965 +908,0.943223,0.000000,0.000000,0.332161 +909,0.942447,0.000000,0.000000,0.334355 +910,0.941667,0.000000,0.000000,0.336547 +911,0.940881,0.000000,0.000000,0.338738 +912,0.940090,0.000000,0.000000,0.340927 +913,0.939294,0.000000,0.000000,0.343113 +914,0.938493,0.000000,0.000000,0.345298 +915,0.937687,0.000000,0.000000,0.347481 +916,0.936876,0.000000,0.000000,0.349662 +917,0.936060,0.000000,0.000000,0.351842 +918,0.935238,0.000000,0.000000,0.354019 +919,0.934412,0.000000,0.000000,0.356194 +920,0.933580,0.000000,0.000000,0.358368 +921,0.932744,0.000000,0.000000,0.360540 +922,0.931902,0.000000,0.000000,0.362709 +923,0.931056,0.000000,0.000000,0.364877 +924,0.930204,0.000000,0.000000,0.367042 +925,0.929348,0.000000,0.000000,0.369206 +926,0.928486,0.000000,0.000000,0.371368 +927,0.927619,0.000000,0.000000,0.373528 +928,0.926747,0.000000,0.000000,0.375685 +929,0.925871,0.000000,0.000000,0.377841 +930,0.924989,0.000000,0.000000,0.379994 +931,0.924102,0.000000,0.000000,0.382146 +932,0.923210,0.000000,0.000000,0.384295 +933,0.922313,0.000000,0.000000,0.386443 +934,0.921412,0.000000,0.000000,0.388588 +935,0.920505,0.000000,0.000000,0.390731 +936,0.919593,0.000000,0.000000,0.392872 +937,0.918676,0.000000,0.000000,0.395011 +938,0.917755,0.000000,0.000000,0.397148 +939,0.916828,0.000000,0.000000,0.399283 +940,0.915896,0.000000,0.000000,0.401415 +941,0.914960,0.000000,0.000000,0.403545 +942,0.914018,0.000000,0.000000,0.405673 +943,0.913072,0.000000,0.000000,0.407799 +944,0.912120,0.000000,0.000000,0.409923 +945,0.911164,0.000000,0.000000,0.412045 +946,0.910202,0.000000,0.000000,0.414164 +947,0.909236,0.000000,0.000000,0.416281 +948,0.908265,0.000000,0.000000,0.418396 +949,0.907289,0.000000,0.000000,0.420508 +950,0.906308,0.000000,0.000000,0.422618 +951,0.905322,0.000000,0.000000,0.424726 +952,0.904331,0.000000,0.000000,0.426832 +953,0.903335,0.000000,0.000000,0.428935 +954,0.902335,0.000000,0.000000,0.431036 +955,0.901329,0.000000,0.000000,0.433135 +956,0.900319,0.000000,0.000000,0.435231 +957,0.899304,0.000000,0.000000,0.437325 +958,0.898283,0.000000,0.000000,0.439417 +959,0.897258,0.000000,0.000000,0.441506 +960,0.896229,0.000000,0.000000,0.443593 +961,0.895194,0.000000,0.000000,0.445677 +962,0.894154,0.000000,0.000000,0.447759 +963,0.893110,0.000000,0.000000,0.449839 +964,0.892061,0.000000,0.000000,0.451916 +965,0.891007,0.000000,0.000000,0.453990 +966,0.889948,0.000000,0.000000,0.456063 +967,0.888884,0.000000,0.000000,0.458132 +968,0.887815,0.000000,0.000000,0.460200 +969,0.886742,0.000000,0.000000,0.462265 +970,0.885664,0.000000,0.000000,0.464327 +971,0.884581,0.000000,0.000000,0.466387 +972,0.883493,0.000000,0.000000,0.468444 +973,0.882401,0.000000,0.000000,0.470499 +974,0.881303,0.000000,0.000000,0.472551 +975,0.880201,0.000000,0.000000,0.474600 +976,0.879095,0.000000,0.000000,0.476647 +977,0.877983,0.000000,0.000000,0.478692 +978,0.876867,0.000000,0.000000,0.480734 +979,0.875746,0.000000,0.000000,0.482773 +980,0.874620,0.000000,0.000000,0.484810 +981,0.873489,0.000000,0.000000,0.486844 +982,0.872354,0.000000,0.000000,0.488875 +983,0.871214,0.000000,0.000000,0.490904 +984,0.870069,0.000000,0.000000,0.492930 +985,0.868920,0.000000,0.000000,0.494953 +986,0.867765,0.000000,0.000000,0.496974 +987,0.866607,0.000000,0.000000,0.498992 +988,0.865443,0.000000,0.000000,0.501007 +989,0.864275,0.000000,0.000000,0.503020 +990,0.863102,0.000000,0.000000,0.505030 +991,0.861924,0.000000,0.000000,0.507037 +992,0.860742,0.000000,0.000000,0.509041 +993,0.859555,0.000000,0.000000,0.511043 +994,0.858364,0.000000,0.000000,0.513042 +995,0.857167,0.000000,0.000000,0.515038 +996,0.855966,0.000000,0.000000,0.517031 +997,0.854761,0.000000,0.000000,0.519022 +998,0.853551,0.000000,0.000000,0.521010 +999,0.852336,0.000000,0.000000,0.522995 +1000,0.851117,0.000000,0.000000,0.524977 +1001,0.849893,0.000000,0.000000,0.526956 +1002,0.848664,0.000000,0.000000,0.528932 +1003,0.847431,0.000000,0.000000,0.530906 +1004,0.846193,0.000000,0.000000,0.532876 +1005,0.844951,0.000000,0.000000,0.534844 +1006,0.843704,0.000000,0.000000,0.536809 +1007,0.842452,0.000000,0.000000,0.538771 +1008,0.841196,0.000000,0.000000,0.540730 +1009,0.839936,0.000000,0.000000,0.542686 +1010,0.838671,0.000000,0.000000,0.544639 +1011,0.837401,0.000000,0.000000,0.546589 +1012,0.836127,0.000000,0.000000,0.548536 +1013,0.834848,0.000000,0.000000,0.550481 +1014,0.833565,0.000000,0.000000,0.552422 +1015,0.832277,0.000000,0.000000,0.554360 +1016,0.830984,0.000000,0.000000,0.556296 +1017,0.829688,0.000000,0.000000,0.558228 +1018,0.828386,0.000000,0.000000,0.560157 +1019,0.827081,0.000000,0.000000,0.562083 +1020,0.825770,0.000000,0.000000,0.564007 +1021,0.824456,0.000000,0.000000,0.565927 +1022,0.823136,0.000000,0.000000,0.567844 +1023,0.821813,0.000000,0.000000,0.569758 +1024,0.820485,0.000000,0.000000,0.571669 +1025,0.819152,0.000000,0.000000,0.573576 +1026,0.817815,0.000000,0.000000,0.575481 +1027,0.816474,0.000000,0.000000,0.577383 +1028,0.815128,0.000000,0.000000,0.579281 +1029,0.813778,0.000000,0.000000,0.581176 +1030,0.812423,0.000000,0.000000,0.583069 +1031,0.811064,0.000000,0.000000,0.584958 +1032,0.809700,0.000000,0.000000,0.586844 +1033,0.808333,0.000000,0.000000,0.588726 +1034,0.806960,0.000000,0.000000,0.590606 +1035,0.805584,0.000000,0.000000,0.592482 +1036,0.804203,0.000000,0.000000,0.594355 +1037,0.802817,0.000000,0.000000,0.596225 +1038,0.801428,0.000000,0.000000,0.598092 +1039,0.800034,0.000000,0.000000,0.599955 +1040,0.798636,0.000000,0.000000,0.601815 +1041,0.797233,0.000000,0.000000,0.603672 +1042,0.795826,0.000000,0.000000,0.605526 +1043,0.794415,0.000000,0.000000,0.607376 +1044,0.792999,0.000000,0.000000,0.609223 +1045,0.791579,0.000000,0.000000,0.611067 +1046,0.790155,0.000000,0.000000,0.612907 +1047,0.788727,0.000000,0.000000,0.614744 +1048,0.787294,0.000000,0.000000,0.616578 +1049,0.785857,0.000000,0.000000,0.618408 +1050,0.784416,0.000000,0.000000,0.620235 +1051,0.782970,0.000000,0.000000,0.622059 +1052,0.781520,0.000000,0.000000,0.623880 +1053,0.780067,0.000000,0.000000,0.625697 +1054,0.778608,0.000000,0.000000,0.627510 +1055,0.777146,0.000000,0.000000,0.629320 +1056,0.775679,0.000000,0.000000,0.631127 +1057,0.774209,0.000000,0.000000,0.632931 +1058,0.772734,0.000000,0.000000,0.634731 +1059,0.771254,0.000000,0.000000,0.636527 +1060,0.769771,0.000000,0.000000,0.638320 +1061,0.768284,0.000000,0.000000,0.640110 +1062,0.766792,0.000000,0.000000,0.641896 +1063,0.765296,0.000000,0.000000,0.643679 +1064,0.763796,0.000000,0.000000,0.645458 +1065,0.762292,0.000000,0.000000,0.647233 +1066,0.760784,0.000000,0.000000,0.649006 +1067,0.759271,0.000000,0.000000,0.650774 +1068,0.757755,0.000000,0.000000,0.652539 +1069,0.756234,0.000000,0.000000,0.654301 +1070,0.754710,0.000000,0.000000,0.656059 +1071,0.753181,0.000000,0.000000,0.657814 +1072,0.751648,0.000000,0.000000,0.659564 +1073,0.750111,0.000000,0.000000,0.661312 +1074,0.748570,0.000000,0.000000,0.663056 +1075,0.747025,0.000000,0.000000,0.664796 +1076,0.745476,0.000000,0.000000,0.666532 +1077,0.743923,0.000000,0.000000,0.668265 +1078,0.742366,0.000000,0.000000,0.669995 +1079,0.740805,0.000000,0.000000,0.671721 +1080,0.739239,0.000000,0.000000,0.673443 +1081,0.737670,0.000000,0.000000,0.675161 +1082,0.736097,0.000000,0.000000,0.676876 +1083,0.734520,0.000000,0.000000,0.678587 +1084,0.732939,0.000000,0.000000,0.680295 +1085,0.731354,0.000000,0.000000,0.681998 +1086,0.729765,0.000000,0.000000,0.683698 +1087,0.728172,0.000000,0.000000,0.685395 +1088,0.726575,0.000000,0.000000,0.687088 +1089,0.724974,0.000000,0.000000,0.688776 +1090,0.723369,0.000000,0.000000,0.690462 +1091,0.721760,0.000000,0.000000,0.692143 +1092,0.720148,0.000000,0.000000,0.693821 +1093,0.718531,0.000000,0.000000,0.695495 +1094,0.716911,0.000000,0.000000,0.697165 +1095,0.715286,0.000000,0.000000,0.698832 +1096,0.713658,0.000000,0.000000,0.700494 +1097,0.712026,0.000000,0.000000,0.702153 +1098,0.710390,0.000000,0.000000,0.703808 +1099,0.708750,0.000000,0.000000,0.705459 +1100,0.707107,0.000000,0.000000,0.707107 +1101,0.707107,0.000000,0.000000,0.707107 +1102,0.707107,0.000000,0.000000,0.707107 +1103,0.707107,0.000000,0.000000,0.707107 +1104,0.707107,0.000000,0.000000,0.707107 +1105,0.707107,0.000000,0.000000,0.707107 +1106,0.707107,0.000000,0.000000,0.707107 +1107,0.707107,0.000000,0.000000,0.707107 +1108,0.707107,0.000000,0.000000,0.707107 +1109,0.707107,0.000000,0.000000,0.707107 +1110,0.707107,0.000000,0.000000,0.707107 +1111,0.707107,0.000000,0.000000,0.707107 +1112,0.707107,0.000000,0.000000,0.707107 +1113,0.707107,0.000000,0.000000,0.707107 +1114,0.707107,0.000000,0.000000,0.707107 +1115,0.707107,0.000000,0.000000,0.707107 +1116,0.707107,0.000000,0.000000,0.707107 +1117,0.707107,0.000000,0.000000,0.707107 +1118,0.707107,0.000000,0.000000,0.707107 +1119,0.707107,0.000000,0.000000,0.707107 +1120,0.707107,0.000000,0.000000,0.707107 +1121,0.707107,0.000000,0.000000,0.707107 +1122,0.707107,0.000000,0.000000,0.707107 +1123,0.707107,0.000000,0.000000,0.707107 +1124,0.707107,0.000000,0.000000,0.707107 +1125,0.707107,0.000000,0.000000,0.707107 +1126,0.707107,0.000000,0.000000,0.707107 +1127,0.707107,0.000000,0.000000,0.707107 +1128,0.707107,0.000000,0.000000,0.707107 +1129,0.707107,0.000000,0.000000,0.707107 +1130,0.707107,0.000000,0.000000,0.707107 +1131,0.707107,0.000000,0.000000,0.707107 +1132,0.707107,0.000000,0.000000,0.707107 +1133,0.707107,0.000000,0.000000,0.707107 +1134,0.707107,0.000000,0.000000,0.707107 +1135,0.707107,0.000000,0.000000,0.707107 +1136,0.707107,0.000000,0.000000,0.707107 +1137,0.707107,0.000000,0.000000,0.707107 +1138,0.707107,0.000000,0.000000,0.707107 +1139,0.707107,0.000000,0.000000,0.707107 +1140,0.707107,0.000000,0.000000,0.707107 +1141,0.707107,0.000000,0.000000,0.707107 +1142,0.707107,0.000000,0.000000,0.707107 +1143,0.707107,0.000000,0.000000,0.707107 +1144,0.707107,0.000000,0.000000,0.707107 +1145,0.707107,0.000000,0.000000,0.707107 +1146,0.707107,0.000000,0.000000,0.707107 +1147,0.707107,0.000000,0.000000,0.707107 +1148,0.707107,0.000000,0.000000,0.707107 +1149,0.707107,0.000000,0.000000,0.707107 +1150,0.707107,0.000000,0.000000,0.707107 +1151,0.707107,0.000000,0.000000,0.707107 +1152,0.707107,0.000000,0.000000,0.707107 +1153,0.707107,0.000000,0.000000,0.707107 +1154,0.707107,0.000000,0.000000,0.707107 +1155,0.707107,0.000000,0.000000,0.707107 +1156,0.707107,0.000000,0.000000,0.707107 +1157,0.707107,0.000000,0.000000,0.707107 +1158,0.707107,0.000000,0.000000,0.707107 +1159,0.707107,0.000000,0.000000,0.707107 +1160,0.707107,0.000000,0.000000,0.707107 +1161,0.707107,0.000000,0.000000,0.707107 +1162,0.707107,0.000000,0.000000,0.707107 +1163,0.707107,0.000000,0.000000,0.707107 +1164,0.707107,0.000000,0.000000,0.707107 +1165,0.707107,0.000000,0.000000,0.707107 +1166,0.707107,0.000000,0.000000,0.707107 +1167,0.707107,0.000000,0.000000,0.707107 +1168,0.707107,0.000000,0.000000,0.707107 +1169,0.707107,0.000000,0.000000,0.707107 +1170,0.707107,0.000000,0.000000,0.707107 +1171,0.707107,0.000000,0.000000,0.707107 +1172,0.707107,0.000000,0.000000,0.707107 +1173,0.707107,0.000000,0.000000,0.707107 +1174,0.707107,0.000000,0.000000,0.707107 +1175,0.707107,0.000000,0.000000,0.707107 +1176,0.707107,0.000000,0.000000,0.707107 +1177,0.707107,0.000000,0.000000,0.707107 +1178,0.707107,0.000000,0.000000,0.707107 +1179,0.707107,0.000000,0.000000,0.707107 +1180,0.707107,0.000000,0.000000,0.707107 +1181,0.707107,0.000000,0.000000,0.707107 +1182,0.707107,0.000000,0.000000,0.707107 +1183,0.707107,0.000000,0.000000,0.707107 +1184,0.707107,0.000000,0.000000,0.707107 +1185,0.707107,0.000000,0.000000,0.707107 +1186,0.707107,0.000000,0.000000,0.707107 +1187,0.707107,0.000000,0.000000,0.707107 +1188,0.707107,0.000000,0.000000,0.707107 +1189,0.707107,0.000000,0.000000,0.707107 +1190,0.707107,0.000000,0.000000,0.707107 +1191,0.707107,0.000000,0.000000,0.707107 +1192,0.707107,0.000000,0.000000,0.707107 +1193,0.707107,0.000000,0.000000,0.707107 +1194,0.707107,0.000000,0.000000,0.707107 +1195,0.707107,0.000000,0.000000,0.707107 +1196,0.707107,0.000000,0.000000,0.707107 +1197,0.707107,0.000000,0.000000,0.707107 +1198,0.707107,0.000000,0.000000,0.707107 +1199,0.707107,0.000000,0.000000,0.707107 +1200,0.707107,0.000000,0.000000,0.707107 +1201,0.707107,0.000000,0.000000,0.707107 +1202,0.707107,0.000000,0.000000,0.707107 +1203,0.707107,0.000000,0.000000,0.707107 +1204,0.707107,0.000000,0.000000,0.707107 +1205,0.707107,0.000000,0.000000,0.707107 +1206,0.707107,0.000000,0.000000,0.707107 +1207,0.707107,0.000000,0.000000,0.707107 +1208,0.707107,0.000000,0.000000,0.707107 +1209,0.707107,0.000000,0.000000,0.707107 +1210,0.707107,0.000000,0.000000,0.707107 +1211,0.707107,0.000000,0.000000,0.707107 +1212,0.707107,0.000000,0.000000,0.707107 +1213,0.707107,0.000000,0.000000,0.707107 +1214,0.707107,0.000000,0.000000,0.707107 +1215,0.707107,0.000000,0.000000,0.707107 +1216,0.707107,0.000000,0.000000,0.707107 +1217,0.707107,0.000000,0.000000,0.707107 +1218,0.707107,0.000000,0.000000,0.707107 +1219,0.707107,0.000000,0.000000,0.707107 +1220,0.707107,0.000000,0.000000,0.707107 +1221,0.707107,0.000000,0.000000,0.707107 +1222,0.707107,0.000000,0.000000,0.707107 +1223,0.707107,0.000000,0.000000,0.707107 +1224,0.707107,0.000000,0.000000,0.707107 +1225,0.707107,0.000000,0.000000,0.707107 +1226,0.707107,0.000000,0.000000,0.707107 +1227,0.707107,0.000000,0.000000,0.707107 +1228,0.707107,0.000000,0.000000,0.707107 +1229,0.707107,0.000000,0.000000,0.707107 +1230,0.707107,0.000000,0.000000,0.707107 +1231,0.707107,0.000000,0.000000,0.707107 +1232,0.707107,0.000000,0.000000,0.707107 +1233,0.707107,0.000000,0.000000,0.707107 +1234,0.707107,0.000000,0.000000,0.707107 +1235,0.707107,0.000000,0.000000,0.707107 +1236,0.707107,0.000000,0.000000,0.707107 +1237,0.707107,0.000000,0.000000,0.707107 +1238,0.707107,0.000000,0.000000,0.707107 +1239,0.707107,0.000000,0.000000,0.707107 +1240,0.707107,0.000000,0.000000,0.707107 +1241,0.707107,0.000000,0.000000,0.707107 +1242,0.707107,0.000000,0.000000,0.707107 +1243,0.707107,0.000000,0.000000,0.707107 +1244,0.707107,0.000000,0.000000,0.707107 +1245,0.707107,0.000000,0.000000,0.707107 +1246,0.707107,0.000000,0.000000,0.707107 +1247,0.707107,0.000000,0.000000,0.707107 +1248,0.707107,0.000000,0.000000,0.707107 +1249,0.707107,0.000000,0.000000,0.707107 +1250,0.707107,0.000000,0.000000,0.707107 +1251,0.707107,0.000000,0.000000,0.707107 +1252,0.707107,0.000000,0.000000,0.707107 +1253,0.707107,0.000000,0.000000,0.707107 +1254,0.707107,0.000000,0.000000,0.707107 +1255,0.707107,0.000000,0.000000,0.707107 +1256,0.707107,0.000000,0.000000,0.707107 +1257,0.707107,0.000000,0.000000,0.707107 +1258,0.707107,0.000000,0.000000,0.707107 +1259,0.707107,0.000000,0.000000,0.707107 +1260,0.707107,0.000000,0.000000,0.707107 +1261,0.707107,0.000000,0.000000,0.707107 +1262,0.707107,0.000000,0.000000,0.707107 +1263,0.707107,0.000000,0.000000,0.707107 +1264,0.707107,0.000000,0.000000,0.707107 +1265,0.707107,0.000000,0.000000,0.707107 +1266,0.707107,0.000000,0.000000,0.707107 +1267,0.707107,0.000000,0.000000,0.707107 +1268,0.707107,0.000000,0.000000,0.707107 +1269,0.707107,0.000000,0.000000,0.707107 +1270,0.707107,0.000000,0.000000,0.707107 +1271,0.707107,0.000000,0.000000,0.707107 +1272,0.707107,0.000000,0.000000,0.707107 +1273,0.707107,0.000000,0.000000,0.707107 +1274,0.707107,0.000000,0.000000,0.707107 +1275,0.707107,0.000000,0.000000,0.707107 +1276,0.707107,0.000000,0.000000,0.707107 +1277,0.707107,0.000000,0.000000,0.707107 +1278,0.707107,0.000000,0.000000,0.707107 +1279,0.707107,0.000000,0.000000,0.707107 +1280,0.707107,0.000000,0.000000,0.707107 +1281,0.707107,0.000000,0.000000,0.707107 +1282,0.707107,0.000000,0.000000,0.707107 +1283,0.707107,0.000000,0.000000,0.707107 +1284,0.707107,0.000000,0.000000,0.707107 +1285,0.707107,0.000000,0.000000,0.707107 +1286,0.707107,0.000000,0.000000,0.707107 +1287,0.707107,0.000000,0.000000,0.707107 +1288,0.707107,0.000000,0.000000,0.707107 +1289,0.707107,0.000000,0.000000,0.707107 +1290,0.707107,0.000000,0.000000,0.707107 +1291,0.707107,0.000000,0.000000,0.707107 +1292,0.707107,0.000000,0.000000,0.707107 +1293,0.707107,0.000000,0.000000,0.707107 +1294,0.707107,0.000000,0.000000,0.707107 +1295,0.707107,0.000000,0.000000,0.707107 +1296,0.707107,0.000000,0.000000,0.707107 +1297,0.707107,0.000000,0.000000,0.707107 +1298,0.707107,0.000000,0.000000,0.707107 +1299,0.707107,0.000000,0.000000,0.707107 +1300,0.707107,0.000000,0.000000,0.707107 +1301,0.707107,0.000000,0.000000,0.707107 +1302,0.707107,0.000000,0.000000,0.707107 +1303,0.707107,0.000000,0.000000,0.707107 +1304,0.707107,0.000000,0.000000,0.707107 +1305,0.707107,0.000000,0.000000,0.707107 +1306,0.707107,0.000000,0.000000,0.707107 +1307,0.707107,0.000000,0.000000,0.707107 +1308,0.707107,0.000000,0.000000,0.707107 +1309,0.707107,0.000000,0.000000,0.707107 +1310,0.707107,0.000000,0.000000,0.707107 +1311,0.707107,0.000000,0.000000,0.707107 +1312,0.707107,0.000000,0.000000,0.707107 +1313,0.707107,0.000000,0.000000,0.707107 +1314,0.707107,0.000000,0.000000,0.707107 +1315,0.707107,0.000000,0.000000,0.707107 +1316,0.707107,0.000000,0.000000,0.707107 +1317,0.707107,0.000000,0.000000,0.707107 +1318,0.707107,0.000000,0.000000,0.707107 +1319,0.707107,0.000000,0.000000,0.707107 +1320,0.707107,0.000000,0.000000,0.707107 +1321,0.707107,0.000000,0.000000,0.707107 +1322,0.707107,0.000000,0.000000,0.707107 +1323,0.707107,0.000000,0.000000,0.707107 +1324,0.707107,0.000000,0.000000,0.707107 +1325,0.707107,0.000000,0.000000,0.707107 +1326,0.707107,0.000000,0.000000,0.707107 +1327,0.707107,0.000000,0.000000,0.707107 +1328,0.707107,0.000000,0.000000,0.707107 +1329,0.707107,0.000000,0.000000,0.707107 +1330,0.707107,0.000000,0.000000,0.707107 +1331,0.707107,0.000000,0.000000,0.707107 +1332,0.707107,0.000000,0.000000,0.707107 +1333,0.707107,0.000000,0.000000,0.707107 +1334,0.707107,0.000000,0.000000,0.707107 +1335,0.707107,0.000000,0.000000,0.707107 +1336,0.707107,0.000000,0.000000,0.707107 +1337,0.707107,0.000000,0.000000,0.707107 +1338,0.707107,0.000000,0.000000,0.707107 +1339,0.707107,0.000000,0.000000,0.707107 +1340,0.707107,0.000000,0.000000,0.707107 +1341,0.707107,0.000000,0.000000,0.707107 +1342,0.707107,0.000000,0.000000,0.707107 +1343,0.707107,0.000000,0.000000,0.707107 +1344,0.707107,0.000000,0.000000,0.707107 +1345,0.707107,0.000000,0.000000,0.707107 +1346,0.707107,0.000000,0.000000,0.707107 +1347,0.707107,0.000000,0.000000,0.707107 +1348,0.707107,0.000000,0.000000,0.707107 +1349,0.707107,0.000000,0.000000,0.707107 +1350,0.707107,0.000000,0.000000,0.707107 +1351,0.707107,0.000000,0.000000,0.707107 +1352,0.707107,0.000000,0.000000,0.707107 +1353,0.707107,0.000000,0.000000,0.707107 +1354,0.707107,0.000000,0.000000,0.707107 +1355,0.707107,0.000000,0.000000,0.707107 +1356,0.707107,0.000000,0.000000,0.707107 +1357,0.707107,0.000000,0.000000,0.707107 +1358,0.707107,0.000000,0.000000,0.707107 +1359,0.707107,0.000000,0.000000,0.707107 +1360,0.707107,0.000000,0.000000,0.707107 +1361,0.707107,0.000000,0.000000,0.707107 +1362,0.707107,0.000000,0.000000,0.707107 +1363,0.707107,0.000000,0.000000,0.707107 +1364,0.707107,0.000000,0.000000,0.707107 +1365,0.707107,0.000000,0.000000,0.707107 +1366,0.707107,0.000000,0.000000,0.707107 +1367,0.707107,0.000000,0.000000,0.707107 +1368,0.707107,0.000000,0.000000,0.707107 +1369,0.707107,0.000000,0.000000,0.707107 +1370,0.707107,0.000000,0.000000,0.707107 +1371,0.707107,0.000000,0.000000,0.707107 +1372,0.707107,0.000000,0.000000,0.707107 +1373,0.707107,0.000000,0.000000,0.707107 +1374,0.707107,0.000000,0.000000,0.707107 +1375,0.707107,0.000000,0.000000,0.707107 +1376,0.707107,0.000000,0.000000,0.707107 +1377,0.707107,0.000000,0.000000,0.707107 +1378,0.707107,0.000000,0.000000,0.707107 +1379,0.707107,0.000000,0.000000,0.707107 +1380,0.707107,0.000000,0.000000,0.707107 +1381,0.707107,0.000000,0.000000,0.707107 +1382,0.707107,0.000000,0.000000,0.707107 +1383,0.707107,0.000000,0.000000,0.707107 +1384,0.707107,0.000000,0.000000,0.707107 +1385,0.707107,0.000000,0.000000,0.707107 +1386,0.707107,0.000000,0.000000,0.707107 +1387,0.707107,0.000000,0.000000,0.707107 +1388,0.707107,0.000000,0.000000,0.707107 +1389,0.707107,0.000000,0.000000,0.707107 +1390,0.707107,0.000000,0.000000,0.707107 +1391,0.707107,0.000000,0.000000,0.707107 +1392,0.707107,0.000000,0.000000,0.707107 +1393,0.707107,0.000000,0.000000,0.707107 +1394,0.707107,0.000000,0.000000,0.707107 +1395,0.707107,0.000000,0.000000,0.707107 +1396,0.707107,0.000000,0.000000,0.707107 +1397,0.707107,0.000000,0.000000,0.707107 +1398,0.707107,0.000000,0.000000,0.707107 +1399,0.707107,0.000000,0.000000,0.707107 +1400,0.707107,0.000000,0.000000,0.707107 +1401,0.707107,0.000000,0.000000,0.707107 +1402,0.707107,0.000000,0.000000,0.707107 +1403,0.707107,0.000000,0.000000,0.707107 +1404,0.707107,0.000000,0.000000,0.707107 +1405,0.707107,0.000000,0.000000,0.707107 +1406,0.707107,0.000000,0.000000,0.707107 +1407,0.707107,0.000000,0.000000,0.707107 +1408,0.707107,0.000000,0.000000,0.707107 +1409,0.707107,0.000000,0.000000,0.707107 +1410,0.707107,0.000000,0.000000,0.707107 +1411,0.707107,0.000000,0.000000,0.707107 +1412,0.707107,0.000000,0.000000,0.707107 +1413,0.707107,0.000000,0.000000,0.707107 +1414,0.707107,0.000000,0.000000,0.707107 +1415,0.707107,0.000000,0.000000,0.707107 +1416,0.707107,0.000000,0.000000,0.707107 +1417,0.707107,0.000000,0.000000,0.707107 +1418,0.707107,0.000000,0.000000,0.707107 +1419,0.707107,0.000000,0.000000,0.707107 +1420,0.707107,0.000000,0.000000,0.707107 +1421,0.707107,0.000000,0.000000,0.707107 +1422,0.707107,0.000000,0.000000,0.707107 +1423,0.707107,0.000000,0.000000,0.707107 +1424,0.707107,0.000000,0.000000,0.707107 +1425,0.707107,0.000000,0.000000,0.707107 +1426,0.707107,0.000000,0.000000,0.707107 +1427,0.707107,0.000000,0.000000,0.707107 +1428,0.707107,0.000000,0.000000,0.707107 +1429,0.707107,0.000000,0.000000,0.707107 +1430,0.707107,0.000000,0.000000,0.707107 +1431,0.707107,0.000000,0.000000,0.707107 +1432,0.707107,0.000000,0.000000,0.707107 +1433,0.707107,0.000000,0.000000,0.707107 +1434,0.707107,0.000000,0.000000,0.707107 +1435,0.707107,0.000000,0.000000,0.707107 +1436,0.707107,0.000000,0.000000,0.707107 +1437,0.707107,0.000000,0.000000,0.707107 +1438,0.707107,0.000000,0.000000,0.707107 +1439,0.707107,0.000000,0.000000,0.707107 +1440,0.707107,0.000000,0.000000,0.707107 +1441,0.707107,0.000000,0.000000,0.707107 +1442,0.707107,0.000000,0.000000,0.707107 +1443,0.707107,0.000000,0.000000,0.707107 +1444,0.707107,0.000000,0.000000,0.707107 +1445,0.707107,0.000000,0.000000,0.707107 +1446,0.707107,0.000000,0.000000,0.707107 +1447,0.707107,0.000000,0.000000,0.707107 +1448,0.707107,0.000000,0.000000,0.707107 +1449,0.707107,0.000000,0.000000,0.707107 +1450,0.707107,0.000000,0.000000,0.707107 +1451,0.707107,0.000000,0.000000,0.707107 +1452,0.707107,0.000000,0.000000,0.707107 +1453,0.707107,0.000000,0.000000,0.707107 +1454,0.707107,0.000000,0.000000,0.707107 +1455,0.707107,0.000000,0.000000,0.707107 +1456,0.707107,0.000000,0.000000,0.707107 +1457,0.707107,0.000000,0.000000,0.707107 +1458,0.707107,0.000000,0.000000,0.707107 +1459,0.707107,0.000000,0.000000,0.707107 +1460,0.707107,0.000000,0.000000,0.707107 +1461,0.707107,0.000000,0.000000,0.707107 +1462,0.707107,0.000000,0.000000,0.707107 +1463,0.707107,0.000000,0.000000,0.707107 +1464,0.707107,0.000000,0.000000,0.707107 +1465,0.707107,0.000000,0.000000,0.707107 +1466,0.707107,0.000000,0.000000,0.707107 +1467,0.707107,0.000000,0.000000,0.707107 +1468,0.707107,0.000000,0.000000,0.707107 +1469,0.707107,0.000000,0.000000,0.707107 +1470,0.707107,0.000000,0.000000,0.707107 +1471,0.707107,0.000000,0.000000,0.707107 +1472,0.707107,0.000000,0.000000,0.707107 +1473,0.707107,0.000000,0.000000,0.707107 +1474,0.707107,0.000000,0.000000,0.707107 +1475,0.707107,0.000000,0.000000,0.707107 +1476,0.707107,0.000000,0.000000,0.707107 +1477,0.707107,0.000000,0.000000,0.707107 +1478,0.707107,0.000000,0.000000,0.707107 +1479,0.707107,0.000000,0.000000,0.707107 +1480,0.707107,0.000000,0.000000,0.707107 +1481,0.707107,0.000000,0.000000,0.707107 +1482,0.707107,0.000000,0.000000,0.707107 +1483,0.707107,0.000000,0.000000,0.707107 +1484,0.707107,0.000000,0.000000,0.707107 +1485,0.707107,0.000000,0.000000,0.707107 +1486,0.707107,0.000000,0.000000,0.707107 +1487,0.707107,0.000000,0.000000,0.707107 +1488,0.707107,0.000000,0.000000,0.707107 +1489,0.707107,0.000000,0.000000,0.707107 +1490,0.707107,0.000000,0.000000,0.707107 +1491,0.707107,0.000000,0.000000,0.707107 +1492,0.707107,0.000000,0.000000,0.707107 +1493,0.707107,0.000000,0.000000,0.707107 +1494,0.707107,0.000000,0.000000,0.707107 +1495,0.707107,0.000000,0.000000,0.707107 +1496,0.707107,0.000000,0.000000,0.707107 +1497,0.707107,0.000000,0.000000,0.707107 +1498,0.707107,0.000000,0.000000,0.707107 +1499,0.707107,0.000000,0.000000,0.707107 +1500,0.707107,0.000000,0.000000,0.707107 +1501,0.707107,0.000000,0.000000,0.707107 +1502,0.707107,0.000000,0.000000,0.707107 +1503,0.707107,0.000000,0.000000,0.707107 +1504,0.707107,0.000000,0.000000,0.707107 +1505,0.707107,0.000000,0.000000,0.707107 +1506,0.707107,0.000000,0.000000,0.707107 +1507,0.707107,0.000000,0.000000,0.707107 +1508,0.707107,0.000000,0.000000,0.707107 +1509,0.707107,0.000000,0.000000,0.707107 +1510,0.707107,0.000000,0.000000,0.707107 +1511,0.707107,0.000000,0.000000,0.707107 +1512,0.707107,0.000000,0.000000,0.707107 +1513,0.707107,0.000000,0.000000,0.707107 +1514,0.707107,0.000000,0.000000,0.707107 +1515,0.707107,0.000000,0.000000,0.707107 +1516,0.707107,0.000000,0.000000,0.707107 +1517,0.707107,0.000000,0.000000,0.707107 +1518,0.707107,0.000000,0.000000,0.707107 +1519,0.707107,0.000000,0.000000,0.707107 +1520,0.707107,0.000000,0.000000,0.707107 +1521,0.707107,0.000000,0.000000,0.707107 +1522,0.707107,0.000000,0.000000,0.707107 +1523,0.707107,0.000000,0.000000,0.707107 +1524,0.707107,0.000000,0.000000,0.707107 +1525,0.707107,0.000000,0.000000,0.707107 +1526,0.707107,0.000000,0.000000,0.707107 +1527,0.707107,0.000000,0.000000,0.707107 +1528,0.707107,0.000000,0.000000,0.707107 +1529,0.707107,0.000000,0.000000,0.707107 +1530,0.707107,0.000000,0.000000,0.707107 +1531,0.707107,0.000000,0.000000,0.707107 +1532,0.707107,0.000000,0.000000,0.707107 +1533,0.707107,0.000000,0.000000,0.707107 +1534,0.707107,0.000000,0.000000,0.707107 +1535,0.707107,0.000000,0.000000,0.707107 +1536,0.707107,0.000000,0.000000,0.707107 +1537,0.707107,0.000000,0.000000,0.707107 +1538,0.707107,0.000000,0.000000,0.707107 +1539,0.707107,0.000000,0.000000,0.707107 +1540,0.707107,0.000000,0.000000,0.707107 +1541,0.707107,0.000000,0.000000,0.707107 +1542,0.707107,0.000000,0.000000,0.707107 +1543,0.707107,0.000000,0.000000,0.707107 +1544,0.707107,0.000000,0.000000,0.707107 +1545,0.707107,0.000000,0.000000,0.707107 +1546,0.707107,0.000000,0.000000,0.707107 +1547,0.707107,0.000000,0.000000,0.707107 +1548,0.707107,0.000000,0.000000,0.707107 +1549,0.707107,0.000000,0.000000,0.707107 +1550,0.707107,0.000000,0.000000,0.707107 +1551,0.707107,0.000000,0.000000,0.707107 +1552,0.707107,0.000000,0.000000,0.707107 +1553,0.707107,0.000000,0.000000,0.707107 +1554,0.707107,0.000000,0.000000,0.707107 +1555,0.707107,0.000000,0.000000,0.707107 +1556,0.707107,0.000000,0.000000,0.707107 +1557,0.707107,0.000000,0.000000,0.707107 +1558,0.707107,0.000000,0.000000,0.707107 +1559,0.707107,0.000000,0.000000,0.707107 +1560,0.707107,0.000000,0.000000,0.707107 +1561,0.707107,0.000000,0.000000,0.707107 +1562,0.707107,0.000000,0.000000,0.707107 +1563,0.707107,0.000000,0.000000,0.707107 +1564,0.707107,0.000000,0.000000,0.707107 +1565,0.707107,0.000000,0.000000,0.707107 +1566,0.707107,0.000000,0.000000,0.707107 +1567,0.707107,0.000000,0.000000,0.707107 +1568,0.707107,0.000000,0.000000,0.707107 +1569,0.707107,0.000000,0.000000,0.707107 +1570,0.707107,0.000000,0.000000,0.707107 +1571,0.707107,0.000000,0.000000,0.707107 +1572,0.707107,0.000000,0.000000,0.707107 +1573,0.707107,0.000000,0.000000,0.707107 +1574,0.707107,0.000000,0.000000,0.707107 +1575,0.707107,0.000000,0.000000,0.707107 +1576,0.707107,0.000000,0.000000,0.707107 +1577,0.707107,0.000000,0.000000,0.707107 +1578,0.707107,0.000000,0.000000,0.707107 +1579,0.707107,0.000000,0.000000,0.707107 +1580,0.707107,0.000000,0.000000,0.707107 +1581,0.707107,0.000000,0.000000,0.707107 +1582,0.707107,0.000000,0.000000,0.707107 +1583,0.707107,0.000000,0.000000,0.707107 +1584,0.707107,0.000000,0.000000,0.707107 +1585,0.707107,0.000000,0.000000,0.707107 +1586,0.707107,0.000000,0.000000,0.707107 +1587,0.707107,0.000000,0.000000,0.707107 +1588,0.707107,0.000000,0.000000,0.707107 +1589,0.707107,0.000000,0.000000,0.707107 +1590,0.707107,0.000000,0.000000,0.707107 +1591,0.707107,0.000000,0.000000,0.707107 +1592,0.707107,0.000000,0.000000,0.707107 +1593,0.707107,0.000000,0.000000,0.707107 +1594,0.707107,0.000000,0.000000,0.707107 +1595,0.707107,0.000000,0.000000,0.707107 +1596,0.707107,0.000000,0.000000,0.707107 +1597,0.707107,0.000000,0.000000,0.707107 +1598,0.707107,0.000000,0.000000,0.707107 +1599,0.707107,0.000000,0.000000,0.707107 +1600,0.707107,0.000000,0.000000,0.707107 +1601,0.707107,0.000000,0.000000,0.707107 +1602,0.707107,0.000000,0.000000,0.707107 +1603,0.707107,0.000000,0.000000,0.707107 +1604,0.707107,0.000000,0.000000,0.707107 +1605,0.707107,0.000000,0.000000,0.707107 +1606,0.707107,0.000000,0.000000,0.707107 +1607,0.707107,0.000000,0.000000,0.707107 +1608,0.707107,0.000000,0.000000,0.707107 +1609,0.707107,0.000000,0.000000,0.707107 +1610,0.707107,0.000000,0.000000,0.707107 +1611,0.707107,0.000000,0.000000,0.707107 +1612,0.707107,0.000000,0.000000,0.707107 +1613,0.707107,0.000000,0.000000,0.707107 +1614,0.707107,0.000000,0.000000,0.707107 +1615,0.707107,0.000000,0.000000,0.707107 +1616,0.707107,0.000000,0.000000,0.707107 +1617,0.707107,0.000000,0.000000,0.707107 +1618,0.707107,0.000000,0.000000,0.707107 +1619,0.707107,0.000000,0.000000,0.707107 +1620,0.707107,0.000000,0.000000,0.707107 +1621,0.707107,0.000000,0.000000,0.707107 +1622,0.707107,0.000000,0.000000,0.707107 +1623,0.707107,0.000000,0.000000,0.707107 +1624,0.707107,0.000000,0.000000,0.707107 +1625,0.707107,0.000000,0.000000,0.707107 +1626,0.707107,0.000000,0.000000,0.707107 +1627,0.707107,0.000000,0.000000,0.707107 +1628,0.707107,0.000000,0.000000,0.707107 +1629,0.707107,0.000000,0.000000,0.707107 +1630,0.707107,0.000000,0.000000,0.707107 +1631,0.707107,0.000000,0.000000,0.707107 +1632,0.707107,0.000000,0.000000,0.707107 +1633,0.707107,0.000000,0.000000,0.707107 +1634,0.707107,0.000000,0.000000,0.707107 +1635,0.707107,0.000000,0.000000,0.707107 +1636,0.707107,0.000000,0.000000,0.707107 +1637,0.707107,0.000000,0.000000,0.707107 +1638,0.707107,0.000000,0.000000,0.707107 +1639,0.707107,0.000000,0.000000,0.707107 +1640,0.707107,0.000000,0.000000,0.707107 +1641,0.707107,0.000000,0.000000,0.707107 +1642,0.707107,0.000000,0.000000,0.707107 +1643,0.707107,0.000000,0.000000,0.707107 +1644,0.707107,0.000000,0.000000,0.707107 +1645,0.707107,0.000000,0.000000,0.707107 +1646,0.707107,0.000000,0.000000,0.707107 +1647,0.707107,0.000000,0.000000,0.707107 +1648,0.707107,0.000000,0.000000,0.707107 +1649,0.707107,0.000000,0.000000,0.707107 +1650,0.707107,0.000000,0.000000,0.707107 +1651,0.707107,0.000000,0.000000,0.707107 +1652,0.707107,0.000000,0.000000,0.707107 +1653,0.707107,0.000000,0.000000,0.707107 +1654,0.707107,0.000000,0.000000,0.707107 +1655,0.707107,0.000000,0.000000,0.707107 +1656,0.707107,0.000000,0.000000,0.707107 +1657,0.707107,0.000000,0.000000,0.707107 +1658,0.707107,0.000000,0.000000,0.707107 +1659,0.707107,0.000000,0.000000,0.707107 +1660,0.707107,0.000000,0.000000,0.707107 +1661,0.707107,0.000000,0.000000,0.707107 +1662,0.707107,0.000000,0.000000,0.707107 +1663,0.707107,0.000000,0.000000,0.707107 +1664,0.707107,0.000000,0.000000,0.707107 +1665,0.707107,0.000000,0.000000,0.707107 +1666,0.707107,0.000000,0.000000,0.707107 +1667,0.707107,0.000000,0.000000,0.707107 +1668,0.707107,0.000000,0.000000,0.707107 +1669,0.707107,0.000000,0.000000,0.707107 +1670,0.707107,0.000000,0.000000,0.707107 +1671,0.707107,0.000000,0.000000,0.707107 +1672,0.707107,0.000000,0.000000,0.707107 +1673,0.707107,0.000000,0.000000,0.707107 +1674,0.707107,0.000000,0.000000,0.707107 +1675,0.707107,0.000000,0.000000,0.707107 +1676,0.707107,0.000000,0.000000,0.707107 +1677,0.707107,0.000000,0.000000,0.707107 +1678,0.707107,0.000000,0.000000,0.707107 +1679,0.707107,0.000000,0.000000,0.707107 +1680,0.707107,0.000000,0.000000,0.707107 +1681,0.707107,0.000000,0.000000,0.707107 +1682,0.707107,0.000000,0.000000,0.707107 +1683,0.707107,0.000000,0.000000,0.707107 +1684,0.707107,0.000000,0.000000,0.707107 +1685,0.707107,0.000000,0.000000,0.707107 +1686,0.707107,0.000000,0.000000,0.707107 +1687,0.707107,0.000000,0.000000,0.707107 +1688,0.707107,0.000000,0.000000,0.707107 +1689,0.707107,0.000000,0.000000,0.707107 +1690,0.707107,0.000000,0.000000,0.707107 +1691,0.707107,0.000000,0.000000,0.707107 +1692,0.707107,0.000000,0.000000,0.707107 +1693,0.707107,0.000000,0.000000,0.707107 +1694,0.707107,0.000000,0.000000,0.707107 +1695,0.707107,0.000000,0.000000,0.707107 +1696,0.707107,0.000000,0.000000,0.707107 +1697,0.707107,0.000000,0.000000,0.707107 +1698,0.707107,0.000000,0.000000,0.707107 +1699,0.707107,0.000000,0.000000,0.707107 +1700,0.707107,0.000000,0.000000,0.707107 +1701,0.707107,0.000000,0.000000,0.707107 +1702,0.707107,0.000000,0.000000,0.707107 +1703,0.707107,0.000000,0.000000,0.707107 +1704,0.707107,0.000000,0.000000,0.707107 +1705,0.707107,0.000000,0.000000,0.707107 +1706,0.707107,0.000000,0.000000,0.707107 +1707,0.707107,0.000000,0.000000,0.707107 +1708,0.707107,0.000000,0.000000,0.707107 +1709,0.707107,0.000000,0.000000,0.707107 +1710,0.707107,0.000000,0.000000,0.707107 +1711,0.707107,0.000000,0.000000,0.707107 +1712,0.707107,0.000000,0.000000,0.707107 +1713,0.707107,0.000000,0.000000,0.707107 +1714,0.707107,0.000000,0.000000,0.707107 +1715,0.707107,0.000000,0.000000,0.707107 +1716,0.707107,0.000000,0.000000,0.707107 +1717,0.707107,0.000000,0.000000,0.707107 +1718,0.707107,0.000000,0.000000,0.707107 +1719,0.707107,0.000000,0.000000,0.707107 +1720,0.707107,0.000000,0.000000,0.707107 +1721,0.707107,0.000000,0.000000,0.707107 +1722,0.707107,0.000000,0.000000,0.707107 +1723,0.707107,0.000000,0.000000,0.707107 +1724,0.707107,0.000000,0.000000,0.707107 +1725,0.707107,0.000000,0.000000,0.707107 +1726,0.707107,0.000000,0.000000,0.707107 +1727,0.707107,0.000000,0.000000,0.707107 +1728,0.707107,0.000000,0.000000,0.707107 +1729,0.707107,0.000000,0.000000,0.707107 +1730,0.707107,0.000000,0.000000,0.707107 +1731,0.707107,0.000000,0.000000,0.707107 +1732,0.707107,0.000000,0.000000,0.707107 +1733,0.707107,0.000000,0.000000,0.707107 +1734,0.707107,0.000000,0.000000,0.707107 +1735,0.707107,0.000000,0.000000,0.707107 +1736,0.707107,0.000000,0.000000,0.707107 +1737,0.707107,0.000000,0.000000,0.707107 +1738,0.707107,0.000000,0.000000,0.707107 +1739,0.707107,0.000000,0.000000,0.707107 +1740,0.707107,0.000000,0.000000,0.707107 +1741,0.707107,0.000000,0.000000,0.707107 +1742,0.707107,0.000000,0.000000,0.707107 +1743,0.707107,0.000000,0.000000,0.707107 +1744,0.707107,0.000000,0.000000,0.707107 +1745,0.707107,0.000000,0.000000,0.707107 +1746,0.707107,0.000000,0.000000,0.707107 +1747,0.707107,0.000000,0.000000,0.707107 +1748,0.707107,0.000000,0.000000,0.707107 +1749,0.707107,0.000000,0.000000,0.707107 +1750,0.707107,0.000000,0.000000,0.707107 +1751,0.707107,0.000000,0.000000,0.707107 +1752,0.707107,0.000000,0.000000,0.707107 +1753,0.707107,0.000000,0.000000,0.707107 +1754,0.707107,0.000000,0.000000,0.707107 +1755,0.707107,0.000000,0.000000,0.707107 +1756,0.707107,0.000000,0.000000,0.707107 +1757,0.707107,0.000000,0.000000,0.707107 +1758,0.707107,0.000000,0.000000,0.707107 +1759,0.707107,0.000000,0.000000,0.707107 +1760,0.707107,0.000000,0.000000,0.707107 +1761,0.707107,0.000000,0.000000,0.707107 +1762,0.707107,0.000000,0.000000,0.707107 +1763,0.707107,0.000000,0.000000,0.707107 +1764,0.707107,0.000000,0.000000,0.707107 +1765,0.707107,0.000000,0.000000,0.707107 +1766,0.707107,0.000000,0.000000,0.707107 +1767,0.707107,0.000000,0.000000,0.707107 +1768,0.707107,0.000000,0.000000,0.707107 +1769,0.707107,0.000000,0.000000,0.707107 +1770,0.707107,0.000000,0.000000,0.707107 +1771,0.707107,0.000000,0.000000,0.707107 +1772,0.707107,0.000000,0.000000,0.707107 +1773,0.707107,0.000000,0.000000,0.707107 +1774,0.707107,0.000000,0.000000,0.707107 +1775,0.707107,0.000000,0.000000,0.707107 +1776,0.707107,0.000000,0.000000,0.707107 +1777,0.707107,0.000000,0.000000,0.707107 +1778,0.707107,0.000000,0.000000,0.707107 +1779,0.707107,0.000000,0.000000,0.707107 +1780,0.707107,0.000000,0.000000,0.707107 +1781,0.707107,0.000000,0.000000,0.707107 +1782,0.707107,0.000000,0.000000,0.707107 +1783,0.707107,0.000000,0.000000,0.707107 +1784,0.707107,0.000000,0.000000,0.707107 +1785,0.707107,0.000000,0.000000,0.707107 +1786,0.707107,0.000000,0.000000,0.707107 +1787,0.707107,0.000000,0.000000,0.707107 +1788,0.707107,0.000000,0.000000,0.707107 +1789,0.707107,0.000000,0.000000,0.707107 +1790,0.707107,0.000000,0.000000,0.707107 +1791,0.707107,0.000000,0.000000,0.707107 +1792,0.707107,0.000000,0.000000,0.707107 +1793,0.707107,0.000000,0.000000,0.707107 +1794,0.707107,0.000000,0.000000,0.707107 +1795,0.707107,0.000000,0.000000,0.707107 +1796,0.707107,0.000000,0.000000,0.707107 +1797,0.707107,0.000000,0.000000,0.707107 +1798,0.707107,0.000000,0.000000,0.707107 +1799,0.707107,0.000000,0.000000,0.707107 +1800,0.707107,0.000000,0.000000,0.707107 +1801,0.707107,0.000000,0.000000,0.707107 +1802,0.707107,0.000000,0.000000,0.707107 +1803,0.707107,0.000000,0.000000,0.707107 +1804,0.707107,0.000000,0.000000,0.707107 +1805,0.707107,0.000000,0.000000,0.707107 +1806,0.707107,0.000000,0.000000,0.707107 +1807,0.707107,0.000000,0.000000,0.707107 +1808,0.707107,0.000000,0.000000,0.707107 +1809,0.707107,0.000000,0.000000,0.707107 +1810,0.707107,0.000000,0.000000,0.707107 +1811,0.707107,0.000000,0.000000,0.707107 +1812,0.707107,0.000000,0.000000,0.707107 +1813,0.707107,0.000000,0.000000,0.707107 +1814,0.707107,0.000000,0.000000,0.707107 +1815,0.707107,0.000000,0.000000,0.707107 +1816,0.707107,0.000000,0.000000,0.707107 +1817,0.707107,0.000000,0.000000,0.707107 +1818,0.707107,0.000000,0.000000,0.707107 +1819,0.707107,0.000000,0.000000,0.707107 +1820,0.707107,0.000000,0.000000,0.707107 +1821,0.707107,0.000000,0.000000,0.707107 +1822,0.707107,0.000000,0.000000,0.707107 +1823,0.707107,0.000000,0.000000,0.707107 +1824,0.707107,0.000000,0.000000,0.707107 +1825,0.707107,0.000000,0.000000,0.707107 +1826,0.707107,0.000000,0.000000,0.707107 +1827,0.707107,0.000000,0.000000,0.707107 +1828,0.707107,0.000000,0.000000,0.707107 +1829,0.707107,0.000000,0.000000,0.707107 +1830,0.707107,0.000000,0.000000,0.707107 +1831,0.707107,0.000000,0.000000,0.707107 +1832,0.707107,0.000000,0.000000,0.707107 +1833,0.707107,0.000000,0.000000,0.707107 +1834,0.707107,0.000000,0.000000,0.707107 +1835,0.707107,0.000000,0.000000,0.707107 +1836,0.707107,0.000000,0.000000,0.707107 +1837,0.707107,0.000000,0.000000,0.707107 +1838,0.707107,0.000000,0.000000,0.707107 +1839,0.707107,0.000000,0.000000,0.707107 +1840,0.707107,0.000000,0.000000,0.707107 +1841,0.707107,0.000000,0.000000,0.707107 +1842,0.707107,0.000000,0.000000,0.707107 +1843,0.707107,0.000000,0.000000,0.707107 +1844,0.707107,0.000000,0.000000,0.707107 +1845,0.707107,0.000000,0.000000,0.707107 +1846,0.707107,0.000000,0.000000,0.707107 +1847,0.707107,0.000000,0.000000,0.707107 +1848,0.707107,0.000000,0.000000,0.707107 +1849,0.707107,0.000000,0.000000,0.707107 +1850,0.707107,0.000000,0.000000,0.707107 +1851,0.707107,0.000000,0.000000,0.707107 +1852,0.707107,0.000000,0.000000,0.707107 +1853,0.707107,0.000000,0.000000,0.707107 +1854,0.707107,0.000000,0.000000,0.707107 +1855,0.707107,0.000000,0.000000,0.707107 +1856,0.707107,0.000000,0.000000,0.707107 +1857,0.707107,0.000000,0.000000,0.707107 +1858,0.707107,0.000000,0.000000,0.707107 +1859,0.707107,0.000000,0.000000,0.707107 +1860,0.707107,0.000000,0.000000,0.707107 +1861,0.707107,0.000000,0.000000,0.707107 +1862,0.707107,0.000000,0.000000,0.707107 +1863,0.707107,0.000000,0.000000,0.707107 +1864,0.707107,0.000000,0.000000,0.707107 +1865,0.707107,0.000000,0.000000,0.707107 +1866,0.707107,0.000000,0.000000,0.707107 +1867,0.707107,0.000000,0.000000,0.707107 +1868,0.707107,0.000000,0.000000,0.707107 +1869,0.707107,0.000000,0.000000,0.707107 +1870,0.707107,0.000000,0.000000,0.707107 +1871,0.707107,0.000000,0.000000,0.707107 +1872,0.707107,0.000000,0.000000,0.707107 +1873,0.707107,0.000000,0.000000,0.707107 +1874,0.707107,0.000000,0.000000,0.707107 +1875,0.707107,0.000000,0.000000,0.707107 +1876,0.707107,0.000000,0.000000,0.707107 +1877,0.707107,0.000000,0.000000,0.707107 +1878,0.707107,0.000000,0.000000,0.707107 +1879,0.707107,0.000000,0.000000,0.707107 +1880,0.707107,0.000000,0.000000,0.707107 +1881,0.707107,0.000000,0.000000,0.707107 +1882,0.707107,0.000000,0.000000,0.707107 +1883,0.707107,0.000000,0.000000,0.707107 +1884,0.707107,0.000000,0.000000,0.707107 +1885,0.707107,0.000000,0.000000,0.707107 +1886,0.707107,0.000000,0.000000,0.707107 +1887,0.707107,0.000000,0.000000,0.707107 +1888,0.707107,0.000000,0.000000,0.707107 +1889,0.707107,0.000000,0.000000,0.707107 +1890,0.707107,0.000000,0.000000,0.707107 +1891,0.707107,0.000000,0.000000,0.707107 +1892,0.707107,0.000000,0.000000,0.707107 +1893,0.707107,0.000000,0.000000,0.707107 +1894,0.707107,0.000000,0.000000,0.707107 +1895,0.707107,0.000000,0.000000,0.707107 +1896,0.707107,0.000000,0.000000,0.707107 +1897,0.707107,0.000000,0.000000,0.707107 +1898,0.707107,0.000000,0.000000,0.707107 +1899,0.707107,0.000000,0.000000,0.707107 +1900,0.707107,0.000000,0.000000,0.707107 +1901,0.707107,0.000000,0.000000,0.707107 +1902,0.707107,0.000000,0.000000,0.707107 +1903,0.707107,0.000000,0.000000,0.707107 +1904,0.707107,0.000000,0.000000,0.707107 +1905,0.707107,0.000000,0.000000,0.707107 +1906,0.707107,0.000000,0.000000,0.707107 +1907,0.707107,0.000000,0.000000,0.707107 +1908,0.707107,0.000000,0.000000,0.707107 +1909,0.707107,0.000000,0.000000,0.707107 +1910,0.707107,0.000000,0.000000,0.707107 +1911,0.707107,0.000000,0.000000,0.707107 +1912,0.707107,0.000000,0.000000,0.707107 +1913,0.707107,0.000000,0.000000,0.707107 +1914,0.707107,0.000000,0.000000,0.707107 +1915,0.707107,0.000000,0.000000,0.707107 +1916,0.707107,0.000000,0.000000,0.707107 +1917,0.707107,0.000000,0.000000,0.707107 +1918,0.707107,0.000000,0.000000,0.707107 +1919,0.707107,0.000000,0.000000,0.707107 +1920,0.707107,0.000000,0.000000,0.707107 +1921,0.707107,0.000000,0.000000,0.707107 +1922,0.707107,0.000000,0.000000,0.707107 +1923,0.707107,0.000000,0.000000,0.707107 +1924,0.707107,0.000000,0.000000,0.707107 +1925,0.707107,0.000000,0.000000,0.707107 +1926,0.707107,0.000000,0.000000,0.707107 +1927,0.707107,0.000000,0.000000,0.707107 +1928,0.707107,0.000000,0.000000,0.707107 +1929,0.707107,0.000000,0.000000,0.707107 +1930,0.707107,0.000000,0.000000,0.707107 +1931,0.707107,0.000000,0.000000,0.707107 +1932,0.707107,0.000000,0.000000,0.707107 +1933,0.707107,0.000000,0.000000,0.707107 +1934,0.707107,0.000000,0.000000,0.707107 +1935,0.707107,0.000000,0.000000,0.707107 +1936,0.707107,0.000000,0.000000,0.707107 +1937,0.707107,0.000000,0.000000,0.707107 +1938,0.707107,0.000000,0.000000,0.707107 +1939,0.707107,0.000000,0.000000,0.707107 +1940,0.707107,0.000000,0.000000,0.707107 +1941,0.707107,0.000000,0.000000,0.707107 +1942,0.707107,0.000000,0.000000,0.707107 +1943,0.707107,0.000000,0.000000,0.707107 +1944,0.707107,0.000000,0.000000,0.707107 +1945,0.707107,0.000000,0.000000,0.707107 +1946,0.707107,0.000000,0.000000,0.707107 +1947,0.707107,0.000000,0.000000,0.707107 +1948,0.707107,0.000000,0.000000,0.707107 +1949,0.707107,0.000000,0.000000,0.707107 +1950,0.707107,0.000000,0.000000,0.707107 +1951,0.707107,0.000000,0.000000,0.707107 +1952,0.707107,0.000000,0.000000,0.707107 +1953,0.707107,0.000000,0.000000,0.707107 +1954,0.707107,0.000000,0.000000,0.707107 +1955,0.707107,0.000000,0.000000,0.707107 +1956,0.707107,0.000000,0.000000,0.707107 +1957,0.707107,0.000000,0.000000,0.707107 +1958,0.707107,0.000000,0.000000,0.707107 +1959,0.707107,0.000000,0.000000,0.707107 +1960,0.707107,0.000000,0.000000,0.707107 +1961,0.707107,0.000000,0.000000,0.707107 +1962,0.707107,0.000000,0.000000,0.707107 +1963,0.707107,0.000000,0.000000,0.707107 +1964,0.707107,0.000000,0.000000,0.707107 +1965,0.707107,0.000000,0.000000,0.707107 +1966,0.707107,0.000000,0.000000,0.707107 +1967,0.707107,0.000000,0.000000,0.707107 +1968,0.707107,0.000000,0.000000,0.707107 +1969,0.707107,0.000000,0.000000,0.707107 +1970,0.707107,0.000000,0.000000,0.707107 +1971,0.707107,0.000000,0.000000,0.707107 +1972,0.707107,0.000000,0.000000,0.707107 +1973,0.707107,0.000000,0.000000,0.707107 +1974,0.707107,0.000000,0.000000,0.707107 +1975,0.707107,0.000000,0.000000,0.707107 +1976,0.707107,0.000000,0.000000,0.707107 +1977,0.707107,0.000000,0.000000,0.707107 +1978,0.707107,0.000000,0.000000,0.707107 +1979,0.707107,0.000000,0.000000,0.707107 +1980,0.707107,0.000000,0.000000,0.707107 +1981,0.707107,0.000000,0.000000,0.707107 +1982,0.707107,0.000000,0.000000,0.707107 +1983,0.707107,0.000000,0.000000,0.707107 +1984,0.707107,0.000000,0.000000,0.707107 +1985,0.707107,0.000000,0.000000,0.707107 +1986,0.707107,0.000000,0.000000,0.707107 +1987,0.707107,0.000000,0.000000,0.707107 +1988,0.707107,0.000000,0.000000,0.707107 +1989,0.707107,0.000000,0.000000,0.707107 +1990,0.707107,0.000000,0.000000,0.707107 +1991,0.707107,0.000000,0.000000,0.707107 +1992,0.707107,0.000000,0.000000,0.707107 +1993,0.707107,0.000000,0.000000,0.707107 +1994,0.707107,0.000000,0.000000,0.707107 +1995,0.707107,0.000000,0.000000,0.707107 +1996,0.707107,0.000000,0.000000,0.707107 +1997,0.707107,0.000000,0.000000,0.707107 +1998,0.707107,0.000000,0.000000,0.707107 +1999,0.707107,0.000000,0.000000,0.707107 +2000,0.707107,0.000000,0.000000,0.707107 +2001,0.707107,0.000000,0.000000,0.707107 +2002,0.707107,0.000000,0.000000,0.707107 +2003,0.707107,0.000000,0.000000,0.707107 +2004,0.707107,0.000000,0.000000,0.707107 +2005,0.707107,0.000000,0.000000,0.707107 +2006,0.707107,0.000000,0.000000,0.707107 +2007,0.707107,0.000000,0.000000,0.707107 +2008,0.707107,0.000000,0.000000,0.707107 +2009,0.707107,0.000000,0.000000,0.707107 +2010,0.707107,0.000000,0.000000,0.707107 +2011,0.707107,0.000000,0.000000,0.707107 +2012,0.707107,0.000000,0.000000,0.707107 +2013,0.707107,0.000000,0.000000,0.707107 +2014,0.707107,0.000000,0.000000,0.707107 +2015,0.707107,0.000000,0.000000,0.707107 +2016,0.707107,0.000000,0.000000,0.707107 +2017,0.707107,0.000000,0.000000,0.707107 +2018,0.707107,0.000000,0.000000,0.707107 +2019,0.707107,0.000000,0.000000,0.707107 +2020,0.707107,0.000000,0.000000,0.707107 +2021,0.707107,0.000000,0.000000,0.707107 +2022,0.707107,0.000000,0.000000,0.707107 +2023,0.707107,0.000000,0.000000,0.707107 +2024,0.707107,0.000000,0.000000,0.707107 +2025,0.707107,0.000000,0.000000,0.707107 +2026,0.707107,0.000000,0.000000,0.707107 +2027,0.707107,0.000000,0.000000,0.707107 +2028,0.707107,0.000000,0.000000,0.707107 +2029,0.707107,0.000000,0.000000,0.707107 +2030,0.707107,0.000000,0.000000,0.707107 +2031,0.707107,0.000000,0.000000,0.707107 +2032,0.707107,0.000000,0.000000,0.707107 +2033,0.707107,0.000000,0.000000,0.707107 +2034,0.707107,0.000000,0.000000,0.707107 +2035,0.707107,0.000000,0.000000,0.707107 +2036,0.707107,0.000000,0.000000,0.707107 +2037,0.707107,0.000000,0.000000,0.707107 +2038,0.707107,0.000000,0.000000,0.707107 +2039,0.707107,0.000000,0.000000,0.707107 +2040,0.707107,0.000000,0.000000,0.707107 +2041,0.707107,0.000000,0.000000,0.707107 +2042,0.707107,0.000000,0.000000,0.707107 +2043,0.707107,0.000000,0.000000,0.707107 +2044,0.707107,0.000000,0.000000,0.707107 +2045,0.707107,0.000000,0.000000,0.707107 +2046,0.707107,0.000000,0.000000,0.707107 +2047,0.707107,0.000000,0.000000,0.707107 +2048,0.707107,0.000000,0.000000,0.707107 +2049,0.707107,0.000000,0.000000,0.707107 +2050,0.707107,0.000000,0.000000,0.707107 +2051,0.707107,0.000000,0.000000,0.707107 +2052,0.707107,0.000000,0.000000,0.707107 +2053,0.707107,0.000000,0.000000,0.707107 +2054,0.707107,0.000000,0.000000,0.707107 +2055,0.707107,0.000000,0.000000,0.707107 +2056,0.707107,0.000000,0.000000,0.707107 +2057,0.707107,0.000000,0.000000,0.707107 +2058,0.707107,0.000000,0.000000,0.707107 +2059,0.707107,0.000000,0.000000,0.707107 +2060,0.707107,0.000000,0.000000,0.707107 +2061,0.707107,0.000000,0.000000,0.707107 +2062,0.707107,0.000000,0.000000,0.707107 +2063,0.707107,0.000000,0.000000,0.707107 +2064,0.707107,0.000000,0.000000,0.707107 +2065,0.707107,0.000000,0.000000,0.707107 +2066,0.707107,0.000000,0.000000,0.707107 +2067,0.707107,0.000000,0.000000,0.707107 +2068,0.707107,0.000000,0.000000,0.707107 +2069,0.707107,0.000000,0.000000,0.707107 +2070,0.707107,0.000000,0.000000,0.707107 +2071,0.707107,0.000000,0.000000,0.707107 +2072,0.707107,0.000000,0.000000,0.707107 +2073,0.707107,0.000000,0.000000,0.707107 +2074,0.707107,0.000000,0.000000,0.707107 +2075,0.707107,0.000000,0.000000,0.707107 +2076,0.707107,0.000000,0.000000,0.707107 +2077,0.707107,0.000000,0.000000,0.707107 +2078,0.707107,0.000000,0.000000,0.707107 +2079,0.707107,0.000000,0.000000,0.707107 +2080,0.707107,0.000000,0.000000,0.707107 +2081,0.707107,0.000000,0.000000,0.707107 +2082,0.707107,0.000000,0.000000,0.707107 +2083,0.707107,0.000000,0.000000,0.707107 +2084,0.707107,0.000000,0.000000,0.707107 +2085,0.707107,0.000000,0.000000,0.707107 +2086,0.707107,0.000000,0.000000,0.707107 +2087,0.707107,0.000000,0.000000,0.707107 +2088,0.707107,0.000000,0.000000,0.707107 +2089,0.707107,0.000000,0.000000,0.707107 +2090,0.707107,0.000000,0.000000,0.707107 +2091,0.707107,0.000000,0.000000,0.707107 +2092,0.707107,0.000000,0.000000,0.707107 +2093,0.707107,0.000000,0.000000,0.707107 +2094,0.707107,0.000000,0.000000,0.707107 +2095,0.707107,0.000000,0.000000,0.707107 +2096,0.707107,0.000000,0.000000,0.707107 +2097,0.707107,0.000000,0.000000,0.707107 +2098,0.707107,0.000000,0.000000,0.707107 +2099,0.707107,0.000000,0.000000,0.707107 +2100,0.707107,0.000000,0.000000,0.707107 +2101,0.707107,0.000000,0.000000,0.707107 +2102,0.707107,0.000000,0.000000,0.707107 +2103,0.707107,0.000000,0.000000,0.707107 +2104,0.707107,0.000000,0.000000,0.707107 +2105,0.707107,0.000000,0.000000,0.707107 +2106,0.707107,0.000000,0.000000,0.707107 +2107,0.707107,0.000000,0.000000,0.707107 +2108,0.707107,0.000000,0.000000,0.707107 +2109,0.707107,0.000000,0.000000,0.707107 +2110,0.707107,0.000000,0.000000,0.707107 +2111,0.707107,0.000000,0.000000,0.707107 +2112,0.707107,0.000000,0.000000,0.707107 +2113,0.707107,0.000000,0.000000,0.707107 +2114,0.707107,0.000000,0.000000,0.707107 +2115,0.707107,0.000000,0.000000,0.707107 +2116,0.707107,0.000000,0.000000,0.707107 +2117,0.707107,0.000000,0.000000,0.707107 +2118,0.707107,0.000000,0.000000,0.707107 +2119,0.707107,0.000000,0.000000,0.707107 +2120,0.707107,0.000000,0.000000,0.707107 +2121,0.707107,0.000000,0.000000,0.707107 +2122,0.707107,0.000000,0.000000,0.707107 +2123,0.707107,0.000000,0.000000,0.707107 +2124,0.707107,0.000000,0.000000,0.707107 +2125,0.707107,0.000000,0.000000,0.707107 +2126,0.707107,0.000000,0.000000,0.707107 +2127,0.707107,0.000000,0.000000,0.707107 +2128,0.707107,0.000000,0.000000,0.707107 +2129,0.707107,0.000000,0.000000,0.707107 +2130,0.707107,0.000000,0.000000,0.707107 +2131,0.707107,0.000000,0.000000,0.707107 +2132,0.707107,0.000000,0.000000,0.707107 +2133,0.707107,0.000000,0.000000,0.707107 +2134,0.707107,0.000000,0.000000,0.707107 +2135,0.707107,0.000000,0.000000,0.707107 +2136,0.707107,0.000000,0.000000,0.707107 +2137,0.707107,0.000000,0.000000,0.707107 +2138,0.707107,0.000000,0.000000,0.707107 +2139,0.707107,0.000000,0.000000,0.707107 +2140,0.707107,0.000000,0.000000,0.707107 +2141,0.707107,0.000000,0.000000,0.707107 +2142,0.707107,0.000000,0.000000,0.707107 +2143,0.707107,0.000000,0.000000,0.707107 +2144,0.707107,0.000000,0.000000,0.707107 +2145,0.707107,0.000000,0.000000,0.707107 +2146,0.707107,0.000000,0.000000,0.707107 +2147,0.707107,0.000000,0.000000,0.707107 +2148,0.707107,0.000000,0.000000,0.707107 +2149,0.707107,0.000000,0.000000,0.707107 +2150,0.707107,0.000000,0.000000,0.707107 +2151,0.707107,0.000000,0.000000,0.707107 +2152,0.707107,0.000000,0.000000,0.707107 +2153,0.707107,0.000000,0.000000,0.707107 +2154,0.707107,0.000000,0.000000,0.707107 +2155,0.707107,0.000000,0.000000,0.707107 +2156,0.707107,0.000000,0.000000,0.707107 +2157,0.707107,0.000000,0.000000,0.707107 +2158,0.707107,0.000000,0.000000,0.707107 +2159,0.707107,0.000000,0.000000,0.707107 +2160,0.707107,0.000000,0.000000,0.707107 +2161,0.707107,0.000000,0.000000,0.707107 +2162,0.707107,0.000000,0.000000,0.707107 +2163,0.707107,0.000000,0.000000,0.707107 +2164,0.707107,0.000000,0.000000,0.707107 +2165,0.707107,0.000000,0.000000,0.707107 +2166,0.707107,0.000000,0.000000,0.707107 +2167,0.707107,0.000000,0.000000,0.707107 +2168,0.707107,0.000000,0.000000,0.707107 +2169,0.707107,0.000000,0.000000,0.707107 +2170,0.707107,0.000000,0.000000,0.707107 +2171,0.707107,0.000000,0.000000,0.707107 +2172,0.707107,0.000000,0.000000,0.707107 +2173,0.707107,0.000000,0.000000,0.707107 +2174,0.707107,0.000000,0.000000,0.707107 +2175,0.707107,0.000000,0.000000,0.707107 +2176,0.707107,0.000000,0.000000,0.707107 +2177,0.707107,0.000000,0.000000,0.707107 +2178,0.707107,0.000000,0.000000,0.707107 +2179,0.707107,0.000000,0.000000,0.707107 +2180,0.707107,0.000000,0.000000,0.707107 +2181,0.707107,0.000000,0.000000,0.707107 +2182,0.707107,0.000000,0.000000,0.707107 +2183,0.707107,0.000000,0.000000,0.707107 +2184,0.707107,0.000000,0.000000,0.707107 +2185,0.707107,0.000000,0.000000,0.707107 +2186,0.707107,0.000000,0.000000,0.707107 +2187,0.707107,0.000000,0.000000,0.707107 +2188,0.707107,0.000000,0.000000,0.707107 +2189,0.707107,0.000000,0.000000,0.707107 +2190,0.707107,0.000000,0.000000,0.707107 +2191,0.707107,0.000000,0.000000,0.707107 +2192,0.707107,0.000000,0.000000,0.707107 +2193,0.707107,0.000000,0.000000,0.707107 +2194,0.707107,0.000000,0.000000,0.707107 +2195,0.707107,0.000000,0.000000,0.707107 +2196,0.707107,0.000000,0.000000,0.707107 +2197,0.707107,0.000000,0.000000,0.707107 +2198,0.707107,0.000000,0.000000,0.707107 +2199,0.707107,0.000000,0.000000,0.707107 +2200,0.707107,0.000000,0.000000,0.707107 +2201,0.707107,0.000000,0.000000,0.707107 +2202,0.707107,0.000000,0.000000,0.707107 +2203,0.707107,0.000000,0.000000,0.707107 +2204,0.707107,0.000000,0.000000,0.707107 +2205,0.707107,0.000000,0.000000,0.707107 +2206,0.707107,0.000000,0.000000,0.707107 +2207,0.707107,0.000000,0.000000,0.707107 +2208,0.707107,0.000000,0.000000,0.707107 +2209,0.707107,0.000000,0.000000,0.707107 +2210,0.707107,0.000000,0.000000,0.707107 +2211,0.707107,0.000000,0.000000,0.707107 +2212,0.707107,0.000000,0.000000,0.707107 +2213,0.707107,0.000000,0.000000,0.707107 +2214,0.707107,0.000000,0.000000,0.707107 +2215,0.707107,0.000000,0.000000,0.707107 +2216,0.707107,0.000000,0.000000,0.707107 +2217,0.707107,0.000000,0.000000,0.707107 +2218,0.707107,0.000000,0.000000,0.707107 +2219,0.707107,0.000000,0.000000,0.707107 +2220,0.707107,0.000000,0.000000,0.707107 +2221,0.707107,0.000000,0.000000,0.707107 +2222,0.707107,0.000000,0.000000,0.707107 +2223,0.707107,0.000000,0.000000,0.707107 +2224,0.707107,0.000000,0.000000,0.707107 +2225,0.707107,0.000000,0.000000,0.707107 +2226,0.707107,0.000000,0.000000,0.707107 +2227,0.707107,0.000000,0.000000,0.707107 +2228,0.707107,0.000000,0.000000,0.707107 +2229,0.707107,0.000000,0.000000,0.707107 +2230,0.707107,0.000000,0.000000,0.707107 +2231,0.707107,0.000000,0.000000,0.707107 +2232,0.707107,0.000000,0.000000,0.707107 +2233,0.707107,0.000000,0.000000,0.707107 +2234,0.707107,0.000000,0.000000,0.707107 +2235,0.707107,0.000000,0.000000,0.707107 +2236,0.707107,0.000000,0.000000,0.707107 +2237,0.707107,0.000000,0.000000,0.707107 +2238,0.707107,0.000000,0.000000,0.707107 +2239,0.707107,0.000000,0.000000,0.707107 +2240,0.707107,0.000000,0.000000,0.707107 +2241,0.707107,0.000000,0.000000,0.707107 +2242,0.707107,0.000000,0.000000,0.707107 +2243,0.707107,0.000000,0.000000,0.707107 +2244,0.707107,0.000000,0.000000,0.707107 +2245,0.707107,0.000000,0.000000,0.707107 +2246,0.707107,0.000000,0.000000,0.707107 +2247,0.707107,0.000000,0.000000,0.707107 +2248,0.707107,0.000000,0.000000,0.707107 +2249,0.707107,0.000000,0.000000,0.707107 +2250,0.707107,0.000000,0.000000,0.707107 +2251,0.707107,0.000000,0.000000,0.707107 +2252,0.707107,0.000000,0.000000,0.707107 +2253,0.707107,0.000000,0.000000,0.707107 +2254,0.707107,0.000000,0.000000,0.707107 +2255,0.707107,0.000000,0.000000,0.707107 +2256,0.707107,0.000000,0.000000,0.707107 +2257,0.707107,0.000000,0.000000,0.707107 +2258,0.707107,0.000000,0.000000,0.707107 +2259,0.707107,0.000000,0.000000,0.707107 +2260,0.707107,0.000000,0.000000,0.707107 +2261,0.707107,0.000000,0.000000,0.707107 +2262,0.707107,0.000000,0.000000,0.707107 +2263,0.707107,0.000000,0.000000,0.707107 +2264,0.707107,0.000000,0.000000,0.707107 +2265,0.707107,0.000000,0.000000,0.707107 +2266,0.707107,0.000000,0.000000,0.707107 +2267,0.707107,0.000000,0.000000,0.707107 +2268,0.707107,0.000000,0.000000,0.707107 +2269,0.707107,0.000000,0.000000,0.707107 +2270,0.707107,0.000000,0.000000,0.707107 +2271,0.707107,0.000000,0.000000,0.707107 +2272,0.707107,0.000000,0.000000,0.707107 +2273,0.707107,0.000000,0.000000,0.707107 +2274,0.707107,0.000000,0.000000,0.707107 +2275,0.707107,0.000000,0.000000,0.707107 +2276,0.707107,0.000000,0.000000,0.707107 +2277,0.707107,0.000000,0.000000,0.707107 +2278,0.707107,0.000000,0.000000,0.707107 +2279,0.707107,0.000000,0.000000,0.707107 +2280,0.707107,0.000000,0.000000,0.707107 +2281,0.707107,0.000000,0.000000,0.707107 +2282,0.707107,0.000000,0.000000,0.707107 +2283,0.707107,0.000000,0.000000,0.707107 +2284,0.707107,0.000000,0.000000,0.707107 +2285,0.707107,0.000000,0.000000,0.707107 +2286,0.707107,0.000000,0.000000,0.707107 +2287,0.707107,0.000000,0.000000,0.707107 +2288,0.707107,0.000000,0.000000,0.707107 +2289,0.707107,0.000000,0.000000,0.707107 +2290,0.707107,0.000000,0.000000,0.707107 +2291,0.707107,0.000000,0.000000,0.707107 +2292,0.707107,0.000000,0.000000,0.707107 +2293,0.707107,0.000000,0.000000,0.707107 +2294,0.707107,0.000000,0.000000,0.707107 +2295,0.707107,0.000000,0.000000,0.707107 +2296,0.707107,0.000000,0.000000,0.707107 +2297,0.707107,0.000000,0.000000,0.707107 +2298,0.707107,0.000000,0.000000,0.707107 +2299,0.707107,0.000000,0.000000,0.707107 +2300,0.707107,0.000000,0.000000,0.707107 +2301,0.707107,0.000000,0.000000,0.707107 +2302,0.707107,0.000000,0.000000,0.707107 +2303,0.707107,0.000000,0.000000,0.707107 +2304,0.707107,0.000000,0.000000,0.707107 +2305,0.707107,0.000000,0.000000,0.707107 +2306,0.707107,0.000000,0.000000,0.707107 +2307,0.707107,0.000000,0.000000,0.707107 +2308,0.707107,0.000000,0.000000,0.707107 +2309,0.707107,0.000000,0.000000,0.707107 +2310,0.707107,0.000000,0.000000,0.707107 +2311,0.707107,0.000000,0.000000,0.707107 +2312,0.707107,0.000000,0.000000,0.707107 +2313,0.707107,0.000000,0.000000,0.707107 +2314,0.707107,0.000000,0.000000,0.707107 +2315,0.707107,0.000000,0.000000,0.707107 +2316,0.707107,0.000000,0.000000,0.707107 +2317,0.707107,0.000000,0.000000,0.707107 +2318,0.707107,0.000000,0.000000,0.707107 +2319,0.707107,0.000000,0.000000,0.707107 +2320,0.707107,0.000000,0.000000,0.707107 +2321,0.707107,0.000000,0.000000,0.707107 +2322,0.707107,0.000000,0.000000,0.707107 +2323,0.707107,0.000000,0.000000,0.707107 +2324,0.707107,0.000000,0.000000,0.707107 +2325,0.707107,0.000000,0.000000,0.707107 +2326,0.707107,0.000000,0.000000,0.707107 +2327,0.707107,0.000000,0.000000,0.707107 +2328,0.707107,0.000000,0.000000,0.707107 +2329,0.707107,0.000000,0.000000,0.707107 +2330,0.707107,0.000000,0.000000,0.707107 +2331,0.707107,0.000000,0.000000,0.707107 +2332,0.707107,0.000000,0.000000,0.707107 +2333,0.707107,0.000000,0.000000,0.707107 +2334,0.707107,0.000000,0.000000,0.707107 +2335,0.707107,0.000000,0.000000,0.707107 +2336,0.707107,0.000000,0.000000,0.707107 +2337,0.707107,0.000000,0.000000,0.707107 +2338,0.707107,0.000000,0.000000,0.707107 +2339,0.707107,0.000000,0.000000,0.707107 +2340,0.707107,0.000000,0.000000,0.707107 +2341,0.707107,0.000000,0.000000,0.707107 +2342,0.707107,0.000000,0.000000,0.707107 +2343,0.707107,0.000000,0.000000,0.707107 +2344,0.707107,0.000000,0.000000,0.707107 +2345,0.707107,0.000000,0.000000,0.707107 +2346,0.707107,0.000000,0.000000,0.707107 +2347,0.707107,0.000000,0.000000,0.707107 +2348,0.707107,0.000000,0.000000,0.707107 +2349,0.707107,0.000000,0.000000,0.707107 +2350,0.707107,0.000000,0.000000,0.707107 +2351,0.707107,0.000000,0.000000,0.707107 +2352,0.707107,0.000000,0.000000,0.707107 +2353,0.707107,0.000000,0.000000,0.707107 +2354,0.707107,0.000000,0.000000,0.707107 +2355,0.707107,0.000000,0.000000,0.707107 +2356,0.707107,0.000000,0.000000,0.707107 +2357,0.707107,0.000000,0.000000,0.707107 +2358,0.707107,0.000000,0.000000,0.707107 +2359,0.707107,0.000000,0.000000,0.707107 +2360,0.707107,0.000000,0.000000,0.707107 +2361,0.707107,0.000000,0.000000,0.707107 +2362,0.707107,0.000000,0.000000,0.707107 +2363,0.707107,0.000000,0.000000,0.707107 +2364,0.707107,0.000000,0.000000,0.707107 +2365,0.707107,0.000000,0.000000,0.707107 +2366,0.707107,0.000000,0.000000,0.707107 +2367,0.707107,0.000000,0.000000,0.707107 +2368,0.707107,0.000000,0.000000,0.707107 +2369,0.707107,0.000000,0.000000,0.707107 +2370,0.707107,0.000000,0.000000,0.707107 +2371,0.707107,0.000000,0.000000,0.707107 +2372,0.707107,0.000000,0.000000,0.707107 +2373,0.707107,0.000000,0.000000,0.707107 +2374,0.707107,0.000000,0.000000,0.707107 +2375,0.707107,0.000000,0.000000,0.707107 +2376,0.707107,0.000000,0.000000,0.707107 +2377,0.707107,0.000000,0.000000,0.707107 +2378,0.707107,0.000000,0.000000,0.707107 +2379,0.707107,0.000000,0.000000,0.707107 +2380,0.707107,0.000000,0.000000,0.707107 +2381,0.707107,0.000000,0.000000,0.707107 +2382,0.707107,0.000000,0.000000,0.707107 +2383,0.707107,0.000000,0.000000,0.707107 +2384,0.707107,0.000000,0.000000,0.707107 +2385,0.707107,0.000000,0.000000,0.707107 +2386,0.707107,0.000000,0.000000,0.707107 +2387,0.707107,0.000000,0.000000,0.707107 +2388,0.707107,0.000000,0.000000,0.707107 +2389,0.707107,0.000000,0.000000,0.707107 +2390,0.707107,0.000000,0.000000,0.707107 +2391,0.707107,0.000000,0.000000,0.707107 +2392,0.707107,0.000000,0.000000,0.707107 +2393,0.707107,0.000000,0.000000,0.707107 +2394,0.707107,0.000000,0.000000,0.707107 +2395,0.707107,0.000000,0.000000,0.707107 +2396,0.707107,0.000000,0.000000,0.707107 +2397,0.707107,0.000000,0.000000,0.707107 +2398,0.707107,0.000000,0.000000,0.707107 +2399,0.707107,0.000000,0.000000,0.707107 +2400,0.707107,0.000000,0.000000,0.707107 +2401,0.707107,0.000000,0.000000,0.707107 +2402,0.707107,0.000000,0.000000,0.707107 +2403,0.707107,0.000000,0.000000,0.707107 +2404,0.707107,0.000000,0.000000,0.707107 +2405,0.707107,0.000000,0.000000,0.707107 +2406,0.707107,0.000000,0.000000,0.707107 +2407,0.707107,0.000000,0.000000,0.707107 +2408,0.707107,0.000000,0.000000,0.707107 +2409,0.707107,0.000000,0.000000,0.707107 +2410,0.707107,0.000000,0.000000,0.707107 +2411,0.707107,0.000000,0.000000,0.707107 +2412,0.707107,0.000000,0.000000,0.707107 +2413,0.707107,0.000000,0.000000,0.707107 +2414,0.707107,0.000000,0.000000,0.707107 +2415,0.707107,0.000000,0.000000,0.707107 +2416,0.707107,0.000000,0.000000,0.707107 +2417,0.707107,0.000000,0.000000,0.707107 +2418,0.707107,0.000000,0.000000,0.707107 +2419,0.707107,0.000000,0.000000,0.707107 +2420,0.707107,0.000000,0.000000,0.707107 +2421,0.707107,0.000000,0.000000,0.707107 +2422,0.707107,0.000000,0.000000,0.707107 +2423,0.707107,0.000000,0.000000,0.707107 +2424,0.707107,0.000000,0.000000,0.707107 +2425,0.707107,0.000000,0.000000,0.707107 +2426,0.707107,0.000000,0.000000,0.707107 +2427,0.707107,0.000000,0.000000,0.707107 +2428,0.707107,0.000000,0.000000,0.707107 +2429,0.707107,0.000000,0.000000,0.707107 +2430,0.707107,0.000000,0.000000,0.707107 +2431,0.707107,0.000000,0.000000,0.707107 +2432,0.707107,0.000000,0.000000,0.707107 +2433,0.707107,0.000000,0.000000,0.707107 +2434,0.707107,0.000000,0.000000,0.707107 +2435,0.707107,0.000000,0.000000,0.707107 +2436,0.707107,0.000000,0.000000,0.707107 +2437,0.707107,0.000000,0.000000,0.707107 +2438,0.707107,0.000000,0.000000,0.707107 +2439,0.707107,0.000000,0.000000,0.707107 +2440,0.707107,0.000000,0.000000,0.707107 +2441,0.707107,0.000000,0.000000,0.707107 +2442,0.707107,0.000000,0.000000,0.707107 +2443,0.707107,0.000000,0.000000,0.707107 +2444,0.707107,0.000000,0.000000,0.707107 +2445,0.707107,0.000000,0.000000,0.707107 +2446,0.707107,0.000000,0.000000,0.707107 +2447,0.707107,0.000000,0.000000,0.707107 +2448,0.707107,0.000000,0.000000,0.707107 +2449,0.707107,0.000000,0.000000,0.707107 +2450,0.707107,0.000000,0.000000,0.707107 +2451,0.707107,0.000000,0.000000,0.707107 +2452,0.707107,0.000000,0.000000,0.707107 +2453,0.707107,0.000000,0.000000,0.707107 +2454,0.707107,0.000000,0.000000,0.707107 +2455,0.707107,0.000000,0.000000,0.707107 +2456,0.707107,0.000000,0.000000,0.707107 +2457,0.707107,0.000000,0.000000,0.707107 +2458,0.707107,0.000000,0.000000,0.707107 +2459,0.707107,0.000000,0.000000,0.707107 +2460,0.707107,0.000000,0.000000,0.707107 +2461,0.707107,0.000000,0.000000,0.707107 +2462,0.707107,0.000000,0.000000,0.707107 +2463,0.707107,0.000000,0.000000,0.707107 +2464,0.707107,0.000000,0.000000,0.707107 +2465,0.707107,0.000000,0.000000,0.707107 +2466,0.707107,0.000000,0.000000,0.707107 +2467,0.707107,0.000000,0.000000,0.707107 +2468,0.707107,0.000000,0.000000,0.707107 +2469,0.707107,0.000000,0.000000,0.707107 +2470,0.707107,0.000000,0.000000,0.707107 +2471,0.707107,0.000000,0.000000,0.707107 +2472,0.707107,0.000000,0.000000,0.707107 +2473,0.707107,0.000000,0.000000,0.707107 +2474,0.707107,0.000000,0.000000,0.707107 +2475,0.707107,0.000000,0.000000,0.707107 +2476,0.707107,0.000000,0.000000,0.707107 +2477,0.707107,0.000000,0.000000,0.707107 +2478,0.707107,0.000000,0.000000,0.707107 +2479,0.707107,0.000000,0.000000,0.707107 +2480,0.707107,0.000000,0.000000,0.707107 +2481,0.707107,0.000000,0.000000,0.707107 +2482,0.707107,0.000000,0.000000,0.707107 +2483,0.707107,0.000000,0.000000,0.707107 +2484,0.707107,0.000000,0.000000,0.707107 +2485,0.707107,0.000000,0.000000,0.707107 +2486,0.707107,0.000000,0.000000,0.707107 +2487,0.707107,0.000000,0.000000,0.707107 +2488,0.707107,0.000000,0.000000,0.707107 +2489,0.707107,0.000000,0.000000,0.707107 +2490,0.707107,0.000000,0.000000,0.707107 +2491,0.707107,0.000000,0.000000,0.707107 +2492,0.707107,0.000000,0.000000,0.707107 +2493,0.707107,0.000000,0.000000,0.707107 +2494,0.707107,0.000000,0.000000,0.707107 +2495,0.707107,0.000000,0.000000,0.707107 +2496,0.707107,0.000000,0.000000,0.707107 +2497,0.707107,0.000000,0.000000,0.707107 +2498,0.707107,0.000000,0.000000,0.707107 +2499,0.707107,0.000000,0.000000,0.707107 +2500,0.707107,0.000000,0.000000,0.707107 +2501,0.707107,0.000000,0.000000,0.707107 +2502,0.707107,0.000000,0.000000,0.707107 +2503,0.707107,0.000000,0.000000,0.707107 +2504,0.707107,0.000000,0.000000,0.707107 +2505,0.707107,0.000000,0.000000,0.707107 +2506,0.707107,0.000000,0.000000,0.707107 +2507,0.707107,0.000000,0.000000,0.707107 +2508,0.707107,0.000000,0.000000,0.707107 +2509,0.707107,0.000000,0.000000,0.707107 +2510,0.707107,0.000000,0.000000,0.707107 +2511,0.707107,0.000000,0.000000,0.707107 +2512,0.707107,0.000000,0.000000,0.707107 +2513,0.707107,0.000000,0.000000,0.707107 +2514,0.707107,0.000000,0.000000,0.707107 +2515,0.707107,0.000000,0.000000,0.707107 +2516,0.707107,0.000000,0.000000,0.707107 +2517,0.707107,0.000000,0.000000,0.707107 +2518,0.707107,0.000000,0.000000,0.707107 +2519,0.707107,0.000000,0.000000,0.707107 +2520,0.707107,0.000000,0.000000,0.707107 +2521,0.707107,0.000000,0.000000,0.707107 +2522,0.707107,0.000000,0.000000,0.707107 +2523,0.707107,0.000000,0.000000,0.707107 +2524,0.707107,0.000000,0.000000,0.707107 +2525,0.707107,0.000000,0.000000,0.707107 +2526,0.707107,0.000000,0.000000,0.707107 +2527,0.707107,0.000000,0.000000,0.707107 +2528,0.707107,0.000000,0.000000,0.707107 +2529,0.707107,0.000000,0.000000,0.707107 +2530,0.707107,0.000000,0.000000,0.707107 +2531,0.707107,0.000000,0.000000,0.707107 +2532,0.707107,0.000000,0.000000,0.707107 +2533,0.707107,0.000000,0.000000,0.707107 +2534,0.707107,0.000000,0.000000,0.707107 +2535,0.707107,0.000000,0.000000,0.707107 +2536,0.707107,0.000000,0.000000,0.707107 +2537,0.707107,0.000000,0.000000,0.707107 +2538,0.707107,0.000000,0.000000,0.707107 +2539,0.707107,0.000000,0.000000,0.707107 +2540,0.707107,0.000000,0.000000,0.707107 +2541,0.707107,0.000000,0.000000,0.707107 +2542,0.707107,0.000000,0.000000,0.707107 +2543,0.707107,0.000000,0.000000,0.707107 +2544,0.707107,0.000000,0.000000,0.707107 +2545,0.707107,0.000000,0.000000,0.707107 +2546,0.707107,0.000000,0.000000,0.707107 +2547,0.707107,0.000000,0.000000,0.707107 +2548,0.707107,0.000000,0.000000,0.707107 +2549,0.707107,0.000000,0.000000,0.707107 +2550,0.707107,0.000000,0.000000,0.707107 +2551,0.707107,0.000000,0.000000,0.707107 +2552,0.707107,0.000000,0.000000,0.707107 +2553,0.707107,0.000000,0.000000,0.707107 +2554,0.707107,0.000000,0.000000,0.707107 +2555,0.707107,0.000000,0.000000,0.707107 +2556,0.707107,0.000000,0.000000,0.707107 +2557,0.707107,0.000000,0.000000,0.707107 +2558,0.707107,0.000000,0.000000,0.707107 +2559,0.707107,0.000000,0.000000,0.707107 +2560,0.707107,0.000000,0.000000,0.707107 +2561,0.707107,0.000000,0.000000,0.707107 +2562,0.707107,0.000000,0.000000,0.707107 +2563,0.707107,0.000000,0.000000,0.707107 +2564,0.707107,0.000000,0.000000,0.707107 +2565,0.707107,0.000000,0.000000,0.707107 +2566,0.707107,0.000000,0.000000,0.707107 +2567,0.707107,0.000000,0.000000,0.707107 +2568,0.707107,0.000000,0.000000,0.707107 +2569,0.707107,0.000000,0.000000,0.707107 +2570,0.707107,0.000000,0.000000,0.707107 +2571,0.707107,0.000000,0.000000,0.707107 +2572,0.707107,0.000000,0.000000,0.707107 +2573,0.707107,0.000000,0.000000,0.707107 +2574,0.707107,0.000000,0.000000,0.707107 +2575,0.707107,0.000000,0.000000,0.707107 +2576,0.707107,0.000000,0.000000,0.707107 +2577,0.707107,0.000000,0.000000,0.707107 +2578,0.707107,0.000000,0.000000,0.707107 +2579,0.707107,0.000000,0.000000,0.707107 +2580,0.707107,0.000000,0.000000,0.707107 +2581,0.707107,0.000000,0.000000,0.707107 +2582,0.707107,0.000000,0.000000,0.707107 +2583,0.707107,0.000000,0.000000,0.707107 +2584,0.707107,0.000000,0.000000,0.707107 +2585,0.707107,0.000000,0.000000,0.707107 +2586,0.707107,0.000000,0.000000,0.707107 +2587,0.707107,0.000000,0.000000,0.707107 +2588,0.707107,0.000000,0.000000,0.707107 +2589,0.707107,0.000000,0.000000,0.707107 +2590,0.707107,0.000000,0.000000,0.707107 +2591,0.707107,0.000000,0.000000,0.707107 +2592,0.707107,0.000000,0.000000,0.707107 +2593,0.707107,0.000000,0.000000,0.707107 +2594,0.707107,0.000000,0.000000,0.707107 +2595,0.707107,0.000000,0.000000,0.707107 +2596,0.707107,0.000000,0.000000,0.707107 +2597,0.707107,0.000000,0.000000,0.707107 +2598,0.707107,0.000000,0.000000,0.707107 +2599,0.707107,0.000000,0.000000,0.707107 +2600,0.707107,0.000000,0.000000,0.707107 +2601,0.707107,0.000000,0.000000,0.707107 +2602,0.707107,0.000000,0.000000,0.707107 +2603,0.707107,0.000000,0.000000,0.707107 +2604,0.707107,0.000000,0.000000,0.707107 +2605,0.707107,0.000000,0.000000,0.707107 +2606,0.707107,0.000000,0.000000,0.707107 +2607,0.707107,0.000000,0.000000,0.707107 +2608,0.707107,0.000000,0.000000,0.707107 +2609,0.707107,0.000000,0.000000,0.707107 +2610,0.707107,0.000000,0.000000,0.707107 +2611,0.707107,0.000000,0.000000,0.707107 +2612,0.707107,0.000000,0.000000,0.707107 +2613,0.707107,0.000000,0.000000,0.707107 +2614,0.707107,0.000000,0.000000,0.707107 +2615,0.707107,0.000000,0.000000,0.707107 +2616,0.707107,0.000000,0.000000,0.707107 +2617,0.707107,0.000000,0.000000,0.707107 +2618,0.707107,0.000000,0.000000,0.707107 +2619,0.707107,0.000000,0.000000,0.707107 +2620,0.707107,0.000000,0.000000,0.707107 +2621,0.707107,0.000000,0.000000,0.707107 +2622,0.707107,0.000000,0.000000,0.707107 +2623,0.707107,0.000000,0.000000,0.707107 +2624,0.707107,0.000000,0.000000,0.707107 +2625,0.707107,0.000000,0.000000,0.707107 +2626,0.707107,0.000000,0.000000,0.707107 +2627,0.707107,0.000000,0.000000,0.707107 +2628,0.707107,0.000000,0.000000,0.707107 +2629,0.707107,0.000000,0.000000,0.707107 +2630,0.707107,0.000000,0.000000,0.707107 +2631,0.707107,0.000000,0.000000,0.707107 +2632,0.707107,0.000000,0.000000,0.707107 +2633,0.707107,0.000000,0.000000,0.707107 +2634,0.707107,0.000000,0.000000,0.707107 +2635,0.707107,0.000000,0.000000,0.707107 +2636,0.707107,0.000000,0.000000,0.707107 +2637,0.707107,0.000000,0.000000,0.707107 +2638,0.707107,0.000000,0.000000,0.707107 +2639,0.707107,0.000000,0.000000,0.707107 +2640,0.707107,0.000000,0.000000,0.707107 +2641,0.707107,0.000000,0.000000,0.707107 +2642,0.707107,0.000000,0.000000,0.707107 +2643,0.707107,0.000000,0.000000,0.707107 +2644,0.707107,0.000000,0.000000,0.707107 +2645,0.707107,0.000000,0.000000,0.707107 +2646,0.707107,0.000000,0.000000,0.707107 +2647,0.707107,0.000000,0.000000,0.707107 +2648,0.707107,0.000000,0.000000,0.707107 +2649,0.707107,0.000000,0.000000,0.707107 +2650,0.707107,0.000000,0.000000,0.707107 +2651,0.707107,0.000000,0.000000,0.707107 +2652,0.707107,0.000000,0.000000,0.707107 +2653,0.707107,0.000000,0.000000,0.707107 +2654,0.707107,0.000000,0.000000,0.707107 +2655,0.707107,0.000000,0.000000,0.707107 +2656,0.707107,0.000000,0.000000,0.707107 +2657,0.707107,0.000000,0.000000,0.707107 +2658,0.707107,0.000000,0.000000,0.707107 +2659,0.707107,0.000000,0.000000,0.707107 +2660,0.707107,0.000000,0.000000,0.707107 +2661,0.707107,0.000000,0.000000,0.707107 +2662,0.707107,0.000000,0.000000,0.707107 +2663,0.707107,0.000000,0.000000,0.707107 +2664,0.707107,0.000000,0.000000,0.707107 +2665,0.707107,0.000000,0.000000,0.707107 +2666,0.707107,0.000000,0.000000,0.707107 +2667,0.707107,0.000000,0.000000,0.707107 +2668,0.707107,0.000000,0.000000,0.707107 +2669,0.707107,0.000000,0.000000,0.707107 +2670,0.707107,0.000000,0.000000,0.707107 +2671,0.707107,0.000000,0.000000,0.707107 +2672,0.707107,0.000000,0.000000,0.707107 +2673,0.707107,0.000000,0.000000,0.707107 +2674,0.707107,0.000000,0.000000,0.707107 +2675,0.707107,0.000000,0.000000,0.707107 +2676,0.707107,0.000000,0.000000,0.707107 +2677,0.707107,0.000000,0.000000,0.707107 +2678,0.707107,0.000000,0.000000,0.707107 +2679,0.707107,0.000000,0.000000,0.707107 +2680,0.707107,0.000000,0.000000,0.707107 +2681,0.707107,0.000000,0.000000,0.707107 +2682,0.707107,0.000000,0.000000,0.707107 +2683,0.707107,0.000000,0.000000,0.707107 +2684,0.707107,0.000000,0.000000,0.707107 +2685,0.707107,0.000000,0.000000,0.707107 +2686,0.707107,0.000000,0.000000,0.707107 +2687,0.707107,0.000000,0.000000,0.707107 +2688,0.707107,0.000000,0.000000,0.707107 +2689,0.707107,0.000000,0.000000,0.707107 +2690,0.707107,0.000000,0.000000,0.707107 +2691,0.707107,0.000000,0.000000,0.707107 +2692,0.707107,0.000000,0.000000,0.707107 +2693,0.707107,0.000000,0.000000,0.707107 +2694,0.707107,0.000000,0.000000,0.707107 +2695,0.707107,0.000000,0.000000,0.707107 +2696,0.707107,0.000000,0.000000,0.707107 +2697,0.707107,0.000000,0.000000,0.707107 +2698,0.707107,0.000000,0.000000,0.707107 +2699,0.707107,0.000000,0.000000,0.707107 +2700,0.707107,0.000000,0.000000,0.707107 +2701,0.707107,0.000000,0.000000,0.707107 +2702,0.707107,0.000000,0.000000,0.707107 +2703,0.707107,0.000000,0.000000,0.707107 +2704,0.707107,0.000000,0.000000,0.707107 +2705,0.707107,0.000000,0.000000,0.707107 +2706,0.707107,0.000000,0.000000,0.707107 +2707,0.707107,0.000000,0.000000,0.707107 +2708,0.707107,0.000000,0.000000,0.707107 +2709,0.707107,0.000000,0.000000,0.707107 +2710,0.707107,0.000000,0.000000,0.707107 +2711,0.707107,0.000000,0.000000,0.707107 +2712,0.707107,0.000000,0.000000,0.707107 +2713,0.707107,0.000000,0.000000,0.707107 +2714,0.707107,0.000000,0.000000,0.707107 +2715,0.707107,0.000000,0.000000,0.707107 +2716,0.707107,0.000000,0.000000,0.707107 +2717,0.707107,0.000000,0.000000,0.707107 +2718,0.707107,0.000000,0.000000,0.707107 +2719,0.707107,0.000000,0.000000,0.707107 +2720,0.707107,0.000000,0.000000,0.707107 +2721,0.707107,0.000000,0.000000,0.707107 +2722,0.707107,0.000000,0.000000,0.707107 +2723,0.707107,0.000000,0.000000,0.707107 +2724,0.707107,0.000000,0.000000,0.707107 +2725,0.707107,0.000000,0.000000,0.707107 +2726,0.707107,0.000000,0.000000,0.707107 +2727,0.707107,0.000000,0.000000,0.707107 +2728,0.707107,0.000000,0.000000,0.707107 +2729,0.707107,0.000000,0.000000,0.707107 +2730,0.707107,0.000000,0.000000,0.707107 +2731,0.707107,0.000000,0.000000,0.707107 +2732,0.707107,0.000000,0.000000,0.707107 +2733,0.707107,0.000000,0.000000,0.707107 +2734,0.707107,0.000000,0.000000,0.707107 +2735,0.707107,0.000000,0.000000,0.707107 +2736,0.707107,0.000000,0.000000,0.707107 +2737,0.707107,0.000000,0.000000,0.707107 +2738,0.707107,0.000000,0.000000,0.707107 +2739,0.707107,0.000000,0.000000,0.707107 +2740,0.707107,0.000000,0.000000,0.707107 +2741,0.707107,0.000000,0.000000,0.707107 +2742,0.707107,0.000000,0.000000,0.707107 +2743,0.707107,0.000000,0.000000,0.707107 +2744,0.707107,0.000000,0.000000,0.707107 +2745,0.707107,0.000000,0.000000,0.707107 +2746,0.707107,0.000000,0.000000,0.707107 +2747,0.707107,0.000000,0.000000,0.707107 +2748,0.707107,0.000000,0.000000,0.707107 +2749,0.707107,0.000000,0.000000,0.707107 +2750,0.707107,0.000000,0.000000,0.707107 +2751,0.707107,0.000000,0.000000,0.707107 +2752,0.707107,0.000000,0.000000,0.707107 +2753,0.707107,0.000000,0.000000,0.707107 +2754,0.707107,0.000000,0.000000,0.707107 +2755,0.707107,0.000000,0.000000,0.707107 +2756,0.707107,0.000000,0.000000,0.707107 +2757,0.707107,0.000000,0.000000,0.707107 +2758,0.707107,0.000000,0.000000,0.707107 +2759,0.707107,0.000000,0.000000,0.707107 +2760,0.707107,0.000000,0.000000,0.707107 +2761,0.707107,0.000000,0.000000,0.707107 +2762,0.707107,0.000000,0.000000,0.707107 +2763,0.707107,0.000000,0.000000,0.707107 +2764,0.707107,0.000000,0.000000,0.707107 +2765,0.707107,0.000000,0.000000,0.707107 +2766,0.707107,0.000000,0.000000,0.707107 +2767,0.707107,0.000000,0.000000,0.707107 +2768,0.707107,0.000000,0.000000,0.707107 +2769,0.707107,0.000000,0.000000,0.707107 +2770,0.707107,0.000000,0.000000,0.707107 +2771,0.707107,0.000000,0.000000,0.707107 +2772,0.707107,0.000000,0.000000,0.707107 +2773,0.707107,0.000000,0.000000,0.707107 +2774,0.707107,0.000000,0.000000,0.707107 +2775,0.707107,0.000000,0.000000,0.707107 +2776,0.707107,0.000000,0.000000,0.707107 +2777,0.707107,0.000000,0.000000,0.707107 +2778,0.707107,0.000000,0.000000,0.707107 +2779,0.707107,0.000000,0.000000,0.707107 +2780,0.707107,0.000000,0.000000,0.707107 +2781,0.707107,0.000000,0.000000,0.707107 +2782,0.707107,0.000000,0.000000,0.707107 +2783,0.707107,0.000000,0.000000,0.707107 +2784,0.707107,0.000000,0.000000,0.707107 +2785,0.707107,0.000000,0.000000,0.707107 +2786,0.707107,0.000000,0.000000,0.707107 +2787,0.707107,0.000000,0.000000,0.707107 +2788,0.707107,0.000000,0.000000,0.707107 +2789,0.707107,0.000000,0.000000,0.707107 +2790,0.707107,0.000000,0.000000,0.707107 +2791,0.707107,0.000000,0.000000,0.707107 +2792,0.707107,0.000000,0.000000,0.707107 +2793,0.707107,0.000000,0.000000,0.707107 +2794,0.707107,0.000000,0.000000,0.707107 +2795,0.707107,0.000000,0.000000,0.707107 +2796,0.707107,0.000000,0.000000,0.707107 +2797,0.707107,0.000000,0.000000,0.707107 +2798,0.707107,0.000000,0.000000,0.707107 +2799,0.707107,0.000000,0.000000,0.707107 +2800,0.707107,0.000000,0.000000,0.707107 +2801,0.707107,0.000000,0.000000,0.707107 +2802,0.707107,0.000000,0.000000,0.707107 +2803,0.707107,0.000000,0.000000,0.707107 +2804,0.707107,0.000000,0.000000,0.707107 +2805,0.707107,0.000000,0.000000,0.707107 +2806,0.707107,0.000000,0.000000,0.707107 +2807,0.707107,0.000000,0.000000,0.707107 +2808,0.707107,0.000000,0.000000,0.707107 +2809,0.707107,0.000000,0.000000,0.707107 +2810,0.707107,0.000000,0.000000,0.707107 +2811,0.707107,0.000000,0.000000,0.707107 +2812,0.707107,0.000000,0.000000,0.707107 +2813,0.707107,0.000000,0.000000,0.707107 +2814,0.707107,0.000000,0.000000,0.707107 +2815,0.707107,0.000000,0.000000,0.707107 +2816,0.707107,0.000000,0.000000,0.707107 +2817,0.707107,0.000000,0.000000,0.707107 +2818,0.707107,0.000000,0.000000,0.707107 +2819,0.707107,0.000000,0.000000,0.707107 +2820,0.707107,0.000000,0.000000,0.707107 +2821,0.707107,0.000000,0.000000,0.707107 +2822,0.707107,0.000000,0.000000,0.707107 +2823,0.707107,0.000000,0.000000,0.707107 +2824,0.707107,0.000000,0.000000,0.707107 +2825,0.707107,0.000000,0.000000,0.707107 +2826,0.707107,0.000000,0.000000,0.707107 +2827,0.707107,0.000000,0.000000,0.707107 +2828,0.707107,0.000000,0.000000,0.707107 +2829,0.707107,0.000000,0.000000,0.707107 +2830,0.707107,0.000000,0.000000,0.707107 +2831,0.707107,0.000000,0.000000,0.707107 +2832,0.707107,0.000000,0.000000,0.707107 +2833,0.707107,0.000000,0.000000,0.707107 +2834,0.707107,0.000000,0.000000,0.707107 +2835,0.707107,0.000000,0.000000,0.707107 +2836,0.707107,0.000000,0.000000,0.707107 +2837,0.707107,0.000000,0.000000,0.707107 +2838,0.707107,0.000000,0.000000,0.707107 +2839,0.707107,0.000000,0.000000,0.707107 +2840,0.707107,0.000000,0.000000,0.707107 +2841,0.707107,0.000000,0.000000,0.707107 +2842,0.707107,0.000000,0.000000,0.707107 +2843,0.707107,0.000000,0.000000,0.707107 +2844,0.707107,0.000000,0.000000,0.707107 +2845,0.707107,0.000000,0.000000,0.707107 +2846,0.707107,0.000000,0.000000,0.707107 +2847,0.707107,0.000000,0.000000,0.707107 +2848,0.707107,0.000000,0.000000,0.707107 +2849,0.707107,0.000000,0.000000,0.707107 +2850,0.707107,0.000000,0.000000,0.707107 +2851,0.707107,0.000000,0.000000,0.707107 +2852,0.707107,0.000000,0.000000,0.707107 +2853,0.707107,0.000000,0.000000,0.707107 +2854,0.707107,0.000000,0.000000,0.707107 +2855,0.707107,0.000000,0.000000,0.707107 +2856,0.707107,0.000000,0.000000,0.707107 +2857,0.707107,0.000000,0.000000,0.707107 +2858,0.707107,0.000000,0.000000,0.707107 +2859,0.707107,0.000000,0.000000,0.707107 +2860,0.707107,0.000000,0.000000,0.707107 +2861,0.707107,0.000000,0.000000,0.707107 +2862,0.707107,0.000000,0.000000,0.707107 +2863,0.707107,0.000000,0.000000,0.707107 +2864,0.707107,0.000000,0.000000,0.707107 +2865,0.707107,0.000000,0.000000,0.707107 +2866,0.707107,0.000000,0.000000,0.707107 +2867,0.707107,0.000000,0.000000,0.707107 +2868,0.707107,0.000000,0.000000,0.707107 +2869,0.707107,0.000000,0.000000,0.707107 +2870,0.707107,0.000000,0.000000,0.707107 +2871,0.707107,0.000000,0.000000,0.707107 +2872,0.707107,0.000000,0.000000,0.707107 +2873,0.707107,0.000000,0.000000,0.707107 +2874,0.707107,0.000000,0.000000,0.707107 +2875,0.707107,0.000000,0.000000,0.707107 +2876,0.707107,0.000000,0.000000,0.707107 +2877,0.707107,0.000000,0.000000,0.707107 +2878,0.707107,0.000000,0.000000,0.707107 +2879,0.707107,0.000000,0.000000,0.707107 +2880,0.707107,0.000000,0.000000,0.707107 +2881,0.707107,0.000000,0.000000,0.707107 +2882,0.707107,0.000000,0.000000,0.707107 +2883,0.707107,0.000000,0.000000,0.707107 +2884,0.707107,0.000000,0.000000,0.707107 +2885,0.707107,0.000000,0.000000,0.707107 +2886,0.707107,0.000000,0.000000,0.707107 +2887,0.707107,0.000000,0.000000,0.707107 +2888,0.707107,0.000000,0.000000,0.707107 +2889,0.707107,0.000000,0.000000,0.707107 +2890,0.707107,0.000000,0.000000,0.707107 +2891,0.707107,0.000000,0.000000,0.707107 +2892,0.707107,0.000000,0.000000,0.707107 +2893,0.707107,0.000000,0.000000,0.707107 +2894,0.707107,0.000000,0.000000,0.707107 +2895,0.707107,0.000000,0.000000,0.707107 +2896,0.707107,0.000000,0.000000,0.707107 +2897,0.707107,0.000000,0.000000,0.707107 +2898,0.707107,0.000000,0.000000,0.707107 +2899,0.707107,0.000000,0.000000,0.707107 +2900,0.707107,0.000000,0.000000,0.707107 +2901,0.707107,0.000000,0.000000,0.707107 +2902,0.707107,0.000000,0.000000,0.707107 +2903,0.707107,0.000000,0.000000,0.707107 +2904,0.707107,0.000000,0.000000,0.707107 +2905,0.707107,0.000000,0.000000,0.707107 +2906,0.707107,0.000000,0.000000,0.707107 +2907,0.707107,0.000000,0.000000,0.707107 +2908,0.707107,0.000000,0.000000,0.707107 +2909,0.707107,0.000000,0.000000,0.707107 +2910,0.707107,0.000000,0.000000,0.707107 +2911,0.707107,0.000000,0.000000,0.707107 +2912,0.707107,0.000000,0.000000,0.707107 +2913,0.707107,0.000000,0.000000,0.707107 +2914,0.707107,0.000000,0.000000,0.707107 +2915,0.707107,0.000000,0.000000,0.707107 +2916,0.707107,0.000000,0.000000,0.707107 +2917,0.707107,0.000000,0.000000,0.707107 +2918,0.707107,0.000000,0.000000,0.707107 +2919,0.707107,0.000000,0.000000,0.707107 +2920,0.707107,0.000000,0.000000,0.707107 +2921,0.707107,0.000000,0.000000,0.707107 +2922,0.707107,0.000000,0.000000,0.707107 +2923,0.707107,0.000000,0.000000,0.707107 +2924,0.707107,0.000000,0.000000,0.707107 +2925,0.707107,0.000000,0.000000,0.707107 +2926,0.707107,0.000000,0.000000,0.707107 +2927,0.707107,0.000000,0.000000,0.707107 +2928,0.707107,0.000000,0.000000,0.707107 +2929,0.707107,0.000000,0.000000,0.707107 +2930,0.707107,0.000000,0.000000,0.707107 +2931,0.707107,0.000000,0.000000,0.707107 +2932,0.707107,0.000000,0.000000,0.707107 +2933,0.707107,0.000000,0.000000,0.707107 +2934,0.707107,0.000000,0.000000,0.707107 +2935,0.707107,0.000000,0.000000,0.707107 +2936,0.707107,0.000000,0.000000,0.707107 +2937,0.707107,0.000000,0.000000,0.707107 +2938,0.707107,0.000000,0.000000,0.707107 +2939,0.707107,0.000000,0.000000,0.707107 +2940,0.707107,0.000000,0.000000,0.707107 +2941,0.707107,0.000000,0.000000,0.707107 +2942,0.707107,0.000000,0.000000,0.707107 +2943,0.707107,0.000000,0.000000,0.707107 +2944,0.707107,0.000000,0.000000,0.707107 +2945,0.707107,0.000000,0.000000,0.707107 +2946,0.707107,0.000000,0.000000,0.707107 +2947,0.707107,0.000000,0.000000,0.707107 +2948,0.707107,0.000000,0.000000,0.707107 +2949,0.707107,0.000000,0.000000,0.707107 +2950,0.707107,0.000000,0.000000,0.707107 +2951,0.707107,0.000000,0.000000,0.707107 +2952,0.707107,0.000000,0.000000,0.707107 +2953,0.707107,0.000000,0.000000,0.707107 +2954,0.707107,0.000000,0.000000,0.707107 +2955,0.707107,0.000000,0.000000,0.707107 +2956,0.707107,0.000000,0.000000,0.707107 +2957,0.707107,0.000000,0.000000,0.707107 +2958,0.707107,0.000000,0.000000,0.707107 +2959,0.707107,0.000000,0.000000,0.707107 +2960,0.707107,0.000000,0.000000,0.707107 +2961,0.707107,0.000000,0.000000,0.707107 +2962,0.707107,0.000000,0.000000,0.707107 +2963,0.707107,0.000000,0.000000,0.707107 +2964,0.707107,0.000000,0.000000,0.707107 +2965,0.707107,0.000000,0.000000,0.707107 +2966,0.707107,0.000000,0.000000,0.707107 +2967,0.707107,0.000000,0.000000,0.707107 +2968,0.707107,0.000000,0.000000,0.707107 +2969,0.707107,0.000000,0.000000,0.707107 +2970,0.707107,0.000000,0.000000,0.707107 +2971,0.707107,0.000000,0.000000,0.707107 +2972,0.707107,0.000000,0.000000,0.707107 +2973,0.707107,0.000000,0.000000,0.707107 +2974,0.707107,0.000000,0.000000,0.707107 +2975,0.707107,0.000000,0.000000,0.707107 +2976,0.707107,0.000000,0.000000,0.707107 +2977,0.707107,0.000000,0.000000,0.707107 +2978,0.707107,0.000000,0.000000,0.707107 +2979,0.707107,0.000000,0.000000,0.707107 +2980,0.707107,0.000000,0.000000,0.707107 +2981,0.707107,0.000000,0.000000,0.707107 +2982,0.707107,0.000000,0.000000,0.707107 +2983,0.707107,0.000000,0.000000,0.707107 +2984,0.707107,0.000000,0.000000,0.707107 +2985,0.707107,0.000000,0.000000,0.707107 +2986,0.707107,0.000000,0.000000,0.707107 +2987,0.707107,0.000000,0.000000,0.707107 +2988,0.707107,0.000000,0.000000,0.707107 +2989,0.707107,0.000000,0.000000,0.707107 +2990,0.707107,0.000000,0.000000,0.707107 +2991,0.707107,0.000000,0.000000,0.707107 +2992,0.707107,0.000000,0.000000,0.707107 +2993,0.707107,0.000000,0.000000,0.707107 +2994,0.707107,0.000000,0.000000,0.707107 +2995,0.707107,0.000000,0.000000,0.707107 +2996,0.707107,0.000000,0.000000,0.707107 +2997,0.707107,0.000000,0.000000,0.707107 +2998,0.707107,0.000000,0.000000,0.707107 +2999,0.707107,0.000000,0.000000,0.707107 +3000,0.707107,0.000000,0.000000,0.707107 +3001,0.707107,0.000000,0.000000,0.707107 +3002,0.707107,0.000000,0.000000,0.707107 +3003,0.707107,0.000000,0.000000,0.707107 +3004,0.707107,0.000000,0.000000,0.707107 +3005,0.707107,0.000000,0.000000,0.707107 +3006,0.707107,0.000000,0.000000,0.707107 +3007,0.707107,0.000000,0.000000,0.707107 +3008,0.707107,0.000000,0.000000,0.707107 +3009,0.707107,0.000000,0.000000,0.707107 +3010,0.707107,0.000000,0.000000,0.707107 +3011,0.707107,0.000000,0.000000,0.707107 +3012,0.707107,0.000000,0.000000,0.707107 +3013,0.707107,0.000000,0.000000,0.707107 +3014,0.707107,0.000000,0.000000,0.707107 +3015,0.707107,0.000000,0.000000,0.707107 +3016,0.707107,0.000000,0.000000,0.707107 +3017,0.707107,0.000000,0.000000,0.707107 +3018,0.707107,0.000000,0.000000,0.707107 +3019,0.707107,0.000000,0.000000,0.707107 +3020,0.707107,0.000000,0.000000,0.707107 +3021,0.707107,0.000000,0.000000,0.707107 +3022,0.707107,0.000000,0.000000,0.707107 +3023,0.707107,0.000000,0.000000,0.707107 +3024,0.707107,0.000000,0.000000,0.707107 +3025,0.707107,0.000000,0.000000,0.707107 +3026,0.707107,0.000000,0.000000,0.707107 +3027,0.707107,0.000000,0.000000,0.707107 +3028,0.707107,0.000000,0.000000,0.707107 +3029,0.707107,0.000000,0.000000,0.707107 +3030,0.707107,0.000000,0.000000,0.707107 +3031,0.707107,0.000000,0.000000,0.707107 +3032,0.707107,0.000000,0.000000,0.707107 +3033,0.707107,0.000000,0.000000,0.707107 +3034,0.707107,0.000000,0.000000,0.707107 +3035,0.707107,0.000000,0.000000,0.707107 +3036,0.707107,0.000000,0.000000,0.707107 +3037,0.707107,0.000000,0.000000,0.707107 +3038,0.707107,0.000000,0.000000,0.707107 +3039,0.707107,0.000000,0.000000,0.707107 +3040,0.707107,0.000000,0.000000,0.707107 +3041,0.707107,0.000000,0.000000,0.707107 +3042,0.707107,0.000000,0.000000,0.707107 +3043,0.707107,0.000000,0.000000,0.707107 +3044,0.707107,0.000000,0.000000,0.707107 +3045,0.707107,0.000000,0.000000,0.707107 +3046,0.707107,0.000000,0.000000,0.707107 +3047,0.707107,0.000000,0.000000,0.707107 +3048,0.707107,0.000000,0.000000,0.707107 +3049,0.707107,0.000000,0.000000,0.707107 +3050,0.707107,0.000000,0.000000,0.707107 +3051,0.707107,0.000000,0.000000,0.707107 +3052,0.707107,0.000000,0.000000,0.707107 +3053,0.707107,0.000000,0.000000,0.707107 +3054,0.707107,0.000000,0.000000,0.707107 +3055,0.707107,0.000000,0.000000,0.707107 +3056,0.707107,0.000000,0.000000,0.707107 +3057,0.707107,0.000000,0.000000,0.707107 +3058,0.707107,0.000000,0.000000,0.707107 +3059,0.707107,0.000000,0.000000,0.707107 +3060,0.707107,0.000000,0.000000,0.707107 +3061,0.707107,0.000000,0.000000,0.707107 +3062,0.707107,0.000000,0.000000,0.707107 +3063,0.707107,0.000000,0.000000,0.707107 +3064,0.707107,0.000000,0.000000,0.707107 +3065,0.707107,0.000000,0.000000,0.707107 +3066,0.707107,0.000000,0.000000,0.707107 +3067,0.707107,0.000000,0.000000,0.707107 +3068,0.707107,0.000000,0.000000,0.707107 +3069,0.707107,0.000000,0.000000,0.707107 +3070,0.707107,0.000000,0.000000,0.707107 +3071,0.707107,0.000000,0.000000,0.707107 +3072,0.707107,0.000000,0.000000,0.707107 +3073,0.707107,0.000000,0.000000,0.707107 +3074,0.707107,0.000000,0.000000,0.707107 +3075,0.707107,0.000000,0.000000,0.707107 +3076,0.707107,0.000000,0.000000,0.707107 +3077,0.707107,0.000000,0.000000,0.707107 +3078,0.707107,0.000000,0.000000,0.707107 +3079,0.707107,0.000000,0.000000,0.707107 +3080,0.707107,0.000000,0.000000,0.707107 +3081,0.707107,0.000000,0.000000,0.707107 +3082,0.707107,0.000000,0.000000,0.707107 +3083,0.707107,0.000000,0.000000,0.707107 +3084,0.707107,0.000000,0.000000,0.707107 +3085,0.707107,0.000000,0.000000,0.707107 +3086,0.707107,0.000000,0.000000,0.707107 +3087,0.707107,0.000000,0.000000,0.707107 +3088,0.707107,0.000000,0.000000,0.707107 +3089,0.707107,0.000000,0.000000,0.707107 +3090,0.707107,0.000000,0.000000,0.707107 +3091,0.707107,0.000000,0.000000,0.707107 +3092,0.707107,0.000000,0.000000,0.707107 +3093,0.707107,0.000000,0.000000,0.707107 +3094,0.707107,0.000000,0.000000,0.707107 +3095,0.707107,0.000000,0.000000,0.707107 +3096,0.707107,0.000000,0.000000,0.707107 +3097,0.707107,0.000000,0.000000,0.707107 +3098,0.707107,0.000000,0.000000,0.707107 +3099,0.707107,0.000000,0.000000,0.707107 +3100,0.707107,0.000000,0.000000,0.707107 +3101,0.707107,0.000000,0.000000,0.707107 +3102,0.707107,0.000000,0.000000,0.707107 +3103,0.707107,0.000000,0.000000,0.707107 +3104,0.707107,0.000000,0.000000,0.707107 +3105,0.707107,0.000000,0.000000,0.707107 +3106,0.707107,0.000000,0.000000,0.707107 +3107,0.707107,0.000000,0.000000,0.707107 +3108,0.707107,0.000000,0.000000,0.707107 +3109,0.707107,0.000000,0.000000,0.707107 +3110,0.707107,0.000000,0.000000,0.707107 +3111,0.707107,0.000000,0.000000,0.707107 +3112,0.707107,0.000000,0.000000,0.707107 +3113,0.707107,0.000000,0.000000,0.707107 +3114,0.707107,0.000000,0.000000,0.707107 +3115,0.707107,0.000000,0.000000,0.707107 +3116,0.707107,0.000000,0.000000,0.707107 +3117,0.707107,0.000000,0.000000,0.707107 +3118,0.707107,0.000000,0.000000,0.707107 +3119,0.707107,0.000000,0.000000,0.707107 +3120,0.707107,0.000000,0.000000,0.707107 +3121,0.707107,0.000000,0.000000,0.707107 +3122,0.707107,0.000000,0.000000,0.707107 +3123,0.707107,0.000000,0.000000,0.707107 +3124,0.707107,0.000000,0.000000,0.707107 +3125,0.707107,0.000000,0.000000,0.707107 +3126,0.707107,0.000000,0.000000,0.707107 +3127,0.707107,0.000000,0.000000,0.707107 +3128,0.707107,0.000000,0.000000,0.707107 +3129,0.707107,0.000000,0.000000,0.707107 +3130,0.707107,0.000000,0.000000,0.707107 +3131,0.707107,0.000000,0.000000,0.707107 +3132,0.707107,0.000000,0.000000,0.707107 +3133,0.707107,0.000000,0.000000,0.707107 +3134,0.707107,0.000000,0.000000,0.707107 +3135,0.707107,0.000000,0.000000,0.707107 +3136,0.707107,0.000000,0.000000,0.707107 +3137,0.707107,0.000000,0.000000,0.707107 +3138,0.707107,0.000000,0.000000,0.707107 +3139,0.707107,0.000000,0.000000,0.707107 +3140,0.707107,0.000000,0.000000,0.707107 +3141,0.707107,0.000000,0.000000,0.707107 +3142,0.707107,0.000000,0.000000,0.707107 +3143,0.707107,0.000000,0.000000,0.707107 +3144,0.707107,0.000000,0.000000,0.707107 +3145,0.707107,0.000000,0.000000,0.707107 +3146,0.707107,0.000000,0.000000,0.707107 +3147,0.707107,0.000000,0.000000,0.707107 +3148,0.707107,0.000000,0.000000,0.707107 +3149,0.707107,0.000000,0.000000,0.707107 +3150,0.707107,0.000000,0.000000,0.707107 +3151,0.707107,0.000000,0.000000,0.707107 +3152,0.707107,0.000000,0.000000,0.707107 +3153,0.707107,0.000000,0.000000,0.707107 +3154,0.707107,0.000000,0.000000,0.707107 +3155,0.707107,0.000000,0.000000,0.707107 +3156,0.707107,0.000000,0.000000,0.707107 +3157,0.707107,0.000000,0.000000,0.707107 +3158,0.707107,0.000000,0.000000,0.707107 +3159,0.707107,0.000000,0.000000,0.707107 +3160,0.707107,0.000000,0.000000,0.707107 +3161,0.707107,0.000000,0.000000,0.707107 +3162,0.707107,0.000000,0.000000,0.707107 +3163,0.707107,0.000000,0.000000,0.707107 +3164,0.707107,0.000000,0.000000,0.707107 +3165,0.707107,0.000000,0.000000,0.707107 +3166,0.707107,0.000000,0.000000,0.707107 +3167,0.707107,0.000000,0.000000,0.707107 +3168,0.707107,0.000000,0.000000,0.707107 +3169,0.707107,0.000000,0.000000,0.707107 +3170,0.707107,0.000000,0.000000,0.707107 +3171,0.707107,0.000000,0.000000,0.707107 +3172,0.707107,0.000000,0.000000,0.707107 +3173,0.707107,0.000000,0.000000,0.707107 +3174,0.707107,0.000000,0.000000,0.707107 +3175,0.707107,0.000000,0.000000,0.707107 +3176,0.707107,0.000000,0.000000,0.707107 +3177,0.707107,0.000000,0.000000,0.707107 +3178,0.707107,0.000000,0.000000,0.707107 +3179,0.707107,0.000000,0.000000,0.707107 +3180,0.707107,0.000000,0.000000,0.707107 +3181,0.707107,0.000000,0.000000,0.707107 +3182,0.707107,0.000000,0.000000,0.707107 +3183,0.707107,0.000000,0.000000,0.707107 +3184,0.707107,0.000000,0.000000,0.707107 +3185,0.707107,0.000000,0.000000,0.707107 +3186,0.707107,0.000000,0.000000,0.707107 +3187,0.707107,0.000000,0.000000,0.707107 +3188,0.707107,0.000000,0.000000,0.707107 +3189,0.707107,0.000000,0.000000,0.707107 +3190,0.707107,0.000000,0.000000,0.707107 +3191,0.707107,0.000000,0.000000,0.707107 +3192,0.707107,0.000000,0.000000,0.707107 +3193,0.707107,0.000000,0.000000,0.707107 +3194,0.707107,0.000000,0.000000,0.707107 +3195,0.707107,0.000000,0.000000,0.707107 +3196,0.707107,0.000000,0.000000,0.707107 +3197,0.707107,0.000000,0.000000,0.707107 +3198,0.707107,0.000000,0.000000,0.707107 +3199,0.707107,0.000000,0.000000,0.707107 +3200,0.707107,0.000000,0.000000,0.707107 +3201,0.707107,0.000000,0.000000,0.707107 +3202,0.707107,0.000000,0.000000,0.707107 +3203,0.707107,0.000000,0.000000,0.707107 +3204,0.707107,0.000000,0.000000,0.707107 +3205,0.707107,0.000000,0.000000,0.707107 +3206,0.707107,0.000000,0.000000,0.707107 +3207,0.707107,0.000000,0.000000,0.707107 +3208,0.707107,0.000000,0.000000,0.707107 +3209,0.707107,0.000000,0.000000,0.707107 +3210,0.707107,0.000000,0.000000,0.707107 +3211,0.707107,0.000000,0.000000,0.707107 +3212,0.707107,0.000000,0.000000,0.707107 +3213,0.707107,0.000000,0.000000,0.707107 +3214,0.707107,0.000000,0.000000,0.707107 +3215,0.707107,0.000000,0.000000,0.707107 +3216,0.707107,0.000000,0.000000,0.707107 +3217,0.707107,0.000000,0.000000,0.707107 +3218,0.707107,0.000000,0.000000,0.707107 +3219,0.707107,0.000000,0.000000,0.707107 +3220,0.707107,0.000000,0.000000,0.707107 +3221,0.707107,0.000000,0.000000,0.707107 +3222,0.707107,0.000000,0.000000,0.707107 +3223,0.707107,0.000000,0.000000,0.707107 +3224,0.707107,0.000000,0.000000,0.707107 +3225,0.707107,0.000000,0.000000,0.707107 +3226,0.707107,0.000000,0.000000,0.707107 +3227,0.707107,0.000000,0.000000,0.707107 +3228,0.707107,0.000000,0.000000,0.707107 +3229,0.707107,0.000000,0.000000,0.707107 +3230,0.707107,0.000000,0.000000,0.707107 +3231,0.707107,0.000000,0.000000,0.707107 +3232,0.707107,0.000000,0.000000,0.707107 +3233,0.707107,0.000000,0.000000,0.707107 +3234,0.707107,0.000000,0.000000,0.707107 +3235,0.707107,0.000000,0.000000,0.707107 +3236,0.707107,0.000000,0.000000,0.707107 +3237,0.707107,0.000000,0.000000,0.707107 +3238,0.707107,0.000000,0.000000,0.707107 +3239,0.707107,0.000000,0.000000,0.707107 +3240,0.707107,0.000000,0.000000,0.707107 +3241,0.707107,0.000000,0.000000,0.707107 +3242,0.707107,0.000000,0.000000,0.707107 +3243,0.707107,0.000000,0.000000,0.707107 +3244,0.707107,0.000000,0.000000,0.707107 +3245,0.707107,0.000000,0.000000,0.707107 +3246,0.707107,0.000000,0.000000,0.707107 +3247,0.707107,0.000000,0.000000,0.707107 +3248,0.707107,0.000000,0.000000,0.707107 +3249,0.707107,0.000000,0.000000,0.707107 +3250,0.707107,0.000000,0.000000,0.707107 +3251,0.707107,0.000000,0.000000,0.707107 +3252,0.707107,0.000000,0.000000,0.707107 +3253,0.707107,0.000000,0.000000,0.707107 +3254,0.707107,0.000000,0.000000,0.707107 +3255,0.707107,0.000000,0.000000,0.707107 +3256,0.707107,0.000000,0.000000,0.707107 +3257,0.707107,0.000000,0.000000,0.707107 +3258,0.707107,0.000000,0.000000,0.707107 +3259,0.707107,0.000000,0.000000,0.707107 +3260,0.707107,0.000000,0.000000,0.707107 +3261,0.707107,0.000000,0.000000,0.707107 +3262,0.707107,0.000000,0.000000,0.707107 +3263,0.707107,0.000000,0.000000,0.707107 +3264,0.707107,0.000000,0.000000,0.707107 +3265,0.707107,0.000000,0.000000,0.707107 +3266,0.707107,0.000000,0.000000,0.707107 +3267,0.707107,0.000000,0.000000,0.707107 +3268,0.707107,0.000000,0.000000,0.707107 +3269,0.707107,0.000000,0.000000,0.707107 +3270,0.707107,0.000000,0.000000,0.707107 +3271,0.707107,0.000000,0.000000,0.707107 +3272,0.707107,0.000000,0.000000,0.707107 +3273,0.707107,0.000000,0.000000,0.707107 +3274,0.707107,0.000000,0.000000,0.707107 +3275,0.707107,0.000000,0.000000,0.707107 +3276,0.707107,0.000000,0.000000,0.707107 +3277,0.707107,0.000000,0.000000,0.707107 +3278,0.707107,0.000000,0.000000,0.707107 +3279,0.707107,0.000000,0.000000,0.707107 +3280,0.707107,0.000000,0.000000,0.707107 +3281,0.707107,0.000000,0.000000,0.707107 +3282,0.707107,0.000000,0.000000,0.707107 +3283,0.707107,0.000000,0.000000,0.707107 +3284,0.707107,0.000000,0.000000,0.707107 +3285,0.707107,0.000000,0.000000,0.707107 +3286,0.707107,0.000000,0.000000,0.707107 +3287,0.707107,0.000000,0.000000,0.707107 +3288,0.707107,0.000000,0.000000,0.707107 +3289,0.707107,0.000000,0.000000,0.707107 +3290,0.707107,0.000000,0.000000,0.707107 +3291,0.707107,0.000000,0.000000,0.707107 +3292,0.707107,0.000000,0.000000,0.707107 +3293,0.707107,0.000000,0.000000,0.707107 +3294,0.707107,0.000000,0.000000,0.707107 +3295,0.707107,0.000000,0.000000,0.707107 +3296,0.707107,0.000000,0.000000,0.707107 +3297,0.707107,0.000000,0.000000,0.707107 +3298,0.707107,0.000000,0.000000,0.707107 +3299,0.707107,0.000000,0.000000,0.707107 +3300,0.707107,0.000000,0.000000,0.707107 +3301,0.707107,0.000000,0.000000,0.707107 +3302,0.707107,0.000000,0.000000,0.707107 +3303,0.707107,0.000000,0.000000,0.707107 +3304,0.707107,0.000000,0.000000,0.707107 +3305,0.707107,0.000000,0.000000,0.707107 +3306,0.707107,0.000000,0.000000,0.707107 +3307,0.707107,0.000000,0.000000,0.707107 +3308,0.707107,0.000000,0.000000,0.707107 +3309,0.707107,0.000000,0.000000,0.707107 +3310,0.707107,0.000000,0.000000,0.707107 +3311,0.707107,0.000000,0.000000,0.707107 +3312,0.707107,0.000000,0.000000,0.707107 +3313,0.707107,0.000000,0.000000,0.707107 +3314,0.707107,0.000000,0.000000,0.707107 +3315,0.707107,0.000000,0.000000,0.707107 +3316,0.707107,0.000000,0.000000,0.707107 +3317,0.707107,0.000000,0.000000,0.707107 +3318,0.707107,0.000000,0.000000,0.707107 +3319,0.707107,0.000000,0.000000,0.707107 +3320,0.707107,0.000000,0.000000,0.707107 +3321,0.707107,0.000000,0.000000,0.707107 +3322,0.707107,0.000000,0.000000,0.707107 +3323,0.707107,0.000000,0.000000,0.707107 +3324,0.707107,0.000000,0.000000,0.707107 +3325,0.707107,0.000000,0.000000,0.707107 +3326,0.707107,0.000000,0.000000,0.707107 +3327,0.707107,0.000000,0.000000,0.707107 +3328,0.707107,0.000000,0.000000,0.707107 +3329,0.707107,0.000000,0.000000,0.707107 +3330,0.707107,0.000000,0.000000,0.707107 +3331,0.707107,0.000000,0.000000,0.707107 +3332,0.707107,0.000000,0.000000,0.707107 +3333,0.707107,0.000000,0.000000,0.707107 +3334,0.707107,0.000000,0.000000,0.707107 +3335,0.707107,0.000000,0.000000,0.707107 +3336,0.707107,0.000000,0.000000,0.707107 +3337,0.707107,0.000000,0.000000,0.707107 +3338,0.707107,0.000000,0.000000,0.707107 +3339,0.707107,0.000000,0.000000,0.707107 +3340,0.707107,0.000000,0.000000,0.707107 +3341,0.707107,0.000000,0.000000,0.707107 +3342,0.707107,0.000000,0.000000,0.707107 +3343,0.707107,0.000000,0.000000,0.707107 +3344,0.707107,0.000000,0.000000,0.707107 +3345,0.707107,0.000000,0.000000,0.707107 +3346,0.707107,0.000000,0.000000,0.707107 +3347,0.707107,0.000000,0.000000,0.707107 +3348,0.707107,0.000000,0.000000,0.707107 +3349,0.707107,0.000000,0.000000,0.707107 +3350,0.707107,0.000000,0.000000,0.707107 +3351,0.707107,0.000000,0.000000,0.707107 +3352,0.707107,0.000000,0.000000,0.707107 +3353,0.707107,0.000000,0.000000,0.707107 +3354,0.707107,0.000000,0.000000,0.707107 +3355,0.707107,0.000000,0.000000,0.707107 +3356,0.707107,0.000000,0.000000,0.707107 +3357,0.707107,0.000000,0.000000,0.707107 +3358,0.707107,0.000000,0.000000,0.707107 +3359,0.707107,0.000000,0.000000,0.707107 +3360,0.707107,0.000000,0.000000,0.707107 +3361,0.707107,0.000000,0.000000,0.707107 +3362,0.707107,0.000000,0.000000,0.707107 +3363,0.707107,0.000000,0.000000,0.707107 +3364,0.707107,0.000000,0.000000,0.707107 +3365,0.707107,0.000000,0.000000,0.707107 +3366,0.707107,0.000000,0.000000,0.707107 +3367,0.707107,0.000000,0.000000,0.707107 +3368,0.707107,0.000000,0.000000,0.707107 +3369,0.707107,0.000000,0.000000,0.707107 +3370,0.707107,0.000000,0.000000,0.707107 +3371,0.707107,0.000000,0.000000,0.707107 +3372,0.707107,0.000000,0.000000,0.707107 +3373,0.707107,0.000000,0.000000,0.707107 +3374,0.707107,0.000000,0.000000,0.707107 +3375,0.707107,0.000000,0.000000,0.707107 +3376,0.707107,0.000000,0.000000,0.707107 +3377,0.707107,0.000000,0.000000,0.707107 +3378,0.707107,0.000000,0.000000,0.707107 +3379,0.707107,0.000000,0.000000,0.707107 +3380,0.707107,0.000000,0.000000,0.707107 +3381,0.707107,0.000000,0.000000,0.707107 +3382,0.707107,0.000000,0.000000,0.707107 +3383,0.707107,0.000000,0.000000,0.707107 +3384,0.707107,0.000000,0.000000,0.707107 +3385,0.707107,0.000000,0.000000,0.707107 +3386,0.707107,0.000000,0.000000,0.707107 +3387,0.707107,0.000000,0.000000,0.707107 +3388,0.707107,0.000000,0.000000,0.707107 +3389,0.707107,0.000000,0.000000,0.707107 +3390,0.707107,0.000000,0.000000,0.707107 +3391,0.707107,0.000000,0.000000,0.707107 +3392,0.707107,0.000000,0.000000,0.707107 +3393,0.707107,0.000000,0.000000,0.707107 +3394,0.707107,0.000000,0.000000,0.707107 +3395,0.707107,0.000000,0.000000,0.707107 +3396,0.707107,0.000000,0.000000,0.707107 +3397,0.707107,0.000000,0.000000,0.707107 +3398,0.707107,0.000000,0.000000,0.707107 +3399,0.707107,0.000000,0.000000,0.707107 +3400,0.707107,0.000000,0.000000,0.707107 +3401,0.707107,0.000000,0.000000,0.707107 +3402,0.707107,0.000000,0.000000,0.707107 +3403,0.707107,0.000000,0.000000,0.707107 +3404,0.707107,0.000000,0.000000,0.707107 +3405,0.707107,0.000000,0.000000,0.707107 +3406,0.707107,0.000000,0.000000,0.707107 +3407,0.707107,0.000000,0.000000,0.707107 +3408,0.707107,0.000000,0.000000,0.707107 +3409,0.707107,0.000000,0.000000,0.707107 +3410,0.707107,0.000000,0.000000,0.707107 +3411,0.707107,0.000000,0.000000,0.707107 +3412,0.707107,0.000000,0.000000,0.707107 +3413,0.707107,0.000000,0.000000,0.707107 +3414,0.707107,0.000000,0.000000,0.707107 +3415,0.707107,0.000000,0.000000,0.707107 +3416,0.707107,0.000000,0.000000,0.707107 +3417,0.707107,0.000000,0.000000,0.707107 +3418,0.707107,0.000000,0.000000,0.707107 +3419,0.707107,0.000000,0.000000,0.707107 +3420,0.707107,0.000000,0.000000,0.707107 +3421,0.707107,0.000000,0.000000,0.707107 +3422,0.707107,0.000000,0.000000,0.707107 +3423,0.707107,0.000000,0.000000,0.707107 +3424,0.707107,0.000000,0.000000,0.707107 +3425,0.707107,0.000000,0.000000,0.707107 +3426,0.707107,0.000000,0.000000,0.707107 +3427,0.707107,0.000000,0.000000,0.707107 +3428,0.707107,0.000000,0.000000,0.707107 +3429,0.707107,0.000000,0.000000,0.707107 +3430,0.707107,0.000000,0.000000,0.707107 +3431,0.707107,0.000000,0.000000,0.707107 +3432,0.707107,0.000000,0.000000,0.707107 +3433,0.707107,0.000000,0.000000,0.707107 +3434,0.707107,0.000000,0.000000,0.707107 +3435,0.707107,0.000000,0.000000,0.707107 +3436,0.707107,0.000000,0.000000,0.707107 +3437,0.707107,0.000000,0.000000,0.707107 +3438,0.707107,0.000000,0.000000,0.707107 +3439,0.707107,0.000000,0.000000,0.707107 +3440,0.707107,0.000000,0.000000,0.707107 +3441,0.707107,0.000000,0.000000,0.707107 +3442,0.707107,0.000000,0.000000,0.707107 +3443,0.707107,0.000000,0.000000,0.707107 +3444,0.707107,0.000000,0.000000,0.707107 +3445,0.707107,0.000000,0.000000,0.707107 +3446,0.707107,0.000000,0.000000,0.707107 +3447,0.707107,0.000000,0.000000,0.707107 +3448,0.707107,0.000000,0.000000,0.707107 +3449,0.707107,0.000000,0.000000,0.707107 +3450,0.707107,0.000000,0.000000,0.707107 +3451,0.707107,0.000000,0.000000,0.707107 +3452,0.707107,0.000000,0.000000,0.707107 +3453,0.707107,0.000000,0.000000,0.707107 +3454,0.707107,0.000000,0.000000,0.707107 +3455,0.707107,0.000000,0.000000,0.707107 +3456,0.707107,0.000000,0.000000,0.707107 +3457,0.707107,0.000000,0.000000,0.707107 +3458,0.707107,0.000000,0.000000,0.707107 +3459,0.707107,0.000000,0.000000,0.707107 +3460,0.707107,0.000000,0.000000,0.707107 +3461,0.707107,0.000000,0.000000,0.707107 +3462,0.707107,0.000000,0.000000,0.707107 +3463,0.707107,0.000000,0.000000,0.707107 +3464,0.707107,0.000000,0.000000,0.707107 +3465,0.707107,0.000000,0.000000,0.707107 +3466,0.707107,0.000000,0.000000,0.707107 +3467,0.707107,0.000000,0.000000,0.707107 +3468,0.707107,0.000000,0.000000,0.707107 +3469,0.707107,0.000000,0.000000,0.707107 +3470,0.707107,0.000000,0.000000,0.707107 +3471,0.707107,0.000000,0.000000,0.707107 +3472,0.707107,0.000000,0.000000,0.707107 +3473,0.707107,0.000000,0.000000,0.707107 +3474,0.707107,0.000000,0.000000,0.707107 +3475,0.707107,0.000000,0.000000,0.707107 +3476,0.707107,0.000000,0.000000,0.707107 +3477,0.707107,0.000000,0.000000,0.707107 +3478,0.707107,0.000000,0.000000,0.707107 +3479,0.707107,0.000000,0.000000,0.707107 +3480,0.707107,0.000000,0.000000,0.707107 +3481,0.707107,0.000000,0.000000,0.707107 +3482,0.707107,0.000000,0.000000,0.707107 +3483,0.707107,0.000000,0.000000,0.707107 +3484,0.707107,0.000000,0.000000,0.707107 +3485,0.707107,0.000000,0.000000,0.707107 +3486,0.707107,0.000000,0.000000,0.707107 +3487,0.707107,0.000000,0.000000,0.707107 +3488,0.707107,0.000000,0.000000,0.707107 +3489,0.707107,0.000000,0.000000,0.707107 +3490,0.707107,0.000000,0.000000,0.707107 +3491,0.707107,0.000000,0.000000,0.707107 +3492,0.707107,0.000000,0.000000,0.707107 +3493,0.707107,0.000000,0.000000,0.707107 +3494,0.707107,0.000000,0.000000,0.707107 +3495,0.707107,0.000000,0.000000,0.707107 +3496,0.707107,0.000000,0.000000,0.707107 +3497,0.707107,0.000000,0.000000,0.707107 +3498,0.707107,0.000000,0.000000,0.707107 +3499,0.707107,0.000000,0.000000,0.707107 +3500,0.707107,0.000000,0.000000,0.707107 +3501,0.707107,0.000000,0.000000,0.707107 +3502,0.707107,0.000000,0.000000,0.707107 +3503,0.707107,0.000000,0.000000,0.707107 +3504,0.707107,0.000000,0.000000,0.707107 +3505,0.707107,0.000000,0.000000,0.707107 +3506,0.707107,0.000000,0.000000,0.707107 +3507,0.707107,0.000000,0.000000,0.707107 +3508,0.707107,0.000000,0.000000,0.707107 +3509,0.707107,0.000000,0.000000,0.707107 +3510,0.707107,0.000000,0.000000,0.707107 +3511,0.707107,0.000000,0.000000,0.707107 +3512,0.707107,0.000000,0.000000,0.707107 +3513,0.707107,0.000000,0.000000,0.707107 +3514,0.707107,0.000000,0.000000,0.707107 +3515,0.707107,0.000000,0.000000,0.707107 +3516,0.707107,0.000000,0.000000,0.707107 +3517,0.707107,0.000000,0.000000,0.707107 +3518,0.707107,0.000000,0.000000,0.707107 +3519,0.707107,0.000000,0.000000,0.707107 +3520,0.707107,0.000000,0.000000,0.707107 +3521,0.707107,0.000000,0.000000,0.707107 +3522,0.707107,0.000000,0.000000,0.707107 +3523,0.707107,0.000000,0.000000,0.707107 +3524,0.707107,0.000000,0.000000,0.707107 +3525,0.707107,0.000000,0.000000,0.707107 +3526,0.707107,0.000000,0.000000,0.707107 +3527,0.707107,0.000000,0.000000,0.707107 +3528,0.707107,0.000000,0.000000,0.707107 +3529,0.707107,0.000000,0.000000,0.707107 +3530,0.707107,0.000000,0.000000,0.707107 +3531,0.707107,0.000000,0.000000,0.707107 +3532,0.707107,0.000000,0.000000,0.707107 +3533,0.707107,0.000000,0.000000,0.707107 +3534,0.707107,0.000000,0.000000,0.707107 +3535,0.707107,0.000000,0.000000,0.707107 +3536,0.707107,0.000000,0.000000,0.707107 +3537,0.707107,0.000000,0.000000,0.707107 +3538,0.707107,0.000000,0.000000,0.707107 +3539,0.707107,0.000000,0.000000,0.707107 +3540,0.707107,0.000000,0.000000,0.707107 +3541,0.707107,0.000000,0.000000,0.707107 +3542,0.707107,0.000000,0.000000,0.707107 +3543,0.707107,0.000000,0.000000,0.707107 +3544,0.707107,0.000000,0.000000,0.707107 +3545,0.707107,0.000000,0.000000,0.707107 +3546,0.707107,0.000000,0.000000,0.707107 +3547,0.707107,0.000000,0.000000,0.707107 +3548,0.707107,0.000000,0.000000,0.707107 +3549,0.707107,0.000000,0.000000,0.707107 +3550,0.707107,0.000000,0.000000,0.707107 +3551,0.707107,0.000000,0.000000,0.707107 +3552,0.707107,0.000000,0.000000,0.707107 +3553,0.707107,0.000000,0.000000,0.707107 +3554,0.707107,0.000000,0.000000,0.707107 +3555,0.707107,0.000000,0.000000,0.707107 +3556,0.707107,0.000000,0.000000,0.707107 +3557,0.707107,0.000000,0.000000,0.707107 +3558,0.707107,0.000000,0.000000,0.707107 +3559,0.707107,0.000000,0.000000,0.707107 +3560,0.707107,0.000000,0.000000,0.707107 +3561,0.707107,0.000000,0.000000,0.707107 +3562,0.707107,0.000000,0.000000,0.707107 +3563,0.707107,0.000000,0.000000,0.707107 +3564,0.707107,0.000000,0.000000,0.707107 +3565,0.707107,0.000000,0.000000,0.707107 +3566,0.707107,0.000000,0.000000,0.707107 +3567,0.707107,0.000000,0.000000,0.707107 +3568,0.707107,0.000000,0.000000,0.707107 +3569,0.707107,0.000000,0.000000,0.707107 +3570,0.707107,0.000000,0.000000,0.707107 +3571,0.707107,0.000000,0.000000,0.707107 +3572,0.707107,0.000000,0.000000,0.707107 +3573,0.707107,0.000000,0.000000,0.707107 +3574,0.707107,0.000000,0.000000,0.707107 +3575,0.707107,0.000000,0.000000,0.707107 +3576,0.707107,0.000000,0.000000,0.707107 +3577,0.707107,0.000000,0.000000,0.707107 +3578,0.707107,0.000000,0.000000,0.707107 +3579,0.707107,0.000000,0.000000,0.707107 +3580,0.707107,0.000000,0.000000,0.707107 +3581,0.707107,0.000000,0.000000,0.707107 +3582,0.707107,0.000000,0.000000,0.707107 +3583,0.707107,0.000000,0.000000,0.707107 +3584,0.707107,0.000000,0.000000,0.707107 +3585,0.707107,0.000000,0.000000,0.707107 +3586,0.707107,0.000000,0.000000,0.707107 +3587,0.707107,0.000000,0.000000,0.707107 +3588,0.707107,0.000000,0.000000,0.707107 +3589,0.707107,0.000000,0.000000,0.707107 +3590,0.707107,0.000000,0.000000,0.707107 +3591,0.707107,0.000000,0.000000,0.707107 +3592,0.707107,0.000000,0.000000,0.707107 +3593,0.707107,0.000000,0.000000,0.707107 +3594,0.707107,0.000000,0.000000,0.707107 +3595,0.707107,0.000000,0.000000,0.707107 +3596,0.707107,0.000000,0.000000,0.707107 +3597,0.707107,0.000000,0.000000,0.707107 +3598,0.707107,0.000000,0.000000,0.707107 +3599,0.707107,0.000000,0.000000,0.707107 +3600,0.707107,0.000000,0.000000,0.707107 +3601,0.707107,0.000000,0.000000,0.707107 +3602,0.707107,0.000000,0.000000,0.707107 +3603,0.707107,0.000000,0.000000,0.707107 +3604,0.707107,0.000000,0.000000,0.707107 +3605,0.707107,0.000000,0.000000,0.707107 +3606,0.707107,0.000000,0.000000,0.707107 +3607,0.707107,0.000000,0.000000,0.707107 +3608,0.707107,0.000000,0.000000,0.707107 +3609,0.707107,0.000000,0.000000,0.707107 +3610,0.707107,0.000000,0.000000,0.707107 +3611,0.707107,0.000000,0.000000,0.707107 +3612,0.707107,0.000000,0.000000,0.707107 +3613,0.707107,0.000000,0.000000,0.707107 +3614,0.707107,0.000000,0.000000,0.707107 +3615,0.707107,0.000000,0.000000,0.707107 +3616,0.707107,0.000000,0.000000,0.707107 +3617,0.707107,0.000000,0.000000,0.707107 +3618,0.707107,0.000000,0.000000,0.707107 +3619,0.707107,0.000000,0.000000,0.707107 +3620,0.707107,0.000000,0.000000,0.707107 +3621,0.707107,0.000000,0.000000,0.707107 +3622,0.707107,0.000000,0.000000,0.707107 +3623,0.707107,0.000000,0.000000,0.707107 +3624,0.707107,0.000000,0.000000,0.707107 +3625,0.707107,0.000000,0.000000,0.707107 +3626,0.707107,0.000000,0.000000,0.707107 +3627,0.707107,0.000000,0.000000,0.707107 +3628,0.707107,0.000000,0.000000,0.707107 +3629,0.707107,0.000000,0.000000,0.707107 +3630,0.707107,0.000000,0.000000,0.707107 +3631,0.707107,0.000000,0.000000,0.707107 +3632,0.707107,0.000000,0.000000,0.707107 +3633,0.707107,0.000000,0.000000,0.707107 +3634,0.707107,0.000000,0.000000,0.707107 +3635,0.707107,0.000000,0.000000,0.707107 +3636,0.707107,0.000000,0.000000,0.707107 +3637,0.707107,0.000000,0.000000,0.707107 +3638,0.707107,0.000000,0.000000,0.707107 +3639,0.707107,0.000000,0.000000,0.707107 +3640,0.707107,0.000000,0.000000,0.707107 +3641,0.707107,0.000000,0.000000,0.707107 +3642,0.707107,0.000000,0.000000,0.707107 +3643,0.707107,0.000000,0.000000,0.707107 +3644,0.707107,0.000000,0.000000,0.707107 +3645,0.707107,0.000000,0.000000,0.707107 +3646,0.707107,0.000000,0.000000,0.707107 +3647,0.707107,0.000000,0.000000,0.707107 +3648,0.707107,0.000000,0.000000,0.707107 +3649,0.707107,0.000000,0.000000,0.707107 +3650,0.707107,0.000000,0.000000,0.707107 +3651,0.707107,0.000000,0.000000,0.707107 +3652,0.707107,0.000000,0.000000,0.707107 +3653,0.707107,0.000000,0.000000,0.707107 +3654,0.707107,0.000000,0.000000,0.707107 +3655,0.707107,0.000000,0.000000,0.707107 +3656,0.707107,0.000000,0.000000,0.707107 +3657,0.707107,0.000000,0.000000,0.707107 +3658,0.707107,0.000000,0.000000,0.707107 +3659,0.707107,0.000000,0.000000,0.707107 +3660,0.707107,0.000000,0.000000,0.707107 +3661,0.707107,0.000000,0.000000,0.707107 +3662,0.707107,0.000000,0.000000,0.707107 +3663,0.707107,0.000000,0.000000,0.707107 +3664,0.707107,0.000000,0.000000,0.707107 +3665,0.707107,0.000000,0.000000,0.707107 +3666,0.707107,0.000000,0.000000,0.707107 +3667,0.707107,0.000000,0.000000,0.707107 +3668,0.707107,0.000000,0.000000,0.707107 +3669,0.707107,0.000000,0.000000,0.707107 +3670,0.707107,0.000000,0.000000,0.707107 +3671,0.707107,0.000000,0.000000,0.707107 +3672,0.707107,0.000000,0.000000,0.707107 +3673,0.707107,0.000000,0.000000,0.707107 +3674,0.707107,0.000000,0.000000,0.707107 +3675,0.707107,0.000000,0.000000,0.707107 +3676,0.707107,0.000000,0.000000,0.707107 +3677,0.707107,0.000000,0.000000,0.707107 +3678,0.707107,0.000000,0.000000,0.707107 +3679,0.707107,0.000000,0.000000,0.707107 +3680,0.707107,0.000000,0.000000,0.707107 +3681,0.707107,0.000000,0.000000,0.707107 +3682,0.707107,0.000000,0.000000,0.707107 +3683,0.707107,0.000000,0.000000,0.707107 +3684,0.707107,0.000000,0.000000,0.707107 +3685,0.707107,0.000000,0.000000,0.707107 +3686,0.707107,0.000000,0.000000,0.707107 +3687,0.707107,0.000000,0.000000,0.707107 +3688,0.707107,0.000000,0.000000,0.707107 +3689,0.707107,0.000000,0.000000,0.707107 +3690,0.707107,0.000000,0.000000,0.707107 +3691,0.707107,0.000000,0.000000,0.707107 +3692,0.707107,0.000000,0.000000,0.707107 +3693,0.707107,0.000000,0.000000,0.707107 +3694,0.707107,0.000000,0.000000,0.707107 +3695,0.707107,0.000000,0.000000,0.707107 +3696,0.707107,0.000000,0.000000,0.707107 +3697,0.707107,0.000000,0.000000,0.707107 +3698,0.707107,0.000000,0.000000,0.707107 +3699,0.707107,0.000000,0.000000,0.707107 +3700,0.707107,0.000000,0.000000,0.707107 +3701,0.707107,0.000000,0.000000,0.707107 +3702,0.707107,0.000000,0.000000,0.707107 +3703,0.707107,0.000000,0.000000,0.707107 +3704,0.707107,0.000000,0.000000,0.707107 +3705,0.707107,0.000000,0.000000,0.707107 +3706,0.707107,0.000000,0.000000,0.707107 +3707,0.707107,0.000000,0.000000,0.707107 +3708,0.707107,0.000000,0.000000,0.707107 +3709,0.707107,0.000000,0.000000,0.707107 +3710,0.707107,0.000000,0.000000,0.707107 +3711,0.707107,0.000000,0.000000,0.707107 +3712,0.707107,0.000000,0.000000,0.707107 +3713,0.707107,0.000000,0.000000,0.707107 +3714,0.707107,0.000000,0.000000,0.707107 +3715,0.707107,0.000000,0.000000,0.707107 +3716,0.707107,0.000000,0.000000,0.707107 +3717,0.707107,0.000000,0.000000,0.707107 +3718,0.707107,0.000000,0.000000,0.707107 +3719,0.707107,0.000000,0.000000,0.707107 +3720,0.707107,0.000000,0.000000,0.707107 +3721,0.707107,0.000000,0.000000,0.707107 +3722,0.707107,0.000000,0.000000,0.707107 +3723,0.707107,0.000000,0.000000,0.707107 +3724,0.707107,0.000000,0.000000,0.707107 +3725,0.707107,0.000000,0.000000,0.707107 +3726,0.707107,0.000000,0.000000,0.707107 +3727,0.707107,0.000000,0.000000,0.707107 +3728,0.707107,0.000000,0.000000,0.707107 +3729,0.707107,0.000000,0.000000,0.707107 +3730,0.707107,0.000000,0.000000,0.707107 +3731,0.707107,0.000000,0.000000,0.707107 +3732,0.707107,0.000000,0.000000,0.707107 +3733,0.707107,0.000000,0.000000,0.707107 +3734,0.707107,0.000000,0.000000,0.707107 +3735,0.707107,0.000000,0.000000,0.707107 +3736,0.707107,0.000000,0.000000,0.707107 +3737,0.707107,0.000000,0.000000,0.707107 +3738,0.707107,0.000000,0.000000,0.707107 +3739,0.707107,0.000000,0.000000,0.707107 +3740,0.707107,0.000000,0.000000,0.707107 +3741,0.707107,0.000000,0.000000,0.707107 +3742,0.707107,0.000000,0.000000,0.707107 +3743,0.707107,0.000000,0.000000,0.707107 +3744,0.707107,0.000000,0.000000,0.707107 +3745,0.707107,0.000000,0.000000,0.707107 +3746,0.707107,0.000000,0.000000,0.707107 +3747,0.707107,0.000000,0.000000,0.707107 +3748,0.707107,0.000000,0.000000,0.707107 +3749,0.707107,0.000000,0.000000,0.707107 +3750,0.707107,0.000000,0.000000,0.707107 +3751,0.707107,0.000000,0.000000,0.707107 +3752,0.707107,0.000000,0.000000,0.707107 +3753,0.707107,0.000000,0.000000,0.707107 +3754,0.707107,0.000000,0.000000,0.707107 +3755,0.707107,0.000000,0.000000,0.707107 +3756,0.707107,0.000000,0.000000,0.707107 +3757,0.707107,0.000000,0.000000,0.707107 +3758,0.707107,0.000000,0.000000,0.707107 +3759,0.707107,0.000000,0.000000,0.707107 +3760,0.707107,0.000000,0.000000,0.707107 +3761,0.707107,0.000000,0.000000,0.707107 +3762,0.707107,0.000000,0.000000,0.707107 +3763,0.707107,0.000000,0.000000,0.707107 +3764,0.707107,0.000000,0.000000,0.707107 +3765,0.707107,0.000000,0.000000,0.707107 +3766,0.707107,0.000000,0.000000,0.707107 +3767,0.707107,0.000000,0.000000,0.707107 +3768,0.707107,0.000000,0.000000,0.707107 +3769,0.707107,0.000000,0.000000,0.707107 +3770,0.707107,0.000000,0.000000,0.707107 +3771,0.707107,0.000000,0.000000,0.707107 +3772,0.707107,0.000000,0.000000,0.707107 +3773,0.707107,0.000000,0.000000,0.707107 +3774,0.707107,0.000000,0.000000,0.707107 +3775,0.707107,0.000000,0.000000,0.707107 +3776,0.707107,0.000000,0.000000,0.707107 +3777,0.707107,0.000000,0.000000,0.707107 +3778,0.707107,0.000000,0.000000,0.707107 +3779,0.707107,0.000000,0.000000,0.707107 +3780,0.707107,0.000000,0.000000,0.707107 +3781,0.707107,0.000000,0.000000,0.707107 +3782,0.707107,0.000000,0.000000,0.707107 +3783,0.707107,0.000000,0.000000,0.707107 +3784,0.707107,0.000000,0.000000,0.707107 +3785,0.707107,0.000000,0.000000,0.707107 +3786,0.707107,0.000000,0.000000,0.707107 +3787,0.707107,0.000000,0.000000,0.707107 +3788,0.707107,0.000000,0.000000,0.707107 +3789,0.707107,0.000000,0.000000,0.707107 +3790,0.707107,0.000000,0.000000,0.707107 +3791,0.707107,0.000000,0.000000,0.707107 +3792,0.707107,0.000000,0.000000,0.707107 +3793,0.707107,0.000000,0.000000,0.707107 +3794,0.707107,0.000000,0.000000,0.707107 +3795,0.707107,0.000000,0.000000,0.707107 +3796,0.707107,0.000000,0.000000,0.707107 +3797,0.707107,0.000000,0.000000,0.707107 +3798,0.707107,0.000000,0.000000,0.707107 +3799,0.707107,0.000000,0.000000,0.707107 +3800,0.707107,0.000000,0.000000,0.707107 +3801,0.707107,0.000000,0.000000,0.707107 +3802,0.707107,0.000000,0.000000,0.707107 +3803,0.707107,0.000000,0.000000,0.707107 +3804,0.707107,0.000000,0.000000,0.707107 +3805,0.707107,0.000000,0.000000,0.707107 +3806,0.707107,0.000000,0.000000,0.707107 +3807,0.707107,0.000000,0.000000,0.707107 +3808,0.707107,0.000000,0.000000,0.707107 +3809,0.707107,0.000000,0.000000,0.707107 +3810,0.707107,0.000000,0.000000,0.707107 +3811,0.707107,0.000000,0.000000,0.707107 +3812,0.707107,0.000000,0.000000,0.707107 +3813,0.707107,0.000000,0.000000,0.707107 +3814,0.707107,0.000000,0.000000,0.707107 +3815,0.707107,0.000000,0.000000,0.707107 +3816,0.707107,0.000000,0.000000,0.707107 +3817,0.707107,0.000000,0.000000,0.707107 +3818,0.707107,0.000000,0.000000,0.707107 +3819,0.707107,0.000000,0.000000,0.707107 +3820,0.707107,0.000000,0.000000,0.707107 +3821,0.707107,0.000000,0.000000,0.707107 +3822,0.707107,0.000000,0.000000,0.707107 +3823,0.707107,0.000000,0.000000,0.707107 +3824,0.707107,0.000000,0.000000,0.707107 +3825,0.707107,0.000000,0.000000,0.707107 +3826,0.707107,0.000000,0.000000,0.707107 +3827,0.707107,0.000000,0.000000,0.707107 +3828,0.707107,0.000000,0.000000,0.707107 +3829,0.707107,0.000000,0.000000,0.707107 +3830,0.707107,0.000000,0.000000,0.707107 +3831,0.707107,0.000000,0.000000,0.707107 +3832,0.707107,0.000000,0.000000,0.707107 +3833,0.707107,0.000000,0.000000,0.707107 +3834,0.707107,0.000000,0.000000,0.707107 +3835,0.707107,0.000000,0.000000,0.707107 +3836,0.707107,0.000000,0.000000,0.707107 +3837,0.707107,0.000000,0.000000,0.707107 +3838,0.707107,0.000000,0.000000,0.707107 +3839,0.707107,0.000000,0.000000,0.707107 +3840,0.707107,0.000000,0.000000,0.707107 +3841,0.707107,0.000000,0.000000,0.707107 +3842,0.707107,0.000000,0.000000,0.707107 +3843,0.707107,0.000000,0.000000,0.707107 +3844,0.707107,0.000000,0.000000,0.707107 +3845,0.707107,0.000000,0.000000,0.707107 +3846,0.707107,0.000000,0.000000,0.707107 +3847,0.707107,0.000000,0.000000,0.707107 +3848,0.707107,0.000000,0.000000,0.707107 +3849,0.707107,0.000000,0.000000,0.707107 +3850,0.707107,0.000000,0.000000,0.707107 +3851,0.707107,0.000000,0.000000,0.707107 +3852,0.707107,0.000000,0.000000,0.707107 +3853,0.707107,0.000000,0.000000,0.707107 +3854,0.707107,0.000000,0.000000,0.707107 +3855,0.707107,0.000000,0.000000,0.707107 +3856,0.707107,0.000000,0.000000,0.707107 +3857,0.707107,0.000000,0.000000,0.707107 +3858,0.707107,0.000000,0.000000,0.707107 +3859,0.707107,0.000000,0.000000,0.707107 +3860,0.707107,0.000000,0.000000,0.707107 +3861,0.707107,0.000000,0.000000,0.707107 +3862,0.707107,0.000000,0.000000,0.707107 +3863,0.707107,0.000000,0.000000,0.707107 +3864,0.707107,0.000000,0.000000,0.707107 +3865,0.707107,0.000000,0.000000,0.707107 +3866,0.707107,0.000000,0.000000,0.707107 +3867,0.707107,0.000000,0.000000,0.707107 +3868,0.707107,0.000000,0.000000,0.707107 +3869,0.707107,0.000000,0.000000,0.707107 +3870,0.707107,0.000000,0.000000,0.707107 +3871,0.707107,0.000000,0.000000,0.707107 +3872,0.707107,0.000000,0.000000,0.707107 +3873,0.707107,0.000000,0.000000,0.707107 +3874,0.707107,0.000000,0.000000,0.707107 +3875,0.707107,0.000000,0.000000,0.707107 +3876,0.707107,0.000000,0.000000,0.707107 +3877,0.707107,0.000000,0.000000,0.707107 +3878,0.707107,0.000000,0.000000,0.707107 +3879,0.707107,0.000000,0.000000,0.707107 +3880,0.707107,0.000000,0.000000,0.707107 +3881,0.707107,0.000000,0.000000,0.707107 +3882,0.707107,0.000000,0.000000,0.707107 +3883,0.707107,0.000000,0.000000,0.707107 +3884,0.707107,0.000000,0.000000,0.707107 +3885,0.707107,0.000000,0.000000,0.707107 +3886,0.707107,0.000000,0.000000,0.707107 +3887,0.707107,0.000000,0.000000,0.707107 +3888,0.707107,0.000000,0.000000,0.707107 +3889,0.707107,0.000000,0.000000,0.707107 +3890,0.707107,0.000000,0.000000,0.707107 +3891,0.707107,0.000000,0.000000,0.707107 +3892,0.707107,0.000000,0.000000,0.707107 +3893,0.707107,0.000000,0.000000,0.707107 +3894,0.707107,0.000000,0.000000,0.707107 +3895,0.707107,0.000000,0.000000,0.707107 +3896,0.707107,0.000000,0.000000,0.707107 +3897,0.707107,0.000000,0.000000,0.707107 +3898,0.707107,0.000000,0.000000,0.707107 +3899,0.707107,0.000000,0.000000,0.707107 +3900,0.707107,0.000000,0.000000,0.707107 +3901,0.707107,0.000000,0.000000,0.707107 +3902,0.707107,0.000000,0.000000,0.707107 +3903,0.707107,0.000000,0.000000,0.707107 +3904,0.707107,0.000000,0.000000,0.707107 +3905,0.707107,0.000000,0.000000,0.707107 +3906,0.707107,0.000000,0.000000,0.707107 +3907,0.707107,0.000000,0.000000,0.707107 +3908,0.707107,0.000000,0.000000,0.707107 +3909,0.707107,0.000000,0.000000,0.707107 +3910,0.707107,0.000000,0.000000,0.707107 +3911,0.707107,0.000000,0.000000,0.707107 +3912,0.707107,0.000000,0.000000,0.707107 +3913,0.707107,0.000000,0.000000,0.707107 +3914,0.707107,0.000000,0.000000,0.707107 +3915,0.707107,0.000000,0.000000,0.707107 +3916,0.707107,0.000000,0.000000,0.707107 +3917,0.707107,0.000000,0.000000,0.707107 +3918,0.707107,0.000000,0.000000,0.707107 +3919,0.707107,0.000000,0.000000,0.707107 +3920,0.707107,0.000000,0.000000,0.707107 +3921,0.707107,0.000000,0.000000,0.707107 +3922,0.707107,0.000000,0.000000,0.707107 +3923,0.707107,0.000000,0.000000,0.707107 +3924,0.707107,0.000000,0.000000,0.707107 +3925,0.707107,0.000000,0.000000,0.707107 +3926,0.707107,0.000000,0.000000,0.707107 +3927,0.707107,0.000000,0.000000,0.707107 +3928,0.707107,0.000000,0.000000,0.707107 +3929,0.707107,0.000000,0.000000,0.707107 +3930,0.707107,0.000000,0.000000,0.707107 +3931,0.707107,0.000000,0.000000,0.707107 +3932,0.707107,0.000000,0.000000,0.707107 +3933,0.707107,0.000000,0.000000,0.707107 +3934,0.707107,0.000000,0.000000,0.707107 +3935,0.707107,0.000000,0.000000,0.707107 +3936,0.707107,0.000000,0.000000,0.707107 +3937,0.707107,0.000000,0.000000,0.707107 +3938,0.707107,0.000000,0.000000,0.707107 +3939,0.707107,0.000000,0.000000,0.707107 +3940,0.707107,0.000000,0.000000,0.707107 +3941,0.707107,0.000000,0.000000,0.707107 +3942,0.707107,0.000000,0.000000,0.707107 +3943,0.707107,0.000000,0.000000,0.707107 +3944,0.707107,0.000000,0.000000,0.707107 +3945,0.707107,0.000000,0.000000,0.707107 +3946,0.707107,0.000000,0.000000,0.707107 +3947,0.707107,0.000000,0.000000,0.707107 +3948,0.707107,0.000000,0.000000,0.707107 +3949,0.707107,0.000000,0.000000,0.707107 +3950,0.707107,0.000000,0.000000,0.707107 +3951,0.707107,0.000000,0.000000,0.707107 +3952,0.707107,0.000000,0.000000,0.707107 +3953,0.707107,0.000000,0.000000,0.707107 +3954,0.707107,0.000000,0.000000,0.707107 +3955,0.707107,0.000000,0.000000,0.707107 +3956,0.707107,0.000000,0.000000,0.707107 +3957,0.707107,0.000000,0.000000,0.707107 +3958,0.707107,0.000000,0.000000,0.707107 +3959,0.707107,0.000000,0.000000,0.707107 +3960,0.707107,0.000000,0.000000,0.707107 +3961,0.707107,0.000000,0.000000,0.707107 +3962,0.707107,0.000000,0.000000,0.707107 +3963,0.707107,0.000000,0.000000,0.707107 +3964,0.707107,0.000000,0.000000,0.707107 +3965,0.707107,0.000000,0.000000,0.707107 +3966,0.707107,0.000000,0.000000,0.707107 +3967,0.707107,0.000000,0.000000,0.707107 +3968,0.707107,0.000000,0.000000,0.707107 +3969,0.707107,0.000000,0.000000,0.707107 +3970,0.707107,0.000000,0.000000,0.707107 +3971,0.707107,0.000000,0.000000,0.707107 +3972,0.707107,0.000000,0.000000,0.707107 +3973,0.707107,0.000000,0.000000,0.707107 +3974,0.707107,0.000000,0.000000,0.707107 +3975,0.707107,0.000000,0.000000,0.707107 +3976,0.707107,0.000000,0.000000,0.707107 +3977,0.707107,0.000000,0.000000,0.707107 +3978,0.707107,0.000000,0.000000,0.707107 +3979,0.707107,0.000000,0.000000,0.707107 +3980,0.707107,0.000000,0.000000,0.707107 +3981,0.707107,0.000000,0.000000,0.707107 +3982,0.707107,0.000000,0.000000,0.707107 +3983,0.707107,0.000000,0.000000,0.707107 +3984,0.707107,0.000000,0.000000,0.707107 +3985,0.707107,0.000000,0.000000,0.707107 +3986,0.707107,0.000000,0.000000,0.707107 +3987,0.707107,0.000000,0.000000,0.707107 +3988,0.707107,0.000000,0.000000,0.707107 +3989,0.707107,0.000000,0.000000,0.707107 +3990,0.707107,0.000000,0.000000,0.707107 +3991,0.707107,0.000000,0.000000,0.707107 +3992,0.707107,0.000000,0.000000,0.707107 +3993,0.707107,0.000000,0.000000,0.707107 +3994,0.707107,0.000000,0.000000,0.707107 +3995,0.707107,0.000000,0.000000,0.707107 +3996,0.707107,0.000000,0.000000,0.707107 +3997,0.707107,0.000000,0.000000,0.707107 +3998,0.707107,0.000000,0.000000,0.707107 +3999,0.707107,0.000000,0.000000,0.707107 +4000,0.707107,0.000000,0.000000,0.707107 +4001,0.707107,0.000000,0.000000,0.707107 +4002,0.707107,0.000000,0.000000,0.707107 +4003,0.707107,0.000000,0.000000,0.707107 +4004,0.707107,0.000000,0.000000,0.707107 +4005,0.707107,0.000000,0.000000,0.707107 +4006,0.707107,0.000000,0.000000,0.707107 +4007,0.707107,0.000000,0.000000,0.707107 +4008,0.707107,0.000000,0.000000,0.707107 +4009,0.707107,0.000000,0.000000,0.707107 +4010,0.707107,0.000000,0.000000,0.707107 +4011,0.707107,0.000000,0.000000,0.707107 +4012,0.707107,0.000000,0.000000,0.707107 +4013,0.707107,0.000000,0.000000,0.707107 +4014,0.707107,0.000000,0.000000,0.707107 +4015,0.707107,0.000000,0.000000,0.707107 +4016,0.707107,0.000000,0.000000,0.707107 +4017,0.707107,0.000000,0.000000,0.707107 +4018,0.707107,0.000000,0.000000,0.707107 +4019,0.707107,0.000000,0.000000,0.707107 +4020,0.707107,0.000000,0.000000,0.707107 +4021,0.707107,0.000000,0.000000,0.707107 +4022,0.707107,0.000000,0.000000,0.707107 +4023,0.707107,0.000000,0.000000,0.707107 +4024,0.707107,0.000000,0.000000,0.707107 +4025,0.707107,0.000000,0.000000,0.707107 +4026,0.707107,0.000000,0.000000,0.707107 +4027,0.707107,0.000000,0.000000,0.707107 +4028,0.707107,0.000000,0.000000,0.707107 +4029,0.707107,0.000000,0.000000,0.707107 +4030,0.707107,0.000000,0.000000,0.707107 +4031,0.707107,0.000000,0.000000,0.707107 +4032,0.707107,0.000000,0.000000,0.707107 +4033,0.707107,0.000000,0.000000,0.707107 +4034,0.707107,0.000000,0.000000,0.707107 +4035,0.707107,0.000000,0.000000,0.707107 +4036,0.707107,0.000000,0.000000,0.707107 +4037,0.707107,0.000000,0.000000,0.707107 +4038,0.707107,0.000000,0.000000,0.707107 +4039,0.707107,0.000000,0.000000,0.707107 +4040,0.707107,0.000000,0.000000,0.707107 +4041,0.707107,0.000000,0.000000,0.707107 +4042,0.707107,0.000000,0.000000,0.707107 +4043,0.707107,0.000000,0.000000,0.707107 +4044,0.707107,0.000000,0.000000,0.707107 +4045,0.707107,0.000000,0.000000,0.707107 +4046,0.707107,0.000000,0.000000,0.707107 +4047,0.707107,0.000000,0.000000,0.707107 +4048,0.707107,0.000000,0.000000,0.707107 +4049,0.707107,0.000000,0.000000,0.707107 +4050,0.707107,0.000000,0.000000,0.707107 +4051,0.707107,0.000000,0.000000,0.707107 +4052,0.707107,0.000000,0.000000,0.707107 +4053,0.707107,0.000000,0.000000,0.707107 +4054,0.707107,0.000000,0.000000,0.707107 +4055,0.707107,0.000000,0.000000,0.707107 +4056,0.707107,0.000000,0.000000,0.707107 +4057,0.707107,0.000000,0.000000,0.707107 +4058,0.707107,0.000000,0.000000,0.707107 +4059,0.707107,0.000000,0.000000,0.707107 +4060,0.707107,0.000000,0.000000,0.707107 +4061,0.707107,0.000000,0.000000,0.707107 +4062,0.707107,0.000000,0.000000,0.707107 +4063,0.707107,0.000000,0.000000,0.707107 +4064,0.707107,0.000000,0.000000,0.707107 +4065,0.707107,0.000000,0.000000,0.707107 +4066,0.707107,0.000000,0.000000,0.707107 +4067,0.707107,0.000000,0.000000,0.707107 +4068,0.707107,0.000000,0.000000,0.707107 +4069,0.707107,0.000000,0.000000,0.707107 +4070,0.707107,0.000000,0.000000,0.707107 +4071,0.707107,0.000000,0.000000,0.707107 +4072,0.707107,0.000000,0.000000,0.707107 +4073,0.707107,0.000000,0.000000,0.707107 +4074,0.707107,0.000000,0.000000,0.707107 +4075,0.707107,0.000000,0.000000,0.707107 +4076,0.707107,0.000000,0.000000,0.707107 +4077,0.707107,0.000000,0.000000,0.707107 +4078,0.707107,0.000000,0.000000,0.707107 +4079,0.707107,0.000000,0.000000,0.707107 +4080,0.707107,0.000000,0.000000,0.707107 +4081,0.707107,0.000000,0.000000,0.707107 +4082,0.707107,0.000000,0.000000,0.707107 +4083,0.707107,0.000000,0.000000,0.707107 +4084,0.707107,0.000000,0.000000,0.707107 +4085,0.707107,0.000000,0.000000,0.707107 +4086,0.707107,0.000000,0.000000,0.707107 +4087,0.707107,0.000000,0.000000,0.707107 +4088,0.707107,0.000000,0.000000,0.707107 +4089,0.707107,0.000000,0.000000,0.707107 +4090,0.707107,0.000000,0.000000,0.707107 +4091,0.707107,0.000000,0.000000,0.707107 +4092,0.707107,0.000000,0.000000,0.707107 +4093,0.707107,0.000000,0.000000,0.707107 +4094,0.707107,0.000000,0.000000,0.707107 +4095,0.707107,0.000000,0.000000,0.707107 +4096,0.707107,0.000000,0.000000,0.707107 +4097,0.707107,0.000000,0.000000,0.707107 +4098,0.707107,0.000000,0.000000,0.707107 +4099,0.707107,0.000000,0.000000,0.707107 +4100,0.707107,0.000000,0.000000,0.707107 +4101,0.707107,0.000000,0.000000,0.707107 +4102,0.707107,0.000000,0.000000,0.707107 +4103,0.707107,0.000000,0.000000,0.707107 +4104,0.707107,0.000000,0.000000,0.707107 +4105,0.707107,0.000000,0.000000,0.707107 +4106,0.707107,0.000000,0.000000,0.707107 +4107,0.707107,0.000000,0.000000,0.707107 +4108,0.707107,0.000000,0.000000,0.707107 +4109,0.707107,0.000000,0.000000,0.707107 +4110,0.707107,0.000000,0.000000,0.707107 +4111,0.707107,0.000000,0.000000,0.707107 +4112,0.707107,0.000000,0.000000,0.707107 +4113,0.707107,0.000000,0.000000,0.707107 +4114,0.707107,0.000000,0.000000,0.707107 +4115,0.707107,0.000000,0.000000,0.707107 +4116,0.707107,0.000000,0.000000,0.707107 +4117,0.707107,0.000000,0.000000,0.707107 +4118,0.707107,0.000000,0.000000,0.707107 +4119,0.707107,0.000000,0.000000,0.707107 +4120,0.707107,0.000000,0.000000,0.707107 +4121,0.707107,0.000000,0.000000,0.707107 +4122,0.707107,0.000000,0.000000,0.707107 +4123,0.707107,0.000000,0.000000,0.707107 +4124,0.707107,0.000000,0.000000,0.707107 +4125,0.707107,0.000000,0.000000,0.707107 +4126,0.707107,0.000000,0.000000,0.707107 +4127,0.707107,0.000000,0.000000,0.707107 +4128,0.707107,0.000000,0.000000,0.707107 +4129,0.707107,0.000000,0.000000,0.707107 +4130,0.707107,0.000000,0.000000,0.707107 +4131,0.707107,0.000000,0.000000,0.707107 +4132,0.707107,0.000000,0.000000,0.707107 +4133,0.707107,0.000000,0.000000,0.707107 +4134,0.707107,0.000000,0.000000,0.707107 +4135,0.707107,0.000000,0.000000,0.707107 +4136,0.707107,0.000000,0.000000,0.707107 +4137,0.707107,0.000000,0.000000,0.707107 +4138,0.707107,0.000000,0.000000,0.707107 +4139,0.707107,0.000000,0.000000,0.707107 +4140,0.707107,0.000000,0.000000,0.707107 +4141,0.707107,0.000000,0.000000,0.707107 +4142,0.707107,0.000000,0.000000,0.707107 +4143,0.707107,0.000000,0.000000,0.707107 +4144,0.707107,0.000000,0.000000,0.707107 +4145,0.707107,0.000000,0.000000,0.707107 +4146,0.707107,0.000000,0.000000,0.707107 +4147,0.707107,0.000000,0.000000,0.707107 +4148,0.707107,0.000000,0.000000,0.707107 +4149,0.707107,0.000000,0.000000,0.707107 +4150,0.707107,0.000000,0.000000,0.707107 +4151,0.707107,0.000000,0.000000,0.707107 +4152,0.707107,0.000000,0.000000,0.707107 +4153,0.707107,0.000000,0.000000,0.707107 +4154,0.707107,0.000000,0.000000,0.707107 +4155,0.707107,0.000000,0.000000,0.707107 +4156,0.707107,0.000000,0.000000,0.707107 +4157,0.707107,0.000000,0.000000,0.707107 +4158,0.707107,0.000000,0.000000,0.707107 +4159,0.707107,0.000000,0.000000,0.707107 +4160,0.707107,0.000000,0.000000,0.707107 +4161,0.707107,0.000000,0.000000,0.707107 +4162,0.707107,0.000000,0.000000,0.707107 +4163,0.707107,0.000000,0.000000,0.707107 +4164,0.707107,0.000000,0.000000,0.707107 +4165,0.707107,0.000000,0.000000,0.707107 +4166,0.707107,0.000000,0.000000,0.707107 +4167,0.707107,0.000000,0.000000,0.707107 +4168,0.707107,0.000000,0.000000,0.707107 +4169,0.707107,0.000000,0.000000,0.707107 +4170,0.707107,0.000000,0.000000,0.707107 +4171,0.707107,0.000000,0.000000,0.707107 +4172,0.707107,0.000000,0.000000,0.707107 +4173,0.707107,0.000000,0.000000,0.707107 +4174,0.707107,0.000000,0.000000,0.707107 +4175,0.707107,0.000000,0.000000,0.707107 +4176,0.707107,0.000000,0.000000,0.707107 +4177,0.707107,0.000000,0.000000,0.707107 +4178,0.707107,0.000000,0.000000,0.707107 +4179,0.707107,0.000000,0.000000,0.707107 +4180,0.707107,0.000000,0.000000,0.707107 +4181,0.707107,0.000000,0.000000,0.707107 +4182,0.707107,0.000000,0.000000,0.707107 +4183,0.707107,0.000000,0.000000,0.707107 +4184,0.707107,0.000000,0.000000,0.707107 +4185,0.707107,0.000000,0.000000,0.707107 +4186,0.707107,0.000000,0.000000,0.707107 +4187,0.707107,0.000000,0.000000,0.707107 +4188,0.707107,0.000000,0.000000,0.707107 +4189,0.707107,0.000000,0.000000,0.707107 +4190,0.707107,0.000000,0.000000,0.707107 +4191,0.707107,0.000000,0.000000,0.707107 +4192,0.707107,0.000000,0.000000,0.707107 +4193,0.707107,0.000000,0.000000,0.707107 +4194,0.707107,0.000000,0.000000,0.707107 +4195,0.707107,0.000000,0.000000,0.707107 +4196,0.707107,0.000000,0.000000,0.707107 +4197,0.707107,0.000000,0.000000,0.707107 +4198,0.707107,0.000000,0.000000,0.707107 +4199,0.707107,0.000000,0.000000,0.707107 +4200,0.707107,0.000000,0.000000,0.707107 +4201,0.707107,0.000000,0.000000,0.707107 +4202,0.707107,0.000000,0.000000,0.707107 +4203,0.707107,0.000000,0.000000,0.707107 +4204,0.707107,0.000000,0.000000,0.707107 +4205,0.707107,0.000000,0.000000,0.707107 +4206,0.707107,0.000000,0.000000,0.707107 +4207,0.707107,0.000000,0.000000,0.707107 +4208,0.707107,0.000000,0.000000,0.707107 +4209,0.707107,0.000000,0.000000,0.707107 +4210,0.707107,0.000000,0.000000,0.707107 +4211,0.707107,0.000000,0.000000,0.707107 +4212,0.707107,0.000000,0.000000,0.707107 +4213,0.707107,0.000000,0.000000,0.707107 +4214,0.707107,0.000000,0.000000,0.707107 +4215,0.707107,0.000000,0.000000,0.707107 +4216,0.707107,0.000000,0.000000,0.707107 +4217,0.707107,0.000000,0.000000,0.707107 +4218,0.707107,0.000000,0.000000,0.707107 +4219,0.707107,0.000000,0.000000,0.707107 +4220,0.707107,0.000000,0.000000,0.707107 +4221,0.707107,0.000000,0.000000,0.707107 +4222,0.707107,0.000000,0.000000,0.707107 +4223,0.707107,0.000000,0.000000,0.707107 +4224,0.707107,0.000000,0.000000,0.707107 +4225,0.707107,0.000000,0.000000,0.707107 +4226,0.707107,0.000000,0.000000,0.707107 +4227,0.707107,0.000000,0.000000,0.707107 +4228,0.707107,0.000000,0.000000,0.707107 +4229,0.707107,0.000000,0.000000,0.707107 +4230,0.707107,0.000000,0.000000,0.707107 +4231,0.707107,0.000000,0.000000,0.707107 +4232,0.707107,0.000000,0.000000,0.707107 +4233,0.707107,0.000000,0.000000,0.707107 +4234,0.707107,0.000000,0.000000,0.707107 +4235,0.707107,0.000000,0.000000,0.707107 +4236,0.707107,0.000000,0.000000,0.707107 +4237,0.707107,0.000000,0.000000,0.707107 +4238,0.707107,0.000000,0.000000,0.707107 +4239,0.707107,0.000000,0.000000,0.707107 +4240,0.707107,0.000000,0.000000,0.707107 +4241,0.707107,0.000000,0.000000,0.707107 +4242,0.707107,0.000000,0.000000,0.707107 +4243,0.707107,0.000000,0.000000,0.707107 +4244,0.707107,0.000000,0.000000,0.707107 +4245,0.707107,0.000000,0.000000,0.707107 +4246,0.707107,0.000000,0.000000,0.707107 +4247,0.707107,0.000000,0.000000,0.707107 +4248,0.707107,0.000000,0.000000,0.707107 +4249,0.707107,0.000000,0.000000,0.707107 +4250,0.707107,0.000000,0.000000,0.707107 +4251,0.707107,0.000000,0.000000,0.707107 +4252,0.707107,0.000000,0.000000,0.707107 +4253,0.707107,0.000000,0.000000,0.707107 +4254,0.707107,0.000000,0.000000,0.707107 +4255,0.707107,0.000000,0.000000,0.707107 +4256,0.707107,0.000000,0.000000,0.707107 +4257,0.707107,0.000000,0.000000,0.707107 +4258,0.707107,0.000000,0.000000,0.707107 +4259,0.707107,0.000000,0.000000,0.707107 +4260,0.707107,0.000000,0.000000,0.707107 +4261,0.707107,0.000000,0.000000,0.707107 +4262,0.707107,0.000000,0.000000,0.707107 +4263,0.707107,0.000000,0.000000,0.707107 +4264,0.707107,0.000000,0.000000,0.707107 +4265,0.707107,0.000000,0.000000,0.707107 +4266,0.707107,0.000000,0.000000,0.707107 +4267,0.707107,0.000000,0.000000,0.707107 +4268,0.707107,0.000000,0.000000,0.707107 +4269,0.707107,0.000000,0.000000,0.707107 +4270,0.707107,0.000000,0.000000,0.707107 +4271,0.707107,0.000000,0.000000,0.707107 +4272,0.707107,0.000000,0.000000,0.707107 +4273,0.707107,0.000000,0.000000,0.707107 +4274,0.707107,0.000000,0.000000,0.707107 +4275,0.707107,0.000000,0.000000,0.707107 +4276,0.707107,0.000000,0.000000,0.707107 +4277,0.707107,0.000000,0.000000,0.707107 +4278,0.707107,0.000000,0.000000,0.707107 +4279,0.707107,0.000000,0.000000,0.707107 +4280,0.707107,0.000000,0.000000,0.707107 +4281,0.707107,0.000000,0.000000,0.707107 +4282,0.707107,0.000000,0.000000,0.707107 +4283,0.707107,0.000000,0.000000,0.707107 +4284,0.707107,0.000000,0.000000,0.707107 +4285,0.707107,0.000000,0.000000,0.707107 +4286,0.707107,0.000000,0.000000,0.707107 +4287,0.707107,0.000000,0.000000,0.707107 +4288,0.707107,0.000000,0.000000,0.707107 +4289,0.707107,0.000000,0.000000,0.707107 +4290,0.707107,0.000000,0.000000,0.707107 +4291,0.707107,0.000000,0.000000,0.707107 +4292,0.707107,0.000000,0.000000,0.707107 +4293,0.707107,0.000000,0.000000,0.707107 +4294,0.707107,0.000000,0.000000,0.707107 +4295,0.707107,0.000000,0.000000,0.707107 +4296,0.707107,0.000000,0.000000,0.707107 +4297,0.707107,0.000000,0.000000,0.707107 +4298,0.707107,0.000000,0.000000,0.707107 +4299,0.707107,0.000000,0.000000,0.707107 +4300,0.707107,0.000000,0.000000,0.707107 +4301,0.707107,0.000000,0.000000,0.707107 +4302,0.707107,0.000000,0.000000,0.707107 +4303,0.707107,0.000000,0.000000,0.707107 +4304,0.707107,0.000000,0.000000,0.707107 +4305,0.707107,0.000000,0.000000,0.707107 +4306,0.707107,0.000000,0.000000,0.707107 +4307,0.707107,0.000000,0.000000,0.707107 +4308,0.707107,0.000000,0.000000,0.707107 +4309,0.707107,0.000000,0.000000,0.707107 +4310,0.707107,0.000000,0.000000,0.707107 +4311,0.707107,0.000000,0.000000,0.707107 +4312,0.707107,0.000000,0.000000,0.707107 +4313,0.707107,0.000000,0.000000,0.707107 +4314,0.707107,0.000000,0.000000,0.707107 +4315,0.707107,0.000000,0.000000,0.707107 +4316,0.707107,0.000000,0.000000,0.707107 +4317,0.707107,0.000000,0.000000,0.707107 +4318,0.707107,0.000000,0.000000,0.707107 +4319,0.707107,0.000000,0.000000,0.707107 +4320,0.707107,0.000000,0.000000,0.707107 +4321,0.707107,0.000000,0.000000,0.707107 +4322,0.707107,0.000000,0.000000,0.707107 +4323,0.707107,0.000000,0.000000,0.707107 +4324,0.707107,0.000000,0.000000,0.707107 +4325,0.707107,0.000000,0.000000,0.707107 +4326,0.707107,0.000000,0.000000,0.707107 +4327,0.707107,0.000000,0.000000,0.707107 +4328,0.707107,0.000000,0.000000,0.707107 +4329,0.707107,0.000000,0.000000,0.707107 +4330,0.707107,0.000000,0.000000,0.707107 +4331,0.707107,0.000000,0.000000,0.707107 +4332,0.707107,0.000000,0.000000,0.707107 +4333,0.707107,0.000000,0.000000,0.707107 +4334,0.707107,0.000000,0.000000,0.707107 +4335,0.707107,0.000000,0.000000,0.707107 +4336,0.707107,0.000000,0.000000,0.707107 +4337,0.707107,0.000000,0.000000,0.707107 +4338,0.707107,0.000000,0.000000,0.707107 +4339,0.707107,0.000000,0.000000,0.707107 +4340,0.707107,0.000000,0.000000,0.707107 +4341,0.707107,0.000000,0.000000,0.707107 +4342,0.707107,0.000000,0.000000,0.707107 +4343,0.707107,0.000000,0.000000,0.707107 +4344,0.707107,0.000000,0.000000,0.707107 +4345,0.707107,0.000000,0.000000,0.707107 +4346,0.707107,0.000000,0.000000,0.707107 +4347,0.707107,0.000000,0.000000,0.707107 +4348,0.707107,0.000000,0.000000,0.707107 +4349,0.707107,0.000000,0.000000,0.707107 +4350,0.707107,0.000000,0.000000,0.707107 +4351,0.707107,0.000000,0.000000,0.707107 +4352,0.707107,0.000000,0.000000,0.707107 +4353,0.707107,0.000000,0.000000,0.707107 +4354,0.707107,0.000000,0.000000,0.707107 +4355,0.707107,0.000000,0.000000,0.707107 +4356,0.707107,0.000000,0.000000,0.707107 +4357,0.707107,0.000000,0.000000,0.707107 +4358,0.707107,0.000000,0.000000,0.707107 +4359,0.707107,0.000000,0.000000,0.707107 +4360,0.707107,0.000000,0.000000,0.707107 +4361,0.707107,0.000000,0.000000,0.707107 +4362,0.707107,0.000000,0.000000,0.707107 +4363,0.707107,0.000000,0.000000,0.707107 +4364,0.707107,0.000000,0.000000,0.707107 +4365,0.707107,0.000000,0.000000,0.707107 +4366,0.707107,0.000000,0.000000,0.707107 +4367,0.707107,0.000000,0.000000,0.707107 +4368,0.707107,0.000000,0.000000,0.707107 +4369,0.707107,0.000000,0.000000,0.707107 +4370,0.707107,0.000000,0.000000,0.707107 +4371,0.707107,0.000000,0.000000,0.707107 +4372,0.707107,0.000000,0.000000,0.707107 +4373,0.707107,0.000000,0.000000,0.707107 +4374,0.707107,0.000000,0.000000,0.707107 +4375,0.707107,0.000000,0.000000,0.707107 +4376,0.707107,0.000000,0.000000,0.707107 +4377,0.707107,0.000000,0.000000,0.707107 +4378,0.707107,0.000000,0.000000,0.707107 +4379,0.707107,0.000000,0.000000,0.707107 +4380,0.707107,0.000000,0.000000,0.707107 +4381,0.707107,0.000000,0.000000,0.707107 +4382,0.707107,0.000000,0.000000,0.707107 +4383,0.707107,0.000000,0.000000,0.707107 +4384,0.707107,0.000000,0.000000,0.707107 +4385,0.707107,0.000000,0.000000,0.707107 +4386,0.707107,0.000000,0.000000,0.707107 +4387,0.707107,0.000000,0.000000,0.707107 +4388,0.707107,0.000000,0.000000,0.707107 +4389,0.707107,0.000000,0.000000,0.707107 +4390,0.707107,0.000000,0.000000,0.707107 +4391,0.707107,0.000000,0.000000,0.707107 +4392,0.707107,0.000000,0.000000,0.707107 +4393,0.707107,0.000000,0.000000,0.707107 +4394,0.707107,0.000000,0.000000,0.707107 +4395,0.707107,0.000000,0.000000,0.707107 +4396,0.707107,0.000000,0.000000,0.707107 +4397,0.707107,0.000000,0.000000,0.707107 +4398,0.707107,0.000000,0.000000,0.707107 +4399,0.707107,0.000000,0.000000,0.707107 +4400,0.707107,0.000000,0.000000,0.707107 +4401,0.707107,0.000000,0.000000,0.707107 +4402,0.707107,0.000000,0.000000,0.707107 +4403,0.707107,0.000000,0.000000,0.707107 +4404,0.707107,0.000000,0.000000,0.707107 +4405,0.707107,0.000000,0.000000,0.707107 +4406,0.707107,0.000000,0.000000,0.707107 +4407,0.707107,0.000000,0.000000,0.707107 +4408,0.707107,0.000000,0.000000,0.707107 +4409,0.707107,0.000000,0.000000,0.707107 +4410,0.707107,0.000000,0.000000,0.707107 +4411,0.707107,0.000000,0.000000,0.707107 +4412,0.707107,0.000000,0.000000,0.707107 +4413,0.707107,0.000000,0.000000,0.707107 +4414,0.707107,0.000000,0.000000,0.707107 +4415,0.707107,0.000000,0.000000,0.707107 +4416,0.707107,0.000000,0.000000,0.707107 +4417,0.707107,0.000000,0.000000,0.707107 +4418,0.707107,0.000000,0.000000,0.707107 +4419,0.707107,0.000000,0.000000,0.707107 +4420,0.707107,0.000000,0.000000,0.707107 +4421,0.707107,0.000000,0.000000,0.707107 +4422,0.707107,0.000000,0.000000,0.707107 +4423,0.707107,0.000000,0.000000,0.707107 +4424,0.707107,0.000000,0.000000,0.707107 +4425,0.707107,0.000000,0.000000,0.707107 +4426,0.707107,0.000000,0.000000,0.707107 +4427,0.707107,0.000000,0.000000,0.707107 +4428,0.707107,0.000000,0.000000,0.707107 +4429,0.707107,0.000000,0.000000,0.707107 +4430,0.707107,0.000000,0.000000,0.707107 +4431,0.707107,0.000000,0.000000,0.707107 +4432,0.707107,0.000000,0.000000,0.707107 +4433,0.707107,0.000000,0.000000,0.707107 +4434,0.707107,0.000000,0.000000,0.707107 +4435,0.707107,0.000000,0.000000,0.707107 +4436,0.707107,0.000000,0.000000,0.707107 +4437,0.707107,0.000000,0.000000,0.707107 +4438,0.707107,0.000000,0.000000,0.707107 +4439,0.707107,0.000000,0.000000,0.707107 +4440,0.707107,0.000000,0.000000,0.707107 +4441,0.707107,0.000000,0.000000,0.707107 +4442,0.707107,0.000000,0.000000,0.707107 +4443,0.707107,0.000000,0.000000,0.707107 +4444,0.707107,0.000000,0.000000,0.707107 +4445,0.707107,0.000000,0.000000,0.707107 +4446,0.707107,0.000000,0.000000,0.707107 +4447,0.707107,0.000000,0.000000,0.707107 +4448,0.707107,0.000000,0.000000,0.707107 +4449,0.707107,0.000000,0.000000,0.707107 +4450,0.707107,0.000000,0.000000,0.707107 +4451,0.707107,0.000000,0.000000,0.707107 +4452,0.707107,0.000000,0.000000,0.707107 +4453,0.707107,0.000000,0.000000,0.707107 +4454,0.707107,0.000000,0.000000,0.707107 +4455,0.707107,0.000000,0.000000,0.707107 +4456,0.707107,0.000000,0.000000,0.707107 +4457,0.707107,0.000000,0.000000,0.707107 +4458,0.707107,0.000000,0.000000,0.707107 +4459,0.707107,0.000000,0.000000,0.707107 +4460,0.707107,0.000000,0.000000,0.707107 +4461,0.707107,0.000000,0.000000,0.707107 +4462,0.707107,0.000000,0.000000,0.707107 +4463,0.707107,0.000000,0.000000,0.707107 +4464,0.707107,0.000000,0.000000,0.707107 +4465,0.707107,0.000000,0.000000,0.707107 +4466,0.707107,0.000000,0.000000,0.707107 +4467,0.707107,0.000000,0.000000,0.707107 +4468,0.707107,0.000000,0.000000,0.707107 +4469,0.707107,0.000000,0.000000,0.707107 +4470,0.707107,0.000000,0.000000,0.707107 +4471,0.707107,0.000000,0.000000,0.707107 +4472,0.707107,0.000000,0.000000,0.707107 +4473,0.707107,0.000000,0.000000,0.707107 +4474,0.707107,0.000000,0.000000,0.707107 +4475,0.707107,0.000000,0.000000,0.707107 +4476,0.707107,0.000000,0.000000,0.707107 +4477,0.707107,0.000000,0.000000,0.707107 +4478,0.707107,0.000000,0.000000,0.707107 +4479,0.707107,0.000000,0.000000,0.707107 +4480,0.707107,0.000000,0.000000,0.707107 +4481,0.707107,0.000000,0.000000,0.707107 +4482,0.707107,0.000000,0.000000,0.707107 +4483,0.707107,0.000000,0.000000,0.707107 +4484,0.707107,0.000000,0.000000,0.707107 +4485,0.707107,0.000000,0.000000,0.707107 +4486,0.707107,0.000000,0.000000,0.707107 +4487,0.707107,0.000000,0.000000,0.707107 +4488,0.707107,0.000000,0.000000,0.707107 +4489,0.707107,0.000000,0.000000,0.707107 +4490,0.707107,0.000000,0.000000,0.707107 +4491,0.707107,0.000000,0.000000,0.707107 +4492,0.707107,0.000000,0.000000,0.707107 +4493,0.707107,0.000000,0.000000,0.707107 +4494,0.707107,0.000000,0.000000,0.707107 +4495,0.707107,0.000000,0.000000,0.707107 +4496,0.707107,0.000000,0.000000,0.707107 +4497,0.707107,0.000000,0.000000,0.707107 +4498,0.707107,0.000000,0.000000,0.707107 +4499,0.707107,0.000000,0.000000,0.707107 +4500,0.707107,0.000000,0.000000,0.707107 +4501,0.707107,0.000000,0.000000,0.707107 +4502,0.707107,0.000000,0.000000,0.707107 +4503,0.707107,0.000000,0.000000,0.707107 +4504,0.707107,0.000000,0.000000,0.707107 +4505,0.707107,0.000000,0.000000,0.707107 +4506,0.707107,0.000000,0.000000,0.707107 +4507,0.707107,0.000000,0.000000,0.707107 +4508,0.707107,0.000000,0.000000,0.707107 +4509,0.707107,0.000000,0.000000,0.707107 +4510,0.707107,0.000000,0.000000,0.707107 +4511,0.707107,0.000000,0.000000,0.707107 +4512,0.707107,0.000000,0.000000,0.707107 +4513,0.707107,0.000000,0.000000,0.707107 +4514,0.707107,0.000000,0.000000,0.707107 +4515,0.707107,0.000000,0.000000,0.707107 +4516,0.707107,0.000000,0.000000,0.707107 +4517,0.707107,0.000000,0.000000,0.707107 +4518,0.707107,0.000000,0.000000,0.707107 +4519,0.707107,0.000000,0.000000,0.707107 +4520,0.707107,0.000000,0.000000,0.707107 +4521,0.707107,0.000000,0.000000,0.707107 +4522,0.707107,0.000000,0.000000,0.707107 +4523,0.707107,0.000000,0.000000,0.707107 +4524,0.707107,0.000000,0.000000,0.707107 +4525,0.707107,0.000000,0.000000,0.707107 +4526,0.707107,0.000000,0.000000,0.707107 +4527,0.707107,0.000000,0.000000,0.707107 +4528,0.707107,0.000000,0.000000,0.707107 +4529,0.707107,0.000000,0.000000,0.707107 +4530,0.707107,0.000000,0.000000,0.707107 +4531,0.707107,0.000000,0.000000,0.707107 +4532,0.707107,0.000000,0.000000,0.707107 +4533,0.707107,0.000000,0.000000,0.707107 +4534,0.707107,0.000000,0.000000,0.707107 +4535,0.707107,0.000000,0.000000,0.707107 +4536,0.707107,0.000000,0.000000,0.707107 +4537,0.707107,0.000000,0.000000,0.707107 +4538,0.707107,0.000000,0.000000,0.707107 +4539,0.707107,0.000000,0.000000,0.707107 +4540,0.707107,0.000000,0.000000,0.707107 +4541,0.707107,0.000000,0.000000,0.707107 +4542,0.707107,0.000000,0.000000,0.707107 +4543,0.707107,0.000000,0.000000,0.707107 +4544,0.707107,0.000000,0.000000,0.707107 +4545,0.707107,0.000000,0.000000,0.707107 +4546,0.707107,0.000000,0.000000,0.707107 +4547,0.707107,0.000000,0.000000,0.707107 +4548,0.707107,0.000000,0.000000,0.707107 +4549,0.707107,0.000000,0.000000,0.707107 +4550,0.707107,0.000000,0.000000,0.707107 +4551,0.707107,0.000000,0.000000,0.707107 +4552,0.707107,0.000000,0.000000,0.707107 +4553,0.707107,0.000000,0.000000,0.707107 +4554,0.707107,0.000000,0.000000,0.707107 +4555,0.707107,0.000000,0.000000,0.707107 +4556,0.707107,0.000000,0.000000,0.707107 +4557,0.707107,0.000000,0.000000,0.707107 +4558,0.707107,0.000000,0.000000,0.707107 +4559,0.707107,0.000000,0.000000,0.707107 +4560,0.707107,0.000000,0.000000,0.707107 +4561,0.707107,0.000000,0.000000,0.707107 +4562,0.707107,0.000000,0.000000,0.707107 +4563,0.707107,0.000000,0.000000,0.707107 +4564,0.707107,0.000000,0.000000,0.707107 +4565,0.707107,0.000000,0.000000,0.707107 +4566,0.707107,0.000000,0.000000,0.707107 +4567,0.707107,0.000000,0.000000,0.707107 +4568,0.707107,0.000000,0.000000,0.707107 +4569,0.707107,0.000000,0.000000,0.707107 +4570,0.707107,0.000000,0.000000,0.707107 +4571,0.707107,0.000000,0.000000,0.707107 +4572,0.707107,0.000000,0.000000,0.707107 +4573,0.707107,0.000000,0.000000,0.707107 +4574,0.707107,0.000000,0.000000,0.707107 +4575,0.707107,0.000000,0.000000,0.707107 +4576,0.707107,0.000000,0.000000,0.707107 +4577,0.707107,0.000000,0.000000,0.707107 +4578,0.707107,0.000000,0.000000,0.707107 +4579,0.707107,0.000000,0.000000,0.707107 +4580,0.707107,0.000000,0.000000,0.707107 +4581,0.707107,0.000000,0.000000,0.707107 +4582,0.707107,0.000000,0.000000,0.707107 +4583,0.707107,0.000000,0.000000,0.707107 +4584,0.707107,0.000000,0.000000,0.707107 +4585,0.707107,0.000000,0.000000,0.707107 +4586,0.707107,0.000000,0.000000,0.707107 +4587,0.707107,0.000000,0.000000,0.707107 +4588,0.707107,0.000000,0.000000,0.707107 +4589,0.707107,0.000000,0.000000,0.707107 +4590,0.707107,0.000000,0.000000,0.707107 +4591,0.707107,0.000000,0.000000,0.707107 +4592,0.707107,0.000000,0.000000,0.707107 +4593,0.707107,0.000000,0.000000,0.707107 +4594,0.707107,0.000000,0.000000,0.707107 +4595,0.707107,0.000000,0.000000,0.707107 +4596,0.707107,0.000000,0.000000,0.707107 +4597,0.707107,0.000000,0.000000,0.707107 +4598,0.707107,0.000000,0.000000,0.707107 +4599,0.707107,0.000000,0.000000,0.707107 +4600,0.707107,0.000000,0.000000,0.707107 +4601,0.707107,0.000000,0.000000,0.707107 +4602,0.707107,0.000000,0.000000,0.707107 +4603,0.707107,0.000000,0.000000,0.707107 +4604,0.707107,0.000000,0.000000,0.707107 +4605,0.707107,0.000000,0.000000,0.707107 +4606,0.707107,0.000000,0.000000,0.707107 +4607,0.707107,0.000000,0.000000,0.707107 +4608,0.707107,0.000000,0.000000,0.707107 +4609,0.707107,0.000000,0.000000,0.707107 +4610,0.707107,0.000000,0.000000,0.707107 +4611,0.707107,0.000000,0.000000,0.707107 +4612,0.707107,0.000000,0.000000,0.707107 +4613,0.707107,0.000000,0.000000,0.707107 +4614,0.707107,0.000000,0.000000,0.707107 +4615,0.707107,0.000000,0.000000,0.707107 +4616,0.707107,0.000000,0.000000,0.707107 +4617,0.707107,0.000000,0.000000,0.707107 +4618,0.707107,0.000000,0.000000,0.707107 +4619,0.707107,0.000000,0.000000,0.707107 +4620,0.707107,0.000000,0.000000,0.707107 +4621,0.707107,0.000000,0.000000,0.707107 +4622,0.707107,0.000000,0.000000,0.707107 +4623,0.707107,0.000000,0.000000,0.707107 +4624,0.707107,0.000000,0.000000,0.707107 +4625,0.707107,0.000000,0.000000,0.707107 +4626,0.707107,0.000000,0.000000,0.707107 +4627,0.707107,0.000000,0.000000,0.707107 +4628,0.707107,0.000000,0.000000,0.707107 +4629,0.707107,0.000000,0.000000,0.707107 +4630,0.707107,0.000000,0.000000,0.707107 +4631,0.707107,0.000000,0.000000,0.707107 +4632,0.707107,0.000000,0.000000,0.707107 +4633,0.707107,0.000000,0.000000,0.707107 +4634,0.707107,0.000000,0.000000,0.707107 +4635,0.707107,0.000000,0.000000,0.707107 +4636,0.707107,0.000000,0.000000,0.707107 +4637,0.707107,0.000000,0.000000,0.707107 +4638,0.707107,0.000000,0.000000,0.707107 +4639,0.707107,0.000000,0.000000,0.707107 +4640,0.707107,0.000000,0.000000,0.707107 +4641,0.707107,0.000000,0.000000,0.707107 +4642,0.707107,0.000000,0.000000,0.707107 +4643,0.707107,0.000000,0.000000,0.707107 +4644,0.707107,0.000000,0.000000,0.707107 +4645,0.707107,0.000000,0.000000,0.707107 +4646,0.707107,0.000000,0.000000,0.707107 +4647,0.707107,0.000000,0.000000,0.707107 +4648,0.707107,0.000000,0.000000,0.707107 +4649,0.707107,0.000000,0.000000,0.707107 +4650,0.707107,0.000000,0.000000,0.707107 +4651,0.707107,0.000000,0.000000,0.707107 +4652,0.707107,0.000000,0.000000,0.707107 +4653,0.707107,0.000000,0.000000,0.707107 +4654,0.707107,0.000000,0.000000,0.707107 +4655,0.707107,0.000000,0.000000,0.707107 +4656,0.707107,0.000000,0.000000,0.707107 +4657,0.707107,0.000000,0.000000,0.707107 +4658,0.707107,0.000000,0.000000,0.707107 +4659,0.707107,0.000000,0.000000,0.707107 +4660,0.707107,0.000000,0.000000,0.707107 +4661,0.707107,0.000000,0.000000,0.707107 +4662,0.707107,0.000000,0.000000,0.707107 +4663,0.707107,0.000000,0.000000,0.707107 +4664,0.707107,0.000000,0.000000,0.707107 +4665,0.707107,0.000000,0.000000,0.707107 +4666,0.707107,0.000000,0.000000,0.707107 +4667,0.707107,0.000000,0.000000,0.707107 +4668,0.707107,0.000000,0.000000,0.707107 +4669,0.707107,0.000000,0.000000,0.707107 +4670,0.707107,0.000000,0.000000,0.707107 +4671,0.707107,0.000000,0.000000,0.707107 +4672,0.707107,0.000000,0.000000,0.707107 +4673,0.707107,0.000000,0.000000,0.707107 +4674,0.707107,0.000000,0.000000,0.707107 +4675,0.707107,0.000000,0.000000,0.707107 +4676,0.707107,0.000000,0.000000,0.707107 +4677,0.707107,0.000000,0.000000,0.707107 +4678,0.707107,0.000000,0.000000,0.707107 +4679,0.707107,0.000000,0.000000,0.707107 +4680,0.707107,0.000000,0.000000,0.707107 +4681,0.707107,0.000000,0.000000,0.707107 +4682,0.707107,0.000000,0.000000,0.707107 +4683,0.707107,0.000000,0.000000,0.707107 +4684,0.707107,0.000000,0.000000,0.707107 +4685,0.707107,0.000000,0.000000,0.707107 +4686,0.707107,0.000000,0.000000,0.707107 +4687,0.707107,0.000000,0.000000,0.707107 +4688,0.707107,0.000000,0.000000,0.707107 +4689,0.707107,0.000000,0.000000,0.707107 +4690,0.707107,0.000000,0.000000,0.707107 +4691,0.707107,0.000000,0.000000,0.707107 +4692,0.707107,0.000000,0.000000,0.707107 +4693,0.707107,0.000000,0.000000,0.707107 +4694,0.707107,0.000000,0.000000,0.707107 +4695,0.707107,0.000000,0.000000,0.707107 +4696,0.707107,0.000000,0.000000,0.707107 +4697,0.707107,0.000000,0.000000,0.707107 +4698,0.707107,0.000000,0.000000,0.707107 +4699,0.707107,0.000000,0.000000,0.707107 +4700,0.707107,0.000000,0.000000,0.707107 +4701,0.707107,0.000000,0.000000,0.707107 +4702,0.707107,0.000000,0.000000,0.707107 +4703,0.707107,0.000000,0.000000,0.707107 +4704,0.707107,0.000000,0.000000,0.707107 +4705,0.707107,0.000000,0.000000,0.707107 +4706,0.707107,0.000000,0.000000,0.707107 +4707,0.707107,0.000000,0.000000,0.707107 +4708,0.707107,0.000000,0.000000,0.707107 +4709,0.707107,0.000000,0.000000,0.707107 +4710,0.707107,0.000000,0.000000,0.707107 +4711,0.707107,0.000000,0.000000,0.707107 +4712,0.707107,0.000000,0.000000,0.707107 +4713,0.707107,0.000000,0.000000,0.707107 +4714,0.707107,0.000000,0.000000,0.707107 +4715,0.707107,0.000000,0.000000,0.707107 +4716,0.707107,0.000000,0.000000,0.707107 +4717,0.707107,0.000000,0.000000,0.707107 +4718,0.707107,0.000000,0.000000,0.707107 +4719,0.707107,0.000000,0.000000,0.707107 +4720,0.707107,0.000000,0.000000,0.707107 +4721,0.707107,0.000000,0.000000,0.707107 +4722,0.707107,0.000000,0.000000,0.707107 +4723,0.707107,0.000000,0.000000,0.707107 +4724,0.707107,0.000000,0.000000,0.707107 +4725,0.707107,0.000000,0.000000,0.707107 +4726,0.707107,0.000000,0.000000,0.707107 +4727,0.707107,0.000000,0.000000,0.707107 +4728,0.707107,0.000000,0.000000,0.707107 +4729,0.707107,0.000000,0.000000,0.707107 +4730,0.707107,0.000000,0.000000,0.707107 +4731,0.707107,0.000000,0.000000,0.707107 +4732,0.707107,0.000000,0.000000,0.707107 +4733,0.707107,0.000000,0.000000,0.707107 +4734,0.707107,0.000000,0.000000,0.707107 +4735,0.707107,0.000000,0.000000,0.707107 +4736,0.707107,0.000000,0.000000,0.707107 +4737,0.707107,0.000000,0.000000,0.707107 +4738,0.707107,0.000000,0.000000,0.707107 +4739,0.707107,0.000000,0.000000,0.707107 +4740,0.707107,0.000000,0.000000,0.707107 +4741,0.707107,0.000000,0.000000,0.707107 +4742,0.707107,0.000000,0.000000,0.707107 +4743,0.707107,0.000000,0.000000,0.707107 +4744,0.707107,0.000000,0.000000,0.707107 +4745,0.707107,0.000000,0.000000,0.707107 +4746,0.707107,0.000000,0.000000,0.707107 +4747,0.707107,0.000000,0.000000,0.707107 +4748,0.707107,0.000000,0.000000,0.707107 +4749,0.707107,0.000000,0.000000,0.707107 +4750,0.707107,0.000000,0.000000,0.707107 +4751,0.707107,0.000000,0.000000,0.707107 +4752,0.707107,0.000000,0.000000,0.707107 +4753,0.707107,0.000000,0.000000,0.707107 +4754,0.707107,0.000000,0.000000,0.707107 +4755,0.707107,0.000000,0.000000,0.707107 +4756,0.707107,0.000000,0.000000,0.707107 +4757,0.707107,0.000000,0.000000,0.707107 +4758,0.707107,0.000000,0.000000,0.707107 +4759,0.707107,0.000000,0.000000,0.707107 +4760,0.707107,0.000000,0.000000,0.707107 +4761,0.707107,0.000000,0.000000,0.707107 +4762,0.707107,0.000000,0.000000,0.707107 +4763,0.707107,0.000000,0.000000,0.707107 +4764,0.707107,0.000000,0.000000,0.707107 +4765,0.707107,0.000000,0.000000,0.707107 +4766,0.707107,0.000000,0.000000,0.707107 +4767,0.707107,0.000000,0.000000,0.707107 +4768,0.707107,0.000000,0.000000,0.707107 +4769,0.707107,0.000000,0.000000,0.707107 +4770,0.707107,0.000000,0.000000,0.707107 +4771,0.707107,0.000000,0.000000,0.707107 +4772,0.707107,0.000000,0.000000,0.707107 +4773,0.707107,0.000000,0.000000,0.707107 +4774,0.707107,0.000000,0.000000,0.707107 +4775,0.707107,0.000000,0.000000,0.707107 +4776,0.707107,0.000000,0.000000,0.707107 +4777,0.707107,0.000000,0.000000,0.707107 +4778,0.707107,0.000000,0.000000,0.707107 +4779,0.707107,0.000000,0.000000,0.707107 +4780,0.707107,0.000000,0.000000,0.707107 +4781,0.707107,0.000000,0.000000,0.707107 +4782,0.707107,0.000000,0.000000,0.707107 +4783,0.707107,0.000000,0.000000,0.707107 +4784,0.707107,0.000000,0.000000,0.707107 +4785,0.707107,0.000000,0.000000,0.707107 +4786,0.707107,0.000000,0.000000,0.707107 +4787,0.707107,0.000000,0.000000,0.707107 +4788,0.707107,0.000000,0.000000,0.707107 +4789,0.707107,0.000000,0.000000,0.707107 +4790,0.707107,0.000000,0.000000,0.707107 +4791,0.707107,0.000000,0.000000,0.707107 +4792,0.707107,0.000000,0.000000,0.707107 +4793,0.707107,0.000000,0.000000,0.707107 +4794,0.707107,0.000000,0.000000,0.707107 +4795,0.707107,0.000000,0.000000,0.707107 +4796,0.707107,0.000000,0.000000,0.707107 +4797,0.707107,0.000000,0.000000,0.707107 +4798,0.707107,0.000000,0.000000,0.707107 +4799,0.707107,0.000000,0.000000,0.707107 +4800,0.707107,0.000000,0.000000,0.707107 +4801,0.707107,0.000000,0.000000,0.707107 +4802,0.707107,0.000000,0.000000,0.707107 +4803,0.707107,0.000000,0.000000,0.707107 +4804,0.707107,0.000000,0.000000,0.707107 +4805,0.707107,0.000000,0.000000,0.707107 +4806,0.707107,0.000000,0.000000,0.707107 +4807,0.707107,0.000000,0.000000,0.707107 +4808,0.707107,0.000000,0.000000,0.707107 +4809,0.707107,0.000000,0.000000,0.707107 +4810,0.707107,0.000000,0.000000,0.707107 +4811,0.707107,0.000000,0.000000,0.707107 +4812,0.707107,0.000000,0.000000,0.707107 +4813,0.707107,0.000000,0.000000,0.707107 +4814,0.707107,0.000000,0.000000,0.707107 +4815,0.707107,0.000000,0.000000,0.707107 +4816,0.707107,0.000000,0.000000,0.707107 +4817,0.707107,0.000000,0.000000,0.707107 +4818,0.707107,0.000000,0.000000,0.707107 +4819,0.707107,0.000000,0.000000,0.707107 +4820,0.707107,0.000000,0.000000,0.707107 +4821,0.707107,0.000000,0.000000,0.707107 +4822,0.707107,0.000000,0.000000,0.707107 +4823,0.707107,0.000000,0.000000,0.707107 +4824,0.707107,0.000000,0.000000,0.707107 +4825,0.707107,0.000000,0.000000,0.707107 +4826,0.707107,0.000000,0.000000,0.707107 +4827,0.707107,0.000000,0.000000,0.707107 +4828,0.707107,0.000000,0.000000,0.707107 +4829,0.707107,0.000000,0.000000,0.707107 +4830,0.707107,0.000000,0.000000,0.707107 +4831,0.707107,0.000000,0.000000,0.707107 +4832,0.707107,0.000000,0.000000,0.707107 +4833,0.707107,0.000000,0.000000,0.707107 +4834,0.707107,0.000000,0.000000,0.707107 +4835,0.707107,0.000000,0.000000,0.707107 +4836,0.707107,0.000000,0.000000,0.707107 +4837,0.707107,0.000000,0.000000,0.707107 +4838,0.707107,0.000000,0.000000,0.707107 +4839,0.707107,0.000000,0.000000,0.707107 +4840,0.707107,0.000000,0.000000,0.707107 +4841,0.707107,0.000000,0.000000,0.707107 +4842,0.707107,0.000000,0.000000,0.707107 +4843,0.707107,0.000000,0.000000,0.707107 +4844,0.707107,0.000000,0.000000,0.707107 +4845,0.707107,0.000000,0.000000,0.707107 +4846,0.707107,0.000000,0.000000,0.707107 +4847,0.707107,0.000000,0.000000,0.707107 +4848,0.707107,0.000000,0.000000,0.707107 +4849,0.707107,0.000000,0.000000,0.707107 +4850,0.707107,0.000000,0.000000,0.707107 +4851,0.707107,0.000000,0.000000,0.707107 +4852,0.707107,0.000000,0.000000,0.707107 +4853,0.707107,0.000000,0.000000,0.707107 +4854,0.707107,0.000000,0.000000,0.707107 +4855,0.707107,0.000000,0.000000,0.707107 +4856,0.707107,0.000000,0.000000,0.707107 +4857,0.707107,0.000000,0.000000,0.707107 +4858,0.707107,0.000000,0.000000,0.707107 +4859,0.707107,0.000000,0.000000,0.707107 +4860,0.707107,0.000000,0.000000,0.707107 +4861,0.707107,0.000000,0.000000,0.707107 +4862,0.707107,0.000000,0.000000,0.707107 +4863,0.707107,0.000000,0.000000,0.707107 +4864,0.707107,0.000000,0.000000,0.707107 +4865,0.707107,0.000000,0.000000,0.707107 +4866,0.707107,0.000000,0.000000,0.707107 +4867,0.707107,0.000000,0.000000,0.707107 +4868,0.707107,0.000000,0.000000,0.707107 +4869,0.707107,0.000000,0.000000,0.707107 +4870,0.707107,0.000000,0.000000,0.707107 +4871,0.707107,0.000000,0.000000,0.707107 +4872,0.707107,0.000000,0.000000,0.707107 +4873,0.707107,0.000000,0.000000,0.707107 +4874,0.707107,0.000000,0.000000,0.707107 +4875,0.707107,0.000000,0.000000,0.707107 +4876,0.707107,0.000000,0.000000,0.707107 +4877,0.707107,0.000000,0.000000,0.707107 +4878,0.707107,0.000000,0.000000,0.707107 +4879,0.707107,0.000000,0.000000,0.707107 +4880,0.707107,0.000000,0.000000,0.707107 +4881,0.707107,0.000000,0.000000,0.707107 +4882,0.707107,0.000000,0.000000,0.707107 +4883,0.707107,0.000000,0.000000,0.707107 +4884,0.707107,0.000000,0.000000,0.707107 +4885,0.707107,0.000000,0.000000,0.707107 +4886,0.707107,0.000000,0.000000,0.707107 +4887,0.707107,0.000000,0.000000,0.707107 +4888,0.707107,0.000000,0.000000,0.707107 +4889,0.707107,0.000000,0.000000,0.707107 +4890,0.707107,0.000000,0.000000,0.707107 +4891,0.707107,0.000000,0.000000,0.707107 +4892,0.707107,0.000000,0.000000,0.707107 +4893,0.707107,0.000000,0.000000,0.707107 +4894,0.707107,0.000000,0.000000,0.707107 +4895,0.707107,0.000000,0.000000,0.707107 +4896,0.707107,0.000000,0.000000,0.707107 +4897,0.707107,0.000000,0.000000,0.707107 +4898,0.707107,0.000000,0.000000,0.707107 +4899,0.707107,0.000000,0.000000,0.707107 +4900,0.707107,0.000000,0.000000,0.707107 +4901,0.707107,0.000000,0.000000,0.707107 +4902,0.707107,0.000000,0.000000,0.707107 +4903,0.707107,0.000000,0.000000,0.707107 +4904,0.707107,0.000000,0.000000,0.707107 +4905,0.707107,0.000000,0.000000,0.707107 +4906,0.707107,0.000000,0.000000,0.707107 +4907,0.707107,0.000000,0.000000,0.707107 +4908,0.707107,0.000000,0.000000,0.707107 +4909,0.707107,0.000000,0.000000,0.707107 +4910,0.707107,0.000000,0.000000,0.707107 +4911,0.707107,0.000000,0.000000,0.707107 +4912,0.707107,0.000000,0.000000,0.707107 +4913,0.707107,0.000000,0.000000,0.707107 +4914,0.707107,0.000000,0.000000,0.707107 +4915,0.707107,0.000000,0.000000,0.707107 +4916,0.707107,0.000000,0.000000,0.707107 +4917,0.707107,0.000000,0.000000,0.707107 +4918,0.707107,0.000000,0.000000,0.707107 +4919,0.707107,0.000000,0.000000,0.707107 +4920,0.707107,0.000000,0.000000,0.707107 +4921,0.707107,0.000000,0.000000,0.707107 +4922,0.707107,0.000000,0.000000,0.707107 +4923,0.707107,0.000000,0.000000,0.707107 +4924,0.707107,0.000000,0.000000,0.707107 +4925,0.707107,0.000000,0.000000,0.707107 +4926,0.707107,0.000000,0.000000,0.707107 +4927,0.707107,0.000000,0.000000,0.707107 +4928,0.707107,0.000000,0.000000,0.707107 +4929,0.707107,0.000000,0.000000,0.707107 +4930,0.707107,0.000000,0.000000,0.707107 +4931,0.707107,0.000000,0.000000,0.707107 +4932,0.707107,0.000000,0.000000,0.707107 +4933,0.707107,0.000000,0.000000,0.707107 +4934,0.707107,0.000000,0.000000,0.707107 +4935,0.707107,0.000000,0.000000,0.707107 +4936,0.707107,0.000000,0.000000,0.707107 +4937,0.707107,0.000000,0.000000,0.707107 +4938,0.707107,0.000000,0.000000,0.707107 +4939,0.707107,0.000000,0.000000,0.707107 +4940,0.707107,0.000000,0.000000,0.707107 +4941,0.707107,0.000000,0.000000,0.707107 +4942,0.707107,0.000000,0.000000,0.707107 +4943,0.707107,0.000000,0.000000,0.707107 +4944,0.707107,0.000000,0.000000,0.707107 +4945,0.707107,0.000000,0.000000,0.707107 +4946,0.707107,0.000000,0.000000,0.707107 +4947,0.707107,0.000000,0.000000,0.707107 +4948,0.707107,0.000000,0.000000,0.707107 +4949,0.707107,0.000000,0.000000,0.707107 +4950,0.707107,0.000000,0.000000,0.707107 +4951,0.707107,0.000000,0.000000,0.707107 +4952,0.707107,0.000000,0.000000,0.707107 +4953,0.707107,0.000000,0.000000,0.707107 +4954,0.707107,0.000000,0.000000,0.707107 +4955,0.707107,0.000000,0.000000,0.707107 +4956,0.707107,0.000000,0.000000,0.707107 +4957,0.707107,0.000000,0.000000,0.707107 +4958,0.707107,0.000000,0.000000,0.707107 +4959,0.707107,0.000000,0.000000,0.707107 +4960,0.707107,0.000000,0.000000,0.707107 +4961,0.707107,0.000000,0.000000,0.707107 +4962,0.707107,0.000000,0.000000,0.707107 +4963,0.707107,0.000000,0.000000,0.707107 +4964,0.707107,0.000000,0.000000,0.707107 +4965,0.707107,0.000000,0.000000,0.707107 +4966,0.707107,0.000000,0.000000,0.707107 +4967,0.707107,0.000000,0.000000,0.707107 +4968,0.707107,0.000000,0.000000,0.707107 +4969,0.707107,0.000000,0.000000,0.707107 +4970,0.707107,0.000000,0.000000,0.707107 +4971,0.707107,0.000000,0.000000,0.707107 +4972,0.707107,0.000000,0.000000,0.707107 +4973,0.707107,0.000000,0.000000,0.707107 +4974,0.707107,0.000000,0.000000,0.707107 +4975,0.707107,0.000000,0.000000,0.707107 +4976,0.707107,0.000000,0.000000,0.707107 +4977,0.707107,0.000000,0.000000,0.707107 +4978,0.707107,0.000000,0.000000,0.707107 +4979,0.707107,0.000000,0.000000,0.707107 +4980,0.707107,0.000000,0.000000,0.707107 +4981,0.707107,0.000000,0.000000,0.707107 +4982,0.707107,0.000000,0.000000,0.707107 +4983,0.707107,0.000000,0.000000,0.707107 +4984,0.707107,0.000000,0.000000,0.707107 +4985,0.707107,0.000000,0.000000,0.707107 +4986,0.707107,0.000000,0.000000,0.707107 +4987,0.707107,0.000000,0.000000,0.707107 +4988,0.707107,0.000000,0.000000,0.707107 +4989,0.707107,0.000000,0.000000,0.707107 +4990,0.707107,0.000000,0.000000,0.707107 +4991,0.707107,0.000000,0.000000,0.707107 +4992,0.707107,0.000000,0.000000,0.707107 +4993,0.707107,0.000000,0.000000,0.707107 +4994,0.707107,0.000000,0.000000,0.707107 +4995,0.707107,0.000000,0.000000,0.707107 +4996,0.707107,0.000000,0.000000,0.707107 +4997,0.707107,0.000000,0.000000,0.707107 +4998,0.707107,0.000000,0.000000,0.707107 +4999,0.707107,0.000000,0.000000,0.707107 +5000,0.707107,0.000000,0.000000,0.707107 +5001,0.707107,0.000000,0.000000,0.707107 +5002,0.707107,0.000000,0.000000,0.707107 +5003,0.707107,0.000000,0.000000,0.707107 +5004,0.707107,0.000000,0.000000,0.707107 +5005,0.707107,0.000000,0.000000,0.707107 +5006,0.707107,0.000000,0.000000,0.707107 +5007,0.707107,0.000000,0.000000,0.707107 +5008,0.707107,0.000000,0.000000,0.707107 +5009,0.707107,0.000000,0.000000,0.707107 +5010,0.707107,0.000000,0.000000,0.707107 +5011,0.707107,0.000000,0.000000,0.707107 +5012,0.707107,0.000000,0.000000,0.707107 +5013,0.707107,0.000000,0.000000,0.707107 +5014,0.707107,0.000000,0.000000,0.707107 +5015,0.707107,0.000000,0.000000,0.707107 +5016,0.707107,0.000000,0.000000,0.707107 +5017,0.707107,0.000000,0.000000,0.707107 +5018,0.707107,0.000000,0.000000,0.707107 +5019,0.707107,0.000000,0.000000,0.707107 +5020,0.707107,0.000000,0.000000,0.707107 +5021,0.707107,0.000000,0.000000,0.707107 +5022,0.707107,0.000000,0.000000,0.707107 +5023,0.707107,0.000000,0.000000,0.707107 +5024,0.707107,0.000000,0.000000,0.707107 +5025,0.707107,0.000000,0.000000,0.707107 +5026,0.707107,0.000000,0.000000,0.707107 +5027,0.707107,0.000000,0.000000,0.707107 +5028,0.707107,0.000000,0.000000,0.707107 +5029,0.707107,0.000000,0.000000,0.707107 +5030,0.707107,0.000000,0.000000,0.707107 +5031,0.707107,0.000000,0.000000,0.707107 +5032,0.707107,0.000000,0.000000,0.707107 +5033,0.707107,0.000000,0.000000,0.707107 +5034,0.707107,0.000000,0.000000,0.707107 +5035,0.707107,0.000000,0.000000,0.707107 +5036,0.707107,0.000000,0.000000,0.707107 +5037,0.707107,0.000000,0.000000,0.707107 +5038,0.707107,0.000000,0.000000,0.707107 +5039,0.707107,0.000000,0.000000,0.707107 +5040,0.707107,0.000000,0.000000,0.707107 +5041,0.707107,0.000000,0.000000,0.707107 +5042,0.707107,0.000000,0.000000,0.707107 +5043,0.707107,0.000000,0.000000,0.707107 +5044,0.707107,0.000000,0.000000,0.707107 +5045,0.707107,0.000000,0.000000,0.707107 +5046,0.707107,0.000000,0.000000,0.707107 +5047,0.707107,0.000000,0.000000,0.707107 +5048,0.707107,0.000000,0.000000,0.707107 +5049,0.707107,0.000000,0.000000,0.707107 +5050,0.707107,0.000000,0.000000,0.707107 +5051,0.707107,0.000000,0.000000,0.707107 +5052,0.707107,0.000000,0.000000,0.707107 +5053,0.707107,0.000000,0.000000,0.707107 +5054,0.707107,0.000000,0.000000,0.707107 +5055,0.707107,0.000000,0.000000,0.707107 +5056,0.707107,0.000000,0.000000,0.707107 +5057,0.707107,0.000000,0.000000,0.707107 +5058,0.707107,0.000000,0.000000,0.707107 +5059,0.707107,0.000000,0.000000,0.707107 +5060,0.707107,0.000000,0.000000,0.707107 +5061,0.707107,0.000000,0.000000,0.707107 +5062,0.707107,0.000000,0.000000,0.707107 +5063,0.707107,0.000000,0.000000,0.707107 +5064,0.707107,0.000000,0.000000,0.707107 +5065,0.707107,0.000000,0.000000,0.707107 +5066,0.707107,0.000000,0.000000,0.707107 +5067,0.707107,0.000000,0.000000,0.707107 +5068,0.707107,0.000000,0.000000,0.707107 +5069,0.707107,0.000000,0.000000,0.707107 +5070,0.707107,0.000000,0.000000,0.707107 +5071,0.707107,0.000000,0.000000,0.707107 +5072,0.707107,0.000000,0.000000,0.707107 +5073,0.707107,0.000000,0.000000,0.707107 +5074,0.707107,0.000000,0.000000,0.707107 +5075,0.707107,0.000000,0.000000,0.707107 +5076,0.707107,0.000000,0.000000,0.707107 +5077,0.707107,0.000000,0.000000,0.707107 +5078,0.707107,0.000000,0.000000,0.707107 +5079,0.707107,0.000000,0.000000,0.707107 +5080,0.707107,0.000000,0.000000,0.707107 +5081,0.707107,0.000000,0.000000,0.707107 +5082,0.707107,0.000000,0.000000,0.707107 +5083,0.707107,0.000000,0.000000,0.707107 +5084,0.707107,0.000000,0.000000,0.707107 +5085,0.707107,0.000000,0.000000,0.707107 +5086,0.707107,0.000000,0.000000,0.707107 +5087,0.707107,0.000000,0.000000,0.707107 +5088,0.707107,0.000000,0.000000,0.707107 +5089,0.707107,0.000000,0.000000,0.707107 +5090,0.707107,0.000000,0.000000,0.707107 +5091,0.707107,0.000000,0.000000,0.707107 +5092,0.707107,0.000000,0.000000,0.707107 +5093,0.707107,0.000000,0.000000,0.707107 +5094,0.707107,0.000000,0.000000,0.707107 +5095,0.707107,0.000000,0.000000,0.707107 +5096,0.707107,0.000000,0.000000,0.707107 +5097,0.707107,0.000000,0.000000,0.707107 +5098,0.707107,0.000000,0.000000,0.707107 +5099,0.707107,0.000000,0.000000,0.707107 +5100,0.707107,0.000000,0.000000,0.707107 +5101,0.707107,0.000000,0.000000,0.707107 +5102,0.707107,0.000000,0.000000,0.707107 +5103,0.707107,0.000000,0.000000,0.707107 +5104,0.707107,0.000000,0.000000,0.707107 +5105,0.707107,0.000000,0.000000,0.707107 +5106,0.707107,0.000000,0.000000,0.707107 +5107,0.707107,0.000000,0.000000,0.707107 +5108,0.707107,0.000000,0.000000,0.707107 +5109,0.707107,0.000000,0.000000,0.707107 +5110,0.707107,0.000000,0.000000,0.707107 +5111,0.707107,0.000000,0.000000,0.707107 +5112,0.707107,0.000000,0.000000,0.707107 +5113,0.707107,0.000000,0.000000,0.707107 +5114,0.707107,0.000000,0.000000,0.707107 +5115,0.707107,0.000000,0.000000,0.707107 +5116,0.707107,0.000000,0.000000,0.707107 +5117,0.707107,0.000000,0.000000,0.707107 +5118,0.707107,0.000000,0.000000,0.707107 +5119,0.707107,0.000000,0.000000,0.707107 +5120,0.707107,0.000000,0.000000,0.707107 +5121,0.707107,0.000000,0.000000,0.707107 +5122,0.707107,0.000000,0.000000,0.707107 +5123,0.707107,0.000000,0.000000,0.707107 +5124,0.707107,0.000000,0.000000,0.707107 +5125,0.707107,0.000000,0.000000,0.707107 +5126,0.707107,0.000000,0.000000,0.707107 +5127,0.707107,0.000000,0.000000,0.707107 +5128,0.707107,0.000000,0.000000,0.707107 +5129,0.707107,0.000000,0.000000,0.707107 +5130,0.707107,0.000000,0.000000,0.707107 +5131,0.707107,0.000000,0.000000,0.707107 +5132,0.707107,0.000000,0.000000,0.707107 +5133,0.707107,0.000000,0.000000,0.707107 +5134,0.707107,0.000000,0.000000,0.707107 +5135,0.707107,0.000000,0.000000,0.707107 +5136,0.707107,0.000000,0.000000,0.707107 +5137,0.707107,0.000000,0.000000,0.707107 +5138,0.707107,0.000000,0.000000,0.707107 +5139,0.707107,0.000000,0.000000,0.707107 +5140,0.707107,0.000000,0.000000,0.707107 +5141,0.707107,0.000000,0.000000,0.707107 +5142,0.707107,0.000000,0.000000,0.707107 +5143,0.707107,0.000000,0.000000,0.707107 +5144,0.707107,0.000000,0.000000,0.707107 +5145,0.707107,0.000000,0.000000,0.707107 +5146,0.707107,0.000000,0.000000,0.707107 +5147,0.707107,0.000000,0.000000,0.707107 +5148,0.707107,0.000000,0.000000,0.707107 +5149,0.707107,0.000000,0.000000,0.707107 +5150,0.707107,0.000000,0.000000,0.707107 +5151,0.707107,0.000000,0.000000,0.707107 +5152,0.707107,0.000000,0.000000,0.707107 +5153,0.707107,0.000000,0.000000,0.707107 +5154,0.707107,0.000000,0.000000,0.707107 +5155,0.707107,0.000000,0.000000,0.707107 +5156,0.707107,0.000000,0.000000,0.707107 +5157,0.707107,0.000000,0.000000,0.707107 +5158,0.707107,0.000000,0.000000,0.707107 +5159,0.707107,0.000000,0.000000,0.707107 +5160,0.707107,0.000000,0.000000,0.707107 +5161,0.707107,0.000000,0.000000,0.707107 +5162,0.707107,0.000000,0.000000,0.707107 +5163,0.707107,0.000000,0.000000,0.707107 +5164,0.707107,0.000000,0.000000,0.707107 +5165,0.707107,0.000000,0.000000,0.707107 +5166,0.707107,0.000000,0.000000,0.707107 +5167,0.707107,0.000000,0.000000,0.707107 +5168,0.707107,0.000000,0.000000,0.707107 +5169,0.707107,0.000000,0.000000,0.707107 +5170,0.707107,0.000000,0.000000,0.707107 +5171,0.707107,0.000000,0.000000,0.707107 +5172,0.707107,0.000000,0.000000,0.707107 +5173,0.707107,0.000000,0.000000,0.707107 +5174,0.707107,0.000000,0.000000,0.707107 +5175,0.707107,0.000000,0.000000,0.707107 +5176,0.707107,0.000000,0.000000,0.707107 +5177,0.707107,0.000000,0.000000,0.707107 +5178,0.707107,0.000000,0.000000,0.707107 +5179,0.707107,0.000000,0.000000,0.707107 +5180,0.707107,0.000000,0.000000,0.707107 +5181,0.707107,0.000000,0.000000,0.707107 +5182,0.707107,0.000000,0.000000,0.707107 +5183,0.707107,0.000000,0.000000,0.707107 +5184,0.707107,0.000000,0.000000,0.707107 +5185,0.707107,0.000000,0.000000,0.707107 +5186,0.707107,0.000000,0.000000,0.707107 +5187,0.707107,0.000000,0.000000,0.707107 +5188,0.707107,0.000000,0.000000,0.707107 +5189,0.707107,0.000000,0.000000,0.707107 +5190,0.707107,0.000000,0.000000,0.707107 +5191,0.707107,0.000000,0.000000,0.707107 +5192,0.707107,0.000000,0.000000,0.707107 +5193,0.707107,0.000000,0.000000,0.707107 +5194,0.707107,0.000000,0.000000,0.707107 +5195,0.707107,0.000000,0.000000,0.707107 +5196,0.707107,0.000000,0.000000,0.707107 +5197,0.707107,0.000000,0.000000,0.707107 +5198,0.707107,0.000000,0.000000,0.707107 +5199,0.707107,0.000000,0.000000,0.707107 +5200,0.707107,0.000000,0.000000,0.707107 +5201,0.707107,0.000000,0.000000,0.707107 +5202,0.707107,0.000000,0.000000,0.707107 +5203,0.707107,0.000000,0.000000,0.707107 +5204,0.707107,0.000000,0.000000,0.707107 +5205,0.707107,0.000000,0.000000,0.707107 +5206,0.707107,0.000000,0.000000,0.707107 +5207,0.707107,0.000000,0.000000,0.707107 +5208,0.707107,0.000000,0.000000,0.707107 +5209,0.707107,0.000000,0.000000,0.707107 +5210,0.707107,0.000000,0.000000,0.707107 +5211,0.707107,0.000000,0.000000,0.707107 +5212,0.707107,0.000000,0.000000,0.707107 +5213,0.707107,0.000000,0.000000,0.707107 +5214,0.707107,0.000000,0.000000,0.707107 +5215,0.707107,0.000000,0.000000,0.707107 +5216,0.707107,0.000000,0.000000,0.707107 +5217,0.707107,0.000000,0.000000,0.707107 +5218,0.707107,0.000000,0.000000,0.707107 +5219,0.707107,0.000000,0.000000,0.707107 +5220,0.707107,0.000000,0.000000,0.707107 +5221,0.707107,0.000000,0.000000,0.707107 +5222,0.707107,0.000000,0.000000,0.707107 +5223,0.707107,0.000000,0.000000,0.707107 +5224,0.707107,0.000000,0.000000,0.707107 +5225,0.707107,0.000000,0.000000,0.707107 +5226,0.707107,0.000000,0.000000,0.707107 +5227,0.707107,0.000000,0.000000,0.707107 +5228,0.707107,0.000000,0.000000,0.707107 +5229,0.707107,0.000000,0.000000,0.707107 +5230,0.707107,0.000000,0.000000,0.707107 +5231,0.707107,0.000000,0.000000,0.707107 +5232,0.707107,0.000000,0.000000,0.707107 +5233,0.707107,0.000000,0.000000,0.707107 +5234,0.707107,0.000000,0.000000,0.707107 +5235,0.707107,0.000000,0.000000,0.707107 +5236,0.707107,0.000000,0.000000,0.707107 +5237,0.707107,0.000000,0.000000,0.707107 +5238,0.707107,0.000000,0.000000,0.707107 +5239,0.707107,0.000000,0.000000,0.707107 +5240,0.707107,0.000000,0.000000,0.707107 +5241,0.707107,0.000000,0.000000,0.707107 +5242,0.707107,0.000000,0.000000,0.707107 +5243,0.707107,0.000000,0.000000,0.707107 +5244,0.707107,0.000000,0.000000,0.707107 +5245,0.707107,0.000000,0.000000,0.707107 +5246,0.707107,0.000000,0.000000,0.707107 +5247,0.707107,0.000000,0.000000,0.707107 +5248,0.707107,0.000000,0.000000,0.707107 +5249,0.707107,0.000000,0.000000,0.707107 +5250,0.707107,0.000000,0.000000,0.707107 +5251,0.707107,0.000000,0.000000,0.707107 +5252,0.707107,0.000000,0.000000,0.707107 +5253,0.707107,0.000000,0.000000,0.707107 +5254,0.707107,0.000000,0.000000,0.707107 +5255,0.707107,0.000000,0.000000,0.707107 +5256,0.707107,0.000000,0.000000,0.707107 +5257,0.707107,0.000000,0.000000,0.707107 +5258,0.707107,0.000000,0.000000,0.707107 +5259,0.707107,0.000000,0.000000,0.707107 +5260,0.707107,0.000000,0.000000,0.707107 +5261,0.707107,0.000000,0.000000,0.707107 +5262,0.707107,0.000000,0.000000,0.707107 +5263,0.707107,0.000000,0.000000,0.707107 +5264,0.707107,0.000000,0.000000,0.707107 +5265,0.707107,0.000000,0.000000,0.707107 +5266,0.707107,0.000000,0.000000,0.707107 +5267,0.707107,0.000000,0.000000,0.707107 +5268,0.707107,0.000000,0.000000,0.707107 +5269,0.707107,0.000000,0.000000,0.707107 +5270,0.707107,0.000000,0.000000,0.707107 +5271,0.707107,0.000000,0.000000,0.707107 +5272,0.707107,0.000000,0.000000,0.707107 +5273,0.707107,0.000000,0.000000,0.707107 +5274,0.707107,0.000000,0.000000,0.707107 +5275,0.707107,0.000000,0.000000,0.707107 +5276,0.707107,0.000000,0.000000,0.707107 +5277,0.707107,0.000000,0.000000,0.707107 +5278,0.707107,0.000000,0.000000,0.707107 +5279,0.707107,0.000000,0.000000,0.707107 +5280,0.707107,0.000000,0.000000,0.707107 +5281,0.707107,0.000000,0.000000,0.707107 +5282,0.707107,0.000000,0.000000,0.707107 +5283,0.707107,0.000000,0.000000,0.707107 +5284,0.707107,0.000000,0.000000,0.707107 +5285,0.707107,0.000000,0.000000,0.707107 +5286,0.707107,0.000000,0.000000,0.707107 +5287,0.707107,0.000000,0.000000,0.707107 +5288,0.707107,0.000000,0.000000,0.707107 +5289,0.707107,0.000000,0.000000,0.707107 +5290,0.707107,0.000000,0.000000,0.707107 +5291,0.707107,0.000000,0.000000,0.707107 +5292,0.707107,0.000000,0.000000,0.707107 +5293,0.707107,0.000000,0.000000,0.707107 +5294,0.707107,0.000000,0.000000,0.707107 +5295,0.707107,0.000000,0.000000,0.707107 +5296,0.707107,0.000000,0.000000,0.707107 +5297,0.707107,0.000000,0.000000,0.707107 +5298,0.707107,0.000000,0.000000,0.707107 +5299,0.707107,0.000000,0.000000,0.707107 +5300,0.707107,0.000000,0.000000,0.707107 +5301,0.707107,0.000000,0.000000,0.707107 +5302,0.707107,0.000000,0.000000,0.707107 +5303,0.707107,0.000000,0.000000,0.707107 +5304,0.707107,0.000000,0.000000,0.707107 +5305,0.707107,0.000000,0.000000,0.707107 +5306,0.707107,0.000000,0.000000,0.707107 +5307,0.707107,0.000000,0.000000,0.707107 +5308,0.707107,0.000000,0.000000,0.707107 +5309,0.707107,0.000000,0.000000,0.707107 +5310,0.707107,0.000000,0.000000,0.707107 +5311,0.707107,0.000000,0.000000,0.707107 +5312,0.707107,0.000000,0.000000,0.707107 +5313,0.707107,0.000000,0.000000,0.707107 +5314,0.707107,0.000000,0.000000,0.707107 +5315,0.707107,0.000000,0.000000,0.707107 +5316,0.707107,0.000000,0.000000,0.707107 +5317,0.707107,0.000000,0.000000,0.707107 +5318,0.707107,0.000000,0.000000,0.707107 +5319,0.707107,0.000000,0.000000,0.707107 +5320,0.707107,0.000000,0.000000,0.707107 +5321,0.707107,0.000000,0.000000,0.707107 +5322,0.707107,0.000000,0.000000,0.707107 +5323,0.707107,0.000000,0.000000,0.707107 +5324,0.707107,0.000000,0.000000,0.707107 +5325,0.707107,0.000000,0.000000,0.707107 +5326,0.707107,0.000000,0.000000,0.707107 +5327,0.707107,0.000000,0.000000,0.707107 +5328,0.707107,0.000000,0.000000,0.707107 +5329,0.707107,0.000000,0.000000,0.707107 +5330,0.707107,0.000000,0.000000,0.707107 +5331,0.707107,0.000000,0.000000,0.707107 +5332,0.707107,0.000000,0.000000,0.707107 +5333,0.707107,0.000000,0.000000,0.707107 +5334,0.707107,0.000000,0.000000,0.707107 +5335,0.707107,0.000000,0.000000,0.707107 +5336,0.707107,0.000000,0.000000,0.707107 +5337,0.707107,0.000000,0.000000,0.707107 +5338,0.707107,0.000000,0.000000,0.707107 +5339,0.707107,0.000000,0.000000,0.707107 +5340,0.707107,0.000000,0.000000,0.707107 +5341,0.707107,0.000000,0.000000,0.707107 +5342,0.707107,0.000000,0.000000,0.707107 +5343,0.707107,0.000000,0.000000,0.707107 +5344,0.707107,0.000000,0.000000,0.707107 +5345,0.707107,0.000000,0.000000,0.707107 +5346,0.707107,0.000000,0.000000,0.707107 +5347,0.707107,0.000000,0.000000,0.707107 +5348,0.707107,0.000000,0.000000,0.707107 +5349,0.707107,0.000000,0.000000,0.707107 +5350,0.707107,0.000000,0.000000,0.707107 +5351,0.707107,0.000000,0.000000,0.707107 +5352,0.707107,0.000000,0.000000,0.707107 +5353,0.707107,0.000000,0.000000,0.707107 +5354,0.707107,0.000000,0.000000,0.707107 +5355,0.707107,0.000000,0.000000,0.707107 +5356,0.707107,0.000000,0.000000,0.707107 +5357,0.707107,0.000000,0.000000,0.707107 +5358,0.707107,0.000000,0.000000,0.707107 +5359,0.707107,0.000000,0.000000,0.707107 +5360,0.707107,0.000000,0.000000,0.707107 +5361,0.707107,0.000000,0.000000,0.707107 +5362,0.707107,0.000000,0.000000,0.707107 +5363,0.707107,0.000000,0.000000,0.707107 +5364,0.707107,0.000000,0.000000,0.707107 +5365,0.707107,0.000000,0.000000,0.707107 +5366,0.707107,0.000000,0.000000,0.707107 +5367,0.707107,0.000000,0.000000,0.707107 +5368,0.707107,0.000000,0.000000,0.707107 +5369,0.707107,0.000000,0.000000,0.707107 +5370,0.707107,0.000000,0.000000,0.707107 +5371,0.707107,0.000000,0.000000,0.707107 +5372,0.707107,0.000000,0.000000,0.707107 +5373,0.707107,0.000000,0.000000,0.707107 +5374,0.707107,0.000000,0.000000,0.707107 +5375,0.707107,0.000000,0.000000,0.707107 +5376,0.707107,0.000000,0.000000,0.707107 +5377,0.707107,0.000000,0.000000,0.707107 +5378,0.707107,0.000000,0.000000,0.707107 +5379,0.707107,0.000000,0.000000,0.707107 +5380,0.707107,0.000000,0.000000,0.707107 +5381,0.707107,0.000000,0.000000,0.707107 +5382,0.707107,0.000000,0.000000,0.707107 +5383,0.707107,0.000000,0.000000,0.707107 +5384,0.707107,0.000000,0.000000,0.707107 +5385,0.707107,0.000000,0.000000,0.707107 +5386,0.707107,0.000000,0.000000,0.707107 +5387,0.707107,0.000000,0.000000,0.707107 +5388,0.707107,0.000000,0.000000,0.707107 +5389,0.707107,0.000000,0.000000,0.707107 +5390,0.707107,0.000000,0.000000,0.707107 +5391,0.707107,0.000000,0.000000,0.707107 +5392,0.707107,0.000000,0.000000,0.707107 +5393,0.707107,0.000000,0.000000,0.707107 +5394,0.707107,0.000000,0.000000,0.707107 +5395,0.707107,0.000000,0.000000,0.707107 +5396,0.707107,0.000000,0.000000,0.707107 +5397,0.707107,0.000000,0.000000,0.707107 +5398,0.707107,0.000000,0.000000,0.707107 +5399,0.707107,0.000000,0.000000,0.707107 +5400,0.707107,0.000000,0.000000,0.707107 +5401,0.707107,0.000000,0.000000,0.707107 +5402,0.707107,0.000000,0.000000,0.707107 +5403,0.707107,0.000000,0.000000,0.707107 +5404,0.707107,0.000000,0.000000,0.707107 +5405,0.707107,0.000000,0.000000,0.707107 +5406,0.707107,0.000000,0.000000,0.707107 +5407,0.707107,0.000000,0.000000,0.707107 +5408,0.707107,0.000000,0.000000,0.707107 +5409,0.707107,0.000000,0.000000,0.707107 +5410,0.707107,0.000000,0.000000,0.707107 +5411,0.707107,0.000000,0.000000,0.707107 +5412,0.707107,0.000000,0.000000,0.707107 +5413,0.707107,0.000000,0.000000,0.707107 +5414,0.707107,0.000000,0.000000,0.707107 +5415,0.707107,0.000000,0.000000,0.707107 +5416,0.707107,0.000000,0.000000,0.707107 +5417,0.707107,0.000000,0.000000,0.707107 +5418,0.707107,0.000000,0.000000,0.707107 +5419,0.707107,0.000000,0.000000,0.707107 +5420,0.707107,0.000000,0.000000,0.707107 +5421,0.707107,0.000000,0.000000,0.707107 +5422,0.707107,0.000000,0.000000,0.707107 +5423,0.707107,0.000000,0.000000,0.707107 +5424,0.707107,0.000000,0.000000,0.707107 +5425,0.707107,0.000000,0.000000,0.707107 +5426,0.707107,0.000000,0.000000,0.707107 +5427,0.707107,0.000000,0.000000,0.707107 +5428,0.707107,0.000000,0.000000,0.707107 +5429,0.707107,0.000000,0.000000,0.707107 +5430,0.707107,0.000000,0.000000,0.707107 +5431,0.707107,0.000000,0.000000,0.707107 +5432,0.707107,0.000000,0.000000,0.707107 +5433,0.707107,0.000000,0.000000,0.707107 +5434,0.707107,0.000000,0.000000,0.707107 +5435,0.707107,0.000000,0.000000,0.707107 +5436,0.707107,0.000000,0.000000,0.707107 +5437,0.707107,0.000000,0.000000,0.707107 +5438,0.707107,0.000000,0.000000,0.707107 +5439,0.707107,0.000000,0.000000,0.707107 +5440,0.707107,0.000000,0.000000,0.707107 +5441,0.707107,0.000000,0.000000,0.707107 +5442,0.707107,0.000000,0.000000,0.707107 +5443,0.707107,0.000000,0.000000,0.707107 +5444,0.707107,0.000000,0.000000,0.707107 +5445,0.707107,0.000000,0.000000,0.707107 +5446,0.707107,0.000000,0.000000,0.707107 +5447,0.707107,0.000000,0.000000,0.707107 +5448,0.707107,0.000000,0.000000,0.707107 +5449,0.707107,0.000000,0.000000,0.707107 +5450,0.707107,0.000000,0.000000,0.707107 +5451,0.707107,0.000000,0.000000,0.707107 +5452,0.707107,0.000000,0.000000,0.707107 +5453,0.707107,0.000000,0.000000,0.707107 +5454,0.707107,0.000000,0.000000,0.707107 +5455,0.707107,0.000000,0.000000,0.707107 +5456,0.707107,0.000000,0.000000,0.707107 +5457,0.707107,0.000000,0.000000,0.707107 +5458,0.707107,0.000000,0.000000,0.707107 +5459,0.707107,0.000000,0.000000,0.707107 +5460,0.707107,0.000000,0.000000,0.707107 +5461,0.707107,0.000000,0.000000,0.707107 +5462,0.707107,0.000000,0.000000,0.707107 +5463,0.707107,0.000000,0.000000,0.707107 +5464,0.707107,0.000000,0.000000,0.707107 +5465,0.707107,0.000000,0.000000,0.707107 +5466,0.707107,0.000000,0.000000,0.707107 +5467,0.707107,0.000000,0.000000,0.707107 +5468,0.707107,0.000000,0.000000,0.707107 +5469,0.707107,0.000000,0.000000,0.707107 +5470,0.707107,0.000000,0.000000,0.707107 +5471,0.707107,0.000000,0.000000,0.707107 +5472,0.707107,0.000000,0.000000,0.707107 +5473,0.707107,0.000000,0.000000,0.707107 +5474,0.707107,0.000000,0.000000,0.707107 +5475,0.707107,0.000000,0.000000,0.707107 +5476,0.707107,0.000000,0.000000,0.707107 +5477,0.707107,0.000000,0.000000,0.707107 +5478,0.707107,0.000000,0.000000,0.707107 +5479,0.707107,0.000000,0.000000,0.707107 +5480,0.707107,0.000000,0.000000,0.707107 +5481,0.707107,0.000000,0.000000,0.707107 +5482,0.707107,0.000000,0.000000,0.707107 +5483,0.707107,0.000000,0.000000,0.707107 +5484,0.707107,0.000000,0.000000,0.707107 +5485,0.707107,0.000000,0.000000,0.707107 +5486,0.707107,0.000000,0.000000,0.707107 +5487,0.707107,0.000000,0.000000,0.707107 +5488,0.707107,0.000000,0.000000,0.707107 +5489,0.707107,0.000000,0.000000,0.707107 +5490,0.707107,0.000000,0.000000,0.707107 +5491,0.707107,0.000000,0.000000,0.707107 +5492,0.707107,0.000000,0.000000,0.707107 +5493,0.707107,0.000000,0.000000,0.707107 +5494,0.707107,0.000000,0.000000,0.707107 +5495,0.707107,0.000000,0.000000,0.707107 +5496,0.707107,0.000000,0.000000,0.707107 +5497,0.707107,0.000000,0.000000,0.707107 +5498,0.707107,0.000000,0.000000,0.707107 +5499,0.707107,0.000000,0.000000,0.707107 +5500,0.707107,0.000000,0.000000,0.707107 +5501,0.707107,0.000000,0.000000,0.707107 +5502,0.707107,0.000000,0.000000,0.707107 +5503,0.707107,0.000000,0.000000,0.707107 +5504,0.707107,0.000000,0.000000,0.707107 +5505,0.707107,0.000000,0.000000,0.707107 +5506,0.707107,0.000000,0.000000,0.707107 +5507,0.707107,0.000000,0.000000,0.707107 +5508,0.707107,0.000000,0.000000,0.707107 +5509,0.707107,0.000000,0.000000,0.707107 +5510,0.707107,0.000000,0.000000,0.707107 +5511,0.707107,0.000000,0.000000,0.707107 +5512,0.707107,0.000000,0.000000,0.707107 +5513,0.707107,0.000000,0.000000,0.707107 +5514,0.707107,0.000000,0.000000,0.707107 +5515,0.707107,0.000000,0.000000,0.707107 +5516,0.707107,0.000000,0.000000,0.707107 +5517,0.707107,0.000000,0.000000,0.707107 +5518,0.707107,0.000000,0.000000,0.707107 +5519,0.707107,0.000000,0.000000,0.707107 +5520,0.707107,0.000000,0.000000,0.707107 +5521,0.707107,0.000000,0.000000,0.707107 +5522,0.707107,0.000000,0.000000,0.707107 +5523,0.707107,0.000000,0.000000,0.707107 +5524,0.707107,0.000000,0.000000,0.707107 +5525,0.707107,0.000000,0.000000,0.707107 +5526,0.707107,0.000000,0.000000,0.707107 +5527,0.707107,0.000000,0.000000,0.707107 +5528,0.707107,0.000000,0.000000,0.707107 +5529,0.707107,0.000000,0.000000,0.707107 +5530,0.707107,0.000000,0.000000,0.707107 +5531,0.707107,0.000000,0.000000,0.707107 +5532,0.707107,0.000000,0.000000,0.707107 +5533,0.707107,0.000000,0.000000,0.707107 +5534,0.707107,0.000000,0.000000,0.707107 +5535,0.707107,0.000000,0.000000,0.707107 +5536,0.707107,0.000000,0.000000,0.707107 +5537,0.707107,0.000000,0.000000,0.707107 +5538,0.707107,0.000000,0.000000,0.707107 +5539,0.707107,0.000000,0.000000,0.707107 +5540,0.707107,0.000000,0.000000,0.707107 +5541,0.707107,0.000000,0.000000,0.707107 +5542,0.707107,0.000000,0.000000,0.707107 +5543,0.707107,0.000000,0.000000,0.707107 +5544,0.707107,0.000000,0.000000,0.707107 +5545,0.707107,0.000000,0.000000,0.707107 +5546,0.707107,0.000000,0.000000,0.707107 +5547,0.707107,0.000000,0.000000,0.707107 +5548,0.707107,0.000000,0.000000,0.707107 +5549,0.707107,0.000000,0.000000,0.707107 +5550,0.707107,0.000000,0.000000,0.707107 +5551,0.707107,0.000000,0.000000,0.707107 +5552,0.707107,0.000000,0.000000,0.707107 +5553,0.707107,0.000000,0.000000,0.707107 +5554,0.707107,0.000000,0.000000,0.707107 +5555,0.707107,0.000000,0.000000,0.707107 +5556,0.707107,0.000000,0.000000,0.707107 +5557,0.707107,0.000000,0.000000,0.707107 +5558,0.707107,0.000000,0.000000,0.707107 +5559,0.707107,0.000000,0.000000,0.707107 +5560,0.707107,0.000000,0.000000,0.707107 +5561,0.707107,0.000000,0.000000,0.707107 +5562,0.707107,0.000000,0.000000,0.707107 +5563,0.707107,0.000000,0.000000,0.707107 +5564,0.707107,0.000000,0.000000,0.707107 +5565,0.707107,0.000000,0.000000,0.707107 +5566,0.707107,0.000000,0.000000,0.707107 +5567,0.707107,0.000000,0.000000,0.707107 +5568,0.707107,0.000000,0.000000,0.707107 +5569,0.707107,0.000000,0.000000,0.707107 +5570,0.707107,0.000000,0.000000,0.707107 +5571,0.707107,0.000000,0.000000,0.707107 +5572,0.707107,0.000000,0.000000,0.707107 +5573,0.707107,0.000000,0.000000,0.707107 +5574,0.707107,0.000000,0.000000,0.707107 +5575,0.707107,0.000000,0.000000,0.707107 +5576,0.707107,0.000000,0.000000,0.707107 +5577,0.707107,0.000000,0.000000,0.707107 +5578,0.707107,0.000000,0.000000,0.707107 +5579,0.707107,0.000000,0.000000,0.707107 +5580,0.707107,0.000000,0.000000,0.707107 +5581,0.707107,0.000000,0.000000,0.707107 +5582,0.707107,0.000000,0.000000,0.707107 +5583,0.707107,0.000000,0.000000,0.707107 +5584,0.707107,0.000000,0.000000,0.707107 +5585,0.707107,0.000000,0.000000,0.707107 +5586,0.707107,0.000000,0.000000,0.707107 +5587,0.707107,0.000000,0.000000,0.707107 +5588,0.707107,0.000000,0.000000,0.707107 +5589,0.707107,0.000000,0.000000,0.707107 +5590,0.707107,0.000000,0.000000,0.707107 +5591,0.707107,0.000000,0.000000,0.707107 +5592,0.707107,0.000000,0.000000,0.707107 +5593,0.707107,0.000000,0.000000,0.707107 +5594,0.707107,0.000000,0.000000,0.707107 +5595,0.707107,0.000000,0.000000,0.707107 +5596,0.707107,0.000000,0.000000,0.707107 +5597,0.707107,0.000000,0.000000,0.707107 +5598,0.707107,0.000000,0.000000,0.707107 +5599,0.707107,0.000000,0.000000,0.707107 +5600,0.707107,0.000000,0.000000,0.707107 +5601,0.707107,0.000000,0.000000,0.707107 +5602,0.707107,0.000000,0.000000,0.707107 +5603,0.707107,0.000000,0.000000,0.707107 +5604,0.707107,0.000000,0.000000,0.707107 +5605,0.707107,0.000000,0.000000,0.707107 +5606,0.707107,0.000000,0.000000,0.707107 +5607,0.707107,0.000000,0.000000,0.707107 +5608,0.707107,0.000000,0.000000,0.707107 +5609,0.707107,0.000000,0.000000,0.707107 +5610,0.707107,0.000000,0.000000,0.707107 +5611,0.707107,0.000000,0.000000,0.707107 +5612,0.707107,0.000000,0.000000,0.707107 +5613,0.707107,0.000000,0.000000,0.707107 +5614,0.707107,0.000000,0.000000,0.707107 +5615,0.707107,0.000000,0.000000,0.707107 +5616,0.707107,0.000000,0.000000,0.707107 +5617,0.707107,0.000000,0.000000,0.707107 +5618,0.707107,0.000000,0.000000,0.707107 +5619,0.707107,0.000000,0.000000,0.707107 +5620,0.707107,0.000000,0.000000,0.707107 +5621,0.707107,0.000000,0.000000,0.707107 +5622,0.707107,0.000000,0.000000,0.707107 +5623,0.707107,0.000000,0.000000,0.707107 +5624,0.707107,0.000000,0.000000,0.707107 +5625,0.707107,0.000000,0.000000,0.707107 +5626,0.707107,0.000000,0.000000,0.707107 +5627,0.707107,0.000000,0.000000,0.707107 +5628,0.707107,0.000000,0.000000,0.707107 +5629,0.707107,0.000000,0.000000,0.707107 +5630,0.707107,0.000000,0.000000,0.707107 +5631,0.707107,0.000000,0.000000,0.707107 +5632,0.707107,0.000000,0.000000,0.707107 +5633,0.707107,0.000000,0.000000,0.707107 +5634,0.707107,0.000000,0.000000,0.707107 +5635,0.707107,0.000000,0.000000,0.707107 +5636,0.707107,0.000000,0.000000,0.707107 +5637,0.707107,0.000000,0.000000,0.707107 +5638,0.707107,0.000000,0.000000,0.707107 +5639,0.707107,0.000000,0.000000,0.707107 +5640,0.707107,0.000000,0.000000,0.707107 +5641,0.707107,0.000000,0.000000,0.707107 +5642,0.707107,0.000000,0.000000,0.707107 +5643,0.707107,0.000000,0.000000,0.707107 +5644,0.707107,0.000000,0.000000,0.707107 +5645,0.707107,0.000000,0.000000,0.707107 +5646,0.707107,0.000000,0.000000,0.707107 +5647,0.707107,0.000000,0.000000,0.707107 +5648,0.707107,0.000000,0.000000,0.707107 +5649,0.707107,0.000000,0.000000,0.707107 +5650,0.707107,0.000000,0.000000,0.707107 +5651,0.707107,0.000000,0.000000,0.707107 +5652,0.707107,0.000000,0.000000,0.707107 +5653,0.707107,0.000000,0.000000,0.707107 +5654,0.707107,0.000000,0.000000,0.707107 +5655,0.707107,0.000000,0.000000,0.707107 +5656,0.707107,0.000000,0.000000,0.707107 +5657,0.707107,0.000000,0.000000,0.707107 +5658,0.707107,0.000000,0.000000,0.707107 +5659,0.707107,0.000000,0.000000,0.707107 +5660,0.707107,0.000000,0.000000,0.707107 +5661,0.707107,0.000000,0.000000,0.707107 +5662,0.707107,0.000000,0.000000,0.707107 +5663,0.707107,0.000000,0.000000,0.707107 +5664,0.707107,0.000000,0.000000,0.707107 +5665,0.707107,0.000000,0.000000,0.707107 +5666,0.707107,0.000000,0.000000,0.707107 +5667,0.707107,0.000000,0.000000,0.707107 +5668,0.707107,0.000000,0.000000,0.707107 +5669,0.707107,0.000000,0.000000,0.707107 +5670,0.707107,0.000000,0.000000,0.707107 +5671,0.707107,0.000000,0.000000,0.707107 +5672,0.707107,0.000000,0.000000,0.707107 +5673,0.707107,0.000000,0.000000,0.707107 +5674,0.707107,0.000000,0.000000,0.707107 +5675,0.707107,0.000000,0.000000,0.707107 +5676,0.707107,0.000000,0.000000,0.707107 +5677,0.707107,0.000000,0.000000,0.707107 +5678,0.707107,0.000000,0.000000,0.707107 +5679,0.707107,0.000000,0.000000,0.707107 +5680,0.707107,0.000000,0.000000,0.707107 +5681,0.707107,0.000000,0.000000,0.707107 +5682,0.707107,0.000000,0.000000,0.707107 +5683,0.707107,0.000000,0.000000,0.707107 +5684,0.707107,0.000000,0.000000,0.707107 +5685,0.707107,0.000000,0.000000,0.707107 +5686,0.707107,0.000000,0.000000,0.707107 +5687,0.707107,0.000000,0.000000,0.707107 +5688,0.707107,0.000000,0.000000,0.707107 +5689,0.707107,0.000000,0.000000,0.707107 +5690,0.707107,0.000000,0.000000,0.707107 +5691,0.707107,0.000000,0.000000,0.707107 +5692,0.707107,0.000000,0.000000,0.707107 +5693,0.707107,0.000000,0.000000,0.707107 +5694,0.707107,0.000000,0.000000,0.707107 +5695,0.707107,0.000000,0.000000,0.707107 +5696,0.707107,0.000000,0.000000,0.707107 +5697,0.707107,0.000000,0.000000,0.707107 +5698,0.707107,0.000000,0.000000,0.707107 +5699,0.707107,0.000000,0.000000,0.707107 +5700,0.707107,0.000000,0.000000,0.707107 +5701,0.707107,0.000000,0.000000,0.707107 +5702,0.707107,0.000000,0.000000,0.707107 +5703,0.707107,0.000000,0.000000,0.707107 +5704,0.707107,0.000000,0.000000,0.707107 +5705,0.707107,0.000000,0.000000,0.707107 +5706,0.707107,0.000000,0.000000,0.707107 +5707,0.707107,0.000000,0.000000,0.707107 +5708,0.707107,0.000000,0.000000,0.707107 +5709,0.707107,0.000000,0.000000,0.707107 +5710,0.707107,0.000000,0.000000,0.707107 +5711,0.707107,0.000000,0.000000,0.707107 +5712,0.707107,0.000000,0.000000,0.707107 +5713,0.707107,0.000000,0.000000,0.707107 +5714,0.707107,0.000000,0.000000,0.707107 +5715,0.707107,0.000000,0.000000,0.707107 +5716,0.707107,0.000000,0.000000,0.707107 +5717,0.707107,0.000000,0.000000,0.707107 +5718,0.707107,0.000000,0.000000,0.707107 +5719,0.707107,0.000000,0.000000,0.707107 +5720,0.707107,0.000000,0.000000,0.707107 +5721,0.707107,0.000000,0.000000,0.707107 +5722,0.707107,0.000000,0.000000,0.707107 +5723,0.707107,0.000000,0.000000,0.707107 +5724,0.707107,0.000000,0.000000,0.707107 +5725,0.707107,0.000000,0.000000,0.707107 +5726,0.707107,0.000000,0.000000,0.707107 +5727,0.707107,0.000000,0.000000,0.707107 +5728,0.707107,0.000000,0.000000,0.707107 +5729,0.707107,0.000000,0.000000,0.707107 +5730,0.707107,0.000000,0.000000,0.707107 +5731,0.707107,0.000000,0.000000,0.707107 +5732,0.707107,0.000000,0.000000,0.707107 +5733,0.707107,0.000000,0.000000,0.707107 +5734,0.707107,0.000000,0.000000,0.707107 +5735,0.707107,0.000000,0.000000,0.707107 +5736,0.707107,0.000000,0.000000,0.707107 +5737,0.707107,0.000000,0.000000,0.707107 +5738,0.707107,0.000000,0.000000,0.707107 +5739,0.707107,0.000000,0.000000,0.707107 +5740,0.707107,0.000000,0.000000,0.707107 +5741,0.707107,0.000000,0.000000,0.707107 +5742,0.707107,0.000000,0.000000,0.707107 +5743,0.707107,0.000000,0.000000,0.707107 +5744,0.707107,0.000000,0.000000,0.707107 +5745,0.707107,0.000000,0.000000,0.707107 +5746,0.707107,0.000000,0.000000,0.707107 +5747,0.707107,0.000000,0.000000,0.707107 +5748,0.707107,0.000000,0.000000,0.707107 +5749,0.707107,0.000000,0.000000,0.707107 +5750,0.707107,0.000000,0.000000,0.707107 +5751,0.707107,0.000000,0.000000,0.707107 +5752,0.707107,0.000000,0.000000,0.707107 +5753,0.707107,0.000000,0.000000,0.707107 +5754,0.707107,0.000000,0.000000,0.707107 +5755,0.707107,0.000000,0.000000,0.707107 +5756,0.707107,0.000000,0.000000,0.707107 +5757,0.707107,0.000000,0.000000,0.707107 +5758,0.707107,0.000000,0.000000,0.707107 +5759,0.707107,0.000000,0.000000,0.707107 +5760,0.707107,0.000000,0.000000,0.707107 +5761,0.707107,0.000000,0.000000,0.707107 +5762,0.707107,0.000000,0.000000,0.707107 +5763,0.707107,0.000000,0.000000,0.707107 +5764,0.707107,0.000000,0.000000,0.707107 +5765,0.707107,0.000000,0.000000,0.707107 +5766,0.707107,0.000000,0.000000,0.707107 +5767,0.707107,0.000000,0.000000,0.707107 +5768,0.707107,0.000000,0.000000,0.707107 +5769,0.707107,0.000000,0.000000,0.707107 +5770,0.707107,0.000000,0.000000,0.707107 +5771,0.707107,0.000000,0.000000,0.707107 +5772,0.707107,0.000000,0.000000,0.707107 +5773,0.707107,0.000000,0.000000,0.707107 +5774,0.707107,0.000000,0.000000,0.707107 +5775,0.707107,0.000000,0.000000,0.707107 +5776,0.707107,0.000000,0.000000,0.707107 +5777,0.707107,0.000000,0.000000,0.707107 +5778,0.707107,0.000000,0.000000,0.707107 +5779,0.707107,0.000000,0.000000,0.707107 +5780,0.707107,0.000000,0.000000,0.707107 +5781,0.707107,0.000000,0.000000,0.707107 +5782,0.707107,0.000000,0.000000,0.707107 +5783,0.707107,0.000000,0.000000,0.707107 +5784,0.707107,0.000000,0.000000,0.707107 +5785,0.707107,0.000000,0.000000,0.707107 +5786,0.707107,0.000000,0.000000,0.707107 +5787,0.707107,0.000000,0.000000,0.707107 +5788,0.707107,0.000000,0.000000,0.707107 +5789,0.707107,0.000000,0.000000,0.707107 +5790,0.707107,0.000000,0.000000,0.707107 +5791,0.707107,0.000000,0.000000,0.707107 +5792,0.707107,0.000000,0.000000,0.707107 +5793,0.707107,0.000000,0.000000,0.707107 +5794,0.707107,0.000000,0.000000,0.707107 +5795,0.707107,0.000000,0.000000,0.707107 +5796,0.707107,0.000000,0.000000,0.707107 +5797,0.707107,0.000000,0.000000,0.707107 +5798,0.707107,0.000000,0.000000,0.707107 +5799,0.707107,0.000000,0.000000,0.707107 +5800,0.707107,0.000000,0.000000,0.707107 +5801,0.707107,0.000000,0.000000,0.707107 +5802,0.707107,0.000000,0.000000,0.707107 +5803,0.707107,0.000000,0.000000,0.707107 +5804,0.707107,0.000000,0.000000,0.707107 +5805,0.707107,0.000000,0.000000,0.707107 +5806,0.707107,0.000000,0.000000,0.707107 +5807,0.707107,0.000000,0.000000,0.707107 +5808,0.707107,0.000000,0.000000,0.707107 +5809,0.707107,0.000000,0.000000,0.707107 +5810,0.707107,0.000000,0.000000,0.707107 +5811,0.707107,0.000000,0.000000,0.707107 +5812,0.707107,0.000000,0.000000,0.707107 +5813,0.707107,0.000000,0.000000,0.707107 +5814,0.707107,0.000000,0.000000,0.707107 +5815,0.707107,0.000000,0.000000,0.707107 +5816,0.707107,0.000000,0.000000,0.707107 +5817,0.707107,0.000000,0.000000,0.707107 +5818,0.707107,0.000000,0.000000,0.707107 +5819,0.707107,0.000000,0.000000,0.707107 +5820,0.707107,0.000000,0.000000,0.707107 +5821,0.707107,0.000000,0.000000,0.707107 +5822,0.707107,0.000000,0.000000,0.707107 +5823,0.707107,0.000000,0.000000,0.707107 +5824,0.707107,0.000000,0.000000,0.707107 +5825,0.707107,0.000000,0.000000,0.707107 +5826,0.707107,0.000000,0.000000,0.707107 +5827,0.707107,0.000000,0.000000,0.707107 +5828,0.707107,0.000000,0.000000,0.707107 +5829,0.707107,0.000000,0.000000,0.707107 +5830,0.707107,0.000000,0.000000,0.707107 +5831,0.707107,0.000000,0.000000,0.707107 +5832,0.707107,0.000000,0.000000,0.707107 +5833,0.707107,0.000000,0.000000,0.707107 +5834,0.707107,0.000000,0.000000,0.707107 +5835,0.707107,0.000000,0.000000,0.707107 +5836,0.707107,0.000000,0.000000,0.707107 +5837,0.707107,0.000000,0.000000,0.707107 +5838,0.707107,0.000000,0.000000,0.707107 +5839,0.707107,0.000000,0.000000,0.707107 +5840,0.707107,0.000000,0.000000,0.707107 +5841,0.707107,0.000000,0.000000,0.707107 +5842,0.707107,0.000000,0.000000,0.707107 +5843,0.707107,0.000000,0.000000,0.707107 +5844,0.707107,0.000000,0.000000,0.707107 +5845,0.707107,0.000000,0.000000,0.707107 +5846,0.707107,0.000000,0.000000,0.707107 +5847,0.707107,0.000000,0.000000,0.707107 +5848,0.707107,0.000000,0.000000,0.707107 +5849,0.707107,0.000000,0.000000,0.707107 +5850,0.707107,0.000000,0.000000,0.707107 +5851,0.707107,0.000000,0.000000,0.707107 +5852,0.707107,0.000000,0.000000,0.707107 +5853,0.707107,0.000000,0.000000,0.707107 +5854,0.707107,0.000000,0.000000,0.707107 +5855,0.707107,0.000000,0.000000,0.707107 +5856,0.707107,0.000000,0.000000,0.707107 +5857,0.707107,0.000000,0.000000,0.707107 +5858,0.707107,0.000000,0.000000,0.707107 +5859,0.707107,0.000000,0.000000,0.707107 +5860,0.707107,0.000000,0.000000,0.707107 +5861,0.707107,0.000000,0.000000,0.707107 +5862,0.707107,0.000000,0.000000,0.707107 +5863,0.707107,0.000000,0.000000,0.707107 +5864,0.707107,0.000000,0.000000,0.707107 +5865,0.707107,0.000000,0.000000,0.707107 +5866,0.707107,0.000000,0.000000,0.707107 +5867,0.707107,0.000000,0.000000,0.707107 +5868,0.707107,0.000000,0.000000,0.707107 +5869,0.707107,0.000000,0.000000,0.707107 +5870,0.707107,0.000000,0.000000,0.707107 +5871,0.707107,0.000000,0.000000,0.707107 +5872,0.707107,0.000000,0.000000,0.707107 +5873,0.707107,0.000000,0.000000,0.707107 +5874,0.707107,0.000000,0.000000,0.707107 +5875,0.707107,0.000000,0.000000,0.707107 +5876,0.707107,0.000000,0.000000,0.707107 +5877,0.707107,0.000000,0.000000,0.707107 +5878,0.707107,0.000000,0.000000,0.707107 +5879,0.707107,0.000000,0.000000,0.707107 +5880,0.707107,0.000000,0.000000,0.707107 +5881,0.707107,0.000000,0.000000,0.707107 +5882,0.707107,0.000000,0.000000,0.707107 +5883,0.707107,0.000000,0.000000,0.707107 +5884,0.707107,0.000000,0.000000,0.707107 +5885,0.707107,0.000000,0.000000,0.707107 +5886,0.707107,0.000000,0.000000,0.707107 +5887,0.707107,0.000000,0.000000,0.707107 +5888,0.707107,0.000000,0.000000,0.707107 +5889,0.707107,0.000000,0.000000,0.707107 +5890,0.707107,0.000000,0.000000,0.707107 +5891,0.707107,0.000000,0.000000,0.707107 +5892,0.707107,0.000000,0.000000,0.707107 +5893,0.707107,0.000000,0.000000,0.707107 +5894,0.707107,0.000000,0.000000,0.707107 +5895,0.707107,0.000000,0.000000,0.707107 +5896,0.707107,0.000000,0.000000,0.707107 +5897,0.707107,0.000000,0.000000,0.707107 +5898,0.707107,0.000000,0.000000,0.707107 +5899,0.707107,0.000000,0.000000,0.707107 +5900,0.707107,0.000000,0.000000,0.707107 +5901,0.707107,0.000000,0.000000,0.707107 +5902,0.707107,0.000000,0.000000,0.707107 +5903,0.707107,0.000000,0.000000,0.707107 +5904,0.707107,0.000000,0.000000,0.707107 +5905,0.707107,0.000000,0.000000,0.707107 +5906,0.707107,0.000000,0.000000,0.707107 +5907,0.707107,0.000000,0.000000,0.707107 +5908,0.707107,0.000000,0.000000,0.707107 +5909,0.707107,0.000000,0.000000,0.707107 +5910,0.707107,0.000000,0.000000,0.707107 +5911,0.707107,0.000000,0.000000,0.707107 +5912,0.707107,0.000000,0.000000,0.707107 +5913,0.707107,0.000000,0.000000,0.707107 +5914,0.707107,0.000000,0.000000,0.707107 +5915,0.707107,0.000000,0.000000,0.707107 +5916,0.707107,0.000000,0.000000,0.707107 +5917,0.707107,0.000000,0.000000,0.707107 +5918,0.707107,0.000000,0.000000,0.707107 +5919,0.707107,0.000000,0.000000,0.707107 +5920,0.707107,0.000000,0.000000,0.707107 +5921,0.707107,0.000000,0.000000,0.707107 +5922,0.707107,0.000000,0.000000,0.707107 +5923,0.707107,0.000000,0.000000,0.707107 +5924,0.707107,0.000000,0.000000,0.707107 +5925,0.707107,0.000000,0.000000,0.707107 +5926,0.707107,0.000000,0.000000,0.707107 +5927,0.707107,0.000000,0.000000,0.707107 +5928,0.707107,0.000000,0.000000,0.707107 +5929,0.707107,0.000000,0.000000,0.707107 +5930,0.707107,0.000000,0.000000,0.707107 +5931,0.707107,0.000000,0.000000,0.707107 +5932,0.707107,0.000000,0.000000,0.707107 +5933,0.707107,0.000000,0.000000,0.707107 +5934,0.707107,0.000000,0.000000,0.707107 +5935,0.707107,0.000000,0.000000,0.707107 +5936,0.707107,0.000000,0.000000,0.707107 +5937,0.707107,0.000000,0.000000,0.707107 +5938,0.707107,0.000000,0.000000,0.707107 +5939,0.707107,0.000000,0.000000,0.707107 +5940,0.707107,0.000000,0.000000,0.707107 +5941,0.707107,0.000000,0.000000,0.707107 +5942,0.707107,0.000000,0.000000,0.707107 +5943,0.707107,0.000000,0.000000,0.707107 +5944,0.707107,0.000000,0.000000,0.707107 +5945,0.707107,0.000000,0.000000,0.707107 +5946,0.707107,0.000000,0.000000,0.707107 +5947,0.707107,0.000000,0.000000,0.707107 +5948,0.707107,0.000000,0.000000,0.707107 +5949,0.707107,0.000000,0.000000,0.707107 +5950,0.707107,0.000000,0.000000,0.707107 +5951,0.707107,0.000000,0.000000,0.707107 +5952,0.707107,0.000000,0.000000,0.707107 +5953,0.707107,0.000000,0.000000,0.707107 +5954,0.707107,0.000000,0.000000,0.707107 +5955,0.707107,0.000000,0.000000,0.707107 +5956,0.707107,0.000000,0.000000,0.707107 +5957,0.707107,0.000000,0.000000,0.707107 +5958,0.707107,0.000000,0.000000,0.707107 +5959,0.707107,0.000000,0.000000,0.707107 +5960,0.707107,0.000000,0.000000,0.707107 +5961,0.707107,0.000000,0.000000,0.707107 +5962,0.707107,0.000000,0.000000,0.707107 +5963,0.707107,0.000000,0.000000,0.707107 +5964,0.707107,0.000000,0.000000,0.707107 +5965,0.707107,0.000000,0.000000,0.707107 +5966,0.707107,0.000000,0.000000,0.707107 +5967,0.707107,0.000000,0.000000,0.707107 +5968,0.707107,0.000000,0.000000,0.707107 +5969,0.707107,0.000000,0.000000,0.707107 +5970,0.707107,0.000000,0.000000,0.707107 +5971,0.707107,0.000000,0.000000,0.707107 +5972,0.707107,0.000000,0.000000,0.707107 +5973,0.707107,0.000000,0.000000,0.707107 +5974,0.707107,0.000000,0.000000,0.707107 +5975,0.707107,0.000000,0.000000,0.707107 +5976,0.707107,0.000000,0.000000,0.707107 +5977,0.707107,0.000000,0.000000,0.707107 +5978,0.707107,0.000000,0.000000,0.707107 +5979,0.707107,0.000000,0.000000,0.707107 +5980,0.707107,0.000000,0.000000,0.707107 +5981,0.707107,0.000000,0.000000,0.707107 +5982,0.707107,0.000000,0.000000,0.707107 +5983,0.707107,0.000000,0.000000,0.707107 +5984,0.707107,0.000000,0.000000,0.707107 +5985,0.707107,0.000000,0.000000,0.707107 +5986,0.707107,0.000000,0.000000,0.707107 +5987,0.707107,0.000000,0.000000,0.707107 +5988,0.707107,0.000000,0.000000,0.707107 +5989,0.707107,0.000000,0.000000,0.707107 +5990,0.707107,0.000000,0.000000,0.707107 +5991,0.707107,0.000000,0.000000,0.707107 +5992,0.707107,0.000000,0.000000,0.707107 +5993,0.707107,0.000000,0.000000,0.707107 +5994,0.707107,0.000000,0.000000,0.707107 +5995,0.707107,0.000000,0.000000,0.707107 +5996,0.707107,0.000000,0.000000,0.707107 +5997,0.707107,0.000000,0.000000,0.707107 +5998,0.707107,0.000000,0.000000,0.707107 +5999,0.707107,0.000000,0.000000,0.707107 +6000,0.707107,0.000000,0.000000,0.707107 +6001,0.707107,0.000000,0.000000,0.707107 +6002,0.707107,0.000000,0.000000,0.707107 +6003,0.707107,0.000000,0.000000,0.707107 +6004,0.707107,0.000000,0.000000,0.707107 +6005,0.707107,0.000000,0.000000,0.707107 +6006,0.707107,0.000000,0.000000,0.707107 +6007,0.707107,0.000000,0.000000,0.707107 +6008,0.707107,0.000000,0.000000,0.707107 +6009,0.707107,0.000000,0.000000,0.707107 +6010,0.707107,0.000000,0.000000,0.707107 +6011,0.707107,0.000000,0.000000,0.707107 +6012,0.707107,0.000000,0.000000,0.707107 +6013,0.707107,0.000000,0.000000,0.707107 +6014,0.707107,0.000000,0.000000,0.707107 +6015,0.707107,0.000000,0.000000,0.707107 +6016,0.707107,0.000000,0.000000,0.707107 +6017,0.707107,0.000000,0.000000,0.707107 +6018,0.707107,0.000000,0.000000,0.707107 +6019,0.707107,0.000000,0.000000,0.707107 +6020,0.707107,0.000000,0.000000,0.707107 +6021,0.707107,0.000000,0.000000,0.707107 +6022,0.707107,0.000000,0.000000,0.707107 +6023,0.707107,0.000000,0.000000,0.707107 +6024,0.707107,0.000000,0.000000,0.707107 +6025,0.707107,0.000000,0.000000,0.707107 +6026,0.707107,0.000000,0.000000,0.707107 +6027,0.707107,0.000000,0.000000,0.707107 +6028,0.707107,0.000000,0.000000,0.707107 +6029,0.707107,0.000000,0.000000,0.707107 +6030,0.707107,0.000000,0.000000,0.707107 +6031,0.707107,0.000000,0.000000,0.707107 +6032,0.707107,0.000000,0.000000,0.707107 +6033,0.707107,0.000000,0.000000,0.707107 +6034,0.707107,0.000000,0.000000,0.707107 +6035,0.707107,0.000000,0.000000,0.707107 +6036,0.707107,0.000000,0.000000,0.707107 +6037,0.707107,0.000000,0.000000,0.707107 +6038,0.707107,0.000000,0.000000,0.707107 +6039,0.707107,0.000000,0.000000,0.707107 +6040,0.707107,0.000000,0.000000,0.707107 +6041,0.707107,0.000000,0.000000,0.707107 +6042,0.707107,0.000000,0.000000,0.707107 +6043,0.707107,0.000000,0.000000,0.707107 +6044,0.707107,0.000000,0.000000,0.707107 +6045,0.707107,0.000000,0.000000,0.707107 +6046,0.707107,0.000000,0.000000,0.707107 +6047,0.707107,0.000000,0.000000,0.707107 +6048,0.707107,0.000000,0.000000,0.707107 +6049,0.707107,0.000000,0.000000,0.707107 +6050,0.707107,0.000000,0.000000,0.707107 +6051,0.707107,0.000000,0.000000,0.707107 +6052,0.707107,0.000000,0.000000,0.707107 +6053,0.707107,0.000000,0.000000,0.707107 +6054,0.707107,0.000000,0.000000,0.707107 +6055,0.707107,0.000000,0.000000,0.707107 +6056,0.707107,0.000000,0.000000,0.707107 +6057,0.707107,0.000000,0.000000,0.707107 +6058,0.707107,0.000000,0.000000,0.707107 +6059,0.707107,0.000000,0.000000,0.707107 +6060,0.707107,0.000000,0.000000,0.707107 +6061,0.707107,0.000000,0.000000,0.707107 +6062,0.707107,0.000000,0.000000,0.707107 +6063,0.707107,0.000000,0.000000,0.707107 +6064,0.707107,0.000000,0.000000,0.707107 +6065,0.707107,0.000000,0.000000,0.707107 +6066,0.707107,0.000000,0.000000,0.707107 +6067,0.707107,0.000000,0.000000,0.707107 +6068,0.707107,0.000000,0.000000,0.707107 +6069,0.707107,0.000000,0.000000,0.707107 +6070,0.707107,0.000000,0.000000,0.707107 +6071,0.707107,0.000000,0.000000,0.707107 +6072,0.707107,0.000000,0.000000,0.707107 +6073,0.707107,0.000000,0.000000,0.707107 +6074,0.707107,0.000000,0.000000,0.707107 +6075,0.707107,0.000000,0.000000,0.707107 +6076,0.707107,0.000000,0.000000,0.707107 +6077,0.707107,0.000000,0.000000,0.707107 +6078,0.707107,0.000000,0.000000,0.707107 +6079,0.707107,0.000000,0.000000,0.707107 +6080,0.707107,0.000000,0.000000,0.707107 +6081,0.707107,0.000000,0.000000,0.707107 +6082,0.707107,0.000000,0.000000,0.707107 +6083,0.707107,0.000000,0.000000,0.707107 +6084,0.707107,0.000000,0.000000,0.707107 +6085,0.707107,0.000000,0.000000,0.707107 +6086,0.707107,0.000000,0.000000,0.707107 +6087,0.707107,0.000000,0.000000,0.707107 +6088,0.707107,0.000000,0.000000,0.707107 +6089,0.707107,0.000000,0.000000,0.707107 +6090,0.707107,0.000000,0.000000,0.707107 +6091,0.707107,0.000000,0.000000,0.707107 +6092,0.707107,0.000000,0.000000,0.707107 +6093,0.707107,0.000000,0.000000,0.707107 +6094,0.707107,0.000000,0.000000,0.707107 +6095,0.707107,0.000000,0.000000,0.707107 +6096,0.707107,0.000000,0.000000,0.707107 +6097,0.707107,0.000000,0.000000,0.707107 +6098,0.707107,0.000000,0.000000,0.707107 +6099,0.707107,0.000000,0.000000,0.707107 +6100,0.707107,0.000000,0.000000,0.707107 +6101,0.707107,0.000000,0.000000,0.707107 +6102,0.707107,0.000000,0.000000,0.707107 +6103,0.707107,0.000000,0.000000,0.707107 +6104,0.707107,0.000000,0.000000,0.707107 +6105,0.707107,0.000000,0.000000,0.707107 +6106,0.707107,0.000000,0.000000,0.707107 +6107,0.707107,0.000000,0.000000,0.707107 +6108,0.707107,0.000000,0.000000,0.707107 +6109,0.707107,0.000000,0.000000,0.707107 +6110,0.707107,0.000000,0.000000,0.707107 +6111,0.707107,0.000000,0.000000,0.707107 +6112,0.707107,0.000000,0.000000,0.707107 +6113,0.707107,0.000000,0.000000,0.707107 +6114,0.707107,0.000000,0.000000,0.707107 +6115,0.707107,0.000000,0.000000,0.707107 +6116,0.707107,0.000000,0.000000,0.707107 +6117,0.707107,0.000000,0.000000,0.707107 +6118,0.707107,0.000000,0.000000,0.707107 +6119,0.707107,0.000000,0.000000,0.707107 +6120,0.707107,0.000000,0.000000,0.707107 +6121,0.707107,0.000000,0.000000,0.707107 +6122,0.707107,0.000000,0.000000,0.707107 +6123,0.707107,0.000000,0.000000,0.707107 +6124,0.707107,0.000000,0.000000,0.707107 +6125,0.707107,0.000000,0.000000,0.707107 +6126,0.707107,0.000000,0.000000,0.707107 +6127,0.707107,0.000000,0.000000,0.707107 +6128,0.707107,0.000000,0.000000,0.707107 +6129,0.707107,0.000000,0.000000,0.707107 +6130,0.707107,0.000000,0.000000,0.707107 +6131,0.707107,0.000000,0.000000,0.707107 +6132,0.707107,0.000000,0.000000,0.707107 +6133,0.707107,0.000000,0.000000,0.707107 +6134,0.707107,0.000000,0.000000,0.707107 +6135,0.707107,0.000000,0.000000,0.707107 +6136,0.707107,0.000000,0.000000,0.707107 +6137,0.707107,0.000000,0.000000,0.707107 +6138,0.707107,0.000000,0.000000,0.707107 +6139,0.707107,0.000000,0.000000,0.707107 +6140,0.707107,0.000000,0.000000,0.707107 +6141,0.707107,0.000000,0.000000,0.707107 +6142,0.707107,0.000000,0.000000,0.707107 +6143,0.707107,0.000000,0.000000,0.707107 +6144,0.707107,0.000000,0.000000,0.707107 +6145,0.707107,0.000000,0.000000,0.707107 +6146,0.707107,0.000000,0.000000,0.707107 +6147,0.707107,0.000000,0.000000,0.707107 +6148,0.707107,0.000000,0.000000,0.707107 +6149,0.707107,0.000000,0.000000,0.707107 +6150,0.707107,0.000000,0.000000,0.707107 +6151,0.707107,0.000000,0.000000,0.707107 +6152,0.707107,0.000000,0.000000,0.707107 +6153,0.707107,0.000000,0.000000,0.707107 +6154,0.707107,0.000000,0.000000,0.707107 +6155,0.707107,0.000000,0.000000,0.707107 +6156,0.707107,0.000000,0.000000,0.707107 +6157,0.707107,0.000000,0.000000,0.707107 +6158,0.707107,0.000000,0.000000,0.707107 +6159,0.707107,0.000000,0.000000,0.707107 +6160,0.707107,0.000000,0.000000,0.707107 +6161,0.707107,0.000000,0.000000,0.707107 +6162,0.707107,0.000000,0.000000,0.707107 +6163,0.707107,0.000000,0.000000,0.707107 +6164,0.707107,0.000000,0.000000,0.707107 +6165,0.707107,0.000000,0.000000,0.707107 +6166,0.707107,0.000000,0.000000,0.707107 +6167,0.707107,0.000000,0.000000,0.707107 +6168,0.707107,0.000000,0.000000,0.707107 +6169,0.707107,0.000000,0.000000,0.707107 +6170,0.707107,0.000000,0.000000,0.707107 +6171,0.707107,0.000000,0.000000,0.707107 +6172,0.707107,0.000000,0.000000,0.707107 +6173,0.707107,0.000000,0.000000,0.707107 +6174,0.707107,0.000000,0.000000,0.707107 +6175,0.707107,0.000000,0.000000,0.707107 +6176,0.707107,0.000000,0.000000,0.707107 +6177,0.707107,0.000000,0.000000,0.707107 +6178,0.707107,0.000000,0.000000,0.707107 +6179,0.707107,0.000000,0.000000,0.707107 +6180,0.707107,0.000000,0.000000,0.707107 +6181,0.707107,0.000000,0.000000,0.707107 +6182,0.707107,0.000000,0.000000,0.707107 +6183,0.707107,0.000000,0.000000,0.707107 +6184,0.707107,0.000000,0.000000,0.707107 +6185,0.707107,0.000000,0.000000,0.707107 +6186,0.707107,0.000000,0.000000,0.707107 +6187,0.707107,0.000000,0.000000,0.707107 +6188,0.707107,0.000000,0.000000,0.707107 +6189,0.707107,0.000000,0.000000,0.707107 +6190,0.707107,0.000000,0.000000,0.707107 +6191,0.707107,0.000000,0.000000,0.707107 +6192,0.707107,0.000000,0.000000,0.707107 +6193,0.707107,0.000000,0.000000,0.707107 +6194,0.707107,0.000000,0.000000,0.707107 +6195,0.707107,0.000000,0.000000,0.707107 +6196,0.707107,0.000000,0.000000,0.707107 +6197,0.707107,0.000000,0.000000,0.707107 +6198,0.707107,0.000000,0.000000,0.707107 +6199,0.707107,0.000000,0.000000,0.707107 +6200,0.707107,0.000000,0.000000,0.707107 +6201,0.707107,0.000000,0.000000,0.707107 +6202,0.707107,0.000000,0.000000,0.707107 +6203,0.707107,0.000000,0.000000,0.707107 +6204,0.707107,0.000000,0.000000,0.707107 +6205,0.707107,0.000000,0.000000,0.707107 +6206,0.707107,0.000000,0.000000,0.707107 +6207,0.707107,0.000000,0.000000,0.707107 +6208,0.707107,0.000000,0.000000,0.707107 +6209,0.707107,0.000000,0.000000,0.707107 +6210,0.707107,0.000000,0.000000,0.707107 +6211,0.707107,0.000000,0.000000,0.707107 +6212,0.707107,0.000000,0.000000,0.707107 +6213,0.707107,0.000000,0.000000,0.707107 +6214,0.707107,0.000000,0.000000,0.707107 +6215,0.707107,0.000000,0.000000,0.707107 +6216,0.707107,0.000000,0.000000,0.707107 +6217,0.707107,0.000000,0.000000,0.707107 +6218,0.707107,0.000000,0.000000,0.707107 +6219,0.707107,0.000000,0.000000,0.707107 +6220,0.707107,0.000000,0.000000,0.707107 +6221,0.707107,0.000000,0.000000,0.707107 +6222,0.707107,0.000000,0.000000,0.707107 +6223,0.707107,0.000000,0.000000,0.707107 +6224,0.707107,0.000000,0.000000,0.707107 +6225,0.707107,0.000000,0.000000,0.707107 +6226,0.707107,0.000000,0.000000,0.707107 +6227,0.707107,0.000000,0.000000,0.707107 +6228,0.707107,0.000000,0.000000,0.707107 +6229,0.707107,0.000000,0.000000,0.707107 +6230,0.707107,0.000000,0.000000,0.707107 +6231,0.707107,0.000000,0.000000,0.707107 +6232,0.707107,0.000000,0.000000,0.707107 +6233,0.707107,0.000000,0.000000,0.707107 +6234,0.707107,0.000000,0.000000,0.707107 +6235,0.707107,0.000000,0.000000,0.707107 +6236,0.707107,0.000000,0.000000,0.707107 +6237,0.707107,0.000000,0.000000,0.707107 +6238,0.707107,0.000000,0.000000,0.707107 +6239,0.707107,0.000000,0.000000,0.707107 +6240,0.707107,0.000000,0.000000,0.707107 +6241,0.707107,0.000000,0.000000,0.707107 +6242,0.707107,0.000000,0.000000,0.707107 +6243,0.707107,0.000000,0.000000,0.707107 +6244,0.707107,0.000000,0.000000,0.707107 +6245,0.707107,0.000000,0.000000,0.707107 +6246,0.707107,0.000000,0.000000,0.707107 +6247,0.707107,0.000000,0.000000,0.707107 +6248,0.707107,0.000000,0.000000,0.707107 +6249,0.707107,0.000000,0.000000,0.707107 +6250,0.707107,0.000000,0.000000,0.707107 +6251,0.707107,0.000000,0.000000,0.707107 +6252,0.707107,0.000000,0.000000,0.707107 +6253,0.707107,0.000000,0.000000,0.707107 +6254,0.707107,0.000000,0.000000,0.707107 +6255,0.707107,0.000000,0.000000,0.707107 +6256,0.707107,0.000000,0.000000,0.707107 +6257,0.707107,0.000000,0.000000,0.707107 +6258,0.707107,0.000000,0.000000,0.707107 +6259,0.707107,0.000000,0.000000,0.707107 +6260,0.707107,0.000000,0.000000,0.707107 +6261,0.707107,0.000000,0.000000,0.707107 +6262,0.707107,0.000000,0.000000,0.707107 +6263,0.707107,0.000000,0.000000,0.707107 +6264,0.707107,0.000000,0.000000,0.707107 +6265,0.707107,0.000000,0.000000,0.707107 +6266,0.707107,0.000000,0.000000,0.707107 +6267,0.707107,0.000000,0.000000,0.707107 +6268,0.707107,0.000000,0.000000,0.707107 +6269,0.707107,0.000000,0.000000,0.707107 +6270,0.707107,0.000000,0.000000,0.707107 +6271,0.707107,0.000000,0.000000,0.707107 +6272,0.707107,0.000000,0.000000,0.707107 +6273,0.707107,0.000000,0.000000,0.707107 +6274,0.707107,0.000000,0.000000,0.707107 +6275,0.707107,0.000000,0.000000,0.707107 +6276,0.707107,0.000000,0.000000,0.707107 +6277,0.707107,0.000000,0.000000,0.707107 +6278,0.707107,0.000000,0.000000,0.707107 +6279,0.707107,0.000000,0.000000,0.707107 +6280,0.707107,0.000000,0.000000,0.707107 +6281,0.707107,0.000000,0.000000,0.707107 +6282,0.707107,0.000000,0.000000,0.707107 +6283,0.707107,0.000000,0.000000,0.707107 +6284,0.707107,0.000000,0.000000,0.707107 +6285,0.707107,0.000000,0.000000,0.707107 +6286,0.707107,0.000000,0.000000,0.707107 +6287,0.707107,0.000000,0.000000,0.707107 +6288,0.707107,0.000000,0.000000,0.707107 +6289,0.707107,0.000000,0.000000,0.707107 +6290,0.707107,0.000000,0.000000,0.707107 +6291,0.707107,0.000000,0.000000,0.707107 +6292,0.707107,0.000000,0.000000,0.707107 +6293,0.707107,0.000000,0.000000,0.707107 +6294,0.707107,0.000000,0.000000,0.707107 +6295,0.707107,0.000000,0.000000,0.707107 +6296,0.707107,0.000000,0.000000,0.707107 +6297,0.707107,0.000000,0.000000,0.707107 +6298,0.707107,0.000000,0.000000,0.707107 +6299,0.707107,0.000000,0.000000,0.707107 +6300,0.707107,0.000000,0.000000,0.707107 +6301,0.707107,0.000000,0.000000,0.707107 +6302,0.707107,0.000000,0.000000,0.707107 +6303,0.707107,0.000000,0.000000,0.707107 +6304,0.707107,0.000000,0.000000,0.707107 +6305,0.707107,0.000000,0.000000,0.707107 +6306,0.707107,0.000000,0.000000,0.707107 +6307,0.707107,0.000000,0.000000,0.707107 +6308,0.707107,0.000000,0.000000,0.707107 +6309,0.707107,0.000000,0.000000,0.707107 +6310,0.707107,0.000000,0.000000,0.707107 +6311,0.707107,0.000000,0.000000,0.707107 +6312,0.707107,0.000000,0.000000,0.707107 +6313,0.707107,0.000000,0.000000,0.707107 +6314,0.707107,0.000000,0.000000,0.707107 +6315,0.707107,0.000000,0.000000,0.707107 +6316,0.707107,0.000000,0.000000,0.707107 +6317,0.707107,0.000000,0.000000,0.707107 +6318,0.707107,0.000000,0.000000,0.707107 +6319,0.707107,0.000000,0.000000,0.707107 +6320,0.707107,0.000000,0.000000,0.707107 +6321,0.707107,0.000000,0.000000,0.707107 +6322,0.707107,0.000000,0.000000,0.707107 +6323,0.707107,0.000000,0.000000,0.707107 +6324,0.707107,0.000000,0.000000,0.707107 +6325,0.707107,0.000000,0.000000,0.707107 +6326,0.707107,0.000000,0.000000,0.707107 +6327,0.707107,0.000000,0.000000,0.707107 +6328,0.707107,0.000000,0.000000,0.707107 +6329,0.707107,0.000000,0.000000,0.707107 +6330,0.707107,0.000000,0.000000,0.707107 +6331,0.707107,0.000000,0.000000,0.707107 +6332,0.707107,0.000000,0.000000,0.707107 +6333,0.707107,0.000000,0.000000,0.707107 +6334,0.707107,0.000000,0.000000,0.707107 +6335,0.707107,0.000000,0.000000,0.707107 +6336,0.707107,0.000000,0.000000,0.707107 +6337,0.707107,0.000000,0.000000,0.707107 +6338,0.707107,0.000000,0.000000,0.707107 +6339,0.707107,0.000000,0.000000,0.707107 +6340,0.707107,0.000000,0.000000,0.707107 +6341,0.707107,0.000000,0.000000,0.707107 +6342,0.707107,0.000000,0.000000,0.707107 +6343,0.707107,0.000000,0.000000,0.707107 +6344,0.707107,0.000000,0.000000,0.707107 +6345,0.707107,0.000000,0.000000,0.707107 +6346,0.707107,0.000000,0.000000,0.707107 +6347,0.707107,0.000000,0.000000,0.707107 +6348,0.707107,0.000000,0.000000,0.707107 +6349,0.707107,0.000000,0.000000,0.707107 +6350,0.707107,0.000000,0.000000,0.707107 +6351,0.707107,0.000000,0.000000,0.707107 +6352,0.707107,0.000000,0.000000,0.707107 +6353,0.707107,0.000000,0.000000,0.707107 +6354,0.707107,0.000000,0.000000,0.707107 +6355,0.707107,0.000000,0.000000,0.707107 +6356,0.707107,0.000000,0.000000,0.707107 +6357,0.707107,0.000000,0.000000,0.707107 +6358,0.707107,0.000000,0.000000,0.707107 +6359,0.707107,0.000000,0.000000,0.707107 +6360,0.707107,0.000000,0.000000,0.707107 +6361,0.707107,0.000000,0.000000,0.707107 +6362,0.707107,0.000000,0.000000,0.707107 +6363,0.707107,0.000000,0.000000,0.707107 +6364,0.707107,0.000000,0.000000,0.707107 +6365,0.707107,0.000000,0.000000,0.707107 +6366,0.707107,0.000000,0.000000,0.707107 +6367,0.707107,0.000000,0.000000,0.707107 +6368,0.707107,0.000000,0.000000,0.707107 +6369,0.707107,0.000000,0.000000,0.707107 +6370,0.707107,0.000000,0.000000,0.707107 +6371,0.707107,0.000000,0.000000,0.707107 +6372,0.707107,0.000000,0.000000,0.707107 +6373,0.707107,0.000000,0.000000,0.707107 +6374,0.707107,0.000000,0.000000,0.707107 +6375,0.707107,0.000000,0.000000,0.707107 +6376,0.707107,0.000000,0.000000,0.707107 +6377,0.707107,0.000000,0.000000,0.707107 +6378,0.707107,0.000000,0.000000,0.707107 +6379,0.707107,0.000000,0.000000,0.707107 +6380,0.707107,0.000000,0.000000,0.707107 +6381,0.707107,0.000000,0.000000,0.707107 +6382,0.707107,0.000000,0.000000,0.707107 +6383,0.707107,0.000000,0.000000,0.707107 +6384,0.707107,0.000000,0.000000,0.707107 +6385,0.707107,0.000000,0.000000,0.707107 +6386,0.707107,0.000000,0.000000,0.707107 +6387,0.707107,0.000000,0.000000,0.707107 +6388,0.707107,0.000000,0.000000,0.707107 +6389,0.707107,0.000000,0.000000,0.707107 +6390,0.707107,0.000000,0.000000,0.707107 +6391,0.707107,0.000000,0.000000,0.707107 +6392,0.707107,0.000000,0.000000,0.707107 +6393,0.707107,0.000000,0.000000,0.707107 +6394,0.707107,0.000000,0.000000,0.707107 +6395,0.707107,0.000000,0.000000,0.707107 +6396,0.707107,0.000000,0.000000,0.707107 +6397,0.707107,0.000000,0.000000,0.707107 +6398,0.707107,0.000000,0.000000,0.707107 +6399,0.707107,0.000000,0.000000,0.707107 +6400,0.707107,0.000000,0.000000,0.707107 +6401,0.707107,0.000000,0.000000,0.707107 +6402,0.707107,0.000000,0.000000,0.707107 +6403,0.707107,0.000000,0.000000,0.707107 +6404,0.707107,0.000000,0.000000,0.707107 +6405,0.707107,0.000000,0.000000,0.707107 +6406,0.707107,0.000000,0.000000,0.707107 +6407,0.707107,0.000000,0.000000,0.707107 +6408,0.707107,0.000000,0.000000,0.707107 +6409,0.707107,0.000000,0.000000,0.707107 +6410,0.707107,0.000000,0.000000,0.707107 +6411,0.707107,0.000000,0.000000,0.707107 +6412,0.707107,0.000000,0.000000,0.707107 +6413,0.707107,0.000000,0.000000,0.707107 +6414,0.707107,0.000000,0.000000,0.707107 +6415,0.707107,0.000000,0.000000,0.707107 +6416,0.707107,0.000000,0.000000,0.707107 +6417,0.707107,0.000000,0.000000,0.707107 +6418,0.707107,0.000000,0.000000,0.707107 +6419,0.707107,0.000000,0.000000,0.707107 +6420,0.707107,0.000000,0.000000,0.707107 +6421,0.707107,0.000000,0.000000,0.707107 +6422,0.707107,0.000000,0.000000,0.707107 +6423,0.707107,0.000000,0.000000,0.707107 +6424,0.707107,0.000000,0.000000,0.707107 +6425,0.707107,0.000000,0.000000,0.707107 +6426,0.707107,0.000000,0.000000,0.707107 +6427,0.707107,0.000000,0.000000,0.707107 +6428,0.707107,0.000000,0.000000,0.707107 +6429,0.707107,0.000000,0.000000,0.707107 +6430,0.707107,0.000000,0.000000,0.707107 +6431,0.707107,0.000000,0.000000,0.707107 +6432,0.707107,0.000000,0.000000,0.707107 +6433,0.707107,0.000000,0.000000,0.707107 +6434,0.707107,0.000000,0.000000,0.707107 +6435,0.707107,0.000000,0.000000,0.707107 +6436,0.707107,0.000000,0.000000,0.707107 +6437,0.707107,0.000000,0.000000,0.707107 +6438,0.707107,0.000000,0.000000,0.707107 +6439,0.707107,0.000000,0.000000,0.707107 +6440,0.707107,0.000000,0.000000,0.707107 +6441,0.707107,0.000000,0.000000,0.707107 +6442,0.707107,0.000000,0.000000,0.707107 +6443,0.707107,0.000000,0.000000,0.707107 +6444,0.707107,0.000000,0.000000,0.707107 +6445,0.707107,0.000000,0.000000,0.707107 +6446,0.707107,0.000000,0.000000,0.707107 +6447,0.707107,0.000000,0.000000,0.707107 +6448,0.707107,0.000000,0.000000,0.707107 +6449,0.707107,0.000000,0.000000,0.707107 +6450,0.707107,0.000000,0.000000,0.707107 +6451,0.707107,0.000000,0.000000,0.707107 +6452,0.707107,0.000000,0.000000,0.707107 +6453,0.707107,0.000000,0.000000,0.707107 +6454,0.707107,0.000000,0.000000,0.707107 +6455,0.707107,0.000000,0.000000,0.707107 +6456,0.707107,0.000000,0.000000,0.707107 +6457,0.707107,0.000000,0.000000,0.707107 +6458,0.707107,0.000000,0.000000,0.707107 +6459,0.707107,0.000000,0.000000,0.707107 +6460,0.707107,0.000000,0.000000,0.707107 +6461,0.707107,0.000000,0.000000,0.707107 +6462,0.707107,0.000000,0.000000,0.707107 +6463,0.707107,0.000000,0.000000,0.707107 +6464,0.707107,0.000000,0.000000,0.707107 +6465,0.707107,0.000000,0.000000,0.707107 +6466,0.707107,0.000000,0.000000,0.707107 +6467,0.707107,0.000000,0.000000,0.707107 +6468,0.707107,0.000000,0.000000,0.707107 +6469,0.707107,0.000000,0.000000,0.707107 +6470,0.707107,0.000000,0.000000,0.707107 +6471,0.707107,0.000000,0.000000,0.707107 +6472,0.707107,0.000000,0.000000,0.707107 +6473,0.707107,0.000000,0.000000,0.707107 +6474,0.707107,0.000000,0.000000,0.707107 +6475,0.707107,0.000000,0.000000,0.707107 +6476,0.707107,0.000000,0.000000,0.707107 +6477,0.707107,0.000000,0.000000,0.707107 +6478,0.707107,0.000000,0.000000,0.707107 +6479,0.707107,0.000000,0.000000,0.707107 +6480,0.707107,0.000000,0.000000,0.707107 +6481,0.707107,0.000000,0.000000,0.707107 +6482,0.707107,0.000000,0.000000,0.707107 +6483,0.707107,0.000000,0.000000,0.707107 +6484,0.707107,0.000000,0.000000,0.707107 +6485,0.707107,0.000000,0.000000,0.707107 +6486,0.707107,0.000000,0.000000,0.707107 +6487,0.707107,0.000000,0.000000,0.707107 +6488,0.707107,0.000000,0.000000,0.707107 +6489,0.707107,0.000000,0.000000,0.707107 +6490,0.707107,0.000000,0.000000,0.707107 +6491,0.707107,0.000000,0.000000,0.707107 +6492,0.707107,0.000000,0.000000,0.707107 +6493,0.707107,0.000000,0.000000,0.707107 +6494,0.707107,0.000000,0.000000,0.707107 +6495,0.707107,0.000000,0.000000,0.707107 +6496,0.707107,0.000000,0.000000,0.707107 +6497,0.707107,0.000000,0.000000,0.707107 +6498,0.707107,0.000000,0.000000,0.707107 +6499,0.707107,0.000000,0.000000,0.707107 +6500,0.707107,0.000000,0.000000,0.707107 +6501,0.707107,0.000000,0.000000,0.707107 +6502,0.707107,0.000000,0.000000,0.707107 +6503,0.707107,0.000000,0.000000,0.707107 +6504,0.707107,0.000000,0.000000,0.707107 +6505,0.707107,0.000000,0.000000,0.707107 +6506,0.707107,0.000000,0.000000,0.707107 +6507,0.707107,0.000000,0.000000,0.707107 +6508,0.707107,0.000000,0.000000,0.707107 +6509,0.707107,0.000000,0.000000,0.707107 +6510,0.707107,0.000000,0.000000,0.707107 +6511,0.707107,0.000000,0.000000,0.707107 +6512,0.707107,0.000000,0.000000,0.707107 +6513,0.707107,0.000000,0.000000,0.707107 +6514,0.707107,0.000000,0.000000,0.707107 +6515,0.707107,0.000000,0.000000,0.707107 +6516,0.707107,0.000000,0.000000,0.707107 +6517,0.707107,0.000000,0.000000,0.707107 +6518,0.707107,0.000000,0.000000,0.707107 +6519,0.707107,0.000000,0.000000,0.707107 +6520,0.707107,0.000000,0.000000,0.707107 +6521,0.707107,0.000000,0.000000,0.707107 +6522,0.707107,0.000000,0.000000,0.707107 +6523,0.707107,0.000000,0.000000,0.707107 +6524,0.707107,0.000000,0.000000,0.707107 +6525,0.707107,0.000000,0.000000,0.707107 +6526,0.707107,0.000000,0.000000,0.707107 +6527,0.707107,0.000000,0.000000,0.707107 +6528,0.707107,0.000000,0.000000,0.707107 +6529,0.707107,0.000000,0.000000,0.707107 +6530,0.707107,0.000000,0.000000,0.707107 +6531,0.707107,0.000000,0.000000,0.707107 +6532,0.707107,0.000000,0.000000,0.707107 +6533,0.707107,0.000000,0.000000,0.707107 +6534,0.707107,0.000000,0.000000,0.707107 +6535,0.707107,0.000000,0.000000,0.707107 +6536,0.707107,0.000000,0.000000,0.707107 +6537,0.707107,0.000000,0.000000,0.707107 +6538,0.707107,0.000000,0.000000,0.707107 +6539,0.707107,0.000000,0.000000,0.707107 +6540,0.707107,0.000000,0.000000,0.707107 +6541,0.707107,0.000000,0.000000,0.707107 +6542,0.707107,0.000000,0.000000,0.707107 +6543,0.707107,0.000000,0.000000,0.707107 +6544,0.707107,0.000000,0.000000,0.707107 +6545,0.707107,0.000000,0.000000,0.707107 +6546,0.707107,0.000000,0.000000,0.707107 +6547,0.707107,0.000000,0.000000,0.707107 +6548,0.707107,0.000000,0.000000,0.707107 +6549,0.707107,0.000000,0.000000,0.707107 +6550,0.707107,0.000000,0.000000,0.707107 +6551,0.707107,0.000000,0.000000,0.707107 +6552,0.707107,0.000000,0.000000,0.707107 +6553,0.707107,0.000000,0.000000,0.707107 +6554,0.707107,0.000000,0.000000,0.707107 +6555,0.707107,0.000000,0.000000,0.707107 +6556,0.707107,0.000000,0.000000,0.707107 +6557,0.707107,0.000000,0.000000,0.707107 +6558,0.707107,0.000000,0.000000,0.707107 +6559,0.707107,0.000000,0.000000,0.707107 +6560,0.707107,0.000000,0.000000,0.707107 +6561,0.707107,0.000000,0.000000,0.707107 +6562,0.707107,0.000000,0.000000,0.707107 +6563,0.707107,0.000000,0.000000,0.707107 +6564,0.707107,0.000000,0.000000,0.707107 +6565,0.707107,0.000000,0.000000,0.707107 +6566,0.707107,0.000000,0.000000,0.707107 +6567,0.707107,0.000000,0.000000,0.707107 +6568,0.707107,0.000000,0.000000,0.707107 +6569,0.707107,0.000000,0.000000,0.707107 +6570,0.707107,0.000000,0.000000,0.707107 +6571,0.707107,0.000000,0.000000,0.707107 +6572,0.707107,0.000000,0.000000,0.707107 +6573,0.707107,0.000000,0.000000,0.707107 +6574,0.707107,0.000000,0.000000,0.707107 +6575,0.707107,0.000000,0.000000,0.707107 +6576,0.707107,0.000000,0.000000,0.707107 +6577,0.707107,0.000000,0.000000,0.707107 +6578,0.707107,0.000000,0.000000,0.707107 +6579,0.707107,0.000000,0.000000,0.707107 +6580,0.707107,0.000000,0.000000,0.707107 +6581,0.707107,0.000000,0.000000,0.707107 +6582,0.707107,0.000000,0.000000,0.707107 +6583,0.707107,0.000000,0.000000,0.707107 +6584,0.707107,0.000000,0.000000,0.707107 +6585,0.707107,0.000000,0.000000,0.707107 +6586,0.707107,0.000000,0.000000,0.707107 +6587,0.707107,0.000000,0.000000,0.707107 +6588,0.707107,0.000000,0.000000,0.707107 +6589,0.707107,0.000000,0.000000,0.707107 +6590,0.707107,0.000000,0.000000,0.707107 +6591,0.707107,0.000000,0.000000,0.707107 +6592,0.707107,0.000000,0.000000,0.707107 +6593,0.707107,0.000000,0.000000,0.707107 +6594,0.707107,0.000000,0.000000,0.707107 +6595,0.707107,0.000000,0.000000,0.707107 +6596,0.707107,0.000000,0.000000,0.707107 +6597,0.707107,0.000000,0.000000,0.707107 +6598,0.707107,0.000000,0.000000,0.707107 +6599,0.707107,0.000000,0.000000,0.707107 +6600,0.707107,0.000000,0.000000,0.707107 +6601,0.707107,0.000000,0.000000,0.707107 +6602,0.707107,0.000000,0.000000,0.707107 +6603,0.707107,0.000000,0.000000,0.707107 +6604,0.707107,0.000000,0.000000,0.707107 +6605,0.707107,0.000000,0.000000,0.707107 +6606,0.707107,0.000000,0.000000,0.707107 +6607,0.707107,0.000000,0.000000,0.707107 +6608,0.707107,0.000000,0.000000,0.707107 +6609,0.707107,0.000000,0.000000,0.707107 +6610,0.707107,0.000000,0.000000,0.707107 +6611,0.707107,0.000000,0.000000,0.707107 +6612,0.707107,0.000000,0.000000,0.707107 +6613,0.707107,0.000000,0.000000,0.707107 +6614,0.707107,0.000000,0.000000,0.707107 +6615,0.707107,0.000000,0.000000,0.707107 +6616,0.707107,0.000000,0.000000,0.707107 +6617,0.707107,0.000000,0.000000,0.707107 +6618,0.707107,0.000000,0.000000,0.707107 +6619,0.707107,0.000000,0.000000,0.707107 +6620,0.707107,0.000000,0.000000,0.707107 +6621,0.707107,0.000000,0.000000,0.707107 +6622,0.707107,0.000000,0.000000,0.707107 +6623,0.707107,0.000000,0.000000,0.707107 +6624,0.707107,0.000000,0.000000,0.707107 +6625,0.707107,0.000000,0.000000,0.707107 +6626,0.707107,0.000000,0.000000,0.707107 +6627,0.707107,0.000000,0.000000,0.707107 +6628,0.707107,0.000000,0.000000,0.707107 +6629,0.707107,0.000000,0.000000,0.707107 +6630,0.707107,0.000000,0.000000,0.707107 +6631,0.707107,0.000000,0.000000,0.707107 +6632,0.707107,0.000000,0.000000,0.707107 +6633,0.707107,0.000000,0.000000,0.707107 +6634,0.707107,0.000000,0.000000,0.707107 +6635,0.707107,0.000000,0.000000,0.707107 +6636,0.707107,0.000000,0.000000,0.707107 +6637,0.707107,0.000000,0.000000,0.707107 +6638,0.707107,0.000000,0.000000,0.707107 +6639,0.707107,0.000000,0.000000,0.707107 +6640,0.707107,0.000000,0.000000,0.707107 +6641,0.707107,0.000000,0.000000,0.707107 +6642,0.707107,0.000000,0.000000,0.707107 +6643,0.707107,0.000000,0.000000,0.707107 +6644,0.707107,0.000000,0.000000,0.707107 +6645,0.707107,0.000000,0.000000,0.707107 +6646,0.707107,0.000000,0.000000,0.707107 +6647,0.707107,0.000000,0.000000,0.707107 +6648,0.707107,0.000000,0.000000,0.707107 +6649,0.707107,0.000000,0.000000,0.707107 +6650,0.707107,0.000000,0.000000,0.707107 +6651,0.707107,0.000000,0.000000,0.707107 +6652,0.707107,0.000000,0.000000,0.707107 +6653,0.707107,0.000000,0.000000,0.707107 +6654,0.707107,0.000000,0.000000,0.707107 +6655,0.707107,0.000000,0.000000,0.707107 +6656,0.707107,0.000000,0.000000,0.707107 +6657,0.707107,0.000000,0.000000,0.707107 +6658,0.707107,0.000000,0.000000,0.707107 +6659,0.707107,0.000000,0.000000,0.707107 +6660,0.707107,0.000000,0.000000,0.707107 +6661,0.707107,0.000000,0.000000,0.707107 +6662,0.707107,0.000000,0.000000,0.707107 +6663,0.707107,0.000000,0.000000,0.707107 +6664,0.707107,0.000000,0.000000,0.707107 +6665,0.707107,0.000000,0.000000,0.707107 +6666,0.707107,0.000000,0.000000,0.707107 +6667,0.707107,0.000000,0.000000,0.707107 +6668,0.707107,0.000000,0.000000,0.707107 +6669,0.707107,0.000000,0.000000,0.707107 +6670,0.707107,0.000000,0.000000,0.707107 +6671,0.707107,0.000000,0.000000,0.707107 +6672,0.707107,0.000000,0.000000,0.707107 +6673,0.707107,0.000000,0.000000,0.707107 +6674,0.707107,0.000000,0.000000,0.707107 +6675,0.707107,0.000000,0.000000,0.707107 +6676,0.707107,0.000000,0.000000,0.707107 +6677,0.707107,0.000000,0.000000,0.707107 +6678,0.707107,0.000000,0.000000,0.707107 +6679,0.707107,0.000000,0.000000,0.707107 +6680,0.707107,0.000000,0.000000,0.707107 +6681,0.707107,0.000000,0.000000,0.707107 +6682,0.707107,0.000000,0.000000,0.707107 +6683,0.707107,0.000000,0.000000,0.707107 +6684,0.707107,0.000000,0.000000,0.707107 +6685,0.707107,0.000000,0.000000,0.707107 +6686,0.707107,0.000000,0.000000,0.707107 +6687,0.707107,0.000000,0.000000,0.707107 +6688,0.707107,0.000000,0.000000,0.707107 +6689,0.707107,0.000000,0.000000,0.707107 +6690,0.707107,0.000000,0.000000,0.707107 +6691,0.707107,0.000000,0.000000,0.707107 +6692,0.707107,0.000000,0.000000,0.707107 +6693,0.707107,0.000000,0.000000,0.707107 +6694,0.707107,0.000000,0.000000,0.707107 +6695,0.707107,0.000000,0.000000,0.707107 +6696,0.707107,0.000000,0.000000,0.707107 +6697,0.707107,0.000000,0.000000,0.707107 +6698,0.707107,0.000000,0.000000,0.707107 +6699,0.707107,0.000000,0.000000,0.707107 +6700,0.707107,0.000000,0.000000,0.707107 +6701,0.707107,0.000000,0.000000,0.707107 +6702,0.707107,0.000000,0.000000,0.707107 +6703,0.707107,0.000000,0.000000,0.707107 +6704,0.707107,0.000000,0.000000,0.707107 +6705,0.707107,0.000000,0.000000,0.707107 +6706,0.707107,0.000000,0.000000,0.707107 +6707,0.707107,0.000000,0.000000,0.707107 +6708,0.707107,0.000000,0.000000,0.707107 +6709,0.707107,0.000000,0.000000,0.707107 +6710,0.707107,0.000000,0.000000,0.707107 +6711,0.707107,0.000000,0.000000,0.707107 +6712,0.707107,0.000000,0.000000,0.707107 +6713,0.707107,0.000000,0.000000,0.707107 +6714,0.707107,0.000000,0.000000,0.707107 +6715,0.707107,0.000000,0.000000,0.707107 +6716,0.707107,0.000000,0.000000,0.707107 +6717,0.707107,0.000000,0.000000,0.707107 +6718,0.707107,0.000000,0.000000,0.707107 +6719,0.707107,0.000000,0.000000,0.707107 +6720,0.707107,0.000000,0.000000,0.707107 +6721,0.707107,0.000000,0.000000,0.707107 +6722,0.707107,0.000000,0.000000,0.707107 +6723,0.707107,0.000000,0.000000,0.707107 +6724,0.707107,0.000000,0.000000,0.707107 +6725,0.707107,0.000000,0.000000,0.707107 +6726,0.707107,0.000000,0.000000,0.707107 +6727,0.707107,0.000000,0.000000,0.707107 +6728,0.707107,0.000000,0.000000,0.707107 +6729,0.707107,0.000000,0.000000,0.707107 +6730,0.707107,0.000000,0.000000,0.707107 +6731,0.707107,0.000000,0.000000,0.707107 +6732,0.707107,0.000000,0.000000,0.707107 +6733,0.707107,0.000000,0.000000,0.707107 +6734,0.707107,0.000000,0.000000,0.707107 +6735,0.707107,0.000000,0.000000,0.707107 +6736,0.707107,0.000000,0.000000,0.707107 +6737,0.707107,0.000000,0.000000,0.707107 +6738,0.707107,0.000000,0.000000,0.707107 +6739,0.707107,0.000000,0.000000,0.707107 +6740,0.707107,0.000000,0.000000,0.707107 +6741,0.707107,0.000000,0.000000,0.707107 +6742,0.707107,0.000000,0.000000,0.707107 +6743,0.707107,0.000000,0.000000,0.707107 +6744,0.707107,0.000000,0.000000,0.707107 +6745,0.707107,0.000000,0.000000,0.707107 +6746,0.707107,0.000000,0.000000,0.707107 +6747,0.707107,0.000000,0.000000,0.707107 +6748,0.707107,0.000000,0.000000,0.707107 +6749,0.707107,0.000000,0.000000,0.707107 +6750,0.707107,0.000000,0.000000,0.707107 +6751,0.707107,0.000000,0.000000,0.707107 +6752,0.707107,0.000000,0.000000,0.707107 +6753,0.707107,0.000000,0.000000,0.707107 +6754,0.707107,0.000000,0.000000,0.707107 +6755,0.707107,0.000000,0.000000,0.707107 +6756,0.707107,0.000000,0.000000,0.707107 +6757,0.707107,0.000000,0.000000,0.707107 +6758,0.707107,0.000000,0.000000,0.707107 +6759,0.707107,0.000000,0.000000,0.707107 +6760,0.707107,0.000000,0.000000,0.707107 +6761,0.707107,0.000000,0.000000,0.707107 +6762,0.707107,0.000000,0.000000,0.707107 +6763,0.707107,0.000000,0.000000,0.707107 +6764,0.707107,0.000000,0.000000,0.707107 +6765,0.707107,0.000000,0.000000,0.707107 +6766,0.707107,0.000000,0.000000,0.707107 +6767,0.707107,0.000000,0.000000,0.707107 +6768,0.707107,0.000000,0.000000,0.707107 +6769,0.707107,0.000000,0.000000,0.707107 +6770,0.707107,0.000000,0.000000,0.707107 +6771,0.707107,0.000000,0.000000,0.707107 +6772,0.707107,0.000000,0.000000,0.707107 +6773,0.707107,0.000000,0.000000,0.707107 +6774,0.707107,0.000000,0.000000,0.707107 +6775,0.707107,0.000000,0.000000,0.707107 +6776,0.707107,0.000000,0.000000,0.707107 +6777,0.707107,0.000000,0.000000,0.707107 +6778,0.707107,0.000000,0.000000,0.707107 +6779,0.707107,0.000000,0.000000,0.707107 +6780,0.707107,0.000000,0.000000,0.707107 +6781,0.707107,0.000000,0.000000,0.707107 +6782,0.707107,0.000000,0.000000,0.707107 +6783,0.707107,0.000000,0.000000,0.707107 +6784,0.707107,0.000000,0.000000,0.707107 +6785,0.707107,0.000000,0.000000,0.707107 +6786,0.707107,0.000000,0.000000,0.707107 +6787,0.707107,0.000000,0.000000,0.707107 +6788,0.707107,0.000000,0.000000,0.707107 +6789,0.707107,0.000000,0.000000,0.707107 +6790,0.707107,0.000000,0.000000,0.707107 +6791,0.707107,0.000000,0.000000,0.707107 +6792,0.707107,0.000000,0.000000,0.707107 +6793,0.707107,0.000000,0.000000,0.707107 +6794,0.707107,0.000000,0.000000,0.707107 +6795,0.707107,0.000000,0.000000,0.707107 +6796,0.707107,0.000000,0.000000,0.707107 +6797,0.707107,0.000000,0.000000,0.707107 +6798,0.707107,0.000000,0.000000,0.707107 +6799,0.707107,0.000000,0.000000,0.707107 +6800,0.707107,0.000000,0.000000,0.707107 +6801,0.707107,0.000000,0.000000,0.707107 +6802,0.707107,0.000000,0.000000,0.707107 +6803,0.707107,0.000000,0.000000,0.707107 +6804,0.707107,0.000000,0.000000,0.707107 +6805,0.707107,0.000000,0.000000,0.707107 +6806,0.707107,0.000000,0.000000,0.707107 +6807,0.707107,0.000000,0.000000,0.707107 +6808,0.707107,0.000000,0.000000,0.707107 +6809,0.707107,0.000000,0.000000,0.707107 +6810,0.707107,0.000000,0.000000,0.707107 +6811,0.707107,0.000000,0.000000,0.707107 +6812,0.707107,0.000000,0.000000,0.707107 +6813,0.707107,0.000000,0.000000,0.707107 +6814,0.707107,0.000000,0.000000,0.707107 +6815,0.707107,0.000000,0.000000,0.707107 +6816,0.707107,0.000000,0.000000,0.707107 +6817,0.707107,0.000000,0.000000,0.707107 +6818,0.707107,0.000000,0.000000,0.707107 +6819,0.707107,0.000000,0.000000,0.707107 +6820,0.707107,0.000000,0.000000,0.707107 +6821,0.707107,0.000000,0.000000,0.707107 +6822,0.707107,0.000000,0.000000,0.707107 +6823,0.707107,0.000000,0.000000,0.707107 +6824,0.707107,0.000000,0.000000,0.707107 +6825,0.707107,0.000000,0.000000,0.707107 +6826,0.707107,0.000000,0.000000,0.707107 +6827,0.707107,0.000000,0.000000,0.707107 +6828,0.707107,0.000000,0.000000,0.707107 +6829,0.707107,0.000000,0.000000,0.707107 +6830,0.707107,0.000000,0.000000,0.707107 +6831,0.707107,0.000000,0.000000,0.707107 +6832,0.707107,0.000000,0.000000,0.707107 +6833,0.707107,0.000000,0.000000,0.707107 +6834,0.707107,0.000000,0.000000,0.707107 +6835,0.707107,0.000000,0.000000,0.707107 +6836,0.707107,0.000000,0.000000,0.707107 +6837,0.707107,0.000000,0.000000,0.707107 +6838,0.707107,0.000000,0.000000,0.707107 +6839,0.707107,0.000000,0.000000,0.707107 +6840,0.707107,0.000000,0.000000,0.707107 +6841,0.707107,0.000000,0.000000,0.707107 +6842,0.707107,0.000000,0.000000,0.707107 +6843,0.707107,0.000000,0.000000,0.707107 +6844,0.707107,0.000000,0.000000,0.707107 +6845,0.707107,0.000000,0.000000,0.707107 +6846,0.707107,0.000000,0.000000,0.707107 +6847,0.707107,0.000000,0.000000,0.707107 +6848,0.707107,0.000000,0.000000,0.707107 +6849,0.707107,0.000000,0.000000,0.707107 +6850,0.707107,0.000000,0.000000,0.707107 +6851,0.707107,0.000000,0.000000,0.707107 +6852,0.707107,0.000000,0.000000,0.707107 +6853,0.707107,0.000000,0.000000,0.707107 +6854,0.707107,0.000000,0.000000,0.707107 +6855,0.707107,0.000000,0.000000,0.707107 +6856,0.707107,0.000000,0.000000,0.707107 +6857,0.707107,0.000000,0.000000,0.707107 +6858,0.707107,0.000000,0.000000,0.707107 +6859,0.707107,0.000000,0.000000,0.707107 +6860,0.707107,0.000000,0.000000,0.707107 +6861,0.707107,0.000000,0.000000,0.707107 +6862,0.707107,0.000000,0.000000,0.707107 +6863,0.707107,0.000000,0.000000,0.707107 +6864,0.707107,0.000000,0.000000,0.707107 +6865,0.707107,0.000000,0.000000,0.707107 +6866,0.707107,0.000000,0.000000,0.707107 +6867,0.707107,0.000000,0.000000,0.707107 +6868,0.707107,0.000000,0.000000,0.707107 +6869,0.707107,0.000000,0.000000,0.707107 +6870,0.707107,0.000000,0.000000,0.707107 +6871,0.707107,0.000000,0.000000,0.707107 +6872,0.707107,0.000000,0.000000,0.707107 +6873,0.707107,0.000000,0.000000,0.707107 +6874,0.707107,0.000000,0.000000,0.707107 +6875,0.707107,0.000000,0.000000,0.707107 +6876,0.707107,0.000000,0.000000,0.707107 +6877,0.707107,0.000000,0.000000,0.707107 +6878,0.707107,0.000000,0.000000,0.707107 +6879,0.707107,0.000000,0.000000,0.707107 +6880,0.707107,0.000000,0.000000,0.707107 +6881,0.707107,0.000000,0.000000,0.707107 +6882,0.707107,0.000000,0.000000,0.707107 +6883,0.707107,0.000000,0.000000,0.707107 +6884,0.707107,0.000000,0.000000,0.707107 +6885,0.707107,0.000000,0.000000,0.707107 +6886,0.707107,0.000000,0.000000,0.707107 +6887,0.707107,0.000000,0.000000,0.707107 +6888,0.707107,0.000000,0.000000,0.707107 +6889,0.707107,0.000000,0.000000,0.707107 +6890,0.707107,0.000000,0.000000,0.707107 +6891,0.707107,0.000000,0.000000,0.707107 +6892,0.707107,0.000000,0.000000,0.707107 +6893,0.707107,0.000000,0.000000,0.707107 +6894,0.707107,0.000000,0.000000,0.707107 +6895,0.707107,0.000000,0.000000,0.707107 +6896,0.707107,0.000000,0.000000,0.707107 +6897,0.707107,0.000000,0.000000,0.707107 +6898,0.707107,0.000000,0.000000,0.707107 +6899,0.707107,0.000000,0.000000,0.707107 +6900,0.707107,0.000000,0.000000,0.707107 +6901,0.707107,0.000000,0.000000,0.707107 +6902,0.707107,0.000000,0.000000,0.707107 +6903,0.707107,0.000000,0.000000,0.707107 +6904,0.707107,0.000000,0.000000,0.707107 +6905,0.707107,0.000000,0.000000,0.707107 +6906,0.707107,0.000000,0.000000,0.707107 +6907,0.707107,0.000000,0.000000,0.707107 +6908,0.707107,0.000000,0.000000,0.707107 +6909,0.707107,0.000000,0.000000,0.707107 +6910,0.707107,0.000000,0.000000,0.707107 +6911,0.707107,0.000000,0.000000,0.707107 +6912,0.707107,0.000000,0.000000,0.707107 +6913,0.707107,0.000000,0.000000,0.707107 +6914,0.707107,0.000000,0.000000,0.707107 +6915,0.707107,0.000000,0.000000,0.707107 +6916,0.707107,0.000000,0.000000,0.707107 +6917,0.707107,0.000000,0.000000,0.707107 +6918,0.707107,0.000000,0.000000,0.707107 +6919,0.707107,0.000000,0.000000,0.707107 +6920,0.707107,0.000000,0.000000,0.707107 +6921,0.707107,0.000000,0.000000,0.707107 +6922,0.707107,0.000000,0.000000,0.707107 +6923,0.707107,0.000000,0.000000,0.707107 +6924,0.707107,0.000000,0.000000,0.707107 +6925,0.707107,0.000000,0.000000,0.707107 +6926,0.707107,0.000000,0.000000,0.707107 +6927,0.707107,0.000000,0.000000,0.707107 +6928,0.707107,0.000000,0.000000,0.707107 +6929,0.707107,0.000000,0.000000,0.707107 +6930,0.707107,0.000000,0.000000,0.707107 +6931,0.707107,0.000000,0.000000,0.707107 +6932,0.707107,0.000000,0.000000,0.707107 +6933,0.707107,0.000000,0.000000,0.707107 +6934,0.707107,0.000000,0.000000,0.707107 +6935,0.707107,0.000000,0.000000,0.707107 +6936,0.707107,0.000000,0.000000,0.707107 +6937,0.707107,0.000000,0.000000,0.707107 +6938,0.707107,0.000000,0.000000,0.707107 +6939,0.707107,0.000000,0.000000,0.707107 +6940,0.707107,0.000000,0.000000,0.707107 +6941,0.707107,0.000000,0.000000,0.707107 +6942,0.707107,0.000000,0.000000,0.707107 +6943,0.707107,0.000000,0.000000,0.707107 +6944,0.707107,0.000000,0.000000,0.707107 +6945,0.707107,0.000000,0.000000,0.707107 +6946,0.707107,0.000000,0.000000,0.707107 +6947,0.707107,0.000000,0.000000,0.707107 +6948,0.707107,0.000000,0.000000,0.707107 +6949,0.707107,0.000000,0.000000,0.707107 +6950,0.707107,0.000000,0.000000,0.707107 +6951,0.707107,0.000000,0.000000,0.707107 +6952,0.707107,0.000000,0.000000,0.707107 +6953,0.707107,0.000000,0.000000,0.707107 +6954,0.707107,0.000000,0.000000,0.707107 +6955,0.707107,0.000000,0.000000,0.707107 +6956,0.707107,0.000000,0.000000,0.707107 +6957,0.707107,0.000000,0.000000,0.707107 +6958,0.707107,0.000000,0.000000,0.707107 +6959,0.707107,0.000000,0.000000,0.707107 +6960,0.707107,0.000000,0.000000,0.707107 +6961,0.707107,0.000000,0.000000,0.707107 +6962,0.707107,0.000000,0.000000,0.707107 +6963,0.707107,0.000000,0.000000,0.707107 +6964,0.707107,0.000000,0.000000,0.707107 +6965,0.707107,0.000000,0.000000,0.707107 +6966,0.707107,0.000000,0.000000,0.707107 +6967,0.707107,0.000000,0.000000,0.707107 +6968,0.707107,0.000000,0.000000,0.707107 +6969,0.707107,0.000000,0.000000,0.707107 +6970,0.707107,0.000000,0.000000,0.707107 +6971,0.707107,0.000000,0.000000,0.707107 +6972,0.707107,0.000000,0.000000,0.707107 +6973,0.707107,0.000000,0.000000,0.707107 +6974,0.707107,0.000000,0.000000,0.707107 +6975,0.707107,0.000000,0.000000,0.707107 +6976,0.707107,0.000000,0.000000,0.707107 +6977,0.707107,0.000000,0.000000,0.707107 +6978,0.707107,0.000000,0.000000,0.707107 +6979,0.707107,0.000000,0.000000,0.707107 +6980,0.707107,0.000000,0.000000,0.707107 +6981,0.707107,0.000000,0.000000,0.707107 +6982,0.707107,0.000000,0.000000,0.707107 +6983,0.707107,0.000000,0.000000,0.707107 +6984,0.707107,0.000000,0.000000,0.707107 +6985,0.707107,0.000000,0.000000,0.707107 +6986,0.707107,0.000000,0.000000,0.707107 +6987,0.707107,0.000000,0.000000,0.707107 +6988,0.707107,0.000000,0.000000,0.707107 +6989,0.707107,0.000000,0.000000,0.707107 +6990,0.707107,0.000000,0.000000,0.707107 +6991,0.707107,0.000000,0.000000,0.707107 +6992,0.707107,0.000000,0.000000,0.707107 +6993,0.707107,0.000000,0.000000,0.707107 +6994,0.707107,0.000000,0.000000,0.707107 +6995,0.707107,0.000000,0.000000,0.707107 +6996,0.707107,0.000000,0.000000,0.707107 +6997,0.707107,0.000000,0.000000,0.707107 +6998,0.707107,0.000000,0.000000,0.707107 +6999,0.707107,0.000000,0.000000,0.707107 +7000,0.707107,0.000000,0.000000,0.707107 +7001,0.707107,0.000000,0.000000,0.707107 +7002,0.707107,0.000000,0.000000,0.707107 +7003,0.707107,0.000000,0.000000,0.707107 +7004,0.707107,0.000000,0.000000,0.707107 +7005,0.707107,0.000000,0.000000,0.707107 +7006,0.707107,0.000000,0.000000,0.707107 +7007,0.707107,0.000000,0.000000,0.707107 +7008,0.707107,0.000000,0.000000,0.707107 +7009,0.707107,0.000000,0.000000,0.707107 +7010,0.707107,0.000000,0.000000,0.707107 +7011,0.707107,0.000000,0.000000,0.707107 +7012,0.707107,0.000000,0.000000,0.707107 +7013,0.707107,0.000000,0.000000,0.707107 +7014,0.707107,0.000000,0.000000,0.707107 +7015,0.707107,0.000000,0.000000,0.707107 +7016,0.707107,0.000000,0.000000,0.707107 +7017,0.707107,0.000000,0.000000,0.707107 +7018,0.707107,0.000000,0.000000,0.707107 +7019,0.707107,0.000000,0.000000,0.707107 +7020,0.707107,0.000000,0.000000,0.707107 +7021,0.707107,0.000000,0.000000,0.707107 +7022,0.707107,0.000000,0.000000,0.707107 +7023,0.707107,0.000000,0.000000,0.707107 +7024,0.707107,0.000000,0.000000,0.707107 +7025,0.707107,0.000000,0.000000,0.707107 +7026,0.707107,0.000000,0.000000,0.707107 +7027,0.707107,0.000000,0.000000,0.707107 +7028,0.707107,0.000000,0.000000,0.707107 +7029,0.707107,0.000000,0.000000,0.707107 +7030,0.707107,0.000000,0.000000,0.707107 +7031,0.707107,0.000000,0.000000,0.707107 +7032,0.707107,0.000000,0.000000,0.707107 +7033,0.707107,0.000000,0.000000,0.707107 +7034,0.707107,0.000000,0.000000,0.707107 +7035,0.707107,0.000000,0.000000,0.707107 +7036,0.707107,0.000000,0.000000,0.707107 +7037,0.707107,0.000000,0.000000,0.707107 +7038,0.707107,0.000000,0.000000,0.707107 +7039,0.707107,0.000000,0.000000,0.707107 +7040,0.707107,0.000000,0.000000,0.707107 +7041,0.707107,0.000000,0.000000,0.707107 +7042,0.707107,0.000000,0.000000,0.707107 +7043,0.707107,0.000000,0.000000,0.707107 +7044,0.707107,0.000000,0.000000,0.707107 +7045,0.707107,0.000000,0.000000,0.707107 +7046,0.707107,0.000000,0.000000,0.707107 +7047,0.707107,0.000000,0.000000,0.707107 +7048,0.707107,0.000000,0.000000,0.707107 +7049,0.707107,0.000000,0.000000,0.707107 +7050,0.707107,0.000000,0.000000,0.707107 +7051,0.707107,0.000000,0.000000,0.707107 +7052,0.707107,0.000000,0.000000,0.707107 +7053,0.707107,0.000000,0.000000,0.707107 +7054,0.707107,0.000000,0.000000,0.707107 +7055,0.707107,0.000000,0.000000,0.707107 +7056,0.707107,0.000000,0.000000,0.707107 +7057,0.707107,0.000000,0.000000,0.707107 +7058,0.707107,0.000000,0.000000,0.707107 +7059,0.707107,0.000000,0.000000,0.707107 +7060,0.707107,0.000000,0.000000,0.707107 +7061,0.707107,0.000000,0.000000,0.707107 +7062,0.707107,0.000000,0.000000,0.707107 +7063,0.707107,0.000000,0.000000,0.707107 +7064,0.707107,0.000000,0.000000,0.707107 +7065,0.707107,0.000000,0.000000,0.707107 +7066,0.707107,0.000000,0.000000,0.707107 +7067,0.707107,0.000000,0.000000,0.707107 +7068,0.707107,0.000000,0.000000,0.707107 +7069,0.707107,0.000000,0.000000,0.707107 +7070,0.707107,0.000000,0.000000,0.707107 +7071,0.707107,0.000000,0.000000,0.707107 +7072,0.707107,0.000000,0.000000,0.707107 +7073,0.707107,0.000000,0.000000,0.707107 +7074,0.707107,0.000000,0.000000,0.707107 +7075,0.707107,0.000000,0.000000,0.707107 +7076,0.707107,0.000000,0.000000,0.707107 +7077,0.707107,0.000000,0.000000,0.707107 +7078,0.707107,0.000000,0.000000,0.707107 +7079,0.707107,0.000000,0.000000,0.707107 +7080,0.707107,0.000000,0.000000,0.707107 +7081,0.707107,0.000000,0.000000,0.707107 +7082,0.707107,0.000000,0.000000,0.707107 +7083,0.707107,0.000000,0.000000,0.707107 +7084,0.707107,0.000000,0.000000,0.707107 +7085,0.707107,0.000000,0.000000,0.707107 +7086,0.707107,0.000000,0.000000,0.707107 +7087,0.707107,0.000000,0.000000,0.707107 +7088,0.707107,0.000000,0.000000,0.707107 +7089,0.707107,0.000000,0.000000,0.707107 +7090,0.707107,0.000000,0.000000,0.707107 +7091,0.707107,0.000000,0.000000,0.707107 +7092,0.707107,0.000000,0.000000,0.707107 +7093,0.707107,0.000000,0.000000,0.707107 +7094,0.707107,0.000000,0.000000,0.707107 +7095,0.707107,0.000000,0.000000,0.707107 +7096,0.707107,0.000000,0.000000,0.707107 +7097,0.707107,0.000000,0.000000,0.707107 +7098,0.707107,0.000000,0.000000,0.707107 +7099,0.707107,0.000000,0.000000,0.707107 +7100,0.707107,0.000000,0.000000,0.707107 +7101,0.707107,0.000000,0.000000,0.707107 +7102,0.707107,0.000000,0.000000,0.707107 +7103,0.707107,0.000000,0.000000,0.707107 +7104,0.707107,0.000000,0.000000,0.707107 +7105,0.707107,0.000000,0.000000,0.707107 +7106,0.707107,0.000000,0.000000,0.707107 +7107,0.707107,0.000000,0.000000,0.707107 +7108,0.707107,0.000000,0.000000,0.707107 +7109,0.707107,0.000000,0.000000,0.707107 +7110,0.707107,0.000000,0.000000,0.707107 +7111,0.707107,0.000000,0.000000,0.707107 +7112,0.707107,0.000000,0.000000,0.707107 +7113,0.707107,0.000000,0.000000,0.707107 +7114,0.707107,0.000000,0.000000,0.707107 +7115,0.707107,0.000000,0.000000,0.707107 +7116,0.707107,0.000000,0.000000,0.707107 +7117,0.707107,0.000000,0.000000,0.707107 +7118,0.707107,0.000000,0.000000,0.707107 +7119,0.707107,0.000000,0.000000,0.707107 +7120,0.707107,0.000000,0.000000,0.707107 +7121,0.707107,0.000000,0.000000,0.707107 +7122,0.707107,0.000000,0.000000,0.707107 +7123,0.707107,0.000000,0.000000,0.707107 +7124,0.707107,0.000000,0.000000,0.707107 +7125,0.707107,0.000000,0.000000,0.707107 +7126,0.707107,0.000000,0.000000,0.707107 +7127,0.707107,0.000000,0.000000,0.707107 +7128,0.707107,0.000000,0.000000,0.707107 +7129,0.707107,0.000000,0.000000,0.707107 +7130,0.707107,0.000000,0.000000,0.707107 +7131,0.707107,0.000000,0.000000,0.707107 +7132,0.707107,0.000000,0.000000,0.707107 +7133,0.707107,0.000000,0.000000,0.707107 +7134,0.707107,0.000000,0.000000,0.707107 +7135,0.707107,0.000000,0.000000,0.707107 +7136,0.707107,0.000000,0.000000,0.707107 +7137,0.707107,0.000000,0.000000,0.707107 +7138,0.707107,0.000000,0.000000,0.707107 +7139,0.707107,0.000000,0.000000,0.707107 +7140,0.707107,0.000000,0.000000,0.707107 +7141,0.707107,0.000000,0.000000,0.707107 +7142,0.707107,0.000000,0.000000,0.707107 +7143,0.707107,0.000000,0.000000,0.707107 +7144,0.707107,0.000000,0.000000,0.707107 +7145,0.707107,0.000000,0.000000,0.707107 +7146,0.707107,0.000000,0.000000,0.707107 +7147,0.707107,0.000000,0.000000,0.707107 +7148,0.707107,0.000000,0.000000,0.707107 +7149,0.707107,0.000000,0.000000,0.707107 +7150,0.707107,0.000000,0.000000,0.707107 +7151,0.707107,0.000000,0.000000,0.707107 +7152,0.707107,0.000000,0.000000,0.707107 +7153,0.707107,0.000000,0.000000,0.707107 +7154,0.707107,0.000000,0.000000,0.707107 +7155,0.707107,0.000000,0.000000,0.707107 +7156,0.707107,0.000000,0.000000,0.707107 +7157,0.707107,0.000000,0.000000,0.707107 +7158,0.707107,0.000000,0.000000,0.707107 +7159,0.707107,0.000000,0.000000,0.707107 +7160,0.707107,0.000000,0.000000,0.707107 +7161,0.707107,0.000000,0.000000,0.707107 +7162,0.707107,0.000000,0.000000,0.707107 +7163,0.707107,0.000000,0.000000,0.707107 +7164,0.707107,0.000000,0.000000,0.707107 +7165,0.707107,0.000000,0.000000,0.707107 +7166,0.707107,0.000000,0.000000,0.707107 +7167,0.707107,0.000000,0.000000,0.707107 +7168,0.707107,0.000000,0.000000,0.707107 +7169,0.707107,0.000000,0.000000,0.707107 +7170,0.707107,0.000000,0.000000,0.707107 +7171,0.707107,0.000000,0.000000,0.707107 +7172,0.707107,0.000000,0.000000,0.707107 +7173,0.707107,0.000000,0.000000,0.707107 +7174,0.707107,0.000000,0.000000,0.707107 +7175,0.707107,0.000000,0.000000,0.707107 +7176,0.707107,0.000000,0.000000,0.707107 +7177,0.707107,0.000000,0.000000,0.707107 +7178,0.707107,0.000000,0.000000,0.707107 +7179,0.707107,0.000000,0.000000,0.707107 +7180,0.707107,0.000000,0.000000,0.707107 +7181,0.707107,0.000000,0.000000,0.707107 +7182,0.707107,0.000000,0.000000,0.707107 +7183,0.707107,0.000000,0.000000,0.707107 +7184,0.707107,0.000000,0.000000,0.707107 +7185,0.707107,0.000000,0.000000,0.707107 +7186,0.707107,0.000000,0.000000,0.707107 +7187,0.707107,0.000000,0.000000,0.707107 +7188,0.707107,0.000000,0.000000,0.707107 +7189,0.707107,0.000000,0.000000,0.707107 +7190,0.707107,0.000000,0.000000,0.707107 +7191,0.707107,0.000000,0.000000,0.707107 +7192,0.707107,0.000000,0.000000,0.707107 +7193,0.707107,0.000000,0.000000,0.707107 +7194,0.707107,0.000000,0.000000,0.707107 +7195,0.707107,0.000000,0.000000,0.707107 +7196,0.707107,0.000000,0.000000,0.707107 +7197,0.707107,0.000000,0.000000,0.707107 +7198,0.707107,0.000000,0.000000,0.707107 +7199,0.707107,0.000000,0.000000,0.707107 +7200,0.707107,0.000000,0.000000,0.707107 +7201,0.707107,0.000000,0.000000,0.707107 +7202,0.707107,0.000000,0.000000,0.707107 +7203,0.707107,0.000000,0.000000,0.707107 +7204,0.707107,0.000000,0.000000,0.707107 +7205,0.707107,0.000000,0.000000,0.707107 +7206,0.707107,0.000000,0.000000,0.707107 +7207,0.707107,0.000000,0.000000,0.707107 +7208,0.707107,0.000000,0.000000,0.707107 +7209,0.707107,0.000000,0.000000,0.707107 +7210,0.707107,0.000000,0.000000,0.707107 +7211,0.707107,0.000000,0.000000,0.707107 +7212,0.707107,0.000000,0.000000,0.707107 +7213,0.707107,0.000000,0.000000,0.707107 +7214,0.707107,0.000000,0.000000,0.707107 +7215,0.707107,0.000000,0.000000,0.707107 +7216,0.707107,0.000000,0.000000,0.707107 +7217,0.707107,0.000000,0.000000,0.707107 +7218,0.707107,0.000000,0.000000,0.707107 +7219,0.707107,0.000000,0.000000,0.707107 +7220,0.707107,0.000000,0.000000,0.707107 +7221,0.707107,0.000000,0.000000,0.707107 +7222,0.707107,0.000000,0.000000,0.707107 +7223,0.707107,0.000000,0.000000,0.707107 +7224,0.707107,0.000000,0.000000,0.707107 +7225,0.707107,0.000000,0.000000,0.707107 +7226,0.707107,0.000000,0.000000,0.707107 +7227,0.707107,0.000000,0.000000,0.707107 +7228,0.707107,0.000000,0.000000,0.707107 +7229,0.707107,0.000000,0.000000,0.707107 +7230,0.707107,0.000000,0.000000,0.707107 +7231,0.707107,0.000000,0.000000,0.707107 +7232,0.707107,0.000000,0.000000,0.707107 +7233,0.707107,0.000000,0.000000,0.707107 +7234,0.707107,0.000000,0.000000,0.707107 +7235,0.707107,0.000000,0.000000,0.707107 +7236,0.707107,0.000000,0.000000,0.707107 +7237,0.707107,0.000000,0.000000,0.707107 +7238,0.707107,0.000000,0.000000,0.707107 +7239,0.707107,0.000000,0.000000,0.707107 +7240,0.707107,0.000000,0.000000,0.707107 +7241,0.707107,0.000000,0.000000,0.707107 +7242,0.707107,0.000000,0.000000,0.707107 +7243,0.707107,0.000000,0.000000,0.707107 +7244,0.707107,0.000000,0.000000,0.707107 +7245,0.707107,0.000000,0.000000,0.707107 +7246,0.707107,0.000000,0.000000,0.707107 +7247,0.707107,0.000000,0.000000,0.707107 +7248,0.707107,0.000000,0.000000,0.707107 +7249,0.707107,0.000000,0.000000,0.707107 +7250,0.707107,0.000000,0.000000,0.707107 +7251,0.707107,0.000000,0.000000,0.707107 +7252,0.707107,0.000000,0.000000,0.707107 +7253,0.707107,0.000000,0.000000,0.707107 +7254,0.707107,0.000000,0.000000,0.707107 +7255,0.707107,0.000000,0.000000,0.707107 +7256,0.707107,0.000000,0.000000,0.707107 +7257,0.707107,0.000000,0.000000,0.707107 +7258,0.707107,0.000000,0.000000,0.707107 +7259,0.707107,0.000000,0.000000,0.707107 +7260,0.707107,0.000000,0.000000,0.707107 +7261,0.707107,0.000000,0.000000,0.707107 +7262,0.707107,0.000000,0.000000,0.707107 +7263,0.707107,0.000000,0.000000,0.707107 +7264,0.707107,0.000000,0.000000,0.707107 +7265,0.707107,0.000000,0.000000,0.707107 +7266,0.707107,0.000000,0.000000,0.707107 +7267,0.707107,0.000000,0.000000,0.707107 +7268,0.707107,0.000000,0.000000,0.707107 +7269,0.707107,0.000000,0.000000,0.707107 +7270,0.707107,0.000000,0.000000,0.707107 +7271,0.707107,0.000000,0.000000,0.707107 +7272,0.707107,0.000000,0.000000,0.707107 +7273,0.707107,0.000000,0.000000,0.707107 +7274,0.707107,0.000000,0.000000,0.707107 +7275,0.707107,0.000000,0.000000,0.707107 +7276,0.707107,0.000000,0.000000,0.707107 +7277,0.707107,0.000000,0.000000,0.707107 +7278,0.707107,0.000000,0.000000,0.707107 +7279,0.707107,0.000000,0.000000,0.707107 +7280,0.707107,0.000000,0.000000,0.707107 +7281,0.707107,0.000000,0.000000,0.707107 +7282,0.707107,0.000000,0.000000,0.707107 +7283,0.707107,0.000000,0.000000,0.707107 +7284,0.707107,0.000000,0.000000,0.707107 +7285,0.707107,0.000000,0.000000,0.707107 +7286,0.707107,0.000000,0.000000,0.707107 +7287,0.707107,0.000000,0.000000,0.707107 +7288,0.707107,0.000000,0.000000,0.707107 +7289,0.707107,0.000000,0.000000,0.707107 +7290,0.707107,0.000000,0.000000,0.707107 +7291,0.707107,0.000000,0.000000,0.707107 +7292,0.707107,0.000000,0.000000,0.707107 +7293,0.707107,0.000000,0.000000,0.707107 +7294,0.707107,0.000000,0.000000,0.707107 +7295,0.707107,0.000000,0.000000,0.707107 +7296,0.707107,0.000000,0.000000,0.707107 +7297,0.707107,0.000000,0.000000,0.707107 +7298,0.707107,0.000000,0.000000,0.707107 +7299,0.707107,0.000000,0.000000,0.707107 +7300,0.707107,0.000000,0.000000,0.707107 +7301,0.707107,0.000000,0.000000,0.707107 +7302,0.707107,0.000000,0.000000,0.707107 +7303,0.707107,0.000000,0.000000,0.707107 +7304,0.707107,0.000000,0.000000,0.707107 +7305,0.707107,0.000000,0.000000,0.707107 +7306,0.707107,0.000000,0.000000,0.707107 +7307,0.707107,0.000000,0.000000,0.707107 +7308,0.707107,0.000000,0.000000,0.707107 +7309,0.707107,0.000000,0.000000,0.707107 +7310,0.707107,0.000000,0.000000,0.707107 +7311,0.707107,0.000000,0.000000,0.707107 +7312,0.707107,0.000000,0.000000,0.707107 +7313,0.707107,0.000000,0.000000,0.707107 +7314,0.707107,0.000000,0.000000,0.707107 +7315,0.707107,0.000000,0.000000,0.707107 +7316,0.707107,0.000000,0.000000,0.707107 +7317,0.707107,0.000000,0.000000,0.707107 +7318,0.707107,0.000000,0.000000,0.707107 +7319,0.707107,0.000000,0.000000,0.707107 +7320,0.707107,0.000000,0.000000,0.707107 +7321,0.707107,0.000000,0.000000,0.707107 +7322,0.707107,0.000000,0.000000,0.707107 +7323,0.707107,0.000000,0.000000,0.707107 +7324,0.707107,0.000000,0.000000,0.707107 +7325,0.707107,0.000000,0.000000,0.707107 +7326,0.707107,0.000000,0.000000,0.707107 +7327,0.707107,0.000000,0.000000,0.707107 +7328,0.707107,0.000000,0.000000,0.707107 +7329,0.707107,0.000000,0.000000,0.707107 +7330,0.707107,0.000000,0.000000,0.707107 +7331,0.707107,0.000000,0.000000,0.707107 +7332,0.707107,0.000000,0.000000,0.707107 +7333,0.707107,0.000000,0.000000,0.707107 +7334,0.707107,0.000000,0.000000,0.707107 +7335,0.707107,0.000000,0.000000,0.707107 +7336,0.707107,0.000000,0.000000,0.707107 +7337,0.707107,0.000000,0.000000,0.707107 +7338,0.707107,0.000000,0.000000,0.707107 +7339,0.707107,0.000000,0.000000,0.707107 +7340,0.707107,0.000000,0.000000,0.707107 +7341,0.707107,0.000000,0.000000,0.707107 +7342,0.707107,0.000000,0.000000,0.707107 +7343,0.707107,0.000000,0.000000,0.707107 +7344,0.707107,0.000000,0.000000,0.707107 +7345,0.707107,0.000000,0.000000,0.707107 +7346,0.707107,0.000000,0.000000,0.707107 +7347,0.707107,0.000000,0.000000,0.707107 +7348,0.707107,0.000000,0.000000,0.707107 +7349,0.707107,0.000000,0.000000,0.707107 +7350,0.707107,0.000000,0.000000,0.707107 +7351,0.707107,0.000000,0.000000,0.707107 +7352,0.707107,0.000000,0.000000,0.707107 +7353,0.707107,0.000000,0.000000,0.707107 +7354,0.707107,0.000000,0.000000,0.707107 +7355,0.707107,0.000000,0.000000,0.707107 +7356,0.707107,0.000000,0.000000,0.707107 +7357,0.707107,0.000000,0.000000,0.707107 +7358,0.707107,0.000000,0.000000,0.707107 +7359,0.707107,0.000000,0.000000,0.707107 +7360,0.707107,0.000000,0.000000,0.707107 +7361,0.707107,0.000000,0.000000,0.707107 +7362,0.707107,0.000000,0.000000,0.707107 +7363,0.707107,0.000000,0.000000,0.707107 +7364,0.707107,0.000000,0.000000,0.707107 +7365,0.707107,0.000000,0.000000,0.707107 +7366,0.707107,0.000000,0.000000,0.707107 +7367,0.707107,0.000000,0.000000,0.707107 +7368,0.707107,0.000000,0.000000,0.707107 +7369,0.707107,0.000000,0.000000,0.707107 +7370,0.707107,0.000000,0.000000,0.707107 +7371,0.707107,0.000000,0.000000,0.707107 +7372,0.707107,0.000000,0.000000,0.707107 +7373,0.707107,0.000000,0.000000,0.707107 +7374,0.707107,0.000000,0.000000,0.707107 +7375,0.707107,0.000000,0.000000,0.707107 +7376,0.707107,0.000000,0.000000,0.707107 +7377,0.707107,0.000000,0.000000,0.707107 +7378,0.707107,0.000000,0.000000,0.707107 +7379,0.707107,0.000000,0.000000,0.707107 +7380,0.707107,0.000000,0.000000,0.707107 +7381,0.707107,0.000000,0.000000,0.707107 +7382,0.707107,0.000000,0.000000,0.707107 +7383,0.707107,0.000000,0.000000,0.707107 +7384,0.707107,0.000000,0.000000,0.707107 +7385,0.707107,0.000000,0.000000,0.707107 +7386,0.707107,0.000000,0.000000,0.707107 +7387,0.707107,0.000000,0.000000,0.707107 +7388,0.707107,0.000000,0.000000,0.707107 +7389,0.707107,0.000000,0.000000,0.707107 +7390,0.707107,0.000000,0.000000,0.707107 +7391,0.707107,0.000000,0.000000,0.707107 +7392,0.707107,0.000000,0.000000,0.707107 +7393,0.707107,0.000000,0.000000,0.707107 +7394,0.707107,0.000000,0.000000,0.707107 +7395,0.707107,0.000000,0.000000,0.707107 +7396,0.707107,0.000000,0.000000,0.707107 +7397,0.707107,0.000000,0.000000,0.707107 +7398,0.707107,0.000000,0.000000,0.707107 +7399,0.707107,0.000000,0.000000,0.707107 +7400,0.707107,0.000000,0.000000,0.707107 +7401,0.707107,0.000000,0.000000,0.707107 +7402,0.707107,0.000000,0.000000,0.707107 +7403,0.707107,0.000000,0.000000,0.707107 +7404,0.707107,0.000000,0.000000,0.707107 +7405,0.707107,0.000000,0.000000,0.707107 +7406,0.707107,0.000000,0.000000,0.707107 +7407,0.707107,0.000000,0.000000,0.707107 +7408,0.707107,0.000000,0.000000,0.707107 +7409,0.707107,0.000000,0.000000,0.707107 +7410,0.707107,0.000000,0.000000,0.707107 +7411,0.707107,0.000000,0.000000,0.707107 +7412,0.707107,0.000000,0.000000,0.707107 +7413,0.707107,0.000000,0.000000,0.707107 +7414,0.707107,0.000000,0.000000,0.707107 +7415,0.707107,0.000000,0.000000,0.707107 +7416,0.707107,0.000000,0.000000,0.707107 +7417,0.707107,0.000000,0.000000,0.707107 +7418,0.707107,0.000000,0.000000,0.707107 +7419,0.707107,0.000000,0.000000,0.707107 +7420,0.707107,0.000000,0.000000,0.707107 +7421,0.707107,0.000000,0.000000,0.707107 +7422,0.707107,0.000000,0.000000,0.707107 +7423,0.707107,0.000000,0.000000,0.707107 +7424,0.707107,0.000000,0.000000,0.707107 +7425,0.707107,0.000000,0.000000,0.707107 +7426,0.707107,0.000000,0.000000,0.707107 +7427,0.707107,0.000000,0.000000,0.707107 +7428,0.707107,0.000000,0.000000,0.707107 +7429,0.707107,0.000000,0.000000,0.707107 +7430,0.707107,0.000000,0.000000,0.707107 +7431,0.707107,0.000000,0.000000,0.707107 +7432,0.707107,0.000000,0.000000,0.707107 +7433,0.707107,0.000000,0.000000,0.707107 +7434,0.707107,0.000000,0.000000,0.707107 +7435,0.707107,0.000000,0.000000,0.707107 +7436,0.707107,0.000000,0.000000,0.707107 +7437,0.707107,0.000000,0.000000,0.707107 +7438,0.707107,0.000000,0.000000,0.707107 +7439,0.707107,0.000000,0.000000,0.707107 +7440,0.707107,0.000000,0.000000,0.707107 +7441,0.707107,0.000000,0.000000,0.707107 +7442,0.707107,0.000000,0.000000,0.707107 +7443,0.707107,0.000000,0.000000,0.707107 +7444,0.707107,0.000000,0.000000,0.707107 +7445,0.707107,0.000000,0.000000,0.707107 +7446,0.707107,0.000000,0.000000,0.707107 +7447,0.707107,0.000000,0.000000,0.707107 +7448,0.707107,0.000000,0.000000,0.707107 +7449,0.707107,0.000000,0.000000,0.707107 +7450,0.707107,0.000000,0.000000,0.707107 +7451,0.707107,0.000000,0.000000,0.707107 +7452,0.707107,0.000000,0.000000,0.707107 +7453,0.707107,0.000000,0.000000,0.707107 +7454,0.707107,0.000000,0.000000,0.707107 +7455,0.707107,0.000000,0.000000,0.707107 +7456,0.707107,0.000000,0.000000,0.707107 +7457,0.707107,0.000000,0.000000,0.707107 +7458,0.707107,0.000000,0.000000,0.707107 +7459,0.707107,0.000000,0.000000,0.707107 +7460,0.707107,0.000000,0.000000,0.707107 +7461,0.707107,0.000000,0.000000,0.707107 +7462,0.707107,0.000000,0.000000,0.707107 +7463,0.707107,0.000000,0.000000,0.707107 +7464,0.707107,0.000000,0.000000,0.707107 +7465,0.707107,0.000000,0.000000,0.707107 +7466,0.707107,0.000000,0.000000,0.707107 +7467,0.707107,0.000000,0.000000,0.707107 +7468,0.707107,0.000000,0.000000,0.707107 +7469,0.707107,0.000000,0.000000,0.707107 +7470,0.707107,0.000000,0.000000,0.707107 +7471,0.707107,0.000000,0.000000,0.707107 +7472,0.707107,0.000000,0.000000,0.707107 +7473,0.707107,0.000000,0.000000,0.707107 +7474,0.707107,0.000000,0.000000,0.707107 +7475,0.707107,0.000000,0.000000,0.707107 +7476,0.707107,0.000000,0.000000,0.707107 +7477,0.707107,0.000000,0.000000,0.707107 +7478,0.707107,0.000000,0.000000,0.707107 +7479,0.707107,0.000000,0.000000,0.707107 +7480,0.707107,0.000000,0.000000,0.707107 +7481,0.707107,0.000000,0.000000,0.707107 +7482,0.707107,0.000000,0.000000,0.707107 +7483,0.707107,0.000000,0.000000,0.707107 +7484,0.707107,0.000000,0.000000,0.707107 +7485,0.707107,0.000000,0.000000,0.707107 +7486,0.707107,0.000000,0.000000,0.707107 +7487,0.707107,0.000000,0.000000,0.707107 +7488,0.707107,0.000000,0.000000,0.707107 +7489,0.707107,0.000000,0.000000,0.707107 +7490,0.707107,0.000000,0.000000,0.707107 +7491,0.707107,0.000000,0.000000,0.707107 +7492,0.707107,0.000000,0.000000,0.707107 +7493,0.707107,0.000000,0.000000,0.707107 +7494,0.707107,0.000000,0.000000,0.707107 +7495,0.707107,0.000000,0.000000,0.707107 +7496,0.707107,0.000000,0.000000,0.707107 +7497,0.707107,0.000000,0.000000,0.707107 +7498,0.707107,0.000000,0.000000,0.707107 +7499,0.707107,0.000000,0.000000,0.707107 +7500,0.707107,0.000000,0.000000,0.707107 +7501,0.707107,0.000000,0.000000,0.707107 +7502,0.707107,0.000000,0.000000,0.707107 +7503,0.707107,0.000000,0.000000,0.707107 +7504,0.707107,0.000000,0.000000,0.707107 +7505,0.707107,0.000000,0.000000,0.707107 +7506,0.707107,0.000000,0.000000,0.707107 +7507,0.707107,0.000000,0.000000,0.707107 +7508,0.707107,0.000000,0.000000,0.707107 +7509,0.707107,0.000000,0.000000,0.707107 +7510,0.707107,0.000000,0.000000,0.707107 +7511,0.707107,0.000000,0.000000,0.707107 +7512,0.707107,0.000000,0.000000,0.707107 +7513,0.707107,0.000000,0.000000,0.707107 +7514,0.707107,0.000000,0.000000,0.707107 +7515,0.707107,0.000000,0.000000,0.707107 +7516,0.707107,0.000000,0.000000,0.707107 +7517,0.707107,0.000000,0.000000,0.707107 +7518,0.707107,0.000000,0.000000,0.707107 +7519,0.707107,0.000000,0.000000,0.707107 +7520,0.707107,0.000000,0.000000,0.707107 +7521,0.707107,0.000000,0.000000,0.707107 +7522,0.707107,0.000000,0.000000,0.707107 +7523,0.707107,0.000000,0.000000,0.707107 +7524,0.707107,0.000000,0.000000,0.707107 +7525,0.707107,0.000000,0.000000,0.707107 +7526,0.707107,0.000000,0.000000,0.707107 +7527,0.707107,0.000000,0.000000,0.707107 +7528,0.707107,0.000000,0.000000,0.707107 +7529,0.707107,0.000000,0.000000,0.707107 +7530,0.707107,0.000000,0.000000,0.707107 +7531,0.707107,0.000000,0.000000,0.707107 +7532,0.707107,0.000000,0.000000,0.707107 +7533,0.707107,0.000000,0.000000,0.707107 +7534,0.707107,0.000000,0.000000,0.707107 +7535,0.707107,0.000000,0.000000,0.707107 +7536,0.707107,0.000000,0.000000,0.707107 +7537,0.707107,0.000000,0.000000,0.707107 +7538,0.707107,0.000000,0.000000,0.707107 +7539,0.707107,0.000000,0.000000,0.707107 +7540,0.707107,0.000000,0.000000,0.707107 +7541,0.707107,0.000000,0.000000,0.707107 +7542,0.707107,0.000000,0.000000,0.707107 +7543,0.707107,0.000000,0.000000,0.707107 +7544,0.707107,0.000000,0.000000,0.707107 +7545,0.707107,0.000000,0.000000,0.707107 +7546,0.707107,0.000000,0.000000,0.707107 +7547,0.707107,0.000000,0.000000,0.707107 +7548,0.707107,0.000000,0.000000,0.707107 +7549,0.707107,0.000000,0.000000,0.707107 +7550,0.707107,0.000000,0.000000,0.707107 +7551,0.707107,0.000000,0.000000,0.707107 +7552,0.707107,0.000000,0.000000,0.707107 +7553,0.707107,0.000000,0.000000,0.707107 +7554,0.707107,0.000000,0.000000,0.707107 +7555,0.707107,0.000000,0.000000,0.707107 +7556,0.707107,0.000000,0.000000,0.707107 +7557,0.707107,0.000000,0.000000,0.707107 +7558,0.707107,0.000000,0.000000,0.707107 +7559,0.707107,0.000000,0.000000,0.707107 +7560,0.707107,0.000000,0.000000,0.707107 +7561,0.707107,0.000000,0.000000,0.707107 +7562,0.707107,0.000000,0.000000,0.707107 +7563,0.707107,0.000000,0.000000,0.707107 +7564,0.707107,0.000000,0.000000,0.707107 +7565,0.707107,0.000000,0.000000,0.707107 +7566,0.707107,0.000000,0.000000,0.707107 +7567,0.707107,0.000000,0.000000,0.707107 +7568,0.707107,0.000000,0.000000,0.707107 +7569,0.707107,0.000000,0.000000,0.707107 +7570,0.707107,0.000000,0.000000,0.707107 +7571,0.707107,0.000000,0.000000,0.707107 +7572,0.707107,0.000000,0.000000,0.707107 +7573,0.707107,0.000000,0.000000,0.707107 +7574,0.707107,0.000000,0.000000,0.707107 +7575,0.707107,0.000000,0.000000,0.707107 +7576,0.707107,0.000000,0.000000,0.707107 +7577,0.707107,0.000000,0.000000,0.707107 +7578,0.707107,0.000000,0.000000,0.707107 +7579,0.707107,0.000000,0.000000,0.707107 +7580,0.707107,0.000000,0.000000,0.707107 +7581,0.707107,0.000000,0.000000,0.707107 +7582,0.707107,0.000000,0.000000,0.707107 +7583,0.707107,0.000000,0.000000,0.707107 +7584,0.707107,0.000000,0.000000,0.707107 +7585,0.707107,0.000000,0.000000,0.707107 +7586,0.707107,0.000000,0.000000,0.707107 +7587,0.707107,0.000000,0.000000,0.707107 +7588,0.707107,0.000000,0.000000,0.707107 +7589,0.707107,0.000000,0.000000,0.707107 +7590,0.707107,0.000000,0.000000,0.707107 +7591,0.707107,0.000000,0.000000,0.707107 +7592,0.707107,0.000000,0.000000,0.707107 +7593,0.707107,0.000000,0.000000,0.707107 +7594,0.707107,0.000000,0.000000,0.707107 +7595,0.707107,0.000000,0.000000,0.707107 +7596,0.707107,0.000000,0.000000,0.707107 +7597,0.707107,0.000000,0.000000,0.707107 +7598,0.707107,0.000000,0.000000,0.707107 +7599,0.707107,0.000000,0.000000,0.707107 +7600,0.707107,0.000000,0.000000,0.707107 +7601,0.707107,0.000000,0.000000,0.707107 +7602,0.707107,0.000000,0.000000,0.707107 +7603,0.707107,0.000000,0.000000,0.707107 +7604,0.707107,0.000000,0.000000,0.707107 +7605,0.707107,0.000000,0.000000,0.707107 +7606,0.707107,0.000000,0.000000,0.707107 +7607,0.707107,0.000000,0.000000,0.707107 +7608,0.707107,0.000000,0.000000,0.707107 +7609,0.707107,0.000000,0.000000,0.707107 +7610,0.707107,0.000000,0.000000,0.707107 +7611,0.707107,0.000000,0.000000,0.707107 +7612,0.707107,0.000000,0.000000,0.707107 +7613,0.707107,0.000000,0.000000,0.707107 +7614,0.707107,0.000000,0.000000,0.707107 +7615,0.707107,0.000000,0.000000,0.707107 +7616,0.707107,0.000000,0.000000,0.707107 +7617,0.707107,0.000000,0.000000,0.707107 +7618,0.707107,0.000000,0.000000,0.707107 +7619,0.707107,0.000000,0.000000,0.707107 +7620,0.707107,0.000000,0.000000,0.707107 +7621,0.707107,0.000000,0.000000,0.707107 +7622,0.707107,0.000000,0.000000,0.707107 +7623,0.707107,0.000000,0.000000,0.707107 +7624,0.707107,0.000000,0.000000,0.707107 +7625,0.707107,0.000000,0.000000,0.707107 +7626,0.707107,0.000000,0.000000,0.707107 +7627,0.707107,0.000000,0.000000,0.707107 +7628,0.707107,0.000000,0.000000,0.707107 +7629,0.707107,0.000000,0.000000,0.707107 +7630,0.707107,0.000000,0.000000,0.707107 +7631,0.707107,0.000000,0.000000,0.707107 +7632,0.707107,0.000000,0.000000,0.707107 +7633,0.707107,0.000000,0.000000,0.707107 +7634,0.707107,0.000000,0.000000,0.707107 +7635,0.707107,0.000000,0.000000,0.707107 +7636,0.707107,0.000000,0.000000,0.707107 +7637,0.707107,0.000000,0.000000,0.707107 +7638,0.707107,0.000000,0.000000,0.707107 +7639,0.707107,0.000000,0.000000,0.707107 +7640,0.707107,0.000000,0.000000,0.707107 +7641,0.707107,0.000000,0.000000,0.707107 +7642,0.707107,0.000000,0.000000,0.707107 +7643,0.707107,0.000000,0.000000,0.707107 +7644,0.707107,0.000000,0.000000,0.707107 +7645,0.707107,0.000000,0.000000,0.707107 +7646,0.707107,0.000000,0.000000,0.707107 +7647,0.707107,0.000000,0.000000,0.707107 +7648,0.707107,0.000000,0.000000,0.707107 +7649,0.707107,0.000000,0.000000,0.707107 +7650,0.707107,0.000000,0.000000,0.707107 +7651,0.707107,0.000000,0.000000,0.707107 +7652,0.707107,0.000000,0.000000,0.707107 +7653,0.707107,0.000000,0.000000,0.707107 +7654,0.707107,0.000000,0.000000,0.707107 +7655,0.707107,0.000000,0.000000,0.707107 +7656,0.707107,0.000000,0.000000,0.707107 +7657,0.707107,0.000000,0.000000,0.707107 +7658,0.707107,0.000000,0.000000,0.707107 +7659,0.707107,0.000000,0.000000,0.707107 +7660,0.707107,0.000000,0.000000,0.707107 +7661,0.707107,0.000000,0.000000,0.707107 +7662,0.707107,0.000000,0.000000,0.707107 +7663,0.707107,0.000000,0.000000,0.707107 +7664,0.707107,0.000000,0.000000,0.707107 +7665,0.707107,0.000000,0.000000,0.707107 +7666,0.707107,0.000000,0.000000,0.707107 +7667,0.707107,0.000000,0.000000,0.707107 +7668,0.707107,0.000000,0.000000,0.707107 +7669,0.707107,0.000000,0.000000,0.707107 +7670,0.707107,0.000000,0.000000,0.707107 +7671,0.707107,0.000000,0.000000,0.707107 +7672,0.707107,0.000000,0.000000,0.707107 +7673,0.707107,0.000000,0.000000,0.707107 +7674,0.707107,0.000000,0.000000,0.707107 +7675,0.707107,0.000000,0.000000,0.707107 +7676,0.707107,0.000000,0.000000,0.707107 +7677,0.707107,0.000000,0.000000,0.707107 +7678,0.707107,0.000000,0.000000,0.707107 +7679,0.707107,0.000000,0.000000,0.707107 +7680,0.707107,0.000000,0.000000,0.707107 +7681,0.707107,0.000000,0.000000,0.707107 +7682,0.707107,0.000000,0.000000,0.707107 +7683,0.707107,0.000000,0.000000,0.707107 +7684,0.707107,0.000000,0.000000,0.707107 +7685,0.707107,0.000000,0.000000,0.707107 +7686,0.707107,0.000000,0.000000,0.707107 +7687,0.707107,0.000000,0.000000,0.707107 +7688,0.707107,0.000000,0.000000,0.707107 +7689,0.707107,0.000000,0.000000,0.707107 +7690,0.707107,0.000000,0.000000,0.707107 +7691,0.707107,0.000000,0.000000,0.707107 +7692,0.707107,0.000000,0.000000,0.707107 +7693,0.707107,0.000000,0.000000,0.707107 +7694,0.707107,0.000000,0.000000,0.707107 +7695,0.707107,0.000000,0.000000,0.707107 +7696,0.707107,0.000000,0.000000,0.707107 +7697,0.707107,0.000000,0.000000,0.707107 +7698,0.707107,0.000000,0.000000,0.707107 +7699,0.707107,0.000000,0.000000,0.707107 +7700,0.707107,0.000000,0.000000,0.707107 +7701,0.707107,0.000000,0.000000,0.707107 +7702,0.707107,0.000000,0.000000,0.707107 +7703,0.707107,0.000000,0.000000,0.707107 +7704,0.707107,0.000000,0.000000,0.707107 +7705,0.707107,0.000000,0.000000,0.707107 +7706,0.707107,0.000000,0.000000,0.707107 +7707,0.707107,0.000000,0.000000,0.707107 +7708,0.707107,0.000000,0.000000,0.707107 +7709,0.707107,0.000000,0.000000,0.707107 +7710,0.707107,0.000000,0.000000,0.707107 +7711,0.707107,0.000000,0.000000,0.707107 +7712,0.707107,0.000000,0.000000,0.707107 +7713,0.707107,0.000000,0.000000,0.707107 +7714,0.707107,0.000000,0.000000,0.707107 +7715,0.707107,0.000000,0.000000,0.707107 +7716,0.707107,0.000000,0.000000,0.707107 +7717,0.707107,0.000000,0.000000,0.707107 +7718,0.707107,0.000000,0.000000,0.707107 +7719,0.707107,0.000000,0.000000,0.707107 +7720,0.707107,0.000000,0.000000,0.707107 +7721,0.707107,0.000000,0.000000,0.707107 +7722,0.707107,0.000000,0.000000,0.707107 +7723,0.707107,0.000000,0.000000,0.707107 +7724,0.707107,0.000000,0.000000,0.707107 +7725,0.707107,0.000000,0.000000,0.707107 +7726,0.707107,0.000000,0.000000,0.707107 +7727,0.707107,0.000000,0.000000,0.707107 +7728,0.707107,0.000000,0.000000,0.707107 +7729,0.707107,0.000000,0.000000,0.707107 +7730,0.707107,0.000000,0.000000,0.707107 +7731,0.707107,0.000000,0.000000,0.707107 +7732,0.707107,0.000000,0.000000,0.707107 +7733,0.707107,0.000000,0.000000,0.707107 +7734,0.707107,0.000000,0.000000,0.707107 +7735,0.707107,0.000000,0.000000,0.707107 +7736,0.707107,0.000000,0.000000,0.707107 +7737,0.707107,0.000000,0.000000,0.707107 +7738,0.707107,0.000000,0.000000,0.707107 +7739,0.707107,0.000000,0.000000,0.707107 +7740,0.707107,0.000000,0.000000,0.707107 +7741,0.707107,0.000000,0.000000,0.707107 +7742,0.707107,0.000000,0.000000,0.707107 +7743,0.707107,0.000000,0.000000,0.707107 +7744,0.707107,0.000000,0.000000,0.707107 +7745,0.707107,0.000000,0.000000,0.707107 +7746,0.707107,0.000000,0.000000,0.707107 +7747,0.707107,0.000000,0.000000,0.707107 +7748,0.707107,0.000000,0.000000,0.707107 +7749,0.707107,0.000000,0.000000,0.707107 +7750,0.707107,0.000000,0.000000,0.707107 +7751,0.707107,0.000000,0.000000,0.707107 +7752,0.707107,0.000000,0.000000,0.707107 +7753,0.707107,0.000000,0.000000,0.707107 +7754,0.707107,0.000000,0.000000,0.707107 +7755,0.707107,0.000000,0.000000,0.707107 +7756,0.707107,0.000000,0.000000,0.707107 +7757,0.707107,0.000000,0.000000,0.707107 +7758,0.707107,0.000000,0.000000,0.707107 +7759,0.707107,0.000000,0.000000,0.707107 +7760,0.707107,0.000000,0.000000,0.707107 +7761,0.707107,0.000000,0.000000,0.707107 +7762,0.707107,0.000000,0.000000,0.707107 +7763,0.707107,0.000000,0.000000,0.707107 +7764,0.707107,0.000000,0.000000,0.707107 +7765,0.707107,0.000000,0.000000,0.707107 +7766,0.707107,0.000000,0.000000,0.707107 +7767,0.707107,0.000000,0.000000,0.707107 +7768,0.707107,0.000000,0.000000,0.707107 +7769,0.707107,0.000000,0.000000,0.707107 +7770,0.707107,0.000000,0.000000,0.707107 +7771,0.707107,0.000000,0.000000,0.707107 +7772,0.707107,0.000000,0.000000,0.707107 +7773,0.707107,0.000000,0.000000,0.707107 +7774,0.707107,0.000000,0.000000,0.707107 +7775,0.707107,0.000000,0.000000,0.707107 +7776,0.707107,0.000000,0.000000,0.707107 +7777,0.707107,0.000000,0.000000,0.707107 +7778,0.707107,0.000000,0.000000,0.707107 +7779,0.707107,0.000000,0.000000,0.707107 +7780,0.707107,0.000000,0.000000,0.707107 +7781,0.707107,0.000000,0.000000,0.707107 +7782,0.707107,0.000000,0.000000,0.707107 +7783,0.707107,0.000000,0.000000,0.707107 +7784,0.707107,0.000000,0.000000,0.707107 +7785,0.707107,0.000000,0.000000,0.707107 +7786,0.707107,0.000000,0.000000,0.707107 +7787,0.707107,0.000000,0.000000,0.707107 +7788,0.707107,0.000000,0.000000,0.707107 +7789,0.707107,0.000000,0.000000,0.707107 +7790,0.707107,0.000000,0.000000,0.707107 +7791,0.707107,0.000000,0.000000,0.707107 +7792,0.707107,0.000000,0.000000,0.707107 +7793,0.707107,0.000000,0.000000,0.707107 +7794,0.707107,0.000000,0.000000,0.707107 +7795,0.707107,0.000000,0.000000,0.707107 +7796,0.707107,0.000000,0.000000,0.707107 +7797,0.707107,0.000000,0.000000,0.707107 +7798,0.707107,0.000000,0.000000,0.707107 +7799,0.707107,0.000000,0.000000,0.707107 +7800,0.707107,0.000000,0.000000,0.707107 +7801,0.707107,0.000000,0.000000,0.707107 +7802,0.707107,0.000000,0.000000,0.707107 +7803,0.707107,0.000000,0.000000,0.707107 +7804,0.707107,0.000000,0.000000,0.707107 +7805,0.707107,0.000000,0.000000,0.707107 +7806,0.707107,0.000000,0.000000,0.707107 +7807,0.707107,0.000000,0.000000,0.707107 +7808,0.707107,0.000000,0.000000,0.707107 +7809,0.707107,0.000000,0.000000,0.707107 +7810,0.707107,0.000000,0.000000,0.707107 +7811,0.707107,0.000000,0.000000,0.707107 +7812,0.707107,0.000000,0.000000,0.707107 +7813,0.707107,0.000000,0.000000,0.707107 +7814,0.707107,0.000000,0.000000,0.707107 +7815,0.707107,0.000000,0.000000,0.707107 +7816,0.707107,0.000000,0.000000,0.707107 +7817,0.707107,0.000000,0.000000,0.707107 +7818,0.707107,0.000000,0.000000,0.707107 +7819,0.707107,0.000000,0.000000,0.707107 +7820,0.707107,0.000000,0.000000,0.707107 +7821,0.707107,0.000000,0.000000,0.707107 +7822,0.707107,0.000000,0.000000,0.707107 +7823,0.707107,0.000000,0.000000,0.707107 +7824,0.707107,0.000000,0.000000,0.707107 +7825,0.707107,0.000000,0.000000,0.707107 +7826,0.707107,0.000000,0.000000,0.707107 +7827,0.707107,0.000000,0.000000,0.707107 +7828,0.707107,0.000000,0.000000,0.707107 +7829,0.707107,0.000000,0.000000,0.707107 +7830,0.707107,0.000000,0.000000,0.707107 +7831,0.707107,0.000000,0.000000,0.707107 +7832,0.707107,0.000000,0.000000,0.707107 +7833,0.707107,0.000000,0.000000,0.707107 +7834,0.707107,0.000000,0.000000,0.707107 +7835,0.707107,0.000000,0.000000,0.707107 +7836,0.707107,0.000000,0.000000,0.707107 +7837,0.707107,0.000000,0.000000,0.707107 +7838,0.707107,0.000000,0.000000,0.707107 +7839,0.707107,0.000000,0.000000,0.707107 +7840,0.707107,0.000000,0.000000,0.707107 +7841,0.707107,0.000000,0.000000,0.707107 +7842,0.707107,0.000000,0.000000,0.707107 +7843,0.707107,0.000000,0.000000,0.707107 +7844,0.707107,0.000000,0.000000,0.707107 +7845,0.707107,0.000000,0.000000,0.707107 +7846,0.707107,0.000000,0.000000,0.707107 +7847,0.707107,0.000000,0.000000,0.707107 +7848,0.707107,0.000000,0.000000,0.707107 +7849,0.707107,0.000000,0.000000,0.707107 +7850,0.707107,0.000000,0.000000,0.707107 +7851,0.707107,0.000000,0.000000,0.707107 +7852,0.707107,0.000000,0.000000,0.707107 +7853,0.707107,0.000000,0.000000,0.707107 +7854,0.707107,0.000000,0.000000,0.707107 +7855,0.707107,0.000000,0.000000,0.707107 +7856,0.707107,0.000000,0.000000,0.707107 +7857,0.707107,0.000000,0.000000,0.707107 +7858,0.707107,0.000000,0.000000,0.707107 +7859,0.707107,0.000000,0.000000,0.707107 +7860,0.707107,0.000000,0.000000,0.707107 +7861,0.707107,0.000000,0.000000,0.707107 +7862,0.707107,0.000000,0.000000,0.707107 +7863,0.707107,0.000000,0.000000,0.707107 +7864,0.707107,0.000000,0.000000,0.707107 +7865,0.707107,0.000000,0.000000,0.707107 +7866,0.707107,0.000000,0.000000,0.707107 +7867,0.707107,0.000000,0.000000,0.707107 +7868,0.707107,0.000000,0.000000,0.707107 +7869,0.707107,0.000000,0.000000,0.707107 +7870,0.707107,0.000000,0.000000,0.707107 +7871,0.707107,0.000000,0.000000,0.707107 +7872,0.707107,0.000000,0.000000,0.707107 +7873,0.707107,0.000000,0.000000,0.707107 +7874,0.707107,0.000000,0.000000,0.707107 +7875,0.707107,0.000000,0.000000,0.707107 +7876,0.707107,0.000000,0.000000,0.707107 +7877,0.707107,0.000000,0.000000,0.707107 +7878,0.707107,0.000000,0.000000,0.707107 +7879,0.707107,0.000000,0.000000,0.707107 +7880,0.707107,0.000000,0.000000,0.707107 +7881,0.707107,0.000000,0.000000,0.707107 +7882,0.707107,0.000000,0.000000,0.707107 +7883,0.707107,0.000000,0.000000,0.707107 +7884,0.707107,0.000000,0.000000,0.707107 +7885,0.707107,0.000000,0.000000,0.707107 +7886,0.707107,0.000000,0.000000,0.707107 +7887,0.707107,0.000000,0.000000,0.707107 +7888,0.707107,0.000000,0.000000,0.707107 +7889,0.707107,0.000000,0.000000,0.707107 +7890,0.707107,0.000000,0.000000,0.707107 +7891,0.707107,0.000000,0.000000,0.707107 +7892,0.707107,0.000000,0.000000,0.707107 +7893,0.707107,0.000000,0.000000,0.707107 +7894,0.707107,0.000000,0.000000,0.707107 +7895,0.707107,0.000000,0.000000,0.707107 +7896,0.707107,0.000000,0.000000,0.707107 +7897,0.707107,0.000000,0.000000,0.707107 +7898,0.707107,0.000000,0.000000,0.707107 +7899,0.707107,0.000000,0.000000,0.707107 +7900,0.707107,0.000000,0.000000,0.707107 +7901,0.707107,0.000000,0.000000,0.707107 +7902,0.707107,0.000000,0.000000,0.707107 +7903,0.707107,0.000000,0.000000,0.707107 +7904,0.707107,0.000000,0.000000,0.707107 +7905,0.707107,0.000000,0.000000,0.707107 +7906,0.707107,0.000000,0.000000,0.707107 +7907,0.707107,0.000000,0.000000,0.707107 +7908,0.707107,0.000000,0.000000,0.707107 +7909,0.707107,0.000000,0.000000,0.707107 +7910,0.707107,0.000000,0.000000,0.707107 +7911,0.707107,0.000000,0.000000,0.707107 +7912,0.707107,0.000000,0.000000,0.707107 +7913,0.707107,0.000000,0.000000,0.707107 +7914,0.707107,0.000000,0.000000,0.707107 +7915,0.707107,0.000000,0.000000,0.707107 +7916,0.707107,0.000000,0.000000,0.707107 +7917,0.707107,0.000000,0.000000,0.707107 +7918,0.707107,0.000000,0.000000,0.707107 +7919,0.707107,0.000000,0.000000,0.707107 +7920,0.707107,0.000000,0.000000,0.707107 +7921,0.707107,0.000000,0.000000,0.707107 +7922,0.707107,0.000000,0.000000,0.707107 +7923,0.707107,0.000000,0.000000,0.707107 +7924,0.707107,0.000000,0.000000,0.707107 +7925,0.707107,0.000000,0.000000,0.707107 +7926,0.707107,0.000000,0.000000,0.707107 +7927,0.707107,0.000000,0.000000,0.707107 +7928,0.707107,0.000000,0.000000,0.707107 +7929,0.707107,0.000000,0.000000,0.707107 +7930,0.707107,0.000000,0.000000,0.707107 +7931,0.707107,0.000000,0.000000,0.707107 +7932,0.707107,0.000000,0.000000,0.707107 +7933,0.707107,0.000000,0.000000,0.707107 +7934,0.707107,0.000000,0.000000,0.707107 +7935,0.707107,0.000000,0.000000,0.707107 +7936,0.707107,0.000000,0.000000,0.707107 +7937,0.707107,0.000000,0.000000,0.707107 +7938,0.707107,0.000000,0.000000,0.707107 +7939,0.707107,0.000000,0.000000,0.707107 +7940,0.707107,0.000000,0.000000,0.707107 +7941,0.707107,0.000000,0.000000,0.707107 +7942,0.707107,0.000000,0.000000,0.707107 +7943,0.707107,0.000000,0.000000,0.707107 +7944,0.707107,0.000000,0.000000,0.707107 +7945,0.707107,0.000000,0.000000,0.707107 +7946,0.707107,0.000000,0.000000,0.707107 +7947,0.707107,0.000000,0.000000,0.707107 +7948,0.707107,0.000000,0.000000,0.707107 +7949,0.707107,0.000000,0.000000,0.707107 +7950,0.707107,0.000000,0.000000,0.707107 +7951,0.707107,0.000000,0.000000,0.707107 +7952,0.707107,0.000000,0.000000,0.707107 +7953,0.707107,0.000000,0.000000,0.707107 +7954,0.707107,0.000000,0.000000,0.707107 +7955,0.707107,0.000000,0.000000,0.707107 +7956,0.707107,0.000000,0.000000,0.707107 +7957,0.707107,0.000000,0.000000,0.707107 +7958,0.707107,0.000000,0.000000,0.707107 +7959,0.707107,0.000000,0.000000,0.707107 +7960,0.707107,0.000000,0.000000,0.707107 +7961,0.707107,0.000000,0.000000,0.707107 +7962,0.707107,0.000000,0.000000,0.707107 +7963,0.707107,0.000000,0.000000,0.707107 +7964,0.707107,0.000000,0.000000,0.707107 +7965,0.707107,0.000000,0.000000,0.707107 +7966,0.707107,0.000000,0.000000,0.707107 +7967,0.707107,0.000000,0.000000,0.707107 +7968,0.707107,0.000000,0.000000,0.707107 +7969,0.707107,0.000000,0.000000,0.707107 +7970,0.707107,0.000000,0.000000,0.707107 +7971,0.707107,0.000000,0.000000,0.707107 +7972,0.707107,0.000000,0.000000,0.707107 +7973,0.707107,0.000000,0.000000,0.707107 +7974,0.707107,0.000000,0.000000,0.707107 +7975,0.707107,0.000000,0.000000,0.707107 +7976,0.707107,0.000000,0.000000,0.707107 +7977,0.707107,0.000000,0.000000,0.707107 +7978,0.707107,0.000000,0.000000,0.707107 +7979,0.707107,0.000000,0.000000,0.707107 +7980,0.707107,0.000000,0.000000,0.707107 +7981,0.707107,0.000000,0.000000,0.707107 +7982,0.707107,0.000000,0.000000,0.707107 +7983,0.707107,0.000000,0.000000,0.707107 +7984,0.707107,0.000000,0.000000,0.707107 +7985,0.707107,0.000000,0.000000,0.707107 +7986,0.707107,0.000000,0.000000,0.707107 +7987,0.707107,0.000000,0.000000,0.707107 +7988,0.707107,0.000000,0.000000,0.707107 +7989,0.707107,0.000000,0.000000,0.707107 +7990,0.707107,0.000000,0.000000,0.707107 +7991,0.707107,0.000000,0.000000,0.707107 +7992,0.707107,0.000000,0.000000,0.707107 +7993,0.707107,0.000000,0.000000,0.707107 +7994,0.707107,0.000000,0.000000,0.707107 +7995,0.707107,0.000000,0.000000,0.707107 +7996,0.707107,0.000000,0.000000,0.707107 +7997,0.707107,0.000000,0.000000,0.707107 +7998,0.707107,0.000000,0.000000,0.707107 +7999,0.707107,0.000000,0.000000,0.707107 +8000,0.707107,0.000000,0.000000,0.707107 +8001,0.707107,0.000000,0.000000,0.707107 +8002,0.707107,0.000000,0.000000,0.707107 +8003,0.707107,0.000000,0.000000,0.707107 +8004,0.707107,0.000000,0.000000,0.707107 +8005,0.707107,0.000000,0.000000,0.707107 +8006,0.707107,0.000000,0.000000,0.707107 +8007,0.707107,0.000000,0.000000,0.707107 +8008,0.707107,0.000000,0.000000,0.707107 +8009,0.707107,0.000000,0.000000,0.707107 +8010,0.707107,0.000000,0.000000,0.707107 +8011,0.707107,0.000000,0.000000,0.707107 +8012,0.707107,0.000000,0.000000,0.707107 +8013,0.707107,0.000000,0.000000,0.707107 +8014,0.707107,0.000000,0.000000,0.707107 +8015,0.707107,0.000000,0.000000,0.707107 +8016,0.707107,0.000000,0.000000,0.707107 +8017,0.707107,0.000000,0.000000,0.707107 +8018,0.707107,0.000000,0.000000,0.707107 +8019,0.707107,0.000000,0.000000,0.707107 +8020,0.707107,0.000000,0.000000,0.707107 +8021,0.707107,0.000000,0.000000,0.707107 +8022,0.707107,0.000000,0.000000,0.707107 +8023,0.707107,0.000000,0.000000,0.707107 +8024,0.707107,0.000000,0.000000,0.707107 +8025,0.707107,0.000000,0.000000,0.707107 +8026,0.707107,0.000000,0.000000,0.707107 +8027,0.707107,0.000000,0.000000,0.707107 +8028,0.707107,0.000000,0.000000,0.707107 +8029,0.707107,0.000000,0.000000,0.707107 +8030,0.707107,0.000000,0.000000,0.707107 +8031,0.707107,0.000000,0.000000,0.707107 +8032,0.707107,0.000000,0.000000,0.707107 +8033,0.707107,0.000000,0.000000,0.707107 +8034,0.707107,0.000000,0.000000,0.707107 +8035,0.707107,0.000000,0.000000,0.707107 +8036,0.707107,0.000000,0.000000,0.707107 +8037,0.707107,0.000000,0.000000,0.707107 +8038,0.707107,0.000000,0.000000,0.707107 +8039,0.707107,0.000000,0.000000,0.707107 +8040,0.707107,0.000000,0.000000,0.707107 +8041,0.707107,0.000000,0.000000,0.707107 +8042,0.707107,0.000000,0.000000,0.707107 +8043,0.707107,0.000000,0.000000,0.707107 +8044,0.707107,0.000000,0.000000,0.707107 +8045,0.707107,0.000000,0.000000,0.707107 +8046,0.707107,0.000000,0.000000,0.707107 +8047,0.707107,0.000000,0.000000,0.707107 +8048,0.707107,0.000000,0.000000,0.707107 +8049,0.707107,0.000000,0.000000,0.707107 +8050,0.707107,0.000000,0.000000,0.707107 +8051,0.707107,0.000000,0.000000,0.707107 +8052,0.707107,0.000000,0.000000,0.707107 +8053,0.707107,0.000000,0.000000,0.707107 +8054,0.707107,0.000000,0.000000,0.707107 +8055,0.707107,0.000000,0.000000,0.707107 +8056,0.707107,0.000000,0.000000,0.707107 +8057,0.707107,0.000000,0.000000,0.707107 +8058,0.707107,0.000000,0.000000,0.707107 +8059,0.707107,0.000000,0.000000,0.707107 +8060,0.707107,0.000000,0.000000,0.707107 +8061,0.707107,0.000000,0.000000,0.707107 +8062,0.707107,0.000000,0.000000,0.707107 +8063,0.707107,0.000000,0.000000,0.707107 +8064,0.707107,0.000000,0.000000,0.707107 +8065,0.707107,0.000000,0.000000,0.707107 +8066,0.707107,0.000000,0.000000,0.707107 +8067,0.707107,0.000000,0.000000,0.707107 +8068,0.707107,0.000000,0.000000,0.707107 +8069,0.707107,0.000000,0.000000,0.707107 +8070,0.707107,0.000000,0.000000,0.707107 +8071,0.707107,0.000000,0.000000,0.707107 +8072,0.707107,0.000000,0.000000,0.707107 +8073,0.707107,0.000000,0.000000,0.707107 +8074,0.707107,0.000000,0.000000,0.707107 +8075,0.707107,0.000000,0.000000,0.707107 +8076,0.707107,0.000000,0.000000,0.707107 +8077,0.707107,0.000000,0.000000,0.707107 +8078,0.707107,0.000000,0.000000,0.707107 +8079,0.707107,0.000000,0.000000,0.707107 +8080,0.707107,0.000000,0.000000,0.707107 +8081,0.707107,0.000000,0.000000,0.707107 +8082,0.707107,0.000000,0.000000,0.707107 +8083,0.707107,0.000000,0.000000,0.707107 +8084,0.707107,0.000000,0.000000,0.707107 +8085,0.707107,0.000000,0.000000,0.707107 +8086,0.707107,0.000000,0.000000,0.707107 +8087,0.707107,0.000000,0.000000,0.707107 +8088,0.707107,0.000000,0.000000,0.707107 +8089,0.707107,0.000000,0.000000,0.707107 +8090,0.707107,0.000000,0.000000,0.707107 +8091,0.707107,0.000000,0.000000,0.707107 +8092,0.707107,0.000000,0.000000,0.707107 +8093,0.707107,0.000000,0.000000,0.707107 +8094,0.707107,0.000000,0.000000,0.707107 +8095,0.707107,0.000000,0.000000,0.707107 +8096,0.707107,0.000000,0.000000,0.707107 +8097,0.707107,0.000000,0.000000,0.707107 +8098,0.707107,0.000000,0.000000,0.707107 +8099,0.707107,0.000000,0.000000,0.707107 diff --git a/scripts/trajectories/headrot-15s.csv b/scripts/trajectories/headrot-15s.csv new file mode 100644 index 0000000000..e3500d2d39 --- /dev/null +++ b/scripts/trajectories/headrot-15s.csv @@ -0,0 +1,8100 @@ +0,0.996195,0.000000,0.000000,0.087156 +1,0.996195,0.000000,0.000000,0.087156 +2,0.996195,0.000000,0.000000,0.087156 +3,0.996195,0.000000,0.000000,0.087156 +4,0.996195,0.000000,0.000000,0.087156 +5,0.996195,0.000000,0.000000,0.087156 +6,0.996195,0.000000,0.000000,0.087156 +7,0.996195,0.000000,0.000000,0.087156 +8,0.996195,0.000000,0.000000,0.087156 +9,0.996195,0.000000,0.000000,0.087156 +10,0.996195,0.000000,0.000000,0.087156 +11,0.996195,0.000000,0.000000,0.087156 +12,0.996195,0.000000,0.000000,0.087156 +13,0.996195,0.000000,0.000000,0.087156 +14,0.996195,0.000000,0.000000,0.087156 +15,0.996195,0.000000,0.000000,0.087156 +16,0.996195,0.000000,0.000000,0.087156 +17,0.996195,0.000000,0.000000,0.087156 +18,0.996195,0.000000,0.000000,0.087156 +19,0.996195,0.000000,0.000000,0.087156 +20,0.996195,0.000000,0.000000,0.087156 +21,0.996195,0.000000,0.000000,0.087156 +22,0.996195,0.000000,0.000000,0.087156 +23,0.996195,0.000000,0.000000,0.087156 +24,0.996195,0.000000,0.000000,0.087156 +25,0.996195,0.000000,0.000000,0.087156 +26,0.996195,0.000000,0.000000,0.087156 +27,0.996195,0.000000,0.000000,0.087156 +28,0.996195,0.000000,0.000000,0.087156 +29,0.996195,0.000000,0.000000,0.087156 +30,0.996195,0.000000,0.000000,0.087156 +31,0.996195,0.000000,0.000000,0.087156 +32,0.996195,0.000000,0.000000,0.087156 +33,0.996195,0.000000,0.000000,0.087156 +34,0.996195,0.000000,0.000000,0.087156 +35,0.996195,0.000000,0.000000,0.087156 +36,0.996195,0.000000,0.000000,0.087156 +37,0.996195,0.000000,0.000000,0.087156 +38,0.996195,0.000000,0.000000,0.087156 +39,0.996195,0.000000,0.000000,0.087156 +40,0.996195,0.000000,0.000000,0.087156 +41,0.996195,0.000000,0.000000,0.087156 +42,0.996195,0.000000,0.000000,0.087156 +43,0.996195,0.000000,0.000000,0.087156 +44,0.996195,0.000000,0.000000,0.087156 +45,0.996195,0.000000,0.000000,0.087156 +46,0.996195,0.000000,0.000000,0.087156 +47,0.996195,0.000000,0.000000,0.087156 +48,0.996195,0.000000,0.000000,0.087156 +49,0.996195,0.000000,0.000000,0.087156 +50,0.996195,0.000000,0.000000,0.087156 +51,0.996195,0.000000,0.000000,0.087156 +52,0.996195,0.000000,0.000000,0.087156 +53,0.996195,0.000000,0.000000,0.087156 +54,0.996195,0.000000,0.000000,0.087156 +55,0.996195,0.000000,0.000000,0.087156 +56,0.996195,0.000000,0.000000,0.087156 +57,0.996195,0.000000,0.000000,0.087156 +58,0.996195,0.000000,0.000000,0.087156 +59,0.996195,0.000000,0.000000,0.087156 +60,0.996195,0.000000,0.000000,0.087156 +61,0.996195,0.000000,0.000000,0.087156 +62,0.996195,0.000000,0.000000,0.087156 +63,0.996195,0.000000,0.000000,0.087156 +64,0.996195,0.000000,0.000000,0.087156 +65,0.996195,0.000000,0.000000,0.087156 +66,0.996195,0.000000,0.000000,0.087156 +67,0.996195,0.000000,0.000000,0.087156 +68,0.996195,0.000000,0.000000,0.087156 +69,0.996195,0.000000,0.000000,0.087156 +70,0.996195,0.000000,0.000000,0.087156 +71,0.996195,0.000000,0.000000,0.087156 +72,0.996195,0.000000,0.000000,0.087156 +73,0.996195,0.000000,0.000000,0.087156 +74,0.996195,0.000000,0.000000,0.087156 +75,0.996195,0.000000,0.000000,0.087156 +76,0.996195,0.000000,0.000000,0.087156 +77,0.996195,0.000000,0.000000,0.087156 +78,0.996195,0.000000,0.000000,0.087156 +79,0.996195,0.000000,0.000000,0.087156 +80,0.996195,0.000000,0.000000,0.087156 +81,0.996195,0.000000,0.000000,0.087156 +82,0.996195,0.000000,0.000000,0.087156 +83,0.996195,0.000000,0.000000,0.087156 +84,0.996195,0.000000,0.000000,0.087156 +85,0.996195,0.000000,0.000000,0.087156 +86,0.996195,0.000000,0.000000,0.087156 +87,0.996195,0.000000,0.000000,0.087156 +88,0.996195,0.000000,0.000000,0.087156 +89,0.996195,0.000000,0.000000,0.087156 +90,0.996195,0.000000,0.000000,0.087156 +91,0.996195,0.000000,0.000000,0.087156 +92,0.996195,0.000000,0.000000,0.087156 +93,0.996195,0.000000,0.000000,0.087156 +94,0.996195,0.000000,0.000000,0.087156 +95,0.996195,0.000000,0.000000,0.087156 +96,0.996195,0.000000,0.000000,0.087156 +97,0.996195,0.000000,0.000000,0.087156 +98,0.996195,0.000000,0.000000,0.087156 +99,0.996195,0.000000,0.000000,0.087156 +100,0.996195,0.000000,0.000000,0.087156 +101,0.996195,0.000000,0.000000,0.087156 +102,0.996195,0.000000,0.000000,0.087156 +103,0.996195,0.000000,0.000000,0.087156 +104,0.996195,0.000000,0.000000,0.087156 +105,0.996195,0.000000,0.000000,0.087156 +106,0.996195,0.000000,0.000000,0.087156 +107,0.996195,0.000000,0.000000,0.087156 +108,0.996195,0.000000,0.000000,0.087156 +109,0.996195,0.000000,0.000000,0.087156 +110,0.996195,0.000000,0.000000,0.087156 +111,0.996195,0.000000,0.000000,0.087156 +112,0.996195,0.000000,0.000000,0.087156 +113,0.996195,0.000000,0.000000,0.087156 +114,0.996195,0.000000,0.000000,0.087156 +115,0.996195,0.000000,0.000000,0.087156 +116,0.996195,0.000000,0.000000,0.087156 +117,0.996195,0.000000,0.000000,0.087156 +118,0.996195,0.000000,0.000000,0.087156 +119,0.996195,0.000000,0.000000,0.087156 +120,0.996195,0.000000,0.000000,0.087156 +121,0.996195,0.000000,0.000000,0.087156 +122,0.996195,0.000000,0.000000,0.087156 +123,0.996195,0.000000,0.000000,0.087156 +124,0.996195,0.000000,0.000000,0.087156 +125,0.996195,0.000000,0.000000,0.087156 +126,0.996195,0.000000,0.000000,0.087156 +127,0.996195,0.000000,0.000000,0.087156 +128,0.996195,0.000000,0.000000,0.087156 +129,0.996195,0.000000,0.000000,0.087156 +130,0.996195,0.000000,0.000000,0.087156 +131,0.996195,0.000000,0.000000,0.087156 +132,0.996195,0.000000,0.000000,0.087156 +133,0.996195,0.000000,0.000000,0.087156 +134,0.996195,0.000000,0.000000,0.087156 +135,0.996195,0.000000,0.000000,0.087156 +136,0.996195,0.000000,0.000000,0.087156 +137,0.996195,0.000000,0.000000,0.087156 +138,0.996195,0.000000,0.000000,0.087156 +139,0.996195,0.000000,0.000000,0.087156 +140,0.996195,0.000000,0.000000,0.087156 +141,0.996195,0.000000,0.000000,0.087156 +142,0.996195,0.000000,0.000000,0.087156 +143,0.996195,0.000000,0.000000,0.087156 +144,0.996195,0.000000,0.000000,0.087156 +145,0.996195,0.000000,0.000000,0.087156 +146,0.996195,0.000000,0.000000,0.087156 +147,0.996195,0.000000,0.000000,0.087156 +148,0.996195,0.000000,0.000000,0.087156 +149,0.996195,0.000000,0.000000,0.087156 +150,0.996195,0.000000,0.000000,0.087156 +151,0.996195,0.000000,0.000000,0.087156 +152,0.996195,0.000000,0.000000,0.087156 +153,0.996195,0.000000,0.000000,0.087156 +154,0.996195,0.000000,0.000000,0.087156 +155,0.996195,0.000000,0.000000,0.087156 +156,0.996195,0.000000,0.000000,0.087156 +157,0.996195,0.000000,0.000000,0.087156 +158,0.996195,0.000000,0.000000,0.087156 +159,0.996195,0.000000,0.000000,0.087156 +160,0.996195,0.000000,0.000000,0.087156 +161,0.996195,0.000000,0.000000,0.087156 +162,0.996195,0.000000,0.000000,0.087156 +163,0.996195,0.000000,0.000000,0.087156 +164,0.996195,0.000000,0.000000,0.087156 +165,0.996195,0.000000,0.000000,0.087156 +166,0.996195,0.000000,0.000000,0.087156 +167,0.996195,0.000000,0.000000,0.087156 +168,0.996195,0.000000,0.000000,0.087156 +169,0.996195,0.000000,0.000000,0.087156 +170,0.996195,0.000000,0.000000,0.087156 +171,0.996195,0.000000,0.000000,0.087156 +172,0.996195,0.000000,0.000000,0.087156 +173,0.996195,0.000000,0.000000,0.087156 +174,0.996195,0.000000,0.000000,0.087156 +175,0.996195,0.000000,0.000000,0.087156 +176,0.996195,0.000000,0.000000,0.087156 +177,0.996195,0.000000,0.000000,0.087156 +178,0.996195,0.000000,0.000000,0.087156 +179,0.996195,0.000000,0.000000,0.087156 +180,0.996195,0.000000,0.000000,0.087156 +181,0.996195,0.000000,0.000000,0.087156 +182,0.996195,0.000000,0.000000,0.087156 +183,0.996195,0.000000,0.000000,0.087156 +184,0.996195,0.000000,0.000000,0.087156 +185,0.996195,0.000000,0.000000,0.087156 +186,0.996195,0.000000,0.000000,0.087156 +187,0.996195,0.000000,0.000000,0.087156 +188,0.996195,0.000000,0.000000,0.087156 +189,0.996195,0.000000,0.000000,0.087156 +190,0.996195,0.000000,0.000000,0.087156 +191,0.996195,0.000000,0.000000,0.087156 +192,0.996195,0.000000,0.000000,0.087156 +193,0.996195,0.000000,0.000000,0.087156 +194,0.996195,0.000000,0.000000,0.087156 +195,0.996195,0.000000,0.000000,0.087156 +196,0.996195,0.000000,0.000000,0.087156 +197,0.996195,0.000000,0.000000,0.087156 +198,0.996195,0.000000,0.000000,0.087156 +199,0.996195,0.000000,0.000000,0.087156 +200,0.996195,0.000000,0.000000,0.087156 +201,0.996195,0.000000,0.000000,0.087156 +202,0.996195,0.000000,0.000000,0.087156 +203,0.996195,0.000000,0.000000,0.087156 +204,0.996195,0.000000,0.000000,0.087156 +205,0.996195,0.000000,0.000000,0.087156 +206,0.996195,0.000000,0.000000,0.087156 +207,0.996195,0.000000,0.000000,0.087156 +208,0.996195,0.000000,0.000000,0.087156 +209,0.996195,0.000000,0.000000,0.087156 +210,0.996195,0.000000,0.000000,0.087156 +211,0.996195,0.000000,0.000000,0.087156 +212,0.996195,0.000000,0.000000,0.087156 +213,0.996195,0.000000,0.000000,0.087156 +214,0.996195,0.000000,0.000000,0.087156 +215,0.996195,0.000000,0.000000,0.087156 +216,0.996195,0.000000,0.000000,0.087156 +217,0.996195,0.000000,0.000000,0.087156 +218,0.996195,0.000000,0.000000,0.087156 +219,0.996195,0.000000,0.000000,0.087156 +220,0.996195,0.000000,0.000000,0.087156 +221,0.996195,0.000000,0.000000,0.087156 +222,0.996195,0.000000,0.000000,0.087156 +223,0.996195,0.000000,0.000000,0.087156 +224,0.996195,0.000000,0.000000,0.087156 +225,0.996195,0.000000,0.000000,0.087156 +226,0.996195,0.000000,0.000000,0.087156 +227,0.996195,0.000000,0.000000,0.087156 +228,0.996195,0.000000,0.000000,0.087156 +229,0.996195,0.000000,0.000000,0.087156 +230,0.996195,0.000000,0.000000,0.087156 +231,0.996195,0.000000,0.000000,0.087156 +232,0.996195,0.000000,0.000000,0.087156 +233,0.996195,0.000000,0.000000,0.087156 +234,0.996195,0.000000,0.000000,0.087156 +235,0.996195,0.000000,0.000000,0.087156 +236,0.996195,0.000000,0.000000,0.087156 +237,0.996195,0.000000,0.000000,0.087156 +238,0.996195,0.000000,0.000000,0.087156 +239,0.996195,0.000000,0.000000,0.087156 +240,0.996195,0.000000,0.000000,0.087156 +241,0.996195,0.000000,0.000000,0.087156 +242,0.996195,0.000000,0.000000,0.087156 +243,0.996195,0.000000,0.000000,0.087156 +244,0.996195,0.000000,0.000000,0.087156 +245,0.996195,0.000000,0.000000,0.087156 +246,0.996195,0.000000,0.000000,0.087156 +247,0.996195,0.000000,0.000000,0.087156 +248,0.996195,0.000000,0.000000,0.087156 +249,0.996195,0.000000,0.000000,0.087156 +250,0.996195,0.000000,0.000000,0.087156 +251,0.996195,0.000000,0.000000,0.087156 +252,0.996195,0.000000,0.000000,0.087156 +253,0.996195,0.000000,0.000000,0.087156 +254,0.996195,0.000000,0.000000,0.087156 +255,0.996195,0.000000,0.000000,0.087156 +256,0.996195,0.000000,0.000000,0.087156 +257,0.996195,0.000000,0.000000,0.087156 +258,0.996195,0.000000,0.000000,0.087156 +259,0.996195,0.000000,0.000000,0.087156 +260,0.996195,0.000000,0.000000,0.087156 +261,0.996195,0.000000,0.000000,0.087156 +262,0.996195,0.000000,0.000000,0.087156 +263,0.996195,0.000000,0.000000,0.087156 +264,0.996195,0.000000,0.000000,0.087156 +265,0.996195,0.000000,0.000000,0.087156 +266,0.996195,0.000000,0.000000,0.087156 +267,0.996195,0.000000,0.000000,0.087156 +268,0.996195,0.000000,0.000000,0.087156 +269,0.996195,0.000000,0.000000,0.087156 +270,0.996195,0.000000,0.000000,0.087156 +271,0.996195,0.000000,0.000000,0.087156 +272,0.996195,0.000000,0.000000,0.087156 +273,0.996195,0.000000,0.000000,0.087156 +274,0.996195,0.000000,0.000000,0.087156 +275,0.996195,0.000000,0.000000,0.087156 +276,0.996195,0.000000,0.000000,0.087156 +277,0.996195,0.000000,0.000000,0.087156 +278,0.996195,0.000000,0.000000,0.087156 +279,0.996195,0.000000,0.000000,0.087156 +280,0.996195,0.000000,0.000000,0.087156 +281,0.996195,0.000000,0.000000,0.087156 +282,0.996195,0.000000,0.000000,0.087156 +283,0.996195,0.000000,0.000000,0.087156 +284,0.996195,0.000000,0.000000,0.087156 +285,0.996195,0.000000,0.000000,0.087156 +286,0.996195,0.000000,0.000000,0.087156 +287,0.996195,0.000000,0.000000,0.087156 +288,0.996195,0.000000,0.000000,0.087156 +289,0.996195,0.000000,0.000000,0.087156 +290,0.996195,0.000000,0.000000,0.087156 +291,0.996195,0.000000,0.000000,0.087156 +292,0.996195,0.000000,0.000000,0.087156 +293,0.996195,0.000000,0.000000,0.087156 +294,0.996195,0.000000,0.000000,0.087156 +295,0.996195,0.000000,0.000000,0.087156 +296,0.996195,0.000000,0.000000,0.087156 +297,0.996195,0.000000,0.000000,0.087156 +298,0.996195,0.000000,0.000000,0.087156 +299,0.996195,0.000000,0.000000,0.087156 +300,0.996195,0.000000,0.000000,0.087156 +301,0.996195,0.000000,0.000000,0.087156 +302,0.996195,0.000000,0.000000,0.087156 +303,0.996195,0.000000,0.000000,0.087156 +304,0.996195,0.000000,0.000000,0.087156 +305,0.996195,0.000000,0.000000,0.087156 +306,0.996195,0.000000,0.000000,0.087156 +307,0.996195,0.000000,0.000000,0.087156 +308,0.996195,0.000000,0.000000,0.087156 +309,0.996195,0.000000,0.000000,0.087156 +310,0.996195,0.000000,0.000000,0.087156 +311,0.996195,0.000000,0.000000,0.087156 +312,0.996195,0.000000,0.000000,0.087156 +313,0.996195,0.000000,0.000000,0.087156 +314,0.996195,0.000000,0.000000,0.087156 +315,0.996195,0.000000,0.000000,0.087156 +316,0.996195,0.000000,0.000000,0.087156 +317,0.996195,0.000000,0.000000,0.087156 +318,0.996195,0.000000,0.000000,0.087156 +319,0.996195,0.000000,0.000000,0.087156 +320,0.996195,0.000000,0.000000,0.087156 +321,0.996195,0.000000,0.000000,0.087156 +322,0.996195,0.000000,0.000000,0.087156 +323,0.996195,0.000000,0.000000,0.087156 +324,0.996195,0.000000,0.000000,0.087156 +325,0.996195,0.000000,0.000000,0.087156 +326,0.996195,0.000000,0.000000,0.087156 +327,0.996195,0.000000,0.000000,0.087156 +328,0.996195,0.000000,0.000000,0.087156 +329,0.996195,0.000000,0.000000,0.087156 +330,0.996195,0.000000,0.000000,0.087156 +331,0.996195,0.000000,0.000000,0.087156 +332,0.996195,0.000000,0.000000,0.087156 +333,0.996195,0.000000,0.000000,0.087156 +334,0.996195,0.000000,0.000000,0.087156 +335,0.996195,0.000000,0.000000,0.087156 +336,0.996195,0.000000,0.000000,0.087156 +337,0.996195,0.000000,0.000000,0.087156 +338,0.996195,0.000000,0.000000,0.087156 +339,0.996195,0.000000,0.000000,0.087156 +340,0.996195,0.000000,0.000000,0.087156 +341,0.996195,0.000000,0.000000,0.087156 +342,0.996195,0.000000,0.000000,0.087156 +343,0.996195,0.000000,0.000000,0.087156 +344,0.996195,0.000000,0.000000,0.087156 +345,0.996195,0.000000,0.000000,0.087156 +346,0.996195,0.000000,0.000000,0.087156 +347,0.996195,0.000000,0.000000,0.087156 +348,0.996195,0.000000,0.000000,0.087156 +349,0.996195,0.000000,0.000000,0.087156 +350,0.996195,0.000000,0.000000,0.087156 +351,0.996195,0.000000,0.000000,0.087156 +352,0.996195,0.000000,0.000000,0.087156 +353,0.996195,0.000000,0.000000,0.087156 +354,0.996195,0.000000,0.000000,0.087156 +355,0.996195,0.000000,0.000000,0.087156 +356,0.996195,0.000000,0.000000,0.087156 +357,0.996195,0.000000,0.000000,0.087156 +358,0.996195,0.000000,0.000000,0.087156 +359,0.996195,0.000000,0.000000,0.087156 +360,0.996195,0.000000,0.000000,0.087156 +361,0.996195,0.000000,0.000000,0.087156 +362,0.996195,0.000000,0.000000,0.087156 +363,0.996195,0.000000,0.000000,0.087156 +364,0.996195,0.000000,0.000000,0.087156 +365,0.996195,0.000000,0.000000,0.087156 +366,0.996195,0.000000,0.000000,0.087156 +367,0.996195,0.000000,0.000000,0.087156 +368,0.996195,0.000000,0.000000,0.087156 +369,0.996195,0.000000,0.000000,0.087156 +370,0.996195,0.000000,0.000000,0.087156 +371,0.996195,0.000000,0.000000,0.087156 +372,0.996195,0.000000,0.000000,0.087156 +373,0.996195,0.000000,0.000000,0.087156 +374,0.996195,0.000000,0.000000,0.087156 +375,0.996195,0.000000,0.000000,0.087156 +376,0.996195,0.000000,0.000000,0.087156 +377,0.996195,0.000000,0.000000,0.087156 +378,0.996195,0.000000,0.000000,0.087156 +379,0.996195,0.000000,0.000000,0.087156 +380,0.996195,0.000000,0.000000,0.087156 +381,0.996195,0.000000,0.000000,0.087156 +382,0.996195,0.000000,0.000000,0.087156 +383,0.996195,0.000000,0.000000,0.087156 +384,0.996195,0.000000,0.000000,0.087156 +385,0.996195,0.000000,0.000000,0.087156 +386,0.996195,0.000000,0.000000,0.087156 +387,0.996195,0.000000,0.000000,0.087156 +388,0.996195,0.000000,0.000000,0.087156 +389,0.996195,0.000000,0.000000,0.087156 +390,0.996195,0.000000,0.000000,0.087156 +391,0.996195,0.000000,0.000000,0.087156 +392,0.996195,0.000000,0.000000,0.087156 +393,0.996195,0.000000,0.000000,0.087156 +394,0.996195,0.000000,0.000000,0.087156 +395,0.996195,0.000000,0.000000,0.087156 +396,0.996195,0.000000,0.000000,0.087156 +397,0.996195,0.000000,0.000000,0.087156 +398,0.996195,0.000000,0.000000,0.087156 +399,0.996195,0.000000,0.000000,0.087156 +400,0.996195,0.000000,0.000000,0.087156 +401,0.996195,0.000000,0.000000,0.087156 +402,0.996195,0.000000,0.000000,0.087156 +403,0.996195,0.000000,0.000000,0.087156 +404,0.996195,0.000000,0.000000,0.087156 +405,0.996195,0.000000,0.000000,0.087156 +406,0.996195,0.000000,0.000000,0.087156 +407,0.996195,0.000000,0.000000,0.087156 +408,0.996195,0.000000,0.000000,0.087156 +409,0.996195,0.000000,0.000000,0.087156 +410,0.996195,0.000000,0.000000,0.087156 +411,0.996195,0.000000,0.000000,0.087156 +412,0.996195,0.000000,0.000000,0.087156 +413,0.996195,0.000000,0.000000,0.087156 +414,0.996195,0.000000,0.000000,0.087156 +415,0.996195,0.000000,0.000000,0.087156 +416,0.996195,0.000000,0.000000,0.087156 +417,0.996195,0.000000,0.000000,0.087156 +418,0.996195,0.000000,0.000000,0.087156 +419,0.996195,0.000000,0.000000,0.087156 +420,0.996195,0.000000,0.000000,0.087156 +421,0.996195,0.000000,0.000000,0.087156 +422,0.996195,0.000000,0.000000,0.087156 +423,0.996195,0.000000,0.000000,0.087156 +424,0.996195,0.000000,0.000000,0.087156 +425,0.996195,0.000000,0.000000,0.087156 +426,0.996195,0.000000,0.000000,0.087156 +427,0.996195,0.000000,0.000000,0.087156 +428,0.996195,0.000000,0.000000,0.087156 +429,0.996195,0.000000,0.000000,0.087156 +430,0.996195,0.000000,0.000000,0.087156 +431,0.996195,0.000000,0.000000,0.087156 +432,0.996195,0.000000,0.000000,0.087156 +433,0.996195,0.000000,0.000000,0.087156 +434,0.996195,0.000000,0.000000,0.087156 +435,0.996195,0.000000,0.000000,0.087156 +436,0.996195,0.000000,0.000000,0.087156 +437,0.996195,0.000000,0.000000,0.087156 +438,0.996195,0.000000,0.000000,0.087156 +439,0.996195,0.000000,0.000000,0.087156 +440,0.996195,0.000000,0.000000,0.087156 +441,0.996195,0.000000,0.000000,0.087156 +442,0.996195,0.000000,0.000000,0.087156 +443,0.996195,0.000000,0.000000,0.087156 +444,0.996195,0.000000,0.000000,0.087156 +445,0.996195,0.000000,0.000000,0.087156 +446,0.996195,0.000000,0.000000,0.087156 +447,0.996195,0.000000,0.000000,0.087156 +448,0.996195,0.000000,0.000000,0.087156 +449,0.996195,0.000000,0.000000,0.087156 +450,0.996195,0.000000,0.000000,0.087156 +451,0.996195,0.000000,0.000000,0.087156 +452,0.996195,0.000000,0.000000,0.087156 +453,0.996195,0.000000,0.000000,0.087156 +454,0.996195,0.000000,0.000000,0.087156 +455,0.996195,0.000000,0.000000,0.087156 +456,0.996195,0.000000,0.000000,0.087156 +457,0.996195,0.000000,0.000000,0.087156 +458,0.996195,0.000000,0.000000,0.087156 +459,0.996195,0.000000,0.000000,0.087156 +460,0.996195,0.000000,0.000000,0.087156 +461,0.996195,0.000000,0.000000,0.087156 +462,0.996195,0.000000,0.000000,0.087156 +463,0.996195,0.000000,0.000000,0.087156 +464,0.996195,0.000000,0.000000,0.087156 +465,0.996195,0.000000,0.000000,0.087156 +466,0.996195,0.000000,0.000000,0.087156 +467,0.996195,0.000000,0.000000,0.087156 +468,0.996195,0.000000,0.000000,0.087156 +469,0.996195,0.000000,0.000000,0.087156 +470,0.996195,0.000000,0.000000,0.087156 +471,0.996195,0.000000,0.000000,0.087156 +472,0.996195,0.000000,0.000000,0.087156 +473,0.996195,0.000000,0.000000,0.087156 +474,0.996195,0.000000,0.000000,0.087156 +475,0.996195,0.000000,0.000000,0.087156 +476,0.996195,0.000000,0.000000,0.087156 +477,0.996195,0.000000,0.000000,0.087156 +478,0.996195,0.000000,0.000000,0.087156 +479,0.996195,0.000000,0.000000,0.087156 +480,0.996195,0.000000,0.000000,0.087156 +481,0.996195,0.000000,0.000000,0.087156 +482,0.996195,0.000000,0.000000,0.087156 +483,0.996195,0.000000,0.000000,0.087156 +484,0.996195,0.000000,0.000000,0.087156 +485,0.996195,0.000000,0.000000,0.087156 +486,0.996195,0.000000,0.000000,0.087156 +487,0.996195,0.000000,0.000000,0.087156 +488,0.996195,0.000000,0.000000,0.087156 +489,0.996195,0.000000,0.000000,0.087156 +490,0.996195,0.000000,0.000000,0.087156 +491,0.996195,0.000000,0.000000,0.087156 +492,0.996195,0.000000,0.000000,0.087156 +493,0.996195,0.000000,0.000000,0.087156 +494,0.996195,0.000000,0.000000,0.087156 +495,0.996195,0.000000,0.000000,0.087156 +496,0.996195,0.000000,0.000000,0.087156 +497,0.996195,0.000000,0.000000,0.087156 +498,0.996195,0.000000,0.000000,0.087156 +499,0.996195,0.000000,0.000000,0.087156 +500,0.996195,0.000000,0.000000,0.087156 +501,0.996195,0.000000,0.000000,0.087156 +502,0.996195,0.000000,0.000000,0.087156 +503,0.996195,0.000000,0.000000,0.087156 +504,0.996195,0.000000,0.000000,0.087156 +505,0.996195,0.000000,0.000000,0.087156 +506,0.996195,0.000000,0.000000,0.087156 +507,0.996195,0.000000,0.000000,0.087156 +508,0.996195,0.000000,0.000000,0.087156 +509,0.996195,0.000000,0.000000,0.087156 +510,0.996195,0.000000,0.000000,0.087156 +511,0.996195,0.000000,0.000000,0.087156 +512,0.996195,0.000000,0.000000,0.087156 +513,0.996195,0.000000,0.000000,0.087156 +514,0.996195,0.000000,0.000000,0.087156 +515,0.996195,0.000000,0.000000,0.087156 +516,0.996195,0.000000,0.000000,0.087156 +517,0.996195,0.000000,0.000000,0.087156 +518,0.996195,0.000000,0.000000,0.087156 +519,0.996195,0.000000,0.000000,0.087156 +520,0.996195,0.000000,0.000000,0.087156 +521,0.996195,0.000000,0.000000,0.087156 +522,0.996195,0.000000,0.000000,0.087156 +523,0.996195,0.000000,0.000000,0.087156 +524,0.996195,0.000000,0.000000,0.087156 +525,0.996195,0.000000,0.000000,0.087156 +526,0.996195,0.000000,0.000000,0.087156 +527,0.996195,0.000000,0.000000,0.087156 +528,0.996195,0.000000,0.000000,0.087156 +529,0.996195,0.000000,0.000000,0.087156 +530,0.996195,0.000000,0.000000,0.087156 +531,0.996195,0.000000,0.000000,0.087156 +532,0.996195,0.000000,0.000000,0.087156 +533,0.996195,0.000000,0.000000,0.087156 +534,0.996195,0.000000,0.000000,0.087156 +535,0.996195,0.000000,0.000000,0.087156 +536,0.996195,0.000000,0.000000,0.087156 +537,0.996195,0.000000,0.000000,0.087156 +538,0.996195,0.000000,0.000000,0.087156 +539,0.996195,0.000000,0.000000,0.087156 +540,0.996195,0.000000,0.000000,0.087156 +541,0.996195,0.000000,0.000000,0.087156 +542,0.996195,0.000000,0.000000,0.087156 +543,0.996195,0.000000,0.000000,0.087156 +544,0.996195,0.000000,0.000000,0.087156 +545,0.996195,0.000000,0.000000,0.087156 +546,0.996195,0.000000,0.000000,0.087156 +547,0.996195,0.000000,0.000000,0.087156 +548,0.996195,0.000000,0.000000,0.087156 +549,0.996195,0.000000,0.000000,0.087156 +550,0.996195,0.000000,0.000000,0.087156 +551,0.996195,0.000000,0.000000,0.087156 +552,0.996195,0.000000,0.000000,0.087156 +553,0.996195,0.000000,0.000000,0.087156 +554,0.996195,0.000000,0.000000,0.087156 +555,0.996195,0.000000,0.000000,0.087156 +556,0.996195,0.000000,0.000000,0.087156 +557,0.996195,0.000000,0.000000,0.087156 +558,0.996195,0.000000,0.000000,0.087156 +559,0.996195,0.000000,0.000000,0.087156 +560,0.996195,0.000000,0.000000,0.087156 +561,0.996195,0.000000,0.000000,0.087156 +562,0.996195,0.000000,0.000000,0.087156 +563,0.996195,0.000000,0.000000,0.087156 +564,0.996195,0.000000,0.000000,0.087156 +565,0.996195,0.000000,0.000000,0.087156 +566,0.996195,0.000000,0.000000,0.087156 +567,0.996195,0.000000,0.000000,0.087156 +568,0.996195,0.000000,0.000000,0.087156 +569,0.996195,0.000000,0.000000,0.087156 +570,0.996195,0.000000,0.000000,0.087156 +571,0.996195,0.000000,0.000000,0.087156 +572,0.996195,0.000000,0.000000,0.087156 +573,0.996195,0.000000,0.000000,0.087156 +574,0.996195,0.000000,0.000000,0.087156 +575,0.996195,0.000000,0.000000,0.087156 +576,0.996195,0.000000,0.000000,0.087156 +577,0.996195,0.000000,0.000000,0.087156 +578,0.996195,0.000000,0.000000,0.087156 +579,0.996195,0.000000,0.000000,0.087156 +580,0.996195,0.000000,0.000000,0.087156 +581,0.996195,0.000000,0.000000,0.087156 +582,0.996195,0.000000,0.000000,0.087156 +583,0.996195,0.000000,0.000000,0.087156 +584,0.996195,0.000000,0.000000,0.087156 +585,0.996195,0.000000,0.000000,0.087156 +586,0.996195,0.000000,0.000000,0.087156 +587,0.996195,0.000000,0.000000,0.087156 +588,0.996195,0.000000,0.000000,0.087156 +589,0.996195,0.000000,0.000000,0.087156 +590,0.996195,0.000000,0.000000,0.087156 +591,0.996195,0.000000,0.000000,0.087156 +592,0.996195,0.000000,0.000000,0.087156 +593,0.996195,0.000000,0.000000,0.087156 +594,0.996195,0.000000,0.000000,0.087156 +595,0.996195,0.000000,0.000000,0.087156 +596,0.996195,0.000000,0.000000,0.087156 +597,0.996195,0.000000,0.000000,0.087156 +598,0.996195,0.000000,0.000000,0.087156 +599,0.996195,0.000000,0.000000,0.087156 +600,0.996195,0.000000,0.000000,0.087156 +601,0.996195,0.000000,0.000000,0.087156 +602,0.996195,0.000000,0.000000,0.087156 +603,0.996195,0.000000,0.000000,0.087156 +604,0.996195,0.000000,0.000000,0.087156 +605,0.996195,0.000000,0.000000,0.087156 +606,0.996195,0.000000,0.000000,0.087156 +607,0.996195,0.000000,0.000000,0.087156 +608,0.996195,0.000000,0.000000,0.087156 +609,0.996195,0.000000,0.000000,0.087156 +610,0.996195,0.000000,0.000000,0.087156 +611,0.996195,0.000000,0.000000,0.087156 +612,0.996195,0.000000,0.000000,0.087156 +613,0.996195,0.000000,0.000000,0.087156 +614,0.996195,0.000000,0.000000,0.087156 +615,0.996195,0.000000,0.000000,0.087156 +616,0.996195,0.000000,0.000000,0.087156 +617,0.996195,0.000000,0.000000,0.087156 +618,0.996195,0.000000,0.000000,0.087156 +619,0.996195,0.000000,0.000000,0.087156 +620,0.996195,0.000000,0.000000,0.087156 +621,0.996195,0.000000,0.000000,0.087156 +622,0.996195,0.000000,0.000000,0.087156 +623,0.996195,0.000000,0.000000,0.087156 +624,0.996195,0.000000,0.000000,0.087156 +625,0.996195,0.000000,0.000000,0.087156 +626,0.996195,0.000000,0.000000,0.087156 +627,0.996195,0.000000,0.000000,0.087156 +628,0.996195,0.000000,0.000000,0.087156 +629,0.996195,0.000000,0.000000,0.087156 +630,0.996195,0.000000,0.000000,0.087156 +631,0.996195,0.000000,0.000000,0.087156 +632,0.996195,0.000000,0.000000,0.087156 +633,0.996195,0.000000,0.000000,0.087156 +634,0.996195,0.000000,0.000000,0.087156 +635,0.996195,0.000000,0.000000,0.087156 +636,0.996195,0.000000,0.000000,0.087156 +637,0.996195,0.000000,0.000000,0.087156 +638,0.996195,0.000000,0.000000,0.087156 +639,0.996195,0.000000,0.000000,0.087156 +640,0.996195,0.000000,0.000000,0.087156 +641,0.996195,0.000000,0.000000,0.087156 +642,0.996195,0.000000,0.000000,0.087156 +643,0.996195,0.000000,0.000000,0.087156 +644,0.996195,0.000000,0.000000,0.087156 +645,0.996195,0.000000,0.000000,0.087156 +646,0.996195,0.000000,0.000000,0.087156 +647,0.996195,0.000000,0.000000,0.087156 +648,0.996195,0.000000,0.000000,0.087156 +649,0.996195,0.000000,0.000000,0.087156 +650,0.996195,0.000000,0.000000,0.087156 +651,0.996195,0.000000,0.000000,0.087156 +652,0.996195,0.000000,0.000000,0.087156 +653,0.996195,0.000000,0.000000,0.087156 +654,0.996195,0.000000,0.000000,0.087156 +655,0.996195,0.000000,0.000000,0.087156 +656,0.996195,0.000000,0.000000,0.087156 +657,0.996195,0.000000,0.000000,0.087156 +658,0.996195,0.000000,0.000000,0.087156 +659,0.996195,0.000000,0.000000,0.087156 +660,0.996195,0.000000,0.000000,0.087156 +661,0.996195,0.000000,0.000000,0.087156 +662,0.996195,0.000000,0.000000,0.087156 +663,0.996195,0.000000,0.000000,0.087156 +664,0.996195,0.000000,0.000000,0.087156 +665,0.996195,0.000000,0.000000,0.087156 +666,0.996195,0.000000,0.000000,0.087156 +667,0.996195,0.000000,0.000000,0.087156 +668,0.996195,0.000000,0.000000,0.087156 +669,0.996195,0.000000,0.000000,0.087156 +670,0.996195,0.000000,0.000000,0.087156 +671,0.996195,0.000000,0.000000,0.087156 +672,0.996195,0.000000,0.000000,0.087156 +673,0.996195,0.000000,0.000000,0.087156 +674,0.996195,0.000000,0.000000,0.087156 +675,0.996195,0.000000,0.000000,0.087156 +676,0.996195,0.000000,0.000000,0.087156 +677,0.996195,0.000000,0.000000,0.087156 +678,0.996195,0.000000,0.000000,0.087156 +679,0.996195,0.000000,0.000000,0.087156 +680,0.996195,0.000000,0.000000,0.087156 +681,0.996195,0.000000,0.000000,0.087156 +682,0.996195,0.000000,0.000000,0.087156 +683,0.996195,0.000000,0.000000,0.087156 +684,0.996195,0.000000,0.000000,0.087156 +685,0.996195,0.000000,0.000000,0.087156 +686,0.996195,0.000000,0.000000,0.087156 +687,0.996195,0.000000,0.000000,0.087156 +688,0.996195,0.000000,0.000000,0.087156 +689,0.996195,0.000000,0.000000,0.087156 +690,0.996195,0.000000,0.000000,0.087156 +691,0.996195,0.000000,0.000000,0.087156 +692,0.996195,0.000000,0.000000,0.087156 +693,0.996195,0.000000,0.000000,0.087156 +694,0.996195,0.000000,0.000000,0.087156 +695,0.996195,0.000000,0.000000,0.087156 +696,0.996195,0.000000,0.000000,0.087156 +697,0.996195,0.000000,0.000000,0.087156 +698,0.996195,0.000000,0.000000,0.087156 +699,0.996195,0.000000,0.000000,0.087156 +700,0.996195,0.000000,0.000000,0.087156 +701,0.996195,0.000000,0.000000,0.087156 +702,0.996195,0.000000,0.000000,0.087156 +703,0.996195,0.000000,0.000000,0.087156 +704,0.996195,0.000000,0.000000,0.087156 +705,0.996195,0.000000,0.000000,0.087156 +706,0.996195,0.000000,0.000000,0.087156 +707,0.996195,0.000000,0.000000,0.087156 +708,0.996195,0.000000,0.000000,0.087156 +709,0.996195,0.000000,0.000000,0.087156 +710,0.996195,0.000000,0.000000,0.087156 +711,0.996195,0.000000,0.000000,0.087156 +712,0.996195,0.000000,0.000000,0.087156 +713,0.996195,0.000000,0.000000,0.087156 +714,0.996195,0.000000,0.000000,0.087156 +715,0.996195,0.000000,0.000000,0.087156 +716,0.996195,0.000000,0.000000,0.087156 +717,0.996195,0.000000,0.000000,0.087156 +718,0.996195,0.000000,0.000000,0.087156 +719,0.996195,0.000000,0.000000,0.087156 +720,0.996195,0.000000,0.000000,0.087156 +721,0.996195,0.000000,0.000000,0.087156 +722,0.996195,0.000000,0.000000,0.087156 +723,0.996195,0.000000,0.000000,0.087156 +724,0.996195,0.000000,0.000000,0.087156 +725,0.996195,0.000000,0.000000,0.087156 +726,0.996195,0.000000,0.000000,0.087156 +727,0.996195,0.000000,0.000000,0.087156 +728,0.996195,0.000000,0.000000,0.087156 +729,0.996195,0.000000,0.000000,0.087156 +730,0.996195,0.000000,0.000000,0.087156 +731,0.996195,0.000000,0.000000,0.087156 +732,0.996195,0.000000,0.000000,0.087156 +733,0.996195,0.000000,0.000000,0.087156 +734,0.996195,0.000000,0.000000,0.087156 +735,0.996195,0.000000,0.000000,0.087156 +736,0.996195,0.000000,0.000000,0.087156 +737,0.996195,0.000000,0.000000,0.087156 +738,0.996195,0.000000,0.000000,0.087156 +739,0.996195,0.000000,0.000000,0.087156 +740,0.996195,0.000000,0.000000,0.087156 +741,0.996195,0.000000,0.000000,0.087156 +742,0.996195,0.000000,0.000000,0.087156 +743,0.996195,0.000000,0.000000,0.087156 +744,0.996195,0.000000,0.000000,0.087156 +745,0.996195,0.000000,0.000000,0.087156 +746,0.996195,0.000000,0.000000,0.087156 +747,0.996195,0.000000,0.000000,0.087156 +748,0.996195,0.000000,0.000000,0.087156 +749,0.996195,0.000000,0.000000,0.087156 +750,0.996195,0.000000,0.000000,0.087156 +751,0.996195,0.000000,0.000000,0.087156 +752,0.996195,0.000000,0.000000,0.087156 +753,0.996195,0.000000,0.000000,0.087156 +754,0.996195,0.000000,0.000000,0.087156 +755,0.996195,0.000000,0.000000,0.087156 +756,0.996195,0.000000,0.000000,0.087156 +757,0.996195,0.000000,0.000000,0.087156 +758,0.996195,0.000000,0.000000,0.087156 +759,0.996195,0.000000,0.000000,0.087156 +760,0.996195,0.000000,0.000000,0.087156 +761,0.996195,0.000000,0.000000,0.087156 +762,0.996195,0.000000,0.000000,0.087156 +763,0.996195,0.000000,0.000000,0.087156 +764,0.996195,0.000000,0.000000,0.087156 +765,0.996195,0.000000,0.000000,0.087156 +766,0.996195,0.000000,0.000000,0.087156 +767,0.996195,0.000000,0.000000,0.087156 +768,0.996195,0.000000,0.000000,0.087156 +769,0.996195,0.000000,0.000000,0.087156 +770,0.996195,0.000000,0.000000,0.087156 +771,0.996195,0.000000,0.000000,0.087156 +772,0.996195,0.000000,0.000000,0.087156 +773,0.996195,0.000000,0.000000,0.087156 +774,0.996195,0.000000,0.000000,0.087156 +775,0.996195,0.000000,0.000000,0.087156 +776,0.996195,0.000000,0.000000,0.087156 +777,0.996195,0.000000,0.000000,0.087156 +778,0.996195,0.000000,0.000000,0.087156 +779,0.996195,0.000000,0.000000,0.087156 +780,0.996195,0.000000,0.000000,0.087156 +781,0.996195,0.000000,0.000000,0.087156 +782,0.996195,0.000000,0.000000,0.087156 +783,0.996195,0.000000,0.000000,0.087156 +784,0.996195,0.000000,0.000000,0.087156 +785,0.996195,0.000000,0.000000,0.087156 +786,0.996195,0.000000,0.000000,0.087156 +787,0.996195,0.000000,0.000000,0.087156 +788,0.996195,0.000000,0.000000,0.087156 +789,0.996195,0.000000,0.000000,0.087156 +790,0.996195,0.000000,0.000000,0.087156 +791,0.996195,0.000000,0.000000,0.087156 +792,0.996195,0.000000,0.000000,0.087156 +793,0.996195,0.000000,0.000000,0.087156 +794,0.996195,0.000000,0.000000,0.087156 +795,0.996195,0.000000,0.000000,0.087156 +796,0.996195,0.000000,0.000000,0.087156 +797,0.996195,0.000000,0.000000,0.087156 +798,0.996195,0.000000,0.000000,0.087156 +799,0.996195,0.000000,0.000000,0.087156 +800,0.996195,0.000000,0.000000,0.087156 +801,0.995989,0.000000,0.000000,0.089474 +802,0.995778,0.000000,0.000000,0.091791 +803,0.995562,0.000000,0.000000,0.094108 +804,0.995340,0.000000,0.000000,0.096425 +805,0.995113,0.000000,0.000000,0.098741 +806,0.994881,0.000000,0.000000,0.101056 +807,0.994643,0.000000,0.000000,0.103371 +808,0.994400,0.000000,0.000000,0.105686 +809,0.994151,0.000000,0.000000,0.107999 +810,0.993897,0.000000,0.000000,0.110313 +811,0.993638,0.000000,0.000000,0.112625 +812,0.993373,0.000000,0.000000,0.114937 +813,0.993103,0.000000,0.000000,0.117249 +814,0.992827,0.000000,0.000000,0.119559 +815,0.992546,0.000000,0.000000,0.121869 +816,0.992260,0.000000,0.000000,0.124179 +817,0.991968,0.000000,0.000000,0.126488 +818,0.991671,0.000000,0.000000,0.128796 +819,0.991369,0.000000,0.000000,0.131103 +820,0.991061,0.000000,0.000000,0.133410 +821,0.990748,0.000000,0.000000,0.135716 +822,0.990429,0.000000,0.000000,0.138021 +823,0.990105,0.000000,0.000000,0.140325 +824,0.989776,0.000000,0.000000,0.142629 +825,0.989442,0.000000,0.000000,0.144932 +826,0.989102,0.000000,0.000000,0.147234 +827,0.988756,0.000000,0.000000,0.149535 +828,0.988406,0.000000,0.000000,0.151836 +829,0.988050,0.000000,0.000000,0.154136 +830,0.987688,0.000000,0.000000,0.156434 +831,0.987322,0.000000,0.000000,0.158732 +832,0.986950,0.000000,0.000000,0.161030 +833,0.986572,0.000000,0.000000,0.163326 +834,0.986189,0.000000,0.000000,0.165621 +835,0.985801,0.000000,0.000000,0.167916 +836,0.985408,0.000000,0.000000,0.170209 +837,0.985009,0.000000,0.000000,0.172502 +838,0.984605,0.000000,0.000000,0.174794 +839,0.984196,0.000000,0.000000,0.177085 +840,0.983781,0.000000,0.000000,0.179375 +841,0.983361,0.000000,0.000000,0.181663 +842,0.982935,0.000000,0.000000,0.183951 +843,0.982505,0.000000,0.000000,0.186238 +844,0.982069,0.000000,0.000000,0.188524 +845,0.981627,0.000000,0.000000,0.190809 +846,0.981180,0.000000,0.000000,0.193093 +847,0.980728,0.000000,0.000000,0.195376 +848,0.980271,0.000000,0.000000,0.197657 +849,0.979809,0.000000,0.000000,0.199938 +850,0.979341,0.000000,0.000000,0.202218 +851,0.978867,0.000000,0.000000,0.204496 +852,0.978389,0.000000,0.000000,0.206773 +853,0.977905,0.000000,0.000000,0.209050 +854,0.977416,0.000000,0.000000,0.211325 +855,0.976921,0.000000,0.000000,0.213599 +856,0.976422,0.000000,0.000000,0.215872 +857,0.975917,0.000000,0.000000,0.218143 +858,0.975406,0.000000,0.000000,0.220414 +859,0.974891,0.000000,0.000000,0.222683 +860,0.974370,0.000000,0.000000,0.224951 +861,0.973844,0.000000,0.000000,0.227218 +862,0.973313,0.000000,0.000000,0.229484 +863,0.972776,0.000000,0.000000,0.231748 +864,0.972234,0.000000,0.000000,0.234011 +865,0.971687,0.000000,0.000000,0.236273 +866,0.971134,0.000000,0.000000,0.238533 +867,0.970577,0.000000,0.000000,0.240793 +868,0.970014,0.000000,0.000000,0.243051 +869,0.969445,0.000000,0.000000,0.245307 +870,0.968872,0.000000,0.000000,0.247563 +871,0.968293,0.000000,0.000000,0.249817 +872,0.967709,0.000000,0.000000,0.252069 +873,0.967120,0.000000,0.000000,0.254321 +874,0.966526,0.000000,0.000000,0.256571 +875,0.965926,0.000000,0.000000,0.258819 +876,0.965321,0.000000,0.000000,0.261066 +877,0.964711,0.000000,0.000000,0.263312 +878,0.964095,0.000000,0.000000,0.265556 +879,0.963475,0.000000,0.000000,0.267799 +880,0.962849,0.000000,0.000000,0.270040 +881,0.962218,0.000000,0.000000,0.272280 +882,0.961582,0.000000,0.000000,0.274519 +883,0.960940,0.000000,0.000000,0.276756 +884,0.960294,0.000000,0.000000,0.278991 +885,0.959642,0.000000,0.000000,0.281225 +886,0.958985,0.000000,0.000000,0.283457 +887,0.958323,0.000000,0.000000,0.285688 +888,0.957655,0.000000,0.000000,0.287918 +889,0.956983,0.000000,0.000000,0.290145 +890,0.956305,0.000000,0.000000,0.292372 +891,0.955622,0.000000,0.000000,0.294596 +892,0.954934,0.000000,0.000000,0.296819 +893,0.954240,0.000000,0.000000,0.299041 +894,0.953542,0.000000,0.000000,0.301261 +895,0.952838,0.000000,0.000000,0.303479 +896,0.952129,0.000000,0.000000,0.305695 +897,0.951415,0.000000,0.000000,0.307910 +898,0.950696,0.000000,0.000000,0.310123 +899,0.949972,0.000000,0.000000,0.312335 +900,0.949243,0.000000,0.000000,0.314545 +901,0.948508,0.000000,0.000000,0.316753 +902,0.947768,0.000000,0.000000,0.318959 +903,0.947024,0.000000,0.000000,0.321164 +904,0.946274,0.000000,0.000000,0.323367 +905,0.945519,0.000000,0.000000,0.325568 +906,0.944758,0.000000,0.000000,0.327768 +907,0.943993,0.000000,0.000000,0.329965 +908,0.943223,0.000000,0.000000,0.332161 +909,0.942447,0.000000,0.000000,0.334355 +910,0.941667,0.000000,0.000000,0.336547 +911,0.940881,0.000000,0.000000,0.338738 +912,0.940090,0.000000,0.000000,0.340927 +913,0.939294,0.000000,0.000000,0.343113 +914,0.938493,0.000000,0.000000,0.345298 +915,0.937687,0.000000,0.000000,0.347481 +916,0.936876,0.000000,0.000000,0.349662 +917,0.936060,0.000000,0.000000,0.351842 +918,0.935238,0.000000,0.000000,0.354019 +919,0.934412,0.000000,0.000000,0.356194 +920,0.933580,0.000000,0.000000,0.358368 +921,0.932744,0.000000,0.000000,0.360540 +922,0.931902,0.000000,0.000000,0.362709 +923,0.931056,0.000000,0.000000,0.364877 +924,0.930204,0.000000,0.000000,0.367042 +925,0.929348,0.000000,0.000000,0.369206 +926,0.928486,0.000000,0.000000,0.371368 +927,0.927619,0.000000,0.000000,0.373528 +928,0.926747,0.000000,0.000000,0.375685 +929,0.925871,0.000000,0.000000,0.377841 +930,0.924989,0.000000,0.000000,0.379994 +931,0.924102,0.000000,0.000000,0.382146 +932,0.923210,0.000000,0.000000,0.384295 +933,0.922313,0.000000,0.000000,0.386443 +934,0.921412,0.000000,0.000000,0.388588 +935,0.920505,0.000000,0.000000,0.390731 +936,0.919593,0.000000,0.000000,0.392872 +937,0.918676,0.000000,0.000000,0.395011 +938,0.917755,0.000000,0.000000,0.397148 +939,0.916828,0.000000,0.000000,0.399283 +940,0.915896,0.000000,0.000000,0.401415 +941,0.914960,0.000000,0.000000,0.403545 +942,0.914018,0.000000,0.000000,0.405673 +943,0.913072,0.000000,0.000000,0.407799 +944,0.912120,0.000000,0.000000,0.409923 +945,0.911164,0.000000,0.000000,0.412045 +946,0.910202,0.000000,0.000000,0.414164 +947,0.909236,0.000000,0.000000,0.416281 +948,0.908265,0.000000,0.000000,0.418396 +949,0.907289,0.000000,0.000000,0.420508 +950,0.906308,0.000000,0.000000,0.422618 +951,0.905322,0.000000,0.000000,0.424726 +952,0.904331,0.000000,0.000000,0.426832 +953,0.903335,0.000000,0.000000,0.428935 +954,0.902335,0.000000,0.000000,0.431036 +955,0.901329,0.000000,0.000000,0.433135 +956,0.900319,0.000000,0.000000,0.435231 +957,0.899304,0.000000,0.000000,0.437325 +958,0.898283,0.000000,0.000000,0.439417 +959,0.897258,0.000000,0.000000,0.441506 +960,0.896229,0.000000,0.000000,0.443593 +961,0.895194,0.000000,0.000000,0.445677 +962,0.894154,0.000000,0.000000,0.447759 +963,0.893110,0.000000,0.000000,0.449839 +964,0.892061,0.000000,0.000000,0.451916 +965,0.891007,0.000000,0.000000,0.453990 +966,0.889948,0.000000,0.000000,0.456063 +967,0.888884,0.000000,0.000000,0.458132 +968,0.887815,0.000000,0.000000,0.460200 +969,0.886742,0.000000,0.000000,0.462265 +970,0.885664,0.000000,0.000000,0.464327 +971,0.884581,0.000000,0.000000,0.466387 +972,0.883493,0.000000,0.000000,0.468444 +973,0.882401,0.000000,0.000000,0.470499 +974,0.881303,0.000000,0.000000,0.472551 +975,0.880201,0.000000,0.000000,0.474600 +976,0.879095,0.000000,0.000000,0.476647 +977,0.877983,0.000000,0.000000,0.478692 +978,0.876867,0.000000,0.000000,0.480734 +979,0.875746,0.000000,0.000000,0.482773 +980,0.874620,0.000000,0.000000,0.484810 +981,0.873489,0.000000,0.000000,0.486844 +982,0.872354,0.000000,0.000000,0.488875 +983,0.871214,0.000000,0.000000,0.490904 +984,0.870069,0.000000,0.000000,0.492930 +985,0.868920,0.000000,0.000000,0.494953 +986,0.867765,0.000000,0.000000,0.496974 +987,0.866607,0.000000,0.000000,0.498992 +988,0.865443,0.000000,0.000000,0.501007 +989,0.864275,0.000000,0.000000,0.503020 +990,0.863102,0.000000,0.000000,0.505030 +991,0.861924,0.000000,0.000000,0.507037 +992,0.860742,0.000000,0.000000,0.509041 +993,0.859555,0.000000,0.000000,0.511043 +994,0.858364,0.000000,0.000000,0.513042 +995,0.857167,0.000000,0.000000,0.515038 +996,0.855966,0.000000,0.000000,0.517031 +997,0.854761,0.000000,0.000000,0.519022 +998,0.853551,0.000000,0.000000,0.521010 +999,0.852336,0.000000,0.000000,0.522995 +1000,0.851117,0.000000,0.000000,0.524977 +1001,0.849893,0.000000,0.000000,0.526956 +1002,0.848664,0.000000,0.000000,0.528932 +1003,0.847431,0.000000,0.000000,0.530906 +1004,0.846193,0.000000,0.000000,0.532876 +1005,0.844951,0.000000,0.000000,0.534844 +1006,0.843704,0.000000,0.000000,0.536809 +1007,0.842452,0.000000,0.000000,0.538771 +1008,0.841196,0.000000,0.000000,0.540730 +1009,0.839936,0.000000,0.000000,0.542686 +1010,0.838671,0.000000,0.000000,0.544639 +1011,0.837401,0.000000,0.000000,0.546589 +1012,0.836127,0.000000,0.000000,0.548536 +1013,0.834848,0.000000,0.000000,0.550481 +1014,0.833565,0.000000,0.000000,0.552422 +1015,0.832277,0.000000,0.000000,0.554360 +1016,0.830984,0.000000,0.000000,0.556296 +1017,0.829688,0.000000,0.000000,0.558228 +1018,0.828386,0.000000,0.000000,0.560157 +1019,0.827081,0.000000,0.000000,0.562083 +1020,0.825770,0.000000,0.000000,0.564007 +1021,0.824456,0.000000,0.000000,0.565927 +1022,0.823136,0.000000,0.000000,0.567844 +1023,0.821813,0.000000,0.000000,0.569758 +1024,0.820485,0.000000,0.000000,0.571669 +1025,0.819152,0.000000,0.000000,0.573576 +1026,0.817815,0.000000,0.000000,0.575481 +1027,0.816474,0.000000,0.000000,0.577383 +1028,0.815128,0.000000,0.000000,0.579281 +1029,0.813778,0.000000,0.000000,0.581176 +1030,0.812423,0.000000,0.000000,0.583069 +1031,0.811064,0.000000,0.000000,0.584958 +1032,0.809700,0.000000,0.000000,0.586844 +1033,0.808333,0.000000,0.000000,0.588726 +1034,0.806960,0.000000,0.000000,0.590606 +1035,0.805584,0.000000,0.000000,0.592482 +1036,0.804203,0.000000,0.000000,0.594355 +1037,0.802817,0.000000,0.000000,0.596225 +1038,0.801428,0.000000,0.000000,0.598092 +1039,0.800034,0.000000,0.000000,0.599955 +1040,0.798636,0.000000,0.000000,0.601815 +1041,0.797233,0.000000,0.000000,0.603672 +1042,0.795826,0.000000,0.000000,0.605526 +1043,0.794415,0.000000,0.000000,0.607376 +1044,0.792999,0.000000,0.000000,0.609223 +1045,0.791579,0.000000,0.000000,0.611067 +1046,0.790155,0.000000,0.000000,0.612907 +1047,0.788727,0.000000,0.000000,0.614744 +1048,0.787294,0.000000,0.000000,0.616578 +1049,0.785857,0.000000,0.000000,0.618408 +1050,0.784416,0.000000,0.000000,0.620235 +1051,0.782970,0.000000,0.000000,0.622059 +1052,0.781520,0.000000,0.000000,0.623880 +1053,0.780067,0.000000,0.000000,0.625697 +1054,0.778608,0.000000,0.000000,0.627510 +1055,0.777146,0.000000,0.000000,0.629320 +1056,0.775679,0.000000,0.000000,0.631127 +1057,0.774209,0.000000,0.000000,0.632931 +1058,0.772734,0.000000,0.000000,0.634731 +1059,0.771254,0.000000,0.000000,0.636527 +1060,0.769771,0.000000,0.000000,0.638320 +1061,0.768284,0.000000,0.000000,0.640110 +1062,0.766792,0.000000,0.000000,0.641896 +1063,0.765296,0.000000,0.000000,0.643679 +1064,0.763796,0.000000,0.000000,0.645458 +1065,0.762292,0.000000,0.000000,0.647233 +1066,0.760784,0.000000,0.000000,0.649006 +1067,0.759271,0.000000,0.000000,0.650774 +1068,0.757755,0.000000,0.000000,0.652539 +1069,0.756234,0.000000,0.000000,0.654301 +1070,0.754710,0.000000,0.000000,0.656059 +1071,0.753181,0.000000,0.000000,0.657814 +1072,0.751648,0.000000,0.000000,0.659564 +1073,0.750111,0.000000,0.000000,0.661312 +1074,0.748570,0.000000,0.000000,0.663056 +1075,0.747025,0.000000,0.000000,0.664796 +1076,0.745476,0.000000,0.000000,0.666532 +1077,0.743923,0.000000,0.000000,0.668265 +1078,0.742366,0.000000,0.000000,0.669995 +1079,0.740805,0.000000,0.000000,0.671721 +1080,0.739239,0.000000,0.000000,0.673443 +1081,0.737670,0.000000,0.000000,0.675161 +1082,0.736097,0.000000,0.000000,0.676876 +1083,0.734520,0.000000,0.000000,0.678587 +1084,0.732939,0.000000,0.000000,0.680295 +1085,0.731354,0.000000,0.000000,0.681998 +1086,0.729765,0.000000,0.000000,0.683698 +1087,0.728172,0.000000,0.000000,0.685395 +1088,0.726575,0.000000,0.000000,0.687088 +1089,0.724974,0.000000,0.000000,0.688776 +1090,0.723369,0.000000,0.000000,0.690462 +1091,0.721760,0.000000,0.000000,0.692143 +1092,0.720148,0.000000,0.000000,0.693821 +1093,0.718531,0.000000,0.000000,0.695495 +1094,0.716911,0.000000,0.000000,0.697165 +1095,0.715286,0.000000,0.000000,0.698832 +1096,0.713658,0.000000,0.000000,0.700494 +1097,0.712026,0.000000,0.000000,0.702153 +1098,0.710390,0.000000,0.000000,0.703808 +1099,0.708750,0.000000,0.000000,0.705459 +1100,0.707107,0.000000,0.000000,0.707107 +1101,0.707107,0.000000,0.000000,0.707107 +1102,0.707107,0.000000,0.000000,0.707107 +1103,0.707107,0.000000,0.000000,0.707107 +1104,0.707107,0.000000,0.000000,0.707107 +1105,0.707107,0.000000,0.000000,0.707107 +1106,0.707107,0.000000,0.000000,0.707107 +1107,0.707107,0.000000,0.000000,0.707107 +1108,0.707107,0.000000,0.000000,0.707107 +1109,0.707107,0.000000,0.000000,0.707107 +1110,0.707107,0.000000,0.000000,0.707107 +1111,0.707107,0.000000,0.000000,0.707107 +1112,0.707107,0.000000,0.000000,0.707107 +1113,0.707107,0.000000,0.000000,0.707107 +1114,0.707107,0.000000,0.000000,0.707107 +1115,0.707107,0.000000,0.000000,0.707107 +1116,0.707107,0.000000,0.000000,0.707107 +1117,0.707107,0.000000,0.000000,0.707107 +1118,0.707107,0.000000,0.000000,0.707107 +1119,0.707107,0.000000,0.000000,0.707107 +1120,0.707107,0.000000,0.000000,0.707107 +1121,0.707107,0.000000,0.000000,0.707107 +1122,0.707107,0.000000,0.000000,0.707107 +1123,0.707107,0.000000,0.000000,0.707107 +1124,0.707107,0.000000,0.000000,0.707107 +1125,0.707107,0.000000,0.000000,0.707107 +1126,0.707107,0.000000,0.000000,0.707107 +1127,0.707107,0.000000,0.000000,0.707107 +1128,0.707107,0.000000,0.000000,0.707107 +1129,0.707107,0.000000,0.000000,0.707107 +1130,0.707107,0.000000,0.000000,0.707107 +1131,0.707107,0.000000,0.000000,0.707107 +1132,0.707107,0.000000,0.000000,0.707107 +1133,0.707107,0.000000,0.000000,0.707107 +1134,0.707107,0.000000,0.000000,0.707107 +1135,0.707107,0.000000,0.000000,0.707107 +1136,0.707107,0.000000,0.000000,0.707107 +1137,0.707107,0.000000,0.000000,0.707107 +1138,0.707107,0.000000,0.000000,0.707107 +1139,0.707107,0.000000,0.000000,0.707107 +1140,0.707107,0.000000,0.000000,0.707107 +1141,0.707107,0.000000,0.000000,0.707107 +1142,0.707107,0.000000,0.000000,0.707107 +1143,0.707107,0.000000,0.000000,0.707107 +1144,0.707107,0.000000,0.000000,0.707107 +1145,0.707107,0.000000,0.000000,0.707107 +1146,0.707107,0.000000,0.000000,0.707107 +1147,0.707107,0.000000,0.000000,0.707107 +1148,0.707107,0.000000,0.000000,0.707107 +1149,0.707107,0.000000,0.000000,0.707107 +1150,0.707107,0.000000,0.000000,0.707107 +1151,0.707107,0.000000,0.000000,0.707107 +1152,0.707107,0.000000,0.000000,0.707107 +1153,0.707107,0.000000,0.000000,0.707107 +1154,0.707107,0.000000,0.000000,0.707107 +1155,0.707107,0.000000,0.000000,0.707107 +1156,0.707107,0.000000,0.000000,0.707107 +1157,0.707107,0.000000,0.000000,0.707107 +1158,0.707107,0.000000,0.000000,0.707107 +1159,0.707107,0.000000,0.000000,0.707107 +1160,0.707107,0.000000,0.000000,0.707107 +1161,0.707107,0.000000,0.000000,0.707107 +1162,0.707107,0.000000,0.000000,0.707107 +1163,0.707107,0.000000,0.000000,0.707107 +1164,0.707107,0.000000,0.000000,0.707107 +1165,0.707107,0.000000,0.000000,0.707107 +1166,0.707107,0.000000,0.000000,0.707107 +1167,0.707107,0.000000,0.000000,0.707107 +1168,0.707107,0.000000,0.000000,0.707107 +1169,0.707107,0.000000,0.000000,0.707107 +1170,0.707107,0.000000,0.000000,0.707107 +1171,0.707107,0.000000,0.000000,0.707107 +1172,0.707107,0.000000,0.000000,0.707107 +1173,0.707107,0.000000,0.000000,0.707107 +1174,0.707107,0.000000,0.000000,0.707107 +1175,0.707107,0.000000,0.000000,0.707107 +1176,0.707107,0.000000,0.000000,0.707107 +1177,0.707107,0.000000,0.000000,0.707107 +1178,0.707107,0.000000,0.000000,0.707107 +1179,0.707107,0.000000,0.000000,0.707107 +1180,0.707107,0.000000,0.000000,0.707107 +1181,0.707107,0.000000,0.000000,0.707107 +1182,0.707107,0.000000,0.000000,0.707107 +1183,0.707107,0.000000,0.000000,0.707107 +1184,0.707107,0.000000,0.000000,0.707107 +1185,0.707107,0.000000,0.000000,0.707107 +1186,0.707107,0.000000,0.000000,0.707107 +1187,0.707107,0.000000,0.000000,0.707107 +1188,0.707107,0.000000,0.000000,0.707107 +1189,0.707107,0.000000,0.000000,0.707107 +1190,0.707107,0.000000,0.000000,0.707107 +1191,0.707107,0.000000,0.000000,0.707107 +1192,0.707107,0.000000,0.000000,0.707107 +1193,0.707107,0.000000,0.000000,0.707107 +1194,0.707107,0.000000,0.000000,0.707107 +1195,0.707107,0.000000,0.000000,0.707107 +1196,0.707107,0.000000,0.000000,0.707107 +1197,0.707107,0.000000,0.000000,0.707107 +1198,0.707107,0.000000,0.000000,0.707107 +1199,0.707107,0.000000,0.000000,0.707107 +1200,0.707107,0.000000,0.000000,0.707107 +1201,0.707107,0.000000,0.000000,0.707107 +1202,0.707107,0.000000,0.000000,0.707107 +1203,0.707107,0.000000,0.000000,0.707107 +1204,0.707107,0.000000,0.000000,0.707107 +1205,0.707107,0.000000,0.000000,0.707107 +1206,0.707107,0.000000,0.000000,0.707107 +1207,0.707107,0.000000,0.000000,0.707107 +1208,0.707107,0.000000,0.000000,0.707107 +1209,0.707107,0.000000,0.000000,0.707107 +1210,0.707107,0.000000,0.000000,0.707107 +1211,0.707107,0.000000,0.000000,0.707107 +1212,0.707107,0.000000,0.000000,0.707107 +1213,0.707107,0.000000,0.000000,0.707107 +1214,0.707107,0.000000,0.000000,0.707107 +1215,0.707107,0.000000,0.000000,0.707107 +1216,0.707107,0.000000,0.000000,0.707107 +1217,0.707107,0.000000,0.000000,0.707107 +1218,0.707107,0.000000,0.000000,0.707107 +1219,0.707107,0.000000,0.000000,0.707107 +1220,0.707107,0.000000,0.000000,0.707107 +1221,0.707107,0.000000,0.000000,0.707107 +1222,0.707107,0.000000,0.000000,0.707107 +1223,0.707107,0.000000,0.000000,0.707107 +1224,0.707107,0.000000,0.000000,0.707107 +1225,0.707107,0.000000,0.000000,0.707107 +1226,0.707107,0.000000,0.000000,0.707107 +1227,0.707107,0.000000,0.000000,0.707107 +1228,0.707107,0.000000,0.000000,0.707107 +1229,0.707107,0.000000,0.000000,0.707107 +1230,0.707107,0.000000,0.000000,0.707107 +1231,0.707107,0.000000,0.000000,0.707107 +1232,0.707107,0.000000,0.000000,0.707107 +1233,0.707107,0.000000,0.000000,0.707107 +1234,0.707107,0.000000,0.000000,0.707107 +1235,0.707107,0.000000,0.000000,0.707107 +1236,0.707107,0.000000,0.000000,0.707107 +1237,0.707107,0.000000,0.000000,0.707107 +1238,0.707107,0.000000,0.000000,0.707107 +1239,0.707107,0.000000,0.000000,0.707107 +1240,0.707107,0.000000,0.000000,0.707107 +1241,0.707107,0.000000,0.000000,0.707107 +1242,0.707107,0.000000,0.000000,0.707107 +1243,0.707107,0.000000,0.000000,0.707107 +1244,0.707107,0.000000,0.000000,0.707107 +1245,0.707107,0.000000,0.000000,0.707107 +1246,0.707107,0.000000,0.000000,0.707107 +1247,0.707107,0.000000,0.000000,0.707107 +1248,0.707107,0.000000,0.000000,0.707107 +1249,0.707107,0.000000,0.000000,0.707107 +1250,0.707107,0.000000,0.000000,0.707107 +1251,0.707107,0.000000,0.000000,0.707107 +1252,0.707107,0.000000,0.000000,0.707107 +1253,0.707107,0.000000,0.000000,0.707107 +1254,0.707107,0.000000,0.000000,0.707107 +1255,0.707107,0.000000,0.000000,0.707107 +1256,0.707107,0.000000,0.000000,0.707107 +1257,0.707107,0.000000,0.000000,0.707107 +1258,0.707107,0.000000,0.000000,0.707107 +1259,0.707107,0.000000,0.000000,0.707107 +1260,0.707107,0.000000,0.000000,0.707107 +1261,0.707107,0.000000,0.000000,0.707107 +1262,0.707107,0.000000,0.000000,0.707107 +1263,0.707107,0.000000,0.000000,0.707107 +1264,0.707107,0.000000,0.000000,0.707107 +1265,0.707107,0.000000,0.000000,0.707107 +1266,0.707107,0.000000,0.000000,0.707107 +1267,0.707107,0.000000,0.000000,0.707107 +1268,0.707107,0.000000,0.000000,0.707107 +1269,0.707107,0.000000,0.000000,0.707107 +1270,0.707107,0.000000,0.000000,0.707107 +1271,0.707107,0.000000,0.000000,0.707107 +1272,0.707107,0.000000,0.000000,0.707107 +1273,0.707107,0.000000,0.000000,0.707107 +1274,0.707107,0.000000,0.000000,0.707107 +1275,0.707107,0.000000,0.000000,0.707107 +1276,0.707107,0.000000,0.000000,0.707107 +1277,0.707107,0.000000,0.000000,0.707107 +1278,0.707107,0.000000,0.000000,0.707107 +1279,0.707107,0.000000,0.000000,0.707107 +1280,0.707107,0.000000,0.000000,0.707107 +1281,0.707107,0.000000,0.000000,0.707107 +1282,0.707107,0.000000,0.000000,0.707107 +1283,0.707107,0.000000,0.000000,0.707107 +1284,0.707107,0.000000,0.000000,0.707107 +1285,0.707107,0.000000,0.000000,0.707107 +1286,0.707107,0.000000,0.000000,0.707107 +1287,0.707107,0.000000,0.000000,0.707107 +1288,0.707107,0.000000,0.000000,0.707107 +1289,0.707107,0.000000,0.000000,0.707107 +1290,0.707107,0.000000,0.000000,0.707107 +1291,0.707107,0.000000,0.000000,0.707107 +1292,0.707107,0.000000,0.000000,0.707107 +1293,0.707107,0.000000,0.000000,0.707107 +1294,0.707107,0.000000,0.000000,0.707107 +1295,0.707107,0.000000,0.000000,0.707107 +1296,0.707107,0.000000,0.000000,0.707107 +1297,0.707107,0.000000,0.000000,0.707107 +1298,0.707107,0.000000,0.000000,0.707107 +1299,0.707107,0.000000,0.000000,0.707107 +1300,0.707107,0.000000,0.000000,0.707107 +1301,0.707107,0.000000,0.000000,0.707107 +1302,0.707107,0.000000,0.000000,0.707107 +1303,0.707107,0.000000,0.000000,0.707107 +1304,0.707107,0.000000,0.000000,0.707107 +1305,0.707107,0.000000,0.000000,0.707107 +1306,0.707107,0.000000,0.000000,0.707107 +1307,0.707107,0.000000,0.000000,0.707107 +1308,0.707107,0.000000,0.000000,0.707107 +1309,0.707107,0.000000,0.000000,0.707107 +1310,0.707107,0.000000,0.000000,0.707107 +1311,0.707107,0.000000,0.000000,0.707107 +1312,0.707107,0.000000,0.000000,0.707107 +1313,0.707107,0.000000,0.000000,0.707107 +1314,0.707107,0.000000,0.000000,0.707107 +1315,0.707107,0.000000,0.000000,0.707107 +1316,0.707107,0.000000,0.000000,0.707107 +1317,0.707107,0.000000,0.000000,0.707107 +1318,0.707107,0.000000,0.000000,0.707107 +1319,0.707107,0.000000,0.000000,0.707107 +1320,0.707107,0.000000,0.000000,0.707107 +1321,0.707107,0.000000,0.000000,0.707107 +1322,0.707107,0.000000,0.000000,0.707107 +1323,0.707107,0.000000,0.000000,0.707107 +1324,0.707107,0.000000,0.000000,0.707107 +1325,0.707107,0.000000,0.000000,0.707107 +1326,0.707107,0.000000,0.000000,0.707107 +1327,0.707107,0.000000,0.000000,0.707107 +1328,0.707107,0.000000,0.000000,0.707107 +1329,0.707107,0.000000,0.000000,0.707107 +1330,0.707107,0.000000,0.000000,0.707107 +1331,0.707107,0.000000,0.000000,0.707107 +1332,0.707107,0.000000,0.000000,0.707107 +1333,0.707107,0.000000,0.000000,0.707107 +1334,0.707107,0.000000,0.000000,0.707107 +1335,0.707107,0.000000,0.000000,0.707107 +1336,0.707107,0.000000,0.000000,0.707107 +1337,0.707107,0.000000,0.000000,0.707107 +1338,0.707107,0.000000,0.000000,0.707107 +1339,0.707107,0.000000,0.000000,0.707107 +1340,0.707107,0.000000,0.000000,0.707107 +1341,0.707107,0.000000,0.000000,0.707107 +1342,0.707107,0.000000,0.000000,0.707107 +1343,0.707107,0.000000,0.000000,0.707107 +1344,0.707107,0.000000,0.000000,0.707107 +1345,0.707107,0.000000,0.000000,0.707107 +1346,0.707107,0.000000,0.000000,0.707107 +1347,0.707107,0.000000,0.000000,0.707107 +1348,0.707107,0.000000,0.000000,0.707107 +1349,0.707107,0.000000,0.000000,0.707107 +1350,0.707107,0.000000,0.000000,0.707107 +1351,0.707107,0.000000,0.000000,0.707107 +1352,0.707107,0.000000,0.000000,0.707107 +1353,0.707107,0.000000,0.000000,0.707107 +1354,0.707107,0.000000,0.000000,0.707107 +1355,0.707107,0.000000,0.000000,0.707107 +1356,0.707107,0.000000,0.000000,0.707107 +1357,0.707107,0.000000,0.000000,0.707107 +1358,0.707107,0.000000,0.000000,0.707107 +1359,0.707107,0.000000,0.000000,0.707107 +1360,0.707107,0.000000,0.000000,0.707107 +1361,0.707107,0.000000,0.000000,0.707107 +1362,0.707107,0.000000,0.000000,0.707107 +1363,0.707107,0.000000,0.000000,0.707107 +1364,0.707107,0.000000,0.000000,0.707107 +1365,0.707107,0.000000,0.000000,0.707107 +1366,0.707107,0.000000,0.000000,0.707107 +1367,0.707107,0.000000,0.000000,0.707107 +1368,0.707107,0.000000,0.000000,0.707107 +1369,0.707107,0.000000,0.000000,0.707107 +1370,0.707107,0.000000,0.000000,0.707107 +1371,0.707107,0.000000,0.000000,0.707107 +1372,0.707107,0.000000,0.000000,0.707107 +1373,0.707107,0.000000,0.000000,0.707107 +1374,0.707107,0.000000,0.000000,0.707107 +1375,0.707107,0.000000,0.000000,0.707107 +1376,0.707107,0.000000,0.000000,0.707107 +1377,0.707107,0.000000,0.000000,0.707107 +1378,0.707107,0.000000,0.000000,0.707107 +1379,0.707107,0.000000,0.000000,0.707107 +1380,0.707107,0.000000,0.000000,0.707107 +1381,0.707107,0.000000,0.000000,0.707107 +1382,0.707107,0.000000,0.000000,0.707107 +1383,0.707107,0.000000,0.000000,0.707107 +1384,0.707107,0.000000,0.000000,0.707107 +1385,0.707107,0.000000,0.000000,0.707107 +1386,0.707107,0.000000,0.000000,0.707107 +1387,0.707107,0.000000,0.000000,0.707107 +1388,0.707107,0.000000,0.000000,0.707107 +1389,0.707107,0.000000,0.000000,0.707107 +1390,0.707107,0.000000,0.000000,0.707107 +1391,0.707107,0.000000,0.000000,0.707107 +1392,0.707107,0.000000,0.000000,0.707107 +1393,0.707107,0.000000,0.000000,0.707107 +1394,0.707107,0.000000,0.000000,0.707107 +1395,0.707107,0.000000,0.000000,0.707107 +1396,0.707107,0.000000,0.000000,0.707107 +1397,0.707107,0.000000,0.000000,0.707107 +1398,0.707107,0.000000,0.000000,0.707107 +1399,0.707107,0.000000,0.000000,0.707107 +1400,0.707107,0.000000,0.000000,0.707107 +1401,0.707107,0.000000,0.000000,0.707107 +1402,0.707107,0.000000,0.000000,0.707107 +1403,0.707107,0.000000,0.000000,0.707107 +1404,0.707107,0.000000,0.000000,0.707107 +1405,0.707107,0.000000,0.000000,0.707107 +1406,0.707107,0.000000,0.000000,0.707107 +1407,0.707107,0.000000,0.000000,0.707107 +1408,0.707107,0.000000,0.000000,0.707107 +1409,0.707107,0.000000,0.000000,0.707107 +1410,0.707107,0.000000,0.000000,0.707107 +1411,0.707107,0.000000,0.000000,0.707107 +1412,0.707107,0.000000,0.000000,0.707107 +1413,0.707107,0.000000,0.000000,0.707107 +1414,0.707107,0.000000,0.000000,0.707107 +1415,0.707107,0.000000,0.000000,0.707107 +1416,0.707107,0.000000,0.000000,0.707107 +1417,0.707107,0.000000,0.000000,0.707107 +1418,0.707107,0.000000,0.000000,0.707107 +1419,0.707107,0.000000,0.000000,0.707107 +1420,0.707107,0.000000,0.000000,0.707107 +1421,0.707107,0.000000,0.000000,0.707107 +1422,0.707107,0.000000,0.000000,0.707107 +1423,0.707107,0.000000,0.000000,0.707107 +1424,0.707107,0.000000,0.000000,0.707107 +1425,0.707107,0.000000,0.000000,0.707107 +1426,0.707107,0.000000,0.000000,0.707107 +1427,0.707107,0.000000,0.000000,0.707107 +1428,0.707107,0.000000,0.000000,0.707107 +1429,0.707107,0.000000,0.000000,0.707107 +1430,0.707107,0.000000,0.000000,0.707107 +1431,0.707107,0.000000,0.000000,0.707107 +1432,0.707107,0.000000,0.000000,0.707107 +1433,0.707107,0.000000,0.000000,0.707107 +1434,0.707107,0.000000,0.000000,0.707107 +1435,0.707107,0.000000,0.000000,0.707107 +1436,0.707107,0.000000,0.000000,0.707107 +1437,0.707107,0.000000,0.000000,0.707107 +1438,0.707107,0.000000,0.000000,0.707107 +1439,0.707107,0.000000,0.000000,0.707107 +1440,0.707107,0.000000,0.000000,0.707107 +1441,0.707107,0.000000,0.000000,0.707107 +1442,0.707107,0.000000,0.000000,0.707107 +1443,0.707107,0.000000,0.000000,0.707107 +1444,0.707107,0.000000,0.000000,0.707107 +1445,0.707107,0.000000,0.000000,0.707107 +1446,0.707107,0.000000,0.000000,0.707107 +1447,0.707107,0.000000,0.000000,0.707107 +1448,0.707107,0.000000,0.000000,0.707107 +1449,0.707107,0.000000,0.000000,0.707107 +1450,0.707107,0.000000,0.000000,0.707107 +1451,0.707107,0.000000,0.000000,0.707107 +1452,0.707107,0.000000,0.000000,0.707107 +1453,0.707107,0.000000,0.000000,0.707107 +1454,0.707107,0.000000,0.000000,0.707107 +1455,0.707107,0.000000,0.000000,0.707107 +1456,0.707107,0.000000,0.000000,0.707107 +1457,0.707107,0.000000,0.000000,0.707107 +1458,0.707107,0.000000,0.000000,0.707107 +1459,0.707107,0.000000,0.000000,0.707107 +1460,0.707107,0.000000,0.000000,0.707107 +1461,0.707107,0.000000,0.000000,0.707107 +1462,0.707107,0.000000,0.000000,0.707107 +1463,0.707107,0.000000,0.000000,0.707107 +1464,0.707107,0.000000,0.000000,0.707107 +1465,0.707107,0.000000,0.000000,0.707107 +1466,0.707107,0.000000,0.000000,0.707107 +1467,0.707107,0.000000,0.000000,0.707107 +1468,0.707107,0.000000,0.000000,0.707107 +1469,0.707107,0.000000,0.000000,0.707107 +1470,0.707107,0.000000,0.000000,0.707107 +1471,0.707107,0.000000,0.000000,0.707107 +1472,0.707107,0.000000,0.000000,0.707107 +1473,0.707107,0.000000,0.000000,0.707107 +1474,0.707107,0.000000,0.000000,0.707107 +1475,0.707107,0.000000,0.000000,0.707107 +1476,0.707107,0.000000,0.000000,0.707107 +1477,0.707107,0.000000,0.000000,0.707107 +1478,0.707107,0.000000,0.000000,0.707107 +1479,0.707107,0.000000,0.000000,0.707107 +1480,0.707107,0.000000,0.000000,0.707107 +1481,0.707107,0.000000,0.000000,0.707107 +1482,0.707107,0.000000,0.000000,0.707107 +1483,0.707107,0.000000,0.000000,0.707107 +1484,0.707107,0.000000,0.000000,0.707107 +1485,0.707107,0.000000,0.000000,0.707107 +1486,0.707107,0.000000,0.000000,0.707107 +1487,0.707107,0.000000,0.000000,0.707107 +1488,0.707107,0.000000,0.000000,0.707107 +1489,0.707107,0.000000,0.000000,0.707107 +1490,0.707107,0.000000,0.000000,0.707107 +1491,0.707107,0.000000,0.000000,0.707107 +1492,0.707107,0.000000,0.000000,0.707107 +1493,0.707107,0.000000,0.000000,0.707107 +1494,0.707107,0.000000,0.000000,0.707107 +1495,0.707107,0.000000,0.000000,0.707107 +1496,0.707107,0.000000,0.000000,0.707107 +1497,0.707107,0.000000,0.000000,0.707107 +1498,0.707107,0.000000,0.000000,0.707107 +1499,0.707107,0.000000,0.000000,0.707107 +1500,0.707107,0.000000,0.000000,0.707107 +1501,0.707107,0.000000,0.000000,0.707107 +1502,0.707107,0.000000,0.000000,0.707107 +1503,0.707107,0.000000,0.000000,0.707107 +1504,0.707107,0.000000,0.000000,0.707107 +1505,0.707107,0.000000,0.000000,0.707107 +1506,0.707107,0.000000,0.000000,0.707107 +1507,0.707107,0.000000,0.000000,0.707107 +1508,0.707107,0.000000,0.000000,0.707107 +1509,0.707107,0.000000,0.000000,0.707107 +1510,0.707107,0.000000,0.000000,0.707107 +1511,0.707107,0.000000,0.000000,0.707107 +1512,0.707107,0.000000,0.000000,0.707107 +1513,0.707107,0.000000,0.000000,0.707107 +1514,0.707107,0.000000,0.000000,0.707107 +1515,0.707107,0.000000,0.000000,0.707107 +1516,0.707107,0.000000,0.000000,0.707107 +1517,0.707107,0.000000,0.000000,0.707107 +1518,0.707107,0.000000,0.000000,0.707107 +1519,0.707107,0.000000,0.000000,0.707107 +1520,0.707107,0.000000,0.000000,0.707107 +1521,0.707107,0.000000,0.000000,0.707107 +1522,0.707107,0.000000,0.000000,0.707107 +1523,0.707107,0.000000,0.000000,0.707107 +1524,0.707107,0.000000,0.000000,0.707107 +1525,0.707107,0.000000,0.000000,0.707107 +1526,0.707107,0.000000,0.000000,0.707107 +1527,0.707107,0.000000,0.000000,0.707107 +1528,0.707107,0.000000,0.000000,0.707107 +1529,0.707107,0.000000,0.000000,0.707107 +1530,0.707107,0.000000,0.000000,0.707107 +1531,0.707107,0.000000,0.000000,0.707107 +1532,0.707107,0.000000,0.000000,0.707107 +1533,0.707107,0.000000,0.000000,0.707107 +1534,0.707107,0.000000,0.000000,0.707107 +1535,0.707107,0.000000,0.000000,0.707107 +1536,0.707107,0.000000,0.000000,0.707107 +1537,0.707107,0.000000,0.000000,0.707107 +1538,0.707107,0.000000,0.000000,0.707107 +1539,0.707107,0.000000,0.000000,0.707107 +1540,0.707107,0.000000,0.000000,0.707107 +1541,0.707107,0.000000,0.000000,0.707107 +1542,0.707107,0.000000,0.000000,0.707107 +1543,0.707107,0.000000,0.000000,0.707107 +1544,0.707107,0.000000,0.000000,0.707107 +1545,0.707107,0.000000,0.000000,0.707107 +1546,0.707107,0.000000,0.000000,0.707107 +1547,0.707107,0.000000,0.000000,0.707107 +1548,0.707107,0.000000,0.000000,0.707107 +1549,0.707107,0.000000,0.000000,0.707107 +1550,0.707107,0.000000,0.000000,0.707107 +1551,0.707107,0.000000,0.000000,0.707107 +1552,0.707107,0.000000,0.000000,0.707107 +1553,0.707107,0.000000,0.000000,0.707107 +1554,0.707107,0.000000,0.000000,0.707107 +1555,0.707107,0.000000,0.000000,0.707107 +1556,0.707107,0.000000,0.000000,0.707107 +1557,0.707107,0.000000,0.000000,0.707107 +1558,0.707107,0.000000,0.000000,0.707107 +1559,0.707107,0.000000,0.000000,0.707107 +1560,0.707107,0.000000,0.000000,0.707107 +1561,0.707107,0.000000,0.000000,0.707107 +1562,0.707107,0.000000,0.000000,0.707107 +1563,0.707107,0.000000,0.000000,0.707107 +1564,0.707107,0.000000,0.000000,0.707107 +1565,0.707107,0.000000,0.000000,0.707107 +1566,0.707107,0.000000,0.000000,0.707107 +1567,0.707107,0.000000,0.000000,0.707107 +1568,0.707107,0.000000,0.000000,0.707107 +1569,0.707107,0.000000,0.000000,0.707107 +1570,0.707107,0.000000,0.000000,0.707107 +1571,0.707107,0.000000,0.000000,0.707107 +1572,0.707107,0.000000,0.000000,0.707107 +1573,0.707107,0.000000,0.000000,0.707107 +1574,0.707107,0.000000,0.000000,0.707107 +1575,0.707107,0.000000,0.000000,0.707107 +1576,0.707107,0.000000,0.000000,0.707107 +1577,0.707107,0.000000,0.000000,0.707107 +1578,0.707107,0.000000,0.000000,0.707107 +1579,0.707107,0.000000,0.000000,0.707107 +1580,0.707107,0.000000,0.000000,0.707107 +1581,0.707107,0.000000,0.000000,0.707107 +1582,0.707107,0.000000,0.000000,0.707107 +1583,0.707107,0.000000,0.000000,0.707107 +1584,0.707107,0.000000,0.000000,0.707107 +1585,0.707107,0.000000,0.000000,0.707107 +1586,0.707107,0.000000,0.000000,0.707107 +1587,0.707107,0.000000,0.000000,0.707107 +1588,0.707107,0.000000,0.000000,0.707107 +1589,0.707107,0.000000,0.000000,0.707107 +1590,0.707107,0.000000,0.000000,0.707107 +1591,0.707107,0.000000,0.000000,0.707107 +1592,0.707107,0.000000,0.000000,0.707107 +1593,0.707107,0.000000,0.000000,0.707107 +1594,0.707107,0.000000,0.000000,0.707107 +1595,0.707107,0.000000,0.000000,0.707107 +1596,0.707107,0.000000,0.000000,0.707107 +1597,0.707107,0.000000,0.000000,0.707107 +1598,0.707107,0.000000,0.000000,0.707107 +1599,0.707107,0.000000,0.000000,0.707107 +1600,0.707107,0.000000,0.000000,0.707107 +1601,0.707107,0.000000,0.000000,0.707107 +1602,0.707107,0.000000,0.000000,0.707107 +1603,0.707107,0.000000,0.000000,0.707107 +1604,0.707107,0.000000,0.000000,0.707107 +1605,0.707107,0.000000,0.000000,0.707107 +1606,0.707107,0.000000,0.000000,0.707107 +1607,0.707107,0.000000,0.000000,0.707107 +1608,0.707107,0.000000,0.000000,0.707107 +1609,0.707107,0.000000,0.000000,0.707107 +1610,0.707107,0.000000,0.000000,0.707107 +1611,0.707107,0.000000,0.000000,0.707107 +1612,0.707107,0.000000,0.000000,0.707107 +1613,0.707107,0.000000,0.000000,0.707107 +1614,0.707107,0.000000,0.000000,0.707107 +1615,0.707107,0.000000,0.000000,0.707107 +1616,0.707107,0.000000,0.000000,0.707107 +1617,0.707107,0.000000,0.000000,0.707107 +1618,0.707107,0.000000,0.000000,0.707107 +1619,0.707107,0.000000,0.000000,0.707107 +1620,0.707107,0.000000,0.000000,0.707107 +1621,0.707107,0.000000,0.000000,0.707107 +1622,0.707107,0.000000,0.000000,0.707107 +1623,0.707107,0.000000,0.000000,0.707107 +1624,0.707107,0.000000,0.000000,0.707107 +1625,0.707107,0.000000,0.000000,0.707107 +1626,0.707107,0.000000,0.000000,0.707107 +1627,0.707107,0.000000,0.000000,0.707107 +1628,0.707107,0.000000,0.000000,0.707107 +1629,0.707107,0.000000,0.000000,0.707107 +1630,0.707107,0.000000,0.000000,0.707107 +1631,0.707107,0.000000,0.000000,0.707107 +1632,0.707107,0.000000,0.000000,0.707107 +1633,0.707107,0.000000,0.000000,0.707107 +1634,0.707107,0.000000,0.000000,0.707107 +1635,0.707107,0.000000,0.000000,0.707107 +1636,0.707107,0.000000,0.000000,0.707107 +1637,0.707107,0.000000,0.000000,0.707107 +1638,0.707107,0.000000,0.000000,0.707107 +1639,0.707107,0.000000,0.000000,0.707107 +1640,0.707107,0.000000,0.000000,0.707107 +1641,0.707107,0.000000,0.000000,0.707107 +1642,0.707107,0.000000,0.000000,0.707107 +1643,0.707107,0.000000,0.000000,0.707107 +1644,0.707107,0.000000,0.000000,0.707107 +1645,0.707107,0.000000,0.000000,0.707107 +1646,0.707107,0.000000,0.000000,0.707107 +1647,0.707107,0.000000,0.000000,0.707107 +1648,0.707107,0.000000,0.000000,0.707107 +1649,0.707107,0.000000,0.000000,0.707107 +1650,0.707107,0.000000,0.000000,0.707107 +1651,0.707107,0.000000,0.000000,0.707107 +1652,0.707107,0.000000,0.000000,0.707107 +1653,0.707107,0.000000,0.000000,0.707107 +1654,0.707107,0.000000,0.000000,0.707107 +1655,0.707107,0.000000,0.000000,0.707107 +1656,0.707107,0.000000,0.000000,0.707107 +1657,0.707107,0.000000,0.000000,0.707107 +1658,0.707107,0.000000,0.000000,0.707107 +1659,0.707107,0.000000,0.000000,0.707107 +1660,0.707107,0.000000,0.000000,0.707107 +1661,0.707107,0.000000,0.000000,0.707107 +1662,0.707107,0.000000,0.000000,0.707107 +1663,0.707107,0.000000,0.000000,0.707107 +1664,0.707107,0.000000,0.000000,0.707107 +1665,0.707107,0.000000,0.000000,0.707107 +1666,0.707107,0.000000,0.000000,0.707107 +1667,0.707107,0.000000,0.000000,0.707107 +1668,0.707107,0.000000,0.000000,0.707107 +1669,0.707107,0.000000,0.000000,0.707107 +1670,0.707107,0.000000,0.000000,0.707107 +1671,0.707107,0.000000,0.000000,0.707107 +1672,0.707107,0.000000,0.000000,0.707107 +1673,0.707107,0.000000,0.000000,0.707107 +1674,0.707107,0.000000,0.000000,0.707107 +1675,0.707107,0.000000,0.000000,0.707107 +1676,0.707107,0.000000,0.000000,0.707107 +1677,0.707107,0.000000,0.000000,0.707107 +1678,0.707107,0.000000,0.000000,0.707107 +1679,0.707107,0.000000,0.000000,0.707107 +1680,0.707107,0.000000,0.000000,0.707107 +1681,0.707107,0.000000,0.000000,0.707107 +1682,0.707107,0.000000,0.000000,0.707107 +1683,0.707107,0.000000,0.000000,0.707107 +1684,0.707107,0.000000,0.000000,0.707107 +1685,0.707107,0.000000,0.000000,0.707107 +1686,0.707107,0.000000,0.000000,0.707107 +1687,0.707107,0.000000,0.000000,0.707107 +1688,0.707107,0.000000,0.000000,0.707107 +1689,0.707107,0.000000,0.000000,0.707107 +1690,0.707107,0.000000,0.000000,0.707107 +1691,0.707107,0.000000,0.000000,0.707107 +1692,0.707107,0.000000,0.000000,0.707107 +1693,0.707107,0.000000,0.000000,0.707107 +1694,0.707107,0.000000,0.000000,0.707107 +1695,0.707107,0.000000,0.000000,0.707107 +1696,0.707107,0.000000,0.000000,0.707107 +1697,0.707107,0.000000,0.000000,0.707107 +1698,0.707107,0.000000,0.000000,0.707107 +1699,0.707107,0.000000,0.000000,0.707107 +1700,0.707107,0.000000,0.000000,0.707107 +1701,0.707107,0.000000,0.000000,0.707107 +1702,0.707107,0.000000,0.000000,0.707107 +1703,0.707107,0.000000,0.000000,0.707107 +1704,0.707107,0.000000,0.000000,0.707107 +1705,0.707107,0.000000,0.000000,0.707107 +1706,0.707107,0.000000,0.000000,0.707107 +1707,0.707107,0.000000,0.000000,0.707107 +1708,0.707107,0.000000,0.000000,0.707107 +1709,0.707107,0.000000,0.000000,0.707107 +1710,0.707107,0.000000,0.000000,0.707107 +1711,0.707107,0.000000,0.000000,0.707107 +1712,0.707107,0.000000,0.000000,0.707107 +1713,0.707107,0.000000,0.000000,0.707107 +1714,0.707107,0.000000,0.000000,0.707107 +1715,0.707107,0.000000,0.000000,0.707107 +1716,0.707107,0.000000,0.000000,0.707107 +1717,0.707107,0.000000,0.000000,0.707107 +1718,0.707107,0.000000,0.000000,0.707107 +1719,0.707107,0.000000,0.000000,0.707107 +1720,0.707107,0.000000,0.000000,0.707107 +1721,0.707107,0.000000,0.000000,0.707107 +1722,0.707107,0.000000,0.000000,0.707107 +1723,0.707107,0.000000,0.000000,0.707107 +1724,0.707107,0.000000,0.000000,0.707107 +1725,0.707107,0.000000,0.000000,0.707107 +1726,0.707107,0.000000,0.000000,0.707107 +1727,0.707107,0.000000,0.000000,0.707107 +1728,0.707107,0.000000,0.000000,0.707107 +1729,0.707107,0.000000,0.000000,0.707107 +1730,0.707107,0.000000,0.000000,0.707107 +1731,0.707107,0.000000,0.000000,0.707107 +1732,0.707107,0.000000,0.000000,0.707107 +1733,0.707107,0.000000,0.000000,0.707107 +1734,0.707107,0.000000,0.000000,0.707107 +1735,0.707107,0.000000,0.000000,0.707107 +1736,0.707107,0.000000,0.000000,0.707107 +1737,0.707107,0.000000,0.000000,0.707107 +1738,0.707107,0.000000,0.000000,0.707107 +1739,0.707107,0.000000,0.000000,0.707107 +1740,0.707107,0.000000,0.000000,0.707107 +1741,0.707107,0.000000,0.000000,0.707107 +1742,0.707107,0.000000,0.000000,0.707107 +1743,0.707107,0.000000,0.000000,0.707107 +1744,0.707107,0.000000,0.000000,0.707107 +1745,0.707107,0.000000,0.000000,0.707107 +1746,0.707107,0.000000,0.000000,0.707107 +1747,0.707107,0.000000,0.000000,0.707107 +1748,0.707107,0.000000,0.000000,0.707107 +1749,0.707107,0.000000,0.000000,0.707107 +1750,0.707107,0.000000,0.000000,0.707107 +1751,0.707107,0.000000,0.000000,0.707107 +1752,0.707107,0.000000,0.000000,0.707107 +1753,0.707107,0.000000,0.000000,0.707107 +1754,0.707107,0.000000,0.000000,0.707107 +1755,0.707107,0.000000,0.000000,0.707107 +1756,0.707107,0.000000,0.000000,0.707107 +1757,0.707107,0.000000,0.000000,0.707107 +1758,0.707107,0.000000,0.000000,0.707107 +1759,0.707107,0.000000,0.000000,0.707107 +1760,0.707107,0.000000,0.000000,0.707107 +1761,0.707107,0.000000,0.000000,0.707107 +1762,0.707107,0.000000,0.000000,0.707107 +1763,0.707107,0.000000,0.000000,0.707107 +1764,0.707107,0.000000,0.000000,0.707107 +1765,0.707107,0.000000,0.000000,0.707107 +1766,0.707107,0.000000,0.000000,0.707107 +1767,0.707107,0.000000,0.000000,0.707107 +1768,0.707107,0.000000,0.000000,0.707107 +1769,0.707107,0.000000,0.000000,0.707107 +1770,0.707107,0.000000,0.000000,0.707107 +1771,0.707107,0.000000,0.000000,0.707107 +1772,0.707107,0.000000,0.000000,0.707107 +1773,0.707107,0.000000,0.000000,0.707107 +1774,0.707107,0.000000,0.000000,0.707107 +1775,0.707107,0.000000,0.000000,0.707107 +1776,0.707107,0.000000,0.000000,0.707107 +1777,0.707107,0.000000,0.000000,0.707107 +1778,0.707107,0.000000,0.000000,0.707107 +1779,0.707107,0.000000,0.000000,0.707107 +1780,0.707107,0.000000,0.000000,0.707107 +1781,0.707107,0.000000,0.000000,0.707107 +1782,0.707107,0.000000,0.000000,0.707107 +1783,0.707107,0.000000,0.000000,0.707107 +1784,0.707107,0.000000,0.000000,0.707107 +1785,0.707107,0.000000,0.000000,0.707107 +1786,0.707107,0.000000,0.000000,0.707107 +1787,0.707107,0.000000,0.000000,0.707107 +1788,0.707107,0.000000,0.000000,0.707107 +1789,0.707107,0.000000,0.000000,0.707107 +1790,0.707107,0.000000,0.000000,0.707107 +1791,0.707107,0.000000,0.000000,0.707107 +1792,0.707107,0.000000,0.000000,0.707107 +1793,0.707107,0.000000,0.000000,0.707107 +1794,0.707107,0.000000,0.000000,0.707107 +1795,0.707107,0.000000,0.000000,0.707107 +1796,0.707107,0.000000,0.000000,0.707107 +1797,0.707107,0.000000,0.000000,0.707107 +1798,0.707107,0.000000,0.000000,0.707107 +1799,0.707107,0.000000,0.000000,0.707107 +1800,0.707107,0.000000,0.000000,0.707107 +1801,0.707107,0.000000,0.000000,0.707107 +1802,0.707107,0.000000,0.000000,0.707107 +1803,0.707107,0.000000,0.000000,0.707107 +1804,0.707107,0.000000,0.000000,0.707107 +1805,0.707107,0.000000,0.000000,0.707107 +1806,0.707107,0.000000,0.000000,0.707107 +1807,0.707107,0.000000,0.000000,0.707107 +1808,0.707107,0.000000,0.000000,0.707107 +1809,0.707107,0.000000,0.000000,0.707107 +1810,0.707107,0.000000,0.000000,0.707107 +1811,0.707107,0.000000,0.000000,0.707107 +1812,0.707107,0.000000,0.000000,0.707107 +1813,0.707107,0.000000,0.000000,0.707107 +1814,0.707107,0.000000,0.000000,0.707107 +1815,0.707107,0.000000,0.000000,0.707107 +1816,0.707107,0.000000,0.000000,0.707107 +1817,0.707107,0.000000,0.000000,0.707107 +1818,0.707107,0.000000,0.000000,0.707107 +1819,0.707107,0.000000,0.000000,0.707107 +1820,0.707107,0.000000,0.000000,0.707107 +1821,0.707107,0.000000,0.000000,0.707107 +1822,0.707107,0.000000,0.000000,0.707107 +1823,0.707107,0.000000,0.000000,0.707107 +1824,0.707107,0.000000,0.000000,0.707107 +1825,0.707107,0.000000,0.000000,0.707107 +1826,0.707107,0.000000,0.000000,0.707107 +1827,0.707107,0.000000,0.000000,0.707107 +1828,0.707107,0.000000,0.000000,0.707107 +1829,0.707107,0.000000,0.000000,0.707107 +1830,0.707107,0.000000,0.000000,0.707107 +1831,0.707107,0.000000,0.000000,0.707107 +1832,0.707107,0.000000,0.000000,0.707107 +1833,0.707107,0.000000,0.000000,0.707107 +1834,0.707107,0.000000,0.000000,0.707107 +1835,0.707107,0.000000,0.000000,0.707107 +1836,0.707107,0.000000,0.000000,0.707107 +1837,0.707107,0.000000,0.000000,0.707107 +1838,0.707107,0.000000,0.000000,0.707107 +1839,0.707107,0.000000,0.000000,0.707107 +1840,0.707107,0.000000,0.000000,0.707107 +1841,0.707107,0.000000,0.000000,0.707107 +1842,0.707107,0.000000,0.000000,0.707107 +1843,0.707107,0.000000,0.000000,0.707107 +1844,0.707107,0.000000,0.000000,0.707107 +1845,0.707107,0.000000,0.000000,0.707107 +1846,0.707107,0.000000,0.000000,0.707107 +1847,0.707107,0.000000,0.000000,0.707107 +1848,0.707107,0.000000,0.000000,0.707107 +1849,0.707107,0.000000,0.000000,0.707107 +1850,0.707107,0.000000,0.000000,0.707107 +1851,0.707107,0.000000,0.000000,0.707107 +1852,0.707107,0.000000,0.000000,0.707107 +1853,0.707107,0.000000,0.000000,0.707107 +1854,0.707107,0.000000,0.000000,0.707107 +1855,0.707107,0.000000,0.000000,0.707107 +1856,0.707107,0.000000,0.000000,0.707107 +1857,0.707107,0.000000,0.000000,0.707107 +1858,0.707107,0.000000,0.000000,0.707107 +1859,0.707107,0.000000,0.000000,0.707107 +1860,0.707107,0.000000,0.000000,0.707107 +1861,0.707107,0.000000,0.000000,0.707107 +1862,0.707107,0.000000,0.000000,0.707107 +1863,0.707107,0.000000,0.000000,0.707107 +1864,0.707107,0.000000,0.000000,0.707107 +1865,0.707107,0.000000,0.000000,0.707107 +1866,0.707107,0.000000,0.000000,0.707107 +1867,0.707107,0.000000,0.000000,0.707107 +1868,0.707107,0.000000,0.000000,0.707107 +1869,0.707107,0.000000,0.000000,0.707107 +1870,0.707107,0.000000,0.000000,0.707107 +1871,0.707107,0.000000,0.000000,0.707107 +1872,0.707107,0.000000,0.000000,0.707107 +1873,0.707107,0.000000,0.000000,0.707107 +1874,0.707107,0.000000,0.000000,0.707107 +1875,0.707107,0.000000,0.000000,0.707107 +1876,0.707107,0.000000,0.000000,0.707107 +1877,0.707107,0.000000,0.000000,0.707107 +1878,0.707107,0.000000,0.000000,0.707107 +1879,0.707107,0.000000,0.000000,0.707107 +1880,0.707107,0.000000,0.000000,0.707107 +1881,0.707107,0.000000,0.000000,0.707107 +1882,0.707107,0.000000,0.000000,0.707107 +1883,0.707107,0.000000,0.000000,0.707107 +1884,0.707107,0.000000,0.000000,0.707107 +1885,0.707107,0.000000,0.000000,0.707107 +1886,0.707107,0.000000,0.000000,0.707107 +1887,0.707107,0.000000,0.000000,0.707107 +1888,0.707107,0.000000,0.000000,0.707107 +1889,0.707107,0.000000,0.000000,0.707107 +1890,0.707107,0.000000,0.000000,0.707107 +1891,0.707107,0.000000,0.000000,0.707107 +1892,0.707107,0.000000,0.000000,0.707107 +1893,0.707107,0.000000,0.000000,0.707107 +1894,0.707107,0.000000,0.000000,0.707107 +1895,0.707107,0.000000,0.000000,0.707107 +1896,0.707107,0.000000,0.000000,0.707107 +1897,0.707107,0.000000,0.000000,0.707107 +1898,0.707107,0.000000,0.000000,0.707107 +1899,0.707107,0.000000,0.000000,0.707107 +1900,0.707107,0.000000,0.000000,0.707107 +1901,0.707107,0.000000,0.000000,0.707107 +1902,0.707107,0.000000,0.000000,0.707107 +1903,0.707107,0.000000,0.000000,0.707107 +1904,0.707107,0.000000,0.000000,0.707107 +1905,0.707107,0.000000,0.000000,0.707107 +1906,0.707107,0.000000,0.000000,0.707107 +1907,0.707107,0.000000,0.000000,0.707107 +1908,0.707107,0.000000,0.000000,0.707107 +1909,0.707107,0.000000,0.000000,0.707107 +1910,0.707107,0.000000,0.000000,0.707107 +1911,0.707107,0.000000,0.000000,0.707107 +1912,0.707107,0.000000,0.000000,0.707107 +1913,0.707107,0.000000,0.000000,0.707107 +1914,0.707107,0.000000,0.000000,0.707107 +1915,0.707107,0.000000,0.000000,0.707107 +1916,0.707107,0.000000,0.000000,0.707107 +1917,0.707107,0.000000,0.000000,0.707107 +1918,0.707107,0.000000,0.000000,0.707107 +1919,0.707107,0.000000,0.000000,0.707107 +1920,0.707107,0.000000,0.000000,0.707107 +1921,0.707107,0.000000,0.000000,0.707107 +1922,0.707107,0.000000,0.000000,0.707107 +1923,0.707107,0.000000,0.000000,0.707107 +1924,0.707107,0.000000,0.000000,0.707107 +1925,0.707107,0.000000,0.000000,0.707107 +1926,0.707107,0.000000,0.000000,0.707107 +1927,0.707107,0.000000,0.000000,0.707107 +1928,0.707107,0.000000,0.000000,0.707107 +1929,0.707107,0.000000,0.000000,0.707107 +1930,0.707107,0.000000,0.000000,0.707107 +1931,0.707107,0.000000,0.000000,0.707107 +1932,0.707107,0.000000,0.000000,0.707107 +1933,0.707107,0.000000,0.000000,0.707107 +1934,0.707107,0.000000,0.000000,0.707107 +1935,0.707107,0.000000,0.000000,0.707107 +1936,0.707107,0.000000,0.000000,0.707107 +1937,0.707107,0.000000,0.000000,0.707107 +1938,0.707107,0.000000,0.000000,0.707107 +1939,0.707107,0.000000,0.000000,0.707107 +1940,0.707107,0.000000,0.000000,0.707107 +1941,0.707107,0.000000,0.000000,0.707107 +1942,0.707107,0.000000,0.000000,0.707107 +1943,0.707107,0.000000,0.000000,0.707107 +1944,0.707107,0.000000,0.000000,0.707107 +1945,0.707107,0.000000,0.000000,0.707107 +1946,0.707107,0.000000,0.000000,0.707107 +1947,0.707107,0.000000,0.000000,0.707107 +1948,0.707107,0.000000,0.000000,0.707107 +1949,0.707107,0.000000,0.000000,0.707107 +1950,0.707107,0.000000,0.000000,0.707107 +1951,0.707107,0.000000,0.000000,0.707107 +1952,0.707107,0.000000,0.000000,0.707107 +1953,0.707107,0.000000,0.000000,0.707107 +1954,0.707107,0.000000,0.000000,0.707107 +1955,0.707107,0.000000,0.000000,0.707107 +1956,0.707107,0.000000,0.000000,0.707107 +1957,0.707107,0.000000,0.000000,0.707107 +1958,0.707107,0.000000,0.000000,0.707107 +1959,0.707107,0.000000,0.000000,0.707107 +1960,0.707107,0.000000,0.000000,0.707107 +1961,0.707107,0.000000,0.000000,0.707107 +1962,0.707107,0.000000,0.000000,0.707107 +1963,0.707107,0.000000,0.000000,0.707107 +1964,0.707107,0.000000,0.000000,0.707107 +1965,0.707107,0.000000,0.000000,0.707107 +1966,0.707107,0.000000,0.000000,0.707107 +1967,0.707107,0.000000,0.000000,0.707107 +1968,0.707107,0.000000,0.000000,0.707107 +1969,0.707107,0.000000,0.000000,0.707107 +1970,0.707107,0.000000,0.000000,0.707107 +1971,0.707107,0.000000,0.000000,0.707107 +1972,0.707107,0.000000,0.000000,0.707107 +1973,0.707107,0.000000,0.000000,0.707107 +1974,0.707107,0.000000,0.000000,0.707107 +1975,0.707107,0.000000,0.000000,0.707107 +1976,0.707107,0.000000,0.000000,0.707107 +1977,0.707107,0.000000,0.000000,0.707107 +1978,0.707107,0.000000,0.000000,0.707107 +1979,0.707107,0.000000,0.000000,0.707107 +1980,0.707107,0.000000,0.000000,0.707107 +1981,0.707107,0.000000,0.000000,0.707107 +1982,0.707107,0.000000,0.000000,0.707107 +1983,0.707107,0.000000,0.000000,0.707107 +1984,0.707107,0.000000,0.000000,0.707107 +1985,0.707107,0.000000,0.000000,0.707107 +1986,0.707107,0.000000,0.000000,0.707107 +1987,0.707107,0.000000,0.000000,0.707107 +1988,0.707107,0.000000,0.000000,0.707107 +1989,0.707107,0.000000,0.000000,0.707107 +1990,0.707107,0.000000,0.000000,0.707107 +1991,0.707107,0.000000,0.000000,0.707107 +1992,0.707107,0.000000,0.000000,0.707107 +1993,0.707107,0.000000,0.000000,0.707107 +1994,0.707107,0.000000,0.000000,0.707107 +1995,0.707107,0.000000,0.000000,0.707107 +1996,0.707107,0.000000,0.000000,0.707107 +1997,0.707107,0.000000,0.000000,0.707107 +1998,0.707107,0.000000,0.000000,0.707107 +1999,0.707107,0.000000,0.000000,0.707107 +2000,0.707107,0.000000,0.000000,0.707107 +2001,0.707107,0.000000,0.000000,0.707107 +2002,0.707107,0.000000,0.000000,0.707107 +2003,0.707107,0.000000,0.000000,0.707107 +2004,0.707107,0.000000,0.000000,0.707107 +2005,0.707107,0.000000,0.000000,0.707107 +2006,0.707107,0.000000,0.000000,0.707107 +2007,0.707107,0.000000,0.000000,0.707107 +2008,0.707107,0.000000,0.000000,0.707107 +2009,0.707107,0.000000,0.000000,0.707107 +2010,0.707107,0.000000,0.000000,0.707107 +2011,0.707107,0.000000,0.000000,0.707107 +2012,0.707107,0.000000,0.000000,0.707107 +2013,0.707107,0.000000,0.000000,0.707107 +2014,0.707107,0.000000,0.000000,0.707107 +2015,0.707107,0.000000,0.000000,0.707107 +2016,0.707107,0.000000,0.000000,0.707107 +2017,0.707107,0.000000,0.000000,0.707107 +2018,0.707107,0.000000,0.000000,0.707107 +2019,0.707107,0.000000,0.000000,0.707107 +2020,0.707107,0.000000,0.000000,0.707107 +2021,0.707107,0.000000,0.000000,0.707107 +2022,0.707107,0.000000,0.000000,0.707107 +2023,0.707107,0.000000,0.000000,0.707107 +2024,0.707107,0.000000,0.000000,0.707107 +2025,0.707107,0.000000,0.000000,0.707107 +2026,0.707107,0.000000,0.000000,0.707107 +2027,0.707107,0.000000,0.000000,0.707107 +2028,0.707107,0.000000,0.000000,0.707107 +2029,0.707107,0.000000,0.000000,0.707107 +2030,0.707107,0.000000,0.000000,0.707107 +2031,0.707107,0.000000,0.000000,0.707107 +2032,0.707107,0.000000,0.000000,0.707107 +2033,0.707107,0.000000,0.000000,0.707107 +2034,0.707107,0.000000,0.000000,0.707107 +2035,0.707107,0.000000,0.000000,0.707107 +2036,0.707107,0.000000,0.000000,0.707107 +2037,0.707107,0.000000,0.000000,0.707107 +2038,0.707107,0.000000,0.000000,0.707107 +2039,0.707107,0.000000,0.000000,0.707107 +2040,0.707107,0.000000,0.000000,0.707107 +2041,0.707107,0.000000,0.000000,0.707107 +2042,0.707107,0.000000,0.000000,0.707107 +2043,0.707107,0.000000,0.000000,0.707107 +2044,0.707107,0.000000,0.000000,0.707107 +2045,0.707107,0.000000,0.000000,0.707107 +2046,0.707107,0.000000,0.000000,0.707107 +2047,0.707107,0.000000,0.000000,0.707107 +2048,0.707107,0.000000,0.000000,0.707107 +2049,0.707107,0.000000,0.000000,0.707107 +2050,0.707107,0.000000,0.000000,0.707107 +2051,0.707107,0.000000,0.000000,0.707107 +2052,0.707107,0.000000,0.000000,0.707107 +2053,0.707107,0.000000,0.000000,0.707107 +2054,0.707107,0.000000,0.000000,0.707107 +2055,0.707107,0.000000,0.000000,0.707107 +2056,0.707107,0.000000,0.000000,0.707107 +2057,0.707107,0.000000,0.000000,0.707107 +2058,0.707107,0.000000,0.000000,0.707107 +2059,0.707107,0.000000,0.000000,0.707107 +2060,0.707107,0.000000,0.000000,0.707107 +2061,0.707107,0.000000,0.000000,0.707107 +2062,0.707107,0.000000,0.000000,0.707107 +2063,0.707107,0.000000,0.000000,0.707107 +2064,0.707107,0.000000,0.000000,0.707107 +2065,0.707107,0.000000,0.000000,0.707107 +2066,0.707107,0.000000,0.000000,0.707107 +2067,0.707107,0.000000,0.000000,0.707107 +2068,0.707107,0.000000,0.000000,0.707107 +2069,0.707107,0.000000,0.000000,0.707107 +2070,0.707107,0.000000,0.000000,0.707107 +2071,0.707107,0.000000,0.000000,0.707107 +2072,0.707107,0.000000,0.000000,0.707107 +2073,0.707107,0.000000,0.000000,0.707107 +2074,0.707107,0.000000,0.000000,0.707107 +2075,0.707107,0.000000,0.000000,0.707107 +2076,0.707107,0.000000,0.000000,0.707107 +2077,0.707107,0.000000,0.000000,0.707107 +2078,0.707107,0.000000,0.000000,0.707107 +2079,0.707107,0.000000,0.000000,0.707107 +2080,0.707107,0.000000,0.000000,0.707107 +2081,0.707107,0.000000,0.000000,0.707107 +2082,0.707107,0.000000,0.000000,0.707107 +2083,0.707107,0.000000,0.000000,0.707107 +2084,0.707107,0.000000,0.000000,0.707107 +2085,0.707107,0.000000,0.000000,0.707107 +2086,0.707107,0.000000,0.000000,0.707107 +2087,0.707107,0.000000,0.000000,0.707107 +2088,0.707107,0.000000,0.000000,0.707107 +2089,0.707107,0.000000,0.000000,0.707107 +2090,0.707107,0.000000,0.000000,0.707107 +2091,0.707107,0.000000,0.000000,0.707107 +2092,0.707107,0.000000,0.000000,0.707107 +2093,0.707107,0.000000,0.000000,0.707107 +2094,0.707107,0.000000,0.000000,0.707107 +2095,0.707107,0.000000,0.000000,0.707107 +2096,0.707107,0.000000,0.000000,0.707107 +2097,0.707107,0.000000,0.000000,0.707107 +2098,0.707107,0.000000,0.000000,0.707107 +2099,0.707107,0.000000,0.000000,0.707107 +2100,0.707107,0.000000,0.000000,0.707107 +2101,0.707107,0.000000,0.000000,0.707107 +2102,0.707107,0.000000,0.000000,0.707107 +2103,0.707107,0.000000,0.000000,0.707107 +2104,0.707107,0.000000,0.000000,0.707107 +2105,0.707107,0.000000,0.000000,0.707107 +2106,0.707107,0.000000,0.000000,0.707107 +2107,0.707107,0.000000,0.000000,0.707107 +2108,0.707107,0.000000,0.000000,0.707107 +2109,0.707107,0.000000,0.000000,0.707107 +2110,0.707107,0.000000,0.000000,0.707107 +2111,0.707107,0.000000,0.000000,0.707107 +2112,0.707107,0.000000,0.000000,0.707107 +2113,0.707107,0.000000,0.000000,0.707107 +2114,0.707107,0.000000,0.000000,0.707107 +2115,0.707107,0.000000,0.000000,0.707107 +2116,0.707107,0.000000,0.000000,0.707107 +2117,0.707107,0.000000,0.000000,0.707107 +2118,0.707107,0.000000,0.000000,0.707107 +2119,0.707107,0.000000,0.000000,0.707107 +2120,0.707107,0.000000,0.000000,0.707107 +2121,0.707107,0.000000,0.000000,0.707107 +2122,0.707107,0.000000,0.000000,0.707107 +2123,0.707107,0.000000,0.000000,0.707107 +2124,0.707107,0.000000,0.000000,0.707107 +2125,0.707107,0.000000,0.000000,0.707107 +2126,0.707107,0.000000,0.000000,0.707107 +2127,0.707107,0.000000,0.000000,0.707107 +2128,0.707107,0.000000,0.000000,0.707107 +2129,0.707107,0.000000,0.000000,0.707107 +2130,0.707107,0.000000,0.000000,0.707107 +2131,0.707107,0.000000,0.000000,0.707107 +2132,0.707107,0.000000,0.000000,0.707107 +2133,0.707107,0.000000,0.000000,0.707107 +2134,0.707107,0.000000,0.000000,0.707107 +2135,0.707107,0.000000,0.000000,0.707107 +2136,0.707107,0.000000,0.000000,0.707107 +2137,0.707107,0.000000,0.000000,0.707107 +2138,0.707107,0.000000,0.000000,0.707107 +2139,0.707107,0.000000,0.000000,0.707107 +2140,0.707107,0.000000,0.000000,0.707107 +2141,0.707107,0.000000,0.000000,0.707107 +2142,0.707107,0.000000,0.000000,0.707107 +2143,0.707107,0.000000,0.000000,0.707107 +2144,0.707107,0.000000,0.000000,0.707107 +2145,0.707107,0.000000,0.000000,0.707107 +2146,0.707107,0.000000,0.000000,0.707107 +2147,0.707107,0.000000,0.000000,0.707107 +2148,0.707107,0.000000,0.000000,0.707107 +2149,0.707107,0.000000,0.000000,0.707107 +2150,0.707107,0.000000,0.000000,0.707107 +2151,0.707107,0.000000,0.000000,0.707107 +2152,0.707107,0.000000,0.000000,0.707107 +2153,0.707107,0.000000,0.000000,0.707107 +2154,0.707107,0.000000,0.000000,0.707107 +2155,0.707107,0.000000,0.000000,0.707107 +2156,0.707107,0.000000,0.000000,0.707107 +2157,0.707107,0.000000,0.000000,0.707107 +2158,0.707107,0.000000,0.000000,0.707107 +2159,0.707107,0.000000,0.000000,0.707107 +2160,0.707107,0.000000,0.000000,0.707107 +2161,0.707107,0.000000,0.000000,0.707107 +2162,0.707107,0.000000,0.000000,0.707107 +2163,0.707107,0.000000,0.000000,0.707107 +2164,0.707107,0.000000,0.000000,0.707107 +2165,0.707107,0.000000,0.000000,0.707107 +2166,0.707107,0.000000,0.000000,0.707107 +2167,0.707107,0.000000,0.000000,0.707107 +2168,0.707107,0.000000,0.000000,0.707107 +2169,0.707107,0.000000,0.000000,0.707107 +2170,0.707107,0.000000,0.000000,0.707107 +2171,0.707107,0.000000,0.000000,0.707107 +2172,0.707107,0.000000,0.000000,0.707107 +2173,0.707107,0.000000,0.000000,0.707107 +2174,0.707107,0.000000,0.000000,0.707107 +2175,0.707107,0.000000,0.000000,0.707107 +2176,0.707107,0.000000,0.000000,0.707107 +2177,0.707107,0.000000,0.000000,0.707107 +2178,0.707107,0.000000,0.000000,0.707107 +2179,0.707107,0.000000,0.000000,0.707107 +2180,0.707107,0.000000,0.000000,0.707107 +2181,0.707107,0.000000,0.000000,0.707107 +2182,0.707107,0.000000,0.000000,0.707107 +2183,0.707107,0.000000,0.000000,0.707107 +2184,0.707107,0.000000,0.000000,0.707107 +2185,0.707107,0.000000,0.000000,0.707107 +2186,0.707107,0.000000,0.000000,0.707107 +2187,0.707107,0.000000,0.000000,0.707107 +2188,0.707107,0.000000,0.000000,0.707107 +2189,0.707107,0.000000,0.000000,0.707107 +2190,0.707107,0.000000,0.000000,0.707107 +2191,0.707107,0.000000,0.000000,0.707107 +2192,0.707107,0.000000,0.000000,0.707107 +2193,0.707107,0.000000,0.000000,0.707107 +2194,0.707107,0.000000,0.000000,0.707107 +2195,0.707107,0.000000,0.000000,0.707107 +2196,0.707107,0.000000,0.000000,0.707107 +2197,0.707107,0.000000,0.000000,0.707107 +2198,0.707107,0.000000,0.000000,0.707107 +2199,0.707107,0.000000,0.000000,0.707107 +2200,0.707107,0.000000,0.000000,0.707107 +2201,0.707107,0.000000,0.000000,0.707107 +2202,0.707107,0.000000,0.000000,0.707107 +2203,0.707107,0.000000,0.000000,0.707107 +2204,0.707107,0.000000,0.000000,0.707107 +2205,0.707107,0.000000,0.000000,0.707107 +2206,0.707107,0.000000,0.000000,0.707107 +2207,0.707107,0.000000,0.000000,0.707107 +2208,0.707107,0.000000,0.000000,0.707107 +2209,0.707107,0.000000,0.000000,0.707107 +2210,0.707107,0.000000,0.000000,0.707107 +2211,0.707107,0.000000,0.000000,0.707107 +2212,0.707107,0.000000,0.000000,0.707107 +2213,0.707107,0.000000,0.000000,0.707107 +2214,0.707107,0.000000,0.000000,0.707107 +2215,0.707107,0.000000,0.000000,0.707107 +2216,0.707107,0.000000,0.000000,0.707107 +2217,0.707107,0.000000,0.000000,0.707107 +2218,0.707107,0.000000,0.000000,0.707107 +2219,0.707107,0.000000,0.000000,0.707107 +2220,0.707107,0.000000,0.000000,0.707107 +2221,0.707107,0.000000,0.000000,0.707107 +2222,0.707107,0.000000,0.000000,0.707107 +2223,0.707107,0.000000,0.000000,0.707107 +2224,0.707107,0.000000,0.000000,0.707107 +2225,0.707107,0.000000,0.000000,0.707107 +2226,0.707107,0.000000,0.000000,0.707107 +2227,0.707107,0.000000,0.000000,0.707107 +2228,0.707107,0.000000,0.000000,0.707107 +2229,0.707107,0.000000,0.000000,0.707107 +2230,0.707107,0.000000,0.000000,0.707107 +2231,0.707107,0.000000,0.000000,0.707107 +2232,0.707107,0.000000,0.000000,0.707107 +2233,0.707107,0.000000,0.000000,0.707107 +2234,0.707107,0.000000,0.000000,0.707107 +2235,0.707107,0.000000,0.000000,0.707107 +2236,0.707107,0.000000,0.000000,0.707107 +2237,0.707107,0.000000,0.000000,0.707107 +2238,0.707107,0.000000,0.000000,0.707107 +2239,0.707107,0.000000,0.000000,0.707107 +2240,0.707107,0.000000,0.000000,0.707107 +2241,0.707107,0.000000,0.000000,0.707107 +2242,0.707107,0.000000,0.000000,0.707107 +2243,0.707107,0.000000,0.000000,0.707107 +2244,0.707107,0.000000,0.000000,0.707107 +2245,0.707107,0.000000,0.000000,0.707107 +2246,0.707107,0.000000,0.000000,0.707107 +2247,0.707107,0.000000,0.000000,0.707107 +2248,0.707107,0.000000,0.000000,0.707107 +2249,0.707107,0.000000,0.000000,0.707107 +2250,0.707107,0.000000,0.000000,0.707107 +2251,0.707107,0.000000,0.000000,0.707107 +2252,0.707107,0.000000,0.000000,0.707107 +2253,0.707107,0.000000,0.000000,0.707107 +2254,0.707107,0.000000,0.000000,0.707107 +2255,0.707107,0.000000,0.000000,0.707107 +2256,0.707107,0.000000,0.000000,0.707107 +2257,0.707107,0.000000,0.000000,0.707107 +2258,0.707107,0.000000,0.000000,0.707107 +2259,0.707107,0.000000,0.000000,0.707107 +2260,0.707107,0.000000,0.000000,0.707107 +2261,0.707107,0.000000,0.000000,0.707107 +2262,0.707107,0.000000,0.000000,0.707107 +2263,0.707107,0.000000,0.000000,0.707107 +2264,0.707107,0.000000,0.000000,0.707107 +2265,0.707107,0.000000,0.000000,0.707107 +2266,0.707107,0.000000,0.000000,0.707107 +2267,0.707107,0.000000,0.000000,0.707107 +2268,0.707107,0.000000,0.000000,0.707107 +2269,0.707107,0.000000,0.000000,0.707107 +2270,0.707107,0.000000,0.000000,0.707107 +2271,0.707107,0.000000,0.000000,0.707107 +2272,0.707107,0.000000,0.000000,0.707107 +2273,0.707107,0.000000,0.000000,0.707107 +2274,0.707107,0.000000,0.000000,0.707107 +2275,0.707107,0.000000,0.000000,0.707107 +2276,0.707107,0.000000,0.000000,0.707107 +2277,0.707107,0.000000,0.000000,0.707107 +2278,0.707107,0.000000,0.000000,0.707107 +2279,0.707107,0.000000,0.000000,0.707107 +2280,0.707107,0.000000,0.000000,0.707107 +2281,0.707107,0.000000,0.000000,0.707107 +2282,0.707107,0.000000,0.000000,0.707107 +2283,0.707107,0.000000,0.000000,0.707107 +2284,0.707107,0.000000,0.000000,0.707107 +2285,0.707107,0.000000,0.000000,0.707107 +2286,0.707107,0.000000,0.000000,0.707107 +2287,0.707107,0.000000,0.000000,0.707107 +2288,0.707107,0.000000,0.000000,0.707107 +2289,0.707107,0.000000,0.000000,0.707107 +2290,0.707107,0.000000,0.000000,0.707107 +2291,0.707107,0.000000,0.000000,0.707107 +2292,0.707107,0.000000,0.000000,0.707107 +2293,0.707107,0.000000,0.000000,0.707107 +2294,0.707107,0.000000,0.000000,0.707107 +2295,0.707107,0.000000,0.000000,0.707107 +2296,0.707107,0.000000,0.000000,0.707107 +2297,0.707107,0.000000,0.000000,0.707107 +2298,0.707107,0.000000,0.000000,0.707107 +2299,0.707107,0.000000,0.000000,0.707107 +2300,0.707107,0.000000,0.000000,0.707107 +2301,0.707107,0.000000,0.000000,0.707107 +2302,0.707107,0.000000,0.000000,0.707107 +2303,0.707107,0.000000,0.000000,0.707107 +2304,0.707107,0.000000,0.000000,0.707107 +2305,0.707107,0.000000,0.000000,0.707107 +2306,0.707107,0.000000,0.000000,0.707107 +2307,0.707107,0.000000,0.000000,0.707107 +2308,0.707107,0.000000,0.000000,0.707107 +2309,0.707107,0.000000,0.000000,0.707107 +2310,0.707107,0.000000,0.000000,0.707107 +2311,0.707107,0.000000,0.000000,0.707107 +2312,0.707107,0.000000,0.000000,0.707107 +2313,0.707107,0.000000,0.000000,0.707107 +2314,0.707107,0.000000,0.000000,0.707107 +2315,0.707107,0.000000,0.000000,0.707107 +2316,0.707107,0.000000,0.000000,0.707107 +2317,0.707107,0.000000,0.000000,0.707107 +2318,0.707107,0.000000,0.000000,0.707107 +2319,0.707107,0.000000,0.000000,0.707107 +2320,0.707107,0.000000,0.000000,0.707107 +2321,0.707107,0.000000,0.000000,0.707107 +2322,0.707107,0.000000,0.000000,0.707107 +2323,0.707107,0.000000,0.000000,0.707107 +2324,0.707107,0.000000,0.000000,0.707107 +2325,0.707107,0.000000,0.000000,0.707107 +2326,0.707107,0.000000,0.000000,0.707107 +2327,0.707107,0.000000,0.000000,0.707107 +2328,0.707107,0.000000,0.000000,0.707107 +2329,0.707107,0.000000,0.000000,0.707107 +2330,0.707107,0.000000,0.000000,0.707107 +2331,0.707107,0.000000,0.000000,0.707107 +2332,0.707107,0.000000,0.000000,0.707107 +2333,0.707107,0.000000,0.000000,0.707107 +2334,0.707107,0.000000,0.000000,0.707107 +2335,0.707107,0.000000,0.000000,0.707107 +2336,0.707107,0.000000,0.000000,0.707107 +2337,0.707107,0.000000,0.000000,0.707107 +2338,0.707107,0.000000,0.000000,0.707107 +2339,0.707107,0.000000,0.000000,0.707107 +2340,0.707107,0.000000,0.000000,0.707107 +2341,0.707107,0.000000,0.000000,0.707107 +2342,0.707107,0.000000,0.000000,0.707107 +2343,0.707107,0.000000,0.000000,0.707107 +2344,0.707107,0.000000,0.000000,0.707107 +2345,0.707107,0.000000,0.000000,0.707107 +2346,0.707107,0.000000,0.000000,0.707107 +2347,0.707107,0.000000,0.000000,0.707107 +2348,0.707107,0.000000,0.000000,0.707107 +2349,0.707107,0.000000,0.000000,0.707107 +2350,0.707107,0.000000,0.000000,0.707107 +2351,0.707107,0.000000,0.000000,0.707107 +2352,0.707107,0.000000,0.000000,0.707107 +2353,0.707107,0.000000,0.000000,0.707107 +2354,0.707107,0.000000,0.000000,0.707107 +2355,0.707107,0.000000,0.000000,0.707107 +2356,0.707107,0.000000,0.000000,0.707107 +2357,0.707107,0.000000,0.000000,0.707107 +2358,0.707107,0.000000,0.000000,0.707107 +2359,0.707107,0.000000,0.000000,0.707107 +2360,0.707107,0.000000,0.000000,0.707107 +2361,0.707107,0.000000,0.000000,0.707107 +2362,0.707107,0.000000,0.000000,0.707107 +2363,0.707107,0.000000,0.000000,0.707107 +2364,0.707107,0.000000,0.000000,0.707107 +2365,0.707107,0.000000,0.000000,0.707107 +2366,0.707107,0.000000,0.000000,0.707107 +2367,0.707107,0.000000,0.000000,0.707107 +2368,0.707107,0.000000,0.000000,0.707107 +2369,0.707107,0.000000,0.000000,0.707107 +2370,0.707107,0.000000,0.000000,0.707107 +2371,0.707107,0.000000,0.000000,0.707107 +2372,0.707107,0.000000,0.000000,0.707107 +2373,0.707107,0.000000,0.000000,0.707107 +2374,0.707107,0.000000,0.000000,0.707107 +2375,0.707107,0.000000,0.000000,0.707107 +2376,0.707107,0.000000,0.000000,0.707107 +2377,0.707107,0.000000,0.000000,0.707107 +2378,0.707107,0.000000,0.000000,0.707107 +2379,0.707107,0.000000,0.000000,0.707107 +2380,0.707107,0.000000,0.000000,0.707107 +2381,0.707107,0.000000,0.000000,0.707107 +2382,0.707107,0.000000,0.000000,0.707107 +2383,0.707107,0.000000,0.000000,0.707107 +2384,0.707107,0.000000,0.000000,0.707107 +2385,0.707107,0.000000,0.000000,0.707107 +2386,0.707107,0.000000,0.000000,0.707107 +2387,0.707107,0.000000,0.000000,0.707107 +2388,0.707107,0.000000,0.000000,0.707107 +2389,0.707107,0.000000,0.000000,0.707107 +2390,0.707107,0.000000,0.000000,0.707107 +2391,0.707107,0.000000,0.000000,0.707107 +2392,0.707107,0.000000,0.000000,0.707107 +2393,0.707107,0.000000,0.000000,0.707107 +2394,0.707107,0.000000,0.000000,0.707107 +2395,0.707107,0.000000,0.000000,0.707107 +2396,0.707107,0.000000,0.000000,0.707107 +2397,0.707107,0.000000,0.000000,0.707107 +2398,0.707107,0.000000,0.000000,0.707107 +2399,0.707107,0.000000,0.000000,0.707107 +2400,0.707107,0.000000,0.000000,0.707107 +2401,0.707107,0.000000,0.000000,0.707107 +2402,0.707107,0.000000,0.000000,0.707107 +2403,0.707107,0.000000,0.000000,0.707107 +2404,0.707107,0.000000,0.000000,0.707107 +2405,0.707107,0.000000,0.000000,0.707107 +2406,0.707107,0.000000,0.000000,0.707107 +2407,0.707107,0.000000,0.000000,0.707107 +2408,0.707107,0.000000,0.000000,0.707107 +2409,0.707107,0.000000,0.000000,0.707107 +2410,0.707107,0.000000,0.000000,0.707107 +2411,0.707107,0.000000,0.000000,0.707107 +2412,0.707107,0.000000,0.000000,0.707107 +2413,0.707107,0.000000,0.000000,0.707107 +2414,0.707107,0.000000,0.000000,0.707107 +2415,0.707107,0.000000,0.000000,0.707107 +2416,0.707107,0.000000,0.000000,0.707107 +2417,0.707107,0.000000,0.000000,0.707107 +2418,0.707107,0.000000,0.000000,0.707107 +2419,0.707107,0.000000,0.000000,0.707107 +2420,0.707107,0.000000,0.000000,0.707107 +2421,0.707107,0.000000,0.000000,0.707107 +2422,0.707107,0.000000,0.000000,0.707107 +2423,0.707107,0.000000,0.000000,0.707107 +2424,0.707107,0.000000,0.000000,0.707107 +2425,0.707107,0.000000,0.000000,0.707107 +2426,0.707107,0.000000,0.000000,0.707107 +2427,0.707107,0.000000,0.000000,0.707107 +2428,0.707107,0.000000,0.000000,0.707107 +2429,0.707107,0.000000,0.000000,0.707107 +2430,0.707107,0.000000,0.000000,0.707107 +2431,0.707107,0.000000,0.000000,0.707107 +2432,0.707107,0.000000,0.000000,0.707107 +2433,0.707107,0.000000,0.000000,0.707107 +2434,0.707107,0.000000,0.000000,0.707107 +2435,0.707107,0.000000,0.000000,0.707107 +2436,0.707107,0.000000,0.000000,0.707107 +2437,0.707107,0.000000,0.000000,0.707107 +2438,0.707107,0.000000,0.000000,0.707107 +2439,0.707107,0.000000,0.000000,0.707107 +2440,0.707107,0.000000,0.000000,0.707107 +2441,0.707107,0.000000,0.000000,0.707107 +2442,0.707107,0.000000,0.000000,0.707107 +2443,0.707107,0.000000,0.000000,0.707107 +2444,0.707107,0.000000,0.000000,0.707107 +2445,0.707107,0.000000,0.000000,0.707107 +2446,0.707107,0.000000,0.000000,0.707107 +2447,0.707107,0.000000,0.000000,0.707107 +2448,0.707107,0.000000,0.000000,0.707107 +2449,0.707107,0.000000,0.000000,0.707107 +2450,0.707107,0.000000,0.000000,0.707107 +2451,0.707107,0.000000,0.000000,0.707107 +2452,0.707107,0.000000,0.000000,0.707107 +2453,0.707107,0.000000,0.000000,0.707107 +2454,0.707107,0.000000,0.000000,0.707107 +2455,0.707107,0.000000,0.000000,0.707107 +2456,0.707107,0.000000,0.000000,0.707107 +2457,0.707107,0.000000,0.000000,0.707107 +2458,0.707107,0.000000,0.000000,0.707107 +2459,0.707107,0.000000,0.000000,0.707107 +2460,0.707107,0.000000,0.000000,0.707107 +2461,0.707107,0.000000,0.000000,0.707107 +2462,0.707107,0.000000,0.000000,0.707107 +2463,0.707107,0.000000,0.000000,0.707107 +2464,0.707107,0.000000,0.000000,0.707107 +2465,0.707107,0.000000,0.000000,0.707107 +2466,0.707107,0.000000,0.000000,0.707107 +2467,0.707107,0.000000,0.000000,0.707107 +2468,0.707107,0.000000,0.000000,0.707107 +2469,0.707107,0.000000,0.000000,0.707107 +2470,0.707107,0.000000,0.000000,0.707107 +2471,0.707107,0.000000,0.000000,0.707107 +2472,0.707107,0.000000,0.000000,0.707107 +2473,0.707107,0.000000,0.000000,0.707107 +2474,0.707107,0.000000,0.000000,0.707107 +2475,0.707107,0.000000,0.000000,0.707107 +2476,0.707107,0.000000,0.000000,0.707107 +2477,0.707107,0.000000,0.000000,0.707107 +2478,0.707107,0.000000,0.000000,0.707107 +2479,0.707107,0.000000,0.000000,0.707107 +2480,0.707107,0.000000,0.000000,0.707107 +2481,0.707107,0.000000,0.000000,0.707107 +2482,0.707107,0.000000,0.000000,0.707107 +2483,0.707107,0.000000,0.000000,0.707107 +2484,0.707107,0.000000,0.000000,0.707107 +2485,0.707107,0.000000,0.000000,0.707107 +2486,0.707107,0.000000,0.000000,0.707107 +2487,0.707107,0.000000,0.000000,0.707107 +2488,0.707107,0.000000,0.000000,0.707107 +2489,0.707107,0.000000,0.000000,0.707107 +2490,0.707107,0.000000,0.000000,0.707107 +2491,0.707107,0.000000,0.000000,0.707107 +2492,0.707107,0.000000,0.000000,0.707107 +2493,0.707107,0.000000,0.000000,0.707107 +2494,0.707107,0.000000,0.000000,0.707107 +2495,0.707107,0.000000,0.000000,0.707107 +2496,0.707107,0.000000,0.000000,0.707107 +2497,0.707107,0.000000,0.000000,0.707107 +2498,0.707107,0.000000,0.000000,0.707107 +2499,0.707107,0.000000,0.000000,0.707107 +2500,0.707107,0.000000,0.000000,0.707107 +2501,0.707107,0.000000,0.000000,0.707107 +2502,0.707107,0.000000,0.000000,0.707107 +2503,0.707107,0.000000,0.000000,0.707107 +2504,0.707107,0.000000,0.000000,0.707107 +2505,0.707107,0.000000,0.000000,0.707107 +2506,0.707107,0.000000,0.000000,0.707107 +2507,0.707107,0.000000,0.000000,0.707107 +2508,0.707107,0.000000,0.000000,0.707107 +2509,0.707107,0.000000,0.000000,0.707107 +2510,0.707107,0.000000,0.000000,0.707107 +2511,0.707107,0.000000,0.000000,0.707107 +2512,0.707107,0.000000,0.000000,0.707107 +2513,0.707107,0.000000,0.000000,0.707107 +2514,0.707107,0.000000,0.000000,0.707107 +2515,0.707107,0.000000,0.000000,0.707107 +2516,0.707107,0.000000,0.000000,0.707107 +2517,0.707107,0.000000,0.000000,0.707107 +2518,0.707107,0.000000,0.000000,0.707107 +2519,0.707107,0.000000,0.000000,0.707107 +2520,0.707107,0.000000,0.000000,0.707107 +2521,0.707107,0.000000,0.000000,0.707107 +2522,0.707107,0.000000,0.000000,0.707107 +2523,0.707107,0.000000,0.000000,0.707107 +2524,0.707107,0.000000,0.000000,0.707107 +2525,0.707107,0.000000,0.000000,0.707107 +2526,0.707107,0.000000,0.000000,0.707107 +2527,0.707107,0.000000,0.000000,0.707107 +2528,0.707107,0.000000,0.000000,0.707107 +2529,0.707107,0.000000,0.000000,0.707107 +2530,0.707107,0.000000,0.000000,0.707107 +2531,0.707107,0.000000,0.000000,0.707107 +2532,0.707107,0.000000,0.000000,0.707107 +2533,0.707107,0.000000,0.000000,0.707107 +2534,0.707107,0.000000,0.000000,0.707107 +2535,0.707107,0.000000,0.000000,0.707107 +2536,0.707107,0.000000,0.000000,0.707107 +2537,0.707107,0.000000,0.000000,0.707107 +2538,0.707107,0.000000,0.000000,0.707107 +2539,0.707107,0.000000,0.000000,0.707107 +2540,0.707107,0.000000,0.000000,0.707107 +2541,0.707107,0.000000,0.000000,0.707107 +2542,0.707107,0.000000,0.000000,0.707107 +2543,0.707107,0.000000,0.000000,0.707107 +2544,0.707107,0.000000,0.000000,0.707107 +2545,0.707107,0.000000,0.000000,0.707107 +2546,0.707107,0.000000,0.000000,0.707107 +2547,0.707107,0.000000,0.000000,0.707107 +2548,0.707107,0.000000,0.000000,0.707107 +2549,0.707107,0.000000,0.000000,0.707107 +2550,0.707107,0.000000,0.000000,0.707107 +2551,0.707107,0.000000,0.000000,0.707107 +2552,0.707107,0.000000,0.000000,0.707107 +2553,0.707107,0.000000,0.000000,0.707107 +2554,0.707107,0.000000,0.000000,0.707107 +2555,0.707107,0.000000,0.000000,0.707107 +2556,0.707107,0.000000,0.000000,0.707107 +2557,0.707107,0.000000,0.000000,0.707107 +2558,0.707107,0.000000,0.000000,0.707107 +2559,0.707107,0.000000,0.000000,0.707107 +2560,0.707107,0.000000,0.000000,0.707107 +2561,0.707107,0.000000,0.000000,0.707107 +2562,0.707107,0.000000,0.000000,0.707107 +2563,0.707107,0.000000,0.000000,0.707107 +2564,0.707107,0.000000,0.000000,0.707107 +2565,0.707107,0.000000,0.000000,0.707107 +2566,0.707107,0.000000,0.000000,0.707107 +2567,0.707107,0.000000,0.000000,0.707107 +2568,0.707107,0.000000,0.000000,0.707107 +2569,0.707107,0.000000,0.000000,0.707107 +2570,0.707107,0.000000,0.000000,0.707107 +2571,0.707107,0.000000,0.000000,0.707107 +2572,0.707107,0.000000,0.000000,0.707107 +2573,0.707107,0.000000,0.000000,0.707107 +2574,0.707107,0.000000,0.000000,0.707107 +2575,0.707107,0.000000,0.000000,0.707107 +2576,0.707107,0.000000,0.000000,0.707107 +2577,0.707107,0.000000,0.000000,0.707107 +2578,0.707107,0.000000,0.000000,0.707107 +2579,0.707107,0.000000,0.000000,0.707107 +2580,0.707107,0.000000,0.000000,0.707107 +2581,0.707107,0.000000,0.000000,0.707107 +2582,0.707107,0.000000,0.000000,0.707107 +2583,0.707107,0.000000,0.000000,0.707107 +2584,0.707107,0.000000,0.000000,0.707107 +2585,0.707107,0.000000,0.000000,0.707107 +2586,0.707107,0.000000,0.000000,0.707107 +2587,0.707107,0.000000,0.000000,0.707107 +2588,0.707107,0.000000,0.000000,0.707107 +2589,0.707107,0.000000,0.000000,0.707107 +2590,0.707107,0.000000,0.000000,0.707107 +2591,0.707107,0.000000,0.000000,0.707107 +2592,0.707107,0.000000,0.000000,0.707107 +2593,0.707107,0.000000,0.000000,0.707107 +2594,0.707107,0.000000,0.000000,0.707107 +2595,0.707107,0.000000,0.000000,0.707107 +2596,0.707107,0.000000,0.000000,0.707107 +2597,0.707107,0.000000,0.000000,0.707107 +2598,0.707107,0.000000,0.000000,0.707107 +2599,0.707107,0.000000,0.000000,0.707107 +2600,0.707107,0.000000,0.000000,0.707107 +2601,0.707107,0.000000,0.000000,0.707107 +2602,0.707107,0.000000,0.000000,0.707107 +2603,0.707107,0.000000,0.000000,0.707107 +2604,0.707107,0.000000,0.000000,0.707107 +2605,0.707107,0.000000,0.000000,0.707107 +2606,0.707107,0.000000,0.000000,0.707107 +2607,0.707107,0.000000,0.000000,0.707107 +2608,0.707107,0.000000,0.000000,0.707107 +2609,0.707107,0.000000,0.000000,0.707107 +2610,0.707107,0.000000,0.000000,0.707107 +2611,0.707107,0.000000,0.000000,0.707107 +2612,0.707107,0.000000,0.000000,0.707107 +2613,0.707107,0.000000,0.000000,0.707107 +2614,0.707107,0.000000,0.000000,0.707107 +2615,0.707107,0.000000,0.000000,0.707107 +2616,0.707107,0.000000,0.000000,0.707107 +2617,0.707107,0.000000,0.000000,0.707107 +2618,0.707107,0.000000,0.000000,0.707107 +2619,0.707107,0.000000,0.000000,0.707107 +2620,0.707107,0.000000,0.000000,0.707107 +2621,0.707107,0.000000,0.000000,0.707107 +2622,0.707107,0.000000,0.000000,0.707107 +2623,0.707107,0.000000,0.000000,0.707107 +2624,0.707107,0.000000,0.000000,0.707107 +2625,0.707107,0.000000,0.000000,0.707107 +2626,0.707107,0.000000,0.000000,0.707107 +2627,0.707107,0.000000,0.000000,0.707107 +2628,0.707107,0.000000,0.000000,0.707107 +2629,0.707107,0.000000,0.000000,0.707107 +2630,0.707107,0.000000,0.000000,0.707107 +2631,0.707107,0.000000,0.000000,0.707107 +2632,0.707107,0.000000,0.000000,0.707107 +2633,0.707107,0.000000,0.000000,0.707107 +2634,0.707107,0.000000,0.000000,0.707107 +2635,0.707107,0.000000,0.000000,0.707107 +2636,0.707107,0.000000,0.000000,0.707107 +2637,0.707107,0.000000,0.000000,0.707107 +2638,0.707107,0.000000,0.000000,0.707107 +2639,0.707107,0.000000,0.000000,0.707107 +2640,0.707107,0.000000,0.000000,0.707107 +2641,0.707107,0.000000,0.000000,0.707107 +2642,0.707107,0.000000,0.000000,0.707107 +2643,0.707107,0.000000,0.000000,0.707107 +2644,0.707107,0.000000,0.000000,0.707107 +2645,0.707107,0.000000,0.000000,0.707107 +2646,0.707107,0.000000,0.000000,0.707107 +2647,0.707107,0.000000,0.000000,0.707107 +2648,0.707107,0.000000,0.000000,0.707107 +2649,0.707107,0.000000,0.000000,0.707107 +2650,0.707107,0.000000,0.000000,0.707107 +2651,0.707107,0.000000,0.000000,0.707107 +2652,0.707107,0.000000,0.000000,0.707107 +2653,0.707107,0.000000,0.000000,0.707107 +2654,0.707107,0.000000,0.000000,0.707107 +2655,0.707107,0.000000,0.000000,0.707107 +2656,0.707107,0.000000,0.000000,0.707107 +2657,0.707107,0.000000,0.000000,0.707107 +2658,0.707107,0.000000,0.000000,0.707107 +2659,0.707107,0.000000,0.000000,0.707107 +2660,0.707107,0.000000,0.000000,0.707107 +2661,0.707107,0.000000,0.000000,0.707107 +2662,0.707107,0.000000,0.000000,0.707107 +2663,0.707107,0.000000,0.000000,0.707107 +2664,0.707107,0.000000,0.000000,0.707107 +2665,0.707107,0.000000,0.000000,0.707107 +2666,0.707107,0.000000,0.000000,0.707107 +2667,0.707107,0.000000,0.000000,0.707107 +2668,0.707107,0.000000,0.000000,0.707107 +2669,0.707107,0.000000,0.000000,0.707107 +2670,0.707107,0.000000,0.000000,0.707107 +2671,0.707107,0.000000,0.000000,0.707107 +2672,0.707107,0.000000,0.000000,0.707107 +2673,0.707107,0.000000,0.000000,0.707107 +2674,0.707107,0.000000,0.000000,0.707107 +2675,0.707107,0.000000,0.000000,0.707107 +2676,0.707107,0.000000,0.000000,0.707107 +2677,0.707107,0.000000,0.000000,0.707107 +2678,0.707107,0.000000,0.000000,0.707107 +2679,0.707107,0.000000,0.000000,0.707107 +2680,0.707107,0.000000,0.000000,0.707107 +2681,0.707107,0.000000,0.000000,0.707107 +2682,0.707107,0.000000,0.000000,0.707107 +2683,0.707107,0.000000,0.000000,0.707107 +2684,0.707107,0.000000,0.000000,0.707107 +2685,0.707107,0.000000,0.000000,0.707107 +2686,0.707107,0.000000,0.000000,0.707107 +2687,0.707107,0.000000,0.000000,0.707107 +2688,0.707107,0.000000,0.000000,0.707107 +2689,0.707107,0.000000,0.000000,0.707107 +2690,0.707107,0.000000,0.000000,0.707107 +2691,0.707107,0.000000,0.000000,0.707107 +2692,0.707107,0.000000,0.000000,0.707107 +2693,0.707107,0.000000,0.000000,0.707107 +2694,0.707107,0.000000,0.000000,0.707107 +2695,0.707107,0.000000,0.000000,0.707107 +2696,0.707107,0.000000,0.000000,0.707107 +2697,0.707107,0.000000,0.000000,0.707107 +2698,0.707107,0.000000,0.000000,0.707107 +2699,0.707107,0.000000,0.000000,0.707107 +2700,0.707107,0.000000,0.000000,0.707107 +2701,0.707107,0.000000,0.000000,0.707107 +2702,0.707107,0.000000,0.000000,0.707107 +2703,0.707107,0.000000,0.000000,0.707107 +2704,0.707107,0.000000,0.000000,0.707107 +2705,0.707107,0.000000,0.000000,0.707107 +2706,0.707107,0.000000,0.000000,0.707107 +2707,0.707107,0.000000,0.000000,0.707107 +2708,0.707107,0.000000,0.000000,0.707107 +2709,0.707107,0.000000,0.000000,0.707107 +2710,0.707107,0.000000,0.000000,0.707107 +2711,0.707107,0.000000,0.000000,0.707107 +2712,0.707107,0.000000,0.000000,0.707107 +2713,0.707107,0.000000,0.000000,0.707107 +2714,0.707107,0.000000,0.000000,0.707107 +2715,0.707107,0.000000,0.000000,0.707107 +2716,0.707107,0.000000,0.000000,0.707107 +2717,0.707107,0.000000,0.000000,0.707107 +2718,0.707107,0.000000,0.000000,0.707107 +2719,0.707107,0.000000,0.000000,0.707107 +2720,0.707107,0.000000,0.000000,0.707107 +2721,0.707107,0.000000,0.000000,0.707107 +2722,0.707107,0.000000,0.000000,0.707107 +2723,0.707107,0.000000,0.000000,0.707107 +2724,0.707107,0.000000,0.000000,0.707107 +2725,0.707107,0.000000,0.000000,0.707107 +2726,0.707107,0.000000,0.000000,0.707107 +2727,0.707107,0.000000,0.000000,0.707107 +2728,0.707107,0.000000,0.000000,0.707107 +2729,0.707107,0.000000,0.000000,0.707107 +2730,0.707107,0.000000,0.000000,0.707107 +2731,0.707107,0.000000,0.000000,0.707107 +2732,0.707107,0.000000,0.000000,0.707107 +2733,0.707107,0.000000,0.000000,0.707107 +2734,0.707107,0.000000,0.000000,0.707107 +2735,0.707107,0.000000,0.000000,0.707107 +2736,0.707107,0.000000,0.000000,0.707107 +2737,0.707107,0.000000,0.000000,0.707107 +2738,0.707107,0.000000,0.000000,0.707107 +2739,0.707107,0.000000,0.000000,0.707107 +2740,0.707107,0.000000,0.000000,0.707107 +2741,0.707107,0.000000,0.000000,0.707107 +2742,0.707107,0.000000,0.000000,0.707107 +2743,0.707107,0.000000,0.000000,0.707107 +2744,0.707107,0.000000,0.000000,0.707107 +2745,0.707107,0.000000,0.000000,0.707107 +2746,0.707107,0.000000,0.000000,0.707107 +2747,0.707107,0.000000,0.000000,0.707107 +2748,0.707107,0.000000,0.000000,0.707107 +2749,0.707107,0.000000,0.000000,0.707107 +2750,0.707107,0.000000,0.000000,0.707107 +2751,0.707107,0.000000,0.000000,0.707107 +2752,0.707107,0.000000,0.000000,0.707107 +2753,0.707107,0.000000,0.000000,0.707107 +2754,0.707107,0.000000,0.000000,0.707107 +2755,0.707107,0.000000,0.000000,0.707107 +2756,0.707107,0.000000,0.000000,0.707107 +2757,0.707107,0.000000,0.000000,0.707107 +2758,0.707107,0.000000,0.000000,0.707107 +2759,0.707107,0.000000,0.000000,0.707107 +2760,0.707107,0.000000,0.000000,0.707107 +2761,0.707107,0.000000,0.000000,0.707107 +2762,0.707107,0.000000,0.000000,0.707107 +2763,0.707107,0.000000,0.000000,0.707107 +2764,0.707107,0.000000,0.000000,0.707107 +2765,0.707107,0.000000,0.000000,0.707107 +2766,0.707107,0.000000,0.000000,0.707107 +2767,0.707107,0.000000,0.000000,0.707107 +2768,0.707107,0.000000,0.000000,0.707107 +2769,0.707107,0.000000,0.000000,0.707107 +2770,0.707107,0.000000,0.000000,0.707107 +2771,0.707107,0.000000,0.000000,0.707107 +2772,0.707107,0.000000,0.000000,0.707107 +2773,0.707107,0.000000,0.000000,0.707107 +2774,0.707107,0.000000,0.000000,0.707107 +2775,0.707107,0.000000,0.000000,0.707107 +2776,0.707107,0.000000,0.000000,0.707107 +2777,0.707107,0.000000,0.000000,0.707107 +2778,0.707107,0.000000,0.000000,0.707107 +2779,0.707107,0.000000,0.000000,0.707107 +2780,0.707107,0.000000,0.000000,0.707107 +2781,0.707107,0.000000,0.000000,0.707107 +2782,0.707107,0.000000,0.000000,0.707107 +2783,0.707107,0.000000,0.000000,0.707107 +2784,0.707107,0.000000,0.000000,0.707107 +2785,0.707107,0.000000,0.000000,0.707107 +2786,0.707107,0.000000,0.000000,0.707107 +2787,0.707107,0.000000,0.000000,0.707107 +2788,0.707107,0.000000,0.000000,0.707107 +2789,0.707107,0.000000,0.000000,0.707107 +2790,0.707107,0.000000,0.000000,0.707107 +2791,0.707107,0.000000,0.000000,0.707107 +2792,0.707107,0.000000,0.000000,0.707107 +2793,0.707107,0.000000,0.000000,0.707107 +2794,0.707107,0.000000,0.000000,0.707107 +2795,0.707107,0.000000,0.000000,0.707107 +2796,0.707107,0.000000,0.000000,0.707107 +2797,0.707107,0.000000,0.000000,0.707107 +2798,0.707107,0.000000,0.000000,0.707107 +2799,0.707107,0.000000,0.000000,0.707107 +2800,0.707107,0.000000,0.000000,0.707107 +2801,0.707107,0.000000,0.000000,0.707107 +2802,0.707107,0.000000,0.000000,0.707107 +2803,0.707107,0.000000,0.000000,0.707107 +2804,0.707107,0.000000,0.000000,0.707107 +2805,0.707107,0.000000,0.000000,0.707107 +2806,0.707107,0.000000,0.000000,0.707107 +2807,0.707107,0.000000,0.000000,0.707107 +2808,0.707107,0.000000,0.000000,0.707107 +2809,0.707107,0.000000,0.000000,0.707107 +2810,0.707107,0.000000,0.000000,0.707107 +2811,0.707107,0.000000,0.000000,0.707107 +2812,0.707107,0.000000,0.000000,0.707107 +2813,0.707107,0.000000,0.000000,0.707107 +2814,0.707107,0.000000,0.000000,0.707107 +2815,0.707107,0.000000,0.000000,0.707107 +2816,0.707107,0.000000,0.000000,0.707107 +2817,0.707107,0.000000,0.000000,0.707107 +2818,0.707107,0.000000,0.000000,0.707107 +2819,0.707107,0.000000,0.000000,0.707107 +2820,0.707107,0.000000,0.000000,0.707107 +2821,0.707107,0.000000,0.000000,0.707107 +2822,0.707107,0.000000,0.000000,0.707107 +2823,0.707107,0.000000,0.000000,0.707107 +2824,0.707107,0.000000,0.000000,0.707107 +2825,0.707107,0.000000,0.000000,0.707107 +2826,0.707107,0.000000,0.000000,0.707107 +2827,0.707107,0.000000,0.000000,0.707107 +2828,0.707107,0.000000,0.000000,0.707107 +2829,0.707107,0.000000,0.000000,0.707107 +2830,0.707107,0.000000,0.000000,0.707107 +2831,0.707107,0.000000,0.000000,0.707107 +2832,0.707107,0.000000,0.000000,0.707107 +2833,0.707107,0.000000,0.000000,0.707107 +2834,0.707107,0.000000,0.000000,0.707107 +2835,0.707107,0.000000,0.000000,0.707107 +2836,0.707107,0.000000,0.000000,0.707107 +2837,0.707107,0.000000,0.000000,0.707107 +2838,0.707107,0.000000,0.000000,0.707107 +2839,0.707107,0.000000,0.000000,0.707107 +2840,0.707107,0.000000,0.000000,0.707107 +2841,0.707107,0.000000,0.000000,0.707107 +2842,0.707107,0.000000,0.000000,0.707107 +2843,0.707107,0.000000,0.000000,0.707107 +2844,0.707107,0.000000,0.000000,0.707107 +2845,0.707107,0.000000,0.000000,0.707107 +2846,0.707107,0.000000,0.000000,0.707107 +2847,0.707107,0.000000,0.000000,0.707107 +2848,0.707107,0.000000,0.000000,0.707107 +2849,0.707107,0.000000,0.000000,0.707107 +2850,0.707107,0.000000,0.000000,0.707107 +2851,0.707107,0.000000,0.000000,0.707107 +2852,0.707107,0.000000,0.000000,0.707107 +2853,0.707107,0.000000,0.000000,0.707107 +2854,0.707107,0.000000,0.000000,0.707107 +2855,0.707107,0.000000,0.000000,0.707107 +2856,0.707107,0.000000,0.000000,0.707107 +2857,0.707107,0.000000,0.000000,0.707107 +2858,0.707107,0.000000,0.000000,0.707107 +2859,0.707107,0.000000,0.000000,0.707107 +2860,0.707107,0.000000,0.000000,0.707107 +2861,0.707107,0.000000,0.000000,0.707107 +2862,0.707107,0.000000,0.000000,0.707107 +2863,0.707107,0.000000,0.000000,0.707107 +2864,0.707107,0.000000,0.000000,0.707107 +2865,0.707107,0.000000,0.000000,0.707107 +2866,0.707107,0.000000,0.000000,0.707107 +2867,0.707107,0.000000,0.000000,0.707107 +2868,0.707107,0.000000,0.000000,0.707107 +2869,0.707107,0.000000,0.000000,0.707107 +2870,0.707107,0.000000,0.000000,0.707107 +2871,0.707107,0.000000,0.000000,0.707107 +2872,0.707107,0.000000,0.000000,0.707107 +2873,0.707107,0.000000,0.000000,0.707107 +2874,0.707107,0.000000,0.000000,0.707107 +2875,0.707107,0.000000,0.000000,0.707107 +2876,0.707107,0.000000,0.000000,0.707107 +2877,0.707107,0.000000,0.000000,0.707107 +2878,0.707107,0.000000,0.000000,0.707107 +2879,0.707107,0.000000,0.000000,0.707107 +2880,0.707107,0.000000,0.000000,0.707107 +2881,0.707107,0.000000,0.000000,0.707107 +2882,0.707107,0.000000,0.000000,0.707107 +2883,0.707107,0.000000,0.000000,0.707107 +2884,0.707107,0.000000,0.000000,0.707107 +2885,0.707107,0.000000,0.000000,0.707107 +2886,0.707107,0.000000,0.000000,0.707107 +2887,0.707107,0.000000,0.000000,0.707107 +2888,0.707107,0.000000,0.000000,0.707107 +2889,0.707107,0.000000,0.000000,0.707107 +2890,0.707107,0.000000,0.000000,0.707107 +2891,0.707107,0.000000,0.000000,0.707107 +2892,0.707107,0.000000,0.000000,0.707107 +2893,0.707107,0.000000,0.000000,0.707107 +2894,0.707107,0.000000,0.000000,0.707107 +2895,0.707107,0.000000,0.000000,0.707107 +2896,0.707107,0.000000,0.000000,0.707107 +2897,0.707107,0.000000,0.000000,0.707107 +2898,0.707107,0.000000,0.000000,0.707107 +2899,0.707107,0.000000,0.000000,0.707107 +2900,0.707107,0.000000,0.000000,0.707107 +2901,0.707107,0.000000,0.000000,0.707107 +2902,0.707107,0.000000,0.000000,0.707107 +2903,0.707107,0.000000,0.000000,0.707107 +2904,0.707107,0.000000,0.000000,0.707107 +2905,0.707107,0.000000,0.000000,0.707107 +2906,0.707107,0.000000,0.000000,0.707107 +2907,0.707107,0.000000,0.000000,0.707107 +2908,0.707107,0.000000,0.000000,0.707107 +2909,0.707107,0.000000,0.000000,0.707107 +2910,0.707107,0.000000,0.000000,0.707107 +2911,0.707107,0.000000,0.000000,0.707107 +2912,0.707107,0.000000,0.000000,0.707107 +2913,0.707107,0.000000,0.000000,0.707107 +2914,0.707107,0.000000,0.000000,0.707107 +2915,0.707107,0.000000,0.000000,0.707107 +2916,0.707107,0.000000,0.000000,0.707107 +2917,0.707107,0.000000,0.000000,0.707107 +2918,0.707107,0.000000,0.000000,0.707107 +2919,0.707107,0.000000,0.000000,0.707107 +2920,0.707107,0.000000,0.000000,0.707107 +2921,0.707107,0.000000,0.000000,0.707107 +2922,0.707107,0.000000,0.000000,0.707107 +2923,0.707107,0.000000,0.000000,0.707107 +2924,0.707107,0.000000,0.000000,0.707107 +2925,0.707107,0.000000,0.000000,0.707107 +2926,0.707107,0.000000,0.000000,0.707107 +2927,0.707107,0.000000,0.000000,0.707107 +2928,0.707107,0.000000,0.000000,0.707107 +2929,0.707107,0.000000,0.000000,0.707107 +2930,0.707107,0.000000,0.000000,0.707107 +2931,0.707107,0.000000,0.000000,0.707107 +2932,0.707107,0.000000,0.000000,0.707107 +2933,0.707107,0.000000,0.000000,0.707107 +2934,0.707107,0.000000,0.000000,0.707107 +2935,0.707107,0.000000,0.000000,0.707107 +2936,0.707107,0.000000,0.000000,0.707107 +2937,0.707107,0.000000,0.000000,0.707107 +2938,0.707107,0.000000,0.000000,0.707107 +2939,0.707107,0.000000,0.000000,0.707107 +2940,0.707107,0.000000,0.000000,0.707107 +2941,0.707107,0.000000,0.000000,0.707107 +2942,0.707107,0.000000,0.000000,0.707107 +2943,0.707107,0.000000,0.000000,0.707107 +2944,0.707107,0.000000,0.000000,0.707107 +2945,0.707107,0.000000,0.000000,0.707107 +2946,0.707107,0.000000,0.000000,0.707107 +2947,0.707107,0.000000,0.000000,0.707107 +2948,0.707107,0.000000,0.000000,0.707107 +2949,0.707107,0.000000,0.000000,0.707107 +2950,0.707107,0.000000,0.000000,0.707107 +2951,0.707107,0.000000,0.000000,0.707107 +2952,0.707107,0.000000,0.000000,0.707107 +2953,0.707107,0.000000,0.000000,0.707107 +2954,0.707107,0.000000,0.000000,0.707107 +2955,0.707107,0.000000,0.000000,0.707107 +2956,0.707107,0.000000,0.000000,0.707107 +2957,0.707107,0.000000,0.000000,0.707107 +2958,0.707107,0.000000,0.000000,0.707107 +2959,0.707107,0.000000,0.000000,0.707107 +2960,0.707107,0.000000,0.000000,0.707107 +2961,0.707107,0.000000,0.000000,0.707107 +2962,0.707107,0.000000,0.000000,0.707107 +2963,0.707107,0.000000,0.000000,0.707107 +2964,0.707107,0.000000,0.000000,0.707107 +2965,0.707107,0.000000,0.000000,0.707107 +2966,0.707107,0.000000,0.000000,0.707107 +2967,0.707107,0.000000,0.000000,0.707107 +2968,0.707107,0.000000,0.000000,0.707107 +2969,0.707107,0.000000,0.000000,0.707107 +2970,0.707107,0.000000,0.000000,0.707107 +2971,0.707107,0.000000,0.000000,0.707107 +2972,0.707107,0.000000,0.000000,0.707107 +2973,0.707107,0.000000,0.000000,0.707107 +2974,0.707107,0.000000,0.000000,0.707107 +2975,0.707107,0.000000,0.000000,0.707107 +2976,0.707107,0.000000,0.000000,0.707107 +2977,0.707107,0.000000,0.000000,0.707107 +2978,0.707107,0.000000,0.000000,0.707107 +2979,0.707107,0.000000,0.000000,0.707107 +2980,0.707107,0.000000,0.000000,0.707107 +2981,0.707107,0.000000,0.000000,0.707107 +2982,0.707107,0.000000,0.000000,0.707107 +2983,0.707107,0.000000,0.000000,0.707107 +2984,0.707107,0.000000,0.000000,0.707107 +2985,0.707107,0.000000,0.000000,0.707107 +2986,0.707107,0.000000,0.000000,0.707107 +2987,0.707107,0.000000,0.000000,0.707107 +2988,0.707107,0.000000,0.000000,0.707107 +2989,0.707107,0.000000,0.000000,0.707107 +2990,0.707107,0.000000,0.000000,0.707107 +2991,0.707107,0.000000,0.000000,0.707107 +2992,0.707107,0.000000,0.000000,0.707107 +2993,0.707107,0.000000,0.000000,0.707107 +2994,0.707107,0.000000,0.000000,0.707107 +2995,0.707107,0.000000,0.000000,0.707107 +2996,0.707107,0.000000,0.000000,0.707107 +2997,0.707107,0.000000,0.000000,0.707107 +2998,0.707107,0.000000,0.000000,0.707107 +2999,0.707107,0.000000,0.000000,0.707107 +3000,0.707107,0.000000,0.000000,0.707107 +3001,0.707107,0.000000,0.000000,0.707107 +3002,0.707107,0.000000,0.000000,0.707107 +3003,0.707107,0.000000,0.000000,0.707107 +3004,0.707107,0.000000,0.000000,0.707107 +3005,0.707107,0.000000,0.000000,0.707107 +3006,0.707107,0.000000,0.000000,0.707107 +3007,0.707107,0.000000,0.000000,0.707107 +3008,0.707107,0.000000,0.000000,0.707107 +3009,0.707107,0.000000,0.000000,0.707107 +3010,0.707107,0.000000,0.000000,0.707107 +3011,0.707107,0.000000,0.000000,0.707107 +3012,0.707107,0.000000,0.000000,0.707107 +3013,0.707107,0.000000,0.000000,0.707107 +3014,0.707107,0.000000,0.000000,0.707107 +3015,0.707107,0.000000,0.000000,0.707107 +3016,0.707107,0.000000,0.000000,0.707107 +3017,0.707107,0.000000,0.000000,0.707107 +3018,0.707107,0.000000,0.000000,0.707107 +3019,0.707107,0.000000,0.000000,0.707107 +3020,0.707107,0.000000,0.000000,0.707107 +3021,0.707107,0.000000,0.000000,0.707107 +3022,0.707107,0.000000,0.000000,0.707107 +3023,0.707107,0.000000,0.000000,0.707107 +3024,0.707107,0.000000,0.000000,0.707107 +3025,0.707107,0.000000,0.000000,0.707107 +3026,0.707107,0.000000,0.000000,0.707107 +3027,0.707107,0.000000,0.000000,0.707107 +3028,0.707107,0.000000,0.000000,0.707107 +3029,0.707107,0.000000,0.000000,0.707107 +3030,0.707107,0.000000,0.000000,0.707107 +3031,0.707107,0.000000,0.000000,0.707107 +3032,0.707107,0.000000,0.000000,0.707107 +3033,0.707107,0.000000,0.000000,0.707107 +3034,0.707107,0.000000,0.000000,0.707107 +3035,0.707107,0.000000,0.000000,0.707107 +3036,0.707107,0.000000,0.000000,0.707107 +3037,0.707107,0.000000,0.000000,0.707107 +3038,0.707107,0.000000,0.000000,0.707107 +3039,0.707107,0.000000,0.000000,0.707107 +3040,0.707107,0.000000,0.000000,0.707107 +3041,0.707107,0.000000,0.000000,0.707107 +3042,0.707107,0.000000,0.000000,0.707107 +3043,0.707107,0.000000,0.000000,0.707107 +3044,0.707107,0.000000,0.000000,0.707107 +3045,0.707107,0.000000,0.000000,0.707107 +3046,0.707107,0.000000,0.000000,0.707107 +3047,0.707107,0.000000,0.000000,0.707107 +3048,0.707107,0.000000,0.000000,0.707107 +3049,0.707107,0.000000,0.000000,0.707107 +3050,0.707107,0.000000,0.000000,0.707107 +3051,0.707107,0.000000,0.000000,0.707107 +3052,0.707107,0.000000,0.000000,0.707107 +3053,0.707107,0.000000,0.000000,0.707107 +3054,0.707107,0.000000,0.000000,0.707107 +3055,0.707107,0.000000,0.000000,0.707107 +3056,0.707107,0.000000,0.000000,0.707107 +3057,0.707107,0.000000,0.000000,0.707107 +3058,0.707107,0.000000,0.000000,0.707107 +3059,0.707107,0.000000,0.000000,0.707107 +3060,0.707107,0.000000,0.000000,0.707107 +3061,0.707107,0.000000,0.000000,0.707107 +3062,0.707107,0.000000,0.000000,0.707107 +3063,0.707107,0.000000,0.000000,0.707107 +3064,0.707107,0.000000,0.000000,0.707107 +3065,0.707107,0.000000,0.000000,0.707107 +3066,0.707107,0.000000,0.000000,0.707107 +3067,0.707107,0.000000,0.000000,0.707107 +3068,0.707107,0.000000,0.000000,0.707107 +3069,0.707107,0.000000,0.000000,0.707107 +3070,0.707107,0.000000,0.000000,0.707107 +3071,0.707107,0.000000,0.000000,0.707107 +3072,0.707107,0.000000,0.000000,0.707107 +3073,0.707107,0.000000,0.000000,0.707107 +3074,0.707107,0.000000,0.000000,0.707107 +3075,0.707107,0.000000,0.000000,0.707107 +3076,0.707107,0.000000,0.000000,0.707107 +3077,0.707107,0.000000,0.000000,0.707107 +3078,0.707107,0.000000,0.000000,0.707107 +3079,0.707107,0.000000,0.000000,0.707107 +3080,0.707107,0.000000,0.000000,0.707107 +3081,0.707107,0.000000,0.000000,0.707107 +3082,0.707107,0.000000,0.000000,0.707107 +3083,0.707107,0.000000,0.000000,0.707107 +3084,0.707107,0.000000,0.000000,0.707107 +3085,0.707107,0.000000,0.000000,0.707107 +3086,0.707107,0.000000,0.000000,0.707107 +3087,0.707107,0.000000,0.000000,0.707107 +3088,0.707107,0.000000,0.000000,0.707107 +3089,0.707107,0.000000,0.000000,0.707107 +3090,0.707107,0.000000,0.000000,0.707107 +3091,0.707107,0.000000,0.000000,0.707107 +3092,0.707107,0.000000,0.000000,0.707107 +3093,0.707107,0.000000,0.000000,0.707107 +3094,0.707107,0.000000,0.000000,0.707107 +3095,0.707107,0.000000,0.000000,0.707107 +3096,0.707107,0.000000,0.000000,0.707107 +3097,0.707107,0.000000,0.000000,0.707107 +3098,0.707107,0.000000,0.000000,0.707107 +3099,0.707107,0.000000,0.000000,0.707107 +3100,0.707107,0.000000,0.000000,0.707107 +3101,0.707107,0.000000,0.000000,0.707107 +3102,0.707107,0.000000,0.000000,0.707107 +3103,0.707107,0.000000,0.000000,0.707107 +3104,0.707107,0.000000,0.000000,0.707107 +3105,0.707107,0.000000,0.000000,0.707107 +3106,0.707107,0.000000,0.000000,0.707107 +3107,0.707107,0.000000,0.000000,0.707107 +3108,0.707107,0.000000,0.000000,0.707107 +3109,0.707107,0.000000,0.000000,0.707107 +3110,0.707107,0.000000,0.000000,0.707107 +3111,0.707107,0.000000,0.000000,0.707107 +3112,0.707107,0.000000,0.000000,0.707107 +3113,0.707107,0.000000,0.000000,0.707107 +3114,0.707107,0.000000,0.000000,0.707107 +3115,0.707107,0.000000,0.000000,0.707107 +3116,0.707107,0.000000,0.000000,0.707107 +3117,0.707107,0.000000,0.000000,0.707107 +3118,0.707107,0.000000,0.000000,0.707107 +3119,0.707107,0.000000,0.000000,0.707107 +3120,0.707107,0.000000,0.000000,0.707107 +3121,0.707107,0.000000,0.000000,0.707107 +3122,0.707107,0.000000,0.000000,0.707107 +3123,0.707107,0.000000,0.000000,0.707107 +3124,0.707107,0.000000,0.000000,0.707107 +3125,0.707107,0.000000,0.000000,0.707107 +3126,0.707107,0.000000,0.000000,0.707107 +3127,0.707107,0.000000,0.000000,0.707107 +3128,0.707107,0.000000,0.000000,0.707107 +3129,0.707107,0.000000,0.000000,0.707107 +3130,0.707107,0.000000,0.000000,0.707107 +3131,0.707107,0.000000,0.000000,0.707107 +3132,0.707107,0.000000,0.000000,0.707107 +3133,0.707107,0.000000,0.000000,0.707107 +3134,0.707107,0.000000,0.000000,0.707107 +3135,0.707107,0.000000,0.000000,0.707107 +3136,0.707107,0.000000,0.000000,0.707107 +3137,0.707107,0.000000,0.000000,0.707107 +3138,0.707107,0.000000,0.000000,0.707107 +3139,0.707107,0.000000,0.000000,0.707107 +3140,0.707107,0.000000,0.000000,0.707107 +3141,0.707107,0.000000,0.000000,0.707107 +3142,0.707107,0.000000,0.000000,0.707107 +3143,0.707107,0.000000,0.000000,0.707107 +3144,0.707107,0.000000,0.000000,0.707107 +3145,0.707107,0.000000,0.000000,0.707107 +3146,0.707107,0.000000,0.000000,0.707107 +3147,0.707107,0.000000,0.000000,0.707107 +3148,0.707107,0.000000,0.000000,0.707107 +3149,0.707107,0.000000,0.000000,0.707107 +3150,0.707107,0.000000,0.000000,0.707107 +3151,0.707107,0.000000,0.000000,0.707107 +3152,0.707107,0.000000,0.000000,0.707107 +3153,0.707107,0.000000,0.000000,0.707107 +3154,0.707107,0.000000,0.000000,0.707107 +3155,0.707107,0.000000,0.000000,0.707107 +3156,0.707107,0.000000,0.000000,0.707107 +3157,0.707107,0.000000,0.000000,0.707107 +3158,0.707107,0.000000,0.000000,0.707107 +3159,0.707107,0.000000,0.000000,0.707107 +3160,0.707107,0.000000,0.000000,0.707107 +3161,0.707107,0.000000,0.000000,0.707107 +3162,0.707107,0.000000,0.000000,0.707107 +3163,0.707107,0.000000,0.000000,0.707107 +3164,0.707107,0.000000,0.000000,0.707107 +3165,0.707107,0.000000,0.000000,0.707107 +3166,0.707107,0.000000,0.000000,0.707107 +3167,0.707107,0.000000,0.000000,0.707107 +3168,0.707107,0.000000,0.000000,0.707107 +3169,0.707107,0.000000,0.000000,0.707107 +3170,0.707107,0.000000,0.000000,0.707107 +3171,0.707107,0.000000,0.000000,0.707107 +3172,0.707107,0.000000,0.000000,0.707107 +3173,0.707107,0.000000,0.000000,0.707107 +3174,0.707107,0.000000,0.000000,0.707107 +3175,0.707107,0.000000,0.000000,0.707107 +3176,0.707107,0.000000,0.000000,0.707107 +3177,0.707107,0.000000,0.000000,0.707107 +3178,0.707107,0.000000,0.000000,0.707107 +3179,0.707107,0.000000,0.000000,0.707107 +3180,0.707107,0.000000,0.000000,0.707107 +3181,0.707107,0.000000,0.000000,0.707107 +3182,0.707107,0.000000,0.000000,0.707107 +3183,0.707107,0.000000,0.000000,0.707107 +3184,0.707107,0.000000,0.000000,0.707107 +3185,0.707107,0.000000,0.000000,0.707107 +3186,0.707107,0.000000,0.000000,0.707107 +3187,0.707107,0.000000,0.000000,0.707107 +3188,0.707107,0.000000,0.000000,0.707107 +3189,0.707107,0.000000,0.000000,0.707107 +3190,0.707107,0.000000,0.000000,0.707107 +3191,0.707107,0.000000,0.000000,0.707107 +3192,0.707107,0.000000,0.000000,0.707107 +3193,0.707107,0.000000,0.000000,0.707107 +3194,0.707107,0.000000,0.000000,0.707107 +3195,0.707107,0.000000,0.000000,0.707107 +3196,0.707107,0.000000,0.000000,0.707107 +3197,0.707107,0.000000,0.000000,0.707107 +3198,0.707107,0.000000,0.000000,0.707107 +3199,0.707107,0.000000,0.000000,0.707107 +3200,0.707107,0.000000,0.000000,0.707107 +3201,0.707107,0.000000,0.000000,0.707107 +3202,0.707107,0.000000,0.000000,0.707107 +3203,0.707107,0.000000,0.000000,0.707107 +3204,0.707107,0.000000,0.000000,0.707107 +3205,0.707107,0.000000,0.000000,0.707107 +3206,0.707107,0.000000,0.000000,0.707107 +3207,0.707107,0.000000,0.000000,0.707107 +3208,0.707107,0.000000,0.000000,0.707107 +3209,0.707107,0.000000,0.000000,0.707107 +3210,0.707107,0.000000,0.000000,0.707107 +3211,0.707107,0.000000,0.000000,0.707107 +3212,0.707107,0.000000,0.000000,0.707107 +3213,0.707107,0.000000,0.000000,0.707107 +3214,0.707107,0.000000,0.000000,0.707107 +3215,0.707107,0.000000,0.000000,0.707107 +3216,0.707107,0.000000,0.000000,0.707107 +3217,0.707107,0.000000,0.000000,0.707107 +3218,0.707107,0.000000,0.000000,0.707107 +3219,0.707107,0.000000,0.000000,0.707107 +3220,0.707107,0.000000,0.000000,0.707107 +3221,0.707107,0.000000,0.000000,0.707107 +3222,0.707107,0.000000,0.000000,0.707107 +3223,0.707107,0.000000,0.000000,0.707107 +3224,0.707107,0.000000,0.000000,0.707107 +3225,0.707107,0.000000,0.000000,0.707107 +3226,0.707107,0.000000,0.000000,0.707107 +3227,0.707107,0.000000,0.000000,0.707107 +3228,0.707107,0.000000,0.000000,0.707107 +3229,0.707107,0.000000,0.000000,0.707107 +3230,0.707107,0.000000,0.000000,0.707107 +3231,0.707107,0.000000,0.000000,0.707107 +3232,0.707107,0.000000,0.000000,0.707107 +3233,0.707107,0.000000,0.000000,0.707107 +3234,0.707107,0.000000,0.000000,0.707107 +3235,0.707107,0.000000,0.000000,0.707107 +3236,0.707107,0.000000,0.000000,0.707107 +3237,0.707107,0.000000,0.000000,0.707107 +3238,0.707107,0.000000,0.000000,0.707107 +3239,0.707107,0.000000,0.000000,0.707107 +3240,0.707107,0.000000,0.000000,0.707107 +3241,0.707107,0.000000,0.000000,0.707107 +3242,0.707107,0.000000,0.000000,0.707107 +3243,0.707107,0.000000,0.000000,0.707107 +3244,0.707107,0.000000,0.000000,0.707107 +3245,0.707107,0.000000,0.000000,0.707107 +3246,0.707107,0.000000,0.000000,0.707107 +3247,0.707107,0.000000,0.000000,0.707107 +3248,0.707107,0.000000,0.000000,0.707107 +3249,0.707107,0.000000,0.000000,0.707107 +3250,0.707107,0.000000,0.000000,0.707107 +3251,0.707107,0.000000,0.000000,0.707107 +3252,0.707107,0.000000,0.000000,0.707107 +3253,0.707107,0.000000,0.000000,0.707107 +3254,0.707107,0.000000,0.000000,0.707107 +3255,0.707107,0.000000,0.000000,0.707107 +3256,0.707107,0.000000,0.000000,0.707107 +3257,0.707107,0.000000,0.000000,0.707107 +3258,0.707107,0.000000,0.000000,0.707107 +3259,0.707107,0.000000,0.000000,0.707107 +3260,0.707107,0.000000,0.000000,0.707107 +3261,0.707107,0.000000,0.000000,0.707107 +3262,0.707107,0.000000,0.000000,0.707107 +3263,0.707107,0.000000,0.000000,0.707107 +3264,0.707107,0.000000,0.000000,0.707107 +3265,0.707107,0.000000,0.000000,0.707107 +3266,0.707107,0.000000,0.000000,0.707107 +3267,0.707107,0.000000,0.000000,0.707107 +3268,0.707107,0.000000,0.000000,0.707107 +3269,0.707107,0.000000,0.000000,0.707107 +3270,0.707107,0.000000,0.000000,0.707107 +3271,0.707107,0.000000,0.000000,0.707107 +3272,0.707107,0.000000,0.000000,0.707107 +3273,0.707107,0.000000,0.000000,0.707107 +3274,0.707107,0.000000,0.000000,0.707107 +3275,0.707107,0.000000,0.000000,0.707107 +3276,0.707107,0.000000,0.000000,0.707107 +3277,0.707107,0.000000,0.000000,0.707107 +3278,0.707107,0.000000,0.000000,0.707107 +3279,0.707107,0.000000,0.000000,0.707107 +3280,0.707107,0.000000,0.000000,0.707107 +3281,0.707107,0.000000,0.000000,0.707107 +3282,0.707107,0.000000,0.000000,0.707107 +3283,0.707107,0.000000,0.000000,0.707107 +3284,0.707107,0.000000,0.000000,0.707107 +3285,0.707107,0.000000,0.000000,0.707107 +3286,0.707107,0.000000,0.000000,0.707107 +3287,0.707107,0.000000,0.000000,0.707107 +3288,0.707107,0.000000,0.000000,0.707107 +3289,0.707107,0.000000,0.000000,0.707107 +3290,0.707107,0.000000,0.000000,0.707107 +3291,0.707107,0.000000,0.000000,0.707107 +3292,0.707107,0.000000,0.000000,0.707107 +3293,0.707107,0.000000,0.000000,0.707107 +3294,0.707107,0.000000,0.000000,0.707107 +3295,0.707107,0.000000,0.000000,0.707107 +3296,0.707107,0.000000,0.000000,0.707107 +3297,0.707107,0.000000,0.000000,0.707107 +3298,0.707107,0.000000,0.000000,0.707107 +3299,0.707107,0.000000,0.000000,0.707107 +3300,0.707107,0.000000,0.000000,0.707107 +3301,0.707107,0.000000,0.000000,0.707107 +3302,0.707107,0.000000,0.000000,0.707107 +3303,0.707107,0.000000,0.000000,0.707107 +3304,0.707107,0.000000,0.000000,0.707107 +3305,0.707107,0.000000,0.000000,0.707107 +3306,0.707107,0.000000,0.000000,0.707107 +3307,0.707107,0.000000,0.000000,0.707107 +3308,0.707107,0.000000,0.000000,0.707107 +3309,0.707107,0.000000,0.000000,0.707107 +3310,0.707107,0.000000,0.000000,0.707107 +3311,0.707107,0.000000,0.000000,0.707107 +3312,0.707107,0.000000,0.000000,0.707107 +3313,0.707107,0.000000,0.000000,0.707107 +3314,0.707107,0.000000,0.000000,0.707107 +3315,0.707107,0.000000,0.000000,0.707107 +3316,0.707107,0.000000,0.000000,0.707107 +3317,0.707107,0.000000,0.000000,0.707107 +3318,0.707107,0.000000,0.000000,0.707107 +3319,0.707107,0.000000,0.000000,0.707107 +3320,0.707107,0.000000,0.000000,0.707107 +3321,0.707107,0.000000,0.000000,0.707107 +3322,0.707107,0.000000,0.000000,0.707107 +3323,0.707107,0.000000,0.000000,0.707107 +3324,0.707107,0.000000,0.000000,0.707107 +3325,0.707107,0.000000,0.000000,0.707107 +3326,0.707107,0.000000,0.000000,0.707107 +3327,0.707107,0.000000,0.000000,0.707107 +3328,0.707107,0.000000,0.000000,0.707107 +3329,0.707107,0.000000,0.000000,0.707107 +3330,0.707107,0.000000,0.000000,0.707107 +3331,0.707107,0.000000,0.000000,0.707107 +3332,0.707107,0.000000,0.000000,0.707107 +3333,0.707107,0.000000,0.000000,0.707107 +3334,0.707107,0.000000,0.000000,0.707107 +3335,0.707107,0.000000,0.000000,0.707107 +3336,0.707107,0.000000,0.000000,0.707107 +3337,0.707107,0.000000,0.000000,0.707107 +3338,0.707107,0.000000,0.000000,0.707107 +3339,0.707107,0.000000,0.000000,0.707107 +3340,0.707107,0.000000,0.000000,0.707107 +3341,0.707107,0.000000,0.000000,0.707107 +3342,0.707107,0.000000,0.000000,0.707107 +3343,0.707107,0.000000,0.000000,0.707107 +3344,0.707107,0.000000,0.000000,0.707107 +3345,0.707107,0.000000,0.000000,0.707107 +3346,0.707107,0.000000,0.000000,0.707107 +3347,0.707107,0.000000,0.000000,0.707107 +3348,0.707107,0.000000,0.000000,0.707107 +3349,0.707107,0.000000,0.000000,0.707107 +3350,0.707107,0.000000,0.000000,0.707107 +3351,0.707107,0.000000,0.000000,0.707107 +3352,0.707107,0.000000,0.000000,0.707107 +3353,0.707107,0.000000,0.000000,0.707107 +3354,0.707107,0.000000,0.000000,0.707107 +3355,0.707107,0.000000,0.000000,0.707107 +3356,0.707107,0.000000,0.000000,0.707107 +3357,0.707107,0.000000,0.000000,0.707107 +3358,0.707107,0.000000,0.000000,0.707107 +3359,0.707107,0.000000,0.000000,0.707107 +3360,0.707107,0.000000,0.000000,0.707107 +3361,0.707107,0.000000,0.000000,0.707107 +3362,0.707107,0.000000,0.000000,0.707107 +3363,0.707107,0.000000,0.000000,0.707107 +3364,0.707107,0.000000,0.000000,0.707107 +3365,0.707107,0.000000,0.000000,0.707107 +3366,0.707107,0.000000,0.000000,0.707107 +3367,0.707107,0.000000,0.000000,0.707107 +3368,0.707107,0.000000,0.000000,0.707107 +3369,0.707107,0.000000,0.000000,0.707107 +3370,0.707107,0.000000,0.000000,0.707107 +3371,0.707107,0.000000,0.000000,0.707107 +3372,0.707107,0.000000,0.000000,0.707107 +3373,0.707107,0.000000,0.000000,0.707107 +3374,0.707107,0.000000,0.000000,0.707107 +3375,0.707107,0.000000,0.000000,0.707107 +3376,0.707107,0.000000,0.000000,0.707107 +3377,0.707107,0.000000,0.000000,0.707107 +3378,0.707107,0.000000,0.000000,0.707107 +3379,0.707107,0.000000,0.000000,0.707107 +3380,0.707107,0.000000,0.000000,0.707107 +3381,0.707107,0.000000,0.000000,0.707107 +3382,0.707107,0.000000,0.000000,0.707107 +3383,0.707107,0.000000,0.000000,0.707107 +3384,0.707107,0.000000,0.000000,0.707107 +3385,0.707107,0.000000,0.000000,0.707107 +3386,0.707107,0.000000,0.000000,0.707107 +3387,0.707107,0.000000,0.000000,0.707107 +3388,0.707107,0.000000,0.000000,0.707107 +3389,0.707107,0.000000,0.000000,0.707107 +3390,0.707107,0.000000,0.000000,0.707107 +3391,0.707107,0.000000,0.000000,0.707107 +3392,0.707107,0.000000,0.000000,0.707107 +3393,0.707107,0.000000,0.000000,0.707107 +3394,0.707107,0.000000,0.000000,0.707107 +3395,0.707107,0.000000,0.000000,0.707107 +3396,0.707107,0.000000,0.000000,0.707107 +3397,0.707107,0.000000,0.000000,0.707107 +3398,0.707107,0.000000,0.000000,0.707107 +3399,0.707107,0.000000,0.000000,0.707107 +3400,0.707107,0.000000,0.000000,0.707107 +3401,0.707107,0.000000,0.000000,0.707107 +3402,0.707107,0.000000,0.000000,0.707107 +3403,0.707107,0.000000,0.000000,0.707107 +3404,0.707107,0.000000,0.000000,0.707107 +3405,0.707107,0.000000,0.000000,0.707107 +3406,0.707107,0.000000,0.000000,0.707107 +3407,0.707107,0.000000,0.000000,0.707107 +3408,0.707107,0.000000,0.000000,0.707107 +3409,0.707107,0.000000,0.000000,0.707107 +3410,0.707107,0.000000,0.000000,0.707107 +3411,0.707107,0.000000,0.000000,0.707107 +3412,0.707107,0.000000,0.000000,0.707107 +3413,0.707107,0.000000,0.000000,0.707107 +3414,0.707107,0.000000,0.000000,0.707107 +3415,0.707107,0.000000,0.000000,0.707107 +3416,0.707107,0.000000,0.000000,0.707107 +3417,0.707107,0.000000,0.000000,0.707107 +3418,0.707107,0.000000,0.000000,0.707107 +3419,0.707107,0.000000,0.000000,0.707107 +3420,0.707107,0.000000,0.000000,0.707107 +3421,0.707107,0.000000,0.000000,0.707107 +3422,0.707107,0.000000,0.000000,0.707107 +3423,0.707107,0.000000,0.000000,0.707107 +3424,0.707107,0.000000,0.000000,0.707107 +3425,0.707107,0.000000,0.000000,0.707107 +3426,0.707107,0.000000,0.000000,0.707107 +3427,0.707107,0.000000,0.000000,0.707107 +3428,0.707107,0.000000,0.000000,0.707107 +3429,0.707107,0.000000,0.000000,0.707107 +3430,0.707107,0.000000,0.000000,0.707107 +3431,0.707107,0.000000,0.000000,0.707107 +3432,0.707107,0.000000,0.000000,0.707107 +3433,0.707107,0.000000,0.000000,0.707107 +3434,0.707107,0.000000,0.000000,0.707107 +3435,0.707107,0.000000,0.000000,0.707107 +3436,0.707107,0.000000,0.000000,0.707107 +3437,0.707107,0.000000,0.000000,0.707107 +3438,0.707107,0.000000,0.000000,0.707107 +3439,0.707107,0.000000,0.000000,0.707107 +3440,0.707107,0.000000,0.000000,0.707107 +3441,0.707107,0.000000,0.000000,0.707107 +3442,0.707107,0.000000,0.000000,0.707107 +3443,0.707107,0.000000,0.000000,0.707107 +3444,0.707107,0.000000,0.000000,0.707107 +3445,0.707107,0.000000,0.000000,0.707107 +3446,0.707107,0.000000,0.000000,0.707107 +3447,0.707107,0.000000,0.000000,0.707107 +3448,0.707107,0.000000,0.000000,0.707107 +3449,0.707107,0.000000,0.000000,0.707107 +3450,0.707107,0.000000,0.000000,0.707107 +3451,0.707107,0.000000,0.000000,0.707107 +3452,0.707107,0.000000,0.000000,0.707107 +3453,0.707107,0.000000,0.000000,0.707107 +3454,0.707107,0.000000,0.000000,0.707107 +3455,0.707107,0.000000,0.000000,0.707107 +3456,0.707107,0.000000,0.000000,0.707107 +3457,0.707107,0.000000,0.000000,0.707107 +3458,0.707107,0.000000,0.000000,0.707107 +3459,0.707107,0.000000,0.000000,0.707107 +3460,0.707107,0.000000,0.000000,0.707107 +3461,0.707107,0.000000,0.000000,0.707107 +3462,0.707107,0.000000,0.000000,0.707107 +3463,0.707107,0.000000,0.000000,0.707107 +3464,0.707107,0.000000,0.000000,0.707107 +3465,0.707107,0.000000,0.000000,0.707107 +3466,0.707107,0.000000,0.000000,0.707107 +3467,0.707107,0.000000,0.000000,0.707107 +3468,0.707107,0.000000,0.000000,0.707107 +3469,0.707107,0.000000,0.000000,0.707107 +3470,0.707107,0.000000,0.000000,0.707107 +3471,0.707107,0.000000,0.000000,0.707107 +3472,0.707107,0.000000,0.000000,0.707107 +3473,0.707107,0.000000,0.000000,0.707107 +3474,0.707107,0.000000,0.000000,0.707107 +3475,0.707107,0.000000,0.000000,0.707107 +3476,0.707107,0.000000,0.000000,0.707107 +3477,0.707107,0.000000,0.000000,0.707107 +3478,0.707107,0.000000,0.000000,0.707107 +3479,0.707107,0.000000,0.000000,0.707107 +3480,0.707107,0.000000,0.000000,0.707107 +3481,0.707107,0.000000,0.000000,0.707107 +3482,0.707107,0.000000,0.000000,0.707107 +3483,0.707107,0.000000,0.000000,0.707107 +3484,0.707107,0.000000,0.000000,0.707107 +3485,0.707107,0.000000,0.000000,0.707107 +3486,0.707107,0.000000,0.000000,0.707107 +3487,0.707107,0.000000,0.000000,0.707107 +3488,0.707107,0.000000,0.000000,0.707107 +3489,0.707107,0.000000,0.000000,0.707107 +3490,0.707107,0.000000,0.000000,0.707107 +3491,0.707107,0.000000,0.000000,0.707107 +3492,0.707107,0.000000,0.000000,0.707107 +3493,0.707107,0.000000,0.000000,0.707107 +3494,0.707107,0.000000,0.000000,0.707107 +3495,0.707107,0.000000,0.000000,0.707107 +3496,0.707107,0.000000,0.000000,0.707107 +3497,0.707107,0.000000,0.000000,0.707107 +3498,0.707107,0.000000,0.000000,0.707107 +3499,0.707107,0.000000,0.000000,0.707107 +3500,0.707107,0.000000,0.000000,0.707107 +3501,0.707107,0.000000,0.000000,0.707107 +3502,0.707107,0.000000,0.000000,0.707107 +3503,0.707107,0.000000,0.000000,0.707107 +3504,0.707107,0.000000,0.000000,0.707107 +3505,0.707107,0.000000,0.000000,0.707107 +3506,0.707107,0.000000,0.000000,0.707107 +3507,0.707107,0.000000,0.000000,0.707107 +3508,0.707107,0.000000,0.000000,0.707107 +3509,0.707107,0.000000,0.000000,0.707107 +3510,0.707107,0.000000,0.000000,0.707107 +3511,0.707107,0.000000,0.000000,0.707107 +3512,0.707107,0.000000,0.000000,0.707107 +3513,0.707107,0.000000,0.000000,0.707107 +3514,0.707107,0.000000,0.000000,0.707107 +3515,0.707107,0.000000,0.000000,0.707107 +3516,0.707107,0.000000,0.000000,0.707107 +3517,0.707107,0.000000,0.000000,0.707107 +3518,0.707107,0.000000,0.000000,0.707107 +3519,0.707107,0.000000,0.000000,0.707107 +3520,0.707107,0.000000,0.000000,0.707107 +3521,0.707107,0.000000,0.000000,0.707107 +3522,0.707107,0.000000,0.000000,0.707107 +3523,0.707107,0.000000,0.000000,0.707107 +3524,0.707107,0.000000,0.000000,0.707107 +3525,0.707107,0.000000,0.000000,0.707107 +3526,0.707107,0.000000,0.000000,0.707107 +3527,0.707107,0.000000,0.000000,0.707107 +3528,0.707107,0.000000,0.000000,0.707107 +3529,0.707107,0.000000,0.000000,0.707107 +3530,0.707107,0.000000,0.000000,0.707107 +3531,0.707107,0.000000,0.000000,0.707107 +3532,0.707107,0.000000,0.000000,0.707107 +3533,0.707107,0.000000,0.000000,0.707107 +3534,0.707107,0.000000,0.000000,0.707107 +3535,0.707107,0.000000,0.000000,0.707107 +3536,0.707107,0.000000,0.000000,0.707107 +3537,0.707107,0.000000,0.000000,0.707107 +3538,0.707107,0.000000,0.000000,0.707107 +3539,0.707107,0.000000,0.000000,0.707107 +3540,0.707107,0.000000,0.000000,0.707107 +3541,0.707107,0.000000,0.000000,0.707107 +3542,0.707107,0.000000,0.000000,0.707107 +3543,0.707107,0.000000,0.000000,0.707107 +3544,0.707107,0.000000,0.000000,0.707107 +3545,0.707107,0.000000,0.000000,0.707107 +3546,0.707107,0.000000,0.000000,0.707107 +3547,0.707107,0.000000,0.000000,0.707107 +3548,0.707107,0.000000,0.000000,0.707107 +3549,0.707107,0.000000,0.000000,0.707107 +3550,0.707107,0.000000,0.000000,0.707107 +3551,0.707107,0.000000,0.000000,0.707107 +3552,0.707107,0.000000,0.000000,0.707107 +3553,0.707107,0.000000,0.000000,0.707107 +3554,0.707107,0.000000,0.000000,0.707107 +3555,0.707107,0.000000,0.000000,0.707107 +3556,0.707107,0.000000,0.000000,0.707107 +3557,0.707107,0.000000,0.000000,0.707107 +3558,0.707107,0.000000,0.000000,0.707107 +3559,0.707107,0.000000,0.000000,0.707107 +3560,0.707107,0.000000,0.000000,0.707107 +3561,0.707107,0.000000,0.000000,0.707107 +3562,0.707107,0.000000,0.000000,0.707107 +3563,0.707107,0.000000,0.000000,0.707107 +3564,0.707107,0.000000,0.000000,0.707107 +3565,0.707107,0.000000,0.000000,0.707107 +3566,0.707107,0.000000,0.000000,0.707107 +3567,0.707107,0.000000,0.000000,0.707107 +3568,0.707107,0.000000,0.000000,0.707107 +3569,0.707107,0.000000,0.000000,0.707107 +3570,0.707107,0.000000,0.000000,0.707107 +3571,0.707107,0.000000,0.000000,0.707107 +3572,0.707107,0.000000,0.000000,0.707107 +3573,0.707107,0.000000,0.000000,0.707107 +3574,0.707107,0.000000,0.000000,0.707107 +3575,0.707107,0.000000,0.000000,0.707107 +3576,0.707107,0.000000,0.000000,0.707107 +3577,0.707107,0.000000,0.000000,0.707107 +3578,0.707107,0.000000,0.000000,0.707107 +3579,0.707107,0.000000,0.000000,0.707107 +3580,0.707107,0.000000,0.000000,0.707107 +3581,0.707107,0.000000,0.000000,0.707107 +3582,0.707107,0.000000,0.000000,0.707107 +3583,0.707107,0.000000,0.000000,0.707107 +3584,0.707107,0.000000,0.000000,0.707107 +3585,0.707107,0.000000,0.000000,0.707107 +3586,0.707107,0.000000,0.000000,0.707107 +3587,0.707107,0.000000,0.000000,0.707107 +3588,0.707107,0.000000,0.000000,0.707107 +3589,0.707107,0.000000,0.000000,0.707107 +3590,0.707107,0.000000,0.000000,0.707107 +3591,0.707107,0.000000,0.000000,0.707107 +3592,0.707107,0.000000,0.000000,0.707107 +3593,0.707107,0.000000,0.000000,0.707107 +3594,0.707107,0.000000,0.000000,0.707107 +3595,0.707107,0.000000,0.000000,0.707107 +3596,0.707107,0.000000,0.000000,0.707107 +3597,0.707107,0.000000,0.000000,0.707107 +3598,0.707107,0.000000,0.000000,0.707107 +3599,0.707107,0.000000,0.000000,0.707107 +3600,0.707107,0.000000,0.000000,0.707107 +3601,0.707107,0.000000,0.000000,0.707107 +3602,0.707107,0.000000,0.000000,0.707107 +3603,0.707107,0.000000,0.000000,0.707107 +3604,0.707107,0.000000,0.000000,0.707107 +3605,0.707107,0.000000,0.000000,0.707107 +3606,0.707107,0.000000,0.000000,0.707107 +3607,0.707107,0.000000,0.000000,0.707107 +3608,0.707107,0.000000,0.000000,0.707107 +3609,0.707107,0.000000,0.000000,0.707107 +3610,0.707107,0.000000,0.000000,0.707107 +3611,0.707107,0.000000,0.000000,0.707107 +3612,0.707107,0.000000,0.000000,0.707107 +3613,0.707107,0.000000,0.000000,0.707107 +3614,0.707107,0.000000,0.000000,0.707107 +3615,0.707107,0.000000,0.000000,0.707107 +3616,0.707107,0.000000,0.000000,0.707107 +3617,0.707107,0.000000,0.000000,0.707107 +3618,0.707107,0.000000,0.000000,0.707107 +3619,0.707107,0.000000,0.000000,0.707107 +3620,0.707107,0.000000,0.000000,0.707107 +3621,0.707107,0.000000,0.000000,0.707107 +3622,0.707107,0.000000,0.000000,0.707107 +3623,0.707107,0.000000,0.000000,0.707107 +3624,0.707107,0.000000,0.000000,0.707107 +3625,0.707107,0.000000,0.000000,0.707107 +3626,0.707107,0.000000,0.000000,0.707107 +3627,0.707107,0.000000,0.000000,0.707107 +3628,0.707107,0.000000,0.000000,0.707107 +3629,0.707107,0.000000,0.000000,0.707107 +3630,0.707107,0.000000,0.000000,0.707107 +3631,0.707107,0.000000,0.000000,0.707107 +3632,0.707107,0.000000,0.000000,0.707107 +3633,0.707107,0.000000,0.000000,0.707107 +3634,0.707107,0.000000,0.000000,0.707107 +3635,0.707107,0.000000,0.000000,0.707107 +3636,0.707107,0.000000,0.000000,0.707107 +3637,0.707107,0.000000,0.000000,0.707107 +3638,0.707107,0.000000,0.000000,0.707107 +3639,0.707107,0.000000,0.000000,0.707107 +3640,0.707107,0.000000,0.000000,0.707107 +3641,0.707107,0.000000,0.000000,0.707107 +3642,0.707107,0.000000,0.000000,0.707107 +3643,0.707107,0.000000,0.000000,0.707107 +3644,0.707107,0.000000,0.000000,0.707107 +3645,0.707107,0.000000,0.000000,0.707107 +3646,0.707107,0.000000,0.000000,0.707107 +3647,0.707107,0.000000,0.000000,0.707107 +3648,0.707107,0.000000,0.000000,0.707107 +3649,0.707107,0.000000,0.000000,0.707107 +3650,0.707107,0.000000,0.000000,0.707107 +3651,0.707107,0.000000,0.000000,0.707107 +3652,0.707107,0.000000,0.000000,0.707107 +3653,0.707107,0.000000,0.000000,0.707107 +3654,0.707107,0.000000,0.000000,0.707107 +3655,0.707107,0.000000,0.000000,0.707107 +3656,0.707107,0.000000,0.000000,0.707107 +3657,0.707107,0.000000,0.000000,0.707107 +3658,0.707107,0.000000,0.000000,0.707107 +3659,0.707107,0.000000,0.000000,0.707107 +3660,0.707107,0.000000,0.000000,0.707107 +3661,0.707107,0.000000,0.000000,0.707107 +3662,0.707107,0.000000,0.000000,0.707107 +3663,0.707107,0.000000,0.000000,0.707107 +3664,0.707107,0.000000,0.000000,0.707107 +3665,0.707107,0.000000,0.000000,0.707107 +3666,0.707107,0.000000,0.000000,0.707107 +3667,0.707107,0.000000,0.000000,0.707107 +3668,0.707107,0.000000,0.000000,0.707107 +3669,0.707107,0.000000,0.000000,0.707107 +3670,0.707107,0.000000,0.000000,0.707107 +3671,0.707107,0.000000,0.000000,0.707107 +3672,0.707107,0.000000,0.000000,0.707107 +3673,0.707107,0.000000,0.000000,0.707107 +3674,0.707107,0.000000,0.000000,0.707107 +3675,0.707107,0.000000,0.000000,0.707107 +3676,0.707107,0.000000,0.000000,0.707107 +3677,0.707107,0.000000,0.000000,0.707107 +3678,0.707107,0.000000,0.000000,0.707107 +3679,0.707107,0.000000,0.000000,0.707107 +3680,0.707107,0.000000,0.000000,0.707107 +3681,0.707107,0.000000,0.000000,0.707107 +3682,0.707107,0.000000,0.000000,0.707107 +3683,0.707107,0.000000,0.000000,0.707107 +3684,0.707107,0.000000,0.000000,0.707107 +3685,0.707107,0.000000,0.000000,0.707107 +3686,0.707107,0.000000,0.000000,0.707107 +3687,0.707107,0.000000,0.000000,0.707107 +3688,0.707107,0.000000,0.000000,0.707107 +3689,0.707107,0.000000,0.000000,0.707107 +3690,0.707107,0.000000,0.000000,0.707107 +3691,0.707107,0.000000,0.000000,0.707107 +3692,0.707107,0.000000,0.000000,0.707107 +3693,0.707107,0.000000,0.000000,0.707107 +3694,0.707107,0.000000,0.000000,0.707107 +3695,0.707107,0.000000,0.000000,0.707107 +3696,0.707107,0.000000,0.000000,0.707107 +3697,0.707107,0.000000,0.000000,0.707107 +3698,0.707107,0.000000,0.000000,0.707107 +3699,0.707107,0.000000,0.000000,0.707107 +3700,0.707107,0.000000,0.000000,0.707107 +3701,0.707107,0.000000,0.000000,0.707107 +3702,0.707107,0.000000,0.000000,0.707107 +3703,0.707107,0.000000,0.000000,0.707107 +3704,0.707107,0.000000,0.000000,0.707107 +3705,0.707107,0.000000,0.000000,0.707107 +3706,0.707107,0.000000,0.000000,0.707107 +3707,0.707107,0.000000,0.000000,0.707107 +3708,0.707107,0.000000,0.000000,0.707107 +3709,0.707107,0.000000,0.000000,0.707107 +3710,0.707107,0.000000,0.000000,0.707107 +3711,0.707107,0.000000,0.000000,0.707107 +3712,0.707107,0.000000,0.000000,0.707107 +3713,0.707107,0.000000,0.000000,0.707107 +3714,0.707107,0.000000,0.000000,0.707107 +3715,0.707107,0.000000,0.000000,0.707107 +3716,0.707107,0.000000,0.000000,0.707107 +3717,0.707107,0.000000,0.000000,0.707107 +3718,0.707107,0.000000,0.000000,0.707107 +3719,0.707107,0.000000,0.000000,0.707107 +3720,0.707107,0.000000,0.000000,0.707107 +3721,0.707107,0.000000,0.000000,0.707107 +3722,0.707107,0.000000,0.000000,0.707107 +3723,0.707107,0.000000,0.000000,0.707107 +3724,0.707107,0.000000,0.000000,0.707107 +3725,0.707107,0.000000,0.000000,0.707107 +3726,0.707107,0.000000,0.000000,0.707107 +3727,0.707107,0.000000,0.000000,0.707107 +3728,0.707107,0.000000,0.000000,0.707107 +3729,0.707107,0.000000,0.000000,0.707107 +3730,0.707107,0.000000,0.000000,0.707107 +3731,0.707107,0.000000,0.000000,0.707107 +3732,0.707107,0.000000,0.000000,0.707107 +3733,0.707107,0.000000,0.000000,0.707107 +3734,0.707107,0.000000,0.000000,0.707107 +3735,0.707107,0.000000,0.000000,0.707107 +3736,0.707107,0.000000,0.000000,0.707107 +3737,0.707107,0.000000,0.000000,0.707107 +3738,0.707107,0.000000,0.000000,0.707107 +3739,0.707107,0.000000,0.000000,0.707107 +3740,0.707107,0.000000,0.000000,0.707107 +3741,0.707107,0.000000,0.000000,0.707107 +3742,0.707107,0.000000,0.000000,0.707107 +3743,0.707107,0.000000,0.000000,0.707107 +3744,0.707107,0.000000,0.000000,0.707107 +3745,0.707107,0.000000,0.000000,0.707107 +3746,0.707107,0.000000,0.000000,0.707107 +3747,0.707107,0.000000,0.000000,0.707107 +3748,0.707107,0.000000,0.000000,0.707107 +3749,0.707107,0.000000,0.000000,0.707107 +3750,0.707107,0.000000,0.000000,0.707107 +3751,0.707107,0.000000,0.000000,0.707107 +3752,0.707107,0.000000,0.000000,0.707107 +3753,0.707107,0.000000,0.000000,0.707107 +3754,0.707107,0.000000,0.000000,0.707107 +3755,0.707107,0.000000,0.000000,0.707107 +3756,0.707107,0.000000,0.000000,0.707107 +3757,0.707107,0.000000,0.000000,0.707107 +3758,0.707107,0.000000,0.000000,0.707107 +3759,0.707107,0.000000,0.000000,0.707107 +3760,0.707107,0.000000,0.000000,0.707107 +3761,0.707107,0.000000,0.000000,0.707107 +3762,0.707107,0.000000,0.000000,0.707107 +3763,0.707107,0.000000,0.000000,0.707107 +3764,0.707107,0.000000,0.000000,0.707107 +3765,0.707107,0.000000,0.000000,0.707107 +3766,0.707107,0.000000,0.000000,0.707107 +3767,0.707107,0.000000,0.000000,0.707107 +3768,0.707107,0.000000,0.000000,0.707107 +3769,0.707107,0.000000,0.000000,0.707107 +3770,0.707107,0.000000,0.000000,0.707107 +3771,0.707107,0.000000,0.000000,0.707107 +3772,0.707107,0.000000,0.000000,0.707107 +3773,0.707107,0.000000,0.000000,0.707107 +3774,0.707107,0.000000,0.000000,0.707107 +3775,0.707107,0.000000,0.000000,0.707107 +3776,0.707107,0.000000,0.000000,0.707107 +3777,0.707107,0.000000,0.000000,0.707107 +3778,0.707107,0.000000,0.000000,0.707107 +3779,0.707107,0.000000,0.000000,0.707107 +3780,0.707107,0.000000,0.000000,0.707107 +3781,0.707107,0.000000,0.000000,0.707107 +3782,0.707107,0.000000,0.000000,0.707107 +3783,0.707107,0.000000,0.000000,0.707107 +3784,0.707107,0.000000,0.000000,0.707107 +3785,0.707107,0.000000,0.000000,0.707107 +3786,0.707107,0.000000,0.000000,0.707107 +3787,0.707107,0.000000,0.000000,0.707107 +3788,0.707107,0.000000,0.000000,0.707107 +3789,0.707107,0.000000,0.000000,0.707107 +3790,0.707107,0.000000,0.000000,0.707107 +3791,0.707107,0.000000,0.000000,0.707107 +3792,0.707107,0.000000,0.000000,0.707107 +3793,0.707107,0.000000,0.000000,0.707107 +3794,0.707107,0.000000,0.000000,0.707107 +3795,0.707107,0.000000,0.000000,0.707107 +3796,0.707107,0.000000,0.000000,0.707107 +3797,0.707107,0.000000,0.000000,0.707107 +3798,0.707107,0.000000,0.000000,0.707107 +3799,0.707107,0.000000,0.000000,0.707107 +3800,0.707107,0.000000,0.000000,0.707107 +3801,0.707107,0.000000,0.000000,0.707107 +3802,0.707107,0.000000,0.000000,0.707107 +3803,0.707107,0.000000,0.000000,0.707107 +3804,0.707107,0.000000,0.000000,0.707107 +3805,0.707107,0.000000,0.000000,0.707107 +3806,0.707107,0.000000,0.000000,0.707107 +3807,0.707107,0.000000,0.000000,0.707107 +3808,0.707107,0.000000,0.000000,0.707107 +3809,0.707107,0.000000,0.000000,0.707107 +3810,0.707107,0.000000,0.000000,0.707107 +3811,0.707107,0.000000,0.000000,0.707107 +3812,0.707107,0.000000,0.000000,0.707107 +3813,0.707107,0.000000,0.000000,0.707107 +3814,0.707107,0.000000,0.000000,0.707107 +3815,0.707107,0.000000,0.000000,0.707107 +3816,0.707107,0.000000,0.000000,0.707107 +3817,0.707107,0.000000,0.000000,0.707107 +3818,0.707107,0.000000,0.000000,0.707107 +3819,0.707107,0.000000,0.000000,0.707107 +3820,0.707107,0.000000,0.000000,0.707107 +3821,0.707107,0.000000,0.000000,0.707107 +3822,0.707107,0.000000,0.000000,0.707107 +3823,0.707107,0.000000,0.000000,0.707107 +3824,0.707107,0.000000,0.000000,0.707107 +3825,0.707107,0.000000,0.000000,0.707107 +3826,0.707107,0.000000,0.000000,0.707107 +3827,0.707107,0.000000,0.000000,0.707107 +3828,0.707107,0.000000,0.000000,0.707107 +3829,0.707107,0.000000,0.000000,0.707107 +3830,0.707107,0.000000,0.000000,0.707107 +3831,0.707107,0.000000,0.000000,0.707107 +3832,0.707107,0.000000,0.000000,0.707107 +3833,0.707107,0.000000,0.000000,0.707107 +3834,0.707107,0.000000,0.000000,0.707107 +3835,0.707107,0.000000,0.000000,0.707107 +3836,0.707107,0.000000,0.000000,0.707107 +3837,0.707107,0.000000,0.000000,0.707107 +3838,0.707107,0.000000,0.000000,0.707107 +3839,0.707107,0.000000,0.000000,0.707107 +3840,0.707107,0.000000,0.000000,0.707107 +3841,0.707107,0.000000,0.000000,0.707107 +3842,0.707107,0.000000,0.000000,0.707107 +3843,0.707107,0.000000,0.000000,0.707107 +3844,0.707107,0.000000,0.000000,0.707107 +3845,0.707107,0.000000,0.000000,0.707107 +3846,0.707107,0.000000,0.000000,0.707107 +3847,0.707107,0.000000,0.000000,0.707107 +3848,0.707107,0.000000,0.000000,0.707107 +3849,0.707107,0.000000,0.000000,0.707107 +3850,0.707107,0.000000,0.000000,0.707107 +3851,0.707107,0.000000,0.000000,0.707107 +3852,0.707107,0.000000,0.000000,0.707107 +3853,0.707107,0.000000,0.000000,0.707107 +3854,0.707107,0.000000,0.000000,0.707107 +3855,0.707107,0.000000,0.000000,0.707107 +3856,0.707107,0.000000,0.000000,0.707107 +3857,0.707107,0.000000,0.000000,0.707107 +3858,0.707107,0.000000,0.000000,0.707107 +3859,0.707107,0.000000,0.000000,0.707107 +3860,0.707107,0.000000,0.000000,0.707107 +3861,0.707107,0.000000,0.000000,0.707107 +3862,0.707107,0.000000,0.000000,0.707107 +3863,0.707107,0.000000,0.000000,0.707107 +3864,0.707107,0.000000,0.000000,0.707107 +3865,0.707107,0.000000,0.000000,0.707107 +3866,0.707107,0.000000,0.000000,0.707107 +3867,0.707107,0.000000,0.000000,0.707107 +3868,0.707107,0.000000,0.000000,0.707107 +3869,0.707107,0.000000,0.000000,0.707107 +3870,0.707107,0.000000,0.000000,0.707107 +3871,0.707107,0.000000,0.000000,0.707107 +3872,0.707107,0.000000,0.000000,0.707107 +3873,0.707107,0.000000,0.000000,0.707107 +3874,0.707107,0.000000,0.000000,0.707107 +3875,0.707107,0.000000,0.000000,0.707107 +3876,0.707107,0.000000,0.000000,0.707107 +3877,0.707107,0.000000,0.000000,0.707107 +3878,0.707107,0.000000,0.000000,0.707107 +3879,0.707107,0.000000,0.000000,0.707107 +3880,0.707107,0.000000,0.000000,0.707107 +3881,0.707107,0.000000,0.000000,0.707107 +3882,0.707107,0.000000,0.000000,0.707107 +3883,0.707107,0.000000,0.000000,0.707107 +3884,0.707107,0.000000,0.000000,0.707107 +3885,0.707107,0.000000,0.000000,0.707107 +3886,0.707107,0.000000,0.000000,0.707107 +3887,0.707107,0.000000,0.000000,0.707107 +3888,0.707107,0.000000,0.000000,0.707107 +3889,0.707107,0.000000,0.000000,0.707107 +3890,0.707107,0.000000,0.000000,0.707107 +3891,0.707107,0.000000,0.000000,0.707107 +3892,0.707107,0.000000,0.000000,0.707107 +3893,0.707107,0.000000,0.000000,0.707107 +3894,0.707107,0.000000,0.000000,0.707107 +3895,0.707107,0.000000,0.000000,0.707107 +3896,0.707107,0.000000,0.000000,0.707107 +3897,0.707107,0.000000,0.000000,0.707107 +3898,0.707107,0.000000,0.000000,0.707107 +3899,0.707107,0.000000,0.000000,0.707107 +3900,0.707107,0.000000,0.000000,0.707107 +3901,0.707107,0.000000,0.000000,0.707107 +3902,0.707107,0.000000,0.000000,0.707107 +3903,0.707107,0.000000,0.000000,0.707107 +3904,0.707107,0.000000,0.000000,0.707107 +3905,0.707107,0.000000,0.000000,0.707107 +3906,0.707107,0.000000,0.000000,0.707107 +3907,0.707107,0.000000,0.000000,0.707107 +3908,0.707107,0.000000,0.000000,0.707107 +3909,0.707107,0.000000,0.000000,0.707107 +3910,0.707107,0.000000,0.000000,0.707107 +3911,0.707107,0.000000,0.000000,0.707107 +3912,0.707107,0.000000,0.000000,0.707107 +3913,0.707107,0.000000,0.000000,0.707107 +3914,0.707107,0.000000,0.000000,0.707107 +3915,0.707107,0.000000,0.000000,0.707107 +3916,0.707107,0.000000,0.000000,0.707107 +3917,0.707107,0.000000,0.000000,0.707107 +3918,0.707107,0.000000,0.000000,0.707107 +3919,0.707107,0.000000,0.000000,0.707107 +3920,0.707107,0.000000,0.000000,0.707107 +3921,0.707107,0.000000,0.000000,0.707107 +3922,0.707107,0.000000,0.000000,0.707107 +3923,0.707107,0.000000,0.000000,0.707107 +3924,0.707107,0.000000,0.000000,0.707107 +3925,0.707107,0.000000,0.000000,0.707107 +3926,0.707107,0.000000,0.000000,0.707107 +3927,0.707107,0.000000,0.000000,0.707107 +3928,0.707107,0.000000,0.000000,0.707107 +3929,0.707107,0.000000,0.000000,0.707107 +3930,0.707107,0.000000,0.000000,0.707107 +3931,0.707107,0.000000,0.000000,0.707107 +3932,0.707107,0.000000,0.000000,0.707107 +3933,0.707107,0.000000,0.000000,0.707107 +3934,0.707107,0.000000,0.000000,0.707107 +3935,0.707107,0.000000,0.000000,0.707107 +3936,0.707107,0.000000,0.000000,0.707107 +3937,0.707107,0.000000,0.000000,0.707107 +3938,0.707107,0.000000,0.000000,0.707107 +3939,0.707107,0.000000,0.000000,0.707107 +3940,0.707107,0.000000,0.000000,0.707107 +3941,0.707107,0.000000,0.000000,0.707107 +3942,0.707107,0.000000,0.000000,0.707107 +3943,0.707107,0.000000,0.000000,0.707107 +3944,0.707107,0.000000,0.000000,0.707107 +3945,0.707107,0.000000,0.000000,0.707107 +3946,0.707107,0.000000,0.000000,0.707107 +3947,0.707107,0.000000,0.000000,0.707107 +3948,0.707107,0.000000,0.000000,0.707107 +3949,0.707107,0.000000,0.000000,0.707107 +3950,0.707107,0.000000,0.000000,0.707107 +3951,0.707107,0.000000,0.000000,0.707107 +3952,0.707107,0.000000,0.000000,0.707107 +3953,0.707107,0.000000,0.000000,0.707107 +3954,0.707107,0.000000,0.000000,0.707107 +3955,0.707107,0.000000,0.000000,0.707107 +3956,0.707107,0.000000,0.000000,0.707107 +3957,0.707107,0.000000,0.000000,0.707107 +3958,0.707107,0.000000,0.000000,0.707107 +3959,0.707107,0.000000,0.000000,0.707107 +3960,0.707107,0.000000,0.000000,0.707107 +3961,0.707107,0.000000,0.000000,0.707107 +3962,0.707107,0.000000,0.000000,0.707107 +3963,0.707107,0.000000,0.000000,0.707107 +3964,0.707107,0.000000,0.000000,0.707107 +3965,0.707107,0.000000,0.000000,0.707107 +3966,0.707107,0.000000,0.000000,0.707107 +3967,0.707107,0.000000,0.000000,0.707107 +3968,0.707107,0.000000,0.000000,0.707107 +3969,0.707107,0.000000,0.000000,0.707107 +3970,0.707107,0.000000,0.000000,0.707107 +3971,0.707107,0.000000,0.000000,0.707107 +3972,0.707107,0.000000,0.000000,0.707107 +3973,0.707107,0.000000,0.000000,0.707107 +3974,0.707107,0.000000,0.000000,0.707107 +3975,0.707107,0.000000,0.000000,0.707107 +3976,0.707107,0.000000,0.000000,0.707107 +3977,0.707107,0.000000,0.000000,0.707107 +3978,0.707107,0.000000,0.000000,0.707107 +3979,0.707107,0.000000,0.000000,0.707107 +3980,0.707107,0.000000,0.000000,0.707107 +3981,0.707107,0.000000,0.000000,0.707107 +3982,0.707107,0.000000,0.000000,0.707107 +3983,0.707107,0.000000,0.000000,0.707107 +3984,0.707107,0.000000,0.000000,0.707107 +3985,0.707107,0.000000,0.000000,0.707107 +3986,0.707107,0.000000,0.000000,0.707107 +3987,0.707107,0.000000,0.000000,0.707107 +3988,0.707107,0.000000,0.000000,0.707107 +3989,0.707107,0.000000,0.000000,0.707107 +3990,0.707107,0.000000,0.000000,0.707107 +3991,0.707107,0.000000,0.000000,0.707107 +3992,0.707107,0.000000,0.000000,0.707107 +3993,0.707107,0.000000,0.000000,0.707107 +3994,0.707107,0.000000,0.000000,0.707107 +3995,0.707107,0.000000,0.000000,0.707107 +3996,0.707107,0.000000,0.000000,0.707107 +3997,0.707107,0.000000,0.000000,0.707107 +3998,0.707107,0.000000,0.000000,0.707107 +3999,0.707107,0.000000,0.000000,0.707107 +4000,0.707107,0.000000,0.000000,0.707107 +4001,0.707107,0.000000,0.000000,0.707107 +4002,0.707107,0.000000,0.000000,0.707107 +4003,0.707107,0.000000,0.000000,0.707107 +4004,0.707107,0.000000,0.000000,0.707107 +4005,0.707107,0.000000,0.000000,0.707107 +4006,0.707107,0.000000,0.000000,0.707107 +4007,0.707107,0.000000,0.000000,0.707107 +4008,0.707107,0.000000,0.000000,0.707107 +4009,0.707107,0.000000,0.000000,0.707107 +4010,0.707107,0.000000,0.000000,0.707107 +4011,0.707107,0.000000,0.000000,0.707107 +4012,0.707107,0.000000,0.000000,0.707107 +4013,0.707107,0.000000,0.000000,0.707107 +4014,0.707107,0.000000,0.000000,0.707107 +4015,0.707107,0.000000,0.000000,0.707107 +4016,0.707107,0.000000,0.000000,0.707107 +4017,0.707107,0.000000,0.000000,0.707107 +4018,0.707107,0.000000,0.000000,0.707107 +4019,0.707107,0.000000,0.000000,0.707107 +4020,0.707107,0.000000,0.000000,0.707107 +4021,0.707107,0.000000,0.000000,0.707107 +4022,0.707107,0.000000,0.000000,0.707107 +4023,0.707107,0.000000,0.000000,0.707107 +4024,0.707107,0.000000,0.000000,0.707107 +4025,0.707107,0.000000,0.000000,0.707107 +4026,0.707107,0.000000,0.000000,0.707107 +4027,0.707107,0.000000,0.000000,0.707107 +4028,0.707107,0.000000,0.000000,0.707107 +4029,0.707107,0.000000,0.000000,0.707107 +4030,0.707107,0.000000,0.000000,0.707107 +4031,0.707107,0.000000,0.000000,0.707107 +4032,0.707107,0.000000,0.000000,0.707107 +4033,0.707107,0.000000,0.000000,0.707107 +4034,0.707107,0.000000,0.000000,0.707107 +4035,0.707107,0.000000,0.000000,0.707107 +4036,0.707107,0.000000,0.000000,0.707107 +4037,0.707107,0.000000,0.000000,0.707107 +4038,0.707107,0.000000,0.000000,0.707107 +4039,0.707107,0.000000,0.000000,0.707107 +4040,0.707107,0.000000,0.000000,0.707107 +4041,0.707107,0.000000,0.000000,0.707107 +4042,0.707107,0.000000,0.000000,0.707107 +4043,0.707107,0.000000,0.000000,0.707107 +4044,0.707107,0.000000,0.000000,0.707107 +4045,0.707107,0.000000,0.000000,0.707107 +4046,0.707107,0.000000,0.000000,0.707107 +4047,0.707107,0.000000,0.000000,0.707107 +4048,0.707107,0.000000,0.000000,0.707107 +4049,0.707107,0.000000,0.000000,0.707107 +4050,0.707107,0.000000,0.000000,0.707107 +4051,0.707107,0.000000,0.000000,0.707107 +4052,0.707107,0.000000,0.000000,0.707107 +4053,0.707107,0.000000,0.000000,0.707107 +4054,0.707107,0.000000,0.000000,0.707107 +4055,0.707107,0.000000,0.000000,0.707107 +4056,0.707107,0.000000,0.000000,0.707107 +4057,0.707107,0.000000,0.000000,0.707107 +4058,0.707107,0.000000,0.000000,0.707107 +4059,0.707107,0.000000,0.000000,0.707107 +4060,0.707107,0.000000,0.000000,0.707107 +4061,0.707107,0.000000,0.000000,0.707107 +4062,0.707107,0.000000,0.000000,0.707107 +4063,0.707107,0.000000,0.000000,0.707107 +4064,0.707107,0.000000,0.000000,0.707107 +4065,0.707107,0.000000,0.000000,0.707107 +4066,0.707107,0.000000,0.000000,0.707107 +4067,0.707107,0.000000,0.000000,0.707107 +4068,0.707107,0.000000,0.000000,0.707107 +4069,0.707107,0.000000,0.000000,0.707107 +4070,0.707107,0.000000,0.000000,0.707107 +4071,0.707107,0.000000,0.000000,0.707107 +4072,0.707107,0.000000,0.000000,0.707107 +4073,0.707107,0.000000,0.000000,0.707107 +4074,0.707107,0.000000,0.000000,0.707107 +4075,0.707107,0.000000,0.000000,0.707107 +4076,0.707107,0.000000,0.000000,0.707107 +4077,0.707107,0.000000,0.000000,0.707107 +4078,0.707107,0.000000,0.000000,0.707107 +4079,0.707107,0.000000,0.000000,0.707107 +4080,0.707107,0.000000,0.000000,0.707107 +4081,0.707107,0.000000,0.000000,0.707107 +4082,0.707107,0.000000,0.000000,0.707107 +4083,0.707107,0.000000,0.000000,0.707107 +4084,0.707107,0.000000,0.000000,0.707107 +4085,0.707107,0.000000,0.000000,0.707107 +4086,0.707107,0.000000,0.000000,0.707107 +4087,0.707107,0.000000,0.000000,0.707107 +4088,0.707107,0.000000,0.000000,0.707107 +4089,0.707107,0.000000,0.000000,0.707107 +4090,0.707107,0.000000,0.000000,0.707107 +4091,0.707107,0.000000,0.000000,0.707107 +4092,0.707107,0.000000,0.000000,0.707107 +4093,0.707107,0.000000,0.000000,0.707107 +4094,0.707107,0.000000,0.000000,0.707107 +4095,0.707107,0.000000,0.000000,0.707107 +4096,0.707107,0.000000,0.000000,0.707107 +4097,0.707107,0.000000,0.000000,0.707107 +4098,0.707107,0.000000,0.000000,0.707107 +4099,0.707107,0.000000,0.000000,0.707107 +4100,0.707107,0.000000,0.000000,0.707107 +4101,0.707107,0.000000,0.000000,0.707107 +4102,0.707107,0.000000,0.000000,0.707107 +4103,0.707107,0.000000,0.000000,0.707107 +4104,0.707107,0.000000,0.000000,0.707107 +4105,0.707107,0.000000,0.000000,0.707107 +4106,0.707107,0.000000,0.000000,0.707107 +4107,0.707107,0.000000,0.000000,0.707107 +4108,0.707107,0.000000,0.000000,0.707107 +4109,0.707107,0.000000,0.000000,0.707107 +4110,0.707107,0.000000,0.000000,0.707107 +4111,0.707107,0.000000,0.000000,0.707107 +4112,0.707107,0.000000,0.000000,0.707107 +4113,0.707107,0.000000,0.000000,0.707107 +4114,0.707107,0.000000,0.000000,0.707107 +4115,0.707107,0.000000,0.000000,0.707107 +4116,0.707107,0.000000,0.000000,0.707107 +4117,0.707107,0.000000,0.000000,0.707107 +4118,0.707107,0.000000,0.000000,0.707107 +4119,0.707107,0.000000,0.000000,0.707107 +4120,0.707107,0.000000,0.000000,0.707107 +4121,0.707107,0.000000,0.000000,0.707107 +4122,0.707107,0.000000,0.000000,0.707107 +4123,0.707107,0.000000,0.000000,0.707107 +4124,0.707107,0.000000,0.000000,0.707107 +4125,0.707107,0.000000,0.000000,0.707107 +4126,0.707107,0.000000,0.000000,0.707107 +4127,0.707107,0.000000,0.000000,0.707107 +4128,0.707107,0.000000,0.000000,0.707107 +4129,0.707107,0.000000,0.000000,0.707107 +4130,0.707107,0.000000,0.000000,0.707107 +4131,0.707107,0.000000,0.000000,0.707107 +4132,0.707107,0.000000,0.000000,0.707107 +4133,0.707107,0.000000,0.000000,0.707107 +4134,0.707107,0.000000,0.000000,0.707107 +4135,0.707107,0.000000,0.000000,0.707107 +4136,0.707107,0.000000,0.000000,0.707107 +4137,0.707107,0.000000,0.000000,0.707107 +4138,0.707107,0.000000,0.000000,0.707107 +4139,0.707107,0.000000,0.000000,0.707107 +4140,0.707107,0.000000,0.000000,0.707107 +4141,0.707107,0.000000,0.000000,0.707107 +4142,0.707107,0.000000,0.000000,0.707107 +4143,0.707107,0.000000,0.000000,0.707107 +4144,0.707107,0.000000,0.000000,0.707107 +4145,0.707107,0.000000,0.000000,0.707107 +4146,0.707107,0.000000,0.000000,0.707107 +4147,0.707107,0.000000,0.000000,0.707107 +4148,0.707107,0.000000,0.000000,0.707107 +4149,0.707107,0.000000,0.000000,0.707107 +4150,0.707107,0.000000,0.000000,0.707107 +4151,0.707107,0.000000,0.000000,0.707107 +4152,0.707107,0.000000,0.000000,0.707107 +4153,0.707107,0.000000,0.000000,0.707107 +4154,0.707107,0.000000,0.000000,0.707107 +4155,0.707107,0.000000,0.000000,0.707107 +4156,0.707107,0.000000,0.000000,0.707107 +4157,0.707107,0.000000,0.000000,0.707107 +4158,0.707107,0.000000,0.000000,0.707107 +4159,0.707107,0.000000,0.000000,0.707107 +4160,0.707107,0.000000,0.000000,0.707107 +4161,0.707107,0.000000,0.000000,0.707107 +4162,0.707107,0.000000,0.000000,0.707107 +4163,0.707107,0.000000,0.000000,0.707107 +4164,0.707107,0.000000,0.000000,0.707107 +4165,0.707107,0.000000,0.000000,0.707107 +4166,0.707107,0.000000,0.000000,0.707107 +4167,0.707107,0.000000,0.000000,0.707107 +4168,0.707107,0.000000,0.000000,0.707107 +4169,0.707107,0.000000,0.000000,0.707107 +4170,0.707107,0.000000,0.000000,0.707107 +4171,0.707107,0.000000,0.000000,0.707107 +4172,0.707107,0.000000,0.000000,0.707107 +4173,0.707107,0.000000,0.000000,0.707107 +4174,0.707107,0.000000,0.000000,0.707107 +4175,0.707107,0.000000,0.000000,0.707107 +4176,0.707107,0.000000,0.000000,0.707107 +4177,0.707107,0.000000,0.000000,0.707107 +4178,0.707107,0.000000,0.000000,0.707107 +4179,0.707107,0.000000,0.000000,0.707107 +4180,0.707107,0.000000,0.000000,0.707107 +4181,0.707107,0.000000,0.000000,0.707107 +4182,0.707107,0.000000,0.000000,0.707107 +4183,0.707107,0.000000,0.000000,0.707107 +4184,0.707107,0.000000,0.000000,0.707107 +4185,0.707107,0.000000,0.000000,0.707107 +4186,0.707107,0.000000,0.000000,0.707107 +4187,0.707107,0.000000,0.000000,0.707107 +4188,0.707107,0.000000,0.000000,0.707107 +4189,0.707107,0.000000,0.000000,0.707107 +4190,0.707107,0.000000,0.000000,0.707107 +4191,0.707107,0.000000,0.000000,0.707107 +4192,0.707107,0.000000,0.000000,0.707107 +4193,0.707107,0.000000,0.000000,0.707107 +4194,0.707107,0.000000,0.000000,0.707107 +4195,0.707107,0.000000,0.000000,0.707107 +4196,0.707107,0.000000,0.000000,0.707107 +4197,0.707107,0.000000,0.000000,0.707107 +4198,0.707107,0.000000,0.000000,0.707107 +4199,0.707107,0.000000,0.000000,0.707107 +4200,0.707107,0.000000,0.000000,0.707107 +4201,0.707107,0.000000,0.000000,0.707107 +4202,0.707107,0.000000,0.000000,0.707107 +4203,0.707107,0.000000,0.000000,0.707107 +4204,0.707107,0.000000,0.000000,0.707107 +4205,0.707107,0.000000,0.000000,0.707107 +4206,0.707107,0.000000,0.000000,0.707107 +4207,0.707107,0.000000,0.000000,0.707107 +4208,0.707107,0.000000,0.000000,0.707107 +4209,0.707107,0.000000,0.000000,0.707107 +4210,0.707107,0.000000,0.000000,0.707107 +4211,0.707107,0.000000,0.000000,0.707107 +4212,0.707107,0.000000,0.000000,0.707107 +4213,0.707107,0.000000,0.000000,0.707107 +4214,0.707107,0.000000,0.000000,0.707107 +4215,0.707107,0.000000,0.000000,0.707107 +4216,0.707107,0.000000,0.000000,0.707107 +4217,0.707107,0.000000,0.000000,0.707107 +4218,0.707107,0.000000,0.000000,0.707107 +4219,0.707107,0.000000,0.000000,0.707107 +4220,0.707107,0.000000,0.000000,0.707107 +4221,0.707107,0.000000,0.000000,0.707107 +4222,0.707107,0.000000,0.000000,0.707107 +4223,0.707107,0.000000,0.000000,0.707107 +4224,0.707107,0.000000,0.000000,0.707107 +4225,0.707107,0.000000,0.000000,0.707107 +4226,0.707107,0.000000,0.000000,0.707107 +4227,0.707107,0.000000,0.000000,0.707107 +4228,0.707107,0.000000,0.000000,0.707107 +4229,0.707107,0.000000,0.000000,0.707107 +4230,0.707107,0.000000,0.000000,0.707107 +4231,0.707107,0.000000,0.000000,0.707107 +4232,0.707107,0.000000,0.000000,0.707107 +4233,0.707107,0.000000,0.000000,0.707107 +4234,0.707107,0.000000,0.000000,0.707107 +4235,0.707107,0.000000,0.000000,0.707107 +4236,0.707107,0.000000,0.000000,0.707107 +4237,0.707107,0.000000,0.000000,0.707107 +4238,0.707107,0.000000,0.000000,0.707107 +4239,0.707107,0.000000,0.000000,0.707107 +4240,0.707107,0.000000,0.000000,0.707107 +4241,0.707107,0.000000,0.000000,0.707107 +4242,0.707107,0.000000,0.000000,0.707107 +4243,0.707107,0.000000,0.000000,0.707107 +4244,0.707107,0.000000,0.000000,0.707107 +4245,0.707107,0.000000,0.000000,0.707107 +4246,0.707107,0.000000,0.000000,0.707107 +4247,0.707107,0.000000,0.000000,0.707107 +4248,0.707107,0.000000,0.000000,0.707107 +4249,0.707107,0.000000,0.000000,0.707107 +4250,0.707107,0.000000,0.000000,0.707107 +4251,0.707107,0.000000,0.000000,0.707107 +4252,0.707107,0.000000,0.000000,0.707107 +4253,0.707107,0.000000,0.000000,0.707107 +4254,0.707107,0.000000,0.000000,0.707107 +4255,0.707107,0.000000,0.000000,0.707107 +4256,0.707107,0.000000,0.000000,0.707107 +4257,0.707107,0.000000,0.000000,0.707107 +4258,0.707107,0.000000,0.000000,0.707107 +4259,0.707107,0.000000,0.000000,0.707107 +4260,0.707107,0.000000,0.000000,0.707107 +4261,0.707107,0.000000,0.000000,0.707107 +4262,0.707107,0.000000,0.000000,0.707107 +4263,0.707107,0.000000,0.000000,0.707107 +4264,0.707107,0.000000,0.000000,0.707107 +4265,0.707107,0.000000,0.000000,0.707107 +4266,0.707107,0.000000,0.000000,0.707107 +4267,0.707107,0.000000,0.000000,0.707107 +4268,0.707107,0.000000,0.000000,0.707107 +4269,0.707107,0.000000,0.000000,0.707107 +4270,0.707107,0.000000,0.000000,0.707107 +4271,0.707107,0.000000,0.000000,0.707107 +4272,0.707107,0.000000,0.000000,0.707107 +4273,0.707107,0.000000,0.000000,0.707107 +4274,0.707107,0.000000,0.000000,0.707107 +4275,0.707107,0.000000,0.000000,0.707107 +4276,0.707107,0.000000,0.000000,0.707107 +4277,0.707107,0.000000,0.000000,0.707107 +4278,0.707107,0.000000,0.000000,0.707107 +4279,0.707107,0.000000,0.000000,0.707107 +4280,0.707107,0.000000,0.000000,0.707107 +4281,0.707107,0.000000,0.000000,0.707107 +4282,0.707107,0.000000,0.000000,0.707107 +4283,0.707107,0.000000,0.000000,0.707107 +4284,0.707107,0.000000,0.000000,0.707107 +4285,0.707107,0.000000,0.000000,0.707107 +4286,0.707107,0.000000,0.000000,0.707107 +4287,0.707107,0.000000,0.000000,0.707107 +4288,0.707107,0.000000,0.000000,0.707107 +4289,0.707107,0.000000,0.000000,0.707107 +4290,0.707107,0.000000,0.000000,0.707107 +4291,0.707107,0.000000,0.000000,0.707107 +4292,0.707107,0.000000,0.000000,0.707107 +4293,0.707107,0.000000,0.000000,0.707107 +4294,0.707107,0.000000,0.000000,0.707107 +4295,0.707107,0.000000,0.000000,0.707107 +4296,0.707107,0.000000,0.000000,0.707107 +4297,0.707107,0.000000,0.000000,0.707107 +4298,0.707107,0.000000,0.000000,0.707107 +4299,0.707107,0.000000,0.000000,0.707107 +4300,0.707107,0.000000,0.000000,0.707107 +4301,0.707107,0.000000,0.000000,0.707107 +4302,0.707107,0.000000,0.000000,0.707107 +4303,0.707107,0.000000,0.000000,0.707107 +4304,0.707107,0.000000,0.000000,0.707107 +4305,0.707107,0.000000,0.000000,0.707107 +4306,0.707107,0.000000,0.000000,0.707107 +4307,0.707107,0.000000,0.000000,0.707107 +4308,0.707107,0.000000,0.000000,0.707107 +4309,0.707107,0.000000,0.000000,0.707107 +4310,0.707107,0.000000,0.000000,0.707107 +4311,0.707107,0.000000,0.000000,0.707107 +4312,0.707107,0.000000,0.000000,0.707107 +4313,0.707107,0.000000,0.000000,0.707107 +4314,0.707107,0.000000,0.000000,0.707107 +4315,0.707107,0.000000,0.000000,0.707107 +4316,0.707107,0.000000,0.000000,0.707107 +4317,0.707107,0.000000,0.000000,0.707107 +4318,0.707107,0.000000,0.000000,0.707107 +4319,0.707107,0.000000,0.000000,0.707107 +4320,0.707107,0.000000,0.000000,0.707107 +4321,0.707107,0.000000,0.000000,0.707107 +4322,0.707107,0.000000,0.000000,0.707107 +4323,0.707107,0.000000,0.000000,0.707107 +4324,0.707107,0.000000,0.000000,0.707107 +4325,0.707107,0.000000,0.000000,0.707107 +4326,0.707107,0.000000,0.000000,0.707107 +4327,0.707107,0.000000,0.000000,0.707107 +4328,0.707107,0.000000,0.000000,0.707107 +4329,0.707107,0.000000,0.000000,0.707107 +4330,0.707107,0.000000,0.000000,0.707107 +4331,0.707107,0.000000,0.000000,0.707107 +4332,0.707107,0.000000,0.000000,0.707107 +4333,0.707107,0.000000,0.000000,0.707107 +4334,0.707107,0.000000,0.000000,0.707107 +4335,0.707107,0.000000,0.000000,0.707107 +4336,0.707107,0.000000,0.000000,0.707107 +4337,0.707107,0.000000,0.000000,0.707107 +4338,0.707107,0.000000,0.000000,0.707107 +4339,0.707107,0.000000,0.000000,0.707107 +4340,0.707107,0.000000,0.000000,0.707107 +4341,0.707107,0.000000,0.000000,0.707107 +4342,0.707107,0.000000,0.000000,0.707107 +4343,0.707107,0.000000,0.000000,0.707107 +4344,0.707107,0.000000,0.000000,0.707107 +4345,0.707107,0.000000,0.000000,0.707107 +4346,0.707107,0.000000,0.000000,0.707107 +4347,0.707107,0.000000,0.000000,0.707107 +4348,0.707107,0.000000,0.000000,0.707107 +4349,0.707107,0.000000,0.000000,0.707107 +4350,0.707107,0.000000,0.000000,0.707107 +4351,0.707107,0.000000,0.000000,0.707107 +4352,0.707107,0.000000,0.000000,0.707107 +4353,0.707107,0.000000,0.000000,0.707107 +4354,0.707107,0.000000,0.000000,0.707107 +4355,0.707107,0.000000,0.000000,0.707107 +4356,0.707107,0.000000,0.000000,0.707107 +4357,0.707107,0.000000,0.000000,0.707107 +4358,0.707107,0.000000,0.000000,0.707107 +4359,0.707107,0.000000,0.000000,0.707107 +4360,0.707107,0.000000,0.000000,0.707107 +4361,0.707107,0.000000,0.000000,0.707107 +4362,0.707107,0.000000,0.000000,0.707107 +4363,0.707107,0.000000,0.000000,0.707107 +4364,0.707107,0.000000,0.000000,0.707107 +4365,0.707107,0.000000,0.000000,0.707107 +4366,0.707107,0.000000,0.000000,0.707107 +4367,0.707107,0.000000,0.000000,0.707107 +4368,0.707107,0.000000,0.000000,0.707107 +4369,0.707107,0.000000,0.000000,0.707107 +4370,0.707107,0.000000,0.000000,0.707107 +4371,0.707107,0.000000,0.000000,0.707107 +4372,0.707107,0.000000,0.000000,0.707107 +4373,0.707107,0.000000,0.000000,0.707107 +4374,0.707107,0.000000,0.000000,0.707107 +4375,0.707107,0.000000,0.000000,0.707107 +4376,0.707107,0.000000,0.000000,0.707107 +4377,0.707107,0.000000,0.000000,0.707107 +4378,0.707107,0.000000,0.000000,0.707107 +4379,0.707107,0.000000,0.000000,0.707107 +4380,0.707107,0.000000,0.000000,0.707107 +4381,0.707107,0.000000,0.000000,0.707107 +4382,0.707107,0.000000,0.000000,0.707107 +4383,0.707107,0.000000,0.000000,0.707107 +4384,0.707107,0.000000,0.000000,0.707107 +4385,0.707107,0.000000,0.000000,0.707107 +4386,0.707107,0.000000,0.000000,0.707107 +4387,0.707107,0.000000,0.000000,0.707107 +4388,0.707107,0.000000,0.000000,0.707107 +4389,0.707107,0.000000,0.000000,0.707107 +4390,0.707107,0.000000,0.000000,0.707107 +4391,0.707107,0.000000,0.000000,0.707107 +4392,0.707107,0.000000,0.000000,0.707107 +4393,0.707107,0.000000,0.000000,0.707107 +4394,0.707107,0.000000,0.000000,0.707107 +4395,0.707107,0.000000,0.000000,0.707107 +4396,0.707107,0.000000,0.000000,0.707107 +4397,0.707107,0.000000,0.000000,0.707107 +4398,0.707107,0.000000,0.000000,0.707107 +4399,0.707107,0.000000,0.000000,0.707107 +4400,0.707107,0.000000,0.000000,0.707107 +4401,0.707107,0.000000,0.000000,0.707107 +4402,0.707107,0.000000,0.000000,0.707107 +4403,0.707107,0.000000,0.000000,0.707107 +4404,0.707107,0.000000,0.000000,0.707107 +4405,0.707107,0.000000,0.000000,0.707107 +4406,0.707107,0.000000,0.000000,0.707107 +4407,0.707107,0.000000,0.000000,0.707107 +4408,0.707107,0.000000,0.000000,0.707107 +4409,0.707107,0.000000,0.000000,0.707107 +4410,0.707107,0.000000,0.000000,0.707107 +4411,0.707107,0.000000,0.000000,0.707107 +4412,0.707107,0.000000,0.000000,0.707107 +4413,0.707107,0.000000,0.000000,0.707107 +4414,0.707107,0.000000,0.000000,0.707107 +4415,0.707107,0.000000,0.000000,0.707107 +4416,0.707107,0.000000,0.000000,0.707107 +4417,0.707107,0.000000,0.000000,0.707107 +4418,0.707107,0.000000,0.000000,0.707107 +4419,0.707107,0.000000,0.000000,0.707107 +4420,0.707107,0.000000,0.000000,0.707107 +4421,0.707107,0.000000,0.000000,0.707107 +4422,0.707107,0.000000,0.000000,0.707107 +4423,0.707107,0.000000,0.000000,0.707107 +4424,0.707107,0.000000,0.000000,0.707107 +4425,0.707107,0.000000,0.000000,0.707107 +4426,0.707107,0.000000,0.000000,0.707107 +4427,0.707107,0.000000,0.000000,0.707107 +4428,0.707107,0.000000,0.000000,0.707107 +4429,0.707107,0.000000,0.000000,0.707107 +4430,0.707107,0.000000,0.000000,0.707107 +4431,0.707107,0.000000,0.000000,0.707107 +4432,0.707107,0.000000,0.000000,0.707107 +4433,0.707107,0.000000,0.000000,0.707107 +4434,0.707107,0.000000,0.000000,0.707107 +4435,0.707107,0.000000,0.000000,0.707107 +4436,0.707107,0.000000,0.000000,0.707107 +4437,0.707107,0.000000,0.000000,0.707107 +4438,0.707107,0.000000,0.000000,0.707107 +4439,0.707107,0.000000,0.000000,0.707107 +4440,0.707107,0.000000,0.000000,0.707107 +4441,0.707107,0.000000,0.000000,0.707107 +4442,0.707107,0.000000,0.000000,0.707107 +4443,0.707107,0.000000,0.000000,0.707107 +4444,0.707107,0.000000,0.000000,0.707107 +4445,0.707107,0.000000,0.000000,0.707107 +4446,0.707107,0.000000,0.000000,0.707107 +4447,0.707107,0.000000,0.000000,0.707107 +4448,0.707107,0.000000,0.000000,0.707107 +4449,0.707107,0.000000,0.000000,0.707107 +4450,0.707107,0.000000,0.000000,0.707107 +4451,0.707107,0.000000,0.000000,0.707107 +4452,0.707107,0.000000,0.000000,0.707107 +4453,0.707107,0.000000,0.000000,0.707107 +4454,0.707107,0.000000,0.000000,0.707107 +4455,0.707107,0.000000,0.000000,0.707107 +4456,0.707107,0.000000,0.000000,0.707107 +4457,0.707107,0.000000,0.000000,0.707107 +4458,0.707107,0.000000,0.000000,0.707107 +4459,0.707107,0.000000,0.000000,0.707107 +4460,0.707107,0.000000,0.000000,0.707107 +4461,0.707107,0.000000,0.000000,0.707107 +4462,0.707107,0.000000,0.000000,0.707107 +4463,0.707107,0.000000,0.000000,0.707107 +4464,0.707107,0.000000,0.000000,0.707107 +4465,0.707107,0.000000,0.000000,0.707107 +4466,0.707107,0.000000,0.000000,0.707107 +4467,0.707107,0.000000,0.000000,0.707107 +4468,0.707107,0.000000,0.000000,0.707107 +4469,0.707107,0.000000,0.000000,0.707107 +4470,0.707107,0.000000,0.000000,0.707107 +4471,0.707107,0.000000,0.000000,0.707107 +4472,0.707107,0.000000,0.000000,0.707107 +4473,0.707107,0.000000,0.000000,0.707107 +4474,0.707107,0.000000,0.000000,0.707107 +4475,0.707107,0.000000,0.000000,0.707107 +4476,0.707107,0.000000,0.000000,0.707107 +4477,0.707107,0.000000,0.000000,0.707107 +4478,0.707107,0.000000,0.000000,0.707107 +4479,0.707107,0.000000,0.000000,0.707107 +4480,0.707107,0.000000,0.000000,0.707107 +4481,0.707107,0.000000,0.000000,0.707107 +4482,0.707107,0.000000,0.000000,0.707107 +4483,0.707107,0.000000,0.000000,0.707107 +4484,0.707107,0.000000,0.000000,0.707107 +4485,0.707107,0.000000,0.000000,0.707107 +4486,0.707107,0.000000,0.000000,0.707107 +4487,0.707107,0.000000,0.000000,0.707107 +4488,0.707107,0.000000,0.000000,0.707107 +4489,0.707107,0.000000,0.000000,0.707107 +4490,0.707107,0.000000,0.000000,0.707107 +4491,0.707107,0.000000,0.000000,0.707107 +4492,0.707107,0.000000,0.000000,0.707107 +4493,0.707107,0.000000,0.000000,0.707107 +4494,0.707107,0.000000,0.000000,0.707107 +4495,0.707107,0.000000,0.000000,0.707107 +4496,0.707107,0.000000,0.000000,0.707107 +4497,0.707107,0.000000,0.000000,0.707107 +4498,0.707107,0.000000,0.000000,0.707107 +4499,0.707107,0.000000,0.000000,0.707107 +4500,0.707107,0.000000,0.000000,0.707107 +4501,0.707107,0.000000,0.000000,0.707107 +4502,0.707107,0.000000,0.000000,0.707107 +4503,0.707107,0.000000,0.000000,0.707107 +4504,0.707107,0.000000,0.000000,0.707107 +4505,0.707107,0.000000,0.000000,0.707107 +4506,0.707107,0.000000,0.000000,0.707107 +4507,0.707107,0.000000,0.000000,0.707107 +4508,0.707107,0.000000,0.000000,0.707107 +4509,0.707107,0.000000,0.000000,0.707107 +4510,0.707107,0.000000,0.000000,0.707107 +4511,0.707107,0.000000,0.000000,0.707107 +4512,0.707107,0.000000,0.000000,0.707107 +4513,0.707107,0.000000,0.000000,0.707107 +4514,0.707107,0.000000,0.000000,0.707107 +4515,0.707107,0.000000,0.000000,0.707107 +4516,0.707107,0.000000,0.000000,0.707107 +4517,0.707107,0.000000,0.000000,0.707107 +4518,0.707107,0.000000,0.000000,0.707107 +4519,0.707107,0.000000,0.000000,0.707107 +4520,0.707107,0.000000,0.000000,0.707107 +4521,0.707107,0.000000,0.000000,0.707107 +4522,0.707107,0.000000,0.000000,0.707107 +4523,0.707107,0.000000,0.000000,0.707107 +4524,0.707107,0.000000,0.000000,0.707107 +4525,0.707107,0.000000,0.000000,0.707107 +4526,0.707107,0.000000,0.000000,0.707107 +4527,0.707107,0.000000,0.000000,0.707107 +4528,0.707107,0.000000,0.000000,0.707107 +4529,0.707107,0.000000,0.000000,0.707107 +4530,0.707107,0.000000,0.000000,0.707107 +4531,0.707107,0.000000,0.000000,0.707107 +4532,0.707107,0.000000,0.000000,0.707107 +4533,0.707107,0.000000,0.000000,0.707107 +4534,0.707107,0.000000,0.000000,0.707107 +4535,0.707107,0.000000,0.000000,0.707107 +4536,0.707107,0.000000,0.000000,0.707107 +4537,0.707107,0.000000,0.000000,0.707107 +4538,0.707107,0.000000,0.000000,0.707107 +4539,0.707107,0.000000,0.000000,0.707107 +4540,0.707107,0.000000,0.000000,0.707107 +4541,0.707107,0.000000,0.000000,0.707107 +4542,0.707107,0.000000,0.000000,0.707107 +4543,0.707107,0.000000,0.000000,0.707107 +4544,0.707107,0.000000,0.000000,0.707107 +4545,0.707107,0.000000,0.000000,0.707107 +4546,0.707107,0.000000,0.000000,0.707107 +4547,0.707107,0.000000,0.000000,0.707107 +4548,0.707107,0.000000,0.000000,0.707107 +4549,0.707107,0.000000,0.000000,0.707107 +4550,0.707107,0.000000,0.000000,0.707107 +4551,0.707107,0.000000,0.000000,0.707107 +4552,0.707107,0.000000,0.000000,0.707107 +4553,0.707107,0.000000,0.000000,0.707107 +4554,0.707107,0.000000,0.000000,0.707107 +4555,0.707107,0.000000,0.000000,0.707107 +4556,0.707107,0.000000,0.000000,0.707107 +4557,0.707107,0.000000,0.000000,0.707107 +4558,0.707107,0.000000,0.000000,0.707107 +4559,0.707107,0.000000,0.000000,0.707107 +4560,0.707107,0.000000,0.000000,0.707107 +4561,0.707107,0.000000,0.000000,0.707107 +4562,0.707107,0.000000,0.000000,0.707107 +4563,0.707107,0.000000,0.000000,0.707107 +4564,0.707107,0.000000,0.000000,0.707107 +4565,0.707107,0.000000,0.000000,0.707107 +4566,0.707107,0.000000,0.000000,0.707107 +4567,0.707107,0.000000,0.000000,0.707107 +4568,0.707107,0.000000,0.000000,0.707107 +4569,0.707107,0.000000,0.000000,0.707107 +4570,0.707107,0.000000,0.000000,0.707107 +4571,0.707107,0.000000,0.000000,0.707107 +4572,0.707107,0.000000,0.000000,0.707107 +4573,0.707107,0.000000,0.000000,0.707107 +4574,0.707107,0.000000,0.000000,0.707107 +4575,0.707107,0.000000,0.000000,0.707107 +4576,0.707107,0.000000,0.000000,0.707107 +4577,0.707107,0.000000,0.000000,0.707107 +4578,0.707107,0.000000,0.000000,0.707107 +4579,0.707107,0.000000,0.000000,0.707107 +4580,0.707107,0.000000,0.000000,0.707107 +4581,0.707107,0.000000,0.000000,0.707107 +4582,0.707107,0.000000,0.000000,0.707107 +4583,0.707107,0.000000,0.000000,0.707107 +4584,0.707107,0.000000,0.000000,0.707107 +4585,0.707107,0.000000,0.000000,0.707107 +4586,0.707107,0.000000,0.000000,0.707107 +4587,0.707107,0.000000,0.000000,0.707107 +4588,0.707107,0.000000,0.000000,0.707107 +4589,0.707107,0.000000,0.000000,0.707107 +4590,0.707107,0.000000,0.000000,0.707107 +4591,0.707107,0.000000,0.000000,0.707107 +4592,0.707107,0.000000,0.000000,0.707107 +4593,0.707107,0.000000,0.000000,0.707107 +4594,0.707107,0.000000,0.000000,0.707107 +4595,0.707107,0.000000,0.000000,0.707107 +4596,0.707107,0.000000,0.000000,0.707107 +4597,0.707107,0.000000,0.000000,0.707107 +4598,0.707107,0.000000,0.000000,0.707107 +4599,0.707107,0.000000,0.000000,0.707107 +4600,0.707107,0.000000,0.000000,0.707107 +4601,0.707107,0.000000,0.000000,0.707107 +4602,0.707107,0.000000,0.000000,0.707107 +4603,0.707107,0.000000,0.000000,0.707107 +4604,0.707107,0.000000,0.000000,0.707107 +4605,0.707107,0.000000,0.000000,0.707107 +4606,0.707107,0.000000,0.000000,0.707107 +4607,0.707107,0.000000,0.000000,0.707107 +4608,0.707107,0.000000,0.000000,0.707107 +4609,0.707107,0.000000,0.000000,0.707107 +4610,0.707107,0.000000,0.000000,0.707107 +4611,0.707107,0.000000,0.000000,0.707107 +4612,0.707107,0.000000,0.000000,0.707107 +4613,0.707107,0.000000,0.000000,0.707107 +4614,0.707107,0.000000,0.000000,0.707107 +4615,0.707107,0.000000,0.000000,0.707107 +4616,0.707107,0.000000,0.000000,0.707107 +4617,0.707107,0.000000,0.000000,0.707107 +4618,0.707107,0.000000,0.000000,0.707107 +4619,0.707107,0.000000,0.000000,0.707107 +4620,0.707107,0.000000,0.000000,0.707107 +4621,0.707107,0.000000,0.000000,0.707107 +4622,0.707107,0.000000,0.000000,0.707107 +4623,0.707107,0.000000,0.000000,0.707107 +4624,0.707107,0.000000,0.000000,0.707107 +4625,0.707107,0.000000,0.000000,0.707107 +4626,0.707107,0.000000,0.000000,0.707107 +4627,0.707107,0.000000,0.000000,0.707107 +4628,0.707107,0.000000,0.000000,0.707107 +4629,0.707107,0.000000,0.000000,0.707107 +4630,0.707107,0.000000,0.000000,0.707107 +4631,0.707107,0.000000,0.000000,0.707107 +4632,0.707107,0.000000,0.000000,0.707107 +4633,0.707107,0.000000,0.000000,0.707107 +4634,0.707107,0.000000,0.000000,0.707107 +4635,0.707107,0.000000,0.000000,0.707107 +4636,0.707107,0.000000,0.000000,0.707107 +4637,0.707107,0.000000,0.000000,0.707107 +4638,0.707107,0.000000,0.000000,0.707107 +4639,0.707107,0.000000,0.000000,0.707107 +4640,0.707107,0.000000,0.000000,0.707107 +4641,0.707107,0.000000,0.000000,0.707107 +4642,0.707107,0.000000,0.000000,0.707107 +4643,0.707107,0.000000,0.000000,0.707107 +4644,0.707107,0.000000,0.000000,0.707107 +4645,0.707107,0.000000,0.000000,0.707107 +4646,0.707107,0.000000,0.000000,0.707107 +4647,0.707107,0.000000,0.000000,0.707107 +4648,0.707107,0.000000,0.000000,0.707107 +4649,0.707107,0.000000,0.000000,0.707107 +4650,0.707107,0.000000,0.000000,0.707107 +4651,0.707107,0.000000,0.000000,0.707107 +4652,0.707107,0.000000,0.000000,0.707107 +4653,0.707107,0.000000,0.000000,0.707107 +4654,0.707107,0.000000,0.000000,0.707107 +4655,0.707107,0.000000,0.000000,0.707107 +4656,0.707107,0.000000,0.000000,0.707107 +4657,0.707107,0.000000,0.000000,0.707107 +4658,0.707107,0.000000,0.000000,0.707107 +4659,0.707107,0.000000,0.000000,0.707107 +4660,0.707107,0.000000,0.000000,0.707107 +4661,0.707107,0.000000,0.000000,0.707107 +4662,0.707107,0.000000,0.000000,0.707107 +4663,0.707107,0.000000,0.000000,0.707107 +4664,0.707107,0.000000,0.000000,0.707107 +4665,0.707107,0.000000,0.000000,0.707107 +4666,0.707107,0.000000,0.000000,0.707107 +4667,0.707107,0.000000,0.000000,0.707107 +4668,0.707107,0.000000,0.000000,0.707107 +4669,0.707107,0.000000,0.000000,0.707107 +4670,0.707107,0.000000,0.000000,0.707107 +4671,0.707107,0.000000,0.000000,0.707107 +4672,0.707107,0.000000,0.000000,0.707107 +4673,0.707107,0.000000,0.000000,0.707107 +4674,0.707107,0.000000,0.000000,0.707107 +4675,0.707107,0.000000,0.000000,0.707107 +4676,0.707107,0.000000,0.000000,0.707107 +4677,0.707107,0.000000,0.000000,0.707107 +4678,0.707107,0.000000,0.000000,0.707107 +4679,0.707107,0.000000,0.000000,0.707107 +4680,0.707107,0.000000,0.000000,0.707107 +4681,0.707107,0.000000,0.000000,0.707107 +4682,0.707107,0.000000,0.000000,0.707107 +4683,0.707107,0.000000,0.000000,0.707107 +4684,0.707107,0.000000,0.000000,0.707107 +4685,0.707107,0.000000,0.000000,0.707107 +4686,0.707107,0.000000,0.000000,0.707107 +4687,0.707107,0.000000,0.000000,0.707107 +4688,0.707107,0.000000,0.000000,0.707107 +4689,0.707107,0.000000,0.000000,0.707107 +4690,0.707107,0.000000,0.000000,0.707107 +4691,0.707107,0.000000,0.000000,0.707107 +4692,0.707107,0.000000,0.000000,0.707107 +4693,0.707107,0.000000,0.000000,0.707107 +4694,0.707107,0.000000,0.000000,0.707107 +4695,0.707107,0.000000,0.000000,0.707107 +4696,0.707107,0.000000,0.000000,0.707107 +4697,0.707107,0.000000,0.000000,0.707107 +4698,0.707107,0.000000,0.000000,0.707107 +4699,0.707107,0.000000,0.000000,0.707107 +4700,0.707107,0.000000,0.000000,0.707107 +4701,0.707107,0.000000,0.000000,0.707107 +4702,0.707107,0.000000,0.000000,0.707107 +4703,0.707107,0.000000,0.000000,0.707107 +4704,0.707107,0.000000,0.000000,0.707107 +4705,0.707107,0.000000,0.000000,0.707107 +4706,0.707107,0.000000,0.000000,0.707107 +4707,0.707107,0.000000,0.000000,0.707107 +4708,0.707107,0.000000,0.000000,0.707107 +4709,0.707107,0.000000,0.000000,0.707107 +4710,0.707107,0.000000,0.000000,0.707107 +4711,0.707107,0.000000,0.000000,0.707107 +4712,0.707107,0.000000,0.000000,0.707107 +4713,0.707107,0.000000,0.000000,0.707107 +4714,0.707107,0.000000,0.000000,0.707107 +4715,0.707107,0.000000,0.000000,0.707107 +4716,0.707107,0.000000,0.000000,0.707107 +4717,0.707107,0.000000,0.000000,0.707107 +4718,0.707107,0.000000,0.000000,0.707107 +4719,0.707107,0.000000,0.000000,0.707107 +4720,0.707107,0.000000,0.000000,0.707107 +4721,0.707107,0.000000,0.000000,0.707107 +4722,0.707107,0.000000,0.000000,0.707107 +4723,0.707107,0.000000,0.000000,0.707107 +4724,0.707107,0.000000,0.000000,0.707107 +4725,0.707107,0.000000,0.000000,0.707107 +4726,0.707107,0.000000,0.000000,0.707107 +4727,0.707107,0.000000,0.000000,0.707107 +4728,0.707107,0.000000,0.000000,0.707107 +4729,0.707107,0.000000,0.000000,0.707107 +4730,0.707107,0.000000,0.000000,0.707107 +4731,0.707107,0.000000,0.000000,0.707107 +4732,0.707107,0.000000,0.000000,0.707107 +4733,0.707107,0.000000,0.000000,0.707107 +4734,0.707107,0.000000,0.000000,0.707107 +4735,0.707107,0.000000,0.000000,0.707107 +4736,0.707107,0.000000,0.000000,0.707107 +4737,0.707107,0.000000,0.000000,0.707107 +4738,0.707107,0.000000,0.000000,0.707107 +4739,0.707107,0.000000,0.000000,0.707107 +4740,0.707107,0.000000,0.000000,0.707107 +4741,0.707107,0.000000,0.000000,0.707107 +4742,0.707107,0.000000,0.000000,0.707107 +4743,0.707107,0.000000,0.000000,0.707107 +4744,0.707107,0.000000,0.000000,0.707107 +4745,0.707107,0.000000,0.000000,0.707107 +4746,0.707107,0.000000,0.000000,0.707107 +4747,0.707107,0.000000,0.000000,0.707107 +4748,0.707107,0.000000,0.000000,0.707107 +4749,0.707107,0.000000,0.000000,0.707107 +4750,0.707107,0.000000,0.000000,0.707107 +4751,0.707107,0.000000,0.000000,0.707107 +4752,0.707107,0.000000,0.000000,0.707107 +4753,0.707107,0.000000,0.000000,0.707107 +4754,0.707107,0.000000,0.000000,0.707107 +4755,0.707107,0.000000,0.000000,0.707107 +4756,0.707107,0.000000,0.000000,0.707107 +4757,0.707107,0.000000,0.000000,0.707107 +4758,0.707107,0.000000,0.000000,0.707107 +4759,0.707107,0.000000,0.000000,0.707107 +4760,0.707107,0.000000,0.000000,0.707107 +4761,0.707107,0.000000,0.000000,0.707107 +4762,0.707107,0.000000,0.000000,0.707107 +4763,0.707107,0.000000,0.000000,0.707107 +4764,0.707107,0.000000,0.000000,0.707107 +4765,0.707107,0.000000,0.000000,0.707107 +4766,0.707107,0.000000,0.000000,0.707107 +4767,0.707107,0.000000,0.000000,0.707107 +4768,0.707107,0.000000,0.000000,0.707107 +4769,0.707107,0.000000,0.000000,0.707107 +4770,0.707107,0.000000,0.000000,0.707107 +4771,0.707107,0.000000,0.000000,0.707107 +4772,0.707107,0.000000,0.000000,0.707107 +4773,0.707107,0.000000,0.000000,0.707107 +4774,0.707107,0.000000,0.000000,0.707107 +4775,0.707107,0.000000,0.000000,0.707107 +4776,0.707107,0.000000,0.000000,0.707107 +4777,0.707107,0.000000,0.000000,0.707107 +4778,0.707107,0.000000,0.000000,0.707107 +4779,0.707107,0.000000,0.000000,0.707107 +4780,0.707107,0.000000,0.000000,0.707107 +4781,0.707107,0.000000,0.000000,0.707107 +4782,0.707107,0.000000,0.000000,0.707107 +4783,0.707107,0.000000,0.000000,0.707107 +4784,0.707107,0.000000,0.000000,0.707107 +4785,0.707107,0.000000,0.000000,0.707107 +4786,0.707107,0.000000,0.000000,0.707107 +4787,0.707107,0.000000,0.000000,0.707107 +4788,0.707107,0.000000,0.000000,0.707107 +4789,0.707107,0.000000,0.000000,0.707107 +4790,0.707107,0.000000,0.000000,0.707107 +4791,0.707107,0.000000,0.000000,0.707107 +4792,0.707107,0.000000,0.000000,0.707107 +4793,0.707107,0.000000,0.000000,0.707107 +4794,0.707107,0.000000,0.000000,0.707107 +4795,0.707107,0.000000,0.000000,0.707107 +4796,0.707107,0.000000,0.000000,0.707107 +4797,0.707107,0.000000,0.000000,0.707107 +4798,0.707107,0.000000,0.000000,0.707107 +4799,0.707107,0.000000,0.000000,0.707107 +4800,0.707107,0.000000,0.000000,0.707107 +4801,0.707107,0.000000,0.000000,0.707107 +4802,0.707107,0.000000,0.000000,0.707107 +4803,0.707107,0.000000,0.000000,0.707107 +4804,0.707107,0.000000,0.000000,0.707107 +4805,0.707107,0.000000,0.000000,0.707107 +4806,0.707107,0.000000,0.000000,0.707107 +4807,0.707107,0.000000,0.000000,0.707107 +4808,0.707107,0.000000,0.000000,0.707107 +4809,0.707107,0.000000,0.000000,0.707107 +4810,0.707107,0.000000,0.000000,0.707107 +4811,0.707107,0.000000,0.000000,0.707107 +4812,0.707107,0.000000,0.000000,0.707107 +4813,0.707107,0.000000,0.000000,0.707107 +4814,0.707107,0.000000,0.000000,0.707107 +4815,0.707107,0.000000,0.000000,0.707107 +4816,0.707107,0.000000,0.000000,0.707107 +4817,0.707107,0.000000,0.000000,0.707107 +4818,0.707107,0.000000,0.000000,0.707107 +4819,0.707107,0.000000,0.000000,0.707107 +4820,0.707107,0.000000,0.000000,0.707107 +4821,0.707107,0.000000,0.000000,0.707107 +4822,0.707107,0.000000,0.000000,0.707107 +4823,0.707107,0.000000,0.000000,0.707107 +4824,0.707107,0.000000,0.000000,0.707107 +4825,0.707107,0.000000,0.000000,0.707107 +4826,0.707107,0.000000,0.000000,0.707107 +4827,0.707107,0.000000,0.000000,0.707107 +4828,0.707107,0.000000,0.000000,0.707107 +4829,0.707107,0.000000,0.000000,0.707107 +4830,0.707107,0.000000,0.000000,0.707107 +4831,0.707107,0.000000,0.000000,0.707107 +4832,0.707107,0.000000,0.000000,0.707107 +4833,0.707107,0.000000,0.000000,0.707107 +4834,0.707107,0.000000,0.000000,0.707107 +4835,0.707107,0.000000,0.000000,0.707107 +4836,0.707107,0.000000,0.000000,0.707107 +4837,0.707107,0.000000,0.000000,0.707107 +4838,0.707107,0.000000,0.000000,0.707107 +4839,0.707107,0.000000,0.000000,0.707107 +4840,0.707107,0.000000,0.000000,0.707107 +4841,0.707107,0.000000,0.000000,0.707107 +4842,0.707107,0.000000,0.000000,0.707107 +4843,0.707107,0.000000,0.000000,0.707107 +4844,0.707107,0.000000,0.000000,0.707107 +4845,0.707107,0.000000,0.000000,0.707107 +4846,0.707107,0.000000,0.000000,0.707107 +4847,0.707107,0.000000,0.000000,0.707107 +4848,0.707107,0.000000,0.000000,0.707107 +4849,0.707107,0.000000,0.000000,0.707107 +4850,0.707107,0.000000,0.000000,0.707107 +4851,0.707107,0.000000,0.000000,0.707107 +4852,0.707107,0.000000,0.000000,0.707107 +4853,0.707107,0.000000,0.000000,0.707107 +4854,0.707107,0.000000,0.000000,0.707107 +4855,0.707107,0.000000,0.000000,0.707107 +4856,0.707107,0.000000,0.000000,0.707107 +4857,0.707107,0.000000,0.000000,0.707107 +4858,0.707107,0.000000,0.000000,0.707107 +4859,0.707107,0.000000,0.000000,0.707107 +4860,0.707107,0.000000,0.000000,0.707107 +4861,0.707107,0.000000,0.000000,0.707107 +4862,0.707107,0.000000,0.000000,0.707107 +4863,0.707107,0.000000,0.000000,0.707107 +4864,0.707107,0.000000,0.000000,0.707107 +4865,0.707107,0.000000,0.000000,0.707107 +4866,0.707107,0.000000,0.000000,0.707107 +4867,0.707107,0.000000,0.000000,0.707107 +4868,0.707107,0.000000,0.000000,0.707107 +4869,0.707107,0.000000,0.000000,0.707107 +4870,0.707107,0.000000,0.000000,0.707107 +4871,0.707107,0.000000,0.000000,0.707107 +4872,0.707107,0.000000,0.000000,0.707107 +4873,0.707107,0.000000,0.000000,0.707107 +4874,0.707107,0.000000,0.000000,0.707107 +4875,0.707107,0.000000,0.000000,0.707107 +4876,0.707107,0.000000,0.000000,0.707107 +4877,0.707107,0.000000,0.000000,0.707107 +4878,0.707107,0.000000,0.000000,0.707107 +4879,0.707107,0.000000,0.000000,0.707107 +4880,0.707107,0.000000,0.000000,0.707107 +4881,0.707107,0.000000,0.000000,0.707107 +4882,0.707107,0.000000,0.000000,0.707107 +4883,0.707107,0.000000,0.000000,0.707107 +4884,0.707107,0.000000,0.000000,0.707107 +4885,0.707107,0.000000,0.000000,0.707107 +4886,0.707107,0.000000,0.000000,0.707107 +4887,0.707107,0.000000,0.000000,0.707107 +4888,0.707107,0.000000,0.000000,0.707107 +4889,0.707107,0.000000,0.000000,0.707107 +4890,0.707107,0.000000,0.000000,0.707107 +4891,0.707107,0.000000,0.000000,0.707107 +4892,0.707107,0.000000,0.000000,0.707107 +4893,0.707107,0.000000,0.000000,0.707107 +4894,0.707107,0.000000,0.000000,0.707107 +4895,0.707107,0.000000,0.000000,0.707107 +4896,0.707107,0.000000,0.000000,0.707107 +4897,0.707107,0.000000,0.000000,0.707107 +4898,0.707107,0.000000,0.000000,0.707107 +4899,0.707107,0.000000,0.000000,0.707107 +4900,0.707107,0.000000,0.000000,0.707107 +4901,0.707107,0.000000,0.000000,0.707107 +4902,0.707107,0.000000,0.000000,0.707107 +4903,0.707107,0.000000,0.000000,0.707107 +4904,0.707107,0.000000,0.000000,0.707107 +4905,0.707107,0.000000,0.000000,0.707107 +4906,0.707107,0.000000,0.000000,0.707107 +4907,0.707107,0.000000,0.000000,0.707107 +4908,0.707107,0.000000,0.000000,0.707107 +4909,0.707107,0.000000,0.000000,0.707107 +4910,0.707107,0.000000,0.000000,0.707107 +4911,0.707107,0.000000,0.000000,0.707107 +4912,0.707107,0.000000,0.000000,0.707107 +4913,0.707107,0.000000,0.000000,0.707107 +4914,0.707107,0.000000,0.000000,0.707107 +4915,0.707107,0.000000,0.000000,0.707107 +4916,0.707107,0.000000,0.000000,0.707107 +4917,0.707107,0.000000,0.000000,0.707107 +4918,0.707107,0.000000,0.000000,0.707107 +4919,0.707107,0.000000,0.000000,0.707107 +4920,0.707107,0.000000,0.000000,0.707107 +4921,0.707107,0.000000,0.000000,0.707107 +4922,0.707107,0.000000,0.000000,0.707107 +4923,0.707107,0.000000,0.000000,0.707107 +4924,0.707107,0.000000,0.000000,0.707107 +4925,0.707107,0.000000,0.000000,0.707107 +4926,0.707107,0.000000,0.000000,0.707107 +4927,0.707107,0.000000,0.000000,0.707107 +4928,0.707107,0.000000,0.000000,0.707107 +4929,0.707107,0.000000,0.000000,0.707107 +4930,0.707107,0.000000,0.000000,0.707107 +4931,0.707107,0.000000,0.000000,0.707107 +4932,0.707107,0.000000,0.000000,0.707107 +4933,0.707107,0.000000,0.000000,0.707107 +4934,0.707107,0.000000,0.000000,0.707107 +4935,0.707107,0.000000,0.000000,0.707107 +4936,0.707107,0.000000,0.000000,0.707107 +4937,0.707107,0.000000,0.000000,0.707107 +4938,0.707107,0.000000,0.000000,0.707107 +4939,0.707107,0.000000,0.000000,0.707107 +4940,0.707107,0.000000,0.000000,0.707107 +4941,0.707107,0.000000,0.000000,0.707107 +4942,0.707107,0.000000,0.000000,0.707107 +4943,0.707107,0.000000,0.000000,0.707107 +4944,0.707107,0.000000,0.000000,0.707107 +4945,0.707107,0.000000,0.000000,0.707107 +4946,0.707107,0.000000,0.000000,0.707107 +4947,0.707107,0.000000,0.000000,0.707107 +4948,0.707107,0.000000,0.000000,0.707107 +4949,0.707107,0.000000,0.000000,0.707107 +4950,0.707107,0.000000,0.000000,0.707107 +4951,0.707107,0.000000,0.000000,0.707107 +4952,0.707107,0.000000,0.000000,0.707107 +4953,0.707107,0.000000,0.000000,0.707107 +4954,0.707107,0.000000,0.000000,0.707107 +4955,0.707107,0.000000,0.000000,0.707107 +4956,0.707107,0.000000,0.000000,0.707107 +4957,0.707107,0.000000,0.000000,0.707107 +4958,0.707107,0.000000,0.000000,0.707107 +4959,0.707107,0.000000,0.000000,0.707107 +4960,0.707107,0.000000,0.000000,0.707107 +4961,0.707107,0.000000,0.000000,0.707107 +4962,0.707107,0.000000,0.000000,0.707107 +4963,0.707107,0.000000,0.000000,0.707107 +4964,0.707107,0.000000,0.000000,0.707107 +4965,0.707107,0.000000,0.000000,0.707107 +4966,0.707107,0.000000,0.000000,0.707107 +4967,0.707107,0.000000,0.000000,0.707107 +4968,0.707107,0.000000,0.000000,0.707107 +4969,0.707107,0.000000,0.000000,0.707107 +4970,0.707107,0.000000,0.000000,0.707107 +4971,0.707107,0.000000,0.000000,0.707107 +4972,0.707107,0.000000,0.000000,0.707107 +4973,0.707107,0.000000,0.000000,0.707107 +4974,0.707107,0.000000,0.000000,0.707107 +4975,0.707107,0.000000,0.000000,0.707107 +4976,0.707107,0.000000,0.000000,0.707107 +4977,0.707107,0.000000,0.000000,0.707107 +4978,0.707107,0.000000,0.000000,0.707107 +4979,0.707107,0.000000,0.000000,0.707107 +4980,0.707107,0.000000,0.000000,0.707107 +4981,0.707107,0.000000,0.000000,0.707107 +4982,0.707107,0.000000,0.000000,0.707107 +4983,0.707107,0.000000,0.000000,0.707107 +4984,0.707107,0.000000,0.000000,0.707107 +4985,0.707107,0.000000,0.000000,0.707107 +4986,0.707107,0.000000,0.000000,0.707107 +4987,0.707107,0.000000,0.000000,0.707107 +4988,0.707107,0.000000,0.000000,0.707107 +4989,0.707107,0.000000,0.000000,0.707107 +4990,0.707107,0.000000,0.000000,0.707107 +4991,0.707107,0.000000,0.000000,0.707107 +4992,0.707107,0.000000,0.000000,0.707107 +4993,0.707107,0.000000,0.000000,0.707107 +4994,0.707107,0.000000,0.000000,0.707107 +4995,0.707107,0.000000,0.000000,0.707107 +4996,0.707107,0.000000,0.000000,0.707107 +4997,0.707107,0.000000,0.000000,0.707107 +4998,0.707107,0.000000,0.000000,0.707107 +4999,0.707107,0.000000,0.000000,0.707107 +5000,0.707107,0.000000,0.000000,0.707107 +5001,0.707107,0.000000,0.000000,0.707107 +5002,0.707107,0.000000,0.000000,0.707107 +5003,0.707107,0.000000,0.000000,0.707107 +5004,0.707107,0.000000,0.000000,0.707107 +5005,0.707107,0.000000,0.000000,0.707107 +5006,0.707107,0.000000,0.000000,0.707107 +5007,0.707107,0.000000,0.000000,0.707107 +5008,0.707107,0.000000,0.000000,0.707107 +5009,0.707107,0.000000,0.000000,0.707107 +5010,0.707107,0.000000,0.000000,0.707107 +5011,0.707107,0.000000,0.000000,0.707107 +5012,0.707107,0.000000,0.000000,0.707107 +5013,0.707107,0.000000,0.000000,0.707107 +5014,0.707107,0.000000,0.000000,0.707107 +5015,0.707107,0.000000,0.000000,0.707107 +5016,0.707107,0.000000,0.000000,0.707107 +5017,0.707107,0.000000,0.000000,0.707107 +5018,0.707107,0.000000,0.000000,0.707107 +5019,0.707107,0.000000,0.000000,0.707107 +5020,0.707107,0.000000,0.000000,0.707107 +5021,0.707107,0.000000,0.000000,0.707107 +5022,0.707107,0.000000,0.000000,0.707107 +5023,0.707107,0.000000,0.000000,0.707107 +5024,0.707107,0.000000,0.000000,0.707107 +5025,0.707107,0.000000,0.000000,0.707107 +5026,0.707107,0.000000,0.000000,0.707107 +5027,0.707107,0.000000,0.000000,0.707107 +5028,0.707107,0.000000,0.000000,0.707107 +5029,0.707107,0.000000,0.000000,0.707107 +5030,0.707107,0.000000,0.000000,0.707107 +5031,0.707107,0.000000,0.000000,0.707107 +5032,0.707107,0.000000,0.000000,0.707107 +5033,0.707107,0.000000,0.000000,0.707107 +5034,0.707107,0.000000,0.000000,0.707107 +5035,0.707107,0.000000,0.000000,0.707107 +5036,0.707107,0.000000,0.000000,0.707107 +5037,0.707107,0.000000,0.000000,0.707107 +5038,0.707107,0.000000,0.000000,0.707107 +5039,0.707107,0.000000,0.000000,0.707107 +5040,0.707107,0.000000,0.000000,0.707107 +5041,0.707107,0.000000,0.000000,0.707107 +5042,0.707107,0.000000,0.000000,0.707107 +5043,0.707107,0.000000,0.000000,0.707107 +5044,0.707107,0.000000,0.000000,0.707107 +5045,0.707107,0.000000,0.000000,0.707107 +5046,0.707107,0.000000,0.000000,0.707107 +5047,0.707107,0.000000,0.000000,0.707107 +5048,0.707107,0.000000,0.000000,0.707107 +5049,0.707107,0.000000,0.000000,0.707107 +5050,0.707107,0.000000,0.000000,0.707107 +5051,0.707107,0.000000,0.000000,0.707107 +5052,0.707107,0.000000,0.000000,0.707107 +5053,0.707107,0.000000,0.000000,0.707107 +5054,0.707107,0.000000,0.000000,0.707107 +5055,0.707107,0.000000,0.000000,0.707107 +5056,0.707107,0.000000,0.000000,0.707107 +5057,0.707107,0.000000,0.000000,0.707107 +5058,0.707107,0.000000,0.000000,0.707107 +5059,0.707107,0.000000,0.000000,0.707107 +5060,0.707107,0.000000,0.000000,0.707107 +5061,0.707107,0.000000,0.000000,0.707107 +5062,0.707107,0.000000,0.000000,0.707107 +5063,0.707107,0.000000,0.000000,0.707107 +5064,0.707107,0.000000,0.000000,0.707107 +5065,0.707107,0.000000,0.000000,0.707107 +5066,0.707107,0.000000,0.000000,0.707107 +5067,0.707107,0.000000,0.000000,0.707107 +5068,0.707107,0.000000,0.000000,0.707107 +5069,0.707107,0.000000,0.000000,0.707107 +5070,0.707107,0.000000,0.000000,0.707107 +5071,0.707107,0.000000,0.000000,0.707107 +5072,0.707107,0.000000,0.000000,0.707107 +5073,0.707107,0.000000,0.000000,0.707107 +5074,0.707107,0.000000,0.000000,0.707107 +5075,0.707107,0.000000,0.000000,0.707107 +5076,0.707107,0.000000,0.000000,0.707107 +5077,0.707107,0.000000,0.000000,0.707107 +5078,0.707107,0.000000,0.000000,0.707107 +5079,0.707107,0.000000,0.000000,0.707107 +5080,0.707107,0.000000,0.000000,0.707107 +5081,0.707107,0.000000,0.000000,0.707107 +5082,0.707107,0.000000,0.000000,0.707107 +5083,0.707107,0.000000,0.000000,0.707107 +5084,0.707107,0.000000,0.000000,0.707107 +5085,0.707107,0.000000,0.000000,0.707107 +5086,0.707107,0.000000,0.000000,0.707107 +5087,0.707107,0.000000,0.000000,0.707107 +5088,0.707107,0.000000,0.000000,0.707107 +5089,0.707107,0.000000,0.000000,0.707107 +5090,0.707107,0.000000,0.000000,0.707107 +5091,0.707107,0.000000,0.000000,0.707107 +5092,0.707107,0.000000,0.000000,0.707107 +5093,0.707107,0.000000,0.000000,0.707107 +5094,0.707107,0.000000,0.000000,0.707107 +5095,0.707107,0.000000,0.000000,0.707107 +5096,0.707107,0.000000,0.000000,0.707107 +5097,0.707107,0.000000,0.000000,0.707107 +5098,0.707107,0.000000,0.000000,0.707107 +5099,0.707107,0.000000,0.000000,0.707107 +5100,0.707107,0.000000,0.000000,0.707107 +5101,0.707107,0.000000,0.000000,0.707107 +5102,0.707107,0.000000,0.000000,0.707107 +5103,0.707107,0.000000,0.000000,0.707107 +5104,0.707107,0.000000,0.000000,0.707107 +5105,0.707107,0.000000,0.000000,0.707107 +5106,0.707107,0.000000,0.000000,0.707107 +5107,0.707107,0.000000,0.000000,0.707107 +5108,0.707107,0.000000,0.000000,0.707107 +5109,0.707107,0.000000,0.000000,0.707107 +5110,0.707107,0.000000,0.000000,0.707107 +5111,0.707107,0.000000,0.000000,0.707107 +5112,0.707107,0.000000,0.000000,0.707107 +5113,0.707107,0.000000,0.000000,0.707107 +5114,0.707107,0.000000,0.000000,0.707107 +5115,0.707107,0.000000,0.000000,0.707107 +5116,0.707107,0.000000,0.000000,0.707107 +5117,0.707107,0.000000,0.000000,0.707107 +5118,0.707107,0.000000,0.000000,0.707107 +5119,0.707107,0.000000,0.000000,0.707107 +5120,0.707107,0.000000,0.000000,0.707107 +5121,0.707107,0.000000,0.000000,0.707107 +5122,0.707107,0.000000,0.000000,0.707107 +5123,0.707107,0.000000,0.000000,0.707107 +5124,0.707107,0.000000,0.000000,0.707107 +5125,0.707107,0.000000,0.000000,0.707107 +5126,0.707107,0.000000,0.000000,0.707107 +5127,0.707107,0.000000,0.000000,0.707107 +5128,0.707107,0.000000,0.000000,0.707107 +5129,0.707107,0.000000,0.000000,0.707107 +5130,0.707107,0.000000,0.000000,0.707107 +5131,0.707107,0.000000,0.000000,0.707107 +5132,0.707107,0.000000,0.000000,0.707107 +5133,0.707107,0.000000,0.000000,0.707107 +5134,0.707107,0.000000,0.000000,0.707107 +5135,0.707107,0.000000,0.000000,0.707107 +5136,0.707107,0.000000,0.000000,0.707107 +5137,0.707107,0.000000,0.000000,0.707107 +5138,0.707107,0.000000,0.000000,0.707107 +5139,0.707107,0.000000,0.000000,0.707107 +5140,0.707107,0.000000,0.000000,0.707107 +5141,0.707107,0.000000,0.000000,0.707107 +5142,0.707107,0.000000,0.000000,0.707107 +5143,0.707107,0.000000,0.000000,0.707107 +5144,0.707107,0.000000,0.000000,0.707107 +5145,0.707107,0.000000,0.000000,0.707107 +5146,0.707107,0.000000,0.000000,0.707107 +5147,0.707107,0.000000,0.000000,0.707107 +5148,0.707107,0.000000,0.000000,0.707107 +5149,0.707107,0.000000,0.000000,0.707107 +5150,0.707107,0.000000,0.000000,0.707107 +5151,0.707107,0.000000,0.000000,0.707107 +5152,0.707107,0.000000,0.000000,0.707107 +5153,0.707107,0.000000,0.000000,0.707107 +5154,0.707107,0.000000,0.000000,0.707107 +5155,0.707107,0.000000,0.000000,0.707107 +5156,0.707107,0.000000,0.000000,0.707107 +5157,0.707107,0.000000,0.000000,0.707107 +5158,0.707107,0.000000,0.000000,0.707107 +5159,0.707107,0.000000,0.000000,0.707107 +5160,0.707107,0.000000,0.000000,0.707107 +5161,0.707107,0.000000,0.000000,0.707107 +5162,0.707107,0.000000,0.000000,0.707107 +5163,0.707107,0.000000,0.000000,0.707107 +5164,0.707107,0.000000,0.000000,0.707107 +5165,0.707107,0.000000,0.000000,0.707107 +5166,0.707107,0.000000,0.000000,0.707107 +5167,0.707107,0.000000,0.000000,0.707107 +5168,0.707107,0.000000,0.000000,0.707107 +5169,0.707107,0.000000,0.000000,0.707107 +5170,0.707107,0.000000,0.000000,0.707107 +5171,0.707107,0.000000,0.000000,0.707107 +5172,0.707107,0.000000,0.000000,0.707107 +5173,0.707107,0.000000,0.000000,0.707107 +5174,0.707107,0.000000,0.000000,0.707107 +5175,0.707107,0.000000,0.000000,0.707107 +5176,0.707107,0.000000,0.000000,0.707107 +5177,0.707107,0.000000,0.000000,0.707107 +5178,0.707107,0.000000,0.000000,0.707107 +5179,0.707107,0.000000,0.000000,0.707107 +5180,0.707107,0.000000,0.000000,0.707107 +5181,0.707107,0.000000,0.000000,0.707107 +5182,0.707107,0.000000,0.000000,0.707107 +5183,0.707107,0.000000,0.000000,0.707107 +5184,0.707107,0.000000,0.000000,0.707107 +5185,0.707107,0.000000,0.000000,0.707107 +5186,0.707107,0.000000,0.000000,0.707107 +5187,0.707107,0.000000,0.000000,0.707107 +5188,0.707107,0.000000,0.000000,0.707107 +5189,0.707107,0.000000,0.000000,0.707107 +5190,0.707107,0.000000,0.000000,0.707107 +5191,0.707107,0.000000,0.000000,0.707107 +5192,0.707107,0.000000,0.000000,0.707107 +5193,0.707107,0.000000,0.000000,0.707107 +5194,0.707107,0.000000,0.000000,0.707107 +5195,0.707107,0.000000,0.000000,0.707107 +5196,0.707107,0.000000,0.000000,0.707107 +5197,0.707107,0.000000,0.000000,0.707107 +5198,0.707107,0.000000,0.000000,0.707107 +5199,0.707107,0.000000,0.000000,0.707107 +5200,0.707107,0.000000,0.000000,0.707107 +5201,0.707107,0.000000,0.000000,0.707107 +5202,0.707107,0.000000,0.000000,0.707107 +5203,0.707107,0.000000,0.000000,0.707107 +5204,0.707107,0.000000,0.000000,0.707107 +5205,0.707107,0.000000,0.000000,0.707107 +5206,0.707107,0.000000,0.000000,0.707107 +5207,0.707107,0.000000,0.000000,0.707107 +5208,0.707107,0.000000,0.000000,0.707107 +5209,0.707107,0.000000,0.000000,0.707107 +5210,0.707107,0.000000,0.000000,0.707107 +5211,0.707107,0.000000,0.000000,0.707107 +5212,0.707107,0.000000,0.000000,0.707107 +5213,0.707107,0.000000,0.000000,0.707107 +5214,0.707107,0.000000,0.000000,0.707107 +5215,0.707107,0.000000,0.000000,0.707107 +5216,0.707107,0.000000,0.000000,0.707107 +5217,0.707107,0.000000,0.000000,0.707107 +5218,0.707107,0.000000,0.000000,0.707107 +5219,0.707107,0.000000,0.000000,0.707107 +5220,0.707107,0.000000,0.000000,0.707107 +5221,0.707107,0.000000,0.000000,0.707107 +5222,0.707107,0.000000,0.000000,0.707107 +5223,0.707107,0.000000,0.000000,0.707107 +5224,0.707107,0.000000,0.000000,0.707107 +5225,0.707107,0.000000,0.000000,0.707107 +5226,0.707107,0.000000,0.000000,0.707107 +5227,0.707107,0.000000,0.000000,0.707107 +5228,0.707107,0.000000,0.000000,0.707107 +5229,0.707107,0.000000,0.000000,0.707107 +5230,0.707107,0.000000,0.000000,0.707107 +5231,0.707107,0.000000,0.000000,0.707107 +5232,0.707107,0.000000,0.000000,0.707107 +5233,0.707107,0.000000,0.000000,0.707107 +5234,0.707107,0.000000,0.000000,0.707107 +5235,0.707107,0.000000,0.000000,0.707107 +5236,0.707107,0.000000,0.000000,0.707107 +5237,0.707107,0.000000,0.000000,0.707107 +5238,0.707107,0.000000,0.000000,0.707107 +5239,0.707107,0.000000,0.000000,0.707107 +5240,0.707107,0.000000,0.000000,0.707107 +5241,0.707107,0.000000,0.000000,0.707107 +5242,0.707107,0.000000,0.000000,0.707107 +5243,0.707107,0.000000,0.000000,0.707107 +5244,0.707107,0.000000,0.000000,0.707107 +5245,0.707107,0.000000,0.000000,0.707107 +5246,0.707107,0.000000,0.000000,0.707107 +5247,0.707107,0.000000,0.000000,0.707107 +5248,0.707107,0.000000,0.000000,0.707107 +5249,0.707107,0.000000,0.000000,0.707107 +5250,0.707107,0.000000,0.000000,0.707107 +5251,0.707107,0.000000,0.000000,0.707107 +5252,0.707107,0.000000,0.000000,0.707107 +5253,0.707107,0.000000,0.000000,0.707107 +5254,0.707107,0.000000,0.000000,0.707107 +5255,0.707107,0.000000,0.000000,0.707107 +5256,0.707107,0.000000,0.000000,0.707107 +5257,0.707107,0.000000,0.000000,0.707107 +5258,0.707107,0.000000,0.000000,0.707107 +5259,0.707107,0.000000,0.000000,0.707107 +5260,0.707107,0.000000,0.000000,0.707107 +5261,0.707107,0.000000,0.000000,0.707107 +5262,0.707107,0.000000,0.000000,0.707107 +5263,0.707107,0.000000,0.000000,0.707107 +5264,0.707107,0.000000,0.000000,0.707107 +5265,0.707107,0.000000,0.000000,0.707107 +5266,0.707107,0.000000,0.000000,0.707107 +5267,0.707107,0.000000,0.000000,0.707107 +5268,0.707107,0.000000,0.000000,0.707107 +5269,0.707107,0.000000,0.000000,0.707107 +5270,0.707107,0.000000,0.000000,0.707107 +5271,0.707107,0.000000,0.000000,0.707107 +5272,0.707107,0.000000,0.000000,0.707107 +5273,0.707107,0.000000,0.000000,0.707107 +5274,0.707107,0.000000,0.000000,0.707107 +5275,0.707107,0.000000,0.000000,0.707107 +5276,0.707107,0.000000,0.000000,0.707107 +5277,0.707107,0.000000,0.000000,0.707107 +5278,0.707107,0.000000,0.000000,0.707107 +5279,0.707107,0.000000,0.000000,0.707107 +5280,0.707107,0.000000,0.000000,0.707107 +5281,0.707107,0.000000,0.000000,0.707107 +5282,0.707107,0.000000,0.000000,0.707107 +5283,0.707107,0.000000,0.000000,0.707107 +5284,0.707107,0.000000,0.000000,0.707107 +5285,0.707107,0.000000,0.000000,0.707107 +5286,0.707107,0.000000,0.000000,0.707107 +5287,0.707107,0.000000,0.000000,0.707107 +5288,0.707107,0.000000,0.000000,0.707107 +5289,0.707107,0.000000,0.000000,0.707107 +5290,0.707107,0.000000,0.000000,0.707107 +5291,0.707107,0.000000,0.000000,0.707107 +5292,0.707107,0.000000,0.000000,0.707107 +5293,0.707107,0.000000,0.000000,0.707107 +5294,0.707107,0.000000,0.000000,0.707107 +5295,0.707107,0.000000,0.000000,0.707107 +5296,0.707107,0.000000,0.000000,0.707107 +5297,0.707107,0.000000,0.000000,0.707107 +5298,0.707107,0.000000,0.000000,0.707107 +5299,0.707107,0.000000,0.000000,0.707107 +5300,0.707107,0.000000,0.000000,0.707107 +5301,0.707107,0.000000,0.000000,0.707107 +5302,0.707107,0.000000,0.000000,0.707107 +5303,0.707107,0.000000,0.000000,0.707107 +5304,0.707107,0.000000,0.000000,0.707107 +5305,0.707107,0.000000,0.000000,0.707107 +5306,0.707107,0.000000,0.000000,0.707107 +5307,0.707107,0.000000,0.000000,0.707107 +5308,0.707107,0.000000,0.000000,0.707107 +5309,0.707107,0.000000,0.000000,0.707107 +5310,0.707107,0.000000,0.000000,0.707107 +5311,0.707107,0.000000,0.000000,0.707107 +5312,0.707107,0.000000,0.000000,0.707107 +5313,0.707107,0.000000,0.000000,0.707107 +5314,0.707107,0.000000,0.000000,0.707107 +5315,0.707107,0.000000,0.000000,0.707107 +5316,0.707107,0.000000,0.000000,0.707107 +5317,0.707107,0.000000,0.000000,0.707107 +5318,0.707107,0.000000,0.000000,0.707107 +5319,0.707107,0.000000,0.000000,0.707107 +5320,0.707107,0.000000,0.000000,0.707107 +5321,0.707107,0.000000,0.000000,0.707107 +5322,0.707107,0.000000,0.000000,0.707107 +5323,0.707107,0.000000,0.000000,0.707107 +5324,0.707107,0.000000,0.000000,0.707107 +5325,0.707107,0.000000,0.000000,0.707107 +5326,0.707107,0.000000,0.000000,0.707107 +5327,0.707107,0.000000,0.000000,0.707107 +5328,0.707107,0.000000,0.000000,0.707107 +5329,0.707107,0.000000,0.000000,0.707107 +5330,0.707107,0.000000,0.000000,0.707107 +5331,0.707107,0.000000,0.000000,0.707107 +5332,0.707107,0.000000,0.000000,0.707107 +5333,0.707107,0.000000,0.000000,0.707107 +5334,0.707107,0.000000,0.000000,0.707107 +5335,0.707107,0.000000,0.000000,0.707107 +5336,0.707107,0.000000,0.000000,0.707107 +5337,0.707107,0.000000,0.000000,0.707107 +5338,0.707107,0.000000,0.000000,0.707107 +5339,0.707107,0.000000,0.000000,0.707107 +5340,0.707107,0.000000,0.000000,0.707107 +5341,0.707107,0.000000,0.000000,0.707107 +5342,0.707107,0.000000,0.000000,0.707107 +5343,0.707107,0.000000,0.000000,0.707107 +5344,0.707107,0.000000,0.000000,0.707107 +5345,0.707107,0.000000,0.000000,0.707107 +5346,0.707107,0.000000,0.000000,0.707107 +5347,0.707107,0.000000,0.000000,0.707107 +5348,0.707107,0.000000,0.000000,0.707107 +5349,0.707107,0.000000,0.000000,0.707107 +5350,0.707107,0.000000,0.000000,0.707107 +5351,0.707107,0.000000,0.000000,0.707107 +5352,0.707107,0.000000,0.000000,0.707107 +5353,0.707107,0.000000,0.000000,0.707107 +5354,0.707107,0.000000,0.000000,0.707107 +5355,0.707107,0.000000,0.000000,0.707107 +5356,0.707107,0.000000,0.000000,0.707107 +5357,0.707107,0.000000,0.000000,0.707107 +5358,0.707107,0.000000,0.000000,0.707107 +5359,0.707107,0.000000,0.000000,0.707107 +5360,0.707107,0.000000,0.000000,0.707107 +5361,0.707107,0.000000,0.000000,0.707107 +5362,0.707107,0.000000,0.000000,0.707107 +5363,0.707107,0.000000,0.000000,0.707107 +5364,0.707107,0.000000,0.000000,0.707107 +5365,0.707107,0.000000,0.000000,0.707107 +5366,0.707107,0.000000,0.000000,0.707107 +5367,0.707107,0.000000,0.000000,0.707107 +5368,0.707107,0.000000,0.000000,0.707107 +5369,0.707107,0.000000,0.000000,0.707107 +5370,0.707107,0.000000,0.000000,0.707107 +5371,0.707107,0.000000,0.000000,0.707107 +5372,0.707107,0.000000,0.000000,0.707107 +5373,0.707107,0.000000,0.000000,0.707107 +5374,0.707107,0.000000,0.000000,0.707107 +5375,0.707107,0.000000,0.000000,0.707107 +5376,0.707107,0.000000,0.000000,0.707107 +5377,0.707107,0.000000,0.000000,0.707107 +5378,0.707107,0.000000,0.000000,0.707107 +5379,0.707107,0.000000,0.000000,0.707107 +5380,0.707107,0.000000,0.000000,0.707107 +5381,0.707107,0.000000,0.000000,0.707107 +5382,0.707107,0.000000,0.000000,0.707107 +5383,0.707107,0.000000,0.000000,0.707107 +5384,0.707107,0.000000,0.000000,0.707107 +5385,0.707107,0.000000,0.000000,0.707107 +5386,0.707107,0.000000,0.000000,0.707107 +5387,0.707107,0.000000,0.000000,0.707107 +5388,0.707107,0.000000,0.000000,0.707107 +5389,0.707107,0.000000,0.000000,0.707107 +5390,0.707107,0.000000,0.000000,0.707107 +5391,0.707107,0.000000,0.000000,0.707107 +5392,0.707107,0.000000,0.000000,0.707107 +5393,0.707107,0.000000,0.000000,0.707107 +5394,0.707107,0.000000,0.000000,0.707107 +5395,0.707107,0.000000,0.000000,0.707107 +5396,0.707107,0.000000,0.000000,0.707107 +5397,0.707107,0.000000,0.000000,0.707107 +5398,0.707107,0.000000,0.000000,0.707107 +5399,0.707107,0.000000,0.000000,0.707107 +5400,0.707107,0.000000,0.000000,0.707107 +5401,0.707107,0.000000,0.000000,0.707107 +5402,0.707107,0.000000,0.000000,0.707107 +5403,0.707107,0.000000,0.000000,0.707107 +5404,0.707107,0.000000,0.000000,0.707107 +5405,0.707107,0.000000,0.000000,0.707107 +5406,0.707107,0.000000,0.000000,0.707107 +5407,0.707107,0.000000,0.000000,0.707107 +5408,0.707107,0.000000,0.000000,0.707107 +5409,0.707107,0.000000,0.000000,0.707107 +5410,0.707107,0.000000,0.000000,0.707107 +5411,0.707107,0.000000,0.000000,0.707107 +5412,0.707107,0.000000,0.000000,0.707107 +5413,0.707107,0.000000,0.000000,0.707107 +5414,0.707107,0.000000,0.000000,0.707107 +5415,0.707107,0.000000,0.000000,0.707107 +5416,0.707107,0.000000,0.000000,0.707107 +5417,0.707107,0.000000,0.000000,0.707107 +5418,0.707107,0.000000,0.000000,0.707107 +5419,0.707107,0.000000,0.000000,0.707107 +5420,0.707107,0.000000,0.000000,0.707107 +5421,0.707107,0.000000,0.000000,0.707107 +5422,0.707107,0.000000,0.000000,0.707107 +5423,0.707107,0.000000,0.000000,0.707107 +5424,0.707107,0.000000,0.000000,0.707107 +5425,0.707107,0.000000,0.000000,0.707107 +5426,0.707107,0.000000,0.000000,0.707107 +5427,0.707107,0.000000,0.000000,0.707107 +5428,0.707107,0.000000,0.000000,0.707107 +5429,0.707107,0.000000,0.000000,0.707107 +5430,0.707107,0.000000,0.000000,0.707107 +5431,0.707107,0.000000,0.000000,0.707107 +5432,0.707107,0.000000,0.000000,0.707107 +5433,0.707107,0.000000,0.000000,0.707107 +5434,0.707107,0.000000,0.000000,0.707107 +5435,0.707107,0.000000,0.000000,0.707107 +5436,0.707107,0.000000,0.000000,0.707107 +5437,0.707107,0.000000,0.000000,0.707107 +5438,0.707107,0.000000,0.000000,0.707107 +5439,0.707107,0.000000,0.000000,0.707107 +5440,0.707107,0.000000,0.000000,0.707107 +5441,0.707107,0.000000,0.000000,0.707107 +5442,0.707107,0.000000,0.000000,0.707107 +5443,0.707107,0.000000,0.000000,0.707107 +5444,0.707107,0.000000,0.000000,0.707107 +5445,0.707107,0.000000,0.000000,0.707107 +5446,0.707107,0.000000,0.000000,0.707107 +5447,0.707107,0.000000,0.000000,0.707107 +5448,0.707107,0.000000,0.000000,0.707107 +5449,0.707107,0.000000,0.000000,0.707107 +5450,0.707107,0.000000,0.000000,0.707107 +5451,0.707107,0.000000,0.000000,0.707107 +5452,0.707107,0.000000,0.000000,0.707107 +5453,0.707107,0.000000,0.000000,0.707107 +5454,0.707107,0.000000,0.000000,0.707107 +5455,0.707107,0.000000,0.000000,0.707107 +5456,0.707107,0.000000,0.000000,0.707107 +5457,0.707107,0.000000,0.000000,0.707107 +5458,0.707107,0.000000,0.000000,0.707107 +5459,0.707107,0.000000,0.000000,0.707107 +5460,0.707107,0.000000,0.000000,0.707107 +5461,0.707107,0.000000,0.000000,0.707107 +5462,0.707107,0.000000,0.000000,0.707107 +5463,0.707107,0.000000,0.000000,0.707107 +5464,0.707107,0.000000,0.000000,0.707107 +5465,0.707107,0.000000,0.000000,0.707107 +5466,0.707107,0.000000,0.000000,0.707107 +5467,0.707107,0.000000,0.000000,0.707107 +5468,0.707107,0.000000,0.000000,0.707107 +5469,0.707107,0.000000,0.000000,0.707107 +5470,0.707107,0.000000,0.000000,0.707107 +5471,0.707107,0.000000,0.000000,0.707107 +5472,0.707107,0.000000,0.000000,0.707107 +5473,0.707107,0.000000,0.000000,0.707107 +5474,0.707107,0.000000,0.000000,0.707107 +5475,0.707107,0.000000,0.000000,0.707107 +5476,0.707107,0.000000,0.000000,0.707107 +5477,0.707107,0.000000,0.000000,0.707107 +5478,0.707107,0.000000,0.000000,0.707107 +5479,0.707107,0.000000,0.000000,0.707107 +5480,0.707107,0.000000,0.000000,0.707107 +5481,0.707107,0.000000,0.000000,0.707107 +5482,0.707107,0.000000,0.000000,0.707107 +5483,0.707107,0.000000,0.000000,0.707107 +5484,0.707107,0.000000,0.000000,0.707107 +5485,0.707107,0.000000,0.000000,0.707107 +5486,0.707107,0.000000,0.000000,0.707107 +5487,0.707107,0.000000,0.000000,0.707107 +5488,0.707107,0.000000,0.000000,0.707107 +5489,0.707107,0.000000,0.000000,0.707107 +5490,0.707107,0.000000,0.000000,0.707107 +5491,0.707107,0.000000,0.000000,0.707107 +5492,0.707107,0.000000,0.000000,0.707107 +5493,0.707107,0.000000,0.000000,0.707107 +5494,0.707107,0.000000,0.000000,0.707107 +5495,0.707107,0.000000,0.000000,0.707107 +5496,0.707107,0.000000,0.000000,0.707107 +5497,0.707107,0.000000,0.000000,0.707107 +5498,0.707107,0.000000,0.000000,0.707107 +5499,0.707107,0.000000,0.000000,0.707107 +5500,0.707107,0.000000,0.000000,0.707107 +5501,0.707107,0.000000,0.000000,0.707107 +5502,0.707107,0.000000,0.000000,0.707107 +5503,0.707107,0.000000,0.000000,0.707107 +5504,0.707107,0.000000,0.000000,0.707107 +5505,0.707107,0.000000,0.000000,0.707107 +5506,0.707107,0.000000,0.000000,0.707107 +5507,0.707107,0.000000,0.000000,0.707107 +5508,0.707107,0.000000,0.000000,0.707107 +5509,0.707107,0.000000,0.000000,0.707107 +5510,0.707107,0.000000,0.000000,0.707107 +5511,0.707107,0.000000,0.000000,0.707107 +5512,0.707107,0.000000,0.000000,0.707107 +5513,0.707107,0.000000,0.000000,0.707107 +5514,0.707107,0.000000,0.000000,0.707107 +5515,0.707107,0.000000,0.000000,0.707107 +5516,0.707107,0.000000,0.000000,0.707107 +5517,0.707107,0.000000,0.000000,0.707107 +5518,0.707107,0.000000,0.000000,0.707107 +5519,0.707107,0.000000,0.000000,0.707107 +5520,0.707107,0.000000,0.000000,0.707107 +5521,0.707107,0.000000,0.000000,0.707107 +5522,0.707107,0.000000,0.000000,0.707107 +5523,0.707107,0.000000,0.000000,0.707107 +5524,0.707107,0.000000,0.000000,0.707107 +5525,0.707107,0.000000,0.000000,0.707107 +5526,0.707107,0.000000,0.000000,0.707107 +5527,0.707107,0.000000,0.000000,0.707107 +5528,0.707107,0.000000,0.000000,0.707107 +5529,0.707107,0.000000,0.000000,0.707107 +5530,0.707107,0.000000,0.000000,0.707107 +5531,0.707107,0.000000,0.000000,0.707107 +5532,0.707107,0.000000,0.000000,0.707107 +5533,0.707107,0.000000,0.000000,0.707107 +5534,0.707107,0.000000,0.000000,0.707107 +5535,0.707107,0.000000,0.000000,0.707107 +5536,0.707107,0.000000,0.000000,0.707107 +5537,0.707107,0.000000,0.000000,0.707107 +5538,0.707107,0.000000,0.000000,0.707107 +5539,0.707107,0.000000,0.000000,0.707107 +5540,0.707107,0.000000,0.000000,0.707107 +5541,0.707107,0.000000,0.000000,0.707107 +5542,0.707107,0.000000,0.000000,0.707107 +5543,0.707107,0.000000,0.000000,0.707107 +5544,0.707107,0.000000,0.000000,0.707107 +5545,0.707107,0.000000,0.000000,0.707107 +5546,0.707107,0.000000,0.000000,0.707107 +5547,0.707107,0.000000,0.000000,0.707107 +5548,0.707107,0.000000,0.000000,0.707107 +5549,0.707107,0.000000,0.000000,0.707107 +5550,0.707107,0.000000,0.000000,0.707107 +5551,0.707107,0.000000,0.000000,0.707107 +5552,0.707107,0.000000,0.000000,0.707107 +5553,0.707107,0.000000,0.000000,0.707107 +5554,0.707107,0.000000,0.000000,0.707107 +5555,0.707107,0.000000,0.000000,0.707107 +5556,0.707107,0.000000,0.000000,0.707107 +5557,0.707107,0.000000,0.000000,0.707107 +5558,0.707107,0.000000,0.000000,0.707107 +5559,0.707107,0.000000,0.000000,0.707107 +5560,0.707107,0.000000,0.000000,0.707107 +5561,0.707107,0.000000,0.000000,0.707107 +5562,0.707107,0.000000,0.000000,0.707107 +5563,0.707107,0.000000,0.000000,0.707107 +5564,0.707107,0.000000,0.000000,0.707107 +5565,0.707107,0.000000,0.000000,0.707107 +5566,0.707107,0.000000,0.000000,0.707107 +5567,0.707107,0.000000,0.000000,0.707107 +5568,0.707107,0.000000,0.000000,0.707107 +5569,0.707107,0.000000,0.000000,0.707107 +5570,0.707107,0.000000,0.000000,0.707107 +5571,0.707107,0.000000,0.000000,0.707107 +5572,0.707107,0.000000,0.000000,0.707107 +5573,0.707107,0.000000,0.000000,0.707107 +5574,0.707107,0.000000,0.000000,0.707107 +5575,0.707107,0.000000,0.000000,0.707107 +5576,0.707107,0.000000,0.000000,0.707107 +5577,0.707107,0.000000,0.000000,0.707107 +5578,0.707107,0.000000,0.000000,0.707107 +5579,0.707107,0.000000,0.000000,0.707107 +5580,0.707107,0.000000,0.000000,0.707107 +5581,0.707107,0.000000,0.000000,0.707107 +5582,0.707107,0.000000,0.000000,0.707107 +5583,0.707107,0.000000,0.000000,0.707107 +5584,0.707107,0.000000,0.000000,0.707107 +5585,0.707107,0.000000,0.000000,0.707107 +5586,0.707107,0.000000,0.000000,0.707107 +5587,0.707107,0.000000,0.000000,0.707107 +5588,0.707107,0.000000,0.000000,0.707107 +5589,0.707107,0.000000,0.000000,0.707107 +5590,0.707107,0.000000,0.000000,0.707107 +5591,0.707107,0.000000,0.000000,0.707107 +5592,0.707107,0.000000,0.000000,0.707107 +5593,0.707107,0.000000,0.000000,0.707107 +5594,0.707107,0.000000,0.000000,0.707107 +5595,0.707107,0.000000,0.000000,0.707107 +5596,0.707107,0.000000,0.000000,0.707107 +5597,0.707107,0.000000,0.000000,0.707107 +5598,0.707107,0.000000,0.000000,0.707107 +5599,0.707107,0.000000,0.000000,0.707107 +5600,0.707107,0.000000,0.000000,0.707107 +5601,0.707107,0.000000,0.000000,0.707107 +5602,0.707107,0.000000,0.000000,0.707107 +5603,0.707107,0.000000,0.000000,0.707107 +5604,0.707107,0.000000,0.000000,0.707107 +5605,0.707107,0.000000,0.000000,0.707107 +5606,0.707107,0.000000,0.000000,0.707107 +5607,0.707107,0.000000,0.000000,0.707107 +5608,0.707107,0.000000,0.000000,0.707107 +5609,0.707107,0.000000,0.000000,0.707107 +5610,0.707107,0.000000,0.000000,0.707107 +5611,0.707107,0.000000,0.000000,0.707107 +5612,0.707107,0.000000,0.000000,0.707107 +5613,0.707107,0.000000,0.000000,0.707107 +5614,0.707107,0.000000,0.000000,0.707107 +5615,0.707107,0.000000,0.000000,0.707107 +5616,0.707107,0.000000,0.000000,0.707107 +5617,0.707107,0.000000,0.000000,0.707107 +5618,0.707107,0.000000,0.000000,0.707107 +5619,0.707107,0.000000,0.000000,0.707107 +5620,0.707107,0.000000,0.000000,0.707107 +5621,0.707107,0.000000,0.000000,0.707107 +5622,0.707107,0.000000,0.000000,0.707107 +5623,0.707107,0.000000,0.000000,0.707107 +5624,0.707107,0.000000,0.000000,0.707107 +5625,0.707107,0.000000,0.000000,0.707107 +5626,0.707107,0.000000,0.000000,0.707107 +5627,0.707107,0.000000,0.000000,0.707107 +5628,0.707107,0.000000,0.000000,0.707107 +5629,0.707107,0.000000,0.000000,0.707107 +5630,0.707107,0.000000,0.000000,0.707107 +5631,0.707107,0.000000,0.000000,0.707107 +5632,0.707107,0.000000,0.000000,0.707107 +5633,0.707107,0.000000,0.000000,0.707107 +5634,0.707107,0.000000,0.000000,0.707107 +5635,0.707107,0.000000,0.000000,0.707107 +5636,0.707107,0.000000,0.000000,0.707107 +5637,0.707107,0.000000,0.000000,0.707107 +5638,0.707107,0.000000,0.000000,0.707107 +5639,0.707107,0.000000,0.000000,0.707107 +5640,0.707107,0.000000,0.000000,0.707107 +5641,0.707107,0.000000,0.000000,0.707107 +5642,0.707107,0.000000,0.000000,0.707107 +5643,0.707107,0.000000,0.000000,0.707107 +5644,0.707107,0.000000,0.000000,0.707107 +5645,0.707107,0.000000,0.000000,0.707107 +5646,0.707107,0.000000,0.000000,0.707107 +5647,0.707107,0.000000,0.000000,0.707107 +5648,0.707107,0.000000,0.000000,0.707107 +5649,0.707107,0.000000,0.000000,0.707107 +5650,0.707107,0.000000,0.000000,0.707107 +5651,0.707107,0.000000,0.000000,0.707107 +5652,0.707107,0.000000,0.000000,0.707107 +5653,0.707107,0.000000,0.000000,0.707107 +5654,0.707107,0.000000,0.000000,0.707107 +5655,0.707107,0.000000,0.000000,0.707107 +5656,0.707107,0.000000,0.000000,0.707107 +5657,0.707107,0.000000,0.000000,0.707107 +5658,0.707107,0.000000,0.000000,0.707107 +5659,0.707107,0.000000,0.000000,0.707107 +5660,0.707107,0.000000,0.000000,0.707107 +5661,0.707107,0.000000,0.000000,0.707107 +5662,0.707107,0.000000,0.000000,0.707107 +5663,0.707107,0.000000,0.000000,0.707107 +5664,0.707107,0.000000,0.000000,0.707107 +5665,0.707107,0.000000,0.000000,0.707107 +5666,0.707107,0.000000,0.000000,0.707107 +5667,0.707107,0.000000,0.000000,0.707107 +5668,0.707107,0.000000,0.000000,0.707107 +5669,0.707107,0.000000,0.000000,0.707107 +5670,0.707107,0.000000,0.000000,0.707107 +5671,0.707107,0.000000,0.000000,0.707107 +5672,0.707107,0.000000,0.000000,0.707107 +5673,0.707107,0.000000,0.000000,0.707107 +5674,0.707107,0.000000,0.000000,0.707107 +5675,0.707107,0.000000,0.000000,0.707107 +5676,0.707107,0.000000,0.000000,0.707107 +5677,0.707107,0.000000,0.000000,0.707107 +5678,0.707107,0.000000,0.000000,0.707107 +5679,0.707107,0.000000,0.000000,0.707107 +5680,0.707107,0.000000,0.000000,0.707107 +5681,0.707107,0.000000,0.000000,0.707107 +5682,0.707107,0.000000,0.000000,0.707107 +5683,0.707107,0.000000,0.000000,0.707107 +5684,0.707107,0.000000,0.000000,0.707107 +5685,0.707107,0.000000,0.000000,0.707107 +5686,0.707107,0.000000,0.000000,0.707107 +5687,0.707107,0.000000,0.000000,0.707107 +5688,0.707107,0.000000,0.000000,0.707107 +5689,0.707107,0.000000,0.000000,0.707107 +5690,0.707107,0.000000,0.000000,0.707107 +5691,0.707107,0.000000,0.000000,0.707107 +5692,0.707107,0.000000,0.000000,0.707107 +5693,0.707107,0.000000,0.000000,0.707107 +5694,0.707107,0.000000,0.000000,0.707107 +5695,0.707107,0.000000,0.000000,0.707107 +5696,0.707107,0.000000,0.000000,0.707107 +5697,0.707107,0.000000,0.000000,0.707107 +5698,0.707107,0.000000,0.000000,0.707107 +5699,0.707107,0.000000,0.000000,0.707107 +5700,0.707107,0.000000,0.000000,0.707107 +5701,0.707107,0.000000,0.000000,0.707107 +5702,0.707107,0.000000,0.000000,0.707107 +5703,0.707107,0.000000,0.000000,0.707107 +5704,0.707107,0.000000,0.000000,0.707107 +5705,0.707107,0.000000,0.000000,0.707107 +5706,0.707107,0.000000,0.000000,0.707107 +5707,0.707107,0.000000,0.000000,0.707107 +5708,0.707107,0.000000,0.000000,0.707107 +5709,0.707107,0.000000,0.000000,0.707107 +5710,0.707107,0.000000,0.000000,0.707107 +5711,0.707107,0.000000,0.000000,0.707107 +5712,0.707107,0.000000,0.000000,0.707107 +5713,0.707107,0.000000,0.000000,0.707107 +5714,0.707107,0.000000,0.000000,0.707107 +5715,0.707107,0.000000,0.000000,0.707107 +5716,0.707107,0.000000,0.000000,0.707107 +5717,0.707107,0.000000,0.000000,0.707107 +5718,0.707107,0.000000,0.000000,0.707107 +5719,0.707107,0.000000,0.000000,0.707107 +5720,0.707107,0.000000,0.000000,0.707107 +5721,0.707107,0.000000,0.000000,0.707107 +5722,0.707107,0.000000,0.000000,0.707107 +5723,0.707107,0.000000,0.000000,0.707107 +5724,0.707107,0.000000,0.000000,0.707107 +5725,0.707107,0.000000,0.000000,0.707107 +5726,0.707107,0.000000,0.000000,0.707107 +5727,0.707107,0.000000,0.000000,0.707107 +5728,0.707107,0.000000,0.000000,0.707107 +5729,0.707107,0.000000,0.000000,0.707107 +5730,0.707107,0.000000,0.000000,0.707107 +5731,0.707107,0.000000,0.000000,0.707107 +5732,0.707107,0.000000,0.000000,0.707107 +5733,0.707107,0.000000,0.000000,0.707107 +5734,0.707107,0.000000,0.000000,0.707107 +5735,0.707107,0.000000,0.000000,0.707107 +5736,0.707107,0.000000,0.000000,0.707107 +5737,0.707107,0.000000,0.000000,0.707107 +5738,0.707107,0.000000,0.000000,0.707107 +5739,0.707107,0.000000,0.000000,0.707107 +5740,0.707107,0.000000,0.000000,0.707107 +5741,0.707107,0.000000,0.000000,0.707107 +5742,0.707107,0.000000,0.000000,0.707107 +5743,0.707107,0.000000,0.000000,0.707107 +5744,0.707107,0.000000,0.000000,0.707107 +5745,0.707107,0.000000,0.000000,0.707107 +5746,0.707107,0.000000,0.000000,0.707107 +5747,0.707107,0.000000,0.000000,0.707107 +5748,0.707107,0.000000,0.000000,0.707107 +5749,0.707107,0.000000,0.000000,0.707107 +5750,0.707107,0.000000,0.000000,0.707107 +5751,0.707107,0.000000,0.000000,0.707107 +5752,0.707107,0.000000,0.000000,0.707107 +5753,0.707107,0.000000,0.000000,0.707107 +5754,0.707107,0.000000,0.000000,0.707107 +5755,0.707107,0.000000,0.000000,0.707107 +5756,0.707107,0.000000,0.000000,0.707107 +5757,0.707107,0.000000,0.000000,0.707107 +5758,0.707107,0.000000,0.000000,0.707107 +5759,0.707107,0.000000,0.000000,0.707107 +5760,0.707107,0.000000,0.000000,0.707107 +5761,0.707107,0.000000,0.000000,0.707107 +5762,0.707107,0.000000,0.000000,0.707107 +5763,0.707107,0.000000,0.000000,0.707107 +5764,0.707107,0.000000,0.000000,0.707107 +5765,0.707107,0.000000,0.000000,0.707107 +5766,0.707107,0.000000,0.000000,0.707107 +5767,0.707107,0.000000,0.000000,0.707107 +5768,0.707107,0.000000,0.000000,0.707107 +5769,0.707107,0.000000,0.000000,0.707107 +5770,0.707107,0.000000,0.000000,0.707107 +5771,0.707107,0.000000,0.000000,0.707107 +5772,0.707107,0.000000,0.000000,0.707107 +5773,0.707107,0.000000,0.000000,0.707107 +5774,0.707107,0.000000,0.000000,0.707107 +5775,0.707107,0.000000,0.000000,0.707107 +5776,0.707107,0.000000,0.000000,0.707107 +5777,0.707107,0.000000,0.000000,0.707107 +5778,0.707107,0.000000,0.000000,0.707107 +5779,0.707107,0.000000,0.000000,0.707107 +5780,0.707107,0.000000,0.000000,0.707107 +5781,0.707107,0.000000,0.000000,0.707107 +5782,0.707107,0.000000,0.000000,0.707107 +5783,0.707107,0.000000,0.000000,0.707107 +5784,0.707107,0.000000,0.000000,0.707107 +5785,0.707107,0.000000,0.000000,0.707107 +5786,0.707107,0.000000,0.000000,0.707107 +5787,0.707107,0.000000,0.000000,0.707107 +5788,0.707107,0.000000,0.000000,0.707107 +5789,0.707107,0.000000,0.000000,0.707107 +5790,0.707107,0.000000,0.000000,0.707107 +5791,0.707107,0.000000,0.000000,0.707107 +5792,0.707107,0.000000,0.000000,0.707107 +5793,0.707107,0.000000,0.000000,0.707107 +5794,0.707107,0.000000,0.000000,0.707107 +5795,0.707107,0.000000,0.000000,0.707107 +5796,0.707107,0.000000,0.000000,0.707107 +5797,0.707107,0.000000,0.000000,0.707107 +5798,0.707107,0.000000,0.000000,0.707107 +5799,0.707107,0.000000,0.000000,0.707107 +5800,0.707107,0.000000,0.000000,0.707107 +5801,0.707107,0.000000,0.000000,0.707107 +5802,0.707107,0.000000,0.000000,0.707107 +5803,0.707107,0.000000,0.000000,0.707107 +5804,0.707107,0.000000,0.000000,0.707107 +5805,0.707107,0.000000,0.000000,0.707107 +5806,0.707107,0.000000,0.000000,0.707107 +5807,0.707107,0.000000,0.000000,0.707107 +5808,0.707107,0.000000,0.000000,0.707107 +5809,0.707107,0.000000,0.000000,0.707107 +5810,0.707107,0.000000,0.000000,0.707107 +5811,0.707107,0.000000,0.000000,0.707107 +5812,0.707107,0.000000,0.000000,0.707107 +5813,0.707107,0.000000,0.000000,0.707107 +5814,0.707107,0.000000,0.000000,0.707107 +5815,0.707107,0.000000,0.000000,0.707107 +5816,0.707107,0.000000,0.000000,0.707107 +5817,0.707107,0.000000,0.000000,0.707107 +5818,0.707107,0.000000,0.000000,0.707107 +5819,0.707107,0.000000,0.000000,0.707107 +5820,0.707107,0.000000,0.000000,0.707107 +5821,0.707107,0.000000,0.000000,0.707107 +5822,0.707107,0.000000,0.000000,0.707107 +5823,0.707107,0.000000,0.000000,0.707107 +5824,0.707107,0.000000,0.000000,0.707107 +5825,0.707107,0.000000,0.000000,0.707107 +5826,0.707107,0.000000,0.000000,0.707107 +5827,0.707107,0.000000,0.000000,0.707107 +5828,0.707107,0.000000,0.000000,0.707107 +5829,0.707107,0.000000,0.000000,0.707107 +5830,0.707107,0.000000,0.000000,0.707107 +5831,0.707107,0.000000,0.000000,0.707107 +5832,0.707107,0.000000,0.000000,0.707107 +5833,0.707107,0.000000,0.000000,0.707107 +5834,0.707107,0.000000,0.000000,0.707107 +5835,0.707107,0.000000,0.000000,0.707107 +5836,0.707107,0.000000,0.000000,0.707107 +5837,0.707107,0.000000,0.000000,0.707107 +5838,0.707107,0.000000,0.000000,0.707107 +5839,0.707107,0.000000,0.000000,0.707107 +5840,0.707107,0.000000,0.000000,0.707107 +5841,0.707107,0.000000,0.000000,0.707107 +5842,0.707107,0.000000,0.000000,0.707107 +5843,0.707107,0.000000,0.000000,0.707107 +5844,0.707107,0.000000,0.000000,0.707107 +5845,0.707107,0.000000,0.000000,0.707107 +5846,0.707107,0.000000,0.000000,0.707107 +5847,0.707107,0.000000,0.000000,0.707107 +5848,0.707107,0.000000,0.000000,0.707107 +5849,0.707107,0.000000,0.000000,0.707107 +5850,0.707107,0.000000,0.000000,0.707107 +5851,0.707107,0.000000,0.000000,0.707107 +5852,0.707107,0.000000,0.000000,0.707107 +5853,0.707107,0.000000,0.000000,0.707107 +5854,0.707107,0.000000,0.000000,0.707107 +5855,0.707107,0.000000,0.000000,0.707107 +5856,0.707107,0.000000,0.000000,0.707107 +5857,0.707107,0.000000,0.000000,0.707107 +5858,0.707107,0.000000,0.000000,0.707107 +5859,0.707107,0.000000,0.000000,0.707107 +5860,0.707107,0.000000,0.000000,0.707107 +5861,0.707107,0.000000,0.000000,0.707107 +5862,0.707107,0.000000,0.000000,0.707107 +5863,0.707107,0.000000,0.000000,0.707107 +5864,0.707107,0.000000,0.000000,0.707107 +5865,0.707107,0.000000,0.000000,0.707107 +5866,0.707107,0.000000,0.000000,0.707107 +5867,0.707107,0.000000,0.000000,0.707107 +5868,0.707107,0.000000,0.000000,0.707107 +5869,0.707107,0.000000,0.000000,0.707107 +5870,0.707107,0.000000,0.000000,0.707107 +5871,0.707107,0.000000,0.000000,0.707107 +5872,0.707107,0.000000,0.000000,0.707107 +5873,0.707107,0.000000,0.000000,0.707107 +5874,0.707107,0.000000,0.000000,0.707107 +5875,0.707107,0.000000,0.000000,0.707107 +5876,0.707107,0.000000,0.000000,0.707107 +5877,0.707107,0.000000,0.000000,0.707107 +5878,0.707107,0.000000,0.000000,0.707107 +5879,0.707107,0.000000,0.000000,0.707107 +5880,0.707107,0.000000,0.000000,0.707107 +5881,0.707107,0.000000,0.000000,0.707107 +5882,0.707107,0.000000,0.000000,0.707107 +5883,0.707107,0.000000,0.000000,0.707107 +5884,0.707107,0.000000,0.000000,0.707107 +5885,0.707107,0.000000,0.000000,0.707107 +5886,0.707107,0.000000,0.000000,0.707107 +5887,0.707107,0.000000,0.000000,0.707107 +5888,0.707107,0.000000,0.000000,0.707107 +5889,0.707107,0.000000,0.000000,0.707107 +5890,0.707107,0.000000,0.000000,0.707107 +5891,0.707107,0.000000,0.000000,0.707107 +5892,0.707107,0.000000,0.000000,0.707107 +5893,0.707107,0.000000,0.000000,0.707107 +5894,0.707107,0.000000,0.000000,0.707107 +5895,0.707107,0.000000,0.000000,0.707107 +5896,0.707107,0.000000,0.000000,0.707107 +5897,0.707107,0.000000,0.000000,0.707107 +5898,0.707107,0.000000,0.000000,0.707107 +5899,0.707107,0.000000,0.000000,0.707107 +5900,0.707107,0.000000,0.000000,0.707107 +5901,0.707107,0.000000,0.000000,0.707107 +5902,0.707107,0.000000,0.000000,0.707107 +5903,0.707107,0.000000,0.000000,0.707107 +5904,0.707107,0.000000,0.000000,0.707107 +5905,0.707107,0.000000,0.000000,0.707107 +5906,0.707107,0.000000,0.000000,0.707107 +5907,0.707107,0.000000,0.000000,0.707107 +5908,0.707107,0.000000,0.000000,0.707107 +5909,0.707107,0.000000,0.000000,0.707107 +5910,0.707107,0.000000,0.000000,0.707107 +5911,0.707107,0.000000,0.000000,0.707107 +5912,0.707107,0.000000,0.000000,0.707107 +5913,0.707107,0.000000,0.000000,0.707107 +5914,0.707107,0.000000,0.000000,0.707107 +5915,0.707107,0.000000,0.000000,0.707107 +5916,0.707107,0.000000,0.000000,0.707107 +5917,0.707107,0.000000,0.000000,0.707107 +5918,0.707107,0.000000,0.000000,0.707107 +5919,0.707107,0.000000,0.000000,0.707107 +5920,0.707107,0.000000,0.000000,0.707107 +5921,0.707107,0.000000,0.000000,0.707107 +5922,0.707107,0.000000,0.000000,0.707107 +5923,0.707107,0.000000,0.000000,0.707107 +5924,0.707107,0.000000,0.000000,0.707107 +5925,0.707107,0.000000,0.000000,0.707107 +5926,0.707107,0.000000,0.000000,0.707107 +5927,0.707107,0.000000,0.000000,0.707107 +5928,0.707107,0.000000,0.000000,0.707107 +5929,0.707107,0.000000,0.000000,0.707107 +5930,0.707107,0.000000,0.000000,0.707107 +5931,0.707107,0.000000,0.000000,0.707107 +5932,0.707107,0.000000,0.000000,0.707107 +5933,0.707107,0.000000,0.000000,0.707107 +5934,0.707107,0.000000,0.000000,0.707107 +5935,0.707107,0.000000,0.000000,0.707107 +5936,0.707107,0.000000,0.000000,0.707107 +5937,0.707107,0.000000,0.000000,0.707107 +5938,0.707107,0.000000,0.000000,0.707107 +5939,0.707107,0.000000,0.000000,0.707107 +5940,0.707107,0.000000,0.000000,0.707107 +5941,0.707107,0.000000,0.000000,0.707107 +5942,0.707107,0.000000,0.000000,0.707107 +5943,0.707107,0.000000,0.000000,0.707107 +5944,0.707107,0.000000,0.000000,0.707107 +5945,0.707107,0.000000,0.000000,0.707107 +5946,0.707107,0.000000,0.000000,0.707107 +5947,0.707107,0.000000,0.000000,0.707107 +5948,0.707107,0.000000,0.000000,0.707107 +5949,0.707107,0.000000,0.000000,0.707107 +5950,0.707107,0.000000,0.000000,0.707107 +5951,0.707107,0.000000,0.000000,0.707107 +5952,0.707107,0.000000,0.000000,0.707107 +5953,0.707107,0.000000,0.000000,0.707107 +5954,0.707107,0.000000,0.000000,0.707107 +5955,0.707107,0.000000,0.000000,0.707107 +5956,0.707107,0.000000,0.000000,0.707107 +5957,0.707107,0.000000,0.000000,0.707107 +5958,0.707107,0.000000,0.000000,0.707107 +5959,0.707107,0.000000,0.000000,0.707107 +5960,0.707107,0.000000,0.000000,0.707107 +5961,0.707107,0.000000,0.000000,0.707107 +5962,0.707107,0.000000,0.000000,0.707107 +5963,0.707107,0.000000,0.000000,0.707107 +5964,0.707107,0.000000,0.000000,0.707107 +5965,0.707107,0.000000,0.000000,0.707107 +5966,0.707107,0.000000,0.000000,0.707107 +5967,0.707107,0.000000,0.000000,0.707107 +5968,0.707107,0.000000,0.000000,0.707107 +5969,0.707107,0.000000,0.000000,0.707107 +5970,0.707107,0.000000,0.000000,0.707107 +5971,0.707107,0.000000,0.000000,0.707107 +5972,0.707107,0.000000,0.000000,0.707107 +5973,0.707107,0.000000,0.000000,0.707107 +5974,0.707107,0.000000,0.000000,0.707107 +5975,0.707107,0.000000,0.000000,0.707107 +5976,0.707107,0.000000,0.000000,0.707107 +5977,0.707107,0.000000,0.000000,0.707107 +5978,0.707107,0.000000,0.000000,0.707107 +5979,0.707107,0.000000,0.000000,0.707107 +5980,0.707107,0.000000,0.000000,0.707107 +5981,0.707107,0.000000,0.000000,0.707107 +5982,0.707107,0.000000,0.000000,0.707107 +5983,0.707107,0.000000,0.000000,0.707107 +5984,0.707107,0.000000,0.000000,0.707107 +5985,0.707107,0.000000,0.000000,0.707107 +5986,0.707107,0.000000,0.000000,0.707107 +5987,0.707107,0.000000,0.000000,0.707107 +5988,0.707107,0.000000,0.000000,0.707107 +5989,0.707107,0.000000,0.000000,0.707107 +5990,0.707107,0.000000,0.000000,0.707107 +5991,0.707107,0.000000,0.000000,0.707107 +5992,0.707107,0.000000,0.000000,0.707107 +5993,0.707107,0.000000,0.000000,0.707107 +5994,0.707107,0.000000,0.000000,0.707107 +5995,0.707107,0.000000,0.000000,0.707107 +5996,0.707107,0.000000,0.000000,0.707107 +5997,0.707107,0.000000,0.000000,0.707107 +5998,0.707107,0.000000,0.000000,0.707107 +5999,0.707107,0.000000,0.000000,0.707107 +6000,0.707107,0.000000,0.000000,0.707107 +6001,0.707107,0.000000,0.000000,0.707107 +6002,0.707107,0.000000,0.000000,0.707107 +6003,0.707107,0.000000,0.000000,0.707107 +6004,0.707107,0.000000,0.000000,0.707107 +6005,0.707107,0.000000,0.000000,0.707107 +6006,0.707107,0.000000,0.000000,0.707107 +6007,0.707107,0.000000,0.000000,0.707107 +6008,0.707107,0.000000,0.000000,0.707107 +6009,0.707107,0.000000,0.000000,0.707107 +6010,0.707107,0.000000,0.000000,0.707107 +6011,0.707107,0.000000,0.000000,0.707107 +6012,0.707107,0.000000,0.000000,0.707107 +6013,0.707107,0.000000,0.000000,0.707107 +6014,0.707107,0.000000,0.000000,0.707107 +6015,0.707107,0.000000,0.000000,0.707107 +6016,0.707107,0.000000,0.000000,0.707107 +6017,0.707107,0.000000,0.000000,0.707107 +6018,0.707107,0.000000,0.000000,0.707107 +6019,0.707107,0.000000,0.000000,0.707107 +6020,0.707107,0.000000,0.000000,0.707107 +6021,0.707107,0.000000,0.000000,0.707107 +6022,0.707107,0.000000,0.000000,0.707107 +6023,0.707107,0.000000,0.000000,0.707107 +6024,0.707107,0.000000,0.000000,0.707107 +6025,0.707107,0.000000,0.000000,0.707107 +6026,0.707107,0.000000,0.000000,0.707107 +6027,0.707107,0.000000,0.000000,0.707107 +6028,0.707107,0.000000,0.000000,0.707107 +6029,0.707107,0.000000,0.000000,0.707107 +6030,0.707107,0.000000,0.000000,0.707107 +6031,0.707107,0.000000,0.000000,0.707107 +6032,0.707107,0.000000,0.000000,0.707107 +6033,0.707107,0.000000,0.000000,0.707107 +6034,0.707107,0.000000,0.000000,0.707107 +6035,0.707107,0.000000,0.000000,0.707107 +6036,0.707107,0.000000,0.000000,0.707107 +6037,0.707107,0.000000,0.000000,0.707107 +6038,0.707107,0.000000,0.000000,0.707107 +6039,0.707107,0.000000,0.000000,0.707107 +6040,0.707107,0.000000,0.000000,0.707107 +6041,0.707107,0.000000,0.000000,0.707107 +6042,0.707107,0.000000,0.000000,0.707107 +6043,0.707107,0.000000,0.000000,0.707107 +6044,0.707107,0.000000,0.000000,0.707107 +6045,0.707107,0.000000,0.000000,0.707107 +6046,0.707107,0.000000,0.000000,0.707107 +6047,0.707107,0.000000,0.000000,0.707107 +6048,0.707107,0.000000,0.000000,0.707107 +6049,0.707107,0.000000,0.000000,0.707107 +6050,0.707107,0.000000,0.000000,0.707107 +6051,0.707107,0.000000,0.000000,0.707107 +6052,0.707107,0.000000,0.000000,0.707107 +6053,0.707107,0.000000,0.000000,0.707107 +6054,0.707107,0.000000,0.000000,0.707107 +6055,0.707107,0.000000,0.000000,0.707107 +6056,0.707107,0.000000,0.000000,0.707107 +6057,0.707107,0.000000,0.000000,0.707107 +6058,0.707107,0.000000,0.000000,0.707107 +6059,0.707107,0.000000,0.000000,0.707107 +6060,0.707107,0.000000,0.000000,0.707107 +6061,0.707107,0.000000,0.000000,0.707107 +6062,0.707107,0.000000,0.000000,0.707107 +6063,0.707107,0.000000,0.000000,0.707107 +6064,0.707107,0.000000,0.000000,0.707107 +6065,0.707107,0.000000,0.000000,0.707107 +6066,0.707107,0.000000,0.000000,0.707107 +6067,0.707107,0.000000,0.000000,0.707107 +6068,0.707107,0.000000,0.000000,0.707107 +6069,0.707107,0.000000,0.000000,0.707107 +6070,0.707107,0.000000,0.000000,0.707107 +6071,0.707107,0.000000,0.000000,0.707107 +6072,0.707107,0.000000,0.000000,0.707107 +6073,0.707107,0.000000,0.000000,0.707107 +6074,0.707107,0.000000,0.000000,0.707107 +6075,0.707107,0.000000,0.000000,0.707107 +6076,0.707107,0.000000,0.000000,0.707107 +6077,0.707107,0.000000,0.000000,0.707107 +6078,0.707107,0.000000,0.000000,0.707107 +6079,0.707107,0.000000,0.000000,0.707107 +6080,0.707107,0.000000,0.000000,0.707107 +6081,0.707107,0.000000,0.000000,0.707107 +6082,0.707107,0.000000,0.000000,0.707107 +6083,0.707107,0.000000,0.000000,0.707107 +6084,0.707107,0.000000,0.000000,0.707107 +6085,0.707107,0.000000,0.000000,0.707107 +6086,0.707107,0.000000,0.000000,0.707107 +6087,0.707107,0.000000,0.000000,0.707107 +6088,0.707107,0.000000,0.000000,0.707107 +6089,0.707107,0.000000,0.000000,0.707107 +6090,0.707107,0.000000,0.000000,0.707107 +6091,0.707107,0.000000,0.000000,0.707107 +6092,0.707107,0.000000,0.000000,0.707107 +6093,0.707107,0.000000,0.000000,0.707107 +6094,0.707107,0.000000,0.000000,0.707107 +6095,0.707107,0.000000,0.000000,0.707107 +6096,0.707107,0.000000,0.000000,0.707107 +6097,0.707107,0.000000,0.000000,0.707107 +6098,0.707107,0.000000,0.000000,0.707107 +6099,0.707107,0.000000,0.000000,0.707107 +6100,0.707107,0.000000,0.000000,0.707107 +6101,0.707107,0.000000,0.000000,0.707107 +6102,0.707107,0.000000,0.000000,0.707107 +6103,0.707107,0.000000,0.000000,0.707107 +6104,0.707107,0.000000,0.000000,0.707107 +6105,0.707107,0.000000,0.000000,0.707107 +6106,0.707107,0.000000,0.000000,0.707107 +6107,0.707107,0.000000,0.000000,0.707107 +6108,0.707107,0.000000,0.000000,0.707107 +6109,0.707107,0.000000,0.000000,0.707107 +6110,0.707107,0.000000,0.000000,0.707107 +6111,0.707107,0.000000,0.000000,0.707107 +6112,0.707107,0.000000,0.000000,0.707107 +6113,0.707107,0.000000,0.000000,0.707107 +6114,0.707107,0.000000,0.000000,0.707107 +6115,0.707107,0.000000,0.000000,0.707107 +6116,0.707107,0.000000,0.000000,0.707107 +6117,0.707107,0.000000,0.000000,0.707107 +6118,0.707107,0.000000,0.000000,0.707107 +6119,0.707107,0.000000,0.000000,0.707107 +6120,0.707107,0.000000,0.000000,0.707107 +6121,0.707107,0.000000,0.000000,0.707107 +6122,0.707107,0.000000,0.000000,0.707107 +6123,0.707107,0.000000,0.000000,0.707107 +6124,0.707107,0.000000,0.000000,0.707107 +6125,0.707107,0.000000,0.000000,0.707107 +6126,0.707107,0.000000,0.000000,0.707107 +6127,0.707107,0.000000,0.000000,0.707107 +6128,0.707107,0.000000,0.000000,0.707107 +6129,0.707107,0.000000,0.000000,0.707107 +6130,0.707107,0.000000,0.000000,0.707107 +6131,0.707107,0.000000,0.000000,0.707107 +6132,0.707107,0.000000,0.000000,0.707107 +6133,0.707107,0.000000,0.000000,0.707107 +6134,0.707107,0.000000,0.000000,0.707107 +6135,0.707107,0.000000,0.000000,0.707107 +6136,0.707107,0.000000,0.000000,0.707107 +6137,0.707107,0.000000,0.000000,0.707107 +6138,0.707107,0.000000,0.000000,0.707107 +6139,0.707107,0.000000,0.000000,0.707107 +6140,0.707107,0.000000,0.000000,0.707107 +6141,0.707107,0.000000,0.000000,0.707107 +6142,0.707107,0.000000,0.000000,0.707107 +6143,0.707107,0.000000,0.000000,0.707107 +6144,0.707107,0.000000,0.000000,0.707107 +6145,0.707107,0.000000,0.000000,0.707107 +6146,0.707107,0.000000,0.000000,0.707107 +6147,0.707107,0.000000,0.000000,0.707107 +6148,0.707107,0.000000,0.000000,0.707107 +6149,0.707107,0.000000,0.000000,0.707107 +6150,0.707107,0.000000,0.000000,0.707107 +6151,0.707107,0.000000,0.000000,0.707107 +6152,0.707107,0.000000,0.000000,0.707107 +6153,0.707107,0.000000,0.000000,0.707107 +6154,0.707107,0.000000,0.000000,0.707107 +6155,0.707107,0.000000,0.000000,0.707107 +6156,0.707107,0.000000,0.000000,0.707107 +6157,0.707107,0.000000,0.000000,0.707107 +6158,0.707107,0.000000,0.000000,0.707107 +6159,0.707107,0.000000,0.000000,0.707107 +6160,0.707107,0.000000,0.000000,0.707107 +6161,0.707107,0.000000,0.000000,0.707107 +6162,0.707107,0.000000,0.000000,0.707107 +6163,0.707107,0.000000,0.000000,0.707107 +6164,0.707107,0.000000,0.000000,0.707107 +6165,0.707107,0.000000,0.000000,0.707107 +6166,0.707107,0.000000,0.000000,0.707107 +6167,0.707107,0.000000,0.000000,0.707107 +6168,0.707107,0.000000,0.000000,0.707107 +6169,0.707107,0.000000,0.000000,0.707107 +6170,0.707107,0.000000,0.000000,0.707107 +6171,0.707107,0.000000,0.000000,0.707107 +6172,0.707107,0.000000,0.000000,0.707107 +6173,0.707107,0.000000,0.000000,0.707107 +6174,0.707107,0.000000,0.000000,0.707107 +6175,0.707107,0.000000,0.000000,0.707107 +6176,0.707107,0.000000,0.000000,0.707107 +6177,0.707107,0.000000,0.000000,0.707107 +6178,0.707107,0.000000,0.000000,0.707107 +6179,0.707107,0.000000,0.000000,0.707107 +6180,0.707107,0.000000,0.000000,0.707107 +6181,0.707107,0.000000,0.000000,0.707107 +6182,0.707107,0.000000,0.000000,0.707107 +6183,0.707107,0.000000,0.000000,0.707107 +6184,0.707107,0.000000,0.000000,0.707107 +6185,0.707107,0.000000,0.000000,0.707107 +6186,0.707107,0.000000,0.000000,0.707107 +6187,0.707107,0.000000,0.000000,0.707107 +6188,0.707107,0.000000,0.000000,0.707107 +6189,0.707107,0.000000,0.000000,0.707107 +6190,0.707107,0.000000,0.000000,0.707107 +6191,0.707107,0.000000,0.000000,0.707107 +6192,0.707107,0.000000,0.000000,0.707107 +6193,0.707107,0.000000,0.000000,0.707107 +6194,0.707107,0.000000,0.000000,0.707107 +6195,0.707107,0.000000,0.000000,0.707107 +6196,0.707107,0.000000,0.000000,0.707107 +6197,0.707107,0.000000,0.000000,0.707107 +6198,0.707107,0.000000,0.000000,0.707107 +6199,0.707107,0.000000,0.000000,0.707107 +6200,0.707107,0.000000,0.000000,0.707107 +6201,0.707107,0.000000,0.000000,0.707107 +6202,0.707107,0.000000,0.000000,0.707107 +6203,0.707107,0.000000,0.000000,0.707107 +6204,0.707107,0.000000,0.000000,0.707107 +6205,0.707107,0.000000,0.000000,0.707107 +6206,0.707107,0.000000,0.000000,0.707107 +6207,0.707107,0.000000,0.000000,0.707107 +6208,0.707107,0.000000,0.000000,0.707107 +6209,0.707107,0.000000,0.000000,0.707107 +6210,0.707107,0.000000,0.000000,0.707107 +6211,0.707107,0.000000,0.000000,0.707107 +6212,0.707107,0.000000,0.000000,0.707107 +6213,0.707107,0.000000,0.000000,0.707107 +6214,0.707107,0.000000,0.000000,0.707107 +6215,0.707107,0.000000,0.000000,0.707107 +6216,0.707107,0.000000,0.000000,0.707107 +6217,0.707107,0.000000,0.000000,0.707107 +6218,0.707107,0.000000,0.000000,0.707107 +6219,0.707107,0.000000,0.000000,0.707107 +6220,0.707107,0.000000,0.000000,0.707107 +6221,0.707107,0.000000,0.000000,0.707107 +6222,0.707107,0.000000,0.000000,0.707107 +6223,0.707107,0.000000,0.000000,0.707107 +6224,0.707107,0.000000,0.000000,0.707107 +6225,0.707107,0.000000,0.000000,0.707107 +6226,0.707107,0.000000,0.000000,0.707107 +6227,0.707107,0.000000,0.000000,0.707107 +6228,0.707107,0.000000,0.000000,0.707107 +6229,0.707107,0.000000,0.000000,0.707107 +6230,0.707107,0.000000,0.000000,0.707107 +6231,0.707107,0.000000,0.000000,0.707107 +6232,0.707107,0.000000,0.000000,0.707107 +6233,0.707107,0.000000,0.000000,0.707107 +6234,0.707107,0.000000,0.000000,0.707107 +6235,0.707107,0.000000,0.000000,0.707107 +6236,0.707107,0.000000,0.000000,0.707107 +6237,0.707107,0.000000,0.000000,0.707107 +6238,0.707107,0.000000,0.000000,0.707107 +6239,0.707107,0.000000,0.000000,0.707107 +6240,0.707107,0.000000,0.000000,0.707107 +6241,0.707107,0.000000,0.000000,0.707107 +6242,0.707107,0.000000,0.000000,0.707107 +6243,0.707107,0.000000,0.000000,0.707107 +6244,0.707107,0.000000,0.000000,0.707107 +6245,0.707107,0.000000,0.000000,0.707107 +6246,0.707107,0.000000,0.000000,0.707107 +6247,0.707107,0.000000,0.000000,0.707107 +6248,0.707107,0.000000,0.000000,0.707107 +6249,0.707107,0.000000,0.000000,0.707107 +6250,0.707107,0.000000,0.000000,0.707107 +6251,0.707107,0.000000,0.000000,0.707107 +6252,0.707107,0.000000,0.000000,0.707107 +6253,0.707107,0.000000,0.000000,0.707107 +6254,0.707107,0.000000,0.000000,0.707107 +6255,0.707107,0.000000,0.000000,0.707107 +6256,0.707107,0.000000,0.000000,0.707107 +6257,0.707107,0.000000,0.000000,0.707107 +6258,0.707107,0.000000,0.000000,0.707107 +6259,0.707107,0.000000,0.000000,0.707107 +6260,0.707107,0.000000,0.000000,0.707107 +6261,0.707107,0.000000,0.000000,0.707107 +6262,0.707107,0.000000,0.000000,0.707107 +6263,0.707107,0.000000,0.000000,0.707107 +6264,0.707107,0.000000,0.000000,0.707107 +6265,0.707107,0.000000,0.000000,0.707107 +6266,0.707107,0.000000,0.000000,0.707107 +6267,0.707107,0.000000,0.000000,0.707107 +6268,0.707107,0.000000,0.000000,0.707107 +6269,0.707107,0.000000,0.000000,0.707107 +6270,0.707107,0.000000,0.000000,0.707107 +6271,0.707107,0.000000,0.000000,0.707107 +6272,0.707107,0.000000,0.000000,0.707107 +6273,0.707107,0.000000,0.000000,0.707107 +6274,0.707107,0.000000,0.000000,0.707107 +6275,0.707107,0.000000,0.000000,0.707107 +6276,0.707107,0.000000,0.000000,0.707107 +6277,0.707107,0.000000,0.000000,0.707107 +6278,0.707107,0.000000,0.000000,0.707107 +6279,0.707107,0.000000,0.000000,0.707107 +6280,0.707107,0.000000,0.000000,0.707107 +6281,0.707107,0.000000,0.000000,0.707107 +6282,0.707107,0.000000,0.000000,0.707107 +6283,0.707107,0.000000,0.000000,0.707107 +6284,0.707107,0.000000,0.000000,0.707107 +6285,0.707107,0.000000,0.000000,0.707107 +6286,0.707107,0.000000,0.000000,0.707107 +6287,0.707107,0.000000,0.000000,0.707107 +6288,0.707107,0.000000,0.000000,0.707107 +6289,0.707107,0.000000,0.000000,0.707107 +6290,0.707107,0.000000,0.000000,0.707107 +6291,0.707107,0.000000,0.000000,0.707107 +6292,0.707107,0.000000,0.000000,0.707107 +6293,0.707107,0.000000,0.000000,0.707107 +6294,0.707107,0.000000,0.000000,0.707107 +6295,0.707107,0.000000,0.000000,0.707107 +6296,0.707107,0.000000,0.000000,0.707107 +6297,0.707107,0.000000,0.000000,0.707107 +6298,0.707107,0.000000,0.000000,0.707107 +6299,0.707107,0.000000,0.000000,0.707107 +6300,0.707107,0.000000,0.000000,0.707107 +6301,0.707107,0.000000,0.000000,0.707107 +6302,0.707107,0.000000,0.000000,0.707107 +6303,0.707107,0.000000,0.000000,0.707107 +6304,0.707107,0.000000,0.000000,0.707107 +6305,0.707107,0.000000,0.000000,0.707107 +6306,0.707107,0.000000,0.000000,0.707107 +6307,0.707107,0.000000,0.000000,0.707107 +6308,0.707107,0.000000,0.000000,0.707107 +6309,0.707107,0.000000,0.000000,0.707107 +6310,0.707107,0.000000,0.000000,0.707107 +6311,0.707107,0.000000,0.000000,0.707107 +6312,0.707107,0.000000,0.000000,0.707107 +6313,0.707107,0.000000,0.000000,0.707107 +6314,0.707107,0.000000,0.000000,0.707107 +6315,0.707107,0.000000,0.000000,0.707107 +6316,0.707107,0.000000,0.000000,0.707107 +6317,0.707107,0.000000,0.000000,0.707107 +6318,0.707107,0.000000,0.000000,0.707107 +6319,0.707107,0.000000,0.000000,0.707107 +6320,0.707107,0.000000,0.000000,0.707107 +6321,0.707107,0.000000,0.000000,0.707107 +6322,0.707107,0.000000,0.000000,0.707107 +6323,0.707107,0.000000,0.000000,0.707107 +6324,0.707107,0.000000,0.000000,0.707107 +6325,0.707107,0.000000,0.000000,0.707107 +6326,0.707107,0.000000,0.000000,0.707107 +6327,0.707107,0.000000,0.000000,0.707107 +6328,0.707107,0.000000,0.000000,0.707107 +6329,0.707107,0.000000,0.000000,0.707107 +6330,0.707107,0.000000,0.000000,0.707107 +6331,0.707107,0.000000,0.000000,0.707107 +6332,0.707107,0.000000,0.000000,0.707107 +6333,0.707107,0.000000,0.000000,0.707107 +6334,0.707107,0.000000,0.000000,0.707107 +6335,0.707107,0.000000,0.000000,0.707107 +6336,0.707107,0.000000,0.000000,0.707107 +6337,0.707107,0.000000,0.000000,0.707107 +6338,0.707107,0.000000,0.000000,0.707107 +6339,0.707107,0.000000,0.000000,0.707107 +6340,0.707107,0.000000,0.000000,0.707107 +6341,0.707107,0.000000,0.000000,0.707107 +6342,0.707107,0.000000,0.000000,0.707107 +6343,0.707107,0.000000,0.000000,0.707107 +6344,0.707107,0.000000,0.000000,0.707107 +6345,0.707107,0.000000,0.000000,0.707107 +6346,0.707107,0.000000,0.000000,0.707107 +6347,0.707107,0.000000,0.000000,0.707107 +6348,0.707107,0.000000,0.000000,0.707107 +6349,0.707107,0.000000,0.000000,0.707107 +6350,0.707107,0.000000,0.000000,0.707107 +6351,0.707107,0.000000,0.000000,0.707107 +6352,0.707107,0.000000,0.000000,0.707107 +6353,0.707107,0.000000,0.000000,0.707107 +6354,0.707107,0.000000,0.000000,0.707107 +6355,0.707107,0.000000,0.000000,0.707107 +6356,0.707107,0.000000,0.000000,0.707107 +6357,0.707107,0.000000,0.000000,0.707107 +6358,0.707107,0.000000,0.000000,0.707107 +6359,0.707107,0.000000,0.000000,0.707107 +6360,0.707107,0.000000,0.000000,0.707107 +6361,0.707107,0.000000,0.000000,0.707107 +6362,0.707107,0.000000,0.000000,0.707107 +6363,0.707107,0.000000,0.000000,0.707107 +6364,0.707107,0.000000,0.000000,0.707107 +6365,0.707107,0.000000,0.000000,0.707107 +6366,0.707107,0.000000,0.000000,0.707107 +6367,0.707107,0.000000,0.000000,0.707107 +6368,0.707107,0.000000,0.000000,0.707107 +6369,0.707107,0.000000,0.000000,0.707107 +6370,0.707107,0.000000,0.000000,0.707107 +6371,0.707107,0.000000,0.000000,0.707107 +6372,0.707107,0.000000,0.000000,0.707107 +6373,0.707107,0.000000,0.000000,0.707107 +6374,0.707107,0.000000,0.000000,0.707107 +6375,0.707107,0.000000,0.000000,0.707107 +6376,0.707107,0.000000,0.000000,0.707107 +6377,0.707107,0.000000,0.000000,0.707107 +6378,0.707107,0.000000,0.000000,0.707107 +6379,0.707107,0.000000,0.000000,0.707107 +6380,0.707107,0.000000,0.000000,0.707107 +6381,0.707107,0.000000,0.000000,0.707107 +6382,0.707107,0.000000,0.000000,0.707107 +6383,0.707107,0.000000,0.000000,0.707107 +6384,0.707107,0.000000,0.000000,0.707107 +6385,0.707107,0.000000,0.000000,0.707107 +6386,0.707107,0.000000,0.000000,0.707107 +6387,0.707107,0.000000,0.000000,0.707107 +6388,0.707107,0.000000,0.000000,0.707107 +6389,0.707107,0.000000,0.000000,0.707107 +6390,0.707107,0.000000,0.000000,0.707107 +6391,0.707107,0.000000,0.000000,0.707107 +6392,0.707107,0.000000,0.000000,0.707107 +6393,0.707107,0.000000,0.000000,0.707107 +6394,0.707107,0.000000,0.000000,0.707107 +6395,0.707107,0.000000,0.000000,0.707107 +6396,0.707107,0.000000,0.000000,0.707107 +6397,0.707107,0.000000,0.000000,0.707107 +6398,0.707107,0.000000,0.000000,0.707107 +6399,0.707107,0.000000,0.000000,0.707107 +6400,0.707107,0.000000,0.000000,0.707107 +6401,0.707107,0.000000,0.000000,0.707107 +6402,0.707107,0.000000,0.000000,0.707107 +6403,0.707107,0.000000,0.000000,0.707107 +6404,0.707107,0.000000,0.000000,0.707107 +6405,0.707107,0.000000,0.000000,0.707107 +6406,0.707107,0.000000,0.000000,0.707107 +6407,0.707107,0.000000,0.000000,0.707107 +6408,0.707107,0.000000,0.000000,0.707107 +6409,0.707107,0.000000,0.000000,0.707107 +6410,0.707107,0.000000,0.000000,0.707107 +6411,0.707107,0.000000,0.000000,0.707107 +6412,0.707107,0.000000,0.000000,0.707107 +6413,0.707107,0.000000,0.000000,0.707107 +6414,0.707107,0.000000,0.000000,0.707107 +6415,0.707107,0.000000,0.000000,0.707107 +6416,0.707107,0.000000,0.000000,0.707107 +6417,0.707107,0.000000,0.000000,0.707107 +6418,0.707107,0.000000,0.000000,0.707107 +6419,0.707107,0.000000,0.000000,0.707107 +6420,0.707107,0.000000,0.000000,0.707107 +6421,0.707107,0.000000,0.000000,0.707107 +6422,0.707107,0.000000,0.000000,0.707107 +6423,0.707107,0.000000,0.000000,0.707107 +6424,0.707107,0.000000,0.000000,0.707107 +6425,0.707107,0.000000,0.000000,0.707107 +6426,0.707107,0.000000,0.000000,0.707107 +6427,0.707107,0.000000,0.000000,0.707107 +6428,0.707107,0.000000,0.000000,0.707107 +6429,0.707107,0.000000,0.000000,0.707107 +6430,0.707107,0.000000,0.000000,0.707107 +6431,0.707107,0.000000,0.000000,0.707107 +6432,0.707107,0.000000,0.000000,0.707107 +6433,0.707107,0.000000,0.000000,0.707107 +6434,0.707107,0.000000,0.000000,0.707107 +6435,0.707107,0.000000,0.000000,0.707107 +6436,0.707107,0.000000,0.000000,0.707107 +6437,0.707107,0.000000,0.000000,0.707107 +6438,0.707107,0.000000,0.000000,0.707107 +6439,0.707107,0.000000,0.000000,0.707107 +6440,0.707107,0.000000,0.000000,0.707107 +6441,0.707107,0.000000,0.000000,0.707107 +6442,0.707107,0.000000,0.000000,0.707107 +6443,0.707107,0.000000,0.000000,0.707107 +6444,0.707107,0.000000,0.000000,0.707107 +6445,0.707107,0.000000,0.000000,0.707107 +6446,0.707107,0.000000,0.000000,0.707107 +6447,0.707107,0.000000,0.000000,0.707107 +6448,0.707107,0.000000,0.000000,0.707107 +6449,0.707107,0.000000,0.000000,0.707107 +6450,0.707107,0.000000,0.000000,0.707107 +6451,0.707107,0.000000,0.000000,0.707107 +6452,0.707107,0.000000,0.000000,0.707107 +6453,0.707107,0.000000,0.000000,0.707107 +6454,0.707107,0.000000,0.000000,0.707107 +6455,0.707107,0.000000,0.000000,0.707107 +6456,0.707107,0.000000,0.000000,0.707107 +6457,0.707107,0.000000,0.000000,0.707107 +6458,0.707107,0.000000,0.000000,0.707107 +6459,0.707107,0.000000,0.000000,0.707107 +6460,0.707107,0.000000,0.000000,0.707107 +6461,0.707107,0.000000,0.000000,0.707107 +6462,0.707107,0.000000,0.000000,0.707107 +6463,0.707107,0.000000,0.000000,0.707107 +6464,0.707107,0.000000,0.000000,0.707107 +6465,0.707107,0.000000,0.000000,0.707107 +6466,0.707107,0.000000,0.000000,0.707107 +6467,0.707107,0.000000,0.000000,0.707107 +6468,0.707107,0.000000,0.000000,0.707107 +6469,0.707107,0.000000,0.000000,0.707107 +6470,0.707107,0.000000,0.000000,0.707107 +6471,0.707107,0.000000,0.000000,0.707107 +6472,0.707107,0.000000,0.000000,0.707107 +6473,0.707107,0.000000,0.000000,0.707107 +6474,0.707107,0.000000,0.000000,0.707107 +6475,0.707107,0.000000,0.000000,0.707107 +6476,0.707107,0.000000,0.000000,0.707107 +6477,0.707107,0.000000,0.000000,0.707107 +6478,0.707107,0.000000,0.000000,0.707107 +6479,0.707107,0.000000,0.000000,0.707107 +6480,0.707107,0.000000,0.000000,0.707107 +6481,0.707107,0.000000,0.000000,0.707107 +6482,0.707107,0.000000,0.000000,0.707107 +6483,0.707107,0.000000,0.000000,0.707107 +6484,0.707107,0.000000,0.000000,0.707107 +6485,0.707107,0.000000,0.000000,0.707107 +6486,0.707107,0.000000,0.000000,0.707107 +6487,0.707107,0.000000,0.000000,0.707107 +6488,0.707107,0.000000,0.000000,0.707107 +6489,0.707107,0.000000,0.000000,0.707107 +6490,0.707107,0.000000,0.000000,0.707107 +6491,0.707107,0.000000,0.000000,0.707107 +6492,0.707107,0.000000,0.000000,0.707107 +6493,0.707107,0.000000,0.000000,0.707107 +6494,0.707107,0.000000,0.000000,0.707107 +6495,0.707107,0.000000,0.000000,0.707107 +6496,0.707107,0.000000,0.000000,0.707107 +6497,0.707107,0.000000,0.000000,0.707107 +6498,0.707107,0.000000,0.000000,0.707107 +6499,0.707107,0.000000,0.000000,0.707107 +6500,0.707107,0.000000,0.000000,0.707107 +6501,0.707107,0.000000,0.000000,0.707107 +6502,0.707107,0.000000,0.000000,0.707107 +6503,0.707107,0.000000,0.000000,0.707107 +6504,0.707107,0.000000,0.000000,0.707107 +6505,0.707107,0.000000,0.000000,0.707107 +6506,0.707107,0.000000,0.000000,0.707107 +6507,0.707107,0.000000,0.000000,0.707107 +6508,0.707107,0.000000,0.000000,0.707107 +6509,0.707107,0.000000,0.000000,0.707107 +6510,0.707107,0.000000,0.000000,0.707107 +6511,0.707107,0.000000,0.000000,0.707107 +6512,0.707107,0.000000,0.000000,0.707107 +6513,0.707107,0.000000,0.000000,0.707107 +6514,0.707107,0.000000,0.000000,0.707107 +6515,0.707107,0.000000,0.000000,0.707107 +6516,0.707107,0.000000,0.000000,0.707107 +6517,0.707107,0.000000,0.000000,0.707107 +6518,0.707107,0.000000,0.000000,0.707107 +6519,0.707107,0.000000,0.000000,0.707107 +6520,0.707107,0.000000,0.000000,0.707107 +6521,0.707107,0.000000,0.000000,0.707107 +6522,0.707107,0.000000,0.000000,0.707107 +6523,0.707107,0.000000,0.000000,0.707107 +6524,0.707107,0.000000,0.000000,0.707107 +6525,0.707107,0.000000,0.000000,0.707107 +6526,0.707107,0.000000,0.000000,0.707107 +6527,0.707107,0.000000,0.000000,0.707107 +6528,0.707107,0.000000,0.000000,0.707107 +6529,0.707107,0.000000,0.000000,0.707107 +6530,0.707107,0.000000,0.000000,0.707107 +6531,0.707107,0.000000,0.000000,0.707107 +6532,0.707107,0.000000,0.000000,0.707107 +6533,0.707107,0.000000,0.000000,0.707107 +6534,0.707107,0.000000,0.000000,0.707107 +6535,0.707107,0.000000,0.000000,0.707107 +6536,0.707107,0.000000,0.000000,0.707107 +6537,0.707107,0.000000,0.000000,0.707107 +6538,0.707107,0.000000,0.000000,0.707107 +6539,0.707107,0.000000,0.000000,0.707107 +6540,0.707107,0.000000,0.000000,0.707107 +6541,0.707107,0.000000,0.000000,0.707107 +6542,0.707107,0.000000,0.000000,0.707107 +6543,0.707107,0.000000,0.000000,0.707107 +6544,0.707107,0.000000,0.000000,0.707107 +6545,0.707107,0.000000,0.000000,0.707107 +6546,0.707107,0.000000,0.000000,0.707107 +6547,0.707107,0.000000,0.000000,0.707107 +6548,0.707107,0.000000,0.000000,0.707107 +6549,0.707107,0.000000,0.000000,0.707107 +6550,0.707107,0.000000,0.000000,0.707107 +6551,0.707107,0.000000,0.000000,0.707107 +6552,0.707107,0.000000,0.000000,0.707107 +6553,0.707107,0.000000,0.000000,0.707107 +6554,0.707107,0.000000,0.000000,0.707107 +6555,0.707107,0.000000,0.000000,0.707107 +6556,0.707107,0.000000,0.000000,0.707107 +6557,0.707107,0.000000,0.000000,0.707107 +6558,0.707107,0.000000,0.000000,0.707107 +6559,0.707107,0.000000,0.000000,0.707107 +6560,0.707107,0.000000,0.000000,0.707107 +6561,0.707107,0.000000,0.000000,0.707107 +6562,0.707107,0.000000,0.000000,0.707107 +6563,0.707107,0.000000,0.000000,0.707107 +6564,0.707107,0.000000,0.000000,0.707107 +6565,0.707107,0.000000,0.000000,0.707107 +6566,0.707107,0.000000,0.000000,0.707107 +6567,0.707107,0.000000,0.000000,0.707107 +6568,0.707107,0.000000,0.000000,0.707107 +6569,0.707107,0.000000,0.000000,0.707107 +6570,0.707107,0.000000,0.000000,0.707107 +6571,0.707107,0.000000,0.000000,0.707107 +6572,0.707107,0.000000,0.000000,0.707107 +6573,0.707107,0.000000,0.000000,0.707107 +6574,0.707107,0.000000,0.000000,0.707107 +6575,0.707107,0.000000,0.000000,0.707107 +6576,0.707107,0.000000,0.000000,0.707107 +6577,0.707107,0.000000,0.000000,0.707107 +6578,0.707107,0.000000,0.000000,0.707107 +6579,0.707107,0.000000,0.000000,0.707107 +6580,0.707107,0.000000,0.000000,0.707107 +6581,0.707107,0.000000,0.000000,0.707107 +6582,0.707107,0.000000,0.000000,0.707107 +6583,0.707107,0.000000,0.000000,0.707107 +6584,0.707107,0.000000,0.000000,0.707107 +6585,0.707107,0.000000,0.000000,0.707107 +6586,0.707107,0.000000,0.000000,0.707107 +6587,0.707107,0.000000,0.000000,0.707107 +6588,0.707107,0.000000,0.000000,0.707107 +6589,0.707107,0.000000,0.000000,0.707107 +6590,0.707107,0.000000,0.000000,0.707107 +6591,0.707107,0.000000,0.000000,0.707107 +6592,0.707107,0.000000,0.000000,0.707107 +6593,0.707107,0.000000,0.000000,0.707107 +6594,0.707107,0.000000,0.000000,0.707107 +6595,0.707107,0.000000,0.000000,0.707107 +6596,0.707107,0.000000,0.000000,0.707107 +6597,0.707107,0.000000,0.000000,0.707107 +6598,0.707107,0.000000,0.000000,0.707107 +6599,0.707107,0.000000,0.000000,0.707107 +6600,0.707107,0.000000,0.000000,0.707107 +6601,0.707107,0.000000,0.000000,0.707107 +6602,0.707107,0.000000,0.000000,0.707107 +6603,0.707107,0.000000,0.000000,0.707107 +6604,0.707107,0.000000,0.000000,0.707107 +6605,0.707107,0.000000,0.000000,0.707107 +6606,0.707107,0.000000,0.000000,0.707107 +6607,0.707107,0.000000,0.000000,0.707107 +6608,0.707107,0.000000,0.000000,0.707107 +6609,0.707107,0.000000,0.000000,0.707107 +6610,0.707107,0.000000,0.000000,0.707107 +6611,0.707107,0.000000,0.000000,0.707107 +6612,0.707107,0.000000,0.000000,0.707107 +6613,0.707107,0.000000,0.000000,0.707107 +6614,0.707107,0.000000,0.000000,0.707107 +6615,0.707107,0.000000,0.000000,0.707107 +6616,0.707107,0.000000,0.000000,0.707107 +6617,0.707107,0.000000,0.000000,0.707107 +6618,0.707107,0.000000,0.000000,0.707107 +6619,0.707107,0.000000,0.000000,0.707107 +6620,0.707107,0.000000,0.000000,0.707107 +6621,0.707107,0.000000,0.000000,0.707107 +6622,0.707107,0.000000,0.000000,0.707107 +6623,0.707107,0.000000,0.000000,0.707107 +6624,0.707107,0.000000,0.000000,0.707107 +6625,0.707107,0.000000,0.000000,0.707107 +6626,0.707107,0.000000,0.000000,0.707107 +6627,0.707107,0.000000,0.000000,0.707107 +6628,0.707107,0.000000,0.000000,0.707107 +6629,0.707107,0.000000,0.000000,0.707107 +6630,0.707107,0.000000,0.000000,0.707107 +6631,0.707107,0.000000,0.000000,0.707107 +6632,0.707107,0.000000,0.000000,0.707107 +6633,0.707107,0.000000,0.000000,0.707107 +6634,0.707107,0.000000,0.000000,0.707107 +6635,0.707107,0.000000,0.000000,0.707107 +6636,0.707107,0.000000,0.000000,0.707107 +6637,0.707107,0.000000,0.000000,0.707107 +6638,0.707107,0.000000,0.000000,0.707107 +6639,0.707107,0.000000,0.000000,0.707107 +6640,0.707107,0.000000,0.000000,0.707107 +6641,0.707107,0.000000,0.000000,0.707107 +6642,0.707107,0.000000,0.000000,0.707107 +6643,0.707107,0.000000,0.000000,0.707107 +6644,0.707107,0.000000,0.000000,0.707107 +6645,0.707107,0.000000,0.000000,0.707107 +6646,0.707107,0.000000,0.000000,0.707107 +6647,0.707107,0.000000,0.000000,0.707107 +6648,0.707107,0.000000,0.000000,0.707107 +6649,0.707107,0.000000,0.000000,0.707107 +6650,0.707107,0.000000,0.000000,0.707107 +6651,0.707107,0.000000,0.000000,0.707107 +6652,0.707107,0.000000,0.000000,0.707107 +6653,0.707107,0.000000,0.000000,0.707107 +6654,0.707107,0.000000,0.000000,0.707107 +6655,0.707107,0.000000,0.000000,0.707107 +6656,0.707107,0.000000,0.000000,0.707107 +6657,0.707107,0.000000,0.000000,0.707107 +6658,0.707107,0.000000,0.000000,0.707107 +6659,0.707107,0.000000,0.000000,0.707107 +6660,0.707107,0.000000,0.000000,0.707107 +6661,0.707107,0.000000,0.000000,0.707107 +6662,0.707107,0.000000,0.000000,0.707107 +6663,0.707107,0.000000,0.000000,0.707107 +6664,0.707107,0.000000,0.000000,0.707107 +6665,0.707107,0.000000,0.000000,0.707107 +6666,0.707107,0.000000,0.000000,0.707107 +6667,0.707107,0.000000,0.000000,0.707107 +6668,0.707107,0.000000,0.000000,0.707107 +6669,0.707107,0.000000,0.000000,0.707107 +6670,0.707107,0.000000,0.000000,0.707107 +6671,0.707107,0.000000,0.000000,0.707107 +6672,0.707107,0.000000,0.000000,0.707107 +6673,0.707107,0.000000,0.000000,0.707107 +6674,0.707107,0.000000,0.000000,0.707107 +6675,0.707107,0.000000,0.000000,0.707107 +6676,0.707107,0.000000,0.000000,0.707107 +6677,0.707107,0.000000,0.000000,0.707107 +6678,0.707107,0.000000,0.000000,0.707107 +6679,0.707107,0.000000,0.000000,0.707107 +6680,0.707107,0.000000,0.000000,0.707107 +6681,0.707107,0.000000,0.000000,0.707107 +6682,0.707107,0.000000,0.000000,0.707107 +6683,0.707107,0.000000,0.000000,0.707107 +6684,0.707107,0.000000,0.000000,0.707107 +6685,0.707107,0.000000,0.000000,0.707107 +6686,0.707107,0.000000,0.000000,0.707107 +6687,0.707107,0.000000,0.000000,0.707107 +6688,0.707107,0.000000,0.000000,0.707107 +6689,0.707107,0.000000,0.000000,0.707107 +6690,0.707107,0.000000,0.000000,0.707107 +6691,0.707107,0.000000,0.000000,0.707107 +6692,0.707107,0.000000,0.000000,0.707107 +6693,0.707107,0.000000,0.000000,0.707107 +6694,0.707107,0.000000,0.000000,0.707107 +6695,0.707107,0.000000,0.000000,0.707107 +6696,0.707107,0.000000,0.000000,0.707107 +6697,0.707107,0.000000,0.000000,0.707107 +6698,0.707107,0.000000,0.000000,0.707107 +6699,0.707107,0.000000,0.000000,0.707107 +6700,0.707107,0.000000,0.000000,0.707107 +6701,0.707107,0.000000,0.000000,0.707107 +6702,0.707107,0.000000,0.000000,0.707107 +6703,0.707107,0.000000,0.000000,0.707107 +6704,0.707107,0.000000,0.000000,0.707107 +6705,0.707107,0.000000,0.000000,0.707107 +6706,0.707107,0.000000,0.000000,0.707107 +6707,0.707107,0.000000,0.000000,0.707107 +6708,0.707107,0.000000,0.000000,0.707107 +6709,0.707107,0.000000,0.000000,0.707107 +6710,0.707107,0.000000,0.000000,0.707107 +6711,0.707107,0.000000,0.000000,0.707107 +6712,0.707107,0.000000,0.000000,0.707107 +6713,0.707107,0.000000,0.000000,0.707107 +6714,0.707107,0.000000,0.000000,0.707107 +6715,0.707107,0.000000,0.000000,0.707107 +6716,0.707107,0.000000,0.000000,0.707107 +6717,0.707107,0.000000,0.000000,0.707107 +6718,0.707107,0.000000,0.000000,0.707107 +6719,0.707107,0.000000,0.000000,0.707107 +6720,0.707107,0.000000,0.000000,0.707107 +6721,0.707107,0.000000,0.000000,0.707107 +6722,0.707107,0.000000,0.000000,0.707107 +6723,0.707107,0.000000,0.000000,0.707107 +6724,0.707107,0.000000,0.000000,0.707107 +6725,0.707107,0.000000,0.000000,0.707107 +6726,0.707107,0.000000,0.000000,0.707107 +6727,0.707107,0.000000,0.000000,0.707107 +6728,0.707107,0.000000,0.000000,0.707107 +6729,0.707107,0.000000,0.000000,0.707107 +6730,0.707107,0.000000,0.000000,0.707107 +6731,0.707107,0.000000,0.000000,0.707107 +6732,0.707107,0.000000,0.000000,0.707107 +6733,0.707107,0.000000,0.000000,0.707107 +6734,0.707107,0.000000,0.000000,0.707107 +6735,0.707107,0.000000,0.000000,0.707107 +6736,0.707107,0.000000,0.000000,0.707107 +6737,0.707107,0.000000,0.000000,0.707107 +6738,0.707107,0.000000,0.000000,0.707107 +6739,0.707107,0.000000,0.000000,0.707107 +6740,0.707107,0.000000,0.000000,0.707107 +6741,0.707107,0.000000,0.000000,0.707107 +6742,0.707107,0.000000,0.000000,0.707107 +6743,0.707107,0.000000,0.000000,0.707107 +6744,0.707107,0.000000,0.000000,0.707107 +6745,0.707107,0.000000,0.000000,0.707107 +6746,0.707107,0.000000,0.000000,0.707107 +6747,0.707107,0.000000,0.000000,0.707107 +6748,0.707107,0.000000,0.000000,0.707107 +6749,0.707107,0.000000,0.000000,0.707107 +6750,0.707107,0.000000,0.000000,0.707107 +6751,0.707107,0.000000,0.000000,0.707107 +6752,0.707107,0.000000,0.000000,0.707107 +6753,0.707107,0.000000,0.000000,0.707107 +6754,0.707107,0.000000,0.000000,0.707107 +6755,0.707107,0.000000,0.000000,0.707107 +6756,0.707107,0.000000,0.000000,0.707107 +6757,0.707107,0.000000,0.000000,0.707107 +6758,0.707107,0.000000,0.000000,0.707107 +6759,0.707107,0.000000,0.000000,0.707107 +6760,0.707107,0.000000,0.000000,0.707107 +6761,0.707107,0.000000,0.000000,0.707107 +6762,0.707107,0.000000,0.000000,0.707107 +6763,0.707107,0.000000,0.000000,0.707107 +6764,0.707107,0.000000,0.000000,0.707107 +6765,0.707107,0.000000,0.000000,0.707107 +6766,0.707107,0.000000,0.000000,0.707107 +6767,0.707107,0.000000,0.000000,0.707107 +6768,0.707107,0.000000,0.000000,0.707107 +6769,0.707107,0.000000,0.000000,0.707107 +6770,0.707107,0.000000,0.000000,0.707107 +6771,0.707107,0.000000,0.000000,0.707107 +6772,0.707107,0.000000,0.000000,0.707107 +6773,0.707107,0.000000,0.000000,0.707107 +6774,0.707107,0.000000,0.000000,0.707107 +6775,0.707107,0.000000,0.000000,0.707107 +6776,0.707107,0.000000,0.000000,0.707107 +6777,0.707107,0.000000,0.000000,0.707107 +6778,0.707107,0.000000,0.000000,0.707107 +6779,0.707107,0.000000,0.000000,0.707107 +6780,0.707107,0.000000,0.000000,0.707107 +6781,0.707107,0.000000,0.000000,0.707107 +6782,0.707107,0.000000,0.000000,0.707107 +6783,0.707107,0.000000,0.000000,0.707107 +6784,0.707107,0.000000,0.000000,0.707107 +6785,0.707107,0.000000,0.000000,0.707107 +6786,0.707107,0.000000,0.000000,0.707107 +6787,0.707107,0.000000,0.000000,0.707107 +6788,0.707107,0.000000,0.000000,0.707107 +6789,0.707107,0.000000,0.000000,0.707107 +6790,0.707107,0.000000,0.000000,0.707107 +6791,0.707107,0.000000,0.000000,0.707107 +6792,0.707107,0.000000,0.000000,0.707107 +6793,0.707107,0.000000,0.000000,0.707107 +6794,0.707107,0.000000,0.000000,0.707107 +6795,0.707107,0.000000,0.000000,0.707107 +6796,0.707107,0.000000,0.000000,0.707107 +6797,0.707107,0.000000,0.000000,0.707107 +6798,0.707107,0.000000,0.000000,0.707107 +6799,0.707107,0.000000,0.000000,0.707107 +6800,0.707107,0.000000,0.000000,0.707107 +6801,0.707107,0.000000,0.000000,0.707107 +6802,0.707107,0.000000,0.000000,0.707107 +6803,0.707107,0.000000,0.000000,0.707107 +6804,0.707107,0.000000,0.000000,0.707107 +6805,0.707107,0.000000,0.000000,0.707107 +6806,0.707107,0.000000,0.000000,0.707107 +6807,0.707107,0.000000,0.000000,0.707107 +6808,0.707107,0.000000,0.000000,0.707107 +6809,0.707107,0.000000,0.000000,0.707107 +6810,0.707107,0.000000,0.000000,0.707107 +6811,0.707107,0.000000,0.000000,0.707107 +6812,0.707107,0.000000,0.000000,0.707107 +6813,0.707107,0.000000,0.000000,0.707107 +6814,0.707107,0.000000,0.000000,0.707107 +6815,0.707107,0.000000,0.000000,0.707107 +6816,0.707107,0.000000,0.000000,0.707107 +6817,0.707107,0.000000,0.000000,0.707107 +6818,0.707107,0.000000,0.000000,0.707107 +6819,0.707107,0.000000,0.000000,0.707107 +6820,0.707107,0.000000,0.000000,0.707107 +6821,0.707107,0.000000,0.000000,0.707107 +6822,0.707107,0.000000,0.000000,0.707107 +6823,0.707107,0.000000,0.000000,0.707107 +6824,0.707107,0.000000,0.000000,0.707107 +6825,0.707107,0.000000,0.000000,0.707107 +6826,0.707107,0.000000,0.000000,0.707107 +6827,0.707107,0.000000,0.000000,0.707107 +6828,0.707107,0.000000,0.000000,0.707107 +6829,0.707107,0.000000,0.000000,0.707107 +6830,0.707107,0.000000,0.000000,0.707107 +6831,0.707107,0.000000,0.000000,0.707107 +6832,0.707107,0.000000,0.000000,0.707107 +6833,0.707107,0.000000,0.000000,0.707107 +6834,0.707107,0.000000,0.000000,0.707107 +6835,0.707107,0.000000,0.000000,0.707107 +6836,0.707107,0.000000,0.000000,0.707107 +6837,0.707107,0.000000,0.000000,0.707107 +6838,0.707107,0.000000,0.000000,0.707107 +6839,0.707107,0.000000,0.000000,0.707107 +6840,0.707107,0.000000,0.000000,0.707107 +6841,0.707107,0.000000,0.000000,0.707107 +6842,0.707107,0.000000,0.000000,0.707107 +6843,0.707107,0.000000,0.000000,0.707107 +6844,0.707107,0.000000,0.000000,0.707107 +6845,0.707107,0.000000,0.000000,0.707107 +6846,0.707107,0.000000,0.000000,0.707107 +6847,0.707107,0.000000,0.000000,0.707107 +6848,0.707107,0.000000,0.000000,0.707107 +6849,0.707107,0.000000,0.000000,0.707107 +6850,0.707107,0.000000,0.000000,0.707107 +6851,0.707107,0.000000,0.000000,0.707107 +6852,0.707107,0.000000,0.000000,0.707107 +6853,0.707107,0.000000,0.000000,0.707107 +6854,0.707107,0.000000,0.000000,0.707107 +6855,0.707107,0.000000,0.000000,0.707107 +6856,0.707107,0.000000,0.000000,0.707107 +6857,0.707107,0.000000,0.000000,0.707107 +6858,0.707107,0.000000,0.000000,0.707107 +6859,0.707107,0.000000,0.000000,0.707107 +6860,0.707107,0.000000,0.000000,0.707107 +6861,0.707107,0.000000,0.000000,0.707107 +6862,0.707107,0.000000,0.000000,0.707107 +6863,0.707107,0.000000,0.000000,0.707107 +6864,0.707107,0.000000,0.000000,0.707107 +6865,0.707107,0.000000,0.000000,0.707107 +6866,0.707107,0.000000,0.000000,0.707107 +6867,0.707107,0.000000,0.000000,0.707107 +6868,0.707107,0.000000,0.000000,0.707107 +6869,0.707107,0.000000,0.000000,0.707107 +6870,0.707107,0.000000,0.000000,0.707107 +6871,0.707107,0.000000,0.000000,0.707107 +6872,0.707107,0.000000,0.000000,0.707107 +6873,0.707107,0.000000,0.000000,0.707107 +6874,0.707107,0.000000,0.000000,0.707107 +6875,0.707107,0.000000,0.000000,0.707107 +6876,0.707107,0.000000,0.000000,0.707107 +6877,0.707107,0.000000,0.000000,0.707107 +6878,0.707107,0.000000,0.000000,0.707107 +6879,0.707107,0.000000,0.000000,0.707107 +6880,0.707107,0.000000,0.000000,0.707107 +6881,0.707107,0.000000,0.000000,0.707107 +6882,0.707107,0.000000,0.000000,0.707107 +6883,0.707107,0.000000,0.000000,0.707107 +6884,0.707107,0.000000,0.000000,0.707107 +6885,0.707107,0.000000,0.000000,0.707107 +6886,0.707107,0.000000,0.000000,0.707107 +6887,0.707107,0.000000,0.000000,0.707107 +6888,0.707107,0.000000,0.000000,0.707107 +6889,0.707107,0.000000,0.000000,0.707107 +6890,0.707107,0.000000,0.000000,0.707107 +6891,0.707107,0.000000,0.000000,0.707107 +6892,0.707107,0.000000,0.000000,0.707107 +6893,0.707107,0.000000,0.000000,0.707107 +6894,0.707107,0.000000,0.000000,0.707107 +6895,0.707107,0.000000,0.000000,0.707107 +6896,0.707107,0.000000,0.000000,0.707107 +6897,0.707107,0.000000,0.000000,0.707107 +6898,0.707107,0.000000,0.000000,0.707107 +6899,0.707107,0.000000,0.000000,0.707107 +6900,0.707107,0.000000,0.000000,0.707107 +6901,0.707107,0.000000,0.000000,0.707107 +6902,0.707107,0.000000,0.000000,0.707107 +6903,0.707107,0.000000,0.000000,0.707107 +6904,0.707107,0.000000,0.000000,0.707107 +6905,0.707107,0.000000,0.000000,0.707107 +6906,0.707107,0.000000,0.000000,0.707107 +6907,0.707107,0.000000,0.000000,0.707107 +6908,0.707107,0.000000,0.000000,0.707107 +6909,0.707107,0.000000,0.000000,0.707107 +6910,0.707107,0.000000,0.000000,0.707107 +6911,0.707107,0.000000,0.000000,0.707107 +6912,0.707107,0.000000,0.000000,0.707107 +6913,0.707107,0.000000,0.000000,0.707107 +6914,0.707107,0.000000,0.000000,0.707107 +6915,0.707107,0.000000,0.000000,0.707107 +6916,0.707107,0.000000,0.000000,0.707107 +6917,0.707107,0.000000,0.000000,0.707107 +6918,0.707107,0.000000,0.000000,0.707107 +6919,0.707107,0.000000,0.000000,0.707107 +6920,0.707107,0.000000,0.000000,0.707107 +6921,0.707107,0.000000,0.000000,0.707107 +6922,0.707107,0.000000,0.000000,0.707107 +6923,0.707107,0.000000,0.000000,0.707107 +6924,0.707107,0.000000,0.000000,0.707107 +6925,0.707107,0.000000,0.000000,0.707107 +6926,0.707107,0.000000,0.000000,0.707107 +6927,0.707107,0.000000,0.000000,0.707107 +6928,0.707107,0.000000,0.000000,0.707107 +6929,0.707107,0.000000,0.000000,0.707107 +6930,0.707107,0.000000,0.000000,0.707107 +6931,0.707107,0.000000,0.000000,0.707107 +6932,0.707107,0.000000,0.000000,0.707107 +6933,0.707107,0.000000,0.000000,0.707107 +6934,0.707107,0.000000,0.000000,0.707107 +6935,0.707107,0.000000,0.000000,0.707107 +6936,0.707107,0.000000,0.000000,0.707107 +6937,0.707107,0.000000,0.000000,0.707107 +6938,0.707107,0.000000,0.000000,0.707107 +6939,0.707107,0.000000,0.000000,0.707107 +6940,0.707107,0.000000,0.000000,0.707107 +6941,0.707107,0.000000,0.000000,0.707107 +6942,0.707107,0.000000,0.000000,0.707107 +6943,0.707107,0.000000,0.000000,0.707107 +6944,0.707107,0.000000,0.000000,0.707107 +6945,0.707107,0.000000,0.000000,0.707107 +6946,0.707107,0.000000,0.000000,0.707107 +6947,0.707107,0.000000,0.000000,0.707107 +6948,0.707107,0.000000,0.000000,0.707107 +6949,0.707107,0.000000,0.000000,0.707107 +6950,0.707107,0.000000,0.000000,0.707107 +6951,0.707107,0.000000,0.000000,0.707107 +6952,0.707107,0.000000,0.000000,0.707107 +6953,0.707107,0.000000,0.000000,0.707107 +6954,0.707107,0.000000,0.000000,0.707107 +6955,0.707107,0.000000,0.000000,0.707107 +6956,0.707107,0.000000,0.000000,0.707107 +6957,0.707107,0.000000,0.000000,0.707107 +6958,0.707107,0.000000,0.000000,0.707107 +6959,0.707107,0.000000,0.000000,0.707107 +6960,0.707107,0.000000,0.000000,0.707107 +6961,0.707107,0.000000,0.000000,0.707107 +6962,0.707107,0.000000,0.000000,0.707107 +6963,0.707107,0.000000,0.000000,0.707107 +6964,0.707107,0.000000,0.000000,0.707107 +6965,0.707107,0.000000,0.000000,0.707107 +6966,0.707107,0.000000,0.000000,0.707107 +6967,0.707107,0.000000,0.000000,0.707107 +6968,0.707107,0.000000,0.000000,0.707107 +6969,0.707107,0.000000,0.000000,0.707107 +6970,0.707107,0.000000,0.000000,0.707107 +6971,0.707107,0.000000,0.000000,0.707107 +6972,0.707107,0.000000,0.000000,0.707107 +6973,0.707107,0.000000,0.000000,0.707107 +6974,0.707107,0.000000,0.000000,0.707107 +6975,0.707107,0.000000,0.000000,0.707107 +6976,0.707107,0.000000,0.000000,0.707107 +6977,0.707107,0.000000,0.000000,0.707107 +6978,0.707107,0.000000,0.000000,0.707107 +6979,0.707107,0.000000,0.000000,0.707107 +6980,0.707107,0.000000,0.000000,0.707107 +6981,0.707107,0.000000,0.000000,0.707107 +6982,0.707107,0.000000,0.000000,0.707107 +6983,0.707107,0.000000,0.000000,0.707107 +6984,0.707107,0.000000,0.000000,0.707107 +6985,0.707107,0.000000,0.000000,0.707107 +6986,0.707107,0.000000,0.000000,0.707107 +6987,0.707107,0.000000,0.000000,0.707107 +6988,0.707107,0.000000,0.000000,0.707107 +6989,0.707107,0.000000,0.000000,0.707107 +6990,0.707107,0.000000,0.000000,0.707107 +6991,0.707107,0.000000,0.000000,0.707107 +6992,0.707107,0.000000,0.000000,0.707107 +6993,0.707107,0.000000,0.000000,0.707107 +6994,0.707107,0.000000,0.000000,0.707107 +6995,0.707107,0.000000,0.000000,0.707107 +6996,0.707107,0.000000,0.000000,0.707107 +6997,0.707107,0.000000,0.000000,0.707107 +6998,0.707107,0.000000,0.000000,0.707107 +6999,0.707107,0.000000,0.000000,0.707107 +7000,0.707107,0.000000,0.000000,0.707107 +7001,0.707107,0.000000,0.000000,0.707107 +7002,0.707107,0.000000,0.000000,0.707107 +7003,0.707107,0.000000,0.000000,0.707107 +7004,0.707107,0.000000,0.000000,0.707107 +7005,0.707107,0.000000,0.000000,0.707107 +7006,0.707107,0.000000,0.000000,0.707107 +7007,0.707107,0.000000,0.000000,0.707107 +7008,0.707107,0.000000,0.000000,0.707107 +7009,0.707107,0.000000,0.000000,0.707107 +7010,0.707107,0.000000,0.000000,0.707107 +7011,0.707107,0.000000,0.000000,0.707107 +7012,0.707107,0.000000,0.000000,0.707107 +7013,0.707107,0.000000,0.000000,0.707107 +7014,0.707107,0.000000,0.000000,0.707107 +7015,0.707107,0.000000,0.000000,0.707107 +7016,0.707107,0.000000,0.000000,0.707107 +7017,0.707107,0.000000,0.000000,0.707107 +7018,0.707107,0.000000,0.000000,0.707107 +7019,0.707107,0.000000,0.000000,0.707107 +7020,0.707107,0.000000,0.000000,0.707107 +7021,0.707107,0.000000,0.000000,0.707107 +7022,0.707107,0.000000,0.000000,0.707107 +7023,0.707107,0.000000,0.000000,0.707107 +7024,0.707107,0.000000,0.000000,0.707107 +7025,0.707107,0.000000,0.000000,0.707107 +7026,0.707107,0.000000,0.000000,0.707107 +7027,0.707107,0.000000,0.000000,0.707107 +7028,0.707107,0.000000,0.000000,0.707107 +7029,0.707107,0.000000,0.000000,0.707107 +7030,0.707107,0.000000,0.000000,0.707107 +7031,0.707107,0.000000,0.000000,0.707107 +7032,0.707107,0.000000,0.000000,0.707107 +7033,0.707107,0.000000,0.000000,0.707107 +7034,0.707107,0.000000,0.000000,0.707107 +7035,0.707107,0.000000,0.000000,0.707107 +7036,0.707107,0.000000,0.000000,0.707107 +7037,0.707107,0.000000,0.000000,0.707107 +7038,0.707107,0.000000,0.000000,0.707107 +7039,0.707107,0.000000,0.000000,0.707107 +7040,0.707107,0.000000,0.000000,0.707107 +7041,0.707107,0.000000,0.000000,0.707107 +7042,0.707107,0.000000,0.000000,0.707107 +7043,0.707107,0.000000,0.000000,0.707107 +7044,0.707107,0.000000,0.000000,0.707107 +7045,0.707107,0.000000,0.000000,0.707107 +7046,0.707107,0.000000,0.000000,0.707107 +7047,0.707107,0.000000,0.000000,0.707107 +7048,0.707107,0.000000,0.000000,0.707107 +7049,0.707107,0.000000,0.000000,0.707107 +7050,0.707107,0.000000,0.000000,0.707107 +7051,0.707107,0.000000,0.000000,0.707107 +7052,0.707107,0.000000,0.000000,0.707107 +7053,0.707107,0.000000,0.000000,0.707107 +7054,0.707107,0.000000,0.000000,0.707107 +7055,0.707107,0.000000,0.000000,0.707107 +7056,0.707107,0.000000,0.000000,0.707107 +7057,0.707107,0.000000,0.000000,0.707107 +7058,0.707107,0.000000,0.000000,0.707107 +7059,0.707107,0.000000,0.000000,0.707107 +7060,0.707107,0.000000,0.000000,0.707107 +7061,0.707107,0.000000,0.000000,0.707107 +7062,0.707107,0.000000,0.000000,0.707107 +7063,0.707107,0.000000,0.000000,0.707107 +7064,0.707107,0.000000,0.000000,0.707107 +7065,0.707107,0.000000,0.000000,0.707107 +7066,0.707107,0.000000,0.000000,0.707107 +7067,0.707107,0.000000,0.000000,0.707107 +7068,0.707107,0.000000,0.000000,0.707107 +7069,0.707107,0.000000,0.000000,0.707107 +7070,0.707107,0.000000,0.000000,0.707107 +7071,0.707107,0.000000,0.000000,0.707107 +7072,0.707107,0.000000,0.000000,0.707107 +7073,0.707107,0.000000,0.000000,0.707107 +7074,0.707107,0.000000,0.000000,0.707107 +7075,0.707107,0.000000,0.000000,0.707107 +7076,0.707107,0.000000,0.000000,0.707107 +7077,0.707107,0.000000,0.000000,0.707107 +7078,0.707107,0.000000,0.000000,0.707107 +7079,0.707107,0.000000,0.000000,0.707107 +7080,0.707107,0.000000,0.000000,0.707107 +7081,0.707107,0.000000,0.000000,0.707107 +7082,0.707107,0.000000,0.000000,0.707107 +7083,0.707107,0.000000,0.000000,0.707107 +7084,0.707107,0.000000,0.000000,0.707107 +7085,0.707107,0.000000,0.000000,0.707107 +7086,0.707107,0.000000,0.000000,0.707107 +7087,0.707107,0.000000,0.000000,0.707107 +7088,0.707107,0.000000,0.000000,0.707107 +7089,0.707107,0.000000,0.000000,0.707107 +7090,0.707107,0.000000,0.000000,0.707107 +7091,0.707107,0.000000,0.000000,0.707107 +7092,0.707107,0.000000,0.000000,0.707107 +7093,0.707107,0.000000,0.000000,0.707107 +7094,0.707107,0.000000,0.000000,0.707107 +7095,0.707107,0.000000,0.000000,0.707107 +7096,0.707107,0.000000,0.000000,0.707107 +7097,0.707107,0.000000,0.000000,0.707107 +7098,0.707107,0.000000,0.000000,0.707107 +7099,0.707107,0.000000,0.000000,0.707107 +7100,0.707107,0.000000,0.000000,0.707107 +7101,0.707107,0.000000,0.000000,0.707107 +7102,0.707107,0.000000,0.000000,0.707107 +7103,0.707107,0.000000,0.000000,0.707107 +7104,0.707107,0.000000,0.000000,0.707107 +7105,0.707107,0.000000,0.000000,0.707107 +7106,0.707107,0.000000,0.000000,0.707107 +7107,0.707107,0.000000,0.000000,0.707107 +7108,0.707107,0.000000,0.000000,0.707107 +7109,0.707107,0.000000,0.000000,0.707107 +7110,0.707107,0.000000,0.000000,0.707107 +7111,0.707107,0.000000,0.000000,0.707107 +7112,0.707107,0.000000,0.000000,0.707107 +7113,0.707107,0.000000,0.000000,0.707107 +7114,0.707107,0.000000,0.000000,0.707107 +7115,0.707107,0.000000,0.000000,0.707107 +7116,0.707107,0.000000,0.000000,0.707107 +7117,0.707107,0.000000,0.000000,0.707107 +7118,0.707107,0.000000,0.000000,0.707107 +7119,0.707107,0.000000,0.000000,0.707107 +7120,0.707107,0.000000,0.000000,0.707107 +7121,0.707107,0.000000,0.000000,0.707107 +7122,0.707107,0.000000,0.000000,0.707107 +7123,0.707107,0.000000,0.000000,0.707107 +7124,0.707107,0.000000,0.000000,0.707107 +7125,0.707107,0.000000,0.000000,0.707107 +7126,0.707107,0.000000,0.000000,0.707107 +7127,0.707107,0.000000,0.000000,0.707107 +7128,0.707107,0.000000,0.000000,0.707107 +7129,0.707107,0.000000,0.000000,0.707107 +7130,0.707107,0.000000,0.000000,0.707107 +7131,0.707107,0.000000,0.000000,0.707107 +7132,0.707107,0.000000,0.000000,0.707107 +7133,0.707107,0.000000,0.000000,0.707107 +7134,0.707107,0.000000,0.000000,0.707107 +7135,0.707107,0.000000,0.000000,0.707107 +7136,0.707107,0.000000,0.000000,0.707107 +7137,0.707107,0.000000,0.000000,0.707107 +7138,0.707107,0.000000,0.000000,0.707107 +7139,0.707107,0.000000,0.000000,0.707107 +7140,0.707107,0.000000,0.000000,0.707107 +7141,0.707107,0.000000,0.000000,0.707107 +7142,0.707107,0.000000,0.000000,0.707107 +7143,0.707107,0.000000,0.000000,0.707107 +7144,0.707107,0.000000,0.000000,0.707107 +7145,0.707107,0.000000,0.000000,0.707107 +7146,0.707107,0.000000,0.000000,0.707107 +7147,0.707107,0.000000,0.000000,0.707107 +7148,0.707107,0.000000,0.000000,0.707107 +7149,0.707107,0.000000,0.000000,0.707107 +7150,0.707107,0.000000,0.000000,0.707107 +7151,0.707107,0.000000,0.000000,0.707107 +7152,0.707107,0.000000,0.000000,0.707107 +7153,0.707107,0.000000,0.000000,0.707107 +7154,0.707107,0.000000,0.000000,0.707107 +7155,0.707107,0.000000,0.000000,0.707107 +7156,0.707107,0.000000,0.000000,0.707107 +7157,0.707107,0.000000,0.000000,0.707107 +7158,0.707107,0.000000,0.000000,0.707107 +7159,0.707107,0.000000,0.000000,0.707107 +7160,0.707107,0.000000,0.000000,0.707107 +7161,0.707107,0.000000,0.000000,0.707107 +7162,0.707107,0.000000,0.000000,0.707107 +7163,0.707107,0.000000,0.000000,0.707107 +7164,0.707107,0.000000,0.000000,0.707107 +7165,0.707107,0.000000,0.000000,0.707107 +7166,0.707107,0.000000,0.000000,0.707107 +7167,0.707107,0.000000,0.000000,0.707107 +7168,0.707107,0.000000,0.000000,0.707107 +7169,0.707107,0.000000,0.000000,0.707107 +7170,0.707107,0.000000,0.000000,0.707107 +7171,0.707107,0.000000,0.000000,0.707107 +7172,0.707107,0.000000,0.000000,0.707107 +7173,0.707107,0.000000,0.000000,0.707107 +7174,0.707107,0.000000,0.000000,0.707107 +7175,0.707107,0.000000,0.000000,0.707107 +7176,0.707107,0.000000,0.000000,0.707107 +7177,0.707107,0.000000,0.000000,0.707107 +7178,0.707107,0.000000,0.000000,0.707107 +7179,0.707107,0.000000,0.000000,0.707107 +7180,0.707107,0.000000,0.000000,0.707107 +7181,0.707107,0.000000,0.000000,0.707107 +7182,0.707107,0.000000,0.000000,0.707107 +7183,0.707107,0.000000,0.000000,0.707107 +7184,0.707107,0.000000,0.000000,0.707107 +7185,0.707107,0.000000,0.000000,0.707107 +7186,0.707107,0.000000,0.000000,0.707107 +7187,0.707107,0.000000,0.000000,0.707107 +7188,0.707107,0.000000,0.000000,0.707107 +7189,0.707107,0.000000,0.000000,0.707107 +7190,0.707107,0.000000,0.000000,0.707107 +7191,0.707107,0.000000,0.000000,0.707107 +7192,0.707107,0.000000,0.000000,0.707107 +7193,0.707107,0.000000,0.000000,0.707107 +7194,0.707107,0.000000,0.000000,0.707107 +7195,0.707107,0.000000,0.000000,0.707107 +7196,0.707107,0.000000,0.000000,0.707107 +7197,0.707107,0.000000,0.000000,0.707107 +7198,0.707107,0.000000,0.000000,0.707107 +7199,0.707107,0.000000,0.000000,0.707107 +7200,0.707107,0.000000,0.000000,0.707107 +7201,0.707107,0.000000,0.000000,0.707107 +7202,0.707107,0.000000,0.000000,0.707107 +7203,0.707107,0.000000,0.000000,0.707107 +7204,0.707107,0.000000,0.000000,0.707107 +7205,0.707107,0.000000,0.000000,0.707107 +7206,0.707107,0.000000,0.000000,0.707107 +7207,0.707107,0.000000,0.000000,0.707107 +7208,0.707107,0.000000,0.000000,0.707107 +7209,0.707107,0.000000,0.000000,0.707107 +7210,0.707107,0.000000,0.000000,0.707107 +7211,0.707107,0.000000,0.000000,0.707107 +7212,0.707107,0.000000,0.000000,0.707107 +7213,0.707107,0.000000,0.000000,0.707107 +7214,0.707107,0.000000,0.000000,0.707107 +7215,0.707107,0.000000,0.000000,0.707107 +7216,0.707107,0.000000,0.000000,0.707107 +7217,0.707107,0.000000,0.000000,0.707107 +7218,0.707107,0.000000,0.000000,0.707107 +7219,0.707107,0.000000,0.000000,0.707107 +7220,0.707107,0.000000,0.000000,0.707107 +7221,0.707107,0.000000,0.000000,0.707107 +7222,0.707107,0.000000,0.000000,0.707107 +7223,0.707107,0.000000,0.000000,0.707107 +7224,0.707107,0.000000,0.000000,0.707107 +7225,0.707107,0.000000,0.000000,0.707107 +7226,0.707107,0.000000,0.000000,0.707107 +7227,0.707107,0.000000,0.000000,0.707107 +7228,0.707107,0.000000,0.000000,0.707107 +7229,0.707107,0.000000,0.000000,0.707107 +7230,0.707107,0.000000,0.000000,0.707107 +7231,0.707107,0.000000,0.000000,0.707107 +7232,0.707107,0.000000,0.000000,0.707107 +7233,0.707107,0.000000,0.000000,0.707107 +7234,0.707107,0.000000,0.000000,0.707107 +7235,0.707107,0.000000,0.000000,0.707107 +7236,0.707107,0.000000,0.000000,0.707107 +7237,0.707107,0.000000,0.000000,0.707107 +7238,0.707107,0.000000,0.000000,0.707107 +7239,0.707107,0.000000,0.000000,0.707107 +7240,0.707107,0.000000,0.000000,0.707107 +7241,0.707107,0.000000,0.000000,0.707107 +7242,0.707107,0.000000,0.000000,0.707107 +7243,0.707107,0.000000,0.000000,0.707107 +7244,0.707107,0.000000,0.000000,0.707107 +7245,0.707107,0.000000,0.000000,0.707107 +7246,0.707107,0.000000,0.000000,0.707107 +7247,0.707107,0.000000,0.000000,0.707107 +7248,0.707107,0.000000,0.000000,0.707107 +7249,0.707107,0.000000,0.000000,0.707107 +7250,0.707107,0.000000,0.000000,0.707107 +7251,0.707107,0.000000,0.000000,0.707107 +7252,0.707107,0.000000,0.000000,0.707107 +7253,0.707107,0.000000,0.000000,0.707107 +7254,0.707107,0.000000,0.000000,0.707107 +7255,0.707107,0.000000,0.000000,0.707107 +7256,0.707107,0.000000,0.000000,0.707107 +7257,0.707107,0.000000,0.000000,0.707107 +7258,0.707107,0.000000,0.000000,0.707107 +7259,0.707107,0.000000,0.000000,0.707107 +7260,0.707107,0.000000,0.000000,0.707107 +7261,0.707107,0.000000,0.000000,0.707107 +7262,0.707107,0.000000,0.000000,0.707107 +7263,0.707107,0.000000,0.000000,0.707107 +7264,0.707107,0.000000,0.000000,0.707107 +7265,0.707107,0.000000,0.000000,0.707107 +7266,0.707107,0.000000,0.000000,0.707107 +7267,0.707107,0.000000,0.000000,0.707107 +7268,0.707107,0.000000,0.000000,0.707107 +7269,0.707107,0.000000,0.000000,0.707107 +7270,0.707107,0.000000,0.000000,0.707107 +7271,0.707107,0.000000,0.000000,0.707107 +7272,0.707107,0.000000,0.000000,0.707107 +7273,0.707107,0.000000,0.000000,0.707107 +7274,0.707107,0.000000,0.000000,0.707107 +7275,0.707107,0.000000,0.000000,0.707107 +7276,0.707107,0.000000,0.000000,0.707107 +7277,0.707107,0.000000,0.000000,0.707107 +7278,0.707107,0.000000,0.000000,0.707107 +7279,0.707107,0.000000,0.000000,0.707107 +7280,0.707107,0.000000,0.000000,0.707107 +7281,0.707107,0.000000,0.000000,0.707107 +7282,0.707107,0.000000,0.000000,0.707107 +7283,0.707107,0.000000,0.000000,0.707107 +7284,0.707107,0.000000,0.000000,0.707107 +7285,0.707107,0.000000,0.000000,0.707107 +7286,0.707107,0.000000,0.000000,0.707107 +7287,0.707107,0.000000,0.000000,0.707107 +7288,0.707107,0.000000,0.000000,0.707107 +7289,0.707107,0.000000,0.000000,0.707107 +7290,0.707107,0.000000,0.000000,0.707107 +7291,0.707107,0.000000,0.000000,0.707107 +7292,0.707107,0.000000,0.000000,0.707107 +7293,0.707107,0.000000,0.000000,0.707107 +7294,0.707107,0.000000,0.000000,0.707107 +7295,0.707107,0.000000,0.000000,0.707107 +7296,0.707107,0.000000,0.000000,0.707107 +7297,0.707107,0.000000,0.000000,0.707107 +7298,0.707107,0.000000,0.000000,0.707107 +7299,0.707107,0.000000,0.000000,0.707107 +7300,0.707107,0.000000,0.000000,0.707107 +7301,0.707107,0.000000,0.000000,0.707107 +7302,0.707107,0.000000,0.000000,0.707107 +7303,0.707107,0.000000,0.000000,0.707107 +7304,0.707107,0.000000,0.000000,0.707107 +7305,0.707107,0.000000,0.000000,0.707107 +7306,0.707107,0.000000,0.000000,0.707107 +7307,0.707107,0.000000,0.000000,0.707107 +7308,0.707107,0.000000,0.000000,0.707107 +7309,0.707107,0.000000,0.000000,0.707107 +7310,0.707107,0.000000,0.000000,0.707107 +7311,0.707107,0.000000,0.000000,0.707107 +7312,0.707107,0.000000,0.000000,0.707107 +7313,0.707107,0.000000,0.000000,0.707107 +7314,0.707107,0.000000,0.000000,0.707107 +7315,0.707107,0.000000,0.000000,0.707107 +7316,0.707107,0.000000,0.000000,0.707107 +7317,0.707107,0.000000,0.000000,0.707107 +7318,0.707107,0.000000,0.000000,0.707107 +7319,0.707107,0.000000,0.000000,0.707107 +7320,0.707107,0.000000,0.000000,0.707107 +7321,0.707107,0.000000,0.000000,0.707107 +7322,0.707107,0.000000,0.000000,0.707107 +7323,0.707107,0.000000,0.000000,0.707107 +7324,0.707107,0.000000,0.000000,0.707107 +7325,0.707107,0.000000,0.000000,0.707107 +7326,0.707107,0.000000,0.000000,0.707107 +7327,0.707107,0.000000,0.000000,0.707107 +7328,0.707107,0.000000,0.000000,0.707107 +7329,0.707107,0.000000,0.000000,0.707107 +7330,0.707107,0.000000,0.000000,0.707107 +7331,0.707107,0.000000,0.000000,0.707107 +7332,0.707107,0.000000,0.000000,0.707107 +7333,0.707107,0.000000,0.000000,0.707107 +7334,0.707107,0.000000,0.000000,0.707107 +7335,0.707107,0.000000,0.000000,0.707107 +7336,0.707107,0.000000,0.000000,0.707107 +7337,0.707107,0.000000,0.000000,0.707107 +7338,0.707107,0.000000,0.000000,0.707107 +7339,0.707107,0.000000,0.000000,0.707107 +7340,0.707107,0.000000,0.000000,0.707107 +7341,0.707107,0.000000,0.000000,0.707107 +7342,0.707107,0.000000,0.000000,0.707107 +7343,0.707107,0.000000,0.000000,0.707107 +7344,0.707107,0.000000,0.000000,0.707107 +7345,0.707107,0.000000,0.000000,0.707107 +7346,0.707107,0.000000,0.000000,0.707107 +7347,0.707107,0.000000,0.000000,0.707107 +7348,0.707107,0.000000,0.000000,0.707107 +7349,0.707107,0.000000,0.000000,0.707107 +7350,0.707107,0.000000,0.000000,0.707107 +7351,0.707107,0.000000,0.000000,0.707107 +7352,0.707107,0.000000,0.000000,0.707107 +7353,0.707107,0.000000,0.000000,0.707107 +7354,0.707107,0.000000,0.000000,0.707107 +7355,0.707107,0.000000,0.000000,0.707107 +7356,0.707107,0.000000,0.000000,0.707107 +7357,0.707107,0.000000,0.000000,0.707107 +7358,0.707107,0.000000,0.000000,0.707107 +7359,0.707107,0.000000,0.000000,0.707107 +7360,0.707107,0.000000,0.000000,0.707107 +7361,0.707107,0.000000,0.000000,0.707107 +7362,0.707107,0.000000,0.000000,0.707107 +7363,0.707107,0.000000,0.000000,0.707107 +7364,0.707107,0.000000,0.000000,0.707107 +7365,0.707107,0.000000,0.000000,0.707107 +7366,0.707107,0.000000,0.000000,0.707107 +7367,0.707107,0.000000,0.000000,0.707107 +7368,0.707107,0.000000,0.000000,0.707107 +7369,0.707107,0.000000,0.000000,0.707107 +7370,0.707107,0.000000,0.000000,0.707107 +7371,0.707107,0.000000,0.000000,0.707107 +7372,0.707107,0.000000,0.000000,0.707107 +7373,0.707107,0.000000,0.000000,0.707107 +7374,0.707107,0.000000,0.000000,0.707107 +7375,0.707107,0.000000,0.000000,0.707107 +7376,0.707107,0.000000,0.000000,0.707107 +7377,0.707107,0.000000,0.000000,0.707107 +7378,0.707107,0.000000,0.000000,0.707107 +7379,0.707107,0.000000,0.000000,0.707107 +7380,0.707107,0.000000,0.000000,0.707107 +7381,0.707107,0.000000,0.000000,0.707107 +7382,0.707107,0.000000,0.000000,0.707107 +7383,0.707107,0.000000,0.000000,0.707107 +7384,0.707107,0.000000,0.000000,0.707107 +7385,0.707107,0.000000,0.000000,0.707107 +7386,0.707107,0.000000,0.000000,0.707107 +7387,0.707107,0.000000,0.000000,0.707107 +7388,0.707107,0.000000,0.000000,0.707107 +7389,0.707107,0.000000,0.000000,0.707107 +7390,0.707107,0.000000,0.000000,0.707107 +7391,0.707107,0.000000,0.000000,0.707107 +7392,0.707107,0.000000,0.000000,0.707107 +7393,0.707107,0.000000,0.000000,0.707107 +7394,0.707107,0.000000,0.000000,0.707107 +7395,0.707107,0.000000,0.000000,0.707107 +7396,0.707107,0.000000,0.000000,0.707107 +7397,0.707107,0.000000,0.000000,0.707107 +7398,0.707107,0.000000,0.000000,0.707107 +7399,0.707107,0.000000,0.000000,0.707107 +7400,0.707107,0.000000,0.000000,0.707107 +7401,0.707107,0.000000,0.000000,0.707107 +7402,0.707107,0.000000,0.000000,0.707107 +7403,0.707107,0.000000,0.000000,0.707107 +7404,0.707107,0.000000,0.000000,0.707107 +7405,0.707107,0.000000,0.000000,0.707107 +7406,0.707107,0.000000,0.000000,0.707107 +7407,0.707107,0.000000,0.000000,0.707107 +7408,0.707107,0.000000,0.000000,0.707107 +7409,0.707107,0.000000,0.000000,0.707107 +7410,0.707107,0.000000,0.000000,0.707107 +7411,0.707107,0.000000,0.000000,0.707107 +7412,0.707107,0.000000,0.000000,0.707107 +7413,0.707107,0.000000,0.000000,0.707107 +7414,0.707107,0.000000,0.000000,0.707107 +7415,0.707107,0.000000,0.000000,0.707107 +7416,0.707107,0.000000,0.000000,0.707107 +7417,0.707107,0.000000,0.000000,0.707107 +7418,0.707107,0.000000,0.000000,0.707107 +7419,0.707107,0.000000,0.000000,0.707107 +7420,0.707107,0.000000,0.000000,0.707107 +7421,0.707107,0.000000,0.000000,0.707107 +7422,0.707107,0.000000,0.000000,0.707107 +7423,0.707107,0.000000,0.000000,0.707107 +7424,0.707107,0.000000,0.000000,0.707107 +7425,0.707107,0.000000,0.000000,0.707107 +7426,0.707107,0.000000,0.000000,0.707107 +7427,0.707107,0.000000,0.000000,0.707107 +7428,0.707107,0.000000,0.000000,0.707107 +7429,0.707107,0.000000,0.000000,0.707107 +7430,0.707107,0.000000,0.000000,0.707107 +7431,0.707107,0.000000,0.000000,0.707107 +7432,0.707107,0.000000,0.000000,0.707107 +7433,0.707107,0.000000,0.000000,0.707107 +7434,0.707107,0.000000,0.000000,0.707107 +7435,0.707107,0.000000,0.000000,0.707107 +7436,0.707107,0.000000,0.000000,0.707107 +7437,0.707107,0.000000,0.000000,0.707107 +7438,0.707107,0.000000,0.000000,0.707107 +7439,0.707107,0.000000,0.000000,0.707107 +7440,0.707107,0.000000,0.000000,0.707107 +7441,0.707107,0.000000,0.000000,0.707107 +7442,0.707107,0.000000,0.000000,0.707107 +7443,0.707107,0.000000,0.000000,0.707107 +7444,0.707107,0.000000,0.000000,0.707107 +7445,0.707107,0.000000,0.000000,0.707107 +7446,0.707107,0.000000,0.000000,0.707107 +7447,0.707107,0.000000,0.000000,0.707107 +7448,0.707107,0.000000,0.000000,0.707107 +7449,0.707107,0.000000,0.000000,0.707107 +7450,0.707107,0.000000,0.000000,0.707107 +7451,0.707107,0.000000,0.000000,0.707107 +7452,0.707107,0.000000,0.000000,0.707107 +7453,0.707107,0.000000,0.000000,0.707107 +7454,0.707107,0.000000,0.000000,0.707107 +7455,0.707107,0.000000,0.000000,0.707107 +7456,0.707107,0.000000,0.000000,0.707107 +7457,0.707107,0.000000,0.000000,0.707107 +7458,0.707107,0.000000,0.000000,0.707107 +7459,0.707107,0.000000,0.000000,0.707107 +7460,0.707107,0.000000,0.000000,0.707107 +7461,0.707107,0.000000,0.000000,0.707107 +7462,0.707107,0.000000,0.000000,0.707107 +7463,0.707107,0.000000,0.000000,0.707107 +7464,0.707107,0.000000,0.000000,0.707107 +7465,0.707107,0.000000,0.000000,0.707107 +7466,0.707107,0.000000,0.000000,0.707107 +7467,0.707107,0.000000,0.000000,0.707107 +7468,0.707107,0.000000,0.000000,0.707107 +7469,0.707107,0.000000,0.000000,0.707107 +7470,0.707107,0.000000,0.000000,0.707107 +7471,0.707107,0.000000,0.000000,0.707107 +7472,0.707107,0.000000,0.000000,0.707107 +7473,0.707107,0.000000,0.000000,0.707107 +7474,0.707107,0.000000,0.000000,0.707107 +7475,0.707107,0.000000,0.000000,0.707107 +7476,0.707107,0.000000,0.000000,0.707107 +7477,0.707107,0.000000,0.000000,0.707107 +7478,0.707107,0.000000,0.000000,0.707107 +7479,0.707107,0.000000,0.000000,0.707107 +7480,0.707107,0.000000,0.000000,0.707107 +7481,0.707107,0.000000,0.000000,0.707107 +7482,0.707107,0.000000,0.000000,0.707107 +7483,0.707107,0.000000,0.000000,0.707107 +7484,0.707107,0.000000,0.000000,0.707107 +7485,0.707107,0.000000,0.000000,0.707107 +7486,0.707107,0.000000,0.000000,0.707107 +7487,0.707107,0.000000,0.000000,0.707107 +7488,0.707107,0.000000,0.000000,0.707107 +7489,0.707107,0.000000,0.000000,0.707107 +7490,0.707107,0.000000,0.000000,0.707107 +7491,0.707107,0.000000,0.000000,0.707107 +7492,0.707107,0.000000,0.000000,0.707107 +7493,0.707107,0.000000,0.000000,0.707107 +7494,0.707107,0.000000,0.000000,0.707107 +7495,0.707107,0.000000,0.000000,0.707107 +7496,0.707107,0.000000,0.000000,0.707107 +7497,0.707107,0.000000,0.000000,0.707107 +7498,0.707107,0.000000,0.000000,0.707107 +7499,0.707107,0.000000,0.000000,0.707107 +7500,0.707107,0.000000,0.000000,0.707107 +7501,0.707107,0.000000,0.000000,0.707107 +7502,0.707107,0.000000,0.000000,0.707107 +7503,0.707107,0.000000,0.000000,0.707107 +7504,0.707107,0.000000,0.000000,0.707107 +7505,0.707107,0.000000,0.000000,0.707107 +7506,0.707107,0.000000,0.000000,0.707107 +7507,0.707107,0.000000,0.000000,0.707107 +7508,0.707107,0.000000,0.000000,0.707107 +7509,0.707107,0.000000,0.000000,0.707107 +7510,0.707107,0.000000,0.000000,0.707107 +7511,0.707107,0.000000,0.000000,0.707107 +7512,0.707107,0.000000,0.000000,0.707107 +7513,0.707107,0.000000,0.000000,0.707107 +7514,0.707107,0.000000,0.000000,0.707107 +7515,0.707107,0.000000,0.000000,0.707107 +7516,0.707107,0.000000,0.000000,0.707107 +7517,0.707107,0.000000,0.000000,0.707107 +7518,0.707107,0.000000,0.000000,0.707107 +7519,0.707107,0.000000,0.000000,0.707107 +7520,0.707107,0.000000,0.000000,0.707107 +7521,0.707107,0.000000,0.000000,0.707107 +7522,0.707107,0.000000,0.000000,0.707107 +7523,0.707107,0.000000,0.000000,0.707107 +7524,0.707107,0.000000,0.000000,0.707107 +7525,0.707107,0.000000,0.000000,0.707107 +7526,0.707107,0.000000,0.000000,0.707107 +7527,0.707107,0.000000,0.000000,0.707107 +7528,0.707107,0.000000,0.000000,0.707107 +7529,0.707107,0.000000,0.000000,0.707107 +7530,0.707107,0.000000,0.000000,0.707107 +7531,0.707107,0.000000,0.000000,0.707107 +7532,0.707107,0.000000,0.000000,0.707107 +7533,0.707107,0.000000,0.000000,0.707107 +7534,0.707107,0.000000,0.000000,0.707107 +7535,0.707107,0.000000,0.000000,0.707107 +7536,0.707107,0.000000,0.000000,0.707107 +7537,0.707107,0.000000,0.000000,0.707107 +7538,0.707107,0.000000,0.000000,0.707107 +7539,0.707107,0.000000,0.000000,0.707107 +7540,0.707107,0.000000,0.000000,0.707107 +7541,0.707107,0.000000,0.000000,0.707107 +7542,0.707107,0.000000,0.000000,0.707107 +7543,0.707107,0.000000,0.000000,0.707107 +7544,0.707107,0.000000,0.000000,0.707107 +7545,0.707107,0.000000,0.000000,0.707107 +7546,0.707107,0.000000,0.000000,0.707107 +7547,0.707107,0.000000,0.000000,0.707107 +7548,0.707107,0.000000,0.000000,0.707107 +7549,0.707107,0.000000,0.000000,0.707107 +7550,0.707107,0.000000,0.000000,0.707107 +7551,0.707107,0.000000,0.000000,0.707107 +7552,0.707107,0.000000,0.000000,0.707107 +7553,0.707107,0.000000,0.000000,0.707107 +7554,0.707107,0.000000,0.000000,0.707107 +7555,0.707107,0.000000,0.000000,0.707107 +7556,0.707107,0.000000,0.000000,0.707107 +7557,0.707107,0.000000,0.000000,0.707107 +7558,0.707107,0.000000,0.000000,0.707107 +7559,0.707107,0.000000,0.000000,0.707107 +7560,0.707107,0.000000,0.000000,0.707107 +7561,0.707107,0.000000,0.000000,0.707107 +7562,0.707107,0.000000,0.000000,0.707107 +7563,0.707107,0.000000,0.000000,0.707107 +7564,0.707107,0.000000,0.000000,0.707107 +7565,0.707107,0.000000,0.000000,0.707107 +7566,0.707107,0.000000,0.000000,0.707107 +7567,0.707107,0.000000,0.000000,0.707107 +7568,0.707107,0.000000,0.000000,0.707107 +7569,0.707107,0.000000,0.000000,0.707107 +7570,0.707107,0.000000,0.000000,0.707107 +7571,0.707107,0.000000,0.000000,0.707107 +7572,0.707107,0.000000,0.000000,0.707107 +7573,0.707107,0.000000,0.000000,0.707107 +7574,0.707107,0.000000,0.000000,0.707107 +7575,0.707107,0.000000,0.000000,0.707107 +7576,0.707107,0.000000,0.000000,0.707107 +7577,0.707107,0.000000,0.000000,0.707107 +7578,0.707107,0.000000,0.000000,0.707107 +7579,0.707107,0.000000,0.000000,0.707107 +7580,0.707107,0.000000,0.000000,0.707107 +7581,0.707107,0.000000,0.000000,0.707107 +7582,0.707107,0.000000,0.000000,0.707107 +7583,0.707107,0.000000,0.000000,0.707107 +7584,0.707107,0.000000,0.000000,0.707107 +7585,0.707107,0.000000,0.000000,0.707107 +7586,0.707107,0.000000,0.000000,0.707107 +7587,0.707107,0.000000,0.000000,0.707107 +7588,0.707107,0.000000,0.000000,0.707107 +7589,0.707107,0.000000,0.000000,0.707107 +7590,0.707107,0.000000,0.000000,0.707107 +7591,0.707107,0.000000,0.000000,0.707107 +7592,0.707107,0.000000,0.000000,0.707107 +7593,0.707107,0.000000,0.000000,0.707107 +7594,0.707107,0.000000,0.000000,0.707107 +7595,0.707107,0.000000,0.000000,0.707107 +7596,0.707107,0.000000,0.000000,0.707107 +7597,0.707107,0.000000,0.000000,0.707107 +7598,0.707107,0.000000,0.000000,0.707107 +7599,0.707107,0.000000,0.000000,0.707107 +7600,0.707107,0.000000,0.000000,0.707107 +7601,0.707107,0.000000,0.000000,0.707107 +7602,0.707107,0.000000,0.000000,0.707107 +7603,0.707107,0.000000,0.000000,0.707107 +7604,0.707107,0.000000,0.000000,0.707107 +7605,0.707107,0.000000,0.000000,0.707107 +7606,0.707107,0.000000,0.000000,0.707107 +7607,0.707107,0.000000,0.000000,0.707107 +7608,0.707107,0.000000,0.000000,0.707107 +7609,0.707107,0.000000,0.000000,0.707107 +7610,0.707107,0.000000,0.000000,0.707107 +7611,0.707107,0.000000,0.000000,0.707107 +7612,0.707107,0.000000,0.000000,0.707107 +7613,0.707107,0.000000,0.000000,0.707107 +7614,0.707107,0.000000,0.000000,0.707107 +7615,0.707107,0.000000,0.000000,0.707107 +7616,0.707107,0.000000,0.000000,0.707107 +7617,0.707107,0.000000,0.000000,0.707107 +7618,0.707107,0.000000,0.000000,0.707107 +7619,0.707107,0.000000,0.000000,0.707107 +7620,0.707107,0.000000,0.000000,0.707107 +7621,0.707107,0.000000,0.000000,0.707107 +7622,0.707107,0.000000,0.000000,0.707107 +7623,0.707107,0.000000,0.000000,0.707107 +7624,0.707107,0.000000,0.000000,0.707107 +7625,0.707107,0.000000,0.000000,0.707107 +7626,0.707107,0.000000,0.000000,0.707107 +7627,0.707107,0.000000,0.000000,0.707107 +7628,0.707107,0.000000,0.000000,0.707107 +7629,0.707107,0.000000,0.000000,0.707107 +7630,0.707107,0.000000,0.000000,0.707107 +7631,0.707107,0.000000,0.000000,0.707107 +7632,0.707107,0.000000,0.000000,0.707107 +7633,0.707107,0.000000,0.000000,0.707107 +7634,0.707107,0.000000,0.000000,0.707107 +7635,0.707107,0.000000,0.000000,0.707107 +7636,0.707107,0.000000,0.000000,0.707107 +7637,0.707107,0.000000,0.000000,0.707107 +7638,0.707107,0.000000,0.000000,0.707107 +7639,0.707107,0.000000,0.000000,0.707107 +7640,0.707107,0.000000,0.000000,0.707107 +7641,0.707107,0.000000,0.000000,0.707107 +7642,0.707107,0.000000,0.000000,0.707107 +7643,0.707107,0.000000,0.000000,0.707107 +7644,0.707107,0.000000,0.000000,0.707107 +7645,0.707107,0.000000,0.000000,0.707107 +7646,0.707107,0.000000,0.000000,0.707107 +7647,0.707107,0.000000,0.000000,0.707107 +7648,0.707107,0.000000,0.000000,0.707107 +7649,0.707107,0.000000,0.000000,0.707107 +7650,0.707107,0.000000,0.000000,0.707107 +7651,0.707107,0.000000,0.000000,0.707107 +7652,0.707107,0.000000,0.000000,0.707107 +7653,0.707107,0.000000,0.000000,0.707107 +7654,0.707107,0.000000,0.000000,0.707107 +7655,0.707107,0.000000,0.000000,0.707107 +7656,0.707107,0.000000,0.000000,0.707107 +7657,0.707107,0.000000,0.000000,0.707107 +7658,0.707107,0.000000,0.000000,0.707107 +7659,0.707107,0.000000,0.000000,0.707107 +7660,0.707107,0.000000,0.000000,0.707107 +7661,0.707107,0.000000,0.000000,0.707107 +7662,0.707107,0.000000,0.000000,0.707107 +7663,0.707107,0.000000,0.000000,0.707107 +7664,0.707107,0.000000,0.000000,0.707107 +7665,0.707107,0.000000,0.000000,0.707107 +7666,0.707107,0.000000,0.000000,0.707107 +7667,0.707107,0.000000,0.000000,0.707107 +7668,0.707107,0.000000,0.000000,0.707107 +7669,0.707107,0.000000,0.000000,0.707107 +7670,0.707107,0.000000,0.000000,0.707107 +7671,0.707107,0.000000,0.000000,0.707107 +7672,0.707107,0.000000,0.000000,0.707107 +7673,0.707107,0.000000,0.000000,0.707107 +7674,0.707107,0.000000,0.000000,0.707107 +7675,0.707107,0.000000,0.000000,0.707107 +7676,0.707107,0.000000,0.000000,0.707107 +7677,0.707107,0.000000,0.000000,0.707107 +7678,0.707107,0.000000,0.000000,0.707107 +7679,0.707107,0.000000,0.000000,0.707107 +7680,0.707107,0.000000,0.000000,0.707107 +7681,0.707107,0.000000,0.000000,0.707107 +7682,0.707107,0.000000,0.000000,0.707107 +7683,0.707107,0.000000,0.000000,0.707107 +7684,0.707107,0.000000,0.000000,0.707107 +7685,0.707107,0.000000,0.000000,0.707107 +7686,0.707107,0.000000,0.000000,0.707107 +7687,0.707107,0.000000,0.000000,0.707107 +7688,0.707107,0.000000,0.000000,0.707107 +7689,0.707107,0.000000,0.000000,0.707107 +7690,0.707107,0.000000,0.000000,0.707107 +7691,0.707107,0.000000,0.000000,0.707107 +7692,0.707107,0.000000,0.000000,0.707107 +7693,0.707107,0.000000,0.000000,0.707107 +7694,0.707107,0.000000,0.000000,0.707107 +7695,0.707107,0.000000,0.000000,0.707107 +7696,0.707107,0.000000,0.000000,0.707107 +7697,0.707107,0.000000,0.000000,0.707107 +7698,0.707107,0.000000,0.000000,0.707107 +7699,0.707107,0.000000,0.000000,0.707107 +7700,0.707107,0.000000,0.000000,0.707107 +7701,0.707107,0.000000,0.000000,0.707107 +7702,0.707107,0.000000,0.000000,0.707107 +7703,0.707107,0.000000,0.000000,0.707107 +7704,0.707107,0.000000,0.000000,0.707107 +7705,0.707107,0.000000,0.000000,0.707107 +7706,0.707107,0.000000,0.000000,0.707107 +7707,0.707107,0.000000,0.000000,0.707107 +7708,0.707107,0.000000,0.000000,0.707107 +7709,0.707107,0.000000,0.000000,0.707107 +7710,0.707107,0.000000,0.000000,0.707107 +7711,0.707107,0.000000,0.000000,0.707107 +7712,0.707107,0.000000,0.000000,0.707107 +7713,0.707107,0.000000,0.000000,0.707107 +7714,0.707107,0.000000,0.000000,0.707107 +7715,0.707107,0.000000,0.000000,0.707107 +7716,0.707107,0.000000,0.000000,0.707107 +7717,0.707107,0.000000,0.000000,0.707107 +7718,0.707107,0.000000,0.000000,0.707107 +7719,0.707107,0.000000,0.000000,0.707107 +7720,0.707107,0.000000,0.000000,0.707107 +7721,0.707107,0.000000,0.000000,0.707107 +7722,0.707107,0.000000,0.000000,0.707107 +7723,0.707107,0.000000,0.000000,0.707107 +7724,0.707107,0.000000,0.000000,0.707107 +7725,0.707107,0.000000,0.000000,0.707107 +7726,0.707107,0.000000,0.000000,0.707107 +7727,0.707107,0.000000,0.000000,0.707107 +7728,0.707107,0.000000,0.000000,0.707107 +7729,0.707107,0.000000,0.000000,0.707107 +7730,0.707107,0.000000,0.000000,0.707107 +7731,0.707107,0.000000,0.000000,0.707107 +7732,0.707107,0.000000,0.000000,0.707107 +7733,0.707107,0.000000,0.000000,0.707107 +7734,0.707107,0.000000,0.000000,0.707107 +7735,0.707107,0.000000,0.000000,0.707107 +7736,0.707107,0.000000,0.000000,0.707107 +7737,0.707107,0.000000,0.000000,0.707107 +7738,0.707107,0.000000,0.000000,0.707107 +7739,0.707107,0.000000,0.000000,0.707107 +7740,0.707107,0.000000,0.000000,0.707107 +7741,0.707107,0.000000,0.000000,0.707107 +7742,0.707107,0.000000,0.000000,0.707107 +7743,0.707107,0.000000,0.000000,0.707107 +7744,0.707107,0.000000,0.000000,0.707107 +7745,0.707107,0.000000,0.000000,0.707107 +7746,0.707107,0.000000,0.000000,0.707107 +7747,0.707107,0.000000,0.000000,0.707107 +7748,0.707107,0.000000,0.000000,0.707107 +7749,0.707107,0.000000,0.000000,0.707107 +7750,0.707107,0.000000,0.000000,0.707107 +7751,0.707107,0.000000,0.000000,0.707107 +7752,0.707107,0.000000,0.000000,0.707107 +7753,0.707107,0.000000,0.000000,0.707107 +7754,0.707107,0.000000,0.000000,0.707107 +7755,0.707107,0.000000,0.000000,0.707107 +7756,0.707107,0.000000,0.000000,0.707107 +7757,0.707107,0.000000,0.000000,0.707107 +7758,0.707107,0.000000,0.000000,0.707107 +7759,0.707107,0.000000,0.000000,0.707107 +7760,0.707107,0.000000,0.000000,0.707107 +7761,0.707107,0.000000,0.000000,0.707107 +7762,0.707107,0.000000,0.000000,0.707107 +7763,0.707107,0.000000,0.000000,0.707107 +7764,0.707107,0.000000,0.000000,0.707107 +7765,0.707107,0.000000,0.000000,0.707107 +7766,0.707107,0.000000,0.000000,0.707107 +7767,0.707107,0.000000,0.000000,0.707107 +7768,0.707107,0.000000,0.000000,0.707107 +7769,0.707107,0.000000,0.000000,0.707107 +7770,0.707107,0.000000,0.000000,0.707107 +7771,0.707107,0.000000,0.000000,0.707107 +7772,0.707107,0.000000,0.000000,0.707107 +7773,0.707107,0.000000,0.000000,0.707107 +7774,0.707107,0.000000,0.000000,0.707107 +7775,0.707107,0.000000,0.000000,0.707107 +7776,0.707107,0.000000,0.000000,0.707107 +7777,0.707107,0.000000,0.000000,0.707107 +7778,0.707107,0.000000,0.000000,0.707107 +7779,0.707107,0.000000,0.000000,0.707107 +7780,0.707107,0.000000,0.000000,0.707107 +7781,0.707107,0.000000,0.000000,0.707107 +7782,0.707107,0.000000,0.000000,0.707107 +7783,0.707107,0.000000,0.000000,0.707107 +7784,0.707107,0.000000,0.000000,0.707107 +7785,0.707107,0.000000,0.000000,0.707107 +7786,0.707107,0.000000,0.000000,0.707107 +7787,0.707107,0.000000,0.000000,0.707107 +7788,0.707107,0.000000,0.000000,0.707107 +7789,0.707107,0.000000,0.000000,0.707107 +7790,0.707107,0.000000,0.000000,0.707107 +7791,0.707107,0.000000,0.000000,0.707107 +7792,0.707107,0.000000,0.000000,0.707107 +7793,0.707107,0.000000,0.000000,0.707107 +7794,0.707107,0.000000,0.000000,0.707107 +7795,0.707107,0.000000,0.000000,0.707107 +7796,0.707107,0.000000,0.000000,0.707107 +7797,0.707107,0.000000,0.000000,0.707107 +7798,0.707107,0.000000,0.000000,0.707107 +7799,0.707107,0.000000,0.000000,0.707107 +7800,0.707107,0.000000,0.000000,0.707107 +7801,0.707107,0.000000,0.000000,0.707107 +7802,0.707107,0.000000,0.000000,0.707107 +7803,0.707107,0.000000,0.000000,0.707107 +7804,0.707107,0.000000,0.000000,0.707107 +7805,0.707107,0.000000,0.000000,0.707107 +7806,0.707107,0.000000,0.000000,0.707107 +7807,0.707107,0.000000,0.000000,0.707107 +7808,0.707107,0.000000,0.000000,0.707107 +7809,0.707107,0.000000,0.000000,0.707107 +7810,0.707107,0.000000,0.000000,0.707107 +7811,0.707107,0.000000,0.000000,0.707107 +7812,0.707107,0.000000,0.000000,0.707107 +7813,0.707107,0.000000,0.000000,0.707107 +7814,0.707107,0.000000,0.000000,0.707107 +7815,0.707107,0.000000,0.000000,0.707107 +7816,0.707107,0.000000,0.000000,0.707107 +7817,0.707107,0.000000,0.000000,0.707107 +7818,0.707107,0.000000,0.000000,0.707107 +7819,0.707107,0.000000,0.000000,0.707107 +7820,0.707107,0.000000,0.000000,0.707107 +7821,0.707107,0.000000,0.000000,0.707107 +7822,0.707107,0.000000,0.000000,0.707107 +7823,0.707107,0.000000,0.000000,0.707107 +7824,0.707107,0.000000,0.000000,0.707107 +7825,0.707107,0.000000,0.000000,0.707107 +7826,0.707107,0.000000,0.000000,0.707107 +7827,0.707107,0.000000,0.000000,0.707107 +7828,0.707107,0.000000,0.000000,0.707107 +7829,0.707107,0.000000,0.000000,0.707107 +7830,0.707107,0.000000,0.000000,0.707107 +7831,0.707107,0.000000,0.000000,0.707107 +7832,0.707107,0.000000,0.000000,0.707107 +7833,0.707107,0.000000,0.000000,0.707107 +7834,0.707107,0.000000,0.000000,0.707107 +7835,0.707107,0.000000,0.000000,0.707107 +7836,0.707107,0.000000,0.000000,0.707107 +7837,0.707107,0.000000,0.000000,0.707107 +7838,0.707107,0.000000,0.000000,0.707107 +7839,0.707107,0.000000,0.000000,0.707107 +7840,0.707107,0.000000,0.000000,0.707107 +7841,0.707107,0.000000,0.000000,0.707107 +7842,0.707107,0.000000,0.000000,0.707107 +7843,0.707107,0.000000,0.000000,0.707107 +7844,0.707107,0.000000,0.000000,0.707107 +7845,0.707107,0.000000,0.000000,0.707107 +7846,0.707107,0.000000,0.000000,0.707107 +7847,0.707107,0.000000,0.000000,0.707107 +7848,0.707107,0.000000,0.000000,0.707107 +7849,0.707107,0.000000,0.000000,0.707107 +7850,0.707107,0.000000,0.000000,0.707107 +7851,0.707107,0.000000,0.000000,0.707107 +7852,0.707107,0.000000,0.000000,0.707107 +7853,0.707107,0.000000,0.000000,0.707107 +7854,0.707107,0.000000,0.000000,0.707107 +7855,0.707107,0.000000,0.000000,0.707107 +7856,0.707107,0.000000,0.000000,0.707107 +7857,0.707107,0.000000,0.000000,0.707107 +7858,0.707107,0.000000,0.000000,0.707107 +7859,0.707107,0.000000,0.000000,0.707107 +7860,0.707107,0.000000,0.000000,0.707107 +7861,0.707107,0.000000,0.000000,0.707107 +7862,0.707107,0.000000,0.000000,0.707107 +7863,0.707107,0.000000,0.000000,0.707107 +7864,0.707107,0.000000,0.000000,0.707107 +7865,0.707107,0.000000,0.000000,0.707107 +7866,0.707107,0.000000,0.000000,0.707107 +7867,0.707107,0.000000,0.000000,0.707107 +7868,0.707107,0.000000,0.000000,0.707107 +7869,0.707107,0.000000,0.000000,0.707107 +7870,0.707107,0.000000,0.000000,0.707107 +7871,0.707107,0.000000,0.000000,0.707107 +7872,0.707107,0.000000,0.000000,0.707107 +7873,0.707107,0.000000,0.000000,0.707107 +7874,0.707107,0.000000,0.000000,0.707107 +7875,0.707107,0.000000,0.000000,0.707107 +7876,0.707107,0.000000,0.000000,0.707107 +7877,0.707107,0.000000,0.000000,0.707107 +7878,0.707107,0.000000,0.000000,0.707107 +7879,0.707107,0.000000,0.000000,0.707107 +7880,0.707107,0.000000,0.000000,0.707107 +7881,0.707107,0.000000,0.000000,0.707107 +7882,0.707107,0.000000,0.000000,0.707107 +7883,0.707107,0.000000,0.000000,0.707107 +7884,0.707107,0.000000,0.000000,0.707107 +7885,0.707107,0.000000,0.000000,0.707107 +7886,0.707107,0.000000,0.000000,0.707107 +7887,0.707107,0.000000,0.000000,0.707107 +7888,0.707107,0.000000,0.000000,0.707107 +7889,0.707107,0.000000,0.000000,0.707107 +7890,0.707107,0.000000,0.000000,0.707107 +7891,0.707107,0.000000,0.000000,0.707107 +7892,0.707107,0.000000,0.000000,0.707107 +7893,0.707107,0.000000,0.000000,0.707107 +7894,0.707107,0.000000,0.000000,0.707107 +7895,0.707107,0.000000,0.000000,0.707107 +7896,0.707107,0.000000,0.000000,0.707107 +7897,0.707107,0.000000,0.000000,0.707107 +7898,0.707107,0.000000,0.000000,0.707107 +7899,0.707107,0.000000,0.000000,0.707107 +7900,0.707107,0.000000,0.000000,0.707107 +7901,0.707107,0.000000,0.000000,0.707107 +7902,0.707107,0.000000,0.000000,0.707107 +7903,0.707107,0.000000,0.000000,0.707107 +7904,0.707107,0.000000,0.000000,0.707107 +7905,0.707107,0.000000,0.000000,0.707107 +7906,0.707107,0.000000,0.000000,0.707107 +7907,0.707107,0.000000,0.000000,0.707107 +7908,0.707107,0.000000,0.000000,0.707107 +7909,0.707107,0.000000,0.000000,0.707107 +7910,0.707107,0.000000,0.000000,0.707107 +7911,0.707107,0.000000,0.000000,0.707107 +7912,0.707107,0.000000,0.000000,0.707107 +7913,0.707107,0.000000,0.000000,0.707107 +7914,0.707107,0.000000,0.000000,0.707107 +7915,0.707107,0.000000,0.000000,0.707107 +7916,0.707107,0.000000,0.000000,0.707107 +7917,0.707107,0.000000,0.000000,0.707107 +7918,0.707107,0.000000,0.000000,0.707107 +7919,0.707107,0.000000,0.000000,0.707107 +7920,0.707107,0.000000,0.000000,0.707107 +7921,0.707107,0.000000,0.000000,0.707107 +7922,0.707107,0.000000,0.000000,0.707107 +7923,0.707107,0.000000,0.000000,0.707107 +7924,0.707107,0.000000,0.000000,0.707107 +7925,0.707107,0.000000,0.000000,0.707107 +7926,0.707107,0.000000,0.000000,0.707107 +7927,0.707107,0.000000,0.000000,0.707107 +7928,0.707107,0.000000,0.000000,0.707107 +7929,0.707107,0.000000,0.000000,0.707107 +7930,0.707107,0.000000,0.000000,0.707107 +7931,0.707107,0.000000,0.000000,0.707107 +7932,0.707107,0.000000,0.000000,0.707107 +7933,0.707107,0.000000,0.000000,0.707107 +7934,0.707107,0.000000,0.000000,0.707107 +7935,0.707107,0.000000,0.000000,0.707107 +7936,0.707107,0.000000,0.000000,0.707107 +7937,0.707107,0.000000,0.000000,0.707107 +7938,0.707107,0.000000,0.000000,0.707107 +7939,0.707107,0.000000,0.000000,0.707107 +7940,0.707107,0.000000,0.000000,0.707107 +7941,0.707107,0.000000,0.000000,0.707107 +7942,0.707107,0.000000,0.000000,0.707107 +7943,0.707107,0.000000,0.000000,0.707107 +7944,0.707107,0.000000,0.000000,0.707107 +7945,0.707107,0.000000,0.000000,0.707107 +7946,0.707107,0.000000,0.000000,0.707107 +7947,0.707107,0.000000,0.000000,0.707107 +7948,0.707107,0.000000,0.000000,0.707107 +7949,0.707107,0.000000,0.000000,0.707107 +7950,0.707107,0.000000,0.000000,0.707107 +7951,0.707107,0.000000,0.000000,0.707107 +7952,0.707107,0.000000,0.000000,0.707107 +7953,0.707107,0.000000,0.000000,0.707107 +7954,0.707107,0.000000,0.000000,0.707107 +7955,0.707107,0.000000,0.000000,0.707107 +7956,0.707107,0.000000,0.000000,0.707107 +7957,0.707107,0.000000,0.000000,0.707107 +7958,0.707107,0.000000,0.000000,0.707107 +7959,0.707107,0.000000,0.000000,0.707107 +7960,0.707107,0.000000,0.000000,0.707107 +7961,0.707107,0.000000,0.000000,0.707107 +7962,0.707107,0.000000,0.000000,0.707107 +7963,0.707107,0.000000,0.000000,0.707107 +7964,0.707107,0.000000,0.000000,0.707107 +7965,0.707107,0.000000,0.000000,0.707107 +7966,0.707107,0.000000,0.000000,0.707107 +7967,0.707107,0.000000,0.000000,0.707107 +7968,0.707107,0.000000,0.000000,0.707107 +7969,0.707107,0.000000,0.000000,0.707107 +7970,0.707107,0.000000,0.000000,0.707107 +7971,0.707107,0.000000,0.000000,0.707107 +7972,0.707107,0.000000,0.000000,0.707107 +7973,0.707107,0.000000,0.000000,0.707107 +7974,0.707107,0.000000,0.000000,0.707107 +7975,0.707107,0.000000,0.000000,0.707107 +7976,0.707107,0.000000,0.000000,0.707107 +7977,0.707107,0.000000,0.000000,0.707107 +7978,0.707107,0.000000,0.000000,0.707107 +7979,0.707107,0.000000,0.000000,0.707107 +7980,0.707107,0.000000,0.000000,0.707107 +7981,0.707107,0.000000,0.000000,0.707107 +7982,0.707107,0.000000,0.000000,0.707107 +7983,0.707107,0.000000,0.000000,0.707107 +7984,0.707107,0.000000,0.000000,0.707107 +7985,0.707107,0.000000,0.000000,0.707107 +7986,0.707107,0.000000,0.000000,0.707107 +7987,0.707107,0.000000,0.000000,0.707107 +7988,0.707107,0.000000,0.000000,0.707107 +7989,0.707107,0.000000,0.000000,0.707107 +7990,0.707107,0.000000,0.000000,0.707107 +7991,0.707107,0.000000,0.000000,0.707107 +7992,0.707107,0.000000,0.000000,0.707107 +7993,0.707107,0.000000,0.000000,0.707107 +7994,0.707107,0.000000,0.000000,0.707107 +7995,0.707107,0.000000,0.000000,0.707107 +7996,0.707107,0.000000,0.000000,0.707107 +7997,0.707107,0.000000,0.000000,0.707107 +7998,0.707107,0.000000,0.000000,0.707107 +7999,0.707107,0.000000,0.000000,0.707107 +8000,0.707107,0.000000,0.000000,0.707107 +8001,0.707107,0.000000,0.000000,0.707107 +8002,0.707107,0.000000,0.000000,0.707107 +8003,0.707107,0.000000,0.000000,0.707107 +8004,0.707107,0.000000,0.000000,0.707107 +8005,0.707107,0.000000,0.000000,0.707107 +8006,0.707107,0.000000,0.000000,0.707107 +8007,0.707107,0.000000,0.000000,0.707107 +8008,0.707107,0.000000,0.000000,0.707107 +8009,0.707107,0.000000,0.000000,0.707107 +8010,0.707107,0.000000,0.000000,0.707107 +8011,0.707107,0.000000,0.000000,0.707107 +8012,0.707107,0.000000,0.000000,0.707107 +8013,0.707107,0.000000,0.000000,0.707107 +8014,0.707107,0.000000,0.000000,0.707107 +8015,0.707107,0.000000,0.000000,0.707107 +8016,0.707107,0.000000,0.000000,0.707107 +8017,0.707107,0.000000,0.000000,0.707107 +8018,0.707107,0.000000,0.000000,0.707107 +8019,0.707107,0.000000,0.000000,0.707107 +8020,0.707107,0.000000,0.000000,0.707107 +8021,0.707107,0.000000,0.000000,0.707107 +8022,0.707107,0.000000,0.000000,0.707107 +8023,0.707107,0.000000,0.000000,0.707107 +8024,0.707107,0.000000,0.000000,0.707107 +8025,0.707107,0.000000,0.000000,0.707107 +8026,0.707107,0.000000,0.000000,0.707107 +8027,0.707107,0.000000,0.000000,0.707107 +8028,0.707107,0.000000,0.000000,0.707107 +8029,0.707107,0.000000,0.000000,0.707107 +8030,0.707107,0.000000,0.000000,0.707107 +8031,0.707107,0.000000,0.000000,0.707107 +8032,0.707107,0.000000,0.000000,0.707107 +8033,0.707107,0.000000,0.000000,0.707107 +8034,0.707107,0.000000,0.000000,0.707107 +8035,0.707107,0.000000,0.000000,0.707107 +8036,0.707107,0.000000,0.000000,0.707107 +8037,0.707107,0.000000,0.000000,0.707107 +8038,0.707107,0.000000,0.000000,0.707107 +8039,0.707107,0.000000,0.000000,0.707107 +8040,0.707107,0.000000,0.000000,0.707107 +8041,0.707107,0.000000,0.000000,0.707107 +8042,0.707107,0.000000,0.000000,0.707107 +8043,0.707107,0.000000,0.000000,0.707107 +8044,0.707107,0.000000,0.000000,0.707107 +8045,0.707107,0.000000,0.000000,0.707107 +8046,0.707107,0.000000,0.000000,0.707107 +8047,0.707107,0.000000,0.000000,0.707107 +8048,0.707107,0.000000,0.000000,0.707107 +8049,0.707107,0.000000,0.000000,0.707107 +8050,0.707107,0.000000,0.000000,0.707107 +8051,0.707107,0.000000,0.000000,0.707107 +8052,0.707107,0.000000,0.000000,0.707107 +8053,0.707107,0.000000,0.000000,0.707107 +8054,0.707107,0.000000,0.000000,0.707107 +8055,0.707107,0.000000,0.000000,0.707107 +8056,0.707107,0.000000,0.000000,0.707107 +8057,0.707107,0.000000,0.000000,0.707107 +8058,0.707107,0.000000,0.000000,0.707107 +8059,0.707107,0.000000,0.000000,0.707107 +8060,0.707107,0.000000,0.000000,0.707107 +8061,0.707107,0.000000,0.000000,0.707107 +8062,0.707107,0.000000,0.000000,0.707107 +8063,0.707107,0.000000,0.000000,0.707107 +8064,0.707107,0.000000,0.000000,0.707107 +8065,0.707107,0.000000,0.000000,0.707107 +8066,0.707107,0.000000,0.000000,0.707107 +8067,0.707107,0.000000,0.000000,0.707107 +8068,0.707107,0.000000,0.000000,0.707107 +8069,0.707107,0.000000,0.000000,0.707107 +8070,0.707107,0.000000,0.000000,0.707107 +8071,0.707107,0.000000,0.000000,0.707107 +8072,0.707107,0.000000,0.000000,0.707107 +8073,0.707107,0.000000,0.000000,0.707107 +8074,0.707107,0.000000,0.000000,0.707107 +8075,0.707107,0.000000,0.000000,0.707107 +8076,0.707107,0.000000,0.000000,0.707107 +8077,0.707107,0.000000,0.000000,0.707107 +8078,0.707107,0.000000,0.000000,0.707107 +8079,0.707107,0.000000,0.000000,0.707107 +8080,0.707107,0.000000,0.000000,0.707107 +8081,0.707107,0.000000,0.000000,0.707107 +8082,0.707107,0.000000,0.000000,0.707107 +8083,0.707107,0.000000,0.000000,0.707107 +8084,0.707107,0.000000,0.000000,0.707107 +8085,0.707107,0.000000,0.000000,0.707107 +8086,0.707107,0.000000,0.000000,0.707107 +8087,0.707107,0.000000,0.000000,0.707107 +8088,0.707107,0.000000,0.000000,0.707107 +8089,0.707107,0.000000,0.000000,0.707107 +8090,0.707107,0.000000,0.000000,0.707107 +8091,0.707107,0.000000,0.000000,0.707107 +8092,0.707107,0.000000,0.000000,0.707107 +8093,0.707107,0.000000,0.000000,0.707107 +8094,0.707107,0.000000,0.000000,0.707107 +8095,0.707107,0.000000,0.000000,0.707107 +8096,0.707107,0.000000,0.000000,0.707107 +8097,0.707107,0.000000,0.000000,0.707107 +8098,0.707107,0.000000,0.000000,0.707107 +8099,0.707107,0.000000,0.000000,0.707107 diff --git a/scripts/trajectories/linear-ypr-T15.0-w0.1-Euler.csv b/scripts/trajectories/linear-ypr-T15.0-w0.1-Euler.csv new file mode 100644 index 0000000000..a1e03b3648 --- /dev/null +++ b/scripts/trajectories/linear-ypr-T15.0-w0.1-Euler.csv @@ -0,0 +1,3000 @@ +0, -3.000000, 0.000000, 0.000000, 0.000000 +1, -3.000000, 0.180060, 0.045015, 0.090030 +2, -3.000000, 0.360120, 0.090030, 0.180060 +3, -3.000000, 0.540180, 0.135045, 0.270090 +4, -3.000000, 0.720240, 0.180060, 0.360120 +5, -3.000000, 0.900300, 0.225075, 0.450150 +6, -3.000000, 1.080360, 0.270090, 0.540180 +7, -3.000000, 1.260420, 0.315105, 0.630210 +8, -3.000000, 1.440480, 0.360120, 0.720240 +9, -3.000000, 1.620540, 0.405135, 0.810270 +10, -3.000000, 1.800600, 0.450150, 0.900300 +11, -3.000000, 1.980660, 0.495165, 0.990330 +12, -3.000000, 2.160720, 0.540180, 1.080360 +13, -3.000000, 2.340780, 0.585195, 1.170390 +14, -3.000000, 2.520840, 0.630210, 1.260420 +15, -3.000000, 2.700900, 0.675225, 1.350450 +16, -3.000000, 2.880960, 0.720240, 1.440480 +17, -3.000000, 3.061020, 0.765255, 1.530510 +18, -3.000000, 3.241080, 0.810270, 1.620540 +19, -3.000000, 3.421140, 0.855285, 1.710570 +20, -3.000000, 3.601200, 0.900300, 1.800600 +21, -3.000000, 3.781260, 0.945315, 1.890630 +22, -3.000000, 3.961320, 0.990330, 1.980660 +23, -3.000000, 4.141380, 1.035345, 2.070690 +24, -3.000000, 4.321440, 1.080360, 2.160720 +25, -3.000000, 4.501501, 1.125375, 2.250750 +26, -3.000000, 4.681561, 1.170390, 2.340780 +27, -3.000000, 4.861621, 1.215405, 2.430810 +28, -3.000000, 5.041681, 1.260420, 2.520840 +29, -3.000000, 5.221741, 1.305435, 2.610870 +30, -3.000000, 5.401801, 1.350450, 2.700900 +31, -3.000000, 5.581861, 1.395465, 2.790930 +32, -3.000000, 5.761921, 1.440480, 2.880960 +33, -3.000000, 5.941981, 1.485495, 2.970990 +34, -3.000000, 6.122041, 1.530510, 3.061020 +35, -3.000000, 6.302101, 1.575525, 3.151050 +36, -3.000000, 6.482161, 1.620540, 3.241080 +37, -3.000000, 6.662221, 1.665555, 3.331110 +38, -3.000000, 6.842281, 1.710570, 3.421140 +39, -3.000000, 7.022341, 1.755585, 3.511170 +40, -3.000000, 7.202401, 1.800600, 3.601200 +41, -3.000000, 7.382461, 1.845615, 3.691230 +42, -3.000000, 7.562521, 1.890630, 3.781260 +43, -3.000000, 7.742581, 1.935645, 3.871290 +44, -3.000000, 7.922641, 1.980660, 3.961320 +45, -3.000000, 8.102701, 2.025675, 4.051350 +46, -3.000000, 8.282761, 2.070690, 4.141380 +47, -3.000000, 8.462821, 2.115705, 4.231410 +48, -3.000000, 8.642881, 2.160720, 4.321440 +49, -3.000000, 8.822941, 2.205735, 4.411470 +50, -3.000000, 9.003001, 2.250750, 4.501501 +51, -3.000000, 9.183061, 2.295765, 4.591531 +52, -3.000000, 9.363121, 2.340780, 4.681561 +53, -3.000000, 9.543181, 2.385795, 4.771591 +54, -3.000000, 9.723241, 2.430810, 4.861621 +55, -3.000000, 9.903301, 2.475825, 4.951651 +56, -3.000000, 10.083361, 2.520840, 5.041681 +57, -3.000000, 10.263421, 2.565855, 5.131711 +58, -3.000000, 10.443481, 2.610870, 5.221741 +59, -3.000000, 10.623541, 2.655885, 5.311771 +60, -3.000000, 10.803601, 2.700900, 5.401801 +61, -3.000000, 10.983661, 2.745915, 5.491831 +62, -3.000000, 11.163721, 2.790930, 5.581861 +63, -3.000000, 11.343781, 2.835945, 5.671891 +64, -3.000000, 11.523841, 2.880960, 5.761921 +65, -3.000000, 11.703901, 2.925975, 5.851951 +66, -3.000000, 11.883961, 2.970990, 5.941981 +67, -3.000000, 12.064021, 3.016005, 6.032011 +68, -3.000000, 12.244081, 3.061020, 6.122041 +69, -3.000000, 12.424141, 3.106035, 6.212071 +70, -3.000000, 12.604201, 3.151050, 6.302101 +71, -3.000000, 12.784261, 3.196065, 6.392131 +72, -3.000000, 12.964321, 3.241080, 6.482161 +73, -3.000000, 13.144381, 3.286095, 6.572191 +74, -3.000000, 13.324441, 3.331110, 6.662221 +75, -3.000000, 13.504502, 3.376125, 6.752251 +76, -3.000000, 13.684562, 3.421140, 6.842281 +77, -3.000000, 13.864622, 3.466155, 6.932311 +78, -3.000000, 14.044682, 3.511170, 7.022341 +79, -3.000000, 14.224742, 3.556185, 7.112371 +80, -3.000000, 14.404802, 3.601200, 7.202401 +81, -3.000000, 14.584862, 3.646215, 7.292431 +82, -3.000000, 14.764922, 3.691230, 7.382461 +83, -3.000000, 14.944982, 3.736245, 7.472491 +84, -3.000000, 15.125042, 3.781260, 7.562521 +85, -3.000000, 15.305102, 3.826275, 7.652551 +86, -3.000000, 15.485162, 3.871290, 7.742581 +87, -3.000000, 15.665222, 3.916305, 7.832611 +88, -3.000000, 15.845282, 3.961320, 7.922641 +89, -3.000000, 16.025342, 4.006335, 8.012671 +90, -3.000000, 16.205402, 4.051350, 8.102701 +91, -3.000000, 16.385462, 4.096365, 8.192731 +92, -3.000000, 16.565522, 4.141380, 8.282761 +93, -3.000000, 16.745582, 4.186395, 8.372791 +94, -3.000000, 16.925642, 4.231410, 8.462821 +95, -3.000000, 17.105702, 4.276425, 8.552851 +96, -3.000000, 17.285762, 4.321440, 8.642881 +97, -3.000000, 17.465822, 4.366455, 8.732911 +98, -3.000000, 17.645882, 4.411470, 8.822941 +99, -3.000000, 17.825942, 4.456485, 8.912971 +100, -3.000000, 18.006002, 4.501501, 9.003001 +101, -3.000000, 18.186062, 4.546516, 9.093031 +102, -3.000000, 18.366122, 4.591531, 9.183061 +103, -3.000000, 18.546182, 4.636546, 9.273091 +104, -3.000000, 18.726242, 4.681561, 9.363121 +105, -3.000000, 18.906302, 4.726576, 9.453151 +106, -3.000000, 19.086362, 4.771591, 9.543181 +107, -3.000000, 19.266422, 4.816606, 9.633211 +108, -3.000000, 19.446482, 4.861621, 9.723241 +109, -3.000000, 19.626542, 4.906636, 9.813271 +110, -3.000000, 19.806602, 4.951651, 9.903301 +111, -3.000000, 19.986662, 4.996666, 9.993331 +112, -3.000000, 20.166722, 5.041681, 10.083361 +113, -3.000000, 20.346782, 5.086696, 10.173391 +114, -3.000000, 20.526842, 5.131711, 10.263421 +115, -3.000000, 20.706902, 5.176726, 10.353451 +116, -3.000000, 20.886962, 5.221741, 10.443481 +117, -3.000000, 21.067022, 5.266756, 10.533511 +118, -3.000000, 21.247082, 5.311771, 10.623541 +119, -3.000000, 21.427142, 5.356786, 10.713571 +120, -3.000000, 21.607202, 5.401801, 10.803601 +121, -3.000000, 21.787262, 5.446816, 10.893631 +122, -3.000000, 21.967322, 5.491831, 10.983661 +123, -3.000000, 22.147382, 5.536846, 11.073691 +124, -3.000000, 22.327442, 5.581861, 11.163721 +125, -3.000000, 22.507503, 5.626876, 11.253751 +126, -3.000000, 22.687563, 5.671891, 11.343781 +127, -3.000000, 22.867623, 5.716906, 11.433811 +128, -3.000000, 23.047683, 5.761921, 11.523841 +129, -3.000000, 23.227743, 5.806936, 11.613871 +130, -3.000000, 23.407803, 5.851951, 11.703901 +131, -3.000000, 23.587863, 5.896966, 11.793931 +132, -3.000000, 23.767923, 5.941981, 11.883961 +133, -3.000000, 23.947983, 5.986996, 11.973991 +134, -3.000000, 24.128043, 6.032011, 12.064021 +135, -3.000000, 24.308103, 6.077026, 12.154051 +136, -3.000000, 24.488163, 6.122041, 12.244081 +137, -3.000000, 24.668223, 6.167056, 12.334111 +138, -3.000000, 24.848283, 6.212071, 12.424141 +139, -3.000000, 25.028343, 6.257086, 12.514171 +140, -3.000000, 25.208403, 6.302101, 12.604201 +141, -3.000000, 25.388463, 6.347116, 12.694231 +142, -3.000000, 25.568523, 6.392131, 12.784261 +143, -3.000000, 25.748583, 6.437146, 12.874291 +144, -3.000000, 25.928643, 6.482161, 12.964321 +145, -3.000000, 26.108703, 6.527176, 13.054351 +146, -3.000000, 26.288763, 6.572191, 13.144381 +147, -3.000000, 26.468823, 6.617206, 13.234411 +148, -3.000000, 26.648883, 6.662221, 13.324441 +149, -3.000000, 26.828943, 6.707236, 13.414471 +150, -3.000000, 27.009003, 6.752251, 13.504502 +151, -3.000000, 27.189063, 6.797266, 13.594532 +152, -3.000000, 27.369123, 6.842281, 13.684562 +153, -3.000000, 27.549183, 6.887296, 13.774592 +154, -3.000000, 27.729243, 6.932311, 13.864622 +155, -3.000000, 27.909303, 6.977326, 13.954652 +156, -3.000000, 28.089363, 7.022341, 14.044682 +157, -3.000000, 28.269423, 7.067356, 14.134712 +158, -3.000000, 28.449483, 7.112371, 14.224742 +159, -3.000000, 28.629543, 7.157386, 14.314772 +160, -3.000000, 28.809603, 7.202401, 14.404802 +161, -3.000000, 28.989663, 7.247416, 14.494832 +162, -3.000000, 29.169723, 7.292431, 14.584862 +163, -3.000000, 29.349783, 7.337446, 14.674892 +164, -3.000000, 29.529843, 7.382461, 14.764922 +165, -3.000000, 29.709903, 7.427476, 14.854952 +166, -3.000000, 29.889963, 7.472491, 14.944982 +167, -3.000000, 30.070023, 7.517506, 15.035012 +168, -3.000000, 30.250083, 7.562521, 15.125042 +169, -3.000000, 30.430143, 7.607536, 15.215072 +170, -3.000000, 30.610203, 7.652551, 15.305102 +171, -3.000000, 30.790263, 7.697566, 15.395132 +172, -3.000000, 30.970323, 7.742581, 15.485162 +173, -3.000000, 31.150383, 7.787596, 15.575192 +174, -3.000000, 31.330443, 7.832611, 15.665222 +175, -3.000000, 31.510504, 7.877626, 15.755252 +176, -3.000000, 31.690564, 7.922641, 15.845282 +177, -3.000000, 31.870624, 7.967656, 15.935312 +178, -3.000000, 32.050684, 8.012671, 16.025342 +179, -3.000000, 32.230744, 8.057686, 16.115372 +180, -3.000000, 32.410804, 8.102701, 16.205402 +181, -3.000000, 32.590864, 8.147716, 16.295432 +182, -3.000000, 32.770924, 8.192731, 16.385462 +183, -3.000000, 32.950984, 8.237746, 16.475492 +184, -3.000000, 33.131044, 8.282761, 16.565522 +185, -3.000000, 33.311104, 8.327776, 16.655552 +186, -3.000000, 33.491164, 8.372791, 16.745582 +187, -3.000000, 33.671224, 8.417806, 16.835612 +188, -3.000000, 33.851284, 8.462821, 16.925642 +189, -3.000000, 34.031344, 8.507836, 17.015672 +190, -3.000000, 34.211404, 8.552851, 17.105702 +191, -3.000000, 34.391464, 8.597866, 17.195732 +192, -3.000000, 34.571524, 8.642881, 17.285762 +193, -3.000000, 34.751584, 8.687896, 17.375792 +194, -3.000000, 34.931644, 8.732911, 17.465822 +195, -3.000000, 35.111704, 8.777926, 17.555852 +196, -3.000000, 35.291764, 8.822941, 17.645882 +197, -3.000000, 35.471824, 8.867956, 17.735912 +198, -3.000000, 35.651884, 8.912971, 17.825942 +199, -3.000000, 35.831944, 8.957986, 17.915972 +200, -3.000000, 36.012004, 9.003001, 18.006002 +201, -3.000000, 36.192064, 9.048016, 18.096032 +202, -3.000000, 36.372124, 9.093031, 18.186062 +203, -3.000000, 36.552184, 9.138046, 18.276092 +204, -3.000000, 36.732244, 9.183061, 18.366122 +205, -3.000000, 36.912304, 9.228076, 18.456152 +206, -3.000000, 37.092364, 9.273091, 18.546182 +207, -3.000000, 37.272424, 9.318106, 18.636212 +208, -3.000000, 37.452484, 9.363121, 18.726242 +209, -3.000000, 37.632544, 9.408136, 18.816272 +210, -3.000000, 37.812604, 9.453151, 18.906302 +211, -3.000000, 37.992664, 9.498166, 18.996332 +212, -3.000000, 38.172724, 9.543181, 19.086362 +213, -3.000000, 38.352784, 9.588196, 19.176392 +214, -3.000000, 38.532844, 9.633211, 19.266422 +215, -3.000000, 38.712904, 9.678226, 19.356452 +216, -3.000000, 38.892964, 9.723241, 19.446482 +217, -3.000000, 39.073024, 9.768256, 19.536512 +218, -3.000000, 39.253084, 9.813271, 19.626542 +219, -3.000000, 39.433144, 9.858286, 19.716572 +220, -3.000000, 39.613204, 9.903301, 19.806602 +221, -3.000000, 39.793264, 9.948316, 19.896632 +222, -3.000000, 39.973324, 9.993331, 19.986662 +223, -3.000000, 40.153384, 10.038346, 20.076692 +224, -3.000000, 40.333444, 10.083361, 20.166722 +225, -3.000000, 40.513505, 10.128376, 20.256752 +226, -3.000000, 40.693565, 10.173391, 20.346782 +227, -3.000000, 40.873625, 10.218406, 20.436812 +228, -3.000000, 41.053685, 10.263421, 20.526842 +229, -3.000000, 41.233745, 10.308436, 20.616872 +230, -3.000000, 41.413805, 10.353451, 20.706902 +231, -3.000000, 41.593865, 10.398466, 20.796932 +232, -3.000000, 41.773925, 10.443481, 20.886962 +233, -3.000000, 41.953985, 10.488496, 20.976992 +234, -3.000000, 42.134045, 10.533511, 21.067022 +235, -3.000000, 42.314105, 10.578526, 21.157052 +236, -3.000000, 42.494165, 10.623541, 21.247082 +237, -3.000000, 42.674225, 10.668556, 21.337112 +238, -3.000000, 42.854285, 10.713571, 21.427142 +239, -3.000000, 43.034345, 10.758586, 21.517172 +240, -3.000000, 43.214405, 10.803601, 21.607202 +241, -3.000000, 43.394465, 10.848616, 21.697232 +242, -3.000000, 43.574525, 10.893631, 21.787262 +243, -3.000000, 43.754585, 10.938646, 21.877292 +244, -3.000000, 43.934645, 10.983661, 21.967322 +245, -3.000000, 44.114705, 11.028676, 22.057352 +246, -3.000000, 44.294765, 11.073691, 22.147382 +247, -3.000000, 44.474825, 11.118706, 22.237412 +248, -3.000000, 44.654885, 11.163721, 22.327442 +249, -3.000000, 44.834945, 11.208736, 22.417472 +250, -3.000000, 45.015005, 11.253751, 22.507503 +251, -3.000000, 45.195065, 11.298766, 22.597533 +252, -3.000000, 45.375125, 11.343781, 22.687563 +253, -3.000000, 45.555185, 11.388796, 22.777593 +254, -3.000000, 45.735245, 11.433811, 22.867623 +255, -3.000000, 45.915305, 11.478826, 22.957653 +256, -3.000000, 46.095365, 11.523841, 23.047683 +257, -3.000000, 46.275425, 11.568856, 23.137713 +258, -3.000000, 46.455485, 11.613871, 23.227743 +259, -3.000000, 46.635545, 11.658886, 23.317773 +260, -3.000000, 46.815605, 11.703901, 23.407803 +261, -3.000000, 46.995665, 11.748916, 23.497833 +262, -3.000000, 47.175725, 11.793931, 23.587863 +263, -3.000000, 47.355785, 11.838946, 23.677893 +264, -3.000000, 47.535845, 11.883961, 23.767923 +265, -3.000000, 47.715905, 11.928976, 23.857953 +266, -3.000000, 47.895965, 11.973991, 23.947983 +267, -3.000000, 48.076025, 12.019006, 24.038013 +268, -3.000000, 48.256085, 12.064021, 24.128043 +269, -3.000000, 48.436145, 12.109036, 24.218073 +270, -3.000000, 48.616205, 12.154051, 24.308103 +271, -3.000000, 48.796265, 12.199066, 24.398133 +272, -3.000000, 48.976325, 12.244081, 24.488163 +273, -3.000000, 49.156385, 12.289096, 24.578193 +274, -3.000000, 49.336445, 12.334111, 24.668223 +275, -3.000000, 49.516506, 12.379126, 24.758253 +276, -3.000000, 49.696566, 12.424141, 24.848283 +277, -3.000000, 49.876626, 12.469156, 24.938313 +278, -3.000000, 50.056686, 12.514171, 25.028343 +279, -3.000000, 50.236746, 12.559186, 25.118373 +280, -3.000000, 50.416806, 12.604201, 25.208403 +281, -3.000000, 50.596866, 12.649216, 25.298433 +282, -3.000000, 50.776926, 12.694231, 25.388463 +283, -3.000000, 50.956986, 12.739246, 25.478493 +284, -3.000000, 51.137046, 12.784261, 25.568523 +285, -3.000000, 51.317106, 12.829276, 25.658553 +286, -3.000000, 51.497166, 12.874291, 25.748583 +287, -3.000000, 51.677226, 12.919306, 25.838613 +288, -3.000000, 51.857286, 12.964321, 25.928643 +289, -3.000000, 52.037346, 13.009336, 26.018673 +290, -3.000000, 52.217406, 13.054351, 26.108703 +291, -3.000000, 52.397466, 13.099366, 26.198733 +292, -3.000000, 52.577526, 13.144381, 26.288763 +293, -3.000000, 52.757586, 13.189396, 26.378793 +294, -3.000000, 52.937646, 13.234411, 26.468823 +295, -3.000000, 53.117706, 13.279426, 26.558853 +296, -3.000000, 53.297766, 13.324441, 26.648883 +297, -3.000000, 53.477826, 13.369456, 26.738913 +298, -3.000000, 53.657886, 13.414471, 26.828943 +299, -3.000000, 53.837946, 13.459486, 26.918973 +300, -3.000000, 54.018006, 13.504502, 27.009003 +301, -3.000000, 54.198066, 13.549517, 27.099033 +302, -3.000000, 54.378126, 13.594532, 27.189063 +303, -3.000000, 54.558186, 13.639547, 27.279093 +304, -3.000000, 54.738246, 13.684562, 27.369123 +305, -3.000000, 54.918306, 13.729577, 27.459153 +306, -3.000000, 55.098366, 13.774592, 27.549183 +307, -3.000000, 55.278426, 13.819607, 27.639213 +308, -3.000000, 55.458486, 13.864622, 27.729243 +309, -3.000000, 55.638546, 13.909637, 27.819273 +310, -3.000000, 55.818606, 13.954652, 27.909303 +311, -3.000000, 55.998666, 13.999667, 27.999333 +312, -3.000000, 56.178726, 14.044682, 28.089363 +313, -3.000000, 56.358786, 14.089697, 28.179393 +314, -3.000000, 56.538846, 14.134712, 28.269423 +315, -3.000000, 56.718906, 14.179727, 28.359453 +316, -3.000000, 56.898966, 14.224742, 28.449483 +317, -3.000000, 57.079026, 14.269757, 28.539513 +318, -3.000000, 57.259086, 14.314772, 28.629543 +319, -3.000000, 57.439146, 14.359787, 28.719573 +320, -3.000000, 57.619206, 14.404802, 28.809603 +321, -3.000000, 57.799266, 14.449817, 28.899633 +322, -3.000000, 57.979326, 14.494832, 28.989663 +323, -3.000000, 58.159386, 14.539847, 29.079693 +324, -3.000000, 58.339446, 14.584862, 29.169723 +325, -3.000000, 58.519507, 14.629877, 29.259753 +326, -3.000000, 58.699567, 14.674892, 29.349783 +327, -3.000000, 58.879627, 14.719907, 29.439813 +328, -3.000000, 59.059687, 14.764922, 29.529843 +329, -3.000000, 59.239747, 14.809937, 29.619873 +330, -3.000000, 59.419807, 14.854952, 29.709903 +331, -3.000000, 59.599867, 14.899967, 29.799933 +332, -3.000000, 59.779927, 14.944982, 29.889963 +333, -3.000000, 59.959987, 14.989997, 29.979993 +334, -3.000000, 60.140047, 15.035012, 30.070023 +335, -3.000000, 60.320107, 15.080027, 30.160053 +336, -3.000000, 60.500167, 15.125042, 30.250083 +337, -3.000000, 60.680227, 15.170057, 30.340113 +338, -3.000000, 60.860287, 15.215072, 30.430143 +339, -3.000000, 61.040347, 15.260087, 30.520173 +340, -3.000000, 61.220407, 15.305102, 30.610203 +341, -3.000000, 61.400467, 15.350117, 30.700233 +342, -3.000000, 61.580527, 15.395132, 30.790263 +343, -3.000000, 61.760587, 15.440147, 30.880293 +344, -3.000000, 61.940647, 15.485162, 30.970323 +345, -3.000000, 62.120707, 15.530177, 31.060353 +346, -3.000000, 62.300767, 15.575192, 31.150383 +347, -3.000000, 62.480827, 15.620207, 31.240413 +348, -3.000000, 62.660887, 15.665222, 31.330443 +349, -3.000000, 62.840947, 15.710237, 31.420473 +350, -3.000000, 63.021007, 15.755252, 31.510504 +351, -3.000000, 63.201067, 15.800267, 31.600534 +352, -3.000000, 63.381127, 15.845282, 31.690564 +353, -3.000000, 63.561187, 15.890297, 31.780594 +354, -3.000000, 63.741247, 15.935312, 31.870624 +355, -3.000000, 63.921307, 15.980327, 31.960654 +356, -3.000000, 64.101367, 16.025342, 32.050684 +357, -3.000000, 64.281427, 16.070357, 32.140714 +358, -3.000000, 64.461487, 16.115372, 32.230744 +359, -3.000000, 64.641547, 16.160387, 32.320774 +360, -3.000000, 64.821607, 16.205402, 32.410804 +361, -3.000000, 65.001667, 16.250417, 32.500834 +362, -3.000000, 65.181727, 16.295432, 32.590864 +363, -3.000000, 65.361787, 16.340447, 32.680894 +364, -3.000000, 65.541847, 16.385462, 32.770924 +365, -3.000000, 65.721907, 16.430477, 32.860954 +366, -3.000000, 65.901967, 16.475492, 32.950984 +367, -3.000000, 66.082027, 16.520507, 33.041014 +368, -3.000000, 66.262087, 16.565522, 33.131044 +369, -3.000000, 66.442147, 16.610537, 33.221074 +370, -3.000000, 66.622207, 16.655552, 33.311104 +371, -3.000000, 66.802267, 16.700567, 33.401134 +372, -3.000000, 66.982327, 16.745582, 33.491164 +373, -3.000000, 67.162387, 16.790597, 33.581194 +374, -3.000000, 67.342447, 16.835612, 33.671224 +375, -3.000000, 67.522508, 16.880627, 33.761254 +376, -3.000000, 67.702568, 16.925642, 33.851284 +377, -3.000000, 67.882628, 16.970657, 33.941314 +378, -3.000000, 68.062688, 17.015672, 34.031344 +379, -3.000000, 68.242748, 17.060687, 34.121374 +380, -3.000000, 68.422808, 17.105702, 34.211404 +381, -3.000000, 68.602868, 17.150717, 34.301434 +382, -3.000000, 68.782928, 17.195732, 34.391464 +383, -3.000000, 68.962988, 17.240747, 34.481494 +384, -3.000000, 69.143048, 17.285762, 34.571524 +385, -3.000000, 69.323108, 17.330777, 34.661554 +386, -3.000000, 69.503168, 17.375792, 34.751584 +387, -3.000000, 69.683228, 17.420807, 34.841614 +388, -3.000000, 69.863288, 17.465822, 34.931644 +389, -3.000000, 70.043348, 17.510837, 35.021674 +390, -3.000000, 70.223408, 17.555852, 35.111704 +391, -3.000000, 70.403468, 17.600867, 35.201734 +392, -3.000000, 70.583528, 17.645882, 35.291764 +393, -3.000000, 70.763588, 17.690897, 35.381794 +394, -3.000000, 70.943648, 17.735912, 35.471824 +395, -3.000000, 71.123708, 17.780927, 35.561854 +396, -3.000000, 71.303768, 17.825942, 35.651884 +397, -3.000000, 71.483828, 17.870957, 35.741914 +398, -3.000000, 71.663888, 17.915972, 35.831944 +399, -3.000000, 71.843948, 17.960987, 35.921974 +400, -3.000000, 72.024008, 18.006002, 36.012004 +401, -3.000000, 72.204068, 18.051017, 36.102034 +402, -3.000000, 72.384128, 18.096032, 36.192064 +403, -3.000000, 72.564188, 18.141047, 36.282094 +404, -3.000000, 72.744248, 18.186062, 36.372124 +405, -3.000000, 72.924308, 18.231077, 36.462154 +406, -3.000000, 73.104368, 18.276092, 36.552184 +407, -3.000000, 73.284428, 18.321107, 36.642214 +408, -3.000000, 73.464488, 18.366122, 36.732244 +409, -3.000000, 73.644548, 18.411137, 36.822274 +410, -3.000000, 73.824608, 18.456152, 36.912304 +411, -3.000000, 74.004668, 18.501167, 37.002334 +412, -3.000000, 74.184728, 18.546182, 37.092364 +413, -3.000000, 74.364788, 18.591197, 37.182394 +414, -3.000000, 74.544848, 18.636212, 37.272424 +415, -3.000000, 74.724908, 18.681227, 37.362454 +416, -3.000000, 74.904968, 18.726242, 37.452484 +417, -3.000000, 75.085028, 18.771257, 37.542514 +418, -3.000000, 75.265088, 18.816272, 37.632544 +419, -3.000000, 75.445148, 18.861287, 37.722574 +420, -3.000000, 75.625208, 18.906302, 37.812604 +421, -3.000000, 75.805268, 18.951317, 37.902634 +422, -3.000000, 75.985328, 18.996332, 37.992664 +423, -3.000000, 76.165388, 19.041347, 38.082694 +424, -3.000000, 76.345448, 19.086362, 38.172724 +425, -3.000000, 76.525509, 19.131377, 38.262754 +426, -3.000000, 76.705569, 19.176392, 38.352784 +427, -3.000000, 76.885629, 19.221407, 38.442814 +428, -3.000000, 77.065689, 19.266422, 38.532844 +429, -3.000000, 77.245749, 19.311437, 38.622874 +430, -3.000000, 77.425809, 19.356452, 38.712904 +431, -3.000000, 77.605869, 19.401467, 38.802934 +432, -3.000000, 77.785929, 19.446482, 38.892964 +433, -3.000000, 77.965989, 19.491497, 38.982994 +434, -3.000000, 78.146049, 19.536512, 39.073024 +435, -3.000000, 78.326109, 19.581527, 39.163054 +436, -3.000000, 78.506169, 19.626542, 39.253084 +437, -3.000000, 78.686229, 19.671557, 39.343114 +438, -3.000000, 78.866289, 19.716572, 39.433144 +439, -3.000000, 79.046349, 19.761587, 39.523174 +440, -3.000000, 79.226409, 19.806602, 39.613204 +441, -3.000000, 79.406469, 19.851617, 39.703234 +442, -3.000000, 79.586529, 19.896632, 39.793264 +443, -3.000000, 79.766589, 19.941647, 39.883294 +444, -3.000000, 79.946649, 19.986662, 39.973324 +445, -3.000000, 80.126709, 20.031677, 40.063354 +446, -3.000000, 80.306769, 20.076692, 40.153384 +447, -3.000000, 80.486829, 20.121707, 40.243414 +448, -3.000000, 80.666889, 20.166722, 40.333444 +449, -3.000000, 80.846949, 20.211737, 40.423474 +450, -3.000000, 81.027009, 20.256752, 40.513505 +451, -3.000000, 81.207069, 20.301767, 40.603535 +452, -3.000000, 81.387129, 20.346782, 40.693565 +453, -3.000000, 81.567189, 20.391797, 40.783595 +454, -3.000000, 81.747249, 20.436812, 40.873625 +455, -3.000000, 81.927309, 20.481827, 40.963655 +456, -3.000000, 82.107369, 20.526842, 41.053685 +457, -3.000000, 82.287429, 20.571857, 41.143715 +458, -3.000000, 82.467489, 20.616872, 41.233745 +459, -3.000000, 82.647549, 20.661887, 41.323775 +460, -3.000000, 82.827609, 20.706902, 41.413805 +461, -3.000000, 83.007669, 20.751917, 41.503835 +462, -3.000000, 83.187729, 20.796932, 41.593865 +463, -3.000000, 83.367789, 20.841947, 41.683895 +464, -3.000000, 83.547849, 20.886962, 41.773925 +465, -3.000000, 83.727909, 20.931977, 41.863955 +466, -3.000000, 83.907969, 20.976992, 41.953985 +467, -3.000000, 84.088029, 21.022007, 42.044015 +468, -3.000000, 84.268089, 21.067022, 42.134045 +469, -3.000000, 84.448149, 21.112037, 42.224075 +470, -3.000000, 84.628209, 21.157052, 42.314105 +471, -3.000000, 84.808269, 21.202067, 42.404135 +472, -3.000000, 84.988329, 21.247082, 42.494165 +473, -3.000000, 85.168389, 21.292097, 42.584195 +474, -3.000000, 85.348449, 21.337112, 42.674225 +475, -3.000000, 85.528510, 21.382127, 42.764255 +476, -3.000000, 85.708570, 21.427142, 42.854285 +477, -3.000000, 85.888630, 21.472157, 42.944315 +478, -3.000000, 86.068690, 21.517172, 43.034345 +479, -3.000000, 86.248750, 21.562187, 43.124375 +480, -3.000000, 86.428810, 21.607202, 43.214405 +481, -3.000000, 86.608870, 21.652217, 43.304435 +482, -3.000000, 86.788930, 21.697232, 43.394465 +483, -3.000000, 86.968990, 21.742247, 43.484495 +484, -3.000000, 87.149050, 21.787262, 43.574525 +485, -3.000000, 87.329110, 21.832277, 43.664555 +486, -3.000000, 87.509170, 21.877292, 43.754585 +487, -3.000000, 87.689230, 21.922307, 43.844615 +488, -3.000000, 87.869290, 21.967322, 43.934645 +489, -3.000000, 88.049350, 22.012337, 44.024675 +490, -3.000000, 88.229410, 22.057352, 44.114705 +491, -3.000000, 88.409470, 22.102367, 44.204735 +492, -3.000000, 88.589530, 22.147382, 44.294765 +493, -3.000000, 88.769590, 22.192397, 44.384795 +494, -3.000000, 88.949650, 22.237412, 44.474825 +495, -3.000000, 89.129710, 22.282427, 44.564855 +496, -3.000000, 89.309770, 22.327442, 44.654885 +497, -3.000000, 89.489830, 22.372457, 44.744915 +498, -3.000000, 89.669890, 22.417472, 44.834945 +499, -3.000000, 89.849950, 22.462487, 44.924975 +500, -3.000000, 90.030010, 22.507503, 45.015005 +501, -3.000000, 90.210070, 22.552518, 45.105035 +502, -3.000000, 90.390130, 22.597533, 45.195065 +503, -3.000000, 90.570190, 22.642548, 45.285095 +504, -3.000000, 90.750250, 22.687563, 45.375125 +505, -3.000000, 90.930310, 22.732578, 45.465155 +506, -3.000000, 91.110370, 22.777593, 45.555185 +507, -3.000000, 91.290430, 22.822608, 45.645215 +508, -3.000000, 91.470490, 22.867623, 45.735245 +509, -3.000000, 91.650550, 22.912638, 45.825275 +510, -3.000000, 91.830610, 22.957653, 45.915305 +511, -3.000000, 92.010670, 23.002668, 46.005335 +512, -3.000000, 92.190730, 23.047683, 46.095365 +513, -3.000000, 92.370790, 23.092698, 46.185395 +514, -3.000000, 92.550850, 23.137713, 46.275425 +515, -3.000000, 92.730910, 23.182728, 46.365455 +516, -3.000000, 92.910970, 23.227743, 46.455485 +517, -3.000000, 93.091030, 23.272758, 46.545515 +518, -3.000000, 93.271090, 23.317773, 46.635545 +519, -3.000000, 93.451150, 23.362788, 46.725575 +520, -3.000000, 93.631210, 23.407803, 46.815605 +521, -3.000000, 93.811270, 23.452818, 46.905635 +522, -3.000000, 93.991330, 23.497833, 46.995665 +523, -3.000000, 94.171390, 23.542848, 47.085695 +524, -3.000000, 94.351450, 23.587863, 47.175725 +525, -3.000000, 94.531511, 23.632878, 47.265755 +526, -3.000000, 94.711571, 23.677893, 47.355785 +527, -3.000000, 94.891631, 23.722908, 47.445815 +528, -3.000000, 95.071691, 23.767923, 47.535845 +529, -3.000000, 95.251751, 23.812938, 47.625875 +530, -3.000000, 95.431811, 23.857953, 47.715905 +531, -3.000000, 95.611871, 23.902968, 47.805935 +532, -3.000000, 95.791931, 23.947983, 47.895965 +533, -3.000000, 95.971991, 23.992998, 47.985995 +534, -3.000000, 96.152051, 24.038013, 48.076025 +535, -3.000000, 96.332111, 24.083028, 48.166055 +536, -3.000000, 96.512171, 24.128043, 48.256085 +537, -3.000000, 96.692231, 24.173058, 48.346115 +538, -3.000000, 96.872291, 24.218073, 48.436145 +539, -3.000000, 97.052351, 24.263088, 48.526175 +540, -3.000000, 97.232411, 24.308103, 48.616205 +541, -3.000000, 97.412471, 24.353118, 48.706235 +542, -3.000000, 97.592531, 24.398133, 48.796265 +543, -3.000000, 97.772591, 24.443148, 48.886295 +544, -3.000000, 97.952651, 24.488163, 48.976325 +545, -3.000000, 98.132711, 24.533178, 49.066355 +546, -3.000000, 98.312771, 24.578193, 49.156385 +547, -3.000000, 98.492831, 24.623208, 49.246415 +548, -3.000000, 98.672891, 24.668223, 49.336445 +549, -3.000000, 98.852951, 24.713238, 49.426475 +550, -3.000000, 99.033011, 24.758253, 49.516506 +551, -3.000000, 99.213071, 24.803268, 49.606536 +552, -3.000000, 99.393131, 24.848283, 49.696566 +553, -3.000000, 99.573191, 24.893298, 49.786596 +554, -3.000000, 99.753251, 24.938313, 49.876626 +555, -3.000000, 99.933311, 24.983328, 49.966656 +556, -3.000000, 100.113371, 25.028343, 50.056686 +557, -3.000000, 100.293431, 25.073358, 50.146716 +558, -3.000000, 100.473491, 25.118373, 50.236746 +559, -3.000000, 100.653551, 25.163388, 50.326776 +560, -3.000000, 100.833611, 25.208403, 50.416806 +561, -3.000000, 101.013671, 25.253418, 50.506836 +562, -3.000000, 101.193731, 25.298433, 50.596866 +563, -3.000000, 101.373791, 25.343448, 50.686896 +564, -3.000000, 101.553851, 25.388463, 50.776926 +565, -3.000000, 101.733911, 25.433478, 50.866956 +566, -3.000000, 101.913971, 25.478493, 50.956986 +567, -3.000000, 102.094031, 25.523508, 51.047016 +568, -3.000000, 102.274091, 25.568523, 51.137046 +569, -3.000000, 102.454151, 25.613538, 51.227076 +570, -3.000000, 102.634211, 25.658553, 51.317106 +571, -3.000000, 102.814271, 25.703568, 51.407136 +572, -3.000000, 102.994331, 25.748583, 51.497166 +573, -3.000000, 103.174391, 25.793598, 51.587196 +574, -3.000000, 103.354451, 25.838613, 51.677226 +575, -3.000000, 103.534512, 25.883628, 51.767256 +576, -3.000000, 103.714572, 25.928643, 51.857286 +577, -3.000000, 103.894632, 25.973658, 51.947316 +578, -3.000000, 104.074692, 26.018673, 52.037346 +579, -3.000000, 104.254752, 26.063688, 52.127376 +580, -3.000000, 104.434812, 26.108703, 52.217406 +581, -3.000000, 104.614872, 26.153718, 52.307436 +582, -3.000000, 104.794932, 26.198733, 52.397466 +583, -3.000000, 104.974992, 26.243748, 52.487496 +584, -3.000000, 105.155052, 26.288763, 52.577526 +585, -3.000000, 105.335112, 26.333778, 52.667556 +586, -3.000000, 105.515172, 26.378793, 52.757586 +587, -3.000000, 105.695232, 26.423808, 52.847616 +588, -3.000000, 105.875292, 26.468823, 52.937646 +589, -3.000000, 106.055352, 26.513838, 53.027676 +590, -3.000000, 106.235412, 26.558853, 53.117706 +591, -3.000000, 106.415472, 26.603868, 53.207736 +592, -3.000000, 106.595532, 26.648883, 53.297766 +593, -3.000000, 106.775592, 26.693898, 53.387796 +594, -3.000000, 106.955652, 26.738913, 53.477826 +595, -3.000000, 107.135712, 26.783928, 53.567856 +596, -3.000000, 107.315772, 26.828943, 53.657886 +597, -3.000000, 107.495832, 26.873958, 53.747916 +598, -3.000000, 107.675892, 26.918973, 53.837946 +599, -3.000000, 107.855952, 26.963988, 53.927976 +600, -3.000000, 108.036012, 27.009003, 54.018006 +601, -3.000000, 108.216072, 27.054018, 54.108036 +602, -3.000000, 108.396132, 27.099033, 54.198066 +603, -3.000000, 108.576192, 27.144048, 54.288096 +604, -3.000000, 108.756252, 27.189063, 54.378126 +605, -3.000000, 108.936312, 27.234078, 54.468156 +606, -3.000000, 109.116372, 27.279093, 54.558186 +607, -3.000000, 109.296432, 27.324108, 54.648216 +608, -3.000000, 109.476492, 27.369123, 54.738246 +609, -3.000000, 109.656552, 27.414138, 54.828276 +610, -3.000000, 109.836612, 27.459153, 54.918306 +611, -3.000000, 110.016672, 27.504168, 55.008336 +612, -3.000000, 110.196732, 27.549183, 55.098366 +613, -3.000000, 110.376792, 27.594198, 55.188396 +614, -3.000000, 110.556852, 27.639213, 55.278426 +615, -3.000000, 110.736912, 27.684228, 55.368456 +616, -3.000000, 110.916972, 27.729243, 55.458486 +617, -3.000000, 111.097032, 27.774258, 55.548516 +618, -3.000000, 111.277092, 27.819273, 55.638546 +619, -3.000000, 111.457152, 27.864288, 55.728576 +620, -3.000000, 111.637212, 27.909303, 55.818606 +621, -3.000000, 111.817272, 27.954318, 55.908636 +622, -3.000000, 111.997332, 27.999333, 55.998666 +623, -3.000000, 112.177392, 28.044348, 56.088696 +624, -3.000000, 112.357452, 28.089363, 56.178726 +625, -3.000000, 112.537513, 28.134378, 56.268756 +626, -3.000000, 112.717573, 28.179393, 56.358786 +627, -3.000000, 112.897633, 28.224408, 56.448816 +628, -3.000000, 113.077693, 28.269423, 56.538846 +629, -3.000000, 113.257753, 28.314438, 56.628876 +630, -3.000000, 113.437813, 28.359453, 56.718906 +631, -3.000000, 113.617873, 28.404468, 56.808936 +632, -3.000000, 113.797933, 28.449483, 56.898966 +633, -3.000000, 113.977993, 28.494498, 56.988996 +634, -3.000000, 114.158053, 28.539513, 57.079026 +635, -3.000000, 114.338113, 28.584528, 57.169056 +636, -3.000000, 114.518173, 28.629543, 57.259086 +637, -3.000000, 114.698233, 28.674558, 57.349116 +638, -3.000000, 114.878293, 28.719573, 57.439146 +639, -3.000000, 115.058353, 28.764588, 57.529176 +640, -3.000000, 115.238413, 28.809603, 57.619206 +641, -3.000000, 115.418473, 28.854618, 57.709236 +642, -3.000000, 115.598533, 28.899633, 57.799266 +643, -3.000000, 115.778593, 28.944648, 57.889296 +644, -3.000000, 115.958653, 28.989663, 57.979326 +645, -3.000000, 116.138713, 29.034678, 58.069356 +646, -3.000000, 116.318773, 29.079693, 58.159386 +647, -3.000000, 116.498833, 29.124708, 58.249416 +648, -3.000000, 116.678893, 29.169723, 58.339446 +649, -3.000000, 116.858953, 29.214738, 58.429476 +650, -3.000000, 117.039013, 29.259753, 58.519507 +651, -3.000000, 117.219073, 29.304768, 58.609537 +652, -3.000000, 117.399133, 29.349783, 58.699567 +653, -3.000000, 117.579193, 29.394798, 58.789597 +654, -3.000000, 117.759253, 29.439813, 58.879627 +655, -3.000000, 117.939313, 29.484828, 58.969657 +656, -3.000000, 118.119373, 29.529843, 59.059687 +657, -3.000000, 118.299433, 29.574858, 59.149717 +658, -3.000000, 118.479493, 29.619873, 59.239747 +659, -3.000000, 118.659553, 29.664888, 59.329777 +660, -3.000000, 118.839613, 29.709903, 59.419807 +661, -3.000000, 119.019673, 29.754918, 59.509837 +662, -3.000000, 119.199733, 29.799933, 59.599867 +663, -3.000000, 119.379793, 29.844948, 59.689897 +664, -3.000000, 119.559853, 29.889963, 59.779927 +665, -3.000000, 119.739913, 29.934978, 59.869957 +666, -3.000000, 119.919973, 29.979993, 59.959987 +667, -3.000000, 120.100033, 30.025008, 60.050017 +668, -3.000000, 120.280093, 30.070023, 60.140047 +669, -3.000000, 120.460153, 30.115038, 60.230077 +670, -3.000000, 120.640213, 30.160053, 60.320107 +671, -3.000000, 120.820273, 30.205068, 60.410137 +672, -3.000000, 121.000333, 30.250083, 60.500167 +673, -3.000000, 121.180393, 30.295098, 60.590197 +674, -3.000000, 121.360453, 30.340113, 60.680227 +675, -3.000000, 121.540514, 30.385128, 60.770257 +676, -3.000000, 121.720574, 30.430143, 60.860287 +677, -3.000000, 121.900634, 30.475158, 60.950317 +678, -3.000000, 122.080694, 30.520173, 61.040347 +679, -3.000000, 122.260754, 30.565188, 61.130377 +680, -3.000000, 122.440814, 30.610203, 61.220407 +681, -3.000000, 122.620874, 30.655218, 61.310437 +682, -3.000000, 122.800934, 30.700233, 61.400467 +683, -3.000000, 122.980994, 30.745248, 61.490497 +684, -3.000000, 123.161054, 30.790263, 61.580527 +685, -3.000000, 123.341114, 30.835278, 61.670557 +686, -3.000000, 123.521174, 30.880293, 61.760587 +687, -3.000000, 123.701234, 30.925308, 61.850617 +688, -3.000000, 123.881294, 30.970323, 61.940647 +689, -3.000000, 124.061354, 31.015338, 62.030677 +690, -3.000000, 124.241414, 31.060353, 62.120707 +691, -3.000000, 124.421474, 31.105368, 62.210737 +692, -3.000000, 124.601534, 31.150383, 62.300767 +693, -3.000000, 124.781594, 31.195398, 62.390797 +694, -3.000000, 124.961654, 31.240413, 62.480827 +695, -3.000000, 125.141714, 31.285428, 62.570857 +696, -3.000000, 125.321774, 31.330443, 62.660887 +697, -3.000000, 125.501834, 31.375458, 62.750917 +698, -3.000000, 125.681894, 31.420473, 62.840947 +699, -3.000000, 125.861954, 31.465488, 62.930977 +700, -3.000000, 126.042014, 31.510504, 63.021007 +701, -3.000000, 126.222074, 31.555519, 63.111037 +702, -3.000000, 126.402134, 31.600534, 63.201067 +703, -3.000000, 126.582194, 31.645549, 63.291097 +704, -3.000000, 126.762254, 31.690564, 63.381127 +705, -3.000000, 126.942314, 31.735579, 63.471157 +706, -3.000000, 127.122374, 31.780594, 63.561187 +707, -3.000000, 127.302434, 31.825609, 63.651217 +708, -3.000000, 127.482494, 31.870624, 63.741247 +709, -3.000000, 127.662554, 31.915639, 63.831277 +710, -3.000000, 127.842614, 31.960654, 63.921307 +711, -3.000000, 128.022674, 32.005669, 64.011337 +712, -3.000000, 128.202734, 32.050684, 64.101367 +713, -3.000000, 128.382794, 32.095699, 64.191397 +714, -3.000000, 128.562854, 32.140714, 64.281427 +715, -3.000000, 128.742914, 32.185729, 64.371457 +716, -3.000000, 128.922974, 32.230744, 64.461487 +717, -3.000000, 129.103034, 32.275759, 64.551517 +718, -3.000000, 129.283094, 32.320774, 64.641547 +719, -3.000000, 129.463154, 32.365789, 64.731577 +720, -3.000000, 129.643214, 32.410804, 64.821607 +721, -3.000000, 129.823274, 32.455819, 64.911637 +722, -3.000000, 130.003334, 32.500834, 65.001667 +723, -3.000000, 130.183394, 32.545849, 65.091697 +724, -3.000000, 130.363454, 32.590864, 65.181727 +725, -3.000000, 130.543515, 32.635879, 65.271757 +726, -3.000000, 130.723575, 32.680894, 65.361787 +727, -3.000000, 130.903635, 32.725909, 65.451817 +728, -3.000000, 131.083695, 32.770924, 65.541847 +729, -3.000000, 131.263755, 32.815939, 65.631877 +730, -3.000000, 131.443815, 32.860954, 65.721907 +731, -3.000000, 131.623875, 32.905969, 65.811937 +732, -3.000000, 131.803935, 32.950984, 65.901967 +733, -3.000000, 131.983995, 32.995999, 65.991997 +734, -3.000000, 132.164055, 33.041014, 66.082027 +735, -3.000000, 132.344115, 33.086029, 66.172057 +736, -3.000000, 132.524175, 33.131044, 66.262087 +737, -3.000000, 132.704235, 33.176059, 66.352117 +738, -3.000000, 132.884295, 33.221074, 66.442147 +739, -3.000000, 133.064355, 33.266089, 66.532177 +740, -3.000000, 133.244415, 33.311104, 66.622207 +741, -3.000000, 133.424475, 33.356119, 66.712237 +742, -3.000000, 133.604535, 33.401134, 66.802267 +743, -3.000000, 133.784595, 33.446149, 66.892297 +744, -3.000000, 133.964655, 33.491164, 66.982327 +745, -3.000000, 134.144715, 33.536179, 67.072357 +746, -3.000000, 134.324775, 33.581194, 67.162387 +747, -3.000000, 134.504835, 33.626209, 67.252417 +748, -3.000000, 134.684895, 33.671224, 67.342447 +749, -3.000000, 134.864955, 33.716239, 67.432477 +750, -3.000000, 135.045015, 33.761254, 67.522508 +751, -3.000000, 135.225075, 33.806269, 67.612538 +752, -3.000000, 135.405135, 33.851284, 67.702568 +753, -3.000000, 135.585195, 33.896299, 67.792598 +754, -3.000000, 135.765255, 33.941314, 67.882628 +755, -3.000000, 135.945315, 33.986329, 67.972658 +756, -3.000000, 136.125375, 34.031344, 68.062688 +757, -3.000000, 136.305435, 34.076359, 68.152718 +758, -3.000000, 136.485495, 34.121374, 68.242748 +759, -3.000000, 136.665555, 34.166389, 68.332778 +760, -3.000000, 136.845615, 34.211404, 68.422808 +761, -3.000000, 137.025675, 34.256419, 68.512838 +762, -3.000000, 137.205735, 34.301434, 68.602868 +763, -3.000000, 137.385795, 34.346449, 68.692898 +764, -3.000000, 137.565855, 34.391464, 68.782928 +765, -3.000000, 137.745915, 34.436479, 68.872958 +766, -3.000000, 137.925975, 34.481494, 68.962988 +767, -3.000000, 138.106035, 34.526509, 69.053018 +768, -3.000000, 138.286095, 34.571524, 69.143048 +769, -3.000000, 138.466155, 34.616539, 69.233078 +770, -3.000000, 138.646215, 34.661554, 69.323108 +771, -3.000000, 138.826275, 34.706569, 69.413138 +772, -3.000000, 139.006335, 34.751584, 69.503168 +773, -3.000000, 139.186395, 34.796599, 69.593198 +774, -3.000000, 139.366455, 34.841614, 69.683228 +775, -3.000000, 139.546516, 34.886629, 69.773258 +776, -3.000000, 139.726576, 34.931644, 69.863288 +777, -3.000000, 139.906636, 34.976659, 69.953318 +778, -3.000000, 140.086696, 35.021674, 70.043348 +779, -3.000000, 140.266756, 35.066689, 70.133378 +780, -3.000000, 140.446816, 35.111704, 70.223408 +781, -3.000000, 140.626876, 35.156719, 70.313438 +782, -3.000000, 140.806936, 35.201734, 70.403468 +783, -3.000000, 140.986996, 35.246749, 70.493498 +784, -3.000000, 141.167056, 35.291764, 70.583528 +785, -3.000000, 141.347116, 35.336779, 70.673558 +786, -3.000000, 141.527176, 35.381794, 70.763588 +787, -3.000000, 141.707236, 35.426809, 70.853618 +788, -3.000000, 141.887296, 35.471824, 70.943648 +789, -3.000000, 142.067356, 35.516839, 71.033678 +790, -3.000000, 142.247416, 35.561854, 71.123708 +791, -3.000000, 142.427476, 35.606869, 71.213738 +792, -3.000000, 142.607536, 35.651884, 71.303768 +793, -3.000000, 142.787596, 35.696899, 71.393798 +794, -3.000000, 142.967656, 35.741914, 71.483828 +795, -3.000000, 143.147716, 35.786929, 71.573858 +796, -3.000000, 143.327776, 35.831944, 71.663888 +797, -3.000000, 143.507836, 35.876959, 71.753918 +798, -3.000000, 143.687896, 35.921974, 71.843948 +799, -3.000000, 143.867956, 35.966989, 71.933978 +800, -3.000000, 144.048016, 36.012004, 72.024008 +801, -3.000000, 144.228076, 36.057019, 72.114038 +802, -3.000000, 144.408136, 36.102034, 72.204068 +803, -3.000000, 144.588196, 36.147049, 72.294098 +804, -3.000000, 144.768256, 36.192064, 72.384128 +805, -3.000000, 144.948316, 36.237079, 72.474158 +806, -3.000000, 145.128376, 36.282094, 72.564188 +807, -3.000000, 145.308436, 36.327109, 72.654218 +808, -3.000000, 145.488496, 36.372124, 72.744248 +809, -3.000000, 145.668556, 36.417139, 72.834278 +810, -3.000000, 145.848616, 36.462154, 72.924308 +811, -3.000000, 146.028676, 36.507169, 73.014338 +812, -3.000000, 146.208736, 36.552184, 73.104368 +813, -3.000000, 146.388796, 36.597199, 73.194398 +814, -3.000000, 146.568856, 36.642214, 73.284428 +815, -3.000000, 146.748916, 36.687229, 73.374458 +816, -3.000000, 146.928976, 36.732244, 73.464488 +817, -3.000000, 147.109036, 36.777259, 73.554518 +818, -3.000000, 147.289096, 36.822274, 73.644548 +819, -3.000000, 147.469156, 36.867289, 73.734578 +820, -3.000000, 147.649216, 36.912304, 73.824608 +821, -3.000000, 147.829276, 36.957319, 73.914638 +822, -3.000000, 148.009336, 37.002334, 74.004668 +823, -3.000000, 148.189396, 37.047349, 74.094698 +824, -3.000000, 148.369456, 37.092364, 74.184728 +825, -3.000000, 148.549517, 37.137379, 74.274758 +826, -3.000000, 148.729577, 37.182394, 74.364788 +827, -3.000000, 148.909637, 37.227409, 74.454818 +828, -3.000000, 149.089697, 37.272424, 74.544848 +829, -3.000000, 149.269757, 37.317439, 74.634878 +830, -3.000000, 149.449817, 37.362454, 74.724908 +831, -3.000000, 149.629877, 37.407469, 74.814938 +832, -3.000000, 149.809937, 37.452484, 74.904968 +833, -3.000000, 149.989997, 37.497499, 74.994998 +834, -3.000000, 150.170057, 37.542514, 75.085028 +835, -3.000000, 150.350117, 37.587529, 75.175058 +836, -3.000000, 150.530177, 37.632544, 75.265088 +837, -3.000000, 150.710237, 37.677559, 75.355118 +838, -3.000000, 150.890297, 37.722574, 75.445148 +839, -3.000000, 151.070357, 37.767589, 75.535178 +840, -3.000000, 151.250417, 37.812604, 75.625208 +841, -3.000000, 151.430477, 37.857619, 75.715238 +842, -3.000000, 151.610537, 37.902634, 75.805268 +843, -3.000000, 151.790597, 37.947649, 75.895298 +844, -3.000000, 151.970657, 37.992664, 75.985328 +845, -3.000000, 152.150717, 38.037679, 76.075358 +846, -3.000000, 152.330777, 38.082694, 76.165388 +847, -3.000000, 152.510837, 38.127709, 76.255418 +848, -3.000000, 152.690897, 38.172724, 76.345448 +849, -3.000000, 152.870957, 38.217739, 76.435478 +850, -3.000000, 153.051017, 38.262754, 76.525509 +851, -3.000000, 153.231077, 38.307769, 76.615539 +852, -3.000000, 153.411137, 38.352784, 76.705569 +853, -3.000000, 153.591197, 38.397799, 76.795599 +854, -3.000000, 153.771257, 38.442814, 76.885629 +855, -3.000000, 153.951317, 38.487829, 76.975659 +856, -3.000000, 154.131377, 38.532844, 77.065689 +857, -3.000000, 154.311437, 38.577859, 77.155719 +858, -3.000000, 154.491497, 38.622874, 77.245749 +859, -3.000000, 154.671557, 38.667889, 77.335779 +860, -3.000000, 154.851617, 38.712904, 77.425809 +861, -3.000000, 155.031677, 38.757919, 77.515839 +862, -3.000000, 155.211737, 38.802934, 77.605869 +863, -3.000000, 155.391797, 38.847949, 77.695899 +864, -3.000000, 155.571857, 38.892964, 77.785929 +865, -3.000000, 155.751917, 38.937979, 77.875959 +866, -3.000000, 155.931977, 38.982994, 77.965989 +867, -3.000000, 156.112037, 39.028009, 78.056019 +868, -3.000000, 156.292097, 39.073024, 78.146049 +869, -3.000000, 156.472157, 39.118039, 78.236079 +870, -3.000000, 156.652217, 39.163054, 78.326109 +871, -3.000000, 156.832277, 39.208069, 78.416139 +872, -3.000000, 157.012337, 39.253084, 78.506169 +873, -3.000000, 157.192397, 39.298099, 78.596199 +874, -3.000000, 157.372457, 39.343114, 78.686229 +875, -3.000000, 157.552518, 39.388129, 78.776259 +876, -3.000000, 157.732578, 39.433144, 78.866289 +877, -3.000000, 157.912638, 39.478159, 78.956319 +878, -3.000000, 158.092698, 39.523174, 79.046349 +879, -3.000000, 158.272758, 39.568189, 79.136379 +880, -3.000000, 158.452818, 39.613204, 79.226409 +881, -3.000000, 158.632878, 39.658219, 79.316439 +882, -3.000000, 158.812938, 39.703234, 79.406469 +883, -3.000000, 158.992998, 39.748249, 79.496499 +884, -3.000000, 159.173058, 39.793264, 79.586529 +885, -3.000000, 159.353118, 39.838279, 79.676559 +886, -3.000000, 159.533178, 39.883294, 79.766589 +887, -3.000000, 159.713238, 39.928309, 79.856619 +888, -3.000000, 159.893298, 39.973324, 79.946649 +889, -3.000000, 160.073358, 40.018339, 80.036679 +890, -3.000000, 160.253418, 40.063354, 80.126709 +891, -3.000000, 160.433478, 40.108369, 80.216739 +892, -3.000000, 160.613538, 40.153384, 80.306769 +893, -3.000000, 160.793598, 40.198399, 80.396799 +894, -3.000000, 160.973658, 40.243414, 80.486829 +895, -3.000000, 161.153718, 40.288429, 80.576859 +896, -3.000000, 161.333778, 40.333444, 80.666889 +897, -3.000000, 161.513838, 40.378459, 80.756919 +898, -3.000000, 161.693898, 40.423474, 80.846949 +899, -3.000000, 161.873958, 40.468489, 80.936979 +900, -3.000000, 162.054018, 40.513505, 81.027009 +901, -3.000000, 162.234078, 40.558520, 81.117039 +902, -3.000000, 162.414138, 40.603535, 81.207069 +903, -3.000000, 162.594198, 40.648550, 81.297099 +904, -3.000000, 162.774258, 40.693565, 81.387129 +905, -3.000000, 162.954318, 40.738580, 81.477159 +906, -3.000000, 163.134378, 40.783595, 81.567189 +907, -3.000000, 163.314438, 40.828610, 81.657219 +908, -3.000000, 163.494498, 40.873625, 81.747249 +909, -3.000000, 163.674558, 40.918640, 81.837279 +910, -3.000000, 163.854618, 40.963655, 81.927309 +911, -3.000000, 164.034678, 41.008670, 82.017339 +912, -3.000000, 164.214738, 41.053685, 82.107369 +913, -3.000000, 164.394798, 41.098700, 82.197399 +914, -3.000000, 164.574858, 41.143715, 82.287429 +915, -3.000000, 164.754918, 41.188730, 82.377459 +916, -3.000000, 164.934978, 41.233745, 82.467489 +917, -3.000000, 165.115038, 41.278760, 82.557519 +918, -3.000000, 165.295098, 41.323775, 82.647549 +919, -3.000000, 165.475158, 41.368790, 82.737579 +920, -3.000000, 165.655218, 41.413805, 82.827609 +921, -3.000000, 165.835278, 41.458820, 82.917639 +922, -3.000000, 166.015338, 41.503835, 83.007669 +923, -3.000000, 166.195398, 41.548850, 83.097699 +924, -3.000000, 166.375458, 41.593865, 83.187729 +925, -3.000000, 166.555519, 41.638880, 83.277759 +926, -3.000000, 166.735579, 41.683895, 83.367789 +927, -3.000000, 166.915639, 41.728910, 83.457819 +928, -3.000000, 167.095699, 41.773925, 83.547849 +929, -3.000000, 167.275759, 41.818940, 83.637879 +930, -3.000000, 167.455819, 41.863955, 83.727909 +931, -3.000000, 167.635879, 41.908970, 83.817939 +932, -3.000000, 167.815939, 41.953985, 83.907969 +933, -3.000000, 167.995999, 41.999000, 83.997999 +934, -3.000000, 168.176059, 42.044015, 84.088029 +935, -3.000000, 168.356119, 42.089030, 84.178059 +936, -3.000000, 168.536179, 42.134045, 84.268089 +937, -3.000000, 168.716239, 42.179060, 84.358119 +938, -3.000000, 168.896299, 42.224075, 84.448149 +939, -3.000000, 169.076359, 42.269090, 84.538179 +940, -3.000000, 169.256419, 42.314105, 84.628209 +941, -3.000000, 169.436479, 42.359120, 84.718239 +942, -3.000000, 169.616539, 42.404135, 84.808269 +943, -3.000000, 169.796599, 42.449150, 84.898299 +944, -3.000000, 169.976659, 42.494165, 84.988329 +945, -3.000000, 170.156719, 42.539180, 85.078359 +946, -3.000000, 170.336779, 42.584195, 85.168389 +947, -3.000000, 170.516839, 42.629210, 85.258419 +948, -3.000000, 170.696899, 42.674225, 85.348449 +949, -3.000000, 170.876959, 42.719240, 85.438479 +950, -3.000000, 171.057019, 42.764255, 85.528510 +951, -3.000000, 171.237079, 42.809270, 85.618540 +952, -3.000000, 171.417139, 42.854285, 85.708570 +953, -3.000000, 171.597199, 42.899300, 85.798600 +954, -3.000000, 171.777259, 42.944315, 85.888630 +955, -3.000000, 171.957319, 42.989330, 85.978660 +956, -3.000000, 172.137379, 43.034345, 86.068690 +957, -3.000000, 172.317439, 43.079360, 86.158720 +958, -3.000000, 172.497499, 43.124375, 86.248750 +959, -3.000000, 172.677559, 43.169390, 86.338780 +960, -3.000000, 172.857619, 43.214405, 86.428810 +961, -3.000000, 173.037679, 43.259420, 86.518840 +962, -3.000000, 173.217739, 43.304435, 86.608870 +963, -3.000000, 173.397799, 43.349450, 86.698900 +964, -3.000000, 173.577859, 43.394465, 86.788930 +965, -3.000000, 173.757919, 43.439480, 86.878960 +966, -3.000000, 173.937979, 43.484495, 86.968990 +967, -3.000000, 174.118039, 43.529510, 87.059020 +968, -3.000000, 174.298099, 43.574525, 87.149050 +969, -3.000000, 174.478159, 43.619540, 87.239080 +970, -3.000000, 174.658219, 43.664555, 87.329110 +971, -3.000000, 174.838279, 43.709570, 87.419140 +972, -3.000000, 175.018339, 43.754585, 87.509170 +973, -3.000000, 175.198399, 43.799600, 87.599200 +974, -3.000000, 175.378459, 43.844615, 87.689230 +975, -3.000000, 175.558520, 43.889630, 87.779260 +976, -3.000000, 175.738580, 43.934645, 87.869290 +977, -3.000000, 175.918640, 43.979660, 87.959320 +978, -3.000000, 176.098700, 44.024675, 88.049350 +979, -3.000000, 176.278760, 44.069690, 88.139380 +980, -3.000000, 176.458820, 44.114705, 88.229410 +981, -3.000000, 176.638880, 44.159720, 88.319440 +982, -3.000000, 176.818940, 44.204735, 88.409470 +983, -3.000000, 176.999000, 44.249750, 88.499500 +984, -3.000000, 177.179060, 44.294765, 88.589530 +985, -3.000000, 177.359120, 44.339780, 88.679560 +986, -3.000000, 177.539180, 44.384795, 88.769590 +987, -3.000000, 177.719240, 44.429810, 88.859620 +988, -3.000000, 177.899300, 44.474825, 88.949650 +989, -3.000000, 178.079360, 44.519840, 89.039680 +990, -3.000000, 178.259420, 44.564855, 89.129710 +991, -3.000000, 178.439480, 44.609870, 89.219740 +992, -3.000000, 178.619540, 44.654885, 89.309770 +993, -3.000000, 178.799600, 44.699900, 89.399800 +994, -3.000000, 178.979660, 44.744915, 89.489830 +995, -3.000000, 179.159720, 44.789930, 89.579860 +996, -3.000000, 179.339780, 44.834945, 89.669890 +997, -3.000000, 179.519840, 44.879960, 89.759920 +998, -3.000000, 179.699900, 44.924975, 89.849950 +999, -3.000000, 179.879960, 44.969990, 89.939980 +1000, -3.000000, 180.060020, 45.015005, 90.030010 +1001, -3.000000, 180.240080, 45.060020, 90.120040 +1002, -3.000000, 180.420140, 45.105035, 90.210070 +1003, -3.000000, 180.600200, 45.150050, 90.300100 +1004, -3.000000, 180.780260, 45.195065, 90.390130 +1005, -3.000000, 180.960320, 45.240080, 90.480160 +1006, -3.000000, 181.140380, 45.285095, 90.570190 +1007, -3.000000, 181.320440, 45.330110, 90.660220 +1008, -3.000000, 181.500500, 45.375125, 90.750250 +1009, -3.000000, 181.680560, 45.420140, 90.840280 +1010, -3.000000, 181.860620, 45.465155, 90.930310 +1011, -3.000000, 182.040680, 45.510170, 91.020340 +1012, -3.000000, 182.220740, 45.555185, 91.110370 +1013, -3.000000, 182.400800, 45.600200, 91.200400 +1014, -3.000000, 182.580860, 45.645215, 91.290430 +1015, -3.000000, 182.760920, 45.690230, 91.380460 +1016, -3.000000, 182.940980, 45.735245, 91.470490 +1017, -3.000000, 183.121040, 45.780260, 91.560520 +1018, -3.000000, 183.301100, 45.825275, 91.650550 +1019, -3.000000, 183.481160, 45.870290, 91.740580 +1020, -3.000000, 183.661220, 45.915305, 91.830610 +1021, -3.000000, 183.841280, 45.960320, 91.920640 +1022, -3.000000, 184.021340, 46.005335, 92.010670 +1023, -3.000000, 184.201400, 46.050350, 92.100700 +1024, -3.000000, 184.381460, 46.095365, 92.190730 +1025, -3.000000, 184.561521, 46.140380, 92.280760 +1026, -3.000000, 184.741581, 46.185395, 92.370790 +1027, -3.000000, 184.921641, 46.230410, 92.460820 +1028, -3.000000, 185.101701, 46.275425, 92.550850 +1029, -3.000000, 185.281761, 46.320440, 92.640880 +1030, -3.000000, 185.461821, 46.365455, 92.730910 +1031, -3.000000, 185.641881, 46.410470, 92.820940 +1032, -3.000000, 185.821941, 46.455485, 92.910970 +1033, -3.000000, 186.002001, 46.500500, 93.001000 +1034, -3.000000, 186.182061, 46.545515, 93.091030 +1035, -3.000000, 186.362121, 46.590530, 93.181060 +1036, -3.000000, 186.542181, 46.635545, 93.271090 +1037, -3.000000, 186.722241, 46.680560, 93.361120 +1038, -3.000000, 186.902301, 46.725575, 93.451150 +1039, -3.000000, 187.082361, 46.770590, 93.541180 +1040, -3.000000, 187.262421, 46.815605, 93.631210 +1041, -3.000000, 187.442481, 46.860620, 93.721240 +1042, -3.000000, 187.622541, 46.905635, 93.811270 +1043, -3.000000, 187.802601, 46.950650, 93.901300 +1044, -3.000000, 187.982661, 46.995665, 93.991330 +1045, -3.000000, 188.162721, 47.040680, 94.081360 +1046, -3.000000, 188.342781, 47.085695, 94.171390 +1047, -3.000000, 188.522841, 47.130710, 94.261420 +1048, -3.000000, 188.702901, 47.175725, 94.351450 +1049, -3.000000, 188.882961, 47.220740, 94.441480 +1050, -3.000000, 189.063021, 47.265755, 94.531511 +1051, -3.000000, 189.243081, 47.310770, 94.621541 +1052, -3.000000, 189.423141, 47.355785, 94.711571 +1053, -3.000000, 189.603201, 47.400800, 94.801601 +1054, -3.000000, 189.783261, 47.445815, 94.891631 +1055, -3.000000, 189.963321, 47.490830, 94.981661 +1056, -3.000000, 190.143381, 47.535845, 95.071691 +1057, -3.000000, 190.323441, 47.580860, 95.161721 +1058, -3.000000, 190.503501, 47.625875, 95.251751 +1059, -3.000000, 190.683561, 47.670890, 95.341781 +1060, -3.000000, 190.863621, 47.715905, 95.431811 +1061, -3.000000, 191.043681, 47.760920, 95.521841 +1062, -3.000000, 191.223741, 47.805935, 95.611871 +1063, -3.000000, 191.403801, 47.850950, 95.701901 +1064, -3.000000, 191.583861, 47.895965, 95.791931 +1065, -3.000000, 191.763921, 47.940980, 95.881961 +1066, -3.000000, 191.943981, 47.985995, 95.971991 +1067, -3.000000, 192.124041, 48.031010, 96.062021 +1068, -3.000000, 192.304101, 48.076025, 96.152051 +1069, -3.000000, 192.484161, 48.121040, 96.242081 +1070, -3.000000, 192.664221, 48.166055, 96.332111 +1071, -3.000000, 192.844281, 48.211070, 96.422141 +1072, -3.000000, 193.024341, 48.256085, 96.512171 +1073, -3.000000, 193.204401, 48.301100, 96.602201 +1074, -3.000000, 193.384461, 48.346115, 96.692231 +1075, -3.000000, 193.564522, 48.391130, 96.782261 +1076, -3.000000, 193.744582, 48.436145, 96.872291 +1077, -3.000000, 193.924642, 48.481160, 96.962321 +1078, -3.000000, 194.104702, 48.526175, 97.052351 +1079, -3.000000, 194.284762, 48.571190, 97.142381 +1080, -3.000000, 194.464822, 48.616205, 97.232411 +1081, -3.000000, 194.644882, 48.661220, 97.322441 +1082, -3.000000, 194.824942, 48.706235, 97.412471 +1083, -3.000000, 195.005002, 48.751250, 97.502501 +1084, -3.000000, 195.185062, 48.796265, 97.592531 +1085, -3.000000, 195.365122, 48.841280, 97.682561 +1086, -3.000000, 195.545182, 48.886295, 97.772591 +1087, -3.000000, 195.725242, 48.931310, 97.862621 +1088, -3.000000, 195.905302, 48.976325, 97.952651 +1089, -3.000000, 196.085362, 49.021340, 98.042681 +1090, -3.000000, 196.265422, 49.066355, 98.132711 +1091, -3.000000, 196.445482, 49.111370, 98.222741 +1092, -3.000000, 196.625542, 49.156385, 98.312771 +1093, -3.000000, 196.805602, 49.201400, 98.402801 +1094, -3.000000, 196.985662, 49.246415, 98.492831 +1095, -3.000000, 197.165722, 49.291430, 98.582861 +1096, -3.000000, 197.345782, 49.336445, 98.672891 +1097, -3.000000, 197.525842, 49.381460, 98.762921 +1098, -3.000000, 197.705902, 49.426475, 98.852951 +1099, -3.000000, 197.885962, 49.471490, 98.942981 +1100, -3.000000, 198.066022, 49.516506, 99.033011 +1101, -3.000000, 198.246082, 49.561521, 99.123041 +1102, -3.000000, 198.426142, 49.606536, 99.213071 +1103, -3.000000, 198.606202, 49.651551, 99.303101 +1104, -3.000000, 198.786262, 49.696566, 99.393131 +1105, -3.000000, 198.966322, 49.741581, 99.483161 +1106, -3.000000, 199.146382, 49.786596, 99.573191 +1107, -3.000000, 199.326442, 49.831611, 99.663221 +1108, -3.000000, 199.506502, 49.876626, 99.753251 +1109, -3.000000, 199.686562, 49.921641, 99.843281 +1110, -3.000000, 199.866622, 49.966656, 99.933311 +1111, -3.000000, 200.046682, 50.011671, 100.023341 +1112, -3.000000, 200.226742, 50.056686, 100.113371 +1113, -3.000000, 200.406802, 50.101701, 100.203401 +1114, -3.000000, 200.586862, 50.146716, 100.293431 +1115, -3.000000, 200.766922, 50.191731, 100.383461 +1116, -3.000000, 200.946982, 50.236746, 100.473491 +1117, -3.000000, 201.127042, 50.281761, 100.563521 +1118, -3.000000, 201.307102, 50.326776, 100.653551 +1119, -3.000000, 201.487162, 50.371791, 100.743581 +1120, -3.000000, 201.667222, 50.416806, 100.833611 +1121, -3.000000, 201.847282, 50.461821, 100.923641 +1122, -3.000000, 202.027342, 50.506836, 101.013671 +1123, -3.000000, 202.207402, 50.551851, 101.103701 +1124, -3.000000, 202.387462, 50.596866, 101.193731 +1125, -3.000000, 202.567523, 50.641881, 101.283761 +1126, -3.000000, 202.747583, 50.686896, 101.373791 +1127, -3.000000, 202.927643, 50.731911, 101.463821 +1128, -3.000000, 203.107703, 50.776926, 101.553851 +1129, -3.000000, 203.287763, 50.821941, 101.643881 +1130, -3.000000, 203.467823, 50.866956, 101.733911 +1131, -3.000000, 203.647883, 50.911971, 101.823941 +1132, -3.000000, 203.827943, 50.956986, 101.913971 +1133, -3.000000, 204.008003, 51.002001, 102.004001 +1134, -3.000000, 204.188063, 51.047016, 102.094031 +1135, -3.000000, 204.368123, 51.092031, 102.184061 +1136, -3.000000, 204.548183, 51.137046, 102.274091 +1137, -3.000000, 204.728243, 51.182061, 102.364121 +1138, -3.000000, 204.908303, 51.227076, 102.454151 +1139, -3.000000, 205.088363, 51.272091, 102.544181 +1140, -3.000000, 205.268423, 51.317106, 102.634211 +1141, -3.000000, 205.448483, 51.362121, 102.724241 +1142, -3.000000, 205.628543, 51.407136, 102.814271 +1143, -3.000000, 205.808603, 51.452151, 102.904301 +1144, -3.000000, 205.988663, 51.497166, 102.994331 +1145, -3.000000, 206.168723, 51.542181, 103.084361 +1146, -3.000000, 206.348783, 51.587196, 103.174391 +1147, -3.000000, 206.528843, 51.632211, 103.264421 +1148, -3.000000, 206.708903, 51.677226, 103.354451 +1149, -3.000000, 206.888963, 51.722241, 103.444481 +1150, -3.000000, 207.069023, 51.767256, 103.534512 +1151, -3.000000, 207.249083, 51.812271, 103.624542 +1152, -3.000000, 207.429143, 51.857286, 103.714572 +1153, -3.000000, 207.609203, 51.902301, 103.804602 +1154, -3.000000, 207.789263, 51.947316, 103.894632 +1155, -3.000000, 207.969323, 51.992331, 103.984662 +1156, -3.000000, 208.149383, 52.037346, 104.074692 +1157, -3.000000, 208.329443, 52.082361, 104.164722 +1158, -3.000000, 208.509503, 52.127376, 104.254752 +1159, -3.000000, 208.689563, 52.172391, 104.344782 +1160, -3.000000, 208.869623, 52.217406, 104.434812 +1161, -3.000000, 209.049683, 52.262421, 104.524842 +1162, -3.000000, 209.229743, 52.307436, 104.614872 +1163, -3.000000, 209.409803, 52.352451, 104.704902 +1164, -3.000000, 209.589863, 52.397466, 104.794932 +1165, -3.000000, 209.769923, 52.442481, 104.884962 +1166, -3.000000, 209.949983, 52.487496, 104.974992 +1167, -3.000000, 210.130043, 52.532511, 105.065022 +1168, -3.000000, 210.310103, 52.577526, 105.155052 +1169, -3.000000, 210.490163, 52.622541, 105.245082 +1170, -3.000000, 210.670223, 52.667556, 105.335112 +1171, -3.000000, 210.850283, 52.712571, 105.425142 +1172, -3.000000, 211.030343, 52.757586, 105.515172 +1173, -3.000000, 211.210403, 52.802601, 105.605202 +1174, -3.000000, 211.390463, 52.847616, 105.695232 +1175, -3.000000, 211.570524, 52.892631, 105.785262 +1176, -3.000000, 211.750584, 52.937646, 105.875292 +1177, -3.000000, 211.930644, 52.982661, 105.965322 +1178, -3.000000, 212.110704, 53.027676, 106.055352 +1179, -3.000000, 212.290764, 53.072691, 106.145382 +1180, -3.000000, 212.470824, 53.117706, 106.235412 +1181, -3.000000, 212.650884, 53.162721, 106.325442 +1182, -3.000000, 212.830944, 53.207736, 106.415472 +1183, -3.000000, 213.011004, 53.252751, 106.505502 +1184, -3.000000, 213.191064, 53.297766, 106.595532 +1185, -3.000000, 213.371124, 53.342781, 106.685562 +1186, -3.000000, 213.551184, 53.387796, 106.775592 +1187, -3.000000, 213.731244, 53.432811, 106.865622 +1188, -3.000000, 213.911304, 53.477826, 106.955652 +1189, -3.000000, 214.091364, 53.522841, 107.045682 +1190, -3.000000, 214.271424, 53.567856, 107.135712 +1191, -3.000000, 214.451484, 53.612871, 107.225742 +1192, -3.000000, 214.631544, 53.657886, 107.315772 +1193, -3.000000, 214.811604, 53.702901, 107.405802 +1194, -3.000000, 214.991664, 53.747916, 107.495832 +1195, -3.000000, 215.171724, 53.792931, 107.585862 +1196, -3.000000, 215.351784, 53.837946, 107.675892 +1197, -3.000000, 215.531844, 53.882961, 107.765922 +1198, -3.000000, 215.711904, 53.927976, 107.855952 +1199, -3.000000, 215.891964, 53.972991, 107.945982 +1200, -3.000000, 216.072024, 54.018006, 108.036012 +1201, -3.000000, 216.252084, 54.063021, 108.126042 +1202, -3.000000, 216.432144, 54.108036, 108.216072 +1203, -3.000000, 216.612204, 54.153051, 108.306102 +1204, -3.000000, 216.792264, 54.198066, 108.396132 +1205, -3.000000, 216.972324, 54.243081, 108.486162 +1206, -3.000000, 217.152384, 54.288096, 108.576192 +1207, -3.000000, 217.332444, 54.333111, 108.666222 +1208, -3.000000, 217.512504, 54.378126, 108.756252 +1209, -3.000000, 217.692564, 54.423141, 108.846282 +1210, -3.000000, 217.872624, 54.468156, 108.936312 +1211, -3.000000, 218.052684, 54.513171, 109.026342 +1212, -3.000000, 218.232744, 54.558186, 109.116372 +1213, -3.000000, 218.412804, 54.603201, 109.206402 +1214, -3.000000, 218.592864, 54.648216, 109.296432 +1215, -3.000000, 218.772924, 54.693231, 109.386462 +1216, -3.000000, 218.952984, 54.738246, 109.476492 +1217, -3.000000, 219.133044, 54.783261, 109.566522 +1218, -3.000000, 219.313104, 54.828276, 109.656552 +1219, -3.000000, 219.493164, 54.873291, 109.746582 +1220, -3.000000, 219.673224, 54.918306, 109.836612 +1221, -3.000000, 219.853284, 54.963321, 109.926642 +1222, -3.000000, 220.033344, 55.008336, 110.016672 +1223, -3.000000, 220.213404, 55.053351, 110.106702 +1224, -3.000000, 220.393464, 55.098366, 110.196732 +1225, -3.000000, 220.573525, 55.143381, 110.286762 +1226, -3.000000, 220.753585, 55.188396, 110.376792 +1227, -3.000000, 220.933645, 55.233411, 110.466822 +1228, -3.000000, 221.113705, 55.278426, 110.556852 +1229, -3.000000, 221.293765, 55.323441, 110.646882 +1230, -3.000000, 221.473825, 55.368456, 110.736912 +1231, -3.000000, 221.653885, 55.413471, 110.826942 +1232, -3.000000, 221.833945, 55.458486, 110.916972 +1233, -3.000000, 222.014005, 55.503501, 111.007002 +1234, -3.000000, 222.194065, 55.548516, 111.097032 +1235, -3.000000, 222.374125, 55.593531, 111.187062 +1236, -3.000000, 222.554185, 55.638546, 111.277092 +1237, -3.000000, 222.734245, 55.683561, 111.367122 +1238, -3.000000, 222.914305, 55.728576, 111.457152 +1239, -3.000000, 223.094365, 55.773591, 111.547182 +1240, -3.000000, 223.274425, 55.818606, 111.637212 +1241, -3.000000, 223.454485, 55.863621, 111.727242 +1242, -3.000000, 223.634545, 55.908636, 111.817272 +1243, -3.000000, 223.814605, 55.953651, 111.907302 +1244, -3.000000, 223.994665, 55.998666, 111.997332 +1245, -3.000000, 224.174725, 56.043681, 112.087362 +1246, -3.000000, 224.354785, 56.088696, 112.177392 +1247, -3.000000, 224.534845, 56.133711, 112.267422 +1248, -3.000000, 224.714905, 56.178726, 112.357452 +1249, -3.000000, 224.894965, 56.223741, 112.447482 +1250, -3.000000, 225.075025, 56.268756, 112.537513 +1251, -3.000000, 225.255085, 56.313771, 112.627543 +1252, -3.000000, 225.435145, 56.358786, 112.717573 +1253, -3.000000, 225.615205, 56.403801, 112.807603 +1254, -3.000000, 225.795265, 56.448816, 112.897633 +1255, -3.000000, 225.975325, 56.493831, 112.987663 +1256, -3.000000, 226.155385, 56.538846, 113.077693 +1257, -3.000000, 226.335445, 56.583861, 113.167723 +1258, -3.000000, 226.515505, 56.628876, 113.257753 +1259, -3.000000, 226.695565, 56.673891, 113.347783 +1260, -3.000000, 226.875625, 56.718906, 113.437813 +1261, -3.000000, 227.055685, 56.763921, 113.527843 +1262, -3.000000, 227.235745, 56.808936, 113.617873 +1263, -3.000000, 227.415805, 56.853951, 113.707903 +1264, -3.000000, 227.595865, 56.898966, 113.797933 +1265, -3.000000, 227.775925, 56.943981, 113.887963 +1266, -3.000000, 227.955985, 56.988996, 113.977993 +1267, -3.000000, 228.136045, 57.034011, 114.068023 +1268, -3.000000, 228.316105, 57.079026, 114.158053 +1269, -3.000000, 228.496165, 57.124041, 114.248083 +1270, -3.000000, 228.676225, 57.169056, 114.338113 +1271, -3.000000, 228.856285, 57.214071, 114.428143 +1272, -3.000000, 229.036345, 57.259086, 114.518173 +1273, -3.000000, 229.216405, 57.304101, 114.608203 +1274, -3.000000, 229.396465, 57.349116, 114.698233 +1275, -3.000000, 229.576526, 57.394131, 114.788263 +1276, -3.000000, 229.756586, 57.439146, 114.878293 +1277, -3.000000, 229.936646, 57.484161, 114.968323 +1278, -3.000000, 230.116706, 57.529176, 115.058353 +1279, -3.000000, 230.296766, 57.574191, 115.148383 +1280, -3.000000, 230.476826, 57.619206, 115.238413 +1281, -3.000000, 230.656886, 57.664221, 115.328443 +1282, -3.000000, 230.836946, 57.709236, 115.418473 +1283, -3.000000, 231.017006, 57.754251, 115.508503 +1284, -3.000000, 231.197066, 57.799266, 115.598533 +1285, -3.000000, 231.377126, 57.844281, 115.688563 +1286, -3.000000, 231.557186, 57.889296, 115.778593 +1287, -3.000000, 231.737246, 57.934311, 115.868623 +1288, -3.000000, 231.917306, 57.979326, 115.958653 +1289, -3.000000, 232.097366, 58.024341, 116.048683 +1290, -3.000000, 232.277426, 58.069356, 116.138713 +1291, -3.000000, 232.457486, 58.114371, 116.228743 +1292, -3.000000, 232.637546, 58.159386, 116.318773 +1293, -3.000000, 232.817606, 58.204401, 116.408803 +1294, -3.000000, 232.997666, 58.249416, 116.498833 +1295, -3.000000, 233.177726, 58.294431, 116.588863 +1296, -3.000000, 233.357786, 58.339446, 116.678893 +1297, -3.000000, 233.537846, 58.384461, 116.768923 +1298, -3.000000, 233.717906, 58.429476, 116.858953 +1299, -3.000000, 233.897966, 58.474491, 116.948983 +1300, -3.000000, 234.078026, 58.519507, 117.039013 +1301, -3.000000, 234.258086, 58.564522, 117.129043 +1302, -3.000000, 234.438146, 58.609537, 117.219073 +1303, -3.000000, 234.618206, 58.654552, 117.309103 +1304, -3.000000, 234.798266, 58.699567, 117.399133 +1305, -3.000000, 234.978326, 58.744582, 117.489163 +1306, -3.000000, 235.158386, 58.789597, 117.579193 +1307, -3.000000, 235.338446, 58.834612, 117.669223 +1308, -3.000000, 235.518506, 58.879627, 117.759253 +1309, -3.000000, 235.698566, 58.924642, 117.849283 +1310, -3.000000, 235.878626, 58.969657, 117.939313 +1311, -3.000000, 236.058686, 59.014672, 118.029343 +1312, -3.000000, 236.238746, 59.059687, 118.119373 +1313, -3.000000, 236.418806, 59.104702, 118.209403 +1314, -3.000000, 236.598866, 59.149717, 118.299433 +1315, -3.000000, 236.778926, 59.194732, 118.389463 +1316, -3.000000, 236.958986, 59.239747, 118.479493 +1317, -3.000000, 237.139046, 59.284762, 118.569523 +1318, -3.000000, 237.319106, 59.329777, 118.659553 +1319, -3.000000, 237.499166, 59.374792, 118.749583 +1320, -3.000000, 237.679226, 59.419807, 118.839613 +1321, -3.000000, 237.859286, 59.464822, 118.929643 +1322, -3.000000, 238.039346, 59.509837, 119.019673 +1323, -3.000000, 238.219406, 59.554852, 119.109703 +1324, -3.000000, 238.399466, 59.599867, 119.199733 +1325, -3.000000, 238.579527, 59.644882, 119.289763 +1326, -3.000000, 238.759587, 59.689897, 119.379793 +1327, -3.000000, 238.939647, 59.734912, 119.469823 +1328, -3.000000, 239.119707, 59.779927, 119.559853 +1329, -3.000000, 239.299767, 59.824942, 119.649883 +1330, -3.000000, 239.479827, 59.869957, 119.739913 +1331, -3.000000, 239.659887, 59.914972, 119.829943 +1332, -3.000000, 239.839947, 59.959987, 119.919973 +1333, -3.000000, 240.020007, 60.005002, 120.010003 +1334, -3.000000, 240.200067, 60.050017, 120.100033 +1335, -3.000000, 240.380127, 60.095032, 120.190063 +1336, -3.000000, 240.560187, 60.140047, 120.280093 +1337, -3.000000, 240.740247, 60.185062, 120.370123 +1338, -3.000000, 240.920307, 60.230077, 120.460153 +1339, -3.000000, 241.100367, 60.275092, 120.550183 +1340, -3.000000, 241.280427, 60.320107, 120.640213 +1341, -3.000000, 241.460487, 60.365122, 120.730243 +1342, -3.000000, 241.640547, 60.410137, 120.820273 +1343, -3.000000, 241.820607, 60.455152, 120.910303 +1344, -3.000000, 242.000667, 60.500167, 121.000333 +1345, -3.000000, 242.180727, 60.545182, 121.090363 +1346, -3.000000, 242.360787, 60.590197, 121.180393 +1347, -3.000000, 242.540847, 60.635212, 121.270423 +1348, -3.000000, 242.720907, 60.680227, 121.360453 +1349, -3.000000, 242.900967, 60.725242, 121.450483 +1350, -3.000000, 243.081027, 60.770257, 121.540514 +1351, -3.000000, 243.261087, 60.815272, 121.630544 +1352, -3.000000, 243.441147, 60.860287, 121.720574 +1353, -3.000000, 243.621207, 60.905302, 121.810604 +1354, -3.000000, 243.801267, 60.950317, 121.900634 +1355, -3.000000, 243.981327, 60.995332, 121.990664 +1356, -3.000000, 244.161387, 61.040347, 122.080694 +1357, -3.000000, 244.341447, 61.085362, 122.170724 +1358, -3.000000, 244.521507, 61.130377, 122.260754 +1359, -3.000000, 244.701567, 61.175392, 122.350784 +1360, -3.000000, 244.881627, 61.220407, 122.440814 +1361, -3.000000, 245.061687, 61.265422, 122.530844 +1362, -3.000000, 245.241747, 61.310437, 122.620874 +1363, -3.000000, 245.421807, 61.355452, 122.710904 +1364, -3.000000, 245.601867, 61.400467, 122.800934 +1365, -3.000000, 245.781927, 61.445482, 122.890964 +1366, -3.000000, 245.961987, 61.490497, 122.980994 +1367, -3.000000, 246.142047, 61.535512, 123.071024 +1368, -3.000000, 246.322107, 61.580527, 123.161054 +1369, -3.000000, 246.502167, 61.625542, 123.251084 +1370, -3.000000, 246.682227, 61.670557, 123.341114 +1371, -3.000000, 246.862287, 61.715572, 123.431144 +1372, -3.000000, 247.042347, 61.760587, 123.521174 +1373, -3.000000, 247.222407, 61.805602, 123.611204 +1374, -3.000000, 247.402467, 61.850617, 123.701234 +1375, -3.000000, 247.582528, 61.895632, 123.791264 +1376, -3.000000, 247.762588, 61.940647, 123.881294 +1377, -3.000000, 247.942648, 61.985662, 123.971324 +1378, -3.000000, 248.122708, 62.030677, 124.061354 +1379, -3.000000, 248.302768, 62.075692, 124.151384 +1380, -3.000000, 248.482828, 62.120707, 124.241414 +1381, -3.000000, 248.662888, 62.165722, 124.331444 +1382, -3.000000, 248.842948, 62.210737, 124.421474 +1383, -3.000000, 249.023008, 62.255752, 124.511504 +1384, -3.000000, 249.203068, 62.300767, 124.601534 +1385, -3.000000, 249.383128, 62.345782, 124.691564 +1386, -3.000000, 249.563188, 62.390797, 124.781594 +1387, -3.000000, 249.743248, 62.435812, 124.871624 +1388, -3.000000, 249.923308, 62.480827, 124.961654 +1389, -3.000000, 250.103368, 62.525842, 125.051684 +1390, -3.000000, 250.283428, 62.570857, 125.141714 +1391, -3.000000, 250.463488, 62.615872, 125.231744 +1392, -3.000000, 250.643548, 62.660887, 125.321774 +1393, -3.000000, 250.823608, 62.705902, 125.411804 +1394, -3.000000, 251.003668, 62.750917, 125.501834 +1395, -3.000000, 251.183728, 62.795932, 125.591864 +1396, -3.000000, 251.363788, 62.840947, 125.681894 +1397, -3.000000, 251.543848, 62.885962, 125.771924 +1398, -3.000000, 251.723908, 62.930977, 125.861954 +1399, -3.000000, 251.903968, 62.975992, 125.951984 +1400, -3.000000, 252.084028, 63.021007, 126.042014 +1401, -3.000000, 252.264088, 63.066022, 126.132044 +1402, -3.000000, 252.444148, 63.111037, 126.222074 +1403, -3.000000, 252.624208, 63.156052, 126.312104 +1404, -3.000000, 252.804268, 63.201067, 126.402134 +1405, -3.000000, 252.984328, 63.246082, 126.492164 +1406, -3.000000, 253.164388, 63.291097, 126.582194 +1407, -3.000000, 253.344448, 63.336112, 126.672224 +1408, -3.000000, 253.524508, 63.381127, 126.762254 +1409, -3.000000, 253.704568, 63.426142, 126.852284 +1410, -3.000000, 253.884628, 63.471157, 126.942314 +1411, -3.000000, 254.064688, 63.516172, 127.032344 +1412, -3.000000, 254.244748, 63.561187, 127.122374 +1413, -3.000000, 254.424808, 63.606202, 127.212404 +1414, -3.000000, 254.604868, 63.651217, 127.302434 +1415, -3.000000, 254.784928, 63.696232, 127.392464 +1416, -3.000000, 254.964988, 63.741247, 127.482494 +1417, -3.000000, 255.145048, 63.786262, 127.572524 +1418, -3.000000, 255.325108, 63.831277, 127.662554 +1419, -3.000000, 255.505168, 63.876292, 127.752584 +1420, -3.000000, 255.685228, 63.921307, 127.842614 +1421, -3.000000, 255.865288, 63.966322, 127.932644 +1422, -3.000000, 256.045348, 64.011337, 128.022674 +1423, -3.000000, 256.225408, 64.056352, 128.112704 +1424, -3.000000, 256.405468, 64.101367, 128.202734 +1425, -3.000000, 256.585529, 64.146382, 128.292764 +1426, -3.000000, 256.765589, 64.191397, 128.382794 +1427, -3.000000, 256.945649, 64.236412, 128.472824 +1428, -3.000000, 257.125709, 64.281427, 128.562854 +1429, -3.000000, 257.305769, 64.326442, 128.652884 +1430, -3.000000, 257.485829, 64.371457, 128.742914 +1431, -3.000000, 257.665889, 64.416472, 128.832944 +1432, -3.000000, 257.845949, 64.461487, 128.922974 +1433, -3.000000, 258.026009, 64.506502, 129.013004 +1434, -3.000000, 258.206069, 64.551517, 129.103034 +1435, -3.000000, 258.386129, 64.596532, 129.193064 +1436, -3.000000, 258.566189, 64.641547, 129.283094 +1437, -3.000000, 258.746249, 64.686562, 129.373124 +1438, -3.000000, 258.926309, 64.731577, 129.463154 +1439, -3.000000, 259.106369, 64.776592, 129.553184 +1440, -3.000000, 259.286429, 64.821607, 129.643214 +1441, -3.000000, 259.466489, 64.866622, 129.733244 +1442, -3.000000, 259.646549, 64.911637, 129.823274 +1443, -3.000000, 259.826609, 64.956652, 129.913304 +1444, -3.000000, 260.006669, 65.001667, 130.003334 +1445, -3.000000, 260.186729, 65.046682, 130.093364 +1446, -3.000000, 260.366789, 65.091697, 130.183394 +1447, -3.000000, 260.546849, 65.136712, 130.273424 +1448, -3.000000, 260.726909, 65.181727, 130.363454 +1449, -3.000000, 260.906969, 65.226742, 130.453484 +1450, -3.000000, 261.087029, 65.271757, 130.543515 +1451, -3.000000, 261.267089, 65.316772, 130.633545 +1452, -3.000000, 261.447149, 65.361787, 130.723575 +1453, -3.000000, 261.627209, 65.406802, 130.813605 +1454, -3.000000, 261.807269, 65.451817, 130.903635 +1455, -3.000000, 261.987329, 65.496832, 130.993665 +1456, -3.000000, 262.167389, 65.541847, 131.083695 +1457, -3.000000, 262.347449, 65.586862, 131.173725 +1458, -3.000000, 262.527509, 65.631877, 131.263755 +1459, -3.000000, 262.707569, 65.676892, 131.353785 +1460, -3.000000, 262.887629, 65.721907, 131.443815 +1461, -3.000000, 263.067689, 65.766922, 131.533845 +1462, -3.000000, 263.247749, 65.811937, 131.623875 +1463, -3.000000, 263.427809, 65.856952, 131.713905 +1464, -3.000000, 263.607869, 65.901967, 131.803935 +1465, -3.000000, 263.787929, 65.946982, 131.893965 +1466, -3.000000, 263.967989, 65.991997, 131.983995 +1467, -3.000000, 264.148049, 66.037012, 132.074025 +1468, -3.000000, 264.328109, 66.082027, 132.164055 +1469, -3.000000, 264.508169, 66.127042, 132.254085 +1470, -3.000000, 264.688229, 66.172057, 132.344115 +1471, -3.000000, 264.868289, 66.217072, 132.434145 +1472, -3.000000, 265.048349, 66.262087, 132.524175 +1473, -3.000000, 265.228409, 66.307102, 132.614205 +1474, -3.000000, 265.408469, 66.352117, 132.704235 +1475, -3.000000, 265.588530, 66.397132, 132.794265 +1476, -3.000000, 265.768590, 66.442147, 132.884295 +1477, -3.000000, 265.948650, 66.487162, 132.974325 +1478, -3.000000, 266.128710, 66.532177, 133.064355 +1479, -3.000000, 266.308770, 66.577192, 133.154385 +1480, -3.000000, 266.488830, 66.622207, 133.244415 +1481, -3.000000, 266.668890, 66.667222, 133.334445 +1482, -3.000000, 266.848950, 66.712237, 133.424475 +1483, -3.000000, 267.029010, 66.757252, 133.514505 +1484, -3.000000, 267.209070, 66.802267, 133.604535 +1485, -3.000000, 267.389130, 66.847282, 133.694565 +1486, -3.000000, 267.569190, 66.892297, 133.784595 +1487, -3.000000, 267.749250, 66.937312, 133.874625 +1488, -3.000000, 267.929310, 66.982327, 133.964655 +1489, -3.000000, 268.109370, 67.027342, 134.054685 +1490, -3.000000, 268.289430, 67.072357, 134.144715 +1491, -3.000000, 268.469490, 67.117372, 134.234745 +1492, -3.000000, 268.649550, 67.162387, 134.324775 +1493, -3.000000, 268.829610, 67.207402, 134.414805 +1494, -3.000000, 269.009670, 67.252417, 134.504835 +1495, -3.000000, 269.189730, 67.297432, 134.594865 +1496, -3.000000, 269.369790, 67.342447, 134.684895 +1497, -3.000000, 269.549850, 67.387462, 134.774925 +1498, -3.000000, 269.729910, 67.432477, 134.864955 +1499, -3.000000, 269.909970, 67.477492, 134.954985 +1500, -3.000000, 270.090030, 67.522508, 135.045015 +1501, -3.000000, 270.270090, 67.567523, 135.135045 +1502, -3.000000, 270.450150, 67.612538, 135.225075 +1503, -3.000000, 270.630210, 67.657553, 135.315105 +1504, -3.000000, 270.810270, 67.702568, 135.405135 +1505, -3.000000, 270.990330, 67.747583, 135.495165 +1506, -3.000000, 271.170390, 67.792598, 135.585195 +1507, -3.000000, 271.350450, 67.837613, 135.675225 +1508, -3.000000, 271.530510, 67.882628, 135.765255 +1509, -3.000000, 271.710570, 67.927643, 135.855285 +1510, -3.000000, 271.890630, 67.972658, 135.945315 +1511, -3.000000, 272.070690, 68.017673, 136.035345 +1512, -3.000000, 272.250750, 68.062688, 136.125375 +1513, -3.000000, 272.430810, 68.107703, 136.215405 +1514, -3.000000, 272.610870, 68.152718, 136.305435 +1515, -3.000000, 272.790930, 68.197733, 136.395465 +1516, -3.000000, 272.970990, 68.242748, 136.485495 +1517, -3.000000, 273.151050, 68.287763, 136.575525 +1518, -3.000000, 273.331110, 68.332778, 136.665555 +1519, -3.000000, 273.511170, 68.377793, 136.755585 +1520, -3.000000, 273.691230, 68.422808, 136.845615 +1521, -3.000000, 273.871290, 68.467823, 136.935645 +1522, -3.000000, 274.051350, 68.512838, 137.025675 +1523, -3.000000, 274.231410, 68.557853, 137.115705 +1524, -3.000000, 274.411470, 68.602868, 137.205735 +1525, -3.000000, 274.591531, 68.647883, 137.295765 +1526, -3.000000, 274.771591, 68.692898, 137.385795 +1527, -3.000000, 274.951651, 68.737913, 137.475825 +1528, -3.000000, 275.131711, 68.782928, 137.565855 +1529, -3.000000, 275.311771, 68.827943, 137.655885 +1530, -3.000000, 275.491831, 68.872958, 137.745915 +1531, -3.000000, 275.671891, 68.917973, 137.835945 +1532, -3.000000, 275.851951, 68.962988, 137.925975 +1533, -3.000000, 276.032011, 69.008003, 138.016005 +1534, -3.000000, 276.212071, 69.053018, 138.106035 +1535, -3.000000, 276.392131, 69.098033, 138.196065 +1536, -3.000000, 276.572191, 69.143048, 138.286095 +1537, -3.000000, 276.752251, 69.188063, 138.376125 +1538, -3.000000, 276.932311, 69.233078, 138.466155 +1539, -3.000000, 277.112371, 69.278093, 138.556185 +1540, -3.000000, 277.292431, 69.323108, 138.646215 +1541, -3.000000, 277.472491, 69.368123, 138.736245 +1542, -3.000000, 277.652551, 69.413138, 138.826275 +1543, -3.000000, 277.832611, 69.458153, 138.916305 +1544, -3.000000, 278.012671, 69.503168, 139.006335 +1545, -3.000000, 278.192731, 69.548183, 139.096365 +1546, -3.000000, 278.372791, 69.593198, 139.186395 +1547, -3.000000, 278.552851, 69.638213, 139.276425 +1548, -3.000000, 278.732911, 69.683228, 139.366455 +1549, -3.000000, 278.912971, 69.728243, 139.456485 +1550, -3.000000, 279.093031, 69.773258, 139.546516 +1551, -3.000000, 279.273091, 69.818273, 139.636546 +1552, -3.000000, 279.453151, 69.863288, 139.726576 +1553, -3.000000, 279.633211, 69.908303, 139.816606 +1554, -3.000000, 279.813271, 69.953318, 139.906636 +1555, -3.000000, 279.993331, 69.998333, 139.996666 +1556, -3.000000, 280.173391, 70.043348, 140.086696 +1557, -3.000000, 280.353451, 70.088363, 140.176726 +1558, -3.000000, 280.533511, 70.133378, 140.266756 +1559, -3.000000, 280.713571, 70.178393, 140.356786 +1560, -3.000000, 280.893631, 70.223408, 140.446816 +1561, -3.000000, 281.073691, 70.268423, 140.536846 +1562, -3.000000, 281.253751, 70.313438, 140.626876 +1563, -3.000000, 281.433811, 70.358453, 140.716906 +1564, -3.000000, 281.613871, 70.403468, 140.806936 +1565, -3.000000, 281.793931, 70.448483, 140.896966 +1566, -3.000000, 281.973991, 70.493498, 140.986996 +1567, -3.000000, 282.154051, 70.538513, 141.077026 +1568, -3.000000, 282.334111, 70.583528, 141.167056 +1569, -3.000000, 282.514171, 70.628543, 141.257086 +1570, -3.000000, 282.694231, 70.673558, 141.347116 +1571, -3.000000, 282.874291, 70.718573, 141.437146 +1572, -3.000000, 283.054351, 70.763588, 141.527176 +1573, -3.000000, 283.234411, 70.808603, 141.617206 +1574, -3.000000, 283.414471, 70.853618, 141.707236 +1575, -3.000000, 283.594532, 70.898633, 141.797266 +1576, -3.000000, 283.774592, 70.943648, 141.887296 +1577, -3.000000, 283.954652, 70.988663, 141.977326 +1578, -3.000000, 284.134712, 71.033678, 142.067356 +1579, -3.000000, 284.314772, 71.078693, 142.157386 +1580, -3.000000, 284.494832, 71.123708, 142.247416 +1581, -3.000000, 284.674892, 71.168723, 142.337446 +1582, -3.000000, 284.854952, 71.213738, 142.427476 +1583, -3.000000, 285.035012, 71.258753, 142.517506 +1584, -3.000000, 285.215072, 71.303768, 142.607536 +1585, -3.000000, 285.395132, 71.348783, 142.697566 +1586, -3.000000, 285.575192, 71.393798, 142.787596 +1587, -3.000000, 285.755252, 71.438813, 142.877626 +1588, -3.000000, 285.935312, 71.483828, 142.967656 +1589, -3.000000, 286.115372, 71.528843, 143.057686 +1590, -3.000000, 286.295432, 71.573858, 143.147716 +1591, -3.000000, 286.475492, 71.618873, 143.237746 +1592, -3.000000, 286.655552, 71.663888, 143.327776 +1593, -3.000000, 286.835612, 71.708903, 143.417806 +1594, -3.000000, 287.015672, 71.753918, 143.507836 +1595, -3.000000, 287.195732, 71.798933, 143.597866 +1596, -3.000000, 287.375792, 71.843948, 143.687896 +1597, -3.000000, 287.555852, 71.888963, 143.777926 +1598, -3.000000, 287.735912, 71.933978, 143.867956 +1599, -3.000000, 287.915972, 71.978993, 143.957986 +1600, -3.000000, 288.096032, 72.024008, 144.048016 +1601, -3.000000, 288.276092, 72.069023, 144.138046 +1602, -3.000000, 288.456152, 72.114038, 144.228076 +1603, -3.000000, 288.636212, 72.159053, 144.318106 +1604, -3.000000, 288.816272, 72.204068, 144.408136 +1605, -3.000000, 288.996332, 72.249083, 144.498166 +1606, -3.000000, 289.176392, 72.294098, 144.588196 +1607, -3.000000, 289.356452, 72.339113, 144.678226 +1608, -3.000000, 289.536512, 72.384128, 144.768256 +1609, -3.000000, 289.716572, 72.429143, 144.858286 +1610, -3.000000, 289.896632, 72.474158, 144.948316 +1611, -3.000000, 290.076692, 72.519173, 145.038346 +1612, -3.000000, 290.256752, 72.564188, 145.128376 +1613, -3.000000, 290.436812, 72.609203, 145.218406 +1614, -3.000000, 290.616872, 72.654218, 145.308436 +1615, -3.000000, 290.796932, 72.699233, 145.398466 +1616, -3.000000, 290.976992, 72.744248, 145.488496 +1617, -3.000000, 291.157052, 72.789263, 145.578526 +1618, -3.000000, 291.337112, 72.834278, 145.668556 +1619, -3.000000, 291.517172, 72.879293, 145.758586 +1620, -3.000000, 291.697232, 72.924308, 145.848616 +1621, -3.000000, 291.877292, 72.969323, 145.938646 +1622, -3.000000, 292.057352, 73.014338, 146.028676 +1623, -3.000000, 292.237412, 73.059353, 146.118706 +1624, -3.000000, 292.417472, 73.104368, 146.208736 +1625, -3.000000, 292.597533, 73.149383, 146.298766 +1626, -3.000000, 292.777593, 73.194398, 146.388796 +1627, -3.000000, 292.957653, 73.239413, 146.478826 +1628, -3.000000, 293.137713, 73.284428, 146.568856 +1629, -3.000000, 293.317773, 73.329443, 146.658886 +1630, -3.000000, 293.497833, 73.374458, 146.748916 +1631, -3.000000, 293.677893, 73.419473, 146.838946 +1632, -3.000000, 293.857953, 73.464488, 146.928976 +1633, -3.000000, 294.038013, 73.509503, 147.019006 +1634, -3.000000, 294.218073, 73.554518, 147.109036 +1635, -3.000000, 294.398133, 73.599533, 147.199066 +1636, -3.000000, 294.578193, 73.644548, 147.289096 +1637, -3.000000, 294.758253, 73.689563, 147.379126 +1638, -3.000000, 294.938313, 73.734578, 147.469156 +1639, -3.000000, 295.118373, 73.779593, 147.559186 +1640, -3.000000, 295.298433, 73.824608, 147.649216 +1641, -3.000000, 295.478493, 73.869623, 147.739246 +1642, -3.000000, 295.658553, 73.914638, 147.829276 +1643, -3.000000, 295.838613, 73.959653, 147.919306 +1644, -3.000000, 296.018673, 74.004668, 148.009336 +1645, -3.000000, 296.198733, 74.049683, 148.099366 +1646, -3.000000, 296.378793, 74.094698, 148.189396 +1647, -3.000000, 296.558853, 74.139713, 148.279426 +1648, -3.000000, 296.738913, 74.184728, 148.369456 +1649, -3.000000, 296.918973, 74.229743, 148.459486 +1650, -3.000000, 297.099033, 74.274758, 148.549517 +1651, -3.000000, 297.279093, 74.319773, 148.639547 +1652, -3.000000, 297.459153, 74.364788, 148.729577 +1653, -3.000000, 297.639213, 74.409803, 148.819607 +1654, -3.000000, 297.819273, 74.454818, 148.909637 +1655, -3.000000, 297.999333, 74.499833, 148.999667 +1656, -3.000000, 298.179393, 74.544848, 149.089697 +1657, -3.000000, 298.359453, 74.589863, 149.179727 +1658, -3.000000, 298.539513, 74.634878, 149.269757 +1659, -3.000000, 298.719573, 74.679893, 149.359787 +1660, -3.000000, 298.899633, 74.724908, 149.449817 +1661, -3.000000, 299.079693, 74.769923, 149.539847 +1662, -3.000000, 299.259753, 74.814938, 149.629877 +1663, -3.000000, 299.439813, 74.859953, 149.719907 +1664, -3.000000, 299.619873, 74.904968, 149.809937 +1665, -3.000000, 299.799933, 74.949983, 149.899967 +1666, -3.000000, 299.979993, 74.994998, 149.989997 +1667, -3.000000, 300.160053, 75.040013, 150.080027 +1668, -3.000000, 300.340113, 75.085028, 150.170057 +1669, -3.000000, 300.520173, 75.130043, 150.260087 +1670, -3.000000, 300.700233, 75.175058, 150.350117 +1671, -3.000000, 300.880293, 75.220073, 150.440147 +1672, -3.000000, 301.060353, 75.265088, 150.530177 +1673, -3.000000, 301.240413, 75.310103, 150.620207 +1674, -3.000000, 301.420473, 75.355118, 150.710237 +1675, -3.000000, 301.600534, 75.400133, 150.800267 +1676, -3.000000, 301.780594, 75.445148, 150.890297 +1677, -3.000000, 301.960654, 75.490163, 150.980327 +1678, -3.000000, 302.140714, 75.535178, 151.070357 +1679, -3.000000, 302.320774, 75.580193, 151.160387 +1680, -3.000000, 302.500834, 75.625208, 151.250417 +1681, -3.000000, 302.680894, 75.670223, 151.340447 +1682, -3.000000, 302.860954, 75.715238, 151.430477 +1683, -3.000000, 303.041014, 75.760253, 151.520507 +1684, -3.000000, 303.221074, 75.805268, 151.610537 +1685, -3.000000, 303.401134, 75.850283, 151.700567 +1686, -3.000000, 303.581194, 75.895298, 151.790597 +1687, -3.000000, 303.761254, 75.940313, 151.880627 +1688, -3.000000, 303.941314, 75.985328, 151.970657 +1689, -3.000000, 304.121374, 76.030343, 152.060687 +1690, -3.000000, 304.301434, 76.075358, 152.150717 +1691, -3.000000, 304.481494, 76.120373, 152.240747 +1692, -3.000000, 304.661554, 76.165388, 152.330777 +1693, -3.000000, 304.841614, 76.210403, 152.420807 +1694, -3.000000, 305.021674, 76.255418, 152.510837 +1695, -3.000000, 305.201734, 76.300433, 152.600867 +1696, -3.000000, 305.381794, 76.345448, 152.690897 +1697, -3.000000, 305.561854, 76.390463, 152.780927 +1698, -3.000000, 305.741914, 76.435478, 152.870957 +1699, -3.000000, 305.921974, 76.480493, 152.960987 +1700, -3.000000, 306.102034, 76.525509, 153.051017 +1701, -3.000000, 306.282094, 76.570524, 153.141047 +1702, -3.000000, 306.462154, 76.615539, 153.231077 +1703, -3.000000, 306.642214, 76.660554, 153.321107 +1704, -3.000000, 306.822274, 76.705569, 153.411137 +1705, -3.000000, 307.002334, 76.750584, 153.501167 +1706, -3.000000, 307.182394, 76.795599, 153.591197 +1707, -3.000000, 307.362454, 76.840614, 153.681227 +1708, -3.000000, 307.542514, 76.885629, 153.771257 +1709, -3.000000, 307.722574, 76.930644, 153.861287 +1710, -3.000000, 307.902634, 76.975659, 153.951317 +1711, -3.000000, 308.082694, 77.020674, 154.041347 +1712, -3.000000, 308.262754, 77.065689, 154.131377 +1713, -3.000000, 308.442814, 77.110704, 154.221407 +1714, -3.000000, 308.622874, 77.155719, 154.311437 +1715, -3.000000, 308.802934, 77.200734, 154.401467 +1716, -3.000000, 308.982994, 77.245749, 154.491497 +1717, -3.000000, 309.163054, 77.290764, 154.581527 +1718, -3.000000, 309.343114, 77.335779, 154.671557 +1719, -3.000000, 309.523174, 77.380794, 154.761587 +1720, -3.000000, 309.703234, 77.425809, 154.851617 +1721, -3.000000, 309.883294, 77.470824, 154.941647 +1722, -3.000000, 310.063354, 77.515839, 155.031677 +1723, -3.000000, 310.243414, 77.560854, 155.121707 +1724, -3.000000, 310.423474, 77.605869, 155.211737 +1725, -3.000000, 310.603535, 77.650884, 155.301767 +1726, -3.000000, 310.783595, 77.695899, 155.391797 +1727, -3.000000, 310.963655, 77.740914, 155.481827 +1728, -3.000000, 311.143715, 77.785929, 155.571857 +1729, -3.000000, 311.323775, 77.830944, 155.661887 +1730, -3.000000, 311.503835, 77.875959, 155.751917 +1731, -3.000000, 311.683895, 77.920974, 155.841947 +1732, -3.000000, 311.863955, 77.965989, 155.931977 +1733, -3.000000, 312.044015, 78.011004, 156.022007 +1734, -3.000000, 312.224075, 78.056019, 156.112037 +1735, -3.000000, 312.404135, 78.101034, 156.202067 +1736, -3.000000, 312.584195, 78.146049, 156.292097 +1737, -3.000000, 312.764255, 78.191064, 156.382127 +1738, -3.000000, 312.944315, 78.236079, 156.472157 +1739, -3.000000, 313.124375, 78.281094, 156.562187 +1740, -3.000000, 313.304435, 78.326109, 156.652217 +1741, -3.000000, 313.484495, 78.371124, 156.742247 +1742, -3.000000, 313.664555, 78.416139, 156.832277 +1743, -3.000000, 313.844615, 78.461154, 156.922307 +1744, -3.000000, 314.024675, 78.506169, 157.012337 +1745, -3.000000, 314.204735, 78.551184, 157.102367 +1746, -3.000000, 314.384795, 78.596199, 157.192397 +1747, -3.000000, 314.564855, 78.641214, 157.282427 +1748, -3.000000, 314.744915, 78.686229, 157.372457 +1749, -3.000000, 314.924975, 78.731244, 157.462487 +1750, -3.000000, 315.105035, 78.776259, 157.552518 +1751, -3.000000, 315.285095, 78.821274, 157.642548 +1752, -3.000000, 315.465155, 78.866289, 157.732578 +1753, -3.000000, 315.645215, 78.911304, 157.822608 +1754, -3.000000, 315.825275, 78.956319, 157.912638 +1755, -3.000000, 316.005335, 79.001334, 158.002668 +1756, -3.000000, 316.185395, 79.046349, 158.092698 +1757, -3.000000, 316.365455, 79.091364, 158.182728 +1758, -3.000000, 316.545515, 79.136379, 158.272758 +1759, -3.000000, 316.725575, 79.181394, 158.362788 +1760, -3.000000, 316.905635, 79.226409, 158.452818 +1761, -3.000000, 317.085695, 79.271424, 158.542848 +1762, -3.000000, 317.265755, 79.316439, 158.632878 +1763, -3.000000, 317.445815, 79.361454, 158.722908 +1764, -3.000000, 317.625875, 79.406469, 158.812938 +1765, -3.000000, 317.805935, 79.451484, 158.902968 +1766, -3.000000, 317.985995, 79.496499, 158.992998 +1767, -3.000000, 318.166055, 79.541514, 159.083028 +1768, -3.000000, 318.346115, 79.586529, 159.173058 +1769, -3.000000, 318.526175, 79.631544, 159.263088 +1770, -3.000000, 318.706235, 79.676559, 159.353118 +1771, -3.000000, 318.886295, 79.721574, 159.443148 +1772, -3.000000, 319.066355, 79.766589, 159.533178 +1773, -3.000000, 319.246415, 79.811604, 159.623208 +1774, -3.000000, 319.426475, 79.856619, 159.713238 +1775, -3.000000, 319.606536, 79.901634, 159.803268 +1776, -3.000000, 319.786596, 79.946649, 159.893298 +1777, -3.000000, 319.966656, 79.991664, 159.983328 +1778, -3.000000, 320.146716, 80.036679, 160.073358 +1779, -3.000000, 320.326776, 80.081694, 160.163388 +1780, -3.000000, 320.506836, 80.126709, 160.253418 +1781, -3.000000, 320.686896, 80.171724, 160.343448 +1782, -3.000000, 320.866956, 80.216739, 160.433478 +1783, -3.000000, 321.047016, 80.261754, 160.523508 +1784, -3.000000, 321.227076, 80.306769, 160.613538 +1785, -3.000000, 321.407136, 80.351784, 160.703568 +1786, -3.000000, 321.587196, 80.396799, 160.793598 +1787, -3.000000, 321.767256, 80.441814, 160.883628 +1788, -3.000000, 321.947316, 80.486829, 160.973658 +1789, -3.000000, 322.127376, 80.531844, 161.063688 +1790, -3.000000, 322.307436, 80.576859, 161.153718 +1791, -3.000000, 322.487496, 80.621874, 161.243748 +1792, -3.000000, 322.667556, 80.666889, 161.333778 +1793, -3.000000, 322.847616, 80.711904, 161.423808 +1794, -3.000000, 323.027676, 80.756919, 161.513838 +1795, -3.000000, 323.207736, 80.801934, 161.603868 +1796, -3.000000, 323.387796, 80.846949, 161.693898 +1797, -3.000000, 323.567856, 80.891964, 161.783928 +1798, -3.000000, 323.747916, 80.936979, 161.873958 +1799, -3.000000, 323.927976, 80.981994, 161.963988 +1800, -3.000000, 324.108036, 81.027009, 162.054018 +1801, -3.000000, 324.288096, 81.072024, 162.144048 +1802, -3.000000, 324.468156, 81.117039, 162.234078 +1803, -3.000000, 324.648216, 81.162054, 162.324108 +1804, -3.000000, 324.828276, 81.207069, 162.414138 +1805, -3.000000, 325.008336, 81.252084, 162.504168 +1806, -3.000000, 325.188396, 81.297099, 162.594198 +1807, -3.000000, 325.368456, 81.342114, 162.684228 +1808, -3.000000, 325.548516, 81.387129, 162.774258 +1809, -3.000000, 325.728576, 81.432144, 162.864288 +1810, -3.000000, 325.908636, 81.477159, 162.954318 +1811, -3.000000, 326.088696, 81.522174, 163.044348 +1812, -3.000000, 326.268756, 81.567189, 163.134378 +1813, -3.000000, 326.448816, 81.612204, 163.224408 +1814, -3.000000, 326.628876, 81.657219, 163.314438 +1815, -3.000000, 326.808936, 81.702234, 163.404468 +1816, -3.000000, 326.988996, 81.747249, 163.494498 +1817, -3.000000, 327.169056, 81.792264, 163.584528 +1818, -3.000000, 327.349116, 81.837279, 163.674558 +1819, -3.000000, 327.529176, 81.882294, 163.764588 +1820, -3.000000, 327.709236, 81.927309, 163.854618 +1821, -3.000000, 327.889296, 81.972324, 163.944648 +1822, -3.000000, 328.069356, 82.017339, 164.034678 +1823, -3.000000, 328.249416, 82.062354, 164.124708 +1824, -3.000000, 328.429476, 82.107369, 164.214738 +1825, -3.000000, 328.609537, 82.152384, 164.304768 +1826, -3.000000, 328.789597, 82.197399, 164.394798 +1827, -3.000000, 328.969657, 82.242414, 164.484828 +1828, -3.000000, 329.149717, 82.287429, 164.574858 +1829, -3.000000, 329.329777, 82.332444, 164.664888 +1830, -3.000000, 329.509837, 82.377459, 164.754918 +1831, -3.000000, 329.689897, 82.422474, 164.844948 +1832, -3.000000, 329.869957, 82.467489, 164.934978 +1833, -3.000000, 330.050017, 82.512504, 165.025008 +1834, -3.000000, 330.230077, 82.557519, 165.115038 +1835, -3.000000, 330.410137, 82.602534, 165.205068 +1836, -3.000000, 330.590197, 82.647549, 165.295098 +1837, -3.000000, 330.770257, 82.692564, 165.385128 +1838, -3.000000, 330.950317, 82.737579, 165.475158 +1839, -3.000000, 331.130377, 82.782594, 165.565188 +1840, -3.000000, 331.310437, 82.827609, 165.655218 +1841, -3.000000, 331.490497, 82.872624, 165.745248 +1842, -3.000000, 331.670557, 82.917639, 165.835278 +1843, -3.000000, 331.850617, 82.962654, 165.925308 +1844, -3.000000, 332.030677, 83.007669, 166.015338 +1845, -3.000000, 332.210737, 83.052684, 166.105368 +1846, -3.000000, 332.390797, 83.097699, 166.195398 +1847, -3.000000, 332.570857, 83.142714, 166.285428 +1848, -3.000000, 332.750917, 83.187729, 166.375458 +1849, -3.000000, 332.930977, 83.232744, 166.465488 +1850, -3.000000, 333.111037, 83.277759, 166.555519 +1851, -3.000000, 333.291097, 83.322774, 166.645549 +1852, -3.000000, 333.471157, 83.367789, 166.735579 +1853, -3.000000, 333.651217, 83.412804, 166.825609 +1854, -3.000000, 333.831277, 83.457819, 166.915639 +1855, -3.000000, 334.011337, 83.502834, 167.005669 +1856, -3.000000, 334.191397, 83.547849, 167.095699 +1857, -3.000000, 334.371457, 83.592864, 167.185729 +1858, -3.000000, 334.551517, 83.637879, 167.275759 +1859, -3.000000, 334.731577, 83.682894, 167.365789 +1860, -3.000000, 334.911637, 83.727909, 167.455819 +1861, -3.000000, 335.091697, 83.772924, 167.545849 +1862, -3.000000, 335.271757, 83.817939, 167.635879 +1863, -3.000000, 335.451817, 83.862954, 167.725909 +1864, -3.000000, 335.631877, 83.907969, 167.815939 +1865, -3.000000, 335.811937, 83.952984, 167.905969 +1866, -3.000000, 335.991997, 83.997999, 167.995999 +1867, -3.000000, 336.172057, 84.043014, 168.086029 +1868, -3.000000, 336.352117, 84.088029, 168.176059 +1869, -3.000000, 336.532177, 84.133044, 168.266089 +1870, -3.000000, 336.712237, 84.178059, 168.356119 +1871, -3.000000, 336.892297, 84.223074, 168.446149 +1872, -3.000000, 337.072357, 84.268089, 168.536179 +1873, -3.000000, 337.252417, 84.313104, 168.626209 +1874, -3.000000, 337.432477, 84.358119, 168.716239 +1875, -3.000000, 337.612538, 84.403134, 168.806269 +1876, -3.000000, 337.792598, 84.448149, 168.896299 +1877, -3.000000, 337.972658, 84.493164, 168.986329 +1878, -3.000000, 338.152718, 84.538179, 169.076359 +1879, -3.000000, 338.332778, 84.583194, 169.166389 +1880, -3.000000, 338.512838, 84.628209, 169.256419 +1881, -3.000000, 338.692898, 84.673224, 169.346449 +1882, -3.000000, 338.872958, 84.718239, 169.436479 +1883, -3.000000, 339.053018, 84.763254, 169.526509 +1884, -3.000000, 339.233078, 84.808269, 169.616539 +1885, -3.000000, 339.413138, 84.853284, 169.706569 +1886, -3.000000, 339.593198, 84.898299, 169.796599 +1887, -3.000000, 339.773258, 84.943314, 169.886629 +1888, -3.000000, 339.953318, 84.988329, 169.976659 +1889, -3.000000, 340.133378, 85.033344, 170.066689 +1890, -3.000000, 340.313438, 85.078359, 170.156719 +1891, -3.000000, 340.493498, 85.123374, 170.246749 +1892, -3.000000, 340.673558, 85.168389, 170.336779 +1893, -3.000000, 340.853618, 85.213404, 170.426809 +1894, -3.000000, 341.033678, 85.258419, 170.516839 +1895, -3.000000, 341.213738, 85.303434, 170.606869 +1896, -3.000000, 341.393798, 85.348449, 170.696899 +1897, -3.000000, 341.573858, 85.393464, 170.786929 +1898, -3.000000, 341.753918, 85.438479, 170.876959 +1899, -3.000000, 341.933978, 85.483494, 170.966989 +1900, -3.000000, 342.114038, 85.528510, 171.057019 +1901, -3.000000, 342.294098, 85.573525, 171.147049 +1902, -3.000000, 342.474158, 85.618540, 171.237079 +1903, -3.000000, 342.654218, 85.663555, 171.327109 +1904, -3.000000, 342.834278, 85.708570, 171.417139 +1905, -3.000000, 343.014338, 85.753585, 171.507169 +1906, -3.000000, 343.194398, 85.798600, 171.597199 +1907, -3.000000, 343.374458, 85.843615, 171.687229 +1908, -3.000000, 343.554518, 85.888630, 171.777259 +1909, -3.000000, 343.734578, 85.933645, 171.867289 +1910, -3.000000, 343.914638, 85.978660, 171.957319 +1911, -3.000000, 344.094698, 86.023675, 172.047349 +1912, -3.000000, 344.274758, 86.068690, 172.137379 +1913, -3.000000, 344.454818, 86.113705, 172.227409 +1914, -3.000000, 344.634878, 86.158720, 172.317439 +1915, -3.000000, 344.814938, 86.203735, 172.407469 +1916, -3.000000, 344.994998, 86.248750, 172.497499 +1917, -3.000000, 345.175058, 86.293765, 172.587529 +1918, -3.000000, 345.355118, 86.338780, 172.677559 +1919, -3.000000, 345.535178, 86.383795, 172.767589 +1920, -3.000000, 345.715238, 86.428810, 172.857619 +1921, -3.000000, 345.895298, 86.473825, 172.947649 +1922, -3.000000, 346.075358, 86.518840, 173.037679 +1923, -3.000000, 346.255418, 86.563855, 173.127709 +1924, -3.000000, 346.435478, 86.608870, 173.217739 +1925, -3.000000, 346.615539, 86.653885, 173.307769 +1926, -3.000000, 346.795599, 86.698900, 173.397799 +1927, -3.000000, 346.975659, 86.743915, 173.487829 +1928, -3.000000, 347.155719, 86.788930, 173.577859 +1929, -3.000000, 347.335779, 86.833945, 173.667889 +1930, -3.000000, 347.515839, 86.878960, 173.757919 +1931, -3.000000, 347.695899, 86.923975, 173.847949 +1932, -3.000000, 347.875959, 86.968990, 173.937979 +1933, -3.000000, 348.056019, 87.014005, 174.028009 +1934, -3.000000, 348.236079, 87.059020, 174.118039 +1935, -3.000000, 348.416139, 87.104035, 174.208069 +1936, -3.000000, 348.596199, 87.149050, 174.298099 +1937, -3.000000, 348.776259, 87.194065, 174.388129 +1938, -3.000000, 348.956319, 87.239080, 174.478159 +1939, -3.000000, 349.136379, 87.284095, 174.568189 +1940, -3.000000, 349.316439, 87.329110, 174.658219 +1941, -3.000000, 349.496499, 87.374125, 174.748249 +1942, -3.000000, 349.676559, 87.419140, 174.838279 +1943, -3.000000, 349.856619, 87.464155, 174.928309 +1944, -3.000000, 350.036679, 87.509170, 175.018339 +1945, -3.000000, 350.216739, 87.554185, 175.108369 +1946, -3.000000, 350.396799, 87.599200, 175.198399 +1947, -3.000000, 350.576859, 87.644215, 175.288429 +1948, -3.000000, 350.756919, 87.689230, 175.378459 +1949, -3.000000, 350.936979, 87.734245, 175.468489 +1950, -3.000000, 351.117039, 87.779260, 175.558520 +1951, -3.000000, 351.297099, 87.824275, 175.648550 +1952, -3.000000, 351.477159, 87.869290, 175.738580 +1953, -3.000000, 351.657219, 87.914305, 175.828610 +1954, -3.000000, 351.837279, 87.959320, 175.918640 +1955, -3.000000, 352.017339, 88.004335, 176.008670 +1956, -3.000000, 352.197399, 88.049350, 176.098700 +1957, -3.000000, 352.377459, 88.094365, 176.188730 +1958, -3.000000, 352.557519, 88.139380, 176.278760 +1959, -3.000000, 352.737579, 88.184395, 176.368790 +1960, -3.000000, 352.917639, 88.229410, 176.458820 +1961, -3.000000, 353.097699, 88.274425, 176.548850 +1962, -3.000000, 353.277759, 88.319440, 176.638880 +1963, -3.000000, 353.457819, 88.364455, 176.728910 +1964, -3.000000, 353.637879, 88.409470, 176.818940 +1965, -3.000000, 353.817939, 88.454485, 176.908970 +1966, -3.000000, 353.997999, 88.499500, 176.999000 +1967, -3.000000, 354.178059, 88.544515, 177.089030 +1968, -3.000000, 354.358119, 88.589530, 177.179060 +1969, -3.000000, 354.538179, 88.634545, 177.269090 +1970, -3.000000, 354.718239, 88.679560, 177.359120 +1971, -3.000000, 354.898299, 88.724575, 177.449150 +1972, -3.000000, 355.078359, 88.769590, 177.539180 +1973, -3.000000, 355.258419, 88.814605, 177.629210 +1974, -3.000000, 355.438479, 88.859620, 177.719240 +1975, -3.000000, 355.618540, 88.904635, 177.809270 +1976, -3.000000, 355.798600, 88.949650, 177.899300 +1977, -3.000000, 355.978660, 88.994665, 177.989330 +1978, -3.000000, 356.158720, 89.039680, 178.079360 +1979, -3.000000, 356.338780, 89.084695, 178.169390 +1980, -3.000000, 356.518840, 89.129710, 178.259420 +1981, -3.000000, 356.698900, 89.174725, 178.349450 +1982, -3.000000, 356.878960, 89.219740, 178.439480 +1983, -3.000000, 357.059020, 89.264755, 178.529510 +1984, -3.000000, 357.239080, 89.309770, 178.619540 +1985, -3.000000, 357.419140, 89.354785, 178.709570 +1986, -3.000000, 357.599200, 89.399800, 178.799600 +1987, -3.000000, 357.779260, 89.444815, 178.889630 +1988, -3.000000, 357.959320, 89.489830, 178.979660 +1989, -3.000000, 358.139380, 89.534845, 179.069690 +1990, -3.000000, 358.319440, 89.579860, 179.159720 +1991, -3.000000, 358.499500, 89.624875, 179.249750 +1992, -3.000000, 358.679560, 89.669890, 179.339780 +1993, -3.000000, 358.859620, 89.714905, 179.429810 +1994, -3.000000, 359.039680, 89.759920, 179.519840 +1995, -3.000000, 359.219740, 89.804935, 179.609870 +1996, -3.000000, 359.399800, 89.849950, 179.699900 +1997, -3.000000, 359.579860, 89.894965, 179.789930 +1998, -3.000000, 359.759920, 89.939980, 179.879960 +1999, -3.000000, 359.939980, 89.984995, 179.969990 +2000, -3.000000, 360.120040, 90.030010, 180.060020 +2001, -3.000000, 360.300100, 90.075025, 180.150050 +2002, -3.000000, 360.480160, 90.120040, 180.240080 +2003, -3.000000, 360.660220, 90.165055, 180.330110 +2004, -3.000000, 360.840280, 90.210070, 180.420140 +2005, -3.000000, 361.020340, 90.255085, 180.510170 +2006, -3.000000, 361.200400, 90.300100, 180.600200 +2007, -3.000000, 361.380460, 90.345115, 180.690230 +2008, -3.000000, 361.560520, 90.390130, 180.780260 +2009, -3.000000, 361.740580, 90.435145, 180.870290 +2010, -3.000000, 361.920640, 90.480160, 180.960320 +2011, -3.000000, 362.100700, 90.525175, 181.050350 +2012, -3.000000, 362.280760, 90.570190, 181.140380 +2013, -3.000000, 362.460820, 90.615205, 181.230410 +2014, -3.000000, 362.640880, 90.660220, 181.320440 +2015, -3.000000, 362.820940, 90.705235, 181.410470 +2016, -3.000000, 363.001000, 90.750250, 181.500500 +2017, -3.000000, 363.181060, 90.795265, 181.590530 +2018, -3.000000, 363.361120, 90.840280, 181.680560 +2019, -3.000000, 363.541180, 90.885295, 181.770590 +2020, -3.000000, 363.721240, 90.930310, 181.860620 +2021, -3.000000, 363.901300, 90.975325, 181.950650 +2022, -3.000000, 364.081360, 91.020340, 182.040680 +2023, -3.000000, 364.261420, 91.065355, 182.130710 +2024, -3.000000, 364.441480, 91.110370, 182.220740 +2025, -3.000000, 364.621541, 91.155385, 182.310770 +2026, -3.000000, 364.801601, 91.200400, 182.400800 +2027, -3.000000, 364.981661, 91.245415, 182.490830 +2028, -3.000000, 365.161721, 91.290430, 182.580860 +2029, -3.000000, 365.341781, 91.335445, 182.670890 +2030, -3.000000, 365.521841, 91.380460, 182.760920 +2031, -3.000000, 365.701901, 91.425475, 182.850950 +2032, -3.000000, 365.881961, 91.470490, 182.940980 +2033, -3.000000, 366.062021, 91.515505, 183.031010 +2034, -3.000000, 366.242081, 91.560520, 183.121040 +2035, -3.000000, 366.422141, 91.605535, 183.211070 +2036, -3.000000, 366.602201, 91.650550, 183.301100 +2037, -3.000000, 366.782261, 91.695565, 183.391130 +2038, -3.000000, 366.962321, 91.740580, 183.481160 +2039, -3.000000, 367.142381, 91.785595, 183.571190 +2040, -3.000000, 367.322441, 91.830610, 183.661220 +2041, -3.000000, 367.502501, 91.875625, 183.751250 +2042, -3.000000, 367.682561, 91.920640, 183.841280 +2043, -3.000000, 367.862621, 91.965655, 183.931310 +2044, -3.000000, 368.042681, 92.010670, 184.021340 +2045, -3.000000, 368.222741, 92.055685, 184.111370 +2046, -3.000000, 368.402801, 92.100700, 184.201400 +2047, -3.000000, 368.582861, 92.145715, 184.291430 +2048, -3.000000, 368.762921, 92.190730, 184.381460 +2049, -3.000000, 368.942981, 92.235745, 184.471490 +2050, -3.000000, 369.123041, 92.280760, 184.561521 +2051, -3.000000, 369.303101, 92.325775, 184.651551 +2052, -3.000000, 369.483161, 92.370790, 184.741581 +2053, -3.000000, 369.663221, 92.415805, 184.831611 +2054, -3.000000, 369.843281, 92.460820, 184.921641 +2055, -3.000000, 370.023341, 92.505835, 185.011671 +2056, -3.000000, 370.203401, 92.550850, 185.101701 +2057, -3.000000, 370.383461, 92.595865, 185.191731 +2058, -3.000000, 370.563521, 92.640880, 185.281761 +2059, -3.000000, 370.743581, 92.685895, 185.371791 +2060, -3.000000, 370.923641, 92.730910, 185.461821 +2061, -3.000000, 371.103701, 92.775925, 185.551851 +2062, -3.000000, 371.283761, 92.820940, 185.641881 +2063, -3.000000, 371.463821, 92.865955, 185.731911 +2064, -3.000000, 371.643881, 92.910970, 185.821941 +2065, -3.000000, 371.823941, 92.955985, 185.911971 +2066, -3.000000, 372.004001, 93.001000, 186.002001 +2067, -3.000000, 372.184061, 93.046015, 186.092031 +2068, -3.000000, 372.364121, 93.091030, 186.182061 +2069, -3.000000, 372.544181, 93.136045, 186.272091 +2070, -3.000000, 372.724241, 93.181060, 186.362121 +2071, -3.000000, 372.904301, 93.226075, 186.452151 +2072, -3.000000, 373.084361, 93.271090, 186.542181 +2073, -3.000000, 373.264421, 93.316105, 186.632211 +2074, -3.000000, 373.444481, 93.361120, 186.722241 +2075, -3.000000, 373.624542, 93.406135, 186.812271 +2076, -3.000000, 373.804602, 93.451150, 186.902301 +2077, -3.000000, 373.984662, 93.496165, 186.992331 +2078, -3.000000, 374.164722, 93.541180, 187.082361 +2079, -3.000000, 374.344782, 93.586195, 187.172391 +2080, -3.000000, 374.524842, 93.631210, 187.262421 +2081, -3.000000, 374.704902, 93.676225, 187.352451 +2082, -3.000000, 374.884962, 93.721240, 187.442481 +2083, -3.000000, 375.065022, 93.766255, 187.532511 +2084, -3.000000, 375.245082, 93.811270, 187.622541 +2085, -3.000000, 375.425142, 93.856285, 187.712571 +2086, -3.000000, 375.605202, 93.901300, 187.802601 +2087, -3.000000, 375.785262, 93.946315, 187.892631 +2088, -3.000000, 375.965322, 93.991330, 187.982661 +2089, -3.000000, 376.145382, 94.036345, 188.072691 +2090, -3.000000, 376.325442, 94.081360, 188.162721 +2091, -3.000000, 376.505502, 94.126375, 188.252751 +2092, -3.000000, 376.685562, 94.171390, 188.342781 +2093, -3.000000, 376.865622, 94.216405, 188.432811 +2094, -3.000000, 377.045682, 94.261420, 188.522841 +2095, -3.000000, 377.225742, 94.306435, 188.612871 +2096, -3.000000, 377.405802, 94.351450, 188.702901 +2097, -3.000000, 377.585862, 94.396465, 188.792931 +2098, -3.000000, 377.765922, 94.441480, 188.882961 +2099, -3.000000, 377.945982, 94.486495, 188.972991 +2100, -3.000000, 378.126042, 94.531511, 189.063021 +2101, -3.000000, 378.306102, 94.576526, 189.153051 +2102, -3.000000, 378.486162, 94.621541, 189.243081 +2103, -3.000000, 378.666222, 94.666556, 189.333111 +2104, -3.000000, 378.846282, 94.711571, 189.423141 +2105, -3.000000, 379.026342, 94.756586, 189.513171 +2106, -3.000000, 379.206402, 94.801601, 189.603201 +2107, -3.000000, 379.386462, 94.846616, 189.693231 +2108, -3.000000, 379.566522, 94.891631, 189.783261 +2109, -3.000000, 379.746582, 94.936646, 189.873291 +2110, -3.000000, 379.926642, 94.981661, 189.963321 +2111, -3.000000, 380.106702, 95.026676, 190.053351 +2112, -3.000000, 380.286762, 95.071691, 190.143381 +2113, -3.000000, 380.466822, 95.116706, 190.233411 +2114, -3.000000, 380.646882, 95.161721, 190.323441 +2115, -3.000000, 380.826942, 95.206736, 190.413471 +2116, -3.000000, 381.007002, 95.251751, 190.503501 +2117, -3.000000, 381.187062, 95.296766, 190.593531 +2118, -3.000000, 381.367122, 95.341781, 190.683561 +2119, -3.000000, 381.547182, 95.386796, 190.773591 +2120, -3.000000, 381.727242, 95.431811, 190.863621 +2121, -3.000000, 381.907302, 95.476826, 190.953651 +2122, -3.000000, 382.087362, 95.521841, 191.043681 +2123, -3.000000, 382.267422, 95.566856, 191.133711 +2124, -3.000000, 382.447482, 95.611871, 191.223741 +2125, -3.000000, 382.627543, 95.656886, 191.313771 +2126, -3.000000, 382.807603, 95.701901, 191.403801 +2127, -3.000000, 382.987663, 95.746916, 191.493831 +2128, -3.000000, 383.167723, 95.791931, 191.583861 +2129, -3.000000, 383.347783, 95.836946, 191.673891 +2130, -3.000000, 383.527843, 95.881961, 191.763921 +2131, -3.000000, 383.707903, 95.926976, 191.853951 +2132, -3.000000, 383.887963, 95.971991, 191.943981 +2133, -3.000000, 384.068023, 96.017006, 192.034011 +2134, -3.000000, 384.248083, 96.062021, 192.124041 +2135, -3.000000, 384.428143, 96.107036, 192.214071 +2136, -3.000000, 384.608203, 96.152051, 192.304101 +2137, -3.000000, 384.788263, 96.197066, 192.394131 +2138, -3.000000, 384.968323, 96.242081, 192.484161 +2139, -3.000000, 385.148383, 96.287096, 192.574191 +2140, -3.000000, 385.328443, 96.332111, 192.664221 +2141, -3.000000, 385.508503, 96.377126, 192.754251 +2142, -3.000000, 385.688563, 96.422141, 192.844281 +2143, -3.000000, 385.868623, 96.467156, 192.934311 +2144, -3.000000, 386.048683, 96.512171, 193.024341 +2145, -3.000000, 386.228743, 96.557186, 193.114371 +2146, -3.000000, 386.408803, 96.602201, 193.204401 +2147, -3.000000, 386.588863, 96.647216, 193.294431 +2148, -3.000000, 386.768923, 96.692231, 193.384461 +2149, -3.000000, 386.948983, 96.737246, 193.474491 +2150, -3.000000, 387.129043, 96.782261, 193.564522 +2151, -3.000000, 387.309103, 96.827276, 193.654552 +2152, -3.000000, 387.489163, 96.872291, 193.744582 +2153, -3.000000, 387.669223, 96.917306, 193.834612 +2154, -3.000000, 387.849283, 96.962321, 193.924642 +2155, -3.000000, 388.029343, 97.007336, 194.014672 +2156, -3.000000, 388.209403, 97.052351, 194.104702 +2157, -3.000000, 388.389463, 97.097366, 194.194732 +2158, -3.000000, 388.569523, 97.142381, 194.284762 +2159, -3.000000, 388.749583, 97.187396, 194.374792 +2160, -3.000000, 388.929643, 97.232411, 194.464822 +2161, -3.000000, 389.109703, 97.277426, 194.554852 +2162, -3.000000, 389.289763, 97.322441, 194.644882 +2163, -3.000000, 389.469823, 97.367456, 194.734912 +2164, -3.000000, 389.649883, 97.412471, 194.824942 +2165, -3.000000, 389.829943, 97.457486, 194.914972 +2166, -3.000000, 390.010003, 97.502501, 195.005002 +2167, -3.000000, 390.190063, 97.547516, 195.095032 +2168, -3.000000, 390.370123, 97.592531, 195.185062 +2169, -3.000000, 390.550183, 97.637546, 195.275092 +2170, -3.000000, 390.730243, 97.682561, 195.365122 +2171, -3.000000, 390.910303, 97.727576, 195.455152 +2172, -3.000000, 391.090363, 97.772591, 195.545182 +2173, -3.000000, 391.270423, 97.817606, 195.635212 +2174, -3.000000, 391.450483, 97.862621, 195.725242 +2175, -3.000000, 391.630544, 97.907636, 195.815272 +2176, -3.000000, 391.810604, 97.952651, 195.905302 +2177, -3.000000, 391.990664, 97.997666, 195.995332 +2178, -3.000000, 392.170724, 98.042681, 196.085362 +2179, -3.000000, 392.350784, 98.087696, 196.175392 +2180, -3.000000, 392.530844, 98.132711, 196.265422 +2181, -3.000000, 392.710904, 98.177726, 196.355452 +2182, -3.000000, 392.890964, 98.222741, 196.445482 +2183, -3.000000, 393.071024, 98.267756, 196.535512 +2184, -3.000000, 393.251084, 98.312771, 196.625542 +2185, -3.000000, 393.431144, 98.357786, 196.715572 +2186, -3.000000, 393.611204, 98.402801, 196.805602 +2187, -3.000000, 393.791264, 98.447816, 196.895632 +2188, -3.000000, 393.971324, 98.492831, 196.985662 +2189, -3.000000, 394.151384, 98.537846, 197.075692 +2190, -3.000000, 394.331444, 98.582861, 197.165722 +2191, -3.000000, 394.511504, 98.627876, 197.255752 +2192, -3.000000, 394.691564, 98.672891, 197.345782 +2193, -3.000000, 394.871624, 98.717906, 197.435812 +2194, -3.000000, 395.051684, 98.762921, 197.525842 +2195, -3.000000, 395.231744, 98.807936, 197.615872 +2196, -3.000000, 395.411804, 98.852951, 197.705902 +2197, -3.000000, 395.591864, 98.897966, 197.795932 +2198, -3.000000, 395.771924, 98.942981, 197.885962 +2199, -3.000000, 395.951984, 98.987996, 197.975992 +2200, -3.000000, 396.132044, 99.033011, 198.066022 +2201, -3.000000, 396.312104, 99.078026, 198.156052 +2202, -3.000000, 396.492164, 99.123041, 198.246082 +2203, -3.000000, 396.672224, 99.168056, 198.336112 +2204, -3.000000, 396.852284, 99.213071, 198.426142 +2205, -3.000000, 397.032344, 99.258086, 198.516172 +2206, -3.000000, 397.212404, 99.303101, 198.606202 +2207, -3.000000, 397.392464, 99.348116, 198.696232 +2208, -3.000000, 397.572524, 99.393131, 198.786262 +2209, -3.000000, 397.752584, 99.438146, 198.876292 +2210, -3.000000, 397.932644, 99.483161, 198.966322 +2211, -3.000000, 398.112704, 99.528176, 199.056352 +2212, -3.000000, 398.292764, 99.573191, 199.146382 +2213, -3.000000, 398.472824, 99.618206, 199.236412 +2214, -3.000000, 398.652884, 99.663221, 199.326442 +2215, -3.000000, 398.832944, 99.708236, 199.416472 +2216, -3.000000, 399.013004, 99.753251, 199.506502 +2217, -3.000000, 399.193064, 99.798266, 199.596532 +2218, -3.000000, 399.373124, 99.843281, 199.686562 +2219, -3.000000, 399.553184, 99.888296, 199.776592 +2220, -3.000000, 399.733244, 99.933311, 199.866622 +2221, -3.000000, 399.913304, 99.978326, 199.956652 +2222, -3.000000, 400.093364, 100.023341, 200.046682 +2223, -3.000000, 400.273424, 100.068356, 200.136712 +2224, -3.000000, 400.453484, 100.113371, 200.226742 +2225, -3.000000, 400.633545, 100.158386, 200.316772 +2226, -3.000000, 400.813605, 100.203401, 200.406802 +2227, -3.000000, 400.993665, 100.248416, 200.496832 +2228, -3.000000, 401.173725, 100.293431, 200.586862 +2229, -3.000000, 401.353785, 100.338446, 200.676892 +2230, -3.000000, 401.533845, 100.383461, 200.766922 +2231, -3.000000, 401.713905, 100.428476, 200.856952 +2232, -3.000000, 401.893965, 100.473491, 200.946982 +2233, -3.000000, 402.074025, 100.518506, 201.037012 +2234, -3.000000, 402.254085, 100.563521, 201.127042 +2235, -3.000000, 402.434145, 100.608536, 201.217072 +2236, -3.000000, 402.614205, 100.653551, 201.307102 +2237, -3.000000, 402.794265, 100.698566, 201.397132 +2238, -3.000000, 402.974325, 100.743581, 201.487162 +2239, -3.000000, 403.154385, 100.788596, 201.577192 +2240, -3.000000, 403.334445, 100.833611, 201.667222 +2241, -3.000000, 403.514505, 100.878626, 201.757252 +2242, -3.000000, 403.694565, 100.923641, 201.847282 +2243, -3.000000, 403.874625, 100.968656, 201.937312 +2244, -3.000000, 404.054685, 101.013671, 202.027342 +2245, -3.000000, 404.234745, 101.058686, 202.117372 +2246, -3.000000, 404.414805, 101.103701, 202.207402 +2247, -3.000000, 404.594865, 101.148716, 202.297432 +2248, -3.000000, 404.774925, 101.193731, 202.387462 +2249, -3.000000, 404.954985, 101.238746, 202.477492 +2250, -3.000000, 405.135045, 101.283761, 202.567523 +2251, -3.000000, 405.315105, 101.328776, 202.657553 +2252, -3.000000, 405.495165, 101.373791, 202.747583 +2253, -3.000000, 405.675225, 101.418806, 202.837613 +2254, -3.000000, 405.855285, 101.463821, 202.927643 +2255, -3.000000, 406.035345, 101.508836, 203.017673 +2256, -3.000000, 406.215405, 101.553851, 203.107703 +2257, -3.000000, 406.395465, 101.598866, 203.197733 +2258, -3.000000, 406.575525, 101.643881, 203.287763 +2259, -3.000000, 406.755585, 101.688896, 203.377793 +2260, -3.000000, 406.935645, 101.733911, 203.467823 +2261, -3.000000, 407.115705, 101.778926, 203.557853 +2262, -3.000000, 407.295765, 101.823941, 203.647883 +2263, -3.000000, 407.475825, 101.868956, 203.737913 +2264, -3.000000, 407.655885, 101.913971, 203.827943 +2265, -3.000000, 407.835945, 101.958986, 203.917973 +2266, -3.000000, 408.016005, 102.004001, 204.008003 +2267, -3.000000, 408.196065, 102.049016, 204.098033 +2268, -3.000000, 408.376125, 102.094031, 204.188063 +2269, -3.000000, 408.556185, 102.139046, 204.278093 +2270, -3.000000, 408.736245, 102.184061, 204.368123 +2271, -3.000000, 408.916305, 102.229076, 204.458153 +2272, -3.000000, 409.096365, 102.274091, 204.548183 +2273, -3.000000, 409.276425, 102.319106, 204.638213 +2274, -3.000000, 409.456485, 102.364121, 204.728243 +2275, -3.000000, 409.636546, 102.409136, 204.818273 +2276, -3.000000, 409.816606, 102.454151, 204.908303 +2277, -3.000000, 409.996666, 102.499166, 204.998333 +2278, -3.000000, 410.176726, 102.544181, 205.088363 +2279, -3.000000, 410.356786, 102.589196, 205.178393 +2280, -3.000000, 410.536846, 102.634211, 205.268423 +2281, -3.000000, 410.716906, 102.679226, 205.358453 +2282, -3.000000, 410.896966, 102.724241, 205.448483 +2283, -3.000000, 411.077026, 102.769256, 205.538513 +2284, -3.000000, 411.257086, 102.814271, 205.628543 +2285, -3.000000, 411.437146, 102.859286, 205.718573 +2286, -3.000000, 411.617206, 102.904301, 205.808603 +2287, -3.000000, 411.797266, 102.949316, 205.898633 +2288, -3.000000, 411.977326, 102.994331, 205.988663 +2289, -3.000000, 412.157386, 103.039346, 206.078693 +2290, -3.000000, 412.337446, 103.084361, 206.168723 +2291, -3.000000, 412.517506, 103.129376, 206.258753 +2292, -3.000000, 412.697566, 103.174391, 206.348783 +2293, -3.000000, 412.877626, 103.219406, 206.438813 +2294, -3.000000, 413.057686, 103.264421, 206.528843 +2295, -3.000000, 413.237746, 103.309436, 206.618873 +2296, -3.000000, 413.417806, 103.354451, 206.708903 +2297, -3.000000, 413.597866, 103.399466, 206.798933 +2298, -3.000000, 413.777926, 103.444481, 206.888963 +2299, -3.000000, 413.957986, 103.489496, 206.978993 +2300, -3.000000, 414.138046, 103.534512, 207.069023 +2301, -3.000000, 414.318106, 103.579527, 207.159053 +2302, -3.000000, 414.498166, 103.624542, 207.249083 +2303, -3.000000, 414.678226, 103.669557, 207.339113 +2304, -3.000000, 414.858286, 103.714572, 207.429143 +2305, -3.000000, 415.038346, 103.759587, 207.519173 +2306, -3.000000, 415.218406, 103.804602, 207.609203 +2307, -3.000000, 415.398466, 103.849617, 207.699233 +2308, -3.000000, 415.578526, 103.894632, 207.789263 +2309, -3.000000, 415.758586, 103.939647, 207.879293 +2310, -3.000000, 415.938646, 103.984662, 207.969323 +2311, -3.000000, 416.118706, 104.029677, 208.059353 +2312, -3.000000, 416.298766, 104.074692, 208.149383 +2313, -3.000000, 416.478826, 104.119707, 208.239413 +2314, -3.000000, 416.658886, 104.164722, 208.329443 +2315, -3.000000, 416.838946, 104.209737, 208.419473 +2316, -3.000000, 417.019006, 104.254752, 208.509503 +2317, -3.000000, 417.199066, 104.299767, 208.599533 +2318, -3.000000, 417.379126, 104.344782, 208.689563 +2319, -3.000000, 417.559186, 104.389797, 208.779593 +2320, -3.000000, 417.739246, 104.434812, 208.869623 +2321, -3.000000, 417.919306, 104.479827, 208.959653 +2322, -3.000000, 418.099366, 104.524842, 209.049683 +2323, -3.000000, 418.279426, 104.569857, 209.139713 +2324, -3.000000, 418.459486, 104.614872, 209.229743 +2325, -3.000000, 418.639547, 104.659887, 209.319773 +2326, -3.000000, 418.819607, 104.704902, 209.409803 +2327, -3.000000, 418.999667, 104.749917, 209.499833 +2328, -3.000000, 419.179727, 104.794932, 209.589863 +2329, -3.000000, 419.359787, 104.839947, 209.679893 +2330, -3.000000, 419.539847, 104.884962, 209.769923 +2331, -3.000000, 419.719907, 104.929977, 209.859953 +2332, -3.000000, 419.899967, 104.974992, 209.949983 +2333, -3.000000, 420.080027, 105.020007, 210.040013 +2334, -3.000000, 420.260087, 105.065022, 210.130043 +2335, -3.000000, 420.440147, 105.110037, 210.220073 +2336, -3.000000, 420.620207, 105.155052, 210.310103 +2337, -3.000000, 420.800267, 105.200067, 210.400133 +2338, -3.000000, 420.980327, 105.245082, 210.490163 +2339, -3.000000, 421.160387, 105.290097, 210.580193 +2340, -3.000000, 421.340447, 105.335112, 210.670223 +2341, -3.000000, 421.520507, 105.380127, 210.760253 +2342, -3.000000, 421.700567, 105.425142, 210.850283 +2343, -3.000000, 421.880627, 105.470157, 210.940313 +2344, -3.000000, 422.060687, 105.515172, 211.030343 +2345, -3.000000, 422.240747, 105.560187, 211.120373 +2346, -3.000000, 422.420807, 105.605202, 211.210403 +2347, -3.000000, 422.600867, 105.650217, 211.300433 +2348, -3.000000, 422.780927, 105.695232, 211.390463 +2349, -3.000000, 422.960987, 105.740247, 211.480493 +2350, -3.000000, 423.141047, 105.785262, 211.570524 +2351, -3.000000, 423.321107, 105.830277, 211.660554 +2352, -3.000000, 423.501167, 105.875292, 211.750584 +2353, -3.000000, 423.681227, 105.920307, 211.840614 +2354, -3.000000, 423.861287, 105.965322, 211.930644 +2355, -3.000000, 424.041347, 106.010337, 212.020674 +2356, -3.000000, 424.221407, 106.055352, 212.110704 +2357, -3.000000, 424.401467, 106.100367, 212.200734 +2358, -3.000000, 424.581527, 106.145382, 212.290764 +2359, -3.000000, 424.761587, 106.190397, 212.380794 +2360, -3.000000, 424.941647, 106.235412, 212.470824 +2361, -3.000000, 425.121707, 106.280427, 212.560854 +2362, -3.000000, 425.301767, 106.325442, 212.650884 +2363, -3.000000, 425.481827, 106.370457, 212.740914 +2364, -3.000000, 425.661887, 106.415472, 212.830944 +2365, -3.000000, 425.841947, 106.460487, 212.920974 +2366, -3.000000, 426.022007, 106.505502, 213.011004 +2367, -3.000000, 426.202067, 106.550517, 213.101034 +2368, -3.000000, 426.382127, 106.595532, 213.191064 +2369, -3.000000, 426.562187, 106.640547, 213.281094 +2370, -3.000000, 426.742247, 106.685562, 213.371124 +2371, -3.000000, 426.922307, 106.730577, 213.461154 +2372, -3.000000, 427.102367, 106.775592, 213.551184 +2373, -3.000000, 427.282427, 106.820607, 213.641214 +2374, -3.000000, 427.462487, 106.865622, 213.731244 +2375, -3.000000, 427.642548, 106.910637, 213.821274 +2376, -3.000000, 427.822608, 106.955652, 213.911304 +2377, -3.000000, 428.002668, 107.000667, 214.001334 +2378, -3.000000, 428.182728, 107.045682, 214.091364 +2379, -3.000000, 428.362788, 107.090697, 214.181394 +2380, -3.000000, 428.542848, 107.135712, 214.271424 +2381, -3.000000, 428.722908, 107.180727, 214.361454 +2382, -3.000000, 428.902968, 107.225742, 214.451484 +2383, -3.000000, 429.083028, 107.270757, 214.541514 +2384, -3.000000, 429.263088, 107.315772, 214.631544 +2385, -3.000000, 429.443148, 107.360787, 214.721574 +2386, -3.000000, 429.623208, 107.405802, 214.811604 +2387, -3.000000, 429.803268, 107.450817, 214.901634 +2388, -3.000000, 429.983328, 107.495832, 214.991664 +2389, -3.000000, 430.163388, 107.540847, 215.081694 +2390, -3.000000, 430.343448, 107.585862, 215.171724 +2391, -3.000000, 430.523508, 107.630877, 215.261754 +2392, -3.000000, 430.703568, 107.675892, 215.351784 +2393, -3.000000, 430.883628, 107.720907, 215.441814 +2394, -3.000000, 431.063688, 107.765922, 215.531844 +2395, -3.000000, 431.243748, 107.810937, 215.621874 +2396, -3.000000, 431.423808, 107.855952, 215.711904 +2397, -3.000000, 431.603868, 107.900967, 215.801934 +2398, -3.000000, 431.783928, 107.945982, 215.891964 +2399, -3.000000, 431.963988, 107.990997, 215.981994 +2400, -3.000000, 432.144048, 108.036012, 216.072024 +2401, -3.000000, 432.324108, 108.081027, 216.162054 +2402, -3.000000, 432.504168, 108.126042, 216.252084 +2403, -3.000000, 432.684228, 108.171057, 216.342114 +2404, -3.000000, 432.864288, 108.216072, 216.432144 +2405, -3.000000, 433.044348, 108.261087, 216.522174 +2406, -3.000000, 433.224408, 108.306102, 216.612204 +2407, -3.000000, 433.404468, 108.351117, 216.702234 +2408, -3.000000, 433.584528, 108.396132, 216.792264 +2409, -3.000000, 433.764588, 108.441147, 216.882294 +2410, -3.000000, 433.944648, 108.486162, 216.972324 +2411, -3.000000, 434.124708, 108.531177, 217.062354 +2412, -3.000000, 434.304768, 108.576192, 217.152384 +2413, -3.000000, 434.484828, 108.621207, 217.242414 +2414, -3.000000, 434.664888, 108.666222, 217.332444 +2415, -3.000000, 434.844948, 108.711237, 217.422474 +2416, -3.000000, 435.025008, 108.756252, 217.512504 +2417, -3.000000, 435.205068, 108.801267, 217.602534 +2418, -3.000000, 435.385128, 108.846282, 217.692564 +2419, -3.000000, 435.565188, 108.891297, 217.782594 +2420, -3.000000, 435.745248, 108.936312, 217.872624 +2421, -3.000000, 435.925308, 108.981327, 217.962654 +2422, -3.000000, 436.105368, 109.026342, 218.052684 +2423, -3.000000, 436.285428, 109.071357, 218.142714 +2424, -3.000000, 436.465488, 109.116372, 218.232744 +2425, -3.000000, 436.645549, 109.161387, 218.322774 +2426, -3.000000, 436.825609, 109.206402, 218.412804 +2427, -3.000000, 437.005669, 109.251417, 218.502834 +2428, -3.000000, 437.185729, 109.296432, 218.592864 +2429, -3.000000, 437.365789, 109.341447, 218.682894 +2430, -3.000000, 437.545849, 109.386462, 218.772924 +2431, -3.000000, 437.725909, 109.431477, 218.862954 +2432, -3.000000, 437.905969, 109.476492, 218.952984 +2433, -3.000000, 438.086029, 109.521507, 219.043014 +2434, -3.000000, 438.266089, 109.566522, 219.133044 +2435, -3.000000, 438.446149, 109.611537, 219.223074 +2436, -3.000000, 438.626209, 109.656552, 219.313104 +2437, -3.000000, 438.806269, 109.701567, 219.403134 +2438, -3.000000, 438.986329, 109.746582, 219.493164 +2439, -3.000000, 439.166389, 109.791597, 219.583194 +2440, -3.000000, 439.346449, 109.836612, 219.673224 +2441, -3.000000, 439.526509, 109.881627, 219.763254 +2442, -3.000000, 439.706569, 109.926642, 219.853284 +2443, -3.000000, 439.886629, 109.971657, 219.943314 +2444, -3.000000, 440.066689, 110.016672, 220.033344 +2445, -3.000000, 440.246749, 110.061687, 220.123374 +2446, -3.000000, 440.426809, 110.106702, 220.213404 +2447, -3.000000, 440.606869, 110.151717, 220.303434 +2448, -3.000000, 440.786929, 110.196732, 220.393464 +2449, -3.000000, 440.966989, 110.241747, 220.483494 +2450, -3.000000, 441.147049, 110.286762, 220.573525 +2451, -3.000000, 441.327109, 110.331777, 220.663555 +2452, -3.000000, 441.507169, 110.376792, 220.753585 +2453, -3.000000, 441.687229, 110.421807, 220.843615 +2454, -3.000000, 441.867289, 110.466822, 220.933645 +2455, -3.000000, 442.047349, 110.511837, 221.023675 +2456, -3.000000, 442.227409, 110.556852, 221.113705 +2457, -3.000000, 442.407469, 110.601867, 221.203735 +2458, -3.000000, 442.587529, 110.646882, 221.293765 +2459, -3.000000, 442.767589, 110.691897, 221.383795 +2460, -3.000000, 442.947649, 110.736912, 221.473825 +2461, -3.000000, 443.127709, 110.781927, 221.563855 +2462, -3.000000, 443.307769, 110.826942, 221.653885 +2463, -3.000000, 443.487829, 110.871957, 221.743915 +2464, -3.000000, 443.667889, 110.916972, 221.833945 +2465, -3.000000, 443.847949, 110.961987, 221.923975 +2466, -3.000000, 444.028009, 111.007002, 222.014005 +2467, -3.000000, 444.208069, 111.052017, 222.104035 +2468, -3.000000, 444.388129, 111.097032, 222.194065 +2469, -3.000000, 444.568189, 111.142047, 222.284095 +2470, -3.000000, 444.748249, 111.187062, 222.374125 +2471, -3.000000, 444.928309, 111.232077, 222.464155 +2472, -3.000000, 445.108369, 111.277092, 222.554185 +2473, -3.000000, 445.288429, 111.322107, 222.644215 +2474, -3.000000, 445.468489, 111.367122, 222.734245 +2475, -3.000000, 445.648550, 111.412137, 222.824275 +2476, -3.000000, 445.828610, 111.457152, 222.914305 +2477, -3.000000, 446.008670, 111.502167, 223.004335 +2478, -3.000000, 446.188730, 111.547182, 223.094365 +2479, -3.000000, 446.368790, 111.592197, 223.184395 +2480, -3.000000, 446.548850, 111.637212, 223.274425 +2481, -3.000000, 446.728910, 111.682227, 223.364455 +2482, -3.000000, 446.908970, 111.727242, 223.454485 +2483, -3.000000, 447.089030, 111.772257, 223.544515 +2484, -3.000000, 447.269090, 111.817272, 223.634545 +2485, -3.000000, 447.449150, 111.862287, 223.724575 +2486, -3.000000, 447.629210, 111.907302, 223.814605 +2487, -3.000000, 447.809270, 111.952317, 223.904635 +2488, -3.000000, 447.989330, 111.997332, 223.994665 +2489, -3.000000, 448.169390, 112.042347, 224.084695 +2490, -3.000000, 448.349450, 112.087362, 224.174725 +2491, -3.000000, 448.529510, 112.132377, 224.264755 +2492, -3.000000, 448.709570, 112.177392, 224.354785 +2493, -3.000000, 448.889630, 112.222407, 224.444815 +2494, -3.000000, 449.069690, 112.267422, 224.534845 +2495, -3.000000, 449.249750, 112.312437, 224.624875 +2496, -3.000000, 449.429810, 112.357452, 224.714905 +2497, -3.000000, 449.609870, 112.402467, 224.804935 +2498, -3.000000, 449.789930, 112.447482, 224.894965 +2499, -3.000000, 449.969990, 112.492497, 224.984995 +2500, -3.000000, 450.150050, 112.537513, 225.075025 +2501, -3.000000, 450.330110, 112.582528, 225.165055 +2502, -3.000000, 450.510170, 112.627543, 225.255085 +2503, -3.000000, 450.690230, 112.672558, 225.345115 +2504, -3.000000, 450.870290, 112.717573, 225.435145 +2505, -3.000000, 451.050350, 112.762588, 225.525175 +2506, -3.000000, 451.230410, 112.807603, 225.615205 +2507, -3.000000, 451.410470, 112.852618, 225.705235 +2508, -3.000000, 451.590530, 112.897633, 225.795265 +2509, -3.000000, 451.770590, 112.942648, 225.885295 +2510, -3.000000, 451.950650, 112.987663, 225.975325 +2511, -3.000000, 452.130710, 113.032678, 226.065355 +2512, -3.000000, 452.310770, 113.077693, 226.155385 +2513, -3.000000, 452.490830, 113.122708, 226.245415 +2514, -3.000000, 452.670890, 113.167723, 226.335445 +2515, -3.000000, 452.850950, 113.212738, 226.425475 +2516, -3.000000, 453.031010, 113.257753, 226.515505 +2517, -3.000000, 453.211070, 113.302768, 226.605535 +2518, -3.000000, 453.391130, 113.347783, 226.695565 +2519, -3.000000, 453.571190, 113.392798, 226.785595 +2520, -3.000000, 453.751250, 113.437813, 226.875625 +2521, -3.000000, 453.931310, 113.482828, 226.965655 +2522, -3.000000, 454.111370, 113.527843, 227.055685 +2523, -3.000000, 454.291430, 113.572858, 227.145715 +2524, -3.000000, 454.471490, 113.617873, 227.235745 +2525, -3.000000, 454.651551, 113.662888, 227.325775 +2526, -3.000000, 454.831611, 113.707903, 227.415805 +2527, -3.000000, 455.011671, 113.752918, 227.505835 +2528, -3.000000, 455.191731, 113.797933, 227.595865 +2529, -3.000000, 455.371791, 113.842948, 227.685895 +2530, -3.000000, 455.551851, 113.887963, 227.775925 +2531, -3.000000, 455.731911, 113.932978, 227.865955 +2532, -3.000000, 455.911971, 113.977993, 227.955985 +2533, -3.000000, 456.092031, 114.023008, 228.046015 +2534, -3.000000, 456.272091, 114.068023, 228.136045 +2535, -3.000000, 456.452151, 114.113038, 228.226075 +2536, -3.000000, 456.632211, 114.158053, 228.316105 +2537, -3.000000, 456.812271, 114.203068, 228.406135 +2538, -3.000000, 456.992331, 114.248083, 228.496165 +2539, -3.000000, 457.172391, 114.293098, 228.586195 +2540, -3.000000, 457.352451, 114.338113, 228.676225 +2541, -3.000000, 457.532511, 114.383128, 228.766255 +2542, -3.000000, 457.712571, 114.428143, 228.856285 +2543, -3.000000, 457.892631, 114.473158, 228.946315 +2544, -3.000000, 458.072691, 114.518173, 229.036345 +2545, -3.000000, 458.252751, 114.563188, 229.126375 +2546, -3.000000, 458.432811, 114.608203, 229.216405 +2547, -3.000000, 458.612871, 114.653218, 229.306435 +2548, -3.000000, 458.792931, 114.698233, 229.396465 +2549, -3.000000, 458.972991, 114.743248, 229.486495 +2550, -3.000000, 459.153051, 114.788263, 229.576526 +2551, -3.000000, 459.333111, 114.833278, 229.666556 +2552, -3.000000, 459.513171, 114.878293, 229.756586 +2553, -3.000000, 459.693231, 114.923308, 229.846616 +2554, -3.000000, 459.873291, 114.968323, 229.936646 +2555, -3.000000, 460.053351, 115.013338, 230.026676 +2556, -3.000000, 460.233411, 115.058353, 230.116706 +2557, -3.000000, 460.413471, 115.103368, 230.206736 +2558, -3.000000, 460.593531, 115.148383, 230.296766 +2559, -3.000000, 460.773591, 115.193398, 230.386796 +2560, -3.000000, 460.953651, 115.238413, 230.476826 +2561, -3.000000, 461.133711, 115.283428, 230.566856 +2562, -3.000000, 461.313771, 115.328443, 230.656886 +2563, -3.000000, 461.493831, 115.373458, 230.746916 +2564, -3.000000, 461.673891, 115.418473, 230.836946 +2565, -3.000000, 461.853951, 115.463488, 230.926976 +2566, -3.000000, 462.034011, 115.508503, 231.017006 +2567, -3.000000, 462.214071, 115.553518, 231.107036 +2568, -3.000000, 462.394131, 115.598533, 231.197066 +2569, -3.000000, 462.574191, 115.643548, 231.287096 +2570, -3.000000, 462.754251, 115.688563, 231.377126 +2571, -3.000000, 462.934311, 115.733578, 231.467156 +2572, -3.000000, 463.114371, 115.778593, 231.557186 +2573, -3.000000, 463.294431, 115.823608, 231.647216 +2574, -3.000000, 463.474491, 115.868623, 231.737246 +2575, -3.000000, 463.654552, 115.913638, 231.827276 +2576, -3.000000, 463.834612, 115.958653, 231.917306 +2577, -3.000000, 464.014672, 116.003668, 232.007336 +2578, -3.000000, 464.194732, 116.048683, 232.097366 +2579, -3.000000, 464.374792, 116.093698, 232.187396 +2580, -3.000000, 464.554852, 116.138713, 232.277426 +2581, -3.000000, 464.734912, 116.183728, 232.367456 +2582, -3.000000, 464.914972, 116.228743, 232.457486 +2583, -3.000000, 465.095032, 116.273758, 232.547516 +2584, -3.000000, 465.275092, 116.318773, 232.637546 +2585, -3.000000, 465.455152, 116.363788, 232.727576 +2586, -3.000000, 465.635212, 116.408803, 232.817606 +2587, -3.000000, 465.815272, 116.453818, 232.907636 +2588, -3.000000, 465.995332, 116.498833, 232.997666 +2589, -3.000000, 466.175392, 116.543848, 233.087696 +2590, -3.000000, 466.355452, 116.588863, 233.177726 +2591, -3.000000, 466.535512, 116.633878, 233.267756 +2592, -3.000000, 466.715572, 116.678893, 233.357786 +2593, -3.000000, 466.895632, 116.723908, 233.447816 +2594, -3.000000, 467.075692, 116.768923, 233.537846 +2595, -3.000000, 467.255752, 116.813938, 233.627876 +2596, -3.000000, 467.435812, 116.858953, 233.717906 +2597, -3.000000, 467.615872, 116.903968, 233.807936 +2598, -3.000000, 467.795932, 116.948983, 233.897966 +2599, -3.000000, 467.975992, 116.993998, 233.987996 +2600, -3.000000, 468.156052, 117.039013, 234.078026 +2601, -3.000000, 468.336112, 117.084028, 234.168056 +2602, -3.000000, 468.516172, 117.129043, 234.258086 +2603, -3.000000, 468.696232, 117.174058, 234.348116 +2604, -3.000000, 468.876292, 117.219073, 234.438146 +2605, -3.000000, 469.056352, 117.264088, 234.528176 +2606, -3.000000, 469.236412, 117.309103, 234.618206 +2607, -3.000000, 469.416472, 117.354118, 234.708236 +2608, -3.000000, 469.596532, 117.399133, 234.798266 +2609, -3.000000, 469.776592, 117.444148, 234.888296 +2610, -3.000000, 469.956652, 117.489163, 234.978326 +2611, -3.000000, 470.136712, 117.534178, 235.068356 +2612, -3.000000, 470.316772, 117.579193, 235.158386 +2613, -3.000000, 470.496832, 117.624208, 235.248416 +2614, -3.000000, 470.676892, 117.669223, 235.338446 +2615, -3.000000, 470.856952, 117.714238, 235.428476 +2616, -3.000000, 471.037012, 117.759253, 235.518506 +2617, -3.000000, 471.217072, 117.804268, 235.608536 +2618, -3.000000, 471.397132, 117.849283, 235.698566 +2619, -3.000000, 471.577192, 117.894298, 235.788596 +2620, -3.000000, 471.757252, 117.939313, 235.878626 +2621, -3.000000, 471.937312, 117.984328, 235.968656 +2622, -3.000000, 472.117372, 118.029343, 236.058686 +2623, -3.000000, 472.297432, 118.074358, 236.148716 +2624, -3.000000, 472.477492, 118.119373, 236.238746 +2625, -3.000000, 472.657553, 118.164388, 236.328776 +2626, -3.000000, 472.837613, 118.209403, 236.418806 +2627, -3.000000, 473.017673, 118.254418, 236.508836 +2628, -3.000000, 473.197733, 118.299433, 236.598866 +2629, -3.000000, 473.377793, 118.344448, 236.688896 +2630, -3.000000, 473.557853, 118.389463, 236.778926 +2631, -3.000000, 473.737913, 118.434478, 236.868956 +2632, -3.000000, 473.917973, 118.479493, 236.958986 +2633, -3.000000, 474.098033, 118.524508, 237.049016 +2634, -3.000000, 474.278093, 118.569523, 237.139046 +2635, -3.000000, 474.458153, 118.614538, 237.229076 +2636, -3.000000, 474.638213, 118.659553, 237.319106 +2637, -3.000000, 474.818273, 118.704568, 237.409136 +2638, -3.000000, 474.998333, 118.749583, 237.499166 +2639, -3.000000, 475.178393, 118.794598, 237.589196 +2640, -3.000000, 475.358453, 118.839613, 237.679226 +2641, -3.000000, 475.538513, 118.884628, 237.769256 +2642, -3.000000, 475.718573, 118.929643, 237.859286 +2643, -3.000000, 475.898633, 118.974658, 237.949316 +2644, -3.000000, 476.078693, 119.019673, 238.039346 +2645, -3.000000, 476.258753, 119.064688, 238.129376 +2646, -3.000000, 476.438813, 119.109703, 238.219406 +2647, -3.000000, 476.618873, 119.154718, 238.309436 +2648, -3.000000, 476.798933, 119.199733, 238.399466 +2649, -3.000000, 476.978993, 119.244748, 238.489496 +2650, -3.000000, 477.159053, 119.289763, 238.579527 +2651, -3.000000, 477.339113, 119.334778, 238.669557 +2652, -3.000000, 477.519173, 119.379793, 238.759587 +2653, -3.000000, 477.699233, 119.424808, 238.849617 +2654, -3.000000, 477.879293, 119.469823, 238.939647 +2655, -3.000000, 478.059353, 119.514838, 239.029677 +2656, -3.000000, 478.239413, 119.559853, 239.119707 +2657, -3.000000, 478.419473, 119.604868, 239.209737 +2658, -3.000000, 478.599533, 119.649883, 239.299767 +2659, -3.000000, 478.779593, 119.694898, 239.389797 +2660, -3.000000, 478.959653, 119.739913, 239.479827 +2661, -3.000000, 479.139713, 119.784928, 239.569857 +2662, -3.000000, 479.319773, 119.829943, 239.659887 +2663, -3.000000, 479.499833, 119.874958, 239.749917 +2664, -3.000000, 479.679893, 119.919973, 239.839947 +2665, -3.000000, 479.859953, 119.964988, 239.929977 +2666, -3.000000, 480.040013, 120.010003, 240.020007 +2667, -3.000000, 480.220073, 120.055018, 240.110037 +2668, -3.000000, 480.400133, 120.100033, 240.200067 +2669, -3.000000, 480.580193, 120.145048, 240.290097 +2670, -3.000000, 480.760253, 120.190063, 240.380127 +2671, -3.000000, 480.940313, 120.235078, 240.470157 +2672, -3.000000, 481.120373, 120.280093, 240.560187 +2673, -3.000000, 481.300433, 120.325108, 240.650217 +2674, -3.000000, 481.480493, 120.370123, 240.740247 +2675, -3.000000, 481.660554, 120.415138, 240.830277 +2676, -3.000000, 481.840614, 120.460153, 240.920307 +2677, -3.000000, 482.020674, 120.505168, 241.010337 +2678, -3.000000, 482.200734, 120.550183, 241.100367 +2679, -3.000000, 482.380794, 120.595198, 241.190397 +2680, -3.000000, 482.560854, 120.640213, 241.280427 +2681, -3.000000, 482.740914, 120.685228, 241.370457 +2682, -3.000000, 482.920974, 120.730243, 241.460487 +2683, -3.000000, 483.101034, 120.775258, 241.550517 +2684, -3.000000, 483.281094, 120.820273, 241.640547 +2685, -3.000000, 483.461154, 120.865288, 241.730577 +2686, -3.000000, 483.641214, 120.910303, 241.820607 +2687, -3.000000, 483.821274, 120.955318, 241.910637 +2688, -3.000000, 484.001334, 121.000333, 242.000667 +2689, -3.000000, 484.181394, 121.045348, 242.090697 +2690, -3.000000, 484.361454, 121.090363, 242.180727 +2691, -3.000000, 484.541514, 121.135378, 242.270757 +2692, -3.000000, 484.721574, 121.180393, 242.360787 +2693, -3.000000, 484.901634, 121.225408, 242.450817 +2694, -3.000000, 485.081694, 121.270423, 242.540847 +2695, -3.000000, 485.261754, 121.315438, 242.630877 +2696, -3.000000, 485.441814, 121.360453, 242.720907 +2697, -3.000000, 485.621874, 121.405468, 242.810937 +2698, -3.000000, 485.801934, 121.450483, 242.900967 +2699, -3.000000, 485.981994, 121.495498, 242.990997 +2700, -3.000000, 486.162054, 121.540514, 243.081027 +2701, -3.000000, 486.342114, 121.585529, 243.171057 +2702, -3.000000, 486.522174, 121.630544, 243.261087 +2703, -3.000000, 486.702234, 121.675559, 243.351117 +2704, -3.000000, 486.882294, 121.720574, 243.441147 +2705, -3.000000, 487.062354, 121.765589, 243.531177 +2706, -3.000000, 487.242414, 121.810604, 243.621207 +2707, -3.000000, 487.422474, 121.855619, 243.711237 +2708, -3.000000, 487.602534, 121.900634, 243.801267 +2709, -3.000000, 487.782594, 121.945649, 243.891297 +2710, -3.000000, 487.962654, 121.990664, 243.981327 +2711, -3.000000, 488.142714, 122.035679, 244.071357 +2712, -3.000000, 488.322774, 122.080694, 244.161387 +2713, -3.000000, 488.502834, 122.125709, 244.251417 +2714, -3.000000, 488.682894, 122.170724, 244.341447 +2715, -3.000000, 488.862954, 122.215739, 244.431477 +2716, -3.000000, 489.043014, 122.260754, 244.521507 +2717, -3.000000, 489.223074, 122.305769, 244.611537 +2718, -3.000000, 489.403134, 122.350784, 244.701567 +2719, -3.000000, 489.583194, 122.395799, 244.791597 +2720, -3.000000, 489.763254, 122.440814, 244.881627 +2721, -3.000000, 489.943314, 122.485829, 244.971657 +2722, -3.000000, 490.123374, 122.530844, 245.061687 +2723, -3.000000, 490.303434, 122.575859, 245.151717 +2724, -3.000000, 490.483494, 122.620874, 245.241747 +2725, -3.000000, 490.663555, 122.665889, 245.331777 +2726, -3.000000, 490.843615, 122.710904, 245.421807 +2727, -3.000000, 491.023675, 122.755919, 245.511837 +2728, -3.000000, 491.203735, 122.800934, 245.601867 +2729, -3.000000, 491.383795, 122.845949, 245.691897 +2730, -3.000000, 491.563855, 122.890964, 245.781927 +2731, -3.000000, 491.743915, 122.935979, 245.871957 +2732, -3.000000, 491.923975, 122.980994, 245.961987 +2733, -3.000000, 492.104035, 123.026009, 246.052017 +2734, -3.000000, 492.284095, 123.071024, 246.142047 +2735, -3.000000, 492.464155, 123.116039, 246.232077 +2736, -3.000000, 492.644215, 123.161054, 246.322107 +2737, -3.000000, 492.824275, 123.206069, 246.412137 +2738, -3.000000, 493.004335, 123.251084, 246.502167 +2739, -3.000000, 493.184395, 123.296099, 246.592197 +2740, -3.000000, 493.364455, 123.341114, 246.682227 +2741, -3.000000, 493.544515, 123.386129, 246.772257 +2742, -3.000000, 493.724575, 123.431144, 246.862287 +2743, -3.000000, 493.904635, 123.476159, 246.952317 +2744, -3.000000, 494.084695, 123.521174, 247.042347 +2745, -3.000000, 494.264755, 123.566189, 247.132377 +2746, -3.000000, 494.444815, 123.611204, 247.222407 +2747, -3.000000, 494.624875, 123.656219, 247.312437 +2748, -3.000000, 494.804935, 123.701234, 247.402467 +2749, -3.000000, 494.984995, 123.746249, 247.492497 +2750, -3.000000, 495.165055, 123.791264, 247.582528 +2751, -3.000000, 495.345115, 123.836279, 247.672558 +2752, -3.000000, 495.525175, 123.881294, 247.762588 +2753, -3.000000, 495.705235, 123.926309, 247.852618 +2754, -3.000000, 495.885295, 123.971324, 247.942648 +2755, -3.000000, 496.065355, 124.016339, 248.032678 +2756, -3.000000, 496.245415, 124.061354, 248.122708 +2757, -3.000000, 496.425475, 124.106369, 248.212738 +2758, -3.000000, 496.605535, 124.151384, 248.302768 +2759, -3.000000, 496.785595, 124.196399, 248.392798 +2760, -3.000000, 496.965655, 124.241414, 248.482828 +2761, -3.000000, 497.145715, 124.286429, 248.572858 +2762, -3.000000, 497.325775, 124.331444, 248.662888 +2763, -3.000000, 497.505835, 124.376459, 248.752918 +2764, -3.000000, 497.685895, 124.421474, 248.842948 +2765, -3.000000, 497.865955, 124.466489, 248.932978 +2766, -3.000000, 498.046015, 124.511504, 249.023008 +2767, -3.000000, 498.226075, 124.556519, 249.113038 +2768, -3.000000, 498.406135, 124.601534, 249.203068 +2769, -3.000000, 498.586195, 124.646549, 249.293098 +2770, -3.000000, 498.766255, 124.691564, 249.383128 +2771, -3.000000, 498.946315, 124.736579, 249.473158 +2772, -3.000000, 499.126375, 124.781594, 249.563188 +2773, -3.000000, 499.306435, 124.826609, 249.653218 +2774, -3.000000, 499.486495, 124.871624, 249.743248 +2775, -3.000000, 499.666556, 124.916639, 249.833278 +2776, -3.000000, 499.846616, 124.961654, 249.923308 +2777, -3.000000, 500.026676, 125.006669, 250.013338 +2778, -3.000000, 500.206736, 125.051684, 250.103368 +2779, -3.000000, 500.386796, 125.096699, 250.193398 +2780, -3.000000, 500.566856, 125.141714, 250.283428 +2781, -3.000000, 500.746916, 125.186729, 250.373458 +2782, -3.000000, 500.926976, 125.231744, 250.463488 +2783, -3.000000, 501.107036, 125.276759, 250.553518 +2784, -3.000000, 501.287096, 125.321774, 250.643548 +2785, -3.000000, 501.467156, 125.366789, 250.733578 +2786, -3.000000, 501.647216, 125.411804, 250.823608 +2787, -3.000000, 501.827276, 125.456819, 250.913638 +2788, -3.000000, 502.007336, 125.501834, 251.003668 +2789, -3.000000, 502.187396, 125.546849, 251.093698 +2790, -3.000000, 502.367456, 125.591864, 251.183728 +2791, -3.000000, 502.547516, 125.636879, 251.273758 +2792, -3.000000, 502.727576, 125.681894, 251.363788 +2793, -3.000000, 502.907636, 125.726909, 251.453818 +2794, -3.000000, 503.087696, 125.771924, 251.543848 +2795, -3.000000, 503.267756, 125.816939, 251.633878 +2796, -3.000000, 503.447816, 125.861954, 251.723908 +2797, -3.000000, 503.627876, 125.906969, 251.813938 +2798, -3.000000, 503.807936, 125.951984, 251.903968 +2799, -3.000000, 503.987996, 125.996999, 251.993998 +2800, -3.000000, 504.168056, 126.042014, 252.084028 +2801, -3.000000, 504.348116, 126.087029, 252.174058 +2802, -3.000000, 504.528176, 126.132044, 252.264088 +2803, -3.000000, 504.708236, 126.177059, 252.354118 +2804, -3.000000, 504.888296, 126.222074, 252.444148 +2805, -3.000000, 505.068356, 126.267089, 252.534178 +2806, -3.000000, 505.248416, 126.312104, 252.624208 +2807, -3.000000, 505.428476, 126.357119, 252.714238 +2808, -3.000000, 505.608536, 126.402134, 252.804268 +2809, -3.000000, 505.788596, 126.447149, 252.894298 +2810, -3.000000, 505.968656, 126.492164, 252.984328 +2811, -3.000000, 506.148716, 126.537179, 253.074358 +2812, -3.000000, 506.328776, 126.582194, 253.164388 +2813, -3.000000, 506.508836, 126.627209, 253.254418 +2814, -3.000000, 506.688896, 126.672224, 253.344448 +2815, -3.000000, 506.868956, 126.717239, 253.434478 +2816, -3.000000, 507.049016, 126.762254, 253.524508 +2817, -3.000000, 507.229076, 126.807269, 253.614538 +2818, -3.000000, 507.409136, 126.852284, 253.704568 +2819, -3.000000, 507.589196, 126.897299, 253.794598 +2820, -3.000000, 507.769256, 126.942314, 253.884628 +2821, -3.000000, 507.949316, 126.987329, 253.974658 +2822, -3.000000, 508.129376, 127.032344, 254.064688 +2823, -3.000000, 508.309436, 127.077359, 254.154718 +2824, -3.000000, 508.489496, 127.122374, 254.244748 +2825, -3.000000, 508.669557, 127.167389, 254.334778 +2826, -3.000000, 508.849617, 127.212404, 254.424808 +2827, -3.000000, 509.029677, 127.257419, 254.514838 +2828, -3.000000, 509.209737, 127.302434, 254.604868 +2829, -3.000000, 509.389797, 127.347449, 254.694898 +2830, -3.000000, 509.569857, 127.392464, 254.784928 +2831, -3.000000, 509.749917, 127.437479, 254.874958 +2832, -3.000000, 509.929977, 127.482494, 254.964988 +2833, -3.000000, 510.110037, 127.527509, 255.055018 +2834, -3.000000, 510.290097, 127.572524, 255.145048 +2835, -3.000000, 510.470157, 127.617539, 255.235078 +2836, -3.000000, 510.650217, 127.662554, 255.325108 +2837, -3.000000, 510.830277, 127.707569, 255.415138 +2838, -3.000000, 511.010337, 127.752584, 255.505168 +2839, -3.000000, 511.190397, 127.797599, 255.595198 +2840, -3.000000, 511.370457, 127.842614, 255.685228 +2841, -3.000000, 511.550517, 127.887629, 255.775258 +2842, -3.000000, 511.730577, 127.932644, 255.865288 +2843, -3.000000, 511.910637, 127.977659, 255.955318 +2844, -3.000000, 512.090697, 128.022674, 256.045348 +2845, -3.000000, 512.270757, 128.067689, 256.135378 +2846, -3.000000, 512.450817, 128.112704, 256.225408 +2847, -3.000000, 512.630877, 128.157719, 256.315438 +2848, -3.000000, 512.810937, 128.202734, 256.405468 +2849, -3.000000, 512.990997, 128.247749, 256.495498 +2850, -3.000000, 513.171057, 128.292764, 256.585529 +2851, -3.000000, 513.351117, 128.337779, 256.675559 +2852, -3.000000, 513.531177, 128.382794, 256.765589 +2853, -3.000000, 513.711237, 128.427809, 256.855619 +2854, -3.000000, 513.891297, 128.472824, 256.945649 +2855, -3.000000, 514.071357, 128.517839, 257.035679 +2856, -3.000000, 514.251417, 128.562854, 257.125709 +2857, -3.000000, 514.431477, 128.607869, 257.215739 +2858, -3.000000, 514.611537, 128.652884, 257.305769 +2859, -3.000000, 514.791597, 128.697899, 257.395799 +2860, -3.000000, 514.971657, 128.742914, 257.485829 +2861, -3.000000, 515.151717, 128.787929, 257.575859 +2862, -3.000000, 515.331777, 128.832944, 257.665889 +2863, -3.000000, 515.511837, 128.877959, 257.755919 +2864, -3.000000, 515.691897, 128.922974, 257.845949 +2865, -3.000000, 515.871957, 128.967989, 257.935979 +2866, -3.000000, 516.052017, 129.013004, 258.026009 +2867, -3.000000, 516.232077, 129.058019, 258.116039 +2868, -3.000000, 516.412137, 129.103034, 258.206069 +2869, -3.000000, 516.592197, 129.148049, 258.296099 +2870, -3.000000, 516.772257, 129.193064, 258.386129 +2871, -3.000000, 516.952317, 129.238079, 258.476159 +2872, -3.000000, 517.132377, 129.283094, 258.566189 +2873, -3.000000, 517.312437, 129.328109, 258.656219 +2874, -3.000000, 517.492497, 129.373124, 258.746249 +2875, -3.000000, 517.672558, 129.418139, 258.836279 +2876, -3.000000, 517.852618, 129.463154, 258.926309 +2877, -3.000000, 518.032678, 129.508169, 259.016339 +2878, -3.000000, 518.212738, 129.553184, 259.106369 +2879, -3.000000, 518.392798, 129.598199, 259.196399 +2880, -3.000000, 518.572858, 129.643214, 259.286429 +2881, -3.000000, 518.752918, 129.688229, 259.376459 +2882, -3.000000, 518.932978, 129.733244, 259.466489 +2883, -3.000000, 519.113038, 129.778259, 259.556519 +2884, -3.000000, 519.293098, 129.823274, 259.646549 +2885, -3.000000, 519.473158, 129.868289, 259.736579 +2886, -3.000000, 519.653218, 129.913304, 259.826609 +2887, -3.000000, 519.833278, 129.958319, 259.916639 +2888, -3.000000, 520.013338, 130.003334, 260.006669 +2889, -3.000000, 520.193398, 130.048349, 260.096699 +2890, -3.000000, 520.373458, 130.093364, 260.186729 +2891, -3.000000, 520.553518, 130.138379, 260.276759 +2892, -3.000000, 520.733578, 130.183394, 260.366789 +2893, -3.000000, 520.913638, 130.228409, 260.456819 +2894, -3.000000, 521.093698, 130.273424, 260.546849 +2895, -3.000000, 521.273758, 130.318439, 260.636879 +2896, -3.000000, 521.453818, 130.363454, 260.726909 +2897, -3.000000, 521.633878, 130.408469, 260.816939 +2898, -3.000000, 521.813938, 130.453484, 260.906969 +2899, -3.000000, 521.993998, 130.498499, 260.996999 +2900, -3.000000, 522.174058, 130.543515, 261.087029 +2901, -3.000000, 522.354118, 130.588530, 261.177059 +2902, -3.000000, 522.534178, 130.633545, 261.267089 +2903, -3.000000, 522.714238, 130.678560, 261.357119 +2904, -3.000000, 522.894298, 130.723575, 261.447149 +2905, -3.000000, 523.074358, 130.768590, 261.537179 +2906, -3.000000, 523.254418, 130.813605, 261.627209 +2907, -3.000000, 523.434478, 130.858620, 261.717239 +2908, -3.000000, 523.614538, 130.903635, 261.807269 +2909, -3.000000, 523.794598, 130.948650, 261.897299 +2910, -3.000000, 523.974658, 130.993665, 261.987329 +2911, -3.000000, 524.154718, 131.038680, 262.077359 +2912, -3.000000, 524.334778, 131.083695, 262.167389 +2913, -3.000000, 524.514838, 131.128710, 262.257419 +2914, -3.000000, 524.694898, 131.173725, 262.347449 +2915, -3.000000, 524.874958, 131.218740, 262.437479 +2916, -3.000000, 525.055018, 131.263755, 262.527509 +2917, -3.000000, 525.235078, 131.308770, 262.617539 +2918, -3.000000, 525.415138, 131.353785, 262.707569 +2919, -3.000000, 525.595198, 131.398800, 262.797599 +2920, -3.000000, 525.775258, 131.443815, 262.887629 +2921, -3.000000, 525.955318, 131.488830, 262.977659 +2922, -3.000000, 526.135378, 131.533845, 263.067689 +2923, -3.000000, 526.315438, 131.578860, 263.157719 +2924, -3.000000, 526.495498, 131.623875, 263.247749 +2925, -3.000000, 526.675559, 131.668890, 263.337779 +2926, -3.000000, 526.855619, 131.713905, 263.427809 +2927, -3.000000, 527.035679, 131.758920, 263.517839 +2928, -3.000000, 527.215739, 131.803935, 263.607869 +2929, -3.000000, 527.395799, 131.848950, 263.697899 +2930, -3.000000, 527.575859, 131.893965, 263.787929 +2931, -3.000000, 527.755919, 131.938980, 263.877959 +2932, -3.000000, 527.935979, 131.983995, 263.967989 +2933, -3.000000, 528.116039, 132.029010, 264.058019 +2934, -3.000000, 528.296099, 132.074025, 264.148049 +2935, -3.000000, 528.476159, 132.119040, 264.238079 +2936, -3.000000, 528.656219, 132.164055, 264.328109 +2937, -3.000000, 528.836279, 132.209070, 264.418139 +2938, -3.000000, 529.016339, 132.254085, 264.508169 +2939, -3.000000, 529.196399, 132.299100, 264.598199 +2940, -3.000000, 529.376459, 132.344115, 264.688229 +2941, -3.000000, 529.556519, 132.389130, 264.778259 +2942, -3.000000, 529.736579, 132.434145, 264.868289 +2943, -3.000000, 529.916639, 132.479160, 264.958319 +2944, -3.000000, 530.096699, 132.524175, 265.048349 +2945, -3.000000, 530.276759, 132.569190, 265.138379 +2946, -3.000000, 530.456819, 132.614205, 265.228409 +2947, -3.000000, 530.636879, 132.659220, 265.318439 +2948, -3.000000, 530.816939, 132.704235, 265.408469 +2949, -3.000000, 530.996999, 132.749250, 265.498499 +2950, -3.000000, 531.177059, 132.794265, 265.588530 +2951, -3.000000, 531.357119, 132.839280, 265.678560 +2952, -3.000000, 531.537179, 132.884295, 265.768590 +2953, -3.000000, 531.717239, 132.929310, 265.858620 +2954, -3.000000, 531.897299, 132.974325, 265.948650 +2955, -3.000000, 532.077359, 133.019340, 266.038680 +2956, -3.000000, 532.257419, 133.064355, 266.128710 +2957, -3.000000, 532.437479, 133.109370, 266.218740 +2958, -3.000000, 532.617539, 133.154385, 266.308770 +2959, -3.000000, 532.797599, 133.199400, 266.398800 +2960, -3.000000, 532.977659, 133.244415, 266.488830 +2961, -3.000000, 533.157719, 133.289430, 266.578860 +2962, -3.000000, 533.337779, 133.334445, 266.668890 +2963, -3.000000, 533.517839, 133.379460, 266.758920 +2964, -3.000000, 533.697899, 133.424475, 266.848950 +2965, -3.000000, 533.877959, 133.469490, 266.938980 +2966, -3.000000, 534.058019, 133.514505, 267.029010 +2967, -3.000000, 534.238079, 133.559520, 267.119040 +2968, -3.000000, 534.418139, 133.604535, 267.209070 +2969, -3.000000, 534.598199, 133.649550, 267.299100 +2970, -3.000000, 534.778259, 133.694565, 267.389130 +2971, -3.000000, 534.958319, 133.739580, 267.479160 +2972, -3.000000, 535.138379, 133.784595, 267.569190 +2973, -3.000000, 535.318439, 133.829610, 267.659220 +2974, -3.000000, 535.498499, 133.874625, 267.749250 +2975, -3.000000, 535.678560, 133.919640, 267.839280 +2976, -3.000000, 535.858620, 133.964655, 267.929310 +2977, -3.000000, 536.038680, 134.009670, 268.019340 +2978, -3.000000, 536.218740, 134.054685, 268.109370 +2979, -3.000000, 536.398800, 134.099700, 268.199400 +2980, -3.000000, 536.578860, 134.144715, 268.289430 +2981, -3.000000, 536.758920, 134.189730, 268.379460 +2982, -3.000000, 536.938980, 134.234745, 268.469490 +2983, -3.000000, 537.119040, 134.279760, 268.559520 +2984, -3.000000, 537.299100, 134.324775, 268.649550 +2985, -3.000000, 537.479160, 134.369790, 268.739580 +2986, -3.000000, 537.659220, 134.414805, 268.829610 +2987, -3.000000, 537.839280, 134.459820, 268.919640 +2988, -3.000000, 538.019340, 134.504835, 269.009670 +2989, -3.000000, 538.199400, 134.549850, 269.099700 +2990, -3.000000, 538.379460, 134.594865, 269.189730 +2991, -3.000000, 538.559520, 134.639880, 269.279760 +2992, -3.000000, 538.739580, 134.684895, 269.369790 +2993, -3.000000, 538.919640, 134.729910, 269.459820 +2994, -3.000000, 539.099700, 134.774925, 269.549850 +2995, -3.000000, 539.279760, 134.819940, 269.639880 +2996, -3.000000, 539.459820, 134.864955, 269.729910 +2997, -3.000000, 539.639880, 134.909970, 269.819940 +2998, -3.000000, 539.819940, 134.954985, 269.909970 +2999, -3.000000, 540.000000, 135.000000, 270.000000 diff --git a/scripts/trajectories/linear-ypr-T15.0-w0.1.csv b/scripts/trajectories/linear-ypr-T15.0-w0.1.csv new file mode 100644 index 0000000000..fa541cc019 --- /dev/null +++ b/scripts/trajectories/linear-ypr-T15.0-w0.1.csv @@ -0,0 +1,3000 @@ +0, 1.000000, 0.000000, 0.000000, 0.000000 +1, 0.999998, 0.000785, 0.000394, 0.001571 +2, 0.999994, 0.001569, 0.000791, 0.003141 +3, 0.999985, 0.002351, 0.001190, 0.004711 +4, 0.999974, 0.003133, 0.001591, 0.006280 +5, 0.999960, 0.003913, 0.001995, 0.007849 +6, 0.999942, 0.004691, 0.002401, 0.009417 +7, 0.999921, 0.005469, 0.002810, 0.010984 +8, 0.999897, 0.006245, 0.003221, 0.012550 +9, 0.999869, 0.007020, 0.003635, 0.014116 +10, 0.999838, 0.007794, 0.004051, 0.015681 +11, 0.999805, 0.008566, 0.004470, 0.017246 +12, 0.999768, 0.009337, 0.004891, 0.018809 +13, 0.999727, 0.010107, 0.005314, 0.020372 +14, 0.999684, 0.010875, 0.005740, 0.021935 +15, 0.999637, 0.011642, 0.006168, 0.023496 +16, 0.999587, 0.012408, 0.006599, 0.025057 +17, 0.999534, 0.013172, 0.007032, 0.026617 +18, 0.999478, 0.013935, 0.007467, 0.028177 +19, 0.999418, 0.014697, 0.007905, 0.029735 +20, 0.999356, 0.015457, 0.008345, 0.031293 +21, 0.999290, 0.016216, 0.008788, 0.032850 +22, 0.999221, 0.016974, 0.009233, 0.034406 +23, 0.999149, 0.017730, 0.009680, 0.035962 +24, 0.999074, 0.018485, 0.010130, 0.037517 +25, 0.998995, 0.019239, 0.010582, 0.039071 +26, 0.998914, 0.019991, 0.011037, 0.040624 +27, 0.998829, 0.020741, 0.011494, 0.042176 +28, 0.998741, 0.021490, 0.011953, 0.043728 +29, 0.998650, 0.022238, 0.012415, 0.045278 +30, 0.998555, 0.022985, 0.012879, 0.046828 +31, 0.998458, 0.023730, 0.013345, 0.048377 +32, 0.998357, 0.024473, 0.013814, 0.049926 +33, 0.998254, 0.025215, 0.014285, 0.051473 +34, 0.998147, 0.025956, 0.014758, 0.053019 +35, 0.998037, 0.026695, 0.015234, 0.054565 +36, 0.997924, 0.027433, 0.015712, 0.056110 +37, 0.997808, 0.028169, 0.016192, 0.057654 +38, 0.997688, 0.028904, 0.016675, 0.059197 +39, 0.997566, 0.029637, 0.017160, 0.060739 +40, 0.997440, 0.030369, 0.017647, 0.062280 +41, 0.997312, 0.031099, 0.018137, 0.063820 +42, 0.997180, 0.031828, 0.018629, 0.065360 +43, 0.997045, 0.032555, 0.019123, 0.066898 +44, 0.996907, 0.033281, 0.019619, 0.068435 +45, 0.996766, 0.034005, 0.020118, 0.069972 +46, 0.996622, 0.034728, 0.020619, 0.071508 +47, 0.996475, 0.035449, 0.021123, 0.073042 +48, 0.996324, 0.036169, 0.021628, 0.074576 +49, 0.996171, 0.036887, 0.022136, 0.076109 +50, 0.996015, 0.037604, 0.022646, 0.077641 +51, 0.995855, 0.038319, 0.023159, 0.079171 +52, 0.995692, 0.039032, 0.023673, 0.080701 +53, 0.995527, 0.039744, 0.024190, 0.082230 +54, 0.995358, 0.040455, 0.024710, 0.083758 +55, 0.995186, 0.041164, 0.025231, 0.085285 +56, 0.995011, 0.041871, 0.025755, 0.086810 +57, 0.994833, 0.042576, 0.026281, 0.088335 +58, 0.994652, 0.043280, 0.026809, 0.089859 +59, 0.994468, 0.043983, 0.027339, 0.091382 +60, 0.994281, 0.044684, 0.027872, 0.092903 +61, 0.994091, 0.045383, 0.028407, 0.094424 +62, 0.993898, 0.046080, 0.028944, 0.095943 +63, 0.993702, 0.046776, 0.029483, 0.097462 +64, 0.993503, 0.047471, 0.030024, 0.098979 +65, 0.993301, 0.048163, 0.030568, 0.100496 +66, 0.993096, 0.048854, 0.031114, 0.102011 +67, 0.992887, 0.049544, 0.031662, 0.103525 +68, 0.992676, 0.050232, 0.032212, 0.105038 +69, 0.992462, 0.050918, 0.032764, 0.106550 +70, 0.992245, 0.051602, 0.033319, 0.108061 +71, 0.992025, 0.052285, 0.033876, 0.109571 +72, 0.991802, 0.052966, 0.034434, 0.111080 +73, 0.991575, 0.053645, 0.034995, 0.112587 +74, 0.991346, 0.054323, 0.035559, 0.114093 +75, 0.991114, 0.054999, 0.036124, 0.115599 +76, 0.990879, 0.055673, 0.036692, 0.117103 +77, 0.990641, 0.056346, 0.037261, 0.118606 +78, 0.990400, 0.057017, 0.037833, 0.120107 +79, 0.990156, 0.057686, 0.038407, 0.121608 +80, 0.989909, 0.058353, 0.038983, 0.123107 +81, 0.989659, 0.059019, 0.039561, 0.124606 +82, 0.989406, 0.059683, 0.040141, 0.126103 +83, 0.989150, 0.060345, 0.040724, 0.127599 +84, 0.988892, 0.061006, 0.041308, 0.129093 +85, 0.988630, 0.061665, 0.041895, 0.130587 +86, 0.988366, 0.062322, 0.042483, 0.132079 +87, 0.988098, 0.062977, 0.043074, 0.133570 +88, 0.987828, 0.063630, 0.043667, 0.135060 +89, 0.987554, 0.064282, 0.044262, 0.136548 +90, 0.987278, 0.064932, 0.044859, 0.138035 +91, 0.986999, 0.065580, 0.045458, 0.139522 +92, 0.986717, 0.066226, 0.046059, 0.141006 +93, 0.986432, 0.066871, 0.046662, 0.142490 +94, 0.986144, 0.067514, 0.047267, 0.143972 +95, 0.985853, 0.068154, 0.047875, 0.145453 +96, 0.985559, 0.068794, 0.048484, 0.146933 +97, 0.985263, 0.069431, 0.049095, 0.148411 +98, 0.984964, 0.070066, 0.049709, 0.149888 +99, 0.984661, 0.070700, 0.050324, 0.151364 +100, 0.984356, 0.071332, 0.050942, 0.152839 +101, 0.984048, 0.071962, 0.051561, 0.154312 +102, 0.983737, 0.072590, 0.052183, 0.155784 +103, 0.983424, 0.073216, 0.052806, 0.157254 +104, 0.983107, 0.073841, 0.053432, 0.158724 +105, 0.982788, 0.074463, 0.054059, 0.160192 +106, 0.982465, 0.075084, 0.054689, 0.161658 +107, 0.982140, 0.075703, 0.055320, 0.163123 +108, 0.981812, 0.076320, 0.055954, 0.164587 +109, 0.981482, 0.076935, 0.056589, 0.166050 +110, 0.981148, 0.077548, 0.057226, 0.167511 +111, 0.980812, 0.078159, 0.057866, 0.168971 +112, 0.980473, 0.078769, 0.058507, 0.170429 +113, 0.980131, 0.079376, 0.059150, 0.171886 +114, 0.979786, 0.079982, 0.059796, 0.173342 +115, 0.979438, 0.080585, 0.060443, 0.174796 +116, 0.979088, 0.081187, 0.061092, 0.176249 +117, 0.978735, 0.081787, 0.061743, 0.177700 +118, 0.978379, 0.082385, 0.062396, 0.179150 +119, 0.978020, 0.082981, 0.063051, 0.180599 +120, 0.977658, 0.083575, 0.063708, 0.182046 +121, 0.977294, 0.084167, 0.064366, 0.183492 +122, 0.976927, 0.084757, 0.065027, 0.184936 +123, 0.976557, 0.085345, 0.065689, 0.186379 +124, 0.976185, 0.085931, 0.066354, 0.187820 +125, 0.975809, 0.086516, 0.067020, 0.189260 +126, 0.975431, 0.087098, 0.067688, 0.190698 +127, 0.975051, 0.087678, 0.068358, 0.192135 +128, 0.974667, 0.088257, 0.069030, 0.193571 +129, 0.974281, 0.088833, 0.069704, 0.195005 +130, 0.973892, 0.089407, 0.070380, 0.196437 +131, 0.973500, 0.089980, 0.071057, 0.197868 +132, 0.973106, 0.090550, 0.071736, 0.199298 +133, 0.972709, 0.091119, 0.072418, 0.200726 +134, 0.972309, 0.091685, 0.073101, 0.202153 +135, 0.971906, 0.092249, 0.073785, 0.203578 +136, 0.971501, 0.092812, 0.074472, 0.205001 +137, 0.971093, 0.093372, 0.075161, 0.206423 +138, 0.970683, 0.093930, 0.075851, 0.207843 +139, 0.970269, 0.094487, 0.076543, 0.209262 +140, 0.969853, 0.095041, 0.077237, 0.210680 +141, 0.969435, 0.095593, 0.077933, 0.212095 +142, 0.969014, 0.096143, 0.078630, 0.213510 +143, 0.968590, 0.096691, 0.079330, 0.214922 +144, 0.968163, 0.097237, 0.080031, 0.216333 +145, 0.967734, 0.097781, 0.080733, 0.217743 +146, 0.967302, 0.098323, 0.081438, 0.219151 +147, 0.966868, 0.098863, 0.082144, 0.220557 +148, 0.966430, 0.099401, 0.082853, 0.221962 +149, 0.965991, 0.099937, 0.083562, 0.223365 +150, 0.965548, 0.100470, 0.084274, 0.224767 +151, 0.965103, 0.101002, 0.084987, 0.226167 +152, 0.964656, 0.101531, 0.085702, 0.227565 +153, 0.964205, 0.102059, 0.086419, 0.228962 +154, 0.963753, 0.102584, 0.087138, 0.230357 +155, 0.963297, 0.103107, 0.087858, 0.231751 +156, 0.962839, 0.103628, 0.088580, 0.233142 +157, 0.962379, 0.104147, 0.089304, 0.234533 +158, 0.961916, 0.104664, 0.090029, 0.235921 +159, 0.961450, 0.105179, 0.090756, 0.237308 +160, 0.960981, 0.105691, 0.091485, 0.238693 +161, 0.960511, 0.106202, 0.092215, 0.240077 +162, 0.960037, 0.106710, 0.092947, 0.241459 +163, 0.959561, 0.107216, 0.093681, 0.242839 +164, 0.959083, 0.107720, 0.094416, 0.244218 +165, 0.958602, 0.108222, 0.095153, 0.245595 +166, 0.958118, 0.108722, 0.095892, 0.246970 +167, 0.957632, 0.109219, 0.096633, 0.248343 +168, 0.957143, 0.109715, 0.097375, 0.249715 +169, 0.956652, 0.110208, 0.098118, 0.251085 +170, 0.956158, 0.110699, 0.098863, 0.252454 +171, 0.955662, 0.111188, 0.099610, 0.253820 +172, 0.955164, 0.111674, 0.100359, 0.255185 +173, 0.954662, 0.112159, 0.101109, 0.256549 +174, 0.954159, 0.112641, 0.101860, 0.257910 +175, 0.953652, 0.113121, 0.102614, 0.259270 +176, 0.953144, 0.113599, 0.103369, 0.260628 +177, 0.952633, 0.114075, 0.104125, 0.261984 +178, 0.952119, 0.114549, 0.104883, 0.263339 +179, 0.951603, 0.115020, 0.105643, 0.264692 +180, 0.951085, 0.115489, 0.106404, 0.266043 +181, 0.950564, 0.115956, 0.107166, 0.267392 +182, 0.950040, 0.116421, 0.107931, 0.268740 +183, 0.949514, 0.116883, 0.108696, 0.270085 +184, 0.948986, 0.117343, 0.109464, 0.271429 +185, 0.948455, 0.117801, 0.110233, 0.272771 +186, 0.947922, 0.118257, 0.111003, 0.274112 +187, 0.947387, 0.118711, 0.111775, 0.275450 +188, 0.946849, 0.119162, 0.112548, 0.276787 +189, 0.946308, 0.119611, 0.113323, 0.278122 +190, 0.945765, 0.120058, 0.114100, 0.279455 +191, 0.945220, 0.120502, 0.114878, 0.280787 +192, 0.944673, 0.120945, 0.115657, 0.282116 +193, 0.944123, 0.121385, 0.116438, 0.283444 +194, 0.943570, 0.121822, 0.117220, 0.284770 +195, 0.943016, 0.122258, 0.118004, 0.286094 +196, 0.942459, 0.122691, 0.118789, 0.287416 +197, 0.941899, 0.123122, 0.119576, 0.288736 +198, 0.941337, 0.123550, 0.120364, 0.290055 +199, 0.940773, 0.123977, 0.121154, 0.291371 +200, 0.940207, 0.124401, 0.121945, 0.292686 +201, 0.939638, 0.124823, 0.122738, 0.293999 +202, 0.939067, 0.125242, 0.123531, 0.295310 +203, 0.938493, 0.125659, 0.124327, 0.296619 +204, 0.937917, 0.126074, 0.125124, 0.297927 +205, 0.937339, 0.126487, 0.125922, 0.299232 +206, 0.936759, 0.126897, 0.126721, 0.300536 +207, 0.936176, 0.127305, 0.127522, 0.301837 +208, 0.935591, 0.127711, 0.128324, 0.303137 +209, 0.935004, 0.128114, 0.129128, 0.304435 +210, 0.934414, 0.128515, 0.129933, 0.305731 +211, 0.933822, 0.128913, 0.130740, 0.307025 +212, 0.933228, 0.129310, 0.131548, 0.308317 +213, 0.932632, 0.129704, 0.132357, 0.309607 +214, 0.932033, 0.130095, 0.133167, 0.310896 +215, 0.931432, 0.130485, 0.133979, 0.312182 +216, 0.930829, 0.130872, 0.134792, 0.313466 +217, 0.930223, 0.131256, 0.135607, 0.314749 +218, 0.929616, 0.131638, 0.136422, 0.316030 +219, 0.929006, 0.132018, 0.137240, 0.317308 +220, 0.928394, 0.132396, 0.138058, 0.318585 +221, 0.927779, 0.132771, 0.138878, 0.319860 +222, 0.927163, 0.133144, 0.139699, 0.321132 +223, 0.926544, 0.133514, 0.140521, 0.322403 +224, 0.925923, 0.133882, 0.141345, 0.323672 +225, 0.925300, 0.134248, 0.142170, 0.324939 +226, 0.924675, 0.134611, 0.142996, 0.326204 +227, 0.924047, 0.134972, 0.143823, 0.327467 +228, 0.923417, 0.135331, 0.144652, 0.328727 +229, 0.922786, 0.135687, 0.145482, 0.329986 +230, 0.922151, 0.136041, 0.146313, 0.331243 +231, 0.921515, 0.136392, 0.147145, 0.332498 +232, 0.920877, 0.136741, 0.147979, 0.333751 +233, 0.920236, 0.137087, 0.148814, 0.335002 +234, 0.919594, 0.137432, 0.149650, 0.336251 +235, 0.918949, 0.137773, 0.150487, 0.337498 +236, 0.918302, 0.138113, 0.151325, 0.338743 +237, 0.917653, 0.138450, 0.152165, 0.339986 +238, 0.917002, 0.138784, 0.153006, 0.341227 +239, 0.916349, 0.139116, 0.153848, 0.342466 +240, 0.915693, 0.139446, 0.154691, 0.343702 +241, 0.915036, 0.139773, 0.155535, 0.344937 +242, 0.914376, 0.140098, 0.156381, 0.346170 +243, 0.913715, 0.140420, 0.157227, 0.347400 +244, 0.913051, 0.140740, 0.158075, 0.348629 +245, 0.912385, 0.141058, 0.158924, 0.349856 +246, 0.911717, 0.141373, 0.159774, 0.351080 +247, 0.911048, 0.141685, 0.160625, 0.352303 +248, 0.910376, 0.141996, 0.161478, 0.353523 +249, 0.909702, 0.142303, 0.162331, 0.354741 +250, 0.909026, 0.142609, 0.163186, 0.355958 +251, 0.908347, 0.142911, 0.164041, 0.357172 +252, 0.907667, 0.143212, 0.164898, 0.358384 +253, 0.906985, 0.143510, 0.165756, 0.359594 +254, 0.906301, 0.143805, 0.166615, 0.360802 +255, 0.905615, 0.144098, 0.167475, 0.362008 +256, 0.904927, 0.144389, 0.168336, 0.363211 +257, 0.904237, 0.144677, 0.169198, 0.364413 +258, 0.903544, 0.144962, 0.170061, 0.365613 +259, 0.902850, 0.145245, 0.170925, 0.366810 +260, 0.902154, 0.145526, 0.171790, 0.368005 +261, 0.901456, 0.145804, 0.172657, 0.369199 +262, 0.900756, 0.146080, 0.173524, 0.370390 +263, 0.900054, 0.146353, 0.174392, 0.371579 +264, 0.899350, 0.146624, 0.175261, 0.372766 +265, 0.898644, 0.146892, 0.176132, 0.373950 +266, 0.897936, 0.147157, 0.177003, 0.375133 +267, 0.897227, 0.147421, 0.177875, 0.376313 +268, 0.896515, 0.147681, 0.178749, 0.377492 +269, 0.895801, 0.147940, 0.179623, 0.378668 +270, 0.895086, 0.148195, 0.180498, 0.379842 +271, 0.894368, 0.148448, 0.181374, 0.381014 +272, 0.893649, 0.148699, 0.182251, 0.382184 +273, 0.892928, 0.148947, 0.183129, 0.383351 +274, 0.892205, 0.149193, 0.184008, 0.384517 +275, 0.891480, 0.149436, 0.184888, 0.385680 +276, 0.890753, 0.149677, 0.185769, 0.386841 +277, 0.890024, 0.149915, 0.186651, 0.388000 +278, 0.889294, 0.150150, 0.187534, 0.389157 +279, 0.888561, 0.150383, 0.188417, 0.390311 +280, 0.887827, 0.150614, 0.189302, 0.391464 +281, 0.887091, 0.150842, 0.190187, 0.392614 +282, 0.886353, 0.151067, 0.191074, 0.393762 +283, 0.885613, 0.151290, 0.191961, 0.394908 +284, 0.884871, 0.151511, 0.192849, 0.396051 +285, 0.884128, 0.151729, 0.193738, 0.397193 +286, 0.883382, 0.151944, 0.194628, 0.398332 +287, 0.882635, 0.152157, 0.195518, 0.399469 +288, 0.881887, 0.152367, 0.196410, 0.400604 +289, 0.881136, 0.152575, 0.197302, 0.401737 +290, 0.880383, 0.152780, 0.198195, 0.402867 +291, 0.879629, 0.152982, 0.199089, 0.403996 +292, 0.878873, 0.153183, 0.199984, 0.405122 +293, 0.878115, 0.153380, 0.200879, 0.406245 +294, 0.877356, 0.153575, 0.201776, 0.407367 +295, 0.876595, 0.153767, 0.202673, 0.408486 +296, 0.875832, 0.153957, 0.203571, 0.409603 +297, 0.875067, 0.154144, 0.204470, 0.410718 +298, 0.874300, 0.154329, 0.205369, 0.411831 +299, 0.873532, 0.154511, 0.206269, 0.412941 +300, 0.872762, 0.154691, 0.207170, 0.414050 +301, 0.871991, 0.154868, 0.208072, 0.415156 +302, 0.871217, 0.155042, 0.208975, 0.416259 +303, 0.870442, 0.155214, 0.209878, 0.417361 +304, 0.869666, 0.155384, 0.210782, 0.418460 +305, 0.868887, 0.155550, 0.211687, 0.419557 +306, 0.868107, 0.155714, 0.212592, 0.420652 +307, 0.867325, 0.155876, 0.213498, 0.421744 +308, 0.866542, 0.156035, 0.214405, 0.422834 +309, 0.865757, 0.156191, 0.215313, 0.423922 +310, 0.864970, 0.156345, 0.216221, 0.425008 +311, 0.864182, 0.156496, 0.217130, 0.426091 +312, 0.863392, 0.156645, 0.218040, 0.427172 +313, 0.862600, 0.156791, 0.218950, 0.428251 +314, 0.861807, 0.156935, 0.219861, 0.429327 +315, 0.861012, 0.157075, 0.220772, 0.430402 +316, 0.860215, 0.157214, 0.221685, 0.431474 +317, 0.859417, 0.157349, 0.222598, 0.432543 +318, 0.858617, 0.157482, 0.223511, 0.433611 +319, 0.857816, 0.157613, 0.224425, 0.434676 +320, 0.857013, 0.157741, 0.225340, 0.435739 +321, 0.856209, 0.157866, 0.226255, 0.436799 +322, 0.855403, 0.157989, 0.227171, 0.437857 +323, 0.854595, 0.158109, 0.228088, 0.438913 +324, 0.853786, 0.158226, 0.229005, 0.439967 +325, 0.852975, 0.158341, 0.229923, 0.441018 +326, 0.852163, 0.158454, 0.230841, 0.442067 +327, 0.851349, 0.158563, 0.231760, 0.443114 +328, 0.850534, 0.158670, 0.232679, 0.444158 +329, 0.849717, 0.158775, 0.233599, 0.445200 +330, 0.848898, 0.158877, 0.234520, 0.446240 +331, 0.848079, 0.158976, 0.235441, 0.447277 +332, 0.847257, 0.159072, 0.236363, 0.448313 +333, 0.846434, 0.159166, 0.237285, 0.449345 +334, 0.845610, 0.159258, 0.238207, 0.450376 +335, 0.844784, 0.159347, 0.239131, 0.451404 +336, 0.843957, 0.159433, 0.240054, 0.452430 +337, 0.843128, 0.159516, 0.240978, 0.453453 +338, 0.842297, 0.159597, 0.241903, 0.454474 +339, 0.841466, 0.159675, 0.242828, 0.455493 +340, 0.840632, 0.159751, 0.243754, 0.456509 +341, 0.839798, 0.159824, 0.244680, 0.457523 +342, 0.838962, 0.159894, 0.245606, 0.458535 +343, 0.838124, 0.159962, 0.246533, 0.459545 +344, 0.837285, 0.160027, 0.247461, 0.460552 +345, 0.836445, 0.160090, 0.248389, 0.461556 +346, 0.835603, 0.160150, 0.249317, 0.462559 +347, 0.834760, 0.160207, 0.250246, 0.463559 +348, 0.833915, 0.160262, 0.251175, 0.464556 +349, 0.833069, 0.160314, 0.252104, 0.465552 +350, 0.832222, 0.160363, 0.253034, 0.466544 +351, 0.831373, 0.160410, 0.253965, 0.467535 +352, 0.830523, 0.160454, 0.254896, 0.468523 +353, 0.829672, 0.160495, 0.255827, 0.469509 +354, 0.828819, 0.160534, 0.256758, 0.470492 +355, 0.827965, 0.160570, 0.257690, 0.471473 +356, 0.827109, 0.160604, 0.258622, 0.472452 +357, 0.826252, 0.160635, 0.259555, 0.473429 +358, 0.825394, 0.160663, 0.260488, 0.474402 +359, 0.824535, 0.160689, 0.261421, 0.475374 +360, 0.823674, 0.160712, 0.262355, 0.476343 +361, 0.822812, 0.160732, 0.263289, 0.477310 +362, 0.821948, 0.160750, 0.264223, 0.478274 +363, 0.821084, 0.160765, 0.265157, 0.479237 +364, 0.820218, 0.160777, 0.266092, 0.480196 +365, 0.819350, 0.160787, 0.267027, 0.481153 +366, 0.818482, 0.160794, 0.267963, 0.482108 +367, 0.817612, 0.160799, 0.268899, 0.483061 +368, 0.816741, 0.160801, 0.269835, 0.484011 +369, 0.815869, 0.160800, 0.270771, 0.484959 +370, 0.814995, 0.160796, 0.271707, 0.485904 +371, 0.814120, 0.160790, 0.272644, 0.486847 +372, 0.813244, 0.160781, 0.273581, 0.487787 +373, 0.812367, 0.160770, 0.274519, 0.488726 +374, 0.811488, 0.160756, 0.275456, 0.489661 +375, 0.810609, 0.160739, 0.276394, 0.490595 +376, 0.809728, 0.160720, 0.277332, 0.491525 +377, 0.808846, 0.160698, 0.278270, 0.492454 +378, 0.807962, 0.160673, 0.279208, 0.493380 +379, 0.807078, 0.160646, 0.280147, 0.494304 +380, 0.806192, 0.160616, 0.281086, 0.495225 +381, 0.805305, 0.160584, 0.282024, 0.496144 +382, 0.804417, 0.160548, 0.282964, 0.497060 +383, 0.803528, 0.160511, 0.283903, 0.497974 +384, 0.802638, 0.160470, 0.284842, 0.498886 +385, 0.801746, 0.160427, 0.285782, 0.499795 +386, 0.800853, 0.160381, 0.286722, 0.500702 +387, 0.799960, 0.160333, 0.287661, 0.501606 +388, 0.799065, 0.160282, 0.288601, 0.502508 +389, 0.798169, 0.160228, 0.289541, 0.503408 +390, 0.797272, 0.160171, 0.290482, 0.504305 +391, 0.796374, 0.160112, 0.291422, 0.505199 +392, 0.795474, 0.160051, 0.292362, 0.506092 +393, 0.794574, 0.159986, 0.293303, 0.506982 +394, 0.793672, 0.159919, 0.294244, 0.507869 +395, 0.792770, 0.159849, 0.295184, 0.508754 +396, 0.791866, 0.159777, 0.296125, 0.509636 +397, 0.790961, 0.159702, 0.297066, 0.510516 +398, 0.790056, 0.159625, 0.298007, 0.511394 +399, 0.789149, 0.159544, 0.298948, 0.512269 +400, 0.788241, 0.159461, 0.299889, 0.513142 +401, 0.787332, 0.159376, 0.300830, 0.514013 +402, 0.786422, 0.159288, 0.301771, 0.514880 +403, 0.785511, 0.159197, 0.302712, 0.515746 +404, 0.784599, 0.159103, 0.303653, 0.516609 +405, 0.783686, 0.159007, 0.304594, 0.517470 +406, 0.782772, 0.158908, 0.305535, 0.518328 +407, 0.781857, 0.158807, 0.306476, 0.519184 +408, 0.780942, 0.158703, 0.307418, 0.520037 +409, 0.780025, 0.158596, 0.308359, 0.520888 +410, 0.779107, 0.158486, 0.309300, 0.521736 +411, 0.778188, 0.158374, 0.310241, 0.522582 +412, 0.777268, 0.158260, 0.311182, 0.523426 +413, 0.776347, 0.158142, 0.312123, 0.524267 +414, 0.775425, 0.158022, 0.313064, 0.525105 +415, 0.774503, 0.157900, 0.314004, 0.525941 +416, 0.773579, 0.157774, 0.314945, 0.526775 +417, 0.772655, 0.157646, 0.315886, 0.527606 +418, 0.771729, 0.157516, 0.316826, 0.528435 +419, 0.770803, 0.157383, 0.317767, 0.529262 +420, 0.769876, 0.157247, 0.318707, 0.530086 +421, 0.768947, 0.157108, 0.319648, 0.530907 +422, 0.768018, 0.156967, 0.320588, 0.531726 +423, 0.767088, 0.156823, 0.321528, 0.532543 +424, 0.766158, 0.156677, 0.322468, 0.533357 +425, 0.765226, 0.156528, 0.323408, 0.534169 +426, 0.764293, 0.156376, 0.324347, 0.534978 +427, 0.763360, 0.156222, 0.325287, 0.535785 +428, 0.762426, 0.156065, 0.326226, 0.536589 +429, 0.761490, 0.155905, 0.327165, 0.537391 +430, 0.760555, 0.155743, 0.328104, 0.538190 +431, 0.759618, 0.155578, 0.329043, 0.538987 +432, 0.758680, 0.155410, 0.329982, 0.539782 +433, 0.757742, 0.155240, 0.330920, 0.540574 +434, 0.756802, 0.155067, 0.331859, 0.541363 +435, 0.755862, 0.154892, 0.332797, 0.542150 +436, 0.754922, 0.154714, 0.333735, 0.542935 +437, 0.753980, 0.154533, 0.334672, 0.543717 +438, 0.753037, 0.154350, 0.335610, 0.544497 +439, 0.752094, 0.154164, 0.336547, 0.545274 +440, 0.751150, 0.153975, 0.337484, 0.546049 +441, 0.750206, 0.153784, 0.338421, 0.546821 +442, 0.749260, 0.153590, 0.339357, 0.547591 +443, 0.748314, 0.153393, 0.340293, 0.548359 +444, 0.747367, 0.153194, 0.341229, 0.549124 +445, 0.746419, 0.152993, 0.342165, 0.549886 +446, 0.745471, 0.152788, 0.343100, 0.550646 +447, 0.744522, 0.152581, 0.344035, 0.551404 +448, 0.743572, 0.152372, 0.344970, 0.552159 +449, 0.742621, 0.152159, 0.345904, 0.552912 +450, 0.741670, 0.151944, 0.346839, 0.553662 +451, 0.740718, 0.151727, 0.347773, 0.554410 +452, 0.739765, 0.151507, 0.348706, 0.555155 +453, 0.738812, 0.151284, 0.349639, 0.555898 +454, 0.737858, 0.151059, 0.350572, 0.556639 +455, 0.736903, 0.150831, 0.351505, 0.557377 +456, 0.735948, 0.150600, 0.352437, 0.558112 +457, 0.734992, 0.150367, 0.353369, 0.558845 +458, 0.734035, 0.150132, 0.354300, 0.559576 +459, 0.733078, 0.149893, 0.355231, 0.560304 +460, 0.732120, 0.149652, 0.356162, 0.561029 +461, 0.731161, 0.149409, 0.357092, 0.561753 +462, 0.730202, 0.149162, 0.358022, 0.562473 +463, 0.729242, 0.148914, 0.358952, 0.563192 +464, 0.728282, 0.148662, 0.359881, 0.563907 +465, 0.727320, 0.148408, 0.360809, 0.564621 +466, 0.726359, 0.148152, 0.361738, 0.565332 +467, 0.725397, 0.147893, 0.362665, 0.566040 +468, 0.724434, 0.147631, 0.363593, 0.566746 +469, 0.723470, 0.147366, 0.364520, 0.567449 +470, 0.722507, 0.147099, 0.365446, 0.568151 +471, 0.721542, 0.146830, 0.366372, 0.568849 +472, 0.720577, 0.146558, 0.367298, 0.569545 +473, 0.719611, 0.146283, 0.368223, 0.570239 +474, 0.718645, 0.146006, 0.369148, 0.570930 +475, 0.717679, 0.145726, 0.370072, 0.571619 +476, 0.716711, 0.145443, 0.370996, 0.572305 +477, 0.715744, 0.145158, 0.371919, 0.572989 +478, 0.714775, 0.144870, 0.372842, 0.573671 +479, 0.713807, 0.144580, 0.373764, 0.574350 +480, 0.712837, 0.144287, 0.374685, 0.575026 +481, 0.711868, 0.143992, 0.375606, 0.575700 +482, 0.710897, 0.143694, 0.376527, 0.576372 +483, 0.709927, 0.143393, 0.377447, 0.577041 +484, 0.708955, 0.143090, 0.378367, 0.577708 +485, 0.707984, 0.142785, 0.379286, 0.578372 +486, 0.707012, 0.142476, 0.380204, 0.579034 +487, 0.706039, 0.142166, 0.381122, 0.579693 +488, 0.705066, 0.141852, 0.382039, 0.580350 +489, 0.704092, 0.141536, 0.382956, 0.581004 +490, 0.703119, 0.141218, 0.383872, 0.581656 +491, 0.702144, 0.140897, 0.384787, 0.582306 +492, 0.701169, 0.140573, 0.385702, 0.582953 +493, 0.700194, 0.140247, 0.386617, 0.583598 +494, 0.699219, 0.139918, 0.387530, 0.584240 +495, 0.698243, 0.139587, 0.388443, 0.584880 +496, 0.697266, 0.139253, 0.389356, 0.585517 +497, 0.696290, 0.138917, 0.390268, 0.586152 +498, 0.695312, 0.138578, 0.391179, 0.586785 +499, 0.694335, 0.138236, 0.392089, 0.587415 +500, 0.693357, 0.137892, 0.392999, 0.588042 +501, 0.692379, 0.137546, 0.393908, 0.588667 +502, 0.691400, 0.137197, 0.394817, 0.589290 +503, 0.690421, 0.136845, 0.395725, 0.589910 +504, 0.689442, 0.136491, 0.396632, 0.590528 +505, 0.688462, 0.136134, 0.397538, 0.591144 +506, 0.687482, 0.135775, 0.398444, 0.591757 +507, 0.686502, 0.135413, 0.399349, 0.592367 +508, 0.685521, 0.135049, 0.400254, 0.592975 +509, 0.684540, 0.134682, 0.401157, 0.593581 +510, 0.683559, 0.134313, 0.402060, 0.594184 +511, 0.682577, 0.133941, 0.402962, 0.594785 +512, 0.681596, 0.133567, 0.403864, 0.595383 +513, 0.680613, 0.133190, 0.404765, 0.595979 +514, 0.679631, 0.132810, 0.405665, 0.596573 +515, 0.678648, 0.132429, 0.406564, 0.597164 +516, 0.677665, 0.132044, 0.407462, 0.597753 +517, 0.676682, 0.131657, 0.408360, 0.598339 +518, 0.675699, 0.131268, 0.409257, 0.598923 +519, 0.674715, 0.130876, 0.410153, 0.599504 +520, 0.673731, 0.130482, 0.411049, 0.600083 +521, 0.672747, 0.130085, 0.411943, 0.600660 +522, 0.671763, 0.129685, 0.412837, 0.601234 +523, 0.670778, 0.129284, 0.413730, 0.601806 +524, 0.669793, 0.128879, 0.414622, 0.602375 +525, 0.668808, 0.128472, 0.415514, 0.602942 +526, 0.667823, 0.128063, 0.416404, 0.603507 +527, 0.666837, 0.127651, 0.417294, 0.604069 +528, 0.665852, 0.127237, 0.418183, 0.604628 +529, 0.664866, 0.126820, 0.419071, 0.605186 +530, 0.663880, 0.126401, 0.419958, 0.605741 +531, 0.662894, 0.125979, 0.420844, 0.606293 +532, 0.661907, 0.125555, 0.421729, 0.606843 +533, 0.660921, 0.125129, 0.422614, 0.607391 +534, 0.659934, 0.124700, 0.423498, 0.607936 +535, 0.658948, 0.124268, 0.424380, 0.608479 +536, 0.657961, 0.123834, 0.425262, 0.609020 +537, 0.656974, 0.123398, 0.426143, 0.609558 +538, 0.655986, 0.122959, 0.427023, 0.610093 +539, 0.654999, 0.122517, 0.427903, 0.610627 +540, 0.654012, 0.122074, 0.428781, 0.611158 +541, 0.653024, 0.121627, 0.429658, 0.611686 +542, 0.652037, 0.121179, 0.430535, 0.612212 +543, 0.651049, 0.120727, 0.431410, 0.612736 +544, 0.650061, 0.120274, 0.432285, 0.613257 +545, 0.649073, 0.119818, 0.433158, 0.613776 +546, 0.648085, 0.119360, 0.434031, 0.614293 +547, 0.647097, 0.118899, 0.434903, 0.614807 +548, 0.646109, 0.118435, 0.435773, 0.615319 +549, 0.645121, 0.117970, 0.436643, 0.615829 +550, 0.644133, 0.117502, 0.437512, 0.616336 +551, 0.643145, 0.117031, 0.438379, 0.616840 +552, 0.642156, 0.116558, 0.439246, 0.617343 +553, 0.641168, 0.116083, 0.440112, 0.617843 +554, 0.640180, 0.115605, 0.440977, 0.618340 +555, 0.639192, 0.115125, 0.441840, 0.618836 +556, 0.638203, 0.114642, 0.442703, 0.619328 +557, 0.637215, 0.114157, 0.443565, 0.619819 +558, 0.636226, 0.113670, 0.444426, 0.620307 +559, 0.635238, 0.113180, 0.445285, 0.620793 +560, 0.634250, 0.112688, 0.446144, 0.621276 +561, 0.633261, 0.112194, 0.447001, 0.621758 +562, 0.632273, 0.111697, 0.447858, 0.622236 +563, 0.631285, 0.111198, 0.448713, 0.622713 +564, 0.630297, 0.110696, 0.449568, 0.623187 +565, 0.629308, 0.110192, 0.450421, 0.623658 +566, 0.628320, 0.109686, 0.451273, 0.624128 +567, 0.627332, 0.109177, 0.452124, 0.624595 +568, 0.626344, 0.108666, 0.452974, 0.625059 +569, 0.625356, 0.108152, 0.453823, 0.625522 +570, 0.624368, 0.107636, 0.454671, 0.625982 +571, 0.623380, 0.107118, 0.455517, 0.626439 +572, 0.622393, 0.106598, 0.456363, 0.626895 +573, 0.621405, 0.106075, 0.457207, 0.627348 +574, 0.620417, 0.105550, 0.458051, 0.627798 +575, 0.619430, 0.105022, 0.458893, 0.628247 +576, 0.618443, 0.104492, 0.459734, 0.628693 +577, 0.617455, 0.103960, 0.460574, 0.629137 +578, 0.616468, 0.103425, 0.461413, 0.629578 +579, 0.615481, 0.102888, 0.462250, 0.630017 +580, 0.614495, 0.102349, 0.463087, 0.630454 +581, 0.613508, 0.101808, 0.463922, 0.630888 +582, 0.612521, 0.101264, 0.464756, 0.631320 +583, 0.611535, 0.100718, 0.465589, 0.631750 +584, 0.610549, 0.100169, 0.466420, 0.632178 +585, 0.609563, 0.099618, 0.467251, 0.632603 +586, 0.608577, 0.099065, 0.468080, 0.633026 +587, 0.607591, 0.098510, 0.468908, 0.633446 +588, 0.606605, 0.097952, 0.469735, 0.633865 +589, 0.605620, 0.097392, 0.470561, 0.634281 +590, 0.604635, 0.096830, 0.471385, 0.634694 +591, 0.603650, 0.096265, 0.472208, 0.635106 +592, 0.602665, 0.095699, 0.473030, 0.635515 +593, 0.601680, 0.095129, 0.473851, 0.635922 +594, 0.600696, 0.094558, 0.474670, 0.636326 +595, 0.599712, 0.093984, 0.475488, 0.636729 +596, 0.598728, 0.093408, 0.476305, 0.637129 +597, 0.597744, 0.092830, 0.477121, 0.637526 +598, 0.596761, 0.092250, 0.477935, 0.637922 +599, 0.595778, 0.091667, 0.478748, 0.638315 +600, 0.594795, 0.091082, 0.479560, 0.638706 +601, 0.593812, 0.090495, 0.480371, 0.639095 +602, 0.592830, 0.089905, 0.481180, 0.639481 +603, 0.591847, 0.089314, 0.481988, 0.639865 +604, 0.590866, 0.088720, 0.482794, 0.640247 +605, 0.589884, 0.088124, 0.483600, 0.640627 +606, 0.588903, 0.087525, 0.484404, 0.641004 +607, 0.587922, 0.086925, 0.485206, 0.641379 +608, 0.586941, 0.086322, 0.486008, 0.641752 +609, 0.585960, 0.085717, 0.486808, 0.642123 +610, 0.584980, 0.085109, 0.487606, 0.642491 +611, 0.584000, 0.084500, 0.488404, 0.642857 +612, 0.583021, 0.083888, 0.489199, 0.643221 +613, 0.582042, 0.083274, 0.489994, 0.643583 +614, 0.581063, 0.082658, 0.490787, 0.643942 +615, 0.580084, 0.082040, 0.491579, 0.644299 +616, 0.579106, 0.081419, 0.492369, 0.644654 +617, 0.578128, 0.080797, 0.493159, 0.645007 +618, 0.577151, 0.080172, 0.493946, 0.645358 +619, 0.576174, 0.079545, 0.494732, 0.645706 +620, 0.575197, 0.078915, 0.495517, 0.646052 +621, 0.574221, 0.078284, 0.496301, 0.646396 +622, 0.573245, 0.077650, 0.497083, 0.646738 +623, 0.572269, 0.077015, 0.497863, 0.647077 +624, 0.571294, 0.076377, 0.498643, 0.647414 +625, 0.570319, 0.075737, 0.499420, 0.647750 +626, 0.569345, 0.075095, 0.500197, 0.648082 +627, 0.568370, 0.074450, 0.500972, 0.648413 +628, 0.567397, 0.073804, 0.501745, 0.648742 +629, 0.566424, 0.073155, 0.502517, 0.649068 +630, 0.565451, 0.072504, 0.503288, 0.649392 +631, 0.564478, 0.071851, 0.504057, 0.649714 +632, 0.563506, 0.071196, 0.504825, 0.650034 +633, 0.562535, 0.070539, 0.505591, 0.650351 +634, 0.561564, 0.069880, 0.506355, 0.650667 +635, 0.560593, 0.069218, 0.507119, 0.650980 +636, 0.559623, 0.068555, 0.507880, 0.651291 +637, 0.558653, 0.067889, 0.508640, 0.651600 +638, 0.557684, 0.067222, 0.509399, 0.651907 +639, 0.556715, 0.066552, 0.510156, 0.652211 +640, 0.555747, 0.065880, 0.510912, 0.652514 +641, 0.554779, 0.065206, 0.511666, 0.652814 +642, 0.553812, 0.064530, 0.512419, 0.653112 +643, 0.552845, 0.063852, 0.513170, 0.653408 +644, 0.551879, 0.063172, 0.513920, 0.653702 +645, 0.550913, 0.062489, 0.514668, 0.653993 +646, 0.549947, 0.061805, 0.515414, 0.654283 +647, 0.548982, 0.061118, 0.516159, 0.654570 +648, 0.548018, 0.060430, 0.516903, 0.654856 +649, 0.547054, 0.059739, 0.517645, 0.655139 +650, 0.546091, 0.059047, 0.518385, 0.655420 +651, 0.545128, 0.058352, 0.519124, 0.655699 +652, 0.544166, 0.057655, 0.519861, 0.655976 +653, 0.543204, 0.056957, 0.520596, 0.656250 +654, 0.542243, 0.056256, 0.521330, 0.656523 +655, 0.541283, 0.055553, 0.522063, 0.656793 +656, 0.540323, 0.054848, 0.522794, 0.657062 +657, 0.539363, 0.054142, 0.523523, 0.657328 +658, 0.538404, 0.053433, 0.524250, 0.657592 +659, 0.537446, 0.052722, 0.524976, 0.657854 +660, 0.536488, 0.052009, 0.525701, 0.658114 +661, 0.535531, 0.051294, 0.526424, 0.658372 +662, 0.534574, 0.050577, 0.527145, 0.658628 +663, 0.533618, 0.049858, 0.527864, 0.658882 +664, 0.532663, 0.049138, 0.528582, 0.659133 +665, 0.531708, 0.048415, 0.529298, 0.659383 +666, 0.530754, 0.047690, 0.530013, 0.659630 +667, 0.529800, 0.046963, 0.530726, 0.659876 +668, 0.528847, 0.046234, 0.531437, 0.660119 +669, 0.527895, 0.045504, 0.532147, 0.660360 +670, 0.526943, 0.044771, 0.532855, 0.660600 +671, 0.525992, 0.044036, 0.533561, 0.660837 +672, 0.525042, 0.043300, 0.534266, 0.661072 +673, 0.524092, 0.042561, 0.534969, 0.661305 +674, 0.523143, 0.041821, 0.535670, 0.661536 +675, 0.522195, 0.041079, 0.536370, 0.661765 +676, 0.521247, 0.040334, 0.537067, 0.661992 +677, 0.520300, 0.039588, 0.537764, 0.662217 +678, 0.519353, 0.038840, 0.538458, 0.662440 +679, 0.518407, 0.038090, 0.539151, 0.662661 +680, 0.517462, 0.037338, 0.539842, 0.662880 +681, 0.516518, 0.036584, 0.540531, 0.663097 +682, 0.515574, 0.035828, 0.541219, 0.663311 +683, 0.514631, 0.035070, 0.541905, 0.663524 +684, 0.513689, 0.034311, 0.542589, 0.663735 +685, 0.512747, 0.033549, 0.543271, 0.663944 +686, 0.511806, 0.032786, 0.543952, 0.664151 +687, 0.510866, 0.032021, 0.544631, 0.664356 +688, 0.509926, 0.031253, 0.545308, 0.664558 +689, 0.508987, 0.030484, 0.545983, 0.664759 +690, 0.508049, 0.029714, 0.546657, 0.664958 +691, 0.507112, 0.028941, 0.547329, 0.665155 +692, 0.506175, 0.028166, 0.547999, 0.665350 +693, 0.505239, 0.027390, 0.548667, 0.665543 +694, 0.504304, 0.026612, 0.549334, 0.665734 +695, 0.503370, 0.025832, 0.549999, 0.665923 +696, 0.502436, 0.025050, 0.550662, 0.666110 +697, 0.501503, 0.024266, 0.551323, 0.666295 +698, 0.500571, 0.023480, 0.551982, 0.666478 +699, 0.499640, 0.022693, 0.552640, 0.666659 +700, 0.498709, 0.021904, 0.553296, 0.666838 +701, 0.497779, 0.021113, 0.553950, 0.667016 +702, 0.496850, 0.020320, 0.554602, 0.667191 +703, 0.495922, 0.019525, 0.555252, 0.667364 +704, 0.494995, 0.018729, 0.555900, 0.667536 +705, 0.494068, 0.017931, 0.556547, 0.667705 +706, 0.493142, 0.017131, 0.557192, 0.667873 +707, 0.492217, 0.016329, 0.557835, 0.668039 +708, 0.491293, 0.015525, 0.558476, 0.668202 +709, 0.490370, 0.014720, 0.559115, 0.668364 +710, 0.489447, 0.013913, 0.559753, 0.668524 +711, 0.488525, 0.013104, 0.560389, 0.668682 +712, 0.487604, 0.012293, 0.561022, 0.668838 +713, 0.486684, 0.011481, 0.561654, 0.668993 +714, 0.485765, 0.010667, 0.562284, 0.669145 +715, 0.484847, 0.009851, 0.562912, 0.669296 +716, 0.483929, 0.009034, 0.563538, 0.669444 +717, 0.483012, 0.008214, 0.564163, 0.669591 +718, 0.482096, 0.007393, 0.564785, 0.669736 +719, 0.481181, 0.006571, 0.565406, 0.669879 +720, 0.480267, 0.005746, 0.566025, 0.670020 +721, 0.479354, 0.004920, 0.566641, 0.670159 +722, 0.478441, 0.004092, 0.567256, 0.670296 +723, 0.477530, 0.003263, 0.567869, 0.670432 +724, 0.476619, 0.002431, 0.568480, 0.670566 +725, 0.475709, 0.001599, 0.569090, 0.670698 +726, 0.474801, 0.000764, 0.569697, 0.670827 +727, 0.473893, -0.000072, 0.570302, 0.670956 +728, 0.472985, -0.000910, 0.570905, 0.671082 +729, 0.472079, -0.001750, 0.571507, 0.671206 +730, 0.471174, -0.002591, 0.572106, 0.671329 +731, 0.470269, -0.003434, 0.572704, 0.671450 +732, 0.469366, -0.004279, 0.573300, 0.671569 +733, 0.468463, -0.005125, 0.573893, 0.671686 +734, 0.467562, -0.005973, 0.574485, 0.671802 +735, 0.466661, -0.006822, 0.575075, 0.671915 +736, 0.465761, -0.007673, 0.575663, 0.672027 +737, 0.464862, -0.008526, 0.576248, 0.672137 +738, 0.463965, -0.009380, 0.576832, 0.672245 +739, 0.463068, -0.010236, 0.577414, 0.672351 +740, 0.462172, -0.011094, 0.577994, 0.672456 +741, 0.461277, -0.011953, 0.578572, 0.672559 +742, 0.460382, -0.012813, 0.579148, 0.672660 +743, 0.459489, -0.013676, 0.579722, 0.672759 +744, 0.458597, -0.014540, 0.580294, 0.672857 +745, 0.457706, -0.015405, 0.580864, 0.672953 +746, 0.456816, -0.016272, 0.581432, 0.673047 +747, 0.455926, -0.017141, 0.581998, 0.673139 +748, 0.455038, -0.018011, 0.582562, 0.673229 +749, 0.454151, -0.018883, 0.583124, 0.673318 +750, 0.453264, -0.019756, 0.583684, 0.673405 +751, 0.452379, -0.020631, 0.584242, 0.673490 +752, 0.451495, -0.021507, 0.584797, 0.673574 +753, 0.450611, -0.022385, 0.585351, 0.673656 +754, 0.449729, -0.023264, 0.585903, 0.673736 +755, 0.448848, -0.024145, 0.586453, 0.673814 +756, 0.447967, -0.025028, 0.587001, 0.673891 +757, 0.447088, -0.025912, 0.587546, 0.673966 +758, 0.446210, -0.026797, 0.588090, 0.674039 +759, 0.445332, -0.027684, 0.588632, 0.674111 +760, 0.444456, -0.028573, 0.589171, 0.674181 +761, 0.443581, -0.029463, 0.589709, 0.674249 +762, 0.442707, -0.030354, 0.590244, 0.674315 +763, 0.441834, -0.031247, 0.590778, 0.674380 +764, 0.440961, -0.032141, 0.591309, 0.674443 +765, 0.440090, -0.033037, 0.591838, 0.674505 +766, 0.439220, -0.033935, 0.592366, 0.674564 +767, 0.438351, -0.034833, 0.592891, 0.674622 +768, 0.437483, -0.035733, 0.593414, 0.674679 +769, 0.436617, -0.036635, 0.593935, 0.674734 +770, 0.435751, -0.037538, 0.594453, 0.674787 +771, 0.434886, -0.038443, 0.594970, 0.674838 +772, 0.434022, -0.039349, 0.595485, 0.674888 +773, 0.433160, -0.040256, 0.595998, 0.674936 +774, 0.432298, -0.041165, 0.596508, 0.674983 +775, 0.431438, -0.042075, 0.597016, 0.675028 +776, 0.430578, -0.042987, 0.597523, 0.675071 +777, 0.429720, -0.043900, 0.598027, 0.675113 +778, 0.428863, -0.044814, 0.598529, 0.675153 +779, 0.428007, -0.045730, 0.599029, 0.675191 +780, 0.427152, -0.046647, 0.599527, 0.675228 +781, 0.426298, -0.047565, 0.600022, 0.675264 +782, 0.425445, -0.048485, 0.600516, 0.675297 +783, 0.424594, -0.049406, 0.601007, 0.675329 +784, 0.423743, -0.050329, 0.601496, 0.675360 +785, 0.422894, -0.051253, 0.601984, 0.675389 +786, 0.422045, -0.052178, 0.602469, 0.675416 +787, 0.421198, -0.053105, 0.602951, 0.675442 +788, 0.420352, -0.054033, 0.603432, 0.675466 +789, 0.419507, -0.054962, 0.603911, 0.675489 +790, 0.418663, -0.055893, 0.604387, 0.675510 +791, 0.417821, -0.056825, 0.604861, 0.675529 +792, 0.416979, -0.057758, 0.605333, 0.675547 +793, 0.416139, -0.058692, 0.605803, 0.675564 +794, 0.415299, -0.059628, 0.606271, 0.675578 +795, 0.414461, -0.060565, 0.606737, 0.675592 +796, 0.413624, -0.061504, 0.607200, 0.675604 +797, 0.412789, -0.062443, 0.607661, 0.675614 +798, 0.411954, -0.063384, 0.608120, 0.675623 +799, 0.411120, -0.064327, 0.608577, 0.675630 +800, 0.410288, -0.065270, 0.609032, 0.675636 +801, 0.409457, -0.066215, 0.609485, 0.675640 +802, 0.408627, -0.067161, 0.609935, 0.675643 +803, 0.407798, -0.068108, 0.610383, 0.675644 +804, 0.406970, -0.069057, 0.610829, 0.675644 +805, 0.406144, -0.070006, 0.611273, 0.675642 +806, 0.405319, -0.070957, 0.611714, 0.675639 +807, 0.404495, -0.071909, 0.612154, 0.675634 +808, 0.403672, -0.072863, 0.612591, 0.675628 +809, 0.402850, -0.073817, 0.613026, 0.675620 +810, 0.402030, -0.074773, 0.613458, 0.675611 +811, 0.401210, -0.075730, 0.613889, 0.675600 +812, 0.400392, -0.076688, 0.614317, 0.675588 +813, 0.399575, -0.077648, 0.614743, 0.675575 +814, 0.398759, -0.078608, 0.615167, 0.675560 +815, 0.397945, -0.079570, 0.615589, 0.675544 +816, 0.397132, -0.080533, 0.616008, 0.675526 +817, 0.396320, -0.081497, 0.616425, 0.675507 +818, 0.395509, -0.082462, 0.616840, 0.675486 +819, 0.394699, -0.083428, 0.617253, 0.675464 +820, 0.393891, -0.084396, 0.617663, 0.675440 +821, 0.393084, -0.085364, 0.618071, 0.675415 +822, 0.392278, -0.086334, 0.618477, 0.675389 +823, 0.391473, -0.087305, 0.618881, 0.675361 +824, 0.390669, -0.088277, 0.619283, 0.675332 +825, 0.389867, -0.089250, 0.619682, 0.675302 +826, 0.389066, -0.090224, 0.620079, 0.675270 +827, 0.388266, -0.091199, 0.620473, 0.675237 +828, 0.387468, -0.092176, 0.620866, 0.675202 +829, 0.386671, -0.093153, 0.621256, 0.675166 +830, 0.385875, -0.094132, 0.621644, 0.675129 +831, 0.385080, -0.095111, 0.622030, 0.675090 +832, 0.384286, -0.096092, 0.622413, 0.675050 +833, 0.383494, -0.097074, 0.622794, 0.675009 +834, 0.382703, -0.098056, 0.623173, 0.674966 +835, 0.381913, -0.099040, 0.623549, 0.674922 +836, 0.381125, -0.100025, 0.623924, 0.674876 +837, 0.380338, -0.101011, 0.624296, 0.674829 +838, 0.379552, -0.101998, 0.624665, 0.674781 +839, 0.378767, -0.102986, 0.625033, 0.674732 +840, 0.377984, -0.103975, 0.625398, 0.674681 +841, 0.377202, -0.104965, 0.625761, 0.674629 +842, 0.376421, -0.105956, 0.626121, 0.674576 +843, 0.375642, -0.106948, 0.626480, 0.674521 +844, 0.374863, -0.107941, 0.626835, 0.674465 +845, 0.374087, -0.108935, 0.627189, 0.674408 +846, 0.373311, -0.109930, 0.627541, 0.674349 +847, 0.372537, -0.110926, 0.627890, 0.674290 +848, 0.371764, -0.111923, 0.628236, 0.674229 +849, 0.370992, -0.112921, 0.628581, 0.674166 +850, 0.370221, -0.113920, 0.628923, 0.674103 +851, 0.369452, -0.114920, 0.629263, 0.674038 +852, 0.368684, -0.115920, 0.629600, 0.673972 +853, 0.367918, -0.116922, 0.629935, 0.673904 +854, 0.367153, -0.117925, 0.630268, 0.673836 +855, 0.366389, -0.118928, 0.630599, 0.673766 +856, 0.365626, -0.119933, 0.630927, 0.673695 +857, 0.364865, -0.120938, 0.631253, 0.673622 +858, 0.364105, -0.121944, 0.631577, 0.673549 +859, 0.363346, -0.122952, 0.631898, 0.673474 +860, 0.362589, -0.123960, 0.632217, 0.673398 +861, 0.361833, -0.124969, 0.632533, 0.673321 +862, 0.361079, -0.125979, 0.632848, 0.673243 +863, 0.360325, -0.126989, 0.633160, 0.673163 +864, 0.359573, -0.128001, 0.633469, 0.673082 +865, 0.358823, -0.129013, 0.633776, 0.673000 +866, 0.358073, -0.130027, 0.634081, 0.672917 +867, 0.357326, -0.131041, 0.634384, 0.672833 +868, 0.356579, -0.132056, 0.634684, 0.672747 +869, 0.355834, -0.133072, 0.634982, 0.672661 +870, 0.355090, -0.134088, 0.635278, 0.672573 +871, 0.354347, -0.135106, 0.635571, 0.672484 +872, 0.353606, -0.136124, 0.635862, 0.672394 +873, 0.352866, -0.137143, 0.636150, 0.672302 +874, 0.352128, -0.138163, 0.636436, 0.672210 +875, 0.351391, -0.139184, 0.636720, 0.672116 +876, 0.350655, -0.140206, 0.637001, 0.672022 +877, 0.349920, -0.141228, 0.637280, 0.671926 +878, 0.349187, -0.142251, 0.637557, 0.671829 +879, 0.348456, -0.143275, 0.637831, 0.671731 +880, 0.347725, -0.144300, 0.638103, 0.671632 +881, 0.346996, -0.145325, 0.638373, 0.671531 +882, 0.346269, -0.146351, 0.638640, 0.671430 +883, 0.345542, -0.147378, 0.638905, 0.671327 +884, 0.344818, -0.148406, 0.639168, 0.671224 +885, 0.344094, -0.149434, 0.639428, 0.671119 +886, 0.343372, -0.150463, 0.639685, 0.671013 +887, 0.342651, -0.151493, 0.639941, 0.670907 +888, 0.341932, -0.152524, 0.640194, 0.670799 +889, 0.341214, -0.153555, 0.640444, 0.670690 +890, 0.340497, -0.154587, 0.640693, 0.670580 +891, 0.339782, -0.155620, 0.640939, 0.670469 +892, 0.339068, -0.156653, 0.641182, 0.670357 +893, 0.338356, -0.157687, 0.641423, 0.670244 +894, 0.337645, -0.158722, 0.641662, 0.670129 +895, 0.336935, -0.159757, 0.641898, 0.670014 +896, 0.336227, -0.160793, 0.642132, 0.669898 +897, 0.335520, -0.161830, 0.642364, 0.669781 +898, 0.334815, -0.162868, 0.642593, 0.669662 +899, 0.334111, -0.163906, 0.642820, 0.669543 +900, 0.333408, -0.164944, 0.643044, 0.669423 +901, 0.332707, -0.165984, 0.643266, 0.669301 +902, 0.332007, -0.167024, 0.643486, 0.669179 +903, 0.331309, -0.168064, 0.643703, 0.669056 +904, 0.330612, -0.169105, 0.643918, 0.668932 +905, 0.329916, -0.170147, 0.644130, 0.668806 +906, 0.329222, -0.171190, 0.644340, 0.668680 +907, 0.328529, -0.172233, 0.644548, 0.668553 +908, 0.327838, -0.173276, 0.644753, 0.668425 +909, 0.327148, -0.174320, 0.644956, 0.668296 +910, 0.326459, -0.175365, 0.645156, 0.668166 +911, 0.325772, -0.176410, 0.645354, 0.668035 +912, 0.325086, -0.177456, 0.645550, 0.667903 +913, 0.324402, -0.178503, 0.645743, 0.667770 +914, 0.323719, -0.179550, 0.645933, 0.667636 +915, 0.323038, -0.180597, 0.646122, 0.667501 +916, 0.322358, -0.181645, 0.646308, 0.667365 +917, 0.321679, -0.182694, 0.646491, 0.667229 +918, 0.321002, -0.183743, 0.646673, 0.667091 +919, 0.320326, -0.184793, 0.646851, 0.666953 +920, 0.319652, -0.185843, 0.647028, 0.666814 +921, 0.318979, -0.186894, 0.647201, 0.666673 +922, 0.318308, -0.187945, 0.647373, 0.666532 +923, 0.317638, -0.188997, 0.647542, 0.666390 +924, 0.316969, -0.190049, 0.647709, 0.666247 +925, 0.316302, -0.191101, 0.647873, 0.666104 +926, 0.315636, -0.192155, 0.648035, 0.665959 +927, 0.314972, -0.193208, 0.648194, 0.665814 +928, 0.314309, -0.194262, 0.648351, 0.665667 +929, 0.313647, -0.195317, 0.648506, 0.665520 +930, 0.312988, -0.196372, 0.648658, 0.665372 +931, 0.312329, -0.197427, 0.648808, 0.665223 +932, 0.311672, -0.198483, 0.648955, 0.665073 +933, 0.311016, -0.199539, 0.649100, 0.664923 +934, 0.310362, -0.200596, 0.649242, 0.664771 +935, 0.309709, -0.201653, 0.649382, 0.664619 +936, 0.309058, -0.202711, 0.649520, 0.664466 +937, 0.308408, -0.203769, 0.649655, 0.664312 +938, 0.307760, -0.204827, 0.649788, 0.664158 +939, 0.307113, -0.205886, 0.649918, 0.664002 +940, 0.306467, -0.206945, 0.650046, 0.663846 +941, 0.305823, -0.208004, 0.650172, 0.663689 +942, 0.305180, -0.209064, 0.650295, 0.663531 +943, 0.304539, -0.210124, 0.650416, 0.663373 +944, 0.303900, -0.211185, 0.650534, 0.663213 +945, 0.303261, -0.212246, 0.650650, 0.663053 +946, 0.302624, -0.213307, 0.650763, 0.662892 +947, 0.301989, -0.214369, 0.650874, 0.662731 +948, 0.301355, -0.215431, 0.650982, 0.662568 +949, 0.300723, -0.216493, 0.651088, 0.662405 +950, 0.300092, -0.217556, 0.651192, 0.662241 +951, 0.299462, -0.218619, 0.651293, 0.662077 +952, 0.298834, -0.219682, 0.651392, 0.661911 +953, 0.298208, -0.220745, 0.651488, 0.661745 +954, 0.297582, -0.221809, 0.651582, 0.661578 +955, 0.296959, -0.222873, 0.651674, 0.661411 +956, 0.296337, -0.223938, 0.651763, 0.661242 +957, 0.295716, -0.225002, 0.651850, 0.661074 +958, 0.295096, -0.226067, 0.651934, 0.660904 +959, 0.294479, -0.227133, 0.652016, 0.660734 +960, 0.293862, -0.228198, 0.652095, 0.660563 +961, 0.293247, -0.229264, 0.652172, 0.660391 +962, 0.292634, -0.230330, 0.652246, 0.660218 +963, 0.292022, -0.231396, 0.652318, 0.660045 +964, 0.291411, -0.232462, 0.652388, 0.659872 +965, 0.290802, -0.233529, 0.652455, 0.659697 +966, 0.290195, -0.234596, 0.652520, 0.659522 +967, 0.289589, -0.235663, 0.652582, 0.659346 +968, 0.288984, -0.236730, 0.652642, 0.659170 +969, 0.288381, -0.237798, 0.652700, 0.658993 +970, 0.287779, -0.238866, 0.652755, 0.658815 +971, 0.287179, -0.239933, 0.652807, 0.658637 +972, 0.286580, -0.241002, 0.652857, 0.658458 +973, 0.285983, -0.242070, 0.652905, 0.658279 +974, 0.285387, -0.243138, 0.652950, 0.658099 +975, 0.284793, -0.244207, 0.652993, 0.657918 +976, 0.284200, -0.245275, 0.653034, 0.657737 +977, 0.283608, -0.246344, 0.653072, 0.657555 +978, 0.283018, -0.247413, 0.653107, 0.657372 +979, 0.282430, -0.248482, 0.653140, 0.657189 +980, 0.281843, -0.249552, 0.653171, 0.657005 +981, 0.281257, -0.250621, 0.653199, 0.656821 +982, 0.280673, -0.251691, 0.653225, 0.656636 +983, 0.280091, -0.252760, 0.653249, 0.656451 +984, 0.279510, -0.253830, 0.653270, 0.656265 +985, 0.278930, -0.254900, 0.653288, 0.656078 +986, 0.278352, -0.255970, 0.653304, 0.655891 +987, 0.277775, -0.257040, 0.653318, 0.655703 +988, 0.277200, -0.258110, 0.653329, 0.655515 +989, 0.276626, -0.259180, 0.653338, 0.655327 +990, 0.276054, -0.260250, 0.653345, 0.655137 +991, 0.275483, -0.261321, 0.653349, 0.654948 +992, 0.274914, -0.262391, 0.653350, 0.654757 +993, 0.274346, -0.263461, 0.653349, 0.654566 +994, 0.273780, -0.264532, 0.653346, 0.654375 +995, 0.273215, -0.265602, 0.653340, 0.654183 +996, 0.272651, -0.266673, 0.653332, 0.653991 +997, 0.272089, -0.267743, 0.653322, 0.653798 +998, 0.271529, -0.268814, 0.653309, 0.653605 +999, 0.270970, -0.269884, 0.653293, 0.653411 +1000, 0.270412, -0.270955, 0.653275, 0.653217 +1001, 0.269856, -0.272025, 0.653255, 0.653022 +1002, 0.269302, -0.273096, 0.653232, 0.652827 +1003, 0.268749, -0.274166, 0.653207, 0.652631 +1004, 0.268197, -0.275237, 0.653180, 0.652435 +1005, 0.267647, -0.276307, 0.653150, 0.652238 +1006, 0.267098, -0.277378, 0.653117, 0.652041 +1007, 0.266551, -0.278448, 0.653083, 0.651844 +1008, 0.266005, -0.279519, 0.653045, 0.651646 +1009, 0.265461, -0.280589, 0.653006, 0.651447 +1010, 0.264918, -0.281659, 0.652964, 0.651249 +1011, 0.264377, -0.282729, 0.652919, 0.651049 +1012, 0.263837, -0.283799, 0.652873, 0.650850 +1013, 0.263298, -0.284869, 0.652823, 0.650650 +1014, 0.262762, -0.285939, 0.652772, 0.650449 +1015, 0.262226, -0.287009, 0.652717, 0.650249 +1016, 0.261692, -0.288079, 0.652661, 0.650047 +1017, 0.261160, -0.289149, 0.652602, 0.649846 +1018, 0.260629, -0.290218, 0.652541, 0.649644 +1019, 0.260099, -0.291287, 0.652477, 0.649441 +1020, 0.259571, -0.292357, 0.652411, 0.649239 +1021, 0.259044, -0.293426, 0.652342, 0.649035 +1022, 0.258519, -0.294495, 0.652271, 0.648832 +1023, 0.257995, -0.295564, 0.652198, 0.648628 +1024, 0.257473, -0.296633, 0.652122, 0.648424 +1025, 0.256952, -0.297701, 0.652044, 0.648219 +1026, 0.256433, -0.298770, 0.651963, 0.648014 +1027, 0.255915, -0.299838, 0.651880, 0.647809 +1028, 0.255399, -0.300906, 0.651795, 0.647604 +1029, 0.254884, -0.301974, 0.651707, 0.647398 +1030, 0.254370, -0.303041, 0.651617, 0.647191 +1031, 0.253858, -0.304109, 0.651525, 0.646985 +1032, 0.253348, -0.305176, 0.651430, 0.646778 +1033, 0.252839, -0.306243, 0.651332, 0.646571 +1034, 0.252331, -0.307310, 0.651232, 0.646363 +1035, 0.251825, -0.308377, 0.651130, 0.646156 +1036, 0.251321, -0.309444, 0.651026, 0.645947 +1037, 0.250817, -0.310510, 0.650919, 0.645739 +1038, 0.250316, -0.311576, 0.650810, 0.645531 +1039, 0.249815, -0.312642, 0.650698, 0.645322 +1040, 0.249316, -0.313707, 0.650584, 0.645112 +1041, 0.248819, -0.314772, 0.650467, 0.644903 +1042, 0.248323, -0.315837, 0.650348, 0.644693 +1043, 0.247829, -0.316902, 0.650227, 0.644483 +1044, 0.247336, -0.317967, 0.650104, 0.644273 +1045, 0.246844, -0.319031, 0.649978, 0.644063 +1046, 0.246354, -0.320095, 0.649849, 0.643852 +1047, 0.245865, -0.321158, 0.649718, 0.643641 +1048, 0.245378, -0.322222, 0.649585, 0.643430 +1049, 0.244892, -0.323285, 0.649450, 0.643218 +1050, 0.244408, -0.324347, 0.649312, 0.643007 +1051, 0.243925, -0.325410, 0.649172, 0.642795 +1052, 0.243444, -0.326472, 0.649029, 0.642583 +1053, 0.242964, -0.327534, 0.648884, 0.642371 +1054, 0.242485, -0.328595, 0.648737, 0.642158 +1055, 0.242008, -0.329656, 0.648587, 0.641945 +1056, 0.241532, -0.330717, 0.648435, 0.641733 +1057, 0.241058, -0.331777, 0.648280, 0.641519 +1058, 0.240586, -0.332837, 0.648124, 0.641306 +1059, 0.240114, -0.333897, 0.647964, 0.641093 +1060, 0.239644, -0.334956, 0.647803, 0.640879 +1061, 0.239176, -0.336015, 0.647639, 0.640666 +1062, 0.238709, -0.337074, 0.647473, 0.640452 +1063, 0.238243, -0.338132, 0.647304, 0.640238 +1064, 0.237779, -0.339190, 0.647133, 0.640023 +1065, 0.237317, -0.340247, 0.646960, 0.639809 +1066, 0.236855, -0.341304, 0.646784, 0.639595 +1067, 0.236395, -0.342361, 0.646606, 0.639380 +1068, 0.235937, -0.343417, 0.646426, 0.639165 +1069, 0.235480, -0.344473, 0.646243, 0.638950 +1070, 0.235025, -0.345528, 0.646058, 0.638735 +1071, 0.234571, -0.346583, 0.645871, 0.638520 +1072, 0.234118, -0.347637, 0.645681, 0.638305 +1073, 0.233667, -0.348691, 0.645489, 0.638090 +1074, 0.233217, -0.349745, 0.645295, 0.637874 +1075, 0.232768, -0.350798, 0.645098, 0.637658 +1076, 0.232321, -0.351850, 0.644899, 0.637443 +1077, 0.231876, -0.352903, 0.644698, 0.637227 +1078, 0.231432, -0.353954, 0.644494, 0.637011 +1079, 0.230989, -0.355005, 0.644288, 0.636795 +1080, 0.230548, -0.356056, 0.644080, 0.636579 +1081, 0.230108, -0.357106, 0.643869, 0.636363 +1082, 0.229669, -0.358156, 0.643656, 0.636147 +1083, 0.229232, -0.359205, 0.643441, 0.635931 +1084, 0.228797, -0.360254, 0.643223, 0.635715 +1085, 0.228362, -0.361302, 0.643003, 0.635499 +1086, 0.227929, -0.362350, 0.642781, 0.635282 +1087, 0.227498, -0.363397, 0.642556, 0.635066 +1088, 0.227068, -0.364443, 0.642329, 0.634850 +1089, 0.226639, -0.365489, 0.642100, 0.634633 +1090, 0.226212, -0.366535, 0.641869, 0.634417 +1091, 0.225786, -0.367580, 0.641635, 0.634200 +1092, 0.225362, -0.368624, 0.641399, 0.633984 +1093, 0.224939, -0.369668, 0.641161, 0.633767 +1094, 0.224517, -0.370711, 0.640920, 0.633551 +1095, 0.224097, -0.371754, 0.640677, 0.633335 +1096, 0.223678, -0.372796, 0.640432, 0.633118 +1097, 0.223261, -0.373837, 0.640184, 0.632902 +1098, 0.222845, -0.374878, 0.639934, 0.632685 +1099, 0.222430, -0.375919, 0.639682, 0.632469 +1100, 0.222017, -0.376958, 0.639428, 0.632252 +1101, 0.221605, -0.377997, 0.639171, 0.632036 +1102, 0.221194, -0.379036, 0.638912, 0.631820 +1103, 0.220785, -0.380074, 0.638651, 0.631603 +1104, 0.220378, -0.381111, 0.638388, 0.631387 +1105, 0.219971, -0.382148, 0.638122, 0.631171 +1106, 0.219566, -0.383184, 0.637854, 0.630955 +1107, 0.219163, -0.384219, 0.637583, 0.630738 +1108, 0.218760, -0.385253, 0.637311, 0.630522 +1109, 0.218359, -0.386287, 0.637036, 0.630306 +1110, 0.217960, -0.387321, 0.636759, 0.630090 +1111, 0.217562, -0.388353, 0.636480, 0.629875 +1112, 0.217165, -0.389385, 0.636198, 0.629659 +1113, 0.216770, -0.390417, 0.635914, 0.629443 +1114, 0.216376, -0.391447, 0.635628, 0.629228 +1115, 0.215983, -0.392477, 0.635340, 0.629012 +1116, 0.215592, -0.393507, 0.635049, 0.628797 +1117, 0.215202, -0.394535, 0.634756, 0.628581 +1118, 0.214813, -0.395563, 0.634461, 0.628366 +1119, 0.214426, -0.396590, 0.634164, 0.628151 +1120, 0.214040, -0.397617, 0.633864, 0.627936 +1121, 0.213655, -0.398642, 0.633563, 0.627721 +1122, 0.213272, -0.399667, 0.633259, 0.627507 +1123, 0.212890, -0.400691, 0.632952, 0.627292 +1124, 0.212510, -0.401715, 0.632644, 0.627078 +1125, 0.212131, -0.402738, 0.632333, 0.626863 +1126, 0.211753, -0.403760, 0.632020, 0.626649 +1127, 0.211376, -0.404781, 0.631705, 0.626435 +1128, 0.211001, -0.405801, 0.631388, 0.626221 +1129, 0.210627, -0.406821, 0.631069, 0.626008 +1130, 0.210255, -0.407840, 0.630747, 0.625794 +1131, 0.209884, -0.408858, 0.630423, 0.625581 +1132, 0.209514, -0.409875, 0.630097, 0.625367 +1133, 0.209145, -0.410892, 0.629768, 0.625154 +1134, 0.208778, -0.411908, 0.629438, 0.624942 +1135, 0.208412, -0.412923, 0.629105, 0.624729 +1136, 0.208048, -0.413937, 0.628770, 0.624516 +1137, 0.207685, -0.414950, 0.628433, 0.624304 +1138, 0.207323, -0.415963, 0.628094, 0.624092 +1139, 0.206962, -0.416974, 0.627752, 0.623880 +1140, 0.206603, -0.417985, 0.627408, 0.623668 +1141, 0.206245, -0.418995, 0.627063, 0.623457 +1142, 0.205888, -0.420004, 0.626715, 0.623246 +1143, 0.205533, -0.421013, 0.626364, 0.623035 +1144, 0.205179, -0.422020, 0.626012, 0.622824 +1145, 0.204826, -0.423027, 0.625657, 0.622613 +1146, 0.204475, -0.424033, 0.625301, 0.622403 +1147, 0.204125, -0.425037, 0.624942, 0.622193 +1148, 0.203776, -0.426042, 0.624581, 0.621983 +1149, 0.203428, -0.427045, 0.624218, 0.621773 +1150, 0.203082, -0.428047, 0.623852, 0.621564 +1151, 0.202737, -0.429048, 0.623485, 0.621355 +1152, 0.202393, -0.430049, 0.623115, 0.621146 +1153, 0.202051, -0.431048, 0.622743, 0.620937 +1154, 0.201710, -0.432047, 0.622370, 0.620729 +1155, 0.201370, -0.433045, 0.621993, 0.620521 +1156, 0.201031, -0.434042, 0.621615, 0.620313 +1157, 0.200694, -0.435038, 0.621235, 0.620106 +1158, 0.200358, -0.436033, 0.620852, 0.619899 +1159, 0.200023, -0.437027, 0.620468, 0.619692 +1160, 0.199689, -0.438020, 0.620081, 0.619485 +1161, 0.199357, -0.439012, 0.619692, 0.619279 +1162, 0.199026, -0.440004, 0.619301, 0.619073 +1163, 0.198696, -0.440994, 0.618908, 0.618867 +1164, 0.198368, -0.441983, 0.618513, 0.618662 +1165, 0.198041, -0.442972, 0.618116, 0.618457 +1166, 0.197715, -0.443959, 0.617717, 0.618252 +1167, 0.197390, -0.444946, 0.617315, 0.618047 +1168, 0.197067, -0.445931, 0.616912, 0.617843 +1169, 0.196744, -0.446916, 0.616506, 0.617639 +1170, 0.196423, -0.447899, 0.616098, 0.617436 +1171, 0.196104, -0.448882, 0.615688, 0.617233 +1172, 0.195785, -0.449863, 0.615277, 0.617030 +1173, 0.195468, -0.450844, 0.614863, 0.616828 +1174, 0.195152, -0.451823, 0.614446, 0.616626 +1175, 0.194837, -0.452802, 0.614028, 0.616424 +1176, 0.194523, -0.453779, 0.613608, 0.616223 +1177, 0.194211, -0.454756, 0.613186, 0.616022 +1178, 0.193900, -0.455731, 0.612761, 0.615821 +1179, 0.193590, -0.456705, 0.612335, 0.615621 +1180, 0.193281, -0.457679, 0.611907, 0.615421 +1181, 0.192974, -0.458651, 0.611476, 0.615221 +1182, 0.192667, -0.459622, 0.611043, 0.615022 +1183, 0.192362, -0.460593, 0.610609, 0.614824 +1184, 0.192058, -0.461562, 0.610172, 0.614625 +1185, 0.191756, -0.462530, 0.609733, 0.614427 +1186, 0.191454, -0.463497, 0.609293, 0.614230 +1187, 0.191154, -0.464463, 0.608850, 0.614033 +1188, 0.190855, -0.465428, 0.608405, 0.613836 +1189, 0.190557, -0.466392, 0.607958, 0.613640 +1190, 0.190260, -0.467354, 0.607509, 0.613444 +1191, 0.189964, -0.468316, 0.607059, 0.613248 +1192, 0.189670, -0.469276, 0.606606, 0.613053 +1193, 0.189377, -0.470236, 0.606151, 0.612859 +1194, 0.189085, -0.471194, 0.605694, 0.612665 +1195, 0.188794, -0.472151, 0.605235, 0.612471 +1196, 0.188504, -0.473107, 0.604774, 0.612278 +1197, 0.188216, -0.474062, 0.604311, 0.612085 +1198, 0.187929, -0.475016, 0.603846, 0.611892 +1199, 0.187642, -0.475969, 0.603379, 0.611700 +1200, 0.187357, -0.476921, 0.602910, 0.611509 +1201, 0.187074, -0.477871, 0.602440, 0.611318 +1202, 0.186791, -0.478820, 0.601967, 0.611127 +1203, 0.186509, -0.479768, 0.601492, 0.610937 +1204, 0.186229, -0.480715, 0.601015, 0.610748 +1205, 0.185950, -0.481661, 0.600536, 0.610558 +1206, 0.185671, -0.482606, 0.600055, 0.610370 +1207, 0.185394, -0.483549, 0.599573, 0.610182 +1208, 0.185119, -0.484492, 0.599088, 0.609994 +1209, 0.184844, -0.485433, 0.598601, 0.609807 +1210, 0.184570, -0.486373, 0.598113, 0.609620 +1211, 0.184298, -0.487311, 0.597622, 0.609434 +1212, 0.184027, -0.488249, 0.597130, 0.609248 +1213, 0.183756, -0.489185, 0.596636, 0.609063 +1214, 0.183487, -0.490120, 0.596139, 0.608878 +1215, 0.183219, -0.491054, 0.595641, 0.608694 +1216, 0.182952, -0.491987, 0.595141, 0.608510 +1217, 0.182687, -0.492919, 0.594639, 0.608327 +1218, 0.182422, -0.493849, 0.594135, 0.608144 +1219, 0.182158, -0.494778, 0.593629, 0.607962 +1220, 0.181896, -0.495706, 0.593121, 0.607781 +1221, 0.181635, -0.496632, 0.592611, 0.607600 +1222, 0.181374, -0.497558, 0.592099, 0.607419 +1223, 0.181115, -0.498482, 0.591586, 0.607239 +1224, 0.180857, -0.499405, 0.591070, 0.607060 +1225, 0.180600, -0.500326, 0.590553, 0.606881 +1226, 0.180344, -0.501247, 0.590034, 0.606703 +1227, 0.180089, -0.502166, 0.589512, 0.606525 +1228, 0.179835, -0.503084, 0.588989, 0.606348 +1229, 0.179583, -0.504000, 0.588465, 0.606171 +1230, 0.179331, -0.504916, 0.587938, 0.605995 +1231, 0.179081, -0.505830, 0.587409, 0.605819 +1232, 0.178831, -0.506742, 0.586879, 0.605644 +1233, 0.178583, -0.507654, 0.586346, 0.605470 +1234, 0.178335, -0.508564, 0.585812, 0.605296 +1235, 0.178089, -0.509473, 0.585276, 0.605123 +1236, 0.177843, -0.510380, 0.584738, 0.604951 +1237, 0.177599, -0.511287, 0.584198, 0.604779 +1238, 0.177356, -0.512192, 0.583656, 0.604607 +1239, 0.177114, -0.513095, 0.583113, 0.604436 +1240, 0.176873, -0.513997, 0.582568, 0.604266 +1241, 0.176633, -0.514898, 0.582021, 0.604097 +1242, 0.176393, -0.515798, 0.581472, 0.603928 +1243, 0.176155, -0.516696, 0.580921, 0.603759 +1244, 0.175918, -0.517593, 0.580368, 0.603591 +1245, 0.175682, -0.518489, 0.579814, 0.603424 +1246, 0.175447, -0.519383, 0.579258, 0.603258 +1247, 0.175213, -0.520276, 0.578700, 0.603092 +1248, 0.174980, -0.521168, 0.578140, 0.602926 +1249, 0.174748, -0.522058, 0.577578, 0.602762 +1250, 0.174517, -0.522947, 0.577015, 0.602598 +1251, 0.174287, -0.523834, 0.576450, 0.602434 +1252, 0.174058, -0.524721, 0.575883, 0.602272 +1253, 0.173830, -0.525605, 0.575314, 0.602110 +1254, 0.173603, -0.526489, 0.574743, 0.601948 +1255, 0.173377, -0.527371, 0.574171, 0.601787 +1256, 0.173152, -0.528251, 0.573597, 0.601627 +1257, 0.172928, -0.529131, 0.573021, 0.601468 +1258, 0.172705, -0.530008, 0.572444, 0.601309 +1259, 0.172483, -0.530885, 0.571864, 0.601151 +1260, 0.172262, -0.531760, 0.571283, 0.600993 +1261, 0.172041, -0.532633, 0.570700, 0.600836 +1262, 0.171822, -0.533506, 0.570116, 0.600680 +1263, 0.171604, -0.534376, 0.569529, 0.600525 +1264, 0.171386, -0.535246, 0.568941, 0.600370 +1265, 0.171170, -0.536114, 0.568352, 0.600216 +1266, 0.170955, -0.536980, 0.567760, 0.600063 +1267, 0.170740, -0.537845, 0.567167, 0.599910 +1268, 0.170526, -0.538709, 0.566572, 0.599758 +1269, 0.170314, -0.539571, 0.565975, 0.599606 +1270, 0.170102, -0.540432, 0.565377, 0.599456 +1271, 0.169891, -0.541291, 0.564777, 0.599306 +1272, 0.169681, -0.542149, 0.564175, 0.599157 +1273, 0.169473, -0.543006, 0.563572, 0.599008 +1274, 0.169264, -0.543861, 0.562967, 0.598860 +1275, 0.169057, -0.544714, 0.562360, 0.598713 +1276, 0.168851, -0.545566, 0.561751, 0.598567 +1277, 0.168646, -0.546417, 0.561141, 0.598421 +1278, 0.168441, -0.547266, 0.560529, 0.598276 +1279, 0.168238, -0.548114, 0.559916, 0.598132 +1280, 0.168035, -0.548960, 0.559301, 0.597988 +1281, 0.167834, -0.549804, 0.558684, 0.597846 +1282, 0.167633, -0.550647, 0.558066, 0.597703 +1283, 0.167433, -0.551489, 0.557445, 0.597562 +1284, 0.167234, -0.552329, 0.556824, 0.597422 +1285, 0.167036, -0.553168, 0.556200, 0.597282 +1286, 0.166838, -0.554005, 0.555575, 0.597143 +1287, 0.166642, -0.554841, 0.554949, 0.597004 +1288, 0.166446, -0.555675, 0.554320, 0.596867 +1289, 0.166251, -0.556508, 0.553690, 0.596730 +1290, 0.166057, -0.557339, 0.553059, 0.596594 +1291, 0.165864, -0.558168, 0.552426, 0.596459 +1292, 0.165672, -0.558996, 0.551791, 0.596324 +1293, 0.165481, -0.559823, 0.551155, 0.596190 +1294, 0.165290, -0.560648, 0.550517, 0.596057 +1295, 0.165101, -0.561471, 0.549877, 0.595925 +1296, 0.164912, -0.562293, 0.549236, 0.595793 +1297, 0.164724, -0.563114, 0.548593, 0.595663 +1298, 0.164537, -0.563933, 0.547949, 0.595533 +1299, 0.164350, -0.564750, 0.547303, 0.595404 +1300, 0.164165, -0.565566, 0.546656, 0.595275 +1301, 0.163980, -0.566380, 0.546007, 0.595148 +1302, 0.163796, -0.567192, 0.545356, 0.595021 +1303, 0.163613, -0.568004, 0.544704, 0.594895 +1304, 0.163431, -0.568813, 0.544051, 0.594770 +1305, 0.163249, -0.569621, 0.543395, 0.594645 +1306, 0.163069, -0.570427, 0.542739, 0.594522 +1307, 0.162889, -0.571232, 0.542080, 0.594399 +1308, 0.162710, -0.572035, 0.541421, 0.594277 +1309, 0.162531, -0.572837, 0.540759, 0.594156 +1310, 0.162354, -0.573637, 0.540096, 0.594035 +1311, 0.162177, -0.574435, 0.539432, 0.593916 +1312, 0.162001, -0.575232, 0.538766, 0.593797 +1313, 0.161826, -0.576027, 0.538099, 0.593679 +1314, 0.161651, -0.576821, 0.537430, 0.593562 +1315, 0.161478, -0.577613, 0.536759, 0.593446 +1316, 0.161305, -0.578403, 0.536088, 0.593330 +1317, 0.161132, -0.579192, 0.535414, 0.593215 +1318, 0.160961, -0.579979, 0.534739, 0.593102 +1319, 0.160790, -0.580765, 0.534063, 0.592989 +1320, 0.160620, -0.581549, 0.533385, 0.592876 +1321, 0.160451, -0.582331, 0.532706, 0.592765 +1322, 0.160282, -0.583112, 0.532025, 0.592655 +1323, 0.160115, -0.583891, 0.531343, 0.592545 +1324, 0.159948, -0.584668, 0.530659, 0.592436 +1325, 0.159781, -0.585444, 0.529974, 0.592328 +1326, 0.159616, -0.586218, 0.529288, 0.592221 +1327, 0.159451, -0.586991, 0.528600, 0.592115 +1328, 0.159286, -0.587762, 0.527910, 0.592009 +1329, 0.159123, -0.588531, 0.527219, 0.591905 +1330, 0.158960, -0.589298, 0.526527, 0.591801 +1331, 0.158798, -0.590064, 0.525833, 0.591698 +1332, 0.158637, -0.590828, 0.525138, 0.591596 +1333, 0.158476, -0.591591, 0.524442, 0.591495 +1334, 0.158316, -0.592352, 0.523744, 0.591395 +1335, 0.158156, -0.593111, 0.523044, 0.591296 +1336, 0.157998, -0.593869, 0.522344, 0.591197 +1337, 0.157840, -0.594625, 0.521641, 0.591099 +1338, 0.157682, -0.595379, 0.520938, 0.591003 +1339, 0.157526, -0.596131, 0.520233, 0.590907 +1340, 0.157370, -0.596882, 0.519527, 0.590812 +1341, 0.157214, -0.597631, 0.518819, 0.590717 +1342, 0.157059, -0.598379, 0.518110, 0.590624 +1343, 0.156905, -0.599125, 0.517400, 0.590532 +1344, 0.156752, -0.599869, 0.516688, 0.590440 +1345, 0.156599, -0.600611, 0.515975, 0.590350 +1346, 0.156447, -0.601352, 0.515260, 0.590260 +1347, 0.156295, -0.602091, 0.514545, 0.590171 +1348, 0.156144, -0.602828, 0.513828, 0.590083 +1349, 0.155994, -0.603564, 0.513109, 0.589996 +1350, 0.155845, -0.604298, 0.512389, 0.589910 +1351, 0.155695, -0.605030, 0.511668, 0.589825 +1352, 0.155547, -0.605760, 0.510946, 0.589741 +1353, 0.155399, -0.606489, 0.510222, 0.589657 +1354, 0.155252, -0.607216, 0.509497, 0.589575 +1355, 0.155105, -0.607941, 0.508771, 0.589493 +1356, 0.154959, -0.608665, 0.508043, 0.589412 +1357, 0.154814, -0.609387, 0.507314, 0.589333 +1358, 0.154669, -0.610107, 0.506584, 0.589254 +1359, 0.154524, -0.610825, 0.505853, 0.589176 +1360, 0.154381, -0.611542, 0.505120, 0.589099 +1361, 0.154238, -0.612256, 0.504386, 0.589023 +1362, 0.154095, -0.612970, 0.503651, 0.588947 +1363, 0.153953, -0.613681, 0.502914, 0.588873 +1364, 0.153811, -0.614391, 0.502176, 0.588800 +1365, 0.153670, -0.615098, 0.501437, 0.588727 +1366, 0.153530, -0.615805, 0.500697, 0.588656 +1367, 0.153390, -0.616509, 0.499956, 0.588585 +1368, 0.153251, -0.617212, 0.499213, 0.588516 +1369, 0.153112, -0.617912, 0.498469, 0.588447 +1370, 0.152974, -0.618611, 0.497724, 0.588379 +1371, 0.152836, -0.619309, 0.496977, 0.588312 +1372, 0.152699, -0.620004, 0.496230, 0.588246 +1373, 0.152562, -0.620698, 0.495481, 0.588181 +1374, 0.152426, -0.621390, 0.494731, 0.588117 +1375, 0.152291, -0.622080, 0.493980, 0.588054 +1376, 0.152156, -0.622769, 0.493227, 0.587992 +1377, 0.152021, -0.623455, 0.492473, 0.587931 +1378, 0.151887, -0.624140, 0.491719, 0.587871 +1379, 0.151753, -0.624823, 0.490963, 0.587811 +1380, 0.151620, -0.625505, 0.490206, 0.587753 +1381, 0.151487, -0.626184, 0.489447, 0.587696 +1382, 0.151355, -0.626862, 0.488688, 0.587639 +1383, 0.151224, -0.627538, 0.487927, 0.587584 +1384, 0.151092, -0.628212, 0.487165, 0.587529 +1385, 0.150962, -0.628885, 0.486402, 0.587476 +1386, 0.150831, -0.629555, 0.485638, 0.587423 +1387, 0.150701, -0.630224, 0.484873, 0.587371 +1388, 0.150572, -0.630891, 0.484107, 0.587321 +1389, 0.150443, -0.631556, 0.483339, 0.587271 +1390, 0.150315, -0.632219, 0.482571, 0.587222 +1391, 0.150187, -0.632881, 0.481801, 0.587174 +1392, 0.150059, -0.633540, 0.481030, 0.587128 +1393, 0.149932, -0.634198, 0.480258, 0.587082 +1394, 0.149805, -0.634854, 0.479485, 0.587037 +1395, 0.149679, -0.635509, 0.478711, 0.586993 +1396, 0.149553, -0.636161, 0.477936, 0.586950 +1397, 0.149427, -0.636812, 0.477160, 0.586908 +1398, 0.149302, -0.637460, 0.476382, 0.586867 +1399, 0.149178, -0.638107, 0.475604, 0.586827 +1400, 0.149054, -0.638752, 0.474825, 0.586788 +1401, 0.148930, -0.639396, 0.474044, 0.586750 +1402, 0.148806, -0.640037, 0.473262, 0.586713 +1403, 0.148683, -0.640677, 0.472480, 0.586677 +1404, 0.148560, -0.641314, 0.471696, 0.586642 +1405, 0.148438, -0.641950, 0.470911, 0.586607 +1406, 0.148316, -0.642584, 0.470126, 0.586574 +1407, 0.148195, -0.643217, 0.469339, 0.586542 +1408, 0.148073, -0.643847, 0.468551, 0.586511 +1409, 0.147953, -0.644476, 0.467762, 0.586481 +1410, 0.147832, -0.645102, 0.466972, 0.586452 +1411, 0.147712, -0.645727, 0.466181, 0.586423 +1412, 0.147592, -0.646350, 0.465390, 0.586396 +1413, 0.147473, -0.646971, 0.464597, 0.586370 +1414, 0.147354, -0.647591, 0.463803, 0.586345 +1415, 0.147235, -0.648208, 0.463008, 0.586321 +1416, 0.147117, -0.648824, 0.462212, 0.586297 +1417, 0.146998, -0.649437, 0.461415, 0.586275 +1418, 0.146881, -0.650049, 0.460618, 0.586254 +1419, 0.146763, -0.650659, 0.459819, 0.586234 +1420, 0.146646, -0.651267, 0.459019, 0.586214 +1421, 0.146529, -0.651873, 0.458219, 0.586196 +1422, 0.146413, -0.652478, 0.457417, 0.586179 +1423, 0.146297, -0.653080, 0.456615, 0.586163 +1424, 0.146181, -0.653681, 0.455811, 0.586147 +1425, 0.146065, -0.654280, 0.455007, 0.586133 +1426, 0.145950, -0.654877, 0.454201, 0.586120 +1427, 0.145835, -0.655472, 0.453395, 0.586108 +1428, 0.145720, -0.656065, 0.452588, 0.586096 +1429, 0.145605, -0.656656, 0.451780, 0.586086 +1430, 0.145491, -0.657245, 0.450971, 0.586077 +1431, 0.145377, -0.657833, 0.450161, 0.586069 +1432, 0.145263, -0.658418, 0.449350, 0.586062 +1433, 0.145150, -0.659002, 0.448539, 0.586056 +1434, 0.145037, -0.659584, 0.447726, 0.586050 +1435, 0.144924, -0.660164, 0.446913, 0.586046 +1436, 0.144811, -0.660742, 0.446098, 0.586043 +1437, 0.144699, -0.661318, 0.445283, 0.586041 +1438, 0.144586, -0.661892, 0.444467, 0.586040 +1439, 0.144474, -0.662464, 0.443650, 0.586040 +1440, 0.144363, -0.663035, 0.442833, 0.586041 +1441, 0.144251, -0.663603, 0.442014, 0.586043 +1442, 0.144140, -0.664170, 0.441195, 0.586046 +1443, 0.144028, -0.664735, 0.440374, 0.586050 +1444, 0.143918, -0.665298, 0.439553, 0.586055 +1445, 0.143807, -0.665858, 0.438731, 0.586061 +1446, 0.143696, -0.666417, 0.437909, 0.586068 +1447, 0.143586, -0.666975, 0.437085, 0.586076 +1448, 0.143476, -0.667530, 0.436261, 0.586085 +1449, 0.143366, -0.668083, 0.435436, 0.586095 +1450, 0.143256, -0.668635, 0.434610, 0.586106 +1451, 0.143146, -0.669184, 0.433783, 0.586118 +1452, 0.143037, -0.669732, 0.432955, 0.586131 +1453, 0.142928, -0.670277, 0.432127, 0.586145 +1454, 0.142819, -0.670821, 0.431298, 0.586161 +1455, 0.142710, -0.671363, 0.430468, 0.586177 +1456, 0.142601, -0.671903, 0.429638, 0.586194 +1457, 0.142492, -0.672441, 0.428806, 0.586212 +1458, 0.142384, -0.672977, 0.427974, 0.586232 +1459, 0.142275, -0.673511, 0.427141, 0.586252 +1460, 0.142167, -0.674043, 0.426308, 0.586273 +1461, 0.142059, -0.674573, 0.425473, 0.586296 +1462, 0.141951, -0.675102, 0.424638, 0.586319 +1463, 0.141843, -0.675628, 0.423802, 0.586343 +1464, 0.141735, -0.676153, 0.422966, 0.586369 +1465, 0.141628, -0.676675, 0.422129, 0.586395 +1466, 0.141520, -0.677196, 0.421291, 0.586423 +1467, 0.141413, -0.677715, 0.420452, 0.586451 +1468, 0.141305, -0.678232, 0.419613, 0.586481 +1469, 0.141198, -0.678747, 0.418773, 0.586511 +1470, 0.141091, -0.679260, 0.417932, 0.586543 +1471, 0.140984, -0.679771, 0.417091, 0.586576 +1472, 0.140877, -0.680280, 0.416248, 0.586609 +1473, 0.140770, -0.680787, 0.415406, 0.586644 +1474, 0.140663, -0.681292, 0.414562, 0.586680 +1475, 0.140557, -0.681795, 0.413718, 0.586716 +1476, 0.140450, -0.682297, 0.412873, 0.586754 +1477, 0.140343, -0.682796, 0.412028, 0.586793 +1478, 0.140237, -0.683294, 0.411182, 0.586833 +1479, 0.140130, -0.683789, 0.410335, 0.586874 +1480, 0.140024, -0.684283, 0.409488, 0.586916 +1481, 0.139917, -0.684774, 0.408640, 0.586958 +1482, 0.139811, -0.685264, 0.407792, 0.587002 +1483, 0.139704, -0.685752, 0.406943, 0.587047 +1484, 0.139598, -0.686238, 0.406093, 0.587093 +1485, 0.139492, -0.686722, 0.405242, 0.587140 +1486, 0.139385, -0.687204, 0.404391, 0.587188 +1487, 0.139279, -0.687684, 0.403540, 0.587238 +1488, 0.139173, -0.688162, 0.402688, 0.587288 +1489, 0.139067, -0.688638, 0.401835, 0.587339 +1490, 0.138960, -0.689112, 0.400982, 0.587391 +1491, 0.138854, -0.689584, 0.400128, 0.587444 +1492, 0.138748, -0.690055, 0.399273, 0.587498 +1493, 0.138641, -0.690523, 0.398418, 0.587554 +1494, 0.138535, -0.690990, 0.397563, 0.587610 +1495, 0.138429, -0.691454, 0.396707, 0.587667 +1496, 0.138322, -0.691916, 0.395850, 0.587726 +1497, 0.138216, -0.692377, 0.394993, 0.587785 +1498, 0.138109, -0.692836, 0.394135, 0.587845 +1499, 0.138003, -0.693292, 0.393277, 0.587907 +1500, 0.137896, -0.693747, 0.392418, 0.587969 +1501, 0.137790, -0.694200, 0.391559, 0.588033 +1502, 0.137683, -0.694651, 0.390699, 0.588097 +1503, 0.137577, -0.695099, 0.389839, 0.588163 +1504, 0.137470, -0.695546, 0.388978, 0.588229 +1505, 0.137363, -0.695991, 0.388116, 0.588297 +1506, 0.137256, -0.696434, 0.387255, 0.588365 +1507, 0.137149, -0.696875, 0.386392, 0.588435 +1508, 0.137042, -0.697315, 0.385530, 0.588506 +1509, 0.136935, -0.697752, 0.384666, 0.588577 +1510, 0.136828, -0.698187, 0.383803, 0.588650 +1511, 0.136720, -0.698620, 0.382939, 0.588724 +1512, 0.136613, -0.699051, 0.382074, 0.588798 +1513, 0.136505, -0.699481, 0.381209, 0.588874 +1514, 0.136398, -0.699908, 0.380343, 0.588951 +1515, 0.136290, -0.700334, 0.379477, 0.589029 +1516, 0.136182, -0.700757, 0.378611, 0.589108 +1517, 0.136074, -0.701179, 0.377744, 0.589187 +1518, 0.135966, -0.701598, 0.376877, 0.589268 +1519, 0.135858, -0.702016, 0.376009, 0.589350 +1520, 0.135749, -0.702432, 0.375141, 0.589433 +1521, 0.135641, -0.702845, 0.374273, 0.589517 +1522, 0.135532, -0.703257, 0.373404, 0.589602 +1523, 0.135423, -0.703667, 0.372534, 0.589688 +1524, 0.135315, -0.704075, 0.371665, 0.589775 +1525, 0.135205, -0.704481, 0.370795, 0.589863 +1526, 0.135096, -0.704884, 0.369924, 0.589952 +1527, 0.134987, -0.705286, 0.369053, 0.590042 +1528, 0.134877, -0.705687, 0.368182, 0.590133 +1529, 0.134767, -0.706085, 0.367311, 0.590225 +1530, 0.134657, -0.706481, 0.366439, 0.590318 +1531, 0.134547, -0.706875, 0.365567, 0.590412 +1532, 0.134437, -0.707267, 0.364694, 0.590507 +1533, 0.134326, -0.707657, 0.363821, 0.590603 +1534, 0.134216, -0.708046, 0.362948, 0.590700 +1535, 0.134105, -0.708432, 0.362074, 0.590798 +1536, 0.133994, -0.708816, 0.361200, 0.590897 +1537, 0.133882, -0.709199, 0.360326, 0.590997 +1538, 0.133771, -0.709579, 0.359451, 0.591098 +1539, 0.133659, -0.709958, 0.358576, 0.591200 +1540, 0.133547, -0.710335, 0.357701, 0.591304 +1541, 0.133435, -0.710709, 0.356826, 0.591408 +1542, 0.133322, -0.711082, 0.355950, 0.591513 +1543, 0.133210, -0.711453, 0.355074, 0.591619 +1544, 0.133097, -0.711821, 0.354198, 0.591726 +1545, 0.132984, -0.712188, 0.353321, 0.591834 +1546, 0.132870, -0.712553, 0.352444, 0.591943 +1547, 0.132757, -0.712916, 0.351567, 0.592053 +1548, 0.132643, -0.713277, 0.350689, 0.592164 +1549, 0.132528, -0.713636, 0.349812, 0.592277 +1550, 0.132414, -0.713993, 0.348934, 0.592390 +1551, 0.132299, -0.714348, 0.348056, 0.592504 +1552, 0.132184, -0.714702, 0.347177, 0.592619 +1553, 0.132069, -0.715053, 0.346299, 0.592735 +1554, 0.131953, -0.715402, 0.345420, 0.592852 +1555, 0.131838, -0.715749, 0.344541, 0.592970 +1556, 0.131721, -0.716095, 0.343661, 0.593089 +1557, 0.131605, -0.716438, 0.342782, 0.593209 +1558, 0.131488, -0.716780, 0.341902, 0.593330 +1559, 0.131371, -0.717119, 0.341022, 0.593452 +1560, 0.131254, -0.717457, 0.340142, 0.593575 +1561, 0.131136, -0.717793, 0.339262, 0.593699 +1562, 0.131018, -0.718126, 0.338381, 0.593824 +1563, 0.130900, -0.718458, 0.337500, 0.593950 +1564, 0.130781, -0.718788, 0.336619, 0.594077 +1565, 0.130662, -0.719116, 0.335738, 0.594205 +1566, 0.130543, -0.719442, 0.334857, 0.594334 +1567, 0.130423, -0.719766, 0.333976, 0.594464 +1568, 0.130303, -0.720088, 0.333094, 0.594594 +1569, 0.130183, -0.720408, 0.332213, 0.594726 +1570, 0.130062, -0.720726, 0.331331, 0.594859 +1571, 0.129941, -0.721043, 0.330449, 0.594993 +1572, 0.129820, -0.721357, 0.329567, 0.595127 +1573, 0.129698, -0.721669, 0.328685, 0.595263 +1574, 0.129576, -0.721980, 0.327802, 0.595400 +1575, 0.129453, -0.722288, 0.326920, 0.595537 +1576, 0.129331, -0.722595, 0.326037, 0.595676 +1577, 0.129207, -0.722900, 0.325155, 0.595815 +1578, 0.129084, -0.723202, 0.324272, 0.595956 +1579, 0.128960, -0.723503, 0.323389, 0.596097 +1580, 0.128835, -0.723802, 0.322506, 0.596240 +1581, 0.128710, -0.724099, 0.321623, 0.596383 +1582, 0.128585, -0.724394, 0.320740, 0.596527 +1583, 0.128459, -0.724687, 0.319857, 0.596673 +1584, 0.128333, -0.724978, 0.318974, 0.596819 +1585, 0.128207, -0.725268, 0.318090, 0.596966 +1586, 0.128080, -0.725555, 0.317207, 0.597114 +1587, 0.127952, -0.725840, 0.316324, 0.597263 +1588, 0.127825, -0.726124, 0.315440, 0.597413 +1589, 0.127697, -0.726405, 0.314557, 0.597564 +1590, 0.127568, -0.726685, 0.313673, 0.597716 +1591, 0.127439, -0.726963, 0.312789, 0.597869 +1592, 0.127309, -0.727239, 0.311906, 0.598023 +1593, 0.127179, -0.727512, 0.311022, 0.598177 +1594, 0.127049, -0.727784, 0.310139, 0.598333 +1595, 0.126918, -0.728054, 0.309255, 0.598490 +1596, 0.126787, -0.728323, 0.308371, 0.598647 +1597, 0.126655, -0.728589, 0.307488, 0.598806 +1598, 0.126523, -0.728853, 0.306604, 0.598965 +1599, 0.126390, -0.729116, 0.305720, 0.599125 +1600, 0.126257, -0.729376, 0.304837, 0.599287 +1601, 0.126123, -0.729635, 0.303953, 0.599449 +1602, 0.125989, -0.729891, 0.303069, 0.599612 +1603, 0.125854, -0.730146, 0.302186, 0.599776 +1604, 0.125719, -0.730399, 0.301302, 0.599941 +1605, 0.125583, -0.730650, 0.300419, 0.600107 +1606, 0.125447, -0.730899, 0.299536, 0.600274 +1607, 0.125310, -0.731146, 0.298652, 0.600441 +1608, 0.125173, -0.731391, 0.297769, 0.600610 +1609, 0.125035, -0.731635, 0.296886, 0.600779 +1610, 0.124897, -0.731876, 0.296002, 0.600950 +1611, 0.124758, -0.732116, 0.295119, 0.601121 +1612, 0.124619, -0.732353, 0.294236, 0.601293 +1613, 0.124479, -0.732589, 0.293353, 0.601466 +1614, 0.124339, -0.732823, 0.292470, 0.601641 +1615, 0.124198, -0.733055, 0.291588, 0.601815 +1616, 0.124056, -0.733285, 0.290705, 0.601991 +1617, 0.123914, -0.733513, 0.289822, 0.602168 +1618, 0.123772, -0.733740, 0.288940, 0.602346 +1619, 0.123629, -0.733964, 0.288058, 0.602524 +1620, 0.123485, -0.734187, 0.287175, 0.602704 +1621, 0.123341, -0.734407, 0.286293, 0.602884 +1622, 0.123196, -0.734626, 0.285411, 0.603065 +1623, 0.123051, -0.734843, 0.284529, 0.603247 +1624, 0.122905, -0.735058, 0.283648, 0.603430 +1625, 0.122758, -0.735271, 0.282766, 0.603614 +1626, 0.122611, -0.735483, 0.281885, 0.603799 +1627, 0.122463, -0.735692, 0.281003, 0.603984 +1628, 0.122315, -0.735900, 0.280122, 0.604171 +1629, 0.122166, -0.736105, 0.279241, 0.604358 +1630, 0.122017, -0.736309, 0.278361, 0.604546 +1631, 0.121867, -0.736511, 0.277480, 0.604735 +1632, 0.121716, -0.736711, 0.276600, 0.604925 +1633, 0.121565, -0.736909, 0.275719, 0.605116 +1634, 0.121413, -0.737106, 0.274839, 0.605308 +1635, 0.121260, -0.737300, 0.273959, 0.605500 +1636, 0.121107, -0.737493, 0.273080, 0.605694 +1637, 0.120953, -0.737684, 0.272200, 0.605888 +1638, 0.120799, -0.737873, 0.271321, 0.606083 +1639, 0.120644, -0.738060, 0.270442, 0.606279 +1640, 0.120488, -0.738245, 0.269563, 0.606476 +1641, 0.120332, -0.738428, 0.268685, 0.606673 +1642, 0.120175, -0.738610, 0.267806, 0.606872 +1643, 0.120017, -0.738790, 0.266928, 0.607071 +1644, 0.119859, -0.738967, 0.266050, 0.607271 +1645, 0.119700, -0.739143, 0.265173, 0.607472 +1646, 0.119540, -0.739318, 0.264295, 0.607674 +1647, 0.119380, -0.739490, 0.263418, 0.607877 +1648, 0.119219, -0.739660, 0.262541, 0.608080 +1649, 0.119057, -0.739829, 0.261665, 0.608284 +1650, 0.118895, -0.739996, 0.260788, 0.608490 +1651, 0.118732, -0.740161, 0.259912, 0.608696 +1652, 0.118568, -0.740324, 0.259036, 0.608902 +1653, 0.118404, -0.740485, 0.258161, 0.609110 +1654, 0.118239, -0.740645, 0.257286, 0.609318 +1655, 0.118073, -0.740803, 0.256411, 0.609528 +1656, 0.117907, -0.740958, 0.255536, 0.609738 +1657, 0.117740, -0.741112, 0.254662, 0.609948 +1658, 0.117572, -0.741265, 0.253788, 0.610160 +1659, 0.117403, -0.741415, 0.252914, 0.610373 +1660, 0.117234, -0.741564, 0.252040, 0.610586 +1661, 0.117064, -0.741710, 0.251167, 0.610800 +1662, 0.116893, -0.741855, 0.250295, 0.611015 +1663, 0.116722, -0.741999, 0.249422, 0.611230 +1664, 0.116550, -0.742140, 0.248550, 0.611447 +1665, 0.116377, -0.742280, 0.247678, 0.611664 +1666, 0.116203, -0.742417, 0.246807, 0.611882 +1667, 0.116029, -0.742553, 0.245936, 0.612101 +1668, 0.115854, -0.742687, 0.245065, 0.612320 +1669, 0.115678, -0.742820, 0.244195, 0.612541 +1670, 0.115501, -0.742950, 0.243325, 0.612762 +1671, 0.115324, -0.743079, 0.242455, 0.612984 +1672, 0.115146, -0.743206, 0.241586, 0.613206 +1673, 0.114967, -0.743331, 0.240717, 0.613430 +1674, 0.114787, -0.743455, 0.239849, 0.613654 +1675, 0.114607, -0.743577, 0.238980, 0.613879 +1676, 0.114426, -0.743696, 0.238113, 0.614105 +1677, 0.114244, -0.743815, 0.237245, 0.614331 +1678, 0.114061, -0.743931, 0.236379, 0.614559 +1679, 0.113877, -0.744045, 0.235512, 0.614786 +1680, 0.113693, -0.744158, 0.234646, 0.615015 +1681, 0.113508, -0.744269, 0.233780, 0.615245 +1682, 0.113322, -0.744378, 0.232915, 0.615475 +1683, 0.113135, -0.744486, 0.232050, 0.615706 +1684, 0.112948, -0.744592, 0.231186, 0.615938 +1685, 0.112760, -0.744696, 0.230322, 0.616170 +1686, 0.112570, -0.744798, 0.229458, 0.616403 +1687, 0.112381, -0.744898, 0.228595, 0.616637 +1688, 0.112190, -0.744997, 0.227733, 0.616872 +1689, 0.111998, -0.745094, 0.226870, 0.617107 +1690, 0.111806, -0.745189, 0.226009, 0.617343 +1691, 0.111613, -0.745283, 0.225148, 0.617580 +1692, 0.111419, -0.745374, 0.224287, 0.617817 +1693, 0.111224, -0.745464, 0.223426, 0.618056 +1694, 0.111028, -0.745553, 0.222567, 0.618295 +1695, 0.110832, -0.745639, 0.221707, 0.618534 +1696, 0.110634, -0.745724, 0.220848, 0.618775 +1697, 0.110436, -0.745807, 0.219990, 0.619016 +1698, 0.110237, -0.745888, 0.219132, 0.619257 +1699, 0.110037, -0.745968, 0.218275, 0.619500 +1700, 0.109836, -0.746046, 0.217418, 0.619743 +1701, 0.109634, -0.746122, 0.216561, 0.619987 +1702, 0.109432, -0.746196, 0.215705, 0.620231 +1703, 0.109229, -0.746269, 0.214850, 0.620476 +1704, 0.109024, -0.746340, 0.213995, 0.620722 +1705, 0.108819, -0.746410, 0.213141, 0.620969 +1706, 0.108613, -0.746477, 0.212287, 0.621216 +1707, 0.108406, -0.746543, 0.211434, 0.621464 +1708, 0.108199, -0.746607, 0.210581, 0.621712 +1709, 0.107990, -0.746670, 0.209729, 0.621962 +1710, 0.107781, -0.746731, 0.208877, 0.622211 +1711, 0.107570, -0.746790, 0.208026, 0.622462 +1712, 0.107359, -0.746847, 0.207176, 0.622713 +1713, 0.107147, -0.746903, 0.206326, 0.622965 +1714, 0.106934, -0.746957, 0.205476, 0.623217 +1715, 0.106720, -0.747009, 0.204627, 0.623471 +1716, 0.106505, -0.747060, 0.203779, 0.623724 +1717, 0.106289, -0.747109, 0.202931, 0.623979 +1718, 0.106072, -0.747156, 0.202084, 0.624234 +1719, 0.105854, -0.747202, 0.201238, 0.624489 +1720, 0.105636, -0.747246, 0.200392, 0.624746 +1721, 0.105416, -0.747289, 0.199547, 0.625003 +1722, 0.105196, -0.747329, 0.198702, 0.625260 +1723, 0.104974, -0.747368, 0.197858, 0.625518 +1724, 0.104752, -0.747406, 0.197014, 0.625777 +1725, 0.104529, -0.747441, 0.196171, 0.626037 +1726, 0.104305, -0.747475, 0.195329, 0.626297 +1727, 0.104080, -0.747508, 0.194487, 0.626557 +1728, 0.103854, -0.747539, 0.193646, 0.626819 +1729, 0.103627, -0.747568, 0.192806, 0.627080 +1730, 0.103399, -0.747595, 0.191966, 0.627343 +1731, 0.103170, -0.747621, 0.191127, 0.627606 +1732, 0.102940, -0.747645, 0.190288, 0.627870 +1733, 0.102709, -0.747668, 0.189450, 0.628134 +1734, 0.102477, -0.747689, 0.188613, 0.628399 +1735, 0.102244, -0.747708, 0.187777, 0.628664 +1736, 0.102011, -0.747726, 0.186941, 0.628930 +1737, 0.101776, -0.747742, 0.186106, 0.629196 +1738, 0.101540, -0.747757, 0.185271, 0.629464 +1739, 0.101304, -0.747769, 0.184437, 0.629731 +1740, 0.101066, -0.747781, 0.183604, 0.629999 +1741, 0.100827, -0.747790, 0.182771, 0.630268 +1742, 0.100588, -0.747798, 0.181939, 0.630538 +1743, 0.100347, -0.747805, 0.181108, 0.630808 +1744, 0.100106, -0.747810, 0.180278, 0.631078 +1745, 0.099863, -0.747813, 0.179448, 0.631349 +1746, 0.099619, -0.747815, 0.178619, 0.631621 +1747, 0.099375, -0.747815, 0.177790, 0.631893 +1748, 0.099129, -0.747813, 0.176963, 0.632165 +1749, 0.098883, -0.747810, 0.176136, 0.632438 +1750, 0.098635, -0.747806, 0.175309, 0.632712 +1751, 0.098386, -0.747799, 0.174484, 0.632986 +1752, 0.098137, -0.747791, 0.173659, 0.633261 +1753, 0.097886, -0.747782, 0.172835, 0.633536 +1754, 0.097634, -0.747771, 0.172011, 0.633812 +1755, 0.097382, -0.747759, 0.171189, 0.634088 +1756, 0.097128, -0.747745, 0.170367, 0.634365 +1757, 0.096873, -0.747729, 0.169546, 0.634643 +1758, 0.096617, -0.747712, 0.168725, 0.634920 +1759, 0.096361, -0.747693, 0.167906, 0.635199 +1760, 0.096103, -0.747673, 0.167087, 0.635478 +1761, 0.095844, -0.747651, 0.166268, 0.635757 +1762, 0.095584, -0.747628, 0.165451, 0.636037 +1763, 0.095323, -0.747603, 0.164634, 0.636317 +1764, 0.095061, -0.747576, 0.163819, 0.636598 +1765, 0.094798, -0.747548, 0.163003, 0.636879 +1766, 0.094534, -0.747519, 0.162189, 0.637161 +1767, 0.094268, -0.747488, 0.161376, 0.637443 +1768, 0.094002, -0.747455, 0.160563, 0.637725 +1769, 0.093735, -0.747421, 0.159751, 0.638008 +1770, 0.093466, -0.747386, 0.158940, 0.638292 +1771, 0.093197, -0.747349, 0.158129, 0.638576 +1772, 0.092926, -0.747310, 0.157320, 0.638861 +1773, 0.092655, -0.747270, 0.156511, 0.639145 +1774, 0.092382, -0.747229, 0.155703, 0.639431 +1775, 0.092108, -0.747185, 0.154896, 0.639717 +1776, 0.091833, -0.747141, 0.154089, 0.640003 +1777, 0.091558, -0.747095, 0.153284, 0.640289 +1778, 0.091281, -0.747047, 0.152479, 0.640577 +1779, 0.091002, -0.746998, 0.151675, 0.640864 +1780, 0.090723, -0.746948, 0.150872, 0.641152 +1781, 0.090443, -0.746896, 0.150070, 0.641440 +1782, 0.090162, -0.746842, 0.149269, 0.641729 +1783, 0.089879, -0.746787, 0.148468, 0.642018 +1784, 0.089596, -0.746731, 0.147668, 0.642308 +1785, 0.089311, -0.746673, 0.146869, 0.642598 +1786, 0.089025, -0.746614, 0.146071, 0.642888 +1787, 0.088738, -0.746553, 0.145274, 0.643179 +1788, 0.088450, -0.746491, 0.144478, 0.643470 +1789, 0.088161, -0.746427, 0.143683, 0.643762 +1790, 0.087871, -0.746362, 0.142888, 0.644054 +1791, 0.087580, -0.746296, 0.142094, 0.644346 +1792, 0.087287, -0.746228, 0.141301, 0.644639 +1793, 0.086994, -0.746158, 0.140509, 0.644932 +1794, 0.086699, -0.746087, 0.139718, 0.645225 +1795, 0.086403, -0.746015, 0.138928, 0.645519 +1796, 0.086106, -0.745941, 0.138139, 0.645813 +1797, 0.085808, -0.745866, 0.137350, 0.646108 +1798, 0.085509, -0.745790, 0.136563, 0.646403 +1799, 0.085208, -0.745712, 0.135776, 0.646698 +1800, 0.084907, -0.745633, 0.134990, 0.646993 +1801, 0.084604, -0.745552, 0.134206, 0.647289 +1802, 0.084301, -0.745470, 0.133422, 0.647586 +1803, 0.083996, -0.745386, 0.132639, 0.647882 +1804, 0.083690, -0.745301, 0.131857, 0.648179 +1805, 0.083382, -0.745215, 0.131075, 0.648476 +1806, 0.083074, -0.745127, 0.130295, 0.648774 +1807, 0.082764, -0.745038, 0.129516, 0.649072 +1808, 0.082454, -0.744948, 0.128737, 0.649370 +1809, 0.082142, -0.744856, 0.127960, 0.649668 +1810, 0.081829, -0.744762, 0.127183, 0.649967 +1811, 0.081515, -0.744668, 0.126408, 0.650266 +1812, 0.081200, -0.744572, 0.125633, 0.650566 +1813, 0.080883, -0.744475, 0.124859, 0.650865 +1814, 0.080565, -0.744376, 0.124086, 0.651165 +1815, 0.080247, -0.744276, 0.123314, 0.651466 +1816, 0.079927, -0.744174, 0.122544, 0.651766 +1817, 0.079605, -0.744072, 0.121774, 0.652067 +1818, 0.079283, -0.743968, 0.121005, 0.652368 +1819, 0.078960, -0.743862, 0.120237, 0.652669 +1820, 0.078635, -0.743756, 0.119470, 0.652971 +1821, 0.078309, -0.743648, 0.118703, 0.653273 +1822, 0.077982, -0.743538, 0.117938, 0.653575 +1823, 0.077654, -0.743427, 0.117174, 0.653877 +1824, 0.077324, -0.743315, 0.116411, 0.654180 +1825, 0.076994, -0.743202, 0.115649, 0.654483 +1826, 0.076662, -0.743087, 0.114888, 0.654786 +1827, 0.076329, -0.742971, 0.114127, 0.655089 +1828, 0.075995, -0.742854, 0.113368, 0.655393 +1829, 0.075659, -0.742736, 0.112610, 0.655697 +1830, 0.075323, -0.742616, 0.111853, 0.656001 +1831, 0.074985, -0.742495, 0.111096, 0.656305 +1832, 0.074646, -0.742372, 0.110341, 0.656610 +1833, 0.074306, -0.742249, 0.109587, 0.656914 +1834, 0.073964, -0.742124, 0.108834, 0.657219 +1835, 0.073622, -0.741997, 0.108081, 0.657524 +1836, 0.073278, -0.741870, 0.107330, 0.657830 +1837, 0.072933, -0.741741, 0.106580, 0.658135 +1838, 0.072587, -0.741611, 0.105831, 0.658441 +1839, 0.072239, -0.741480, 0.105083, 0.658747 +1840, 0.071891, -0.741347, 0.104336, 0.659053 +1841, 0.071541, -0.741213, 0.103589, 0.659359 +1842, 0.071190, -0.741078, 0.102844, 0.659665 +1843, 0.070837, -0.740942, 0.102100, 0.659972 +1844, 0.070484, -0.740804, 0.101357, 0.660279 +1845, 0.070129, -0.740665, 0.100615, 0.660586 +1846, 0.069773, -0.740525, 0.099874, 0.660893 +1847, 0.069416, -0.740384, 0.099135, 0.661200 +1848, 0.069057, -0.740242, 0.098396, 0.661507 +1849, 0.068697, -0.740098, 0.097658, 0.661815 +1850, 0.068336, -0.739953, 0.096921, 0.662122 +1851, 0.067974, -0.739807, 0.096186, 0.662430 +1852, 0.067611, -0.739660, 0.095451, 0.662738 +1853, 0.067246, -0.739511, 0.094717, 0.663046 +1854, 0.066880, -0.739361, 0.093985, 0.663354 +1855, 0.066513, -0.739210, 0.093254, 0.663662 +1856, 0.066145, -0.739058, 0.092523, 0.663971 +1857, 0.065775, -0.738905, 0.091794, 0.664279 +1858, 0.065404, -0.738750, 0.091066, 0.664588 +1859, 0.065032, -0.738595, 0.090339, 0.664897 +1860, 0.064659, -0.738438, 0.089613, 0.665205 +1861, 0.064284, -0.738280, 0.088888, 0.665514 +1862, 0.063909, -0.738121, 0.088164, 0.665823 +1863, 0.063531, -0.737960, 0.087441, 0.666132 +1864, 0.063153, -0.737799, 0.086719, 0.666441 +1865, 0.062773, -0.737636, 0.085999, 0.666751 +1866, 0.062393, -0.737473, 0.085279, 0.667060 +1867, 0.062010, -0.737308, 0.084561, 0.667369 +1868, 0.061627, -0.737142, 0.083844, 0.667679 +1869, 0.061242, -0.736974, 0.083127, 0.667988 +1870, 0.060857, -0.736806, 0.082412, 0.668298 +1871, 0.060469, -0.736637, 0.081698, 0.668607 +1872, 0.060081, -0.736466, 0.080985, 0.668917 +1873, 0.059691, -0.736294, 0.080274, 0.669226 +1874, 0.059300, -0.736121, 0.079563, 0.669536 +1875, 0.058908, -0.735947, 0.078854, 0.669846 +1876, 0.058515, -0.735772, 0.078145, 0.670155 +1877, 0.058120, -0.735596, 0.077438, 0.670465 +1878, 0.057724, -0.735419, 0.076732, 0.670775 +1879, 0.057326, -0.735241, 0.076027, 0.671085 +1880, 0.056928, -0.735061, 0.075323, 0.671395 +1881, 0.056528, -0.734881, 0.074620, 0.671704 +1882, 0.056127, -0.734699, 0.073918, 0.672014 +1883, 0.055724, -0.734516, 0.073218, 0.672324 +1884, 0.055321, -0.734333, 0.072519, 0.672634 +1885, 0.054916, -0.734148, 0.071820, 0.672944 +1886, 0.054509, -0.733962, 0.071123, 0.673253 +1887, 0.054102, -0.733775, 0.070427, 0.673563 +1888, 0.053693, -0.733587, 0.069733, 0.673873 +1889, 0.053283, -0.733398, 0.069039, 0.674182 +1890, 0.052872, -0.733208, 0.068347, 0.674492 +1891, 0.052459, -0.733017, 0.067655, 0.674802 +1892, 0.052045, -0.732825, 0.066965, 0.675111 +1893, 0.051630, -0.732631, 0.066276, 0.675421 +1894, 0.051213, -0.732437, 0.065588, 0.675730 +1895, 0.050795, -0.732242, 0.064902, 0.676039 +1896, 0.050376, -0.732046, 0.064216, 0.676349 +1897, 0.049956, -0.731848, 0.063532, 0.676658 +1898, 0.049534, -0.731650, 0.062849, 0.676967 +1899, 0.049111, -0.731451, 0.062167, 0.677276 +1900, 0.048687, -0.731250, 0.061486, 0.677585 +1901, 0.048261, -0.731049, 0.060806, 0.677894 +1902, 0.047834, -0.730847, 0.060128, 0.678203 +1903, 0.047406, -0.730643, 0.059450, 0.678512 +1904, 0.046976, -0.730439, 0.058774, 0.678821 +1905, 0.046546, -0.730234, 0.058099, 0.679129 +1906, 0.046114, -0.730028, 0.057426, 0.679438 +1907, 0.045680, -0.729820, 0.056753, 0.679746 +1908, 0.045246, -0.729612, 0.056082, 0.680054 +1909, 0.044810, -0.729403, 0.055412, 0.680362 +1910, 0.044372, -0.729193, 0.054743, 0.680670 +1911, 0.043934, -0.728982, 0.054075, 0.680978 +1912, 0.043494, -0.728770, 0.053408, 0.681286 +1913, 0.043053, -0.728557, 0.052743, 0.681593 +1914, 0.042610, -0.728343, 0.052079, 0.681901 +1915, 0.042166, -0.728128, 0.051416, 0.682208 +1916, 0.041721, -0.727912, 0.050754, 0.682515 +1917, 0.041275, -0.727696, 0.050094, 0.682822 +1918, 0.040827, -0.727478, 0.049434, 0.683129 +1919, 0.040378, -0.727259, 0.048776, 0.683436 +1920, 0.039927, -0.727040, 0.048119, 0.683742 +1921, 0.039476, -0.726820, 0.047464, 0.684048 +1922, 0.039023, -0.726598, 0.046809, 0.684354 +1923, 0.038568, -0.726376, 0.046156, 0.684660 +1924, 0.038113, -0.726153, 0.045504, 0.684966 +1925, 0.037656, -0.725929, 0.044853, 0.685272 +1926, 0.037198, -0.725704, 0.044203, 0.685577 +1927, 0.036738, -0.725479, 0.043555, 0.685882 +1928, 0.036277, -0.725252, 0.042908, 0.686187 +1929, 0.035815, -0.725024, 0.042262, 0.686492 +1930, 0.035352, -0.724796, 0.041617, 0.686796 +1931, 0.034887, -0.724567, 0.040974, 0.687100 +1932, 0.034421, -0.724337, 0.040332, 0.687404 +1933, 0.033953, -0.724106, 0.039691, 0.687708 +1934, 0.033485, -0.723874, 0.039051, 0.688012 +1935, 0.033014, -0.723641, 0.038412, 0.688315 +1936, 0.032543, -0.723408, 0.037775, 0.688618 +1937, 0.032070, -0.723174, 0.037139, 0.688921 +1938, 0.031596, -0.722938, 0.036504, 0.689224 +1939, 0.031121, -0.722702, 0.035871, 0.689526 +1940, 0.030644, -0.722466, 0.035239, 0.689828 +1941, 0.030166, -0.722228, 0.034608, 0.690130 +1942, 0.029687, -0.721990, 0.033978, 0.690431 +1943, 0.029206, -0.721750, 0.033349, 0.690733 +1944, 0.028725, -0.721510, 0.032722, 0.691033 +1945, 0.028241, -0.721269, 0.032096, 0.691334 +1946, 0.027757, -0.721028, 0.031471, 0.691634 +1947, 0.027271, -0.720785, 0.030848, 0.691935 +1948, 0.026784, -0.720542, 0.030225, 0.692234 +1949, 0.026295, -0.720298, 0.029604, 0.692534 +1950, 0.025805, -0.720053, 0.028985, 0.692833 +1951, 0.025314, -0.719808, 0.028366, 0.693132 +1952, 0.024822, -0.719561, 0.027749, 0.693430 +1953, 0.024328, -0.719314, 0.027133, 0.693729 +1954, 0.023833, -0.719066, 0.026518, 0.694026 +1955, 0.023336, -0.718818, 0.025905, 0.694324 +1956, 0.022838, -0.718568, 0.025293, 0.694621 +1957, 0.022339, -0.718318, 0.024682, 0.694918 +1958, 0.021839, -0.718067, 0.024072, 0.695214 +1959, 0.021337, -0.717816, 0.023464, 0.695511 +1960, 0.020834, -0.717563, 0.022857, 0.695806 +1961, 0.020330, -0.717310, 0.022251, 0.696102 +1962, 0.019824, -0.717056, 0.021646, 0.696397 +1963, 0.019317, -0.716802, 0.021043, 0.696692 +1964, 0.018808, -0.716547, 0.020441, 0.696986 +1965, 0.018299, -0.716291, 0.019841, 0.697280 +1966, 0.017788, -0.716034, 0.019241, 0.697573 +1967, 0.017275, -0.715777, 0.018643, 0.697867 +1968, 0.016762, -0.715519, 0.018046, 0.698159 +1969, 0.016247, -0.715260, 0.017451, 0.698452 +1970, 0.015731, -0.715000, 0.016856, 0.698744 +1971, 0.015213, -0.714740, 0.016263, 0.699035 +1972, 0.014694, -0.714480, 0.015672, 0.699326 +1973, 0.014174, -0.714218, 0.015081, 0.699617 +1974, 0.013652, -0.713956, 0.014492, 0.699907 +1975, 0.013129, -0.713693, 0.013904, 0.700197 +1976, 0.012605, -0.713430, 0.013318, 0.700487 +1977, 0.012080, -0.713166, 0.012732, 0.700776 +1978, 0.011553, -0.712901, 0.012149, 0.701064 +1979, 0.011025, -0.712636, 0.011566, 0.701352 +1980, 0.010495, -0.712369, 0.010984, 0.701640 +1981, 0.009964, -0.712103, 0.010404, 0.701927 +1982, 0.009432, -0.711835, 0.009826, 0.702214 +1983, 0.008899, -0.711568, 0.009248, 0.702500 +1984, 0.008364, -0.711299, 0.008672, 0.702786 +1985, 0.007828, -0.711030, 0.008097, 0.703072 +1986, 0.007291, -0.710760, 0.007523, 0.703356 +1987, 0.006752, -0.710490, 0.006951, 0.703641 +1988, 0.006212, -0.710219, 0.006380, 0.703925 +1989, 0.005671, -0.709947, 0.005810, 0.704208 +1990, 0.005128, -0.709675, 0.005242, 0.704491 +1991, 0.004584, -0.709402, 0.004675, 0.704774 +1992, 0.004039, -0.709129, 0.004109, 0.705055 +1993, 0.003492, -0.708855, 0.003545, 0.705337 +1994, 0.002944, -0.708580, 0.002982, 0.705618 +1995, 0.002395, -0.708305, 0.002420, 0.705898 +1996, 0.001845, -0.708030, 0.001859, 0.706178 +1997, 0.001293, -0.707753, 0.001300, 0.706457 +1998, 0.000740, -0.707477, 0.000742, 0.706736 +1999, 0.000185, -0.707199, 0.000185, 0.707014 +2000, -0.000371, -0.706921, -0.000370, 0.707292 +2001, -0.000928, -0.706643, -0.000924, 0.707569 +2002, -0.001486, -0.706364, -0.001477, 0.707846 +2003, -0.002046, -0.706085, -0.002028, 0.708122 +2004, -0.002607, -0.705805, -0.002578, 0.708397 +2005, -0.003169, -0.705524, -0.003127, 0.708672 +2006, -0.003733, -0.705243, -0.003675, 0.708946 +2007, -0.004298, -0.704962, -0.004221, 0.709220 +2008, -0.004864, -0.704679, -0.004765, 0.709493 +2009, -0.005431, -0.704397, -0.005309, 0.709766 +2010, -0.006000, -0.704114, -0.005851, 0.710038 +2011, -0.006570, -0.703830, -0.006392, 0.710309 +2012, -0.007142, -0.703546, -0.006932, 0.710580 +2013, -0.007714, -0.703262, -0.007470, 0.710850 +2014, -0.008288, -0.702977, -0.008007, 0.711120 +2015, -0.008864, -0.702691, -0.008543, 0.711389 +2016, -0.009440, -0.702405, -0.009077, 0.711657 +2017, -0.010018, -0.702119, -0.009610, 0.711925 +2018, -0.010598, -0.701832, -0.010141, 0.712192 +2019, -0.011178, -0.701544, -0.010672, 0.712458 +2020, -0.011760, -0.701257, -0.011201, 0.712724 +2021, -0.012343, -0.700968, -0.011729, 0.712989 +2022, -0.012927, -0.700680, -0.012255, 0.713254 +2023, -0.013513, -0.700390, -0.012780, 0.713518 +2024, -0.014100, -0.700101, -0.013304, 0.713781 +2025, -0.014688, -0.699811, -0.013826, 0.714043 +2026, -0.015278, -0.699520, -0.014347, 0.714305 +2027, -0.015869, -0.699229, -0.014867, 0.714567 +2028, -0.016461, -0.698938, -0.015386, 0.714827 +2029, -0.017054, -0.698646, -0.015903, 0.715087 +2030, -0.017649, -0.698354, -0.016419, 0.715346 +2031, -0.018245, -0.698062, -0.016933, 0.715605 +2032, -0.018842, -0.697769, -0.017446, 0.715862 +2033, -0.019441, -0.697476, -0.017958, 0.716120 +2034, -0.020041, -0.697182, -0.018469, 0.716376 +2035, -0.020642, -0.696888, -0.018978, 0.716632 +2036, -0.021244, -0.696593, -0.019486, 0.716887 +2037, -0.021848, -0.696299, -0.019993, 0.717141 +2038, -0.022453, -0.696003, -0.020498, 0.717395 +2039, -0.023059, -0.695708, -0.021002, 0.717647 +2040, -0.023666, -0.695412, -0.021504, 0.717899 +2041, -0.024275, -0.695116, -0.022006, 0.718151 +2042, -0.024885, -0.694819, -0.022506, 0.718401 +2043, -0.025497, -0.694522, -0.023004, 0.718651 +2044, -0.026109, -0.694225, -0.023502, 0.718900 +2045, -0.026723, -0.693927, -0.023998, 0.719149 +2046, -0.027338, -0.693629, -0.024492, 0.719397 +2047, -0.027955, -0.693331, -0.024986, 0.719643 +2048, -0.028572, -0.693032, -0.025478, 0.719889 +2049, -0.029191, -0.692733, -0.025969, 0.720135 +2050, -0.029811, -0.692434, -0.026458, 0.720379 +2051, -0.030433, -0.692134, -0.026946, 0.720623 +2052, -0.031055, -0.691835, -0.027433, 0.720866 +2053, -0.031679, -0.691534, -0.027918, 0.721108 +2054, -0.032304, -0.691234, -0.028402, 0.721350 +2055, -0.032931, -0.690933, -0.028885, 0.721590 +2056, -0.033559, -0.690632, -0.029367, 0.721830 +2057, -0.034188, -0.690331, -0.029847, 0.722069 +2058, -0.034818, -0.690029, -0.030326, 0.722307 +2059, -0.035449, -0.689727, -0.030803, 0.722545 +2060, -0.036082, -0.689425, -0.031280, 0.722781 +2061, -0.036716, -0.689123, -0.031754, 0.723017 +2062, -0.037351, -0.688820, -0.032228, 0.723252 +2063, -0.037988, -0.688517, -0.032700, 0.723486 +2064, -0.038625, -0.688214, -0.033171, 0.723719 +2065, -0.039264, -0.687911, -0.033641, 0.723951 +2066, -0.039904, -0.687607, -0.034109, 0.724183 +2067, -0.040546, -0.687303, -0.034576, 0.724414 +2068, -0.041188, -0.686999, -0.035042, 0.724643 +2069, -0.041832, -0.686695, -0.035506, 0.724872 +2070, -0.042477, -0.686390, -0.035969, 0.725100 +2071, -0.043124, -0.686085, -0.036431, 0.725328 +2072, -0.043771, -0.685780, -0.036891, 0.725554 +2073, -0.044420, -0.685475, -0.037351, 0.725779 +2074, -0.045070, -0.685170, -0.037808, 0.726004 +2075, -0.045721, -0.684864, -0.038265, 0.726228 +2076, -0.046373, -0.684558, -0.038720, 0.726450 +2077, -0.047027, -0.684252, -0.039174, 0.726672 +2078, -0.047682, -0.683946, -0.039626, 0.726893 +2079, -0.048338, -0.683640, -0.040078, 0.727113 +2080, -0.048995, -0.683333, -0.040528, 0.727332 +2081, -0.049654, -0.683027, -0.040976, 0.727551 +2082, -0.050314, -0.682720, -0.041424, 0.727768 +2083, -0.050975, -0.682413, -0.041870, 0.727984 +2084, -0.051637, -0.682106, -0.042314, 0.728200 +2085, -0.052300, -0.681798, -0.042758, 0.728414 +2086, -0.052965, -0.681491, -0.043200, 0.728628 +2087, -0.053630, -0.681183, -0.043640, 0.728841 +2088, -0.054297, -0.680875, -0.044080, 0.729052 +2089, -0.054966, -0.680568, -0.044518, 0.729263 +2090, -0.055635, -0.680260, -0.044955, 0.729473 +2091, -0.056305, -0.679951, -0.045391, 0.729682 +2092, -0.056977, -0.679643, -0.045825, 0.729890 +2093, -0.057650, -0.679335, -0.046258, 0.730096 +2094, -0.058324, -0.679026, -0.046689, 0.730302 +2095, -0.059000, -0.678718, -0.047120, 0.730507 +2096, -0.059676, -0.678409, -0.047549, 0.730711 +2097, -0.060354, -0.678100, -0.047977, 0.730914 +2098, -0.061033, -0.677791, -0.048403, 0.731116 +2099, -0.061713, -0.677482, -0.048828, 0.731317 +2100, -0.062394, -0.677173, -0.049252, 0.731517 +2101, -0.063076, -0.676864, -0.049675, 0.731716 +2102, -0.063760, -0.676555, -0.050096, 0.731914 +2103, -0.064444, -0.676246, -0.050516, 0.732111 +2104, -0.065130, -0.675936, -0.050935, 0.732307 +2105, -0.065817, -0.675627, -0.051352, 0.732502 +2106, -0.066506, -0.675317, -0.051768, 0.732696 +2107, -0.067195, -0.675008, -0.052183, 0.732889 +2108, -0.067886, -0.674698, -0.052597, 0.733081 +2109, -0.068577, -0.674389, -0.053009, 0.733271 +2110, -0.069270, -0.674079, -0.053420, 0.733461 +2111, -0.069964, -0.673769, -0.053829, 0.733650 +2112, -0.070659, -0.673460, -0.054238, 0.733838 +2113, -0.071356, -0.673150, -0.054645, 0.734024 +2114, -0.072053, -0.672840, -0.055051, 0.734210 +2115, -0.072752, -0.672530, -0.055455, 0.734394 +2116, -0.073451, -0.672221, -0.055859, 0.734577 +2117, -0.074152, -0.671911, -0.056261, 0.734760 +2118, -0.074854, -0.671601, -0.056661, 0.734941 +2119, -0.075557, -0.671291, -0.057061, 0.735121 +2120, -0.076262, -0.670982, -0.057459, 0.735300 +2121, -0.076967, -0.670672, -0.057856, 0.735478 +2122, -0.077673, -0.670362, -0.058252, 0.735655 +2123, -0.078381, -0.670052, -0.058646, 0.735831 +2124, -0.079090, -0.669742, -0.059039, 0.736006 +2125, -0.079800, -0.669433, -0.059431, 0.736179 +2126, -0.080511, -0.669123, -0.059821, 0.736352 +2127, -0.081223, -0.668813, -0.060211, 0.736523 +2128, -0.081936, -0.668504, -0.060599, 0.736693 +2129, -0.082651, -0.668194, -0.060985, 0.736862 +2130, -0.083366, -0.667885, -0.061371, 0.737030 +2131, -0.084083, -0.667575, -0.061755, 0.737197 +2132, -0.084800, -0.667266, -0.062138, 0.737363 +2133, -0.085519, -0.666957, -0.062520, 0.737527 +2134, -0.086239, -0.666647, -0.062900, 0.737691 +2135, -0.086960, -0.666338, -0.063279, 0.737853 +2136, -0.087682, -0.666029, -0.063657, 0.738014 +2137, -0.088405, -0.665720, -0.064034, 0.738174 +2138, -0.089129, -0.665411, -0.064409, 0.738333 +2139, -0.089855, -0.665102, -0.064784, 0.738490 +2140, -0.090581, -0.664794, -0.065157, 0.738647 +2141, -0.091308, -0.664485, -0.065528, 0.738802 +2142, -0.092037, -0.664176, -0.065899, 0.738956 +2143, -0.092767, -0.663868, -0.066268, 0.739109 +2144, -0.093497, -0.663560, -0.066636, 0.739261 +2145, -0.094229, -0.663251, -0.067002, 0.739411 +2146, -0.094962, -0.662943, -0.067368, 0.739561 +2147, -0.095696, -0.662635, -0.067732, 0.739709 +2148, -0.096431, -0.662327, -0.068095, 0.739856 +2149, -0.097167, -0.662020, -0.068457, 0.740001 +2150, -0.097904, -0.661712, -0.068817, 0.740146 +2151, -0.098642, -0.661405, -0.069177, 0.740289 +2152, -0.099381, -0.661097, -0.069535, 0.740431 +2153, -0.100121, -0.660790, -0.069892, 0.740572 +2154, -0.100863, -0.660483, -0.070247, 0.740712 +2155, -0.101605, -0.660176, -0.070602, 0.740850 +2156, -0.102348, -0.659870, -0.070955, 0.740987 +2157, -0.103093, -0.659563, -0.071307, 0.741123 +2158, -0.103838, -0.659257, -0.071657, 0.741258 +2159, -0.104584, -0.658951, -0.072007, 0.741391 +2160, -0.105332, -0.658645, -0.072355, 0.741523 +2161, -0.106080, -0.658339, -0.072702, 0.741654 +2162, -0.106830, -0.658033, -0.073048, 0.741784 +2163, -0.107581, -0.657728, -0.073393, 0.741912 +2164, -0.108332, -0.657423, -0.073736, 0.742040 +2165, -0.109085, -0.657118, -0.074078, 0.742165 +2166, -0.109838, -0.656813, -0.074419, 0.742290 +2167, -0.110593, -0.656508, -0.074759, 0.742413 +2168, -0.111348, -0.656204, -0.075098, 0.742535 +2169, -0.112105, -0.655900, -0.075435, 0.742656 +2170, -0.112863, -0.655596, -0.075771, 0.742775 +2171, -0.113621, -0.655292, -0.076106, 0.742893 +2172, -0.114381, -0.654988, -0.076440, 0.743010 +2173, -0.115141, -0.654685, -0.076773, 0.743126 +2174, -0.115903, -0.654382, -0.077104, 0.743240 +2175, -0.116665, -0.654079, -0.077434, 0.743353 +2176, -0.117429, -0.653777, -0.077763, 0.743464 +2177, -0.118193, -0.653474, -0.078091, 0.743575 +2178, -0.118959, -0.653172, -0.078418, 0.743684 +2179, -0.119725, -0.652870, -0.078743, 0.743791 +2180, -0.120493, -0.652569, -0.079068, 0.743898 +2181, -0.121261, -0.652268, -0.079391, 0.744003 +2182, -0.122030, -0.651967, -0.079713, 0.744106 +2183, -0.122800, -0.651666, -0.080033, 0.744208 +2184, -0.123572, -0.651366, -0.080353, 0.744309 +2185, -0.124344, -0.651065, -0.080671, 0.744409 +2186, -0.125117, -0.650765, -0.080989, 0.744507 +2187, -0.125891, -0.650466, -0.081305, 0.744604 +2188, -0.126666, -0.650167, -0.081620, 0.744700 +2189, -0.127442, -0.649868, -0.081933, 0.744794 +2190, -0.128219, -0.649569, -0.082246, 0.744886 +2191, -0.128997, -0.649270, -0.082557, 0.744978 +2192, -0.129775, -0.648972, -0.082868, 0.745068 +2193, -0.130555, -0.648675, -0.083177, 0.745156 +2194, -0.131336, -0.648377, -0.083485, 0.745244 +2195, -0.132117, -0.648080, -0.083792, 0.745330 +2196, -0.132900, -0.647783, -0.084097, 0.745414 +2197, -0.133683, -0.647487, -0.084402, 0.745497 +2198, -0.134467, -0.647191, -0.084705, 0.745579 +2199, -0.135252, -0.646895, -0.085008, 0.745659 +2200, -0.136038, -0.646599, -0.085309, 0.745738 +2201, -0.136825, -0.646304, -0.085609, 0.745815 +2202, -0.137613, -0.646010, -0.085907, 0.745892 +2203, -0.138402, -0.645715, -0.086205, 0.745966 +2204, -0.139191, -0.645421, -0.086502, 0.746039 +2205, -0.139982, -0.645127, -0.086797, 0.746111 +2206, -0.140773, -0.644834, -0.087092, 0.746182 +2207, -0.141566, -0.644541, -0.087385, 0.746250 +2208, -0.142359, -0.644249, -0.087677, 0.746318 +2209, -0.143153, -0.643956, -0.087968, 0.746384 +2210, -0.143948, -0.643665, -0.088258, 0.746449 +2211, -0.144743, -0.643373, -0.088546, 0.746512 +2212, -0.145540, -0.643082, -0.088834, 0.746574 +2213, -0.146337, -0.642791, -0.089121, 0.746634 +2214, -0.147136, -0.642501, -0.089406, 0.746693 +2215, -0.147935, -0.642211, -0.089690, 0.746750 +2216, -0.148735, -0.641922, -0.089973, 0.746806 +2217, -0.149536, -0.641633, -0.090256, 0.746860 +2218, -0.150337, -0.641344, -0.090537, 0.746913 +2219, -0.151140, -0.641056, -0.090816, 0.746965 +2220, -0.151943, -0.640768, -0.091095, 0.747015 +2221, -0.152747, -0.640481, -0.091373, 0.747063 +2222, -0.153552, -0.640194, -0.091650, 0.747110 +2223, -0.154358, -0.639907, -0.091925, 0.747156 +2224, -0.155165, -0.639621, -0.092200, 0.747200 +2225, -0.155972, -0.639336, -0.092473, 0.747243 +2226, -0.156780, -0.639050, -0.092745, 0.747284 +2227, -0.157589, -0.638766, -0.093017, 0.747323 +2228, -0.158399, -0.638481, -0.093287, 0.747361 +2229, -0.159210, -0.638197, -0.093556, 0.747398 +2230, -0.160021, -0.637914, -0.093824, 0.747433 +2231, -0.160834, -0.637631, -0.094091, 0.747466 +2232, -0.161647, -0.637349, -0.094357, 0.747498 +2233, -0.162460, -0.637067, -0.094622, 0.747529 +2234, -0.163275, -0.636785, -0.094886, 0.747558 +2235, -0.164090, -0.636504, -0.095148, 0.747585 +2236, -0.164907, -0.636223, -0.095410, 0.747611 +2237, -0.165723, -0.635943, -0.095671, 0.747636 +2238, -0.166541, -0.635664, -0.095930, 0.747658 +2239, -0.167360, -0.635385, -0.096189, 0.747680 +2240, -0.168179, -0.635106, -0.096446, 0.747699 +2241, -0.168999, -0.634828, -0.096703, 0.747718 +2242, -0.169819, -0.634550, -0.096958, 0.747734 +2243, -0.170641, -0.634273, -0.097213, 0.747749 +2244, -0.171463, -0.633996, -0.097466, 0.747763 +2245, -0.172286, -0.633720, -0.097718, 0.747775 +2246, -0.173109, -0.633445, -0.097970, 0.747785 +2247, -0.173934, -0.633170, -0.098220, 0.747794 +2248, -0.174759, -0.632895, -0.098469, 0.747802 +2249, -0.175585, -0.632621, -0.098718, 0.747807 +2250, -0.176411, -0.632347, -0.098965, 0.747811 +2251, -0.177238, -0.632074, -0.099211, 0.747814 +2252, -0.178066, -0.631802, -0.099457, 0.747815 +2253, -0.178895, -0.631530, -0.099701, 0.747814 +2254, -0.179724, -0.631259, -0.099944, 0.747812 +2255, -0.180554, -0.630988, -0.100186, 0.747808 +2256, -0.181385, -0.630718, -0.100428, 0.747803 +2257, -0.182217, -0.630448, -0.100668, 0.747796 +2258, -0.183049, -0.630179, -0.100907, 0.747787 +2259, -0.183881, -0.629910, -0.101145, 0.747777 +2260, -0.184715, -0.629642, -0.101383, 0.747765 +2261, -0.185549, -0.629374, -0.101619, 0.747752 +2262, -0.186384, -0.629108, -0.101854, 0.747737 +2263, -0.187219, -0.628841, -0.102089, 0.747720 +2264, -0.188055, -0.628575, -0.102322, 0.747702 +2265, -0.188892, -0.628310, -0.102555, 0.747682 +2266, -0.189730, -0.628046, -0.102786, 0.747661 +2267, -0.190568, -0.627782, -0.103017, 0.747637 +2268, -0.191407, -0.627518, -0.103246, 0.747613 +2269, -0.192246, -0.627255, -0.103475, 0.747586 +2270, -0.193086, -0.626993, -0.103702, 0.747558 +2271, -0.193927, -0.626731, -0.103929, 0.747529 +2272, -0.194768, -0.626470, -0.104155, 0.747497 +2273, -0.195610, -0.626210, -0.104380, 0.747464 +2274, -0.196452, -0.625950, -0.104603, 0.747430 +2275, -0.197295, -0.625691, -0.104826, 0.747393 +2276, -0.198139, -0.625432, -0.105048, 0.747355 +2277, -0.198983, -0.625174, -0.105269, 0.747316 +2278, -0.199828, -0.624917, -0.105490, 0.747275 +2279, -0.200674, -0.624660, -0.105709, 0.747232 +2280, -0.201520, -0.624404, -0.105927, 0.747187 +2281, -0.202367, -0.624149, -0.106144, 0.747141 +2282, -0.203214, -0.623894, -0.106361, 0.747093 +2283, -0.204062, -0.623640, -0.106576, 0.747043 +2284, -0.204910, -0.623386, -0.106791, 0.746992 +2285, -0.205759, -0.623133, -0.107005, 0.746939 +2286, -0.206609, -0.622881, -0.107217, 0.746885 +2287, -0.207459, -0.622629, -0.107429, 0.746828 +2288, -0.208310, -0.622378, -0.107640, 0.746770 +2289, -0.209161, -0.622128, -0.107850, 0.746711 +2290, -0.210013, -0.621878, -0.108060, 0.746649 +2291, -0.210865, -0.621629, -0.108268, 0.746586 +2292, -0.211718, -0.621381, -0.108475, 0.746521 +2293, -0.212572, -0.621133, -0.108682, 0.746455 +2294, -0.213426, -0.620886, -0.108888, 0.746387 +2295, -0.214280, -0.620640, -0.109093, 0.746317 +2296, -0.215135, -0.620394, -0.109297, 0.746245 +2297, -0.215991, -0.620150, -0.109500, 0.746172 +2298, -0.216847, -0.619905, -0.109702, 0.746097 +2299, -0.217703, -0.619662, -0.109903, 0.746020 +2300, -0.218560, -0.619419, -0.110104, 0.745942 +2301, -0.219418, -0.619177, -0.110303, 0.745861 +2302, -0.220276, -0.618935, -0.110502, 0.745780 +2303, -0.221135, -0.618694, -0.110700, 0.745696 +2304, -0.221994, -0.618454, -0.110897, 0.745611 +2305, -0.222853, -0.618215, -0.111093, 0.745523 +2306, -0.223713, -0.617976, -0.111289, 0.745435 +2307, -0.224574, -0.617738, -0.111483, 0.745344 +2308, -0.225435, -0.617501, -0.111677, 0.745252 +2309, -0.226296, -0.617264, -0.111870, 0.745158 +2310, -0.227158, -0.617029, -0.112062, 0.745062 +2311, -0.228020, -0.616793, -0.112253, 0.744964 +2312, -0.228883, -0.616559, -0.112444, 0.744865 +2313, -0.229746, -0.616325, -0.112634, 0.744764 +2314, -0.230610, -0.616092, -0.112822, 0.744661 +2315, -0.231474, -0.615860, -0.113010, 0.744557 +2316, -0.232338, -0.615629, -0.113198, 0.744450 +2317, -0.233203, -0.615398, -0.113384, 0.744342 +2318, -0.234069, -0.615168, -0.113570, 0.744232 +2319, -0.234935, -0.614939, -0.113755, 0.744121 +2320, -0.235801, -0.614710, -0.113939, 0.744007 +2321, -0.236668, -0.614483, -0.114122, 0.743892 +2322, -0.237535, -0.614256, -0.114304, 0.743775 +2323, -0.238402, -0.614029, -0.114486, 0.743657 +2324, -0.239270, -0.613804, -0.114667, 0.743536 +2325, -0.240138, -0.613579, -0.114847, 0.743414 +2326, -0.241007, -0.613355, -0.115027, 0.743290 +2327, -0.241876, -0.613132, -0.115205, 0.743164 +2328, -0.242745, -0.612910, -0.115383, 0.743036 +2329, -0.243615, -0.612688, -0.115560, 0.742907 +2330, -0.244485, -0.612467, -0.115737, 0.742776 +2331, -0.245355, -0.612247, -0.115912, 0.742643 +2332, -0.246226, -0.612028, -0.116087, 0.742508 +2333, -0.247097, -0.611809, -0.116261, 0.742372 +2334, -0.247969, -0.611592, -0.116435, 0.742233 +2335, -0.248841, -0.611375, -0.116607, 0.742093 +2336, -0.249713, -0.611158, -0.116779, 0.741951 +2337, -0.250585, -0.610943, -0.116950, 0.741807 +2338, -0.251458, -0.610728, -0.117121, 0.741662 +2339, -0.252332, -0.610515, -0.117291, 0.741514 +2340, -0.253205, -0.610302, -0.117460, 0.741365 +2341, -0.254079, -0.610089, -0.117628, 0.741214 +2342, -0.254953, -0.609878, -0.117796, 0.741061 +2343, -0.255827, -0.609668, -0.117962, 0.740907 +2344, -0.256702, -0.609458, -0.118129, 0.740750 +2345, -0.257577, -0.609249, -0.118294, 0.740592 +2346, -0.258453, -0.609041, -0.118459, 0.740432 +2347, -0.259328, -0.608833, -0.118623, 0.740270 +2348, -0.260204, -0.608627, -0.118786, 0.740106 +2349, -0.261080, -0.608421, -0.118949, 0.739940 +2350, -0.261957, -0.608216, -0.119111, 0.739773 +2351, -0.262833, -0.608012, -0.119273, 0.739604 +2352, -0.263710, -0.607809, -0.119433, 0.739433 +2353, -0.264588, -0.607607, -0.119593, 0.739260 +2354, -0.265465, -0.607405, -0.119753, 0.739085 +2355, -0.266343, -0.607204, -0.119912, 0.738908 +2356, -0.267221, -0.607005, -0.120070, 0.738730 +2357, -0.268099, -0.606806, -0.120227, 0.738550 +2358, -0.268977, -0.606607, -0.120384, 0.738367 +2359, -0.269856, -0.606410, -0.120540, 0.738183 +2360, -0.270735, -0.606213, -0.120695, 0.737998 +2361, -0.271614, -0.606018, -0.120850, 0.737810 +2362, -0.272493, -0.605823, -0.121004, 0.737620 +2363, -0.273373, -0.605629, -0.121158, 0.737429 +2364, -0.274253, -0.605436, -0.121311, 0.737236 +2365, -0.275133, -0.605244, -0.121463, 0.737040 +2366, -0.276013, -0.605052, -0.121615, 0.736844 +2367, -0.276893, -0.604862, -0.121766, 0.736645 +2368, -0.277774, -0.604672, -0.121917, 0.736444 +2369, -0.278654, -0.604483, -0.122067, 0.736241 +2370, -0.279535, -0.604296, -0.122216, 0.736037 +2371, -0.280416, -0.604108, -0.122365, 0.735831 +2372, -0.281297, -0.603922, -0.122513, 0.735622 +2373, -0.282178, -0.603737, -0.122660, 0.735412 +2374, -0.283060, -0.603553, -0.122807, 0.735200 +2375, -0.283942, -0.603369, -0.122953, 0.734987 +2376, -0.284823, -0.603186, -0.123099, 0.734771 +2377, -0.285705, -0.603005, -0.123244, 0.734553 +2378, -0.286587, -0.602824, -0.123389, 0.734334 +2379, -0.287469, -0.602644, -0.123533, 0.734113 +2380, -0.288352, -0.602465, -0.123676, 0.733890 +2381, -0.289234, -0.602286, -0.123819, 0.733664 +2382, -0.290117, -0.602109, -0.123962, 0.733437 +2383, -0.290999, -0.601933, -0.124104, 0.733209 +2384, -0.291882, -0.601757, -0.124245, 0.732978 +2385, -0.292765, -0.601582, -0.124386, 0.732745 +2386, -0.293648, -0.601409, -0.124526, 0.732511 +2387, -0.294531, -0.601236, -0.124665, 0.732274 +2388, -0.295414, -0.601064, -0.124805, 0.732036 +2389, -0.296297, -0.600893, -0.124943, 0.731796 +2390, -0.297180, -0.600723, -0.125081, 0.731554 +2391, -0.298063, -0.600554, -0.125219, 0.731310 +2392, -0.298947, -0.600385, -0.125356, 0.731064 +2393, -0.299830, -0.600218, -0.125492, 0.730816 +2394, -0.300713, -0.600051, -0.125628, 0.730566 +2395, -0.301597, -0.599886, -0.125764, 0.730315 +2396, -0.302480, -0.599721, -0.125899, 0.730061 +2397, -0.303364, -0.599557, -0.126033, 0.729806 +2398, -0.304248, -0.599395, -0.126167, 0.729549 +2399, -0.305131, -0.599233, -0.126301, 0.729289 +2400, -0.306015, -0.599072, -0.126434, 0.729028 +2401, -0.306898, -0.598912, -0.126567, 0.728765 +2402, -0.307782, -0.598753, -0.126699, 0.728500 +2403, -0.308666, -0.598595, -0.126830, 0.728233 +2404, -0.309549, -0.598437, -0.126962, 0.727965 +2405, -0.310433, -0.598281, -0.127092, 0.727694 +2406, -0.311317, -0.598126, -0.127223, 0.727421 +2407, -0.312200, -0.597971, -0.127353, 0.727147 +2408, -0.313084, -0.597818, -0.127482, 0.726870 +2409, -0.313968, -0.597665, -0.127611, 0.726592 +2410, -0.314851, -0.597514, -0.127739, 0.726312 +2411, -0.315735, -0.597363, -0.127867, 0.726030 +2412, -0.316618, -0.597213, -0.127995, 0.725745 +2413, -0.317501, -0.597065, -0.128122, 0.725459 +2414, -0.318385, -0.596917, -0.128249, 0.725171 +2415, -0.319268, -0.596770, -0.128375, 0.724882 +2416, -0.320151, -0.596624, -0.128501, 0.724590 +2417, -0.321034, -0.596479, -0.128627, 0.724296 +2418, -0.321917, -0.596335, -0.128752, 0.724000 +2419, -0.322800, -0.596192, -0.128877, 0.723703 +2420, -0.323683, -0.596050, -0.129001, 0.723403 +2421, -0.324566, -0.595909, -0.129125, 0.723102 +2422, -0.325449, -0.595769, -0.129248, 0.722798 +2423, -0.326332, -0.595629, -0.129372, 0.722493 +2424, -0.327214, -0.595491, -0.129494, 0.722186 +2425, -0.328096, -0.595354, -0.129617, 0.721877 +2426, -0.328979, -0.595218, -0.129739, 0.721566 +2427, -0.329861, -0.595082, -0.129860, 0.721252 +2428, -0.330743, -0.594948, -0.129982, 0.720938 +2429, -0.331625, -0.594815, -0.130103, 0.720621 +2430, -0.332507, -0.594682, -0.130223, 0.720302 +2431, -0.333388, -0.594551, -0.130343, 0.719981 +2432, -0.334270, -0.594420, -0.130463, 0.719658 +2433, -0.335151, -0.594291, -0.130583, 0.719333 +2434, -0.336032, -0.594162, -0.130702, 0.719007 +2435, -0.336913, -0.594034, -0.130821, 0.718678 +2436, -0.337794, -0.593908, -0.130939, 0.718348 +2437, -0.338675, -0.593782, -0.131058, 0.718015 +2438, -0.339555, -0.593658, -0.131175, 0.717681 +2439, -0.340435, -0.593534, -0.131293, 0.717345 +2440, -0.341315, -0.593411, -0.131410, 0.717006 +2441, -0.342195, -0.593290, -0.131527, 0.716666 +2442, -0.343075, -0.593169, -0.131644, 0.716324 +2443, -0.343954, -0.593049, -0.131760, 0.715980 +2444, -0.344834, -0.592931, -0.131876, 0.715634 +2445, -0.345713, -0.592813, -0.131992, 0.715286 +2446, -0.346591, -0.592696, -0.132107, 0.714936 +2447, -0.347470, -0.592580, -0.132223, 0.714584 +2448, -0.348348, -0.592466, -0.132337, 0.714230 +2449, -0.349226, -0.592352, -0.132452, 0.713874 +2450, -0.350104, -0.592239, -0.132566, 0.713517 +2451, -0.350982, -0.592127, -0.132681, 0.713157 +2452, -0.351859, -0.592017, -0.132794, 0.712795 +2453, -0.352736, -0.591907, -0.132908, 0.712432 +2454, -0.353613, -0.591798, -0.133021, 0.712066 +2455, -0.354490, -0.591690, -0.133134, 0.711699 +2456, -0.355366, -0.591583, -0.133247, 0.711329 +2457, -0.356242, -0.591478, -0.133360, 0.710958 +2458, -0.357118, -0.591373, -0.133472, 0.710585 +2459, -0.357993, -0.591269, -0.133584, 0.710209 +2460, -0.358868, -0.591166, -0.133696, 0.709832 +2461, -0.359743, -0.591065, -0.133808, 0.709453 +2462, -0.360617, -0.590964, -0.133919, 0.709072 +2463, -0.361491, -0.590864, -0.134031, 0.708689 +2464, -0.362365, -0.590765, -0.134142, 0.708303 +2465, -0.363239, -0.590667, -0.134253, 0.707916 +2466, -0.364112, -0.590571, -0.134363, 0.707527 +2467, -0.364985, -0.590475, -0.134474, 0.707137 +2468, -0.365857, -0.590380, -0.134584, 0.706744 +2469, -0.366729, -0.590287, -0.134694, 0.706349 +2470, -0.367601, -0.590194, -0.134804, 0.705952 +2471, -0.368473, -0.590102, -0.134914, 0.705553 +2472, -0.369344, -0.590012, -0.135023, 0.705153 +2473, -0.370214, -0.589922, -0.135133, 0.704750 +2474, -0.371085, -0.589833, -0.135242, 0.704345 +2475, -0.371955, -0.589746, -0.135351, 0.703939 +2476, -0.372824, -0.589659, -0.135460, 0.703530 +2477, -0.373693, -0.589573, -0.135569, 0.703120 +2478, -0.374562, -0.589489, -0.135677, 0.702708 +2479, -0.375431, -0.589405, -0.135786, 0.702293 +2480, -0.376298, -0.589323, -0.135894, 0.701877 +2481, -0.377166, -0.589241, -0.136002, 0.701459 +2482, -0.378033, -0.589161, -0.136110, 0.701038 +2483, -0.378900, -0.589081, -0.136218, 0.700616 +2484, -0.379766, -0.589003, -0.136326, 0.700192 +2485, -0.380632, -0.588925, -0.136434, 0.699766 +2486, -0.381497, -0.588849, -0.136541, 0.699338 +2487, -0.382362, -0.588773, -0.136649, 0.698908 +2488, -0.383227, -0.588699, -0.136756, 0.698476 +2489, -0.384091, -0.588626, -0.136863, 0.698042 +2490, -0.384954, -0.588553, -0.136971, 0.697606 +2491, -0.385817, -0.588482, -0.137078, 0.697168 +2492, -0.386680, -0.588412, -0.137185, 0.696729 +2493, -0.387542, -0.588342, -0.137292, 0.696287 +2494, -0.388404, -0.588274, -0.137399, 0.695843 +2495, -0.389265, -0.588207, -0.137505, 0.695398 +2496, -0.390125, -0.588141, -0.137612, 0.694950 +2497, -0.390986, -0.588075, -0.137719, 0.694501 +2498, -0.391845, -0.588011, -0.137825, 0.694049 +2499, -0.392704, -0.587948, -0.137932, 0.693596 +2500, -0.393563, -0.587886, -0.138038, 0.693140 +2501, -0.394421, -0.587825, -0.138145, 0.692683 +2502, -0.395279, -0.587765, -0.138251, 0.692224 +2503, -0.396136, -0.587706, -0.138358, 0.691763 +2504, -0.396992, -0.587648, -0.138464, 0.691299 +2505, -0.397848, -0.587591, -0.138570, 0.690834 +2506, -0.398703, -0.587535, -0.138677, 0.690367 +2507, -0.399558, -0.587480, -0.138783, 0.689898 +2508, -0.400412, -0.587426, -0.138889, 0.689427 +2509, -0.401266, -0.587373, -0.138996, 0.688954 +2510, -0.402119, -0.587322, -0.139102, 0.688480 +2511, -0.402972, -0.587271, -0.139208, 0.688003 +2512, -0.403824, -0.587221, -0.139315, 0.687524 +2513, -0.404675, -0.587172, -0.139421, 0.687043 +2514, -0.405526, -0.587125, -0.139527, 0.686561 +2515, -0.406376, -0.587078, -0.139633, 0.686076 +2516, -0.407226, -0.587032, -0.139740, 0.685590 +2517, -0.408075, -0.586988, -0.139846, 0.685101 +2518, -0.408923, -0.586944, -0.139953, 0.684611 +2519, -0.409771, -0.586901, -0.140059, 0.684119 +2520, -0.410618, -0.586860, -0.140166, 0.683624 +2521, -0.411464, -0.586819, -0.140272, 0.683128 +2522, -0.412310, -0.586780, -0.140379, 0.682630 +2523, -0.413155, -0.586741, -0.140485, 0.682130 +2524, -0.414000, -0.586704, -0.140592, 0.681628 +2525, -0.414844, -0.586668, -0.140699, 0.681124 +2526, -0.415687, -0.586632, -0.140806, 0.680618 +2527, -0.416529, -0.586598, -0.140913, 0.680110 +2528, -0.417371, -0.586565, -0.141020, 0.679600 +2529, -0.418212, -0.586532, -0.141127, 0.679089 +2530, -0.419053, -0.586501, -0.141234, 0.678575 +2531, -0.419893, -0.586471, -0.141341, 0.678060 +2532, -0.420732, -0.586442, -0.141449, 0.677542 +2533, -0.421570, -0.586413, -0.141556, 0.677023 +2534, -0.422408, -0.586386, -0.141664, 0.676501 +2535, -0.423245, -0.586360, -0.141771, 0.675978 +2536, -0.424081, -0.586335, -0.141879, 0.675453 +2537, -0.424917, -0.586311, -0.141987, 0.674926 +2538, -0.425751, -0.586288, -0.142095, 0.674397 +2539, -0.426586, -0.586266, -0.142203, 0.673866 +2540, -0.427419, -0.586245, -0.142311, 0.673333 +2541, -0.428252, -0.586225, -0.142420, 0.672798 +2542, -0.429083, -0.586206, -0.142528, 0.672262 +2543, -0.429915, -0.586188, -0.142637, 0.671723 +2544, -0.430745, -0.586171, -0.142746, 0.671182 +2545, -0.431574, -0.586155, -0.142855, 0.670640 +2546, -0.432403, -0.586140, -0.142964, 0.670096 +2547, -0.433231, -0.586127, -0.143073, 0.669549 +2548, -0.434059, -0.586114, -0.143183, 0.669001 +2549, -0.434885, -0.586102, -0.143293, 0.668451 +2550, -0.435711, -0.586091, -0.143402, 0.667899 +2551, -0.436536, -0.586082, -0.143512, 0.667345 +2552, -0.437360, -0.586073, -0.143623, 0.666789 +2553, -0.438183, -0.586065, -0.143733, 0.666231 +2554, -0.439005, -0.586058, -0.143844, 0.665672 +2555, -0.439827, -0.586053, -0.143954, 0.665110 +2556, -0.440648, -0.586048, -0.144065, 0.664547 +2557, -0.441468, -0.586044, -0.144177, 0.663981 +2558, -0.442287, -0.586042, -0.144288, 0.663414 +2559, -0.443105, -0.586040, -0.144400, 0.662845 +2560, -0.443923, -0.586040, -0.144512, 0.662274 +2561, -0.444739, -0.586040, -0.144624, 0.661701 +2562, -0.445555, -0.586042, -0.144736, 0.661126 +2563, -0.446370, -0.586044, -0.144849, 0.660549 +2564, -0.447184, -0.586047, -0.144961, 0.659971 +2565, -0.447997, -0.586052, -0.145074, 0.659390 +2566, -0.448809, -0.586057, -0.145188, 0.658808 +2567, -0.449621, -0.586064, -0.145301, 0.658223 +2568, -0.450431, -0.586071, -0.145415, 0.657637 +2569, -0.451241, -0.586080, -0.145529, 0.657049 +2570, -0.452049, -0.586090, -0.145643, 0.656459 +2571, -0.452857, -0.586100, -0.145758, 0.655867 +2572, -0.453664, -0.586112, -0.145873, 0.655273 +2573, -0.454470, -0.586124, -0.145988, 0.654678 +2574, -0.455275, -0.586138, -0.146104, 0.654080 +2575, -0.456079, -0.586152, -0.146219, 0.653481 +2576, -0.456882, -0.586168, -0.146335, 0.652880 +2577, -0.457684, -0.586184, -0.146452, 0.652277 +2578, -0.458486, -0.586202, -0.146568, 0.651672 +2579, -0.459286, -0.586221, -0.146685, 0.651065 +2580, -0.460085, -0.586240, -0.146802, 0.650456 +2581, -0.460884, -0.586261, -0.146920, 0.649845 +2582, -0.461681, -0.586282, -0.147038, 0.649233 +2583, -0.462478, -0.586305, -0.147156, 0.648619 +2584, -0.463273, -0.586328, -0.147275, 0.648002 +2585, -0.464068, -0.586353, -0.147393, 0.647384 +2586, -0.464861, -0.586379, -0.147513, 0.646764 +2587, -0.465654, -0.586405, -0.147632, 0.646143 +2588, -0.466445, -0.586433, -0.147752, 0.645519 +2589, -0.467236, -0.586461, -0.147872, 0.644894 +2590, -0.468025, -0.586491, -0.147993, 0.644266 +2591, -0.468814, -0.586521, -0.148114, 0.643637 +2592, -0.469601, -0.586553, -0.148235, 0.643006 +2593, -0.470388, -0.586585, -0.148357, 0.642373 +2594, -0.471173, -0.586619, -0.148479, 0.641739 +2595, -0.471957, -0.586653, -0.148601, 0.641102 +2596, -0.472741, -0.586689, -0.148724, 0.640464 +2597, -0.473523, -0.586725, -0.148847, 0.639823 +2598, -0.474304, -0.586762, -0.148971, 0.639181 +2599, -0.475085, -0.586801, -0.149095, 0.638538 +2600, -0.475864, -0.586840, -0.149219, 0.637892 +2601, -0.476642, -0.586881, -0.149344, 0.637244 +2602, -0.477419, -0.586922, -0.149469, 0.636595 +2603, -0.478195, -0.586964, -0.149595, 0.635944 +2604, -0.478969, -0.587007, -0.149721, 0.635291 +2605, -0.479743, -0.587052, -0.149847, 0.634636 +2606, -0.480516, -0.587097, -0.149974, 0.633979 +2607, -0.481287, -0.587143, -0.150102, 0.633321 +2608, -0.482058, -0.587190, -0.150229, 0.632660 +2609, -0.482827, -0.587238, -0.150357, 0.631998 +2610, -0.483595, -0.587287, -0.150486, 0.631334 +2611, -0.484362, -0.587337, -0.150615, 0.630669 +2612, -0.485128, -0.587388, -0.150745, 0.630001 +2613, -0.485893, -0.587440, -0.150875, 0.629332 +2614, -0.486657, -0.587493, -0.151005, 0.628661 +2615, -0.487419, -0.587547, -0.151136, 0.627988 +2616, -0.488181, -0.587602, -0.151267, 0.627313 +2617, -0.488941, -0.587658, -0.151399, 0.626636 +2618, -0.489700, -0.587715, -0.151532, 0.625958 +2619, -0.490458, -0.587772, -0.151664, 0.625278 +2620, -0.491215, -0.587831, -0.151798, 0.624596 +2621, -0.491970, -0.587891, -0.151932, 0.623912 +2622, -0.492725, -0.587951, -0.152066, 0.623227 +2623, -0.493478, -0.588013, -0.152201, 0.622540 +2624, -0.494230, -0.588075, -0.152336, 0.621850 +2625, -0.494981, -0.588139, -0.152472, 0.621160 +2626, -0.495731, -0.588203, -0.152608, 0.620467 +2627, -0.496479, -0.588268, -0.152745, 0.619773 +2628, -0.497226, -0.588334, -0.152882, 0.619077 +2629, -0.497972, -0.588402, -0.153020, 0.618379 +2630, -0.498717, -0.588470, -0.153158, 0.617679 +2631, -0.499461, -0.588539, -0.153297, 0.616978 +2632, -0.500203, -0.588609, -0.153437, 0.616274 +2633, -0.500944, -0.588679, -0.153577, 0.615569 +2634, -0.501684, -0.588751, -0.153717, 0.614863 +2635, -0.502423, -0.588824, -0.153859, 0.614154 +2636, -0.503160, -0.588898, -0.154000, 0.613444 +2637, -0.503896, -0.588972, -0.154142, 0.612732 +2638, -0.504631, -0.589048, -0.154285, 0.612018 +2639, -0.505364, -0.589124, -0.154429, 0.611303 +2640, -0.506097, -0.589202, -0.154572, 0.610586 +2641, -0.506828, -0.589280, -0.154717, 0.609867 +2642, -0.507558, -0.589359, -0.154862, 0.609146 +2643, -0.508286, -0.589439, -0.155008, 0.608424 +2644, -0.509013, -0.589520, -0.155154, 0.607700 +2645, -0.509739, -0.589602, -0.155301, 0.606974 +2646, -0.510464, -0.589685, -0.155448, 0.606246 +2647, -0.511187, -0.589769, -0.155596, 0.605517 +2648, -0.511909, -0.589853, -0.155745, 0.604786 +2649, -0.512630, -0.589939, -0.155894, 0.604053 +2650, -0.513349, -0.590025, -0.156044, 0.603319 +2651, -0.514067, -0.590113, -0.156195, 0.602583 +2652, -0.514783, -0.590201, -0.156346, 0.601845 +2653, -0.515499, -0.590290, -0.156498, 0.601105 +2654, -0.516213, -0.590380, -0.156650, 0.600364 +2655, -0.516925, -0.590471, -0.156803, 0.599621 +2656, -0.517637, -0.590563, -0.156957, 0.598876 +2657, -0.518347, -0.590655, -0.157111, 0.598130 +2658, -0.519055, -0.590749, -0.157266, 0.597382 +2659, -0.519762, -0.590843, -0.157422, 0.596632 +2660, -0.520468, -0.590939, -0.157578, 0.595881 +2661, -0.521173, -0.591035, -0.157735, 0.595128 +2662, -0.521876, -0.591132, -0.157892, 0.594373 +2663, -0.522577, -0.591230, -0.158051, 0.593616 +2664, -0.523278, -0.591329, -0.158209, 0.592858 +2665, -0.523976, -0.591428, -0.158369, 0.592098 +2666, -0.524674, -0.591529, -0.158529, 0.591337 +2667, -0.525370, -0.591630, -0.158690, 0.590574 +2668, -0.526065, -0.591732, -0.158852, 0.589809 +2669, -0.526758, -0.591836, -0.159014, 0.589043 +2670, -0.527450, -0.591940, -0.159177, 0.588275 +2671, -0.528140, -0.592044, -0.159341, 0.587505 +2672, -0.528829, -0.592150, -0.159506, 0.586733 +2673, -0.529517, -0.592257, -0.159671, 0.585960 +2674, -0.530203, -0.592364, -0.159837, 0.585186 +2675, -0.530887, -0.592472, -0.160003, 0.584409 +2676, -0.531570, -0.592581, -0.160170, 0.583631 +2677, -0.532252, -0.592691, -0.160338, 0.582852 +2678, -0.532932, -0.592802, -0.160507, 0.582071 +2679, -0.533611, -0.592914, -0.160677, 0.581288 +2680, -0.534289, -0.593026, -0.160847, 0.580503 +2681, -0.534964, -0.593139, -0.161018, 0.579717 +2682, -0.535639, -0.593254, -0.161190, 0.578929 +2683, -0.536312, -0.593369, -0.161362, 0.578140 +2684, -0.536983, -0.593484, -0.161535, 0.577349 +2685, -0.537653, -0.593601, -0.161709, 0.576557 +2686, -0.538321, -0.593718, -0.161884, 0.575762 +2687, -0.538988, -0.593836, -0.162060, 0.574967 +2688, -0.539654, -0.593956, -0.162236, 0.574169 +2689, -0.540317, -0.594075, -0.162413, 0.573370 +2690, -0.540980, -0.594196, -0.162591, 0.572570 +2691, -0.541641, -0.594317, -0.162769, 0.571768 +2692, -0.542300, -0.594440, -0.162949, 0.570964 +2693, -0.542958, -0.594563, -0.163129, 0.570159 +2694, -0.543614, -0.594687, -0.163310, 0.569352 +2695, -0.544269, -0.594811, -0.163492, 0.568543 +2696, -0.544922, -0.594937, -0.163674, 0.567733 +2697, -0.545573, -0.595063, -0.163857, 0.566922 +2698, -0.546223, -0.595190, -0.164042, 0.566109 +2699, -0.546872, -0.595318, -0.164227, 0.565294 +2700, -0.547519, -0.595447, -0.164412, 0.564478 +2701, -0.548164, -0.595576, -0.164599, 0.563660 +2702, -0.548808, -0.595706, -0.164787, 0.562841 +2703, -0.549450, -0.595837, -0.164975, 0.562020 +2704, -0.550091, -0.595969, -0.165164, 0.561197 +2705, -0.550730, -0.596101, -0.165354, 0.560373 +2706, -0.551367, -0.596235, -0.165545, 0.559548 +2707, -0.552003, -0.596369, -0.165736, 0.558721 +2708, -0.552637, -0.596504, -0.165929, 0.557892 +2709, -0.553270, -0.596639, -0.166122, 0.557062 +2710, -0.553901, -0.596775, -0.166316, 0.556230 +2711, -0.554530, -0.596913, -0.166511, 0.555397 +2712, -0.555158, -0.597050, -0.166707, 0.554562 +2713, -0.555784, -0.597189, -0.166904, 0.553726 +2714, -0.556408, -0.597328, -0.167101, 0.552889 +2715, -0.557031, -0.597468, -0.167300, 0.552049 +2716, -0.557652, -0.597609, -0.167499, 0.551209 +2717, -0.558272, -0.597751, -0.167700, 0.550367 +2718, -0.558890, -0.597893, -0.167901, 0.549523 +2719, -0.559506, -0.598036, -0.168103, 0.548678 +2720, -0.560121, -0.598180, -0.168306, 0.547831 +2721, -0.560734, -0.598324, -0.168509, 0.546983 +2722, -0.561345, -0.598469, -0.168714, 0.546133 +2723, -0.561954, -0.598615, -0.168920, 0.545282 +2724, -0.562562, -0.598762, -0.169126, 0.544430 +2725, -0.563169, -0.598909, -0.169334, 0.543576 +2726, -0.563773, -0.599057, -0.169542, 0.542720 +2727, -0.564376, -0.599206, -0.169751, 0.541863 +2728, -0.564977, -0.599356, -0.169961, 0.541005 +2729, -0.565577, -0.599506, -0.170173, 0.540145 +2730, -0.566174, -0.599657, -0.170385, 0.539284 +2731, -0.566771, -0.599808, -0.170598, 0.538421 +2732, -0.567365, -0.599961, -0.170811, 0.537557 +2733, -0.567958, -0.600114, -0.171026, 0.536692 +2734, -0.568548, -0.600267, -0.171242, 0.535825 +2735, -0.569138, -0.600422, -0.171459, 0.534956 +2736, -0.569725, -0.600577, -0.171676, 0.534086 +2737, -0.570311, -0.600732, -0.171895, 0.533215 +2738, -0.570895, -0.600889, -0.172115, 0.532342 +2739, -0.571477, -0.601046, -0.172335, 0.531468 +2740, -0.572058, -0.601203, -0.172557, 0.530593 +2741, -0.572636, -0.601362, -0.172779, 0.529716 +2742, -0.573213, -0.601521, -0.173003, 0.528838 +2743, -0.573789, -0.601681, -0.173227, 0.527958 +2744, -0.574362, -0.601841, -0.173452, 0.527077 +2745, -0.574934, -0.602002, -0.173679, 0.526194 +2746, -0.575504, -0.602164, -0.173906, 0.525311 +2747, -0.576072, -0.602326, -0.174134, 0.524425 +2748, -0.576638, -0.602489, -0.174364, 0.523539 +2749, -0.577203, -0.602652, -0.174594, 0.522651 +2750, -0.577766, -0.602817, -0.174825, 0.521761 +2751, -0.578327, -0.602982, -0.175058, 0.520871 +2752, -0.578886, -0.603147, -0.175291, 0.519979 +2753, -0.579443, -0.603313, -0.175525, 0.519085 +2754, -0.579999, -0.603480, -0.175761, 0.518191 +2755, -0.580553, -0.603647, -0.175997, 0.517294 +2756, -0.581105, -0.603815, -0.176235, 0.516397 +2757, -0.581655, -0.603984, -0.176473, 0.515498 +2758, -0.582203, -0.604153, -0.176712, 0.514598 +2759, -0.582750, -0.604323, -0.176953, 0.513697 +2760, -0.583294, -0.604493, -0.177194, 0.512794 +2761, -0.583837, -0.604664, -0.177437, 0.511890 +2762, -0.584378, -0.604836, -0.177681, 0.510985 +2763, -0.584917, -0.605008, -0.177925, 0.510078 +2764, -0.585455, -0.605181, -0.178171, 0.509170 +2765, -0.585990, -0.605354, -0.178417, 0.508261 +2766, -0.586524, -0.605528, -0.178665, 0.507350 +2767, -0.587056, -0.605703, -0.178914, 0.506438 +2768, -0.587585, -0.605878, -0.179164, 0.505525 +2769, -0.588114, -0.606054, -0.179415, 0.504611 +2770, -0.588640, -0.606230, -0.179667, 0.503695 +2771, -0.589164, -0.606407, -0.179920, 0.502778 +2772, -0.589686, -0.606584, -0.180174, 0.501860 +2773, -0.590207, -0.606762, -0.180429, 0.500940 +2774, -0.590726, -0.606940, -0.180686, 0.500019 +2775, -0.591242, -0.607119, -0.180943, 0.499097 +2776, -0.591757, -0.607299, -0.181201, 0.498174 +2777, -0.592270, -0.607479, -0.181461, 0.497250 +2778, -0.592781, -0.607660, -0.181722, 0.496324 +2779, -0.593290, -0.607841, -0.181983, 0.495397 +2780, -0.593797, -0.608023, -0.182246, 0.494468 +2781, -0.594303, -0.608205, -0.182510, 0.493539 +2782, -0.594806, -0.608388, -0.182775, 0.492608 +2783, -0.595308, -0.608571, -0.183041, 0.491676 +2784, -0.595807, -0.608755, -0.183308, 0.490743 +2785, -0.596305, -0.608940, -0.183577, 0.489809 +2786, -0.596801, -0.609124, -0.183846, 0.488873 +2787, -0.597294, -0.609310, -0.184117, 0.487937 +2788, -0.597786, -0.609496, -0.184389, 0.486999 +2789, -0.598276, -0.609682, -0.184661, 0.486059 +2790, -0.598764, -0.609869, -0.184935, 0.485119 +2791, -0.599250, -0.610056, -0.185210, 0.484178 +2792, -0.599734, -0.610244, -0.185487, 0.483235 +2793, -0.600216, -0.610433, -0.185764, 0.482291 +2794, -0.600696, -0.610621, -0.186043, 0.481346 +2795, -0.601174, -0.610811, -0.186322, 0.480400 +2796, -0.601650, -0.611000, -0.186603, 0.479452 +2797, -0.602124, -0.611191, -0.186885, 0.478504 +2798, -0.602597, -0.611381, -0.187168, 0.477554 +2799, -0.603067, -0.611573, -0.187452, 0.476603 +2800, -0.603535, -0.611764, -0.187738, 0.475652 +2801, -0.604001, -0.611956, -0.188024, 0.474698 +2802, -0.604466, -0.612149, -0.188312, 0.473744 +2803, -0.604928, -0.612342, -0.188601, 0.472789 +2804, -0.605388, -0.612535, -0.188891, 0.471832 +2805, -0.605846, -0.612729, -0.189182, 0.470875 +2806, -0.606303, -0.612924, -0.189474, 0.469916 +2807, -0.606757, -0.613118, -0.189768, 0.468956 +2808, -0.607209, -0.613313, -0.190063, 0.467996 +2809, -0.607659, -0.613509, -0.190359, 0.467034 +2810, -0.608107, -0.613705, -0.190656, 0.466070 +2811, -0.608554, -0.613902, -0.190954, 0.465106 +2812, -0.608998, -0.614098, -0.191254, 0.464141 +2813, -0.609440, -0.614296, -0.191554, 0.463175 +2814, -0.609880, -0.614493, -0.191856, 0.462207 +2815, -0.610318, -0.614691, -0.192159, 0.461239 +2816, -0.610754, -0.614890, -0.192464, 0.460269 +2817, -0.611188, -0.615089, -0.192769, 0.459299 +2818, -0.611620, -0.615288, -0.193076, 0.458327 +2819, -0.612050, -0.615487, -0.193384, 0.457355 +2820, -0.612477, -0.615687, -0.193693, 0.456381 +2821, -0.612903, -0.615888, -0.194003, 0.455406 +2822, -0.613327, -0.616089, -0.194315, 0.454430 +2823, -0.613748, -0.616290, -0.194628, 0.453453 +2824, -0.614168, -0.616491, -0.194942, 0.452476 +2825, -0.614585, -0.616693, -0.195257, 0.451497 +2826, -0.615001, -0.616895, -0.195573, 0.450517 +2827, -0.615414, -0.617098, -0.195891, 0.449536 +2828, -0.615825, -0.617301, -0.196210, 0.448554 +2829, -0.616234, -0.617504, -0.196530, 0.447571 +2830, -0.616641, -0.617707, -0.196852, 0.446587 +2831, -0.617046, -0.617911, -0.197174, 0.445603 +2832, -0.617449, -0.618115, -0.197498, 0.444617 +2833, -0.617850, -0.618320, -0.197823, 0.443630 +2834, -0.618249, -0.618525, -0.198150, 0.442642 +2835, -0.618645, -0.618730, -0.198477, 0.441654 +2836, -0.619040, -0.618936, -0.198806, 0.440664 +2837, -0.619432, -0.619141, -0.199136, 0.439673 +2838, -0.619822, -0.619348, -0.199468, 0.438682 +2839, -0.620210, -0.619554, -0.199800, 0.437689 +2840, -0.620596, -0.619761, -0.200134, 0.436696 +2841, -0.620980, -0.619968, -0.200470, 0.435701 +2842, -0.621362, -0.620175, -0.200806, 0.434706 +2843, -0.621742, -0.620383, -0.201144, 0.433710 +2844, -0.622119, -0.620590, -0.201483, 0.432712 +2845, -0.622494, -0.620799, -0.201823, 0.431714 +2846, -0.622868, -0.621007, -0.202165, 0.430715 +2847, -0.623239, -0.621216, -0.202508, 0.429715 +2848, -0.623608, -0.621425, -0.202852, 0.428715 +2849, -0.623974, -0.621634, -0.203197, 0.427713 +2850, -0.624339, -0.621843, -0.203544, 0.426710 +2851, -0.624701, -0.622053, -0.203892, 0.425707 +2852, -0.625062, -0.622263, -0.204241, 0.424703 +2853, -0.625420, -0.622473, -0.204592, 0.423697 +2854, -0.625776, -0.622683, -0.204944, 0.422691 +2855, -0.626130, -0.622894, -0.205297, 0.421684 +2856, -0.626481, -0.623105, -0.205651, 0.420677 +2857, -0.626831, -0.623316, -0.206007, 0.419668 +2858, -0.627178, -0.623527, -0.206364, 0.418659 +2859, -0.627523, -0.623739, -0.206723, 0.417648 +2860, -0.627866, -0.623951, -0.207082, 0.416637 +2861, -0.628207, -0.624163, -0.207443, 0.415625 +2862, -0.628546, -0.624375, -0.207806, 0.414612 +2863, -0.628882, -0.624587, -0.208169, 0.413599 +2864, -0.629216, -0.624800, -0.208534, 0.412584 +2865, -0.629548, -0.625012, -0.208900, 0.411569 +2866, -0.629878, -0.625225, -0.209268, 0.410553 +2867, -0.630206, -0.625438, -0.209637, 0.409536 +2868, -0.630531, -0.625652, -0.210007, 0.408519 +2869, -0.630854, -0.625865, -0.210379, 0.407500 +2870, -0.631175, -0.626079, -0.210752, 0.406481 +2871, -0.631494, -0.626293, -0.211126, 0.405461 +2872, -0.631811, -0.626506, -0.211502, 0.404440 +2873, -0.632125, -0.626720, -0.211879, 0.403419 +2874, -0.632437, -0.626935, -0.212257, 0.402397 +2875, -0.632747, -0.627149, -0.212637, 0.401374 +2876, -0.633055, -0.627364, -0.213017, 0.400350 +2877, -0.633360, -0.627578, -0.213400, 0.399326 +2878, -0.633664, -0.627793, -0.213783, 0.398300 +2879, -0.633965, -0.628008, -0.214168, 0.397274 +2880, -0.634263, -0.628223, -0.214555, 0.396248 +2881, -0.634560, -0.628438, -0.214942, 0.395220 +2882, -0.634854, -0.628653, -0.215331, 0.394192 +2883, -0.635146, -0.628868, -0.215722, 0.393164 +2884, -0.635436, -0.629084, -0.216114, 0.392134 +2885, -0.635724, -0.629299, -0.216507, 0.391104 +2886, -0.636009, -0.629515, -0.216901, 0.390073 +2887, -0.636292, -0.629731, -0.217297, 0.389042 +2888, -0.636573, -0.629947, -0.217694, 0.388009 +2889, -0.636852, -0.630162, -0.218093, 0.386976 +2890, -0.637128, -0.630378, -0.218493, 0.385943 +2891, -0.637402, -0.630594, -0.218894, 0.384909 +2892, -0.637674, -0.630810, -0.219297, 0.383874 +2893, -0.637943, -0.631027, -0.219701, 0.382838 +2894, -0.638211, -0.631243, -0.220106, 0.381802 +2895, -0.638476, -0.631459, -0.220513, 0.380765 +2896, -0.638738, -0.631675, -0.220921, 0.379728 +2897, -0.638999, -0.631892, -0.221331, 0.378690 +2898, -0.639257, -0.632108, -0.221742, 0.377651 +2899, -0.639513, -0.632324, -0.222154, 0.376612 +2900, -0.639767, -0.632541, -0.222568, 0.375572 +2901, -0.640018, -0.632757, -0.222983, 0.374531 +2902, -0.640267, -0.632974, -0.223400, 0.373490 +2903, -0.640514, -0.633190, -0.223818, 0.372449 +2904, -0.640758, -0.633407, -0.224237, 0.371406 +2905, -0.641000, -0.633623, -0.224658, 0.370364 +2906, -0.641240, -0.633840, -0.225080, 0.369320 +2907, -0.641478, -0.634056, -0.225503, 0.368276 +2908, -0.641713, -0.634273, -0.225928, 0.367232 +2909, -0.641946, -0.634489, -0.226354, 0.366186 +2910, -0.642177, -0.634705, -0.226782, 0.365141 +2911, -0.642405, -0.634922, -0.227211, 0.364095 +2912, -0.642631, -0.635138, -0.227642, 0.363048 +2913, -0.642855, -0.635355, -0.228074, 0.362001 +2914, -0.643077, -0.635571, -0.228507, 0.360953 +2915, -0.643296, -0.635787, -0.228942, 0.359904 +2916, -0.643513, -0.636003, -0.229378, 0.358856 +2917, -0.643727, -0.636219, -0.229815, 0.357806 +2918, -0.643939, -0.636435, -0.230254, 0.356756 +2919, -0.644149, -0.636651, -0.230695, 0.355706 +2920, -0.644357, -0.636867, -0.231136, 0.354655 +2921, -0.644562, -0.637083, -0.231580, 0.353604 +2922, -0.644765, -0.637299, -0.232024, 0.352552 +2923, -0.644966, -0.637515, -0.232470, 0.351500 +2924, -0.645164, -0.637730, -0.232918, 0.350447 +2925, -0.645360, -0.637946, -0.233367, 0.349394 +2926, -0.645553, -0.638161, -0.233817, 0.348340 +2927, -0.645745, -0.638377, -0.234269, 0.347286 +2928, -0.645933, -0.638592, -0.234722, 0.346231 +2929, -0.646120, -0.638807, -0.235176, 0.345176 +2930, -0.646304, -0.639022, -0.235632, 0.344121 +2931, -0.646486, -0.639237, -0.236090, 0.343065 +2932, -0.646666, -0.639451, -0.236549, 0.342009 +2933, -0.646843, -0.639666, -0.237009, 0.340952 +2934, -0.647018, -0.639881, -0.237471, 0.339895 +2935, -0.647190, -0.640095, -0.237934, 0.338837 +2936, -0.647361, -0.640309, -0.238398, 0.337779 +2937, -0.647528, -0.640523, -0.238864, 0.336721 +2938, -0.647694, -0.640737, -0.239332, 0.335662 +2939, -0.647857, -0.640951, -0.239801, 0.334603 +2940, -0.648018, -0.641164, -0.240271, 0.333544 +2941, -0.648176, -0.641377, -0.240743, 0.332484 +2942, -0.648332, -0.641591, -0.241216, 0.331424 +2943, -0.648486, -0.641804, -0.241691, 0.330363 +2944, -0.648637, -0.642016, -0.242167, 0.329303 +2945, -0.648786, -0.642229, -0.242645, 0.328241 +2946, -0.648933, -0.642441, -0.243124, 0.327180 +2947, -0.649077, -0.642653, -0.243604, 0.326118 +2948, -0.649219, -0.642865, -0.244086, 0.325056 +2949, -0.649358, -0.643077, -0.244569, 0.323993 +2950, -0.649495, -0.643289, -0.245054, 0.322930 +2951, -0.649630, -0.643500, -0.245540, 0.321867 +2952, -0.649762, -0.643711, -0.246028, 0.320804 +2953, -0.649892, -0.643922, -0.246517, 0.319740 +2954, -0.650020, -0.644133, -0.247008, 0.318676 +2955, -0.650145, -0.644343, -0.247500, 0.317612 +2956, -0.650268, -0.644553, -0.247993, 0.316547 +2957, -0.650388, -0.644763, -0.248488, 0.315482 +2958, -0.650506, -0.644973, -0.248985, 0.314417 +2959, -0.650622, -0.645182, -0.249483, 0.313352 +2960, -0.650735, -0.645391, -0.249982, 0.312286 +2961, -0.650846, -0.645600, -0.250483, 0.311220 +2962, -0.650955, -0.645809, -0.250985, 0.310154 +2963, -0.651061, -0.646017, -0.251489, 0.309088 +2964, -0.651165, -0.646225, -0.251994, 0.308021 +2965, -0.651266, -0.646433, -0.252500, 0.306955 +2966, -0.651365, -0.646640, -0.253008, 0.305888 +2967, -0.651461, -0.646847, -0.253518, 0.304821 +2968, -0.651556, -0.647054, -0.254029, 0.303753 +2969, -0.651647, -0.647260, -0.254541, 0.302686 +2970, -0.651737, -0.647466, -0.255055, 0.301618 +2971, -0.651824, -0.647672, -0.255571, 0.300550 +2972, -0.651908, -0.647878, -0.256088, 0.299482 +2973, -0.651991, -0.648083, -0.256606, 0.298413 +2974, -0.652070, -0.648287, -0.257126, 0.297345 +2975, -0.652148, -0.648492, -0.257647, 0.296276 +2976, -0.652223, -0.648696, -0.258170, 0.295208 +2977, -0.652295, -0.648900, -0.258694, 0.294139 +2978, -0.652365, -0.649103, -0.259220, 0.293070 +2979, -0.652433, -0.649306, -0.259747, 0.292000 +2980, -0.652498, -0.649509, -0.260275, 0.290931 +2981, -0.652561, -0.649711, -0.260805, 0.289862 +2982, -0.652622, -0.649913, -0.261337, 0.288792 +2983, -0.652680, -0.650114, -0.261870, 0.287722 +2984, -0.652736, -0.650316, -0.262404, 0.286653 +2985, -0.652789, -0.650516, -0.262940, 0.285583 +2986, -0.652840, -0.650717, -0.263478, 0.284513 +2987, -0.652888, -0.650916, -0.264017, 0.283443 +2988, -0.652934, -0.651116, -0.264557, 0.282373 +2989, -0.652978, -0.651315, -0.265099, 0.281302 +2990, -0.653019, -0.651514, -0.265642, 0.280232 +2991, -0.653058, -0.651712, -0.266187, 0.279162 +2992, -0.653095, -0.651910, -0.266733, 0.278091 +2993, -0.653128, -0.652107, -0.267281, 0.277021 +2994, -0.653160, -0.652304, -0.267830, 0.275951 +2995, -0.653189, -0.652500, -0.268381, 0.274880 +2996, -0.653216, -0.652696, -0.268933, 0.273810 +2997, -0.653240, -0.652892, -0.269486, 0.272739 +2998, -0.653262, -0.653087, -0.270041, 0.271669 +2999, -0.653281, -0.653281, -0.270598, 0.270598 diff --git a/scripts/trajectories/rotate_yaw_pitch_roll1.csv b/scripts/trajectories/rotate_yaw_pitch_roll1.csv new file mode 100644 index 0000000000..16657b5438 --- /dev/null +++ b/scripts/trajectories/rotate_yaw_pitch_roll1.csv @@ -0,0 +1,2401 @@ +0,-3.0,-360.000000,0.000000,0.000000 +1,-3.0,-359.100000,0.000000,0.000000 +2,-3.0,-358.200000,0.000000,0.000000 +3,-3.0,-357.300000,0.000000,0.000000 +4,-3.0,-356.400000,0.000000,0.000000 +5,-3.0,-355.500000,0.000000,0.000000 +6,-3.0,-354.600000,0.000000,0.000000 +7,-3.0,-353.700000,0.000000,0.000000 +8,-3.0,-352.800000,0.000000,0.000000 +9,-3.0,-351.900000,0.000000,0.000000 +10,-3.0,-351.000000,0.000000,0.000000 +11,-3.0,-350.100000,0.000000,0.000000 +12,-3.0,-349.200000,0.000000,0.000000 +13,-3.0,-348.300000,0.000000,0.000000 +14,-3.0,-347.400000,0.000000,0.000000 +15,-3.0,-346.500000,0.000000,0.000000 +16,-3.0,-345.600000,0.000000,0.000000 +17,-3.0,-344.700000,0.000000,0.000000 +18,-3.0,-343.800000,0.000000,0.000000 +19,-3.0,-342.900000,0.000000,0.000000 +20,-3.0,-342.000000,0.000000,0.000000 +21,-3.0,-341.100000,0.000000,0.000000 +22,-3.0,-340.200000,0.000000,0.000000 +23,-3.0,-339.300000,0.000000,0.000000 +24,-3.0,-338.400000,0.000000,0.000000 +25,-3.0,-337.500000,0.000000,0.000000 +26,-3.0,-336.600000,0.000000,0.000000 +27,-3.0,-335.700000,0.000000,0.000000 +28,-3.0,-334.800000,0.000000,0.000000 +29,-3.0,-333.900000,0.000000,0.000000 +30,-3.0,-333.000000,0.000000,0.000000 +31,-3.0,-332.100000,0.000000,0.000000 +32,-3.0,-331.200000,0.000000,0.000000 +33,-3.0,-330.300000,0.000000,0.000000 +34,-3.0,-329.400000,0.000000,0.000000 +35,-3.0,-328.500000,0.000000,0.000000 +36,-3.0,-327.600000,0.000000,0.000000 +37,-3.0,-326.700000,0.000000,0.000000 +38,-3.0,-325.800000,0.000000,0.000000 +39,-3.0,-324.900000,0.000000,0.000000 +40,-3.0,-324.000000,0.000000,0.000000 +41,-3.0,-323.100000,0.000000,0.000000 +42,-3.0,-322.200000,0.000000,0.000000 +43,-3.0,-321.300000,0.000000,0.000000 +44,-3.0,-320.400000,0.000000,0.000000 +45,-3.0,-319.500000,0.000000,0.000000 +46,-3.0,-318.600000,0.000000,0.000000 +47,-3.0,-317.700000,0.000000,0.000000 +48,-3.0,-316.800000,0.000000,0.000000 +49,-3.0,-315.900000,0.000000,0.000000 +50,-3.0,-315.000000,0.000000,0.000000 +51,-3.0,-314.100000,0.000000,0.000000 +52,-3.0,-313.200000,0.000000,0.000000 +53,-3.0,-312.300000,0.000000,0.000000 +54,-3.0,-311.400000,0.000000,0.000000 +55,-3.0,-310.500000,0.000000,0.000000 +56,-3.0,-309.600000,0.000000,0.000000 +57,-3.0,-308.700000,0.000000,0.000000 +58,-3.0,-307.800000,0.000000,0.000000 +59,-3.0,-306.900000,0.000000,0.000000 +60,-3.0,-306.000000,0.000000,0.000000 +61,-3.0,-305.100000,0.000000,0.000000 +62,-3.0,-304.200000,0.000000,0.000000 +63,-3.0,-303.300000,0.000000,0.000000 +64,-3.0,-302.400000,0.000000,0.000000 +65,-3.0,-301.500000,0.000000,0.000000 +66,-3.0,-300.600000,0.000000,0.000000 +67,-3.0,-299.700000,0.000000,0.000000 +68,-3.0,-298.800000,0.000000,0.000000 +69,-3.0,-297.900000,0.000000,0.000000 +70,-3.0,-297.000000,0.000000,0.000000 +71,-3.0,-296.100000,0.000000,0.000000 +72,-3.0,-295.200000,0.000000,0.000000 +73,-3.0,-294.300000,0.000000,0.000000 +74,-3.0,-293.400000,0.000000,0.000000 +75,-3.0,-292.500000,0.000000,0.000000 +76,-3.0,-291.600000,0.000000,0.000000 +77,-3.0,-290.700000,0.000000,0.000000 +78,-3.0,-289.800000,0.000000,0.000000 +79,-3.0,-288.900000,0.000000,0.000000 +80,-3.0,-288.000000,0.000000,0.000000 +81,-3.0,-287.100000,0.000000,0.000000 +82,-3.0,-286.200000,0.000000,0.000000 +83,-3.0,-285.300000,0.000000,0.000000 +84,-3.0,-284.400000,0.000000,0.000000 +85,-3.0,-283.500000,0.000000,0.000000 +86,-3.0,-282.600000,0.000000,0.000000 +87,-3.0,-281.700000,0.000000,0.000000 +88,-3.0,-280.800000,0.000000,0.000000 +89,-3.0,-279.900000,0.000000,0.000000 +90,-3.0,-279.000000,0.000000,0.000000 +91,-3.0,-278.100000,0.000000,0.000000 +92,-3.0,-277.200000,0.000000,0.000000 +93,-3.0,-276.300000,0.000000,0.000000 +94,-3.0,-275.400000,0.000000,0.000000 +95,-3.0,-274.500000,0.000000,0.000000 +96,-3.0,-273.600000,0.000000,0.000000 +97,-3.0,-272.700000,0.000000,0.000000 +98,-3.0,-271.800000,0.000000,0.000000 +99,-3.0,-270.900000,0.000000,0.000000 +100,-3.0,-270.000000,0.000000,0.000000 +101,-3.0,-269.100000,0.000000,0.000000 +102,-3.0,-268.200000,0.000000,0.000000 +103,-3.0,-267.300000,0.000000,0.000000 +104,-3.0,-266.400000,0.000000,0.000000 +105,-3.0,-265.500000,0.000000,0.000000 +106,-3.0,-264.600000,0.000000,0.000000 +107,-3.0,-263.700000,0.000000,0.000000 +108,-3.0,-262.800000,0.000000,0.000000 +109,-3.0,-261.900000,0.000000,0.000000 +110,-3.0,-261.000000,0.000000,0.000000 +111,-3.0,-260.100000,0.000000,0.000000 +112,-3.0,-259.200000,0.000000,0.000000 +113,-3.0,-258.300000,0.000000,0.000000 +114,-3.0,-257.400000,0.000000,0.000000 +115,-3.0,-256.500000,0.000000,0.000000 +116,-3.0,-255.600000,0.000000,0.000000 +117,-3.0,-254.700000,0.000000,0.000000 +118,-3.0,-253.800000,0.000000,0.000000 +119,-3.0,-252.900000,0.000000,0.000000 +120,-3.0,-252.000000,0.000000,0.000000 +121,-3.0,-251.100000,0.000000,0.000000 +122,-3.0,-250.200000,0.000000,0.000000 +123,-3.0,-249.300000,0.000000,0.000000 +124,-3.0,-248.400000,0.000000,0.000000 +125,-3.0,-247.500000,0.000000,0.000000 +126,-3.0,-246.600000,0.000000,0.000000 +127,-3.0,-245.700000,0.000000,0.000000 +128,-3.0,-244.800000,0.000000,0.000000 +129,-3.0,-243.900000,0.000000,0.000000 +130,-3.0,-243.000000,0.000000,0.000000 +131,-3.0,-242.100000,0.000000,0.000000 +132,-3.0,-241.200000,0.000000,0.000000 +133,-3.0,-240.300000,0.000000,0.000000 +134,-3.0,-239.400000,0.000000,0.000000 +135,-3.0,-238.500000,0.000000,0.000000 +136,-3.0,-237.600000,0.000000,0.000000 +137,-3.0,-236.700000,0.000000,0.000000 +138,-3.0,-235.800000,0.000000,0.000000 +139,-3.0,-234.900000,0.000000,0.000000 +140,-3.0,-234.000000,0.000000,0.000000 +141,-3.0,-233.100000,0.000000,0.000000 +142,-3.0,-232.200000,0.000000,0.000000 +143,-3.0,-231.300000,0.000000,0.000000 +144,-3.0,-230.400000,0.000000,0.000000 +145,-3.0,-229.500000,0.000000,0.000000 +146,-3.0,-228.600000,0.000000,0.000000 +147,-3.0,-227.700000,0.000000,0.000000 +148,-3.0,-226.800000,0.000000,0.000000 +149,-3.0,-225.900000,0.000000,0.000000 +150,-3.0,-225.000000,0.000000,0.000000 +151,-3.0,-224.100000,0.000000,0.000000 +152,-3.0,-223.200000,0.000000,0.000000 +153,-3.0,-222.300000,0.000000,0.000000 +154,-3.0,-221.400000,0.000000,0.000000 +155,-3.0,-220.500000,0.000000,0.000000 +156,-3.0,-219.600000,0.000000,0.000000 +157,-3.0,-218.700000,0.000000,0.000000 +158,-3.0,-217.800000,0.000000,0.000000 +159,-3.0,-216.900000,0.000000,0.000000 +160,-3.0,-216.000000,0.000000,0.000000 +161,-3.0,-215.100000,0.000000,0.000000 +162,-3.0,-214.200000,0.000000,0.000000 +163,-3.0,-213.300000,0.000000,0.000000 +164,-3.0,-212.400000,0.000000,0.000000 +165,-3.0,-211.500000,0.000000,0.000000 +166,-3.0,-210.600000,0.000000,0.000000 +167,-3.0,-209.700000,0.000000,0.000000 +168,-3.0,-208.800000,0.000000,0.000000 +169,-3.0,-207.900000,0.000000,0.000000 +170,-3.0,-207.000000,0.000000,0.000000 +171,-3.0,-206.100000,0.000000,0.000000 +172,-3.0,-205.200000,0.000000,0.000000 +173,-3.0,-204.300000,0.000000,0.000000 +174,-3.0,-203.400000,0.000000,0.000000 +175,-3.0,-202.500000,0.000000,0.000000 +176,-3.0,-201.600000,0.000000,0.000000 +177,-3.0,-200.700000,0.000000,0.000000 +178,-3.0,-199.800000,0.000000,0.000000 +179,-3.0,-198.900000,0.000000,0.000000 +180,-3.0,-198.000000,0.000000,0.000000 +181,-3.0,-197.100000,0.000000,0.000000 +182,-3.0,-196.200000,0.000000,0.000000 +183,-3.0,-195.300000,0.000000,0.000000 +184,-3.0,-194.400000,0.000000,0.000000 +185,-3.0,-193.500000,0.000000,0.000000 +186,-3.0,-192.600000,0.000000,0.000000 +187,-3.0,-191.700000,0.000000,0.000000 +188,-3.0,-190.800000,0.000000,0.000000 +189,-3.0,-189.900000,0.000000,0.000000 +190,-3.0,-189.000000,0.000000,0.000000 +191,-3.0,-188.100000,0.000000,0.000000 +192,-3.0,-187.200000,0.000000,0.000000 +193,-3.0,-186.300000,0.000000,0.000000 +194,-3.0,-185.400000,0.000000,0.000000 +195,-3.0,-184.500000,0.000000,0.000000 +196,-3.0,-183.600000,0.000000,0.000000 +197,-3.0,-182.700000,0.000000,0.000000 +198,-3.0,-181.800000,0.000000,0.000000 +199,-3.0,-180.900000,0.000000,0.000000 +200,-3.0,-180.000000,0.000000,0.000000 +201,-3.0,-179.100000,0.000000,0.000000 +202,-3.0,-178.200000,0.000000,0.000000 +203,-3.0,-177.300000,0.000000,0.000000 +204,-3.0,-176.400000,0.000000,0.000000 +205,-3.0,-175.500000,0.000000,0.000000 +206,-3.0,-174.600000,0.000000,0.000000 +207,-3.0,-173.700000,0.000000,0.000000 +208,-3.0,-172.800000,0.000000,0.000000 +209,-3.0,-171.900000,0.000000,0.000000 +210,-3.0,-171.000000,0.000000,0.000000 +211,-3.0,-170.100000,0.000000,0.000000 +212,-3.0,-169.200000,0.000000,0.000000 +213,-3.0,-168.300000,0.000000,0.000000 +214,-3.0,-167.400000,0.000000,0.000000 +215,-3.0,-166.500000,0.000000,0.000000 +216,-3.0,-165.600000,0.000000,0.000000 +217,-3.0,-164.700000,0.000000,0.000000 +218,-3.0,-163.800000,0.000000,0.000000 +219,-3.0,-162.900000,0.000000,0.000000 +220,-3.0,-162.000000,0.000000,0.000000 +221,-3.0,-161.100000,0.000000,0.000000 +222,-3.0,-160.200000,0.000000,0.000000 +223,-3.0,-159.300000,0.000000,0.000000 +224,-3.0,-158.400000,0.000000,0.000000 +225,-3.0,-157.500000,0.000000,0.000000 +226,-3.0,-156.600000,0.000000,0.000000 +227,-3.0,-155.700000,0.000000,0.000000 +228,-3.0,-154.800000,0.000000,0.000000 +229,-3.0,-153.900000,0.000000,0.000000 +230,-3.0,-153.000000,0.000000,0.000000 +231,-3.0,-152.100000,0.000000,0.000000 +232,-3.0,-151.200000,0.000000,0.000000 +233,-3.0,-150.300000,0.000000,0.000000 +234,-3.0,-149.400000,0.000000,0.000000 +235,-3.0,-148.500000,0.000000,0.000000 +236,-3.0,-147.600000,0.000000,0.000000 +237,-3.0,-146.700000,0.000000,0.000000 +238,-3.0,-145.800000,0.000000,0.000000 +239,-3.0,-144.900000,0.000000,0.000000 +240,-3.0,-144.000000,0.000000,0.000000 +241,-3.0,-143.100000,0.000000,0.000000 +242,-3.0,-142.200000,0.000000,0.000000 +243,-3.0,-141.300000,0.000000,0.000000 +244,-3.0,-140.400000,0.000000,0.000000 +245,-3.0,-139.500000,0.000000,0.000000 +246,-3.0,-138.600000,0.000000,0.000000 +247,-3.0,-137.700000,0.000000,0.000000 +248,-3.0,-136.800000,0.000000,0.000000 +249,-3.0,-135.900000,0.000000,0.000000 +250,-3.0,-135.000000,0.000000,0.000000 +251,-3.0,-134.100000,0.000000,0.000000 +252,-3.0,-133.200000,0.000000,0.000000 +253,-3.0,-132.300000,0.000000,0.000000 +254,-3.0,-131.400000,0.000000,0.000000 +255,-3.0,-130.500000,0.000000,0.000000 +256,-3.0,-129.600000,0.000000,0.000000 +257,-3.0,-128.700000,0.000000,0.000000 +258,-3.0,-127.800000,0.000000,0.000000 +259,-3.0,-126.900000,0.000000,0.000000 +260,-3.0,-126.000000,0.000000,0.000000 +261,-3.0,-125.100000,0.000000,0.000000 +262,-3.0,-124.200000,0.000000,0.000000 +263,-3.0,-123.300000,0.000000,0.000000 +264,-3.0,-122.400000,0.000000,0.000000 +265,-3.0,-121.500000,0.000000,0.000000 +266,-3.0,-120.600000,0.000000,0.000000 +267,-3.0,-119.700000,0.000000,0.000000 +268,-3.0,-118.800000,0.000000,0.000000 +269,-3.0,-117.900000,0.000000,0.000000 +270,-3.0,-117.000000,0.000000,0.000000 +271,-3.0,-116.100000,0.000000,0.000000 +272,-3.0,-115.200000,0.000000,0.000000 +273,-3.0,-114.300000,0.000000,0.000000 +274,-3.0,-113.400000,0.000000,0.000000 +275,-3.0,-112.500000,0.000000,0.000000 +276,-3.0,-111.600000,0.000000,0.000000 +277,-3.0,-110.700000,0.000000,0.000000 +278,-3.0,-109.800000,0.000000,0.000000 +279,-3.0,-108.900000,0.000000,0.000000 +280,-3.0,-108.000000,0.000000,0.000000 +281,-3.0,-107.100000,0.000000,0.000000 +282,-3.0,-106.200000,0.000000,0.000000 +283,-3.0,-105.300000,0.000000,0.000000 +284,-3.0,-104.400000,0.000000,0.000000 +285,-3.0,-103.500000,0.000000,0.000000 +286,-3.0,-102.600000,0.000000,0.000000 +287,-3.0,-101.700000,0.000000,0.000000 +288,-3.0,-100.800000,0.000000,0.000000 +289,-3.0,-99.900000,0.000000,0.000000 +290,-3.0,-99.000000,0.000000,0.000000 +291,-3.0,-98.100000,0.000000,0.000000 +292,-3.0,-97.200000,0.000000,0.000000 +293,-3.0,-96.300000,0.000000,0.000000 +294,-3.0,-95.400000,0.000000,0.000000 +295,-3.0,-94.500000,0.000000,0.000000 +296,-3.0,-93.600000,0.000000,0.000000 +297,-3.0,-92.700000,0.000000,0.000000 +298,-3.0,-91.800000,0.000000,0.000000 +299,-3.0,-90.900000,0.000000,0.000000 +300,-3.0,-90.000000,0.000000,0.000000 +301,-3.0,-89.100000,0.000000,0.000000 +302,-3.0,-88.200000,0.000000,0.000000 +303,-3.0,-87.300000,0.000000,0.000000 +304,-3.0,-86.400000,0.000000,0.000000 +305,-3.0,-85.500000,0.000000,0.000000 +306,-3.0,-84.600000,0.000000,0.000000 +307,-3.0,-83.700000,0.000000,0.000000 +308,-3.0,-82.800000,0.000000,0.000000 +309,-3.0,-81.900000,0.000000,0.000000 +310,-3.0,-81.000000,0.000000,0.000000 +311,-3.0,-80.100000,0.000000,0.000000 +312,-3.0,-79.200000,0.000000,0.000000 +313,-3.0,-78.300000,0.000000,0.000000 +314,-3.0,-77.400000,0.000000,0.000000 +315,-3.0,-76.500000,0.000000,0.000000 +316,-3.0,-75.600000,0.000000,0.000000 +317,-3.0,-74.700000,0.000000,0.000000 +318,-3.0,-73.800000,0.000000,0.000000 +319,-3.0,-72.900000,0.000000,0.000000 +320,-3.0,-72.000000,0.000000,0.000000 +321,-3.0,-71.100000,0.000000,0.000000 +322,-3.0,-70.200000,0.000000,0.000000 +323,-3.0,-69.300000,0.000000,0.000000 +324,-3.0,-68.400000,0.000000,0.000000 +325,-3.0,-67.500000,0.000000,0.000000 +326,-3.0,-66.600000,0.000000,0.000000 +327,-3.0,-65.700000,0.000000,0.000000 +328,-3.0,-64.800000,0.000000,0.000000 +329,-3.0,-63.900000,0.000000,0.000000 +330,-3.0,-63.000000,0.000000,0.000000 +331,-3.0,-62.100000,0.000000,0.000000 +332,-3.0,-61.200000,0.000000,0.000000 +333,-3.0,-60.300000,0.000000,0.000000 +334,-3.0,-59.400000,0.000000,0.000000 +335,-3.0,-58.500000,0.000000,0.000000 +336,-3.0,-57.600000,0.000000,0.000000 +337,-3.0,-56.700000,0.000000,0.000000 +338,-3.0,-55.800000,0.000000,0.000000 +339,-3.0,-54.900000,0.000000,0.000000 +340,-3.0,-54.000000,0.000000,0.000000 +341,-3.0,-53.100000,0.000000,0.000000 +342,-3.0,-52.200000,0.000000,0.000000 +343,-3.0,-51.300000,0.000000,0.000000 +344,-3.0,-50.400000,0.000000,0.000000 +345,-3.0,-49.500000,0.000000,0.000000 +346,-3.0,-48.600000,0.000000,0.000000 +347,-3.0,-47.700000,0.000000,0.000000 +348,-3.0,-46.800000,0.000000,0.000000 +349,-3.0,-45.900000,0.000000,0.000000 +350,-3.0,-45.000000,0.000000,0.000000 +351,-3.0,-44.100000,0.000000,0.000000 +352,-3.0,-43.200000,0.000000,0.000000 +353,-3.0,-42.300000,0.000000,0.000000 +354,-3.0,-41.400000,0.000000,0.000000 +355,-3.0,-40.500000,0.000000,0.000000 +356,-3.0,-39.600000,0.000000,0.000000 +357,-3.0,-38.700000,0.000000,0.000000 +358,-3.0,-37.800000,0.000000,0.000000 +359,-3.0,-36.900000,0.000000,0.000000 +360,-3.0,-36.000000,0.000000,0.000000 +361,-3.0,-35.100000,0.000000,0.000000 +362,-3.0,-34.200000,0.000000,0.000000 +363,-3.0,-33.300000,0.000000,0.000000 +364,-3.0,-32.400000,0.000000,0.000000 +365,-3.0,-31.500000,0.000000,0.000000 +366,-3.0,-30.600000,0.000000,0.000000 +367,-3.0,-29.700000,0.000000,0.000000 +368,-3.0,-28.800000,0.000000,0.000000 +369,-3.0,-27.900000,0.000000,0.000000 +370,-3.0,-27.000000,0.000000,0.000000 +371,-3.0,-26.100000,0.000000,0.000000 +372,-3.0,-25.200000,0.000000,0.000000 +373,-3.0,-24.300000,0.000000,0.000000 +374,-3.0,-23.400000,0.000000,0.000000 +375,-3.0,-22.500000,0.000000,0.000000 +376,-3.0,-21.600000,0.000000,0.000000 +377,-3.0,-20.700000,0.000000,0.000000 +378,-3.0,-19.800000,0.000000,0.000000 +379,-3.0,-18.900000,0.000000,0.000000 +380,-3.0,-18.000000,0.000000,0.000000 +381,-3.0,-17.100000,0.000000,0.000000 +382,-3.0,-16.200000,0.000000,0.000000 +383,-3.0,-15.300000,0.000000,0.000000 +384,-3.0,-14.400000,0.000000,0.000000 +385,-3.0,-13.500000,0.000000,0.000000 +386,-3.0,-12.600000,0.000000,0.000000 +387,-3.0,-11.700000,0.000000,0.000000 +388,-3.0,-10.800000,0.000000,0.000000 +389,-3.0,-9.900000,0.000000,0.000000 +390,-3.0,-9.000000,0.000000,0.000000 +391,-3.0,-8.100000,0.000000,0.000000 +392,-3.0,-7.200000,0.000000,0.000000 +393,-3.0,-6.300000,0.000000,0.000000 +394,-3.0,-5.400000,0.000000,0.000000 +395,-3.0,-4.500000,0.000000,0.000000 +396,-3.0,-3.600000,0.000000,0.000000 +397,-3.0,-2.700000,0.000000,0.000000 +398,-3.0,-1.800000,0.000000,0.000000 +399,-3.0,-0.900000,0.000000,0.000000 +400,-3.0,0.000000,0.000000,0.000000 +401,-3.0,0.900000,0.000000,0.000000 +402,-3.0,1.800000,0.000000,0.000000 +403,-3.0,2.700000,0.000000,0.000000 +404,-3.0,3.600000,0.000000,0.000000 +405,-3.0,4.500000,0.000000,0.000000 +406,-3.0,5.400000,0.000000,0.000000 +407,-3.0,6.300000,0.000000,0.000000 +408,-3.0,7.200000,0.000000,0.000000 +409,-3.0,8.100000,0.000000,0.000000 +410,-3.0,9.000000,0.000000,0.000000 +411,-3.0,9.900000,0.000000,0.000000 +412,-3.0,10.800000,0.000000,0.000000 +413,-3.0,11.700000,0.000000,0.000000 +414,-3.0,12.600000,0.000000,0.000000 +415,-3.0,13.500000,0.000000,0.000000 +416,-3.0,14.400000,0.000000,0.000000 +417,-3.0,15.300000,0.000000,0.000000 +418,-3.0,16.200000,0.000000,0.000000 +419,-3.0,17.100000,0.000000,0.000000 +420,-3.0,18.000000,0.000000,0.000000 +421,-3.0,18.900000,0.000000,0.000000 +422,-3.0,19.800000,0.000000,0.000000 +423,-3.0,20.700000,0.000000,0.000000 +424,-3.0,21.600000,0.000000,0.000000 +425,-3.0,22.500000,0.000000,0.000000 +426,-3.0,23.400000,0.000000,0.000000 +427,-3.0,24.300000,0.000000,0.000000 +428,-3.0,25.200000,0.000000,0.000000 +429,-3.0,26.100000,0.000000,0.000000 +430,-3.0,27.000000,0.000000,0.000000 +431,-3.0,27.900000,0.000000,0.000000 +432,-3.0,28.800000,0.000000,0.000000 +433,-3.0,29.700000,0.000000,0.000000 +434,-3.0,30.600000,0.000000,0.000000 +435,-3.0,31.500000,0.000000,0.000000 +436,-3.0,32.400000,0.000000,0.000000 +437,-3.0,33.300000,0.000000,0.000000 +438,-3.0,34.200000,0.000000,0.000000 +439,-3.0,35.100000,0.000000,0.000000 +440,-3.0,36.000000,0.000000,0.000000 +441,-3.0,36.900000,0.000000,0.000000 +442,-3.0,37.800000,0.000000,0.000000 +443,-3.0,38.700000,0.000000,0.000000 +444,-3.0,39.600000,0.000000,0.000000 +445,-3.0,40.500000,0.000000,0.000000 +446,-3.0,41.400000,0.000000,0.000000 +447,-3.0,42.300000,0.000000,0.000000 +448,-3.0,43.200000,0.000000,0.000000 +449,-3.0,44.100000,0.000000,0.000000 +450,-3.0,45.000000,0.000000,0.000000 +451,-3.0,45.900000,0.000000,0.000000 +452,-3.0,46.800000,0.000000,0.000000 +453,-3.0,47.700000,0.000000,0.000000 +454,-3.0,48.600000,0.000000,0.000000 +455,-3.0,49.500000,0.000000,0.000000 +456,-3.0,50.400000,0.000000,0.000000 +457,-3.0,51.300000,0.000000,0.000000 +458,-3.0,52.200000,0.000000,0.000000 +459,-3.0,53.100000,0.000000,0.000000 +460,-3.0,54.000000,0.000000,0.000000 +461,-3.0,54.900000,0.000000,0.000000 +462,-3.0,55.800000,0.000000,0.000000 +463,-3.0,56.700000,0.000000,0.000000 +464,-3.0,57.600000,0.000000,0.000000 +465,-3.0,58.500000,0.000000,0.000000 +466,-3.0,59.400000,0.000000,0.000000 +467,-3.0,60.300000,0.000000,0.000000 +468,-3.0,61.200000,0.000000,0.000000 +469,-3.0,62.100000,0.000000,0.000000 +470,-3.0,63.000000,0.000000,0.000000 +471,-3.0,63.900000,0.000000,0.000000 +472,-3.0,64.800000,0.000000,0.000000 +473,-3.0,65.700000,0.000000,0.000000 +474,-3.0,66.600000,0.000000,0.000000 +475,-3.0,67.500000,0.000000,0.000000 +476,-3.0,68.400000,0.000000,0.000000 +477,-3.0,69.300000,0.000000,0.000000 +478,-3.0,70.200000,0.000000,0.000000 +479,-3.0,71.100000,0.000000,0.000000 +480,-3.0,72.000000,0.000000,0.000000 +481,-3.0,72.900000,0.000000,0.000000 +482,-3.0,73.800000,0.000000,0.000000 +483,-3.0,74.700000,0.000000,0.000000 +484,-3.0,75.600000,0.000000,0.000000 +485,-3.0,76.500000,0.000000,0.000000 +486,-3.0,77.400000,0.000000,0.000000 +487,-3.0,78.300000,0.000000,0.000000 +488,-3.0,79.200000,0.000000,0.000000 +489,-3.0,80.100000,0.000000,0.000000 +490,-3.0,81.000000,0.000000,0.000000 +491,-3.0,81.900000,0.000000,0.000000 +492,-3.0,82.800000,0.000000,0.000000 +493,-3.0,83.700000,0.000000,0.000000 +494,-3.0,84.600000,0.000000,0.000000 +495,-3.0,85.500000,0.000000,0.000000 +496,-3.0,86.400000,0.000000,0.000000 +497,-3.0,87.300000,0.000000,0.000000 +498,-3.0,88.200000,0.000000,0.000000 +499,-3.0,89.100000,0.000000,0.000000 +500,-3.0,90.000000,0.000000,0.000000 +501,-3.0,90.900000,0.000000,0.000000 +502,-3.0,91.800000,0.000000,0.000000 +503,-3.0,92.700000,0.000000,0.000000 +504,-3.0,93.600000,0.000000,0.000000 +505,-3.0,94.500000,0.000000,0.000000 +506,-3.0,95.400000,0.000000,0.000000 +507,-3.0,96.300000,0.000000,0.000000 +508,-3.0,97.200000,0.000000,0.000000 +509,-3.0,98.100000,0.000000,0.000000 +510,-3.0,99.000000,0.000000,0.000000 +511,-3.0,99.900000,0.000000,0.000000 +512,-3.0,100.800000,0.000000,0.000000 +513,-3.0,101.700000,0.000000,0.000000 +514,-3.0,102.600000,0.000000,0.000000 +515,-3.0,103.500000,0.000000,0.000000 +516,-3.0,104.400000,0.000000,0.000000 +517,-3.0,105.300000,0.000000,0.000000 +518,-3.0,106.200000,0.000000,0.000000 +519,-3.0,107.100000,0.000000,0.000000 +520,-3.0,108.000000,0.000000,0.000000 +521,-3.0,108.900000,0.000000,0.000000 +522,-3.0,109.800000,0.000000,0.000000 +523,-3.0,110.700000,0.000000,0.000000 +524,-3.0,111.600000,0.000000,0.000000 +525,-3.0,112.500000,0.000000,0.000000 +526,-3.0,113.400000,0.000000,0.000000 +527,-3.0,114.300000,0.000000,0.000000 +528,-3.0,115.200000,0.000000,0.000000 +529,-3.0,116.100000,0.000000,0.000000 +530,-3.0,117.000000,0.000000,0.000000 +531,-3.0,117.900000,0.000000,0.000000 +532,-3.0,118.800000,0.000000,0.000000 +533,-3.0,119.700000,0.000000,0.000000 +534,-3.0,120.600000,0.000000,0.000000 +535,-3.0,121.500000,0.000000,0.000000 +536,-3.0,122.400000,0.000000,0.000000 +537,-3.0,123.300000,0.000000,0.000000 +538,-3.0,124.200000,0.000000,0.000000 +539,-3.0,125.100000,0.000000,0.000000 +540,-3.0,126.000000,0.000000,0.000000 +541,-3.0,126.900000,0.000000,0.000000 +542,-3.0,127.800000,0.000000,0.000000 +543,-3.0,128.700000,0.000000,0.000000 +544,-3.0,129.600000,0.000000,0.000000 +545,-3.0,130.500000,0.000000,0.000000 +546,-3.0,131.400000,0.000000,0.000000 +547,-3.0,132.300000,0.000000,0.000000 +548,-3.0,133.200000,0.000000,0.000000 +549,-3.0,134.100000,0.000000,0.000000 +550,-3.0,135.000000,0.000000,0.000000 +551,-3.0,135.900000,0.000000,0.000000 +552,-3.0,136.800000,0.000000,0.000000 +553,-3.0,137.700000,0.000000,0.000000 +554,-3.0,138.600000,0.000000,0.000000 +555,-3.0,139.500000,0.000000,0.000000 +556,-3.0,140.400000,0.000000,0.000000 +557,-3.0,141.300000,0.000000,0.000000 +558,-3.0,142.200000,0.000000,0.000000 +559,-3.0,143.100000,0.000000,0.000000 +560,-3.0,144.000000,0.000000,0.000000 +561,-3.0,144.900000,0.000000,0.000000 +562,-3.0,145.800000,0.000000,0.000000 +563,-3.0,146.700000,0.000000,0.000000 +564,-3.0,147.600000,0.000000,0.000000 +565,-3.0,148.500000,0.000000,0.000000 +566,-3.0,149.400000,0.000000,0.000000 +567,-3.0,150.300000,0.000000,0.000000 +568,-3.0,151.200000,0.000000,0.000000 +569,-3.0,152.100000,0.000000,0.000000 +570,-3.0,153.000000,0.000000,0.000000 +571,-3.0,153.900000,0.000000,0.000000 +572,-3.0,154.800000,0.000000,0.000000 +573,-3.0,155.700000,0.000000,0.000000 +574,-3.0,156.600000,0.000000,0.000000 +575,-3.0,157.500000,0.000000,0.000000 +576,-3.0,158.400000,0.000000,0.000000 +577,-3.0,159.300000,0.000000,0.000000 +578,-3.0,160.200000,0.000000,0.000000 +579,-3.0,161.100000,0.000000,0.000000 +580,-3.0,162.000000,0.000000,0.000000 +581,-3.0,162.900000,0.000000,0.000000 +582,-3.0,163.800000,0.000000,0.000000 +583,-3.0,164.700000,0.000000,0.000000 +584,-3.0,165.600000,0.000000,0.000000 +585,-3.0,166.500000,0.000000,0.000000 +586,-3.0,167.400000,0.000000,0.000000 +587,-3.0,168.300000,0.000000,0.000000 +588,-3.0,169.200000,0.000000,0.000000 +589,-3.0,170.100000,0.000000,0.000000 +590,-3.0,171.000000,0.000000,0.000000 +591,-3.0,171.900000,0.000000,0.000000 +592,-3.0,172.800000,0.000000,0.000000 +593,-3.0,173.700000,0.000000,0.000000 +594,-3.0,174.600000,0.000000,0.000000 +595,-3.0,175.500000,0.000000,0.000000 +596,-3.0,176.400000,0.000000,0.000000 +597,-3.0,177.300000,0.000000,0.000000 +598,-3.0,178.200000,0.000000,0.000000 +599,-3.0,179.100000,0.000000,0.000000 +600,-3.0,180.000000,0.000000,0.000000 +601,-3.0,180.900000,0.000000,0.000000 +602,-3.0,181.800000,0.000000,0.000000 +603,-3.0,182.700000,0.000000,0.000000 +604,-3.0,183.600000,0.000000,0.000000 +605,-3.0,184.500000,0.000000,0.000000 +606,-3.0,185.400000,0.000000,0.000000 +607,-3.0,186.300000,0.000000,0.000000 +608,-3.0,187.200000,0.000000,0.000000 +609,-3.0,188.100000,0.000000,0.000000 +610,-3.0,189.000000,0.000000,0.000000 +611,-3.0,189.900000,0.000000,0.000000 +612,-3.0,190.800000,0.000000,0.000000 +613,-3.0,191.700000,0.000000,0.000000 +614,-3.0,192.600000,0.000000,0.000000 +615,-3.0,193.500000,0.000000,0.000000 +616,-3.0,194.400000,0.000000,0.000000 +617,-3.0,195.300000,0.000000,0.000000 +618,-3.0,196.200000,0.000000,0.000000 +619,-3.0,197.100000,0.000000,0.000000 +620,-3.0,198.000000,0.000000,0.000000 +621,-3.0,198.900000,0.000000,0.000000 +622,-3.0,199.800000,0.000000,0.000000 +623,-3.0,200.700000,0.000000,0.000000 +624,-3.0,201.600000,0.000000,0.000000 +625,-3.0,202.500000,0.000000,0.000000 +626,-3.0,203.400000,0.000000,0.000000 +627,-3.0,204.300000,0.000000,0.000000 +628,-3.0,205.200000,0.000000,0.000000 +629,-3.0,206.100000,0.000000,0.000000 +630,-3.0,207.000000,0.000000,0.000000 +631,-3.0,207.900000,0.000000,0.000000 +632,-3.0,208.800000,0.000000,0.000000 +633,-3.0,209.700000,0.000000,0.000000 +634,-3.0,210.600000,0.000000,0.000000 +635,-3.0,211.500000,0.000000,0.000000 +636,-3.0,212.400000,0.000000,0.000000 +637,-3.0,213.300000,0.000000,0.000000 +638,-3.0,214.200000,0.000000,0.000000 +639,-3.0,215.100000,0.000000,0.000000 +640,-3.0,216.000000,0.000000,0.000000 +641,-3.0,216.900000,0.000000,0.000000 +642,-3.0,217.800000,0.000000,0.000000 +643,-3.0,218.700000,0.000000,0.000000 +644,-3.0,219.600000,0.000000,0.000000 +645,-3.0,220.500000,0.000000,0.000000 +646,-3.0,221.400000,0.000000,0.000000 +647,-3.0,222.300000,0.000000,0.000000 +648,-3.0,223.200000,0.000000,0.000000 +649,-3.0,224.100000,0.000000,0.000000 +650,-3.0,225.000000,0.000000,0.000000 +651,-3.0,225.900000,0.000000,0.000000 +652,-3.0,226.800000,0.000000,0.000000 +653,-3.0,227.700000,0.000000,0.000000 +654,-3.0,228.600000,0.000000,0.000000 +655,-3.0,229.500000,0.000000,0.000000 +656,-3.0,230.400000,0.000000,0.000000 +657,-3.0,231.300000,0.000000,0.000000 +658,-3.0,232.200000,0.000000,0.000000 +659,-3.0,233.100000,0.000000,0.000000 +660,-3.0,234.000000,0.000000,0.000000 +661,-3.0,234.900000,0.000000,0.000000 +662,-3.0,235.800000,0.000000,0.000000 +663,-3.0,236.700000,0.000000,0.000000 +664,-3.0,237.600000,0.000000,0.000000 +665,-3.0,238.500000,0.000000,0.000000 +666,-3.0,239.400000,0.000000,0.000000 +667,-3.0,240.300000,0.000000,0.000000 +668,-3.0,241.200000,0.000000,0.000000 +669,-3.0,242.100000,0.000000,0.000000 +670,-3.0,243.000000,0.000000,0.000000 +671,-3.0,243.900000,0.000000,0.000000 +672,-3.0,244.800000,0.000000,0.000000 +673,-3.0,245.700000,0.000000,0.000000 +674,-3.0,246.600000,0.000000,0.000000 +675,-3.0,247.500000,0.000000,0.000000 +676,-3.0,248.400000,0.000000,0.000000 +677,-3.0,249.300000,0.000000,0.000000 +678,-3.0,250.200000,0.000000,0.000000 +679,-3.0,251.100000,0.000000,0.000000 +680,-3.0,252.000000,0.000000,0.000000 +681,-3.0,252.900000,0.000000,0.000000 +682,-3.0,253.800000,0.000000,0.000000 +683,-3.0,254.700000,0.000000,0.000000 +684,-3.0,255.600000,0.000000,0.000000 +685,-3.0,256.500000,0.000000,0.000000 +686,-3.0,257.400000,0.000000,0.000000 +687,-3.0,258.300000,0.000000,0.000000 +688,-3.0,259.200000,0.000000,0.000000 +689,-3.0,260.100000,0.000000,0.000000 +690,-3.0,261.000000,0.000000,0.000000 +691,-3.0,261.900000,0.000000,0.000000 +692,-3.0,262.800000,0.000000,0.000000 +693,-3.0,263.700000,0.000000,0.000000 +694,-3.0,264.600000,0.000000,0.000000 +695,-3.0,265.500000,0.000000,0.000000 +696,-3.0,266.400000,0.000000,0.000000 +697,-3.0,267.300000,0.000000,0.000000 +698,-3.0,268.200000,0.000000,0.000000 +699,-3.0,269.100000,0.000000,0.000000 +700,-3.0,270.000000,0.000000,0.000000 +701,-3.0,270.900000,0.000000,0.000000 +702,-3.0,271.800000,0.000000,0.000000 +703,-3.0,272.700000,0.000000,0.000000 +704,-3.0,273.600000,0.000000,0.000000 +705,-3.0,274.500000,0.000000,0.000000 +706,-3.0,275.400000,0.000000,0.000000 +707,-3.0,276.300000,0.000000,0.000000 +708,-3.0,277.200000,0.000000,0.000000 +709,-3.0,278.100000,0.000000,0.000000 +710,-3.0,279.000000,0.000000,0.000000 +711,-3.0,279.900000,0.000000,0.000000 +712,-3.0,280.800000,0.000000,0.000000 +713,-3.0,281.700000,0.000000,0.000000 +714,-3.0,282.600000,0.000000,0.000000 +715,-3.0,283.500000,0.000000,0.000000 +716,-3.0,284.400000,0.000000,0.000000 +717,-3.0,285.300000,0.000000,0.000000 +718,-3.0,286.200000,0.000000,0.000000 +719,-3.0,287.100000,0.000000,0.000000 +720,-3.0,288.000000,0.000000,0.000000 +721,-3.0,288.900000,0.000000,0.000000 +722,-3.0,289.800000,0.000000,0.000000 +723,-3.0,290.700000,0.000000,0.000000 +724,-3.0,291.600000,0.000000,0.000000 +725,-3.0,292.500000,0.000000,0.000000 +726,-3.0,293.400000,0.000000,0.000000 +727,-3.0,294.300000,0.000000,0.000000 +728,-3.0,295.200000,0.000000,0.000000 +729,-3.0,296.100000,0.000000,0.000000 +730,-3.0,297.000000,0.000000,0.000000 +731,-3.0,297.900000,0.000000,0.000000 +732,-3.0,298.800000,0.000000,0.000000 +733,-3.0,299.700000,0.000000,0.000000 +734,-3.0,300.600000,0.000000,0.000000 +735,-3.0,301.500000,0.000000,0.000000 +736,-3.0,302.400000,0.000000,0.000000 +737,-3.0,303.300000,0.000000,0.000000 +738,-3.0,304.200000,0.000000,0.000000 +739,-3.0,305.100000,0.000000,0.000000 +740,-3.0,306.000000,0.000000,0.000000 +741,-3.0,306.900000,0.000000,0.000000 +742,-3.0,307.800000,0.000000,0.000000 +743,-3.0,308.700000,0.000000,0.000000 +744,-3.0,309.600000,0.000000,0.000000 +745,-3.0,310.500000,0.000000,0.000000 +746,-3.0,311.400000,0.000000,0.000000 +747,-3.0,312.300000,0.000000,0.000000 +748,-3.0,313.200000,0.000000,0.000000 +749,-3.0,314.100000,0.000000,0.000000 +750,-3.0,315.000000,0.000000,0.000000 +751,-3.0,315.900000,0.000000,0.000000 +752,-3.0,316.800000,0.000000,0.000000 +753,-3.0,317.700000,0.000000,0.000000 +754,-3.0,318.600000,0.000000,0.000000 +755,-3.0,319.500000,0.000000,0.000000 +756,-3.0,320.400000,0.000000,0.000000 +757,-3.0,321.300000,0.000000,0.000000 +758,-3.0,322.200000,0.000000,0.000000 +759,-3.0,323.100000,0.000000,0.000000 +760,-3.0,324.000000,0.000000,0.000000 +761,-3.0,324.900000,0.000000,0.000000 +762,-3.0,325.800000,0.000000,0.000000 +763,-3.0,326.700000,0.000000,0.000000 +764,-3.0,327.600000,0.000000,0.000000 +765,-3.0,328.500000,0.000000,0.000000 +766,-3.0,329.400000,0.000000,0.000000 +767,-3.0,330.300000,0.000000,0.000000 +768,-3.0,331.200000,0.000000,0.000000 +769,-3.0,332.100000,0.000000,0.000000 +770,-3.0,333.000000,0.000000,0.000000 +771,-3.0,333.900000,0.000000,0.000000 +772,-3.0,334.800000,0.000000,0.000000 +773,-3.0,335.700000,0.000000,0.000000 +774,-3.0,336.600000,0.000000,0.000000 +775,-3.0,337.500000,0.000000,0.000000 +776,-3.0,338.400000,0.000000,0.000000 +777,-3.0,339.300000,0.000000,0.000000 +778,-3.0,340.200000,0.000000,0.000000 +779,-3.0,341.100000,0.000000,0.000000 +780,-3.0,342.000000,0.000000,0.000000 +781,-3.0,342.900000,0.000000,0.000000 +782,-3.0,343.800000,0.000000,0.000000 +783,-3.0,344.700000,0.000000,0.000000 +784,-3.0,345.600000,0.000000,0.000000 +785,-3.0,346.500000,0.000000,0.000000 +786,-3.0,347.400000,0.000000,0.000000 +787,-3.0,348.300000,0.000000,0.000000 +788,-3.0,349.200000,0.000000,0.000000 +789,-3.0,350.100000,0.000000,0.000000 +790,-3.0,351.000000,0.000000,0.000000 +791,-3.0,351.900000,0.000000,0.000000 +792,-3.0,352.800000,0.000000,0.000000 +793,-3.0,353.700000,0.000000,0.000000 +794,-3.0,354.600000,0.000000,0.000000 +795,-3.0,355.500000,0.000000,0.000000 +796,-3.0,356.400000,0.000000,0.000000 +797,-3.0,357.300000,0.000000,0.000000 +798,-3.0,358.200000,0.000000,0.000000 +799,-3.0,359.100000,0.000000,0.000000 +800,-3.0,0.000000,-360.000000,0.000000 +801,-3.0,0.000000,-359.100000,0.000000 +802,-3.0,0.000000,-358.200000,0.000000 +803,-3.0,0.000000,-357.300000,0.000000 +804,-3.0,0.000000,-356.400000,0.000000 +805,-3.0,0.000000,-355.500000,0.000000 +806,-3.0,0.000000,-354.600000,0.000000 +807,-3.0,0.000000,-353.700000,0.000000 +808,-3.0,0.000000,-352.800000,0.000000 +809,-3.0,0.000000,-351.900000,0.000000 +810,-3.0,0.000000,-351.000000,0.000000 +811,-3.0,0.000000,-350.100000,0.000000 +812,-3.0,0.000000,-349.200000,0.000000 +813,-3.0,0.000000,-348.300000,0.000000 +814,-3.0,0.000000,-347.400000,0.000000 +815,-3.0,0.000000,-346.500000,0.000000 +816,-3.0,0.000000,-345.600000,0.000000 +817,-3.0,0.000000,-344.700000,0.000000 +818,-3.0,0.000000,-343.800000,0.000000 +819,-3.0,0.000000,-342.900000,0.000000 +820,-3.0,0.000000,-342.000000,0.000000 +821,-3.0,0.000000,-341.100000,0.000000 +822,-3.0,0.000000,-340.200000,0.000000 +823,-3.0,0.000000,-339.300000,0.000000 +824,-3.0,0.000000,-338.400000,0.000000 +825,-3.0,0.000000,-337.500000,0.000000 +826,-3.0,0.000000,-336.600000,0.000000 +827,-3.0,0.000000,-335.700000,0.000000 +828,-3.0,0.000000,-334.800000,0.000000 +829,-3.0,0.000000,-333.900000,0.000000 +830,-3.0,0.000000,-333.000000,0.000000 +831,-3.0,0.000000,-332.100000,0.000000 +832,-3.0,0.000000,-331.200000,0.000000 +833,-3.0,0.000000,-330.300000,0.000000 +834,-3.0,0.000000,-329.400000,0.000000 +835,-3.0,0.000000,-328.500000,0.000000 +836,-3.0,0.000000,-327.600000,0.000000 +837,-3.0,0.000000,-326.700000,0.000000 +838,-3.0,0.000000,-325.800000,0.000000 +839,-3.0,0.000000,-324.900000,0.000000 +840,-3.0,0.000000,-324.000000,0.000000 +841,-3.0,0.000000,-323.100000,0.000000 +842,-3.0,0.000000,-322.200000,0.000000 +843,-3.0,0.000000,-321.300000,0.000000 +844,-3.0,0.000000,-320.400000,0.000000 +845,-3.0,0.000000,-319.500000,0.000000 +846,-3.0,0.000000,-318.600000,0.000000 +847,-3.0,0.000000,-317.700000,0.000000 +848,-3.0,0.000000,-316.800000,0.000000 +849,-3.0,0.000000,-315.900000,0.000000 +850,-3.0,0.000000,-315.000000,0.000000 +851,-3.0,0.000000,-314.100000,0.000000 +852,-3.0,0.000000,-313.200000,0.000000 +853,-3.0,0.000000,-312.300000,0.000000 +854,-3.0,0.000000,-311.400000,0.000000 +855,-3.0,0.000000,-310.500000,0.000000 +856,-3.0,0.000000,-309.600000,0.000000 +857,-3.0,0.000000,-308.700000,0.000000 +858,-3.0,0.000000,-307.800000,0.000000 +859,-3.0,0.000000,-306.900000,0.000000 +860,-3.0,0.000000,-306.000000,0.000000 +861,-3.0,0.000000,-305.100000,0.000000 +862,-3.0,0.000000,-304.200000,0.000000 +863,-3.0,0.000000,-303.300000,0.000000 +864,-3.0,0.000000,-302.400000,0.000000 +865,-3.0,0.000000,-301.500000,0.000000 +866,-3.0,0.000000,-300.600000,0.000000 +867,-3.0,0.000000,-299.700000,0.000000 +868,-3.0,0.000000,-298.800000,0.000000 +869,-3.0,0.000000,-297.900000,0.000000 +870,-3.0,0.000000,-297.000000,0.000000 +871,-3.0,0.000000,-296.100000,0.000000 +872,-3.0,0.000000,-295.200000,0.000000 +873,-3.0,0.000000,-294.300000,0.000000 +874,-3.0,0.000000,-293.400000,0.000000 +875,-3.0,0.000000,-292.500000,0.000000 +876,-3.0,0.000000,-291.600000,0.000000 +877,-3.0,0.000000,-290.700000,0.000000 +878,-3.0,0.000000,-289.800000,0.000000 +879,-3.0,0.000000,-288.900000,0.000000 +880,-3.0,0.000000,-288.000000,0.000000 +881,-3.0,0.000000,-287.100000,0.000000 +882,-3.0,0.000000,-286.200000,0.000000 +883,-3.0,0.000000,-285.300000,0.000000 +884,-3.0,0.000000,-284.400000,0.000000 +885,-3.0,0.000000,-283.500000,0.000000 +886,-3.0,0.000000,-282.600000,0.000000 +887,-3.0,0.000000,-281.700000,0.000000 +888,-3.0,0.000000,-280.800000,0.000000 +889,-3.0,0.000000,-279.900000,0.000000 +890,-3.0,0.000000,-279.000000,0.000000 +891,-3.0,0.000000,-278.100000,0.000000 +892,-3.0,0.000000,-277.200000,0.000000 +893,-3.0,0.000000,-276.300000,0.000000 +894,-3.0,0.000000,-275.400000,0.000000 +895,-3.0,0.000000,-274.500000,0.000000 +896,-3.0,0.000000,-273.600000,0.000000 +897,-3.0,0.000000,-272.700000,0.000000 +898,-3.0,0.000000,-271.800000,0.000000 +899,-3.0,0.000000,-270.900000,0.000000 +900,-3.0,0.000000,-270.000000,0.000000 +901,-3.0,0.000000,-269.100000,0.000000 +902,-3.0,0.000000,-268.200000,0.000000 +903,-3.0,0.000000,-267.300000,0.000000 +904,-3.0,0.000000,-266.400000,0.000000 +905,-3.0,0.000000,-265.500000,0.000000 +906,-3.0,0.000000,-264.600000,0.000000 +907,-3.0,0.000000,-263.700000,0.000000 +908,-3.0,0.000000,-262.800000,0.000000 +909,-3.0,0.000000,-261.900000,0.000000 +910,-3.0,0.000000,-261.000000,0.000000 +911,-3.0,0.000000,-260.100000,0.000000 +912,-3.0,0.000000,-259.200000,0.000000 +913,-3.0,0.000000,-258.300000,0.000000 +914,-3.0,0.000000,-257.400000,0.000000 +915,-3.0,0.000000,-256.500000,0.000000 +916,-3.0,0.000000,-255.600000,0.000000 +917,-3.0,0.000000,-254.700000,0.000000 +918,-3.0,0.000000,-253.800000,0.000000 +919,-3.0,0.000000,-252.900000,0.000000 +920,-3.0,0.000000,-252.000000,0.000000 +921,-3.0,0.000000,-251.100000,0.000000 +922,-3.0,0.000000,-250.200000,0.000000 +923,-3.0,0.000000,-249.300000,0.000000 +924,-3.0,0.000000,-248.400000,0.000000 +925,-3.0,0.000000,-247.500000,0.000000 +926,-3.0,0.000000,-246.600000,0.000000 +927,-3.0,0.000000,-245.700000,0.000000 +928,-3.0,0.000000,-244.800000,0.000000 +929,-3.0,0.000000,-243.900000,0.000000 +930,-3.0,0.000000,-243.000000,0.000000 +931,-3.0,0.000000,-242.100000,0.000000 +932,-3.0,0.000000,-241.200000,0.000000 +933,-3.0,0.000000,-240.300000,0.000000 +934,-3.0,0.000000,-239.400000,0.000000 +935,-3.0,0.000000,-238.500000,0.000000 +936,-3.0,0.000000,-237.600000,0.000000 +937,-3.0,0.000000,-236.700000,0.000000 +938,-3.0,0.000000,-235.800000,0.000000 +939,-3.0,0.000000,-234.900000,0.000000 +940,-3.0,0.000000,-234.000000,0.000000 +941,-3.0,0.000000,-233.100000,0.000000 +942,-3.0,0.000000,-232.200000,0.000000 +943,-3.0,0.000000,-231.300000,0.000000 +944,-3.0,0.000000,-230.400000,0.000000 +945,-3.0,0.000000,-229.500000,0.000000 +946,-3.0,0.000000,-228.600000,0.000000 +947,-3.0,0.000000,-227.700000,0.000000 +948,-3.0,0.000000,-226.800000,0.000000 +949,-3.0,0.000000,-225.900000,0.000000 +950,-3.0,0.000000,-225.000000,0.000000 +951,-3.0,0.000000,-224.100000,0.000000 +952,-3.0,0.000000,-223.200000,0.000000 +953,-3.0,0.000000,-222.300000,0.000000 +954,-3.0,0.000000,-221.400000,0.000000 +955,-3.0,0.000000,-220.500000,0.000000 +956,-3.0,0.000000,-219.600000,0.000000 +957,-3.0,0.000000,-218.700000,0.000000 +958,-3.0,0.000000,-217.800000,0.000000 +959,-3.0,0.000000,-216.900000,0.000000 +960,-3.0,0.000000,-216.000000,0.000000 +961,-3.0,0.000000,-215.100000,0.000000 +962,-3.0,0.000000,-214.200000,0.000000 +963,-3.0,0.000000,-213.300000,0.000000 +964,-3.0,0.000000,-212.400000,0.000000 +965,-3.0,0.000000,-211.500000,0.000000 +966,-3.0,0.000000,-210.600000,0.000000 +967,-3.0,0.000000,-209.700000,0.000000 +968,-3.0,0.000000,-208.800000,0.000000 +969,-3.0,0.000000,-207.900000,0.000000 +970,-3.0,0.000000,-207.000000,0.000000 +971,-3.0,0.000000,-206.100000,0.000000 +972,-3.0,0.000000,-205.200000,0.000000 +973,-3.0,0.000000,-204.300000,0.000000 +974,-3.0,0.000000,-203.400000,0.000000 +975,-3.0,0.000000,-202.500000,0.000000 +976,-3.0,0.000000,-201.600000,0.000000 +977,-3.0,0.000000,-200.700000,0.000000 +978,-3.0,0.000000,-199.800000,0.000000 +979,-3.0,0.000000,-198.900000,0.000000 +980,-3.0,0.000000,-198.000000,0.000000 +981,-3.0,0.000000,-197.100000,0.000000 +982,-3.0,0.000000,-196.200000,0.000000 +983,-3.0,0.000000,-195.300000,0.000000 +984,-3.0,0.000000,-194.400000,0.000000 +985,-3.0,0.000000,-193.500000,0.000000 +986,-3.0,0.000000,-192.600000,0.000000 +987,-3.0,0.000000,-191.700000,0.000000 +988,-3.0,0.000000,-190.800000,0.000000 +989,-3.0,0.000000,-189.900000,0.000000 +990,-3.0,0.000000,-189.000000,0.000000 +991,-3.0,0.000000,-188.100000,0.000000 +992,-3.0,0.000000,-187.200000,0.000000 +993,-3.0,0.000000,-186.300000,0.000000 +994,-3.0,0.000000,-185.400000,0.000000 +995,-3.0,0.000000,-184.500000,0.000000 +996,-3.0,0.000000,-183.600000,0.000000 +997,-3.0,0.000000,-182.700000,0.000000 +998,-3.0,0.000000,-181.800000,0.000000 +999,-3.0,0.000000,-180.900000,0.000000 +1000,-3.0,0.000000,-180.000000,0.000000 +1001,-3.0,0.000000,-179.100000,0.000000 +1002,-3.0,0.000000,-178.200000,0.000000 +1003,-3.0,0.000000,-177.300000,0.000000 +1004,-3.0,0.000000,-176.400000,0.000000 +1005,-3.0,0.000000,-175.500000,0.000000 +1006,-3.0,0.000000,-174.600000,0.000000 +1007,-3.0,0.000000,-173.700000,0.000000 +1008,-3.0,0.000000,-172.800000,0.000000 +1009,-3.0,0.000000,-171.900000,0.000000 +1010,-3.0,0.000000,-171.000000,0.000000 +1011,-3.0,0.000000,-170.100000,0.000000 +1012,-3.0,0.000000,-169.200000,0.000000 +1013,-3.0,0.000000,-168.300000,0.000000 +1014,-3.0,0.000000,-167.400000,0.000000 +1015,-3.0,0.000000,-166.500000,0.000000 +1016,-3.0,0.000000,-165.600000,0.000000 +1017,-3.0,0.000000,-164.700000,0.000000 +1018,-3.0,0.000000,-163.800000,0.000000 +1019,-3.0,0.000000,-162.900000,0.000000 +1020,-3.0,0.000000,-162.000000,0.000000 +1021,-3.0,0.000000,-161.100000,0.000000 +1022,-3.0,0.000000,-160.200000,0.000000 +1023,-3.0,0.000000,-159.300000,0.000000 +1024,-3.0,0.000000,-158.400000,0.000000 +1025,-3.0,0.000000,-157.500000,0.000000 +1026,-3.0,0.000000,-156.600000,0.000000 +1027,-3.0,0.000000,-155.700000,0.000000 +1028,-3.0,0.000000,-154.800000,0.000000 +1029,-3.0,0.000000,-153.900000,0.000000 +1030,-3.0,0.000000,-153.000000,0.000000 +1031,-3.0,0.000000,-152.100000,0.000000 +1032,-3.0,0.000000,-151.200000,0.000000 +1033,-3.0,0.000000,-150.300000,0.000000 +1034,-3.0,0.000000,-149.400000,0.000000 +1035,-3.0,0.000000,-148.500000,0.000000 +1036,-3.0,0.000000,-147.600000,0.000000 +1037,-3.0,0.000000,-146.700000,0.000000 +1038,-3.0,0.000000,-145.800000,0.000000 +1039,-3.0,0.000000,-144.900000,0.000000 +1040,-3.0,0.000000,-144.000000,0.000000 +1041,-3.0,0.000000,-143.100000,0.000000 +1042,-3.0,0.000000,-142.200000,0.000000 +1043,-3.0,0.000000,-141.300000,0.000000 +1044,-3.0,0.000000,-140.400000,0.000000 +1045,-3.0,0.000000,-139.500000,0.000000 +1046,-3.0,0.000000,-138.600000,0.000000 +1047,-3.0,0.000000,-137.700000,0.000000 +1048,-3.0,0.000000,-136.800000,0.000000 +1049,-3.0,0.000000,-135.900000,0.000000 +1050,-3.0,0.000000,-135.000000,0.000000 +1051,-3.0,0.000000,-134.100000,0.000000 +1052,-3.0,0.000000,-133.200000,0.000000 +1053,-3.0,0.000000,-132.300000,0.000000 +1054,-3.0,0.000000,-131.400000,0.000000 +1055,-3.0,0.000000,-130.500000,0.000000 +1056,-3.0,0.000000,-129.600000,0.000000 +1057,-3.0,0.000000,-128.700000,0.000000 +1058,-3.0,0.000000,-127.800000,0.000000 +1059,-3.0,0.000000,-126.900000,0.000000 +1060,-3.0,0.000000,-126.000000,0.000000 +1061,-3.0,0.000000,-125.100000,0.000000 +1062,-3.0,0.000000,-124.200000,0.000000 +1063,-3.0,0.000000,-123.300000,0.000000 +1064,-3.0,0.000000,-122.400000,0.000000 +1065,-3.0,0.000000,-121.500000,0.000000 +1066,-3.0,0.000000,-120.600000,0.000000 +1067,-3.0,0.000000,-119.700000,0.000000 +1068,-3.0,0.000000,-118.800000,0.000000 +1069,-3.0,0.000000,-117.900000,0.000000 +1070,-3.0,0.000000,-117.000000,0.000000 +1071,-3.0,0.000000,-116.100000,0.000000 +1072,-3.0,0.000000,-115.200000,0.000000 +1073,-3.0,0.000000,-114.300000,0.000000 +1074,-3.0,0.000000,-113.400000,0.000000 +1075,-3.0,0.000000,-112.500000,0.000000 +1076,-3.0,0.000000,-111.600000,0.000000 +1077,-3.0,0.000000,-110.700000,0.000000 +1078,-3.0,0.000000,-109.800000,0.000000 +1079,-3.0,0.000000,-108.900000,0.000000 +1080,-3.0,0.000000,-108.000000,0.000000 +1081,-3.0,0.000000,-107.100000,0.000000 +1082,-3.0,0.000000,-106.200000,0.000000 +1083,-3.0,0.000000,-105.300000,0.000000 +1084,-3.0,0.000000,-104.400000,0.000000 +1085,-3.0,0.000000,-103.500000,0.000000 +1086,-3.0,0.000000,-102.600000,0.000000 +1087,-3.0,0.000000,-101.700000,0.000000 +1088,-3.0,0.000000,-100.800000,0.000000 +1089,-3.0,0.000000,-99.900000,0.000000 +1090,-3.0,0.000000,-99.000000,0.000000 +1091,-3.0,0.000000,-98.100000,0.000000 +1092,-3.0,0.000000,-97.200000,0.000000 +1093,-3.0,0.000000,-96.300000,0.000000 +1094,-3.0,0.000000,-95.400000,0.000000 +1095,-3.0,0.000000,-94.500000,0.000000 +1096,-3.0,0.000000,-93.600000,0.000000 +1097,-3.0,0.000000,-92.700000,0.000000 +1098,-3.0,0.000000,-91.800000,0.000000 +1099,-3.0,0.000000,-90.900000,0.000000 +1100,-3.0,0.000000,-90.000000,0.000000 +1101,-3.0,0.000000,-89.100000,0.000000 +1102,-3.0,0.000000,-88.200000,0.000000 +1103,-3.0,0.000000,-87.300000,0.000000 +1104,-3.0,0.000000,-86.400000,0.000000 +1105,-3.0,0.000000,-85.500000,0.000000 +1106,-3.0,0.000000,-84.600000,0.000000 +1107,-3.0,0.000000,-83.700000,0.000000 +1108,-3.0,0.000000,-82.800000,0.000000 +1109,-3.0,0.000000,-81.900000,0.000000 +1110,-3.0,0.000000,-81.000000,0.000000 +1111,-3.0,0.000000,-80.100000,0.000000 +1112,-3.0,0.000000,-79.200000,0.000000 +1113,-3.0,0.000000,-78.300000,0.000000 +1114,-3.0,0.000000,-77.400000,0.000000 +1115,-3.0,0.000000,-76.500000,0.000000 +1116,-3.0,0.000000,-75.600000,0.000000 +1117,-3.0,0.000000,-74.700000,0.000000 +1118,-3.0,0.000000,-73.800000,0.000000 +1119,-3.0,0.000000,-72.900000,0.000000 +1120,-3.0,0.000000,-72.000000,0.000000 +1121,-3.0,0.000000,-71.100000,0.000000 +1122,-3.0,0.000000,-70.200000,0.000000 +1123,-3.0,0.000000,-69.300000,0.000000 +1124,-3.0,0.000000,-68.400000,0.000000 +1125,-3.0,0.000000,-67.500000,0.000000 +1126,-3.0,0.000000,-66.600000,0.000000 +1127,-3.0,0.000000,-65.700000,0.000000 +1128,-3.0,0.000000,-64.800000,0.000000 +1129,-3.0,0.000000,-63.900000,0.000000 +1130,-3.0,0.000000,-63.000000,0.000000 +1131,-3.0,0.000000,-62.100000,0.000000 +1132,-3.0,0.000000,-61.200000,0.000000 +1133,-3.0,0.000000,-60.300000,0.000000 +1134,-3.0,0.000000,-59.400000,0.000000 +1135,-3.0,0.000000,-58.500000,0.000000 +1136,-3.0,0.000000,-57.600000,0.000000 +1137,-3.0,0.000000,-56.700000,0.000000 +1138,-3.0,0.000000,-55.800000,0.000000 +1139,-3.0,0.000000,-54.900000,0.000000 +1140,-3.0,0.000000,-54.000000,0.000000 +1141,-3.0,0.000000,-53.100000,0.000000 +1142,-3.0,0.000000,-52.200000,0.000000 +1143,-3.0,0.000000,-51.300000,0.000000 +1144,-3.0,0.000000,-50.400000,0.000000 +1145,-3.0,0.000000,-49.500000,0.000000 +1146,-3.0,0.000000,-48.600000,0.000000 +1147,-3.0,0.000000,-47.700000,0.000000 +1148,-3.0,0.000000,-46.800000,0.000000 +1149,-3.0,0.000000,-45.900000,0.000000 +1150,-3.0,0.000000,-45.000000,0.000000 +1151,-3.0,0.000000,-44.100000,0.000000 +1152,-3.0,0.000000,-43.200000,0.000000 +1153,-3.0,0.000000,-42.300000,0.000000 +1154,-3.0,0.000000,-41.400000,0.000000 +1155,-3.0,0.000000,-40.500000,0.000000 +1156,-3.0,0.000000,-39.600000,0.000000 +1157,-3.0,0.000000,-38.700000,0.000000 +1158,-3.0,0.000000,-37.800000,0.000000 +1159,-3.0,0.000000,-36.900000,0.000000 +1160,-3.0,0.000000,-36.000000,0.000000 +1161,-3.0,0.000000,-35.100000,0.000000 +1162,-3.0,0.000000,-34.200000,0.000000 +1163,-3.0,0.000000,-33.300000,0.000000 +1164,-3.0,0.000000,-32.400000,0.000000 +1165,-3.0,0.000000,-31.500000,0.000000 +1166,-3.0,0.000000,-30.600000,0.000000 +1167,-3.0,0.000000,-29.700000,0.000000 +1168,-3.0,0.000000,-28.800000,0.000000 +1169,-3.0,0.000000,-27.900000,0.000000 +1170,-3.0,0.000000,-27.000000,0.000000 +1171,-3.0,0.000000,-26.100000,0.000000 +1172,-3.0,0.000000,-25.200000,0.000000 +1173,-3.0,0.000000,-24.300000,0.000000 +1174,-3.0,0.000000,-23.400000,0.000000 +1175,-3.0,0.000000,-22.500000,0.000000 +1176,-3.0,0.000000,-21.600000,0.000000 +1177,-3.0,0.000000,-20.700000,0.000000 +1178,-3.0,0.000000,-19.800000,0.000000 +1179,-3.0,0.000000,-18.900000,0.000000 +1180,-3.0,0.000000,-18.000000,0.000000 +1181,-3.0,0.000000,-17.100000,0.000000 +1182,-3.0,0.000000,-16.200000,0.000000 +1183,-3.0,0.000000,-15.300000,0.000000 +1184,-3.0,0.000000,-14.400000,0.000000 +1185,-3.0,0.000000,-13.500000,0.000000 +1186,-3.0,0.000000,-12.600000,0.000000 +1187,-3.0,0.000000,-11.700000,0.000000 +1188,-3.0,0.000000,-10.800000,0.000000 +1189,-3.0,0.000000,-9.900000,0.000000 +1190,-3.0,0.000000,-9.000000,0.000000 +1191,-3.0,0.000000,-8.100000,0.000000 +1192,-3.0,0.000000,-7.200000,0.000000 +1193,-3.0,0.000000,-6.300000,0.000000 +1194,-3.0,0.000000,-5.400000,0.000000 +1195,-3.0,0.000000,-4.500000,0.000000 +1196,-3.0,0.000000,-3.600000,0.000000 +1197,-3.0,0.000000,-2.700000,0.000000 +1198,-3.0,0.000000,-1.800000,0.000000 +1199,-3.0,0.000000,-0.900000,0.000000 +1200,-3.0,0.000000,0.000000,0.000000 +1201,-3.0,0.000000,0.900000,0.000000 +1202,-3.0,0.000000,1.800000,0.000000 +1203,-3.0,0.000000,2.700000,0.000000 +1204,-3.0,0.000000,3.600000,0.000000 +1205,-3.0,0.000000,4.500000,0.000000 +1206,-3.0,0.000000,5.400000,0.000000 +1207,-3.0,0.000000,6.300000,0.000000 +1208,-3.0,0.000000,7.200000,0.000000 +1209,-3.0,0.000000,8.100000,0.000000 +1210,-3.0,0.000000,9.000000,0.000000 +1211,-3.0,0.000000,9.900000,0.000000 +1212,-3.0,0.000000,10.800000,0.000000 +1213,-3.0,0.000000,11.700000,0.000000 +1214,-3.0,0.000000,12.600000,0.000000 +1215,-3.0,0.000000,13.500000,0.000000 +1216,-3.0,0.000000,14.400000,0.000000 +1217,-3.0,0.000000,15.300000,0.000000 +1218,-3.0,0.000000,16.200000,0.000000 +1219,-3.0,0.000000,17.100000,0.000000 +1220,-3.0,0.000000,18.000000,0.000000 +1221,-3.0,0.000000,18.900000,0.000000 +1222,-3.0,0.000000,19.800000,0.000000 +1223,-3.0,0.000000,20.700000,0.000000 +1224,-3.0,0.000000,21.600000,0.000000 +1225,-3.0,0.000000,22.500000,0.000000 +1226,-3.0,0.000000,23.400000,0.000000 +1227,-3.0,0.000000,24.300000,0.000000 +1228,-3.0,0.000000,25.200000,0.000000 +1229,-3.0,0.000000,26.100000,0.000000 +1230,-3.0,0.000000,27.000000,0.000000 +1231,-3.0,0.000000,27.900000,0.000000 +1232,-3.0,0.000000,28.800000,0.000000 +1233,-3.0,0.000000,29.700000,0.000000 +1234,-3.0,0.000000,30.600000,0.000000 +1235,-3.0,0.000000,31.500000,0.000000 +1236,-3.0,0.000000,32.400000,0.000000 +1237,-3.0,0.000000,33.300000,0.000000 +1238,-3.0,0.000000,34.200000,0.000000 +1239,-3.0,0.000000,35.100000,0.000000 +1240,-3.0,0.000000,36.000000,0.000000 +1241,-3.0,0.000000,36.900000,0.000000 +1242,-3.0,0.000000,37.800000,0.000000 +1243,-3.0,0.000000,38.700000,0.000000 +1244,-3.0,0.000000,39.600000,0.000000 +1245,-3.0,0.000000,40.500000,0.000000 +1246,-3.0,0.000000,41.400000,0.000000 +1247,-3.0,0.000000,42.300000,0.000000 +1248,-3.0,0.000000,43.200000,0.000000 +1249,-3.0,0.000000,44.100000,0.000000 +1250,-3.0,0.000000,45.000000,0.000000 +1251,-3.0,0.000000,45.900000,0.000000 +1252,-3.0,0.000000,46.800000,0.000000 +1253,-3.0,0.000000,47.700000,0.000000 +1254,-3.0,0.000000,48.600000,0.000000 +1255,-3.0,0.000000,49.500000,0.000000 +1256,-3.0,0.000000,50.400000,0.000000 +1257,-3.0,0.000000,51.300000,0.000000 +1258,-3.0,0.000000,52.200000,0.000000 +1259,-3.0,0.000000,53.100000,0.000000 +1260,-3.0,0.000000,54.000000,0.000000 +1261,-3.0,0.000000,54.900000,0.000000 +1262,-3.0,0.000000,55.800000,0.000000 +1263,-3.0,0.000000,56.700000,0.000000 +1264,-3.0,0.000000,57.600000,0.000000 +1265,-3.0,0.000000,58.500000,0.000000 +1266,-3.0,0.000000,59.400000,0.000000 +1267,-3.0,0.000000,60.300000,0.000000 +1268,-3.0,0.000000,61.200000,0.000000 +1269,-3.0,0.000000,62.100000,0.000000 +1270,-3.0,0.000000,63.000000,0.000000 +1271,-3.0,0.000000,63.900000,0.000000 +1272,-3.0,0.000000,64.800000,0.000000 +1273,-3.0,0.000000,65.700000,0.000000 +1274,-3.0,0.000000,66.600000,0.000000 +1275,-3.0,0.000000,67.500000,0.000000 +1276,-3.0,0.000000,68.400000,0.000000 +1277,-3.0,0.000000,69.300000,0.000000 +1278,-3.0,0.000000,70.200000,0.000000 +1279,-3.0,0.000000,71.100000,0.000000 +1280,-3.0,0.000000,72.000000,0.000000 +1281,-3.0,0.000000,72.900000,0.000000 +1282,-3.0,0.000000,73.800000,0.000000 +1283,-3.0,0.000000,74.700000,0.000000 +1284,-3.0,0.000000,75.600000,0.000000 +1285,-3.0,0.000000,76.500000,0.000000 +1286,-3.0,0.000000,77.400000,0.000000 +1287,-3.0,0.000000,78.300000,0.000000 +1288,-3.0,0.000000,79.200000,0.000000 +1289,-3.0,0.000000,80.100000,0.000000 +1290,-3.0,0.000000,81.000000,0.000000 +1291,-3.0,0.000000,81.900000,0.000000 +1292,-3.0,0.000000,82.800000,0.000000 +1293,-3.0,0.000000,83.700000,0.000000 +1294,-3.0,0.000000,84.600000,0.000000 +1295,-3.0,0.000000,85.500000,0.000000 +1296,-3.0,0.000000,86.400000,0.000000 +1297,-3.0,0.000000,87.300000,0.000000 +1298,-3.0,0.000000,88.200000,0.000000 +1299,-3.0,0.000000,89.100000,0.000000 +1300,-3.0,0.000000,90.000000,0.000000 +1301,-3.0,0.000000,90.900000,0.000000 +1302,-3.0,0.000000,91.800000,0.000000 +1303,-3.0,0.000000,92.700000,0.000000 +1304,-3.0,0.000000,93.600000,0.000000 +1305,-3.0,0.000000,94.500000,0.000000 +1306,-3.0,0.000000,95.400000,0.000000 +1307,-3.0,0.000000,96.300000,0.000000 +1308,-3.0,0.000000,97.200000,0.000000 +1309,-3.0,0.000000,98.100000,0.000000 +1310,-3.0,0.000000,99.000000,0.000000 +1311,-3.0,0.000000,99.900000,0.000000 +1312,-3.0,0.000000,100.800000,0.000000 +1313,-3.0,0.000000,101.700000,0.000000 +1314,-3.0,0.000000,102.600000,0.000000 +1315,-3.0,0.000000,103.500000,0.000000 +1316,-3.0,0.000000,104.400000,0.000000 +1317,-3.0,0.000000,105.300000,0.000000 +1318,-3.0,0.000000,106.200000,0.000000 +1319,-3.0,0.000000,107.100000,0.000000 +1320,-3.0,0.000000,108.000000,0.000000 +1321,-3.0,0.000000,108.900000,0.000000 +1322,-3.0,0.000000,109.800000,0.000000 +1323,-3.0,0.000000,110.700000,0.000000 +1324,-3.0,0.000000,111.600000,0.000000 +1325,-3.0,0.000000,112.500000,0.000000 +1326,-3.0,0.000000,113.400000,0.000000 +1327,-3.0,0.000000,114.300000,0.000000 +1328,-3.0,0.000000,115.200000,0.000000 +1329,-3.0,0.000000,116.100000,0.000000 +1330,-3.0,0.000000,117.000000,0.000000 +1331,-3.0,0.000000,117.900000,0.000000 +1332,-3.0,0.000000,118.800000,0.000000 +1333,-3.0,0.000000,119.700000,0.000000 +1334,-3.0,0.000000,120.600000,0.000000 +1335,-3.0,0.000000,121.500000,0.000000 +1336,-3.0,0.000000,122.400000,0.000000 +1337,-3.0,0.000000,123.300000,0.000000 +1338,-3.0,0.000000,124.200000,0.000000 +1339,-3.0,0.000000,125.100000,0.000000 +1340,-3.0,0.000000,126.000000,0.000000 +1341,-3.0,0.000000,126.900000,0.000000 +1342,-3.0,0.000000,127.800000,0.000000 +1343,-3.0,0.000000,128.700000,0.000000 +1344,-3.0,0.000000,129.600000,0.000000 +1345,-3.0,0.000000,130.500000,0.000000 +1346,-3.0,0.000000,131.400000,0.000000 +1347,-3.0,0.000000,132.300000,0.000000 +1348,-3.0,0.000000,133.200000,0.000000 +1349,-3.0,0.000000,134.100000,0.000000 +1350,-3.0,0.000000,135.000000,0.000000 +1351,-3.0,0.000000,135.900000,0.000000 +1352,-3.0,0.000000,136.800000,0.000000 +1353,-3.0,0.000000,137.700000,0.000000 +1354,-3.0,0.000000,138.600000,0.000000 +1355,-3.0,0.000000,139.500000,0.000000 +1356,-3.0,0.000000,140.400000,0.000000 +1357,-3.0,0.000000,141.300000,0.000000 +1358,-3.0,0.000000,142.200000,0.000000 +1359,-3.0,0.000000,143.100000,0.000000 +1360,-3.0,0.000000,144.000000,0.000000 +1361,-3.0,0.000000,144.900000,0.000000 +1362,-3.0,0.000000,145.800000,0.000000 +1363,-3.0,0.000000,146.700000,0.000000 +1364,-3.0,0.000000,147.600000,0.000000 +1365,-3.0,0.000000,148.500000,0.000000 +1366,-3.0,0.000000,149.400000,0.000000 +1367,-3.0,0.000000,150.300000,0.000000 +1368,-3.0,0.000000,151.200000,0.000000 +1369,-3.0,0.000000,152.100000,0.000000 +1370,-3.0,0.000000,153.000000,0.000000 +1371,-3.0,0.000000,153.900000,0.000000 +1372,-3.0,0.000000,154.800000,0.000000 +1373,-3.0,0.000000,155.700000,0.000000 +1374,-3.0,0.000000,156.600000,0.000000 +1375,-3.0,0.000000,157.500000,0.000000 +1376,-3.0,0.000000,158.400000,0.000000 +1377,-3.0,0.000000,159.300000,0.000000 +1378,-3.0,0.000000,160.200000,0.000000 +1379,-3.0,0.000000,161.100000,0.000000 +1380,-3.0,0.000000,162.000000,0.000000 +1381,-3.0,0.000000,162.900000,0.000000 +1382,-3.0,0.000000,163.800000,0.000000 +1383,-3.0,0.000000,164.700000,0.000000 +1384,-3.0,0.000000,165.600000,0.000000 +1385,-3.0,0.000000,166.500000,0.000000 +1386,-3.0,0.000000,167.400000,0.000000 +1387,-3.0,0.000000,168.300000,0.000000 +1388,-3.0,0.000000,169.200000,0.000000 +1389,-3.0,0.000000,170.100000,0.000000 +1390,-3.0,0.000000,171.000000,0.000000 +1391,-3.0,0.000000,171.900000,0.000000 +1392,-3.0,0.000000,172.800000,0.000000 +1393,-3.0,0.000000,173.700000,0.000000 +1394,-3.0,0.000000,174.600000,0.000000 +1395,-3.0,0.000000,175.500000,0.000000 +1396,-3.0,0.000000,176.400000,0.000000 +1397,-3.0,0.000000,177.300000,0.000000 +1398,-3.0,0.000000,178.200000,0.000000 +1399,-3.0,0.000000,179.100000,0.000000 +1400,-3.0,0.000000,180.000000,0.000000 +1401,-3.0,0.000000,180.900000,0.000000 +1402,-3.0,0.000000,181.800000,0.000000 +1403,-3.0,0.000000,182.700000,0.000000 +1404,-3.0,0.000000,183.600000,0.000000 +1405,-3.0,0.000000,184.500000,0.000000 +1406,-3.0,0.000000,185.400000,0.000000 +1407,-3.0,0.000000,186.300000,0.000000 +1408,-3.0,0.000000,187.200000,0.000000 +1409,-3.0,0.000000,188.100000,0.000000 +1410,-3.0,0.000000,189.000000,0.000000 +1411,-3.0,0.000000,189.900000,0.000000 +1412,-3.0,0.000000,190.800000,0.000000 +1413,-3.0,0.000000,191.700000,0.000000 +1414,-3.0,0.000000,192.600000,0.000000 +1415,-3.0,0.000000,193.500000,0.000000 +1416,-3.0,0.000000,194.400000,0.000000 +1417,-3.0,0.000000,195.300000,0.000000 +1418,-3.0,0.000000,196.200000,0.000000 +1419,-3.0,0.000000,197.100000,0.000000 +1420,-3.0,0.000000,198.000000,0.000000 +1421,-3.0,0.000000,198.900000,0.000000 +1422,-3.0,0.000000,199.800000,0.000000 +1423,-3.0,0.000000,200.700000,0.000000 +1424,-3.0,0.000000,201.600000,0.000000 +1425,-3.0,0.000000,202.500000,0.000000 +1426,-3.0,0.000000,203.400000,0.000000 +1427,-3.0,0.000000,204.300000,0.000000 +1428,-3.0,0.000000,205.200000,0.000000 +1429,-3.0,0.000000,206.100000,0.000000 +1430,-3.0,0.000000,207.000000,0.000000 +1431,-3.0,0.000000,207.900000,0.000000 +1432,-3.0,0.000000,208.800000,0.000000 +1433,-3.0,0.000000,209.700000,0.000000 +1434,-3.0,0.000000,210.600000,0.000000 +1435,-3.0,0.000000,211.500000,0.000000 +1436,-3.0,0.000000,212.400000,0.000000 +1437,-3.0,0.000000,213.300000,0.000000 +1438,-3.0,0.000000,214.200000,0.000000 +1439,-3.0,0.000000,215.100000,0.000000 +1440,-3.0,0.000000,216.000000,0.000000 +1441,-3.0,0.000000,216.900000,0.000000 +1442,-3.0,0.000000,217.800000,0.000000 +1443,-3.0,0.000000,218.700000,0.000000 +1444,-3.0,0.000000,219.600000,0.000000 +1445,-3.0,0.000000,220.500000,0.000000 +1446,-3.0,0.000000,221.400000,0.000000 +1447,-3.0,0.000000,222.300000,0.000000 +1448,-3.0,0.000000,223.200000,0.000000 +1449,-3.0,0.000000,224.100000,0.000000 +1450,-3.0,0.000000,225.000000,0.000000 +1451,-3.0,0.000000,225.900000,0.000000 +1452,-3.0,0.000000,226.800000,0.000000 +1453,-3.0,0.000000,227.700000,0.000000 +1454,-3.0,0.000000,228.600000,0.000000 +1455,-3.0,0.000000,229.500000,0.000000 +1456,-3.0,0.000000,230.400000,0.000000 +1457,-3.0,0.000000,231.300000,0.000000 +1458,-3.0,0.000000,232.200000,0.000000 +1459,-3.0,0.000000,233.100000,0.000000 +1460,-3.0,0.000000,234.000000,0.000000 +1461,-3.0,0.000000,234.900000,0.000000 +1462,-3.0,0.000000,235.800000,0.000000 +1463,-3.0,0.000000,236.700000,0.000000 +1464,-3.0,0.000000,237.600000,0.000000 +1465,-3.0,0.000000,238.500000,0.000000 +1466,-3.0,0.000000,239.400000,0.000000 +1467,-3.0,0.000000,240.300000,0.000000 +1468,-3.0,0.000000,241.200000,0.000000 +1469,-3.0,0.000000,242.100000,0.000000 +1470,-3.0,0.000000,243.000000,0.000000 +1471,-3.0,0.000000,243.900000,0.000000 +1472,-3.0,0.000000,244.800000,0.000000 +1473,-3.0,0.000000,245.700000,0.000000 +1474,-3.0,0.000000,246.600000,0.000000 +1475,-3.0,0.000000,247.500000,0.000000 +1476,-3.0,0.000000,248.400000,0.000000 +1477,-3.0,0.000000,249.300000,0.000000 +1478,-3.0,0.000000,250.200000,0.000000 +1479,-3.0,0.000000,251.100000,0.000000 +1480,-3.0,0.000000,252.000000,0.000000 +1481,-3.0,0.000000,252.900000,0.000000 +1482,-3.0,0.000000,253.800000,0.000000 +1483,-3.0,0.000000,254.700000,0.000000 +1484,-3.0,0.000000,255.600000,0.000000 +1485,-3.0,0.000000,256.500000,0.000000 +1486,-3.0,0.000000,257.400000,0.000000 +1487,-3.0,0.000000,258.300000,0.000000 +1488,-3.0,0.000000,259.200000,0.000000 +1489,-3.0,0.000000,260.100000,0.000000 +1490,-3.0,0.000000,261.000000,0.000000 +1491,-3.0,0.000000,261.900000,0.000000 +1492,-3.0,0.000000,262.800000,0.000000 +1493,-3.0,0.000000,263.700000,0.000000 +1494,-3.0,0.000000,264.600000,0.000000 +1495,-3.0,0.000000,265.500000,0.000000 +1496,-3.0,0.000000,266.400000,0.000000 +1497,-3.0,0.000000,267.300000,0.000000 +1498,-3.0,0.000000,268.200000,0.000000 +1499,-3.0,0.000000,269.100000,0.000000 +1500,-3.0,0.000000,270.000000,0.000000 +1501,-3.0,0.000000,270.900000,0.000000 +1502,-3.0,0.000000,271.800000,0.000000 +1503,-3.0,0.000000,272.700000,0.000000 +1504,-3.0,0.000000,273.600000,0.000000 +1505,-3.0,0.000000,274.500000,0.000000 +1506,-3.0,0.000000,275.400000,0.000000 +1507,-3.0,0.000000,276.300000,0.000000 +1508,-3.0,0.000000,277.200000,0.000000 +1509,-3.0,0.000000,278.100000,0.000000 +1510,-3.0,0.000000,279.000000,0.000000 +1511,-3.0,0.000000,279.900000,0.000000 +1512,-3.0,0.000000,280.800000,0.000000 +1513,-3.0,0.000000,281.700000,0.000000 +1514,-3.0,0.000000,282.600000,0.000000 +1515,-3.0,0.000000,283.500000,0.000000 +1516,-3.0,0.000000,284.400000,0.000000 +1517,-3.0,0.000000,285.300000,0.000000 +1518,-3.0,0.000000,286.200000,0.000000 +1519,-3.0,0.000000,287.100000,0.000000 +1520,-3.0,0.000000,288.000000,0.000000 +1521,-3.0,0.000000,288.900000,0.000000 +1522,-3.0,0.000000,289.800000,0.000000 +1523,-3.0,0.000000,290.700000,0.000000 +1524,-3.0,0.000000,291.600000,0.000000 +1525,-3.0,0.000000,292.500000,0.000000 +1526,-3.0,0.000000,293.400000,0.000000 +1527,-3.0,0.000000,294.300000,0.000000 +1528,-3.0,0.000000,295.200000,0.000000 +1529,-3.0,0.000000,296.100000,0.000000 +1530,-3.0,0.000000,297.000000,0.000000 +1531,-3.0,0.000000,297.900000,0.000000 +1532,-3.0,0.000000,298.800000,0.000000 +1533,-3.0,0.000000,299.700000,0.000000 +1534,-3.0,0.000000,300.600000,0.000000 +1535,-3.0,0.000000,301.500000,0.000000 +1536,-3.0,0.000000,302.400000,0.000000 +1537,-3.0,0.000000,303.300000,0.000000 +1538,-3.0,0.000000,304.200000,0.000000 +1539,-3.0,0.000000,305.100000,0.000000 +1540,-3.0,0.000000,306.000000,0.000000 +1541,-3.0,0.000000,306.900000,0.000000 +1542,-3.0,0.000000,307.800000,0.000000 +1543,-3.0,0.000000,308.700000,0.000000 +1544,-3.0,0.000000,309.600000,0.000000 +1545,-3.0,0.000000,310.500000,0.000000 +1546,-3.0,0.000000,311.400000,0.000000 +1547,-3.0,0.000000,312.300000,0.000000 +1548,-3.0,0.000000,313.200000,0.000000 +1549,-3.0,0.000000,314.100000,0.000000 +1550,-3.0,0.000000,315.000000,0.000000 +1551,-3.0,0.000000,315.900000,0.000000 +1552,-3.0,0.000000,316.800000,0.000000 +1553,-3.0,0.000000,317.700000,0.000000 +1554,-3.0,0.000000,318.600000,0.000000 +1555,-3.0,0.000000,319.500000,0.000000 +1556,-3.0,0.000000,320.400000,0.000000 +1557,-3.0,0.000000,321.300000,0.000000 +1558,-3.0,0.000000,322.200000,0.000000 +1559,-3.0,0.000000,323.100000,0.000000 +1560,-3.0,0.000000,324.000000,0.000000 +1561,-3.0,0.000000,324.900000,0.000000 +1562,-3.0,0.000000,325.800000,0.000000 +1563,-3.0,0.000000,326.700000,0.000000 +1564,-3.0,0.000000,327.600000,0.000000 +1565,-3.0,0.000000,328.500000,0.000000 +1566,-3.0,0.000000,329.400000,0.000000 +1567,-3.0,0.000000,330.300000,0.000000 +1568,-3.0,0.000000,331.200000,0.000000 +1569,-3.0,0.000000,332.100000,0.000000 +1570,-3.0,0.000000,333.000000,0.000000 +1571,-3.0,0.000000,333.900000,0.000000 +1572,-3.0,0.000000,334.800000,0.000000 +1573,-3.0,0.000000,335.700000,0.000000 +1574,-3.0,0.000000,336.600000,0.000000 +1575,-3.0,0.000000,337.500000,0.000000 +1576,-3.0,0.000000,338.400000,0.000000 +1577,-3.0,0.000000,339.300000,0.000000 +1578,-3.0,0.000000,340.200000,0.000000 +1579,-3.0,0.000000,341.100000,0.000000 +1580,-3.0,0.000000,342.000000,0.000000 +1581,-3.0,0.000000,342.900000,0.000000 +1582,-3.0,0.000000,343.800000,0.000000 +1583,-3.0,0.000000,344.700000,0.000000 +1584,-3.0,0.000000,345.600000,0.000000 +1585,-3.0,0.000000,346.500000,0.000000 +1586,-3.0,0.000000,347.400000,0.000000 +1587,-3.0,0.000000,348.300000,0.000000 +1588,-3.0,0.000000,349.200000,0.000000 +1589,-3.0,0.000000,350.100000,0.000000 +1590,-3.0,0.000000,351.000000,0.000000 +1591,-3.0,0.000000,351.900000,0.000000 +1592,-3.0,0.000000,352.800000,0.000000 +1593,-3.0,0.000000,353.700000,0.000000 +1594,-3.0,0.000000,354.600000,0.000000 +1595,-3.0,0.000000,355.500000,0.000000 +1596,-3.0,0.000000,356.400000,0.000000 +1597,-3.0,0.000000,357.300000,0.000000 +1598,-3.0,0.000000,358.200000,0.000000 +1599,-3.0,0.000000,359.100000,0.000000 +1600,-3.0,90.000000,0.000000,-360.000000 +1601,-3.0,90.000000,0.000000,-359.100000 +1602,-3.0,90.000000,0.000000,-358.200000 +1603,-3.0,90.000000,0.000000,-357.300000 +1604,-3.0,90.000000,0.000000,-356.400000 +1605,-3.0,90.000000,0.000000,-355.500000 +1606,-3.0,90.000000,0.000000,-354.600000 +1607,-3.0,90.000000,0.000000,-353.700000 +1608,-3.0,90.000000,0.000000,-352.800000 +1609,-3.0,90.000000,0.000000,-351.900000 +1610,-3.0,90.000000,0.000000,-351.000000 +1611,-3.0,90.000000,0.000000,-350.100000 +1612,-3.0,90.000000,0.000000,-349.200000 +1613,-3.0,90.000000,0.000000,-348.300000 +1614,-3.0,90.000000,0.000000,-347.400000 +1615,-3.0,90.000000,0.000000,-346.500000 +1616,-3.0,90.000000,0.000000,-345.600000 +1617,-3.0,90.000000,0.000000,-344.700000 +1618,-3.0,90.000000,0.000000,-343.800000 +1619,-3.0,90.000000,0.000000,-342.900000 +1620,-3.0,90.000000,0.000000,-342.000000 +1621,-3.0,90.000000,0.000000,-341.100000 +1622,-3.0,90.000000,0.000000,-340.200000 +1623,-3.0,90.000000,0.000000,-339.300000 +1624,-3.0,90.000000,0.000000,-338.400000 +1625,-3.0,90.000000,0.000000,-337.500000 +1626,-3.0,90.000000,0.000000,-336.600000 +1627,-3.0,90.000000,0.000000,-335.700000 +1628,-3.0,90.000000,0.000000,-334.800000 +1629,-3.0,90.000000,0.000000,-333.900000 +1630,-3.0,90.000000,0.000000,-333.000000 +1631,-3.0,90.000000,0.000000,-332.100000 +1632,-3.0,90.000000,0.000000,-331.200000 +1633,-3.0,90.000000,0.000000,-330.300000 +1634,-3.0,90.000000,0.000000,-329.400000 +1635,-3.0,90.000000,0.000000,-328.500000 +1636,-3.0,90.000000,0.000000,-327.600000 +1637,-3.0,90.000000,0.000000,-326.700000 +1638,-3.0,90.000000,0.000000,-325.800000 +1639,-3.0,90.000000,0.000000,-324.900000 +1640,-3.0,90.000000,0.000000,-324.000000 +1641,-3.0,90.000000,0.000000,-323.100000 +1642,-3.0,90.000000,0.000000,-322.200000 +1643,-3.0,90.000000,0.000000,-321.300000 +1644,-3.0,90.000000,0.000000,-320.400000 +1645,-3.0,90.000000,0.000000,-319.500000 +1646,-3.0,90.000000,0.000000,-318.600000 +1647,-3.0,90.000000,0.000000,-317.700000 +1648,-3.0,90.000000,0.000000,-316.800000 +1649,-3.0,90.000000,0.000000,-315.900000 +1650,-3.0,90.000000,0.000000,-315.000000 +1651,-3.0,90.000000,0.000000,-314.100000 +1652,-3.0,90.000000,0.000000,-313.200000 +1653,-3.0,90.000000,0.000000,-312.300000 +1654,-3.0,90.000000,0.000000,-311.400000 +1655,-3.0,90.000000,0.000000,-310.500000 +1656,-3.0,90.000000,0.000000,-309.600000 +1657,-3.0,90.000000,0.000000,-308.700000 +1658,-3.0,90.000000,0.000000,-307.800000 +1659,-3.0,90.000000,0.000000,-306.900000 +1660,-3.0,90.000000,0.000000,-306.000000 +1661,-3.0,90.000000,0.000000,-305.100000 +1662,-3.0,90.000000,0.000000,-304.200000 +1663,-3.0,90.000000,0.000000,-303.300000 +1664,-3.0,90.000000,0.000000,-302.400000 +1665,-3.0,90.000000,0.000000,-301.500000 +1666,-3.0,90.000000,0.000000,-300.600000 +1667,-3.0,90.000000,0.000000,-299.700000 +1668,-3.0,90.000000,0.000000,-298.800000 +1669,-3.0,90.000000,0.000000,-297.900000 +1670,-3.0,90.000000,0.000000,-297.000000 +1671,-3.0,90.000000,0.000000,-296.100000 +1672,-3.0,90.000000,0.000000,-295.200000 +1673,-3.0,90.000000,0.000000,-294.300000 +1674,-3.0,90.000000,0.000000,-293.400000 +1675,-3.0,90.000000,0.000000,-292.500000 +1676,-3.0,90.000000,0.000000,-291.600000 +1677,-3.0,90.000000,0.000000,-290.700000 +1678,-3.0,90.000000,0.000000,-289.800000 +1679,-3.0,90.000000,0.000000,-288.900000 +1680,-3.0,90.000000,0.000000,-288.000000 +1681,-3.0,90.000000,0.000000,-287.100000 +1682,-3.0,90.000000,0.000000,-286.200000 +1683,-3.0,90.000000,0.000000,-285.300000 +1684,-3.0,90.000000,0.000000,-284.400000 +1685,-3.0,90.000000,0.000000,-283.500000 +1686,-3.0,90.000000,0.000000,-282.600000 +1687,-3.0,90.000000,0.000000,-281.700000 +1688,-3.0,90.000000,0.000000,-280.800000 +1689,-3.0,90.000000,0.000000,-279.900000 +1690,-3.0,90.000000,0.000000,-279.000000 +1691,-3.0,90.000000,0.000000,-278.100000 +1692,-3.0,90.000000,0.000000,-277.200000 +1693,-3.0,90.000000,0.000000,-276.300000 +1694,-3.0,90.000000,0.000000,-275.400000 +1695,-3.0,90.000000,0.000000,-274.500000 +1696,-3.0,90.000000,0.000000,-273.600000 +1697,-3.0,90.000000,0.000000,-272.700000 +1698,-3.0,90.000000,0.000000,-271.800000 +1699,-3.0,90.000000,0.000000,-270.900000 +1700,-3.0,90.000000,0.000000,-270.000000 +1701,-3.0,90.000000,0.000000,-269.100000 +1702,-3.0,90.000000,0.000000,-268.200000 +1703,-3.0,90.000000,0.000000,-267.300000 +1704,-3.0,90.000000,0.000000,-266.400000 +1705,-3.0,90.000000,0.000000,-265.500000 +1706,-3.0,90.000000,0.000000,-264.600000 +1707,-3.0,90.000000,0.000000,-263.700000 +1708,-3.0,90.000000,0.000000,-262.800000 +1709,-3.0,90.000000,0.000000,-261.900000 +1710,-3.0,90.000000,0.000000,-261.000000 +1711,-3.0,90.000000,0.000000,-260.100000 +1712,-3.0,90.000000,0.000000,-259.200000 +1713,-3.0,90.000000,0.000000,-258.300000 +1714,-3.0,90.000000,0.000000,-257.400000 +1715,-3.0,90.000000,0.000000,-256.500000 +1716,-3.0,90.000000,0.000000,-255.600000 +1717,-3.0,90.000000,0.000000,-254.700000 +1718,-3.0,90.000000,0.000000,-253.800000 +1719,-3.0,90.000000,0.000000,-252.900000 +1720,-3.0,90.000000,0.000000,-252.000000 +1721,-3.0,90.000000,0.000000,-251.100000 +1722,-3.0,90.000000,0.000000,-250.200000 +1723,-3.0,90.000000,0.000000,-249.300000 +1724,-3.0,90.000000,0.000000,-248.400000 +1725,-3.0,90.000000,0.000000,-247.500000 +1726,-3.0,90.000000,0.000000,-246.600000 +1727,-3.0,90.000000,0.000000,-245.700000 +1728,-3.0,90.000000,0.000000,-244.800000 +1729,-3.0,90.000000,0.000000,-243.900000 +1730,-3.0,90.000000,0.000000,-243.000000 +1731,-3.0,90.000000,0.000000,-242.100000 +1732,-3.0,90.000000,0.000000,-241.200000 +1733,-3.0,90.000000,0.000000,-240.300000 +1734,-3.0,90.000000,0.000000,-239.400000 +1735,-3.0,90.000000,0.000000,-238.500000 +1736,-3.0,90.000000,0.000000,-237.600000 +1737,-3.0,90.000000,0.000000,-236.700000 +1738,-3.0,90.000000,0.000000,-235.800000 +1739,-3.0,90.000000,0.000000,-234.900000 +1740,-3.0,90.000000,0.000000,-234.000000 +1741,-3.0,90.000000,0.000000,-233.100000 +1742,-3.0,90.000000,0.000000,-232.200000 +1743,-3.0,90.000000,0.000000,-231.300000 +1744,-3.0,90.000000,0.000000,-230.400000 +1745,-3.0,90.000000,0.000000,-229.500000 +1746,-3.0,90.000000,0.000000,-228.600000 +1747,-3.0,90.000000,0.000000,-227.700000 +1748,-3.0,90.000000,0.000000,-226.800000 +1749,-3.0,90.000000,0.000000,-225.900000 +1750,-3.0,90.000000,0.000000,-225.000000 +1751,-3.0,90.000000,0.000000,-224.100000 +1752,-3.0,90.000000,0.000000,-223.200000 +1753,-3.0,90.000000,0.000000,-222.300000 +1754,-3.0,90.000000,0.000000,-221.400000 +1755,-3.0,90.000000,0.000000,-220.500000 +1756,-3.0,90.000000,0.000000,-219.600000 +1757,-3.0,90.000000,0.000000,-218.700000 +1758,-3.0,90.000000,0.000000,-217.800000 +1759,-3.0,90.000000,0.000000,-216.900000 +1760,-3.0,90.000000,0.000000,-216.000000 +1761,-3.0,90.000000,0.000000,-215.100000 +1762,-3.0,90.000000,0.000000,-214.200000 +1763,-3.0,90.000000,0.000000,-213.300000 +1764,-3.0,90.000000,0.000000,-212.400000 +1765,-3.0,90.000000,0.000000,-211.500000 +1766,-3.0,90.000000,0.000000,-210.600000 +1767,-3.0,90.000000,0.000000,-209.700000 +1768,-3.0,90.000000,0.000000,-208.800000 +1769,-3.0,90.000000,0.000000,-207.900000 +1770,-3.0,90.000000,0.000000,-207.000000 +1771,-3.0,90.000000,0.000000,-206.100000 +1772,-3.0,90.000000,0.000000,-205.200000 +1773,-3.0,90.000000,0.000000,-204.300000 +1774,-3.0,90.000000,0.000000,-203.400000 +1775,-3.0,90.000000,0.000000,-202.500000 +1776,-3.0,90.000000,0.000000,-201.600000 +1777,-3.0,90.000000,0.000000,-200.700000 +1778,-3.0,90.000000,0.000000,-199.800000 +1779,-3.0,90.000000,0.000000,-198.900000 +1780,-3.0,90.000000,0.000000,-198.000000 +1781,-3.0,90.000000,0.000000,-197.100000 +1782,-3.0,90.000000,0.000000,-196.200000 +1783,-3.0,90.000000,0.000000,-195.300000 +1784,-3.0,90.000000,0.000000,-194.400000 +1785,-3.0,90.000000,0.000000,-193.500000 +1786,-3.0,90.000000,0.000000,-192.600000 +1787,-3.0,90.000000,0.000000,-191.700000 +1788,-3.0,90.000000,0.000000,-190.800000 +1789,-3.0,90.000000,0.000000,-189.900000 +1790,-3.0,90.000000,0.000000,-189.000000 +1791,-3.0,90.000000,0.000000,-188.100000 +1792,-3.0,90.000000,0.000000,-187.200000 +1793,-3.0,90.000000,0.000000,-186.300000 +1794,-3.0,90.000000,0.000000,-185.400000 +1795,-3.0,90.000000,0.000000,-184.500000 +1796,-3.0,90.000000,0.000000,-183.600000 +1797,-3.0,90.000000,0.000000,-182.700000 +1798,-3.0,90.000000,0.000000,-181.800000 +1799,-3.0,90.000000,0.000000,-180.900000 +1800,-3.0,90.000000,0.000000,-180.000000 +1801,-3.0,90.000000,0.000000,-179.100000 +1802,-3.0,90.000000,0.000000,-178.200000 +1803,-3.0,90.000000,0.000000,-177.300000 +1804,-3.0,90.000000,0.000000,-176.400000 +1805,-3.0,90.000000,0.000000,-175.500000 +1806,-3.0,90.000000,0.000000,-174.600000 +1807,-3.0,90.000000,0.000000,-173.700000 +1808,-3.0,90.000000,0.000000,-172.800000 +1809,-3.0,90.000000,0.000000,-171.900000 +1810,-3.0,90.000000,0.000000,-171.000000 +1811,-3.0,90.000000,0.000000,-170.100000 +1812,-3.0,90.000000,0.000000,-169.200000 +1813,-3.0,90.000000,0.000000,-168.300000 +1814,-3.0,90.000000,0.000000,-167.400000 +1815,-3.0,90.000000,0.000000,-166.500000 +1816,-3.0,90.000000,0.000000,-165.600000 +1817,-3.0,90.000000,0.000000,-164.700000 +1818,-3.0,90.000000,0.000000,-163.800000 +1819,-3.0,90.000000,0.000000,-162.900000 +1820,-3.0,90.000000,0.000000,-162.000000 +1821,-3.0,90.000000,0.000000,-161.100000 +1822,-3.0,90.000000,0.000000,-160.200000 +1823,-3.0,90.000000,0.000000,-159.300000 +1824,-3.0,90.000000,0.000000,-158.400000 +1825,-3.0,90.000000,0.000000,-157.500000 +1826,-3.0,90.000000,0.000000,-156.600000 +1827,-3.0,90.000000,0.000000,-155.700000 +1828,-3.0,90.000000,0.000000,-154.800000 +1829,-3.0,90.000000,0.000000,-153.900000 +1830,-3.0,90.000000,0.000000,-153.000000 +1831,-3.0,90.000000,0.000000,-152.100000 +1832,-3.0,90.000000,0.000000,-151.200000 +1833,-3.0,90.000000,0.000000,-150.300000 +1834,-3.0,90.000000,0.000000,-149.400000 +1835,-3.0,90.000000,0.000000,-148.500000 +1836,-3.0,90.000000,0.000000,-147.600000 +1837,-3.0,90.000000,0.000000,-146.700000 +1838,-3.0,90.000000,0.000000,-145.800000 +1839,-3.0,90.000000,0.000000,-144.900000 +1840,-3.0,90.000000,0.000000,-144.000000 +1841,-3.0,90.000000,0.000000,-143.100000 +1842,-3.0,90.000000,0.000000,-142.200000 +1843,-3.0,90.000000,0.000000,-141.300000 +1844,-3.0,90.000000,0.000000,-140.400000 +1845,-3.0,90.000000,0.000000,-139.500000 +1846,-3.0,90.000000,0.000000,-138.600000 +1847,-3.0,90.000000,0.000000,-137.700000 +1848,-3.0,90.000000,0.000000,-136.800000 +1849,-3.0,90.000000,0.000000,-135.900000 +1850,-3.0,90.000000,0.000000,-135.000000 +1851,-3.0,90.000000,0.000000,-134.100000 +1852,-3.0,90.000000,0.000000,-133.200000 +1853,-3.0,90.000000,0.000000,-132.300000 +1854,-3.0,90.000000,0.000000,-131.400000 +1855,-3.0,90.000000,0.000000,-130.500000 +1856,-3.0,90.000000,0.000000,-129.600000 +1857,-3.0,90.000000,0.000000,-128.700000 +1858,-3.0,90.000000,0.000000,-127.800000 +1859,-3.0,90.000000,0.000000,-126.900000 +1860,-3.0,90.000000,0.000000,-126.000000 +1861,-3.0,90.000000,0.000000,-125.100000 +1862,-3.0,90.000000,0.000000,-124.200000 +1863,-3.0,90.000000,0.000000,-123.300000 +1864,-3.0,90.000000,0.000000,-122.400000 +1865,-3.0,90.000000,0.000000,-121.500000 +1866,-3.0,90.000000,0.000000,-120.600000 +1867,-3.0,90.000000,0.000000,-119.700000 +1868,-3.0,90.000000,0.000000,-118.800000 +1869,-3.0,90.000000,0.000000,-117.900000 +1870,-3.0,90.000000,0.000000,-117.000000 +1871,-3.0,90.000000,0.000000,-116.100000 +1872,-3.0,90.000000,0.000000,-115.200000 +1873,-3.0,90.000000,0.000000,-114.300000 +1874,-3.0,90.000000,0.000000,-113.400000 +1875,-3.0,90.000000,0.000000,-112.500000 +1876,-3.0,90.000000,0.000000,-111.600000 +1877,-3.0,90.000000,0.000000,-110.700000 +1878,-3.0,90.000000,0.000000,-109.800000 +1879,-3.0,90.000000,0.000000,-108.900000 +1880,-3.0,90.000000,0.000000,-108.000000 +1881,-3.0,90.000000,0.000000,-107.100000 +1882,-3.0,90.000000,0.000000,-106.200000 +1883,-3.0,90.000000,0.000000,-105.300000 +1884,-3.0,90.000000,0.000000,-104.400000 +1885,-3.0,90.000000,0.000000,-103.500000 +1886,-3.0,90.000000,0.000000,-102.600000 +1887,-3.0,90.000000,0.000000,-101.700000 +1888,-3.0,90.000000,0.000000,-100.800000 +1889,-3.0,90.000000,0.000000,-99.900000 +1890,-3.0,90.000000,0.000000,-99.000000 +1891,-3.0,90.000000,0.000000,-98.100000 +1892,-3.0,90.000000,0.000000,-97.200000 +1893,-3.0,90.000000,0.000000,-96.300000 +1894,-3.0,90.000000,0.000000,-95.400000 +1895,-3.0,90.000000,0.000000,-94.500000 +1896,-3.0,90.000000,0.000000,-93.600000 +1897,-3.0,90.000000,0.000000,-92.700000 +1898,-3.0,90.000000,0.000000,-91.800000 +1899,-3.0,90.000000,0.000000,-90.900000 +1900,-3.0,90.000000,0.000000,-90.000000 +1901,-3.0,90.000000,0.000000,-89.100000 +1902,-3.0,90.000000,0.000000,-88.200000 +1903,-3.0,90.000000,0.000000,-87.300000 +1904,-3.0,90.000000,0.000000,-86.400000 +1905,-3.0,90.000000,0.000000,-85.500000 +1906,-3.0,90.000000,0.000000,-84.600000 +1907,-3.0,90.000000,0.000000,-83.700000 +1908,-3.0,90.000000,0.000000,-82.800000 +1909,-3.0,90.000000,0.000000,-81.900000 +1910,-3.0,90.000000,0.000000,-81.000000 +1911,-3.0,90.000000,0.000000,-80.100000 +1912,-3.0,90.000000,0.000000,-79.200000 +1913,-3.0,90.000000,0.000000,-78.300000 +1914,-3.0,90.000000,0.000000,-77.400000 +1915,-3.0,90.000000,0.000000,-76.500000 +1916,-3.0,90.000000,0.000000,-75.600000 +1917,-3.0,90.000000,0.000000,-74.700000 +1918,-3.0,90.000000,0.000000,-73.800000 +1919,-3.0,90.000000,0.000000,-72.900000 +1920,-3.0,90.000000,0.000000,-72.000000 +1921,-3.0,90.000000,0.000000,-71.100000 +1922,-3.0,90.000000,0.000000,-70.200000 +1923,-3.0,90.000000,0.000000,-69.300000 +1924,-3.0,90.000000,0.000000,-68.400000 +1925,-3.0,90.000000,0.000000,-67.500000 +1926,-3.0,90.000000,0.000000,-66.600000 +1927,-3.0,90.000000,0.000000,-65.700000 +1928,-3.0,90.000000,0.000000,-64.800000 +1929,-3.0,90.000000,0.000000,-63.900000 +1930,-3.0,90.000000,0.000000,-63.000000 +1931,-3.0,90.000000,0.000000,-62.100000 +1932,-3.0,90.000000,0.000000,-61.200000 +1933,-3.0,90.000000,0.000000,-60.300000 +1934,-3.0,90.000000,0.000000,-59.400000 +1935,-3.0,90.000000,0.000000,-58.500000 +1936,-3.0,90.000000,0.000000,-57.600000 +1937,-3.0,90.000000,0.000000,-56.700000 +1938,-3.0,90.000000,0.000000,-55.800000 +1939,-3.0,90.000000,0.000000,-54.900000 +1940,-3.0,90.000000,0.000000,-54.000000 +1941,-3.0,90.000000,0.000000,-53.100000 +1942,-3.0,90.000000,0.000000,-52.200000 +1943,-3.0,90.000000,0.000000,-51.300000 +1944,-3.0,90.000000,0.000000,-50.400000 +1945,-3.0,90.000000,0.000000,-49.500000 +1946,-3.0,90.000000,0.000000,-48.600000 +1947,-3.0,90.000000,0.000000,-47.700000 +1948,-3.0,90.000000,0.000000,-46.800000 +1949,-3.0,90.000000,0.000000,-45.900000 +1950,-3.0,90.000000,0.000000,-45.000000 +1951,-3.0,90.000000,0.000000,-44.100000 +1952,-3.0,90.000000,0.000000,-43.200000 +1953,-3.0,90.000000,0.000000,-42.300000 +1954,-3.0,90.000000,0.000000,-41.400000 +1955,-3.0,90.000000,0.000000,-40.500000 +1956,-3.0,90.000000,0.000000,-39.600000 +1957,-3.0,90.000000,0.000000,-38.700000 +1958,-3.0,90.000000,0.000000,-37.800000 +1959,-3.0,90.000000,0.000000,-36.900000 +1960,-3.0,90.000000,0.000000,-36.000000 +1961,-3.0,90.000000,0.000000,-35.100000 +1962,-3.0,90.000000,0.000000,-34.200000 +1963,-3.0,90.000000,0.000000,-33.300000 +1964,-3.0,90.000000,0.000000,-32.400000 +1965,-3.0,90.000000,0.000000,-31.500000 +1966,-3.0,90.000000,0.000000,-30.600000 +1967,-3.0,90.000000,0.000000,-29.700000 +1968,-3.0,90.000000,0.000000,-28.800000 +1969,-3.0,90.000000,0.000000,-27.900000 +1970,-3.0,90.000000,0.000000,-27.000000 +1971,-3.0,90.000000,0.000000,-26.100000 +1972,-3.0,90.000000,0.000000,-25.200000 +1973,-3.0,90.000000,0.000000,-24.300000 +1974,-3.0,90.000000,0.000000,-23.400000 +1975,-3.0,90.000000,0.000000,-22.500000 +1976,-3.0,90.000000,0.000000,-21.600000 +1977,-3.0,90.000000,0.000000,-20.700000 +1978,-3.0,90.000000,0.000000,-19.800000 +1979,-3.0,90.000000,0.000000,-18.900000 +1980,-3.0,90.000000,0.000000,-18.000000 +1981,-3.0,90.000000,0.000000,-17.100000 +1982,-3.0,90.000000,0.000000,-16.200000 +1983,-3.0,90.000000,0.000000,-15.300000 +1984,-3.0,90.000000,0.000000,-14.400000 +1985,-3.0,90.000000,0.000000,-13.500000 +1986,-3.0,90.000000,0.000000,-12.600000 +1987,-3.0,90.000000,0.000000,-11.700000 +1988,-3.0,90.000000,0.000000,-10.800000 +1989,-3.0,90.000000,0.000000,-9.900000 +1990,-3.0,90.000000,0.000000,-9.000000 +1991,-3.0,90.000000,0.000000,-8.100000 +1992,-3.0,90.000000,0.000000,-7.200000 +1993,-3.0,90.000000,0.000000,-6.300000 +1994,-3.0,90.000000,0.000000,-5.400000 +1995,-3.0,90.000000,0.000000,-4.500000 +1996,-3.0,90.000000,0.000000,-3.600000 +1997,-3.0,90.000000,0.000000,-2.700000 +1998,-3.0,90.000000,0.000000,-1.800000 +1999,-3.0,90.000000,0.000000,-0.900000 +2000,-3.0,90.000000,0.000000,0.000000 +2001,-3.0,90.000000,0.000000,0.900000 +2002,-3.0,90.000000,0.000000,1.800000 +2003,-3.0,90.000000,0.000000,2.700000 +2004,-3.0,90.000000,0.000000,3.600000 +2005,-3.0,90.000000,0.000000,4.500000 +2006,-3.0,90.000000,0.000000,5.400000 +2007,-3.0,90.000000,0.000000,6.300000 +2008,-3.0,90.000000,0.000000,7.200000 +2009,-3.0,90.000000,0.000000,8.100000 +2010,-3.0,90.000000,0.000000,9.000000 +2011,-3.0,90.000000,0.000000,9.900000 +2012,-3.0,90.000000,0.000000,10.800000 +2013,-3.0,90.000000,0.000000,11.700000 +2014,-3.0,90.000000,0.000000,12.600000 +2015,-3.0,90.000000,0.000000,13.500000 +2016,-3.0,90.000000,0.000000,14.400000 +2017,-3.0,90.000000,0.000000,15.300000 +2018,-3.0,90.000000,0.000000,16.200000 +2019,-3.0,90.000000,0.000000,17.100000 +2020,-3.0,90.000000,0.000000,18.000000 +2021,-3.0,90.000000,0.000000,18.900000 +2022,-3.0,90.000000,0.000000,19.800000 +2023,-3.0,90.000000,0.000000,20.700000 +2024,-3.0,90.000000,0.000000,21.600000 +2025,-3.0,90.000000,0.000000,22.500000 +2026,-3.0,90.000000,0.000000,23.400000 +2027,-3.0,90.000000,0.000000,24.300000 +2028,-3.0,90.000000,0.000000,25.200000 +2029,-3.0,90.000000,0.000000,26.100000 +2030,-3.0,90.000000,0.000000,27.000000 +2031,-3.0,90.000000,0.000000,27.900000 +2032,-3.0,90.000000,0.000000,28.800000 +2033,-3.0,90.000000,0.000000,29.700000 +2034,-3.0,90.000000,0.000000,30.600000 +2035,-3.0,90.000000,0.000000,31.500000 +2036,-3.0,90.000000,0.000000,32.400000 +2037,-3.0,90.000000,0.000000,33.300000 +2038,-3.0,90.000000,0.000000,34.200000 +2039,-3.0,90.000000,0.000000,35.100000 +2040,-3.0,90.000000,0.000000,36.000000 +2041,-3.0,90.000000,0.000000,36.900000 +2042,-3.0,90.000000,0.000000,37.800000 +2043,-3.0,90.000000,0.000000,38.700000 +2044,-3.0,90.000000,0.000000,39.600000 +2045,-3.0,90.000000,0.000000,40.500000 +2046,-3.0,90.000000,0.000000,41.400000 +2047,-3.0,90.000000,0.000000,42.300000 +2048,-3.0,90.000000,0.000000,43.200000 +2049,-3.0,90.000000,0.000000,44.100000 +2050,-3.0,90.000000,0.000000,45.000000 +2051,-3.0,90.000000,0.000000,45.900000 +2052,-3.0,90.000000,0.000000,46.800000 +2053,-3.0,90.000000,0.000000,47.700000 +2054,-3.0,90.000000,0.000000,48.600000 +2055,-3.0,90.000000,0.000000,49.500000 +2056,-3.0,90.000000,0.000000,50.400000 +2057,-3.0,90.000000,0.000000,51.300000 +2058,-3.0,90.000000,0.000000,52.200000 +2059,-3.0,90.000000,0.000000,53.100000 +2060,-3.0,90.000000,0.000000,54.000000 +2061,-3.0,90.000000,0.000000,54.900000 +2062,-3.0,90.000000,0.000000,55.800000 +2063,-3.0,90.000000,0.000000,56.700000 +2064,-3.0,90.000000,0.000000,57.600000 +2065,-3.0,90.000000,0.000000,58.500000 +2066,-3.0,90.000000,0.000000,59.400000 +2067,-3.0,90.000000,0.000000,60.300000 +2068,-3.0,90.000000,0.000000,61.200000 +2069,-3.0,90.000000,0.000000,62.100000 +2070,-3.0,90.000000,0.000000,63.000000 +2071,-3.0,90.000000,0.000000,63.900000 +2072,-3.0,90.000000,0.000000,64.800000 +2073,-3.0,90.000000,0.000000,65.700000 +2074,-3.0,90.000000,0.000000,66.600000 +2075,-3.0,90.000000,0.000000,67.500000 +2076,-3.0,90.000000,0.000000,68.400000 +2077,-3.0,90.000000,0.000000,69.300000 +2078,-3.0,90.000000,0.000000,70.200000 +2079,-3.0,90.000000,0.000000,71.100000 +2080,-3.0,90.000000,0.000000,72.000000 +2081,-3.0,90.000000,0.000000,72.900000 +2082,-3.0,90.000000,0.000000,73.800000 +2083,-3.0,90.000000,0.000000,74.700000 +2084,-3.0,90.000000,0.000000,75.600000 +2085,-3.0,90.000000,0.000000,76.500000 +2086,-3.0,90.000000,0.000000,77.400000 +2087,-3.0,90.000000,0.000000,78.300000 +2088,-3.0,90.000000,0.000000,79.200000 +2089,-3.0,90.000000,0.000000,80.100000 +2090,-3.0,90.000000,0.000000,81.000000 +2091,-3.0,90.000000,0.000000,81.900000 +2092,-3.0,90.000000,0.000000,82.800000 +2093,-3.0,90.000000,0.000000,83.700000 +2094,-3.0,90.000000,0.000000,84.600000 +2095,-3.0,90.000000,0.000000,85.500000 +2096,-3.0,90.000000,0.000000,86.400000 +2097,-3.0,90.000000,0.000000,87.300000 +2098,-3.0,90.000000,0.000000,88.200000 +2099,-3.0,90.000000,0.000000,89.100000 +2100,-3.0,90.000000,0.000000,90.000000 +2101,-3.0,90.000000,0.000000,90.900000 +2102,-3.0,90.000000,0.000000,91.800000 +2103,-3.0,90.000000,0.000000,92.700000 +2104,-3.0,90.000000,0.000000,93.600000 +2105,-3.0,90.000000,0.000000,94.500000 +2106,-3.0,90.000000,0.000000,95.400000 +2107,-3.0,90.000000,0.000000,96.300000 +2108,-3.0,90.000000,0.000000,97.200000 +2109,-3.0,90.000000,0.000000,98.100000 +2110,-3.0,90.000000,0.000000,99.000000 +2111,-3.0,90.000000,0.000000,99.900000 +2112,-3.0,90.000000,0.000000,100.800000 +2113,-3.0,90.000000,0.000000,101.700000 +2114,-3.0,90.000000,0.000000,102.600000 +2115,-3.0,90.000000,0.000000,103.500000 +2116,-3.0,90.000000,0.000000,104.400000 +2117,-3.0,90.000000,0.000000,105.300000 +2118,-3.0,90.000000,0.000000,106.200000 +2119,-3.0,90.000000,0.000000,107.100000 +2120,-3.0,90.000000,0.000000,108.000000 +2121,-3.0,90.000000,0.000000,108.900000 +2122,-3.0,90.000000,0.000000,109.800000 +2123,-3.0,90.000000,0.000000,110.700000 +2124,-3.0,90.000000,0.000000,111.600000 +2125,-3.0,90.000000,0.000000,112.500000 +2126,-3.0,90.000000,0.000000,113.400000 +2127,-3.0,90.000000,0.000000,114.300000 +2128,-3.0,90.000000,0.000000,115.200000 +2129,-3.0,90.000000,0.000000,116.100000 +2130,-3.0,90.000000,0.000000,117.000000 +2131,-3.0,90.000000,0.000000,117.900000 +2132,-3.0,90.000000,0.000000,118.800000 +2133,-3.0,90.000000,0.000000,119.700000 +2134,-3.0,90.000000,0.000000,120.600000 +2135,-3.0,90.000000,0.000000,121.500000 +2136,-3.0,90.000000,0.000000,122.400000 +2137,-3.0,90.000000,0.000000,123.300000 +2138,-3.0,90.000000,0.000000,124.200000 +2139,-3.0,90.000000,0.000000,125.100000 +2140,-3.0,90.000000,0.000000,126.000000 +2141,-3.0,90.000000,0.000000,126.900000 +2142,-3.0,90.000000,0.000000,127.800000 +2143,-3.0,90.000000,0.000000,128.700000 +2144,-3.0,90.000000,0.000000,129.600000 +2145,-3.0,90.000000,0.000000,130.500000 +2146,-3.0,90.000000,0.000000,131.400000 +2147,-3.0,90.000000,0.000000,132.300000 +2148,-3.0,90.000000,0.000000,133.200000 +2149,-3.0,90.000000,0.000000,134.100000 +2150,-3.0,90.000000,0.000000,135.000000 +2151,-3.0,90.000000,0.000000,135.900000 +2152,-3.0,90.000000,0.000000,136.800000 +2153,-3.0,90.000000,0.000000,137.700000 +2154,-3.0,90.000000,0.000000,138.600000 +2155,-3.0,90.000000,0.000000,139.500000 +2156,-3.0,90.000000,0.000000,140.400000 +2157,-3.0,90.000000,0.000000,141.300000 +2158,-3.0,90.000000,0.000000,142.200000 +2159,-3.0,90.000000,0.000000,143.100000 +2160,-3.0,90.000000,0.000000,144.000000 +2161,-3.0,90.000000,0.000000,144.900000 +2162,-3.0,90.000000,0.000000,145.800000 +2163,-3.0,90.000000,0.000000,146.700000 +2164,-3.0,90.000000,0.000000,147.600000 +2165,-3.0,90.000000,0.000000,148.500000 +2166,-3.0,90.000000,0.000000,149.400000 +2167,-3.0,90.000000,0.000000,150.300000 +2168,-3.0,90.000000,0.000000,151.200000 +2169,-3.0,90.000000,0.000000,152.100000 +2170,-3.0,90.000000,0.000000,153.000000 +2171,-3.0,90.000000,0.000000,153.900000 +2172,-3.0,90.000000,0.000000,154.800000 +2173,-3.0,90.000000,0.000000,155.700000 +2174,-3.0,90.000000,0.000000,156.600000 +2175,-3.0,90.000000,0.000000,157.500000 +2176,-3.0,90.000000,0.000000,158.400000 +2177,-3.0,90.000000,0.000000,159.300000 +2178,-3.0,90.000000,0.000000,160.200000 +2179,-3.0,90.000000,0.000000,161.100000 +2180,-3.0,90.000000,0.000000,162.000000 +2181,-3.0,90.000000,0.000000,162.900000 +2182,-3.0,90.000000,0.000000,163.800000 +2183,-3.0,90.000000,0.000000,164.700000 +2184,-3.0,90.000000,0.000000,165.600000 +2185,-3.0,90.000000,0.000000,166.500000 +2186,-3.0,90.000000,0.000000,167.400000 +2187,-3.0,90.000000,0.000000,168.300000 +2188,-3.0,90.000000,0.000000,169.200000 +2189,-3.0,90.000000,0.000000,170.100000 +2190,-3.0,90.000000,0.000000,171.000000 +2191,-3.0,90.000000,0.000000,171.900000 +2192,-3.0,90.000000,0.000000,172.800000 +2193,-3.0,90.000000,0.000000,173.700000 +2194,-3.0,90.000000,0.000000,174.600000 +2195,-3.0,90.000000,0.000000,175.500000 +2196,-3.0,90.000000,0.000000,176.400000 +2197,-3.0,90.000000,0.000000,177.300000 +2198,-3.0,90.000000,0.000000,178.200000 +2199,-3.0,90.000000,0.000000,179.100000 +2200,-3.0,90.000000,0.000000,180.000000 +2201,-3.0,90.000000,0.000000,180.900000 +2202,-3.0,90.000000,0.000000,181.800000 +2203,-3.0,90.000000,0.000000,182.700000 +2204,-3.0,90.000000,0.000000,183.600000 +2205,-3.0,90.000000,0.000000,184.500000 +2206,-3.0,90.000000,0.000000,185.400000 +2207,-3.0,90.000000,0.000000,186.300000 +2208,-3.0,90.000000,0.000000,187.200000 +2209,-3.0,90.000000,0.000000,188.100000 +2210,-3.0,90.000000,0.000000,189.000000 +2211,-3.0,90.000000,0.000000,189.900000 +2212,-3.0,90.000000,0.000000,190.800000 +2213,-3.0,90.000000,0.000000,191.700000 +2214,-3.0,90.000000,0.000000,192.600000 +2215,-3.0,90.000000,0.000000,193.500000 +2216,-3.0,90.000000,0.000000,194.400000 +2217,-3.0,90.000000,0.000000,195.300000 +2218,-3.0,90.000000,0.000000,196.200000 +2219,-3.0,90.000000,0.000000,197.100000 +2220,-3.0,90.000000,0.000000,198.000000 +2221,-3.0,90.000000,0.000000,198.900000 +2222,-3.0,90.000000,0.000000,199.800000 +2223,-3.0,90.000000,0.000000,200.700000 +2224,-3.0,90.000000,0.000000,201.600000 +2225,-3.0,90.000000,0.000000,202.500000 +2226,-3.0,90.000000,0.000000,203.400000 +2227,-3.0,90.000000,0.000000,204.300000 +2228,-3.0,90.000000,0.000000,205.200000 +2229,-3.0,90.000000,0.000000,206.100000 +2230,-3.0,90.000000,0.000000,207.000000 +2231,-3.0,90.000000,0.000000,207.900000 +2232,-3.0,90.000000,0.000000,208.800000 +2233,-3.0,90.000000,0.000000,209.700000 +2234,-3.0,90.000000,0.000000,210.600000 +2235,-3.0,90.000000,0.000000,211.500000 +2236,-3.0,90.000000,0.000000,212.400000 +2237,-3.0,90.000000,0.000000,213.300000 +2238,-3.0,90.000000,0.000000,214.200000 +2239,-3.0,90.000000,0.000000,215.100000 +2240,-3.0,90.000000,0.000000,216.000000 +2241,-3.0,90.000000,0.000000,216.900000 +2242,-3.0,90.000000,0.000000,217.800000 +2243,-3.0,90.000000,0.000000,218.700000 +2244,-3.0,90.000000,0.000000,219.600000 +2245,-3.0,90.000000,0.000000,220.500000 +2246,-3.0,90.000000,0.000000,221.400000 +2247,-3.0,90.000000,0.000000,222.300000 +2248,-3.0,90.000000,0.000000,223.200000 +2249,-3.0,90.000000,0.000000,224.100000 +2250,-3.0,90.000000,0.000000,225.000000 +2251,-3.0,90.000000,0.000000,225.900000 +2252,-3.0,90.000000,0.000000,226.800000 +2253,-3.0,90.000000,0.000000,227.700000 +2254,-3.0,90.000000,0.000000,228.600000 +2255,-3.0,90.000000,0.000000,229.500000 +2256,-3.0,90.000000,0.000000,230.400000 +2257,-3.0,90.000000,0.000000,231.300000 +2258,-3.0,90.000000,0.000000,232.200000 +2259,-3.0,90.000000,0.000000,233.100000 +2260,-3.0,90.000000,0.000000,234.000000 +2261,-3.0,90.000000,0.000000,234.900000 +2262,-3.0,90.000000,0.000000,235.800000 +2263,-3.0,90.000000,0.000000,236.700000 +2264,-3.0,90.000000,0.000000,237.600000 +2265,-3.0,90.000000,0.000000,238.500000 +2266,-3.0,90.000000,0.000000,239.400000 +2267,-3.0,90.000000,0.000000,240.300000 +2268,-3.0,90.000000,0.000000,241.200000 +2269,-3.0,90.000000,0.000000,242.100000 +2270,-3.0,90.000000,0.000000,243.000000 +2271,-3.0,90.000000,0.000000,243.900000 +2272,-3.0,90.000000,0.000000,244.800000 +2273,-3.0,90.000000,0.000000,245.700000 +2274,-3.0,90.000000,0.000000,246.600000 +2275,-3.0,90.000000,0.000000,247.500000 +2276,-3.0,90.000000,0.000000,248.400000 +2277,-3.0,90.000000,0.000000,249.300000 +2278,-3.0,90.000000,0.000000,250.200000 +2279,-3.0,90.000000,0.000000,251.100000 +2280,-3.0,90.000000,0.000000,252.000000 +2281,-3.0,90.000000,0.000000,252.900000 +2282,-3.0,90.000000,0.000000,253.800000 +2283,-3.0,90.000000,0.000000,254.700000 +2284,-3.0,90.000000,0.000000,255.600000 +2285,-3.0,90.000000,0.000000,256.500000 +2286,-3.0,90.000000,0.000000,257.400000 +2287,-3.0,90.000000,0.000000,258.300000 +2288,-3.0,90.000000,0.000000,259.200000 +2289,-3.0,90.000000,0.000000,260.100000 +2290,-3.0,90.000000,0.000000,261.000000 +2291,-3.0,90.000000,0.000000,261.900000 +2292,-3.0,90.000000,0.000000,262.800000 +2293,-3.0,90.000000,0.000000,263.700000 +2294,-3.0,90.000000,0.000000,264.600000 +2295,-3.0,90.000000,0.000000,265.500000 +2296,-3.0,90.000000,0.000000,266.400000 +2297,-3.0,90.000000,0.000000,267.300000 +2298,-3.0,90.000000,0.000000,268.200000 +2299,-3.0,90.000000,0.000000,269.100000 +2300,-3.0,90.000000,0.000000,270.000000 +2301,-3.0,90.000000,0.000000,270.900000 +2302,-3.0,90.000000,0.000000,271.800000 +2303,-3.0,90.000000,0.000000,272.700000 +2304,-3.0,90.000000,0.000000,273.600000 +2305,-3.0,90.000000,0.000000,274.500000 +2306,-3.0,90.000000,0.000000,275.400000 +2307,-3.0,90.000000,0.000000,276.300000 +2308,-3.0,90.000000,0.000000,277.200000 +2309,-3.0,90.000000,0.000000,278.100000 +2310,-3.0,90.000000,0.000000,279.000000 +2311,-3.0,90.000000,0.000000,279.900000 +2312,-3.0,90.000000,0.000000,280.800000 +2313,-3.0,90.000000,0.000000,281.700000 +2314,-3.0,90.000000,0.000000,282.600000 +2315,-3.0,90.000000,0.000000,283.500000 +2316,-3.0,90.000000,0.000000,284.400000 +2317,-3.0,90.000000,0.000000,285.300000 +2318,-3.0,90.000000,0.000000,286.200000 +2319,-3.0,90.000000,0.000000,287.100000 +2320,-3.0,90.000000,0.000000,288.000000 +2321,-3.0,90.000000,0.000000,288.900000 +2322,-3.0,90.000000,0.000000,289.800000 +2323,-3.0,90.000000,0.000000,290.700000 +2324,-3.0,90.000000,0.000000,291.600000 +2325,-3.0,90.000000,0.000000,292.500000 +2326,-3.0,90.000000,0.000000,293.400000 +2327,-3.0,90.000000,0.000000,294.300000 +2328,-3.0,90.000000,0.000000,295.200000 +2329,-3.0,90.000000,0.000000,296.100000 +2330,-3.0,90.000000,0.000000,297.000000 +2331,-3.0,90.000000,0.000000,297.900000 +2332,-3.0,90.000000,0.000000,298.800000 +2333,-3.0,90.000000,0.000000,299.700000 +2334,-3.0,90.000000,0.000000,300.600000 +2335,-3.0,90.000000,0.000000,301.500000 +2336,-3.0,90.000000,0.000000,302.400000 +2337,-3.0,90.000000,0.000000,303.300000 +2338,-3.0,90.000000,0.000000,304.200000 +2339,-3.0,90.000000,0.000000,305.100000 +2340,-3.0,90.000000,0.000000,306.000000 +2341,-3.0,90.000000,0.000000,306.900000 +2342,-3.0,90.000000,0.000000,307.800000 +2343,-3.0,90.000000,0.000000,308.700000 +2344,-3.0,90.000000,0.000000,309.600000 +2345,-3.0,90.000000,0.000000,310.500000 +2346,-3.0,90.000000,0.000000,311.400000 +2347,-3.0,90.000000,0.000000,312.300000 +2348,-3.0,90.000000,0.000000,313.200000 +2349,-3.0,90.000000,0.000000,314.100000 +2350,-3.0,90.000000,0.000000,315.000000 +2351,-3.0,90.000000,0.000000,315.900000 +2352,-3.0,90.000000,0.000000,316.800000 +2353,-3.0,90.000000,0.000000,317.700000 +2354,-3.0,90.000000,0.000000,318.600000 +2355,-3.0,90.000000,0.000000,319.500000 +2356,-3.0,90.000000,0.000000,320.400000 +2357,-3.0,90.000000,0.000000,321.300000 +2358,-3.0,90.000000,0.000000,322.200000 +2359,-3.0,90.000000,0.000000,323.100000 +2360,-3.0,90.000000,0.000000,324.000000 +2361,-3.0,90.000000,0.000000,324.900000 +2362,-3.0,90.000000,0.000000,325.800000 +2363,-3.0,90.000000,0.000000,326.700000 +2364,-3.0,90.000000,0.000000,327.600000 +2365,-3.0,90.000000,0.000000,328.500000 +2366,-3.0,90.000000,0.000000,329.400000 +2367,-3.0,90.000000,0.000000,330.300000 +2368,-3.0,90.000000,0.000000,331.200000 +2369,-3.0,90.000000,0.000000,332.100000 +2370,-3.0,90.000000,0.000000,333.000000 +2371,-3.0,90.000000,0.000000,333.900000 +2372,-3.0,90.000000,0.000000,334.800000 +2373,-3.0,90.000000,0.000000,335.700000 +2374,-3.0,90.000000,0.000000,336.600000 +2375,-3.0,90.000000,0.000000,337.500000 +2376,-3.0,90.000000,0.000000,338.400000 +2377,-3.0,90.000000,0.000000,339.300000 +2378,-3.0,90.000000,0.000000,340.200000 +2379,-3.0,90.000000,0.000000,341.100000 +2380,-3.0,90.000000,0.000000,342.000000 +2381,-3.0,90.000000,0.000000,342.900000 +2382,-3.0,90.000000,0.000000,343.800000 +2383,-3.0,90.000000,0.000000,344.700000 +2384,-3.0,90.000000,0.000000,345.600000 +2385,-3.0,90.000000,0.000000,346.500000 +2386,-3.0,90.000000,0.000000,347.400000 +2387,-3.0,90.000000,0.000000,348.300000 +2388,-3.0,90.000000,0.000000,349.200000 +2389,-3.0,90.000000,0.000000,350.100000 +2390,-3.0,90.000000,0.000000,351.000000 +2391,-3.0,90.000000,0.000000,351.900000 +2392,-3.0,90.000000,0.000000,352.800000 +2393,-3.0,90.000000,0.000000,353.700000 +2394,-3.0,90.000000,0.000000,354.600000 +2395,-3.0,90.000000,0.000000,355.500000 +2396,-3.0,90.000000,0.000000,356.400000 +2397,-3.0,90.000000,0.000000,357.300000 +2398,-3.0,90.000000,0.000000,358.200000 +2399,-3.0,90.000000,0.000000,359.100000 + diff --git a/scripts/trajectories/rotate_yaw_pitch_roll2.csv b/scripts/trajectories/rotate_yaw_pitch_roll2.csv new file mode 100644 index 0000000000..bd2921148b --- /dev/null +++ b/scripts/trajectories/rotate_yaw_pitch_roll2.csv @@ -0,0 +1,2401 @@ +0,-3.0,90.00000,0.000000,0.000000 +1,-3.0,90.00000,0.000000,0.000000 +2,-3.0,90.00000,0.000000,0.000000 +3,-3.0,90.00000,0.000000,0.000000 +4,-3.0,90.00000,0.000000,0.000000 +5,-3.0,90.00000,0.000000,0.000000 +6,-3.0,90.00000,0.000000,0.000000 +7,-3.0,90.00000,0.000000,0.000000 +8,-3.0,90.00000,0.000000,0.000000 +9,-3.0,90.00000,0.000000,0.000000 +10,-3.0,90.00000,0.000000,0.000000 +11,-3.0,90.00000,0.000000,0.000000 +12,-3.0,90.00000,0.000000,0.000000 +13,-3.0,90.00000,0.000000,0.000000 +14,-3.0,90.00000,0.000000,0.000000 +15,-3.0,90.00000,0.000000,0.000000 +16,-3.0,90.00000,0.000000,0.000000 +17,-3.0,90.00000,0.000000,0.000000 +18,-3.0,90.00000,0.000000,0.000000 +19,-3.0,90.00000,0.000000,0.000000 +20,-3.0,90.00000,0.000000,0.000000 +21,-3.0,90.00000,0.000000,0.000000 +22,-3.0,90.00000,0.000000,0.000000 +23,-3.0,90.00000,0.000000,0.000000 +24,-3.0,90.00000,0.000000,0.000000 +25,-3.0,90.00000,0.000000,0.000000 +26,-3.0,90.00000,0.000000,0.000000 +27,-3.0,90.00000,0.000000,0.000000 +28,-3.0,90.00000,0.000000,0.000000 +29,-3.0,90.00000,0.000000,0.000000 +30,-3.0,90.00000,0.000000,0.000000 +31,-3.0,90.00000,0.000000,0.000000 +32,-3.0,90.00000,0.000000,0.000000 +33,-3.0,90.00000,0.000000,0.000000 +34,-3.0,90.00000,0.000000,0.000000 +35,-3.0,90.00000,0.000000,0.000000 +36,-3.0,90.00000,0.000000,0.000000 +37,-3.0,90.00000,0.000000,0.000000 +38,-3.0,90.00000,0.000000,0.000000 +39,-3.0,90.00000,0.000000,0.000000 +40,-3.0,90.00000,0.000000,0.000000 +41,-3.0,90.00000,0.000000,0.000000 +42,-3.0,90.00000,0.000000,0.000000 +43,-3.0,90.00000,0.000000,0.000000 +44,-3.0,90.00000,0.000000,0.000000 +45,-3.0,90.00000,0.000000,0.000000 +46,-3.0,90.00000,0.000000,0.000000 +47,-3.0,90.00000,0.000000,0.000000 +48,-3.0,90.00000,0.000000,0.000000 +49,-3.0,90.00000,0.000000,0.000000 +50,-3.0,90.00000,0.000000,0.000000 +51,-3.0,90.00000,0.000000,0.000000 +52,-3.0,90.00000,0.000000,0.000000 +53,-3.0,90.00000,0.000000,0.000000 +54,-3.0,90.00000,0.000000,0.000000 +55,-3.0,90.00000,0.000000,0.000000 +56,-3.0,90.00000,0.000000,0.000000 +57,-3.0,90.00000,0.000000,0.000000 +58,-3.0,90.00000,0.000000,0.000000 +59,-3.0,90.00000,0.000000,0.000000 +60,-3.0,90.00000,0.000000,0.000000 +61,-3.0,90.00000,0.000000,0.000000 +62,-3.0,90.00000,0.000000,0.000000 +63,-3.0,90.00000,0.000000,0.000000 +64,-3.0,90.00000,0.000000,0.000000 +65,-3.0,90.00000,0.000000,0.000000 +66,-3.0,90.00000,0.000000,0.000000 +67,-3.0,90.00000,0.000000,0.000000 +68,-3.0,90.00000,0.000000,0.000000 +69,-3.0,90.00000,0.000000,0.000000 +70,-3.0,90.00000,0.000000,0.000000 +71,-3.0,90.00000,0.000000,0.000000 +72,-3.0,90.00000,0.000000,0.000000 +73,-3.0,90.00000,0.000000,0.000000 +74,-3.0,90.00000,0.000000,0.000000 +75,-3.0,90.00000,0.000000,0.000000 +76,-3.0,90.00000,0.000000,0.000000 +77,-3.0,90.00000,0.000000,0.000000 +78,-3.0,90.00000,0.000000,0.000000 +79,-3.0,90.00000,0.000000,0.000000 +80,-3.0,90.00000,0.000000,0.000000 +81,-3.0,90.00000,0.000000,0.000000 +82,-3.0,90.00000,0.000000,0.000000 +83,-3.0,90.00000,0.000000,0.000000 +84,-3.0,90.00000,0.000000,0.000000 +85,-3.0,90.00000,0.000000,0.000000 +86,-3.0,90.00000,0.000000,0.000000 +87,-3.0,90.00000,0.000000,0.000000 +88,-3.0,90.00000,0.000000,0.000000 +89,-3.0,90.00000,0.000000,0.000000 +90,-3.0,90.00000,0.000000,0.000000 +91,-3.0,90.00000,0.000000,0.000000 +92,-3.0,90.00000,0.000000,0.000000 +93,-3.0,90.00000,0.000000,0.000000 +94,-3.0,90.00000,0.000000,0.000000 +95,-3.0,90.00000,0.000000,0.000000 +96,-3.0,90.00000,0.000000,0.000000 +97,-3.0,90.00000,0.000000,0.000000 +98,-3.0,90.00000,0.000000,0.000000 +99,-3.0,90.00000,0.000000,0.000000 +100,-3.0,90.00000,0.000000,0.000000 +101,-3.0,90.00000,0.000000,0.000000 +102,-3.0,90.00000,0.000000,0.000000 +103,-3.0,90.00000,0.000000,0.000000 +104,-3.0,90.00000,0.000000,0.000000 +105,-3.0,90.00000,0.000000,0.000000 +106,-3.0,90.00000,0.000000,0.000000 +107,-3.0,90.00000,0.000000,0.000000 +108,-3.0,90.00000,0.000000,0.000000 +109,-3.0,90.00000,0.000000,0.000000 +110,-3.0,90.00000,0.000000,0.000000 +111,-3.0,90.00000,0.000000,0.000000 +112,-3.0,90.00000,0.000000,0.000000 +113,-3.0,90.00000,0.000000,0.000000 +114,-3.0,90.00000,0.000000,0.000000 +115,-3.0,90.00000,0.000000,0.000000 +116,-3.0,90.00000,0.000000,0.000000 +117,-3.0,90.00000,0.000000,0.000000 +118,-3.0,90.00000,0.000000,0.000000 +119,-3.0,90.00000,0.000000,0.000000 +120,-3.0,90.00000,0.000000,0.000000 +121,-3.0,90.00000,0.000000,0.000000 +122,-3.0,90.00000,0.000000,0.000000 +123,-3.0,90.00000,0.000000,0.000000 +124,-3.0,90.00000,0.000000,0.000000 +125,-3.0,90.00000,0.000000,0.000000 +126,-3.0,90.00000,0.000000,0.000000 +127,-3.0,90.00000,0.000000,0.000000 +128,-3.0,90.00000,0.000000,0.000000 +129,-3.0,90.00000,0.000000,0.000000 +130,-3.0,90.00000,0.000000,0.000000 +131,-3.0,90.00000,0.000000,0.000000 +132,-3.0,90.00000,0.000000,0.000000 +133,-3.0,90.00000,0.000000,0.000000 +134,-3.0,90.00000,0.000000,0.000000 +135,-3.0,90.00000,0.000000,0.000000 +136,-3.0,90.00000,0.000000,0.000000 +137,-3.0,90.00000,0.000000,0.000000 +138,-3.0,90.00000,0.000000,0.000000 +139,-3.0,90.00000,0.000000,0.000000 +140,-3.0,90.00000,0.000000,0.000000 +141,-3.0,90.00000,0.000000,0.000000 +142,-3.0,90.00000,0.000000,0.000000 +143,-3.0,90.00000,0.000000,0.000000 +144,-3.0,90.00000,0.000000,0.000000 +145,-3.0,90.00000,0.000000,0.000000 +146,-3.0,90.00000,0.000000,0.000000 +147,-3.0,90.00000,0.000000,0.000000 +148,-3.0,90.00000,0.000000,0.000000 +149,-3.0,90.00000,0.000000,0.000000 +150,-3.0,90.00000,0.000000,0.000000 +151,-3.0,90.00000,0.000000,0.000000 +152,-3.0,90.00000,0.000000,0.000000 +153,-3.0,90.00000,0.000000,0.000000 +154,-3.0,90.00000,0.000000,0.000000 +155,-3.0,90.00000,0.000000,0.000000 +156,-3.0,90.00000,0.000000,0.000000 +157,-3.0,90.00000,0.000000,0.000000 +158,-3.0,90.00000,0.000000,0.000000 +159,-3.0,90.00000,0.000000,0.000000 +160,-3.0,90.00000,0.000000,0.000000 +161,-3.0,90.00000,0.000000,0.000000 +162,-3.0,90.00000,0.000000,0.000000 +163,-3.0,90.00000,0.000000,0.000000 +164,-3.0,90.00000,0.000000,0.000000 +165,-3.0,90.00000,0.000000,0.000000 +166,-3.0,90.00000,0.000000,0.000000 +167,-3.0,90.00000,0.000000,0.000000 +168,-3.0,90.00000,0.000000,0.000000 +169,-3.0,90.00000,0.000000,0.000000 +170,-3.0,90.00000,0.000000,0.000000 +171,-3.0,90.00000,0.000000,0.000000 +172,-3.0,90.00000,0.000000,0.000000 +173,-3.0,90.00000,0.000000,0.000000 +174,-3.0,90.00000,0.000000,0.000000 +175,-3.0,90.00000,0.000000,0.000000 +176,-3.0,90.00000,0.000000,0.000000 +177,-3.0,90.00000,0.000000,0.000000 +178,-3.0,90.00000,0.000000,0.000000 +179,-3.0,90.00000,0.000000,0.000000 +180,-3.0,90.00000,0.000000,0.000000 +181,-3.0,90.00000,0.000000,0.000000 +182,-3.0,90.00000,0.000000,0.000000 +183,-3.0,90.00000,0.000000,0.000000 +184,-3.0,90.00000,0.000000,0.000000 +185,-3.0,90.00000,0.000000,0.000000 +186,-3.0,90.00000,0.000000,0.000000 +187,-3.0,90.00000,0.000000,0.000000 +188,-3.0,90.00000,0.000000,0.000000 +189,-3.0,90.00000,0.000000,0.000000 +190,-3.0,90.00000,0.000000,0.000000 +191,-3.0,90.00000,0.000000,0.000000 +192,-3.0,90.00000,0.000000,0.000000 +193,-3.0,90.00000,0.000000,0.000000 +194,-3.0,90.00000,0.000000,0.000000 +195,-3.0,90.00000,0.000000,0.000000 +196,-3.0,90.00000,0.000000,0.000000 +197,-3.0,90.00000,0.000000,0.000000 +198,-3.0,90.00000,0.000000,0.000000 +199,-3.0,90.00000,0.000000,0.000000 +200,-3.0,90.00000,0.000000,0.000000 +201,-3.0,90.00000,0.000000,0.000000 +202,-3.0,90.00000,0.000000,0.000000 +203,-3.0,90.00000,0.000000,0.000000 +204,-3.0,90.00000,0.000000,0.000000 +205,-3.0,90.00000,0.000000,0.000000 +206,-3.0,90.00000,0.000000,0.000000 +207,-3.0,90.00000,0.000000,0.000000 +208,-3.0,90.00000,0.000000,0.000000 +209,-3.0,90.00000,0.000000,0.000000 +210,-3.0,90.00000,0.000000,0.000000 +211,-3.0,90.00000,0.000000,0.000000 +212,-3.0,90.00000,0.000000,0.000000 +213,-3.0,90.00000,0.000000,0.000000 +214,-3.0,90.00000,0.000000,0.000000 +215,-3.0,90.00000,0.000000,0.000000 +216,-3.0,90.00000,0.000000,0.000000 +217,-3.0,90.00000,0.000000,0.000000 +218,-3.0,90.00000,0.000000,0.000000 +219,-3.0,90.00000,0.000000,0.000000 +220,-3.0,90.00000,0.000000,0.000000 +221,-3.0,90.00000,0.000000,0.000000 +222,-3.0,90.00000,0.000000,0.000000 +223,-3.0,90.00000,0.000000,0.000000 +224,-3.0,90.00000,0.000000,0.000000 +225,-3.0,90.00000,0.000000,0.000000 +226,-3.0,90.00000,0.000000,0.000000 +227,-3.0,90.00000,0.000000,0.000000 +228,-3.0,90.00000,0.000000,0.000000 +229,-3.0,90.00000,0.000000,0.000000 +230,-3.0,90.00000,0.000000,0.000000 +231,-3.0,90.00000,0.000000,0.000000 +232,-3.0,90.00000,0.000000,0.000000 +233,-3.0,90.00000,0.000000,0.000000 +234,-3.0,90.00000,0.000000,0.000000 +235,-3.0,90.00000,0.000000,0.000000 +236,-3.0,90.00000,0.000000,0.000000 +237,-3.0,90.00000,0.000000,0.000000 +238,-3.0,90.00000,0.000000,0.000000 +239,-3.0,90.00000,0.000000,0.000000 +240,-3.0,90.00000,0.000000,0.000000 +241,-3.0,90.00000,0.000000,0.000000 +242,-3.0,90.00000,0.000000,0.000000 +243,-3.0,90.00000,0.000000,0.000000 +244,-3.0,90.00000,0.000000,0.000000 +245,-3.0,90.00000,0.000000,0.000000 +246,-3.0,90.00000,0.000000,0.000000 +247,-3.0,90.00000,0.000000,0.000000 +248,-3.0,90.00000,0.000000,0.000000 +249,-3.0,90.00000,0.000000,0.000000 +250,-3.0,90.00000,0.000000,0.000000 +251,-3.0,90.00000,0.000000,0.000000 +252,-3.0,90.00000,0.000000,0.000000 +253,-3.0,90.00000,0.000000,0.000000 +254,-3.0,90.00000,0.000000,0.000000 +255,-3.0,90.00000,0.000000,0.000000 +256,-3.0,90.00000,0.000000,0.000000 +257,-3.0,90.00000,0.000000,0.000000 +258,-3.0,90.00000,0.000000,0.000000 +259,-3.0,90.00000,0.000000,0.000000 +260,-3.0,90.00000,0.000000,0.000000 +261,-3.0,90.00000,0.000000,0.000000 +262,-3.0,90.00000,0.000000,0.000000 +263,-3.0,90.00000,0.000000,0.000000 +264,-3.0,90.00000,0.000000,0.000000 +265,-3.0,90.00000,0.000000,0.000000 +266,-3.0,90.00000,0.000000,0.000000 +267,-3.0,90.00000,0.000000,0.000000 +268,-3.0,90.00000,0.000000,0.000000 +269,-3.0,90.00000,0.000000,0.000000 +270,-3.0,90.00000,0.000000,0.000000 +271,-3.0,90.00000,0.000000,0.000000 +272,-3.0,90.00000,0.000000,0.000000 +273,-3.0,90.00000,0.000000,0.000000 +274,-3.0,90.00000,0.000000,0.000000 +275,-3.0,90.00000,0.000000,0.000000 +276,-3.0,90.00000,0.000000,0.000000 +277,-3.0,90.00000,0.000000,0.000000 +278,-3.0,90.00000,0.000000,0.000000 +279,-3.0,90.00000,0.000000,0.000000 +280,-3.0,90.00000,0.000000,0.000000 +281,-3.0,90.00000,0.000000,0.000000 +282,-3.0,90.00000,0.000000,0.000000 +283,-3.0,90.00000,0.000000,0.000000 +284,-3.0,90.00000,0.000000,0.000000 +285,-3.0,90.00000,0.000000,0.000000 +286,-3.0,90.00000,0.000000,0.000000 +287,-3.0,90.00000,0.000000,0.000000 +288,-3.0,90.00000,0.000000,0.000000 +289,-3.0,90.0000,0.000000,0.000000 +290,-3.0,90.0000,0.000000,0.000000 +291,-3.0,90.0000,0.000000,0.000000 +292,-3.0,90.0000,0.000000,0.000000 +293,-3.0,90.0000,0.000000,0.000000 +294,-3.0,90.0000,0.000000,0.000000 +295,-3.0,90.0000,0.000000,0.000000 +296,-3.0,90.0000,0.000000,0.000000 +297,-3.0,90.0000,0.000000,0.000000 +298,-3.0,90.0000,0.000000,0.000000 +299,-3.0,90.0000,0.000000,0.000000 +300,-3.0,90.0000,0.000000,0.000000 +301,-3.0,90.0000,0.000000,0.000000 +302,-3.0,90.0000,0.000000,0.000000 +303,-3.0,90.0000,0.000000,0.000000 +304,-3.0,90.0000,0.000000,0.000000 +305,-3.0,90.0000,0.000000,0.000000 +306,-3.0,90.0000,0.000000,0.000000 +307,-3.0,90.0000,0.000000,0.000000 +308,-3.0,90.0000,0.000000,0.000000 +309,-3.0,90.0000,0.000000,0.000000 +310,-3.0,90.0000,0.000000,0.000000 +311,-3.0,90.0000,0.000000,0.000000 +312,-3.0,90.0000,0.000000,0.000000 +313,-3.0,90.0000,0.000000,0.000000 +314,-3.0,90.0000,0.000000,0.000000 +315,-3.0,90.0000,0.000000,0.000000 +316,-3.0,90.0000,0.000000,0.000000 +317,-3.0,90.0000,0.000000,0.000000 +318,-3.0,90.0000,0.000000,0.000000 +319,-3.0,90.0000,0.000000,0.000000 +320,-3.0,90.0000,0.000000,0.000000 +321,-3.0,90.0000,0.000000,0.000000 +322,-3.0,90.0000,0.000000,0.000000 +323,-3.0,90.0000,0.000000,0.000000 +324,-3.0,90.0000,0.000000,0.000000 +325,-3.0,90.0000,0.000000,0.000000 +326,-3.0,90.0000,0.000000,0.000000 +327,-3.0,90.0000,0.000000,0.000000 +328,-3.0,90.0000,0.000000,0.000000 +329,-3.0,90.0000,0.000000,0.000000 +330,-3.0,90.0000,0.000000,0.000000 +331,-3.0,90.0000,0.000000,0.000000 +332,-3.0,90.0000,0.000000,0.000000 +333,-3.0,90.0000,0.000000,0.000000 +334,-3.0,90.0000,0.000000,0.000000 +335,-3.0,90.0000,0.000000,0.000000 +336,-3.0,90.0000,0.000000,0.000000 +337,-3.0,90.0000,0.000000,0.000000 +338,-3.0,90.0000,0.000000,0.000000 +339,-3.0,90.0000,0.000000,0.000000 +340,-3.0,90.0000,0.000000,0.000000 +341,-3.0,90.0000,0.000000,0.000000 +342,-3.0,90.0000,0.000000,0.000000 +343,-3.0,90.0000,0.000000,0.000000 +344,-3.0,90.0000,0.000000,0.000000 +345,-3.0,90.0000,0.000000,0.000000 +346,-3.0,90.0000,0.000000,0.000000 +347,-3.0,90.0000,0.000000,0.000000 +348,-3.0,90.0000,0.000000,0.000000 +349,-3.0,90.0000,0.000000,0.000000 +350,-3.0,90.0000,0.000000,0.000000 +351,-3.0,90.0000,0.000000,0.000000 +352,-3.0,90.0000,0.000000,0.000000 +353,-3.0,90.0000,0.000000,0.000000 +354,-3.0,90.0000,0.000000,0.000000 +355,-3.0,90.0000,0.000000,0.000000 +356,-3.0,90.0000,0.000000,0.000000 +357,-3.0,90.0000,0.000000,0.000000 +358,-3.0,90.0000,0.000000,0.000000 +359,-3.0,90.0000,0.000000,0.000000 +360,-3.0,90.0000,0.000000,0.000000 +361,-3.0,90.0000,0.000000,0.000000 +362,-3.0,90.0000,0.000000,0.000000 +363,-3.0,90.0000,0.000000,0.000000 +364,-3.0,90.0000,0.000000,0.000000 +365,-3.0,90.0000,0.000000,0.000000 +366,-3.0,90.0000,0.000000,0.000000 +367,-3.0,90.0000,0.000000,0.000000 +368,-3.0,90.0000,0.000000,0.000000 +369,-3.0,90.0000,0.000000,0.000000 +370,-3.0,90.0000,0.000000,0.000000 +371,-3.0,90.0000,0.000000,0.000000 +372,-3.0,90.0000,0.000000,0.000000 +373,-3.0,90.0000,0.000000,0.000000 +374,-3.0,90.0000,0.000000,0.000000 +375,-3.0,90.0000,0.000000,0.000000 +376,-3.0,90.0000,0.000000,0.000000 +377,-3.0,90.0000,0.000000,0.000000 +378,-3.0,90.0000,0.000000,0.000000 +379,-3.0,90.0000,0.000000,0.000000 +380,-3.0,90.0000,0.000000,0.000000 +381,-3.0,90.0000,0.000000,0.000000 +382,-3.0,90.0000,0.000000,0.000000 +383,-3.0,90.0000,0.000000,0.000000 +384,-3.0,90.0000,0.000000,0.000000 +385,-3.0,90.0000,0.000000,0.000000 +386,-3.0,90.0000,0.000000,0.000000 +387,-3.0,90.0000,0.000000,0.000000 +388,-3.0,90.0000,0.000000,0.000000 +389,-3.0,90.000,0.000000,0.000000 +390,-3.0,90.000,0.000000,0.000000 +391,-3.0,90.000,0.000000,0.000000 +392,-3.0,90.000,0.000000,0.000000 +393,-3.0,90.000,0.000000,0.000000 +394,-3.0,90.000,0.000000,0.000000 +395,-3.0,90.000,0.000000,0.000000 +396,-3.0,90.000,0.000000,0.000000 +397,-3.0,90.000,0.000000,0.000000 +398,-3.0,90.000,0.000000,0.000000 +399,-3.0,-90.000,0.000000,0.000000 +400,-3.0,-90.000,0.000000,0.000000 +401,-3.0,-90.000,0.000000,0.000000 +402,-3.0,-90.000,0.000000,0.000000 +403,-3.0,-90.000,0.000000,0.000000 +404,-3.0,-90.000,0.000000,0.000000 +405,-3.0,-90.000,0.000000,0.000000 +406,-3.0,-90.000,0.000000,0.000000 +407,-3.0,-90.000,0.000000,0.000000 +408,-3.0,-90.000,0.000000,0.000000 +409,-3.0,-90.000,0.000000,0.000000 +410,-3.0,-90.000,0.000000,0.000000 +411,-3.0,-90.000,0.000000,0.000000 +412,-3.0,-90.0000,0.000000,0.000000 +413,-3.0,-90.0000,0.000000,0.000000 +414,-3.0,-90.0000,0.000000,0.000000 +415,-3.0,-90.0000,0.000000,0.000000 +416,-3.0,-90.0000,0.000000,0.000000 +417,-3.0,-90.0000,0.000000,0.000000 +418,-3.0,-90.0000,0.000000,0.000000 +419,-3.0,-90.0000,0.000000,0.000000 +420,-3.0,-90.0000,0.000000,0.000000 +421,-3.0,-90.0000,0.000000,0.000000 +422,-3.0,-90.0000,0.000000,0.000000 +423,-3.0,-90.0000,0.000000,0.000000 +424,-3.0,-90.0000,0.000000,0.000000 +425,-3.0,-90.0000,0.000000,0.000000 +426,-3.0,-90.0000,0.000000,0.000000 +427,-3.0,-90.0000,0.000000,0.000000 +428,-3.0,-90.0000,0.000000,0.000000 +429,-3.0,-90.0000,0.000000,0.000000 +430,-3.0,-90.0000,0.000000,0.000000 +431,-3.0,-90.0000,0.000000,0.000000 +432,-3.0,-90.0000,0.000000,0.000000 +433,-3.0,-90.0000,0.000000,0.000000 +434,-3.0,-90.0000,0.000000,0.000000 +435,-3.0,-90.0000,0.000000,0.000000 +436,-3.0,-90.0000,0.000000,0.000000 +437,-3.0,-90.0000,0.000000,0.000000 +438,-3.0,-90.0000,0.000000,0.000000 +439,-3.0,-90.0000,0.000000,0.000000 +440,-3.0,-90.0000,0.000000,0.000000 +441,-3.0,-90.0000,0.000000,0.000000 +442,-3.0,-90.0000,0.000000,0.000000 +443,-3.0,-90.0000,0.000000,0.000000 +444,-3.0,-90.0000,0.000000,0.000000 +445,-3.0,-90.0000,0.000000,0.000000 +446,-3.0,-90.0000,0.000000,0.000000 +447,-3.0,-90.0000,0.000000,0.000000 +448,-3.0,-90.0000,0.000000,0.000000 +449,-3.0,-90.0000,0.000000,0.000000 +450,-3.0,-90.0000,0.000000,0.000000 +451,-3.0,-90.0000,0.000000,0.000000 +452,-3.0,-90.0000,0.000000,0.000000 +453,-3.0,-90.0000,0.000000,0.000000 +454,-3.0,-90.0000,0.000000,0.000000 +455,-3.0,-90.0000,0.000000,0.000000 +456,-3.0,-90.0000,0.000000,0.000000 +457,-3.0,-90.0000,0.000000,0.000000 +458,-3.0,-90.0000,0.000000,0.000000 +459,-3.0,-90.0000,0.000000,0.000000 +460,-3.0,-90.0000,0.000000,0.000000 +461,-3.0,-90.0000,0.000000,0.000000 +462,-3.0,-90.0000,0.000000,0.000000 +463,-3.0,-90.0000,0.000000,0.000000 +464,-3.0,-90.0000,0.000000,0.000000 +465,-3.0,-90.0000,0.000000,0.000000 +466,-3.0,-90.0000,0.000000,0.000000 +467,-3.0,-90.0000,0.000000,0.000000 +468,-3.0,-90.0000,0.000000,0.000000 +469,-3.0,-90.0000,0.000000,0.000000 +470,-3.0,-90.0000,0.000000,0.000000 +471,-3.0,-90.0000,0.000000,0.000000 +472,-3.0,-90.0000,0.000000,0.000000 +473,-3.0,-90.0000,0.000000,0.000000 +474,-3.0,-90.0000,0.000000,0.000000 +475,-3.0,-90.0000,0.000000,0.000000 +476,-3.0,-90.0000,0.000000,0.000000 +477,-3.0,-90.0000,0.000000,0.000000 +478,-3.0,-90.0000,0.000000,0.000000 +479,-3.0,-90.0000,0.000000,0.000000 +480,-3.0,-90.0000,0.000000,0.000000 +481,-3.0,-90.0000,0.000000,0.000000 +482,-3.0,-90.0000,0.000000,0.000000 +483,-3.0,-90.0000,0.000000,0.000000 +484,-3.0,-90.0000,0.000000,0.000000 +485,-3.0,-90.0000,0.000000,0.000000 +486,-3.0,-90.0000,0.000000,0.000000 +487,-3.0,-90.0000,0.000000,0.000000 +488,-3.0,-90.0000,0.000000,0.000000 +489,-3.0,-90.0000,0.000000,0.000000 +490,-3.0,-90.0000,0.000000,0.000000 +491,-3.0,-90.0000,0.000000,0.000000 +492,-3.0,-90.0000,0.000000,0.000000 +493,-3.0,-90.0000,0.000000,0.000000 +494,-3.0,-90.0000,0.000000,0.000000 +495,-3.0,-90.0000,0.000000,0.000000 +496,-3.0,-90.0000,0.000000,0.000000 +497,-3.0,-90.0000,0.000000,0.000000 +498,-3.0,-90.0000,0.000000,0.000000 +499,-3.0,-90.0000,0.000000,0.000000 +500,-3.0,-90.0000,0.000000,0.000000 +501,-3.0,-90.0000,0.000000,0.000000 +502,-3.0,-90.0000,0.000000,0.000000 +503,-3.0,-90.0000,0.000000,0.000000 +504,-3.0,-90.0000,0.000000,0.000000 +505,-3.0,-90.0000,0.000000,0.000000 +506,-3.0,-90.0000,0.000000,0.000000 +507,-3.0,-90.0000,0.000000,0.000000 +508,-3.0,-90.0000,0.000000,0.000000 +509,-3.0,-90.0000,0.000000,0.000000 +510,-3.0,-90.0000,0.000000,0.000000 +511,-3.0,-90.0000,0.000000,0.000000 +512,-3.0,-90.00000,0.000000,0.000000 +513,-3.0,-90.00000,0.000000,0.000000 +514,-3.0,-90.00000,0.000000,0.000000 +515,-3.0,-90.00000,0.000000,0.000000 +516,-3.0,-90.00000,0.000000,0.000000 +517,-3.0,-90.00000,0.000000,0.000000 +518,-3.0,-90.00000,0.000000,0.000000 +519,-3.0,-90.00000,0.000000,0.000000 +520,-3.0,-90.00000,0.000000,0.000000 +521,-3.0,-90.00000,0.000000,0.000000 +522,-3.0,-90.00000,0.000000,0.000000 +523,-3.0,-90.00000,0.000000,0.000000 +524,-3.0,-90.00000,0.000000,0.000000 +525,-3.0,-90.00000,0.000000,0.000000 +526,-3.0,-90.00000,0.000000,0.000000 +527,-3.0,-90.00000,0.000000,0.000000 +528,-3.0,-90.00000,0.000000,0.000000 +529,-3.0,-90.00000,0.000000,0.000000 +530,-3.0,-90.00000,0.000000,0.000000 +531,-3.0,-90.00000,0.000000,0.000000 +532,-3.0,-90.00000,0.000000,0.000000 +533,-3.0,-90.00000,0.000000,0.000000 +534,-3.0,-90.00000,0.000000,0.000000 +535,-3.0,-90.00000,0.000000,0.000000 +536,-3.0,-90.00000,0.000000,0.000000 +537,-3.0,-90.00000,0.000000,0.000000 +538,-3.0,-90.00000,0.000000,0.000000 +539,-3.0,-90.00000,0.000000,0.000000 +540,-3.0,-90.00000,0.000000,0.000000 +541,-3.0,-90.00000,0.000000,0.000000 +542,-3.0,-90.00000,0.000000,0.000000 +543,-3.0,-90.00000,0.000000,0.000000 +544,-3.0,-90.00000,0.000000,0.000000 +545,-3.0,-90.00000,0.000000,0.000000 +546,-3.0,-90.00000,0.000000,0.000000 +547,-3.0,-90.00000,0.000000,0.000000 +548,-3.0,-90.00000,0.000000,0.000000 +549,-3.0,-90.00000,0.000000,0.000000 +550,-3.0,-90.00000,0.000000,0.000000 +551,-3.0,-90.00000,0.000000,0.000000 +552,-3.0,-90.00000,0.000000,0.000000 +553,-3.0,-90.00000,0.000000,0.000000 +554,-3.0,-90.00000,0.000000,0.000000 +555,-3.0,-90.00000,0.000000,0.000000 +556,-3.0,-90.00000,0.000000,0.000000 +557,-3.0,-90.00000,0.000000,0.000000 +558,-3.0,-90.00000,0.000000,0.000000 +559,-3.0,-90.00000,0.000000,0.000000 +560,-3.0,-90.00000,0.000000,0.000000 +561,-3.0,-90.00000,0.000000,0.000000 +562,-3.0,-90.00000,0.000000,0.000000 +563,-3.0,-90.00000,0.000000,0.000000 +564,-3.0,-90.00000,0.000000,0.000000 +565,-3.0,-90.00000,0.000000,0.000000 +566,-3.0,-90.00000,0.000000,0.000000 +567,-3.0,-90.00000,0.000000,0.000000 +568,-3.0,-90.00000,0.000000,0.000000 +569,-3.0,-90.00000,0.000000,0.000000 +570,-3.0,-90.00000,0.000000,0.000000 +571,-3.0,-90.00000,0.000000,0.000000 +572,-3.0,-90.00000,0.000000,0.000000 +573,-3.0,-90.00000,0.000000,0.000000 +574,-3.0,-90.00000,0.000000,0.000000 +575,-3.0,-90.00000,0.000000,0.000000 +576,-3.0,-90.00000,0.000000,0.000000 +577,-3.0,-90.00000,0.000000,0.000000 +578,-3.0,-90.00000,0.000000,0.000000 +579,-3.0,-90.00000,0.000000,0.000000 +580,-3.0,-90.00000,0.000000,0.000000 +581,-3.0,-90.00000,0.000000,0.000000 +582,-3.0,-90.00000,0.000000,0.000000 +583,-3.0,-90.00000,0.000000,0.000000 +584,-3.0,-90.00000,0.000000,0.000000 +585,-3.0,-90.00000,0.000000,0.000000 +586,-3.0,-90.00000,0.000000,0.000000 +587,-3.0,-90.00000,0.000000,0.000000 +588,-3.0,-90.00000,0.000000,0.000000 +589,-3.0,-90.00000,0.000000,0.000000 +590,-3.0,-90.00000,0.000000,0.000000 +591,-3.0,-90.00000,0.000000,0.000000 +592,-3.0,-90.00000,0.000000,0.000000 +593,-3.0,-90.00000,0.000000,0.000000 +594,-3.0,-90.00000,0.000000,0.000000 +595,-3.0,-90.00000,0.000000,0.000000 +596,-3.0,-90.00000,0.000000,0.000000 +597,-3.0,-90.00000,0.000000,0.000000 +598,-3.0,-90.00000,0.000000,0.000000 +599,-3.0,-90.00000,0.000000,0.000000 +600,-3.0,-90.00000,0.000000,0.000000 +601,-3.0,-90.00000,0.000000,0.000000 +602,-3.0,-90.00000,0.000000,0.000000 +603,-3.0,-90.00000,0.000000,0.000000 +604,-3.0,-90.00000,0.000000,0.000000 +605,-3.0,-90.00000,0.000000,0.000000 +606,-3.0,-90.00000,0.000000,0.000000 +607,-3.0,-90.00000,0.000000,0.000000 +608,-3.0,-90.00000,0.000000,0.000000 +609,-3.0,-90.00000,0.000000,0.000000 +610,-3.0,-90.00000,0.000000,0.000000 +611,-3.0,-90.00000,0.000000,0.000000 +612,-3.0,-90.00000,0.000000,0.000000 +613,-3.0,-90.00000,0.000000,0.000000 +614,-3.0,-90.00000,0.000000,0.000000 +615,-3.0,-90.00000,0.000000,0.000000 +616,-3.0,-90.00000,0.000000,0.000000 +617,-3.0,-90.00000,0.000000,0.000000 +618,-3.0,-90.00000,0.000000,0.000000 +619,-3.0,-90.00000,0.000000,0.000000 +620,-3.0,-90.00000,0.000000,0.000000 +621,-3.0,-90.00000,0.000000,0.000000 +622,-3.0,-90.00000,0.000000,0.000000 +623,-3.0,-90.00000,0.000000,0.000000 +624,-3.0,-90.00000,0.000000,0.000000 +625,-3.0,-90.00000,0.000000,0.000000 +626,-3.0,-90.00000,0.000000,0.000000 +627,-3.0,-90.00000,0.000000,0.000000 +628,-3.0,-90.00000,0.000000,0.000000 +629,-3.0,-90.00000,0.000000,0.000000 +630,-3.0,-90.00000,0.000000,0.000000 +631,-3.0,-90.00000,0.000000,0.000000 +632,-3.0,-90.00000,0.000000,0.000000 +633,-3.0,-90.00000,0.000000,0.000000 +634,-3.0,-90.00000,0.000000,0.000000 +635,-3.0,-90.00000,0.000000,0.000000 +636,-3.0,-90.00000,0.000000,0.000000 +637,-3.0,-90.00000,0.000000,0.000000 +638,-3.0,-90.00000,0.000000,0.000000 +639,-3.0,-90.00000,0.000000,0.000000 +640,-3.0,-90.00000,0.000000,0.000000 +641,-3.0,-90.00000,0.000000,0.000000 +642,-3.0,-90.00000,0.000000,0.000000 +643,-3.0,-90.00000,0.000000,0.000000 +644,-3.0,-90.00000,0.000000,0.000000 +645,-3.0,-90.00000,0.000000,0.000000 +646,-3.0,-90.00000,0.000000,0.000000 +647,-3.0,-90.00000,0.000000,0.000000 +648,-3.0,-90.00000,0.000000,0.000000 +649,-3.0,-90.00000,0.000000,0.000000 +650,-3.0,-90.00000,0.000000,0.000000 +651,-3.0,-90.00000,0.000000,0.000000 +652,-3.0,-90.00000,0.000000,0.000000 +653,-3.0,-90.00000,0.000000,0.000000 +654,-3.0,-90.00000,0.000000,0.000000 +655,-3.0,-90.00000,0.000000,0.000000 +656,-3.0,-90.00000,0.000000,0.000000 +657,-3.0,-90.00000,0.000000,0.000000 +658,-3.0,-90.00000,0.000000,0.000000 +659,-3.0,-90.00000,0.000000,0.000000 +660,-3.0,-90.00000,0.000000,0.000000 +661,-3.0,-90.00000,0.000000,0.000000 +662,-3.0,-90.00000,0.000000,0.000000 +663,-3.0,-90.00000,0.000000,0.000000 +664,-3.0,-90.00000,0.000000,0.000000 +665,-3.0,-90.00000,0.000000,0.000000 +666,-3.0,-90.00000,0.000000,0.000000 +667,-3.0,-90.00000,0.000000,0.000000 +668,-3.0,-90.00000,0.000000,0.000000 +669,-3.0,-90.00000,0.000000,0.000000 +670,-3.0,-90.00000,0.000000,0.000000 +671,-3.0,-90.00000,0.000000,0.000000 +672,-3.0,-90.00000,0.000000,0.000000 +673,-3.0,-90.00000,0.000000,0.000000 +674,-3.0,-90.00000,0.000000,0.000000 +675,-3.0,-90.00000,0.000000,0.000000 +676,-3.0,-90.00000,0.000000,0.000000 +677,-3.0,-90.00000,0.000000,0.000000 +678,-3.0,-90.00000,0.000000,0.000000 +679,-3.0,-90.00000,0.000000,0.000000 +680,-3.0,-90.00000,0.000000,0.000000 +681,-3.0,-90.00000,0.000000,0.000000 +682,-3.0,-90.00000,0.000000,0.000000 +683,-3.0,-90.00000,0.000000,0.000000 +684,-3.0,-90.00000,0.000000,0.000000 +685,-3.0,-90.00000,0.000000,0.000000 +686,-3.0,-90.00000,0.000000,0.000000 +687,-3.0,-90.00000,0.000000,0.000000 +688,-3.0,-90.00000,0.000000,0.000000 +689,-3.0,-90.00000,0.000000,0.000000 +690,-3.0,-90.00000,0.000000,0.000000 +691,-3.0,-90.00000,0.000000,0.000000 +692,-3.0,-90.00000,0.000000,0.000000 +693,-3.0,-90.00000,0.000000,0.000000 +694,-3.0,-90.00000,0.000000,0.000000 +695,-3.0,-90.00000,0.000000,0.000000 +696,-3.0,-90.00000,0.000000,0.000000 +697,-3.0,-90.00000,0.000000,0.000000 +698,-3.0,-90.00000,0.000000,0.000000 +699,-3.0,-90.00000,0.000000,0.000000 +700,-3.0,-90.00000,0.000000,0.000000 +701,-3.0,-90.00000,0.000000,0.000000 +702,-3.0,-90.00000,0.000000,0.000000 +703,-3.0,-90.00000,0.000000,0.000000 +704,-3.0,-90.00000,0.000000,0.000000 +705,-3.0,-90.00000,0.000000,0.000000 +706,-3.0,-90.00000,0.000000,0.000000 +707,-3.0,-90.00000,0.000000,0.000000 +708,-3.0,-90.00000,0.000000,0.000000 +709,-3.0,-90.00000,0.000000,0.000000 +710,-3.0,-90.00000,0.000000,0.000000 +711,-3.0,-90.00000,0.000000,0.000000 +712,-3.0,-90.00000,0.000000,0.000000 +713,-3.0,-90.00000,0.000000,0.000000 +714,-3.0,-90.00000,0.000000,0.000000 +715,-3.0,-90.00000,0.000000,0.000000 +716,-3.0,-90.00000,0.000000,0.000000 +717,-3.0,-90.00000,0.000000,0.000000 +718,-3.0,-90.00000,0.000000,0.000000 +719,-3.0,-90.00000,0.000000,0.000000 +720,-3.0,-90.00000,0.000000,0.000000 +721,-3.0,-90.00000,0.000000,0.000000 +722,-3.0,-90.00000,0.000000,0.000000 +723,-3.0,-90.00000,0.000000,0.000000 +724,-3.0,-90.00000,0.000000,0.000000 +725,-3.0,-90.00000,0.000000,0.000000 +726,-3.0,-90.00000,0.000000,0.000000 +727,-3.0,-90.00000,0.000000,0.000000 +728,-3.0,-90.00000,0.000000,0.000000 +729,-3.0,-90.00000,0.000000,0.000000 +730,-3.0,-90.00000,0.000000,0.000000 +731,-3.0,-90.00000,0.000000,0.000000 +732,-3.0,-90.00000,0.000000,0.000000 +733,-3.0,-90.00000,0.000000,0.000000 +734,-3.0,-90.00000,0.000000,0.000000 +735,-3.0,-90.00000,0.000000,0.000000 +736,-3.0,-90.00000,0.000000,0.000000 +737,-3.0,-90.00000,0.000000,0.000000 +738,-3.0,-90.00000,0.000000,0.000000 +739,-3.0,-90.00000,0.000000,0.000000 +740,-3.0,-90.00000,0.000000,0.000000 +741,-3.0,-90.00000,0.000000,0.000000 +742,-3.0,-90.00000,0.000000,0.000000 +743,-3.0,-90.00000,0.000000,0.000000 +744,-3.0,-90.00000,0.000000,0.000000 +745,-3.0,-90.00000,0.000000,0.000000 +746,-3.0,-90.00000,0.000000,0.000000 +747,-3.0,-90.00000,0.000000,0.000000 +748,-3.0,-90.00000,0.000000,0.000000 +749,-3.0,-90.00000,0.000000,0.000000 +750,-3.0,-90.00000,0.000000,0.000000 +751,-3.0,-90.00000,0.000000,0.000000 +752,-3.0,-90.00000,0.000000,0.000000 +753,-3.0,-90.00000,0.000000,0.000000 +754,-3.0,-90.00000,0.000000,0.000000 +755,-3.0,-90.00000,0.000000,0.000000 +756,-3.0,-90.00000,0.000000,0.000000 +757,-3.0,-90.00000,0.000000,0.000000 +758,-3.0,-90.00000,0.000000,0.000000 +759,-3.0,-90.00000,0.000000,0.000000 +760,-3.0,-90.00000,0.000000,0.000000 +761,-3.0,-90.00000,0.000000,0.000000 +762,-3.0,-90.00000,0.000000,0.000000 +763,-3.0,-90.00000,0.000000,0.000000 +764,-3.0,-90.00000,0.000000,0.000000 +765,-3.0,-90.00000,0.000000,0.000000 +766,-3.0,-90.00000,0.000000,0.000000 +767,-3.0,-90.00000,0.000000,0.000000 +768,-3.0,-90.00000,0.000000,0.000000 +769,-3.0,-90.00000,0.000000,0.000000 +770,-3.0,-90.00000,0.000000,0.000000 +771,-3.0,-90.00000,0.000000,0.000000 +772,-3.0,-90.00000,0.000000,0.000000 +773,-3.0,-90.00000,0.000000,0.000000 +774,-3.0,-90.00000,0.000000,0.000000 +775,-3.0,-90.00000,0.000000,0.000000 +776,-3.0,-90.00000,0.000000,0.000000 +777,-3.0,-90.00000,0.000000,0.000000 +778,-3.0,-90.00000,0.000000,0.000000 +779,-3.0,-90.00000,0.000000,0.000000 +780,-3.0,-90.00000,0.000000,0.000000 +781,-3.0,-90.00000,0.000000,0.000000 +782,-3.0,-90.00000,0.000000,0.000000 +783,-3.0,-90.00000,0.000000,0.000000 +784,-3.0,-90.00000,0.000000,0.000000 +785,-3.0,-90.00000,0.000000,0.000000 +786,-3.0,-90.00000,0.000000,0.000000 +787,-3.0,-90.00000,0.000000,0.000000 +788,-3.0,-90.00000,0.000000,0.000000 +789,-3.0,-90.00000,0.000000,0.000000 +790,-3.0,-90.00000,0.000000,0.000000 +791,-3.0,-90.00000,0.000000,0.000000 +792,-3.0,-90.00000,0.000000,0.000000 +793,-3.0,-90.00000,0.000000,0.000000 +794,-3.0,-90.00000,0.000000,0.000000 +795,-3.0,-90.00000,0.000000,0.000000 +796,-3.0,-90.00000,0.000000,0.000000 +797,-3.0,-90.00000,0.000000,0.000000 +798,-3.0,-90.00000,0.000000,0.000000 +799,-3.0,-90.00000,0.000000,0.000000 +800,-3.0,0.000000,90.0000000,0.000000 +801,-3.0,0.000000,90.0000000,0.000000 +802,-3.0,0.000000,90.0000000,0.000000 +803,-3.0,0.000000,90.0000000,0.000000 +804,-3.0,0.000000,90.0000000,0.000000 +805,-3.0,0.000000,90.0000000,0.000000 +806,-3.0,0.000000,90.0000000,0.000000 +807,-3.0,0.000000,90.0000000,0.000000 +808,-3.0,0.000000,90.0000000,0.000000 +809,-3.0,0.000000,90.0000000,0.000000 +810,-3.0,0.000000,90.0000000,0.000000 +811,-3.0,0.000000,90.0000000,0.000000 +812,-3.0,0.000000,90.0000000,0.000000 +813,-3.0,0.000000,90.0000000,0.000000 +814,-3.0,0.000000,90.0000000,0.000000 +815,-3.0,0.000000,90.0000000,0.000000 +816,-3.0,0.000000,90.0000000,0.000000 +817,-3.0,0.000000,90.0000000,0.000000 +818,-3.0,0.000000,90.0000000,0.000000 +819,-3.0,0.000000,90.0000000,0.000000 +820,-3.0,0.000000,90.0000000,0.000000 +821,-3.0,0.000000,90.0000000,0.000000 +822,-3.0,0.000000,90.0000000,0.000000 +823,-3.0,0.000000,90.0000000,0.000000 +824,-3.0,0.000000,90.0000000,0.000000 +825,-3.0,0.000000,90.0000000,0.000000 +826,-3.0,0.000000,90.0000000,0.000000 +827,-3.0,0.000000,90.0000000,0.000000 +828,-3.0,0.000000,90.0000000,0.000000 +829,-3.0,0.000000,90.0000000,0.000000 +830,-3.0,0.000000,90.0000000,0.000000 +831,-3.0,0.000000,90.0000000,0.000000 +832,-3.0,0.000000,90.0000000,0.000000 +833,-3.0,0.000000,90.0000000,0.000000 +834,-3.0,0.000000,90.0000000,0.000000 +835,-3.0,0.000000,90.0000000,0.000000 +836,-3.0,0.000000,90.0000000,0.000000 +837,-3.0,0.000000,90.0000000,0.000000 +838,-3.0,0.000000,90.0000000,0.000000 +839,-3.0,0.000000,90.0000000,0.000000 +840,-3.0,0.000000,90.0000000,0.000000 +841,-3.0,0.000000,90.0000000,0.000000 +842,-3.0,0.000000,90.0000000,0.000000 +843,-3.0,0.000000,90.0000000,0.000000 +844,-3.0,0.000000,90.0000000,0.000000 +845,-3.0,0.000000,90.0000000,0.000000 +846,-3.0,0.000000,90.0000000,0.000000 +847,-3.0,0.000000,90.0000000,0.000000 +848,-3.0,0.000000,90.0000000,0.000000 +849,-3.0,0.000000,90.0000000,0.000000 +850,-3.0,0.000000,90.0000000,0.000000 +851,-3.0,0.000000,90.0000000,0.000000 +852,-3.0,0.000000,90.0000000,0.000000 +853,-3.0,0.000000,90.0000000,0.000000 +854,-3.0,0.000000,90.0000000,0.000000 +855,-3.0,0.000000,90.0000000,0.000000 +856,-3.0,0.000000,90.0000000,0.000000 +857,-3.0,0.000000,90.0000000,0.000000 +858,-3.0,0.000000,90.0000000,0.000000 +859,-3.0,0.000000,90.0000000,0.000000 +860,-3.0,0.000000,90.0000000,0.000000 +861,-3.0,0.000000,90.0000000,0.000000 +862,-3.0,0.000000,90.0000000,0.000000 +863,-3.0,0.000000,90.0000000,0.000000 +864,-3.0,0.000000,90.0000000,0.000000 +865,-3.0,0.000000,90.0000000,0.000000 +866,-3.0,0.000000,90.0000000,0.000000 +867,-3.0,0.000000,90.0000000,0.000000 +868,-3.0,0.000000,90.0000000,0.000000 +869,-3.0,0.000000,90.0000000,0.000000 +870,-3.0,0.000000,90.0000000,0.000000 +871,-3.0,0.000000,90.0000000,0.000000 +872,-3.0,0.000000,90.0000000,0.000000 +873,-3.0,0.000000,90.0000000,0.000000 +874,-3.0,0.000000,90.0000000,0.000000 +875,-3.0,0.000000,90.0000000,0.000000 +876,-3.0,0.000000,90.0000000,0.000000 +877,-3.0,0.000000,90.0000000,0.000000 +878,-3.0,0.000000,90.0000000,0.000000 +879,-3.0,0.000000,90.0000000,0.000000 +880,-3.0,0.000000,90.0000000,0.000000 +881,-3.0,0.000000,90.0000000,0.000000 +882,-3.0,0.000000,90.0000000,0.000000 +883,-3.0,0.000000,90.0000000,0.000000 +884,-3.0,0.000000,90.0000000,0.000000 +885,-3.0,0.000000,90.0000000,0.000000 +886,-3.0,0.000000,90.0000000,0.000000 +887,-3.0,0.000000,90.0000000,0.000000 +888,-3.0,0.000000,90.0000000,0.000000 +889,-3.0,0.000000,90.0000000,0.000000 +890,-3.0,0.000000,90.0000000,0.000000 +891,-3.0,0.000000,90.0000000,0.000000 +892,-3.0,0.000000,90.0000000,0.000000 +893,-3.0,0.000000,90.0000000,0.000000 +894,-3.0,0.000000,90.0000000,0.000000 +895,-3.0,0.000000,90.0000000,0.000000 +896,-3.0,0.000000,90.0000000,0.000000 +897,-3.0,0.000000,90.0000000,0.000000 +898,-3.0,0.000000,90.0000000,0.000000 +899,-3.0,0.000000,90.0000000,0.000000 +900,-3.0,0.000000,90.0000000,0.000000 +901,-3.0,0.000000,90.0000000,0.000000 +902,-3.0,0.000000,90.0000000,0.000000 +903,-3.0,0.000000,90.0000000,0.000000 +904,-3.0,0.000000,90.0000000,0.000000 +905,-3.0,0.000000,90.0000000,0.000000 +906,-3.0,0.000000,90.0000000,0.000000 +907,-3.0,0.000000,90.0000000,0.000000 +908,-3.0,0.000000,90.0000000,0.000000 +909,-3.0,0.000000,90.0000000,0.000000 +910,-3.0,0.000000,90.0000000,0.000000 +911,-3.0,0.000000,90.0000000,0.000000 +912,-3.0,0.000000,90.0000000,0.000000 +913,-3.0,0.000000,90.0000000,0.000000 +914,-3.0,0.000000,90.0000000,0.000000 +915,-3.0,0.000000,90.0000000,0.000000 +916,-3.0,0.000000,90.0000000,0.000000 +917,-3.0,0.000000,90.0000000,0.000000 +918,-3.0,0.000000,90.0000000,0.000000 +919,-3.0,0.000000,90.0000000,0.000000 +920,-3.0,0.000000,90.0000000,0.000000 +921,-3.0,0.000000,90.0000000,0.000000 +922,-3.0,0.000000,90.0000000,0.000000 +923,-3.0,0.000000,90.0000000,0.000000 +924,-3.0,0.000000,90.0000000,0.000000 +925,-3.0,0.000000,90.0000000,0.000000 +926,-3.0,0.000000,90.0000000,0.000000 +927,-3.0,0.000000,90.0000000,0.000000 +928,-3.0,0.000000,90.0000000,0.000000 +929,-3.0,0.000000,90.0000000,0.000000 +930,-3.0,0.000000,90.0000000,0.000000 +931,-3.0,0.000000,90.0000000,0.000000 +932,-3.0,0.000000,90.0000000,0.000000 +933,-3.0,0.000000,90.0000000,0.000000 +934,-3.0,0.000000,90.0000000,0.000000 +935,-3.0,0.000000,90.0000000,0.000000 +936,-3.0,0.000000,90.0000000,0.000000 +937,-3.0,0.000000,90.0000000,0.000000 +938,-3.0,0.000000,90.0000000,0.000000 +939,-3.0,0.000000,90.0000000,0.000000 +940,-3.0,0.000000,90.0000000,0.000000 +941,-3.0,0.000000,90.0000000,0.000000 +942,-3.0,0.000000,90.0000000,0.000000 +943,-3.0,0.000000,90.0000000,0.000000 +944,-3.0,0.000000,90.0000000,0.000000 +945,-3.0,0.000000,90.0000000,0.000000 +946,-3.0,0.000000,90.0000000,0.000000 +947,-3.0,0.000000,90.0000000,0.000000 +948,-3.0,0.000000,90.0000000,0.000000 +949,-3.0,0.000000,90.0000000,0.000000 +950,-3.0,0.000000,90.0000000,0.000000 +951,-3.0,0.000000,90.0000000,0.000000 +952,-3.0,0.000000,90.0000000,0.000000 +953,-3.0,0.000000,90.0000000,0.000000 +954,-3.0,0.000000,90.0000000,0.000000 +955,-3.0,0.000000,90.0000000,0.000000 +956,-3.0,0.000000,90.0000000,0.000000 +957,-3.0,0.000000,90.0000000,0.000000 +958,-3.0,0.000000,90.0000000,0.000000 +959,-3.0,0.000000,90.0000000,0.000000 +960,-3.0,0.000000,90.0000000,0.000000 +961,-3.0,0.000000,90.0000000,0.000000 +962,-3.0,0.000000,90.0000000,0.000000 +963,-3.0,0.000000,90.0000000,0.000000 +964,-3.0,0.000000,90.0000000,0.000000 +965,-3.0,0.000000,90.0000000,0.000000 +966,-3.0,0.000000,90.0000000,0.000000 +967,-3.0,0.000000,90.0000000,0.000000 +968,-3.0,0.000000,90.0000000,0.000000 +969,-3.0,0.000000,90.0000000,0.000000 +970,-3.0,0.000000,90.0000000,0.000000 +971,-3.0,0.000000,90.0000000,0.000000 +972,-3.0,0.000000,90.0000000,0.000000 +973,-3.0,0.000000,90.0000000,0.000000 +974,-3.0,0.000000,90.0000000,0.000000 +975,-3.0,0.000000,90.0000000,0.000000 +976,-3.0,0.000000,90.0000000,0.000000 +977,-3.0,0.000000,90.0000000,0.000000 +978,-3.0,0.000000,90.0000000,0.000000 +979,-3.0,0.000000,90.0000000,0.000000 +980,-3.0,0.000000,90.0000000,0.000000 +981,-3.0,0.000000,90.0000000,0.000000 +982,-3.0,0.000000,90.0000000,0.000000 +983,-3.0,0.000000,90.0000000,0.000000 +984,-3.0,0.000000,90.0000000,0.000000 +985,-3.0,0.000000,90.0000000,0.000000 +986,-3.0,0.000000,90.0000000,0.000000 +987,-3.0,0.000000,90.0000000,0.000000 +988,-3.0,0.000000,90.0000000,0.000000 +989,-3.0,0.000000,90.0000000,0.000000 +990,-3.0,0.000000,90.0000000,0.000000 +991,-3.0,0.000000,90.0000000,0.000000 +992,-3.0,0.000000,90.0000000,0.000000 +993,-3.0,0.000000,90.0000000,0.000000 +994,-3.0,0.000000,90.0000000,0.000000 +995,-3.0,0.000000,90.0000000,0.000000 +996,-3.0,0.000000,90.0000000,0.000000 +997,-3.0,0.000000,90.0000000,0.000000 +998,-3.0,0.000000,90.0000000,0.000000 +999,-3.0,0.000000,90.0000000,0.000000 +1000,-3.0,0.000000,90.0000000,0.000000 +1001,-3.0,0.000000,90.0000000,0.000000 +1002,-3.0,0.000000,90.0000000,0.000000 +1003,-3.0,0.000000,90.0000000,0.000000 +1004,-3.0,0.000000,90.0000000,0.000000 +1005,-3.0,0.000000,90.0000000,0.000000 +1006,-3.0,0.000000,90.0000000,0.000000 +1007,-3.0,0.000000,90.0000000,0.000000 +1008,-3.0,0.000000,90.0000000,0.000000 +1009,-3.0,0.000000,90.0000000,0.000000 +1010,-3.0,0.000000,90.0000000,0.000000 +1011,-3.0,0.000000,90.0000000,0.000000 +1012,-3.0,0.000000,90.0000000,0.000000 +1013,-3.0,0.000000,90.0000000,0.000000 +1014,-3.0,0.000000,90.0000000,0.000000 +1015,-3.0,0.000000,90.0000000,0.000000 +1016,-3.0,0.000000,90.0000000,0.000000 +1017,-3.0,0.000000,90.0000000,0.000000 +1018,-3.0,0.000000,90.0000000,0.000000 +1019,-3.0,0.000000,90.0000000,0.000000 +1020,-3.0,0.000000,90.0000000,0.000000 +1021,-3.0,0.000000,90.0000000,0.000000 +1022,-3.0,0.000000,90.0000000,0.000000 +1023,-3.0,0.000000,90.0000000,0.000000 +1024,-3.0,0.000000,90.0000000,0.000000 +1025,-3.0,0.000000,90.0000000,0.000000 +1026,-3.0,0.000000,90.0000000,0.000000 +1027,-3.0,0.000000,90.0000000,0.000000 +1028,-3.0,0.000000,90.0000000,0.000000 +1029,-3.0,0.000000,90.0000000,0.000000 +1030,-3.0,0.000000,90.0000000,0.000000 +1031,-3.0,0.000000,90.0000000,0.000000 +1032,-3.0,0.000000,90.0000000,0.000000 +1033,-3.0,0.000000,90.0000000,0.000000 +1034,-3.0,0.000000,90.0000000,0.000000 +1035,-3.0,0.000000,90.0000000,0.000000 +1036,-3.0,0.000000,90.0000000,0.000000 +1037,-3.0,0.000000,90.0000000,0.000000 +1038,-3.0,0.000000,90.0000000,0.000000 +1039,-3.0,0.000000,90.0000000,0.000000 +1040,-3.0,0.000000,90.0000000,0.000000 +1041,-3.0,0.000000,90.0000000,0.000000 +1042,-3.0,0.000000,90.0000000,0.000000 +1043,-3.0,0.000000,90.0000000,0.000000 +1044,-3.0,0.000000,90.0000000,0.000000 +1045,-3.0,0.000000,90.0000000,0.000000 +1046,-3.0,0.000000,90.0000000,0.000000 +1047,-3.0,0.000000,90.0000000,0.000000 +1048,-3.0,0.000000,90.0000000,0.000000 +1049,-3.0,0.000000,90.0000000,0.000000 +1050,-3.0,0.000000,90.0000000,0.000000 +1051,-3.0,0.000000,90.0000000,0.000000 +1052,-3.0,0.000000,90.0000000,0.000000 +1053,-3.0,0.000000,90.0000000,0.000000 +1054,-3.0,0.000000,90.0000000,0.000000 +1055,-3.0,0.000000,90.0000000,0.000000 +1056,-3.0,0.000000,90.0000000,0.000000 +1057,-3.0,0.000000,90.0000000,0.000000 +1058,-3.0,0.000000,90.0000000,0.000000 +1059,-3.0,0.000000,90.0000000,0.000000 +1060,-3.0,0.000000,90.0000000,0.000000 +1061,-3.0,0.000000,90.0000000,0.000000 +1062,-3.0,0.000000,90.0000000,0.000000 +1063,-3.0,0.000000,90.0000000,0.000000 +1064,-3.0,0.000000,90.0000000,0.000000 +1065,-3.0,0.000000,90.0000000,0.000000 +1066,-3.0,0.000000,90.0000000,0.000000 +1067,-3.0,0.000000,90.0000000,0.000000 +1068,-3.0,0.000000,90.0000000,0.000000 +1069,-3.0,0.000000,90.0000000,0.000000 +1070,-3.0,0.000000,90.0000000,0.000000 +1071,-3.0,0.000000,90.0000000,0.000000 +1072,-3.0,0.000000,90.0000000,0.000000 +1073,-3.0,0.000000,90.0000000,0.000000 +1074,-3.0,0.000000,90.0000000,0.000000 +1075,-3.0,0.000000,90.0000000,0.000000 +1076,-3.0,0.000000,90.0000000,0.000000 +1077,-3.0,0.000000,90.0000000,0.000000 +1078,-3.0,0.000000,90.0000000,0.000000 +1079,-3.0,0.000000,90.0000000,0.000000 +1080,-3.0,0.000000,90.0000000,0.000000 +1081,-3.0,0.000000,90.0000000,0.000000 +1082,-3.0,0.000000,90.0000000,0.000000 +1083,-3.0,0.000000,90.0000000,0.000000 +1084,-3.0,0.000000,90.0000000,0.000000 +1085,-3.0,0.000000,90.0000000,0.000000 +1086,-3.0,0.000000,90.0000000,0.000000 +1087,-3.0,0.000000,90.0000000,0.000000 +1088,-3.0,0.000000,90.0000000,0.000000 +1089,-3.0,0.000000,90.000000,0.000000 +1090,-3.0,0.000000,90.000000,0.000000 +1091,-3.0,0.000000,90.000000,0.000000 +1092,-3.0,0.000000,90.000000,0.000000 +1093,-3.0,0.000000,90.000000,0.000000 +1094,-3.0,0.000000,90.000000,0.000000 +1095,-3.0,0.000000,90.000000,0.000000 +1096,-3.0,0.000000,90.000000,0.000000 +1097,-3.0,0.000000,90.000000,0.000000 +1098,-3.0,0.000000,90.000000,0.000000 +1099,-3.0,0.000000,90.000000,0.000000 +1100,-3.0,0.000000,90.000000,0.000000 +1101,-3.0,0.000000,90.000000,0.000000 +1102,-3.0,0.000000,90.000000,0.000000 +1103,-3.0,0.000000,90.000000,0.000000 +1104,-3.0,0.000000,90.000000,0.000000 +1105,-3.0,0.000000,90.000000,0.000000 +1106,-3.0,0.000000,90.000000,0.000000 +1107,-3.0,0.000000,90.000000,0.000000 +1108,-3.0,0.000000,90.000000,0.000000 +1109,-3.0,0.000000,90.000000,0.000000 +1110,-3.0,0.000000,90.000000,0.000000 +1111,-3.0,0.000000,90.000000,0.000000 +1112,-3.0,0.000000,90.000000,0.000000 +1113,-3.0,0.000000,90.000000,0.000000 +1114,-3.0,0.000000,90.000000,0.000000 +1115,-3.0,0.000000,90.000000,0.000000 +1116,-3.0,0.000000,90.000000,0.000000 +1117,-3.0,0.000000,90.000000,0.000000 +1118,-3.0,0.000000,90.000000,0.000000 +1119,-3.0,0.000000,90.000000,0.000000 +1120,-3.0,0.000000,90.000000,0.000000 +1121,-3.0,0.000000,90.000000,0.000000 +1122,-3.0,0.000000,90.000000,0.000000 +1123,-3.0,0.000000,90.000000,0.000000 +1124,-3.0,0.000000,90.000000,0.000000 +1125,-3.0,0.000000,90.000000,0.000000 +1126,-3.0,0.000000,90.000000,0.000000 +1127,-3.0,0.000000,90.000000,0.000000 +1128,-3.0,0.000000,90.000000,0.000000 +1129,-3.0,0.000000,90.000000,0.000000 +1130,-3.0,0.000000,90.000000,0.000000 +1131,-3.0,0.000000,90.000000,0.000000 +1132,-3.0,0.000000,90.000000,0.000000 +1133,-3.0,0.000000,90.000000,0.000000 +1134,-3.0,0.000000,90.000000,0.000000 +1135,-3.0,0.000000,90.000000,0.000000 +1136,-3.0,0.000000,90.000000,0.000000 +1137,-3.0,0.000000,90.000000,0.000000 +1138,-3.0,0.000000,90.000000,0.000000 +1139,-3.0,0.000000,90.000000,0.000000 +1140,-3.0,0.000000,90.000000,0.000000 +1141,-3.0,0.000000,90.000000,0.000000 +1142,-3.0,0.000000,90.000000,0.000000 +1143,-3.0,0.000000,90.000000,0.000000 +1144,-3.0,0.000000,90.000000,0.000000 +1145,-3.0,0.000000,90.000000,0.000000 +1146,-3.0,0.000000,90.000000,0.000000 +1147,-3.0,0.000000,90.000000,0.000000 +1148,-3.0,0.000000,90.000000,0.000000 +1149,-3.0,0.000000,90.000000,0.000000 +1150,-3.0,0.000000,90.000000,0.000000 +1151,-3.0,0.000000,90.000000,0.000000 +1152,-3.0,0.000000,90.000000,0.000000 +1153,-3.0,0.000000,90.000000,0.000000 +1154,-3.0,0.000000,90.000000,0.000000 +1155,-3.0,0.000000,90.000000,0.000000 +1156,-3.0,0.000000,90.000000,0.000000 +1157,-3.0,0.000000,90.000000,0.000000 +1158,-3.0,0.000000,90.000000,0.000000 +1159,-3.0,0.000000,90.000000,0.000000 +1160,-3.0,0.000000,90.000000,0.000000 +1161,-3.0,0.000000,90.000000,0.000000 +1162,-3.0,0.000000,90.000000,0.000000 +1163,-3.0,0.000000,90.000000,0.000000 +1164,-3.0,0.000000,90.000000,0.000000 +1165,-3.0,0.000000,90.000000,0.000000 +1166,-3.0,0.000000,90.000000,0.000000 +1167,-3.0,0.000000,90.000000,0.000000 +1168,-3.0,0.000000,90.000000,0.000000 +1169,-3.0,0.000000,90.000000,0.000000 +1170,-3.0,0.000000,90.000000,0.000000 +1171,-3.0,0.000000,90.000000,0.000000 +1172,-3.0,0.000000,90.000000,0.000000 +1173,-3.0,0.000000,90.000000,0.000000 +1174,-3.0,0.000000,90.000000,0.000000 +1175,-3.0,0.000000,90.000000,0.000000 +1176,-3.0,0.000000,90.000000,0.000000 +1177,-3.0,0.000000,90.000000,0.000000 +1178,-3.0,0.000000,90.000000,0.000000 +1179,-3.0,0.000000,90.000000,0.000000 +1180,-3.0,0.000000,90.000000,0.000000 +1181,-3.0,0.000000,90.000000,0.000000 +1182,-3.0,0.000000,90.000000,0.000000 +1183,-3.0,0.000000,90.000000,0.000000 +1184,-3.0,0.000000,90.000000,0.000000 +1185,-3.0,0.000000,90.000000,0.000000 +1186,-3.0,0.000000,90.000000,0.000000 +1187,-3.0,0.000000,90.000000,0.000000 +1188,-3.0,0.000000,90.000000,0.000000 +1189,-3.0,0.000000,90.00000,0.000000 +1190,-3.0,0.000000,90.00000,0.000000 +1191,-3.0,0.000000,90.00000,0.000000 +1192,-3.0,0.000000,90.00000,0.000000 +1193,-3.0,0.000000,90.00000,0.000000 +1194,-3.0,0.000000,90.00000,0.000000 +1195,-3.0,0.000000,90.00000,0.000000 +1196,-3.0,0.000000,90.00000,0.000000 +1197,-3.0,0.000000,90.00000,0.000000 +1198,-3.0,0.000000,90.00000,0.000000 +1199,-3.0,0.000000,90.00000,0.000000 +1200,-3.0,0.000000,-90.000,0.000000 +1201,-3.0,0.000000,-90.000,0.000000 +1202,-3.0,0.000000,-90.000,0.000000 +1203,-3.0,0.000000,-90.000,0.000000 +1204,-3.0,0.000000,-90.000,0.000000 +1205,-3.0,0.000000,-90.000,0.000000 +1206,-3.0,0.000000,-90.000,0.000000 +1207,-3.0,0.000000,-90.000,0.000000 +1208,-3.0,0.000000,-90.000,0.000000 +1209,-3.0,0.000000,-90.000,0.000000 +1210,-3.0,0.000000,-90.000,0.000000 +1211,-3.0,0.000000,-90.000,0.000000 +1212,-3.0,0.000000,-90.0000,0.000000 +1213,-3.0,0.000000,-90.0000,0.000000 +1214,-3.0,0.000000,-90.0000,0.000000 +1215,-3.0,0.000000,-90.0000,0.000000 +1216,-3.0,0.000000,-90.0000,0.000000 +1217,-3.0,0.000000,-90.0000,0.000000 +1218,-3.0,0.000000,-90.0000,0.000000 +1219,-3.0,0.000000,-90.0000,0.000000 +1220,-3.0,0.000000,-90.0000,0.000000 +1221,-3.0,0.000000,-90.0000,0.000000 +1222,-3.0,0.000000,-90.0000,0.000000 +1223,-3.0,0.000000,-90.0000,0.000000 +1224,-3.0,0.000000,-90.0000,0.000000 +1225,-3.0,0.000000,-90.0000,0.000000 +1226,-3.0,0.000000,-90.0000,0.000000 +1227,-3.0,0.000000,-90.0000,0.000000 +1228,-3.0,0.000000,-90.0000,0.000000 +1229,-3.0,0.000000,-90.0000,0.000000 +1230,-3.0,0.000000,-90.0000,0.000000 +1231,-3.0,0.000000,-90.0000,0.000000 +1232,-3.0,0.000000,-90.0000,0.000000 +1233,-3.0,0.000000,-90.0000,0.000000 +1234,-3.0,0.000000,-90.0000,0.000000 +1235,-3.0,0.000000,-90.0000,0.000000 +1236,-3.0,0.000000,-90.0000,0.000000 +1237,-3.0,0.000000,-90.0000,0.000000 +1238,-3.0,0.000000,-90.0000,0.000000 +1239,-3.0,0.000000,-90.0000,0.000000 +1240,-3.0,0.000000,-90.0000,0.000000 +1241,-3.0,0.000000,-90.0000,0.000000 +1242,-3.0,0.000000,-90.0000,0.000000 +1243,-3.0,0.000000,-90.0000,0.000000 +1244,-3.0,0.000000,-90.0000,0.000000 +1245,-3.0,0.000000,-90.0000,0.000000 +1246,-3.0,0.000000,-90.0000,0.000000 +1247,-3.0,0.000000,-90.0000,0.000000 +1248,-3.0,0.000000,-90.0000,0.000000 +1249,-3.0,0.000000,-90.0000,0.000000 +1250,-3.0,0.000000,-90.0000,0.000000 +1251,-3.0,0.000000,-90.0000,0.000000 +1252,-3.0,0.000000,-90.0000,0.000000 +1253,-3.0,0.000000,-90.0000,0.000000 +1254,-3.0,0.000000,-90.0000,0.000000 +1255,-3.0,0.000000,-90.0000,0.000000 +1256,-3.0,0.000000,-90.0000,0.000000 +1257,-3.0,0.000000,-90.0000,0.000000 +1258,-3.0,0.000000,-90.0000,0.000000 +1259,-3.0,0.000000,-90.0000,0.000000 +1260,-3.0,0.000000,-90.0000,0.000000 +1261,-3.0,0.000000,-90.0000,0.000000 +1262,-3.0,0.000000,-90.0000,0.000000 +1263,-3.0,0.000000,-90.0000,0.000000 +1264,-3.0,0.000000,-90.0000,0.000000 +1265,-3.0,0.000000,-90.0000,0.000000 +1266,-3.0,0.000000,-90.0000,0.000000 +1267,-3.0,0.000000,-90.0000,0.000000 +1268,-3.0,0.000000,-90.0000,0.000000 +1269,-3.0,0.000000,-90.0000,0.000000 +1270,-3.0,0.000000,-90.0000,0.000000 +1271,-3.0,0.000000,-90.0000,0.000000 +1272,-3.0,0.000000,-90.0000,0.000000 +1273,-3.0,0.000000,-90.0000,0.000000 +1274,-3.0,0.000000,-90.0000,0.000000 +1275,-3.0,0.000000,-90.0000,0.000000 +1276,-3.0,0.000000,-90.0000,0.000000 +1277,-3.0,0.000000,-90.0000,0.000000 +1278,-3.0,0.000000,-90.0000,0.000000 +1279,-3.0,0.000000,-90.0000,0.000000 +1280,-3.0,0.000000,-90.0000,0.000000 +1281,-3.0,0.000000,-90.0000,0.000000 +1282,-3.0,0.000000,-90.0000,0.000000 +1283,-3.0,0.000000,-90.0000,0.000000 +1284,-3.0,0.000000,-90.0000,0.000000 +1285,-3.0,0.000000,-90.0000,0.000000 +1286,-3.0,0.000000,-90.0000,0.000000 +1287,-3.0,0.000000,-90.0000,0.000000 +1288,-3.0,0.000000,-90.0000,0.000000 +1289,-3.0,0.000000,-90.0000,0.000000 +1290,-3.0,0.000000,-90.0000,0.000000 +1291,-3.0,0.000000,-90.0000,0.000000 +1292,-3.0,0.000000,-90.0000,0.000000 +1293,-3.0,0.000000,-90.0000,0.000000 +1294,-3.0,0.000000,-90.0000,0.000000 +1295,-3.0,0.000000,-90.0000,0.000000 +1296,-3.0,0.000000,-90.0000,0.000000 +1297,-3.0,0.000000,-90.0000,0.000000 +1298,-3.0,0.000000,-90.0000,0.000000 +1299,-3.0,0.000000,-90.0000,0.000000 +1300,-3.0,0.000000,-90.0000,0.000000 +1301,-3.0,0.000000,-90.0000,0.000000 +1302,-3.0,0.000000,-90.0000,0.000000 +1303,-3.0,0.000000,-90.0000,0.000000 +1304,-3.0,0.000000,-90.0000,0.000000 +1305,-3.0,0.000000,-90.0000,0.000000 +1306,-3.0,0.000000,-90.0000,0.000000 +1307,-3.0,0.000000,-90.0000,0.000000 +1308,-3.0,0.000000,-90.0000,0.000000 +1309,-3.0,0.000000,-90.0000,0.000000 +1310,-3.0,0.000000,-90.0000,0.000000 +1311,-3.0,0.000000,-90.0000,0.000000 +1312,-3.0,0.000000,-90.00000,0.000000 +1313,-3.0,0.000000,-90.00000,0.000000 +1314,-3.0,0.000000,-90.00000,0.000000 +1315,-3.0,0.000000,-90.00000,0.000000 +1316,-3.0,0.000000,-90.00000,0.000000 +1317,-3.0,0.000000,-90.00000,0.000000 +1318,-3.0,0.000000,-90.00000,0.000000 +1319,-3.0,0.000000,-90.00000,0.000000 +1320,-3.0,0.000000,-90.00000,0.000000 +1321,-3.0,0.000000,-90.00000,0.000000 +1322,-3.0,0.000000,-90.00000,0.000000 +1323,-3.0,0.000000,-90.00000,0.000000 +1324,-3.0,0.000000,-90.00000,0.000000 +1325,-3.0,0.000000,-90.00000,0.000000 +1326,-3.0,0.000000,-90.00000,0.000000 +1327,-3.0,0.000000,-90.00000,0.000000 +1328,-3.0,0.000000,-90.00000,0.000000 +1329,-3.0,0.000000,-90.00000,0.000000 +1330,-3.0,0.000000,-90.00000,0.000000 +1331,-3.0,0.000000,-90.00000,0.000000 +1332,-3.0,0.000000,-90.00000,0.000000 +1333,-3.0,0.000000,-90.00000,0.000000 +1334,-3.0,0.000000,-90.00000,0.000000 +1335,-3.0,0.000000,-90.00000,0.000000 +1336,-3.0,0.000000,-90.00000,0.000000 +1337,-3.0,0.000000,-90.00000,0.000000 +1338,-3.0,0.000000,-90.00000,0.000000 +1339,-3.0,0.000000,-90.00000,0.000000 +1340,-3.0,0.000000,-90.00000,0.000000 +1341,-3.0,0.000000,-90.00000,0.000000 +1342,-3.0,0.000000,-90.00000,0.000000 +1343,-3.0,0.000000,-90.00000,0.000000 +1344,-3.0,0.000000,-90.00000,0.000000 +1345,-3.0,0.000000,-90.00000,0.000000 +1346,-3.0,0.000000,-90.00000,0.000000 +1347,-3.0,0.000000,-90.00000,0.000000 +1348,-3.0,0.000000,-90.00000,0.000000 +1349,-3.0,0.000000,-90.00000,0.000000 +1350,-3.0,0.000000,-90.00000,0.000000 +1351,-3.0,0.000000,-90.00000,0.000000 +1352,-3.0,0.000000,-90.00000,0.000000 +1353,-3.0,0.000000,-90.00000,0.000000 +1354,-3.0,0.000000,-90.00000,0.000000 +1355,-3.0,0.000000,-90.00000,0.000000 +1356,-3.0,0.000000,-90.00000,0.000000 +1357,-3.0,0.000000,-90.00000,0.000000 +1358,-3.0,0.000000,-90.00000,0.000000 +1359,-3.0,0.000000,-90.00000,0.000000 +1360,-3.0,0.000000,-90.00000,0.000000 +1361,-3.0,0.000000,-90.00000,0.000000 +1362,-3.0,0.000000,-90.00000,0.000000 +1363,-3.0,0.000000,-90.00000,0.000000 +1364,-3.0,0.000000,-90.00000,0.000000 +1365,-3.0,0.000000,-90.00000,0.000000 +1366,-3.0,0.000000,-90.00000,0.000000 +1367,-3.0,0.000000,-90.00000,0.000000 +1368,-3.0,0.000000,-90.00000,0.000000 +1369,-3.0,0.000000,-90.00000,0.000000 +1370,-3.0,0.000000,-90.00000,0.000000 +1371,-3.0,0.000000,-90.00000,0.000000 +1372,-3.0,0.000000,-90.00000,0.000000 +1373,-3.0,0.000000,-90.00000,0.000000 +1374,-3.0,0.000000,-90.00000,0.000000 +1375,-3.0,0.000000,-90.00000,0.000000 +1376,-3.0,0.000000,-90.00000,0.000000 +1377,-3.0,0.000000,-90.00000,0.000000 +1378,-3.0,0.000000,-90.00000,0.000000 +1379,-3.0,0.000000,-90.00000,0.000000 +1380,-3.0,0.000000,-90.00000,0.000000 +1381,-3.0,0.000000,-90.00000,0.000000 +1382,-3.0,0.000000,-90.00000,0.000000 +1383,-3.0,0.000000,-90.00000,0.000000 +1384,-3.0,0.000000,-90.00000,0.000000 +1385,-3.0,0.000000,-90.00000,0.000000 +1386,-3.0,0.000000,-90.00000,0.000000 +1387,-3.0,0.000000,-90.00000,0.000000 +1388,-3.0,0.000000,-90.00000,0.000000 +1389,-3.0,0.000000,-90.00000,0.000000 +1390,-3.0,0.000000,-90.00000,0.000000 +1391,-3.0,0.000000,-90.00000,0.000000 +1392,-3.0,0.000000,-90.00000,0.000000 +1393,-3.0,0.000000,-90.00000,0.000000 +1394,-3.0,0.000000,-90.00000,0.000000 +1395,-3.0,0.000000,-90.00000,0.000000 +1396,-3.0,0.000000,-90.00000,0.000000 +1397,-3.0,0.000000,-90.00000,0.000000 +1398,-3.0,0.000000,-90.00000,0.000000 +1399,-3.0,0.000000,-90.00000,0.000000 +1400,-3.0,0.000000,-90.00000,0.000000 +1401,-3.0,0.000000,-90.00000,0.000000 +1402,-3.0,0.000000,-90.00000,0.000000 +1403,-3.0,0.000000,-90.00000,0.000000 +1404,-3.0,0.000000,-90.00000,0.000000 +1405,-3.0,0.000000,-90.00000,0.000000 +1406,-3.0,0.000000,-90.00000,0.000000 +1407,-3.0,0.000000,-90.00000,0.000000 +1408,-3.0,0.000000,-90.00000,0.000000 +1409,-3.0,0.000000,-90.00000,0.000000 +1410,-3.0,0.000000,-90.00000,0.000000 +1411,-3.0,0.000000,-90.00000,0.000000 +1412,-3.0,0.000000,-90.00000,0.000000 +1413,-3.0,0.000000,-90.00000,0.000000 +1414,-3.0,0.000000,-90.00000,0.000000 +1415,-3.0,0.000000,-90.00000,0.000000 +1416,-3.0,0.000000,-90.00000,0.000000 +1417,-3.0,0.000000,-90.00000,0.000000 +1418,-3.0,0.000000,-90.00000,0.000000 +1419,-3.0,0.000000,-90.00000,0.000000 +1420,-3.0,0.000000,-90.00000,0.000000 +1421,-3.0,0.000000,-90.00000,0.000000 +1422,-3.0,0.000000,-90.00000,0.000000 +1423,-3.0,0.000000,-90.00000,0.000000 +1424,-3.0,0.000000,-90.00000,0.000000 +1425,-3.0,0.000000,-90.00000,0.000000 +1426,-3.0,0.000000,-90.00000,0.000000 +1427,-3.0,0.000000,-90.00000,0.000000 +1428,-3.0,0.000000,-90.00000,0.000000 +1429,-3.0,0.000000,-90.00000,0.000000 +1430,-3.0,0.000000,-90.00000,0.000000 +1431,-3.0,0.000000,-90.00000,0.000000 +1432,-3.0,0.000000,-90.00000,0.000000 +1433,-3.0,0.000000,-90.00000,0.000000 +1434,-3.0,0.000000,-90.00000,0.000000 +1435,-3.0,0.000000,-90.00000,0.000000 +1436,-3.0,0.000000,-90.00000,0.000000 +1437,-3.0,0.000000,-90.00000,0.000000 +1438,-3.0,0.000000,-90.00000,0.000000 +1439,-3.0,0.000000,-90.00000,0.000000 +1440,-3.0,0.000000,-90.00000,0.000000 +1441,-3.0,0.000000,-90.00000,0.000000 +1442,-3.0,0.000000,-90.00000,0.000000 +1443,-3.0,0.000000,-90.00000,0.000000 +1444,-3.0,0.000000,-90.00000,0.000000 +1445,-3.0,0.000000,-90.00000,0.000000 +1446,-3.0,0.000000,-90.00000,0.000000 +1447,-3.0,0.000000,-90.00000,0.000000 +1448,-3.0,0.000000,-90.00000,0.000000 +1449,-3.0,0.000000,-90.00000,0.000000 +1450,-3.0,0.000000,-90.00000,0.000000 +1451,-3.0,0.000000,-90.00000,0.000000 +1452,-3.0,0.000000,-90.00000,0.000000 +1453,-3.0,0.000000,-90.00000,0.000000 +1454,-3.0,0.000000,-90.00000,0.000000 +1455,-3.0,0.000000,-90.00000,0.000000 +1456,-3.0,0.000000,-90.00000,0.000000 +1457,-3.0,0.000000,-90.00000,0.000000 +1458,-3.0,0.000000,-90.00000,0.000000 +1459,-3.0,0.000000,-90.00000,0.000000 +1460,-3.0,0.000000,-90.00000,0.000000 +1461,-3.0,0.000000,-90.00000,0.000000 +1462,-3.0,0.000000,-90.00000,0.000000 +1463,-3.0,0.000000,-90.00000,0.000000 +1464,-3.0,0.000000,-90.00000,0.000000 +1465,-3.0,0.000000,-90.00000,0.000000 +1466,-3.0,0.000000,-90.00000,0.000000 +1467,-3.0,0.000000,-90.00000,0.000000 +1468,-3.0,0.000000,-90.00000,0.000000 +1469,-3.0,0.000000,-90.00000,0.000000 +1470,-3.0,0.000000,-90.00000,0.000000 +1471,-3.0,0.000000,-90.00000,0.000000 +1472,-3.0,0.000000,-90.00000,0.000000 +1473,-3.0,0.000000,-90.00000,0.000000 +1474,-3.0,0.000000,-90.00000,0.000000 +1475,-3.0,0.000000,-90.00000,0.000000 +1476,-3.0,0.000000,-90.00000,0.000000 +1477,-3.0,0.000000,-90.00000,0.000000 +1478,-3.0,0.000000,-90.00000,0.000000 +1479,-3.0,0.000000,-90.00000,0.000000 +1480,-3.0,0.000000,-90.00000,0.000000 +1481,-3.0,0.000000,-90.00000,0.000000 +1482,-3.0,0.000000,-90.00000,0.000000 +1483,-3.0,0.000000,-90.00000,0.000000 +1484,-3.0,0.000000,-90.00000,0.000000 +1485,-3.0,0.000000,-90.00000,0.000000 +1486,-3.0,0.000000,-90.00000,0.000000 +1487,-3.0,0.000000,-90.00000,0.000000 +1488,-3.0,0.000000,-90.00000,0.000000 +1489,-3.0,0.000000,-90.00000,0.000000 +1490,-3.0,0.000000,-90.00000,0.000000 +1491,-3.0,0.000000,-90.00000,0.000000 +1492,-3.0,0.000000,-90.00000,0.000000 +1493,-3.0,0.000000,-90.00000,0.000000 +1494,-3.0,0.000000,-90.00000,0.000000 +1495,-3.0,0.000000,-90.00000,0.000000 +1496,-3.0,0.000000,-90.00000,0.000000 +1497,-3.0,0.000000,-90.00000,0.000000 +1498,-3.0,0.000000,-90.00000,0.000000 +1499,-3.0,0.000000,-90.00000,0.000000 +1500,-3.0,0.000000,-90.00000,0.000000 +1501,-3.0,0.000000,-90.00000,0.000000 +1502,-3.0,0.000000,-90.00000,0.000000 +1503,-3.0,0.000000,-90.00000,0.000000 +1504,-3.0,0.000000,-90.00000,0.000000 +1505,-3.0,0.000000,-90.00000,0.000000 +1506,-3.0,0.000000,-90.00000,0.000000 +1507,-3.0,0.000000,-90.00000,0.000000 +1508,-3.0,0.000000,-90.00000,0.000000 +1509,-3.0,0.000000,-90.00000,0.000000 +1510,-3.0,0.000000,-90.00000,0.000000 +1511,-3.0,0.000000,-90.00000,0.000000 +1512,-3.0,0.000000,-90.00000,0.000000 +1513,-3.0,0.000000,-90.00000,0.000000 +1514,-3.0,0.000000,-90.00000,0.000000 +1515,-3.0,0.000000,-90.00000,0.000000 +1516,-3.0,0.000000,-90.00000,0.000000 +1517,-3.0,0.000000,-90.00000,0.000000 +1518,-3.0,0.000000,-90.00000,0.000000 +1519,-3.0,0.000000,-90.00000,0.000000 +1520,-3.0,0.000000,-90.00000,0.000000 +1521,-3.0,0.000000,-90.00000,0.000000 +1522,-3.0,0.000000,-90.00000,0.000000 +1523,-3.0,0.000000,-90.00000,0.000000 +1524,-3.0,0.000000,-90.00000,0.000000 +1525,-3.0,0.000000,-90.00000,0.000000 +1526,-3.0,0.000000,-90.00000,0.000000 +1527,-3.0,0.000000,-90.00000,0.000000 +1528,-3.0,0.000000,-90.00000,0.000000 +1529,-3.0,0.000000,-90.00000,0.000000 +1530,-3.0,0.000000,-90.00000,0.000000 +1531,-3.0,0.000000,-90.00000,0.000000 +1532,-3.0,0.000000,-90.00000,0.000000 +1533,-3.0,0.000000,-90.00000,0.000000 +1534,-3.0,0.000000,-90.00000,0.000000 +1535,-3.0,0.000000,-90.00000,0.000000 +1536,-3.0,0.000000,-90.00000,0.000000 +1537,-3.0,0.000000,-90.00000,0.000000 +1538,-3.0,0.000000,-90.00000,0.000000 +1539,-3.0,0.000000,-90.00000,0.000000 +1540,-3.0,0.000000,-90.00000,0.000000 +1541,-3.0,0.000000,-90.00000,0.000000 +1542,-3.0,0.000000,-90.00000,0.000000 +1543,-3.0,0.000000,-90.00000,0.000000 +1544,-3.0,0.000000,-90.00000,0.000000 +1545,-3.0,0.000000,-90.00000,0.000000 +1546,-3.0,0.000000,-90.00000,0.000000 +1547,-3.0,0.000000,-90.00000,0.000000 +1548,-3.0,0.000000,-90.00000,0.000000 +1549,-3.0,0.000000,-90.00000,0.000000 +1550,-3.0,0.000000,-90.00000,0.000000 +1551,-3.0,0.000000,-90.00000,0.000000 +1552,-3.0,0.000000,-90.00000,0.000000 +1553,-3.0,0.000000,-90.00000,0.000000 +1554,-3.0,0.000000,-90.00000,0.000000 +1555,-3.0,0.000000,-90.00000,0.000000 +1556,-3.0,0.000000,-90.00000,0.000000 +1557,-3.0,0.000000,-90.00000,0.000000 +1558,-3.0,0.000000,-90.00000,0.000000 +1559,-3.0,0.000000,-90.00000,0.000000 +1560,-3.0,0.000000,-90.00000,0.000000 +1561,-3.0,0.000000,-90.00000,0.000000 +1562,-3.0,0.000000,-90.00000,0.000000 +1563,-3.0,0.000000,-90.00000,0.000000 +1564,-3.0,0.000000,-90.00000,0.000000 +1565,-3.0,0.000000,-90.00000,0.000000 +1566,-3.0,0.000000,-90.00000,0.000000 +1567,-3.0,0.000000,-90.00000,0.000000 +1568,-3.0,0.000000,-90.00000,0.000000 +1569,-3.0,0.000000,-90.00000,0.000000 +1570,-3.0,0.000000,-90.00000,0.000000 +1571,-3.0,0.000000,-90.00000,0.000000 +1572,-3.0,0.000000,-90.00000,0.000000 +1573,-3.0,0.000000,-90.00000,0.000000 +1574,-3.0,0.000000,-90.00000,0.000000 +1575,-3.0,0.000000,-90.00000,0.000000 +1576,-3.0,0.000000,-90.00000,0.000000 +1577,-3.0,0.000000,-90.00000,0.000000 +1578,-3.0,0.000000,-90.00000,0.000000 +1579,-3.0,0.000000,-90.00000,0.000000 +1580,-3.0,0.000000,-90.00000,0.000000 +1581,-3.0,0.000000,-90.00000,0.000000 +1582,-3.0,0.000000,-90.00000,0.000000 +1583,-3.0,0.000000,-90.00000,0.000000 +1584,-3.0,0.000000,-90.00000,0.000000 +1585,-3.0,0.000000,-90.00000,0.000000 +1586,-3.0,0.000000,-90.00000,0.000000 +1587,-3.0,0.000000,-90.00000,0.000000 +1588,-3.0,0.000000,-90.00000,0.000000 +1589,-3.0,0.000000,-90.00000,0.000000 +1590,-3.0,0.000000,-90.00000,0.000000 +1591,-3.0,0.000000,-90.00000,0.000000 +1592,-3.0,0.000000,-90.00000,0.000000 +1593,-3.0,0.000000,-90.00000,0.000000 +1594,-3.0,0.000000,-90.00000,0.000000 +1595,-3.0,0.000000,-90.00000,0.000000 +1596,-3.0,0.000000,-90.00000,0.000000 +1597,-3.0,0.000000,-90.00000,0.000000 +1598,-3.0,0.000000,-90.00000,0.000000 +1599,-3.0,0.000000,-90.00000,0.000000 +1600,-3.0,90.000000,0.000000,45.00000000 +1601,-3.0,90.000000,0.000000,45.00000000 +1602,-3.0,90.000000,0.000000,45.00000000 +1603,-3.0,90.000000,0.000000,45.00000000 +1604,-3.0,90.000000,0.000000,45.00000000 +1605,-3.0,90.000000,0.000000,45.00000000 +1606,-3.0,90.000000,0.000000,45.00000000 +1607,-3.0,90.000000,0.000000,45.00000000 +1608,-3.0,90.000000,0.000000,45.00000000 +1609,-3.0,90.000000,0.000000,45.00000000 +1610,-3.0,90.000000,0.000000,45.00000000 +1611,-3.0,90.000000,0.000000,45.00000000 +1612,-3.0,90.000000,0.000000,45.00000000 +1613,-3.0,90.000000,0.000000,45.00000000 +1614,-3.0,90.000000,0.000000,45.00000000 +1615,-3.0,90.000000,0.000000,45.00000000 +1616,-3.0,90.000000,0.000000,45.00000000 +1617,-3.0,90.000000,0.000000,45.00000000 +1618,-3.0,90.000000,0.000000,45.00000000 +1619,-3.0,90.000000,0.000000,45.00000000 +1620,-3.0,90.000000,0.000000,45.00000000 +1621,-3.0,90.000000,0.000000,45.00000000 +1622,-3.0,90.000000,0.000000,45.00000000 +1623,-3.0,90.000000,0.000000,45.00000000 +1624,-3.0,90.000000,0.000000,45.00000000 +1625,-3.0,90.000000,0.000000,45.00000000 +1626,-3.0,90.000000,0.000000,45.00000000 +1627,-3.0,90.000000,0.000000,45.00000000 +1628,-3.0,90.000000,0.000000,45.00000000 +1629,-3.0,90.000000,0.000000,45.00000000 +1630,-3.0,90.000000,0.000000,45.00000000 +1631,-3.0,90.000000,0.000000,45.00000000 +1632,-3.0,90.000000,0.000000,45.00000000 +1633,-3.0,90.000000,0.000000,45.00000000 +1634,-3.0,90.000000,0.000000,45.00000000 +1635,-3.0,90.000000,0.000000,45.00000000 +1636,-3.0,90.000000,0.000000,45.00000000 +1637,-3.0,90.000000,0.000000,45.00000000 +1638,-3.0,90.000000,0.000000,45.00000000 +1639,-3.0,90.000000,0.000000,45.00000000 +1640,-3.0,90.000000,0.000000,45.00000000 +1641,-3.0,90.000000,0.000000,45.00000000 +1642,-3.0,90.000000,0.000000,45.00000000 +1643,-3.0,90.000000,0.000000,45.00000000 +1644,-3.0,90.000000,0.000000,45.00000000 +1645,-3.0,90.000000,0.000000,45.00000000 +1646,-3.0,90.000000,0.000000,45.00000000 +1647,-3.0,90.000000,0.000000,45.00000000 +1648,-3.0,90.000000,0.000000,45.00000000 +1649,-3.0,90.000000,0.000000,45.00000000 +1650,-3.0,90.000000,0.000000,45.00000000 +1651,-3.0,90.000000,0.000000,45.00000000 +1652,-3.0,90.000000,0.000000,45.00000000 +1653,-3.0,90.000000,0.000000,45.00000000 +1654,-3.0,90.000000,0.000000,45.00000000 +1655,-3.0,90.000000,0.000000,45.00000000 +1656,-3.0,90.000000,0.000000,45.00000000 +1657,-3.0,90.000000,0.000000,45.00000000 +1658,-3.0,90.000000,0.000000,45.00000000 +1659,-3.0,90.000000,0.000000,45.00000000 +1660,-3.0,90.000000,0.000000,45.00000000 +1661,-3.0,90.000000,0.000000,45.00000000 +1662,-3.0,90.000000,0.000000,45.00000000 +1663,-3.0,90.000000,0.000000,45.00000000 +1664,-3.0,90.000000,0.000000,45.00000000 +1665,-3.0,90.000000,0.000000,45.00000000 +1666,-3.0,90.000000,0.000000,45.00000000 +1667,-3.0,90.000000,0.000000,45.00000000 +1668,-3.0,90.000000,0.000000,45.00000000 +1669,-3.0,90.000000,0.000000,45.00000000 +1670,-3.0,90.000000,0.000000,45.00000000 +1671,-3.0,90.000000,0.000000,45.00000000 +1672,-3.0,90.000000,0.000000,45.00000000 +1673,-3.0,90.000000,0.000000,45.00000000 +1674,-3.0,90.000000,0.000000,45.00000000 +1675,-3.0,90.000000,0.000000,45.00000000 +1676,-3.0,90.000000,0.000000,45.00000000 +1677,-3.0,90.000000,0.000000,45.00000000 +1678,-3.0,90.000000,0.000000,45.00000000 +1679,-3.0,90.000000,0.000000,45.00000000 +1680,-3.0,90.000000,0.000000,45.00000000 +1681,-3.0,90.000000,0.000000,45.00000000 +1682,-3.0,90.000000,0.000000,45.00000000 +1683,-3.0,90.000000,0.000000,45.00000000 +1684,-3.0,90.000000,0.000000,45.00000000 +1685,-3.0,90.000000,0.000000,45.00000000 +1686,-3.0,90.000000,0.000000,45.00000000 +1687,-3.0,90.000000,0.000000,45.00000000 +1688,-3.0,90.000000,0.000000,45.00000000 +1689,-3.0,90.000000,0.000000,45.00000000 +1690,-3.0,90.000000,0.000000,45.00000000 +1691,-3.0,90.000000,0.000000,45.00000000 +1692,-3.0,90.000000,0.000000,45.00000000 +1693,-3.0,90.000000,0.000000,45.00000000 +1694,-3.0,90.000000,0.000000,45.00000000 +1695,-3.0,90.000000,0.000000,45.00000000 +1696,-3.0,90.000000,0.000000,45.00000000 +1697,-3.0,90.000000,0.000000,45.00000000 +1698,-3.0,90.000000,0.000000,45.00000000 +1699,-3.0,90.000000,0.000000,45.00000000 +1700,-3.0,90.000000,0.000000,45.00000000 +1701,-3.0,90.000000,0.000000,45.00000000 +1702,-3.0,90.000000,0.000000,45.00000000 +1703,-3.0,90.000000,0.000000,45.00000000 +1704,-3.0,90.000000,0.000000,45.00000000 +1705,-3.0,90.000000,0.000000,45.00000000 +1706,-3.0,90.000000,0.000000,45.00000000 +1707,-3.0,90.000000,0.000000,45.00000000 +1708,-3.0,90.000000,0.000000,45.00000000 +1709,-3.0,90.000000,0.000000,45.00000000 +1710,-3.0,90.000000,0.000000,45.00000000 +1711,-3.0,90.000000,0.000000,45.00000000 +1712,-3.0,90.000000,0.000000,45.00000000 +1713,-3.0,90.000000,0.000000,45.00000000 +1714,-3.0,90.000000,0.000000,45.00000000 +1715,-3.0,90.000000,0.000000,45.00000000 +1716,-3.0,90.000000,0.000000,45.00000000 +1717,-3.0,90.000000,0.000000,45.00000000 +1718,-3.0,90.000000,0.000000,45.00000000 +1719,-3.0,90.000000,0.000000,45.00000000 +1720,-3.0,90.000000,0.000000,45.00000000 +1721,-3.0,90.000000,0.000000,45.00000000 +1722,-3.0,90.000000,0.000000,45.00000000 +1723,-3.0,90.000000,0.000000,45.00000000 +1724,-3.0,90.000000,0.000000,45.00000000 +1725,-3.0,90.000000,0.000000,45.00000000 +1726,-3.0,90.000000,0.000000,45.00000000 +1727,-3.0,90.000000,0.000000,45.00000000 +1728,-3.0,90.000000,0.000000,45.00000000 +1729,-3.0,90.000000,0.000000,45.00000000 +1730,-3.0,90.000000,0.000000,45.00000000 +1731,-3.0,90.000000,0.000000,45.00000000 +1732,-3.0,90.000000,0.000000,45.00000000 +1733,-3.0,90.000000,0.000000,45.00000000 +1734,-3.0,90.000000,0.000000,45.00000000 +1735,-3.0,90.000000,0.000000,45.00000000 +1736,-3.0,90.000000,0.000000,45.00000000 +1737,-3.0,90.000000,0.000000,45.00000000 +1738,-3.0,90.000000,0.000000,45.00000000 +1739,-3.0,90.000000,0.000000,45.00000000 +1740,-3.0,90.000000,0.000000,45.00000000 +1741,-3.0,90.000000,0.000000,45.00000000 +1742,-3.0,90.000000,0.000000,45.00000000 +1743,-3.0,90.000000,0.000000,45.00000000 +1744,-3.0,90.000000,0.000000,45.00000000 +1745,-3.0,90.000000,0.000000,45.00000000 +1746,-3.0,90.000000,0.000000,45.00000000 +1747,-3.0,90.000000,0.000000,45.00000000 +1748,-3.0,90.000000,0.000000,45.00000000 +1749,-3.0,90.000000,0.000000,45.00000000 +1750,-3.0,90.000000,0.000000,45.00000000 +1751,-3.0,90.000000,0.000000,45.00000000 +1752,-3.0,90.000000,0.000000,45.00000000 +1753,-3.0,90.000000,0.000000,45.00000000 +1754,-3.0,90.000000,0.000000,45.00000000 +1755,-3.0,90.000000,0.000000,45.00000000 +1756,-3.0,90.000000,0.000000,45.00000000 +1757,-3.0,90.000000,0.000000,45.00000000 +1758,-3.0,90.000000,0.000000,45.00000000 +1759,-3.0,90.000000,0.000000,45.00000000 +1760,-3.0,90.000000,0.000000,45.00000000 +1761,-3.0,90.000000,0.000000,45.00000000 +1762,-3.0,90.000000,0.000000,45.00000000 +1763,-3.0,90.000000,0.000000,45.00000000 +1764,-3.0,90.000000,0.000000,45.00000000 +1765,-3.0,90.000000,0.000000,45.00000000 +1766,-3.0,90.000000,0.000000,45.00000000 +1767,-3.0,90.000000,0.000000,45.00000000 +1768,-3.0,90.000000,0.000000,45.00000000 +1769,-3.0,90.000000,0.000000,45.00000000 +1770,-3.0,90.000000,0.000000,45.00000000 +1771,-3.0,90.000000,0.000000,45.00000000 +1772,-3.0,90.000000,0.000000,45.00000000 +1773,-3.0,90.000000,0.000000,45.00000000 +1774,-3.0,90.000000,0.000000,45.00000000 +1775,-3.0,90.000000,0.000000,45.00000000 +1776,-3.0,90.000000,0.000000,45.00000000 +1777,-3.0,90.000000,0.000000,45.00000000 +1778,-3.0,90.000000,0.000000,45.00000000 +1779,-3.0,90.000000,0.000000,45.00000000 +1780,-3.0,90.000000,0.000000,45.00000000 +1781,-3.0,90.000000,0.000000,45.00000000 +1782,-3.0,90.000000,0.000000,45.00000000 +1783,-3.0,90.000000,0.000000,45.00000000 +1784,-3.0,90.000000,0.000000,45.00000000 +1785,-3.0,90.000000,0.000000,45.00000000 +1786,-3.0,90.000000,0.000000,45.00000000 +1787,-3.0,90.000000,0.000000,45.00000000 +1788,-3.0,90.000000,0.000000,45.00000000 +1789,-3.0,90.000000,0.000000,45.00000000 +1790,-3.0,90.000000,0.000000,45.00000000 +1791,-3.0,90.000000,0.000000,45.00000000 +1792,-3.0,90.000000,0.000000,45.00000000 +1793,-3.0,90.000000,0.000000,45.00000000 +1794,-3.0,90.000000,0.000000,45.00000000 +1795,-3.0,90.000000,0.000000,45.00000000 +1796,-3.0,90.000000,0.000000,45.00000000 +1797,-3.0,90.000000,0.000000,45.00000000 +1798,-3.0,90.000000,0.000000,45.00000000 +1799,-3.0,90.000000,0.000000,45.00000000 +1800,-3.0,90.000000,0.000000,45.00000000 +1801,-3.0,90.000000,0.000000,45.00000000 +1802,-3.0,90.000000,0.000000,45.00000000 +1803,-3.0,90.000000,0.000000,45.00000000 +1804,-3.0,90.000000,0.000000,45.00000000 +1805,-3.0,90.000000,0.000000,45.00000000 +1806,-3.0,90.000000,0.000000,45.00000000 +1807,-3.0,90.000000,0.000000,45.00000000 +1808,-3.0,90.000000,0.000000,45.00000000 +1809,-3.0,90.000000,0.000000,45.00000000 +1810,-3.0,90.000000,0.000000,45.00000000 +1811,-3.0,90.000000,0.000000,45.00000000 +1812,-3.0,90.000000,0.000000,45.00000000 +1813,-3.0,90.000000,0.000000,45.00000000 +1814,-3.0,90.000000,0.000000,45.00000000 +1815,-3.0,90.000000,0.000000,45.00000000 +1816,-3.0,90.000000,0.000000,45.00000000 +1817,-3.0,90.000000,0.000000,45.00000000 +1818,-3.0,90.000000,0.000000,45.00000000 +1819,-3.0,90.000000,0.000000,45.00000000 +1820,-3.0,90.000000,0.000000,45.00000000 +1821,-3.0,90.000000,0.000000,45.00000000 +1822,-3.0,90.000000,0.000000,45.00000000 +1823,-3.0,90.000000,0.000000,45.00000000 +1824,-3.0,90.000000,0.000000,45.00000000 +1825,-3.0,90.000000,0.000000,45.00000000 +1826,-3.0,90.000000,0.000000,45.00000000 +1827,-3.0,90.000000,0.000000,45.00000000 +1828,-3.0,90.000000,0.000000,45.00000000 +1829,-3.0,90.000000,0.000000,45.00000000 +1830,-3.0,90.000000,0.000000,45.00000000 +1831,-3.0,90.000000,0.000000,45.00000000 +1832,-3.0,90.000000,0.000000,45.00000000 +1833,-3.0,90.000000,0.000000,45.00000000 +1834,-3.0,90.000000,0.000000,45.00000000 +1835,-3.0,90.000000,0.000000,45.00000000 +1836,-3.0,90.000000,0.000000,45.00000000 +1837,-3.0,90.000000,0.000000,45.00000000 +1838,-3.0,90.000000,0.000000,45.00000000 +1839,-3.0,90.000000,0.000000,45.00000000 +1840,-3.0,90.000000,0.000000,45.00000000 +1841,-3.0,90.000000,0.000000,45.00000000 +1842,-3.0,90.000000,0.000000,45.00000000 +1843,-3.0,90.000000,0.000000,45.00000000 +1844,-3.0,90.000000,0.000000,45.00000000 +1845,-3.0,90.000000,0.000000,45.00000000 +1846,-3.0,90.000000,0.000000,45.00000000 +1847,-3.0,90.000000,0.000000,45.00000000 +1848,-3.0,90.000000,0.000000,45.00000000 +1849,-3.0,90.000000,0.000000,45.00000000 +1850,-3.0,90.000000,0.000000,45.00000000 +1851,-3.0,90.000000,0.000000,45.00000000 +1852,-3.0,90.000000,0.000000,45.00000000 +1853,-3.0,90.000000,0.000000,45.00000000 +1854,-3.0,90.000000,0.000000,45.00000000 +1855,-3.0,90.000000,0.000000,45.00000000 +1856,-3.0,90.000000,0.000000,45.00000000 +1857,-3.0,90.000000,0.000000,45.00000000 +1858,-3.0,90.000000,0.000000,45.00000000 +1859,-3.0,90.000000,0.000000,45.00000000 +1860,-3.0,90.000000,0.000000,45.00000000 +1861,-3.0,90.000000,0.000000,45.00000000 +1862,-3.0,90.000000,0.000000,45.00000000 +1863,-3.0,90.000000,0.000000,45.00000000 +1864,-3.0,90.000000,0.000000,45.00000000 +1865,-3.0,90.000000,0.000000,45.00000000 +1866,-3.0,90.000000,0.000000,45.00000000 +1867,-3.0,90.000000,0.000000,45.00000000 +1868,-3.0,90.000000,0.000000,45.00000000 +1869,-3.0,90.000000,0.000000,45.00000000 +1870,-3.0,90.000000,0.000000,45.00000000 +1871,-3.0,90.000000,0.000000,45.00000000 +1872,-3.0,90.000000,0.000000,45.00000000 +1873,-3.0,90.000000,0.000000,45.00000000 +1874,-3.0,90.000000,0.000000,45.00000000 +1875,-3.0,90.000000,0.000000,45.00000000 +1876,-3.0,90.000000,0.000000,45.00000000 +1877,-3.0,90.000000,0.000000,45.00000000 +1878,-3.0,90.000000,0.000000,45.00000000 +1879,-3.0,90.000000,0.000000,45.00000000 +1880,-3.0,90.000000,0.000000,45.00000000 +1881,-3.0,90.000000,0.000000,45.00000000 +1882,-3.0,90.000000,0.000000,45.00000000 +1883,-3.0,90.000000,0.000000,45.00000000 +1884,-3.0,90.000000,0.000000,45.00000000 +1885,-3.0,90.000000,0.000000,45.00000000 +1886,-3.0,90.000000,0.000000,45.00000000 +1887,-3.0,90.000000,0.000000,45.00000000 +1888,-3.0,90.000000,0.000000,45.00000000 +1889,-3.0,90.000000,0.000000,45.00000000 +1890,-3.0,90.000000,0.000000,45.00000000 +1891,-3.0,90.000000,0.000000,45.00000000 +1892,-3.0,90.000000,0.000000,45.00000000 +1893,-3.0,90.000000,0.000000,45.00000000 +1894,-3.0,90.000000,0.000000,45.00000000 +1895,-3.0,90.000000,0.000000,45.00000000 +1896,-3.0,90.000000,0.000000,45.00000000 +1897,-3.0,90.000000,0.000000,45.00000000 +1898,-3.0,90.000000,0.000000,45.00000000 +1899,-3.0,90.000000,0.000000,45.00000000 +1900,-3.0,90.000000,0.000000,45.00000000 +1901,-3.0,90.000000,0.000000,45.00000000 +1902,-3.0,90.000000,0.000000,45.00000000 +1903,-3.0,90.000000,0.000000,45.00000000 +1904,-3.0,90.000000,0.000000,45.00000000 +1905,-3.0,90.000000,0.000000,45.00000000 +1906,-3.0,90.000000,0.000000,45.00000000 +1907,-3.0,90.000000,0.000000,45.00000000 +1908,-3.0,90.000000,0.000000,45.00000000 +1909,-3.0,90.000000,0.000000,45.00000000 +1910,-3.0,90.000000,0.000000,45.00000000 +1911,-3.0,90.000000,0.000000,45.00000000 +1912,-3.0,90.000000,0.000000,45.00000000 +1913,-3.0,90.000000,0.000000,45.00000000 +1914,-3.0,90.000000,0.000000,45.00000000 +1915,-3.0,90.000000,0.000000,45.00000000 +1916,-3.0,90.000000,0.000000,45.00000000 +1917,-3.0,90.000000,0.000000,45.00000000 +1918,-3.0,90.000000,0.000000,45.00000000 +1919,-3.0,90.000000,0.000000,45.00000000 +1920,-3.0,90.000000,0.000000,45.00000000 +1921,-3.0,90.000000,0.000000,45.00000000 +1922,-3.0,90.000000,0.000000,45.00000000 +1923,-3.0,90.000000,0.000000,45.00000000 +1924,-3.0,90.000000,0.000000,45.00000000 +1925,-3.0,90.000000,0.000000,45.00000000 +1926,-3.0,90.000000,0.000000,45.00000000 +1927,-3.0,90.000000,0.000000,45.00000000 +1928,-3.0,90.000000,0.000000,45.00000000 +1929,-3.0,90.000000,0.000000,45.00000000 +1930,-3.0,90.000000,0.000000,45.00000000 +1931,-3.0,90.000000,0.000000,45.00000000 +1932,-3.0,90.000000,0.000000,45.00000000 +1933,-3.0,90.000000,0.000000,45.00000000 +1934,-3.0,90.000000,0.000000,45.00000000 +1935,-3.0,90.000000,0.000000,45.00000000 +1936,-3.0,90.000000,0.000000,45.00000000 +1937,-3.0,90.000000,0.000000,45.00000000 +1938,-3.0,90.000000,0.000000,45.00000000 +1939,-3.0,90.000000,0.000000,45.00000000 +1940,-3.0,90.000000,0.000000,45.00000000 +1941,-3.0,90.000000,0.000000,45.00000000 +1942,-3.0,90.000000,0.000000,45.00000000 +1943,-3.0,90.000000,0.000000,45.00000000 +1944,-3.0,90.000000,0.000000,45.00000000 +1945,-3.0,90.000000,0.000000,45.00000000 +1946,-3.0,90.000000,0.000000,45.00000000 +1947,-3.0,90.000000,0.000000,45.00000000 +1948,-3.0,90.000000,0.000000,45.00000000 +1949,-3.0,90.000000,0.000000,45.00000000 +1950,-3.0,90.000000,0.000000,45.00000000 +1951,-3.0,90.000000,0.000000,45.00000000 +1952,-3.0,90.000000,0.000000,45.00000000 +1953,-3.0,90.000000,0.000000,45.00000000 +1954,-3.0,90.000000,0.000000,45.00000000 +1955,-3.0,90.000000,0.000000,45.00000000 +1956,-3.0,90.000000,0.000000,45.00000000 +1957,-3.0,90.000000,0.000000,45.00000000 +1958,-3.0,90.000000,0.000000,45.00000000 +1959,-3.0,90.000000,0.000000,45.00000000 +1960,-3.0,90.000000,0.000000,45.00000000 +1961,-3.0,90.000000,0.000000,45.00000000 +1962,-3.0,90.000000,0.000000,45.00000000 +1963,-3.0,90.000000,0.000000,45.00000000 +1964,-3.0,90.000000,0.000000,45.00000000 +1965,-3.0,90.000000,0.000000,45.00000000 +1966,-3.0,90.000000,0.000000,45.00000000 +1967,-3.0,90.000000,0.000000,45.00000000 +1968,-3.0,90.000000,0.000000,45.00000000 +1969,-3.0,90.000000,0.000000,45.00000000 +1970,-3.0,90.000000,0.000000,45.00000000 +1971,-3.0,90.000000,0.000000,45.00000000 +1972,-3.0,90.000000,0.000000,45.00000000 +1973,-3.0,90.000000,0.000000,45.00000000 +1974,-3.0,90.000000,0.000000,45.00000000 +1975,-3.0,90.000000,0.000000,45.00000000 +1976,-3.0,90.000000,0.000000,45.00000000 +1977,-3.0,90.000000,0.000000,45.00000000 +1978,-3.0,90.000000,0.000000,45.00000000 +1979,-3.0,90.000000,0.000000,45.00000000 +1980,-3.0,90.000000,0.000000,45.00000000 +1981,-3.0,90.000000,0.000000,45.00000000 +1982,-3.0,90.000000,0.000000,45.00000000 +1983,-3.0,90.000000,0.000000,45.00000000 +1984,-3.0,90.000000,0.000000,45.00000000 +1985,-3.0,90.000000,0.000000,45.00000000 +1986,-3.0,90.000000,0.000000,45.00000000 +1987,-3.0,90.000000,0.000000,45.00000000 +1988,-3.0,90.000000,0.000000,45.00000000 +1989,-3.0,90.000000,0.000000,45.0000000 +1990,-3.0,90.000000,0.000000,45.0000000 +1991,-3.0,90.000000,0.000000,45.0000000 +1992,-3.0,90.000000,0.000000,45.0000000 +1993,-3.0,90.000000,0.000000,45.0000000 +1994,-3.0,90.000000,0.000000,45.0000000 +1995,-3.0,90.000000,0.000000,45.0000000 +1996,-3.0,90.000000,0.000000,45.0000000 +1997,-3.0,90.000000,0.000000,45.0000000 +1998,-3.0,90.000000,0.000000,45.0000000 +1999,-3.0,90.000000,0.000000,45.0000000 +2000,-3.0,90.000000,0.000000,45.0000000 +2001,-3.0,90.000000,0.000000,45.0000000 +2002,-3.0,90.000000,0.000000,45.0000000 +2003,-3.0,90.000000,0.000000,45.0000000 +2004,-3.0,90.000000,0.000000,45.0000000 +2005,-3.0,90.000000,0.000000,45.0000000 +2006,-3.0,90.000000,0.000000,45.0000000 +2007,-3.0,90.000000,0.000000,45.0000000 +2008,-3.0,90.000000,0.000000,45.0000000 +2009,-3.0,90.000000,0.000000,45.0000000 +2010,-3.0,90.000000,0.000000,45.0000000 +2011,-3.0,90.000000,0.000000,45.0000000 +2012,-3.0,90.000000,0.000000,45.0000000 +2013,-3.0,90.000000,0.000000,45.0000000 +2014,-3.0,90.000000,0.000000,45.0000000 +2015,-3.0,90.000000,0.000000,45.0000000 +2016,-3.0,90.000000,0.000000,45.0000000 +2017,-3.0,90.000000,0.000000,45.0000000 +2018,-3.0,90.000000,0.000000,45.0000000 +2019,-3.0,90.000000,0.000000,45.0000000 +2020,-3.0,90.000000,0.000000,45.0000000 +2021,-3.0,90.000000,0.000000,45.0000000 +2022,-3.0,90.000000,0.000000,45.0000000 +2023,-3.0,90.000000,0.000000,45.0000000 +2024,-3.0,90.000000,0.000000,45.0000000 +2025,-3.0,90.000000,0.000000,45.0000000 +2026,-3.0,90.000000,0.000000,45.0000000 +2027,-3.0,90.000000,0.000000,45.0000000 +2028,-3.0,90.000000,0.000000,45.0000000 +2029,-3.0,90.000000,0.000000,45.0000000 +2030,-3.0,90.000000,0.000000,45.0000000 +2031,-3.0,90.000000,0.000000,45.0000000 +2032,-3.0,90.000000,0.000000,45.0000000 +2033,-3.0,90.000000,0.000000,45.0000000 +2034,-3.0,90.000000,0.000000,45.0000000 +2035,-3.0,90.000000,0.000000,45.0000000 +2036,-3.0,90.000000,0.000000,45.0000000 +2037,-3.0,90.000000,0.000000,45.0000000 +2038,-3.0,90.000000,0.000000,45.0000000 +2039,-3.0,90.000000,0.000000,45.0000000 +2040,-3.0,90.000000,0.000000,45.0000000 +2041,-3.0,90.000000,0.000000,45.0000000 +2042,-3.0,90.000000,0.000000,45.0000000 +2043,-3.0,90.000000,0.000000,45.0000000 +2044,-3.0,90.000000,0.000000,45.0000000 +2045,-3.0,90.000000,0.000000,45.0000000 +2046,-3.0,90.000000,0.000000,45.0000000 +2047,-3.0,90.000000,0.000000,45.0000000 +2048,-3.0,90.000000,0.000000,45.0000000 +2049,-3.0,90.000000,0.000000,45.0000000 +2050,-3.0,90.000000,0.000000,45.0000000 +2051,-3.0,90.000000,0.000000,45.0000000 +2052,-3.0,90.000000,0.000000,45.0000000 +2053,-3.0,90.000000,0.000000,45.0000000 +2054,-3.0,90.000000,0.000000,45.0000000 +2055,-3.0,90.000000,0.000000,45.0000000 +2056,-3.0,90.000000,0.000000,45.0000000 +2057,-3.0,90.000000,0.000000,45.0000000 +2058,-3.0,90.000000,0.000000,45.0000000 +2059,-3.0,90.000000,0.000000,45.0000000 +2060,-3.0,90.000000,0.000000,45.0000000 +2061,-3.0,90.000000,0.000000,45.0000000 +2062,-3.0,90.000000,0.000000,45.0000000 +2063,-3.0,90.000000,0.000000,45.0000000 +2064,-3.0,90.000000,0.000000,45.0000000 +2065,-3.0,90.000000,0.000000,45.0000000 +2066,-3.0,90.000000,0.000000,45.0000000 +2067,-3.0,90.000000,0.000000,45.0000000 +2068,-3.0,90.000000,0.000000,45.0000000 +2069,-3.0,90.000000,0.000000,45.0000000 +2070,-3.0,90.000000,0.000000,45.0000000 +2071,-3.0,90.000000,0.000000,45.0000000 +2072,-3.0,90.000000,0.000000,45.0000000 +2073,-3.0,90.000000,0.000000,45.0000000 +2074,-3.0,90.000000,0.000000,45.0000000 +2075,-3.0,90.000000,0.000000,45.0000000 +2076,-3.0,90.000000,0.000000,45.0000000 +2077,-3.0,90.000000,0.000000,45.0000000 +2078,-3.0,90.000000,0.000000,45.0000000 +2079,-3.0,90.000000,0.000000,45.0000000 +2080,-3.0,90.000000,0.000000,45.0000000 +2081,-3.0,90.000000,0.000000,45.0000000 +2082,-3.0,90.000000,0.000000,45.0000000 +2083,-3.0,90.000000,0.000000,45.0000000 +2084,-3.0,90.000000,0.000000,45.0000000 +2085,-3.0,90.000000,0.000000,45.0000000 +2086,-3.0,90.000000,0.000000,45.0000000 +2087,-3.0,90.000000,0.000000,45.0000000 +2088,-3.0,90.000000,0.000000,45.0000000 +2089,-3.0,90.000000,0.000000,45.0000000 +2090,-3.0,90.000000,0.000000,45.0000000 +2091,-3.0,90.000000,0.000000,45.0000000 +2092,-3.0,90.000000,0.000000,45.0000000 +2093,-3.0,90.000000,0.000000,45.0000000 +2094,-3.0,90.000000,0.000000,45.0000000 +2095,-3.0,90.000000,0.000000,45.0000000 +2096,-3.0,90.000000,0.000000,45.0000000 +2097,-3.0,90.000000,0.000000,45.0000000 +2098,-3.0,90.000000,0.000000,45.0000000 +2099,-3.0,90.000000,0.000000,45.0000000 +2100,-3.0,90.000000,0.000000,-45.000000 +2101,-3.0,90.000000,0.000000,-45.000000 +2102,-3.0,90.000000,0.000000,-45.000000 +2103,-3.0,90.000000,0.000000,-45.000000 +2104,-3.0,90.000000,0.000000,-45.000000 +2105,-3.0,90.000000,0.000000,-45.000000 +2106,-3.0,90.000000,0.000000,-45.000000 +2107,-3.0,90.000000,0.000000,-45.000000 +2108,-3.0,90.000000,0.000000,-45.000000 +2109,-3.0,90.000000,0.000000,-45.000000 +2110,-3.0,90.000000,0.000000,-45.000000 +2111,-3.0,90.000000,0.000000,-45.000000 +2112,-3.0,90.000000,0.000000,-45.000000 +2113,-3.0,90.000000,0.000000,-45.000000 +2114,-3.0,90.000000,0.000000,-45.000000 +2115,-3.0,90.000000,0.000000,-45.000000 +2116,-3.0,90.000000,0.000000,-45.000000 +2117,-3.0,90.000000,0.000000,-45.000000 +2118,-3.0,90.000000,0.000000,-45.000000 +2119,-3.0,90.000000,0.000000,-45.000000 +2120,-3.0,90.000000,0.000000,-45.000000 +2121,-3.0,90.000000,0.000000,-45.000000 +2122,-3.0,90.000000,0.000000,-45.000000 +2123,-3.0,90.000000,0.000000,-45.000000 +2124,-3.0,90.000000,0.000000,-45.000000 +2125,-3.0,90.000000,0.000000,-45.000000 +2126,-3.0,90.000000,0.000000,-45.000000 +2127,-3.0,90.000000,0.000000,-45.000000 +2128,-3.0,90.000000,0.000000,-45.000000 +2129,-3.0,90.000000,0.000000,-45.000000 +2130,-3.0,90.000000,0.000000,-45.000000 +2131,-3.0,90.000000,0.000000,-45.000000 +2132,-3.0,90.000000,0.000000,-45.000000 +2133,-3.0,90.000000,0.000000,-45.000000 +2134,-3.0,90.000000,0.000000,-45.000000 +2135,-3.0,90.000000,0.000000,-45.000000 +2136,-3.0,90.000000,0.000000,-45.000000 +2137,-3.0,90.000000,0.000000,-45.000000 +2138,-3.0,90.000000,0.000000,-45.000000 +2139,-3.0,90.000000,0.000000,-45.000000 +2140,-3.0,90.000000,0.000000,-45.000000 +2141,-3.0,90.000000,0.000000,-45.000000 +2142,-3.0,90.000000,0.000000,-45.000000 +2143,-3.0,90.000000,0.000000,-45.000000 +2144,-3.0,90.000000,0.000000,-45.000000 +2145,-3.0,90.000000,0.000000,-45.000000 +2146,-3.0,90.000000,0.000000,-45.000000 +2147,-3.0,90.000000,0.000000,-45.000000 +2148,-3.0,90.000000,0.000000,-45.000000 +2149,-3.0,90.000000,0.000000,-45.000000 +2150,-3.0,90.000000,0.000000,-45.000000 +2151,-3.0,90.000000,0.000000,-45.000000 +2152,-3.0,90.000000,0.000000,-45.000000 +2153,-3.0,90.000000,0.000000,-45.000000 +2154,-3.0,90.000000,0.000000,-45.000000 +2155,-3.0,90.000000,0.000000,-45.000000 +2156,-3.0,90.000000,0.000000,-45.000000 +2157,-3.0,90.000000,0.000000,-45.000000 +2158,-3.0,90.000000,0.000000,-45.000000 +2159,-3.0,90.000000,0.000000,-45.000000 +2160,-3.0,90.000000,0.000000,-45.000000 +2161,-3.0,90.000000,0.000000,-45.000000 +2162,-3.0,90.000000,0.000000,-45.000000 +2163,-3.0,90.000000,0.000000,-45.000000 +2164,-3.0,90.000000,0.000000,-45.000000 +2165,-3.0,90.000000,0.000000,-45.000000 +2166,-3.0,90.000000,0.000000,-45.000000 +2167,-3.0,90.000000,0.000000,-45.000000 +2168,-3.0,90.000000,0.000000,-45.000000 +2169,-3.0,90.000000,0.000000,-45.000000 +2170,-3.0,90.000000,0.000000,-45.000000 +2171,-3.0,90.000000,0.000000,-45.000000 +2172,-3.0,90.000000,0.000000,-45.000000 +2173,-3.0,90.000000,0.000000,-45.000000 +2174,-3.0,90.000000,0.000000,-45.000000 +2175,-3.0,90.000000,0.000000,-45.000000 +2176,-3.0,90.000000,0.000000,-45.000000 +2177,-3.0,90.000000,0.000000,-45.000000 +2178,-3.0,90.000000,0.000000,-45.000000 +2179,-3.0,90.000000,0.000000,-45.000000 +2180,-3.0,90.000000,0.000000,-45.000000 +2181,-3.0,90.000000,0.000000,-45.000000 +2182,-3.0,90.000000,0.000000,-45.000000 +2183,-3.0,90.000000,0.000000,-45.000000 +2184,-3.0,90.000000,0.000000,-45.000000 +2185,-3.0,90.000000,0.000000,-45.000000 +2186,-3.0,90.000000,0.000000,-45.000000 +2187,-3.0,90.000000,0.000000,-45.000000 +2188,-3.0,90.000000,0.000000,-45.000000 +2189,-3.0,90.000000,0.000000,-45.000000 +2190,-3.0,90.000000,0.000000,-45.000000 +2191,-3.0,90.000000,0.000000,-45.000000 +2192,-3.0,90.000000,0.000000,-45.000000 +2193,-3.0,90.000000,0.000000,-45.000000 +2194,-3.0,90.000000,0.000000,-45.000000 +2195,-3.0,90.000000,0.000000,-45.000000 +2196,-3.0,90.000000,0.000000,-45.000000 +2197,-3.0,90.000000,0.000000,-45.000000 +2198,-3.0,90.000000,0.000000,-45.000000 +2199,-3.0,90.000000,0.000000,-45.000000 +2200,-3.0,90.000000,0.000000,-45.000000 +2201,-3.0,90.000000,0.000000,-45.000000 +2202,-3.0,90.000000,0.000000,-45.000000 +2203,-3.0,90.000000,0.000000,-45.000000 +2204,-3.0,90.000000,0.000000,-45.000000 +2205,-3.0,90.000000,0.000000,-45.000000 +2206,-3.0,90.000000,0.000000,-45.000000 +2207,-3.0,90.000000,0.000000,-45.000000 +2208,-3.0,90.000000,0.000000,-45.000000 +2209,-3.0,90.000000,0.000000,-45.000000 +2210,-3.0,90.000000,0.000000,-45.000000 +2211,-3.0,90.000000,0.000000,-45.000000 +2212,-3.0,90.000000,0.000000,-45.000000 +2213,-3.0,90.000000,0.000000,-45.000000 +2214,-3.0,90.000000,0.000000,-45.000000 +2215,-3.0,90.000000,0.000000,-45.000000 +2216,-3.0,90.000000,0.000000,-45.000000 +2217,-3.0,90.000000,0.000000,-45.000000 +2218,-3.0,90.000000,0.000000,-45.000000 +2219,-3.0,90.000000,0.000000,-45.000000 +2220,-3.0,90.000000,0.000000,-45.000000 +2221,-3.0,90.000000,0.000000,-45.000000 +2222,-3.0,90.000000,0.000000,-45.000000 +2223,-3.0,90.000000,0.000000,-45.000000 +2224,-3.0,90.000000,0.000000,-45.000000 +2225,-3.0,90.000000,0.000000,-45.000000 +2226,-3.0,90.000000,0.000000,-45.000000 +2227,-3.0,90.000000,0.000000,-45.000000 +2228,-3.0,90.000000,0.000000,-45.000000 +2229,-3.0,90.000000,0.000000,-45.000000 +2230,-3.0,90.000000,0.000000,-45.000000 +2231,-3.0,90.000000,0.000000,-45.000000 +2232,-3.0,90.000000,0.000000,-45.000000 +2233,-3.0,90.000000,0.000000,-45.000000 +2234,-3.0,90.000000,0.000000,-45.000000 +2235,-3.0,90.000000,0.000000,-45.000000 +2236,-3.0,90.000000,0.000000,-45.000000 +2237,-3.0,90.000000,0.000000,-45.000000 +2238,-3.0,90.000000,0.000000,-45.000000 +2239,-3.0,90.000000,0.000000,-45.000000 +2240,-3.0,90.000000,0.000000,-45.000000 +2241,-3.0,90.000000,0.000000,-45.000000 +2242,-3.0,90.000000,0.000000,-45.000000 +2243,-3.0,90.000000,0.000000,-45.000000 +2244,-3.0,90.000000,0.000000,-45.000000 +2245,-3.0,90.000000,0.000000,-45.000000 +2246,-3.0,90.000000,0.000000,-45.000000 +2247,-3.0,90.000000,0.000000,-45.000000 +2248,-3.0,90.000000,0.000000,-45.000000 +2249,-3.0,90.000000,0.000000,-45.000000 +2250,-3.0,90.000000,0.000000,-45.000000 +2251,-3.0,90.000000,0.000000,-45.000000 +2252,-3.0,90.000000,0.000000,-45.000000 +2253,-3.0,90.000000,0.000000,-45.000000 +2254,-3.0,90.000000,0.000000,-45.000000 +2255,-3.0,90.000000,0.000000,-45.000000 +2256,-3.0,90.000000,0.000000,-45.000000 +2257,-3.0,90.000000,0.000000,-45.000000 +2258,-3.0,90.000000,0.000000,-45.000000 +2259,-3.0,90.000000,0.000000,-45.000000 +2260,-3.0,90.000000,0.000000,-45.000000 +2261,-3.0,90.000000,0.000000,-45.000000 +2262,-3.0,90.000000,0.000000,-45.000000 +2263,-3.0,90.000000,0.000000,-45.000000 +2264,-3.0,90.000000,0.000000,-45.000000 +2265,-3.0,90.000000,0.000000,-45.000000 +2266,-3.0,90.000000,0.000000,-45.000000 +2267,-3.0,90.000000,0.000000,-45.000000 +2268,-3.0,90.000000,0.000000,-45.000000 +2269,-3.0,90.000000,0.000000,-45.000000 +2270,-3.0,90.000000,0.000000,-45.000000 +2271,-3.0,90.000000,0.000000,-45.000000 +2272,-3.0,90.000000,0.000000,-45.000000 +2273,-3.0,90.000000,0.000000,-45.000000 +2274,-3.0,90.000000,0.000000,-45.000000 +2275,-3.0,90.000000,0.000000,-45.000000 +2276,-3.0,90.000000,0.000000,-45.000000 +2277,-3.0,90.000000,0.000000,-45.000000 +2278,-3.0,90.000000,0.000000,-45.000000 +2279,-3.0,90.000000,0.000000,-45.000000 +2280,-3.0,90.000000,0.000000,-45.000000 +2281,-3.0,90.000000,0.000000,-45.000000 +2282,-3.0,90.000000,0.000000,-45.000000 +2283,-3.0,90.000000,0.000000,-45.000000 +2284,-3.0,90.000000,0.000000,-45.000000 +2285,-3.0,90.000000,0.000000,-45.000000 +2286,-3.0,90.000000,0.000000,-45.000000 +2287,-3.0,90.000000,0.000000,-45.000000 +2288,-3.0,90.000000,0.000000,-45.000000 +2289,-3.0,90.000000,0.000000,-45.000000 +2290,-3.0,90.000000,0.000000,-45.000000 +2291,-3.0,90.000000,0.000000,-45.000000 +2292,-3.0,90.000000,0.000000,-45.000000 +2293,-3.0,90.000000,0.000000,-45.000000 +2294,-3.0,90.000000,0.000000,-45.000000 +2295,-3.0,90.000000,0.000000,-45.000000 +2296,-3.0,90.000000,0.000000,-45.000000 +2297,-3.0,90.000000,0.000000,-45.000000 +2298,-3.0,90.000000,0.000000,-45.000000 +2299,-3.0,90.000000,0.000000,-45.000000 +2300,-3.0,90.000000,0.000000,-45.000000 +2301,-3.0,90.000000,0.000000,-45.000000 +2302,-3.0,90.000000,0.000000,-45.000000 +2303,-3.0,90.000000,0.000000,-45.000000 +2304,-3.0,90.000000,0.000000,-45.000000 +2305,-3.0,90.000000,0.000000,-45.000000 +2306,-3.0,90.000000,0.000000,-45.000000 +2307,-3.0,90.000000,0.000000,-45.000000 +2308,-3.0,90.000000,0.000000,-45.000000 +2309,-3.0,90.000000,0.000000,-45.000000 +2310,-3.0,90.000000,0.000000,-45.000000 +2311,-3.0,90.000000,0.000000,-45.000000 +2312,-3.0,90.000000,0.000000,-45.000000 +2313,-3.0,90.000000,0.000000,-45.000000 +2314,-3.0,90.000000,0.000000,-45.000000 +2315,-3.0,90.000000,0.000000,-45.000000 +2316,-3.0,90.000000,0.000000,-45.000000 +2317,-3.0,90.000000,0.000000,-45.000000 +2318,-3.0,90.000000,0.000000,-45.000000 +2319,-3.0,90.000000,0.000000,-45.000000 +2320,-3.0,90.000000,0.000000,-45.000000 +2321,-3.0,90.000000,0.000000,-45.000000 +2322,-3.0,90.000000,0.000000,-45.000000 +2323,-3.0,90.000000,0.000000,-45.000000 +2324,-3.0,90.000000,0.000000,-45.000000 +2325,-3.0,90.000000,0.000000,-45.000000 +2326,-3.0,90.000000,0.000000,-45.000000 +2327,-3.0,90.000000,0.000000,-45.000000 +2328,-3.0,90.000000,0.000000,-45.000000 +2329,-3.0,90.000000,0.000000,-45.000000 +2330,-3.0,90.000000,0.000000,-45.000000 +2331,-3.0,90.000000,0.000000,-45.000000 +2332,-3.0,90.000000,0.000000,-45.000000 +2333,-3.0,90.000000,0.000000,-45.000000 +2334,-3.0,90.000000,0.000000,-45.000000 +2335,-3.0,90.000000,0.000000,-45.000000 +2336,-3.0,90.000000,0.000000,-45.000000 +2337,-3.0,90.000000,0.000000,-45.000000 +2338,-3.0,90.000000,0.000000,-45.000000 +2339,-3.0,90.000000,0.000000,-45.000000 +2340,-3.0,90.000000,0.000000,-45.000000 +2341,-3.0,90.000000,0.000000,-45.000000 +2342,-3.0,90.000000,0.000000,-45.000000 +2343,-3.0,90.000000,0.000000,-45.000000 +2344,-3.0,90.000000,0.000000,-45.000000 +2345,-3.0,90.000000,0.000000,-45.000000 +2346,-3.0,90.000000,0.000000,-45.000000 +2347,-3.0,90.000000,0.000000,-45.000000 +2348,-3.0,90.000000,0.000000,-45.000000 +2349,-3.0,90.000000,0.000000,-45.000000 +2350,-3.0,90.000000,0.000000,-45.000000 +2351,-3.0,90.000000,0.000000,-45.000000 +2352,-3.0,90.000000,0.000000,-45.000000 +2353,-3.0,90.000000,0.000000,-45.000000 +2354,-3.0,90.000000,0.000000,-45.000000 +2355,-3.0,90.000000,0.000000,-45.000000 +2356,-3.0,90.000000,0.000000,-45.000000 +2357,-3.0,90.000000,0.000000,-45.000000 +2358,-3.0,90.000000,0.000000,-45.000000 +2359,-3.0,90.000000,0.000000,-45.000000 +2360,-3.0,90.000000,0.000000,-45.000000 +2361,-3.0,90.000000,0.000000,-45.000000 +2362,-3.0,90.000000,0.000000,-45.000000 +2363,-3.0,90.000000,0.000000,-45.000000 +2364,-3.0,90.000000,0.000000,-45.000000 +2365,-3.0,90.000000,0.000000,-45.000000 +2366,-3.0,90.000000,0.000000,-45.000000 +2367,-3.0,90.000000,0.000000,-45.000000 +2368,-3.0,90.000000,0.000000,-45.000000 +2369,-3.0,90.000000,0.000000,-45.000000 +2370,-3.0,90.000000,0.000000,-45.000000 +2371,-3.0,90.000000,0.000000,-45.000000 +2372,-3.0,90.000000,0.000000,-45.000000 +2373,-3.0,90.000000,0.000000,-45.000000 +2374,-3.0,90.000000,0.000000,-45.000000 +2375,-3.0,90.000000,0.000000,-45.000000 +2376,-3.0,90.000000,0.000000,-45.000000 +2377,-3.0,90.000000,0.000000,-45.000000 +2378,-3.0,90.000000,0.000000,-45.000000 +2379,-3.0,90.000000,0.000000,-45.000000 +2380,-3.0,90.000000,0.000000,-45.000000 +2381,-3.0,90.000000,0.000000,-45.000000 +2382,-3.0,90.000000,0.000000,-45.000000 +2383,-3.0,90.000000,0.000000,-45.000000 +2384,-3.0,90.000000,0.000000,-45.000000 +2385,-3.0,90.000000,0.000000,-45.000000 +2386,-3.0,90.000000,0.000000,-45.000000 +2387,-3.0,90.000000,0.000000,-45.000000 +2388,-3.0,90.000000,0.000000,-45.000000 +2389,-3.0,90.000000,0.000000,-45.000000 +2390,-3.0,90.000000,0.000000,-45.000000 +2391,-3.0,90.000000,0.000000,-45.000000 +2392,-3.0,90.000000,0.000000,-45.000000 +2393,-3.0,90.000000,0.000000,-45.000000 +2394,-3.0,90.000000,0.000000,-45.000000 +2395,-3.0,90.000000,0.000000,-45.000000 +2396,-3.0,90.000000,0.000000,-45.000000 +2397,-3.0,90.000000,0.000000,-45.000000 +2398,-3.0,90.000000,0.000000,-45.000000 +2399,-3.0,90.000000,0.000000,-45.000000 + diff --git a/scripts/wmc_tool.exe b/scripts/wmc_tool.exe new file mode 100644 index 0000000000..5524302886 --- /dev/null +++ b/scripts/wmc_tool.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b213d20b8edf59a094f0d9d4dd2624d4bf9944d1cf7f9732b302c580b790bed1 +size 207360 diff --git a/work_in_progress/IVAS-MP-HOA.zip b/work_in_progress/IVAS-MP-HOA.zip new file mode 100644 index 0000000000..f003258849 --- /dev/null +++ b/work_in_progress/IVAS-MP-HOA.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2815d90a74e22fe95933fa8a3e688a722e4658b9fc4708014046e400a352bad +size 333148 diff --git a/work_in_progress/readme.txt b/work_in_progress/readme.txt new file mode 100644 index 0000000000..e06e36def1 --- /dev/null +++ b/work_in_progress/readme.txt @@ -0,0 +1,38 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + + +Note: Contributions found in the directory work_in_progress are work in +progress, lacking integration, evaluation and decision. + +The delta is relative to IVAS_Pre-Release_Float_ANSI-C__2022_02_06.zip, +as published on https://immersivevoiceandaudio.org. -- GitLab